From 9d22306a2c2c422a6fe64bc96f29bffe86532373 Mon Sep 17 00:00:00 2001 From: stc Date: Wed, 9 Jan 2019 14:39:37 +0100 Subject: [PATCH] starting audiocontext (Days 21-25) --- Day-21-Dimension-Reduction/dist/main.js | 12 +- Day-21-Dimension-Reduction/package-lock.json | 1699 +++++++++--------- Day-21-Dimension-Reduction/package.json | 1 + Day-21-Dimension-Reduction/src/index.js | 6 +- Day-22-Hexagon-Tiling/dist/main.js | 12 +- Day-22-Hexagon-Tiling/package-lock.json | 1699 +++++++++--------- Day-22-Hexagon-Tiling/package.json | 1 + Day-22-Hexagon-Tiling/src/index.js | 4 + Day-23-Prime-Distribution/dist/main.js | 12 +- Day-23-Prime-Distribution/package-lock.json | 1699 +++++++++--------- Day-23-Prime-Distribution/package.json | 1 + Day-23-Prime-Distribution/src/index.js | 5 + Day-24-Noise-Pianist/dist/main.js | 12 +- Day-24-Noise-Pianist/package-lock.json | 1699 +++++++++--------- Day-24-Noise-Pianist/package.json | 1 + Day-24-Noise-Pianist/src/index.js | 5 + Day-25-Entropy/dist/main.js | 12 +- Day-25-Entropy/package-lock.json | 1699 +++++++++--------- Day-25-Entropy/package.json | 1 + Day-25-Entropy/src/index.js | 6 + 20 files changed, 4335 insertions(+), 4251 deletions(-) diff --git a/Day-21-Dimension-Reduction/dist/main.js b/Day-21-Dimension-Reduction/dist/main.js index 511ba05..db71370 100644 --- a/Day-21-Dimension-Reduction/dist/main.js +++ b/Day-21-Dimension-Reduction/dist/main.js @@ -1,8 +1,14 @@ -!function(t){var e={};function i(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=t,i.c=e,i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)i.d(r,n,function(e){return t[e]}.bind(null,n));return r},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=3)}([function(t,e,i){var r;void 0===(r=function(){return function(){"use strict";var t;function e(e){e(t)} +!function(t){var e={};function i(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=t,i.c=e,i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)i.d(r,n,function(e){return t[e]}.bind(null,n));return r},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=4)}([function(t,e,i){var r;void 0===(r=function(){return function(){"use strict";var t;function e(e){e(t)} /** * Tone.js * @author Yotam Mann * @license http://opensource.org/licenses/MIT MIT License * @copyright 2014-2018 Yotam Mann - */return function(e){t=e()}(function(){var t=function(){if(!(this instanceof t))throw new Error("constructor needs to be called with the 'new' keyword")};t.prototype.toString=function(){for(var e in t){var i=e[0].match(/^[A-Z]$/),r=t[e]===this.constructor;if(t.isFunction(t[e])&&i&&r)return e}return"Tone"},t.prototype.dispose=function(){return this},t.prototype.set=function(e,i,r){if(t.isObject(e))r=i;else if(t.isString(e)){var n={};n[e]=i,e=n}t:for(var o in e){i=e[o];var s=this;if(-1!==o.indexOf(".")){for(var a=o.split("."),h=0;hthis.memory){var r=this.length-this.memory;this._timeline.splice(0,r)}return this},t.Timeline.prototype.remove=function(t){var e=this._timeline.indexOf(t);return-1!==e&&this._timeline.splice(e,1),this},t.Timeline.prototype.get=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return-1!==r?this._timeline[r]:null},t.Timeline.prototype.peek=function(){return this._timeline[0]},t.Timeline.prototype.shift=function(){return this._timeline.shift()},t.Timeline.prototype.getAfter=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return r+10&&this._timeline[r-1][i]=0?this._timeline[n-1]:null},t.Timeline.prototype.cancel=function(t){if(this._timeline.length>1){var e=this._search(t);if(e>=0)if(this._timeline[e].time===t){for(var i=e;i>=0&&this._timeline[i].time===t;i--)e=i;this._timeline=this._timeline.slice(0,e)}else this._timeline=this._timeline.slice(0,e+1);else this._timeline=[]}else 1===this._timeline.length&&this._timeline[0].time>=t&&(this._timeline=[]);return this},t.Timeline.prototype.cancelBefore=function(t){var e=this._search(t);return e>=0&&(this._timeline=this._timeline.slice(e+1)),this},t.Timeline.prototype.previousEvent=function(t){var e=this._timeline.indexOf(t);return e>0?this._timeline[e-1]:null},t.Timeline.prototype._search=function(e,i){if(0===this._timeline.length)return-1;i=t.defaultArg(i,"time");var r=0,n=this._timeline.length,o=n;if(n>0&&this._timeline[n-1][i]<=e)return n-1;for(;re)return s;a[i]>e?o=s:r=s+1}return-1},t.Timeline.prototype._iterate=function(e,i,r){i=t.defaultArg(i,0),r=t.defaultArg(r,this._timeline.length-1),this._timeline.slice(i,r+1).forEach(function(t){e.call(this,t)}.bind(this))},t.Timeline.prototype.forEach=function(t){return this._iterate(t),this},t.Timeline.prototype.forEachBefore=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(e,0,i),this},t.Timeline.prototype.forEachAfter=function(t,e){var i=this._search(t);return this._iterate(e,i+1),this},t.Timeline.prototype.forEachBetween=function(t,e,i){var r=this._search(t),n=this._search(e);return-1!==r&&-1!==n?(this._timeline[r].time!==t&&(r+=1),this._timeline[n].time===e&&(n-=1),this._iterate(i,r,n)):-1===r&&this._iterate(i,0,n),this},t.Timeline.prototype.forEachFrom=function(t,e){for(var i=this._search(t);i>=0&&this._timeline[i].time>=t;)i--;return this._iterate(e,i+1),this},t.Timeline.prototype.forEachAtTime=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(function(i){i.time===t&&e.call(this,i)},0,i),this},t.Timeline.prototype.dispose=function(){return t.prototype.dispose.call(this),this._timeline=null,this},t.Timeline}),e(function(t){t.supported&&(!window.hasOwnProperty("OfflineAudioContext")&&window.hasOwnProperty("webkitOfflineAudioContext")&&(window.OfflineAudioContext=window.webkitOfflineAudioContext),new OfflineAudioContext(1,1,44100).startRendering()instanceof Promise||(OfflineAudioContext.prototype._native_startRendering=OfflineAudioContext.prototype.startRendering,OfflineAudioContext.prototype.startRendering=function(){return new Promise(function(t){this.oncomplete=function(e){t(e.renderedBuffer)},this._native_startRendering()}.bind(this))}))}),e(function(t){if(t.supported){!window.hasOwnProperty("AudioContext")&&window.hasOwnProperty("webkitAudioContext")&&(window.AudioContext=window.webkitAudioContext),AudioContext.prototype.close||(AudioContext.prototype.close=function(){return t.isFunction(this.suspend)&&this.suspend(),Promise.resolve()}),AudioContext.prototype.resume||(AudioContext.prototype.resume=function(){return Promise.resolve()}),!AudioContext.prototype.createGain&&AudioContext.prototype.createGainNode&&(AudioContext.prototype.createGain=AudioContext.prototype.createGainNode),!AudioContext.prototype.createDelay&&AudioContext.prototype.createDelayNode&&(AudioContext.prototype.createDelay=AudioContext.prototype.createDelayNode);var e=!1,i=new OfflineAudioContext(1,1,44100),r=new Uint32Array([1179011410,48,1163280727,544501094,16,131073,44100,176400,1048580,1635017060,8,0,0,0,0]).buffer;try{i.decodeAudioData(r)instanceof Promise&&(e=!0)}catch(t){e=!1}e||(AudioContext.prototype._native_decodeAudioData=AudioContext.prototype.decodeAudioData,AudioContext.prototype.decodeAudioData=function(t){return new Promise(function(e,i){this._native_decodeAudioData(t,e,i)}.bind(this))})}}),e(function(t){t.Context=function(){t.Emitter.call(this);var i=t.defaults(arguments,["context"],t.Context);if(!i.context&&(i.context=new window.AudioContext,!i.context))throw new Error("could not create AudioContext. Possibly too many AudioContexts running already.");for(var r in this._context=i.context,this._context)this._defineProperty(this._context,r);this._latencyHint=i.latencyHint,this._constants={},this.lookAhead=i.lookAhead,this._computedUpdateInterval=0,this._ticker=new e(this.emit.bind(this,"tick"),i.clockSource,i.updateInterval),this._timeouts=new t.Timeline,this._timeoutIds=0,this.on("tick",this._timeoutLoop.bind(this))},t.extend(t.Context,t.Emitter),t.Emitter.mixin(t.Context),t.Context.defaults={clockSource:"worker",latencyHint:"interactive",lookAhead:.1,updateInterval:.03},t.Context.prototype._defineProperty=function(e,i){t.isUndef(this[i])&&Object.defineProperty(this,i,{get:function(){return"function"==typeof e[i]?e[i].bind(e):e[i]},set:function(t){e[i]=t}})},t.Context.prototype.now=function(){return this._context.currentTime+this.lookAhead},t.Context.prototype.ready=function(){return new Promise(function(t){"running"===this._context.state?t():this._context.resume().then(function(){t()})}.bind(this))},t.Context.prototype.close=function(){return this._context.close().then(function(){t.Context.emit("close",this)}.bind(this))},t.Context.prototype.getConstant=function(t){if(this._constants[t])return this._constants[t];for(var e=this._context.createBuffer(1,128,this._context.sampleRate),i=e.getChannelData(0),r=0;r1&&(this.input=new Array(t)),1===e?this.output=this.context.createGain():e>1&&(this.output=new Array(e))},Object.defineProperty(t.AudioNode.prototype,"channelCount",{get:function(){return this.output.channelCount},set:function(t){return this.output.channelCount=t}}),Object.defineProperty(t.AudioNode.prototype,"channelCountMode",{get:function(){return this.output.channelCountMode},set:function(t){return this.output.channelCountMode=t}}),Object.defineProperty(t.AudioNode.prototype,"channelInterpretation",{get:function(){return this.output.channelInterpretation},set:function(t){return this.output.channelInterpretation=t}}),Object.defineProperty(t.AudioNode.prototype,"numberOfInputs",{get:function(){return this.input?t.isArray(this.input)?this.input.length:1:0}}),Object.defineProperty(t.AudioNode.prototype,"numberOfOutputs",{get:function(){return this.output?t.isArray(this.output)?this.output.length:1:0}}),t.AudioNode.prototype._onConnect=function(){},t.AudioNode.prototype.connect=function(e,i,r){return e._onConnect&&e._onConnect(this),t.isArray(this.output)?(i=t.defaultArg(i,0),this.output[i].connect(e,0,r)):this.output.connect(e,i,r),this},t.AudioNode.prototype.disconnect=function(e,i,r){t.isArray(this.output)?t.isNumber(e)?this.output[e].disconnect():(i=t.defaultArg(i,0),this.output[i].disconnect(e,0,r)):this.output.disconnect.apply(this.output,arguments)},t.AudioNode.prototype.chain=function(){for(var t=this,e=0;e3&&(r=parseFloat(parseFloat(r).toFixed(3))),[i,e,r].join(":")},t.Time.prototype.toTicks=function(){var t=this._beatsToUnits(1),e=this.valueOf()/t;return Math.round(e*this._getPPQ())},t.Time.prototype.toSeconds=function(){return this.valueOf()},t.Time.prototype.toMidi=function(){return t.Frequency.ftom(this.toFrequency())},t.Time}),e(function(t){return t.TransportTime=function(e,i){if(!(this instanceof t.TransportTime))return new t.TransportTime(e,i);t.Time.call(this,e,i)},t.extend(t.TransportTime,t.Time),t.TransportTime.prototype._now=function(){return t.Transport.seconds},t.TransportTime}),e(function(t){return t.Type={Default:"number",Time:"time",Frequency:"frequency",TransportTime:"transportTime",Ticks:"ticks",NormalRange:"normalRange",AudioRange:"audioRange",Decibels:"db",Interval:"interval",BPM:"bpm",Positive:"positive",Gain:"gain",Cents:"cents",Degrees:"degrees",MIDI:"midi",BarsBeatsSixteenths:"barsBeatsSixteenths",Samples:"samples",Hertz:"hertz",Note:"note",Milliseconds:"milliseconds",Seconds:"seconds",Notation:"notation"},t.prototype.toSeconds=function(e){return t.isNumber(e)?e:t.isUndef(e)?this.now():t.isString(e)?new t.Time(e).toSeconds():e instanceof t.TimeBase?e.toSeconds():void 0},t.prototype.toFrequency=function(e){return t.isNumber(e)?e:t.isString(e)||t.isUndef(e)?new t.Frequency(e).valueOf():e instanceof t.TimeBase?e.toFrequency():void 0},t.prototype.toTicks=function(e){return t.isNumber(e)||t.isString(e)?new t.TransportTime(e).toTicks():t.isUndef(e)?t.Transport.ticks:e instanceof t.TimeBase?e.toTicks():void 0},t}),e(function(t){return t.Param=function(){var e=t.defaults(arguments,["param","units","convert"],t.Param);t.AudioNode.call(this),this._param=this.input=e.param,this.units=e.units,this.convert=e.convert,this.overridden=!1,this._events=new t.Timeline(1e3),t.isDefined(e.value)&&this._param&&(this.value=e.value)},t.extend(t.Param,t.AudioNode),t.Param.defaults={units:t.Type.Default,convert:!0,param:void 0},Object.defineProperty(t.Param.prototype,"value",{get:function(){var t=this.now();return this._toUnits(this.getValueAtTime(t))},set:function(t){this._initialValue=this._fromUnits(t),this.cancelScheduledValues(this.context.currentTime),this.setValueAtTime(t,this.context.currentTime)}}),Object.defineProperty(t.Param.prototype,"minValue",{get:function(){return this.units===t.Type.Time||this.units===t.Type.Frequency||this.units===t.Type.NormalRange||this.units===t.Type.Positive||this.units===t.Type.BPM?0:this.units===t.Type.AudioRange?-1:this.units===t.Type.Decibels?-1/0:this._param.minValue}}),Object.defineProperty(t.Param.prototype,"maxValue",{get:function(){return this.units===t.Type.NormalRange||this.units===t.Type.AudioRange?1:this._param.maxValue}}),t.Param.prototype._fromUnits=function(e){if(!this.convert&&!t.isUndef(this.convert)||this.overridden)return e;switch(this.units){case t.Type.Time:return this.toSeconds(e);case t.Type.Frequency:return this.toFrequency(e);case t.Type.Decibels:return t.dbToGain(e);case t.Type.NormalRange:return Math.min(Math.max(e,0),1);case t.Type.AudioRange:return Math.min(Math.max(e,-1),1);case t.Type.Positive:return Math.max(e,0);default:return e}},t.Param.prototype._toUnits=function(e){if(!this.convert&&!t.isUndef(this.convert))return e;switch(this.units){case t.Type.Decibels:return t.gainToDb(e);default:return e}},t.Param.prototype._minOutput=1e-5,t.Param.AutomationType={Linear:"linearRampToValueAtTime",Exponential:"exponentialRampToValueAtTime",Target:"setTargetAtTime",SetValue:"setValueAtTime"},t.Param.prototype.setValueAtTime=function(e,i){return i=this.toSeconds(i),e=this._fromUnits(e),this._events.add({type:t.Param.AutomationType.SetValue,value:e,time:i}),this._param.setValueAtTime(e,i),this},t.Param.prototype.getValueAtTime=function(e){e=this.toSeconds(e);var i=this._events.getAfter(e),r=this._events.get(e),n=t.defaultArg(this._initialValue,this._param.defaultValue),o=n;if(null===r)o=n;else if(r.type===t.Param.AutomationType.Target){var s,a=this._events.getBefore(r.time);s=null===a?n:a.value,o=this._exponentialApproach(r.time,s,r.value,r.constant,e)}else o=null===i?r.value:i.type===t.Param.AutomationType.Linear?this._linearInterpolate(r.time,r.value,i.time,i.value,e):i.type===t.Param.AutomationType.Exponential?this._exponentialInterpolate(r.time,r.value,i.time,i.value,e):r.value;return o},t.Param.prototype.setRampPoint=function(t){t=this.toSeconds(t);var e=this.getValueAtTime(t);return this.cancelAndHoldAtTime(t),0===e&&(e=this._minOutput),this.setValueAtTime(this._toUnits(e),t),this},t.Param.prototype.linearRampToValueAtTime=function(e,i){return e=this._fromUnits(e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Linear,value:e,time:i}),this._param.linearRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampToValueAtTime=function(e,i){return e=this._fromUnits(e),e=Math.max(this._minOutput,e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Exponential,time:i,value:e}),this._param.exponentialRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.linearRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.linearRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.targetRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialApproachValueAtTime(t,i,e),this},t.Param.prototype.exponentialApproachValueAtTime=function(t,e,i){var r=Math.log(this.toSeconds(i)+1)/Math.log(200);return e=this.toSeconds(e),this.setTargetAtTime(t,e,r)},t.Param.prototype.setTargetAtTime=function(e,i,r){if(e=this._fromUnits(e),r<=0)throw new Error("timeConstant must be greater than 0");return i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Target,value:e,time:i,constant:r}),this._param.setTargetAtTime(e,i,r),this},t.Param.prototype.setValueCurveAtTime=function(e,i,r,n){n=t.defaultArg(n,1),r=this.toSeconds(r),i=this.toSeconds(i),this.setValueAtTime(e[0]*n,i);for(var o=r/(e.length-1),s=1;s=0;)this.emit("tick"),this._currentTime+=this.blockTime;return this._context.startRendering()},t.OfflineContext.prototype.close=function(){return this._context=null,Promise.resolve()},t.OfflineContext}),e(function(t){if(t.supported){var e=navigator.userAgent.toLowerCase();e.includes("safari")&&!e.includes("chrome")&&e.includes("mobile")&&(t.OfflineContext.prototype.createBufferSource=function(){var t=this._context.createBufferSource(),e=t.start;return t.start=function(i){this.setTimeout(function(){e.call(t,i)}.bind(this),0)}.bind(this),t})}}),e(function(t){return t.Gain=function(){var e=t.defaults(arguments,["gain","units"],t.Gain);t.AudioNode.call(this),this.input=this.output=this._gainNode=this.context.createGain(),this.gain=new t.Param({param:this._gainNode.gain,units:e.units,value:e.gain,convert:e.convert}),this._readOnly("gain")},t.extend(t.Gain,t.AudioNode),t.Gain.defaults={gain:1,convert:!0},t.Gain.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._gainNode.disconnect(),this._gainNode=null,this._writable("gain"),this.gain.dispose(),this.gain=null},t.Gain}),e(function(t){if(t.supported&&!AudioContext.prototype.createConstantSource){var e=function(t){this.context=t;for(var e=t.createBuffer(1,128,t.sampleRate),i=e.getChannelData(0),r=0;r0&&(n=(1-s)/(1/n)),"linear"===this._attackCurve)this._sig.linearRampTo(i,n,e);else if("exponential"===this._attackCurve)this._sig.targetRampTo(i,n,e);else if(n>0){this._sig.cancelAndHoldAtTime(e);var a=this._attackCurve;if(n0){var r=this.toSeconds(this.release);if("linear"===this._releaseCurve)this._sig.linearRampTo(0,r,e);else if("exponential"===this._releaseCurve)this._sig.targetRampTo(0,r,e);else{var n=this._releaseCurve;t.isArray(n)&&(this._sig.cancelAndHoldAtTime(e),this._sig.setValueCurveAtTime(n,e,r,i))}}return this},t.Envelope.prototype.getValueAtTime=function(t){return this._sig.getValueAtTime(t)},t.Envelope.prototype.triggerAttackRelease=function(t,e,i){return e=this.toSeconds(e),this.triggerAttack(e,i),this.triggerRelease(e+this.toSeconds(t)),this},t.Envelope.prototype.cancel=function(t){return this._sig.cancelScheduledValues(t),this},t.Envelope.prototype.connect=t.SignalBase.prototype.connect,function(){var e,i,r=[];for(e=0;e<128;e++)r[e]=Math.sin(e/127*(Math.PI/2));var n=[];for(e=0;e<127;e++){i=e/127;var o=Math.sin(i*(2*Math.PI)*6.4-Math.PI/2)+1;n[e]=o/10+.83*i}n[127]=1;var s=[];for(e=0;e<128;e++)s[e]=Math.ceil(e/127*5)/5;var a=[];for(e=0;e<128;e++)i=e/127,a[e]=.5*(1-Math.cos(Math.PI*i));var h=[];for(e=0;e<128;e++){i=e/127;var l=4*Math.pow(i,3)+.2,u=Math.cos(l*Math.PI*2*i);h[e]=Math.abs(u*(1-i))}function c(t){for(var e=new Array(t.length),i=0;i0?a:(-n-s)/o)+i.time}return i?0===i.value?1/0:i.time+(e-i.ticks)/i.value:e/this._initialValue},t.TickSignal.prototype.ticksToTime=function(e,i){return i=this.toSeconds(i),new t.Time(this.getDurationOfTicks(e,i))},t.TickSignal.prototype.timeToTicks=function(e,i){i=this.toSeconds(i),e=this.toSeconds(e);var r=this.getTicksAtTime(i),n=this.getTicksAtTime(i+e);return new t.Ticks(n-r)},t.TickSignal}),e(function(t){return t.TimelineState=function(e){t.Timeline.call(this),this._initial=e},t.extend(t.TimelineState,t.Timeline),t.TimelineState.prototype.getValueAtTime=function(t){var e=this.get(t);return null!==e?e.state:this._initial},t.TimelineState.prototype.setStateAtTime=function(t,e){return this.add({state:t,time:e}),this},t.TimelineState.prototype.getLastState=function(t,e){e=this.toSeconds(e);for(var i=this._search(e);i>=0;i--){var r=this._timeline[i];if(r.state===t)return r}},t.TimelineState.prototype.getNextState=function(t,e){e=this.toSeconds(e);var i=this._search(e);if(-1!==i)for(var r=i;r0&&(this._tickOffset.cancel(i.time),this._state.cancel(i.time))}return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this.setTicksAtTime(0,e),this},t.TickSource.prototype.pause=function(e){return e=this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started&&this._state.setStateAtTime(t.State.Paused,e),this},t.TickSource.prototype.cancel=function(t){return t=this.toSeconds(t),this._state.cancel(t),this._tickOffset.cancel(t),this},t.TickSource.prototype.getTicksAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.ticks,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=this.frequency.getTicksAtTime(e.time)-this.frequency.getTicksAtTime(i)),n=e}.bind(this)),this._state.remove(r),o},Object.defineProperty(t.TickSource.prototype,"ticks",{get:function(){return this.getTicksAtTime(this.now())},set:function(t){this.setTicksAtTime(t,this.now())}}),Object.defineProperty(t.TickSource.prototype,"seconds",{get:function(){return this.getSecondsAtTime(this.now())},set:function(t){var e=this.now(),i=this.frequency.timeToTicks(t,e);this.setTicksAtTime(i,e)}}),t.TickSource.prototype.getSecondsAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.seconds,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=e.time-i),n=e}.bind(this)),this._state.remove(r),o},t.TickSource.prototype.setTicksAtTime=function(t,e){return e=this.toSeconds(e),this._tickOffset.cancel(e),this._tickOffset.add({time:e,ticks:t,seconds:this.frequency.getDurationOfTicks(t,e)}),this},t.TickSource.prototype.getStateAtTime=function(t){return t=this.toSeconds(t),this._state.getValueAtTime(t)},t.TickSource.prototype.getTimeOfTick=function(e,i){i=t.defaultArg(i,this.now());var r=this._tickOffset.get(i),n=this._state.get(i),o=Math.max(r.time,n.time),s=this.frequency.getTicksAtTime(o)+e-r.ticks;return this.frequency.getTimeOfTick(s)},t.TickSource.prototype.forEachTickBetween=function(e,i,r){var n=this._state.get(e);if(this._state.forEachBetween(e,i,function(i){n.state===t.State.Started&&i.state!==t.State.Started&&this.forEachTickBetween(Math.max(n.time,e),i.time-this.sampleTime,r),n=i}.bind(this)),e=Math.max(n.time,e),n.state===t.State.Started&&this._state){var o=this.frequency.getTicksAtTime(e),s=(o-this.frequency.getTicksAtTime(n.time))%1;0!==s&&(s=1-s);for(var a=this.frequency.getTimeOfTick(o+s),h=null;a0)if(null===t.left.right)(e=t.left).right=t.right,i=e;else{for(e=t.left.right;null!==e.right;)e=e.right;e.parent.right=e.left,i=e.parent,e.left=t.left,e.right=t.right}else if(null===t.right.left)(e=t.right).left=t.left,i=e;else{for(e=t.right.left;null!==e.left;)e=e.left;e.parent=e.parent,e.parent.left=e.right,i=e.parent,e.left=t.left,e.right=t.right}null!==t.parent?t.isLeftChild()?t.parent.left=e:t.parent.right=e:this._setRoot(e),this._rebalance(i)}t.dispose()},t.IntervalTimeline.prototype._rotateLeft=function(t){var e=t.parent,i=t.isLeftChild(),r=t.right;t.right=r.left,r.left=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rotateRight=function(t){var e=t.parent,i=t.isLeftChild(),r=t.left;t.left=r.right,r.right=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rebalance=function(t){var e=t.getBalance();e>1?t.left.getBalance()<0?this._rotateLeft(t.left):this._rotateRight(t):e<-1&&(t.right.getBalance()>0?this._rotateRight(t.right):this._rotateLeft(t))},t.IntervalTimeline.prototype.get=function(t){if(null!==this._root){var e=[];if(this._root.search(t,e),e.length>0){for(var i=e[0],r=1;ri.low&&(i=e[r]);return i.event}}return null},t.IntervalTimeline.prototype.forEach=function(t){if(null!==this._root){var e=[];this._root.traverse(function(t){e.push(t)});for(var i=0;i=0;r--){var n=i[r].event;n&&e(n)}}return this},t.IntervalTimeline.prototype.forEachFrom=function(t,e){if(null!==this._root){var i=[];this._root.searchAfter(t,i);for(var r=i.length-1;r>=0;r--)e(i[r].event)}return this},t.IntervalTimeline.prototype.dispose=function(){var t=[];null!==this._root&&this._root.traverse(function(e){t.push(e)});for(var e=0;ethis.max||(null!==this.left&&this.left.search(t,e),this.low<=t&&this.high>t&&e.push(this),this.low>t||null!==this.right&&this.right.search(t,e))},e.prototype.searchAfter=function(t,e){this.low>=t&&(e.push(this),null!==this.left&&this.left.searchAfter(t,e)),null!==this.right&&this.right.searchAfter(t,e)},e.prototype.traverse=function(t){t(this),null!==this.left&&this.left.traverse(t),null!==this.right&&this.right.traverse(t)},e.prototype.updateHeight=function(){null!==this.left&&null!==this.right?this.height=Math.max(this.left.height,this.right.height)+1:null!==this.right?this.height=this.right.height+1:null!==this.left?this.height=this.left.height+1:this.height=0},e.prototype.updateMax=function(){this.max=this.high,null!==this.left&&(this.max=Math.max(this.max,this.left.max)),null!==this.right&&(this.max=Math.max(this.max,this.right.max))},e.prototype.getBalance=function(){var t=0;return null!==this.left&&null!==this.right?t=this.left.height-this.right.height:null!==this.left?t=this.left.height+1:null!==this.right&&(t=-(this.right.height+1)),t},e.prototype.isLeftChild=function(){return null!==this.parent&&this.parent.left===this},Object.defineProperty(e.prototype,"left",{get:function(){return this._left},set:function(t){this._left=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),Object.defineProperty(e.prototype,"right",{get:function(){return this._right},set:function(t){this._right=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),e.prototype.dispose=function(){this.parent=null,this._left=null,this._right=null,this.event=null},t.IntervalTimeline}),e(function(t){return t.Ticks=function(e,i){if(!(this instanceof t.Ticks))return new t.Ticks(e,i);t.TransportTime.call(this,e,i)},t.extend(t.Ticks,t.TransportTime),t.Ticks.prototype._defaultUnits="i",t.Ticks.prototype._now=function(){return t.Transport.ticks},t.Ticks.prototype._beatsToUnits=function(t){return this._getPPQ()*t},t.Ticks.prototype._secondsToUnits=function(t){return t/(60/this._getBpm())*this._getPPQ()},t.Ticks.prototype._ticksToUnits=function(t){return t},t.Ticks.prototype.toTicks=function(){return this.valueOf()},t.Ticks.prototype.toSeconds=function(){return this.valueOf()/this._getPPQ()*(60/this._getBpm())},t.Ticks}),e(function(t){return t.TransportEvent=function(e,i){i=t.defaultArg(i,t.TransportEvent.defaults),t.call(this),this.Transport=e,this.id=t.TransportEvent._eventId++,this.time=t.Ticks(i.time),this.callback=i.callback,this._once=i.once},t.extend(t.TransportEvent),t.TransportEvent.defaults={once:!1,callback:t.noOp},t.TransportEvent._eventId=0,t.TransportEvent.prototype.invoke=function(t){this.callback&&(this.callback(t),this._once&&this.Transport&&this.Transport.clear(this.id))},t.TransportEvent.prototype.dispose=function(){return t.prototype.dispose.call(this),this.Transport=null,this.callback=null,this.time=null,this},t.TransportEvent}),e(function(t){return t.TransportRepeatEvent=function(e,i){t.TransportEvent.call(this,e,i),i=t.defaultArg(i,t.TransportRepeatEvent.defaults),this.duration=t.Ticks(i.duration),this._interval=t.Ticks(i.interval),this._currentId=-1,this._nextId=-1,this._nextTick=this.time,this._boundRestart=this._restart.bind(this),this.Transport.on("start loopStart",this._boundRestart),this._restart()},t.extend(t.TransportRepeatEvent,t.TransportEvent),t.TransportRepeatEvent.defaults={duration:1/0,interval:1},t.TransportRepeatEvent.prototype.invoke=function(e){this._createEvents(e),t.TransportEvent.prototype.invoke.call(this,e)},t.TransportRepeatEvent.prototype._createEvents=function(e){var i=this.Transport.getTicksAtTime(e);i>=this.time&&i>=this._nextTick&&this._nextTick+this._intervalthis.time&&(this._nextTick=this.time+Math.ceil((i-this.time)/this._interval)*this._interval),this._currentId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick)),this._nextTick+=this._interval,this._nextId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick))},t.TransportRepeatEvent.prototype.dispose=function(){return this.Transport.clear(this._currentId),this.Transport.clear(this._nextId),this.Transport.off("start loopStart",this._boundRestart),this._boundCreateEvents=null,t.TransportEvent.prototype.dispose.call(this),this.duration=null,this._interval=null,this},t.TransportRepeatEvent}),e(function(t){t.Transport=function(){t.Emitter.call(this),t.getContext(function(){this.loop=!1,this._loopStart=0,this._loopEnd=0,this._ppq=e.defaults.PPQ,this._clock=new t.Clock({callback:this._processTick.bind(this),frequency:0}),this._bindClockEvents(),this.bpm=this._clock.frequency,this.bpm._toUnits=this._toUnits.bind(this),this.bpm._fromUnits=this._fromUnits.bind(this),this.bpm.units=t.Type.BPM,this.bpm.value=e.defaults.bpm,this._readOnly("bpm"),this._timeSignature=e.defaults.timeSignature,this._scheduledEvents={},this._timeline=new t.Timeline,this._repeatedEvents=new t.IntervalTimeline,this._syncedSignals=[],this._swingTicks=e.defaults.PPQ/2,this._swingAmount=0}.bind(this))},t.extend(t.Transport,t.Emitter),t.Transport.defaults={bpm:120,swing:0,swingSubdivision:"8n",timeSignature:4,loopStart:0,loopEnd:"4m",PPQ:192},t.Transport.prototype._processTick=function(e,i){if(this._swingAmount>0&&i%this._ppq!=0&&i%(2*this._swingTicks)!=0){var r=i%(2*this._swingTicks)/(2*this._swingTicks),n=Math.sin(r*Math.PI)*this._swingAmount;e+=t.Ticks(2*this._swingTicks/3).toSeconds()*n}this.loop&&i>=this._loopEnd&&(this.emit("loopEnd",e),this._clock.setTicksAtTime(this._loopStart,e),i=this._loopStart,this.emit("loopStart",e,this._clock.getSecondsAtTime(e)),this.emit("loop",e)),this._timeline.forEachAtTime(i,function(t){t.invoke(e)})},t.Transport.prototype.schedule=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e});return this._addEvent(r,this._timeline)},t.Transport.prototype.scheduleRepeat=function(e,i,r,n){var o=new t.TransportRepeatEvent(this,{callback:e,interval:t.Time(i),time:t.TransportTime(r),duration:t.Time(t.defaultArg(n,1/0))});return this._addEvent(o,this._repeatedEvents)},t.Transport.prototype.scheduleOnce=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e,once:!0});return this._addEvent(r,this._timeline)},t.Transport.prototype.clear=function(t){if(this._scheduledEvents.hasOwnProperty(t)){var e=this._scheduledEvents[t.toString()];e.timeline.remove(e.event),e.event.dispose(),delete this._scheduledEvents[t.toString()]}return this},t.Transport.prototype._addEvent=function(t,e){return this._scheduledEvents[t.id.toString()]={event:t,timeline:e},e.add(t),t.id},t.Transport.prototype.cancel=function(e){return e=t.defaultArg(e,0),e=this.toTicks(e),this._timeline.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this._repeatedEvents.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this},t.Transport.prototype._bindClockEvents=function(){this._clock.on("start",function(e,i){i=t.Ticks(i).toSeconds(),this.emit("start",e,i)}.bind(this)),this._clock.on("stop",function(t){this.emit("stop",t)}.bind(this)),this._clock.on("pause",function(t){this.emit("pause",t)}.bind(this))},Object.defineProperty(t.Transport.prototype,"state",{get:function(){return this._clock.getStateAtTime(this.now())}}),t.Transport.prototype.start=function(e,i){return t.isDefined(i)&&(i=this.toTicks(i)),this._clock.start(e,i),this},t.Transport.prototype.stop=function(t){return this._clock.stop(t),this},t.Transport.prototype.pause=function(t){return this._clock.pause(t),this},t.Transport.prototype.toggle=function(e){return e=this.toSeconds(e),this._clock.getStateAtTime(e)!==t.State.Started?this.start(e):this.stop(e),this},Object.defineProperty(t.Transport.prototype,"timeSignature",{get:function(){return this._timeSignature},set:function(e){t.isArray(e)&&(e=e[0]/e[1]*4),this._timeSignature=e}}),Object.defineProperty(t.Transport.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t)}}),t.Transport.prototype.setLoopPoints=function(t,e){return this.loopStart=t,this.loopEnd=e,this},Object.defineProperty(t.Transport.prototype,"swing",{get:function(){return this._swingAmount},set:function(t){this._swingAmount=t}}),Object.defineProperty(t.Transport.prototype,"swingSubdivision",{get:function(){return t.Ticks(this._swingTicks).toNotation()},set:function(t){this._swingTicks=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"position",{get:function(){var e=this.now(),i=this._clock.getTicksAtTime(e);return t.Ticks(i).toBarsBeatsSixteenths()},set:function(t){var e=this.toTicks(t);this.ticks=e}}),Object.defineProperty(t.Transport.prototype,"seconds",{get:function(){return this._clock.seconds},set:function(t){var e=this.now(),i=this.bpm.timeToTicks(t,e);this.ticks=i}}),Object.defineProperty(t.Transport.prototype,"progress",{get:function(){if(this.loop){var t=this.now();return(this._clock.getTicksAtTime(t)-this._loopStart)/(this._loopEnd-this._loopStart)}return 0}}),Object.defineProperty(t.Transport.prototype,"ticks",{get:function(){return this._clock.ticks},set:function(e){if(this._clock.ticks!==e){var i=this.now();this.state===t.State.Started?(this.emit("stop",i),this._clock.setTicksAtTime(e,i),this.emit("start",i,this.seconds)):this._clock.setTicksAtTime(e,i)}}}),t.Transport.prototype.getTicksAtTime=function(t){return Math.round(this._clock.getTicksAtTime(t))},t.Transport.prototype.getSecondsAtTime=function(t){return this._clock.getSecondsAtTime(t)},Object.defineProperty(t.Transport.prototype,"PPQ",{get:function(){return this._ppq},set:function(t){var e=this.bpm.value;this._ppq=t,this.bpm.value=e}}),t.Transport.prototype._fromUnits=function(t){return 1/(60/t/this.PPQ)},t.Transport.prototype._toUnits=function(t){return t/this.PPQ*60},t.Transport.prototype.nextSubdivision=function(e){if(e=this.toTicks(e),this.state!==t.State.Started)return 0;var i=this.now(),r=e-this.getTicksAtTime(i)%e;return this._clock.nextTickTime(r,i)},t.Transport.prototype.syncSignal=function(e,i){if(!i){var r=this.now();i=0!==e.getValueAtTime(r)?e.getValueAtTime(r)/this.bpm.getValueAtTime(r):0}var n=new t.Gain(i);return this.bpm.chain(n,e._param),this._syncedSignals.push({ratio:n,signal:e,initial:e.value}),e.value=0,this},t.Transport.prototype.unsyncSignal=function(t){for(var e=this._syncedSignals.length-1;e>=0;e--){var i=this._syncedSignals[e];i.signal===t&&(i.ratio.dispose(),i.signal.value=i.initial,this._syncedSignals.splice(e,1))}return this},t.Transport.prototype.dispose=function(){return t.Emitter.prototype.dispose.call(this),this._clock.dispose(),this._clock=null,this._writable("bpm"),this.bpm=null,this._timeline.dispose(),this._timeline=null,this._repeatedEvents.dispose(),this._repeatedEvents=null,this};var e=t.Transport;return t.Transport=new e,t.Context.on("init",function(i){i.Transport instanceof e?t.Transport=i.Transport:t.Transport=new e,i.Transport=t.Transport}),t.Context.on("close",function(t){t.Transport instanceof e&&t.Transport.dispose()}),t.Transport}),e(function(t){return t.Volume=function(){var e=t.defaults(arguments,["volume"],t.Volume);t.AudioNode.call(this),this.output=this.input=new t.Gain(e.volume,t.Type.Decibels),this._unmutedVolume=e.volume,this.volume=this.output.gain,this._readOnly("volume"),this.mute=e.mute},t.extend(t.Volume,t.AudioNode),t.Volume.defaults={volume:0,mute:!1},Object.defineProperty(t.Volume.prototype,"mute",{get:function(){return this.volume.value===-1/0},set:function(t){!this.mute&&t?(this._unmutedVolume=this.volume.value,this.volume.value=-1/0):this.mute&&!t&&(this.volume.value=this._unmutedVolume)}}),t.Volume.prototype.dispose=function(){return this.input.dispose(),t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this.volume.dispose(),this.volume=null,this},t.Volume}),e(function(t){t.Master=function(){t.AudioNode.call(this),t.getContext(function(){this.createInsOuts(1,0),this._volume=this.output=new t.Volume,this.volume=this._volume.volume,this._readOnly("volume"),this.input.chain(this.output,this.context.destination)}.bind(this))},t.extend(t.Master,t.AudioNode),t.Master.defaults={volume:0,mute:!1},Object.defineProperty(t.Master.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Master.prototype.chain=function(){this.input.disconnect(),this.input.chain.apply(this.input,arguments),arguments[arguments.length-1].connect(this.output)},t.Master.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null},t.AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this},window.AudioNode&&(AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this});var e=t.Master;return t.Master=new e,t.Context.on("init",function(i){i.Master instanceof e?t.Master=i.Master:t.Master=new e,i.Master=t.Master}),t.Context.on("close",function(t){t.Master instanceof e&&t.Master.dispose()}),t.Master}),e(function(t){return t.Source=function(e){e=t.defaultArg(e,t.Source.defaults),t.AudioNode.call(this),this._volume=this.output=new t.Volume(e.volume),this.volume=this._volume.volume,this._readOnly("volume"),this._state=new t.TimelineState(t.State.Stopped),this._state.memory=100,this._synced=!1,this._scheduled=[],this._volume.output.output.channelCount=2,this._volume.output.output.channelCountMode="explicit",this.mute=e.mute},t.extend(t.Source,t.AudioNode),t.Source.defaults={volume:0,mute:!1},Object.defineProperty(t.Source.prototype,"state",{get:function(){return this._synced?t.Transport.state===t.State.Started?this._state.getValueAtTime(t.Transport.seconds):t.State.Stopped:this._state.getValueAtTime(this.now())}}),Object.defineProperty(t.Source.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Source.prototype._start=t.noOp,t.Source.prototype.restart=t.noOp,t.Source.prototype._stop=t.noOp,t.Source.prototype.start=function(e,i,r){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started)this._state.cancel(e),this._state.setStateAtTime(t.State.Started,e),this.restart(e,i,r);else if(this._state.setStateAtTime(t.State.Started,e),this._synced){var n=this._state.get(e);n.offset=t.defaultArg(i,0),n.duration=r;var o=t.Transport.schedule(function(t){this._start(t,i,r)}.bind(this),e);this._scheduled.push(o),t.Transport.state===t.State.Started&&this._syncedStart(this.now(),t.Transport.seconds)}else this._start.apply(this,arguments);return this},t.Source.prototype.stop=function(e){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._synced){var i=t.Transport.schedule(this._stop.bind(this),e);this._scheduled.push(i)}else this._stop.apply(this,arguments);return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this},t.Source.prototype.sync=function(){return this._synced=!0,this._syncedStart=function(e,i){if(i>0){var r=this._state.get(i);if(r&&r.state===t.State.Started&&r.time!==i){var n,o=i-this.toSeconds(r.time);r.duration&&(n=this.toSeconds(r.duration)-o),this._start(e,this.toSeconds(r.offset)+o,n)}}}.bind(this),this._syncedStop=function(e){var i=t.Transport.getSecondsAtTime(Math.max(e-this.sampleTime,0));this._state.getValueAtTime(i)===t.State.Started&&this._stop(e)}.bind(this),t.Transport.on("start loopStart",this._syncedStart),t.Transport.on("stop pause loopEnd",this._syncedStop),this},t.Source.prototype.unsync=function(){this._synced&&(t.Transport.off("stop pause loopEnd",this._syncedStop),t.Transport.off("start loopStart",this._syncedStart)),this._synced=!1;for(var e=0;e0}}),Object.defineProperty(t.Buffer.prototype,"duration",{get:function(){return this._buffer?this._buffer.duration:0}}),Object.defineProperty(t.Buffer.prototype,"length",{get:function(){return this._buffer?this._buffer.length:0}}),Object.defineProperty(t.Buffer.prototype,"numberOfChannels",{get:function(){return this._buffer?this._buffer.numberOfChannels:0}}),t.Buffer.prototype.fromArray=function(t){var e=t[0].length>0,i=e?t.length:1,r=e?t[0].length:t.length,n=this.context.createBuffer(i,r,this.context.sampleRate);e||1!==i||(t=[t]);for(var o=0;o=this._startTime&&(-1===this._stopTime||e<=this._stopTime)?t.State.Started:t.State.Stopped},t.OscillatorNode.prototype.start=function(t){if(-1!==this._startTime)throw new Error("cannot call OscillatorNode.start more than once");this._startTime=this.toSeconds(t),this._oscillator.start(this._startTime);var e=this.context.currentTime;return this._gainNode.gain.cancelScheduledValues(e),this._gainNode.gain.setValueAtTime(0,e),this._gainNode.gain.setValueAtTime(1,this._startTime),this},t.OscillatorNode.prototype.setPeriodicWave=function(t){return this._oscillator.setPeriodicWave(t),this},t.OscillatorNode.prototype.stop=function(t){return this.cancelStop(),this._stopTime=this.toSeconds(t),this._gainNode.gain.setValueAtTime(0,this._stopTime),this.context.clearTimeout(this._timeout),this._timeout=this.context.setTimeout(function(){this._oscillator.stop(this.now()),this.onended()}.bind(this),this._stopTime-this.now()),this},t.OscillatorNode.prototype.cancelStop=function(){return-1!==this._startTime&&(this._gainNode.gain.cancelScheduledValues(this._startTime+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime)),this.context.clearTimeout(this._timeout),this._stopTime=-1),this},Object.defineProperty(t.OscillatorNode.prototype,"type",{get:function(){return this._oscillator.type},set:function(t){this._oscillator.type=t}}),t.OscillatorNode.prototype.dispose=function(){return this.context.clearTimeout(this._timeout),t.AudioNode.prototype.dispose.call(this),this.onended=null,this._oscillator.disconnect(),this._oscillator=null,this._gainNode.dispose(),this._gainNode=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this},t.OscillatorNode}),e(function(t){return t.Oscillator=function(){var e=t.defaults(arguments,["frequency","type"],t.Oscillator);t.Source.call(this,e),this._oscillator=null,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this._wave=null,this._partials=t.defaultArg(e.partials,[1]),this._phase=e.phase,this._type=null,this.type=e.type,this.phase=this._phase,this._readOnly(["frequency","detune"])},t.extend(t.Oscillator,t.Source),t.Oscillator.defaults={type:"sine",frequency:440,detune:0,phase:0,partials:[]},t.Oscillator.Type={Sine:"sine",Triangle:"triangle",Sawtooth:"sawtooth",Square:"square",Custom:"custom"},t.Oscillator.prototype._start=function(e){this._oscillator=new t.OscillatorNode,this._wave?this._oscillator.setPeriodicWave(this._wave):this._oscillator.type=this._type,this._oscillator.connect(this.output),this.frequency.connect(this._oscillator.frequency),this.detune.connect(this._oscillator.detune),e=this.toSeconds(e),this._oscillator.start(e)},t.Oscillator.prototype._stop=function(t){return this._oscillator&&(t=this.toSeconds(t),this._oscillator.stop(t)),this},t.Oscillator.prototype.restart=function(t){return this._oscillator.cancelStop(),this._state.cancel(this.toSeconds(t)),this},t.Oscillator.prototype.syncFrequency=function(){return t.Transport.syncSignal(this.frequency),this},t.Oscillator.prototype.unsyncFrequency=function(){return t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Oscillator.prototype,"type",{get:function(){return this._type},set:function(e){var i=[t.Oscillator.Type.Sine,t.Oscillator.Type.Square,t.Oscillator.Type.Triangle,t.Oscillator.Type.Sawtooth].includes(e);if(0===this._phase&&i)this._wave=null,null!==this._oscillator&&this._oscillator.type;else{var r=this._getRealImaginary(e,this._phase),n=this.context.createPeriodicWave(r[0],r[1]);this._wave=n,null!==this._oscillator&&this._oscillator.setPeriodicWave(this._wave)}this._type=e}}),t.Oscillator.prototype._getRealImaginary=function(e,i){var r=2048,n=new Float32Array(r),o=new Float32Array(r),s=1;if(e===t.Oscillator.Type.Custom)r=s=this._partials.length+1;else{var a=/^(sine|triangle|square|sawtooth)(\d+)$/.exec(e);a&&(s=parseInt(a[2])+1,e=a[1],r=s=Math.max(s,2))}for(var h=1;h>1&1?-1:1):0;break;case t.Oscillator.Type.Custom:l=this._partials[h-1];break;default:throw new TypeError("Tone.Oscillator: invalid type: "+e)}0!==l?(n[h]=-l*Math.sin(i*h),o[h]=l*Math.cos(i*h)):(n[h]=0,o[h]=0)}return[n,o]},t.Oscillator.prototype._inverseFFT=function(t,e,i){for(var r=0,n=t.length,o=0;on&&r=this.values.length&&(this.index=0)):e===t.CtrlPattern.Type.Down?(this.index--,this.index<0&&(this.index=this.values.length-1)):e===t.CtrlPattern.Type.UpDown||e===t.CtrlPattern.Type.DownUp?(this._direction===t.CtrlPattern.Type.Up?this.index++:this.index--,this.index<0?(this.index=1,this._direction=t.CtrlPattern.Type.Up):this.index>=this.values.length&&(this.index=this.values.length-2,this._direction=t.CtrlPattern.Type.Down)):e===t.CtrlPattern.Type.Random?this.index=Math.floor(Math.random()*this.values.length):e===t.CtrlPattern.Type.RandomWalk?Math.random()<.5?(this.index--,this.index=Math.max(this.index,0)):(this.index++,this.index=Math.min(this.index,this.values.length-1)):e===t.CtrlPattern.Type.RandomOnce?(this.index++,this.index>=this.values.length&&(this.index=0,this._shuffleValues())):e===t.CtrlPattern.Type.AlternateUp?(this._direction===t.CtrlPattern.Type.Up?(this.index+=2,this._direction=t.CtrlPattern.Type.Down):(this.index-=1,this._direction=t.CtrlPattern.Type.Up),this.index>=this.values.length&&(this.index=0,this._direction=t.CtrlPattern.Type.Up)):e===t.CtrlPattern.Type.AlternateDown&&(this._direction===t.CtrlPattern.Type.Up?(this.index+=1,this._direction=t.CtrlPattern.Type.Down):(this.index-=2,this._direction=t.CtrlPattern.Type.Up),this.index<0&&(this.index=this.values.length-1,this._direction=t.CtrlPattern.Type.Down)),this.value},t.CtrlPattern.prototype._shuffleValues=function(){var t=[];this._shuffled=[];for(var e=0;e0;){var i=t.splice(Math.floor(t.length*Math.random()),1);this._shuffled.push(i[0])}},t.CtrlPattern.prototype.dispose=function(){this._shuffled=null,this.values=null},t.CtrlPattern}),e(function(t){return t.CtrlRandom=function(){var e=t.defaults(arguments,["min","max"],t.CtrlRandom);t.call(this),this.min=e.min,this.max=e.max,this.integer=e.integer},t.extend(t.CtrlRandom),t.CtrlRandom.defaults={min:0,max:1,integer:!1},Object.defineProperty(t.CtrlRandom.prototype,"value",{get:function(){var t=this.toSeconds(this.min),e=this.toSeconds(this.max),i=Math.random(),r=i*t+(1-i)*e;return this.integer&&(r=Math.floor(r)),r}}),t.CtrlRandom}),e(function(t){return t.Buffers=function(e){var i=Array.prototype.slice.call(arguments);i.shift();var r=t.defaults(i,["onload","baseUrl"],t.Buffers);for(var n in t.call(this),this._buffers={},this.baseUrl=r.baseUrl,this._loadingCount=0,e)this._loadingCount++,this.add(n,e[n],this._bufferLoaded.bind(this,r.onload))},t.extend(t.Buffers),t.Buffers.defaults={onload:t.noOp,baseUrl:""},t.Buffers.prototype.has=function(t){return this._buffers.hasOwnProperty(t)},t.Buffers.prototype.get=function(t){if(this.has(t))return this._buffers[t];throw new Error("Tone.Buffers: no buffer named "+t)},t.Buffers.prototype._bufferLoaded=function(t){this._loadingCount--,0===this._loadingCount&&t&&t(this)},Object.defineProperty(t.Buffers.prototype,"loaded",{get:function(){var t=!0;for(var e in this._buffers){var i=this.get(e);t=t&&i.loaded}return t}}),t.Buffers.prototype.add=function(e,i,r){return r=t.defaultArg(r,t.noOp),i instanceof t.Buffer?(this._buffers[e]=i,r(this)):i instanceof AudioBuffer?(this._buffers[e]=new t.Buffer(i),r(this)):t.isString(i)&&(this._buffers[e]=new t.Buffer(this.baseUrl+i,r)),this},t.Buffers.prototype.dispose=function(){for(var e in t.prototype.dispose.call(this),this._buffers)this._buffers[e].dispose();return this._buffers=null,this},t.Buffers}),e(function(t){var e={};return t.prototype.send=function(i,r){e.hasOwnProperty(i)||(e[i]=this.context.createGain()),r=t.defaultArg(r,0);var n=new t.Gain(r,t.Type.Decibels);return this.connect(n),n.connect(e[i]),n},t.prototype.receive=function(t,i){return e.hasOwnProperty(t)||(e[t]=this.context.createGain()),e[t].connect(this,0,i),this},t.Context.on("init",function(t){t.Buses?e=t.Buses:(e={},t.Buses=e)}),t}),e(function(t){return t.Draw=function(){t.call(this),this._events=new t.Timeline,this.expiration=.25,this.anticipation=.008,this._boundDrawLoop=this._drawLoop.bind(this)},t.extend(t.Draw),t.Draw.prototype.schedule=function(t,e){return this._events.add({callback:t,time:this.toSeconds(e)}),1===this._events.length&&requestAnimationFrame(this._boundDrawLoop),this},t.Draw.prototype.cancel=function(t){return this._events.cancel(this.toSeconds(t)),this},t.Draw.prototype._drawLoop=function(){for(var e=t.now();this._events.length&&this._events.peek().time-this.anticipation<=e;){var i=this._events.shift();e-i.time<=this.expiration&&i.callback()}this._events.length>0&&requestAnimationFrame(this._boundDrawLoop)},t.Draw=new t.Draw,t.Draw}),e(function(t){t.Listener=function(){t.call(this),this._orientation=[0,0,0,0,0,0],this._position=[0,0,0],t.getContext(function(){this.set(e.defaults)}.bind(this))},t.extend(t.Listener),t.Listener.defaults={positionX:0,positionY:0,positionZ:0,forwardX:0,forwardY:0,forwardZ:1,upX:0,upY:1,upZ:0},t.Listener.prototype._rampTimeConstant=.01,t.Listener.prototype.setPosition=function(t,e,i){if(this.context.listener.positionX){var r=this.now();this.context.listener.positionX.setTargetAtTime(t,r,this._rampTimeConstant),this.context.listener.positionY.setTargetAtTime(e,r,this._rampTimeConstant),this.context.listener.positionZ.setTargetAtTime(i,r,this._rampTimeConstant)}else this.context.listener.setPosition(t,e,i);return this._position=Array.prototype.slice.call(arguments),this},t.Listener.prototype.setOrientation=function(t,e,i,r,n,o){if(this.context.listener.forwardX){var s=this.now();this.context.listener.forwardX.setTargetAtTime(t,s,this._rampTimeConstant),this.context.listener.forwardY.setTargetAtTime(e,s,this._rampTimeConstant),this.context.listener.forwardZ.setTargetAtTime(i,s,this._rampTimeConstant),this.context.listener.upX.setTargetAtTime(r,s,this._rampTimeConstant),this.context.listener.upY.setTargetAtTime(n,s,this._rampTimeConstant),this.context.listener.upZ.setTargetAtTime(o,s,this._rampTimeConstant)}else this.context.listener.setOrientation(t,e,i,r,n,o);return this._orientation=Array.prototype.slice.call(arguments),this},Object.defineProperty(t.Listener.prototype,"positionX",{set:function(t){this._position[0]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[0]}}),Object.defineProperty(t.Listener.prototype,"positionY",{set:function(t){this._position[1]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[1]}}),Object.defineProperty(t.Listener.prototype,"positionZ",{set:function(t){this._position[2]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[2]}}),Object.defineProperty(t.Listener.prototype,"forwardX",{set:function(t){this._orientation[0]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[0]}}),Object.defineProperty(t.Listener.prototype,"forwardY",{set:function(t){this._orientation[1]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[1]}}),Object.defineProperty(t.Listener.prototype,"forwardZ",{set:function(t){this._orientation[2]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[2]}}),Object.defineProperty(t.Listener.prototype,"upX",{set:function(t){this._orientation[3]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[3]}}),Object.defineProperty(t.Listener.prototype,"upY",{set:function(t){this._orientation[4]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[4]}}),Object.defineProperty(t.Listener.prototype,"upZ",{set:function(t){this._orientation[5]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[5]}}),t.Listener.prototype.dispose=function(){return this._orientation=null,this._position=null,this};var e=t.Listener;return t.Listener=new e,t.Context.on("init",function(i){i.Listener instanceof e?t.Listener=i.Listener:t.Listener=new e,i.Listener=t.Listener}),t.Listener}),e(function(t){return t.Offline=function(e,i){var r,n=t.context.sampleRate,o=t.context,s=function e(i,r,n,o){o=t.defaultArg(o,0);var s=new t.OfflineContext(2,r,n);t.context=s;var a=i(t.Transport);return s.currentTime>0&&o<1e3?e(i,r,n,++o):{response:a,context:s}}(e,i,n),a=s.response,h=s.context;return r=a instanceof Promise?a.then(function(){return h.render()}):h.render(),t.context=o,r.then(function(e){return new t.Buffer(e)})},t.Offline}),e(function(t){return t.Effect=function(){var e=t.defaults(arguments,["wet"],t.Effect);t.AudioNode.call(this),this.createInsOuts(1,1),this._dryWet=new t.CrossFade(e.wet),this.wet=this._dryWet.fade,this.effectSend=new t.Gain,this.effectReturn=new t.Gain,this.input.connect(this._dryWet.a),this.input.connect(this.effectSend),this.effectReturn.connect(this._dryWet.b),this._dryWet.connect(this.output),this._readOnly(["wet"])},t.extend(t.Effect,t.AudioNode),t.Effect.defaults={wet:1},t.Effect.prototype.connectEffect=function(t){return this.effectSend.chain(t,this.effectReturn),this},t.Effect.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this._dryWet.dispose(),this._dryWet=null,this.effectSend.dispose(),this.effectSend=null,this.effectReturn.dispose(),this.effectReturn=null,this._writable(["wet"]),this.wet=null,this},t.Effect}),e(function(t){return t.AutoFilter=function(){var e=t.defaults(arguments,["frequency","baseFrequency","octaves"],t.AutoFilter);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth}),this.depth=this._lfo.amplitude,this.frequency=this._lfo.frequency,this.filter=new t.Filter(e.filter),this._octaves=0,this.connectEffect(this.filter),this._lfo.connect(this.filter.frequency),this.type=e.type,this._readOnly(["frequency","depth"]),this.octaves=e.octaves,this.baseFrequency=e.baseFrequency},t.extend(t.AutoFilter,t.Effect),t.AutoFilter.defaults={frequency:1,type:"sine",depth:1,baseFrequency:200,octaves:2.6,filter:{type:"lowpass",rolloff:-12,Q:1}},t.AutoFilter.prototype.start=function(t){return this._lfo.start(t),this},t.AutoFilter.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoFilter.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoFilter.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoFilter.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),Object.defineProperty(t.AutoFilter.prototype,"baseFrequency",{get:function(){return this._lfo.min},set:function(t){this._lfo.min=this.toFrequency(t),this.octaves=this._octaves}}),Object.defineProperty(t.AutoFilter.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._lfo.max=this.baseFrequency*Math.pow(2,t)}}),t.AutoFilter.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this.filter.dispose(),this.filter=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null,this},t.AutoFilter}),e(function(t){return t.AutoPanner=function(){var e=t.defaults(arguments,["frequency"],t.AutoPanner);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth,min:-1,max:1}),this.depth=this._lfo.amplitude,this._panner=new t.Panner,this.frequency=this._lfo.frequency,this.connectEffect(this._panner),this._lfo.connect(this._panner.pan),this.type=e.type,this._readOnly(["depth","frequency"])},t.extend(t.AutoPanner,t.Effect),t.AutoPanner.defaults={frequency:1,type:"sine",depth:1},t.AutoPanner.prototype.start=function(t){return this._lfo.start(t),this},t.AutoPanner.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoPanner.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoPanner.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoPanner.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.AutoPanner.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this._panner.dispose(),this._panner=null,this._writable(["depth","frequency"]),this.frequency=null,this.depth=null,this},t.AutoPanner}),e(function(t){return t.AutoWah=function(){var e=t.defaults(arguments,["baseFrequency","octaves","sensitivity"],t.AutoWah);t.Effect.call(this,e),this.follower=new t.Follower(e.follower),this._sweepRange=new t.ScaleExp(0,1,.5),this._baseFrequency=e.baseFrequency,this._octaves=e.octaves,this._inputBoost=new t.Gain,this._bandpass=new t.Filter({rolloff:-48,frequency:0,Q:e.Q}),this._peaking=new t.Filter(0,"peaking"),this._peaking.gain.value=e.gain,this.gain=this._peaking.gain,this.Q=this._bandpass.Q,this.effectSend.chain(this._inputBoost,this.follower,this._sweepRange),this._sweepRange.connect(this._bandpass.frequency),this._sweepRange.connect(this._peaking.frequency),this.effectSend.chain(this._bandpass,this._peaking,this.effectReturn),this._setSweepRange(),this.sensitivity=e.sensitivity,this._readOnly(["gain","Q"])},t.extend(t.AutoWah,t.Effect),t.AutoWah.defaults={baseFrequency:100,octaves:6,sensitivity:0,Q:2,gain:2,follower:{attack:.3,release:.5}},Object.defineProperty(t.AutoWah.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"baseFrequency",{get:function(){return this._baseFrequency},set:function(t){this._baseFrequency=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"sensitivity",{get:function(){return t.gainToDb(1/this._inputBoost.gain.value)},set:function(e){this._inputBoost.gain.value=1/t.dbToGain(e)}}),t.AutoWah.prototype._setSweepRange=function(){this._sweepRange.min=this._baseFrequency,this._sweepRange.max=Math.min(this._baseFrequency*Math.pow(2,this._octaves),this.context.sampleRate/2)},t.AutoWah.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this.follower.dispose(),this.follower=null,this._sweepRange.dispose(),this._sweepRange=null,this._bandpass.dispose(),this._bandpass=null,this._peaking.dispose(),this._peaking=null,this._inputBoost.dispose(),this._inputBoost=null,this._writable(["gain","Q"]),this.gain=null,this.Q=null,this},t.AutoWah}),e(function(t){return t.Modulo=function(e){t.SignalBase.call(this),this.createInsOuts(1,0),this._shaper=new t.WaveShaper(Math.pow(2,16)),this._multiply=new t.Multiply,this._subtract=this.output=new t.Subtract,this._modSignal=new t.Signal(e),this.input.fan(this._shaper,this._subtract),this._modSignal.connect(this._multiply,0,0),this._shaper.connect(this._multiply,0,1),this._multiply.connect(this._subtract,0,1),this._setWaveShaper(e)},t.extend(t.Modulo,t.SignalBase),t.Modulo.prototype._setWaveShaper=function(t){this._shaper.setMap(function(e){return Math.floor((e+1e-4)/t)})},Object.defineProperty(t.Modulo.prototype,"value",{get:function(){return this._modSignal.value},set:function(t){this._modSignal.value=t,this._setWaveShaper(t)}}),t.Modulo.prototype.dispose=function(){return t.SignalBase.prototype.dispose.call(this),this._shaper.dispose(),this._shaper=null,this._multiply.dispose(),this._multiply=null,this._subtract.dispose(),this._subtract=null,this._modSignal.dispose(),this._modSignal=null,this},t.Modulo}),e(function(t){return t.BitCrusher=function(){var e=t.defaults(arguments,["bits"],t.BitCrusher);t.Effect.call(this,e);var i=1/Math.pow(2,e.bits-1);this._subtract=new t.Subtract,this._modulo=new t.Modulo(i),this._bits=e.bits,this.effectSend.fan(this._subtract,this._modulo),this._modulo.connect(this._subtract,0,1),this._subtract.connect(this.effectReturn)},t.extend(t.BitCrusher,t.Effect),t.BitCrusher.defaults={bits:4},Object.defineProperty(t.BitCrusher.prototype,"bits",{get:function(){return this._bits},set:function(t){this._bits=t;var e=1/Math.pow(2,t-1);this._modulo.value=e}}),t.BitCrusher.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._subtract.dispose(),this._subtract=null,this._modulo.dispose(),this._modulo=null,this},t.BitCrusher}),e(function(t){return t.Chebyshev=function(){var e=t.defaults(arguments,["order"],t.Chebyshev);t.Effect.call(this,e),this._shaper=new t.WaveShaper(4096),this._order=e.order,this.connectEffect(this._shaper),this.order=e.order,this.oversample=e.oversample},t.extend(t.Chebyshev,t.Effect),t.Chebyshev.defaults={order:1,oversample:"none"},t.Chebyshev.prototype._getCoefficient=function(t,e,i){return i.hasOwnProperty(e)?i[e]:(i[e]=0===e?0:1===e?t:2*t*this._getCoefficient(t,e-1,i)-this._getCoefficient(t,e-2,i),i[e])},Object.defineProperty(t.Chebyshev.prototype,"order",{get:function(){return this._order},set:function(t){this._order=t;for(var e=new Array(4096),i=e.length,r=0;r=this._startTime&&!this._sourceStopped?t.State.Started:t.State.Stopped},t.BufferSource.prototype.start=function(e,i,r,n,o){if(-1!==this._startTime)throw new Error("Tone.BufferSource can only be started once.");if(!this.buffer.loaded)throw new Error("Tone.BufferSource: buffer is either not set or not loaded.");e=this.toSeconds(e),i=this.loop?t.defaultArg(i,this.loopStart):t.defaultArg(i,0),i=this.toSeconds(i),n=t.defaultArg(n,1),this._gain=n,o=this.toSeconds(t.defaultArg(o,this.fadeIn)),this.fadeIn=o,o>0?(this._gainNode.gain.setValueAtTime(0,e),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(this._gain,e+o):this._gainNode.gain.exponentialApproachValueAtTime(this._gain,e,o)):this._gainNode.gain.setValueAtTime(n,e),this._startTime=e;var s=this.toSeconds(t.defaultArg(r,this.buffer.duration-i%this.buffer.duration));if(s=Math.max(s,0),t.isDefined(r)&&(this.loop||(s=Math.min(s,this.buffer.duration-i%this.buffer.duration)),this.stop(e+s,this.fadeOut)),this.loop){var a=this.loopEnd||this.buffer.duration,h=this.loopStart;i>=a&&(i=(i-h)%(a-h)+h)}return this._source.buffer=this.buffer.get(),this._source.loopEnd=this.loopEnd||this.buffer.duration,ithis.sampleTime?(this._gainNode.gain.setValueAtTime(this._gain,n),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(0,e):this._gainNode.gain.exponentialApproachValueAtTime(0,n,i)):this._gainNode.gain.setValueAtTime(0,e),t.context.clearTimeout(this._onendedTimeout),this._onendedTimeout=t.context.setTimeout(this._onended.bind(this),this._stopTime-this.now()),this}},t.BufferSource.prototype.cancelStop=function(){if(-1!==this._startTime&&!this._sourceStopped){var t=this.toSeconds(this.fadeIn);this._gainNode.gain.cancelScheduledValues(this._startTime+t+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime+t+this.sampleTime)),this.context.clearTimeout(this._onendedTimeout),this._stopTime=-1}return this},t.BufferSource.prototype._onended=function(){if(!this._sourceStopped){this._sourceStopped=!0;var t="exponential"===this.curve?2*this.fadeOut:0;this._sourceStarted&&-1!==this._stopTime&&this._source.stop(this._stopTime+t),this.onended(this)}},Object.defineProperty(t.BufferSource.prototype,"loopStart",{get:function(){return this._source.loopStart},set:function(t){this._source.loopStart=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"loopEnd",{get:function(){return this._source.loopEnd},set:function(t){this._source.loopEnd=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"buffer",{get:function(){return this._buffer},set:function(t){this._buffer.set(t)}}),Object.defineProperty(t.BufferSource.prototype,"loop",{get:function(){return this._source.loop},set:function(t){this._source.loop=t,this.cancelStop()}}),t.BufferSource.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.onended=null,this._source.onended=null,this._source.disconnect(),this._source=null,this._gainNode.dispose(),this._gainNode=null,this._buffer.dispose(),this._buffer=null,this._startTime=-1,this.playbackRate=null,t.context.clearTimeout(this._onendedTimeout),this},t.BufferSource}),e(function(t){t.Noise=function(){var e=t.defaults(arguments,["type"],t.Noise);t.Source.call(this,e),this._source=null,this._type=e.type,this._playbackRate=e.playbackRate},t.extend(t.Noise,t.Source),t.Noise.defaults={type:"white",playbackRate:1},Object.defineProperty(t.Noise.prototype,"type",{get:function(){return this._type},set:function(e){if(this._type!==e){if(!(e in i))throw new TypeError("Tone.Noise: invalid type: "+e);if(this._type=e,this.state===t.State.Started){var r=this.now();this._stop(r),this._start(r)}}}}),Object.defineProperty(t.Noise.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._source&&(this._source.playbackRate.value=t)}}),t.Noise.prototype._start=function(e){var r=i[this._type];this._source=new t.BufferSource(r).connect(this.output),this._source.loop=!0,this._source.playbackRate.value=this._playbackRate,this._source.start(this.toSeconds(e),Math.random()*(r.duration-.001))},t.Noise.prototype._stop=function(t){this._source&&(this._source.stop(this.toSeconds(t)),this._source=null)},t.Noise.prototype.restart=function(t){this._stop(t),this._start(t)},t.Noise.prototype.dispose=function(){return t.Source.prototype.dispose.call(this),null!==this._source&&(this._source.disconnect(),this._source=null),this._buffer=null,this};var e={pink:function(){for(var t=[],e=0;e<2;e++){var i,r,n,o,s,a,h,l=new Float32Array(220500);t[e]=l,i=r=n=o=s=a=h=0;for(var u=0;u<220500;u++){var c=2*Math.random()-1;i=.99886*i+.0555179*c,r=.99332*r+.0750759*c,n=.969*n+.153852*c,o=.8665*o+.3104856*c,s=.55*s+.5329522*c,a=-.7616*a-.016898*c,l[u]=i+r+n+o+s+a+h+.5362*c,l[u]*=.11,h=.115926*c}}return t}(),brown:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0,n=0;n<220500;n++){var o=2*Math.random()-1;i[n]=(r+.02*o)/1.02,r=i[n],i[n]*=3.5}}return t}(),white:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0;r<220500;r++)i[r]=2*Math.random()-1}return t}()},i={};function r(){for(var r in e)i[r]=(new t.Buffer).fromArray(e[r])}return t.getContext(r),t.Context.on("init",r),t.Noise}),e(function(t){return t.Reverb=function(){var e=t.defaults(arguments,["decay"],t.Reverb);t.Effect.call(this,e),this._convolver=this.context.createConvolver(),this.decay=e.decay,this.preDelay=e.preDelay,this.connectEffect(this._convolver)},t.extend(t.Reverb,t.Effect),t.Reverb.defaults={decay:1.5,preDelay:.01},t.Reverb.prototype.generate=function(){return t.Offline(function(){var e=new t.Noise,i=new t.Noise,r=new t.Merge;e.connect(r.left),i.connect(r.right);var n=(new t.Gain).toMaster();r.connect(n),e.start(0),i.start(0),n.gain.setValueAtTime(0,0),n.gain.linearRampToValueAtTime(1,this.preDelay),n.gain.exponentialApproachValueAtTime(0,this.preDelay,this.decay-this.preDelay)}.bind(this),this.decay).then(function(t){return this._convolver.buffer=t.get(),this}.bind(this))},t.Reverb.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._convolver.disconnect(),this._convolver=null,this},t.Reverb}),e(function(t){return t.StereoFeedbackEffect=function(){var e=t.defaults(arguments,["feedback"],t.FeedbackEffect);t.StereoEffect.call(this,e),this.feedback=new t.Signal(e.feedback,t.Type.NormalRange),this._feedbackL=new t.Gain,this._feedbackR=new t.Gain,this.effectReturnL.chain(this._feedbackL,this.effectSendL),this.effectReturnR.chain(this._feedbackR,this.effectSendR),this.feedback.fan(this._feedbackL.gain,this._feedbackR.gain),this._readOnly(["feedback"])},t.extend(t.StereoFeedbackEffect,t.StereoEffect),t.StereoFeedbackEffect.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["feedback"]),this.feedback.dispose(),this.feedback=null,this._feedbackL.dispose(),this._feedbackL=null,this._feedbackR.dispose(),this._feedbackR=null,this},t.StereoFeedbackEffect}),e(function(t){return t.StereoWidener=function(){var e=t.defaults(arguments,["width"],t.StereoWidener);t.MidSideEffect.call(this,e),this.width=new t.Signal(e.width,t.Type.NormalRange),this._readOnly(["width"]),this._twoTimesWidthMid=new t.Multiply(2),this._twoTimesWidthSide=new t.Multiply(2),this._midMult=new t.Multiply,this._twoTimesWidthMid.connect(this._midMult,0,1),this.midSend.chain(this._midMult,this.midReturn),this._oneMinusWidth=new t.Subtract,this._oneMinusWidth.connect(this._twoTimesWidthMid),this.context.getConstant(1).connect(this._oneMinusWidth,0,0),this.width.connect(this._oneMinusWidth,0,1),this._sideMult=new t.Multiply,this.width.connect(this._twoTimesWidthSide),this._twoTimesWidthSide.connect(this._sideMult,0,1),this.sideSend.chain(this._sideMult,this.sideReturn)},t.extend(t.StereoWidener,t.MidSideEffect),t.StereoWidener.defaults={width:.5},t.StereoWidener.prototype.dispose=function(){return t.MidSideEffect.prototype.dispose.call(this),this._writable(["width"]),this.width.dispose(),this.width=null,this._midMult.dispose(),this._midMult=null,this._sideMult.dispose(),this._sideMult=null,this._twoTimesWidthMid.dispose(),this._twoTimesWidthMid=null,this._twoTimesWidthSide.dispose(),this._twoTimesWidthSide=null,this._oneMinusWidth.dispose(),this._oneMinusWidth=null,this},t.StereoWidener}),e(function(t){return t.Tremolo=function(){var e=t.defaults(arguments,["frequency","depth"],t.Tremolo);t.StereoEffect.call(this,e),this._lfoL=new t.LFO({phase:e.spread,min:1,max:0}),this._lfoR=new t.LFO({phase:e.spread,min:1,max:0}),this._amplitudeL=new t.Gain,this._amplitudeR=new t.Gain,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.depth=new t.Signal(e.depth,t.Type.NormalRange),this._readOnly(["frequency","depth"]),this.effectSendL.chain(this._amplitudeL,this.effectReturnL),this.effectSendR.chain(this._amplitudeR,this.effectReturnR),this._lfoL.connect(this._amplitudeL.gain),this._lfoR.connect(this._amplitudeR.gain),this.frequency.fan(this._lfoL.frequency,this._lfoR.frequency),this.depth.fan(this._lfoR.amplitude,this._lfoL.amplitude),this.type=e.type,this.spread=e.spread},t.extend(t.Tremolo,t.StereoEffect),t.Tremolo.defaults={frequency:10,type:"sine",depth:.5,spread:180},t.Tremolo.prototype.start=function(t){return this._lfoL.start(t),this._lfoR.start(t),this},t.Tremolo.prototype.stop=function(t){return this._lfoL.stop(t),this._lfoR.stop(t),this},t.Tremolo.prototype.sync=function(e){return this._lfoL.sync(e),this._lfoR.sync(e),t.Transport.syncSignal(this.frequency),this},t.Tremolo.prototype.unsync=function(){return this._lfoL.unsync(),this._lfoR.unsync(),t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Tremolo.prototype,"type",{get:function(){return this._lfoL.type},set:function(t){this._lfoL.type=t,this._lfoR.type=t}}),Object.defineProperty(t.Tremolo.prototype,"spread",{get:function(){return this._lfoR.phase-this._lfoL.phase},set:function(t){this._lfoL.phase=90-t/2,this._lfoR.phase=t/2+90}}),t.Tremolo.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["frequency","depth"]),this._lfoL.dispose(),this._lfoL=null,this._lfoR.dispose(),this._lfoR=null,this._amplitudeL.dispose(),this._amplitudeL=null,this._amplitudeR.dispose(),this._amplitudeR=null,this.frequency=null,this.depth=null,this},t.Tremolo}),e(function(t){return t.Vibrato=function(){var e=t.defaults(arguments,["frequency","depth"],t.Vibrato);t.Effect.call(this,e),this._delayNode=new t.Delay(0,e.maxDelay),this._lfo=new t.LFO({type:e.type,min:0,max:e.maxDelay,frequency:e.frequency,phase:-90}).start().connect(this._delayNode.delayTime),this.frequency=this._lfo.frequency,this.depth=this._lfo.amplitude,this.depth.value=e.depth,this._readOnly(["frequency","depth"]),this.effectSend.chain(this._delayNode,this.effectReturn)},t.extend(t.Vibrato,t.Effect),t.Vibrato.defaults={maxDelay:.005,frequency:5,depth:.1,type:"sine"},Object.defineProperty(t.Vibrato.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.Vibrato.prototype.dispose=function(){t.Effect.prototype.dispose.call(this),this._delayNode.dispose(),this._delayNode=null,this._lfo.dispose(),this._lfo=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null},t.Vibrato}),e(function(t){return t.Event=function(){var e=t.defaults(arguments,["callback","value"],t.Event);t.call(this),this._loop=e.loop,this.callback=e.callback,this.value=e.value,this._loopStart=this.toTicks(e.loopStart),this._loopEnd=this.toTicks(e.loopEnd),this._state=new t.TimelineState(t.State.Stopped),this._playbackRate=1,this._startOffset=0,this._probability=e.probability,this._humanize=e.humanize,this.mute=e.mute,this.playbackRate=e.playbackRate},t.extend(t.Event),t.Event.defaults={callback:t.noOp,loop:!1,loopEnd:"1m",loopStart:0,playbackRate:1,value:null,probability:1,mute:!1,humanize:!1},t.Event.prototype._rescheduleEvents=function(e){return e=t.defaultArg(e,-1),this._state.forEachFrom(e,function(e){var i;if(e.state===t.State.Started){t.isDefined(e.id)&&t.Transport.clear(e.id);var r=e.time+Math.round(this.startOffset/this._playbackRate);if(this._loop){i=1/0,t.isNumber(this._loop)&&(i=this._loop*this._getLoopDuration());var n=this._state.getAfter(r);null!==n&&(i=Math.min(i,n.time-r)),i!==1/0&&(this._state.setStateAtTime(t.State.Stopped,r+i+1),i=t.Ticks(i));var o=t.Ticks(this._getLoopDuration());e.id=t.Transport.scheduleRepeat(this._tick.bind(this),o,t.Ticks(r),i)}else e.id=t.Transport.schedule(this._tick.bind(this),t.Ticks(r))}}.bind(this)),this},Object.defineProperty(t.Event.prototype,"state",{get:function(){return this._state.getValueAtTime(t.Transport.ticks)}}),Object.defineProperty(t.Event.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t}}),Object.defineProperty(t.Event.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t}}),Object.defineProperty(t.Event.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t}}),t.Event.prototype.start=function(e){return e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Stopped&&(this._state.add({state:t.State.Started,time:e,id:void 0}),this._rescheduleEvents(e)),this},t.Event.prototype.stop=function(e){if(this.cancel(e),e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Started){this._state.setStateAtTime(t.State.Stopped,e);var i=this._state.getBefore(e),r=e;null!==i&&(r=i.time),this._rescheduleEvents(r)}return this},t.Event.prototype.cancel=function(e){return e=t.defaultArg(e,-1/0),e=this.toTicks(e),this._state.forEachFrom(e,function(e){t.Transport.clear(e.id)}),this._state.cancel(e),this},t.Event.prototype._tick=function(e){var i=t.Transport.getTicksAtTime(e);if(!this.mute&&this._state.getValueAtTime(i)===t.State.Started){if(this.probability<1&&Math.random()>this.probability)return;if(this.humanize){var r=.02;t.isBoolean(this.humanize)||(r=this.toSeconds(this.humanize)),e+=(2*Math.random()-1)*r}this.callback(e,this.value)}},t.Event.prototype._getLoopDuration=function(){return Math.round((this._loopEnd-this._loopStart)/this._playbackRate)},Object.defineProperty(t.Event.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"progress",{get:function(){if(this._loop){var e=t.Transport.ticks,i=this._state.get(e);if(null!==i&&i.state===t.State.Started){var r=this._getLoopDuration();return(e-i.time)%r/r}return 0}return 0}}),t.Event.prototype.dispose=function(){this.cancel(),this._state.dispose(),this._state=null,this.callback=null,this.value=null},t.Event}),e(function(t){return t.Loop=function(){var e=t.defaults(arguments,["callback","interval"],t.Loop);t.call(this),this._event=new t.Event({callback:this._tick.bind(this),loop:!0,loopEnd:e.interval,playbackRate:e.playbackRate,probability:e.probability}),this.callback=e.callback,this.iterations=e.iterations},t.extend(t.Loop),t.Loop.defaults={interval:"4n",callback:t.noOp,playbackRate:1,iterations:1/0,probability:!0,mute:!1},t.Loop.prototype.start=function(t){return this._event.start(t),this},t.Loop.prototype.stop=function(t){return this._event.stop(t),this},t.Loop.prototype.cancel=function(t){return this._event.cancel(t),this},t.Loop.prototype._tick=function(t){this.callback(t)},Object.defineProperty(t.Loop.prototype,"state",{get:function(){return this._event.state}}),Object.defineProperty(t.Loop.prototype,"progress",{get:function(){return this._event.progress}}),Object.defineProperty(t.Loop.prototype,"interval",{get:function(){return this._event.loopEnd},set:function(t){this._event.loopEnd=t}}),Object.defineProperty(t.Loop.prototype,"playbackRate",{get:function(){return this._event.playbackRate},set:function(t){this._event.playbackRate=t}}),Object.defineProperty(t.Loop.prototype,"humanize",{get:function(){return this._event.humanize},set:function(t){this._event.humanize=t}}),Object.defineProperty(t.Loop.prototype,"probability",{get:function(){return this._event.probability},set:function(t){this._event.probability=t}}),Object.defineProperty(t.Loop.prototype,"mute",{get:function(){return this._event.mute},set:function(t){this._event.mute=t}}),Object.defineProperty(t.Loop.prototype,"iterations",{get:function(){return!0===this._event.loop?1/0:this._event.loop},set:function(t){this._event.loop=t===1/0||t}}),t.Loop.prototype.dispose=function(){this._event.dispose(),this._event=null,this.callback=null},t.Loop}),e(function(t){return t.Part=function(){var e=t.defaults(arguments,["callback","events"],t.Part);t.Event.call(this,e),this._events=[];for(var i=0;i=this._loopStart&&e.startOffset=r&&(e.loop=!1,e.start(t.Ticks(i))):e.startOffset>=r&&e.start(t.Ticks(i))},Object.defineProperty(t.Part.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t,this._forEach(function(t){t.startOffset+=this._startOffset})}}),t.Part.prototype.stop=function(e){var i=this.toTicks(e);return this._state.cancel(i),this._state.setStateAtTime(t.State.Stopped,i),this._forEach(function(t){t.stop(e)}),this},t.Part.prototype.at=function(e,i){e=t.TransportTime(e);for(var r=t.Ticks(1).toSeconds(),n=0;n=0;r--){var n=this._events[r];n instanceof t.Part?n.remove(e,i):n.startOffset===e&&(t.isUndef(i)||t.isDefined(i)&&n.value===i)&&(this._events.splice(r,1),n.dispose())}return this},t.Part.prototype.removeAll=function(){return this._forEach(function(t){t.dispose()}),this._events=[],this},t.Part.prototype.cancel=function(t){return this._forEach(function(e){e.cancel(t)}),this._state.cancel(this.toTicks(t)),this},t.Part.prototype._forEach=function(e,i){if(this._events){i=t.defaultArg(i,this);for(var r=this._events.length-1;r>=0;r--){var n=this._events[r];n instanceof t.Part?n._forEach(e,i):e.call(i,n)}}return this},t.Part.prototype._setAll=function(t,e){this._forEach(function(i){i[t]=e})},t.Part.prototype._tick=function(t,e){this.mute||this.callback(t,e)},t.Part.prototype._testLoopBoundries=function(e){e.startOffset=this._loopEnd?e.cancel(0):e.state===t.State.Stopped&&this._restartEvent(e)},Object.defineProperty(t.Part.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t,this._setAll("probability",t)}}),Object.defineProperty(t.Part.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t,this._setAll("humanize",t)}}),Object.defineProperty(t.Part.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._forEach(function(e){e._loopStart=this._loopStart,e._loopEnd=this._loopEnd,e.loop=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._forEach(function(e){e.loopEnd=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._forEach(function(t){t.loopStart=this.loopStart,this._testLoopBoundries(t)})}}),Object.defineProperty(t.Part.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._setAll("playbackRate",t)}}),Object.defineProperty(t.Part.prototype,"length",{get:function(){return this._events.length}}),t.Part.prototype.dispose=function(){return this.removeAll(),this._state.dispose(),this._state=null,this.callback=null,this._events=null,this},t.Part}),e(function(t){return t.Pattern=function(){var e=t.defaults(arguments,["callback","values","pattern"],t.Pattern);t.Loop.call(this,e),this._pattern=new t.CtrlPattern({values:e.values,type:e.pattern,index:e.index})},t.extend(t.Pattern,t.Loop),t.Pattern.defaults={pattern:t.CtrlPattern.Type.Up,callback:t.noOp,values:[]},t.Pattern.prototype._tick=function(t){this.callback(t,this._pattern.value),this._pattern.next()},Object.defineProperty(t.Pattern.prototype,"index",{get:function(){return this._pattern.index},set:function(t){this._pattern.index=t}}),Object.defineProperty(t.Pattern.prototype,"values",{get:function(){return this._pattern.values},set:function(t){this._pattern.values=t}}),Object.defineProperty(t.Pattern.prototype,"value",{get:function(){return this._pattern.value}}),Object.defineProperty(t.Pattern.prototype,"pattern",{get:function(){return this._pattern.type},set:function(t){this._pattern.type=t}}),t.Pattern.prototype.dispose=function(){t.Loop.prototype.dispose.call(this),this._pattern.dispose(),this._pattern=null},t.Pattern}),e(function(t){return t.Sequence=function(){var e=t.defaults(arguments,["callback","events","subdivision"],t.Sequence),i=e.events;if(delete e.events,t.Part.call(this,e),this._subdivision=this.toTicks(e.subdivision),t.isUndef(e.loopEnd)&&t.isDefined(i)&&(this._loopEnd=i.length*this._subdivision),this._loop=!0,t.isDefined(i))for(var r=0;r1){var e=-t/2,i=t/(this._oscillators.length-1);this._forEach(function(t,r){t.detune.value=e+i*r})}}}),Object.defineProperty(t.FatOscillator.prototype,"count",{get:function(){return this._oscillators.length},set:function(e){if(e=Math.max(e,1),this._oscillators.length!==e){this._forEach(function(t){t.dispose()}),this._oscillators=[];for(var i=0;i0&&this.getLevelAtTime(e)>.05){var i=this.toSeconds(this.portamento);this.frequency.exponentialRampTo(t,i,e)}else this.frequency.setValueAtTime(t,e);return this},t.Monophonic}),e(function(t){return t.Synth=function(e){e=t.defaultArg(e,t.Synth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","frequency","detune","envelope"])},t.extend(t.Synth,t.Monophonic),t.Synth.defaults={oscillator:{type:"triangle"},envelope:{attack:.005,decay:.1,sustain:.3,release:1}},t.Synth.prototype._triggerEnvelopeAttack=function(t,e){return this.envelope.triggerAttack(t,e),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.Synth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.Synth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.frequency=null,this.detune=null,this},t.Synth}),e(function(t){return t.AMSynth=function(e){e=t.defaultArg(e,t.AMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth,this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth,this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this._modulationScale=new t.AudioToGain,this._modulationNode=new t.Gain,this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.chain(this._modulationScale,this._modulationNode.gain),this._carrier.chain(this._modulationNode,this.output),this._readOnly(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.AMSynth,t.Monophonic),t.AMSynth.defaults={harmonicity:3,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.AMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.AMSynth.prototype._triggerEnvelopeRelease=function(t){return this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.AMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationScale.dispose(),this._modulationScale=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.AMSynth}),e(function(t){return t.MonoSynth=function(e){e=t.defaultArg(e,t.MonoSynth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.filter=new t.Filter(e.filter),this.filterEnvelope=new t.FrequencyEnvelope(e.filterEnvelope),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.filter,this.envelope,this.output),this.filterEnvelope.connect(this.filter.frequency),this._readOnly(["oscillator","frequency","detune","filter","filterEnvelope","envelope"])},t.extend(t.MonoSynth,t.Monophonic),t.MonoSynth.defaults={frequency:"C4",detune:0,oscillator:{type:"square"},filter:{Q:6,type:"lowpass",rolloff:-24},envelope:{attack:.005,decay:.1,sustain:.9,release:1},filterEnvelope:{attack:.06,decay:.2,sustain:.5,release:2,baseFrequency:200,octaves:7,exponent:2}},t.MonoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.envelope.triggerAttack(t,e),this.filterEnvelope.triggerAttack(t),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.MonoSynth.prototype._triggerEnvelopeRelease=function(t){return this.envelope.triggerRelease(t),this.filterEnvelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MonoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","filter","filterEnvelope","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.filterEnvelope.dispose(),this.filterEnvelope=null,this.filter.dispose(),this.filter=null,this.frequency=null,this.detune=null,this},t.MonoSynth}),e(function(t){return t.DuoSynth=function(e){e=t.defaultArg(e,t.DuoSynth.defaults),t.Monophonic.call(this,e),this.voice0=new t.MonoSynth(e.voice0),this.voice0.volume.value=-10,this.voice1=new t.MonoSynth(e.voice1),this.voice1.volume.value=-10,this._vibrato=new t.LFO(e.vibratoRate,-50,50),this._vibrato.start(),this.vibratoRate=this._vibrato.frequency,this._vibratoGain=new t.Gain(e.vibratoAmount,t.Type.Positive),this.vibratoAmount=this._vibratoGain.gain,this.frequency=new t.Signal(440,t.Type.Frequency),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.frequency.connect(this.voice0.frequency),this.frequency.chain(this.harmonicity,this.voice1.frequency),this._vibrato.connect(this._vibratoGain),this._vibratoGain.fan(this.voice0.detune,this.voice1.detune),this.voice0.connect(this.output),this.voice1.connect(this.output),this._readOnly(["voice0","voice1","frequency","vibratoAmount","vibratoRate"])},t.extend(t.DuoSynth,t.Monophonic),t.DuoSynth.defaults={vibratoAmount:.5,vibratoRate:5,harmonicity:1.5,voice0:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}},voice1:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}}},t.DuoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.voice0._triggerEnvelopeAttack(t,e),this.voice1._triggerEnvelopeAttack(t,e),this},t.DuoSynth.prototype._triggerEnvelopeRelease=function(t){return this.voice0._triggerEnvelopeRelease(t),this.voice1._triggerEnvelopeRelease(t),this},t.DuoSynth.prototype.getLevelAtTime=function(t){return(this.voice0.getLevelAtTime(t)+this.voice1.getLevelAtTime(t))/2},t.DuoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["voice0","voice1","frequency","vibratoAmount","vibratoRate"]),this.voice0.dispose(),this.voice0=null,this.voice1.dispose(),this.voice1=null,this.frequency.dispose(),this.frequency=null,this._vibratoGain.dispose(),this._vibratoGain=null,this._vibrato=null,this.harmonicity.dispose(),this.harmonicity=null,this.vibratoAmount.dispose(),this.vibratoAmount=null,this.vibratoRate=null,this},t.DuoSynth}),e(function(t){return t.FMSynth=function(e){e=t.defaultArg(e,t.FMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth(e.carrier),this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth(e.modulator),this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.modulationIndex=new t.Multiply(e.modulationIndex),this.modulationIndex.units=t.Type.Positive,this._modulationNode=new t.Gain(0),this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.frequency.chain(this.modulationIndex,this._modulationNode),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.connect(this._modulationNode.gain),this._modulationNode.connect(this._carrier.frequency),this._carrier.connect(this.output),this._readOnly(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.FMSynth,t.Monophonic),t.FMSynth.defaults={harmonicity:3,modulationIndex:10,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.FMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.FMSynth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.FMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.modulationIndex.dispose(),this.modulationIndex=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.FMSynth}),e(function(t){return t.MembraneSynth=function(e){e=t.defaultArg(e,t.MembraneSynth.defaults),t.Instrument.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.octaves=e.octaves,this.pitchDecay=e.pitchDecay,this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","envelope"])},t.extend(t.MembraneSynth,t.Instrument),t.MembraneSynth.defaults={pitchDecay:.05,octaves:10,oscillator:{type:"sine"},envelope:{attack:.001,decay:.4,sustain:.01,release:1.4,attackCurve:"exponential"}},t.MembraneSynth.prototype.triggerAttack=function(t,e,i){e=this.toSeconds(e);var r=(t=this.toFrequency(t))*this.octaves;return this.oscillator.frequency.setValueAtTime(r,e),this.oscillator.frequency.exponentialRampToValueAtTime(t,e+this.toSeconds(this.pitchDecay)),this.envelope.triggerAttack(e,i),this.oscillator.start(e),this},t.MembraneSynth.prototype.triggerRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MembraneSynth.prototype.dispose=function(){return t.Instrument.prototype.dispose.call(this),this._writable(["oscillator","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this},t.MembraneSynth}),e(function(t){var e=[1,1.483,1.932,2.546,2.63,3.897];return t.MetalSynth=function(i){i=t.defaultArg(i,t.MetalSynth.defaults),t.Instrument.call(this,i),this.frequency=new t.Signal(i.frequency,t.Type.Frequency),this._oscillators=[],this._freqMultipliers=[],this._amplitue=new t.Gain(0).connect(this.output),this._highpass=new t.Filter({type:"highpass",Q:-3.0102999566398125}).connect(this._amplitue),this._octaves=i.octaves,this._filterFreqScaler=new t.Scale(i.resonance,7e3),this.envelope=new t.Envelope({attack:i.envelope.attack,attackCurve:"linear",decay:i.envelope.decay,sustain:0,release:i.envelope.release}).chain(this._filterFreqScaler,this._highpass.frequency),this.envelope.connect(this._amplitue.gain);for(var r=0;re&&(o.voice.triggerRelease(e),o.release=e)}return this},t.PolySynth.prototype.sync=function(){return this._syncMethod("triggerAttack",1),this._syncMethod("triggerRelease",1),this},t.PolySynth.prototype.set=function(t,e,i){for(var r=0;rt&&(i.release=t,i.voice.triggerRelease(t))}return this},t.PolySynth.prototype.dispose=function(){t.Instrument.prototype.dispose.call(this);for(var e=0;e0)r=i[0];else if(!r&&t.isDefined(e))throw new Error("Tone.UserMedia: no matching device: "+e);this._device=r;var n={audio:{echoCancellation:!1,sampleRate:this.context.sampleRate}};return r&&(n.audio.deviceId=r.deviceId),navigator.mediaDevices.getUserMedia(n).then(function(t){return this._stream||(this._stream=t,this._mediaStream=this.context.createMediaStreamSource(t),this._mediaStream.connect(this.output)),this}.bind(this))}.bind(this))},t.UserMedia.prototype.close=function(){return this._stream&&(this._stream.getAudioTracks().forEach(function(t){t.stop()}),this._stream=null,this._mediaStream.disconnect(),this._mediaStream=null),this._device=null,this},t.UserMedia.enumerateDevices=function(){return navigator.mediaDevices.enumerateDevices().then(function(t){return t.filter(function(t){return"audioinput"===t.kind})})},Object.defineProperty(t.UserMedia.prototype,"state",{get:function(){return this._stream&&this._stream.active?t.State.Started:t.State.Stopped}}),Object.defineProperty(t.UserMedia.prototype,"deviceId",{get:function(){if(this._device)return this._device.deviceId}}),Object.defineProperty(t.UserMedia.prototype,"groupId",{get:function(){if(this._device)return this._device.groupId}}),Object.defineProperty(t.UserMedia.prototype,"label",{get:function(){if(this._device)return this._device.label}}),Object.defineProperty(t.UserMedia.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.UserMedia.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.close(),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null,this},Object.defineProperty(t.UserMedia,"supported",{get:function(){return t.isDefined(navigator.mediaDevices)&&t.isFunction(navigator.mediaDevices.getUserMedia)}}),t.UserMedia}),e(function(t){return t.Midi=function(e,i){if(!(this instanceof t.Midi))return new t.Midi(e,i);t.Frequency.call(this,e,i)},t.extend(t.Midi,t.Frequency),t.Midi.prototype._defaultUnits="midi",t.Midi.prototype._frequencyToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._frequencyToUnits.call(this,e))},t.Midi.prototype._ticksToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._ticksToUnits.call(this,e))},t.Midi.prototype._beatsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._beatsToUnits.call(this,e))},t.Midi.prototype._secondsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._secondsToUnits.call(this,e))},t.Midi.prototype.toMidi=function(){return this.valueOf()},t.Midi.prototype.toFrequency=function(){return t.Frequency.mtof(this.toMidi())},t.Midi.prototype.transpose=function(t){return new this.constructor(this.toMidi()+t)},t.Midi}),t}()}.call(e,i,e,t))||(t.exports=r)},function(t,e,i){(function(e){var i;t.exports=function t(e,r,n){function o(a,h){if(!r[a]){if(!e[a]){var l="function"==typeof i&&i;if(!h&&l)return i(a,!0);if(s)return s(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var c=r[a]={exports:{}};e[a][0].call(c.exports,function(t){var i=e[a][1][t];return o(i||t)},c,c.exports,t,e,r,n)}return r[a].exports}for(var s="function"==typeof i&&i,a=0;a0)throw new Error("Invalid string. Length must be a multiple of 4");var u=t.length;h="="===t.charAt(u-2)?2:"="===t.charAt(u-1)?1:0,l=new i(3*t.length/4-h),s=h>0?t.length-4:t.length;var c=0;for(n=0,o=0;n>16),r((65280&a)>>8),r(255&a);return 2===h?r(255&(a=e(t.charAt(n))<<2|e(t.charAt(n+1))>>4)):1===h&&(r((a=e(t.charAt(n))<<10|e(t.charAt(n+1))<<4|e(t.charAt(n+2))>>2)>>8&255),r(255&a)),l},t.fromByteArray=function(t){function e(t){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t)}function i(t){return e(t>>18&63)+e(t>>12&63)+e(t>>6&63)+e(63&t)}var r,n,o,s=t.length%3,a="";for(r=0,o=t.length-s;r>2),a+=e(n<<4&63),a+="==";break;case 2:n=(t[t.length-2]<<8)+t[t.length-1],a+=e(n>>10),a+=e(n>>4&63),a+=e(n<<2&63),a+="="}return a}}(void 0===i?this.base64js={}:i)},{}],2:[function(t,e,i){},{}],3:[function(t,i,r){(function(e){"use strict";function i(){return n.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function n(t){return this instanceof n?(n.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof t?function(t,e){if(t=s(t,e<0?0:0|a(e)),!n.TYPED_ARRAY_SUPPORT)for(var i=0;i1?arguments[1]:"utf8"):function(t,e){if(n.isBuffer(e))return function(t,e){var i=0|a(e.length);return t=s(t,i),e.copy(t,0,0,i),t}(t,e);if(F(e))return function(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r1?new n(t,arguments[1]):new n(t)}function o(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r>>1&&(t.parent=I),t}function a(t){if(t>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|t}function h(t,e){"string"!=typeof t&&(t=""+t);var i=t.length;if(0===i)return 0;for(var r=!1;;)switch(e){case"ascii":case"binary":case"raw":case"raws":return i;case"utf8":case"utf-8":return k(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return C(t).length;default:if(r)return k(t).length;e=(""+e).toLowerCase(),r=!0}}function l(t,e,i,r){i=Number(i)||0;var n=t.length-i;r?(r=Number(r))>n&&(r=n):r=n;var o=e.length;if(o%2!=0)throw new Error("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,n=i%256,o.push(n),o.push(r);return o}(e,t.length-i),t,i,r)}function m(t,e,i){return 0===e&&i===t.length?O.fromByteArray(t):O.fromByteArray(t.slice(e,i))}function y(t,e,i){i=Math.min(t.length,i);for(var r=[],n=e;n239?4:l>223?3:l>191?2:1;if(n+c<=i)switch(c){case 1:l<128&&(u=l);break;case 2:128==(192&(o=t[n+1]))&&(h=(31&l)<<6|63&o)>127&&(u=h);break;case 3:o=t[n+1],s=t[n+2],128==(192&o)&&128==(192&s)&&(h=(15&l)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(u=h);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&l)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(u=h)}null===u?(u=65533,c=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),n+=c}return function(t){var e=t.length;if(e<=D)return String.fromCharCode.apply(String,t);for(var i="",r=0;rr)&&(i=r);for(var n="",o=e;oi)throw new RangeError("Trying to access beyond buffer length")}function x(t,e,i,r,o,s){if(!n.isBuffer(t))throw new TypeError("buffer must be a Buffer instance");if(e>o||et.length)throw new RangeError("index out of range")}function w(t,e,i,r){e<0&&(e=65535+e+1);for(var n=0,o=Math.min(t.length-i,2);n>>8*(r?n:1-n)}function T(t,e,i,r){e<0&&(e=4294967295+e+1);for(var n=0,o=Math.min(t.length-i,4);n>>8*(r?n:3-n)&255}function M(t,e,i,r,n,o){if(e>n||et.length)throw new RangeError("index out of range");if(i<0)throw new RangeError("index out of range")}function P(t,e,i,r,n){return n||M(t,e,i,4,3.4028234663852886e38,-3.4028234663852886e38),L.write(t,e,i,r,23,4),i+4}function A(t,e,i,r,n){return n||M(t,e,i,8,1.7976931348623157e308,-1.7976931348623157e308),L.write(t,e,i,r,52,8),i+8}function E(t){return t<16?"0"+t.toString(16):t.toString(16)}function k(t,e){e=e||1/0;for(var i,r=t.length,n=null,o=[],s=0;s55295&&i<57344){if(!n){if(i>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}n=i;continue}if(i<56320){(e-=3)>-1&&o.push(239,191,189),n=i;continue}i=65536+(n-55296<<10|i-56320)}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,i<128){if((e-=1)<0)break;o.push(i)}else if(i<2048){if((e-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((e-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function C(t){return O.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(B,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function R(t,e,i,r){for(var n=0;n=e.length||n>=t.length);n++)e[n+i]=t[n];return n}var O=t("base64-js"),L=t("ieee754"),F=t("isarray");r.Buffer=n,r.SlowBuffer=function t(e,i){if(!(this instanceof t))return new t(e,i);var r=new n(e,i);return delete r.parent,r},r.INSPECT_MAX_BYTES=50,n.poolSize=8192;var I={};n.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){function t(){}try{var e=new Uint8Array(1);return e.foo=function(){return 42},e.constructor=t,42===e.foo()&&e.constructor===t&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}(),n.TYPED_ARRAY_SUPPORT?(n.prototype.__proto__=Uint8Array.prototype,n.__proto__=Uint8Array):(n.prototype.length=void 0,n.prototype.parent=void 0),n.isBuffer=function(t){return!(null==t||!t._isBuffer)},n.compare=function(t,e){if(!n.isBuffer(t)||!n.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var i=t.length,r=e.length,o=0,s=Math.min(i,r);othis.length&&(i=this.length),i<=e)return"";for(;;)switch(t){case"hex":return _(this,e,i);case"utf8":case"utf-8":return y(this,e,i);case"ascii":return v(this,e,i);case"binary":return g(this,e,i);case"base64":return m(this,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return b(this,e,i);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}.apply(this,arguments)},n.prototype.equals=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===n.compare(this,t)},n.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},n.prototype.compare=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?0:n.compare(this,t)},n.prototype.indexOf=function(t,e){function i(t,e,i){for(var r=-1,n=0;i+n2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e>>=0,0===this.length)return-1;if(e>=this.length)return-1;if(e<0&&(e=Math.max(this.length+e,0)),"string"==typeof t)return 0===t.length?-1:String.prototype.indexOf.call(this,t,e);if(n.isBuffer(t))return i(this,t,e);if("number"==typeof t)return n.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,t,e):i(this,[t],e);throw new TypeError("val must be string, number or Buffer")},n.prototype.get=function(t){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(t)},n.prototype.set=function(t,e){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(t,e)},n.prototype.write=function(t,e,i,r){if(void 0===e)r="utf8",i=this.length,e=0;else if(void 0===i&&"string"==typeof e)r=e,i=this.length,e=0;else if(isFinite(e))e|=0,isFinite(i)?(i|=0,void 0===r&&(r="utf8")):(r=i,i=void 0);else{var n=r;r=e,e=0|i,i=n}var o=this.length-e;if((void 0===i||i>o)&&(i=o),t.length>0&&(i<0||e<0)||e>this.length)throw new RangeError("attempt to write outside buffer bounds");r||(r="utf8");for(var s=!1;;)switch(r){case"hex":return l(this,t,e,i);case"utf8":case"utf-8":return u(this,t,e,i);case"ascii":return c(this,t,e,i);case"binary":return p(this,t,e,i);case"base64":return d(this,t,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return f(this,t,e,i);default:if(s)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),s=!0}},n.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var D=4096;n.prototype.slice=function(t,e){var i,r=this.length;if(t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(n*=256);)r+=this[t+--e]*n;return r},n.prototype.readUInt8=function(t,e){return e||S(t,1,this.length),this[t]},n.prototype.readUInt16LE=function(t,e){return e||S(t,2,this.length),this[t]|this[t+1]<<8},n.prototype.readUInt16BE=function(t,e){return e||S(t,2,this.length),this[t]<<8|this[t+1]},n.prototype.readUInt32LE=function(t,e){return e||S(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},n.prototype.readUInt32BE=function(t,e){return e||S(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},n.prototype.readIntLE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=this[t],n=1,o=0;++o=(n*=128)&&(r-=Math.pow(2,8*e)),r},n.prototype.readIntBE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=e,n=1,o=this[t+--r];r>0&&(n*=256);)o+=this[t+--r]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},n.prototype.readInt8=function(t,e){return e||S(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},n.prototype.readInt16LE=function(t,e){e||S(t,2,this.length);var i=this[t]|this[t+1]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt16BE=function(t,e){e||S(t,2,this.length);var i=this[t+1]|this[t]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt32LE=function(t,e){return e||S(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},n.prototype.readInt32BE=function(t,e){return e||S(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},n.prototype.readFloatLE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!0,23,4)},n.prototype.readFloatBE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!1,23,4)},n.prototype.readDoubleLE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!0,52,8)},n.prototype.readDoubleBE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!1,52,8)},n.prototype.writeUIntLE=function(t,e,i,r){t=+t,e|=0,i|=0,r||x(this,t,e,i,Math.pow(2,8*i),0);var n=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+n]=t/o&255;return e+i},n.prototype.writeUInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,255,0),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},n.prototype.writeUInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeUInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeUInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):T(this,t,e,!0),e+4},n.prototype.writeUInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeIntLE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=0,s=1,a=t<0?1:0;for(this[e]=255&t;++o>0)-a&255;return e+i},n.prototype.writeIntBE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=i-1,s=1,a=t<0?1:0;for(this[e+o]=255&t;--o>=0&&(s*=256);)this[e+o]=(t/s>>0)-a&255;return e+i},n.prototype.writeInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,127,-128),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},n.prototype.writeInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):T(this,t,e,!0),e+4},n.prototype.writeInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeFloatLE=function(t,e,i){return P(this,t,e,!0,i)},n.prototype.writeFloatBE=function(t,e,i){return P(this,t,e,!1,i)},n.prototype.writeDoubleLE=function(t,e,i){return A(this,t,e,!0,i)},n.prototype.writeDoubleBE=function(t,e,i){return A(this,t,e,!1,i)},n.prototype.copy=function(t,e,i,r){if(i||(i=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;o--)t[o+e]=this[o+i];else if(s<1e3||!n.TYPED_ARRAY_SUPPORT)for(o=0;o=this.length)throw new RangeError("start out of bounds");if(i<0||i>this.length)throw new RangeError("end out of bounds");var r;if("number"==typeof t)for(r=e;r>1,u=-7,c=i?n-1:0,p=i?-1:1,d=t[e+c];for(c+=p,o=d&(1<<-u)-1,d>>=-u,u+=a;u>0;o=256*o+t[e+c],c+=p,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=r;u>0;s=256*s+t[e+c],c+=p,u-=8);if(0===o)o=1-l;else{if(o===h)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,r),o-=l}return(d?-1:1)*s*Math.pow(2,o-r)},i.write=function(t,e,i,r,n,o){var s,a,h,l=8*o-n-1,u=(1<>1,p=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,f=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+c>=1?p/h:p*Math.pow(2,1-c))*h>=2&&(s++,h/=2),s+c>=u?(a=0,s=u):s+c>=1?(a=(e*h-1)*Math.pow(2,n),s+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,n),s=0));n>=8;t[i+d]=255&a,d+=f,a/=256,n-=8);for(s=s<0;t[i+d]=255&s,d+=f,s/=256,l-=8);t[i+d-f]|=128*m}},{}],8:[function(t,e,i){var r={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},{}],9:[function(t,e,i){"use strict";function r(t,e){return t.b===e.b&&t.a===e.a}function n(t,e){return t.bt?0:t)<=(i=0>i?0:i)?0===i?(e+r)/2:e+t/(t+i)*(r-e):r+i/(t+i)*(e-r)}function d(t){var e=g(t.b);return b(e,t.c),b(e.b,t.c),S(e,t.a),e}function f(t,e){var i=!1,r=!1;t!==e&&(e.a!==t.a&&(r=!0,w(e.a,t.a)),e.d!==t.d&&(i=!0,T(e.d,t.d)),_(e,t),r||(b(e,t.a),t.a.c=t),i||(S(e,t.d),t.d.a=t))}function m(t){var e=t.b,i=!1;t.d!==t.b.d&&(i=!0,T(t.d,t.b.d)),t.c===t?w(t.a,null):(t.b.d.a=J(t),t.a.c=t.c,_(t,J(t)),i||S(t,t.d)),e.c===e?(w(e.a,null),T(e.d,null)):(t.d.a=J(e),e.a.c=e.c,_(e,J(e))),x(t)}function y(t){var e=g(t),i=e.b;return _(e,t.e),e.a=t.b.a,b(i,e.a),e.d=i.d=t.d,e=e.b,_(t.b,J(t.b)),_(t.b,e),t.b.a=e.a,e.b.a.c=e.b,e.b.d=t.b.d,e.f=t.f,e.b.f=t.b.f,e}function v(t,e){var i=!1,r=g(t),n=r.b;return e.d!==t.d&&(i=!0,T(e.d,t.d)),_(r,t.e),_(n,e),r.a=t.b.a,n.a=e.a,r.d=n.d=t.d,t.d.a=n,i||S(r,t.d),r}function g(t){var e=new Z,i=new Z,r=t.b.h;return i.h=r,r.b.h=e,e.h=t,t.b.h=i,e.b=i,e.c=e,e.e=i,i.b=e,i.c=i,i.e=e}function _(t,e){var i=t.c,r=e.c;i.b.e=e,r.b.e=t,t.c=r,e.c=i}function b(t,e){var i=e.f,r=new K(e,i);i.e=r,e.f=r,i=r.c=t;do{i.a=r,i=i.c}while(i!==t)}function S(t,e){var i=e.d,r=new Q(e,i);i.b=r,e.d=r,r.a=t,r.c=e.c,i=t;do{i.d=r,i=i.e}while(i!==t)}function x(t){var e=t.h;t=t.b.h,e.b.h=t,t.b.h=e}function w(t,e){var i=t.c,r=i;do{r.a=e,r=r.c}while(r!==i);i=t.f,(r=t.e).f=i,i.e=r}function T(t,e){var i=t.a,r=i;do{r.d=e,r=r.e}while(r!==i);i=t.d,(r=t.b).d=i,i.b=r}function M(t){var e=0;return Math.abs(t[1])>Math.abs(t[0])&&(e=1),Math.abs(t[2])>Math.abs(t[e])&&(e=2),e}function P(t,e){t.f+=e.f,t.b.f+=e.b.f}function A(t,e,i){return t=t.a,e=e.a,i=i.a,e.b.a===t?i.b.a===t?n(e.a,i.a)?0>=s(i.b.a,e.a,i.a):0<=s(e.b.a,i.a,e.a):0>=s(i.b.a,t,i.a):i.b.a===t?0<=s(e.b.a,t,e.a):(e=o(e.b.a,t,e.a),t=o(i.b.a,t,i.a),e>=t)}function E(t){t.a.i=null;var e=t.e;e.a.c=e.c,e.c.a=e.a,t.e=null}function k(t,e){m(t.a),t.c=!1,t.a=e,e.i=t}function C(t){var e=t.a.a;do{t=ut(t)}while(t.a.a===e);return t.c&&(e=v(lt(t).a.b,t.a.e),k(t,e),t=ut(t)),t}function R(t,e,i){var r=new ht;return r.a=i,r.e=z(t.f,e.e,r),i.i=r}function O(t,e){switch(t.s){case 100130:return 0!=(1&e);case 100131:return 0!==e;case 100132:return 0e;case 100134:return 2<=e||-2>=e}return!1}function L(t){var e=t.a,i=e.d;i.c=t.d,i.a=e,E(t)}function F(t,e,i){for(t=e,e=e.a;t!==i;){t.c=!1;var r=lt(t),n=r.a;if(n.a!==e.a){if(!r.c){L(t);break}n=v(e.c.b,n.b),k(r,n)}e.c!==n&&(f(J(n),n),f(e,n)),L(t),e=r.a,t=r}return e}function I(t,e,i,r,n,o){var s=!0;do{R(t,e,i.b),i=i.c}while(i!==r);for(null===n&&(n=lt(e).a.b.c);r=lt(e),(i=r.a.b).a===n.a;)i.c!==n&&(f(J(i),i),f(J(n),i)),r.f=e.f-i.f,r.d=O(t,r.f),e.b=!0,!s&&N(t,e)&&(P(i,n),E(e),m(n)),s=!1,e=r,n=i;e.b=!0,o&&q(t,e)}function D(t,e,i,r,n){var o=[e.g[0],e.g[1],e.g[2]];e.d=null,e.d=t.o&&t.o(o,i,r,t.c)||null,null===e.d&&(n?t.n||(Y(t,100156),t.n=!0):e.d=i[0])}function U(t,e,i){var r=[null,null,null,null];r[0]=e.a.d,r[1]=i.a.d,D(t,e.a,r,[.5,.5,0,0],!1),f(e,i)}function B(t,e,i,r,n){var o=Math.abs(e.b-t.b)+Math.abs(e.a-t.a),s=Math.abs(i.b-t.b)+Math.abs(i.a-t.a),a=n+1;r[n]=.5*s/(o+s),r[a]=.5*o/(o+s),t.g[0]+=r[n]*e.g[0]+r[a]*i.g[0],t.g[1]+=r[n]*e.g[1]+r[a]*i.g[1],t.g[2]+=r[n]*e.g[2]+r[a]*i.g[2]}function N(t,e){var i=lt(e),o=e.a,a=i.a;if(n(o.a,a.a)){if(0=p?st(i,p):n(u[l[p>>1]],u[l[p]])?st(i,p):at(i,p)),u[h]=null,c[h]=i.b,i.b=h}else for(i.c[-(h+1)]=null;0s(o.b.a,a.a,o.a))return!1;ut(e).b=e.b=!0,y(o.b),f(J(a),o)}return!0}function G(t,e){var i=lt(e),u=e.a,c=i.a,d=u.a,m=c.a,v=u.b.a,g=c.b.a,_=new K;if(s(v,t.a,d),s(g,t.a,m),d===m||Math.min(d.a,v.a)>Math.max(m.a,g.a))return!1;if(n(d,m)){if(0s(v,m,d))return!1;var b,S,x=v,w=d,T=g,M=m;if(n(x,w)||(b=x,x=w,w=b),n(T,M)||(b=T,T=M,M=b),n(x,T)||(b=x,x=T,T=b,b=w,w=M,M=b),n(T,w)?n(w,M)?(b=o(x,T,w),S=o(T,w,M),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,w.b)):(b=s(x,T,w),S=-s(x,M,w),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,M.b)):_.b=(T.b+w.b)/2,a(x,w)||(b=x,x=w,w=b),a(T,M)||(b=T,T=M,M=b),a(x,T)||(b=x,x=T,T=b,b=w,w=M,M=b),a(T,w)?a(w,M)?(b=h(x,T,w),S=h(T,w,M),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,w.a)):(b=l(x,T,w),S=-l(x,M,w),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,M.a)):_.a=(T.a+w.a)/2,n(_,t.a)&&(_.b=t.a.b,_.a=t.a.a),n(x=n(d,m)?d:m,_)&&(_.b=x.b,_.a=x.a),r(_,d)||r(_,m))return N(t,e),!1;if(!r(v,t.a)&&0<=s(v,t.a,_)||!r(g,t.a)&&0>=s(g,t.a,_)){if(g===t.a)return y(u.b),f(c.b,u),e=C(e),u=lt(e).a,F(t,lt(e),i),I(t,e,J(u),u,u,!0),!0;if(v===t.a){y(c.b),f(u.e,J(c)),d=i=e,m=d.a.b.a;do{d=ut(d)}while(d.a.b.a===m);return d=lt(e=d).a.b.c,i.a=J(c),c=F(t,i,null),I(t,e,c.c,u.b.c,d,!0),!0}return 0<=s(v,t.a,_)&&(ut(e).b=e.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=s(g,t.a,_)&&(e.b=i.b=!0,y(c.b),c.a.b=t.a.b,c.a.a=t.a.a),!1}return y(u.b),y(c.b),f(J(c),u),u.a.b=_.b,u.a.a=_.a,u.a.h=et(t.e,u.a),u=u.a,c=[0,0,0,0],_=[d.d,v.d,m.d,g.d],u.g[0]=u.g[1]=u.g[2]=0,B(u,d,v,c,0),B(u,m,g,c,2),D(t,u,_,c,!0),ut(e).b=e.b=i.b=!0,!1}function q(t,e){for(var i=lt(e);;){for(;i.b;)e=i,i=lt(i);if(!e.b&&(i=e,null===(e=ut(e))||!e.b))break;e.b=!1;var r,o=e.a,a=i.a;if(r=o.b.a!==a.b.a)t:{var h=lt(r=e),l=r.a,u=h.a,c=void 0;if(n(l.b.a,u.b.a)){if(0>s(l.b.a,u.b.a,l.a)){r=!1;break t}ut(r).b=r.b=!0,c=y(l),f(u.b,c),c.d.c=r.d}else{if(0r.f&&(r.f*=2,r.c=rt(r.c,r.f+1)),0===r.b?i=n:(i=r.b,r.b=r.c[r.b]),r.e[i]=e,r.c[i]=n,r.d[n]=i,r.h&&at(r,n),i}return r=t.a++,t.c[r]=e,-(r+1)}function it(t){if(0===t.a)return ot(t.b);var e=t.c[t.d[t.a-1]];if(0!==t.b.a&&n(nt(t.b),e))return ot(t.b);do{--t.a}while(0t.a||n(r[a],r[l])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function at(t,e){for(var i=t.d,r=t.e,o=t.c,s=e,a=i[s];;){var h=s>>1,l=i[h];if(0===h||n(r[l],r[a])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function ht(){this.e=this.a=null,this.f=0,this.c=this.b=this.h=this.d=!1}function lt(t){return t.e.c.b}function ut(t){return t.e.a.b}var ct,pt=4e150,dt=0;(ct=H.prototype).x=function(){X(this,dt)},ct.B=function(t,e){switch(t){case 100142:return;case 100140:switch(e){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=e)}break;case 100141:return void(this.m=!!e);default:return void Y(this,100900)}Y(this,100901)},ct.y=function(t){switch(t){case 100142:return 0;case 100140:return this.s;case 100141:return this.m;default:Y(this,100900)}return!1},ct.A=function(t,e,i){this.j[0]=t,this.j[1]=e,this.j[2]=i},ct.z=function(t,e){var i=e||null;switch(t){case 100100:case 100106:this.h=i;break;case 100104:case 100110:this.l=i;break;case 100101:case 100107:this.k=i;break;case 100102:case 100108:this.i=i;break;case 100103:case 100109:this.p=i;break;case 100105:case 100111:this.o=i;break;case 100112:this.r=i;break;default:Y(this,100900)}},ct.C=function(t,e){var i=!1,r=[0,0,0];X(this,2);for(var n=0;3>n;++n){var o=t[n];-1e150>o&&(o=-1e150,i=!0),1e150p;++p){var d=t.g[p];de[p]&&(e[p]=d,i[p]=t)}if(t=0,e[1]-h[1]>e[0]-h[0]&&(t=1),e[2]-h[2]>e[t]-h[t]&&(t=2),h[t]>=e[t])a[0]=0,a[1]=0,a[2]=1;else{for(e=0,h=l[t],i=i[t],l=[0,0,0],h=[h.g[0]-i.g[0],h.g[1]-i.g[1],h.g[2]-i.g[2]],p=[0,0,0],t=o.e;t!==o;t=t.e)p[0]=t.g[0]-i.g[0],p[1]=t.g[1]-i.g[1],p[2]=t.g[2]-i.g[2],l[0]=h[1]*p[2]-h[2]*p[1],l[1]=h[2]*p[0]-h[0]*p[2],l[2]=h[0]*p[1]-h[1]*p[0],(d=l[0]*l[0]+l[1]*l[1]+l[2]*l[2])>e&&(e=d,a[0]=l[0],a[1]=l[1],a[2]=l[2]);0>=e&&(a[0]=a[1]=a[2]=0,a[M(h)]=1)}o=!0}for(l=M(a),t=this.b.c,e=(l+1)%3,i=(l+2)%3,l=0=(e=t.a).f))do{a+=(e.a.b-e.b.a.b)*(e.a.a+e.b.a.a),e=e.e}while(e!==t.a);if(0>a)for(a=this.b.c,o=a.e;o!==a;o=o.e)o.a=-o.a}for(this.n=!1,a=this.b.b,t=a.h;t!==a;t=o)o=t.h,e=t.e,r(t.a,t.b.a)&&t.e.e!==t&&(U(this,e,t),m(t),e=(t=e).e),e.e===t&&(e!==t&&(e!==o&&e!==o.b||(o=o.h),m(e)),t!==o&&t!==o.b||(o=o.h),m(t));for(this.e=a=new $,o=this.b.c,t=o.e;t!==o;t=t.e)t.h=et(a,t);for(tt(a),this.f=new function(t){this.a=new W,this.b=t,this.c=A}(this),j(this,-pt),j(this,pt);null!==(a=it(this.e));){for(;;){t:if(t=this.e,0===t.a)o=nt(t.b);else if(o=t.c[t.d[t.a-1]],0!==t.b.a&&(t=nt(t.b),n(t,o))){o=t;break t}if(null===o||!r(o,a))break;o=it(this.e),U(this,a.c,o.c)}V(this,a)}for(this.a=this.f.a.a.b.a.a,a=0;null!==(o=this.f.a.a.b);)o.h||++a,E(o);for(this.f=null,(a=this.e).b=null,a.d=null,this.e=a.c=null,a=this.b,t=a.a.b;t!==a.a;t=o)o=t.b,(t=t.a).e.e===t&&(P(t.c,t),m(t));if(!this.n){if(a=this.b,this.m)for(t=a.b.h;t!==a.b;t=o)o=t.h,t.b.d.c!==t.d.c?t.f=t.d.c?1:-1:m(t);else for(t=a.a.b;t!==a.a;t=o)if(o=t.b,t.c){for(t=t.a;n(t.b.a,t.a);t=t.c.b);for(;n(t.a,t.b.a);t=t.e);for(e=t.c.b,i=void 0;t.e!==e;)if(n(t.b.a,e.a)){for(;e.e!==t&&(u(e.e)||0>=s(e.a,e.b.a,e.e.b.a));)i=v(e.e,e),e=i.b;e=e.c.b}else{for(;e.e!==t&&(c(t.c.b)||0<=s(t.b.a,t.a,t.c.b.a));)i=v(t,t.c.b),t=i.b;t=t.e}for(;e.e.e!==t;)i=v(e.e,e),e=i.b}if(this.h||this.i||this.k||this.l)if(this.m){for(a=this.b,o=a.a.b;o!==a.a;o=o.b)if(o.c){this.h&&this.h(2,this.c),t=o.a;do{this.k&&this.k(t.a.d,this.c),t=t.e}while(t!==o.a);this.i&&this.i(this.c)}}else{for(a=this.b,o=!!this.l,t=!1,e=-1,i=a.a.d;i!==a.a;i=i.d)if(i.c){t||(this.h&&this.h(4,this.c),t=!0),l=i.a;do{o&&(h=l.b.d.c?0:1,e!==h&&(e=h,this.l&&this.l(!!e,this.c))),this.k&&this.k(l.a.d,this.c),l=l.e}while(l!==i.a)}t&&this.i&&this.i(this.c)}if(this.r){for(a=this.b,t=a.a.b;t!==a.a;t=o)if(o=t.b,!t.c){e=t.a,i=e.e,l=void 0;do{i=(l=i).e,l.d=null,null===l.b.d&&(l.c===l?w(l.a,null):(l.a.c=l.c,_(l,J(l))),(h=l.b).c===h?w(h.a,null):(h.a.c=h.c,_(h,J(h))),x(l))}while(l!==e);e=t.d,(t=t.b).d=e,e.b=t}return this.r(this.b),void(this.c=this.b=null)}}this.b=this.c=null},this.libtess={GluTesselator:H,windingRule:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},errorType:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156},gluEnum:{GLU_TESS_MESH:100112,GLU_TESS_TOLERANCE:100142,GLU_TESS_WINDING_RULE:100140,GLU_TESS_BOUNDARY_ONLY:100141,GLU_INVALID_ENUM:100900,GLU_INVALID_VALUE:100901,GLU_TESS_BEGIN:100100,GLU_TESS_VERTEX:100101,GLU_TESS_END:100102,GLU_TESS_ERROR:100103,GLU_TESS_EDGE_FLAG:100104,GLU_TESS_COMBINE:100105,GLU_TESS_BEGIN_DATA:100106,GLU_TESS_VERTEX_DATA:100107,GLU_TESS_END_DATA:100108,GLU_TESS_ERROR_DATA:100109,GLU_TESS_EDGE_FLAG_DATA:100110,GLU_TESS_COMBINE_DATA:100111}},H.prototype.gluDeleteTess=H.prototype.x,H.prototype.gluTessProperty=H.prototype.B,H.prototype.gluGetTessProperty=H.prototype.y,H.prototype.gluTessNormal=H.prototype.A,H.prototype.gluTessCallback=H.prototype.z,H.prototype.gluTessVertex=H.prototype.C,H.prototype.gluTessBeginPolygon=H.prototype.u,H.prototype.gluTessBeginContour=H.prototype.t,H.prototype.gluTessEndContour=H.prototype.v,H.prototype.gluTessEndPolygon=H.prototype.w,void 0!==e&&(e.exports=this.libtess)},{}],10:[function(t,e,i){(function(r){!function(t,r){r("object"==typeof i&&void 0!==e?i:t.opentype={})}(this,function(e){"use strict";function i(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function n(t,e){this.source=t,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=e,this.destLen=0,this.ltree=new i,this.dtree=new i}function o(t,e,i,r){var n,o;for(n=0;n>>=1,e}function h(t,e,i){if(!e)return i;for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>16-e;return t.tag>>>=e,t.bitcount-=e,r+i}function l(t,e){for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>=1,++n,i+=e.table[n],r-=e.table[n]}while(r>=0);return t.tag=o,t.bitcount-=n,e.trans[i+r]}function u(t,e,i){var r,n,o,a,u,c;for(r=h(t,5,257),n=h(t,5,1),o=h(t,4,4),a=0;a<19;++a)Le[a]=0;for(a=0;a8;)t.sourceIndex--,t.bitcount-=8;if(e=256*(e=t.source[t.sourceIndex+1])+t.source[t.sourceIndex],i=256*(i=t.source[t.sourceIndex+3])+t.source[t.sourceIndex+2],e!==(65535&~i))return Te;for(t.sourceIndex+=4,r=e;r;--r)t.dest[t.destLen++]=t.source[t.sourceIndex++];return t.bitcount=0,we}function d(t,e,i,r,n){return Math.pow(1-n,3)*t+3*Math.pow(1-n,2)*n*e+3*(1-n)*Math.pow(n,2)*i+Math.pow(n,3)*r}function f(){this.x1=Number.NaN,this.y1=Number.NaN,this.x2=Number.NaN,this.y2=Number.NaN}function m(){this.commands=[],this.fill="black",this.stroke=null,this.strokeWidth=1}function y(t){throw new Error(t)}function v(t,e){t||y(e)}function g(t){return function(){return t}}function _(t){return t>=-128&&t<=127}function b(t,e,i){for(var r=0,n=t.length;e>8&255,h+256&255)}return o}function w(t,e,i){for(var r=this,n=0;n>4,o=15&r;if(15===n)break;if(e+=i[n],15===o)break;e+=i[o]}return parseFloat(e)}(t);if(e>=32&&e<=246)return e-139;if(e>=247&&e<=250)return i=t.parseByte(),256*(e-247)+i+108;if(e>=251&&e<=254)return i=t.parseByte(),256*-(e-251)-i-108;throw new Error("Invalid b0 "+e)}function Y(t,e,i){e=void 0!==e?e:0;var r=new Ye.Parser(t,e),n=[],o=[];for(i=void 0!==i?i:t.length;r.relativeOffset>1,f.length=0,v=!0}var o,s,a,h,l,u,c,p,d=new m,f=[],y=0,v=!1,g=!1,_=0,b=0;if(t.isCIDFont){var S=t.tables.cff.topDict._fdSelect[e.index],x=t.tables.cff.topDict._fdArray[S];l=x._subrs,u=x._subrsBias,c=x._defaultWidthX,p=x._nominalWidthX}else l=t.tables.cff.topDict._subrs,u=t.tables.cff.topDict._subrsBias,c=t.tables.cff.topDict._defaultWidthX,p=t.tables.cff.topDict._nominalWidthX;var w=c;return function i(c){for(var m,S,x,T,M,P,A,E,k,C,R,O,L=0;L1&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_,b);break;case 5:for(;f.length>0;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 6:for(;f.length>0&&(_+=f.shift(),d.lineTo(_,b),0!==f.length);)b+=f.shift(),d.lineTo(_,b);break;case 7:for(;f.length>0&&(b+=f.shift(),d.lineTo(_,b),0!==f.length);)_+=f.shift(),d.lineTo(_,b);break;case 8:for(;f.length>0;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 10:M=f.pop()+u,(P=l[M])&&i(P);break;case 11:return;case 12:switch(F=c[L],L+=1,F){case 35:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),A=a+f.shift(),E=h+f.shift(),k=A+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),b=O+f.shift(),f.shift(),d.curveTo(o,s,a,h,A,E),d.curveTo(k,C,R,O,_,b);break;case 34:o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),A=a+f.shift(),E=h,k=A+f.shift(),C=h,R=k+f.shift(),O=b,_=R+f.shift(),d.curveTo(o,s,a,h,A,E),d.curveTo(k,C,R,O,_,b);break;case 36:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),A=a+f.shift(),E=h,k=A+f.shift(),C=h,R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),d.curveTo(o,s,a,h,A,E),d.curveTo(k,C,R,O,_,b);break;case 37:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),A=a+f.shift(),E=h+f.shift(),k=A+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),Math.abs(R-_)>Math.abs(O-b)?_=R+f.shift():b=O+f.shift(),d.curveTo(o,s,a,h,A,E),d.curveTo(k,C,R,O,_,b);break;default:console.log("Glyph "+e.index+": unknown operator 1200"+F),f.length=0}break;case 14:f.length>0&&!v&&(w=f.shift()+p,v=!0),g&&(d.closePath(),g=!1);break;case 18:n();break;case 19:case 20:n(),L+=y+7>>3;break;case 21:f.length>2&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_+=f.pop(),b);break;case 22:f.length>1&&!v&&(w=f.shift()+p,v=!0),r(_+=f.pop(),b);break;case 23:n();break;case 24:for(;f.length>2;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 25:for(;f.length>6;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 26:for(f.length%2&&(_+=f.shift());f.length>0;)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a,b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 27:for(f.length%2&&(b+=f.shift());f.length>0;)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h,d.curveTo(o,s,a,h,_,b);break;case 28:m=c[L],S=c[L+1],f.push((m<<24|S<<16)>>16),L+=2;break;case 29:M=f.pop()+t.gsubrsBias,(P=t.gsubrs[M])&&i(P);break;case 30:for(;f.length>0&&(o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;case 31:for(;f.length>0&&(o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;default:F<32?console.log("Glyph "+e.index+": unknown operator "+F):F<247?f.push(F-139):F<251?(m=c[L],L+=1,f.push(256*(F-247)+m+108)):F<255?(m=c[L],L+=1,f.push(256*-(F-251)-m-108)):(m=c[L],S=c[L+1],x=c[L+2],T=c[L+3],L+=4,f.push((m<<24|S<<16|x<<8|T)/65536))}}}(i),e.advanceWidth=w,d}function et(t,e){var i,r=Ze.indexOf(t);return r>=0&&(i=r),(r=e.indexOf(t))>=0?i=r+Ze.length:(i=Ze.length+e.length,e.push(t)),i}function it(t,e,i){for(var r={},n=0;ne.value.tag?1:-1}),e.fields=e.fields.concat(r),e.fields=e.fields.concat(n),e}function mt(t,e,i){for(var r=0;r0)return t.glyphs.get(n).getMetrics()}return i}function yt(t,e){for(var i=0,r=t.length-1;i<=r;){var n=i+r>>>1,o=t[n].tag;if(o===e)return n;o>>1,o=t[n];if(o===e)return n;o>>1,s=(i=t[o]).start;if(s===e)return i;s0)return i=t[r-1],e>i.end?0:i}function _t(t,e){this.font=t,this.tableName=e}function bt(t){_t.call(this,t,"gpos")}function St(t){_t.call(this,t,"gsub")}function xt(t,e){var i=t.length;if(i!==e.length)return!1;for(var r=0;r0?(o=t.parseByte(),0==(e&n)&&(o=-o),o=i+o):o=(e&n)>0?i:i+t.parseShort(),o}function Et(t,e,i){var r,n,o=new Ye.Parser(e,i);if(t.numberOfContours=o.parseShort(),t._xMin=o.parseShort(),t._yMin=o.parseShort(),t._xMax=o.parseShort(),t._yMax=o.parseShort(),t.numberOfContours>0){for(var s=t.endPointIndices=[],a=0;a0)for(var c=o.parseByte(),p=0;p0){var d,f=[];if(l>0){for(var m=0;m=0,f.push(d);for(var y=0,v=0;v0?(2&r)>0?(S.dx=o.parseShort(),S.dy=o.parseShort()):S.matchedPoints=[o.parseUShort(),o.parseUShort()]:(2&r)>0?(S.dx=o.parseChar(),S.dy=o.parseChar()):S.matchedPoints=[o.parseByte(),o.parseByte()],(8&r)>0?S.xScale=S.yScale=o.parseF2Dot14():(64&r)>0?(S.xScale=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()):(128&r)>0&&(S.xScale=o.parseF2Dot14(),S.scale01=o.parseF2Dot14(),S.scale10=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()),t.components.push(S),b=!!(32&r)}if(256&r){t.instructionLength=o.parseUShort(),t.instructions=[];for(var x=0;xe.points.length-1||r.matchedPoints[1]>n.points.length-1)throw Error("Matched points out of range in "+e.name);var s=e.points[r.matchedPoints[0]],a=n.points[r.matchedPoints[1]],h={xScale:r.xScale,scale01:r.scale01,scale10:r.scale10,yScale:r.yScale,dx:0,dy:0};a=kt([a],h)[0],h.dx=s.x-a.x,h.dy=s.y-a.y,o=kt(n.points,h)}e.points=e.points.concat(o)}}return Ct(e.points)}function Ot(t){this.font=t,this.getCommands=function(t){return Ri.getPath(t).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function Lt(t){return t}function Ft(t){return Math.sign(t)*Math.round(Math.abs(t))}function It(t){return Math.sign(t)*Math.round(Math.abs(2*t))/2}function Dt(t){return Math.sign(t)*(Math.round(Math.abs(t)+.5)-.5)}function Ut(t){return Math.sign(t)*Math.ceil(Math.abs(t))}function Bt(t){return Math.sign(t)*Math.floor(Math.abs(t))}function Nt(t,e){this.x=t,this.y=e,this.axis=void 0,this.slope=e/t,this.normalSlope=-t/e,Object.freeze(this)}function Gt(t,e){var i=Math.sqrt(t*t+e*e);return e/=i,1==(t/=i)&&0===e?Li:0===t&&1===e?Fi:new Nt(t,e)}function qt(t,e,i,r){this.x=this.xo=Math.round(64*t)/64,this.y=this.yo=Math.round(64*e)/64,this.lastPointOfContour=i,this.onCurve=r,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}function Vt(t,e){switch(this.env=t,this.stack=[],this.prog=e,t){case"glyf":this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=Li,this.round=Ft}}function jt(t){for(var e=t.tZone=new Array(t.gZone.length),i=0;i=176&&i<=183)n+=i-176+1;else if(i>=184&&i<=191)n+=2*(i-184+1);else if(e&&1===o&&27===i)break}while(o>0);t.ip=n}function Wt(t,i){e.DEBUG&&console.log(i.step,"SVTCA["+t.axis+"]"),i.fv=i.pv=i.dpv=t}function Ht(t,i){e.DEBUG&&console.log(i.step,"SPVTCA["+t.axis+"]"),i.pv=i.dpv=t}function Xt(t,i){e.DEBUG&&console.log(i.step,"SFVTCA["+t.axis+"]"),i.fv=t}function Yt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.pv=i.dpv=Gt(r,n)}function Qt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SFVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.fv=Gt(r,n)}function Zt(t){e.DEBUG&&console.log(t.step,"POP[]"),t.stack.pop()}function Jt(t,i){var r=i.stack.pop(),n=i.z0[r],o=i.fv,s=i.pv;e.DEBUG&&console.log(i.step,"MDAP["+t+"]",r);var a=s.distance(n,Ii);t&&(a=i.round(a)),o.setRelative(n,Ii,a,s),o.touch(n),i.rp0=i.rp1=r}function Kt(t,i){var r,n,o,s=i.z2,a=s.length-2;e.DEBUG&&console.log(i.step,"IUP["+t.axis+"]");for(var h=0;h1?"loop "+(i.loop-h)+": ":"")+"SHP["+(t?"rp1":"rp2")+"]",u)}i.loop=1}function te(t,i){var r=i.stack,n=t?i.rp1:i.rp2,o=(t?i.z0:i.z1)[n],s=i.fv,a=i.pv,h=r.pop(),l=i.z2[i.contours[h]],u=l;e.DEBUG&&console.log(i.step,"SHC["+t+"]",h);var c=a.distance(o,o,!1,!0);do{u!==o&&s.setRelative(u,u,c,a),u=u.nextPointOnContour}while(u!==l)}function ee(t,i){var r,n=i.stack,o=t?i.rp1:i.rp2,s=(t?i.z0:i.z1)[o],a=i.fv,h=i.pv,l=n.pop();switch(e.DEBUG&&console.log(i.step,"SHZ["+t+"]",l),l){case 0:r=i.tZone;break;case 1:r=i.gZone;break;default:throw new Error("Invalid zone")}for(var u,c=h.distance(s,s,!1,!0),p=r.length-2,d=0;d",h),i.stack.push(Math.round(64*h))}function se(t,i){var r=i.stack,n=r.pop(),o=i.fv,s=i.pv,a=i.ppem,h=i.deltaBase+16*(t-1),l=i.deltaShift,u=i.z0;e.DEBUG&&console.log(i.step,"DELTAP["+t+"]",n,r);for(var c=0;c>4)===a){var f=(15&d)-8;f>=0&&f++,e.DEBUG&&console.log(i.step,"DELTAPFIX",p,"by",f*l);var m=u[p];o.setRelative(m,m,f*l,s)}}}function ae(t,i){var r=i.stack,n=r.pop();e.DEBUG&&console.log(i.step,"ROUND[]"),r.push(64*i.round(n/64))}function he(t,i){var r=i.stack,n=r.pop(),o=i.ppem,s=i.deltaBase+16*(t-1),a=i.deltaShift;e.DEBUG&&console.log(i.step,"DELTAC["+t+"]",n,r);for(var h=0;h>4)===o){var c=(15&u)-8;c>=0&&c++;var p=c*a;e.DEBUG&&console.log(i.step,"DELTACFIX",l,"by",p),i.cvt[l]+=p}}}function le(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log(i.step,"SDPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.dpv=Gt(r,n)}function ue(t,i){var r=i.stack,n=i.prog,o=i.ip;e.DEBUG&&console.log(i.step,"PUSHB["+t+"]");for(var s=0;s=0?1:-1,h=Math.abs(h),t&&(u=s.cvt[p],n&&Math.abs(h-u)":"_")+(n?"R":"_")+(0===o?"Gr":1===o?"Bl":2===o?"Wh":"")+"]",t?p+"("+s.cvt[p]+","+u+")":"",d,"(d =",a,"->",l*h,")"),s.rp1=s.rp0,s.rp2=d,i&&(s.rp0=d)}function de(t){(t=t||{}).empty||(Pt(t.familyName,"When creating a new Font object, familyName is required."),Pt(t.styleName,"When creating a new Font object, styleName is required."),Pt(t.unitsPerEm,"When creating a new Font object, unitsPerEm is required."),Pt(t.ascender,"When creating a new Font object, ascender is required."),Pt(t.descender,"When creating a new Font object, descender is required."),Pt(t.descender<0,"Descender should be negative (e.g. -512)."),this.names={fontFamily:{en:t.familyName||" "},fontSubfamily:{en:t.styleName||" "},fullName:{en:t.fullName||t.familyName+" "+t.styleName},postScriptName:{en:t.postScriptName||(t.familyName+t.styleName).replace(/\s/g,"")},designer:{en:t.designer||" "},designerURL:{en:t.designerURL||" "},manufacturer:{en:t.manufacturer||" "},manufacturerURL:{en:t.manufacturerURL||" "},license:{en:t.license||" "},licenseURL:{en:t.licenseURL||" "},version:{en:t.version||"Version 0.1"},description:{en:t.description||" "},copyright:{en:t.copyright||" "},trademark:{en:t.trademark||" "}},this.unitsPerEm=t.unitsPerEm||1e3,this.ascender=t.ascender,this.descender=t.descender,this.createdTimestamp=t.createdTimestamp,this.tables={os2:{usWeightClass:t.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:t.widthClass||this.usWidthClasses.MEDIUM,fsSelection:t.fsSelection||this.fsSelectionValues.REGULAR}}),this.supported=!0,this.glyphs=new ei.GlyphSet(this,t.glyphs||[]),this.encoding=new U(this),this.position=new bt(this),this.substitution=new St(this),this.tables=this.tables||{},Object.defineProperty(this,"hinting",{get:function(){return this._hinting?this._hinting:"truetype"===this.outlinesFormat?this._hinting=new Ot(this):void 0}})}function fe(t,e){var i=JSON.stringify(t),r=256;for(var n in e){var o=parseInt(n);if(o&&!(o<256)){if(JSON.stringify(e[n])===i)return o;r<=o&&(r=o+1)}}return e[r]=t,r}function me(t,e,i){var r=fe(e.name,i);return[{name:"tag_"+t,type:"TAG",value:e.tag},{name:"minValue_"+t,type:"FIXED",value:e.minValue<<16},{name:"defaultValue_"+t,type:"FIXED",value:e.defaultValue<<16},{name:"maxValue_"+t,type:"FIXED",value:e.maxValue<<16},{name:"flags_"+t,type:"USHORT",value:0},{name:"nameID_"+t,type:"USHORT",value:r}]}function ye(t,e,i){var r={},n=new Ye.Parser(t,e);return r.tag=n.parseTag(),r.minValue=n.parseFixed(),r.defaultValue=n.parseFixed(),r.maxValue=n.parseFixed(),n.skip("uShort",1),r.name=i[n.parseUShort()]||{},r}function ve(t,e,i,r){for(var n=fe(e.name,r),o=[{name:"nameID_"+t,type:"USHORT",value:n},{name:"flags_"+t,type:"USHORT",value:0}],s=0;s=i)){var n,o=e.charCodeAt(r);return o>=55296&&o<=56319&&i>r+1&&(n=e.charCodeAt(r+1))>=56320&&n<=57343?1024*(o-55296)+n-56320+65536:o}};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}();var we=0,Te=-3,Me=new i,Pe=new i,Ae=new Uint8Array(30),Ee=new Uint16Array(30),ke=new Uint8Array(30),Ce=new Uint16Array(30),Re=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Oe=new i,Le=new Uint8Array(320),Fe=new Uint16Array(16);(function(t,e){var i;for(i=0;i<7;++i)t.table[i]=0;for(t.table[7]=24,t.table[8]=152,t.table[9]=112,i=0;i<24;++i)t.trans[i]=256+i;for(i=0;i<144;++i)t.trans[24+i]=i;for(i=0;i<8;++i)t.trans[168+i]=280+i;for(i=0;i<112;++i)t.trans[176+i]=144+i;for(i=0;i<5;++i)e.table[i]=0;for(e.table[5]=32,i=0;i<32;++i)e.trans[i]=i})(Me,Pe),o(Ae,Ee,4,3),o(ke,Ce,2,1),Ae[28]=0,Ee[28]=258;var Ie=function(t,e){var i,r,o=new n(t,e);do{switch(i=a(o),h(o,2,0)){case 0:r=p(o);break;case 1:r=c(o,Me,Pe);break;case 2:u(o,o.ltree,o.dtree),r=c(o,o.ltree,o.dtree);break;default:r=Te}if(r!==we)throw new Error("Data error")}while(!i);return o.destLenthis.x2&&(this.x2=t)),"number"==typeof e&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),ethis.y2&&(this.y2=e))},f.prototype.addX=function(t){this.addPoint(t,null)},f.prototype.addY=function(t){this.addPoint(null,t)},f.prototype.addBezier=function(t,e,i,r,n,o,s,a){var h=this,l=[t,e],u=[i,r],c=[n,o],p=[s,a];this.addPoint(t,e),this.addPoint(s,a);for(var f=0;f<=1;f++){var m=6*l[f]-12*u[f]+6*c[f],y=-3*l[f]+9*u[f]-9*c[f]+3*p[f],v=3*u[f]-3*l[f];if(0!==y){var g=Math.pow(m,2)-4*v*y;if(!(g<0)){var _=(-m+Math.sqrt(g))/(2*y);0<_&&_<1&&(0===f&&h.addX(d(l[f],u[f],c[f],p[f],_)),1===f&&h.addY(d(l[f],u[f],c[f],p[f],_)));var b=(-m-Math.sqrt(g))/(2*y);0=0&&r>0&&(i+=" "),i+=e(n)}return i}t=void 0!==t?t:2;for(var r="",n=0;n=0&&t<=255,"Byte value should be between 0 and 255."),[t]},Ge.BYTE=g(1),Ne.CHAR=function(t){return[t.charCodeAt(0)]},Ge.CHAR=g(1),Ne.CHARARRAY=function(t){for(var e=[],i=0;i>8&255,255&t]},Ge.USHORT=g(2),Ne.SHORT=function(t){return t>=32768&&(t=-(65536-t)),[t>>8&255,255&t]},Ge.SHORT=g(2),Ne.UINT24=function(t){return[t>>16&255,t>>8&255,255&t]},Ge.UINT24=g(3),Ne.ULONG=function(t){return[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.ULONG=g(4),Ne.LONG=function(t){return t>=Ue&&(t=-(2*Ue-t)),[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONG=g(4),Ne.FIXED=Ne.ULONG,Ge.FIXED=Ge.ULONG,Ne.FWORD=Ne.SHORT,Ge.FWORD=Ge.SHORT,Ne.UFWORD=Ne.USHORT,Ge.UFWORD=Ge.USHORT,Ne.LONGDATETIME=function(t){return[0,0,0,0,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONGDATETIME=g(8),Ne.TAG=function(t){return De.argument(4===t.length,"Tag should be exactly 4 ASCII characters."),[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]},Ge.TAG=g(4),Ne.Card8=Ne.BYTE,Ge.Card8=Ge.BYTE,Ne.Card16=Ne.USHORT,Ge.Card16=Ge.USHORT,Ne.OffSize=Ne.BYTE,Ge.OffSize=Ge.BYTE,Ne.SID=Ne.USHORT,Ge.SID=Ge.USHORT,Ne.NUMBER=function(t){return t>=-107&&t<=107?[t+139]:t>=108&&t<=1131?[247+((t-=108)>>8),255&t]:t>=-1131&&t<=-108?[251+((t=-t-108)>>8),255&t]:t>=-32768&&t<=32767?Ne.NUMBER16(t):Ne.NUMBER32(t)},Ge.NUMBER=function(t){return Ne.NUMBER(t).length},Ne.NUMBER16=function(t){return[28,t>>8&255,255&t]},Ge.NUMBER16=g(3),Ne.NUMBER32=function(t){return[29,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.NUMBER32=g(5),Ne.REAL=function(t){var e=t.toString(),i=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(e);if(i){var r=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));e=(Math.round(t*r)/r).toString()}for(var n="",o=0,s=e.length;o>8&255,e[e.length]=255&r}return e},Ge.UTF16=function(t){return 2*t.length};var qe={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};Be.MACSTRING=function(t,e,i,r){var n=qe[r];if(void 0!==n){for(var o="",s=0;s=128&&void 0===(o=i[o]))return;r[n]=o}return r}},Ge.MACSTRING=function(t,e){var i=Ne.MACSTRING(t,e);return void 0!==i?i.length:0},Ne.VARDELTAS=function(t){for(var e=0,i=[];e=-128&&r<=127?S(t,e,i):x(t,e,i)}return i},Ne.INDEX=function(t){for(var e=1,i=[e],r=[],n=0;n>8,e[c+1]=255&p,e=e.concat(r[u])}return e},Ge.TABLE=function(t){for(var e=0,i=t.fields.length,r=0;r0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parsePointer32=function(t){var e=this.parseOffset32();if(e>0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parseListOfLists=function(t){for(var e=this,i=this.parseOffset16List(),r=i.length,n=this.relativeOffset,o=new Array(r),s=0;s=0;n-=1){var o=Ye.getUShort(t,e+4+8*n),s=Ye.getUShort(t,e+4+8*n+2);if(3===o&&(0===s||1===s||10===s)||0===o&&(0===s||1===s||2===s||3===s||4===s)){r=Ye.getULong(t,e+4+8*n+4);break}}if(-1===r)throw new Error("No valid cmap sub-tables found.");var a=new Ye.Parser(t,e+r);if(i.format=a.parseUShort(),12===i.format)!function(t,e){var i;e.parseUShort(),t.length=e.parseULong(),t.language=e.parseULong(),t.groupCount=i=e.parseULong(),t.glyphIndexMap={};for(var r=0;r>1,e.skip("uShort",3),t.glyphIndexMap={};for(var s=new Ye.Parser(i,r+n+14),a=new Ye.Parser(i,r+n+16+2*o),h=new Ye.Parser(i,r+n+16+4*o),l=new Ye.Parser(i,r+n+16+6*o),u=r+n+16+8*o,c=0;c0;e-=1)if(t.get(e).unicode>65535){console.log("Adding CMAP format 12 (needed!)"),i=!1;break}var r=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:i?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:i?12:20}];i||(r=r.concat([{name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}])),r=r.concat([{name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);var n=new We.Table("cmap",r);for(n.segments=[],e=0;e=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");o.push(n)}else{if(3!==a)throw new Error("CFF Table CID Font FDSelect table has unsupported format "+a);var l=s.parseCard16(),u=s.parseCard16();if(0!==u)throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+u);for(var c,p=0;p=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");if(c>i)throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+c);for(;u=1&&(i.ulCodePageRange1=r.parseULong(),i.ulCodePageRange2=r.parseULong()),i.version>=2&&(i.sxHeight=r.parseShort(),i.sCapHeight=r.parseShort(),i.usDefaultChar=r.parseUShort(),i.usBreakChar=r.parseUShort(),i.usMaxContent=r.parseUShort()),i},make:function(t){return new We.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],t)},unicodeRanges:gi,getUnicodeRange:function(t){for(var e=0;e=i.begin&&t=$e.length){var s=r.parseChar();i.names.push(r.parseString(s))}break;case 2.5:i.numberOfGlyphs=r.parseUShort(),i.offset=new Array(i.numberOfGlyphs);for(var a=0;ay||void 0===e)&&y>0&&(e=y),l 123 are reserved for internal usage");d|=1<0?hi.make(O):void 0,I=bi.make(),D=ni.make(t.glyphs,{version:t.getEnglishName("version"),fullName:E,familyName:P,weightName:A,postScriptName:k,unitsPerEm:t.unitsPerEm,fontBBox:[0,_.yMin,_.ascender,_.advanceWidthMax]}),U=t.metas&&Object.keys(t.metas).length>0?Mi.make(t.metas):void 0,B=[b,S,x,w,L,M,I,D,T];F&&B.push(F),t.tables.gsub&&B.push(Ti.make(t.tables.gsub)),U&&B.push(U);for(var N=ft(B),G=pt(N.encode()),q=N.fields,V=!1,j=0;j=0)return r[n].script;if(e){var o={tag:t,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return r.splice(-1-n,0,o),o.script}}},getLangSysTable:function(t,e,i){var r=this.getScriptTable(t,i);if(r){if(!e||"dflt"===e||"DFLT"===e)return r.defaultLangSys;var n=yt(r.langSysRecords,e);if(n>=0)return r.langSysRecords[n].langSys;if(i){var o={tag:e,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return r.langSysRecords.splice(-1-n,0,o),o.langSys}}},getFeatureTable:function(t,e,i,r){var n=this.getLangSysTable(t,e,r);if(n){for(var o,s=n.featureIndexes,a=this.font.tables[this.tableName].features,h=0;h=a[l-1].tag,"Features must be added in alphabetical order."),o={tag:i,feature:{params:0,lookupListIndexes:[]}},a.push(o),s.push(l),o.feature}}},getLookupTables:function(t,e,i,r,n){var o=this.getFeatureTable(t,e,i,n),s=[];if(o){for(var a,h=o.lookupListIndexes,l=this.font.tables[this.tableName].lookups,u=0;u=0?i:-1;case 2:var r=gt(t.ranges,e);return r?r.index+e-r.start:-1}},expandCoverage:function(t){if(1===t.format)return t.glyphs;for(var e=[],i=t.ranges,r=0;r=0){for(var u=o.ligatureSets[l],c=0;c2)){var r=this.font,n=this._prepState;if(!n||n.ppem!==i){var o=this._fpgmState;if(!o){Vt.prototype=Di,(o=this._fpgmState=new Vt("fpgm",r.tables.fpgm)).funcs=[],o.font=r,e.DEBUG&&(console.log("---EXEC FPGM---"),o.step=-1);try{Ei(o)}catch(t){return console.log("Hinting error in FPGM:"+t),void(this._errorState=3)}}Vt.prototype=o,(n=this._prepState=new Vt("prep",r.tables.prep)).ppem=i;var s=r.tables.cvt;if(s)for(var a=n.cvt=new Array(s.length),h=i/r.unitsPerEm,l=0;l1))try{return ki(t,n)}catch(t){return this._errorState<1&&(console.log("Hinting error:"+t),console.log("Note: further hinting errors are silenced")),void(this._errorState=1)}}},ki=function(t,i){var r,n,o,s=i.ppem/i.font.unitsPerEm,a=s,h=t.components;if(Vt.prototype=i,h){var l=i.font;n=[],r=[];for(var u=0;u1?"loop "+(t.loop-r)+": ":"")+"SHPIX[]",a,o),n.setRelative(h,h,o),n.touch(h)}t.loop=1},function(t){for(var i=t.stack,r=t.rp1,n=t.rp2,o=t.loop,s=t.z0[r],a=t.z1[n],h=t.fv,l=t.dpv,u=t.z2;o--;){var c=i.pop(),p=u[c];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"IP[]",c,r,"<->",n),h.interpolate(p,s,a,l),h.touch(p)}t.loop=1},ie.bind(void 0,0),ie.bind(void 0,1),function(t){for(var i=t.stack,r=t.rp0,n=t.z0[r],o=t.loop,s=t.fv,a=t.pv,h=t.z1;o--;){var l=i.pop(),u=h[l];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"ALIGNRP[]",l),s.setRelative(u,n,0,a),s.touch(u)}t.loop=1},function(t){e.DEBUG&&console.log(t.step,"RTDG[]"),t.round=It},re.bind(void 0,0),re.bind(void 0,1),function(t){var i=t.prog,r=t.ip,n=t.stack,o=i[++r];e.DEBUG&&console.log(t.step,"NPUSHB[]",o);for(var s=0;sr?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"GTEQ[]",r,n),i.push(n>=r?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"EQ[]",r,n),i.push(r===n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"NEQ[]",r,n),i.push(r!==n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ODD[]",r),i.push(Math.trunc(r)%2?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"EVEN[]",r),i.push(Math.trunc(r)%2?0:1)},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"IF[]",i),i||(zt(t,!0),e.DEBUG&&console.log(t.step,"EIF[]"))},function(t){e.DEBUG&&console.log(t.step,"EIF[]")},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"AND[]",r,n),i.push(r&&n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"OR[]",r,n),i.push(r||n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NOT[]",r),i.push(r?0:1)},se.bind(void 0,1),function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDB[]",i),t.deltaBase=i},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDS[]",i),t.deltaShift=Math.pow(.5,i)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"ADD[]",r,n),i.push(n+r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"SUB[]",r,n),i.push(n-r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"DIV[]",r,n),i.push(64*n/r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MUL[]",r,n),i.push(n*r/64)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ABS[]",r),i.push(Math.abs(r))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NEG[]",r),i.push(-r)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"FLOOR[]",r),i.push(64*Math.floor(r/64))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"CEILING[]",r),i.push(64*Math.ceil(r/64))},ae.bind(void 0,0),ae.bind(void 0,1),ae.bind(void 0,2),ae.bind(void 0,3),void 0,void 0,void 0,void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"WCVTF[]",r,n),t.cvt[n]=r*t.ppem/t.font.unitsPerEm},se.bind(void 0,2),se.bind(void 0,3),he.bind(void 0,1),he.bind(void 0,2),he.bind(void 0,3),function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"SROUND[]",r),t.round=Oi,192&r){case 0:i=.5;break;case 64:i=1;break;case 128:i=2;break;default:throw new Error("invalid SROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid SROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"S45ROUND[]",r),t.round=Oi,192&r){case 0:i=Math.sqrt(2)/2;break;case 64:i=Math.sqrt(2);break;case 128:i=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid S45ROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},void 0,void 0,function(t){e.DEBUG&&console.log(t.step,"ROFF[]"),t.round=Lt},void 0,function(t){e.DEBUG&&console.log(t.step,"RUTG[]"),t.round=Ut},function(t){e.DEBUG&&console.log(t.step,"RDTG[]"),t.round=Bt},Zt,Zt,void 0,void 0,void 0,void 0,void 0,function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANCTRL[]",i)},le.bind(void 0,0),le.bind(void 0,1),function(t){var i=t.stack,r=i.pop(),n=0;e.DEBUG&&console.log(t.step,"GETINFO[]",r),1&r&&(n=35),32&r&&(n|=4096),i.push(n)},void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop(),o=i.pop();e.DEBUG&&console.log(t.step,"ROLL[]"),i.push(n),i.push(r),i.push(o)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MAX[]",r,n),i.push(Math.max(n,r))},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MIN[]",r,n),i.push(Math.min(n,r))},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANTYPE[]",i)},function(t){var i=t.stack.pop(),r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"INSTCTRL[]",i,r),i){case 1:return void(t.inhibitGridFit=!!r);case 2:return void(t.ignoreCvt=!!r);default:throw new Error("invalid INSTCTRL[] selector")}},void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,ue.bind(void 0,1),ue.bind(void 0,2),ue.bind(void 0,3),ue.bind(void 0,4),ue.bind(void 0,5),ue.bind(void 0,6),ue.bind(void 0,7),ue.bind(void 0,8),ce.bind(void 0,1),ce.bind(void 0,2),ce.bind(void 0,3),ce.bind(void 0,4),ce.bind(void 0,5),ce.bind(void 0,6),ce.bind(void 0,7),ce.bind(void 0,8),pe.bind(void 0,0,0,0,0,0),pe.bind(void 0,0,0,0,0,1),pe.bind(void 0,0,0,0,0,2),pe.bind(void 0,0,0,0,0,3),pe.bind(void 0,0,0,0,1,0),pe.bind(void 0,0,0,0,1,1),pe.bind(void 0,0,0,0,1,2),pe.bind(void 0,0,0,0,1,3),pe.bind(void 0,0,0,1,0,0),pe.bind(void 0,0,0,1,0,1),pe.bind(void 0,0,0,1,0,2),pe.bind(void 0,0,0,1,0,3),pe.bind(void 0,0,0,1,1,0),pe.bind(void 0,0,0,1,1,1),pe.bind(void 0,0,0,1,1,2),pe.bind(void 0,0,0,1,1,3),pe.bind(void 0,0,1,0,0,0),pe.bind(void 0,0,1,0,0,1),pe.bind(void 0,0,1,0,0,2),pe.bind(void 0,0,1,0,0,3),pe.bind(void 0,0,1,0,1,0),pe.bind(void 0,0,1,0,1,1),pe.bind(void 0,0,1,0,1,2),pe.bind(void 0,0,1,0,1,3),pe.bind(void 0,0,1,1,0,0),pe.bind(void 0,0,1,1,0,1),pe.bind(void 0,0,1,1,0,2),pe.bind(void 0,0,1,1,0,3),pe.bind(void 0,0,1,1,1,0),pe.bind(void 0,0,1,1,1,1),pe.bind(void 0,0,1,1,1,2),pe.bind(void 0,0,1,1,1,3),pe.bind(void 0,1,0,0,0,0),pe.bind(void 0,1,0,0,0,1),pe.bind(void 0,1,0,0,0,2),pe.bind(void 0,1,0,0,0,3),pe.bind(void 0,1,0,0,1,0),pe.bind(void 0,1,0,0,1,1),pe.bind(void 0,1,0,0,1,2),pe.bind(void 0,1,0,0,1,3),pe.bind(void 0,1,0,1,0,0),pe.bind(void 0,1,0,1,0,1),pe.bind(void 0,1,0,1,0,2),pe.bind(void 0,1,0,1,0,3),pe.bind(void 0,1,0,1,1,0),pe.bind(void 0,1,0,1,1,1),pe.bind(void 0,1,0,1,1,2),pe.bind(void 0,1,0,1,1,3),pe.bind(void 0,1,1,0,0,0),pe.bind(void 0,1,1,0,0,1),pe.bind(void 0,1,1,0,0,2),pe.bind(void 0,1,1,0,0,3),pe.bind(void 0,1,1,0,1,0),pe.bind(void 0,1,1,0,1,1),pe.bind(void 0,1,1,0,1,2),pe.bind(void 0,1,1,0,1,3),pe.bind(void 0,1,1,1,0,0),pe.bind(void 0,1,1,1,0,1),pe.bind(void 0,1,1,1,0,2),pe.bind(void 0,1,1,1,0,3),pe.bind(void 0,1,1,1,1,0),pe.bind(void 0,1,1,1,1,1),pe.bind(void 0,1,1,1,1,2),pe.bind(void 0,1,1,1,1,3)];var Ui=Array.from||function(t){return t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]?|[^\uD800-\uDFFF]|./g)||[]};de.prototype.hasChar=function(t){return null!==this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyphIndex=function(t){return this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyph=function(t){var e=this.charToGlyphIndex(t),i=this.glyphs.get(e);return i||(i=this.glyphs.get(0)),i},de.prototype.stringToGlyphs=function(t,e){e=e||this.defaultRenderOptions;for(var i=Ui(t),r=[],n=0;n1&&console.warn("Only the first kern subtable is supported."),t.skip("uLong");var i=255&t.parseUShort();if(t.skip("uShort"),0===i){var r=t.parseUShort();t.skip("uShort",3);for(var n=0;n1)for(var i=1;i-1?e:t}(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(i)}function c(t){var e=new FormData;return t.trim().split("&").forEach(function(t){if(t){var i=t.split("="),r=i.shift().replace(/\+/g," "),n=i.join("=").replace(/\+/g," ");e.append(decodeURIComponent(r),decodeURIComponent(n))}}),e}function p(t){var e=new n;return t.split(/\r?\n/).forEach(function(t){var i=t.split(":"),r=i.shift().trim();if(r){var n=i.join(":").trim();e.append(r,n)}}),e}function d(t,e){e||(e={}),this.type="default",this.status="status"in e?e.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new n(e.headers),this.url=e.url||"",this._initBody(t)}if(!t.fetch){var f={searchParams:"URLSearchParams"in t,iterable:"Symbol"in t&&"iterator"in Symbol,blob:"FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in t,arrayBuffer:"ArrayBuffer"in t};if(f.arrayBuffer)var m=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],y=function(t){return t&&DataView.prototype.isPrototypeOf(t)},v=ArrayBuffer.isView||function(t){return t&&m.indexOf(Object.prototype.toString.call(t))>-1};n.prototype.append=function(t,r){t=e(t),r=i(r);var n=this.map[t];this.map[t]=n?n+","+r:r},n.prototype.delete=function(t){delete this.map[e(t)]},n.prototype.get=function(t){return t=e(t),this.has(t)?this.map[t]:null},n.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},n.prototype.set=function(t,r){this.map[e(t)]=i(r)},n.prototype.forEach=function(t,e){for(var i in this.map)this.map.hasOwnProperty(i)&&t.call(e,this.map[i],i,this)},n.prototype.keys=function(){var t=[];return this.forEach(function(e,i){t.push(i)}),r(t)},n.prototype.values=function(){var t=[];return this.forEach(function(e){t.push(e)}),r(t)},n.prototype.entries=function(){var t=[];return this.forEach(function(e,i){t.push([i,e])}),r(t)},f.iterable&&(n.prototype[Symbol.iterator]=n.prototype.entries);var g=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];u.prototype.clone=function(){return new u(this,{body:this._bodyInit})},l.call(u.prototype),l.call(d.prototype),d.prototype.clone=function(){return new d(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new n(this.headers),url:this.url})},d.error=function(){var t=new d(null,{status:0,statusText:""});return t.type="error",t};var _=[301,302,303,307,308];d.redirect=function(t,e){if(-1===_.indexOf(e))throw new RangeError("Invalid status code");return new d(null,{status:e,headers:{location:t}})},t.Headers=n,t.Request=u,t.Response=d,t.fetch=function(t,e){return new Promise(function(i,r){var n=new u(t,e),o=new XMLHttpRequest;o.onload=function(){var t={status:o.status,statusText:o.statusText,headers:p(o.getAllResponseHeaders()||"")};t.url="responseURL"in o?o.responseURL:t.headers.get("X-Request-URL");var e="response"in o?o.response:o.responseText;i(new d(e,t))},o.onerror=function(){r(new TypeError("Network request failed"))},o.ontimeout=function(){r(new TypeError("Network request failed"))},o.open(n.method,n.url,!0),"include"===n.credentials&&(o.withCredentials=!0),"responseType"in o&&f.blob&&(o.responseType="blob"),n.headers.forEach(function(t,e){o.setRequestHeader(e,t)}),o.send(void 0===n._bodyInit?null:n._bodyInit)})},t.fetch.polyfill=!0}}("undefined"!=typeof self?self:this)},{}],13:[function(t,e,i){"use strict";var r=t("./core/main");t("./core/constants"),t("./core/environment"),t("./core/error_helpers"),t("./core/helpers"),t("./core/legacy"),t("./core/p5.Element"),t("./core/p5.Graphics"),t("./core/p5.Renderer"),t("./core/p5.Renderer2D"),t("./core/rendering"),t("./core/shim"),t("./core/structure"),t("./core/transform"),t("./core/shape/2d_primitives"),t("./core/shape/attributes"),t("./core/shape/curves"),t("./core/shape/vertex"),t("./color/color_conversion"),t("./color/creating_reading"),t("./color/p5.Color"),t("./color/setting"),t("./data/p5.TypedDict"),t("./events/acceleration"),t("./events/keyboard"),t("./events/mouse"),t("./events/touch"),t("./image/filters"),t("./image/image"),t("./image/loading_displaying"),t("./image/p5.Image"),t("./image/pixels"),t("./io/files"),t("./io/p5.Table"),t("./io/p5.TableRow"),t("./io/p5.XML"),t("./math/calculation"),t("./math/math"),t("./math/noise"),t("./math/p5.Vector"),t("./math/random"),t("./math/trigonometry"),t("./typography/attributes"),t("./typography/loading_displaying"),t("./typography/p5.Font"),t("./utilities/array_functions"),t("./utilities/conversion"),t("./utilities/string_functions"),t("./utilities/time_date"),t("./webgl/3d_primitives"),t("./webgl/interaction"),t("./webgl/light"),t("./webgl/loading"),t("./webgl/material"),t("./webgl/p5.Camera"),t("./webgl/p5.Geometry"),t("./webgl/p5.Matrix"),t("./webgl/p5.RendererGL.Immediate"),t("./webgl/p5.RendererGL"),t("./webgl/p5.RendererGL.Retained"),t("./webgl/p5.Shader"),t("./webgl/p5.Texture"),t("./webgl/text"),t("./core/init"),e.exports=r},{"./color/color_conversion":14,"./color/creating_reading":15,"./color/p5.Color":16,"./color/setting":17,"./core/constants":18,"./core/environment":19,"./core/error_helpers":20,"./core/helpers":21,"./core/init":22,"./core/legacy":23,"./core/main":24,"./core/p5.Element":25,"./core/p5.Graphics":26,"./core/p5.Renderer":27,"./core/p5.Renderer2D":28,"./core/rendering":29,"./core/shape/2d_primitives":30,"./core/shape/attributes":31,"./core/shape/curves":32,"./core/shape/vertex":33,"./core/shim":34,"./core/structure":35,"./core/transform":36,"./data/p5.TypedDict":37,"./events/acceleration":38,"./events/keyboard":39,"./events/mouse":40,"./events/touch":41,"./image/filters":42,"./image/image":43,"./image/loading_displaying":44,"./image/p5.Image":45,"./image/pixels":46,"./io/files":47,"./io/p5.Table":48,"./io/p5.TableRow":49,"./io/p5.XML":50,"./math/calculation":51,"./math/math":52,"./math/noise":53,"./math/p5.Vector":54,"./math/random":55,"./math/trigonometry":56,"./typography/attributes":57,"./typography/loading_displaying":58,"./typography/p5.Font":59,"./utilities/array_functions":60,"./utilities/conversion":61,"./utilities/string_functions":62,"./utilities/time_date":63,"./webgl/3d_primitives":64,"./webgl/interaction":65,"./webgl/light":66,"./webgl/loading":67,"./webgl/material":68,"./webgl/p5.Camera":69,"./webgl/p5.Geometry":70,"./webgl/p5.Matrix":71,"./webgl/p5.RendererGL":74,"./webgl/p5.RendererGL.Immediate":72,"./webgl/p5.RendererGL.Retained":73,"./webgl/p5.Shader":75,"./webgl/p5.Texture":76,"./webgl/text":77}],14:[function(t,e,i){"use strict";var r=t("../core/main");r.ColorConversion={},r.ColorConversion._hsbaToHSLA=function(t){var e=t[0],i=t[1],r=t[2],n=(2-i)*r/2;return 0!==n&&(1===n?i=0:n<.5?i/=2-i:i=i*r/(2-2*n)),[e,i,n,t[3]]},r.ColorConversion._hsbaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s,a,h=Math.floor(e),l=r*(1-i),u=r*(1-i*(e-h)),c=r*(1-i*(1+h-e));1===h?(o=u,s=r,a=l):2===h?(o=l,s=r,a=c):3===h?(o=l,s=u,a=r):4===h?(o=c,s=l,a=r):5===h?(o=r,s=l,a=u):(o=r,s=c,a=l),n=[o,s,a,t[3]]}return n},r.ColorConversion._hslaToHSBA=function(t){var e,i=t[0],r=t[1],n=t[2];return[i,r=2*((e=n<.5?(1+r)*n:n+r-n*r)-n)/e,e,t[3]]},r.ColorConversion._hslaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s=2*r-(o=r<.5?(1+i)*r:r+i-r*i),a=function(t,e,i){return t<0?t+=6:t>=6&&(t-=6),t<1?e+(i-e)*t:t<3?i:t<4?e+(i-e)*(4-t):e};n=[a(e+2,s,o),a(e,s,o),a(e-2,s,o),t[3]]}return n},r.ColorConversion._rgbaToHSBA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=s-Math.min(r,n,o);return 0===a?(e=0,i=0):(i=a/s,r===s?e=(n-o)/a:n===s?e=2+(o-r)/a:o===s&&(e=4+(r-n)/a),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,s,t[3]]},r.ColorConversion._rgbaToHSLA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=Math.min(r,n,o),h=s+a,l=s-a;return 0===l?(e=0,i=0):(i=h<1?l/h:l/(2-h),r===s?e=(n-o)/l:n===s?e=2+(o-r)/l:o===s&&(e=4+(r-n)/l),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,h/2,t[3]]},e.exports=r.ColorConversion},{"../core/main":24}],15:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),t("../core/error_helpers"),r.prototype.alpha=function(t){return r._validateParameters("alpha",arguments),this.color(t)._getAlpha()},r.prototype.blue=function(t){return r._validateParameters("blue",arguments),this.color(t)._getBlue()},r.prototype.brightness=function(t){return r._validateParameters("brightness",arguments),this.color(t)._getBrightness()},r.prototype.color=function(){if(r._validateParameters("color",arguments),arguments[0]instanceof r.Color)return arguments[0];var t=arguments[0]instanceof Array?arguments[0]:arguments;return new r.Color(this,t)},r.prototype.green=function(t){return r._validateParameters("green",arguments),this.color(t)._getGreen()},r.prototype.hue=function(t){return r._validateParameters("hue",arguments),this.color(t)._getHue()},r.prototype.lerpColor=function(t,e,i){r._validateParameters("lerpColor",arguments);var o,s,a,h,l,u,c=this._colorMode,p=this._colorMaxes;if(c===n.RGB)l=t.levels.map(function(t){return t/255}),u=e.levels.map(function(t){return t/255});else if(c===n.HSB)t._getBrightness(),e._getBrightness(),l=t.hsba,u=e.hsba;else{if(c!==n.HSL)throw new Error(c+"cannot be used for interpolation.");t._getLightness(),e._getLightness(),l=t.hsla,u=e.hsla}return i=Math.max(Math.min(i,1),0),void 0===this.lerp&&(this.lerp=function(t,e,i){return i*(e-t)+t}),o=this.lerp(l[0],u[0],i),s=this.lerp(l[1],u[1],i),a=this.lerp(l[2],u[2],i),h=this.lerp(l[3],u[3],i),o*=p[c][0],s*=p[c][1],a*=p[c][2],h*=p[c][3],this.color(o,s,a,h)},r.prototype.lightness=function(t){return r._validateParameters("lightness",arguments),this.color(t)._getLightness()},r.prototype.red=function(t){return r._validateParameters("red",arguments),this.color(t)._getRed()},r.prototype.saturation=function(t){return r._validateParameters("saturation",arguments),this.color(t)._getSaturation()},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"./p5.Color":16}],16:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("./color_conversion");r.Color=function(t,e){if(this._storeModeAndMaxes(t._colorMode,t._colorMaxes),this.mode!==n.RGB&&this.mode!==n.HSL&&this.mode!==n.HSB)throw new Error(this.mode+" is an invalid colorMode.");return this._array=r.Color._parseInputs.apply(this,e),this._calculateLevels(),this},r.Color.prototype.toString=function(t){this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsla||(this.hsla=o._rgbaToHSLA(this._array));var e=this.levels,i=this._array,r=i[3];switch(t){case"#rrggbb":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16));case"#rrggbbaa":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16),e[3]<16?"0".concat(e[2].toString(16)):e[3].toString(16));case"#rgb":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16));case"#rgba":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16),Math.round(15*i[3]).toString(16));case"rgb":return"rgb(".concat(e[0],", ",e[1],", ",e[2],")");case"rgb%":return"rgb(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%)");case"rgba%":return"rgba(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%, ",(100*i[3]).toPrecision(3),"%)");case"hsb":case"hsv":return"hsb(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],")");case"hsb%":case"hsv%":return"hsb(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%)");case"hsba":case"hsva":return"hsba(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],", ",r,")");case"hsba%":case"hsva%":return"hsba(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"hsl":return"hsl(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],")");case"hsl%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%)");case"hsla":return"hsla(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],", ",r,")");case"hsla%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"rgba":default:return"rgba("+e[0]+","+e[1]+","+e[2]+","+r+")"}},r.Color.prototype.setRed=function(t){this._array[0]=t/this.maxes[n.RGB][0],this._calculateLevels()},r.Color.prototype.setGreen=function(t){this._array[1]=t/this.maxes[n.RGB][1],this._calculateLevels()},r.Color.prototype.setBlue=function(t){this._array[2]=t/this.maxes[n.RGB][2],this._calculateLevels()},r.Color.prototype.setAlpha=function(t){this._array[3]=t/this.maxes[this.mode][3],this._calculateLevels()},r.Color.prototype._calculateLevels=function(){for(var t=this._array,e=this.levels=new Array(t.length),i=t.length-1;i>=0;--i)e[i]=Math.round(255*t[i])},r.Color.prototype._getAlpha=function(){return this._array[3]*this.maxes[this.mode][3]},r.Color.prototype._storeModeAndMaxes=function(t,e){this.mode=t,this.maxes=e},r.Color.prototype._getMode=function(){return this.mode},r.Color.prototype._getMaxes=function(){return this.maxes},r.Color.prototype._getBlue=function(){return this._array[2]*this.maxes[n.RGB][2]},r.Color.prototype._getBrightness=function(){return this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[2]*this.maxes[n.HSB][2]},r.Color.prototype._getGreen=function(){return this._array[1]*this.maxes[n.RGB][1]},r.Color.prototype._getHue=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[0]*this.maxes[n.HSB][0]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[0]*this.maxes[n.HSL][0])},r.Color.prototype._getLightness=function(){return this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[2]*this.maxes[n.HSL][2]},r.Color.prototype._getRed=function(){return this._array[0]*this.maxes[n.RGB][0]},r.Color.prototype._getSaturation=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[1]*this.maxes[n.HSB][1]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[1]*this.maxes[n.HSL][1])};var s={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},a=/\s*/,h=/(\d{1,3})/,l=/((?:\d+(?:\.\d+)?)|(?:\.\d+))/,u=new RegExp(l.source+"%"),c={HEX3:/^#([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX4:/^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX6:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,HEX8:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,RGB:new RegExp(["^rgb\\(",h.source,",",h.source,",",h.source,"\\)$"].join(a.source),"i"),RGB_PERCENT:new RegExp(["^rgb\\(",u.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),RGBA:new RegExp(["^rgba\\(",h.source,",",h.source,",",h.source,",",l.source,"\\)$"].join(a.source),"i"),RGBA_PERCENT:new RegExp(["^rgba\\(",u.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSL:new RegExp(["^hsl\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSLA:new RegExp(["^hsla\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSB:new RegExp(["^hsb\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSBA:new RegExp(["^hsba\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i")};r.Color._parseInputs=function(t,e,i,a){var h,l=arguments.length,u=this.mode,p=this.maxes[u],d=[];if(l>=3){for(d[0]=t/p[0],d[1]=e/p[1],d[2]=i/p[2],d[3]="number"==typeof a?a/p[3]:1,h=d.length-1;h>=0;--h){var f=d[h];f<0?d[h]=0:f>1&&(d[h]=1)}return u===n.HSL?o._hslaToRGBA(d):u===n.HSB?o._hsbaToRGBA(d):d}if(1===l&&"string"==typeof t){var m=t.trim().toLowerCase();if(s[m])return r.Color._parseInputs.call(this,s[m]);if(c.HEX3.test(m))return(d=c.HEX3.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255}))[3]=1,d;if(c.HEX6.test(m))return(d=c.HEX6.exec(m).slice(1).map(function(t){return parseInt(t,16)/255}))[3]=1,d;if(c.HEX4.test(m))return d=c.HEX4.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255});if(c.HEX8.test(m))return d=c.HEX8.exec(m).slice(1).map(function(t){return parseInt(t,16)/255});if(c.RGB.test(m))return(d=c.RGB.exec(m).slice(1).map(function(t){return t/255}))[3]=1,d;if(c.RGB_PERCENT.test(m))return(d=c.RGB_PERCENT.exec(m).slice(1).map(function(t){return parseFloat(t)/100}))[3]=1,d;if(c.RGBA.test(m))return d=c.RGBA.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):t/255});if(c.RGBA_PERCENT.test(m))return d=c.RGBA_PERCENT.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):parseFloat(t)/100});if(c.HSL.test(m)?(d=c.HSL.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSLA.test(m)&&(d=c.HSLA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),(d=d.map(function(t){return Math.max(Math.min(t,1),0)})).length)return o._hslaToRGBA(d);if(c.HSB.test(m)?(d=c.HSB.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSBA.test(m)&&(d=c.HSBA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),d.length){for(h=d.length-1;h>=0;--h)d[h]=Math.max(Math.min(d[h],1),0);return o._hsbaToRGBA(d)}d=[1,1,1,1]}else{if(1!==l&&2!==l||"number"!=typeof t)throw new Error(arguments+"is not a valid color representation.");d[0]=t/p[2],d[1]=t/p[2],d[2]=t/p[2],d[3]="number"==typeof e?e/p[3]:1,d=d.map(function(t){return Math.max(Math.min(t,1),0)})}return d},e.exports=r.Color},{"../core/constants":18,"../core/main":24,"./color_conversion":14}],17:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),r.prototype.background=function(){return arguments[0]instanceof r.Image?this.image(arguments[0],0,0,this.width,this.height):this._renderer.background.apply(this._renderer,arguments),this},r.prototype.clear=function(){return this._renderer.clear(),this},r.prototype.colorMode=function(t,e,i,o,s){if(r._validateParameters("colorMode",arguments),t===n.RGB||t===n.HSB||t===n.HSL){this._colorMode=t;var a=this._colorMaxes[t];2===arguments.length?(a[0]=e,a[1]=e,a[2]=e,a[3]=e):4===arguments.length?(a[0]=e,a[1]=i,a[2]=o):5===arguments.length&&(a[0]=e,a[1]=i,a[2]=o,a[3]=s)}return this},r.prototype.fill=function(){return this._renderer._setProperty("_fillSet",!0),this._renderer._setProperty("_doFill",!0),this._renderer.fill.apply(this._renderer,arguments),this},r.prototype.noFill=function(){return this._renderer._setProperty("_doFill",!1),this},r.prototype.noStroke=function(){return this._renderer._setProperty("_doStroke",!1),this},r.prototype.stroke=function(){return this._renderer._setProperty("_strokeSet",!0),this._renderer._setProperty("_doStroke",!0),this._renderer.stroke.apply(this._renderer,arguments),this},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Color":16}],18:[function(t,e,i){"use strict";var r=Math.PI;e.exports={P2D:"p2d",WEBGL:"webgl",ARROW:"default",CROSS:"crosshair",HAND:"pointer",MOVE:"move",TEXT:"text",WAIT:"wait",HALF_PI:r/2,PI:r,QUARTER_PI:r/4,TAU:2*r,TWO_PI:2*r,DEGREES:"degrees",RADIANS:"radians",DEG_TO_RAD:r/180,RAD_TO_DEG:180/r,CORNER:"corner",CORNERS:"corners",RADIUS:"radius",RIGHT:"right",LEFT:"left",CENTER:"center",TOP:"top",BOTTOM:"bottom",BASELINE:"alphabetic",POINTS:0,LINES:1,LINE_STRIP:3,LINE_LOOP:2,TRIANGLES:4,TRIANGLE_FAN:6,TRIANGLE_STRIP:5,QUADS:"quads",QUAD_STRIP:"quad_strip",CLOSE:"close",OPEN:"open",CHORD:"chord",PIE:"pie",PROJECT:"square",SQUARE:"butt",ROUND:"round",BEVEL:"bevel",MITER:"miter",RGB:"rgb",HSB:"hsb",HSL:"hsl",AUTO:"auto",ALT:18,BACKSPACE:8,CONTROL:17,DELETE:46,DOWN_ARROW:40,ENTER:13,ESCAPE:27,LEFT_ARROW:37,OPTION:18,RETURN:13,RIGHT_ARROW:39,SHIFT:16,TAB:9,UP_ARROW:38,BLEND:"source-over",ADD:"lighter",DARKEST:"darken",LIGHTEST:"lighten",DIFFERENCE:"difference",EXCLUSION:"exclusion",MULTIPLY:"multiply",SCREEN:"screen",REPLACE:"copy",OVERLAY:"overlay",HARD_LIGHT:"hard-light",SOFT_LIGHT:"soft-light",DODGE:"color-dodge",BURN:"color-burn",THRESHOLD:"threshold",GRAY:"gray",OPAQUE:"opaque",INVERT:"invert",POSTERIZE:"posterize",DILATE:"dilate",ERODE:"erode",BLUR:"blur",NORMAL:"normal",ITALIC:"italic",BOLD:"bold",_DEFAULT_TEXT_FILL:"#000000",_DEFAULT_LEADMULT:1.25,_CTX_MIDDLE:"middle",LINEAR:"linear",QUADRATIC:"quadratic",BEZIER:"bezier",CURVE:"curve",STROKE:"stroke",FILL:"fill",TEXTURE:"texture",IMMEDIATE:"immediate",NEAREST:"nearest",REPEAT:"repeat",CLAMP:"clamp",MIRROR:"mirror",LANDSCAPE:"landscape",PORTRAIT:"portrait",_DEFAULT_STROKE:"#000000",_DEFAULT_FILL:"#FFFFFF",GRID:"grid",AXES:"axes"}},{}],19:[function(t,e,i){"use strict";function r(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth||0}function n(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight||0}var o=t("./main"),s=t("./constants"),a=[s.ARROW,s.CROSS,s.HAND,s.MOVE,s.TEXT,s.WAIT];o.prototype._frameRate=0,o.prototype._lastFrameTime=window.performance.now(),o.prototype._targetFrameRate=60;var h=window.print;o.prototype.print=function(){arguments.length?console.log.apply(console,arguments):h()},o.prototype.frameCount=0,o.prototype.focused=document.hasFocus(),o.prototype.cursor=function(t,e,i){var r="auto",n=this._curElement.elt;if(a.indexOf(t)>-1)r=t;else if("string"==typeof t){var o="";e&&i&&"number"==typeof e&&"number"==typeof i&&(o=e+" "+i),r="http://"===t.substring(0,7)||"https://"===t.substring(0,8)?"url("+t+") "+o+", auto":/\.(cur|jpg|jpeg|gif|png|CUR|JPG|JPEG|GIF|PNG)$/.test(t)?"url("+t+") "+o+", auto":t}n.style.cursor=r},o.prototype.frameRate=function(t){return o._validateParameters("frameRate",arguments),"number"!=typeof t||t<0?this._frameRate:(this._setProperty("_targetFrameRate",t),this._runFrames(),this)},o.prototype.getFrameRate=function(){return this.frameRate()},o.prototype.setFrameRate=function(t){return this.frameRate(t)},o.prototype.noCursor=function(){this._curElement.elt.style.cursor="none"},o.prototype.displayWidth=screen.width,o.prototype.displayHeight=screen.height,o.prototype.windowWidth=r(),o.prototype.windowHeight=n(),o.prototype._onresize=function(t){this._setProperty("windowWidth",r()),this._setProperty("windowHeight",n());var e,i=this._isGlobal?window:this;"function"==typeof i.windowResized&&(void 0===(e=i.windowResized(t))||e||t.preventDefault())},o.prototype.width=0,o.prototype.height=0,o.prototype.fullscreen=function(t){if(o._validateParameters("fullscreen",arguments),void 0===t)return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;t?function(t){if(!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled))throw new Error("Fullscreen not enabled in this browser.");t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.msRequestFullscreen&&t.msRequestFullscreen()}(document.documentElement):document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.msExitFullscreen&&document.msExitFullscreen()},o.prototype.pixelDensity=function(t){var e;return o._validateParameters("pixelDensity",arguments),"number"==typeof t?(t!==this._pixelDensity&&(this._pixelDensity=t,this._pixelsDirty=!0),e=this,this.resizeCanvas(this.width,this.height,!0)):e=this._pixelDensity,e},o.prototype.displayDensity=function(){return window.devicePixelRatio},o.prototype.getURL=function(){return location.href},o.prototype.getURLPath=function(){return location.pathname.split("/").filter(function(t){return""!==t})},o.prototype.getURLParams=function(){for(var t,e=/[?&]([^&=]+)(?:[&=])([^&=]+)/gim,i={};null!=(t=e.exec(location.search));)t.index===e.lastIndex&&e.lastIndex++,i[t[1]]=t[2];return i},e.exports=o},{"./constants":18,"./main":24}],20:[function(t,e,i){"use strict";var r=t("./main");t("./constants"),r._validateParameters=r._friendlyFileLoadError=function(){};var n=null,o=function(){var e={},i=function(t){return Object.getOwnPropertyNames(t).filter(function(t){return!("_"===t[0]||t in e||(e[t]=!0,0))}).map(function(e){var i;return i="function"==typeof t[e]?"function":e===e.toUpperCase()?"constant":"variable",{name:e,type:i}})};(n=[].concat(i(r.prototype),i(t("./constants")))).sort(function(t,e){return e.name.length-t.name.length})},s=function(t,e){e||(e=console.log.bind(console)),n||o(),n.some(function(i){if(t.message&&null!==t.message.match("\\W?"+i.name+"\\W"))return e("Did you just try to use p5.js's "+i.name+("function"===i.type?"() ":" ")+i.type+"? If so, you may want to move it into your sketch's setup() function.\n\nFor more details, see: https://github.com/processing/p5.js/wiki/p5.js-overview#why-cant-i-assign-variables-using-p5-functions-and-variables-before-setup"),!0})};r.prototype._helpForMisusedAtTopLevelCode=s,"complete"!==document.readyState&&(window.addEventListener("error",s,!1),window.addEventListener("load",function(){window.removeEventListener("error",s,!1)})),e.exports=r},{"../../docs/reference/data.json":void 0,"./constants":18,"./main":24}],21:[function(t,e,i){"use strict";var r=t("./constants");e.exports={modeAdjust:function(t,e,i,n,o){return o===r.CORNER?{x:t,y:e,w:i,h:n}:o===r.CORNERS?{x:t,y:e,w:i-t,h:n-e}:o===r.RADIUS?{x:t-i,y:e-n,w:2*i,h:2*n}:o===r.CENTER?{x:t-.5*i,y:e-.5*n,w:i,h:n}:void 0}}},{"./constants":18}],22:[function(t,e,i){"use strict";var r=t("../core/main"),n=function(){window.mocha||(window.setup&&"function"==typeof window.setup||window.draw&&"function"==typeof window.draw)&&!r.instance&&new r};"complete"===document.readyState?n():window.addEventListener("load",n,!1)},{"../core/main":24}],23:[function(t,e,i){"use strict";var r=t("./main");r.prototype.exit=function(){throw new Error("exit() not implemented, see remove()")},r.prototype.pushStyle=function(){throw new Error("pushStyle() not used, see push()")},r.prototype.popStyle=function(){throw new Error("popStyle() not used, see pop()")},r.prototype.size=function(){var t="size() is not a valid p5 function, to set the size of the ";throw new Error(t+="drawing canvas, please use createCanvas() instead")},e.exports=r},{"./main":24}],24:[function(t,e,i){"use strict";t("./shim");var r=t("./constants"),n=function(t,e,i){"boolean"==typeof e&&void 0===i&&(i=e,e=void 0),this._setupDone=!1,this._pixelDensity=Math.ceil(window.devicePixelRatio)||1,this._userNode=e,this._curElement=null,this._elements=[],this._requestAnimId=0,this._preloadCount=0,this._isGlobal=!1,this._loop=!0,this._initializeInstanceVariables(),this._defaultCanvasSize={width:100,height:100},this._events={mousemove:null,mousedown:null,mouseup:null,dragend:null,dragover:null,click:null,dblclick:null,mouseover:null,mouseout:null,keydown:null,keyup:null,keypress:null,touchstart:null,touchmove:null,touchend:null,resize:null,blur:null},this._events.wheel=null,this._loadingScreenId="p5_loading",this._registeredMethods={};for(var r=Object.getOwnPropertyNames(n.prototype._registeredMethods),o=0;o=i-5)&&(this.redraw(),this._frameRate=1e3/(t-this._lastFrameTime),this._lastFrameTime=t,void 0!==this._updateMouseCoords&&this._updateMouseCoords()),this._loop&&(this._requestAnimId=window.requestAnimationFrame(this._draw))}.bind(this),this._runFrames=function(){this._updateInterval&&clearInterval(this._updateInterval)}.bind(this),this._setProperty=function(t,e){this[t]=e,this._isGlobal&&(window[t]=e)}.bind(this),this.remove=function(){var t=document.getElementById(this._loadingScreenId);if(t&&(t.parentNode.removeChild(t),this._incrementPreload()),this._curElement){for(var e in this._loop=!1,this._requestAnimId&&window.cancelAnimationFrame(this._requestAnimId),this._events)window.removeEventListener(e,this._events[e]);for(var i=0;i-1?o.readAsText(n):o.readAsDataURL(n)}},this)):console.log("The File APIs are not fully supported in this browser."),this},s.Element.prototype._setProperty=function(t,e){this[t]=e},e.exports=s.Element},{"./main":24}],26:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");r.Graphics=function(t,e,i,o){var s=i||n.P2D;for(var a in this.canvas=document.createElement("canvas"),(o._userNode||document.body).appendChild(this.canvas),r.Element.call(this,this.canvas,o,!1),r.prototype)this[a]||("function"==typeof r.prototype[a]?this[a]=r.prototype[a].bind(this):this[a]=r.prototype[a]);return r.prototype._initializeInstanceVariables.apply(this),this.width=t,this.height=e,this._pixelDensity=o._pixelDensity,s===n.WEBGL?this._renderer=new r.RendererGL(this.canvas,this,!1):this._renderer=new r.Renderer2D(this.canvas,this,!1),o._elements.push(this),this._renderer.resize(t,e),this._renderer._applyDefaults(),this},r.Graphics.prototype=Object.create(r.Element.prototype),r.Graphics.prototype.remove=function(){this.elt.parentNode&&this.elt.parentNode.removeChild(this.elt);var t=this._pInst._elements.indexOf(this);for(var e in-1!==t&&this._pInst._elements.splice(t,1),this._events)this.elt.removeEventListener(e,this._events[e])},e.exports=r.Graphics},{"./constants":18,"./main":24}],27:[function(t,e,i){"use strict";function r(t){var e=0,i=0;if(t.offsetParent)do{e+=t.offsetLeft,i+=t.offsetTop}while(t=t.offsetParent);else e+=t.offsetLeft,i+=t.offsetTop;return[e,i]}var n=t("./main"),o=t("../core/constants");n.Renderer=function(t,e,i){n.Element.call(this,t,e),this.canvas=t,i?(this._isMainCanvas=!0,this._pInst._setProperty("_curElement",this),this._pInst._setProperty("canvas",this.canvas),this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height)):(this.canvas.style.display="none",this._styles=[]),this._textSize=12,this._textLeading=15,this._textFont="sans-serif",this._textStyle=o.NORMAL,this._textAscent=null,this._textDescent=null,this._textAlign=o.LEFT,this._textBaseline=o.BASELINE,this._rectMode=o.CORNER,this._ellipseMode=o.CENTER,this._curveTightness=0,this._imageMode=o.CORNER,this._tint=null,this._doStroke=!0,this._doFill=!0,this._strokeSet=!1,this._fillSet=!1},n.Renderer.prototype=Object.create(n.Element.prototype),n.Renderer.prototype.push=function(){return{properties:{_doStroke:this._doStroke,_strokeSet:this._strokeSet,_doFill:this._doFill,_fillSet:this._fillSet,_tint:this._tint,_imageMode:this._imageMode,_rectMode:this._rectMode,_ellipseMode:this._ellipseMode,_textFont:this._textFont,_textLeading:this._textLeading,_textSize:this._textSize,_textAlign:this._textAlign,_textBaseline:this._textBaseline,_textStyle:this._textStyle}}},n.Renderer.prototype.pop=function(t){t.properties&&Object.assign(this,t.properties)},n.Renderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.elt.width=t*this._pInst._pixelDensity,this.elt.height=e*this._pInst._pixelDensity,this.elt.style.width=t+"px",this.elt.style.height=e+"px",this._isMainCanvas&&(this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height))},n.Renderer.prototype.textLeading=function(t){return"number"==typeof t?(this._setProperty("_textLeading",t),this._pInst):this._textLeading},n.Renderer.prototype.textSize=function(t){return"number"==typeof t?(this._setProperty("_textSize",t),this._setProperty("_textLeading",t*o._DEFAULT_LEADMULT),this._applyTextProperties()):this._textSize},n.Renderer.prototype.textStyle=function(t){return t?(t!==o.NORMAL&&t!==o.ITALIC&&t!==o.BOLD||this._setProperty("_textStyle",t),this._applyTextProperties()):this._textStyle},n.Renderer.prototype.textAscent=function(){return null===this._textAscent&&this._updateTextMetrics(),this._textAscent},n.Renderer.prototype.textDescent=function(){return null===this._textDescent&&this._updateTextMetrics(),this._textDescent},n.Renderer.prototype.textAlign=function(t,e){return void 0!==t?(this._setProperty("_textAlign",t),void 0!==e&&this._setProperty("_textBaseline",e),this._applyTextProperties()):{horizontal:this._textAlign,vertical:this._textBaseline}},n.Renderer.prototype.text=function(t,e,i,r,n){var s,a,h,l,u,c,p,d,f=this._pInst,m=Number.MAX_VALUE;if((this._doFill||this._doStroke)&&void 0!==t){if("string"!=typeof t&&(t=t.toString()),t=t.replace(/(\t)/g," "),s=t.split("\n"),void 0!==r){for(d=0,h=0;hr?(u=p[a]+" ",d+=f.textLeading()):u=c;switch(this._rectMode===o.CENTER&&(e-=r/2,i-=n/2),this._textAlign){case o.CENTER:e+=r/2;break;case o.RIGHT:e+=r}var y=!1;if(void 0!==n){switch(this._textBaseline){case o.BOTTOM:i+=n-d;break;case o.CENTER:i+=(n-d)/2;break;case o.BASELINE:y=!0,this._textBaseline=o.TOP}m=i+n-f.textAscent()}for(h=0;hr&&u.length>0?(this._renderText(f,u,e,i,m),u=p[a]+" ",i+=f.textLeading()):u=c;this._renderText(f,u,e,i,m),i+=f.textLeading(),y&&(this._textBaseline=o.BASELINE)}}else{var v=0,g=f.textAlign().vertical;for(g===o.CENTER?v=(s.length-1)*f.textLeading()/2:g===o.BOTTOM&&(v=(s.length-1)*f.textLeading()),l=0;l0&&(c=u.width/t.width),this.drawingContext.drawImage(u,c*e,c*i,c*n,c*o,s,a,h,l)}catch(t){if("NS_ERROR_NOT_AVAILABLE"!==t.name)throw t}this._pInst._pixelsDirty=!0},r.Renderer2D.prototype._getTintedImageCanvas=function(t){if(!t.canvas)return t;var e=o._toPixels(t.canvas),i=document.createElement("canvas");i.width=t.canvas.width,i.height=t.canvas.height;for(var r=i.getContext("2d"),n=r.createImageData(t.canvas.width,t.canvas.height),s=n.data,a=0;a=this.width||e>=this.height)return[0,0,0,255];var o=this._pInst||this,s=o._pixelDensity;t=Math.floor(t),e=Math.floor(e),i=Math.floor(i),n=Math.floor(n);var a,h,l=t*s,u=e*s;if(1!==i||1!==n||this instanceof r.RendererGL){var c=Math.min(i,o.width),p=Math.min(n,o.height),d=c*s,f=p*s,m=new r.Image(c,p);return m.canvas.getContext("2d").drawImage(this.canvas,l,u,d,f,0,0,c,p),m}return o._pixelsDirty?(a=this.drawingContext.getImageData(l,u,1,1).data,h=0):(a=o.pixels,h=4*(l+u*this.width*s)),[a[h+0],a[h+1],a[h+2],a[h+3]]},r.Renderer2D.prototype.loadPixels=function(){var t=this._pInst||this;if(t._pixelsDirty){t._pixelsDirty=!1;var e=t._pixelDensity,i=this.width*e,r=this.height*e,n=this.drawingContext.getImageData(0,0,i,r);t._setProperty("imageData",n),t._setProperty("pixels",n.data)}},r.Renderer2D.prototype.set=function(t,e,i){t=Math.floor(t),e=Math.floor(e);var n=this._pInst||this;if(i instanceof r.Image)this.drawingContext.save(),this.drawingContext.setTransform(1,0,0,1,0,0),this.drawingContext.scale(n._pixelDensity,n._pixelDensity),this.drawingContext.drawImage(i.canvas,t,e),this.drawingContext.restore(),n._pixelsDirty=!0;else{var o=0,s=0,a=0,h=0,l=4*(e*n._pixelDensity*(this.width*n._pixelDensity)+t*n._pixelDensity);if(n.imageData&&!n._pixelsDirty||n.loadPixels.call(n),"number"==typeof i)l1e-5;)c=Math.min(s-o,n.HALF_PI),p.push(this._acuteArcToBezier(o,c)),o+=c;return this._doFill&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a!==n.PIE&&null!=a||h.lineTo(t,e),h.closePath(),h.fill()),this._doStroke&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a===n.PIE?(h.lineTo(t,e),h.closePath()):a===n.CHORD&&h.closePath(),h.stroke()),this},r.Renderer2D.prototype.ellipse=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;var l=.5522847498,u=a/2*l,c=h/2*l,p=n+a,d=o+h,f=n+a/2,m=o+h/2;e.beginPath(),e.moveTo(n,m),e.bezierCurveTo(n,m-c,f-u,o,f,o),e.bezierCurveTo(f+u,o,p,m-c,p,m),e.bezierCurveTo(p,m+c,f+u,d,f,d),e.bezierCurveTo(f-u,d,n,m+c,n,m),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.line=function(t,e,i,r){var n=this.drawingContext;return this._doStroke?this._getStroke()===s?this:(n.lineWidth%2==1&&n.translate(.5,.5),n.beginPath(),n.moveTo(t,e),n.lineTo(i,r),n.stroke(),n.lineWidth%2==1&&n.translate(-.5,-.5),this):this},r.Renderer2D.prototype.point=function(t,e){var i=this.drawingContext;if(!this._doStroke)return this;if(this._getStroke()===s)return this;var r=this._getStroke(),o=this._getFill();t=Math.round(t),e=Math.round(e),this._setFill(r),i.lineWidth>1?(i.beginPath(),i.arc(t,e,i.lineWidth/2,0,n.TWO_PI,!1),i.fill()):i.fillRect(t,e,1,1),this._setFill(o)},r.Renderer2D.prototype.quad=function(t,e,i,r,n,o,a,h){var l=this.drawingContext,u=this._doFill,c=this._doStroke;if(u&&!c){if(this._getFill()===s)return this}else if(!u&&c&&this._getStroke()===s)return this;return l.beginPath(),l.moveTo(t,e),l.lineTo(i,r),l.lineTo(n,o),l.lineTo(a,h),l.closePath(),u&&l.fill(),c&&l.stroke(),this},r.Renderer2D.prototype.rect=function(t){var e=t[0],i=t[1],r=t[2],n=t[3],o=t[4],a=t[5],h=t[6],l=t[7],u=this.drawingContext,c=this._doFill,p=this._doStroke;if(c&&!p){if(this._getFill()===s)return this}else if(!c&&p&&this._getStroke()===s)return this;if(this._doStroke&&u.lineWidth%2==1&&u.translate(.5,.5),u.beginPath(),void 0===o)u.rect(e,i,r,n);else{void 0===a&&(a=o),void 0===h&&(h=a),void 0===l&&(l=h);var d=r/2,f=n/2;r<2*o&&(o=d),n<2*o&&(o=f),r<2*a&&(a=d),n<2*a&&(a=f),r<2*h&&(h=d),n<2*h&&(h=f),r<2*l&&(l=d),n<2*l&&(l=f),u.beginPath(),u.moveTo(e+o,i),u.arcTo(e+r,i,e+r,i+n,a),u.arcTo(e+r,i+n,e,i+n,h),u.arcTo(e,i+n,e,i,l),u.arcTo(e,i,e+r,i,o),u.closePath()}return this._doFill&&u.fill(),this._doStroke&&u.stroke(),this._doStroke&&u.lineWidth%2==1&&u.translate(-.5,-.5),this},r.Renderer2D.prototype.triangle=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3],l=t[4],u=t[5];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;e.beginPath(),e.moveTo(n,o),e.lineTo(a,h),e.lineTo(l,u),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.endShape=function(t,e,i,r,o,s,a){if(0===e.length)return this;if(!this._doStroke&&!this._doFill)return this;var h,l=t===n.CLOSE;l&&!s&&e.push(e[0]);var u,c,p=e.length;if(!i||a!==n.POLYGON&&null!==a)if(!r||a!==n.POLYGON&&null!==a)if(!o||a!==n.POLYGON&&null!==a)if(a===n.POINTS)for(u=0;u2){for(this.drawingContext.beginPath(),u=2;u3)for(u=0;u+13){var d=[],f=1-this._curveTightness;for(this.drawingContext.beginPath(),this.drawingContext.moveTo(e[1][0],e[1][1]),u=1;u+2=o))return t.push(),this._isOpenType()?this._textFont._renderPath(e,i,r,{renderer:this}):(this._doStroke&&this._strokeSet&&this.drawingContext.strokeText(e,i,r),this._doFill&&(this._fillSet||this._setFill(n._DEFAULT_TEXT_FILL),this.drawingContext.fillText(e,i,r))),t.pop(),this._pInst._pixelsDirty=!0,t},r.Renderer2D.prototype.textWidth=function(t){return this._isOpenType()?this._textFont._textWidth(t,this._textSize):this.drawingContext.measureText(t).width},r.Renderer2D.prototype._applyTextProperties=function(){var t,e=this._pInst;return this._setProperty("_textAscent",null),this._setProperty("_textDescent",null),t=this._textFont,this._isOpenType()&&(t=this._textFont.font.familyName,this._setProperty("_textStyle",this._textFont.font.styleName)),this.drawingContext.font=(this._textStyle||"normal")+" "+(this._textSize||12)+"px "+(t||"sans-serif"),this.drawingContext.textAlign=this._textAlign,this._textBaseline===n.CENTER?this.drawingContext.textBaseline=n._CTX_MIDDLE:this.drawingContext.textBaseline=this._textBaseline,e},r.Renderer2D.prototype.push=function(){return this.drawingContext.save(),r.Renderer.prototype.push.apply(this)},r.Renderer2D.prototype.pop=function(t){this.drawingContext.restore(),this._cachedFillStyle=this.drawingContext.fillStyle,this._cachedStrokeStyle=this.drawingContext.strokeStyle,r.Renderer.prototype.pop.call(this,t)},e.exports=r.Renderer2D},{"../image/filters":42,"./constants":18,"./main":24,"./p5.Renderer":27}],29:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");t("./p5.Graphics"),t("./p5.Renderer2D"),t("../webgl/p5.RendererGL");var o="defaultCanvas0",s="p5Canvas";r.prototype.createCanvas=function(t,e,i){r._validateParameters("createCanvas",arguments);var a,h=i||n.P2D;if(h===n.WEBGL){if(a=document.getElementById(o)){a.parentNode.removeChild(a);var l=this._renderer;this._elements=this._elements.filter(function(t){return t!==l})}(a=document.createElement("canvas")).id=o,a.classList.add(s)}else if(this._defaultGraphicsCreated)a=this.canvas;else{a=document.createElement("canvas");for(var u=0;document.getElementById("defaultCanvas"+u);)u++;o="defaultCanvas"+u,a.id=o,a.classList.add(s)}return this._setupDone||(a.dataset.hidden=!0,a.style.visibility="hidden"),this._userNode?this._userNode.appendChild(a):document.body.appendChild(a),h===n.WEBGL?(this._setProperty("_renderer",new r.RendererGL(a,this,!0)),this._elements.push(this._renderer)):this._defaultGraphicsCreated||(this._setProperty("_renderer",new r.Renderer2D(a,this,!0)),this._defaultGraphicsCreated=!0,this._elements.push(this._renderer)),this._renderer.resize(t,e),this._renderer._applyDefaults(),this._renderer},r.prototype.resizeCanvas=function(t,e,i){if(r._validateParameters("resizeCanvas",arguments),this._renderer){var n={};for(var o in this.drawingContext){var s=this.drawingContext[o];"object"!=typeof s&&"function"!=typeof s&&(n[o]=s)}for(var a in this._renderer.resize(t,e),this.width=t,this.height=e,n)try{this.drawingContext[a]=n[a]}catch(t){}i||this.redraw()}},r.prototype.noCanvas=function(){this.canvas&&this.canvas.parentNode.removeChild(this.canvas)},r.prototype.createGraphics=function(t,e,i){return r._validateParameters("createGraphics",arguments),new r.Graphics(t,e,i,this)},r.prototype.blendMode=function(t){if(r._validateParameters("blendMode",arguments),t!==n.BLEND&&t!==n.DARKEST&&t!==n.LIGHTEST&&t!==n.DIFFERENCE&&t!==n.MULTIPLY&&t!==n.EXCLUSION&&t!==n.SCREEN&&t!==n.REPLACE&&t!==n.OVERLAY&&t!==n.HARD_LIGHT&&t!==n.SOFT_LIGHT&&t!==n.DODGE&&t!==n.BURN&&t!==n.ADD&&t!==n.NORMAL)throw new Error("Mode "+t+" not recognized.");this._renderer.blendMode(t)},e.exports=r},{"../webgl/p5.RendererGL":74,"./constants":18,"./main":24,"./p5.Graphics":26,"./p5.Renderer2D":28}],30:[function(t,e,i){"use strict";var r=t("../main"),n=t("../constants"),o=t("../helpers");t("../error_helpers"),r.prototype.arc=function(t,e,i,s,a,h,l,u){if(r._validateParameters("arc",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;for(a=this._toRadians(a),h=this._toRadians(h);a<0;)a+=n.TWO_PI;for(;h<0;)h+=n.TWO_PI;void 0!==a&&void 0!==h&&(h.toFixed(10)===a.toFixed(10)||Math.abs(h-a)===n.TWO_PI?(a%=n.TWO_PI,h%=n.TWO_PI,a+=n.TWO_PI):Math.abs(h-a)>n.TWO_PI&&(a%=n.TWO_PI,h%=n.TWO_PI,h+=n.TWO_PI)),a<=n.HALF_PI?a=Math.atan(i/s*Math.tan(a)):a>n.HALF_PI&&a<=3*n.HALF_PI&&(a=Math.atan(i/s*Math.tan(a))+n.PI),h<=n.HALF_PI?h=Math.atan(i/s*Math.tan(h)):h>n.HALF_PI&&h<=3*n.HALF_PI&&(h=Math.atan(i/s*Math.tan(h))+n.PI),a>h&&(h+=n.TWO_PI),i=Math.abs(i),s=Math.abs(s);var c=o.modeAdjust(t,e,i,s,this._renderer._ellipseMode);return this._renderer.arc(c.x,c.y,c.w,c.h,a,h,l,u),this},r.prototype.ellipse=function(t,e,i,n,s){if(r._validateParameters("ellipse",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;i<0&&(i=Math.abs(i)),void 0===n?n=i:n<0&&(n=Math.abs(n));var a=o.modeAdjust(t,e,i,n,this._renderer._ellipseMode);return this._renderer.ellipse([a.x,a.y,a.w,a.h,s]),this},r.prototype.line=function(){return r._validateParameters("line",arguments),this._renderer._doStroke&&this._renderer.line.apply(this._renderer,arguments),this},r.prototype.point=function(){return r._validateParameters("point",arguments),this._renderer._doStroke&&this._renderer.point.apply(this._renderer,arguments),this},r.prototype.quad=function(){return r._validateParameters("quad",arguments),(this._renderer._doStroke||this._renderer._doFill)&&this._renderer.quad.apply(this._renderer,arguments),this},r.prototype.rect=function(){if(r._validateParameters("rect",arguments),this._renderer._doStroke||this._renderer._doFill){for(var t=o.modeAdjust(arguments[0],arguments[1],arguments[2],arguments[3],this._renderer._rectMode),e=[t.x,t.y,t.w,t.h],i=4;i0))throw new Error("vertex() must be used once before calling quadraticVertex()");u=!0;for(var e=[],i=0;id||Math.abs(this.accelerationY-this.pAccelerationY)>d||Math.abs(this.accelerationZ-this.pAccelerationZ)>d)&&t();var e=this.deviceTurned||window.deviceTurned;if("function"==typeof e){var i=this.rotationX+180,r=this.pRotationX+180,m=a+180;i-r>0&&i-r<270||i-r<-270?u="clockwise":(i-r<0||i-r>270)&&(u="counter-clockwise"),u!==n&&(m=i),Math.abs(i-m)>90&&Math.abs(i-m)<270&&(m=i,this._setProperty("turnAxis","X"),e()),n=u,a=m-180;var y=this.rotationY+180,v=this.pRotationY+180,g=h+180;y-v>0&&y-v<270||y-v<-270?c="clockwise":(y-v<0||y-this.pRotationY>270)&&(c="counter-clockwise"),c!==o&&(g=y),Math.abs(y-g)>90&&Math.abs(y-g)<270&&(g=y,this._setProperty("turnAxis","Y"),e()),o=c,h=g-180,this.rotationZ-this.pRotationZ>0&&this.rotationZ-this.pRotationZ<270||this.rotationZ-this.pRotationZ<-270?p="clockwise":(this.rotationZ-this.pRotationZ<0||this.rotationZ-this.pRotationZ>270)&&(p="counter-clockwise"),p!==s&&(l=this.rotationZ),Math.abs(this.rotationZ-l)>90&&Math.abs(this.rotationZ-l)<270&&(l=this.rotationZ,this._setProperty("turnAxis","Z"),e()),s=p,this._setProperty("turnAxis",void 0)}var _,b,S=this.deviceShaken||window.deviceShaken;"function"==typeof S&&(null!==this.pAccelerationX&&(_=Math.abs(this.accelerationX-this.pAccelerationX),b=Math.abs(this.accelerationY-this.pAccelerationY)),_+b>f&&S())},e.exports=r},{"../core/main":24}],39:[function(t,e,i){"use strict";var r=t("../core/main"),n={};r.prototype.isKeyPressed=!1,r.prototype.keyIsPressed=!1,r.prototype.key="",r.prototype.keyCode=0,r.prototype._onkeydown=function(t){if(!n[t.which]){this._setProperty("isKeyPressed",!0),this._setProperty("keyIsPressed",!0),this._setProperty("keyCode",t.which),n[t.which]=!0,this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which);var e=this.keyPressed||window.keyPressed;"function"!=typeof e||t.charCode||!1===e(t)&&t.preventDefault()}},r.prototype._onkeyup=function(t){var e=this.keyReleased||window.keyReleased;n[t.which]=!1,function(){for(var t in n)if(n.hasOwnProperty(t)&&!0===n[t])return!0;return!1}()||(this._setProperty("isKeyPressed",!1),this._setProperty("keyIsPressed",!1)),this._setProperty("_lastKeyCodeTyped",null),this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which),this._setProperty("keyCode",t.which),"function"==typeof e&&!1===e(t)&&t.preventDefault()},r.prototype._onkeypress=function(t){if(t.which!==this._lastKeyCodeTyped){this._setProperty("keyCode",t.which),this._setProperty("_lastKeyCodeTyped",t.which),this._setProperty("key",String.fromCharCode(t.which));var e=this.keyTyped||window.keyTyped;"function"==typeof e&&!1===e(t)&&t.preventDefault()}},r.prototype._onblur=function(t){n={}},r.prototype.keyIsDown=function(t){return r._validateParameters("keyIsDown",arguments),n[t]},e.exports=r},{"../core/main":24}],40:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._hasMouseInteracted=!1,r.prototype.mouseX=0,r.prototype.mouseY=0,r.prototype.pmouseX=0,r.prototype.pmouseY=0,r.prototype.winMouseX=0,r.prototype.winMouseY=0,r.prototype.pwinMouseX=0,r.prototype.pwinMouseY=0,r.prototype.mouseButton=0,r.prototype.mouseIsPressed=!1,r.prototype._updateNextMouseCoords=function(t){if(null!==this._curElement&&(!t.touches||t.touches.length>0)){var e=function(t,e,i,r){r&&!r.clientX&&(r.touches?r=r.touches[0]:r.changedTouches&&(r=r.changedTouches[0]));var n=t.getBoundingClientRect(),o=t.scrollWidth/e,s=t.scrollHeight/i;return{x:(r.clientX-n.left)/o,y:(r.clientY-n.top)/s,winX:r.clientX,winY:r.clientY,id:r.identifier}}(this._curElement.elt,this.width,this.height,t);this._setProperty("mouseX",e.x),this._setProperty("mouseY",e.y),this._setProperty("winMouseX",e.winX),this._setProperty("winMouseY",e.winY)}this._hasMouseInteracted||(this._updateMouseCoords(),this._setProperty("_hasMouseInteracted",!0))},r.prototype._updateMouseCoords=function(){this._setProperty("pmouseX",this.mouseX),this._setProperty("pmouseY",this.mouseY),this._setProperty("pwinMouseX",this.winMouseX),this._setProperty("pwinMouseY",this.winMouseY),this._setProperty("_pmouseWheelDeltaY",this._mouseWheelDeltaY)},r.prototype._setMouseButton=function(t){1===t.button?this._setProperty("mouseButton",n.CENTER):2===t.button?this._setProperty("mouseButton",n.RIGHT):this._setProperty("mouseButton",n.LEFT)},r.prototype._onmousemove=function(t){var e=this._isGlobal?window:this;this._updateNextMouseCoords(t),this.mouseIsPressed?"function"==typeof e.mouseDragged?!1===e.mouseDragged(t)&&t.preventDefault():"function"==typeof e.touchMoved&&!1===e.touchMoved(t)&&t.preventDefault():"function"==typeof e.mouseMoved&&!1===e.mouseMoved(t)&&t.preventDefault()},r.prototype._onmousedown=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!0),this._setMouseButton(t),this._updateNextMouseCoords(t),"function"==typeof e.mousePressed?!1===e.mousePressed(t)&&t.preventDefault():"function"==typeof e.touchStarted&&!1===e.touchStarted(t)&&t.preventDefault()},r.prototype._onmouseup=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!1),"function"==typeof e.mouseReleased?!1===e.mouseReleased(t)&&t.preventDefault():"function"==typeof e.touchEnded&&!1===e.touchEnded(t)&&t.preventDefault()},r.prototype._ondragend=r.prototype._onmouseup,r.prototype._ondragover=r.prototype._onmousemove,r.prototype._onclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.mouseClicked&&!1===e.mouseClicked(t)&&t.preventDefault()},r.prototype._ondblclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.doubleClicked&&!1===e.doubleClicked(t)&&t.preventDefault()},r.prototype._mouseWheelDeltaY=0,r.prototype._pmouseWheelDeltaY=0,r.prototype._onwheel=function(t){var e=this._isGlobal?window:this;this._setProperty("_mouseWheelDeltaY",t.deltaY),"function"==typeof e.mouseWheel&&(t.delta=t.deltaY,!1===e.mouseWheel(t)&&t.preventDefault())},e.exports=r},{"../core/constants":18,"../core/main":24}],41:[function(t,e,i){"use strict";function r(t,e,i,r,n){n=n||0;var o=t.getBoundingClientRect(),s=t.scrollWidth/e,a=t.scrollHeight/i,h=r.touches[n]||r.changedTouches[n];return{x:(h.clientX-o.left)/s,y:(h.clientY-o.top)/a,winX:h.clientX,winY:h.clientY,id:h.identifier}}var n=t("../core/main");n.prototype.touches=[],n.prototype._updateTouchCoords=function(t){if(null!==this._curElement){for(var e=[],i=0;i=r)break;x=0}for(M=x;M=r);M++){var O=c[g+R];P=a[M],v+=P[(-16777216&O)>>>24],f+=P[(16711680&O)>>16],m+=P[(65280&O)>>8],y+=P[255&O],d+=s[M],g++}A[_=R+w]=v/d,E[_]=f/d,k[_]=m/d,C[_]=y/d}R+=r}for(R=0,S=(b=-n)*r,T=0;T=l)break;x=0,_=b,g=w+S}for(M=x;M=l);M++)P=a[M],v+=P[A[g]],f+=P[E[g]],m+=P[k[g]],y+=P[C[g]],d+=s[M],_++,g+=r;c[w+R]=v/d<<24|f/d<<16|m/d<<8|y/d}R+=r,S+=r,b++}h._setPixels(i,c)}var n,o,s,a,h={_toPixels:function(t){return t instanceof ImageData?t.data:t.getContext("2d").getImageData(0,0,t.width,t.height).data},_getARGB:function(t,e){var i=4*e;return t[i+3]<<24&4278190080|t[i]<<16&16711680|t[i+1]<<8&65280|255&t[i+2]},_setPixels:function(t,e){for(var i=0,r=0,n=t.length;r>>16,t[i+1]=(65280&e[r])>>>8,t[i+2]=255&e[r],t[i+3]=(4278190080&e[r])>>>24},_toImageData:function(t){return t instanceof ImageData?t:t.getContext("2d").getImageData(0,0,t.width,t.height)},_createImageData:function(t,e){return h._tmpCanvas=document.createElement("canvas"),h._tmpCtx=h._tmpCanvas.getContext("2d"),this._tmpCtx.createImageData(t,e)},apply:function(t,e,i){var r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),o=e(n,i);o instanceof ImageData?r.putImageData(o,0,0,0,0,t.width,t.height):r.putImageData(n,0,0,0,0,t.width,t.height)},threshold:function(t,e){var i=h._toPixels(t);void 0===e&&(e=.5);for(var r=Math.floor(255*e),n=0;n=r?255:0,i[n]=i[n+1]=i[n+2]=o}},gray:function(t){for(var e=h._toPixels(t),i=0;i255)throw new Error("Level must be greater than 2 and less than 255 for posterize");for(var r=e-1,n=0;n>8)/r,i[n+1]=255*(s*e>>8)/r,i[n+2]=255*(a*e>>8)/r}},dilate:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))>(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m>o&&(n=c,o=m),v>o&&(n=d,o=v),g>o&&(n=f,o=g),x[b++]=n;h._setPixels(_,x)},erode:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))<(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m=1&&(e=o[0]),o.length>=2&&(i=o[1]),i=i||r.prototype._checkFileExtension(e,i)[1]||"png"){default:n="image/png";break;case"jpeg":case"jpg":n="image/jpeg"}t.toBlob(function(t){r.prototype.downloadFile(t,e,i)},n)},r.prototype.saveFrames=function(t,e,i,o,s){r._validateParameters("saveFrames",arguments);var a=i||3;a=r.prototype.constrain(a,0,15),a*=1e3;var h=o||15;h=r.prototype.constrain(h,0,22);var l=0,u=r.prototype._makeFrame,c=this._curElement.elt,p=setInterval(function(){u(t+l,e,c),l++},1e3/h);setTimeout(function(){if(clearInterval(p),s)s(n);else for(var t=0;t0&&t0&&this.loadPixels(),this.setModified(!0),this._pixelsDirty=!0},r.Image.prototype.copy=function(){var t,e,i,n,o,s,a,h,l;if(9===arguments.length)t=arguments[0],e=arguments[1],i=arguments[2],n=arguments[3],o=arguments[4],s=arguments[5],a=arguments[6],h=arguments[7],l=arguments[8];else{if(8!==arguments.length)throw new Error("Signature not supported");t=this,e=arguments[0],i=arguments[1],n=arguments[2],o=arguments[3],s=arguments[4],a=arguments[5],h=arguments[6],l=arguments[7]}r.Renderer2D._copyHelper(this,t,e,i,n,o,s,a,h,l),this._pixelsDirty=!0},r.Image.prototype.mask=function(t){void 0===t&&(t=this);var e=this.drawingContext.globalCompositeOperation,i=1;t instanceof r.Renderer&&(i=t._pInst._pixelDensity);var n=[t,0,0,i*t.width,i*t.height,0,0,this.width,this.height];this.drawingContext.globalCompositeOperation="destination-in",r.Image.prototype.copy.apply(this,n),this.drawingContext.globalCompositeOperation=e,this.setModified(!0)},r.Image.prototype.filter=function(t,e){n.apply(this.canvas,n[t.toLowerCase()],e),this.setModified(!0)},r.Image.prototype.blend=function(){r.prototype.blend.apply(this,arguments),this.setModified(!0)},r.Image.prototype.setModified=function(t){this._modified=t},r.Image.prototype.isModified=function(){return this._modified},r.Image.prototype.save=function(t,e){r.prototype.saveCanvas(this.canvas,t,e)},e.exports=r.Image},{"../core/main":24,"./filters":42}],46:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("./filters");t("../color/p5.Color"),r.prototype.pixels=[],r.prototype.blend=function(){r._validateParameters("blend",arguments),this._renderer?this._renderer.blend.apply(this._renderer,arguments):r.Renderer2D.prototype.blend.apply(this,arguments)},r.prototype.copy=function(){r._validateParameters("copy",arguments),r.Renderer2D.prototype.copy.apply(this._renderer,arguments)},r.prototype.filter=function(t,e){r._validateParameters("filter",arguments),void 0!==this.canvas?n.apply(this.canvas,n[t.toLowerCase()],e):n.apply(this.elt,n[t.toLowerCase()],e)},r.prototype.get=function(t,e,i,r){return this._renderer.get(t,e,i,r)},r.prototype.loadPixels=function(){r._validateParameters("loadPixels",arguments),this._renderer.loadPixels()},r.prototype.set=function(t,e,i){this._renderer.set(t,e,i)},r.prototype.updatePixels=function(t,e,i,n){r._validateParameters("updatePixels",arguments),0!==this.pixels.length&&this._renderer.updatePixels(t,e,i,n)},e.exports=r},{"../color/p5.Color":16,"../core/main":24,"./filters":42}],47:[function(t,e,i){"use strict";function r(t,e){var i={};if(void 0===(e=e||[]))for(var r=0;r/g,">").replace(/"/g,""").replace(/'/g,"'")}function o(t,e){e&&!0!==e&&"true"!==e||(e=""),t||(t="untitled");var i="";return t&&t.indexOf(".")>-1&&(i=t.split(".").pop()),e&&i!==e&&(t=t+"."+(i=e)),[t,i]}var s=t("../core/main");t("whatwg-fetch"),t("es6-promise").polyfill();var a=t("fetch-jsonp");t("../core/error_helpers"),s.prototype.loadJSON=function(){s._validateParameters("loadJSON",arguments);for(var t,e,i,r=arguments[0],n={},o="json",a=1;a0&&"function"==typeof arguments[u];u--)h++;var c=arguments.length-h,p=arguments[0];if(2===c&&"string"==typeof p&&"object"==typeof arguments[1])r=new Request(p,arguments[1]),e=arguments[2],i=arguments[3];else{for(var d,f="GET",m=1;m64e6&&s._friendlyFileLoadError(7,p),t){case"json":case"jsonp":return e.json();case"binary":return e.blob();case"arrayBuffer":return e.arrayBuffer();case"xml":return e.text().then(function(t){return function t(e){var i=new s.XML,r=e.childNodes;if(r&&r.length){for(var n=0;n"),o.print("");var p=' "),o.print(""),o.print(" "),"0"!==a[0]){o.print(" ");for(var d=0;d"+f),o.print(" ")}o.print(" ")}for(var m=0;m");for(var y=0;y"+g),o.print(" ")}o.print(" ")}o.print("
"),o.print(""),o.print("")}o.close(),o.clear()},s.prototype.writeFile=function(t,e,i){var r="application/octet-stream";s.prototype._isSafari()&&(r="text/plain");var n=new Blob(t,{type:r});s.prototype.downloadFile(n,e,i)},s.prototype.downloadFile=function(e,i,r){var n=o(i,r),a=n[0];if(e instanceof Blob)t("file-saver").saveAs(e,a);else{var h=document.createElement("a");if(h.href=e,h.download=a,h.onclick=function(t){(function(t){document.body.removeChild(t.target)})(t),t.stopPropagation()},h.style.display="none",document.body.appendChild(h),s.prototype._isSafari()){var l="Hello, Safari user! To download this file...\n";l+="1. Go to File --\x3e Save As.\n",l+='2. Choose "Page Source" as the Format.\n',l+='3. Name it with this extension: ."'+n[1]+'"',alert(l)}h.click()}},s.prototype._checkFileExtension=o,s.prototype._isSafari=function(){return Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0},e.exports=s},{"../core/error_helpers":20,"../core/main":24,"es6-promise":4,"fetch-jsonp":5,"file-saver":6,"whatwg-fetch":12}],48:[function(t,e,i){"use strict";var r=t("../core/main");r.Table=function(t){this.columns=[],this.rows=[]},r.Table.prototype.addRow=function(t){var e=t||new r.TableRow;if(void 0===e.arr||void 0===e.obj)throw new Error("invalid TableRow: "+e);return e.table=this,this.rows.push(e),e},r.Table.prototype.removeRow=function(t){this.rows[t].table=null;var e=this.rows.splice(t+1,this.rows.length);this.rows.pop(),this.rows=this.rows.concat(e)},r.Table.prototype.getRow=function(t){return this.rows[t]},r.Table.prototype.getRows=function(){return this.rows},r.Table.prototype.findRow=function(t,e){if("string"==typeof e){for(var i=0;i=0))throw new Error('This table has no column named "'+t+'"');i=e[t],r[i]=e}else r[n]=this.rows[n].obj;return r},r.Table.prototype.getArray=function(){for(var t=[],e=0;e=0))throw new Error('This table has no column named "'+t+'"');this.obj[t]=e,this.arr[i]=e}else{if(!(t0},r.XML.prototype.listChildren=function(){return this.children.map(function(t){return t.name})},r.XML.prototype.getChildren=function(t){return t?this.children.filter(function(e){return e.name===t}):this.children},r.XML.prototype.getChild=function(t){if("string"!=typeof t)return this.children[t];for(var e=0;eo&&(o=a),n[s]=a}0===o&&(o=1);for(var h=0,l=0,u=0;u=1&&(f++,v--),g>=1&&(m++,g--),_>=1&&(y++,_--)}return b},n.prototype.noiseDetail=function(t,e){t>0&&(s=t),e>0&&(a=e)},n.prototype.noiseSeed=function(t){var e=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();e.setSeed(t),r=new Array(o+1);for(var i=0;it*t&&this.div(Math.sqrt(e)).mult(t),this},r.Vector.prototype.setMag=function(t){return this.normalize().mult(t)},r.Vector.prototype.heading=function(){var t=Math.atan2(this.y,this.x);return this.p5?this.p5._fromRadians(t):t},r.Vector.prototype.rotate=function(t){var e=this.heading()+t;this.p5&&(e=this.p5._toRadians(e));var i=this.mag();return this.x=Math.cos(e)*i,this.y=Math.sin(e)*i,this},r.Vector.prototype.angleBetween=function(t){var e=this.dot(t)/(this.mag()*t.mag()),i=Math.acos(Math.min(1,Math.max(-1,e)));return this.p5?this.p5._fromRadians(i):i},r.Vector.prototype.lerp=function(t,e,i,n){return t instanceof r.Vector?this.lerp(t.x,t.y,t.z,e):(this.x+=(t-this.x)*n||0,this.y+=(e-this.y)*n||0,this.z+=(i-this.z)*n||0,this)},r.Vector.prototype.array=function(){return[this.x||0,this.y||0,this.z||0]},r.Vector.prototype.equals=function(t,e,i){var n,o,s;return t instanceof r.Vector?(n=t.x||0,o=t.y||0,s=t.z||0):t instanceof Array?(n=t[0]||0,o=t[1]||0,s=t[2]||0):(n=t||0,o=e||0,s=i||0),this.x===n&&this.y===o&&this.z===s},r.Vector.fromAngle=function(t,e){return void 0===e&&(e=1),new r.Vector(e*Math.cos(t),e*Math.sin(t),0)},r.Vector.fromAngles=function(t,e,i){void 0===i&&(i=1);var n=Math.cos(e),o=Math.sin(e),s=Math.cos(t),a=Math.sin(t);return new r.Vector(i*a*o,-i*s,i*a*n)},r.Vector.random2D=function(){return this.fromAngle(Math.random()*n.TWO_PI)},r.Vector.random3D=function(){var t=Math.random()*n.TWO_PI,e=2*Math.random()-1,i=Math.sqrt(1-e*e),o=i*Math.cos(t),s=i*Math.sin(t);return new r.Vector(o,s,e)},r.Vector.add=function(t,e,i){return i?i.set(t):i=t.copy(),i.add(e),i},r.Vector.sub=function(t,e,i){return i?i.set(t):i=t.copy(),i.sub(e),i},r.Vector.mult=function(t,e,i){return i?i.set(t):i=t.copy(),i.mult(e),i},r.Vector.div=function(t,e,i){return i?i.set(t):i=t.copy(),i.div(e),i},r.Vector.dot=function(t,e){return t.dot(e)},r.Vector.cross=function(t,e){return t.cross(e)},r.Vector.dist=function(t,e){return t.dist(e)},r.Vector.lerp=function(t,e,i,r){return r?r.set(t):r=t.copy(),r.lerp(e,i),r},r.Vector.mag=function(t){var e=t.x,i=t.y,r=t.z,n=e*e+i*i+r*r;return Math.sqrt(n)},e.exports=r.Vector},{"../core/constants":18,"../core/main":24}],55:[function(t,e,i){"use strict";var r=t("../core/main"),n=!1,o=!1,s=0,a=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();r.prototype.randomSeed=function(t){a.setSeed(t),n=!0,o=!1},r.prototype.random=function(t,e){var i;if(i=n?a.rand():Math.random(),void 0===t)return i;if(void 0===e)return t instanceof Array?t[Math.floor(i*t.length)]:i*t;if(t>e){var r=t;t=e,e=r}return i*(e-t)+t},r.prototype.randomGaussian=function(t,e){var i,r,n,a;if(o)i=s,o=!1;else{do{r=this.random(2)-1,n=this.random(2)-1,a=r*r+n*n}while(a>=1);a=Math.sqrt(-2*Math.log(a)/a),i=r*a,s=n*a,o=!0}var h=t||0;return i*(e||1)+h},e.exports=r},{"../core/main":24}],56:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._angleMode=n.RADIANS,r.prototype.acos=function(t){return this._fromRadians(Math.acos(t))},r.prototype.asin=function(t){return this._fromRadians(Math.asin(t))},r.prototype.atan=function(t){return this._fromRadians(Math.atan(t))},r.prototype.atan2=function(t,e){return this._fromRadians(Math.atan2(t,e))},r.prototype.cos=function(t){return Math.cos(this._toRadians(t))},r.prototype.sin=function(t){return Math.sin(this._toRadians(t))},r.prototype.tan=function(t){return Math.tan(this._toRadians(t))},r.prototype.degrees=function(t){return t*n.RAD_TO_DEG},r.prototype.radians=function(t){return t*n.DEG_TO_RAD},r.prototype.angleMode=function(t){t!==n.DEGREES&&t!==n.RADIANS||(this._angleMode=t)},r.prototype._toRadians=function(t){return this._angleMode===n.DEGREES?t*n.DEG_TO_RAD:t},r.prototype._toDegrees=function(t){return this._angleMode===n.RADIANS?t*n.RAD_TO_DEG:t},r.prototype._fromRadians=function(t){return this._angleMode===n.DEGREES?t*n.RAD_TO_DEG:t},e.exports=r},{"../core/constants":18,"../core/main":24}],57:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.textAlign=function(t,e){return r._validateParameters("textAlign",arguments),this._renderer.textAlign.apply(this._renderer,arguments)},r.prototype.textLeading=function(t){return r._validateParameters("textLeading",arguments),this._renderer.textLeading.apply(this._renderer,arguments)},r.prototype.textSize=function(t){return r._validateParameters("textSize",arguments),this._renderer.textSize.apply(this._renderer,arguments)},r.prototype.textStyle=function(t){return r._validateParameters("textStyle",arguments),this._renderer.textStyle.apply(this._renderer,arguments)},r.prototype.textWidth=function(t){return r._validateParameters("textWidth",arguments),0===t.length?0:this._renderer.textWidth.apply(this._renderer,arguments)},r.prototype.textAscent=function(){return r._validateParameters("textAscent",arguments),this._renderer.textAscent()},r.prototype.textDescent=function(){return r._validateParameters("textDescent",arguments),this._renderer.textDescent()},r.prototype._updateTextMetrics=function(){return this._renderer._updateTextMetrics()},e.exports=r},{"../core/main":24}],58:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("opentype.js");t("../core/error_helpers"),r.prototype.loadFont=function(t,e,i){r._validateParameters("loadFont",arguments);var n=new r.Font(this),s=this;return o.load(t,function(o,a){if(o)return void 0!==i?i(o):(r._friendlyFileLoadError(4,t),void console.error(o,t));n.font=a,void 0!==e&&e(n),s._decrementPreload();var h,l,u=t.split("\\").pop().split("/").pop(),c=u.lastIndexOf("."),p=c<1?null:u.substr(c+1);["ttf","otf","woff","woff2"].indexOf(p)>-1&&(h=u.substr(0,c),(l=document.createElement("style")).appendChild(document.createTextNode("\n@font-face {\nfont-family: "+h+";\nsrc: url("+t+");\n}\n")),document.head.appendChild(l))}),n},r.prototype.text=function(t,e,i,n,o){return r._validateParameters("text",arguments),this._renderer._doFill||this._renderer._doStroke?this._renderer.text.apply(this._renderer,arguments):this},r.prototype.textFont=function(t,e){if(r._validateParameters("textFont",arguments),arguments.length){if(!t)throw new Error("null font passed to textFont");return this._renderer._setProperty("_textFont",t),e&&(this._renderer._setProperty("_textSize",e),this._renderer._setProperty("_textLeading",e*n._DEFAULT_LEADMULT)),this._renderer._applyTextProperties()}return this._renderer._textFont},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"opentype.js":10}],59:[function(t,e,i){"use strict";function r(t,e){for(var i=function(t,e){if("object"!=typeof t)t=e;else for(var i in e)void 0===t[i]&&(t[i]=e[i]);return t}(e,{sampleFactor:.1,simplifyThreshold:0}),r=c(t,0,1),o=r/(r*i.sampleFactor),s=[],a=0;a3&&r>=0;--r)h(a(t,r-1),a(t,r),a(t,r+1),e)&&(t.splice(r%t.length,1),i++);return i}function o(t){for(var e,i=[],r=0;rg||v<_)&&(T+=180),{x:f,y:m,m:{x:y,y:v},n:{x:g,y:_},start:{x:b,y:S},end:{x:x,y:w},alpha:T}}function u(t,e,i,r,n,o,s,a,h){return null==h?v(t,e,i,r,n,o,s,a):l(t,e,i,r,n,o,s,a,function(t,e,i,r,n,o,s,a,h){if(!(h<0||v(t,e,i,r,n,o,s,a).01;)u/=2,l=v(t,e,i,r,n,o,s,a,c+=(le&&!i)return{x:(a=u(r,n,o[1],o[2],o[3],o[4],o[5],o[6],e-h)).x,y:a.y,alpha:a.alpha};h+=s,r=+o[5],n=+o[6]}o.shift()}return(a=i?h:l(r,n,o[0],o[1],o[2],o[3],o[4],o[5],1)).alpha&&(a={x:a.x,y:a.y,alpha:a.alpha}),a}function p(t){var e=[],i=0,r=0,n=0,o=0,s=0;if(!t)return e;"M"===t[0][0]&&(i=+t[0][1],r=+t[0][2],n=i,o=r,s++,e[0]=["M",i,r]);for(var a,h,l,u=3===t.length&&"M"===t[0][0]&&"R"===t[1][0].toUpperCase()&&"Z"===t[2][0].toUpperCase(),c=s,p=t.length;c1&&(w=Math.sqrt(w),r*=w,n*=w);var T=r*r,M=n*n,P=(s===a?-1:1)*Math.sqrt(Math.abs((T*M-T*x*x-M*S*S)/(T*x*x+M*S*S)));d=P*r*x/n+(e+h)/2,f=P*-n*S/r+(i+l)/2,c=Math.asin(((i-f)/n).toFixed(9)),p=Math.asin(((l-f)/n).toFixed(9)),c=ep&&(c-=2*y),!a&&p>c&&(p-=2*y)}var A=p-c;if(Math.abs(A)>v){var E=p,k=h,C=l;p=c+v*(a&&p>c?1:-1),h=d+r*Math.cos(p),l=f+n*Math.sin(p),_=t(h,l,r,n,o,0,a,k,C,[p,E,d,f])}A=p-c;var R=Math.cos(c),O=Math.sin(c),L=Math.cos(p),F=Math.sin(p),I=Math.tan(A/4),D=4/3*r*I,U=4/3*n*I,B=[e,i],N=[e+D*O,i-U*R],G=[h+D*F,l-U*L],q=[h,l];if(N[0]=2*B[0]-N[0],N[1]=2*B[1]-N[1],u)return[N,G,q].concat(_);for(var V=[],j=0,z=(_=[N,G,q].concat(_).join().split(",")).length;j7){t[e].shift();for(var o=t[e];o.length;)a[e]="A",n&&(h[e]="A"),t.splice(e++,0,["C"].concat(o.splice(0,6)));t.splice(e,1),i=Math.max(r.length,n&&n.length||0)}},c=function(t,e,o,s,a){t&&e&&"M"===t[a][0]&&"M"!==e[a][0]&&(e.splice(a,0,["M",s.x,s.y]),o.bx=0,o.by=0,o.x=t[a][1],o.y=t[a][2],i=Math.max(r.length,n&&n.length||0))},d="",f="";i=Math.max(r.length,n&&n.length||0);for(var v=0;vr;r+=2){var o=[{x:+t[r-2],y:+t[r-1]},{x:+t[r],y:+t[r+1]},{x:+t[r+2],y:+t[r+3]},{x:+t[r+4],y:+t[r+5]}];e?r?n-4===r?o[3]={x:+t[0],y:+t[1]}:n-2===r&&(o[2]={x:+t[0],y:+t[1]},o[3]={x:+t[2],y:+t[3]}):o[0]={x:+t[n-2],y:+t[n-1]}:n-4===r?o[3]=o[2]:r||(o[0]={x:+t[r],y:+t[r+1]}),i.push(["C",(-o[0].x+6*o[1].x+o[2].x)/6,(-o[0].y+6*o[1].y+o[2].y)/6,(o[1].x+6*o[2].x-o[3].x)/6,(o[1].y+6*o[2].y-o[3].y)/6,o[2].x,o[2].y])}return i}function m(t,e,i,r){return[t,e,i,r,i,r]}function y(t,e,i,r,n,o){var s=1/3,a=2/3;return[s*t+a*i,s*e+a*r,s*n+a*i,s*o+a*r,n,o]}function v(t,e,i,r,n,o,s,a,h){null==h&&(h=1);for(var l=(h=h>1?1:h<0?0:h)/2,u=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],c=0,p=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],d=0;d<12;d++){var f=l*u[d]+l,m=g(f,t,i,n,s),y=g(f,e,r,o,a),v=m*m+y*y;c+=p[d]*Math.sqrt(v)}return l*c}function g(t,e,i,r,n){return t*(t*(-3*e+9*i-9*r+3*n)+6*e-12*i+6*r)-3*e+3*i}function _(){for(var t="",e=arguments.length-1;e>=0;--e){var i=arguments[e];t+=i===Object(i)?JSON.stringify(i):i}return t}var b=t("../core/main"),S=t("../core/constants");b.Font=function(t){this.parent=t,this.cache={},this.font=void 0},b.Font.prototype.list=function(){throw new Error("not yet implemented")},b.Font.prototype.textBounds=function(t,e,i,r,n){e=void 0!==e?e:0,i=void 0!==i?i:0,r=r||this.parent._renderer._textSize;var o=n&&n.renderer&&n.renderer._pInst||this.parent,s=o._renderer,a=s._textAlign||S.LEFT,h=s._textBaseline||S.BASELINE,l=_("textBounds",t,e,i,r,a,h),u=this.cache[l];if(!u){var c,p,d,f,m,y=[],v=[],g=this._scale(r);this.font.forEachGlyph(t,e,i,r,n,function(t,e,i,r){var n=t.getMetrics();y.push(e+n.xMin*g),y.push(e+n.xMax*g),v.push(i+-n.yMin*g),v.push(i+-n.yMax*g)}),c=Math.min.apply(null,y),p=Math.min.apply(null,v),d=Math.max.apply(null,y),f=Math.max.apply(null,v),u={x:c,y:p,h:f-p,w:d-c,advance:c-e},m=this._handleAlignment(s,t,u.x,u.y,u.w+u.advance),u.x=m.x,u.y=m.y,this.cache[_("textBounds",t,e,i,r,a,h)]=u}return u},b.Font.prototype.textToPoints=function(t,e,i,n,s){function a(e){return u[e].name&&"space"===u[e].name||t.length===u.length&&" "===t[e]||u[e].index&&3===u[e].index}var h=0,l=[],u=this._getGlyphs(t);n=n||this.parent._renderer._textSize;for(var c=0;c2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&"number"==typeof r.decimals&&(n=r.decimals),t.toPathData(n)},b.Font.prototype._getSVG=function(t,e,i,r){var n=3;return"string"==typeof t&&arguments.length>2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&("number"==typeof r.decimals&&(n=r.decimals),"number"==typeof r.strokeWidth&&(t.strokeWidth=r.strokeWidth),void 0!==r.fill&&(t.fill=r.fill),void 0!==r.stroke&&(t.stroke=r.stroke)),t.toSVG(n)},b.Font.prototype._renderPath=function(t,e,i,r){var n,o=r&&r.renderer||this.parent._renderer,s=o.drawingContext;n="object"==typeof t&&t.commands?t.commands:this._getPath(t,e,i,r).commands,s.beginPath();for(var a=0;a1;)i=Math.random()*o|0,r=t[--o],t[o]=t[i],t[i]=r;return t},r.prototype.sort=function(t,e){var i=e?t.slice(0,Math.min(e,t.length)):t,r=e?t.slice(Math.min(e,t.length)):[];return(i="string"==typeof i[0]?i.sort():i.sort(function(t,e){return t-e})).concat(r)},r.prototype.splice=function(t,e,i){return Array.prototype.splice.apply(t,[i,0].concat(e)),t},r.prototype.subset=function(t,e,i){return void 0!==i?t.slice(e,e+i):t.slice(e,t.length)},e.exports=r},{"../core/main":24}],61:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.float=function(t){return t instanceof Array?t.map(parseFloat):parseFloat(t)},r.prototype.int=function(t,e){return e=e||10,"string"==typeof t?parseInt(t,e):"number"==typeof t?0|t:"boolean"==typeof t?t?1:0:t instanceof Array?t.map(function(t){return r.prototype.int(t,e)}):void 0},r.prototype.str=function(t){return t instanceof Array?t.map(r.prototype.str):String(t)},r.prototype.boolean=function(t){return"number"==typeof t?0!==t:"string"==typeof t?"true"===t.toLowerCase():"boolean"==typeof t?t:t instanceof Array?t.map(r.prototype.boolean):void 0},r.prototype.byte=function(t){var e=r.prototype.int(t,10);return"number"==typeof e?(e+128)%256-128:e instanceof Array?e.map(r.prototype.byte):void 0},r.prototype.char=function(t){return"number"!=typeof t||isNaN(t)?t instanceof Array?t.map(r.prototype.char):"string"==typeof t?r.prototype.char(parseInt(t,10)):void 0:String.fromCharCode(t)},r.prototype.unchar=function(t){return"string"==typeof t&&1===t.length?t.charCodeAt(0):t instanceof Array?t.map(r.prototype.unchar):void 0},r.prototype.hex=function(t,e){if(e=void 0===e||null===e?e=8:e,t instanceof Array)return t.map(function(t){return r.prototype.hex(t,e)});if("number"==typeof t){t<0&&(t=4294967295+t+1);for(var i=Number(t).toString(16).toUpperCase();i.length=e&&(i=i.substring(i.length-e,i.length)),i}},r.prototype.unhex=function(t){return t instanceof Array?t.map(r.prototype.unhex):parseInt("0x"+t,16)},e.exports=r},{"../core/main":24}],62:[function(t,e,i){"use strict";function r(t,e,i){var r=t<0,n=r?t.toString().substring(1):t.toString(),o=n.indexOf("."),s=-1!==o?n.substring(0,o):n,a=-1!==o?n.substring(o+1):"",h=r?"-":"";if(void 0!==i){var l="";(-1!==o||i-a.length>0)&&(l="."),a.length>i&&(a=a.substring(0,i));for(var u=0;ur.length)for(var o=e-(r+=-1===i?".":"").length+1,s=0;s0?"+"+t.toString():t.toString()}function s(t){return parseFloat(t)>0?" "+t.toString():t.toString()}var a=t("../core/main");t("../core/error_helpers"),a.prototype.join=function(t,e){return a._validateParameters("join",arguments),t.join(e)},a.prototype.match=function(t,e){return a._validateParameters("match",arguments),t.match(e)},a.prototype.matchAll=function(t,e){a._validateParameters("matchAll",arguments);for(var i=new RegExp(e,"g"),r=i.exec(t),n=[];null!==r;)n.push(r),r=i.exec(t);return n},a.prototype.nf=function(t,e,i){return a._validateParameters("nf",arguments),t instanceof Array?t.map(function(t){return r(t,e,i)}):"[object Arguments]"===Object.prototype.toString.call(t)?3===t.length?this.nf(t[0],t[1],t[2]):2===t.length?this.nf(t[0],t[1]):this.nf(t[0]):r(t,e,i)},a.prototype.nfc=function(t,e){return a._validateParameters("nfc",arguments),t instanceof Array?t.map(function(t){return n(t,e)}):n(t,e)},a.prototype.nfp=function(){a._validateParameters("nfp",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(o):o(t)},a.prototype.nfs=function(){a._validateParameters("nfs",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(s):s(t)},a.prototype.split=function(t,e){return a._validateParameters("split",arguments),t.split(e)},a.prototype.splitTokens=function(t,e){var i;if(a._validateParameters("splitTokens",arguments),void 0!==e){var r=e,n=/\]/g.exec(r),o=/\[/g.exec(r);o&&n?(r=r.slice(0,n.index)+r.slice(n.index+1),o=/\[/g.exec(r),r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("[\\["+r+"\\]]","g")):n?(r=r.slice(0,n.index)+r.slice(n.index+1),i=new RegExp("["+r+"\\]]","g")):o?(r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("["+r+"\\[]","g")):i=new RegExp("["+r+"]","g")}else i=/\s/g;return t.split(i).filter(function(t){return t})},a.prototype.trim=function(t){return a._validateParameters("trim",arguments),t instanceof Array?t.map(this.trim):t.trim()},e.exports=a},{"../core/error_helpers":20,"../core/main":24}],63:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.day=function(){return(new Date).getDate()},r.prototype.hour=function(){return(new Date).getHours()},r.prototype.minute=function(){return(new Date).getMinutes()},r.prototype.millis=function(){return window.performance.now()},r.prototype.month=function(){return(new Date).getMonth()+1},r.prototype.second=function(){return(new Date).getSeconds()},r.prototype.year=function(){return(new Date).getFullYear()},e.exports=r},{"../core/main":24}],64:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry");var n=t("../core/constants");r.prototype.plane=function(t,e,i,n){this._assert3d("plane"),r._validateParameters("plane",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=1),void 0===n&&(n=1);var o="plane|"+i+"|"+n;if(!this._renderer.geometryInHash(o)){var s=new r.Geometry(i,n,function(){for(var t,e,i,n=0;n<=this.detailY;n++){e=n/this.detailY;for(var o=0;o<=this.detailX;o++)t=o/this.detailX,i=new r.Vector(t-.5,e-.5,0),this.vertices.push(i),this.uvs.push(t,e)}});s.computeFaces().computeNormals(),i<=1&&n<=1?s._makeTriangleEdges()._edgesToVertices():console.log("Cannot draw stroke on plane objects with more than 1 detailX or 1 detailY"),this._renderer.createBuffers(o,s)}return this._renderer.drawBuffersScaled(o,t,e,1),this},r.prototype.box=function(t,e,i,n,o){this._assert3d("box"),r._validateParameters("box",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=e);var s=this._renderer.attributes&&this._renderer.attributes.perPixelLighting;void 0===n&&(n=s?1:4),void 0===o&&(o=s?1:4);var a="box|"+n+"|"+o;if(!this._renderer.geometryInHash(a)){var h=new r.Geometry(n,o,function(){var t=[[0,4,2,6],[1,3,5,7],[0,1,4,5],[2,6,3,7],[0,2,1,3],[4,5,6,7]];this.strokeIndices=[[0,1],[1,3],[3,2],[6,7],[8,9],[9,11],[14,15],[16,17],[17,19],[18,19],[20,21],[22,23]];for(var e=0;eo?(_=i,g=1,v=e):v=t+(e-t)*g,-2!==h&&h!==o+2||(v=0),_-=i/2,m[h]=0===v?1:n,l=0;lo?0:Math.sin(2*b*Math.PI)*Math.cos(y),h<0?-1:h>o?1:Math.sin(y),h<0||h>o?0:Math.cos(2*b*Math.PI)*Math.cos(y))),this.uvs.push(b,g)}}var S=0;if(s){for(u=0;u=n.TWO_PI?(e="ellipse")+"|"+p+"|":(e="arc")+"|"+l+"|"+u+"|"+c+"|"+p+"|",!this.geometryInHash(i)){var d=new r.Geometry(p,1,function(){if(this.strokeIndices=[],l.toFixed(10)!==u.toFixed(10)){c!==n.PIE&&void 0!==c||(this.vertices.push(new r.Vector(.5,.5,0)),this.uvs.push([.5,.5]));for(var t=0;t<=p;t++){var e=t/p,i=(u-l)*e+l,o=.5+Math.cos(i)/2,s=.5+Math.sin(i)/2;this.vertices.push(new r.Vector(o,s,0)),this.uvs.push([o,s]),t0&&h>0&&(this.strokeIndices=[[0,a],[a,(a+1)*(h+1)-1],[(a+1)*(h+1)-1,(a+1)*h],[(a+1)*h,0]])});u.computeFaces().computeNormals()._makeTriangleEdges()._edgesToVertices(),this.createBuffers(l,u)}var c=this.uMVMatrix.copy();try{this.uMVMatrix.translate([i,n,0]),this.uMVMatrix.scale(o,s,1),this.drawBuffers(l)}finally{this.uMVMatrix=c}return this},r.RendererGL.prototype.quad=function(t,e,i,n,o,s,a,h){var l="quad|"+t+"|"+e+"|"+i+"|"+n+"|"+o+"|"+s+"|"+a+"|"+h;if(!this.geometryInHash(l)){var u=new r.Geometry(2,2,function(){this.vertices.push(new r.Vector(t,e,0)),this.vertices.push(new r.Vector(i,n,0)),this.vertices.push(new r.Vector(o,s,0)),this.vertices.push(new r.Vector(a,h,0)),this.uvs.push(0,0,1,0,1,1,0,1),this.strokeIndices=[[0,1],[1,2],[2,3],[3,0]]});u.computeNormals()._makeTriangleEdges()._edgesToVertices(),u.faces=[[0,1,2],[2,3,0]],this.createBuffers(l,u)}return this.drawBuffers(l),this},r.RendererGL.prototype.bezier=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._bezierDetail||20;this.beginShape();for(var d=0;d<=p;d++){var f=Math.pow(1-d/p,3),m=d/p*3*Math.pow(1-d/p,2),y=3*Math.pow(d/p,2)*(1-d/p),v=Math.pow(d/p,3);this.vertex(t*f+r*m+s*y+l*v,e*f+n*m+a*y+u*v,i*f+o*m+h*y+c*v)}return this.endShape(),this},r.RendererGL.prototype.curve=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._curveDetail;this.beginShape();for(var d=0;d<=p;d++){var f=.5*Math.pow(d/p,3),m=.5*Math.pow(d/p,2),y=d/p*.5,v=f*(3*r-t-3*s+l)+m*(2*t-5*r+4*s-l)+y*(-t+s)+2*r*.5,g=f*(3*n-e-3*a+u)+m*(2*e-5*n+4*a-u)+y*(-e+a)+2*n*.5,_=f*(3*o-i-3*h+c)+m*(2*i-5*o+4*h-c)+y*(-i+h)+2*o*.5;this.vertex(v,g,_)}return this.endShape(),this},r.RendererGL.prototype.line=function(){return 6===arguments.length?(this.beginShape(),this.vertex(arguments[0],arguments[1],arguments[2]),this.vertex(arguments[3],arguments[4],arguments[5]),this.endShape()):4===arguments.length&&(this.beginShape(),this.vertex(arguments[0],arguments[1],0),this.vertex(arguments[2],arguments[3],0),this.endShape()),this},r.RendererGL.prototype.bezierVertex=function(){if(0===this.immediateMode._bezierVertex.length)throw Error("vertex() must be used once before calling bezierVertex()");var t,e,i,r,n,o=[],s=[],a=[],h=arguments.length;if(t=0,0===this._lookUpTableBezier.length||this._lutBezierDetail!==this._pInst._curveDetail){this._lookUpTableBezier=[],this._lutBezierDetail=this._pInst._curveDetail;for(var l=1/this._lutBezierDetail,u=0,c=1,p=0;u<1;){if(t=parseFloat(u.toFixed(6)),this._lookUpTableBezier[p]=this._bezierCoefficients(t),c.toFixed(6)===l.toFixed(6)){t=parseFloat(c.toFixed(6))+parseFloat(u.toFixed(6)),++p,this._lookUpTableBezier[p]=this._bezierCoefficients(t);break}u+=l,c-=l,++p}}var d=this._lookUpTableBezier.length;if(6===h){for(this.isBezier=!0,o=[this.immediateMode._bezierVertex[0],arguments[0],arguments[2],arguments[4]],s=[this.immediateMode._bezierVertex[1],arguments[1],arguments[3],arguments[5]],n=0;n0&&this.mouseY0){var i=this._renderer._curCamera;void 0===t&&(t=1),void 0===e&&(e=t),!0!==this.contextMenuDisabled&&(this.canvas.oncontextmenu=function(){return!1},this._setProperty("contextMenuDisabled",!0)),!0!==this.wheelDefaultDisabled&&(this.canvas.onwheel=function(){return!1},this._setProperty("wheelDefaultDisabled",!0));var n=this.height0?this._renderer._curCamera._orbit(0,0,.5*n):this._renderer._curCamera._orbit(0,0,-.5*n)),this.mouseIsPressed)if(this.mouseButton===this.LEFT){var o=-t*(this.mouseX-this.pmouseX)/n,s=e*(this.mouseY-this.pmouseY)/n;this._renderer._curCamera._orbit(o,s,0)}else if(this.mouseButton===this.RIGHT){var a=i._getLocalAxes(),h=Math.sqrt(a.x[0]*a.x[0]+a.x[2]*a.x[2]);0!==h&&(a.x[0]/=h,a.x[2]/=h);var l=Math.sqrt(a.y[0]*a.y[0]+a.y[2]*a.y[2]);0!==l&&(a.y[0]/=l,a.y[2]/=l);var u=-1*t*(this.mouseX-this.pmouseX),c=-1*e*(this.mouseY-this.pmouseY);i.setPosition(i.eyeX+u*a.x[0]+c*a.z[0],i.eyeY,i.eyeZ+u*a.x[2]+c*a.z[2])}return this}},r.prototype.debugMode=function(){this._assert3d("debugMode"),r._validateParameters("debugMode",arguments);for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1);arguments[0]===n.GRID?this.registerMethod("post",this._grid.call(this,arguments[1],arguments[2],arguments[3],arguments[4],arguments[5])):arguments[0]===n.AXES?this.registerMethod("post",this._axesIcon.call(this,arguments[1],arguments[2],arguments[3],arguments[4])):(this.registerMethod("post",this._grid.call(this,arguments[0],arguments[1],arguments[2],arguments[3],arguments[4])),this.registerMethod("post",this._axesIcon.call(this,arguments[5],arguments[6],arguments[7],arguments[8])))},r.prototype.noDebugMode=function(){this._assert3d("noDebugMode");for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1)},r.prototype._grid=function(t,e,i,r,n){void 0===t&&(t=this.width/2),void 0===e&&(e=Math.round(t/30)<4?4:Math.round(t/30)),void 0===i&&(i=0),void 0===r&&(r=0),void 0===n&&(n=0);var o=t/e,s=t/2;return function(){this.push(),this.stroke(255*this._renderer.curStrokeColor[0],255*this._renderer.curStrokeColor[1],255*this._renderer.curStrokeColor[2]),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]);for(var t=0;t<=e;t++)this.beginShape(this.LINES),this.vertex(-s+i,r,t*o-s+n),this.vertex(+s+i,r,t*o-s+n),this.endShape();for(var a=0;a<=e;a++)this.beginShape(this.LINES),this.vertex(a*o-s+i,r,-s+n),this.vertex(a*o-s+i,r,+s+n),this.endShape();this.pop()}},r.prototype._axesIcon=function(t,e,i,r){return void 0===t&&(t=this.width/20>40?this.width/20:40),void 0===e&&(e=-this.width/4),void 0===i&&(i=e),void 0===r&&(r=e),function(){this.push(),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]),this.strokeWeight(2),this.stroke(255,0,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e+t,i,r),this.endShape(),this.stroke(0,255,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i+t,r),this.endShape(),this.stroke(0,0,255),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i,r+t),this.endShape(),this.pop()}},e.exports=r},{"../core/constants":18,"../core/main":24}],66:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.ambientLight=function(t,e,i,n){this._assert3d("ambientLight"),r._validateParameters("ambientLight",arguments);var o=this.color.apply(this,arguments),s=this._renderer._useLightShader();return s.setUniform("uUseLighting",!0),s.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.ambientLightColors.push(o._array[0],o._array[1],o._array[2]),s.setUniform("uAmbientColor",this._renderer.ambientLightColors),s.setUniform("uAmbientLightCount",this._renderer.ambientLightColors.length/3),this},r.prototype.directionalLight=function(t,e,i,n,o,s){this._assert3d("directionalLight"),r._validateParameters("directionalLight",arguments);var a,h=this._renderer._useLightShader();a=t instanceof r.Color?t:this.color(t,e,i);var l,u,c,p=arguments[arguments.length-1];"number"==typeof p?(l=arguments[arguments.length-3],u=arguments[arguments.length-2],c=arguments[arguments.length-1]):(l=p.x,u=p.y,c=p.z),h.setUniform("uUseLighting",!0),h.setUniform("uMaterialColor",this._renderer.curFillColor);var d=Math.sqrt(l*l+u*u+c*c);return this._renderer.directionalLightDirections.push(l/d,u/d,c/d),h.setUniform("uLightingDirection",this._renderer.directionalLightDirections),this._renderer.directionalLightColors.push(a._array[0],a._array[1],a._array[2]),h.setUniform("uDirectionalColor",this._renderer.directionalLightColors),h.setUniform("uDirectionalLightCount",this._renderer.directionalLightColors.length/3),this},r.prototype.pointLight=function(t,e,i,n,o,s){var a;this._assert3d("pointLight"),r._validateParameters("pointLight",arguments),a=t instanceof r.Color?t:this.color(t,e,i);var h,l,u,c=arguments[arguments.length-1];"number"==typeof c?(h=arguments[arguments.length-3],l=arguments[arguments.length-2],u=arguments[arguments.length-1]):(h=c.x,l=c.y,u=c.z);var p=this._renderer._useLightShader();return p.setUniform("uUseLighting",!0),p.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.pointLightPositions.push(h,l,u),p.setUniform("uPointLightLocation",this._renderer.pointLightPositions),this._renderer.pointLightColors.push(a._array[0],a._array[1],a._array[2]),p.setUniform("uPointLightColor",this._renderer.pointLightColors),p.setUniform("uPointLightCount",this._renderer.pointLightColors.length/3),this},e.exports=r},{"../core/main":24}],67:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry"),r.prototype.loadModel=function(t){var e,i,n;r._validateParameters("loadModel",arguments),"boolean"==typeof arguments[1]?(e=arguments[1],i=arguments[2],n=arguments[3]):(e=!1,i=arguments[1],n=arguments[2]);var o=new r.Geometry;o.gid=t+"|"+e;var s=this;return this.loadStrings(t,function(t){(function(t,e){for(var i={v:[],vt:[],vn:[]},n={},o=0;o0)if("v"===s[0]||"vn"===s[0]){var a=new r.Vector(parseFloat(s[1]),parseFloat(s[2]),parseFloat(s[3]));i[s[0]].push(a)}else if("vt"===s[0]){var h=[parseFloat(s[1]),parseFloat(s[2])];i[s[0]].push(h)}else if("f"===s[0])for(var l=3;l0&&(this._renderer.geometryInHash(t.gid)||(t._makeTriangleEdges()._edgesToVertices(),this._renderer.createBuffers(t.gid,t)),this._renderer.drawBuffers(t.gid))},e.exports=r},{"../core/main":24,"./p5.Geometry":70}],68:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Texture"),r.prototype.loadShader=function(t,e){r._validateParameters("loadShader",arguments);var i=new r.Shader,n=this,o=!1,s=!1;return this.loadStrings(e,function(t){i._fragSrc=t.join("\n"),o=!0,s&&n._decrementPreload()}),this.loadStrings(t,function(t){i._vertSrc=t.join("\n"),s=!0,o&&n._decrementPreload()}),i},r.prototype.createShader=function(t,e){return this._assert3d("createShader"),r._validateParameters("createShader",arguments),new r.Shader(this._renderer,t,e)},r.prototype.shader=function(t){return this._assert3d("shader"),r._validateParameters("shader",arguments),void 0===t._renderer&&(t._renderer=this._renderer),t.isStrokeShader()?this._renderer.setStrokeShader(t):this._renderer.setFillShader(t),this},r.prototype.normalMaterial=function(){return this._assert3d("normalMaterial"),r._validateParameters("normalMaterial",arguments),this._renderer.drawMode=n.FILL,this._renderer.setFillShader(this._renderer._getNormalShader()),this._renderer.curFillColor=[1,1,1,1],this.noStroke(),this},r.prototype.texture=function(t){this._assert3d("texture"),r._validateParameters("texture",arguments),this._renderer.drawMode=n.TEXTURE;var e=this._renderer._useLightShader();return e.setUniform("uSpecular",!1),e.setUniform("isTexture",!0),e.setUniform("uSampler",t),this.noStroke(),this},r.prototype.ambientMaterial=function(t,e,i,n){this._assert3d("ambientMaterial"),r._validateParameters("ambientMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!1),s.setUniform("isTexture",!1),this},r.prototype.specularMaterial=function(t,e,i,n){this._assert3d("specularMaterial"),r._validateParameters("specularMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!0),s.setUniform("isTexture",!1),this},r.RendererGL.prototype._applyColorBlend=function(t){var e=this.GL,i=this.drawMode===n.TEXTURE;return i||t[t.length-1]<1?(e.depthMask(i),e.enable(e.BLEND),e.blendEquation(e.FUNC_ADD),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA)):(e.depthMask(!0),e.disable(e.BLEND)),t},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Texture":76}],69:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.camera=function(){return this._assert3d("camera"),r._validateParameters("camera",arguments),this._renderer._curCamera.camera.apply(this._renderer._curCamera,arguments),this},r.prototype.perspective=function(){return this._assert3d("perspective"),r._validateParameters("perspective",arguments),this._renderer._curCamera.perspective.apply(this._renderer._curCamera,arguments),this},r.prototype.ortho=function(){return this._assert3d("ortho"),r._validateParameters("ortho",arguments),this._renderer._curCamera.ortho.apply(this._renderer._curCamera,arguments),this},r.prototype.createCamera=function(){this._assert3d("createCamera");var t=new r.Camera(this._renderer);return t._computeCameraDefaultSettings(),t._setDefaultCamera(),this._renderer._curCamera=t,t},r.Camera=function(t){this._renderer=t,this.cameraType="default",this.cameraMatrix=new r.Matrix,this.projMatrix=new r.Matrix},r.Camera.prototype.perspective=function(t,e,i,n){void 0===t?(t=this.defaultCameraFOV,this.cameraFOV=t):this.cameraFOV=this._renderer._pInst._toRadians(t),void 0===e&&(e=this.defaultAspectRatio),void 0===i&&(i=this.defaultCameraNear),void 0===n&&(n=this.defaultCameraFar),i<=1e-4&&(i=.01,console.log("Avoid perspective near plane values close to or below 0. Setting value to 0.01.")),nMath.PI?h=Math.PI:h<=0&&(h=.001);var l=Math.sin(h)*s*Math.sin(a),u=Math.cos(h)*s,c=Math.sin(h)*s*Math.cos(a);this.camera(l+this.centerX,u+this.centerY,c+this.centerZ,this.centerX,this.centerY,this.centerZ,0,1,0)},r.Camera.prototype._isActive=function(){return this===this._renderer._curCamera},r.prototype.setCamera=function(t){this._renderer._curCamera=t,this._renderer.uPMatrix.set(t.projMatrix.mat4[0],t.projMatrix.mat4[1],t.projMatrix.mat4[2],t.projMatrix.mat4[3],t.projMatrix.mat4[4],t.projMatrix.mat4[5],t.projMatrix.mat4[6],t.projMatrix.mat4[7],t.projMatrix.mat4[8],t.projMatrix.mat4[9],t.projMatrix.mat4[10],t.projMatrix.mat4[11],t.projMatrix.mat4[12],t.projMatrix.mat4[13],t.projMatrix.mat4[14],t.projMatrix.mat4[15])},e.exports=r.Camera},{"../core/main":24}],70:[function(t,e,i){"use strict";var r=t("../core/main");r.Geometry=function(t,e,i){return this.vertices=[],this.lineVertices=[],this.lineNormals=[],this.vertexNormals=[],this.faces=[],this.uvs=[],this.edges=[],this.detailX=void 0!==t?t:1,this.detailY=void 0!==e?e:1,i instanceof Function&&i.call(this),this},r.Geometry.prototype.computeFaces=function(){this.faces.length=0;for(var t,e,i,r,n=this.detailX+1,o=0;o1&&(u=1),h.mult(Math.asin(u)/l))},r.Geometry.prototype.computeNormals=function(){var t,e=this.vertexNormals,i=this.vertices,n=this.faces;for(e.length=0,t=0;tthis.vertices.length-1-this.detailX;e--)t.add(this.vertexNormals[e]);for(t=r.Vector.div(t,this.detailX),e=this.vertices.length-1;e>this.vertices.length-1-this.detailX;e--)this.vertexNormals[e]=t;return this},r.Geometry.prototype._makeTriangleEdges=function(){if(this.edges.length=0,Array.isArray(this.strokeIndices))for(var t=0,e=this.strokeIndices.length;t0){for(var t=this.vertices[0].copy(),e=this.vertices[0].copy(),i=0;i1){if(this._useImmediateModeShader(),this._doStroke&&this.drawMode!==n.TEXTURE){for(var h=0;h1e3){var e=Object.keys(this.gHash)[0];delete this.gHash[e],n--}this.gHash[t]={}},r.RendererGL.prototype._freeBuffers=function(t){var e=this.gHash[t];if(e){delete this.gHash[t],n--;var i=this.GL;e.vertexBuffer&&i.deleteBuffer(e.vertexBuffer),e.normalBuffer&&i.deleteBuffer(e.normalBuffer),e.lineNormalBuffer&&i.deleteBuffer(e.lineNormalBuffer),e.uvBuffer&&i.deleteBuffer(e.uvBuffer),e.indexBuffer&&i.deleteBuffer(e.indexBuffer),e.lineVertexBuffer&&i.deleteBuffer(e.lineVertexBuffer)}},r.RendererGL.prototype.createBuffers=function(t,e){var i=this.GL;this._initBufferDefaults(t);var r=this.gHash[t];return r.numberOfItems=3*e.faces.length,r.lineVertexCount=e.lineVertices.length,this._useColorShader(),this.curStrokeShader.attributes.aPosition&&(r.lineVertexBuffer=i.createBuffer(),this._bindBuffer(r.lineVertexBuffer,i.ARRAY_BUFFER,this._flatten(e.lineVertices),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),this.curStrokeShader.attributes.aDirection&&(r.lineNormalBuffer=i.createBuffer(),this._bindBuffer(r.lineNormalBuffer,i.ARRAY_BUFFER,this._flatten(e.lineNormals),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aPosition&&(r.vertexBuffer=i.createBuffer(),this._bindBuffer(r.vertexBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertices),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),r.indexBuffer=i.createBuffer(),this._bindBuffer(r.indexBuffer,i.ELEMENT_ARRAY_BUFFER,this._flatten(e.faces),Uint16Array,i.STATIC_DRAW),this.curFillShader.attributes.aNormal&&(r.normalBuffer=i.createBuffer(),this._bindBuffer(r.normalBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertexNormals),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aTexCoord&&(r.uvBuffer=i.createBuffer(),this._bindBuffer(r.uvBuffer,i.ARRAY_BUFFER,this._flatten(e.uvs),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,i.FLOAT,!1,0,0)),r},r.RendererGL.prototype.drawBuffers=function(t){var e=this.GL;this._useColorShader();var i=this.gHash[t];return this._doStroke&&i.lineVertexCount>0&&(this.curStrokeShader.bindShader(),i.lineVertexBuffer&&(this._bindBuffer(i.lineVertexBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.lineNormalBuffer&&(this._bindBuffer(i.lineNormalBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curStrokeColor),this._drawArrays(e.TRIANGLES,t),this.curStrokeShader.unbindShader()),!1!==this._doFill&&(this.curFillShader.bindShader(),i.vertexBuffer&&(this._bindBuffer(i.vertexBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.indexBuffer&&this._bindBuffer(i.indexBuffer,e.ELEMENT_ARRAY_BUFFER),i.normalBuffer&&(this._bindBuffer(i.normalBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,e.FLOAT,!1,0,0)),i.uvBuffer&&(this._bindBuffer(i.uvBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curFillColor),this._drawElements(e.TRIANGLES,t),this.curFillShader.unbindShader()),this},r.RendererGL.prototype.drawBuffersScaled=function(t,e,i,r){var n=this.uMVMatrix.copy();try{this.uMVMatrix.scale(e,i,r),this.drawBuffers(t)}finally{this.uMVMatrix=n}},r.RendererGL.prototype._drawArrays=function(t,e){return this.GL.drawArrays(t,0,this.gHash[e].lineVertexCount),this._pInst._pixelsDirty=!0,this},r.RendererGL.prototype._drawElements=function(t,e){this.GL.drawElements(t,this.gHash[e].numberOfItems,this.GL.UNSIGNED_SHORT,0),this._pInst._pixelsDirty=!0},r.RendererGL.prototype._drawPoints=function(t,e){var i=this.GL;this._bindBuffer(e,i.ARRAY_BUFFER,this._vToNArray(t),Float32Array,i.STATIC_DRAW),this.curPointShader.enableAttrib(this.curPointShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0),i.drawArrays(i.Points,0,t.length)},e.exports=r.RendererGL},{"../core/main":24}],74:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("libtess");t("./p5.Shader"),t("./p5.Camera"),t("../core/p5.Renderer"),t("./p5.Matrix");var s={immediateVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uResolution;\nuniform float uPointSize;\n\nvarying vec4 vColor;\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n gl_PointSize = uPointSize;\n}\n",vertexColorVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n}\n",vertexColorFrag:"precision mediump float;\nvarying vec4 vColor;\nvoid main(void) {\n gl_FragColor = vColor;\n}",normalVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\n\nvarying vec3 vVertexNormal;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vVertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertTexCoord = aTexCoord;\n}\n",normalFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nvoid main(void) {\n gl_FragColor = vec4(vVertexNormal, 1.0);\n}",basicFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nuniform vec4 uMaterialColor;\nvoid main(void) {\n gl_FragColor = uMaterialColor;\n}",lightVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uViewMatrix;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nuniform vec3 uAmbientColor[8];\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nvarying vec3 vVertexNormal;\nvarying vec2 vVertTexCoord;\nvarying vec3 vLightWeighting;\n\nvoid main(void){\n\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\n vec3 vertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertexNormal = vertexNormal;\n vVertTexCoord = aTexCoord;\n\n vec4 mvPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n vec3 eyeDirection = normalize(-mvPosition.xyz);\n\n float shininess = 32.0;\n float specularFactor = 2.0;\n float diffuseFactor = 0.3;\n\n vec3 ambientLightFactor = vec3(0.0);\n\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n ambientLightFactor += uAmbientColor[i];\n }\n\n\n vec3 directionalLightFactor = vec3(0.0);\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n vec3 dir = uLightingDirection[j];\n float directionalLightWeighting = max(dot(vertexNormal, -dir), 0.0);\n directionalLightFactor += uDirectionalColor[j] * directionalLightWeighting;\n }\n\n\n vec3 pointLightFactor = vec3(0.0);\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n vec3 loc = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightDirection = normalize(loc - mvPosition.xyz);\n\n float directionalLightWeighting = max(dot(vertexNormal, lightDirection), 0.0);\n\n float specularLightWeighting = 0.0;\n if (uSpecular ){\n vec3 reflectionDirection = reflect(-lightDirection, vertexNormal);\n specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess);\n }\n\n pointLightFactor += uPointLightColor[k] * (specularFactor * specularLightWeighting\n + directionalLightWeighting * diffuseFactor);\n }\n\n vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightFactor;\n}\n",lightTextureFrag:"precision mediump float;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nvarying vec3 vLightWeighting;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n gl_FragColor = isTexture ? texture2D(uSampler, vVertTexCoord) : uMaterialColor;\n if (uUseLighting)\n gl_FragColor.rgb *= vLightWeighting;\n}",phongVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform vec3 uAmbientColor[8];\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvoid main(void){\n\n vec4 viewModelPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n\n // Pass varyings to fragment shader\n vViewPosition = viewModelPosition.xyz;\n gl_Position = uProjectionMatrix * viewModelPosition; \n\n vNormal = normalize(uNormalMatrix * normalize(aNormal));\n vTexCoord = aTexCoord;\n\n vAmbientColor = vec3(0.0);\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n vAmbientColor += uAmbientColor[i];\n }\n}\n",phongFrag:"precision mediump float;\n\n//uniform mat4 uModelViewMatrix;\nuniform mat4 uViewMatrix;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvec3 V;\nvec3 N;\n\nconst float shininess = 32.0;\nconst float specularFactor = 2.0;\nconst float diffuseFactor = 0.73;\n\nstruct LightResult {\n\tfloat specular;\n\tfloat diffuse;\n};\n\nfloat phongSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float shininess) {\n\n vec3 R = normalize(reflect(-lightDirection, surfaceNormal)); \n return pow(max(0.0, dot(R, viewDirection)), shininess);\n}\n\nfloat lambertDiffuse(\n vec3 lightDirection,\n vec3 surfaceNormal) {\n return max(0.0, dot(-lightDirection, surfaceNormal));\n}\n\nLightResult light(vec3 lightVector) {\n\n vec3 L = normalize(lightVector);\n\n //compute our diffuse & specular terms\n LightResult lr;\n if (uSpecular)\n lr.specular = phongSpecular(L, V, N, shininess);\n lr.diffuse = lambertDiffuse(L, N);\n return lr;\n}\n\nvoid main(void) {\n\n V = normalize(vViewPosition);\n N = vNormal;\n\n vec3 diffuse = vec3(0.0);\n float specular = 0.0;\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n\n LightResult result = light(uLightingDirection[j]);\n diffuse += result.diffuse * uDirectionalColor[j];\n specular += result.specular;\n }\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n\n vec3 lightPosition = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightVector = vViewPosition - lightPosition;\n\t\n //calculate attenuation\n float lightDistance = length(lightVector);\n float falloff = 500.0 / (lightDistance + 500.0);\n\n LightResult result = light(lightVector);\n diffuse += result.diffuse * falloff * uPointLightColor[k];\n specular += result.specular * falloff;\n }\n\n gl_FragColor = isTexture ? texture2D(uSampler, vTexCoord) : uMaterialColor;\n gl_FragColor.rgb = gl_FragColor.rgb * (diffuse * diffuseFactor + vAmbientColor) + specular * specularFactor;\n}",fontVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nuniform vec4 uGlyphRect;\nuniform float uGlyphOffset;\n\nvarying vec2 vTexCoord;\nvarying float w;\n\nvoid main() {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n\n // scale by the size of the glyph's rectangle\n positionVec4.xy *= uGlyphRect.zw - uGlyphRect.xy;\n\n // move to the corner of the glyph\n positionVec4.xy += uGlyphRect.xy;\n\n // move to the letter's line offset\n positionVec4.x += uGlyphOffset;\n \n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vTexCoord = aTexCoord;\n w = gl_Position.w;\n}\n",fontFrag:"#extension GL_OES_standard_derivatives : enable\nprecision mediump float;\n\n#if 0\n // simulate integer math using floats\n\t#define int float\n\t#define ivec2 vec2\n\t#define INT(x) float(x)\n\n\tint ifloor(float v) { return floor(v); }\n\tivec2 ifloor(vec2 v) { return floor(v); }\n\n#else\n // use native integer math\n\tprecision mediump int;\n\t#define INT(x) x\n\n\tint ifloor(float v) { return int(v); }\n\tint ifloor(int v) { return v; }\n\tivec2 ifloor(vec2 v) { return ivec2(v); }\n\n#endif\n\nuniform sampler2D uSamplerStrokes;\nuniform sampler2D uSamplerRowStrokes;\nuniform sampler2D uSamplerRows;\nuniform sampler2D uSamplerColStrokes;\nuniform sampler2D uSamplerCols;\n\nuniform ivec2 uStrokeImageSize;\nuniform ivec2 uCellsImageSize;\nuniform ivec2 uGridImageSize;\n\nuniform ivec2 uGridOffset;\nuniform ivec2 uGridSize;\nuniform vec4 uMaterialColor;\n\nvarying vec2 vTexCoord;\n\n// some helper functions\nint round(float v) { return ifloor(v + 0.5); }\nivec2 round(vec2 v) { return ifloor(v + 0.5); }\nfloat saturate(float v) { return clamp(v, 0.0, 1.0); }\nvec2 saturate(vec2 v) { return clamp(v, 0.0, 1.0); }\n\nint mul(float v1, int v2) {\n return ifloor(v1 * float(v2));\n}\n\nivec2 mul(vec2 v1, ivec2 v2) {\n return ifloor(v1 * vec2(v2) + 0.5);\n}\n\n// unpack a 16-bit integer from a float vec2\nint getInt16(vec2 v) {\n ivec2 iv = round(v * 255.0);\n return iv.x * INT(128) + iv.y;\n}\n\nvec2 pixelScale;\nvec2 coverage = vec2(0.0);\nvec2 weight = vec2(0.5);\nconst float minDistance = 1.0/8192.0;\nconst float hardness = 1.05; // amount of antialias\n\n// the maximum number of curves in a glyph\nconst int N = INT(250);\n\n// retrieves an indexed pixel from a sampler\nvec4 getTexel(sampler2D sampler, int pos, ivec2 size) {\n int width = size.x;\n int y = ifloor(pos / width);\n int x = pos - y * width; // pos % width\n\n return texture2D(sampler, (vec2(x, y) + 0.5) / vec2(size));\n}\n\nvoid calulateCrossings(vec2 p0, vec2 p1, vec2 p2, out vec2 C1, out vec2 C2) {\n\n // get the coefficients of the quadratic in t\n vec2 a = p0 - p1 * 2.0 + p2;\n vec2 b = p0 - p1;\n vec2 c = p0 - vTexCoord;\n\n // found out which values of 't' it crosses the axes\n vec2 surd = sqrt(max(vec2(0.0), b * b - a * c));\n vec2 t1 = ((b - surd) / a).yx;\n vec2 t2 = ((b + surd) / a).yx;\n\n // approximate straight lines to avoid rounding errors\n if (abs(a.y) < 0.001)\n t1.x = t2.x = c.y / (2.0 * b.y);\n\n if (abs(a.x) < 0.001)\n t1.y = t2.y = c.x / (2.0 * b.x);\n\n // plug into quadratic formula to find the corrdinates of the crossings\n C1 = ((a * t1 - b * 2.0) * t1 + c) * pixelScale;\n C2 = ((a * t2 - b * 2.0) * t2 + c) * pixelScale;\n}\n\nvoid coverageX(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n // determine on which side of the x-axis the points lie\n bool y0 = p0.y > vTexCoord.y;\n bool y1 = p1.y > vTexCoord.y;\n bool y2 = p2.y > vTexCoord.y;\n\n // could web be under the curve (after t1)?\n if (y1 ? !y2 : y0) {\n // add the coverage for t1\n coverage.x += saturate(C1.x + 0.5);\n // calculate the anti-aliasing for t1\n weight.x = min(weight.x, abs(C1.x));\n }\n\n // are we outside the curve (after t2)?\n if (y1 ? !y0 : y2) {\n // subtract the coverage for t2\n coverage.x -= saturate(C2.x + 0.5);\n // calculate the anti-aliasing for t2\n weight.x = min(weight.x, abs(C2.x));\n }\n}\n\n// this is essentially the same as coverageX, but with the axes swapped\nvoid coverageY(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n bool x0 = p0.x > vTexCoord.x;\n bool x1 = p1.x > vTexCoord.x;\n bool x2 = p2.x > vTexCoord.x;\n\n if (x1 ? !x2 : x0) {\n coverage.y -= saturate(C1.y + 0.5);\n weight.y = min(weight.y, abs(C1.y));\n }\n\n if (x1 ? !x0 : x2) {\n coverage.y += saturate(C2.y + 0.5);\n weight.y = min(weight.y, abs(C2.y));\n }\n}\n\nvoid main() {\n\n // calculate the pixel scale based on screen-coordinates\n pixelScale = hardness / fwidth(vTexCoord);\n\n // which grid cell is this pixel in?\n ivec2 gridCoord = ifloor(vTexCoord * vec2(uGridSize));\n\n // intersect curves in this row\n {\n // the index into the row info bitmap\n int rowIndex = gridCoord.y + uGridOffset.y;\n // fetch the info texel\n vec4 rowInfo = getTexel(uSamplerRows, rowIndex, uGridImageSize);\n // unpack the rowInfo\n int rowStrokeIndex = getInt16(rowInfo.xy);\n int rowStrokeCount = getInt16(rowInfo.zw);\n\n for (int iRowStroke = INT(0); iRowStroke < N; iRowStroke++) {\n if (iRowStroke >= rowStrokeCount)\n break;\n\n // each stroke is made up of 3 points: the start and control point\n // and the start of the next curve.\n // fetch the indices of this pair of strokes:\n vec4 strokeIndices = getTexel(uSamplerRowStrokes, rowStrokeIndex++, uCellsImageSize);\n\n // unpack the stroke index\n int strokePos = getInt16(strokeIndices.xy);\n\n // fetch the two strokes\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n\n // calculate the coverage\n coverageX(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n // intersect curves in this column\n {\n int colIndex = gridCoord.x + uGridOffset.x;\n vec4 colInfo = getTexel(uSamplerCols, colIndex, uGridImageSize);\n int colStrokeIndex = getInt16(colInfo.xy);\n int colStrokeCount = getInt16(colInfo.zw);\n \n for (int iColStroke = INT(0); iColStroke < N; iColStroke++) {\n if (iColStroke >= colStrokeCount)\n break;\n\n vec4 strokeIndices = getTexel(uSamplerColStrokes, colStrokeIndex++, uCellsImageSize);\n\n int strokePos = getInt16(strokeIndices.xy);\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n coverageY(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n weight = saturate(1.0 - weight * 2.0);\n float distance = max(weight.x + weight.y, minDistance); // manhattan approx.\n float antialias = abs(dot(coverage, weight) / distance);\n float cover = min(abs(coverage.x), abs(coverage.y));\n gl_FragColor = uMaterialColor;\n gl_FragColor.a *= saturate(max(antialias, cover));\n}",lineVert:"/*\n Part of the Processing project - http://processing.org\n Copyright (c) 2012-15 The Processing Foundation\n Copyright (c) 2004-12 Ben Fry and Casey Reas\n Copyright (c) 2001-04 Massachusetts Institute of Technology\n This library is free software; you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, version 2.1.\n This library is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General\n Public License along with this library; if not, write to the\n Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n Boston, MA 02111-1307 USA\n*/\n\n#define PROCESSING_LINE_SHADER\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uStrokeWeight;\n\nuniform vec4 uViewport;\n\n// using a scale <1 moves the lines towards the camera\n// in order to prevent popping effects due to half of\n// the line disappearing behind the geometry faces.\nvec3 scale = vec3(0.9995);\n\nattribute vec4 aPosition;\nattribute vec4 aDirection;\n \nvoid main() {\n vec4 posp = uModelViewMatrix * aPosition;\n vec4 posq = uModelViewMatrix * (aPosition + vec4(aDirection.xyz, 0));\n\n // Moving vertices slightly toward the camera\n // to avoid depth-fighting with the fill triangles.\n // Discussed here:\n // http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=252848 \n posp.xyz = posp.xyz * scale;\n posq.xyz = posq.xyz * scale;\n\n vec4 p = uProjectionMatrix * posp;\n vec4 q = uProjectionMatrix * posq;\n\n // formula to convert from clip space (range -1..1) to screen space (range 0..[width or height])\n // screen_p = (p.xy/p.w + <1,1>) * 0.5 * uViewport.zw\n\n // prevent division by W by transforming the tangent formula (div by 0 causes\n // the line to disappear, see https://github.com/processing/processing/issues/5183)\n // t = screen_q - screen_p\n //\n // tangent is normalized and we don't care which aDirection it points to (+-)\n // t = +- normalize( screen_q - screen_p )\n // t = +- normalize( (q.xy/q.w+<1,1>)*0.5*uViewport.zw - (p.xy/p.w+<1,1>)*0.5*uViewport.zw )\n //\n // extract common factor, <1,1> - <1,1> cancels out\n // t = +- normalize( (q.xy/q.w - p.xy/p.w) * 0.5 * uViewport.zw )\n //\n // convert to common divisor\n // t = +- normalize( ((q.xy*p.w - p.xy*q.w) / (p.w*q.w)) * 0.5 * uViewport.zw )\n //\n // remove the common scalar divisor/factor, not needed due to normalize and +-\n // (keep uViewport - can't remove because it has different components for x and y\n // and corrects for aspect ratio, see https://github.com/processing/processing/issues/5181)\n // t = +- normalize( (q.xy*p.w - p.xy*q.w) * uViewport.zw )\n\n vec2 tangent = normalize((q.xy*p.w - p.xy*q.w) * uViewport.zw);\n\n // flip tangent to normal (it's already normalized)\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n float thickness = aDirection.w * uStrokeWeight;\n vec2 offset = normal * thickness / 2.0;\n\n // Perspective ---\n // convert from world to clip by multiplying with projection scaling factor\n // to get the right thickness (see https://github.com/processing/processing/issues/5182)\n // invert Y, projections in Processing invert Y\n vec2 perspScale = (uProjectionMatrix * vec4(1, -1, 0, 0)).xy;\n\n // No Perspective ---\n // multiply by W (to cancel out division by W later in the pipeline) and\n // convert from screen to clip (derived from clip to screen above)\n vec2 noPerspScale = p.w / (0.5 * uViewport.zw);\n\n //gl_Position.xy = p.xy + offset.xy * mix(noPerspScale, perspScale, float(perspective > 0));\n gl_Position.xy = p.xy + offset.xy * perspScale;\n gl_Position.zw = p.zw;\n}\n",lineFrag:"precision mediump float;\nprecision mediump int;\n\nuniform vec4 uMaterialColor;\n\nvoid main() {\n gl_FragColor = uMaterialColor;\n}",pointVert:"attribute vec3 aPosition;\nuniform float uPointSize;\nvarying float vStrokeWeight;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvoid main() {\n\tvec4 positionVec4 = vec4(aPosition, 1.0);\n\tgl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\tgl_PointSize = uPointSize;\n\tvStrokeWeight = uPointSize;\n}",pointFrag:"precision mediump float;\nprecision mediump int;\nuniform vec4 uMaterialColor;\nvarying float vStrokeWeight;\n\nvoid main(){\n\tfloat mask = 0.0;\n\n\t// make a circular mask using the gl_PointCoord (goes from 0 - 1 on a point)\n // might be able to get a nicer edge on big strokeweights with smoothstep but slightly less performant\n\n\tmask = step(0.98, length(gl_PointCoord * 2.0 - 1.0));\n\n\t// if strokeWeight is 1 or less lets just draw a square\n\t// this prevents weird artifacting from carving circles when our points are really small\n\t// if strokeWeight is larger than 1, we just use it as is\n\n\tmask = mix(0.0, mask, clamp(floor(vStrokeWeight - 0.5),0.0,1.0));\n\n\t// throw away the borders of the mask\n // otherwise we get weird alpha blending issues\n\n\tif(mask > 0.98){\n discard;\n \t}\n\n \tgl_FragColor = vec4(uMaterialColor.rgb * (1.0 - mask), uMaterialColor.a) ;\n}"};r.RendererGL=function(t,e,i,n){return r.Renderer.call(this,t,e,i),this.attributes={},n=n||{},this.attributes.alpha=void 0===n.alpha||n.alpha,this.attributes.depth=void 0===n.depth||n.depth,this.attributes.stencil=void 0===n.stencil||n.stencil,this.attributes.antialias=void 0!==n.antialias&&n.antialias,this.attributes.premultipliedAlpha=void 0!==n.premultipliedAlpha&&n.premultipliedAlpha,this.attributes.preserveDrawingBuffer=void 0===n.preserveDrawingBuffer||n.preserveDrawingBuffer,this.attributes.perPixelLighting=void 0!==n.perPixelLighting&&n.perPixelLighting,this._initContext(),this.isP3D=!0,this.GL=this.drawingContext,this.ambientLightColors=[],this.directionalLightDirections=[],this.directionalLightColors=[],this.pointLightPositions=[],this.pointLightColors=[],this.uMVMatrix=new r.Matrix,this.uPMatrix=new r.Matrix,this.uNMatrix=new r.Matrix("mat3"),this._curCamera=new r.Camera(this),this._curCamera._computeCameraDefaultSettings(),this._curCamera._setDefaultCamera(),this.gHash={},this._defaultLightShader=void 0,this._defaultImmediateModeShader=void 0,this._defaultNormalShader=void 0,this._defaultColorShader=void 0,this._defaultPointShader=void 0,this.curFillShader=void 0,this.curStrokeShader=void 0,this.curPointShader=void 0,this._useColorShader(),this.setStrokeShader(this._getLineShader()),this._usePointShader(),this._pointVertexBuffer=this.GL.createBuffer(),this.isImmediateDrawing=!1,this.immediateMode={},this.fill(255,255,255,255),this.pointSize=5,this.strokeWeight(1),this.stroke(0,0,0),this.textures=[],this._curveTightness=6,this._lookUpTableBezier=[],this._lookUpTableQuadratic=[],this._lutBezierDetail=0,this._lutQuadraticDetail=0,this._tessy=this._initTessy(),this.fontInfos={},this},r.RendererGL.prototype=Object.create(r.Renderer.prototype),r.RendererGL.prototype._initContext=function(){try{if(this.drawingContext=this.canvas.getContext("webgl",this.attributes)||this.canvas.getContext("experimental-webgl",this.attributes),null===this.drawingContext)throw new Error("Error creating webgl context");console.log("p5.RendererGL: enabled webgl context");var t=this.drawingContext;t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),this._viewport=this.drawingContext.getParameter(this.drawingContext.VIEWPORT)}catch(t){throw t}},r.RendererGL.prototype._resetContext=function(t,e,i){var n=this.width,o=this.height,s=this.canvas.id,a=this.canvas;a&&a.parentNode.removeChild(a),(a=document.createElement("canvas")).id=s,this._pInst._userNode?this._pInst._userNode.appendChild(a):document.body.appendChild(a),this._pInst.canvas=a;var h=new r.RendererGL(this._pInst.canvas,this._pInst,!0,t);this._pInst._setProperty("_renderer",h),h.resize(n,o),h._applyDefaults(),this._pInst._elements.push(h),"function"==typeof i&&setTimeout(function(){i.apply(window._renderer,e)},0)},r.prototype.setAttributes=function(t,e){var i;this._assert3d("setAttributes"),void 0!==e?(i={})[t]=e:t instanceof Object&&(i=t),this.push(),this._renderer._resetContext(i),this.pop()},r.RendererGL.prototype._update=function(){this.uMVMatrix.set(this._curCamera.cameraMatrix.mat4[0],this._curCamera.cameraMatrix.mat4[1],this._curCamera.cameraMatrix.mat4[2],this._curCamera.cameraMatrix.mat4[3],this._curCamera.cameraMatrix.mat4[4],this._curCamera.cameraMatrix.mat4[5],this._curCamera.cameraMatrix.mat4[6],this._curCamera.cameraMatrix.mat4[7],this._curCamera.cameraMatrix.mat4[8],this._curCamera.cameraMatrix.mat4[9],this._curCamera.cameraMatrix.mat4[10],this._curCamera.cameraMatrix.mat4[11],this._curCamera.cameraMatrix.mat4[12],this._curCamera.cameraMatrix.mat4[13],this._curCamera.cameraMatrix.mat4[14],this._curCamera.cameraMatrix.mat4[15]),this.ambientLightColors.length=0,this.directionalLightDirections.length=0,this.directionalLightColors.length=0,this.pointLightPositions.length=0,this.pointLightColors.length=0},r.RendererGL.prototype.background=function(){var t=this._pInst.color.apply(this._pInst,arguments),e=t.levels[0]/255,i=t.levels[1]/255,r=t.levels[2]/255,n=t.levels[3]/255;this.GL.clearColor(e,i,r,n),this.GL.depthMask(!0),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.fill=function(t,e,i,o){var s=r.prototype.color.apply(this._pInst,arguments);this.curFillColor=s._array,this.isImmediateDrawing?this.setFillShader(this._getImmediateModeShader()):this.setFillShader(this._getColorShader()),this.drawMode=n.FILL,this.curFillShader.setUniform("uMaterialColor",this.curFillColor)},r.RendererGL.prototype.stroke=function(t,e,i,n){arguments[3]=255;var o=r.prototype.color.apply(this._pInst,arguments);this.curStrokeColor=o._array,this.curStrokeShader.setUniform("uMaterialColor",this.curStrokeColor),this.curPointShader.setUniform("uMaterialColor",o._array)},r.RendererGL.prototype.strokeWeight=function(t){this.curStrokeWeight!==t&&(this.pointSize=t,this.curStrokeWeight=t,this.curStrokeShader.setUniform("uStrokeWeight",t),this.curPointShader.setUniform("uPointSize",t))},r.RendererGL.prototype.get=function(t,e,i,n){return r.Renderer2D.prototype.get.apply(this,[t,e,i,n])},r.RendererGL.prototype.loadPixels=function(){if(!0===this.attributes.preserveDrawingBuffer){var t=this._pInst._pixelDensity,e=this.width,i=this.height;e*=t,i*=t,void 0===this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4)),this.GL.readPixels(0,0,e,i,this.GL.RGBA,this.GL.UNSIGNED_BYTE,this.pixels),this._pInst._setProperty("pixels",this.pixels)}else console.log("loadPixels only works in WebGL when preserveDrawingBuffer is true.")},r.RendererGL.prototype.geometryInHash=function(t){return void 0!==this.gHash[t]},r.RendererGL.prototype.resize=function(t,e){r.Renderer.prototype.resize.call(this,t,e),this.GL.viewport(0,0,this.GL.drawingBufferWidth,this.GL.drawingBufferHeight),this._viewport=this.GL.getParameter(this.GL.VIEWPORT),this._curCamera._resize(),void 0!==this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4))},r.RendererGL.prototype.clear=function(){var t=arguments[0]||0,e=arguments[1]||0,i=arguments[2]||0,r=arguments[3]||0;this.GL.clearColor(t,e,i,r),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.translate=function(t,e,i){return t instanceof r.Vector&&(i=t.z,e=t.y,t=t.x),this.uMVMatrix.translate([t,e,i]),this},r.RendererGL.prototype.scale=function(t,e,i){return this.uMVMatrix.scale(t,e,i),this},r.RendererGL.prototype.rotate=function(t,e){return void 0===e?this.rotateZ(t):(arguments[0]=this._pInst._fromRadians(t),r.Matrix.prototype.rotate.apply(this.uMVMatrix,arguments),this)},r.RendererGL.prototype.rotateX=function(t){return this.rotate(t,1,0,0),this},r.RendererGL.prototype.rotateY=function(t){return this.rotate(t,0,1,0),this},r.RendererGL.prototype.rotateZ=function(t){return this.rotate(t,0,0,1),this},r.RendererGL.prototype.push=function(){var t=r.Renderer.prototype.push.apply(this),e=t.properties;return e.uMVMatrix=this.uMVMatrix.copy(),e.uPMatrix=this.uPMatrix.copy(),e._curCamera=this._curCamera,this._curCamera=this._curCamera.copy(),t},r.RendererGL.prototype.resetMatrix=function(){return this.uMVMatrix=r.Matrix.identity(this._pInst),this},r.RendererGL.prototype.setFillShader=function(t){return this.curFillShader!==t&&(this.curFillShader=t,this.curFillShader.init()),this.curFillShader},r.RendererGL.prototype.setPointShader=function(t){return this.curPointShader!==t&&(this.curPointShader=t,this.curPointShader.init()),this.curPointShader},r.RendererGL.prototype.setStrokeShader=function(t){return this.curStrokeShader!==t&&(this.curStrokeShader=t,this.curStrokeShader.init()),this.curStrokeShader},r.RendererGL.prototype._useLightShader=function(){return this.curFillShader&&this.curFillShader.isLightShader()||this.setFillShader(this._getLightShader()),this.curFillShader},r.RendererGL.prototype._useColorShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultImmediateModeShader||this.setFillShader(this._getColorShader()),this.curFillShader},r.RendererGL.prototype._usePointShader=function(){return this.curPointShader||this.setPointShader(this._getPointShader()),this.curPointShader},r.RendererGL.prototype._useImmediateModeShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultColorShader||this.setFillShader(this._getImmediateModeShader()),this.curFillShader},r.RendererGL.prototype._getLightShader=function(){return this._defaultLightShader||(this.attributes.perPixelLighting?this._defaultLightShader=new r.Shader(this,s.phongVert,s.phongFrag):this._defaultLightShader=new r.Shader(this,s.lightVert,s.lightTextureFrag)),this._defaultLightShader},r.RendererGL.prototype._getImmediateModeShader=function(){return this._defaultImmediateModeShader||(this._defaultImmediateModeShader=new r.Shader(this,s.immediateVert,s.vertexColorFrag)),this._defaultImmediateModeShader},r.RendererGL.prototype._getNormalShader=function(){return this._defaultNormalShader||(this._defaultNormalShader=new r.Shader(this,s.normalVert,s.normalFrag)),this._defaultNormalShader},r.RendererGL.prototype._getColorShader=function(){return this._defaultColorShader||(this._defaultColorShader=new r.Shader(this,s.normalVert,s.basicFrag)),this._defaultColorShader},r.RendererGL.prototype._getPointShader=function(){return this._defaultPointShader||(this._defaultPointShader=new r.Shader(this,s.pointVert,s.pointFrag)),this._defaultPointShader},r.RendererGL.prototype._getLineShader=function(){return this._defaultLineShader||(this._defaultLineShader=new r.Shader(this,s.lineVert,s.lineFrag)),this._defaultLineShader},r.RendererGL.prototype._getFontShader=function(){return this._defaultFontShader||(this.GL.getExtension("OES_standard_derivatives"),this._defaultFontShader=new r.Shader(this,s.fontVert,s.fontFrag)),this._defaultFontShader},r.RendererGL.prototype._getEmptyTexture=function(){if(!this._emptyTexture){var t=new r.Image(1,1);t.set(0,0,255),this._emptyTexture=new r.Texture(this,t)}return this._emptyTexture},r.RendererGL.prototype.getTexture=function(t){for(var e=this.textures,i=0;i2e4){var e,i=Object.prototype.toString,r=[],n=t.slice();e=n.pop();do{"[object Array]"===i.call(e)?n.push.apply(n,e):r.push(e)}while(n.length&&void 0!==(e=n.pop()));return r.reverse(),r}return[].concat.apply([],t)},r.RendererGL.prototype._vToNArray=function(t){return this._flatten(t.map(function(t){return[t.x,t.y,t.z]}))},r.prototype._assert3d=function(t){if(!this._renderer.isP3D)throw new Error(t+"() is only supported in WEBGL mode. If you'd like to use 3D graphics and WebGL, see https://p5js.org/examples/form-3d-primitives.html for more information.")},r.RendererGL.prototype._initTessy=function(){var t=new o.GluTesselator;return t.gluTessCallback(o.gluEnum.GLU_TESS_VERTEX_DATA,function(t,e){e[e.length]=t[0],e[e.length]=t[1],e[e.length]=t[2]}),t.gluTessCallback(o.gluEnum.GLU_TESS_BEGIN,function(t){t!==o.primitiveType.GL_TRIANGLES&&console.log("expected TRIANGLES but got type: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_ERROR,function(t){console.log("error callback"),console.log("error number: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_COMBINE,function(t,e,i){return[t[0],t[1],t[2]]}),t.gluTessCallback(o.gluEnum.GLU_TESS_EDGE_FLAG,function(t){}),t},r.RendererGL.prototype._triangulate=function(t){this._tessy.gluTessNormal(0,0,1);var e=[];this._tessy.gluTessBeginPolygon(e);for(var i=0;i1&&(s=s.substring(0,s.indexOf("[0]"))),o.name=s,o.type=n.type,o.type===t.SAMPLER_2D&&(o.samplerIndex=i,i++,this.samplers.push(o)),this.uniforms[s]=o}this._loadedUniforms=!0}},r.Shader.prototype.compile=function(){},r.Shader.prototype.bindShader=function(){this.init(),this._bound||(this.useProgram(),this._bound=!0,this.bindTextures(),this._setMatrixUniforms(),this===this._renderer.curStrokeShader&&this._setViewportUniform())},r.Shader.prototype.unbindShader=function(){return this._bound&&(this.unbindTextures(),this._bound=!1),this},r.Shader.prototype.bindTextures=function(){for(var t=this._renderer.GL,e=0;e1?e.length&&n.uniform1iv(r,e):n.uniform1i(r,e);break;case n.FLOAT:i.size>1?e.length&&n.uniform1fv(r,e):n.uniform1f(r,e);break;case n.FLOAT_MAT3:n.uniformMatrix3fv(r,!1,e);break;case n.FLOAT_MAT4:n.uniformMatrix4fv(r,!1,e);break;case n.FLOAT_VEC2:i.size>1?e.length&&n.uniform2fv(r,e):n.uniform2f(r,e[0],e[1]);break;case n.FLOAT_VEC3:i.size>1?e.length&&n.uniform3fv(r,e):n.uniform3f(r,e[0],e[1],e[2]);break;case n.FLOAT_VEC4:i.size>1?e.length&&n.uniform4fv(r,e):n.uniform4f(r,e[0],e[1],e[2],e[3]);break;case n.INT_VEC2:i.size>1?e.length&&n.uniform2iv(r,e):n.uniform2i(r,e[0],e[1]);break;case n.INT_VEC3:i.size>1?e.length&&n.uniform3iv(r,e):n.uniform3i(r,e[0],e[1],e[2]);break;case n.INT_VEC4:i.size>1?e.length&&n.uniform4iv(r,e):n.uniform4i(r,e[0],e[1],e[2],e[3]);break;case n.SAMPLER_2D:n.activeTexture(n.TEXTURE0+i.samplerIndex),i.texture=this._renderer.getTexture(e),n.uniform1i(i.location,i.samplerIndex)}return this}},r.Shader.prototype.isLightShader=function(){return void 0!==this.uniforms.uUseLighting||void 0!==this.uniforms.uAmbientLightCount||void 0!==this.uniforms.uDirectionalLightCount||void 0!==this.uniforms.uPointLightCount||void 0!==this.uniforms.uAmbientColor||void 0!==this.uniforms.uDirectionalColor||void 0!==this.uniforms.uPointLightLocation||void 0!==this.uniforms.uPointLightColor||void 0!==this.uniforms.uLightingDirection||void 0!==this.uniforms.uSpecular},r.Shader.prototype.isTextureShader=function(){return this.samplerIndex>0},r.Shader.prototype.isColorShader=function(){return void 0!==this.attributes.aVertexColor||void 0!==this.uniforms.uMaterialColor},r.Shader.prototype.isTexLightShader=function(){return this.isLightShader()&&this.isTextureShader()},r.Shader.prototype.isStrokeShader=function(){return void 0!==this.uniforms.uStrokeWeight},r.Shader.prototype.enableAttrib=function(t,e,i,r,n,o){var s=this._renderer.GL;return-1!==t&&(s.enableVertexAttribArray(t),s.vertexAttribPointer(t,e,i,r,n,o)),this},e.exports=r.Shader},{"../core/main":24}],76:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.Texture=function(t,e){this._renderer=t;var i=this._renderer.GL;this.src=e,this.glTex=void 0,this.glTarget=i.TEXTURE_2D,this.glFormat=i.RGBA,this.mipmaps=!1,this.glMinFilter=i.LINEAR,this.glMagFilter=i.LINEAR,this.glWrapS=i.CLAMP_TO_EDGE,this.glWrapT=i.CLAMP_TO_EDGE,this.isSrcMediaElement=void 0!==r.MediaElement&&e instanceof r.MediaElement,this._videoPrevUpdateTime=0,this.isSrcHTMLElement=void 0!==r.Element&&e instanceof r.Element&&!(e instanceof r.Graphics),this.isSrcP5Image=e instanceof r.Image,this.isSrcP5Graphics=e instanceof r.Graphics,this.isImageData="undefined"!=typeof ImageData&&e instanceof ImageData;var n=this._getTextureDataFromSource();return this.width=n.width,this.height=n.height,this.init(n),this},r.Texture.prototype._getTextureDataFromSource=function(){var t;return this.isSrcP5Image?t=this.src.canvas:this.isSrcMediaElement||this.isSrcP5Graphics||this.isSrcHTMLElement?t=this.src.elt:this.isImageData&&(t=this.src),t},r.Texture.prototype.init=function(t){var e=this._renderer.GL;if(this.glTex=e.createTexture(),this.bindTexture(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,this.glMagFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,this.glMinFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,this.glWrapS),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,this.glWrapT),0===this.width||0===this.height||this.isSrcMediaElement&&!this.src.loadedmetadata){var i=new Uint8Array([1,1,1,1]);e.texImage2D(this.glTarget,0,e.RGBA,1,1,0,this.glFormat,e.UNSIGNED_BYTE,i)}else e.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,e.UNSIGNED_BYTE,t)},r.Texture.prototype.update=function(){var t=this.src;if(0===t.width||0===t.height)return!1;var e=this._getTextureDataFromSource(),i=!1,r=this._renderer.GL;return e.width!==this.width||e.height!==this.height?(i=!0,this.width=e.width,this.height=e.height,this.isSrcP5Image?t.setModified(!1):(this.isSrcMediaElement||this.isSrcHTMLElement)&&t.setModified(!0)):this.isSrcP5Image?t.isModified()&&(i=!0,t.setModified(!1)):this.isSrcMediaElement?t.isModified()?(i=!0,t.setModified(!1)):t.loadedmetadata&&this._videoPrevUpdateTime!==t.time()&&(this._videoPrevUpdateTime=t.time(),i=!0):this.isImageData?t._dirty&&(t._dirty=!1,i=!0):i=!0,i&&(this.bindTexture(),r.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,r.UNSIGNED_BYTE,e)),i},r.Texture.prototype.bindTexture=function(){return this._renderer.GL.bindTexture(this.glTarget,this.glTex),this},r.Texture.prototype.unbindTexture=function(){this._renderer.GL.bindTexture(this.glTarget,null)},r.Texture.prototype.setInterpolation=function(t,e){var i=this._renderer.GL;t===n.NEAREST?this.glMinFilter=i.NEAREST:this.glMinFilter=i.LINEAR,e===n.NEAREST?this.glMagFilter=i.NEAREST:this.glMagFilter=i.LINEAR,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,this.glMinFilter),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,this.glMagFilter),this.unbindTexture()},r.Texture.prototype.setWrapMode=function(t,e){var i=this._renderer.GL,r=function(t){return 0==(t&t-1)},o=r(this.width),s=r(this.width);t===n.REPEAT?o&&s?this.glWrapS=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):t===n.MIRROR?o&&s?this.glWrapS=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):this.glWrapS=i.CLAMP_TO_EDGE,e===n.REPEAT?o&&s?this.glWrapT=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):e===n.MIRROR?o&&s?this.glWrapT=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):this.glWrapT=i.CLAMP_TO_EDGE,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,this.glWrapS),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,this.glWrapT),this.unbindTexture()},e.exports=r.Texture},{"../core/constants":18,"../core/main":24}],77:[function(t,e,i){"use strict";function r(t,e){this.width=t,this.height=e,this.infos=[],this.findImage=function(t){var e=this.width*this.height;if(t>e)throw new Error("font is too complex to render in 3D");for(var i,r,n=this.infos.length-1;n>=0;--n){var o=this.infos[n];if(o.index+t0;){var n=t[r];e>n&&(e=n),ii?i:t}(255*t,0,255)}function r(t,e,i,r,n,s,a,h){for(var u=new function t(e,i,r,n){this.p0=e,this.c0=i,this.c1=r,this.p1=n,this.toQuadratic=function(){return{x:this.p0.x,y:this.p0.y,x1:this.p1.x,y1:this.p1.y,cx:(3*(this.c0.x+this.c1.x)-(this.p0.x+this.p1.x))/4,cy:(3*(this.c0.y+this.c1.y)-(this.p0.y+this.p1.y))/4}},this.quadError=function(){return o.Vector.sub(o.Vector.sub(this.p1,this.p0),o.Vector.mult(o.Vector.sub(this.c1,this.c0),3)).mag()/2},this.split=function(e){var i=o.Vector.lerp(this.p0,this.c0,e),r=o.Vector.lerp(this.c0,this.c1,e),n=o.Vector.lerp(i,r,e);this.c1=o.Vector.lerp(this.c1,this.p1,e),this.c0=o.Vector.lerp(r,this.c1,e);var s=o.Vector.lerp(n,this.c0,e),a=new t(this.p0,i,n,s);return this.p0=s,a},this.splitInflections=function(){var t=o.Vector.sub(this.c0,this.p0),e=o.Vector.sub(o.Vector.sub(this.c1,this.c0),t),i=o.Vector.sub(o.Vector.sub(o.Vector.sub(this.p1,this.c1),t),o.Vector.mult(e,2)),r=[],n=e.x*i.y-e.y*i.x;if(0!==n){var s=t.x*i.y-t.y*i.x,a=t.x*e.y-t.y*e.x,h=s*s-4*n*a;if(h>=0){n<0&&(n=-n,s=-s,a=-a);var l=Math.sqrt(h),u=(-s-l)/(2*n),c=(-s+l)/(2*n);u>0&&u<1&&(r.push(this.split(u)),c=1-(1-c)/(1-u)),c>0&&c<1&&r.push(this.split(c))}}return r.push(this),r}}(new o.Vector(t,e),new o.Vector(i,r),new o.Vector(n,s),new o.Vector(a,h)).splitInflections(),c=[],p=30/l,d=0;d=.125);){var v=Math.pow(f,1/3),g=m.split(v),_=m.split(1-v/(1-v));c.push(g),y.push(m),m=_}f<1&&c.push(m.split(.5)),c.push(m),Array.prototype.push.apply(c,y.reverse())}return c}function s(t,i,r,n){e([t,r],[i,n],{x:t,y:i,cx:(t+r)/2,cy:(i+n)/2})}function u(t,e,i,r){return Math.abs(i-t)<1e-5&&Math.abs(r-e)<1e-5}function c(t,e,i){for(var r=t.length,o=e.findImage(r),s=o.index,a=0,h=0;h>7,127&d,p>>7,127&p);for(var f=0;f>7,127&m,0,0)}}return{cellImageInfo:l,dimOffset:s,dimImageInfo:o}}var p=this.glyphInfos[t.index];if(p)return p;var d=t.getBoundingBox(),f=d.x1,m=d.y1,y=d.x2-f,v=d.y2-m,g=t.path.commands;if(0===y||0===v||!g.length)return this.glyphInfos[t.index]={};var _,b=[],S=[],x=[];for(_=a-1;_>=0;--_)x.push([]);for(_=h-1;_>=0;--_)S.push([]);for(var w,T,M,P,A=0;A=n)&&this._doFill){if(!this._isOpenType())return console.log("WEBGL: only opentype fonts are supported"),t;t.push();var l=this.curFillShader,c=this._doStroke,p=this.drawMode;this.curFillShader=null,this._doStroke=!1,this.drawMode=s.TEXTURE;var d=this._textFont.font,f=this._textFont._fontInfo;f||(f=this._textFont._fontInfo=new u(d));var m=this._textFont._handleAlignment(this,e,i,r),y=this._textSize,v=y/d.unitsPerEm;this.translate(m.x,m.y,0),this.scale(v,v,1);var g=this.GL,_=!this._defaultFontShader,b=this.setFillShader(this._getFontShader());_&&(b.setUniform("uGridImageSize",[64,64]),b.setUniform("uCellsImageSize",[64,64]),b.setUniform("uStrokeImageSize",[64,64]),b.setUniform("uGridSize",[a,h])),this._applyColorBlend(this.curFillColor);var S=this.gHash.glyph;if(!S){var x=this._textGeom=new o.Geometry(1,1,function(){for(var t=0;t<=1;t++)for(var e=0;e<=1;e++)this.vertices.push(new o.Vector(e,t,0)),this.uvs.push(e,t)});x.computeFaces().computeNormals(),S=this.createBuffers("glyph",x)}this._bindBuffer(S.vertexBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aPosition.location,3,g.FLOAT,!1,0,0),this._bindBuffer(S.indexBuffer,g.ELEMENT_ARRAY_BUFFER),this._bindBuffer(S.uvBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aTexCoord.location,2,g.FLOAT,!1,0,0),b.setUniform("uMaterialColor",this.curFillColor);try{for(var w=0,T=null,M=!1,P=d.stringToGlyphs(e),A=0;A1)return o();var s=Math.sqrt(-2*Math.log(i)/i);return n=e*s,r=!0,t*s},s=function(t,e){return t+o()*e},a=function(t){if(void 0===t||isNaN(t))return[];if("undefined"==typeof ArrayBuffer){for(var e=new Array(t),i=0;i1e-7&&(_-=g*Math.log(g))}_>s?(c=d,p===1/0?d*=2:d=(d+p)/2):(p=d,c===-1/0?d/=2:d=(d+c)/2),m++,Math.abs(_-s)=50&&(f=!0)}for(v=0;v0?1:t<0?-1:0}var p=function(t){t=t||{};this.perplexity=i(t,"perplexity",30),this.dim=i(t,"dim",2),this.epsilon=i(t,"epsilon",10),this.iter=0};p.prototype={initDataRaw:function(t){var i=t.length,r=t[0].length;e(i>0," X is empty? You must have some data!"),e(r>0," X[0] is empty? Where is the data?");var n=function(t){for(var e=t.length,i=a(e*e),r=0;r0," X is empty? You must have some data!");for(var r=a(i*i),n=0;n{class e{constructor(){this.pos=t.createVector(0,0,0),this.label="",this.color=t.color(255),this.size=1,this.trig=0,this.canTrig=!0}drawPoint(){if(t.noStroke(),t.fill(this.color),t.ambientMaterial(this.r,this.r,this.r),t.push(),t.translate(this.pos.x,this.pos.y,this.pos.z),t.box(this.size),t.fill(255,0,0,this.trig),t.box(1.5*this.size),255==this.trig&&this.canTrig){let e=t.floor(t.random(10));d[e].envelope.attack=this.r/1e3,d[e].triggerAttackRelease(s.a.Midi(10*(14.75-this.size+2)).toFrequency(),this.size/500),this.canTrig=!1}this.trig-=100,t.pop()}setPos(t){return this.pos=t,this}setCol(e,i,r,n){return this.color=t.color(e,i,r,n),this.r=e,this.g=i,this.b=r,this}setSize(t){return this.size=t,this}}let i,r,n=0,o=[],a=[],l=-250,u=-250,c=0,p=0,d=[];var f=new s.a.Panner(-1).toMaster(),m=(new s.a.Freeverb).connect(f);m.dampening.value=3500,m.roomSize.value=.79;for(let t=0;t<10;t++)d.push(new s.a.FMSynth({harmonicity:10,modulationIndex:80,detune:0,oscillator:{type:"sine"},envelope:{attack:.001,decay:.003,sustain:.06,release:.3},modulation:{type:"square"},modulationEnvelope:{attack:.01,decay:.02,sustain:.03,release:.033},portamento:.01}).connect(m));t.setup=(()=>{t.createCanvas(800,800,t.WEBGL);t.smooth();let n={epsilon:30,perplexity:30,dim:3};i=new h.a.tSNE(n);for(let i=0;i<500;i++){let i=t.random(255),r=t.random(255),n=t.random(255);a.push([i,r,n]);let s=new e;s.setCol(i,r,n,255).setSize(r/20+2),o.push(s)}i.initDataRaw(a),r=i.getSolution()});let y=0;t.draw=(()=>{t.camera(100*t.sin(t.frameCount/300),100*t.cos(t.frameCount/300),800,0,0,0,0,1,0),t.background(0),t.frameRate(60);let e=t.constrain(t.mouseX+80*t.sin(-t.frameCount/20),0,t.width);c+=.9*(e-c);let s=t.constrain(t.mouseY+80*t.cos(-t.frameCount/20),0,t.height);p+=.9*(s-p),l=t.map(c,0,t.width,-250,250),u=t.map(p,0,t.height,-250,250),f.pan.value=l/250,t.pointLight(150,150,150,500,0,200),t.ambientLight(255),y=250*t.sin(t.frameCount/100),t.push(),t.translate(l,0,0),t.fill(255,120),t.noStroke(),t.box(5,500,0),t.pop(),t.push(),t.translate(0,u,0),t.fill(255,120),t.noStroke(),t.box(500,5,0),t.pop(),t.push(),t.translate(l,u,0),t.fill(255,0,0,40),t.noStroke(),t.box(5,5,500),t.pop(),++n<600&&i.step();for(let e=0;e{"m"==t.key&&t.save(Date.now()+".jpg")})};e.default=l,new n.a(l)},function(t,e){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RvbmUvYnVpbGQvVG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcDUvbGliL3A1Lm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdHNuZS90c25lLmpzIiwid2VicGFjazovLy8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIl0sIm5hbWVzIjpbImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJleHBvcnRzIiwibW9kdWxlIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18iLCJ1bmRlZmluZWQiLCJUb25lIiwiTW9kdWxlIiwiZnVuYyIsIk1haW4iLCJ0aGlzIiwiRXJyb3IiLCJ0b1N0cmluZyIsImNsYXNzTmFtZSIsImlzTGV0dGVyIiwibWF0Y2giLCJzYW1lQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsImlzRnVuY3Rpb24iLCJkaXNwb3NlIiwic2V0IiwicGFyYW1zIiwicmFtcFRpbWUiLCJpc09iamVjdCIsImlzU3RyaW5nIiwidG1wT2JqIiwicGFyYW1Mb29wIiwiYXR0ciIsInBhcmVudCIsImluZGV4T2YiLCJhdHRyU3BsaXQiLCJzcGxpdCIsImxlbmd0aCIsInNwbGljZSIsImlubmVyUGFyYW0iLCJqb2luIiwicGFyYW0iLCJpc1VuZGVmIiwiU2lnbmFsIiwiUGFyYW0iLCJyYW1wVG8iLCJBdWRpb1BhcmFtIiwiVGltZUJhc2UiLCJfY29sbGVjdERlZmF1bHRzIiwicmV0Iiwic3ViUmV0IiwiaiIsInN1YkF0dHIiLCJpc0RlZmluZWQiLCJjb25zdHIiLCJkZWZhdWx0cyIsImtleXMiLCJfc3VwZXIiLCJzdXBlckRlZnMiLCJwdXNoIiwidmFsdWVzIiwib3B0aW9ucyIsImRlZmF1bHRBcmciLCJnaXZlbiIsImZhbGxiYWNrIiwiZ2l2ZW5Qcm9wIiwiZmFsbGJhY2tQcm9wIiwiY29ubmVjdFNlcmllcyIsImN1cnJlbnRVbml0IiwiYXJndW1lbnRzIiwidG9Vbml0IiwiY29ubmVjdCIsInZhbCIsImlzTnVtYmVyIiwiYXJnIiwiaXNCb29sZWFuIiwiaXNBcnJheSIsIkFycmF5IiwiaXNOb3RlIiwidGVzdCIsIm5vT3AiLCJfcmVhZE9ubHkiLCJ3cml0YWJsZSIsIl93cml0YWJsZSIsIlN0YXRlIiwiU3RhcnRlZCIsIlN0b3BwZWQiLCJQYXVzZWQiLCJlcXVhbFBvd2VyU2NhbGUiLCJwZXJjZW50IiwicGlGYWN0b3IiLCJNYXRoIiwiUEkiLCJzaW4iLCJkYlRvR2FpbiIsImRiIiwicG93IiwiZ2FpblRvRGIiLCJnYWluIiwibG9nIiwiTE4xMCIsImludGVydmFsVG9GcmVxdWVuY3lSYXRpbyIsImludGVydmFsIiwibm93IiwiY29udGV4dCIsImV4dGVuZCIsImNoaWxkIiwiVGVtcENvbnN0cnVjdG9yIiwiYXVkaW9Db250ZXh0IiwiQ29udGV4dCIsImVtaXQiLCJzZXRDb250ZXh0IiwiY3R4Iiwic2FtcGxlUmF0ZSIsImhhc0F1ZGlvQ29udGV4dCIsIndpbmRvdyIsImhhc1Byb21pc2VzIiwiaGFzV29ya2VycyIsImdldENvbnRleHQiLCJyZXNvbHZlIiwiaW5pdGlhbGl6ZWQiLCJyZXNDYWxsYmFjayIsIm9mZiIsIm9uIiwidmVyc2lvbiIsIkVtaXR0ZXIiLCJfZXZlbnRzIiwiZXZlbnQiLCJjYWxsYmFjayIsImV2ZW50cyIsImV2ZW50TmFtZSIsIm9uY2UiLCJib3VuZENhbGxiYWNrIiwiYXBwbHkiLCJldiIsImV2ZW50TGlzdCIsImFyZ3MiLCJzbGljZSIsImxlbiIsIm1peGluIiwiZnVuY3Rpb25zIiwiZW1pdHRlckZ1bmMiLCJUaW1lbGluZSIsIl90aW1lbGluZSIsIm1lbW9yeSIsIkluZmluaXR5IiwiYWRkIiwidGltZSIsInZhbHVlT2YiLCJpbmRleCIsIl9zZWFyY2giLCJkaWZmIiwicmVtb3ZlIiwiY29tcGFyYXRvciIsInBlZWsiLCJzaGlmdCIsImdldEFmdGVyIiwiZ2V0QmVmb3JlIiwiY2FuY2VsIiwiYWZ0ZXIiLCJjYW5jZWxCZWZvcmUiLCJwcmV2aW91c0V2ZW50IiwiYmVnaW5uaW5nIiwiZW5kIiwibWlkUG9pbnQiLCJmbG9vciIsIm5leHRFdmVudCIsIl9pdGVyYXRlIiwibG93ZXJCb3VuZCIsInVwcGVyQm91bmQiLCJmb3JFYWNoIiwiZm9yRWFjaEJlZm9yZSIsImZvckVhY2hBZnRlciIsImZvckVhY2hCZXR3ZWVuIiwic3RhcnRUaW1lIiwiZW5kVGltZSIsImZvckVhY2hGcm9tIiwiZm9yRWFjaEF0VGltZSIsInN1cHBvcnRlZCIsIk9mZmxpbmVBdWRpb0NvbnRleHQiLCJ3ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0Iiwic3RhcnRSZW5kZXJpbmciLCJQcm9taXNlIiwiX25hdGl2ZV9zdGFydFJlbmRlcmluZyIsImRvbmUiLCJvbmNvbXBsZXRlIiwiZSIsInJlbmRlcmVkQnVmZmVyIiwiQXVkaW9Db250ZXh0Iiwid2Via2l0QXVkaW9Db250ZXh0IiwiY2xvc2UiLCJzdXNwZW5kIiwicmVzdW1lIiwiY3JlYXRlR2FpbiIsImNyZWF0ZUdhaW5Ob2RlIiwiY3JlYXRlRGVsYXkiLCJjcmVhdGVEZWxheU5vZGUiLCJkZWNvZGVBdWRpb0RhdGFQcm9taXNlIiwib2ZmbGluZUNvbnRleHQiLCJhdWRpb0RhdGEiLCJVaW50MzJBcnJheSIsImJ1ZmZlciIsImRlY29kZUF1ZGlvRGF0YSIsIl9uYXRpdmVfZGVjb2RlQXVkaW9EYXRhIiwic3VjY2VzcyIsImVycm9yIiwicHJvcCIsIl9jb250ZXh0IiwiX2RlZmluZVByb3BlcnR5IiwiX2xhdGVuY3lIaW50IiwibGF0ZW5jeUhpbnQiLCJfY29uc3RhbnRzIiwibG9va0FoZWFkIiwiX2NvbXB1dGVkVXBkYXRlSW50ZXJ2YWwiLCJfdGlja2VyIiwiVGlja2VyIiwiY2xvY2tTb3VyY2UiLCJ1cGRhdGVJbnRlcnZhbCIsIl90aW1lb3V0cyIsIl90aW1lb3V0SWRzIiwiX3RpbWVvdXRMb29wIiwiY3VycmVudFRpbWUiLCJyZWFkeSIsInN0YXRlIiwidGhlbiIsImdldENvbnN0YW50IiwiY3JlYXRlQnVmZmVyIiwiYXJyIiwiZ2V0Q2hhbm5lbERhdGEiLCJjb25zdGFudCIsImNyZWF0ZUJ1ZmZlclNvdXJjZSIsImNoYW5uZWxDb3VudCIsImNoYW5uZWxDb3VudE1vZGUiLCJsb29wIiwic3RhcnQiLCJzZXRUaW1lb3V0IiwiZm4iLCJ0aW1lb3V0IiwiaWQiLCJjbGVhclRpbWVvdXQiLCJ0eXBlIiwiaGludCIsImNvbiIsImRpc2Nvbm5lY3QiLCJfdHlwZSIsIl91cGRhdGVJbnRlcnZhbCIsIl9jYWxsYmFjayIsIl9jcmVhdGVDbG9jayIsIlR5cGUiLCJXb3JrZXIiLCJUaW1lb3V0IiwiT2ZmbGluZSIsIl9jcmVhdGVXb3JrZXIiLCJVUkwiLCJ3ZWJraXRVUkwiLCJibG9iIiwiQmxvYiIsInRvRml4ZWQiLCJibG9iVXJsIiwiY3JlYXRlT2JqZWN0VVJMIiwid29ya2VyIiwib25tZXNzYWdlIiwiX3dvcmtlciIsIl9jcmVhdGVUaW1lb3V0IiwiX3RpbWVvdXQiLCJtYXgiLCJwb3N0TWVzc2FnZSIsIl9kaXNwb3NlQ2xvY2siLCJ0ZXJtaW5hdGUiLCJuYXRpdmVDb25uZWN0IiwiQXVkaW9Ob2RlIiwibmF0aXZlRGlzY29ubmVjdCIsInRvbmVDb25uZWN0IiwiQiIsIm91dE51bSIsImluTnVtIiwiaW5wdXQiLCJUT05FX1NJTEVOQ0VfVkVSU0lPTl9MT0dHSU5HIiwiY29uc29sZSIsIndhcm4iLCJjcmVhdGVJbnNPdXRzIiwiaW5wdXRzIiwib3V0cHV0cyIsIm91dHB1dCIsImNoYW5uZWxJbnRlcnByZXRhdGlvbiIsIl9vbkNvbm5lY3QiLCJ1bml0Iiwib3V0cHV0TnVtIiwiaW5wdXROdW0iLCJkZXN0aW5hdGlvbiIsImNoYWluIiwiZmFuIiwiU2lnbmFsQmFzZSIsIm5vZGUiLCJvdXRwdXROdW1iZXIiLCJpbnB1dE51bWJlciIsIl9wYXJhbSIsImNhbmNlbFNjaGVkdWxlZFZhbHVlcyIsIm92ZXJyaWRkZW4iLCJ1YSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJXYXZlU2hhcGVyTm9kZSIsIl9pbnRlcm5hbE5vZGUiLCJfbmF0aXZlX2NyZWF0ZVdhdmVTaGFwZXIiLCJfY3VydmUiLCJjdXJ2ZSIsImFycmF5IiwiRmxvYXQzMkFycmF5IiwiY3JlYXRlV2F2ZVNoYXBlciIsIldhdmVTaGFwZXIiLCJtYXBwaW5nIiwiYnVmZmVyTGVuIiwiX3NoYXBlciIsImlzRmluaXRlIiwic2V0TWFwIiwibm9ybWFsaXplZCIsIm92ZXJzYW1wbGUiLCJvdmVyc2FtcGxpbmciLCJSYW5nZUVycm9yIiwidW5pdHMiLCJfdmFsIiwiX3VuaXRzIiwicGFyc2VGbG9hdCIsImNoYXJBdCIsIl9kZWZhdWx0VW5pdHMiLCJ0b1NlY29uZHMiLCJ0b1RpY2tzIiwidG9GcmVxdWVuY3kiLCJ0b01pZGkiLCJfZXhwcmVzc2lvbnMiLCJyZWdleHAiLCJtZXRob2QiLCJkb3QiLCJwYXJzZUludCIsInNjYWxhciIsIl9iZWF0c1RvVW5pdHMiLCJfZ2V0VGltZVNpZ25hdHVyZSIsIl90aWNrc1RvVW5pdHMiLCJoeiIsIl9mcmVxdWVuY3lUb1VuaXRzIiwidHIiLCJxIiwidG90YWwiLCJfc2Vjb25kc1RvVW5pdHMiLCJzYW1wbGVzIiwiZGVmYXVsdCIsIl9nZXRCcG0iLCJUcmFuc3BvcnQiLCJicG0iLCJ0aW1lU2lnbmF0dXJlIiwiX2dldFBQUSIsIlBQUSIsIl9ub3ciLCJmcmVxIiwiYmVhdHMiLCJzZWNvbmRzIiwidGlja3MiLCJfbm9BcmciLCJ0cmltIiwiZXhwciIsIm1hdGNoaW5nIiwidG9TYW1wbGVzIiwidG9NaWxsaXNlY29uZHMiLCJGcmVxdWVuY3kiLCJhc3NpZ24iLCJtaWRpIiwibXRvZiIsIm5vdGUiLCJwaXRjaCIsIm9jdGF2ZSIsIm5vdGVOdW1iZXIiLCJub3RlVG9TY2FsZUluZGV4IiwidHJhbnNwb3NlIiwiaGFybW9uaXplIiwiaW50ZXJ2YWxzIiwibWFwIiwiZnRvbSIsInRvTm90ZSIsImxvZzIiLCJBNCIsInJvdW5kIiwic2NhbGVJbmRleFRvTm90ZSIsInF1YXJ0ZXJUaW1lIiwicXVhcnRlcnMiLCJjYmIiLCJjYiIsImMjIiwiY3giLCJkYmIiLCJkIyIsImR4IiwiZWJiIiwiZWIiLCJlIyIsImV4IiwiZmJiIiwiZmIiLCJmIiwiZiMiLCJmeCIsImdiYiIsImdiIiwiZyIsImcjIiwiZ3giLCJhYmIiLCJhYiIsImEiLCJhIyIsImF4IiwiYmJiIiwiYmIiLCJiIiwiYiMiLCJieCIsImZyZXF1ZW5jeSIsIlRpbWUiLCJxdWFudGl6ZSIsImNhcHR1cmUiLCJxdWFudFRvIiwibmV4dFN1YmRpdmlzaW9uIiwic3ViZGl2Iiwic3ViZGl2aXNpb24iLCJ0b05vdGF0aW9uIiwidGVzdE5vdGF0aW9ucyIsInBvd2VyIiwiY2xvc2VzdCIsImNsb3Nlc3RTZWNvbmRzIiwibm90YXRpb24iLCJub3RhdGlvblNlY29uZHMiLCJhYnMiLCJ0b0JhcnNCZWF0c1NpeHRlZW50aHMiLCJtZWFzdXJlcyIsInNpeHRlZW50aHMiLCJUcmFuc3BvcnRUaW1lIiwiRGVmYXVsdCIsIlRpY2tzIiwiTm9ybWFsUmFuZ2UiLCJBdWRpb1JhbmdlIiwiRGVjaWJlbHMiLCJJbnRlcnZhbCIsIkJQTSIsIlBvc2l0aXZlIiwiR2FpbiIsIkNlbnRzIiwiRGVncmVlcyIsIk1JREkiLCJCYXJzQmVhdHNTaXh0ZWVudGhzIiwiU2FtcGxlcyIsIkhlcnR6IiwiTm90ZSIsIk1pbGxpc2Vjb25kcyIsIlNlY29uZHMiLCJOb3RhdGlvbiIsImNvbnZlcnQiLCJfdG9Vbml0cyIsImdldFZhbHVlQXRUaW1lIiwiX2luaXRpYWxWYWx1ZSIsIl9mcm9tVW5pdHMiLCJzZXRWYWx1ZUF0VGltZSIsIm1pblZhbHVlIiwibWF4VmFsdWUiLCJtaW4iLCJfbWluT3V0cHV0IiwiQXV0b21hdGlvblR5cGUiLCJMaW5lYXIiLCJFeHBvbmVudGlhbCIsIlRhcmdldCIsIlNldFZhbHVlIiwiYmVmb3JlIiwiaW5pdGlhbFZhbHVlIiwiZGVmYXVsdFZhbHVlIiwicHJldmlvdXNWYWwiLCJwcmV2aW91cyIsIl9leHBvbmVudGlhbEFwcHJvYWNoIiwiX2xpbmVhckludGVycG9sYXRlIiwiX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUiLCJzZXRSYW1wUG9pbnQiLCJjdXJyZW50VmFsIiwiY2FuY2VsQW5kSG9sZEF0VGltZSIsImxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lIiwiZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSIsImV4cG9uZW50aWFsUmFtcFRvIiwibGluZWFyUmFtcFRvIiwidGFyZ2V0UmFtcFRvIiwiZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lIiwidGltZUNvbnN0YW50Iiwic2V0VGFyZ2V0QXRUaW1lIiwic2V0VmFsdWVDdXJ2ZUF0VGltZSIsImR1cmF0aW9uIiwic2NhbGluZyIsInNlZ1RpbWUiLCJ2YWx1ZUF0VGltZSIsInQwIiwidjAiLCJ2MSIsImV4cCIsInQxIiwiT2ZmbGluZUNvbnRleHQiLCJjaGFubmVscyIsIl9kdXJhdGlvbiIsIl9jdXJyZW50VGltZSIsInJlbmRlciIsImJsb2NrVGltZSIsImJ1ZmZlclNvdXJjZSIsIl9uYXRpdmVfc3RhcnQiLCJfZ2Fpbk5vZGUiLCJjcmVhdGVDb25zdGFudFNvdXJjZSIsIkNvbnN0YW50U291cmNlTm9kZSIsIl9idWZmZXJTb3VyY2UiLCJnYWluTm9kZSIsIl9vdXRwdXQiLCJvZmZzZXQiLCJzdG9wIiwiX3Byb3hpZXMiLCJfc291cmNlU3RhcnRlZCIsIl9jb25zdGFudFNvdXJjZSIsIl9pc1BhcmFtIiwiX2FwcGx5QXV0b21hdGlvbnMiLCJfY29ubmVjdFByb3hpZXMiLCJwcm94eSIsImZyb20iLCJwcmV2aW91c01ldGhvZCIsInNpZ25hbCIsIlBvdyIsIl9leHAiLCJfZXhwU2NhbGVyIiwiX2V4cEZ1bmMiLCJFbnZlbG9wZSIsImF0dGFjayIsImRlY2F5Iiwic3VzdGFpbiIsInJlbGVhc2UiLCJfYXR0YWNrQ3VydmUiLCJfcmVsZWFzZUN1cnZlIiwiX3NpZyIsImF0dGFja0N1cnZlIiwicmVsZWFzZUN1cnZlIiwiSW4iLCJjdXJ2ZURlZiIsIk91dCIsInRyaWdnZXJBdHRhY2siLCJ2ZWxvY2l0eSIsIm9yaWdpbmFsQXR0YWNrIiwiY3VycmVudFZhbHVlIiwicGVyY2VudENvbXBsZXRlIiwic2xpY2VJbmRleCIsInRyaWdnZXJSZWxlYXNlIiwidHJpZ2dlckF0dGFja1JlbGVhc2UiLCJrIiwiY29zaW5lQ3VydmUiLCJyaXBwbGVDdXJ2ZSIsImN1cnZlTGVuIiwic2luZVdhdmUiLCJzdGFpcnNDdXJ2ZSIsImNlaWwiLCJzaW5lQ3VydmUiLCJjb3MiLCJib3VuY2VDdXJ2ZSIsImludmVydEN1cnZlIiwib3V0IiwibGluZWFyIiwiZXhwb25lbnRpYWwiLCJib3VuY2UiLCJjb3NpbmUiLCJyZXZlcnNlIiwicmV2ZXJzZUN1cnZlIiwic3RlcCIsInJpcHBsZSIsInNpbmUiLCJBbXBsaXR1ZGVFbnZlbG9wZSIsIkFuYWx5c2VyTm9kZSIsImdldEZsb2F0VGltZURvbWFpbkRhdGEiLCJ1aW50OCIsIlVpbnQ4QXJyYXkiLCJnZXRCeXRlVGltZURvbWFpbkRhdGEiLCJBbmFseXNlciIsIl9hbmFseXNlciIsImNyZWF0ZUFuYWx5c2VyIiwiX2J1ZmZlciIsInNpemUiLCJzbW9vdGhpbmciLCJXYXZlZm9ybSIsIkZGVCIsImdldFZhbHVlIiwiZ2V0RmxvYXRGcmVxdWVuY3lEYXRhIiwiZnJlcXVlbmN5QmluQ291bnQiLCJmZnRTaXplIiwiVHlwZUVycm9yIiwic21vb3RoaW5nVGltZUNvbnN0YW50IiwiQ29tcHJlc3NvciIsIl9jb21wcmVzc29yIiwiY3JlYXRlRHluYW1pY3NDb21wcmVzc29yIiwidGhyZXNob2xkIiwia25lZSIsInJhdGlvIiwiQWRkIiwiX3N1bSIsIk11bHRpcGx5IiwiX211bHQiLCJOZWdhdGUiLCJfbXVsdGlwbHkiLCJTdWJ0cmFjdCIsIl9uZWciLCJFcXVhbFBvd2VyR2FpbiIsIl9lcVBvd2VyIiwiQ3Jvc3NGYWRlIiwiaW5pdGlhbEZhZGUiLCJmYWRlIiwiX2VxdWFsUG93ZXJBIiwiX2VxdWFsUG93ZXJCIiwiX29uZSIsIl9pbnZlcnQiLCJGaWx0ZXIiLCJfZmlsdGVycyIsImRldHVuZSIsIlEiLCJfcm9sbG9mZiIsInJvbGxvZmYiLCJjYXNjYWRpbmdDb3VudCIsImNvdW50IiwiZmlsdGVyIiwiY3JlYXRlQmlxdWFkRmlsdGVyIiwiY29ubmVjdGlvbkNoYWluIiwiY29uY2F0IiwiTXVsdGliYW5kU3BsaXQiLCJsb3ciLCJfbG93TWlkRmlsdGVyIiwibWlkIiwiaGlnaCIsImxvd0ZyZXF1ZW5jeSIsImhpZ2hGcmVxdWVuY3kiLCJFUTMiLCJfbXVsdGliYW5kU3BsaXQiLCJfbG93R2FpbiIsIl9taWRHYWluIiwiX2hpZ2hHYWluIiwiU2NhbGUiLCJvdXRwdXRNaW4iLCJvdXRwdXRNYXgiLCJfb3V0cHV0TWluIiwiX291dHB1dE1heCIsIl9zY2FsZSIsIl9hZGQiLCJfc2V0UmFuZ2UiLCJTY2FsZUV4cCIsImV4cG9uZW50IiwiRGVsYXkiLCJfbWF4RGVsYXkiLCJtYXhEZWxheSIsImRlbGF5VGltZSIsIl9kZWxheU5vZGUiLCJGZWVkYmFja0NvbWJGaWx0ZXIiLCJfZGVsYXkiLCJfZmVlZGJhY2siLCJyZXNvbmFuY2UiLCJBYnMiLCJfYWJzIiwiRm9sbG93ZXIiLCJfZmlsdGVyIiwiX2ZyZXF1ZW5jeVZhbHVlcyIsIl9zdWIiLCJfYXR0YWNrIiwiX3JlbGVhc2UiLCJfc2V0QXR0YWNrUmVsZWFzZSIsIm1pblRpbWUiLCJTY2FsZWRFbnZlbG9wZSIsIkZyZXF1ZW5jeUVudmVsb3BlIiwiX29jdGF2ZXMiLCJvY3RhdmVzIiwiYmFzZUZyZXF1ZW5jeSIsIkdyZWF0ZXJUaGFuWmVybyIsIl90aHJlc2giLCJHcmVhdGVyVGhhbiIsIl9ndHoiLCJHYXRlIiwiX2ZvbGxvd2VyIiwiX2d0IiwidGhyZXNoIiwiYXR0YWNrVGltZSIsInJlbGVhc2VUaW1lIiwiX3dyYXBTY2hlZHVsZU1ldGhvZHMiLCJ0aWNrc1VudGlsVGltZSIsIl9nZXRUaWNrc1VudGlsRXZlbnQiLCJUaWNrU2lnbmFsIiwicHJldkV2ZW50Iiwic2VnbWVudHMiLCJyYW1wVmFsIiwic2VnbWVudER1ciIsInZhbDAiLCJ2YWwxIiwic2FtcGxlVGltZSIsImdldFRpY2tzQXRUaW1lIiwiZ2V0RHVyYXRpb25PZlRpY2tzIiwiY3VycmVudFRpY2siLCJnZXRUaW1lT2ZUaWNrIiwidGljayIsImRlbHRhIiwic3FydCIsInNvbDEiLCJ0aWNrc1RvVGltZSIsIndoZW4iLCJ0aW1lVG9UaWNrcyIsInN0YXJ0VGlja3MiLCJlbmRUaWNrcyIsIlRpbWVsaW5lU3RhdGUiLCJpbml0aWFsIiwiX2luaXRpYWwiLCJzZXRTdGF0ZUF0VGltZSIsImdldExhc3RTdGF0ZSIsImdldE5leHRTdGF0ZSIsIlRpY2tTb3VyY2UiLCJfc3RhdGUiLCJfdGlja09mZnNldCIsInNldFRpY2tzQXRUaW1lIiwicGF1c2UiLCJzdG9wRXZlbnQiLCJ0bXBFdmVudCIsImxhc3RTdGF0ZSIsImVsYXBzZWRUaWNrcyIsInBlcmlvZFN0YXJ0VGltZSIsIm9mZnNldEV2ZW50IiwiZ2V0U2Vjb25kc0F0VGltZSIsImVsYXBzZWRTZWNvbmRzIiwiZ2V0U3RhdGVBdFRpbWUiLCJhYnNvbHV0ZVRpY2tzIiwiZm9yRWFjaFRpY2tCZXR3ZWVuIiwibGFzdFN0YXRlRXZlbnQiLCJuZXh0VGlja1RpbWUiLCJDbG9jayIsIl9uZXh0VGljayIsIl90aWNrU291cmNlIiwiX2xhc3RVcGRhdGUiLCJfYm91bmRMb29wIiwiX2xvb3AiLCJJbnRlcnZhbFRpbWVsaW5lIiwiX3Jvb3QiLCJfbGVuZ3RoIiwiSW50ZXJ2YWxOb2RlIiwiaW5zZXJ0IiwidXBkYXRlSGVpZ2h0IiwidXBkYXRlTWF4IiwiX3JlYmFsYW5jZSIsInJlc3VsdHMiLCJzZWFyY2giLCJfcmVtb3ZlTm9kZSIsIl9zZXRSb290IiwiX3JlcGxhY2VOb2RlSW5QYXJlbnQiLCJyZXBsYWNlbWVudCIsImlzTGVmdENoaWxkIiwibGVmdCIsInJpZ2h0IiwidGVtcCIsImdldEJhbGFuY2UiLCJfcm90YXRlTGVmdCIsInBpdm90Tm9kZSIsIl9yb3RhdGVSaWdodCIsImJhbGFuY2UiLCJhbGxOb2RlcyIsInRyYXZlcnNlIiwic2VhcmNoQWZ0ZXIiLCJfbGVmdCIsIl9yaWdodCIsImhlaWdodCIsInBvaW50IiwiVHJhbnNwb3J0RXZlbnQiLCJfZXZlbnRJZCIsIl9vbmNlIiwiaW52b2tlIiwiY2xlYXIiLCJUcmFuc3BvcnRSZXBlYXRFdmVudCIsIl9pbnRlcnZhbCIsIl9jdXJyZW50SWQiLCJfbmV4dElkIiwiX2JvdW5kUmVzdGFydCIsIl9yZXN0YXJ0IiwiX2NyZWF0ZUV2ZW50cyIsInNjaGVkdWxlT25jZSIsIl9ib3VuZENyZWF0ZUV2ZW50cyIsIl9sb29wU3RhcnQiLCJfbG9vcEVuZCIsIl9wcHEiLCJUcmFuc3BvcnRDb25zdHJ1Y3RvciIsIl9jbG9jayIsIl9wcm9jZXNzVGljayIsIl9iaW5kQ2xvY2tFdmVudHMiLCJfdGltZVNpZ25hdHVyZSIsIl9zY2hlZHVsZWRFdmVudHMiLCJfcmVwZWF0ZWRFdmVudHMiLCJfc3luY2VkU2lnbmFscyIsIl9zd2luZ1RpY2tzIiwiX3N3aW5nQW1vdW50Iiwic3dpbmciLCJzd2luZ1N1YmRpdmlzaW9uIiwibG9vcFN0YXJ0IiwibG9vcEVuZCIsInRpY2tUaW1lIiwicHJvZ3Jlc3MiLCJhbW91bnQiLCJzY2hlZHVsZSIsIl9hZGRFdmVudCIsInNjaGVkdWxlUmVwZWF0IiwiZXZlbnRJZCIsIml0ZW0iLCJ0aW1lbGluZSIsInRvZ2dsZSIsInRpbWVTaWciLCJzdGFydFBvc2l0aW9uIiwiZW5kUG9zaXRpb24iLCJzZXRMb29wUG9pbnRzIiwicHBxIiwicmVtYWluaW5nVGlja3MiLCJzeW5jU2lnbmFsIiwicmF0aW9TaWduYWwiLCJ1bnN5bmNTaWduYWwiLCJzeW5jZWRTaWduYWwiLCJWb2x1bWUiLCJ2b2x1bWUiLCJfdW5tdXRlZFZvbHVtZSIsIm11dGUiLCJNYXN0ZXIiLCJfdm9sdW1lIiwidG9NYXN0ZXIiLCJNYXN0ZXJDb25zdHJ1Y3RvciIsIlNvdXJjZSIsIl9zeW5jZWQiLCJfc2NoZWR1bGVkIiwiX3N0YXJ0IiwicmVzdGFydCIsIl9zdG9wIiwic2NoZWQiLCJfc3luY2VkU3RhcnQiLCJzeW5jIiwic3RhdGVFdmVudCIsInN0YXJ0T2Zmc2V0IiwiX3N5bmNlZFN0b3AiLCJ1bnN5bmMiLCJBdWRpb0J1ZmZlciIsImNvcHlUb0NoYW5uZWwiLCJzcmMiLCJjaGFuTnVtIiwiY2hhbm5lbCIsImNvcHlGcm9tQ2hhbm5lbCIsImRlc3QiLCJCdWZmZXIiLCJfcmV2ZXJzZWQiLCJfeGhyIiwiX29ubG9hZCIsInVybCIsIm9ubG9hZCIsImxvYWRlZCIsImxvYWQiLCJjYXRjaCIsIm9uZXJyb3IiLCJidWZmIiwiZXJyIiwiX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlIiwiYWJvcnQiLCJudW1iZXJPZkNoYW5uZWxzIiwiZnJvbUFycmF5IiwiaXNNdWx0aWRpbWVuc2lvbmFsIiwidG9Nb25vIiwidG9BcnJheSIsIm91dHB1dEFycmF5IiwibnVtQ2hhbm5lbHMiLCJjaGFubmVsQXJyYXkiLCJzYW1wbGUiLCJzdGFydFNhbXBsZXMiLCJlbmRTYW1wbGVzIiwiX3JldmVyc2UiLCJyZXYiLCJfZG93bmxvYWRRdWV1ZSIsImJhc2VVcmwiLCJmcm9tVXJsIiwicmVxdWVzdCIsIm1hdGNoZXMiLCJleHRlbnNpb25zIiwiZXh0ZW5zaW9uIiwic3VwcG9ydHNUeXBlIiwicmVwbGFjZSIsIm9uRXJyb3IiLCJvblByb2dyZXNzIiwidG90YWxQcm9ncmVzcyIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJzdGF0dXMiLCJyZXNwb25zZSIsImxlbmd0aENvbXB1dGFibGUiLCJzZW5kIiwiY2FuY2VsRG93bmxvYWRzIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2FuUGxheVR5cGUiLCJyZW1vdmVFdmVudHMiLCJmYWlsIiwiT3NjaWxsYXRvck5vZGUiLCJvbmVuZGVkIiwiX3N0YXJ0VGltZSIsIl9zdG9wVGltZSIsIl9vc2NpbGxhdG9yIiwiY3JlYXRlT3NjaWxsYXRvciIsIl9nYWluIiwic2V0UGVyaW9kaWNXYXZlIiwicGVyaW9kaWNXYXZlIiwiY2FuY2VsU3RvcCIsIk9zY2lsbGF0b3IiLCJfd2F2ZSIsIl9wYXJ0aWFscyIsInBhcnRpYWxzIiwiX3BoYXNlIiwicGhhc2UiLCJTaW5lIiwiVHJpYW5nbGUiLCJTYXd0b290aCIsIlNxdWFyZSIsIkN1c3RvbSIsInN5bmNGcmVxdWVuY3kiLCJ1bnN5bmNGcmVxdWVuY3kiLCJpc0Jhc2ljVHlwZSIsImNvZWZzIiwiX2dldFJlYWxJbWFnaW5hcnkiLCJjcmVhdGVQZXJpb2RpY1dhdmUiLCJwZXJpb2RpY1dhdmVTaXplIiwicmVhbCIsImltYWciLCJwYXJ0aWFsQ291bnQiLCJwYXJ0aWFsIiwiZXhlYyIsIl9pbnZlcnNlRkZUIiwic3VtIiwiX2dldEluaXRpYWxWYWx1ZSIsInR3b1BpIiwiQXVkaW9Ub0dhaW4iLCJfbm9ybSIsIngiLCJaZXJvIiwiTEZPIiwiYW1wbGl0dWRlIiwiX3N0b3BwZWRTaWduYWwiLCJfemVyb3MiLCJfc3RvcHBlZFZhbHVlIiwiX2EyZyIsIl9zY2FsZXIiLCJjdXJyZW50TWluIiwiY3VycmVudE1heCIsIkxpbWl0ZXIiLCJMb3dwYXNzQ29tYkZpbHRlciIsIl9sb3dwYXNzIiwiZGFtcGVuaW5nIiwiTWVyZ2UiLCJfbWVyZ2VyIiwiY3JlYXRlQ2hhbm5lbE1lcmdlciIsIk1ldGVyIiwiZ2V0TGV2ZWwiLCJTcGxpdCIsIl9zcGxpdHRlciIsImNyZWF0ZUNoYW5uZWxTcGxpdHRlciIsIk1pZFNpZGVTcGxpdCIsIl9zcGxpdCIsIl9taWRBZGQiLCJTUVJUMV8yIiwiX3NpZGVTdWJ0cmFjdCIsInNpZGUiLCJNaWRTaWRlTWVyZ2UiLCJfdGltZXNUd29MZWZ0IiwiX3RpbWVzVHdvUmlnaHQiLCJfbWVyZ2UiLCJNaWRTaWRlQ29tcHJlc3NvciIsIl9taWRTaWRlU3BsaXQiLCJfbWlkU2lkZU1lcmdlIiwiTW9ubyIsIk11bHRpYmFuZENvbXByZXNzb3IiLCJTdGVyZW9QYW5uZXJOb2RlIiwicGFuIiwicmlnaHRXYXZlU2hhcGVyIiwibGVmdFdhdmVTaGFwZXIiLCJsZWZ0R2FpbiIsInJpZ2h0R2FpbiIsIm1lcmdlIiwiY3JlYXRlU3RlcmVvUGFubmVyIiwiUGFubmVyIiwiaW5pdGlhbFBhbiIsIl9wYW5uZXIiLCJQYW5uZXIzRCIsImNyZWF0ZVBhbm5lciIsInBhbm5pbmdNb2RlbCIsIm1heERpc3RhbmNlIiwiZGlzdGFuY2VNb2RlbCIsImNvbmVPdXRlckdhaW4iLCJjb25lT3V0ZXJBbmdsZSIsImNvbmVJbm5lckFuZ2xlIiwicmVmRGlzdGFuY2UiLCJyb2xsb2ZmRmFjdG9yIiwiX29yaWVudGF0aW9uIiwib3JpZW50YXRpb25YIiwib3JpZW50YXRpb25ZIiwib3JpZW50YXRpb25aIiwiX3Bvc2l0aW9uIiwicG9zaXRpb25YIiwicG9zaXRpb25ZIiwicG9zaXRpb25aIiwiX3JhbXBUaW1lQ29uc3RhbnQiLCJzZXRQb3NpdGlvbiIsInkiLCJ6Iiwic2V0T3JpZW50YXRpb24iLCJwb3MiLCJfYWxpYXNQcm9wZXJ0eSIsIlBhblZvbCIsIlNvbG8iLCJfc29sb0JpbmQiLCJfc29sb2VkIiwic29sbyIsIl9pc1NvbG9lZCIsIl9hZGRTb2xvIiwiX3JlbW92ZVNvbG8iLCJfY3VycmVudFNvbG8iLCJfbm9Tb2xvcyIsIkN0cmxJbnRlcnBvbGF0ZSIsImxvd2VyUG9zaXRpb24iLCJsb3dlciIsInVwcGVyIiwiX2ludGVycG9sYXRlIiwicmV0QXJyYXkiLCJyZXRPYmoiLCJfdG9OdW1iZXIiLCJDdHJsTWFya292IiwibmV4dCIsImRpc3RyaWJ1dGlvbiIsIl9nZXRQcm9iRGlzdHJpYnV0aW9uIiwicmFuZCIsInJhbmRvbSIsImRpc3QiLCJjaG9zZW4iLCJuZWVkc05vcm1hbGl6aW5nIiwib3B0aW9uIiwicHJvYmFiaWxpdHkiLCJDdHJsUGF0dGVybiIsIl9zaHVmZmxlZCIsIl9kaXJlY3Rpb24iLCJVcCIsIkRvd24iLCJVcERvd24iLCJEb3duVXAiLCJBbHRlcm5hdGVVcCIsIkFsdGVybmF0ZURvd24iLCJSYW5kb20iLCJSYW5kb21XYWxrIiwiUmFuZG9tT25jZSIsIl9zaHVmZmxlVmFsdWVzIiwiY29weSIsInJhbmRWYWwiLCJDdHJsUmFuZG9tIiwiaW50ZWdlciIsIkJ1ZmZlcnMiLCJ1cmxzIiwiX2J1ZmZlcnMiLCJfbG9hZGluZ0NvdW50IiwiX2J1ZmZlckxvYWRlZCIsImhhcyIsImlzTG9hZGVkIiwiYnVmZk5hbWUiLCJCdXNlcyIsImNoYW5uZWxOYW1lIiwic2VuZEtub2IiLCJyZWNlaXZlIiwiRHJhdyIsImV4cGlyYXRpb24iLCJhbnRpY2lwYXRpb24iLCJfYm91bmREcmF3TG9vcCIsIl9kcmF3TG9vcCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIkxpc3RlbmVyIiwiTGlzdGVuZXJDb25zdHJ1Y3RvciIsImZvcndhcmRYIiwiZm9yd2FyZFkiLCJmb3J3YXJkWiIsInVwWCIsInVwWSIsInVwWiIsImxpc3RlbmVyIiwib3JpZ2luYWxDb250ZXh0IiwicmVuZGVyUmV0IiwiYXR0ZW1wdFJlbmRlciIsInRyaWVzIiwiRWZmZWN0IiwiX2RyeVdldCIsIndldCIsImVmZmVjdFNlbmQiLCJlZmZlY3RSZXR1cm4iLCJjb25uZWN0RWZmZWN0IiwiZWZmZWN0IiwiQXV0b0ZpbHRlciIsIl9sZm8iLCJkZXB0aCIsImRlbGF5Iiwib2N0IiwiQXV0b1Bhbm5lciIsIkF1dG9XYWgiLCJmb2xsb3dlciIsIl9zd2VlcFJhbmdlIiwiX2Jhc2VGcmVxdWVuY3kiLCJfaW5wdXRCb29zdCIsIl9iYW5kcGFzcyIsIl9wZWFraW5nIiwiX3NldFN3ZWVwUmFuZ2UiLCJzZW5zaXRpdml0eSIsImJhc2VGcmVxIiwic2Vuc2l0aXZ5IiwiTW9kdWxvIiwibW9kdWx1cyIsIl9zdWJ0cmFjdCIsIl9tb2RTaWduYWwiLCJfc2V0V2F2ZVNoYXBlciIsIm1vZCIsIkJpdENydXNoZXIiLCJpbnZTdGVwU2l6ZSIsImJpdHMiLCJfbW9kdWxvIiwiX2JpdHMiLCJDaGVieXNoZXYiLCJfb3JkZXIiLCJvcmRlciIsIl9nZXRDb2VmZmljaWVudCIsImRlZ3JlZSIsIm1lbW8iLCJTdGVyZW9FZmZlY3QiLCJlZmZlY3RTZW5kTCIsImVmZmVjdFNlbmRSIiwiZWZmZWN0UmV0dXJuTCIsImVmZmVjdFJldHVyblIiLCJDaG9ydXMiLCJfZGVwdGgiLCJfZGVsYXlUaW1lIiwiX2xmb0wiLCJfbGZvUiIsIl9kZWxheU5vZGVMIiwiX2RlbGF5Tm9kZVIiLCJzcHJlYWQiLCJkZXZpYXRpb24iLCJDb252b2x2ZXIiLCJfY29udm9sdmVyIiwiY3JlYXRlQ29udm9sdmVyIiwiRGlzdG9ydGlvbiIsIl9kaXN0b3J0aW9uIiwiZGlzdG9ydGlvbiIsImRlZyIsIkZlZWRiYWNrRWZmZWN0IiwiX2ZlZWRiYWNrR2FpbiIsImZlZWRiYWNrIiwiRmVlZGJhY2tEZWxheSIsImNvbWJGaWx0ZXJUdW5pbmdzIiwiYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzIiwiRnJlZXZlcmIiLCJyb29tU2l6ZSIsIl9jb21iRmlsdGVycyIsIl9hbGxwYXNzRmlsdGVyc0wiLCJfYWxscGFzc0ZpbHRlcnNSIiwiYWxscGFzc0wiLCJhbGxwYXNzUiIsImxmcGYiLCJhbCIsImFyIiwiY2YiLCJjb21iRmlsdGVyRGVsYXlUaW1lcyIsImNvbWJGaWx0ZXJSZXNvbmFuY2VzIiwiYWxscGFzc0ZpbHRlckZyZXFzIiwiSkNSZXZlcmIiLCJfc2NhbGVSb29tU2l6ZSIsIl9hbGxwYXNzRmlsdGVycyIsIl9mZWVkYmFja0NvbWJGaWx0ZXJzIiwiYWYiLCJhbGxwYXNzIiwiZmJjZiIsImFwZiIsIk1pZFNpZGVFZmZlY3QiLCJtaWRTZW5kIiwic2lkZVNlbmQiLCJtaWRSZXR1cm4iLCJzaWRlUmV0dXJuIiwiUGhhc2VyIiwiX2ZpbHRlcnNMIiwiX21ha2VGaWx0ZXJzIiwic3RhZ2VzIiwiX2ZpbHRlcnNSIiwiY29ubmVjdFRvRnJlcSIsImZpbHRlcnMiLCJTdGVyZW9YRmVlZGJhY2tFZmZlY3QiLCJfZmVlZGJhY2tMUiIsIl9mZWVkYmFja1JMIiwiUGluZ1BvbmdEZWxheSIsIl9sZWZ0RGVsYXkiLCJtYXhEZWxheVRpbWUiLCJfcmlnaHREZWxheSIsIl9yaWdodFByZURlbGF5IiwiUGl0Y2hTaGlmdCIsIl9mcmVxdWVuY3kiLCJfZGVsYXlBIiwiX2xmb0EiLCJfZGVsYXlCIiwiX2xmb0IiLCJfY3Jvc3NGYWRlIiwiX2Nyb3NzRmFkZUxGTyIsIl9mZWVkYmFja0RlbGF5IiwiX3BpdGNoIiwiX3dpbmRvd1NpemUiLCJ3aW5kb3dTaXplIiwiZmFjdG9yIiwiQnVmZmVyU291cmNlIiwiX3NvdXJjZVN0b3BwZWQiLCJfc291cmNlIiwiX29uZW5kZWQiLCJwbGF5YmFja1JhdGUiLCJmYWRlSW4iLCJmYWRlT3V0IiwiX29uZW5kZWRUaW1lb3V0IiwiZmFkZUluVGltZSIsImNvbXB1dGVkRHVyIiwiZmFkZU91dFRpbWUiLCJoZWxkRHVyYXRpb24iLCJzdGFydEZhZGUiLCJhZGRpdGlvbmFsVGFpbCIsIk5vaXNlIiwiX3BsYXliYWNrUmF0ZSIsIl9ub2lzZUJ1ZmZlcnMiLCJyYXRlIiwiX25vaXNlQXJyYXlzIiwicGluayIsImNoYW5uZWxOdW0iLCJiMCIsImIxIiwiYjIiLCJiMyIsImI0IiwiYjUiLCJiNiIsIndoaXRlIiwiYnJvd24iLCJsYXN0T3V0IiwiY3JlYXRlQnVmZmVycyIsIlJldmVyYiIsInByZURlbGF5IiwiZ2VuZXJhdGUiLCJub2lzZUwiLCJub2lzZVIiLCJTdGVyZW9GZWVkYmFja0VmZmVjdCIsIl9mZWVkYmFja0wiLCJfZmVlZGJhY2tSIiwiU3RlcmVvV2lkZW5lciIsIndpZHRoIiwiX3R3b1RpbWVzV2lkdGhNaWQiLCJfdHdvVGltZXNXaWR0aFNpZGUiLCJfbWlkTXVsdCIsIl9vbmVNaW51c1dpZHRoIiwiX3NpZGVNdWx0IiwiVHJlbW9sbyIsIl9hbXBsaXR1ZGVMIiwiX2FtcGxpdHVkZVIiLCJWaWJyYXRvIiwiRXZlbnQiLCJfc3RhcnRPZmZzZXQiLCJfcHJvYmFiaWxpdHkiLCJfaHVtYW5pemUiLCJodW1hbml6ZSIsIl9yZXNjaGVkdWxlRXZlbnRzIiwic3RhcnRUaWNrIiwiX2dldExvb3BEdXJhdGlvbiIsIl90aWNrIiwicHJvYiIsInZhcmlhdGlvbiIsInJlc2NoZWR1bFRpbWUiLCJsYXN0RXZlbnQiLCJsb29wRHVyYXRpb24iLCJMb29wIiwiX2V2ZW50IiwiaXRlcmF0aW9ucyIsIml0ZXJzIiwiUGFydCIsIl9mb3JFYWNoIiwiX3N0YXJ0Tm90ZSIsImF0IiwiX3Jlc3RhcnRFdmVudCIsInJlbW92ZUFsbCIsIl9zZXRBbGwiLCJfdGVzdExvb3BCb3VuZHJpZXMiLCJQYXR0ZXJuIiwiX3BhdHRlcm4iLCJwYXR0ZXJuIiwidmFscyIsIlNlcXVlbmNlIiwiX3N1YmRpdmlzaW9uIiwiX2luZGV4VGltZSIsInN1YlN1YmRpdmlzaW9uIiwiUHVsc2VPc2NpbGxhdG9yIiwiX3dpZHRoR2F0ZSIsIl9zYXd0b290aCIsIlBXTU9zY2lsbGF0b3IiLCJfcHVsc2UiLCJtb2R1bGF0aW9uRnJlcXVlbmN5IiwiX21vZHVsYXRvciIsIkZNT3NjaWxsYXRvciIsIl9jYXJyaWVyIiwibW9kdWxhdGlvbkluZGV4IiwibW9kdWxhdGlvblR5cGUiLCJoYXJtb25pY2l0eSIsIl9tb2R1bGF0aW9uTm9kZSIsIkFNT3NjaWxsYXRvciIsIl9tb2R1bGF0aW9uU2NhbGUiLCJGYXRPc2NpbGxhdG9yIiwiX29zY2lsbGF0b3JzIiwiX3NwcmVhZCIsIm9zYyIsIml0ZXJhdG9yIiwiT21uaU9zY2lsbGF0b3IiLCJfc291cmNlVHlwZSIsIk9tbmlPc2NUeXBlIiwicHJlZml4Iiwic3Vic3RyIiwiX2NyZWF0ZU5ld09zY2lsbGF0b3IiLCJvc2NUeXBlIiwiT3NjaWxsYXRvckNvbnN0cnVjdG9yIiwib2xkT3NjIiwibVR5cGUiLCJJbnN0cnVtZW50IiwiX3N5bmNNZXRob2QiLCJ0aW1lUG9zaXRpb24iLCJvcmlnaW5hbE1ldGhvZCIsIl9vcmlnaW5hbF90cmlnZ2VyQXR0YWNrIiwiX29yaWdpbmFsX3RyaWdnZXJSZWxlYXNlIiwiTW9ub3Bob25pYyIsInBvcnRhbWVudG8iLCJfdHJpZ2dlckVudmVsb3BlQXR0YWNrIiwic2V0Tm90ZSIsIl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlIiwiZ2V0TGV2ZWxBdFRpbWUiLCJlbnZlbG9wZSIsInBvcnRUaW1lIiwiU3ludGgiLCJvc2NpbGxhdG9yIiwiQU1TeW50aCIsIm1vZHVsYXRpb24iLCJtb2R1bGF0aW9uRW52ZWxvcGUiLCJNb25vU3ludGgiLCJmaWx0ZXJFbnZlbG9wZSIsIkR1b1N5bnRoIiwidm9pY2UwIiwidm9pY2UxIiwiX3ZpYnJhdG8iLCJ2aWJyYXRvUmF0ZSIsIl92aWJyYXRvR2FpbiIsInZpYnJhdG9BbW91bnQiLCJGTVN5bnRoIiwiY2FycmllciIsIm1vZHVsYXRvciIsIk1lbWJyYW5lU3ludGgiLCJwaXRjaERlY2F5IiwibWF4Tm90ZSIsImluaGFybVJhdGlvcyIsIk1ldGFsU3ludGgiLCJfZnJlcU11bHRpcGxpZXJzIiwiX2FtcGxpdHVlIiwiX2hpZ2hwYXNzIiwiX2ZpbHRlckZyZXFTY2FsZXIiLCJtdWx0IiwidmVsIiwib2N0cyIsIk5vaXNlU3ludGgiLCJub2lzZSIsIlBsdWNrU3ludGgiLCJfbm9pc2UiLCJhdHRhY2tOb2lzZSIsIl9sZmNmIiwiZGVsYXlBbW91bnQiLCJQb2x5U3ludGgiLCJwb2x5cGhvbnkiLCJNQVhfUE9MWVBIT05ZIiwidm9pY2VzIiwiX3RyaWdnZXJzIiwidiIsInZvaWNlIiwibm90ZXMiLCJvbGRlc3QiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RyaW5naWZpZWQiLCJkZXNjIiwicmVsZWFzZUFsbCIsIlNhbXBsZXIiLCJ1cmxNYXAiLCJpc05hTiIsIl9hY3RpdmVTb3VyY2VzIiwiX2ZpbmRDbG9zZXN0IiwiZGlmZmVyZW5jZSIsImNsb3Nlc3ROb3RlIiwic291cmNlIiwic291cmNlcyIsInNldFdhdmVUYWJsZSIsImNyZWF0ZVdhdmVUYWJsZSIsIkdhaW5Ub0F1ZGlvIiwiTm9ybWFsaXplIiwiaW5wdXRNaW4iLCJpbnB1dE1heCIsIl9pbnB1dE1pbiIsIl9pbnB1dE1heCIsIl9kaXYiLCJUcmFuc3BvcnRUaW1lbGluZVNpZ25hbCIsIl9vdXRwdXRTaWciLCJfbGFzdFZhbCIsIl9vblRpY2siLCJfYmluZEFuY2hvclZhbHVlIiwiX2FuY2hvclZhbHVlIiwiX3N5bmNlZENhbGxiYWNrIiwiR3JhaW5QbGF5ZXIiLCJncmFpblNpemUiLCJfZ3JhaW5TaXplIiwiX292ZXJsYXAiLCJvdmVybGFwIiwiX29uc3RvcCIsIl9vZmZzZXQiLCJzZWVrIiwiUGxheWVyIiwiYXV0b3N0YXJ0IiwiX2VsYXBzZWRUaW1lIiwicmV0cmlnZ2VyIiwiX29uU291cmNlRW5kIiwiY29tcHV0ZWREdXJhdGlvbiIsIl9zdG9wQXROZXh0SXRlcmF0aW9uIiwibmV4dFN0b3AiLCJwb3NpdGlvbiIsInN0b3BUaW1lIiwiUGxheWVycyIsIl9wbGF5ZXJzIiwiX2ZhZGVJbiIsIl9mYWRlT3V0IiwicGxheWVyIiwicGxheWluZyIsInBsYXllck5hbWUiLCJzdG9wQWxsIiwiVXNlck1lZGlhIiwiX21lZGlhU3RyZWFtIiwiX3N0cmVhbSIsIl9kZXZpY2UiLCJsYWJlbE9ySWQiLCJlbnVtZXJhdGVEZXZpY2VzIiwiZGV2aWNlcyIsImRldmljZSIsImZpbmQiLCJsYWJlbCIsImRldmljZUlkIiwiY29uc3RyYWludHMiLCJhdWRpbyIsImVjaG9DYW5jZWxsYXRpb24iLCJtZWRpYURldmljZXMiLCJnZXRVc2VyTWVkaWEiLCJzdHJlYW0iLCJjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZSIsImdldEF1ZGlvVHJhY2tzIiwidHJhY2siLCJraW5kIiwiYWN0aXZlIiwiZ3JvdXBJZCIsIk1pZGkiLCJmYWN0b3J5IiwiZ2xvYmFsIiwicmVxdWlyZSIsImgiLCJjb2RlIiwiMSIsImNoYXJDb2RlQXQiLCJ0b0J5dGVBcnJheSIsImZyb21CeXRlQXJyYXkiLCJiYXNlNjRqcyIsIjIiLCIzIiwiVFlQRURfQVJSQVlfU1VQUE9SVCIsIndyaXRlIiwiaXNCdWZmZXIiLCJZIiwiQXJyYXlCdWZmZXIiLCJieXRlTGVuZ3RoIiwiX2F1Z21lbnQiLCJkYXRhIiwiX19wcm90b19fIiwiX2lzQnVmZmVyIiwicG9vbFNpemUiLCJaIiwiUiIsIlUiLCJ1IiwiTnVtYmVyIiwiViIsInciLCJTIiwiVCIsIkEiLCJXIiwiJCIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiWCIsIk4iLCJQIiwiYWEiLCJPIiwiU2xvd0J1ZmZlciIsIklOU1BFQ1RfTUFYX0JZVEVTIiwiZm9vIiwic3ViYXJyYXkiLCJjb21wYXJlIiwiaXNFbmNvZGluZyIsImVxdWFscyIsImluc3BlY3QiLCJyZWFkVUludDgiLCJ3cml0ZVVJbnQ4IiwidG9KU09OIiwiX2FyciIsInJlYWRVSW50TEUiLCJyZWFkVUludEJFIiwicmVhZFVJbnQxNkxFIiwicmVhZFVJbnQxNkJFIiwicmVhZFVJbnQzMkxFIiwicmVhZFVJbnQzMkJFIiwicmVhZEludExFIiwicmVhZEludEJFIiwicmVhZEludDgiLCJyZWFkSW50MTZMRSIsInJlYWRJbnQxNkJFIiwicmVhZEludDMyTEUiLCJyZWFkSW50MzJCRSIsInJlYWRGbG9hdExFIiwicmVhZCIsInJlYWRGbG9hdEJFIiwicmVhZERvdWJsZUxFIiwicmVhZERvdWJsZUJFIiwid3JpdGVVSW50TEUiLCJ3cml0ZVVJbnRCRSIsIndyaXRlVUludDE2TEUiLCJ3cml0ZVVJbnQxNkJFIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDMyQkUiLCJ3cml0ZUludExFIiwid3JpdGVJbnRCRSIsIndyaXRlSW50OCIsIndyaXRlSW50MTZMRSIsIndyaXRlSW50MTZCRSIsIndyaXRlSW50MzJMRSIsIndyaXRlSW50MzJCRSIsIndyaXRlRmxvYXRMRSIsIndyaXRlRmxvYXRCRSIsIndyaXRlRG91YmxlTEUiLCJ3cml0ZURvdWJsZUJFIiwiX3NldCIsImZpbGwiLCJ0b0FycmF5QnVmZmVyIiwiXyIsInRvTG9jYWxlU3RyaW5nIiwic2VsZiIsImJhc2U2NC1qcyIsImllZWU3NTQiLCJpc2FycmF5IiwiNCIsIkVTNlByb21pc2UiLCJjYSIsImVhIiwiX3Jlc3VsdCIsImlhIiwiZ2EiLCJoYSIsIl9sYWJlbCIsIl9vbmVycm9yIiwiZmEiLCJfc3Vic2NyaWJlcnMiLCJqYSIsImthIiwiX2luc3RhbmNlQ29uc3RydWN0b3IiLCJwcm9taXNlIiwiX3JlbWFpbmluZyIsIl9lbnVtZXJhdGUiLCJkYSIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIiwiYmEiLCJVaW50OENsYW1wZWRBcnJheSIsImltcG9ydFNjcmlwdHMiLCJNZXNzYWdlQ2hhbm5lbCIsIm5leHRUaWNrIiwiY3JlYXRlVGV4dE5vZGUiLCJvYnNlcnZlIiwiY2hhcmFjdGVyRGF0YSIsInBvcnQxIiwicG9ydDIiLCJydW5Pbkxvb3AiLCJydW5PbkNvbnRleHQiLCJzdWJzdHJpbmciLCJfZWFjaEVudHJ5IiwiX3NldHRsZWRBdCIsIl93aWxsU2V0dGxlQXQiLCJhbGwiLCJyYWNlIiwicmVqZWN0IiwiX3NldFNjaGVkdWxlciIsIl9zZXRBc2FwIiwiX2FzYXAiLCJwb2x5ZmlsbCIsIkZ1bmN0aW9uIiwiY2FzdCIsIl9wcm9jZXNzIiwiNSIsImZldGNoSnNvbnAiLCJnZXRFbGVtZW50QnlJZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwicmVtb3ZlQ2hpbGQiLCJqc29ucENhbGxiYWNrIiwianNvbnBDYWxsYmFja0Z1bmN0aW9uIiwiRGF0ZSIsIm9rIiwianNvbiIsInNldEF0dHJpYnV0ZSIsImNoYXJzZXQiLCJhcHBlbmRDaGlsZCIsIjYiLCJjcmVhdGVFbGVtZW50TlMiLCJIVE1MRWxlbWVudCIsInNhZmFyaSIsInNldEltbWVkaWF0ZSIsInJldm9rZU9iamVjdFVSTCIsInJlYWR5U3RhdGUiLCJJTklUIiwiaHJlZiIsImRvd25sb2FkIiwiTW91c2VFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJET05FIiwiRmlsZVJlYWRlciIsIm9ubG9hZGVuZCIsInJlc3VsdCIsImxvY2F0aW9uIiwicmVhZEFzRGF0YVVSTCIsIm1zU2F2ZU9yT3BlbkJsb2IiLCJXUklUSU5HIiwib253cml0ZXN0YXJ0Iiwib25wcm9ncmVzcyIsIm9ud3JpdGUiLCJvbmFib3J0Iiwib253cml0ZWVuZCIsImNvbnRlbnQiLCJzYXZlQXMiLCI3IiwiTmFOIiwiTE4yIiwiOCIsIjkiLCJvYSIsIm5hIiwibWEiLCJsYSIsInFhIiwicmEiLCJzb3J0IiwicGEiLCJsaWJ0ZXNzIiwiR2x1VGVzc2VsYXRvciIsIndpbmRpbmdSdWxlIiwiR0xVX1RFU1NfV0lORElOR19PREQiLCJHTFVfVEVTU19XSU5ESU5HX05PTlpFUk8iLCJHTFVfVEVTU19XSU5ESU5HX1BPU0lUSVZFIiwiR0xVX1RFU1NfV0lORElOR19ORUdBVElWRSIsIkdMVV9URVNTX1dJTkRJTkdfQUJTX0dFUV9UV08iLCJwcmltaXRpdmVUeXBlIiwiR0xfTElORV9MT09QIiwiR0xfVFJJQU5HTEVTIiwiR0xfVFJJQU5HTEVfU1RSSVAiLCJHTF9UUklBTkdMRV9GQU4iLCJlcnJvclR5cGUiLCJHTFVfVEVTU19NSVNTSU5HX0JFR0lOX1BPTFlHT04iLCJHTFVfVEVTU19NSVNTSU5HX0VORF9QT0xZR09OIiwiR0xVX1RFU1NfTUlTU0lOR19CRUdJTl9DT05UT1VSIiwiR0xVX1RFU1NfTUlTU0lOR19FTkRfQ09OVE9VUiIsIkdMVV9URVNTX0NPT1JEX1RPT19MQVJHRSIsIkdMVV9URVNTX05FRURfQ09NQklORV9DQUxMQkFDSyIsImdsdUVudW0iLCJHTFVfVEVTU19NRVNIIiwiR0xVX1RFU1NfVE9MRVJBTkNFIiwiR0xVX1RFU1NfV0lORElOR19SVUxFIiwiR0xVX1RFU1NfQk9VTkRBUllfT05MWSIsIkdMVV9JTlZBTElEX0VOVU0iLCJHTFVfSU5WQUxJRF9WQUxVRSIsIkdMVV9URVNTX0JFR0lOIiwiR0xVX1RFU1NfVkVSVEVYIiwiR0xVX1RFU1NfRU5EIiwiR0xVX1RFU1NfRVJST1IiLCJHTFVfVEVTU19FREdFX0ZMQUciLCJHTFVfVEVTU19DT01CSU5FIiwiR0xVX1RFU1NfQkVHSU5fREFUQSIsIkdMVV9URVNTX1ZFUlRFWF9EQVRBIiwiR0xVX1RFU1NfRU5EX0RBVEEiLCJHTFVfVEVTU19FUlJPUl9EQVRBIiwiR0xVX1RFU1NfRURHRV9GTEFHX0RBVEEiLCJHTFVfVEVTU19DT01CSU5FX0RBVEEiLCJnbHVEZWxldGVUZXNzIiwiZ2x1VGVzc1Byb3BlcnR5IiwiZ2x1R2V0VGVzc1Byb3BlcnR5IiwiZ2x1VGVzc05vcm1hbCIsImdsdVRlc3NDYWxsYmFjayIsImdsdVRlc3NWZXJ0ZXgiLCJnbHVUZXNzQmVnaW5Qb2x5Z29uIiwiZ2x1VGVzc0JlZ2luQ29udG91ciIsImdsdVRlc3NFbmRDb250b3VyIiwiZ2x1VGVzc0VuZFBvbHlnb24iLCIxMCIsIm9wZW50eXBlIiwidGFibGUiLCJVaW50MTZBcnJheSIsInRyYW5zIiwic291cmNlSW5kZXgiLCJ0YWciLCJiaXRjb3VudCIsImRlc3RMZW4iLCJsdHJlZSIsImR0cmVlIiwidmUiLCJ1ZSIsInNlIiwidGUiLCJrZSIsIm9lIiwicGUiLCJxZSIsInJlIiwibGUiLCJ4MSIsInkxIiwieDIiLCJ5MiIsImNvbW1hbmRzIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJ0YWJsZU5hbWUiLCJmaWVsZHMiLCJmb3JtYXQiLCJnbHlwaHMiLCJ4ZSIsImFzc2VydCIsInNjcmlwdCIsImRlZmF1bHRMYW5nU3lzIiwicmVxRmVhdHVyZUluZGV4IiwiZmVhdHVyZUluZGV4ZXMiLCJsYW5nU3lzUmVjb3JkcyIsImxhbmdTeXMiLCJmZWF0dXJlIiwiZmVhdHVyZVBhcmFtcyIsImxvb2t1cExpc3RJbmRleGVzIiwibG9va3VwVHlwZSIsImxvb2t1cEZsYWciLCJzdWJ0YWJsZXMiLCJnZXRVaW50OCIsImdldFVpbnQxNiIsImdldFVpbnQzMiIsImdldEludDE2IiwicmVsYXRpdmVPZmZzZXQiLCJnbHlwaEluZGV4IiwiZm9udCIsImNtYXAiLCJlbmNvZGluZyIsIm5hbWVzIiwiUWUiLCJudW1iZXJPZkdseXBocyIsImdseXBoTmFtZUluZGV4IiwiYmluZENvbnN0cnVjdG9yVmFsdWVzIiwicGF0aCIsImNvbmZpZ3VyYWJsZSIsIkxlIiwiZ2V0Q2FyZDE2IiwiZ2V0Qnl0ZSIsImdldE9mZnNldCIsImdldEJ5dGVzIiwib2JqZWN0cyIsImVuZE9mZnNldCIsInBhcnNlQnl0ZSIsIlBhcnNlciIsIk5lIiwib3AiLCJzYSIsIlRlIiwidGEiLCJVZSIsIkRhdGFWaWV3IiwiX3N1YnJzIiwiX3N1YnJzQmlhcyIsInByaXZhdGUiLCJfZGVmYXVsdFdpZHRoWCIsImRlZmF1bHRXaWR0aFgiLCJfbm9taW5hbFdpZHRoWCIsIm5vbWluYWxXaWR0aFgiLCJzdWJycyIsIl9wcml2YXRlRGljdCIsInhhIiwiY2xvc2VQYXRoIiwibW92ZVRvIiwiaXNDSURGb250IiwidGFibGVzIiwiY2ZmIiwidG9wRGljdCIsIl9mZFNlbGVjdCIsIl9mZEFycmF5IiwicG9wIiwibGluZVRvIiwiY3VydmVUbyIsImdzdWJyc0JpYXMiLCJnc3VicnMiLCJhZHZhbmNlV2lkdGgiLCJBYSIsIkRhIiwiRWEiLCJJZSIsIlJlY29yZCIsImRpY3QiLCJGYSIsInRvcERpY3RzIiwiSmEiLCJYYSIsIllhIiwiZGYiLCJmZiIsImVmIiwiJGEiLCJfYSIsIm1iIiwibmIiLCJvYiIsInBiIiwiVGFibGUiLCJudW1UYWJsZXMiLCJzZWFyY2hSYW5nZSIsImVudHJ5U2VsZWN0b3IiLCJyYW5nZVNoaWZ0Iiwic2l6ZU9mIiwiYXJndW1lbnQiLCJlbmNvZGUiLCJxYiIsImNoYXJUb0dseXBoSW5kZXgiLCJnZXRNZXRyaWNzIiwidGIiLCJ1YiIsInZiIiwid2IiLCJ4YiIsInliIiwiemIiLCJBYiIsInN1YnN0Rm9ybWF0IiwiQ2IiLCJEYiIsIkViIiwiRmIiLCJwYXJzZVNob3J0IiwiR2IiLCJudW1iZXJPZkNvbnRvdXJzIiwiX3hNaW4iLCJfeU1pbiIsIl94TWF4IiwiX3lNYXgiLCJlbmRQb2ludEluZGljZXMiLCJwYXJzZVVTaG9ydCIsImluc3RydWN0aW9uTGVuZ3RoIiwiaW5zdHJ1Y3Rpb25zIiwib25DdXJ2ZSIsImxhc3RQb2ludE9mQ29udG91ciIsInBvaW50cyIsImlzQ29tcG9zaXRlIiwiY29tcG9uZW50cyIsInhTY2FsZSIsInNjYWxlMDEiLCJzY2FsZTEwIiwieVNjYWxlIiwiZHkiLCJtYXRjaGVkUG9pbnRzIiwicGFyc2VDaGFyIiwicGFyc2VGMkRvdDE0IiwiSGIiLCJKYiIsIkliIiwicXVhZHJhdGljQ3VydmVUbyIsIktiIiwiZ2V0UGF0aCIsIk1iIiwiZ2V0Q29tbWFuZHMiLCJ2ZiIsIl9mcGdtU3RhdGUiLCJfcHJlcFN0YXRlIiwiX2Vycm9yU3RhdGUiLCJOYiIsIk9iIiwic2lnbiIsIlBiIiwiUWIiLCJSYiIsIlNiIiwiVGIiLCJheGlzIiwic2xvcGUiLCJub3JtYWxTbG9wZSIsImZyZWV6ZSIsIlViIiwieGYiLCJ5ZiIsIlZiIiwieG8iLCJ5byIsInByZXZQb2ludE9uQ29udG91ciIsIm5leHRQb2ludE9uQ29udG91ciIsInhUb3VjaGVkIiwieVRvdWNoZWQiLCJwcmV2ZW50RXh0ZW5zaW9ucyIsIldiIiwiZW52Iiwic3RhY2siLCJwcm9nIiwienAwIiwienAxIiwienAyIiwicnAwIiwicnAxIiwicnAyIiwiZnYiLCJwdiIsImRwdiIsIlhiIiwidFpvbmUiLCJnWm9uZSIsIlliIiwiaXAiLCJaYiIsIkRFQlVHIiwiJGIiLCJfYiIsImFjIiwiejIiLCJ6MSIsImJjIiwieGMiLCJHYyIsInowIiwiZGlzdGFuY2UiLCJ6ZiIsInNldFJlbGF0aXZlIiwidG91Y2giLCJIYyIsInRvdWNoZWQiLCJwcmV2VG91Y2hlZCIsIm5leHRUb3VjaGVkIiwiaW50ZXJwb2xhdGUiLCJJYyIsIkpjIiwiY29udG91cnMiLCJLYyIsIk5jIiwiUWMiLCJjdnQiLCJjdkN1dEluIiwiWGMiLCJZYyIsIm1kIiwicHBlbSIsImRlbHRhQmFzZSIsImRlbHRhU2hpZnQiLCJ4ZCIsInpkIiwiR2QiLCJOZCIsIk9kIiwiUGQiLCJtaW5EaXMiLCJRZCIsImVtcHR5IiwiZmFtaWx5TmFtZSIsInN0eWxlTmFtZSIsInVuaXRzUGVyRW0iLCJhc2NlbmRlciIsImRlc2NlbmRlciIsImZvbnRGYW1pbHkiLCJlbiIsImZvbnRTdWJmYW1pbHkiLCJmdWxsTmFtZSIsInBvc3RTY3JpcHROYW1lIiwiZGVzaWduZXIiLCJkZXNpZ25lclVSTCIsIm1hbnVmYWN0dXJlciIsIm1hbnVmYWN0dXJlclVSTCIsImxpY2Vuc2UiLCJsaWNlbnNlVVJMIiwiZGVzY3JpcHRpb24iLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJjcmVhdGVkVGltZXN0YW1wIiwib3MyIiwidXNXZWlnaHRDbGFzcyIsIndlaWdodENsYXNzIiwidXNXZWlnaHRDbGFzc2VzIiwiTUVESVVNIiwidXNXaWR0aENsYXNzIiwid2lkdGhDbGFzcyIsInVzV2lkdGhDbGFzc2VzIiwiZnNTZWxlY3Rpb24iLCJmc1NlbGVjdGlvblZhbHVlcyIsIlJFR1VMQVIiLCJTZSIsIkdseXBoU2V0Iiwic3Vic3RpdHV0aW9uIiwiX2hpbnRpbmciLCJvdXRsaW5lc0Zvcm1hdCIsIlJkIiwiU2QiLCJUZCIsInBhcnNlVGFnIiwicGFyc2VGaXhlZCIsInNraXAiLCJVZCIsImNvb3JkaW5hdGVzIiwiVmQiLCJjZSIsInJlYWRGaWxlIiwibWVzc2FnZSIsImVlIiwiZ2V0VGFnIiwiZ2V0VUxvbmciLCJjaGVja3N1bSIsImNvbXByZXNzaW9uIiwiZ2UiLCJjb21wcmVzc2VkTGVuZ3RoIiwid2UiLCJoZSIsImdldFVTaG9ydCIsImZlIiwiTWUiLCJwYXJzZSIsInBhcnNlU2hvcnRMaXN0IiwiZnBnbSIsInBhcnNlQnl0ZUxpc3QiLCJoZWFkIiwiV2UiLCJpbmRleFRvTG9jRm9ybWF0IiwiaGhlYSIsIlhlIiwibnVtYmVyT2ZITWV0cmljcyIsIlplIiwibWF4cCIsIiRlIiwibnVtR2x5cGhzIiwiamYiLCJwb3N0Iiwia2YiLCJnbHlwaE5hbWVzIiwicHJlcCIsImdmIiwiSGYiLCJWZSIsIlllIiwiZ2x5cGhJbmRleE1hcCIsImFkZFVuaWNvZGUiLCJjZmZFbmNvZGluZyIsImdseXBoSW5kZXhUb05hbWUiLCJrZXJuaW5nUGFpcnMiLCJHZiIsImdwb3MiLCJGZiIsImluaXQiLCJnc3ViIiwib2YiLCJmdmFyIiwiQ2YiLCJtZXRhIiwicGYiLCJtZXRhcyIsImNvZGVQb2ludEF0IiwibWUiLCJuZSIsImlzRW1wdHkiLCJhZGRQb2ludCIsImFkZFgiLCJhZGRZIiwiYWRkQmV6aWVyIiwiYWRkUXVhZCIsImJlemllckN1cnZlVG8iLCJxdWFkVG8iLCJnZXRCb3VuZGluZ0JveCIsImRyYXciLCJiZWdpblBhdGgiLCJmaWxsU3R5bGUiLCJzdHJva2VTdHlsZSIsImxpbmVXaWR0aCIsInRvUGF0aERhdGEiLCJ0b1NWRyIsInRvRE9NRWxlbWVudCIsInplIiwiQWUiLCJCZSIsIkNlIiwiQllURSIsIkNIQVIiLCJDSEFSQVJSQVkiLCJVU0hPUlQiLCJTSE9SVCIsIlVJTlQyNCIsIlVMT05HIiwiTE9ORyIsIkZJWEVEIiwiRldPUkQiLCJVRldPUkQiLCJMT05HREFURVRJTUUiLCJUQUciLCJDYXJkOCIsIkNhcmQxNiIsIk9mZlNpemUiLCJTSUQiLCJOVU1CRVIiLCJOVU1CRVIxNiIsIk5VTUJFUjMyIiwiUkVBTCIsIk5BTUUiLCJTVFJJTkciLCJVVEY4IiwiVVRGMTYiLCJEZSIsIngtbWFjLWNyb2F0aWFuIiwieC1tYWMtY3lyaWxsaWMiLCJ4LW1hYy1nYWVsaWMiLCJ4LW1hYy1ncmVlayIsIngtbWFjLWljZWxhbmRpYyIsIngtbWFjLWludWl0IiwieC1tYWMtY2UiLCJtYWNpbnRvc2giLCJ4LW1hYy1yb21hbmlhbiIsIngtbWFjLXR1cmtpc2giLCJNQUNTVFJJTkciLCJFZSIsIkZlIiwiV2Vha01hcCIsIkdlIiwiVkFSREVMVEFTIiwiSU5ERVgiLCJPQkpFQ1QiLCJESUNUIiwiT1BFUkFORCIsIk9QRVJBVE9SIiwiT1AiLCJIZSIsIkNIQVJTVFJJTkciLCJUQUJMRSIsIlJFQ09SRCIsIkxJVEVSQUwiLCJDb3ZlcmFnZSIsIlNjcmlwdExpc3QiLCJGZWF0dXJlTGlzdCIsIkxvb2t1cExpc3QiLCJ1c2hvcnRMaXN0IiwidGFibGVMaXN0IiwicmVjb3JkTGlzdCIsIkplIiwiYnl0ZSIsInVTaG9ydCIsInNob3J0IiwidUxvbmciLCJmaXhlZCIsImxvbmdEYXRlVGltZSIsImdldEludDgiLCJwYXJzZUNhcmQ4IiwicGFyc2VDYXJkMTYiLCJwYXJzZVNJRCIsInBhcnNlT2Zmc2V0MTYiLCJwYXJzZVVMb25nIiwicGFyc2VPZmZzZXQzMiIsInBhcnNlU3RyaW5nIiwicGFyc2VMb25nRGF0ZVRpbWUiLCJwYXJzZVZlcnNpb24iLCJwYXJzZVVMb25nTGlzdCIsInBhcnNlT2Zmc2V0MTZMaXN0IiwicGFyc2VVU2hvcnRMaXN0IiwicGFyc2VMaXN0IiwicGFyc2VMaXN0MzIiLCJwYXJzZVJlY29yZExpc3QiLCJwYXJzZVJlY29yZExpc3QzMiIsInBhcnNlU3RydWN0IiwicGFyc2VWYWx1ZVJlY29yZCIsInhQbGFjZW1lbnQiLCJ5UGxhY2VtZW50IiwieEFkdmFuY2UiLCJ5QWR2YW5jZSIsInhQbGFEZXZpY2UiLCJ5UGxhRGV2aWNlIiwieEFkdkRldmljZSIsInlBZHZEZXZpY2UiLCJwYXJzZVZhbHVlUmVjb3JkTGlzdCIsInBhcnNlUG9pbnRlciIsInBhcnNlUG9pbnRlcjMyIiwicGFyc2VMaXN0T2ZMaXN0cyIsInBhcnNlQ292ZXJhZ2UiLCJyYW5nZXMiLCJwYXJzZUNsYXNzRGVmIiwic3RhcnRHbHlwaCIsImNsYXNzZXMiLCJjbGFzc0lkIiwibGlzdCIsImxpc3QzMiIsInJlY29yZExpc3QzMiIsInBvaW50ZXIiLCJwb2ludGVyMzIiLCJvZmZzZXQxNiIsInVTaG9ydExpc3QiLCJvZmZzZXQzMiIsInVMb25nTGlzdCIsInN0cnVjdCIsImNvdmVyYWdlIiwiY2xhc3NEZWYiLCJLZSIsInJlc2VydmVkIiwicGFyc2VTY3JpcHRMaXN0IiwicGFyc2VGZWF0dXJlTGlzdCIsInBhcnNlTG9va3VwTGlzdCIsIm1hcmtGaWx0ZXJpbmdTZXQiLCJwYXJzZUZlYXR1cmVWYXJpYXRpb25zTGlzdCIsImNvbmRpdGlvblNldE9mZnNldCIsImZlYXR1cmVUYWJsZVN1YnN0aXR1dGlvbk9mZnNldCIsImdldENhcmQ4IiwiZ2V0U2hvcnQiLCJnZXRGaXhlZCIsImJ5dGVzVG9TdHJpbmciLCJsYW5ndWFnZSIsImdyb3VwQ291bnQiLCJzZWdDb3VudCIsIm1ha2UiLCJ1bmljb2RlIiwidW5pY29kZXMiLCJnbHlwaElkIiwic2VnQ291bnRYMiIsImNtYXA0TGVuZ3RoIiwiY21hcDEyT2Zmc2V0IiwiT2UiLCJQZSIsIm5hbWVUb0dseXBoSW5kZXgiLCJSZSIsImxpbmUiLCJ4TWluIiwieU1pbiIsInhNYXgiLCJ5TWF4IiwiaGludGluZyIsImdldENvbnRvdXJzIiwibGVmdFNpZGVCZWFyaW5nIiwicmlnaHRTaWRlQmVhcmluZyIsImRyYXdQb2ludHMiLCJhcmMiLCJkcmF3TWV0cmljcyIsImdseXBoTG9hZGVyIiwidHRmR2x5cGhMb2FkZXIiLCJjZmZHbHlwaExvYWRlciIsImZvcm1hdE1ham9yIiwiZm9ybWF0TWlub3IiLCJvZmZzZXRTaXplIiwicm9zIiwiZmRBcnJheSIsImZkU2VsZWN0IiwieWEiLCJzdWJyc0JpYXMiLCJjaGFyU3RyaW5ncyIsIm5HbHlwaHMiLCJ2YSIsIndhIiwid2VpZ2h0Iiwid2VpZ2h0TmFtZSIsImZvbnRCQm94IiwiZm9udE1hdHJpeCIsImhlYWRlciIsIm5hbWVJbmRleCIsIkNhIiwidG9wRGljdEluZGV4IiwiZ2xvYmFsU3VickluZGV4IiwiY2hhcnNldHMiLCJJYSIsImNoYXJTdHJpbmdzSW5kZXgiLCJLYSIsInByaXZhdGVEaWN0IiwiTGEiLCJzdHJpbmdJbmRleCIsInN0cmluZ3MiLCJHYSIsImZvbnRSZXZpc2lvbiIsImNoZWNrU3VtQWRqdXN0bWVudCIsIm1hZ2ljTnVtYmVyIiwiZmxhZ3MiLCJjcmVhdGVkIiwibW9kaWZpZWQiLCJtYWNTdHlsZSIsImxvd2VzdFJlY1BQRU0iLCJmb250RGlyZWN0aW9uSGludCIsImdseXBoRGF0YUZvcm1hdCIsImdldFRpbWUiLCJsaW5lR2FwIiwiYWR2YW5jZVdpZHRoTWF4IiwibWluTGVmdFNpZGVCZWFyaW5nIiwibWluUmlnaHRTaWRlQmVhcmluZyIsInhNYXhFeHRlbnQiLCJjYXJldFNsb3BlUmlzZSIsImNhcmV0U2xvcGVSdW4iLCJjYXJldE9mZnNldCIsIm1ldHJpY0RhdGFGb3JtYXQiLCJtYXhQb2ludHMiLCJtYXhDb250b3VycyIsIm1heENvbXBvc2l0ZVBvaW50cyIsIm1heENvbXBvc2l0ZUNvbnRvdXJzIiwibWF4Wm9uZXMiLCJtYXhUd2lsaWdodFBvaW50cyIsIm1heFN0b3JhZ2UiLCJtYXhGdW5jdGlvbkRlZnMiLCJtYXhJbnN0cnVjdGlvbkRlZnMiLCJtYXhTdGFja0VsZW1lbnRzIiwibWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zIiwibWF4Q29tcG9uZW50RWxlbWVudHMiLCJtYXhDb21wb25lbnREZXB0aCIsIl9lIiwiMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSIsIjIwIiwiMjEiLCIyMiIsIjIzIiwiMjQiLCIyNSIsIjI2IiwiMjciLCIyOCIsIjI5IiwiMzAiLCIzMSIsIjMyIiwiMzMiLCIzNCIsIjM1IiwiMzYiLCIzNyIsIjM4IiwiMzkiLCI0MCIsIjQxIiwiNDIiLCI0MyIsIjQ0IiwiNDUiLCI0NiIsIjQ3IiwiNDgiLCI0OSIsIjUwIiwiNTEiLCI1MiIsIjUzIiwiNTQiLCI1NSIsIjU2IiwiNTciLCI1OCIsIjU5IiwiNjAiLCI2MSIsIjYyIiwiNjMiLCI2NCIsIjY1IiwiNjYiLCI2NyIsIjY4IiwiNjkiLCI3MCIsIjcxIiwiNzIiLCI3MyIsIjc0IiwiNzUiLCI3NiIsIjc3IiwiNzgiLCI3OSIsIjgwIiwiODEiLCI4MiIsIjgzIiwiODQiLCI4NSIsIjg2IiwiODciLCI4OCIsIjg5IiwiOTAiLCI5MSIsIjkyIiwiOTMiLCI5NCIsIjEyOCIsIjEyOSIsIjEzMCIsIjEzMSIsIjEzMiIsIjEzMyIsIjEzNCIsIjEzNSIsIjEzNiIsIjEzNyIsIjEzOCIsIjEzOSIsIjE0MCIsIjE0MSIsIjE0MiIsIjE0MyIsIjE0NCIsIjE0NSIsIjE0NiIsIjE0NyIsIjE0OCIsIjE0OSIsIjE1MCIsIjE1MSIsImJmIiwiMTA3OCIsIjEwNTIiLCIxMTU2IiwiMTExOCIsIjUxMjEiLCIxNTM2MSIsIjMwNzMiLCIyMDQ5IiwiMTEyNjUiLCIxMzMxMyIsIjEyMjg5IiwiNDA5NyIsIjYxNDUiLCI4MTkzIiwiMTYzODUiLCIxMDI1IiwiMTAyNDEiLCI3MTY5IiwiMTQzMzciLCI5MjE3IiwiMTA2NyIsIjExMDEiLCIyMDkyIiwiMTA2OCIsIjExMzMiLCIxMDY5IiwiMTA1OSIsIjIxMTciLCIxMDkzIiwiODIxOCIsIjUxNDYiLCIxMTUwIiwiMTAyNiIsIjEwMjciLCIzMDc2IiwiNTEyNCIsIjIwNTIiLCI0MTAwIiwiMTAyOCIsIjExNTUiLCIxMDUwIiwiNDEyMiIsIjEwMjkiLCIxMDMwIiwiMTE2NCIsIjExMjUiLCIyMDY3IiwiMTA0MyIsIjMwODEiLCIxMDI0OSIsIjQxMDUiLCI5MjI1IiwiMTYzOTMiLCI2MTUzIiwiODIwMSIsIjE3NDE3IiwiNTEyOSIsIjEzMzIxIiwiMTg0NDEiLCI3MTc3IiwiMTEyNzMiLCIyMDU3IiwiMTAzMyIsIjEyMjk3IiwiMTA2MSIsIjEwODAiLCIxMTI0IiwiMTAzNSIsIjIwNjAiLCIzMDg0IiwiMTAzNiIsIjUxMzIiLCI2MTU2IiwiNDEwOCIsIjExMjIiLCIxMTEwIiwiMTA3OSIsIjMwNzkiLCIxMDMxIiwiNTEyNyIsIjQxMDMiLCIyMDU1IiwiMTAzMiIsIjExMzUiLCIxMDk1IiwiMTEyOCIsIjEwMzciLCIxMDgxIiwiMTAzOCIsIjEwMzkiLCIxMTM2IiwiMTA1NyIsIjExMTciLCIyMTQxIiwiMjEwOCIsIjEwNzYiLCIxMDc3IiwiMTA0MCIsIjIwNjQiLCIxMDQxIiwiMTA5OSIsIjEwODciLCIxMTA3IiwiMTE1OCIsIjExNTkiLCIxMDg5IiwiMTExMSIsIjEwNDIiLCIxMDg4IiwiMTEwOCIsIjEwNjIiLCIxMDYzIiwiMjA5NCIsIjExMzQiLCIxMDcxIiwiMjExMCIsIjEwODYiLCIxMTAwIiwiMTA4MiIsIjExNTMiLCIxMTQ2IiwiMTEwMiIsIjExNDgiLCIxMTA0IiwiMjEyOCIsIjExMjEiLCIxMDQ0IiwiMjA2OCIsIjExNTQiLCIxMDk2IiwiMTEyMyIsIjEwNDUiLCIxMDQ2IiwiMjA3MCIsIjEwOTQiLCIxMTMxIiwiMjE1NSIsIjMxNzkiLCIxMDQ4IiwiMTA0NyIsIjEwNDkiLCI5Mjc1IiwiNDE1NSIsIjUxNzkiLCIzMTMxIiwiMTA4MyIsIjIxMDciLCI4MjUxIiwiNjIwMyIsIjcyMjciLCIxMTAzIiwiNzE5NCIsIjMwOTgiLCI2MTcwIiwiMjA3NCIsIjExMzIiLCIxMDc0IiwiMTExNSIsIjEwNTEiLCIxMDYwIiwiMTEyNzQiLCIxNjM5NCIsIjEzMzIyIiwiOTIyNiIsIjUxMzAiLCI3MTc4IiwiMTIyOTgiLCIxNzQxOCIsIjQxMDYiLCIxODQ0MiIsIjIwNTgiLCIxOTQ2NiIsIjYxNTQiLCIxNTM3MCIsIjEwMjUwIiwiMjA0OTAiLCIzMDgyIiwiMTAzNCIsIjIxNTE0IiwiMTQzNDYiLCI4MjAyIiwiMjA3NyIsIjEwNTMiLCIxMTE0IiwiMTA2NCIsIjIxNDMiLCIxMDk3IiwiMTA5MiIsIjEwOTgiLCIxMDU0IiwiMTEwNSIsIjEwNTUiLCIxMDkwIiwiMTE1MiIsIjEwNTgiLCIxMDcwIiwiMTA1NiIsIjIxMTUiLCIxMDkxIiwiMTA2NiIsIjExMDYiLCIxMTYwIiwiMTE1NyIsIjExNDQiLCIxMTMwIiwicGxhdGZvcm1JRCIsImVuY29kaW5nSUQiLCJsYW5ndWFnZUlEIiwibmFtZUlEIiwiaGYiLCJiZWdpbiIsInhBdmdDaGFyV2lkdGgiLCJmc1R5cGUiLCJ5U3Vic2NyaXB0WFNpemUiLCJ5U3Vic2NyaXB0WVNpemUiLCJ5U3Vic2NyaXB0WE9mZnNldCIsInlTdWJzY3JpcHRZT2Zmc2V0IiwieVN1cGVyc2NyaXB0WFNpemUiLCJ5U3VwZXJzY3JpcHRZU2l6ZSIsInlTdXBlcnNjcmlwdFhPZmZzZXQiLCJ5U3VwZXJzY3JpcHRZT2Zmc2V0IiwieVN0cmlrZW91dFNpemUiLCJ5U3RyaWtlb3V0UG9zaXRpb24iLCJzRmFtaWx5Q2xhc3MiLCJwYW5vc2UiLCJ1bFVuaWNvZGVSYW5nZTEiLCJ1bFVuaWNvZGVSYW5nZTIiLCJ1bFVuaWNvZGVSYW5nZTMiLCJ1bFVuaWNvZGVSYW5nZTQiLCJhY2hWZW5kSUQiLCJ1c0ZpcnN0Q2hhckluZGV4IiwidXNMYXN0Q2hhckluZGV4Iiwic1R5cG9Bc2NlbmRlciIsInNUeXBvRGVzY2VuZGVyIiwic1R5cG9MaW5lR2FwIiwidXNXaW5Bc2NlbnQiLCJ1c1dpbkRlc2NlbnQiLCJ1bENvZGVQYWdlUmFuZ2UxIiwidWxDb2RlUGFnZVJhbmdlMiIsInN4SGVpZ2h0Iiwic0NhcEhlaWdodCIsInVzRGVmYXVsdENoYXIiLCJ1c0JyZWFrQ2hhciIsInVzTWF4Q29udGVudCIsInVuaWNvZGVSYW5nZXMiLCJnZXRVbmljb2RlUmFuZ2UiLCJpdGFsaWNBbmdsZSIsInVuZGVybGluZVBvc2l0aW9uIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwiaXNGaXhlZFBpdGNoIiwibWluTWVtVHlwZTQyIiwibWF4TWVtVHlwZTQyIiwibWluTWVtVHlwZTEiLCJtYXhNZW1UeXBlMSIsImxmIiwiZGVsdGFHbHlwaElkIiwic3Vic3RpdHV0ZSIsInNlcXVlbmNlcyIsImFsdGVybmF0ZVNldHMiLCJsaWdhdHVyZVNldHMiLCJsaWdHbHlwaCIsIm1mIiwic2VxdWVuY2VJbmRleCIsImxvb2t1cExpc3RJbmRleCIsInJ1bGVTZXRzIiwibG9va3VwUmVjb3JkcyIsImNsYXNzU2V0cyIsImNvdmVyYWdlcyIsImNoYWluUnVsZVNldHMiLCJiYWNrdHJhY2siLCJsb29rYWhlYWQiLCJiYWNrdHJhY2tDbGFzc0RlZiIsImlucHV0Q2xhc3NEZWYiLCJsb29rYWhlYWRDbGFzc0RlZiIsImNoYWluQ2xhc3NTZXQiLCJiYWNrdHJhY2tDb3ZlcmFnZSIsImlucHV0Q292ZXJhZ2UiLCJsb29rYWhlYWRDb3ZlcmFnZSIsInN1YnN0aXR1dGVzIiwibmYiLCJzY3JpcHRzIiwiZmVhdHVyZXMiLCJsb29rdXBzIiwidmFyaWF0aW9ucyIsInFmIiwiZm9udFRvVGFibGUiLCJhZHZhbmNlV2lkdGhBdmciLCJyYiIsIm1heExlZnRTaWRlQmVhcmluZyIsImhhc0NoYXIiLCJnZXRFbmdsaXNoTmFtZSIsInVuaXF1ZUlEIiwicHJlZmVycmVkRmFtaWx5IiwicHJlZmVycmVkU3ViZmFtaWx5IiwiY29tcHV0ZUNoZWNrU3VtIiwic2VhcmNoVGFnIiwiYmluU2VhcmNoIiwiZ2V0VGFibGUiLCJjcmVhdGVEZWZhdWx0VGFibGUiLCJnZXRTY3JpcHROYW1lcyIsImdldERlZmF1bHRTY3JpcHROYW1lIiwiZ2V0U2NyaXB0VGFibGUiLCJnZXRMYW5nU3lzVGFibGUiLCJnZXRGZWF0dXJlVGFibGUiLCJnZXRMb29rdXBUYWJsZXMiLCJnZXRHbHlwaENsYXNzIiwiZ2V0Q292ZXJhZ2VJbmRleCIsImV4cGFuZENvdmVyYWdlIiwiZGVmYXVsdEtlcm5pbmdUYWJsZXMiLCJnZXRLZXJuaW5nVGFibGVzIiwiZ2V0S2VybmluZ1ZhbHVlIiwicG9zRm9ybWF0IiwicGFpclNldHMiLCJzZWNvbmRHbHlwaCIsInZhbHVlMSIsImNsYXNzRGVmMSIsImNsYXNzRGVmMiIsImNsYXNzUmVjb3JkcyIsImdldFNpbmdsZSIsInN1YiIsImJ5IiwiZ2V0QWx0ZXJuYXRlcyIsImdldExpZ2F0dXJlcyIsImFkZFNpbmdsZSIsImFkZEFsdGVybmF0ZSIsImFkZExpZ2F0dXJlIiwiZ2V0RmVhdHVyZSIsInJmIiwic2YiLCJ0ZiIsInVmIiwid2YiLCJzclBlcmlvZCIsInNyUGhhc2UiLCJzclRocmVzaG9sZCIsInRydW5jIiwiTkVHQVRJVkVfSU5GSU5JVFkiLCJ1bnRvdWNoIiwiUE9TSVRJVkVfSU5GSU5JVFkiLCJBZiIsImF1dG9GbGlwIiwiZnVuY3MiLCJpbmhpYml0R3JpZEZpdCIsInN0b3JlIiwiaWdub3JlQ3Z0IiwiQmYiLCJjaGFyVG9HbHlwaCIsInN0cmluZ1RvR2x5cGhzIiwiZGVmYXVsdFJlbmRlck9wdGlvbnMiLCJsaWdhIiwicmxpZyIsIm5hbWVUb0dseXBoIiwia2VybmluZyIsImZvckVhY2hHbHlwaCIsImxldHRlclNwYWNpbmciLCJ0cmFja2luZyIsImdldFBhdGhzIiwiZ2V0QWR2YW5jZVdpZHRoIiwidmFsaWRhdGUiLCJ0b1RhYmxlcyIsInRvQnVmZmVyIiwicmVxdWVzdEZpbGVTeXN0ZW0iLCJ3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbSIsIlRFTVBPUkFSWSIsInJvb3QiLCJnZXRGaWxlIiwiY3JlYXRlV3JpdGVyIiwidG9VUkwiLCJ3cml0ZUZpbGVTeW5jIiwiSVRBTElDIiwiVU5ERVJTQ09SRSIsIk5FR0FUSVZFIiwiT1VUTElORUQiLCJTVFJJS0VPVVQiLCJCT0xEIiwiVVNFUl9UWVBPX01FVFJJQ1MiLCJXV1MiLCJPQkxJUVVFIiwiVUxUUkFfQ09OREVOU0VEIiwiRVhUUkFfQ09OREVOU0VEIiwiQ09OREVOU0VEIiwiU0VNSV9DT05ERU5TRUQiLCJTRU1JX0VYUEFOREVEIiwiRVhQQU5ERUQiLCJFWFRSQV9FWFBBTkRFRCIsIlVMVFJBX0VYUEFOREVEIiwiVEhJTiIsIkVYVFJBX0xJR0hUIiwiTElHSFQiLCJOT1JNQUwiLCJTRU1JX0JPTEQiLCJFWFRSQV9CT0xEIiwiQkxBQ0siLCJheGVzIiwiaW5zdGFuY2VzIiwib2Zmc2V0VG9EYXRhIiwiRGYiLCJ2YWx1ZUZvcm1hdDEiLCJ2YWx1ZUZvcm1hdDIiLCJ2YWx1ZTIiLCJjbGFzczFDb3VudCIsImNsYXNzMkNvdW50IiwiRWYiLCIkZCIsIl9kIiwiRm9udCIsIkdseXBoIiwiUGF0aCIsIkJvdW5kaW5nQm94IiwiX3BhcnNlIiwic3RhdHVzVGV4dCIsImxvYWRTeW5jIiwicmVhZEZpbGVTeW5jIiwiZnMiLCJydW4iLCJmdW4iLCJ0aXRsZSIsImJyb3dzZXIiLCJhcmd2IiwidmVyc2lvbnMiLCJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImxpc3RlbmVycyIsImJpbmRpbmciLCJjd2QiLCJjaGRpciIsInVtYXNrIiwiaXRlcmFibGUiLCJhcHBlbmQiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiYm9keVVzZWQiLCJyZWFkQXNBcnJheUJ1ZmZlciIsIl9pbml0Qm9keSIsIl9ib2R5SW5pdCIsIl9ib2R5VGV4dCIsImlzUHJvdG90eXBlT2YiLCJfYm9keUJsb2IiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiX2JvZHlGb3JtRGF0YSIsInNlYXJjaFBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsImFycmF5QnVmZmVyIiwiX2JvZHlBcnJheUJ1ZmZlciIsImhlYWRlcnMiLCJ0ZXh0IiwicmVhZEFzVGV4dCIsImJvZHkiLCJjcmVkZW50aWFscyIsInRvVXBwZXJDYXNlIiwicmVmZXJyZXIiLCJkZWNvZGVVUklDb21wb25lbnQiLCJmZXRjaCIsImlzVmlldyIsImRlbGV0ZSIsImVudHJpZXMiLCJjbG9uZSIsInJlZGlyZWN0IiwiSGVhZGVycyIsIlJlcXVlc3QiLCJSZXNwb25zZSIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VUZXh0Iiwib250aW1lb3V0Iiwid2l0aENyZWRlbnRpYWxzIiwic2V0UmVxdWVzdEhlYWRlciIsIi4vY29sb3IvY29sb3JfY29udmVyc2lvbiIsIi4vY29sb3IvY3JlYXRpbmdfcmVhZGluZyIsIi4vY29sb3IvcDUuQ29sb3IiLCIuL2NvbG9yL3NldHRpbmciLCIuL2NvcmUvY29uc3RhbnRzIiwiLi9jb3JlL2Vudmlyb25tZW50IiwiLi9jb3JlL2Vycm9yX2hlbHBlcnMiLCIuL2NvcmUvaGVscGVycyIsIi4vY29yZS9pbml0IiwiLi9jb3JlL2xlZ2FjeSIsIi4vY29yZS9tYWluIiwiLi9jb3JlL3A1LkVsZW1lbnQiLCIuL2NvcmUvcDUuR3JhcGhpY3MiLCIuL2NvcmUvcDUuUmVuZGVyZXIiLCIuL2NvcmUvcDUuUmVuZGVyZXIyRCIsIi4vY29yZS9yZW5kZXJpbmciLCIuL2NvcmUvc2hhcGUvMmRfcHJpbWl0aXZlcyIsIi4vY29yZS9zaGFwZS9hdHRyaWJ1dGVzIiwiLi9jb3JlL3NoYXBlL2N1cnZlcyIsIi4vY29yZS9zaGFwZS92ZXJ0ZXgiLCIuL2NvcmUvc2hpbSIsIi4vY29yZS9zdHJ1Y3R1cmUiLCIuL2NvcmUvdHJhbnNmb3JtIiwiLi9kYXRhL3A1LlR5cGVkRGljdCIsIi4vZXZlbnRzL2FjY2VsZXJhdGlvbiIsIi4vZXZlbnRzL2tleWJvYXJkIiwiLi9ldmVudHMvbW91c2UiLCIuL2V2ZW50cy90b3VjaCIsIi4vaW1hZ2UvZmlsdGVycyIsIi4vaW1hZ2UvaW1hZ2UiLCIuL2ltYWdlL2xvYWRpbmdfZGlzcGxheWluZyIsIi4vaW1hZ2UvcDUuSW1hZ2UiLCIuL2ltYWdlL3BpeGVscyIsIi4vaW8vZmlsZXMiLCIuL2lvL3A1LlRhYmxlIiwiLi9pby9wNS5UYWJsZVJvdyIsIi4vaW8vcDUuWE1MIiwiLi9tYXRoL2NhbGN1bGF0aW9uIiwiLi9tYXRoL21hdGgiLCIuL21hdGgvbm9pc2UiLCIuL21hdGgvcDUuVmVjdG9yIiwiLi9tYXRoL3JhbmRvbSIsIi4vbWF0aC90cmlnb25vbWV0cnkiLCIuL3R5cG9ncmFwaHkvYXR0cmlidXRlcyIsIi4vdHlwb2dyYXBoeS9sb2FkaW5nX2Rpc3BsYXlpbmciLCIuL3R5cG9ncmFwaHkvcDUuRm9udCIsIi4vdXRpbGl0aWVzL2FycmF5X2Z1bmN0aW9ucyIsIi4vdXRpbGl0aWVzL2NvbnZlcnNpb24iLCIuL3V0aWxpdGllcy9zdHJpbmdfZnVuY3Rpb25zIiwiLi91dGlsaXRpZXMvdGltZV9kYXRlIiwiLi93ZWJnbC8zZF9wcmltaXRpdmVzIiwiLi93ZWJnbC9pbnRlcmFjdGlvbiIsIi4vd2ViZ2wvbGlnaHQiLCIuL3dlYmdsL2xvYWRpbmciLCIuL3dlYmdsL21hdGVyaWFsIiwiLi93ZWJnbC9wNS5DYW1lcmEiLCIuL3dlYmdsL3A1Lkdlb21ldHJ5IiwiLi93ZWJnbC9wNS5NYXRyaXgiLCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wiLCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuSW1tZWRpYXRlIiwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLlJldGFpbmVkIiwiLi93ZWJnbC9wNS5TaGFkZXIiLCIuL3dlYmdsL3A1LlRleHR1cmUiLCIuL3dlYmdsL3RleHQiLCJDb2xvckNvbnZlcnNpb24iLCJfaHNiYVRvSFNMQSIsIl9oc2JhVG9SR0JBIiwiX2hzbGFUb0hTQkEiLCJfaHNsYVRvUkdCQSIsIl9yZ2JhVG9IU0JBIiwiX3JnYmFUb0hTTEEiLCIuLi9jb3JlL21haW4iLCJhbHBoYSIsIl92YWxpZGF0ZVBhcmFtZXRlcnMiLCJjb2xvciIsIl9nZXRBbHBoYSIsImJsdWUiLCJfZ2V0Qmx1ZSIsImJyaWdodG5lc3MiLCJfZ2V0QnJpZ2h0bmVzcyIsIkNvbG9yIiwiZ3JlZW4iLCJfZ2V0R3JlZW4iLCJodWUiLCJfZ2V0SHVlIiwibGVycENvbG9yIiwiX2NvbG9yTW9kZSIsIl9jb2xvck1heGVzIiwiUkdCIiwibGV2ZWxzIiwiSFNCIiwiaHNiYSIsIkhTTCIsIl9nZXRMaWdodG5lc3MiLCJoc2xhIiwibGVycCIsImxpZ2h0bmVzcyIsInJlZCIsIl9nZXRSZWQiLCJzYXR1cmF0aW9uIiwiX2dldFNhdHVyYXRpb24iLCIuLi9jb3JlL2NvbnN0YW50cyIsIi4uL2NvcmUvZXJyb3JfaGVscGVycyIsIi4vcDUuQ29sb3IiLCJfc3RvcmVNb2RlQW5kTWF4ZXMiLCJfYXJyYXkiLCJfcGFyc2VJbnB1dHMiLCJfY2FsY3VsYXRlTGV2ZWxzIiwidG9QcmVjaXNpb24iLCJtYXhlcyIsInNldFJlZCIsInNldEdyZWVuIiwic2V0Qmx1ZSIsInNldEFscGhhIiwiX2dldE1vZGUiLCJfZ2V0TWF4ZXMiLCJhbGljZWJsdWUiLCJhbnRpcXVld2hpdGUiLCJhcXVhIiwiYXF1YW1hcmluZSIsImF6dXJlIiwiYmVpZ2UiLCJiaXNxdWUiLCJibGFjayIsImJsYW5jaGVkYWxtb25kIiwiYmx1ZXZpb2xldCIsImJ1cmx5d29vZCIsImNhZGV0Ymx1ZSIsImNoYXJ0cmV1c2UiLCJjaG9jb2xhdGUiLCJjb3JhbCIsImNvcm5mbG93ZXJibHVlIiwiY29ybnNpbGsiLCJjcmltc29uIiwiY3lhbiIsImRhcmtibHVlIiwiZGFya2N5YW4iLCJkYXJrZ29sZGVucm9kIiwiZGFya2dyYXkiLCJkYXJrZ3JlZW4iLCJkYXJrZ3JleSIsImRhcmtraGFraSIsImRhcmttYWdlbnRhIiwiZGFya29saXZlZ3JlZW4iLCJkYXJrb3JhbmdlIiwiZGFya29yY2hpZCIsImRhcmtyZWQiLCJkYXJrc2FsbW9uIiwiZGFya3NlYWdyZWVuIiwiZGFya3NsYXRlYmx1ZSIsImRhcmtzbGF0ZWdyYXkiLCJkYXJrc2xhdGVncmV5IiwiZGFya3R1cnF1b2lzZSIsImRhcmt2aW9sZXQiLCJkZWVwcGluayIsImRlZXBza3libHVlIiwiZGltZ3JheSIsImRpbWdyZXkiLCJkb2RnZXJibHVlIiwiZmlyZWJyaWNrIiwiZmxvcmFsd2hpdGUiLCJmb3Jlc3RncmVlbiIsImZ1Y2hzaWEiLCJnYWluc2Jvcm8iLCJnaG9zdHdoaXRlIiwiZ29sZCIsImdvbGRlbnJvZCIsImdyYXkiLCJncmVlbnllbGxvdyIsImdyZXkiLCJob25leWRldyIsImhvdHBpbmsiLCJpbmRpYW5yZWQiLCJpbmRpZ28iLCJpdm9yeSIsImtoYWtpIiwibGF2ZW5kZXIiLCJsYXZlbmRlcmJsdXNoIiwibGF3bmdyZWVuIiwibGVtb25jaGlmZm9uIiwibGlnaHRibHVlIiwibGlnaHRjb3JhbCIsImxpZ2h0Y3lhbiIsImxpZ2h0Z29sZGVucm9keWVsbG93IiwibGlnaHRncmF5IiwibGlnaHRncmVlbiIsImxpZ2h0Z3JleSIsImxpZ2h0cGluayIsImxpZ2h0c2FsbW9uIiwibGlnaHRzZWFncmVlbiIsImxpZ2h0c2t5Ymx1ZSIsImxpZ2h0c2xhdGVncmF5IiwibGlnaHRzbGF0ZWdyZXkiLCJsaWdodHN0ZWVsYmx1ZSIsImxpZ2h0eWVsbG93IiwibGltZSIsImxpbWVncmVlbiIsImxpbmVuIiwibWFnZW50YSIsIm1hcm9vbiIsIm1lZGl1bWFxdWFtYXJpbmUiLCJtZWRpdW1ibHVlIiwibWVkaXVtb3JjaGlkIiwibWVkaXVtcHVycGxlIiwibWVkaXVtc2VhZ3JlZW4iLCJtZWRpdW1zbGF0ZWJsdWUiLCJtZWRpdW1zcHJpbmdncmVlbiIsIm1lZGl1bXR1cnF1b2lzZSIsIm1lZGl1bXZpb2xldHJlZCIsIm1pZG5pZ2h0Ymx1ZSIsIm1pbnRjcmVhbSIsIm1pc3R5cm9zZSIsIm1vY2Nhc2luIiwibmF2YWpvd2hpdGUiLCJuYXZ5Iiwib2xkbGFjZSIsIm9saXZlIiwib2xpdmVkcmFiIiwib3JhbmdlIiwib3JhbmdlcmVkIiwib3JjaGlkIiwicGFsZWdvbGRlbnJvZCIsInBhbGVncmVlbiIsInBhbGV0dXJxdW9pc2UiLCJwYWxldmlvbGV0cmVkIiwicGFwYXlhd2hpcCIsInBlYWNocHVmZiIsInBlcnUiLCJwbHVtIiwicG93ZGVyYmx1ZSIsInB1cnBsZSIsInJvc3licm93biIsInJveWFsYmx1ZSIsInNhZGRsZWJyb3duIiwic2FsbW9uIiwic2FuZHlicm93biIsInNlYWdyZWVuIiwic2Vhc2hlbGwiLCJzaWVubmEiLCJzaWx2ZXIiLCJza3libHVlIiwic2xhdGVibHVlIiwic2xhdGVncmF5Iiwic2xhdGVncmV5Iiwic25vdyIsInNwcmluZ2dyZWVuIiwic3RlZWxibHVlIiwidGFuIiwidGVhbCIsInRoaXN0bGUiLCJ0b21hdG8iLCJ0dXJxdW9pc2UiLCJ2aW9sZXQiLCJ3aGVhdCIsIndoaXRlc21va2UiLCJ5ZWxsb3ciLCJ5ZWxsb3dncmVlbiIsIlJlZ0V4cCIsIkhFWDMiLCJIRVg0IiwiSEVYNiIsIkhFWDgiLCJSR0JfUEVSQ0VOVCIsIlJHQkEiLCJSR0JBX1BFUkNFTlQiLCJIU0xBIiwiSFNCQSIsIi4vY29sb3JfY29udmVyc2lvbiIsImJhY2tncm91bmQiLCJJbWFnZSIsImltYWdlIiwiX3JlbmRlcmVyIiwiY29sb3JNb2RlIiwiX3NldFByb3BlcnR5Iiwibm9GaWxsIiwibm9TdHJva2UiLCJQMkQiLCJXRUJHTCIsIkFSUk9XIiwiQ1JPU1MiLCJIQU5EIiwiTU9WRSIsIlRFWFQiLCJXQUlUIiwiSEFMRl9QSSIsIlFVQVJURVJfUEkiLCJUQVUiLCJUV09fUEkiLCJERUdSRUVTIiwiUkFESUFOUyIsIkRFR19UT19SQUQiLCJSQURfVE9fREVHIiwiQ09STkVSIiwiQ09STkVSUyIsIlJBRElVUyIsIlJJR0hUIiwiTEVGVCIsIkNFTlRFUiIsIlRPUCIsIkJPVFRPTSIsIkJBU0VMSU5FIiwiUE9JTlRTIiwiTElORVMiLCJMSU5FX1NUUklQIiwiTElORV9MT09QIiwiVFJJQU5HTEVTIiwiVFJJQU5HTEVfRkFOIiwiVFJJQU5HTEVfU1RSSVAiLCJRVUFEUyIsIlFVQURfU1RSSVAiLCJDTE9TRSIsIk9QRU4iLCJDSE9SRCIsIlBJRSIsIlBST0pFQ1QiLCJTUVVBUkUiLCJST1VORCIsIkJFVkVMIiwiTUlURVIiLCJBVVRPIiwiQUxUIiwiQkFDS1NQQUNFIiwiQ09OVFJPTCIsIkRFTEVURSIsIkRPV05fQVJST1ciLCJFTlRFUiIsIkVTQ0FQRSIsIkxFRlRfQVJST1ciLCJPUFRJT04iLCJSRVRVUk4iLCJSSUdIVF9BUlJPVyIsIlNISUZUIiwiVEFCIiwiVVBfQVJST1ciLCJCTEVORCIsIkFERCIsIkRBUktFU1QiLCJMSUdIVEVTVCIsIkRJRkZFUkVOQ0UiLCJFWENMVVNJT04iLCJNVUxUSVBMWSIsIlNDUkVFTiIsIlJFUExBQ0UiLCJPVkVSTEFZIiwiSEFSRF9MSUdIVCIsIlNPRlRfTElHSFQiLCJET0RHRSIsIkJVUk4iLCJUSFJFU0hPTEQiLCJHUkFZIiwiT1BBUVVFIiwiSU5WRVJUIiwiUE9TVEVSSVpFIiwiRElMQVRFIiwiRVJPREUiLCJCTFVSIiwiX0RFRkFVTFRfVEVYVF9GSUxMIiwiX0RFRkFVTFRfTEVBRE1VTFQiLCJfQ1RYX01JRERMRSIsIkxJTkVBUiIsIlFVQURSQVRJQyIsIkJFWklFUiIsIkNVUlZFIiwiU1RST0tFIiwiRklMTCIsIlRFWFRVUkUiLCJJTU1FRElBVEUiLCJORUFSRVNUIiwiUkVQRUFUIiwiQ0xBTVAiLCJNSVJST1IiLCJMQU5EU0NBUEUiLCJQT1JUUkFJVCIsIl9ERUZBVUxUX1NUUk9LRSIsIl9ERUZBVUxUX0ZJTEwiLCJHUklEIiwiQVhFUyIsImlubmVyV2lkdGgiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRXaWR0aCIsImlubmVySGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiX2ZyYW1lUmF0ZSIsIl9sYXN0RnJhbWVUaW1lIiwicGVyZm9ybWFuY2UiLCJfdGFyZ2V0RnJhbWVSYXRlIiwicHJpbnQiLCJmcmFtZUNvdW50IiwiZm9jdXNlZCIsImhhc0ZvY3VzIiwiY3Vyc29yIiwiX2N1ckVsZW1lbnQiLCJlbHQiLCJzdHlsZSIsImZyYW1lUmF0ZSIsIl9ydW5GcmFtZXMiLCJnZXRGcmFtZVJhdGUiLCJzZXRGcmFtZVJhdGUiLCJub0N1cnNvciIsImRpc3BsYXlXaWR0aCIsInNjcmVlbiIsImRpc3BsYXlIZWlnaHQiLCJ3aW5kb3dXaWR0aCIsIndpbmRvd0hlaWdodCIsIl9vbnJlc2l6ZSIsIl9pc0dsb2JhbCIsIndpbmRvd1Jlc2l6ZWQiLCJwcmV2ZW50RGVmYXVsdCIsImZ1bGxzY3JlZW4iLCJmdWxsc2NyZWVuRWxlbWVudCIsIndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50IiwibW96RnVsbFNjcmVlbkVsZW1lbnQiLCJtc0Z1bGxzY3JlZW5FbGVtZW50IiwiZnVsbHNjcmVlbkVuYWJsZWQiLCJ3ZWJraXRGdWxsc2NyZWVuRW5hYmxlZCIsIm1vekZ1bGxTY3JlZW5FbmFibGVkIiwibXNGdWxsc2NyZWVuRW5hYmxlZCIsInJlcXVlc3RGdWxsc2NyZWVuIiwibW96UmVxdWVzdEZ1bGxTY3JlZW4iLCJ3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiIsIm1zUmVxdWVzdEZ1bGxzY3JlZW4iLCJleGl0RnVsbHNjcmVlbiIsIm1vekNhbmNlbEZ1bGxTY3JlZW4iLCJ3ZWJraXRFeGl0RnVsbHNjcmVlbiIsIm1zRXhpdEZ1bGxzY3JlZW4iLCJwaXhlbERlbnNpdHkiLCJfcGl4ZWxEZW5zaXR5IiwiX3BpeGVsc0RpcnR5IiwicmVzaXplQ2FudmFzIiwiZGlzcGxheURlbnNpdHkiLCJkZXZpY2VQaXhlbFJhdGlvIiwiZ2V0VVJMIiwiZ2V0VVJMUGF0aCIsInBhdGhuYW1lIiwiZ2V0VVJMUGFyYW1zIiwibGFzdEluZGV4IiwiLi9jb25zdGFudHMiLCIuL21haW4iLCJfZnJpZW5kbHlGaWxlTG9hZEVycm9yIiwic29tZSIsIl9oZWxwRm9yTWlzdXNlZEF0VG9wTGV2ZWxDb2RlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIi4uLy4uL2RvY3MvcmVmZXJlbmNlL2RhdGEuanNvbiIsIm1vZGVBZGp1c3QiLCJtb2NoYSIsInNldHVwIiwiaW5zdGFuY2UiLCJleGl0IiwicHVzaFN0eWxlIiwicG9wU3R5bGUiLCJfc2V0dXBEb25lIiwiX3VzZXJOb2RlIiwiX2VsZW1lbnRzIiwiX3JlcXVlc3RBbmltSWQiLCJfcHJlbG9hZENvdW50IiwiX2luaXRpYWxpemVJbnN0YW5jZVZhcmlhYmxlcyIsIl9kZWZhdWx0Q2FudmFzU2l6ZSIsIm1vdXNlbW92ZSIsIm1vdXNlZG93biIsIm1vdXNldXAiLCJkcmFnZW5kIiwiZHJhZ292ZXIiLCJjbGljayIsImRibGNsaWNrIiwibW91c2VvdmVyIiwibW91c2VvdXQiLCJrZXlkb3duIiwia2V5dXAiLCJrZXlwcmVzcyIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIsInJlc2l6ZSIsImJsdXIiLCJ3aGVlbCIsIl9sb2FkaW5nU2NyZWVuSWQiLCJfcmVnaXN0ZXJlZE1ldGhvZHMiLCJEZXZpY2VPcmllbnRhdGlvbkV2ZW50IiwiZGV2aWNlb3JpZW50YXRpb24iLCJEZXZpY2VNb3Rpb25FdmVudCIsIl9pc05vZGVXZWJraXQiLCJkZXZpY2Vtb3Rpb24iLCJwcmVsb2FkIiwiaW5uZXJIVE1MIiwiX3ByZWxvYWRNZXRob2RzIiwiX3dyYXBQcmVsb2FkIiwiX3JlZ2lzdGVyZWRQcmVsb2FkTWV0aG9kcyIsIl9ydW5JZlByZWxvYWRzQXJlRG9uZSIsIl9zZXR1cCIsIl9kcmF3IiwicGFyZW50Tm9kZSIsIl9kZWNyZW1lbnRQcmVsb2FkIiwiX2luY3JlbWVudFByZWxvYWQiLCJjcmVhdGVDYW52YXMiLCJkYXRhc2V0IiwiaGlkZGVuIiwidmlzaWJpbGl0eSIsInJlZHJhdyIsIl91cGRhdGVNb3VzZUNvb3JkcyIsImNsZWFySW50ZXJ2YWwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsIl9jcmVhdGVGcmllbmRseUdsb2JhbEZ1bmN0aW9uQmluZGVyIiwicGFzc2l2ZSIsInJlZ2lzdGVyTWV0aG9kIiwiX3N0eWxlcyIsIl9iZXppZXJEZXRhaWwiLCJfY3VydmVEZXRhaWwiLCJyZ2IiLCJoc2IiLCJoc2wiLCJkaXNhYmxlRnJpZW5kbHlFcnJvcnMiLCJsb2FkSlNPTiIsImxvYWRJbWFnZSIsImxvYWRTdHJpbmdzIiwibG9hZFhNTCIsImxvYWRCeXRlcyIsImxvYWRUYWJsZSIsImxvYWRGb250IiwibG9hZE1vZGVsIiwibG9hZFNoYWRlciIsInByZSIsInJlZ2lzdGVyUHJlbG9hZE1ldGhvZCIsImdsb2JhbE9iamVjdCIsIi4vc2hpbSIsIkVsZW1lbnQiLCJfcEluc3QiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImNsYXNzIiwibW91c2VQcmVzc2VkIiwiX3NldE1vdXNlQnV0dG9uIiwiZG91YmxlQ2xpY2tlZCIsIm1vdXNlV2hlZWwiLCJtb3VzZVJlbGVhc2VkIiwibW91c2VDbGlja2VkIiwibW91c2VNb3ZlZCIsIm1vdXNlT3ZlciIsImNoYW5nZWQiLCJtb3VzZU91dCIsInRvdWNoU3RhcnRlZCIsInRvdWNoTW92ZWQiLCJ0b3VjaEVuZGVkIiwiZHJhZ092ZXIiLCJkcmFnTGVhdmUiLCJkcm9wIiwiRmlsZSIsInRhcmdldCIsIkZpbGVMaXN0Iiwic3RvcFByb3BhZ2F0aW9uIiwiZGF0YVRyYW5zZmVyIiwiZmlsZXMiLCJHcmFwaGljcyIsImNhbnZhcyIsIlJlbmRlcmVyR0wiLCJSZW5kZXJlcjJEIiwiX2FwcGx5RGVmYXVsdHMiLCJvZmZzZXRQYXJlbnQiLCJvZmZzZXRMZWZ0Iiwib2Zmc2V0VG9wIiwiUmVuZGVyZXIiLCJfaXNNYWluQ2FudmFzIiwiZGlzcGxheSIsIl90ZXh0U2l6ZSIsIl90ZXh0TGVhZGluZyIsIl90ZXh0Rm9udCIsIl90ZXh0U3R5bGUiLCJfdGV4dEFzY2VudCIsIl90ZXh0RGVzY2VudCIsIl90ZXh0QWxpZ24iLCJfdGV4dEJhc2VsaW5lIiwiX3JlY3RNb2RlIiwiX2VsbGlwc2VNb2RlIiwiX2N1cnZlVGlnaHRuZXNzIiwiX2ltYWdlTW9kZSIsIl90aW50IiwiX2RvU3Ryb2tlIiwiX2RvRmlsbCIsIl9zdHJva2VTZXQiLCJfZmlsbFNldCIsInByb3BlcnRpZXMiLCJ0ZXh0TGVhZGluZyIsInRleHRTaXplIiwiX2FwcGx5VGV4dFByb3BlcnRpZXMiLCJ0ZXh0U3R5bGUiLCJ0ZXh0QXNjZW50IiwiX3VwZGF0ZVRleHRNZXRyaWNzIiwidGV4dERlc2NlbnQiLCJ0ZXh0QWxpZ24iLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJNQVhfVkFMVUUiLCJ0ZXh0V2lkdGgiLCJfcmVuZGVyVGV4dCIsIl9pc09wZW5UeXBlIiwiZm9udFNpemUiLCJvdmVyZmxvdyIsInZlcnRpY2FsQWxpZ24iLCJkcmF3aW5nQ29udGV4dCIsIl9jYWNoZWRGaWxsU3R5bGUiLCJfY2FjaGVkU3Ryb2tlU3R5bGUiLCJfc2V0RmlsbCIsIl9zZXRTdHJva2UiLCJsaW5lQ2FwIiwic2NhbGUiLCJzYXZlIiwicmVzZXRNYXRyaXgiLCJfZ2V0RmlsbCIsImZpbGxSZWN0IiwicmVzdG9yZSIsImNsZWFyUmVjdCIsIk1lZGlhRWxlbWVudCIsImxvYWRQaXhlbHMiLCJfZ2V0VGludGVkSW1hZ2VDYW52YXMiLCJkcmF3SW1hZ2UiLCJfdG9QaXhlbHMiLCJjcmVhdGVJbWFnZURhdGEiLCJwdXRJbWFnZURhdGEiLCJibGVuZE1vZGUiLCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCJibGVuZCIsIl9jb3B5SGVscGVyIiwiZ2V0SW1hZ2VEYXRhIiwicGl4ZWxzIiwic2V0VHJhbnNmb3JtIiwiaW1hZ2VEYXRhIiwidXBkYXRlUGl4ZWxzIiwiX2FjdXRlQXJjVG9CZXppZXIiLCJheSIsImN5IiwiZWxsaXBzZSIsIl9nZXRTdHJva2UiLCJ0cmFuc2xhdGUiLCJxdWFkIiwicmVjdCIsImFyY1RvIiwidHJpYW5nbGUiLCJlbmRTaGFwZSIsIlBPTFlHT04iLCJfZG9GaWxsU3Ryb2tlQ2xvc2UiLCJpc1ZlcnQiLCJub1Ntb290aCIsImltYWdlU21vb3RoaW5nRW5hYmxlZCIsInNtb290aCIsInN0cm9rZUNhcCIsInN0cm9rZUpvaW4iLCJsaW5lSm9pbiIsInN0cm9rZVdlaWdodCIsImJlemllciIsImJlZ2luU2hhcGUiLCJ2ZXJ0ZXgiLCJiZXppZXJWZXJ0ZXgiLCJjdXJ2ZVZlcnRleCIsImFwcGx5TWF0cml4IiwidHJhbnNmb3JtIiwicm90YXRlIiwic2hlYXJYIiwic2hlYXJZIiwiVmVjdG9yIiwidGV4dEJhc2VsaW5lIiwiX3JlbmRlclBhdGgiLCJyZW5kZXJlciIsInN0cm9rZVRleHQiLCJmaWxsVGV4dCIsIl90ZXh0V2lkdGgiLCJtZWFzdXJlVGV4dCIsIi4uL2ltYWdlL2ZpbHRlcnMiLCIuL3A1LlJlbmRlcmVyIiwiY2xhc3NMaXN0IiwiX2RlZmF1bHRHcmFwaGljc0NyZWF0ZWQiLCJub0NhbnZhcyIsImNyZWF0ZUdyYXBoaWNzIiwiLi4vd2ViZ2wvcDUuUmVuZGVyZXJHTCIsIi4vcDUuR3JhcGhpY3MiLCIuL3A1LlJlbmRlcmVyMkQiLCJfdG9SYWRpYW5zIiwiYXRhbiIsIi4uL2NvbnN0YW50cyIsIi4uL2Vycm9yX2hlbHBlcnMiLCIuLi9oZWxwZXJzIiwiLi4vbWFpbiIsImVsbGlwc2VNb2RlIiwicmVjdE1vZGUiLCJiZXppZXJEZXRhaWwiLCJiZXppZXJQb2ludCIsImJlemllclRhbmdlbnQiLCJjdXJ2ZURldGFpbCIsImN1cnZlVGlnaHRuZXNzIiwiY3VydmVQb2ludCIsImN1cnZlVGFuZ2VudCIsImJlZ2luQ29udG91ciIsImlzUDNEIiwiZW5kQ29udG91ciIsInF1YWRyYXRpY1ZlcnRleCIsIl9jb250b3VySW5pdGVkIiwieDMiLCJ5MyIsIl9jb250b3VyVmVydGljZXMiLCJ3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJvUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwibXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm5vTG9vcCIsInByb3BzIiwiX3VwZGF0ZSIsInBvcE1hdHJpeCIsInByaW50TWF0cml4IiwicHVzaE1hdHJpeCIsInJvdGF0ZVgiLCJfYXNzZXJ0M2QiLCJyb3RhdGVZIiwicm90YXRlWiIsImNyZWF0ZVN0cmluZ0RpY3QiLCJTdHJpbmdEaWN0IiwiY3JlYXRlTnVtYmVyRGljdCIsIk51bWJlckRpY3QiLCJUeXBlZERpY3QiLCJoYXNLZXkiLCJfdmFsaWRhdGUiLCJfYWRkT2JqIiwic2F2ZVRhYmxlIiwiZG93bmxvYWRGaWxlIiwic2F2ZUpTT04iLCJkaXYiLCJfdmFsdWVUZXN0IiwiX2tleVRlc3QiLCJtaW5LZXkiLCJtYXhLZXkiLCJkZXZpY2VPcmllbnRhdGlvbiIsImFjY2VsZXJhdGlvblgiLCJhY2NlbGVyYXRpb25ZIiwiYWNjZWxlcmF0aW9uWiIsInBBY2NlbGVyYXRpb25YIiwicEFjY2VsZXJhdGlvblkiLCJwQWNjZWxlcmF0aW9uWiIsIl91cGRhdGVQQWNjZWxlcmF0aW9ucyIsInJvdGF0aW9uWCIsInJvdGF0aW9uWSIsInJvdGF0aW9uWiIsInBSb3RhdGlvblgiLCJwUm90YXRpb25ZIiwicFJvdGF0aW9uWiIsIl91cGRhdGVQUm90YXRpb25zIiwidHVybkF4aXMiLCJzZXRNb3ZlVGhyZXNob2xkIiwic2V0U2hha2VUaHJlc2hvbGQiLCJfb25kZXZpY2VvcmllbnRhdGlvbiIsImJldGEiLCJnYW1tYSIsIl9oYW5kbGVNb3Rpb24iLCJfb25kZXZpY2Vtb3Rpb24iLCJhY2NlbGVyYXRpb24iLCJvcmllbnRhdGlvbiIsImRldmljZU1vdmVkIiwiZGV2aWNlVHVybmVkIiwiZGV2aWNlU2hha2VuIiwiaXNLZXlQcmVzc2VkIiwia2V5SXNQcmVzc2VkIiwia2V5Q29kZSIsIl9vbmtleWRvd24iLCJ3aGljaCIsImtleVByZXNzZWQiLCJjaGFyQ29kZSIsIl9vbmtleXVwIiwia2V5UmVsZWFzZWQiLCJfb25rZXlwcmVzcyIsIl9sYXN0S2V5Q29kZVR5cGVkIiwia2V5VHlwZWQiLCJfb25ibHVyIiwia2V5SXNEb3duIiwiX2hhc01vdXNlSW50ZXJhY3RlZCIsIm1vdXNlWCIsIm1vdXNlWSIsInBtb3VzZVgiLCJwbW91c2VZIiwid2luTW91c2VYIiwid2luTW91c2VZIiwicHdpbk1vdXNlWCIsInB3aW5Nb3VzZVkiLCJtb3VzZUJ1dHRvbiIsIm1vdXNlSXNQcmVzc2VkIiwiX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyIsInRvdWNoZXMiLCJjbGllbnRYIiwiY2hhbmdlZFRvdWNoZXMiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxXaWR0aCIsInNjcm9sbEhlaWdodCIsImNsaWVudFkiLCJ0b3AiLCJ3aW5YIiwid2luWSIsImlkZW50aWZpZXIiLCJfbW91c2VXaGVlbERlbHRhWSIsImJ1dHRvbiIsIl9vbm1vdXNlbW92ZSIsIm1vdXNlRHJhZ2dlZCIsIl9vbm1vdXNlZG93biIsIl9vbm1vdXNldXAiLCJfb25kcmFnZW5kIiwiX29uZHJhZ292ZXIiLCJfb25jbGljayIsIl9vbmRibGNsaWNrIiwiX3Btb3VzZVdoZWVsRGVsdGFZIiwiX29ud2hlZWwiLCJkZWx0YVkiLCJfdXBkYXRlVG91Y2hDb29yZHMiLCJfb250b3VjaHN0YXJ0IiwiX29udG91Y2htb3ZlIiwiX29udG91Y2hlbmQiLCJJbnQzMkFycmF5IiwiX2dldEFSR0IiLCJfc2V0UGl4ZWxzIiwiSW1hZ2VEYXRhIiwiX3RvSW1hZ2VEYXRhIiwiX2NyZWF0ZUltYWdlRGF0YSIsIl90bXBDYW52YXMiLCJfdG1wQ3R4Iiwib3BhcXVlIiwiaW52ZXJ0IiwicG9zdGVyaXplIiwiZGlsYXRlIiwiZXJvZGUiLCJjcmVhdGVJbWFnZSIsInNhdmVDYW52YXMiLCJIVE1MQ2FudmFzRWxlbWVudCIsIl9jaGVja0ZpbGVFeHRlbnNpb24iLCJ0b0Jsb2IiLCJzYXZlRnJhbWVzIiwiY29uc3RyYWluIiwiX21ha2VGcmFtZSIsInNldEludGVydmFsIiwiZmlsZW5hbWUiLCJleHQiLCJ0b0RhdGFVUkwiLCJjcm9zc09yaWdpbiIsInZpZGVvV2lkdGgiLCJ2aWRlb0hlaWdodCIsInRpbnQiLCJub1RpbnQiLCJpbWFnZU1vZGUiLCIuLi9jb3JlL2hlbHBlcnMiLCIuL2ZpbHRlcnMiLCJfbW9kaWZpZWQiLCJzZXRNb2RpZmllZCIsIm1hc2siLCJpc01vZGlmaWVkIiwiLi4vY29sb3IvcDUuQ29sb3IiLCJodHRwRG8iLCJsYXN0SW5kZXhPZiIsImN1cnJlbnRTdGF0ZSIsInRva2VuIiwiZXNjYXBlZCIsImNvbHVtbnMiLCJUYWJsZVJvdyIsIm9iaiIsImFkZFJvdyIsImJ5dGVzIiwiaHR0cEdldCIsImh0dHBQb3N0IiwiQ29udGVudC1UeXBlIiwiWE1MIiwiY2hpbGROb2RlcyIsImFkZENoaWxkIiwic2V0TmFtZSIsIm5vZGVOYW1lIiwiX3NldENvbnQiLCJ0ZXh0Q29udGVudCIsIl9zZXRBdHRyaWJ1dGVzIiwiY2hpbGRyZW4iLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJfcFdyaXRlcnMiLCJQcmludFdyaXRlciIsIm1pbGxpcyIsIndyaXRlRmlsZSIsInNhdmVTdHJpbmdzIiwiU291bmRGaWxlIiwic2F2ZVNvdW5kIiwic2F2ZUpTT05PYmplY3QiLCJzYXZlSlNPTkFycmF5Iiwicm93cyIsImdldFN0cmluZyIsIl9pc1NhZmFyaSIsIm9uY2xpY2siLCJhbGVydCIsImVzNi1wcm9taXNlIiwiZmV0Y2gtanNvbnAiLCJmaWxlLXNhdmVyIiwid2hhdHdnLWZldGNoIiwicmVtb3ZlUm93IiwiZ2V0Um93IiwiZ2V0Um93cyIsImZpbmRSb3ciLCJmaW5kUm93cyIsIm1hdGNoUm93IiwibWF0Y2hSb3dzIiwiZ2V0Q29sdW1uIiwiY2xlYXJSb3dzIiwiYWRkQ29sdW1uIiwiZ2V0Q29sdW1uQ291bnQiLCJnZXRSb3dDb3VudCIsInJlbW92ZVRva2VucyIsInJlbW92ZUNvbHVtbiIsInNldE51bSIsInNldFN0cmluZyIsImdldE51bSIsImdldE9iamVjdCIsImdldEFycmF5IiwiYXR0cmlidXRlcyIsImdldFBhcmVudCIsImdldE5hbWUiLCJoYXNDaGlsZHJlbiIsImxpc3RDaGlsZHJlbiIsImdldENoaWxkcmVuIiwiZ2V0Q2hpbGQiLCJnZXRBdHRyaWJ1dGVDb3VudCIsImxpc3RBdHRyaWJ1dGVzIiwiaGFzQXR0cmlidXRlIiwiZ2V0Q29udGVudCIsInNldENvbnRlbnQiLCJub2RlVmFsdWUiLCJoeXBvdCIsIm1hZyIsIm5vcm0iLCJzcSIsImNyZWF0ZVZlY3RvciIsIm5vaXNlRGV0YWlsIiwibm9pc2VTZWVkIiwic2V0U2VlZCIsImdldFNlZWQiLCJwNSIsIm1hZ1NxIiwiY3Jvc3MiLCJub3JtYWxpemUiLCJsaW1pdCIsInNldE1hZyIsImhlYWRpbmciLCJhdGFuMiIsIl9mcm9tUmFkaWFucyIsImFuZ2xlQmV0d2VlbiIsImFjb3MiLCJmcm9tQW5nbGUiLCJmcm9tQW5nbGVzIiwicmFuZG9tMkQiLCJyYW5kb20zRCIsInJhbmRvbVNlZWQiLCJyYW5kb21HYXVzc2lhbiIsIl9hbmdsZU1vZGUiLCJhc2luIiwiZGVncmVlcyIsInJhZGlhbnMiLCJhbmdsZU1vZGUiLCJfdG9EZWdyZWVzIiwidGV4dEZvbnQiLCJvcGVudHlwZS5qcyIsInNhbXBsZUZhY3RvciIsInNpbXBsaWZ5VGhyZXNob2xkIiwidG1wUG9pbnQxIiwidG1wUG9pbnQyIiwicXgiLCJxeSIsImNhY2hlIiwidGV4dEJvdW5kcyIsImFkdmFuY2UiLCJfaGFuZGxlQWxpZ25tZW50IiwidGV4dFRvUG9pbnRzIiwiX2dldEdseXBocyIsIl9nZXRQYXRoIiwiX2dldFBhdGhEYXRhIiwiZGVjaW1hbHMiLCJfZ2V0U1ZHIiwiYXJyYXlDb3B5Iiwic2hvcnRlbiIsInNodWZmbGUiLCJzdWJzZXQiLCJmbG9hdCIsImludCIsInN0ciIsImJvb2xlYW4iLCJjaGFyIiwidW5jaGFyIiwiaGV4IiwidW5oZXgiLCJtYXRjaEFsbCIsIm5mYyIsIm5mcCIsIm5mcyIsInNwbGl0VG9rZW5zIiwiZGF5IiwiZ2V0RGF0ZSIsImhvdXIiLCJnZXRIb3VycyIsIm1pbnV0ZSIsImdldE1pbnV0ZXMiLCJtb250aCIsImdldE1vbnRoIiwic2Vjb25kIiwiZ2V0U2Vjb25kcyIsInllYXIiLCJnZXRGdWxsWWVhciIsInBsYW5lIiwiZ2VvbWV0cnlJbkhhc2giLCJHZW9tZXRyeSIsImRldGFpbFkiLCJkZXRhaWxYIiwidmVydGljZXMiLCJ1dnMiLCJjb21wdXRlRmFjZXMiLCJjb21wdXRlTm9ybWFscyIsIl9tYWtlVHJpYW5nbGVFZGdlcyIsIl9lZGdlc1RvVmVydGljZXMiLCJkcmF3QnVmZmVyc1NjYWxlZCIsImJveCIsInBlclBpeGVsTGlnaHRpbmciLCJzdHJva2VJbmRpY2VzIiwiZmFjZXMiLCJzcGhlcmUiLCJlbGxpcHNvaWQiLCJ2ZXJ0ZXhOb3JtYWxzIiwiY3lsaW5kZXIiLCJjb25lIiwidG9ydXMiLCJfdXNlUG9pbnRTaGFkZXIiLCJjdXJQb2ludFNoYWRlciIsImJpbmRTaGFkZXIiLCJfZHJhd1BvaW50cyIsIl9wb2ludFZlcnRleEJ1ZmZlciIsInVuYmluZFNoYWRlciIsInVNVk1hdHJpeCIsIk1hdHJpeCIsImRyYXdCdWZmZXJzIiwiaW1tZWRpYXRlTW9kZSIsIl9iZXppZXJWZXJ0ZXgiLCJfbG9va1VwVGFibGVCZXppZXIiLCJfbHV0QmV6aWVyRGV0YWlsIiwiX2JlemllckNvZWZmaWNpZW50cyIsImlzQmV6aWVyIiwiX3F1YWRyYXRpY1ZlcnRleCIsIl9sb29rVXBUYWJsZVF1YWRyYXRpYyIsIl9sdXRRdWFkcmF0aWNEZXRhaWwiLCJfcXVhZHJhdGljQ29lZmZpY2llbnRzIiwiaXNRdWFkcmF0aWMiLCJfY3VydmVWZXJ0ZXgiLCJpc0N1cnZlIiwiX2JlemllclRvQ2F0bXVsbCIsIi4vcDUuR2VvbWV0cnkiLCJvcmJpdENvbnRyb2wiLCJfY3VyQ2FtZXJhIiwiY29udGV4dE1lbnVEaXNhYmxlZCIsIm9uY29udGV4dG1lbnUiLCJ3aGVlbERlZmF1bHREaXNhYmxlZCIsIm9ud2hlZWwiLCJfb3JiaXQiLCJfZ2V0TG9jYWxBeGVzIiwiZXllWCIsImV5ZVkiLCJleWVaIiwiZGVidWdNb2RlIiwiX2dyaWQiLCJfYXhlc0ljb24iLCJub0RlYnVnTW9kZSIsImN1clN0cm9rZUNvbG9yIiwiY2FtZXJhTWF0cml4IiwibWF0NCIsImFtYmllbnRMaWdodCIsIl91c2VMaWdodFNoYWRlciIsInNldFVuaWZvcm0iLCJjdXJGaWxsQ29sb3IiLCJhbWJpZW50TGlnaHRDb2xvcnMiLCJkaXJlY3Rpb25hbExpZ2h0IiwiZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbnMiLCJkaXJlY3Rpb25hbExpZ2h0Q29sb3JzIiwicG9pbnRMaWdodCIsInBvaW50TGlnaHRQb3NpdGlvbnMiLCJwb2ludExpZ2h0Q29sb3JzIiwiZ2lkIiwidnQiLCJ2biIsIm1vZGVsIiwiU2hhZGVyIiwiX2ZyYWdTcmMiLCJfdmVydFNyYyIsImNyZWF0ZVNoYWRlciIsInNoYWRlciIsImlzU3Ryb2tlU2hhZGVyIiwic2V0U3Ryb2tlU2hhZGVyIiwic2V0RmlsbFNoYWRlciIsIm5vcm1hbE1hdGVyaWFsIiwiZHJhd01vZGUiLCJfZ2V0Tm9ybWFsU2hhZGVyIiwidGV4dHVyZSIsImFtYmllbnRNYXRlcmlhbCIsInNwZWN1bGFyTWF0ZXJpYWwiLCJfYXBwbHlDb2xvckJsZW5kIiwiR0wiLCJkZXB0aE1hc2siLCJlbmFibGUiLCJibGVuZEVxdWF0aW9uIiwiRlVOQ19BREQiLCJibGVuZEZ1bmMiLCJTUkNfQUxQSEEiLCJPTkVfTUlOVVNfU1JDX0FMUEhBIiwiZGlzYWJsZSIsIi4vcDUuVGV4dHVyZSIsImNhbWVyYSIsInBlcnNwZWN0aXZlIiwib3J0aG8iLCJjcmVhdGVDYW1lcmEiLCJDYW1lcmEiLCJfY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncyIsIl9zZXREZWZhdWx0Q2FtZXJhIiwiY2FtZXJhVHlwZSIsInByb2pNYXRyaXgiLCJkZWZhdWx0Q2FtZXJhRk9WIiwiY2FtZXJhRk9WIiwiZGVmYXVsdEFzcGVjdFJhdGlvIiwiZGVmYXVsdENhbWVyYU5lYXIiLCJkZWZhdWx0Q2FtZXJhRmFyIiwiYXNwZWN0UmF0aW8iLCJjYW1lcmFOZWFyIiwiY2FtZXJhRmFyIiwiaWRlbnRpdHkiLCJfaXNBY3RpdmUiLCJ1UE1hdHJpeCIsIl9yb3RhdGVWaWV3IiwiY2VudGVyWCIsImNlbnRlclkiLCJjZW50ZXJaIiwidGlsdCIsImxvb2tBdCIsImRlZmF1bHRFeWVYIiwiZGVmYXVsdEV5ZVkiLCJkZWZhdWx0RXllWiIsIm1vdmUiLCJkZWZhdWx0Q2VudGVyWCIsImRlZmF1bHRDZW50ZXJZIiwiZGVmYXVsdENlbnRlcloiLCJfcmVzaXplIiwic2V0Q2FtZXJhIiwibGluZVZlcnRpY2VzIiwibGluZU5vcm1hbHMiLCJlZGdlcyIsIl9nZXRGYWNlTm9ybWFsIiwiYXZlcmFnZU5vcm1hbHMiLCJhdmVyYWdlUG9sZU5vcm1hbHMiLCJtYXQzIiwiaW52ZXJ0M3gzIiwidHJhbnNwb3NlM3gzIiwiaW52ZXJzZVRyYW5zcG9zZSIsImRldGVybWluYW50Iiwic2hhcGVNb2RlIiwidmVydGV4Q29sb3JzIiwidXZDb29yZHMiLCJ2ZXJ0ZXhCdWZmZXIiLCJjb2xvckJ1ZmZlciIsInV2QnVmZmVyIiwibGluZVZlcnRleEJ1ZmZlciIsImxpbmVOb3JtYWxCdWZmZXIiLCJwb2ludFZlcnRleEJ1ZmZlciIsImlzSW1tZWRpYXRlRHJhd2luZyIsIl91c2VJbW1lZGlhdGVNb2RlU2hhZGVyIiwiX2RyYXdTdHJva2VJbW1lZGlhdGVNb2RlIiwiX3ZUb05BcnJheSIsIl90cmlhbmd1bGF0ZSIsIl9kcmF3RmlsbEltbWVkaWF0ZU1vZGUiLCJjdXJGaWxsU2hhZGVyIiwiYVBvc2l0aW9uIiwiX2JpbmRCdWZmZXIiLCJBUlJBWV9CVUZGRVIiLCJEWU5BTUlDX0RSQVciLCJlbmFibGVBdHRyaWIiLCJGTE9BVCIsImFWZXJ0ZXhDb2xvciIsImFUZXhDb29yZCIsImRyYXdBcnJheXMiLCJjdXJTdHJva2VTaGFkZXIiLCJfZmxhdHRlbiIsIlNUQVRJQ19EUkFXIiwiYURpcmVjdGlvbiIsIl9pbml0QnVmZmVyRGVmYXVsdHMiLCJfZnJlZUJ1ZmZlcnMiLCJnSGFzaCIsImRlbGV0ZUJ1ZmZlciIsIm5vcm1hbEJ1ZmZlciIsImluZGV4QnVmZmVyIiwibnVtYmVyT2ZJdGVtcyIsImxpbmVWZXJ0ZXhDb3VudCIsIl91c2VDb2xvclNoYWRlciIsIkVMRU1FTlRfQVJSQVlfQlVGRkVSIiwiYU5vcm1hbCIsIl9kcmF3QXJyYXlzIiwiX2RyYXdFbGVtZW50cyIsImRyYXdFbGVtZW50cyIsIlVOU0lHTkVEX1NIT1JUIiwiUG9pbnRzIiwiaW1tZWRpYXRlVmVydCIsInZlcnRleENvbG9yVmVydCIsInZlcnRleENvbG9yRnJhZyIsIm5vcm1hbFZlcnQiLCJub3JtYWxGcmFnIiwiYmFzaWNGcmFnIiwibGlnaHRWZXJ0IiwibGlnaHRUZXh0dXJlRnJhZyIsInBob25nVmVydCIsInBob25nRnJhZyIsImZvbnRWZXJ0IiwiZm9udEZyYWciLCJsaW5lVmVydCIsImxpbmVGcmFnIiwicG9pbnRWZXJ0IiwicG9pbnRGcmFnIiwic3RlbmNpbCIsImFudGlhbGlhcyIsInByZW11bHRpcGxpZWRBbHBoYSIsInByZXNlcnZlRHJhd2luZ0J1ZmZlciIsIl9pbml0Q29udGV4dCIsInVOTWF0cml4IiwiX2RlZmF1bHRMaWdodFNoYWRlciIsIl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlciIsIl9kZWZhdWx0Tm9ybWFsU2hhZGVyIiwiX2RlZmF1bHRDb2xvclNoYWRlciIsIl9kZWZhdWx0UG9pbnRTaGFkZXIiLCJfZ2V0TGluZVNoYWRlciIsInBvaW50U2l6ZSIsInRleHR1cmVzIiwiX3Rlc3N5IiwiX2luaXRUZXNzeSIsImZvbnRJbmZvcyIsIkRFUFRIX1RFU1QiLCJkZXB0aEZ1bmMiLCJMRVFVQUwiLCJ2aWV3cG9ydCIsImRyYXdpbmdCdWZmZXJXaWR0aCIsImRyYXdpbmdCdWZmZXJIZWlnaHQiLCJfdmlld3BvcnQiLCJnZXRQYXJhbWV0ZXIiLCJWSUVXUE9SVCIsIl9yZXNldENvbnRleHQiLCJzZXRBdHRyaWJ1dGVzIiwiY2xlYXJDb2xvciIsIkNPTE9SX0JVRkZFUl9CSVQiLCJERVBUSF9CVUZGRVJfQklUIiwiX2dldEltbWVkaWF0ZU1vZGVTaGFkZXIiLCJfZ2V0Q29sb3JTaGFkZXIiLCJjdXJTdHJva2VXZWlnaHQiLCJyZWFkUGl4ZWxzIiwiVU5TSUdORURfQllURSIsInNldFBvaW50U2hhZGVyIiwiaXNMaWdodFNoYWRlciIsIl9nZXRMaWdodFNoYWRlciIsIl9nZXRQb2ludFNoYWRlciIsIl9kZWZhdWx0TGluZVNoYWRlciIsIl9nZXRGb250U2hhZGVyIiwiX2RlZmF1bHRGb250U2hhZGVyIiwiZ2V0RXh0ZW5zaW9uIiwiX2dldEVtcHR5VGV4dHVyZSIsIl9lbXB0eVRleHR1cmUiLCJUZXh0dXJlIiwiZ2V0VGV4dHVyZSIsImJpbmRCdWZmZXIiLCJidWZmZXJEYXRhIiwiLi4vY29yZS9wNS5SZW5kZXJlciIsIi4vcDUuQ2FtZXJhIiwiLi9wNS5NYXRyaXgiLCIuL3A1LlNoYWRlciIsIl92ZXJ0U2hhZGVyIiwiX2ZyYWdTaGFkZXIiLCJfZ2xQcm9ncmFtIiwiX2xvYWRlZEF0dHJpYnV0ZXMiLCJfbG9hZGVkVW5pZm9ybXMiLCJ1bmlmb3JtcyIsIl9ib3VuZCIsInNhbXBsZXJzIiwiVkVSVEVYX1NIQURFUiIsInNoYWRlclNvdXJjZSIsImNvbXBpbGVTaGFkZXIiLCJnZXRTaGFkZXJQYXJhbWV0ZXIiLCJDT01QSUxFX1NUQVRVUyIsImdldFNoYWRlckluZm9Mb2ciLCJGUkFHTUVOVF9TSEFERVIiLCJjcmVhdGVQcm9ncmFtIiwiYXR0YWNoU2hhZGVyIiwibGlua1Byb2dyYW0iLCJnZXRQcm9ncmFtUGFyYW1ldGVyIiwiTElOS19TVEFUVVMiLCJnZXRQcm9ncmFtSW5mb0xvZyIsIl9sb2FkQXR0cmlidXRlcyIsIl9sb2FkVW5pZm9ybXMiLCJBQ1RJVkVfQVRUUklCVVRFUyIsImdldEFjdGl2ZUF0dHJpYiIsImdldEF0dHJpYkxvY2F0aW9uIiwiQUNUSVZFX1VOSUZPUk1TIiwiZ2V0QWN0aXZlVW5pZm9ybSIsImdldFVuaWZvcm1Mb2NhdGlvbiIsIlNBTVBMRVJfMkQiLCJzYW1wbGVySW5kZXgiLCJjb21waWxlIiwidXNlUHJvZ3JhbSIsImJpbmRUZXh0dXJlcyIsIl9zZXRNYXRyaXhVbmlmb3JtcyIsIl9zZXRWaWV3cG9ydFVuaWZvcm0iLCJ1bmJpbmRUZXh0dXJlcyIsImFjdGl2ZVRleHR1cmUiLCJURVhUVVJFMCIsImJpbmRUZXh0dXJlIiwidXBkYXRlIiwidW5pZm9ybTFpIiwidXBkYXRlVGV4dHVyZXMiLCJCT09MIiwiSU5UIiwidW5pZm9ybTFpdiIsInVuaWZvcm0xZnYiLCJ1bmlmb3JtMWYiLCJGTE9BVF9NQVQzIiwidW5pZm9ybU1hdHJpeDNmdiIsIkZMT0FUX01BVDQiLCJ1bmlmb3JtTWF0cml4NGZ2IiwiRkxPQVRfVkVDMiIsInVuaWZvcm0yZnYiLCJ1bmlmb3JtMmYiLCJGTE9BVF9WRUMzIiwidW5pZm9ybTNmdiIsInVuaWZvcm0zZiIsIkZMT0FUX1ZFQzQiLCJ1bmlmb3JtNGZ2IiwidW5pZm9ybTRmIiwiSU5UX1ZFQzIiLCJ1bmlmb3JtMml2IiwidW5pZm9ybTJpIiwiSU5UX1ZFQzMiLCJ1bmlmb3JtM2l2IiwidW5pZm9ybTNpIiwiSU5UX1ZFQzQiLCJ1bmlmb3JtNGl2IiwidW5pZm9ybTRpIiwidVVzZUxpZ2h0aW5nIiwidUFtYmllbnRMaWdodENvdW50IiwidURpcmVjdGlvbmFsTGlnaHRDb3VudCIsInVQb2ludExpZ2h0Q291bnQiLCJ1QW1iaWVudENvbG9yIiwidURpcmVjdGlvbmFsQ29sb3IiLCJ1UG9pbnRMaWdodExvY2F0aW9uIiwidVBvaW50TGlnaHRDb2xvciIsInVMaWdodGluZ0RpcmVjdGlvbiIsInVTcGVjdWxhciIsImlzVGV4dHVyZVNoYWRlciIsImlzQ29sb3JTaGFkZXIiLCJ1TWF0ZXJpYWxDb2xvciIsImlzVGV4TGlnaHRTaGFkZXIiLCJ1U3Ryb2tlV2VpZ2h0IiwiZW5hYmxlVmVydGV4QXR0cmliQXJyYXkiLCJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwiZ2xUZXgiLCJnbFRhcmdldCIsIlRFWFRVUkVfMkQiLCJnbEZvcm1hdCIsIm1pcG1hcHMiLCJnbE1pbkZpbHRlciIsImdsTWFnRmlsdGVyIiwiZ2xXcmFwUyIsIkNMQU1QX1RPX0VER0UiLCJnbFdyYXBUIiwiaXNTcmNNZWRpYUVsZW1lbnQiLCJfdmlkZW9QcmV2VXBkYXRlVGltZSIsImlzU3JjSFRNTEVsZW1lbnQiLCJpc1NyY1A1SW1hZ2UiLCJpc1NyY1A1R3JhcGhpY3MiLCJpc0ltYWdlRGF0YSIsIl9nZXRUZXh0dXJlRGF0YUZyb21Tb3VyY2UiLCJjcmVhdGVUZXh0dXJlIiwidGV4UGFyYW1ldGVyaSIsIlRFWFRVUkVfTUFHX0ZJTFRFUiIsIlRFWFRVUkVfTUlOX0ZJTFRFUiIsIlRFWFRVUkVfV1JBUF9TIiwiVEVYVFVSRV9XUkFQX1QiLCJsb2FkZWRtZXRhZGF0YSIsInRleEltYWdlMkQiLCJfZGlydHkiLCJ1bmJpbmRUZXh0dXJlIiwic2V0SW50ZXJwb2xhdGlvbiIsInNldFdyYXBNb2RlIiwiTUlSUk9SRURfUkVQRUFUIiwiaW5mb3MiLCJmaW5kSW1hZ2UiLCJzdHJva2VJbWFnZUluZm9zIiwiY29sRGltSW1hZ2VJbmZvcyIsInJvd0RpbUltYWdlSW5mb3MiLCJjb2xDZWxsSW1hZ2VJbmZvcyIsInJvd0NlbGxJbWFnZUluZm9zIiwiZ2x5cGhJbmZvcyIsImdldEdseXBoSW5mbyIsInAwIiwiYzAiLCJjMSIsInAxIiwidG9RdWFkcmF0aWMiLCJxdWFkRXJyb3IiLCJzcGxpdEluZmxlY3Rpb25zIiwiY2VsbEltYWdlSW5mbyIsImRpbU9mZnNldCIsImRpbUltYWdlSW5mbyIsImdseXBoIiwidUdseXBoUmVjdCIsInN0cm9rZUltYWdlSW5mbyIsInN0cm9rZXMiLCJjb2xJbmZvIiwicm93SW5mbyIsInVHcmlkT2Zmc2V0IiwiX2ZvbnRJbmZvIiwiX3RleHRHZW9tIiwiLi9wNS5SZW5kZXJlckdMIiwidHNuZWpzIiwiUkVWSVNJT04iLCJjb25kaXRpb24iLCJnZXRvcHQiLCJvcHQiLCJmaWVsZCIsImRlZmF1bHR2YWwiLCJyZXR1cm5fdiIsInZfdmFsIiwiZ2F1c3NSYW5kb20iLCJyYW5kbiIsIm11Iiwic3RkIiwiemVyb3MiLCJGbG9hdDY0QXJyYXkiLCJyYW5kbjJkIiwidXNlcyIsInhoZXJlIiwiTDIiLCJ4MWkiLCJ4MmkiLCJkMnAiLCJwZXJwbGV4aXR5IiwidG9sIiwiTmYiLCJIdGFyZ2V0IiwicHJvdyIsImJldGFtaW4iLCJiZXRhbWF4IiwibnVtIiwicHN1bSIsInBqIiwiSGhlcmUiLCJQb3V0IiwiTjIiLCJ0U05FIiwiZGltIiwiZXBzaWxvbiIsIml0ZXIiLCJpbml0RGF0YVJhdyIsImRpc3RzIiwieHRvZCIsImluaXRTb2x1dGlvbiIsImluaXREYXRhRGlzdCIsImdhaW5zIiwieXN0ZXAiLCJnZXRTb2x1dGlvbiIsImNnIiwiY29zdEdyYWQiLCJjb3N0IiwiZ3JhZCIsInltZWFuIiwic2lkIiwiZ2FpbmlkIiwibmV3Z2FpbiIsIm5ld3NpZCIsImRlYnVnR3JhZCIsInlvbGQiLCJjZzAiLCJjZzEiLCJhbmFseXRpYyIsIm51bWVyaWNhbCIsInBtdWwiLCJRdSIsInFzdW0iLCJkc3VtIiwiZGhlcmUiLCJxdSIsIk5OIiwiZ3N1bSIsInByZW11bHQiLCJsaWIiLCJfX3dlYnBhY2tfZXhwb3J0c19fIiwicDVfbGliX3A1X21pbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fIiwicDVfbGliX3A1X21pbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQiLCJ0b25lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18iLCJ0b25lX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCIsInRzbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyIsInRzbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0Iiwic2tldGNoIiwiRGF0YVBvaW50IiwiW29iamVjdCBPYmplY3RdIiwidHJpZyIsImNhblRyaWciLCJybmQiLCJzeW50aHMiLCJ0c25lIiwic3RlcENvdW50IiwicGxheUhlYWR4IiwicGxheUhlYWR5IiwicGFubmVyIiwiZnJlZXZlcmIiLCJmMSIsImYyIiwiZjMiLCJzZXRDb2wiLCJzZXRTaXplIiwienAiLCJ0YXJnZXRYIiwidGFyZ2V0WSIsInNldFBvcyIsImRyYXdQb2ludCIsImV2YWwiXSwibWFwcGluZ3MiOiJhQUNBLElBQUFBLEtBR0EsU0FBQUMsRUFBQUMsR0FHQSxHQUFBRixFQUFBRSxHQUNBLE9BQUFGLEVBQUFFLEdBQUFDLFFBR0EsSUFBQUMsRUFBQUosRUFBQUUsSUFDQUcsRUFBQUgsRUFDQUksR0FBQSxFQUNBSCxZQVVBLE9BTkFJLEVBQUFMLEdBQUFNLEtBQUFKLEVBQUFELFFBQUFDLElBQUFELFFBQUFGLEdBR0FHLEVBQUFFLEdBQUEsRUFHQUYsRUFBQUQsUUFLQUYsRUFBQVEsRUFBQUYsRUFHQU4sRUFBQVMsRUFBQVYsRUFHQUMsRUFBQVUsRUFBQSxTQUFBUixFQUFBUyxFQUFBQyxHQUNBWixFQUFBYSxFQUFBWCxFQUFBUyxJQUNBRyxPQUFBQyxlQUFBYixFQUFBUyxHQUEwQ0ssWUFBQSxFQUFBQyxJQUFBTCxLQUsxQ1osRUFBQWtCLEVBQUEsU0FBQWhCLEdBQ0Esb0JBQUFpQixlQUFBQyxhQUNBTixPQUFBQyxlQUFBYixFQUFBaUIsT0FBQUMsYUFBd0RDLE1BQUEsV0FFeERQLE9BQUFDLGVBQUFiLEVBQUEsY0FBaURtQixPQUFBLEtBUWpEckIsRUFBQXNCLEVBQUEsU0FBQUQsRUFBQUUsR0FFQSxHQURBLEVBQUFBLElBQUFGLEVBQUFyQixFQUFBcUIsSUFDQSxFQUFBRSxFQUFBLE9BQUFGLEVBQ0EsS0FBQUUsR0FBQSxpQkFBQUYsUUFBQUcsV0FBQSxPQUFBSCxFQUNBLElBQUFJLEVBQUFYLE9BQUFZLE9BQUEsTUFHQSxHQUZBMUIsRUFBQWtCLEVBQUFPLEdBQ0FYLE9BQUFDLGVBQUFVLEVBQUEsV0FBeUNULFlBQUEsRUFBQUssVUFDekMsRUFBQUUsR0FBQSxpQkFBQUYsRUFBQSxRQUFBTSxLQUFBTixFQUFBckIsRUFBQVUsRUFBQWUsRUFBQUUsRUFBQSxTQUFBQSxHQUFnSCxPQUFBTixFQUFBTSxJQUFxQkMsS0FBQSxLQUFBRCxJQUNySSxPQUFBRixHQUlBekIsRUFBQTZCLEVBQUEsU0FBQTFCLEdBQ0EsSUFBQVMsRUFBQVQsS0FBQXFCLFdBQ0EsV0FBMkIsT0FBQXJCLEVBQUEsU0FDM0IsV0FBaUMsT0FBQUEsR0FFakMsT0FEQUgsRUFBQVUsRUFBQUUsRUFBQSxJQUFBQSxHQUNBQSxHQUlBWixFQUFBYSxFQUFBLFNBQUFpQixFQUFBQyxHQUFzRCxPQUFBakIsT0FBQWtCLFVBQUFDLGVBQUExQixLQUFBdUIsRUFBQUMsSUFHdEQvQixFQUFBa0MsRUFBQSxHQUlBbEMsSUFBQW1DLEVBQUEscUJDbEZBLElBQUFDLE9BTUdDLEtBRkRELEVBQUEsV0FDRixPQVFDLFdBRUQsYUFFQSxJQUFBRSxFQU1BLFNBQUFDLEVBQUFDLEdBQ0FBLEVBQUFGOzs7Ozs7SUFveXZCQSxPQXp5dkJBLFNBQUFFLEdBQ0FGLEVBQUFFLElBV0FDLENBQUEsV0FTQSxJQUFBSCxFQUFBLFdBQ0EsS0FBQUksZ0JBQUFKLEdBQ0EsVUFBQUssTUFBQSwwREFPQUwsRUFBQU4sVUFBQVksU0FBQSxXQUNBLFFBQUFDLEtBQUFQLEVBQUEsQ0FDQSxJQUFBUSxFQUFBRCxFQUFBLEdBQUFFLE1BQUEsV0FDQUMsRUFBQVYsRUFBQU8sS0FBQUgsS0FBQU8sWUFDQSxHQUFBWCxFQUFBWSxXQUFBWixFQUFBTyxLQUFBQyxHQUFBRSxFQUNBLE9BQUFILEVBR0EsY0FPQVAsRUFBQU4sVUFBQW1CLFFBQUEsV0FDQSxPQUFBVCxNQStCQUosRUFBQU4sVUFBQW9CLElBQUEsU0FBQUMsRUFBQWhDLEVBQUFpQyxHQUNBLEdBQUFoQixFQUFBaUIsU0FBQUYsR0FDQUMsRUFBQWpDLE9BQ1UsR0FBQWlCLEVBQUFrQixTQUFBSCxHQUFBLENBQ1YsSUFBQUksS0FDQUEsRUFBQUosR0FBQWhDLEVBQ0FnQyxFQUFBSSxFQUVBQyxFQUNBLFFBQUFDLEtBQUFOLEVBQUEsQ0FDQWhDLEVBQUFnQyxFQUFBTSxHQUNBLElBQUFDLEVBQUFsQixLQUNBLFFBQUFpQixFQUFBRSxRQUFBLE1BRUEsSUFEQSxJQUFBQyxFQUFBSCxFQUFBSSxNQUFBLEtBQ0EzRCxFQUFBLEVBQW9DQSxFQUFBMEQsRUFBQUUsT0FBQSxFQUEwQjVELElBRTlELElBREF3RCxJQUFBRSxFQUFBMUQsZUFDQWtDLEVBQUEsQ0FDQXdCLEVBQUFHLE9BQUEsRUFBQTdELEVBQUEsR0FDQSxJQUFBOEQsRUFBQUosRUFBQUssS0FBQSxLQUNBUCxFQUFBUixJQUFBYyxFQUFBN0MsR0FDQSxTQUFBcUMsRUFHQUMsRUFBQUcsSUFBQUUsT0FBQSxHQUVBLElBQUFJLEVBQUFSLEVBQUFELEdBQ0FyQixFQUFBK0IsUUFBQUQsS0FHQTlCLEVBQUFnQyxRQUFBRixhQUFBOUIsRUFBQWdDLFFBQUFoQyxFQUFBaUMsT0FBQUgsYUFBQTlCLEVBQUFpQyxNQUNBSCxFQUFBL0MsWUFDQWlCLEVBQUErQixRQUFBZixHQUNBYyxFQUFBL0MsUUFFQStDLEVBQUFJLE9BQUFuRCxFQUFBaUMsSUFHa0JjLGFBQUFLLFdBQ2xCTCxFQUFBL0MsWUFDQStDLEVBQUEvQyxTQUVrQmlCLEVBQUFvQyxVQUFBTixhQUFBOUIsRUFBQW9DLFNBQ2xCZCxFQUFBRCxHQUFBdEMsRUFDa0IrQyxhQUFBOUIsRUFDbEI4QixFQUFBaEIsSUFBQS9CLEdBQ2tCK0MsSUFBQS9DLElBQ2xCdUMsRUFBQUQsR0FBQXRDLElBR0EsT0FBQXFCLE1BdUJBSixFQUFBTixVQUFBZixJQUFBLFNBQUFvQyxHQUNBZixFQUFBK0IsUUFBQWhCLEdBQ0FBLEVBQUFYLEtBQUFpQyxpQkFBQWpDLEtBQUFPLGFBQ1VYLEVBQUFrQixTQUFBSCxLQUNWQSxPQUdBLElBREEsSUFBQXVCLEtBQ0F4RSxFQUFBLEVBQXdCQSxFQUFBaUQsRUFBQVcsT0FBbUI1RCxJQUFBLENBQzNDLElBQUF1RCxFQUFBTixFQUFBakQsR0FDQXdELEVBQUFsQixLQUNBbUMsRUFBQUQsRUFDQSxRQUFBakIsRUFBQUUsUUFBQSxNQUVBLElBREEsSUFBQUMsRUFBQUgsRUFBQUksTUFBQSxLQUNBZSxFQUFBLEVBQWdDQSxFQUFBaEIsRUFBQUUsT0FBQSxFQUEwQmMsSUFBQSxDQUMxRCxJQUFBQyxFQUFBakIsRUFBQWdCLEdBQ0FELEVBQUFFLEdBQUFGLEVBQUFFLE9BQ0FGLElBQUFFLEdBQ0FuQixJQUFBbUIsR0FFQXBCLEVBQUFHLElBQUFFLE9BQUEsR0FFQSxJQUFBSSxFQUFBUixFQUFBRCxHQUNBckIsRUFBQWlCLFNBQUFGLEVBQUFNLElBQ0FrQixFQUFBbEIsR0FBQVMsRUFBQW5ELE1BQ2NxQixFQUFBZ0MsUUFBQUYsYUFBQTlCLEVBQUFnQyxPQUNkTyxFQUFBbEIsR0FBQVMsRUFBQS9DLE1BQ2NpQixFQUFBaUMsT0FBQUgsYUFBQTlCLEVBQUFpQyxNQUNkTSxFQUFBbEIsR0FBQVMsRUFBQS9DLE1BQ2MrQyxhQUFBSyxXQUNkSSxFQUFBbEIsR0FBQVMsRUFBQS9DLE1BQ2MrQyxhQUFBOUIsRUFDZHVDLEVBQUFsQixHQUFBUyxFQUFBbkQsT0FDY3FCLEVBQUFZLFdBQUFrQixJQUFBOUIsRUFBQTBDLFVBQUFaLEtBQ2RTLEVBQUFsQixHQUFBUyxHQUdBLE9BQUFRLEdBUUF0QyxFQUFBTixVQUFBMkMsaUJBQUEsU0FBQU0sR0FDQSxJQUFBTCxLQUlBLEdBSEF0QyxFQUFBMEMsVUFBQUMsRUFBQUMsWUFDQU4sRUFBQTlELE9BQUFxRSxLQUFBRixFQUFBQyxXQUVBNUMsRUFBQTBDLFVBQUFDLEVBQUFHLFFBR0EsSUFGQSxJQUFBQyxFQUFBM0MsS0FBQWlDLGlCQUFBTSxFQUFBRyxRQUVBaEYsRUFBQSxFQUE0QkEsRUFBQWlGLEVBQUFyQixPQUFzQjVELEtBQ2xELElBQUF3RSxFQUFBZixRQUFBd0IsRUFBQWpGLEtBQ0F3RSxFQUFBVSxLQUFBRCxFQUFBakYsSUFJQSxPQUFBd0UsR0FhQXRDLEVBQUE0QyxTQUFBLFNBQUFLLEVBQUFKLEVBQUFGLEdBQ0EsSUFBQU8sS0FDQSxPQUFBRCxFQUFBdkIsUUFBQTFCLEVBQUFpQixTQUFBZ0MsRUFBQSxJQUNBQyxFQUFBRCxFQUFBLFFBRUEsUUFBQW5GLEVBQUEsRUFBNEJBLEVBQUErRSxFQUFBbkIsT0FBaUI1RCxJQUM3Q29GLEVBQUFMLEVBQUEvRSxJQUFBbUYsRUFBQW5GLEdBR0EsT0FBQWtDLEVBQUEwQyxVQUFBQyxFQUFBQyxVQUNBNUMsRUFBQW1ELFdBQUFELEVBQUFQLEVBQUFDLFVBQ1U1QyxFQUFBaUIsU0FBQTBCLEdBQ1YzQyxFQUFBbUQsV0FBQUQsRUFBQVAsR0FFQU8sR0FpQkFsRCxFQUFBbUQsV0FBQSxTQUFBQyxFQUFBQyxHQUNBLEdBQUFyRCxFQUFBaUIsU0FBQW1DLElBQUFwRCxFQUFBaUIsU0FBQW9DLEdBQUEsQ0FDQSxJQUFBZixLQUVBLFFBQUFnQixLQUFBRixFQUNBZCxFQUFBZ0IsR0FBQXRELEVBQUFtRCxXQUFBRSxFQUFBQyxHQUFBRixFQUFBRSxJQUVBLFFBQUFDLEtBQUFGLEVBQ0FmLEVBQUFpQixHQUFBdkQsRUFBQW1ELFdBQUFDLEVBQUFHLEdBQUFGLEVBQUFFLElBRUEsT0FBQWpCLEVBRUEsT0FBQXRDLEVBQUErQixRQUFBcUIsR0FBQUMsRUFBQUQsR0FhQXBELEVBQUF3RCxjQUFBLFdBRUEsSUFEQSxJQUFBQyxFQUFBQyxVQUFBLEdBQ0E1RixFQUFBLEVBQXdCQSxFQUFBNEYsVUFBQWhDLE9BQXNCNUQsSUFBQSxDQUM5QyxJQUFBNkYsRUFBQUQsVUFBQTVGLEdBQ0EyRixFQUFBRyxRQUFBRCxHQUNBRixFQUFBRSxFQUVBLE9BQUEzRCxHQVlBQSxFQUFBK0IsUUFBQSxTQUFBOEIsR0FDQSxnQkFBQUEsR0FTQTdELEVBQUEwQyxVQUFBLFNBQUFtQixHQUNBLE9BQUE3RCxFQUFBK0IsUUFBQThCLElBU0E3RCxFQUFBWSxXQUFBLFNBQUFpRCxHQUNBLHlCQUFBQSxHQVNBN0QsRUFBQThELFNBQUEsU0FBQUMsR0FDQSx1QkFBQUEsR0FTQS9ELEVBQUFpQixTQUFBLFNBQUE4QyxHQUNBLDBCQUFBdkYsT0FBQWtCLFVBQUFZLFNBQUFyQyxLQUFBOEYsTUFBQXBELGNBQUFuQyxRQVNBd0IsRUFBQWdFLFVBQUEsU0FBQUQsR0FDQSx3QkFBQUEsR0FTQS9ELEVBQUFpRSxRQUFBLFNBQUFGLEdBQ0EsT0FBQUcsTUFBQUQsUUFBQUYsSUFTQS9ELEVBQUFrQixTQUFBLFNBQUE2QyxHQUNBLHVCQUFBQSxHQVVBL0QsRUFBQW1FLE9BQUEsU0FBQUosR0FDQSxPQUFBL0QsRUFBQWtCLFNBQUE2QyxJQUFBLHNDQUFpREssS0FBQUwsSUFNakQvRCxFQUFBcUUsS0FBQSxhQU9BckUsRUFBQU4sVUFBQTRFLFVBQUEsU0FBQTdFLEdBQ0EsR0FBQXlFLE1BQUFELFFBQUF4RSxHQUNBLFFBQUEzQixFQUFBLEVBQTRCQSxFQUFBMkIsRUFBQWlDLE9BQXFCNUQsSUFDakRzQyxLQUFBa0UsVUFBQTdFLEVBQUEzQixTQUdBVSxPQUFBQyxlQUFBMkIsS0FBQVgsR0FDQThFLFVBQUEsRUFDQTdGLFlBQUEsS0FTQXNCLEVBQUFOLFVBQUE4RSxVQUFBLFNBQUEvRSxHQUNBLEdBQUF5RSxNQUFBRCxRQUFBeEUsR0FDQSxRQUFBM0IsRUFBQSxFQUE0QkEsRUFBQTJCLEVBQUFpQyxPQUFxQjVELElBQ2pEc0MsS0FBQW9FLFVBQUEvRSxFQUFBM0IsU0FHQVUsT0FBQUMsZUFBQTJCLEtBQUFYLEdBQW9EOEUsVUFBQSxLQU9wRHZFLEVBQUF5RSxPQUNBQyxRQUFBLFVBQ0FDLFFBQUEsVUFDQUMsT0FBQSxVQVlBNUUsRUFBQTZFLGdCQUFBLFNBQUFDLEdBQ0EsSUFBQUMsRUFBQSxHQUFBQyxLQUFBQyxHQUNBLE9BQUFELEtBQUFFLElBQUFKLEVBQUFDLElBU0EvRSxFQUFBbUYsU0FBQSxTQUFBQyxHQUNBLE9BQUFKLEtBQUFLLElBQUEsR0FBQUQsRUFBQSxLQVNBcEYsRUFBQXNGLFNBQUEsU0FBQUMsR0FDQSxPQUFBUCxLQUFBUSxJQUFBRCxHQUFBUCxLQUFBUyxLQUFBLElBYUF6RixFQUFBMEYseUJBQUEsU0FBQUMsR0FDQSxPQUFBWCxLQUFBSyxJQUFBLEVBQUFNLEVBQUEsS0FVQTNGLEVBQUFOLFVBQUFrRyxJQUFBLFdBQ0EsT0FBQTVGLEVBQUE2RixRQUFBRCxPQVFBNUYsRUFBQTRGLElBQUEsV0FDQSxPQUFBNUYsRUFBQTZGLFFBQUFELE9BbUJBNUYsRUFBQThGLE9BQUEsU0FBQUMsRUFBQXpFLEdBSUEsU0FBQTBFLEtBSEFoRyxFQUFBK0IsUUFBQVQsS0FDQUEsRUFBQXRCLEdBSUFnRyxFQUFBdEcsVUFBQTRCLEVBQUE1QixVQUNBcUcsRUFBQXJHLFVBQUEsSUFBQXNHLEVBRUFELEVBQUFyRyxVQUFBaUIsWUFBQW9GLEVBQ0FBLEVBQUFqRCxPQUFBeEIsR0FVQSxJQUFBMkUsRUFBQSxLQTRIQSxPQXJIQXpILE9BQUFDLGVBQUF1QixFQUFBLFdBQ0FyQixJQUFBLFdBQ0EsT0FBQXNILEdBRUFuRixJQUFBLFNBQUErRSxHQUVBSSxFQURBakcsRUFBQWtHLFNBQUFMLGFBQUE3RixFQUFBa0csUUFDQUwsRUFFQSxJQUFBN0YsRUFBQWtHLFFBQUFMLEdBR0E3RixFQUFBa0csUUFBQUMsS0FBQSxPQUFBRixNQVVBekgsT0FBQUMsZUFBQXVCLEVBQUFOLFVBQUEsV0FDQWYsSUFBQSxXQUNBLE9BQUFxQixFQUFBNkYsV0FXQTdGLEVBQUFvRyxXQUFBLFNBQUFDLEdBQ0FyRyxFQUFBNkYsUUFBQVEsR0FhQTdILE9BQUFDLGVBQUF1QixFQUFBTixVQUFBLGFBQ0FmLElBQUEsV0FDQSxXQUFBeUIsS0FBQXlGLFFBQUFTLGNBV0E5SCxPQUFBQyxlQUFBdUIsRUFBQU4sVUFBQSxjQUNBZixJQUFBLFdBQ0EsU0FBQXlCLEtBQUF5RixRQUFBUyxjQVdBOUgsT0FBQUMsZUFBQXVCLEVBQUEsYUFDQXJCLElBQUEsV0FDQSxJQUFBNEgsRUFBQUMsT0FBQTdHLGVBQUEsaUJBQUE2RyxPQUFBN0csZUFBQSxzQkFDQThHLEVBQUFELE9BQUE3RyxlQUFBLFdBQ0ErRyxFQUFBRixPQUFBN0csZUFBQSxVQUNBLE9BQUE0RyxHQUFBRSxHQUFBQyxLQVVBbEksT0FBQUMsZUFBQXVCLEVBQUEsZUFDQXJCLElBQUEsV0FDQSxjQUFBc0gsS0FRQWpHLEVBQUEyRyxXQUFBLFNBQUFDLEdBQ0EsR0FBQTVHLEVBQUE2RyxZQUNBRCxFQUFBNUcsRUFBQTZGLGFBQ1UsQ0FDVixJQUFBaUIsRUFBQSxXQUNBRixFQUFBNUcsRUFBQTZGLFNBQ0E3RixFQUFBa0csUUFBQWEsSUFBQSxPQUFBRCxJQUVBOUcsRUFBQWtHLFFBQUFjLEdBQUEsT0FBQUYsR0FFQSxPQUFBOUcsR0FPQUEsRUFBQWlILFFBQUEsTUFDQWpILElBRUFDLEVBQUEsU0FBQUQsR0FtSUEsT0F6SEFBLEVBQUFrSCxRQUFBLFdBQ0FsSCxFQUFBL0IsS0FBQW1DLE1BTUFBLEtBQUErRyxZQUVBbkgsRUFBQThGLE9BQUE5RixFQUFBa0gsU0FRQWxILEVBQUFrSCxRQUFBeEgsVUFBQXNILEdBQUEsU0FBQUksRUFBQUMsR0FHQSxJQURBLElBQUFDLEVBQUFGLEVBQUEzRixNQUFBLE9BQ0EzRCxFQUFBLEVBQXdCQSxFQUFBd0osRUFBQTVGLE9BQW1CNUQsSUFBQSxDQUMzQyxJQUFBeUosRUFBQUQsRUFBQXhKLEdBQ0FzQyxLQUFBK0csUUFBQXhILGVBQUE0SCxLQUNBbkgsS0FBQStHLFFBQUFJLE9BRUFuSCxLQUFBK0csUUFBQUksR0FBQXZFLEtBQUFxRSxHQUVBLE9BQUFqSCxNQVNBSixFQUFBa0gsUUFBQXhILFVBQUE4SCxLQUFBLFNBQUFKLEVBQUFDLEdBQ0EsSUFBQUksRUFBQSxXQUVBSixFQUFBSyxNQUFBdEgsS0FBQXNELFdBQ0F0RCxLQUFBMkcsSUFBQUssRUFBQUssSUFDVW5JLEtBQUFjLE1BRVYsT0FEQUEsS0FBQTRHLEdBQUFJLEVBQUFLLEdBQ0FySCxNQVdBSixFQUFBa0gsUUFBQXhILFVBQUFxSCxJQUFBLFNBQUFLLEVBQUFDLEdBRUEsSUFEQSxJQUFBQyxFQUFBRixFQUFBM0YsTUFBQSxPQUNBa0csRUFBQSxFQUF5QkEsRUFBQUwsRUFBQTVGLE9BQW9CaUcsSUFFN0MsR0FEQVAsRUFBQUUsRUFBQUssR0FDQXZILEtBQUErRyxRQUFBeEgsZUFBQXlILEdBQ0EsR0FBQXBILEVBQUErQixRQUFBc0YsR0FDQWpILEtBQUErRyxRQUFBQyxXQUdBLElBREEsSUFBQVEsRUFBQXhILEtBQUErRyxRQUFBQyxHQUNBdEosRUFBQSxFQUFvQ0EsRUFBQThKLEVBQUFsRyxPQUFzQjVELElBQzFEOEosRUFBQTlKLEtBQUF1SixHQUNBTyxFQUFBakcsT0FBQTdELEVBQUEsR0FNQSxPQUFBc0MsTUFTQUosRUFBQWtILFFBQUF4SCxVQUFBeUcsS0FBQSxTQUFBaUIsR0FDQSxHQUFBaEgsS0FBQStHLFFBQUEsQ0FDQSxJQUFBVSxFQUFBM0QsTUFBQXdELE1BQUEsS0FBQWhFLFdBQUFvRSxNQUFBLEdBQ0EsR0FBQTFILEtBQUErRyxRQUFBeEgsZUFBQXlILEdBRUEsSUFEQSxJQUFBUSxFQUFBeEgsS0FBQStHLFFBQUFDLEdBQUFVLE1BQUEsR0FDQWhLLEVBQUEsRUFBQWlLLEVBQUFILEVBQUFsRyxPQUF3RDVELEVBQUFpSyxFQUFTakssSUFDakU4SixFQUFBOUosR0FBQTRKLE1BQUF0SCxLQUFBeUgsR0FJQSxPQUFBekgsTUFPQUosRUFBQWtILFFBQUFjLE1BQUEsU0FBQXhJLEdBQ0EsSUFBQXlJLEdBQ0EsS0FDQSxPQUNBLE1BQ0EsUUFFQXpJLEVBQUEySCxXQUNBLFFBQUFySixFQUFBLEVBQXdCQSxFQUFBbUssRUFBQXZHLE9BQXNCNUQsSUFBQSxDQUM5QyxJQUFBb0MsRUFBQStILEVBQUFuSyxHQUNBb0ssRUFBQWxJLEVBQUFrSCxRQUFBeEgsVUFBQVEsR0FDQVYsRUFBQVUsR0FBQWdJLEVBRUEsT0FBQWxJLEVBQUFrSCxTQU1BbEgsRUFBQWtILFFBQUF4SCxVQUFBbUIsUUFBQSxXQUdBLE9BRkFiLEVBQUFOLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUErRyxRQUFBLEtBQ0EvRyxNQUVBSixFQUFBa0gsVUFFQWpILEVBQUEsU0FBQUQsR0ErV0EsT0FyV0FBLEVBQUFtSSxTQUFBLFdBQ0EsSUFBQWpGLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FBQSxVQUFBMUQsRUFBQW1JLFVBQ0FuSSxFQUFBL0IsS0FBQW1DLE1BTUFBLEtBQUFnSSxhQU1BaEksS0FBQWlJLE9BQUFuRixFQUFBbUYsUUFFQXJJLEVBQUE4RixPQUFBOUYsRUFBQW1JLFVBTUFuSSxFQUFBbUksU0FBQXZGLFVBQStCeUYsT0FBQUMsS0FRL0I5SixPQUFBQyxlQUFBdUIsRUFBQW1JLFNBQUF6SSxVQUFBLFVBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQWdJLFVBQUExRyxVQVNBMUIsRUFBQW1JLFNBQUF6SSxVQUFBNkksSUFBQSxTQUFBbkIsR0FFQSxHQUFBcEgsRUFBQStCLFFBQUFxRixFQUFBb0IsTUFDQSxVQUFBbkksTUFBQSxvREFFQStHLEVBQUFvQixLQUFBcEIsRUFBQW9CLEtBQUFDLFVBQ0EsSUFBQUMsRUFBQXRJLEtBQUF1SSxRQUFBdkIsRUFBQW9CLE1BR0EsR0FGQXBJLEtBQUFnSSxVQUFBekcsT0FBQStHLEVBQUEsSUFBQXRCLEdBRUFoSCxLQUFBc0IsT0FBQXRCLEtBQUFpSSxPQUFBLENBQ0EsSUFBQU8sRUFBQXhJLEtBQUFzQixPQUFBdEIsS0FBQWlJLE9BQ0FqSSxLQUFBZ0ksVUFBQXpHLE9BQUEsRUFBQWlILEdBRUEsT0FBQXhJLE1BT0FKLEVBQUFtSSxTQUFBekksVUFBQW1KLE9BQUEsU0FBQXpCLEdBQ0EsSUFBQXNCLEVBQUF0SSxLQUFBZ0ksVUFBQTdHLFFBQUE2RixHQUlBLE9BSEEsSUFBQXNCLEdBQ0F0SSxLQUFBZ0ksVUFBQXpHLE9BQUErRyxFQUFBLEdBRUF0SSxNQVFBSixFQUFBbUksU0FBQXpJLFVBQUFmLElBQUEsU0FBQTZKLEVBQUFNLEdBQ0FBLEVBQUE5SSxFQUFBbUQsV0FBQTJGLEVBQUEsUUFDQSxJQUFBSixFQUFBdEksS0FBQXVJLFFBQUFILEVBQUFNLEdBQ0EsV0FBQUosRUFDQXRJLEtBQUFnSSxVQUFBTSxHQUVBLE1BT0ExSSxFQUFBbUksU0FBQXpJLFVBQUFxSixLQUFBLFdBQ0EsT0FBQTNJLEtBQUFnSSxVQUFBLElBTUFwSSxFQUFBbUksU0FBQXpJLFVBQUFzSixNQUFBLFdBQ0EsT0FBQTVJLEtBQUFnSSxVQUFBWSxTQVFBaEosRUFBQW1JLFNBQUF6SSxVQUFBdUosU0FBQSxTQUFBVCxFQUFBTSxHQUNBQSxFQUFBOUksRUFBQW1ELFdBQUEyRixFQUFBLFFBQ0EsSUFBQUosRUFBQXRJLEtBQUF1SSxRQUFBSCxFQUFBTSxHQUNBLE9BQUFKLEVBQUEsRUFBQXRJLEtBQUFnSSxVQUFBMUcsT0FDQXRCLEtBQUFnSSxVQUFBTSxFQUFBLEdBRUEsTUFTQTFJLEVBQUFtSSxTQUFBekksVUFBQXdKLFVBQUEsU0FBQVYsRUFBQU0sR0FDQUEsRUFBQTlJLEVBQUFtRCxXQUFBMkYsRUFBQSxRQUNBLElBQUFmLEVBQUEzSCxLQUFBZ0ksVUFBQTFHLE9BRUEsR0FBQXFHLEVBQUEsR0FBQTNILEtBQUFnSSxVQUFBTCxFQUFBLEdBQUFlLEdBQUFOLEVBQ0EsT0FBQXBJLEtBQUFnSSxVQUFBTCxFQUFBLEdBRUEsSUFBQVcsRUFBQXRJLEtBQUF1SSxRQUFBSCxFQUFBTSxHQUNBLE9BQUFKLEVBQUEsS0FDQXRJLEtBQUFnSSxVQUFBTSxFQUFBLEdBRUEsTUFRQTFJLEVBQUFtSSxTQUFBekksVUFBQXlKLE9BQUEsU0FBQUMsR0FDQSxHQUFBaEosS0FBQWdJLFVBQUExRyxPQUFBLEdBQ0EsSUFBQWdILEVBQUF0SSxLQUFBdUksUUFBQVMsR0FDQSxHQUFBVixHQUFBLEVBQ0EsR0FBQXRJLEtBQUFnSSxVQUFBTSxHQUFBRixPQUFBWSxFQUFBLENBRUEsUUFBQXRMLEVBQUE0SyxFQUF3QzVLLEdBQUEsR0FDeENzQyxLQUFBZ0ksVUFBQXRLLEdBQUEwSyxPQUFBWSxFQURnRHRMLElBRWhENEssRUFBQTVLLEVBS0FzQyxLQUFBZ0ksVUFBQWhJLEtBQUFnSSxVQUFBTixNQUFBLEVBQUFZLFFBRUF0SSxLQUFBZ0ksVUFBQWhJLEtBQUFnSSxVQUFBTixNQUFBLEVBQUFZLEVBQUEsUUFHQXRJLEtBQUFnSSxrQkFFVSxJQUFBaEksS0FBQWdJLFVBQUExRyxRQUVWdEIsS0FBQWdJLFVBQUEsR0FBQUksTUFBQVksSUFDQWhKLEtBQUFnSSxjQUdBLE9BQUFoSSxNQU9BSixFQUFBbUksU0FBQXpJLFVBQUEySixhQUFBLFNBQUFiLEdBQ0EsSUFBQUUsRUFBQXRJLEtBQUF1SSxRQUFBSCxHQUlBLE9BSEFFLEdBQUEsSUFDQXRJLEtBQUFnSSxVQUFBaEksS0FBQWdJLFVBQUFOLE1BQUFZLEVBQUEsSUFFQXRJLE1BT0FKLEVBQUFtSSxTQUFBekksVUFBQTRKLGNBQUEsU0FBQWxDLEdBQ0EsSUFBQXNCLEVBQUF0SSxLQUFBZ0ksVUFBQTdHLFFBQUE2RixHQUNBLE9BQUFzQixFQUFBLEVBQ0F0SSxLQUFBZ0ksVUFBQU0sRUFBQSxHQUVBLE1BYUExSSxFQUFBbUksU0FBQXpJLFVBQUFpSixRQUFBLFNBQUFILEVBQUFNLEdBQ0EsT0FBQTFJLEtBQUFnSSxVQUFBMUcsT0FDQSxTQUVBb0gsRUFBQTlJLEVBQUFtRCxXQUFBMkYsRUFBQSxRQUNBLElBQUFTLEVBQUEsRUFDQXhCLEVBQUEzSCxLQUFBZ0ksVUFBQTFHLE9BQ0E4SCxFQUFBekIsRUFDQSxHQUFBQSxFQUFBLEdBQUEzSCxLQUFBZ0ksVUFBQUwsRUFBQSxHQUFBZSxJQUFBTixFQUNBLE9BQUFULEVBQUEsRUFFQSxLQUFBd0IsRUFBQUMsR0FBQSxDQUVBLElBQUFDLEVBQUF6RSxLQUFBMEUsTUFBQUgsR0FBQUMsRUFBQUQsR0FBQSxHQUNBbkMsRUFBQWhILEtBQUFnSSxVQUFBcUIsR0FDQUUsRUFBQXZKLEtBQUFnSSxVQUFBcUIsRUFBQSxHQUNBLEdBQUFyQyxFQUFBMEIsS0FBQU4sRUFBQSxDQUVBLFFBQUExSyxFQUFBMkwsRUFBdUMzTCxFQUFBc0MsS0FBQWdJLFVBQUExRyxPQUEyQjVELElBQ2xFc0MsS0FBQWdJLFVBQUF0SyxHQUNBZ0wsS0FBQU4sSUFDQWlCLEVBQUEzTCxHQUdBLE9BQUEyTCxFQUNjLEdBQUFyQyxFQUFBMEIsR0FBQU4sR0FBQW1CLEVBQUFiLEdBQUFOLEVBQ2QsT0FBQWlCLEVBQ2NyQyxFQUFBMEIsR0FBQU4sRUFFZGdCLEVBQUFDLEVBR0FGLEVBQUFFLEVBQUEsRUFHQSxVQVVBekosRUFBQW1JLFNBQUF6SSxVQUFBa0ssU0FBQSxTQUFBdkMsRUFBQXdDLEVBQUFDLEdBQ0FELEVBQUE3SixFQUFBbUQsV0FBQTBHLEVBQUEsR0FDQUMsRUFBQTlKLEVBQUFtRCxXQUFBMkcsRUFBQTFKLEtBQUFnSSxVQUFBMUcsT0FBQSxHQUNBdEIsS0FBQWdJLFVBQUFOLE1BQUErQixFQUFBQyxFQUFBLEdBQUFDLFFBQUEsU0FBQTNDLEdBQ0FDLEVBQUFwSixLQUFBbUMsS0FBQWdILElBQ1U5SCxLQUFBYyxRQU9WSixFQUFBbUksU0FBQXpJLFVBQUFxSyxRQUFBLFNBQUExQyxHQUVBLE9BREFqSCxLQUFBd0osU0FBQXZDLEdBQ0FqSCxNQVFBSixFQUFBbUksU0FBQXpJLFVBQUFzSyxjQUFBLFNBQUF4QixFQUFBbkIsR0FFQSxJQUFBeUMsRUFBQTFKLEtBQUF1SSxRQUFBSCxHQUlBLE9BSEEsSUFBQXNCLEdBQ0ExSixLQUFBd0osU0FBQXZDLEVBQUEsRUFBQXlDLEdBRUExSixNQVFBSixFQUFBbUksU0FBQXpJLFVBQUF1SyxhQUFBLFNBQUF6QixFQUFBbkIsR0FFQSxJQUFBd0MsRUFBQXpKLEtBQUF1SSxRQUFBSCxHQUVBLE9BREFwSSxLQUFBd0osU0FBQXZDLEVBQUF3QyxFQUFBLEdBQ0F6SixNQVdBSixFQUFBbUksU0FBQXpJLFVBQUF3SyxlQUFBLFNBQUFDLEVBQUFDLEVBQUEvQyxHQUNBLElBQUF3QyxFQUFBekosS0FBQXVJLFFBQUF3QixHQUNBTCxFQUFBMUosS0FBQXVJLFFBQUF5QixHQWFBLE9BWkEsSUFBQVAsSUFBQSxJQUFBQyxHQUNBMUosS0FBQWdJLFVBQUF5QixHQUFBckIsT0FBQTJCLElBQ0FOLEdBQUEsR0FHQXpKLEtBQUFnSSxVQUFBMEIsR0FBQXRCLE9BQUE0QixJQUNBTixHQUFBLEdBRUExSixLQUFBd0osU0FBQXZDLEVBQUF3QyxFQUFBQyxLQUNVLElBQUFELEdBQ1Z6SixLQUFBd0osU0FBQXZDLEVBQUEsRUFBQXlDLEdBRUExSixNQVNBSixFQUFBbUksU0FBQXpJLFVBQUEySyxZQUFBLFNBQUE3QixFQUFBbkIsR0FJQSxJQUZBLElBQUF3QyxFQUFBekosS0FBQXVJLFFBQUFILEdBRUFxQixHQUFBLEdBQUF6SixLQUFBZ0ksVUFBQXlCLEdBQUFyQixTQUNBcUIsSUFHQSxPQURBekosS0FBQXdKLFNBQUF2QyxFQUFBd0MsRUFBQSxHQUNBekosTUFRQUosRUFBQW1JLFNBQUF6SSxVQUFBNEssY0FBQSxTQUFBOUIsRUFBQW5CLEdBRUEsSUFBQXlDLEVBQUExSixLQUFBdUksUUFBQUgsR0FRQSxPQVBBLElBQUFzQixHQUNBMUosS0FBQXdKLFNBQUEsU0FBQXhDLEdBQ0FBLEVBQUFvQixVQUNBbkIsRUFBQXBKLEtBQUFtQyxLQUFBZ0gsSUFFYyxFQUFBMEMsR0FFZDFKLE1BTUFKLEVBQUFtSSxTQUFBekksVUFBQW1CLFFBQUEsV0FHQSxPQUZBYixFQUFBTixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBZ0ksVUFBQSxLQUNBaEksTUFFQUosRUFBQW1JLFdBRUFsSSxFQUFBLFNBQUFELEdBQ0FBLEVBQUF1SyxhQUNBL0QsT0FBQTdHLGVBQUEsd0JBQUE2RyxPQUFBN0csZUFBQSwrQkFDQTZHLE9BQUFnRSxvQkFBQWhFLE9BQUFpRSwyQkFHQSxJQUFBRCxvQkFBQSxXQUNBRSwyQkFDQUMsVUFDQUgsb0JBQUE5SyxVQUFBa0wsdUJBQUFKLG9CQUFBOUssVUFBQWdMLGVBQ0FGLG9CQUFBOUssVUFBQWdMLGVBQUEsV0FDQSxXQUFBQyxRQUFBLFNBQUFFLEdBQ0F6SyxLQUFBMEssV0FBQSxTQUFBQyxHQUNBRixFQUFBRSxFQUFBQyxpQkFFQTVLLEtBQUF3SywwQkFDa0J0TCxLQUFBYyxZQUtsQkgsRUFBQSxTQUFBRCxHQUNBLEdBQUFBLEVBQUF1SyxVQUFBLEVBQ0EvRCxPQUFBN0csZUFBQSxpQkFBQTZHLE9BQUE3RyxlQUFBLHdCQUNBNkcsT0FBQXlFLGFBQUF6RSxPQUFBMEUsb0JBR0FELGFBQUF2TCxVQUFBeUwsUUFDQUYsYUFBQXZMLFVBQUF5TCxNQUFBLFdBSUEsT0FIQW5MLEVBQUFZLFdBQUFSLEtBQUFnTCxVQUNBaEwsS0FBQWdMLFVBRUFULFFBQUEvRCxZQUlBcUUsYUFBQXZMLFVBQUEyTCxTQUNBSixhQUFBdkwsVUFBQTJMLE9BQUEsV0FDQSxPQUFBVixRQUFBL0QsYUFJQXFFLGFBQUF2TCxVQUFBNEwsWUFBQUwsYUFBQXZMLFVBQUE2TCxpQkFDQU4sYUFBQXZMLFVBQUE0TCxXQUFBTCxhQUFBdkwsVUFBQTZMLGlCQUdBTixhQUFBdkwsVUFBQThMLGFBQUFQLGFBQUF2TCxVQUFBK0wsa0JBQ0FSLGFBQUF2TCxVQUFBOEwsWUFBQVAsYUFBQXZMLFVBQUErTCxpQkFLQSxJQUFBQyxHQUFBLEVBQ0FDLEVBQUEsSUFBQW5CLG9CQUFBLFdBQ0FvQixFQUFBLElBQUFDLGFBQ0EsV0FDQSxHQUNBLFdBQ0EsVUFDQSxHQUNBLE9BQ0EsTUFDQSxPQUNBLFFBQ0EsV0FDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLElBQ0FDLE9BQ0EsSUFDQUgsRUFBQUksZ0JBQUFILGFBQ0FqQixVQUNBZSxHQUFBLEdBRVUsTUFBQVgsR0FDVlcsR0FBQSxFQUVBQSxJQUNBVCxhQUFBdkwsVUFBQXNNLHdCQUFBZixhQUFBdkwsVUFBQXFNLGdCQUNBZCxhQUFBdkwsVUFBQXFNLGdCQUFBLFNBQUFILEdBQ0EsV0FBQWpCLFFBQUEsU0FBQXNCLEVBQUFDLEdBQ0E5TCxLQUFBNEwsd0JBQUFKLEVBQUFLLEVBQUFDLElBQ2tCNU0sS0FBQWMsWUFLbEJILEVBQUEsU0FBQUQsR0FNQUEsRUFBQWtHLFFBQUEsV0FDQWxHLEVBQUFrSCxRQUFBakosS0FBQW1DLE1BQ0EsSUFBQThDLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FBQSxXQUFBMUQsRUFBQWtHLFNBQ0EsSUFBQWhELEVBQUEyQyxVQUNBM0MsRUFBQTJDLFFBQUEsSUFBQVcsT0FBQXlFLGNBQ0EvSCxFQUFBMkMsU0FDQSxVQUFBeEYsTUFBQSxtRkFLQSxRQUFBOEwsS0FGQS9MLEtBQUFnTSxTQUFBbEosRUFBQTJDLFFBRUF6RixLQUFBZ00sU0FDQWhNLEtBQUFpTSxnQkFBQWpNLEtBQUFnTSxTQUFBRCxHQU9BL0wsS0FBQWtNLGFBQUFwSixFQUFBcUosWUFNQW5NLEtBQUFvTSxjQVNBcE0sS0FBQXFNLFVBQUF2SixFQUFBdUosVUFNQXJNLEtBQUFzTSx3QkFBQSxFQU1BdE0sS0FBQXVNLFFBQUEsSUFBQUMsRUFBQXhNLEtBQUErRixLQUFBN0csS0FBQWMsS0FBQSxRQUFBOEMsRUFBQTJKLFlBQUEzSixFQUFBNEosZ0JBU0ExTSxLQUFBMk0sVUFBQSxJQUFBL00sRUFBQW1JLFNBTUEvSCxLQUFBNE0sWUFBQSxFQUNBNU0sS0FBQTRHLEdBQUEsT0FBQTVHLEtBQUE2TSxhQUFBM04sS0FBQWMsUUFFQUosRUFBQThGLE9BQUE5RixFQUFBa0csUUFBQWxHLEVBQUFrSCxTQUNBbEgsRUFBQWtILFFBQUFjLE1BQUFoSSxFQUFBa0csU0FNQWxHLEVBQUFrRyxRQUFBdEQsVUFDQWlLLFlBQUEsU0FDQU4sWUFBQSxjQUNBRSxVQUFBLEdBQ0FLLGVBQUEsS0FTQTlNLEVBQUFrRyxRQUFBeEcsVUFBQTJNLGdCQUFBLFNBQUF4RyxFQUFBc0csR0FDQW5NLEVBQUErQixRQUFBM0IsS0FBQStMLEtBQ0EzTixPQUFBQyxlQUFBMkIsS0FBQStMLEdBQ0F4TixJQUFBLFdBQ0EseUJBQUFrSCxFQUFBc0csR0FDQXRHLEVBQUFzRyxHQUFBN00sS0FBQXVHLEdBRUFBLEVBQUFzRyxJQUdBckwsSUFBQSxTQUFBK0MsR0FDQWdDLEVBQUFzRyxHQUFBdEksTUFTQTdELEVBQUFrRyxRQUFBeEcsVUFBQWtHLElBQUEsV0FDQSxPQUFBeEYsS0FBQWdNLFNBQUFjLFlBQUE5TSxLQUFBcU0sV0FPQXpNLEVBQUFrRyxRQUFBeEcsVUFBQXlOLE1BQUEsV0FDQSxXQUFBeEMsUUFBQSxTQUFBRSxHQUNBLFlBQUF6SyxLQUFBZ00sU0FBQWdCLE1BQ0F2QyxJQUVBekssS0FBQWdNLFNBQUFmLFNBQUFnQyxLQUFBLFdBQ0F4QyxPQUdVdkwsS0FBQWMsUUFPVkosRUFBQWtHLFFBQUF4RyxVQUFBeUwsTUFBQSxXQUNBLE9BQUEvSyxLQUFBZ00sU0FBQWpCLFFBQUFrQyxLQUFBLFdBQ0FyTixFQUFBa0csUUFBQUMsS0FBQSxRQUFBL0YsT0FDVWQsS0FBQWMsUUFPVkosRUFBQWtHLFFBQUF4RyxVQUFBNE4sWUFBQSxTQUFBekosR0FDQSxHQUFBekQsS0FBQW9NLFdBQUEzSSxHQUNBLE9BQUF6RCxLQUFBb00sV0FBQTNJLEdBSUEsSUFGQSxJQUFBaUksRUFBQTFMLEtBQUFnTSxTQUFBbUIsYUFBQSxNQUFBbk4sS0FBQWdNLFNBQUE5RixZQUNBa0gsRUFBQTFCLEVBQUEyQixlQUFBLEdBQ0EzUCxFQUFBLEVBQTRCQSxFQUFBMFAsRUFBQTlMLE9BQWdCNUQsSUFDNUMwUCxFQUFBMVAsR0FBQStGLEVBRUEsSUFBQTZKLEVBQUF0TixLQUFBZ00sU0FBQXVCLHFCQU9BLE9BTkFELEVBQUFFLGFBQUEsRUFDQUYsRUFBQUcsaUJBQUEsV0FDQUgsRUFBQTVCLFNBQ0E0QixFQUFBSSxNQUFBLEVBQ0FKLEVBQUFLLE1BQUEsR0FDQTNOLEtBQUFvTSxXQUFBM0ksR0FBQTZKLEVBQ0FBLEdBUUExTixFQUFBa0csUUFBQXhHLFVBQUF1TixhQUFBLFdBRUEsSUFEQSxJQUFBckgsRUFBQXhGLEtBQUF3RixNQUNBeEYsS0FBQTJNLFdBQUEzTSxLQUFBMk0sVUFBQXJMLFFBQUF0QixLQUFBMk0sVUFBQWhFLE9BQUFQLE1BQUE1QyxHQUNBeEYsS0FBQTJNLFVBQUEvRCxRQUFBM0IsWUFVQXJILEVBQUFrRyxRQUFBeEcsVUFBQXNPLFdBQUEsU0FBQUMsRUFBQUMsR0FDQTlOLEtBQUE0TSxjQUNBLElBQUFwSCxFQUFBeEYsS0FBQXdGLE1BTUEsT0FMQXhGLEtBQUEyTSxVQUFBeEUsS0FDQWxCLFNBQUE0RyxFQUNBekYsS0FBQTVDLEVBQUFzSSxFQUNBQyxHQUFBL04sS0FBQTRNLGNBRUE1TSxLQUFBNE0sYUFPQWhOLEVBQUFrRyxRQUFBeEcsVUFBQTBPLGFBQUEsU0FBQUQsR0FNQSxPQUxBL04sS0FBQTJNLFVBQUFoRCxRQUFBLFNBQUEzQyxHQUNBQSxFQUFBK0csUUFDQS9OLEtBQUF5SSxPQUFBekIsS0FHQWhILE1BV0E1QixPQUFBQyxlQUFBdUIsRUFBQWtHLFFBQUF4RyxVQUFBLGtCQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUF1TSxRQUFBRyxnQkFFQWhNLElBQUEsU0FBQTZFLEdBQ0F2RixLQUFBdU0sUUFBQUcsZUFBQW5ILEtBVUFuSCxPQUFBQyxlQUFBdUIsRUFBQWtHLFFBQUF4RyxVQUFBLGVBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXVNLFFBQUEwQixNQUVBdk4sSUFBQSxTQUFBdU4sR0FDQWpPLEtBQUF1TSxRQUFBMEIsVUFrQkE3UCxPQUFBQyxlQUFBdUIsRUFBQWtHLFFBQUF4RyxVQUFBLGVBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQWtNLGNBRUF4TCxJQUFBLFNBQUF3TixHQUNBLElBQUE3QixFQUFBNkIsRUFFQSxHQURBbE8sS0FBQWtNLGFBQUFnQyxFQUNBdE8sRUFBQWtCLFNBQUFvTixHQUNBLE9BQUFBLEdBQ0Esa0JBQ0E3QixFQUFBLEdBQ0FyTSxLQUFBZ00sU0FBQUcsWUFBQStCLEVBQ0EsTUFDQSxlQUNBN0IsRUFBQSxHQUNBck0sS0FBQWdNLFNBQUFHLFlBQUErQixFQUNBLE1BQ0EsZUFDQTdCLEVBQUEsSUFDQXJNLEtBQUFnTSxTQUFBRyxZQUFBK0IsRUFDQSxNQUNBLGNBQ0FsTyxLQUFBZ00sU0FBQUcsWUFBQSxjQUNBRSxFQUFBLElBSUFyTSxLQUFBcU0sWUFDQXJNLEtBQUEwTSxlQUFBTCxFQUFBLEtBUUF6TSxFQUFBa0csUUFBQXhHLFVBQUFtQixRQUFBLFdBQ0EsT0FBQVQsS0FBQStLLFFBQUFrQyxLQUFBLFdBTUEsUUFBQWtCLEtBTEF2TyxFQUFBa0gsUUFBQXhILFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUF1TSxRQUFBOUwsVUFDQVQsS0FBQXVNLFFBQUEsS0FDQXZNLEtBQUEyTSxVQUFBbE0sVUFDQVQsS0FBQTJNLFVBQUEsS0FDQTNNLEtBQUFvTSxXQUNBcE0sS0FBQW9NLFdBQUErQixHQUFBQyxhQUVBcE8sS0FBQW9NLFdBQUEsTUFDVWxOLEtBQUFjLFFBT1YsSUFBQXdNLEVBQUEsU0FBQXZGLEVBQUFnSCxFQUFBdkIsR0FNQTFNLEtBQUFxTyxNQUFBSixFQU1Bak8sS0FBQXNPLGdCQUFBNUIsRUFNQTFNLEtBQUF1TyxVQUFBM08sRUFBQW1ELFdBQUFrRSxFQUFBckgsRUFBQXFFLE1BRUFqRSxLQUFBd08sZ0JBbUxBLE9BNUtBaEMsRUFBQWlDLE1BQ0FDLE9BQUEsU0FDQUMsUUFBQSxVQUNBQyxRQUFBLFdBT0FwQyxFQUFBbE4sVUFBQXVQLGNBQUEsV0FFQXpJLE9BQUEwSSxJQUFBMUksT0FBQTBJLEtBQUExSSxPQUFBMkksVUFDQSxJQUFBQyxFQUFBLElBQUFDLE1BQ0EsMEJBQUFqUCxLQUFBc08saUJBQUFZLFFBQUEsZ0tBS0FDLEVBQUFMLElBQUFNLGdCQUFBSixHQUNBSyxFQUFBLElBQUFYLE9BQUFTLEdBQ0FFLEVBQUFDLFVBQUF0UCxLQUFBdU8sVUFBQXJQLEtBQUFjLE1BQ0FBLEtBQUF1UCxRQUFBRixHQU1BN0MsRUFBQWxOLFVBQUFrUSxlQUFBLFdBQ0F4UCxLQUFBeVAsU0FBQTdCLFdBQUEsV0FDQTVOLEtBQUF3UCxpQkFDQXhQLEtBQUF1TyxhQUNVclAsS0FBQWMsTUFBQSxJQUFBQSxLQUFBc08sa0JBTVY5QixFQUFBbE4sVUFBQWtQLGFBQUEsV0FDQSxHQUFBeE8sS0FBQXFPLFFBQUE3QixFQUFBaUMsS0FBQUMsT0FDQSxJQUNBMU8sS0FBQTZPLGdCQUNjLE1BQUFsRSxHQUVkM0ssS0FBQXFPLE1BQUE3QixFQUFBaUMsS0FBQUUsUUFDQTNPLEtBQUF3TyxvQkFFVXhPLEtBQUFxTyxRQUFBN0IsRUFBQWlDLEtBQUFFLFNBQ1YzTyxLQUFBd1Asa0JBU0FwUixPQUFBQyxlQUFBbU8sRUFBQWxOLFVBQUEsa0JBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXNPLGlCQUVBNU4sSUFBQSxTQUFBNkUsR0FDQXZGLEtBQUFzTyxnQkFBQTFKLEtBQUE4SyxJQUFBbkssRUFBQSxXQUNBdkYsS0FBQXFPLFFBQUE3QixFQUFBaUMsS0FBQUMsUUFDQTFPLEtBQUF1UCxRQUFBSSxZQUFBL0ssS0FBQThLLElBQUEsSUFBQW5LLEVBQUEsT0FXQW5ILE9BQUFDLGVBQUFtTyxFQUFBbE4sVUFBQSxRQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFxTyxPQUVBM04sSUFBQSxTQUFBdU4sR0FDQWpPLEtBQUE0UCxnQkFDQTVQLEtBQUFxTyxNQUFBSixFQUNBak8sS0FBQXdPLGtCQU9BaEMsRUFBQWxOLFVBQUFzUSxjQUFBLFdBQ0E1UCxLQUFBeVAsV0FDQXpCLGFBQUFoTyxLQUFBeVAsVUFDQXpQLEtBQUF5UCxTQUFBLE1BRUF6UCxLQUFBdVAsVUFDQXZQLEtBQUF1UCxRQUFBTSxZQUNBN1AsS0FBQXVQLFFBQUFELFVBQUEsS0FDQXRQLEtBQUF1UCxRQUFBLE9BT0EvQyxFQUFBbE4sVUFBQW1CLFFBQUEsV0FDQVQsS0FBQTRQLGdCQUNBNVAsS0FBQXVPLFVBQUEsTUFPQTNPLEVBQUEyRyxXQUFBLFdBQ0EsSUFBQXVKLEVBQUFDLFVBQUF6USxVQUFBa0UsUUFDQXdNLEVBQUFELFVBQUF6USxVQUFBOE8sV0FFQSxTQUFBNkIsRUFBQUMsRUFBQUMsRUFBQUMsR0FDQSxHQUFBRixFQUFBRyxNQUVBLE9BREFELEVBQUF4USxFQUFBbUQsV0FBQXFOLEVBQUEsR0FDQXhRLEVBQUFpRSxRQUFBcU0sRUFBQUcsT0FDQXJRLEtBQUF3RCxRQUFBME0sRUFBQUcsTUFBQUQsSUFFQXBRLEtBQUF3RCxRQUFBME0sRUFBQUcsTUFBQUYsRUFBQUMsR0FHQSxJQUNBLE9BQUFGLGFBQUFILFdBQ0FELEVBQUFqUyxLQUFBbUMsS0FBQWtRLEVBQUFDLEVBQUFDLEdBQ0FGLElBRUFKLEVBQUFqUyxLQUFBbUMsS0FBQWtRLEVBQUFDLEdBQ0FELEdBRWtCLE1BQUF2RixHQUNsQixVQUFBMUssTUFBQSw2QkFBQWlRLEVBQUEsS0FBQXZGLElBbUJBb0YsVUFBQXpRLFVBQUFrRSxVQUFBeU0sSUFDQUYsVUFBQXpRLFVBQUFrRSxRQUFBeU0sRUFDQUYsVUFBQXpRLFVBQUE4TyxXQWhCQSxTQUFBOEIsRUFBQUMsRUFBQUMsR0FDQSxHQUFBRixLQUFBRyxPQUFBelEsRUFBQWlFLFFBQUFxTSxFQUFBRyxPQUNBRCxFQUFBeFEsRUFBQW1ELFdBQUFxTixFQUFBLEdBQ0FwUSxLQUFBb08sV0FBQThCLEVBQUFHLE1BQUFELEdBQUFELEVBQUEsUUFDYyxHQUFBRCxLQUFBRyxNQUNkclEsS0FBQW9PLFdBQUE4QixFQUFBRyxNQUFBRixFQUFBQyxRQUVBLElBQ0FKLEVBQUExSSxNQUFBdEgsS0FBQXNELFdBQ2tCLE1BQUFxSCxHQUNsQixVQUFBMUssTUFBQSw2QkFBQWlRLEVBQUEsS0FBQXZGLFFBVUEvSyxFQUFBdUssWUFBQXZLLEVBQUE2RyxhQUNBN0csRUFBQTZGLFFBQUEsSUFBQTdGLEVBQUFrRyxRQUdBTSxPQUFBa0ssOEJBRUFDLFFBQUFuTCxJQUFBLGdCQUFBeEYsRUFBQWlILFFBQUEsd0NBRU1qSCxFQUFBdUssV0FFTm9HLFFBQUFDLEtBQUEseUNBRUE1USxFQUFBa0csVUFFQWpHLEVBQUEsU0FBQUQsR0FrUEEsT0EzT0FBLEVBQUFtUSxVQUFBLFdBQ0FuUSxFQUFBL0IsS0FBQW1DLE1BRUEsSUFBQThDLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FBQSxZQUE4RG1DLFFBQUE3RixFQUFBNkYsVUFNOUR6RixLQUFBZ00sU0FBQWxKLEVBQUEyQyxTQUVBN0YsRUFBQThGLE9BQUE5RixFQUFBbVEsV0FRQTNSLE9BQUFDLGVBQUF1QixFQUFBbVEsVUFBQXpRLFVBQUEsV0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBZ00sWUFVQXBNLEVBQUFtUSxVQUFBelEsVUFBQW1SLGNBQUEsU0FBQUMsRUFBQUMsR0FDQSxJQUFBRCxFQUNBMVEsS0FBQXFRLE1BQUFyUSxLQUFBeUYsUUFBQXlGLGFBQ1V3RixFQUFBLElBQ1YxUSxLQUFBcVEsTUFBQSxJQUFBdk0sTUFBQTRNLElBRUEsSUFBQUMsRUFDQTNRLEtBQUE0USxPQUFBNVEsS0FBQXlGLFFBQUF5RixhQUNVeUYsRUFBQSxJQUNWM1EsS0FBQTRRLE9BQUEsSUFBQTlNLE1BQUE2TSxLQWFBdlMsT0FBQUMsZUFBQXVCLEVBQUFtUSxVQUFBelEsVUFBQSxnQkFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBNFEsT0FBQXBELGNBRUE5TSxJQUFBLFNBQUEzQyxHQUNBLE9BQUFpQyxLQUFBNFEsT0FBQXBELGFBQUF6UCxLQVlBSyxPQUFBQyxlQUFBdUIsRUFBQW1RLFVBQUF6USxVQUFBLG9CQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUE0USxPQUFBbkQsa0JBRUEvTSxJQUFBLFNBQUE1QyxHQUNBLE9BQUFrQyxLQUFBNFEsT0FBQW5ELGlCQUFBM1AsS0FZQU0sT0FBQUMsZUFBQXVCLEVBQUFtUSxVQUFBelEsVUFBQSx5QkFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBNFEsT0FBQUMsdUJBRUFuUSxJQUFBLFNBQUFoRCxHQUNBLE9BQUFzQyxLQUFBNFEsT0FBQUMsc0JBQUFuVCxLQVdBVSxPQUFBQyxlQUFBdUIsRUFBQW1RLFVBQUF6USxVQUFBLGtCQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFxUSxNQUNBelEsRUFBQWlFLFFBQUE3RCxLQUFBcVEsT0FDQXJRLEtBQUFxUSxNQUFBL08sT0FFQSxFQUdBLEtBV0FsRCxPQUFBQyxlQUFBdUIsRUFBQW1RLFVBQUF6USxVQUFBLG1CQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUE0USxPQUNBaFIsRUFBQWlFLFFBQUE3RCxLQUFBNFEsUUFDQTVRLEtBQUE0USxPQUFBdFAsT0FFQSxFQUdBLEtBUUExQixFQUFBbVEsVUFBQXpRLFVBQUF3UixXQUFBLGFBU0FsUixFQUFBbVEsVUFBQXpRLFVBQUFrRSxRQUFBLFNBQUF1TixFQUFBQyxFQUFBQyxHQVVBLE9BVEFGLEVBQUFELFlBQ0FDLEVBQUFELFdBQUE5USxNQUVBSixFQUFBaUUsUUFBQTdELEtBQUE0USxTQUNBSSxFQUFBcFIsRUFBQW1ELFdBQUFpTyxFQUFBLEdBQ0FoUixLQUFBNFEsT0FBQUksR0FBQXhOLFFBQUF1TixFQUFBLEVBQUFFLElBRUFqUixLQUFBNFEsT0FBQXBOLFFBQUF1TixFQUFBQyxFQUFBQyxHQUVBalIsTUFTQUosRUFBQW1RLFVBQUF6USxVQUFBOE8sV0FBQSxTQUFBOEMsRUFBQUYsRUFBQUMsR0FDQXJSLEVBQUFpRSxRQUFBN0QsS0FBQTRRLFFBQ0FoUixFQUFBOEQsU0FBQXdOLEdBQ0FsUixLQUFBNFEsT0FBQU0sR0FBQTlDLGNBRUE0QyxFQUFBcFIsRUFBQW1ELFdBQUFpTyxFQUFBLEdBQ0FoUixLQUFBNFEsT0FBQUksR0FBQTVDLFdBQUE4QyxFQUFBLEVBQUFELElBR0FqUixLQUFBNFEsT0FBQXhDLFdBQUE5RyxNQUFBdEgsS0FBQTRRLE9BQUF0TixZQVlBMUQsRUFBQW1RLFVBQUF6USxVQUFBNlIsTUFBQSxXQUVBLElBREEsSUFBQTlOLEVBQUFyRCxLQUNBdEMsRUFBQSxFQUF3QkEsRUFBQTRGLFVBQUFoQyxPQUFzQjVELElBQUEsQ0FDOUMsSUFBQTZGLEVBQUFELFVBQUE1RixHQUNBMkYsRUFBQUcsUUFBQUQsR0FDQUYsRUFBQUUsRUFFQSxPQUFBdkQsTUFRQUosRUFBQW1RLFVBQUF6USxVQUFBOFIsSUFBQSxXQUNBLFFBQUExVCxFQUFBLEVBQXdCQSxFQUFBNEYsVUFBQWhDLE9BQXNCNUQsSUFDOUNzQyxLQUFBd0QsUUFBQUYsVUFBQTVGLElBRUEsT0FBQXNDLE1BRUFvRyxPQUFBMkosWUFFQUEsVUFBQXpRLFVBQUE2UixNQUFBdlIsRUFBQW1RLFVBQUF6USxVQUFBNlIsTUFDQXBCLFVBQUF6USxVQUFBOFIsSUFBQXhSLEVBQUFtUSxVQUFBelEsVUFBQThSLEtBTUF4UixFQUFBbVEsVUFBQXpRLFVBQUFtQixRQUFBLFdBY0EsT0FiQWIsRUFBQTBDLFVBQUF0QyxLQUFBcVEsU0FDQXJRLEtBQUFxUSxpQkFBQU4sV0FDQS9QLEtBQUFxUSxNQUFBakMsYUFFQXBPLEtBQUFxUSxNQUFBLE1BRUF6USxFQUFBMEMsVUFBQXRDLEtBQUE0USxVQUNBNVEsS0FBQTRRLGtCQUFBYixXQUNBL1AsS0FBQTRRLE9BQUF4QyxhQUVBcE8sS0FBQTRRLE9BQUEsTUFFQTVRLEtBQUFnTSxTQUFBLEtBQ0FoTSxNQUVBSixFQUFBbVEsWUFFQWxRLEVBQUEsU0FBQUQsR0F1Q0EsT0EvQkFBLEVBQUF5UixXQUFBLFdBQ0F6UixFQUFBbVEsVUFBQWxTLEtBQUFtQyxPQUVBSixFQUFBOEYsT0FBQTlGLEVBQUF5UixXQUFBelIsRUFBQW1RLFdBWUFuUSxFQUFBeVIsV0FBQS9SLFVBQUFrRSxRQUFBLFNBQUE4TixFQUFBQyxFQUFBQyxHQWNBLE9BWkE1UixFQUFBZ0MsUUFBQWhDLEVBQUFnQyxTQUFBMFAsRUFBQS9RLGFBQUFYLEVBQUFpQyxPQUFBakMsRUFBQWlDLFFBQUF5UCxFQUFBL1EsYUFFQStRLEVBQUFHLE9BQUFDLHNCQUFBLEdBRUFKLEVBQUFHLE9BQUE5UyxNQUFBLEVBRUEyUyxFQUFBSyxZQUFBLEdBQ1VMLGFBQUF2UCxhQUNWdVAsRUFBQUksc0JBQUEsR0FDQUosRUFBQTNTLE1BQUEsR0FFQWlCLEVBQUFtUSxVQUFBelEsVUFBQWtFLFFBQUEzRixLQUFBbUMsS0FBQXNSLEVBQUFDLEVBQUFDLEdBQ0F4UixNQUVBSixFQUFBeVIsYUFFQXhSLEVBQUEsU0FBQUQsR0FDQSxHQUFBQSxFQUFBdUssVUFBQSxDQUVBLElBQUF5SCxFQUFBQyxVQUFBQyxVQUFBQyxjQUVBLEdBREFILEVBQUFJLFNBQUEsWUFBQUosRUFBQUksU0FBQSxVQUNBLENBQ0EsSUFBQUMsRUFBQSxTQUFBeE0sR0FHQSxRQUFBc0csS0FGQS9MLEtBQUFrUyxjQUFBbFMsS0FBQXFRLE1BQUFyUSxLQUFBNFEsT0FBQW5MLEVBQUEwTSwyQkFDQW5TLEtBQUFvUyxPQUFBLEtBQ0FwUyxLQUFBa1MsY0FDQWxTLEtBQUFpTSxnQkFBQWpNLEtBQUFrUyxjQUFBbkcsSUFHQTNOLE9BQUFDLGVBQUE0VCxFQUFBM1MsVUFBQSxTQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFvUyxRQUVBMVIsSUFBQSxTQUFBMlIsR0FDQXJTLEtBQUFvUyxPQUFBQyxFQUNBLElBQUFDLEVBQUEsSUFBQUMsYUFBQUYsRUFBQS9RLE9BQUEsR0FDQWdSLEVBQUE1UixJQUFBMlIsRUFBQSxHQUNBQyxFQUFBLEdBQUFELEVBQUEsR0FDQXJTLEtBQUFrUyxjQUFBRyxNQUFBQyxLQUdBTCxFQUFBM1MsVUFBQTJNLGdCQUFBLFNBQUF4RyxFQUFBc0csR0FDQW5NLEVBQUErQixRQUFBM0IsS0FBQStMLEtBQ0EzTixPQUFBQyxlQUFBMkIsS0FBQStMLEdBQ0F4TixJQUFBLFdBQ0EseUJBQUFrSCxFQUFBc0csR0FDQXRHLEVBQUFzRyxHQUFBN00sS0FBQXVHLEdBRUFBLEVBQUFzRyxJQUdBckwsSUFBQSxTQUFBK0MsR0FDQWdDLEVBQUFzRyxHQUFBdEksTUFLQW9ILGFBQUF2TCxVQUFBNlMseUJBQUF0SCxhQUFBdkwsVUFBQWtULGlCQUNBM0gsYUFBQXZMLFVBQUFrVCxpQkFBQSxXQUNBLFdBQUFQLEVBQUFqUyxXQUtBSCxFQUFBLFNBQUFELEdBNEhBLE9BbEdBQSxFQUFBNlMsV0FBQSxTQUFBQyxFQUFBQyxHQUNBL1MsRUFBQXlSLFdBQUF4VCxLQUFBbUMsTUFNQUEsS0FBQTRTLFFBQUE1UyxLQUFBcVEsTUFBQXJRLEtBQUE0USxPQUFBNVEsS0FBQXlGLFFBQUErTSxtQkFNQXhTLEtBQUFvUyxPQUFBLEtBQ0F0TyxNQUFBRCxRQUFBNk8sR0FDQTFTLEtBQUFxUyxNQUFBSyxFQUNVRyxTQUFBSCxJQUFBOVMsRUFBQStCLFFBQUErUSxHQUNWMVMsS0FBQW9TLE9BQUEsSUFBQUcsYUFBQTNTLEVBQUFtRCxXQUFBMlAsRUFBQSxPQUNVOVMsRUFBQVksV0FBQWtTLEtBQ1YxUyxLQUFBb1MsT0FBQSxJQUFBRyxhQUFBM1MsRUFBQW1ELFdBQUE0UCxFQUFBLE9BQ0EzUyxLQUFBOFMsT0FBQUosS0FHQTlTLEVBQUE4RixPQUFBOUYsRUFBQTZTLFdBQUE3UyxFQUFBeVIsWUFlQXpSLEVBQUE2UyxXQUFBblQsVUFBQXdULE9BQUEsU0FBQUosR0FFQSxJQURBLElBQUFKLEVBQUEsSUFBQXhPLE1BQUE5RCxLQUFBb1MsT0FBQTlRLFFBQ0E1RCxFQUFBLEVBQUFpSyxFQUFBM0gsS0FBQW9TLE9BQUE5USxPQUFrRDVELEVBQUFpSyxFQUFTakssSUFBQSxDQUMzRCxJQUFBcVYsRUFBQXJWLEdBQUFpSyxFQUFBLE9BQ0EySyxFQUFBNVUsR0FBQWdWLEVBQUFLLEVBQUFyVixHQUdBLE9BREFzQyxLQUFBcVMsTUFBQUMsRUFDQXRTLE1BVUE1QixPQUFBQyxlQUFBdUIsRUFBQTZTLFdBQUFuVCxVQUFBLFNBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQTRTLFFBQUFQLE9BRUEzUixJQUFBLFNBQUFnUyxHQUNBMVMsS0FBQW9TLE9BQUEsSUFBQUcsYUFBQUcsR0FDQTFTLEtBQUE0UyxRQUFBUCxNQUFBclMsS0FBQW9TLFVBVUFoVSxPQUFBQyxlQUFBdUIsRUFBQTZTLFdBQUFuVCxVQUFBLGNBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQTRTLFFBQUFJLFlBRUF0UyxJQUFBLFNBQUF1UyxHQUNBLEtBQ0EsT0FDQSxLQUNBLE1BQ0FqQixTQUFBaUIsR0FHQSxVQUFBQyxXQUFBLHNFQUZBbFQsS0FBQTRTLFFBQUFJLFdBQUFDLEtBVUFyVCxFQUFBNlMsV0FBQW5ULFVBQUFtQixRQUFBLFdBS0EsT0FKQWIsRUFBQXlSLFdBQUEvUixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBNFMsUUFBQXhFLGFBQ0FwTyxLQUFBNFMsUUFBQSxLQUNBNVMsS0FBQW9TLE9BQUEsS0FDQXBTLE1BRUFKLEVBQUE2UyxhQUVBNVMsRUFBQSxTQUFBRCxHQW9UQSxPQXZTQUEsRUFBQW9DLFNBQUEsU0FBQXlCLEVBQUEwUCxHQUVBLEtBQUFuVCxnQkFBQUosRUFBQW9DLFVBeUNBLFdBQUFwQyxFQUFBb0MsU0FBQXlCLEVBQUEwUCxHQTNCQSxHQVJBblQsS0FBQW9ULEtBQUEzUCxFQU1BekQsS0FBQXFULE9BQUFGLEVBRUF2VCxFQUFBK0IsUUFBQTNCLEtBQUFxVCxTQUFBelQsRUFBQWtCLFNBQUFkLEtBQUFvVCxPQUNBRSxXQUFBdFQsS0FBQW9ULE9BQUFwVCxLQUFBb1QsTUFBQSxNQUFBcFQsS0FBQW9ULEtBQUFHLE9BQUEsR0FDQXZULEtBQUFvVCxLQUFBRSxXQUFBdFQsS0FBQW9ULE1BQ0FwVCxLQUFBcVQsT0FBQXJULEtBQUF3VCxtQkFDYyxHQUFBL1AsS0FBQWxELGNBQUFQLEtBQUFPLFlBRWRQLEtBQUFvVCxLQUFBM1AsRUFBQTJQLEtBQ0FwVCxLQUFBcVQsT0FBQTVQLEVBQUE0UCxZQUNjLEdBQUE1UCxhQUFBN0QsRUFBQW9DLFNBQ2QsT0FBQWhDLEtBQUF3VCxlQUNBLFFBQ0F4VCxLQUFBb1QsS0FBQTNQLEVBQUFnUSxZQUNBLE1BQ0EsUUFDQXpULEtBQUFvVCxLQUFBM1AsRUFBQWlRLFVBQ0EsTUFDQSxTQUNBMVQsS0FBQW9ULEtBQUEzUCxFQUFBa1EsY0FDQSxNQUNBLFdBQ0EzVCxLQUFBb1QsS0FBQTNQLEVBQUFtUSxTQUNBLE1BQ0EsUUFDQSxVQUFBM1QsTUFBQSw4QkFBQUQsS0FBQXdULGlCQU9BNVQsRUFBQThGLE9BQUE5RixFQUFBb0MsVUFTQXBDLEVBQUFvQyxTQUFBMUMsVUFBQXVVLGNBQ0ExVSxHQUNBMlUsT0FBQSxpQkFDQUMsT0FBQSxTQUFBcFYsRUFBQXFWLEdBQ0FyVixFQUFBc1YsU0FBQXRWLEdBQ0EsSUFBQXVWLEVBQUEsTUFBQUYsRUFBQSxNQUNBLFdBQUFyVixFQUNBcUIsS0FBQW1VLGNBQUFuVSxLQUFBb1UscUJBQUFGLEVBRUFsVSxLQUFBbVUsY0FBQSxFQUFBeFYsR0FBQXVWLElBSUF0VixHQUNBa1YsT0FBQSxZQUNBQyxPQUFBLFNBQUFwVixHQUVBLE9BREFBLEVBQUFzVixTQUFBdFYsR0FDQXFCLEtBQUFtVSxjQUFBLEtBQUFGLFNBQUF0VixPQUdBYixHQUNBZ1csT0FBQSxZQUNBQyxPQUFBLFNBQUFwVixHQUNBLE9BQUFxQixLQUFBbVUsY0FBQUYsU0FBQXRWLEdBQUFxQixLQUFBb1UsdUJBR0ExVyxHQUNBb1csT0FBQSxZQUNBQyxPQUFBLFNBQUFwVixHQUNBLE9BQUFxQixLQUFBcVUsY0FBQUosU0FBQXRWLE1BR0EyVixJQUNBUixPQUFBLHVCQUNBQyxPQUFBLFNBQUFwVixHQUNBLE9BQUFxQixLQUFBdVUsa0JBQUFqQixXQUFBM1UsTUFHQTZWLElBQ0FWLE9BQUEsc0RBQ0FDLE9BQUEsU0FBQWpXLEVBQUEyVyxFQUFBaFYsR0FDQSxJQUFBaVYsRUFBQSxFQVVBLE9BVEE1VyxHQUFBLE1BQUFBLElBQ0E0VyxHQUFBMVUsS0FBQW1VLGNBQUFuVSxLQUFBb1Usb0JBQUFkLFdBQUF4VixLQUVBMlcsR0FBQSxNQUFBQSxJQUNBQyxHQUFBMVUsS0FBQW1VLGNBQUFiLFdBQUFtQixLQUVBaFYsR0FBQSxNQUFBQSxJQUNBaVYsR0FBQTFVLEtBQUFtVSxjQUFBYixXQUFBN1QsR0FBQSxJQUVBaVYsSUFHQWpWLEdBQ0FxVSxPQUFBLHFCQUNBQyxPQUFBLFNBQUFwVixHQUNBLE9BQUFxQixLQUFBMlUsZ0JBQUFyQixXQUFBM1UsTUFHQWlXLFNBQ0FkLE9BQUEsaUJBQ0FDLE9BQUEsU0FBQXBWLEdBQ0EsT0FBQXNWLFNBQUF0VixHQUFBcUIsS0FBQXlGLFFBQUFTLGFBR0EyTyxTQUNBZixPQUFBLG9CQUNBQyxPQUFBLFNBQUFwVixHQUNBLE9BQUFxQixLQUFBNlQsYUFBQTdULEtBQUF3VCxlQUFBTyxPQUFBbFcsS0FBQW1DLEtBQUFyQixNQVNBaUIsRUFBQW9DLFNBQUExQyxVQUFBa1UsY0FBQSxJQVNBNVQsRUFBQW9DLFNBQUExQyxVQUFBd1YsUUFBQSxXQUNBLE9BQUFsVixFQUFBbVYsVUFDQW5WLEVBQUFtVixVQUFBQyxJQUFBclcsTUFFQSxLQVFBaUIsRUFBQW9DLFNBQUExQyxVQUFBOFUsa0JBQUEsV0FDQSxPQUFBeFUsRUFBQW1WLFVBQ0FuVixFQUFBbVYsVUFBQUUsY0FFQSxHQVFBclYsRUFBQW9DLFNBQUExQyxVQUFBNFYsUUFBQSxXQUNBLE9BQUF0VixFQUFBbVYsVUFDQW5WLEVBQUFtVixVQUFBSSxJQUVBLEtBUUF2VixFQUFBb0MsU0FBQTFDLFVBQUE4VixLQUFBLFdBQ0EsT0FBQXBWLEtBQUF3RixPQVdBNUYsRUFBQW9DLFNBQUExQyxVQUFBaVYsa0JBQUEsU0FBQWMsR0FDQSxTQUFBQSxHQVFBelYsRUFBQW9DLFNBQUExQyxVQUFBNlUsY0FBQSxTQUFBbUIsR0FDQSxVQUFBdFYsS0FBQThVLFVBQUFRLEdBUUExVixFQUFBb0MsU0FBQTFDLFVBQUFxVixnQkFBQSxTQUFBWSxHQUNBLE9BQUFBLEdBUUEzVixFQUFBb0MsU0FBQTFDLFVBQUErVSxjQUFBLFNBQUFtQixHQUNBLE9BQUFBLEdBQUF4VixLQUFBbVUsY0FBQSxHQUFBblUsS0FBQWtWLFlBT0F0VixFQUFBb0MsU0FBQTFDLFVBQUFtVyxPQUFBLFdBQ0EsT0FBQXpWLEtBQUFvVixRQVVBeFYsRUFBQW9DLFNBQUExQyxVQUFBK0ksUUFBQSxXQUNBLEdBQUF6SSxFQUFBK0IsUUFBQTNCLEtBQUFvVCxNQUNBLE9BQUFwVCxLQUFBeVYsU0FDVSxHQUFBN1YsRUFBQWtCLFNBQUFkLEtBQUFvVCxPQUFBeFQsRUFBQStCLFFBQUEzQixLQUFBcVQsUUFDVixRQUFBRixLQUFBblQsS0FBQTZULGFBQ0EsR0FBQTdULEtBQUE2VCxhQUFBVixHQUFBVyxPQUFBOVAsS0FBQWhFLEtBQUFvVCxLQUFBc0MsUUFBQSxDQUNBMVYsS0FBQXFULE9BQUFGLEVBQ0EsTUFJQSxHQUFBdlQsRUFBQTBDLFVBQUF0QyxLQUFBcVQsUUFBQSxDQUNBLElBQUFzQyxFQUFBM1YsS0FBQTZULGFBQUE3VCxLQUFBcVQsUUFDQXVDLEVBQUE1VixLQUFBb1QsS0FBQWxULFdBQUF3VixPQUFBclYsTUFBQXNWLEVBQUE3QixRQUNBLE9BQUE4QixFQUNBRCxFQUFBNUIsT0FBQXpNLE1BQUF0SCxLQUFBNFYsRUFBQWxPLE1BQUEsSUFFQWlPLEVBQUE1QixPQUFBbFcsS0FBQW1DLEtBQUFzVCxXQUFBdFQsS0FBQW9ULE9BR0EsT0FBQXBULEtBQUFvVCxNQU9BeFQsRUFBQW9DLFNBQUExQyxVQUFBbVUsVUFBQSxXQUNBLE9BQUF6VCxLQUFBcUksV0FNQXpJLEVBQUFvQyxTQUFBMUMsVUFBQXFVLFlBQUEsV0FDQSxTQUFBM1QsS0FBQXlULGFBTUE3VCxFQUFBb0MsU0FBQTFDLFVBQUF1VyxVQUFBLFdBQ0EsT0FBQTdWLEtBQUF5VCxZQUFBelQsS0FBQXlGLFFBQUFTLFlBTUF0RyxFQUFBb0MsU0FBQTFDLFVBQUF3VyxlQUFBLFdBQ0EsV0FBQTlWLEtBQUF5VCxhQU1BN1QsRUFBQW9DLFNBQUExQyxVQUFBbUIsUUFBQSxXQUNBVCxLQUFBb1QsS0FBQSxLQUNBcFQsS0FBQXFULE9BQUEsTUFFQXpULEVBQUFvQyxXQUVBbkMsRUFBQSxTQUFBRCxHQWNBQSxFQUFBbVcsVUFBQSxTQUFBdFMsRUFBQTBQLEdBQ0EsS0FBQW5ULGdCQUFBSixFQUFBbVcsV0FHQSxXQUFBblcsRUFBQW1XLFVBQUF0UyxFQUFBMFAsR0FGQXZULEVBQUFvQyxTQUFBbkUsS0FBQW1DLEtBQUF5RCxFQUFBMFAsSUFLQXZULEVBQUE4RixPQUFBOUYsRUFBQW1XLFVBQUFuVyxFQUFBb0MsVUFJQXBDLEVBQUFtVyxVQUFBelcsVUFBQXVVLGFBQUF6VixPQUFBNFgsVUFBNkRwVyxFQUFBb0MsU0FBQTFDLFVBQUF1VSxjQUM3RG9DLE1BQ0FuQyxPQUFBLHVCQUNBQyxPQUFBLFNBQUFwVixHQUNBLGVBQUFxQixLQUFBd1QsY0FDQTdVLEVBRUFpQixFQUFBbVcsVUFBQUcsS0FBQXZYLEtBSUF3WCxNQUNBckMsT0FBQSxzQ0FDQUMsT0FBQSxTQUFBcUMsRUFBQUMsR0FDQSxJQUNBQyxFQURBQyxFQUFBSCxFQUFBckUsZUFDQSxJQUFBa0MsU0FBQW9DLEdBQUEsR0FDQSxlQUFBclcsS0FBQXdULGNBQ0E4QyxFQUVBMVcsRUFBQW1XLFVBQUFHLEtBQUFJLEtBSUE5QixJQUNBVixPQUFBLHFEQUNBQyxPQUFBLFNBQUFqVyxFQUFBMlcsRUFBQWhWLEdBQ0EsSUFBQWlWLEVBQUEsRUFVQSxPQVRBNVcsR0FBQSxNQUFBQSxJQUNBNFcsR0FBQTFVLEtBQUFtVSxjQUFBblUsS0FBQW9VLG9CQUFBZCxXQUFBeFYsS0FFQTJXLEdBQUEsTUFBQUEsSUFDQUMsR0FBQTFVLEtBQUFtVSxjQUFBYixXQUFBbUIsS0FFQWhWLEdBQUEsTUFBQUEsSUFDQWlWLEdBQUExVSxLQUFBbVUsY0FBQWIsV0FBQTdULEdBQUEsSUFFQWlWLE1BY0E5VSxFQUFBbVcsVUFBQXpXLFVBQUFrWCxVQUFBLFNBQUFqUixHQUNBLFdBQUF2RixLQUFBTyxZQUFBUCxLQUFBcUksVUFBQXpJLEVBQUEwRix5QkFBQUMsS0FVQTNGLEVBQUFtVyxVQUFBelcsVUFBQW1YLFVBQUEsU0FBQUMsR0FDQSxPQUFBQSxFQUFBQyxJQUFBLFNBQUFwUixHQUNBLE9BQUF2RixLQUFBd1csVUFBQWpSLElBQ1VyRyxLQUFBYyxRQVdWSixFQUFBbVcsVUFBQXpXLFVBQUFzVSxPQUFBLFdBQ0EsT0FBQWhVLEVBQUFtVyxVQUFBYSxLQUFBNVcsS0FBQXFJLFlBUUF6SSxFQUFBbVcsVUFBQXpXLFVBQUF1WCxPQUFBLFdBQ0EsSUFBQXhCLEVBQUFyVixLQUFBMlQsY0FDQXZPLEVBQUFSLEtBQUFrUyxLQUFBekIsRUFBQXpWLEVBQUFtVyxVQUFBZ0IsSUFDQVQsRUFBQTFSLEtBQUFvUyxNQUFBLEdBQUE1UixHQUFBLEdBQ0FpUixFQUFBelIsS0FBQTBFLE1BQUFnTixFQUFBLElBS0EsT0FKQUQsRUFBQSxJQUNBQyxJQUFBLEdBQUFELEdBRUFZLEVBQUFYLEVBQUEsSUFDQUQsRUFBQW5XLFlBTUFOLEVBQUFtVyxVQUFBelcsVUFBQW1VLFVBQUEsV0FDQSxTQUFBN1QsRUFBQW9DLFNBQUExQyxVQUFBbVUsVUFBQTVWLEtBQUFtQyxPQU1BSixFQUFBbVcsVUFBQXpXLFVBQUFxVSxZQUFBLFdBQ0EsT0FBQS9ULEVBQUFvQyxTQUFBMUMsVUFBQXFVLFlBQUE5VixLQUFBbUMsT0FNQUosRUFBQW1XLFVBQUF6VyxVQUFBb1UsUUFBQSxXQUNBLElBQUF3RCxFQUFBbFgsS0FBQW1VLGNBQUEsR0FDQWdELEVBQUFuWCxLQUFBcUksVUFBQTZPLEVBQ0EsT0FBQXRTLEtBQUEwRSxNQUFBNk4sRUFBQXZYLEVBQUFtVixVQUFBSSxNQVVBdlYsRUFBQW1XLFVBQUF6VyxVQUFBbVcsT0FBQSxXQUNBLFVBUUE3VixFQUFBbVcsVUFBQXpXLFVBQUFpVixrQkFBQSxTQUFBYyxHQUNBLE9BQUFBLEdBUUF6VixFQUFBbVcsVUFBQXpXLFVBQUErVSxjQUFBLFNBQUFtQixHQUNBLGFBQUFBLEdBQUE1VixFQUFBbVYsVUFBQUMsSUFBQXJXLE1BQUFpQixFQUFBbVYsVUFBQUksT0FRQXZWLEVBQUFtVyxVQUFBelcsVUFBQTZVLGNBQUEsU0FBQW1CLEdBQ0EsU0FBQTFWLEVBQUFvQyxTQUFBMUMsVUFBQTZVLGNBQUF0VyxLQUFBbUMsS0FBQXNWLElBUUExVixFQUFBbVcsVUFBQXpXLFVBQUFxVixnQkFBQSxTQUFBWSxHQUNBLFNBQUFBLEdBTUEzVixFQUFBbVcsVUFBQXpXLFVBQUFrVSxjQUFBLEtBUUEsSUFBQStDLEdBQ0FhLEtBQUEsRUFDQUMsSUFBQSxFQUNBdFosRUFBQSxFQUNBdVosS0FBQSxFQUNBQyxHQUFBLEVBQ0FDLElBQUEsRUFDQXhTLEdBQUEsRUFDQWhILEVBQUEsRUFDQXlaLEtBQUEsRUFDQUMsR0FBQSxFQUNBQyxJQUFBLEVBQ0FDLEdBQUEsRUFDQWpOLEVBQUEsRUFDQWtOLEtBQUEsRUFDQUMsR0FBQSxFQUNBQyxJQUFBLEVBQ0FDLEdBQUEsRUFDQUMsRUFBQSxFQUNBQyxLQUFBLEVBQ0FDLEdBQUEsRUFDQUMsSUFBQSxFQUNBQyxHQUFBLEVBQ0FDLEVBQUEsRUFDQUMsS0FBQSxFQUNBQyxHQUFBLEVBQ0FDLElBQUEsRUFDQUMsR0FBQSxFQUNBQyxFQUFBLEVBQ0FDLEtBQUEsR0FDQUMsR0FBQSxHQUNBQyxJQUFBLEVBQ0FDLEdBQUEsR0FDQUMsRUFBQSxHQUNBQyxLQUFBLEdBQ0FDLEdBQUEsSUFNQWpDLEdBQ0EsSUFDQSxLQUNBLElBQ0EsS0FDQSxJQUNBLElBQ0EsS0FDQSxJQUNBLEtBQ0EsSUFDQSxLQUNBLEtBK0JBLE9BdkJBclgsRUFBQW1XLFVBQUFnQixHQUFBLElBU0FuWCxFQUFBbVcsVUFBQUcsS0FBQSxTQUFBRCxHQUNBLE9BQUFyVyxFQUFBbVcsVUFBQWdCLEdBQUFuUyxLQUFBSyxJQUFBLEdBQUFnUixFQUFBLFNBVUFyVyxFQUFBbVcsVUFBQWEsS0FBQSxTQUFBdUMsR0FDQSxVQUFBdlUsS0FBQW9TLE1BQUEsR0FBQXBTLEtBQUFrUyxLQUFBcUMsRUFBQXZaLEVBQUFtVyxVQUFBZ0IsTUFFQW5YLEVBQUFtVyxZQUVBbFcsRUFBQSxTQUFBRCxHQThJQSxPQWxJQUEsRUFBQXdaLEtBQUEsU0FBQTNWLEVBQUEwUCxHQUNBLEtBQUFuVCxnQkFBQUosRUFBQXdaLE1BR0EsV0FBQXhaLEVBQUF3WixLQUFBM1YsRUFBQTBQLEdBRkF2VCxFQUFBb0MsU0FBQW5FLEtBQUFtQyxLQUFBeUQsRUFBQTBQLElBS0F2VCxFQUFBOEYsT0FBQTlGLEVBQUF3WixLQUFBeFosRUFBQW9DLFVBSUFwQyxFQUFBd1osS0FBQTlaLFVBQUF1VSxhQUFBelYsT0FBQTRYLFVBQXdEcFcsRUFBQW9DLFNBQUExQyxVQUFBdVUsY0FDeER3RixVQUNBdkYsT0FBQSxTQUNBQyxPQUFBLFNBQUF1RixHQUNBLEdBQUExWixFQUFBbVYsVUFBQSxDQUNBLElBQUF3RSxFQUFBLElBQUF2WixLQUFBTyxZQUFBK1ksR0FDQSxPQUFBMVosRUFBQW1WLFVBQUF5RSxnQkFBQUQsR0FFQSxXQUlBL1QsS0FDQXNPLE9BQUEsVUFDQUMsT0FBQSxTQUFBdUYsR0FDQSxPQUFBdFosS0FBQW9WLE9BQUEsSUFBQXBWLEtBQUFPLFlBQUErWSxPQWlCQTFaLEVBQUF3WixLQUFBOVosVUFBQStaLFNBQUEsU0FBQUksRUFBQS9VLEdBQ0FBLEVBQUE5RSxFQUFBbUQsV0FBQTJCLEVBQUEsR0FDQSxJQUFBZ1YsRUFBQSxJQUFBMVosS0FBQU8sWUFBQWtaLEdBQ0E5YSxFQUFBcUIsS0FBQXFJLFVBSUEsT0FBQTFKLEdBSEFpRyxLQUFBb1MsTUFBQXJZLEVBQUErYSxHQUNBQSxFQUNBL2EsR0FDQStGLEdBYUE5RSxFQUFBd1osS0FBQTlaLFVBQUFxYSxXQUFBLFdBR0EsSUFGQSxJQUFBdlIsRUFBQXBJLEtBQUF5VCxZQUNBbUcsR0FBQSxNQUNBQyxFQUFBLEVBQTRCQSxFQUFBLEVBQVdBLElBQUEsQ0FDdkMsSUFBQUosRUFBQTdVLEtBQUFLLElBQUEsRUFBQTRVLEdBQ0FELEVBQUFoWCxLQUFBNlcsRUFBQSxNQUNBRyxFQUFBaFgsS0FBQTZXLEVBQUEsS0FDQUcsRUFBQWhYLEtBQUE2VyxFQUFBLEtBRUFHLEVBQUFoWCxLQUFBLEtBRUEsSUFBQWtYLEVBQUFGLEVBQUEsR0FDQUcsRUFBQW5hLEVBQUF3WixLQUFBUSxFQUFBLElBQUFuRyxZQVFBLE9BUEFtRyxFQUFBalEsUUFBQSxTQUFBcVEsR0FDQSxJQUFBQyxFQUFBcmEsRUFBQXdaLEtBQUFZLEdBQUF2RyxZQUNBN08sS0FBQXNWLElBQUFELEVBQUE3UixHQUFBeEQsS0FBQXNWLElBQUFILEVBQUEzUixLQUNBMFIsRUFBQUUsRUFDQUQsRUFBQUUsS0FHQUgsR0FNQWxhLEVBQUF3WixLQUFBOVosVUFBQTZhLHNCQUFBLFdBQ0EsSUFBQWpELEVBQUFsWCxLQUFBbVUsY0FBQSxHQUNBZ0QsRUFBQW5YLEtBQUFxSSxVQUFBNk8sRUFDQWtELEVBQUF4VixLQUFBMEUsTUFBQTZOLEVBQUFuWCxLQUFBb1UscUJBQ0FpRyxFQUFBbEQsRUFBQSxJQVlBLE9BWEFBLEVBQUF2UyxLQUFBMEUsTUFBQTZOLEdBQUFuWCxLQUFBb1UscUJBQ0FpRyxJQUFBbmEsWUFDQW9CLE9BQUEsSUFFQStZLEVBQUEvRyxzQkFBQStHLEdBQUFuTCxRQUFBLE1BR0FrTCxFQUNBakQsRUFDQWtELEdBRUE1WSxLQUFBLE1BTUE3QixFQUFBd1osS0FBQTlaLFVBQUFvVSxRQUFBLFdBQ0EsSUFBQXdELEVBQUFsWCxLQUFBbVUsY0FBQSxHQUNBZ0QsRUFBQW5YLEtBQUFxSSxVQUFBNk8sRUFDQSxPQUFBdFMsS0FBQW9TLE1BQUFHLEVBQUFuWCxLQUFBa1YsWUFNQXRWLEVBQUF3WixLQUFBOVosVUFBQW1VLFVBQUEsV0FDQSxPQUFBelQsS0FBQXFJLFdBTUF6SSxFQUFBd1osS0FBQTlaLFVBQUFzVSxPQUFBLFdBQ0EsT0FBQWhVLEVBQUFtVyxVQUFBYSxLQUFBNVcsS0FBQTJULGdCQUVBL1QsRUFBQXdaLE9BRUF2WixFQUFBLFNBQUFELEdBMkJBLE9BaEJBQSxFQUFBMGEsY0FBQSxTQUFBN1csRUFBQTBQLEdBQ0EsS0FBQW5ULGdCQUFBSixFQUFBMGEsZUFHQSxXQUFBMWEsRUFBQTBhLGNBQUE3VyxFQUFBMFAsR0FGQXZULEVBQUF3WixLQUFBdmIsS0FBQW1DLEtBQUF5RCxFQUFBMFAsSUFLQXZULEVBQUE4RixPQUFBOUYsRUFBQTBhLGNBQUExYSxFQUFBd1osTUFNQXhaLEVBQUEwYSxjQUFBaGIsVUFBQThWLEtBQUEsV0FDQSxPQUFBeFYsRUFBQW1WLFVBQUFRLFNBRUEzVixFQUFBMGEsZ0JBRUF6YSxFQUFBLFNBQUFELEdBbU5BLE9BM01BQSxFQUFBNk8sTUFLQThMLFFBQUEsU0FrQkFuQixLQUFBLE9BVUFyRCxVQUFBLFlBUUF1RSxjQUFBLGdCQU1BRSxNQUFBLFFBS0FDLFlBQUEsY0FLQUMsV0FBQSxhQVFBQyxTQUFBLEtBS0FDLFNBQUEsV0FLQUMsSUFBQSxNQUtBQyxTQUFBLFdBT0FDLEtBQUEsT0FLQUMsTUFBQSxRQUtBQyxRQUFBLFVBS0FDLEtBQUEsT0FNQUMsb0JBQUEsc0JBTUFDLFFBQUEsVUFLQUMsTUFBQSxRQU9BQyxLQUFBLE9BS0FDLGFBQUEsZUFNQUMsUUFBQSxVQVFBQyxTQUFBLFlBbUJBN2IsRUFBQU4sVUFBQW1VLFVBQUEsU0FBQXJMLEdBQ0EsT0FBQXhJLEVBQUE4RCxTQUFBMEUsR0FDQUEsRUFDVXhJLEVBQUErQixRQUFBeUcsR0FDVnBJLEtBQUF3RixNQUNVNUYsRUFBQWtCLFNBQUFzSCxHQUNWLElBQUF4SSxFQUFBd1osS0FBQWhSLEdBQUFxTCxZQUNVckwsYUFBQXhJLEVBQUFvQyxTQUNWb0csRUFBQXFMLGlCQURVLEdBU1Y3VCxFQUFBTixVQUFBcVUsWUFBQSxTQUFBMEIsR0FDQSxPQUFBelYsRUFBQThELFNBQUEyUixHQUNBQSxFQUNVelYsRUFBQWtCLFNBQUF1VSxJQUFBelYsRUFBQStCLFFBQUEwVCxHQUNWLElBQUF6VixFQUFBbVcsVUFBQVYsR0FBQWhOLFVBQ1VnTixhQUFBelYsRUFBQW9DLFNBQ1ZxVCxFQUFBMUIsbUJBRFUsR0FTVi9ULEVBQUFOLFVBQUFvVSxRQUFBLFNBQUF0TCxHQUNBLE9BQUF4SSxFQUFBOEQsU0FBQTBFLElBQUF4SSxFQUFBa0IsU0FBQXNILEdBQ0EsSUFBQXhJLEVBQUEwYSxjQUFBbFMsR0FBQXNMLFVBQ1U5VCxFQUFBK0IsUUFBQXlHLEdBQ1Z4SSxFQUFBbVYsVUFBQVMsTUFDVXBOLGFBQUF4SSxFQUFBb0MsU0FDVm9HLEVBQUFzTCxlQURVLEdBSVY5VCxJQUVBQyxFQUFBLFNBQUFELEdBNmhCQSxPQWpoQkFBLEVBQUFpQyxNQUFBLFdBQ0EsSUFBQWlCLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxRQUNBLFFBQ0EsV0FDQTFELEVBQUFpQyxPQUNBakMsRUFBQW1RLFVBQUFsUyxLQUFBbUMsTUFNQUEsS0FBQXlSLE9BQUF6UixLQUFBcVEsTUFBQXZOLEVBQUFwQixNQUtBMUIsS0FBQW1ULE1BQUFyUSxFQUFBcVEsTUFLQW5ULEtBQUEwYixRQUFBNVksRUFBQTRZLFFBUUExYixLQUFBMlIsWUFBQSxFQU1BM1IsS0FBQStHLFFBQUEsSUFBQW5ILEVBQUFtSSxTQUFBLEtBQ0FuSSxFQUFBMEMsVUFBQVEsRUFBQW5FLFFBQUFxQixLQUFBeVIsU0FDQXpSLEtBQUFyQixNQUFBbUUsRUFBQW5FLFFBR0FpQixFQUFBOEYsT0FBQTlGLEVBQUFpQyxNQUFBakMsRUFBQW1RLFdBTUFuUSxFQUFBaUMsTUFBQVcsVUFDQTJRLE1BQUF2VCxFQUFBNk8sS0FBQThMLFFBQ0FtQixTQUFBLEVBQ0FoYSxXQUFBL0IsR0FRQXZCLE9BQUFDLGVBQUF1QixFQUFBaUMsTUFBQXZDLFVBQUEsU0FDQWYsSUFBQSxXQUNBLElBQUFpSCxFQUFBeEYsS0FBQXdGLE1BQ0EsT0FBQXhGLEtBQUEyYixTQUFBM2IsS0FBQTRiLGVBQUFwVyxLQUVBOUUsSUFBQSxTQUFBL0IsR0FDQXFCLEtBQUE2YixjQUFBN2IsS0FBQThiLFdBQUFuZCxHQUNBcUIsS0FBQTBSLHNCQUFBMVIsS0FBQXlGLFFBQUFxSCxhQUNBOU0sS0FBQStiLGVBQUFwZCxFQUFBcUIsS0FBQXlGLFFBQUFxSCxnQkFTQTFPLE9BQUFDLGVBQUF1QixFQUFBaUMsTUFBQXZDLFVBQUEsWUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBbVQsUUFBQXZULEVBQUE2TyxLQUFBMkssTUFBQXBaLEtBQUFtVCxRQUFBdlQsRUFBQTZPLEtBQUFzSCxXQUFBL1YsS0FBQW1ULFFBQUF2VCxFQUFBNk8sS0FBQWdNLGFBQUF6YSxLQUFBbVQsUUFBQXZULEVBQUE2TyxLQUFBcU0sVUFBQTlhLEtBQUFtVCxRQUFBdlQsRUFBQTZPLEtBQUFvTSxJQUNBLEVBQ2M3YSxLQUFBbVQsUUFBQXZULEVBQUE2TyxLQUFBaU0sWUFDZCxFQUNjMWEsS0FBQW1ULFFBQUF2VCxFQUFBNk8sS0FBQWtNLFVBQ2QsSUFFQTNhLEtBQUF5UixPQUFBdUssWUFVQTVkLE9BQUFDLGVBQUF1QixFQUFBaUMsTUFBQXZDLFVBQUEsWUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBbVQsUUFBQXZULEVBQUE2TyxLQUFBZ00sYUFBQXphLEtBQUFtVCxRQUFBdlQsRUFBQTZPLEtBQUFpTSxXQUNBLEVBRUExYSxLQUFBeVIsT0FBQXdLLFlBV0FyYyxFQUFBaUMsTUFBQXZDLFVBQUF3YyxXQUFBLFNBQUFyWSxHQUNBLElBQUF6RCxLQUFBMGIsVUFBQTliLEVBQUErQixRQUFBM0IsS0FBQTBiLFVBQUExYixLQUFBMlIsV0FrQkEsT0FBQWxPLEVBakJBLE9BQUF6RCxLQUFBbVQsT0FDQSxLQUFBdlQsRUFBQTZPLEtBQUEySyxLQUNBLE9BQUFwWixLQUFBeVQsVUFBQWhRLEdBQ0EsS0FBQTdELEVBQUE2TyxLQUFBc0gsVUFDQSxPQUFBL1YsS0FBQTJULFlBQUFsUSxHQUNBLEtBQUE3RCxFQUFBNk8sS0FBQWtNLFNBQ0EsT0FBQS9hLEVBQUFtRixTQUFBdEIsR0FDQSxLQUFBN0QsRUFBQTZPLEtBQUFnTSxZQUNBLE9BQUE3VixLQUFBc1gsSUFBQXRYLEtBQUE4SyxJQUFBak0sRUFBQSxNQUNBLEtBQUE3RCxFQUFBNk8sS0FBQWlNLFdBQ0EsT0FBQTlWLEtBQUFzWCxJQUFBdFgsS0FBQThLLElBQUFqTSxHQUFBLE1BQ0EsS0FBQTdELEVBQUE2TyxLQUFBcU0sU0FDQSxPQUFBbFcsS0FBQThLLElBQUFqTSxFQUFBLEdBQ0EsUUFDQSxPQUFBQSxJQVlBN0QsRUFBQWlDLE1BQUF2QyxVQUFBcWMsU0FBQSxTQUFBbFksR0FDQSxJQUFBekQsS0FBQTBiLFVBQUE5YixFQUFBK0IsUUFBQTNCLEtBQUEwYixTQVFBLE9BQUFqWSxFQVBBLE9BQUF6RCxLQUFBbVQsT0FDQSxLQUFBdlQsRUFBQTZPLEtBQUFrTSxTQUNBLE9BQUEvYSxFQUFBc0YsU0FBQXpCLEdBQ0EsUUFDQSxPQUFBQSxJQVdBN0QsRUFBQWlDLE1BQUF2QyxVQUFBNmMsV0FBQSxLQU1BdmMsRUFBQWlDLE1BQUF1YSxnQkFDQUMsT0FBQSwwQkFDQUMsWUFBQSwrQkFDQUMsT0FBQSxrQkFDQUMsU0FBQSxrQkFXQTVjLEVBQUFpQyxNQUFBdkMsVUFBQXljLGVBQUEsU0FBQXBkLEVBQUF5SixHQVNBLE9BUkFBLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0F6SixFQUFBcUIsS0FBQThiLFdBQUFuZCxHQUNBcUIsS0FBQStHLFFBQUFvQixLQUNBOEYsS0FBQXJPLEVBQUFpQyxNQUFBdWEsZUFBQUksU0FDQTdkLFFBQ0F5SixTQUVBcEksS0FBQXlSLE9BQUFzSyxlQUFBcGQsRUFBQXlKLEdBQ0FwSSxNQVFBSixFQUFBaUMsTUFBQXZDLFVBQUFzYyxlQUFBLFNBQUF4VCxHQUNBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBLElBQUFZLEVBQUFoSixLQUFBK0csUUFBQThCLFNBQUFULEdBQ0FxVSxFQUFBemMsS0FBQStHLFFBQUF4SSxJQUFBNkosR0FDQXNVLEVBQUE5YyxFQUFBbUQsV0FBQS9DLEtBQUE2YixjQUFBN2IsS0FBQXlSLE9BQUFrTCxjQUNBaGUsRUFBQStkLEVBRUEsVUFBQUQsRUFDQTlkLEVBQUErZCxPQUNVLEdBQUFELEVBQUF4TyxPQUFBck8sRUFBQWlDLE1BQUF1YSxlQUFBRyxPQUFBLENBQ1YsSUFDQUssRUFEQUMsRUFBQTdjLEtBQUErRyxRQUFBK0IsVUFBQTJULEVBQUFyVSxNQUdBd1UsRUFEQSxPQUFBQyxFQUNBSCxFQUVBRyxFQUFBbGUsTUFFQUEsRUFBQXFCLEtBQUE4YyxxQkFBQUwsRUFBQXJVLEtBQUF3VSxFQUFBSCxFQUFBOWQsTUFBQThkLEVBQUFuUCxTQUFBbEYsUUFFQXpKLEVBRFUsT0FBQXFLLEVBQ1Z5VCxFQUFBOWQsTUFDVXFLLEVBQUFpRixPQUFBck8sRUFBQWlDLE1BQUF1YSxlQUFBQyxPQUNWcmMsS0FBQStjLG1CQUFBTixFQUFBclUsS0FBQXFVLEVBQUE5ZCxNQUFBcUssRUFBQVosS0FBQVksRUFBQXJLLE1BQUF5SixHQUNVWSxFQUFBaUYsT0FBQXJPLEVBQUFpQyxNQUFBdWEsZUFBQUUsWUFDVnRjLEtBQUFnZCx3QkFBQVAsRUFBQXJVLEtBQUFxVSxFQUFBOWQsTUFBQXFLLEVBQUFaLEtBQUFZLEVBQUFySyxNQUFBeUosR0FFQXFVLEVBQUE5ZCxNQUVBLE9BQUFBLEdBVUFpQixFQUFBaUMsTUFBQXZDLFVBQUEyZCxhQUFBLFNBQUE3VSxHQUNBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBLElBQUE4VSxFQUFBbGQsS0FBQTRiLGVBQUF4VCxHQU1BLE9BTEFwSSxLQUFBbWQsb0JBQUEvVSxHQUNBLElBQUE4VSxJQUNBQSxFQUFBbGQsS0FBQW1jLFlBRUFuYyxLQUFBK2IsZUFBQS9iLEtBQUEyYixTQUFBdUIsR0FBQTlVLEdBQ0FwSSxNQVVBSixFQUFBaUMsTUFBQXZDLFVBQUE4ZCx3QkFBQSxTQUFBemUsRUFBQXFMLEdBU0EsT0FSQXJMLEVBQUFxQixLQUFBOGIsV0FBQW5kLEdBQ0FxTCxFQUFBaEssS0FBQXlULFVBQUF6SixHQUNBaEssS0FBQStHLFFBQUFvQixLQUNBOEYsS0FBQXJPLEVBQUFpQyxNQUFBdWEsZUFBQUMsT0FDQTFkLFFBQ0F5SixLQUFBNEIsSUFFQWhLLEtBQUF5UixPQUFBMkwsd0JBQUF6ZSxFQUFBcUwsR0FDQWhLLE1BVUFKLEVBQUFpQyxNQUFBdkMsVUFBQStkLDZCQUFBLFNBQUExZSxFQUFBcUwsR0FXQSxPQVZBckwsRUFBQXFCLEtBQUE4YixXQUFBbmQsR0FDQUEsRUFBQWlHLEtBQUE4SyxJQUFBMVAsS0FBQW1jLFdBQUF4ZCxHQUNBcUwsRUFBQWhLLEtBQUF5VCxVQUFBekosR0FFQWhLLEtBQUErRyxRQUFBb0IsS0FDQThGLEtBQUFyTyxFQUFBaUMsTUFBQXVhLGVBQUFFLFlBQ0FsVSxLQUFBNEIsRUFDQXJMLFVBRUFxQixLQUFBeVIsT0FBQTRMLDZCQUFBMWUsRUFBQXFMLEdBQ0FoSyxNQWdCQUosRUFBQWlDLE1BQUF2QyxVQUFBZ2Usa0JBQUEsU0FBQTNlLEVBQUFpQyxFQUFBbUosR0FJQSxPQUhBQSxFQUFBL0osS0FBQXlULFVBQUExSixHQUNBL0osS0FBQWlkLGFBQUFsVCxHQUNBL0osS0FBQXFkLDZCQUFBMWUsRUFBQW9MLEVBQUEvSixLQUFBeVQsVUFBQTdTLElBQ0FaLE1BZ0JBSixFQUFBaUMsTUFBQXZDLFVBQUFpZSxhQUFBLFNBQUE1ZSxFQUFBaUMsRUFBQW1KLEdBSUEsT0FIQUEsRUFBQS9KLEtBQUF5VCxVQUFBMUosR0FDQS9KLEtBQUFpZCxhQUFBbFQsR0FDQS9KLEtBQUFvZCx3QkFBQXplLEVBQUFvTCxFQUFBL0osS0FBQXlULFVBQUE3UyxJQUNBWixNQWVBSixFQUFBaUMsTUFBQXZDLFVBQUFrZSxhQUFBLFNBQUE3ZSxFQUFBaUMsRUFBQW1KLEdBSUEsT0FIQUEsRUFBQS9KLEtBQUF5VCxVQUFBMUosR0FDQS9KLEtBQUFpZCxhQUFBbFQsR0FDQS9KLEtBQUF5ZCwrQkFBQTllLEVBQUFvTCxFQUFBbkosR0FDQVosTUFnQkFKLEVBQUFpQyxNQUFBdkMsVUFBQW1lLCtCQUFBLFNBQUE5ZSxFQUFBeUosRUFBQXhILEdBQ0EsSUFBQThjLEVBQUE5WSxLQUFBUSxJQUFBcEYsS0FBQXlULFVBQUE3UyxHQUFBLEdBQUFnRSxLQUFBUSxJQUFBLEtBRUEsT0FEQWdELEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0FwSSxLQUFBMmQsZ0JBQUFoZixFQUFBeUosRUFBQXNWLElBVUE5ZCxFQUFBaUMsTUFBQXZDLFVBQUFxZSxnQkFBQSxTQUFBaGYsRUFBQW9MLEVBQUEyVCxHQUdBLEdBRkEvZSxFQUFBcUIsS0FBQThiLFdBQUFuZCxHQUVBK2UsR0FBQSxFQUNBLFVBQUF6ZCxNQUFBLHVDQVVBLE9BUkE4SixFQUFBL0osS0FBQXlULFVBQUExSixHQUNBL0osS0FBQStHLFFBQUFvQixLQUNBOEYsS0FBQXJPLEVBQUFpQyxNQUFBdWEsZUFBQUcsT0FDQTVkLFFBQ0F5SixLQUFBMkIsRUFDQXVELFNBQUFvUSxJQUVBMWQsS0FBQXlSLE9BQUFrTSxnQkFBQWhmLEVBQUFvTCxFQUFBMlQsR0FDQTFkLE1BWUFKLEVBQUFpQyxNQUFBdkMsVUFBQXNlLG9CQUFBLFNBQUEvYSxFQUFBa0gsRUFBQThULEVBQUFDLEdBQ0FBLEVBQUFsZSxFQUFBbUQsV0FBQSthLEVBQUEsR0FDQUQsRUFBQTdkLEtBQUF5VCxVQUFBb0ssR0FDQTlULEVBQUEvSixLQUFBeVQsVUFBQTFKLEdBQ0EvSixLQUFBK2IsZUFBQWxaLEVBQUEsR0FBQWliLEVBQUEvVCxHQUVBLElBREEsSUFBQWdVLEVBQUFGLEdBQUFoYixFQUFBdkIsT0FBQSxHQUNBNUQsRUFBQSxFQUF3QkEsRUFBQW1GLEVBQUF2QixPQUFtQjVELElBQzNDc0MsS0FBQW9kLHdCQUFBdmEsRUFBQW5GLEdBQUFvZ0IsRUFBQS9ULEVBQUFyTSxFQUFBcWdCLEdBRUEsT0FBQS9kLE1BU0FKLEVBQUFpQyxNQUFBdkMsVUFBQW9TLHNCQUFBLFNBQUF0SixHQUlBLE9BSEFBLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0FwSSxLQUFBK0csUUFBQWdDLE9BQUFYLEdBQ0FwSSxLQUFBeVIsT0FBQUMsc0JBQUF0SixHQUNBcEksTUFRQUosRUFBQWlDLE1BQUF2QyxVQUFBNmQsb0JBQUEsU0FBQS9VLEdBQ0EsSUFBQTRWLEVBQUFoZSxLQUFBNGIsZUFBQXhULEdBR0FxVSxFQUFBemMsS0FBQStHLFFBQUF4SSxJQUFBNkosR0FDQVksRUFBQWhKLEtBQUErRyxRQUFBOEIsU0FBQVQsR0ErQ0EsT0E5Q0FxVSxLQUFBclUsU0FFQVksRUFDQWhKLEtBQUErRyxRQUFBZ0MsT0FBQUMsRUFBQVosTUFFQXBJLEtBQUErRyxRQUFBZ0MsT0FBQVgsRUFBQSxNQUVVWSxJQUVWaEosS0FBQStHLFFBQUFnQyxPQUFBQyxFQUFBWixNQUNBcEksS0FBQXlSLE9BQUEwTCxxQkFDQW5kLEtBQUF5UixPQUFBQyxzQkFBQXRKLEdBRUFZLEVBQUFpRixPQUFBck8sRUFBQWlDLE1BQUF1YSxlQUFBQyxPQUNBcmMsS0FBQXlSLE9BQUEwTCxvQkFHQW5kLEtBQUErRyxRQUFBb0IsS0FDQThGLEtBQUFyTyxFQUFBaUMsTUFBQXVhLGVBQUFDLE9BQ0ExZCxNQUFBcWYsRUFDQTVWLFNBTEFwSSxLQUFBb2Qsd0JBQUFZLEVBQUE1VixHQVFjWSxFQUFBaUYsT0FBQXJPLEVBQUFpQyxNQUFBdWEsZUFBQUUsY0FDZHRjLEtBQUF5UixPQUFBMEwsb0JBR0FuZCxLQUFBK0csUUFBQW9CLEtBQ0E4RixLQUFBck8sRUFBQWlDLE1BQUF1YSxlQUFBRSxZQUNBM2QsTUFBQXFmLEVBQ0E1VixTQUxBcEksS0FBQXFkLDZCQUFBVyxFQUFBNVYsS0FXQXBJLEtBQUErRyxRQUFBb0IsS0FDQThGLEtBQUFyTyxFQUFBaUMsTUFBQXVhLGVBQUFJLFNBQ0E3ZCxNQUFBcWYsRUFDQTVWLFNBRUFwSSxLQUFBeVIsT0FBQTBMLG9CQUNBbmQsS0FBQXlSLE9BQUEwTCxvQkFBQS9VLEdBRUFwSSxLQUFBeVIsT0FBQXNLLGVBQUFpQyxFQUFBNVYsR0FFQXBJLE1Bb0JBSixFQUFBaUMsTUFBQXZDLFVBQUF3QyxPQUFBLFNBQUFuRCxFQUFBaUMsRUFBQW1KLEdBT0EsT0FOQW5KLEVBQUFoQixFQUFBbUQsV0FBQW5DLEVBQUEsSUFDQVosS0FBQW1ULFFBQUF2VCxFQUFBNk8sS0FBQXNILFdBQUEvVixLQUFBbVQsUUFBQXZULEVBQUE2TyxLQUFBb00sS0FBQTdhLEtBQUFtVCxRQUFBdlQsRUFBQTZPLEtBQUFrTSxTQUNBM2EsS0FBQXNkLGtCQUFBM2UsRUFBQWlDLEVBQUFtSixHQUVBL0osS0FBQXVkLGFBQUE1ZSxFQUFBaUMsRUFBQW1KLEdBRUEvSixNQU9BSixFQUFBaUMsTUFBQXZDLFVBQUF3ZCxxQkFBQSxTQUFBbUIsRUFBQUMsRUFBQUMsRUFBQVQsRUFBQTllLEdBQ0EsT0FBQXVmLEdBQUFELEVBQUFDLEdBQUF2WixLQUFBd1osTUFBQXhmLEVBQUFxZixHQUFBUCxJQUdBOWQsRUFBQWlDLE1BQUF2QyxVQUFBeWQsbUJBQUEsU0FBQWtCLEVBQUFDLEVBQUFHLEVBQUFGLEVBQUF2ZixHQUNBLE9BQUFzZixHQUFBdGYsRUFBQXFmLElBQUFJLEVBQUFKLElBQUFFLEVBQUFELElBR0F0ZSxFQUFBaUMsTUFBQXZDLFVBQUEwZCx3QkFBQSxTQUFBaUIsRUFBQUMsRUFBQUcsRUFBQUYsRUFBQXZmLEdBQ0EsT0FBQXNmLEVBQUF0WixLQUFBSyxJQUFBa1osRUFBQUQsR0FBQXRmLEVBQUFxZixJQUFBSSxFQUFBSixLQU1BcmUsRUFBQWlDLE1BQUF2QyxVQUFBbUIsUUFBQSxXQUlBLE9BSEFiLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQXlSLE9BQUEsS0FDQXpSLEtBQUErRyxRQUFBLEtBQ0EvRyxNQUVBSixFQUFBaUMsUUFFQWhDLEVBQUEsU0FBQUQsR0FnRUEsT0F4REFBLEVBQUEwZSxlQUFBLFNBQUFDLEVBQUFWLEVBQUEzWCxHQU1BLElBQUFxRixFQUFBLElBQUFuQixvQkFBQW1VLEVBQUFWLEVBQUEzWCxLQUVBdEcsRUFBQWtHLFFBQUFqSSxLQUFBbUMsTUFDQXlGLFFBQUE4RixFQUNBa0IsWUFBQSxVQUNBSixVQUFBLEVBQ0FLLGVBQUEsSUFBQXhHLElBT0FsRyxLQUFBd2UsVUFBQVgsRUFNQTdkLEtBQUF5ZSxhQUFBLEdBRUE3ZSxFQUFBOEYsT0FBQTlGLEVBQUEwZSxlQUFBMWUsRUFBQWtHLFNBS0FsRyxFQUFBMGUsZUFBQWhmLFVBQUFrRyxJQUFBLFdBQ0EsT0FBQXhGLEtBQUF5ZSxjQU1BN2UsRUFBQTBlLGVBQUFoZixVQUFBb2YsT0FBQSxXQUNBLEtBQUExZSxLQUFBd2UsVUFBQXhlLEtBQUF5ZSxjQUFBLEdBRUF6ZSxLQUFBK0YsS0FBQSxRQUVBL0YsS0FBQXllLGNBQUF6ZSxLQUFBMmUsVUFFQSxPQUFBM2UsS0FBQWdNLFNBQUExQixrQkFNQTFLLEVBQUEwZSxlQUFBaGYsVUFBQXlMLE1BQUEsV0FFQSxPQURBL0ssS0FBQWdNLFNBQUEsS0FDQXpCLFFBQUEvRCxXQUVBNUcsRUFBQTBlLGlCQUVBemUsRUFBQSxTQUFBRCxHQUNBLEdBQUFBLEVBQUF1SyxVQUFBLENBQ0EsSUFBQXlILEVBQUFDLFVBQUFDLFVBQUFDLGNBQ0FILEVBQUFJLFNBQUEsWUFBQUosRUFBQUksU0FBQSxXQUFBSixFQUFBSSxTQUFBLFlBT0FwUyxFQUFBMGUsZUFBQWhmLFVBQUFpTyxtQkFBQSxXQUNBLElBQUFxUixFQUFBNWUsS0FBQWdNLFNBQUF1QixxQkFDQXNSLEVBQUFELEVBQUFqUixNQU1BLE9BTEFpUixFQUFBalIsTUFBQSxTQUFBdkYsR0FDQXBJLEtBQUE0TixXQUFBLFdBQ0FpUixFQUFBaGhCLEtBQUErZ0IsRUFBQXhXLElBQ3NCbEosS0FBQWMsTUFBQSxJQUNKZCxLQUFBYyxNQUNsQjRlLE9BS0EvZSxFQUFBLFNBQUFELEdBeURBLE9BL0NBQSxFQUFBbWIsS0FBQSxXQUNBLElBQUFqWSxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsT0FDQSxTQUNBMUQsRUFBQW1iLE1BQ0FuYixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQU1BQSxLQUFBcVEsTUFBQXJRLEtBQUE0USxPQUFBNVEsS0FBQThlLFVBQUE5ZSxLQUFBeUYsUUFBQXlGLGFBTUFsTCxLQUFBbUYsS0FBQSxJQUFBdkYsRUFBQWlDLE9BQ0FILE1BQUExQixLQUFBOGUsVUFBQTNaLEtBQ0FnTyxNQUFBclEsRUFBQXFRLE1BQ0F4VSxNQUFBbUUsRUFBQXFDLEtBQ0F1VyxRQUFBNVksRUFBQTRZLFVBRUExYixLQUFBa0UsVUFBQSxTQUVBdEUsRUFBQThGLE9BQUE5RixFQUFBbWIsS0FBQW5iLEVBQUFtUSxXQU1BblEsRUFBQW1iLEtBQUF2WSxVQUNBMkMsS0FBQSxFQUNBdVcsU0FBQSxHQU1BOWIsRUFBQW1iLEtBQUF6YixVQUFBbUIsUUFBQSxXQUNBYixFQUFBbVEsVUFBQXpRLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUE4ZSxVQUFBMVEsYUFDQXBPLEtBQUE4ZSxVQUFBLEtBQ0E5ZSxLQUFBb0UsVUFBQSxRQUNBcEUsS0FBQW1GLEtBQUExRSxVQUNBVCxLQUFBbUYsS0FBQSxNQUVBdkYsRUFBQW1iLE9BRUFsYixFQUFBLFNBQUFELEdBQ0EsR0FBQUEsRUFBQXVLLFlBQUFVLGFBQUF2TCxVQUFBeWYscUJBQUEsQ0FDQSxJQUFBQyxFQUFBLFNBQUF2WixHQUNBekYsS0FBQXlGLFVBR0EsSUFGQSxJQUFBaUcsRUFBQWpHLEVBQUEwSCxhQUFBLE1BQUExSCxFQUFBUyxZQUNBa0gsRUFBQTFCLEVBQUEyQixlQUFBLEdBQ0EzUCxFQUFBLEVBQTRCQSxFQUFBMFAsRUFBQTlMLE9BQWdCNUQsSUFDNUMwUCxFQUFBMVAsR0FBQSxFQUVBc0MsS0FBQWlmLGNBQUF4WixFQUFBOEgscUJBQ0F2TixLQUFBaWYsY0FBQXpSLGFBQUEsRUFDQXhOLEtBQUFpZixjQUFBeFIsaUJBQUEsV0FDQXpOLEtBQUFpZixjQUFBdlQsU0FDQTFMLEtBQUFpZixjQUFBdlIsTUFBQSxFQUNBLElBQUF3UixFQUFBbGYsS0FBQW1mLFFBQUExWixFQUFBeUYsYUFDQWxMLEtBQUFvZixPQUFBRixFQUFBL1osS0FDQW5GLEtBQUFpZixjQUFBemIsUUFBQTBiLElBRUFGLEVBQUExZixVQUFBcU8sTUFBQSxTQUFBdkYsR0FFQSxPQURBcEksS0FBQWlmLGNBQUF0UixNQUFBdkYsR0FDQXBJLE1BRUFnZixFQUFBMWYsVUFBQStmLEtBQUEsU0FBQWpYLEdBRUEsT0FEQXBJLEtBQUFpZixjQUFBSSxLQUFBalgsR0FDQXBJLE1BRUFnZixFQUFBMWYsVUFBQWtFLFFBQUEsV0FFQSxPQURBeEQsS0FBQW1mLFFBQUEzYixRQUFBOEQsTUFBQXRILEtBQUFtZixRQUFBN2IsV0FDQXRELE1BRUFnZixFQUFBMWYsVUFBQThPLFdBQUEsV0FFQSxPQURBcE8sS0FBQW1mLFFBQUEvUSxXQUFBOUcsTUFBQXRILEtBQUFtZixRQUFBN2IsV0FDQXRELE1BRUE2SyxhQUFBdkwsVUFBQXlmLHFCQUFBLFdBQ0EsV0FBQUMsRUFBQWhmLE9BRUFKLEVBQUFrRyxRQUFBeEcsVUFBQXlmLHFCQUFBLFdBQ0EsV0FBQUMsRUFBQWhmLFVBSUFILEVBQUEsU0FBQUQsR0E2TkEsT0ExTUFBLEVBQUFnQyxPQUFBLFdBQ0EsSUFBQWtCLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxRQUNBLFNBQ0ExRCxFQUFBZ0MsUUFDQWhDLEVBQUFpQyxNQUFBaEUsS0FBQW1DLEtBQUE4QyxHQU9BOUMsS0FBQXNmLFlBTUF0ZixLQUFBdWYsZ0JBQUEsRUFNQXZmLEtBQUF3ZixnQkFBQXhmLEtBQUF5RixRQUFBc1osdUJBQ0EvZSxLQUFBeVIsT0FBQXpSLEtBQUF3ZixnQkFBQUosT0FDQXBmLEtBQUFyQixNQUFBbUUsRUFBQW5FLE1BTUFxQixLQUFBNFEsT0FBQTVRLEtBQUF3ZixnQkFNQXhmLEtBQUFxUSxNQUFBclEsS0FBQXlSLE9BQUF6UixLQUFBNFEsT0FBQXdPLFFBRUF4ZixFQUFBOEYsT0FBQTlGLEVBQUFnQyxPQUFBaEMsRUFBQWlDLE9BT0FqQyxFQUFBZ0MsT0FBQVksVUFDQTdELE1BQUEsRUFDQXdVLE1BQUF2VCxFQUFBNk8sS0FBQThMLFFBQ0FtQixTQUFBLEdBY0E5YixFQUFBZ0MsT0FBQXRDLFVBQUFrRSxRQUFBLFNBQUE4TixHQWNBLE9BWEF0UixLQUFBeWYsU0FBQW5PLEtBQUF0UixLQUFBdWYsZ0JBQ0F2ZixLQUFBc2YsU0FBQTFjLEtBQUEwTyxHQUNBQSxFQUFBSyxZQUFBLEVBQ0EzUixLQUFBMGYsa0JBQUFwTyxLQUVBMVIsRUFBQXlSLFdBQUEvUixVQUFBa0UsUUFBQThELE1BQUF0SCxLQUFBc0QsV0FDQXRELEtBQUF1ZixpQkFDQXZmLEtBQUF1ZixnQkFBQSxFQUNBdmYsS0FBQXdmLGdCQUFBN1IsTUFBQSxLQUdBM04sTUFRQUosRUFBQWdDLE9BQUF0QyxVQUFBbWdCLFNBQUEsU0FBQW5PLEdBQ0EsT0FBQTFSLEVBQUFpQyxPQUFBakMsRUFBQWlDLFFBQUF5UCxFQUFBL1EsYUFBQStRLGFBQUF2UCxZQU1BbkMsRUFBQWdDLE9BQUF0QyxVQUFBcWdCLGdCQUFBLFdBQ0EzZixLQUFBdWYsaUJBQ0F2ZixLQUFBdWYsZ0JBQUEsRUFDQXZmLEtBQUF3ZixnQkFBQTdSLE1BQUEsSUFFQTNOLEtBQUFzZixTQUFBM1YsUUFBQSxTQUFBaVcsR0FDQWhnQixFQUFBeVIsV0FBQS9SLFVBQUFrRSxRQUFBM0YsS0FBQW1DLEtBQUE0ZixHQUNBQSxFQUFBTixVQUNBTSxFQUFBRCxtQkFFVXpnQixLQUFBYyxRQU9WSixFQUFBZ0MsT0FBQXRDLFVBQUF3UixXQUFBLFNBQUErTyxHQUNBN2YsS0FBQXlmLFNBQUFJLElBRUE3ZixLQUFBMmYsbUJBUUEvZixFQUFBZ0MsT0FBQXRDLFVBQUFvZ0Isa0JBQUEsU0FBQWhlLEdBQ0EsSUFBQThELEVBQUF4RixLQUFBeUYsUUFBQXFILFlBQ0FwTCxFQUFBZ1Esc0JBQUFsTSxHQUNBLElBQUEwWCxFQUFBbGQsS0FBQTRiLGVBQUFwVyxHQUNBOUQsRUFBQXFhLGVBQUFtQixFQUFBMVgsR0FDQXhGLEtBQUErRyxRQUFBa0QsWUFBQXpFLEVBQUEsU0FBQXdCLEdBQ0F0RixFQUFBc0YsRUFBQWlILE1BQUFqSCxFQUFBckksTUFBQXFJLEVBQUFvQixLQUFBcEIsRUFBQXNHLGFBUUExTixFQUFBZ0MsT0FBQXRDLFVBQUE4TyxXQUFBLFNBQUFrRCxHQUNBLEdBQUF0UixLQUFBc2YsU0FBQXROLFNBQUFWLEdBQUEsQ0FDQSxJQUFBaEosRUFBQXRJLEtBQUFzZixTQUFBbmUsUUFBQW1RLEdBQ0F0UixLQUFBc2YsU0FBQS9kLE9BQUErRyxFQUFBLFFBQ1VnSixJQUVWdFIsS0FBQXNmLGFBRUEsT0FBQTFmLEVBQUF5UixXQUFBL1IsVUFBQThPLFdBQUE5RyxNQUFBdEgsS0FBQXNELFlBT0ExRCxFQUFBZ0MsT0FBQXRDLFVBQUFzYyxlQUFBLFNBQUF4VCxHQUNBLE9BQUFwSSxLQUFBeVIsT0FBQW1LLGVBQ0E1YixLQUFBeVIsT0FBQW1LLGVBQUF4VCxHQUVBeEksRUFBQWlDLE1BQUF2QyxVQUFBc2MsZUFBQS9kLEtBQUFtQyxLQUFBb0ksS0FLQSxpQkFDQSwwQkFDQSwrQkFDQSxtQkFDQXVCLFFBQUEsU0FBQW9LLEdBQ0EsSUFBQStMLEVBQUFsZ0IsRUFBQWdDLE9BQUF0QyxVQUFBeVUsR0FDQW5VLEVBQUFnQyxPQUFBdEMsVUFBQXlVLEdBQUEsV0FDQSxJQUFBdE0sRUFBQW5FLFVBQ0F3YyxFQUFBeFksTUFBQXRILEtBQUFzRCxXQUNBbUUsRUFBQSxHQUFBekgsS0FBQThiLFdBQUFyVSxFQUFBLElBQ0FBLEVBQUEsR0FBQXpILEtBQUF5VCxVQUFBaE0sRUFBQSxJQUVBekgsS0FBQXNmLFNBQUEzVixRQUFBLFNBQUFvVyxHQUNBQSxFQUFBaE0sR0FBQXpNLE1BQUF5WSxFQUFBdFksU0FLQSx3QkFDQSx1QkFDQWtDLFFBQUEsU0FBQW9LLEdBQ0EsSUFBQStMLEVBQUFsZ0IsRUFBQWdDLE9BQUF0QyxVQUFBeVUsR0FDQW5VLEVBQUFnQyxPQUFBdEMsVUFBQXlVLEdBQUEsV0FDQSxJQUFBdE0sRUFBQW5FLFVBQ0F3YyxFQUFBeFksTUFBQXRILEtBQUFzRCxXQUNBbUUsRUFBQSxHQUFBekgsS0FBQXlULFVBQUFoTSxFQUFBLElBRUF6SCxLQUFBc2YsU0FBQTNWLFFBQUEsU0FBQW9XLEdBQ0FBLEVBQUFoTSxHQUFBek0sTUFBQXlZLEVBQUF0WSxRQVFBN0gsRUFBQWdDLE9BQUF0QyxVQUFBbUIsUUFBQSxXQUtBLE9BSkFiLEVBQUFpQyxNQUFBdkMsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQXdmLGdCQUFBcFIsYUFDQXBPLEtBQUF3ZixnQkFBQSxLQUNBeGYsS0FBQXNmLFNBQUEsS0FDQXRmLE1BRUFKLEVBQUFnQyxTQUVBL0IsRUFBQSxTQUFBRCxHQWlFQSxPQW5EQUEsRUFBQW9nQixJQUFBLFNBQUE1QixHQUNBeGUsRUFBQXlSLFdBQUF4VCxLQUFBbUMsTUFNQUEsS0FBQWlnQixLQUFBcmdCLEVBQUFtRCxXQUFBcWIsRUFBQSxHQUtBcGUsS0FBQWtnQixXQUFBbGdCLEtBQUFxUSxNQUFBclEsS0FBQTRRLE9BQUEsSUFBQWhSLEVBQUE2UyxXQUFBelMsS0FBQW1nQixTQUFBbmdCLEtBQUFpZ0IsTUFBQSxPQUVBcmdCLEVBQUE4RixPQUFBOUYsRUFBQW9nQixJQUFBcGdCLEVBQUF5UixZQU9BalQsT0FBQUMsZUFBQXVCLEVBQUFvZ0IsSUFBQTFnQixVQUFBLFNBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQWlnQixNQUVBdmYsSUFBQSxTQUFBMGQsR0FDQXBlLEtBQUFpZ0IsS0FBQTdCLEVBQ0FwZSxLQUFBa2dCLFdBQUFwTixPQUFBOVMsS0FBQW1nQixTQUFBbmdCLEtBQUFpZ0IsVUFTQXJnQixFQUFBb2dCLElBQUExZ0IsVUFBQTZnQixTQUFBLFNBQUEvQixHQUNBLGdCQUFBM2EsR0FDQSxPQUFBbUIsS0FBQUssSUFBQUwsS0FBQXNWLElBQUF6VyxHQUFBMmEsS0FPQXhlLEVBQUFvZ0IsSUFBQTFnQixVQUFBbUIsUUFBQSxXQUlBLE9BSEFiLEVBQUF5UixXQUFBL1IsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQWtnQixXQUFBemYsVUFDQVQsS0FBQWtnQixXQUFBLEtBQ0FsZ0IsTUFFQUosRUFBQW9nQixNQUVBbmdCLEVBQUEsU0FBQUQsR0F1YUEsT0EzWUFBLEVBQUF3Z0IsU0FBQSxXQUVBLElBQUF0ZCxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsU0FDQSxRQUNBLFVBQ0EsV0FDQTFELEVBQUF3Z0IsVUFDQXhnQixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQU1BQSxLQUFBcWdCLE9BQUF2ZCxFQUFBdWQsT0FNQXJnQixLQUFBc2dCLE1BQUF4ZCxFQUFBd2QsTUFPQXRnQixLQUFBdWdCLFFBQUF6ZCxFQUFBeWQsUUFPQXZnQixLQUFBd2dCLFFBQUExZCxFQUFBMGQsUUFNQXhnQixLQUFBeWdCLGFBQUEsU0FNQXpnQixLQUFBMGdCLGNBQUEsY0FNQTFnQixLQUFBMmdCLEtBQUEzZ0IsS0FBQTRRLE9BQUEsSUFBQWhSLEVBQUFnQyxPQUFBLEdBRUE1QixLQUFBNGdCLFlBQUE5ZCxFQUFBOGQsWUFDQTVnQixLQUFBNmdCLGFBQUEvZCxFQUFBK2QsY0FFQWpoQixFQUFBOEYsT0FBQTlGLEVBQUF3Z0IsU0FBQXhnQixFQUFBbVEsV0FNQW5RLEVBQUF3Z0IsU0FBQTVkLFVBQ0E2ZCxPQUFBLElBQ0FDLE1BQUEsR0FDQUMsUUFBQSxHQUNBQyxRQUFBLEVBQ0FJLFlBQUEsU0FDQUMsYUFBQSxlQVVBemlCLE9BQUFDLGVBQUF1QixFQUFBd2dCLFNBQUE5Z0IsVUFBQSxTQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUE0YixlQUFBNWIsS0FBQXdGLFVBMkJBcEgsT0FBQUMsZUFBQXVCLEVBQUF3Z0IsU0FBQTlnQixVQUFBLGVBQ0FmLElBQUEsV0FDQSxHQUFBcUIsRUFBQWtCLFNBQUFkLEtBQUF5Z0IsY0FDQSxPQUFBemdCLEtBQUF5Z0IsYUFDYyxHQUFBN2dCLEVBQUFpRSxRQUFBN0QsS0FBQXlnQixjQUFBLENBRWQsUUFBQXhTLEtBQUFyTyxFQUFBd2dCLFNBQUEzUixLQUNBLEdBQUE3TyxFQUFBd2dCLFNBQUEzUixLQUFBUixHQUFBNlMsS0FBQTlnQixLQUFBeWdCLGFBQ0EsT0FBQXhTLEVBSUEsT0FBQWpPLEtBQUF5Z0IsZUFHQS9mLElBQUEsU0FBQTJSLEdBRUEsR0FBQXpTLEVBQUF3Z0IsU0FBQTNSLEtBQUFsUCxlQUFBOFMsR0FBQSxDQUNBLElBQUEwTyxFQUFBbmhCLEVBQUF3Z0IsU0FBQTNSLEtBQUE0RCxHQUNBelMsRUFBQWlCLFNBQUFrZ0IsR0FDQS9nQixLQUFBeWdCLGFBQUFNLEVBQUFELEdBRUE5Z0IsS0FBQXlnQixhQUFBTSxNQUVjLEtBQUFuaEIsRUFBQWlFLFFBQUF3TyxHQUdkLFVBQUFwUyxNQUFBLGlDQUFBb1MsR0FGQXJTLEtBQUF5Z0IsYUFBQXBPLE1BY0FqVSxPQUFBQyxlQUFBdUIsRUFBQXdnQixTQUFBOWdCLFVBQUEsZ0JBQ0FmLElBQUEsV0FDQSxHQUFBcUIsRUFBQWtCLFNBQUFkLEtBQUEwZ0IsZUFDQSxPQUFBMWdCLEtBQUEwZ0IsY0FDYyxHQUFBOWdCLEVBQUFpRSxRQUFBN0QsS0FBQTBnQixlQUFBLENBRWQsUUFBQXpTLEtBQUFyTyxFQUFBd2dCLFNBQUEzUixLQUNBLEdBQUE3TyxFQUFBd2dCLFNBQUEzUixLQUFBUixHQUFBK1MsTUFBQWhoQixLQUFBMGdCLGNBQ0EsT0FBQXpTLEVBSUEsT0FBQWpPLEtBQUEwZ0IsZ0JBR0FoZ0IsSUFBQSxTQUFBMlIsR0FFQSxHQUFBelMsRUFBQXdnQixTQUFBM1IsS0FBQWxQLGVBQUE4UyxHQUFBLENBQ0EsSUFBQTBPLEVBQUFuaEIsRUFBQXdnQixTQUFBM1IsS0FBQTRELEdBQ0F6UyxFQUFBaUIsU0FBQWtnQixHQUNBL2dCLEtBQUEwZ0IsY0FBQUssRUFBQUMsSUFFQWhoQixLQUFBMGdCLGNBQUFLLE1BRWMsS0FBQW5oQixFQUFBaUUsUUFBQXdPLEdBR2QsVUFBQXBTLE1BQUEsaUNBQUFvUyxHQUZBclMsS0FBQTBnQixjQUFBck8sTUFnQkF6UyxFQUFBd2dCLFNBQUE5Z0IsVUFBQTJoQixjQUFBLFNBQUE3WSxFQUFBOFksR0FDQTlZLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0EsSUFBQStZLEVBQUFuaEIsS0FBQXlULFVBQUF6VCxLQUFBcWdCLFFBQ0FBLEVBQUFjLEVBQ0FiLEVBQUF0Z0IsS0FBQXlULFVBQUF6VCxLQUFBc2dCLE9BQ0FZLEVBQUF0aEIsRUFBQW1ELFdBQUFtZSxFQUFBLEdBRUEsSUFBQUUsRUFBQXBoQixLQUFBNGIsZUFBQXhULEdBU0EsR0FSQWdaLEVBQUEsSUFLQWYsR0FGQSxFQUFBZSxJQURBLEVBQUFmLElBTUEsV0FBQXJnQixLQUFBeWdCLGFBQ0F6Z0IsS0FBQTJnQixLQUFBcEQsYUFBQTJELEVBQUFiLEVBQUFqWSxRQUNVLG1CQUFBcEksS0FBQXlnQixhQUNWemdCLEtBQUEyZ0IsS0FBQW5ELGFBQUEwRCxFQUFBYixFQUFBalksUUFDVSxHQUFBaVksRUFBQSxHQUNWcmdCLEtBQUEyZ0IsS0FBQXhELG9CQUFBL1UsR0FDQSxJQUFBaUssRUFBQXJTLEtBQUF5Z0IsYUFFQSxHQUFBSixFQUFBYyxFQUFBLENBQ0EsSUFBQUUsRUFBQSxFQUFBaEIsRUFBQWMsRUFDQUcsRUFBQTFjLEtBQUEwRSxNQUFBK1gsRUFBQXJoQixLQUFBeWdCLGFBQUFuZixTQUNBK1EsRUFBQXJTLEtBQUF5Z0IsYUFBQS9ZLE1BQUE0WixJQUVBLEdBQUFGLEVBRUFwaEIsS0FBQTJnQixLQUFBL0Msb0JBQUF2TCxFQUFBakssRUFBQWlZLEVBQUFhLEdBTUEsT0FIQVosR0FDQXRnQixLQUFBMmdCLEtBQUFuRCxhQUFBMEQsRUFBQWxoQixLQUFBdWdCLFFBQUFELEVBQUFELEVBQUFqWSxHQUVBcEksTUFVQUosRUFBQXdnQixTQUFBOWdCLFVBQUFpaUIsZUFBQSxTQUFBblosR0FDQUEsRUFBQXBJLEtBQUF5VCxVQUFBckwsR0FDQSxJQUFBZ1osRUFBQXBoQixLQUFBNGIsZUFBQXhULEdBQ0EsR0FBQWdaLEVBQUEsR0FDQSxJQUFBWixFQUFBeGdCLEtBQUF5VCxVQUFBelQsS0FBQXdnQixTQUNBLGNBQUF4Z0IsS0FBQTBnQixjQUNBMWdCLEtBQUEyZ0IsS0FBQXBELGFBQUEsRUFBQWlELEVBQUFwWSxRQUNjLG1CQUFBcEksS0FBQTBnQixjQUNkMWdCLEtBQUEyZ0IsS0FBQW5ELGFBQUEsRUFBQWdELEVBQUFwWSxPQUNjLENBQ2QsSUFBQWlLLEVBQUFyUyxLQUFBMGdCLGNBQ0E5Z0IsRUFBQWlFLFFBQUF3TyxLQUNBclMsS0FBQTJnQixLQUFBeEQsb0JBQUEvVSxHQUNBcEksS0FBQTJnQixLQUFBL0Msb0JBQUF2TCxFQUFBakssRUFBQW9ZLEVBQUFZLEtBSUEsT0FBQXBoQixNQVFBSixFQUFBd2dCLFNBQUE5Z0IsVUFBQXNjLGVBQUEsU0FBQXhULEdBQ0EsT0FBQXBJLEtBQUEyZ0IsS0FBQS9FLGVBQUF4VCxJQWFBeEksRUFBQXdnQixTQUFBOWdCLFVBQUFraUIscUJBQUEsU0FBQTNELEVBQUF6VixFQUFBOFksR0FJQSxPQUhBOVksRUFBQXBJLEtBQUF5VCxVQUFBckwsR0FDQXBJLEtBQUFpaEIsY0FBQTdZLEVBQUE4WSxHQUNBbGhCLEtBQUF1aEIsZUFBQW5aLEVBQUFwSSxLQUFBeVQsVUFBQW9LLElBQ0E3ZCxNQU9BSixFQUFBd2dCLFNBQUE5Z0IsVUFBQXlKLE9BQUEsU0FBQUMsR0FFQSxPQURBaEosS0FBQTJnQixLQUFBalAsc0JBQUExSSxHQUNBaEosTUFPQUosRUFBQXdnQixTQUFBOWdCLFVBQUFrRSxRQUFBNUQsRUFBQXlSLFdBQUEvUixVQUFBa0UsUUFJQSxXQUNBLElBQ0E5RixFQUFBK2pCLEVBRUFDLEtBQ0EsSUFBQWhrQixFQUFBLEVBQW9CQSxFQUpwQixJQUlrQ0EsSUFDbENna0IsRUFBQWhrQixHQUFBa0gsS0FBQUUsSUFBQXBILEVBQUEsS0FBQWtILEtBQUFDLEdBQUEsSUFHQSxJQUFBOGMsS0FFQSxJQUFBamtCLEVBQUEsRUFBb0JBLEVBQUFra0IsSUFBa0Jsa0IsSUFBQSxDQUN0QytqQixFQUFBL2pCLEVBQUEsSUFDQSxJQUFBbWtCLEVBQUFqZCxLQUFBRSxJQUFBMmMsR0FBQSxFQUFBN2MsS0FBQUMsSUFIQSxJQUdBRCxLQUFBQyxHQUFBLEtBQ0E4YyxFQUFBamtCLEdBQUFta0IsRUFBQSxPQUFBSixFQUVBRSxFQUFBQyxLQUFBLEVBRUEsSUFBQUUsS0FFQSxJQUFBcGtCLEVBQUEsRUFBb0JBLEVBbkJwQixJQW1Ca0NBLElBQ2xDb2tCLEVBQUFwa0IsR0FBQWtILEtBQUFtZCxLQUFBcmtCLEVBQUEsSUFGQSxLQUtBLElBQUFza0IsS0FDQSxJQUFBdGtCLEVBQUEsRUFBb0JBLEVBeEJwQixJQXdCa0NBLElBQ2xDK2pCLEVBQUEvakIsRUFBQSxJQUNBc2tCLEVBQUF0a0IsR0FBQSxNQUFBa0gsS0FBQXFkLElBQUFyZCxLQUFBQyxHQUFBNGMsSUFHQSxJQUFBUyxLQUNBLElBQUF4a0IsRUFBQSxFQUFvQkEsRUE5QnBCLElBOEJrQ0EsSUFBQSxDQUNsQytqQixFQUFBL2pCLEVBQUEsSUFDQSxJQUFBMlgsRUFBQSxFQUFBelEsS0FBQUssSUFBQXdjLEVBQUEsTUFDQWhlLEVBQUFtQixLQUFBcWQsSUFBQTVNLEVBQUF6USxLQUFBQyxHQUFBLEVBQUE0YyxHQUNBUyxFQUFBeGtCLEdBQUFrSCxLQUFBc1YsSUFBQXpXLEdBQUEsRUFBQWdlLElBTUEsU0FBQVUsRUFBQTlQLEdBRUEsSUFEQSxJQUFBK1AsRUFBQSxJQUFBdGUsTUFBQXVPLEVBQUEvUSxRQUNBYyxFQUFBLEVBQTRCQSxFQUFBaVEsRUFBQS9RLE9BQWtCYyxJQUM5Q2dnQixFQUFBaGdCLEdBQUEsRUFBQWlRLEVBQUFqUSxHQUVBLE9BQUFnZ0IsRUFjQXhpQixFQUFBd2dCLFNBQUEzUixNQUNBNFQsT0FBQSxTQUNBQyxZQUFBLGNBQ0FDLFFBQ0F6QixHQUFBcUIsRUFBQUQsR0FDQWxCLElBQUFrQixHQUVBTSxRQUNBMUIsR0FBQVksRUFDQVYsSUFqQkEsU0FBQTNPLEdBQ0EsT0FBQUEsRUFBQTNLLE1BQUEsR0FBQSthLFVBZ0JBQyxDQUFBaEIsSUFFQWlCLE1BQ0E3QixHQUFBZ0IsRUFDQWQsSUFBQW1CLEVBQUFMLElBRUFjLFFBQ0E5QixHQUFBYSxFQUNBWCxJQUFBbUIsRUFBQVIsSUFFQWtCLE1BQ0EvQixHQUFBa0IsRUFDQWhCLElBQUFtQixFQUFBSCxLQWpGQSxHQXlGQXBpQixFQUFBd2dCLFNBQUE5Z0IsVUFBQW1CLFFBQUEsV0FNQSxPQUxBYixFQUFBbVEsVUFBQXpRLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUEyZ0IsS0FBQWxnQixVQUNBVCxLQUFBMmdCLEtBQUEsS0FDQTNnQixLQUFBeWdCLGFBQUEsS0FDQXpnQixLQUFBMGdCLGNBQUEsS0FDQTFnQixNQUVBSixFQUFBd2dCLFdBRUF2Z0IsRUFBQSxTQUFBRCxHQWdEQSxPQW5CQUEsRUFBQWtqQixrQkFBQSxXQUNBbGpCLEVBQUF3Z0IsU0FBQTlZLE1BQUF0SCxLQUFBc0QsV0FNQXRELEtBQUFxUSxNQUFBclEsS0FBQTRRLE9BQUEsSUFBQWhSLEVBQUFtYixLQUNBL2EsS0FBQTJnQixLQUFBbmQsUUFBQXhELEtBQUE0USxPQUFBekwsT0FFQXZGLEVBQUE4RixPQUFBOUYsRUFBQWtqQixrQkFBQWxqQixFQUFBd2dCLFVBS0F4Z0IsRUFBQWtqQixrQkFBQXhqQixVQUFBbUIsUUFBQSxXQUVBLE9BREFiLEVBQUF3Z0IsU0FBQTlnQixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxNQUVBSixFQUFBa2pCLG9CQUVBampCLEVBQUEsU0FBQUQsR0FLQUEsRUFBQXVLLFlBQ0E0WSxhQUFBempCLFVBQUEwakIseUJBRUFELGFBQUF6akIsVUFBQTBqQix1QkFBQSxTQUFBMVEsR0FDQSxJQUFBMlEsRUFBQSxJQUFBQyxXQUFBNVEsRUFBQWhSLFFBQ0F0QixLQUFBbWpCLHNCQUFBRixHQUNBLFFBQUF2bEIsRUFBQSxFQUFnQ0EsRUFBQXVsQixFQUFBM2hCLE9BQWtCNUQsSUFDbEQ0VSxFQUFBNVUsSUFBQXVsQixFQUFBdmxCLEdBQUEsY0FNQW1DLEVBQUEsU0FBQUQsR0ErSEEsT0FwSEFBLEVBQUF3akIsU0FBQSxXQUNBLElBQUF0Z0IsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLE9BQ0EsUUFDQTFELEVBQUF3akIsVUFDQXhqQixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQU1BQSxLQUFBcWpCLFVBQUFyakIsS0FBQXFRLE1BQUFyUSxLQUFBNFEsT0FBQTVRLEtBQUF5RixRQUFBNmQsaUJBTUF0akIsS0FBQXFPLE1BQUF2TCxFQUFBbUwsS0FNQWpPLEtBQUF1akIsUUFBQSxLQUVBdmpCLEtBQUF3akIsS0FBQTFnQixFQUFBMGdCLEtBQ0F4akIsS0FBQWlPLEtBQUFuTCxFQUFBbUwsTUFFQXJPLEVBQUE4RixPQUFBOUYsRUFBQXdqQixTQUFBeGpCLEVBQUFtUSxXQU1BblEsRUFBQXdqQixTQUFBNWdCLFVBQ0FnaEIsS0FBQSxLQUNBdlYsS0FBQSxNQUNBd1YsVUFBQSxJQU1BN2pCLEVBQUF3akIsU0FBQTNVLE1BQ0FpVixTQUFBLFdBQ0FDLElBQUEsT0FPQS9qQixFQUFBd2pCLFNBQUE5akIsVUFBQXNrQixTQUFBLFdBTUEsT0FMQTVqQixLQUFBcU8sUUFBQXpPLEVBQUF3akIsU0FBQTNVLEtBQUFrVixJQUNBM2pCLEtBQUFxakIsVUFBQVEsc0JBQUE3akIsS0FBQXVqQixTQUNVdmpCLEtBQUFxTyxRQUFBek8sRUFBQXdqQixTQUFBM1UsS0FBQWlWLFVBQ1YxakIsS0FBQXFqQixVQUFBTCx1QkFBQWhqQixLQUFBdWpCLFNBRUF2akIsS0FBQXVqQixTQVFBbmxCLE9BQUFDLGVBQUF1QixFQUFBd2pCLFNBQUE5akIsVUFBQSxRQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFxakIsVUFBQVMsbUJBRUFwakIsSUFBQSxTQUFBOGlCLEdBQ0F4akIsS0FBQXFqQixVQUFBVSxRQUFBLEVBQUFQLEVBQ0F4akIsS0FBQXVqQixRQUFBLElBQUFoUixhQUFBaVIsTUFTQXBsQixPQUFBQyxlQUFBdUIsRUFBQXdqQixTQUFBOWpCLFVBQUEsUUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBcU8sT0FFQTNOLElBQUEsU0FBQXVOLEdBQ0EsR0FBQUEsSUFBQXJPLEVBQUF3akIsU0FBQTNVLEtBQUFpVixVQUFBelYsSUFBQXJPLEVBQUF3akIsU0FBQTNVLEtBQUFrVixJQUNBLFVBQUFLLFVBQUEsZ0NBQUEvVixHQUVBak8sS0FBQXFPLE1BQUFKLEtBU0E3UCxPQUFBQyxlQUFBdUIsRUFBQXdqQixTQUFBOWpCLFVBQUEsYUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBcWpCLFVBQUFZLHVCQUVBdmpCLElBQUEsU0FBQStDLEdBQ0F6RCxLQUFBcWpCLFVBQUFZLHNCQUFBeGdCLEtBT0E3RCxFQUFBd2pCLFNBQUE5akIsVUFBQW1CLFFBQUEsV0FDQWIsRUFBQW1RLFVBQUF6USxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBcWpCLFVBQUFqVixhQUNBcE8sS0FBQXFqQixVQUFBLEtBQ0FyakIsS0FBQXVqQixRQUFBLE1BRUEzakIsRUFBQXdqQixXQUVBdmpCLEVBQUEsU0FBQUQsR0F1SEEsT0F2R0FBLEVBQUFza0IsV0FBQSxXQUNBLElBQUFwaEIsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLFlBQ0EsU0FDQTFELEVBQUFza0IsWUFDQXRrQixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQU1BQSxLQUFBbWtCLFlBQUFua0IsS0FBQXFRLE1BQUFyUSxLQUFBNFEsT0FBQTVRLEtBQUF5RixRQUFBMmUsMkJBTUFwa0IsS0FBQXFrQixVQUFBLElBQUF6a0IsRUFBQWlDLE9BQ0FILE1BQUExQixLQUFBbWtCLFlBQUFFLFVBQ0FsUixNQUFBdlQsRUFBQTZPLEtBQUFrTSxTQUNBZSxTQUFBLElBT0ExYixLQUFBcWdCLE9BQUEsSUFBQXpnQixFQUFBaUMsTUFBQTdCLEtBQUFta0IsWUFBQTlELE9BQUF6Z0IsRUFBQTZPLEtBQUEySyxNQU1BcFosS0FBQXdnQixRQUFBLElBQUE1Z0IsRUFBQWlDLE1BQUE3QixLQUFBbWtCLFlBQUEzRCxRQUFBNWdCLEVBQUE2TyxLQUFBMkssTUFNQXBaLEtBQUFza0IsS0FBQSxJQUFBMWtCLEVBQUFpQyxPQUNBSCxNQUFBMUIsS0FBQW1rQixZQUFBRyxLQUNBblIsTUFBQXZULEVBQUE2TyxLQUFBa00sU0FDQWUsU0FBQSxJQU9BMWIsS0FBQXVrQixNQUFBLElBQUEza0IsRUFBQWlDLE9BQ0FILE1BQUExQixLQUFBbWtCLFlBQUFJLE1BQ0E3SSxTQUFBLElBR0ExYixLQUFBa0UsV0FDQSxPQUNBLFVBQ0EsU0FDQSxRQUNBLGNBRUFsRSxLQUFBVSxJQUFBb0MsSUFFQWxELEVBQUE4RixPQUFBOUYsRUFBQXNrQixXQUFBdGtCLEVBQUFtUSxXQU1BblEsRUFBQXNrQixXQUFBMWhCLFVBQ0EraEIsTUFBQSxHQUNBRixXQUFBLEdBQ0E3RCxRQUFBLElBQ0FILE9BQUEsS0FDQWlFLEtBQUEsSUFNQTFrQixFQUFBc2tCLFdBQUE1a0IsVUFBQW1CLFFBQUEsV0FxQkEsT0FwQkFiLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQW9FLFdBQ0EsT0FDQSxVQUNBLFNBQ0EsUUFDQSxjQUVBcEUsS0FBQW1rQixZQUFBL1YsYUFDQXBPLEtBQUFta0IsWUFBQSxLQUNBbmtCLEtBQUFxZ0IsT0FBQTVmLFVBQ0FULEtBQUFxZ0IsT0FBQSxLQUNBcmdCLEtBQUF3Z0IsUUFBQS9mLFVBQ0FULEtBQUF3Z0IsUUFBQSxLQUNBeGdCLEtBQUFxa0IsVUFBQTVqQixVQUNBVCxLQUFBcWtCLFVBQUEsS0FDQXJrQixLQUFBdWtCLE1BQUE5akIsVUFDQVQsS0FBQXVrQixNQUFBLEtBQ0F2a0IsS0FBQXNrQixLQUFBN2pCLFVBQ0FULEtBQUFza0IsS0FBQSxLQUNBdGtCLE1BRUFKLEVBQUFza0IsYUFFQXJrQixFQUFBLFNBQUFELEdBb0RBLE9BM0JBQSxFQUFBNGtCLElBQUEsU0FBQTdsQixHQUNBaUIsRUFBQWdDLE9BQUEvRCxLQUFBbUMsTUFDQUEsS0FBQXlRLGNBQUEsS0FNQXpRLEtBQUF5a0IsS0FBQXprQixLQUFBcVEsTUFBQSxHQUFBclEsS0FBQXFRLE1BQUEsR0FBQXJRLEtBQUE0USxPQUFBLElBQUFoUixFQUFBbWIsS0FLQS9hLEtBQUF5UixPQUFBelIsS0FBQXFRLE1BQUEsT0FBQXpRLEVBQUFnQyxPQUFBakQsR0FDQXFCLEtBQUF5UixPQUFBak8sUUFBQXhELEtBQUF5a0IsT0FFQTdrQixFQUFBOEYsT0FBQTlGLEVBQUE0a0IsSUFBQTVrQixFQUFBZ0MsUUFLQWhDLEVBQUE0a0IsSUFBQWxsQixVQUFBbUIsUUFBQSxXQUlBLE9BSEFiLEVBQUFnQyxPQUFBdEMsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQXlrQixLQUFBaGtCLFVBQ0FULEtBQUF5a0IsS0FBQSxLQUNBemtCLE1BRUFKLEVBQUE0a0IsTUFFQTNrQixFQUFBLFNBQUFELEdBcURBLE9BL0JBQSxFQUFBOGtCLFNBQUEsU0FBQS9sQixHQUNBaUIsRUFBQWdDLE9BQUEvRCxLQUFBbUMsTUFDQUEsS0FBQXlRLGNBQUEsS0FRQXpRLEtBQUEya0IsTUFBQTNrQixLQUFBcVEsTUFBQSxHQUFBclEsS0FBQTRRLE9BQUEsSUFBQWhSLEVBQUFtYixLQU1BL2EsS0FBQXlSLE9BQUF6UixLQUFBcVEsTUFBQSxHQUFBclEsS0FBQTRRLE9BQUF6TCxLQUNBbkYsS0FBQXJCLE1BQUFpQixFQUFBbUQsV0FBQXBFLEVBQUEsSUFFQWlCLEVBQUE4RixPQUFBOUYsRUFBQThrQixTQUFBOWtCLEVBQUFnQyxRQUtBaEMsRUFBQThrQixTQUFBcGxCLFVBQUFtQixRQUFBLFdBS0EsT0FKQWIsRUFBQWdDLE9BQUF0QyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBMmtCLE1BQUFsa0IsVUFDQVQsS0FBQTJrQixNQUFBLEtBQ0Eza0IsS0FBQXlSLE9BQUEsS0FDQXpSLE1BRUFKLEVBQUE4a0IsV0FFQTdrQixFQUFBLFNBQUFELEdBZ0NBLE9BcEJBQSxFQUFBZ2xCLE9BQUEsV0FDQWhsQixFQUFBeVIsV0FBQXhULEtBQUFtQyxNQU1BQSxLQUFBNmtCLFVBQUE3a0IsS0FBQXFRLE1BQUFyUSxLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQThrQixVQUFBLElBRUE5a0IsRUFBQThGLE9BQUE5RixFQUFBZ2xCLE9BQUFobEIsRUFBQXlSLFlBS0F6UixFQUFBZ2xCLE9BQUF0bEIsVUFBQW1CLFFBQUEsV0FJQSxPQUhBYixFQUFBeVIsV0FBQS9SLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUE2a0IsVUFBQXBrQixVQUNBVCxLQUFBNmtCLFVBQUEsS0FDQTdrQixNQUVBSixFQUFBZ2xCLFNBRUEva0IsRUFBQSxTQUFBRCxHQTREQSxPQXJDQUEsRUFBQWtsQixTQUFBLFNBQUFubUIsR0FDQWlCLEVBQUFnQyxPQUFBL0QsS0FBQW1DLE1BQ0FBLEtBQUF5USxjQUFBLEtBTUF6USxLQUFBeWtCLEtBQUF6a0IsS0FBQXFRLE1BQUEsR0FBQXJRLEtBQUE0USxPQUFBLElBQUFoUixFQUFBbWIsS0FPQS9hLEtBQUEra0IsS0FBQSxJQUFBbmxCLEVBQUFnbEIsT0FNQTVrQixLQUFBeVIsT0FBQXpSLEtBQUFxUSxNQUFBLE9BQUF6USxFQUFBZ0MsT0FBQWpELEdBQ0FxQixLQUFBeVIsT0FBQU4sTUFBQW5SLEtBQUEra0IsS0FBQS9rQixLQUFBeWtCLE9BRUE3a0IsRUFBQThGLE9BQUE5RixFQUFBa2xCLFNBQUFsbEIsRUFBQWdDLFFBS0FoQyxFQUFBa2xCLFNBQUF4bEIsVUFBQW1CLFFBQUEsV0FNQSxPQUxBYixFQUFBZ0MsT0FBQXRDLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUEra0IsS0FBQXRrQixVQUNBVCxLQUFBK2tCLEtBQUEsS0FDQS9rQixLQUFBeWtCLEtBQUFyVyxhQUNBcE8sS0FBQXlrQixLQUFBLEtBQ0F6a0IsTUFFQUosRUFBQWtsQixXQUVBamxCLEVBQUEsU0FBQUQsR0FvQ0EsT0ExQkFBLEVBQUFvbEIsZUFBQSxXQUNBcGxCLEVBQUF5UixXQUFBeFQsS0FBQW1DLE1BS0FBLEtBQUFpbEIsU0FBQWpsQixLQUFBcVEsTUFBQXJRLEtBQUE0USxPQUFBLElBQUFoUixFQUFBNlMsV0FBQSxTQUFBaFAsR0FDQSxPQUFBbUIsS0FBQXNWLElBQUF6VyxHQUFBLEtBRUEsRUFFQTdELEVBQUE2RSxnQkFBQWhCLElBRVV2RSxLQUFBYyxNQUFBLE9BRVZKLEVBQUE4RixPQUFBOUYsRUFBQW9sQixlQUFBcGxCLEVBQUF5UixZQUtBelIsRUFBQW9sQixlQUFBMWxCLFVBQUFtQixRQUFBLFdBSUEsT0FIQWIsRUFBQXlSLFdBQUEvUixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBaWxCLFNBQUF4a0IsVUFDQVQsS0FBQWlsQixTQUFBLEtBQ0FqbEIsTUFFQUosRUFBQW9sQixpQkFFQW5sQixFQUFBLFNBQUFELEdBcUdBLE9BN0VBQSxFQUFBc2xCLFVBQUEsU0FBQUMsR0FDQXZsQixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQUNBQSxLQUFBeVEsY0FBQSxLQUtBelEsS0FBQTJZLEVBQUEzWSxLQUFBcVEsTUFBQSxPQUFBelEsRUFBQW1iLEtBS0EvYSxLQUFBZ1osRUFBQWhaLEtBQUFxUSxNQUFBLE9BQUF6USxFQUFBbWIsS0FRQS9hLEtBQUFvbEIsS0FBQSxJQUFBeGxCLEVBQUFnQyxPQUFBaEMsRUFBQW1ELFdBQUFvaUIsRUFBQSxJQUFBdmxCLEVBQUE2TyxLQUFBZ00sYUFNQXphLEtBQUFxbEIsYUFBQSxJQUFBemxCLEVBQUFvbEIsZUFNQWhsQixLQUFBc2xCLGFBQUEsSUFBQTFsQixFQUFBb2xCLGVBTUFobEIsS0FBQXVsQixLQUFBdmxCLEtBQUF5RixRQUFBeUgsWUFBQSxHQU1BbE4sS0FBQXdsQixRQUFBLElBQUE1bEIsRUFBQWtsQixTQUVBOWtCLEtBQUEyWSxFQUFBblYsUUFBQXhELEtBQUE0USxRQUNBNVEsS0FBQWdaLEVBQUF4VixRQUFBeEQsS0FBQTRRLFFBQ0E1USxLQUFBb2xCLEtBQUFqVSxNQUFBblIsS0FBQXNsQixhQUFBdGxCLEtBQUFnWixFQUFBN1QsTUFDQW5GLEtBQUF1bEIsS0FBQS9oQixRQUFBeEQsS0FBQXdsQixRQUFBLEtBQ0F4bEIsS0FBQW9sQixLQUFBNWhCLFFBQUF4RCxLQUFBd2xCLFFBQUEsS0FDQXhsQixLQUFBd2xCLFFBQUFyVSxNQUFBblIsS0FBQXFsQixhQUFBcmxCLEtBQUEyWSxFQUFBeFQsTUFDQW5GLEtBQUFrRSxVQUFBLFNBRUF0RSxFQUFBOEYsT0FBQTlGLEVBQUFzbEIsVUFBQXRsQixFQUFBbVEsV0FLQW5RLEVBQUFzbEIsVUFBQTVsQixVQUFBbUIsUUFBQSxXQWdCQSxPQWZBYixFQUFBbVEsVUFBQXpRLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFvRSxVQUFBLFFBQ0FwRSxLQUFBcWxCLGFBQUE1a0IsVUFDQVQsS0FBQXFsQixhQUFBLEtBQ0FybEIsS0FBQXNsQixhQUFBN2tCLFVBQ0FULEtBQUFzbEIsYUFBQSxLQUNBdGxCLEtBQUFvbEIsS0FBQTNrQixVQUNBVCxLQUFBb2xCLEtBQUEsS0FDQXBsQixLQUFBd2xCLFFBQUEva0IsVUFDQVQsS0FBQXdsQixRQUFBLEtBQ0F4bEIsS0FBQXVsQixLQUFBLEtBQ0F2bEIsS0FBQTJZLEVBQUFsWSxVQUNBVCxLQUFBMlksRUFBQSxLQUNBM1ksS0FBQWdaLEVBQUF2WSxVQUNBVCxLQUFBZ1osRUFBQSxLQUNBaFosTUFFQUosRUFBQXNsQixZQUVBcmxCLEVBQUEsU0FBQUQsR0F1TUEsT0F0TEFBLEVBQUE2bEIsT0FBQSxXQUNBLElBQUEzaUIsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLFlBQ0EsT0FDQSxXQUNBMUQsRUFBQTZsQixRQUNBN2xCLEVBQUFtUSxVQUFBbFMsS0FBQW1DLE1BQ0FBLEtBQUF5USxjQUFBLEtBTUF6USxLQUFBMGxCLFlBTUExbEIsS0FBQW1aLFVBQUEsSUFBQXZaLEVBQUFnQyxPQUFBa0IsRUFBQXFXLFVBQUF2WixFQUFBNk8sS0FBQXNILFdBTUEvVixLQUFBMmxCLE9BQUEsSUFBQS9sQixFQUFBZ0MsT0FBQSxFQUFBaEMsRUFBQTZPLEtBQUF1TSxPQU1BaGIsS0FBQW1GLEtBQUEsSUFBQXZGLEVBQUFnQyxRQUNBakQsTUFBQW1FLEVBQUFxQyxLQUNBdVcsU0FBQSxJQU9BMWIsS0FBQTRsQixFQUFBLElBQUFobUIsRUFBQWdDLE9BQUFrQixFQUFBOGlCLEdBTUE1bEIsS0FBQXFPLE1BQUF2TCxFQUFBbUwsS0FNQWpPLEtBQUE2bEIsU0FBQS9pQixFQUFBZ2pCLFFBRUE5bEIsS0FBQThsQixRQUFBaGpCLEVBQUFnakIsUUFDQTlsQixLQUFBa0UsV0FDQSxTQUNBLFlBQ0EsT0FDQSxPQUdBdEUsRUFBQThGLE9BQUE5RixFQUFBNmxCLE9BQUE3bEIsRUFBQW1RLFdBT0FuUSxFQUFBNmxCLE9BQUFqakIsVUFDQXlMLEtBQUEsVUFDQWtMLFVBQUEsSUFDQTJNLFNBQUEsR0FDQUYsRUFBQSxFQUNBemdCLEtBQUEsR0FTQS9HLE9BQUFDLGVBQUF1QixFQUFBNmxCLE9BQUFubUIsVUFBQSxRQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFxTyxPQUVBM04sSUFBQSxTQUFBdU4sR0FXQSxTQVRBLFVBQ0EsV0FDQSxXQUNBLFdBQ0EsWUFDQSxRQUNBLFVBQ0EsV0FFQTlNLFFBQUE4TSxHQUNBLFVBQUErVixVQUFBLDZCQUFBL1YsR0FFQWpPLEtBQUFxTyxNQUFBSixFQUNBLFFBQUF2USxFQUFBLEVBQTRCQSxFQUFBc0MsS0FBQTBsQixTQUFBcGtCLE9BQTBCNUQsSUFDdERzQyxLQUFBMGxCLFNBQUFob0IsR0FBQXVRLFVBWUE3UCxPQUFBQyxlQUFBdUIsRUFBQTZsQixPQUFBbm1CLFVBQUEsV0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBNmxCLFVBRUFubEIsSUFBQSxTQUFBb2xCLEdBQ0FBLEVBQUE3UixTQUFBNlIsRUFBQSxJQUNBLElBTUFDLElBTEEsSUFDQSxJQUNBLElBQ0EsSUFFQTVrQixRQUFBMmtCLEdBRUEsUUFBQUMsRUFDQSxVQUFBN1MsV0FBQSx5REFFQTZTLEdBQUEsRUFDQS9sQixLQUFBNmxCLFNBQUFDLEVBRUE5bEIsS0FBQXFRLE1BQUFqQyxhQUNBLFFBQUExUSxFQUFBLEVBQTRCQSxFQUFBc0MsS0FBQTBsQixTQUFBcGtCLE9BQTBCNUQsSUFDdERzQyxLQUFBMGxCLFNBQUFob0IsR0FBQTBRLGFBQ0FwTyxLQUFBMGxCLFNBQUFob0IsR0FBQSxLQUVBc0MsS0FBQTBsQixTQUFBLElBQUE1aEIsTUFBQWlpQixHQUNBLFFBQUFDLEVBQUEsRUFBZ0NBLEVBQUFELEVBQXdCQyxJQUFBLENBQ3hELElBQUFDLEVBQUFqbUIsS0FBQXlGLFFBQUF5Z0IscUJBQ0FELEVBQUFoWSxLQUFBak8sS0FBQXFPLE1BQ0FyTyxLQUFBbVosVUFBQTNWLFFBQUF5aUIsRUFBQTlNLFdBQ0FuWixLQUFBMmxCLE9BQUFuaUIsUUFBQXlpQixFQUFBTixRQUNBM2xCLEtBQUE0bEIsRUFBQXBpQixRQUFBeWlCLEVBQUFMLEdBQ0E1bEIsS0FBQW1GLEtBQUEzQixRQUFBeWlCLEVBQUE5Z0IsTUFDQW5GLEtBQUEwbEIsU0FBQU0sR0FBQUMsRUFHQSxJQUFBRSxHQUFBbm1CLEtBQUFxUSxPQUFBK1YsT0FBQXBtQixLQUFBMGxCLFVBQUFVLFFBQUFwbUIsS0FBQTRRLFNBQ0FoUixFQUFBd0QsY0FBQWtFLE1BQUExSCxFQUFBdW1CLE1BT0F2bUIsRUFBQTZsQixPQUFBbm1CLFVBQUFtQixRQUFBLFdBQ0FiLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQSxRQUFBdEMsRUFBQSxFQUF3QkEsRUFBQXNDLEtBQUEwbEIsU0FBQXBrQixPQUEwQjVELElBQ2xEc0MsS0FBQTBsQixTQUFBaG9CLEdBQUEwUSxhQUNBcE8sS0FBQTBsQixTQUFBaG9CLEdBQUEsS0FpQkEsT0FmQXNDLEtBQUEwbEIsU0FBQSxLQUNBMWxCLEtBQUFvRSxXQUNBLFNBQ0EsWUFDQSxPQUNBLE1BRUFwRSxLQUFBbVosVUFBQTFZLFVBQ0FULEtBQUE0bEIsRUFBQW5sQixVQUNBVCxLQUFBbVosVUFBQSxLQUNBblosS0FBQTRsQixFQUFBLEtBQ0E1bEIsS0FBQTJsQixPQUFBbGxCLFVBQ0FULEtBQUEybEIsT0FBQSxLQUNBM2xCLEtBQUFtRixLQUFBMUUsVUFDQVQsS0FBQW1GLEtBQUEsS0FDQW5GLE1BRUFKLEVBQUE2bEIsU0FFQTVsQixFQUFBLFNBQUFELEdBZ0lBLE9BckhBQSxFQUFBeW1CLGVBQUEsV0FDQSxJQUFBdmpCLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxlQUNBLGlCQUNBMUQsRUFBQXltQixnQkFDQXptQixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQU1BQSxLQUFBcVEsTUFBQSxJQUFBelEsRUFBQW1iLEtBTUEvYSxLQUFBNFEsT0FBQSxJQUFBOU0sTUFBQSxHQUtBOUQsS0FBQXNtQixJQUFBdG1CLEtBQUE0USxPQUFBLE9BQUFoUixFQUFBNmxCLE9BQUEsYUFNQXpsQixLQUFBdW1CLGNBQUEsSUFBQTNtQixFQUFBNmxCLE9BQUEsY0FLQXpsQixLQUFBd21CLElBQUF4bUIsS0FBQTRRLE9BQUEsT0FBQWhSLEVBQUE2bEIsT0FBQSxhQUtBemxCLEtBQUF5bUIsS0FBQXptQixLQUFBNFEsT0FBQSxPQUFBaFIsRUFBQTZsQixPQUFBLGNBTUF6bEIsS0FBQTBtQixhQUFBLElBQUE5bUIsRUFBQWdDLE9BQUFrQixFQUFBNGpCLGFBQUE5bUIsRUFBQTZPLEtBQUFzSCxXQU1BL1YsS0FBQTJtQixjQUFBLElBQUEvbUIsRUFBQWdDLE9BQUFrQixFQUFBNmpCLGNBQUEvbUIsRUFBQTZPLEtBQUFzSCxXQU1BL1YsS0FBQTRsQixFQUFBLElBQUFobUIsRUFBQWdDLE9BQUFrQixFQUFBOGlCLEdBQ0E1bEIsS0FBQXFRLE1BQUFlLElBQUFwUixLQUFBc21CLElBQUF0bUIsS0FBQXltQixNQUNBem1CLEtBQUFxUSxNQUFBYyxNQUFBblIsS0FBQXVtQixjQUFBdm1CLEtBQUF3bUIsS0FFQXhtQixLQUFBMG1CLGFBQUFsakIsUUFBQXhELEtBQUFzbUIsSUFBQW5OLFdBQ0FuWixLQUFBMG1CLGFBQUFsakIsUUFBQXhELEtBQUF1bUIsY0FBQXBOLFdBQ0FuWixLQUFBMm1CLGNBQUFuakIsUUFBQXhELEtBQUF3bUIsSUFBQXJOLFdBQ0FuWixLQUFBMm1CLGNBQUFuakIsUUFBQXhELEtBQUF5bUIsS0FBQXROLFdBRUFuWixLQUFBNGxCLEVBQUFwaUIsUUFBQXhELEtBQUFzbUIsSUFBQVYsR0FDQTVsQixLQUFBNGxCLEVBQUFwaUIsUUFBQXhELEtBQUF1bUIsY0FBQVgsR0FDQTVsQixLQUFBNGxCLEVBQUFwaUIsUUFBQXhELEtBQUF3bUIsSUFBQVosR0FDQTVsQixLQUFBNGxCLEVBQUFwaUIsUUFBQXhELEtBQUF5bUIsS0FBQWIsR0FDQTVsQixLQUFBa0UsV0FDQSxPQUNBLE1BQ0EsTUFDQSxnQkFDQSxrQkFHQXRFLEVBQUE4RixPQUFBOUYsRUFBQXltQixlQUFBem1CLEVBQUFtUSxXQU1BblEsRUFBQXltQixlQUFBN2pCLFVBQ0Fra0IsYUFBQSxJQUNBQyxjQUFBLEtBQ0FmLEVBQUEsR0FNQWhtQixFQUFBeW1CLGVBQUEvbUIsVUFBQW1CLFFBQUEsV0F1QkEsT0F0QkFiLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQW9FLFdBQ0EsT0FDQSxNQUNBLE1BQ0EsZ0JBQ0EsaUJBRUFwRSxLQUFBc21CLElBQUE3bEIsVUFDQVQsS0FBQXNtQixJQUFBLEtBQ0F0bUIsS0FBQXVtQixjQUFBOWxCLFVBQ0FULEtBQUF1bUIsY0FBQSxLQUNBdm1CLEtBQUF3bUIsSUFBQS9sQixVQUNBVCxLQUFBd21CLElBQUEsS0FDQXhtQixLQUFBeW1CLEtBQUFobUIsVUFDQVQsS0FBQXltQixLQUFBLEtBQ0F6bUIsS0FBQTBtQixhQUFBam1CLFVBQ0FULEtBQUEwbUIsYUFBQSxLQUNBMW1CLEtBQUEybUIsY0FBQWxtQixVQUNBVCxLQUFBMm1CLGNBQUEsS0FDQTNtQixLQUFBNGxCLEVBQUFubEIsVUFDQVQsS0FBQTRsQixFQUFBLEtBQ0E1bEIsTUFFQUosRUFBQXltQixpQkFFQXhtQixFQUFBLFNBQUFELEdBK0lBLE9BaElBQSxFQUFBZ25CLElBQUEsV0FDQSxJQUFBOWpCLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxNQUNBLE1BQ0EsUUFDQTFELEVBQUFnbkIsS0FDQWhuQixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQU1BQSxLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQW1iLEtBTUEvYSxLQUFBNm1CLGdCQUFBN21CLEtBQUFxUSxNQUFBLElBQUF6USxFQUFBeW1CLGdCQUNBSyxhQUFBNWpCLEVBQUE0akIsYUFDQUMsY0FBQTdqQixFQUFBNmpCLGdCQU9BM21CLEtBQUE4bUIsU0FBQSxJQUFBbG5CLEVBQUFtYixLQUFBalksRUFBQXdqQixJQUFBMW1CLEVBQUE2TyxLQUFBa00sVUFNQTNhLEtBQUErbUIsU0FBQSxJQUFBbm5CLEVBQUFtYixLQUFBalksRUFBQTBqQixJQUFBNW1CLEVBQUE2TyxLQUFBa00sVUFNQTNhLEtBQUFnbkIsVUFBQSxJQUFBcG5CLEVBQUFtYixLQUFBalksRUFBQTJqQixLQUFBN21CLEVBQUE2TyxLQUFBa00sVUFNQTNhLEtBQUFzbUIsSUFBQXRtQixLQUFBOG1CLFNBQUEzaEIsS0FNQW5GLEtBQUF3bUIsSUFBQXhtQixLQUFBK21CLFNBQUE1aEIsS0FNQW5GLEtBQUF5bUIsS0FBQXptQixLQUFBZ25CLFVBQUE3aEIsS0FNQW5GLEtBQUE0bEIsRUFBQTVsQixLQUFBNm1CLGdCQUFBakIsRUFNQTVsQixLQUFBMG1CLGFBQUExbUIsS0FBQTZtQixnQkFBQUgsYUFNQTFtQixLQUFBMm1CLGNBQUEzbUIsS0FBQTZtQixnQkFBQUYsY0FFQTNtQixLQUFBNm1CLGdCQUFBUCxJQUFBblYsTUFBQW5SLEtBQUE4bUIsU0FBQTltQixLQUFBNFEsUUFDQTVRLEtBQUE2bUIsZ0JBQUFMLElBQUFyVixNQUFBblIsS0FBQSttQixTQUFBL21CLEtBQUE0USxRQUNBNVEsS0FBQTZtQixnQkFBQUosS0FBQXRWLE1BQUFuUixLQUFBZ25CLFVBQUFobkIsS0FBQTRRLFFBQ0E1USxLQUFBa0UsV0FDQSxNQUNBLE1BQ0EsT0FDQSxlQUNBLG1CQUdBdEUsRUFBQThGLE9BQUE5RixFQUFBZ25CLElBQUFobkIsRUFBQW1RLFdBSUFuUSxFQUFBZ25CLElBQUFwa0IsVUFDQThqQixJQUFBLEVBQ0FFLElBQUEsRUFDQUMsS0FBQSxFQUNBQyxhQUFBLElBQ0FDLGNBQUEsTUFNQS9tQixFQUFBZ25CLElBQUF0bkIsVUFBQW1CLFFBQUEsV0F1QkEsT0F0QkFiLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQW9FLFdBQ0EsTUFDQSxNQUNBLE9BQ0EsZUFDQSxrQkFFQXBFLEtBQUE2bUIsZ0JBQUFwbUIsVUFDQVQsS0FBQTZtQixnQkFBQSxLQUNBN21CLEtBQUEwbUIsYUFBQSxLQUNBMW1CLEtBQUEybUIsY0FBQSxLQUNBM21CLEtBQUE4bUIsU0FBQXJtQixVQUNBVCxLQUFBOG1CLFNBQUEsS0FDQTltQixLQUFBK21CLFNBQUF0bUIsVUFDQVQsS0FBQSttQixTQUFBLEtBQ0EvbUIsS0FBQWduQixVQUFBdm1CLFVBQ0FULEtBQUFnbkIsVUFBQSxLQUNBaG5CLEtBQUFzbUIsSUFBQSxLQUNBdG1CLEtBQUF3bUIsSUFBQSxLQUNBeG1CLEtBQUF5bUIsS0FBQSxLQUNBem1CLEtBQUE0bEIsRUFBQSxLQUNBNWxCLE1BRUFKLEVBQUFnbkIsTUFFQS9tQixFQUFBLFNBQUFELEdBZ0dBLE9BaEZBQSxFQUFBcW5CLE1BQUEsU0FBQUMsRUFBQUMsR0FDQXZuQixFQUFBeVIsV0FBQXhULEtBQUFtQyxNQUtBQSxLQUFBb25CLFdBQUF4bkIsRUFBQW1ELFdBQUFta0IsRUFBQSxHQUtBbG5CLEtBQUFxbkIsV0FBQXpuQixFQUFBbUQsV0FBQW9rQixFQUFBLEdBTUFubkIsS0FBQXNuQixPQUFBdG5CLEtBQUFxUSxNQUFBLElBQUF6USxFQUFBOGtCLFNBQUEsR0FNQTFrQixLQUFBdW5CLEtBQUF2bkIsS0FBQTRRLE9BQUEsSUFBQWhSLEVBQUE0a0IsSUFBQSxHQUNBeGtCLEtBQUFzbkIsT0FBQTlqQixRQUFBeEQsS0FBQXVuQixNQUNBdm5CLEtBQUF3bkIsYUFFQTVuQixFQUFBOEYsT0FBQTlGLEVBQUFxbkIsTUFBQXJuQixFQUFBeVIsWUFRQWpULE9BQUFDLGVBQUF1QixFQUFBcW5CLE1BQUEzbkIsVUFBQSxPQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFvbkIsWUFFQTFtQixJQUFBLFNBQUF3YixHQUNBbGMsS0FBQW9uQixXQUFBbEwsRUFDQWxjLEtBQUF3bkIsZUFVQXBwQixPQUFBQyxlQUFBdUIsRUFBQXFuQixNQUFBM25CLFVBQUEsT0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBcW5CLFlBRUEzbUIsSUFBQSxTQUFBZ1AsR0FDQTFQLEtBQUFxbkIsV0FBQTNYLEVBQ0ExUCxLQUFBd25CLGVBT0E1bkIsRUFBQXFuQixNQUFBM25CLFVBQUFrb0IsVUFBQSxXQUNBeG5CLEtBQUF1bkIsS0FBQTVvQixNQUFBcUIsS0FBQW9uQixXQUNBcG5CLEtBQUFzbkIsT0FBQTNvQixNQUFBcUIsS0FBQXFuQixXQUFBcm5CLEtBQUFvbkIsWUFNQXhuQixFQUFBcW5CLE1BQUEzbkIsVUFBQW1CLFFBQUEsV0FNQSxPQUxBYixFQUFBeVIsV0FBQS9SLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUF1bkIsS0FBQTltQixVQUNBVCxLQUFBdW5CLEtBQUEsS0FDQXZuQixLQUFBc25CLE9BQUE3bUIsVUFDQVQsS0FBQXNuQixPQUFBLEtBQ0F0bkIsTUFFQUosRUFBQXFuQixRQUVBcG5CLEVBQUEsU0FBQUQsR0EwRkEsT0EzRUFBLEVBQUE2bkIsU0FBQSxTQUFBUCxFQUFBQyxFQUFBTyxHQUNBOW5CLEVBQUF5UixXQUFBeFQsS0FBQW1DLE1BTUFBLEtBQUFzbkIsT0FBQXRuQixLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQXFuQixNQUFBQyxFQUFBQyxHQU1Bbm5CLEtBQUFpZ0IsS0FBQWpnQixLQUFBcVEsTUFBQSxJQUFBelEsRUFBQW9nQixJQUFBcGdCLEVBQUFtRCxXQUFBMmtCLEVBQUEsSUFDQTFuQixLQUFBaWdCLEtBQUF6YyxRQUFBeEQsS0FBQXNuQixTQUVBMW5CLEVBQUE4RixPQUFBOUYsRUFBQTZuQixTQUFBN25CLEVBQUF5UixZQVNBalQsT0FBQUMsZUFBQXVCLEVBQUE2bkIsU0FBQW5vQixVQUFBLFlBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQWlnQixLQUFBdGhCLE9BRUErQixJQUFBLFNBQUEwZCxHQUNBcGUsS0FBQWlnQixLQUFBdGhCLE1BQUF5ZixLQVVBaGdCLE9BQUFDLGVBQUF1QixFQUFBNm5CLFNBQUFub0IsVUFBQSxPQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFzbkIsT0FBQXBMLEtBRUF4YixJQUFBLFNBQUF3YixHQUNBbGMsS0FBQXNuQixPQUFBcEwsU0FVQTlkLE9BQUFDLGVBQUF1QixFQUFBNm5CLFNBQUFub0IsVUFBQSxPQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFzbkIsT0FBQTVYLEtBRUFoUCxJQUFBLFNBQUFnUCxHQUNBMVAsS0FBQXNuQixPQUFBNVgsU0FPQTlQLEVBQUE2bkIsU0FBQW5vQixVQUFBbUIsUUFBQSxXQU1BLE9BTEFiLEVBQUF5UixXQUFBL1IsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQXNuQixPQUFBN21CLFVBQ0FULEtBQUFzbkIsT0FBQSxLQUNBdG5CLEtBQUFpZ0IsS0FBQXhmLFVBQ0FULEtBQUFpZ0IsS0FBQSxLQUNBamdCLE1BRUFKLEVBQUE2bkIsV0FFQTVuQixFQUFBLFNBQUFELEdBeUVBLE9BakVBQSxFQUFBK25CLE1BQUEsV0FDQSxJQUFBN2tCLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxZQUNBLFlBQ0ExRCxFQUFBK25CLE9BQ0EvbkIsRUFBQW1RLFVBQUFsUyxLQUFBbUMsTUFNQUEsS0FBQTRuQixVQUFBaGpCLEtBQUE4SyxJQUFBMVAsS0FBQXlULFVBQUEzUSxFQUFBK2tCLFVBQUE3bkIsS0FBQXlULFVBQUEzUSxFQUFBZ2xCLFlBTUE5bkIsS0FBQStuQixXQUFBL25CLEtBQUFxUSxNQUFBclEsS0FBQTRRLE9BQUE1USxLQUFBeUYsUUFBQTJGLFlBQUFwTCxLQUFBNG5CLFdBT0E1bkIsS0FBQThuQixVQUFBLElBQUFsb0IsRUFBQWlDLE9BQ0FILE1BQUExQixLQUFBK25CLFdBQUFELFVBQ0EzVSxNQUFBdlQsRUFBQTZPLEtBQUEySyxLQUNBemEsTUFBQW1FLEVBQUFnbEIsWUFFQTluQixLQUFBa0UsVUFBQSxjQUVBdEUsRUFBQThGLE9BQUE5RixFQUFBK25CLE1BQUEvbkIsRUFBQW1RLFdBTUFuUSxFQUFBK25CLE1BQUFubEIsVUFDQXFsQixTQUFBLEVBQ0FDLFVBQUEsR0FTQTFwQixPQUFBQyxlQUFBdUIsRUFBQStuQixNQUFBcm9CLFVBQUEsWUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBNG5CLGFBT0Fob0IsRUFBQStuQixNQUFBcm9CLFVBQUFtQixRQUFBLFdBTUEsT0FMQWIsRUFBQW1RLFVBQUF6USxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBK25CLFdBQUEzWixhQUNBcE8sS0FBQStuQixXQUFBLEtBQ0EvbkIsS0FBQW9FLFVBQUEsYUFDQXBFLEtBQUE4bkIsVUFBQSxLQUNBOW5CLE1BRUFKLEVBQUErbkIsUUFFQTluQixFQUFBLFNBQUFELEdBNEVBLE9BakVBQSxFQUFBb29CLG1CQUFBLFdBQ0EsSUFBQWxsQixFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsWUFDQSxhQUNBMUQsRUFBQW9vQixvQkFDQXBvQixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQU1BQSxLQUFBaW9CLE9BQUFqb0IsS0FBQXFRLE1BQUFyUSxLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQStuQixNQUFBN2tCLEVBQUFnbEIsV0FNQTluQixLQUFBOG5CLFVBQUE5bkIsS0FBQWlvQixPQUFBSCxVQU1BOW5CLEtBQUFrb0IsVUFBQSxJQUFBdG9CLEVBQUFtYixLQUFBalksRUFBQXFsQixVQUFBdm9CLEVBQUE2TyxLQUFBZ00sYUFNQXphLEtBQUFtb0IsVUFBQW5vQixLQUFBa29CLFVBQUEvaUIsS0FDQW5GLEtBQUFpb0IsT0FBQTlXLE1BQUFuUixLQUFBa29CLFVBQUFsb0IsS0FBQWlvQixRQUNBam9CLEtBQUFrRSxXQUNBLFlBQ0EsZUFHQXRFLEVBQUE4RixPQUFBOUYsRUFBQW9vQixtQkFBQXBvQixFQUFBbVEsV0FPQW5RLEVBQUFvb0IsbUJBQUF4bEIsVUFDQXNsQixVQUFBLEdBQ0FLLFVBQUEsSUFNQXZvQixFQUFBb29CLG1CQUFBMW9CLFVBQUFtQixRQUFBLFdBWUEsT0FYQWIsRUFBQW1RLFVBQUF6USxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBb0UsV0FDQSxZQUNBLGNBRUFwRSxLQUFBaW9CLE9BQUF4bkIsVUFDQVQsS0FBQWlvQixPQUFBLEtBQ0Fqb0IsS0FBQThuQixVQUFBLEtBQ0E5bkIsS0FBQWtvQixVQUFBem5CLFVBQ0FULEtBQUFrb0IsVUFBQSxLQUNBbG9CLEtBQUFtb0IsVUFBQSxLQUNBbm9CLE1BRUFKLEVBQUFvb0IscUJBRUFub0IsRUFBQSxTQUFBRCxHQXdEQSxPQWpEQUEsRUFBQStqQixJQUFBLFdBQ0EsSUFBQTdnQixFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQUEsUUFBQTFELEVBQUErakIsS0FDQTdnQixFQUFBbUwsS0FBQXJPLEVBQUF3akIsU0FBQTNVLEtBQUFrVixJQUNBL2pCLEVBQUFtUSxVQUFBbFMsS0FBQW1DLE1BTUFBLEtBQUFxakIsVUFBQXJqQixLQUFBcVEsTUFBQXJRLEtBQUE0USxPQUFBLElBQUFoUixFQUFBd2pCLFNBQUF0Z0IsSUFFQWxELEVBQUE4RixPQUFBOUYsRUFBQStqQixJQUFBL2pCLEVBQUFtUSxXQU1BblEsRUFBQStqQixJQUFBbmhCLFVBQTBCZ2hCLEtBQUEsTUFNMUI1akIsRUFBQStqQixJQUFBcmtCLFVBQUFza0IsU0FBQSxXQUNBLE9BQUE1akIsS0FBQXFqQixVQUFBTyxZQVFBeGxCLE9BQUFDLGVBQUF1QixFQUFBK2pCLElBQUFya0IsVUFBQSxRQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFxakIsVUFBQUcsTUFFQTlpQixJQUFBLFNBQUE4aUIsR0FDQXhqQixLQUFBcWpCLFVBQUFHLFVBT0E1akIsRUFBQStqQixJQUFBcmtCLFVBQUFtQixRQUFBLFdBQ0FiLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQXFqQixVQUFBNWlCLFVBQ0FULEtBQUFxakIsVUFBQSxNQUVBempCLEVBQUErakIsTUFFQTlqQixFQUFBLFNBQUFELEdBc0NBLE9BekJBQSxFQUFBd29CLElBQUEsV0FDQXhvQixFQUFBeVIsV0FBQXhULEtBQUFtQyxNQUtBQSxLQUFBcW9CLEtBQUFyb0IsS0FBQXFRLE1BQUFyUSxLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQTZTLFdBQUEsU0FBQWhQLEdBQ0EsT0FBQW1CLEtBQUFzVixJQUFBelcsR0FBQSxLQUNBLEVBRUFtQixLQUFBc1YsSUFBQXpXLElBRVUsT0FFVjdELEVBQUE4RixPQUFBOUYsRUFBQXdvQixJQUFBeG9CLEVBQUF5UixZQUtBelIsRUFBQXdvQixJQUFBOW9CLFVBQUFtQixRQUFBLFdBSUEsT0FIQWIsRUFBQXlSLFdBQUEvUixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBcW9CLEtBQUE1bkIsVUFDQVQsS0FBQXFvQixLQUFBLEtBQ0Fyb0IsTUFFQUosRUFBQXdvQixNQUVBdm9CLEVBQUEsU0FBQUQsR0FxS0EsT0FwSkFBLEVBQUEwb0IsU0FBQSxXQUNBLElBQUF4bEIsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLFNBQ0EsV0FDQTFELEVBQUEwb0IsVUFDQTFvQixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQUNBQSxLQUFBeVEsY0FBQSxLQUtBelEsS0FBQXFvQixLQUFBLElBQUF6b0IsRUFBQXdvQixJQU1BcG9CLEtBQUF1b0IsUUFBQXZvQixLQUFBeUYsUUFBQXlnQixxQkFDQWxtQixLQUFBdW9CLFFBQUF0YSxLQUFBLFVBQ0FqTyxLQUFBdW9CLFFBQUFwUCxVQUFBeGEsTUFBQSxFQUNBcUIsS0FBQXVvQixRQUFBM0MsRUFBQWpuQixPQUFBLElBS0FxQixLQUFBd29CLGlCQUFBLElBQUE1b0IsRUFBQTZTLFdBS0F6UyxLQUFBeW9CLEtBQUEsSUFBQTdvQixFQUFBa2xCLFNBS0E5a0IsS0FBQWlvQixPQUFBLElBQUFyb0IsRUFBQStuQixNQUFBM25CLEtBQUEyZSxXQU1BM2UsS0FBQTJrQixNQUFBLElBQUEva0IsRUFBQThrQixTQUFBLEtBS0Exa0IsS0FBQTBvQixRQUFBNWxCLEVBQUF1ZCxPQUtBcmdCLEtBQUEyb0IsU0FBQTdsQixFQUFBMGQsUUFFQXhnQixLQUFBcVEsTUFBQWMsTUFBQW5SLEtBQUFxb0IsS0FBQXJvQixLQUFBdW9CLFFBQUF2b0IsS0FBQTRRLFFBRUE1USxLQUFBcW9CLEtBQUE3a0IsUUFBQXhELEtBQUF5b0IsS0FBQSxLQUNBem9CLEtBQUF1b0IsUUFBQXBYLE1BQUFuUixLQUFBaW9CLE9BQUFqb0IsS0FBQXlvQixNQUVBem9CLEtBQUF5b0IsS0FBQXRYLE1BQUFuUixLQUFBMmtCLE1BQUEza0IsS0FBQXdvQixpQkFBQXhvQixLQUFBdW9CLFFBQUFwUCxXQUVBblosS0FBQTRvQixrQkFBQTVvQixLQUFBMG9CLFFBQUExb0IsS0FBQTJvQixXQUVBL29CLEVBQUE4RixPQUFBOUYsRUFBQTBvQixTQUFBMW9CLEVBQUFtUSxXQUtBblEsRUFBQTBvQixTQUFBOWxCLFVBQ0E2ZCxPQUFBLElBQ0FHLFFBQUEsSUFRQTVnQixFQUFBMG9CLFNBQUFocEIsVUFBQXNwQixrQkFBQSxTQUFBdkksRUFBQUcsR0FDQSxJQUFBcUksRUFBQTdvQixLQUFBMmUsVUFDQTBCLEVBQUF6Z0IsRUFBQXdaLEtBQUFpSCxHQUFBMU0sY0FDQTZNLEVBQUE1Z0IsRUFBQXdaLEtBQUFvSCxHQUFBN00sY0FDQTBNLEVBQUF6YixLQUFBOEssSUFBQTJRLEVBQUF3SSxHQUNBckksRUFBQTViLEtBQUE4SyxJQUFBOFEsRUFBQXFJLEdBQ0E3b0IsS0FBQXdvQixpQkFBQTFWLE9BQUEsU0FBQXJQLEdBQ0EsT0FBQUEsR0FBQSxFQUNBNGMsRUFFQUcsS0FVQXBpQixPQUFBQyxlQUFBdUIsRUFBQTBvQixTQUFBaHBCLFVBQUEsVUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBMG9CLFNBRUFob0IsSUFBQSxTQUFBMmYsR0FDQXJnQixLQUFBMG9CLFFBQUFySSxFQUNBcmdCLEtBQUE0b0Isa0JBQUE1b0IsS0FBQTBvQixRQUFBMW9CLEtBQUEyb0IsYUFTQXZxQixPQUFBQyxlQUFBdUIsRUFBQTBvQixTQUFBaHBCLFVBQUEsV0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBMm9CLFVBRUFqb0IsSUFBQSxTQUFBOGYsR0FDQXhnQixLQUFBMm9CLFNBQUFuSSxFQUNBeGdCLEtBQUE0b0Isa0JBQUE1b0IsS0FBQTBvQixRQUFBMW9CLEtBQUEyb0IsYUFRQS9vQixFQUFBMG9CLFNBQUFocEIsVUFBQWtFLFFBQUE1RCxFQUFBeVIsV0FBQS9SLFVBQUFrRSxRQUtBNUQsRUFBQTBvQixTQUFBaHBCLFVBQUFtQixRQUFBLFdBZUEsT0FkQWIsRUFBQW1RLFVBQUF6USxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBdW9CLFFBQUFuYSxhQUNBcE8sS0FBQXVvQixRQUFBLEtBQ0F2b0IsS0FBQXdvQixpQkFBQXBhLGFBQ0FwTyxLQUFBd29CLGlCQUFBLEtBQ0F4b0IsS0FBQWlvQixPQUFBeG5CLFVBQ0FULEtBQUFpb0IsT0FBQSxLQUNBam9CLEtBQUF5b0IsS0FBQXJhLGFBQ0FwTyxLQUFBeW9CLEtBQUEsS0FDQXpvQixLQUFBcW9CLEtBQUE1bkIsVUFDQVQsS0FBQXFvQixLQUFBLEtBQ0Fyb0IsS0FBQTJrQixNQUFBbGtCLFVBQ0FULEtBQUEya0IsTUFBQSxLQUNBM2tCLEtBQUFvUyxPQUFBLEtBQ0FwUyxNQUVBSixFQUFBMG9CLFdBRUF6b0IsRUFBQSxTQUFBRCxHQWdIQSxPQTFGQUEsRUFBQWtwQixlQUFBLFdBRUEsSUFBQWhtQixFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsU0FDQSxRQUNBLFVBQ0EsV0FDQTFELEVBQUF3Z0IsVUFDQXhnQixFQUFBd2dCLFNBQUF2aUIsS0FBQW1DLEtBQUE4QyxHQUNBQSxFQUFBbEQsRUFBQW1ELFdBQUFELEVBQUFsRCxFQUFBa3BCLGVBQUF0bUIsVUFNQXhDLEtBQUFpZ0IsS0FBQWpnQixLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQW9nQixJQUFBbGQsRUFBQTRrQixVQU1BMW5CLEtBQUFzbkIsT0FBQXRuQixLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQXFuQixNQUFBbmtCLEVBQUFvWixJQUFBcFosRUFBQTRNLEtBQ0ExUCxLQUFBMmdCLEtBQUF4UCxNQUFBblIsS0FBQWlnQixLQUFBamdCLEtBQUFzbkIsU0FFQTFuQixFQUFBOEYsT0FBQTlGLEVBQUFrcEIsZUFBQWxwQixFQUFBd2dCLFVBS0F4Z0IsRUFBQWtwQixlQUFBdG1CLFVBQ0EwWixJQUFBLEVBQ0F4TSxJQUFBLEVBQ0FnWSxTQUFBLEdBU0F0cEIsT0FBQUMsZUFBQXVCLEVBQUFrcEIsZUFBQXhwQixVQUFBLE9BQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXNuQixPQUFBcEwsS0FFQXhiLElBQUEsU0FBQXdiLEdBQ0FsYyxLQUFBc25CLE9BQUFwTCxTQVVBOWQsT0FBQUMsZUFBQXVCLEVBQUFrcEIsZUFBQXhwQixVQUFBLE9BQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXNuQixPQUFBNVgsS0FFQWhQLElBQUEsU0FBQWdQLEdBQ0ExUCxLQUFBc25CLE9BQUE1WCxTQVNBdFIsT0FBQUMsZUFBQXVCLEVBQUFrcEIsZUFBQXhwQixVQUFBLFlBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQWlnQixLQUFBdGhCLE9BRUErQixJQUFBLFNBQUEwZCxHQUNBcGUsS0FBQWlnQixLQUFBdGhCLE1BQUF5ZixLQU9BeGUsRUFBQWtwQixlQUFBeHBCLFVBQUFtQixRQUFBLFdBTUEsT0FMQWIsRUFBQXdnQixTQUFBOWdCLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFzbkIsT0FBQTdtQixVQUNBVCxLQUFBc25CLE9BQUEsS0FDQXRuQixLQUFBaWdCLEtBQUF4ZixVQUNBVCxLQUFBaWdCLEtBQUEsS0FDQWpnQixNQUVBSixFQUFBa3BCLGlCQUVBanBCLEVBQUEsU0FBQUQsR0F5R0EsT0FyRkFBLEVBQUFtcEIsa0JBQUEsV0FDQSxJQUFBam1CLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxTQUNBLFFBQ0EsVUFDQSxXQUNBMUQsRUFBQXdnQixVQUNBeGdCLEVBQUFrcEIsZUFBQWpyQixLQUFBbUMsS0FBQThDLEdBRUFBLEVBQUFsRCxFQUFBbUQsV0FBQUQsRUFBQWxELEVBQUFtcEIsa0JBQUF2bUIsVUFNQXhDLEtBQUFncEIsU0FBQWxtQixFQUFBbW1CLFFBRUFqcEIsS0FBQWtwQixjQUFBcG1CLEVBQUFvbUIsY0FDQWxwQixLQUFBaXBCLFFBQUFubUIsRUFBQW1tQixTQUVBcnBCLEVBQUE4RixPQUFBOUYsRUFBQW1wQixrQkFBQW5wQixFQUFBd2dCLFVBS0F4Z0IsRUFBQW1wQixrQkFBQXZtQixVQUNBMG1CLGNBQUEsSUFDQUQsUUFBQSxFQUNBdkIsU0FBQSxHQVNBdHBCLE9BQUFDLGVBQUF1QixFQUFBbXBCLGtCQUFBenBCLFVBQUEsaUJBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXNuQixPQUFBcEwsS0FFQXhiLElBQUEsU0FBQXdiLEdBQ0FsYyxLQUFBc25CLE9BQUFwTCxJQUFBbGMsS0FBQTJULFlBQUF1SSxHQUVBbGMsS0FBQWlwQixRQUFBanBCLEtBQUFncEIsWUFVQTVxQixPQUFBQyxlQUFBdUIsRUFBQW1wQixrQkFBQXpwQixVQUFBLFdBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQWdwQixVQUVBdG9CLElBQUEsU0FBQXVvQixHQUNBanBCLEtBQUFncEIsU0FBQUMsRUFDQWpwQixLQUFBc25CLE9BQUE1WCxJQUFBMVAsS0FBQWtwQixjQUFBdGtCLEtBQUFLLElBQUEsRUFBQWdrQixNQVNBN3FCLE9BQUFDLGVBQUF1QixFQUFBbXBCLGtCQUFBenBCLFVBQUEsWUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBaWdCLEtBQUF0aEIsT0FFQStCLElBQUEsU0FBQTBkLEdBQ0FwZSxLQUFBaWdCLEtBQUF0aEIsTUFBQXlmLEtBT0F4ZSxFQUFBbXBCLGtCQUFBenBCLFVBQUFtQixRQUFBLFdBRUEsT0FEQWIsRUFBQWtwQixlQUFBeHBCLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLE1BRUFKLEVBQUFtcEIsb0JBRUFscEIsRUFBQSxTQUFBRCxHQWtEQSxPQXBDQUEsRUFBQXVwQixnQkFBQSxXQUNBdnBCLEVBQUF5UixXQUFBeFQsS0FBQW1DLE1BS0FBLEtBQUFvcEIsUUFBQXBwQixLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQTZTLFdBQUEsU0FBQWhQLEdBQ0EsT0FBQUEsR0FBQSxFQUNBLEVBRUEsR0FFVSxLQU9WekQsS0FBQXNuQixPQUFBdG5CLEtBQUFxUSxNQUFBLElBQUF6USxFQUFBOGtCLFNBQUEsS0FFQTFrQixLQUFBc25CLE9BQUE5akIsUUFBQXhELEtBQUFvcEIsVUFFQXhwQixFQUFBOEYsT0FBQTlGLEVBQUF1cEIsZ0JBQUF2cEIsRUFBQXlSLFlBS0F6UixFQUFBdXBCLGdCQUFBN3BCLFVBQUFtQixRQUFBLFdBTUEsT0FMQWIsRUFBQXlSLFdBQUEvUixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBc25CLE9BQUE3bUIsVUFDQVQsS0FBQXNuQixPQUFBLEtBQ0F0bkIsS0FBQW9wQixRQUFBM29CLFVBQ0FULEtBQUFvcEIsUUFBQSxLQUNBcHBCLE1BRUFKLEVBQUF1cEIsa0JBRUF0cEIsRUFBQSxTQUFBRCxHQTRDQSxPQTlCQUEsRUFBQXlwQixZQUFBLFNBQUExcUIsR0FDQWlCLEVBQUFnQyxPQUFBL0QsS0FBQW1DLE1BQ0FBLEtBQUF5USxjQUFBLEtBTUF6USxLQUFBeVIsT0FBQXpSLEtBQUFxUSxNQUFBLE9BQUF6USxFQUFBa2xCLFNBQUFubUIsR0FDQXFCLEtBQUFxUSxNQUFBLEdBQUFyUSxLQUFBeVIsT0FBQXBCLE1BQUEsR0FNQXJRLEtBQUFzcEIsS0FBQXRwQixLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQXVwQixnQkFFQW5wQixLQUFBeVIsT0FBQWpPLFFBQUF4RCxLQUFBc3BCLE9BRUExcEIsRUFBQThGLE9BQUE5RixFQUFBeXBCLFlBQUF6cEIsRUFBQWdDLFFBS0FoQyxFQUFBeXBCLFlBQUEvcEIsVUFBQW1CLFFBQUEsV0FJQSxPQUhBYixFQUFBZ0MsT0FBQXRDLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFzcEIsS0FBQTdvQixVQUNBVCxLQUFBc3BCLEtBQUEsS0FDQXRwQixNQUVBSixFQUFBeXBCLGNBRUF4cEIsRUFBQSxTQUFBRCxHQTJHQSxPQXhGQUEsRUFBQTJwQixLQUFBLFdBQ0EsSUFBQXptQixFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsWUFDQSxTQUNBLFdBQ0ExRCxFQUFBMnBCLE1BQ0EzcEIsRUFBQW1RLFVBQUFsUyxLQUFBbUMsTUFDQUEsS0FBQXlRLGNBQUEsS0FLQXpRLEtBQUF3cEIsVUFBQSxJQUFBNXBCLEVBQUEwb0IsU0FBQXhsQixFQUFBdWQsT0FBQXZkLEVBQUEwZCxTQUtBeGdCLEtBQUF5cEIsSUFBQSxJQUFBN3BCLEVBQUF5cEIsWUFBQXpwQixFQUFBbUYsU0FBQWpDLEVBQUF1aEIsWUFFQXJrQixLQUFBcVEsTUFBQTdNLFFBQUF4RCxLQUFBNFEsUUFFQTVRLEtBQUFxUSxNQUFBYyxNQUFBblIsS0FBQXlwQixJQUFBenBCLEtBQUF3cEIsVUFBQXhwQixLQUFBNFEsT0FBQXpMLE9BRUF2RixFQUFBOEYsT0FBQTlGLEVBQUEycEIsS0FBQTNwQixFQUFBbVEsV0FNQW5RLEVBQUEycEIsS0FBQS9tQixVQUNBNmQsT0FBQSxHQUNBRyxRQUFBLEdBQ0E2RCxXQUFBLElBUUFqbUIsT0FBQUMsZUFBQXVCLEVBQUEycEIsS0FBQWpxQixVQUFBLGFBQ0FmLElBQUEsV0FDQSxPQUFBcUIsRUFBQXNGLFNBQUFsRixLQUFBeXBCLElBQUE5cUIsUUFFQStCLElBQUEsU0FBQWdwQixHQUNBMXBCLEtBQUF5cEIsSUFBQTlxQixNQUFBaUIsRUFBQW1GLFNBQUEya0IsTUFTQXRyQixPQUFBQyxlQUFBdUIsRUFBQTJwQixLQUFBanFCLFVBQUEsVUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBd3BCLFVBQUFuSixRQUVBM2YsSUFBQSxTQUFBaXBCLEdBQ0EzcEIsS0FBQXdwQixVQUFBbkosT0FBQXNKLEtBU0F2ckIsT0FBQUMsZUFBQXVCLEVBQUEycEIsS0FBQWpxQixVQUFBLFdBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXdwQixVQUFBaEosU0FFQTlmLElBQUEsU0FBQWtwQixHQUNBNXBCLEtBQUF3cEIsVUFBQWhKLFFBQUFvSixLQU9BaHFCLEVBQUEycEIsS0FBQWpxQixVQUFBbUIsUUFBQSxXQU1BLE9BTEFiLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQXdwQixVQUFBL29CLFVBQ0FULEtBQUF5cEIsSUFBQWhwQixVQUNBVCxLQUFBd3BCLFVBQUEsS0FDQXhwQixLQUFBeXBCLElBQUEsS0FDQXpwQixNQUVBSixFQUFBMnBCLE9BRUExcEIsRUFBQSxTQUFBRCxHQXFDQSxTQUFBaXFCLEVBQUE5VixHQUNBLGdCQUFBcFYsRUFBQXlKLEdBQ0FBLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0EyTCxFQUFBek0sTUFBQXRILEtBQUFzRCxXQUNBLElBQUEwRCxFQUFBaEgsS0FBQStHLFFBQUF4SSxJQUFBNkosR0FDQWMsRUFBQWxKLEtBQUErRyxRQUFBbUMsY0FBQWxDLEdBQ0E4aUIsRUFBQTlwQixLQUFBK3BCLG9CQUFBN2dCLEVBQUFkLEdBRUEsT0FEQXBCLEVBQUF3TyxNQUFBNVEsS0FBQThLLElBQUFvYSxFQUFBLEdBQ0E5cEIsTUFnS0EsT0FqTUFKLEVBQUFvcUIsV0FBQSxTQUFBcnJCLEdBQ0FBLEVBQUFpQixFQUFBbUQsV0FBQXBFLEVBQUEsR0FDQWlCLEVBQUFnQyxPQUFBL0QsS0FBQW1DLE1BQ0FtVCxNQUFBdlQsRUFBQTZPLEtBQUErTCxNQUNBN2IsVUFHQXFCLEtBQUErRyxRQUFBa0IsT0FBQUMsSUFFQWxJLEtBQUEwUixzQkFBQSxHQUVBMVIsS0FBQStHLFFBQUFvQixLQUNBOEYsS0FBQXJPLEVBQUFpQyxNQUFBdWEsZUFBQUksU0FDQXBVLEtBQUEsRUFDQXpKLFdBR0FpQixFQUFBOEYsT0FBQTlGLEVBQUFvcUIsV0FBQXBxQixFQUFBZ0MsUUFtQkFoQyxFQUFBb3FCLFdBQUExcUIsVUFBQXljLGVBQUE4TixFQUFBanFCLEVBQUFnQyxPQUFBdEMsVUFBQXljLGdCQUNBbmMsRUFBQW9xQixXQUFBMXFCLFVBQUE4ZCx3QkFBQXlNLEVBQUFqcUIsRUFBQWdDLE9BQUF0QyxVQUFBOGQseUJBU0F4ZCxFQUFBb3FCLFdBQUExcUIsVUFBQXFlLGdCQUFBLFNBQUFoZixFQUFBeUosRUFBQWtGLEdBRUFsRixFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQWlkLGFBQUE3VSxHQUNBekosRUFBQXFCLEtBQUE4YixXQUFBbmQsR0FJQSxJQUZBLElBQUFzckIsRUFBQWpxQixLQUFBK0csUUFBQXhJLElBQUE2SixHQUNBOGhCLEVBQUF0bEIsS0FBQW9TLE1BQUFwUyxLQUFBOEssSUFBQSxFQUFBcEMsRUFBQSxJQUNBNVAsRUFBQSxFQUF3QkEsR0FBQXdzQixFQUFleHNCLElBQUEsQ0FDdkMsSUFBQXFnQixFQUFBelEsRUFBQTVQLEVBQUEwSyxFQUNBK2hCLEVBQUFucUIsS0FBQThjLHFCQUFBbU4sRUFBQTdoQixLQUFBNmhCLEVBQUF0ckIsUUFBQTJPLEVBQUF5USxHQUNBL2QsS0FBQW9kLHdCQUFBcGQsS0FBQTJiLFNBQUF3TyxHQUFBcE0sR0FFQSxPQUFBL2QsTUFTQUosRUFBQW9xQixXQUFBMXFCLFVBQUErZCw2QkFBQSxTQUFBMWUsRUFBQXlKLEdBRUFBLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0F6SixFQUFBcUIsS0FBQThiLFdBQUFuZCxHQUVBLElBQUFzckIsRUFBQWpxQixLQUFBK0csUUFBQXhJLElBQUE2SixHQUNBLE9BQUE2aEIsSUFDQUEsR0FDQXRyQixNQUFBcUIsS0FBQTZiLGNBQ0F6VCxLQUFBLElBTUEsSUFGQSxJQUFBOGhCLEVBQUF0bEIsS0FBQW9TLE1BQUFwUyxLQUFBOEssSUFBQSxJQUFBdEgsRUFBQTZoQixFQUFBN2hCLE1BQUEsSUFDQWdpQixHQUFBaGlCLEVBQUE2aEIsRUFBQTdoQixNQUFBOGhCLEVBQ0F4c0IsRUFBQSxFQUF3QkEsR0FBQXdzQixFQUFleHNCLElBQUEsQ0FDdkMsSUFBQXFnQixFQUFBcU0sRUFBQTFzQixFQUFBdXNCLEVBQUE3aEIsS0FDQStoQixFQUFBbnFCLEtBQUFnZCx3QkFBQWlOLEVBQUE3aEIsS0FBQTZoQixFQUFBdHJCLE1BQUF5SixFQUFBekosRUFBQW9mLEdBQ0EvZCxLQUFBb2Qsd0JBQUFwZCxLQUFBMmIsU0FBQXdPLEdBQUFwTSxHQUVBLE9BQUEvZCxNQVVBSixFQUFBb3FCLFdBQUExcUIsVUFBQXlxQixvQkFBQSxTQUFBL2lCLEVBQUFvQixHQUNBLFVBQUFwQixFQUNBQSxHQUNBd08sTUFBQSxFQUNBcE4sS0FBQSxRQUVVLEdBQUF4SSxFQUFBK0IsUUFBQXFGLEVBQUF3TyxPQUFBLENBQ1YsSUFBQXRNLEVBQUFsSixLQUFBK0csUUFBQW1DLGNBQUFsQyxHQUNBQSxFQUFBd08sTUFBQXhWLEtBQUErcEIsb0JBQUE3Z0IsRUFBQWxDLEVBQUFvQixNQUVBLElBQUFpaUIsRUFBQXJxQixLQUFBNGIsZUFBQTVVLEVBQUFvQixNQUNBa2lCLEVBQUF0cUIsS0FBQTRiLGVBQUF4VCxHQUtBLE9BSEFwSSxLQUFBK0csUUFBQXhJLElBQUE2SixhQUFBcEksS0FBQStHLFFBQUF4SSxJQUFBNkosR0FBQTZGLE9BQUFyTyxFQUFBaUMsTUFBQXVhLGVBQUFJLFdBQ0E4TixFQUFBdHFCLEtBQUE0YixlQUFBeFQsRUFBQXBJLEtBQUF1cUIsYUFFQSxJQUFBbmlCLEVBQUFwQixFQUFBb0IsT0FBQWlpQixFQUFBQyxHQUFBdGpCLEVBQUF3TyxPQVNBNVYsRUFBQW9xQixXQUFBMXFCLFVBQUFrckIsZUFBQSxTQUFBcGlCLEdBQ0FBLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0EsSUFBQXBCLEVBQUFoSCxLQUFBK0csUUFBQXhJLElBQUE2SixHQUNBLE9BQUF4RCxLQUFBOEssSUFBQTFQLEtBQUErcEIsb0JBQUEvaUIsRUFBQW9CLEdBQUEsSUFRQXhJLEVBQUFvcUIsV0FBQTFxQixVQUFBbXJCLG1CQUFBLFNBQUFqVixFQUFBcE4sR0FDQUEsRUFBQXBJLEtBQUF5VCxVQUFBckwsR0FDQSxJQUFBc2lCLEVBQUExcUIsS0FBQXdxQixlQUFBcGlCLEdBQ0EsT0FBQXBJLEtBQUEycUIsY0FBQUQsRUFBQWxWLEdBQUFwTixHQU9BeEksRUFBQW9xQixXQUFBMXFCLFVBQUFxckIsY0FBQSxTQUFBQyxHQUNBLElBQUFuTyxFQUFBemMsS0FBQStHLFFBQUF4SSxJQUFBcXNCLEVBQUEsU0FDQTVoQixFQUFBaEosS0FBQStHLFFBQUE4QixTQUFBK2hCLEVBQUEsU0FDQSxHQUFBbk8sS0FBQWpILFFBQUFvVixFQUNBLE9BQUFuTyxFQUFBclUsS0FDVSxHQUFBcVUsR0FBQXpULEtBQUFpRixPQUFBck8sRUFBQWlDLE1BQUF1YSxlQUFBQyxRQUFBSSxFQUFBOWQsUUFBQXFLLEVBQUFySyxNQUFBLENBQ1YsSUFBQTByQixFQUFBcnFCLEtBQUE0YixlQUFBYSxFQUFBclUsTUFFQXlpQixHQURBN3FCLEtBQUE0YixlQUFBNVMsRUFBQVosTUFDQWlpQixJQUFBcmhCLEVBQUFaLEtBQUFxVSxFQUFBclUsTUFDQXFaLEVBQUE3YyxLQUFBa21CLEtBQUFsbUIsS0FBQUssSUFBQW9sQixFQUFBLEtBQUFRLEdBQUFwTyxFQUFBakgsTUFBQW9WLElBQ0FHLElBQUFWLEVBQUE1SSxHQUFBb0osRUFFQSxPQUFBRSxFQUFBLEVBQUFBLElBREFWLEVBQUE1SSxHQUFBb0osR0FDQXBPLEVBQUFyVSxLQUNVLE9BQUFxVSxFQUNWLElBQUFBLEVBQUE5ZCxNQUNBdUosSUFFQXVVLEVBQUFyVSxNQUFBd2lCLEVBQUFuTyxFQUFBakgsT0FBQWlILEVBQUE5ZCxNQUdBaXNCLEVBQUE1cUIsS0FBQTZiLGVBVUFqYyxFQUFBb3FCLFdBQUExcUIsVUFBQTByQixZQUFBLFNBQUF4VixFQUFBeVYsR0FFQSxPQURBQSxFQUFBanJCLEtBQUF5VCxVQUFBd1gsR0FDQSxJQUFBcnJCLEVBQUF3WixLQUFBcFosS0FBQXlxQixtQkFBQWpWLEVBQUF5VixLQVVBcnJCLEVBQUFvcUIsV0FBQTFxQixVQUFBNHJCLFlBQUEsU0FBQXJOLEVBQUFvTixHQUNBQSxFQUFBanJCLEtBQUF5VCxVQUFBd1gsR0FDQXBOLEVBQUE3ZCxLQUFBeVQsVUFBQW9LLEdBQ0EsSUFBQXNOLEVBQUFuckIsS0FBQXdxQixlQUFBUyxHQUNBRyxFQUFBcHJCLEtBQUF3cUIsZUFBQVMsRUFBQXBOLEdBQ0EsV0FBQWplLEVBQUE0YSxNQUFBNFEsRUFBQUQsSUFFQXZyQixFQUFBb3FCLGFBRUFucUIsRUFBQSxTQUFBRCxHQW1GQSxPQXpFQUEsRUFBQXlyQixjQUFBLFNBQUFDLEdBQ0ExckIsRUFBQW1JLFNBQUFsSyxLQUFBbUMsTUFNQUEsS0FBQXVyQixTQUFBRCxHQUVBMXJCLEVBQUE4RixPQUFBOUYsRUFBQXlyQixjQUFBenJCLEVBQUFtSSxVQU9BbkksRUFBQXlyQixjQUFBL3JCLFVBQUFzYyxlQUFBLFNBQUF4VCxHQUNBLElBQUFwQixFQUFBaEgsS0FBQXpCLElBQUE2SixHQUNBLGNBQUFwQixFQUNBQSxFQUFBZ0csTUFFQWhOLEtBQUF1ckIsVUFTQTNyQixFQUFBeXJCLGNBQUEvckIsVUFBQWtzQixlQUFBLFNBQUF4ZSxFQUFBNUUsR0FPQSxPQUpBcEksS0FBQW1JLEtBQ0E2RSxRQUNBNUUsU0FFQXBJLE1BUUFKLEVBQUF5ckIsY0FBQS9yQixVQUFBbXNCLGFBQUEsU0FBQXplLEVBQUE1RSxHQUNBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUVBLElBREEsSUFDQTFLLEVBREFzQyxLQUFBdUksUUFBQUgsR0FDNEIxSyxHQUFBLEVBQVFBLElBQUEsQ0FDcEMsSUFBQXNKLEVBQUFoSCxLQUFBZ0ksVUFBQXRLLEdBQ0EsR0FBQXNKLEVBQUFnRyxVQUNBLE9BQUFoRyxJQVVBcEgsRUFBQXlyQixjQUFBL3JCLFVBQUFvc0IsYUFBQSxTQUFBMWUsRUFBQTVFLEdBQ0FBLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0EsSUFBQUUsRUFBQXRJLEtBQUF1SSxRQUFBSCxHQUNBLFFBQUFFLEVBQ0EsUUFBQTVLLEVBQUE0SyxFQUFnQzVLLEVBQUFzQyxLQUFBZ0ksVUFBQTFHLE9BQTJCNUQsSUFBQSxDQUMzRCxJQUFBc0osRUFBQWhILEtBQUFnSSxVQUFBdEssR0FDQSxHQUFBc0osRUFBQWdHLFVBQ0EsT0FBQWhHLElBS0FwSCxFQUFBeXJCLGdCQUVBeHJCLEVBQUEsU0FBQUQsR0FxVUEsT0EzVEFBLEVBQUErckIsV0FBQSxXQUNBLElBQUE3b0IsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUFBLGFBQUExRCxFQUFBK3JCLFlBTUEzckIsS0FBQW1aLFVBQUEsSUFBQXZaLEVBQUFvcUIsV0FBQWxuQixFQUFBcVcsVUFBQXZaLEVBQUE2TyxLQUFBc0gsV0FDQS9WLEtBQUFrRSxVQUFBLGFBTUFsRSxLQUFBNHJCLE9BQUEsSUFBQWhzQixFQUFBeXJCLGNBQUF6ckIsRUFBQXlFLE1BQUFFLFNBQ0F2RSxLQUFBNHJCLE9BQUFKLGVBQUE1ckIsRUFBQXlFLE1BQUFFLFFBQUEsR0FNQXZFLEtBQUE2ckIsWUFBQSxJQUFBanNCLEVBQUFtSSxTQUVBL0gsS0FBQThyQixlQUFBLE1BRUFsc0IsRUFBQThGLE9BQUE5RixFQUFBK3JCLFlBTUEvckIsRUFBQStyQixXQUFBbnBCLFVBQWlDMlcsVUFBQSxHQVFqQy9hLE9BQUFDLGVBQUF1QixFQUFBK3JCLFdBQUFyc0IsVUFBQSxTQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUE0ckIsT0FBQWhRLGVBQUE1YixLQUFBd0YsVUFVQTVGLEVBQUErckIsV0FBQXJzQixVQUFBcU8sTUFBQSxTQUFBdkYsRUFBQWdYLEdBUUEsT0FQQWhYLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0FwSSxLQUFBNHJCLE9BQUFoUSxlQUFBeFQsS0FBQXhJLEVBQUF5RSxNQUFBQyxVQUNBdEUsS0FBQTRyQixPQUFBSixlQUFBNXJCLEVBQUF5RSxNQUFBQyxRQUFBOEQsR0FDQXhJLEVBQUEwQyxVQUFBOGMsSUFDQXBmLEtBQUE4ckIsZUFBQTFNLEVBQUFoWCxJQUdBcEksTUFTQUosRUFBQStyQixXQUFBcnNCLFVBQUErZixLQUFBLFNBQUFqWCxHQUdBLEdBRkFBLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBRUFwSSxLQUFBNHJCLE9BQUFoUSxlQUFBeFQsS0FBQXhJLEVBQUF5RSxNQUFBRSxRQUFBLENBQ0EsSUFBQXlDLEVBQUFoSCxLQUFBNHJCLE9BQUFydEIsSUFBQTZKLEdBQ0FwQixFQUFBb0IsS0FBQSxJQUNBcEksS0FBQTZyQixZQUFBOWlCLE9BQUEvQixFQUFBb0IsTUFDQXBJLEtBQUE0ckIsT0FBQTdpQixPQUFBL0IsRUFBQW9CLE9BTUEsT0FIQXBJLEtBQUE0ckIsT0FBQTdpQixPQUFBWCxHQUNBcEksS0FBQTRyQixPQUFBSixlQUFBNXJCLEVBQUF5RSxNQUFBRSxRQUFBNkQsR0FDQXBJLEtBQUE4ckIsZUFBQSxFQUFBMWpCLEdBQ0FwSSxNQU9BSixFQUFBK3JCLFdBQUFyc0IsVUFBQXlzQixNQUFBLFNBQUEzakIsR0FLQSxPQUpBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQTRyQixPQUFBaFEsZUFBQXhULEtBQUF4SSxFQUFBeUUsTUFBQUMsU0FDQXRFLEtBQUE0ckIsT0FBQUosZUFBQTVyQixFQUFBeUUsTUFBQUcsT0FBQTRELEdBRUFwSSxNQU9BSixFQUFBK3JCLFdBQUFyc0IsVUFBQXlKLE9BQUEsU0FBQVgsR0FJQSxPQUhBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQTRyQixPQUFBN2lCLE9BQUFYLEdBQ0FwSSxLQUFBNnJCLFlBQUE5aUIsT0FBQVgsR0FDQXBJLE1BT0FKLEVBQUErckIsV0FBQXJzQixVQUFBa3JCLGVBQUEsU0FBQXBpQixHQUNBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBLElBQUE0akIsRUFBQWhzQixLQUFBNHJCLE9BQUFILGFBQUE3ckIsRUFBQXlFLE1BQUFFLFFBQUE2RCxHQUVBNmpCLEdBQ0FqZixNQUFBcE4sRUFBQXlFLE1BQUFHLE9BQ0E0RCxRQUVBcEksS0FBQTRyQixPQUFBempCLElBQUE4akIsR0FFQSxJQUFBQyxFQUFBRixFQUNBRyxFQUFBLEVBa0JBLE9BaEJBbnNCLEtBQUE0ckIsT0FBQTloQixlQUFBa2lCLEVBQUE1akIsT0FBQXBJLEtBQUF1cUIsV0FBQSxTQUFBNWYsR0FDQSxJQUFBeWhCLEVBQUFGLEVBQUE5akIsS0FFQWlrQixFQUFBcnNCLEtBQUE2ckIsWUFBQXR0QixJQUFBb00sRUFBQXZDLE1BQ0Fpa0IsRUFBQWprQixNQUFBOGpCLEVBQUE5akIsT0FDQStqQixFQUFBRSxFQUFBN1csTUFDQTRXLEVBQUFDLEVBQUFqa0IsTUFFQThqQixFQUFBbGYsUUFBQXBOLEVBQUF5RSxNQUFBQyxTQUFBcUcsRUFBQXFDLFFBQUFwTixFQUFBeUUsTUFBQUMsVUFDQTZuQixHQUFBbnNCLEtBQUFtWixVQUFBcVIsZUFBQTdmLEVBQUF2QyxNQUFBcEksS0FBQW1aLFVBQUFxUixlQUFBNEIsSUFFQUYsRUFBQXZoQixHQUNVekwsS0FBQWMsT0FFVkEsS0FBQTRyQixPQUFBbmpCLE9BQUF3akIsR0FFQUUsR0FTQS90QixPQUFBQyxlQUFBdUIsRUFBQStyQixXQUFBcnNCLFVBQUEsU0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBd3FCLGVBQUF4cUIsS0FBQXdGLFFBRUE5RSxJQUFBLFNBQUE5QixHQUNBb0IsS0FBQThyQixlQUFBbHRCLEVBQUFvQixLQUFBd0YsVUFVQXBILE9BQUFDLGVBQUF1QixFQUFBK3JCLFdBQUFyc0IsVUFBQSxXQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFzc0IsaUJBQUF0c0IsS0FBQXdGLFFBRUE5RSxJQUFBLFNBQUFqQixHQUNBLElBQUErRixFQUFBeEYsS0FBQXdGLE1BQ0FnUSxFQUFBeFYsS0FBQW1aLFVBQUErUixZQUFBenJCLEVBQUErRixHQUNBeEYsS0FBQThyQixlQUFBdFcsRUFBQWhRLE1BUUE1RixFQUFBK3JCLFdBQUFyc0IsVUFBQWd0QixpQkFBQSxTQUFBbGtCLEdBQ0FBLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0EsSUFBQTRqQixFQUFBaHNCLEtBQUE0ckIsT0FBQUgsYUFBQTdyQixFQUFBeUUsTUFBQUUsUUFBQTZELEdBRUE2akIsR0FDQWpmLE1BQUFwTixFQUFBeUUsTUFBQUcsT0FDQTRELFFBRUFwSSxLQUFBNHJCLE9BQUF6akIsSUFBQThqQixHQUVBLElBQUFDLEVBQUFGLEVBQ0FPLEVBQUEsRUFrQkEsT0FoQkF2c0IsS0FBQTRyQixPQUFBOWhCLGVBQUFraUIsRUFBQTVqQixPQUFBcEksS0FBQXVxQixXQUFBLFNBQUE1ZixHQUNBLElBQUF5aEIsRUFBQUYsRUFBQTlqQixLQUVBaWtCLEVBQUFyc0IsS0FBQTZyQixZQUFBdHRCLElBQUFvTSxFQUFBdkMsTUFDQWlrQixFQUFBamtCLE1BQUE4akIsRUFBQTlqQixPQUNBbWtCLEVBQUFGLEVBQUE5VyxRQUNBNlcsRUFBQUMsRUFBQWprQixNQUVBOGpCLEVBQUFsZixRQUFBcE4sRUFBQXlFLE1BQUFDLFNBQUFxRyxFQUFBcUMsUUFBQXBOLEVBQUF5RSxNQUFBQyxVQUNBaW9CLEdBQUE1aEIsRUFBQXZDLEtBQUFna0IsR0FFQUYsRUFBQXZoQixHQUNVekwsS0FBQWMsT0FFVkEsS0FBQTRyQixPQUFBbmpCLE9BQUF3akIsR0FFQU0sR0FRQTNzQixFQUFBK3JCLFdBQUFyc0IsVUFBQXdzQixlQUFBLFNBQUF0VyxFQUFBcE4sR0FRQSxPQVBBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQTZyQixZQUFBOWlCLE9BQUFYLEdBQ0FwSSxLQUFBNnJCLFlBQUExakIsS0FDQUMsT0FDQW9OLFFBQ0FELFFBQUF2VixLQUFBbVosVUFBQXNSLG1CQUFBalYsRUFBQXBOLEtBRUFwSSxNQVVBSixFQUFBK3JCLFdBQUFyc0IsVUFBQWt0QixlQUFBLFNBQUFwa0IsR0FFQSxPQURBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQTRyQixPQUFBaFEsZUFBQXhULElBVUF4SSxFQUFBK3JCLFdBQUFyc0IsVUFBQXFyQixjQUFBLFNBQUFDLEVBQUFuTyxHQUNBQSxFQUFBN2MsRUFBQW1ELFdBQUEwWixFQUFBemMsS0FBQXdGLE9BQ0EsSUFBQTRaLEVBQUFwZixLQUFBNnJCLFlBQUF0dEIsSUFBQWtlLEdBQ0F6VixFQUFBaEgsS0FBQTRyQixPQUFBcnRCLElBQUFrZSxHQUNBMVMsRUFBQW5GLEtBQUE4SyxJQUFBMFAsRUFBQWhYLEtBQUFwQixFQUFBb0IsTUFDQXFrQixFQUFBenNCLEtBQUFtWixVQUFBcVIsZUFBQXpnQixHQUFBNmdCLEVBQUF4TCxFQUFBNUosTUFDQSxPQUFBeFYsS0FBQW1aLFVBQUF3UixjQUFBOEIsSUFVQTdzQixFQUFBK3JCLFdBQUFyc0IsVUFBQW90QixtQkFBQSxTQUFBM2lCLEVBQUFDLEVBQUEvQyxHQUVBLElBQUEwbEIsRUFBQTNzQixLQUFBNHJCLE9BQUFydEIsSUFBQXdMLEdBUUEsR0FQQS9KLEtBQUE0ckIsT0FBQTloQixlQUFBQyxFQUFBQyxFQUFBLFNBQUFoRCxHQUNBMmxCLEVBQUEzZixRQUFBcE4sRUFBQXlFLE1BQUFDLFNBQUEwQyxFQUFBZ0csUUFBQXBOLEVBQUF5RSxNQUFBQyxTQUNBdEUsS0FBQTBzQixtQkFBQTluQixLQUFBOEssSUFBQWlkLEVBQUF2a0IsS0FBQTJCLEdBQUEvQyxFQUFBb0IsS0FBQXBJLEtBQUF1cUIsV0FBQXRqQixHQUVBMGxCLEVBQUEzbEIsR0FDVTlILEtBQUFjLE9BQ1YrSixFQUFBbkYsS0FBQThLLElBQUFpZCxFQUFBdmtCLEtBQUEyQixHQUNBNGlCLEVBQUEzZixRQUFBcE4sRUFBQXlFLE1BQUFDLFNBQUF0RSxLQUFBNHJCLE9BQUEsQ0FFQSxJQUFBVCxFQUFBbnJCLEtBQUFtWixVQUFBcVIsZUFBQXpnQixHQUdBcVYsR0FEQStMLEVBREFuckIsS0FBQW1aLFVBQUFxUixlQUFBbUMsRUFBQXZrQixPQUVBLEVBQ0EsSUFBQWdYLElBQ0FBLEVBQUEsRUFBQUEsR0FJQSxJQUZBLElBQUF3TixFQUFBNXNCLEtBQUFtWixVQUFBd1IsY0FBQVEsRUFBQS9MLEdBQ0F0VCxFQUFBLEtBQ0E4Z0IsRUFBQTVpQixHQUFBaEssS0FBQTRyQixRQUFBLENBQ0EsSUFDQTNrQixFQUFBMmxCLEVBQUFob0IsS0FBQW9TLE1BQUFoWCxLQUFBd3FCLGVBQUFvQyxLQUNrQixNQUFBamlCLEdBQ2xCbUIsRUFBQW5CLEVBQ0EsTUFFQTNLLEtBQUE0ckIsU0FDQWdCLEdBQUE1c0IsS0FBQW1aLFVBQUFzUixtQkFBQSxFQUFBbUMsS0FJQSxHQUFBOWdCLEVBQ0EsTUFBQUEsRUFFQSxPQUFBOUwsTUFNQUosRUFBQStyQixXQUFBcnNCLFVBQUFtQixRQUFBLFdBU0EsT0FSQWIsRUFBQWlDLE1BQUF2QyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBNHJCLE9BQUFuckIsVUFDQVQsS0FBQTRyQixPQUFBLEtBQ0E1ckIsS0FBQTZyQixZQUFBcHJCLFVBQ0FULEtBQUE2ckIsWUFBQSxLQUNBN3JCLEtBQUFvRSxVQUFBLGFBQ0FwRSxLQUFBbVosVUFBQTFZLFVBQ0FULEtBQUFtWixVQUFBLEtBQ0FuWixNQUVBSixFQUFBK3JCLGFBRUE5ckIsRUFBQSxTQUFBRCxHQStRQSxPQTNQQUEsRUFBQWl0QixNQUFBLFdBQ0EsSUFBQS9wQixFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsV0FDQSxhQUNBMUQsRUFBQWl0QixPQUNBanRCLEVBQUFrSCxRQUFBakosS0FBQW1DLE1BS0FBLEtBQUFpSCxTQUFBbkUsRUFBQW1FLFNBTUFqSCxLQUFBOHNCLFVBQUEsRUFNQTlzQixLQUFBK3NCLFlBQUEsSUFBQW50QixFQUFBK3JCLFdBQUE3b0IsRUFBQXFXLFdBTUFuWixLQUFBZ3RCLFlBQUEsRUFNQWh0QixLQUFBbVosVUFBQW5aLEtBQUErc0IsWUFBQTVULFVBQ0FuWixLQUFBa0UsVUFBQSxhQU1BbEUsS0FBQTRyQixPQUFBLElBQUFoc0IsRUFBQXlyQixjQUFBenJCLEVBQUF5RSxNQUFBRSxTQUVBdkUsS0FBQTRyQixPQUFBSixlQUFBNXJCLEVBQUF5RSxNQUFBRSxRQUFBLEdBT0F2RSxLQUFBaXRCLFdBQUFqdEIsS0FBQWt0QixNQUFBaHVCLEtBQUFjLE1BRUFBLEtBQUF5RixRQUFBbUIsR0FBQSxPQUFBNUcsS0FBQWl0QixhQUVBcnRCLEVBQUE4RixPQUFBOUYsRUFBQWl0QixNQUFBanRCLEVBQUFrSCxTQU1BbEgsRUFBQWl0QixNQUFBcnFCLFVBQ0F5RSxTQUFBckgsRUFBQXFFLEtBQ0FrVixVQUFBLEdBU0EvYSxPQUFBQyxlQUFBdUIsRUFBQWl0QixNQUFBdnRCLFVBQUEsU0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBNHJCLE9BQUFoUSxlQUFBNWIsS0FBQXdGLFVBVUE1RixFQUFBaXRCLE1BQUF2dEIsVUFBQXFPLE1BQUEsU0FBQXZGLEVBQUFnWCxHQVNBLE9BUkFoWCxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQTRyQixPQUFBaFEsZUFBQXhULEtBQUF4SSxFQUFBeUUsTUFBQUMsVUFDQXRFLEtBQUE0ckIsT0FBQUosZUFBQTVyQixFQUFBeUUsTUFBQUMsUUFBQThELEdBQ0FwSSxLQUFBK3NCLFlBQUFwZixNQUFBdkYsRUFBQWdYLEdBQ0FoWCxFQUFBcEksS0FBQWd0QixhQUNBaHRCLEtBQUErRixLQUFBLFFBQUFxQyxFQUFBZ1gsSUFHQXBmLE1BU0FKLEVBQUFpdEIsTUFBQXZ0QixVQUFBK2YsS0FBQSxTQUFBalgsR0FRQSxPQVBBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQTRyQixPQUFBN2lCLE9BQUFYLEdBQ0FwSSxLQUFBNHJCLE9BQUFKLGVBQUE1ckIsRUFBQXlFLE1BQUFFLFFBQUE2RCxHQUNBcEksS0FBQStzQixZQUFBMU4sS0FBQWpYLEdBQ0FBLEVBQUFwSSxLQUFBZ3RCLGFBQ0FodEIsS0FBQStGLEtBQUEsT0FBQXFDLEdBRUFwSSxNQU9BSixFQUFBaXRCLE1BQUF2dEIsVUFBQXlzQixNQUFBLFNBQUEzakIsR0FTQSxPQVJBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQTRyQixPQUFBaFEsZUFBQXhULEtBQUF4SSxFQUFBeUUsTUFBQUMsVUFDQXRFLEtBQUE0ckIsT0FBQUosZUFBQTVyQixFQUFBeUUsTUFBQUcsT0FBQTRELEdBQ0FwSSxLQUFBK3NCLFlBQUFoQixNQUFBM2pCLEdBQ0FBLEVBQUFwSSxLQUFBZ3RCLGFBQ0FodEIsS0FBQStGLEtBQUEsUUFBQXFDLElBR0FwSSxNQU9BNUIsT0FBQUMsZUFBQXVCLEVBQUFpdEIsTUFBQXZ0QixVQUFBLFNBQ0FmLElBQUEsV0FDQSxPQUFBcUcsS0FBQW1kLEtBQUEvaEIsS0FBQXdxQixlQUFBeHFCLEtBQUF3RixTQUVBOUUsSUFBQSxTQUFBOUIsR0FDQW9CLEtBQUErc0IsWUFBQXZYLE1BQUE1VyxLQVFBUixPQUFBQyxlQUFBdUIsRUFBQWl0QixNQUFBdnRCLFVBQUEsV0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBK3NCLFlBQUF4WCxTQUVBN1UsSUFBQSxTQUFBakIsR0FDQU8sS0FBQStzQixZQUFBeFgsUUFBQTlWLEtBUUFHLEVBQUFpdEIsTUFBQXZ0QixVQUFBZ3RCLGlCQUFBLFNBQUFsa0IsR0FDQSxPQUFBcEksS0FBQStzQixZQUFBVCxpQkFBQWxrQixJQVFBeEksRUFBQWl0QixNQUFBdnRCLFVBQUF3c0IsZUFBQSxTQUFBdFcsRUFBQXBOLEdBRUEsT0FEQXBJLEtBQUErc0IsWUFBQWpCLGVBQUF0VyxFQUFBcE4sR0FDQXBJLE1BT0FKLEVBQUFpdEIsTUFBQXZ0QixVQUFBa3JCLGVBQUEsU0FBQXBpQixHQUNBLE9BQUFwSSxLQUFBK3NCLFlBQUF2QyxlQUFBcGlCLElBUUF4SSxFQUFBaXRCLE1BQUF2dEIsVUFBQXN0QixhQUFBLFNBQUF4TixFQUFBNkwsR0FDQUEsRUFBQWpyQixLQUFBeVQsVUFBQXdYLEdBQ0EsSUFBQVAsRUFBQTFxQixLQUFBd3FCLGVBQUFTLEdBQ0EsT0FBQWpyQixLQUFBK3NCLFlBQUFwQyxjQUFBRCxFQUFBdEwsRUFBQTZMLElBTUFyckIsRUFBQWl0QixNQUFBdnRCLFVBQUE0dEIsTUFBQSxXQUNBLElBQUFuakIsRUFBQS9KLEtBQUFndEIsWUFDQWhqQixFQUFBaEssS0FBQXdGLE1BQ0F4RixLQUFBZ3RCLFlBQUFoakIsRUFDQUQsSUFBQUMsSUFFQWhLLEtBQUE0ckIsT0FBQTloQixlQUFBQyxFQUFBQyxFQUFBLFNBQUFXLEdBQ0EsT0FBQUEsRUFBQXFDLE9BQ0EsS0FBQXBOLEVBQUF5RSxNQUFBQyxRQUNBLElBQUE4YSxFQUFBcGYsS0FBQStzQixZQUFBdkMsZUFBQTdmLEVBQUF2QyxNQUNBcEksS0FBQStGLEtBQUEsUUFBQTRFLEVBQUF2QyxLQUFBZ1gsR0FDQSxNQUNBLEtBQUF4ZixFQUFBeUUsTUFBQUUsUUFDQSxJQUFBb0csRUFBQXZDLE1BQ0FwSSxLQUFBK0YsS0FBQSxPQUFBNEUsRUFBQXZDLE1BRUEsTUFDQSxLQUFBeEksRUFBQXlFLE1BQUFHLE9BQ0F4RSxLQUFBK0YsS0FBQSxRQUFBNEUsRUFBQXZDLFFBR2NsSixLQUFBYyxPQUVkQSxLQUFBK3NCLFlBQUFMLG1CQUFBM2lCLEVBQUFDLEVBQUEsU0FBQTVCLEVBQUFvTixHQUNBeFYsS0FBQWlILFNBQUFtQixFQUFBb04sSUFDY3RXLEtBQUFjLFNBV2RKLEVBQUFpdEIsTUFBQXZ0QixVQUFBa3RCLGVBQUEsU0FBQXBrQixHQUVBLE9BREFBLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0FwSSxLQUFBNHJCLE9BQUFoUSxlQUFBeFQsSUFNQXhJLEVBQUFpdEIsTUFBQXZ0QixVQUFBbUIsUUFBQSxXQUNBYixFQUFBa0gsUUFBQXhILFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUF5RixRQUFBa0IsSUFBQSxPQUFBM0csS0FBQWl0QixZQUNBanRCLEtBQUFvRSxVQUFBLGFBQ0FwRSxLQUFBK3NCLFlBQUF0c0IsVUFDQVQsS0FBQStzQixZQUFBLEtBQ0Evc0IsS0FBQW1aLFVBQUEsS0FDQW5aLEtBQUFpdEIsV0FBQSxLQUNBanRCLEtBQUE4c0IsVUFBQTVrQixJQUNBbEksS0FBQWlILFNBQUEsS0FDQWpILEtBQUE0ckIsT0FBQW5yQixVQUNBVCxLQUFBNHJCLE9BQUEsTUFFQWhzQixFQUFBaXRCLFFBRUFodEIsRUFBQSxTQUFBRCxHQVdBQSxFQUFBdXRCLGlCQUFBLFdBQ0F2dEIsRUFBQS9CLEtBQUFtQyxNQU1BQSxLQUFBb3RCLE1BQUEsS0FNQXB0QixLQUFBcXRCLFFBQUEsR0FFQXp0QixFQUFBOEYsT0FBQTlGLEVBQUF1dEIsa0JBT0F2dEIsRUFBQXV0QixpQkFBQTd0QixVQUFBNkksSUFBQSxTQUFBbkIsR0FDQSxHQUFBcEgsRUFBQStCLFFBQUFxRixFQUFBb0IsT0FBQXhJLEVBQUErQixRQUFBcUYsRUFBQTZXLFVBQ0EsVUFBQTVkLE1BQUEsd0VBRUErRyxFQUFBb0IsS0FBQXBCLEVBQUFvQixLQUFBQyxVQUNBLElBQUFpSixFQUFBLElBQUFnYyxFQUFBdG1CLEVBQUFvQixLQUFBcEIsRUFBQW9CLEtBQUFwQixFQUFBNlcsU0FBQTdXLEdBUUEsSUFQQSxPQUFBaEgsS0FBQW90QixNQUNBcHRCLEtBQUFvdEIsTUFBQTliLEVBRUF0UixLQUFBb3RCLE1BQUFHLE9BQUFqYyxHQUVBdFIsS0FBQXF0QixVQUVBLE9BQUEvYixHQUNBQSxFQUFBa2MsZUFDQWxjLEVBQUFtYyxZQUNBenRCLEtBQUEwdEIsV0FBQXBjLEdBQ0FBLElBQUFwUSxPQUVBLE9BQUFsQixNQU9BSixFQUFBdXRCLGlCQUFBN3RCLFVBQUFtSixPQUFBLFNBQUF6QixHQUNBLFVBQUFoSCxLQUFBb3RCLE1BQUEsQ0FDQSxJQUFBTyxLQUNBM3RCLEtBQUFvdEIsTUFBQVEsT0FBQTVtQixFQUFBb0IsS0FBQXVsQixHQUNBLFFBQUFqd0IsRUFBQSxFQUE0QkEsRUFBQWl3QixFQUFBcnNCLE9BQW9CNUQsSUFBQSxDQUNoRCxJQUFBNFQsRUFBQXFjLEVBQUFqd0IsR0FDQSxHQUFBNFQsRUFBQXRLLFVBQUEsQ0FDQWhILEtBQUE2dEIsWUFBQXZjLEdBQ0F0UixLQUFBcXRCLFVBQ0EsUUFJQSxPQUFBcnRCLE1BU0E1QixPQUFBQyxlQUFBdUIsRUFBQXV0QixpQkFBQTd0QixVQUFBLFVBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXF0QixXQVFBenRCLEVBQUF1dEIsaUJBQUE3dEIsVUFBQXlKLE9BQUEsU0FBQUMsR0FJQSxPQUhBaEosS0FBQWlLLFlBQUFqQixFQUFBLFNBQUFoQyxHQUNBaEgsS0FBQXlJLE9BQUF6QixJQUNVOUgsS0FBQWMsT0FDVkEsTUFPQUosRUFBQXV0QixpQkFBQTd0QixVQUFBd3VCLFNBQUEsU0FBQXhjLEdBQ0F0UixLQUFBb3RCLE1BQUE5YixFQUNBLE9BQUF0UixLQUFBb3RCLFFBQ0FwdEIsS0FBQW90QixNQUFBbHNCLE9BQUEsT0FVQXRCLEVBQUF1dEIsaUJBQUE3dEIsVUFBQXl1QixxQkFBQSxTQUFBemMsRUFBQTBjLEdBQ0EsT0FBQTFjLEVBQUFwUSxRQUNBb1EsRUFBQTJjLGNBQ0EzYyxFQUFBcFEsT0FBQWd0QixLQUFBRixFQUVBMWMsRUFBQXBRLE9BQUFpdEIsTUFBQUgsRUFFQWh1QixLQUFBMHRCLFdBQUFwYyxFQUFBcFEsU0FFQWxCLEtBQUE4dEIsU0FBQUUsSUFTQXB1QixFQUFBdXRCLGlCQUFBN3RCLFVBQUF1dUIsWUFBQSxTQUFBdmMsR0FDQSxVQUFBQSxFQUFBNGMsTUFBQSxPQUFBNWMsRUFBQTZjLE1BQ0FudUIsS0FBQSt0QixxQkFBQXpjLEVBQUEsV0FDVSxVQUFBQSxFQUFBNmMsTUFDVm51QixLQUFBK3RCLHFCQUFBemMsSUFBQTRjLFdBQ1UsVUFBQTVjLEVBQUE0YyxLQUNWbHVCLEtBQUErdEIscUJBQUF6YyxJQUFBNmMsV0FDVSxDQUNWLElBQ0FILEVBQUFJLEVBQ0EsR0FGQTljLEVBQUErYyxhQUVBLEVBQ0EsVUFBQS9jLEVBQUE0YyxLQUFBQyxPQUNBSCxFQUFBMWMsRUFBQTRjLE1BQ0FDLE1BQUE3YyxFQUFBNmMsTUFDQUMsRUFBQUosTUFDa0IsQ0FFbEIsSUFEQUEsRUFBQTFjLEVBQUE0YyxLQUFBQyxNQUNBLE9BQUFILEVBQUFHLE9BQ0FILElBQUFHLE1BRUFILEVBQUE5c0IsT0FBQWl0QixNQUFBSCxFQUFBRSxLQUNBRSxFQUFBSixFQUFBOXNCLE9BQ0E4c0IsRUFBQUUsS0FBQTVjLEVBQUE0YyxLQUNBRixFQUFBRyxNQUFBN2MsRUFBQTZjLFdBRWMsVUFBQTdjLEVBQUE2YyxNQUFBRCxNQUNkRixFQUFBMWMsRUFBQTZjLE9BQ0FELEtBQUE1YyxFQUFBNGMsS0FDQUUsRUFBQUosTUFDYyxDQUVkLElBREFBLEVBQUExYyxFQUFBNmMsTUFBQUQsS0FDQSxPQUFBRixFQUFBRSxNQUNBRixJQUFBRSxLQUVBRixFQUFBOXNCLE9BQUE4c0IsRUFBQTlzQixPQUNBOHNCLEVBQUE5c0IsT0FBQWd0QixLQUFBRixFQUFBRyxNQUNBQyxFQUFBSixFQUFBOXNCLE9BQ0E4c0IsRUFBQUUsS0FBQTVjLEVBQUE0YyxLQUNBRixFQUFBRyxNQUFBN2MsRUFBQTZjLE1BRUEsT0FBQTdjLEVBQUFwUSxPQUNBb1EsRUFBQTJjLGNBQ0EzYyxFQUFBcFEsT0FBQWd0QixLQUFBRixFQUVBMWMsRUFBQXBRLE9BQUFpdEIsTUFBQUgsRUFHQWh1QixLQUFBOHRCLFNBQUFFLEdBR0FodUIsS0FBQTB0QixXQUFBVSxHQUVBOWMsRUFBQTdRLFdBT0FiLEVBQUF1dEIsaUJBQUE3dEIsVUFBQWd2QixZQUFBLFNBQUFoZCxHQUNBLElBQUFwUSxFQUFBb1EsRUFBQXBRLE9BQ0Erc0IsRUFBQTNjLEVBQUEyYyxjQUVBTSxFQUFBamQsRUFBQTZjLE1BQ0E3YyxFQUFBNmMsTUFBQUksRUFBQUwsS0FDQUssRUFBQUwsS0FBQTVjLEVBQ0EsT0FBQXBRLEVBQ0Erc0IsRUFDQS9zQixFQUFBZ3RCLEtBQUFLLEVBRUFydEIsRUFBQWl0QixNQUFBSSxFQUdBdnVCLEtBQUE4dEIsU0FBQVMsSUFRQTN1QixFQUFBdXRCLGlCQUFBN3RCLFVBQUFrdkIsYUFBQSxTQUFBbGQsR0FDQSxJQUFBcFEsRUFBQW9RLEVBQUFwUSxPQUNBK3NCLEVBQUEzYyxFQUFBMmMsY0FFQU0sRUFBQWpkLEVBQUE0YyxLQUNBNWMsRUFBQTRjLEtBQUFLLEVBQUFKLE1BQ0FJLEVBQUFKLE1BQUE3YyxFQUNBLE9BQUFwUSxFQUNBK3NCLEVBQ0Evc0IsRUFBQWd0QixLQUFBSyxFQUVBcnRCLEVBQUFpdEIsTUFBQUksRUFHQXZ1QixLQUFBOHRCLFNBQUFTLElBUUEzdUIsRUFBQXV0QixpQkFBQTd0QixVQUFBb3VCLFdBQUEsU0FBQXBjLEdBQ0EsSUFBQW1kLEVBQUFuZCxFQUFBK2MsYUFDQUksRUFBQSxFQUNBbmQsRUFBQTRjLEtBQUFHLGFBQUEsRUFDQXJ1QixLQUFBc3VCLFlBQUFoZCxFQUFBNGMsTUFFQWx1QixLQUFBd3VCLGFBQUFsZCxHQUVVbWQsR0FBQSxJQUNWbmQsRUFBQTZjLE1BQUFFLGFBQUEsRUFDQXJ1QixLQUFBd3VCLGFBQUFsZCxFQUFBNmMsT0FFQW51QixLQUFBc3VCLFlBQUFoZCxLQVVBMVIsRUFBQXV0QixpQkFBQTd0QixVQUFBZixJQUFBLFNBQUE2SixHQUNBLFVBQUFwSSxLQUFBb3RCLE1BQUEsQ0FDQSxJQUFBTyxLQUVBLEdBREEzdEIsS0FBQW90QixNQUFBUSxPQUFBeGxCLEVBQUF1bEIsR0FDQUEsRUFBQXJzQixPQUFBLEdBRUEsSUFEQSxJQUFBb08sRUFBQWllLEVBQUEsR0FDQWp3QixFQUFBLEVBQWdDQSxFQUFBaXdCLEVBQUFyc0IsT0FBb0I1RCxJQUNwRGl3QixFQUFBandCLEdBQUE0b0IsSUFBQTVXLEVBQUE0VyxNQUNBNVcsRUFBQWllLEVBQUFqd0IsSUFHQSxPQUFBZ1MsRUFBQTFJLE9BR0EsYUFPQXBILEVBQUF1dEIsaUJBQUE3dEIsVUFBQXFLLFFBQUEsU0FBQTFDLEdBQ0EsVUFBQWpILEtBQUFvdEIsTUFBQSxDQUNBLElBQUFzQixLQUNBMXVCLEtBQUFvdEIsTUFBQXVCLFNBQUEsU0FBQXJkLEdBQ0FvZCxFQUFBOXJCLEtBQUEwTyxLQUVBLFFBQUE1VCxFQUFBLEVBQTRCQSxFQUFBZ3hCLEVBQUFwdEIsT0FBcUI1RCxJQUFBLENBQ2pELElBQUE2SixFQUFBbW5CLEVBQUFoeEIsR0FBQXNKLE1BQ0FPLEdBQ0FOLEVBQUFNLElBSUEsT0FBQXZILE1BU0FKLEVBQUF1dEIsaUJBQUE3dEIsVUFBQTRLLGNBQUEsU0FBQTlCLEVBQUFuQixHQUNBLFVBQUFqSCxLQUFBb3RCLE1BQUEsQ0FDQSxJQUFBTyxLQUNBM3RCLEtBQUFvdEIsTUFBQVEsT0FBQXhsQixFQUFBdWxCLEdBQ0EsUUFBQWp3QixFQUFBaXdCLEVBQUFyc0IsT0FBQSxFQUE2QzVELEdBQUEsRUFBUUEsSUFBQSxDQUNyRCxJQUFBNkosRUFBQW9tQixFQUFBandCLEdBQUFzSixNQUNBTyxHQUNBTixFQUFBTSxJQUlBLE9BQUF2SCxNQVNBSixFQUFBdXRCLGlCQUFBN3RCLFVBQUEySyxZQUFBLFNBQUE3QixFQUFBbkIsR0FDQSxVQUFBakgsS0FBQW90QixNQUFBLENBQ0EsSUFBQU8sS0FDQTN0QixLQUFBb3RCLE1BQUF3QixZQUFBeG1CLEVBQUF1bEIsR0FDQSxRQUFBandCLEVBQUFpd0IsRUFBQXJzQixPQUFBLEVBQTZDNUQsR0FBQSxFQUFRQSxJQUVyRHVKLEVBREEwbUIsRUFBQWp3QixHQUFBc0osT0FJQSxPQUFBaEgsTUFNQUosRUFBQXV0QixpQkFBQTd0QixVQUFBbUIsUUFBQSxXQUNBLElBQUFpdUIsS0FDQSxPQUFBMXVCLEtBQUFvdEIsT0FDQXB0QixLQUFBb3RCLE1BQUF1QixTQUFBLFNBQUFyZCxHQUNBb2QsRUFBQTlyQixLQUFBME8sS0FHQSxRQUFBNVQsRUFBQSxFQUF3QkEsRUFBQWd4QixFQUFBcHRCLE9BQXFCNUQsSUFDN0NneEIsRUFBQWh4QixHQUFBK0MsVUFJQSxPQUZBaXVCLEVBQUEsS0FDQTF1QixLQUFBb3RCLE1BQUEsS0FDQXB0QixNQWdCQSxJQUFBc3RCLEVBQUEsU0FBQWhILEVBQUFHLEVBQUF6ZixHQUVBaEgsS0FBQWdILFFBRUFoSCxLQUFBc21CLE1BRUF0bUIsS0FBQXltQixPQUVBem1CLEtBQUEwUCxJQUFBMVAsS0FBQXltQixLQUVBem1CLEtBQUE2dUIsTUFBQSxLQUVBN3VCLEtBQUE4dUIsT0FBQSxLQUVBOXVCLEtBQUFrQixPQUFBLEtBRUFsQixLQUFBK3VCLE9BQUEsR0ErS0EsT0F6S0F6QixFQUFBaHVCLFVBQUFpdUIsT0FBQSxTQUFBamMsR0FDQUEsRUFBQWdWLEtBQUF0bUIsS0FBQXNtQixJQUNBLE9BQUF0bUIsS0FBQWt1QixLQUNBbHVCLEtBQUFrdUIsS0FBQTVjLEVBRUF0UixLQUFBa3VCLEtBQUFYLE9BQUFqYyxHQUVVLE9BQUF0UixLQUFBbXVCLE1BQ1ZudUIsS0FBQW11QixNQUFBN2MsRUFFQXRSLEtBQUFtdUIsTUFBQVosT0FBQWpjLElBU0FnYyxFQUFBaHVCLFVBQUFzdUIsT0FBQSxTQUFBb0IsRUFBQXJCLEdBR0FxQixFQUFBaHZCLEtBQUEwUCxNQUlBLE9BQUExUCxLQUFBa3VCLE1BQ0FsdUIsS0FBQWt1QixLQUFBTixPQUFBb0IsRUFBQXJCLEdBR0EzdEIsS0FBQXNtQixLQUFBMEksR0FBQWh2QixLQUFBeW1CLEtBQUF1SSxHQUNBckIsRUFBQS9xQixLQUFBNUMsTUFJQUEsS0FBQXNtQixJQUFBMEksR0FJQSxPQUFBaHZCLEtBQUFtdUIsT0FDQW51QixLQUFBbXVCLE1BQUFQLE9BQUFvQixFQUFBckIsS0FTQUwsRUFBQWh1QixVQUFBc3ZCLFlBQUEsU0FBQUksRUFBQXJCLEdBRUEzdEIsS0FBQXNtQixLQUFBMEksSUFDQXJCLEVBQUEvcUIsS0FBQTVDLE1BQ0EsT0FBQUEsS0FBQWt1QixNQUNBbHVCLEtBQUFrdUIsS0FBQVUsWUFBQUksRUFBQXJCLElBSUEsT0FBQTN0QixLQUFBbXVCLE9BQ0FudUIsS0FBQW11QixNQUFBUyxZQUFBSSxFQUFBckIsSUFPQUwsRUFBQWh1QixVQUFBcXZCLFNBQUEsU0FBQTFuQixHQUNBQSxFQUFBakgsTUFDQSxPQUFBQSxLQUFBa3VCLE1BQ0FsdUIsS0FBQWt1QixLQUFBUyxTQUFBMW5CLEdBRUEsT0FBQWpILEtBQUFtdUIsT0FDQW51QixLQUFBbXVCLE1BQUFRLFNBQUExbkIsSUFNQXFtQixFQUFBaHVCLFVBQUFrdUIsYUFBQSxXQUNBLE9BQUF4dEIsS0FBQWt1QixNQUFBLE9BQUFsdUIsS0FBQW11QixNQUNBbnVCLEtBQUErdUIsT0FBQW5xQixLQUFBOEssSUFBQTFQLEtBQUFrdUIsS0FBQWEsT0FBQS91QixLQUFBbXVCLE1BQUFZLFFBQUEsRUFDVSxPQUFBL3VCLEtBQUFtdUIsTUFDVm51QixLQUFBK3VCLE9BQUEvdUIsS0FBQW11QixNQUFBWSxPQUFBLEVBQ1UsT0FBQS91QixLQUFBa3VCLEtBQ1ZsdUIsS0FBQSt1QixPQUFBL3VCLEtBQUFrdUIsS0FBQWEsT0FBQSxFQUVBL3VCLEtBQUErdUIsT0FBQSxHQU1BekIsRUFBQWh1QixVQUFBbXVCLFVBQUEsV0FDQXp0QixLQUFBMFAsSUFBQTFQLEtBQUF5bUIsS0FDQSxPQUFBem1CLEtBQUFrdUIsT0FDQWx1QixLQUFBMFAsSUFBQTlLLEtBQUE4SyxJQUFBMVAsS0FBQTBQLElBQUExUCxLQUFBa3VCLEtBQUF4ZSxNQUVBLE9BQUExUCxLQUFBbXVCLFFBQ0FudUIsS0FBQTBQLElBQUE5SyxLQUFBOEssSUFBQTFQLEtBQUEwUCxJQUFBMVAsS0FBQW11QixNQUFBemUsT0FPQTRkLEVBQUFodUIsVUFBQSt1QixXQUFBLFdBQ0EsSUFBQUksRUFBQSxFQVFBLE9BUEEsT0FBQXp1QixLQUFBa3VCLE1BQUEsT0FBQWx1QixLQUFBbXVCLE1BQ0FNLEVBQUF6dUIsS0FBQWt1QixLQUFBYSxPQUFBL3VCLEtBQUFtdUIsTUFBQVksT0FDVSxPQUFBL3VCLEtBQUFrdUIsS0FDVk8sRUFBQXp1QixLQUFBa3VCLEtBQUFhLE9BQUEsRUFDVSxPQUFBL3VCLEtBQUFtdUIsUUFDVk0sSUFBQXp1QixLQUFBbXVCLE1BQUFZLE9BQUEsSUFFQU4sR0FNQW5CLEVBQUFodUIsVUFBQTJ1QixZQUFBLFdBQ0EsY0FBQWp1QixLQUFBa0IsUUFBQWxCLEtBQUFrQixPQUFBZ3RCLE9BQUFsdUIsTUFNQTVCLE9BQUFDLGVBQUFpdkIsRUFBQWh1QixVQUFBLFFBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQTZ1QixPQUVBbnVCLElBQUEsU0FBQTRRLEdBQ0F0UixLQUFBNnVCLE1BQUF2ZCxFQUNBLE9BQUFBLElBQ0FBLEVBQUFwUSxPQUFBbEIsTUFFQUEsS0FBQXd0QixlQUNBeHRCLEtBQUF5dEIsZUFPQXJ2QixPQUFBQyxlQUFBaXZCLEVBQUFodUIsVUFBQSxTQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUE4dUIsUUFFQXB1QixJQUFBLFNBQUE0USxHQUNBdFIsS0FBQTh1QixPQUFBeGQsRUFDQSxPQUFBQSxJQUNBQSxFQUFBcFEsT0FBQWxCLE1BRUFBLEtBQUF3dEIsZUFDQXh0QixLQUFBeXRCLGVBTUFILEVBQUFodUIsVUFBQW1CLFFBQUEsV0FDQVQsS0FBQWtCLE9BQUEsS0FDQWxCLEtBQUE2dUIsTUFBQSxLQUNBN3VCLEtBQUE4dUIsT0FBQSxLQUNBOXVCLEtBQUFnSCxNQUFBLE1BS0FwSCxFQUFBdXRCLG1CQUVBdHRCLEVBQUEsU0FBQUQsR0EyRUEsT0EvREFBLEVBQUE0YSxNQUFBLFNBQUEvVyxFQUFBMFAsR0FDQSxLQUFBblQsZ0JBQUFKLEVBQUE0YSxPQUdBLFdBQUE1YSxFQUFBNGEsTUFBQS9XLEVBQUEwUCxHQUZBdlQsRUFBQTBhLGNBQUF6YyxLQUFBbUMsS0FBQXlELEVBQUEwUCxJQUtBdlQsRUFBQThGLE9BQUE5RixFQUFBNGEsTUFBQTVhLEVBQUEwYSxlQU1BMWEsRUFBQTRhLE1BQUFsYixVQUFBa1UsY0FBQSxJQU1BNVQsRUFBQTRhLE1BQUFsYixVQUFBOFYsS0FBQSxXQUNBLE9BQUF4VixFQUFBbVYsVUFBQVMsT0FRQTVWLEVBQUE0YSxNQUFBbGIsVUFBQTZVLGNBQUEsU0FBQW1CLEdBQ0EsT0FBQXRWLEtBQUFrVixVQUFBSSxHQVFBMVYsRUFBQTRhLE1BQUFsYixVQUFBcVYsZ0JBQUEsU0FBQVksR0FDQSxPQUFBQSxHQUFBLEdBQUF2VixLQUFBOFUsV0FBQTlVLEtBQUFrVixXQVFBdFYsRUFBQTRhLE1BQUFsYixVQUFBK1UsY0FBQSxTQUFBbUIsR0FDQSxPQUFBQSxHQU1BNVYsRUFBQTRhLE1BQUFsYixVQUFBb1UsUUFBQSxXQUNBLE9BQUExVCxLQUFBcUksV0FNQXpJLEVBQUE0YSxNQUFBbGIsVUFBQW1VLFVBQUEsV0FDQSxPQUFBelQsS0FBQXFJLFVBQUFySSxLQUFBa1YsV0FBQSxHQUFBbFYsS0FBQThVLFlBRUFsVixFQUFBNGEsUUFFQTNhLEVBQUEsU0FBQUQsR0E4RUEsT0F0RUFBLEVBQUFxdkIsZUFBQSxTQUFBbGEsRUFBQWpTLEdBQ0FBLEVBQUFsRCxFQUFBbUQsV0FBQUQsRUFBQWxELEVBQUFxdkIsZUFBQXpzQixVQUNBNUMsRUFBQS9CLEtBQUFtQyxNQUtBQSxLQUFBK1UsWUFLQS9VLEtBQUErTixHQUFBbk8sRUFBQXF2QixlQUFBQyxXQUtBbHZCLEtBQUFvSSxLQUFBeEksRUFBQTRhLE1BQUExWCxFQUFBc0YsTUFLQXBJLEtBQUFpSCxTQUFBbkUsRUFBQW1FLFNBTUFqSCxLQUFBbXZCLE1BQUFyc0IsRUFBQXNFLE1BRUF4SCxFQUFBOEYsT0FBQTlGLEVBQUFxdkIsZ0JBTUFydkIsRUFBQXF2QixlQUFBenNCLFVBQ0E0RSxNQUFBLEVBQ0FILFNBQUFySCxFQUFBcUUsTUFRQXJFLEVBQUFxdkIsZUFBQUMsU0FBQSxFQUtBdHZCLEVBQUFxdkIsZUFBQTN2QixVQUFBOHZCLE9BQUEsU0FBQWhuQixHQUNBcEksS0FBQWlILFdBQ0FqSCxLQUFBaUgsU0FBQW1CLEdBQ0FwSSxLQUFBbXZCLE9BQUFudkIsS0FBQStVLFdBQ0EvVSxLQUFBK1UsVUFBQXNhLE1BQUFydkIsS0FBQStOLE1BUUFuTyxFQUFBcXZCLGVBQUEzdkIsVUFBQW1CLFFBQUEsV0FLQSxPQUpBYixFQUFBTixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBK1UsVUFBQSxLQUNBL1UsS0FBQWlILFNBQUEsS0FDQWpILEtBQUFvSSxLQUFBLEtBQ0FwSSxNQUVBSixFQUFBcXZCLGlCQUVBcHZCLEVBQUEsU0FBQUQsR0FpSEEsT0ExR0FBLEVBQUEwdkIscUJBQUEsU0FBQXZhLEVBQUFqUyxHQUNBbEQsRUFBQXF2QixlQUFBcHhCLEtBQUFtQyxLQUFBK1UsRUFBQWpTLEdBQ0FBLEVBQUFsRCxFQUFBbUQsV0FBQUQsRUFBQWxELEVBQUEwdkIscUJBQUE5c0IsVUFNQXhDLEtBQUE2ZCxTQUFBamUsRUFBQTRhLE1BQUExWCxFQUFBK2EsVUFNQTdkLEtBQUF1dkIsVUFBQTN2QixFQUFBNGEsTUFBQTFYLEVBQUF5QyxVQU1BdkYsS0FBQXd2QixZQUFBLEVBTUF4dkIsS0FBQXl2QixTQUFBLEVBTUF6dkIsS0FBQThzQixVQUFBOXNCLEtBQUFvSSxLQU1BcEksS0FBQTB2QixjQUFBMXZCLEtBQUEydkIsU0FBQXp3QixLQUFBYyxNQUNBQSxLQUFBK1UsVUFBQW5PLEdBQUEsa0JBQUE1RyxLQUFBMHZCLGVBQ0ExdkIsS0FBQTJ2QixZQUVBL3ZCLEVBQUE4RixPQUFBOUYsRUFBQTB2QixxQkFBQTF2QixFQUFBcXZCLGdCQU1BcnZCLEVBQUEwdkIscUJBQUE5c0IsVUFDQXFiLFNBQUEzVixJQUNBM0MsU0FBQSxHQU9BM0YsRUFBQTB2QixxQkFBQWh3QixVQUFBOHZCLE9BQUEsU0FBQWhuQixHQUVBcEksS0FBQTR2QixjQUFBeG5CLEdBRUF4SSxFQUFBcXZCLGVBQUEzdkIsVUFBQTh2QixPQUFBdnhCLEtBQUFtQyxLQUFBb0ksSUFNQXhJLEVBQUEwdkIscUJBQUFod0IsVUFBQXN3QixjQUFBLFNBQUF4bkIsR0FFQSxJQUFBb04sRUFBQXhWLEtBQUErVSxVQUFBeVYsZUFBQXBpQixHQUNBb04sR0FBQXhWLEtBQUFvSSxNQUFBb04sR0FBQXhWLEtBQUE4c0IsV0FBQTlzQixLQUFBOHNCLFVBQUE5c0IsS0FBQXV2QixVQUFBdnZCLEtBQUFvSSxLQUFBcEksS0FBQTZkLFdBQ0E3ZCxLQUFBOHNCLFdBQUE5c0IsS0FBQXV2QixVQUNBdnZCLEtBQUF3dkIsV0FBQXh2QixLQUFBeXZCLFFBQ0F6dkIsS0FBQXl2QixRQUFBenZCLEtBQUErVSxVQUFBOGEsYUFBQTd2QixLQUFBb3ZCLE9BQUFsd0IsS0FBQWMsTUFBQUosRUFBQTRhLE1BQUF4YSxLQUFBOHNCLGNBT0FsdEIsRUFBQTB2QixxQkFBQWh3QixVQUFBcXdCLFNBQUEsU0FBQXZuQixHQUNBcEksS0FBQStVLFVBQUFzYSxNQUFBcnZCLEtBQUF3dkIsWUFDQXh2QixLQUFBK1UsVUFBQXNhLE1BQUFydkIsS0FBQXl2QixTQUNBenZCLEtBQUE4c0IsVUFBQTlzQixLQUFBb0ksS0FDQSxJQUFBb04sRUFBQXhWLEtBQUErVSxVQUFBeVYsZUFBQXBpQixHQUNBb04sRUFBQXhWLEtBQUFvSSxPQUNBcEksS0FBQThzQixVQUFBOXNCLEtBQUFvSSxLQUFBeEQsS0FBQW1kLE1BQUF2TSxFQUFBeFYsS0FBQW9JLE1BQUFwSSxLQUFBdXZCLFdBQUF2dkIsS0FBQXV2QixXQUVBdnZCLEtBQUF3dkIsV0FBQXh2QixLQUFBK1UsVUFBQThhLGFBQUE3dkIsS0FBQW92QixPQUFBbHdCLEtBQUFjLE1BQUFKLEVBQUE0YSxNQUFBeGEsS0FBQThzQixZQUNBOXNCLEtBQUE4c0IsV0FBQTlzQixLQUFBdXZCLFVBQ0F2dkIsS0FBQXl2QixRQUFBenZCLEtBQUErVSxVQUFBOGEsYUFBQTd2QixLQUFBb3ZCLE9BQUFsd0IsS0FBQWMsTUFBQUosRUFBQTRhLE1BQUF4YSxLQUFBOHNCLGFBTUFsdEIsRUFBQTB2QixxQkFBQWh3QixVQUFBbUIsUUFBQSxXQVFBLE9BUEFULEtBQUErVSxVQUFBc2EsTUFBQXJ2QixLQUFBd3ZCLFlBQ0F4dkIsS0FBQStVLFVBQUFzYSxNQUFBcnZCLEtBQUF5dkIsU0FDQXp2QixLQUFBK1UsVUFBQXBPLElBQUEsa0JBQUEzRyxLQUFBMHZCLGVBQ0ExdkIsS0FBQTh2QixtQkFBQSxLQUNBbHdCLEVBQUFxdkIsZUFBQTN2QixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBNmQsU0FBQSxLQUNBN2QsS0FBQXV2QixVQUFBLEtBQ0F2dkIsTUFFQUosRUFBQTB2Qix1QkFFQXp2QixFQUFBLFNBQUFELEdBMEJBQSxFQUFBbVYsVUFBQSxXQUNBblYsRUFBQWtILFFBQUFqSixLQUFBbUMsTUFDQUosRUFBQTJHLFdBQUEsV0FRQXZHLEtBQUEwTixNQUFBLEVBTUExTixLQUFBK3ZCLFdBQUEsRUFNQS92QixLQUFBZ3dCLFNBQUEsRUFTQWh3QixLQUFBaXdCLEtBQUFDLEVBQUExdEIsU0FBQTJTLElBT0FuVixLQUFBbXdCLE9BQUEsSUFBQXZ3QixFQUFBaXRCLE9BQ0E1bEIsU0FBQWpILEtBQUFvd0IsYUFBQWx4QixLQUFBYyxNQUNBbVosVUFBQSxJQUVBblosS0FBQXF3QixtQkFVQXJ3QixLQUFBZ1YsSUFBQWhWLEtBQUFtd0IsT0FBQWhYLFVBQ0FuWixLQUFBZ1YsSUFBQTJHLFNBQUEzYixLQUFBMmIsU0FBQXpjLEtBQUFjLE1BQ0FBLEtBQUFnVixJQUFBOEcsV0FBQTliLEtBQUE4YixXQUFBNWMsS0FBQWMsTUFDQUEsS0FBQWdWLElBQUE3QixNQUFBdlQsRUFBQTZPLEtBQUFvTSxJQUNBN2EsS0FBQWdWLElBQUFyVyxNQUFBdXhCLEVBQUExdEIsU0FBQXdTLElBQ0FoVixLQUFBa0UsVUFBQSxPQU9BbEUsS0FBQXN3QixlQUFBSixFQUFBMXRCLFNBQUF5UyxjQVNBalYsS0FBQXV3QixvQkFNQXZ3QixLQUFBZ0ksVUFBQSxJQUFBcEksRUFBQW1JLFNBTUEvSCxLQUFBd3dCLGdCQUFBLElBQUE1d0IsRUFBQXV0QixpQkFNQW50QixLQUFBeXdCLGtCQVNBendCLEtBQUEwd0IsWUFBQVIsRUFBQTF0QixTQUFBMlMsSUFBQSxFQU9BblYsS0FBQTJ3QixhQUFBLEdBQ1V6eEIsS0FBQWMsUUFFVkosRUFBQThGLE9BQUE5RixFQUFBbVYsVUFBQW5WLEVBQUFrSCxTQU9BbEgsRUFBQW1WLFVBQUF2UyxVQUNBd1MsSUFBQSxJQUNBNGIsTUFBQSxFQUNBQyxpQkFBQSxLQUNBNWIsY0FBQSxFQUNBNmIsVUFBQSxFQUNBQyxRQUFBLEtBQ0E1YixJQUFBLEtBVUF2VixFQUFBbVYsVUFBQXpWLFVBQUE4d0IsYUFBQSxTQUFBWSxFQUFBeGIsR0FFQSxHQUFBeFYsS0FBQTJ3QixhQUFBLEdBQUFuYixFQUFBeFYsS0FBQWl3QixNQUFBLEdBQ0F6YSxHQUFBLEVBQUF4VixLQUFBMHdCLGNBQUEsR0FFQSxJQUFBTyxFQUFBemIsR0FBQSxFQUFBeFYsS0FBQTB3QixjQUFBLEVBQUExd0IsS0FBQTB3QixhQUNBUSxFQUFBdHNCLEtBQUFFLElBQUFtc0IsRUFBQXJzQixLQUFBQyxJQUFBN0UsS0FBQTJ3QixhQUNBSyxHQUFBcHhCLEVBQUE0YSxNQUFBLEVBQUF4YSxLQUFBMHdCLFlBQUEsR0FBQWpkLFlBQUF5ZCxFQUdBbHhCLEtBQUEwTixNQUNBOEgsR0FBQXhWLEtBQUFnd0IsV0FDQWh3QixLQUFBK0YsS0FBQSxVQUFBaXJCLEdBQ0FoeEIsS0FBQW13QixPQUFBckUsZUFBQTlyQixLQUFBK3ZCLFdBQUFpQixHQUNBeGIsRUFBQXhWLEtBQUErdkIsV0FDQS92QixLQUFBK0YsS0FBQSxZQUFBaXJCLEVBQUFoeEIsS0FBQW13QixPQUFBN0QsaUJBQUEwRSxJQUNBaHhCLEtBQUErRixLQUFBLE9BQUFpckIsSUFJQWh4QixLQUFBZ0ksVUFBQWtDLGNBQUFzTCxFQUFBLFNBQUF4TyxHQUNBQSxFQUFBb29CLE9BQUE0QixNQWlCQXB4QixFQUFBbVYsVUFBQXpWLFVBQUE2eEIsU0FBQSxTQUFBbHFCLEVBQUFtQixHQUNBLElBQUFwQixFQUFBLElBQUFwSCxFQUFBcXZCLGVBQUFqdkIsTUFDQW9JLEtBQUF4SSxFQUFBMGEsY0FBQWxTLEdBQ0FuQixhQUVBLE9BQUFqSCxLQUFBb3hCLFVBQUFwcUIsRUFBQWhILEtBQUFnSSxZQWtCQXBJLEVBQUFtVixVQUFBelYsVUFBQSt4QixlQUFBLFNBQUFwcUIsRUFBQTFCLEVBQUF3RSxFQUFBOFQsR0FDQSxJQUFBN1csRUFBQSxJQUFBcEgsRUFBQTB2QixxQkFBQXR2QixNQUNBaUgsV0FDQTFCLFNBQUEzRixFQUFBd1osS0FBQTdULEdBQ0E2QyxLQUFBeEksRUFBQTBhLGNBQUF2USxHQUNBOFQsU0FBQWplLEVBQUF3WixLQUFBeFosRUFBQW1ELFdBQUE4YSxFQUFBM1YsUUFHQSxPQUFBbEksS0FBQW94QixVQUFBcHFCLEVBQUFoSCxLQUFBd3dCLGtCQVVBNXdCLEVBQUFtVixVQUFBelYsVUFBQXV3QixhQUFBLFNBQUE1b0IsRUFBQW1CLEdBQ0EsSUFBQXBCLEVBQUEsSUFBQXBILEVBQUFxdkIsZUFBQWp2QixNQUNBb0ksS0FBQXhJLEVBQUEwYSxjQUFBbFMsR0FDQW5CLFdBQ0FHLE1BQUEsSUFFQSxPQUFBcEgsS0FBQW94QixVQUFBcHFCLEVBQUFoSCxLQUFBZ0ksWUFPQXBJLEVBQUFtVixVQUFBelYsVUFBQSt2QixNQUFBLFNBQUFpQyxHQUNBLEdBQUF0eEIsS0FBQXV3QixpQkFBQWh4QixlQUFBK3hCLEdBQUEsQ0FDQSxJQUFBQyxFQUFBdnhCLEtBQUF1d0IsaUJBQUFlLEVBQUFweEIsWUFDQXF4QixFQUFBQyxTQUFBL29CLE9BQUE4b0IsRUFBQXZxQixPQUNBdXFCLEVBQUF2cUIsTUFBQXZHLGlCQUNBVCxLQUFBdXdCLGlCQUFBZSxFQUFBcHhCLFlBRUEsT0FBQUYsTUFVQUosRUFBQW1WLFVBQUF6VixVQUFBOHhCLFVBQUEsU0FBQXBxQixFQUFBd3FCLEdBTUEsT0FMQXh4QixLQUFBdXdCLGlCQUFBdnBCLEVBQUErRyxHQUFBN04sYUFDQThHLFFBQ0F3cUIsWUFFQUEsRUFBQXJwQixJQUFBbkIsR0FDQUEsRUFBQStHLElBVUFuTyxFQUFBbVYsVUFBQXpWLFVBQUF5SixPQUFBLFNBQUFDLEdBU0EsT0FSQUEsRUFBQXBKLEVBQUFtRCxXQUFBaUcsRUFBQSxHQUNBQSxFQUFBaEosS0FBQTBULFFBQUExSyxHQUNBaEosS0FBQWdJLFVBQUFpQyxZQUFBakIsRUFBQSxTQUFBaEMsR0FDQWhILEtBQUFxdkIsTUFBQXJvQixFQUFBK0csS0FDVTdPLEtBQUFjLE9BQ1ZBLEtBQUF3d0IsZ0JBQUF2bUIsWUFBQWpCLEVBQUEsU0FBQWhDLEdBQ0FoSCxLQUFBcXZCLE1BQUFyb0IsRUFBQStHLEtBQ1U3TyxLQUFBYyxPQUNWQSxNQVNBSixFQUFBbVYsVUFBQXpWLFVBQUErd0IsaUJBQUEsV0FDQXJ3QixLQUFBbXdCLE9BQUF2cEIsR0FBQSxpQkFBQXdCLEVBQUFnWCxHQUNBQSxFQUFBeGYsRUFBQTRhLE1BQUE0RSxHQUFBM0wsWUFDQXpULEtBQUErRixLQUFBLFFBQUFxQyxFQUFBZ1gsSUFDVWxnQixLQUFBYyxPQUNWQSxLQUFBbXdCLE9BQUF2cEIsR0FBQSxnQkFBQXdCLEdBQ0FwSSxLQUFBK0YsS0FBQSxPQUFBcUMsSUFDVWxKLEtBQUFjLE9BQ1ZBLEtBQUFtd0IsT0FBQXZwQixHQUFBLGlCQUFBd0IsR0FDQXBJLEtBQUErRixLQUFBLFFBQUFxQyxJQUNVbEosS0FBQWMsUUFTVjVCLE9BQUFDLGVBQUF1QixFQUFBbVYsVUFBQXpWLFVBQUEsU0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBbXdCLE9BQUEzRCxlQUFBeHNCLEtBQUF3RixVQVlBNUYsRUFBQW1WLFVBQUF6VixVQUFBcU8sTUFBQSxTQUFBdkYsRUFBQWdYLEdBTUEsT0FKQXhmLEVBQUEwQyxVQUFBOGMsS0FDQUEsRUFBQXBmLEtBQUEwVCxRQUFBMEwsSUFFQXBmLEtBQUFtd0IsT0FBQXhpQixNQUFBdkYsRUFBQWdYLEdBQ0FwZixNQVNBSixFQUFBbVYsVUFBQXpWLFVBQUErZixLQUFBLFNBQUFqWCxHQUVBLE9BREFwSSxLQUFBbXdCLE9BQUE5USxLQUFBalgsR0FDQXBJLE1BT0FKLEVBQUFtVixVQUFBelYsVUFBQXlzQixNQUFBLFNBQUEzakIsR0FFQSxPQURBcEksS0FBQW13QixPQUFBcEUsTUFBQTNqQixHQUNBcEksTUFRQUosRUFBQW1WLFVBQUF6VixVQUFBbXlCLE9BQUEsU0FBQXJwQixHQU9BLE9BTkFBLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0FwSSxLQUFBbXdCLE9BQUEzRCxlQUFBcGtCLEtBQUF4SSxFQUFBeUUsTUFBQUMsUUFDQXRFLEtBQUEyTixNQUFBdkYsR0FFQXBJLEtBQUFxZixLQUFBalgsR0FFQXBJLE1BbUJBNUIsT0FBQUMsZUFBQXVCLEVBQUFtVixVQUFBelYsVUFBQSxpQkFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBc3dCLGdCQUVBNXZCLElBQUEsU0FBQWd4QixHQUNBOXhCLEVBQUFpRSxRQUFBNnRCLEtBQ0FBLElBQUEsR0FBQUEsRUFBQSxNQUVBMXhCLEtBQUFzd0IsZUFBQW9CLEtBU0F0ekIsT0FBQUMsZUFBQXVCLEVBQUFtVixVQUFBelYsVUFBQSxhQUNBZixJQUFBLFdBQ0EsT0FBQXFCLEVBQUE0YSxNQUFBeGEsS0FBQSt2QixZQUFBdGMsYUFFQS9TLElBQUEsU0FBQWl4QixHQUNBM3hCLEtBQUErdkIsV0FBQS92QixLQUFBMFQsUUFBQWllLE1BU0F2ekIsT0FBQUMsZUFBQXVCLEVBQUFtVixVQUFBelYsVUFBQSxXQUNBZixJQUFBLFdBQ0EsT0FBQXFCLEVBQUE0YSxNQUFBeGEsS0FBQWd3QixVQUFBdmMsYUFFQS9TLElBQUEsU0FBQWt4QixHQUNBNXhCLEtBQUFnd0IsU0FBQWh3QixLQUFBMFQsUUFBQWtlLE1BYUFoeUIsRUFBQW1WLFVBQUF6VixVQUFBdXlCLGNBQUEsU0FBQUYsRUFBQUMsR0FHQSxPQUZBNXhCLEtBQUE4d0IsVUFBQWEsRUFDQTN4QixLQUFBK3dCLFFBQUFhLEVBQ0E1eEIsTUFTQTVCLE9BQUFDLGVBQUF1QixFQUFBbVYsVUFBQXpWLFVBQUEsU0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBMndCLGNBRUFqd0IsSUFBQSxTQUFBd3dCLEdBRUFseEIsS0FBQTJ3QixhQUFBTyxLQVlBOXlCLE9BQUFDLGVBQUF1QixFQUFBbVYsVUFBQXpWLFVBQUEsb0JBQ0FmLElBQUEsV0FDQSxPQUFBcUIsRUFBQTRhLE1BQUF4YSxLQUFBMHdCLGFBQUEvVyxjQUVBalosSUFBQSxTQUFBZ1osR0FDQTFaLEtBQUEwd0IsWUFBQTF3QixLQUFBMFQsUUFBQWdHLE1BVUF0YixPQUFBQyxlQUFBdUIsRUFBQW1WLFVBQUF6VixVQUFBLFlBQ0FmLElBQUEsV0FDQSxJQUFBaUgsRUFBQXhGLEtBQUF3RixNQUNBZ1EsRUFBQXhWLEtBQUFtd0IsT0FBQTNGLGVBQUFobEIsR0FDQSxPQUFBNUYsRUFBQTRhLE1BQUFoRixHQUFBMkUseUJBRUF6WixJQUFBLFNBQUF1d0IsR0FDQSxJQUFBemIsRUFBQXhWLEtBQUEwVCxRQUFBdWQsR0FDQWp4QixLQUFBd1YsV0FVQXBYLE9BQUFDLGVBQUF1QixFQUFBbVYsVUFBQXpWLFVBQUEsV0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBbXdCLE9BQUE1YSxTQUVBN1UsSUFBQSxTQUFBakIsR0FDQSxJQUFBK0YsRUFBQXhGLEtBQUF3RixNQUNBZ1EsRUFBQXhWLEtBQUFnVixJQUFBa1csWUFBQXpyQixFQUFBK0YsR0FDQXhGLEtBQUF3VixXQVVBcFgsT0FBQUMsZUFBQXVCLEVBQUFtVixVQUFBelYsVUFBQSxZQUNBZixJQUFBLFdBQ0EsR0FBQXlCLEtBQUEwTixLQUFBLENBQ0EsSUFBQWxJLEVBQUF4RixLQUFBd0YsTUFFQSxPQURBeEYsS0FBQW13QixPQUFBM0YsZUFBQWhsQixHQUNBeEYsS0FBQSt2QixhQUFBL3ZCLEtBQUFnd0IsU0FBQWh3QixLQUFBK3ZCLFlBRUEsWUFXQTN4QixPQUFBQyxlQUFBdUIsRUFBQW1WLFVBQUF6VixVQUFBLFNBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQW13QixPQUFBM2EsT0FFQTlVLElBQUEsU0FBQTlCLEdBQ0EsR0FBQW9CLEtBQUFtd0IsT0FBQTNhLFFBQUE1VyxFQUFBLENBQ0EsSUFBQTRHLEVBQUF4RixLQUFBd0YsTUFFQXhGLEtBQUFnTixRQUFBcE4sRUFBQXlFLE1BQUFDLFNBQ0F0RSxLQUFBK0YsS0FBQSxPQUFBUCxHQUNBeEYsS0FBQW13QixPQUFBckUsZUFBQWx0QixFQUFBNEcsR0FFQXhGLEtBQUErRixLQUFBLFFBQUFQLEVBQUF4RixLQUFBdVYsVUFFQXZWLEtBQUFtd0IsT0FBQXJFLGVBQUFsdEIsRUFBQTRHLE9BVUE1RixFQUFBbVYsVUFBQXpWLFVBQUFrckIsZUFBQSxTQUFBcGlCLEdBQ0EsT0FBQXhELEtBQUFvUyxNQUFBaFgsS0FBQW13QixPQUFBM0YsZUFBQXBpQixLQU9BeEksRUFBQW1WLFVBQUF6VixVQUFBZ3RCLGlCQUFBLFNBQUFsa0IsR0FDQSxPQUFBcEksS0FBQW13QixPQUFBN0QsaUJBQUFsa0IsSUFZQWhLLE9BQUFDLGVBQUF1QixFQUFBbVYsVUFBQXpWLFVBQUEsT0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBaXdCLE1BRUF2dkIsSUFBQSxTQUFBb3hCLEdBQ0EsSUFBQTljLEVBQUFoVixLQUFBZ1YsSUFBQXJXLE1BQ0FxQixLQUFBaXdCLEtBQUE2QixFQUNBOXhCLEtBQUFnVixJQUFBclcsTUFBQXFXLEtBU0FwVixFQUFBbVYsVUFBQXpWLFVBQUF3YyxXQUFBLFNBQUE5RyxHQUNBLGFBQUFBLEVBQUFoVixLQUFBbVYsTUFRQXZWLEVBQUFtVixVQUFBelYsVUFBQXFjLFNBQUEsU0FBQXRHLEdBQ0EsT0FBQUEsRUFBQXJWLEtBQUFtVixJQUFBLElBZ0JBdlYsRUFBQW1WLFVBQUF6VixVQUFBa2EsZ0JBQUEsU0FBQUUsR0FFQSxHQURBQSxFQUFBMVosS0FBQTBULFFBQUFnRyxHQUNBMVosS0FBQWdOLFFBQUFwTixFQUFBeUUsTUFBQUMsUUFFQSxTQUVBLElBQUFrQixFQUFBeEYsS0FBQXdGLE1BR0F1c0IsRUFBQXJZLEVBREExWixLQUFBd3FCLGVBQUFobEIsR0FDQWtVLEVBQ0EsT0FBQTFaLEtBQUFtd0IsT0FBQXZELGFBQUFtRixFQUFBdnNCLElBY0E1RixFQUFBbVYsVUFBQXpWLFVBQUEweUIsV0FBQSxTQUFBalMsRUFBQXdFLEdBQ0EsSUFBQUEsRUFBQSxDQUVBLElBQUEvZSxFQUFBeEYsS0FBQXdGLE1BRUErZSxFQURBLElBQUF4RSxFQUFBbkUsZUFBQXBXLEdBQ0F1YSxFQUFBbkUsZUFBQXBXLEdBQUF4RixLQUFBZ1YsSUFBQTRHLGVBQUFwVyxHQUVBLEVBR0EsSUFBQXlzQixFQUFBLElBQUFyeUIsRUFBQW1iLEtBQUF3SixHQVFBLE9BUEF2a0IsS0FBQWdWLElBQUE3RCxNQUFBOGdCLEVBQUFsUyxFQUFBdE8sUUFDQXpSLEtBQUF5d0IsZUFBQTd0QixNQUNBMmhCLE1BQUEwTixFQUNBbFMsU0FDQXVMLFFBQUF2TCxFQUFBcGhCLFFBRUFvaEIsRUFBQXBoQixNQUFBLEVBQ0FxQixNQVFBSixFQUFBbVYsVUFBQXpWLFVBQUE0eUIsYUFBQSxTQUFBblMsR0FDQSxRQUFBcmlCLEVBQUFzQyxLQUFBeXdCLGVBQUFudkIsT0FBQSxFQUFxRDVELEdBQUEsRUFBUUEsSUFBQSxDQUM3RCxJQUFBeTBCLEVBQUFueUIsS0FBQXl3QixlQUFBL3lCLEdBQ0F5MEIsRUFBQXBTLGFBQ0FvUyxFQUFBNU4sTUFBQTlqQixVQUNBMHhCLEVBQUFwUyxPQUFBcGhCLE1BQUF3ekIsRUFBQTdHLFFBQ0F0ckIsS0FBQXl3QixlQUFBbHZCLE9BQUE3RCxFQUFBLElBR0EsT0FBQXNDLE1BT0FKLEVBQUFtVixVQUFBelYsVUFBQW1CLFFBQUEsV0FVQSxPQVRBYixFQUFBa0gsUUFBQXhILFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFtd0IsT0FBQTF2QixVQUNBVCxLQUFBbXdCLE9BQUEsS0FDQW53QixLQUFBb0UsVUFBQSxPQUNBcEUsS0FBQWdWLElBQUEsS0FDQWhWLEtBQUFnSSxVQUFBdkgsVUFDQVQsS0FBQWdJLFVBQUEsS0FDQWhJLEtBQUF3d0IsZ0JBQUEvdkIsVUFDQVQsS0FBQXd3QixnQkFBQSxLQUNBeHdCLE1BS0EsSUFBQWt3QixFQUFBdHdCLEVBQUFtVixVQWdCQSxPQWZBblYsRUFBQW1WLFVBQUEsSUFBQW1iLEVBQ0F0d0IsRUFBQWtHLFFBQUFjLEdBQUEsZ0JBQUFuQixHQUNBQSxFQUFBc1AscUJBQUFtYixFQUNBdHdCLEVBQUFtVixVQUFBdFAsRUFBQXNQLFVBRUFuVixFQUFBbVYsVUFBQSxJQUFBbWIsRUFHQXpxQixFQUFBc1AsVUFBQW5WLEVBQUFtVixZQUVBblYsRUFBQWtHLFFBQUFjLEdBQUEsaUJBQUFuQixHQUNBQSxFQUFBc1AscUJBQUFtYixHQUNBenFCLEVBQUFzUCxVQUFBdFUsWUFHQWIsRUFBQW1WLFlBRUFsVixFQUFBLFNBQUFELEdBbUZBLE9BdkVBQSxFQUFBd3lCLE9BQUEsV0FDQSxJQUFBdHZCLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FBQSxVQUFBMUQsRUFBQXd5QixRQUNBeHlCLEVBQUFtUSxVQUFBbFMsS0FBQW1DLE1BTUFBLEtBQUE0USxPQUFBNVEsS0FBQXFRLE1BQUEsSUFBQXpRLEVBQUFtYixLQUFBalksRUFBQXV2QixPQUFBenlCLEVBQUE2TyxLQUFBa00sVUFNQTNhLEtBQUFzeUIsZUFBQXh2QixFQUFBdXZCLE9BTUFyeUIsS0FBQXF5QixPQUFBcnlCLEtBQUE0USxPQUFBekwsS0FDQW5GLEtBQUFrRSxVQUFBLFVBRUFsRSxLQUFBdXlCLEtBQUF6dkIsRUFBQXl2QixNQUVBM3lCLEVBQUE4RixPQUFBOUYsRUFBQXd5QixPQUFBeHlCLEVBQUFtUSxXQU9BblEsRUFBQXd5QixPQUFBNXZCLFVBQ0E2dkIsT0FBQSxFQUNBRSxNQUFBLEdBV0FuMEIsT0FBQUMsZUFBQXVCLEVBQUF3eUIsT0FBQTl5QixVQUFBLFFBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXF5QixPQUFBMXpCLFNBQUEsS0FFQStCLElBQUEsU0FBQTZ4QixJQUNBdnlCLEtBQUF1eUIsU0FDQXZ5QixLQUFBc3lCLGVBQUF0eUIsS0FBQXF5QixPQUFBMXpCLE1BRUFxQixLQUFBcXlCLE9BQUExekIsT0FBQSxLQUNjcUIsS0FBQXV5QixXQUNkdnlCLEtBQUFxeUIsT0FBQTF6QixNQUFBcUIsS0FBQXN5QixtQkFRQTF5QixFQUFBd3lCLE9BQUE5eUIsVUFBQW1CLFFBQUEsV0FNQSxPQUxBVCxLQUFBcVEsTUFBQTVQLFVBQ0FiLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQW9FLFVBQUEsVUFDQXBFLEtBQUFxeUIsT0FBQTV4QixVQUNBVCxLQUFBcXlCLE9BQUEsS0FDQXJ5QixNQUVBSixFQUFBd3lCLFNBRUF2eUIsRUFBQSxTQUFBRCxHQXNCQUEsRUFBQTR5QixPQUFBLFdBQ0E1eUIsRUFBQW1RLFVBQUFsUyxLQUFBbUMsTUFDQUosRUFBQTJHLFdBQUEsV0FDQXZHLEtBQUF5USxjQUFBLEtBTUF6USxLQUFBeXlCLFFBQUF6eUIsS0FBQTRRLE9BQUEsSUFBQWhSLEVBQUF3eUIsT0FNQXB5QixLQUFBcXlCLE9BQUFyeUIsS0FBQXl5QixRQUFBSixPQUNBcnlCLEtBQUFrRSxVQUFBLFVBRUFsRSxLQUFBcVEsTUFBQWMsTUFBQW5SLEtBQUE0USxPQUFBNVEsS0FBQXlGLFFBQUF5TCxjQUNVaFMsS0FBQWMsUUFFVkosRUFBQThGLE9BQUE5RixFQUFBNHlCLE9BQUE1eUIsRUFBQW1RLFdBS0FuUSxFQUFBNHlCLE9BQUFod0IsVUFDQTZ2QixPQUFBLEVBQ0FFLE1BQUEsR0FXQW4wQixPQUFBQyxlQUFBdUIsRUFBQTR5QixPQUFBbHpCLFVBQUEsUUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBeXlCLFFBQUFGLE1BRUE3eEIsSUFBQSxTQUFBNnhCLEdBQ0F2eUIsS0FBQXl5QixRQUFBRixVQXVCQTN5QixFQUFBNHlCLE9BQUFsekIsVUFBQTZSLE1BQUEsV0FDQW5SLEtBQUFxUSxNQUFBakMsYUFDQXBPLEtBQUFxUSxNQUFBYyxNQUFBN0osTUFBQXRILEtBQUFxUSxNQUFBL00sV0FDQUEsb0JBQUFoQyxPQUFBLEdBQUFrQyxRQUFBeEQsS0FBQTRRLFNBTUFoUixFQUFBNHlCLE9BQUFsekIsVUFBQW1CLFFBQUEsV0FDQWIsRUFBQW1RLFVBQUF6USxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBb0UsVUFBQSxVQUNBcEUsS0FBQXl5QixRQUFBaHlCLFVBQ0FULEtBQUF5eUIsUUFBQSxLQUNBenlCLEtBQUFxeUIsT0FBQSxNQVlBenlCLEVBQUFtUSxVQUFBelEsVUFBQW96QixTQUFBLFdBRUEsT0FEQTF5QixLQUFBd0QsUUFBQTVELEVBQUE0eUIsUUFDQXh5QixNQUVBb0csT0FBQTJKLFlBRUFBLFVBQUF6USxVQUFBb3pCLFNBQUEsV0FFQSxPQURBMXlCLEtBQUF3RCxRQUFBNUQsRUFBQTR5QixRQUNBeHlCLE9BTUEsSUFBQTJ5QixFQUFBL3lCLEVBQUE0eUIsT0FnQkEsT0FmQTV5QixFQUFBNHlCLE9BQUEsSUFBQUcsRUFDQS95QixFQUFBa0csUUFBQWMsR0FBQSxnQkFBQW5CLEdBRUFBLEVBQUErc0Isa0JBQUFHLEVBQ0EveUIsRUFBQTR5QixPQUFBL3NCLEVBQUErc0IsT0FFQTV5QixFQUFBNHlCLE9BQUEsSUFBQUcsRUFFQWx0QixFQUFBK3NCLE9BQUE1eUIsRUFBQTR5QixTQUVBNXlCLEVBQUFrRyxRQUFBYyxHQUFBLGlCQUFBbkIsR0FDQUEsRUFBQStzQixrQkFBQUcsR0FDQWx0QixFQUFBK3NCLE9BQUEveEIsWUFHQWIsRUFBQTR5QixTQUVBM3lCLEVBQUEsU0FBQUQsR0F3UUEsT0FoUEFBLEVBQUFnekIsT0FBQSxTQUFBOXZCLEdBQ0FBLEVBQUFsRCxFQUFBbUQsV0FBQUQsRUFBQWxELEVBQUFnekIsT0FBQXB3QixVQUNBNUMsRUFBQW1RLFVBQUFsUyxLQUFBbUMsTUFNQUEsS0FBQXl5QixRQUFBenlCLEtBQUE0USxPQUFBLElBQUFoUixFQUFBd3lCLE9BQUF0dkIsRUFBQXV2QixRQVFBcnlCLEtBQUFxeUIsT0FBQXJ5QixLQUFBeXlCLFFBQUFKLE9BQ0FyeUIsS0FBQWtFLFVBQUEsVUFNQWxFLEtBQUE0ckIsT0FBQSxJQUFBaHNCLEVBQUF5ckIsY0FBQXpyQixFQUFBeUUsTUFBQUUsU0FDQXZFLEtBQUE0ckIsT0FBQTNqQixPQUFBLElBTUFqSSxLQUFBNnlCLFNBQUEsRUFNQTd5QixLQUFBOHlCLGNBRUE5eUIsS0FBQXl5QixRQUFBN2hCLGNBQUFwRCxhQUFBLEVBQ0F4TixLQUFBeXlCLFFBQUE3aEIsY0FBQW5ELGlCQUFBLFdBRUF6TixLQUFBdXlCLEtBQUF6dkIsRUFBQXl2QixNQUVBM3lCLEVBQUE4RixPQUFBOUYsRUFBQWd6QixPQUFBaHpCLEVBQUFtUSxXQU9BblEsRUFBQWd6QixPQUFBcHdCLFVBQ0E2dkIsT0FBQSxFQUNBRSxNQUFBLEdBU0FuMEIsT0FBQUMsZUFBQXVCLEVBQUFnekIsT0FBQXR6QixVQUFBLFNBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQTZ5QixRQUNBanpCLEVBQUFtVixVQUFBL0gsUUFBQXBOLEVBQUF5RSxNQUFBQyxRQUNBdEUsS0FBQTRyQixPQUFBaFEsZUFBQWhjLEVBQUFtVixVQUFBUSxTQUVBM1YsRUFBQXlFLE1BQUFFLFFBR0F2RSxLQUFBNHJCLE9BQUFoUSxlQUFBNWIsS0FBQXdGLFVBYUFwSCxPQUFBQyxlQUFBdUIsRUFBQWd6QixPQUFBdHpCLFVBQUEsUUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBeXlCLFFBQUFGLE1BRUE3eEIsSUFBQSxTQUFBNnhCLEdBQ0F2eUIsS0FBQXl5QixRQUFBRixVQUlBM3lCLEVBQUFnekIsT0FBQXR6QixVQUFBeXpCLE9BQUFuekIsRUFBQXFFLEtBQ0FyRSxFQUFBZ3pCLE9BQUF0ekIsVUFBQTB6QixRQUFBcHpCLEVBQUFxRSxLQUNBckUsRUFBQWd6QixPQUFBdHpCLFVBQUEyekIsTUFBQXJ6QixFQUFBcUUsS0FTQXJFLEVBQUFnekIsT0FBQXR6QixVQUFBcU8sTUFBQSxTQUFBdkYsRUFBQWdYLEVBQUF2QixHQU9BLEdBTEF6VixFQURBeEksRUFBQStCLFFBQUF5RyxJQUFBcEksS0FBQTZ5QixRQUNBanpCLEVBQUFtVixVQUFBUSxRQUVBdlYsS0FBQXlULFVBQUFyTCxHQUdBcEksS0FBQTRyQixPQUFBaFEsZUFBQXhULEtBQUF4SSxFQUFBeUUsTUFBQUMsUUFDQXRFLEtBQUE0ckIsT0FBQTdpQixPQUFBWCxHQUNBcEksS0FBQTRyQixPQUFBSixlQUFBNXJCLEVBQUF5RSxNQUFBQyxRQUFBOEQsR0FDQXBJLEtBQUFnekIsUUFBQTVxQixFQUFBZ1gsRUFBQXZCLFFBR0EsR0FEQTdkLEtBQUE0ckIsT0FBQUosZUFBQTVyQixFQUFBeUUsTUFBQUMsUUFBQThELEdBQ0FwSSxLQUFBNnlCLFFBQUEsQ0FFQSxJQUFBN3JCLEVBQUFoSCxLQUFBNHJCLE9BQUFydEIsSUFBQTZKLEdBQ0FwQixFQUFBb1ksT0FBQXhmLEVBQUFtRCxXQUFBcWMsRUFBQSxHQUNBcFksRUFBQTZXLFdBQ0EsSUFBQXFWLEVBQUF0ekIsRUFBQW1WLFVBQUFvYyxTQUFBLFNBQUF2eUIsR0FDQW9CLEtBQUEreUIsT0FBQW4wQixFQUFBd2dCLEVBQUF2QixJQUNrQjNlLEtBQUFjLE1BQUFvSSxHQUNsQnBJLEtBQUE4eUIsV0FBQWx3QixLQUFBc3dCLEdBRUF0ekIsRUFBQW1WLFVBQUEvSCxRQUFBcE4sRUFBQXlFLE1BQUFDLFNBQ0F0RSxLQUFBbXpCLGFBQUFuekIsS0FBQXdGLE1BQUE1RixFQUFBbVYsVUFBQVEsY0FHQXZWLEtBQUEreUIsT0FBQXpyQixNQUFBdEgsS0FBQXNELFdBR0EsT0FBQXRELE1BVUFKLEVBQUFnekIsT0FBQXR6QixVQUFBK2YsS0FBQSxTQUFBalgsR0FNQSxHQUpBQSxFQURBeEksRUFBQStCLFFBQUF5RyxJQUFBcEksS0FBQTZ5QixRQUNBanpCLEVBQUFtVixVQUFBUSxRQUVBdlYsS0FBQXlULFVBQUFyTCxHQUVBcEksS0FBQTZ5QixRQUVVLENBQ1YsSUFBQUssRUFBQXR6QixFQUFBbVYsVUFBQW9jLFNBQUFueEIsS0FBQWl6QixNQUFBL3pCLEtBQUFjLE1BQUFvSSxHQUNBcEksS0FBQTh5QixXQUFBbHdCLEtBQUFzd0IsUUFIQWx6QixLQUFBaXpCLE1BQUEzckIsTUFBQXRILEtBQUFzRCxXQU9BLE9BRkF0RCxLQUFBNHJCLE9BQUE3aUIsT0FBQVgsR0FDQXBJLEtBQUE0ckIsT0FBQUosZUFBQTVyQixFQUFBeUUsTUFBQUUsUUFBQTZELEdBQ0FwSSxNQXFCQUosRUFBQWd6QixPQUFBdHpCLFVBQUE4ekIsS0FBQSxXQTBCQSxPQXpCQXB6QixLQUFBNnlCLFNBQUEsRUFDQTd5QixLQUFBbXpCLGFBQUEsU0FBQS9xQixFQUFBZ1gsR0FDQSxHQUFBQSxFQUFBLEdBRUEsSUFBQWlVLEVBQUFyekIsS0FBQTRyQixPQUFBcnRCLElBQUE2Z0IsR0FFQSxHQUFBaVUsS0FBQXJtQixRQUFBcE4sRUFBQXlFLE1BQUFDLFNBQUErdUIsRUFBQWpyQixPQUFBZ1gsRUFBQSxDQUVBLElBQ0F2QixFQURBeVYsRUFBQWxVLEVBQUFwZixLQUFBeVQsVUFBQTRmLEVBQUFqckIsTUFFQWlyQixFQUFBeFYsV0FDQUEsRUFBQTdkLEtBQUF5VCxVQUFBNGYsRUFBQXhWLFVBQUF5VixHQUVBdHpCLEtBQUEreUIsT0FBQTNxQixFQUFBcEksS0FBQXlULFVBQUE0ZixFQUFBalUsUUFBQWtVLEVBQUF6VixNQUdVM2UsS0FBQWMsTUFDVkEsS0FBQXV6QixZQUFBLFNBQUFuckIsR0FDQSxJQUFBbU4sRUFBQTNWLEVBQUFtVixVQUFBdVgsaUJBQUExbkIsS0FBQThLLElBQUF0SCxFQUFBcEksS0FBQXVxQixXQUFBLElBQ0F2cUIsS0FBQTRyQixPQUFBaFEsZUFBQXJHLEtBQUEzVixFQUFBeUUsTUFBQUMsU0FDQXRFLEtBQUFpekIsTUFBQTdxQixJQUVVbEosS0FBQWMsTUFDVkosRUFBQW1WLFVBQUFuTyxHQUFBLGtCQUFBNUcsS0FBQW16QixjQUNBdnpCLEVBQUFtVixVQUFBbk8sR0FBQSxxQkFBQTVHLEtBQUF1ekIsYUFDQXZ6QixNQU1BSixFQUFBZ3pCLE9BQUF0ekIsVUFBQWswQixPQUFBLFdBQ0F4ekIsS0FBQTZ5QixVQUNBanpCLEVBQUFtVixVQUFBcE8sSUFBQSxxQkFBQTNHLEtBQUF1ekIsYUFDQTN6QixFQUFBbVYsVUFBQXBPLElBQUEsa0JBQUEzRyxLQUFBbXpCLGVBRUFuekIsS0FBQTZ5QixTQUFBLEVBRUEsUUFBQW4xQixFQUFBLEVBQXdCQSxFQUFBc0MsS0FBQTh5QixXQUFBeHhCLE9BQTRCNUQsSUFBQSxDQUNwRCxJQUFBcVEsRUFBQS9OLEtBQUE4eUIsV0FBQXAxQixHQUNBa0MsRUFBQW1WLFVBQUFzYSxNQUFBdGhCLEdBSUEsT0FGQS9OLEtBQUE4eUIsY0FDQTl5QixLQUFBNHJCLE9BQUE3aUIsT0FBQSxHQUNBL0ksTUFNQUosRUFBQWd6QixPQUFBdHpCLFVBQUFtQixRQUFBLFdBQ0FiLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQXd6QixTQUNBeHpCLEtBQUE4eUIsV0FBQSxLQUNBOXlCLEtBQUFvRSxVQUFBLFVBQ0FwRSxLQUFBeXlCLFFBQUFoeUIsVUFDQVQsS0FBQXl5QixRQUFBLEtBQ0F6eUIsS0FBQXF5QixPQUFBLEtBQ0FyeUIsS0FBQTRyQixPQUFBbnJCLFVBQ0FULEtBQUE0ckIsT0FBQSxNQUVBaHNCLEVBQUFnekIsU0FFQS95QixFQUFBLFNBQUFELEdBS0FBLEVBQUF1SyxZQUNBc3BCLFlBQUFuMEIsVUFBQW8wQixnQkFDQUQsWUFBQW4wQixVQUFBbzBCLGNBQUEsU0FBQUMsRUFBQUMsRUFBQWptQixHQUNBLElBQUFrbUIsRUFBQTd6QixLQUFBcU4sZUFBQXVtQixHQUNBam1CLEtBQUEsRUFDQSxRQUFBalEsRUFBQSxFQUFnQ0EsRUFBQW0yQixFQUFBdnlCLE9BQW9CNUQsSUFDcERtMkIsRUFBQW4yQixFQUFBaVEsR0FBQWdtQixFQUFBajJCLElBR0ErMUIsWUFBQW4wQixVQUFBdzBCLGdCQUFBLFNBQUFDLEVBQUFILEVBQUFqbUIsR0FDQSxJQUFBa21CLEVBQUE3ekIsS0FBQXFOLGVBQUF1bUIsR0FDQWptQixLQUFBLEVBQ0EsUUFBQWpRLEVBQUEsRUFBZ0NBLEVBQUFxMkIsRUFBQXp5QixPQUFpQjVELElBQ2pEcTJCLEVBQUFyMkIsR0FBQW0yQixFQUFBbjJCLEVBQUFpUSxRQU1BOU4sRUFBQSxTQUFBRCxHQW1nQkEsT0F4ZUFBLEVBQUFvMEIsT0FBQSxXQUNBLElBQUFseEIsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLE1BQ0EsU0FDQSxXQUNBMUQsRUFBQW8wQixRQUNBcDBCLEVBQUEvQixLQUFBbUMsTUFNQUEsS0FBQXVqQixRQUFBLEtBTUF2akIsS0FBQWkwQixVQUFBbnhCLEVBQUEyZixRQU1BemlCLEtBQUFrMEIsS0FBQSxLQU1BbDBCLEtBQUFtMEIsUUFBQXYwQixFQUFBcUUsS0FDQW5CLEVBQUFzeEIsZUFBQVgsYUFBQTN3QixFQUFBc3hCLGVBQUF4MEIsRUFBQW8wQixRQUNBaDBCLEtBQUFVLElBQUFvQyxFQUFBc3hCLEtBRUF0eEIsRUFBQXV4QixTQUNBcjBCLEtBQUFzMEIsT0FDQXh4QixFQUFBdXhCLE9BQUFyMEIsTUFFQUEsS0FBQW0wQixRQUFBcnhCLEVBQUF1eEIsU0FHVXowQixFQUFBa0IsU0FBQWdDLEVBQUFzeEIsTUFDVnAwQixLQUFBdTBCLEtBQUF6eEIsRUFBQXN4QixLQUFBbm5CLEtBQUFuSyxFQUFBdXhCLFFBQUFHLE1BQUExeEIsRUFBQTJ4QixVQUdBNzBCLEVBQUE4RixPQUFBOUYsRUFBQW8wQixRQUtBcDBCLEVBQUFvMEIsT0FBQXh4QixVQUNBNHhCLFNBQUF6MEIsRUFDQThpQixTQUFBLEVBQ0E0UixPQUFBejBCLEVBQUFxRSxLQUNBd3dCLFFBQUE3MEIsRUFBQXFFLE1BUUFyRSxFQUFBbzBCLE9BQUExMEIsVUFBQW9CLElBQUEsU0FBQWdMLEdBYUEsT0FaQUEsYUFBQTlMLEVBQUFvMEIsT0FDQXRvQixFQUFBNG9CLE9BQ0F0MEIsS0FBQXVqQixRQUFBN1gsRUFBQW5OLE1BRUFtTixFQUFBeW9CLFFBQUEsV0FDQW4wQixLQUFBVSxJQUFBZ0wsR0FDQTFMLEtBQUFtMEIsUUFBQW4wQixPQUNrQmQsS0FBQWMsTUFHbEJBLEtBQUF1akIsUUFBQTdYLEVBRUExTCxNQUtBSixFQUFBbzBCLE9BQUExMEIsVUFBQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBdWpCLFNBV0EzakIsRUFBQW8wQixPQUFBMTBCLFVBQUFpMUIsS0FBQSxTQUFBSCxFQUFBQyxFQUFBSSxHQW9CQSxPQW5CQSxJQUFBbHFCLFFBQUEsU0FBQWdxQixFQUFBem9CLEdBQ0E5TCxLQUFBazBCLEtBQUF0MEIsRUFBQW8wQixPQUFBTyxLQUFBSCxFQUNBLFNBQUFNLEdBQ0ExMEIsS0FBQWswQixLQUFBLEtBQ0FsMEIsS0FBQVUsSUFBQWcwQixHQUNBSCxFQUFBdjBCLE1BQ0FBLEtBQUFtMEIsUUFBQW4wQixNQUNBcTBCLEdBQ0FBLEVBQUFyMEIsT0FFY2QsS0FBQWMsTUFDZCxTQUFBMjBCLEdBQ0EzMEIsS0FBQWswQixLQUFBLEtBQ0Fwb0IsRUFBQTZvQixHQUNBRixHQUNBQSxFQUFBRSxJQUVjejFCLEtBQUFjLFFBQ0pkLEtBQUFjLFFBT1ZKLEVBQUFvMEIsT0FBQTEwQixVQUFBbUIsUUFBQSxXQVFBLE9BUEFiLEVBQUFOLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUF1akIsUUFBQSxLQUNBdmpCLEtBQUFrMEIsT0FDQXQwQixFQUFBbzBCLE9BQUFZLHlCQUFBNTBCLEtBQUFrMEIsTUFDQWwwQixLQUFBazBCLEtBQUFXLFFBQ0E3MEIsS0FBQWswQixLQUFBLE1BRUFsMEIsTUFTQTVCLE9BQUFDLGVBQUF1QixFQUFBbzBCLE9BQUExMEIsVUFBQSxVQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFzQixPQUFBLEtBVUFsRCxPQUFBQyxlQUFBdUIsRUFBQW8wQixPQUFBMTBCLFVBQUEsWUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBdWpCLFFBQ0F2akIsS0FBQXVqQixRQUFBMUYsU0FFQSxLQVdBemYsT0FBQUMsZUFBQXVCLEVBQUFvMEIsT0FBQTEwQixVQUFBLFVBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXVqQixRQUNBdmpCLEtBQUF1akIsUUFBQWppQixPQUVBLEtBWUFsRCxPQUFBQyxlQUFBdUIsRUFBQW8wQixPQUFBMTBCLFVBQUEsb0JBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXVqQixRQUNBdmpCLEtBQUF1akIsUUFBQXVSLGlCQUVBLEtBVUFsMUIsRUFBQW8wQixPQUFBMTBCLFVBQUF5MUIsVUFBQSxTQUFBemlCLEdBQ0EsSUFBQTBpQixFQUFBMWlCLEVBQUEsR0FBQWhSLE9BQUEsRUFDQWlkLEVBQUF5VyxFQUFBMWlCLEVBQUFoUixPQUFBLEVBQ0FxRyxFQUFBcXRCLEVBQUExaUIsRUFBQSxHQUFBaFIsT0FBQWdSLEVBQUFoUixPQUNBb0ssRUFBQTFMLEtBQUF5RixRQUFBMEgsYUFBQW9SLEVBQUE1VyxFQUFBM0gsS0FBQXlGLFFBQUFTLFlBQ0E4dUIsR0FBQSxJQUFBelcsSUFDQWpNLE9BRUEsUUFBQXZVLEVBQUEsRUFBd0JBLEVBQUF3Z0IsRUFBY3hnQixJQUN0QzJOLEVBQUFnb0IsY0FBQXBoQixFQUFBdlUsTUFHQSxPQURBaUMsS0FBQXVqQixRQUFBN1gsRUFDQTFMLE1BT0FKLEVBQUFvMEIsT0FBQTEwQixVQUFBMjFCLE9BQUEsU0FBQXJCLEdBQ0EsR0FBQWgwQixFQUFBOEQsU0FBQWt3QixHQUNBNXpCLEtBQUErMEIsVUFBQS8wQixLQUFBazFCLFFBQUF0QixRQUNVLENBR1YsSUFGQSxJQUFBdUIsRUFBQSxJQUFBNWlCLGFBQUF2UyxLQUFBc0IsUUFDQTh6QixFQUFBcDFCLEtBQUE4MEIsaUJBQ0FqQixFQUFBLEVBQWtDQSxFQUFBdUIsRUFBdUJ2QixJQUV6RCxJQURBLElBQUF3QixFQUFBcjFCLEtBQUFrMUIsUUFBQXJCLEdBQ0FuMkIsRUFBQSxFQUFnQ0EsRUFBQTIzQixFQUFBL3pCLE9BQXlCNUQsSUFDekR5M0IsRUFBQXozQixJQUFBMjNCLEVBQUEzM0IsR0FJQXkzQixJQUFBeGUsSUFBQSxTQUFBMmUsR0FDQSxPQUFBQSxFQUFBRixJQUVBcDFCLEtBQUErMEIsVUFBQUksR0FFQSxPQUFBbjFCLE1BUUFKLEVBQUFvMEIsT0FBQTEwQixVQUFBNDFCLFFBQUEsU0FBQXJCLEdBQ0EsR0FBQWowQixFQUFBOEQsU0FBQW13QixHQUNBLE9BQUE3ekIsS0FBQXFOLGVBQUF3bUIsR0FDVSxPQUFBN3pCLEtBQUE4MEIsaUJBQ1YsT0FBQTkwQixLQUFBazFCLFFBQUEsR0FHQSxJQURBLElBQUFoekIsS0FDQW5FLEVBQUEsRUFBNEJBLEVBQUFpQyxLQUFBODBCLGlCQUEyQi8yQixJQUN2RG1FLEVBQUFuRSxHQUFBaUMsS0FBQXFOLGVBQUF0UCxHQUVBLE9BQUFtRSxHQVFBdEMsRUFBQW8wQixPQUFBMTBCLFVBQUErTixlQUFBLFNBQUF3bUIsR0FDQSxPQUFBN3pCLEtBQUF1akIsUUFBQWxXLGVBQUF3bUIsSUFVQWowQixFQUFBbzBCLE9BQUExMEIsVUFBQW9JLE1BQUEsU0FBQWlHLEVBQUF2RSxHQUNBQSxFQUFBeEosRUFBQW1ELFdBQUFxRyxFQUFBcEosS0FBQTZkLFVBSUEsSUFIQSxJQUFBMFgsRUFBQTN3QixLQUFBMEUsTUFBQXRKLEtBQUF5RixRQUFBUyxXQUFBbEcsS0FBQXlULFVBQUE5RixJQUNBNm5CLEVBQUE1d0IsS0FBQTBFLE1BQUF0SixLQUFBeUYsUUFBQVMsV0FBQWxHLEtBQUF5VCxVQUFBckssSUFDQTRrQixLQUNBdHdCLEVBQUEsRUFBd0JBLEVBQUFzQyxLQUFBODBCLGlCQUEyQnAzQixJQUNuRHN3QixFQUFBdHdCLEdBQUFzQyxLQUFBazFCLFFBQUF4M0IsR0FBQWdLLE1BQUE2dEIsRUFBQUMsR0FHQSxPQURBLElBQUE1MUIsRUFBQW8wQixRQUFBZSxVQUFBL0csSUFRQXB1QixFQUFBbzBCLE9BQUExMEIsVUFBQW0yQixTQUFBLFdBQ0EsR0FBQXoxQixLQUFBczBCLE9BQ0EsUUFBQTUyQixFQUFBLEVBQTRCQSxFQUFBc0MsS0FBQTgwQixpQkFBMkJwM0IsSUFDdkRvRyxNQUFBeEUsVUFBQW1qQixRQUFBNWtCLEtBQUFtQyxLQUFBcU4sZUFBQTNQLElBR0EsT0FBQXNDLE1BUUE1QixPQUFBQyxlQUFBdUIsRUFBQW8wQixPQUFBMTBCLFVBQUEsV0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBaTBCLFdBRUF2ekIsSUFBQSxTQUFBZzFCLEdBQ0ExMUIsS0FBQWkwQixZQUFBeUIsSUFDQTExQixLQUFBaTBCLFVBQUF5QixFQUNBMTFCLEtBQUF5MUIsZUFRQTcxQixFQUFBa0gsUUFBQWMsTUFBQWhJLEVBQUFvMEIsUUFNQXAwQixFQUFBbzBCLE9BQUEyQixrQkFNQS8xQixFQUFBbzBCLE9BQUE0QixRQUFBLEdBT0FoMkIsRUFBQW8wQixPQUFBZSxVQUFBLFNBQUF6aUIsR0FDQSxXQUFBMVMsRUFBQW8wQixRQUFBZSxVQUFBemlCLElBUUExUyxFQUFBbzBCLE9BQUE2QixRQUFBLFNBQUF6QixHQUNBLElBQUExb0IsRUFBQSxJQUFBOUwsRUFBQW8wQixPQUNBLE9BQUF0b0IsRUFBQTZvQixLQUFBSCxHQUFBbm5CLEtBQUEsV0FDQSxPQUFBdkIsS0FPQTlMLEVBQUFvMEIsT0FBQVkseUJBQUEsU0FBQWtCLEdBQ0EsSUFBQXh0QixFQUFBMUksRUFBQW8wQixPQUFBMkIsZUFBQXgwQixRQUFBMjBCLElBQ0EsSUFBQXh0QixHQUNBMUksRUFBQW8wQixPQUFBMkIsZUFBQXAwQixPQUFBK0csRUFBQSxJQVdBMUksRUFBQW8wQixPQUFBTyxLQUFBLFNBQUFILEVBQUFDLEVBQUFJLEdBRUFKLEVBQUF6MEIsRUFBQW1ELFdBQUFzeEIsRUFBQXowQixFQUFBcUUsTUFFQSxJQUFBOHhCLEVBQUEzQixFQUFBL3pCLE1BQUEsaUJBQ0EsR0FBQTAxQixFQUFBLENBR0EsSUFGQSxJQUFBQyxFQUFBRCxFQUFBLEdBQUExMEIsTUFBQSxLQUNBNDBCLEVBQUFELEVBQUEsR0FDQXQ0QixFQUFBLEVBQTRCQSxFQUFBczRCLEVBQUExMEIsT0FBdUI1RCxJQUNuRCxHQUFBa0MsRUFBQW8wQixPQUFBa0MsYUFBQUYsRUFBQXQ0QixJQUFBLENBQ0F1NEIsRUFBQUQsRUFBQXQ0QixHQUNBLE1BR0EwMkIsSUFBQStCLFFBQUFKLEVBQUEsR0FBQUUsR0FFQSxTQUFBRyxFQUFBenJCLEdBR0EsR0FGQS9LLEVBQUFvMEIsT0FBQVkseUJBQUFrQixHQUNBbDJCLEVBQUFvMEIsT0FBQWp1QixLQUFBLFFBQUE0RSxJQUNBOHBCLEVBR0EsTUFBQTlwQixFQUZBOHBCLEVBQUE5cEIsR0FLQSxTQUFBMHJCLElBR0EsSUFEQSxJQUFBQyxFQUFBLEVBQ0E1NEIsRUFBQSxFQUE0QkEsRUFBQWtDLEVBQUFvMEIsT0FBQTJCLGVBQUFyMEIsT0FBdUM1RCxJQUNuRTQ0QixHQUFBMTJCLEVBQUFvMEIsT0FBQTJCLGVBQUFqNEIsR0FBQXV6QixTQUVBcnhCLEVBQUFvMEIsT0FBQWp1QixLQUFBLFdBQUF1d0IsRUFBQTEyQixFQUFBbzBCLE9BQUEyQixlQUFBcjBCLFFBRUEsSUFBQXcwQixFQUFBLElBQUFTLGVBa0NBLE9BakNBVCxFQUFBVSxLQUFBLE1BQUE1MkIsRUFBQW8wQixPQUFBNEIsUUFBQXhCLEdBQUEsR0FDQTBCLEVBQUFXLGFBQUEsY0FFQVgsRUFBQTdFLFNBQUEsRUFDQXJ4QixFQUFBbzBCLE9BQUEyQixlQUFBL3lCLEtBQUFrekIsR0FDQUEsRUFBQVksaUJBQUEsa0JBQ0EsTUFBQVosRUFBQWEsT0FDQS8yQixFQUFBNkYsUUFBQWtHLGdCQUFBbXFCLEVBQUFjLFVBQUEzcEIsS0FBQSxTQUFBeW5CLEdBQ0FvQixFQUFBN0UsU0FBQSxFQUNBb0YsSUFDQWhDLEVBQUFLLEdBQ0E5MEIsRUFBQW8wQixPQUFBWSx5QkFBQWtCLEdBQ0EsSUFBQWwyQixFQUFBbzBCLE9BQUEyQixlQUFBcjBCLFFBRUExQixFQUFBbzBCLE9BQUFqdUIsS0FBQSxVQUVrQnl1QixNQUFBLFdBQ2xCNTBCLEVBQUFvMEIsT0FBQVkseUJBQUFrQixHQUNBTSxFQUFBLDZDQUFBaEMsS0FHQWdDLEVBQUEsdUNBQUFoQyxLQUdBMEIsRUFBQVksaUJBQUEsUUFBQU4sR0FDQU4sRUFBQVksaUJBQUEsb0JBQUExdkIsR0FDQUEsRUFBQTZ2QixtQkFFQWYsRUFBQTdFLFNBQUFqcUIsRUFBQXN0QixPQUFBdHRCLEVBQUEwTixNQUFBLElBQ0EyaEIsT0FHQVAsRUFBQWdCLE9BQ0FoQixHQU9BbDJCLEVBQUFvMEIsT0FBQStDLGdCQUFBLFdBS0EsT0FKQW4zQixFQUFBbzBCLE9BQUEyQixlQUFBanVCLFFBQUFpQyxRQUFBLFNBQUFtc0IsR0FDQWwyQixFQUFBbzBCLE9BQUFZLHlCQUFBa0IsR0FDQUEsRUFBQWpCLFVBRUFqMUIsRUFBQW8wQixRQVdBcDBCLEVBQUFvMEIsT0FBQWtDLGFBQUEsU0FBQTlCLEdBQ0EsSUFBQTZCLEVBQUE3QixFQUFBL3lCLE1BQUEsS0FHQSxPQUZBNDBCLE1BQUEzMEIsT0FBQSxHQUVBLEtBREEwMUIsU0FBQUMsY0FBQSxTQUFBQyxZQUFBLFNBQUFqQixJQU9BcjJCLEVBQUEwMEIsT0FBQSxXQUNBLElBQUFELEVBQUFJLEVBQ0EsU0FBQTBDLElBRUF2M0IsRUFBQW8wQixPQUFBcnRCLElBQUEsT0FBQTB0QixHQUNBejBCLEVBQUFvMEIsT0FBQXJ0QixJQUFBLFFBQUE4dEIsR0FFQSxXQUFBbHFCLFFBQUEsU0FBQXNCLEVBQUF1ckIsR0FDQS9DLEVBQUEsV0FDQXhvQixLQUVBNG9CLEVBQUEsV0FDQTJDLEtBR0F4M0IsRUFBQW8wQixPQUFBcHRCLEdBQUEsT0FBQXl0QixHQUNBejBCLEVBQUFvMEIsT0FBQXB0QixHQUFBLFFBQUE2dEIsS0FDVXhuQixLQUFBa3FCLEdBQUEzQyxNQUFBLFNBQUE3cEIsR0FFVixNQURBd3NCLElBQ0EsSUFBQWwzQixNQUFBMEssTUFHQS9LLEVBQUFvMEIsU0FFQW4wQixFQUFBLFNBQUFELEdBcU1BLE9BNUxBQSxFQUFBeTNCLGVBQUEsV0FDQSxJQUFBdjBCLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxZQUNBLFFBQ0ExRCxFQUFBeTNCLGdCQUNBejNCLEVBQUFtUSxVQUFBbFMsS0FBQW1DLEtBQUE4QyxHQU1BOUMsS0FBQXMzQixRQUFBeDBCLEVBQUF3MEIsUUFNQXQzQixLQUFBdTNCLFlBQUEsRUFNQXYzQixLQUFBdzNCLFdBQUEsRUFNQXgzQixLQUFBOGUsVUFBQTllLEtBQUE0USxPQUFBLElBQUFoUixFQUFBbWIsS0FDQS9hLEtBQUE4ZSxVQUFBM1osS0FBQTRXLGVBQUEsRUFBQS9iLEtBQUF5RixRQUFBcUgsYUFNQTlNLEtBQUF5M0IsWUFBQXozQixLQUFBeUYsUUFBQWl5QixtQkFDQTEzQixLQUFBeTNCLFlBQUFqMEIsUUFBQXhELEtBQUE4ZSxXQUNBOWUsS0FBQWlPLEtBQUFuTCxFQUFBbUwsS0FNQWpPLEtBQUFtWixVQUFBLElBQUF2WixFQUFBaUMsTUFBQTdCLEtBQUF5M0IsWUFBQXRlLFVBQUF2WixFQUFBNk8sS0FBQXNILFdBQ0EvVixLQUFBbVosVUFBQXhhLE1BQUFtRSxFQUFBcVcsVUFNQW5aLEtBQUEybEIsT0FBQSxJQUFBL2xCLEVBQUFpQyxNQUFBN0IsS0FBQXkzQixZQUFBOVIsT0FBQS9sQixFQUFBNk8sS0FBQXVNLE9BQ0FoYixLQUFBMmxCLE9BQUFobkIsTUFBQW1FLEVBQUE2aUIsT0FNQTNsQixLQUFBMjNCLE1BQUEsR0FFQS8zQixFQUFBOEYsT0FBQTlGLEVBQUF5M0IsZUFBQXozQixFQUFBbVEsV0FNQW5RLEVBQUF5M0IsZUFBQTcwQixVQUNBMlcsVUFBQSxJQUNBd00sT0FBQSxFQUNBMVgsS0FBQSxPQUNBcXBCLFFBQUExM0IsRUFBQXFFLE1BU0E3RixPQUFBQyxlQUFBdUIsRUFBQXkzQixlQUFBLzNCLFVBQUEsU0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBd3NCLGVBQUF4c0IsS0FBQXdGLFVBUUE1RixFQUFBeTNCLGVBQUEvM0IsVUFBQWt0QixlQUFBLFNBQUFwa0IsR0FFQSxPQURBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxJQUNBLElBQUFwSSxLQUFBdTNCLFlBQUFudkIsR0FBQXBJLEtBQUF1M0IsY0FBQSxJQUFBdjNCLEtBQUF3M0IsV0FBQXB2QixHQUFBcEksS0FBQXczQixXQUNBNTNCLEVBQUF5RSxNQUFBQyxRQUVBMUUsRUFBQXlFLE1BQUFFLFNBUUEzRSxFQUFBeTNCLGVBQUEvM0IsVUFBQXFPLE1BQUEsU0FBQXZGLEdBQ0EsUUFBQXBJLEtBQUF1M0IsV0FRQSxVQUFBdDNCLE1BQUEsbURBUEFELEtBQUF1M0IsV0FBQXYzQixLQUFBeVQsVUFBQXJMLEdBQ0FwSSxLQUFBeTNCLFlBQUE5cEIsTUFBQTNOLEtBQUF1M0IsWUFDQSxJQUFBL3hCLEVBQUF4RixLQUFBeUYsUUFBQXFILFlBT0EsT0FOQTlNLEtBQUE4ZSxVQUFBM1osS0FBQXVNLHNCQUFBbE0sR0FDQXhGLEtBQUE4ZSxVQUFBM1osS0FBQTRXLGVBQUEsRUFBQXZXLEdBQ0F4RixLQUFBOGUsVUFBQTNaLEtBQUE0VyxlQUFBLEVBQUEvYixLQUFBdTNCLFlBSUF2M0IsTUFPQUosRUFBQXkzQixlQUFBLzNCLFVBQUFzNEIsZ0JBQUEsU0FBQUMsR0FFQSxPQURBNzNCLEtBQUF5M0IsWUFBQUcsZ0JBQUFDLEdBQ0E3M0IsTUFPQUosRUFBQXkzQixlQUFBLzNCLFVBQUErZixLQUFBLFNBQUFqWCxHQVdBLE9BVEFwSSxLQUFBODNCLGFBRUE5M0IsS0FBQXczQixVQUFBeDNCLEtBQUF5VCxVQUFBckwsR0FDQXBJLEtBQUE4ZSxVQUFBM1osS0FBQTRXLGVBQUEsRUFBQS9iLEtBQUF3M0IsV0FDQXgzQixLQUFBeUYsUUFBQXVJLGFBQUFoTyxLQUFBeVAsVUFDQXpQLEtBQUF5UCxTQUFBelAsS0FBQXlGLFFBQUFtSSxXQUFBLFdBQ0E1TixLQUFBeTNCLFlBQUFwWSxLQUFBcmYsS0FBQXdGLE9BQ0F4RixLQUFBczNCLFdBQ1VwNEIsS0FBQWMsV0FBQXczQixVQUFBeDNCLEtBQUF3RixPQUNWeEYsTUFNQUosRUFBQXkzQixlQUFBLzNCLFVBQUF3NEIsV0FBQSxXQVFBLE9BUEEsSUFBQTkzQixLQUFBdTNCLGFBRUF2M0IsS0FBQThlLFVBQUEzWixLQUFBdU0sc0JBQUExUixLQUFBdTNCLFdBQUF2M0IsS0FBQXVxQixZQUNBdnFCLEtBQUE4ZSxVQUFBM1osS0FBQTRXLGVBQUEsRUFBQW5YLEtBQUE4SyxJQUFBMVAsS0FBQXdGLE1BQUF4RixLQUFBdTNCLGFBQ0F2M0IsS0FBQXlGLFFBQUF1SSxhQUFBaE8sS0FBQXlQLFVBQ0F6UCxLQUFBdzNCLFdBQUEsR0FFQXgzQixNQVFBNUIsT0FBQUMsZUFBQXVCLEVBQUF5M0IsZUFBQS8zQixVQUFBLFFBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXkzQixZQUFBeHBCLE1BRUF2TixJQUFBLFNBQUF1TixHQUNBak8sS0FBQXkzQixZQUFBeHBCLFVBT0FyTyxFQUFBeTNCLGVBQUEvM0IsVUFBQW1CLFFBQUEsV0FZQSxPQVhBVCxLQUFBeUYsUUFBQXVJLGFBQUFoTyxLQUFBeVAsVUFDQTdQLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQXMzQixRQUFBLEtBQ0F0M0IsS0FBQXkzQixZQUFBcnBCLGFBQ0FwTyxLQUFBeTNCLFlBQUEsS0FDQXozQixLQUFBOGUsVUFBQXJlLFVBQ0FULEtBQUE4ZSxVQUFBLEtBQ0E5ZSxLQUFBbVosVUFBQTFZLFVBQ0FULEtBQUFtWixVQUFBLEtBQ0FuWixLQUFBMmxCLE9BQUFsbEIsVUFDQVQsS0FBQTJsQixPQUFBLEtBQ0EzbEIsTUFFQUosRUFBQXkzQixpQkFFQXgzQixFQUFBLFNBQUFELEdBdVhBLE9BeFdBQSxFQUFBbTRCLFdBQUEsV0FDQSxJQUFBajFCLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxZQUNBLFFBQ0ExRCxFQUFBbTRCLFlBQ0FuNEIsRUFBQWd6QixPQUFBLzBCLEtBQUFtQyxLQUFBOEMsR0FNQTlDLEtBQUF5M0IsWUFBQSxLQU1BejNCLEtBQUFtWixVQUFBLElBQUF2WixFQUFBZ0MsT0FBQWtCLEVBQUFxVyxVQUFBdlosRUFBQTZPLEtBQUFzSCxXQU1BL1YsS0FBQTJsQixPQUFBLElBQUEvbEIsRUFBQWdDLE9BQUFrQixFQUFBNmlCLE9BQUEvbEIsRUFBQTZPLEtBQUF1TSxPQU1BaGIsS0FBQWc0QixNQUFBLEtBTUFoNEIsS0FBQWk0QixVQUFBcjRCLEVBQUFtRCxXQUFBRCxFQUFBbzFCLFVBQUEsSUFPQWw0QixLQUFBbTRCLE9BQUFyMUIsRUFBQXMxQixNQU1BcDRCLEtBQUFxTyxNQUFBLEtBRUFyTyxLQUFBaU8sS0FBQW5MLEVBQUFtTCxLQUNBak8sS0FBQW80QixNQUFBcDRCLEtBQUFtNEIsT0FDQW40QixLQUFBa0UsV0FDQSxZQUNBLFlBR0F0RSxFQUFBOEYsT0FBQTlGLEVBQUFtNEIsV0FBQW40QixFQUFBZ3pCLFFBS0FoekIsRUFBQW00QixXQUFBdjFCLFVBQ0F5TCxLQUFBLE9BQ0FrTCxVQUFBLElBQ0F3TSxPQUFBLEVBQ0F5UyxNQUFBLEVBQ0FGLGFBTUF0NEIsRUFBQW00QixXQUFBdHBCLE1BQ0E0cEIsS0FBQSxPQUNBQyxTQUFBLFdBQ0FDLFNBQUEsV0FDQUMsT0FBQSxTQUNBQyxPQUFBLFVBT0E3NEIsRUFBQW00QixXQUFBejRCLFVBQUF5ekIsT0FBQSxTQUFBM3FCLEdBRUFwSSxLQUFBeTNCLFlBQUEsSUFBQTczQixFQUFBeTNCLGVBQ0FyM0IsS0FBQWc0QixNQUNBaDRCLEtBQUF5M0IsWUFBQUcsZ0JBQUE1M0IsS0FBQWc0QixPQUVBaDRCLEtBQUF5M0IsWUFBQXhwQixLQUFBak8sS0FBQXFPLE1BR0FyTyxLQUFBeTNCLFlBQUFqMEIsUUFBQXhELEtBQUE0USxRQUNBNVEsS0FBQW1aLFVBQUEzVixRQUFBeEQsS0FBQXkzQixZQUFBdGUsV0FDQW5aLEtBQUEybEIsT0FBQW5pQixRQUFBeEQsS0FBQXkzQixZQUFBOVIsUUFFQXZkLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0FwSSxLQUFBeTNCLFlBQUE5cEIsTUFBQXZGLElBUUF4SSxFQUFBbTRCLFdBQUF6NEIsVUFBQTJ6QixNQUFBLFNBQUE3cUIsR0FLQSxPQUpBcEksS0FBQXkzQixjQUNBcnZCLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0FwSSxLQUFBeTNCLFlBQUFwWSxLQUFBalgsSUFFQXBJLE1BUUFKLEVBQUFtNEIsV0FBQXo0QixVQUFBMHpCLFFBQUEsU0FBQTVxQixHQUdBLE9BRkFwSSxLQUFBeTNCLFlBQUFLLGFBQ0E5M0IsS0FBQTRyQixPQUFBN2lCLE9BQUEvSSxLQUFBeVQsVUFBQXJMLElBQ0FwSSxNQWNBSixFQUFBbTRCLFdBQUF6NEIsVUFBQW81QixjQUFBLFdBRUEsT0FEQTk0QixFQUFBbVYsVUFBQWlkLFdBQUFoeUIsS0FBQW1aLFdBQ0FuWixNQU9BSixFQUFBbTRCLFdBQUF6NEIsVUFBQXE1QixnQkFBQSxXQUVBLE9BREEvNEIsRUFBQW1WLFVBQUFtZCxhQUFBbHlCLEtBQUFtWixXQUNBblosTUFzQkE1QixPQUFBQyxlQUFBdUIsRUFBQW00QixXQUFBejRCLFVBQUEsUUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBcU8sT0FFQTNOLElBQUEsU0FBQXVOLEdBQ0EsSUFBQTJxQixHQUNBaDVCLEVBQUFtNEIsV0FBQXRwQixLQUFBNHBCLEtBQ0F6NEIsRUFBQW00QixXQUFBdHBCLEtBQUErcEIsT0FDQTU0QixFQUFBbTRCLFdBQUF0cEIsS0FBQTZwQixTQUNBMTRCLEVBQUFtNEIsV0FBQXRwQixLQUFBOHBCLFVBQ0F2bUIsU0FBQS9ELEdBQ0EsT0FBQWpPLEtBQUFtNEIsUUFBQVMsRUFDQTU0QixLQUFBZzRCLE1BQUEsS0FFQSxPQUFBaDRCLEtBQUF5M0IsYUFDQXozQixLQUFBeTNCLFlBQUF4cEIsU0FFYyxDQUNkLElBQUE0cUIsRUFBQTc0QixLQUFBODRCLGtCQUFBN3FCLEVBQUFqTyxLQUFBbTRCLFFBQ0FOLEVBQUE3M0IsS0FBQXlGLFFBQUFzekIsbUJBQUFGLEVBQUEsR0FBQUEsRUFBQSxJQUNBNzRCLEtBQUFnNEIsTUFBQUgsRUFDQSxPQUFBNzNCLEtBQUF5M0IsYUFDQXozQixLQUFBeTNCLFlBQUFHLGdCQUFBNTNCLEtBQUFnNEIsT0FHQWg0QixLQUFBcU8sTUFBQUosS0FTQXJPLEVBQUFtNEIsV0FBQXo0QixVQUFBdzVCLGtCQUFBLFNBQUE3cUIsRUFBQW1xQixHQUNBLElBQ0FZLEVBQUFqVixLQUNBa1YsRUFBQSxJQUFBMW1CLGFBQUF5bUIsR0FDQUUsRUFBQSxJQUFBM21CLGFBQUF5bUIsR0FDQUcsRUFBQSxFQUNBLEdBQUFsckIsSUFBQXJPLEVBQUFtNEIsV0FBQXRwQixLQUFBZ3FCLE9BRUFPLEVBREFHLEVBQUFuNUIsS0FBQWk0QixVQUFBMzJCLE9BQUEsTUFFVSxDQUNWLElBQUE4M0IsRUFBQSx5Q0FBQUMsS0FBQXByQixHQUNBbXJCLElBQ0FELEVBQUFsbEIsU0FBQW1sQixFQUFBLE1BQ0FuckIsRUFBQW1yQixFQUFBLEdBRUFKLEVBREFHLEVBQUF2MEIsS0FBQThLLElBQUF5cEIsRUFBQSxJQUlBLFFBQUFoNkIsRUFBQSxFQUF3QkEsRUFBQTY1QixJQUFzQjc1QixFQUFBLENBQzlDLElBQ0E2WixFQURBclUsRUFBQSxHQUFBeEYsRUFBQXlGLEtBQUFDLElBRUEsT0FBQW9KLEdBQ0EsS0FBQXJPLEVBQUFtNEIsV0FBQXRwQixLQUFBNHBCLEtBQ0FyZixFQUFBN1osR0FBQWc2QixFQUFBLElBQ0EsTUFDQSxLQUFBdjVCLEVBQUFtNEIsV0FBQXRwQixLQUFBK3BCLE9BQ0F4ZixFQUFBLEVBQUE3WixFQUFBLEVBQUF3RixFQUFBLEVBQ0EsTUFDQSxLQUFBL0UsRUFBQW00QixXQUFBdHBCLEtBQUE4cEIsU0FDQXZmLEVBQUFyVSxHQUFBLEVBQUF4RixFQUFBLE1BQ0EsTUFDQSxLQUFBUyxFQUFBbTRCLFdBQUF0cEIsS0FBQTZwQixTQUVBdGYsRUFEQSxFQUFBN1osRUFDQXdGLElBQUEsR0FBQXhGLEVBQUEsYUFFQSxFQUVBLE1BQ0EsS0FBQVMsRUFBQW00QixXQUFBdHBCLEtBQUFncUIsT0FDQXpmLEVBQUFoWixLQUFBaTRCLFVBQUE5NEIsRUFBQSxHQUNBLE1BQ0EsUUFDQSxVQUFBNmtCLFVBQUEsa0NBQUEvVixHQUVBLElBQUErSyxHQUNBaWdCLEVBQUE5NUIsSUFBQTZaLEVBQUFwVSxLQUFBRSxJQUFBc3pCLEVBQUFqNUIsR0FDQSs1QixFQUFBLzVCLEdBQUE2WixFQUFBcFUsS0FBQXFkLElBQUFtVyxFQUFBajVCLEtBRUE4NUIsRUFBQTk1QixHQUFBLEVBQ0ErNUIsRUFBQS81QixHQUFBLEdBR0EsT0FDQTg1QixFQUNBQyxJQVdBdDVCLEVBQUFtNEIsV0FBQXo0QixVQUFBZzZCLFlBQUEsU0FBQUwsRUFBQUMsRUFBQWQsR0FHQSxJQUZBLElBQUFtQixFQUFBLEVBQ0E1eEIsRUFBQXN4QixFQUFBMzNCLE9BQ0E1RCxFQUFBLEVBQXdCQSxFQUFBaUssRUFBU2pLLElBQ2pDNjdCLEdBQUFOLEVBQUF2N0IsR0FBQWtILEtBQUFxZCxJQUFBdmtCLEVBQUEwNkIsR0FBQWMsRUFBQXg3QixHQUFBa0gsS0FBQUUsSUFBQXBILEVBQUEwNkIsR0FFQSxPQUFBbUIsR0FPQTM1QixFQUFBbTRCLFdBQUF6NEIsVUFBQWs2QixpQkFBQSxXQU9BLElBTkEsSUFBQVgsRUFBQTc0QixLQUFBODRCLGtCQUFBOTRCLEtBQUFxTyxNQUFBLEdBQ0E0cUIsRUFBQUosRUFBQSxHQUNBSyxFQUFBTCxFQUFBLEdBQ0E1YyxFQUFBLEVBQ0F3ZCxFQUFBLEVBQUE3MEIsS0FBQUMsR0FFQW5ILEVBQUEsRUFBd0JBLEVBQUEsRUFBT0EsSUFDL0J1ZSxFQUFBclgsS0FBQThLLElBQUExUCxLQUFBczVCLFlBQUFMLEVBQUFDLEVBQUF4N0IsRUFBQSxFQUFBKzdCLEdBQUF4ZCxHQUVBLE9BQUFqYyxLQUFBczVCLFlBQUFMLEVBQUFDLEVBQUFsNUIsS0FBQW00QixRQUFBbGMsR0FlQTdkLE9BQUFDLGVBQUF1QixFQUFBbTRCLFdBQUF6NEIsVUFBQSxZQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFxTyxRQUFBek8sRUFBQW00QixXQUFBdHBCLEtBQUFncUIsVUFHQXo0QixLQUFBaTRCLFdBR0F2M0IsSUFBQSxTQUFBdzNCLEdBQ0FsNEIsS0FBQWk0QixVQUFBQyxFQUNBbDRCLEtBQUFpTyxLQUFBck8sRUFBQW00QixXQUFBdHBCLEtBQUFncUIsVUFXQXI2QixPQUFBQyxlQUFBdUIsRUFBQW00QixXQUFBejRCLFVBQUEsU0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBbTRCLFFBQUEsSUFBQXZ6QixLQUFBQyxLQUVBbkUsSUFBQSxTQUFBMDNCLEdBQ0FwNEIsS0FBQW00QixPQUFBQyxFQUFBeHpCLEtBQUFDLEdBQUEsSUFFQTdFLEtBQUFpTyxLQUFBak8sS0FBQXFPLFNBT0F6TyxFQUFBbTRCLFdBQUF6NEIsVUFBQW1CLFFBQUEsV0FnQkEsT0FmQWIsRUFBQWd6QixPQUFBdHpCLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0EsT0FBQUEsS0FBQXkzQixjQUNBejNCLEtBQUF5M0IsWUFBQWgzQixVQUNBVCxLQUFBeTNCLFlBQUEsTUFFQXozQixLQUFBZzRCLE1BQUEsS0FDQWg0QixLQUFBb0UsV0FDQSxZQUNBLFdBRUFwRSxLQUFBbVosVUFBQTFZLFVBQ0FULEtBQUFtWixVQUFBLEtBQ0FuWixLQUFBMmxCLE9BQUFsbEIsVUFDQVQsS0FBQTJsQixPQUFBLEtBQ0EzbEIsS0FBQWk0QixVQUFBLEtBQ0FqNEIsTUFFQUosRUFBQW00QixhQUVBbDRCLEVBQUEsU0FBQUQsR0FnQ0EsT0FyQkFBLEVBQUE4NUIsWUFBQSxXQUNBOTVCLEVBQUF5UixXQUFBeFQsS0FBQW1DLE1BS0FBLEtBQUEyNUIsTUFBQTM1QixLQUFBcVEsTUFBQXJRLEtBQUE0USxPQUFBLElBQUFoUixFQUFBNlMsV0FBQSxTQUFBbW5CLEdBQ0EsT0FBQUEsRUFBQSxRQUdBaDZCLEVBQUE4RixPQUFBOUYsRUFBQTg1QixZQUFBOTVCLEVBQUF5UixZQUtBelIsRUFBQTg1QixZQUFBcDZCLFVBQUFtQixRQUFBLFdBSUEsT0FIQWIsRUFBQXlSLFdBQUEvUixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBMjVCLE1BQUFsNUIsVUFDQVQsS0FBQTI1QixNQUFBLEtBQ0EzNUIsTUFFQUosRUFBQTg1QixjQUVBNzVCLEVBQUEsU0FBQUQsR0E0QkEsT0FyQkFBLEVBQUFpNkIsS0FBQSxXQUNBajZCLEVBQUF5UixXQUFBeFQsS0FBQW1DLE1BTUFBLEtBQUEyM0IsTUFBQTMzQixLQUFBcVEsTUFBQXJRLEtBQUE0USxPQUFBLElBQUFoUixFQUFBbWIsS0FDQS9hLEtBQUF5RixRQUFBeUgsWUFBQSxHQUFBMUosUUFBQXhELEtBQUEyM0IsUUFFQS8zQixFQUFBOEYsT0FBQTlGLEVBQUFpNkIsS0FBQWo2QixFQUFBeVIsWUFLQXpSLEVBQUFpNkIsS0FBQXY2QixVQUFBbUIsUUFBQSxXQUlBLE9BSEFiLEVBQUF5UixXQUFBL1IsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQTIzQixNQUFBbDNCLFVBQ0FULEtBQUEyM0IsTUFBQSxLQUNBMzNCLE1BRUFKLEVBQUFpNkIsT0FFQWg2QixFQUFBLFNBQUFELEdBa1VBLE9BaFRBQSxFQUFBazZCLElBQUEsV0FDQSxJQUFBaDNCLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxZQUNBLE1BQ0EsT0FDQTFELEVBQUFrNkIsS0FDQWw2QixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQU1BQSxLQUFBeTNCLFlBQUEsSUFBQTczQixFQUFBbTRCLFlBQ0E1ZSxVQUFBclcsRUFBQXFXLFVBQ0FsTCxLQUFBbkwsRUFBQW1MLE9BT0FqTyxLQUFBbVosVUFBQW5aLEtBQUF5M0IsWUFBQXRlLFVBU0FuWixLQUFBKzVCLFVBQUEvNUIsS0FBQXkzQixZQUFBcEYsT0FDQXJ5QixLQUFBKzVCLFVBQUE1bUIsTUFBQXZULEVBQUE2TyxLQUFBZ00sWUFDQXphLEtBQUErNUIsVUFBQXA3QixNQUFBbUUsRUFBQWkzQixVQU1BLzVCLEtBQUFnNkIsZUFBQSxJQUFBcDZCLEVBQUFnQyxPQUFBLEVBQUFoQyxFQUFBNk8sS0FBQWlNLFlBTUExYSxLQUFBaTZCLE9BQUEsSUFBQXI2QixFQUFBaTZCLEtBTUE3NUIsS0FBQWs2QixjQUFBLEVBS0FsNkIsS0FBQW02QixLQUFBLElBQUF2NkIsRUFBQTg1QixZQUtBMTVCLEtBQUFvNkIsUUFBQXA2QixLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQXFuQixNQUFBbmtCLEVBQUFvWixJQUFBcFosRUFBQTRNLEtBTUExUCxLQUFBcVQsT0FBQXpULEVBQUE2TyxLQUFBOEwsUUFDQXZhLEtBQUFtVCxNQUFBclEsRUFBQXFRLE1BRUFuVCxLQUFBeTNCLFlBQUF0bUIsTUFBQW5SLEtBQUFtNkIsS0FBQW42QixLQUFBbzZCLFNBQ0FwNkIsS0FBQWk2QixPQUFBejJCLFFBQUF4RCxLQUFBbTZCLE1BQ0FuNkIsS0FBQWc2QixlQUFBeDJCLFFBQUF4RCxLQUFBbTZCLE1BQ0FuNkIsS0FBQWtFLFdBQ0EsWUFDQSxjQUVBbEUsS0FBQW80QixNQUFBdDFCLEVBQUFzMUIsT0FFQXg0QixFQUFBOEYsT0FBQTlGLEVBQUFrNkIsSUFBQWw2QixFQUFBbVEsV0FRQW5RLEVBQUFrNkIsSUFBQXQzQixVQUNBeUwsS0FBQSxPQUNBaU8sSUFBQSxFQUNBeE0sSUFBQSxFQUNBMG9CLE1BQUEsRUFDQWpmLFVBQUEsS0FDQTRnQixVQUFBLEVBQ0E1bUIsTUFBQXZULEVBQUE2TyxLQUFBOEwsU0FPQTNhLEVBQUFrNkIsSUFBQXg2QixVQUFBcU8sTUFBQSxTQUFBdkYsR0FJQSxPQUhBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQWc2QixlQUFBamUsZUFBQSxFQUFBM1QsR0FDQXBJLEtBQUF5M0IsWUFBQTlwQixNQUFBdkYsR0FDQXBJLE1BT0FKLEVBQUFrNkIsSUFBQXg2QixVQUFBK2YsS0FBQSxTQUFBalgsR0FJQSxPQUhBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQWc2QixlQUFBamUsZUFBQS9iLEtBQUFrNkIsY0FBQTl4QixHQUNBcEksS0FBQXkzQixZQUFBcFksS0FBQWpYLEdBQ0FwSSxNQVlBSixFQUFBazZCLElBQUF4NkIsVUFBQTh6QixLQUFBLFdBR0EsT0FGQXB6QixLQUFBeTNCLFlBQUFyRSxPQUNBcHpCLEtBQUF5M0IsWUFBQWlCLGdCQUNBMTRCLE1BTUFKLEVBQUFrNkIsSUFBQXg2QixVQUFBazBCLE9BQUEsV0FHQSxPQUZBeHpCLEtBQUF5M0IsWUFBQWpFLFNBQ0F4ekIsS0FBQXkzQixZQUFBa0Isa0JBQ0EzNEIsTUFRQTVCLE9BQUFDLGVBQUF1QixFQUFBazZCLElBQUF4NkIsVUFBQSxPQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUEyYixTQUFBM2IsS0FBQW82QixRQUFBbGUsTUFFQXhiLElBQUEsU0FBQXdiLEdBQ0FBLEVBQUFsYyxLQUFBOGIsV0FBQUksR0FDQWxjLEtBQUFvNkIsUUFBQWxlLFNBU0E5ZCxPQUFBQyxlQUFBdUIsRUFBQWs2QixJQUFBeDZCLFVBQUEsT0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBMmIsU0FBQTNiLEtBQUFvNkIsUUFBQTFxQixNQUVBaFAsSUFBQSxTQUFBZ1AsR0FDQUEsRUFBQTFQLEtBQUE4YixXQUFBcE0sR0FDQTFQLEtBQUFvNkIsUUFBQTFxQixTQVNBdFIsT0FBQUMsZUFBQXVCLEVBQUFrNkIsSUFBQXg2QixVQUFBLFFBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXkzQixZQUFBeHBCLE1BRUF2TixJQUFBLFNBQUF1TixHQUNBak8sS0FBQXkzQixZQUFBeHBCLE9BQ0FqTyxLQUFBazZCLGNBQUFsNkIsS0FBQXkzQixZQUFBK0IsbUJBQ0F4NUIsS0FBQWc2QixlQUFBcjdCLE1BQUFxQixLQUFBazZCLGlCQVNBOTdCLE9BQUFDLGVBQUF1QixFQUFBazZCLElBQUF4NkIsVUFBQSxTQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUF5M0IsWUFBQVcsT0FFQTEzQixJQUFBLFNBQUEwM0IsR0FDQXA0QixLQUFBeTNCLFlBQUFXLFFBQ0FwNEIsS0FBQWs2QixjQUFBbDZCLEtBQUF5M0IsWUFBQStCLG1CQUNBeDVCLEtBQUFnNkIsZUFBQXI3QixNQUFBcUIsS0FBQWs2QixpQkFTQTk3QixPQUFBQyxlQUFBdUIsRUFBQWs2QixJQUFBeDZCLFVBQUEsU0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBcVQsUUFFQTNTLElBQUEsU0FBQStDLEdBQ0EsSUFBQTQyQixFQUFBcjZCLEtBQUFrYyxJQUNBb2UsRUFBQXQ2QixLQUFBMFAsSUFFQTFQLEtBQUFxVCxPQUFBNVAsRUFDQXpELEtBQUFrYyxJQUFBbWUsRUFDQXI2QixLQUFBMFAsSUFBQTRxQixLQVNBbDhCLE9BQUFDLGVBQUF1QixFQUFBazZCLElBQUF4NkIsVUFBQSxRQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUF5M0IsWUFBQWxGLE1BRUE3eEIsSUFBQSxTQUFBNnhCLEdBQ0F2eUIsS0FBQXkzQixZQUFBbEYsVUFVQW4wQixPQUFBQyxlQUFBdUIsRUFBQWs2QixJQUFBeDZCLFVBQUEsU0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBeTNCLFlBQUF6cUIsU0FhQXBOLEVBQUFrNkIsSUFBQXg2QixVQUFBa0UsUUFBQSxTQUFBOE4sR0FNQSxPQUxBQSxFQUFBL1EsY0FBQVgsRUFBQWdDLFFBQUEwUCxFQUFBL1EsY0FBQVgsRUFBQWlDLFFBQ0E3QixLQUFBMGIsUUFBQXBLLEVBQUFvSyxRQUNBMWIsS0FBQW1ULE1BQUE3QixFQUFBNkIsT0FFQXZULEVBQUF5UixXQUFBL1IsVUFBQWtFLFFBQUE4RCxNQUFBdEgsS0FBQXNELFdBQ0F0RCxNQVFBSixFQUFBazZCLElBQUF4NkIsVUFBQXdjLFdBQUFsYyxFQUFBaUMsTUFBQXZDLFVBQUF3YyxXQU9BbGMsRUFBQWs2QixJQUFBeDZCLFVBQUFxYyxTQUFBL2IsRUFBQWlDLE1BQUF2QyxVQUFBcWMsU0FLQS9iLEVBQUFrNkIsSUFBQXg2QixVQUFBbUIsUUFBQSxXQWtCQSxPQWpCQWIsRUFBQW1RLFVBQUF6USxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBb0UsV0FDQSxZQUNBLGNBRUFwRSxLQUFBeTNCLFlBQUFoM0IsVUFDQVQsS0FBQXkzQixZQUFBLEtBQ0F6M0IsS0FBQWc2QixlQUFBdjVCLFVBQ0FULEtBQUFnNkIsZUFBQSxLQUNBaDZCLEtBQUFpNkIsT0FBQXg1QixVQUNBVCxLQUFBaTZCLE9BQUEsS0FDQWo2QixLQUFBbzZCLFFBQUEzNUIsVUFDQVQsS0FBQW82QixRQUFBLEtBQ0FwNkIsS0FBQW02QixLQUFBMTVCLFVBQ0FULEtBQUFtNkIsS0FBQSxLQUNBbjZCLEtBQUFtWixVQUFBLEtBQ0FuWixLQUFBKzVCLFVBQUEsS0FDQS81QixNQUVBSixFQUFBazZCLE1BRUFqNkIsRUFBQSxTQUFBRCxHQXlEQSxPQXpDQUEsRUFBQTI2QixRQUFBLFdBQ0EsSUFBQXozQixFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQUEsYUFBQTFELEVBQUEyNkIsU0FDQTM2QixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQU1BQSxLQUFBbWtCLFlBQUFua0IsS0FBQXFRLE1BQUFyUSxLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQXNrQixZQUNBN0QsT0FBQSxLQUNBQyxNQUFBLEtBQ0ErRCxVQUFBdmhCLEVBQUF1aEIsWUFPQXJrQixLQUFBcWtCLFVBQUFya0IsS0FBQW1rQixZQUFBRSxVQUNBcmtCLEtBQUFrRSxVQUFBLGNBRUF0RSxFQUFBOEYsT0FBQTlGLEVBQUEyNkIsUUFBQTM2QixFQUFBbVEsV0FPQW5RLEVBQUEyNkIsUUFBQS8zQixVQUE4QjZoQixXQUFBLElBSzlCemtCLEVBQUEyNkIsUUFBQWo3QixVQUFBbUIsUUFBQSxXQU1BLE9BTEFiLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQW1rQixZQUFBMWpCLFVBQ0FULEtBQUFta0IsWUFBQSxLQUNBbmtCLEtBQUFvRSxVQUFBLGFBQ0FwRSxLQUFBcWtCLFVBQUEsS0FDQXJrQixNQUVBSixFQUFBMjZCLFVBRUExNkIsRUFBQSxTQUFBRCxHQTJHQSxPQTlGQUEsRUFBQTQ2QixrQkFBQSxXQUNBLElBQUExM0IsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLFlBQ0EsWUFDQSxhQUNBMUQsRUFBQTQ2QixtQkFDQTU2QixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQUNBQSxLQUFBeVEsY0FBQSxLQU1BelEsS0FBQWlvQixPQUFBam9CLEtBQUFxUSxNQUFBLElBQUF6USxFQUFBK25CLE1BQUE3a0IsRUFBQWdsQixXQU1BOW5CLEtBQUE4bkIsVUFBQTluQixLQUFBaW9CLE9BQUFILFVBTUE5bkIsS0FBQXk2QixTQUFBejZCLEtBQUE0USxPQUFBNVEsS0FBQXlGLFFBQUF5Z0IscUJBQ0FsbUIsS0FBQXk2QixTQUFBN1UsRUFBQWpuQixPQUFBLG1CQUNBcUIsS0FBQXk2QixTQUFBeHNCLEtBQUEsVUFNQWpPLEtBQUEwNkIsVUFBQSxJQUFBOTZCLEVBQUFpQyxPQUNBSCxNQUFBMUIsS0FBQXk2QixTQUFBdGhCLFVBQ0FoRyxNQUFBdlQsRUFBQTZPLEtBQUFzSCxVQUNBcFgsTUFBQW1FLEVBQUE0M0IsWUFPQTE2QixLQUFBa29CLFVBQUEsSUFBQXRvQixFQUFBbWIsS0FBQWpZLEVBQUFxbEIsVUFBQXZvQixFQUFBNk8sS0FBQWdNLGFBTUF6YSxLQUFBbW9CLFVBQUFub0IsS0FBQWtvQixVQUFBL2lCLEtBRUFuRixLQUFBaW9CLE9BQUE5VyxNQUFBblIsS0FBQXk2QixTQUFBejZCLEtBQUFrb0IsVUFBQWxvQixLQUFBaW9CLFFBQ0Fqb0IsS0FBQWtFLFdBQ0EsWUFDQSxZQUNBLGVBR0F0RSxFQUFBOEYsT0FBQTlGLEVBQUE0NkIsa0JBQUE1NkIsRUFBQW1RLFdBT0FuUSxFQUFBNDZCLGtCQUFBaDRCLFVBQ0FzbEIsVUFBQSxHQUNBSyxVQUFBLEdBQ0F1UyxVQUFBLEtBTUE5NkIsRUFBQTQ2QixrQkFBQWw3QixVQUFBbUIsUUFBQSxXQWtCQSxPQWpCQWIsRUFBQW1RLFVBQUF6USxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBb0UsV0FDQSxZQUNBLFlBQ0EsY0FFQXBFLEtBQUEwNkIsVUFBQWo2QixVQUNBVCxLQUFBMDZCLFVBQUEsS0FDQTE2QixLQUFBbW9CLFVBQUExbkIsVUFDQVQsS0FBQW1vQixVQUFBLEtBQ0Fub0IsS0FBQWlvQixPQUFBeG5CLFVBQ0FULEtBQUFpb0IsT0FBQSxLQUNBam9CLEtBQUE4bkIsVUFBQSxLQUNBOW5CLEtBQUF5NkIsU0FBQXJzQixhQUNBcE8sS0FBQXk2QixTQUFBLEtBQ0F6NkIsS0FBQWtvQixVQUFBOVosYUFDQXBPLEtBQUFrb0IsVUFBQSxLQUNBbG9CLE1BRUFKLEVBQUE0NkIsb0JBRUEzNkIsRUFBQSxTQUFBRCxHQThEQSxPQTVDQUEsRUFBQSs2QixNQUFBLFdBQ0EvNkIsRUFBQW1RLFVBQUFsUyxLQUFBbUMsTUFDQUEsS0FBQXlRLGNBQUEsS0FNQXpRLEtBQUFrdUIsS0FBQWx1QixLQUFBcVEsTUFBQSxPQUFBelEsRUFBQW1iLEtBTUEvYSxLQUFBbXVCLE1BQUFudUIsS0FBQXFRLE1BQUEsT0FBQXpRLEVBQUFtYixLQU1BL2EsS0FBQTQ2QixRQUFBNTZCLEtBQUE0USxPQUFBNVEsS0FBQXlGLFFBQUFvMUIsb0JBQUEsR0FFQTc2QixLQUFBa3VCLEtBQUExcUIsUUFBQXhELEtBQUE0NkIsUUFBQSxLQUNBNTZCLEtBQUFtdUIsTUFBQTNxQixRQUFBeEQsS0FBQTQ2QixRQUFBLEtBQ0E1NkIsS0FBQWt1QixLQUFBMWdCLGFBQUEsRUFDQXhOLEtBQUFtdUIsTUFBQTNnQixhQUFBLEVBQ0F4TixLQUFBa3VCLEtBQUF6Z0IsaUJBQUEsV0FDQXpOLEtBQUFtdUIsTUFBQTFnQixpQkFBQSxZQUVBN04sRUFBQThGLE9BQUE5RixFQUFBKzZCLE1BQUEvNkIsRUFBQW1RLFdBS0FuUSxFQUFBKzZCLE1BQUFyN0IsVUFBQW1CLFFBQUEsV0FRQSxPQVBBYixFQUFBbVEsVUFBQXpRLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFrdUIsS0FBQXp0QixVQUNBVCxLQUFBa3VCLEtBQUEsS0FDQWx1QixLQUFBbXVCLE1BQUExdEIsVUFDQVQsS0FBQW11QixNQUFBLEtBQ0FudUIsS0FBQTQ2QixRQUFBeHNCLGFBQ0FwTyxLQUFBNDZCLFFBQUEsS0FDQTU2QixNQUVBSixFQUFBKzZCLFFBRUE5NkIsRUFBQSxTQUFBRCxHQXdGQSxPQXRFQUEsRUFBQWs3QixNQUFBLFdBQ0EsSUFBQWg0QixFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQUEsYUFBQTFELEVBQUFrN0IsT0FDQWw3QixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQU1BQSxLQUFBcVEsTUFBQXJRLEtBQUE0USxPQUFBNVEsS0FBQXFqQixVQUFBLElBQUF6akIsRUFBQXdqQixTQUFBLGlCQU1BcGpCLEtBQUF5akIsVUFBQTNnQixFQUFBMmdCLFdBRUE3akIsRUFBQThGLE9BQUE5RixFQUFBazdCLE1BQUFsN0IsRUFBQW1RLFdBT0FuUSxFQUFBazdCLE1BQUF0NEIsVUFBNEJpaEIsVUFBQSxJQUs1QjdqQixFQUFBazdCLE1BQUF4N0IsVUFBQXk3QixTQUFBLFdBQ0EvNkIsS0FBQXFqQixVQUFBcFYsS0FBQSxNQUNBLElBQUFwTCxFQUFBN0MsS0FBQXFqQixVQUFBTyxXQUlBLE9BQUFoZixLQUFBOEssSUFBQXBJLE1BQUF0SCxLQUFBNkMsR0FIQSxJQVNBakQsRUFBQWs3QixNQUFBeDdCLFVBQUFza0IsU0FBQSxXQUdBLE9BRkE1akIsS0FBQXFqQixVQUFBcFYsS0FBQSxXQUNBak8sS0FBQXFqQixVQUFBTyxXQUNBLElBU0F4bEIsT0FBQUMsZUFBQXVCLEVBQUFrN0IsTUFBQXg3QixVQUFBLGFBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXFqQixVQUFBSSxXQUVBL2lCLElBQUEsU0FBQStDLEdBQ0F6RCxLQUFBcWpCLFVBQUFJLFVBQUFoZ0IsS0FPQTdELEVBQUFrN0IsTUFBQXg3QixVQUFBbUIsUUFBQSxXQUlBLE9BSEFiLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQXFqQixVQUFBNWlCLFVBQ0FULEtBQUFxakIsVUFBQSxLQUNBcmpCLE1BRUFKLEVBQUFrN0IsUUFFQWo3QixFQUFBLFNBQUFELEdBb0RBLE9BekNBQSxFQUFBbzdCLE1BQUEsV0FDQXA3QixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQUNBQSxLQUFBeVEsY0FBQSxLQUtBelEsS0FBQWk3QixVQUFBajdCLEtBQUFxUSxNQUFBclEsS0FBQXlGLFFBQUF5MUIsc0JBQUEsR0FDQWw3QixLQUFBaTdCLFVBQUF6dEIsYUFBQSxFQUNBeE4sS0FBQWk3QixVQUFBeHRCLGlCQUFBLFdBTUF6TixLQUFBa3VCLEtBQUFsdUIsS0FBQTRRLE9BQUEsT0FBQWhSLEVBQUFtYixLQU1BL2EsS0FBQW11QixNQUFBbnVCLEtBQUE0USxPQUFBLE9BQUFoUixFQUFBbWIsS0FFQS9hLEtBQUFpN0IsVUFBQXozQixRQUFBeEQsS0FBQWt1QixLQUFBLEtBQ0FsdUIsS0FBQWk3QixVQUFBejNCLFFBQUF4RCxLQUFBbXVCLE1BQUEsTUFFQXZ1QixFQUFBOEYsT0FBQTlGLEVBQUFvN0IsTUFBQXA3QixFQUFBbVEsV0FLQW5RLEVBQUFvN0IsTUFBQTE3QixVQUFBbUIsUUFBQSxXQVFBLE9BUEFiLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQWk3QixVQUFBN3NCLGFBQ0FwTyxLQUFBa3VCLEtBQUF6dEIsVUFDQVQsS0FBQWt1QixLQUFBLEtBQ0FsdUIsS0FBQW11QixNQUFBMXRCLFVBQ0FULEtBQUFtdUIsTUFBQSxLQUNBbnVCLEtBQUFpN0IsVUFBQSxLQUNBajdCLE1BRUFKLEVBQUFvN0IsUUFFQW43QixFQUFBLFNBQUFELEdBc0VBLE9BeERBQSxFQUFBdTdCLGFBQUEsV0FDQXY3QixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQUNBQSxLQUFBeVEsY0FBQSxLQU1BelEsS0FBQW83QixPQUFBcDdCLEtBQUFxUSxNQUFBLElBQUF6USxFQUFBbzdCLE1BTUFoN0IsS0FBQXE3QixRQUFBLElBQUF6N0IsRUFBQTRrQixJQUtBeGtCLEtBQUF3bUIsSUFBQXhtQixLQUFBNFEsT0FBQSxPQUFBaFIsRUFBQThrQixTQUFBOWYsS0FBQTAyQixTQUtBdDdCLEtBQUF1N0IsY0FBQSxJQUFBMzdCLEVBQUFrbEIsU0FLQTlrQixLQUFBdzdCLEtBQUF4N0IsS0FBQTRRLE9BQUEsT0FBQWhSLEVBQUE4a0IsU0FBQTlmLEtBQUEwMkIsU0FDQXQ3QixLQUFBbzdCLE9BQUE1M0IsUUFBQXhELEtBQUFxN0IsUUFBQSxLQUNBcjdCLEtBQUFvN0IsT0FBQTUzQixRQUFBeEQsS0FBQXE3QixRQUFBLEtBQ0FyN0IsS0FBQW83QixPQUFBNTNCLFFBQUF4RCxLQUFBdTdCLGNBQUEsS0FDQXY3QixLQUFBbzdCLE9BQUE1M0IsUUFBQXhELEtBQUF1N0IsY0FBQSxLQUNBdjdCLEtBQUFxN0IsUUFBQTczQixRQUFBeEQsS0FBQXdtQixLQUNBeG1CLEtBQUF1N0IsY0FBQS8zQixRQUFBeEQsS0FBQXc3QixPQUVBNTdCLEVBQUE4RixPQUFBOUYsRUFBQXU3QixhQUFBdjdCLEVBQUFtUSxXQUtBblEsRUFBQXU3QixhQUFBNzdCLFVBQUFtQixRQUFBLFdBWUEsT0FYQWIsRUFBQW1RLFVBQUF6USxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBd21CLElBQUEvbEIsVUFDQVQsS0FBQXdtQixJQUFBLEtBQ0F4bUIsS0FBQXc3QixLQUFBLzZCLFVBQ0FULEtBQUF3N0IsS0FBQSxLQUNBeDdCLEtBQUFxN0IsUUFBQTU2QixVQUNBVCxLQUFBcTdCLFFBQUEsS0FDQXI3QixLQUFBdTdCLGNBQUE5NkIsVUFDQVQsS0FBQXU3QixjQUFBLEtBQ0F2N0IsS0FBQW83QixPQUFBMzZCLFVBQ0FULEtBQUFvN0IsT0FBQSxLQUNBcDdCLE1BRUFKLEVBQUF1N0IsZUFFQXQ3QixFQUFBLFNBQUFELEdBMkZBLE9BM0VBQSxFQUFBNjdCLGFBQUEsV0FDQTc3QixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQUNBQSxLQUFBeVEsY0FBQSxLQU1BelEsS0FBQXdtQixJQUFBeG1CLEtBQUFxUSxNQUFBLE9BQUF6USxFQUFBbWIsS0FNQS9hLEtBQUE2dUIsTUFBQSxJQUFBanZCLEVBQUE0a0IsSUFLQXhrQixLQUFBMDdCLGNBQUEsSUFBQTk3QixFQUFBOGtCLFNBQUE5ZixLQUFBMDJCLFNBTUF0N0IsS0FBQXc3QixLQUFBeDdCLEtBQUFxUSxNQUFBLE9BQUF6USxFQUFBbWIsS0FNQS9hLEtBQUE4dUIsT0FBQSxJQUFBbHZCLEVBQUFrbEIsU0FLQTlrQixLQUFBMjdCLGVBQUEsSUFBQS83QixFQUFBOGtCLFNBQUE5ZixLQUFBMDJCLFNBTUF0N0IsS0FBQTQ3QixPQUFBNTdCLEtBQUE0USxPQUFBLElBQUFoUixFQUFBKzZCLE1BQ0EzNkIsS0FBQXdtQixJQUFBaGpCLFFBQUF4RCxLQUFBNnVCLE1BQUEsS0FDQTd1QixLQUFBdzdCLEtBQUFoNEIsUUFBQXhELEtBQUE2dUIsTUFBQSxLQUNBN3VCLEtBQUF3bUIsSUFBQWhqQixRQUFBeEQsS0FBQTh1QixPQUFBLEtBQ0E5dUIsS0FBQXc3QixLQUFBaDRCLFFBQUF4RCxLQUFBOHVCLE9BQUEsS0FDQTl1QixLQUFBNnVCLE1BQUFyckIsUUFBQXhELEtBQUEwN0IsZUFDQTE3QixLQUFBOHVCLE9BQUF0ckIsUUFBQXhELEtBQUEyN0IsZ0JBQ0EzN0IsS0FBQTA3QixjQUFBbDRCLFFBQUF4RCxLQUFBNDdCLE9BQUEsS0FDQTU3QixLQUFBMjdCLGVBQUFuNEIsUUFBQXhELEtBQUE0N0IsT0FBQSxNQUVBaDhCLEVBQUE4RixPQUFBOUYsRUFBQTY3QixhQUFBNzdCLEVBQUFtUSxXQUtBblEsRUFBQTY3QixhQUFBbjhCLFVBQUFtQixRQUFBLFdBZ0JBLE9BZkFiLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQXdtQixJQUFBL2xCLFVBQ0FULEtBQUF3bUIsSUFBQSxLQUNBeG1CLEtBQUF3N0IsS0FBQS82QixVQUNBVCxLQUFBdzdCLEtBQUEsS0FDQXg3QixLQUFBNnVCLE1BQUFwdUIsVUFDQVQsS0FBQTZ1QixNQUFBLEtBQ0E3dUIsS0FBQTA3QixjQUFBajdCLFVBQ0FULEtBQUEwN0IsY0FBQSxLQUNBMTdCLEtBQUE4dUIsT0FBQXJ1QixVQUNBVCxLQUFBOHVCLE9BQUEsS0FDQTl1QixLQUFBMjdCLGVBQUFsN0IsVUFDQVQsS0FBQTI3QixlQUFBLEtBQ0EzN0IsS0FBQTQ3QixPQUFBbjdCLFVBQ0FULEtBQUE0N0IsT0FBQSxLQUNBNTdCLE1BRUFKLEVBQUE2N0IsZUFFQTU3QixFQUFBLFNBQUFELEdBcUZBLE9BMUVBQSxFQUFBaThCLGtCQUFBLFNBQUEvNEIsR0FDQWxELEVBQUFtUSxVQUFBbFMsS0FBQW1DLE1BQ0E4QyxFQUFBbEQsRUFBQW1ELFdBQUFELEVBQUFsRCxFQUFBaThCLGtCQUFBcjVCLFVBTUF4QyxLQUFBODdCLGNBQUE5N0IsS0FBQXFRLE1BQUEsSUFBQXpRLEVBQUF1N0IsYUFNQW43QixLQUFBKzdCLGNBQUEvN0IsS0FBQTRRLE9BQUEsSUFBQWhSLEVBQUE2N0IsYUFLQXo3QixLQUFBd21CLElBQUEsSUFBQTVtQixFQUFBc2tCLFdBQUFwaEIsRUFBQTBqQixLQUtBeG1CLEtBQUF3N0IsS0FBQSxJQUFBNTdCLEVBQUFza0IsV0FBQXBoQixFQUFBMDRCLE1BQ0F4N0IsS0FBQTg3QixjQUFBdFYsSUFBQXJWLE1BQUFuUixLQUFBd21CLElBQUF4bUIsS0FBQSs3QixjQUFBdlYsS0FDQXhtQixLQUFBODdCLGNBQUFOLEtBQUFycUIsTUFBQW5SLEtBQUF3N0IsS0FBQXg3QixLQUFBKzdCLGNBQUFQLE1BQ0F4N0IsS0FBQWtFLFdBQ0EsTUFDQSxVQUdBdEUsRUFBQThGLE9BQUE5RixFQUFBaThCLGtCQUFBajhCLEVBQUFtUSxXQU1BblEsRUFBQWk4QixrQkFBQXI1QixVQUNBZ2tCLEtBQ0FqQyxNQUFBLEVBQ0FGLFdBQUEsR0FDQTdELFFBQUEsSUFDQUgsT0FBQSxJQUNBaUUsS0FBQSxJQUVBa1gsTUFDQWpYLE1BQUEsRUFDQUYsV0FBQSxHQUNBN0QsUUFBQSxJQUNBSCxPQUFBLElBQ0FpRSxLQUFBLEtBT0Exa0IsRUFBQWk4QixrQkFBQXY4QixVQUFBbUIsUUFBQSxXQWNBLE9BYkFiLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQW9FLFdBQ0EsTUFDQSxTQUVBcEUsS0FBQXdtQixJQUFBL2xCLFVBQ0FULEtBQUF3bUIsSUFBQSxLQUNBeG1CLEtBQUF3N0IsS0FBQS82QixVQUNBVCxLQUFBdzdCLEtBQUEsS0FDQXg3QixLQUFBODdCLGNBQUFyN0IsVUFDQVQsS0FBQTg3QixjQUFBLEtBQ0E5N0IsS0FBQSs3QixjQUFBdDdCLFVBQ0FULEtBQUErN0IsY0FBQSxLQUNBLzdCLE1BRUFKLEVBQUFpOEIsb0JBRUFoOEIsRUFBQSxTQUFBRCxHQWlDQSxPQXZCQUEsRUFBQW84QixLQUFBLFdBQ0FwOEIsRUFBQW1RLFVBQUFsUyxLQUFBbUMsTUFDQUEsS0FBQXlRLGNBQUEsS0FNQXpRLEtBQUE0N0IsT0FBQTU3QixLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQSs2QixNQUNBMzZCLEtBQUFxUSxNQUFBN00sUUFBQXhELEtBQUE0N0IsT0FBQSxLQUNBNTdCLEtBQUFxUSxNQUFBN00sUUFBQXhELEtBQUE0N0IsT0FBQSxNQUVBaDhCLEVBQUE4RixPQUFBOUYsRUFBQW84QixLQUFBcDhCLEVBQUFtUSxXQUtBblEsRUFBQW84QixLQUFBMThCLFVBQUFtQixRQUFBLFdBSUEsT0FIQWIsRUFBQW1RLFVBQUF6USxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBNDdCLE9BQUFuN0IsVUFDQVQsS0FBQTQ3QixPQUFBLEtBQ0E1N0IsTUFFQUosRUFBQW84QixPQUVBbjhCLEVBQUEsU0FBQUQsR0FnSEEsT0EvRkFBLEVBQUFxOEIsb0JBQUEsU0FBQW41QixHQUNBbEQsRUFBQW1RLFVBQUFsUyxLQUFBbUMsTUFDQThDLEVBQUFsRCxFQUFBbUQsV0FBQU8sVUFBQTFELEVBQUFxOEIsb0JBQUF6NUIsVUFNQXhDLEtBQUFpN0IsVUFBQWo3QixLQUFBcVEsTUFBQSxJQUFBelEsRUFBQXltQixnQkFDQUssYUFBQTVqQixFQUFBNGpCLGFBQ0FDLGNBQUE3akIsRUFBQTZqQixnQkFPQTNtQixLQUFBMG1CLGFBQUExbUIsS0FBQWk3QixVQUFBdlUsYUFNQTFtQixLQUFBMm1CLGNBQUEzbUIsS0FBQWk3QixVQUFBdFUsY0FNQTNtQixLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQW1iLEtBS0EvYSxLQUFBc21CLElBQUEsSUFBQTFtQixFQUFBc2tCLFdBQUFwaEIsRUFBQXdqQixLQUtBdG1CLEtBQUF3bUIsSUFBQSxJQUFBNW1CLEVBQUFza0IsV0FBQXBoQixFQUFBMGpCLEtBS0F4bUIsS0FBQXltQixLQUFBLElBQUE3bUIsRUFBQXNrQixXQUFBcGhCLEVBQUEyakIsTUFFQXptQixLQUFBaTdCLFVBQUEzVSxJQUFBblYsTUFBQW5SLEtBQUFzbUIsSUFBQXRtQixLQUFBNFEsUUFDQTVRLEtBQUFpN0IsVUFBQXpVLElBQUFyVixNQUFBblIsS0FBQXdtQixJQUFBeG1CLEtBQUE0USxRQUNBNVEsS0FBQWk3QixVQUFBeFUsS0FBQXRWLE1BQUFuUixLQUFBeW1CLEtBQUF6bUIsS0FBQTRRLFFBQ0E1USxLQUFBa0UsV0FDQSxPQUNBLE1BQ0EsTUFDQSxnQkFDQSxrQkFHQXRFLEVBQUE4RixPQUFBOUYsRUFBQXE4QixvQkFBQXI4QixFQUFBbVEsV0FNQW5RLEVBQUFxOEIsb0JBQUF6NUIsVUFDQThqQixJQUFBMW1CLEVBQUFza0IsV0FBQTFoQixTQUNBZ2tCLElBQUE1bUIsRUFBQXNrQixXQUFBMWhCLFNBQ0Fpa0IsS0FBQTdtQixFQUFBc2tCLFdBQUExaEIsU0FDQWtrQixhQUFBLElBQ0FDLGNBQUEsS0FNQS9tQixFQUFBcThCLG9CQUFBMzhCLFVBQUFtQixRQUFBLFdBbUJBLE9BbEJBYixFQUFBbVEsVUFBQXpRLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFpN0IsVUFBQXg2QixVQUNBVCxLQUFBb0UsV0FDQSxPQUNBLE1BQ0EsTUFDQSxnQkFDQSxpQkFFQXBFLEtBQUFzbUIsSUFBQTdsQixVQUNBVCxLQUFBd21CLElBQUEvbEIsVUFDQVQsS0FBQXltQixLQUFBaG1CLFVBQ0FULEtBQUFpN0IsVUFBQSxLQUNBajdCLEtBQUFzbUIsSUFBQSxLQUNBdG1CLEtBQUF3bUIsSUFBQSxLQUNBeG1CLEtBQUF5bUIsS0FBQSxLQUNBem1CLEtBQUEwbUIsYUFBQSxLQUNBMW1CLEtBQUEybUIsY0FBQSxLQUNBM21CLE1BRUFKLEVBQUFxOEIsc0JBRUFwOEIsRUFBQSxTQUFBRCxHQUNBLEdBQUFBLEVBQUF1SyxZQUFBL0QsT0FBQTgxQixpQkFBQSxDQU1BLElBQUFBLEVBQUEsU0FBQXoyQixHQUtBekYsS0FBQXlGLFVBTUF6RixLQUFBbThCLElBQUEsSUFBQXY4QixFQUFBZ0MsT0FBQSxFQUFBaEMsRUFBQTZPLEtBQUFpTSxZQUtBLElBQUEwaEIsRUFBQSxJQUFBeDhCLEVBQUE2UyxXQUFBLFNBQUFoUCxHQUNBLE9BQUE3RCxFQUFBNkUsaUJBQUFoQixFQUFBLE9BQ2MsTUFNZDQ0QixFQUFBLElBQUF6OEIsRUFBQTZTLFdBQUEsU0FBQWhQLEdBQ0EsT0FBQTdELEVBQUE2RSxnQkFBQSxHQUFBaEIsRUFBQSxPQUNjLE1BTWQ2NEIsRUFBQSxJQUFBMThCLEVBQUFtYixLQU1Bd2hCLEVBQUEsSUFBQTM4QixFQUFBbWIsS0FNQTFaLEVBQUFyQixLQUFBcVEsTUFBQSxJQUFBelEsRUFBQW83QixPQU1BLElBQUFwN0IsRUFBQWk2QixNQUNBem9CLElBQUFnckIsRUFBQUMsR0FNQSxJQUFBRyxFQUFBeDhCLEtBQUE0USxPQUFBLElBQUFoUixFQUFBKzZCLE1BRUF0NUIsRUFBQTZzQixLQUFBL2MsTUFBQW1yQixFQUFBRSxFQUFBdE8sTUFDQTdzQixFQUFBOHNCLE1BQUFoZCxNQUFBb3JCLEVBQUFDLEVBQUFyTyxPQUNBbnVCLEtBQUFtOEIsSUFBQWhyQixNQUFBa3JCLEVBQUFDLEVBQUFuM0IsTUFDQW5GLEtBQUFtOEIsSUFBQWhyQixNQUFBaXJCLEVBQUFHLEVBQUFwM0IsT0FFQSsyQixFQUFBNThCLFVBQUE4TyxXQUFBLFdBQ0FwTyxLQUFBNFEsT0FBQXhDLFdBQUE5RyxNQUFBdEgsS0FBQTRRLE9BQUF0TixZQUVBNDRCLEVBQUE1OEIsVUFBQWtFLFFBQUEsV0FDQXhELEtBQUE0USxPQUFBcE4sUUFBQThELE1BQUF0SCxLQUFBNFEsT0FBQXROLFlBR0F1SCxhQUFBdkwsVUFBQW05QixtQkFBQSxXQUNBLFdBQUFQLEVBQUFsOEIsT0FFQUosRUFBQWtHLFFBQUF4RyxVQUFBbTlCLG1CQUFBLFdBQ0EsV0FBQVAsRUFBQWw4QixVQUlBSCxFQUFBLFNBQUFELEdBNENBLE9BL0JBQSxFQUFBODhCLE9BQUEsU0FBQUMsR0FDQS84QixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQU1BQSxLQUFBNDhCLFFBQUE1OEIsS0FBQXFRLE1BQUFyUSxLQUFBNFEsT0FBQTVRLEtBQUF5RixRQUFBZzNCLHFCQU1BejhCLEtBQUFtOEIsSUFBQW44QixLQUFBNDhCLFFBQUFULElBRUFuOEIsS0FBQW04QixJQUFBeDlCLE1BQUFpQixFQUFBbUQsV0FBQTQ1QixFQUFBLEdBQ0EzOEIsS0FBQWtFLFVBQUEsUUFFQXRFLEVBQUE4RixPQUFBOUYsRUFBQTg4QixPQUFBOThCLEVBQUFtUSxXQUtBblEsRUFBQTg4QixPQUFBcDlCLFVBQUFtQixRQUFBLFdBTUEsT0FMQWIsRUFBQW1RLFVBQUF6USxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBb0UsVUFBQSxPQUNBcEUsS0FBQTQ4QixRQUFBeHVCLGFBQ0FwTyxLQUFBNDhCLFFBQUEsS0FDQTU4QixLQUFBbThCLElBQUEsS0FDQW44QixNQUVBSixFQUFBODhCLFNBRUE3OEIsRUFBQSxTQUFBRCxHQWdUQSxPQXBTQUEsRUFBQWk5QixTQUFBLFdBQ0EsSUFBQS81QixFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsWUFDQSxZQUNBLGFBQ0ExRCxFQUFBaTlCLFVBQ0FqOUIsRUFBQW1RLFVBQUFsUyxLQUFBbUMsTUFNQUEsS0FBQTQ4QixRQUFBNThCLEtBQUFxUSxNQUFBclEsS0FBQTRRLE9BQUE1USxLQUFBeUYsUUFBQXEzQixlQUVBOThCLEtBQUE0OEIsUUFBQUcsYUFBQWo2QixFQUFBaTZCLGFBQ0EvOEIsS0FBQTQ4QixRQUFBSSxZQUFBbDZCLEVBQUFrNkIsWUFDQWg5QixLQUFBNDhCLFFBQUFLLGNBQUFuNkIsRUFBQW02QixjQUNBajlCLEtBQUE0OEIsUUFBQU0sY0FBQXA2QixFQUFBbzZCLGNBQ0FsOUIsS0FBQTQ4QixRQUFBTyxlQUFBcjZCLEVBQUFxNkIsZUFDQW45QixLQUFBNDhCLFFBQUFRLGVBQUF0NkIsRUFBQXM2QixlQUNBcDlCLEtBQUE0OEIsUUFBQVMsWUFBQXY2QixFQUFBdTZCLFlBQ0FyOUIsS0FBQTQ4QixRQUFBVSxjQUFBeDZCLEVBQUF3NkIsY0FNQXQ5QixLQUFBdTlCLGNBQ0F6NkIsRUFBQTA2QixhQUNBMTZCLEVBQUEyNkIsYUFDQTM2QixFQUFBNDZCLGNBT0ExOUIsS0FBQTI5QixXQUNBNzZCLEVBQUE4NkIsVUFDQTk2QixFQUFBKzZCLFVBQ0EvNkIsRUFBQWc3QixXQUdBOTlCLEtBQUF3OUIsYUFBQTE2QixFQUFBMDZCLGFBQ0F4OUIsS0FBQXk5QixhQUFBMzZCLEVBQUEyNkIsYUFDQXo5QixLQUFBMDlCLGFBQUE1NkIsRUFBQTQ2QixhQUNBMTlCLEtBQUE0OUIsVUFBQTk2QixFQUFBODZCLFVBQ0E1OUIsS0FBQTY5QixVQUFBLzZCLEVBQUErNkIsVUFDQTc5QixLQUFBODlCLFVBQUFoN0IsRUFBQWc3QixXQUVBbCtCLEVBQUE4RixPQUFBOUYsRUFBQWk5QixTQUFBajlCLEVBQUFtUSxXQU9BblEsRUFBQWk5QixTQUFBcjZCLFVBQ0FvN0IsVUFBQSxFQUNBQyxVQUFBLEVBQ0FDLFVBQUEsRUFDQU4sYUFBQSxFQUNBQyxhQUFBLEVBQ0FDLGFBQUEsRUFDQVgsYUFBQSxhQUNBQyxZQUFBLElBQ0FDLGNBQUEsVUFDQUMsY0FBQSxFQUNBQyxlQUFBLElBQ0FDLGVBQUEsSUFDQUMsWUFBQSxFQUNBQyxjQUFBLEdBT0ExOUIsRUFBQWk5QixTQUFBdjlCLFVBQUF5K0Isa0JBQUEsSUFRQW4rQixFQUFBaTlCLFNBQUF2OUIsVUFBQTArQixZQUFBLFNBQUFwRSxFQUFBcUUsRUFBQUMsR0FDQSxHQUFBbCtCLEtBQUE0OEIsUUFBQWdCLFVBQUEsQ0FDQSxJQUFBcDRCLEVBQUF4RixLQUFBd0YsTUFDQXhGLEtBQUE0OEIsUUFBQWdCLFVBQUFqZ0IsZ0JBQUFpYyxFQUFBcDBCLEVBQUF4RixLQUFBKzlCLG1CQUNBLzlCLEtBQUE0OEIsUUFBQWlCLFVBQUFsZ0IsZ0JBQUFzZ0IsRUFBQXo0QixFQUFBeEYsS0FBQSs5QixtQkFDQS85QixLQUFBNDhCLFFBQUFrQixVQUFBbmdCLGdCQUFBdWdCLEVBQUExNEIsRUFBQXhGLEtBQUErOUIsd0JBRUEvOUIsS0FBQTQ4QixRQUFBb0IsWUFBQXBFLEVBQUFxRSxFQUFBQyxHQUdBLE9BREFsK0IsS0FBQTI5QixVQUFBNzVCLE1BQUF4RSxVQUFBb0ksTUFBQTdKLEtBQUF5RixXQUNBdEQsTUFTQUosRUFBQWk5QixTQUFBdjlCLFVBQUE2K0IsZUFBQSxTQUFBdkUsRUFBQXFFLEVBQUFDLEdBQ0EsR0FBQWwrQixLQUFBNDhCLFFBQUFZLGFBQUEsQ0FDQSxJQUFBaDRCLEVBQUF4RixLQUFBd0YsTUFDQXhGLEtBQUE0OEIsUUFBQVksYUFBQTdmLGdCQUFBaWMsRUFBQXAwQixFQUFBeEYsS0FBQSs5QixtQkFDQS85QixLQUFBNDhCLFFBQUFhLGFBQUE5ZixnQkFBQXNnQixFQUFBejRCLEVBQUF4RixLQUFBKzlCLG1CQUNBLzlCLEtBQUE0OEIsUUFBQWMsYUFBQS9mLGdCQUFBdWdCLEVBQUExNEIsRUFBQXhGLEtBQUErOUIsd0JBRUEvOUIsS0FBQTQ4QixRQUFBdUIsZUFBQXZFLEVBQUFxRSxFQUFBQyxHQUdBLE9BREFsK0IsS0FBQXU5QixhQUFBejVCLE1BQUF4RSxVQUFBb0ksTUFBQTdKLEtBQUF5RixXQUNBdEQsTUFRQTVCLE9BQUFDLGVBQUF1QixFQUFBaTlCLFNBQUF2OUIsVUFBQSxhQUNBb0IsSUFBQSxTQUFBMDlCLEdBQ0FwK0IsS0FBQTI5QixVQUFBLEdBQUFTLEVBQ0FwK0IsS0FBQWcrQixZQUFBMTJCLE1BQUF0SCxVQUFBMjlCLFlBRUFwL0IsSUFBQSxXQUNBLE9BQUF5QixLQUFBMjlCLFVBQUEsTUFTQXYvQixPQUFBQyxlQUFBdUIsRUFBQWk5QixTQUFBdjlCLFVBQUEsYUFDQW9CLElBQUEsU0FBQTA5QixHQUNBcCtCLEtBQUEyOUIsVUFBQSxHQUFBUyxFQUNBcCtCLEtBQUFnK0IsWUFBQTEyQixNQUFBdEgsVUFBQTI5QixZQUVBcC9CLElBQUEsV0FDQSxPQUFBeUIsS0FBQTI5QixVQUFBLE1BU0F2L0IsT0FBQUMsZUFBQXVCLEVBQUFpOUIsU0FBQXY5QixVQUFBLGFBQ0FvQixJQUFBLFNBQUEwOUIsR0FDQXArQixLQUFBMjlCLFVBQUEsR0FBQVMsRUFDQXArQixLQUFBZytCLFlBQUExMkIsTUFBQXRILFVBQUEyOUIsWUFFQXAvQixJQUFBLFdBQ0EsT0FBQXlCLEtBQUEyOUIsVUFBQSxNQVNBdi9CLE9BQUFDLGVBQUF1QixFQUFBaTlCLFNBQUF2OUIsVUFBQSxnQkFDQW9CLElBQUEsU0FBQTA5QixHQUNBcCtCLEtBQUF1OUIsYUFBQSxHQUFBYSxFQUNBcCtCLEtBQUFtK0IsZUFBQTcyQixNQUFBdEgsVUFBQXU5QixlQUVBaC9CLElBQUEsV0FDQSxPQUFBeUIsS0FBQXU5QixhQUFBLE1BU0FuL0IsT0FBQUMsZUFBQXVCLEVBQUFpOUIsU0FBQXY5QixVQUFBLGdCQUNBb0IsSUFBQSxTQUFBMDlCLEdBQ0FwK0IsS0FBQXU5QixhQUFBLEdBQUFhLEVBQ0FwK0IsS0FBQW0rQixlQUFBNzJCLE1BQUF0SCxVQUFBdTlCLGVBRUFoL0IsSUFBQSxXQUNBLE9BQUF5QixLQUFBdTlCLGFBQUEsTUFTQW4vQixPQUFBQyxlQUFBdUIsRUFBQWk5QixTQUFBdjlCLFVBQUEsZ0JBQ0FvQixJQUFBLFNBQUEwOUIsR0FDQXArQixLQUFBdTlCLGFBQUEsR0FBQWEsRUFDQXArQixLQUFBbStCLGVBQUE3MkIsTUFBQXRILFVBQUF1OUIsZUFFQWgvQixJQUFBLFdBQ0EsT0FBQXlCLEtBQUF1OUIsYUFBQSxNQVFBMzlCLEVBQUFpOUIsU0FBQXdCLGVBQUEsU0FBQXR5QixHQUNBM04sT0FBQUMsZUFBQXVCLEVBQUFpOUIsU0FBQXY5QixVQUFBeU0sR0FDQXJMLElBQUEsU0FBQStDLEdBQ0F6RCxLQUFBNDhCLFFBQUE3d0IsR0FBQXRJLEdBRUFsRixJQUFBLFdBQ0EsT0FBQXlCLEtBQUE0OEIsUUFBQTd3QixPQVVBbk0sRUFBQWk5QixTQUFBd0IsZUFBQSxnQkFPQXorQixFQUFBaTlCLFNBQUF3QixlQUFBLGVBT0F6K0IsRUFBQWk5QixTQUFBd0IsZUFBQSxpQkFPQXorQixFQUFBaTlCLFNBQUF3QixlQUFBLGlCQU9BeitCLEVBQUFpOUIsU0FBQXdCLGVBQUEsa0JBUUF6K0IsRUFBQWk5QixTQUFBd0IsZUFBQSxrQkFPQXorQixFQUFBaTlCLFNBQUF3QixlQUFBLGlCQVFBeitCLEVBQUFpOUIsU0FBQXdCLGVBQUEsZUFLQXorQixFQUFBaTlCLFNBQUF2OUIsVUFBQW1CLFFBQUEsV0FNQSxPQUxBYixFQUFBbVEsVUFBQXpRLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUE0OEIsUUFBQXh1QixhQUNBcE8sS0FBQTQ4QixRQUFBLEtBQ0E1OEIsS0FBQXU5QixhQUFBLEtBQ0F2OUIsS0FBQTI5QixVQUFBLEtBQ0EzOUIsTUFFQUosRUFBQWk5QixXQUVBaDlCLEVBQUEsU0FBQUQsR0ErRkEsT0FsRkFBLEVBQUEwK0IsT0FBQSxXQUNBLElBQUF4N0IsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLE1BQ0EsVUFDQTFELEVBQUEwK0IsUUFDQTErQixFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQU1BQSxLQUFBNDhCLFFBQUE1OEIsS0FBQXFRLE1BQUEsSUFBQXpRLEVBQUE4OEIsT0FBQTU1QixFQUFBcTVCLEtBTUFuOEIsS0FBQW04QixJQUFBbjhCLEtBQUE0OEIsUUFBQVQsSUFNQW44QixLQUFBeXlCLFFBQUF6eUIsS0FBQTRRLE9BQUEsSUFBQWhSLEVBQUF3eUIsT0FBQXR2QixFQUFBdXZCLFFBTUFyeUIsS0FBQXF5QixPQUFBcnlCLEtBQUF5eUIsUUFBQUosT0FFQXJ5QixLQUFBNDhCLFFBQUFwNUIsUUFBQXhELEtBQUF5eUIsU0FDQXp5QixLQUFBdXlCLEtBQUF6dkIsRUFBQXl2QixLQUNBdnlCLEtBQUFrRSxXQUNBLE1BQ0EsWUFHQXRFLEVBQUE4RixPQUFBOUYsRUFBQTArQixPQUFBMStCLEVBQUFtUSxXQU9BblEsRUFBQTArQixPQUFBOTdCLFVBQ0EyNUIsSUFBQSxFQUNBOUosT0FBQSxFQUNBRSxNQUFBLEdBUUFuMEIsT0FBQUMsZUFBQXVCLEVBQUEwK0IsT0FBQWgvQixVQUFBLFFBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXl5QixRQUFBRixNQUVBN3hCLElBQUEsU0FBQTZ4QixHQUNBdnlCLEtBQUF5eUIsUUFBQUYsVUFPQTN5QixFQUFBMCtCLE9BQUFoL0IsVUFBQW1CLFFBQUEsV0FZQSxPQVhBYixFQUFBbVEsVUFBQXpRLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFvRSxXQUNBLE1BQ0EsV0FFQXBFLEtBQUE0OEIsUUFBQW44QixVQUNBVCxLQUFBNDhCLFFBQUEsS0FDQTU4QixLQUFBbThCLElBQUEsS0FDQW44QixLQUFBeXlCLFFBQUFoeUIsVUFDQVQsS0FBQXl5QixRQUFBLEtBQ0F6eUIsS0FBQXF5QixPQUFBLEtBQ0FyeUIsTUFFQUosRUFBQTArQixTQUVBeitCLEVBQUEsU0FBQUQsR0F3SUEsT0E3SEFBLEVBQUEyK0IsS0FBQSxXQUNBLElBQUF6N0IsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUFBLFFBQUExRCxFQUFBMitCLE1BQ0EzK0IsRUFBQW1RLFVBQUFsUyxLQUFBbUMsTUFLQUEsS0FBQXFRLE1BQUFyUSxLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQW1iLEtBTUEvYSxLQUFBdytCLFVBQUF4K0IsS0FBQXkrQixRQUFBdi9CLEtBQUFjLE1BRUFBLEtBQUF5RixRQUFBbUIsR0FBQSxPQUFBNUcsS0FBQXcrQixXQUVBeCtCLEtBQUEwK0IsS0FBQTU3QixFQUFBNDdCLE1BRUE5K0IsRUFBQThGLE9BQUE5RixFQUFBMitCLEtBQUEzK0IsRUFBQW1RLFdBTUFuUSxFQUFBMitCLEtBQUEvN0IsVUFBMkJrOEIsTUFBQSxHQVMzQnRnQyxPQUFBQyxlQUFBdUIsRUFBQTIrQixLQUFBai9CLFVBQUEsUUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBMitCLGFBRUFqK0IsSUFBQSxTQUFBZytCLEdBQ0FBLEVBQ0ExK0IsS0FBQTQrQixXQUVBNStCLEtBQUE2K0IsY0FFQTcrQixLQUFBeUYsUUFBQU0sS0FBQSxPQUFBL0YsU0FVQTVCLE9BQUFDLGVBQUF1QixFQUFBMitCLEtBQUFqL0IsVUFBQSxTQUNBZixJQUFBLFdBQ0EsV0FBQXlCLEtBQUFxUSxNQUFBbEwsS0FBQXhHLFNBT0FpQixFQUFBMitCLEtBQUFqL0IsVUFBQXMvQixTQUFBLFdBQ0FoL0IsRUFBQWlFLFFBQUE3RCxLQUFBeUYsUUFBQXE1QixnQkFDQTkrQixLQUFBeUYsUUFBQXE1QixpQkFFQTkrQixLQUFBMitCLGFBQ0EzK0IsS0FBQXlGLFFBQUFxNUIsYUFBQWw4QixLQUFBNUMsT0FPQUosRUFBQTIrQixLQUFBai9CLFVBQUF1L0IsWUFBQSxXQUNBLEdBQUE3K0IsS0FBQTIrQixZQUFBLENBQ0EsSUFBQXIyQixFQUFBdEksS0FBQXlGLFFBQUFxNUIsYUFBQTM5QixRQUFBbkIsTUFDQUEsS0FBQXlGLFFBQUFxNUIsYUFBQXY5QixPQUFBK0csRUFBQSxLQU9BMUksRUFBQTIrQixLQUFBai9CLFVBQUFxL0IsVUFBQSxXQUNBLFFBQUEvK0IsRUFBQWlFLFFBQUE3RCxLQUFBeUYsUUFBQXE1QixlQUNBLElBQUE5K0IsS0FBQXlGLFFBQUFxNUIsYUFBQXg5QixTQUFBLElBQUF0QixLQUFBeUYsUUFBQXE1QixhQUFBMzlCLFFBQUFuQixPQVNBSixFQUFBMitCLEtBQUFqL0IsVUFBQXkvQixTQUFBLFdBQ0EsT0FBQW4vQixFQUFBaUUsUUFBQTdELEtBQUF5RixRQUFBcTVCLGVBQUEsSUFBQTkrQixLQUFBeUYsUUFBQXE1QixhQUFBeDlCLFFBT0ExQixFQUFBMitCLEtBQUFqL0IsVUFBQW0vQixRQUFBLFdBQ0F6K0IsS0FBQTIrQixZQUNBMytCLEtBQUFxUSxNQUFBbEwsS0FBQXhHLE1BQUEsRUFDVXFCLEtBQUErK0IsV0FFVi8rQixLQUFBcVEsTUFBQWxMLEtBQUF4RyxNQUFBLEVBRUFxQixLQUFBcVEsTUFBQWxMLEtBQUF4RyxNQUFBLEdBT0FpQixFQUFBMitCLEtBQUFqL0IsVUFBQW1CLFFBQUEsV0FLQSxPQUpBVCxLQUFBeUYsUUFBQWtCLElBQUEsT0FBQTNHLEtBQUF3K0IsV0FDQXgrQixLQUFBNitCLGNBQ0E3K0IsS0FBQXcrQixVQUFBLEtBQ0E1K0IsRUFBQW1RLFVBQUF6USxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxNQUVBSixFQUFBMitCLE9BRUExK0IsRUFBQSxTQUFBRCxHQXdEQSxPQWpEQUEsRUFBQThqQixTQUFBLFdBQ0EsSUFBQTVnQixFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQUEsUUFBQTFELEVBQUE4akIsVUFDQTVnQixFQUFBbUwsS0FBQXJPLEVBQUF3akIsU0FBQTNVLEtBQUFpVixTQUNBOWpCLEVBQUFtUSxVQUFBbFMsS0FBQW1DLE1BTUFBLEtBQUFxakIsVUFBQXJqQixLQUFBcVEsTUFBQXJRLEtBQUE0USxPQUFBLElBQUFoUixFQUFBd2pCLFNBQUF0Z0IsSUFFQWxELEVBQUE4RixPQUFBOUYsRUFBQThqQixTQUFBOWpCLEVBQUFtUSxXQU1BblEsRUFBQThqQixTQUFBbGhCLFVBQStCZ2hCLEtBQUEsTUFNL0I1akIsRUFBQThqQixTQUFBcGtCLFVBQUFza0IsU0FBQSxXQUNBLE9BQUE1akIsS0FBQXFqQixVQUFBTyxZQVFBeGxCLE9BQUFDLGVBQUF1QixFQUFBOGpCLFNBQUFwa0IsVUFBQSxRQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFxakIsVUFBQUcsTUFFQTlpQixJQUFBLFNBQUE4aUIsR0FDQXhqQixLQUFBcWpCLFVBQUFHLFVBT0E1akIsRUFBQThqQixTQUFBcGtCLFVBQUFtQixRQUFBLFdBQ0FiLEVBQUFtUSxVQUFBelEsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQXFqQixVQUFBNWlCLFVBQ0FULEtBQUFxakIsVUFBQSxNQUVBempCLEVBQUE4akIsV0FFQTdqQixFQUFBLFNBQUFELEdBeUhBLE9BbkdBQSxFQUFBby9CLGdCQUFBLFdBQ0EsSUFBQWw4QixFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsU0FDQSxTQUNBMUQsRUFBQW8vQixpQkFDQXAvQixFQUFBL0IsS0FBQW1DLE1BS0FBLEtBQUE2QyxPQUFBQyxFQUFBRCxPQVlBN0MsS0FBQXNJLE1BQUF4RixFQUFBd0YsT0FFQTFJLEVBQUE4RixPQUFBOUYsRUFBQW8vQixpQkFNQXAvQixFQUFBby9CLGdCQUFBeDhCLFVBQ0E4RixNQUFBLEVBQ0F6RixXQVNBekUsT0FBQUMsZUFBQXVCLEVBQUFvL0IsZ0JBQUExL0IsVUFBQSxTQUNBZixJQUFBLFdBQ0EsSUFBQStKLEVBQUF0SSxLQUFBc0ksTUFDQUEsRUFBQTFELEtBQUFzWCxJQUFBNVQsRUFBQXRJLEtBQUE2QyxPQUFBdkIsT0FBQSxHQUNBLElBQUEyOUIsRUFBQXI2QixLQUFBMEUsTUFBQWhCLEdBQ0E0MkIsRUFBQWwvQixLQUFBNkMsT0FBQW84QixHQUNBRSxFQUFBbi9CLEtBQUE2QyxPQUFBK0IsS0FBQW1kLEtBQUF6WixJQUNBLE9BQUF0SSxLQUFBby9CLGFBQUE5MkIsRUFBQTIyQixFQUFBQyxFQUFBQyxNQVdBdi9CLEVBQUFvL0IsZ0JBQUExL0IsVUFBQTgvQixhQUFBLFNBQUE5MkIsRUFBQTQyQixFQUFBQyxHQUNBLEdBQUF2L0IsRUFBQWlFLFFBQUFxN0IsR0FBQSxDQUVBLElBREEsSUFBQUcsS0FDQTNoQyxFQUFBLEVBQTRCQSxFQUFBd2hDLEVBQUE1OUIsT0FBa0I1RCxJQUM5QzJoQyxFQUFBM2hDLEdBQUFzQyxLQUFBby9CLGFBQUE5MkIsRUFBQTQyQixFQUFBeGhDLEdBQUF5aEMsRUFBQXpoQyxJQUVBLE9BQUEyaEMsRUFDVSxHQUFBei9CLEVBQUFpQixTQUFBcStCLEdBQUEsQ0FDVixJQUFBSSxLQUNBLFFBQUFyK0IsS0FBQWkrQixFQUNBSSxFQUFBcitCLEdBQUFqQixLQUFBby9CLGFBQUE5MkIsRUFBQTQyQixFQUFBaitCLEdBQUFrK0IsRUFBQWwrQixJQUVBLE9BQUFxK0IsRUFJQSxTQUFBaDNCLElBRkE0MkIsRUFBQWwvQixLQUFBdS9CLFVBQUFMLElBRUE1MkIsR0FEQTYyQixFQUFBbi9CLEtBQUF1L0IsVUFBQUosS0FVQXYvQixFQUFBby9CLGdCQUFBMS9CLFVBQUFpZ0MsVUFBQSxTQUFBOTdCLEdBQ0EsT0FBQTdELEVBQUE4RCxTQUFBRCxHQUNBQSxFQUdBekQsS0FBQXlULFVBQUFoUSxJQU9BN0QsRUFBQW8vQixnQkFBQTEvQixVQUFBbUIsUUFBQSxXQUNBVCxLQUFBNkMsT0FBQSxNQUVBakQsRUFBQW8vQixrQkFFQW4vQixFQUFBLFNBQUFELEdBZ0hBLE9BbEZBQSxFQUFBNC9CLFdBQUEsU0FBQTM4QixFQUFBeW9CLEdBQ0ExckIsRUFBQS9CLEtBQUFtQyxNQU1BQSxLQUFBNkMsT0FBQWpELEVBQUFtRCxXQUFBRixNQU9BN0MsS0FBQXJCLE1BQUFpQixFQUFBbUQsV0FBQXVvQixFQUFBbHRCLE9BQUFxRSxLQUFBekMsS0FBQTZDLFFBQUEsS0FFQWpELEVBQUE4RixPQUFBOUYsRUFBQTQvQixZQUtBNS9CLEVBQUE0L0IsV0FBQWxnQyxVQUFBbWdDLEtBQUEsV0FDQSxHQUFBei9CLEtBQUE2QyxPQUFBdEQsZUFBQVMsS0FBQXJCLE9BQUEsQ0FDQSxJQUFBOGdDLEVBQUF6L0IsS0FBQTZDLE9BQUE3QyxLQUFBckIsT0FDQSxHQUFBaUIsRUFBQWlFLFFBQUE0N0IsR0FJQSxJQUhBLElBQUFDLEVBQUExL0IsS0FBQTIvQixxQkFBQUYsR0FDQUcsRUFBQWg3QixLQUFBaTdCLFNBQ0FuckIsRUFBQSxFQUNBaFgsRUFBQSxFQUFnQ0EsRUFBQWdpQyxFQUFBcCtCLE9BQXlCNUQsSUFBQSxDQUN6RCxJQUFBb2lDLEVBQUFKLEVBQUFoaUMsR0FDQSxHQUFBa2lDLEVBQUFsckIsR0FBQWtyQixFQUFBbHJCLEVBQUFvckIsRUFBQSxDQUNBLElBQUFDLEVBQUFOLEVBQUEvaEMsR0FDQWtDLEVBQUFpQixTQUFBay9CLEdBQ0EvL0IsS0FBQXJCLE1BQUFvaEMsRUFBQXBoQyxNQUVBcUIsS0FBQXJCLE1BQUFvaEMsRUFHQXJyQixHQUFBb3JCLE9BR0E5L0IsS0FBQXJCLE1BQUE4Z0MsRUFHQSxPQUFBei9CLEtBQUFyQixPQVNBaUIsRUFBQTQvQixXQUFBbGdDLFVBQUFxZ0MscUJBQUEsU0FBQTc4QixHQUlBLElBSEEsSUFBQTQ4QixLQUNBaHJCLEVBQUEsRUFDQXNyQixHQUFBLEVBQ0F0aUMsRUFBQSxFQUF3QkEsRUFBQW9GLEVBQUF4QixPQUFvQjVELElBQUEsQ0FDNUMsSUFBQXVpQyxFQUFBbjlCLEVBQUFwRixHQUNBa0MsRUFBQWlCLFNBQUFvL0IsSUFDQUQsR0FBQSxFQUNBTixFQUFBaGlDLEdBQUF1aUMsRUFBQUMsYUFFQVIsRUFBQWhpQyxHQUFBLEVBQUFvRixFQUFBeEIsT0FFQW9ULEdBQUFnckIsRUFBQWhpQyxHQUVBLEdBQUFzaUMsRUFFQSxRQUFBNTlCLEVBQUEsRUFBNEJBLEVBQUFzOUIsRUFBQXArQixPQUF5QmMsSUFDckRzOUIsRUFBQXQ5QixHQUFBczlCLEVBQUF0OUIsR0FBQXNTLEVBR0EsT0FBQWdyQixHQU1BOS9CLEVBQUE0L0IsV0FBQWxnQyxVQUFBbUIsUUFBQSxXQUNBVCxLQUFBNkMsT0FBQSxNQUVBakQsRUFBQTQvQixhQUVBMy9CLEVBQUEsU0FBQUQsR0FnUEEsT0EzTkFBLEVBQUF1Z0MsWUFBQSxXQUNBLElBQUFyOUIsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLFNBQ0EsUUFDQTFELEVBQUF1Z0MsYUFDQXZnQyxFQUFBL0IsS0FBQW1DLE1BS0FBLEtBQUE2QyxPQUFBQyxFQUFBRCxPQUtBN0MsS0FBQXNJLE1BQUEsRUFNQXRJLEtBQUFxTyxNQUFBLEtBTUFyTyxLQUFBb2dDLFVBQUEsS0FNQXBnQyxLQUFBcWdDLFdBQUEsS0FDQXJnQyxLQUFBaU8sS0FBQW5MLEVBQUFtTCxNQUVBck8sRUFBQThGLE9BQUE5RixFQUFBdWdDLGFBTUF2Z0MsRUFBQXVnQyxZQUFBMXhCLE1BQ0E2eEIsR0FBQSxLQUNBQyxLQUFBLE9BQ0FDLE9BQUEsU0FDQUMsT0FBQSxTQUNBQyxZQUFBLGNBQ0FDLGNBQUEsZ0JBQ0FDLE9BQUEsU0FDQUMsV0FBQSxhQUNBQyxXQUFBLGNBTUFsaEMsRUFBQXVnQyxZQUFBMzlCLFVBQ0F5TCxLQUFBck8sRUFBQXVnQyxZQUFBMXhCLEtBQUE2eEIsR0FDQXo5QixXQVNBekUsT0FBQUMsZUFBQXVCLEVBQUF1Z0MsWUFBQTdnQyxVQUFBLFNBQ0FmLElBQUEsV0FFQSxPQUFBeUIsS0FBQTZDLE9BQUF2QixPQUFBLENBRWMsT0FBQXRCLEtBQUE2QyxPQUFBdkIsT0FDZCxPQUFBdEIsS0FBQTZDLE9BQUEsR0FFQTdDLEtBQUFzSSxNQUFBMUQsS0FBQXNYLElBQUFsYyxLQUFBc0ksTUFBQXRJLEtBQUE2QyxPQUFBdkIsT0FBQSxHQUNBLElBQUFtQyxFQUFBekQsS0FBQTZDLE9BQUE3QyxLQUFBc0ksT0FPQSxPQU5BdEksS0FBQWlPLE9BQUFyTyxFQUFBdWdDLFlBQUExeEIsS0FBQXF5QixhQUNBOWdDLEtBQUE2QyxPQUFBdkIsU0FBQXRCLEtBQUFvZ0MsVUFBQTkrQixRQUNBdEIsS0FBQStnQyxpQkFFQXQ5QixFQUFBekQsS0FBQTZDLE9BQUE3QyxLQUFBb2dDLFVBQUFwZ0MsS0FBQXNJLFNBRUE3RSxNQVVBckYsT0FBQUMsZUFBQXVCLEVBQUF1Z0MsWUFBQTdnQyxVQUFBLFFBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXFPLE9BRUEzTixJQUFBLFNBQUF1TixHQUNBak8sS0FBQXFPLE1BQUFKLEVBQ0FqTyxLQUFBb2dDLFVBQUEsS0FFQXBnQyxLQUFBcU8sUUFBQXpPLEVBQUF1Z0MsWUFBQTF4QixLQUFBNnhCLElBQUF0Z0MsS0FBQXFPLFFBQUF6TyxFQUFBdWdDLFlBQUExeEIsS0FBQSt4QixRQUFBeGdDLEtBQUFxTyxRQUFBek8sRUFBQXVnQyxZQUFBMXhCLEtBQUFxeUIsWUFBQTlnQyxLQUFBcU8sUUFBQXpPLEVBQUF1Z0MsWUFBQTF4QixLQUFBaXlCLFlBQ0ExZ0MsS0FBQXNJLE1BQUEsRUFDY3RJLEtBQUFxTyxRQUFBek8sRUFBQXVnQyxZQUFBMXhCLEtBQUE4eEIsTUFBQXZnQyxLQUFBcU8sUUFBQXpPLEVBQUF1Z0MsWUFBQTF4QixLQUFBZ3lCLFFBQUF6Z0MsS0FBQXFPLFFBQUF6TyxFQUFBdWdDLFlBQUExeEIsS0FBQWt5QixnQkFDZDNnQyxLQUFBc0ksTUFBQXRJLEtBQUE2QyxPQUFBdkIsT0FBQSxHQUdBdEIsS0FBQXFPLFFBQUF6TyxFQUFBdWdDLFlBQUExeEIsS0FBQSt4QixRQUFBeGdDLEtBQUFxTyxRQUFBek8sRUFBQXVnQyxZQUFBMXhCLEtBQUFpeUIsWUFDQTFnQyxLQUFBcWdDLFdBQUF6Z0MsRUFBQXVnQyxZQUFBMXhCLEtBQUE2eEIsR0FDY3RnQyxLQUFBcU8sUUFBQXpPLEVBQUF1Z0MsWUFBQTF4QixLQUFBZ3lCLFFBQUF6Z0MsS0FBQXFPLFFBQUF6TyxFQUFBdWdDLFlBQUExeEIsS0FBQWt5QixnQkFDZDNnQyxLQUFBcWdDLFdBQUF6Z0MsRUFBQXVnQyxZQUFBMXhCLEtBQUE4eEIsTUFHQXZnQyxLQUFBcU8sUUFBQXpPLEVBQUF1Z0MsWUFBQTF4QixLQUFBcXlCLFdBQ0E5Z0MsS0FBQStnQyxpQkFDYy9nQyxLQUFBcU8sUUFBQXpPLEVBQUF1Z0MsWUFBQVMsU0FDZDVnQyxLQUFBc0ksTUFBQTFELEtBQUEwRSxNQUFBMUUsS0FBQWk3QixTQUFBNy9CLEtBQUE2QyxPQUFBdkIsWUFTQTFCLEVBQUF1Z0MsWUFBQTdnQyxVQUFBbWdDLEtBQUEsV0FDQSxJQUFBeHhCLEVBQUFqTyxLQUFBaU8sS0FtRUEsT0FqRUFBLElBQUFyTyxFQUFBdWdDLFlBQUExeEIsS0FBQTZ4QixJQUNBdGdDLEtBQUFzSSxRQUNBdEksS0FBQXNJLE9BQUF0SSxLQUFBNkMsT0FBQXZCLFNBQ0F0QixLQUFBc0ksTUFBQSxJQUVVMkYsSUFBQXJPLEVBQUF1Z0MsWUFBQTF4QixLQUFBOHhCLE1BQ1Z2Z0MsS0FBQXNJLFFBQ0F0SSxLQUFBc0ksTUFBQSxJQUNBdEksS0FBQXNJLE1BQUF0SSxLQUFBNkMsT0FBQXZCLE9BQUEsSUFFVTJNLElBQUFyTyxFQUFBdWdDLFlBQUExeEIsS0FBQSt4QixRQUFBdnlCLElBQUFyTyxFQUFBdWdDLFlBQUExeEIsS0FBQWd5QixRQUNWemdDLEtBQUFxZ0MsYUFBQXpnQyxFQUFBdWdDLFlBQUExeEIsS0FBQTZ4QixHQUNBdGdDLEtBQUFzSSxRQUVBdEksS0FBQXNJLFFBRUF0SSxLQUFBc0ksTUFBQSxHQUNBdEksS0FBQXNJLE1BQUEsRUFDQXRJLEtBQUFxZ0MsV0FBQXpnQyxFQUFBdWdDLFlBQUExeEIsS0FBQTZ4QixJQUNjdGdDLEtBQUFzSSxPQUFBdEksS0FBQTZDLE9BQUF2QixTQUNkdEIsS0FBQXNJLE1BQUF0SSxLQUFBNkMsT0FBQXZCLE9BQUEsRUFDQXRCLEtBQUFxZ0MsV0FBQXpnQyxFQUFBdWdDLFlBQUExeEIsS0FBQTh4QixPQUVVdHlCLElBQUFyTyxFQUFBdWdDLFlBQUExeEIsS0FBQW15QixPQUNWNWdDLEtBQUFzSSxNQUFBMUQsS0FBQTBFLE1BQUExRSxLQUFBaTdCLFNBQUE3L0IsS0FBQTZDLE9BQUF2QixRQUNVMk0sSUFBQXJPLEVBQUF1Z0MsWUFBQTF4QixLQUFBb3lCLFdBQ1ZqOEIsS0FBQWk3QixTQUFBLElBQ0E3L0IsS0FBQXNJLFFBQ0F0SSxLQUFBc0ksTUFBQTFELEtBQUE4SyxJQUFBMVAsS0FBQXNJLE1BQUEsS0FFQXRJLEtBQUFzSSxRQUNBdEksS0FBQXNJLE1BQUExRCxLQUFBc1gsSUFBQWxjLEtBQUFzSSxNQUFBdEksS0FBQTZDLE9BQUF2QixPQUFBLElBRVUyTSxJQUFBck8sRUFBQXVnQyxZQUFBMXhCLEtBQUFxeUIsWUFDVjlnQyxLQUFBc0ksUUFDQXRJLEtBQUFzSSxPQUFBdEksS0FBQTZDLE9BQUF2QixTQUNBdEIsS0FBQXNJLE1BQUEsRUFFQXRJLEtBQUErZ0MsbUJBRVU5eUIsSUFBQXJPLEVBQUF1Z0MsWUFBQTF4QixLQUFBaXlCLGFBQ1YxZ0MsS0FBQXFnQyxhQUFBemdDLEVBQUF1Z0MsWUFBQTF4QixLQUFBNnhCLElBQ0F0Z0MsS0FBQXNJLE9BQUEsRUFDQXRJLEtBQUFxZ0MsV0FBQXpnQyxFQUFBdWdDLFlBQUExeEIsS0FBQTh4QixPQUVBdmdDLEtBQUFzSSxPQUFBLEVBQ0F0SSxLQUFBcWdDLFdBQUF6Z0MsRUFBQXVnQyxZQUFBMXhCLEtBQUE2eEIsSUFFQXRnQyxLQUFBc0ksT0FBQXRJLEtBQUE2QyxPQUFBdkIsU0FDQXRCLEtBQUFzSSxNQUFBLEVBQ0F0SSxLQUFBcWdDLFdBQUF6Z0MsRUFBQXVnQyxZQUFBMXhCLEtBQUE2eEIsS0FFVXJ5QixJQUFBck8sRUFBQXVnQyxZQUFBMXhCLEtBQUFreUIsZ0JBQ1YzZ0MsS0FBQXFnQyxhQUFBemdDLEVBQUF1Z0MsWUFBQTF4QixLQUFBNnhCLElBQ0F0Z0MsS0FBQXNJLE9BQUEsRUFDQXRJLEtBQUFxZ0MsV0FBQXpnQyxFQUFBdWdDLFlBQUExeEIsS0FBQTh4QixPQUVBdmdDLEtBQUFzSSxPQUFBLEVBQ0F0SSxLQUFBcWdDLFdBQUF6Z0MsRUFBQXVnQyxZQUFBMXhCLEtBQUE2eEIsSUFFQXRnQyxLQUFBc0ksTUFBQSxJQUNBdEksS0FBQXNJLE1BQUF0SSxLQUFBNkMsT0FBQXZCLE9BQUEsRUFDQXRCLEtBQUFxZ0MsV0FBQXpnQyxFQUFBdWdDLFlBQUExeEIsS0FBQTh4QixPQUdBdmdDLEtBQUFyQixPQU1BaUIsRUFBQXVnQyxZQUFBN2dDLFVBQUF5aEMsZUFBQSxXQUNBLElBQUFDLEtBQ0FoaEMsS0FBQW9nQyxhQUNBLFFBQUExaUMsRUFBQSxFQUF3QkEsRUFBQXNDLEtBQUE2QyxPQUFBdkIsT0FBd0I1RCxJQUNoRHNqQyxFQUFBdGpDLEtBRUEsS0FBQXNqQyxFQUFBMS9CLE9BQUEsSUFDQSxJQUFBMi9CLEVBQUFELEVBQUF6L0IsT0FBQXFELEtBQUEwRSxNQUFBMDNCLEVBQUExL0IsT0FBQXNELEtBQUFpN0IsVUFBQSxHQUNBNy9CLEtBQUFvZ0MsVUFBQXg5QixLQUFBcStCLEVBQUEsTUFPQXJoQyxFQUFBdWdDLFlBQUE3Z0MsVUFBQW1CLFFBQUEsV0FDQVQsS0FBQW9nQyxVQUFBLEtBQ0FwZ0MsS0FBQTZDLE9BQUEsTUFFQWpELEVBQUF1Z0MsY0FFQXRnQyxFQUFBLFNBQUFELEdBb0VBLE9BcERBQSxFQUFBc2hDLFdBQUEsV0FDQSxJQUFBcCtCLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxNQUNBLE9BQ0ExRCxFQUFBc2hDLFlBQ0F0aEMsRUFBQS9CLEtBQUFtQyxNQUtBQSxLQUFBa2MsSUFBQXBaLEVBQUFvWixJQUtBbGMsS0FBQTBQLElBQUE1TSxFQUFBNE0sSUFLQTFQLEtBQUFtaEMsUUFBQXIrQixFQUFBcStCLFNBRUF2aEMsRUFBQThGLE9BQUE5RixFQUFBc2hDLFlBTUF0aEMsRUFBQXNoQyxXQUFBMStCLFVBQ0EwWixJQUFBLEVBQ0F4TSxJQUFBLEVBQ0F5eEIsU0FBQSxHQVNBL2lDLE9BQUFDLGVBQUF1QixFQUFBc2hDLFdBQUE1aEMsVUFBQSxTQUNBZixJQUFBLFdBQ0EsSUFBQTJkLEVBQUFsYyxLQUFBeVQsVUFBQXpULEtBQUFrYyxLQUNBeE0sRUFBQTFQLEtBQUF5VCxVQUFBelQsS0FBQTBQLEtBQ0Frd0IsRUFBQWg3QixLQUFBaTdCLFNBQ0FwOEIsRUFBQW04QixFQUFBMWpCLEdBQUEsRUFBQTBqQixHQUFBbHdCLEVBSUEsT0FIQTFQLEtBQUFtaEMsVUFDQTE5QixFQUFBbUIsS0FBQTBFLE1BQUE3RixJQUVBQSxLQUdBN0QsRUFBQXNoQyxhQUVBcmhDLEVBQUEsU0FBQUQsR0F1SkEsT0ExSEFBLEVBQUF3aEMsUUFBQSxTQUFBQyxHQUVBLElBQUE1NUIsRUFBQTNELE1BQUF4RSxVQUFBb0ksTUFBQTdKLEtBQUF5RixXQUNBbUUsRUFBQW1CLFFBQ0EsSUFBQTlGLEVBQUFsRCxFQUFBNEMsU0FBQWlGLEdBQ0EsU0FDQSxXQUNBN0gsRUFBQXdoQyxTQWVBLFFBQUFuaUMsS0FkQVcsRUFBQS9CLEtBQUFtQyxNQU1BQSxLQUFBc2hDLFlBS0F0aEMsS0FBQTQxQixRQUFBOXlCLEVBQUE4eUIsUUFDQTUxQixLQUFBdWhDLGNBQUEsRUFFQUYsRUFDQXJoQyxLQUFBdWhDLGdCQUNBdmhDLEtBQUFtSSxJQUFBbEosRUFBQW9pQyxFQUFBcGlDLEdBQUFlLEtBQUF3aEMsY0FBQXRpQyxLQUFBYyxLQUFBOEMsRUFBQXV4QixVQUdBejBCLEVBQUE4RixPQUFBOUYsRUFBQXdoQyxTQUtBeGhDLEVBQUF3aEMsUUFBQTUrQixVQUNBNnhCLE9BQUF6MEIsRUFBQXFFLEtBQ0EyeEIsUUFBQSxJQVFBaDJCLEVBQUF3aEMsUUFBQTloQyxVQUFBbWlDLElBQUEsU0FBQXhqQyxHQUNBLE9BQUErQixLQUFBc2hDLFNBQUEvaEMsZUFBQXRCLElBU0EyQixFQUFBd2hDLFFBQUE5aEMsVUFBQWYsSUFBQSxTQUFBTixHQUNBLEdBQUErQixLQUFBeWhDLElBQUF4akMsR0FDQSxPQUFBK0IsS0FBQXNoQyxTQUFBcmpDLEdBRUEsVUFBQWdDLE1BQUEsaUNBQUFoQyxJQVFBMkIsRUFBQXdoQyxRQUFBOWhDLFVBQUFraUMsY0FBQSxTQUFBdjZCLEdBQ0FqSCxLQUFBdWhDLGdCQUNBLElBQUF2aEMsS0FBQXVoQyxlQUFBdDZCLEdBQ0FBLEVBQUFqSCxPQVVBNUIsT0FBQUMsZUFBQXVCLEVBQUF3aEMsUUFBQTloQyxVQUFBLFVBQ0FmLElBQUEsV0FDQSxJQUFBbWpDLEdBQUEsRUFDQSxRQUFBQyxLQUFBM2hDLEtBQUFzaEMsU0FBQSxDQUNBLElBQUE1TSxFQUFBMTBCLEtBQUF6QixJQUFBb2pDLEdBQ0FELEtBQUFoTixFQUFBSixPQUVBLE9BQUFvTixLQWFBOWhDLEVBQUF3aEMsUUFBQTloQyxVQUFBNkksSUFBQSxTQUFBbEssRUFBQW0yQixFQUFBbnRCLEdBV0EsT0FWQUEsRUFBQXJILEVBQUFtRCxXQUFBa0UsRUFBQXJILEVBQUFxRSxNQUNBbXdCLGFBQUF4MEIsRUFBQW8wQixRQUNBaDBCLEtBQUFzaEMsU0FBQXJqQyxHQUFBbTJCLEVBQ0FudEIsRUFBQWpILE9BQ1VvMEIsYUFBQVgsYUFDVnp6QixLQUFBc2hDLFNBQUFyakMsR0FBQSxJQUFBMkIsRUFBQW8wQixPQUFBSSxHQUNBbnRCLEVBQUFqSCxPQUNVSixFQUFBa0IsU0FBQXN6QixLQUNWcDBCLEtBQUFzaEMsU0FBQXJqQyxHQUFBLElBQUEyQixFQUFBbzBCLE9BQUFoMEIsS0FBQTQxQixRQUFBeEIsRUFBQW50QixJQUVBakgsTUFNQUosRUFBQXdoQyxRQUFBOWhDLFVBQUFtQixRQUFBLFdBRUEsUUFBQXhDLEtBREEyQixFQUFBTixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBc2hDLFNBQ0F0aEMsS0FBQXNoQyxTQUFBcmpDLEdBQUF3QyxVQUdBLE9BREFULEtBQUFzaEMsU0FBQSxLQUNBdGhDLE1BRUFKLEVBQUF3aEMsVUFFQXZoQyxFQUFBLFNBQUFELEdBY0EsSUFBQWdpQyxLQTZDQSxPQW5DQWhpQyxFQUFBTixVQUFBdzNCLEtBQUEsU0FBQStLLEVBQUEzUSxHQUNBMFEsRUFBQXJpQyxlQUFBc2lDLEtBQ0FELEVBQUFDLEdBQUE3aEMsS0FBQXlGLFFBQUF5RixjQUVBZ21CLEVBQUF0eEIsRUFBQW1ELFdBQUFtdUIsRUFBQSxHQUNBLElBQUE0USxFQUFBLElBQUFsaUMsRUFBQW1iLEtBQUFtVyxFQUFBdHhCLEVBQUE2TyxLQUFBa00sVUFHQSxPQUZBM2EsS0FBQXdELFFBQUFzK0IsR0FDQUEsRUFBQXQrQixRQUFBbytCLEVBQUFDLElBQ0FDLEdBV0FsaUMsRUFBQU4sVUFBQXlpQyxRQUFBLFNBQUFGLEVBQUE1d0IsR0FLQSxPQUpBMndCLEVBQUFyaUMsZUFBQXNpQyxLQUNBRCxFQUFBQyxHQUFBN2hDLEtBQUF5RixRQUFBeUYsY0FFQTAyQixFQUFBQyxHQUFBcitCLFFBQUF4RCxLQUFBLEVBQUFpUixHQUNBalIsTUFHQUosRUFBQWtHLFFBQUFjLEdBQUEsZ0JBQUFuQixHQUNBQSxFQUFBbThCLE1BQ0FBLEVBQUFuOEIsRUFBQW04QixPQUVBQSxLQUNBbjhCLEVBQUFtOEIsV0FHQWhpQyxJQUVBQyxFQUFBLFNBQUFELEdBaUdBLE9BN0VBQSxFQUFBb2lDLEtBQUEsV0FDQXBpQyxFQUFBL0IsS0FBQW1DLE1BTUFBLEtBQUErRyxRQUFBLElBQUFuSCxFQUFBbUksU0FNQS9ILEtBQUFpaUMsV0FBQSxJQVFBamlDLEtBQUFraUMsYUFBQSxLQU1BbGlDLEtBQUFtaUMsZUFBQW5pQyxLQUFBb2lDLFVBQUFsakMsS0FBQWMsT0FFQUosRUFBQThGLE9BQUE5RixFQUFBb2lDLE1BU0FwaUMsRUFBQW9pQyxLQUFBMWlDLFVBQUE2eEIsU0FBQSxTQUFBbHFCLEVBQUFtQixHQVNBLE9BUkFwSSxLQUFBK0csUUFBQW9CLEtBQ0FsQixXQUNBbUIsS0FBQXBJLEtBQUF5VCxVQUFBckwsS0FHQSxJQUFBcEksS0FBQStHLFFBQUF6RixRQUNBK2dDLHNCQUFBcmlDLEtBQUFtaUMsZ0JBRUFuaUMsTUFRQUosRUFBQW9pQyxLQUFBMWlDLFVBQUF5SixPQUFBLFNBQUFDLEdBRUEsT0FEQWhKLEtBQUErRyxRQUFBZ0MsT0FBQS9JLEtBQUF5VCxVQUFBekssSUFDQWhKLE1BTUFKLEVBQUFvaUMsS0FBQTFpQyxVQUFBOGlDLFVBQUEsV0FFQSxJQURBLElBQUE1OEIsRUFBQTVGLEVBQUE0RixNQUNBeEYsS0FBQStHLFFBQUF6RixRQUFBdEIsS0FBQStHLFFBQUE0QixPQUFBUCxLQUFBcEksS0FBQWtpQyxjQUFBMThCLEdBQUEsQ0FDQSxJQUFBd0IsRUFBQWhILEtBQUErRyxRQUFBNkIsUUFDQXBELEVBQUF3QixFQUFBb0IsTUFBQXBJLEtBQUFpaUMsWUFDQWo3QixFQUFBQyxXQUdBakgsS0FBQStHLFFBQUF6RixPQUFBLEdBQ0ErZ0Msc0JBQUFyaUMsS0FBQW1pQyxpQkFJQXZpQyxFQUFBb2lDLEtBQUEsSUFBQXBpQyxFQUFBb2lDLEtBQ0FwaUMsRUFBQW9pQyxPQUVBbmlDLEVBQUEsU0FBQUQsR0F5QkFBLEVBQUEwaUMsU0FBQSxXQUNBMWlDLEVBQUEvQixLQUFBbUMsTUFNQUEsS0FBQXU5QixjQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxHQU9BdjlCLEtBQUEyOUIsV0FDQSxFQUNBLEVBQ0EsR0FFQS85QixFQUFBMkcsV0FBQSxXQUVBdkcsS0FBQVUsSUFBQTZoQyxFQUFBLy9CLFdBQ1V0RCxLQUFBYyxRQUVWSixFQUFBOEYsT0FBQTlGLEVBQUEwaUMsVUFPQTFpQyxFQUFBMGlDLFNBQUE5L0IsVUFDQW83QixVQUFBLEVBQ0FDLFVBQUEsRUFDQUMsVUFBQSxFQUNBMEUsU0FBQSxFQUNBQyxTQUFBLEVBQ0FDLFNBQUEsRUFDQUMsSUFBQSxFQUNBQyxJQUFBLEVBQ0FDLElBQUEsR0FPQWpqQyxFQUFBMGlDLFNBQUFoakMsVUFBQXkrQixrQkFBQSxJQVFBbitCLEVBQUEwaUMsU0FBQWhqQyxVQUFBMCtCLFlBQUEsU0FBQXBFLEVBQUFxRSxFQUFBQyxHQUNBLEdBQUFsK0IsS0FBQXlGLFFBQUFxOUIsU0FBQWxGLFVBQUEsQ0FDQSxJQUFBcDRCLEVBQUF4RixLQUFBd0YsTUFDQXhGLEtBQUF5RixRQUFBcTlCLFNBQUFsRixVQUFBamdCLGdCQUFBaWMsRUFBQXAwQixFQUFBeEYsS0FBQSs5QixtQkFDQS85QixLQUFBeUYsUUFBQXE5QixTQUFBakYsVUFBQWxnQixnQkFBQXNnQixFQUFBejRCLEVBQUF4RixLQUFBKzlCLG1CQUNBLzlCLEtBQUF5RixRQUFBcTlCLFNBQUFoRixVQUFBbmdCLGdCQUFBdWdCLEVBQUExNEIsRUFBQXhGLEtBQUErOUIsd0JBRUEvOUIsS0FBQXlGLFFBQUFxOUIsU0FBQTlFLFlBQUFwRSxFQUFBcUUsRUFBQUMsR0FHQSxPQURBbCtCLEtBQUEyOUIsVUFBQTc1QixNQUFBeEUsVUFBQW9JLE1BQUE3SixLQUFBeUYsV0FDQXRELE1BZUFKLEVBQUEwaUMsU0FBQWhqQyxVQUFBNitCLGVBQUEsU0FBQXZFLEVBQUFxRSxFQUFBQyxFQUFBeUUsRUFBQUMsRUFBQUMsR0FDQSxHQUFBN2lDLEtBQUF5RixRQUFBcTlCLFNBQUFOLFNBQUEsQ0FDQSxJQUFBaDlCLEVBQUF4RixLQUFBd0YsTUFDQXhGLEtBQUF5RixRQUFBcTlCLFNBQUFOLFNBQUE3a0IsZ0JBQUFpYyxFQUFBcDBCLEVBQUF4RixLQUFBKzlCLG1CQUNBLzlCLEtBQUF5RixRQUFBcTlCLFNBQUFMLFNBQUE5a0IsZ0JBQUFzZ0IsRUFBQXo0QixFQUFBeEYsS0FBQSs5QixtQkFDQS85QixLQUFBeUYsUUFBQXE5QixTQUFBSixTQUFBL2tCLGdCQUFBdWdCLEVBQUExNEIsRUFBQXhGLEtBQUErOUIsbUJBQ0EvOUIsS0FBQXlGLFFBQUFxOUIsU0FBQUgsSUFBQWhsQixnQkFBQWdsQixFQUFBbjlCLEVBQUF4RixLQUFBKzlCLG1CQUNBLzlCLEtBQUF5RixRQUFBcTlCLFNBQUFGLElBQUFqbEIsZ0JBQUFpbEIsRUFBQXA5QixFQUFBeEYsS0FBQSs5QixtQkFDQS85QixLQUFBeUYsUUFBQXE5QixTQUFBRCxJQUFBbGxCLGdCQUFBa2xCLEVBQUFyOUIsRUFBQXhGLEtBQUErOUIsd0JBRUEvOUIsS0FBQXlGLFFBQUFxOUIsU0FBQTNFLGVBQUF2RSxFQUFBcUUsRUFBQUMsRUFBQXlFLEVBQUFDLEVBQUFDLEdBR0EsT0FEQTdpQyxLQUFBdTlCLGFBQUF6NUIsTUFBQXhFLFVBQUFvSSxNQUFBN0osS0FBQXlGLFdBQ0F0RCxNQVFBNUIsT0FBQUMsZUFBQXVCLEVBQUEwaUMsU0FBQWhqQyxVQUFBLGFBQ0FvQixJQUFBLFNBQUEwOUIsR0FDQXArQixLQUFBMjlCLFVBQUEsR0FBQVMsRUFDQXArQixLQUFBZytCLFlBQUExMkIsTUFBQXRILFVBQUEyOUIsWUFFQXAvQixJQUFBLFdBQ0EsT0FBQXlCLEtBQUEyOUIsVUFBQSxNQVNBdi9CLE9BQUFDLGVBQUF1QixFQUFBMGlDLFNBQUFoakMsVUFBQSxhQUNBb0IsSUFBQSxTQUFBMDlCLEdBQ0FwK0IsS0FBQTI5QixVQUFBLEdBQUFTLEVBQ0FwK0IsS0FBQWcrQixZQUFBMTJCLE1BQUF0SCxVQUFBMjlCLFlBRUFwL0IsSUFBQSxXQUNBLE9BQUF5QixLQUFBMjlCLFVBQUEsTUFTQXYvQixPQUFBQyxlQUFBdUIsRUFBQTBpQyxTQUFBaGpDLFVBQUEsYUFDQW9CLElBQUEsU0FBQTA5QixHQUNBcCtCLEtBQUEyOUIsVUFBQSxHQUFBUyxFQUNBcCtCLEtBQUFnK0IsWUFBQTEyQixNQUFBdEgsVUFBQTI5QixZQUVBcC9CLElBQUEsV0FDQSxPQUFBeUIsS0FBQTI5QixVQUFBLE1BVUF2L0IsT0FBQUMsZUFBQXVCLEVBQUEwaUMsU0FBQWhqQyxVQUFBLFlBQ0FvQixJQUFBLFNBQUEwOUIsR0FDQXArQixLQUFBdTlCLGFBQUEsR0FBQWEsRUFDQXArQixLQUFBbStCLGVBQUE3MkIsTUFBQXRILFVBQUF1OUIsZUFFQWgvQixJQUFBLFdBQ0EsT0FBQXlCLEtBQUF1OUIsYUFBQSxNQVVBbi9CLE9BQUFDLGVBQUF1QixFQUFBMGlDLFNBQUFoakMsVUFBQSxZQUNBb0IsSUFBQSxTQUFBMDlCLEdBQ0FwK0IsS0FBQXU5QixhQUFBLEdBQUFhLEVBQ0FwK0IsS0FBQW0rQixlQUFBNzJCLE1BQUF0SCxVQUFBdTlCLGVBRUFoL0IsSUFBQSxXQUNBLE9BQUF5QixLQUFBdTlCLGFBQUEsTUFVQW4vQixPQUFBQyxlQUFBdUIsRUFBQTBpQyxTQUFBaGpDLFVBQUEsWUFDQW9CLElBQUEsU0FBQTA5QixHQUNBcCtCLEtBQUF1OUIsYUFBQSxHQUFBYSxFQUNBcCtCLEtBQUFtK0IsZUFBQTcyQixNQUFBdEgsVUFBQXU5QixlQUVBaC9CLElBQUEsV0FDQSxPQUFBeUIsS0FBQXU5QixhQUFBLE1BVUFuL0IsT0FBQUMsZUFBQXVCLEVBQUEwaUMsU0FBQWhqQyxVQUFBLE9BQ0FvQixJQUFBLFNBQUEwOUIsR0FDQXArQixLQUFBdTlCLGFBQUEsR0FBQWEsRUFDQXArQixLQUFBbStCLGVBQUE3MkIsTUFBQXRILFVBQUF1OUIsZUFFQWgvQixJQUFBLFdBQ0EsT0FBQXlCLEtBQUF1OUIsYUFBQSxNQVVBbi9CLE9BQUFDLGVBQUF1QixFQUFBMGlDLFNBQUFoakMsVUFBQSxPQUNBb0IsSUFBQSxTQUFBMDlCLEdBQ0FwK0IsS0FBQXU5QixhQUFBLEdBQUFhLEVBQ0FwK0IsS0FBQW0rQixlQUFBNzJCLE1BQUF0SCxVQUFBdTlCLGVBRUFoL0IsSUFBQSxXQUNBLE9BQUF5QixLQUFBdTlCLGFBQUEsTUFVQW4vQixPQUFBQyxlQUFBdUIsRUFBQTBpQyxTQUFBaGpDLFVBQUEsT0FDQW9CLElBQUEsU0FBQTA5QixHQUNBcCtCLEtBQUF1OUIsYUFBQSxHQUFBYSxFQUNBcCtCLEtBQUFtK0IsZUFBQTcyQixNQUFBdEgsVUFBQXU5QixlQUVBaC9CLElBQUEsV0FDQSxPQUFBeUIsS0FBQXU5QixhQUFBLE1BT0EzOUIsRUFBQTBpQyxTQUFBaGpDLFVBQUFtQixRQUFBLFdBR0EsT0FGQVQsS0FBQXU5QixhQUFBLEtBQ0F2OUIsS0FBQTI5QixVQUFBLEtBQ0EzOUIsTUFHQSxJQUFBdWlDLEVBQUEzaUMsRUFBQTBpQyxTQWFBLE9BWkExaUMsRUFBQTBpQyxTQUFBLElBQUFDLEVBQ0EzaUMsRUFBQWtHLFFBQUFjLEdBQUEsZ0JBQUFuQixHQUNBQSxFQUFBNjhCLG9CQUFBQyxFQUVBM2lDLEVBQUEwaUMsU0FBQTc4QixFQUFBNjhCLFNBR0ExaUMsRUFBQTBpQyxTQUFBLElBQUFDLEVBRUE5OEIsRUFBQTY4QixTQUFBMWlDLEVBQUEwaUMsV0FHQTFpQyxFQUFBMGlDLFdBRUF6aUMsRUFBQSxTQUFBRCxHQWdGQSxPQTFCQUEsRUFBQWdQLFFBQUEsU0FBQTNILEVBQUE0VyxHQUVBLElBS0EzYixFQUxBZ0UsRUFBQXRHLEVBQUE2RixRQUFBUyxXQUNBNjhCLEVBQUFuakMsRUFBQTZGLFFBQ0F1OUIsRUFuREEsU0FBQUMsRUFBQWg4QixFQUFBNFcsRUFBQTNYLEVBQUFnOUIsR0FDQUEsRUFBQXRqQyxFQUFBbUQsV0FBQW1nQyxFQUFBLEdBQ0EsSUFBQXo5QixFQUFBLElBQUE3RixFQUFBMGUsZUFBQSxFQUFBVCxFQUFBM1gsR0FDQXRHLEVBQUE2RixVQUVBLElBQUFteEIsRUFBQTN2QixFQUFBckgsRUFBQW1WLFdBQ0EsT0FBQXRQLEVBQUFxSCxZQUFBLEdBQUFvMkIsRUFBQSxJQUNBRCxFQUFBaDhCLEVBQUE0VyxFQUFBM1gsSUFBQWc5QixJQUdBdE0sV0FDQW54QixXQXdDQXc5QixDQUFBaDhCLEVBQUE0VyxFQUFBM1gsR0FDQTB3QixFQUFBb00sRUFBQXBNLFNBQ0FueEIsRUFBQXU5QixFQUFBdjlCLFFBZUEsT0FYQXZELEVBRkEwMEIsYUFBQXJzQixRQUVBcXNCLEVBQUEzcEIsS0FBQSxXQUVBLE9BQUF4SCxFQUFBaVosV0FJQWpaLEVBQUFpWixTQUdBOWUsRUFBQTZGLFFBQUFzOUIsRUFFQTdnQyxFQUFBK0ssS0FBQSxTQUFBdkIsR0FFQSxXQUFBOUwsRUFBQW8wQixPQUFBdG9CLE1BR0E5TCxFQUFBZ1AsVUFFQS9PLEVBQUEsU0FBQUQsR0FnRkEsT0FyRUFBLEVBQUF1akMsT0FBQSxXQUNBLElBQUFyZ0MsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUFBLE9BQUExRCxFQUFBdWpDLFFBQ0F2akMsRUFBQW1RLFVBQUFsUyxLQUFBbUMsTUFDQUEsS0FBQXlRLGNBQUEsS0FNQXpRLEtBQUFvakMsUUFBQSxJQUFBeGpDLEVBQUFzbEIsVUFBQXBpQixFQUFBdWdDLEtBUUFyakMsS0FBQXFqQyxJQUFBcmpDLEtBQUFvakMsUUFBQWhlLEtBTUFwbEIsS0FBQXNqQyxXQUFBLElBQUExakMsRUFBQW1iLEtBTUEvYSxLQUFBdWpDLGFBQUEsSUFBQTNqQyxFQUFBbWIsS0FFQS9hLEtBQUFxUSxNQUFBN00sUUFBQXhELEtBQUFvakMsUUFBQXpxQixHQUNBM1ksS0FBQXFRLE1BQUE3TSxRQUFBeEQsS0FBQXNqQyxZQUNBdGpDLEtBQUF1akMsYUFBQS8vQixRQUFBeEQsS0FBQW9qQyxRQUFBcHFCLEdBQ0FoWixLQUFBb2pDLFFBQUE1L0IsUUFBQXhELEtBQUE0USxRQUNBNVEsS0FBQWtFLFdBQUEsU0FFQXRFLEVBQUE4RixPQUFBOUYsRUFBQXVqQyxPQUFBdmpDLEVBQUFtUSxXQUtBblEsRUFBQXVqQyxPQUFBM2dDLFVBQTZCNmdDLElBQUEsR0FPN0J6akMsRUFBQXVqQyxPQUFBN2pDLFVBQUFra0MsY0FBQSxTQUFBQyxHQUVBLE9BREF6akMsS0FBQXNqQyxXQUFBbnlCLE1BQUFzeUIsRUFBQXpqQyxLQUFBdWpDLGNBQ0F2akMsTUFNQUosRUFBQXVqQyxPQUFBN2pDLFVBQUFtQixRQUFBLFdBVUEsT0FUQWIsRUFBQW1RLFVBQUF6USxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBb2pDLFFBQUEzaUMsVUFDQVQsS0FBQW9qQyxRQUFBLEtBQ0FwakMsS0FBQXNqQyxXQUFBN2lDLFVBQ0FULEtBQUFzakMsV0FBQSxLQUNBdGpDLEtBQUF1akMsYUFBQTlpQyxVQUNBVCxLQUFBdWpDLGFBQUEsS0FDQXZqQyxLQUFBb0UsV0FBQSxRQUNBcEUsS0FBQXFqQyxJQUFBLEtBQ0FyakMsTUFFQUosRUFBQXVqQyxTQUVBdGpDLEVBQUEsU0FBQUQsR0E0TEEsT0ExS0FBLEVBQUE4akMsV0FBQSxXQUNBLElBQUE1Z0MsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLFlBQ0EsZ0JBQ0EsV0FDQTFELEVBQUE4akMsWUFDQTlqQyxFQUFBdWpDLE9BQUF0bEMsS0FBQW1DLEtBQUE4QyxHQU1BOUMsS0FBQTJqQyxLQUFBLElBQUEvakMsRUFBQWs2QixLQUNBM2dCLFVBQUFyVyxFQUFBcVcsVUFDQTRnQixVQUFBajNCLEVBQUE4Z0MsUUFRQTVqQyxLQUFBNGpDLE1BQUE1akMsS0FBQTJqQyxLQUFBNUosVUFNQS81QixLQUFBbVosVUFBQW5aLEtBQUEyakMsS0FBQXhxQixVQUtBblosS0FBQWltQixPQUFBLElBQUFybUIsRUFBQTZsQixPQUFBM2lCLEVBQUFtakIsUUFNQWptQixLQUFBZ3BCLFNBQUEsRUFFQWhwQixLQUFBd2pDLGNBQUF4akMsS0FBQWltQixRQUNBam1CLEtBQUEyakMsS0FBQW5nQyxRQUFBeEQsS0FBQWltQixPQUFBOU0sV0FDQW5aLEtBQUFpTyxLQUFBbkwsRUFBQW1MLEtBQ0FqTyxLQUFBa0UsV0FDQSxZQUNBLFVBRUFsRSxLQUFBaXBCLFFBQUFubUIsRUFBQW1tQixRQUNBanBCLEtBQUFrcEIsY0FBQXBtQixFQUFBb21CLGVBR0F0cEIsRUFBQThGLE9BQUE5RixFQUFBOGpDLFdBQUE5akMsRUFBQXVqQyxRQU1BdmpDLEVBQUE4akMsV0FBQWxoQyxVQUNBMlcsVUFBQSxFQUNBbEwsS0FBQSxPQUNBMjFCLE1BQUEsRUFDQTFhLGNBQUEsSUFDQUQsUUFBQSxJQUNBaEQsUUFDQWhZLEtBQUEsVUFDQTZYLFNBQUEsR0FDQUYsRUFBQSxJQVFBaG1CLEVBQUE4akMsV0FBQXBrQyxVQUFBcU8sTUFBQSxTQUFBdkYsR0FFQSxPQURBcEksS0FBQTJqQyxLQUFBaDJCLE1BQUF2RixHQUNBcEksTUFPQUosRUFBQThqQyxXQUFBcGtDLFVBQUErZixLQUFBLFNBQUFqWCxHQUVBLE9BREFwSSxLQUFBMmpDLEtBQUF0a0IsS0FBQWpYLEdBQ0FwSSxNQVFBSixFQUFBOGpDLFdBQUFwa0MsVUFBQTh6QixLQUFBLFNBQUF5USxHQUVBLE9BREE3akMsS0FBQTJqQyxLQUFBdlEsS0FBQXlRLEdBQ0E3akMsTUFNQUosRUFBQThqQyxXQUFBcGtDLFVBQUFrMEIsT0FBQSxXQUVBLE9BREF4ekIsS0FBQTJqQyxLQUFBblEsU0FDQXh6QixNQVNBNUIsT0FBQUMsZUFBQXVCLEVBQUE4akMsV0FBQXBrQyxVQUFBLFFBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQTJqQyxLQUFBMTFCLE1BRUF2TixJQUFBLFNBQUF1TixHQUNBak8sS0FBQTJqQyxLQUFBMTFCLFVBU0E3UCxPQUFBQyxlQUFBdUIsRUFBQThqQyxXQUFBcGtDLFVBQUEsaUJBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQTJqQyxLQUFBem5CLEtBRUF4YixJQUFBLFNBQUEyVSxHQUNBclYsS0FBQTJqQyxLQUFBem5CLElBQUFsYyxLQUFBMlQsWUFBQTBCLEdBRUFyVixLQUFBaXBCLFFBQUFqcEIsS0FBQWdwQixZQVNBNXFCLE9BQUFDLGVBQUF1QixFQUFBOGpDLFdBQUFwa0MsVUFBQSxXQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFncEIsVUFFQXRvQixJQUFBLFNBQUFvakMsR0FDQTlqQyxLQUFBZ3BCLFNBQUE4YSxFQUNBOWpDLEtBQUEyakMsS0FBQWowQixJQUFBMVAsS0FBQWtwQixjQUFBdGtCLEtBQUFLLElBQUEsRUFBQTYrQixNQU9BbGtDLEVBQUE4akMsV0FBQXBrQyxVQUFBbUIsUUFBQSxXQVlBLE9BWEFiLEVBQUF1akMsT0FBQTdqQyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBMmpDLEtBQUFsakMsVUFDQVQsS0FBQTJqQyxLQUFBLEtBQ0EzakMsS0FBQWltQixPQUFBeGxCLFVBQ0FULEtBQUFpbUIsT0FBQSxLQUNBam1CLEtBQUFvRSxXQUNBLFlBQ0EsVUFFQXBFLEtBQUFtWixVQUFBLEtBQ0FuWixLQUFBNGpDLE1BQUEsS0FDQTVqQyxNQUVBSixFQUFBOGpDLGFBRUE3akMsRUFBQSxTQUFBRCxHQTBJQSxPQTNIQUEsRUFBQW1rQyxXQUFBLFdBQ0EsSUFBQWpoQyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQUEsYUFBQTFELEVBQUFta0MsWUFDQW5rQyxFQUFBdWpDLE9BQUF0bEMsS0FBQW1DLEtBQUE4QyxHQU1BOUMsS0FBQTJqQyxLQUFBLElBQUEvakMsRUFBQWs2QixLQUNBM2dCLFVBQUFyVyxFQUFBcVcsVUFDQTRnQixVQUFBajNCLEVBQUE4Z0MsTUFDQTFuQixLQUFBLEVBQ0F4TSxJQUFBLElBUUExUCxLQUFBNGpDLE1BQUE1akMsS0FBQTJqQyxLQUFBNUosVUFNQS81QixLQUFBNDhCLFFBQUEsSUFBQWg5QixFQUFBODhCLE9BTUExOEIsS0FBQW1aLFVBQUFuWixLQUFBMmpDLEtBQUF4cUIsVUFFQW5aLEtBQUF3akMsY0FBQXhqQyxLQUFBNDhCLFNBQ0E1OEIsS0FBQTJqQyxLQUFBbmdDLFFBQUF4RCxLQUFBNDhCLFFBQUFULEtBQ0FuOEIsS0FBQWlPLEtBQUFuTCxFQUFBbUwsS0FDQWpPLEtBQUFrRSxXQUNBLFFBQ0EsZUFJQXRFLEVBQUE4RixPQUFBOUYsRUFBQW1rQyxXQUFBbmtDLEVBQUF1akMsUUFNQXZqQyxFQUFBbWtDLFdBQUF2aEMsVUFDQTJXLFVBQUEsRUFDQWxMLEtBQUEsT0FDQTIxQixNQUFBLEdBT0Foa0MsRUFBQW1rQyxXQUFBemtDLFVBQUFxTyxNQUFBLFNBQUF2RixHQUVBLE9BREFwSSxLQUFBMmpDLEtBQUFoMkIsTUFBQXZGLEdBQ0FwSSxNQU9BSixFQUFBbWtDLFdBQUF6a0MsVUFBQStmLEtBQUEsU0FBQWpYLEdBRUEsT0FEQXBJLEtBQUEyakMsS0FBQXRrQixLQUFBalgsR0FDQXBJLE1BUUFKLEVBQUFta0MsV0FBQXprQyxVQUFBOHpCLEtBQUEsU0FBQXlRLEdBRUEsT0FEQTdqQyxLQUFBMmpDLEtBQUF2USxLQUFBeVEsR0FDQTdqQyxNQU1BSixFQUFBbWtDLFdBQUF6a0MsVUFBQWswQixPQUFBLFdBRUEsT0FEQXh6QixLQUFBMmpDLEtBQUFuUSxTQUNBeHpCLE1BU0E1QixPQUFBQyxlQUFBdUIsRUFBQW1rQyxXQUFBemtDLFVBQUEsUUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBMmpDLEtBQUExMUIsTUFFQXZOLElBQUEsU0FBQXVOLEdBQ0FqTyxLQUFBMmpDLEtBQUExMUIsVUFPQXJPLEVBQUFta0MsV0FBQXprQyxVQUFBbUIsUUFBQSxXQVlBLE9BWEFiLEVBQUF1akMsT0FBQTdqQyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBMmpDLEtBQUFsakMsVUFDQVQsS0FBQTJqQyxLQUFBLEtBQ0EzakMsS0FBQTQ4QixRQUFBbjhCLFVBQ0FULEtBQUE0OEIsUUFBQSxLQUNBNThCLEtBQUFvRSxXQUNBLFFBQ0EsY0FFQXBFLEtBQUFtWixVQUFBLEtBQ0FuWixLQUFBNGpDLE1BQUEsS0FDQTVqQyxNQUVBSixFQUFBbWtDLGFBRUFsa0MsRUFBQSxTQUFBRCxHQWtNQSxPQTFLQUEsRUFBQW9rQyxRQUFBLFdBQ0EsSUFBQWxoQyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsZ0JBQ0EsVUFDQSxlQUNBMUQsRUFBQW9rQyxTQUNBcGtDLEVBQUF1akMsT0FBQXRsQyxLQUFBbUMsS0FBQThDLEdBT0E5QyxLQUFBaWtDLFNBQUEsSUFBQXJrQyxFQUFBMG9CLFNBQUF4bEIsRUFBQW1oQyxVQU1BamtDLEtBQUFra0MsWUFBQSxJQUFBdGtDLEVBQUE2bkIsU0FBQSxRQUtBem5CLEtBQUFta0MsZUFBQXJoQyxFQUFBb21CLGNBS0FscEIsS0FBQWdwQixTQUFBbG1CLEVBQUFtbUIsUUFNQWpwQixLQUFBb2tDLFlBQUEsSUFBQXhrQyxFQUFBbWIsS0FLQS9hLEtBQUFxa0MsVUFBQSxJQUFBemtDLEVBQUE2bEIsUUFDQUssU0FBQSxHQUNBM00sVUFBQSxFQUNBeU0sRUFBQTlpQixFQUFBOGlCLElBTUE1bEIsS0FBQXNrQyxTQUFBLElBQUExa0MsRUFBQTZsQixPQUFBLGFBQ0F6bEIsS0FBQXNrQyxTQUFBbi9CLEtBQUF4RyxNQUFBbUUsRUFBQXFDLEtBTUFuRixLQUFBbUYsS0FBQW5GLEtBQUFza0MsU0FBQW4vQixLQU1BbkYsS0FBQTRsQixFQUFBNWxCLEtBQUFxa0MsVUFBQXplLEVBRUE1bEIsS0FBQXNqQyxXQUFBbnlCLE1BQUFuUixLQUFBb2tDLFlBQUFwa0MsS0FBQWlrQyxTQUFBamtDLEtBQUFra0MsYUFDQWxrQyxLQUFBa2tDLFlBQUExZ0MsUUFBQXhELEtBQUFxa0MsVUFBQWxyQixXQUNBblosS0FBQWtrQyxZQUFBMWdDLFFBQUF4RCxLQUFBc2tDLFNBQUFuckIsV0FFQW5aLEtBQUFzakMsV0FBQW55QixNQUFBblIsS0FBQXFrQyxVQUFBcmtDLEtBQUFza0MsU0FBQXRrQyxLQUFBdWpDLGNBRUF2akMsS0FBQXVrQyxpQkFDQXZrQyxLQUFBd2tDLFlBQUExaEMsRUFBQTBoQyxZQUNBeGtDLEtBQUFrRSxXQUNBLE9BQ0EsT0FHQXRFLEVBQUE4RixPQUFBOUYsRUFBQW9rQyxRQUFBcGtDLEVBQUF1akMsUUFLQXZqQyxFQUFBb2tDLFFBQUF4aEMsVUFDQTBtQixjQUFBLElBQ0FELFFBQUEsRUFDQXViLFlBQUEsRUFDQTVlLEVBQUEsRUFDQXpnQixLQUFBLEVBQ0E4K0IsVUFDQTVqQixPQUFBLEdBQ0FHLFFBQUEsS0FVQXBpQixPQUFBQyxlQUFBdUIsRUFBQW9rQyxRQUFBMWtDLFVBQUEsV0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBZ3BCLFVBRUF0b0IsSUFBQSxTQUFBdW9CLEdBQ0FqcEIsS0FBQWdwQixTQUFBQyxFQUNBanBCLEtBQUF1a0Msb0JBU0FubUMsT0FBQUMsZUFBQXVCLEVBQUFva0MsUUFBQTFrQyxVQUFBLGlCQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFta0MsZ0JBRUF6akMsSUFBQSxTQUFBK2pDLEdBQ0F6a0MsS0FBQW1rQyxlQUFBTSxFQUNBemtDLEtBQUF1a0Msb0JBU0FubUMsT0FBQUMsZUFBQXVCLEVBQUFva0MsUUFBQTFrQyxVQUFBLGVBQ0FmLElBQUEsV0FDQSxPQUFBcUIsRUFBQXNGLFNBQUEsRUFBQWxGLEtBQUFva0MsWUFBQWovQixLQUFBeEcsUUFFQStCLElBQUEsU0FBQWdrQyxHQUNBMWtDLEtBQUFva0MsWUFBQWovQixLQUFBeEcsTUFBQSxFQUFBaUIsRUFBQW1GLFNBQUEyL0IsTUFPQTlrQyxFQUFBb2tDLFFBQUExa0MsVUFBQWlsQyxlQUFBLFdBQ0F2a0MsS0FBQWtrQyxZQUFBaG9CLElBQUFsYyxLQUFBbWtDLGVBQ0Fua0MsS0FBQWtrQyxZQUFBeDBCLElBQUE5SyxLQUFBc1gsSUFBQWxjLEtBQUFta0MsZUFBQXYvQixLQUFBSyxJQUFBLEVBQUFqRixLQUFBZ3BCLFVBQUFocEIsS0FBQXlGLFFBQUFTLFdBQUEsSUFNQXRHLEVBQUFva0MsUUFBQTFrQyxVQUFBbUIsUUFBQSxXQWtCQSxPQWpCQWIsRUFBQXVqQyxPQUFBN2pDLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFpa0MsU0FBQXhqQyxVQUNBVCxLQUFBaWtDLFNBQUEsS0FDQWprQyxLQUFBa2tDLFlBQUF6akMsVUFDQVQsS0FBQWtrQyxZQUFBLEtBQ0Fsa0MsS0FBQXFrQyxVQUFBNWpDLFVBQ0FULEtBQUFxa0MsVUFBQSxLQUNBcmtDLEtBQUFza0MsU0FBQTdqQyxVQUNBVCxLQUFBc2tDLFNBQUEsS0FDQXRrQyxLQUFBb2tDLFlBQUEzakMsVUFDQVQsS0FBQW9rQyxZQUFBLEtBQ0Fwa0MsS0FBQW9FLFdBQ0EsT0FDQSxNQUVBcEUsS0FBQW1GLEtBQUEsS0FDQW5GLEtBQUE0bEIsRUFBQSxLQUNBNWxCLE1BRUFKLEVBQUFva0MsVUFFQW5rQyxFQUFBLFNBQUFELEdBMkZBLE9BN0VBQSxFQUFBK2tDLE9BQUEsU0FBQUMsR0FDQWhsQyxFQUFBeVIsV0FBQXhULEtBQUFtQyxNQUNBQSxLQUFBeVEsY0FBQSxLQU9BelEsS0FBQTRTLFFBQUEsSUFBQWhULEVBQUE2UyxXQUFBN04sS0FBQUssSUFBQSxPQU1BakYsS0FBQTZrQixVQUFBLElBQUFqbEIsRUFBQThrQixTQU1BMWtCLEtBQUE2a0MsVUFBQTdrQyxLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQWtsQixTQU1BOWtCLEtBQUE4a0MsV0FBQSxJQUFBbGxDLEVBQUFnQyxPQUFBZ2pDLEdBRUE1a0MsS0FBQXFRLE1BQUFlLElBQUFwUixLQUFBNFMsUUFBQTVTLEtBQUE2a0MsV0FDQTdrQyxLQUFBOGtDLFdBQUF0aEMsUUFBQXhELEtBQUE2a0IsVUFBQSxLQUNBN2tCLEtBQUE0UyxRQUFBcFAsUUFBQXhELEtBQUE2a0IsVUFBQSxLQUNBN2tCLEtBQUE2a0IsVUFBQXJoQixRQUFBeEQsS0FBQTZrQyxVQUFBLEtBQ0E3a0MsS0FBQStrQyxlQUFBSCxJQUVBaGxDLEVBQUE4RixPQUFBOUYsRUFBQStrQyxPQUFBL2tDLEVBQUF5UixZQUtBelIsRUFBQStrQyxPQUFBcmxDLFVBQUF5bEMsZUFBQSxTQUFBQyxHQUNBaGxDLEtBQUE0UyxRQUFBRSxPQUFBLFNBQUFyUCxHQUVBLE9BREFtQixLQUFBMEUsT0FBQTdGLEVBQUEsTUFBQXVoQyxNQVVBNW1DLE9BQUFDLGVBQUF1QixFQUFBK2tDLE9BQUFybEMsVUFBQSxTQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUE4a0MsV0FBQW5tQyxPQUVBK0IsSUFBQSxTQUFBc2tDLEdBQ0FobEMsS0FBQThrQyxXQUFBbm1DLE1BQUFxbUMsRUFDQWhsQyxLQUFBK2tDLGVBQUFDLE1BT0FwbEMsRUFBQStrQyxPQUFBcmxDLFVBQUFtQixRQUFBLFdBVUEsT0FUQWIsRUFBQXlSLFdBQUEvUixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBNFMsUUFBQW5TLFVBQ0FULEtBQUE0UyxRQUFBLEtBQ0E1UyxLQUFBNmtCLFVBQUFwa0IsVUFDQVQsS0FBQTZrQixVQUFBLEtBQ0E3a0IsS0FBQTZrQyxVQUFBcGtDLFVBQ0FULEtBQUE2a0MsVUFBQSxLQUNBN2tDLEtBQUE4a0MsV0FBQXJrQyxVQUNBVCxLQUFBOGtDLFdBQUEsS0FDQTlrQyxNQUVBSixFQUFBK2tDLFNBRUE5a0MsRUFBQSxTQUFBRCxHQThFQSxPQTlEQUEsRUFBQXFsQyxXQUFBLFdBQ0EsSUFBQW5pQyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQUEsUUFBQTFELEVBQUFxbEMsWUFDQXJsQyxFQUFBdWpDLE9BQUF0bEMsS0FBQW1DLEtBQUE4QyxHQUNBLElBQUFvaUMsRUFBQSxFQUFBdGdDLEtBQUFLLElBQUEsRUFBQW5DLEVBQUFxaUMsS0FBQSxHQU1BbmxDLEtBQUE2a0MsVUFBQSxJQUFBamxDLEVBQUFrbEIsU0FNQTlrQixLQUFBb2xDLFFBQUEsSUFBQXhsQyxFQUFBK2tDLE9BQUFPLEdBTUFsbEMsS0FBQXFsQyxNQUFBdmlDLEVBQUFxaUMsS0FFQW5sQyxLQUFBc2pDLFdBQUFseUIsSUFBQXBSLEtBQUE2a0MsVUFBQTdrQyxLQUFBb2xDLFNBQ0FwbEMsS0FBQW9sQyxRQUFBNWhDLFFBQUF4RCxLQUFBNmtDLFVBQUEsS0FDQTdrQyxLQUFBNmtDLFVBQUFyaEMsUUFBQXhELEtBQUF1akMsZUFFQTNqQyxFQUFBOEYsT0FBQTlGLEVBQUFxbEMsV0FBQXJsQyxFQUFBdWpDLFFBTUF2akMsRUFBQXFsQyxXQUFBemlDLFVBQWlDMmlDLEtBQUEsR0FPakMvbUMsT0FBQUMsZUFBQXVCLEVBQUFxbEMsV0FBQTNsQyxVQUFBLFFBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXFsQyxPQUVBM2tDLElBQUEsU0FBQXlrQyxHQUNBbmxDLEtBQUFxbEMsTUFBQUYsRUFDQSxJQUFBRCxFQUFBLEVBQUF0Z0MsS0FBQUssSUFBQSxFQUFBa2dDLEVBQUEsR0FDQW5sQyxLQUFBb2xDLFFBQUF6bUMsTUFBQXVtQyxLQU9BdGxDLEVBQUFxbEMsV0FBQTNsQyxVQUFBbUIsUUFBQSxXQU1BLE9BTEFiLEVBQUF1akMsT0FBQTdqQyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBNmtDLFVBQUFwa0MsVUFDQVQsS0FBQTZrQyxVQUFBLEtBQ0E3a0MsS0FBQW9sQyxRQUFBM2tDLFVBQ0FULEtBQUFvbEMsUUFBQSxLQUNBcGxDLE1BRUFKLEVBQUFxbEMsYUFFQXBsQyxFQUFBLFNBQUFELEdBMEhBLE9BeEdBQSxFQUFBMGxDLFVBQUEsV0FDQSxJQUFBeGlDLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FBQSxTQUFBMUQsRUFBQTBsQyxXQUNBMWxDLEVBQUF1akMsT0FBQXRsQyxLQUFBbUMsS0FBQThDLEdBS0E5QyxLQUFBNFMsUUFBQSxJQUFBaFQsRUFBQTZTLFdBQUEsTUFNQXpTLEtBQUF1bEMsT0FBQXppQyxFQUFBMGlDLE1BQ0F4bEMsS0FBQXdqQyxjQUFBeGpDLEtBQUE0UyxTQUNBNVMsS0FBQXdsQyxNQUFBMWlDLEVBQUEwaUMsTUFDQXhsQyxLQUFBZ1QsV0FBQWxRLEVBQUFrUSxZQUVBcFQsRUFBQThGLE9BQUE5RixFQUFBMGxDLFVBQUExbEMsRUFBQXVqQyxRQU1BdmpDLEVBQUEwbEMsVUFBQTlpQyxVQUNBZ2pDLE1BQUEsRUFDQXh5QixXQUFBLFFBV0FwVCxFQUFBMGxDLFVBQUFobUMsVUFBQW1tQyxnQkFBQSxTQUFBN0wsRUFBQThMLEVBQUFDLEdBQ0EsT0FBQUEsRUFBQXBtQyxlQUFBbW1DLEdBQ0FDLEVBQUFELElBRUFDLEVBQUFELEdBRFUsSUFBQUEsRUFDVixFQUNVLElBQUFBLEVBQ1Y5TCxFQUVBLEVBQUFBLEVBQUE1NUIsS0FBQXlsQyxnQkFBQTdMLEVBQUE4TCxFQUFBLEVBQUFDLEdBQUEzbEMsS0FBQXlsQyxnQkFBQTdMLEVBQUE4TCxFQUFBLEVBQUFDLEdBRUFBLEVBQUFELEtBYUF0bkMsT0FBQUMsZUFBQXVCLEVBQUEwbEMsVUFBQWhtQyxVQUFBLFNBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXVsQyxRQUVBN2tDLElBQUEsU0FBQThrQyxHQUNBeGxDLEtBQUF1bEMsT0FBQUMsRUFHQSxJQUZBLElBQUFuekIsRUFBQSxJQUFBdk8sTUFBQSxNQUNBNkQsRUFBQTBLLEVBQUEvUSxPQUNBNUQsRUFBQSxFQUE0QkEsRUFBQWlLLElBQVNqSyxFQUFBLENBQ3JDLElBQUFrOEIsRUFBQSxFQUFBbDhCLEVBQUFpSyxFQUFBLEVBR0EwSyxFQUFBM1UsR0FGQSxJQUFBazhCLEVBRUEsRUFFQTU1QixLQUFBeWxDLGdCQUFBN0wsRUFBQTRMLE1BR0F4bEMsS0FBQTRTLFFBQUFQLFdBU0FqVSxPQUFBQyxlQUFBdUIsRUFBQTBsQyxVQUFBaG1DLFVBQUEsY0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBNFMsUUFBQUksWUFFQXRTLElBQUEsU0FBQXVTLEdBQ0FqVCxLQUFBNFMsUUFBQUksV0FBQUMsS0FPQXJULEVBQUEwbEMsVUFBQWhtQyxVQUFBbUIsUUFBQSxXQUlBLE9BSEFiLEVBQUF1akMsT0FBQTdqQyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBNFMsUUFBQW5TLFVBQ0FULEtBQUE0UyxRQUFBLEtBQ0E1UyxNQUVBSixFQUFBMGxDLFlBRUF6bEMsRUFBQSxTQUFBRCxHQTJGQSxPQW5GQUEsRUFBQWdtQyxhQUFBLFdBRUFobUMsRUFBQW1RLFVBQUFsUyxLQUFBbUMsTUFDQSxJQUFBOEMsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUFBLE9BQUExRCxFQUFBdWpDLFFBQ0FuakMsS0FBQXlRLGNBQUEsS0FNQXpRLEtBQUFvakMsUUFBQSxJQUFBeGpDLEVBQUFzbEIsVUFBQXBpQixFQUFBdWdDLEtBT0FyakMsS0FBQXFqQyxJQUFBcmpDLEtBQUFvakMsUUFBQWhlLEtBTUFwbEIsS0FBQW83QixPQUFBLElBQUF4N0IsRUFBQW83QixNQU1BaDdCLEtBQUE2bEMsWUFBQTdsQyxLQUFBbzdCLE9BQUFsTixLQU1BbHVCLEtBQUE4bEMsWUFBQTlsQyxLQUFBbzdCLE9BQUFqTixNQU1BbnVCLEtBQUE0N0IsT0FBQSxJQUFBaDhCLEVBQUErNkIsTUFNQTM2QixLQUFBK2xDLGNBQUEvbEMsS0FBQTQ3QixPQUFBMU4sS0FNQWx1QixLQUFBZ21DLGNBQUFobUMsS0FBQTQ3QixPQUFBek4sTUFFQW51QixLQUFBcVEsTUFBQTdNLFFBQUF4RCxLQUFBbzdCLFFBRUFwN0IsS0FBQXFRLE1BQUE3TSxRQUFBeEQsS0FBQW9qQyxRQUFBLEtBQ0FwakMsS0FBQTQ3QixPQUFBcDRCLFFBQUF4RCxLQUFBb2pDLFFBQUEsS0FDQXBqQyxLQUFBb2pDLFFBQUE1L0IsUUFBQXhELEtBQUE0USxRQUNBNVEsS0FBQWtFLFdBQUEsU0FFQXRFLEVBQUE4RixPQUFBOUYsRUFBQWdtQyxhQUFBaG1DLEVBQUF1akMsUUFLQXZqQyxFQUFBZ21DLGFBQUF0bUMsVUFBQW1CLFFBQUEsV0FjQSxPQWJBYixFQUFBbVEsVUFBQXpRLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFvakMsUUFBQTNpQyxVQUNBVCxLQUFBb2pDLFFBQUEsS0FDQXBqQyxLQUFBbzdCLE9BQUEzNkIsVUFDQVQsS0FBQW83QixPQUFBLEtBQ0FwN0IsS0FBQTQ3QixPQUFBbjdCLFVBQ0FULEtBQUE0N0IsT0FBQSxLQUNBNTdCLEtBQUE2bEMsWUFBQSxLQUNBN2xDLEtBQUE4bEMsWUFBQSxLQUNBOWxDLEtBQUErbEMsY0FBQSxLQUNBL2xDLEtBQUFnbUMsY0FBQSxLQUNBaG1DLEtBQUFvRSxXQUFBLFFBQ0FwRSxLQUFBcWpDLElBQUEsS0FDQXJqQyxNQUVBSixFQUFBZ21DLGVBRUEvbEMsRUFBQSxTQUFBRCxHQW1NQSxPQWpMQUEsRUFBQXFtQyxPQUFBLFdBQ0EsSUFBQW5qQyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsWUFDQSxZQUNBLFNBQ0ExRCxFQUFBcW1DLFFBQ0FybUMsRUFBQWdtQyxhQUFBL25DLEtBQUFtQyxLQUFBOEMsR0FNQTlDLEtBQUFrbUMsT0FBQXBqQyxFQUFBOGdDLE1BTUE1akMsS0FBQW1tQyxXQUFBcmpDLEVBQUFnbEIsVUFBQSxJQU1BOW5CLEtBQUFvbUMsTUFBQSxJQUFBeG1DLEVBQUFrNkIsS0FDQTNnQixVQUFBclcsRUFBQXFXLFVBQ0ErQyxJQUFBLEVBQ0F4TSxJQUFBLElBT0ExUCxLQUFBcW1DLE1BQUEsSUFBQXptQyxFQUFBazZCLEtBQ0EzZ0IsVUFBQXJXLEVBQUFxVyxVQUNBK0MsSUFBQSxFQUNBeE0sSUFBQSxFQUNBMG9CLE1BQUEsTUFPQXA0QixLQUFBc21DLFlBQUEsSUFBQTFtQyxFQUFBK25CLE1BTUEzbkIsS0FBQXVtQyxZQUFBLElBQUEzbUMsRUFBQStuQixNQU1BM25CLEtBQUFtWixVQUFBblosS0FBQW9tQyxNQUFBanRCLFVBRUFuWixLQUFBNmxDLFlBQUExMEIsTUFBQW5SLEtBQUFzbUMsWUFBQXRtQyxLQUFBK2xDLGVBQ0EvbEMsS0FBQThsQyxZQUFBMzBCLE1BQUFuUixLQUFBdW1DLFlBQUF2bUMsS0FBQWdtQyxlQUVBaG1DLEtBQUE2bEMsWUFBQXJpQyxRQUFBeEQsS0FBQStsQyxlQUNBL2xDLEtBQUE4bEMsWUFBQXRpQyxRQUFBeEQsS0FBQWdtQyxlQUVBaG1DLEtBQUFvbUMsTUFBQTVpQyxRQUFBeEQsS0FBQXNtQyxZQUFBeGUsV0FDQTluQixLQUFBcW1DLE1BQUE3aUMsUUFBQXhELEtBQUF1bUMsWUFBQXplLFdBRUE5bkIsS0FBQW9tQyxNQUFBejRCLFFBQ0EzTixLQUFBcW1DLE1BQUExNEIsUUFFQTNOLEtBQUFvbUMsTUFBQWp0QixVQUFBM1YsUUFBQXhELEtBQUFxbUMsTUFBQWx0QixXQUVBblosS0FBQTRqQyxNQUFBNWpDLEtBQUFrbUMsT0FDQWxtQyxLQUFBbVosVUFBQXhhLE1BQUFtRSxFQUFBcVcsVUFDQW5aLEtBQUFpTyxLQUFBbkwsRUFBQW1MLEtBQ0FqTyxLQUFBa0UsV0FBQSxjQUNBbEUsS0FBQXdtQyxPQUFBMWpDLEVBQUEwakMsUUFFQTVtQyxFQUFBOEYsT0FBQTlGLEVBQUFxbUMsT0FBQXJtQyxFQUFBZ21DLGNBS0FobUMsRUFBQXFtQyxPQUFBempDLFVBQ0EyVyxVQUFBLElBQ0EyTyxVQUFBLElBQ0E4YixNQUFBLEdBQ0EzMUIsS0FBQSxPQUNBdTRCLE9BQUEsS0FTQXBvQyxPQUFBQyxlQUFBdUIsRUFBQXFtQyxPQUFBM21DLFVBQUEsU0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBa21DLFFBRUF4bEMsSUFBQSxTQUFBa2pDLEdBQ0E1akMsS0FBQWttQyxPQUFBdEMsRUFDQSxJQUFBNkMsRUFBQXptQyxLQUFBbW1DLFdBQUF2QyxFQUNBNWpDLEtBQUFvbUMsTUFBQWxxQixJQUFBdFgsS0FBQThLLElBQUExUCxLQUFBbW1DLFdBQUFNLEVBQUEsR0FDQXptQyxLQUFBb21DLE1BQUExMkIsSUFBQTFQLEtBQUFtbUMsV0FBQU0sRUFDQXptQyxLQUFBcW1DLE1BQUFucUIsSUFBQXRYLEtBQUE4SyxJQUFBMVAsS0FBQW1tQyxXQUFBTSxFQUFBLEdBQ0F6bUMsS0FBQXFtQyxNQUFBMzJCLElBQUExUCxLQUFBbW1DLFdBQUFNLEtBV0Fyb0MsT0FBQUMsZUFBQXVCLEVBQUFxbUMsT0FBQTNtQyxVQUFBLGFBQ0FmLElBQUEsV0FDQSxXQUFBeUIsS0FBQW1tQyxZQUVBemxDLElBQUEsU0FBQW9uQixHQUNBOW5CLEtBQUFtbUMsV0FBQXJlLEVBQUEsSUFDQTluQixLQUFBNGpDLE1BQUE1akMsS0FBQWttQyxVQVNBOW5DLE9BQUFDLGVBQUF1QixFQUFBcW1DLE9BQUEzbUMsVUFBQSxRQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFvbUMsTUFBQW40QixNQUVBdk4sSUFBQSxTQUFBdU4sR0FDQWpPLEtBQUFvbUMsTUFBQW40QixPQUNBak8sS0FBQXFtQyxNQUFBcDRCLFVBVUE3UCxPQUFBQyxlQUFBdUIsRUFBQXFtQyxPQUFBM21DLFVBQUEsVUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBcW1DLE1BQUFqTyxNQUFBcDRCLEtBQUFvbUMsTUFBQWhPLE9BRUExM0IsSUFBQSxTQUFBOGxDLEdBQ0F4bUMsS0FBQW9tQyxNQUFBaE8sTUFBQSxHQUFBb08sRUFBQSxFQUNBeG1DLEtBQUFxbUMsTUFBQWpPLE1BQUFvTyxFQUFBLFFBT0E1bUMsRUFBQXFtQyxPQUFBM21DLFVBQUFtQixRQUFBLFdBWUEsT0FYQWIsRUFBQWdtQyxhQUFBdG1DLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFvbUMsTUFBQTNsQyxVQUNBVCxLQUFBb21DLE1BQUEsS0FDQXBtQyxLQUFBcW1DLE1BQUE1bEMsVUFDQVQsS0FBQXFtQyxNQUFBLEtBQ0FybUMsS0FBQXNtQyxZQUFBN2xDLFVBQ0FULEtBQUFzbUMsWUFBQSxLQUNBdG1DLEtBQUF1bUMsWUFBQTlsQyxVQUNBVCxLQUFBdW1DLFlBQUEsS0FDQXZtQyxLQUFBb0UsVUFBQSxhQUNBcEUsS0FBQW1aLFVBQUEsS0FDQW5aLE1BRUFKLEVBQUFxbUMsU0FFQXBtQyxFQUFBLFNBQUFELEdBNEZBLE9BM0VBQSxFQUFBOG1DLFVBQUEsV0FDQSxJQUFBNWpDLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxNQUNBLFVBQ0ExRCxFQUFBOG1DLFdBQ0E5bUMsRUFBQXVqQyxPQUFBdGxDLEtBQUFtQyxLQUFBOEMsR0FNQTlDLEtBQUEybUMsV0FBQTNtQyxLQUFBeUYsUUFBQW1oQyxrQkFNQTVtQyxLQUFBdWpCLFFBQUEsSUFBQTNqQixFQUFBbzBCLE9BQUFseEIsRUFBQXN4QixJQUFBLFNBQUExb0IsR0FDQTFMLEtBQUEybUMsV0FBQWo3QixTQUFBbk4sTUFDQXVFLEVBQUF1eEIsVUFDVW4xQixLQUFBYyxPQUNWQSxLQUFBd2pDLGNBQUF4akMsS0FBQTJtQyxhQUVBL21DLEVBQUE4RixPQUFBOUYsRUFBQThtQyxVQUFBOW1DLEVBQUF1akMsUUFNQXZqQyxFQUFBOG1DLFVBQUFsa0MsVUFBZ0M2eEIsT0FBQXowQixFQUFBcUUsTUFPaEM3RixPQUFBQyxlQUFBdUIsRUFBQThtQyxVQUFBcG5DLFVBQUEsVUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBdWpCLFFBQUFobEIsT0FFQW1DLElBQUEsU0FBQWdMLEdBQ0ExTCxLQUFBdWpCLFFBQUE3aUIsSUFBQWdMLEdBQ0ExTCxLQUFBMm1DLFdBQUFqN0IsT0FBQTFMLEtBQUF1akIsUUFBQWhsQixTQWFBcUIsRUFBQThtQyxVQUFBcG5DLFVBQUFpMUIsS0FBQSxTQUFBSCxFQUFBbnRCLEdBQ0EsT0FBQWpILEtBQUF1akIsUUFBQWdSLEtBQUFILEVBQUEsU0FBQU0sR0FDQTEwQixLQUFBMEwsT0FBQWdwQixFQUNBenRCLEdBQ0FBLEtBRVUvSCxLQUFBYyxRQU1WSixFQUFBOG1DLFVBQUFwbkMsVUFBQW1CLFFBQUEsV0FNQSxPQUxBYixFQUFBdWpDLE9BQUE3akMsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQTJtQyxXQUFBdjRCLGFBQ0FwTyxLQUFBMm1DLFdBQUEsS0FDQTNtQyxLQUFBdWpCLFFBQUE5aUIsVUFDQVQsS0FBQXVqQixRQUFBLEtBQ0F2akIsTUFFQUosRUFBQThtQyxZQUVBN21DLEVBQUEsU0FBQUQsR0EyRkEsT0E1RUFBLEVBQUFpbkMsV0FBQSxXQUNBLElBQUEvakMsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUFBLGNBQUExRCxFQUFBaW5DLFlBQ0FqbkMsRUFBQXVqQyxPQUFBdGxDLEtBQUFtQyxLQUFBOEMsR0FLQTlDLEtBQUE0UyxRQUFBLElBQUFoVCxFQUFBNlMsV0FBQSxNQU1BelMsS0FBQThtQyxZQUFBaGtDLEVBQUFpa0MsV0FDQS9tQyxLQUFBd2pDLGNBQUF4akMsS0FBQTRTLFNBQ0E1UyxLQUFBK21DLFdBQUFqa0MsRUFBQWlrQyxXQUNBL21DLEtBQUFnVCxXQUFBbFEsRUFBQWtRLFlBRUFwVCxFQUFBOEYsT0FBQTlGLEVBQUFpbkMsV0FBQWpuQyxFQUFBdWpDLFFBTUF2akMsRUFBQWluQyxXQUFBcmtDLFVBQ0F1a0MsV0FBQSxHQUNBL3pCLFdBQUEsUUFRQTVVLE9BQUFDLGVBQUF1QixFQUFBaW5DLFdBQUF2bkMsVUFBQSxjQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUE4bUMsYUFFQXBtQyxJQUFBLFNBQUF3d0IsR0FDQWx4QixLQUFBOG1DLFlBQUE1VixFQUNBLElBQUF6UCxFQUFBLElBQUF5UCxFQUNBOFYsRUFBQXBpQyxLQUFBQyxHQUFBLElBQ0E3RSxLQUFBNFMsUUFBQUUsT0FBQSxTQUFBOG1CLEdBQ0EsT0FBQWgxQixLQUFBc1YsSUFBQTBmLEdBQUEsS0FFQSxHQUVBLEVBQUFuWSxHQUFBbVksRUFBQSxHQUFBb04sR0FBQXBpQyxLQUFBQyxHQUFBNGMsRUFBQTdjLEtBQUFzVixJQUFBMGYsU0FXQXg3QixPQUFBQyxlQUFBdUIsRUFBQWluQyxXQUFBdm5DLFVBQUEsY0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBNFMsUUFBQUksWUFFQXRTLElBQUEsU0FBQXVTLEdBQ0FqVCxLQUFBNFMsUUFBQUksV0FBQUMsS0FPQXJULEVBQUFpbkMsV0FBQXZuQyxVQUFBbUIsUUFBQSxXQUlBLE9BSEFiLEVBQUF1akMsT0FBQTdqQyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBNFMsUUFBQW5TLFVBQ0FULEtBQUE0UyxRQUFBLEtBQ0E1UyxNQUVBSixFQUFBaW5DLGFBRUFobkMsRUFBQSxTQUFBRCxHQWdEQSxPQXJDQUEsRUFBQXFuQyxlQUFBLFdBQ0EsSUFBQW5rQyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQUEsWUFBQTFELEVBQUFxbkMsZ0JBQ0FybkMsRUFBQXVqQyxPQUFBdGxDLEtBQUFtQyxLQUFBOEMsR0FNQTlDLEtBQUFrbkMsY0FBQSxJQUFBdG5DLEVBQUFtYixLQUFBalksRUFBQXFrQyxTQUFBdm5DLEVBQUE2TyxLQUFBZ00sYUFNQXphLEtBQUFtbkMsU0FBQW5uQyxLQUFBa25DLGNBQUEvaEMsS0FFQW5GLEtBQUF1akMsYUFBQXB5QixNQUFBblIsS0FBQWtuQyxjQUFBbG5DLEtBQUFzakMsWUFDQXRqQyxLQUFBa0UsV0FBQSxjQUVBdEUsRUFBQThGLE9BQUE5RixFQUFBcW5DLGVBQUFybkMsRUFBQXVqQyxRQUtBdmpDLEVBQUFxbkMsZUFBQXprQyxVQUFxQzJrQyxTQUFBLE1BS3JDdm5DLEVBQUFxbkMsZUFBQTNuQyxVQUFBbUIsUUFBQSxXQU1BLE9BTEFiLEVBQUF1akMsT0FBQTdqQyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBb0UsV0FBQSxhQUNBcEUsS0FBQWtuQyxjQUFBem1DLFVBQ0FULEtBQUFrbkMsY0FBQSxLQUNBbG5DLEtBQUFtbkMsU0FBQSxLQUNBbm5DLE1BRUFKLEVBQUFxbkMsaUJBRUFwbkMsRUFBQSxTQUFBRCxHQWdFQSxPQTdDQUEsRUFBQXduQyxjQUFBLFdBQ0EsSUFBQXRrQyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsWUFDQSxZQUNBMUQsRUFBQXduQyxlQUNBeG5DLEVBQUFxbkMsZUFBQXBwQyxLQUFBbUMsS0FBQThDLEdBTUE5QyxLQUFBK25CLFdBQUEsSUFBQW5vQixFQUFBK25CLE1BQUE3a0IsRUFBQWdsQixVQUFBaGxCLEVBQUEra0IsVUFNQTduQixLQUFBOG5CLFVBQUE5bkIsS0FBQStuQixXQUFBRCxVQUVBOW5CLEtBQUF3akMsY0FBQXhqQyxLQUFBK25CLFlBQ0EvbkIsS0FBQWtFLFdBQUEsZUFFQXRFLEVBQUE4RixPQUFBOUYsRUFBQXduQyxjQUFBeG5DLEVBQUFxbkMsZ0JBT0FybkMsRUFBQXduQyxjQUFBNWtDLFVBQ0FzbEIsVUFBQSxJQUNBRCxTQUFBLEdBTUFqb0IsRUFBQXduQyxjQUFBOW5DLFVBQUFtQixRQUFBLFdBTUEsT0FMQWIsRUFBQXFuQyxlQUFBM25DLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUErbkIsV0FBQXRuQixVQUNBVCxLQUFBK25CLFdBQUEsS0FDQS9uQixLQUFBb0UsV0FBQSxjQUNBcEUsS0FBQThuQixVQUFBLEtBQ0E5bkIsTUFFQUosRUFBQXduQyxnQkFFQXZuQyxFQUFBLFNBQUFELEdBUUEsSUFBQXluQyxHQUNBLFdBQ0EsV0FDQSxXQUNBLFdBQ0EsV0FDQSxXQUNBLFdBQ0EsWUFRQUMsR0FDQSxJQUNBLElBQ0EsSUFDQSxLQWtJQSxPQWpIQTFuQyxFQUFBMm5DLFNBQUEsV0FDQSxJQUFBemtDLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxXQUNBLGFBQ0ExRCxFQUFBMm5DLFVBQ0EzbkMsRUFBQWdtQyxhQUFBL25DLEtBQUFtQyxLQUFBOEMsR0FPQTlDLEtBQUF3bkMsU0FBQSxJQUFBNW5DLEVBQUFnQyxPQUFBa0IsRUFBQTBrQyxTQUFBNW5DLEVBQUE2TyxLQUFBZ00sYUFNQXphLEtBQUEwNkIsVUFBQSxJQUFBOTZCLEVBQUFnQyxPQUFBa0IsRUFBQTQzQixVQUFBOTZCLEVBQUE2TyxLQUFBc0gsV0FNQS9WLEtBQUF5bkMsZ0JBTUF6bkMsS0FBQTBuQyxvQkFNQTFuQyxLQUFBMm5DLG9CQUVBLFFBQUFocUMsRUFBQSxFQUF3QkEsRUFBQTJwQyxFQUFBaG1DLE9BQXFDM0QsSUFBQSxDQUM3RCxJQUFBaXFDLEVBQUE1bkMsS0FBQXlGLFFBQUF5Z0IscUJBQ0EwaEIsRUFBQTM1QixLQUFBLFVBQ0EyNUIsRUFBQXp1QixVQUFBeGEsTUFBQTJvQyxFQUFBM3BDLEdBQ0FxQyxLQUFBMG5DLGlCQUFBOWtDLEtBQUFnbEMsR0FHQSxRQUFBcHBDLEVBQUEsRUFBd0JBLEVBQUE4b0MsRUFBQWhtQyxPQUFxQzlDLElBQUEsQ0FDN0QsSUFBQXFwQyxFQUFBN25DLEtBQUF5RixRQUFBeWdCLHFCQUNBMmhCLEVBQUE1NUIsS0FBQSxVQUNBNDVCLEVBQUExdUIsVUFBQXhhLE1BQUEyb0MsRUFBQTlvQyxHQUNBd0IsS0FBQTJuQyxpQkFBQS9rQyxLQUFBaWxDLEdBR0EsUUFBQTlwQyxFQUFBLEVBQXdCQSxFQUFBc3BDLEVBQUEvbEMsT0FBOEJ2RCxJQUFBLENBQ3RELElBQUErcEMsRUFBQSxJQUFBbG9DLEVBQUE0NkIsa0JBQUE2TSxFQUFBdHBDLElBQ0FBLEVBQUFzcEMsRUFBQS9sQyxPQUFBLEVBQ0F0QixLQUFBNmxDLFlBQUExMEIsTUFBQTIyQixFQUFBOW5DLEtBQUEwbkMsaUJBQUEsSUFFQTFuQyxLQUFBOGxDLFlBQUEzMEIsTUFBQTIyQixFQUFBOW5DLEtBQUEybkMsaUJBQUEsSUFFQTNuQyxLQUFBd25DLFNBQUFoa0MsUUFBQXNrQyxFQUFBM2YsV0FDQW5vQixLQUFBMDZCLFVBQUFsM0IsUUFBQXNrQyxFQUFBcE4sV0FDQTE2QixLQUFBeW5DLGFBQUE3a0MsS0FBQWtsQyxHQUdBbG9DLEVBQUF3RCxjQUFBa0UsTUFBQTFILEVBQUFJLEtBQUEwbkMsa0JBQ0E5bkMsRUFBQXdELGNBQUFrRSxNQUFBMUgsRUFBQUksS0FBQTJuQyxrQkFDQTNuQyxLQUFBMG5DLGlCQUFBMW5DLEtBQUEwbkMsaUJBQUFwbUMsT0FBQSxHQUFBa0MsUUFBQXhELEtBQUErbEMsZUFDQS9sQyxLQUFBMm5DLGlCQUFBM25DLEtBQUEybkMsaUJBQUFybUMsT0FBQSxHQUFBa0MsUUFBQXhELEtBQUFnbUMsZUFDQWhtQyxLQUFBa0UsV0FDQSxXQUNBLGVBR0F0RSxFQUFBOEYsT0FBQTlGLEVBQUEybkMsU0FBQTNuQyxFQUFBZ21DLGNBS0FobUMsRUFBQTJuQyxTQUFBL2tDLFVBQ0FnbEMsU0FBQSxHQUNBOU0sVUFBQSxLQU1BOTZCLEVBQUEybkMsU0FBQWpvQyxVQUFBbUIsUUFBQSxXQUNBYixFQUFBZ21DLGFBQUF0bUMsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQSxRQUFBK25DLEVBQUEsRUFBeUJBLEVBQUEvbkMsS0FBQTBuQyxpQkFBQXBtQyxPQUFtQ3ltQyxJQUM1RC9uQyxLQUFBMG5DLGlCQUFBSyxHQUFBMzVCLGFBQ0FwTyxLQUFBMG5DLGlCQUFBSyxHQUFBLEtBRUEvbkMsS0FBQTBuQyxpQkFBQSxLQUNBLFFBQUFNLEVBQUEsRUFBeUJBLEVBQUFob0MsS0FBQTJuQyxpQkFBQXJtQyxPQUFtQzBtQyxJQUM1RGhvQyxLQUFBMm5DLGlCQUFBSyxHQUFBNTVCLGFBQ0FwTyxLQUFBMm5DLGlCQUFBSyxHQUFBLEtBRUFob0MsS0FBQTJuQyxpQkFBQSxLQUNBLFFBQUFNLEVBQUEsRUFBeUJBLEVBQUFqb0MsS0FBQXluQyxhQUFBbm1DLE9BQStCMm1DLElBQ3hEam9DLEtBQUF5bkMsYUFBQVEsR0FBQXhuQyxVQUNBVCxLQUFBeW5DLGFBQUFRLEdBQUEsS0FXQSxPQVRBam9DLEtBQUF5bkMsYUFBQSxLQUNBem5DLEtBQUFvRSxXQUNBLFdBQ0EsY0FFQXBFLEtBQUF3bkMsU0FBQS9tQyxVQUNBVCxLQUFBd25DLFNBQUEsS0FDQXhuQyxLQUFBMDZCLFVBQUFqNkIsVUFDQVQsS0FBQTA2QixVQUFBLEtBQ0ExNkIsTUFFQUosRUFBQTJuQyxXQUVBMW5DLEVBQUEsU0FBQUQsR0FRQSxJQUFBc29DLEdBQ0EsT0FDQSxPQUNBLE9BQ0EsUUFRQUMsR0FDQSxLQUNBLEtBQ0EsS0FDQSxNQVFBQyxHQUNBLElBQ0EsSUFDQSxJQXVHQSxPQXJGQXhvQyxFQUFBeW9DLFNBQUEsV0FDQSxJQUFBdmxDLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FBQSxZQUFBMUQsRUFBQXlvQyxVQUNBem9DLEVBQUFnbUMsYUFBQS9uQyxLQUFBbUMsS0FBQThDLEdBTUE5QyxLQUFBd25DLFNBQUEsSUFBQTVuQyxFQUFBZ0MsT0FBQWtCLEVBQUEwa0MsU0FBQTVuQyxFQUFBNk8sS0FBQWdNLGFBTUF6YSxLQUFBc29DLGVBQUEsSUFBQTFvQyxFQUFBcW5CLE9BQUEsV0FNQWpuQixLQUFBdW9DLG1CQU1Bdm9DLEtBQUF3b0Msd0JBRUEsUUFBQUMsRUFBQSxFQUF5QkEsRUFBQUwsRUFBQTltQyxPQUFnQ21uQyxJQUFBLENBQ3pELElBQUFDLEVBQUExb0MsS0FBQXlGLFFBQUF5Z0IscUJBQ0F3aUIsRUFBQXo2QixLQUFBLFVBQ0F5NkIsRUFBQXZ2QixVQUFBeGEsTUFBQXlwQyxFQUFBSyxHQUNBem9DLEtBQUF1b0MsZ0JBQUEzbEMsS0FBQThsQyxHQUdBLFFBQUFULEVBQUEsRUFBeUJBLEVBQUFDLEVBQUE1bUMsT0FBa0MybUMsSUFBQSxDQUMzRCxJQUFBVSxFQUFBLElBQUEvb0MsRUFBQW9vQixtQkFBQWtnQixFQUFBRCxHQUFBLElBQ0Fqb0MsS0FBQXNvQyxlQUFBOWtDLFFBQUFtbEMsRUFBQXhnQixXQUNBd2dCLEVBQUF4Z0IsVUFBQXhwQixNQUFBd3BDLEVBQUFGLEdBQ0Fqb0MsS0FBQXVvQyxnQkFBQXZvQyxLQUFBdW9DLGdCQUFBam5DLE9BQUEsR0FBQWtDLFFBQUFtbEMsR0FDQVYsRUFBQUMsRUFBQTVtQyxPQUFBLEVBQ0FxbkMsRUFBQW5sQyxRQUFBeEQsS0FBQStsQyxlQUVBNEMsRUFBQW5sQyxRQUFBeEQsS0FBQWdtQyxlQUVBaG1DLEtBQUF3b0MscUJBQUE1bEMsS0FBQStsQyxHQUdBM29DLEtBQUF3bkMsU0FBQWhrQyxRQUFBeEQsS0FBQXNvQyxnQkFDQTFvQyxFQUFBd0QsY0FBQWtFLE1BQUExSCxFQUFBSSxLQUFBdW9DLGlCQUNBdm9DLEtBQUE2bEMsWUFBQXJpQyxRQUFBeEQsS0FBQXVvQyxnQkFBQSxJQUNBdm9DLEtBQUE4bEMsWUFBQXRpQyxRQUFBeEQsS0FBQXVvQyxnQkFBQSxJQUNBdm9DLEtBQUFrRSxXQUFBLGNBRUF0RSxFQUFBOEYsT0FBQTlGLEVBQUF5b0MsU0FBQXpvQyxFQUFBZ21DLGNBT0FobUMsRUFBQXlvQyxTQUFBN2xDLFVBQStCZ2xDLFNBQUEsSUFLL0I1bkMsRUFBQXlvQyxTQUFBL29DLFVBQUFtQixRQUFBLFdBQ0FiLEVBQUFnbUMsYUFBQXRtQyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBLFFBQUE0b0MsRUFBQSxFQUEwQkEsRUFBQTVvQyxLQUFBdW9DLGdCQUFBam5DLE9BQW1Dc25DLElBQzdENW9DLEtBQUF1b0MsZ0JBQUFLLEdBQUF4NkIsYUFDQXBPLEtBQUF1b0MsZ0JBQUFLLEdBQUEsS0FFQTVvQyxLQUFBdW9DLGdCQUFBLEtBQ0EsUUFBQUksRUFBQSxFQUEyQkEsRUFBQTNvQyxLQUFBd29DLHFCQUFBbG5DLE9BQXlDcW5DLElBQ3BFM29DLEtBQUF3b0MscUJBQUFHLEdBQUFsb0MsVUFDQVQsS0FBQXdvQyxxQkFBQUcsR0FBQSxLQVFBLE9BTkEzb0MsS0FBQXdvQyxxQkFBQSxLQUNBeG9DLEtBQUFvRSxXQUFBLGFBQ0FwRSxLQUFBd25DLFNBQUEvbUMsVUFDQVQsS0FBQXduQyxTQUFBLEtBQ0F4bkMsS0FBQXNvQyxlQUFBN25DLFVBQ0FULEtBQUFzb0MsZUFBQSxLQUNBdG9DLE1BRUFKLEVBQUF5b0MsV0FFQXhvQyxFQUFBLFNBQUFELEdBMEVBLE9BM0RBQSxFQUFBaXBDLGNBQUEsV0FDQWpwQyxFQUFBdWpDLE9BQUE3N0IsTUFBQXRILEtBQUFzRCxXQU1BdEQsS0FBQTg3QixjQUFBLElBQUFsOEIsRUFBQXU3QixhQU1BbjdCLEtBQUErN0IsY0FBQSxJQUFBbjhCLEVBQUE2N0IsYUFNQXo3QixLQUFBOG9DLFFBQUE5b0MsS0FBQTg3QixjQUFBdFYsSUFNQXhtQixLQUFBK29DLFNBQUEvb0MsS0FBQTg3QixjQUFBTixLQU1BeDdCLEtBQUFncEMsVUFBQWhwQyxLQUFBKzdCLGNBQUF2VixJQU1BeG1CLEtBQUFpcEMsV0FBQWpwQyxLQUFBKzdCLGNBQUFQLEtBRUF4N0IsS0FBQXNqQyxXQUFBOS9CLFFBQUF4RCxLQUFBODdCLGVBQ0E5N0IsS0FBQSs3QixjQUFBdjRCLFFBQUF4RCxLQUFBdWpDLGVBRUEzakMsRUFBQThGLE9BQUE5RixFQUFBaXBDLGNBQUFqcEMsRUFBQXVqQyxRQUtBdmpDLEVBQUFpcEMsY0FBQXZwQyxVQUFBbUIsUUFBQSxXQVVBLE9BVEFiLEVBQUF1akMsT0FBQTdqQyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBODdCLGNBQUFyN0IsVUFDQVQsS0FBQTg3QixjQUFBLEtBQ0E5N0IsS0FBQSs3QixjQUFBdDdCLFVBQ0FULEtBQUErN0IsY0FBQSxLQUNBLzdCLEtBQUE4b0MsUUFBQSxLQUNBOW9DLEtBQUErb0MsU0FBQSxLQUNBL29DLEtBQUFncEMsVUFBQSxLQUNBaHBDLEtBQUFpcEMsV0FBQSxLQUNBanBDLE1BRUFKLEVBQUFpcEMsZ0JBRUFocEMsRUFBQSxTQUFBRCxHQWdNQSxPQTFLQUEsRUFBQXNwQyxPQUFBLFdBRUEsSUFBQXBtQyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsWUFDQSxVQUNBLGlCQUNBMUQsRUFBQXNwQyxRQUNBdHBDLEVBQUFnbUMsYUFBQS9uQyxLQUFBbUMsS0FBQThDLEdBTUE5QyxLQUFBb21DLE1BQUEsSUFBQXhtQyxFQUFBazZCLElBQUFoM0IsRUFBQXFXLFVBQUEsS0FNQW5aLEtBQUFxbUMsTUFBQSxJQUFBem1DLEVBQUFrNkIsSUFBQWgzQixFQUFBcVcsVUFBQSxLQUNBblosS0FBQXFtQyxNQUFBak8sTUFBQSxJQU1BcDRCLEtBQUFta0MsZUFBQXJoQyxFQUFBb21CLGNBTUFscEIsS0FBQWdwQixTQUFBbG1CLEVBQUFtbUIsUUFNQWpwQixLQUFBNGxCLEVBQUEsSUFBQWhtQixFQUFBZ0MsT0FBQWtCLEVBQUE4aUIsRUFBQWhtQixFQUFBNk8sS0FBQXFNLFVBTUE5YSxLQUFBbXBDLFVBQUFucEMsS0FBQW9wQyxhQUFBdG1DLEVBQUF1bUMsT0FBQXJwQyxLQUFBb21DLE1BQUFwbUMsS0FBQTRsQixHQU1BNWxCLEtBQUFzcEMsVUFBQXRwQyxLQUFBb3BDLGFBQUF0bUMsRUFBQXVtQyxPQUFBcnBDLEtBQUFxbUMsTUFBQXJtQyxLQUFBNGxCLEdBS0E1bEIsS0FBQW1aLFVBQUFuWixLQUFBb21DLE1BQUFqdEIsVUFDQW5aLEtBQUFtWixVQUFBeGEsTUFBQW1FLEVBQUFxVyxVQUVBblosS0FBQTZsQyxZQUFBcmlDLFFBQUF4RCxLQUFBbXBDLFVBQUEsSUFDQW5wQyxLQUFBOGxDLFlBQUF0aUMsUUFBQXhELEtBQUFzcEMsVUFBQSxJQUNBdHBDLEtBQUFtcEMsVUFBQXJtQyxFQUFBdW1DLE9BQUEsR0FBQTdsQyxRQUFBeEQsS0FBQStsQyxlQUNBL2xDLEtBQUFzcEMsVUFBQXhtQyxFQUFBdW1DLE9BQUEsR0FBQTdsQyxRQUFBeEQsS0FBQWdtQyxlQUVBaG1DLEtBQUFvbUMsTUFBQWp0QixVQUFBM1YsUUFBQXhELEtBQUFxbUMsTUFBQWx0QixXQUVBblosS0FBQWtwQixjQUFBcG1CLEVBQUFvbUIsY0FDQWxwQixLQUFBaXBCLFFBQUFubUIsRUFBQW1tQixRQUVBanBCLEtBQUFvbUMsTUFBQXo0QixRQUNBM04sS0FBQXFtQyxNQUFBMTRCLFFBQ0EzTixLQUFBa0UsV0FDQSxZQUNBLE9BR0F0RSxFQUFBOEYsT0FBQTlGLEVBQUFzcEMsT0FBQXRwQyxFQUFBZ21DLGNBTUFobUMsRUFBQXNwQyxPQUFBMW1DLFVBQ0EyVyxVQUFBLEdBQ0E4UCxRQUFBLEVBQ0FvZ0IsT0FBQSxHQUNBempCLEVBQUEsR0FDQXNELGNBQUEsS0FPQXRwQixFQUFBc3BDLE9BQUE1cEMsVUFBQThwQyxhQUFBLFNBQUFDLEVBQUFFLEVBQUEzakIsR0FHQSxJQUZBLElBQUE0akIsRUFBQSxJQUFBMWxDLE1BQUF1bEMsR0FFQTNyQyxFQUFBLEVBQXdCQSxFQUFBMnJDLEVBQVkzckMsSUFBQSxDQUNwQyxJQUFBdW9CLEVBQUFqbUIsS0FBQXlGLFFBQUF5Z0IscUJBQ0FELEVBQUFoWSxLQUFBLFVBQ0EyWCxFQUFBcGlCLFFBQUF5aUIsRUFBQUwsR0FDQTJqQixFQUFBL2xDLFFBQUF5aUIsRUFBQTlNLFdBQ0Fxd0IsRUFBQTlyQyxHQUFBdW9CLEVBR0EsT0FEQXJtQixFQUFBd0QsY0FBQWtFLE1BQUExSCxFQUFBNHBDLEdBQ0FBLEdBU0FwckMsT0FBQUMsZUFBQXVCLEVBQUFzcEMsT0FBQTVwQyxVQUFBLFdBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQWdwQixVQUVBdG9CLElBQUEsU0FBQXVvQixHQUNBanBCLEtBQUFncEIsU0FBQUMsRUFDQSxJQUFBdlosRUFBQTFQLEtBQUFta0MsZUFBQXYvQixLQUFBSyxJQUFBLEVBQUFna0IsR0FDQWpwQixLQUFBb21DLE1BQUExMkIsTUFDQTFQLEtBQUFxbUMsTUFBQTMyQixTQVNBdFIsT0FBQUMsZUFBQXVCLEVBQUFzcEMsT0FBQTVwQyxVQUFBLGlCQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFta0MsZ0JBRUF6akMsSUFBQSxTQUFBMlUsR0FDQXJWLEtBQUFta0MsZUFBQTl1QixFQUNBclYsS0FBQW9tQyxNQUFBbHFCLElBQUE3RyxFQUNBclYsS0FBQXFtQyxNQUFBbnFCLElBQUE3RyxFQUNBclYsS0FBQWlwQixRQUFBanBCLEtBQUFncEIsWUFPQXBwQixFQUFBc3BDLE9BQUE1cEMsVUFBQW1CLFFBQUEsV0FDQWIsRUFBQWdtQyxhQUFBdG1DLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFvRSxXQUNBLFlBQ0EsTUFFQXBFLEtBQUE0bEIsRUFBQW5sQixVQUNBVCxLQUFBNGxCLEVBQUEsS0FDQTVsQixLQUFBb21DLE1BQUEzbEMsVUFDQVQsS0FBQW9tQyxNQUFBLEtBQ0FwbUMsS0FBQXFtQyxNQUFBNWxDLFVBQ0FULEtBQUFxbUMsTUFBQSxLQUNBLFFBQUEzb0MsRUFBQSxFQUF3QkEsRUFBQXNDLEtBQUFtcEMsVUFBQTduQyxPQUEyQjVELElBQ25Ec0MsS0FBQW1wQyxVQUFBenJDLEdBQUEwUSxhQUNBcE8sS0FBQW1wQyxVQUFBenJDLEdBQUEsS0FFQXNDLEtBQUFtcEMsVUFBQSxLQUNBLFFBQUEvbUMsRUFBQSxFQUF3QkEsRUFBQXBDLEtBQUFzcEMsVUFBQWhvQyxPQUEyQmMsSUFDbkRwQyxLQUFBc3BDLFVBQUFsbkMsR0FBQWdNLGFBQ0FwTyxLQUFBc3BDLFVBQUFsbkMsR0FBQSxLQUlBLE9BRkFwQyxLQUFBc3BDLFVBQUEsS0FDQXRwQyxLQUFBbVosVUFBQSxLQUNBblosTUFFQUosRUFBQXNwQyxTQUVBcnBDLEVBQUEsU0FBQUQsR0FzREEsT0E3Q0FBLEVBQUE2cEMsc0JBQUEsV0FDQSxJQUFBM21DLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FBQSxZQUFBMUQsRUFBQXFuQyxnQkFDQXJuQyxFQUFBZ21DLGFBQUEvbkMsS0FBQW1DLEtBQUE4QyxHQVFBOUMsS0FBQW1uQyxTQUFBLElBQUF2bkMsRUFBQWdDLE9BQUFrQixFQUFBcWtDLFNBQUF2bkMsRUFBQTZPLEtBQUFnTSxhQU1BemEsS0FBQTBwQyxZQUFBLElBQUE5cEMsRUFBQW1iLEtBTUEvYSxLQUFBMnBDLFlBQUEsSUFBQS9wQyxFQUFBbWIsS0FFQS9hLEtBQUErbEMsY0FBQTUwQixNQUFBblIsS0FBQTBwQyxZQUFBMXBDLEtBQUE4bEMsYUFDQTlsQyxLQUFBZ21DLGNBQUE3MEIsTUFBQW5SLEtBQUEycEMsWUFBQTNwQyxLQUFBNmxDLGFBQ0E3bEMsS0FBQW1uQyxTQUFBLzFCLElBQUFwUixLQUFBMHBDLFlBQUF2a0MsS0FBQW5GLEtBQUEycEMsWUFBQXhrQyxNQUNBbkYsS0FBQWtFLFdBQUEsY0FFQXRFLEVBQUE4RixPQUFBOUYsRUFBQTZwQyxzQkFBQTdwQyxFQUFBZ21DLGNBS0FobUMsRUFBQTZwQyxzQkFBQW5xQyxVQUFBbUIsUUFBQSxXQVNBLE9BUkFiLEVBQUFnbUMsYUFBQXRtQyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBb0UsV0FBQSxhQUNBcEUsS0FBQW1uQyxTQUFBMW1DLFVBQ0FULEtBQUFtbkMsU0FBQSxLQUNBbm5DLEtBQUEwcEMsWUFBQWpwQyxVQUNBVCxLQUFBMHBDLFlBQUEsS0FDQTFwQyxLQUFBMnBDLFlBQUFscEMsVUFDQVQsS0FBQTJwQyxZQUFBLEtBQ0EzcEMsTUFFQUosRUFBQTZwQyx3QkFFQTVwQyxFQUFBLFNBQUFELEdBc0ZBLE9BakVBQSxFQUFBZ3FDLGNBQUEsV0FDQSxJQUFBOW1DLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxZQUNBLFlBQ0ExRCxFQUFBZ3FDLGVBQ0FocUMsRUFBQTZwQyxzQkFBQTVyQyxLQUFBbUMsS0FBQThDLEdBTUE5QyxLQUFBNnBDLFdBQUEsSUFBQWpxQyxFQUFBK25CLE1BQUEsRUFBQTdrQixFQUFBZ25DLGNBTUE5cEMsS0FBQStwQyxZQUFBLElBQUFucUMsRUFBQStuQixNQUFBLEVBQUE3a0IsRUFBQWduQyxjQU1BOXBDLEtBQUFncUMsZUFBQSxJQUFBcHFDLEVBQUErbkIsTUFBQSxFQUFBN2tCLEVBQUFnbkMsY0FNQTlwQyxLQUFBOG5CLFVBQUEsSUFBQWxvQixFQUFBZ0MsT0FBQWtCLEVBQUFnbEIsVUFBQWxvQixFQUFBNk8sS0FBQTJLLE1BRUFwWixLQUFBNmxDLFlBQUExMEIsTUFBQW5SLEtBQUE2cEMsV0FBQTdwQyxLQUFBK2xDLGVBQ0EvbEMsS0FBQThsQyxZQUFBMzBCLE1BQUFuUixLQUFBZ3FDLGVBQUFocUMsS0FBQStwQyxZQUFBL3BDLEtBQUFnbUMsZUFDQWhtQyxLQUFBOG5CLFVBQUExVyxJQUFBcFIsS0FBQTZwQyxXQUFBL2hCLFVBQUE5bkIsS0FBQStwQyxZQUFBamlCLFVBQUE5bkIsS0FBQWdxQyxlQUFBbGlCLFdBRUE5bkIsS0FBQTBwQyxZQUFBdDdCLGFBQ0FwTyxLQUFBMHBDLFlBQUFsbUMsUUFBQXhELEtBQUErcEMsYUFDQS9wQyxLQUFBa0UsV0FBQSxlQUVBdEUsRUFBQThGLE9BQUE5RixFQUFBZ3FDLGNBQUFocUMsRUFBQTZwQyx1QkFLQTdwQyxFQUFBZ3FDLGNBQUFwbkMsVUFDQXNsQixVQUFBLElBQ0FnaUIsYUFBQSxHQU1BbHFDLEVBQUFncUMsY0FBQXRxQyxVQUFBbUIsUUFBQSxXQVdBLE9BVkFiLEVBQUE2cEMsc0JBQUFucUMsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQTZwQyxXQUFBcHBDLFVBQ0FULEtBQUE2cEMsV0FBQSxLQUNBN3BDLEtBQUErcEMsWUFBQXRwQyxVQUNBVCxLQUFBK3BDLFlBQUEsS0FDQS9wQyxLQUFBZ3FDLGVBQUF2cEMsVUFDQVQsS0FBQWdxQyxlQUFBLEtBQ0FocUMsS0FBQW9FLFdBQUEsY0FDQXBFLEtBQUE4bkIsVUFBQXJuQixVQUNBVCxLQUFBOG5CLFVBQUEsS0FDQTluQixNQUVBSixFQUFBZ3FDLGdCQUVBL3BDLEVBQUEsU0FBQUQsR0FnTkEsT0FwTUFBLEVBQUFxcUMsV0FBQSxXQUNBLElBQUFubkMsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUFBLFNBQUExRCxFQUFBcXFDLFlBQ0FycUMsRUFBQXFuQyxlQUFBcHBDLEtBQUFtQyxLQUFBOEMsR0FNQTlDLEtBQUFrcUMsV0FBQSxJQUFBdHFDLEVBQUFnQyxPQUFBLEdBT0E1QixLQUFBbXFDLFFBQUEsSUFBQXZxQyxFQUFBK25CLE1BQUEsS0FNQTNuQixLQUFBb3FDLE1BQUEsSUFBQXhxQyxFQUFBazZCLEtBQ0E1ZCxJQUFBLEVBQ0F4TSxJQUFBLEdBQ0F6QixLQUFBLGFBQ1V6SyxRQUFBeEQsS0FBQW1xQyxRQUFBcmlCLFdBTVY5bkIsS0FBQXFxQyxRQUFBLElBQUF6cUMsRUFBQStuQixNQUFBLEtBTUEzbkIsS0FBQXNxQyxNQUFBLElBQUExcUMsRUFBQWs2QixLQUNBNWQsSUFBQSxFQUNBeE0sSUFBQSxHQUNBekIsS0FBQSxXQUNBbXFCLE1BQUEsTUFDVTUwQixRQUFBeEQsS0FBQXFxQyxRQUFBdmlCLFdBT1Y5bkIsS0FBQXVxQyxXQUFBLElBQUEzcUMsRUFBQXNsQixVQVFBbGxCLEtBQUF3cUMsY0FBQSxJQUFBNXFDLEVBQUFrNkIsS0FDQTVkLElBQUEsRUFDQXhNLElBQUEsRUFDQXpCLEtBQUEsV0FDQW1xQixNQUFBLEtBQ1U1MEIsUUFBQXhELEtBQUF1cUMsV0FBQW5sQixNQU1WcGxCLEtBQUF5cUMsZUFBQSxJQUFBN3FDLEVBQUErbkIsTUFBQTdrQixFQUFBZ2xCLFdBTUE5bkIsS0FBQThuQixVQUFBOW5CLEtBQUF5cUMsZUFBQTNpQixVQUNBOW5CLEtBQUFrRSxVQUFBLGFBTUFsRSxLQUFBMHFDLE9BQUE1bkMsRUFBQXNULE1BTUFwVyxLQUFBMnFDLFlBQUE3bkMsRUFBQThuQyxXQUVBNXFDLEtBQUFtcUMsUUFBQTNtQyxRQUFBeEQsS0FBQXVxQyxXQUFBNXhCLEdBQ0EzWSxLQUFBcXFDLFFBQUE3bUMsUUFBQXhELEtBQUF1cUMsV0FBQXZ4QixHQUVBaFosS0FBQWtxQyxXQUFBOTRCLElBQUFwUixLQUFBb3FDLE1BQUFqeEIsVUFBQW5aLEtBQUFzcUMsTUFBQW54QixVQUFBblosS0FBQXdxQyxjQUFBcnhCLFdBRUFuWixLQUFBc2pDLFdBQUFseUIsSUFBQXBSLEtBQUFtcUMsUUFBQW5xQyxLQUFBcXFDLFNBQ0FycUMsS0FBQXVxQyxXQUFBcDVCLE1BQUFuUixLQUFBeXFDLGVBQUF6cUMsS0FBQXVqQyxjQUVBLElBQUEvOUIsRUFBQXhGLEtBQUF3RixNQUNBeEYsS0FBQW9xQyxNQUFBejhCLE1BQUFuSSxHQUNBeEYsS0FBQXNxQyxNQUFBMzhCLE1BQUFuSSxHQUNBeEYsS0FBQXdxQyxjQUFBNzhCLE1BQUFuSSxHQUVBeEYsS0FBQTRxQyxXQUFBNXFDLEtBQUEycUMsYUFFQS9xQyxFQUFBOEYsT0FBQTlGLEVBQUFxcUMsV0FBQXJxQyxFQUFBcW5DLGdCQU9Bcm5DLEVBQUFxcUMsV0FBQXpuQyxVQUNBNFQsTUFBQSxFQUNBdzBCLFdBQUEsR0FDQTlpQixVQUFBLEVBQ0FxZixTQUFBLEdBWUEvb0MsT0FBQUMsZUFBQXVCLEVBQUFxcUMsV0FBQTNxQyxVQUFBLFNBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQTBxQyxRQUVBaHFDLElBQUEsU0FBQTZFLEdBQ0F2RixLQUFBMHFDLE9BQUFubEMsRUFDQSxJQUFBc2xDLEVBQUEsRUFDQXRsQyxFQUFBLEdBQ0F2RixLQUFBb3FDLE1BQUFsdUIsSUFBQSxFQUNBbGMsS0FBQW9xQyxNQUFBMTZCLElBQUExUCxLQUFBMnFDLFlBQ0EzcUMsS0FBQXNxQyxNQUFBcHVCLElBQUEsRUFDQWxjLEtBQUFzcUMsTUFBQTU2QixJQUFBMVAsS0FBQTJxQyxZQUNBRSxFQUFBanJDLEVBQUEwRix5QkFBQUMsRUFBQSxPQUVBdkYsS0FBQW9xQyxNQUFBbHVCLElBQUFsYyxLQUFBMnFDLFlBQ0EzcUMsS0FBQW9xQyxNQUFBMTZCLElBQUEsRUFDQTFQLEtBQUFzcUMsTUFBQXB1QixJQUFBbGMsS0FBQTJxQyxZQUNBM3FDLEtBQUFzcUMsTUFBQTU2QixJQUFBLEVBQ0FtN0IsRUFBQWpyQyxFQUFBMEYseUJBQUFDLEdBQUEsR0FFQXZGLEtBQUFrcUMsV0FBQXZyQyxNQUFBa3NDLEdBQUEsSUFBQTdxQyxLQUFBMnFDLGdCQWNBdnNDLE9BQUFDLGVBQUF1QixFQUFBcXFDLFdBQUEzcUMsVUFBQSxjQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUEycUMsYUFFQWpxQyxJQUFBLFNBQUE4aUIsR0FDQXhqQixLQUFBMnFDLFlBQUEzcUMsS0FBQXlULFVBQUErUCxHQUNBeGpCLEtBQUFvVyxNQUFBcFcsS0FBQTBxQyxVQU9BOXFDLEVBQUFxcUMsV0FBQTNxQyxVQUFBbUIsUUFBQSxXQW9CQSxPQW5CQWIsRUFBQXFuQyxlQUFBM25DLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFrcUMsV0FBQXpwQyxVQUNBVCxLQUFBa3FDLFdBQUEsS0FDQWxxQyxLQUFBbXFDLFFBQUEvN0IsYUFDQXBPLEtBQUFtcUMsUUFBQSxLQUNBbnFDLEtBQUFxcUMsUUFBQWo4QixhQUNBcE8sS0FBQXFxQyxRQUFBLEtBQ0FycUMsS0FBQW9xQyxNQUFBM3BDLFVBQ0FULEtBQUFvcUMsTUFBQSxLQUNBcHFDLEtBQUFzcUMsTUFBQTdwQyxVQUNBVCxLQUFBc3FDLE1BQUEsS0FDQXRxQyxLQUFBdXFDLFdBQUE5cEMsVUFDQVQsS0FBQXVxQyxXQUFBLEtBQ0F2cUMsS0FBQXdxQyxjQUFBL3BDLFVBQ0FULEtBQUF3cUMsY0FBQSxLQUNBeHFDLEtBQUFvRSxVQUFBLGFBQ0FwRSxLQUFBeXFDLGVBQUFocUMsVUFDQVQsS0FBQXlxQyxlQUFBLEtBQ0F6cUMsS0FBQThuQixVQUFBLEtBQ0E5bkIsTUFFQUosRUFBQXFxQyxhQUVBcHFDLEVBQUEsU0FBQUQsR0F5WEEsT0FqWEFBLEVBQUFrckMsYUFBQSxXQUNBLElBQUFob0MsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLFNBQ0EsVUFDQTFELEVBQUFrckMsY0FDQWxyQyxFQUFBbVEsVUFBQWxTLEtBQUFtQyxLQUFBOEMsR0FNQTlDLEtBQUFzM0IsUUFBQXgwQixFQUFBdzBCLFFBTUF0M0IsS0FBQXUzQixZQUFBLEVBUUF2M0IsS0FBQXVmLGdCQUFBLEVBTUF2ZixLQUFBK3FDLGdCQUFBLEVBTUEvcUMsS0FBQXczQixXQUFBLEVBTUF4M0IsS0FBQThlLFVBQUE5ZSxLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQW1iLEtBTUEvYSxLQUFBZ3JDLFFBQUFockMsS0FBQXlGLFFBQUE4SCxxQkFDQXZOLEtBQUFnckMsUUFBQXhuQyxRQUFBeEQsS0FBQThlLFdBQ0E5ZSxLQUFBZ3JDLFFBQUExVCxRQUFBdDNCLEtBQUFpckMsU0FBQS9yQyxLQUFBYyxNQU1BQSxLQUFBdWpCLFFBQUEsSUFBQTNqQixFQUFBbzBCLE9BQUFseEIsRUFBQTRJLE9BQUE1SSxFQUFBdXhCLFFBTUFyMEIsS0FBQWtyQyxhQUFBLElBQUF0ckMsRUFBQWlDLE1BQUE3QixLQUFBZ3JDLFFBQUFFLGFBQUF0ckMsRUFBQTZPLEtBQUFxTSxVQUtBOWEsS0FBQW1yQyxPQUFBcm9DLEVBQUFxb0MsT0FLQW5yQyxLQUFBb3JDLFFBQUF0b0MsRUFBQXNvQyxRQUtBcHJDLEtBQUFxUyxNQUFBdlAsRUFBQXVQLE1BTUFyUyxLQUFBMjNCLE1BQUEsRUFNQTMzQixLQUFBcXJDLGlCQUFBLEVBRUFyckMsS0FBQTBOLEtBQUE1SyxFQUFBNEssS0FDQTFOLEtBQUE4d0IsVUFBQWh1QixFQUFBZ3VCLFVBQ0E5d0IsS0FBQSt3QixRQUFBanVCLEVBQUFpdUIsUUFDQS93QixLQUFBa3JDLGFBQUF2c0MsTUFBQW1FLEVBQUFvb0MsY0FFQXRyQyxFQUFBOEYsT0FBQTlGLEVBQUFrckMsYUFBQWxyQyxFQUFBbVEsV0FNQW5RLEVBQUFrckMsYUFBQXRvQyxVQUNBODBCLFFBQUExM0IsRUFBQXFFLEtBQ0Fvd0IsT0FBQXowQixFQUFBcUUsS0FDQXlKLE1BQUEsRUFDQW9qQixVQUFBLEVBQ0FDLFFBQUEsRUFDQW9hLE9BQUEsRUFDQUMsUUFBQSxFQUNBLzRCLE1BQUEsU0FDQTY0QixhQUFBLEdBU0E5c0MsT0FBQUMsZUFBQXVCLEVBQUFrckMsYUFBQXhyQyxVQUFBLFNBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXdzQixlQUFBeHNCLEtBQUF3RixVQVFBNUYsRUFBQWtyQyxhQUFBeHJDLFVBQUFrdEIsZUFBQSxTQUFBcGtCLEdBRUEsT0FEQUEsRUFBQXBJLEtBQUF5VCxVQUFBckwsSUFDQSxJQUFBcEksS0FBQXUzQixZQUFBbnZCLEdBQUFwSSxLQUFBdTNCLGFBQUF2M0IsS0FBQStxQyxlQUNBbnJDLEVBQUF5RSxNQUFBQyxRQUVBMUUsRUFBQXlFLE1BQUFFLFNBZUEzRSxFQUFBa3JDLGFBQUF4ckMsVUFBQXFPLE1BQUEsU0FBQXZGLEVBQUFnWCxFQUFBdkIsRUFBQTFZLEVBQUFtbUMsR0FDQSxRQUFBdHJDLEtBQUF1M0IsV0FDQSxVQUFBdDNCLE1BQUEsK0NBRUEsSUFBQUQsS0FBQTBMLE9BQUE0b0IsT0FDQSxVQUFBcjBCLE1BQUEsOERBRUFtSSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUdBZ1gsRUFEQXBmLEtBQUEwTixLQUNBOU4sRUFBQW1ELFdBQUFxYyxFQUFBcGYsS0FBQTh3QixXQUdBbHhCLEVBQUFtRCxXQUFBcWMsRUFBQSxHQUVBQSxFQUFBcGYsS0FBQXlULFVBQUEyTCxHQUNBamEsRUFBQXZGLEVBQUFtRCxXQUFBb0MsRUFBQSxHQUNBbkYsS0FBQTIzQixNQUFBeHlCLEVBQ0FtbUMsRUFBQXRyQyxLQUFBeVQsVUFBQTdULEVBQUFtRCxXQUFBdW9DLEVBQUF0ckMsS0FBQW1yQyxTQUNBbnJDLEtBQUFtckMsT0FBQUcsRUFDQUEsRUFBQSxHQUNBdHJDLEtBQUE4ZSxVQUFBM1osS0FBQTRXLGVBQUEsRUFBQTNULEdBQ0EsV0FBQXBJLEtBQUFxUyxNQUNBclMsS0FBQThlLFVBQUEzWixLQUFBaVksd0JBQUFwZCxLQUFBMjNCLE1BQUF2dkIsRUFBQWtqQyxHQUVBdHJDLEtBQUE4ZSxVQUFBM1osS0FBQXNZLCtCQUFBemQsS0FBQTIzQixNQUFBdnZCLEVBQUFrakMsSUFHQXRyQyxLQUFBOGUsVUFBQTNaLEtBQUE0VyxlQUFBNVcsRUFBQWlELEdBRUFwSSxLQUFBdTNCLFdBQUFudkIsRUFDQSxJQUFBbWpDLEVBQUF2ckMsS0FBQXlULFVBQUE3VCxFQUFBbUQsV0FBQThhLEVBQUE3ZCxLQUFBMEwsT0FBQW1TLFNBQUF1QixFQUFBcGYsS0FBQTBMLE9BQUFtUyxXQVVBLEdBVEEwdEIsRUFBQTNtQyxLQUFBOEssSUFBQTY3QixFQUFBLEdBQ0EzckMsRUFBQTBDLFVBQUF1YixLQUVBN2QsS0FBQTBOLE9BQ0E2OUIsRUFBQTNtQyxLQUFBc1gsSUFBQXF2QixFQUFBdnJDLEtBQUEwTCxPQUFBbVMsU0FBQXVCLEVBQUFwZixLQUFBMEwsT0FBQW1TLFdBRUE3ZCxLQUFBcWYsS0FBQWpYLEVBQUFtakMsRUFBQXZyQyxLQUFBb3JDLFVBR0FwckMsS0FBQTBOLEtBQUEsQ0FFQSxJQUFBcWpCLEVBQUEvd0IsS0FBQSt3QixTQUFBL3dCLEtBQUEwTCxPQUFBbVMsU0FDQWlULEVBQUE5d0IsS0FBQTh3QixVQUdBMVIsR0FBQTJSLElBQ0EzUixLQUFBMFIsSUFIQUMsRUFBQUQsR0FHQUEsR0FTQSxPQU5BOXdCLEtBQUFnckMsUUFBQXQvQixPQUFBMUwsS0FBQTBMLE9BQUFuTixNQUNBeUIsS0FBQWdyQyxRQUFBamEsUUFBQS93QixLQUFBK3dCLFNBQUEvd0IsS0FBQTBMLE9BQUFtUyxTQUNBdUIsRUFBQXBmLEtBQUEwTCxPQUFBbVMsV0FDQTdkLEtBQUF1ZixnQkFBQSxFQUNBdmYsS0FBQWdyQyxRQUFBcjlCLE1BQUF2RixFQUFBZ1gsSUFFQXBmLE1BU0FKLEVBQUFrckMsYUFBQXhyQyxVQUFBK2YsS0FBQSxTQUFBalgsRUFBQW9qQyxHQUNBLElBQUF4ckMsS0FBQTBMLE9BQUE0b0IsT0FDQSxVQUFBcjBCLE1BQUEsOERBRUEsSUFBQUQsS0FBQStxQyxlQUFBLENBU0EsR0FOQTNpQyxFQUFBcEksS0FBQXlULFVBQUFyTCxJQUVBLElBQUFwSSxLQUFBdzNCLFdBQ0F4M0IsS0FBQTgzQixhQUdBMXZCLEdBQUFwSSxLQUFBdTNCLFdBR0EsT0FGQXYzQixLQUFBOGUsVUFBQTNaLEtBQUF1TSxzQkFBQXRKLEdBQ0FwSSxLQUFBOGUsVUFBQTNaLEtBQUF4RyxNQUFBLEVBQ0FxQixLQUVBb0ksRUFBQXhELEtBQUE4SyxJQUFBMVAsS0FBQXUzQixXQUFBdjNCLEtBQUFtckMsT0FBQW5yQyxLQUFBdXFCLFdBQUFuaUIsR0FFQXBJLEtBQUE4ZSxVQUFBM1osS0FBQXVNLHNCQUFBdEosR0FDQXBJLEtBQUF3M0IsVUFBQXB2QixFQUVBb2pDLEVBQUF4ckMsS0FBQXlULFVBQUE3VCxFQUFBbUQsV0FBQXlvQyxFQUFBeHJDLEtBQUFvckMsVUFDQSxJQUFBSyxFQUFBcmpDLEVBQUFwSSxLQUFBdTNCLFdBQUF2M0IsS0FBQW1yQyxPQUFBbnJDLEtBQUF1cUIsV0FDQXZxQixLQUFBME4sT0FFQSs5QixFQUFBN21DLEtBQUFzWCxJQUFBdXZCLEVBQUF6ckMsS0FBQTBMLE9BQUFtUyxXQUdBLElBQUE2dEIsRUFBQXRqQyxHQURBb2pDLEVBQUE1bUMsS0FBQXNYLElBQUF1dkIsRUFBQUQsSUFjQSxPQVpBQSxFQUFBeHJDLEtBQUF1cUIsWUFDQXZxQixLQUFBOGUsVUFBQTNaLEtBQUE0VyxlQUFBL2IsS0FBQTIzQixNQUFBK1QsR0FDQSxXQUFBMXJDLEtBQUFxUyxNQUNBclMsS0FBQThlLFVBQUEzWixLQUFBaVksd0JBQUEsRUFBQWhWLEdBRUFwSSxLQUFBOGUsVUFBQTNaLEtBQUFzWSwrQkFBQSxFQUFBaXVCLEVBQUFGLElBR0F4ckMsS0FBQThlLFVBQUEzWixLQUFBNFcsZUFBQSxFQUFBM1QsR0FFQXhJLEVBQUE2RixRQUFBdUksYUFBQWhPLEtBQUFxckMsaUJBQ0FyckMsS0FBQXFyQyxnQkFBQXpyQyxFQUFBNkYsUUFBQW1JLFdBQUE1TixLQUFBaXJDLFNBQUEvckMsS0FBQWMsV0FBQXczQixVQUFBeDNCLEtBQUF3RixPQUNBeEYsT0FNQUosRUFBQWtyQyxhQUFBeHJDLFVBQUF3NEIsV0FBQSxXQUNBLFFBQUE5M0IsS0FBQXUzQixhQUFBdjNCLEtBQUErcUMsZUFBQSxDQUVBLElBQUFPLEVBQUF0ckMsS0FBQXlULFVBQUF6VCxLQUFBbXJDLFFBQ0FuckMsS0FBQThlLFVBQUEzWixLQUFBdU0sc0JBQUExUixLQUFBdTNCLFdBQUErVCxFQUFBdHJDLEtBQUF1cUIsWUFDQXZxQixLQUFBOGUsVUFBQTNaLEtBQUE0VyxlQUFBLEVBQUFuWCxLQUFBOEssSUFBQTFQLEtBQUF3RixNQUFBeEYsS0FBQXUzQixXQUFBK1QsRUFBQXRyQyxLQUFBdXFCLGFBQ0F2cUIsS0FBQXlGLFFBQUF1SSxhQUFBaE8sS0FBQXFyQyxpQkFDQXJyQyxLQUFBdzNCLFdBQUEsRUFFQSxPQUFBeDNCLE1BT0FKLEVBQUFrckMsYUFBQXhyQyxVQUFBMnJDLFNBQUEsV0FDQSxJQUFBanJDLEtBQUErcUMsZUFBQSxDQUNBL3FDLEtBQUErcUMsZ0JBQUEsRUFFQSxJQUFBWSxFQUFBLGdCQUFBM3JDLEtBQUFxUyxNQUFBLEVBQUFyUyxLQUFBb3JDLFFBQUEsRUFDQXByQyxLQUFBdWYsaUJBQUEsSUFBQXZmLEtBQUF3M0IsV0FDQXgzQixLQUFBZ3JDLFFBQUEzckIsS0FBQXJmLEtBQUF3M0IsVUFBQW1VLEdBRUEzckMsS0FBQXMzQixRQUFBdDNCLFFBU0E1QixPQUFBQyxlQUFBdUIsRUFBQWtyQyxhQUFBeHJDLFVBQUEsYUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBZ3JDLFFBQUFsYSxXQUVBcHdCLElBQUEsU0FBQW93QixHQUNBOXdCLEtBQUFnckMsUUFBQWxhLFVBQUE5d0IsS0FBQXlULFVBQUFxZCxNQVNBMXlCLE9BQUFDLGVBQUF1QixFQUFBa3JDLGFBQUF4ckMsVUFBQSxXQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFnckMsUUFBQWphLFNBRUFyd0IsSUFBQSxTQUFBcXdCLEdBQ0Evd0IsS0FBQWdyQyxRQUFBamEsUUFBQS93QixLQUFBeVQsVUFBQXNkLE1BU0EzeUIsT0FBQUMsZUFBQXVCLEVBQUFrckMsYUFBQXhyQyxVQUFBLFVBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXVqQixTQUVBN2lCLElBQUEsU0FBQWdMLEdBQ0ExTCxLQUFBdWpCLFFBQUE3aUIsSUFBQWdMLE1BU0F0TixPQUFBQyxlQUFBdUIsRUFBQWtyQyxhQUFBeHJDLFVBQUEsUUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBZ3JDLFFBQUF0OUIsTUFFQWhOLElBQUEsU0FBQWdOLEdBQ0ExTixLQUFBZ3JDLFFBQUF0OUIsT0FDQTFOLEtBQUE4M0IsZ0JBT0FsNEIsRUFBQWtyQyxhQUFBeHJDLFVBQUFtQixRQUFBLFdBYUEsT0FaQWIsRUFBQW1RLFVBQUF6USxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBczNCLFFBQUEsS0FDQXQzQixLQUFBZ3JDLFFBQUExVCxRQUFBLEtBQ0F0M0IsS0FBQWdyQyxRQUFBNThCLGFBQ0FwTyxLQUFBZ3JDLFFBQUEsS0FDQWhyQyxLQUFBOGUsVUFBQXJlLFVBQ0FULEtBQUE4ZSxVQUFBLEtBQ0E5ZSxLQUFBdWpCLFFBQUE5aUIsVUFDQVQsS0FBQXVqQixRQUFBLEtBQ0F2akIsS0FBQXUzQixZQUFBLEVBQ0F2M0IsS0FBQWtyQyxhQUFBLEtBQ0F0ckMsRUFBQTZGLFFBQUF1SSxhQUFBaE8sS0FBQXFyQyxpQkFDQXJyQyxNQUVBSixFQUFBa3JDLGVBRUFqckMsRUFBQSxTQUFBRCxHQTBCQUEsRUFBQWdzQyxNQUFBLFdBQ0EsSUFBQTlvQyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQUEsUUFBQTFELEVBQUFnc0MsT0FDQWhzQyxFQUFBZ3pCLE9BQUEvMEIsS0FBQW1DLEtBQUE4QyxHQUtBOUMsS0FBQWdyQyxRQUFBLEtBTUFockMsS0FBQXFPLE1BQUF2TCxFQUFBbUwsS0FPQWpPLEtBQUE2ckMsY0FBQS9vQyxFQUFBb29DLGNBRUF0ckMsRUFBQThGLE9BQUE5RixFQUFBZ3NDLE1BQUFoc0MsRUFBQWd6QixRQVFBaHpCLEVBQUFnc0MsTUFBQXBwQyxVQUNBeUwsS0FBQSxRQUNBaTlCLGFBQUEsR0FVQTlzQyxPQUFBQyxlQUFBdUIsRUFBQWdzQyxNQUFBdHNDLFVBQUEsUUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBcU8sT0FFQTNOLElBQUEsU0FBQXVOLEdBQ0EsR0FBQWpPLEtBQUFxTyxRQUFBSixFQUFBLENBQ0EsS0FBQUEsS0FBQTY5QixHQVNBLFVBQUE5bkIsVUFBQSw2QkFBQS9WLEdBTkEsR0FGQWpPLEtBQUFxTyxNQUFBSixFQUVBak8sS0FBQWdOLFFBQUFwTixFQUFBeUUsTUFBQUMsUUFBQSxDQUNBLElBQUFrQixFQUFBeEYsS0FBQXdGLE1BQ0F4RixLQUFBaXpCLE1BQUF6dEIsR0FDQXhGLEtBQUEreUIsT0FBQXZ0QixRQWNBcEgsT0FBQUMsZUFBQXVCLEVBQUFnc0MsTUFBQXRzQyxVQUFBLGdCQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUE2ckMsZUFFQW5yQyxJQUFBLFNBQUFxckMsR0FDQS9yQyxLQUFBNnJDLGNBQUFFLEVBQ0EvckMsS0FBQWdyQyxVQUNBaHJDLEtBQUFnckMsUUFBQUUsYUFBQXZzQyxNQUFBb3RDLE1BVUFuc0MsRUFBQWdzQyxNQUFBdHNDLFVBQUF5ekIsT0FBQSxTQUFBM3FCLEdBQ0EsSUFBQXNELEVBQUFvZ0MsRUFBQTlyQyxLQUFBcU8sT0FDQXJPLEtBQUFnckMsUUFBQSxJQUFBcHJDLEVBQUFrckMsYUFBQXAvQixHQUFBbEksUUFBQXhELEtBQUE0USxRQUNBNVEsS0FBQWdyQyxRQUFBdDlCLE1BQUEsRUFDQTFOLEtBQUFnckMsUUFBQUUsYUFBQXZzQyxNQUFBcUIsS0FBQTZyQyxjQUNBN3JDLEtBQUFnckMsUUFBQXI5QixNQUFBM04sS0FBQXlULFVBQUFyTCxHQUFBeEQsS0FBQWk3QixVQUFBbjBCLEVBQUFtUyxTQUFBLFFBUUFqZSxFQUFBZ3NDLE1BQUF0c0MsVUFBQTJ6QixNQUFBLFNBQUE3cUIsR0FDQXBJLEtBQUFnckMsVUFDQWhyQyxLQUFBZ3JDLFFBQUEzckIsS0FBQXJmLEtBQUF5VCxVQUFBckwsSUFDQXBJLEtBQUFnckMsUUFBQSxPQVFBcHJDLEVBQUFnc0MsTUFBQXRzQyxVQUFBMHpCLFFBQUEsU0FBQTVxQixHQUdBcEksS0FBQWl6QixNQUFBN3FCLEdBQ0FwSSxLQUFBK3lCLE9BQUEzcUIsSUFNQXhJLEVBQUFnc0MsTUFBQXRzQyxVQUFBbUIsUUFBQSxXQU9BLE9BTkFiLEVBQUFnekIsT0FBQXR6QixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBLE9BQUFBLEtBQUFnckMsVUFDQWhyQyxLQUFBZ3JDLFFBQUE1OEIsYUFDQXBPLEtBQUFnckMsUUFBQSxNQUVBaHJDLEtBQUF1akIsUUFBQSxLQUNBdmpCLE1BTUEsSUFVQWdzQyxHQUNBQyxLQUFBLFdBRUEsSUFEQSxJQUFBdmdDLEtBQ0F3Z0MsRUFBQSxFQUFxQ0EsRUFackMsRUFZNERBLElBQUEsQ0FDNUQsSUFFQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFGQTVZLEVBQUEsSUFBQXRoQixhQWRBLFFBZUE3RyxFQUFBd2dDLEdBQUFyWSxFQUVBc1ksRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQSxFQUNBLFFBQUEvdUMsRUFBQSxFQUFnQ0EsRUFsQmhDLE9Ba0JrREEsSUFBQSxDQUNsRCxJQUFBZ3ZDLEVBQUEsRUFBQTluQyxLQUFBaTdCLFNBQUEsRUFDQXNNLEVBQUEsT0FBQUEsRUFBQSxTQUFBTyxFQUNBTixFQUFBLE9BQUFBLEVBQUEsU0FBQU0sRUFDQUwsRUFBQSxLQUFBQSxFQUFBLFFBQUFLLEVBQ0FKLEVBQUEsTUFBQUEsRUFBQSxTQUFBSSxFQUNBSCxFQUFBLElBQUFBLEVBQUEsU0FBQUcsRUFDQUYsR0FBQSxNQUFBQSxFQUFBLFFBQUFFLEVBQ0E3WSxFQUFBbjJCLEdBQUF5dUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQSxNQUFBQyxFQUNBN1ksRUFBQW4yQixJQUFBLElBRUErdUMsRUFBQSxRQUFBQyxHQUdBLE9BQUFoaEMsRUFyQkEsR0F1QkFpaEMsTUFBQSxXQUVBLElBREEsSUFBQWpoQyxLQUNBd2dDLEVBQUEsRUFBcUNBLEVBbkNyQyxFQW1DNERBLElBQUEsQ0FDNUQsSUFBQXJZLEVBQUEsSUFBQXRoQixhQXJDQSxRQXNDQTdHLEVBQUF3Z0MsR0FBQXJZLEVBRUEsSUFEQSxJQUFBK1ksRUFBQSxFQUNBbHZDLEVBQUEsRUFBZ0NBLEVBeENoQyxPQXdDa0RBLElBQUEsQ0FDbEQsSUFBQWd2QyxFQUFBLEVBQUE5bkMsS0FBQWk3QixTQUFBLEVBQ0FoTSxFQUFBbjJCLElBQUFrdkMsRUFBQSxJQUFBRixHQUFBLEtBQ0FFLEVBQUEvWSxFQUFBbjJCLEdBQ0FtMkIsRUFBQW4yQixJQUFBLEtBR0EsT0FBQWdPLEVBYkEsR0FlQWdoQyxNQUFBLFdBRUEsSUFEQSxJQUFBaGhDLEtBQ0F3Z0MsRUFBQSxFQUFxQ0EsRUFsRHJDLEVBa0Q0REEsSUFBQSxDQUM1RCxJQUFBclksRUFBQSxJQUFBdGhCLGFBcERBLFFBcURBN0csRUFBQXdnQyxHQUFBclksRUFDQSxRQUFBbjJCLEVBQUEsRUFBZ0NBLEVBdERoQyxPQXNEa0RBLElBQ2xEbTJCLEVBQUFuMkIsR0FBQSxFQUFBa0gsS0FBQWk3QixTQUFBLEVBR0EsT0FBQW4wQixFQVRBLElBa0JBb2dDLEtBRUEsU0FBQWUsSUFDQSxRQUFBNStCLEtBQUErOUIsRUFDQUYsRUFBQTc5QixJQUFBLElBQUFyTyxFQUFBbzBCLFFBQUFlLFVBQUFpWCxFQUFBLzlCLElBTUEsT0FGQXJPLEVBQUEyRyxXQUFBc21DLEdBQ0FqdEMsRUFBQWtHLFFBQUFjLEdBQUEsT0FBQWltQyxHQUNBanRDLEVBQUFnc0MsUUFFQS9yQyxFQUFBLFNBQUFELEdBb0ZBLE9BckVBQSxFQUFBa3RDLE9BQUEsV0FDQSxJQUFBaHFDLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FBQSxTQUFBMUQsRUFBQWt0QyxRQUNBbHRDLEVBQUF1akMsT0FBQXRsQyxLQUFBbUMsS0FBQThDLEdBTUE5QyxLQUFBMm1DLFdBQUEzbUMsS0FBQXlGLFFBQUFtaEMsa0JBS0E1bUMsS0FBQXNnQixNQUFBeGQsRUFBQXdkLE1BTUF0Z0IsS0FBQStzQyxTQUFBanFDLEVBQUFpcUMsU0FDQS9zQyxLQUFBd2pDLGNBQUF4akMsS0FBQTJtQyxhQUVBL21DLEVBQUE4RixPQUFBOUYsRUFBQWt0QyxPQUFBbHRDLEVBQUF1akMsUUFNQXZqQyxFQUFBa3RDLE9BQUF0cUMsVUFDQThkLE1BQUEsSUFDQXlzQixTQUFBLEtBT0FudEMsRUFBQWt0QyxPQUFBeHRDLFVBQUEwdEMsU0FBQSxXQUNBLE9BQUFwdEMsRUFBQWdQLFFBQUEsV0FFQSxJQUFBcStCLEVBQUEsSUFBQXJ0QyxFQUFBZ3NDLE1BQ0FzQixFQUFBLElBQUF0dEMsRUFBQWdzQyxNQUNBcFAsRUFBQSxJQUFBNThCLEVBQUErNkIsTUFDQXNTLEVBQUF6cEMsUUFBQWc1QixFQUFBdE8sTUFDQWdmLEVBQUExcEMsUUFBQWc1QixFQUFBck8sT0FDQSxJQUFBalAsR0FBQSxJQUFBdGYsRUFBQW1iLE1BQUEyWCxXQUNBOEosRUFBQWg1QixRQUFBMGIsR0FDQSt0QixFQUFBdC9CLE1BQUEsR0FDQXUvQixFQUFBdi9CLE1BQUEsR0FFQXVSLEVBQUEvWixLQUFBNFcsZUFBQSxLQUNBbUQsRUFBQS9aLEtBQUFpWSx3QkFBQSxFQUFBcGQsS0FBQStzQyxVQUVBN3RCLEVBQUEvWixLQUFBc1ksK0JBQUEsRUFBQXpkLEtBQUErc0MsU0FBQS9zQyxLQUFBc2dCLE1BQUF0Z0IsS0FBQStzQyxXQUNVN3RDLEtBQUFjLFdBQUFzZ0IsT0FBQXJULEtBQUEsU0FBQXZCLEdBRVYsT0FEQTFMLEtBQUEybUMsV0FBQWo3QixTQUFBbk4sTUFDQXlCLE1BQ1VkLEtBQUFjLFFBTVZKLEVBQUFrdEMsT0FBQXh0QyxVQUFBbUIsUUFBQSxXQUlBLE9BSEFiLEVBQUF1akMsT0FBQTdqQyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBMm1DLFdBQUF2NEIsYUFDQXBPLEtBQUEybUMsV0FBQSxLQUNBM21DLE1BRUFKLEVBQUFrdEMsU0FFQWp0QyxFQUFBLFNBQUFELEdBb0RBLE9BM0NBQSxFQUFBdXRDLHFCQUFBLFdBQ0EsSUFBQXJxQyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQUEsWUFBQTFELEVBQUFxbkMsZ0JBQ0FybkMsRUFBQWdtQyxhQUFBL25DLEtBQUFtQyxLQUFBOEMsR0FNQTlDLEtBQUFtbkMsU0FBQSxJQUFBdm5DLEVBQUFnQyxPQUFBa0IsRUFBQXFrQyxTQUFBdm5DLEVBQUE2TyxLQUFBZ00sYUFNQXphLEtBQUFvdEMsV0FBQSxJQUFBeHRDLEVBQUFtYixLQU1BL2EsS0FBQXF0QyxXQUFBLElBQUF6dEMsRUFBQW1iLEtBRUEvYSxLQUFBK2xDLGNBQUE1MEIsTUFBQW5SLEtBQUFvdEMsV0FBQXB0QyxLQUFBNmxDLGFBQ0E3bEMsS0FBQWdtQyxjQUFBNzBCLE1BQUFuUixLQUFBcXRDLFdBQUFydEMsS0FBQThsQyxhQUNBOWxDLEtBQUFtbkMsU0FBQS8xQixJQUFBcFIsS0FBQW90QyxXQUFBam9DLEtBQUFuRixLQUFBcXRDLFdBQUFsb0MsTUFDQW5GLEtBQUFrRSxXQUFBLGNBRUF0RSxFQUFBOEYsT0FBQTlGLEVBQUF1dEMscUJBQUF2dEMsRUFBQWdtQyxjQUtBaG1DLEVBQUF1dEMscUJBQUE3dEMsVUFBQW1CLFFBQUEsV0FTQSxPQVJBYixFQUFBZ21DLGFBQUF0bUMsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQW9FLFdBQUEsYUFDQXBFLEtBQUFtbkMsU0FBQTFtQyxVQUNBVCxLQUFBbW5DLFNBQUEsS0FDQW5uQyxLQUFBb3RDLFdBQUEzc0MsVUFDQVQsS0FBQW90QyxXQUFBLEtBQ0FwdEMsS0FBQXF0QyxXQUFBNXNDLFVBQ0FULEtBQUFxdEMsV0FBQSxLQUNBcnRDLE1BRUFKLEVBQUF1dEMsdUJBRUF0dEMsRUFBQSxTQUFBRCxHQTRGQSxPQTVFQUEsRUFBQTB0QyxjQUFBLFdBQ0EsSUFBQXhxQyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQUEsU0FBQTFELEVBQUEwdEMsZUFDQTF0QyxFQUFBaXBDLGNBQUFockMsS0FBQW1DLEtBQUE4QyxHQU1BOUMsS0FBQXV0QyxNQUFBLElBQUEzdEMsRUFBQWdDLE9BQUFrQixFQUFBeXFDLE1BQUEzdEMsRUFBQTZPLEtBQUFnTSxhQUNBemEsS0FBQWtFLFdBQUEsVUFNQWxFLEtBQUF3dEMsa0JBQUEsSUFBQTV0QyxFQUFBOGtCLFNBQUEsR0FNQTFrQixLQUFBeXRDLG1CQUFBLElBQUE3dEMsRUFBQThrQixTQUFBLEdBTUExa0IsS0FBQTB0QyxTQUFBLElBQUE5dEMsRUFBQThrQixTQUNBMWtCLEtBQUF3dEMsa0JBQUFocUMsUUFBQXhELEtBQUEwdEMsU0FBQSxLQUNBMXRDLEtBQUE4b0MsUUFBQTMzQixNQUFBblIsS0FBQTB0QyxTQUFBMXRDLEtBQUFncEMsV0FLQWhwQyxLQUFBMnRDLGVBQUEsSUFBQS90QyxFQUFBa2xCLFNBQ0E5a0IsS0FBQTJ0QyxlQUFBbnFDLFFBQUF4RCxLQUFBd3RDLG1CQUNBeHRDLEtBQUF5RixRQUFBeUgsWUFBQSxHQUFBMUosUUFBQXhELEtBQUEydEMsZUFBQSxLQUNBM3RDLEtBQUF1dEMsTUFBQS9wQyxRQUFBeEQsS0FBQTJ0QyxlQUFBLEtBTUEzdEMsS0FBQTR0QyxVQUFBLElBQUFodUMsRUFBQThrQixTQUNBMWtCLEtBQUF1dEMsTUFBQS9wQyxRQUFBeEQsS0FBQXl0QyxvQkFDQXp0QyxLQUFBeXRDLG1CQUFBanFDLFFBQUF4RCxLQUFBNHRDLFVBQUEsS0FDQTV0QyxLQUFBK29DLFNBQUE1M0IsTUFBQW5SLEtBQUE0dEMsVUFBQTV0QyxLQUFBaXBDLGFBRUFycEMsRUFBQThGLE9BQUE5RixFQUFBMHRDLGNBQUExdEMsRUFBQWlwQyxlQU1BanBDLEVBQUEwdEMsY0FBQTlxQyxVQUFvQytxQyxNQUFBLElBS3BDM3RDLEVBQUEwdEMsY0FBQWh1QyxVQUFBbUIsUUFBQSxXQWVBLE9BZEFiLEVBQUFpcEMsY0FBQXZwQyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBb0UsV0FBQSxVQUNBcEUsS0FBQXV0QyxNQUFBOXNDLFVBQ0FULEtBQUF1dEMsTUFBQSxLQUNBdnRDLEtBQUEwdEMsU0FBQWp0QyxVQUNBVCxLQUFBMHRDLFNBQUEsS0FDQTF0QyxLQUFBNHRDLFVBQUFudEMsVUFDQVQsS0FBQTR0QyxVQUFBLEtBQ0E1dEMsS0FBQXd0QyxrQkFBQS9zQyxVQUNBVCxLQUFBd3RDLGtCQUFBLEtBQ0F4dEMsS0FBQXl0QyxtQkFBQWh0QyxVQUNBVCxLQUFBeXRDLG1CQUFBLEtBQ0F6dEMsS0FBQTJ0QyxlQUFBbHRDLFVBQ0FULEtBQUEydEMsZUFBQSxLQUNBM3RDLE1BRUFKLEVBQUEwdEMsZ0JBRUF6dEMsRUFBQSxTQUFBRCxHQTRMQSxPQTVLQUEsRUFBQWl1QyxRQUFBLFdBQ0EsSUFBQS9xQyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsWUFDQSxTQUNBMUQsRUFBQWl1QyxTQUNBanVDLEVBQUFnbUMsYUFBQS9uQyxLQUFBbUMsS0FBQThDLEdBTUE5QyxLQUFBb21DLE1BQUEsSUFBQXhtQyxFQUFBazZCLEtBQ0ExQixNQUFBdDFCLEVBQUEwakMsT0FDQXRxQixJQUFBLEVBQ0F4TSxJQUFBLElBT0ExUCxLQUFBcW1DLE1BQUEsSUFBQXptQyxFQUFBazZCLEtBQ0ExQixNQUFBdDFCLEVBQUEwakMsT0FDQXRxQixJQUFBLEVBQ0F4TSxJQUFBLElBT0ExUCxLQUFBOHRDLFlBQUEsSUFBQWx1QyxFQUFBbWIsS0FNQS9hLEtBQUErdEMsWUFBQSxJQUFBbnVDLEVBQUFtYixLQU1BL2EsS0FBQW1aLFVBQUEsSUFBQXZaLEVBQUFnQyxPQUFBa0IsRUFBQXFXLFVBQUF2WixFQUFBNk8sS0FBQXNILFdBUUEvVixLQUFBNGpDLE1BQUEsSUFBQWhrQyxFQUFBZ0MsT0FBQWtCLEVBQUE4Z0MsTUFBQWhrQyxFQUFBNk8sS0FBQWdNLGFBQ0F6YSxLQUFBa0UsV0FDQSxZQUNBLFVBRUFsRSxLQUFBNmxDLFlBQUExMEIsTUFBQW5SLEtBQUE4dEMsWUFBQTl0QyxLQUFBK2xDLGVBQ0EvbEMsS0FBQThsQyxZQUFBMzBCLE1BQUFuUixLQUFBK3RDLFlBQUEvdEMsS0FBQWdtQyxlQUNBaG1DLEtBQUFvbUMsTUFBQTVpQyxRQUFBeEQsS0FBQTh0QyxZQUFBM29DLE1BQ0FuRixLQUFBcW1DLE1BQUE3aUMsUUFBQXhELEtBQUErdEMsWUFBQTVvQyxNQUNBbkYsS0FBQW1aLFVBQUEvSCxJQUFBcFIsS0FBQW9tQyxNQUFBanRCLFVBQUFuWixLQUFBcW1DLE1BQUFsdEIsV0FDQW5aLEtBQUE0akMsTUFBQXh5QixJQUFBcFIsS0FBQXFtQyxNQUFBdE0sVUFBQS81QixLQUFBb21DLE1BQUFyTSxXQUNBLzVCLEtBQUFpTyxLQUFBbkwsRUFBQW1MLEtBQ0FqTyxLQUFBd21DLE9BQUExakMsRUFBQTBqQyxRQUVBNW1DLEVBQUE4RixPQUFBOUYsRUFBQWl1QyxRQUFBanVDLEVBQUFnbUMsY0FNQWhtQyxFQUFBaXVDLFFBQUFyckMsVUFDQTJXLFVBQUEsR0FDQWxMLEtBQUEsT0FDQTIxQixNQUFBLEdBQ0E0QyxPQUFBLEtBT0E1bUMsRUFBQWl1QyxRQUFBdnVDLFVBQUFxTyxNQUFBLFNBQUF2RixHQUdBLE9BRkFwSSxLQUFBb21DLE1BQUF6NEIsTUFBQXZGLEdBQ0FwSSxLQUFBcW1DLE1BQUExNEIsTUFBQXZGLEdBQ0FwSSxNQU9BSixFQUFBaXVDLFFBQUF2dUMsVUFBQStmLEtBQUEsU0FBQWpYLEdBR0EsT0FGQXBJLEtBQUFvbUMsTUFBQS9tQixLQUFBalgsR0FDQXBJLEtBQUFxbUMsTUFBQWhuQixLQUFBalgsR0FDQXBJLE1BUUFKLEVBQUFpdUMsUUFBQXZ1QyxVQUFBOHpCLEtBQUEsU0FBQXlRLEdBSUEsT0FIQTdqQyxLQUFBb21DLE1BQUFoVCxLQUFBeVEsR0FDQTdqQyxLQUFBcW1DLE1BQUFqVCxLQUFBeVEsR0FDQWprQyxFQUFBbVYsVUFBQWlkLFdBQUFoeUIsS0FBQW1aLFdBQ0FuWixNQU1BSixFQUFBaXVDLFFBQUF2dUMsVUFBQWswQixPQUFBLFdBSUEsT0FIQXh6QixLQUFBb21DLE1BQUE1UyxTQUNBeHpCLEtBQUFxbUMsTUFBQTdTLFNBQ0E1ekIsRUFBQW1WLFVBQUFtZCxhQUFBbHlCLEtBQUFtWixXQUNBblosTUFRQTVCLE9BQUFDLGVBQUF1QixFQUFBaXVDLFFBQUF2dUMsVUFBQSxRQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFvbUMsTUFBQW40QixNQUVBdk4sSUFBQSxTQUFBdU4sR0FDQWpPLEtBQUFvbUMsTUFBQW40QixPQUNBak8sS0FBQXFtQyxNQUFBcDRCLFVBVUE3UCxPQUFBQyxlQUFBdUIsRUFBQWl1QyxRQUFBdnVDLFVBQUEsVUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBcW1DLE1BQUFqTyxNQUFBcDRCLEtBQUFvbUMsTUFBQWhPLE9BRUExM0IsSUFBQSxTQUFBOGxDLEdBQ0F4bUMsS0FBQW9tQyxNQUFBaE8sTUFBQSxHQUFBb08sRUFBQSxFQUNBeG1DLEtBQUFxbUMsTUFBQWpPLE1BQUFvTyxFQUFBLFFBT0E1bUMsRUFBQWl1QyxRQUFBdnVDLFVBQUFtQixRQUFBLFdBZ0JBLE9BZkFiLEVBQUFnbUMsYUFBQXRtQyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBb0UsV0FDQSxZQUNBLFVBRUFwRSxLQUFBb21DLE1BQUEzbEMsVUFDQVQsS0FBQW9tQyxNQUFBLEtBQ0FwbUMsS0FBQXFtQyxNQUFBNWxDLFVBQ0FULEtBQUFxbUMsTUFBQSxLQUNBcm1DLEtBQUE4dEMsWUFBQXJ0QyxVQUNBVCxLQUFBOHRDLFlBQUEsS0FDQTl0QyxLQUFBK3RDLFlBQUF0dEMsVUFDQVQsS0FBQSt0QyxZQUFBLEtBQ0EvdEMsS0FBQW1aLFVBQUEsS0FDQW5aLEtBQUE0akMsTUFBQSxLQUNBNWpDLE1BRUFKLEVBQUFpdUMsVUFFQWh1QyxFQUFBLFNBQUFELEdBZ0dBLE9BdEZBQSxFQUFBb3VDLFFBQUEsV0FDQSxJQUFBbHJDLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxZQUNBLFNBQ0ExRCxFQUFBb3VDLFNBQ0FwdUMsRUFBQXVqQyxPQUFBdGxDLEtBQUFtQyxLQUFBOEMsR0FNQTlDLEtBQUErbkIsV0FBQSxJQUFBbm9CLEVBQUErbkIsTUFBQSxFQUFBN2tCLEVBQUEra0IsVUFNQTduQixLQUFBMmpDLEtBQUEsSUFBQS9qQyxFQUFBazZCLEtBQ0E3ckIsS0FBQW5MLEVBQUFtTCxLQUNBaU8sSUFBQSxFQUNBeE0sSUFBQTVNLEVBQUEra0IsU0FDQTFPLFVBQUFyVyxFQUFBcVcsVUFDQWlmLE9BQUEsS0FDVXpxQixRQUFBbkssUUFBQXhELEtBQUErbkIsV0FBQUQsV0FNVjluQixLQUFBbVosVUFBQW5aLEtBQUEyakMsS0FBQXhxQixVQU1BblosS0FBQTRqQyxNQUFBNWpDLEtBQUEyakMsS0FBQTVKLFVBQ0EvNUIsS0FBQTRqQyxNQUFBamxDLE1BQUFtRSxFQUFBOGdDLE1BQ0E1akMsS0FBQWtFLFdBQ0EsWUFDQSxVQUVBbEUsS0FBQXNqQyxXQUFBbnlCLE1BQUFuUixLQUFBK25CLFdBQUEvbkIsS0FBQXVqQyxlQUVBM2pDLEVBQUE4RixPQUFBOUYsRUFBQW91QyxRQUFBcHVDLEVBQUF1akMsUUFNQXZqQyxFQUFBb3VDLFFBQUF4ckMsVUFDQXFsQixTQUFBLEtBQ0ExTyxVQUFBLEVBQ0F5cUIsTUFBQSxHQUNBMzFCLEtBQUEsUUFRQTdQLE9BQUFDLGVBQUF1QixFQUFBb3VDLFFBQUExdUMsVUFBQSxRQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUEyakMsS0FBQTExQixNQUVBdk4sSUFBQSxTQUFBdU4sR0FDQWpPLEtBQUEyakMsS0FBQTExQixVQU9Bck8sRUFBQW91QyxRQUFBMXVDLFVBQUFtQixRQUFBLFdBQ0FiLEVBQUF1akMsT0FBQTdqQyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBK25CLFdBQUF0bkIsVUFDQVQsS0FBQStuQixXQUFBLEtBQ0EvbkIsS0FBQTJqQyxLQUFBbGpDLFVBQ0FULEtBQUEyakMsS0FBQSxLQUNBM2pDLEtBQUFvRSxXQUNBLFlBQ0EsVUFFQXBFLEtBQUFtWixVQUFBLEtBQ0FuWixLQUFBNGpDLE1BQUEsTUFFQWhrQyxFQUFBb3VDLFVBRUFudUMsRUFBQSxTQUFBRCxHQW1aQSxPQTlYQUEsRUFBQXF1QyxNQUFBLFdBQ0EsSUFBQW5yQyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsV0FDQSxTQUNBMUQsRUFBQXF1QyxPQUNBcnVDLEVBQUEvQixLQUFBbUMsTUFNQUEsS0FBQWt0QixNQUFBcHFCLEVBQUE0SyxLQUtBMU4sS0FBQWlILFNBQUFuRSxFQUFBbUUsU0FPQWpILEtBQUFyQixNQUFBbUUsRUFBQW5FLE1BTUFxQixLQUFBK3ZCLFdBQUEvdkIsS0FBQTBULFFBQUE1USxFQUFBZ3VCLFdBTUE5d0IsS0FBQWd3QixTQUFBaHdCLEtBQUEwVCxRQUFBNVEsRUFBQWl1QixTQU1BL3dCLEtBQUE0ckIsT0FBQSxJQUFBaHNCLEVBQUF5ckIsY0FBQXpyQixFQUFBeUUsTUFBQUUsU0FPQXZFLEtBQUE2ckMsY0FBQSxFQU1BN3JDLEtBQUFrdUMsYUFBQSxFQU1BbHVDLEtBQUFtdUMsYUFBQXJyQyxFQUFBbzlCLFlBT0FsZ0MsS0FBQW91QyxVQUFBdHJDLEVBQUF1ckMsU0FNQXJ1QyxLQUFBdXlCLEtBQUF6dkIsRUFBQXl2QixLQUVBdnlCLEtBQUFrckMsYUFBQXBvQyxFQUFBb29DLGNBRUF0ckMsRUFBQThGLE9BQUE5RixFQUFBcXVDLE9BTUFydUMsRUFBQXF1QyxNQUFBenJDLFVBQ0F5RSxTQUFBckgsRUFBQXFFLEtBQ0F5SixNQUFBLEVBQ0FxakIsUUFBQSxLQUNBRCxVQUFBLEVBQ0FvYSxhQUFBLEVBQ0F2c0MsTUFBQSxLQUNBdWhDLFlBQUEsRUFDQTNOLE1BQUEsRUFDQThiLFVBQUEsR0FTQXp1QyxFQUFBcXVDLE1BQUEzdUMsVUFBQWd2QyxrQkFBQSxTQUFBdGxDLEdBK0JBLE9BN0JBQSxFQUFBcEosRUFBQW1ELFdBQUFpRyxHQUFBLEdBQ0FoSixLQUFBNHJCLE9BQUEzaEIsWUFBQWpCLEVBQUEsU0FBQWhDLEdBQ0EsSUFBQTZXLEVBQ0EsR0FBQTdXLEVBQUFnRyxRQUFBcE4sRUFBQXlFLE1BQUFDLFFBQUEsQ0FDQTFFLEVBQUEwQyxVQUFBMEUsRUFBQStHLEtBQ0FuTyxFQUFBbVYsVUFBQXNhLE1BQUFyb0IsRUFBQStHLElBRUEsSUFBQXdnQyxFQUFBdm5DLEVBQUFvQixLQUFBeEQsS0FBQW9TLE1BQUFoWCxLQUFBc3pCLFlBQUF0ekIsS0FBQTZyQyxlQUNBLEdBQUE3ckMsS0FBQWt0QixNQUFBLENBQ0FyUCxFQUFBM1YsSUFDQXRJLEVBQUE4RCxTQUFBMUQsS0FBQWt0QixTQUNBclAsRUFBQTdkLEtBQUFrdEIsTUFBQWx0QixLQUFBd3VDLG9CQUVBLElBQUFqbEMsRUFBQXZKLEtBQUE0ckIsT0FBQS9pQixTQUFBMGxDLEdBQ0EsT0FBQWhsQyxJQUNBc1UsRUFBQWpaLEtBQUFzWCxJQUFBMkIsRUFBQXRVLEVBQUFuQixLQUFBbW1DLElBRUExd0IsSUFBQTNWLE1BRUFsSSxLQUFBNHJCLE9BQUFKLGVBQUE1ckIsRUFBQXlFLE1BQUFFLFFBQUFncUMsRUFBQTF3QixFQUFBLEdBQ0FBLEVBQUFqZSxFQUFBNGEsTUFBQXFELElBRUEsSUFBQXRZLEVBQUEzRixFQUFBNGEsTUFBQXhhLEtBQUF3dUMsb0JBQ0F4bkMsRUFBQStHLEdBQUFuTyxFQUFBbVYsVUFBQXNjLGVBQUFyeEIsS0FBQXl1QyxNQUFBdnZDLEtBQUFjLE1BQUF1RixFQUFBM0YsRUFBQTRhLE1BQUErekIsR0FBQTF3QixRQUVBN1csRUFBQStHLEdBQUFuTyxFQUFBbVYsVUFBQW9jLFNBQUFueEIsS0FBQXl1QyxNQUFBdnZDLEtBQUFjLE1BQUFKLEVBQUE0YSxNQUFBK3pCLE1BR1VydkMsS0FBQWMsT0FDVkEsTUFTQTVCLE9BQUFDLGVBQUF1QixFQUFBcXVDLE1BQUEzdUMsVUFBQSxTQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUE0ckIsT0FBQWhRLGVBQUFoYyxFQUFBbVYsVUFBQVMsVUFVQXBYLE9BQUFDLGVBQUF1QixFQUFBcXVDLE1BQUEzdUMsVUFBQSxlQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFrdUMsY0FFQXh0QyxJQUFBLFNBQUEwZSxHQUNBcGYsS0FBQWt1QyxhQUFBOXVCLEtBU0FoaEIsT0FBQUMsZUFBQXVCLEVBQUFxdUMsTUFBQTN1QyxVQUFBLGVBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQW11QyxjQUVBenRDLElBQUEsU0FBQWd1QyxHQUNBMXVDLEtBQUFtdUMsYUFBQU8sS0FZQXR3QyxPQUFBQyxlQUFBdUIsRUFBQXF1QyxNQUFBM3VDLFVBQUEsWUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBb3VDLFdBRUExdEMsSUFBQSxTQUFBaXVDLEdBQ0EzdUMsS0FBQW91QyxVQUFBTyxLQVFBL3VDLEVBQUFxdUMsTUFBQTN1QyxVQUFBcU8sTUFBQSxTQUFBdkYsR0FVQSxPQVRBQSxFQUFBcEksS0FBQTBULFFBQUF0TCxHQUNBcEksS0FBQTRyQixPQUFBaFEsZUFBQXhULEtBQUF4SSxFQUFBeUUsTUFBQUUsVUFDQXZFLEtBQUE0ckIsT0FBQXpqQixLQUNBNkUsTUFBQXBOLEVBQUF5RSxNQUFBQyxRQUNBOEQsT0FDQTJGLFFBQUFwTyxJQUVBSyxLQUFBc3VDLGtCQUFBbG1DLElBRUFwSSxNQU9BSixFQUFBcXVDLE1BQUEzdUMsVUFBQStmLEtBQUEsU0FBQWpYLEdBR0EsR0FGQXBJLEtBQUErSSxPQUFBWCxHQUNBQSxFQUFBcEksS0FBQTBULFFBQUF0TCxHQUNBcEksS0FBQTRyQixPQUFBaFEsZUFBQXhULEtBQUF4SSxFQUFBeUUsTUFBQUMsUUFBQSxDQUNBdEUsS0FBQTRyQixPQUFBSixlQUFBNXJCLEVBQUF5RSxNQUFBRSxRQUFBNkQsR0FDQSxJQUFBYyxFQUFBbEosS0FBQTRyQixPQUFBOWlCLFVBQUFWLEdBQ0F3bUMsRUFBQXhtQyxFQUNBLE9BQUFjLElBQ0EwbEMsRUFBQTFsQyxFQUFBZCxNQUVBcEksS0FBQXN1QyxrQkFBQU0sR0FFQSxPQUFBNXVDLE1BT0FKLEVBQUFxdUMsTUFBQTN1QyxVQUFBeUosT0FBQSxTQUFBWCxHQU9BLE9BTkFBLEVBQUF4SSxFQUFBbUQsV0FBQXFGLEdBQUEsS0FDQUEsRUFBQXBJLEtBQUEwVCxRQUFBdEwsR0FDQXBJLEtBQUE0ckIsT0FBQTNoQixZQUFBN0IsRUFBQSxTQUFBcEIsR0FDQXBILEVBQUFtVixVQUFBc2EsTUFBQXJvQixFQUFBK0csTUFFQS9OLEtBQUE0ckIsT0FBQTdpQixPQUFBWCxHQUNBcEksTUFRQUosRUFBQXF1QyxNQUFBM3VDLFVBQUFtdkMsTUFBQSxTQUFBcm1DLEdBQ0EsSUFBQW9OLEVBQUE1VixFQUFBbVYsVUFBQXlWLGVBQUFwaUIsR0FDQSxJQUFBcEksS0FBQXV5QixNQUFBdnlCLEtBQUE0ckIsT0FBQWhRLGVBQUFwRyxLQUFBNVYsRUFBQXlFLE1BQUFDLFFBQUEsQ0FDQSxHQUFBdEUsS0FBQWtnQyxZQUFBLEdBQUF0N0IsS0FBQWk3QixTQUFBNy9CLEtBQUFrZ0MsWUFDQSxPQUVBLEdBQUFsZ0MsS0FBQXF1QyxTQUFBLENBQ0EsSUFBQU0sRUFBQSxJQUNBL3VDLEVBQUFnRSxVQUFBNUQsS0FBQXF1QyxZQUNBTSxFQUFBM3VDLEtBQUF5VCxVQUFBelQsS0FBQXF1QyxXQUVBam1DLElBQUEsRUFBQXhELEtBQUFpN0IsU0FBQSxHQUFBOE8sRUFFQTN1QyxLQUFBaUgsU0FBQW1CLEVBQUFwSSxLQUFBckIsU0FRQWlCLEVBQUFxdUMsTUFBQTN1QyxVQUFBa3ZDLGlCQUFBLFdBQ0EsT0FBQTVwQyxLQUFBb1MsT0FBQWhYLEtBQUFnd0IsU0FBQWh3QixLQUFBK3ZCLFlBQUEvdkIsS0FBQTZyQyxnQkFZQXp0QyxPQUFBQyxlQUFBdUIsRUFBQXF1QyxNQUFBM3VDLFVBQUEsUUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBa3RCLE9BRUF4c0IsSUFBQSxTQUFBZ04sR0FDQTFOLEtBQUFrdEIsTUFBQXhmLEVBQ0ExTixLQUFBc3VDLHVCQWFBbHdDLE9BQUFDLGVBQUF1QixFQUFBcXVDLE1BQUEzdUMsVUFBQSxnQkFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBNnJDLGVBRUFuckMsSUFBQSxTQUFBcXJDLEdBQ0EvckMsS0FBQTZyQyxjQUFBRSxFQUNBL3JDLEtBQUFzdUMsdUJBVUFsd0MsT0FBQUMsZUFBQXVCLEVBQUFxdUMsTUFBQTN1QyxVQUFBLFdBQ0FmLElBQUEsV0FDQSxPQUFBcUIsRUFBQTRhLE1BQUF4YSxLQUFBZ3dCLFVBQUF2YyxhQUVBL1MsSUFBQSxTQUFBcXdCLEdBQ0Evd0IsS0FBQWd3QixTQUFBaHdCLEtBQUEwVCxRQUFBcWQsR0FDQS93QixLQUFBa3RCLE9BQ0FsdEIsS0FBQXN1Qyx1QkFVQWx3QyxPQUFBQyxlQUFBdUIsRUFBQXF1QyxNQUFBM3VDLFVBQUEsYUFDQWYsSUFBQSxXQUNBLE9BQUFxQixFQUFBNGEsTUFBQXhhLEtBQUErdkIsWUFBQXRjLGFBRUEvUyxJQUFBLFNBQUFvd0IsR0FDQTl3QixLQUFBK3ZCLFdBQUEvdkIsS0FBQTBULFFBQUFvZCxHQUNBOXdCLEtBQUFrdEIsT0FDQWx0QixLQUFBc3VDLHVCQWFBbHdDLE9BQUFDLGVBQUF1QixFQUFBcXVDLE1BQUEzdUMsVUFBQSxZQUNBZixJQUFBLFdBQ0EsR0FBQXlCLEtBQUFrdEIsTUFBQSxDQUNBLElBQUExWCxFQUFBNVYsRUFBQW1WLFVBQUFTLE1BQ0FxNUIsRUFBQTd1QyxLQUFBNHJCLE9BQUFydEIsSUFBQWlYLEdBQ0EsVUFBQXE1QixLQUFBN2hDLFFBQUFwTixFQUFBeUUsTUFBQUMsUUFBQSxDQUNBLElBQUF3cUMsRUFBQTl1QyxLQUFBd3VDLG1CQUVBLE9BREFoNUIsRUFBQXE1QixFQUFBem1DLE1BQUEwbUMsRUFDQUEsRUFFQSxTQUdBLFlBUUFsdkMsRUFBQXF1QyxNQUFBM3VDLFVBQUFtQixRQUFBLFdBQ0FULEtBQUErSSxTQUNBL0ksS0FBQTRyQixPQUFBbnJCLFVBQ0FULEtBQUE0ckIsT0FBQSxLQUNBNXJCLEtBQUFpSCxTQUFBLEtBQ0FqSCxLQUFBckIsTUFBQSxNQUVBaUIsRUFBQXF1QyxRQUVBcHVDLEVBQUEsU0FBQUQsR0E2TkEsT0E3TUFBLEVBQUFtdkMsS0FBQSxXQUNBLElBQUFqc0MsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLFdBQ0EsWUFDQTFELEVBQUFtdkMsTUFDQW52QyxFQUFBL0IsS0FBQW1DLE1BSUFBLEtBQUFndkMsT0FBQSxJQUFBcHZDLEVBQUFxdUMsT0FDQWhuQyxTQUFBakgsS0FBQXl1QyxNQUFBdnZDLEtBQUFjLE1BQ0EwTixNQUFBLEVBQ0FxakIsUUFBQWp1QixFQUFBeUMsU0FDQTJsQyxhQUFBcG9DLEVBQUFvb0MsYUFDQWhMLFlBQUFwOUIsRUFBQW85QixjQU1BbGdDLEtBQUFpSCxTQUFBbkUsRUFBQW1FLFNBRUFqSCxLQUFBaXZDLFdBQUFuc0MsRUFBQW1zQyxZQUVBcnZDLEVBQUE4RixPQUFBOUYsRUFBQW12QyxNQU1BbnZDLEVBQUFtdkMsS0FBQXZzQyxVQUNBK0MsU0FBQSxLQUNBMEIsU0FBQXJILEVBQUFxRSxLQUNBaW5DLGFBQUEsRUFDQStELFdBQUEvbUMsSUFDQWc0QixhQUFBLEVBQ0EzTixNQUFBLEdBUUEzeUIsRUFBQW12QyxLQUFBenZDLFVBQUFxTyxNQUFBLFNBQUF2RixHQUVBLE9BREFwSSxLQUFBZ3ZDLE9BQUFyaEMsTUFBQXZGLEdBQ0FwSSxNQU9BSixFQUFBbXZDLEtBQUF6dkMsVUFBQStmLEtBQUEsU0FBQWpYLEdBRUEsT0FEQXBJLEtBQUFndkMsT0FBQTN2QixLQUFBalgsR0FDQXBJLE1BT0FKLEVBQUFtdkMsS0FBQXp2QyxVQUFBeUosT0FBQSxTQUFBWCxHQUVBLE9BREFwSSxLQUFBZ3ZDLE9BQUFqbUMsT0FBQVgsR0FDQXBJLE1BT0FKLEVBQUFtdkMsS0FBQXp2QyxVQUFBbXZDLE1BQUEsU0FBQXJtQyxHQUNBcEksS0FBQWlILFNBQUFtQixJQVNBaEssT0FBQUMsZUFBQXVCLEVBQUFtdkMsS0FBQXp2QyxVQUFBLFNBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQWd2QyxPQUFBaGlDLFNBV0E1TyxPQUFBQyxlQUFBdUIsRUFBQW12QyxLQUFBenZDLFVBQUEsWUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBZ3ZDLE9BQUEvZCxZQVdBN3lCLE9BQUFDLGVBQUF1QixFQUFBbXZDLEtBQUF6dkMsVUFBQSxZQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFndkMsT0FBQWplLFNBRUFyd0IsSUFBQSxTQUFBNkUsR0FDQXZGLEtBQUFndkMsT0FBQWplLFFBQUF4ckIsS0FVQW5ILE9BQUFDLGVBQUF1QixFQUFBbXZDLEtBQUF6dkMsVUFBQSxnQkFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBZ3ZDLE9BQUE5RCxjQUVBeHFDLElBQUEsU0FBQXFyQyxHQUNBL3JDLEtBQUFndkMsT0FBQTlELGFBQUFhLEtBVUEzdEMsT0FBQUMsZUFBQXVCLEVBQUFtdkMsS0FBQXp2QyxVQUFBLFlBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQWd2QyxPQUFBWCxVQUVBM3RDLElBQUEsU0FBQWl1QyxHQUNBM3VDLEtBQUFndkMsT0FBQVgsU0FBQU0sS0FTQXZ3QyxPQUFBQyxlQUFBdUIsRUFBQW12QyxLQUFBenZDLFVBQUEsZUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBZ3ZDLE9BQUE5TyxhQUVBeC9CLElBQUEsU0FBQWd1QyxHQUNBMXVDLEtBQUFndkMsT0FBQTlPLFlBQUF3TyxLQVNBdHdDLE9BQUFDLGVBQUF1QixFQUFBbXZDLEtBQUF6dkMsVUFBQSxRQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFndkMsT0FBQXpjLE1BRUE3eEIsSUFBQSxTQUFBNnhCLEdBQ0F2eUIsS0FBQWd2QyxPQUFBemMsVUFVQW4wQixPQUFBQyxlQUFBdUIsRUFBQW12QyxLQUFBenZDLFVBQUEsY0FDQWYsSUFBQSxXQUNBLFdBQUF5QixLQUFBZ3ZDLE9BQUF0aEMsS0FDQXhGLElBRUFsSSxLQUFBZ3ZDLE9BQUF0aEMsTUFHQWhOLElBQUEsU0FBQXd1QyxHQUVBbHZDLEtBQUFndkMsT0FBQXRoQyxLQURBd2hDLElBQUFobkMsS0FHQWduQyxLQVFBdHZDLEVBQUFtdkMsS0FBQXp2QyxVQUFBbUIsUUFBQSxXQUNBVCxLQUFBZ3ZDLE9BQUF2dUMsVUFDQVQsS0FBQWd2QyxPQUFBLEtBQ0FodkMsS0FBQWlILFNBQUEsTUFFQXJILEVBQUFtdkMsT0FFQWx2QyxFQUFBLFNBQUFELEdBd2VBLE9BaGRBQSxFQUFBdXZDLEtBQUEsV0FDQSxJQUFBcnNDLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxXQUNBLFVBQ0ExRCxFQUFBdXZDLE1BQ0F2dkMsRUFBQXF1QyxNQUFBcHdDLEtBQUFtQyxLQUFBOEMsR0FNQTlDLEtBQUErRyxXQUVBLFFBQUFySixFQUFBLEVBQXdCQSxFQUFBb0YsRUFBQW9FLE9BQUE1RixPQUEyQjVELElBQ25Eb0csTUFBQUQsUUFBQWYsRUFBQW9FLE9BQUF4SixJQUNBc0MsS0FBQW1JLElBQUFyRixFQUFBb0UsT0FBQXhKLEdBQUEsR0FBQW9GLEVBQUFvRSxPQUFBeEosR0FBQSxJQUVBc0MsS0FBQW1JLElBQUFyRixFQUFBb0UsT0FBQXhKLEtBSUFrQyxFQUFBOEYsT0FBQTlGLEVBQUF1dkMsS0FBQXZ2QyxFQUFBcXVDLE9BTUFydUMsRUFBQXV2QyxLQUFBM3NDLFVBQ0F5RSxTQUFBckgsRUFBQXFFLEtBQ0F5SixNQUFBLEVBQ0FxakIsUUFBQSxLQUNBRCxVQUFBLEVBQ0FvYSxhQUFBLEVBQ0FoTCxZQUFBLEVBQ0FtTyxVQUFBLEVBQ0E5YixNQUFBLEVBQ0FyckIsV0FTQXRILEVBQUF1dkMsS0FBQTd2QyxVQUFBcU8sTUFBQSxTQUFBdkYsRUFBQWdYLEdBQ0EsSUFBQTVKLEVBQUF4VixLQUFBMFQsUUFBQXRMLEdBaUJBLE9BaEJBcEksS0FBQTRyQixPQUFBaFEsZUFBQXBHLEtBQUE1VixFQUFBeUUsTUFBQUMsVUFFQThhLEVBREFwZixLQUFBa3RCLE1BQ0F0dEIsRUFBQW1ELFdBQUFxYyxFQUFBcGYsS0FBQSt2QixZQUVBbndCLEVBQUFtRCxXQUFBcWMsRUFBQSxHQUVBQSxFQUFBcGYsS0FBQTBULFFBQUEwTCxHQUNBcGYsS0FBQTRyQixPQUFBempCLEtBQ0E2RSxNQUFBcE4sRUFBQXlFLE1BQUFDLFFBQ0E4RCxLQUFBb04sRUFDQTRKLFdBRUFwZixLQUFBb3ZDLFNBQUEsU0FBQXBvQyxHQUNBaEgsS0FBQXF2QyxXQUFBcm9DLEVBQUF3TyxFQUFBNEosTUFHQXBmLE1BVUFKLEVBQUF1dkMsS0FBQTd2QyxVQUFBK3ZDLFdBQUEsU0FBQXJvQyxFQUFBd08sRUFBQTRKLEdBQ0E1SixHQUFBNEosRUFDQXBmLEtBQUFrdEIsTUFDQWxtQixFQUFBc3NCLGFBQUF0ekIsS0FBQSt2QixZQUFBL29CLEVBQUFzc0IsWUFBQXR6QixLQUFBZ3dCLFVBQ0FocEIsRUFBQXNzQixZQUFBbFUsSUFFQTVKLEdBQUF4VixLQUFBd3VDLG9CQUVBeG5DLEVBQUEyRyxNQUFBL04sRUFBQTRhLE1BQUFoRixLQUNjeE8sRUFBQXNzQixZQUFBdHpCLEtBQUErdkIsWUFBQS9vQixFQUFBc3NCLGFBQUFsVSxJQUNkcFksRUFBQTBHLE1BQUEsRUFDQTFHLEVBQUEyRyxNQUFBL04sRUFBQTRhLE1BQUFoRixLQUVVeE8sRUFBQXNzQixhQUFBbFUsR0FDVnBZLEVBQUEyRyxNQUFBL04sRUFBQTRhLE1BQUFoRixLQVVBcFgsT0FBQUMsZUFBQXVCLEVBQUF1dkMsS0FBQTd2QyxVQUFBLGVBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQWt1QyxjQUVBeHRDLElBQUEsU0FBQTBlLEdBQ0FwZixLQUFBa3VDLGFBQUE5dUIsRUFDQXBmLEtBQUFvdkMsU0FBQSxTQUFBcG9DLEdBQ0FBLEVBQUFzc0IsYUFBQXR6QixLQUFBa3VDLGtCQVNBdHVDLEVBQUF1dkMsS0FBQTd2QyxVQUFBK2YsS0FBQSxTQUFBalgsR0FDQSxJQUFBb04sRUFBQXhWLEtBQUEwVCxRQUFBdEwsR0FNQSxPQUxBcEksS0FBQTRyQixPQUFBN2lCLE9BQUF5TSxHQUNBeFYsS0FBQTRyQixPQUFBSixlQUFBNXJCLEVBQUF5RSxNQUFBRSxRQUFBaVIsR0FDQXhWLEtBQUFvdkMsU0FBQSxTQUFBcG9DLEdBQ0FBLEVBQUFxWSxLQUFBalgsS0FFQXBJLE1Ba0JBSixFQUFBdXZDLEtBQUE3dkMsVUFBQWd3QyxHQUFBLFNBQUFsbkMsRUFBQXpKLEdBQ0F5SixFQUFBeEksRUFBQTBhLGNBQUFsUyxHQUVBLElBREEsSUFBQTRvQixFQUFBcHhCLEVBQUE0YSxNQUFBLEdBQUEvRyxZQUNBL1YsRUFBQSxFQUF3QkEsRUFBQXNDLEtBQUErRyxRQUFBekYsT0FBeUI1RCxJQUFBLENBQ2pELElBQUFzSixFQUFBaEgsS0FBQStHLFFBQUFySixHQUNBLEdBQUFrSCxLQUFBc1YsSUFBQTlSLEVBQUFzTCxVQUFBMU0sRUFBQXNzQixhQUFBdEMsRUFJQSxPQUhBcHhCLEVBQUEwQyxVQUFBM0QsS0FDQXFJLEVBQUFySSxTQUVBcUksRUFJQSxPQUFBcEgsRUFBQTBDLFVBQUEzRCxJQUNBcUIsS0FBQW1JLElBQUFDLEVBQUF6SixHQUVBcUIsS0FBQStHLFFBQUEvRyxLQUFBK0csUUFBQXpGLE9BQUEsSUFFQSxNQWNBMUIsRUFBQXV2QyxLQUFBN3ZDLFVBQUE2SSxJQUFBLFNBQUFDLEVBQUF6SixHQU9BLElBQUFxSSxFQXdCQSxPQTdCQW9CLEVBQUE3SSxlQUFBLFVBRUE2SSxHQURBekosRUFBQXlKLEdBQ0FBLE1BRUFBLEVBQUFwSSxLQUFBMFQsUUFBQXRMLEdBRUF6SixhQUFBaUIsRUFBQXF1QyxPQUNBam5DLEVBQUFySSxHQUNBc0ksU0FBQWpILEtBQUF5dUMsTUFBQXZ2QyxLQUFBYyxNQUVBZ0gsRUFBQSxJQUFBcEgsRUFBQXF1QyxPQUNBaG5DLFNBQUFqSCxLQUFBeXVDLE1BQUF2dkMsS0FBQWMsTUFDQXJCLFVBSUFxSSxFQUFBc3NCLFlBQUFsckIsRUFFQXBCLEVBQUF0RyxLQUNBcXdCLFFBQUEvd0IsS0FBQSt3QixRQUNBRCxVQUFBOXdCLEtBQUE4d0IsVUFDQXBqQixLQUFBMU4sS0FBQTBOLEtBQ0EyZ0MsU0FBQXJ1QyxLQUFBcXVDLFNBQ0FuRCxhQUFBbHJDLEtBQUFrckMsYUFDQWhMLFlBQUFsZ0MsS0FBQWtnQyxjQUVBbGdDLEtBQUErRyxRQUFBbkUsS0FBQW9FLEdBRUFoSCxLQUFBdXZDLGNBQUF2b0MsR0FDQWhILE1BT0FKLEVBQUF1dkMsS0FBQTd2QyxVQUFBaXdDLGNBQUEsU0FBQXZvQyxHQUNBaEgsS0FBQTRyQixPQUFBamlCLFFBQUEsU0FBQTBwQixHQUNBQSxFQUFBcm1CLFFBQUFwTixFQUFBeUUsTUFBQUMsUUFDQXRFLEtBQUFxdkMsV0FBQXJvQyxFQUFBcXNCLEVBQUFqckIsS0FBQWlyQixFQUFBalUsUUFHQXBZLEVBQUFxWSxLQUFBemYsRUFBQTRhLE1BQUE2WSxFQUFBanJCLFFBRVVsSixLQUFBYyxRQVNWSixFQUFBdXZDLEtBQUE3dkMsVUFBQW1KLE9BQUEsU0FBQUwsRUFBQXpKLEdBRUF5SixFQUFBN0ksZUFBQSxVQUVBNkksR0FEQXpKLEVBQUF5SixHQUNBQSxNQUVBQSxFQUFBcEksS0FBQTBULFFBQUF0TCxHQUNBLFFBQUExSyxFQUFBc0MsS0FBQStHLFFBQUF6RixPQUFBLEVBQThDNUQsR0FBQSxFQUFRQSxJQUFBLENBQ3RELElBQUFzSixFQUFBaEgsS0FBQStHLFFBQUFySixHQUNBc0osYUFBQXBILEVBQUF1dkMsS0FDQW5vQyxFQUFBeUIsT0FBQUwsRUFBQXpKLEdBQ2NxSSxFQUFBc3NCLGNBQUFsckIsSUFDZHhJLEVBQUErQixRQUFBaEQsSUFBQWlCLEVBQUEwQyxVQUFBM0QsSUFBQXFJLEVBQUFySSxhQUNBcUIsS0FBQStHLFFBQUF4RixPQUFBN0QsRUFBQSxHQUNBc0osRUFBQXZHLFdBSUEsT0FBQVQsTUFNQUosRUFBQXV2QyxLQUFBN3ZDLFVBQUFrd0MsVUFBQSxXQUtBLE9BSkF4dkMsS0FBQW92QyxTQUFBLFNBQUFwb0MsR0FDQUEsRUFBQXZHLFlBRUFULEtBQUErRyxXQUNBL0csTUFPQUosRUFBQXV2QyxLQUFBN3ZDLFVBQUF5SixPQUFBLFNBQUFDLEdBS0EsT0FKQWhKLEtBQUFvdkMsU0FBQSxTQUFBcG9DLEdBQ0FBLEVBQUErQixPQUFBQyxLQUVBaEosS0FBQTRyQixPQUFBN2lCLE9BQUEvSSxLQUFBMFQsUUFBQTFLLElBQ0FoSixNQVFBSixFQUFBdXZDLEtBQUE3dkMsVUFBQTh2QyxTQUFBLFNBQUFub0MsRUFBQWhCLEdBQ0EsR0FBQWpHLEtBQUErRyxRQUFBLENBQ0FkLEVBQUFyRyxFQUFBbUQsV0FBQWtELEVBQUFqRyxNQUNBLFFBQUF0QyxFQUFBc0MsS0FBQStHLFFBQUF6RixPQUFBLEVBQWtENUQsR0FBQSxFQUFRQSxJQUFBLENBQzFELElBQUFpTixFQUFBM0ssS0FBQStHLFFBQUFySixHQUNBaU4sYUFBQS9LLEVBQUF1dkMsS0FDQXhrQyxFQUFBeWtDLFNBQUFub0MsRUFBQWhCLEdBRUFnQixFQUFBcEosS0FBQW9JLEVBQUEwRSxJQUlBLE9BQUEzSyxNQVFBSixFQUFBdXZDLEtBQUE3dkMsVUFBQW13QyxRQUFBLFNBQUF4dUMsRUFBQXRDLEdBQ0FxQixLQUFBb3ZDLFNBQUEsU0FBQXBvQyxHQUNBQSxFQUFBL0YsR0FBQXRDLEtBUUFpQixFQUFBdXZDLEtBQUE3dkMsVUFBQW12QyxNQUFBLFNBQUFybUMsRUFBQXpKLEdBQ0FxQixLQUFBdXlCLE1BQ0F2eUIsS0FBQWlILFNBQUFtQixFQUFBekosSUFTQWlCLEVBQUF1dkMsS0FBQTd2QyxVQUFBb3dDLG1CQUFBLFNBQUExb0MsR0FDQUEsRUFBQXNzQixZQUFBdHpCLEtBQUErdkIsWUFBQS9vQixFQUFBc3NCLGFBQUF0ekIsS0FBQWd3QixTQUNBaHBCLEVBQUErQixPQUFBLEdBQ1UvQixFQUFBZ0csUUFBQXBOLEVBQUF5RSxNQUFBRSxTQUVWdkUsS0FBQXV2QyxjQUFBdm9DLElBU0E1SSxPQUFBQyxlQUFBdUIsRUFBQXV2QyxLQUFBN3ZDLFVBQUEsZUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBbXVDLGNBRUF6dEMsSUFBQSxTQUFBZ3VDLEdBQ0ExdUMsS0FBQW11QyxhQUFBTyxFQUNBMXVDLEtBQUF5dkMsUUFBQSxjQUFBZixNQVlBdHdDLE9BQUFDLGVBQUF1QixFQUFBdXZDLEtBQUE3dkMsVUFBQSxZQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFvdUMsV0FFQTF0QyxJQUFBLFNBQUFpdUMsR0FDQTN1QyxLQUFBb3VDLFVBQUFPLEVBQ0EzdUMsS0FBQXl2QyxRQUFBLFdBQUFkLE1BZ0JBdndDLE9BQUFDLGVBQUF1QixFQUFBdXZDLEtBQUE3dkMsVUFBQSxRQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFrdEIsT0FFQXhzQixJQUFBLFNBQUFnTixHQUNBMU4sS0FBQWt0QixNQUFBeGYsRUFDQTFOLEtBQUFvdkMsU0FBQSxTQUFBcG9DLEdBQ0FBLEVBQUErb0IsV0FBQS92QixLQUFBK3ZCLFdBQ0Evb0IsRUFBQWdwQixTQUFBaHdCLEtBQUFnd0IsU0FDQWhwQixFQUFBMEcsT0FDQTFOLEtBQUEwdkMsbUJBQUExb0MsUUFXQTVJLE9BQUFDLGVBQUF1QixFQUFBdXZDLEtBQUE3dkMsVUFBQSxXQUNBZixJQUFBLFdBQ0EsT0FBQXFCLEVBQUE0YSxNQUFBeGEsS0FBQWd3QixVQUFBdmMsYUFFQS9TLElBQUEsU0FBQXF3QixHQUNBL3dCLEtBQUFnd0IsU0FBQWh3QixLQUFBMFQsUUFBQXFkLEdBQ0Evd0IsS0FBQWt0QixPQUNBbHRCLEtBQUFvdkMsU0FBQSxTQUFBcG9DLEdBQ0FBLEVBQUErcEIsVUFDQS93QixLQUFBMHZDLG1CQUFBMW9DLFFBWUE1SSxPQUFBQyxlQUFBdUIsRUFBQXV2QyxLQUFBN3ZDLFVBQUEsYUFDQWYsSUFBQSxXQUNBLE9BQUFxQixFQUFBNGEsTUFBQXhhLEtBQUErdkIsWUFBQXRjLGFBRUEvUyxJQUFBLFNBQUFvd0IsR0FDQTl3QixLQUFBK3ZCLFdBQUEvdkIsS0FBQTBULFFBQUFvZCxHQUNBOXdCLEtBQUFrdEIsT0FDQWx0QixLQUFBb3ZDLFNBQUEsU0FBQXBvQyxHQUNBQSxFQUFBOHBCLFVBQUE5d0IsS0FBQTh3QixVQUNBOXdCLEtBQUEwdkMsbUJBQUExb0MsUUFXQTVJLE9BQUFDLGVBQUF1QixFQUFBdXZDLEtBQUE3dkMsVUFBQSxnQkFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBNnJDLGVBRUFuckMsSUFBQSxTQUFBcXJDLEdBQ0EvckMsS0FBQTZyQyxjQUFBRSxFQUNBL3JDLEtBQUF5dkMsUUFBQSxlQUFBMUQsTUFVQTN0QyxPQUFBQyxlQUFBdUIsRUFBQXV2QyxLQUFBN3ZDLFVBQUEsVUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBK0csUUFBQXpGLFVBT0ExQixFQUFBdXZDLEtBQUE3dkMsVUFBQW1CLFFBQUEsV0FNQSxPQUxBVCxLQUFBd3ZDLFlBQ0F4dkMsS0FBQTRyQixPQUFBbnJCLFVBQ0FULEtBQUE0ckIsT0FBQSxLQUNBNXJCLEtBQUFpSCxTQUFBLEtBQ0FqSCxLQUFBK0csUUFBQSxLQUNBL0csTUFFQUosRUFBQXV2QyxPQUVBdHZDLEVBQUEsU0FBQUQsR0FtSEEsT0FyR0FBLEVBQUErdkMsUUFBQSxXQUNBLElBQUE3c0MsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLFdBQ0EsU0FDQSxXQUNBMUQsRUFBQSt2QyxTQUNBL3ZDLEVBQUFtdkMsS0FBQWx4QyxLQUFBbUMsS0FBQThDLEdBTUE5QyxLQUFBNHZDLFNBQUEsSUFBQWh3QyxFQUFBdWdDLGFBQ0F0OUIsT0FBQUMsRUFBQUQsT0FDQW9MLEtBQUFuTCxFQUFBK3NDLFFBQ0F2bkMsTUFBQXhGLEVBQUF3RixTQUdBMUksRUFBQThGLE9BQUE5RixFQUFBK3ZDLFFBQUEvdkMsRUFBQW12QyxNQU1BbnZDLEVBQUErdkMsUUFBQW50QyxVQUNBcXRDLFFBQUFqd0MsRUFBQXVnQyxZQUFBMXhCLEtBQUE2eEIsR0FDQXI1QixTQUFBckgsRUFBQXFFLEtBQ0FwQixXQU9BakQsRUFBQSt2QyxRQUFBcndDLFVBQUFtdkMsTUFBQSxTQUFBcm1DLEdBQ0FwSSxLQUFBaUgsU0FBQW1CLEVBQUFwSSxLQUFBNHZDLFNBQUFqeEMsT0FDQXFCLEtBQUE0dkMsU0FBQW5RLFFBUUFyaEMsT0FBQUMsZUFBQXVCLEVBQUErdkMsUUFBQXJ3QyxVQUFBLFNBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQTR2QyxTQUFBdG5DLE9BRUE1SCxJQUFBLFNBQUFoRCxHQUNBc0MsS0FBQTR2QyxTQUFBdG5DLE1BQUE1SyxLQVNBVSxPQUFBQyxlQUFBdUIsRUFBQSt2QyxRQUFBcndDLFVBQUEsVUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBNHZDLFNBQUEvc0MsUUFFQW5DLElBQUEsU0FBQW92QyxHQUNBOXZDLEtBQUE0dkMsU0FBQS9zQyxPQUFBaXRDLEtBVUExeEMsT0FBQUMsZUFBQXVCLEVBQUErdkMsUUFBQXJ3QyxVQUFBLFNBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQTR2QyxTQUFBanhDLFNBU0FQLE9BQUFDLGVBQUF1QixFQUFBK3ZDLFFBQUFyd0MsVUFBQSxXQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUE0dkMsU0FBQTNoQyxNQUVBdk4sSUFBQSxTQUFBbXZDLEdBQ0E3dkMsS0FBQTR2QyxTQUFBM2hDLEtBQUE0aEMsS0FPQWp3QyxFQUFBK3ZDLFFBQUFyd0MsVUFBQW1CLFFBQUEsV0FDQWIsRUFBQW12QyxLQUFBenZDLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUE0dkMsU0FBQW52QyxVQUNBVCxLQUFBNHZDLFNBQUEsTUFFQWh3QyxFQUFBK3ZDLFVBRUE5dkMsRUFBQSxTQUFBRCxHQWlKQSxPQXpIQUEsRUFBQW13QyxTQUFBLFdBQ0EsSUFBQWp0QyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsV0FDQSxTQUNBLGVBQ0ExRCxFQUFBbXdDLFVBRUE3b0MsRUFBQXBFLEVBQUFvRSxPQWdCQSxVQWZBcEUsRUFBQW9FLE9BQ0F0SCxFQUFBdXZDLEtBQUF0eEMsS0FBQW1DLEtBQUE4QyxHQU1BOUMsS0FBQWd3QyxhQUFBaHdDLEtBQUEwVCxRQUFBNVEsRUFBQTRXLGFBRUE5WixFQUFBK0IsUUFBQW1CLEVBQUFpdUIsVUFBQW54QixFQUFBMEMsVUFBQTRFLEtBQ0FsSCxLQUFBZ3dCLFNBQUE5b0IsRUFBQTVGLE9BQUF0QixLQUFBZ3dDLGNBR0Fod0MsS0FBQWt0QixPQUFBLEVBRUF0dEIsRUFBQTBDLFVBQUE0RSxHQUNBLFFBQUF4SixFQUFBLEVBQTRCQSxFQUFBd0osRUFBQTVGLE9BQW1CNUQsSUFDL0NzQyxLQUFBbUksSUFBQXpLLEVBQUF3SixFQUFBeEosS0FJQWtDLEVBQUE4RixPQUFBOUYsRUFBQW13QyxTQUFBbndDLEVBQUF1dkMsTUFLQXZ2QyxFQUFBbXdDLFNBQUF2dEMsVUFBK0JrWCxZQUFBLE1BVS9CdGIsT0FBQUMsZUFBQXVCLEVBQUFtd0MsU0FBQXp3QyxVQUFBLGVBQ0FmLElBQUEsV0FDQSxPQUFBcUIsRUFBQTRhLE1BQUF4YSxLQUFBZ3dDLGNBQUF2OEIsZUFnQkE3VCxFQUFBbXdDLFNBQUF6d0MsVUFBQWd3QyxHQUFBLFNBQUFobkMsRUFBQTNKLEdBT0EsT0FMQWlCLEVBQUFpRSxRQUFBbEYsSUFFQXFCLEtBQUF5SSxPQUFBSCxHQUdBMUksRUFBQXV2QyxLQUFBN3ZDLFVBQUFnd0MsR0FBQXp4QyxLQUFBbUMsVUFBQWl3QyxXQUFBM25DLEdBQUEzSixJQVVBaUIsRUFBQW13QyxTQUFBendDLFVBQUE2SSxJQUFBLFNBQUFHLEVBQUEzSixHQUNBLFVBQUFBLEVBQ0EsT0FBQXFCLEtBRUEsR0FBQUosRUFBQWlFLFFBQUFsRixHQUFBLENBRUEsSUFBQXV4QyxFQUFBdHJDLEtBQUFvUyxNQUFBaFgsS0FBQWd3QyxhQUFBcnhDLEVBQUEyQyxRQUNBM0MsRUFBQSxJQUFBaUIsRUFBQW13QyxTQUFBL3ZDLEtBQUF5dUMsTUFBQXZ2QyxLQUFBYyxNQUFBckIsRUFBQWlCLEVBQUE0YSxNQUFBMDFCLElBR0EsT0FEQXR3QyxFQUFBdXZDLEtBQUE3dkMsVUFBQTZJLElBQUF0SyxLQUFBbUMsVUFBQWl3QyxXQUFBM25DLEdBQUEzSixHQUNBcUIsTUFPQUosRUFBQW13QyxTQUFBendDLFVBQUFtSixPQUFBLFNBQUFILEVBQUEzSixHQUVBLE9BREFpQixFQUFBdXZDLEtBQUE3dkMsVUFBQW1KLE9BQUE1SyxLQUFBbUMsVUFBQWl3QyxXQUFBM25DLEdBQUEzSixHQUNBcUIsTUFRQUosRUFBQW13QyxTQUFBendDLFVBQUEyd0MsV0FBQSxTQUFBM25DLEdBQ0EsT0FBQUEsYUFBQTFJLEVBQUEwYSxjQUNBaFMsRUFFQTFJLEVBQUE0YSxNQUFBbFMsRUFBQXRJLEtBQUFnd0MsYUFBQWh3QyxLQUFBc3pCLGFBQUE3ZixhQU9BN1QsRUFBQW13QyxTQUFBendDLFVBQUFtQixRQUFBLFdBRUEsT0FEQWIsRUFBQXV2QyxLQUFBN3ZDLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLE1BRUFKLEVBQUFtd0MsV0FFQWx3QyxFQUFBLFNBQUFELEdBc0xBLE9BdEtBQSxFQUFBdXdDLGdCQUFBLFdBQ0EsSUFBQXJ0QyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsWUFDQSxTQUNBMUQsRUFBQW00QixZQUNBbjRCLEVBQUFnekIsT0FBQS8wQixLQUFBbUMsS0FBQThDLEdBTUE5QyxLQUFBdXRDLE1BQUEsSUFBQTN0QyxFQUFBZ0MsT0FBQWtCLEVBQUF5cUMsTUFBQTN0QyxFQUFBNk8sS0FBQWdNLGFBTUF6YSxLQUFBb3dDLFdBQUEsSUFBQXh3QyxFQUFBbWIsS0FNQS9hLEtBQUFxd0MsVUFBQSxJQUFBendDLEVBQUFtNEIsWUFDQTVlLFVBQUFyVyxFQUFBcVcsVUFDQXdNLE9BQUE3aUIsRUFBQTZpQixPQUNBMVgsS0FBQSxXQUNBbXFCLE1BQUF0MUIsRUFBQXMxQixRQU9BcDRCLEtBQUFtWixVQUFBblosS0FBQXF3QyxVQUFBbDNCLFVBTUFuWixLQUFBMmxCLE9BQUEzbEIsS0FBQXF3QyxVQUFBMXFCLE9BTUEzbEIsS0FBQW9wQixRQUFBLElBQUF4cEIsRUFBQTZTLFdBQUEsU0FBQWhQLEdBQ0EsT0FBQUEsRUFBQSxHQUNBLEVBRUEsSUFJQXpELEtBQUFxd0MsVUFBQWwvQixNQUFBblIsS0FBQW9wQixRQUFBcHBCLEtBQUE0USxRQUNBNVEsS0FBQXV0QyxNQUFBcDhCLE1BQUFuUixLQUFBb3dDLFdBQUFwd0MsS0FBQW9wQixTQUNBcHBCLEtBQUFrRSxXQUNBLFFBQ0EsWUFDQSxZQUdBdEUsRUFBQThGLE9BQUE5RixFQUFBdXdDLGdCQUFBdndDLEVBQUFnekIsUUFPQWh6QixFQUFBdXdDLGdCQUFBM3RDLFVBQ0EyVyxVQUFBLElBQ0F3TSxPQUFBLEVBQ0F5UyxNQUFBLEVBQ0FtVixNQUFBLElBT0EzdEMsRUFBQXV3QyxnQkFBQTd3QyxVQUFBeXpCLE9BQUEsU0FBQTNxQixHQUNBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQXF3QyxVQUFBMWlDLE1BQUF2RixHQUNBcEksS0FBQW93QyxXQUFBanJDLEtBQUE0VyxlQUFBLEVBQUEzVCxJQU9BeEksRUFBQXV3QyxnQkFBQTd3QyxVQUFBMnpCLE1BQUEsU0FBQTdxQixHQUNBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQXF3QyxVQUFBaHhCLEtBQUFqWCxHQUdBcEksS0FBQW93QyxXQUFBanJDLEtBQUE0VyxlQUFBLEVBQUEzVCxJQU9BeEksRUFBQXV3QyxnQkFBQTd3QyxVQUFBMHpCLFFBQUEsU0FBQTVxQixHQUNBcEksS0FBQXF3QyxVQUFBcmQsUUFBQTVxQixJQVFBaEssT0FBQUMsZUFBQXVCLEVBQUF1d0MsZ0JBQUE3d0MsVUFBQSxTQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFxd0MsVUFBQWpZLE9BRUExM0IsSUFBQSxTQUFBMDNCLEdBQ0FwNEIsS0FBQXF3QyxVQUFBalksV0FVQWg2QixPQUFBQyxlQUFBdUIsRUFBQXV3QyxnQkFBQTd3QyxVQUFBLFFBQ0FmLElBQUEsV0FDQSxpQkFVQUgsT0FBQUMsZUFBQXVCLEVBQUF1d0MsZ0JBQUE3d0MsVUFBQSxZQUNBZixJQUFBLFdBQ0EsWUFPQXFCLEVBQUF1d0MsZ0JBQUE3d0MsVUFBQW1CLFFBQUEsV0FpQkEsT0FoQkFiLEVBQUFnekIsT0FBQXR6QixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBcXdDLFVBQUE1dkMsVUFDQVQsS0FBQXF3QyxVQUFBLEtBQ0Fyd0MsS0FBQW9FLFdBQ0EsUUFDQSxZQUNBLFdBRUFwRSxLQUFBdXRDLE1BQUE5c0MsVUFDQVQsS0FBQXV0QyxNQUFBLEtBQ0F2dEMsS0FBQW93QyxXQUFBM3ZDLFVBQ0FULEtBQUFvd0MsV0FBQSxLQUNBcHdDLEtBQUFvcEIsUUFBQTNvQixVQUNBVCxLQUFBb3BCLFFBQUEsS0FDQXBwQixLQUFBbVosVUFBQSxLQUNBblosS0FBQTJsQixPQUFBLEtBQ0EzbEIsTUFFQUosRUFBQXV3QyxrQkFFQXR3QyxFQUFBLFNBQUFELEdBK0tBLE9BaEtBQSxFQUFBMHdDLGNBQUEsV0FDQSxJQUFBeHRDLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxZQUNBLHVCQUNBMUQsRUFBQTB3QyxlQUNBMXdDLEVBQUFnekIsT0FBQS8wQixLQUFBbUMsS0FBQThDLEdBTUE5QyxLQUFBdXdDLE9BQUEsSUFBQTN3QyxFQUFBdXdDLGdCQUFBcnRDLEVBQUEwdEMscUJBRUF4d0MsS0FBQXV3QyxPQUFBRixVQUFBcGlDLEtBQUEsT0FNQWpPLEtBQUF5d0MsV0FBQSxJQUFBN3dDLEVBQUFtNEIsWUFDQTVlLFVBQUFyVyxFQUFBcVcsVUFDQXdNLE9BQUE3aUIsRUFBQTZpQixPQUNBeVMsTUFBQXQxQixFQUFBczFCLFFBUUFwNEIsS0FBQXNuQixPQUFBLElBQUExbkIsRUFBQThrQixTQUFBLEdBTUExa0IsS0FBQW1aLFVBQUFuWixLQUFBeXdDLFdBQUF0M0IsVUFNQW5aLEtBQUEybEIsT0FBQTNsQixLQUFBeXdDLFdBQUE5cUIsT0FNQTNsQixLQUFBd3dDLG9CQUFBeHdDLEtBQUF1d0MsT0FBQXAzQixVQUVBblosS0FBQXl3QyxXQUFBdC9CLE1BQUFuUixLQUFBc25CLE9BQUF0bkIsS0FBQXV3QyxPQUFBaEQsT0FDQXZ0QyxLQUFBdXdDLE9BQUEvc0MsUUFBQXhELEtBQUE0USxRQUNBNVEsS0FBQWtFLFdBQ0Esc0JBQ0EsWUFDQSxZQUdBdEUsRUFBQThGLE9BQUE5RixFQUFBMHdDLGNBQUExd0MsRUFBQWd6QixRQU9BaHpCLEVBQUEwd0MsY0FBQTl0QyxVQUNBMlcsVUFBQSxJQUNBd00sT0FBQSxFQUNBeVMsTUFBQSxFQUNBb1ksb0JBQUEsSUFPQTV3QyxFQUFBMHdDLGNBQUFoeEMsVUFBQXl6QixPQUFBLFNBQUEzcUIsR0FDQUEsRUFBQXBJLEtBQUF5VCxVQUFBckwsR0FDQXBJLEtBQUF5d0MsV0FBQTlpQyxNQUFBdkYsR0FDQXBJLEtBQUF1d0MsT0FBQTVpQyxNQUFBdkYsSUFPQXhJLEVBQUEwd0MsY0FBQWh4QyxVQUFBMnpCLE1BQUEsU0FBQTdxQixHQUNBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQXl3QyxXQUFBcHhCLEtBQUFqWCxHQUNBcEksS0FBQXV3QyxPQUFBbHhCLEtBQUFqWCxJQU9BeEksRUFBQTB3QyxjQUFBaHhDLFVBQUEwekIsUUFBQSxTQUFBNXFCLEdBQ0FwSSxLQUFBeXdDLFdBQUF6ZCxRQUFBNXFCLEdBQ0FwSSxLQUFBdXdDLE9BQUF2ZCxRQUFBNXFCLElBU0FoSyxPQUFBQyxlQUFBdUIsRUFBQTB3QyxjQUFBaHhDLFVBQUEsUUFDQWYsSUFBQSxXQUNBLGVBVUFILE9BQUFDLGVBQUF1QixFQUFBMHdDLGNBQUFoeEMsVUFBQSxZQUNBZixJQUFBLFdBQ0EsWUFTQUgsT0FBQUMsZUFBQXVCLEVBQUEwd0MsY0FBQWh4QyxVQUFBLFNBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXl3QyxXQUFBclksT0FFQTEzQixJQUFBLFNBQUEwM0IsR0FDQXA0QixLQUFBeXdDLFdBQUFyWSxXQU9BeDRCLEVBQUEwd0MsY0FBQWh4QyxVQUFBbUIsUUFBQSxXQWdCQSxPQWZBYixFQUFBZ3pCLE9BQUF0ekIsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQXV3QyxPQUFBOXZDLFVBQ0FULEtBQUF1d0MsT0FBQSxLQUNBdndDLEtBQUFzbkIsT0FBQTdtQixVQUNBVCxLQUFBc25CLE9BQUEsS0FDQXRuQixLQUFBeXdDLFdBQUFod0MsVUFDQVQsS0FBQXl3QyxXQUFBLEtBQ0F6d0MsS0FBQW9FLFdBQ0Esc0JBQ0EsWUFDQSxXQUVBcEUsS0FBQW1aLFVBQUEsS0FDQW5aLEtBQUEybEIsT0FBQSxLQUNBM2xCLEtBQUF3d0Msb0JBQUEsS0FDQXh3QyxNQUVBSixFQUFBMHdDLGdCQUVBendDLEVBQUEsU0FBQUQsR0E4TkEsT0FoTkFBLEVBQUE4d0MsYUFBQSxXQUNBLElBQUE1dEMsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLFlBQ0EsT0FDQSxrQkFDQTFELEVBQUE4d0MsY0FDQTl3QyxFQUFBZ3pCLE9BQUEvMEIsS0FBQW1DLEtBQUE4QyxHQU1BOUMsS0FBQTJ3QyxTQUFBLElBQUEvd0MsRUFBQW00QixXQUFBajFCLEVBQUFxVyxVQUFBclcsRUFBQW1MLE1BTUFqTyxLQUFBbVosVUFBQSxJQUFBdlosRUFBQWdDLE9BQUFrQixFQUFBcVcsVUFBQXZaLEVBQUE2TyxLQUFBc0gsV0FNQS9WLEtBQUEybEIsT0FBQTNsQixLQUFBMndDLFNBQUFockIsT0FDQTNsQixLQUFBMmxCLE9BQUFobkIsTUFBQW1FLEVBQUE2aUIsT0FRQTNsQixLQUFBNHdDLGdCQUFBLElBQUFoeEMsRUFBQThrQixTQUFBNWhCLEVBQUE4dEMsaUJBQ0E1d0MsS0FBQTR3QyxnQkFBQXo5QixNQUFBdlQsRUFBQTZPLEtBQUFxTSxTQU1BOWEsS0FBQXl3QyxXQUFBLElBQUE3d0MsRUFBQW00QixXQUFBajFCLEVBQUFxVyxVQUFBclcsRUFBQSt0QyxnQkFXQTd3QyxLQUFBOHdDLFlBQUEsSUFBQWx4QyxFQUFBOGtCLFNBQUE1aEIsRUFBQWd1QyxhQUNBOXdDLEtBQUE4d0MsWUFBQTM5QixNQUFBdlQsRUFBQTZPLEtBQUFxTSxTQU1BOWEsS0FBQSt3QyxnQkFBQSxJQUFBbnhDLEVBQUFtYixLQUFBLEdBRUEvYSxLQUFBbVosVUFBQTNWLFFBQUF4RCxLQUFBMndDLFNBQUF4M0IsV0FDQW5aLEtBQUFtWixVQUFBaEksTUFBQW5SLEtBQUE4d0MsWUFBQTl3QyxLQUFBeXdDLFdBQUF0M0IsV0FDQW5aLEtBQUFtWixVQUFBaEksTUFBQW5SLEtBQUE0d0MsZ0JBQUE1d0MsS0FBQSt3QyxpQkFDQS93QyxLQUFBeXdDLFdBQUFqdEMsUUFBQXhELEtBQUErd0MsZ0JBQUE1ckMsTUFDQW5GLEtBQUErd0MsZ0JBQUF2dEMsUUFBQXhELEtBQUEyd0MsU0FBQXgzQixXQUNBblosS0FBQTJ3QyxTQUFBbnRDLFFBQUF4RCxLQUFBNFEsUUFDQTVRLEtBQUEybEIsT0FBQW5pQixRQUFBeEQsS0FBQXl3QyxXQUFBOXFCLFFBQ0EzbEIsS0FBQW80QixNQUFBdDFCLEVBQUFzMUIsTUFDQXA0QixLQUFBa0UsV0FDQSxrQkFDQSxZQUNBLFNBQ0EsaUJBR0F0RSxFQUFBOEYsT0FBQTlGLEVBQUE4d0MsYUFBQTl3QyxFQUFBZ3pCLFFBT0FoekIsRUFBQTh3QyxhQUFBbHVDLFVBQ0EyVyxVQUFBLElBQ0F3TSxPQUFBLEVBQ0F5UyxNQUFBLEVBQ0F3WSxnQkFBQSxFQUNBQyxlQUFBLFNBQ0FDLFlBQUEsR0FPQWx4QyxFQUFBOHdDLGFBQUFweEMsVUFBQXl6QixPQUFBLFNBQUEzcUIsR0FDQXBJLEtBQUF5d0MsV0FBQTlpQyxNQUFBdkYsR0FDQXBJLEtBQUEyd0MsU0FBQWhqQyxNQUFBdkYsSUFPQXhJLEVBQUE4d0MsYUFBQXB4QyxVQUFBMnpCLE1BQUEsU0FBQTdxQixHQUNBcEksS0FBQXl3QyxXQUFBcHhCLEtBQUFqWCxHQUNBcEksS0FBQTJ3QyxTQUFBdHhCLEtBQUFqWCxJQU9BeEksRUFBQTh3QyxhQUFBcHhDLFVBQUEwekIsUUFBQSxTQUFBNXFCLEdBQ0FwSSxLQUFBeXdDLFdBQUF6ZCxRQUFBNXFCLEdBQ0FwSSxLQUFBMndDLFNBQUEzZCxRQUFBNXFCLElBUUFoSyxPQUFBQyxlQUFBdUIsRUFBQTh3QyxhQUFBcHhDLFVBQUEsUUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBMndDLFNBQUExaUMsTUFFQXZOLElBQUEsU0FBQXVOLEdBQ0FqTyxLQUFBMndDLFNBQUExaUMsVUFTQTdQLE9BQUFDLGVBQUF1QixFQUFBOHdDLGFBQUFweEMsVUFBQSxrQkFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBeXdDLFdBQUF4aUMsTUFFQXZOLElBQUEsU0FBQXVOLEdBQ0FqTyxLQUFBeXdDLFdBQUF4aUMsVUFTQTdQLE9BQUFDLGVBQUF1QixFQUFBOHdDLGFBQUFweEMsVUFBQSxTQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUEyd0MsU0FBQXZZLE9BRUExM0IsSUFBQSxTQUFBMDNCLEdBQ0FwNEIsS0FBQTJ3QyxTQUFBdlksUUFDQXA0QixLQUFBeXdDLFdBQUFyWSxXQWdCQWg2QixPQUFBQyxlQUFBdUIsRUFBQTh3QyxhQUFBcHhDLFVBQUEsWUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBMndDLFNBQUF6WSxVQUVBeDNCLElBQUEsU0FBQXczQixHQUNBbDRCLEtBQUEyd0MsU0FBQXpZLGNBT0F0NEIsRUFBQTh3QyxhQUFBcHhDLFVBQUFtQixRQUFBLFdBcUJBLE9BcEJBYixFQUFBZ3pCLE9BQUF0ekIsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQW9FLFdBQ0Esa0JBQ0EsWUFDQSxTQUNBLGdCQUVBcEUsS0FBQW1aLFVBQUExWSxVQUNBVCxLQUFBbVosVUFBQSxLQUNBblosS0FBQTJsQixPQUFBLEtBQ0EzbEIsS0FBQTh3QyxZQUFBcndDLFVBQ0FULEtBQUE4d0MsWUFBQSxLQUNBOXdDLEtBQUEyd0MsU0FBQWx3QyxVQUNBVCxLQUFBMndDLFNBQUEsS0FDQTN3QyxLQUFBeXdDLFdBQUFod0MsVUFDQVQsS0FBQXl3QyxXQUFBLEtBQ0F6d0MsS0FBQSt3QyxnQkFBQXR3QyxVQUNBVCxLQUFBK3dDLGdCQUFBLEtBQ0Evd0MsS0FBQTR3QyxnQkFBQW53QyxVQUNBVCxLQUFBNHdDLGdCQUFBLEtBQ0E1d0MsTUFFQUosRUFBQTh3QyxlQUVBN3dDLEVBQUEsU0FBQUQsR0FvTkEsT0F0TUFBLEVBQUFveEMsYUFBQSxXQUNBLElBQUFsdUMsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLFlBQ0EsT0FDQSxrQkFDQTFELEVBQUFveEMsY0FDQXB4QyxFQUFBZ3pCLE9BQUEvMEIsS0FBQW1DLEtBQUE4QyxHQU1BOUMsS0FBQTJ3QyxTQUFBLElBQUEvd0MsRUFBQW00QixXQUFBajFCLEVBQUFxVyxVQUFBclcsRUFBQW1MLE1BTUFqTyxLQUFBbVosVUFBQW5aLEtBQUEyd0MsU0FBQXgzQixVQU1BblosS0FBQTJsQixPQUFBM2xCLEtBQUEyd0MsU0FBQWhyQixPQUNBM2xCLEtBQUEybEIsT0FBQWhuQixNQUFBbUUsRUFBQTZpQixPQU1BM2xCLEtBQUF5d0MsV0FBQSxJQUFBN3dDLEVBQUFtNEIsV0FBQWoxQixFQUFBcVcsVUFBQXJXLEVBQUErdEMsZ0JBTUE3d0MsS0FBQWl4QyxpQkFBQSxJQUFBcnhDLEVBQUE4NUIsWUFXQTE1QixLQUFBOHdDLFlBQUEsSUFBQWx4QyxFQUFBOGtCLFNBQUE1aEIsRUFBQWd1QyxhQUNBOXdDLEtBQUE4d0MsWUFBQTM5QixNQUFBdlQsRUFBQTZPLEtBQUFxTSxTQU1BOWEsS0FBQSt3QyxnQkFBQSxJQUFBbnhDLEVBQUFtYixLQUFBLEdBRUEvYSxLQUFBbVosVUFBQWhJLE1BQUFuUixLQUFBOHdDLFlBQUE5d0MsS0FBQXl3QyxXQUFBdDNCLFdBQ0FuWixLQUFBMmxCLE9BQUFuaUIsUUFBQXhELEtBQUF5d0MsV0FBQTlxQixRQUNBM2xCLEtBQUF5d0MsV0FBQXQvQixNQUFBblIsS0FBQWl4QyxpQkFBQWp4QyxLQUFBK3dDLGdCQUFBNXJDLE1BQ0FuRixLQUFBMndDLFNBQUF4L0IsTUFBQW5SLEtBQUErd0MsZ0JBQUEvd0MsS0FBQTRRLFFBQ0E1USxLQUFBbzRCLE1BQUF0MUIsRUFBQXMxQixNQUNBcDRCLEtBQUFrRSxXQUNBLFlBQ0EsU0FDQSxpQkFHQXRFLEVBQUE4RixPQUFBOUYsRUFBQW94QyxhQUFBcHhDLEVBQUFtNEIsWUFPQW40QixFQUFBb3hDLGFBQUF4dUMsVUFDQTJXLFVBQUEsSUFDQXdNLE9BQUEsRUFDQXlTLE1BQUEsRUFDQXlZLGVBQUEsU0FDQUMsWUFBQSxHQU9BbHhDLEVBQUFveEMsYUFBQTF4QyxVQUFBeXpCLE9BQUEsU0FBQTNxQixHQUNBcEksS0FBQXl3QyxXQUFBOWlDLE1BQUF2RixHQUNBcEksS0FBQTJ3QyxTQUFBaGpDLE1BQUF2RixJQU9BeEksRUFBQW94QyxhQUFBMXhDLFVBQUEyekIsTUFBQSxTQUFBN3FCLEdBQ0FwSSxLQUFBeXdDLFdBQUFweEIsS0FBQWpYLEdBQ0FwSSxLQUFBMndDLFNBQUF0eEIsS0FBQWpYLElBT0F4SSxFQUFBb3hDLGFBQUExeEMsVUFBQTB6QixRQUFBLFNBQUE1cUIsR0FDQXBJLEtBQUF5d0MsV0FBQXpkLFFBQUE1cUIsR0FDQXBJLEtBQUEyd0MsU0FBQTNkLFFBQUE1cUIsSUFRQWhLLE9BQUFDLGVBQUF1QixFQUFBb3hDLGFBQUExeEMsVUFBQSxRQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUEyd0MsU0FBQTFpQyxNQUVBdk4sSUFBQSxTQUFBdU4sR0FDQWpPLEtBQUEyd0MsU0FBQTFpQyxVQVNBN1AsT0FBQUMsZUFBQXVCLEVBQUFveEMsYUFBQTF4QyxVQUFBLGtCQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUF5d0MsV0FBQXhpQyxNQUVBdk4sSUFBQSxTQUFBdU4sR0FDQWpPLEtBQUF5d0MsV0FBQXhpQyxVQVNBN1AsT0FBQUMsZUFBQXVCLEVBQUFveEMsYUFBQTF4QyxVQUFBLFNBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQTJ3QyxTQUFBdlksT0FFQTEzQixJQUFBLFNBQUEwM0IsR0FDQXA0QixLQUFBMndDLFNBQUF2WSxRQUNBcDRCLEtBQUF5d0MsV0FBQXJZLFdBZ0JBaDZCLE9BQUFDLGVBQUF1QixFQUFBb3hDLGFBQUExeEMsVUFBQSxZQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUEyd0MsU0FBQXpZLFVBRUF4M0IsSUFBQSxTQUFBdzNCLEdBQ0FsNEIsS0FBQTJ3QyxTQUFBelksY0FPQXQ0QixFQUFBb3hDLGFBQUExeEMsVUFBQW1CLFFBQUEsV0FtQkEsT0FsQkFiLEVBQUFnekIsT0FBQXR6QixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBb0UsV0FDQSxZQUNBLFNBQ0EsZ0JBRUFwRSxLQUFBbVosVUFBQSxLQUNBblosS0FBQTJsQixPQUFBLEtBQ0EzbEIsS0FBQTh3QyxZQUFBcndDLFVBQ0FULEtBQUE4d0MsWUFBQSxLQUNBOXdDLEtBQUEyd0MsU0FBQWx3QyxVQUNBVCxLQUFBMndDLFNBQUEsS0FDQTN3QyxLQUFBeXdDLFdBQUFod0MsVUFDQVQsS0FBQXl3QyxXQUFBLEtBQ0F6d0MsS0FBQSt3QyxnQkFBQXR3QyxVQUNBVCxLQUFBK3dDLGdCQUFBLEtBQ0Evd0MsS0FBQWl4QyxpQkFBQXh3QyxVQUNBVCxLQUFBaXhDLGlCQUFBLEtBQ0FqeEMsTUFFQUosRUFBQW94QyxlQUVBbnhDLEVBQUEsU0FBQUQsR0FvUkEsT0F0UUFBLEVBQUFzeEMsY0FBQSxXQUNBLElBQUFwdUMsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLFlBQ0EsT0FDQSxVQUNBMUQsRUFBQXN4QyxlQUNBdHhDLEVBQUFnekIsT0FBQS8wQixLQUFBbUMsS0FBQThDLEdBTUE5QyxLQUFBbVosVUFBQSxJQUFBdlosRUFBQWdDLE9BQUFrQixFQUFBcVcsVUFBQXZaLEVBQUE2TyxLQUFBc0gsV0FNQS9WLEtBQUEybEIsT0FBQSxJQUFBL2xCLEVBQUFnQyxPQUFBa0IsRUFBQTZpQixPQUFBL2xCLEVBQUE2TyxLQUFBdU0sT0FNQWhiLEtBQUFteEMsZ0JBTUFueEMsS0FBQW94QyxRQUFBdHVDLEVBQUEwakMsT0FNQXhtQyxLQUFBcU8sTUFBQXZMLEVBQUFtTCxLQU1Bak8sS0FBQW00QixPQUFBcjFCLEVBQUFzMUIsTUFNQXA0QixLQUFBaTRCLFVBQUFyNEIsRUFBQW1ELFdBQUFELEVBQUFvMUIsYUFFQWw0QixLQUFBZ21CLE1BQUFsakIsRUFBQWtqQixNQUNBaG1CLEtBQUFrRSxXQUNBLFlBQ0EsWUFHQXRFLEVBQUE4RixPQUFBOUYsRUFBQXN4QyxjQUFBdHhDLEVBQUFnekIsUUFPQWh6QixFQUFBc3hDLGNBQUExdUMsVUFDQTJXLFVBQUEsSUFDQXdNLE9BQUEsRUFDQXlTLE1BQUEsRUFDQW9PLE9BQUEsR0FDQXhnQixNQUFBLEVBQ0EvWCxLQUFBLFlBT0FyTyxFQUFBc3hDLGNBQUE1eEMsVUFBQXl6QixPQUFBLFNBQUEzcUIsR0FDQUEsRUFBQXBJLEtBQUF5VCxVQUFBckwsR0FDQXBJLEtBQUFvdkMsU0FBQSxTQUFBaUMsR0FDQUEsRUFBQTFqQyxNQUFBdkYsTUFRQXhJLEVBQUFzeEMsY0FBQTV4QyxVQUFBMnpCLE1BQUEsU0FBQTdxQixHQUNBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQW92QyxTQUFBLFNBQUFpQyxHQUNBQSxFQUFBaHlCLEtBQUFqWCxNQVFBeEksRUFBQXN4QyxjQUFBNXhDLFVBQUEwekIsUUFBQSxTQUFBNXFCLEdBQ0FBLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0FwSSxLQUFBb3ZDLFNBQUEsU0FBQWlDLEdBQ0FBLEVBQUFyZSxRQUFBNXFCLE1BUUF4SSxFQUFBc3hDLGNBQUE1eEMsVUFBQTh2QyxTQUFBLFNBQUFrQyxHQUNBLFFBQUE1ekMsRUFBQSxFQUF3QkEsRUFBQXNDLEtBQUFteEMsYUFBQTd2QyxPQUE4QjVELElBQ3RENHpDLEVBQUF6ekMsS0FBQW1DLFVBQUFteEMsYUFBQXp6QyxPQVNBVSxPQUFBQyxlQUFBdUIsRUFBQXN4QyxjQUFBNXhDLFVBQUEsUUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBcU8sT0FFQTNOLElBQUEsU0FBQXVOLEdBQ0FqTyxLQUFBcU8sTUFBQUosRUFDQWpPLEtBQUFvdkMsU0FBQSxTQUFBaUMsR0FDQUEsRUFBQXBqQyxZQWFBN1AsT0FBQUMsZUFBQXVCLEVBQUFzeEMsY0FBQTV4QyxVQUFBLFVBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQW94QyxTQUVBMXdDLElBQUEsU0FBQThsQyxHQUVBLEdBREF4bUMsS0FBQW94QyxRQUFBNUssRUFDQXhtQyxLQUFBbXhDLGFBQUE3dkMsT0FBQSxHQUNBLElBQUFxTSxHQUFBNjRCLEVBQUEsRUFDQTdqQixFQUFBNmpCLEdBQUF4bUMsS0FBQW14QyxhQUFBN3ZDLE9BQUEsR0FDQXRCLEtBQUFvdkMsU0FBQSxTQUFBaUMsRUFBQTN6QyxHQUNBMnpDLEVBQUExckIsT0FBQWhuQixNQUFBZ1AsRUFBQWdWLEVBQUFqbEIsUUFXQVUsT0FBQUMsZUFBQXVCLEVBQUFzeEMsY0FBQTV4QyxVQUFBLFNBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQW14QyxhQUFBN3ZDLFFBRUFaLElBQUEsU0FBQXNsQixHQUVBLEdBREFBLEVBQUFwaEIsS0FBQThLLElBQUFzVyxFQUFBLEdBQ0FobUIsS0FBQW14QyxhQUFBN3ZDLFNBQUEwa0IsRUFBQSxDQUlBaG1CLEtBQUFvdkMsU0FBQSxTQUFBaUMsR0FDQUEsRUFBQTV3QyxZQUVBVCxLQUFBbXhDLGdCQUNBLFFBQUF6ekMsRUFBQSxFQUFnQ0EsRUFBQXNvQixFQUFXdG9CLElBQUEsQ0FDM0MsSUFBQTJ6QyxFQUFBLElBQUF6eEMsRUFBQW00QixXQUNBLzNCLEtBQUFpTyxPQUFBck8sRUFBQW00QixXQUFBdHBCLEtBQUFncUIsT0FDQTRZLEVBQUFuWixTQUFBbDRCLEtBQUFpNEIsVUFFQW9aLEVBQUFwakMsS0FBQWpPLEtBQUFxTyxNQUVBZ2pDLEVBQUFqWixNQUFBcDRCLEtBQUFtNEIsT0FDQWtaLEVBQUFoZixPQUFBMXpCLE9BQUEsTUFBQXFuQixFQUNBaG1CLEtBQUFtWixVQUFBM1YsUUFBQTZ0QyxFQUFBbDRCLFdBQ0FuWixLQUFBMmxCLE9BQUFuaUIsUUFBQTZ0QyxFQUFBMXJCLFFBQ0EwckIsRUFBQTd0QyxRQUFBeEQsS0FBQTRRLFFBQ0E1USxLQUFBbXhDLGFBQUF6ekMsR0FBQTJ6QyxFQUdBcnhDLEtBQUF3bUMsT0FBQXhtQyxLQUFBb3hDLFFBQ0FweEMsS0FBQWdOLFFBQUFwTixFQUFBeUUsTUFBQUMsU0FDQXRFLEtBQUFvdkMsU0FBQSxTQUFBaUMsR0FDQUEsRUFBQTFqQyxjQVlBdlAsT0FBQUMsZUFBQXVCLEVBQUFzeEMsY0FBQTV4QyxVQUFBLFNBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQW00QixRQUVBejNCLElBQUEsU0FBQTAzQixHQUNBcDRCLEtBQUFtNEIsT0FBQUMsRUFDQXA0QixLQUFBb3ZDLFNBQUEsU0FBQWlDLEdBQ0FBLEVBQUFqWixhQWlCQWg2QixPQUFBQyxlQUFBdUIsRUFBQXN4QyxjQUFBNXhDLFVBQUEsWUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBaTRCLFdBRUF2M0IsSUFBQSxTQUFBdzNCLEdBQ0FsNEIsS0FBQWk0QixVQUFBQyxFQUNBbDRCLEtBQUFxTyxNQUFBek8sRUFBQW00QixXQUFBdHBCLEtBQUFncUIsT0FDQXo0QixLQUFBb3ZDLFNBQUEsU0FBQWlDLEdBQ0FBLEVBQUFuWixnQkFRQXQ0QixFQUFBc3hDLGNBQUE1eEMsVUFBQW1CLFFBQUEsV0FlQSxPQWRBYixFQUFBZ3pCLE9BQUF0ekIsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQW9FLFdBQ0EsWUFDQSxXQUVBcEUsS0FBQW1aLFVBQUExWSxVQUNBVCxLQUFBbVosVUFBQSxLQUNBblosS0FBQTJsQixPQUFBbGxCLFVBQ0FULEtBQUEybEIsT0FBQSxLQUNBM2xCLEtBQUFvdkMsU0FBQSxTQUFBaUMsR0FDQUEsRUFBQTV3QyxZQUVBVCxLQUFBbXhDLGFBQUEsS0FDQW54QyxLQUFBaTRCLFVBQUEsS0FDQWo0QixNQUVBSixFQUFBc3hDLGdCQUVBcnhDLEVBQUEsU0FBQUQsR0FtQkFBLEVBQUEyeEMsZUFBQSxXQUNBLElBQUF6dUMsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLFlBQ0EsUUFDQTFELEVBQUEyeEMsZ0JBQ0EzeEMsRUFBQWd6QixPQUFBLzBCLEtBQUFtQyxLQUFBOEMsR0FNQTlDLEtBQUFtWixVQUFBLElBQUF2WixFQUFBZ0MsT0FBQWtCLEVBQUFxVyxVQUFBdlosRUFBQTZPLEtBQUFzSCxXQU1BL1YsS0FBQTJsQixPQUFBLElBQUEvbEIsRUFBQWdDLE9BQUFrQixFQUFBNmlCLE9BQUEvbEIsRUFBQTZPLEtBQUF1TSxPQU1BaGIsS0FBQXd4QyxpQkFBQTd4QyxFQU1BSyxLQUFBeTNCLFlBQUEsS0FFQXozQixLQUFBaU8sS0FBQW5MLEVBQUFtTCxLQUNBak8sS0FBQWtFLFdBQ0EsWUFDQSxXQUdBbEUsS0FBQVUsSUFBQW9DLElBRUFsRCxFQUFBOEYsT0FBQTlGLEVBQUEyeEMsZUFBQTN4QyxFQUFBZ3pCLFFBT0FoekIsRUFBQTJ4QyxlQUFBL3VDLFVBQ0EyVyxVQUFBLElBQ0F3TSxPQUFBLEVBQ0ExWCxLQUFBLE9BQ0FtcUIsTUFBQSxHQU1BLElBQUFxWixFQUNBLGtCQURBQSxFQUVBLGdCQUZBQSxFQUdBLGFBSEFBLEVBSUEsZUFKQUEsRUFLQSxlQUxBQSxFQU1BLGdCQWlUQSxPQTFTQTd4QyxFQUFBMnhDLGVBQUFqeUMsVUFBQXl6QixPQUFBLFNBQUEzcUIsR0FDQXBJLEtBQUF5M0IsWUFBQTlwQixNQUFBdkYsSUFPQXhJLEVBQUEyeEMsZUFBQWp5QyxVQUFBMnpCLE1BQUEsU0FBQTdxQixHQUNBcEksS0FBQXkzQixZQUFBcFksS0FBQWpYLElBRUF4SSxFQUFBMnhDLGVBQUFqeUMsVUFBQTB6QixRQUFBLFNBQUE1cUIsR0FDQXBJLEtBQUF5M0IsWUFBQXpFLFFBQUE1cUIsSUFzQkFoSyxPQUFBQyxlQUFBdUIsRUFBQTJ4QyxlQUFBanlDLFVBQUEsUUFDQWYsSUFBQSxXQUNBLElBQUFtekMsRUFBQSxHQVFBLE9BUEExeEMsS0FBQXd4QyxjQUFBQyxFQUNBQyxFQUFBLEtBQ2MxeEMsS0FBQXd4QyxjQUFBQyxFQUNkQyxFQUFBLEtBQ2MxeEMsS0FBQXd4QyxjQUFBQyxJQUNkQyxFQUFBLE9BRUFBLEVBQUExeEMsS0FBQXkzQixZQUFBeHBCLE1BRUF2TixJQUFBLFNBQUF1TixHQUNBLE9BQUFBLEVBQUEwakMsT0FBQSxNQUNBM3hDLEtBQUE0eEMscUJBQUFILEdBQ0F6eEMsS0FBQXkzQixZQUFBeHBCLE9BQUEwakMsT0FBQSxJQUNjLE9BQUExakMsRUFBQTBqQyxPQUFBLE1BQ2QzeEMsS0FBQTR4QyxxQkFBQUgsR0FDQXp4QyxLQUFBeTNCLFlBQUF4cEIsT0FBQTBqQyxPQUFBLElBQ2MsUUFBQTFqQyxFQUFBMGpDLE9BQUEsTUFDZDN4QyxLQUFBNHhDLHFCQUFBSCxHQUNBenhDLEtBQUF5M0IsWUFBQXhwQixPQUFBMGpDLE9BQUEsSUFDYyxRQUFBMWpDLEVBQ2RqTyxLQUFBNHhDLHFCQUFBSCxHQUNjLFVBQUF4akMsRUFDZGpPLEtBQUE0eEMscUJBQUFILElBRUF6eEMsS0FBQTR4QyxxQkFBQUgsR0FDQXp4QyxLQUFBeTNCLFlBQUF4cEIsV0FrQkE3UCxPQUFBQyxlQUFBdUIsRUFBQTJ4QyxlQUFBanlDLFVBQUEsWUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBeTNCLFlBQUFTLFVBRUF4M0IsSUFBQSxTQUFBdzNCLEdBQ0FsNEIsS0FBQXkzQixZQUFBUyxjQVVBdDRCLEVBQUEyeEMsZUFBQWp5QyxVQUFBb0IsSUFBQSxTQUFBQyxFQUFBaEMsR0FTQSxNQVBBLFNBQUFnQyxFQUNBWCxLQUFBaU8sS0FBQXRQLEVBQ1VpQixFQUFBaUIsU0FBQUYsTUFBQXBCLGVBQUEsVUFDVlMsS0FBQWlPLEtBQUF0TixFQUFBc04sTUFHQXJPLEVBQUFOLFVBQUFvQixJQUFBNEcsTUFBQXRILEtBQUFzRCxXQUNBdEQsTUFNQUosRUFBQTJ4QyxlQUFBanlDLFVBQUFzeUMscUJBQUEsU0FBQUMsR0FDQSxHQUFBQSxJQUFBN3hDLEtBQUF3eEMsWUFBQSxDQUNBeHhDLEtBQUF3eEMsWUFBQUssRUFDQSxJQUFBQyxFQUFBbHlDLEVBQUFpeUMsR0FFQXJzQyxFQUFBeEYsS0FBQXdGLE1BQ0EsVUFBQXhGLEtBQUF5M0IsWUFBQSxDQUNBLElBQUFzYSxFQUFBL3hDLEtBQUF5M0IsWUFDQXNhLEVBQUExeUIsS0FBQTdaLEdBRUF4RixLQUFBeUYsUUFBQW1JLFdBQUEsV0FDQW1rQyxFQUFBdHhDLFVBQ0FzeEMsRUFBQSxNQUNrQi94QyxLQUFBMmUsV0FFbEIzZSxLQUFBeTNCLFlBQUEsSUFBQXFhLEVBQ0E5eEMsS0FBQW1aLFVBQUEzVixRQUFBeEQsS0FBQXkzQixZQUFBdGUsV0FDQW5aLEtBQUEybEIsT0FBQW5pQixRQUFBeEQsS0FBQXkzQixZQUFBOVIsUUFDQTNsQixLQUFBeTNCLFlBQUFqMEIsUUFBQXhELEtBQUE0USxRQUNBNVEsS0FBQWdOLFFBQUFwTixFQUFBeUUsTUFBQUMsU0FDQXRFLEtBQUF5M0IsWUFBQTlwQixNQUFBbkksS0FVQXBILE9BQUFDLGVBQUF1QixFQUFBMnhDLGVBQUFqeUMsVUFBQSxTQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUF5M0IsWUFBQVcsT0FFQTEzQixJQUFBLFNBQUEwM0IsR0FDQXA0QixLQUFBeTNCLFlBQUFXLFdBY0FoNkIsT0FBQUMsZUFBQXVCLEVBQUEyeEMsZUFBQWp5QyxVQUFBLFNBQ0FmLElBQUEsV0FDQSxHQUFBeUIsS0FBQXd4QyxjQUFBQyxFQUNBLE9BQUF6eEMsS0FBQXkzQixZQUFBOFYsU0FVQW52QyxPQUFBQyxlQUFBdUIsRUFBQTJ4QyxlQUFBanlDLFVBQUEsU0FDQWYsSUFBQSxXQUNBLEdBQUF5QixLQUFBd3hDLGNBQUFDLEVBQ0EsT0FBQXp4QyxLQUFBeTNCLFlBQUF6UixPQUdBdGxCLElBQUEsU0FBQXNsQixHQUNBaG1CLEtBQUF3eEMsY0FBQUMsSUFDQXp4QyxLQUFBeTNCLFlBQUF6UixZQWNBNW5CLE9BQUFDLGVBQUF1QixFQUFBMnhDLGVBQUFqeUMsVUFBQSxVQUNBZixJQUFBLFdBQ0EsR0FBQXlCLEtBQUF3eEMsY0FBQUMsRUFDQSxPQUFBenhDLEtBQUF5M0IsWUFBQStPLFFBR0E5bEMsSUFBQSxTQUFBOGxDLEdBQ0F4bUMsS0FBQXd4QyxjQUFBQyxJQUNBenhDLEtBQUF5M0IsWUFBQStPLGFBWUFwb0MsT0FBQUMsZUFBQXVCLEVBQUEyeEMsZUFBQWp5QyxVQUFBLGtCQUNBZixJQUFBLFdBQ0EsR0FBQXlCLEtBQUF3eEMsY0FBQUMsR0FBQXp4QyxLQUFBd3hDLGNBQUFDLEVBQ0EsT0FBQXp4QyxLQUFBeTNCLFlBQUFvWixnQkFHQW53QyxJQUFBLFNBQUFzeEMsR0FDQWh5QyxLQUFBd3hDLGNBQUFDLEdBQUF6eEMsS0FBQXd4QyxjQUFBQyxJQUNBenhDLEtBQUF5M0IsWUFBQW9aLGVBQUFtQixNQWFBNXpDLE9BQUFDLGVBQUF1QixFQUFBMnhDLGVBQUFqeUMsVUFBQSxtQkFDQWYsSUFBQSxXQUNBLEdBQUF5QixLQUFBd3hDLGNBQUFDLEVBQ0EsT0FBQXp4QyxLQUFBeTNCLFlBQUFtWixtQkFjQXh5QyxPQUFBQyxlQUFBdUIsRUFBQTJ4QyxlQUFBanlDLFVBQUEsZUFDQWYsSUFBQSxXQUNBLEdBQUF5QixLQUFBd3hDLGNBQUFDLEdBQUF6eEMsS0FBQXd4QyxjQUFBQyxFQUNBLE9BQUF6eEMsS0FBQXkzQixZQUFBcVosZUFpQkExeUMsT0FBQUMsZUFBQXVCLEVBQUEyeEMsZUFBQWp5QyxVQUFBLHVCQUNBZixJQUFBLFdBQ0EsR0FBQXlCLEtBQUF3eEMsY0FBQUMsRUFDQSxPQUFBenhDLEtBQUF5M0IsWUFBQStZLHVCQVFBNXdDLEVBQUEyeEMsZUFBQWp5QyxVQUFBbUIsUUFBQSxXQWFBLE9BWkFiLEVBQUFnekIsT0FBQXR6QixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBb0UsV0FDQSxZQUNBLFdBRUFwRSxLQUFBMmxCLE9BQUFsbEIsVUFDQVQsS0FBQTJsQixPQUFBLEtBQ0EzbEIsS0FBQW1aLFVBQUExWSxVQUNBVCxLQUFBbVosVUFBQSxLQUNBblosS0FBQXkzQixZQUFBaDNCLFVBQ0FULEtBQUF5M0IsWUFBQSxLQUNBejNCLEtBQUF3eEMsWUFBQSxLQUNBeHhDLE1BRUFKLEVBQUEyeEMsaUJBRUExeEMsRUFBQSxTQUFBRCxHQTZJQSxPQXJJQUEsRUFBQXF5QyxXQUFBLFNBQUFudkMsR0FFQUEsRUFBQWxELEVBQUFtRCxXQUFBRCxFQUFBbEQsRUFBQXF5QyxXQUFBenZDLFVBQ0E1QyxFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQU1BQSxLQUFBeXlCLFFBQUF6eUIsS0FBQTRRLE9BQUEsSUFBQWhSLEVBQUF3eUIsT0FBQXR2QixFQUFBdXZCLFFBUUFyeUIsS0FBQXF5QixPQUFBcnlCLEtBQUF5eUIsUUFBQUosT0FDQXJ5QixLQUFBa0UsVUFBQSxVQU9BbEUsS0FBQXV3QixxQkFFQTN3QixFQUFBOEYsT0FBQTlGLEVBQUFxeUMsV0FBQXJ5QyxFQUFBbVEsV0FLQW5RLEVBQUFxeUMsV0FBQXp2QyxVQUVBNnZCLE9BQUEsR0FRQXp5QixFQUFBcXlDLFdBQUEzeUMsVUFBQTJoQixjQUFBcmhCLEVBQUFxRSxLQUtBckUsRUFBQXF5QyxXQUFBM3lDLFVBQUFpaUIsZUFBQTNoQixFQUFBcUUsS0FlQXJFLEVBQUFxeUMsV0FBQTN5QyxVQUFBOHpCLEtBQUEsV0FHQSxPQUZBcHpCLEtBQUFreUMsWUFBQSxtQkFDQWx5QyxLQUFBa3lDLFlBQUEsb0JBQ0FseUMsTUFRQUosRUFBQXF5QyxXQUFBM3lDLFVBQUE0eUMsWUFBQSxTQUFBbitCLEVBQUFvK0IsR0FDQSxJQUFBQyxFQUFBcHlDLEtBQUEsYUFBQStULEdBQUEvVCxLQUFBK1QsR0FDQS9ULEtBQUErVCxHQUFBLFdBQ0EsSUFBQXRNLEVBQUEzRCxNQUFBeEUsVUFBQW9JLE1BQUE3SixLQUFBeUYsV0FDQThFLEVBQUFYLEVBQUEwcUMsR0FDQXBrQyxFQUFBbk8sRUFBQW1WLFVBQUFvYyxTQUFBLFNBQUF2eUIsR0FDQTZJLEVBQUEwcUMsR0FBQXZ6QyxFQUNBd3pDLEVBQUE5cUMsTUFBQXRILEtBQUF5SCxJQUNjdkksS0FBQWMsTUFBQW9JLEdBQ2RwSSxLQUFBdXdCLGlCQUFBM3RCLEtBQUFtTCxJQUNVN08sS0FBQWMsT0FNVkosRUFBQXF5QyxXQUFBM3lDLFVBQUFrMEIsT0FBQSxXQVNBLE9BUkF4ekIsS0FBQXV3QixpQkFBQTVtQixRQUFBLFNBQUFvRSxHQUNBbk8sRUFBQW1WLFVBQUFzYSxNQUFBdGhCLEtBRUEvTixLQUFBdXdCLG9CQUNBdndCLEtBQUFxeUMsMEJBQ0FyeUMsS0FBQWloQixjQUFBamhCLEtBQUFxeUMsd0JBQ0FyeUMsS0FBQXVoQixlQUFBdmhCLEtBQUFzeUMsMEJBRUF0eUMsTUFjQUosRUFBQXF5QyxXQUFBM3lDLFVBQUFraUIscUJBQUEsU0FBQXJMLEVBQUEwSCxFQUFBelYsRUFBQThZLEdBS0EsT0FKQTlZLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0F5VixFQUFBN2QsS0FBQXlULFVBQUFvSyxHQUNBN2QsS0FBQWloQixjQUFBOUssRUFBQS9OLEVBQUE4WSxHQUNBbGhCLEtBQUF1aEIsZUFBQW5aLEVBQUF5VixHQUNBN2QsTUFNQUosRUFBQXF5QyxXQUFBM3lDLFVBQUFtQixRQUFBLFdBUUEsT0FQQWIsRUFBQW1RLFVBQUF6USxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBeXlCLFFBQUFoeUIsVUFDQVQsS0FBQXl5QixRQUFBLEtBQ0F6eUIsS0FBQW9FLFdBQUEsV0FDQXBFLEtBQUFxeUIsT0FBQSxLQUNBcnlCLEtBQUF3ekIsU0FDQXh6QixLQUFBdXdCLGlCQUFBLEtBQ0F2d0IsTUFFQUosRUFBQXF5QyxhQUVBcHlDLEVBQUEsU0FBQUQsR0E2R0EsT0FsR0FBLEVBQUEyeUMsV0FBQSxTQUFBenZDLEdBRUFBLEVBQUFsRCxFQUFBbUQsV0FBQUQsRUFBQWxELEVBQUEyeUMsV0FBQS92QyxVQUNBNUMsRUFBQXF5QyxXQUFBcDBDLEtBQUFtQyxLQUFBOEMsR0FLQTlDLEtBQUF3eUMsV0FBQTF2QyxFQUFBMHZDLFlBRUE1eUMsRUFBQThGLE9BQUE5RixFQUFBMnlDLFdBQUEzeUMsRUFBQXF5QyxZQU1BcnlDLEVBQUEyeUMsV0FBQS92QyxVQUFpQ2d3QyxXQUFBLEdBaUJqQzV5QyxFQUFBMnlDLFdBQUFqekMsVUFBQTJoQixjQUFBLFNBQUE5SyxFQUFBL04sRUFBQThZLEdBSUEsT0FIQTlZLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0FwSSxLQUFBeXlDLHVCQUFBcnFDLEVBQUE4WSxHQUNBbGhCLEtBQUEweUMsUUFBQXY4QixFQUFBL04sR0FDQXBJLE1BU0FKLEVBQUEyeUMsV0FBQWp6QyxVQUFBaWlCLGVBQUEsU0FBQW5aLEdBR0EsT0FGQUEsRUFBQXBJLEtBQUF5VCxVQUFBckwsR0FDQXBJLEtBQUEyeUMsd0JBQUF2cUMsR0FDQXBJLE1BT0FKLEVBQUEyeUMsV0FBQWp6QyxVQUFBbXpDLHVCQUFBLGFBT0E3eUMsRUFBQTJ5QyxXQUFBanpDLFVBQUFxekMsd0JBQUEsYUFRQS95QyxFQUFBMnlDLFdBQUFqekMsVUFBQXN6QyxlQUFBLFNBQUF4cUMsR0FFQSxPQURBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQTZ5QyxTQUFBajNCLGVBQUF4VCxJQWVBeEksRUFBQTJ5QyxXQUFBanpDLFVBQUFvekMsUUFBQSxTQUFBdjhCLEVBQUEvTixHQUVBLEdBREFBLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0FwSSxLQUFBd3lDLFdBQUEsR0FBQXh5QyxLQUFBNHlDLGVBQUF4cUMsR0FBQSxLQUNBLElBQUEwcUMsRUFBQTl5QyxLQUFBeVQsVUFBQXpULEtBQUF3eUMsWUFDQXh5QyxLQUFBbVosVUFBQW1FLGtCQUFBbkgsRUFBQTI4QixFQUFBMXFDLFFBRUFwSSxLQUFBbVosVUFBQTRDLGVBQUE1RixFQUFBL04sR0FFQSxPQUFBcEksTUFFQUosRUFBQTJ5QyxhQUVBMXlDLEVBQUEsU0FBQUQsR0FrSEEsT0FuR0FBLEVBQUFtekMsTUFBQSxTQUFBandDLEdBRUFBLEVBQUFsRCxFQUFBbUQsV0FBQUQsRUFBQWxELEVBQUFtekMsTUFBQXZ3QyxVQUNBNUMsRUFBQTJ5QyxXQUFBMTBDLEtBQUFtQyxLQUFBOEMsR0FLQTlDLEtBQUFnekMsV0FBQSxJQUFBcHpDLEVBQUEyeEMsZUFBQXp1QyxFQUFBa3dDLFlBTUFoekMsS0FBQW1aLFVBQUFuWixLQUFBZ3pDLFdBQUE3NUIsVUFNQW5aLEtBQUEybEIsT0FBQTNsQixLQUFBZ3pDLFdBQUFydEIsT0FLQTNsQixLQUFBNnlDLFNBQUEsSUFBQWp6QyxFQUFBa2pCLGtCQUFBaGdCLEVBQUErdkMsVUFFQTd5QyxLQUFBZ3pDLFdBQUE3aEMsTUFBQW5SLEtBQUE2eUMsU0FBQTd5QyxLQUFBNFEsUUFDQTVRLEtBQUFrRSxXQUNBLGFBQ0EsWUFDQSxTQUNBLGNBR0F0RSxFQUFBOEYsT0FBQTlGLEVBQUFtekMsTUFBQW56QyxFQUFBMnlDLFlBTUEzeUMsRUFBQW16QyxNQUFBdndDLFVBQ0F3d0MsWUFBd0Iva0MsS0FBQSxZQUN4QjRrQyxVQUNBeHlCLE9BQUEsS0FDQUMsTUFBQSxHQUNBQyxRQUFBLEdBQ0FDLFFBQUEsSUFVQTVnQixFQUFBbXpDLE1BQUF6ekMsVUFBQW16Qyx1QkFBQSxTQUFBcnFDLEVBQUE4WSxHQVFBLE9BTkFsaEIsS0FBQTZ5QyxTQUFBNXhCLGNBQUE3WSxFQUFBOFksR0FDQWxoQixLQUFBZ3pDLFdBQUFybEMsTUFBQXZGLEdBRUEsSUFBQXBJLEtBQUE2eUMsU0FBQXR5QixTQUNBdmdCLEtBQUFnekMsV0FBQTN6QixLQUFBalgsRUFBQXBJLEtBQUE2eUMsU0FBQXh5QixPQUFBcmdCLEtBQUE2eUMsU0FBQXZ5QixPQUVBdGdCLE1BUUFKLEVBQUFtekMsTUFBQXp6QyxVQUFBcXpDLHdCQUFBLFNBQUF2cUMsR0FJQSxPQUhBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQTZ5QyxTQUFBdHhCLGVBQUFuWixHQUNBcEksS0FBQWd6QyxXQUFBM3pCLEtBQUFqWCxFQUFBcEksS0FBQTZ5QyxTQUFBcnlCLFNBQ0F4Z0IsTUFNQUosRUFBQW16QyxNQUFBenpDLFVBQUFtQixRQUFBLFdBY0EsT0FiQWIsRUFBQTJ5QyxXQUFBanpDLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFvRSxXQUNBLGFBQ0EsWUFDQSxTQUNBLGFBRUFwRSxLQUFBZ3pDLFdBQUF2eUMsVUFDQVQsS0FBQWd6QyxXQUFBLEtBQ0FoekMsS0FBQTZ5QyxTQUFBcHlDLFVBQ0FULEtBQUE2eUMsU0FBQSxLQUNBN3lDLEtBQUFtWixVQUFBLEtBQ0FuWixLQUFBMmxCLE9BQUEsS0FDQTNsQixNQUVBSixFQUFBbXpDLFFBRUFsekMsRUFBQSxTQUFBRCxHQWlNQSxPQS9LQUEsRUFBQXF6QyxRQUFBLFNBQUFud0MsR0FDQUEsRUFBQWxELEVBQUFtRCxXQUFBRCxFQUFBbEQsRUFBQXF6QyxRQUFBendDLFVBQ0E1QyxFQUFBMnlDLFdBQUExMEMsS0FBQW1DLEtBQUE4QyxHQU1BOUMsS0FBQTJ3QyxTQUFBLElBQUEvd0MsRUFBQW16QyxNQUNBL3lDLEtBQUEyd0MsU0FBQXRlLE9BQUExekIsT0FBQSxHQUtBcUIsS0FBQWd6QyxXQUFBaHpDLEtBQUEyd0MsU0FBQXFDLFdBS0FoekMsS0FBQTZ5QyxTQUFBN3lDLEtBQUEyd0MsU0FBQWtDLFNBQUFueUMsSUFBQW9DLEVBQUErdkMsVUFNQTd5QyxLQUFBeXdDLFdBQUEsSUFBQTd3QyxFQUFBbXpDLE1BQ0EveUMsS0FBQXl3QyxXQUFBcGUsT0FBQTF6QixPQUFBLEdBTUFxQixLQUFBa3pDLFdBQUFsekMsS0FBQXl3QyxXQUFBdUMsV0FBQXR5QyxJQUFBb0MsRUFBQW93QyxZQUtBbHpDLEtBQUFtekMsbUJBQUFuekMsS0FBQXl3QyxXQUFBb0MsU0FBQW55QyxJQUFBb0MsRUFBQXF3QyxvQkFNQW56QyxLQUFBbVosVUFBQSxJQUFBdlosRUFBQWdDLE9BQUEsSUFBQWhDLEVBQUE2TyxLQUFBc0gsV0FNQS9WLEtBQUEybEIsT0FBQSxJQUFBL2xCLEVBQUFnQyxPQUFBa0IsRUFBQTZpQixPQUFBL2xCLEVBQUE2TyxLQUFBdU0sT0FVQWhiLEtBQUE4d0MsWUFBQSxJQUFBbHhDLEVBQUE4a0IsU0FBQTVoQixFQUFBZ3VDLGFBQ0E5d0MsS0FBQTh3QyxZQUFBMzlCLE1BQUF2VCxFQUFBNk8sS0FBQXFNLFNBTUE5YSxLQUFBaXhDLGlCQUFBLElBQUFyeEMsRUFBQTg1QixZQU1BMTVCLEtBQUErd0MsZ0JBQUEsSUFBQW54QyxFQUFBbWIsS0FFQS9hLEtBQUFtWixVQUFBM1YsUUFBQXhELEtBQUEyd0MsU0FBQXgzQixXQUNBblosS0FBQW1aLFVBQUFoSSxNQUFBblIsS0FBQTh3QyxZQUFBOXdDLEtBQUF5d0MsV0FBQXQzQixXQUNBblosS0FBQTJsQixPQUFBdlUsSUFBQXBSLEtBQUEyd0MsU0FBQWhyQixPQUFBM2xCLEtBQUF5d0MsV0FBQTlxQixRQUNBM2xCLEtBQUF5d0MsV0FBQXQvQixNQUFBblIsS0FBQWl4QyxpQkFBQWp4QyxLQUFBK3dDLGdCQUFBNXJDLE1BQ0FuRixLQUFBMndDLFNBQUF4L0IsTUFBQW5SLEtBQUErd0MsZ0JBQUEvd0MsS0FBQTRRLFFBQ0E1USxLQUFBa0UsV0FDQSxZQUNBLGNBQ0EsYUFDQSxXQUNBLGFBQ0EscUJBQ0EsWUFHQXRFLEVBQUE4RixPQUFBOUYsRUFBQXF6QyxRQUFBcnpDLEVBQUEyeUMsWUFLQTN5QyxFQUFBcXpDLFFBQUF6d0MsVUFDQXN1QyxZQUFBLEVBQ0FuckIsT0FBQSxFQUNBcXRCLFlBQXdCL2tDLEtBQUEsUUFDeEI0a0MsVUFDQXh5QixPQUFBLElBQ0FDLE1BQUEsSUFDQUMsUUFBQSxFQUNBQyxRQUFBLElBRUEweUIsWUFBd0JqbEMsS0FBQSxVQUN4QmtsQyxvQkFDQTl5QixPQUFBLEdBQ0FDLE1BQUEsRUFDQUMsUUFBQSxFQUNBQyxRQUFBLEtBV0E1Z0IsRUFBQXF6QyxRQUFBM3pDLFVBQUFtekMsdUJBQUEsU0FBQXJxQyxFQUFBOFksR0FNQSxPQUpBOVksRUFBQXBJLEtBQUF5VCxVQUFBckwsR0FFQXBJLEtBQUEyd0MsU0FBQThCLHVCQUFBcnFDLEVBQUE4WSxHQUNBbGhCLEtBQUF5d0MsV0FBQWdDLHVCQUFBcnFDLEdBQ0FwSSxNQVNBSixFQUFBcXpDLFFBQUEzekMsVUFBQXF6Qyx3QkFBQSxTQUFBdnFDLEdBR0EsT0FGQXBJLEtBQUEyd0MsU0FBQWdDLHdCQUFBdnFDLEdBQ0FwSSxLQUFBeXdDLFdBQUFrQyx3QkFBQXZxQyxHQUNBcEksTUFNQUosRUFBQXF6QyxRQUFBM3pDLFVBQUFtQixRQUFBLFdBNkJBLE9BNUJBYixFQUFBMnlDLFdBQUFqekMsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQW9FLFdBQ0EsWUFDQSxjQUNBLGFBQ0EsV0FDQSxhQUNBLHFCQUNBLFdBRUFwRSxLQUFBMndDLFNBQUFsd0MsVUFDQVQsS0FBQTJ3QyxTQUFBLEtBQ0Ezd0MsS0FBQXl3QyxXQUFBaHdDLFVBQ0FULEtBQUF5d0MsV0FBQSxLQUNBendDLEtBQUFtWixVQUFBMVksVUFDQVQsS0FBQW1aLFVBQUEsS0FDQW5aLEtBQUEybEIsT0FBQWxsQixVQUNBVCxLQUFBMmxCLE9BQUEsS0FDQTNsQixLQUFBOHdDLFlBQUFyd0MsVUFDQVQsS0FBQTh3QyxZQUFBLEtBQ0E5d0MsS0FBQWl4QyxpQkFBQXh3QyxVQUNBVCxLQUFBaXhDLGlCQUFBLEtBQ0FqeEMsS0FBQSt3QyxnQkFBQXR3QyxVQUNBVCxLQUFBK3dDLGdCQUFBLEtBQ0Evd0MsS0FBQWd6QyxXQUFBLEtBQ0FoekMsS0FBQTZ5QyxTQUFBLEtBQ0E3eUMsS0FBQW16QyxtQkFBQSxLQUNBbnpDLEtBQUFrekMsV0FBQSxLQUNBbHpDLE1BRUFKLEVBQUFxekMsVUFFQXB6QyxFQUFBLFNBQUFELEdBK0pBLE9BeElBQSxFQUFBd3pDLFVBQUEsU0FBQXR3QyxHQUVBQSxFQUFBbEQsRUFBQW1ELFdBQUFELEVBQUFsRCxFQUFBd3pDLFVBQUE1d0MsVUFDQTVDLEVBQUEyeUMsV0FBQTEwQyxLQUFBbUMsS0FBQThDLEdBS0E5QyxLQUFBZ3pDLFdBQUEsSUFBQXB6QyxFQUFBMnhDLGVBQUF6dUMsRUFBQWt3QyxZQU1BaHpDLEtBQUFtWixVQUFBblosS0FBQWd6QyxXQUFBNzVCLFVBTUFuWixLQUFBMmxCLE9BQUEzbEIsS0FBQWd6QyxXQUFBcnRCLE9BS0EzbEIsS0FBQWltQixPQUFBLElBQUFybUIsRUFBQTZsQixPQUFBM2lCLEVBQUFtakIsUUFLQWptQixLQUFBcXpDLGVBQUEsSUFBQXp6QyxFQUFBbXBCLGtCQUFBam1CLEVBQUF1d0MsZ0JBS0FyekMsS0FBQTZ5QyxTQUFBLElBQUFqekMsRUFBQWtqQixrQkFBQWhnQixFQUFBK3ZDLFVBRUE3eUMsS0FBQWd6QyxXQUFBN2hDLE1BQUFuUixLQUFBaW1CLE9BQUFqbUIsS0FBQTZ5QyxTQUFBN3lDLEtBQUE0USxRQUVBNVEsS0FBQXF6QyxlQUFBN3ZDLFFBQUF4RCxLQUFBaW1CLE9BQUE5TSxXQUNBblosS0FBQWtFLFdBQ0EsYUFDQSxZQUNBLFNBQ0EsU0FDQSxpQkFDQSxjQUdBdEUsRUFBQThGLE9BQUE5RixFQUFBd3pDLFVBQUF4ekMsRUFBQTJ5QyxZQU1BM3lDLEVBQUF3ekMsVUFBQTV3QyxVQUNBMlcsVUFBQSxLQUNBd00sT0FBQSxFQUNBcXRCLFlBQXdCL2tDLEtBQUEsVUFDeEJnWSxRQUNBTCxFQUFBLEVBQ0EzWCxLQUFBLFVBQ0E2WCxTQUFBLElBRUErc0IsVUFDQXh5QixPQUFBLEtBQ0FDLE1BQUEsR0FDQUMsUUFBQSxHQUNBQyxRQUFBLEdBRUE2eUIsZ0JBQ0FoekIsT0FBQSxJQUNBQyxNQUFBLEdBQ0FDLFFBQUEsR0FDQUMsUUFBQSxFQUNBMEksY0FBQSxJQUNBRCxRQUFBLEVBQ0F2QixTQUFBLElBVUE5bkIsRUFBQXd6QyxVQUFBOXpDLFVBQUFtekMsdUJBQUEsU0FBQXJxQyxFQUFBOFksR0FTQSxPQVJBOVksRUFBQXBJLEtBQUF5VCxVQUFBckwsR0FFQXBJLEtBQUE2eUMsU0FBQTV4QixjQUFBN1ksRUFBQThZLEdBQ0FsaEIsS0FBQXF6QyxlQUFBcHlCLGNBQUE3WSxHQUNBcEksS0FBQWd6QyxXQUFBcmxDLE1BQUF2RixHQUNBLElBQUFwSSxLQUFBNnlDLFNBQUF0eUIsU0FDQXZnQixLQUFBZ3pDLFdBQUEzekIsS0FBQWpYLEVBQUFwSSxLQUFBNnlDLFNBQUF4eUIsT0FBQXJnQixLQUFBNnlDLFNBQUF2eUIsT0FFQXRnQixNQVFBSixFQUFBd3pDLFVBQUE5ekMsVUFBQXF6Qyx3QkFBQSxTQUFBdnFDLEdBSUEsT0FIQXBJLEtBQUE2eUMsU0FBQXR4QixlQUFBblosR0FDQXBJLEtBQUFxekMsZUFBQTl4QixlQUFBblosR0FDQXBJLEtBQUFnekMsV0FBQTN6QixLQUFBalgsRUFBQXBJLEtBQUE2eUMsU0FBQXJ5QixTQUNBeGdCLE1BTUFKLEVBQUF3ekMsVUFBQTl6QyxVQUFBbUIsUUFBQSxXQW9CQSxPQW5CQWIsRUFBQTJ5QyxXQUFBanpDLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFvRSxXQUNBLGFBQ0EsWUFDQSxTQUNBLFNBQ0EsaUJBQ0EsYUFFQXBFLEtBQUFnekMsV0FBQXZ5QyxVQUNBVCxLQUFBZ3pDLFdBQUEsS0FDQWh6QyxLQUFBNnlDLFNBQUFweUMsVUFDQVQsS0FBQTZ5QyxTQUFBLEtBQ0E3eUMsS0FBQXF6QyxlQUFBNXlDLFVBQ0FULEtBQUFxekMsZUFBQSxLQUNBcnpDLEtBQUFpbUIsT0FBQXhsQixVQUNBVCxLQUFBaW1CLE9BQUEsS0FDQWptQixLQUFBbVosVUFBQSxLQUNBblosS0FBQTJsQixPQUFBLEtBQ0EzbEIsTUFFQUosRUFBQXd6QyxZQUVBdnpDLEVBQUEsU0FBQUQsR0FvTUEsT0FwTEFBLEVBQUEwekMsU0FBQSxTQUFBeHdDLEdBQ0FBLEVBQUFsRCxFQUFBbUQsV0FBQUQsRUFBQWxELEVBQUEwekMsU0FBQTl3QyxVQUNBNUMsRUFBQTJ5QyxXQUFBMTBDLEtBQUFtQyxLQUFBOEMsR0FLQTlDLEtBQUF1ekMsT0FBQSxJQUFBM3pDLEVBQUF3ekMsVUFBQXR3QyxFQUFBeXdDLFFBQ0F2ekMsS0FBQXV6QyxPQUFBbGhCLE9BQUExekIsT0FBQSxHQUtBcUIsS0FBQXd6QyxPQUFBLElBQUE1ekMsRUFBQXd6QyxVQUFBdHdDLEVBQUEwd0MsUUFDQXh6QyxLQUFBd3pDLE9BQUFuaEIsT0FBQTF6QixPQUFBLEdBTUFxQixLQUFBeXpDLFNBQUEsSUFBQTd6QyxFQUFBazZCLElBQUFoM0IsRUFBQTR3QyxhQUFBLE9BQ0ExekMsS0FBQXl6QyxTQUFBOWxDLFFBTUEzTixLQUFBMHpDLFlBQUExekMsS0FBQXl6QyxTQUFBdDZCLFVBTUFuWixLQUFBMnpDLGFBQUEsSUFBQS96QyxFQUFBbWIsS0FBQWpZLEVBQUE4d0MsY0FBQWgwQyxFQUFBNk8sS0FBQXFNLFVBTUE5YSxLQUFBNHpDLGNBQUE1ekMsS0FBQTJ6QyxhQUFBeHVDLEtBTUFuRixLQUFBbVosVUFBQSxJQUFBdlosRUFBQWdDLE9BQUEsSUFBQWhDLEVBQUE2TyxLQUFBc0gsV0FVQS9WLEtBQUE4d0MsWUFBQSxJQUFBbHhDLEVBQUE4a0IsU0FBQTVoQixFQUFBZ3VDLGFBQ0E5d0MsS0FBQTh3QyxZQUFBMzlCLE1BQUF2VCxFQUFBNk8sS0FBQXFNLFNBRUE5YSxLQUFBbVosVUFBQTNWLFFBQUF4RCxLQUFBdXpDLE9BQUFwNkIsV0FDQW5aLEtBQUFtWixVQUFBaEksTUFBQW5SLEtBQUE4d0MsWUFBQTl3QyxLQUFBd3pDLE9BQUFyNkIsV0FDQW5aLEtBQUF5ekMsU0FBQWp3QyxRQUFBeEQsS0FBQTJ6QyxjQUNBM3pDLEtBQUEyekMsYUFBQXZpQyxJQUFBcFIsS0FBQXV6QyxPQUFBNXRCLE9BQUEzbEIsS0FBQXd6QyxPQUFBN3RCLFFBQ0EzbEIsS0FBQXV6QyxPQUFBL3ZDLFFBQUF4RCxLQUFBNFEsUUFDQTVRLEtBQUF3ekMsT0FBQWh3QyxRQUFBeEQsS0FBQTRRLFFBQ0E1USxLQUFBa0UsV0FDQSxTQUNBLFNBQ0EsWUFDQSxnQkFDQSxpQkFHQXRFLEVBQUE4RixPQUFBOUYsRUFBQTB6QyxTQUFBMXpDLEVBQUEyeUMsWUFLQTN5QyxFQUFBMHpDLFNBQUE5d0MsVUFDQW94QyxjQUFBLEdBQ0FGLFlBQUEsRUFDQTVDLFlBQUEsSUFDQXlDLFFBQ0FsaEIsUUFBQSxHQUNBbWdCLFdBQUEsRUFDQVEsWUFBNEIva0MsS0FBQSxRQUM1Qm9sQyxnQkFDQWh6QixPQUFBLElBQ0FDLE1BQUEsRUFDQUMsUUFBQSxFQUNBQyxRQUFBLElBRUFxeUIsVUFDQXh5QixPQUFBLElBQ0FDLE1BQUEsRUFDQUMsUUFBQSxFQUNBQyxRQUFBLEtBR0FnekIsUUFDQW5oQixRQUFBLEdBQ0FtZ0IsV0FBQSxFQUNBUSxZQUE0Qi9rQyxLQUFBLFFBQzVCb2xDLGdCQUNBaHpCLE9BQUEsSUFDQUMsTUFBQSxFQUNBQyxRQUFBLEVBQ0FDLFFBQUEsSUFFQXF5QixVQUNBeHlCLE9BQUEsSUFDQUMsTUFBQSxFQUNBQyxRQUFBLEVBQ0FDLFFBQUEsTUFZQTVnQixFQUFBMHpDLFNBQUFoMEMsVUFBQW16Qyx1QkFBQSxTQUFBcnFDLEVBQUE4WSxHQUlBLE9BSEE5WSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQXV6QyxPQUFBZCx1QkFBQXJxQyxFQUFBOFksR0FDQWxoQixLQUFBd3pDLE9BQUFmLHVCQUFBcnFDLEVBQUE4WSxHQUNBbGhCLE1BU0FKLEVBQUEwekMsU0FBQWgwQyxVQUFBcXpDLHdCQUFBLFNBQUF2cUMsR0FHQSxPQUZBcEksS0FBQXV6QyxPQUFBWix3QkFBQXZxQyxHQUNBcEksS0FBQXd6QyxPQUFBYix3QkFBQXZxQyxHQUNBcEksTUFRQUosRUFBQTB6QyxTQUFBaDBDLFVBQUFzekMsZUFBQSxTQUFBeHFDLEdBQ0EsT0FBQXBJLEtBQUF1ekMsT0FBQVgsZUFBQXhxQyxHQUFBcEksS0FBQXd6QyxPQUFBWixlQUFBeHFDLElBQUEsR0FNQXhJLEVBQUEwekMsU0FBQWgwQyxVQUFBbUIsUUFBQSxXQXVCQSxPQXRCQWIsRUFBQTJ5QyxXQUFBanpDLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFvRSxXQUNBLFNBQ0EsU0FDQSxZQUNBLGdCQUNBLGdCQUVBcEUsS0FBQXV6QyxPQUFBOXlDLFVBQ0FULEtBQUF1ekMsT0FBQSxLQUNBdnpDLEtBQUF3ekMsT0FBQS95QyxVQUNBVCxLQUFBd3pDLE9BQUEsS0FDQXh6QyxLQUFBbVosVUFBQTFZLFVBQ0FULEtBQUFtWixVQUFBLEtBQ0FuWixLQUFBMnpDLGFBQUFsekMsVUFDQVQsS0FBQTJ6QyxhQUFBLEtBQ0EzekMsS0FBQXl6QyxTQUFBLEtBQ0F6ekMsS0FBQTh3QyxZQUFBcndDLFVBQ0FULEtBQUE4d0MsWUFBQSxLQUNBOXdDLEtBQUE0ekMsY0FBQW56QyxVQUNBVCxLQUFBNHpDLGNBQUEsS0FDQTV6QyxLQUFBMHpDLFlBQUEsS0FDQTF6QyxNQUVBSixFQUFBMHpDLFdBRUF6ekMsRUFBQSxTQUFBRCxHQXdNQSxPQXZMQUEsRUFBQWkwQyxRQUFBLFNBQUEvd0MsR0FDQUEsRUFBQWxELEVBQUFtRCxXQUFBRCxFQUFBbEQsRUFBQWkwQyxRQUFBcnhDLFVBQ0E1QyxFQUFBMnlDLFdBQUExMEMsS0FBQW1DLEtBQUE4QyxHQU1BOUMsS0FBQTJ3QyxTQUFBLElBQUEvd0MsRUFBQW16QyxNQUFBandDLEVBQUFneEMsU0FDQTl6QyxLQUFBMndDLFNBQUF0ZSxPQUFBMXpCLE9BQUEsR0FLQXFCLEtBQUFnekMsV0FBQWh6QyxLQUFBMndDLFNBQUFxQyxXQUtBaHpDLEtBQUE2eUMsU0FBQTd5QyxLQUFBMndDLFNBQUFrQyxTQUFBbnlDLElBQUFvQyxFQUFBK3ZDLFVBTUE3eUMsS0FBQXl3QyxXQUFBLElBQUE3d0MsRUFBQW16QyxNQUFBandDLEVBQUFpeEMsV0FDQS96QyxLQUFBeXdDLFdBQUFwZSxPQUFBMXpCLE9BQUEsR0FNQXFCLEtBQUFrekMsV0FBQWx6QyxLQUFBeXdDLFdBQUF1QyxXQUFBdHlDLElBQUFvQyxFQUFBb3dDLFlBS0FsekMsS0FBQW16QyxtQkFBQW56QyxLQUFBeXdDLFdBQUFvQyxTQUFBbnlDLElBQUFvQyxFQUFBcXdDLG9CQU1BbnpDLEtBQUFtWixVQUFBLElBQUF2WixFQUFBZ0MsT0FBQSxJQUFBaEMsRUFBQTZPLEtBQUFzSCxXQU1BL1YsS0FBQTJsQixPQUFBLElBQUEvbEIsRUFBQWdDLE9BQUFrQixFQUFBNmlCLE9BQUEvbEIsRUFBQTZPLEtBQUF1TSxPQVVBaGIsS0FBQTh3QyxZQUFBLElBQUFseEMsRUFBQThrQixTQUFBNWhCLEVBQUFndUMsYUFDQTl3QyxLQUFBOHdDLFlBQUEzOUIsTUFBQXZULEVBQUE2TyxLQUFBcU0sU0FRQTlhLEtBQUE0d0MsZ0JBQUEsSUFBQWh4QyxFQUFBOGtCLFNBQUE1aEIsRUFBQTh0QyxpQkFDQTV3QyxLQUFBNHdDLGdCQUFBejlCLE1BQUF2VCxFQUFBNk8sS0FBQXFNLFNBTUE5YSxLQUFBK3dDLGdCQUFBLElBQUFueEMsRUFBQW1iLEtBQUEsR0FFQS9hLEtBQUFtWixVQUFBM1YsUUFBQXhELEtBQUEyd0MsU0FBQXgzQixXQUNBblosS0FBQW1aLFVBQUFoSSxNQUFBblIsS0FBQTh3QyxZQUFBOXdDLEtBQUF5d0MsV0FBQXQzQixXQUNBblosS0FBQW1aLFVBQUFoSSxNQUFBblIsS0FBQTR3QyxnQkFBQTV3QyxLQUFBK3dDLGlCQUNBL3dDLEtBQUEybEIsT0FBQXZVLElBQUFwUixLQUFBMndDLFNBQUFockIsT0FBQTNsQixLQUFBeXdDLFdBQUE5cUIsUUFDQTNsQixLQUFBeXdDLFdBQUFqdEMsUUFBQXhELEtBQUErd0MsZ0JBQUE1ckMsTUFDQW5GLEtBQUErd0MsZ0JBQUF2dEMsUUFBQXhELEtBQUEyd0MsU0FBQXgzQixXQUNBblosS0FBQTJ3QyxTQUFBbnRDLFFBQUF4RCxLQUFBNFEsUUFDQTVRLEtBQUFrRSxXQUNBLFlBQ0EsY0FDQSxrQkFDQSxhQUNBLFdBQ0EsYUFDQSxxQkFDQSxZQUdBdEUsRUFBQThGLE9BQUE5RixFQUFBaTBDLFFBQUFqMEMsRUFBQTJ5QyxZQUtBM3lDLEVBQUFpMEMsUUFBQXJ4QyxVQUNBc3VDLFlBQUEsRUFDQUYsZ0JBQUEsR0FDQWpyQixPQUFBLEVBQ0FxdEIsWUFBd0Iva0MsS0FBQSxRQUN4QjRrQyxVQUNBeHlCLE9BQUEsSUFDQUMsTUFBQSxJQUNBQyxRQUFBLEVBQ0FDLFFBQUEsSUFFQTB5QixZQUF3QmpsQyxLQUFBLFVBQ3hCa2xDLG9CQUNBOXlCLE9BQUEsR0FDQUMsTUFBQSxFQUNBQyxRQUFBLEVBQ0FDLFFBQUEsS0FXQTVnQixFQUFBaTBDLFFBQUF2MEMsVUFBQW16Qyx1QkFBQSxTQUFBcnFDLEVBQUE4WSxHQUtBLE9BSkE5WSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUVBcEksS0FBQTJ3QyxTQUFBOEIsdUJBQUFycUMsRUFBQThZLEdBQ0FsaEIsS0FBQXl3QyxXQUFBZ0MsdUJBQUFycUMsR0FDQXBJLE1BU0FKLEVBQUFpMEMsUUFBQXYwQyxVQUFBcXpDLHdCQUFBLFNBQUF2cUMsR0FJQSxPQUhBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQTJ3QyxTQUFBZ0Msd0JBQUF2cUMsR0FDQXBJLEtBQUF5d0MsV0FBQWtDLHdCQUFBdnFDLEdBQ0FwSSxNQU1BSixFQUFBaTBDLFFBQUF2MEMsVUFBQW1CLFFBQUEsV0E4QkEsT0E3QkFiLEVBQUEyeUMsV0FBQWp6QyxVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBb0UsV0FDQSxZQUNBLGNBQ0Esa0JBQ0EsYUFDQSxXQUNBLGFBQ0EscUJBQ0EsV0FFQXBFLEtBQUEyd0MsU0FBQWx3QyxVQUNBVCxLQUFBMndDLFNBQUEsS0FDQTN3QyxLQUFBeXdDLFdBQUFod0MsVUFDQVQsS0FBQXl3QyxXQUFBLEtBQ0F6d0MsS0FBQW1aLFVBQUExWSxVQUNBVCxLQUFBbVosVUFBQSxLQUNBblosS0FBQTJsQixPQUFBbGxCLFVBQ0FULEtBQUEybEIsT0FBQSxLQUNBM2xCLEtBQUE0d0MsZ0JBQUFud0MsVUFDQVQsS0FBQTR3QyxnQkFBQSxLQUNBNXdDLEtBQUE4d0MsWUFBQXJ3QyxVQUNBVCxLQUFBOHdDLFlBQUEsS0FDQTl3QyxLQUFBK3dDLGdCQUFBdHdDLFVBQ0FULEtBQUErd0MsZ0JBQUEsS0FDQS93QyxLQUFBZ3pDLFdBQUEsS0FDQWh6QyxLQUFBNnlDLFNBQUEsS0FDQTd5QyxLQUFBbXpDLG1CQUFBLEtBQ0FuekMsS0FBQWt6QyxXQUFBLEtBQ0FsekMsTUFFQUosRUFBQWkwQyxVQUVBaDBDLEVBQUEsU0FBQUQsR0FpSEEsT0E5RkFBLEVBQUFvMEMsY0FBQSxTQUFBbHhDLEdBQ0FBLEVBQUFsRCxFQUFBbUQsV0FBQUQsRUFBQWxELEVBQUFvMEMsY0FBQXh4QyxVQUNBNUMsRUFBQXF5QyxXQUFBcDBDLEtBQUFtQyxLQUFBOEMsR0FLQTlDLEtBQUFnekMsV0FBQSxJQUFBcHpDLEVBQUEyeEMsZUFBQXp1QyxFQUFBa3dDLFlBS0FoekMsS0FBQTZ5QyxTQUFBLElBQUFqekMsRUFBQWtqQixrQkFBQWhnQixFQUFBK3ZDLFVBS0E3eUMsS0FBQWlwQixRQUFBbm1CLEVBQUFtbUIsUUFLQWpwQixLQUFBaTBDLFdBQUFueEMsRUFBQW14QyxXQUNBajBDLEtBQUFnekMsV0FBQTdoQyxNQUFBblIsS0FBQTZ5QyxTQUFBN3lDLEtBQUE0USxRQUNBNVEsS0FBQWtFLFdBQ0EsYUFDQSxjQUdBdEUsRUFBQThGLE9BQUE5RixFQUFBbzBDLGNBQUFwMEMsRUFBQXF5QyxZQUtBcnlDLEVBQUFvMEMsY0FBQXh4QyxVQUNBeXhDLFdBQUEsSUFDQWhyQixRQUFBLEdBQ0ErcEIsWUFBd0Iva0MsS0FBQSxRQUN4QjRrQyxVQUNBeHlCLE9BQUEsS0FDQUMsTUFBQSxHQUNBQyxRQUFBLElBQ0FDLFFBQUEsSUFDQUksWUFBQSxnQkFhQWhoQixFQUFBbzBDLGNBQUExMEMsVUFBQTJoQixjQUFBLFNBQUE5SyxFQUFBL04sRUFBQThZLEdBQ0E5WSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUVBLElBQUE4ckMsR0FEQS85QixFQUFBblcsS0FBQTJULFlBQUF3QyxJQUNBblcsS0FBQWlwQixRQUtBLE9BSkFqcEIsS0FBQWd6QyxXQUFBNzVCLFVBQUE0QyxlQUFBbTRCLEVBQUE5ckMsR0FDQXBJLEtBQUFnekMsV0FBQTc1QixVQUFBa0UsNkJBQUFsSCxFQUFBL04sRUFBQXBJLEtBQUF5VCxVQUFBelQsS0FBQWkwQyxhQUNBajBDLEtBQUE2eUMsU0FBQTV4QixjQUFBN1ksRUFBQThZLEdBQ0FsaEIsS0FBQWd6QyxXQUFBcmxDLE1BQUF2RixHQUNBcEksTUFRQUosRUFBQW8wQyxjQUFBMTBDLFVBQUFpaUIsZUFBQSxTQUFBblosR0FJQSxPQUhBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQTZ5QyxTQUFBdHhCLGVBQUFuWixHQUNBcEksS0FBQWd6QyxXQUFBM3pCLEtBQUFqWCxFQUFBcEksS0FBQTZ5QyxTQUFBcnlCLFNBQ0F4Z0IsTUFNQUosRUFBQW8wQyxjQUFBMTBDLFVBQUFtQixRQUFBLFdBVUEsT0FUQWIsRUFBQXF5QyxXQUFBM3lDLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFvRSxXQUNBLGFBQ0EsYUFFQXBFLEtBQUFnekMsV0FBQXZ5QyxVQUNBVCxLQUFBZ3pDLFdBQUEsS0FDQWh6QyxLQUFBNnlDLFNBQUFweUMsVUFDQVQsS0FBQTZ5QyxTQUFBLEtBQ0E3eUMsTUFFQUosRUFBQW8wQyxnQkFFQW4wQyxFQUFBLFNBQUFELEdBUUEsSUFBQXUwQyxHQUNBLEVBQ0EsTUFDQSxNQUNBLE1BQ0EsS0FDQSxPQTJRQSxPQTlQQXYwQyxFQUFBdzBDLFdBQUEsU0FBQXR4QyxHQUNBQSxFQUFBbEQsRUFBQW1ELFdBQUFELEVBQUFsRCxFQUFBdzBDLFdBQUE1eEMsVUFDQTVDLEVBQUFxeUMsV0FBQXAwQyxLQUFBbUMsS0FBQThDLEdBTUE5QyxLQUFBbVosVUFBQSxJQUFBdlosRUFBQWdDLE9BQUFrQixFQUFBcVcsVUFBQXZaLEVBQUE2TyxLQUFBc0gsV0FNQS9WLEtBQUFteEMsZ0JBTUFueEMsS0FBQXEwQyxvQkFNQXIwQyxLQUFBczBDLFVBQUEsSUFBQTEwQyxFQUFBbWIsS0FBQSxHQUFBdlgsUUFBQXhELEtBQUE0USxRQU1BNVEsS0FBQXUwQyxVQUFBLElBQUEzMEMsRUFBQTZsQixRQUNBeFgsS0FBQSxXQUNBMlgsR0FBQSxxQkFDVXBpQixRQUFBeEQsS0FBQXMwQyxXQU9WdDBDLEtBQUFncEIsU0FBQWxtQixFQUFBbW1CLFFBT0FqcEIsS0FBQXcwQyxrQkFBQSxJQUFBNTBDLEVBQUFxbkIsTUFBQW5rQixFQUFBcWxCLFVBQUEsS0FNQW5vQixLQUFBNnlDLFNBQUEsSUFBQWp6QyxFQUFBd2dCLFVBQ0FDLE9BQUF2ZCxFQUFBK3ZDLFNBQUF4eUIsT0FDQU8sWUFBQSxTQUNBTixNQUFBeGQsRUFBQSt2QyxTQUFBdnlCLE1BQ0FDLFFBQUEsRUFDQUMsUUFBQTFkLEVBQUErdkMsU0FBQXJ5QixVQUNVclAsTUFBQW5SLEtBQUF3MEMsa0JBQUF4MEMsS0FBQXUwQyxVQUFBcDdCLFdBQ1ZuWixLQUFBNnlDLFNBQUFydkMsUUFBQXhELEtBQUFzMEMsVUFBQW52QyxNQUNBLFFBQUF6SCxFQUFBLEVBQXdCQSxFQUFBeTJDLEVBQUE3eUMsT0FBeUI1RCxJQUFBLENBQ2pELElBQUEyekMsRUFBQSxJQUFBenhDLEVBQUE4d0MsY0FDQXppQyxLQUFBLFNBQ0E0aUMsZUFBQSxTQUNBQyxZQUFBaHVDLEVBQUFndUMsWUFDQUYsZ0JBQUE5dEMsRUFBQTh0QyxrQkFFQVMsRUFBQTd0QyxRQUFBeEQsS0FBQXUwQyxXQUNBdjBDLEtBQUFteEMsYUFBQXp6QyxHQUFBMnpDLEVBQ0EsSUFBQW9ELEVBQUEsSUFBQTcwQyxFQUFBOGtCLFNBQUF5dkIsRUFBQXoyQyxJQUNBc0MsS0FBQXEwQyxpQkFBQTMyQyxHQUFBKzJDLEVBQ0F6MEMsS0FBQW1aLFVBQUFoSSxNQUFBc2pDLEVBQUFwRCxFQUFBbDRCLFdBR0FuWixLQUFBaXBCLFFBQUFubUIsRUFBQW1tQixTQUVBcnBCLEVBQUE4RixPQUFBOUYsRUFBQXcwQyxXQUFBeDBDLEVBQUFxeUMsWUFPQXJ5QyxFQUFBdzBDLFdBQUE1eEMsVUFDQTJXLFVBQUEsSUFDQTA1QixVQUNBeHlCLE9BQUEsS0FDQUMsTUFBQSxJQUNBRSxRQUFBLElBRUFzd0IsWUFBQSxJQUNBRixnQkFBQSxHQUNBem9CLFVBQUEsSUFDQWMsUUFBQSxLQVFBcnBCLEVBQUF3MEMsV0FBQTkwQyxVQUFBMmhCLGNBQUEsU0FBQTdZLEVBQUFzc0MsR0FhQSxPQVpBdHNDLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0Fzc0MsRUFBQTkwQyxFQUFBbUQsV0FBQTJ4QyxFQUFBLEdBQ0ExMEMsS0FBQTZ5QyxTQUFBNXhCLGNBQUE3WSxFQUFBc3NDLEdBQ0ExMEMsS0FBQW14QyxhQUFBeG5DLFFBQUEsU0FBQTBuQyxHQUNBQSxFQUFBMWpDLE1BQUF2RixLQUdBLElBQUFwSSxLQUFBNnlDLFNBQUF0eUIsU0FDQXZnQixLQUFBbXhDLGFBQUF4bkMsUUFBQSxTQUFBMG5DLEdBQ0FBLEVBQUFoeUIsS0FBQWpYLEVBQUFwSSxLQUFBNnlDLFNBQUF4eUIsT0FBQXJnQixLQUFBNnlDLFNBQUF2eUIsUUFDY3BoQixLQUFBYyxPQUVkQSxNQU9BSixFQUFBdzBDLFdBQUE5MEMsVUFBQWlpQixlQUFBLFNBQUFuWixHQU1BLE9BTEFBLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0FwSSxLQUFBNnlDLFNBQUF0eEIsZUFBQW5aLEdBQ0FwSSxLQUFBbXhDLGFBQUF4bkMsUUFBQSxTQUFBMG5DLEdBQ0FBLEVBQUFoeUIsS0FBQWpYLEVBQUFwSSxLQUFBNnlDLFNBQUFyeUIsVUFDVXRoQixLQUFBYyxPQUNWQSxNQWdCQUosRUFBQXcwQyxXQUFBOTBDLFVBQUE4ekIsS0FBQSxXQUdBLE9BRkFwekIsS0FBQWt5QyxZQUFBLG1CQUNBbHlDLEtBQUFreUMsWUFBQSxvQkFDQWx5QyxNQVVBSixFQUFBdzBDLFdBQUE5MEMsVUFBQWtpQixxQkFBQSxTQUFBM0QsRUFBQXpWLEVBQUE4WSxHQUtBLE9BSkE5WSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBeVYsRUFBQTdkLEtBQUF5VCxVQUFBb0ssR0FDQTdkLEtBQUFpaEIsY0FBQTdZLEVBQUE4WSxHQUNBbGhCLEtBQUF1aEIsZUFBQW5aLEVBQUF5VixHQUNBN2QsTUFTQTVCLE9BQUFDLGVBQUF1QixFQUFBdzBDLFdBQUE5MEMsVUFBQSxtQkFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBbXhDLGFBQUEsR0FBQVAsZ0JBQUFqeUMsT0FFQStCLElBQUEsU0FBQStDLEdBQ0EsUUFBQS9GLEVBQUEsRUFBNEJBLEVBQUFzQyxLQUFBbXhDLGFBQUE3dkMsT0FBOEI1RCxJQUMxRHNDLEtBQUFteEMsYUFBQXp6QyxHQUFBa3pDLGdCQUFBanlDLE1BQUE4RSxLQVdBckYsT0FBQUMsZUFBQXVCLEVBQUF3MEMsV0FBQTkwQyxVQUFBLGVBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQW14QyxhQUFBLEdBQUFMLFlBQUFueUMsT0FFQStCLElBQUEsU0FBQStDLEdBQ0EsUUFBQS9GLEVBQUEsRUFBNEJBLEVBQUFzQyxLQUFBbXhDLGFBQUE3dkMsT0FBOEI1RCxJQUMxRHNDLEtBQUFteEMsYUFBQXp6QyxHQUFBb3pDLFlBQUFueUMsTUFBQThFLEtBVUFyRixPQUFBQyxlQUFBdUIsRUFBQXcwQyxXQUFBOTBDLFVBQUEsYUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBdzBDLGtCQUFBdDRCLEtBRUF4YixJQUFBLFNBQUErQyxHQUNBekQsS0FBQXcwQyxrQkFBQXQ0QixJQUFBelksRUFDQXpELEtBQUFpcEIsUUFBQWpwQixLQUFBZ3BCLFlBVUE1cUIsT0FBQUMsZUFBQXVCLEVBQUF3MEMsV0FBQTkwQyxVQUFBLFdBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQWdwQixVQUVBdG9CLElBQUEsU0FBQWkwQyxHQUNBMzBDLEtBQUFncEIsU0FBQTJyQixFQUNBMzBDLEtBQUF3MEMsa0JBQUE5a0MsSUFBQTFQLEtBQUF3MEMsa0JBQUF0NEIsSUFBQXRYLEtBQUFLLElBQUEsRUFBQTB2QyxNQU9BLzBDLEVBQUF3MEMsV0FBQTkwQyxVQUFBbUIsUUFBQSxXQUNBYixFQUFBcXlDLFdBQUEzeUMsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQSxRQUFBdEMsRUFBQSxFQUF3QkEsRUFBQXNDLEtBQUFteEMsYUFBQTd2QyxPQUE4QjVELElBQ3REc0MsS0FBQW14QyxhQUFBenpDLEdBQUErQyxVQUNBVCxLQUFBcTBDLGlCQUFBMzJDLEdBQUErQyxVQUVBVCxLQUFBbXhDLGFBQUEsS0FDQW54QyxLQUFBcTBDLGlCQUFBLEtBQ0FyMEMsS0FBQW1aLFVBQUExWSxVQUNBVCxLQUFBbVosVUFBQSxLQUNBblosS0FBQXcwQyxrQkFBQS96QyxVQUNBVCxLQUFBdzBDLGtCQUFBLEtBQ0F4MEMsS0FBQXMwQyxVQUFBN3pDLFVBQ0FULEtBQUFzMEMsVUFBQSxLQUNBdDBDLEtBQUE2eUMsU0FBQXB5QyxVQUNBVCxLQUFBNnlDLFNBQUEsS0FDQTd5QyxLQUFBdTBDLFVBQUE5ekMsVUFDQVQsS0FBQXUwQyxVQUFBLE1BRUEzMEMsRUFBQXcwQyxhQUVBdjBDLEVBQUEsU0FBQUQsR0FtSUEsT0FuSEFBLEVBQUFnMUMsV0FBQSxTQUFBOXhDLEdBRUFBLEVBQUFsRCxFQUFBbUQsV0FBQUQsRUFBQWxELEVBQUFnMUMsV0FBQXB5QyxVQUNBNUMsRUFBQXF5QyxXQUFBcDBDLEtBQUFtQyxLQUFBOEMsR0FPQTlDLEtBQUE2MEMsTUFBQSxJQUFBajFDLEVBQUFnc0MsTUFLQTVyQyxLQUFBNnlDLFNBQUEsSUFBQWp6QyxFQUFBa2pCLGtCQUFBaGdCLEVBQUErdkMsVUFFQTd5QyxLQUFBNjBDLE1BQUExakMsTUFBQW5SLEtBQUE2eUMsU0FBQTd5QyxLQUFBNFEsUUFDQTVRLEtBQUFrRSxXQUNBLFFBQ0EsY0FHQXRFLEVBQUE4RixPQUFBOUYsRUFBQWcxQyxXQUFBaDFDLEVBQUFxeUMsWUFNQXJ5QyxFQUFBZzFDLFdBQUFweUMsVUFDQXF5QyxPQUFtQjVtQyxLQUFBLFNBQ25CNGtDLFVBQ0F4eUIsT0FBQSxLQUNBQyxNQUFBLEdBQ0FDLFFBQUEsSUFZQTNnQixFQUFBZzFDLFdBQUF0MUMsVUFBQTJoQixjQUFBLFNBQUE3WSxFQUFBOFksR0FRQSxPQU5BbGhCLEtBQUE2eUMsU0FBQTV4QixjQUFBN1ksRUFBQThZLEdBRUFsaEIsS0FBQTYwQyxNQUFBbG5DLE1BQUF2RixHQUNBLElBQUFwSSxLQUFBNnlDLFNBQUF0eUIsU0FDQXZnQixLQUFBNjBDLE1BQUF4MUIsS0FBQWpYLEVBQUFwSSxLQUFBNnlDLFNBQUF4eUIsT0FBQXJnQixLQUFBNnlDLFNBQUF2eUIsT0FFQXRnQixNQU9BSixFQUFBZzFDLFdBQUF0MUMsVUFBQWlpQixlQUFBLFNBQUFuWixHQUdBLE9BRkFwSSxLQUFBNnlDLFNBQUF0eEIsZUFBQW5aLEdBQ0FwSSxLQUFBNjBDLE1BQUF4MUIsS0FBQWpYLEVBQUFwSSxLQUFBNnlDLFNBQUFyeUIsU0FDQXhnQixNQWdCQUosRUFBQWcxQyxXQUFBdDFDLFVBQUE4ekIsS0FBQSxXQUdBLE9BRkFwekIsS0FBQWt5QyxZQUFBLG1CQUNBbHlDLEtBQUFreUMsWUFBQSxvQkFDQWx5QyxNQVNBSixFQUFBZzFDLFdBQUF0MUMsVUFBQWtpQixxQkFBQSxTQUFBM0QsRUFBQXpWLEVBQUE4WSxHQUtBLE9BSkE5WSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBeVYsRUFBQTdkLEtBQUF5VCxVQUFBb0ssR0FDQTdkLEtBQUFpaEIsY0FBQTdZLEVBQUE4WSxHQUNBbGhCLEtBQUF1aEIsZUFBQW5aLEVBQUF5VixHQUNBN2QsTUFNQUosRUFBQWcxQyxXQUFBdDFDLFVBQUFtQixRQUFBLFdBVUEsT0FUQWIsRUFBQXF5QyxXQUFBM3lDLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFvRSxXQUNBLFFBQ0EsYUFFQXBFLEtBQUE2MEMsTUFBQXAwQyxVQUNBVCxLQUFBNjBDLE1BQUEsS0FDQTcwQyxLQUFBNnlDLFNBQUFweUMsVUFDQVQsS0FBQTZ5QyxTQUFBLEtBQ0E3eUMsTUFFQUosRUFBQWcxQyxhQUVBLzBDLEVBQUEsU0FBQUQsR0FxR0EsT0F2RkFBLEVBQUFrMUMsV0FBQSxTQUFBaHlDLEdBQ0FBLEVBQUFsRCxFQUFBbUQsV0FBQUQsRUFBQWxELEVBQUFrMUMsV0FBQXR5QyxVQUNBNUMsRUFBQXF5QyxXQUFBcDBDLEtBQUFtQyxLQUFBOEMsR0FLQTlDLEtBQUErMEMsT0FBQSxJQUFBbjFDLEVBQUFnc0MsTUFBQSxRQU1BNXJDLEtBQUFnMUMsWUFBQWx5QyxFQUFBa3lDLFlBTUFoMUMsS0FBQWkxQyxNQUFBLElBQUFyMUMsRUFBQTQ2QixtQkFDQXJTLFVBQUFybEIsRUFBQXFsQixVQUNBdVMsVUFBQTUzQixFQUFBNDNCLFlBT0ExNkIsS0FBQW1vQixVQUFBbm9CLEtBQUFpMUMsTUFBQTlzQixVQU1Bbm9CLEtBQUEwNkIsVUFBQTE2QixLQUFBaTFDLE1BQUF2YSxVQUVBMTZCLEtBQUErMEMsT0FBQXZ4QyxRQUFBeEQsS0FBQWkxQyxPQUNBajFDLEtBQUFpMUMsTUFBQXp4QyxRQUFBeEQsS0FBQTRRLFFBQ0E1USxLQUFBa0UsV0FDQSxZQUNBLGVBR0F0RSxFQUFBOEYsT0FBQTlGLEVBQUFrMUMsV0FBQWwxQyxFQUFBcXlDLFlBTUFyeUMsRUFBQWsxQyxXQUFBdHlDLFVBQ0F3eUMsWUFBQSxFQUNBdGEsVUFBQSxJQUNBdlMsVUFBQSxJQVFBdm9CLEVBQUFrMUMsV0FBQXgxQyxVQUFBMmhCLGNBQUEsU0FBQTlLLEVBQUEvTixHQUNBK04sRUFBQW5XLEtBQUEyVCxZQUFBd0MsR0FDQS9OLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0EsSUFBQThzQyxFQUFBLEVBQUEvK0IsRUFJQSxPQUhBblcsS0FBQWkxQyxNQUFBbnRCLFVBQUEvTCxlQUFBbTVCLEVBQUE5c0MsR0FDQXBJLEtBQUErMEMsT0FBQXBuQyxNQUFBdkYsR0FDQXBJLEtBQUErMEMsT0FBQTExQixLQUFBalgsRUFBQThzQyxFQUFBbDFDLEtBQUFnMUMsYUFDQWgxQyxNQU1BSixFQUFBazFDLFdBQUF4MUMsVUFBQW1CLFFBQUEsV0FZQSxPQVhBYixFQUFBcXlDLFdBQUEzeUMsVUFBQW1CLFFBQUE1QyxLQUFBbUMsTUFDQUEsS0FBQSswQyxPQUFBdDBDLFVBQ0FULEtBQUFpMUMsTUFBQXgwQyxVQUNBVCxLQUFBKzBDLE9BQUEsS0FDQS8wQyxLQUFBaTFDLE1BQUEsS0FDQWoxQyxLQUFBb0UsV0FDQSxZQUNBLGNBRUFwRSxLQUFBMDZCLFVBQUEsS0FDQTE2QixLQUFBbW9CLFVBQUEsS0FDQW5vQixNQUVBSixFQUFBazFDLGFBRUFqMUMsRUFBQSxTQUFBRCxHQXNRQSxPQWhQQUEsRUFBQXUxQyxVQUFBLFdBQ0EsSUFBQXJ5QyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQ0EsWUFDQSxTQUNBMUQsRUFBQXUxQyxXQUNBdjFDLEVBQUFxeUMsV0FBQXAwQyxLQUFBbUMsS0FBQThDLElBQ0FBLEVBQUFsRCxFQUFBbUQsV0FBQUQsRUFBQWxELEVBQUFxeUMsV0FBQXp2QyxXQUVBNHlDLFVBQUF4d0MsS0FBQXNYLElBQUF0YyxFQUFBdTFDLFVBQUFFLGNBQUF2eUMsRUFBQXN5QyxXQUtBcDFDLEtBQUFzMUMsT0FBQSxJQUFBeHhDLE1BQUFoQixFQUFBc3lDLFdBT0FwMUMsS0FBQXUxQyxVQUFBLElBQUF6eEMsTUFBQWhCLEVBQUFzeUMsV0FNQXAxQyxLQUFBMmxCLE9BQUEsSUFBQS9sQixFQUFBZ0MsT0FBQWtCLEVBQUE2aUIsT0FBQS9sQixFQUFBNk8sS0FBQXVNLE9BQ0FoYixLQUFBa0UsVUFBQSxVQUVBLFFBQUF4RyxFQUFBLEVBQXdCQSxFQUFBb0YsRUFBQXN5QyxVQUF1QjEzQyxJQUFBLENBQy9DLElBQUE4M0MsRUFBQSxJQUFBMXlDLEVBQUEyeUMsTUFBQW55QyxVQUFBLEdBQUFBLFVBQUEsSUFDQSxLQUFBa3lDLGFBQUE1MUMsRUFBQTJ5QyxZQUNBLFVBQUF0eUMsTUFBQSx5REFFQUQsS0FBQXMxQyxPQUFBNTNDLEdBQUE4M0MsRUFDQUEsRUFBQWh5QyxRQUFBeEQsS0FBQTRRLFFBQ0E0a0MsRUFBQWoyQyxlQUFBLFdBQ0FTLEtBQUEybEIsT0FBQW5pQixRQUFBZ3lDLEVBQUE3dkIsUUFFQTNsQixLQUFBdTFDLFVBQUE3M0MsSUFDQThpQixTQUFBLEVBQ0FySyxLQUFBLEtBQ0FzL0IsTUFBQUQsS0FJQTUxQyxFQUFBOEYsT0FBQTlGLEVBQUF1MUMsVUFBQXYxQyxFQUFBcXlDLFlBT0FyeUMsRUFBQXUxQyxVQUFBM3lDLFVBQ0E0eUMsVUFBQSxFQUNBL2lCLE9BQUEsRUFDQTFNLE9BQUEsRUFDQTh2QixNQUFBNzFDLEVBQUFtekMsT0FhQW56QyxFQUFBdTFDLFVBQUE3MUMsVUFBQTJoQixjQUFBLFNBQUF5MEIsRUFBQXR0QyxFQUFBOFksR0FDQXBkLE1BQUFELFFBQUE2eEMsS0FDQUEsT0FFQXR0QyxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBLFFBQUExSyxFQUFBLEVBQXdCQSxFQUFBZzRDLEVBQUFwMEMsT0FBa0I1RCxJQUFBLENBSTFDLElBSEEsSUFBQStGLEVBQUFpeUMsRUFBQWg0QyxHQUVBaTRDLEVBQUEzMUMsS0FBQXUxQyxVQUFBLEdBQ0FuekMsRUFBQSxFQUE0QkEsRUFBQXBDLEtBQUF1MUMsVUFBQWowQyxPQUEyQmMsSUFDdkRwQyxLQUFBdTFDLFVBQUFuekMsR0FBQW9lLFFBQUFtMUIsRUFBQW4xQixVQUNBbTFCLEVBQUEzMUMsS0FBQXUxQyxVQUFBbnpDLElBR0F1ekMsRUFBQW4xQixRQUFBdFksSUFDQXl0QyxFQUFBeC9CLEtBQUF5L0IsS0FBQUMsVUFBQXB5QyxHQUNBa3lDLEVBQUFGLE1BQUF4MEIsY0FBQXhkLEVBQUEyRSxFQUFBOFksR0FFQSxPQUFBbGhCLE1Ba0JBSixFQUFBdTFDLFVBQUE3MUMsVUFBQWtpQixxQkFBQSxTQUFBazBCLEVBQUE3M0IsRUFBQXpWLEVBQUE4WSxHQUdBLEdBRkE5WSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQWloQixjQUFBeTBCLEVBQUF0dEMsRUFBQThZLEdBQ0F0aEIsRUFBQWlFLFFBQUFnYSxJQUFBamUsRUFBQWlFLFFBQUE2eEMsR0FDQSxRQUFBaDRDLEVBQUEsRUFBNEJBLEVBQUFnNEMsRUFBQXAwQyxPQUFrQjVELElBQUEsQ0FDOUMsSUFBQU0sRUFBQTZmLEVBQUFqWixLQUFBc1gsSUFBQXhlLEVBQUFtZ0IsRUFBQXZjLE9BQUEsSUFDQXRCLEtBQUF1aEIsZUFBQW0wQixFQUFBaDRDLEdBQUEwSyxFQUFBcEksS0FBQXlULFVBQUF6VixTQUdBZ0MsS0FBQXVoQixlQUFBbTBCLEVBQUF0dEMsRUFBQXBJLEtBQUF5VCxVQUFBb0ssSUFFQSxPQUFBN2QsTUFZQUosRUFBQXUxQyxVQUFBNzFDLFVBQUFpaUIsZUFBQSxTQUFBbTBCLEVBQUF0dEMsR0FDQXRFLE1BQUFELFFBQUE2eEMsS0FDQUEsT0FFQXR0QyxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBLFFBQUExSyxFQUFBLEVBQXdCQSxFQUFBZzRDLEVBQUFwMEMsT0FBa0I1RCxJQUcxQyxJQURBLElBQUFvNEMsRUFBQUYsS0FBQUMsVUFBQUgsRUFBQWg0QyxJQUNBODNDLEVBQUEsRUFBNEJBLEVBQUF4MUMsS0FBQXUxQyxVQUFBajBDLE9BQTJCazBDLElBQUEsQ0FDdkQsSUFBQU8sRUFBQS8xQyxLQUFBdTFDLFVBQUFDLEdBQ0FPLEVBQUE1L0IsT0FBQTIvQixHQUFBQyxFQUFBdjFCLFFBQUFwWSxJQUNBMnRDLEVBQUFOLE1BQUFsMEIsZUFBQW5aLEdBQ0EydEMsRUFBQXYxQixRQUFBcFksR0FJQSxPQUFBcEksTUFnQkFKLEVBQUF1MUMsVUFBQTcxQyxVQUFBOHpCLEtBQUEsV0FHQSxPQUZBcHpCLEtBQUFreUMsWUFBQSxtQkFDQWx5QyxLQUFBa3lDLFlBQUEsb0JBQ0FseUMsTUFrQkFKLEVBQUF1MUMsVUFBQTcxQyxVQUFBb0IsSUFBQSxTQUFBQyxFQUFBaEMsRUFBQWlDLEdBQ0EsUUFBQWxELEVBQUEsRUFBd0JBLEVBQUFzQyxLQUFBczFDLE9BQUFoMEMsT0FBd0I1RCxJQUNoRHNDLEtBQUFzMUMsT0FBQTUzQyxHQUFBZ0QsSUFBQUMsRUFBQWhDLEVBQUFpQyxHQUVBLE9BQUFaLE1BV0FKLEVBQUF1MUMsVUFBQTcxQyxVQUFBZixJQUFBLFNBQUFvQyxHQUNBLE9BQUFYLEtBQUFzMUMsT0FBQSxHQUFBLzJDLElBQUFvQyxJQU9BZixFQUFBdTFDLFVBQUE3MUMsVUFBQTAyQyxXQUFBLFNBQUE1dEMsR0FDQUEsRUFBQXBJLEtBQUF5VCxVQUFBckwsR0FDQSxRQUFBMUssRUFBQSxFQUF3QkEsRUFBQXNDLEtBQUF1MUMsVUFBQWowQyxPQUEyQjVELElBQUEsQ0FDbkQsSUFBQXE0QyxFQUFBLzFDLEtBQUF1MUMsVUFBQTczQyxHQUNBcTRDLEVBQUF2MUIsUUFBQXBZLElBQ0EydEMsRUFBQXYxQixRQUFBcFksRUFDQTJ0QyxFQUFBTixNQUFBbDBCLGVBQUFuWixJQUdBLE9BQUFwSSxNQU1BSixFQUFBdTFDLFVBQUE3MUMsVUFBQW1CLFFBQUEsV0FDQWIsRUFBQXF5QyxXQUFBM3lDLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0EsUUFBQXRDLEVBQUEsRUFBd0JBLEVBQUFzQyxLQUFBczFDLE9BQUFoMEMsT0FBd0I1RCxJQUNoRHNDLEtBQUFzMUMsT0FBQTUzQyxHQUFBK0MsVUFDQVQsS0FBQXMxQyxPQUFBNTNDLEdBQUEsS0FPQSxPQUxBc0MsS0FBQW9FLFVBQUEsVUFDQXBFLEtBQUEybEIsT0FBQWxsQixVQUNBVCxLQUFBMmxCLE9BQUEsS0FDQTNsQixLQUFBczFDLE9BQUEsS0FDQXQxQyxLQUFBdTFDLFVBQUEsS0FDQXYxQyxNQVFBSixFQUFBdTFDLFVBQUFFLGNBQUEsR0FDQXoxQyxFQUFBdTFDLFlBRUF0MUMsRUFBQSxTQUFBRCxHQXNQQSxPQWpPQUEsRUFBQXEyQyxRQUFBLFNBQUE1VSxHQUVBLElBQUE1NUIsRUFBQTNELE1BQUF4RSxVQUFBb0ksTUFBQTdKLEtBQUF5RixXQUNBbUUsRUFBQW1CLFFBQ0EsSUFBQTlGLEVBQUFsRCxFQUFBNEMsU0FBQWlGLEdBQ0EsU0FDQSxXQUNBN0gsRUFBQXEyQyxTQUNBcjJDLEVBQUFxeUMsV0FBQXAwQyxLQUFBbUMsS0FBQThDLEdBQ0EsSUFBQW96QyxLQUNBLFFBQUEvL0IsS0FBQWtyQixFQUNBLEdBQUF6aEMsRUFBQW1FLE9BQUFvUyxHQUdBKy9CLEVBREF0MkMsRUFBQW1XLFVBQUFJLEdBQUF2QyxVQUNBeXRCLEVBQUFsckIsT0FDYyxJQUFBZ2dDLE1BQUE3aUMsV0FBQTZDLElBSWQsVUFBQWxXLE1BQUEsbURBRkFpMkMsRUFBQS8vQixHQUFBa3JCLEVBQUFsckIsR0FVQW5XLEtBQUFzaEMsU0FBQSxJQUFBMWhDLEVBQUF3aEMsUUFBQThVLEVBQUFwekMsRUFBQXV4QixPQUFBdnhCLEVBQUE4eUIsU0FNQTUxQixLQUFBbzJDLGtCQUtBcDJDLEtBQUFxZ0IsT0FBQXZkLEVBQUF1ZCxPQUtBcmdCLEtBQUF3Z0IsUUFBQTFkLEVBQUEwZCxTQUVBNWdCLEVBQUE4RixPQUFBOUYsRUFBQXEyQyxRQUFBcjJDLEVBQUFxeUMsWUFNQXJ5QyxFQUFBcTJDLFFBQUF6ekMsVUFDQTZkLE9BQUEsRUFDQUcsUUFBQSxHQUNBNlQsT0FBQXowQixFQUFBcUUsS0FDQTJ4QixRQUFBLElBUUFoMkIsRUFBQXEyQyxRQUFBMzJDLFVBQUErMkMsYUFBQSxTQUFBcGdDLEdBSUEsSUFGQSxJQUNBMVEsRUFBQSxFQUNBQSxFQUZBLElBRUEsQ0FFQSxHQUFBdkYsS0FBQXNoQyxTQUFBRyxJQUFBeHJCLEVBQUExUSxHQUNBLE9BQUFBLEVBQ2MsR0FBQXZGLEtBQUFzaEMsU0FBQUcsSUFBQXhyQixFQUFBMVEsR0FDZCxPQUFBQSxFQUVBQSxJQUVBLGFBUUEzRixFQUFBcTJDLFFBQUEzMkMsVUFBQTJoQixjQUFBLFNBQUE5SyxFQUFBL04sRUFBQThZLEdBQ0EsSUFBQWpMLEVBQUFyVyxFQUFBbVcsVUFBQUksR0FBQXZDLFNBRUEwaUMsRUFBQXQyQyxLQUFBcTJDLGFBQUFwZ0MsR0FDQSxVQUFBcWdDLEVBQUEsQ0FDQSxJQUFBQyxFQUFBdGdDLEVBQUFxZ0MsRUFDQTVxQyxFQUFBMUwsS0FBQXNoQyxTQUFBL2lDLElBQUFnNEMsR0FFQUMsRUFBQSxJQUFBNTJDLEVBQUFrckMsY0FDQXAvQixTQUNBdy9CLGFBQUF0ckMsRUFBQTBGLHlCQUFBZ3hDLEdBQ0FuTCxPQUFBbnJDLEtBQUFxZ0IsT0FDQStxQixRQUFBcHJDLEtBQUF3Z0IsUUFDQW5PLE1BQUEsZ0JBQ2M3TyxRQUFBeEQsS0FBQTRRLFFBQ2Q0bEMsRUFBQTdvQyxNQUFBdkYsRUFBQSxFQUFBc0QsRUFBQW1TLFNBQUFxRCxHQUVBdGhCLEVBQUFpRSxRQUFBN0QsS0FBQW8yQyxlQUFBbmdDLE1BQ0FqVyxLQUFBbzJDLGVBQUFuZ0MsT0FFQWpXLEtBQUFvMkMsZUFBQW5nQyxHQUFBclQsTUFDQXVULEtBQUFGLEVBQ0F1Z0MsV0FHQSxPQUFBeDJDLE1BT0FKLEVBQUFxMkMsUUFBQTMyQyxVQUFBaWlCLGVBQUEsU0FBQXBMLEVBQUEvTixHQUNBLElBQUE2TixFQUFBclcsRUFBQW1XLFVBQUFJLEdBQUF2QyxTQUVBLEdBQUE1VCxLQUFBbzJDLGVBQUFuZ0MsSUFBQWpXLEtBQUFvMkMsZUFBQW5nQyxHQUFBM1UsT0FBQSxDQUNBLElBQUFrMUMsRUFBQXgyQyxLQUFBbzJDLGVBQUFuZ0MsR0FBQXJOLFFBQUE0dEMsT0FDQXB1QyxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBb3VDLEVBQUFuM0IsS0FBQWpYLEVBQUFwSSxLQUFBd2dCLFFBQUF4Z0IsS0FBQXdnQixTQUVBLE9BQUF4Z0IsTUFPQUosRUFBQXEyQyxRQUFBMzJDLFVBQUEwMkMsV0FBQSxTQUFBNXRDLEdBRUEsUUFBQStOLEtBREEvTixFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQW8yQyxlQUVBLElBREEsSUFBQUssRUFBQXoyQyxLQUFBbzJDLGVBQUFqZ0MsR0FDQXNnQyxFQUFBbjFDLFFBQ0FtMUMsRUFBQTd0QyxRQUFBNHRDLE9BQ0FuM0IsS0FBQWpYLEVBQUFwSSxLQUFBd2dCLFFBQUF4Z0IsS0FBQXdnQixTQUdBLE9BQUF4Z0IsTUFnQkFKLEVBQUFxMkMsUUFBQTMyQyxVQUFBOHpCLEtBQUEsV0FHQSxPQUZBcHpCLEtBQUFreUMsWUFBQSxtQkFDQWx5QyxLQUFBa3lDLFlBQUEsb0JBQ0FseUMsTUFVQUosRUFBQXEyQyxRQUFBMzJDLFVBQUFraUIscUJBQUEsU0FBQXJMLEVBQUEwSCxFQUFBelYsRUFBQThZLEdBS0EsT0FKQTlZLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0F5VixFQUFBN2QsS0FBQXlULFVBQUFvSyxHQUNBN2QsS0FBQWloQixjQUFBOUssRUFBQS9OLEVBQUE4WSxHQUNBbGhCLEtBQUF1aEIsZUFBQXBMLEVBQUEvTixFQUFBeVYsR0FDQTdkLE1BV0FKLEVBQUFxMkMsUUFBQTMyQyxVQUFBNkksSUFBQSxTQUFBZ08sRUFBQWllLEVBQUFudEIsR0FDQSxHQUFBckgsRUFBQW1FLE9BQUFvUyxHQUFBLENBRUEsSUFBQXFRLEVBQUE1bUIsRUFBQW1XLFVBQUFJLEdBQUF2QyxTQUNBNVQsS0FBQXNoQyxTQUFBbjVCLElBQUFxZSxFQUFBNE4sRUFBQW50QixPQUNVLElBQUFrdkMsTUFBQTdpQyxXQUFBNkMsSUFJVixVQUFBbFcsTUFBQSw0REFBQWtXLEdBRkFuVyxLQUFBc2hDLFNBQUFuNUIsSUFBQWdPLEVBQUFpZSxFQUFBbnRCLEtBWUE3SSxPQUFBQyxlQUFBdUIsRUFBQXEyQyxRQUFBMzJDLFVBQUEsVUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBc2hDLFNBQUFoTixVQU9BMTBCLEVBQUFxMkMsUUFBQTMyQyxVQUFBbUIsUUFBQSxXQUlBLFFBQUF3VixLQUhBclcsRUFBQXF5QyxXQUFBM3lDLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFzaEMsU0FBQTdnQyxVQUNBVCxLQUFBc2hDLFNBQUEsS0FDQXRoQyxLQUFBbzJDLGVBQ0FwMkMsS0FBQW8yQyxlQUFBbmdDLEdBQUF0TSxRQUFBLFNBQUEzQyxHQUNBQSxFQUFBd3ZDLE9BQUEvMUMsWUFJQSxPQURBVCxLQUFBbzJDLGVBQUEsS0FDQXAyQyxNQUVBSixFQUFBcTJDLFVBRUFwMkMsRUFBQSxTQUFBRCxHQUNBQSxFQUFBdUssWUFDQWt0QixlQUFBLzNCLFVBQUFzNEIsa0JBQ0FQLGVBQUEvM0IsVUFBQXM0QixnQkFBQVAsZUFBQS8zQixVQUFBbzNDLGNBRUE3ckMsYUFBQXZMLFVBQUF5NUIscUJBQ0FsdUIsYUFBQXZMLFVBQUF5NUIsbUJBQUFsdUIsYUFBQXZMLFVBQUFxM0Msb0JBSUE5MkMsRUFBQSxTQUFBRCxHQWdDQSxPQXJCQUEsRUFBQWczQyxZQUFBLFdBQ0FoM0MsRUFBQXlSLFdBQUF4VCxLQUFBbUMsTUFLQUEsS0FBQTI1QixNQUFBMzVCLEtBQUFxUSxNQUFBclEsS0FBQTRRLE9BQUEsSUFBQWhSLEVBQUE2UyxXQUFBLFNBQUFtbkIsR0FDQSxTQUFBaDFCLEtBQUFzVixJQUFBMGYsR0FBQSxLQUdBaDZCLEVBQUE4RixPQUFBOUYsRUFBQWczQyxZQUFBaDNDLEVBQUF5UixZQUtBelIsRUFBQWczQyxZQUFBdDNDLFVBQUFtQixRQUFBLFdBSUEsT0FIQWIsRUFBQXlSLFdBQUEvUixVQUFBbUIsUUFBQTVDLEtBQUFtQyxNQUNBQSxLQUFBMjVCLE1BQUFsNUIsVUFDQVQsS0FBQTI1QixNQUFBLEtBQ0EzNUIsTUFFQUosRUFBQWczQyxjQUVBLzJDLEVBQUEsU0FBQUQsR0E4RkEsT0FoRkFBLEVBQUFpM0MsVUFBQSxTQUFBQyxFQUFBQyxHQUNBbjNDLEVBQUF5UixXQUFBeFQsS0FBQW1DLE1BTUFBLEtBQUFnM0MsVUFBQXAzQyxFQUFBbUQsV0FBQSt6QyxFQUFBLEdBTUE5MkMsS0FBQWkzQyxVQUFBcjNDLEVBQUFtRCxXQUFBZzBDLEVBQUEsR0FNQS8yQyxLQUFBeW9CLEtBQUF6b0IsS0FBQXFRLE1BQUEsSUFBQXpRLEVBQUE0a0IsSUFBQSxHQU1BeGtCLEtBQUFrM0MsS0FBQWwzQyxLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQThrQixTQUFBLEdBQ0Exa0IsS0FBQXlvQixLQUFBamxCLFFBQUF4RCxLQUFBazNDLE1BQ0FsM0MsS0FBQXduQixhQUVBNW5CLEVBQUE4RixPQUFBOUYsRUFBQWkzQyxVQUFBajNDLEVBQUF5UixZQU9BalQsT0FBQUMsZUFBQXVCLEVBQUFpM0MsVUFBQXYzQyxVQUFBLE9BQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQWczQyxXQUVBdDJDLElBQUEsU0FBQXdiLEdBQ0FsYyxLQUFBZzNDLFVBQUE5NkIsRUFDQWxjLEtBQUF3bkIsZUFTQXBwQixPQUFBQyxlQUFBdUIsRUFBQWkzQyxVQUFBdjNDLFVBQUEsT0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBaTNDLFdBRUF2MkMsSUFBQSxTQUFBZ1AsR0FDQTFQLEtBQUFpM0MsVUFBQXZuQyxFQUNBMVAsS0FBQXduQixlQU9BNW5CLEVBQUFpM0MsVUFBQXYzQyxVQUFBa29CLFVBQUEsV0FDQXhuQixLQUFBeW9CLEtBQUE5cEIsT0FBQXFCLEtBQUFnM0MsVUFDQWgzQyxLQUFBazNDLEtBQUF2NEMsTUFBQSxHQUFBcUIsS0FBQWkzQyxVQUFBajNDLEtBQUFnM0MsWUFNQXAzQyxFQUFBaTNDLFVBQUF2M0MsVUFBQW1CLFFBQUEsV0FNQSxPQUxBYixFQUFBeVIsV0FBQS9SLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUF5b0IsS0FBQWhvQixVQUNBVCxLQUFBeW9CLEtBQUEsS0FDQXpvQixLQUFBazNDLEtBQUF6MkMsVUFDQVQsS0FBQWszQyxLQUFBLEtBQ0FsM0MsTUFFQUosRUFBQWkzQyxZQUVBaDNDLEVBQUEsU0FBQUQsR0FvS0EsT0EvSkFBLEVBQUF1M0Msd0JBQUEsV0FDQXYzQyxFQUFBZ0MsT0FBQTBGLE1BQUF0SCxLQUFBc0QsV0FNQXRELEtBQUE0USxPQUFBNVEsS0FBQW8zQyxXQUFBLElBQUF4M0MsRUFBQWdDLE9BQUE1QixLQUFBNmIsZUFNQTdiLEtBQUFxM0MsU0FBQXIzQyxLQUFBckIsTUFNQXFCLEtBQUE2eUIsUUFBQWp6QixFQUFBbVYsVUFBQXNjLGVBQUFyeEIsS0FBQXMzQyxRQUFBcDRDLEtBQUFjLE1BQUEsTUFNQUEsS0FBQXUzQyxpQkFBQXYzQyxLQUFBdzNDLGFBQUF0NEMsS0FBQWMsTUFDQUosRUFBQW1WLFVBQUFuTyxHQUFBLG1CQUFBNUcsS0FBQXUzQyxrQkFDQXYzQyxLQUFBK0csUUFBQWtCLE9BQUFDLEtBRUF0SSxFQUFBOEYsT0FBQTlGLEVBQUF1M0Msd0JBQUF2M0MsRUFBQWdDLFFBT0FoQyxFQUFBdTNDLHdCQUFBNzNDLFVBQUFnNEMsUUFBQSxTQUFBbHZDLEdBQ0EsSUFBQTNFLEVBQUF6RCxLQUFBNGIsZUFBQWhjLEVBQUFtVixVQUFBUSxTQUNBdlYsS0FBQXEzQyxXQUFBNXpDLElBQ0F6RCxLQUFBcTNDLFNBQUE1ekMsRUFFQXpELEtBQUFvM0MsV0FBQWg2Qix3QkFBQTNaLEVBQUEyRSxLQVNBeEksRUFBQXUzQyx3QkFBQTczQyxVQUFBazRDLGFBQUEsU0FBQXB2QyxHQUNBLElBQUEzRSxFQUFBekQsS0FBQTRiLGVBQUFoYyxFQUFBbVYsVUFBQVEsU0FJQSxPQUhBdlYsS0FBQXEzQyxTQUFBNXpDLEVBQ0F6RCxLQUFBbzNDLFdBQUExbEMsc0JBQUF0SixHQUNBcEksS0FBQW8zQyxXQUFBcjdCLGVBQUF0WSxFQUFBMkUsR0FDQXBJLE1BUUFKLEVBQUF1M0Msd0JBQUE3M0MsVUFBQXNjLGVBQUEsU0FBQXhULEdBRUEsT0FEQUEsRUFBQXhJLEVBQUEwYSxjQUFBbFMsR0FDQXhJLEVBQUFnQyxPQUFBdEMsVUFBQXNjLGVBQUEvZCxLQUFBbUMsS0FBQW9JLElBUUF4SSxFQUFBdTNDLHdCQUFBNzNDLFVBQUF5YyxlQUFBLFNBQUFwZCxFQUFBeUosR0FHQSxPQUZBQSxFQUFBeEksRUFBQTBhLGNBQUFsUyxHQUNBeEksRUFBQWdDLE9BQUF0QyxVQUFBeWMsZUFBQWxlLEtBQUFtQyxLQUFBckIsRUFBQXlKLEdBQ0FwSSxNQVFBSixFQUFBdTNDLHdCQUFBNzNDLFVBQUE4ZCx3QkFBQSxTQUFBemUsRUFBQXlKLEdBR0EsT0FGQUEsRUFBQXhJLEVBQUEwYSxjQUFBbFMsR0FDQXhJLEVBQUFnQyxPQUFBdEMsVUFBQThkLHdCQUFBdmYsS0FBQW1DLEtBQUFyQixFQUFBeUosR0FDQXBJLE1BUUFKLEVBQUF1M0Msd0JBQUE3M0MsVUFBQStkLDZCQUFBLFNBQUExZSxFQUFBeUosR0FHQSxPQUZBQSxFQUFBeEksRUFBQTBhLGNBQUFsUyxHQUNBeEksRUFBQWdDLE9BQUF0QyxVQUFBK2QsNkJBQUF4ZixLQUFBbUMsS0FBQXJCLEVBQUF5SixHQUNBcEksTUFVQUosRUFBQXUzQyx3QkFBQTczQyxVQUFBcWUsZ0JBQUEsU0FBQWhmLEVBQUFvTCxFQUFBMlQsR0FHQSxPQUZBM1QsRUFBQW5LLEVBQUEwYSxjQUFBdlEsR0FDQW5LLEVBQUFnQyxPQUFBdEMsVUFBQXFlLGdCQUFBOWYsS0FBQW1DLEtBQUFyQixFQUFBb0wsRUFBQTJULEdBQ0ExZCxNQVFBSixFQUFBdTNDLHdCQUFBNzNDLFVBQUFvUyxzQkFBQSxTQUFBM0gsR0FHQSxPQUZBQSxFQUFBbkssRUFBQTBhLGNBQUF2USxHQUNBbkssRUFBQWdDLE9BQUF0QyxVQUFBb1Msc0JBQUE3VCxLQUFBbUMsS0FBQStKLEdBQ0EvSixNQVVBSixFQUFBdTNDLHdCQUFBNzNDLFVBQUFzZSxvQkFBQSxTQUFBL2EsRUFBQWtILEVBQUE4VCxFQUFBQyxHQUlBLE9BSEEvVCxFQUFBbkssRUFBQTBhLGNBQUF2USxHQUNBOFQsRUFBQWplLEVBQUEwYSxjQUFBdUQsR0FDQWplLEVBQUFnQyxPQUFBdEMsVUFBQXNlLG9CQUFBL2YsS0FBQW1DLEtBQUE2QyxFQUFBa0gsRUFBQThULEVBQUFDLEdBQ0E5ZCxNQVFBSixFQUFBdTNDLHdCQUFBNzNDLFVBQUE2ZCxvQkFBQSxTQUFBL1UsR0FDQSxPQUFBeEksRUFBQWdDLE9BQUF0QyxVQUFBNmQsb0JBQUF0ZixLQUFBbUMsS0FBQUosRUFBQTBhLGNBQUFsUyxLQU1BeEksRUFBQXUzQyx3QkFBQTczQyxVQUFBbUIsUUFBQSxXQUNBYixFQUFBbVYsVUFBQXNhLE1BQUFydkIsS0FBQTZ5QixTQUNBanpCLEVBQUFtVixVQUFBcE8sSUFBQSxtQkFBQTNHLEtBQUF5M0MsaUJBQ0F6M0MsS0FBQStHLFFBQUFnQyxPQUFBLEdBQ0FuSixFQUFBZ0MsT0FBQXRDLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUFvM0MsV0FBQTMyQyxVQUNBVCxLQUFBbzNDLFdBQUEsTUFFQXgzQyxFQUFBdTNDLDBCQUVBdDNDLEVBQUEsU0FBQUQsR0FnU0EsT0F0UkFBLEVBQUE4M0MsWUFBQSxXQUNBLElBQUE1MEMsRUFBQWxELEVBQUE0QyxTQUFBYyxXQUNBLE1BQ0EsVUFDQTFELEVBQUE4M0MsYUFDQTkzQyxFQUFBZ3pCLE9BQUEvMEIsS0FBQW1DLEtBQUE4QyxHQUtBOUMsS0FBQTBMLE9BQUEsSUFBQTlMLEVBQUFvMEIsT0FBQWx4QixFQUFBc3hCLElBQUF0eEIsRUFBQXV4QixRQU9BcjBCLEtBQUFtd0IsT0FBQSxJQUFBdndCLEVBQUFpdEIsTUFBQTdzQixLQUFBeXVDLE1BQUF2dkMsS0FBQWMsTUFBQThDLEVBQUE2MEMsV0FLQTMzQyxLQUFBK3ZCLFdBQUEsRUFLQS92QixLQUFBZ3dCLFNBQUEsRUFNQWh3QixLQUFBbzJDLGtCQUtBcDJDLEtBQUE2ckMsY0FBQS9vQyxFQUFBb29DLGFBS0FsckMsS0FBQTQzQyxXQUFBOTBDLEVBQUE2MEMsVUFLQTMzQyxLQUFBNjNDLFNBQUEvMEMsRUFBQWcxQyxRQUtBOTNDLEtBQUEybEIsT0FBQTdpQixFQUFBNmlCLE9BRUEzbEIsS0FBQTgzQyxRQUFBaDFDLEVBQUFnMUMsUUFDQTkzQyxLQUFBME4sS0FBQTVLLEVBQUE0SyxLQUNBMU4sS0FBQWtyQyxhQUFBcG9DLEVBQUFvb0MsYUFDQWxyQyxLQUFBMjNDLFVBQUE3MEMsRUFBQTYwQyxVQUNBMzNDLEtBQUE4d0IsVUFBQWh1QixFQUFBZ3VCLFVBQ0E5d0IsS0FBQSt3QixRQUFBanVCLEVBQUFpdUIsUUFDQS93QixLQUFBeWlCLFFBQUEzZixFQUFBMmYsUUFDQXppQixLQUFBbXdCLE9BQUF2cEIsR0FBQSxPQUFBNUcsS0FBQSszQyxRQUFBNzRDLEtBQUFjLFFBRUFKLEVBQUE4RixPQUFBOUYsRUFBQTgzQyxZQUFBOTNDLEVBQUFnekIsUUFPQWh6QixFQUFBODNDLFlBQUFsMUMsVUFDQTZ4QixPQUFBejBCLEVBQUFxRSxLQUNBNnpDLFFBQUEsR0FDQUgsVUFBQSxHQUNBek0sYUFBQSxFQUNBdmxCLE9BQUEsRUFDQWpZLE1BQUEsRUFDQW9qQixVQUFBLEVBQ0FDLFFBQUEsRUFDQXRPLFNBQUEsR0F3QkE3aUIsRUFBQTgzQyxZQUFBcDRDLFVBQUF5ekIsT0FBQSxTQUFBM3FCLEVBQUFnWCxFQUFBdkIsR0FDQXVCLEVBQUF4ZixFQUFBbUQsV0FBQXFjLEVBQUEsR0FDQUEsRUFBQXBmLEtBQUF5VCxVQUFBMkwsR0FDQWhYLEVBQUFwSSxLQUFBeVQsVUFBQXJMLEdBQ0FwSSxLQUFBZzRDLFFBQUE1NEIsRUFDQXBmLEtBQUFtd0IsT0FBQXhpQixNQUFBdkYsR0FDQXlWLEdBQ0E3ZCxLQUFBcWYsS0FBQWpYLEVBQUFwSSxLQUFBeVQsVUFBQW9LLEtBUUFqZSxFQUFBODNDLFlBQUFwNEMsVUFBQTJ6QixNQUFBLFNBQUE3cUIsR0FDQXBJLEtBQUFtd0IsT0FBQTlRLEtBQUFqWCxJQU9BeEksRUFBQTgzQyxZQUFBcDRDLFVBQUF5NEMsUUFBQSxTQUFBM3ZDLEdBRUFwSSxLQUFBbzJDLGVBQUF6c0MsUUFBQSxTQUFBNnNDLEdBQ0FBLEVBQUFuM0IsS0FBQWpYLEVBQUEsTUFTQXhJLEVBQUE4M0MsWUFBQXA0QyxVQUFBbXZDLE1BQUEsU0FBQXJtQyxHQUNBLElBQUEraUMsRUFBQW5yQyxLQUFBZzRDLFFBQUFoNEMsS0FBQTYzQyxTQUFBLEVBQUE3M0MsS0FBQTYzQyxTQUNBckIsRUFBQSxJQUFBNTJDLEVBQUFrckMsY0FDQXAvQixPQUFBMUwsS0FBQTBMLE9BQ0F5L0IsU0FDQUMsUUFBQXByQyxLQUFBNjNDLFNBQ0FucUMsS0FBQTFOLEtBQUEwTixLQUNBb2pCLFVBQUE5d0IsS0FBQSt2QixXQUNBZ0IsUUFBQS93QixLQUFBZ3dCLFNBQ0FrYixhQUFBdHJDLEVBQUEwRix5QkFBQXRGLEtBQUEybEIsT0FBQSxPQUNVbmlCLFFBQUF4RCxLQUFBNFEsUUFDVjRsQyxFQUFBN29DLE1BQUF2RixFQUFBcEksS0FBQWc0QyxTQUNBaDRDLEtBQUFnNEMsU0FBQWg0QyxLQUFBMjNDLFVBQ0FuQixFQUFBbjNCLEtBQUFqWCxFQUFBcEksS0FBQTIzQyxXQUVBMzNDLEtBQUFvMkMsZUFBQXh6QyxLQUFBNHpDLEdBRUFBLEVBQUFsZixRQUFBLFdBQ0EsSUFBQWh2QixFQUFBdEksS0FBQW8yQyxlQUFBajFDLFFBQUFxMUMsSUFDQSxJQUFBbHVDLEdBQ0F0SSxLQUFBbzJDLGVBQUE3MEMsT0FBQStHLEVBQUEsSUFFVXBKLEtBQUFjLE9BUVZKLEVBQUE4M0MsWUFBQXA0QyxVQUFBMjRDLEtBQUEsU0FBQTc0QixFQUFBaFgsR0FHQSxPQUZBcEksS0FBQWc0QyxRQUFBaDRDLEtBQUF5VCxVQUFBMkwsR0FDQXBmLEtBQUF5dUMsTUFBQXp1QyxLQUFBeVQsVUFBQXJMLElBQ0FwSSxNQVFBNUIsT0FBQUMsZUFBQXVCLEVBQUE4M0MsWUFBQXA0QyxVQUFBLGdCQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUE2ckMsZUFFQW5yQyxJQUFBLFNBQUFxckMsR0FDQS9yQyxLQUFBNnJDLGNBQUFFLEVBQ0EvckMsS0FBQTIzQyxVQUFBMzNDLEtBQUE0M0MsY0FTQXg1QyxPQUFBQyxlQUFBdUIsRUFBQTgzQyxZQUFBcDRDLFVBQUEsYUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBK3ZCLFlBRUFydkIsSUFBQSxTQUFBMEgsR0FDQXBJLEtBQUErdkIsV0FBQS92QixLQUFBeVQsVUFBQXJMLE1BU0FoSyxPQUFBQyxlQUFBdUIsRUFBQTgzQyxZQUFBcDRDLFVBQUEsV0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBZ3dCLFVBRUF0dkIsSUFBQSxTQUFBMEgsR0FDQXBJLEtBQUFnd0IsU0FBQWh3QixLQUFBeVQsVUFBQXJMLE1BU0FoSyxPQUFBQyxlQUFBdUIsRUFBQTgzQyxZQUFBcDRDLFVBQUEsV0FDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBMEwsT0FBQStXLFNBRUEvaEIsSUFBQSxTQUFBZzFCLEdBQ0ExMUIsS0FBQTBMLE9BQUErVyxRQUFBaVQsS0FVQXQzQixPQUFBQyxlQUFBdUIsRUFBQTgzQyxZQUFBcDRDLFVBQUEsYUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBNDNDLFlBRUFsM0MsSUFBQSxTQUFBOGlCLEdBQ0F4akIsS0FBQTQzQyxXQUFBNTNDLEtBQUF5VCxVQUFBK1AsR0FDQXhqQixLQUFBbXdCLE9BQUFoWCxVQUFBeGEsTUFBQXFCLEtBQUE2ckMsY0FBQTdyQyxLQUFBNDNDLGNBVUF4NUMsT0FBQUMsZUFBQXVCLEVBQUE4M0MsWUFBQXA0QyxVQUFBLFdBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQTYzQyxVQUVBbjNDLElBQUEsU0FBQTBILEdBQ0FwSSxLQUFBNjNDLFNBQUE3M0MsS0FBQXlULFVBQUFyTCxNQU9BeEksRUFBQTgzQyxZQUFBcDRDLFVBQUFtQixRQUFBLFdBVUEsT0FUQWIsRUFBQWd6QixPQUFBdHpCLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUEwTCxPQUFBakwsVUFDQVQsS0FBQTBMLE9BQUEsS0FDQTFMLEtBQUFtd0IsT0FBQTF2QixVQUNBVCxLQUFBbXdCLE9BQUEsS0FDQW53QixLQUFBbzJDLGVBQUF6c0MsUUFBQSxTQUFBNnNDLEdBQ0FBLEVBQUEvMUMsWUFFQVQsS0FBQW8yQyxlQUFBLEtBQ0FwMkMsTUFFQUosRUFBQTgzQyxjQUVBNzNDLEVBQUEsU0FBQUQsR0FtZEEsT0FuY0FBLEVBQUFzNEMsT0FBQSxTQUFBOWpCLEdBQ0EsSUFBQXR4QixFQUNBc3hCLGFBQUF4MEIsRUFBQW8wQixRQUFBSSxFQUFBRSxRQUNBRixJQUFBNzFCLE1BQ0F1RSxFQUFBbEQsRUFBQXM0QyxPQUFBMTFDLFVBRUFNLEVBQUFsRCxFQUFBNEMsU0FBQWMsV0FDQSxNQUNBLFVBQ0ExRCxFQUFBczRDLFFBRUF0NEMsRUFBQWd6QixPQUFBLzBCLEtBQUFtQyxLQUFBOEMsR0FZQTlDLEtBQUFtNEMsVUFBQXIxQyxFQUFBcTFDLFVBTUFuNEMsS0FBQXVqQixRQUFBLElBQUEzakIsRUFBQW8wQixRQUNBSSxJQUFBdHhCLEVBQUFzeEIsSUFDQUMsT0FBQXIwQixLQUFBbTBCLFFBQUFqMUIsS0FBQWMsS0FBQThDLEVBQUF1eEIsUUFDQTVSLFFBQUEzZixFQUFBMmYsVUFFQTJSLGFBQUFYLGFBQ0F6ekIsS0FBQXVqQixRQUFBN2lCLElBQUEwekIsR0FPQXAwQixLQUFBa3RCLE1BQUFwcUIsRUFBQTRLLEtBTUExTixLQUFBK3ZCLFdBQUFqdEIsRUFBQWd1QixVQU1BOXdCLEtBQUFnd0IsU0FBQWx0QixFQUFBaXVCLFFBTUEvd0IsS0FBQTZyQyxjQUFBL29DLEVBQUFvb0MsYUFNQWxyQyxLQUFBbzJDLGtCQU1BcDJDLEtBQUFvNEMsYUFBQSxJQUFBeDRDLEVBQUErckIsV0FBQTdvQixFQUFBb29DLGNBS0FsckMsS0FBQW1yQyxPQUFBcm9DLEVBQUFxb0MsT0FLQW5yQyxLQUFBb3JDLFFBQUF0b0MsRUFBQXNvQyxTQUVBeHJDLEVBQUE4RixPQUFBOUYsRUFBQXM0QyxPQUFBdDRDLEVBQUFnekIsUUFPQWh6QixFQUFBczRDLE9BQUExMUMsVUFDQTZ4QixPQUFBejBCLEVBQUFxRSxLQUNBaW5DLGFBQUEsRUFDQXg5QixNQUFBLEVBQ0F5cUMsV0FBQSxFQUNBcm5CLFVBQUEsRUFDQUMsUUFBQSxFQUNBc25CLFdBQUEsRUFDQTUxQixTQUFBLEVBQ0Ewb0IsT0FBQSxFQUNBQyxRQUFBLEdBZ0JBeHJDLEVBQUFzNEMsT0FBQTU0QyxVQUFBaTFCLEtBQUEsU0FBQUgsRUFBQW50QixHQUNBLE9BQUFqSCxLQUFBdWpCLFFBQUFnUixLQUFBSCxFQUFBcDBCLEtBQUFtMEIsUUFBQWoxQixLQUFBYyxLQUFBaUgsS0FNQXJILEVBQUFzNEMsT0FBQTU0QyxVQUFBNjBCLFFBQUEsU0FBQWx0QixJQUNBQSxFQUFBckgsRUFBQW1ELFdBQUFrRSxFQUFBckgsRUFBQXFFLE9BQ0FqRSxNQUNBQSxLQUFBbTRDLFdBQ0FuNEMsS0FBQTJOLFNBT0EvTixFQUFBczRDLE9BQUE1NEMsVUFBQWc1QyxhQUFBLFNBQUE5QixHQUNBLElBQUFsdUMsRUFBQXRJLEtBQUFvMkMsZUFBQWoxQyxRQUFBcTFDLEdBQ0F4MkMsS0FBQW8yQyxlQUFBNzBDLE9BQUErRyxFQUFBLElBc0JBMUksRUFBQXM0QyxPQUFBNTRDLFVBQUF5ekIsT0FBQSxTQUFBaHBCLEVBQUFxVixFQUFBdkIsR0FHQXVCLEVBREFwZixLQUFBa3RCLE1BQ0F0dEIsRUFBQW1ELFdBQUFxYyxFQUFBcGYsS0FBQSt2QixZQUdBbndCLEVBQUFtRCxXQUFBcWMsRUFBQSxHQUdBQSxFQUFBcGYsS0FBQXlULFVBQUEyTCxHQUNBLElBQUFtNUIsRUFBQTM0QyxFQUFBbUQsV0FBQThhLEVBQUFqWixLQUFBOEssSUFBQTFQLEtBQUF1akIsUUFBQTFGLFNBQUF1QixFQUFBLElBQ0FtNUIsRUFBQXY0QyxLQUFBeVQsVUFBQThrQyxHQUNBeHVDLEVBQUEvSixLQUFBeVQsVUFBQTFKLEdBRUEvSixLQUFBbzRDLGFBQUF6cUMsTUFBQTVELEVBQUFxVixHQUVBLElBQUFvM0IsRUFBQSxJQUFBNTJDLEVBQUFrckMsY0FDQXAvQixPQUFBMUwsS0FBQXVqQixRQUNBN1YsS0FBQTFOLEtBQUFrdEIsTUFDQTRELFVBQUE5d0IsS0FBQSt2QixXQUNBZ0IsUUFBQS93QixLQUFBZ3dCLFNBQ0FzSCxRQUFBdDNCLEtBQUFzNEMsYUFBQXA1QyxLQUFBYyxNQUNBa3JDLGFBQUFsckMsS0FBQTZyQyxjQUNBVixPQUFBbnJDLEtBQUFtckMsT0FDQUMsUUFBQXByQyxLQUFBb3JDLFVBQ1U1bkMsUUFBQXhELEtBQUE0USxRQWNWLE9BWkE1USxLQUFBa3RCLE9BQUFsdEIsS0FBQTZ5QixTQUVBN3lCLEtBQUE0ckIsT0FBQUosZUFBQTVyQixFQUFBeUUsTUFBQUUsUUFBQXdGLEVBQUF3dUMsRUFBQXY0QyxLQUFBNnJDLGVBR0E3ckMsS0FBQW8yQyxlQUFBeHpDLEtBQUE0ekMsR0FFQXgyQyxLQUFBa3RCLE9BQUF0dEIsRUFBQStCLFFBQUFrYyxHQUNBMjRCLEVBQUE3b0MsTUFBQTVELEVBQUFxVixHQUVBbzNCLEVBQUE3b0MsTUFBQTVELEVBQUFxVixFQUFBbTVCLEdBRUF2NEMsTUFRQUosRUFBQXM0QyxPQUFBNTRDLFVBQUEyekIsTUFBQSxTQUFBN3FCLEdBTUEsT0FMQUEsRUFBQXBJLEtBQUF5VCxVQUFBckwsR0FDQXBJLEtBQUFvNEMsYUFBQS80QixLQUFBalgsR0FDQXBJLEtBQUFvMkMsZUFBQXpzQyxRQUFBLFNBQUE2c0MsR0FDQUEsRUFBQW4zQixLQUFBalgsS0FFQXBJLE1BWUFKLEVBQUFzNEMsT0FBQTU0QyxVQUFBMHpCLFFBQUEsU0FBQTVxQixFQUFBZ1gsRUFBQXZCLEdBR0EsT0FGQTdkLEtBQUFpekIsTUFBQTdxQixHQUNBcEksS0FBQSt5QixPQUFBM3FCLEVBQUFnWCxFQUFBdkIsR0FDQTdkLE1BYUFKLEVBQUFzNEMsT0FBQTU0QyxVQUFBMjRDLEtBQUEsU0FBQTc0QixFQUFBaFgsR0FTQSxPQVJBQSxFQUFBcEksS0FBQXlULFVBQUFyTCxHQUNBcEksS0FBQTRyQixPQUFBaFEsZUFBQXhULEtBQUF4SSxFQUFBeUUsTUFBQUMsVUFDQThhLEVBQUFwZixLQUFBeVQsVUFBQTJMLEdBRUFwZixLQUFBaXpCLE1BQUE3cUIsR0FFQXBJLEtBQUEreUIsT0FBQTNxQixFQUFBZ1gsSUFFQXBmLE1BYUFKLEVBQUFzNEMsT0FBQTU0QyxVQUFBdXlCLGNBQUEsU0FBQWYsRUFBQUMsR0FHQSxPQUZBL3dCLEtBQUE4d0IsWUFDQTl3QixLQUFBK3dCLFVBQ0Evd0IsTUFRQTVCLE9BQUFDLGVBQUF1QixFQUFBczRDLE9BQUE1NEMsVUFBQSxhQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUErdkIsWUFFQXJ2QixJQUFBLFNBQUFvd0IsR0FDQTl3QixLQUFBK3ZCLFdBQUFlLEVBRUE5d0IsS0FBQW8yQyxlQUFBenNDLFFBQUEsU0FBQTZzQyxHQUNBQSxFQUFBMWxCLGlCQVVBMXlCLE9BQUFDLGVBQUF1QixFQUFBczRDLE9BQUE1NEMsVUFBQSxXQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFnd0IsVUFFQXR2QixJQUFBLFNBQUFxd0IsR0FDQS93QixLQUFBZ3dCLFNBQUFlLEVBRUEvd0IsS0FBQW8yQyxlQUFBenNDLFFBQUEsU0FBQTZzQyxHQUNBQSxFQUFBemxCLGVBVUEzeUIsT0FBQUMsZUFBQXVCLEVBQUFzNEMsT0FBQTU0QyxVQUFBLFVBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXVqQixTQUVBN2lCLElBQUEsU0FBQWdMLEdBQ0ExTCxLQUFBdWpCLFFBQUE3aUIsSUFBQWdMLE1BU0F0TixPQUFBQyxlQUFBdUIsRUFBQXM0QyxPQUFBNTRDLFVBQUEsUUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBa3RCLE9BRUF4c0IsSUFBQSxTQUFBZ04sR0FFQSxHQUFBMU4sS0FBQWt0QixRQUFBeGYsRUFBQSxDQUdBMU4sS0FBQWt0QixNQUFBeGYsRUFDQSxJQUFBbEksRUFBQXhGLEtBQUF3RixNQUNBLEdBQUFrSSxFQUdjLENBRWQsSUFBQXNlLEVBQUFoc0IsS0FBQTRyQixPQUFBRixhQUFBOXJCLEVBQUF5RSxNQUFBRSxRQUFBaUIsR0FDQXdtQixJQUNBaHNCLEtBQUFvMkMsZUFBQXpzQyxRQUFBLFNBQUE2c0MsR0FDQUEsRUFBQTlvQyxTQUVBMU4sS0FBQTRyQixPQUFBN2lCLE9BQUFpakIsRUFBQTVqQixNQUNBcEksS0FBQW80QyxhQUFBcnZDLE9BQUFpakIsRUFBQTVqQixZQVRBcEksS0FBQXc0QyxxQkFBQWh6QyxPQW9CQTVGLEVBQUFzNEMsT0FBQTU0QyxVQUFBazVDLHFCQUFBLFNBQUFoekMsR0FDQSxHQUFBeEYsS0FBQTRyQixPQUFBaFEsZUFBQXBXLEtBQUE1RixFQUFBeUUsTUFBQUMsUUFBQSxDQUNBLElBQUFtMEMsRUFBQXo0QyxLQUFBNHJCLE9BQUFGLGFBQUE5ckIsRUFBQXlFLE1BQUFFLFFBQUFpQixHQUNBa3pDLEVBQUExNEMsS0FBQW80QyxhQUFBNXRCLGVBQUFobEIsR0FDQXlwQyxFQUFBcnFDLEtBQUE4SyxJQUFBOUssS0FBQW1kLEtBQUEyMkIsRUFBQTE0QyxLQUFBMEwsT0FBQW1TLFVBQUEsR0FDQTg2QixFQUFBMzRDLEtBQUFvNEMsYUFBQXp0QixjQUFBc2tCLEVBQUFqdkMsS0FBQTBMLE9BQUFtUyxTQUFBNDZCLElBQUFyd0MsS0FBQXBJLEtBQUF1cUIsV0FBQXJpQixLQUNBbEksS0FBQXFmLEtBQUFzNUIsS0FVQXY2QyxPQUFBQyxlQUFBdUIsRUFBQXM0QyxPQUFBNTRDLFVBQUEsZ0JBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQTZyQyxlQUVBbnJDLElBQUEsU0FBQXFyQyxHQUNBL3JDLEtBQUE2ckMsY0FBQUUsRUFDQSxJQUFBdm1DLEVBQUF4RixLQUFBd0YsTUFDQXhGLEtBQUFvNEMsYUFBQWovQixVQUFBNEMsZUFBQWd3QixFQUFBdm1DLEdBRUF4RixLQUFBa3RCLE9BQ0FsdEIsS0FBQXc0QyxxQkFBQWh6QyxHQUdBeEYsS0FBQW8yQyxlQUFBenNDLFFBQUEsU0FBQTZzQyxHQUNBQSxFQUFBdEwsYUFBQW52QixlQUFBZ3dCLEVBQUF2bUMsUUFVQXBILE9BQUFDLGVBQUF1QixFQUFBczRDLE9BQUE1NEMsVUFBQSxZQUNBZixJQUFBLFdBQ0EsSUFBQWlILEVBQUF4RixLQUFBd0YsTUFDQSxHQUFBeEYsS0FBQTRyQixPQUFBaFEsZUFBQXBXLEtBQUE1RixFQUFBeUUsTUFBQUMsU0FBQXRFLEtBQUFzMEIsT0FBQSxDQUNBLElBQUF6VyxFQUFBN2QsS0FBQTBMLE9BQUFtUyxTQUVBLE9BREE3ZCxLQUFBbzRDLGFBQUE1dEIsZUFBQWhsQixHQUNBcVksRUFFQSxZQVVBemYsT0FBQUMsZUFBQXVCLEVBQUFzNEMsT0FBQTU0QyxVQUFBLFdBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXVqQixRQUFBZCxTQUVBL2hCLElBQUEsU0FBQWcxQixHQUNBMTFCLEtBQUF1akIsUUFBQWQsUUFBQWlULEtBVUF0M0IsT0FBQUMsZUFBQXVCLEVBQUFzNEMsT0FBQTU0QyxVQUFBLFVBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXVqQixRQUFBK1EsVUFPQTEwQixFQUFBczRDLE9BQUE1NEMsVUFBQW1CLFFBQUEsV0FXQSxPQVRBVCxLQUFBbzJDLGVBQUF6c0MsUUFBQSxTQUFBNnNDLEdBQ0FBLEVBQUEvMUMsWUFFQVQsS0FBQW8yQyxlQUFBLEtBQ0F4MkMsRUFBQWd6QixPQUFBdHpCLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUF1akIsUUFBQTlpQixVQUNBVCxLQUFBdWpCLFFBQUEsS0FDQXZqQixLQUFBbzRDLGFBQUEzM0MsVUFDQVQsS0FBQW80QyxhQUFBLEtBQ0FwNEMsTUFFQUosRUFBQXM0QyxTQUVBcjRDLEVBQUEsU0FBQUQsR0F1UEEsT0E3T0FBLEVBQUFnNUMsUUFBQSxTQUFBdlgsR0FDQSxJQUFBNTVCLEVBQUEzRCxNQUFBeEUsVUFBQW9JLE1BQUE3SixLQUFBeUYsV0FDQW1FLEVBQUFtQixRQUNBLElBQUE5RixFQUFBbEQsRUFBQTRDLFNBQUFpRixHQUFBLFVBQUE3SCxFQUFBZzVDLFNBK0NBLFFBQUEzNkMsS0E5Q0EyQixFQUFBL0IsS0FBQW1DLE1BTUFBLEtBQUF5eUIsUUFBQXp5QixLQUFBNFEsT0FBQSxJQUFBaFIsRUFBQXd5QixPQUFBdHZCLEVBQUF1dkIsUUFRQXJ5QixLQUFBcXlCLE9BQUFyeUIsS0FBQXl5QixRQUFBSixPQUNBcnlCLEtBQUFrRSxVQUFBLFVBRUFsRSxLQUFBeXlCLFFBQUE3aEIsY0FBQXBELGFBQUEsRUFDQXhOLEtBQUF5eUIsUUFBQTdoQixjQUFBbkQsaUJBQUEsV0FFQXpOLEtBQUF1eUIsS0FBQXp2QixFQUFBeXZCLEtBTUF2eUIsS0FBQTY0QyxZQU1BNzRDLEtBQUF1aEMsY0FBQSxFQU1BdmhDLEtBQUE4NEMsUUFBQWgyQyxFQUFBcW9DLE9BTUFuckMsS0FBQSs0QyxTQUFBajJDLEVBQUFzb0MsUUFFQS9KLEVBQ0FyaEMsS0FBQXVoQyxnQkFDQXZoQyxLQUFBbUksSUFBQWxLLEVBQUFvakMsRUFBQXBqQyxHQUFBK0IsS0FBQXdoQyxjQUFBdGlDLEtBQUFjLEtBQUE4QyxFQUFBdXhCLFVBR0F6MEIsRUFBQThGLE9BQUE5RixFQUFBZzVDLFFBQUFoNUMsRUFBQW1RLFdBS0FuUSxFQUFBZzVDLFFBQUFwMkMsVUFDQTZ2QixPQUFBLEVBQ0FFLE1BQUEsRUFDQThCLE9BQUF6MEIsRUFBQXFFLEtBQ0FrbkMsT0FBQSxFQUNBQyxRQUFBLEdBT0F4ckMsRUFBQWc1QyxRQUFBdDVDLFVBQUFraUMsY0FBQSxTQUFBdjZCLEdBQ0FqSCxLQUFBdWhDLGdCQUNBLElBQUF2aEMsS0FBQXVoQyxlQUFBdDZCLEdBQ0FBLEVBQUFqSCxPQVlBNUIsT0FBQUMsZUFBQXVCLEVBQUFnNUMsUUFBQXQ1QyxVQUFBLFFBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXl5QixRQUFBRixNQUVBN3hCLElBQUEsU0FBQTZ4QixHQUNBdnlCLEtBQUF5eUIsUUFBQUYsVUFTQW4wQixPQUFBQyxlQUFBdUIsRUFBQWc1QyxRQUFBdDVDLFVBQUEsVUFDQWYsSUFBQSxXQUNBLE9BQUF5QixLQUFBODRDLFNBRUFwNEMsSUFBQSxTQUFBeXFDLEdBQ0FuckMsS0FBQTg0QyxRQUFBM04sRUFDQW5yQyxLQUFBb3ZDLFNBQUEsU0FBQTRKLEdBQ0FBLEVBQUE3TixjQVVBL3NDLE9BQUFDLGVBQUF1QixFQUFBZzVDLFFBQUF0NUMsVUFBQSxXQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUErNEMsVUFFQXI0QyxJQUFBLFNBQUEwcUMsR0FDQXByQyxLQUFBKzRDLFNBQUEzTixFQUNBcHJDLEtBQUFvdkMsU0FBQSxTQUFBNEosR0FDQUEsRUFBQTVOLGVBV0FodEMsT0FBQUMsZUFBQXVCLEVBQUFnNUMsUUFBQXQ1QyxVQUFBLFNBQ0FmLElBQUEsV0FDQSxJQUFBMDZDLEdBQUEsRUFJQSxPQUhBajVDLEtBQUFvdkMsU0FBQSxTQUFBNEosR0FDQUMsS0FBQUQsRUFBQWhzQyxRQUFBcE4sRUFBQXlFLE1BQUFDLFVBRUEyMEMsRUFBQXI1QyxFQUFBeUUsTUFBQUMsUUFBQTFFLEVBQUF5RSxNQUFBRSxXQVNBM0UsRUFBQWc1QyxRQUFBdDVDLFVBQUFtaUMsSUFBQSxTQUFBeGpDLEdBQ0EsT0FBQStCLEtBQUE2NEMsU0FBQXQ1QyxlQUFBdEIsSUFRQTJCLEVBQUFnNUMsUUFBQXQ1QyxVQUFBZixJQUFBLFNBQUFOLEdBQ0EsR0FBQStCLEtBQUF5aEMsSUFBQXhqQyxHQUNBLE9BQUErQixLQUFBNjRDLFNBQUE1NkMsR0FFQSxVQUFBZ0MsTUFBQSxpQ0FBQWhDLElBU0EyQixFQUFBZzVDLFFBQUF0NUMsVUFBQTh2QyxTQUFBLFNBQUFub0MsR0FDQSxRQUFBaXlDLEtBQUFsNUMsS0FBQTY0QyxTQUNBNXhDLEVBQUFqSCxLQUFBNjRDLFNBQUFLLE1BRUEsT0FBQWw1QyxNQVNBNUIsT0FBQUMsZUFBQXVCLEVBQUFnNUMsUUFBQXQ1QyxVQUFBLFVBQ0FmLElBQUEsV0FDQSxJQUFBbWpDLEdBQUEsRUFJQSxPQUhBMWhDLEtBQUFvdkMsU0FBQSxTQUFBNEosR0FDQXRYLEtBQUFzWCxFQUFBMWtCLFNBRUFvTixLQVlBOWhDLEVBQUFnNUMsUUFBQXQ1QyxVQUFBNkksSUFBQSxTQUFBbEssRUFBQW0yQixFQUFBbnRCLEdBSUEsT0FIQWpILEtBQUE2NEMsU0FBQTU2QyxHQUFBLElBQUEyQixFQUFBczRDLE9BQUE5akIsRUFBQW50QixHQUFBekQsUUFBQXhELEtBQUE0USxRQUNBNVEsS0FBQTY0QyxTQUFBNTZDLEdBQUFrdEMsT0FBQW5yQyxLQUFBODRDLFFBQ0E5NEMsS0FBQTY0QyxTQUFBNTZDLEdBQUFtdEMsUUFBQXByQyxLQUFBKzRDLFNBQ0EvNEMsTUFPQUosRUFBQWc1QyxRQUFBdDVDLFVBQUE2NUMsUUFBQSxTQUFBL3dDLEdBQ0FwSSxLQUFBb3ZDLFNBQUEsU0FBQTRKLEdBQ0FBLEVBQUEzNUIsS0FBQWpYLE1BT0F4SSxFQUFBZzVDLFFBQUF0NUMsVUFBQW1CLFFBQUEsV0FXQSxPQVZBYixFQUFBbVEsVUFBQXpRLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUF5eUIsUUFBQWh5QixVQUNBVCxLQUFBeXlCLFFBQUEsS0FDQXp5QixLQUFBb0UsVUFBQSxVQUNBcEUsS0FBQXF5QixPQUFBLEtBQ0FyeUIsS0FBQTRRLE9BQUEsS0FDQTVRLEtBQUFvdkMsU0FBQSxTQUFBNEosR0FDQUEsRUFBQXY0QyxZQUVBVCxLQUFBNjRDLFNBQUEsS0FDQTc0QyxNQUVBSixFQUFBZzVDLFVBRUEvNEMsRUFBQSxTQUFBRCxHQWdRQSxPQTNPQUEsRUFBQXc1QyxVQUFBLFdBQ0EsSUFBQXQyQyxFQUFBbEQsRUFBQTRDLFNBQUFjLFdBQUEsVUFBQTFELEVBQUF3NUMsV0FDQXg1QyxFQUFBbVEsVUFBQWxTLEtBQUFtQyxNQU1BQSxLQUFBcTVDLGFBQUEsS0FNQXI1QyxLQUFBczVDLFFBQUEsS0FNQXQ1QyxLQUFBdTVDLFFBQUEsS0FNQXY1QyxLQUFBeXlCLFFBQUF6eUIsS0FBQTRRLE9BQUEsSUFBQWhSLEVBQUF3eUIsT0FBQXR2QixFQUFBdXZCLFFBUUFyeUIsS0FBQXF5QixPQUFBcnlCLEtBQUF5eUIsUUFBQUosT0FDQXJ5QixLQUFBa0UsVUFBQSxVQUNBbEUsS0FBQXV5QixLQUFBenZCLEVBQUF5dkIsTUFFQTN5QixFQUFBOEYsT0FBQTlGLEVBQUF3NUMsVUFBQXg1QyxFQUFBbVEsV0FLQW5RLEVBQUF3NUMsVUFBQTUyQyxVQUNBNnZCLE9BQUEsRUFDQUUsTUFBQSxHQVVBM3lCLEVBQUF3NUMsVUFBQTk1QyxVQUFBazNCLEtBQUEsU0FBQWdqQixHQUNBLE9BQUE1NUMsRUFBQXc1QyxVQUFBSyxtQkFBQXhzQyxLQUFBLFNBQUF5c0MsR0FDQSxJQUFBQyxFQUNBLEdBQUEvNUMsRUFBQThELFNBQUE4MUMsR0FDQUcsRUFBQUQsRUFBQUYsUUFNQSxLQUpBRyxFQUFBRCxFQUFBRSxLQUFBLFNBQUFELEdBQ0EsT0FBQUEsRUFBQUUsUUFBQUwsR0FBQUcsRUFBQUcsV0FBQU4sTUFHQUUsRUFBQXA0QyxPQUFBLEVBQ0FxNEMsRUFBQUQsRUFBQSxRQUNrQixJQUFBQyxHQUFBLzVDLEVBQUEwQyxVQUFBazNDLEdBQ2xCLFVBQUF2NUMsTUFBQSx1Q0FBQXU1QyxHQUdBeDVDLEtBQUF1NUMsUUFBQUksRUFFQSxJQUFBSSxHQUNBQyxPQUNBQyxrQkFBQSxFQUNBL3pDLFdBQUFsRyxLQUFBeUYsUUFBQVMsYUFNQSxPQUhBeXpDLElBQ0FJLEVBQUFDLE1BQUFGLFNBQUFILEVBQUFHLFVBRUFqb0MsVUFBQXFvQyxhQUFBQyxhQUFBSixHQUFBOXNDLEtBQUEsU0FBQW10QyxHQVNBLE9BUEFwNkMsS0FBQXM1QyxVQUNBdDVDLEtBQUFzNUMsUUFBQWMsRUFFQXA2QyxLQUFBcTVDLGFBQUFyNUMsS0FBQXlGLFFBQUE0MEMsd0JBQUFELEdBRUFwNkMsS0FBQXE1QyxhQUFBNzFDLFFBQUF4RCxLQUFBNFEsU0FFQTVRLE1BQ2NkLEtBQUFjLFFBQ0pkLEtBQUFjLFFBTVZKLEVBQUF3NUMsVUFBQTk1QyxVQUFBeUwsTUFBQSxXQVdBLE9BVkEvSyxLQUFBczVDLFVBQ0F0NUMsS0FBQXM1QyxRQUFBZ0IsaUJBQUEzd0MsUUFBQSxTQUFBNHdDLEdBQ0FBLEVBQUFsN0IsU0FFQXJmLEtBQUFzNUMsUUFBQSxLQUVBdDVDLEtBQUFxNUMsYUFBQWpyQyxhQUNBcE8sS0FBQXE1QyxhQUFBLE1BRUFyNUMsS0FBQXU1QyxRQUFBLEtBQ0F2NUMsTUFXQUosRUFBQXc1QyxVQUFBSyxpQkFBQSxXQUNBLE9BQUE1bkMsVUFBQXFvQyxhQUFBVCxtQkFBQXhzQyxLQUFBLFNBQUF5c0MsR0FDQSxPQUFBQSxFQUFBenpCLE9BQUEsU0FBQTB6QixHQUNBLHFCQUFBQSxFQUFBYSxVQVlBcDhDLE9BQUFDLGVBQUF1QixFQUFBdzVDLFVBQUE5NUMsVUFBQSxTQUNBZixJQUFBLFdBQ0EsT0FBQXlCLEtBQUFzNUMsU0FBQXQ1QyxLQUFBczVDLFFBQUFtQixPQUFBNzZDLEVBQUF5RSxNQUFBQyxRQUFBMUUsRUFBQXlFLE1BQUFFLFdBZUFuRyxPQUFBQyxlQUFBdUIsRUFBQXc1QyxVQUFBOTVDLFVBQUEsWUFDQWYsSUFBQSxXQUNBLEdBQUF5QixLQUFBdTVDLFFBQ0EsT0FBQXY1QyxLQUFBdTVDLFFBQUFPLFlBYUExN0MsT0FBQUMsZUFBQXVCLEVBQUF3NUMsVUFBQTk1QyxVQUFBLFdBQ0FmLElBQUEsV0FDQSxHQUFBeUIsS0FBQXU1QyxRQUNBLE9BQUF2NUMsS0FBQXU1QyxRQUFBbUIsV0FhQXQ4QyxPQUFBQyxlQUFBdUIsRUFBQXc1QyxVQUFBOTVDLFVBQUEsU0FDQWYsSUFBQSxXQUNBLEdBQUF5QixLQUFBdTVDLFFBQ0EsT0FBQXY1QyxLQUFBdTVDLFFBQUFNLFNBYUF6N0MsT0FBQUMsZUFBQXVCLEVBQUF3NUMsVUFBQTk1QyxVQUFBLFFBQ0FmLElBQUEsV0FDQSxPQUFBeUIsS0FBQXl5QixRQUFBRixNQUVBN3hCLElBQUEsU0FBQTZ4QixHQUNBdnlCLEtBQUF5eUIsUUFBQUYsVUFPQTN5QixFQUFBdzVDLFVBQUE5NUMsVUFBQW1CLFFBQUEsV0FPQSxPQU5BYixFQUFBbVEsVUFBQXpRLFVBQUFtQixRQUFBNUMsS0FBQW1DLE1BQ0FBLEtBQUErSyxRQUNBL0ssS0FBQW9FLFVBQUEsVUFDQXBFLEtBQUF5eUIsUUFBQWh5QixVQUNBVCxLQUFBeXlCLFFBQUEsS0FDQXp5QixLQUFBcXlCLE9BQUEsS0FDQXJ5QixNQVVBNUIsT0FBQUMsZUFBQXVCLEVBQUF3NUMsVUFBQSxhQUNBNzZDLElBQUEsV0FDQSxPQUFBcUIsRUFBQTBDLFVBQUF1UCxVQUFBcW9DLGVBQUF0NkMsRUFBQVksV0FBQXFSLFVBQUFxb0MsYUFBQUMsaUJBR0F2NkMsRUFBQXc1QyxZQUVBdjVDLEVBQUEsU0FBQUQsR0EwRkEsT0E5RUFBLEVBQUErNkMsS0FBQSxTQUFBbDNDLEVBQUEwUCxHQUNBLEtBQUFuVCxnQkFBQUosRUFBQSs2QyxNQUdBLFdBQUEvNkMsRUFBQSs2QyxLQUFBbDNDLEVBQUEwUCxHQUZBdlQsRUFBQW1XLFVBQUFsWSxLQUFBbUMsS0FBQXlELEVBQUEwUCxJQUtBdlQsRUFBQThGLE9BQUE5RixFQUFBKzZDLEtBQUEvNkMsRUFBQW1XLFdBTUFuVyxFQUFBKzZDLEtBQUFyN0MsVUFBQWtVLGNBQUEsT0FPQTVULEVBQUErNkMsS0FBQXI3QyxVQUFBaVYsa0JBQUEsU0FBQWMsR0FDQSxPQUFBelYsRUFBQW1XLFVBQUFhLEtBQUFoWCxFQUFBbVcsVUFBQXpXLFVBQUFpVixrQkFBQTFXLEtBQUFtQyxLQUFBcVYsS0FRQXpWLEVBQUErNkMsS0FBQXI3QyxVQUFBK1UsY0FBQSxTQUFBbUIsR0FDQSxPQUFBNVYsRUFBQW1XLFVBQUFhLEtBQUFoWCxFQUFBbVcsVUFBQXpXLFVBQUErVSxjQUFBeFcsS0FBQW1DLEtBQUF3VixLQVFBNVYsRUFBQSs2QyxLQUFBcjdDLFVBQUE2VSxjQUFBLFNBQUFtQixHQUNBLE9BQUExVixFQUFBbVcsVUFBQWEsS0FBQWhYLEVBQUFtVyxVQUFBelcsVUFBQTZVLGNBQUF0VyxLQUFBbUMsS0FBQXNWLEtBUUExVixFQUFBKzZDLEtBQUFyN0MsVUFBQXFWLGdCQUFBLFNBQUFZLEdBQ0EsT0FBQTNWLEVBQUFtVyxVQUFBYSxLQUFBaFgsRUFBQW1XLFVBQUF6VyxVQUFBcVYsZ0JBQUE5VyxLQUFBbUMsS0FBQXVWLEtBUUEzVixFQUFBKzZDLEtBQUFyN0MsVUFBQXNVLE9BQUEsV0FDQSxPQUFBNVQsS0FBQXFJLFdBUUF6SSxFQUFBKzZDLEtBQUFyN0MsVUFBQXFVLFlBQUEsV0FDQSxPQUFBL1QsRUFBQW1XLFVBQUFHLEtBQUFsVyxLQUFBNFQsV0FTQWhVLEVBQUErNkMsS0FBQXI3QyxVQUFBa1gsVUFBQSxTQUFBalIsR0FDQSxXQUFBdkYsS0FBQU8sWUFBQVAsS0FBQTRULFNBQUFyTyxJQUVBM0YsRUFBQSs2QyxPQUdBLzZDLEVBdnp2QkFnN0MsSUFDRy84QyxLQUFBTCxFQUFBRixFQUFBRSxFQUFBQyxRQUFBRCxRQUFBa0MscUJDTkgsU0FBQW03QyxHQUFBLElBQUFDLEVBQTJHcjlDLEVBQUFELFFBQStOLFNBQUFtYixFQUFBSyxFQUFBamIsRUFBQUMsR0FBeUIsU0FBQTJNLEVBQUEyTixFQUFBeWlDLEdBQWdCLElBQUFoOUMsRUFBQXVhLEdBQUEsQ0FBVSxJQUFBVSxFQUFBVixHQUFBLENBQVUsSUFBQTVhLEVBQUEsbUJBQUFvOUMsS0FBMEMsSUFBQUMsR0FBQXI5QyxFQUFBLE9BQWdCbzlDLEVBQUN4aUMsR0FBQSxHQUFPLEdBQUFMLEVBQUEsT0FBQUEsRUFBQUssR0FBQSxHQUFvQixJQUFBbFcsRUFBQSxJQUFBbkMsTUFBQSx1QkFBQXFZLEVBQUEsS0FBOEMsTUFBQWxXLEVBQUE0NEMsS0FBQSxtQkFBQTU0QyxFQUFrQyxJQUFBcWYsRUFBQTFqQixFQUFBdWEsSUFBWTlhLFlBQVl3YixFQUFBVixHQUFBLEdBQUF6YSxLQUFBNGpCLEVBQUFqa0IsUUFBQSxTQUFBbWIsR0FBbUMsSUFBQTVhLEVBQUFpYixFQUFBVixHQUFBLEdBQUFLLEdBQWlCLE9BQUFoTyxFQUFBNU0sR0FBQTRhLElBQWU4SSxJQUFBamtCLFFBQUFtYixFQUFBSyxFQUFBamIsRUFBQUMsR0FBc0IsT0FBQUQsRUFBQXVhLEdBQUE5YSxRQUFvQixRQUFBeWEsRUFBQSxtQkFBQTZpQyxLQUFBeGlDLEVBQUEsRUFBa0RBLEVBQUF0YSxFQUFBc0QsT0FBV2dYLElBQUEzTixFQUFBM00sRUFBQXNhLElBQVksT0FBQTNOLEVBQWpiLEVBQTRic3dDLEdBQUEsU0FBQXRpQyxFQUFBSyxFQUFBamIsSUFBbUIsU0FBQTRhLEdBQWEsYUFBYSxTQUFBSyxFQUFBTCxHQUFjLElBQUFLLEVBQUFMLEVBQUF1aUMsV0FBQSxHQUFzQixPQUFBbGlDLElBQUFmLEdBQUFlLElBQUF5SSxFQUFBLEdBQUF6SSxJQUFBVixHQUFBVSxJQUFBcmIsRUFBQSxHQUFBcWIsRUFBQStoQyxHQUFBLEVBQUEvaEMsRUFBQStoQyxFQUFBLEdBQUEvaEMsRUFBQStoQyxFQUFBLE1BQUEvaEMsRUFBQTVXLEVBQUEsR0FBQTRXLEVBQUE1VyxFQUFBNFcsRUFBQXRiLEVBQUEsR0FBQXNiLEVBQUF0YixFQUFBLFVBQTZrQyxJQUFBaU4sRUFBQSxvQkFBQXVZLHNCQUFBcGYsTUFBQW1VLEVBQUEsSUFBQWlqQyxXQUFBLEdBQUE1aUMsRUFBQSxJQUFBNGlDLFdBQUEsR0FBQUgsRUFBQSxJQUFBRyxXQUFBLEdBQUF4OUMsRUFBQSxJQUFBdzlDLFdBQUEsR0FBQTk0QyxFQUFBLElBQUE4NEMsV0FBQSxHQUFBejVCLEVBQUEsSUFBQXk1QixXQUFBLEdBQUF2OUMsRUFBQSxJQUFBdTlDLFdBQUEsR0FBa012aUMsRUFBQXdpQyxZQUFockMsU0FBQXhpQyxHQUFjLFNBQUE1YSxFQUFBNGEsR0FBY3ZXLEVBQUF6RSxLQUFBZ2IsRUFBUyxJQUFBM2EsRUFBQWlhLEVBQUFLLEVBQUF5aUMsRUFBQXI5QyxFQUFBMEUsRUFBZ0IsR0FBQXVXLEVBQUFyWCxPQUFBLGNBQUFyQixNQUFBLGtEQUFrRixJQUFBd2hCLEVBQUE5SSxFQUFBclgsT0FBZTVELEVBQUEsTUFBQWliLEVBQUFwRixPQUFBa08sRUFBQSxXQUFBOUksRUFBQXBGLE9BQUFrTyxFQUFBLE9BQUFyZixFQUFBLElBQUF1SSxFQUFBLEVBQUFnTyxFQUFBclgsT0FBQSxFQUFBNUQsR0FBQTRhLEVBQUE1YSxFQUFBLEVBQUFpYixFQUFBclgsT0FBQSxFQUFBcVgsRUFBQXJYLE9BQWtHLElBQUEzRCxFQUFBLEVBQVEsSUFBQUssRUFBQSxFQUFBaWEsRUFBQSxFQUFZamEsRUFBQXNhLEVBQUl0YSxHQUFBLEVBQUFpYSxHQUFBLEVBQUFsYSxHQUFBLFVBQUFnOUMsRUFBQS9oQyxFQUFBTCxFQUFBcEYsT0FBQXZWLEtBQUEsR0FBQWdiLEVBQUFMLEVBQUFwRixPQUFBdlYsRUFBQSxRQUFBZ2IsRUFBQUwsRUFBQXBGLE9BQUF2VixFQUFBLE9BQUFnYixFQUFBTCxFQUFBcEYsT0FBQXZWLEVBQUEsV0FBQUQsR0FBQSxNQUFBZzlDLElBQUEsR0FBQWg5QyxFQUFBLElBQUFnOUMsR0FBc0ksV0FBQXI5QyxFQUFBSyxFQUFBLEtBQUFnOUMsRUFBQS9oQyxFQUFBTCxFQUFBcEYsT0FBQXZWLEtBQUEsRUFBQWdiLEVBQUFMLEVBQUFwRixPQUFBdlYsRUFBQSxhQUFBTixJQUFBSyxHQUFBZzlDLEVBQUEvaEMsRUFBQUwsRUFBQXBGLE9BQUF2VixLQUFBLEdBQUFnYixFQUFBTCxFQUFBcEYsT0FBQXZWLEVBQUEsT0FBQWdiLEVBQUFMLEVBQUFwRixPQUFBdlYsRUFBQSxnQkFBQUQsRUFBQSxJQUFBZzlDLElBQUEzNEMsR0FBMHhCdVcsRUFBQXlpQyxjQUE3bkIsU0FBQXppQyxHQUFjLFNBQUFLLEVBQUFMLEdBQWMseUVBQUFwRixPQUFBb0YsR0FBbUYsU0FBQTVhLEVBQUE0YSxHQUFjLE9BQUFLLEVBQUFMLEdBQUEsT0FBQUssRUFBQUwsR0FBQSxPQUFBSyxFQUFBTCxHQUFBLE1BQUFLLEVBQUEsR0FBQUwsR0FBa0QsSUFBQTNhLEVBQUEyTSxFQUFBc04sRUFBQUssRUFBQUssRUFBQXJYLE9BQUEsRUFBQXk1QyxFQUFBLEdBQTRCLElBQUEvOEMsRUFBQSxFQUFBaWEsRUFBQVUsRUFBQXJYLE9BQUFnWCxFQUFxQnRhLEVBQUFpYSxFQUFJamEsR0FBQSxFQUFBMk0sR0FBQWdPLEVBQUEzYSxJQUFBLEtBQUEyYSxFQUFBM2EsRUFBQSxPQUFBMmEsRUFBQTNhLEVBQUEsR0FBQSs4QyxHQUFBaDlDLEVBQUE0TSxHQUE2QyxPQUFBMk4sR0FBVSxPQUFBM04sRUFBQWdPLElBQUFyWCxPQUFBLEdBQUF5NUMsR0FBQS9oQyxFQUFBck8sR0FBQSxHQUFBb3dDLEdBQUEvaEMsRUFBQXJPLEdBQUEsTUFBQW93QyxHQUFBLEtBQXdELE1BQU0sT0FBQXB3QyxHQUFBZ08sSUFBQXJYLE9BQUEsT0FBQXFYLElBQUFyWCxPQUFBLEdBQUF5NUMsR0FBQS9oQyxFQUFBck8sR0FBQSxJQUFBb3dDLEdBQUEvaEMsRUFBQXJPLEdBQUEsTUFBQW93QyxHQUFBL2hDLEVBQUFyTyxHQUFBLE1BQUFvd0MsR0FBQSxJQUF5RixPQUFBQSxHQUFsb0MsTUFBKzJDLElBQUFoOUMsRUFBQWlDLEtBQUFxN0MsWUFBNEJ0OUMsUUFBT3U5QyxHQUFBLFNBQUEzaUMsRUFBQUssRUFBQWpiLFNBQXlCdzlDLEdBQUEsU0FBQTVpQyxFQUFBSyxFQUFBamIsSUFBcUIsU0FBQWliLEdBQWEsYUFBeU8sU0FBQXJPLElBQWEsT0FBQXNOLEVBQUF1akMsb0JBQUEsc0JBQW1ELFNBQUF2akMsRUFBQVUsR0FBYyxPQUFBM1ksZ0JBQUFpWSxLQUFBdWpDLHNCQUFBeDdDLEtBQUFzQixPQUFBLEVBQUF0QixLQUFBa0IsWUFBQSxvQkFBQXlYLEVBQWtQLFNBQUFBLEVBQUFLLEdBQWdCLEdBQUFMLEVBQUFuWixFQUFBbVosRUFBQUssRUFBQSxNQUFBdkUsRUFBQXVFLEtBQUFmLEVBQUF1akMsb0JBQUEsUUFBQXo5QyxFQUFBLEVBQTBEQSxFQUFBaWIsRUFBSWpiLElBQUE0YSxFQUFBNWEsR0FBQSxFQUFXLE9BQUE0YSxFQUEzVUwsQ0FBQXRZLEtBQUEyWSxHQUFBLGlCQUFBQSxFQUFvVixTQUFBQSxFQUFBSyxFQUFBamIsR0FBa0IsdUJBQUFBLEdBQUEsS0FBQUEsTUFBQSxTQUFBNGEsRUFBQW5aLEVBQUFtWixFQUFBLEVBQUFsWixFQUFBdVosRUFBQWpiLEtBQUEwOUMsTUFBQXppQyxFQUFBamIsR0FBQTRhLEVBQXRXb2lDLENBQUEvNkMsS0FBQTJZLEVBQUFyVixVQUFBaEMsT0FBQSxFQUFBZ0MsVUFBQSxXQUFrYixTQUFBcVYsRUFBQUssR0FBZ0IsR0FBQWYsRUFBQXlqQyxTQUFBMWlDLEdBQUEsT0FBb1MsU0FBQUwsRUFBQUssR0FBZ0IsSUFBQWpiLEVBQUEsRUFBQTBXLEVBQUF1RSxFQUFBMVgsUUFBb0IsT0FBQXFYLEVBQUFuWixFQUFBbVosRUFBQTVhLEdBQUFpYixFQUFBZ29CLEtBQUFyb0IsRUFBQSxJQUFBNWEsR0FBQTRhLEVBQXhVdlcsQ0FBQXVXLEVBQUFLLEdBQStCLEdBQUEyaUMsRUFBQTNpQyxHQUFBLE9BQTJVLFNBQUFMLEVBQUFLLEdBQWdCLElBQUFqYixFQUFBLEVBQUEwVyxFQUFBdUUsRUFBQTFYLFFBQW9CcVgsRUFBQW5aLEVBQUFtWixFQUFBNWEsR0FBUyxRQUFBQyxFQUFBLEVBQVlBLEVBQUFELEVBQUlDLEdBQUEsRUFBQTJhLEVBQUEzYSxHQUFBLElBQUFnYixFQUFBaGIsR0FBbUIsT0FBQTJhLEVBQTNaOEksQ0FBQTlJLEVBQUFLLEdBQXNCLFNBQUFBLEVBQUEsVUFBQWdMLFVBQUEsbURBQWtGLHVCQUFBNDNCLFlBQUEsQ0FBb0MsR0FBQTVpQyxFQUFBdE4sa0JBQUFrd0MsWUFBQSxPQUFBaitDLEVBQUFnYixFQUFBSyxHQUFpRCxHQUFBQSxhQUFBNGlDLFlBQUEsT0FBZ1UsU0FBQWpqQyxFQUFBSyxHQUFnQixPQUFBZixFQUFBdWpDLHFCQUFBeGlDLEVBQUE2aUMsV0FBQWxqQyxFQUFBVixFQUFBNmpDLFNBQUEsSUFBQTU0QixXQUFBbEssS0FBQUwsRUFBQWhiLEVBQUFnYixFQUFBLElBQUF1SyxXQUFBbEssSUFBQUwsRUFBaFY3YSxDQUFBNmEsRUFBQUssR0FBMEMsT0FBQUEsRUFBQTFYLE9BQTZZLFNBQUFxWCxFQUFBSyxHQUFnQixJQUFBamIsRUFBQSxFQUFBMFcsRUFBQXVFLEVBQUExWCxRQUFvQnFYLEVBQUFuWixFQUFBbVosRUFBQTVhLEdBQVMsUUFBQUMsRUFBQSxFQUFZQSxFQUFBRCxFQUFJQyxHQUFBLEVBQUEyYSxFQUFBM2EsR0FBQSxJQUFBZ2IsRUFBQWhiLEdBQW1CLE9BQUEyYSxFQUE3ZHhaLENBQUF3WixFQUFBSyxHQUFzZSxTQUFBTCxFQUFBSyxHQUFnQixJQUFBamIsRUFBQUMsRUFBQSxFQUFVLFdBQUFnYixFQUFBL0ssTUFBQTB0QyxFQUFBM2lDLEVBQUEraUMsUUFBQWgrQyxFQUFBaWIsRUFBQStpQyxLQUFBLzlDLEVBQUEsRUFBQXlXLEVBQUExVyxFQUFBdUQsU0FBQXFYLEVBQUFuWixFQUFBbVosRUFBQTNhLEdBQWtFLFFBQUEyTSxFQUFBLEVBQVlBLEVBQUEzTSxFQUFJMk0sR0FBQSxFQUFBZ08sRUFBQWhPLEdBQUEsSUFBQTVNLEVBQUE0TSxHQUFtQixPQUFBZ08sRUFBcm1CeGEsQ0FBQXdhLEVBQUFLLEdBQXhzQnRiLENBQUFzQyxLQUFBMlksSUFBQXJWLFVBQUFoQyxPQUFBLE1BQUEyVyxFQUFBVSxFQUFBclYsVUFBQSxRQUFBMlUsRUFBQVUsR0FBcTRCLFNBQUFoYixFQUFBZ2IsRUFBQUssR0FBZ0IsSUFBQWpiLEVBQUEsRUFBQTBXLEVBQUF1RSxFQUFBMVgsUUFBb0JxWCxFQUFBblosRUFBQW1aLEVBQUE1YSxHQUFTLFFBQUFDLEVBQUEsRUFBWUEsRUFBQUQsRUFBSUMsR0FBQSxFQUFBMmEsRUFBQTNhLEdBQUEsSUFBQWdiLEVBQUFoYixHQUFtQixPQUFBMmEsRUFBaVcsU0FBQW5aLEVBQUFtWixFQUFBSyxHQUFnQixPQUFBZixFQUFBdWpDLHFCQUFBN2lDLEVBQUFWLEVBQUE2akMsU0FBQSxJQUFBNTRCLFdBQUFsSyxLQUFBZ2pDLFVBQUEvakMsRUFBQTNZLFdBQUFxWixFQUFBclgsT0FBQTBYLEVBQUFMLEVBQUFzakMsV0FBQSxPQUFBampDLE1BQUFmLEVBQUFpa0MsV0FBQSxJQUFBdmpDLEVBQUF6WCxPQUFBaTdDLEdBQUF4akMsRUFBNEosU0FBQWxFLEVBQUFrRSxHQUFjLEdBQUFBLEdBQUFoTyxJQUFBLFVBQUF1SSxXQUFBLDBEQUFBdkksSUFBQXpLLFNBQUEsY0FBb0gsU0FBQXlZLEVBQStHLFNBQUFsWixFQUFBa1osRUFBQUssR0FBZ0IsaUJBQUFMLE1BQUEsR0FBQUEsR0FBNkIsSUFBQTVhLEVBQUE0YSxFQUFBclgsT0FBZSxPQUFBdkQsRUFBQSxTQUFrQixRQUFBQyxHQUFBLElBQWMsT0FBQWdiLEdBQVcscURBQUFqYixFQUF1RCw4QkFBQXErQyxFQUFBempDLEdBQUFyWCxPQUEwQyw2REFBQXZELEVBQStELGlCQUFBQSxJQUFBLEVBQXVCLG9CQUFBcytDLEVBQUExakMsR0FBQXJYLE9BQWdDLFdBQUF0RCxFQUFBLE9BQUFvK0MsRUFBQXpqQyxHQUFBclgsT0FBZ0MwWCxHQUFBLEdBQUFBLEdBQUFqSCxjQUFBL1QsR0FBQSxHQUFnZ0IsU0FBQXMrQyxFQUFBM2pDLEVBQUFLLEVBQUFqYixFQUFBQyxHQUFvQkQsRUFBQXcrQyxPQUFBeCtDLElBQUEsRUFBZSxJQUFBNE0sRUFBQWdPLEVBQUFyWCxPQUFBdkQsRUFBaUJDLEtBQUF1K0MsT0FBQXYrQyxJQUFBMk0sSUFBQTNNLEVBQUEyTSxHQUFBM00sRUFBQTJNLEVBQTZCLElBQUFzTixFQUFBZSxFQUFBMVgsT0FBZSxHQUFBMlcsRUFBQSxlQUFBaFksTUFBQSxzQkFBZ0RqQyxFQUFBaWEsRUFBQSxJQUFBamEsRUFBQWlhLEVBQUEsR0FBZSxRQUFBSyxFQUFBLEVBQVlBLEVBQUF0YSxFQUFJc2EsSUFBQSxDQUFLLElBQUF5aUMsRUFBQTltQyxTQUFBK0UsRUFBQTI0QixPQUFBLEVBQUFyNUIsRUFBQSxPQUFtQyxHQUFBNjlCLE1BQUE0RSxHQUFBLFVBQUE5NkMsTUFBQSxzQkFBa0QwWSxFQUFBNWEsRUFBQXVhLEdBQUF5aUMsRUFBUyxPQUFBemlDLEVBQVMsU0FBQWs5QixFQUFBNzhCLEVBQUFLLEVBQUFqYixFQUFBQyxHQUFvQixPQUFBdytDLEVBQUFKLEVBQUFwakMsRUFBQUwsRUFBQXJYLE9BQUF2RCxHQUFBNGEsRUFBQTVhLEVBQUFDLEdBQWdDLFNBQUF5K0MsRUFBQTlqQyxFQUFBSyxFQUFBamIsRUFBQUMsR0FBb0IsT0FBQXcrQyxFQUFrMEcsU0FBQTdqQyxHQUFjLFFBQUFLLEtBQUFqYixFQUFBLEVBQWlCQSxFQUFBNGEsRUFBQXJYLE9BQVd2RCxJQUFBaWIsRUFBQXBXLEtBQUEsSUFBQStWLEVBQUF1aUMsV0FBQW45QyxJQUFnQyxPQUFBaWIsRUFBNTRHMGpDLENBQUExakMsR0FBQUwsRUFBQTVhLEVBQUFDLEdBQXFCLFNBQUE0N0IsRUFBQWpoQixFQUFBSyxFQUFBamIsRUFBQUMsR0FBb0IsT0FBQXkrQyxFQUFBOWpDLEVBQUFLLEVBQUFqYixFQUFBQyxHQUFrQixTQUFBaWdDLEVBQUF0bEIsRUFBQUssRUFBQWpiLEVBQUFDLEdBQW9CLE9BQUF3K0MsRUFBQUgsRUFBQXJqQyxHQUFBTCxFQUFBNWEsRUFBQUMsR0FBcUIsU0FBQWtnQyxFQUFBdmxCLEVBQUFLLEVBQUFqYixFQUFBQyxHQUFvQixPQUFBdytDLEVBQTZ4RyxTQUFBN2pDLEVBQUFLLEdBQWdCLFFBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLEtBQUFLLEVBQUEsRUFBdUJBLEVBQUFLLEVBQUFyWCxXQUFBMFgsR0FBQSxNQUF3QlYsSUFBQXZhLEVBQUE0YSxFQUFBdWlDLFdBQUE1aUMsR0FBQXRhLEVBQUFELEdBQUEsRUFBQTRNLEVBQUE1TSxFQUFBLElBQUFrYSxFQUFBclYsS0FBQStILEdBQUFzTixFQUFBclYsS0FBQTVFLEdBQXlELE9BQUFpYSxFQUFyNUcwa0MsQ0FBQTNqQyxFQUFBTCxFQUFBclgsT0FBQXZELEdBQUE0YSxFQUFBNWEsRUFBQUMsR0FBZ0MsU0FBQTQrQyxFQUFBamtDLEVBQUFLLEVBQUFqYixHQUFrQixXQUFBaWIsR0FBQWpiLElBQUE0YSxFQUFBclgsT0FBQXU3QyxFQUFBekIsY0FBQXppQyxHQUFBa2tDLEVBQUF6QixjQUFBemlDLEVBQUFqUixNQUFBc1IsRUFBQWpiLElBQTRFLFNBQUFtUyxFQUFBeUksRUFBQUssRUFBQWpiLEdBQWtCQSxFQUFBNkcsS0FBQXNYLElBQUF2RCxFQUFBclgsT0FBQXZELEdBQXVCLFFBQUFDLEtBQUEyTSxFQUFBcU8sRUFBaUJyTyxFQUFBNU0sR0FBSSxDQUFFLElBQXlETCxFQUFBMEUsRUFBQXFmLEVBQUE5akIsRUFBekRzYSxFQUFBVSxFQUFBaE8sR0FBQTJOLEVBQUEsS0FBQXlpQyxFQUFBOWlDLEVBQUEsTUFBQUEsRUFBQSxNQUFBQSxFQUFBLFFBQThDLEdBQUF0TixFQUFBb3dDLEdBQUFoOUMsRUFBdUIsT0FBQWc5QyxHQUFVLE9BQUE5aUMsRUFBQSxNQUFBSyxFQUFBTCxHQUFvQixNQUFNLGtCQUFBdmEsRUFBQWliLEVBQUFoTyxFQUFBLE9BQUFoTixHQUFBLEdBQUFzYSxJQUFBLEtBQUF2YSxHQUFBLE1BQUE0YSxFQUFBM2EsR0FBNEQsTUFBTSxPQUFBRCxFQUFBaWIsRUFBQWhPLEVBQUEsR0FBQXZJLEVBQUF1VyxFQUFBaE8sRUFBQSxhQUFBak4sSUFBQSxVQUFBMEUsS0FBQXpFLEdBQUEsR0FBQXNhLElBQUEsT0FBQXZhLElBQUEsS0FBQTBFLEdBQUEsT0FBQXpFLEVBQUEsT0FBQUEsRUFBQSxTQUFBMmEsRUFBQTNhLEdBQW1ILE1BQU0sT0FBQUQsRUFBQWliLEVBQUFoTyxFQUFBLEdBQUF2SSxFQUFBdVcsRUFBQWhPLEVBQUEsR0FBQThXLEVBQUE5SSxFQUFBaE8sRUFBQSxhQUFBak4sSUFBQSxVQUFBMEUsSUFBQSxVQUFBcWYsS0FBQTlqQixHQUFBLEdBQUFzYSxJQUFBLE9BQUF2YSxJQUFBLE9BQUEwRSxJQUFBLEtBQUFxZixHQUFBLE9BQUE5akIsRUFBQSxVQUFBMmEsRUFBQTNhLEdBQThJLE9BQUEyYSxLQUFBLE1BQUF5aUMsRUFBQSxHQUFBemlDLEVBQUEsUUFBQUEsR0FBQSxNQUFBdGEsRUFBQTRFLEtBQUEwVixJQUFBLGVBQUFBLEVBQUEsV0FBQUEsR0FBQXRhLEVBQUE0RSxLQUFBMFYsR0FBQTNOLEdBQUFvd0MsRUFBbUcsT0FBWSxTQUFBcGlDLEdBQWMsSUFBQUssRUFBQUwsRUFBQXJYLE9BQWUsR0FBQTBYLEdBQUE4akMsRUFBQSxPQUFBQyxPQUFBQyxhQUFBMTFDLE1BQUF5MUMsT0FBQXBrQyxHQUFtRCxRQUFBNWEsRUFBQSxHQUFBQyxFQUFBLEVBQWlCQSxFQUFBZ2IsR0FBSWpiLEdBQUFnL0MsT0FBQUMsYUFBQTExQyxNQUFBeTFDLE9BQUFwa0MsRUFBQWpSLE1BQUExSixLQUFBOCtDLElBQXNELE9BQUEvK0MsRUFBdktrL0MsQ0FBQWovQyxHQUFnTCxTQUFBay9DLEVBQUF2a0MsRUFBQUssRUFBQWpiLEdBQWtCLElBQUFDLEVBQUEsR0FBU0QsRUFBQTZHLEtBQUFzWCxJQUFBdkQsRUFBQXJYLE9BQUF2RCxHQUF1QixRQUFBNE0sRUFBQXFPLEVBQVlyTyxFQUFBNU0sRUFBSTRNLElBQUEzTSxHQUFBKytDLE9BQUFDLGFBQUEsSUFBQXJrQyxFQUFBaE8sSUFBcUMsT0FBQTNNLEVBQVMsU0FBQW0vQyxFQUFBeGtDLEVBQUFLLEVBQUFqYixHQUFrQixJQUFBQyxFQUFBLEdBQVNELEVBQUE2RyxLQUFBc1gsSUFBQXZELEVBQUFyWCxPQUFBdkQsR0FBdUIsUUFBQTRNLEVBQUFxTyxFQUFZck8sRUFBQTVNLEVBQUk0TSxJQUFBM00sR0FBQSsrQyxPQUFBQyxhQUFBcmtDLEVBQUFoTyxJQUFpQyxPQUFBM00sRUFBUyxTQUFBby9DLEVBQUF6a0MsRUFBQUssRUFBQWpiLEdBQWtCLElBQUFDLEVBQUEyYSxFQUFBclgsU0FBZTBYLEtBQUEsS0FBQUEsRUFBQSxLQUFBamIsS0FBQSxHQUFBQSxFQUFBQyxLQUFBRCxFQUFBQyxHQUF1QyxRQUFBMk0sRUFBQSxHQUFBc04sRUFBQWUsRUFBaUJmLEVBQUFsYSxFQUFJa2EsSUFBQXROLEdBQUFpYixFQUFBak4sRUFBQVYsSUFBZSxPQUFBdE4sRUFBUyxTQUFBMHlDLEVBQUExa0MsRUFBQUssRUFBQWpiLEdBQWtCLFFBQUFDLEVBQUEyYSxFQUFBalIsTUFBQXNSLEVBQUFqYixHQUFBNE0sRUFBQSxHQUFBc04sRUFBQSxFQUFnQ0EsRUFBQWphLEVBQUFzRCxPQUFXMlcsR0FBQSxFQUFBdE4sR0FBQW95QyxPQUFBQyxhQUFBaC9DLEVBQUFpYSxHQUFBLElBQUFqYSxFQUFBaWEsRUFBQSxJQUE2QyxPQUFBdE4sRUFBUyxTQUFBMnlDLEVBQUEza0MsRUFBQUssRUFBQWpiLEdBQWtCLEdBQUE0YSxFQUFBLE1BQUFBLEVBQUEsWUFBQXpGLFdBQUEsc0JBQTBELEdBQUF5RixFQUFBSyxFQUFBamIsRUFBQSxVQUFBbVYsV0FBQSx5Q0FBdUUsU0FBQXFxQyxFQUFBNWtDLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQTJOLEdBQXdCLElBQUFMLEVBQUF5akMsU0FBQS9pQyxHQUFBLFVBQUFxTCxVQUFBLG9DQUEwRSxHQUFBaEwsRUFBQXJPLEdBQUFxTyxFQUFBVixFQUFBLFVBQUFwRixXQUFBLDBCQUEyRCxHQUFBblYsRUFBQUMsRUFBQTJhLEVBQUFyWCxPQUFBLFVBQUE0UixXQUFBLHNCQUEyRCxTQUFBc3FDLEVBQUE3a0MsRUFBQUssRUFBQWpiLEVBQUFDLEdBQW9CZ2IsRUFBQSxJQUFBQSxFQUFBLE1BQUFBLEVBQUEsR0FBbUIsUUFBQXJPLEVBQUEsRUFBQXNOLEVBQUFyVCxLQUFBc1gsSUFBQXZELEVBQUFyWCxPQUFBdkQsRUFBQSxHQUFxQzRNLEVBQUFzTixFQUFJdE4sSUFBQWdPLEVBQUE1YSxFQUFBNE0sSUFBQXFPLEVBQUEsUUFBQWhiLEVBQUEyTSxFQUFBLEVBQUFBLE1BQUEsR0FBQTNNLEVBQUEyTSxFQUFBLEVBQUFBLEdBQThDLFNBQUE4eUMsRUFBQTlrQyxFQUFBSyxFQUFBamIsRUFBQUMsR0FBb0JnYixFQUFBLElBQUFBLEVBQUEsV0FBQUEsRUFBQSxHQUF3QixRQUFBck8sRUFBQSxFQUFBc04sRUFBQXJULEtBQUFzWCxJQUFBdkQsRUFBQXJYLE9BQUF2RCxFQUFBLEdBQXFDNE0sRUFBQXNOLEVBQUl0TixJQUFBZ08sRUFBQTVhLEVBQUE0TSxHQUFBcU8sSUFBQSxHQUFBaGIsRUFBQTJNLEVBQUEsRUFBQUEsR0FBQSxJQUErQixTQUFBK3lDLEVBQUEva0MsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBc04sR0FBd0IsR0FBQWUsRUFBQXJPLEdBQUFxTyxFQUFBZixFQUFBLFVBQUEvRSxXQUFBLDBCQUEyRCxHQUFBblYsRUFBQUMsRUFBQTJhLEVBQUFyWCxPQUFBLFVBQUE0UixXQUFBLHNCQUEyRCxHQUFBblYsRUFBQSxZQUFBbVYsV0FBQSxzQkFBa0QsU0FBQXlxQyxFQUFBaGxDLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBc0IsT0FBQUEsR0FBQSt5QyxFQUFBL2tDLEVBQUFLLEVBQUFqYixFQUFBLGdEQUFBNi9DLEVBQUFuQyxNQUFBOWlDLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBLE1BQUFELEVBQUEsRUFBNEYsU0FBQTgvQyxFQUFBbGxDLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBc0IsT0FBQUEsR0FBQSt5QyxFQUFBL2tDLEVBQUFLLEVBQUFqYixFQUFBLGtEQUFBNi9DLEVBQUFuQyxNQUFBOWlDLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBLE1BQUFELEVBQUEsRUFBNlAsU0FBQTZuQixFQUFBak4sR0FBYyxPQUFBQSxFQUFBLE9BQUFBLEVBQUF6WSxTQUFBLElBQUF5WSxFQUFBelksU0FBQSxJQUE4QyxTQUFBazhDLEVBQUF6akMsRUFBQUssR0FBZ0JBLEtBQUEsSUFBUyxRQUFBamIsRUFBQUMsRUFBQTJhLEVBQUFyWCxPQUFBcUosRUFBQSxLQUFBc04sS0FBQUssRUFBQSxFQUFxQ0EsRUFBQXRhLEVBQUlzYSxJQUFBLENBQUssSUFBQXZhLEVBQUE0YSxFQUFBdWlDLFdBQUE1aUMsSUFBQSxPQUFBdmEsRUFBQSxPQUF1QyxJQUFBNE0sRUFBQSxDQUFPLEdBQUE1TSxFQUFBLFFBQVlpYixHQUFBLE9BQUFmLEVBQUFyVixLQUFBLGFBQStCLFNBQVMsR0FBQTBWLEVBQUEsSUFBQXRhLEVBQUEsRUFBWWdiLEdBQUEsT0FBQWYsRUFBQXJWLEtBQUEsYUFBK0IsU0FBUytILEVBQUE1TSxFQUFJLFNBQVMsR0FBQUEsRUFBQSxRQUFZaWIsR0FBQSxPQUFBZixFQUFBclYsS0FBQSxhQUFBK0gsRUFBQTVNLEVBQW1DLFNBQVNBLEVBQUEsT0FBQTRNLEVBQUEsVUFBQTVNLEVBQUEsWUFBOEI0TSxJQUFBcU8sR0FBQSxPQUFBZixFQUFBclYsS0FBQSxhQUF1QyxHQUFBK0gsRUFBQSxLQUFBNU0sRUFBQSxLQUFpQixJQUFBaWIsR0FBQSxXQUFrQmYsRUFBQXJWLEtBQUE3RSxRQUFVLEdBQUFBLEVBQUEsTUFBZ0IsSUFBQWliLEdBQUEsV0FBa0JmLEVBQUFyVixLQUFBN0UsR0FBQSxTQUFBQSxFQUFBLFVBQTBCLEdBQUFBLEVBQUEsT0FBaUIsSUFBQWliLEdBQUEsV0FBa0JmLEVBQUFyVixLQUFBN0UsR0FBQSxPQUFBQSxHQUFBLFlBQUFBLEVBQUEsU0FBdUMsQ0FBSyxLQUFBQSxFQUFBLG1CQUFBa0MsTUFBQSxzQkFBc0QsSUFBQStZLEdBQUEsV0FBa0JmLEVBQUFyVixLQUFBN0UsR0FBQSxPQUFBQSxHQUFBLFVBQUFBLEdBQUEsWUFBQUEsRUFBQSxNQUFxRCxPQUFBa2EsRUFBNk4sU0FBQW9rQyxFQUFBMWpDLEdBQWMsT0FBQWtrQyxFQUFBMUIsWUFBbG1DLFNBQUF4aUMsR0FBYyxJQUFBQSxFQUFpRixTQUFBQSxHQUFjLE9BQUFBLEVBQUFqRCxLQUFBaUQsRUFBQWpELE9BQUFpRCxFQUFBd2QsUUFBQSxpQkFBL0YybkIsQ0FBQW5sQyxHQUFBd2QsUUFBQTRuQixFQUFBLEtBQUF6OEMsT0FBQSxXQUE2QyxLQUFLcVgsRUFBQXJYLE9BQUEsTUFBY3FYLEdBQUEsSUFBUSxPQUFBQSxFQUE0Z0NxbEMsQ0FBQXJsQyxJQUEyQixTQUFBNmpDLEVBQUE3akMsRUFBQUssRUFBQWpiLEVBQUFDLEdBQW9CLFFBQUEyTSxFQUFBLEVBQVlBLEVBQUEzTSxLQUFBMk0sRUFBQTVNLEdBQUFpYixFQUFBMVgsUUFBQXFKLEdBQUFnTyxFQUFBclgsUUFBbUNxSixJQUFBcU8sRUFBQXJPLEVBQUE1TSxHQUFBNGEsRUFBQWhPLEdBQWdCLE9BQUFBLEVBQVMsSUFBQWt5QyxFQUFBbGtDLEVBQUEsYUFBQWlsQyxFQUFBamxDLEVBQUEsV0FBQWdqQyxFQUFBaGpDLEVBQUEsV0FBbUQ1YSxFQUFBaTJCLE9BQUEvYixFQUFBbGEsRUFBQWtnRCxXQUFuL0osU0FBQXovQyxFQUFBbWEsRUFBQUssR0FBZ0IsS0FBQWhaLGdCQUFBeEIsR0FBQSxXQUFBQSxFQUFBbWEsRUFBQUssR0FBMEMsSUFBQWpiLEVBQUEsSUFBQWthLEVBQUFVLEVBQUFLLEdBQWlCLGNBQUFqYixFQUFBbUQsT0FBQW5ELEdBQXc2SkEsRUFBQW1nRCxrQkFBQSxHQUFBam1DLEVBQUFpa0MsU0FBQSxLQUFpRSxJQUFBQyxLQUFTbGtDLEVBQUF1akMseUJBQUEsSUFBQXhpQyxFQUFBd2lDLG9CQUFBeGlDLEVBQUF3aUMsb0JBQXQ5TixXQUFhLFNBQUE3aUMsS0FBYyxJQUFJLElBQUFLLEVBQUEsSUFBQWtLLFdBQUEsR0FBd0IsT0FBQWxLLEVBQUFtbEMsSUFBQSxXQUF3QixXQUFVbmxDLEVBQUF6WSxZQUFBb1ksRUFBQSxLQUFBSyxFQUFBbWxDLE9BQUFubEMsRUFBQXpZLGNBQUFvWSxHQUFBLG1CQUFBSyxFQUFBb2xDLFVBQUEsSUFBQXBsQyxFQUFBb2xDLFNBQUEsS0FBQXZDLFdBQWdILE1BQUFsakMsR0FBUyxVQUFvd04zYSxHQUFBaWEsRUFBQXVqQyxxQkFBQXZqQyxFQUFBM1ksVUFBQTA4QyxVQUFBOTRCLFdBQUE1akIsVUFBQTJZLEVBQUErakMsVUFBQTk0QixhQUFBakwsRUFBQTNZLFVBQUFnQyxZQUFBLEVBQUEyVyxFQUFBM1ksVUFBQTRCLFlBQUEsR0FBQStXLEVBQUF5akMsU0FBQSxTQUFBL2lDLEdBQXNQLGNBQUFBLE1BQUFzakMsWUFBK0Joa0MsRUFBQW9tQyxRQUFBLFNBQUExbEMsRUFBQUssR0FBeUIsSUFBQWYsRUFBQXlqQyxTQUFBL2lDLEtBQUFWLEVBQUF5akMsU0FBQTFpQyxHQUFBLFVBQUFnTCxVQUFBLDZCQUFtRixHQUFBckwsSUFBQUssRUFBQSxTQUFrQixRQUFBamIsRUFBQTRhLEVBQUFyWCxPQUFBdEQsRUFBQWdiLEVBQUExWCxPQUFBcUosRUFBQSxFQUFBMk4sRUFBQTFULEtBQUFzWCxJQUFBbmUsRUFBQUMsR0FBa0QyTSxFQUFBMk4sR0FBQUssRUFBQWhPLEtBQUFxTyxFQUFBck8sTUFBaUJBLEVBQUssT0FBQUEsSUFBQTJOLElBQUF2YSxFQUFBNGEsRUFBQWhPLEdBQUEzTSxFQUFBZ2IsRUFBQXJPLElBQUE1TSxFQUFBQyxHQUFBLEVBQUFBLEVBQUFELEVBQUEsS0FBNkNrYSxFQUFBcW1DLFdBQUEsU0FBQTNsQyxHQUEwQixPQUFBb2tDLE9BQUFwa0MsR0FBQTVHLGVBQWdDLDhJQUE4SSxtQkFBa0JrRyxFQUFBbU8sT0FBQSxTQUFBek4sRUFBQUssR0FBd0IsSUFBQTJpQyxFQUFBaGpDLEdBQUEsVUFBQXFMLFVBQUEsOENBQTJFLE9BQUFyTCxFQUFBclgsT0FBQSxXQUFBMlcsRUFBQSxHQUFnQyxJQUFBbGEsRUFBTSxZQUFBaWIsRUFBQSxJQUFBQSxFQUFBLEVBQUFqYixFQUFBLEVBQTBCQSxFQUFBNGEsRUFBQXJYLE9BQVd2RCxJQUFBaWIsR0FBQUwsRUFBQTVhLEdBQUF1RCxPQUFtQixJQUFBdEQsRUFBQSxJQUFBaWEsRUFBQWUsR0FBQXJPLEVBQUEsRUFBbUIsSUFBQTVNLEVBQUEsRUFBUUEsRUFBQTRhLEVBQUFyWCxPQUFXdkQsSUFBQSxDQUFLLElBQUF1YSxFQUFBSyxFQUFBNWEsR0FBV3VhLEVBQUEwb0IsS0FBQWhqQyxFQUFBMk0sTUFBQTJOLEVBQUFoWCxPQUF3QixPQUFBdEQsR0FBU2lhLEVBQUE0akMsV0FBQXA4QyxFQUFBd1ksRUFBQTNZLFVBQUFZLFNBQUEsV0FBZ0QsSUFBQXlZLEVBQUEsRUFBQTNZLEtBQUFzQixPQUFvQixXQUFBcVgsRUFBQSxPQUFBclYsVUFBQWhDLE9BQUE0TyxFQUFBbFEsS0FBQSxFQUFBMlksR0FBNXBMLFNBQUFBLEVBQUFLLEVBQUFqYixHQUFrQixJQUFBQyxHQUFBLEVBQVMsR0FBQWdiLEdBQUEsRUFBQWpiLE9BQUEsSUFBQUEsT0FBQSxJQUFBaUMsS0FBQXNCLE9BQUEsRUFBQXZELEVBQUE0YSxNQUFBLFFBQUFLLEVBQUEsSUFBQUEsRUFBQSxHQUFBamIsRUFBQWlDLEtBQUFzQixTQUFBdkQsRUFBQWlDLEtBQUFzQixRQUFBdkQsR0FBQWliLEVBQUEsU0FBb0gsT0FBTSxPQUFBTCxHQUFXLGlCQUFBeWtDLEVBQUFwOUMsS0FBQWdaLEVBQUFqYixHQUE2Qiw4QkFBQW1TLEVBQUFsUSxLQUFBZ1osRUFBQWpiLEdBQTBDLG1CQUFBbS9DLEVBQUFsOUMsS0FBQWdaLEVBQUFqYixHQUErQixvQkFBQW8vQyxFQUFBbjlDLEtBQUFnWixFQUFBamIsR0FBZ0Msb0JBQUE2K0MsRUFBQTU4QyxLQUFBZ1osRUFBQWpiLEdBQWdDLDJEQUFBcy9DLEVBQUFyOUMsS0FBQWdaLEVBQUFqYixHQUF1RSxXQUFBQyxFQUFBLFVBQUFnbUIsVUFBQSxxQkFBQXJMLEdBQXlEQSxLQUFBLElBQUE1RyxjQUFBL1QsR0FBQSxJQUFzdEtzSixNQUFBdEgsS0FBQXNELFlBQXlFMlUsRUFBQTNZLFVBQUFpL0MsT0FBQSxTQUFBNWxDLEdBQWdDLElBQUFWLEVBQUF5akMsU0FBQS9pQyxHQUFBLFVBQUFxTCxVQUFBLDZCQUFtRSxPQUFBaGtCLE9BQUEyWSxHQUFBLElBQUFWLEVBQUFvbUMsUUFBQXIrQyxLQUFBMlksSUFBdUNWLEVBQUEzWSxVQUFBay9DLFFBQUEsV0FBZ0MsSUFBQTdsQyxFQUFBLEdBQUFLLEVBQUFqYixFQUFBbWdELGtCQUErQixPQUFBbCtDLEtBQUFzQixPQUFBLElBQUFxWCxFQUFBM1ksS0FBQUUsU0FBQSxRQUFBOFksR0FBQTNZLE1BQUEsU0FBNkRvQixLQUFBLEtBQUF6QixLQUFBc0IsT0FBQTBYLElBQUFMLEdBQUEscUJBQUFBLEVBQUEsS0FBNERWLEVBQUEzWSxVQUFBKytDLFFBQUEsU0FBQTFsQyxHQUFpQyxJQUFBVixFQUFBeWpDLFNBQUEvaUMsR0FBQSxVQUFBcUwsVUFBQSw2QkFBbUUsT0FBQWhrQixPQUFBMlksRUFBQSxFQUFBVixFQUFBb21DLFFBQUFyK0MsS0FBQTJZLElBQW9DVixFQUFBM1ksVUFBQTZCLFFBQUEsU0FBQXdYLEVBQUFLLEdBQW1DLFNBQUFqYixFQUFBNGEsRUFBQUssRUFBQWpiLEdBQWtCLFFBQUFDLEdBQUEsRUFBQTJNLEVBQUEsRUFBaUI1TSxFQUFBNE0sRUFBQWdPLEVBQUFyWCxPQUFhcUosSUFBQSxHQUFBZ08sRUFBQTVhLEVBQUE0TSxLQUFBcU8sR0FBQSxJQUFBaGIsRUFBQSxFQUFBMk0sRUFBQTNNLElBQWlDLFFBQUFBLE1BQUEyTSxLQUFBM00sRUFBQSxJQUFBZ2IsRUFBQTFYLE9BQUEsT0FBQXZELEVBQUFDLE9BQTZDQSxHQUFBLEVBQVUsU0FBUyxHQUFBZ2IsRUFBQSxXQUFBQSxFQUFBLFdBQUFBLEdBQUEsYUFBQUEsR0FBQSxZQUFBQSxJQUFBLE1BQUFoWixLQUFBc0IsT0FBQSxTQUEyRixHQUFBMFgsR0FBQWhaLEtBQUFzQixPQUFBLFNBQTJCLEdBQUEwWCxFQUFBLElBQUFBLEVBQUFwVSxLQUFBOEssSUFBQTFQLEtBQUFzQixPQUFBMFgsRUFBQSxxQkFBQUwsRUFBQSxXQUFBQSxFQUFBclgsUUFBQSxFQUFBeTdDLE9BQUF6OUMsVUFBQTZCLFFBQUF0RCxLQUFBbUMsS0FBQTJZLEVBQUFLLEdBQXdILEdBQUFmLEVBQUF5akMsU0FBQS9pQyxHQUFBLE9BQUE1YSxFQUFBaUMsS0FBQTJZLEVBQUFLLEdBQW9DLG9CQUFBTCxFQUFBLE9BQUFWLEVBQUF1akMscUJBQUEsYUFBQXQ0QixXQUFBNWpCLFVBQUE2QixRQUFBK2hCLFdBQUE1akIsVUFBQTZCLFFBQUF0RCxLQUFBbUMsS0FBQTJZLEVBQUFLLEdBQUFqYixFQUFBaUMsTUFBQTJZLEdBQUFLLEdBQXdKLFVBQUFnTCxVQUFBLHlDQUE0RC9MLEVBQUEzWSxVQUFBZixJQUFBLFNBQUFvYSxHQUE2QixPQUFBcEksUUFBQW5MLElBQUEsNkRBQUFwRixLQUFBeStDLFVBQUE5bEMsSUFBa0dWLEVBQUEzWSxVQUFBb0IsSUFBQSxTQUFBaVksRUFBQUssR0FBK0IsT0FBQXpJLFFBQUFuTCxJQUFBLDZEQUFBcEYsS0FBQTArQyxXQUFBL2xDLEVBQUFLLElBQXFHZixFQUFBM1ksVUFBQW04QyxNQUFBLFNBQUE5aUMsRUFBQUssRUFBQWpiLEVBQUFDLEdBQXFDLFlBQUFnYixFQUFBaGIsRUFBQSxPQUFBRCxFQUFBaUMsS0FBQXNCLE9BQUEwWCxFQUFBLE9BQXlDLFlBQUFqYixHQUFBLGlCQUFBaWIsRUFBQWhiLEVBQUFnYixFQUFBamIsRUFBQWlDLEtBQUFzQixPQUFBMFgsRUFBQSxPQUE2RCxHQUFBbkcsU0FBQW1HLE1BQUEsRUFBQW5HLFNBQUE5VSxPQUFBLFdBQUFDLE1BQUEsVUFBQUEsRUFBQUQsU0FBQSxPQUFrRixDQUFLLElBQUE0TSxFQUFBM00sRUFBUUEsRUFBQWdiLElBQUEsRUFBQWpiLElBQUE0TSxFQUFjLElBQUFzTixFQUFBalksS0FBQXNCLE9BQUEwWCxFQUFvQixhQUFBamIsS0FBQWthLEtBQUFsYSxFQUFBa2EsR0FBQVUsRUFBQXJYLE9BQUEsSUFBQXZELEVBQUEsR0FBQWliLEVBQUEsSUFBQUEsRUFBQWhaLEtBQUFzQixPQUFBLFVBQUE0UixXQUFBLDBDQUFpSWxWLE1BQUEsUUFBYyxRQUFBc2EsR0FBQSxJQUFjLE9BQUF0YSxHQUFXLGlCQUFBcytDLEVBQUF0OEMsS0FBQTJZLEVBQUFLLEVBQUFqYixHQUErQiw4QkFBQXkzQyxFQUFBeDFDLEtBQUEyWSxFQUFBSyxFQUFBamIsR0FBNEMsbUJBQUEwK0MsRUFBQXo4QyxLQUFBMlksRUFBQUssRUFBQWpiLEdBQWlDLG9CQUFBNjdCLEVBQUE1NUIsS0FBQTJZLEVBQUFLLEVBQUFqYixHQUFrQyxvQkFBQWtnQyxFQUFBaitCLEtBQUEyWSxFQUFBSyxFQUFBamIsR0FBa0MsMkRBQUFtZ0MsRUFBQWwrQixLQUFBMlksRUFBQUssRUFBQWpiLEdBQXlFLFdBQUF1YSxFQUFBLFVBQUEwTCxVQUFBLHFCQUFBaG1CLEdBQXlEQSxHQUFBLEdBQUFBLEdBQUErVCxjQUFBdUcsR0FBQSxJQUE2QkwsRUFBQTNZLFVBQUFxL0MsT0FBQSxXQUErQixPQUFPMXdDLEtBQUEsU0FBQTh0QyxLQUFBajRDLE1BQUF4RSxVQUFBb0ksTUFBQTdKLEtBQUFtQyxLQUFBNCtDLE1BQUE1K0MsS0FBQSxLQUFtRSxJQUFBODhDLEVBQUEsS0FBVzdrQyxFQUFBM1ksVUFBQW9JLE1BQUEsU0FBQWlSLEVBQUFLLEdBQWdDLElBQW9IaGIsRUFBcEhELEVBQUFpQyxLQUFBc0IsT0FBMEgsR0FBeEdxWCxNQUFBSyxPQUFBLElBQUFBLEVBQUFqYixJQUFBaWIsRUFBQUwsRUFBQSxHQUFBQSxHQUFBNWEsR0FBQSxJQUFBNGEsRUFBQSxHQUFBQSxFQUFBNWEsSUFBQTRhLEVBQUE1YSxHQUFBaWIsRUFBQSxHQUFBQSxHQUFBamIsR0FBQSxJQUFBaWIsRUFBQSxHQUFBQSxFQUFBamIsSUFBQWliLEVBQUFqYixHQUFBaWIsRUFBQUwsSUFBQUssRUFBQUwsR0FBd0dWLEVBQUF1akMsb0JBQUF4OUMsRUFBQWlhLEVBQUE2akMsU0FBQTk3QyxLQUFBbytDLFNBQUF6bEMsRUFBQUssUUFBMEQsQ0FBSyxJQUFBck8sRUFBQXFPLEVBQUFMLEVBQVUzYSxFQUFBLElBQUFpYSxFQUFBdE4sT0FBQSxHQUFrQixRQUFBMk4sRUFBQSxFQUFZQSxFQUFBM04sRUFBSTJOLElBQUF0YSxFQUFBc2EsR0FBQXRZLEtBQUFzWSxFQUFBSyxHQUFtQixPQUFBM2EsRUFBQXNELFNBQUF0RCxFQUFBa0QsT0FBQWxCLEtBQUFrQixRQUFBbEIsTUFBQWhDLEdBQWdEaWEsRUFBQTNZLFVBQUF1L0MsV0FBQSxTQUFBbG1DLEVBQUFLLEVBQUFqYixHQUF3QzRhLEdBQUEsRUFBQUssR0FBQSxFQUFBamIsR0FBQXUvQyxFQUFBM2tDLEVBQUFLLEVBQUFoWixLQUFBc0IsUUFBZ0MsUUFBQXRELEVBQUFnQyxLQUFBMlksR0FBQWhPLEVBQUEsRUFBQXNOLEVBQUEsSUFBMEJBLEVBQUFlLElBQUFyTyxHQUFBLE1BQWdCM00sR0FBQWdDLEtBQUEyWSxFQUFBVixHQUFBdE4sRUFBZ0IsT0FBQTNNLEdBQVNpYSxFQUFBM1ksVUFBQXcvQyxXQUFBLFNBQUFubUMsRUFBQUssRUFBQWpiLEdBQXdDNGEsR0FBQSxFQUFBSyxHQUFBLEVBQUFqYixHQUFBdS9DLEVBQUEza0MsRUFBQUssRUFBQWhaLEtBQUFzQixRQUFnQyxRQUFBdEQsRUFBQWdDLEtBQUEyWSxJQUFBSyxHQUFBck8sRUFBQSxFQUEwQnFPLEVBQUEsSUFBQXJPLEdBQUEsTUFBYzNNLEdBQUFnQyxLQUFBMlksSUFBQUssR0FBQXJPLEVBQWtCLE9BQUEzTSxHQUFTaWEsRUFBQTNZLFVBQUFtL0MsVUFBQSxTQUFBOWxDLEVBQUFLLEdBQXFDLE9BQUFBLEdBQUFza0MsRUFBQTNrQyxFQUFBLEVBQUEzWSxLQUFBc0IsUUFBQXRCLEtBQUEyWSxJQUFxQ1YsRUFBQTNZLFVBQUF5L0MsYUFBQSxTQUFBcG1DLEVBQUFLLEdBQXdDLE9BQUFBLEdBQUFza0MsRUFBQTNrQyxFQUFBLEVBQUEzWSxLQUFBc0IsUUFBQXRCLEtBQUEyWSxHQUFBM1ksS0FBQTJZLEVBQUEsT0FBa0RWLEVBQUEzWSxVQUFBMC9DLGFBQUEsU0FBQXJtQyxFQUFBSyxHQUF3QyxPQUFBQSxHQUFBc2tDLEVBQUEza0MsRUFBQSxFQUFBM1ksS0FBQXNCLFFBQUF0QixLQUFBMlksSUFBQSxFQUFBM1ksS0FBQTJZLEVBQUEsSUFBa0RWLEVBQUEzWSxVQUFBMi9DLGFBQUEsU0FBQXRtQyxFQUFBSyxHQUF3QyxPQUFBQSxHQUFBc2tDLEVBQUEza0MsRUFBQSxFQUFBM1ksS0FBQXNCLFNBQUF0QixLQUFBMlksR0FBQTNZLEtBQUEyWSxFQUFBLE1BQUEzWSxLQUFBMlksRUFBQSxpQkFBQTNZLEtBQUEyWSxFQUFBLElBQXFGVixFQUFBM1ksVUFBQTQvQyxhQUFBLFNBQUF2bUMsRUFBQUssR0FBd0MsT0FBQUEsR0FBQXNrQyxFQUFBM2tDLEVBQUEsRUFBQTNZLEtBQUFzQixRQUFBLFNBQUF0QixLQUFBMlksSUFBQTNZLEtBQUEyWSxFQUFBLE9BQUEzWSxLQUFBMlksRUFBQSxNQUFBM1ksS0FBQTJZLEVBQUEsS0FBcUZWLEVBQUEzWSxVQUFBNi9DLFVBQUEsU0FBQXhtQyxFQUFBSyxFQUFBamIsR0FBdUM0YSxHQUFBLEVBQUFLLEdBQUEsRUFBQWpiLEdBQUF1L0MsRUFBQTNrQyxFQUFBSyxFQUFBaFosS0FBQXNCLFFBQWdDLFFBQUF0RCxFQUFBZ0MsS0FBQTJZLEdBQUFoTyxFQUFBLEVBQUFzTixFQUFBLElBQTBCQSxFQUFBZSxJQUFBck8sR0FBQSxNQUFnQjNNLEdBQUFnQyxLQUFBMlksRUFBQVYsR0FBQXROLEVBQWdCLE9BQUEzTSxJQUFBMk0sR0FBQSxPQUFBM00sR0FBQTRHLEtBQUFLLElBQUEsSUFBQStULElBQUFoYixHQUEyQ2lhLEVBQUEzWSxVQUFBOC9DLFVBQUEsU0FBQXptQyxFQUFBSyxFQUFBamIsR0FBdUM0YSxHQUFBLEVBQUFLLEdBQUEsRUFBQWpiLEdBQUF1L0MsRUFBQTNrQyxFQUFBSyxFQUFBaFosS0FBQXNCLFFBQWdDLFFBQUF0RCxFQUFBZ2IsRUFBQXJPLEVBQUEsRUFBQXNOLEVBQUFqWSxLQUFBMlksSUFBQTNhLEdBQThCQSxFQUFBLElBQUEyTSxHQUFBLE1BQWNzTixHQUFBalksS0FBQTJZLElBQUEzYSxHQUFBMk0sRUFBa0IsT0FBQXNOLElBQUF0TixHQUFBLE9BQUFzTixHQUFBclQsS0FBQUssSUFBQSxJQUFBK1QsSUFBQWYsR0FBMkNBLEVBQUEzWSxVQUFBKy9DLFNBQUEsU0FBQTFtQyxFQUFBSyxHQUFvQyxPQUFBQSxHQUFBc2tDLEVBQUEza0MsRUFBQSxFQUFBM1ksS0FBQXNCLFFBQUEsSUFBQXRCLEtBQUEyWSxJQUFBLE9BQUEzWSxLQUFBMlksR0FBQSxHQUFBM1ksS0FBQTJZLElBQW9FVixFQUFBM1ksVUFBQWdnRCxZQUFBLFNBQUEzbUMsRUFBQUssR0FBdUNBLEdBQUFza0MsRUFBQTNrQyxFQUFBLEVBQUEzWSxLQUFBc0IsUUFBc0IsSUFBQXZELEVBQUFpQyxLQUFBMlksR0FBQTNZLEtBQUEyWSxFQUFBLE1BQTJCLGFBQUE1YSxFQUFBLFdBQUFBLEtBQThCa2EsRUFBQTNZLFVBQUFpZ0QsWUFBQSxTQUFBNW1DLEVBQUFLLEdBQXVDQSxHQUFBc2tDLEVBQUEza0MsRUFBQSxFQUFBM1ksS0FBQXNCLFFBQXNCLElBQUF2RCxFQUFBaUMsS0FBQTJZLEVBQUEsR0FBQTNZLEtBQUEyWSxJQUFBLEVBQTJCLGFBQUE1YSxFQUFBLFdBQUFBLEtBQThCa2EsRUFBQTNZLFVBQUFrZ0QsWUFBQSxTQUFBN21DLEVBQUFLLEdBQXVDLE9BQUFBLEdBQUFza0MsRUFBQTNrQyxFQUFBLEVBQUEzWSxLQUFBc0IsUUFBQXRCLEtBQUEyWSxHQUFBM1ksS0FBQTJZLEVBQUEsTUFBQTNZLEtBQUEyWSxFQUFBLE9BQUEzWSxLQUFBMlksRUFBQSxRQUE4RVYsRUFBQTNZLFVBQUFtZ0QsWUFBQSxTQUFBOW1DLEVBQUFLLEdBQXVDLE9BQUFBLEdBQUFza0MsRUFBQTNrQyxFQUFBLEVBQUEzWSxLQUFBc0IsUUFBQXRCLEtBQUEyWSxJQUFBLEdBQUEzWSxLQUFBMlksRUFBQSxPQUFBM1ksS0FBQTJZLEVBQUEsTUFBQTNZLEtBQUEyWSxFQUFBLElBQThFVixFQUFBM1ksVUFBQW9nRCxZQUFBLFNBQUEvbUMsRUFBQUssR0FBdUMsT0FBQUEsR0FBQXNrQyxFQUFBM2tDLEVBQUEsRUFBQTNZLEtBQUFzQixRQUFBczhDLEVBQUErQixLQUFBMy9DLEtBQUEyWSxHQUFBLFNBQW9EVixFQUFBM1ksVUFBQXNnRCxZQUFBLFNBQUFqbkMsRUFBQUssR0FBdUMsT0FBQUEsR0FBQXNrQyxFQUFBM2tDLEVBQUEsRUFBQTNZLEtBQUFzQixRQUFBczhDLEVBQUErQixLQUFBMy9DLEtBQUEyWSxHQUFBLFNBQW9EVixFQUFBM1ksVUFBQXVnRCxhQUFBLFNBQUFsbkMsRUFBQUssR0FBd0MsT0FBQUEsR0FBQXNrQyxFQUFBM2tDLEVBQUEsRUFBQTNZLEtBQUFzQixRQUFBczhDLEVBQUErQixLQUFBMy9DLEtBQUEyWSxHQUFBLFNBQW9EVixFQUFBM1ksVUFBQXdnRCxhQUFBLFNBQUFubkMsRUFBQUssR0FBd0MsT0FBQUEsR0FBQXNrQyxFQUFBM2tDLEVBQUEsRUFBQTNZLEtBQUFzQixRQUFBczhDLEVBQUErQixLQUFBMy9DLEtBQUEyWSxHQUFBLFNBQW9EVixFQUFBM1ksVUFBQXlnRCxZQUFBLFNBQUFwbkMsRUFBQUssRUFBQWpiLEVBQUFDLEdBQTJDMmEsS0FBQUssR0FBQSxFQUFBamIsR0FBQSxFQUFBQyxHQUFBdS9DLEVBQUF2OUMsS0FBQTJZLEVBQUFLLEVBQUFqYixFQUFBNkcsS0FBQUssSUFBQSxJQUFBbEgsR0FBQSxHQUFrRCxJQUFBNE0sRUFBQSxFQUFBc04sRUFBQSxFQUFZLElBQUFqWSxLQUFBZ1osR0FBQSxJQUFBTCxJQUFrQlYsRUFBQWxhLElBQUE0TSxHQUFBLE1BQWdCM0ssS0FBQWdaLEVBQUFmLEdBQUFVLEVBQUFoTyxFQUFBLElBQW1CLE9BQUFxTyxFQUFBamIsR0FBV2thLEVBQUEzWSxVQUFBMGdELFlBQUEsU0FBQXJuQyxFQUFBSyxFQUFBamIsRUFBQUMsR0FBMkMyYSxLQUFBSyxHQUFBLEVBQUFqYixHQUFBLEVBQUFDLEdBQUF1L0MsRUFBQXY5QyxLQUFBMlksRUFBQUssRUFBQWpiLEVBQUE2RyxLQUFBSyxJQUFBLElBQUFsSCxHQUFBLEdBQWtELElBQUE0TSxFQUFBNU0sRUFBQSxFQUFBa2EsRUFBQSxFQUFjLElBQUFqWSxLQUFBZ1osRUFBQXJPLEdBQUEsSUFBQWdPLElBQW9CaE8sR0FBQSxJQUFBc04sR0FBQSxNQUFpQmpZLEtBQUFnWixFQUFBck8sR0FBQWdPLEVBQUFWLEVBQUEsSUFBbUIsT0FBQWUsRUFBQWpiLEdBQVdrYSxFQUFBM1ksVUFBQW8vQyxXQUFBLFNBQUEvbEMsRUFBQUssRUFBQWpiLEdBQXdDLE9BQUE0YSxLQUFBSyxHQUFBLEVBQUFqYixHQUFBdy9DLEVBQUF2OUMsS0FBQTJZLEVBQUFLLEVBQUEsU0FBQWYsRUFBQXVqQyxzQkFBQTdpQyxFQUFBL1QsS0FBQTBFLE1BQUFxUCxJQUFBM1ksS0FBQWdaLEdBQUEsSUFBQUwsRUFBQUssRUFBQSxHQUFtR2YsRUFBQTNZLFVBQUEyZ0QsY0FBQSxTQUFBdG5DLEVBQUFLLEVBQUFqYixHQUEyQyxPQUFBNGEsS0FBQUssR0FBQSxFQUFBamIsR0FBQXcvQyxFQUFBdjlDLEtBQUEyWSxFQUFBSyxFQUFBLFdBQUFmLEVBQUF1akMscUJBQUF4N0MsS0FBQWdaLEdBQUEsSUFBQUwsRUFBQTNZLEtBQUFnWixFQUFBLEdBQUFMLElBQUEsR0FBQTZrQyxFQUFBeDlDLEtBQUEyWSxFQUFBSyxHQUFBLEdBQUFBLEVBQUEsR0FBbUhmLEVBQUEzWSxVQUFBNGdELGNBQUEsU0FBQXZuQyxFQUFBSyxFQUFBamIsR0FBMkMsT0FBQTRhLEtBQUFLLEdBQUEsRUFBQWpiLEdBQUF3L0MsRUFBQXY5QyxLQUFBMlksRUFBQUssRUFBQSxXQUFBZixFQUFBdWpDLHFCQUFBeDdDLEtBQUFnWixHQUFBTCxJQUFBLEVBQUEzWSxLQUFBZ1osRUFBQSxPQUFBTCxHQUFBNmtDLEVBQUF4OUMsS0FBQTJZLEVBQUFLLEdBQUEsR0FBQUEsRUFBQSxHQUFtSGYsRUFBQTNZLFVBQUE2Z0QsY0FBQSxTQUFBeG5DLEVBQUFLLEVBQUFqYixHQUEyQyxPQUFBNGEsS0FBQUssR0FBQSxFQUFBamIsR0FBQXcvQyxFQUFBdjlDLEtBQUEyWSxFQUFBSyxFQUFBLGdCQUFBZixFQUFBdWpDLHFCQUFBeDdDLEtBQUFnWixFQUFBLEdBQUFMLElBQUEsR0FBQTNZLEtBQUFnWixFQUFBLEdBQUFMLElBQUEsR0FBQTNZLEtBQUFnWixFQUFBLEdBQUFMLElBQUEsRUFBQTNZLEtBQUFnWixHQUFBLElBQUFMLEdBQUE4a0MsRUFBQXo5QyxLQUFBMlksRUFBQUssR0FBQSxHQUFBQSxFQUFBLEdBQTBKZixFQUFBM1ksVUFBQThnRCxjQUFBLFNBQUF6bkMsRUFBQUssRUFBQWpiLEdBQTJDLE9BQUE0YSxLQUFBSyxHQUFBLEVBQUFqYixHQUFBdy9DLEVBQUF2OUMsS0FBQTJZLEVBQUFLLEVBQUEsZ0JBQUFmLEVBQUF1akMscUJBQUF4N0MsS0FBQWdaLEdBQUFMLElBQUEsR0FBQTNZLEtBQUFnWixFQUFBLEdBQUFMLElBQUEsR0FBQTNZLEtBQUFnWixFQUFBLEdBQUFMLElBQUEsRUFBQTNZLEtBQUFnWixFQUFBLE9BQUFMLEdBQUE4a0MsRUFBQXo5QyxLQUFBMlksRUFBQUssR0FBQSxHQUFBQSxFQUFBLEdBQTBKZixFQUFBM1ksVUFBQStnRCxXQUFBLFNBQUExbkMsRUFBQUssRUFBQWpiLEVBQUFDLEdBQTBDLEdBQUEyYSxLQUFBSyxHQUFBLEdBQUFoYixFQUFBLENBQWlCLElBQUEyTSxFQUFBL0YsS0FBQUssSUFBQSxJQUFBbEgsRUFBQSxHQUF3QncvQyxFQUFBdjlDLEtBQUEyWSxFQUFBSyxFQUFBamIsRUFBQTRNLEVBQUEsR0FBQUEsR0FBcUIsSUFBQXNOLEVBQUEsRUFBQUssRUFBQSxFQUFBeWlDLEVBQUFwaUMsRUFBQSxNQUFzQixJQUFBM1ksS0FBQWdaLEdBQUEsSUFBQUwsSUFBa0JWLEVBQUFsYSxJQUFBdWEsR0FBQSxNQUFnQnRZLEtBQUFnWixFQUFBZixJQUFBVSxFQUFBTCxHQUFBLEdBQUF5aUMsRUFBQSxJQUEwQixPQUFBL2hDLEVBQUFqYixHQUFXa2EsRUFBQTNZLFVBQUFnaEQsV0FBQSxTQUFBM25DLEVBQUFLLEVBQUFqYixFQUFBQyxHQUEwQyxHQUFBMmEsS0FBQUssR0FBQSxHQUFBaGIsRUFBQSxDQUFpQixJQUFBMk0sRUFBQS9GLEtBQUFLLElBQUEsSUFBQWxILEVBQUEsR0FBd0J3L0MsRUFBQXY5QyxLQUFBMlksRUFBQUssRUFBQWpiLEVBQUE0TSxFQUFBLEdBQUFBLEdBQXFCLElBQUFzTixFQUFBbGEsRUFBQSxFQUFBdWEsRUFBQSxFQUFBeWlDLEVBQUFwaUMsRUFBQSxNQUF3QixJQUFBM1ksS0FBQWdaLEVBQUFmLEdBQUEsSUFBQVUsSUFBb0JWLEdBQUEsSUFBQUssR0FBQSxNQUFpQnRZLEtBQUFnWixFQUFBZixJQUFBVSxFQUFBTCxHQUFBLEdBQUF5aUMsRUFBQSxJQUEwQixPQUFBL2hDLEVBQUFqYixHQUFXa2EsRUFBQTNZLFVBQUFpaEQsVUFBQSxTQUFBNW5DLEVBQUFLLEVBQUFqYixHQUF1QyxPQUFBNGEsS0FBQUssR0FBQSxFQUFBamIsR0FBQXcvQyxFQUFBdjlDLEtBQUEyWSxFQUFBSyxFQUFBLFlBQUFmLEVBQUF1akMsc0JBQUE3aUMsRUFBQS9ULEtBQUEwRSxNQUFBcVAsTUFBQSxJQUFBQSxFQUFBLElBQUFBLEVBQUEsR0FBQTNZLEtBQUFnWixHQUFBLElBQUFMLEVBQUFLLEVBQUEsR0FBdUhmLEVBQUEzWSxVQUFBa2hELGFBQUEsU0FBQTduQyxFQUFBSyxFQUFBamIsR0FBMEMsT0FBQTRhLEtBQUFLLEdBQUEsRUFBQWpiLEdBQUF3L0MsRUFBQXY5QyxLQUFBMlksRUFBQUssRUFBQSxnQkFBQWYsRUFBQXVqQyxxQkFBQXg3QyxLQUFBZ1osR0FBQSxJQUFBTCxFQUFBM1ksS0FBQWdaLEVBQUEsR0FBQUwsSUFBQSxHQUFBNmtDLEVBQUF4OUMsS0FBQTJZLEVBQUFLLEdBQUEsR0FBQUEsRUFBQSxHQUF3SGYsRUFBQTNZLFVBQUFtaEQsYUFBQSxTQUFBOW5DLEVBQUFLLEVBQUFqYixHQUEwQyxPQUFBNGEsS0FBQUssR0FBQSxFQUFBamIsR0FBQXcvQyxFQUFBdjlDLEtBQUEyWSxFQUFBSyxFQUFBLGdCQUFBZixFQUFBdWpDLHFCQUFBeDdDLEtBQUFnWixHQUFBTCxJQUFBLEVBQUEzWSxLQUFBZ1osRUFBQSxPQUFBTCxHQUFBNmtDLEVBQUF4OUMsS0FBQTJZLEVBQUFLLEdBQUEsR0FBQUEsRUFBQSxHQUF3SGYsRUFBQTNZLFVBQUFvaEQsYUFBQSxTQUFBL25DLEVBQUFLLEVBQUFqYixHQUEwQyxPQUFBNGEsS0FBQUssR0FBQSxFQUFBamIsR0FBQXcvQyxFQUFBdjlDLEtBQUEyWSxFQUFBSyxFQUFBLDBCQUFBZixFQUFBdWpDLHFCQUFBeDdDLEtBQUFnWixHQUFBLElBQUFMLEVBQUEzWSxLQUFBZ1osRUFBQSxHQUFBTCxJQUFBLEVBQUEzWSxLQUFBZ1osRUFBQSxHQUFBTCxJQUFBLEdBQUEzWSxLQUFBZ1osRUFBQSxHQUFBTCxJQUFBLElBQUE4a0MsRUFBQXo5QyxLQUFBMlksRUFBQUssR0FBQSxHQUFBQSxFQUFBLEdBQW9LZixFQUFBM1ksVUFBQXFoRCxhQUFBLFNBQUFob0MsRUFBQUssRUFBQWpiLEdBQTBDLE9BQUE0YSxLQUFBSyxHQUFBLEVBQUFqYixHQUFBdy9DLEVBQUF2OUMsS0FBQTJZLEVBQUFLLEVBQUEsMEJBQUFMLEVBQUEsSUFBQUEsRUFBQSxXQUFBQSxFQUFBLEdBQUFWLEVBQUF1akMscUJBQUF4N0MsS0FBQWdaLEdBQUFMLElBQUEsR0FBQTNZLEtBQUFnWixFQUFBLEdBQUFMLElBQUEsR0FBQTNZLEtBQUFnWixFQUFBLEdBQUFMLElBQUEsRUFBQTNZLEtBQUFnWixFQUFBLE9BQUFMLEdBQUE4a0MsRUFBQXo5QyxLQUFBMlksRUFBQUssR0FBQSxHQUFBQSxFQUFBLEdBQTRMZixFQUFBM1ksVUFBQXNoRCxhQUFBLFNBQUFqb0MsRUFBQUssRUFBQWpiLEdBQTBDLE9BQUE0L0MsRUFBQTM5QyxLQUFBMlksRUFBQUssR0FBQSxFQUFBamIsSUFBd0JrYSxFQUFBM1ksVUFBQXVoRCxhQUFBLFNBQUFsb0MsRUFBQUssRUFBQWpiLEdBQTBDLE9BQUE0L0MsRUFBQTM5QyxLQUFBMlksRUFBQUssR0FBQSxFQUFBamIsSUFBd0JrYSxFQUFBM1ksVUFBQXdoRCxjQUFBLFNBQUFub0MsRUFBQUssRUFBQWpiLEdBQTJDLE9BQUE4L0MsRUFBQTc5QyxLQUFBMlksRUFBQUssR0FBQSxFQUFBamIsSUFBd0JrYSxFQUFBM1ksVUFBQXloRCxjQUFBLFNBQUFwb0MsRUFBQUssRUFBQWpiLEdBQTJDLE9BQUE4L0MsRUFBQTc5QyxLQUFBMlksRUFBQUssR0FBQSxFQUFBamIsSUFBd0JrYSxFQUFBM1ksVUFBQTBoQyxLQUFBLFNBQUFyb0IsRUFBQUssRUFBQWpiLEVBQUFDLEdBQW9DLEdBQUFELE1BQUEsR0FBQUMsR0FBQSxJQUFBQSxNQUFBZ0MsS0FBQXNCLFFBQUEwWCxHQUFBTCxFQUFBclgsU0FBQTBYLEVBQUFMLEVBQUFyWCxRQUFBMFgsTUFBQSxHQUFBaGIsRUFBQSxHQUFBQSxFQUFBRCxJQUFBQyxFQUFBRCxHQUFBQyxJQUFBRCxFQUFBLFNBQXdHLE9BQUE0YSxFQUFBclgsUUFBQSxJQUFBdEIsS0FBQXNCLE9BQUEsU0FBMEMsR0FBQTBYLEVBQUEsWUFBQTlGLFdBQUEsNkJBQXlELEdBQUFuVixFQUFBLEdBQUFBLEdBQUFpQyxLQUFBc0IsT0FBQSxVQUFBNFIsV0FBQSw2QkFBeUUsR0FBQWxWLEVBQUEsWUFBQWtWLFdBQUEsMkJBQXVEbFYsRUFBQWdDLEtBQUFzQixTQUFBdEQsRUFBQWdDLEtBQUFzQixRQUFBcVgsRUFBQXJYLE9BQUEwWCxFQUFBaGIsRUFBQUQsSUFBQUMsRUFBQTJhLEVBQUFyWCxPQUFBMFgsRUFBQWpiLEdBQWdFLElBQUE0TSxFQUFBMk4sRUFBQXRhLEVBQUFELEVBQVksR0FBQWlDLE9BQUEyWSxHQUFBNWEsRUFBQWliLEtBQUFoYixFQUFBLElBQUEyTSxFQUFBMk4sRUFBQSxFQUFnQzNOLEdBQUEsRUFBS0EsSUFBQWdPLEVBQUFoTyxFQUFBcU8sR0FBQWhaLEtBQUEySyxFQUFBNU0sUUFBcUIsR0FBQXVhLEVBQUEsTUFBQUwsRUFBQXVqQyxvQkFBQSxJQUFBN3dDLEVBQUEsRUFBOENBLEVBQUEyTixFQUFJM04sSUFBQWdPLEVBQUFoTyxFQUFBcU8sR0FBQWhaLEtBQUEySyxFQUFBNU0sUUFBcUI0YSxFQUFBcW9DLEtBQUFoaEQsS0FBQW8rQyxTQUFBcmdELElBQUF1YSxHQUFBVSxHQUFvQyxPQUFBVixHQUFTTCxFQUFBM1ksVUFBQTJoRCxLQUFBLFNBQUF0b0MsRUFBQUssRUFBQWpiLEdBQWtDLEdBQUE0YSxNQUFBLEdBQUFLLE1BQUEsR0FBQWpiLE1BQUFpQyxLQUFBc0IsUUFBQXZELEVBQUFpYixFQUFBLFVBQUE5RixXQUFBLGVBQWdGLEdBQUFuVixJQUFBaWIsR0FBQSxJQUFBaFosS0FBQXNCLE9BQUEsQ0FBMkIsR0FBQTBYLEVBQUEsR0FBQUEsR0FBQWhaLEtBQUFzQixPQUFBLFVBQUE0UixXQUFBLHVCQUFtRSxHQUFBblYsRUFBQSxHQUFBQSxFQUFBaUMsS0FBQXNCLE9BQUEsVUFBQTRSLFdBQUEscUJBQWdFLElBQUFsVixFQUFNLG9CQUFBMmEsRUFBQSxJQUFBM2EsRUFBQWdiLEVBQThCaGIsRUFBQUQsRUFBSUMsSUFBQWdDLEtBQUFoQyxHQUFBMmEsTUFBYyxDQUFLLElBQUFoTyxFQUFBeXhDLEVBQUF6akMsRUFBQXpZLFlBQUErWCxFQUFBdE4sRUFBQXJKLE9BQWlDLElBQUF0RCxFQUFBZ2IsRUFBUWhiLEVBQUFELEVBQUlDLElBQUFnQyxLQUFBaEMsR0FBQTJNLEVBQUEzTSxFQUFBaWEsR0FBbUIsT0FBQWpZLE9BQWFpWSxFQUFBM1ksVUFBQTRoRCxjQUFBLFdBQXNDLHVCQUFBaCtCLFdBQUEsQ0FBbUMsR0FBQWpMLEVBQUF1akMsb0JBQUEsV0FBQXZqQyxFQUFBalksTUFBQTBMLE9BQW1ELFFBQUFpTixFQUFBLElBQUF1SyxXQUFBbGpCLEtBQUFzQixRQUFBMFgsRUFBQSxFQUFBamIsRUFBQTRhLEVBQUFyWCxPQUFxRDBYLEVBQUFqYixFQUFJaWIsR0FBQSxFQUFBTCxFQUFBSyxHQUFBaFosS0FBQWdaLEdBQWtCLE9BQUFMLEVBQUFqTixPQUFnQixVQUFBc1ksVUFBQSx1REFBMkUsSUFBQW05QixFQUFBbHBDLEVBQUEzWSxVQUFrQjJZLEVBQUE2akMsU0FBQSxTQUFBbmpDLEdBQXVCLE9BQUFBLEVBQUFwWSxZQUFBMFgsRUFBQVUsRUFBQXNqQyxXQUFBLEVBQUF0akMsRUFBQXFvQyxLQUFBcm9DLEVBQUFqWSxJQUFBaVksRUFBQXBhLElBQUE0aUQsRUFBQTVpRCxJQUFBb2EsRUFBQWpZLElBQUF5Z0QsRUFBQXpnRCxJQUFBaVksRUFBQThpQyxNQUFBMEYsRUFBQTFGLE1BQUE5aUMsRUFBQXpZLFNBQUFpaEQsRUFBQWpoRCxTQUFBeVksRUFBQXlvQyxlQUFBRCxFQUFBamhELFNBQUF5WSxFQUFBZ21DLE9BQUF3QyxFQUFBeEMsT0FBQWhtQyxFQUFBNGxDLE9BQUE0QyxFQUFBNUMsT0FBQTVsQyxFQUFBMGxDLFFBQUE4QyxFQUFBOUMsUUFBQTFsQyxFQUFBeFgsUUFBQWdnRCxFQUFBaGdELFFBQUF3WCxFQUFBcW9CLEtBQUFtZ0IsRUFBQW5nQixLQUFBcm9CLEVBQUFqUixNQUFBeTVDLEVBQUF6NUMsTUFBQWlSLEVBQUFrbUMsV0FBQXNDLEVBQUF0QyxXQUFBbG1DLEVBQUFtbUMsV0FBQXFDLEVBQUFyQyxXQUFBbm1DLEVBQUE4bEMsVUFBQTBDLEVBQUExQyxVQUFBOWxDLEVBQUFvbUMsYUFBQW9DLEVBQUFwQyxhQUFBcG1DLEVBQUFxbUMsYUFBQW1DLEVBQUFuQyxhQUFBcm1DLEVBQUFzbUMsYUFBQWtDLEVBQUFsQyxhQUFBdG1DLEVBQUF1bUMsYUFBQWlDLEVBQUFqQyxhQUFBdm1DLEVBQUF3bUMsVUFBQWdDLEVBQUFoQyxVQUFBeG1DLEVBQUF5bUMsVUFBQStCLEVBQUEvQixVQUFBem1DLEVBQUEwbUMsU0FBQThCLEVBQUE5QixTQUFBMW1DLEVBQUEybUMsWUFBQTZCLEVBQUE3QixZQUFBM21DLEVBQUE0bUMsWUFBQTRCLEVBQUE1QixZQUFBNW1DLEVBQUE2bUMsWUFBQTJCLEVBQUEzQixZQUFBN21DLEVBQUE4bUMsWUFBQTBCLEVBQUExQixZQUFBOW1DLEVBQUErbUMsWUFBQXlCLEVBQUF6QixZQUFBL21DLEVBQUFpbkMsWUFBQXVCLEVBQUF2QixZQUFBam5DLEVBQUFrbkMsYUFBQXNCLEVBQUF0QixhQUFBbG5DLEVBQUFtbkMsYUFBQXFCLEVBQUFyQixhQUFBbm5DLEVBQUErbEMsV0FBQXlDLEVBQUF6QyxXQUFBL2xDLEVBQUFvbkMsWUFBQW9CLEVBQUFwQixZQUFBcG5DLEVBQUFxbkMsWUFBQW1CLEVBQUFuQixZQUFBcm5DLEVBQUFzbkMsY0FBQWtCLEVBQUFsQixjQUFBdG5DLEVBQUF1bkMsY0FBQWlCLEVBQUFqQixjQUFBdm5DLEVBQUF3bkMsY0FBQWdCLEVBQUFoQixjQUFBeG5DLEVBQUF5bkMsY0FBQWUsRUFBQWYsY0FBQXpuQyxFQUFBMG5DLFdBQUFjLEVBQUFkLFdBQUExbkMsRUFBQTJuQyxXQUFBYSxFQUFBYixXQUFBM25DLEVBQUE0bkMsVUFBQVksRUFBQVosVUFBQTVuQyxFQUFBNm5DLGFBQUFXLEVBQUFYLGFBQUE3bkMsRUFBQThuQyxhQUFBVSxFQUFBVixhQUFBOW5DLEVBQUErbkMsYUFBQVMsRUFBQVQsYUFBQS9uQyxFQUFBZ29DLGFBQUFRLEVBQUFSLGFBQUFob0MsRUFBQWlvQyxhQUFBTyxFQUFBUCxhQUFBam9DLEVBQUFrb0MsYUFBQU0sRUFBQU4sYUFBQWxvQyxFQUFBbW9DLGNBQUFLLEVBQUFMLGNBQUFub0MsRUFBQW9vQyxjQUFBSSxFQUFBSixjQUFBcG9DLEVBQUFzb0MsS0FBQUUsRUFBQUYsS0FBQXRvQyxFQUFBNmxDLFFBQUEyQyxFQUFBM0MsUUFBQTdsQyxFQUFBdW9DLGNBQUFDLEVBQUFELGNBQUF2b0MsR0FBNHpDLElBQUFvbEMsRUFBQSx1QkFBNEJsZ0QsS0FBQW1DLFVBQUEsSUFBQTY2QyxJQUFBLG9CQUFBd0csVUFBQSxvQkFBQWo3QyxvQkFBb0hrN0MsWUFBQSxFQUFBQyxRQUFBLEVBQUFDLFFBQUEsSUFBa0NDLEdBQUEsU0FBQXpvQyxFQUFBamIsRUFBQUMsSUFBcUIsU0FBQTJNLEVBQUFzTixJQUFlLFNBQUFlLEVBQUFyTyxHQUFlLGlCQUFBM00sUUFBQSxJQUFBRCxJQUFBUCxRQUFBbU4sSUFBQXFPLEVBQUEwb0MsV0FBQS8yQyxJQUFmLENBQThHM0ssS0FBQSxXQUFpQixhQUEwRixTQUFBakMsRUFBQTRhLEdBQWMseUJBQUFBLEVBQW1aLFNBQUFoYixJQUFhLElBQUFnYixFQUFBL0ssV0FBaUIsa0JBQWtCLE9BQUErSyxFQUFBN2EsRUFBQSxJQUFlLFNBQUFBLElBQWEsUUFBQTZhLEVBQUEsRUFBWUEsRUFBQTZqQyxFQUFJN2pDLEdBQUEsR0FBTSxFQUFBZ3BDLEVBQUFocEMsSUFBQWdwQyxFQUFBaHBDLEVBQUEsSUFBQWdwQyxFQUFBaHBDLFFBQUEsRUFBQWdwQyxFQUFBaHBDLEVBQUEsVUFBK0M2akMsRUFBQSxFQUF3RyxTQUFBcitDLEVBQUF3YSxFQUFBSyxHQUFnQixJQUFBamIsRUFBQXVGLFVBQUF0RixFQUFBZ0MsS0FBQTJLLEVBQUEsSUFBQTNLLEtBQUFPLFlBQUFrVSxRQUFpRCxJQUFBOUosRUFBQWkzQyxJQUFBcEUsRUFBQTd5QyxHQUFxQixJQUFBc04sRUFBQWphLEVBQUE0dEIsT0FBZSxPQUFBM1QsRUFBQSxXQUFvQixJQUFBVSxFQUFBNWEsRUFBQWthLEVBQUEsR0FBYTBqQyxFQUFBLFdBQWEsT0FBQTBCLEVBQUFwbEMsRUFBQXROLEVBQUFnTyxFQUFBM2EsRUFBQTZqRCxXQUE5QyxHQUEwRTVFLEVBQUFqL0MsRUFBQTJNLEVBQUFnTyxFQUFBSyxHQUFBck8sRUFBZ0IsU0FBQW5MLEVBQUFtWixHQUF5QixHQUFBQSxHQUFBLGlCQUFBQSxLQUFBcFksY0FBWFAsS0FBVyxPQUFBMlksRUFBcUQsSUFBQTVhLEVBQUEsSUFBaEVpQyxLQUFnRXlVLEdBQWUsT0FBQXdwQixFQUFBbGdDLEVBQUE0YSxHQUFBNWEsRUFBZ0IsU0FBQTBXLEtBQXNMLFNBQUE3VixFQUFBK1osR0FBYyxJQUFJLE9BQUFBLEVBQUExTCxLQUFjLE1BQUEwTCxHQUFTLE9BQUFtcEMsRUFBQWgyQyxNQUFBNk0sRUFBQW1wQyxHQUF5WixTQUFBbG9CLEVBQUFqaEIsRUFBQUssRUFBQWhiLEdBQWtCZ2IsRUFBQXpZLGNBQUFvWSxFQUFBcFksYUFBQXZDLElBQUFHLEdBQUE2YSxFQUFBelksWUFBQWlHLFVBQUFoSCxFQUE5SixTQUFBbVosRUFBQUssR0FBZ0JBLEVBQUE0UyxTQUFBbTJCLEVBQUFuRixFQUFBamtDLEVBQUFLLEVBQUE2b0MsU0FBQTdvQyxFQUFBNFMsU0FBQW8yQixFQUFBOXhDLEVBQUF5SSxFQUFBSyxFQUFBNm9DLFNBQUE1RSxFQUFBamtDLE9BQUEsV0FBQUEsR0FBaUYsT0FBQWlsQixFQUFBdGxCLEVBQUFLLElBQWMsU0FBQUEsR0FBYSxPQUFBOUksRUFBQXlJLEVBQUFLLEtBQWtDeWpDLENBQUE5akMsRUFBQUssR0FBQWhiLElBQUE4akQsR0FBQTV4QyxFQUFBeUksRUFBQW1wQyxFQUFBaDJDLE9BQUFnMkMsRUFBQWgyQyxNQUFBLGVBQUE5TixFQUFBNCtDLEVBQUFqa0MsRUFBQUssR0FBQWpiLEVBQUFDLEdBQTVWLFNBQUEyYSxFQUFBSyxFQUFBamIsR0FBa0I0OUMsRUFBQSxTQUFBaGpDLEdBQWMsSUFBQTNhLEdBQUEsRUFBQTJNLEVBQXpGLFNBQUFnTyxFQUFBSyxFQUFBamIsRUFBQUMsR0FBb0IsSUFBSTJhLEVBQUE5YSxLQUFBbWIsRUFBQWpiLEVBQUFDLEdBQWMsTUFBQTJhLEdBQVMsT0FBQUEsR0FBMEMyakMsQ0FBQXYrQyxFQUFBaWIsRUFBQSxTQUFBamIsR0FBNkJDLE9BQUEsRUFBQWdiLElBQUFqYixFQUFBa2dDLEVBQUF0bEIsRUFBQTVhLEdBQUE2K0MsRUFBQWprQyxFQUFBNWEsS0FBOEIsU0FBQWliLEdBQWFoYixPQUFBLEVBQUFrUyxFQUFBeUksRUFBQUssS0FBaUJMLEVBQUFzcEMsU0FBNENqa0QsR0FBQTJNLElBQUEzTSxHQUFBLEVBQUFrUyxFQUFBeUksRUFBQWhPLEtBQXFCZ08sR0FBa0s2OEIsQ0FBQTc4QixFQUFBSyxFQUFBaGIsR0FBQTQrQyxFQUFBamtDLEVBQUFLLEdBQW1KLFNBQUFpbEIsRUFBQWpsQixFQUFBamIsR0FBZ0JpYixJQUFBamIsRUFBQW1TLEVBQUE4SSxFQUFseEIsSUFBQWdMLFVBQUEsNkNBQTlpQyxTQUFBckwsR0FBYyxJQUFBSyxTQUFBTCxFQUFlLGNBQUFBLElBQUEsV0FBQUssR0FBQSxhQUFBQSxHQUFteURMLENBQUE1YSxHQUFBNjdCLEVBQUE1Z0IsRUFBQWpiLEVBQUFhLEVBQUFiLElBQUE2K0MsRUFBQTVqQyxFQUFBamIsR0FBdUMsU0FBQW1nQyxFQUFBdmxCLEdBQWNBLEVBQUF1cEMsVUFBQXZwQyxFQUFBdXBDLFNBQUF2cEMsRUFBQWtwQyxTQUFBM0UsRUFBQXZrQyxHQUF1QyxTQUFBaWtDLEVBQUFqa0MsRUFBQUssR0FBZ0JMLEVBQUFpVCxTQUFBdTJCLElBQUF4cEMsRUFBQWtwQyxRQUFBN29DLEVBQUFMLEVBQUFpVCxPQUFBbTJCLEVBQUEsSUFBQXBwQyxFQUFBeXBDLGFBQUE5Z0QsUUFBQXE2QyxFQUFBdUIsRUFBQXZrQyxJQUEyRSxTQUFBekksRUFBQXlJLEVBQUFLLEdBQWdCTCxFQUFBaVQsU0FBQXUyQixJQUFBeHBDLEVBQUFpVCxPQUFBbzJCLEVBQUFycEMsRUFBQWtwQyxRQUFBN29DLEVBQUEyaUMsRUFBQXpkLEVBQUF2bEIsSUFBZ0QsU0FBQXNrQyxFQUFBdGtDLEVBQUFLLEVBQUFqYixFQUFBQyxHQUFvQixJQUFBMk0sRUFBQWdPLEVBQUF5cEMsYUFBQW5xQyxFQUFBdE4sRUFBQXJKLE9BQWdDcVgsRUFBQXVwQyxTQUFBLEtBQUF2M0MsRUFBQXNOLEdBQUFlLEVBQUFyTyxFQUFBc04sRUFBQThwQyxHQUFBaGtELEVBQUE0TSxFQUFBc04sRUFBQStwQyxHQUFBaGtELEVBQUEsSUFBQWlhLEdBQUFVLEVBQUFpVCxRQUFBK3ZCLEVBQUF1QixFQUFBdmtDLEdBQW1FLFNBQUF1a0MsRUFBQXZrQyxHQUFjLElBQUFLLEVBQUFMLEVBQUF5cEMsYUFBQXJrRCxFQUFBNGEsRUFBQWlULE9BQWdDLE9BQUE1UyxFQUFBMVgsT0FBQSxDQUFpQixRQUFBdEQsT0FBQSxFQUFBMk0sT0FBQSxFQUFBc04sRUFBQVUsRUFBQWtwQyxRQUFBdnBDLEVBQUEsRUFBMENBLEVBQUFVLEVBQUExWCxPQUFXZ1gsR0FBQSxFQUFBdGEsRUFBQWdiLEVBQUFWLEdBQUEzTixFQUFBcU8sRUFBQVYsRUFBQXZhLEdBQUFDLEVBQUFxL0MsRUFBQXQvQyxFQUFBQyxFQUFBMk0sRUFBQXNOLEdBQUF0TixFQUFBc04sR0FBdUNVLEVBQUF5cEMsYUFBQTlnRCxPQUFBLEdBQXlCLFNBQUE2N0MsSUFBYW45QyxLQUFBOEwsTUFBQSxLQUErRSxTQUFBdXhDLEVBQUExa0MsRUFBQUssRUFBQWhiLEVBQUEyTSxHQUFvQixJQUFBc04sRUFBQWxhLEVBQUFDLEdBQUFzYSxPQUFBLEVBQUF5aUMsT0FBQSxFQUFBcjlDLE9BQUEsRUFBQTBFLE9BQUEsRUFBK0MsR0FBQTZWLEdBQU0sSUFBQUssRUFBeEksU0FBQUssRUFBQUssR0FBZ0IsSUFBSSxPQUFBTCxFQUFBSyxHQUFZLE1BQUFMLEdBQVMsT0FBQTBwQyxFQUFBdjJDLE1BQUE2TSxFQUFBMHBDLEdBQStGakYsQ0FBQXAvQyxFQUFBMk0sTUFBQTAzQyxHQUFBamdELEdBQUEsRUFBQTI0QyxFQUFBemlDLEVBQUF4TSxNQUFBd00sRUFBQXhNLE1BQUEsTUFBQXBPLEdBQUEsRUFBQXNiLElBQUFWLEVBQUEsWUFBQXBJLEVBQUE4SSxFQUEzNEMsSUFBQWdMLFVBQUEsOERBQTQ5QzFMLEVBQUEzTixFQUFBak4sR0FBQSxFQUFjc2IsRUFBQTRTLFNBQUF1MkIsSUFBQWxxQyxHQUFBdmEsRUFBQXVnQyxFQUFBamxCLEVBQUFWLEdBQUFsVyxFQUFBOE4sRUFBQThJLEVBQUEraEMsR0FBQXBpQyxJQUFBb3BDLEVBQUFuRixFQUFBNWpDLEVBQUFWLEdBQUFLLElBQUFxcEMsR0FBQTl4QyxFQUFBOEksRUFBQVYsSUFBNEssU0FBQWtsQyxFQUFBN2tDLEdBQWNBLEVBQUFpcEMsR0FBQVUsSUFBQTNwQyxFQUFBaVQsWUFBQSxFQUFBalQsRUFBQWtwQyxhQUFBLEVBQUFscEMsRUFBQXlwQyxnQkFBOEQsU0FBQTNFLEVBQUE5a0MsRUFBQUssR0FBZ0JoWixLQUFBdWlELHFCQUFBNXBDLEVBQUEzWSxLQUFBd2lELFFBQUEsSUFBQTdwQyxFQUFBbEUsR0FBQXpVLEtBQUF3aUQsUUFBQVosSUFBQXBFLEVBQUF4OUMsS0FBQXdpRCxTQUFBbkcsRUFBQXJqQyxJQUFBaFosS0FBQXNCLE9BQUEwWCxFQUFBMVgsT0FBQXRCLEtBQUF5aUQsV0FBQXpwQyxFQUFBMVgsT0FBQXRCLEtBQUE2aEQsUUFBQSxJQUFBLzlDLE1BQUE5RCxLQUFBc0IsUUFBQSxJQUFBdEIsS0FBQXNCLE9BQUFzN0MsRUFBQTU4QyxLQUFBd2lELFFBQUF4aUQsS0FBQTZoRCxVQUFBN2hELEtBQUFzQixPQUFBdEIsS0FBQXNCLFFBQUEsRUFBQXRCLEtBQUEwaUQsV0FBQTFwQyxHQUFBLElBQUFoWixLQUFBeWlELFlBQUE3RixFQUFBNThDLEtBQUF3aUQsUUFBQXhpRCxLQUFBNmhELFdBQUEzeEMsRUFBQWxRLEtBQUF3aUQsUUFBNlYsSUFBQXZpRCxNQUFBLDRDQUEwbUIsU0FBQW04QyxFQUFBempDLEdBQWMzWSxLQUFBNGhELEdBQTdqQ1UsSUFBNmpDdGlELEtBQUE2aEQsUUFBQTdoRCxLQUFBNHJCLFlBQUEsRUFBQTVyQixLQUFBb2lELGdCQUFBM3RDLElBQUFrRSxJQUFBLG1CQUFBQSxHQUEvUixXQUFhLFVBQUFxTCxVQUFBLHNGQUFrUjg1QixHQUFBOTlDLGdCQUFBbzhDLEVBQTFwQyxTQUFBempDLEVBQUFLLEdBQWdCLElBQUlBLEVBQUEsU0FBQUEsR0FBY2lsQixFQUFBdGxCLEVBQUFLLElBQU8sU0FBQUEsR0FBYTlJLEVBQUF5SSxFQUFBSyxLQUFTLE1BQUFBLEdBQVM5SSxFQUFBeUksRUFBQUssSUFBa2xDc2tDLENBQUF0OUMsS0FBQTJZLEdBQXhLLFdBQWEsVUFBQXFMLFVBQUEseUhBQTJKNEIsSUFBc2YsSUFBbUh5MkIsRUFBdEd2NEMsTUFBQUQsUUFBQUMsTUFBQUQsUUFBQSxTQUFBOFUsR0FBMEMseUJBQUF2YSxPQUFBa0IsVUFBQVksU0FBQXJDLEtBQUE4YSxJQUE0RDZqQyxFQUFBLEVBQUFLLE9BQUEsRUFBQWUsT0FBQSxFQUFBakMsRUFBQSxTQUFBaGpDLEVBQUFLLEdBQThDMm9DLEVBQUFuRixHQUFBN2pDLEVBQUFncEMsRUFBQW5GLEVBQUEsR0FBQXhqQyxFQUFBLEtBQUF3akMsR0FBQSxLQUFBb0IsSUFBQTkvQyxHQUFBNmtELE1BQTRDeEcsRUFBQSxvQkFBQS8xQyxtQkFBQSxFQUFBMDJDLEVBQUFYLE1BQW1EZ0YsRUFBQXJFLEVBQUE4RixrQkFBQTlGLEVBQUErRix1QkFBQTlFLEVBQUEsb0JBQUFzRCxXQUFBLElBQUExMkMsR0FBQSx3QkFBZ0h6SyxTQUFBckMsS0FBQThNLEdBQUFtNEMsRUFBQSxvQkFBQUMsbUJBQUEsb0JBQUFDLGVBQUEsb0JBQUFDLGVBQUF0QixFQUFBLElBQUE3OUMsTUFBQSxLQUFBNitDLE9BQUEsRUFBOEpBLEVBQUE1RSxFQUFocUosV0FBa0IsT0FBQXB6QyxFQUFBdTRDLFNBQUFwbEQsSUFBOG9KcWpELEVBQXBrSixXQUFhLElBQUF4b0MsRUFBQSxFQUFBSyxFQUFBLElBQUFtb0MsRUFBQXJqRCxHQUFBQyxFQUFBaTVCLFNBQUFtc0IsZUFBQSxJQUFpRCxPQUFBbnFDLEVBQUFvcUMsUUFBQXJsRCxHQUFvQnNsRCxlQUFBLElBQWlCLFdBQWF0bEQsRUFBQWcrQyxLQUFBcGpDLE1BQUEsR0FBbzlJdlcsR0FBQTBnRCxFQUFwOEksV0FBYSxJQUFBbnFDLEVBQUEsSUFBQXNxQyxlQUF5QixPQUFBdHFDLEVBQUEycUMsTUFBQWgwQyxVQUFBeFIsRUFBQSxXQUFzQyxPQUFBNmEsRUFBQTRxQyxNQUFBNXpDLFlBQUEsSUFBdzNJOFIsUUFBQSxJQUFBMDZCLEdBQUEsbUJBQUFuakMsRUFBcHNJLFdBQWEsSUFBSSxJQUFBTCxFQUFBSyxFQUFBamIsRUFBQTRhLEVBQUEsU0FBcUIsWUFBN2MsS0FBNmNra0MsRUFBQTkrQyxFQUFBeWxELFdBQUF6bEQsRUFBQTBsRCxjQUE3YyxXQUE2QjVHLEVBQUEvK0MsSUFBS0gsSUFBb2QsTUFBQWdiLEdBQVMsT0FBQWhiLEtBQTRtSXdCLEdBQUF4QixJQUFnRSxJQUFBaWtELEVBQUFoOUMsS0FBQWk3QixTQUFBMy9CLFNBQUEsSUFBQXdqRCxVQUFBLElBQUF2QixPQUFBLEVBQUFKLEVBQUEsRUFBQUMsRUFBQSxFQUFBRixFQUFBLElBQUEzRSxFQUFBa0YsRUFBQSxJQUFBbEYsRUFBQW1GLEVBQUEsRUFBMkYsT0FBQTdFLEVBQUFuK0MsVUFBQW9qRCxXQUFBLFNBQUEvcEMsR0FBMEMsUUFBQUssRUFBQSxFQUFZaFosS0FBQTRyQixTQUFBdTJCLEdBQUFucEMsRUFBQUwsRUFBQXJYLE9BQTZCMFgsSUFBQWhaLEtBQUEyakQsV0FBQWhyQyxFQUFBSyxPQUE0QnlrQyxFQUFBbitDLFVBQUFxa0QsV0FBQSxTQUFBaHJDLEVBQUFLLEdBQXNDLElBQUFqYixFQUFBaUMsS0FBQXVpRCxxQkFBQXZrRCxFQUFBRCxFQUFBeUksUUFBNEMsR0FBQXhJLElBQUF3QixFQUFBLENBQVUsSUFBQW1MLEVBQUEvTCxFQUFBK1osR0FBVyxHQUFBaE8sSUFBQXhNLEdBQUF3YSxFQUFBaVQsU0FBQXUyQixFQUFBbmlELEtBQUE0akQsV0FBQWpyQyxFQUFBaVQsT0FBQTVTLEVBQUFMLEVBQUFrcEMsY0FBOEQsc0JBQUFsM0MsRUFBQTNLLEtBQUF5aUQsYUFBQXppRCxLQUFBNmhELFFBQUE3b0MsR0FBQUwsT0FBaUUsR0FBQTVhLElBQUFxK0MsRUFBQSxDQUFlLElBQUFua0MsRUFBQSxJQUFBbGEsRUFBQTBXLEdBQWVtbEIsRUFBQTNoQixFQUFBVSxFQUFBaE8sR0FBQTNLLEtBQUE2akQsY0FBQTVyQyxFQUFBZSxRQUFpQ2haLEtBQUE2akQsY0FBQSxJQUFBOWxELEVBQUEsU0FBQWliLEdBQTBDLE9BQUFBLEVBQUFMLEtBQVlLLFFBQUtoWixLQUFBNmpELGNBQUE3bEQsRUFBQTJhLEdBQUFLLElBQWdDeWtDLEVBQUFuK0MsVUFBQXNrRCxXQUFBLFNBQUFqckMsRUFBQUssRUFBQWpiLEdBQXdDLElBQUFDLEVBQUFnQyxLQUFBd2lELFFBQW1CeGtELEVBQUE0dEIsU0FBQXUyQixJQUFBbmlELEtBQUF5aUQsYUFBQTlwQyxJQUFBcXBDLEVBQUE5eEMsRUFBQWxTLEVBQUFELEdBQUFpQyxLQUFBNmhELFFBQUE3b0MsR0FBQWpiLEdBQUEsSUFBQWlDLEtBQUF5aUQsWUFBQTdGLEVBQUE1K0MsRUFBQWdDLEtBQUE2aEQsVUFBMEdwRSxFQUFBbitDLFVBQUF1a0QsY0FBQSxTQUFBbHJDLEVBQUFLLEdBQXlDLElBQUFqYixFQUFBaUMsS0FBV2k5QyxFQUFBdGtDLE9BQUEsV0FBQUEsR0FBdUIsT0FBQTVhLEVBQUE2bEQsV0FBQTdCLEVBQUEvb0MsRUFBQUwsSUFBNEIsU0FBQUEsR0FBYSxPQUFBNWEsRUFBQTZsRCxXQUFBNUIsRUFBQWhwQyxFQUFBTCxNQUE4QnlqQyxFQUFBMEgsSUFBamdGLFNBQUFuckMsR0FBYyxXQUFBOGtDLEVBQUF6OUMsS0FBQTJZLEdBQUE2cEMsU0FBbS9FcEcsRUFBQTJILEtBQXQ5RSxTQUFBcHJDLEdBQWMsSUFBQUssRUFBQWhaLEtBQVcsV0FBQWdaLEVBQUFxakMsRUFBQTFqQyxHQUFBLFNBQUE1YSxFQUFBQyxHQUFnQyxRQUFBMk0sRUFBQWdPLEVBQUFyWCxPQUFBMlcsRUFBQSxFQUF1QkEsRUFBQXROLEVBQUlzTixJQUFBZSxFQUFBeFMsUUFBQW1TLEVBQUFWLElBQUFoTCxLQUFBbFAsRUFBQUMsSUFBOEIsU0FBQTJhLEVBQUFLLEdBQWUsT0FBQUEsRUFBQSxJQUFBZ0wsVUFBQSx1Q0FBcTFFbzRCLEVBQUE1MUMsUUFBQWhILEVBQUE0OEMsRUFBQTRILE9BQXh4RSxTQUFBcnJDLEdBQWMsSUFBQTVhLEVBQUEsSUFBQWlDLEtBQUF5VSxHQUFzQixPQUFBdkUsRUFBQW5TLEVBQUE0YSxHQUFBNWEsR0FBb3ZFcStDLEVBQUE2SCxjQUFscEwsU0FBQXRyQyxHQUFjaWxDLEVBQUFqbEMsR0FBb29MeWpDLEVBQUE4SCxTQUFob0wsU0FBQXZyQyxHQUFjZ2pDLEVBQUFoakMsR0FBa25MeWpDLEVBQUErSCxNQUFBeEksRUFBQVMsRUFBQTk4QyxXQUErRmlCLFlBQUE2N0MsRUFBQW52QyxLQUFBOU8sRUFBQXEyQixNQUFBLFNBQUE3YixHQUF1QyxPQUFBM1ksS0FBQWlOLEtBQUEsS0FBQTBMLEtBQTBCeWpDLEVBQUFnSSxTQUFoK0QsV0FBYSxJQUFBenJDLE9BQUEsRUFBYSxZQUFBVixFQUFBVSxFQUFBVixPQUFrQix1QkFBQW9wQyxLQUFBMW9DLEVBQUEwb0MsVUFBd0MsSUFBUzFvQyxFQUFBMHJDLFNBQUEsY0FBQUEsR0FBNEIsTUFBQTFyQyxHQUFTLFVBQUExWSxNQUFBLDRFQUE0RixJQUFBK1ksRUFBQUwsRUFBQXBPLFFBQWdCLEdBQUF5TyxFQUFBLENBQU0sSUFBQWpiLEVBQUEsS0FBVyxJQUFJQSxFQUFBSyxPQUFBa0IsVUFBQVksU0FBQXJDLEtBQUFtYixFQUFBeFMsV0FBOEMsTUFBQW1TLElBQVUsd0JBQUE1YSxJQUFBaWIsRUFBQXNyQyxLQUFBLE9BQTBDM3JDLEVBQUFwTyxRQUFBNnhDLEdBQTJuREEsRUFBQTd4QyxRQUFBNnhDLFFBQThCditDLEtBQUFtQyxLQUFBZ1osRUFBQSxxQkFBQTZoQyxJQUFBLG9CQUFBd0csVUFBQSxvQkFBQWo3QyxvQkFBa0ltK0MsU0FBQSxLQUFZQyxHQUFBLFNBQUF4ckMsRUFBQWpiLEVBQUFDLElBQXFCLFNBQUFnYixFQUFBck8sR0FBd0UsWUFBQTNNLFFBQUEsSUFBQUQsRUFBQTRNLEVBQUEzTSxFQUFBRCxPQUFzQyxDQUFLLElBQUFrYSxHQUFPemEsWUFBWW1OLEVBQUFzTixLQUFBZSxFQUFBeXJDLFdBQUF4c0MsRUFBQXphLFNBQXRJLENBQTZLd0MsS0FBQSxTQUFBMlksRUFBQUssR0FBb0IsYUFBcUYsU0FBQWhiLEVBQUEyYSxHQUFjLFdBQUl2UyxPQUFBdVMsR0FBaUIsTUFBQUssR0FBUzVTLE9BQUF1UyxRQUFBLEdBQWtCLFNBQUFoTyxFQUFBZ08sR0FBYyxJQUFBSyxFQUFBZ2UsU0FBQTB0QixlQUFBL3JDLEdBQWlDSyxHQUFBZ2UsU0FBQTJ0QixxQkFBQSxXQUFBQyxZQUFBNXJDLEdBQXF6QixJQUFBVixHQUFPeEssUUFBQSxJQUFBKzJDLGNBQUEsV0FBQUMsc0JBQUEsTUFBaUU5ckMsRUFBQXhiLFFBQWwwQixTQUFBbWIsR0FBYyxJQUFBSyxFQUFBMVYsVUFBQWhDLFFBQUEsWUFBQWdDLFVBQUEsTUFBbURBLFVBQUEsR0FBQTJVLEVBQUFVLEVBQUFvaUMsRUFBQS9oQyxFQUFBbEwsU0FBQXdLLEVBQUF4SyxRQUFBcFEsRUFBQXNiLEVBQUE2ckMsZUFBQXZzQyxFQUFBdXNDLGNBQUF6aUQsT0FBQSxFQUFxRixXQUFBbUksUUFBQSxTQUFBK04sRUFBQW1KLEdBQWlDLElBQUE5akIsRUFBQXFiLEVBQUE4ckMsdUJBQTFaLFNBQUFDLEtBQUF2L0MsTUFBQSxJQUFBWixLQUFBbWQsS0FBQSxJQUFBbmQsS0FBQWk3QixVQUEwWi9oQyxFQUFBSixFQUFBLElBQUFDLEVBQTZDeUksT0FBQXpJLEdBQUEsU0FBQWdiLEdBQXNCTCxHQUFHMHNDLElBQUEsRUFBQUMsS0FBQSxXQUFzQixPQUFBMTZDLFFBQUEvRCxRQUFBbVMsTUFBMkJ2VyxHQUFBNEwsYUFBQTVMLEdBQUF1SSxFQUFBN00sR0FBQUUsRUFBQUwsSUFBK0JzYSxJQUFBLElBQUFBLEVBQUE5VyxRQUFBLGFBQWdDLElBQUFoQyxFQUFBNjNCLFNBQUFDLGNBQUEsVUFBdUM5M0IsRUFBQStsRCxhQUFBLFNBQUFqdEMsRUFBQXZhLEVBQUEsSUFBQUMsR0FBQXFiLEVBQUFtc0MsU0FBQWhtRCxFQUFBK2xELGFBQUEsVUFBQWxzQyxFQUFBbXNDLFNBQUFobUQsRUFBQTRPLEdBQUFqUSxFQUFBazVCLFNBQUEydEIscUJBQUEsV0FBQVMsWUFBQWptRCxHQUFBaUQsRUFBQXdMLFdBQUEsV0FBeUs2VCxFQUFBLElBQUF4aEIsTUFBQSxvQkFBQTBZLEVBQUEsZUFBQTNhLEVBQUFMLEdBQUFnTixFQUFBN00sR0FBQXNJLE9BQUF6SSxHQUFBLFdBQWdGSyxFQUFBTCxLQUFNbzlDLEdBQUE1N0MsRUFBQXMxQixRQUFBLFdBQXlCaFQsRUFBQSxJQUFBeGhCLE1BQUEsb0JBQUEwWSxFQUFBLFlBQUEzYSxFQUFBTCxHQUFBZ04sRUFBQTdNLEdBQUFzRSxHQUFBNEwsYUFBQTVMLGNBQXVLaWpELEdBQUEsU0FBQXJzQyxFQUFBamIsRUFBQUMsR0FBcUIsSUFBQTJNLEtBQUEsU0FBQWdPLEdBQXFCLGFBQWEsY0FBQUEsR0FBQSxvQkFBQTlHLFdBQUEsZUFBQTdOLEtBQUE2TixVQUFBQyxZQUFBLENBQTJGLElBQUFrSCxFQUFBTCxFQUFBcWUsU0FBQWo1QixFQUFBLFdBQThCLE9BQUE0YSxFQUFBN0osS0FBQTZKLEVBQUE1SixXQUFBNEosR0FBNkIzYSxFQUFBZ2IsRUFBQXNzQyxnQkFBQSxvQ0FBQTM2QyxFQUFBLGFBQUEzTSxFQUF5SXNhLEVBQUEsZUFBQXRVLEtBQUEyVSxFQUFBNHNDLGNBQUE1c0MsRUFBQTZzQyxPQUFBekssRUFBQSxlQUFBLzJDLEtBQUE2TixVQUFBQyxXQUFBcFUsRUFBQSxTQUFBc2IsSUFBeUdMLEVBQUE4c0MsY0FBQTlzQyxFQUFBL0ssWUFBQSxXQUEwQyxNQUFBb0wsR0FBUSxJQUFJcmIsRUFBQSxTQUFBZ2IsR0FBeUgvSyxXQUF2RSxXQUFpQixpQkFBQStLLEVBQUE1YSxJQUFBMm5ELGdCQUFBL3NDLEtBQUFsUSxVQUFuRSxNQUF5STNLLEVBQUEsU0FBQTZhLEVBQUFLLEVBQUFqYixHQUFrQyxRQUFBQyxHQUFmZ2IsS0FBQW9OLE9BQUFwTixJQUFlMVgsT0FBbUJ0RCxLQUFJLENBQUUsSUFBQTJNLEVBQUFnTyxFQUFBLEtBQUFLLEVBQUFoYixJQUFtQixzQkFBQTJNLEVBQUEsSUFBNEJBLEVBQUE5TSxLQUFBOGEsRUFBQTVhLEdBQUE0YSxHQUFlLE1BQUFBLEdBQVNqYixFQUFBaWIsTUFBT3haLEVBQUEsU0FBQXdaLEdBQWUsbUZBQTJEM1UsS0FBQTJVLEVBQUExSyxNQUFBLElBQUFnQixNQUFBOHRDLE9BQUFDLGFBQUEsT0FBQXJrQyxJQUE4RTFLLEtBQUEwSyxFQUFBMUssT0FBWTBLLEdBQUl4YSxFQUFBLFNBQUE2YSxFQUFBdGIsRUFBQStqQixHQUFtQkEsSUFBQXpJLEVBQUE3WixFQUFBNlosSUFBWSxJQUFBN2EsRUFBQXFCLEVBQUFRLEtBQUF5VSxFQUFBdUUsRUFBQS9LLEtBQUF6UCxFQUF6ZCw2QkFBeWRpVyxFQUFBaFYsRUFBQSxXQUEyQzNCLEVBQUEwQixFQUFBLHFDQUFBNkIsTUFBQSxPQUFtZCxHQUFBN0IsRUFBQW1tRCxXQUFBbm1ELEVBQUFvbUQsS0FBQWo3QyxFQUFBLE9BQUF4TSxFQUFBSixJQUFBcVIsZ0JBQUE0SixRQUFBcEwsV0FBQSxXQUFvRjVQLEVBQUE2bkQsS0FBQTFuRCxFQUFBSCxFQUFBOG5ELFNBQUFwb0QsRUFBbjFDLFNBQUFpYixHQUF3RixJQUFBSyxFQUFBLElBQUErc0MsV0FBQSxTQUE4QnB0QyxFQUFBcXRDLGNBQUFodEMsR0FBNnRDZixDQUFBamEsR0FBQXlCLElBQUE5QixFQUFBUSxHQUFBcUIsRUFBQW1tRCxXQUFBbm1ELEVBQUF5bUQsUUFBbGYsV0FBYyxJQUFBbEwsR0FBQXY4QyxHQUFBOFosSUFBQUssRUFBQXV0QyxXQUFBLENBQTRCLElBQUFsb0QsRUFBQSxJQUFBa29ELFdBQXFCLE9BQUFsb0QsRUFBQW1vRCxVQUFBLFdBQThCLElBQUFudEMsRUFBQStoQyxFQUFBLzhDLEVBQUFvb0QsT0FBQXBvRCxFQUFBb29ELE9BQUFqd0IsUUFBQSxlQUErQyx5QkFBMkJ4ZCxFQUFBNmQsS0FBQXhkLEVBQUEsWUFBQUwsRUFBQTB0QyxTQUFBUixLQUFBN3NDLFVBQUEsRUFBQXhaLEVBQUFtbUQsV0FBQW5tRCxFQUFBeW1ELEtBQUF4bUQsS0FBeUV6QixFQUFBc29ELGNBQUF0dEMsUUFBQXhaLEVBQUFtbUQsV0FBQW5tRCxFQUFBb21ELE1BQThDem5ELE1BQUFKLElBQUFxUixnQkFBQTRKLElBQUF4YSxFQUFBbWEsRUFBQTB0QyxTQUFBUixLQUFBMW5ELEVBQTBEd2EsRUFBQTZkLEtBQUFyNEIsRUFBQSxZQUFBd2EsRUFBQTB0QyxTQUFBUixLQUFBMW5ELEdBQXdDcUIsRUFBQW1tRCxXQUFBbm1ELEVBQUF5bUQsS0FBQXhtRCxJQUFBOUIsRUFBQVEsR0FBNEtTLElBQUlZLEVBQUFyQixFQUFBbUIsVUFBMEUsMEJBQUF1UyxxQkFBQTAwQyxpQkFBQSxTQUFBNXRDLEVBQUFLLEVBQUFqYixHQUFnRixPQUFBaWIsS0FBQUwsRUFBQTFhLE1BQUEsV0FBQUYsSUFBQTRhLEVBQUF4WixFQUFBd1osSUFBQTlHLFVBQUEwMEMsaUJBQUE1dEMsRUFBQUssS0FBMkV4WixFQUFBcTFCLE1BQUEsYUFBc0JyMUIsRUFBQW1tRCxXQUFBbm1ELEVBQUFvbUQsS0FBQSxFQUFBcG1ELEVBQUFnbkQsUUFBQSxFQUFBaG5ELEVBQUF5bUQsS0FBQSxFQUFBem1ELEVBQUFzTSxNQUFBdE0sRUFBQWluRCxhQUFBam5ELEVBQUFrbkQsV0FBQWxuRCxFQUFBbW5ELFFBQUFubkQsRUFBQW9uRCxRQUFBcG5ELEVBQUFpMUIsUUFBQWoxQixFQUFBcW5ELFdBQUEsS0FBM1AsU0FBQWx1QyxFQUFBSyxFQUFBamIsR0FBaUMsV0FBQUksRUFBQXdhLEVBQUFLLEdBQUFMLEVBQUExYSxNQUFBLFdBQUFGLE1BQTFtRCxDQUF3OEQsb0JBQUFzakQsWUFBQSxvQkFBQWo3QyxnQkFBQXBHLEtBQUE4bUQsY0FBbUYsSUFBQS9vRCxLQUFBUCxVQUFBTyxFQUFBUCxRQUFBdXBELE9BQUFwOEMsUUFBdUhxOEMsR0FBQSxTQUFBcnVDLEVBQUFLLEVBQUFqYixHQUFxQkEsRUFBQTRoRCxLQUFBLFNBQUFobkMsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxHQUEyQixJQUFBc04sRUFBQUssRUFBQXlpQyxFQUFBLEVBQUFwd0MsRUFBQTNNLEVBQUEsRUFBQU4sR0FBQSxHQUFBcTlDLEdBQUEsRUFBQTM0QyxFQUFBMUUsR0FBQSxFQUFBK2pCLEdBQUEsRUFBQTlqQixFQUFBSSxFQUFBNE0sRUFBQSxJQUFBN00sRUFBQUMsR0FBQSxJQUFBb0IsRUFBQXdaLEVBQUFLLEVBQUFyYixHQUFxRSxJQUFBQSxHQUFBRyxFQUFBbWEsRUFBQTlZLEdBQUEsSUFBQXNpQixHQUFBLEVBQUF0aUIsS0FBQXNpQixLQUFBczVCLEVBQW1DdDVCLEVBQUEsRUFBSXhKLEVBQUEsSUFBQUEsRUFBQVUsRUFBQUssRUFBQXJiLE1BQUFHLEVBQUEyakIsR0FBQSxHQUEwQixJQUFBbkosRUFBQUwsR0FBQSxJQUFBd0osR0FBQSxFQUFBeEosS0FBQXdKLEtBQUF6akIsRUFBOEJ5akIsRUFBQSxFQUFJbkosRUFBQSxJQUFBQSxFQUFBSyxFQUFBSyxFQUFBcmIsTUFBQUcsRUFBQTJqQixHQUFBLEdBQTBCLE9BQUF4SixJQUFBLEVBQUE3VixNQUFlLENBQUssR0FBQTZWLElBQUF2YSxFQUFBLE9BQUE0YSxFQUFBMnVDLElBQUEsS0FBQTluRCxHQUFBLEtBQW1DbVosR0FBQTFULEtBQUFLLElBQUEsRUFBQWpILEdBQUFpYSxHQUFBN1YsRUFBc0IsT0FBQWpELEdBQUEsS0FBQW1aLEVBQUExVCxLQUFBSyxJQUFBLEVBQUFnVCxFQUFBamEsSUFBaUNELEVBQUEwOUMsTUFBQSxTQUFBOWlDLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLEdBQStCLElBQUFLLEVBQUF5aUMsRUFBQXI5QyxFQUFBMEUsRUFBQSxFQUFBNlYsRUFBQXROLEVBQUEsRUFBQThXLEdBQUEsR0FBQXJmLEdBQUEsRUFBQXpFLEVBQUE4akIsR0FBQSxFQUFBM2pCLEVBQUEsS0FBQTZNLEVBQUEvRixLQUFBSyxJQUFBLE9BQUFMLEtBQUFLLElBQUEsU0FBQTlGLEVBQUFuQixFQUFBLEVBQUFpYSxFQUFBLEVBQUE5WixFQUFBSCxFQUFBLEtBQUF3QixFQUFBd1osRUFBQSxPQUFBQSxHQUFBLEVBQUFBLEVBQUEsTUFBNEgsSUFBQUEsRUFBQXBVLEtBQUFzVixJQUFBbEIsR0FBQW05QixNQUFBbjlCLFFBQUEsS0FBQStoQyxFQUFBNUUsTUFBQW45QixHQUFBLElBQUFWLEVBQUFtSixJQUFBbkosRUFBQTFULEtBQUEwRSxNQUFBMUUsS0FBQVEsSUFBQTRULEdBQUFwVSxLQUFBc2lELEtBQUFsdUMsR0FBQXRiLEVBQUFrSCxLQUFBSyxJQUFBLEdBQUFxVCxJQUFBLElBQUFBLElBQUE1YSxHQUFBLElBQUFzYixHQUFBVixFQUFBM2EsR0FBQSxFQUFBRyxFQUFBSixFQUFBSSxFQUFBOEcsS0FBQUssSUFBQSxJQUFBdEgsSUFBQUQsR0FBQSxJQUFBNGEsSUFBQTVhLEdBQUEsR0FBQTRhLEVBQUEzYSxHQUFBOGpCLEdBQUFzNUIsRUFBQSxFQUFBemlDLEVBQUFtSixHQUFBbkosRUFBQTNhLEdBQUEsR0FBQW85QyxHQUFBL2hDLEVBQUF0YixFQUFBLEdBQUFrSCxLQUFBSyxJQUFBLEVBQUEwRixHQUFBMk4sR0FBQTNhLElBQUFvOUMsRUFBQS9oQyxFQUFBcFUsS0FBQUssSUFBQSxFQUFBdEgsRUFBQSxHQUFBaUgsS0FBQUssSUFBQSxFQUFBMEYsR0FBQTJOLEVBQUEsSUFBbVIzTixHQUFBLEVBQUtnTyxFQUFBNWEsRUFBQW9CLEdBQUEsSUFBQTQ3QyxFQUFBNTdDLEdBQUFoQixFQUFBNDhDLEdBQUEsSUFBQXB3QyxHQUFBLEdBQStCLElBQUEyTixLQUFBM04sRUFBQW93QyxFQUFBMzRDLEdBQUF1SSxFQUFrQnZJLEVBQUEsRUFBSXVXLEVBQUE1YSxFQUFBb0IsR0FBQSxJQUFBbVosRUFBQW5aLEdBQUFoQixFQUFBbWEsR0FBQSxJQUFBbFcsR0FBQSxHQUErQnVXLEVBQUE1YSxFQUFBb0IsRUFBQWhCLElBQUEsSUFBQXFCLFFBQW9CMm5ELEdBQUEsU0FBQXh1QyxFQUFBSyxFQUFBamIsR0FBcUIsSUFBQUMsS0FBUWtDLFNBQVU4WSxFQUFBeGIsUUFBQXNHLE1BQUFELFNBQUEsU0FBQThVLEdBQXFDLHdCQUFBM2EsRUFBQUgsS0FBQThhLFNBQXNDeXVDLEdBQUEsU0FBQXp1QyxFQUFBSyxFQUFBamIsR0FBcUIsYUFBYSxTQUFBQyxFQUFBMmEsRUFBQUssR0FBZ0IsT0FBQUwsRUFBQUssU0FBQUwsTUFBQUssRUFBQUwsRUFBNEIsU0FBQWhPLEVBQUFnTyxFQUFBSyxHQUFnQixPQUFBTCxFQUFBSyxPQUFBTCxFQUFBSyxTQUFBTCxLQUFBSyxFQUFBTCxFQUFvQyxTQUFBVixFQUFBVSxFQUFBSyxFQUFBamIsR0FBa0IsSUFBQUMsRUFBQWdiLElBQUFMLEVBQUFLLEVBQUFyTyxFQUFBNU0sRUFBQWliLE1BQzl1K0IsU0FBQWhiLEVBQUEyTSxFQUFBM00sRUFBQTJNLEVBQUFxTyxFQUFBTCxNQUFBM2EsS0FBQTJNLElBQUFnTyxJQUFBNWEsRUFBQTRhLEdBQUFLLEVBQUFMLEVBQUE1YSxFQUFBNGEsRUFBQWhPLEdBQUEzTSxFQUFBMk0sSUFBQTVNLEVBQUE0YSxPQUFBLEVBQXVFLFNBQUFMLEVBQUFLLEVBQUFLLEVBQUFqYixHQUFrQixJQUFBQyxFQUFBZ2IsSUFBQUwsRUFBQUssRUFBQXJPLEVBQUE1TSxFQUFBaWIsTUFBd0IsU0FBQWhiLEVBQUEyTSxHQUFBcU8sRUFBQUwsRUFBQTVhLEVBQUE0YSxHQUFBM2EsR0FBQWdiLEVBQUFMLE9BQUFoTyxFQUFBLEVBQXVDLFNBQUFvd0MsRUFBQXBpQyxFQUFBSyxHQUFnQixPQUFBTCxJQUFBSyxFQUFBTCxTQUFBSyxFQUFBTCxLQUFBSyxPQUFvQyxTQUFBdGIsRUFBQWliLEVBQUFLLEVBQUFqYixHQUFrQixJQUFBQyxFQUFBZ2IsRUFBQUwsTUFBQWhPLEVBQUE1TSxFQUFBNGEsRUFBQUssRUFBQUwsRUFBd0IsU0FBQTNhLEVBQUEyTSxFQUFBM00sRUFBQTJNLEVBQUFxTyxJQUFBTCxFQUFBSyxFQUFBaGIsS0FBQTJNLElBQUFnTyxFQUFBSyxFQUFBamIsRUFBQWliLE9BQUFqYixFQUFBaWIsRUFBQXJPLEdBQUEzTSxFQUFBMk0sSUFBQTVNLEVBQUFpYixFQUFBTCxFQUFBSyxHQUFBLEVBQXVFLFNBQUE1VyxFQUFBdVcsRUFBQUssRUFBQWpiLEdBQWtCLElBQUFDLEVBQUFnYixFQUFBTCxNQUFBaE8sRUFBQTVNLEVBQUE0YSxFQUFBSyxFQUFBTCxFQUF3QixTQUFBM2EsRUFBQTJNLEdBQUFxTyxJQUFBamIsRUFBQWliLEdBQUFoYixHQUFBZ2IsSUFBQUwsRUFBQUssR0FBQXJPLEVBQUEsRUFBdUMsU0FBQThXLEVBQUE5SSxHQUFjLE9BQUFoTyxFQUFBZ08sRUFBQUssRUFBQUwsT0FBb0IsU0FBQWhiLEVBQUFnYixHQUFjLE9BQUFoTyxFQUFBZ08sTUFBQUssRUFBQUwsR0FBb0IsU0FBQTdhLEVBQUE2YSxFQUFBSyxFQUFBamIsRUFBQUMsR0FBb0IsT0FBQTJhLEVBQUEsRUFBQUEsRUFBQSxFQUFBQSxLQUFBNWEsRUFBQSxFQUFBQSxFQUFBLEVBQUFBLEdBQUEsSUFBQUEsR0FBQWliLEVBQUFoYixHQUFBLEVBQUFnYixFQUFBTCxLQUFBNWEsSUFBQUMsRUFBQWdiLEdBQUFoYixFQUFBRCxHQUFBNGEsRUFBQTVhLElBQUFpYixFQUFBaGIsR0FBOEUsU0FBQW1CLEVBQUF3WixHQUFjLElBQUFLLEVBQUF2WixFQUFBa1osRUFBQUssR0FBYSxPQUFBc2pDLEVBQUF0akMsRUFBQUwsRUFBQTVhLEdBQUF1K0MsRUFBQXRqQyxJQUFBTCxFQUFBNWEsR0FBQXkzQyxFQUFBeDhCLEVBQUFMLEtBQUFLLEVBQXNDLFNBQUE3YSxFQUFBd2EsRUFBQUssR0FBZ0IsSUFBQWpiLEdBQUEsRUFBQUMsR0FBQSxFQUFjMmEsSUFBQUssTUFBQUwsVUFBQTNhLEdBQUEsRUFBQTQ3QixFQUFBNWdCLEVBQUFMLFFBQUFLLEVBQUFoYixJQUFBMmEsRUFBQTNhLElBQUFELEdBQUEsRUFBQWtnQyxFQUFBamxCLEVBQUFoYixFQUFBMmEsRUFBQTNhLElBQUFZLEVBQUFvYSxFQUFBTCxHQUFBM2EsSUFBQXMrQyxFQUFBdGpDLEVBQUFMLFNBQUE1YSxFQUFBNGEsR0FBQTVhLElBQUF5M0MsRUFBQXg4QixFQUFBTCxFQUFBM2EsR0FBQTJhLEVBQUEzYSxFQUFBMmEsTUFBc0gsU0FBQW5aLEVBQUFtWixHQUFjLElBQUFLLEVBQUFMLEVBQUFLLEVBQUFqYixHQUFBLEVBQWU0YSxFQUFBM2EsSUFBQTJhLEVBQUFLLEVBQUFoYixJQUFBRCxHQUFBLEVBQUFrZ0MsRUFBQXRsQixFQUFBM2EsRUFBQTJhLEVBQUFLLEVBQUFoYixJQUFBMmEsRUFBQTVhLElBQUE0YSxFQUFBaWhCLEVBQUFqaEIsSUFBQSxPQUFBQSxFQUFBSyxFQUFBaGIsRUFBQTJhLEVBQUFta0MsRUFBQW5rQyxPQUFBNWEsRUFBQTRhLEVBQUE1YSxFQUFBYSxFQUFBK1osRUFBQW1rQyxFQUFBbmtDLElBQUE1YSxHQUFBeTNDLEVBQUE3OEIsSUFBQTNhLElBQUFnYixFQUFBamIsSUFBQWliLEdBQUE0Z0IsRUFBQTVnQixFQUFBTCxFQUFBLE1BQUFzbEIsRUFBQWpsQixFQUFBaGIsRUFBQSxRQUFBMmEsRUFBQTNhLEVBQUEyYSxFQUFBbWtDLEVBQUE5akMsS0FBQUwsRUFBQTVhLEVBQUFpYixFQUFBamIsRUFBQWEsRUFBQW9hLEVBQUE4akMsRUFBQTlqQyxLQUFBeWpDLEVBQUE5akMsR0FBNEssU0FBQWxFLEVBQUFrRSxHQUFjLElBQUFLLEVBQUF2WixFQUFBa1osR0FBQTVhLEVBQUFpYixJQUFpQixPQUFBcGEsRUFBQW9hLEVBQUFMLEVBQUFoTyxHQUFBcU8sRUFBQUwsSUFBQUssRUFBQUwsRUFBQTJqQyxFQUFBditDLEVBQUFpYixFQUFBTCxHQUFBSyxFQUFBaGIsRUFBQUQsRUFBQUMsRUFBQTJhLEVBQUEzYSxFQUFBZ2IsTUFBQXBhLEVBQUErWixFQUFBSyxFQUFBOGpDLEVBQUFua0MsRUFBQUssSUFBQXBhLEVBQUErWixFQUFBSyxLQUFBTCxFQUFBSyxFQUFBTCxFQUFBSyxFQUFBTCxFQUFBSyxJQUFBTCxFQUFBNWEsRUFBQWliLFFBQUFoYixFQUFBMmEsRUFBQUssRUFBQWhiLEVBQUFnYixFQUFBZixFQUFBVSxFQUFBVixFQUFBZSxJQUFBZixFQUFBVSxFQUFBSyxFQUFBZixFQUFBZSxFQUFvSSxTQUFBeGEsRUFBQW1hLEVBQUFLLEdBQWdCLElBQUFqYixHQUFBLEVBQUFDLEVBQUF5QixFQUFBa1osR0FBQWhPLEVBQUEzTSxFQUFBZ2IsRUFBc0IsT0FBQUEsRUFBQWhiLElBQUEyYSxFQUFBM2EsSUFBQUQsR0FBQSxFQUFBa2dDLEVBQUFqbEIsRUFBQWhiLEVBQUEyYSxFQUFBM2EsSUFBQVksRUFBQVosRUFBQTJhLEVBQUFoTyxHQUFBL0wsRUFBQStMLEVBQUFxTyxHQUFBaGIsRUFBQTJhLElBQUFLLEVBQUFMLEVBQUFoTyxFQUFBZ08sRUFBQUssRUFBQUwsRUFBQTNhLElBQUEyTSxFQUFBM00sRUFBQTJhLEVBQUEzYSxFQUFBMmEsRUFBQTNhLEVBQUEyYSxFQUFBaE8sRUFBQTVNLEdBQUF5M0MsRUFBQXgzQyxFQUFBMmEsRUFBQTNhLEtBQXdHLFNBQUF5QixFQUFBa1osR0FBYyxJQUFBSyxFQUFBLElBQUFtakMsRUFBQXArQyxFQUFBLElBQUFvK0MsRUFBQW4rQyxFQUFBMmEsRUFBQUssRUFBQStoQyxFQUE0QixPQUFBaDlDLEVBQUFnOUMsRUFBQS84QyxJQUFBZ2IsRUFBQStoQyxFQUFBL2hDLElBQUEraEMsRUFBQXBpQyxJQUFBSyxFQUFBK2hDLEVBQUFoOUMsRUFBQWliLElBQUFqYixFQUFBaWIsRUFBQWpiLEVBQUFpYixJQUFBck8sRUFBQTVNLElBQUFpYixJQUFBamIsUUFBQTRNLEVBQUFxTyxFQUF1RSxTQUFBcGEsRUFBQStaLEVBQUFLLEdBQWdCLElBQUFqYixFQUFBNGEsRUFBQTVhLEVBQUFDLEVBQUFnYixFQUFBamIsRUFBZ0JBLEVBQUFpYixFQUFBck8sRUFBQXFPLEVBQUFoYixFQUFBZ2IsRUFBQXJPLEVBQUFnTyxJQUFBNWEsRUFBQUMsRUFBQWdiLEVBQUFqYixJQUE0QixTQUFBdStDLEVBQUEzakMsRUFBQUssR0FBZ0IsSUFBQWpiLEVBQUFpYixFQUFBZixFQUFBamEsRUFBQSxJQUFBKy9DLEVBQUEva0MsRUFBQWpiLEdBQXdCQSxFQUFBNE0sRUFBQTNNLEVBQUFnYixFQUFBZixFQUFBamEsRUFBQUQsRUFBQUMsRUFBQUQsRUFBQTRhLEVBQW9CLEdBQUc1YSxFQUFBNGEsRUFBQTNhLEVBQUFELFlBQVlBLElBQUE0YSxHQUFhLFNBQUE2OEIsRUFBQTc4QixFQUFBSyxHQUFnQixJQUFBamIsRUFBQWliLEVBQUFoYixJQUFBLElBQUEyOUMsRUFBQTNpQyxFQUFBamIsR0FBdUJBLEVBQUFpYixFQUFBaGIsRUFBQWdiLEVBQUFoYixNQUFBMmEsSUFBQTNhLEVBQUFELEVBQUFpYixFQUFBamIsSUFBQTRhLEVBQThCLEdBQUc1YSxFQUFBQyxJQUFBRCxJQUFBNE0sUUFBWTVNLElBQUE0YSxHQUFhLFNBQUE4akMsRUFBQTlqQyxHQUFjLElBQUFLLEVBQUFMLEVBQUFvaUMsRUFBVXBpQyxJQUFBSyxFQUFBK2hDLEVBQUEvaEMsSUFBQStoQyxFQUFBcGlDLElBQUFLLEVBQUEraEMsRUFBQS9oQyxFQUF3QixTQUFBNGdCLEVBQUFqaEIsRUFBQUssR0FBZ0IsSUFBQWpiLEVBQUE0YSxFQUFBNWEsRUFBQUMsRUFBQUQsRUFBYyxHQUFHQyxFQUFBMmEsRUFBQUssRUFBQWhiLElBQUFELFFBQVlDLElBQUFELEdBQWFBLEVBQUE0YSxFQUFBVixHQUFBamEsRUFBQTJhLEVBQUFoTyxHQUFBc04sRUFBQWxhLElBQUE0TSxFQUFBM00sRUFBd0IsU0FBQWlnQyxFQUFBdGxCLEVBQUFLLEdBQWdCLElBQUFqYixFQUFBNGEsSUFBQTNhLEVBQUFELEVBQWMsR0FBR0MsSUFBQWdiLEVBQUFoYixJQUFBMk0sUUFBWTNNLElBQUFELEdBQWFBLEVBQUE0YSxFQUFBM2EsS0FBQTJhLEVBQUFLLEdBQUFoYixFQUFBRCxJQUFBaWIsRUFBQWhiLEVBQXdCLFNBQUFrZ0MsRUFBQXZsQixHQUFjLElBQUFLLEVBQUEsRUFBUSxPQUFBcFUsS0FBQXNWLElBQUF2QixFQUFBLElBQUEvVCxLQUFBc1YsSUFBQXZCLEVBQUEsTUFBQUssRUFBQSxHQUFBcFUsS0FBQXNWLElBQUF2QixFQUFBLElBQUEvVCxLQUFBc1YsSUFBQXZCLEVBQUFLLFFBQUEsR0FBQUEsRUFBbUYsU0FBQTRqQyxFQUFBamtDLEVBQUFLLEdBQWdCTCxFQUFBVixHQUFBZSxFQUFBZixFQUFBVSxFQUFBSyxFQUFBZixHQUFBZSxJQUFBZixFQUFzQixTQUFBL0gsRUFBQXlJLEVBQUFLLEVBQUFqYixHQUFrQixPQUFBNGEsTUFBQUssSUFBQUwsRUFBQTVhLElBQUE0YSxFQUFBSyxJQUFBTCxNQUFBNWEsRUFBQWliLEVBQUFMLE1BQUFoTyxFQUFBcU8sRUFBQUwsRUFBQTVhLEVBQUE0YSxHQUFBLEdBQUFMLEVBQUF2YSxFQUFBaWIsRUFBQUwsRUFBQUssRUFBQUwsRUFBQTVhLEVBQUE0YSxHQUFBLEdBQUFMLEVBQUFVLElBQUFMLEVBQUE1YSxFQUFBNGEsRUFBQUssRUFBQUwsR0FBQSxHQUFBTCxFQUFBdmEsRUFBQWliLEVBQUFMLElBQUE1YSxFQUFBNGEsR0FBQTVhLEVBQUFpYixFQUFBTCxNQUFBLEdBQUFMLEVBQUFVLElBQUFMLElBQUFLLEVBQUFMLElBQUFLLEVBQUFmLEVBQUFlLElBQUFMLElBQUFLLEVBQUFMLEtBQUFWLEVBQUFsYSxFQUFBaWIsRUFBQUwsSUFBQTVhLEVBQUE0YSxHQUFBSyxHQUFBTCxHQUF1TCxTQUFBc2tDLEVBQUF0a0MsR0FBY0EsSUFBQWpiLEVBQUEsS0FBVyxJQUFBc2IsRUFBQUwsRUFBQWhPLEVBQVVxTyxFQUFBTCxFQUFBNWEsRUFBQWliLEVBQUFqYixFQUFBaWIsRUFBQWpiLEVBQUE0YSxFQUFBSyxFQUFBTCxJQUFBaE8sRUFBQSxLQUE2QixTQUFBdXlDLEVBQUF2a0MsRUFBQUssR0FBZ0J4WixFQUFBbVosT0FBQTVhLEdBQUEsRUFBQTRhLElBQUFLLElBQUF0YixFQUFBaWIsRUFBMEIsU0FBQXdrQyxFQUFBeGtDLEdBQWMsSUFBQUssRUFBQUwsTUFBWSxHQUFHQSxFQUFBMHVDLEdBQUExdUMsU0FBUUEsUUFBQUssR0FBaUIsT0FBQUwsRUFBQTVhLElBQUFpYixFQUFBeGEsRUFBQThvRCxHQUFBM3VDLEtBQUFLLEVBQUFMLElBQUFoTyxHQUFBdXlDLEVBQUF2a0MsRUFBQUssR0FBQUwsRUFBQTB1QyxHQUFBMXVDLE1BQW9ELFNBQUF5a0MsRUFBQXprQyxFQUFBSyxFQUFBamIsR0FBa0IsSUFBQUMsRUFBQSxJQUFBdXBELEdBQWEsT0FBQXZwRCxFQUFBMmEsRUFBQTVhLEVBQUFDLEVBQUEyTSxFQUFBZ3lDLEVBQUFoa0MsRUFBQVYsRUFBQWUsRUFBQXJPLEVBQUEzTSxHQUFBRCxFQUFBTCxFQUFBTSxFQUFvQyxTQUFBcS9DLEVBQUExa0MsRUFBQUssR0FBZ0IsT0FBQUwsRUFBQWxaLEdBQVkseUJBQUF1WixHQUE0Qix1QkFBQUEsRUFBeUIscUJBQUFBLEVBQXVCLHFCQUFBQSxFQUF1QixzQkFBQUEsSUFBQSxHQUFBQSxFQUErQixTQUFTLFNBQUFza0MsRUFBQTNrQyxHQUFjLElBQUFLLEVBQUFMLElBQUE1YSxFQUFBaWIsRUFBQWhiLEVBQWdCRCxJQUFBNGEsRUFBQTNhLEVBQUFELEVBQUE0YSxFQUFBSyxFQUFBaWtDLEVBQUF0a0MsR0FBbUIsU0FBQTRrQyxFQUFBNWtDLEVBQUFLLEVBQUFqYixHQUFrQixJQUFBNGEsRUFBQUssTUFBQUwsRUFBY0EsSUFBQTVhLEdBQU0sQ0FBRTRhLEVBQUE1YSxHQUFBLEVBQU8sSUFBQUMsRUFBQXNwRCxHQUFBM3VDLEdBQUFoTyxFQUFBM00sRUFBQTJhLEVBQWtCLEdBQUFoTyxFQUFBZ08sSUFBQUssRUFBQUwsRUFBQSxDQUFjLElBQUEzYSxFQUFBRCxFQUFBLENBQVN1L0MsRUFBQTNrQyxHQUFLLE1BQU1oTyxFQUFBbk0sRUFBQXdhLEVBQUFqYixFQUFBaWIsRUFBQXJPLEVBQUFxTyxHQUFBa2tDLEVBQUFsL0MsRUFBQTJNLEdBQXNCcU8sRUFBQWpiLElBQUE0TSxJQUFBeE0sRUFBQTIrQyxFQUFBbnlDLE1BQUF4TSxFQUFBNmEsRUFBQXJPLElBQUEyeUMsRUFBQTNrQyxHQUFBSyxFQUFBaGIsRUFBQTJhLElBQUEzYSxFQUEyQyxPQUFBZ2IsRUFBUyxTQUFBd2tDLEVBQUE3a0MsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBc04sR0FBd0IsSUFBQUssR0FBQSxFQUFTLEdBQUc4a0MsRUFBQXprQyxFQUFBSyxFQUFBamIsRUFBQWliLEdBQUFqYixZQUFpQkEsSUFBQUMsR0FBYSxXQUFBMk0sTUFBQTI4QyxHQUFBdHVDLEdBQUFMLEVBQUFLLEVBQUFqYixHQUE4QkMsRUFBQXNwRCxHQUFBdHVDLElBQUFqYixFQUFBQyxFQUFBMmEsRUFBQUssR0FBQUwsSUFBQWhPLEVBQUFnTyxHQUEwQjVhLE1BQUE0TSxJQUFBeE0sRUFBQTIrQyxFQUFBLytDLE1BQUFJLEVBQUEyK0MsRUFBQW55QyxHQUFBNU0sSUFBQUMsRUFBQWlhLEVBQUFlLEVBQUFmLEVBQUFsYSxFQUFBa2EsRUFBQWphLElBQUFxL0MsRUFBQTFrQyxFQUFBM2EsRUFBQWlhLEdBQUFlLEtBQUEsR0FBQVYsR0FBQXVsQyxFQUFBbGxDLEVBQUFLLEtBQUE0akMsRUFBQTcrQyxFQUFBNE0sR0FBQXN5QyxFQUFBamtDLEdBQUF4WixFQUFBbUwsSUFBQTJOLEdBQUEsRUFBQVUsRUFBQWhiLEVBQUEyTSxFQUFBNU0sRUFBNEdpYixLQUFBLEVBQUFmLEdBQUE2bEMsRUFBQW5sQyxFQUFBSyxHQUFpQixTQUFBeWtDLEVBQUE5a0MsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxHQUFzQixJQUFBc04sR0FBQWUsRUFBQVYsRUFBQSxHQUFBVSxFQUFBVixFQUFBLEdBQUFVLEVBQUFWLEVBQUEsSUFBNkJVLEVBQUFoYixFQUFBLEtBQUFnYixFQUFBaGIsRUFBQTJhLEVBQUF4YSxHQUFBd2EsRUFBQXhhLEVBQUE4WixFQUFBbGEsRUFBQUMsRUFBQTJhLEVBQUE1YSxJQUFBLFlBQUFpYixFQUFBaGIsSUFBQTJNLEVBQUFnTyxFQUFBeFosSUFBQXkrQyxFQUFBamxDLEVBQUEsUUFBQUEsRUFBQXhaLEdBQUEsR0FBQTZaLEVBQUFoYixFQUFBRCxFQUFBLElBQThGLFNBQUEyL0MsRUFBQS9rQyxFQUFBSyxFQUFBamIsR0FBa0IsSUFBQUMsR0FBQSxxQkFBNEJBLEVBQUEsR0FBQWdiLEVBQUFMLEVBQUEzYSxJQUFBLEdBQUFELEVBQUE0YSxFQUFBM2EsRUFBQXkvQyxFQUFBOWtDLEVBQUFLLEVBQUFMLEVBQUEzYSxHQUFBLGVBQUFHLEVBQUE2YSxFQUFBamIsR0FBdUQsU0FBQTQvQyxFQUFBaGxDLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBc0IsSUFBQXNOLEVBQUFyVCxLQUFBc1YsSUFBQWxCLElBQUFMLEVBQUFLLEdBQUFwVSxLQUFBc1YsSUFBQWxCLEVBQUFMLE9BQUFMLEVBQUExVCxLQUFBc1YsSUFBQW5jLEVBQUFpYixFQUFBTCxFQUFBSyxHQUFBcFUsS0FBQXNWLElBQUFuYyxFQUFBNGEsT0FBQW9pQyxFQUFBcHdDLEVBQUEsRUFBc0YzTSxFQUFBMk0sR0FBQSxHQUFBMk4sR0FBQUwsRUFBQUssR0FBQXRhLEVBQUErOEMsR0FBQSxHQUFBOWlDLEtBQUFLLEdBQUFLLEVBQUFMLEVBQUEsSUFBQXRhLEVBQUEyTSxHQUFBcU8sRUFBQVYsRUFBQSxHQUFBdGEsRUFBQSs4QyxHQUFBaDlDLEVBQUF1YSxFQUFBLEdBQUFLLEVBQUFMLEVBQUEsSUFBQXRhLEVBQUEyTSxHQUFBcU8sRUFBQVYsRUFBQSxHQUFBdGEsRUFBQSs4QyxHQUFBaDlDLEVBQUF1YSxFQUFBLEdBQUFLLEVBQUFMLEVBQUEsSUFBQXRhLEVBQUEyTSxHQUFBcU8sRUFBQVYsRUFBQSxHQUFBdGEsRUFBQSs4QyxHQUFBaDlDLEVBQUF1YSxFQUFBLEdBQWdJLFNBQUF1bEMsRUFBQWxsQyxFQUFBSyxHQUFnQixJQUFBamIsRUFBQXVwRCxHQUFBdHVDLEdBQUFmLEVBQUFlLEVBQUFMLEVBQUFvaUMsRUFBQWg5QyxFQUFBNGEsRUFBd0IsR0FBQWhPLEVBQUFzTixFQUFBVSxFQUFBb2lDLEVBQUFwaUMsR0FBQSxDQUFlLEtBQUFMLEVBQUF5aUMsRUFBQS9oQyxFQUFBTCxFQUFBVixFQUFBVSxFQUFBb2lDLEVBQUFwaUMsR0FBQSxTQUErQixHQUFBM2EsRUFBQWlhLEVBQUFVLEVBQUFvaUMsRUFBQXBpQyxJQUFlLEdBQUFWLEVBQUFVLElBQUFvaUMsRUFBQXBpQyxFQUFBLENBQWMsSUFBQTVhLEVBQUE0YSxFQUFBaE8sRUFBQWpOLEVBQUF1YSxFQUFBVSxFQUFBb2lDLEVBQWtCLE1BQUFyOUMsRUFBQSxDQUFTLElBQUFLLElBQUFpYixFQUFBNVcsRUFBQXJFLEVBQUFDLEVBQUF5akIsRUFBQTFqQixFQUFBNE0sRUFBQWhOLEVBQUFJLElBQUFELEVBQUFILEVBQUFELEdBQW1DMEUsRUFBQXRFLEdBQUFzRSxFQUFBckUsRUFBQTRhLEdBQUFoYixFQUFBeUUsRUFBQXRFLFdBQUFDLEVBQUE0YSxJQUFBLEdBQUE3YSxFQUFBd2tELEdBQUF2a0QsRUFBQUQsR0FBQTZNLEVBQUE4VyxFQUFBcmYsRUFBQXRFLEdBQUEsSUFBQTJqQixFQUFBcmYsRUFBQXRFLEtBQUF3a0QsR0FBQXZrRCxFQUFBRCxHQUFBMHBELEdBQUF6cEQsRUFBQUQsSUFBQTJqQixFQUFBL2pCLEdBQUEsS0FBQUMsRUFBQUQsR0FBQUssRUFBQWliLEVBQUFqYixFQUFBaWIsRUFBQXRiLE9BQThHLElBQUFLLE1BQUFMLEVBQUEsU0FBMEIsRUFBQUssRUFBQTRhLEdBQUEsT0FBQTVhLE1BQUFDLEVBQUFELEVBQUE0YSxFQUFBLE9BQThCNWEsRUFBQTRhLEVBQU8ra0MsRUFBQS9rQyxFQUFBbWtDLEVBQUEvQixHQUFBOWlDLFNBQWF4RCxFQUFBc21DLEVBQUEvaEMsR0FBQTdhLEVBQUE4WixFQUFBNmtDLEVBQUEvQixJQUFBL2hDLElBQUFqYixFQUFBaWIsR0FBQSxNQUFpQyxDQUFLLEtBQUFWLEVBQUFMLEVBQUFlLEVBQUFMLEVBQUFvaUMsRUFBQXBpQyxFQUFBVixFQUFBVSxHQUFBLFNBQStCMHVDLEdBQUFydUMsVUFBQSxFQUFBdkUsRUFBQXdELEVBQUFlLEdBQUE3YSxFQUFBMitDLEVBQUEvQixHQUFBOWlDLEdBQWdDLFNBQVMsU0FBQStsQyxFQUFBcmxDLEVBQUFLLEdBQWdCLElBQUFqYixFQUFBdXBELEdBQUF0dUMsR0FBQXlJLEVBQUF6SSxFQUFBTCxFQUFBaGIsRUFBQUksRUFBQTRhLEVBQUF4WixFQUFBc2lCLEVBQUE5SSxFQUFBblosRUFBQTdCLEVBQUFnYixFQUFBbmEsRUFBQWlqQixFQUFBekksRUFBQUwsRUFBQWxaLEVBQUE5QixFQUFBcWIsRUFBQUwsRUFBQS9aLEVBQUEsSUFBQW0vQyxFQUE2RCxHQUFBemxDLEVBQUE5WixFQUFBbWEsSUFBQXhaLEdBQUFtWixFQUFBN1ksRUFBQWtaLElBQUFuWixHQUFBTCxJQUFBSyxHQUFBb0YsS0FBQXNYLElBQUEvYyxFQUFBd1osRUFBQW5hLEVBQUFtYSxHQUFBL1QsS0FBQThLLElBQUFsUSxFQUFBbVosRUFBQWxaLEVBQUFrWixHQUFBLFNBQTZFLEdBQUFoTyxFQUFBeEwsRUFBQUssSUFBVyxLQUFBOFksRUFBQTdZLEVBQUFOLEVBQUFLLEdBQUEsY0FBdUIsS0FBQThZLEVBQUE5WixFQUFBZ0IsRUFBQUwsR0FBQSxTQUE0QixJQUFBbTlDLEVBQUE5RyxFQUFBaUgsRUFBQWorQyxFQUFBbzdCLEVBQUF6NkIsRUFBQTgrQixFQUFBeCtCLEVBQUF5K0IsRUFBQTErQixFQUF3QixHQUFBbUwsRUFBQTh4QyxFQUFBN2lCLEtBQUEwaUIsRUFBQUcsSUFBQTdpQixJQUFBMGlCLEdBQUEzeEMsRUFBQXN6QixFQUFBQyxLQUFBb2UsRUFBQXJlLElBQUFDLElBQUFvZSxHQUFBM3hDLEVBQUE4eEMsRUFBQXhlLEtBQUFxZSxFQUFBRyxJQUFBeGUsSUFBQXFlLElBQUExaUIsSUFBQXNFLElBQUFvZSxHQUFBM3hDLEVBQUFzekIsRUFBQXJFLEdBQUFqdkIsRUFBQWl2QixFQUFBc0UsSUFBQW9lLEVBQUFya0MsRUFBQXdrQyxFQUFBeGUsRUFBQXJFLEdBQUE0YixFQUFBdjlCLEVBQUFnbUIsRUFBQXJFLEVBQUFzRSxHQUFBLEVBQUFvZSxFQUFBOUcsSUFBQThHLEtBQUE5RyxNQUFBNTJDLEVBQUFvYSxFQUFBbGIsRUFBQXcrQyxFQUFBcmUsRUFBQWpsQixFQUFBdzhCLEVBQUE1YixFQUFBNWdCLEtBQUFzakMsRUFBQWhrQyxFQUFBbWtDLEVBQUF4ZSxFQUFBckUsR0FBQTRiLEdBQUFsOUIsRUFBQW1rQyxFQUFBdmUsRUFBQXRFLEdBQUEsRUFBQTBpQixFQUFBOUcsSUFBQThHLEtBQUE5RyxNQUFBNTJDLEVBQUFvYSxFQUFBbGIsRUFBQXcrQyxFQUFBcmUsRUFBQWpsQixFQUFBdzhCLEVBQUF0WCxFQUFBbGxCLElBQUFwYSxFQUFBb2EsR0FBQWlsQixFQUFBamxCLEVBQUE0Z0IsRUFBQTVnQixHQUFBLEVBQUEraEMsRUFBQTBCLEVBQUE3aUIsS0FBQTBpQixFQUFBRyxJQUFBN2lCLElBQUEwaUIsR0FBQXZCLEVBQUE5YyxFQUFBQyxLQUFBb2UsRUFBQXJlLElBQUFDLElBQUFvZSxHQUFBdkIsRUFBQTBCLEVBQUF4ZSxLQUFBcWUsRUFBQUcsSUFBQXhlLElBQUFxZSxJQUFBMWlCLElBQUFzRSxJQUFBb2UsR0FBQXZCLEVBQUE5YyxFQUFBckUsR0FBQW1oQixFQUFBbmhCLEVBQUFzRSxJQUFBb2UsRUFBQTUrQyxFQUFBKytDLEVBQUF4ZSxFQUFBckUsR0FBQTRiLEVBQUE5M0MsRUFBQXVnQyxFQUFBckUsRUFBQXNFLEdBQUEsRUFBQW9lLEVBQUE5RyxJQUFBOEcsS0FBQTlHLE1BQUE1MkMsRUFBQStaLEVBQUE3YSxFQUFBdytDLEVBQUFyZSxFQUFBdGxCLEVBQUE2OEIsRUFBQTViLEVBQUFqaEIsS0FBQTJqQyxFQUFBbDZDLEVBQUFxNkMsRUFBQXhlLEVBQUFyRSxHQUFBNGIsR0FBQXB6QyxFQUFBcTZDLEVBQUF2ZSxFQUFBdEUsR0FBQSxFQUFBMGlCLEVBQUE5RyxJQUFBOEcsS0FBQTlHLE1BQUE1MkMsRUFBQStaLEVBQUE3YSxFQUFBdytDLEVBQUFyZSxFQUFBdGxCLEVBQUE2OEIsRUFBQXRYLEVBQUF2bEIsSUFBQS9aLEVBQUErWixHQUFBc2xCLEVBQUF0bEIsRUFBQWloQixFQUFBamhCLEdBQUEsRUFBQWhPLEVBQUEvTCxFQUFBK1osT0FBQS9aLEVBQUFvYSxFQUFBTCxJQUFBSyxFQUFBcGEsRUFBQStaLFNBQUFoTyxFQUFBOHhDLEVBQUE5eEMsRUFBQXhMLEVBQUFLLEdBQUFMLEVBQUFLLEVBQUFaLE9BQUFvYSxFQUFBeWpDLEVBQUF6akMsRUFBQXBhLEVBQUErWixFQUFBOGpDLEVBQUE5akMsR0FBQTNhLEVBQUFZLEVBQUFPLElBQUFuQixFQUFBWSxFQUFBWSxHQUFBLE9BQUFxK0MsRUFBQWxsQyxFQUFBSyxJQUFBLEVBQTRqQixJQUFBaGIsRUFBQVEsRUFBQW1hLE1BQUEsR0FBQUwsRUFBQTlaLEVBQUFtYSxJQUFBL1osS0FBQVosRUFBQXlCLEVBQUFrWixNQUFBLEdBQUFMLEVBQUE3WSxFQUFBa1osSUFBQS9aLEdBQUEsQ0FBdUQsR0FBQWEsSUFBQWtaLElBQUEsT0FBQWxFLEVBQUFnTixFQUFBekksR0FBQTdhLEVBQUFSLEVBQUFxYixFQUFBeUksR0FBQXpJLEVBQUFta0MsRUFBQW5rQyxHQUFBeUksRUFBQTZsQyxHQUFBdHVDLEdBQUFMLEVBQUE0a0MsRUFBQTVrQyxFQUFBMnVDLEdBQUF0dUMsR0FBQWpiLEdBQUF5L0MsRUFBQTdrQyxFQUFBSyxFQUFBOGpDLEVBQUFyN0IsUUFBQSxNQUFzRixHQUFBampCLElBQUFtYSxJQUFBLENBQVlsRSxFQUFBOVcsRUFBQXFiLEdBQUE3YSxFQUFBc2pCLEVBQUE5VyxFQUFBbXlDLEVBQUFuL0MsSUFBQXdCLEVBQUFwQixFQUFBaWIsRUFBQXhaLEVBQUFMLEVBQUF3WixFQUFBSyxFQUFBTCxFQUFtQyxHQUFHeFosRUFBQWtvRCxHQUFBbG9ELFNBQVFBLEVBQUF3WixFQUFBSyxFQUFBTCxJQUFBblosR0FBbUIsT0FBQUwsRUFBQW1vRCxHQUFBdHVDLEVBQUE3WixHQUFBd1osRUFBQUssRUFBQWpiLElBQUE0YSxFQUFBbWtDLEVBQUFuL0MsS0FBQTQvQyxFQUFBNWtDLEVBQUE1YSxFQUFBLE1BQUF5L0MsRUFBQTdrQyxFQUFBSyxFQUFBcmIsRUFBQUksRUFBQTBqQixFQUFBekksRUFBQWpiLEVBQUFvQixHQUFBLE1BQXlFLFVBQUFtWixFQUFBOVosRUFBQW1hLElBQUEvWixLQUFBeW9ELEdBQUFydUMsVUFBQSxFQUFBdkUsRUFBQWdOLEVBQUF6SSxHQUFBeUksRUFBQTlJLEVBQUFLLEVBQUFMLElBQUFLLEVBQUF5SSxFQUFBOUksV0FBQSxHQUFBTCxFQUFBN1ksRUFBQWtaLElBQUEvWixLQUFBb2EsSUFBQWpiLEVBQUFpYixHQUFBLEVBQUF2RSxFQUFBOVcsRUFBQXFiLEdBQUFyYixFQUFBZ2IsRUFBQUssRUFBQUwsSUFBQUssRUFBQXJiLEVBQUFnYixZQUFBLEVBQW9JLE9BQUFsRSxFQUFBZ04sRUFBQXpJLEdBQUF2RSxFQUFBOVcsRUFBQXFiLEdBQUE3YSxFQUFBMitDLEVBQUFuL0MsR0FBQThqQixLQUFBOUksRUFBQUssRUFBQXBhLEVBQUFvYSxFQUFBeUksRUFBQTlJLElBQUEvWixFQUFBK1osRUFBQThJLEVBQUE5SSxFQUFBb2lDLEVBQUE0SCxHQUFBaHFDLEVBQUFoTyxFQUFBOFcsRUFBQTlJLEdBQUE4SSxJQUFBOUksRUFBQWhiLEdBQUEsU0FBQWlCLEdBQUFPLEVBQUFuQixFQUFBUSxFQUFBUixFQUFBd0IsRUFBQXhCLEVBQUF5QixFQUFBekIsR0FBQXlqQixFQUFBbkosRUFBQSxHQUFBbUosRUFBQW5KLEVBQUEsR0FBQW1KLEVBQUFuSixFQUFBLEtBQUFxbEMsRUFBQWw4QixFQUFBdGlCLEVBQUFYLEVBQUFiLEVBQUEsR0FBQWdnRCxFQUFBbDhCLEVBQUFqaUIsRUFBQUMsRUFBQTlCLEVBQUEsR0FBQTgvQyxFQUFBOWtDLEVBQUE4SSxFQUFBN2lCLEVBQUFqQixHQUFBLEdBQUEwcEQsR0FBQXJ1QyxTQUFBamIsRUFBQWliLEdBQUEsS0FBZ00sU0FBQThrQyxFQUFBbmxDLEVBQUFLLEdBQWdCLFFBQUFqYixFQUFBdXBELEdBQUF0dUMsS0FBaUIsQ0FBRSxLQUFLamIsRUFBQWliLEdBQUlBLEVBQUFqYixJQUFBdXBELEdBQUF2cEQsR0FBYSxJQUFBaWIsTUFBQWpiLEVBQUFpYixFQUFBLFFBQUFBLEVBQUFxdUMsR0FBQXJ1QyxXQUFBLE1BQTRDQSxLQUFBLEVBQU8sSUFBQWhiLEVBQUFpYSxFQUFBZSxFQUFBTCxFQUFBb2lDLEVBQUFoOUMsRUFBQTRhLEVBQWtCLEdBQUEzYSxFQUFBaWEsRUFBQWUsRUFBQUwsSUFBQW9pQyxFQUFBL2hDLEVBQUFMLElBQUEsQ0FBMEIsSUFBQWpiLEVBQUE0cEQsR0FBSnRwRCxFQUFBZ2IsR0FBSTVXLEVBQUFwRSxFQUFBMmEsRUFBQThJLEVBQUEvakIsRUFBQWliLEVBQUFoYixPQUFBLEVBQWlDLEdBQUFnTixFQUFBdkksRUFBQTRXLEVBQUFMLEVBQUE4SSxFQUFBekksRUFBQUwsR0FBQSxDQUFtQixLQUFBTCxFQUFBbFcsRUFBQTRXLEVBQUFMLEVBQUE4SSxFQUFBekksRUFBQUwsRUFBQXZXLEVBQUF1VyxHQUFBLENBQXlCM2EsR0FBQSxFQUFLLE1BQUEyYSxFQUFRMHVDLEdBQUFycEQsR0FBQWdiLEVBQUFoYixFQUFBZ2IsR0FBQSxFQUFBcmIsRUFBQThXLEVBQUFyUyxHQUFBakUsRUFBQXNqQixFQUFBekksRUFBQXJiLEtBQUFLLEVBQUFELEVBQUFDLFFBQXlDLENBQUssS0FBQXNhLEVBQUFtSixFQUFBekksRUFBQUwsRUFBQXZXLEVBQUE0VyxFQUFBTCxFQUFBOEksRUFBQTlJLEdBQUEsQ0FBeUIzYSxHQUFBLEVBQUssTUFBQTJhLEVBQVEzYSxFQUFBZ2IsRUFBQXRiLEVBQUFzYixHQUFBLEVBQUFyYixFQUFBOFcsRUFBQWdOLEdBQUF0akIsRUFBQWlFLEVBQUF1SSxFQUFBOFcsRUFBQXpJLEdBQUFyYixFQUFBcWIsRUFBQWhiLEVBQUFELEVBQUFDLElBQXlDQSxHQUFBLEVBQUssR0FBQUEsSUFBQUQsS0FBQWsvQyxFQUFBbC9DLEdBQUF5QixFQUFBdTdDLEdBQUFoOUMsRUFBQXVwRCxHQUFBdHVDLEdBQUEraEMsRUFBQWg5QyxFQUFBNGEsR0FBQUssRUFBQWpiLElBQUFrL0MsRUFBQWprQyxHQUFBeFosRUFBQXlZLEdBQUFlLEVBQUFxdUMsR0FBQXRwRCxHQUFBa2EsRUFBQWUsRUFBQUwsSUFBQVYsRUFBQVUsSUFBQW9pQyxFQUFBcGlDLEVBQUEsR0FBQVYsRUFBQWUsRUFBQUwsSUFBQW9pQyxFQUFBL2hDLEVBQUFMLEdBQUFLLEVBQUFqYixRQUFBa2EsRUFBQWUsRUFBQUwsU0FBQW9pQyxFQUFBL2hDLEVBQUFMLFFBQUFrbEMsRUFBQWxsQyxFQUFBSyxRQUEySSxHQUFBZ2xDLEVBQUFybEMsRUFBQUssR0FBQSxNQUFxQmYsRUFBQVUsSUFBQW9pQyxFQUFBcGlDLEdBQUFWLEVBQUFlLEVBQUFMLElBQUFvaUMsRUFBQS9oQyxFQUFBTCxJQUFBaWtDLEVBQUE3QixFQUFBOWlDLEdBQUFnbEMsRUFBQWprQyxHQUFBeFosRUFBQXlZLEdBQUFlLEVBQUFxdUMsR0FBQXRwRCxLQUFzRCxTQUFBNm5CLEVBQUFqTixFQUFBSyxHQUFnQkwsSUFBQUssRUFBTSxRQUFBamIsRUFBQWliLEVBQUFqYixFQUFjLE9BQUFBLEVBQUFMLEdBQVcsSUFBQUssU0FBQWliLEVBQUFqYixFQUFBLENBQW1CLElBQUFBLEVBQUE0YSxFQUFBVixFQUFBZSxFQUFBK2hDLEVBQUEsSUFBQXdNLEdBQXFCeE0sRUFBQXBpQyxFQUFBVixFQUFBbGEsRUFBQWliLEVBQVUsSUFBQXRiLEVBQUFLLEVBQUFrYSxFQUFBN1YsRUFBQTFFLEVBQUFpYixFQUFnQixHQUFHdlcsSUFBQXVXLFFBQU0sT0FBQXZXLEVBQUE0VyxJQUFBdGIsRUFBQUssRUFBQUwsRUFBQXNiLEVBQUEraEMsRUFBQTM0QyxFQUFBNFcsSUFBbUMsSUFBQXRiLEVBQUEwRSxFQUFBNFcsRUFBQXlJLEVBQUE2bEMsR0FBQTVwRCxHQUFBcTlDLEVBQUFyOUMsRUFBQWliLEVBQUF2VyxFQUFBcWYsRUFBQTlJLEVBQThCLE9BQUFMLEVBQUF5aUMsRUFBQS9oQyxFQUFBTCxFQUFBVixFQUFBOGlDLEVBQUFwaUMsR0FBQTNhLEdBQUErOEMsRUFBQXI5QyxFQUFBaWIsS0FBQVYsSUFBQWphLEVBQUErOEMsRUFBQS9oQyxFQUFBTCxFQUFBVixLQUFBeEQsRUFBQXNtQyxFQUFBL2hDLEdBQUF0YixFQUFBSyxJQUFBeUIsRUFBQXU3QyxFQUFBaDlDLEdBQUFMLEVBQUFLLEdBQUEsR0FBQUksRUFBQThaLEVBQUFsYSxFQUFBZzlDLEdBQUFuMUIsRUFBQTduQixFQUFBa2EsUUFBZ0csQ0FBSyxJQUFBdGEsRUFBQWdOLEVBQUF2SSxFQUFBNFcsRUFBQUwsRUFBQW9pQyxFQUFBL2hDLEVBQUFMLEdBQUFqYixFQUFBK2pCLFNBQUEsRUFBa0MvakIsRUFBQU0sR0FBQUwsRUFBQUksR0FBQTBqQixFQUFBOWpCLElBQUFELEVBQUFjLEVBQUF5WixFQUFBbGEsRUFBQWliLEVBQUEraEMsRUFBQXB3QyxHQUFBbk0sRUFBQTRELEVBQUE0VyxFQUFBamIsRUFBQWliLEVBQUFmLEVBQUFsYSxHQUFBaWIsRUFBQXJiLEVBQUFJLEVBQUFtL0MsRUFBQXYvQyxFQUFBOGpCLElBQUFzNUIsRUFBQWg5QyxHQUFBTCxFQUFBMC9DLEVBQUFyL0MsRUFBQUwsRUFBQStqQixJQUFBeEosRUFBQW92QyxHQUFBM3BELEdBQUF1YSxFQUFBdmEsRUFBQWliLEVBQUFWLEVBQUF2YSxFQUFBTSxFQUFBcS9DLEVBQUF0QyxFQUFBcjlDLEVBQUF1YSxJQUFBMk4sRUFBQTduQixFQUFBa2EsSUFBQXVsQyxFQUFBei9DLEVBQUFMLEVBQUF1YSxFQUFBbGEsRUFBQWthLEVBQUFsYSxFQUFBLFNBQTBJLE9BQU8sR0FBQUEsRUFBQW8vQyxFQUFBcC9DLEVBQUFMLEdBQUFxOUMsRUFBQXVNLEdBQUF2cEQsR0FBQUwsRUFBQXE5QyxFQUFBcGlDLEdBQUFvaUMsRUFBQXdDLEVBQUE1a0MsRUFBQW9pQyxFQUFBLE9BQUFoOUMsSUFBQUwsRUFBQSxDQUFpRCxJQUFBQSxFQUFBcTlDLElBQUFyOUMsRUFBQUssRUFBQXFFLEVBQUFrbEQsR0FBQXZwRCxHQUFBMGpCLEVBQUExakIsRUFBQTRhLEVBQUFoYixFQUFBeUUsRUFBQXVXLEVBQUE3YSxHQUFBLEVBQXVDMmpCLEVBQUF6SSxFQUFBTCxJQUFBaGIsRUFBQXFiLEVBQUFMLEdBQUFxbEMsRUFBQXJsQyxFQUFBNWEsR0FBQUMsRUFBQXlqQixFQUFBOUksU0FBQXhhLEVBQUEyK0MsRUFBQS9CLEdBQUF0NUIsR0FBQTFqQixFQUFBby9DLEVBQUFwL0MsR0FBQWc5QyxFQUFBdU0sR0FBQXZwRCxHQUFBNGEsRUFBQTRrQyxFQUFBNWtDLEVBQUEydUMsR0FBQXZwRCxHQUFBcUUsR0FBQXRFLEdBQUEsR0FBQUUsRUFBQUwsRUFBQWdiLFNBQUF4YSxFQUFBVCxFQUFBby9DLEVBQUFuL0MsSUFBQUQsRUFBQTYvQyxFQUFBNWtDLEVBQUF2VyxFQUFBLE1BQUF0RSxHQUFBLEdBQUFBLEVBQUEwL0MsRUFBQTdrQyxFQUFBNWEsRUFBQUwsRUFBQUssRUFBQWc5QyxLQUFBLElBQUE5aUMsRUFBQXROLEVBQUFoTixFQUFBZ2IsRUFBQThJLEVBQUE5SSxHQUFBbWtDLEVBQUFuL0MsR0FBQThqQixFQUFBeEosRUFBQXpaLEVBQUFkLEVBQUFLLEVBQUFpYixFQUFBZixHQUFBdWxDLEVBQUE3a0MsRUFBQTVhLEVBQUFrYSxJQUFBbGEsRUFBQWthLEVBQUFsYSxHQUFBLEdBQUFrYSxFQUFBZSxFQUFBdGIsRUFBQUssR0FBQSxFQUFBKy9DLEVBQUFubEMsRUFBQTVhLFNBQXlOeS9DLEVBQUE3a0MsRUFBQTVhLEVBQUFnOUMsRUFBQWg5QyxFQUFBTCxLQUFBLEdBQXVCLFNBQUEwK0MsRUFBQXpqQyxFQUFBSyxHQUFnQixJQUFBamIsRUFBQSxJQUFBd3BELEdBQUF2cEQsRUFBQW1CLEVBQUF3WixFQUFBSyxHQUFzQmhiLEVBQUEyYSxFQUFBSyxFQUFBeXVDLEdBQUF6cEQsRUFBQTJhLElBQUFLLEVBQUFoYixFQUFBZ2IsRUFBQUwsRUFBQUssR0FBQXl1QyxHQUFBenBELEVBQUFnYixFQUFBTCxJQUFBSyxFQUFBTCxJQUFBM2EsRUFBQWdiLEVBQUFMLEVBQUE1YSxFQUFBNGEsRUFBQTNhLEVBQUFELEVBQUFrYSxFQUFBLEVBQUFsYSxFQUFBQyxHQUFBLEVBQUFELEtBQUEsRUFBQUEsRUFBQWc5QyxHQUFBLEVBQUFoOUMsRUFBQWliLEdBQUEsRUFBQWhiLEVBQUEyK0MsRUFBQTMrQyxFQUFBMmEsRUFBQVYsRUFBQWphLEVBQUEyYSxFQUFBNWEsS0FBQTRNLEVBQUEzTSxFQUErSixTQUFBMitDLEVBQUFoa0MsRUFBQUssRUFBQWpiLEdBQWtCLEdBQUdpYixJQUFBamIsUUFBTSxPQUFBaWIsTUFBQUwsRUFBQTVhLEVBQUE0YSxFQUFBSyxNQUFBamIsSUFBbUMsT0FBQTRhLEVBQUEsSUFBQTBqQyxFQUFBdCtDLEVBQUFpYixFQUFBTCxFQUFBSyxLQUFBTCxFQUFBNWEsRUFBQTRhLEVBQUFLLEVBQUFMLElBQXNDLFNBQUEwakMsRUFBQTFqQyxFQUFBSyxFQUFBamIsR0FBa0JpQyxLQUFBZ1osRUFBQUwsR0FBQSxLQUFBM1ksS0FBQTJZLEVBQUFLLEdBQUFoWixVQUFBakMsS0FBQWlDLEtBQTZDLFNBQUF3OEMsSUFBYXg4QyxLQUFBaEMsRUFBQTBwRCxHQUFBMW5ELEtBQUFSLEVBQUFRLEtBQUFnWixFQUFBaFosS0FBQXlVLEVBQUEsS0FBQXpVLEtBQUFvQyxHQUFBLE9BQUFwQyxLQUFBUCxFQUFBLE9BQUFPLEtBQUFiLEdBQUEsRUFBQWEsS0FBQTdCLEVBQUE2QixLQUFBMlksRUFBQTNZLEtBQUEySyxFQUFBM0ssS0FBQWlZLEVBQUEsS0FBQWpZLEtBQUFsQyxHQUFBLEVBQUFrQyxLQUFBakMsRUFBQWlDLEtBQUF4QixFQUFBd0IsS0FBQXRDLEVBQUFzQyxLQUFBeWhCLEVBQUF6aEIsS0FBQXJDLEVBQUFxQyxLQUFBKzZDLEVBQUEsS0FBcUssU0FBQThCLEVBQUFsa0MsRUFBQUssR0FBZ0IsR0FBQUwsRUFBQTNhLElBQUFnYixFQUFBLEtBQWdCTCxFQUFBM2EsSUFBQWdiLEdBQVEsR0FBQUwsRUFBQTNhLEVBQUFnYixFQUFBLE9BQUFMLEVBQUEzYSxHQUFzQixLQUFBMHBELEdBQUE5SixFQUFBamxDLEVBQUEsUUFBQUEsRUFBQTJqQyxFQUFBLE1BQThCLE1BQU0sT0FBQXNCLEVBQUFqbEMsRUFBQSxRQUFBQSxFQUFBL1osU0FBeUIsT0FBQStaLEVBQUEzYSxHQUFpQixPQUFBNC9DLEVBQUFqbEMsRUFBQSxRQUFBQSxFQUFBNjhCLElBQXlCLE1BQU0sT0FBQW9JLEVBQUFqbEMsRUFBQSxRQUFBQSxFQUFBOGpDLEtBQTBCLFNBQUFtQixFQUFBamxDLEVBQUFLLEdBQWdCTCxFQUFBblosR0FBQW1aLEVBQUFuWixFQUFBd1osRUFBQUwsRUFBQTVhLEdBQWdCLFNBQUE0OUMsRUFBQWhqQyxFQUFBSyxHQUFnQmhaLEtBQUFnWixFQUFBTCxHQUFBM1ksVUFBQWhDLEVBQUFnYixHQUFBaFosVUFBQTJZLEVBQUEsS0FBQTNZLEtBQUFqQyxHQUFBLEVBQW9ELFNBQUFvK0MsSUFBYW44QyxLQUFBKzZDLEVBQUEvNkMsVUFBQXRDLEVBQUFzQyxLQUFBaEMsRUFBQWdDLEtBQUEyWSxFQUFBM1ksS0FBQTJLLEVBQUEzSyxLQUFBakMsRUFBQWlDLEtBQUFnWixFQUFBLEtBQUFoWixLQUFBaVksRUFBQSxFQUFvRSxTQUFBNmtDLEVBQUFua0MsR0FBYyxPQUFBQSxFQUFBSyxFQUFBck8sRUFBK0csU0FBQW96QyxFQUFBcGxDLEVBQUFLLEdBQWlCaFosS0FBQTJLLEVBQUFnTyxHQUFBM1ksVUFBQWlZLEVBQUFlLEdBQUFoWixVQUFBaEMsRUFBQWdDLEtBQUFqQyxFQUFBLEtBQUFpQyxLQUFBc1ksR0FBQSxPQUFBdFksS0FBQSs2QyxFQUFBLzZDLEtBQUEyWSxFQUFBM1ksS0FBQWdaLEVBQUEsRUFBdUYsU0FBQThwQyxJQUFjOWlELEtBQUFqQyxLQUFBaUMsS0FBQWhDLEVBQUEsS0FBQWdDLEtBQUEyWSxFQUFBLEVBQUEzWSxLQUFBMkssR0FBQSxFQUFBM0ssS0FBQWdaLEVBQUEsSUFBNGlCLFdBQWNoWixLQUFBaEMsRUFBQStqRCxJQUFBLE9BQUEvaEQsS0FBQTJLLEdBQUEsV0FBQTNLLEtBQUFqQyxHQUFBLEtBQUFpQyxLQUFBMlksRUFBQSxFQUFBM1ksS0FBQWlZLEVBQUEsR0FBQWpZLEtBQUFnWixFQUFBLEVBQUFoWixLQUFBKzZDLEdBQUEsRUFBQS82QyxLQUFBaEMsRUFBQSxNQUFuZ0IsU0FBQTJqRCxHQUFBaHBDLEdBQWVBLEVBQUEzYSxLQUFPLFFBQUFnYixFQUFBLEVBQVlBLEVBQUFMLElBQU1LLElBQUFMLEVBQUEzYSxFQUFBZ2IsS0FBYUwsRUFBQTNhLEVBQUEycEQsS0FBQSxTQUFBaHZDLEdBQXFCLGdCQUFBSyxFQUFBamIsR0FBcUIsT0FBQTRNLEVBQUFnTyxFQUFBSyxHQUFBTCxFQUFBNWEsSUFBQSxNQUExQyxDQUFvRTRhLEVBQUE1YSxJQUFBNGEsRUFBQWhPLEdBQUEsRUFBNGtCLFNBQUFnTyxHQUFlLFFBQUFLLEVBQUFMLElBQWMsR0FBQUssSUFBS0EsRUFBQXNwQyxHQUFBM3BDLEVBQUFLLEdBQVlMLEVBQUFvaUMsR0FBQSxFQUExbkJpSCxDQUFBcnBDLEVBQUFLLEdBQXNCLFNBQUEycEMsR0FBQWhxQyxFQUFBSyxHQUFpQixHQUFBTCxFQUFBaE8sRUFBQSxDQUFRLElBQXNEQSxFQUF0RDVNLEVBQUE0YSxFQUFBSyxFQUFBaGIsSUFBQUQsRUFBQTRhLEVBQTRELE9BQTFDLEVBQUEzYSxFQUFBRCxFQUFBa2EsSUFBQWxhLEVBQUFrYSxHQUFBLEVBQUFsYSxJQUFBZ2tELEdBQUFoa0QsTUFBQWthLEVBQUEsSUFBMEMsSUFBQWxhLEVBQUFpYixFQUFBck8sRUFBQTNNLEdBQUEyTSxFQUFBNU0sRUFBQWliLEVBQUFqYixFQUFBaWIsRUFBQWpiLE1BQUFpYixJQUFBamIsRUFBQTRNLEtBQUFxTyxFQUFBamIsSUFBQTRNLEdBQUEzTSxFQUFBRCxFQUFBQyxLQUFBMk0sRUFBQTVNLEVBQUFnOUMsR0FBQXlNLEdBQUF6cEQsRUFBQUMsR0FBQTJNLEVBQWtGLE9BQUE1TSxFQUFBNGEsUUFBQTVhLEtBQUFpYixJQUFBamIsRUFBQSxHQUErQixTQUFBNmpELEdBQUFqcEMsR0FBZSxPQUFBQSxJQUFBLE9BQUEwcEMsR0FBQTFwQyxFQUFBSyxHQUEwQixJQUFBQSxFQUFBTCxFQUFBNWEsRUFBQTRhLEVBQUEzYSxFQUFBMmEsSUFBQSxJQUFzQixPQUFBQSxFQUFBSyxFQUFBTCxHQUFBaE8sRUFBQW0zQyxHQUFBbnBDLEVBQUFLLE1BQUEsT0FBQXFwQyxHQUFBMXBDLEVBQUFLLEdBQTBDLEtBQUdMLFVBQU0sRUFBQUEsS0FBQSxPQUFBQSxFQUFBNWEsRUFBQTRhLEVBQUEzYSxFQUFBMmEsSUFBQSxLQUFxQyxPQUFBSyxFQUEySCxTQUFBK29DLEdBQUFwcEMsRUFBQUssR0FBaUIsUUFBQWpiLEVBQUErRixNQUFBa1YsR0FBQWhiLEVBQUEsRUFBdUJBLEVBQUEyYSxFQUFBclgsT0FBV3RELElBQUFELEVBQUFDLEdBQUEyYSxFQUFBM2EsR0FBYyxLQUFLQSxFQUFBZ2IsRUFBSWhiLElBQUFELEVBQUFDLEdBQUEsRUFBVyxPQUFBRCxFQUE4RCxTQUFBK2pELEdBQUFucEMsR0FBZSxPQUFBQSxFQUFBaE8sRUFBQWdPLEVBQUEzYSxFQUFBLElBQW1CLFNBQUFxa0QsR0FBQTFwQyxHQUFlLElBQUFLLEVBQUFMLEVBQUEzYSxFQUFBRCxFQUFBNGEsRUFBQWhPLEVBQUEzTSxFQUFBMmEsRUFBQTVhLEVBQUE0TSxFQUFBcU8sRUFBQSxHQUFBZixFQUFBbGEsRUFBQTRNLEdBQW9DLFNBQUFnTyxNQUFBSyxFQUFBLEdBQUFBLEVBQUFMLEtBQUEzYSxFQUFBZ2IsRUFBQSxNQUFBamIsRUFBQTRNLEdBQUEsS0FBQTNNLEVBQUEyTSxHQUFBZ08sRUFBQUssRUFBQUwsRUFBQUssRUFBQXJPLEVBQUEsSUFBQWdPLEtBQUEycEMsR0FBQTNwQyxFQUFBLElBQUFWLEVBQWtGLFNBQUFxcUMsR0FBQTNwQyxFQUFBSyxHQUFpQixRQUFBamIsRUFBQTRhLEVBQUEzYSxJQUFBMmEsRUFBQWhPLEVBQUFzTixFQUFBVSxFQUFBNWEsRUFBQXVhLEVBQUFVLEVBQUEraEMsRUFBQWg5QyxFQUFBdWEsS0FBc0MsQ0FBRSxJQUFBNWEsRUFBQTRhLEdBQUEsRUFBVzVhLEVBQUFpYixLQUFBaE8sRUFBQTNNLEVBQUFELEVBQUFMLEVBQUEsSUFBQU0sRUFBQUQsRUFBQUwsVUFBQSxHQUFvQyxJQUFBMEUsRUFBQXJFLEVBQUFMLEdBQVcsR0FBQUEsRUFBQWliLEtBQUFoTyxFQUFBM00sRUFBQSs4QyxHQUFBLzhDLEVBQUFvRSxJQUFBLENBQXdCckUsRUFBQXVhLEdBQUF5aUMsRUFBQTlpQyxFQUFBOGlDLEdBQUF6aUMsRUFBYyxNQUFNdmEsRUFBQXVhLEdBQUFsVyxFQUFBNlYsRUFBQTdWLEdBQUFrVyxJQUFBNWEsR0FBbUIsU0FBQThwRCxHQUFBN3VDLEVBQUFLLEdBQWlCLFFBQUFqYixFQUFBNGEsRUFBQTNhLElBQUEyYSxFQUFBaE8sRUFBQXNOLEVBQUFVLEVBQUE1YSxFQUFBdWEsRUFBQVUsRUFBQStoQyxFQUFBaDlDLEVBQUF1YSxLQUFzQyxDQUFFLElBQUE1YSxFQUFBNGEsR0FBQSxFQUFBbFcsRUFBQXJFLEVBQUFMLEdBQWtCLE9BQUFBLEdBQUFpTixFQUFBM00sRUFBQW9FLEdBQUFwRSxFQUFBKzhDLElBQUEsQ0FBd0JoOUMsRUFBQXVhLEdBQUF5aUMsRUFBQTlpQyxFQUFBOGlDLEdBQUF6aUMsRUFBYyxNQUFNdmEsRUFBQXVhLEdBQUFsVyxFQUFBNlYsRUFBQTdWLEdBQUFrVyxJQUFBNWEsR0FBbUIsU0FBQTZwRCxLQUFjdm5ELEtBQUEySyxFQUFBM0ssS0FBQTJZLEVBQUEsS0FBQTNZLEtBQUFpWSxFQUFBLEVBQUFqWSxLQUFBakMsRUFBQWlDLEtBQUFnWixFQUFBaFosS0FBQSs2QyxFQUFBLzZDLEtBQUFoQyxHQUFBLEVBQTJELFNBQUFzcEQsR0FBQTN1QyxHQUFlLE9BQUFBLEVBQUFoTyxFQUFBNU0sRUFBQWliLEVBQWUsU0FBQXF1QyxHQUFBMXVDLEdBQWUsT0FBQUEsRUFBQWhPLEVBQUFnTyxFQUFBSyxFQUFlLElBQUE0dUMsR0FBQUgsR0FBQSxNQUFBQyxHQUFBLEdBQXFCRSxHQUFBcEwsRUFBQWw5QyxXQUFBczZCLEVBQUEsV0FBK0JpakIsRUFBQTc4QyxLQUFBMG5ELEtBQVdFLEdBQUExM0MsRUFBQSxTQUFBeUksRUFBQUssR0FBb0IsT0FBQUwsR0FBVSxtQkFBbUIsbUJBQUFLLEdBQXNCLHdFQUFBaFosS0FBQVAsRUFBQXVaLEdBQWtGLE1BQU0sd0JBQUFoWixLQUFBbEMsSUFBQWtiLEdBQW9DLG9CQUFBNGtDLEVBQUE1OUMsS0FBQSxRQUFtQzQ5QyxFQUFBNTlDLEtBQUEsU0FBZTRuRCxHQUFBM3BCLEVBQUEsU0FBQXRsQixHQUFrQixPQUFBQSxHQUFVLHFCQUFxQixtQkFBQTNZLEtBQUFQLEVBQTBCLG1CQUFBTyxLQUFBbEMsRUFBMEIsUUFBQTgvQyxFQUFBNTlDLEtBQUEsUUFBdUIsVUFBUzRuRCxHQUFBaEwsRUFBQSxTQUFBamtDLEVBQUFLLEVBQUFqYixHQUFzQmlDLEtBQUFvQyxFQUFBLEdBQUF1VyxFQUFBM1ksS0FBQW9DLEVBQUEsR0FBQTRXLEVBQUFoWixLQUFBb0MsRUFBQSxHQUFBckUsR0FBb0M2cEQsR0FBQTFwQixFQUFBLFNBQUF2bEIsRUFBQUssR0FBb0IsSUFBQWpiLEVBQUFpYixHQUFBLEtBQWMsT0FBQUwsR0FBVSx3QkFBQTNZLEtBQUErNkMsRUFBQWg5QyxFQUFpQyxNQUFNLHdCQUFBaUMsS0FBQXJDLEVBQUFJLEVBQWlDLE1BQU0sd0JBQUFpQyxLQUFBeWhCLEVBQUExakIsRUFBaUMsTUFBTSx3QkFBQWlDLEtBQUF0QyxFQUFBSyxFQUFpQyxNQUFNLHdCQUFBaUMsS0FBQVIsRUFBQXpCLEVBQWlDLE1BQU0sd0JBQUFpQyxLQUFBN0IsRUFBQUosRUFBaUMsTUFBTSxZQUFBaUMsS0FBQXhCLEVBQUFULEVBQXFCLE1BQU0sUUFBQTYvQyxFQUFBNTlDLEtBQUEsVUFBd0I0bkQsR0FBQTNLLEVBQUEsU0FBQXRrQyxFQUFBSyxHQUFvQixJQUFBamIsR0FBQSxFQUFBQyxHQUFBLE9BQW1CNitDLEVBQUE3OEMsS0FBQSxHQUFVLFFBQUEySyxFQUFBLEVBQVksRUFBQUEsSUFBSUEsRUFBQSxDQUFLLElBQUFzTixFQUFBVSxFQUFBaE8sSUFBVyxNQUFBc04sT0FBQSxNQUFBbGEsR0FBQSxTQUFBa2EsTUFBQSxNQUFBbGEsR0FBQSxHQUFBQyxFQUFBMk0sR0FBQXNOLEVBQXlEbGEsR0FBQTYvQyxFQUFBNTlDLEtBQUEsZ0JBQUFqQyxFQUFBaUMsS0FBQXlVLEdBQUF0VyxFQUFBSixFQUFBb0IsRUFBQWEsS0FBQWdaLEdBQUFqYixFQUFBaWIsSUFBQXZFLEVBQUExVyxPQUFBNE0sR0FBQTVNLEVBQUE0YSxFQUFBM2EsRUFBQWdiLEVBQUFqYixFQUFBNGEsRUFBQUwsRUFBQSxHQUFBdGEsRUFBQSxHQUFBRCxFQUFBNGEsRUFBQUwsRUFBQSxHQUFBdGEsRUFBQSxHQUFBRCxFQUFBNGEsRUFBQUwsRUFBQSxHQUFBdGEsRUFBQSxHQUFBRCxFQUFBa2EsRUFBQSxFQUFBbGEsRUFBQWliLEVBQUFmLEdBQUEsRUFBQWpZLEtBQUF5VSxFQUFBMVcsR0FBa0o2cEQsR0FBQXRMLEVBQUEsU0FBQTNqQyxHQUFrQmtrQyxFQUFBNzhDLEtBQUEwbkQsSUFBQTFuRCxLQUFBaEMsRUFBQSxFQUFBZ0MsS0FBQWdaLEVBQUEsSUFBM3RGLFdBQWFoWixLQUFBakMsRUFBQSxJQUFBZ2dELEVBQUEvOUMsS0FBQTJZLEVBQUEsSUFBQWdqQyxFQUFBMzdDLEtBQUFnWixFQUFBLElBQUFtakMsRUFBQW44QyxLQUFBaEMsRUFBQSxJQUFBbStDLEVBQUFuOEMsS0FBQWdaLElBQUFoWixLQUFBaEMsRUFBQWdDLEtBQUFoQyxFQUFBZ2IsRUFBQWhaLEtBQUFnWixHQUE4c0ZoWixLQUFBakMsRUFBQTRhLEdBQTBDaXZDLEdBQUFocEQsRUFBQSxXQUFpQmkrQyxFQUFBNzhDLEtBQUEsR0FBQUEsS0FBQWhDLEVBQUEsRUFBQWdDLEtBQUF5VSxFQUFBLE1BQStCbXpDLEdBQUFwUyxFQUFBLFdBQWlCcUgsRUFBQTc4QyxLQUFBLEdBQUFBLEtBQUFoQyxFQUFBLEdBQW1CNHBELEdBQUFuTCxFQUFBLFdBQWlCSSxFQUFBNzhDLEtBQUEsR0FBQUEsS0FBQWhDLEVBQUEwcEQsR0FBb0IsSUFBQS91QyxFQUFBM1ksS0FBQW9DLEVBQUEsR0FBQTRXLEVBQUFoWixLQUFBb0MsRUFBQSxHQUFBckUsRUFBQWlDLEtBQUFvQyxFQUFBLEdBQUE2VixHQUFBLEVBQUE4aUMsR0FBQXBpQyxFQUFBSyxFQUFBamIsR0FBdUQsT0FBQTRhLEdBQUEsSUFBQUssR0FBQSxJQUFBamIsRUFBQSxDQUF3QixRQUFBaWIsSUFBQSxxQkFBQXRiLEdBQUEsbUJBQUFLLEtBQUFxRSxLQUFBNlYsRUFBQWpZLEtBQUFnWixFQUFBamIsRUFBQTRhLEVBQUFWLEVBQUF0TixFQUFrRmdPLElBQUFWLEVBQU1VLElBQUFoTyxFQUFBLFFBQUE3TSxFQUFBLEVBQWtCLEVBQUFBLElBQUlBLEVBQUEsQ0FBSyxJQUFBcUIsRUFBQXdaLEVBQUFMLEVBQUF4YSxHQUFhcUIsRUFBQXpCLEVBQUFJLEtBQUFKLEVBQUFJLEdBQUFxQixFQUFBaUQsRUFBQXRFLEdBQUE2YSxHQUFBeFosRUFBQTZaLEVBQUFsYixLQUFBa2IsRUFBQWxiLEdBQUFxQixFQUFBcEIsRUFBQUQsR0FBQTZhLEdBQWdELEdBQUFBLEVBQUEsRUFBQUssRUFBQSxHQUFBdGIsRUFBQSxHQUFBc2IsRUFBQSxHQUFBdGIsRUFBQSxLQUFBaWIsRUFBQSxHQUFBSyxFQUFBLEdBQUF0YixFQUFBLEdBQUFzYixFQUFBTCxHQUFBamIsRUFBQWliLE9BQUEsR0FBQWpiLEVBQUFpYixJQUFBSyxFQUFBTCxHQUFBb2lDLEVBQUEsS0FBQUEsRUFBQSxLQUFBQSxFQUFBLFNBQTZGLENBQUssSUFBQS9oQyxFQUFBLEVBQUF0YixFQUFBMEUsRUFBQXVXLEdBQUE1YSxJQUFBNGEsR0FBQXZXLEdBQUEsT0FBQTFFLEtBQUE0YSxFQUFBLEdBQUF2YSxFQUFBdWEsRUFBQSxHQUFBNWEsRUFBQTRhLEVBQUEsR0FBQXZhLEVBQUF1YSxFQUFBLEdBQUE1YSxFQUFBNGEsRUFBQSxHQUFBdmEsRUFBQXVhLEVBQUEsSUFBQXhhLEdBQUEsT0FBQTZhLEVBQUFWLEVBQUF0TixFQUE4RmdPLElBQUFWLEVBQU1VLElBQUFoTyxFQUFBN00sRUFBQSxHQUFBNmEsRUFBQUwsRUFBQSxHQUFBdmEsRUFBQXVhLEVBQUEsR0FBQXhhLEVBQUEsR0FBQTZhLEVBQUFMLEVBQUEsR0FBQXZhLEVBQUF1YSxFQUFBLEdBQUF4YSxFQUFBLEdBQUE2YSxFQUFBTCxFQUFBLEdBQUF2YSxFQUFBdWEsRUFBQSxHQUFBbFcsRUFBQSxHQUFBMUUsRUFBQSxHQUFBSSxFQUFBLEdBQUFKLEVBQUEsR0FBQUksRUFBQSxHQUFBc0UsRUFBQSxHQUFBMUUsRUFBQSxHQUFBSSxFQUFBLEdBQUFKLEVBQUEsR0FBQUksRUFBQSxHQUFBc0UsRUFBQSxHQUFBMUUsRUFBQSxHQUFBSSxFQUFBLEdBQUFKLEVBQUEsR0FBQUksRUFBQSxJQUFBcUIsRUFBQWlELEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLElBQUE0VyxNQUFBN1osRUFBQTQ3QyxFQUFBLEdBQUEzNEMsRUFBQSxHQUFBMjRDLEVBQUEsR0FBQTM0QyxFQUFBLEdBQUEyNEMsRUFBQSxHQUFBMzRDLEVBQUEsSUFBbU4sR0FBQTRXLElBQUEraEMsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsS0FBQUEsRUFBQTdjLEVBQUF4Z0MsSUFBQSxHQUFtQ3VhLEdBQUEsRUFBSyxJQUFBN1YsRUFBQTg3QixFQUFBNmMsR0FBQXBpQyxFQUFBM1ksS0FBQWdaLEVBQUFqYixFQUFBaWIsR0FBQTVXLEVBQUEsS0FBQXJFLEdBQUFxRSxFQUFBLEtBQUFBLEVBQUEsRUFBQTI0QyxFQUFBMzRDLEdBQUEsS0FBQTI0QyxFQUFBcGlDLEVBQUFoTyxFQUE4RG93QyxJQUFBcGlDLEVBQU1vaUMsSUFBQXB3QyxFQUFBb3dDLEVBQUEvaEMsRUFBQStoQyxFQUFBemlDLEVBQUFVLEdBQUEraEMsRUFBQXBpQyxFQUFBdlcsRUFBQTI0QyxFQUFBemlDLEVBQUF2YSxHQUE4QixHQUFBa2EsRUFBQSxDQUFNLElBQUE4aUMsRUFBQSxFQUFBOWlDLEVBQUFqWSxLQUFBZ1osRUFBQUwsSUFBQVYsRUFBQWUsRUFBeUJMLElBQUFWLEVBQU1VLElBQUFLLEVBQUEsU0FBQUEsRUFBQUwsS0FBQVYsR0FBQSxHQUE0QjhpQyxJQUFBL2hDLEVBQUFMLEVBQUFLLE1BQUFMLEVBQUFLLE1BQUFMLElBQUFLLElBQUFMLEtBQUFLLElBQUFyTyxRQUF5Q3FPLElBQUFMLEtBQWUsS0FBQW9pQyxFQUFBLElBQUFBLEVBQUEvNkMsS0FBQWdaLEVBQUFqYixFQUFBa2EsRUFBQThpQyxFQUFBcHdDLEVBQTRCc04sSUFBQThpQyxFQUFNOWlDLElBQUF0TixFQUFBc04sRUFBQVUsR0FBQVYsRUFBQVUsRUFBZSxJQUFBM1ksS0FBQWIsR0FBQSxFQUFBNDdDLEVBQUEvNkMsS0FBQWdaLElBQUFMLEVBQUFvaUMsSUFBK0JwaUMsSUFBQW9pQyxFQUFNcGlDLEVBQUFWLElBQUFVLEVBQUFvaUMsRUFBQS9oQyxFQUFBTCxFQUFBaE8sRUFBQTNNLEVBQUEyYSxNQUFBSyxFQUFBTCxNQUFBaE8sTUFBQWdPLElBQUEra0MsRUFBQTE5QyxLQUFBZ1osRUFBQUwsR0FBQW5aLEVBQUFtWixHQUFBSyxHQUFBTCxFQUFBSyxHQUFBck8sR0FBQXFPLEVBQUFyTyxJQUFBZ08sSUFBQUssSUFBQUwsSUFBQUssSUFBQWYsR0FBQWUsSUFBQWYsRUFBQWUsSUFBQWYsSUFBQThpQyxHQUFBdjdDLEVBQUF3WixJQUFBTCxJQUFBVixHQUFBVSxJQUFBVixFQUFBZSxJQUFBZixJQUFBOGlDLEdBQUF2N0MsRUFBQW1aLElBQW9KLElBQUEzWSxLQUFBMkssRUFBQW93QyxFQUFBLElBQUErSCxFQUFBN3FDLEVBQUFqWSxLQUFBZ1osRUFBQWpiLEVBQUE0YSxFQUFBVixFQUFBdE4sRUFBcUNnTyxJQUFBVixFQUFNVSxJQUFBaE8sRUFBQWdPLEVBQUFvaUMsRUFBQTRILEdBQUE1SCxFQUFBcGlDLEdBQWtCLElBQUFncEMsR0FBQTVHLEdBQUEvNkMsS0FBQWlZLEVBQUEsSUFBdjFKLFNBQUFVLEdBQWMzWSxLQUFBMlksRUFBQSxJQUFBMGpDLEVBQUFyOEMsS0FBQWdaLEVBQUFMLEVBQUEzWSxLQUFBakMsRUFBQW1TLEVBQXkwSixDQUFBbFEsTUFBQW84QyxFQUFBcDhDLE1BQUF5bkQsSUFBQXJMLEVBQUFwOEMsS0FBQXluRCxJQUFvRCxRQUFBMU0sRUFBQTZHLEdBQUE1aEQsS0FBQTJLLEtBQXNCLENBQUUsT0FBTSxDQUFFZ08sRUFBQSxHQUFBQSxFQUFBM1ksS0FBQTJLLEVBQUEsSUFBQWdPLElBQUFWLEVBQUE2cEMsR0FBQW5wQyxFQUFBSyxRQUFnQyxHQUFBZixFQUFBVSxFQUFBNWEsRUFBQTRhLEVBQUEzYSxFQUFBMmEsSUFBQSxRQUFBQSxFQUFBSyxFQUFBTCxNQUFBbXBDLEdBQUFucEMsRUFBQUssR0FBQXJPLEVBQUFnTyxFQUFBVixJQUFBLENBQXlEQSxFQUFBVSxFQUFJLE1BQUFBLEVBQVEsVUFBQVYsSUFBQWphLEVBQUFpYSxFQUFBOGlDLEdBQUEsTUFBMkI5aUMsRUFBQTJwQyxHQUFBNWhELEtBQUEySyxHQUFBK3lDLEVBQUExOUMsS0FBQSs2QyxFQUFBaDlDLEVBQUFrYSxFQUFBbGEsR0FBNkI2bkIsRUFBQTVsQixLQUFBKzZDLEdBQVUsSUFBQS82QyxLQUFBMlksRUFBQTNZLEtBQUFpWSxFQUFBVSxJQUFBSyxFQUFBTCxJQUFBb2lDLEVBQUEsRUFBZ0MsUUFBQTlpQyxFQUFBalksS0FBQWlZLEVBQUFVLElBQUFLLElBQXdCZixFQUFBOGlDLE9BQUFrQyxFQUFBaGxDLEdBQWUsSUFBQWpZLEtBQUFpWSxFQUFBLE1BQUE4aUMsRUFBQS82QyxLQUFBMkssR0FBQXFPLEVBQUEsS0FBQStoQyxFQUFBLzhDLEVBQUEsS0FBQWdDLEtBQUEySyxFQUFBb3dDLEVBQUFoOUMsRUFBQSxLQUFBZzlDLEVBQUEvNkMsS0FBQWdaLEVBQUFMLEVBQUFvaUMsRUFBQXBpQyxFQUFBSyxFQUE0RUwsSUFBQW9pQyxFQUFBcGlDLEVBQVFBLEVBQUFWLElBQUFVLEVBQUFLLEdBQUFMLE9BQUFoTyxNQUFBZ08sSUFBQWlrQyxFQUFBamtDLEVBQUE1YSxFQUFBNGEsR0FBQW5aLEVBQUFtWixJQUEyQyxJQUFBM1ksS0FBQWIsRUFBQSxDQUFZLEdBQUE0N0MsRUFBQS82QyxLQUFBZ1osRUFBQWhaLEtBQUFsQyxFQUFBLElBQUE2YSxFQUFBb2lDLEVBQUEvaEMsRUFBQStoQyxFQUErQnBpQyxJQUFBb2lDLEVBQUEvaEMsRUFBUUwsRUFBQVYsSUFBQVUsRUFBQW9pQyxFQUFBcGlDLEVBQUFLLEVBQUFoYixFQUFBRCxJQUFBNGEsRUFBQTNhLEVBQUFELEVBQUE0YSxFQUFBVixFQUFBVSxFQUFBM2EsRUFBQUQsRUFBQSxLQUFBeUIsRUFBQW1aLFFBQThDLElBQUFBLEVBQUFvaUMsRUFBQXBpQyxFQUFBSyxFQUFpQkwsSUFBQW9pQyxFQUFBcGlDLEVBQVFBLEVBQUFWLEVBQUEsR0FBQUEsRUFBQVUsRUFBQUssRUFBQUwsRUFBQTVhLEVBQUEsQ0FBa0IsSUFBQTRhLE1BQVVoTyxFQUFBZ08sRUFBQUssRUFBQUwsT0FBYUEsSUFBQTVhLEVBQUFpYixHQUFTLEtBQUtyTyxFQUFBZ08sTUFBQUssRUFBQUwsR0FBYUEsSUFBQWhPLEdBQU8sSUFBQXFPLEVBQUFMLEVBQUE1YSxFQUFBaWIsRUFBQWpiLE9BQUEsRUFBcUI0YSxFQUFBaE8sSUFBQXFPLEdBQVEsR0FBQXJPLEVBQUFnTyxFQUFBSyxFQUFBTCxFQUFBSyxFQUFBTCxHQUFBLENBQWtCLEtBQUtLLEVBQUFyTyxJQUFBZ08sSUFBQThJLEVBQUF6SSxFQUFBck8sSUFBQSxHQUFBMk4sRUFBQVUsRUFBQUwsRUFBQUssSUFBQUwsRUFBQUssRUFBQXJPLEVBQUFxTyxFQUFBTCxLQUEyQzVhLEVBQUFTLEVBQUF3YSxFQUFBck8sRUFBQXFPLEtBQUFqYixFQUFBaWIsRUFBa0JBLElBQUFqYixFQUFBaWIsTUFBUSxDQUFLLEtBQUtBLEVBQUFyTyxJQUFBZ08sSUFBQWhiLEVBQUFnYixFQUFBNWEsRUFBQWliLElBQUEsR0FBQVYsRUFBQUssRUFBQUssRUFBQUwsUUFBQTVhLEVBQUFpYixFQUFBTCxLQUE2QzVhLEVBQUFTLEVBQUFtYSxJQUFBNWEsRUFBQWliLEdBQUFMLEVBQUE1YSxFQUFBaWIsRUFBb0JMLElBQUFoTyxFQUFNLEtBQUtxTyxFQUFBck8sTUFBQWdPLEdBQVU1YSxFQUFBUyxFQUFBd2EsRUFBQXJPLEVBQUFxTyxLQUFBamIsRUFBQWliLEVBQWtCLEdBQUFoWixLQUFBKzZDLEdBQUEvNkMsS0FBQXRDLEdBQUFzQyxLQUFBeWhCLEdBQUF6aEIsS0FBQXJDLEVBQUEsR0FBQXFDLEtBQUFsQyxHQUE2QyxJQUFBaTlDLEVBQUEvNkMsS0FBQWdaLEVBQUFmLEVBQUE4aUMsRUFBQXBpQyxFQUFBSyxFQUFxQmYsSUFBQThpQyxFQUFBcGlDLEVBQVFWLElBQUFlLEVBQUEsR0FBQWYsRUFBQWxhLEVBQUEsQ0FBY2lDLEtBQUErNkMsR0FBQS82QyxLQUFBKzZDLEVBQUEsRUFBQS82QyxLQUFBakMsR0FBQTRhLEVBQUFWLEVBQUFVLEVBQStCLEdBQUczWSxLQUFBeWhCLEdBQUF6aEIsS0FBQXloQixFQUFBOUksSUFBQTNhLEVBQUFnQyxLQUFBakMsR0FBQTRhLElBQUFoTyxRQUFtQ2dPLElBQUFWLEVBQUFVLEdBQWUzWSxLQUFBdEMsR0FBQXNDLEtBQUF0QyxFQUFBc0MsS0FBQWpDLFFBQXdCLENBQUssSUFBQWc5QyxFQUFBLzZDLEtBQUFnWixFQUFBZixJQUFBalksS0FBQXJDLEVBQUFnYixHQUFBLEVBQUFLLEdBQUEsRUFBQWpiLEVBQUFnOUMsRUFBQXBpQyxFQUFBM2EsRUFBMENELElBQUFnOUMsRUFBQXBpQyxFQUFRNWEsSUFBQUMsRUFBQSxHQUFBRCxJQUFBLENBQWM0YSxJQUFBM1ksS0FBQSs2QyxHQUFBLzZDLEtBQUErNkMsRUFBQSxFQUFBLzZDLEtBQUFqQyxHQUFBNGEsR0FBQSxHQUFBdlcsRUFBQXJFLEVBQUE0YSxFQUF5QyxHQUFHVixJQUFBdmEsRUFBQTBFLEVBQUE0VyxFQUFBaGIsRUFBQUQsRUFBQSxJQUFBaWIsSUFBQXRiLElBQUFzYixFQUFBdGIsRUFBQXNDLEtBQUFyQyxHQUFBcUMsS0FBQXJDLElBQUFxYixFQUFBaFosS0FBQWpDLEtBQUFpQyxLQUFBeWhCLEdBQUF6aEIsS0FBQXloQixFQUFBcmYsRUFBQXVXLEVBQUEzYSxFQUFBZ0MsS0FBQWpDLEdBQUFxRSxJQUFBdUksUUFBOEZ2SSxJQUFBckUsRUFBQTRhLEdBQWVBLEdBQUEzWSxLQUFBdEMsR0FBQXNDLEtBQUF0QyxFQUFBc0MsS0FBQWpDLEdBQTBCLEdBQUFpQyxLQUFBeEIsRUFBQSxDQUFXLElBQUF1OEMsRUFBQS82QyxLQUFBZ1osRUFBQUwsRUFBQW9pQyxFQUFBcGlDLEVBQUFLLEVBQXFCTCxJQUFBb2lDLEVBQUFwaUMsRUFBUUEsRUFBQVYsRUFBQSxHQUFBQSxFQUFBVSxFQUFBSyxHQUFBTCxFQUFBNWEsRUFBQSxDQUFtQmliLEVBQUFMLElBQUE1YSxFQUFBaWIsRUFBQXJPLEVBQUF2SSxPQUFBLEVBQXFCLEdBQUdyRSxHQUFBcUUsRUFBQXJFLEdBQUE0TSxFQUFBdkksRUFBQXBFLEVBQUEsWUFBQW9FLEVBQUE0VyxFQUFBaGIsSUFBQW9FLEVBQUFyRSxJQUFBcUUsRUFBQXczQixFQUFBeDNCLEVBQUF1VyxFQUFBLE9BQUF2VyxFQUFBdVcsRUFBQTVhLEVBQUFxRSxFQUFBckUsRUFBQWEsRUFBQXdELEVBQUEwNkMsRUFBQTE2QyxNQUFBMUUsRUFBQTBFLEVBQUE0VyxHQUFBamIsSUFBQUwsRUFBQWs4QixFQUFBbDhCLEVBQUFpYixFQUFBLE9BQUFqYixFQUFBaWIsRUFBQTVhLEVBQUFMLEVBQUFLLEVBQUFhLEVBQUFsQixFQUFBby9DLEVBQUFwL0MsS0FBQSsrQyxFQUFBcjZDLFVBQWtJQSxJQUFBNFcsR0FBYUEsRUFBQUwsRUFBQTNhLEdBQUEyYSxJQUFBSyxHQUFBaGIsRUFBQWdiLE1BQUFMLEVBQXdCLE9BQUEzWSxLQUFBeEIsRUFBQXdCLEtBQUFnWixRQUFBaFosS0FBQWpDLEVBQUFpQyxLQUFBZ1osRUFBQSxPQUFnRGhaLEtBQUFnWixFQUFBaFosS0FBQWpDLEVBQUEsTUFBbUJpQyxLQUFBNm5ELFNBQWVDLGNBQUF0TCxFQUFBdUwsYUFBNkJDLHFCQUFBLE9BQUFDLHlCQUFBLE9BQUFDLDBCQUFBLE9BQUFDLDBCQUFBLE9BQUFDLDZCQUFBLFFBQWtLQyxlQUFnQkMsYUFBQSxFQUFBQyxhQUFBLEVBQUFDLGtCQUFBLEVBQUFDLGdCQUFBLEdBQW9FQyxXQUFZQywrQkFBQSxPQUFBQyw2QkFBQSxPQUFBQywrQkFBQSxPQUFBQyw2QkFBQSxPQUFBQyx5QkFBQSxPQUFBQywrQkFBQSxRQUEwTkMsU0FBVUMsY0FBQSxPQUFBQyxtQkFBQSxPQUFBQyxzQkFBQSxPQUFBQyx1QkFBQSxPQUFBQyxpQkFBQSxPQUFBQyxrQkFBQSxPQUFBQyxlQUFBLE9BQUFDLGdCQUFBLE9BQUFDLGFBQUEsT0FBQUMsZUFBQSxPQUFBQyxtQkFBQSxPQUFBQyxpQkFBQSxPQUFBQyxvQkFBQSxPQUFBQyxxQkFBQSxPQUFBQyxrQkFBQSxPQUFBQyxvQkFBQSxPQUFBQyx3QkFBQSxPQUFBQyxzQkFBQSxTQUE0YzNOLEVBQUFsOUMsVUFBQThxRCxjQUFBNU4sRUFBQWw5QyxVQUFBczZCLEVBQUE0aUIsRUFBQWw5QyxVQUFBK3FELGdCQUFBN04sRUFBQWw5QyxVQUFBNFEsRUFBQXNzQyxFQUFBbDlDLFVBQUFnckQsbUJBQUE5TixFQUFBbDlDLFVBQUEyK0IsRUFBQXVlLEVBQUFsOUMsVUFBQWlyRCxjQUFBL04sRUFBQWw5QyxVQUFBczlDLEVBQUFKLEVBQUFsOUMsVUFBQWtyRCxnQkFBQWhPLEVBQUFsOUMsVUFBQTQrQixFQUFBc2UsRUFBQWw5QyxVQUFBbXJELGNBQUFqTyxFQUFBbDlDLFVBQUEyOUMsRUFBQVQsRUFBQWw5QyxVQUFBb3JELG9CQUFBbE8sRUFBQWw5QyxVQUFBZzlDLEVBQUFFLEVBQUFsOUMsVUFBQXFyRCxvQkFBQW5PLEVBQUFsOUMsVUFBQVYsRUFBQTQ5QyxFQUFBbDlDLFVBQUFzckQsa0JBQUFwTyxFQUFBbDlDLFVBQUFrMkMsRUFBQWdILEVBQUFsOUMsVUFBQXVyRCxrQkFBQXJPLEVBQUFsOUMsVUFBQW05QyxPQUFBLElBQUF6akMsTUFBQXhiLFFBQUF3QyxLQUFBNm5ELGNBQXNkaUQsSUFBQSxTQUFBOXhDLEVBQUFqYixFQUFBQyxJQUFzQixTQUFBMk0sSUFBYSxTQUFBcU8sRUFBQXJPLEdBQWVBLEVBQUEsaUJBQUEzTSxRQUFBLElBQUFELEVBQUFDLEVBQUFnYixFQUFBK3hDLGFBQWYsQ0FBaUgvcUQsS0FBQSxTQUFBMlksR0FBa0IsYUFBYSxTQUFBNWEsSUFBYWlDLEtBQUFnckQsTUFBQSxJQUFBQyxZQUFBLElBQUFqckQsS0FBQWtyRCxNQUFBLElBQUFELFlBQUEsS0FBK0QsU0FBQWp0RCxFQUFBMmEsRUFBQUssR0FBZ0JoWixLQUFBdzJDLE9BQUE3OUIsRUFBQTNZLEtBQUFtckQsWUFBQSxFQUFBbnJELEtBQUFvckQsSUFBQSxFQUFBcHJELEtBQUFxckQsU0FBQSxFQUFBcnJELEtBQUErekIsS0FBQS9hLEVBQUFoWixLQUFBc3JELFFBQUEsRUFBQXRyRCxLQUFBdXJELE1BQUEsSUFBQXh0RCxFQUFBaUMsS0FBQXdyRCxNQUFBLElBQUF6dEQsRUFBeUgsU0FBQWthLEVBQUFVLEVBQUFLLEVBQUFqYixFQUFBQyxHQUFvQixJQUFBMk0sRUFBQXNOLEVBQVEsSUFBQXROLEVBQUEsRUFBUUEsRUFBQTVNLElBQUk0TSxFQUFBZ08sRUFBQWhPLEdBQUEsRUFBVyxJQUFBQSxFQUFBLEVBQVFBLEVBQUEsR0FBQTVNLElBQU80TSxFQUFBZ08sRUFBQWhPLEVBQUE1TSxHQUFBNE0sRUFBQTVNLEVBQUEsRUFBaUIsSUFBQWthLEVBQUFqYSxFQUFBMk0sRUFBQSxFQUFZQSxFQUFBLEtBQUtBLEVBQUFxTyxFQUFBck8sR0FBQXNOLEtBQUEsR0FBQVUsRUFBQWhPLEdBQThVLFNBQUFvd0MsRUFBQXBpQyxFQUFBSyxFQUFBamIsRUFBQUMsR0FBb0IsSUFBQTJNLEVBQUFzTixFQUFRLElBQUF0TixFQUFBLEVBQVFBLEVBQUEsS0FBS0EsRUFBQWdPLEVBQUFxeUMsTUFBQXJnRCxHQUFBLEVBQWlCLElBQUFBLEVBQUEsRUFBUUEsRUFBQTNNLElBQUkyTSxFQUFBZ08sRUFBQXF5QyxNQUFBaHlDLEVBQUFqYixFQUFBNE0sTUFBc0IsSUFBQWdPLEVBQUFxeUMsTUFBQSxLQUFBL3lDLEVBQUEsRUFBQXROLEVBQUEsRUFBeUJBLEVBQUEsS0FBS0EsRUFBQThnRCxHQUFBOWdELEdBQUFzTixLQUFBVSxFQUFBcXlDLE1BQUFyZ0QsR0FBMEIsSUFBQUEsRUFBQSxFQUFRQSxFQUFBM00sSUFBSTJNLEVBQUFxTyxFQUFBamIsRUFBQTRNLEtBQUFnTyxFQUFBdXlDLE1BQUFPLEdBQUF6eUMsRUFBQWpiLEVBQUE0TSxVQUFzQyxTQUFBak4sRUFBQWliLEdBQWNBLEVBQUEweUMsYUFBQTF5QyxFQUFBeXlDLElBQUF6eUMsRUFBQTY5QixPQUFBNzlCLEVBQUF3eUMsZUFBQXh5QyxFQUFBMHlDLFNBQUEsR0FBNkQsSUFBQXJ5QyxFQUFBLEVBQUFMLEVBQUF5eUMsSUFBYyxPQUFBenlDLEVBQUF5eUMsT0FBQSxFQUFBcHlDLEVBQW9CLFNBQUE1VyxFQUFBdVcsRUFBQUssRUFBQWpiLEdBQWtCLElBQUFpYixFQUFBLE9BQUFqYixFQUFlLEtBQUs0YSxFQUFBMHlDLFNBQUEsSUFBYzF5QyxFQUFBeXlDLEtBQUF6eUMsRUFBQTY5QixPQUFBNzlCLEVBQUF3eUMsZ0JBQUF4eUMsRUFBQTB5QyxTQUFBMXlDLEVBQUEweUMsVUFBQSxFQUE0RCxJQUFBcnRELEVBQUEyYSxFQUFBeXlDLElBQUEsV0FBQXB5QyxFQUF5QixPQUFBTCxFQUFBeXlDLE9BQUFweUMsRUFBQUwsRUFBQTB5QyxVQUFBcnlDLEVBQUFoYixFQUFBRCxFQUFvQyxTQUFBMGpCLEVBQUE5SSxFQUFBSyxHQUFnQixLQUFLTCxFQUFBMHlDLFNBQUEsSUFBYzF5QyxFQUFBeXlDLEtBQUF6eUMsRUFBQTY5QixPQUFBNzlCLEVBQUF3eUMsZ0JBQUF4eUMsRUFBQTB5QyxTQUFBMXlDLEVBQUEweUMsVUFBQSxFQUE0RCxJQUFBdHRELEVBQUEsRUFBQUMsRUFBQSxFQUFBMk0sRUFBQSxFQUFBc04sRUFBQVUsRUFBQXl5QyxJQUF3QixHQUFHcHRELEVBQUEsRUFBQUEsR0FBQSxFQUFBaWEsUUFBQSxJQUFBdE4sRUFBQTVNLEdBQUFpYixFQUFBZ3lDLE1BQUFyZ0QsR0FBQTNNLEdBQUFnYixFQUFBZ3lDLE1BQUFyZ0QsU0FBbUQzTSxHQUFBLEdBQVksT0FBQTJhLEVBQUF5eUMsSUFBQW56QyxFQUFBVSxFQUFBMHlDLFVBQUExZ0QsRUFBQXFPLEVBQUFreUMsTUFBQW50RCxFQUFBQyxHQUEwQyxTQUFBTCxFQUFBZ2IsRUFBQUssRUFBQWpiLEdBQWtCLElBQUFDLEVBQUEyTSxFQUFBc04sRUFBQUssRUFBQTVhLEVBQUFDLEVBQWdCLElBQUFLLEVBQUFvRSxFQUFBdVcsRUFBQSxPQUFBaE8sRUFBQXZJLEVBQUF1VyxFQUFBLEtBQUFWLEVBQUE3VixFQUFBdVcsRUFBQSxLQUFBTCxFQUFBLEVBQTJDQSxFQUFBLEtBQUtBLEVBQUFvekMsR0FBQXB6QyxHQUFBLEVBQVksSUFBQUEsRUFBQSxFQUFRQSxFQUFBTCxJQUFJSyxFQUFBLENBQUssSUFBQXhhLEVBQUFzRSxFQUFBdVcsRUFBQSxLQUFlK3lDLEdBQUFDLEdBQUFyekMsSUFBQXhhLEVBQVksSUFBQWk5QyxFQUFBNlEsR0FBQUYsR0FBQSxNQUFBaHVELEVBQUEsRUFBc0JBLEVBQUFNLEVBQUEyTSxHQUFNLENBQUUsSUFBQXhMLEVBQUFzaUIsRUFBQTlJLEVBQUFpekMsSUFBYyxPQUFBenNELEdBQVUsWUFBQWhCLEVBQUF1dEQsR0FBQWh1RCxFQUFBLEdBQXNCLElBQUFDLEVBQUF5RSxFQUFBdVcsRUFBQSxLQUFlaGIsSUFBRUEsRUFBQSt0RCxHQUFBaHVELEtBQUFTLEVBQWMsTUFBTSxZQUFBUixFQUFBeUUsRUFBQXVXLEVBQUEsS0FBdUJoYixJQUFFQSxFQUFBK3RELEdBQUFodUQsS0FBQSxFQUFjLE1BQU0sWUFBQUMsRUFBQXlFLEVBQUF1VyxFQUFBLE1BQXdCaGIsSUFBRUEsRUFBQSt0RCxHQUFBaHVELEtBQUEsRUFBYyxNQUFNLFFBQUFndUQsR0FBQWh1RCxLQUFBeUIsR0FBbUI0N0MsRUFBQS9oQyxFQUFBMHlDLEdBQUEsRUFBQTF0RCxHQUFBKzhDLEVBQUFoOUMsRUFBQTJ0RCxHQUFBMXRELEVBQUEyTSxHQUF3QixTQUFBN00sRUFBQTZhLEVBQUFLLEVBQUFqYixHQUFrQixPQUFNLENBQUUsSUFBc0U0TSxFQUFBc04sRUFBQUssRUFBQXlpQyxFQUF0RS84QyxFQUFBeWpCLEVBQUE5SSxFQUFBSyxHQUFhLFNBQUFoYixFQUFBLE9BQUE2dEQsR0FBcUIsR0FBQTd0RCxFQUFBLElBQUEyYSxFQUFBb2IsS0FBQXBiLEVBQUEyeUMsV0FBQXR0RCxPQUFnRCxJQUFBMk0sRUFBQXZJLEVBQUF1VyxFQUFBbXpDLEdBQUE5dEQsR0FBQSxLQUFBK3RELEdBQUEvdEQsSUFBQWlhLEVBQUF3SixFQUFBOUksRUFBQTVhLEdBQUF1YSxFQUFBSyxFQUFBMnlDLFFBQUFscEQsRUFBQXVXLEVBQUFxekMsR0FBQS96QyxHQUFBZzBDLEdBQUFoMEMsSUFBQThpQyxFQUFBemlDLEVBQXdFeWlDLEVBQUF6aUMsRUFBQTNOLElBQU1vd0MsRUFBQXBpQyxFQUFBb2IsS0FBQXBiLEVBQUEyeUMsV0FBQTN5QyxFQUFBb2IsS0FBQWduQixJQUFvQyxTQUFBNTdDLEVBQUF3WixHQUFjLFFBQUFLLEVBQUFqYixFQUFBQyxFQUFjMmEsRUFBQTB5QyxTQUFBLEdBQWExeUMsRUFBQXd5QyxjQUFBeHlDLEVBQUEweUMsVUFBQSxFQUErQixHQUFBcnlDLEVBQUEsS0FBQUEsRUFBQUwsRUFBQTY5QixPQUFBNzlCLEVBQUF3eUMsWUFBQSxJQUFBeHlDLEVBQUE2OUIsT0FBQTc5QixFQUFBd3lDLGFBQUFwdEQsRUFBQSxLQUFBQSxFQUFBNGEsRUFBQTY5QixPQUFBNzlCLEVBQUF3eUMsWUFBQSxJQUFBeHlDLEVBQUE2OUIsT0FBQTc5QixFQUFBd3lDLFlBQUEsR0FBQW55QyxLQUFBLE9BQUFqYixHQUFBLE9BQUFtdUQsR0FBc0osSUFBQXZ6QyxFQUFBd3lDLGFBQUEsRUFBQW50RCxFQUFBZ2IsRUFBeUJoYixJQUFFQSxFQUFBMmEsRUFBQW9iLEtBQUFwYixFQUFBMnlDLFdBQUEzeUMsRUFBQTY5QixPQUFBNzlCLEVBQUF3eUMsZUFBa0QsT0FBQXh5QyxFQUFBMHlDLFNBQUEsRUFBQVEsR0FBMFgsU0FBQXJzRCxFQUFBbVosRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxHQUFzQixPQUFBL0YsS0FBQUssSUFBQSxFQUFBMEYsRUFBQSxHQUFBZ08sRUFBQSxFQUFBL1QsS0FBQUssSUFBQSxFQUFBMEYsRUFBQSxHQUFBQSxFQUFBcU8sRUFBQSxLQUFBck8sR0FBQS9GLEtBQUFLLElBQUEwRixFQUFBLEdBQUE1TSxFQUFBNkcsS0FBQUssSUFBQTBGLEVBQUEsR0FBQTNNLEVBQXVGLFNBQUF5VyxJQUFhelUsS0FBQW1zRCxHQUFBNVAsT0FBQTBLLElBQUFqbkQsS0FBQW9zRCxHQUFBN1AsT0FBQTBLLElBQUFqbkQsS0FBQXFzRCxHQUFBOVAsT0FBQTBLLElBQUFqbkQsS0FBQXNzRCxHQUFBL1AsT0FBQTBLLElBQTRFLFNBQUF6b0QsSUFBYXdCLEtBQUF1c0QsWUFBQXZzRCxLQUFBaWhELEtBQUEsUUFBQWpoRCxLQUFBd3NELE9BQUEsS0FBQXhzRCxLQUFBeXNELFlBQUEsRUFBdUUsU0FBQWh0RCxFQUFBa1osR0FBYyxVQUFBMVksTUFBQTBZLEdBQW1CLFNBQUEvWixFQUFBK1osRUFBQUssR0FBZ0JMLEdBQUFsWixFQUFBdVosR0FBUSxTQUFBc2pDLEVBQUEzakMsR0FBYyxrQkFBa0IsT0FBQUEsR0FBVSxTQUFBNjhCLEVBQUE3OEIsR0FBYyxPQUFBQSxJQUFBLEtBQUFBLEdBQUEsSUFBdUIsU0FBQThqQyxFQUFBOWpDLEVBQUFLLEVBQUFqYixHQUFrQixRQUFBQyxFQUFBLEVBQUEyTSxFQUFBZ08sRUFBQXJYLE9BQXVCMFgsRUFBQXJPLEdBQUEzTSxFQUFBLFFBQUEyYSxFQUFBSyxNQUFvQkEsSUFBQWhiLEVBQVMsT0FBQUQsRUFBQTZFLEtBQUEsSUFBQTVFLEVBQUEsR0FBQWdiLEVBQXlCLFNBQUE0Z0IsRUFBQWpoQixFQUFBSyxFQUFBamIsR0FBa0IsUUFBQUMsRUFBQSxFQUFBMk0sRUFBQWdPLEVBQUFyWCxPQUFBMlcsRUFBQWUsRUFBMkJmLEVBQUF0TixHQUFBM00sRUFBQSxJQUFVLENBQUUsSUFBQXNhLEVBQUFLLEVBQUFWLEdBQVcsSUFBQXU5QixFQUFBbDlCLEdBQUEsTUFBZSxPQUFBQSxHQUFBTCxFQUFBLEVBQUF0TixHQUFBLElBQUFnTyxFQUFBVixFQUFBLFdBQWtDQSxJQUFBamEsRUFBUUQsRUFBQTZFLEtBQUE1RSxFQUFBLEdBQVksUUFBQSs4QyxFQUFBL2hDLEVBQVkraEMsRUFBQTlpQyxJQUFJOGlDLEVBQUFoOUMsRUFBQTZFLEtBQUErVixFQUFBb2lDLEdBQUEsU0FBeUIsT0FBQTlpQyxFQUFTLFNBQUFnbUIsRUFBQXRsQixFQUFBSyxFQUFBamIsR0FBa0IsUUFBQUMsRUFBQSxFQUFBMk0sRUFBQWdPLEVBQUFyWCxPQUFBMlcsRUFBQWUsRUFBMkJmLEVBQUF0TixHQUFBM00sRUFBQSxJQUFVLENBQUUsSUFBQXNhLEVBQUFLLEVBQUFWLEdBQVcsT0FBQUssRUFBQSxNQUFlLEdBQUFrOUIsRUFBQWw5QixJQUFBTCxFQUFBLEVBQUF0TixHQUFBNnFDLEVBQUE3OEIsRUFBQVYsRUFBQSxZQUFnQ0EsSUFBQWphLEVBQVFELEVBQUE2RSxLQUFBLEdBQUE1RSxFQUFBLEdBQWUsUUFBQSs4QyxFQUFBL2hDLEVBQVkraEMsRUFBQTlpQyxJQUFJOGlDLEVBQUEsQ0FBSyxJQUFBcjlDLEVBQUFpYixFQUFBb2lDLEdBQVdoOUMsRUFBQTZFLEtBQUFsRixFQUFBLGFBQUFBLEVBQUEsU0FBaUMsT0FBQXVhLEVBQVMsU0FBQWltQixFQUFBdmxCLEVBQUFLLEVBQUFqYixHQUFrQixRQUFBQyxFQUFBZ0MsS0FBQTJLLEVBQUEsRUFBbUJBLEVBQUFxTyxFQUFBMVgsT0FBV3FKLEdBQUEsR0FBTSxJQUFBc04sRUFBQWUsRUFBQXJPLEdBQVczTSxFQUFBaWEsRUFBQWhhLE1BQUFnYSxFQUFBdFosTUFBa0IsR0FBQXFCLEtBQUEwc0QsVUFBQS96QyxFQUFBM1ksS0FBQTJzRCxPQUFBM3pDLEVBQUFqYixFQUFBLFFBQUF1YSxFQUFBbGEsT0FBQXFFLEtBQUExRSxHQUFBZzlDLEVBQUEsRUFBaUVBLEVBQUF6aUMsRUFBQWhYLE9BQVd5NUMsR0FBQSxHQUFNLElBQUFyOUMsRUFBQTRhLEVBQUF5aUMsR0FBQTM0QyxFQUFBckUsRUFBQUwsUUFBa0IsSUFBQU0sRUFBQU4sS0FBQU0sRUFBQU4sR0FBQTBFLElBQXlCLFNBQUF3NkMsRUFBQWprQyxFQUFBSyxFQUFBamIsUUFBa0IsSUFBQUEsTUFBQWliLEVBQUExWCxRQUF5QixJQUFBdEQsRUFBQSxJQUFBOEYsTUFBQWtWLEVBQUExWCxPQUFBLEdBQTRCdEQsRUFBQSxJQUFNQyxLQUFBMGEsRUFBQSxRQUFBMUssS0FBQSxTQUFBdFAsTUFBQVosR0FBc0MsUUFBQTRNLEVBQUEsRUFBWUEsRUFBQXFPLEVBQUExWCxPQUFXcUosSUFBQTNNLEVBQUEyTSxFQUFBLElBQVkxTSxLQUFBMGEsRUFBQWhPLEVBQUFzRCxLQUFBLFNBQUF0UCxNQUFBcWEsRUFBQXJPLElBQW1DLE9BQUEzTSxFQUFTLFNBQUFrUyxFQUFBeUksRUFBQUssRUFBQWpiLEdBQWtCLElBQUFDLEVBQUFnYixFQUFBMVgsT0FBQXFKLEVBQUEsSUFBQTdHLE1BQUE5RixFQUFBLEdBQWdDMk0sRUFBQSxJQUFNMU0sS0FBQTBhLEVBQUEsUUFBQTFLLEtBQUEsU0FBQXRQLE1BQUFYLEdBQXNDLFFBQUFpYSxFQUFBLEVBQVlBLEVBQUFqYSxFQUFJaWEsSUFBQXROLEVBQUFzTixFQUFBLElBQVloYSxLQUFBMGEsRUFBQVYsRUFBQWhLLEtBQUEsUUFBQXRQLE1BQUFaLEVBQUFpYixFQUFBZixPQUF1QyxPQUFBdE4sRUFBUyxTQUFBc3lDLEVBQUF0a0MsRUFBQUssRUFBQWpiLEdBQWtCLElBQUFDLEVBQUFnYixFQUFBMVgsT0FBQXFKLEtBQW9CQSxFQUFBLElBQU0xTSxLQUFBMGEsRUFBQSxRQUFBMUssS0FBQSxTQUFBdFAsTUFBQVgsR0FBc0MsUUFBQWlhLEVBQUEsRUFBWUEsRUFBQWphLEVBQUlpYSxJQUFBdE4sSUFBQXliLE9BQUFyb0IsRUFBQWliLEVBQUFmLE9BQTBCLE9BQUF0TixFQUFTLFNBQUF1eUMsRUFBQXZrQyxHQUFjLElBQUFBLEVBQUFpMEMsT0FBQTF1QixFQUFBcmdDLEtBQUFtQyxLQUFBLGtCQUEyQy9CLEtBQUEsaUJBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLElBQTRDeW5CLE9BQUF3MkIsRUFBQSxRQUFBamtDLEVBQUFrMEMsVUFBQUMsR0FBQUMsUUFBQSwrQ0FBeUYsU0FBQTVQLEVBQUF4a0MsR0FBY3VsQixFQUFBcmdDLEtBQUFtQyxLQUFBLGtCQUFBaTlDLEVBQUEsZUFBQXRrQyxFQUFBLFNBQUFBLEVBQUFLLEdBQStELElBQUFqYixFQUFBNGEsRUFBQXEwQyxPQUFBaHZELEVBQUFELEVBQUFrdkQsZUFBa0MsT0FBQUgsR0FBQUMsU0FBQS91RCxFQUFBLGdDQUFBMmEsRUFBQXl5QyxJQUFBLHNDQUFpR250RCxLQUFBLFlBQUErYSxFQUFBL0ssS0FBQSxNQUFBdFAsTUFBQWdhLEVBQUF5eUMsTUFBNENudEQsS0FBQSxTQUFBK2EsRUFBQS9LLEtBQUEsUUFBQXRQLE1BQUEsSUFBQXUvQixFQUFBLGdCQUF5RGpnQyxLQUFBLGlCQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFBdS9CLEVBQUEsbUJBQWtFamdDLEtBQUEsY0FBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBMkNWLEtBQUEsa0JBQUFnUSxLQUFBLFNBQUF0UCxNQUFBWCxFQUFBa3ZELGtCQUE2RDltQyxPQUFBdzJCLEVBQUEsZUFBQTUrQyxFQUFBbXZELG9CQUE4Qy9tQyxPQUFBNjJCLEVBQUEsVUFBQWwvQyxFQUFBcXZELGVBQUEsU0FBQXowQyxFQUFBSyxHQUFvRCxJQUFBamIsRUFBQTRhLEVBQUEwMEMsUUFBZ0IsUUFBUXB2RCxLQUFBLGFBQUErYSxFQUFBL0ssS0FBQSxNQUFBdFAsTUFBQWdhLEVBQUF5eUMsTUFBNkNudEQsS0FBQSxVQUFBK2EsRUFBQS9LLEtBQUEsUUFBQXRQLE1BQUEsSUFBQXUvQixFQUFBLFlBQXNEamdDLEtBQUEsY0FBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBMkNWLEtBQUEsa0JBQUFnUSxLQUFBLFNBQUF0UCxNQUFBWixFQUFBbXZELGtCQUE2RDltQyxPQUFBdzJCLEVBQUEsZUFBQTcrQyxFQUFBb3ZELDZCQUF5RCxTQUFBL1AsRUFBQXprQyxHQUFjdWxCLEVBQUFyZ0MsS0FBQW1DLEtBQUEsbUJBQUFpOUMsRUFBQSxnQkFBQXRrQyxFQUFBLFNBQUFBLEVBQUFLLEdBQWlFLElBQUFqYixFQUFBNGEsRUFBQTIwQyxRQUFnQixRQUFRcnZELEtBQUEsYUFBQSthLEVBQUEvSyxLQUFBLE1BQUF0UCxNQUFBZ2EsRUFBQXl5QyxNQUE2Q250RCxLQUFBLFVBQUErYSxFQUFBL0ssS0FBQSxRQUFBdFAsTUFBQSxJQUFBdS9CLEVBQUEsaUJBQTJEamdDLEtBQUEsZ0JBQUFnUSxLQUFBLFNBQUF0UCxNQUFBWixFQUFBd3ZELGdCQUF5RG5uQyxPQUFBdzJCLEVBQUEsa0JBQUE3K0MsRUFBQXl2RCwwQkFBeUQsU0FBQW5RLEVBQUExa0MsRUFBQUssR0FBZ0JrbEIsRUFBQXJnQyxLQUFBbUMsS0FBQSxrQkFBQWtRLEVBQUEsU0FBQXlJLEVBQUEsU0FBQUEsR0FBdUQsSUFBQTVhLEVBQUFpYixFQUFBTCxFQUFBODBDLFlBQXNCLE9BQUFYLEdBQUFDLFNBQUFodkQsRUFBQSxvQ0FBQTRhLEVBQUE4MEMsV0FBQSxnQkFBQXZ2QixFQUFBLGdCQUF3R2pnQyxLQUFBLGFBQUFnUSxLQUFBLFNBQUF0UCxNQUFBZ2EsRUFBQTgwQyxhQUFxRHh2RCxLQUFBLGFBQUFnUSxLQUFBLFNBQUF0UCxNQUFBZ2EsRUFBQSswQyxhQUFtRHRuQyxPQUFBbFcsRUFBQSxXQUFBeUksRUFBQWcxQyxVQUFBNXZELFFBQTBDLFNBQUF1L0MsRUFBQTNrQyxFQUFBSyxHQUFnQixPQUFBTCxFQUFBaTFDLFNBQUE1MEMsR0FBcUIsU0FBQXVrQyxFQUFBNWtDLEVBQUFLLEdBQWdCLE9BQUFMLEVBQUFrMUMsVUFBQTcwQyxHQUFBLEdBQWlFLFNBQUF5a0MsRUFBQTlrQyxFQUFBSyxHQUFnQixPQUFBTCxFQUFBbTFDLFVBQUE5MEMsR0FBQSxHQUF5QixTQUFBMGtDLEVBQUEva0MsRUFBQUssR0FBZ0IsT0FBQUwsRUFBQW8xQyxTQUFBLzBDLEdBQUEsR0FBQUwsRUFBQWsxQyxVQUFBNzBDLEVBQUEsWUFBeVgsU0FBQTRNLEVBQUFqTixFQUFBSyxHQUFnQmhaLEtBQUErN0MsS0FBQXBqQyxFQUFBM1ksS0FBQW9mLE9BQUFwRyxFQUFBaFosS0FBQWd1RCxlQUFBLEVBQTI3QyxTQUFBM1IsRUFBQTFqQyxFQUFBSyxFQUFBamIsR0FBa0I0YSxFQUFBdVIsU0FBQXRuQixNQUFpQndHLElBQUE0UCxFQUFBckwsTUFBQXFMLEVBQUE2UixRQUFBN1IsRUFBQWpiLEdBQUFxaEIsT0FBQSxFQUFBNnVDLFdBQUFsd0QsSUFBeWtGLFNBQUE2L0MsRUFBQWpsQyxHQUFjM1ksS0FBQWt1RCxLQUFBdjFDLEVBQVksU0FBQWdqQyxFQUFBaGpDLEdBQWMzWSxLQUFBbXVELEtBQUF4MUMsRUFBWSxTQUFBd2pDLEVBQUF4akMsRUFBQUssR0FBZ0JoWixLQUFBb3VELFNBQUF6MUMsRUFBQTNZLEtBQUFtbEQsUUFBQW5zQyxFQUErQixTQUFBOGpDLEVBQUFua0MsR0FBYyxJQUFBSyxFQUFBaFosS0FBVyxPQUFBMlksRUFBQTlSLFNBQWtCLE9BQUE3RyxLQUFBcXVELE1BQUFDLEdBQUE1bUQsUUFBNkIsTUFBTSxPQUFBMUgsS0FBQXF1RCxNQUFBLElBQUF2cUQsTUFBQTZVLEVBQUE0MUMsZ0JBQThDLFFBQUF4d0QsRUFBQSxFQUFZQSxFQUFBNGEsRUFBQTQxQyxlQUFtQnh3RCxJQUFBNGEsRUFBQTYxQyxlQUFBendELEdBQUF1d0QsR0FBQWh0RCxPQUFBMFgsRUFBQXExQyxNQUFBdHdELEdBQUF1d0QsR0FBQTMxQyxFQUFBNjFDLGVBQUF6d0QsSUFBQWliLEVBQUFxMUMsTUFBQXR3RCxHQUFBNGEsRUFBQTAxQyxNQUFBMTFDLEVBQUE2MUMsZUFBQXp3RCxHQUFBdXdELEdBQUFodEQsUUFBdUgsTUFBTSxTQUFBdEIsS0FBQXF1RCxNQUFBLElBQUF2cUQsTUFBQTZVLEVBQUE0MUMsZ0JBQWdELFFBQUF2d0QsRUFBQSxFQUFZQSxFQUFBMmEsRUFBQTQxQyxlQUFtQnZ3RCxJQUFBZ2IsRUFBQXExQyxNQUFBcndELEdBQUFzd0QsR0FBQXR3RCxFQUFBMmEsRUFBQTYxQyxlQUFBeHdELElBQXlDLE1BQU0sZUFBQWdDLEtBQUFxdUQsVUFBbWtCLFNBQUExTSxFQUFBaHBDLEdBQWUzWSxLQUFBeXVELHNCQUFBOTFDLEdBQThCLFNBQUFncUMsRUFBQWhxQyxFQUFBSyxFQUFBamIsR0FBbUJLLE9BQUFDLGVBQUFzYSxFQUFBSyxHQUEyQnphLElBQUEsV0FBZSxPQUFBb2EsRUFBQSsxQyxLQUFBLzFDLEVBQUE1YSxJQUFtQjJDLElBQUEsU0FBQXNZLEdBQWlCTCxFQUFBNWEsR0FBQWliLEdBQU8xYSxZQUFBLEVBQUFxd0QsY0FBQSxJQUFpQyxTQUFBL00sRUFBQWpwQyxFQUFBSyxHQUE0QixHQUFBaFosS0FBQWt1RCxLQUFBdjFDLEVBQUEzWSxLQUFBNnNELFVBQTZCL29ELE1BQUFELFFBQUFtVixHQUFBLFFBQUFoYixFQUFBLEVBQThCQSxFQUFBZ2IsRUFBQTFYLE9BQVd0RCxJQUFqRmdDLEtBQWlGNnNELE9BQUE3dUQsR0FBQWdiLEVBQUFoYixHQUFxQmdDLEtBQUFzQixPQUFBMFgsS0FBQTFYLFFBQUEsRUFBNGQsU0FBQXdnRCxFQUFBbnBDLEVBQUFLLEdBQWlCLEdBQUFMLElBQUFLLEVBQUEsU0FBa0IsR0FBQWxWLE1BQUFELFFBQUE4VSxJQUFBN1UsTUFBQUQsUUFBQW1WLEdBQUEsQ0FBdUMsR0FBQUwsRUFBQXJYLFNBQUEwWCxFQUFBMVgsT0FBQSxTQUFnQyxRQUFBdkQsRUFBQSxFQUFZQSxFQUFBNGEsRUFBQXJYLE9BQVd2RCxHQUFBLE1BQUErakQsRUFBQW5wQyxFQUFBNWEsR0FBQWliLEVBQUFqYixJQUFBLFNBQWdDLFNBQVMsU0FBUyxTQUFBc2tELEVBQUExcEMsR0FBZSxPQUFBQSxFQUFBclgsT0FBQSxTQUFBcVgsRUFBQXJYLE9BQUEsaUJBQW1ELFNBQUFnaEQsRUFBQTNwQyxFQUFBSyxFQUFBamIsR0FBbUIsSUFBQUMsRUFBQTJNLEVBQUFzTixLQUFBSyxLQUFBeWlDLEVBQUE2VCxHQUFBQyxVQUFBbDJDLEVBQUFLLEdBQXNDLE9BQUEraEMsRUFBQSxDQUFVLElBQUFyOUMsRUFBQWt4RCxHQUFBRSxRQUFBbjJDLEVBQUFLLEVBQUEsR0FBd0JoYixFQUFBZ2IsR0FBQStoQyxFQUFBLEdBQUFyOUMsRUFBQSxFQUFjLFFBQUEwRSxFQUFBNFcsRUFBQSxFQUFBeUksRUFBQSxFQUFrQkEsRUFBQXM1QixFQUFBLEVBQU10NUIsR0FBQSxFQUFBeEosRUFBQXJWLEtBQUFnc0QsR0FBQUcsVUFBQXAyQyxFQUFBdlcsRUFBQTFFLElBQUEwRSxHQUFBMUUsRUFBc0NpTixFQUFBM00sRUFBQWlhLEVBQUE4aUMsUUFBU3B3QyxFQUFBcU8sRUFBQSxFQUFXLFFBQUFyYixFQUFBLEVBQVlBLEVBQUFzYSxFQUFBM1csT0FBQSxFQUFhM0QsR0FBQSxHQUFNLElBQUFHLEVBQUE4d0QsR0FBQUksU0FBQXIyQyxFQUFBM2EsRUFBQWlhLEVBQUF0YSxHQUFBSyxFQUFBaWEsRUFBQXRhLEVBQUEsSUFBcUNJLElBQUFELEVBQUFDLEVBQUFELElBQUF3YSxFQUFBMVYsS0FBQTlFLEdBQXNCLE9BQU9teEQsUUFBQTMyQyxFQUFBZ2IsWUFBQXRhLEVBQUFrMkMsVUFBQXZrRCxHQUFnUCxTQUFBNDhDLEVBQUE1dUMsRUFBQUssR0FBaUIsSUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBc04sRUFBWSxRQUFBZSxFQUFBLE9BQUFqYixFQUFBNGEsRUFBQXcyQyxZQUFBbnhELEVBQUEyYSxFQUFBdzJDLFlBQUFweEQsR0FBQSxFQUFBQyxFQUF3RCxRQUFBZ2IsRUFBQSxPQUFBamIsRUFBQTRhLEVBQUF3MkMsWUFBQW54RCxFQUFBMmEsRUFBQXcyQyxZQUFBeGtELEVBQUFnTyxFQUFBdzJDLFlBQUFsM0MsRUFBQVUsRUFBQXcyQyxZQUFBcHhELEdBQUEsR0FBQUMsR0FBQSxHQUFBMk0sR0FBQSxFQUFBc04sRUFBb0csUUFBQWUsRUFBQSxPQUFwWSxTQUFBTCxHQUFlLFFBQUFLLEVBQUEsR0FBQWhiLEdBQUEsaUVBQXFGLENBQUUsSUFBQTJNLEVBQUFnTyxFQUFBdzJDLFlBQUFsM0MsRUFBQXROLEdBQUEsRUFBQTJOLEVBQUEsR0FBQTNOLEVBQWtDLEdBQXpILEtBQXlIc04sRUFBQSxNQUFlLEdBQUFlLEdBQUFoYixFQUFBaWEsR0FBeEksS0FBd0lLLEVBQUEsTUFBdUJVLEdBQUFoYixFQUFBc2EsR0FBUSxPQUFBaEYsV0FBQTBGLEdBQThNd3VDLENBQUE3dUMsR0FBdUIsR0FBQUssR0FBQSxJQUFBQSxHQUFBLFdBQUFBLEVBQUEsSUFBOEIsR0FBQUEsR0FBQSxLQUFBQSxHQUFBLFdBQUFqYixFQUFBNGEsRUFBQXcyQyxZQUFBLEtBQUFuMkMsRUFBQSxLQUFBamIsRUFBQSxJQUEyRCxHQUFBaWIsR0FBQSxLQUFBQSxHQUFBLFdBQUFqYixFQUFBNGEsRUFBQXcyQyxZQUFBLE1BQUFuMkMsRUFBQSxLQUFBamIsRUFBQSxJQUE0RCxVQUFBa0MsTUFBQSxjQUFBK1ksR0FBaVAsU0FBQXF1QyxFQUFBMXVDLEVBQUFLLEVBQUFqYixHQUFtQmliLE9BQUEsSUFBQUEsSUFBQSxFQUFpQixJQUFBaGIsRUFBQSxJQUFBNHdELEdBQUFRLE9BQUF6MkMsRUFBQUssR0FBQXJPLEtBQUFzTixLQUFtQyxJQUFBbGEsT0FBQSxJQUFBQSxJQUFBNGEsRUFBQXJYLE9BQTRCdEQsRUFBQWd3RCxlQUFBandELEdBQW1CLENBQUUsSUFBQXVhLEVBQUF0YSxFQUFBbXhELFlBQW9CNzJDLEdBQUEsU0FBQUEsTUFBQSxLQUFBdGEsRUFBQW14RCxhQUFBeGtELEVBQUEvSCxNQUFBMFYsRUFBQUwsWUFBQXJWLEtBQUEya0QsRUFBQXZwRCxFQUFBc2EsSUFBMEUsT0FBdGEsU0FBQUssR0FBZSxRQUFBSyxLQUFZamIsRUFBQSxFQUFLQSxFQUFBNGEsRUFBQXJYLE9BQVd2RCxHQUFBLEdBQU0sSUFBQUMsRUFBQTJhLEVBQUE1YSxHQUFBLEdBQUE0TSxFQUFBZ08sRUFBQTVhLEdBQUEsR0FBQWthLE9BQUEsRUFBaUMsR0FBQUEsRUFBQSxJQUFBdE4sRUFBQXJKLE9BQUFxSixFQUFBLEdBQUFBLEVBQUFxTyxFQUFBelosZUFBQXZCLEtBQUFtNEMsTUFBQW45QixFQUFBaGIsSUFBQSxVQUFBaUMsTUFBQSxVQUFBK1ksRUFBQSxvQkFBQWhiLEdBQThHZ2IsRUFBQWhiLEdBQUFpYSxFQUFPLE9BQUFlLEVBQStOc3VDLENBQUEzOEMsR0FBYSxTQUFBaTlDLEVBQUFqdkMsRUFBQUssR0FBaUIsT0FBQUEsS0FBQSxJQUFBcTJDLEdBQUFyMkMsR0FBQUwsRUFBQUssRUFBQSxLQUErQixTQUFBeXVDLEVBQUE5dUMsRUFBQUssRUFBQWpiLEdBQW1CLFFBQUFDLEVBQUEyTSxLQUFjc04sRUFBQSxFQUFLQSxFQUFBZSxFQUFBMVgsT0FBVzJXLEdBQUEsR0FBTSxJQUFBSyxFQUFBVSxFQUFBZixHQUFXLEdBQUFuVSxNQUFBRCxRQUFBeVUsRUFBQXJLLE1BQUEsQ0FBMEIsSUFBQThzQyxLQUFTQSxFQUFBejVDLE9BQUFnWCxFQUFBckssS0FBQTNNLE9BQXVCLFFBQUE1RCxFQUFBLEVBQVlBLEVBQUE0YSxFQUFBckssS0FBQTNNLE9BQWdCNUQsU0FBQSxLQUFBTSxPQUFBLElBQUEyYSxFQUFBTCxFQUFBZzNDLElBQUEzMkMsRUFBQUwsRUFBQWczQyxJQUFBNXhELFFBQUEsS0FBQU0sT0FBQSxJQUFBc2EsRUFBQTNaLFlBQUEsSUFBQTJaLEVBQUEzWixNQUFBakIsR0FBQTRhLEVBQUEzWixNQUFBakIsR0FBQSxjQUFBNGEsRUFBQXJLLEtBQUF2USxLQUFBTSxFQUFBNHBELEVBQUE3cEQsRUFBQUMsSUFBQSs4QyxFQUFBcjlDLEdBQUFNLEVBQXFKMk0sRUFBQTJOLEVBQUFyYSxNQUFBODhDLFlBQVksS0FBQS84QyxFQUFBMmEsRUFBQUwsRUFBQWczQyxPQUFBdHhELE9BQUEsSUFBQXNhLEVBQUEzWixNQUFBMlosRUFBQTNaLE1BQUEsY0FBQTJaLEVBQUFySyxPQUFBalEsRUFBQTRwRCxFQUFBN3BELEVBQUFDLElBQUEyTSxFQUFBMk4sRUFBQXJhLE1BQUFELEVBQXFHLE9BQUEyTSxFQUFzTSxTQUFBNGtELEVBQUE1MkMsRUFBQUssR0FBaUIsT0FBQXl1QyxFQUFBSixFQUFBMXVDLEVBQUEsRUFBQUEsRUFBQWtqQyxZQUFBMlQsR0FBQXgyQyxHQUFxQyxTQUFBeTJDLEVBQUE5MkMsRUFBQUssRUFBQWpiLEVBQUFDLEdBQXFCLE9BQUF5cEQsRUFBQUosRUFBQTF1QyxFQUFBSyxFQUFBamIsR0FBQTJ4RCxHQUFBMXhELEdBQTBCLFNBQUE0VCxFQUFBK0csRUFBQUssRUFBQWpiLEVBQUFDLEdBQXFCLFFBQUEyTSxLQUFBc04sRUFBQSxFQUFpQkEsRUFBQWxhLEVBQUF1RCxPQUFXMlcsR0FBQSxHQUFNLElBQUFLLEVBQUEsSUFBQXEzQyxTQUFBLElBQUF6c0MsV0FBQW5sQixFQUFBa2EsSUFBQXZNLFFBQUFxdkMsRUFBQXdVLEVBQUFqM0MsRUFBQXRhLEdBQTBEKzhDLEVBQUE2VSxVQUFBN1UsRUFBQThVLFdBQUEsRUFBMkIsSUFBQW55RCxFQUFBcTlDLEVBQUErVSxRQUFBLEdBQUExdEQsRUFBQTI0QyxFQUFBK1UsUUFBQSxHQUFrQyxPQUFBcHlELEdBQUEsSUFBQTBFLEVBQUEsQ0FBaUIsSUFBQXFmLEVBQUFndUMsRUFBQTkyQyxFQUFBdlcsRUFBQTRXLEVBQUF0YixFQUFBTSxHQUFvQixHQUFBKzhDLEVBQUFnVixlQUFBdHVDLEVBQUF1dUMsY0FBQWpWLEVBQUFrVixlQUFBeHVDLEVBQUF5dUMsY0FBQSxJQUFBenVDLEVBQUEwdUMsTUFBQSxDQUFrRixJQUFBeHlELEVBQUF5RSxFQUFBcWYsRUFBQTB1QyxNQUFBcnlELEVBQUF3a0QsRUFBQTNwQyxFQUFBaGIsRUFBQXFiLEdBQTRCK2hDLEVBQUE2VSxPQUFBOXhELEVBQUFteEQsUUFBQWxVLEVBQUE4VSxXQUFBeE4sRUFBQXRILEVBQUE2VSxRQUE2QzdVLEVBQUFxVixhQUFBM3VDLEVBQWlCOVcsRUFBQS9ILEtBQUFtNEMsR0FBVSxPQUFBcHdDLEVBQTZ2QixTQUFBMGxELEdBQUExM0MsRUFBQUssRUFBQWpiLEdBQW1CLFNBQUFDLEVBQUEyYSxFQUFBSyxHQUFnQnBhLEdBQUFULEVBQUFteUQsWUFBQW55RCxFQUFBb3lELE9BQUE1M0MsRUFBQUssR0FBQXBhLEdBQUEsRUFBb0MsU0FBQStMLElBQW1CbkwsRUFBQThCLE9BQUEsT0FBQTdCLElBQUF3K0IsRUFBQXorQixFQUFBb0osUUFBQXpKLEdBQUFzVixHQUFBalYsRUFBQThCLFFBQUEsRUFBQTlCLEVBQUE4QixPQUFBLEVBQUE3QixHQUFBLEVBQ3p4M0IsSUFBQTZZLEVBQUF5aUMsRUFBQXI5QyxFQUFBMEUsRUFBQXFmLEVBQUE5akIsRUFBQUcsRUFBQXFCLEVBQUFoQixFQUFBLElBQUFLLEVBQUFnQixLQUFBaVYsRUFBQSxFQUFBaFYsR0FBQSxFQUFBYixHQUFBLEVBQUEwOUMsRUFBQSxFQUFBOUcsRUFBQSxFQUF1RCxHQUFBNzhCLEVBQUE2M0MsVUFBQSxDQUFnQixJQUFBL1QsRUFBQTlqQyxFQUFBODNDLE9BQUFDLElBQUFDLFFBQUFDLFVBQUE1M0MsRUFBQTFRLE9BQUFzeEIsRUFBQWpoQixFQUFBODNDLE9BQUFDLElBQUFDLFFBQUFFLFNBQUFwVSxHQUFpRmg3QixFQUFBbVksRUFBQWcyQixPQUFBanlELEVBQUFpOEIsRUFBQWkyQixXQUFBL3hELEVBQUE4N0IsRUFBQW0yQixlQUFBNXdELEVBQUF5NkIsRUFBQXEyQixvQkFBZ0V4dUMsRUFBQTlJLEVBQUE4M0MsT0FBQUMsSUFBQUMsUUFBQWYsT0FBQWp5RCxFQUFBZ2IsRUFBQTgzQyxPQUFBQyxJQUFBQyxRQUFBZCxXQUFBL3hELEVBQUE2YSxFQUFBODNDLE9BQUFDLElBQUFDLFFBQUFaLGVBQUE1d0QsRUFBQXdaLEVBQUE4M0MsT0FBQUMsSUFBQUMsUUFBQVYsZUFBaUosSUFBQWh5QixFQUFBbmdDLEVBQVEsT0FEOCsyQixTQUFBbWEsRUFBQWxhLEdBQWMsUUFBQUQsRUFBQVUsRUFBQWkrQyxFQUFBN2lCLEVBQUFzRSxFQUFBMGUsRUFBQTFzQyxFQUFBK3NDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUEsRUFBb0NBLEVBQUF2L0MsRUFBQXVELFFBQVcsQ0FBRSxJQUFBaThDLEVBQUF4L0MsRUFBQXUvQyxHQUFXLE9BQUFBLEdBQUEsRUFBQUMsR0FBZSxjQUFBNXlDLElBQWtCLE1BQU0sT0FBQW5MLEVBQUE4QixPQUFBLElBQUE3QixJQUFBdytCLEVBQUF6K0IsRUFBQW9KLFFBQUF6SixFQUFBTSxHQUFBLEdBQUErMUMsR0FBQWgyQyxFQUFBc3hELE1BQUE5eUQsRUFBQXMrQyxFQUFBOUcsR0FBOEQsTUFBTSxZQUFZaDJDLEVBQUE4QixPQUFBLEdBQVdnN0MsR0FBQTk4QyxFQUFBb0osUUFBQTRzQyxHQUFBaDJDLEVBQUFvSixRQUFBekssRUFBQTR5RCxPQUFBelUsRUFBQTlHLEdBQXlDLE1BQU0sWUFBWWgyQyxFQUFBOEIsT0FBQSxJQUFBZzdDLEdBQUE5OEMsRUFBQW9KLFFBQUF6SyxFQUFBNHlELE9BQUF6VSxFQUFBOUcsR0FBQSxJQUFBaDJDLEVBQUE4QixTQUFzRGswQyxHQUFBaDJDLEVBQUFvSixRQUFBekssRUFBQTR5RCxPQUFBelUsRUFBQTlHLEdBQTRCLE1BQU0sWUFBWWgyQyxFQUFBOEIsT0FBQSxJQUFBazBDLEdBQUFoMkMsRUFBQW9KLFFBQUF6SyxFQUFBNHlELE9BQUF6VSxFQUFBOUcsR0FBQSxJQUFBaDJDLEVBQUE4QixTQUFzRGc3QyxHQUFBOThDLEVBQUFvSixRQUFBekssRUFBQTR5RCxPQUFBelUsRUFBQTlHLEdBQTRCLE1BQU0sWUFBWWgyQyxFQUFBOEIsT0FBQSxHQUFXZ1gsRUFBQWdrQyxFQUFBOThDLEVBQUFvSixRQUFBbXlDLEVBQUF2RixFQUFBaDJDLEVBQUFvSixRQUFBbEwsRUFBQTRhLEVBQUE5WSxFQUFBb0osUUFBQXhHLEVBQUEyNEMsRUFBQXY3QyxFQUFBb0osUUFDcnMrQjB6QyxFQUFBNStDLEVBQUE4QixFQUFBb0osUUFBQTRzQyxFQUFBcHpDLEVBQUE1QyxFQUFBb0osUUFBQXpLLEVBQUE2eUQsUUFBQTE0QyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQUFrNkMsRUFBQTlHLEdBQW1ELE1BQU0sUUFBQXRYLEVBQUExK0IsRUFBQXN4RCxNQUFBbnpELEdBQUFpL0MsRUFBQW43QixFQUFBeWMsS0FBQWptQixFQUFBMmtDLEdBQW1DLE1BQU0sZUFBZSxlQUFBVyxFQUFBeC9DLEVBQUF1L0MsTUFBQSxFQUFBQyxHQUE4QixRQUFBamxDLEVBQUFna0MsRUFBQTk4QyxFQUFBb0osUUFBQW15QyxFQUFBdkYsRUFBQWgyQyxFQUFBb0osUUFBQWxMLEVBQUE0YSxFQUFBOVksRUFBQW9KLFFBQUF4RyxFQUFBMjRDLEVBQUF2N0MsRUFBQW9KLFFBQUFzSCxFQUFBeFMsRUFBQThCLEVBQUFvSixRQUFBcTBDLEVBQUE3NkMsRUFBQTVDLEVBQUFvSixRQUFBczBDLEVBQUFodEMsRUFBQTFRLEVBQUFvSixRQUFBdTBDLEVBQUFGLEVBQUF6OUMsRUFBQW9KLFFBQUF3MEMsRUFBQUYsRUFBQTE5QyxFQUFBb0osUUFBQXkwQyxFQUFBRixFQUFBMzlDLEVBQUFvSixRQUFBMHpDLEVBQUFjLEVBQUE1OUMsRUFBQW9KLFFBQUE0c0MsRUFBQTZILEVBQUE3OUMsRUFBQW9KLFFBQUFwSixFQUFBb0osUUFBQXpLLEVBQUE2eUQsUUFBQTE0QyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQUE4TixFQUFBK3NDLEdBQUE5K0MsRUFBQTZ5RCxRQUFBOVQsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQWYsRUFBQTlHLEdBQXdPLE1BQU0sUUFBQWw5QixFQUFBZ2tDLEVBQUE5OEMsRUFBQW9KLFFBQUFteUMsRUFBQXZGLEVBQUE5M0MsRUFBQTRhLEVBQUE5WSxFQUFBb0osUUFBQXhHLEVBQUEyNEMsRUFBQXY3QyxFQUFBb0osUUFBQXNILEVBQUF4UyxFQUFBOEIsRUFBQW9KLFFBQUFxMEMsRUFBQTc2QyxFQUFBODZDLEVBQUFodEMsRUFBQTFRLEVBQUFvSixRQUFBdTBDLEVBQUEvNkMsRUFBQWc3QyxFQUFBRixFQUFBMTlDLEVBQUFvSixRQUFBeTBDLEVBQUE3SCxFQUFBOEcsRUFBQWMsRUFBQTU5QyxFQUFBb0osUUFBQXpLLEVBQUE2eUQsUUFBQTE0QyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQUE4TixFQUFBK3NDLEdBQUE5K0MsRUFBQTZ5RCxRQUFBOVQsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQWYsRUFBQTlHLEdBQXdLLE1BQU0sUUFBQWw5QixFQUFBZ2tDLEVBQUE5OEMsRUFBQW9KLFFBQUFteUMsRUFBQXZGLEVBQUFoMkMsRUFBQW9KLFFBQUFsTCxFQUFBNGEsRUFBQTlZLEVBQUFvSixRQUFBeEcsRUFBQTI0QyxFQUFBdjdDLEVBQUFvSixRQUFBc0gsRUFBQXhTLEVBQUE4QixFQUFBb0osUUFBQXEwQyxFQUFBNzZDLEVBQUE4NkMsRUFBQWh0QyxFQUFBMVEsRUFBQW9KLFFBQUF1MEMsRUFBQS82QyxFQUFBZzdDLEVBQUFGLEVBQUExOUMsRUFBQW9KLFFBQUF5MEMsRUFBQUYsRUFBQTM5QyxFQUFBb0osUUFBQTB6QyxFQUFBYyxFQUFBNTlDLEVBQUFvSixRQUFBekssRUFBQTZ5RCxRQUFBMTRDLEVBQUF5aUMsRUFBQXI5QyxFQUFBMEUsRUFBQThOLEVBQUErc0MsR0FBQTkrQyxFQUFBNnlELFFBQUE5VCxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBZixFQUFBOUcsR0FBNEwsTUFBTSxRQUFBbDlCLEVBQUFna0MsRUFBQTk4QyxFQUFBb0osUUFBQW15QyxFQUFBdkYsRUFBQWgyQyxFQUFBb0osUUFBQWxMLEVBQUE0YSxFQUFBOVksRUFBQW9KLFFBQUF4RyxFQUFBMjRDLEVBQUF2N0MsRUFBQW9KLFFBQUFzSCxFQUFBeFMsRUFBQThCLEVBQUFvSixRQUFBcTBDLEVBQUE3NkMsRUFBQTVDLEVBQUFvSixRQUFBczBDLEVBQUFodEMsRUFBQTFRLEVBQUFvSixRQUFBdTBDLEVBQUFGLEVBQUF6OUMsRUFBQW9KLFFBQUF3MEMsRUFBQUYsRUFBQTE5QyxFQUFBb0osUUFBQXkwQyxFQUFBRixFQUFBMzlDLEVBQUFvSixRQUFBaEUsS0FBQXNWLElBQUFrakMsRUFBQWQsR0FBQTEzQyxLQUFBc1YsSUFBQW1qQyxFQUFBN0gsR0FBQThHLEVBQUFjLEVBQUE1OUMsRUFBQW9KLFFBQUE0c0MsRUFBQTZILEVBQUE3OUMsRUFBQW9KLFFBQUF6SyxFQUFBNnlELFFBQUExNEMsRUFBQXlpQyxFQUFBcjlDLEVBQUEwRSxFQUFBOE4sRUFBQStzQyxHQUFBOStDLEVBQUE2eUQsUUFBQTlULEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFmLEVBQUE5RyxHQUEwUCxNQUFNLFFBQUFqbEMsUUFBQW5MLElBQUEsU0FBQTRULEVBQUExUSxNQUFBLDBCQUFBaTFDLEdBQUEvOUMsRUFBQThCLE9BQUEsRUFBNkUsTUFBTSxRQUFBOUIsRUFBQThCLE9BQUEsSUFBQTdCLElBQUF3K0IsRUFBQXorQixFQUFBb0osUUFBQXpKLEVBQUFNLEdBQUEsR0FBQWIsSUFBQVQsRUFBQW15RCxZQUFBMXhELEdBQUEsR0FBcUUsTUFBTSxRQUFBK0wsSUFBWSxNQUFNLGdCQUFBQSxJQUFBMnlDLEdBQUE3b0MsRUFBQSxLQUE4QixNQUFNLFFBQUFqVixFQUFBOEIsT0FBQSxJQUFBN0IsSUFBQXcrQixFQUFBeitCLEVBQUFvSixRQUFBekosRUFBQU0sR0FBQSxHQUFBKzFDLEdBQUFoMkMsRUFBQXN4RCxNQUFBOXlELEVBQUFzK0MsR0FBQTk4QyxFQUFBc3hELE1BQUF0YixHQUEwRSxNQUFNLFFBQUFoMkMsRUFBQThCLE9BQUEsSUFBQTdCLElBQUF3K0IsRUFBQXorQixFQUFBb0osUUFBQXpKLEVBQUFNLEdBQUEsR0FBQXpCLEVBQUFzK0MsR0FBQTk4QyxFQUFBc3hELE1BQUF0YixHQUErRCxNQUFNLFFBQUE3cUMsSUFBWSxNQUFNLGFBQWFuTCxFQUFBOEIsT0FBQSxHQUFXZ1gsRUFBQWdrQyxFQUFBOThDLEVBQUFvSixRQUFBbXlDLEVBQUF2RixFQUFBaDJDLEVBQUFvSixRQUFBbEwsRUFBQTRhLEVBQUE5WSxFQUFBb0osUUFBQXhHLEVBQUEyNEMsRUFBQXY3QyxFQUFBb0osUUFBQTB6QyxFQUFBNStDLEVBQUE4QixFQUFBb0osUUFBQTRzQyxFQUFBcHpDLEVBQUE1QyxFQUFBb0osUUFBQXpLLEVBQUE2eUQsUUFBQTE0QyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQUFrNkMsRUFBQTlHLEdBQTRHOEcsR0FBQTk4QyxFQUFBb0osUUFBQTRzQyxHQUFBaDJDLEVBQUFvSixRQUFBekssRUFBQTR5RCxPQUFBelUsRUFBQTlHLEdBQXdDLE1BQU0sYUFBYWgyQyxFQUFBOEIsT0FBQSxHQUFXZzdDLEdBQUE5OEMsRUFBQW9KLFFBQUE0c0MsR0FBQWgyQyxFQUFBb0osUUFBQXpLLEVBQUE0eUQsT0FBQXpVLEVBQUE5RyxHQUF5Q2w5QixFQUFBZ2tDLEVBQUE5OEMsRUFBQW9KLFFBQUFteUMsRUFBQXZGLEVBQUFoMkMsRUFBQW9KLFFBQUFsTCxFQUFBNGEsRUFBQTlZLEVBQUFvSixRQUFBeEcsRUFBQTI0QyxFQUFBdjdDLEVBQUFvSixRQUFBMHpDLEVBQUE1K0MsRUFBQThCLEVBQUFvSixRQUFBNHNDLEVBQUFwekMsRUFBQTVDLEVBQUFvSixRQUFBekssRUFBQTZ5RCxRQUFBMTRDLEVBQUF5aUMsRUFBQXI5QyxFQUFBMEUsRUFBQWs2QyxFQUFBOUcsR0FBMkcsTUFBTSxZQUFBaDJDLEVBQUE4QixPQUFBLElBQUFnN0MsR0FBQTk4QyxFQUFBb0osU0FBdUNwSixFQUFBOEIsT0FBQSxHQUFXZ1gsRUFBQWdrQyxFQUFBdkIsRUFBQXZGLEVBQUFoMkMsRUFBQW9KLFFBQUFsTCxFQUFBNGEsRUFBQTlZLEVBQUFvSixRQUFBeEcsRUFBQTI0QyxFQUFBdjdDLEVBQUFvSixRQUFBMHpDLEVBQUE1K0MsRUFBQTgzQyxFQUFBcHpDLEVBQUE1QyxFQUFBb0osUUFBQXpLLEVBQUE2eUQsUUFBQTE0QyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQUFrNkMsRUFBQTlHLEdBQXdGLE1BQU0sWUFBQWgyQyxFQUFBOEIsT0FBQSxJQUFBazBDLEdBQUFoMkMsRUFBQW9KLFNBQXVDcEosRUFBQThCLE9BQUEsR0FBV2dYLEVBQUFna0MsRUFBQTk4QyxFQUFBb0osUUFBQW15QyxFQUFBdkYsRUFBQTkzQyxFQUFBNGEsRUFBQTlZLEVBQUFvSixRQUFBeEcsRUFBQTI0QyxFQUFBdjdDLEVBQUFvSixRQUFBMHpDLEVBQUE1K0MsRUFBQThCLEVBQUFvSixRQUFBNHNDLEVBQUFwekMsRUFBQWpFLEVBQUE2eUQsUUFBQTE0QyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQUFrNkMsRUFBQTlHLEdBQXdGLE1BQU0sUUFBQTEzQyxFQUFBQyxFQUFBdS9DLEdBQUE5K0MsRUFBQVQsRUFBQXUvQyxFQUFBLEdBQUE5OUMsRUFBQW9ELE1BQUE5RSxHQUFBLEdBQUFVLEdBQUEsU0FBQTgrQyxHQUFBLEVBQXVELE1BQU0sUUFBQXBmLEVBQUExK0IsRUFBQXN4RCxNQUFBbjRDLEVBQUFzNEMsWUFBQXJVLEVBQUFqa0MsRUFBQXU0QyxPQUFBaHpCLEtBQUFqbUIsRUFBQTJrQyxHQUFxRCxNQUFNLGFBQWFwOUMsRUFBQThCLE9BQUEsSUFBQWdYLEVBQUFna0MsRUFBQXZCLEVBQUF2RixFQUFBaDJDLEVBQUFvSixRQUFBbEwsRUFBQTRhLEVBQUE5WSxFQUFBb0osUUFBQXhHLEVBQUEyNEMsRUFBQXY3QyxFQUFBb0osUUFBQTB6QyxFQUFBNStDLEVBQUE4QixFQUFBb0osUUFBQTRzQyxFQUFBcHpDLEdBQUEsSUFBQTVDLEVBQUE4QixPQUFBOUIsRUFBQW9KLFFBQUEsR0FBQXpLLEVBQUE2eUQsUUFBQTE0QyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQUFrNkMsRUFBQTlHLEdBQUEsSUFBQWgyQyxFQUFBOEIsU0FBNklnWCxFQUFBZ2tDLEVBQUE5OEMsRUFBQW9KLFFBQUFteUMsRUFBQXZGLEVBQUE5M0MsRUFBQTRhLEVBQUE5WSxFQUFBb0osUUFBQXhHLEVBQUEyNEMsRUFBQXY3QyxFQUFBb0osUUFBQTRzQyxFQUFBcHpDLEVBQUE1QyxFQUFBb0osUUFBQTB6QyxFQUFBNStDLEdBQUEsSUFBQThCLEVBQUE4QixPQUFBOUIsRUFBQW9KLFFBQUEsR0FBQXpLLEVBQUE2eUQsUUFBQTE0QyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQUFrNkMsRUFBQTlHLEdBQW1ILE1BQU0sYUFBYWgyQyxFQUFBOEIsT0FBQSxJQUFBZ1gsRUFBQWdrQyxFQUFBOThDLEVBQUFvSixRQUFBbXlDLEVBQUF2RixFQUFBOTNDLEVBQUE0YSxFQUFBOVksRUFBQW9KLFFBQUF4RyxFQUFBMjRDLEVBQUF2N0MsRUFBQW9KLFFBQUE0c0MsRUFBQXB6QyxFQUFBNUMsRUFBQW9KLFFBQUEwekMsRUFBQTUrQyxHQUFBLElBQUE4QixFQUFBOEIsT0FBQTlCLEVBQUFvSixRQUFBLEdBQUF6SyxFQUFBNnlELFFBQUExNEMsRUFBQXlpQyxFQUFBcjlDLEVBQUEwRSxFQUFBazZDLEVBQUE5RyxHQUFBLElBQUFoMkMsRUFBQThCLFNBQTZJZ1gsRUFBQWdrQyxFQUFBdkIsRUFBQXZGLEVBQUFoMkMsRUFBQW9KLFFBQUFsTCxFQUFBNGEsRUFBQTlZLEVBQUFvSixRQUFBeEcsRUFBQTI0QyxFQUFBdjdDLEVBQUFvSixRQUFBMHpDLEVBQUE1K0MsRUFBQThCLEVBQUFvSixRQUFBNHNDLEVBQUFwekMsR0FBQSxJQUFBNUMsRUFBQThCLE9BQUE5QixFQUFBb0osUUFBQSxHQUFBekssRUFBQTZ5RCxRQUFBMTRDLEVBQUF5aUMsRUFBQXI5QyxFQUFBMEUsRUFBQWs2QyxFQUFBOUcsR0FBbUgsTUFBTSxRQUFBK0gsRUFBQSxHQUFBaHRDLFFBQUFuTCxJQUFBLFNBQUE0VCxFQUFBMVEsTUFBQSxzQkFBQWkxQyxLQUFBLElBQUEvOUMsRUFBQW9ELEtBQUEyNkMsRUFBQSxLQUFBQSxFQUFBLEtBQUF6L0MsRUFBQUMsRUFBQXUvQyxNQUFBLEVBQUE5OUMsRUFBQW9ELEtBQUEsS0FBQTI2QyxFQUFBLEtBQUF6L0MsRUFBQSxNQUFBeS9DLEVBQUEsS0FBQXovQyxFQUFBQyxFQUFBdS9DLE1BQUEsRUFBQTk5QyxFQUFBb0QsS0FBQSxNQUFBMjZDLEVBQUEsS0FBQXovQyxFQUFBLE9BQUFBLEVBQUFDLEVBQUF1L0MsR0FBQTkrQyxFQUFBVCxFQUFBdS9DLEVBQUEsR0FBQWIsRUFBQTErQyxFQUFBdS9DLEVBQUEsR0FBQTFqQixFQUFBNzdCLEVBQUF1L0MsRUFBQSxHQUFBQSxHQUFBLEVBQUE5OUMsRUFBQW9ELE1BQUE5RSxHQUFBLEdBQUFVLEdBQUEsR0FBQWkrQyxHQUFBLEVBQUE3aUIsR0FBQSxVQUFtbkIzaEIsQ0FBQWxhLEdBQUFpYixFQUFBbTRDLGFBQUFsekIsRUFBQTkvQixFQUF3dkUsU0FBQWl6RCxHQUFBejRDLEVBQUFLLEdBQWlCLElBQUFqYixFQUFBQyxFQUFBcXhELEdBQUFsdUQsUUFBQXdYLEdBQXNCLE9BQUEzYSxHQUFBLElBQUFELEVBQUFDLE1BQUFnYixFQUFBN1gsUUFBQXdYLEtBQUEsRUFBQTVhLEVBQUFDLEVBQUFxeEQsR0FBQS90RCxRQUFBdkQsRUFBQXN4RCxHQUFBL3RELE9BQUEwWCxFQUFBMVgsT0FBQTBYLEVBQUFwVyxLQUFBK1YsSUFBQTVhLEVBQXVkLFNBQUFzekQsR0FBQTE0QyxFQUFBSyxFQUFBamIsR0FBbUIsUUFBQUMsS0FBWTJNLEVBQUEsRUFBS0EsRUFBQWdPLEVBQUFyWCxPQUFXcUosR0FBQSxHQUFNLElBQUFzTixFQUFBVSxFQUFBaE8sR0FBQTJOLEVBQUFVLEVBQUFmLEVBQUFoYSxXQUF1QixJQUFBcWEsR0FBQXdwQyxFQUFBeHBDLEVBQUFMLEVBQUF0WixTQUFBLFFBQUFzWixFQUFBaEssT0FBQXFLLEVBQUE4NEMsR0FBQTk0QyxFQUFBdmEsSUFBQUMsRUFBQWlhLEVBQUFxM0MsS0FBaUVyeEQsS0FBQWdhLEVBQUFoYSxLQUFBZ1EsS0FBQWdLLEVBQUFoSyxLQUFBdFAsTUFBQTJaLElBQWtDLE9BQUF0YSxFQUFTLFNBQUFzekQsR0FBQTM0QyxFQUFBSyxHQUFpQixJQUFBamIsRUFBQSxJQUFBd3pELEdBQUFDLE9BQUEsYUFBaUN2ekQsS0FBQSxPQUFBZ1EsS0FBQSxPQUFBdFAsWUFBb0MsT0FBQVosRUFBQTB6RCxLQUFBSixHQUFBN0IsR0FBQTcyQyxFQUFBSyxHQUFBamIsRUFBMkIsU0FBQTJ6RCxHQUFBLzRDLEdBQWUsSUFBQUssRUFBQSxJQUFBdTRDLEdBQUFDLE9BQUEsbUJBQXVDdnpELEtBQUEsV0FBQWdRLEtBQUEsUUFBQXRQLFlBQXlDLE9BQUFxYSxFQUFBMjRDLFdBQW9CMXpELEtBQUEsWUFBQWdRLEtBQUEsUUFBQXRQLE1BQUFnYSxJQUFzQ0ssRUFBZ2YsU0FBQTQ0QyxHQUFBajVDLEdBQWUsSUFBQUssS0FBQWpiLEVBQUE0YSxFQUFBKzFDLEtBQWtCMTFDLEVBQUFwVyxNQUFRM0UsS0FBQSxRQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQWdhLEVBQUF3NEMsZUFBa0QsUUFBQW56RCxFQUFBLEVBQUEyTSxFQUFBLEVBQUFzTixFQUFBLEVBQW9CQSxFQUFBbGEsRUFBQXd1RCxTQUFBanJELE9BQW9CMlcsR0FBQSxHQUFNLElBQUFLLE9BQUEsRUFBQXlpQyxPQUFBLEVBQUFyOUMsRUFBQUssRUFBQXd1RCxTQUFBdDBDLEdBQXNDLFNBQUF2YSxFQUFBdVEsS0FBQSxDQUFpQixJQUFBN0wsRUFBQSxJQUFBcWYsRUFBQSxJQUFnQi9qQixHQUFHdVEsS0FBQSxJQUFBMnJCLEVBQUFsOEIsRUFBQWs4QixFQUFBcUUsRUFBQXZnQyxFQUFBdWdDLEVBQUFrdUIsR0FBQS9wRCxFQUFBcEUsRUFBQXlqQixFQUFBL2pCLEVBQUF5dUQsR0FBQUMsR0FBQWhxRCxFQUFBdUksRUFBQThXLEVBQUEvakIsRUFBQTB1RCxHQUFBQyxHQUFBanFELEVBQUExRSxFQUFBazhCLEVBQUFuWSxFQUFBL2pCLEVBQUF5dUQsR0FBQUcsR0FBQWxxRCxFQUFBMUUsRUFBQXVnQyxFQUFBeGMsRUFBQS9qQixFQUFBMHVELElBQWtGLFNBQUExdUQsRUFBQXVRLEtBQUFxSyxFQUFBMVQsS0FBQW9TLE1BQUF0WixFQUFBazhCLEVBQUE1N0IsR0FBQSs4QyxFQUFBbjJDLEtBQUFvUyxNQUFBdFosRUFBQXVnQyxFQUFBdHpCLEdBQUFxTyxFQUFBcFcsTUFBZ0UzRSxLQUFBLEtBQUFnUSxLQUFBLFNBQUF0UCxNQUFBMlosSUFBZ0NVLEVBQUFwVyxNQUFVM0UsS0FBQSxLQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQW84QyxJQUFnQy9oQyxFQUFBcFcsTUFBVTNFLEtBQUEsVUFBQWdRLEtBQUEsS0FBQXRQLE1BQUEsS0FBa0NYLEVBQUE0RyxLQUFBb1MsTUFBQXRaLEVBQUFrOEIsR0FBQWp2QixFQUFBL0YsS0FBQW9TLE1BQUF0WixFQUFBdWdDLFFBQXNDLFNBQUF2Z0MsRUFBQXVRLEtBQUFxSyxFQUFBMVQsS0FBQW9TLE1BQUF0WixFQUFBazhCLEVBQUE1N0IsR0FBQSs4QyxFQUFBbjJDLEtBQUFvUyxNQUFBdFosRUFBQXVnQyxFQUFBdHpCLEdBQUFxTyxFQUFBcFcsTUFBcUUzRSxLQUFBLEtBQUFnUSxLQUFBLFNBQUF0UCxNQUFBMlosSUFBZ0NVLEVBQUFwVyxNQUFVM0UsS0FBQSxLQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQW84QyxJQUFnQy9oQyxFQUFBcFcsTUFBVTNFLEtBQUEsVUFBQWdRLEtBQUEsS0FBQXRQLE1BQUEsSUFBaUNYLEVBQUE0RyxLQUFBb1MsTUFBQXRaLEVBQUFrOEIsR0FBQWp2QixFQUFBL0YsS0FBQW9TLE1BQUF0WixFQUFBdWdDLFFBQXNDLFNBQUF2Z0MsRUFBQXVRLEtBQUEsQ0FBc0IsSUFBQXRRLEVBQUFpSCxLQUFBb1MsTUFBQXRaLEVBQUF5dUQsR0FBQW51RCxHQUFBRixFQUFBOEcsS0FBQW9TLE1BQUF0WixFQUFBMHVELEdBQUF6aEQsR0FBQXhMLEVBQUF5RixLQUFBb1MsTUFBQXRaLEVBQUEydUQsR0FBQTN1RCxFQUFBeXVELElBQUFodUQsRUFBQXlHLEtBQUFvUyxNQUFBdFosRUFBQTR1RCxHQUFBNXVELEVBQUEwdUQsSUFBOEY5ekMsRUFBQTFULEtBQUFvUyxNQUFBdFosRUFBQWs4QixFQUFBbDhCLEVBQUEydUQsSUFBQXRSLEVBQUFuMkMsS0FBQW9TLE1BQUF0WixFQUFBdWdDLEVBQUF2Z0MsRUFBQTR1RCxJQUFBdHpDLEVBQUFwVyxNQUFzRDNFLEtBQUEsTUFBQWdRLEtBQUEsU0FBQXRQLE1BQUFoQixJQUFpQ3FiLEVBQUFwVyxNQUFVM0UsS0FBQSxNQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQWIsSUFBaUNrYixFQUFBcFcsTUFBVTNFLEtBQUEsTUFBQWdRLEtBQUEsU0FBQXRQLE1BQUFRLElBQWlDNlosRUFBQXBXLE1BQVUzRSxLQUFBLE1BQUFnUSxLQUFBLFNBQUF0UCxNQUFBUixJQUFpQzZhLEVBQUFwVyxNQUFVM0UsS0FBQSxLQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQTJaLElBQWdDVSxFQUFBcFcsTUFBVTNFLEtBQUEsS0FBQWdRLEtBQUEsU0FBQXRQLE1BQUFvOEMsSUFBZ0MvaEMsRUFBQXBXLE1BQVUzRSxLQUFBLFlBQUFnUSxLQUFBLEtBQUF0UCxNQUFBLElBQW1DWCxFQUFBNEcsS0FBQW9TLE1BQUF0WixFQUFBazhCLEdBQUFqdkIsRUFBQS9GLEtBQUFvUyxNQUFBdFosRUFBQXVnQyxJQUF1QyxPQUFBamxCLEVBQUFwVyxNQUFlM0UsS0FBQSxVQUFBZ1EsS0FBQSxLQUFBdFAsTUFBQSxLQUFrQ3FhLEVBQXE4TCxTQUFBNjRDLEdBQUFsNUMsRUFBQUssRUFBQWpiLEdBQW1CLE9BQUE0YSxHQUFVLGtCQUFBSyxFQUFBLFlBQWdDLEdBQUFqYixFQUFBLE9BQUFBLEVBQUFpYixHQUFpQixNQUFNLGNBQUF5dkIsR0FBQXp2QixHQUFvQixjQUFBaXZCLEdBQUFqdkIsSUFBcUIsU0FBQTg0QyxHQUFBbjVDLEVBQUFLLEVBQUFqYixHQUFtQixPQUFBNGEsR0FBVSxjQUFBbzVDLEdBQWlCLGNBQUFDLEdBQUFqMEQsSUFBQWswRCxHQUFBajVDLEdBQTJCLGNBQUFBLEdBQUEsS0FBQUEsRUFBQSxPQUFBKzRDLElBQWtlLFNBQUFHLEdBQUF2NUMsR0FBZSxJQUFBSyxLQUFTLFFBQUFqYixLQUFBNGEsRUFBQUssRUFBQUwsRUFBQTVhLElBQUFrVyxTQUFBbFcsR0FBbUMsT0FBQWliLEVBQVMsU0FBQW01QyxHQUFBeDVDLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLEdBQXlCLFdBQUFzNUMsR0FBQUMsT0FBQSxlQUFvQ3Z6RCxLQUFBLGFBQUFnUSxLQUFBLFNBQUF0UCxNQUFBZ2EsSUFBMEMxYSxLQUFBLGFBQUFnUSxLQUFBLFNBQUF0UCxNQUFBcWEsSUFBMEMvYSxLQUFBLGFBQUFnUSxLQUFBLFNBQUF0UCxNQUFBWixJQUEwQ0UsS0FBQSxTQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQVgsSUFBc0NDLEtBQUEsU0FBQWdRLEtBQUEsU0FBQXRQLE1BQUFnTSxJQUFzQzFNLEtBQUEsU0FBQWdRLEtBQUEsU0FBQXRQLE1BQUFzWixLQUE0TCxTQUFBYyxHQUFBSixFQUFBSyxHQUFpQixJQUFBamIsRUFBdEssU0FBQTRhLEVBQUFLLEdBQWlCLElBQUFqYixFQUFBNGEsRUFBQXJYLE9BQUF0RCxFQUFBZ2IsRUFBQTFYLE9BQUF2RCxFQUFBLEVBQThCNGEsRUFBQSxRQUFBaE8sRUFBQSxFQUFjQSxFQUFBM00sRUFBSTJNLElBQUEsS0FBU0EsRUFBQTNNLEVBQUkyTSxJQUFBLENBQUssUUFBQXNOLEVBQUEsRUFBWUEsRUFBQWxhLEVBQUlrYSxJQUFBLEdBQUFlLEVBQUFyTyxFQUFBc04sS0FBQVUsRUFBQVYsR0FBQSxTQUFBVSxFQUFnQyxPQUFBaE8sRUFBUyxTQUEwQitOLENBQUFDLEVBQUFLLEdBQWMsR0FBQWpiLEVBQUEsR0FBUUEsRUFBQWliLEVBQUExWCxPQUFXLFFBQUF0RCxFQUFBLEVBQUEyTSxFQUFBZ08sRUFBQXJYLE9BQXVCdEQsRUFBQTJNLElBQUkzTSxFQUFBZ2IsRUFBQXBXLEtBQUErVixFQUFBM2EsSUFBaUIsT0FBQUQsRUFBaW9PLFNBQUFxMEQsR0FBQXo1QyxHQUFlLE9BQUEvVCxLQUFBUSxJQUFBdVQsR0FBQS9ULEtBQUFRLElBQUEsS0FBaUMsU0FBQWl0RCxHQUFBMTVDLEdBQWUsS0FBS0EsRUFBQXJYLE9BQUEsTUFBY3FYLEVBQUEvVixLQUFBLEdBQVcsUUFBQW9XLEVBQUEsRUFBQWpiLEVBQUEsRUFBZ0JBLEVBQUE0YSxFQUFBclgsT0FBV3ZELEdBQUEsRUFBQWliLElBQUFMLEVBQUE1YSxJQUFBLEtBQUE0YSxFQUFBNWEsRUFBQSxTQUFBNGEsRUFBQTVhLEVBQUEsT0FBQTRhLEVBQUE1YSxFQUFBLEdBQW1ELE9BQUFpYixHQUFBcFUsS0FBQUssSUFBQSxNQUF5QixTQUFBcXRELEdBQUEzNUMsRUFBQUssRUFBQWpiLEVBQUFDLEdBQXFCLFdBQUF1ekQsR0FBQUMsT0FBQSxpQkFBc0N2ekQsS0FBQSxNQUFBZ1EsS0FBQSxNQUFBdFAsV0FBQSxJQUFBZ2EsSUFBQSxLQUE4QzFhLEtBQUEsV0FBQWdRLEtBQUEsUUFBQXRQLFdBQUEsSUFBQXFhLElBQUEsSUFBb0QvYSxLQUFBLFNBQUFnUSxLQUFBLFFBQUF0UCxXQUFBLElBQUFaLElBQUEsSUFBa0RFLEtBQUEsU0FBQWdRLEtBQUEsUUFBQXRQLFdBQUEsSUFBQVgsSUFBQSxLQUFtRCxTQUFBdTBELEdBQUE1NUMsR0FBZSxJQUFBSyxFQUFBLElBQUF1NEMsR0FBQWlCLE1BQUEsU0FBNEJ2MEQsS0FBQSxVQUFBZ1EsS0FBQSxNQUFBdFAsTUFBQSxTQUF5Q1YsS0FBQSxZQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUF5Q1YsS0FBQSxjQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUEyQ1YsS0FBQSxnQkFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBNkNWLEtBQUEsYUFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsS0FBMkNxYSxFQUFBeTNDLE9BQUE5M0MsRUFBQUssRUFBQXk1QyxVQUFBOTVDLEVBQUFyWCxPQUFnQyxJQUFBdkQsRUFBQTZHLEtBQUFLLElBQUEsRUFBQW10RCxHQUFBcDVDLEVBQUF5NUMsWUFBa0N6NUMsRUFBQTA1QyxZQUFBLEdBQUEzMEQsRUFBQWliLEVBQUEyNUMsY0FBQVAsR0FBQXIwRCxHQUFBaWIsRUFBQTQ1QyxXQUFBLEdBQUE1NUMsRUFBQXk1QyxVQUFBejVDLEVBQUEwNUMsWUFBbUYsUUFBQTEwRCxLQUFBMk0sS0FBQXNOLEVBQUFlLEVBQUE2NUMsU0FBQVAsS0FBQU8sU0FBQTc1QyxFQUFBeTVDLFVBQXlEeDZDLEVBQUEsTUFBT0EsR0FBQSxFQUFBdE4sRUFBQS9ILE1BQWMzRSxLQUFBLFVBQUFnUSxLQUFBLE9BQUF0UCxNQUFBLElBQXFDLFFBQUEyWixFQUFBLEVBQVlBLEVBQUFLLEVBQUFyWCxPQUFXZ1gsR0FBQSxHQUFNLElBQUF5aUMsRUFBQXBpQyxFQUFBTCxHQUFXdzBDLEdBQUFnRyxTQUFBLElBQUEvWCxFQUFBMlIsVUFBQXByRCxPQUFBLGFBQUF5NUMsRUFBQTJSLFVBQUEsZ0JBQTRFLElBQUFodkQsRUFBQXE5QyxFQUFBOFgsU0FBQXp3RCxFQUFBa3dELEdBQUF2WCxFQUFBMlIsVUFBQTJGLEdBQUF0WCxFQUFBZ1ksVUFBQTk2QyxFQUFBdmEsR0FBc0QsSUFBQU0sRUFBQTRFLE1BQVkzRSxLQUFBbUUsRUFBQWdwRCxJQUFBLGdCQUFBbjlDLEtBQUEsU0FBQXRQLE1BQUF5RCxJQUFpRHVJLEVBQUEvSCxNQUFVM0UsS0FBQTg4QyxFQUFBMlIsVUFBQSxTQUFBeitDLEtBQUEsU0FBQXRQLE1BQUFvOEMsSUFBZ0Q5aUMsR0FBQXZhLEVBQUFvdkQsR0FBQWdHLFVBQUEzYyxNQUFBbCtCLEdBQUEsZ0RBQTZFQSxFQUFBLE1BQU9BLEdBQUEsRUFBQXROLEVBQUEvSCxNQUFjM0UsS0FBQSxVQUFBZ1EsS0FBQSxPQUFBdFAsTUFBQSxJQUFxQyxPQUFBWCxFQUFBMnBELEtBQUEsU0FBQWh2QyxFQUFBSyxHQUE0QixPQUFBTCxFQUFBaGEsTUFBQXlzRCxJQUFBcHlDLEVBQUFyYSxNQUFBeXNELElBQUEsT0FBb0NweUMsRUFBQTJ6QyxPQUFBM3pDLEVBQUEyekMsT0FBQXZtQyxPQUFBcG9CLEdBQUFnYixFQUFBMnpDLE9BQUEzekMsRUFBQTJ6QyxPQUFBdm1DLE9BQUF6YixHQUFBcU8sRUFBNEQsU0FBQWc2QyxHQUFBcjZDLEVBQUFLLEVBQUFqYixHQUFtQixRQUFBQyxFQUFBLEVBQVlBLEVBQUFnYixFQUFBMVgsT0FBV3RELEdBQUEsR0FBTSxJQUFBMk0sRUFBQWdPLEVBQUFzNkMsaUJBQUFqNkMsRUFBQWhiLElBQStCLEdBQUEyTSxFQUFBLEVBQVEsT0FBQWdPLEVBQUFrMEMsT0FBQXR1RCxJQUFBb00sR0FBQXVvRCxhQUFxQyxPQUFBbjFELEVBQStxRyxTQUFBbzFELEdBQUF4NkMsRUFBQUssR0FBaUIsUUFBQWpiLEVBQUEsRUFBQUMsRUFBQTJhLEVBQUFyWCxPQUFBLEVBQXlCdkQsR0FBQUMsR0FBSyxDQUFFLElBQUEyTSxFQUFBNU0sRUFBQUMsSUFBQSxFQUFBaWEsRUFBQVUsRUFBQWhPLEdBQUF5Z0QsSUFBeUIsR0FBQW56QyxJQUFBZSxFQUFBLE9BQUFyTyxFQUFrQnNOLEVBQUFlLEVBQUFqYixFQUFBNE0sRUFBQSxFQUFBM00sRUFBQTJNLEVBQUEsRUFBZ0IsT0FBQTVNLEVBQUEsRUFBVyxTQUFBcTFELEdBQUF6NkMsRUFBQUssR0FBaUIsUUFBQWpiLEVBQUEsRUFBQUMsRUFBQTJhLEVBQUFyWCxPQUFBLEVBQXlCdkQsR0FBQUMsR0FBSyxDQUFFLElBQUEyTSxFQUFBNU0sRUFBQUMsSUFBQSxFQUFBaWEsRUFBQVUsRUFBQWhPLEdBQXFCLEdBQUFzTixJQUFBZSxFQUFBLE9BQUFyTyxFQUFrQnNOLEVBQUFlLEVBQUFqYixFQUFBNE0sRUFBQSxFQUFBM00sRUFBQTJNLEVBQUEsRUFBZ0IsT0FBQTVNLEVBQUEsRUFBVyxTQUFBczFELEdBQUExNkMsRUFBQUssR0FBaUIsUUFBQWpiLEVBQUFDLEVBQUEsRUFBQTJNLEVBQUFnTyxFQUFBclgsT0FBQSxFQUEyQnRELEdBQUEyTSxHQUFLLENBQUUsSUFBQXNOLEVBQUFqYSxFQUFBMk0sSUFBQSxFQUFxQjJOLEdBQVB2YSxFQUFBNGEsRUFBQVYsSUFBT3RLLE1BQWMsR0FBQTJLLElBQUFVLEVBQUEsT0FBQWpiLEVBQWtCdWEsRUFBQVUsRUFBQWhiLEVBQUFpYSxFQUFBLEVBQUF0TixFQUFBc04sRUFBQSxFQUFnQixHQUFBamEsRUFBQSxTQUFBRCxFQUFBNGEsRUFBQTNhLEVBQUEsR0FBQWdiLEVBQUFqYixFQUFBcUwsSUFBQSxFQUFBckwsRUFBbUMsU0FBQXUxRCxHQUFBMzZDLEVBQUFLLEdBQWlCaFosS0FBQWt1RCxLQUFBdjFDLEVBQUEzWSxLQUFBMHNELFVBQUExekMsRUFBNkIsU0FBQXU2QyxHQUFBNTZDLEdBQWUyNkMsR0FBQXoxRCxLQUFBbUMsS0FBQTJZLEVBQUEsUUFBdUIsU0FBQTY2QyxHQUFBNzZDLEdBQWUyNkMsR0FBQXoxRCxLQUFBbUMsS0FBQTJZLEVBQUEsUUFBdUIsU0FBQTg2QyxHQUFBOTZDLEVBQUFLLEdBQWlCLElBQUFqYixFQUFBNGEsRUFBQXJYLE9BQWUsR0FBQXZELElBQUFpYixFQUFBMVgsT0FBQSxTQUF5QixRQUFBdEQsRUFBQSxFQUFZQSxFQUFBRCxFQUFJQyxJQUFBLEdBQUEyYSxFQUFBM2EsS0FBQWdiLEVBQUFoYixHQUFBLFNBQTRCLFNBQVMsU0FBQTAxRCxHQUFBLzZDLEVBQUFLLEVBQUFqYixHQUFtQixRQUFBQyxFQUFBMmEsRUFBQWcxQyxVQUFBaGpELEVBQUEsRUFBMEJBLEVBQUEzTSxFQUFBc0QsT0FBV3FKLElBQUEsQ0FBSyxJQUFBc04sRUFBQWphLEVBQUEyTSxHQUFXLEdBQUFzTixFQUFBMDdDLGNBQUEzNkMsRUFBQSxPQUFBZixFQUE4QixHQUFBbGEsRUFBQSxPQUFBQyxFQUFBNEUsS0FBQTdFLEtBQXVFLFNBQUE2MUQsR0FBQWo3QyxHQUFlLFFBQUFLLEVBQUEsSUFBQTRpQyxZQUFBampDLEVBQUFyWCxRQUFBdkQsRUFBQSxJQUFBbWxCLFdBQUFsSyxHQUFBaGIsRUFBQSxFQUE0REEsRUFBQTJhLEVBQUFyWCxTQUFXdEQsRUFBQUQsRUFBQUMsR0FBQTJhLEVBQUEzYSxHQUFjLE9BQUFnYixFQUFTLFNBQUE2NkMsR0FBQWw3QyxHQUFlLFFBQUFLLEVBQUEsSUFBQXJPLEVBQUFnTyxFQUFBa2pDLFlBQUE5OUMsRUFBQSxJQUFBbWxCLFdBQUF2SyxHQUFBM2EsRUFBQSxFQUFzREEsRUFBQWdiLEVBQUExWCxTQUFXdEQsRUFBQWdiLEVBQUFoYixHQUFBRCxFQUFBQyxHQUFjLE9BQUFnYixFQUFTLFNBQUE4NkMsR0FBQW43QyxFQUFBSyxHQUFpQixJQUFBTCxFQUFBLE1BQUFLLEVBQWMsU0FBQSs2QyxHQUFBcDdDLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBdUIsSUFBQXNOLEVBQU0sT0FBQWUsRUFBQWhiLEdBQUEsR0FBQWlhLEVBQUFVLEVBQUF3MkMsWUFBQSxJQUFBbjJDLEVBQUFyTyxLQUFBc04sUUFBQWxhLEVBQUFrYSxNQUFBZSxFQUFBck8sR0FBQSxFQUFBNU0sSUFBQTRhLEVBQUFxN0MsYUFBQS83QyxFQUFzRixTQUFBZzhDLEdBQUF0N0MsRUFBQUssRUFBQWpiLEdBQW1CLElBQXVKNE0sRUFBQXNOLEVBQXZKamEsRUFBQSxJQUFBNHdELEdBQUFRLE9BQUFwMkMsRUFBQWpiLEdBQStKLEdBQXRJNGEsRUFBQXU3QyxpQkFBQWwyRCxFQUFBZzJELGFBQUFyN0MsRUFBQXc3QyxNQUFBbjJELEVBQUFnMkQsYUFBQXI3QyxFQUFBeTdDLE1BQUFwMkQsRUFBQWcyRCxhQUFBcjdDLEVBQUEwN0MsTUFBQXIyRCxFQUFBZzJELGFBQUFyN0MsRUFBQTI3QyxNQUFBdDJELEVBQUFnMkQsYUFBc0lyN0MsRUFBQXU3QyxpQkFBQSxHQUF5QixRQUFBNTdDLEVBQUFLLEVBQUE0N0MsbUJBQUF4WixFQUFBLEVBQW1DQSxFQUFBcGlDLEVBQUF1N0MsaUJBQXFCblosR0FBQSxFQUFBemlDLEVBQUExVixLQUFBNUUsRUFBQXcyRCxlQUE2Qjc3QyxFQUFBODdDLGtCQUFBejJELEVBQUF3MkQsY0FBQTc3QyxFQUFBKzdDLGdCQUFzRCxRQUFBaDNELEVBQUEsRUFBWUEsRUFBQWliLEVBQUE4N0Msa0JBQXNCLzJELEdBQUEsRUFBQWliLEVBQUErN0MsYUFBQTl4RCxLQUFBNUUsRUFBQW14RCxhQUF3QyxJQUFBL3NELEVBQUFrVyxJQUFBaFgsT0FBQSxLQUFzQnFKLEtBQUssUUFBQThXLEVBQUEsRUFBWUEsRUFBQXJmLEVBQUlxZixHQUFBLEtBQUF4SixFQUFBamEsRUFBQW14RCxZQUFBeGtELEVBQUEvSCxLQUFBcVYsSUFBQSxFQUFBQSxHQUFBLFVBQUF0YSxFQUFBSyxFQUFBbXhELFlBQUFyeEQsRUFBQSxFQUFzRUEsRUFBQUgsRUFBSUcsR0FBQSxFQUFBNk0sRUFBQS9ILEtBQUFxVixHQUFBd0osR0FBQSxFQUFvQixHQUFBcXJDLEdBQUFnRyxTQUFBbm9ELEVBQUFySixTQUFBYyxFQUFBLGNBQUFrVyxFQUFBaFgsT0FBQSxHQUFzRCxJQUFBbkMsRUFBQWhCLEtBQVcsR0FBQWlFLEVBQUEsR0FBUSxRQUFBNUMsRUFBQSxFQUFZQSxFQUFBNEMsRUFBSTVDLEdBQUEsRUFBQXlZLEVBQUF0TixFQUFBbkwsSUFBQUwsTUFBZ0J3MUQsV0FBQSxFQUFBMThDLEdBQUE5WSxFQUFBeTFELG1CQUFBdDhDLEVBQUFuWCxRQUFBM0IsSUFBQSxFQUFBckIsRUFBQXlFLEtBQUF6RCxHQUFrRSxRQUFBc1YsRUFBQSxFQUFBalcsRUFBQSxFQUFnQkEsRUFBQTRELEVBQUk1RCxHQUFBLEVBQUF5WixFQUFBdE4sRUFBQW5NLElBQUFXLEVBQUFoQixFQUFBSyxJQUFBbzdCLEVBQUFtNkIsR0FBQS8xRCxFQUFBaWEsRUFBQXhELEVBQUEsTUFBQUEsRUFBQXRWLEVBQUF5NkIsRUFBNEMsUUFBQW42QixFQUFBLEVBQUFiLEVBQUEsRUFBZ0JBLEVBQUF3RCxFQUFJeEQsR0FBQSxFQUFBcVosRUFBQXROLEVBQUEvTCxJQUFBTyxFQUFBaEIsRUFBQVMsSUFBQXEvQixFQUFBODFCLEdBQUEvMUQsRUFBQWlhLEVBQUF4WSxFQUFBLE1BQUFBLEVBQUFOLEVBQUE4K0IsRUFBNEN0bEIsRUFBQWs4QyxPQUFBMTJELE9BQVd3YSxFQUFBazhDLGVBQWlCLE9BQUFsOEMsRUFBQXU3QyxpQkFBQXY3QyxFQUFBazhDLGNBQTJDLENBQUtsOEMsRUFBQW04QyxhQUFBLEVBQUFuOEMsRUFBQWs4QyxVQUFBbDhDLEVBQUFvOEMsY0FBNkMsUUFBQXpZLEdBQUEsRUFBYUEsR0FBRSxDQUFFM3hDLEVBQUEzTSxFQUFBdzJELGNBQWtCLElBQUFoZixHQUFPeVksV0FBQWp3RCxFQUFBdzJELGNBQUFRLE9BQUEsRUFBQUMsUUFBQSxFQUFBQyxRQUFBLEVBQUFDLE9BQUEsRUFBQXo5QyxHQUFBLEVBQUEwOUMsR0FBQSxJQUE0RSxFQUFBenFELEdBQUEsS0FBQUEsR0FBQSxHQUFBNnFDLEVBQUE5OUIsR0FBQTFaLEVBQUFnMkQsYUFBQXhlLEVBQUE0ZixHQUFBcDNELEVBQUFnMkQsY0FBQXhlLEVBQUE2ZixlQUFBcjNELEVBQUF3MkQsY0FBQXgyRCxFQUFBdzJELGdCQUFBLEVBQUE3cEQsR0FBQSxHQUFBNnFDLEVBQUE5OUIsR0FBQTFaLEVBQUFzM0QsWUFBQTlmLEVBQUE0ZixHQUFBcDNELEVBQUFzM0QsYUFBQTlmLEVBQUE2ZixlQUFBcjNELEVBQUFteEQsWUFBQW54RCxFQUFBbXhELGNBQUEsRUFBQXhrRCxHQUFBLEVBQUE2cUMsRUFBQXdmLE9BQUF4ZixFQUFBMmYsT0FBQW4zRCxFQUFBdTNELGdCQUFBLEdBQUE1cUQsR0FBQSxHQUFBNnFDLEVBQUF3ZixPQUFBaDNELEVBQUF1M0QsZUFBQS9mLEVBQUEyZixPQUFBbjNELEVBQUF1M0QsaUJBQUEsSUFBQTVxRCxHQUFBLElBQUE2cUMsRUFBQXdmLE9BQUFoM0QsRUFBQXUzRCxlQUFBL2YsRUFBQXlmLFFBQUFqM0QsRUFBQXUzRCxlQUFBL2YsRUFBQTBmLFFBQUFsM0QsRUFBQXUzRCxlQUFBL2YsRUFBQTJmLE9BQUFuM0QsRUFBQXUzRCxnQkFBQTU4QyxFQUFBbzhDLFdBQUFueUQsS0FBQTR5QyxHQUFBOEcsS0FBQSxHQUFBM3hDLEdBQTJjLE9BQUFBLEVBQUEsQ0FBVWdPLEVBQUE4N0Msa0JBQUF6MkQsRUFBQXcyRCxjQUFBNzdDLEVBQUErN0MsZ0JBQXNELFFBQUFqWSxFQUFBLEVBQVlBLEVBQUE5akMsRUFBQTg3QyxrQkFBc0JoWSxHQUFBLEVBQUE5akMsRUFBQSs3QyxhQUFBOXhELEtBQUE1RSxFQUFBbXhELGVBQTBDLFNBQUFxRyxHQUFBNzhDLEVBQUFLLEdBQWlCLFFBQUFqYixLQUFBQyxFQUFBLEVBQWlCQSxFQUFBMmEsRUFBQXJYLE9BQVd0RCxHQUFBLEdBQU0sSUFBQTJNLEVBQUFnTyxFQUFBM2EsR0FBQWlhLEdBQWMyaEIsRUFBQTVnQixFQUFBZzhDLE9BQUFycUQsRUFBQWl2QixFQUFBNWdCLEVBQUFpOEMsUUFBQXRxRCxFQUFBc3pCLEVBQUFqbEIsRUFBQXRCLEdBQUF1bUIsRUFBQWpsQixFQUFBazhDLFFBQUF2cUQsRUFBQWl2QixFQUFBNWdCLEVBQUFtOEMsT0FBQXhxRCxFQUFBc3pCLEVBQUFqbEIsRUFBQW84QyxHQUFBVCxRQUFBaHFELEVBQUFncUQsUUFBQUMsbUJBQUFqcUQsRUFBQWlxRCxvQkFBK0g3MkQsRUFBQTZFLEtBQUFxVixHQUFVLE9BQUFsYSxFQUFvTixTQUFBMDNELEdBQUE5OEMsR0FBZSxJQUFBSyxFQUFBLElBQUF4YSxFQUFZLElBQUFtYSxFQUFBLE9BQUFLLEVBQWUsUUFBQWpiLEVBQXJQLFNBQUE0YSxHQUFlLFFBQUFLLEtBQUFqYixLQUFBQyxFQUFBLEVBQXNCQSxFQUFBMmEsRUFBQXJYLE9BQVd0RCxHQUFBLEdBQU0sSUFBQTJNLEVBQUFnTyxFQUFBM2EsR0FBV0QsRUFBQTZFLEtBQUErSCxLQUFBaXFELHFCQUFBNTdDLEVBQUFwVyxLQUFBN0UsU0FBaUQsT0FBQSt1RCxHQUFBZ0csU0FBQSxJQUFBLzBELEVBQUF1RCxPQUFBLHVEQUFBMFgsRUFBbUkwOEMsQ0FBQS84QyxHQUFBM2EsRUFBQSxFQUFvQkEsRUFBQUQsRUFBQXVELFNBQVd0RCxFQUFBLENBQUssSUFBQTJNLEVBQUE1TSxFQUFBQyxHQUFBaWEsRUFBQSxLQUFBSyxFQUFBM04sSUFBQXJKLE9BQUEsR0FBQXk1QyxFQUFBcHdDLEVBQUEsR0FBeUMsR0FBQTJOLEVBQUFxOEMsUUFBQTM3QyxFQUFBdTNDLE9BQUFqNEMsRUFBQXNoQixFQUFBdGhCLEVBQUEybEIsUUFBK0IsR0FBQThjLEVBQUE0WixRQUFBMzdDLEVBQUF1M0MsT0FBQXhWLEVBQUFuaEIsRUFBQW1oQixFQUFBOWMsT0FBb0MsQ0FBSyxJQUFBdmdDLEdBQU9rOEIsRUFBQSxJQUFBdGhCLEVBQUFzaEIsRUFBQW1oQixFQUFBbmhCLEdBQUFxRSxFQUFBLElBQUEzbEIsRUFBQTJsQixFQUFBOGMsRUFBQTljLElBQStCamxCLEVBQUF1M0MsT0FBQTd5RCxFQUFBazhCLEVBQUFsOEIsRUFBQXVnQyxHQUFrQixRQUFBNzdCLEVBQUEsRUFBWUEsRUFBQXVJLEVBQUFySixTQUFXYyxFQUFBLEdBQUE2VixFQUFBSyxJQUFBeWlDLElBQUFwd0MsR0FBQXZJLEVBQUEsR0FBQXVJLEVBQUFySixRQUFBZ1gsRUFBQXE4QyxRQUFBMzdDLEVBQUErM0MsT0FBQXo0QyxFQUFBc2hCLEVBQUF0aEIsRUFBQTJsQixPQUErRCxDQUFLLElBQUF4YyxFQUFBczVCLEVBQVE5aUMsRUFBQTA4QyxVQUFZcjhDLEVBQUFzaEIsRUFBQTNoQixFQUFBMmhCLEVBQUF0aEIsRUFBQTJsQixFQUFBaG1CLEVBQUFnbUIsR0FBOEI4YyxFQUFBNFosVUFBQWx6QyxHQUFnQm1ZLEVBQUEsSUFBQXRoQixFQUFBc2hCLEVBQUFtaEIsRUFBQW5oQixHQUFBcUUsRUFBQSxJQUFBM2xCLEVBQUEybEIsRUFBQThjLEVBQUE5YyxLQUE4QmpsQixFQUFBMjhDLGlCQUFBcjlDLEVBQUFzaEIsRUFBQXRoQixFQUFBMmxCLEVBQUF4YyxFQUFBbVksRUFBQW5ZLEVBQUF3YyxHQUFzQ2psQixFQUFBczNDLFlBQWMsT0FBQXQzQyxFQUFTLFNBQUE0OEMsR0FBQWo5QyxFQUFBSyxHQUFpQixHQUFBQSxFQUFBODdDLFlBQUEsUUFBQS8yRCxFQUFBLEVBQTZCQSxFQUFBaWIsRUFBQSs3QyxXQUFBenpELE9BQXNCdkQsR0FBQSxHQUFNLElBQUFDLEVBQUFnYixFQUFBKzdDLFdBQUFoM0QsR0FBQTRNLEVBQUFnTyxFQUFBcGEsSUFBQVAsRUFBQWl3RCxZQUE0QyxHQUFBdGpELEVBQUFrckQsVUFBQWxyRCxFQUFBa3FELE9BQUEsQ0FBeUIsSUFBQTU4QyxPQUFBLEVBQWEsWUFBQWphLEVBQUFxM0QsY0FBQXA5QyxFQUFBdTlDLEdBQUE3cUQsRUFBQWtxRCxPQUFBNzJELE9BQTZDLENBQzNvK0IsR0FBQUEsRUFBQXEzRCxjQUFBLEdBQUFyOEMsRUFBQTY3QyxPQUFBdnpELE9BQUEsR0FBQXRELEVBQUFxM0QsY0FBQSxHQUFBMXFELEVBQUFrcUQsT0FBQXZ6RCxPQUFBLFFBQUFyQixNQUFBLGtDQUFBK1ksRUFBQS9hLE1BQW9JLElBQUFxYSxFQUFBVSxFQUFBNjdDLE9BQUE3MkQsRUFBQXEzRCxjQUFBLElBQUF0YSxFQUFBcHdDLEVBQUFrcUQsT0FBQTcyRCxFQUFBcTNELGNBQUEsSUFBQTMzRCxHQUFxRXMzRCxPQUFBaDNELEVBQUFnM0QsT0FBQUMsUUFBQWozRCxFQUFBaTNELFFBQUFDLFFBQUFsM0QsRUFBQWszRCxRQUFBQyxPQUFBbjNELEVBQUFtM0QsT0FBQXo5QyxHQUFBLEVBQUEwOUMsR0FBQSxHQUErRXJhLEVBQUF5YSxJQUFBemEsR0FBQXI5QyxHQUFBLEdBQUFBLEVBQUFnYSxHQUFBWSxFQUFBc2hCLEVBQUFtaEIsRUFBQW5oQixFQUFBbDhCLEVBQUEwM0QsR0FBQTk4QyxFQUFBMmxCLEVBQUE4YyxFQUFBOWMsRUFBQWhtQixFQUFBdTlDLEdBQUE3cUQsRUFBQWtxRCxPQUFBbjNELEdBQTBEc2IsRUFBQTY3QyxPQUFBNzdDLEVBQUE2N0MsT0FBQXp1QyxPQUFBbk8sSUFBNkIsT0FBQXc5QyxHQUFBejhDLEVBQUE2N0MsUUFBdU0sU0FBQWlCLEdBQUFuOUMsR0FBZTNZLEtBQUFrdUQsS0FBQXYxQyxFQUFBM1ksS0FBQSsxRCxZQUFBLFNBQUFwOUMsR0FBeUMsT0FBQXE5QyxHQUFBSCxRQUFBbDlDLEdBQUE0ekMsVUFBOEJ2c0QsS0FBQWkyRCxXQUFBajJELEtBQUFrMkQsZ0JBQUEsRUFBQWwyRCxLQUFBbTJELFlBQUEsRUFBMkQsU0FBQUMsR0FBQXo5QyxHQUFlLE9BQUFBLEVBQVMsU0FBQTA5QyxHQUFBMTlDLEdBQWUsT0FBQS9ULEtBQUEweEQsS0FBQTM5QyxHQUFBL1QsS0FBQW9TLE1BQUFwUyxLQUFBc1YsSUFBQXZCLElBQTRDLFNBQUE0OUMsR0FBQTU5QyxHQUFlLE9BQUEvVCxLQUFBMHhELEtBQUEzOUMsR0FBQS9ULEtBQUFvUyxNQUFBcFMsS0FBQXNWLElBQUEsRUFBQXZCLElBQUEsRUFBZ0QsU0FBQTY5QyxHQUFBNzlDLEdBQWUsT0FBQS9ULEtBQUEweEQsS0FBQTM5QyxJQUFBL1QsS0FBQW9TLE1BQUFwUyxLQUFBc1YsSUFBQXZCLEdBQUEsUUFBb0QsU0FBQTg5QyxHQUFBOTlDLEdBQWUsT0FBQS9ULEtBQUEweEQsS0FBQTM5QyxHQUFBL1QsS0FBQW1kLEtBQUFuZCxLQUFBc1YsSUFBQXZCLElBQTJDLFNBQUErOUMsR0FBQS85QyxHQUFlLE9BQUEvVCxLQUFBMHhELEtBQUEzOUMsR0FBQS9ULEtBQUEwRSxNQUFBMUUsS0FBQXNWLElBQUF2QixJQUE0QyxTQUFBZytDLEdBQUFoK0MsRUFBQUssR0FBaUJoWixLQUFBNDVCLEVBQUFqaEIsRUFBQTNZLEtBQUFpK0IsRUFBQWpsQixFQUFBaFosS0FBQTQyRCxVQUFBLEVBQUE1MkQsS0FBQTYyRCxNQUFBNzlDLEVBQUFMLEVBQUEzWSxLQUFBODJELGFBQUFuK0MsRUFBQUssRUFBQTVhLE9BQUEyNEQsT0FBQS8yRCxNQUE0RixTQUFBZzNELEdBQUFyK0MsRUFBQUssR0FBaUIsSUFBQWpiLEVBQUE2RyxLQUFBa21CLEtBQUFuUyxJQUFBSyxLQUF5QixPQUFBQSxHQUFBamIsRUFBQSxJQUFBNGEsR0FBQTVhLElBQUEsSUFBQWliLEVBQUFpK0MsR0FBQSxJQUFBdCtDLEdBQUEsSUFBQUssRUFBQWsrQyxHQUFBLElBQUFQLEdBQUFoK0MsRUFBQUssR0FBNkQsU0FBQW0rQyxHQUFBeCtDLEVBQUFLLEVBQUFqYixFQUFBQyxHQUFxQmdDLEtBQUE0NUIsRUFBQTU1QixLQUFBbzNELEdBQUF4eUQsS0FBQW9TLE1BQUEsR0FBQTJCLEdBQUEsR0FBQTNZLEtBQUFpK0IsRUFBQWorQixLQUFBcTNELEdBQUF6eUQsS0FBQW9TLE1BQUEsR0FBQWdDLEdBQUEsR0FBQWhaLEtBQUE0MEQsbUJBQUE3MkQsRUFBQWlDLEtBQUEyMEQsUUFBQTMyRCxFQUFBZ0MsS0FBQXMzRCx3QkFBQSxFQUFBdDNELEtBQUF1M0Qsd0JBQUEsRUFBQXYzRCxLQUFBdzNELFVBQUEsRUFBQXgzRCxLQUFBeTNELFVBQUEsRUFBQXI1RCxPQUFBczVELGtCQUFBMTNELE1BQThPLFNBQUEyM0QsR0FBQWgvQyxFQUFBSyxHQUFpQixPQUFBaFosS0FBQTQzRCxJQUFBai9DLEVBQUEzWSxLQUFBNjNELFNBQUE3M0QsS0FBQTgzRCxLQUFBOStDLEVBQUFMLEdBQStDLFdBQUEzWSxLQUFBKzNELElBQUEvM0QsS0FBQWc0RCxJQUFBaDRELEtBQUFpNEQsSUFBQSxFQUFBajRELEtBQUFrNEQsSUFBQWw0RCxLQUFBbTRELElBQUFuNEQsS0FBQW80RCxJQUFBLEVBQXFFLFdBQUFwNEQsS0FBQXE0RCxHQUFBcjRELEtBQUFzNEQsR0FBQXQ0RCxLQUFBdTRELElBQUF0QixHQUFBajNELEtBQUFnWCxNQUFBcS9DLElBQXNELFNBQUFtQyxHQUFBNy9DLEdBQWUsUUFBQUssRUFBQUwsRUFBQTgvQyxNQUFBLElBQUEzMEQsTUFBQTZVLEVBQUErL0MsTUFBQXAzRCxRQUFBdkQsRUFBQSxFQUFnREEsRUFBQWliLEVBQUExWCxPQUFXdkQsSUFBQWliLEVBQUFqYixHQUFBLElBQUFvNUQsR0FBQSxLQUFxQixTQUFBd0IsR0FBQWhnRCxFQUFBSyxHQUFpQixJQUFBamIsRUFBQUMsRUFBQTJhLEVBQUFtL0MsS0FBQW50RCxFQUFBZ08sRUFBQWlnRCxHQUFBM2dELEVBQUEsRUFBMEIsR0FBRyxTQUFBbGEsRUFBQUMsSUFBQTJNLElBQUFzTixTQUF1QixRQUFBbGEsRUFBQWthLFNBQW1CLFFBQUFsYSxFQUFBNE0sR0FBQTNNLEVBQUEyTSxFQUFBLFVBQTJCLFFBQUE1TSxFQUFBNE0sR0FBQSxFQUFBM00sRUFBQTJNLEVBQUEsVUFBNkIsR0FBQTVNLEdBQUEsS0FBQUEsR0FBQSxJQUFBNE0sR0FBQTVNLEVBQUEsV0FBa0MsR0FBQUEsR0FBQSxLQUFBQSxHQUFBLElBQUE0TSxHQUFBLEdBQUE1TSxFQUFBLFlBQXNDLEdBQUFpYixHQUFBLElBQUFmLEdBQUEsS0FBQWxhLEVBQUEsWUFBK0JrYSxFQUFBLEdBQVdVLEVBQUFpZ0QsR0FBQWp1RCxFQUFPLFNBQUFrdUQsR0FBQTcvQyxFQUFBamIsR0FBaUI0YSxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUFySCxFQUFBNGtCLEtBQUEsU0FBQTNKLEVBQUE0OUMsS0FBQSxLQUFBNzRELEVBQUFzNkQsR0FBQXQ2RCxFQUFBdTZELEdBQUF2NkQsRUFBQXc2RCxJQUFBdi9DLEVBQW1FLFNBQUErL0MsR0FBQS8vQyxFQUFBamIsR0FBaUI0YSxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUFySCxFQUFBNGtCLEtBQUEsVUFBQTNKLEVBQUE0OUMsS0FBQSxLQUFBNzRELEVBQUF1NkQsR0FBQXY2RCxFQUFBdzZELElBQUF2L0MsRUFBK0QsU0FBQWdnRCxHQUFBaGdELEVBQUFqYixHQUFpQjRhLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQXJILEVBQUE0a0IsS0FBQSxVQUFBM0osRUFBQTQ5QyxLQUFBLEtBQUE3NEQsRUFBQXM2RCxHQUFBci9DLEVBQXlELFNBQUFpZ0QsR0FBQWpnRCxFQUFBamIsR0FBaUIsSUFBK0ZMLEVBQUEwRSxFQUEvRnBFLEVBQUFELEVBQUE4NUQsTUFBQWx0RCxFQUFBM00sRUFBQTh5RCxNQUFBNzRDLEVBQUFqYSxFQUFBOHlELE1BQUF4NEMsRUFBQXZhLEVBQUFtN0QsR0FBQXZ1RCxHQUFBb3dDLEVBQUFoOUMsRUFBQW83RCxHQUFBbGhELEdBQXNEVSxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUEsU0FBQTRULEVBQUEsSUFBQXJPLEVBQUFzTixHQUFpRGUsR0FBQXRiLEVBQUE0YSxFQUFBMmxCLEVBQUE4YyxFQUFBOWMsRUFBQTc3QixFQUFBMjRDLEVBQUFuaEIsRUFBQXRoQixFQUFBc2hCLElBQUFsOEIsRUFBQXE5QyxFQUFBbmhCLEVBQUF0aEIsRUFBQXNoQixFQUFBeDNCLEVBQUEyNEMsRUFBQTljLEVBQUEzbEIsRUFBQTJsQixHQUFBbGdDLEVBQUF1NkQsR0FBQXY2RCxFQUFBdzZELElBQUF2QixHQUFBdDVELEVBQUEwRSxHQUFpRSxTQUFBZzNELEdBQUFwZ0QsRUFBQWpiLEdBQWlCLElBQStGTCxFQUFBMEUsRUFBL0ZwRSxFQUFBRCxFQUFBODVELE1BQUFsdEQsRUFBQTNNLEVBQUE4eUQsTUFBQTc0QyxFQUFBamEsRUFBQTh5RCxNQUFBeDRDLEVBQUF2YSxFQUFBbTdELEdBQUF2dUQsR0FBQW93QyxFQUFBaDlDLEVBQUFvN0QsR0FBQWxoRCxHQUFzRFUsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBLFNBQUE0VCxFQUFBLElBQUFyTyxFQUFBc04sR0FBaURlLEdBQUF0YixFQUFBNGEsRUFBQTJsQixFQUFBOGMsRUFBQTljLEVBQUE3N0IsRUFBQTI0QyxFQUFBbmhCLEVBQUF0aEIsRUFBQXNoQixJQUFBbDhCLEVBQUFxOUMsRUFBQW5oQixFQUFBdGhCLEVBQUFzaEIsRUFBQXgzQixFQUFBMjRDLEVBQUE5YyxFQUFBM2xCLEVBQUEybEIsR0FBQWxnQyxFQUFBczZELEdBQUFyQixHQUFBdDVELEVBQUEwRSxHQUFnakYsU0FBQWkzRCxHQUFBcmdELEdBQWVMLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFNBQUEzSixFQUFBNitDLE1BQUEvRyxNQUFvcEMsU0FBQXdJLEdBQUF0Z0QsRUFBQWpiLEdBQWlCLElBQUFDLEVBQUFELEVBQUE4NUQsTUFBQS9HLE1BQUFubUQsRUFBQTVNLEVBQUF3N0QsR0FBQXY3RCxHQUFBaWEsRUFBQWxhLEVBQUFzNkQsR0FBQS8vQyxFQUFBdmEsRUFBQXU2RCxHQUE0QzMvQyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUFySCxFQUFBNGtCLEtBQUEsUUFBQTNKLEVBQUEsSUFBQWhiLEdBQTZDLElBQUErOEMsRUFBQXppQyxFQUFBa2hELFNBQUE3dUQsRUFBQTh1RCxJQUF1QnpnRCxJQUFBK2hDLEVBQUFoOUMsRUFBQWlaLE1BQUErakMsSUFBQTlpQyxFQUFBeWhELFlBQUEvdUQsRUFBQTh1RCxHQUFBMWUsRUFBQXppQyxHQUFBTCxFQUFBMGhELE1BQUFodkQsR0FBQTVNLEVBQUFtNkQsSUFBQW42RCxFQUFBbzZELElBQUFuNkQsRUFBbUUsU0FBQTQ3RCxHQUFBNWdELEVBQUFqYixHQUFpQixJQUFBQyxFQUFBMk0sRUFBQXNOLEVBQUFLLEVBQUF2YSxFQUFBbTdELEdBQUFuZSxFQUFBemlDLEVBQUFoWCxPQUFBLEVBQThCcVgsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBckgsRUFBQTRrQixLQUFBLE9BQUEzSixFQUFBNDlDLEtBQUEsS0FBK0MsUUFBQWw1RCxFQUFBLEVBQVlBLEVBQUFxOUMsRUFBSXI5QyxJQUFBTSxFQUFBc2EsRUFBQTVhLEdBQUFzYixFQUFBNmdELFFBQUE3N0QsS0FBQTJNLEVBQUEzTSxFQUFBODdELFlBQUE5Z0QsTUFBQWhiLElBQUFpYSxFQUFBamEsRUFBQSs3RCxZQUFBL2dELEdBQUFyTyxJQUFBc04sR0FBQWUsRUFBQTBnRCxZQUFBMTdELElBQUFnYixFQUFBd2dELFNBQUE3dUQsS0FBQSxNQUFBcU8sR0FBQSxHQUFBQSxFQUFBZ2hELFlBQUFoOEQsRUFBQTJNLEVBQUFzTixFQUFBZSxJQUFvSixTQUFBaWhELEdBQUFqaEQsRUFBQWpiLEdBQWlCLFFBQUFDLEVBQUFELEVBQUE4NUQsTUFBQWx0RCxFQUFBcU8sRUFBQWpiLEVBQUFvNkQsSUFBQXA2RCxFQUFBcTZELElBQUFuZ0QsR0FBQWUsRUFBQWpiLEVBQUF3N0QsR0FBQXg3RCxFQUFBbzdELElBQUF4dUQsR0FBQTJOLEVBQUF2YSxFQUFBczZELEdBQUF0ZCxFQUFBaDlDLEVBQUF1NkQsR0FBQTU2RCxFQUFBSyxFQUFBMlAsS0FBQXRMLEVBQUFyRSxFQUFBbTdELEdBQW1GeDdELEtBQUksQ0FBRSxJQUFBK2pCLEVBQUF6akIsRUFBQTh5RCxNQUFBbnpELEVBQUF5RSxFQUFBcWYsR0FBQTNqQixFQUFBaTlDLEVBQUF5ZSxTQUFBdmhELEtBQUEsTUFBNkNLLEVBQUFvaEQsWUFBQS83RCxJQUFBRyxFQUFBaTlDLEdBQUF6aUMsRUFBQXFoRCxNQUFBaDhELEdBQUFnYixFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUFySCxFQUFBNGtCLE1BQUE1a0IsRUFBQTJQLEtBQUEsV0FBQTNQLEVBQUEyUCxLQUFBaFEsR0FBQSxpQkFBQXNiLEVBQUEsaUJBQUF5SSxHQUFrSTFqQixFQUFBMlAsS0FBQSxFQUFTLFNBQUF3c0QsR0FBQWxoRCxFQUFBamIsR0FBaUIsSUFBQUMsRUFBQUQsRUFBQTg1RCxNQUFBbHRELEVBQUFxTyxFQUFBamIsRUFBQW82RCxJQUFBcDZELEVBQUFxNkQsSUFBQW5nRCxHQUFBZSxFQUFBamIsRUFBQXc3RCxHQUFBeDdELEVBQUFvN0QsSUFBQXh1RCxHQUFBMk4sRUFBQXZhLEVBQUFzNkQsR0FBQXRkLEVBQUFoOUMsRUFBQXU2RCxHQUFBNTZELEVBQUFNLEVBQUE4eUQsTUFBQTF1RCxFQUFBckUsRUFBQW03RCxHQUFBbjdELEVBQUFvOEQsU0FBQXo4RCxJQUFBK2pCLEVBQUFyZixFQUFtR3VXLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQXJILEVBQUE0a0IsS0FBQSxPQUFBM0osRUFBQSxJQUFBdGIsR0FBNEMsSUFBQUMsRUFBQW85QyxFQUFBeWUsU0FBQXZoRCxLQUFBLE1BQTRCLEdBQUd3SixJQUFBeEosR0FBQUssRUFBQW9oRCxZQUFBajRDLElBQUE5akIsRUFBQW85QyxHQUFBdDVCLElBQUE4MUMseUJBQXFEOTFDLElBQUFyZixHQUFhLFNBQUFnNEQsR0FBQXBoRCxFQUFBamIsR0FBaUIsSUFBcUhxRSxFQUFySHBFLEVBQUFELEVBQUE4NUQsTUFBQWx0RCxFQUFBcU8sRUFBQWpiLEVBQUFvNkQsSUFBQXA2RCxFQUFBcTZELElBQUFuZ0QsR0FBQWUsRUFBQWpiLEVBQUF3N0QsR0FBQXg3RCxFQUFBbzdELElBQUF4dUQsR0FBQTJOLEVBQUF2YSxFQUFBczZELEdBQUF0ZCxFQUFBaDlDLEVBQUF1NkQsR0FBQTU2RCxFQUFBTSxFQUFBOHlELE1BQTJILE9BQWxEbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQXJILEVBQUE0a0IsS0FBQSxPQUFBM0osRUFBQSxJQUFBdGIsR0FBa0RBLEdBQVUsT0FBQTBFLEVBQUFyRSxFQUFBMDZELE1BQWlCLE1BQU0sT0FBQXIyRCxFQUFBckUsRUFBQTI2RCxNQUFpQixNQUFNLGtCQUFBejRELE1BQUEsZ0JBQXdDLFFBQUF3aEIsRUFBQTlqQixFQUFBbzlDLEVBQUF5ZSxTQUFBdmhELEtBQUEsTUFBQW5hLEVBQUFzRSxFQUFBZCxPQUFBLEVBQUFuQyxFQUFBLEVBQW1EQSxFQUFBckIsRUFBSXFCLElBQUFzaUIsRUFBQXJmLEVBQUFqRCxHQUFBbVosRUFBQW9oRCxZQUFBajRDLElBQUE5akIsRUFBQW85QyxHQUE0ZixTQUFBc2YsR0FBQXJoRCxFQUFBamIsR0FBaUIsSUFBQUMsRUFBQUQsRUFBQTg1RCxNQUFBbHRELEVBQUEzTSxFQUFBOHlELE1BQUEsR0FBQTc0QyxFQUFBamEsRUFBQTh5RCxNQUFBeDRDLEVBQUF2YSxFQUFBbzdELEdBQUFsaEQsR0FBQThpQyxFQUFBaDlDLEVBQUF3N0QsR0FBQXg3RCxFQUFBbTZELEtBQUF4NkQsRUFBQUssRUFBQXM2RCxHQUFBajJELEVBQUFyRSxFQUFBdTZELEdBQTJFNTZELEVBQUFnOEQsWUFBQXBoRCxFQUFBeWlDLEVBQUFwd0MsRUFBQXZJLEdBQUExRSxFQUFBaThELE1BQUFyaEQsR0FBQUssRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBckgsRUFBQTRrQixLQUFBLFNBQUEzSixFQUFBLElBQUFyTyxFQUFBc04sR0FBQWxhLEVBQUFvNkQsSUFBQXA2RCxFQUFBbTZELElBQUFuNkQsRUFBQXE2RCxJQUFBbmdELEVBQUFlLElBQUFqYixFQUFBbTZELElBQUFqZ0QsR0FBMlosU0FBQXFpRCxHQUFBdGhELEVBQUFqYixHQUFpQixJQUFBQyxFQUFBRCxFQUFBODVELE1BQUFsdEQsRUFBQTNNLEVBQUE4eUQsTUFBQTc0QyxFQUFBamEsRUFBQTh5RCxNQUFBeDRDLEVBQUF2YSxFQUFBdzdELEdBQUF0aEQsR0FBQThpQyxFQUFBaDlDLEVBQUFzNkQsR0FBQTM2RCxFQUFBSyxFQUFBdTZELEdBQUFsMkQsRUFBQXJFLEVBQUF3OEQsSUFBQTV2RCxHQUFxRWdPLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQXJILEVBQUE0a0IsS0FBQSxRQUFBM0osRUFBQSxJQUFBck8sRUFBQSxJQUFBdkksRUFBQSxJQUFBNlYsR0FBeUQsSUFBQXdKLEVBQUEvakIsRUFBQTg3RCxTQUFBbGhELEVBQUFtaEQsSUFBdUJ6Z0QsSUFBQXBVLEtBQUFzVixJQUFBdUgsRUFBQXJmLEdBQUFyRSxFQUFBeThELFVBQUEvNEMsRUFBQXJmLEdBQUFxZixFQUFBMWpCLEVBQUFpWixNQUFBeUssSUFBQXM1QixFQUFBMmUsWUFBQXBoRCxFQUFBbWhELEdBQUFoNEMsRUFBQS9qQixHQUFBLElBQUFLLEVBQUFnNkQsTUFBQXovQyxFQUFBOCtDLEdBQUE5K0MsRUFBQXNoQixFQUFBdGhCLEVBQUErK0MsR0FBQS8rQyxFQUFBMmxCLEdBQUE4YyxFQUFBNGUsTUFBQXJoRCxHQUFBdmEsRUFBQW02RCxJQUFBbjZELEVBQUFvNkQsSUFBQWxnRCxFQUEyM0IsU0FBQXdpRCxHQUFBemhELEVBQUFqYixHQUFpQixJQUFBQyxFQUFBRCxFQUFBODVELE1BQUFsdEQsRUFBQTNNLEVBQUE4eUQsTUFBQTc0QyxFQUFBbGEsRUFBQW03RCxHQUFBdnVELEdBQWtDZ08sRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBckgsRUFBQTRrQixLQUFBLE1BQUEzSixFQUFBLElBQUFyTyxHQUFBM00sRUFBQTRFLEtBQUEsR0FBQTdFLEVBQUF3NkQsSUFBQWlCLFNBQUF2aEQsRUFBQXdoRCxHQUFBemdELEdBQUEsSUFBZ0YsU0FBQTBoRCxHQUFBMWhELEVBQUFqYixHQUFpQixJQUFBQyxFQUFBRCxFQUFBODVELE1BQUFsdEQsRUFBQTNNLEVBQUE4eUQsTUFBQTc0QyxFQUFBamEsRUFBQTh5RCxNQUFBeDRDLEVBQUF2YSxFQUFBbzdELEdBQUF4dUQsR0FBQW93QyxFQUFBaDlDLEVBQUF3N0QsR0FBQXRoRCxHQUFBdmEsRUFBQUssRUFBQXc2RCxJQUFBaUIsU0FBQXplLEVBQUF6aUMsRUFBQVUsS0FBZ0ZMLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQXJILEVBQUE0a0IsS0FBQSxNQUFBM0osRUFBQSxJQUFBck8sRUFBQXNOLEVBQUEsS0FBQXZhLEdBQUFLLEVBQUE4NUQsTUFBQWoxRCxLQUFBZ0MsS0FBQW9TLE1BQUEsR0FBQXRaLElBQTBoRCxTQUFBaTlELEdBQUEzaEQsRUFBQWpiLEdBQWlCLElBQUFDLEVBQUFELEVBQUE4NUQsTUFBQWx0RCxFQUFBM00sRUFBQTh5RCxNQUFBNzRDLEVBQUFsYSxFQUFBczZELEdBQUEvL0MsRUFBQXZhLEVBQUF1NkQsR0FBQXZkLEVBQUFoOUMsRUFBQTY4RCxLQUFBbDlELEVBQUFLLEVBQUE4OEQsVUFBQSxJQUFBN2hELEVBQUEsR0FBQTVXLEVBQUFyRSxFQUFBKzhELFdBQUFyNUMsRUFBQTFqQixFQUFBdzdELEdBQTRGNWdELEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQXJILEVBQUE0a0IsS0FBQSxVQUFBM0osRUFBQSxJQUFBck8sRUFBQTNNLEdBQWlELFFBQUFMLEVBQUEsRUFBWUEsRUFBQWdOLEVBQUloTixJQUFBLENBQUssSUFBQUcsRUFBQUUsRUFBQTh5RCxNQUFBM3hELEVBQUFuQixFQUFBOHlELE1BQXdCLEdBQUFwekQsSUFBQSxJQUFBeUIsSUFBQSxLQUFBNDdDLEVBQUEsQ0FBdUIsSUFBQTU4QyxHQUFBLEdBQUFnQixHQUFBLEVBQWVoQixHQUFBLEdBQUFBLElBQUF3YSxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUFySCxFQUFBNGtCLEtBQUEsWUFBQTdrQixFQUFBLEtBQUFLLEVBQUFpRSxHQUE4RCxJQUFBNUMsRUFBQWlpQixFQUFBM2pCLEdBQVdtYSxFQUFBeWhELFlBQUFsNkQsSUFBQXJCLEVBQUFpRSxFQUFBa1csS0FBbWhDLFNBQUF5aUQsR0FBQS9oRCxFQUFBamIsR0FBaUIsSUFBQUMsRUFBQUQsRUFBQTg1RCxNQUFBbHRELEVBQUEzTSxFQUFBOHlELE1BQXdCbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQXJILEVBQUE0a0IsS0FBQSxXQUFBM2tCLEVBQUE0RSxLQUFBLEdBQUE3RSxFQUFBaVosTUFBQXJNLEVBQUEsS0FBZ00sU0FBQXF3RCxHQUFBaGlELEVBQUFqYixHQUFpQixJQUFBQyxFQUFBRCxFQUFBODVELE1BQUFsdEQsRUFBQTNNLEVBQUE4eUQsTUFBQTc0QyxFQUFBbGEsRUFBQTY4RCxLQUFBdGlELEVBQUF2YSxFQUFBODhELFVBQUEsSUFBQTdoRCxFQUFBLEdBQUEraEMsRUFBQWg5QyxFQUFBKzhELFdBQXVFbmlELEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQXJILEVBQUE0a0IsS0FBQSxVQUFBM0osRUFBQSxJQUFBck8sRUFBQTNNLEdBQWlELFFBQUFOLEVBQUEsRUFBWUEsRUFBQWlOLEVBQUlqTixJQUFBLENBQUssSUFBQTBFLEVBQUFwRSxFQUFBOHlELE1BQUFydkMsRUFBQXpqQixFQUFBOHlELE1BQXdCLEdBQUF4NEMsSUFBQSxJQUFBbUosSUFBQSxLQUFBeEosRUFBQSxDQUF1QixJQUFBdGEsR0FBQSxHQUFBOGpCLEdBQUEsRUFBZTlqQixHQUFBLEdBQUFBLElBQVUsSUFBQUcsRUFBQUgsRUFBQW85QyxFQUFVcGlDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQXJILEVBQUE0a0IsS0FBQSxZQUFBdmdCLEVBQUEsS0FBQXRFLEdBQUFDLEVBQUF3OEQsSUFBQW40RCxJQUFBdEUsSUFBcXVDLFNBQUFtOUQsR0FBQWppRCxFQUFBamIsR0FBaUIsSUFBdUdMLEVBQUEwRSxFQUF2R3BFLEVBQUFELEVBQUE4NUQsTUFBQWx0RCxFQUFBM00sRUFBQTh5RCxNQUFBNzRDLEVBQUFqYSxFQUFBOHlELE1BQUF4NEMsRUFBQXZhLEVBQUFtN0QsR0FBQXZ1RCxHQUFBb3dDLEVBQUFoOUMsRUFBQW83RCxHQUFBbGhELEdBQXNEVSxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUFySCxFQUFBNGtCLEtBQUEsVUFBQTNKLEVBQUEsSUFBQXJPLEVBQUFzTixHQUF5RGUsR0FBQXRiLEVBQUE0YSxFQUFBMmxCLEVBQUE4YyxFQUFBOWMsRUFBQTc3QixFQUFBMjRDLEVBQUFuaEIsRUFBQXRoQixFQUFBc2hCLElBQUFsOEIsRUFBQXE5QyxFQUFBbmhCLEVBQUF0aEIsRUFBQXNoQixFQUFBeDNCLEVBQUEyNEMsRUFBQTljLEVBQUEzbEIsRUFBQTJsQixHQUFBbGdDLEVBQUF3NkQsSUFBQXZCLEdBQUF0NUQsRUFBQTBFLEdBQXMxQixTQUFBODRELEdBQUFsaUQsRUFBQWpiLEdBQWlCLElBQUFDLEVBQUFELEVBQUE4NUQsTUFBQWx0RCxFQUFBNU0sRUFBQSs1RCxLQUFBNy9DLEVBQUFsYSxFQUFBNjZELEdBQThCamdELEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQXJILEVBQUE0a0IsS0FBQSxTQUFBM0osRUFBQSxLQUE0QyxRQUFBVixFQUFBLEVBQVlBLEVBQUFVLEVBQUlWLElBQUF0YSxFQUFBNEUsS0FBQStILElBQUFzTixJQUFtQmxhLEVBQUE2NkQsR0FBQTNnRCxFQUFPLFNBQUFrakQsR0FBQW5pRCxFQUFBamIsR0FBaUIsSUFBQUMsRUFBQUQsRUFBQTY2RCxHQUFBanVELEVBQUE1TSxFQUFBKzVELEtBQUE3L0MsRUFBQWxhLEVBQUE4NUQsTUFBOEJsL0MsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBckgsRUFBQTY2RCxHQUFBLFNBQUE1L0MsRUFBQSxLQUEwQyxRQUFBVixFQUFBLEVBQVlBLEVBQUFVLEVBQUlWLElBQUEsQ0FBSyxJQUFBeWlDLEVBQUFwd0MsSUFBQTNNLElBQUEsRUFBQTJNLElBQUEzTSxHQUF1QixNQUFBKzhDLFFBQUEsU0FBQUEsS0FBQTlpQyxFQUFBclYsS0FBQW00QyxHQUFzQ2g5QyxFQUFBNjZELEdBQUE1NkQsRUFBTyxTQUFBbzlELEdBQUFwaUQsRUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBc04sRUFBQUssR0FBeUIsSUFBQXlpQyxFQUFBcjlDLEVBQUEwRSxFQUFBcWYsRUFBQTlqQixFQUFBMmEsRUFBQXUvQyxNQUFBLzVELEVBQUFrYixHQUFBcmIsRUFBQW16RCxNQUFBM3hELEVBQUF4QixFQUFBbXpELE1BQUEzeUQsRUFBQW1hLEVBQUE0L0MsSUFBQTE0RCxFQUFBOFksRUFBQWloRCxHQUFBcDdELEdBQUFzVyxFQUFBNkQsRUFBQTZnRCxHQUFBaDZELEdBQUFYLEVBQUE4WixFQUFBK2lELE9BQUE1N0QsRUFBQTZZLEVBQUErL0MsR0FBQXo1RCxFQUFBMFosRUFBQWlnRCxJQUFtRzc2RCxFQUFBcTlDLEVBQUFuOEMsRUFBQTQ2RCxTQUFBL2tELEVBQUFqVixHQUFBLE1BQUE0QyxFQUFBMUUsR0FBQSxPQUFBQSxFQUFBa0gsS0FBQXNWLElBQUF4YyxHQUFBc2IsSUFBQXlJLEVBQUFuSixFQUFBaWlELElBQUF6OEQsR0FBQTZNLEdBQUEvRixLQUFBc1YsSUFBQXhjLEVBQUErakIsR0FBQW5KLEVBQUFraUQsVUFBQTk4RCxFQUFBK2pCLElBQUF6akIsR0FBQU4sRUFBQWMsSUFBQWQsRUFBQWMsR0FBQW1NLElBQUFqTixFQUFBNGEsRUFBQXRCLE1BQUF0WixJQUFBK0IsRUFBQWk2RCxZQUFBamxELEVBQUFqVixFQUFBNEMsRUFBQTFFLEVBQUFrQixHQUFBYSxFQUFBazZELE1BQUFsbEQsR0FBQWtFLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQWtULEVBQUFxSyxNQUFBM0osRUFBQSxrQkFBQWpiLEVBQUEsVUFBQUMsRUFBQSxVQUFBMk0sRUFBQSxjQUFBc04sRUFBQSxTQUFBQSxFQUFBLFNBQUFBLEVBQUEsYUFBQWUsRUFBQWxiLEVBQUEsSUFBQXdhLEVBQUFpaUQsSUFBQXo4RCxHQUFBLElBQUEyakIsRUFBQSxPQUFBdGlCLEVBQUEsT0FBQTQ3QyxFQUFBLEtBQUEzNEMsRUFBQTFFLEVBQUEsS0FBQTRhLEVBQUE2L0MsSUFBQTcvQyxFQUFBNC9DLElBQUE1L0MsRUFBQTgvQyxJQUFBajVELEVBQUFwQixJQUFBdWEsRUFBQTQvQyxJQUFBLzRELEdBQWdZLFNBQUFtOEQsR0FBQTNpRCxJQUFlQSxTQUFPNGlELFFBQUF6SCxHQUFBbjdDLEVBQUE2aUQsV0FBQSw0REFBQTFILEdBQUFuN0MsRUFBQThpRCxVQUFBLDJEQUFBM0gsR0FBQW43QyxFQUFBK2lELFdBQUEsNERBQUE1SCxHQUFBbjdDLEVBQUFnakQsU0FBQSwwREFBQTdILEdBQUFuN0MsRUFBQWlqRCxVQUFBLDJEQUFBOUgsR0FBQW43QyxFQUFBaWpELFVBQUEsK0NBQUE1N0QsS0FBQXF1RCxPQUF5Y3dOLFlBQVlDLEdBQUFuakQsRUFBQTZpRCxZQUFBLEtBQXFCTyxlQUFnQkQsR0FBQW5qRCxFQUFBOGlELFdBQUEsS0FBb0JPLFVBQVdGLEdBQUFuakQsRUFBQXFqRCxVQUFBcmpELEVBQUE2aUQsV0FBQSxJQUFBN2lELEVBQUE4aUQsV0FBNENRLGdCQUFpQkgsR0FBQW5qRCxFQUFBc2pELGlCQUFBdGpELEVBQUE2aUQsV0FBQTdpRCxFQUFBOGlELFdBQUF0bEMsUUFBQSxXQUFrRStsQyxVQUFXSixHQUFBbmpELEVBQUF1akQsVUFBQSxLQUFtQkMsYUFBY0wsR0FBQW5qRCxFQUFBd2pELGFBQUEsS0FBc0JDLGNBQWVOLEdBQUFuakQsRUFBQXlqRCxjQUFBLEtBQXVCQyxpQkFBa0JQLEdBQUFuakQsRUFBQTBqRCxpQkFBQSxLQUEwQkMsU0FBVVIsR0FBQW5qRCxFQUFBMmpELFNBQUEsS0FBa0JDLFlBQWFULEdBQUFuakQsRUFBQTRqRCxZQUFBLEtBQXFCMTFELFNBQVVpMUQsR0FBQW5qRCxFQUFBOVIsU0FBQSxlQUE0QjIxRCxhQUFjVixHQUFBbmpELEVBQUE2akQsYUFBQSxLQUFzQkMsV0FBWVgsR0FBQW5qRCxFQUFBOGpELFdBQUEsS0FBb0JDLFdBQVlaLEdBQUFuakQsRUFBQStqRCxXQUFBLE1BQXFCMThELEtBQUEwN0QsV0FBQS9pRCxFQUFBK2lELFlBQUEsSUFBQTE3RCxLQUFBMjdELFNBQUFoakQsRUFBQWdqRCxTQUFBMzdELEtBQUE0N0QsVUFBQWpqRCxFQUFBaWpELFVBQUE1N0QsS0FBQTI4RCxpQkFBQWhrRCxFQUFBZ2tELGlCQUFBMzhELEtBQUF5d0QsUUFBNkltTSxLQUFLQyxjQUFBbGtELEVBQUFta0QsYUFBQTk4RCxLQUFBKzhELGdCQUFBQyxPQUFBQyxhQUFBdGtELEVBQUF1a0QsWUFBQWw5RCxLQUFBbTlELGVBQUFILE9BQUFJLFlBQUF6a0QsRUFBQXlrRCxhQUFBcDlELEtBQUFxOUQsa0JBQUFDLFdBQTBLdDlELEtBQUFtSyxXQUFBLEVBQUFuSyxLQUFBNnNELE9BQUEsSUFBQTBRLEdBQUFDLFNBQUF4OUQsS0FBQTJZLEVBQUFrMEMsWUFBQTdzRCxLQUFBb3VELFNBQUEsSUFBQXhRLEVBQUE1OUMsV0FBQTA0QyxTQUFBLElBQUE2YSxHQUFBdnpELFdBQUF5OUQsYUFBQSxJQUFBakssR0FBQXh6RCxXQUFBeXdELE9BQUF6d0QsS0FBQXl3RCxXQUFrTHJ5RCxPQUFBQyxlQUFBMkIsS0FBQSxXQUF1Q3pCLElBQUEsV0FBZSxPQUFBeUIsS0FBQTA5RCxTQUFBMTlELEtBQUEwOUQsU0FBQSxhQUFBMTlELEtBQUEyOUQsZUFBQTM5RCxLQUFBMDlELFNBQUEsSUFBQTVILEdBQUE5MUQsV0FBQSxLQUF5RyxTQUFBNDlELEdBQUFqbEQsRUFBQUssR0FBaUIsSUFBQWpiLEVBQUE2M0MsS0FBQUMsVUFBQWw5QixHQUFBM2EsRUFBQSxJQUE4QixRQUFBMk0sS0FBQXFPLEVBQUEsQ0FBZ0IsSUFBQWYsRUFBQWhFLFNBQUF0SixHQUFrQixHQUFBc04sT0FBQSxNQUFnQixHQUFBMjlCLEtBQUFDLFVBQUE3OEIsRUFBQXJPLE1BQUE1TSxFQUFBLE9BQUFrYSxFQUFxQ2phLEdBQUFpYSxJQUFBamEsRUFBQWlhLEVBQUEsSUFBZSxPQUFBZSxFQUFBaGIsR0FBQTJhLEVBQUEzYSxFQUFnQixTQUFBNi9ELEdBQUFsbEQsRUFBQUssRUFBQWpiLEdBQW1CLElBQUFDLEVBQUE0L0QsR0FBQTVrRCxFQUFBL2EsS0FBQUYsR0FBbUIsUUFBUUUsS0FBQSxPQUFBMGEsRUFBQTFLLEtBQUEsTUFBQXRQLE1BQUFxYSxFQUFBb3lDLE1BQXVDbnRELEtBQUEsWUFBQTBhLEVBQUExSyxLQUFBLFFBQUF0UCxNQUFBcWEsRUFBQWdELFVBQUEsS0FBdUQvZCxLQUFBLGdCQUFBMGEsRUFBQTFLLEtBQUEsUUFBQXRQLE1BQUFxYSxFQUFBMkQsY0FBQSxLQUErRDFlLEtBQUEsWUFBQTBhLEVBQUExSyxLQUFBLFFBQUF0UCxNQUFBcWEsRUFBQWlELFVBQUEsS0FBdURoZSxLQUFBLFNBQUEwYSxFQUFBMUssS0FBQSxTQUFBdFAsTUFBQSxJQUF3Q1YsS0FBQSxVQUFBMGEsRUFBQTFLLEtBQUEsU0FBQXRQLE1BQUFYLElBQXlDLFNBQUE4L0QsR0FBQW5sRCxFQUFBSyxFQUFBamIsR0FBbUIsSUFBQUMsS0FBUTJNLEVBQUEsSUFBQWlrRCxHQUFBUSxPQUFBejJDLEVBQUFLLEdBQXNCLE9BQUFoYixFQUFBb3RELElBQUF6Z0QsRUFBQW96RCxXQUFBLy9ELEVBQUFnZSxTQUFBclIsRUFBQXF6RCxhQUFBaGdFLEVBQUEyZSxhQUFBaFMsRUFBQXF6RCxhQUFBaGdFLEVBQUFpZSxTQUFBdFIsRUFBQXF6RCxhQUFBcnpELEVBQUFzekQsS0FBQSxZQUFBamdFLEVBQUFDLEtBQUFGLEVBQUE0TSxFQUFBNnBELG1CQUE0SngyRCxFQUFHLFNBQUFrZ0UsR0FBQXZsRCxFQUFBSyxFQUFBamIsRUFBQUMsR0FBcUIsUUFBQTJNLEVBQUFpekQsR0FBQTVrRCxFQUFBL2EsS0FBQUQsR0FBQWlhLElBQTJCaGEsS0FBQSxVQUFBMGEsRUFBQTFLLEtBQUEsU0FBQXRQLE1BQUFnTSxJQUF5QzFNLEtBQUEsU0FBQTBhLEVBQUExSyxLQUFBLFNBQUF0UCxNQUFBLElBQXNDMlosRUFBQSxFQUFNQSxFQUFBdmEsRUFBQXVELFNBQVdnWCxFQUFBLENBQUssSUFBQXlpQyxFQUFBaDlDLEVBQUF1YSxHQUFBOHlDLElBQWVuekMsRUFBQXJWLE1BQVEzRSxLQUFBLFFBQUEwYSxFQUFBLElBQUFvaUMsRUFBQTlzQyxLQUFBLFFBQUF0UCxNQUFBcWEsRUFBQW1sRCxZQUFBcGpCLElBQUEsS0FBK0QsT0FBQTlpQyxFQUFTLFNBQUFtbUQsR0FBQXpsRCxFQUFBSyxFQUFBamIsRUFBQUMsR0FBcUIsSUFBQTJNLEtBQVFzTixFQUFBLElBQUEyMkMsR0FBQVEsT0FBQXoyQyxFQUFBSyxHQUFzQnJPLEVBQUExTSxLQUFBRCxFQUFBaWEsRUFBQXU4QyxtQkFBNkJ2OEMsRUFBQWdtRCxLQUFBLFlBQUF0ekQsRUFBQXd6RCxlQUFxQyxRQUFBN2xELEVBQUEsRUFBWUEsRUFBQXZhLEVBQUF1RCxTQUFXZ1gsRUFBQTNOLEVBQUF3ekQsWUFBQXBnRSxFQUFBdWEsR0FBQTh5QyxLQUFBbnpDLEVBQUErbEQsYUFBMkMsT0FBQXJ6RCxFQUF3Z0YsU0FBQTB6RCxHQUFBMWxELEVBQUE1YSxHQUFpQmliLEVBQUEsTUFBQXNsRCxTQUFBM2xELEVBQUEsU0FBQUEsRUFBQUssR0FBaUMsR0FBQUwsRUFBQSxPQUFBNWEsRUFBQTRhLEVBQUE0bEQsU0FBeUJ4Z0UsRUFBQSxLQUFBNjFELEdBQUE1NkMsTUFBOFEsU0FBQXdsRCxHQUFBN2xELEVBQUFLLEdBQWlCLFFBQUFqYixLQUFBQyxFQUFBLEdBQUEyTSxFQUFBLEVBQXNCQSxFQUFBcU8sRUFBSXJPLEdBQUEsR0FBTSxJQUFBc04sRUFBQTIyQyxHQUFBNlAsT0FBQTlsRCxFQUFBM2EsR0FBQXNhLEVBQUFzMkMsR0FBQThQLFNBQUEvbEQsRUFBQTNhLEVBQUEsR0FBQSs4QyxFQUFBNlQsR0FBQThQLFNBQUEvbEQsRUFBQTNhLEVBQUEsR0FBQU4sRUFBQWt4RCxHQUFBOFAsU0FBQS9sRCxFQUFBM2EsRUFBQSxJQUFxRkQsRUFBQTZFLE1BQVF3b0QsSUFBQW56QyxFQUFBMG1ELFNBQUFybUQsRUFBQThHLE9BQUEyN0IsRUFBQXo1QyxPQUFBNUQsRUFBQWtoRSxhQUFBLElBQWtENWdFLEdBQUEsR0FBUSxPQUFBRCxFQUF3UCxTQUFBOGdFLEdBQUFsbUQsRUFBQUssR0FBaUIsWUFBQUEsRUFBQTRsRCxZQUFBLENBQTJCLElBQUE3Z0UsRUFBQSxJQUFBbWxCLFdBQUF2SyxFQUFBak4sT0FBQXNOLEVBQUFvRyxPQUFBLEVBQUFwRyxFQUFBOGxELGlCQUFBLEdBQUE5Z0UsRUFBQSxJQUFBa2xCLFdBQUFsSyxFQUFBMVgsUUFBMEYsR0FBQXk5RCxHQUFBaGhFLEVBQUFDLEtBQUE2OUMsYUFBQTdpQyxFQUFBMVgsT0FBQSxVQUFBckIsTUFBQSx3QkFBQStZLEVBQUFveUMsSUFBQSxzREFBdUksT0FBT3JQLEtBQUEsSUFBQTRULFNBQUEzeEQsRUFBQTBOLE9BQUEsR0FBQTBULE9BQUEsR0FBd0MsT0FBTzI4QixLQUFBcGpDLEVBQUF5RyxPQUFBcEcsRUFBQW9HLFFBQXdCLFNBQUE0L0MsR0FBQXJtRCxHQUFlLElBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQSxJQUFBMndELElBQW9CQyxPQUFBLElBQVN0akQsRUFBQSxJQUFBMDNDLFNBQUFoM0MsRUFBQSxHQUFBTCxLQUFBeWlDLEVBQUE2VCxHQUFBNlAsT0FBQXhtRCxFQUFBLEdBQTRDLEdBQUE4aUMsSUFBQWdDLE9BQUFDLGFBQUEsbUJBQUFqQyxHQUFBLFNBQUFBLEVBQUFwd0MsRUFBQWd6RCxlQUFBLFdBQUEzL0QsRUFBQTR3RCxHQUFBcVEsVUFBQWhuRCxFQUFBLEdBQUFLLEVBQUFrbUQsR0FBQXZtRCxFQUFBamEsUUFBc0gsWUFBQSs4QyxFQUFBcHdDLEVBQUFnekQsZUFBQSxNQUFBMy9ELEVBQUE0d0QsR0FBQXFRLFVBQUFobkQsRUFBQSxHQUFBSyxFQUFBa21ELEdBQUF2bUQsRUFBQWphLE9BQXdFLENBQUssWUFBQSs4QyxFQUFBLFVBQUE5NkMsTUFBQSxrQ0FBQTg2QyxHQUFtRSxJQUFBcjlDLEVBQUFreEQsR0FBQTZQLE9BQUF4bUQsRUFBQSxHQUFxQixHQUFBdmEsSUFBQXEvQyxPQUFBQyxhQUFBLFNBQUFyeUMsRUFBQWd6RCxlQUFBLGVBQWdFLENBQUssWUFBQWpnRSxFQUFBLFVBQUF1QyxNQUFBLCtCQUFBODZDLEdBQWdFcHdDLEVBQUFnekQsZUFBQSxNQUF1QjMvRCxFQUFBNHdELEdBQUFxUSxVQUFBaG5ELEVBQUEsSUFBQUssRUFBemxDLFNBQUFLLEVBQUFLLEdBQWlCLFFBQUFqYixLQUFBQyxFQUFBLEdBQUEyTSxFQUFBLEVBQXNCQSxFQUFBcU8sRUFBSXJPLEdBQUEsR0FBTSxJQUFBc04sRUFBQTIyQyxHQUFBNlAsT0FBQTlsRCxFQUFBM2EsR0FBQXNhLEVBQUFzMkMsR0FBQThQLFNBQUEvbEQsRUFBQTNhLEVBQUEsR0FBQSs4QyxFQUFBNlQsR0FBQThQLFNBQUEvbEQsRUFBQTNhLEVBQUEsR0FBQU4sRUFBQWt4RCxHQUFBOFAsU0FBQS9sRCxFQUFBM2EsRUFBQSxJQUFBb0UsT0FBQSxFQUE4RkEsRUFBQTI0QyxFQUFBcjlDLEdBQUEsT0FBQUssRUFBQTZFLE1BQXNCd29ELElBQUFuekMsRUFBQW1ILE9BQUE5RyxFQUFBc21ELFlBQUF4OEQsRUFBQTA4RCxpQkFBQS9qQixFQUFBejVDLE9BQUE1RCxJQUF5RE0sR0FBQSxHQUFRLE9BQUFELEVBQW0zQm1oRSxDQUFBam5ELEVBQUFqYSxHQUErQixRQUFBb0UsRUFBQXFmLEVBQUE5akIsRUFBQUcsRUFBQXFCLEVBQUFoQixFQUFBcUIsRUFBQWlWLEVBQUFqVyxFQUFBaUIsRUFBQWIsRUFBQTA5QyxFQUFBLEVBQWtDQSxFQUFBdCtDLEVBQUlzK0MsR0FBQSxHQUFNLElBQUE5RyxFQUFBbDlCLEVBQUFna0MsR0FBQUcsT0FBQSxFQUFvQixPQUFBakgsRUFBQTRWLEtBQWMsV0FBQTNPLEVBQUFvaUIsR0FBQTVtRCxFQUFBdTlCLEdBQUE3cUMsRUFBQThsRCxPQUFBdEMsS0FBQWdSLEdBQUFDLE1BQUEzaUIsRUFBQVYsS0FBQVUsRUFBQXI5QixRQUFBelUsRUFBQXlqRCxTQUFBLElBQUF6UyxFQUFBaHhDLEVBQUE4bEQsT0FBQXRDLE1BQTZGLE1BQU0sV0FBQTFSLEVBQUFvaUIsR0FBQTVtRCxFQUFBdTlCLEdBQUE1MkMsRUFBQSxJQUFBZ3dELEdBQUFRLE9BQUEzUyxFQUFBVixLQUFBVSxFQUFBcjlCLFFBQUF6VSxFQUFBOGxELE9BQUE4SixJQUFBMzdELEVBQUF5Z0UsZUFBQTdwQixFQUFBbDBDLE9BQUEsR0FBZ0csTUFBTSxXQUFBbWdCLEVBQUErekIsRUFBZSxNQUFNLFdBQUFpSCxFQUFBb2lCLEdBQUE1bUQsRUFBQXU5QixHQUFBNTJDLEVBQUEsSUFBQWd3RCxHQUFBUSxPQUFBM1MsRUFBQVYsS0FBQVUsRUFBQXI5QixRQUFBelUsRUFBQThsRCxPQUFBNk8sS0FBQTFnRSxFQUFBMmdFLGNBQUEvcEIsRUFBQWwwQyxRQUE4RixNQUFNLFdBQUFtN0MsRUFBQW9pQixHQUFBNW1ELEVBQUF1OUIsR0FBQTdxQyxFQUFBOGxELE9BQUErTyxLQUFBQyxHQUFBTCxNQUFBM2lCLEVBQUFWLEtBQUFVLEVBQUFyOUIsUUFBQXpVLEVBQUErd0QsV0FBQS93RCxFQUFBOGxELE9BQUErTyxLQUFBOUQsV0FBQTFpRCxFQUFBck8sRUFBQThsRCxPQUFBK08sS0FBQUUsaUJBQW9JLE1BQU0sV0FBQWpqQixFQUFBb2lCLEdBQUE1bUQsRUFBQXU5QixHQUFBN3FDLEVBQUE4bEQsT0FBQWtQLEtBQUFDLEdBQUFSLE1BQUEzaUIsRUFBQVYsS0FBQVUsRUFBQXI5QixRQUFBelUsRUFBQWd4RCxTQUFBaHhELEVBQUE4bEQsT0FBQWtQLEtBQUFoRSxTQUFBaHhELEVBQUFpeEQsVUFBQWp4RCxFQUFBOGxELE9BQUFrUCxLQUFBL0QsVUFBQWp4RCxFQUFBazFELGlCQUFBbDFELEVBQUE4bEQsT0FBQWtQLEtBQUFFLGlCQUFxTCxNQUFNLFdBQUExaEUsRUFBQXEzQyxFQUFlLE1BQU0sV0FBQWlILEVBQUFvaUIsR0FBQTVtRCxFQUFBdTlCLEdBQUF6M0MsRUFBQStoRSxHQUFBVixNQUFBM2lCLEVBQUFWLEtBQUFVLEVBQUFyOUIsUUFBaUQsTUFBTSxXQUFBcTlCLEVBQUFvaUIsR0FBQTVtRCxFQUFBdTlCLEdBQUE3cUMsRUFBQThsRCxPQUFBc1AsS0FBQUMsR0FBQVosTUFBQTNpQixFQUFBVixLQUFBVSxFQUFBcjlCLFFBQUF6VSxFQUFBczFELFVBQUF0MUQsRUFBQThsRCxPQUFBc1AsS0FBQUUsVUFBaUcsTUFBTSxXQUFBemhFLEVBQUFnM0MsRUFBZSxNQUFNLFdBQUFpSCxFQUFBb2lCLEdBQUE1bUQsRUFBQXU5QixHQUFBN3FDLEVBQUE4bEQsT0FBQW1NLElBQUFzRCxHQUFBZCxNQUFBM2lCLEVBQUFWLEtBQUFVLEVBQUFyOUIsUUFBNEQsTUFBTSxXQUFBcTlCLEVBQUFvaUIsR0FBQTVtRCxFQUFBdTlCLEdBQUE3cUMsRUFBQThsRCxPQUFBMFAsS0FBQUMsR0FBQWhCLE1BQUEzaUIsRUFBQVYsS0FBQVUsRUFBQXI5QixRQUFBelUsRUFBQTAxRCxXQUFBLElBQUF2akIsRUFBQW55QyxFQUFBOGxELE9BQUEwUCxNQUErRixNQUFNLFdBQUExakIsRUFBQW9pQixHQUFBNW1ELEVBQUF1OUIsR0FBQTUyQyxFQUFBLElBQUFnd0QsR0FBQVEsT0FBQTNTLEVBQUFWLEtBQUFVLEVBQUFyOUIsUUFBQXpVLEVBQUE4bEQsT0FBQTZQLEtBQUExaEUsRUFBQTJnRSxjQUFBL3BCLEVBQUFsMEMsUUFBOEYsTUFBTSxXQUFBM0QsRUFBQTYzQyxFQUFlLE1BQU0sV0FBQS9nQyxFQUFBK2dDLEVBQWUsTUFBTSxXQUFBcHpDLEVBQUFvekMsRUFBZSxNQUFNLFdBQUFoMkMsRUFBQWcyQyxFQUFlLE1BQU0sV0FBQTEzQyxFQUFBMDNDLEVBQWUsTUFBTSxXQUFBcjJDLEVBQUFxMkMsRUFBZSxNQUFNLFdBQUEvMUMsRUFBQSsxQyxHQUFnQixJQUFBNWIsRUFBQWlsQyxHQUFBNW1ELEVBQUF6WixHQUFjLEdBQUFtTSxFQUFBOGxELE9BQUF4eUQsS0FBQXNpRSxHQUFBbkIsTUFBQXhsQyxFQUFBbWlCLEtBQUFuaUIsRUFBQXhhLE9BQUFyaEIsR0FBQTRNLEVBQUEwakQsTUFBQTFqRCxFQUFBOGxELE9BQUF4eUQsS0FBQU4sR0FBQThXLEVBQUEsQ0FBeUUsSUFBQXdwQixFQUFBLElBQUFqbEIsRUFBQWtsQixFQUFBMmdDLEdBQUE1bUQsRUFBQXhELEdBQUFtb0MsRUFBQTRqQixHQUFBcEIsTUFBQWxoQyxFQUFBNmQsS0FBQTdkLEVBQUE5ZSxPQUFBelUsRUFBQXMxRCxVQUFBaGlDLEdBQUEvdEIsRUFBQTJ1RCxHQUFBNW1ELEVBQUF0YSxHQUEwRWdOLEVBQUFraUQsT0FBQW1KLEdBQUFvSixNQUFBbHZELEVBQUE2ckMsS0FBQTdyQyxFQUFBa1AsT0FBQXc5QixFQUFBanlDLE9BQXVDLENBQUssSUFBQXZJLEVBQUEsVUFBQW5DLE1BQUEsa0RBQXdFLElBQUFnOUMsRUFBQTRoQixHQUFBNW1ELEVBQUE3VixHQUFjcStELEdBQUFyQixNQUFBbmlCLEVBQUFsQixLQUFBa0IsRUFBQTc5QixPQUFBelUsR0FBNEIsSUFBQXV5QyxFQUFBMmhCLEdBQUE1bUQsRUFBQTlaLEdBQWMsR0FBQXVpRSxHQUFBdEIsTUFBQWxpQixFQUFBbkIsS0FBQW1CLEVBQUE5OUIsT0FBQXpVLEVBQUFrMUQsaUJBQUFsMUQsRUFBQXMxRCxVQUFBdDFELEVBQUFraUQsUUFGNnZDLFNBQUFsMEMsR0FBYyxRQUFBSyxFQUFBamIsRUFBQTRhLEVBQUE4M0MsT0FBQXRDLEtBQUF3UyxjQUFBM2lFLEVBQUFJLE9BQUFxRSxLQUFBMUUsR0FBQTRNLEVBQUEsRUFBNkRBLEVBQUEzTSxFQUFBc0QsT0FBV3FKLEdBQUEsR0FBTSxJQUFBc04sRUFBQWphLEVBQUEyTSxHQUFBMk4sRUFBQXZhLEVBQUFrYSxJQUFrQmUsRUFBQUwsRUFBQWswQyxPQUFBdHVELElBQUErWixJQUFBc29ELFdBQUEzc0QsU0FBQWdFLElBQTRDLFFBQUE4aUMsRUFBQSxFQUFZQSxFQUFBcGlDLEVBQUFrMEMsT0FBQXZyRCxPQUFrQnk1QyxHQUFBLEVBQUEvaEMsRUFBQUwsRUFBQWswQyxPQUFBdHVELElBQUF3OEMsR0FBQXBpQyxFQUFBa29ELFlBQUFsb0QsRUFBQTYzQyxVQUFBeDNDLEVBQUEvYSxLQUFBLE1BQUE4OEMsRUFBQS9oQyxFQUFBL2EsS0FBQTBhLEVBQUFrb0QsWUFBQTFiLFFBQUFwSyxHQUFBcGlDLEVBQUEwbkQsV0FBQWhTLFFBQUFyMUMsRUFBQS9hLEtBQUEwYSxFQUFBMG5ELFdBQUFTLGlCQUFBL2xCLElBRXI3Q29HLENBQUF4MkMsR0FBQW5MLEVBQUEsQ0FBNkUsSUFBQTI5QyxFQUFBMGhCLEdBQUE1bUQsRUFBQXpZLEdBQWNtTCxFQUFBbzJELGFBQUFDLEdBQUE1QixNQUFBamlCLEVBQUFwQixLQUFBb0IsRUFBQS85QixhQUF5Q3pVLEVBQUFvMkQsZ0JBQXVCLEdBQUFqakUsRUFBQSxDQUFNLElBQUFzL0MsRUFBQXloQixHQUFBNW1ELEVBQUFuYSxHQUFjNk0sRUFBQThsRCxPQUFBd1EsS0FBQUMsR0FBQTlCLE1BQUFoaUIsRUFBQXJCLEtBQUFxQixFQUFBaCtCLFFBQUF6VSxFQUFBK3RDLFNBQUF5b0IsT0FBMEQsR0FBQWhpRSxFQUFBLENBQU0sSUFBQWsrQyxFQUFBd2hCLEdBQUE1bUQsRUFBQTlZLEdBQWN3TCxFQUFBOGxELE9BQUEyUSxLQUFBQyxHQUFBakMsTUFBQS9oQixFQUFBdEIsS0FBQXNCLEVBQUFqK0IsUUFBd0MsR0FBQXFDLEVBQUEsQ0FBTSxJQUFBNjdCLEVBQUF1aEIsR0FBQTVtRCxFQUFBd0osR0FBYzlXLEVBQUE4bEQsT0FBQTZRLEtBQUFDLEdBQUFuQyxNQUFBOWhCLEVBQUF2QixLQUFBdUIsRUFBQWwrQixPQUFBelUsRUFBQTBqRCxPQUFnRCxHQUFBNXVELEVBQUEsQ0FBTSxJQUFBODlDLEVBQUFzaEIsR0FBQTVtRCxFQUFBeFksR0FBY2tMLEVBQUE4bEQsT0FBQStRLEtBQUFDLEdBQUFyQyxNQUFBN2hCLEVBQUF4QixLQUFBd0IsRUFBQW4rQixRQUFBelUsRUFBQSsyRCxNQUFBLzJELEVBQUE4bEQsT0FBQStRLEtBQThELE9BQUE3MkQsRUFBbU5veUMsT0FBQXo5QyxVQUFBcWlFLGFBQUEsV0FBeUMsSUFBQWhwRCxFQUFBLFdBQWlCLElBQUksSUFBQUEsS0FBUUssRUFBQTVhLE9BQUFDLGVBQUFOLEVBQUFpYixFQUFBTCxRQUFBSyxFQUF1QyxNQUFBTCxJQUFVLE9BQUE1YSxFQUE5RSxHQUF1RmliLEVBQUEsU0FBQUwsR0FBaUIsU0FBQTNZLEtBQUEsTUFBQWdrQixZQUFnQyxJQUFBaEwsRUFBQStqQyxPQUFBLzhDLE1BQUFqQyxFQUFBaWIsRUFBQTFYLE9BQUF0RCxFQUFBMmEsRUFBQTRqQyxPQUFBNWpDLEdBQUEsRUFBOEMsR0FBQTNhLFNBQUEsS0FBQUEsRUFBQSxHQUFBQSxHQUFBRCxHQUFBLENBQTZCLElBQUE0TSxFQUFBc04sRUFBQWUsRUFBQWtpQyxXQUFBbDlDLEdBQXdCLE9BQUFpYSxHQUFBLE9BQUFBLEdBQUEsT0FBQWxhLEVBQUFDLEVBQUEsSUFBQTJNLEVBQUFxTyxFQUFBa2lDLFdBQUFsOUMsRUFBQSxZQUFBMk0sR0FBQSxZQUFBc04sRUFBQSxPQUFBdE4sRUFBQSxZQUFBc04sSUFBMEdVLElBQUFva0MsT0FBQXo5QyxVQUFBLGVBQW9DWCxNQUFBcWEsRUFBQTIxQyxjQUFBLEVBQUF4cUQsVUFBQSxJQUFvQzQ0QyxPQUFBejlDLFVBQUFxaUUsWUFBQTNvRCxFQUF0YyxHQUEwZSxJQUFBNnlDLEdBQUEsRUFBQUssSUFBQSxFQUFBMFYsR0FBQSxJQUFBN2pFLEVBQUE4akUsR0FBQSxJQUFBOWpFLEVBQUErdEQsR0FBQSxJQUFBNW9DLFdBQUEsSUFBQTZvQyxHQUFBLElBQUFkLFlBQUEsSUFBQWUsR0FBQSxJQUFBOW9DLFdBQUEsSUFBQStvQyxHQUFBLElBQUFoQixZQUFBLElBQUFVLEdBQUEsSUFBQXpvQyxZQUFBLGlEQUFBMG9DLEdBQUEsSUFBQTd0RCxFQUFBMnRELEdBQUEsSUFBQXhvQyxXQUFBLEtBQUF1b0MsR0FBQSxJQUFBUixZQUFBLEtBRnAvVSxTQUFBdHlDLEVBQUFLLEdBQWdCLElBQUFqYixFQUFNLElBQUFBLEVBQUEsRUFBUUEsRUFBQSxJQUFJQSxFQUFBNGEsRUFBQXF5QyxNQUFBanRELEdBQUEsRUFBaUIsSUFBQTRhLEVBQUFxeUMsTUFBQSxNQUFBcnlDLEVBQUFxeUMsTUFBQSxPQUFBcnlDLEVBQUFxeUMsTUFBQSxPQUFBanRELEVBQUEsRUFBb0RBLEVBQUEsS0FBS0EsRUFBQTRhLEVBQUF1eUMsTUFBQW50RCxHQUFBLElBQUFBLEVBQXFCLElBQUFBLEVBQUEsRUFBUUEsRUFBQSxNQUFNQSxFQUFBNGEsRUFBQXV5QyxNQUFBLEdBQUFudEQsS0FBb0IsSUFBQUEsRUFBQSxFQUFRQSxFQUFBLElBQUlBLEVBQUE0YSxFQUFBdXlDLE1BQUEsSUFBQW50RCxHQUFBLElBQUFBLEVBQXlCLElBQUFBLEVBQUEsRUFBUUEsRUFBQSxNQUFNQSxFQUFBNGEsRUFBQXV5QyxNQUFBLElBQUFudEQsR0FBQSxJQUFBQSxFQUF5QixJQUFBQSxFQUFBLEVBQVFBLEVBQUEsSUFBSUEsRUFBQWliLEVBQUFneUMsTUFBQWp0RCxHQUFBLEVBQWlCLElBQUFpYixFQUFBZ3lDLE1BQUEsTUFBQWp0RCxFQUFBLEVBQXNCQSxFQUFBLEtBQUtBLEVBQUFpYixFQUFBa3lDLE1BQUFudEQsTUFFbThVdWEsQ0FBQXNwRCxHQUFBQyxJQUFBNXBELEVBQUE2ekMsR0FBQUMsR0FBQSxLQUFBOXpDLEVBQUErekMsR0FBQUMsR0FBQSxLQUFBSCxHQUFBLE1BQUFDLEdBQUEsUUFBdUQsSUFBQWdULEdBRnI0UixTQUFBcG1ELEVBQUFLLEdBQWdCLElBQUFqYixFQUFBNE0sRUFBQXNOLEVBQUEsSUFBQWphLEVBQUEyYSxFQUFBSyxHQUFxQixHQUFHLE9BQUFqYixFQUFBTCxFQUFBdWEsR0FBQTdWLEVBQUE2VixFQUFBLE1BQXdCLE9BQUF0TixFQUFBeEwsRUFBQThZLEdBQWMsTUFBTSxPQUFBdE4sRUFBQTdNLEVBQUFtYSxFQUFBMnBELEdBQUFDLElBQW9CLE1BQU0sT0FBQWxrRSxFQUFBc2EsSUFBQXN6QyxNQUFBdHpDLEVBQUF1ekMsT0FBQTdnRCxFQUFBN00sRUFBQW1hLElBQUFzekMsTUFBQXR6QyxFQUFBdXpDLE9BQW1ELE1BQU0sUUFBQTdnRCxFQUFBdWhELEdBQWEsR0FBQXZoRCxJQUFBa2hELEdBQUEsVUFBQTVyRCxNQUFBLHFCQUF3Q2xDLEdBQVUsT0FBQWthLEVBQUFxekMsUUFBQXJ6QyxFQUFBOGIsS0FBQXp5QixPQUFBLG1CQUFBMlcsRUFBQThiLEtBQUFyc0IsTUFBQXVRLEVBQUE4YixLQUFBcnNCLE1BQUEsRUFBQXVRLEVBQUFxekMsU0FBQXJ6QyxFQUFBOGIsS0FBQXFxQixTQUFBLEVBQUFubUMsRUFBQXF6QyxTQUFBcnpDLEVBQUE4YixNQUV3cVJ0ZixFQUFBblYsVUFBQXdpRSxRQUFBLFdBQStCLE9BQUEzckIsTUFBQW4yQyxLQUFBbXNELEtBQUFoVyxNQUFBbjJDLEtBQUFvc0QsS0FBQWpXLE1BQUFuMkMsS0FBQXFzRCxLQUFBbFcsTUFBQW4yQyxLQUFBc3NELEtBQXNFNzNDLEVBQUFuVixVQUFBeWlFLFNBQUEsU0FBQXBwRCxFQUFBSyxHQUFvQyxpQkFBQUwsS0FBQXc5QixNQUFBbjJDLEtBQUFtc0QsS0FBQWhXLE1BQUFuMkMsS0FBQXFzRCxPQUFBcnNELEtBQUFtc0QsR0FBQXh6QyxFQUFBM1ksS0FBQXFzRCxHQUFBMXpDLEtBQUEzWSxLQUFBbXNELEtBQUFuc0QsS0FBQW1zRCxHQUFBeHpDLEtBQUEzWSxLQUFBcXNELEtBQUFyc0QsS0FBQXFzRCxHQUFBMXpDLElBQUEsaUJBQUFLLEtBQUFtOUIsTUFBQW4yQyxLQUFBb3NELEtBQUFqVyxNQUFBbjJDLEtBQUFzc0QsT0FBQXRzRCxLQUFBb3NELEdBQUFwekMsRUFBQWhaLEtBQUFzc0QsR0FBQXR6QyxLQUFBaFosS0FBQW9zRCxLQUFBcHNELEtBQUFvc0QsR0FBQXB6QyxLQUFBaFosS0FBQXNzRCxLQUFBdHNELEtBQUFzc0QsR0FBQXR6QyxLQUF3UHZFLEVBQUFuVixVQUFBMGlFLEtBQUEsU0FBQXJwRCxHQUE4QjNZLEtBQUEraEUsU0FBQXBwRCxFQUFBLE9BQXNCbEUsRUFBQW5WLFVBQUEyaUUsS0FBQSxTQUFBdHBELEdBQThCM1ksS0FBQStoRSxTQUFBLEtBQUFwcEQsSUFBc0JsRSxFQUFBblYsVUFBQTRpRSxVQUFBLFNBQUF2cEQsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBc04sRUFBQUssRUFBQXlpQyxHQUFpRCxJQUFBcjlDLEVBQUFzQyxLQUFBb0MsR0FBQXVXLEVBQUFLLEdBQUF5SSxHQUFBMWpCLEVBQUFDLEdBQUFMLEdBQUFnTixFQUFBc04sR0FBQW5hLEdBQUF3YSxFQUFBeWlDLEdBQTJDLzZDLEtBQUEraEUsU0FBQXBwRCxFQUFBSyxHQUFBaFosS0FBQStoRSxTQUFBenBELEVBQUF5aUMsR0FBc0MsUUFBQTU3QyxFQUFBLEVBQVlBLEdBQUEsRUFBS0EsSUFBQSxDQUFLLElBQUFoQixFQUFBLEVBQUFpRSxFQUFBakQsR0FBQSxHQUFBc2lCLEVBQUF0aUIsR0FBQSxFQUFBeEIsRUFBQXdCLEdBQUFzVixHQUFBLEVBQUFyUyxFQUFBakQsR0FBQSxFQUFBc2lCLEVBQUF0aUIsR0FBQSxFQUFBeEIsRUFBQXdCLEdBQUEsRUFBQXJCLEVBQUFxQixHQUFBWCxFQUFBLEVBQUFpakIsRUFBQXRpQixHQUFBLEVBQUFpRCxFQUFBakQsR0FBMkUsT0FBQXNWLEVBQUEsQ0FBVSxJQUFBaFYsRUFBQW1GLEtBQUFLLElBQUE5RyxFQUFBLEtBQUFLLEVBQUFpVyxFQUEwQixLQUFBaFYsRUFBQSxJQUFXLElBQUFiLElBQUFULEVBQUF5RyxLQUFBa21CLEtBQUFyckIsS0FBQSxFQUFBZ1YsR0FBOEIsRUFBQTdWLEtBQUEsUUFBQU8sR0FBQXpCLEVBQUFza0UsS0FBQXhpRSxFQUFBNEMsRUFBQWpELEdBQUFzaUIsRUFBQXRpQixHQUFBeEIsRUFBQXdCLEdBQUFyQixFQUFBcUIsR0FBQVAsSUFBQSxJQUFBTyxHQUFBekIsRUFBQXVrRSxLQUFBemlFLEVBQUE0QyxFQUFBakQsR0FBQXNpQixFQUFBdGlCLEdBQUF4QixFQUFBd0IsR0FBQXJCLEVBQUFxQixHQUFBUCxLQUE0RixJQUFBMDlDLElBQUFuK0MsRUFBQXlHLEtBQUFrbUIsS0FBQXJyQixLQUFBLEVBQUFnVixHQUE4QixFQUFBNm5DLEtBQUEsUUFBQW45QyxHQUFBekIsRUFBQXNrRSxLQUFBeGlFLEVBQUE0QyxFQUFBakQsR0FBQXNpQixFQUFBdGlCLEdBQUF4QixFQUFBd0IsR0FBQXJCLEVBQUFxQixHQUFBbTlDLElBQUEsSUFBQW45QyxHQUFBekIsRUFBQXVrRSxLQUFBemlFLEVBQUE0QyxFQUFBakQsR0FBQXNpQixFQUFBdGlCLEdBQUF4QixFQUFBd0IsR0FBQXJCLEVBQUFxQixHQUFBbTlDLFVBQTZGLENBQUssT0FBQW4rQyxFQUFBLFNBQWtCLElBQUFxM0MsR0FBQWgzQyxFQUFBTCxFQUFXLEVBQUFxM0MsS0FBQSxRQUFBcjJDLEdBQUF6QixFQUFBc2tFLEtBQUF4aUUsRUFBQTRDLEVBQUFqRCxHQUFBc2lCLEVBQUF0aUIsR0FBQXhCLEVBQUF3QixHQUFBckIsRUFBQXFCLEdBQUFxMkMsSUFBQSxJQUFBcjJDLEdBQUF6QixFQUFBdWtFLEtBQUF6aUUsRUFBQTRDLEVBQUFqRCxHQUFBc2lCLEVBQUF0aUIsR0FBQXhCLEVBQUF3QixHQUFBckIsRUFBQXFCLEdBQUFxMkMsUUFBOEYvZ0MsRUFBQW5WLFVBQUE2aUUsUUFBQSxTQUFBeHBELEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLEdBQTJDLElBQUFLLEVBQUFLLEVBQUEsS0FBQTVhLEVBQUE0YSxHQUFBb2lDLEVBQUEvaEMsRUFBQSxLQUFBaGIsRUFBQWdiLEdBQUF0YixFQUFBNGEsRUFBQSxLQUFBM04sRUFBQWdPLEdBQUF2VyxFQUFBMjRDLEVBQUEsS0FBQTlpQyxFQUFBZSxHQUE0RGhaLEtBQUFraUUsVUFBQXZwRCxFQUFBSyxFQUFBVixFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQUF1SSxFQUFBc04sSUFBZ0N6WixFQUFBYyxVQUFBaXhELE9BQUEsU0FBQTUzQyxFQUFBSyxHQUFrQ2haLEtBQUF1c0QsU0FBQTNwRCxNQUFvQnFMLEtBQUEsSUFBQTJyQixFQUFBamhCLEVBQUFzbEIsRUFBQWpsQixLQUFtQnhhLEVBQUFjLFVBQUF5eEQsT0FBQSxTQUFBcDRDLEVBQUFLLEdBQWtDaFosS0FBQXVzRCxTQUFBM3BELE1BQW9CcUwsS0FBQSxJQUFBMnJCLEVBQUFqaEIsRUFBQXNsQixFQUFBamxCLEtBQW1CeGEsRUFBQWMsVUFBQTB4RCxRQUFBeHlELEVBQUFjLFVBQUE4aUUsY0FBQSxTQUFBenBELEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLEdBQXFFalksS0FBQXVzRCxTQUFBM3BELE1BQW9CcUwsS0FBQSxJQUFBaytDLEdBQUF4ekMsRUFBQXl6QyxHQUFBcHpDLEVBQUFxekMsR0FBQXR1RCxFQUFBdXVELEdBQUF0dUQsRUFBQTQ3QixFQUFBanZCLEVBQUFzekIsRUFBQWhtQixLQUF1Q3paLEVBQUFjLFVBQUEraUUsT0FBQTdqRSxFQUFBYyxVQUFBcTJELGlCQUFBLFNBQUFoOUMsRUFBQUssRUFBQWpiLEVBQUFDLEdBQW1FZ0MsS0FBQXVzRCxTQUFBM3BELE1BQW9CcUwsS0FBQSxJQUFBaytDLEdBQUF4ekMsRUFBQXl6QyxHQUFBcHpDLEVBQUE0Z0IsRUFBQTc3QixFQUFBa2dDLEVBQUFqZ0MsS0FBNkJRLEVBQUFjLFVBQUF5TCxNQUFBdk0sRUFBQWMsVUFBQWd4RCxVQUFBLFdBQW9EdHdELEtBQUF1c0QsU0FBQTNwRCxNQUFvQnFMLEtBQUEsT0FBV3pQLEVBQUFjLFVBQUFvRyxPQUFBLFNBQUFpVCxHQUFnQyxHQUFBQSxFQUFBNHpDLFNBQUE1ekMsSUFBQTR6QyxjQUEyQixHQUFBNXpDLGFBQUFsRSxFQUFBLENBQXdCLElBQUF1RSxFQUFBTCxFQUFRLE9BQUEzWSxLQUFBdXdELE9BQUF2M0MsRUFBQW16QyxHQUFBbnpDLEVBQUFvekMsSUFBQXBzRCxLQUFBK3dELE9BQUEvM0MsRUFBQXF6QyxHQUFBcnpDLEVBQUFvekMsSUFBQXBzRCxLQUFBK3dELE9BQUEvM0MsRUFBQXF6QyxHQUFBcnpDLEVBQUFzekMsSUFBQXRzRCxLQUFBK3dELE9BQUEvM0MsRUFBQW16QyxHQUFBbnpDLEVBQUFzekMsU0FBQXRzRCxLQUFBK0ssUUFBcUhqSCxNQUFBeEUsVUFBQXNELEtBQUEwRSxNQUFBdEgsS0FBQXVzRCxTQUFBNXpDLElBQTRDbmEsRUFBQWMsVUFBQWdqRSxlQUFBLFdBQXVDLFFBQUF0cEQsRUFBQSxJQUFBdkUsRUFBQTFXLEVBQUEsRUFBQUMsRUFBQSxFQUFBMk0sRUFBQSxFQUFBc04sRUFBQSxFQUFBSyxFQUFBLEVBQTJDQSxFQUFBdFksS0FBQXVzRCxTQUFBanJELE9BQXVCZ1gsSUFBQSxDQUFLLElBQUF5aUMsRUFBdkUvNkMsS0FBdUV1c0QsU0FBQWowQyxHQUFvQixPQUFBeWlDLEVBQUE5c0MsTUFBZSxRQUFBK0ssRUFBQStvRCxTQUFBaG5CLEVBQUFuaEIsRUFBQW1oQixFQUFBOWMsR0FBQWxnQyxFQUFBNE0sRUFBQW93QyxFQUFBbmhCLEVBQUE1N0IsRUFBQWlhLEVBQUE4aUMsRUFBQTljLEVBQTRDLE1BQU0sUUFBQWpsQixFQUFBK29ELFNBQUFobkIsRUFBQW5oQixFQUFBbWhCLEVBQUE5YyxHQUFBdHpCLEVBQUFvd0MsRUFBQW5oQixFQUFBM2hCLEVBQUE4aUMsRUFBQTljLEVBQXdDLE1BQU0sUUFBQWpsQixFQUFBbXBELFFBQUF4M0QsRUFBQXNOLEVBQUE4aUMsRUFBQW9SLEdBQUFwUixFQUFBcVIsR0FBQXJSLEVBQUFuaEIsRUFBQW1oQixFQUFBOWMsR0FBQXR6QixFQUFBb3dDLEVBQUFuaEIsRUFBQTNoQixFQUFBOGlDLEVBQUE5YyxFQUFxRCxNQUFNLFFBQUFqbEIsRUFBQWtwRCxVQUFBdjNELEVBQUFzTixFQUFBOGlDLEVBQUFvUixHQUFBcFIsRUFBQXFSLEdBQUFyUixFQUFBc1IsR0FBQXRSLEVBQUF1UixHQUFBdlIsRUFBQW5oQixFQUFBbWhCLEVBQUE5YyxHQUFBdHpCLEVBQUFvd0MsRUFBQW5oQixFQUFBM2hCLEVBQUE4aUMsRUFBQTljLEVBQWlFLE1BQU0sUUFBQXR6QixFQUFBNU0sRUFBQWthLEVBQUFqYSxFQUFnQixNQUFNLGtCQUFBaUMsTUFBQSwyQkFBQTg2QyxFQUFBOXNDLE9BQTRELE9BQUErSyxFQUFBOG9ELFdBQUE5b0QsRUFBQStvRCxTQUFBLEtBQUEvb0QsR0FBc0N4YSxFQUFBYyxVQUFBaWpFLEtBQUEsU0FBQTVwRCxHQUF5Q0EsRUFBQTZwRCxZQUFjLFFBQUF6a0UsRUFBQSxFQUFZQSxFQUFBaUMsS0FBQXVzRCxTQUFBanJELE9BQXVCdkQsR0FBQSxHQUFNLElBQUFDLEVBQWxFZ0MsS0FBa0V1c0QsU0FBQXh1RCxHQUFvQixNQUFBQyxFQUFBaVEsS0FBQTBLLEVBQUE0M0MsT0FBQXZ5RCxFQUFBNDdCLEVBQUE1N0IsRUFBQWlnQyxHQUFBLE1BQUFqZ0MsRUFBQWlRLEtBQUEwSyxFQUFBbzRDLE9BQUEveUQsRUFBQTQ3QixFQUFBNTdCLEVBQUFpZ0MsR0FBQSxNQUFBamdDLEVBQUFpUSxLQUFBMEssRUFBQXlwRCxjQUFBcGtFLEVBQUFtdUQsR0FBQW51RCxFQUFBb3VELEdBQUFwdUQsRUFBQXF1RCxHQUFBcnVELEVBQUFzdUQsR0FBQXR1RCxFQUFBNDdCLEVBQUE1N0IsRUFBQWlnQyxHQUFBLE1BQUFqZ0MsRUFBQWlRLEtBQUEwSyxFQUFBZzlDLGlCQUFBMzNELEVBQUFtdUQsR0FBQW51RCxFQUFBb3VELEdBQUFwdUQsRUFBQTQ3QixFQUFBNTdCLEVBQUFpZ0MsR0FBQSxNQUFBamdDLEVBQUFpUSxNQUFBMEssRUFBQTIzQyxZQUF1TXR3RCxLQUFBaWhELE9BQUF0b0MsRUFBQThwRCxVQUFBemlFLEtBQUFpaEQsS0FBQXRvQyxFQUFBc29DLFFBQUFqaEQsS0FBQXdzRCxTQUFBN3pDLEVBQUErcEQsWUFBQTFpRSxLQUFBd3NELE9BQUE3ekMsRUFBQWdxRCxVQUFBM2lFLEtBQUF5c0QsWUFBQTl6QyxFQUFBNnpDLFdBQTZIaHVELEVBQUFjLFVBQUFzakUsV0FBQSxTQUFBanFELEdBQW9DLFNBQUFLLEtBQWMsT0FBQXBVLEtBQUFvUyxNQUFBZ0MsT0FBQSxHQUFBcFUsS0FBQW9TLE1BQUFnQyxLQUFBOUosUUFBQXlKLEdBQXVELFNBQUE1YSxJQUFhLFFBQUE0YSxFQUFBclYsVUFBQXZGLEVBQUEsR0FBQUMsRUFBQSxFQUE2QkEsRUFBQXNGLFVBQUFoQyxPQUFtQnRELEdBQUEsR0FBTSxJQUFBMk0sRUFBQWdPLEVBQUEzYSxHQUFXMk0sR0FBQSxHQUFBM00sRUFBQSxJQUFBRCxHQUFBLEtBQUFBLEdBQUFpYixFQUFBck8sR0FBNEIsT0FBQTVNLEVBQW9CNGEsT0FBQSxJQUFBQSxJQUFBLEVBQWlCLFFBQUFoTyxFQUFBLEdBQUFzTixFQUFBLEVBQWlCQSxFQUFBalksS0FBQXVzRCxTQUFBanJELE9BQXVCMlcsR0FBQSxHQUFNLElBQUFLLEVBQTFFdFksS0FBMEV1c0QsU0FBQXQwQyxHQUFvQixNQUFBSyxFQUFBckssS0FBQXRELEdBQUEsSUFBQTVNLEVBQUF1YSxFQUFBc2hCLEVBQUF0aEIsRUFBQTJsQixHQUFBLE1BQUEzbEIsRUFBQXJLLEtBQUF0RCxHQUFBLElBQUE1TSxFQUFBdWEsRUFBQXNoQixFQUFBdGhCLEVBQUEybEIsR0FBQSxNQUFBM2xCLEVBQUFySyxLQUFBdEQsR0FBQSxJQUFBNU0sRUFBQXVhLEVBQUE2ekMsR0FBQTd6QyxFQUFBOHpDLEdBQUE5ekMsRUFBQSt6QyxHQUFBL3pDLEVBQUFnMEMsR0FBQWgwQyxFQUFBc2hCLEVBQUF0aEIsRUFBQTJsQixHQUFBLE1BQUEzbEIsRUFBQXJLLEtBQUF0RCxHQUFBLElBQUE1TSxFQUFBdWEsRUFBQTZ6QyxHQUFBN3pDLEVBQUE4ekMsR0FBQTl6QyxFQUFBc2hCLEVBQUF0aEIsRUFBQTJsQixHQUFBLE1BQUEzbEIsRUFBQXJLLE9BQUF0RCxHQUFBLEtBQWlMLE9BQUFBLEdBQVNuTSxFQUFBYyxVQUFBdWpFLE1BQUEsU0FBQWxxRCxHQUErQixJQUFBSyxFQUFBLFlBQWtCLE9BQUFBLEdBQUFoWixLQUFBNGlFLFdBQUFqcUQsR0FBQUssR0FBQSxJQUFBaFosS0FBQWloRCxNQUFBLFVBQUFqaEQsS0FBQWloRCxPQUFBLE9BQUFqaEQsS0FBQWloRCxLQUFBam9DLEdBQUEsZUFBQUEsR0FBQSxVQUFBaFosS0FBQWloRCxLQUFBLEtBQUFqaEQsS0FBQXdzRCxTQUFBeHpDLEdBQUEsWUFBQWhaLEtBQUF3c0QsT0FBQSxtQkFBQXhzRCxLQUFBeXNELFlBQUEsS0FBQXp6QyxHQUFBLE1BQThOeGEsRUFBQWMsVUFBQXdqRSxhQUFBLFNBQUFucUQsR0FBc0MsSUFBQUssRUFBQWhaLEtBQUE0aUUsV0FBQWpxRCxHQUFBNWEsRUFBQWk1QixTQUFBc3VCLGdCQUFBLHFDQUF5RixPQUFBdm5ELEVBQUFtbkQsYUFBQSxJQUFBbHNDLEdBQUFqYixHQUFnQyxJQUFBK3VELElBQVExMUIsS0FBQTMzQixFQUFBcXpELFNBQUFsMEQsRUFBQW11RCxPQUFBbnVELEdBQTJCbWtFLEdBQUEsV0FBQUMsTUFBNkJDLE1BQU1DLE1BQU9ELEdBQUFFLEtBQUEsU0FBQXhxRCxHQUFvQixPQUFBbTBDLEdBQUFnRyxTQUFBbjZDLEdBQUEsR0FBQUEsR0FBQSxnREFBQUEsSUFBK0V1cUQsR0FBQUMsS0FBQTdtQixFQUFBLEdBQUEybUIsR0FBQUcsS0FBQSxTQUFBenFELEdBQWtDLE9BQUFBLEVBQUF1aUMsV0FBQSxLQUF3QmdvQixHQUFBRSxLQUFBOW1CLEVBQUEsR0FBQTJtQixHQUFBSSxVQUFBLFNBQUExcUQsR0FBdUMsUUFBQUssS0FBQWpiLEVBQUEsRUFBaUJBLEVBQUE0YSxFQUFBclgsT0FBV3ZELEdBQUEsRUFBQWliLEVBQUFqYixHQUFBNGEsRUFBQXVpQyxXQUFBbjlDLEdBQTBCLE9BQUFpYixHQUFTa3FELEdBQUFHLFVBQUEsU0FBQTFxRCxHQUEwQixPQUFBQSxFQUFBclgsUUFBZ0IyaEUsR0FBQUssT0FBQSxTQUFBM3FELEdBQXVCLE9BQUFBLEdBQUEsVUFBQUEsSUFBdUJ1cUQsR0FBQUksT0FBQWhuQixFQUFBLEdBQUEybUIsR0FBQU0sTUFBQSxTQUFBNXFELEdBQXFDLE9BQUFBLEdBQTFhLFFBQTBhQSxJQUFBLE1BQUFBLFFBQUEsVUFBQUEsSUFBNkN1cUQsR0FBQUssTUFBQWpuQixFQUFBLEdBQUEybUIsR0FBQU8sT0FBQSxTQUFBN3FELEdBQXFDLE9BQUFBLEdBQUEsT0FBQUEsR0FBQSxVQUFBQSxJQUFpQ3VxRCxHQUFBTSxPQUFBbG5CLEVBQUEsR0FBQTJtQixHQUFBUSxNQUFBLFNBQUE5cUQsR0FBcUMsT0FBQUEsR0FBQSxPQUFBQSxHQUFBLE9BQUFBLEdBQUEsVUFBQUEsSUFBMkN1cUQsR0FBQU8sTUFBQW5uQixFQUFBLEdBQUEybUIsR0FBQVMsS0FBQSxTQUFBL3FELEdBQW1DLE9BQUFBLEdBQUFvcUQsS0FBQXBxRCxJQUFBLEVBQUFvcUQsR0FBQXBxRCxRQUFBLE9BQUFBLEdBQUEsT0FBQUEsR0FBQSxVQUFBQSxJQUFpRXVxRCxHQUFBUSxLQUFBcG5CLEVBQUEsR0FBQTJtQixHQUFBVSxNQUFBVixHQUFBUSxNQUFBUCxHQUFBUyxNQUFBVCxHQUFBTyxNQUFBUixHQUFBVyxNQUFBWCxHQUFBTSxNQUFBTCxHQUFBVSxNQUFBVixHQUFBSyxNQUFBTixHQUFBWSxPQUFBWixHQUFBSyxPQUFBSixHQUFBVyxPQUFBWCxHQUFBSSxPQUFBTCxHQUFBYSxhQUFBLFNBQUFuckQsR0FBMEosZUFBQUEsR0FBQSxPQUFBQSxHQUFBLE9BQUFBLEdBQUEsVUFBQUEsSUFBbUR1cUQsR0FBQVksYUFBQXhuQixFQUFBLEdBQUEybUIsR0FBQWMsSUFBQSxTQUFBcHJELEdBQXlDLE9BQUFtMEMsR0FBQWdHLFNBQUEsSUFBQW42QyxFQUFBclgsT0FBQSw4Q0FBQXFYLEVBQUF1aUMsV0FBQSxHQUFBdmlDLEVBQUF1aUMsV0FBQSxHQUFBdmlDLEVBQUF1aUMsV0FBQSxHQUFBdmlDLEVBQUF1aUMsV0FBQSxLQUErSWdvQixHQUFBYSxJQUFBem5CLEVBQUEsR0FBQTJtQixHQUFBZSxNQUFBZixHQUFBRSxLQUFBRCxHQUFBYyxNQUFBZCxHQUFBQyxLQUFBRixHQUFBZ0IsT0FBQWhCLEdBQUFLLE9BQUFKLEdBQUFlLE9BQUFmLEdBQUFJLE9BQUFMLEdBQUFpQixRQUFBakIsR0FBQUUsS0FBQUQsR0FBQWdCLFFBQUFoQixHQUFBQyxLQUFBRixHQUFBa0IsSUFBQWxCLEdBQUFLLE9BQUFKLEdBQUFpQixJQUFBakIsR0FBQUksT0FBQUwsR0FBQW1CLE9BQUEsU0FBQXpyRCxHQUFxTCxPQUFBQSxJQUFBLEtBQUFBLEdBQUEsS0FBQUEsRUFBQSxLQUFBQSxHQUFBLEtBQUFBLEdBQUEsWUFBQUEsR0FBQSxhQUFBQSxPQUFBLE1BQUFBLElBQUEsV0FBQUEsS0FBQSxhQUFBQSxPQUFBLE9BQUFBLEdBQUEsTUFBQXNxRCxHQUFBb0IsU0FBQTFyRCxHQUFBc3FELEdBQUFxQixTQUFBM3JELElBQ25sK0J1cUQsR0FBQWtCLE9BQUEsU0FBQXpyRCxHQUF1QixPQUFBc3FELEdBQUFtQixPQUFBenJELEdBQUFyWCxRQUEyQjJoRSxHQUFBb0IsU0FBQSxTQUFBMXJELEdBQXlCLFVBQUFBLEdBQUEsVUFBQUEsSUFBMEJ1cUQsR0FBQW1CLFNBQUEvbkIsRUFBQSxHQUFBMm1CLEdBQUFxQixTQUFBLFNBQUEzckQsR0FBMEMsVUFBQUEsR0FBQSxPQUFBQSxHQUFBLE9BQUFBLEdBQUEsVUFBQUEsSUFBOEN1cUQsR0FBQW9CLFNBQUFob0IsRUFBQSxHQUFBMm1CLEdBQUFzQixLQUFBLFNBQUE1ckQsR0FBc0MsSUFBQUssRUFBQUwsRUFBQXpZLFdBQUFuQyxFQUFBLGdEQUF3RHM3QixLQUFBcmdCLEdBQXFCLEdBQUFqYixFQUFBLENBQU0sSUFBQUMsRUFBQXNWLFdBQUEsT0FBQXZWLEVBQUEsSUFBQUEsRUFBQSxNQUFBQSxFQUFBLEdBQUF1RCxTQUFvRDBYLEdBQUFwVSxLQUFBb1MsTUFBQTJCLEVBQUEzYSxNQUFBa0MsV0FBaUMsUUFBQXlLLEVBQUEsR0FBQXNOLEVBQUEsRUFBQUssRUFBQVUsRUFBQTFYLE9BQTRCMlcsRUFBQUssRUFBSUwsR0FBQSxHQUFNLElBQUE4aUMsRUFBQS9oQyxFQUFBZixHQUFXdE4sR0FBQSxNQUFBb3dDLEVBQUEsTUFBQS9oQyxJQUFBZixHQUFBLGNBQUE4aUMsRUFBQSxVQUFBQSxFQUFBLElBQUFBLEVBQWlGLFFBQUFyOUMsR0FBQSxJQUFBMEUsRUFBQSxFQUFBcWYsR0FBdkI5VyxHQUFBLEVBQUFBLEVBQUFySixPQUFBLFVBQXVCQSxPQUE4QmMsRUFBQXFmLEVBQUlyZixHQUFBLEVBQUExRSxFQUFBa0YsS0FBQXFSLFNBQUF0SixFQUFBZ25DLE9BQUF2dkMsRUFBQSxRQUF3QyxPQUFBMUUsR0FBU3dsRSxHQUFBcUIsS0FBQSxTQUFBNXJELEdBQXFCLE9BQUFzcUQsR0FBQXNCLEtBQUE1ckQsR0FBQXJYLFFBQXlCMmhFLEdBQUF1QixLQUFBdkIsR0FBQUksVUFBQUgsR0FBQXNCLEtBQUF0QixHQUFBRyxVQUFBSixHQUFBd0IsT0FBQXhCLEdBQUFJLFVBQUFILEdBQUF1QixPQUFBdkIsR0FBQUcsVUFBQUwsR0FBQTBCLEtBQUEsU0FBQS9yRCxFQUFBSyxFQUFBamIsR0FBaUgsUUFBQUMsS0FBQTJNLEVBQUE1TSxFQUFBa2EsRUFBQSxFQUFxQkEsRUFBQXROLEVBQUlzTixJQUFBZSxHQUFBLEVBQUFoYixFQUFBaWEsR0FBQVUsRUFBQWkxQyxTQUFBNTBDLEdBQTRCLE9BQUErakMsT0FBQUMsYUFBQTExQyxNQUFBLEtBQUF0SixJQUF5Q2dsRSxHQUFBMkIsTUFBQSxTQUFBaHNELEVBQUFLLEVBQUFqYixHQUEwQixRQUFBQyxLQUFBMk0sRUFBQTVNLEVBQUEsRUFBQWthLEVBQUEsRUFBdUJBLEVBQUF0TixFQUFJc04sSUFBQWUsR0FBQSxFQUFBaGIsRUFBQWlhLEdBQUFVLEVBQUFrMUMsVUFBQTcwQyxHQUE2QixPQUFBK2pDLE9BQUFDLGFBQUExMUMsTUFBQSxLQUFBdEosSUFBeUNpbEUsR0FBQTBCLE1BQUEsU0FBQWhzRCxHQUFzQixRQUFBSyxLQUFBamIsRUFBQSxFQUFpQkEsRUFBQTRhLEVBQUFyWCxPQUFXdkQsR0FBQSxHQUFNLElBQUFDLEVBQUEyYSxFQUFBdWlDLFdBQUFuOUMsR0FBc0JpYixJQUFBMVgsUUFBQXRELEdBQUEsTUFBQWdiLElBQUExWCxRQUFBLElBQUF0RCxFQUF1QyxPQUFBZ2IsR0FBU2txRCxHQUFBeUIsTUFBQSxTQUFBaHNELEdBQXNCLFNBQUFBLEVBQUFyWCxRQUFtQixJQUFBc2pFLElBQVFDLGlCQUFBLG1JQUFBQyxpQkFBQSxrSUFBQUMsZUFBQSxtSUFBQUMsY0FBQSxtSUFBQUMsa0JBQUEsbUlBQUFDLGNBQUEsbUlBQUFDLFdBQUEsbUlBQUFDLFVBQUEsbUlBQUFDLGlCQUFBLG1JQUFBQyxnQkFBQSxvSUFBbTdDdEMsR0FBQXVDLFVBQUEsU0FBQTVzRCxFQUFBSyxFQUFBamIsRUFBQUMsR0FBK0IsSUFBQTJNLEVBQUFpNkQsR0FBQTVtRSxHQUFZLFlBQUEyTSxFQUFBLENBQWUsUUFBQXNOLEVBQUEsR0FBQUssRUFBQSxFQUFpQkEsRUFBQXZhLEVBQUl1YSxJQUFBLENBQUssSUFBQXlpQyxFQUFBcGlDLEVBQUFpMUMsU0FBQTUwQyxFQUFBVixHQUFzQkwsR0FBQThpQyxHQUFBLElBQUFnQyxPQUFBQyxhQUFBakMsR0FBQXB3QyxFQUFBLElBQUFvd0MsR0FBMEMsT0FBQTlpQyxJQUFXLElBQUF1dEQsR0FBQUMsR0FBQSxtQkFBQUMsU0FBQSxJQUFBQSxRQUE0U3pDLEdBQUFzQyxVQUFBLFNBQUE1c0QsRUFBQUssR0FBMkIsSUFBQWpiLEVBQXZVLFNBQUE0YSxHQUFpRSxJQUFBNnNELEdBQWMsUUFBQXhzRCxLQUFOd3NELE1BQU1aLEdBQUFZLEdBQUF4c0QsR0FBQSxJQUFBK2pDLE9BQUEvakMsR0FBb0MsSUFBQWpiLEVBQUF5bkUsR0FBQTdzRCxHQUFZLFlBQUE1YSxFQUFBLENBQWUsR0FBQTBuRSxHQUFBLENBQU8sSUFBQXpuRSxFQUFBeW5FLEdBQUFsbkUsSUFBQVIsR0FBZ0IsWUFBQUMsRUFBQSxPQUFBQSxFQUF1QixJQUFBMk0sRUFBQWk2RCxHQUFBanNELEdBQVksWUFBQWhPLEVBQUEsQ0FBZSxRQUFBc04sS0FBWUssRUFBQSxFQUFLQSxFQUFBM04sRUFBQXJKLE9BQVdnWCxJQUFBTCxFQUFBdE4sRUFBQXV3QyxXQUFBNWlDLE1BQUEsSUFBNkIsT0FBQW10RCxPQUFBL2tFLElBQUEzQyxFQUFBa2EsT0FBdUQwdEQsQ0FBQTNzRCxHQUFZLFlBQUFqYixFQUFBLENBQWUsUUFBQUMsS0FBQTJNLEVBQUEsRUFBaUJBLEVBQUFnTyxFQUFBclgsT0FBV3FKLElBQUEsQ0FBSyxJQUFBc04sRUFBQVUsRUFBQXVpQyxXQUFBdndDLEdBQXNCLEdBQUFzTixHQUFBLGVBQUFBLEVBQUFsYSxFQUFBa2EsSUFBQSxPQUFvQ2phLEVBQUEyTSxHQUFBc04sRUFBTyxPQUFBamEsSUFBVWtsRSxHQUFBcUMsVUFBQSxTQUFBNXNELEVBQUFLLEdBQTRCLElBQUFqYixFQUFBa2xFLEdBQUFzQyxVQUFBNXNELEVBQUFLLEdBQXdCLGdCQUFBamIsSUFBQXVELE9BQUEsR0FBNkIyaEUsR0FBQTJDLFVBQUEsU0FBQWp0RCxHQUEwQixRQUFBSyxFQUFBLEVBQUFqYixLQUFpQmliLEVBQUFMLEVBQUFyWCxRQUFXLENBQUUsSUFBQXRELEVBQUEyYSxFQUFBSyxHQUFXQSxFQUFBLElBQUFoYixFQUFBeStDLEVBQUE5akMsRUFBQUssRUFBQWpiLEdBQUFDLElBQUEsS0FBQUEsR0FBQSxJQUFBNDdCLEVBQUFqaEIsRUFBQUssRUFBQWpiLEdBQUFrZ0MsRUFBQXRsQixFQUFBSyxFQUFBamIsR0FBbUQsT0FBQUEsR0FBU2tsRSxHQUFBNEMsTUFBQSxTQUFBbHRELEdBQXNCLFFBQUFLLEVBQUEsRUFBQWpiLEdBQUFpYixHQUFBaGIsS0FBQTJNLEVBQUEsRUFBMkJBLEVBQUFnTyxFQUFBclgsT0FBV3FKLEdBQUEsR0FBTSxJQUFBc04sRUFBQWdyRCxHQUFBNkMsT0FBQW50RCxFQUFBaE8sSUFBc0I3RyxNQUFBeEUsVUFBQXNELEtBQUEwRSxNQUFBdEosRUFBQWlhLEdBQUFlLEdBQUFmLEVBQUEzVyxPQUFBdkQsRUFBQTZFLEtBQUFvVyxHQUFzRCxPQUFBaGIsRUFBQXNELE9BQUEsWUFBNEIsUUFBQWdYLEtBQUF5aUMsRUFBQSxFQUFBbjJDLEtBQUEwRSxNQUFBMUUsS0FBQVEsSUFBQTRULEdBQUFwVSxLQUFBUSxJQUFBLFFBQUExSCxRQUFBLEVBQUF1bEUsR0FBQUUsS0FBQUYsR0FBQUssT0FBQUwsR0FBQU8sT0FBQVAsR0FBQVEsT0FBQTFvQixHQUFBMzRDLEVBQUEsRUFBZ0hBLEVBQUFyRSxFQUFBdUQsT0FBV2MsR0FBQSxHQUFNLElBQUFxZixFQUFBL2pCLEVBQUFLLEVBQUFxRSxJQUFjMEIsTUFBQXhFLFVBQUFzRCxLQUFBMEUsTUFBQWdSLEVBQUFtSixHQUFnQyxPQUFBM2QsTUFBQXhFLFVBQUE4bUIsT0FBQTY4QyxHQUFBZ0IsT0FBQXRyRCxFQUFBclgsUUFBQTJoRSxHQUFBaUIsUUFBQW5wQixHQUFBemlDLEVBQUF0YSxJQUFxRWtsRSxHQUFBMkMsTUFBQSxTQUFBbHRELEdBQXNCLE9BQUFzcUQsR0FBQTRDLE1BQUFsdEQsR0FBQXJYLFFBQTBCMmhFLEdBQUE4QyxLQUFBLFNBQUFwdEQsR0FBcUIsUUFBQUssS0FBQWpiLEVBQUFLLE9BQUFxRSxLQUFBa1csR0FBQTNhLEVBQUFELEVBQUF1RCxPQUFBcUosRUFBQSxFQUE2Q0EsRUFBQTNNLEVBQUkyTSxHQUFBLEdBQU0sSUFBQXNOLEVBQUFoRSxTQUFBbFcsRUFBQTRNLEdBQUEsR0FBQTJOLEVBQUFLLEVBQUFWLEdBQThCZSxPQUFBb04sT0FBQTY4QyxHQUFBK0MsUUFBQTF0RCxFQUFBM1osTUFBQTJaLEVBQUFySyxRQUFBbVksT0FBQTY4QyxHQUFBZ0QsU0FBQWh1RCxJQUFrRSxPQUFBZSxHQUFTa3FELEdBQUE2QyxLQUFBLFNBQUFwdEQsR0FBcUIsT0FBQXNxRCxHQUFBOEMsS0FBQXB0RCxHQUFBclgsUUFBeUIyaEUsR0FBQWdELFNBQUEsU0FBQXR0RCxHQUF5QixPQUFBQSxFQUFBLE1BQUFBLElBQUEsR0FBQUEsRUFBQSxPQUE4QnNxRCxHQUFBK0MsUUFBQSxTQUFBcnRELEVBQUFLLEdBQTBCLElBQUFqYixLQUFTLEdBQUErRixNQUFBRCxRQUFBbVYsR0FBQSxRQUFBaGIsRUFBQSxFQUFnQ0EsRUFBQWdiLEVBQUExWCxPQUFXdEQsR0FBQSxFQUFBOHVELEdBQUFnRyxTQUFBbjZDLEVBQUFyWCxTQUFBMFgsRUFBQTFYLE9BQUEsc0NBQUEwWCxHQUFBamIsSUFBQXFvQixPQUFBNjhDLEdBQUErQyxRQUFBcnRELEVBQUEzYSxHQUFBZ2IsRUFBQWhiLFVBQWdILFdBQUFnYixFQUFBamIsSUFBQXFvQixPQUFBNjhDLEdBQUFtQixPQUFBenJELFNBQTJDLGNBQUFLLEVBQUFqYixJQUFBcW9CLE9BQUE2OEMsR0FBQXFCLFNBQUEzckQsU0FBZ0QsY0FBQUssRUFBQWpiLElBQUFxb0IsT0FBQTY4QyxHQUFBbUIsT0FBQXpyRCxRQUE4QyxDQUFLLFlBQUFLLEVBQUEsVUFBQS9ZLE1BQUEsd0JBQUErWSxHQUF5RGpiLElBQUFxb0IsT0FBQTY4QyxHQUFBc0IsS0FBQTVyRCxJQUF1QixPQUFBNWEsR0FBU2tsRSxHQUFBaUQsR0FBQWpELEdBQUFFLEtBQUFELEdBQUFnRCxHQUFBaEQsR0FBQUMsS0FBNkIsSUFBQWdELEdBQUEsbUJBQUFULFNBQUEsSUFBQUEsUUFBK0N6QyxHQUFBbUQsV0FBQSxTQUFBenRELEdBQTBCLEdBQUF3dEQsR0FBQSxDQUFPLElBQUFudEQsRUFBQW10RCxHQUFBNW5FLElBQUFvYSxHQUFnQixZQUFBSyxFQUFBLE9BQUFBLEVBQXVCLFFBQUFqYixLQUFBQyxFQUFBMmEsRUFBQXJYLE9BQUFxSixFQUFBLEVBQTRCQSxFQUFBM00sRUFBSTJNLEdBQUEsR0FBTSxJQUFBc04sRUFBQVUsRUFBQWhPLEdBQVc1TSxJQUFBcW9CLE9BQUE2OEMsR0FBQWhyRCxFQUFBaEssTUFBQWdLLEVBQUF0WixRQUFnQyxPQUFBd25FLE9BQUF6bEUsSUFBQWlZLEVBQUE1YSxNQUF5Qm1sRSxHQUFBa0QsV0FBQSxTQUFBenRELEdBQTJCLE9BQUFzcUQsR0FBQW1ELFdBQUF6dEQsR0FBQXJYLFFBQStCMmhFLEdBQUE2QyxPQUFBLFNBQUFudEQsR0FBdUIsSUFBQUssRUFBQWlxRCxHQUFBdHFELEVBQUExSyxNQUFpQixPQUFBNitDLEdBQUFnRyxjQUFBLElBQUE5NUMsRUFBQSxpQ0FBQUwsRUFBQTFLLE1BQUErSyxFQUFBTCxFQUFBaGEsUUFBa0Z1a0UsR0FBQTRDLE9BQUEsU0FBQW50RCxHQUF1QixJQUFBSyxFQUFBa3FELEdBQUF2cUQsRUFBQTFLLE1BQWlCLE9BQUE2K0MsR0FBQWdHLGNBQUEsSUFBQTk1QyxFQUFBLCtCQUFBTCxFQUFBMUssTUFBQStLLEVBQUFMLEVBQUFoYSxRQUFnRnNrRSxHQUFBb0QsTUFBQSxTQUFBMXRELEdBQXNCLFFBQUFLLEtBQUFqYixFQUFBNGEsRUFBQWcwQyxPQUFBcnJELE9BQUF0RCxLQUFBMk0sS0FBQXNOLEVBQUEsRUFBNkNBLEVBQUFsYSxFQUFJa2EsR0FBQSxHQUFNLElBQUFLLEVBQUFLLEVBQUFnMEMsT0FBQTEwQyxHQUFBOGlDLEVBQUFrb0IsR0FBQTNxRCxFQUFBckssTUFBK0I2K0MsR0FBQWdHLGNBQUEsSUFBQS9YLEVBQUEsdUNBQUF6aUMsRUFBQXJLLEtBQUEsS0FBQXFLLEVBQUFyYSxLQUFBLEtBQXNGLElBQUFQLEVBQUFpYixFQUFBTCxFQUFBcmEsV0FBZ0IsSUFBQVAsTUFBQTRhLEVBQUEzWixPQUF3QixJQUFBeUQsRUFBQTI0QyxFQUFBcjlDLEdBQVcsVUFBQTRhLEVBQUFySyxNQUFBdEQsRUFBQS9ILEtBQUFvVyxFQUFBMVgsUUFBQTBYLElBQUFvTixRQUFBLE1BQUFwb0IsRUFBQTRFLEtBQUFSLElBQUE0VyxJQUFBb04sT0FBQWhrQixHQUE4RSxRQUFBcWYsRUFBQSxFQUFZQSxFQUFBempCLEVBQUFzRCxPQUFXbWdCLEdBQUEsR0FBTSxJQUFBOWpCLEVBQUFnTixFQUFBOFcsR0FBQTNqQixFQUFBa2IsRUFBQTFYLE9BQXNCd3JELEdBQUFnRyxTQUFBaDFELEVBQUEsZUFBQTZhLEVBQUErekMsVUFBQSxhQUFBMXpDLEVBQUFyYixHQUFBRyxHQUFBLEVBQUFrYixFQUFBcmIsRUFBQSxPQUFBRyxFQUFBa2IsSUFBQW9OLE9BQUFwb0IsRUFBQXlqQixJQUE4RixPQUFBekksR0FBU2txRCxHQUFBbUQsTUFBQSxTQUFBMXRELEdBQXNCLFFBQUFLLEVBQUEsRUFBQWpiLEVBQUE0YSxFQUFBZzBDLE9BQUFyckQsT0FBQXRELEVBQUEsRUFBa0NBLEVBQUFELEVBQUlDLEdBQUEsR0FBTSxJQUFBMk0sRUFBQWdPLEVBQUFnMEMsT0FBQTN1RCxHQUFBaWEsRUFBQWlyRCxHQUFBdjRELEVBQUFzRCxNQUErQjYrQyxHQUFBZ0csY0FBQSxJQUFBNzZDLEVBQUEscUNBQUF0TixFQUFBc0QsS0FBQSxLQUFBdEQsRUFBQTFNLEtBQUEsS0FBb0YsSUFBQXFhLEVBQUFLLEVBQUFoTyxFQUFBMU0sV0FBZ0IsSUFBQXFhLE1BQUEzTixFQUFBaE0sT0FBQXFhLEdBQUFmLEVBQUFLLEdBQUEsVUFBQTNOLEVBQUFzRCxPQUFBK0ssR0FBQSxHQUF5RCxPQUFBQSxHQUFTaXFELEdBQUFxRCxPQUFBckQsR0FBQW9ELE1BQUFuRCxHQUFBb0QsT0FBQXBELEdBQUFtRCxNQUFBcEQsR0FBQXNELFFBQUEsU0FBQTV0RCxHQUE4RCxPQUFBQSxHQUFTdXFELEdBQUFxRCxRQUFBLFNBQUE1dEQsR0FBd0IsT0FBQUEsRUFBQXJYLFFBQWdCNDhCLEVBQUE1K0IsVUFBQXl6RCxPQUFBLFdBQStCLE9BQUFrUSxHQUFBb0QsTUFBQXJtRSxPQUFzQmsrQixFQUFBNStCLFVBQUF1ekQsT0FBQSxXQUErQixPQUFBcVEsR0FBQW1ELE1BQUFybUUsT0FBc0JrOUMsRUFBQTU5QyxVQUFBbEIsT0FBQVksT0FBQWsvQixFQUFBNStCLFdBQUE0OUMsRUFBQTU5QyxVQUFBaUIsWUFBQTI4QyxFQUFBQyxFQUFBNzlDLFVBQUFsQixPQUFBWSxPQUFBay9CLEVBQUE1K0IsV0FBQTY5QyxFQUFBNzlDLFVBQUFpQixZQUFBNDhDLEVBQUFDLEVBQUE5OUMsVUFBQWxCLE9BQUFZLE9BQUFrL0IsRUFBQTUrQixXQUFBODlDLEVBQUE5OUMsVUFBQWlCLFlBQUE2OEMsRUFBQUMsRUFBQS85QyxVQUFBbEIsT0FBQVksT0FBQWsvQixFQUFBNStCLFdBQUErOUMsRUFBQS85QyxVQUFBaUIsWUFBQTg4QyxFQUFxUSxJQUFBa1UsSUFBUWlCLE1BQUF0MEIsRUFBQXN6QixPQUFBdHpCLEVBQUFzb0MsU0FBQXRwQixFQUFBdXBCLFdBQUF0cEIsRUFBQXVwQixZQUFBdHBCLEVBQUF1cEIsV0FBQXRwQixFQUFBdXBCLFdBQUFocUIsRUFBQWlxQixVQUFBMzJELEVBQUE0MkQsV0FBQTdwQixHQUEwRzhwQixJQUFLQyxLQUFBLEVBQUFDLE9BQUEsRUFBQUMsTUFBQSxFQUFBQyxNQUFBLEVBQUFDLE1BQUEsRUFBQUMsYUFBQSxFQUFBamMsSUFBQSxHQUE4RHhsQyxFQUFBdG1CLFVBQUE2dkQsVUFBQSxXQUFpQyxJQUFBeDJDLEVBQUEzWSxLQUFBKzdDLEtBQUE2UixTQUFBNXRELEtBQUFvZixPQUFBcGYsS0FBQWd1RCxnQkFBMEQsT0FBQWh1RCxLQUFBZ3VELGdCQUFBLEVBQUFyMUMsR0FBZ0NpTixFQUFBdG1CLFVBQUFnMkQsVUFBQSxXQUFrQyxJQUFBMzhDLEVBQUEzWSxLQUFBKzdDLEtBQUF1ckIsUUFBQXRuRSxLQUFBb2YsT0FBQXBmLEtBQUFndUQsZ0JBQXlELE9BQUFodUQsS0FBQWd1RCxnQkFBQSxFQUFBcjFDLEdBQWdDaU4sRUFBQXRtQixVQUFBaW9FLFdBQUEzaEQsRUFBQXRtQixVQUFBNnZELFVBQUF2cEMsRUFBQXRtQixVQUFBazFELFlBQUEsV0FBaUYsSUFBQTc3QyxFQUFBM1ksS0FBQSs3QyxLQUFBOFIsVUFBQTd0RCxLQUFBb2YsT0FBQXBmLEtBQUFndUQsZ0JBQTJELE9BQUFodUQsS0FBQWd1RCxnQkFBQSxFQUFBcjFDLEdBQWdDaU4sRUFBQXRtQixVQUFBa29FLFlBQUE1aEQsRUFBQXRtQixVQUFBazFELFlBQUE1dUMsRUFBQXRtQixVQUFBbW9FLFNBQUE3aEQsRUFBQXRtQixVQUFBazFELFlBQUE1dUMsRUFBQXRtQixVQUFBb29FLGNBQUE5aEQsRUFBQXRtQixVQUFBazFELFlBQUE1dUMsRUFBQXRtQixVQUFBMDBELFdBQUEsV0FBa0wsSUFBQXI3QyxFQUFBM1ksS0FBQSs3QyxLQUFBZ1MsU0FBQS90RCxLQUFBb2YsT0FBQXBmLEtBQUFndUQsZ0JBQTBELE9BQUFodUQsS0FBQWd1RCxnQkFBQSxFQUFBcjFDLEdBQWdDaU4sRUFBQXRtQixVQUFBaTJELGFBQUEsV0FBcUMsSUFBQTU4QyxFQUFBM1ksS0FBQSs3QyxLQUFBZ1MsU0FBQS90RCxLQUFBb2YsT0FBQXBmLEtBQUFndUQsZ0JBQUEsTUFBZ0UsT0FBQWh1RCxLQUFBZ3VELGdCQUFBLEVBQUFyMUMsR0FBZ0NpTixFQUFBdG1CLFVBQUFxb0UsV0FBQSxXQUFtQyxJQUFBaHZELEVBQUE4a0MsRUFBQXo5QyxLQUFBKzdDLEtBQUEvN0MsS0FBQW9mLE9BQUFwZixLQUFBZ3VELGdCQUFtRCxPQUFBaHVELEtBQUFndUQsZ0JBQUEsRUFBQXIxQyxHQUFnQ2lOLEVBQUF0bUIsVUFBQXNvRSxjQUFBaGlELEVBQUF0bUIsVUFBQXFvRSxXQUFBL2hELEVBQUF0bUIsVUFBQTArRCxXQUFBLFdBQW9GLElBQUFybEQsRUFBQStrQyxFQUFBMTlDLEtBQUErN0MsS0FBQS83QyxLQUFBb2YsT0FBQXBmLEtBQUFndUQsZ0JBQW1ELE9BQUFodUQsS0FBQWd1RCxnQkFBQSxFQUFBcjFDLEdBQWdDaU4sRUFBQXRtQixVQUFBdW9FLFlBQUEsU0FBQWx2RCxHQUFxQyxJQUFBSyxFQUFBaFosS0FBQSs3QyxLQUFBaCtDLEVBQUFpQyxLQUFBb2YsT0FBQXBmLEtBQUFndUQsZUFBQWh3RCxFQUFBLEdBQXVEZ0MsS0FBQWd1RCxnQkFBQXIxQyxFQUF1QixRQUFBaE8sRUFBQSxFQUFZQSxFQUFBZ08sRUFBSWhPLElBQUEzTSxHQUFBKytDLE9BQUFDLGFBQUFoa0MsRUFBQTQwQyxTQUFBN3ZELEVBQUE0TSxJQUE0QyxPQUFBM00sR0FBUzRuQixFQUFBdG1CLFVBQUF5K0QsU0FBQSxXQUFpQyxPQUFBLzlELEtBQUE2bkUsWUFBQSxJQUEyQmppRCxFQUFBdG1CLFVBQUF3b0Usa0JBQUEsV0FBMEMsSUFBQW52RCxFQUFBOGtDLEVBQUF6OUMsS0FBQSs3QyxLQUFBLzdDLEtBQUFvZixPQUFBcGYsS0FBQWd1RCxlQUFBLEdBQXFELE9BQUFyMUMsR0FBQSxXQUFBM1ksS0FBQWd1RCxnQkFBQSxFQUFBcjFDLEdBQThDaU4sRUFBQXRtQixVQUFBeW9FLGFBQUEsU0FBQXB2RCxHQUFzQyxJQUFBSyxFQUFBdWtDLEVBQUF2OUMsS0FBQSs3QyxLQUFBLzdDLEtBQUFvZixPQUFBcGYsS0FBQWd1RCxnQkFBQWp3RCxFQUFBdy9DLEVBQUF2OUMsS0FBQSs3QyxLQUFBLzdDLEtBQUFvZixPQUFBcGYsS0FBQWd1RCxlQUFBLEdBQW9HLE9BQUFodUQsS0FBQWd1RCxnQkFBQSxXQUFBcjFDLE1BQUEsTUFBQUssRUFBQWpiLEVBQUE0YSxFQUFBLElBQTREaU4sRUFBQXRtQixVQUFBMitELEtBQUEsU0FBQXRsRCxFQUFBSyxRQUFnQyxJQUFBQSxNQUFBLEdBQUFoWixLQUFBZ3VELGdCQUFBK1ksR0FBQXB1RCxHQUFBSyxHQUErQzRNLEVBQUF0bUIsVUFBQTBvRSxlQUFBLFNBQUFydkQsUUFBd0MsSUFBQUEsTUFBQTNZLEtBQUEybkUsY0FBa0MsUUFBQTN1RCxFQUFBLElBQUFsVixNQUFBNlUsR0FBQTVhLEVBQUFpQyxLQUFBKzdDLEtBQUEvOUMsRUFBQWdDLEtBQUFvZixPQUFBcGYsS0FBQWd1RCxlQUFBcmpELEVBQUEsRUFBeUVBLEVBQUFnTyxFQUFJaE8sSUFBQXFPLEVBQUFyTyxHQUFBNU0sRUFBQSt2RCxVQUFBOXZELE1BQUEsRUFBNkIsT0FBQWdDLEtBQUFndUQsZ0JBQUEsRUFBQXIxQyxFQUFBSyxHQUFrQzRNLEVBQUF0bUIsVUFBQTJvRSxrQkFBQXJpRCxFQUFBdG1CLFVBQUE0b0UsZ0JBQUEsU0FBQXZ2RCxRQUF1RSxJQUFBQSxNQUFBM1ksS0FBQXcwRCxlQUFtQyxRQUFBeDdDLEVBQUEsSUFBQWxWLE1BQUE2VSxHQUFBNWEsRUFBQWlDLEtBQUErN0MsS0FBQS85QyxFQUFBZ0MsS0FBQW9mLE9BQUFwZixLQUFBZ3VELGVBQUFyakQsRUFBQSxFQUF5RUEsRUFBQWdPLEVBQUloTyxJQUFBcU8sRUFBQXJPLEdBQUE1TSxFQUFBOHZELFVBQUE3dkQsTUFBQSxFQUE2QixPQUFBZ0MsS0FBQWd1RCxnQkFBQSxFQUFBcjFDLEVBQUFLLEdBQWtDNE0sRUFBQXRtQixVQUFBKy9ELGVBQUEsU0FBQTFtRCxHQUF3QyxRQUFBSyxFQUFBLElBQUFsVixNQUFBNlUsR0FBQTVhLEVBQUFpQyxLQUFBKzdDLEtBQUEvOUMsRUFBQWdDLEtBQUFvZixPQUFBcGYsS0FBQWd1RCxlQUFBcmpELEVBQUEsRUFBeUVBLEVBQUFnTyxFQUFJaE8sSUFBQXFPLEVBQUFyTyxHQUFBNU0sRUFBQWd3RCxTQUFBL3ZELE1BQUEsRUFBNEIsT0FBQWdDLEtBQUFndUQsZ0JBQUEsRUFBQXIxQyxFQUFBSyxHQUFrQzRNLEVBQUF0bUIsVUFBQWlnRSxjQUFBLFNBQUE1bUQsR0FBdUMsUUFBQUssRUFBQSxJQUFBbFYsTUFBQTZVLEdBQUE1YSxFQUFBaUMsS0FBQSs3QyxLQUFBLzlDLEVBQUFnQyxLQUFBb2YsT0FBQXBmLEtBQUFndUQsZUFBQXJqRCxFQUFBLEVBQXlFQSxFQUFBZ08sRUFBSWhPLElBQUFxTyxFQUFBck8sR0FBQTVNLEVBQUE2dkQsU0FBQTV2RCxLQUF5QixPQUFBZ0MsS0FBQWd1RCxnQkFBQXIxQyxFQUFBSyxHQUFnQzRNLEVBQUF0bUIsVUFBQTZvRSxVQUFBLFNBQUF4dkQsRUFBQUssR0FBZ0RBLE1BQUFMLElBQUEzWSxLQUFBdzBELGVBQThCLFFBQUF4MkQsRUFBQSxJQUFBOEYsTUFBQTZVLEdBQUFoTyxFQUFBLEVBQTJCQSxFQUFBZ08sRUFBSWhPLElBQUEzTSxFQUFBMk0sR0FBQXFPLEVBQUFuYixLQUF4RW1DLE1BQTJGLE9BQUFoQyxHQUFTNG5CLEVBQUF0bUIsVUFBQThvRSxZQUFBLFNBQUF6dkQsRUFBQUssR0FBa0RBLE1BQUFMLElBQUEzWSxLQUFBMm5FLGNBQTZCLFFBQUEzcEUsRUFBQSxJQUFBOEYsTUFBQTZVLEdBQUFoTyxFQUFBLEVBQTJCQSxFQUFBZ08sRUFBSWhPLElBQUEzTSxFQUFBMk0sR0FBQXFPLEVBQUFuYixLQUF2RW1DLE1BQTBGLE9BQUFoQyxHQUFTNG5CLEVBQUF0bUIsVUFBQStvRSxnQkFBQSxTQUFBMXZELEVBQUFLLEdBQXNEQSxNQUFBTCxJQUFBM1ksS0FBQXcwRCxlQUE4QixRQUFBeDJELEVBQUEsSUFBQThGLE1BQUE2VSxHQUFBaE8sRUFBQXZNLE9BQUFxRSxLQUFBdVcsR0FBQWYsRUFBQSxFQUE0Q0EsRUFBQVUsRUFBSVYsSUFBQSxDQUFLLFFBQUFLLEtBQVl5aUMsRUFBQSxFQUFLQSxFQUFBcHdDLEVBQUFySixPQUFXeTVDLElBQUEsQ0FBSyxJQUFBcjlDLEVBQUFpTixFQUFBb3dDLEdBQUEzNEMsRUFBQTRXLEVBQUF0YixHQUFrQjRhLEVBQUE1YSxHQUFBMEUsRUFBQXZFLEtBQWpKbUMsTUFBZ0toQyxFQUFBaWEsR0FBQUssRUFBTyxPQUFBdGEsR0FBUzRuQixFQUFBdG1CLFVBQUFncEUsa0JBQUEsU0FBQTN2RCxFQUFBSyxHQUF3REEsTUFBQUwsSUFBQTNZLEtBQUEybkUsY0FBNkIsUUFBQTNwRSxFQUFBLElBQUE4RixNQUFBNlUsR0FBQWhPLEVBQUF2TSxPQUFBcUUsS0FBQXVXLEdBQUFmLEVBQUEsRUFBNENBLEVBQUFVLEVBQUlWLElBQUEsQ0FBSyxRQUFBSyxLQUFZeWlDLEVBQUEsRUFBS0EsRUFBQXB3QyxFQUFBckosT0FBV3k1QyxJQUFBLENBQUssSUFBQXI5QyxFQUFBaU4sRUFBQW93QyxHQUFBMzRDLEVBQUE0VyxFQUFBdGIsR0FBa0I0YSxFQUFBNWEsR0FBQTBFLEVBQUF2RSxLQUFoSm1DLE1BQStKaEMsRUFBQWlhLEdBQUFLLEVBQU8sT0FBQXRhLEdBQVM0bkIsRUFBQXRtQixVQUFBaXBFLFlBQUEsU0FBQTV2RCxHQUFnRCxzQkFBQUEsRUFBQSxPQUFBQSxFQUFBOWEsS0FBQW1DLE1BQTRDLFFBQUFqQyxFQUFBSyxPQUFBcUUsS0FBQWtXLEdBQUEzYSxLQUE2QjJNLEVBQUEsRUFBS0EsRUFBQTVNLEVBQUF1RCxPQUFXcUosSUFBQSxDQUFLLElBQUFzTixFQUFBbGEsRUFBQTRNLEdBQUEyTixFQUFBSyxFQUFBVixHQUFrQmphLEVBQUFpYSxHQUFBSyxFQUFBemEsS0FBM0htQyxNQUEwSSxPQUFBaEMsR0FBUzRuQixFQUFBdG1CLFVBQUFrcEUsaUJBQUEsU0FBQTd2RCxHQUEwQyxZQUFBQSxNQUFBM1ksS0FBQXcwRCxlQUFBLElBQUE3N0MsRUFBQSxDQUE2QyxJQUFBSyxLQUFTLFNBQUFMLElBQUFLLEVBQUF5dkQsV0FBQXpvRSxLQUFBZzBELGNBQUEsRUFBQXI3QyxJQUFBSyxFQUFBMHZELFdBQUExb0UsS0FBQWcwRCxjQUFBLEVBQUFyN0MsSUFBQUssRUFBQTJ2RCxTQUFBM29FLEtBQUFnMEQsY0FBQSxFQUFBcjdDLElBQUFLLEVBQUE0dkQsU0FBQTVvRSxLQUFBZzBELGNBQUEsR0FBQXI3QyxJQUFBSyxFQUFBNnZELGdCQUFBLEVBQUE3b0UsS0FBQWcwRCxjQUFBLEdBQUFyN0MsSUFBQUssRUFBQTh2RCxnQkFBQSxFQUFBOW9FLEtBQUFnMEQsY0FBQSxHQUFBcjdDLElBQUFLLEVBQUErdkQsZ0JBQUEsRUFBQS9vRSxLQUFBZzBELGNBQUEsSUFBQXI3QyxJQUFBSyxFQUFBZ3dELGdCQUFBLEVBQUFocEUsS0FBQWcwRCxjQUFBaDdDLElBQXVWNE0sRUFBQXRtQixVQUFBMnBFLHFCQUFBLFdBQTZDLFFBQUFqd0QsRUFBQWhaLEtBQUF3MEQsY0FBQXoyRCxFQUFBaUMsS0FBQXcwRCxjQUFBeDJELEVBQUEsSUFBQThGLE1BQUEvRixHQUFBNE0sRUFBQSxFQUE0RUEsRUFBQTVNLEVBQUk0TSxJQUFBM00sRUFBQTJNLEdBQWhGM0ssS0FBZ0Z3b0UsaUJBQUF4dkQsR0FBK0IsT0FBQWhiLEdBQVM0bkIsRUFBQXRtQixVQUFBNHBFLGFBQUEsU0FBQXZ3RCxHQUFzQyxJQUFBSyxFQUFBaFosS0FBQTBuRSxnQkFBMkIsR0FBQTF1RCxFQUFBLGFBQUE0TSxFQUFBNWxCLEtBQUErN0MsS0FBQS83QyxLQUFBb2YsT0FBQXBHLEdBQUF1dkQsWUFBQTV2RCxJQUE0RGlOLEVBQUF0bUIsVUFBQTZwRSxlQUFBLFNBQUF4d0QsR0FBd0MsSUFBQUssRUFBQWhaLEtBQUE0bkUsZ0JBQTJCLEdBQUE1dUQsRUFBQSxhQUFBNE0sRUFBQTVsQixLQUFBKzdDLEtBQUEvN0MsS0FBQW9mLE9BQUFwRyxHQUFBdXZELFlBQUE1dkQsSUFBNERpTixFQUFBdG1CLFVBQUE4cEUsaUJBQUEsU0FBQXp3RCxHQUEwQyxRQUFBSyxFQUFBaFosS0FBQWpDLEVBQUFpQyxLQUFBaW9FLG9CQUFBanFFLEVBQUFELEVBQUF1RCxPQUFBcUosRUFBQTNLLEtBQUFndUQsZUFBQS8xQyxFQUFBLElBQUFuVSxNQUFBOUYsR0FBQXNhLEVBQUEsRUFBOEZBLEVBQUF0YSxFQUFJc2EsSUFBQSxDQUFLLElBQUF5aUMsRUFBQWg5QyxFQUFBdWEsR0FBVyxPQUFBeWlDLEVBQUEsR0FBQS9oQyxFQUFBZzFDLGVBQUFqVCxFQUFBcGlDLEVBQUEsQ0FBa0MsUUFBQWpiLEVBQUFzYixFQUFBaXZELG9CQUFBN2xFLEVBQUEsSUFBQTBCLE1BQUFwRyxFQUFBNEQsUUFBQW1nQixFQUFBLEVBQTBEQSxFQUFBL2pCLEVBQUE0RCxPQUFXbWdCLElBQUF6SSxFQUFBZzFDLGVBQUFqVCxFQUFBcjlDLEVBQUErakIsR0FBQXJmLEVBQUFxZixHQUFBOUksRUFBQTlhLEtBQUFtYixHQUEyQ2YsRUFBQUssR0FBQWxXLE9BQU82VixFQUFBSyxHQUFBVSxFQUFBa3ZELHVCQUE4Qmp3RCxFQUFBSyxRQUFBLEVBQWlCLE9BQUF0WSxLQUFBZ3VELGVBQUFyakQsRUFBQXNOLEdBQStCMk4sRUFBQXRtQixVQUFBK3BFLGNBQUEsV0FBc0MsSUFBQTF3RCxFQUFBM1ksS0FBQWdaLEVBQUFoWixLQUFBb2YsT0FBQXBmLEtBQUFndUQsZUFBQWp3RCxFQUFBaUMsS0FBQXcwRCxjQUFBeDJELEVBQUFnQyxLQUFBdzBELGNBQXVGLE9BQUF6MkQsRUFBQSxPQUFnQjZ1RCxPQUFBLEVBQUFDLE9BQUE3c0QsS0FBQWtvRSxnQkFBQWxxRSxJQUF5QyxPQUFBRCxFQUFBLENBQVUsUUFBQTRNLEVBQUEsSUFBQTdHLE1BQUE5RixHQUFBaWEsRUFBQSxFQUEyQkEsRUFBQWphLEVBQUlpYSxJQUFBdE4sRUFBQXNOLElBQVV0SyxNQUFBZ0wsRUFBQTY3QyxjQUFBcHJELElBQUF1UCxFQUFBNjdDLGNBQUFsc0QsTUFBQXFRLEVBQUE2N0MsZUFBaUUsT0FBTzVILE9BQUEsRUFBQTBjLE9BQUEzK0QsR0FBbUIsVUFBQTFLLE1BQUEsS0FBQStZLEVBQUE5WSxTQUFBLDBDQUF5RTBsQixFQUFBdG1CLFVBQUFpcUUsY0FBQSxXQUFzQyxJQUFBNXdELEVBQUEzWSxLQUFBb2YsT0FBQXBmLEtBQUFndUQsZUFBQWgxQyxFQUFBaFosS0FBQXcwRCxjQUEyRCxPQUFBeDdDLEVBQUEsT0FBZ0I0ekMsT0FBQSxFQUFBNGMsV0FBQXhwRSxLQUFBdzBELGNBQUFpVixRQUFBenBFLEtBQUFrb0UsbUJBQXVFLE9BQUFsdkQsRUFBQSxPQUFnQjR6QyxPQUFBLEVBQUEwYyxPQUFBdHBFLEtBQUFxb0UsaUJBQXNDMTZELE1BQUFpWSxFQUFBcWhELE9BQUE3OUQsSUFBQXdjLEVBQUFxaEQsT0FBQXlDLFFBQUE5akQsRUFBQXFoRCxVQUFnRCxVQUFBaG5FLE1BQUEsS0FBQTBZLEVBQUF6WSxTQUFBLDBDQUF5RTBsQixFQUFBK2pELEtBQUEsU0FBQWh4RCxFQUFBSyxHQUFzQixrQkFBa0IsT0FBQWhaLEtBQUFtb0UsVUFBQXh2RCxFQUFBSyxLQUE0QjRNLEVBQUFna0QsT0FBQSxTQUFBanhELEVBQUFLLEdBQXdCLGtCQUFrQixPQUFBaFosS0FBQW9vRSxZQUFBenZELEVBQUFLLEtBQThCNE0sRUFBQWtoRCxXQUFBLFNBQUFudUQsRUFBQUssR0FBNEIsa0JBQWtCLE9BQUFoWixLQUFBcW9FLGdCQUFBMXZELEVBQUFLLEtBQWtDNE0sRUFBQWlrRCxhQUFBLFNBQUFseEQsRUFBQUssR0FBOEIsa0JBQWtCLE9BQUFoWixLQUFBc29FLGtCQUFBM3ZELEVBQUFLLEtBQW9DNE0sRUFBQWtrRCxRQUFBLFNBQUFueEQsR0FBdUIsa0JBQWtCLE9BQUEzWSxLQUFBa3BFLGFBQUF2d0QsS0FBNkJpTixFQUFBbWtELFVBQUEsU0FBQXB4RCxHQUF5QixrQkFBa0IsT0FBQTNZLEtBQUFtcEUsZUFBQXh3RCxLQUErQmlOLEVBQUF3bEMsSUFBQXhsQyxFQUFBdG1CLFVBQUF5K0QsU0FBQW40QyxFQUFBb2hELEtBQUFwaEQsRUFBQXRtQixVQUFBNnZELFVBQUF2cEMsRUFBQXFoRCxPQUFBcmhELEVBQUFva0QsU0FBQXBrRCxFQUFBdG1CLFVBQUFrMUQsWUFBQTV1QyxFQUFBcWtELFdBQUFya0QsRUFBQXRtQixVQUFBNG9FLGdCQUFBdGlELEVBQUF1aEQsTUFBQXZoRCxFQUFBc2tELFNBQUF0a0QsRUFBQXRtQixVQUFBcW9FLFdBQUEvaEQsRUFBQXVrRCxVQUFBdmtELEVBQUF0bUIsVUFBQTBvRSxlQUFBcGlELEVBQUF3a0QsT0FBQXhrRCxFQUFBdG1CLFVBQUFpcEUsWUFBQTNpRCxFQUFBeWtELFNBQUF6a0QsRUFBQXRtQixVQUFBK3BFLGNBQUF6akQsRUFBQTBrRCxTQUFBMWtELEVBQUF0bUIsVUFBQWlxRSxjQUEwVSxJQUFBZ0IsSUFBUUMsU0FBQTVrRCxFQUFBcWhELE9BQUEvWixnQkFBQXRuQyxFQUFBcWhELE9BQUE5WixlQUFBdm5DLEVBQUFxa0QsWUFBd0Vya0QsRUFBQXRtQixVQUFBbXJFLGdCQUFBLFdBQXVDLE9BQUF6cUUsS0FBQWtwRSxhQUFBdGpELEVBQUFraEQsWUFBdUMxYixJQUFBeGxDLEVBQUF3bEMsSUFBQTRCLE9BQUFwbkMsRUFBQWtrRCxTQUE0QjdjLGVBQUFybkMsRUFBQWtrRCxRQUFBUyxJQUFBbmQsZUFBQXhuQyxFQUFBa2hELFlBQTBEMWIsSUFBQXhsQyxFQUFBd2xDLElBQUFpQyxRQUFBem5DLEVBQUFra0QsUUFBQVMsZ0JBQTJDM2tELEVBQUF0bUIsVUFBQW9yRSxpQkFBQSxXQUF5QyxPQUFBMXFFLEtBQUFrcEUsYUFBQXRqRCxFQUFBa2hELFlBQXVDMWIsSUFBQXhsQyxFQUFBd2xDLElBQUFrQyxRQUFBMW5DLEVBQUFra0QsU0FBNkJ2YyxjQUFBM25DLEVBQUFva0QsU0FBQXhjLGtCQUFBNW5DLEVBQUFxa0QscUJBQWlFcmtELEVBQUF0bUIsVUFBQXFyRSxnQkFBQSxTQUFBaHlELEdBQXlDLE9BQUEzWSxLQUFBa3BFLGFBQUF0akQsRUFBQStqRCxLQUFBL2pELEVBQUFra0QsUUFBQSxXQUFxRCxJQUFBOXdELEVBQUFoWixLQUFBdzBELGNBQXlCMUgsR0FBQWdHLFNBQUEsR0FBQTk1QyxNQUFBLDJCQUFBQSxFQUFBLGFBQStELElBQUFqYixFQUFBaUMsS0FBQXcwRCxjQUFBeDJELEVBQUEsR0FBQUQsRUFBZ0MsT0FBTzB2RCxXQUFBejBDLEVBQUEwMEMsV0FBQTN2RCxFQUFBNHZELFVBQUEzdEQsS0FBQW1vRSxVQUFBdmlELEVBQUFra0QsUUFBQW54RCxFQUFBSyxLQUFBNHhELGlCQUFBNXNFLEVBQUFnQyxLQUFBdzBELG1CQUFBLFlBQTBINXVDLEVBQUF0bUIsVUFBQXVyRSwyQkFBQSxXQUFtRCxPQUFBN3FFLEtBQUFtcEUsZUFBQSxXQUFzQyxJQUFBeHdELEVBQUEzWSxLQUFBdzBELGNBQUF4N0MsRUFBQWhaLEtBQUF3MEQsY0FBOEMsT0FBQTFILEdBQUFnRyxTQUFBLElBQUFuNkMsR0FBQUssRUFBQSxpREFBQWhaLEtBQUFzb0UsbUJBQXFHd0MsbUJBQUFsbEQsRUFBQXNrRCxTQUFBYSwrQkFBQW5sRCxFQUFBc2tELGtCQUFpRixJQUFBdGIsSUFBUUUsUUFBQXhSLEVBQUEwdEIsU0FBQTF0QixFQUFBMmhCLFVBQUExaEIsRUFBQXNSLFVBQUF0UixFQUFBMHRCLFNBSGdzTyxTQUFBdHlELEVBQUFLLEdBQWdCLE9BQUFMLEVBQUFvMUMsU0FBQS8wQyxHQUFBLElBR2h0TzBsRCxTQUFBamhCLEVBQUF5dEIsU0FBQXh0QixFQUFBK2dCLE9BSG0xTyxTQUFBOWxELEVBQUFLLEdBQWdCLFFBQUFqYixFQUFBLEdBQUFDLEVBQUFnYixFQUFpQmhiLEVBQUFnYixFQUFBLEVBQU1oYixHQUFBLEVBQUFELEdBQUFnL0MsT0FBQUMsYUFBQXJrQyxFQUFBMnVELFFBQUF0cEUsSUFBMEMsT0FBQUQsR0FHcDZPZ3hELFVBSDY2TyxTQUFBcDJDLEVBQUFLLEVBQUFqYixHQUFrQixRQUFBQyxFQUFBLEVBQUEyTSxFQUFBLEVBQWdCQSxFQUFBNU0sRUFBSTRNLEdBQUEsRUFBQTNNLElBQUEsRUFBQUEsR0FBQTJhLEVBQUFpMUMsU0FBQTUwQyxFQUFBck8sR0FBOEIsT0FBQTNNLEdBR2ovT2d4RCxTQUgwL08sU0FBQXIyQyxFQUFBSyxFQUFBamIsR0FBa0IsUUFBQUMsS0FBQTJNLEVBQUFxTyxFQUFpQnJPLEVBQUE1TSxFQUFJNE0sR0FBQSxFQUFBM00sRUFBQTRFLEtBQUErVixFQUFBaTFDLFNBQUFqakQsSUFBMkIsT0FBQTNNLEdBRzVqUG10RSxjQUhxa1AsU0FBQXh5RCxHQUFjLFFBQUFLLEVBQUEsR0FBQWpiLEVBQUEsRUFBaUJBLEVBQUE0YSxFQUFBclgsT0FBV3ZELEdBQUEsRUFBQWliLEdBQUErakMsT0FBQUMsYUFBQXJrQyxFQUFBNWEsSUFBa0MsT0FBQWliLEdBR2pwUG8yQyxPQUFBeHBDLEdBQXVJdTVDLElBQUtDLE1BSGsyUSxTQUFBem1ELEVBQUFLLEdBQWdCLElBQUFqYixLQUFTQSxFQUFBOEksUUFBQStuRCxHQUFBcVEsVUFBQXRtRCxFQUFBSyxHQUFBOHpDLEdBQUFnRyxTQUFBLElBQUEvMEQsRUFBQThJLFFBQUEsbUNBQUE5SSxFQUFBMDBELFVBQUE3RCxHQUFBcVEsVUFBQXRtRCxFQUFBSyxFQUFBLEdBQXlILFFBQUFoYixHQUFBLEVBQUEyTSxFQUFBNU0sRUFBQTAwRCxVQUFBLEVBQTZCOW5ELEdBQUEsRUFBS0EsR0FBQSxHQUFNLElBQUFzTixFQUFBMjJDLEdBQUFxUSxVQUFBdG1ELEVBQUFLLEVBQUEsSUFBQXJPLEdBQUEyTixFQUFBczJDLEdBQUFxUSxVQUFBdG1ELEVBQUFLLEVBQUEsSUFBQXJPLEVBQUEsR0FBMEQsT0FBQXNOLElBQUEsSUFBQUssR0FBQSxJQUFBQSxHQUFBLEtBQUFBLElBQUEsSUFBQUwsSUFBQSxJQUFBSyxHQUFBLElBQUFBLEdBQUEsSUFBQUEsR0FBQSxJQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBOEV0YSxFQUFBNHdELEdBQUE4UCxTQUFBL2xELEVBQUFLLEVBQUEsSUFBQXJPLEVBQUEsR0FBMkIsT0FBTyxRQUFBM00sRUFBQSxVQUFBaUMsTUFBQSxtQ0FBNkQsSUFBQTg2QyxFQUFBLElBQUE2VCxHQUFBUSxPQUFBejJDLEVBQUFLLEVBQUFoYixHQUEyQixHQUFBRCxFQUFBNnVELE9BQUE3UixFQUFBeVosY0FBQSxLQUFBejJELEVBQUE2dUQsUUFBaHRDLFNBQUFqMEMsRUFBQUssR0FBa0YsSUFBQWpiLEVBQWxFaWIsRUFBQXc3QyxjQUFBNzdDLEVBQUFyWCxPQUFBMFgsRUFBQTJ1RCxhQUFBaHZELEVBQUF5eUQsU0FBQXB5RCxFQUFBMnVELGFBQXdFaHZELEVBQUEweUQsV0FBQXR0RSxFQUFBaWIsRUFBQTJ1RCxhQUFBaHZELEVBQUFnb0QsaUJBQWlELFFBQUEzaUUsRUFBQSxFQUFZQSxFQUFBRCxFQUFJQyxHQUFBLFVBQUEyTSxFQUFBcU8sRUFBQTJ1RCxhQUFBMXZELEVBQUFlLEVBQUEydUQsYUFBQXJ2RCxFQUFBVSxFQUFBMnVELGFBQUE1c0IsRUFBQXB3QyxFQUFvRW93QyxHQUFBOWlDLEVBQUs4aUMsR0FBQSxFQUFBcGlDLEVBQUFnb0QsY0FBQTVsQixHQUFBemlDLE1BQTgrQjhqQyxDQUFBcitDLEVBQUFnOUMsT0FBaUQsQ0FBSyxPQUFBaDlDLEVBQUE2dUQsT0FBQSxVQUFBM3NELE1BQUEsZ0VBQUFsQyxFQUFBNnVELE9BQUEsT0FBdGdDLFNBQUFqMEMsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxHQUEwRSxJQUFBc04sRUFBcERVLEVBQUFyWCxPQUFBMFgsRUFBQXc3QyxjQUFBNzdDLEVBQUF5eUQsU0FBQXB5RCxFQUFBdzdDLGNBQTBENzdDLEVBQUEyeUQsU0FBQXJ6RCxFQUFBZSxFQUFBdzdDLGVBQUEsRUFBQXg3QyxFQUFBaWxELEtBQUEsWUFBQXRsRCxFQUFBZ29ELGlCQUFzRSxRQUFBcm9ELEVBQUEsSUFBQXMyQyxHQUFBUSxPQUFBcnhELEVBQUFDLEVBQUEyTSxFQUFBLElBQUFvd0MsRUFBQSxJQUFBNlQsR0FBQVEsT0FBQXJ4RCxFQUFBQyxFQUFBMk0sRUFBQSxLQUFBc04sR0FBQXZhLEVBQUEsSUFBQWt4RCxHQUFBUSxPQUFBcnhELEVBQUFDLEVBQUEyTSxFQUFBLEtBQUFzTixHQUFBN1YsRUFBQSxJQUFBd3NELEdBQUFRLE9BQUFyeEQsRUFBQUMsRUFBQTJNLEVBQUEsS0FBQXNOLEdBQUF3SixFQUFBempCLEVBQUEyTSxFQUFBLEtBQUFzTixFQUFBdGEsRUFBQSxFQUE2SUEsRUFBQXNhLEVBQUEsRUFBTXRhLEdBQUEsVUFBQUcsT0FBQSxFQUFBcUIsRUFBQW1aLEVBQUFrOEMsY0FBQXIyRCxFQUFBNDhDLEVBQUF5WixjQUFBaDFELEVBQUE5QixFQUFBczJELGFBQUF2L0MsRUFBQXJTLEVBQUFveUQsY0FBQWgyRCxFQUFBTCxFQUFpR0ssR0FBQVcsRUFBS1gsR0FBQSxNQUFBaVcsR0FBQWdOLEVBQUFyZixFQUFBZ2QsT0FBQWhkLEVBQUE0ckQsZUFBQSxFQUFBdnNDLEdBQUFoTixFQUFBZ04sR0FBQSxHQUFBampCLEVBQUFMLEdBQUEsS0FBQUwsRUFBQTh3RCxHQUFBcVEsVUFBQWxoRSxFQUFBMGpCLE1BQUEzakIsSUFBQTBCLEVBQUEsUUFBQTFCLEVBQUFVLEVBQUFnQixFQUFBLE1BQUFtWixFQUFBZ29ELGNBQUFuaUUsR0FBQVYsRUFBc3VCNCtDLENBQUEzK0MsRUFBQWc5QyxFQUFBcGlDLEVBQUFLLEVBQUFoYixHQUFhLE9BQUFELEdBR2g5Und0RSxLQUh1blMsU0FBQTV5RCxHQUFjLElBQUFLLEVBQUFqYixHQUFBLEVBQVcsSUFBQWliLEVBQUFMLEVBQUFyWCxPQUFBLEVBQWlCMFgsRUFBQSxFQUFJQSxHQUFBLEVBQU0sR0FBQUwsRUFBQXBhLElBQUF5YSxHQUFBd3lELFFBQUEsT0FBMkJqN0QsUUFBQW5MLElBQUEsbUNBQUFySCxHQUFBLEVBQW9ELE1BQU8sSUFBQUMsSUFBUUMsS0FBQSxVQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUF1Q1YsS0FBQSxZQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQVosRUFBQSxNQUE2Q0UsS0FBQSxhQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUEwQ1YsS0FBQSxhQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUEwQ1YsS0FBQSxTQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQVosRUFBQSxRQUEyQ0EsSUFBQUMsSUFBQW9vQixTQUFpQm5vQixLQUFBLG1CQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUFnRFYsS0FBQSxtQkFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsS0FBaURWLEtBQUEsZUFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsTUFBeUNYLElBQUFvb0IsU0FBaUJub0IsS0FBQSxTQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUFzQ1YsS0FBQSxjQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUEyQ1YsS0FBQSxXQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUF3Q1YsS0FBQSxhQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUEwQ1YsS0FBQSxjQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUEyQ1YsS0FBQSxnQkFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBNkNWLEtBQUEsYUFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsS0FBMkMsSUFBQWdNLEVBQUEsSUFBQTRtRCxHQUFBaUIsTUFBQSxPQUFBeDBELEdBQTZCLElBQUEyTSxFQUFBdWYsWUFBQWxSLEVBQUEsRUFBc0JBLEVBQUFMLEVBQUFyWCxPQUFXMFgsR0FBQSxHQUFNLFFBQUFmLEVBQUFVLEVBQUFwYSxJQUFBeWEsR0FBQVYsRUFBQSxFQUF1QkEsRUFBQUwsRUFBQXd6RCxTQUFBbnFFLE9BQW9CZ1gsR0FBQSxFQUFBK2pDLEVBQUExeEMsRUFBQXNOLEVBQUF3ekQsU0FBQW56RCxHQUFBVSxHQUEwQnJPLEVBQUF1ZixTQUFBdmYsRUFBQXVmLFNBQUF5OUIsS0FBQSxTQUFBaHZDLEVBQUFLLEdBQXlDLE9BQUFMLEVBQUFoTCxNQUFBcUwsRUFBQXJMLFNBQWpqQyxTQUFBZ0wsR0FBY0EsRUFBQXVSLFNBQUF0bkIsTUFBaUJ3RyxJQUFBLE1BQUF1RSxNQUFBLE1BQUFrZCxNQUFBLEVBQUF6TCxPQUFBLElBQTJpQ285QixDQUFBN3hDLEdBQUssSUFBQW93QyxFQUFBcHdDLEVBQUF1ZixTQUFBNW9CLE9BQUE1RCxFQUFBLEVBQUEwRSxLQUFBcWYsS0FBQTlqQixLQUFBRyxLQUFBcUIsS0FBQWhCLEtBQTBELElBQUE2YSxFQUFBLEVBQVFBLEVBQUEraEMsRUFBSS9oQyxHQUFBLEdBQU0sSUFBQXhaLEVBQUFtTCxFQUFBdWYsU0FBQWxSLEdBQW9CeFosRUFBQTRKLEtBQUEsT0FBQTVKLEVBQUFtTyxPQUFBLE9BQUF2TCxJQUFBZ2tCLFFBQTBDbm9CLEtBQUEsT0FBQSthLEVBQUEvSyxLQUFBLFNBQUF0UCxNQUFBYSxFQUFBNEosTUFBd0NxWSxJQUFBMkUsUUFBY25vQixLQUFBLFNBQUErYSxFQUFBL0ssS0FBQSxTQUFBdFAsTUFBQWEsRUFBQW1PLFFBQTRDaFEsSUFBQXlvQixRQUFjbm9CLEtBQUEsV0FBQSthLEVBQUEvSyxLQUFBLFFBQUF0UCxNQUFBYSxFQUFBcXJCLFFBQTZDL3NCLElBQUFzb0IsUUFBY25vQixLQUFBLGlCQUFBK2EsRUFBQS9LLEtBQUEsU0FBQXRQLE1BQUFhLEVBQUE0ZixjQUFxRCxJQUFBNWYsRUFBQWtzRSxVQUFBdnNFLElBQUFpbkIsUUFBbUNub0IsS0FBQSxTQUFBK2EsRUFBQS9LLEtBQUEsU0FBQXRQLE1BQUFhLEVBQUFrc0UsWUFBOENodUUsR0FBQSxFQUFBSyxRQUFBLElBQUF5QixFQUFBeXVELGFBQTRKOXZELEdBQTNEQSxHQUFqR0EsSUFBQWlvQixRQUFnRG5vQixLQUFBLGVBQUErYSxFQUFBL0ssS0FBQSxRQUFBdFAsTUFBQWEsRUFBQW1PLFNBQWlEeVksUUFBY25vQixLQUFBLGFBQUErYSxFQUFBL0ssS0FBQSxRQUFBdFAsTUFBQWEsRUFBQTRKLE9BQTZDZ2QsUUFBY25vQixLQUFBLGVBQUErYSxFQUFBL0ssS0FBQSxRQUFBdFAsTUFBQWEsRUFBQXl1RCxjQUF5RCxHQUFBdGpELEVBQUFnaEUsV0FBQSxHQUFBNXdCLEVBQUFyOUMsR0FBQWlOLEVBQUErbkQsWUFBQSxFQUFBOXRELEtBQUFLLElBQUEsRUFBQUwsS0FBQTBFLE1BQUExRSxLQUFBUSxJQUFBMjFDLEVBQUFyOUMsR0FBQWtILEtBQUFRLElBQUEsS0FBQXVGLEVBQUFnb0QsY0FBQS90RCxLQUFBUSxJQUFBdUYsRUFBQStuRCxZQUFBLEdBQUE5dEQsS0FBQVEsSUFBQSxHQUFBdUYsRUFBQWlvRCxXQUFBam9ELEVBQUFnaEUsV0FBQWhoRSxFQUFBK25ELFlBQUEvbkQsRUFBQWdpRCxPQUFBaGlELEVBQUFnaUQsT0FBQXZtQyxPQUFBaGtCLEdBQUF1SSxFQUFBZ2lELE9BQUEvcEQsTUFBbU8zRSxLQUFBLGNBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLElBQXlDZ00sRUFBQWdpRCxPQUFBaGlELEVBQUFnaUQsT0FBQXZtQyxPQUFBM0UsR0FBQTlXLEVBQUFnaUQsT0FBQWhpRCxFQUFBZ2lELE9BQUF2bUMsT0FBQXpvQixHQUFBZ04sRUFBQWdpRCxPQUFBaGlELEVBQUFnaUQsT0FBQXZtQyxPQUFBdG9CLEdBQUE2TSxFQUFBZ2lELE9BQUFoaUQsRUFBQWdpRCxPQUFBdm1DLE9BQUFqbkIsR0FBQXdMLEVBQUFpaEUsWUFBQSxLQUFBeHBFLEVBQUFkLE9BQUEsSUFBQW1nQixFQUFBbmdCLE9BQUEsRUFBQTNELEVBQUEyRCxPQUFBLEVBQUF4RCxFQUFBd0QsT0FBQSxFQUFBbkMsRUFBQW1DLFFBQUF2RCxFQUFBLENBQWdNLElBQUEwVyxFQUFBLEtBQUF0VyxFQUFBbUQsT0FBb0JxSixFQUFBa2hFLGFBQUEsR0FBQWxoRSxFQUFBaWhFLFlBQUFqaEUsRUFBQWdpRCxPQUFBaGlELEVBQUFnaUQsT0FBQXZtQyxTQUEyRG5vQixLQUFBLGVBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLEtBQTZDVixLQUFBLGlCQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUE4Q1YsS0FBQSxlQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQThWLElBQTJDeFcsS0FBQSxpQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBNkNWLEtBQUEsZ0JBQUFnUSxLQUFBLFFBQUF0UCxNQUFBUixFQUFBbUQsT0FBQSxLQUFtRHFKLEVBQUFnaUQsT0FBQWhpRCxFQUFBZ2lELE9BQUF2bUMsT0FBQWpvQixHQUErQixPQUFBd00sSUFHN2lYMGtELElBQUEsMG5JQUFBeWMsSUFBQSw4K0NBQUFDLElBQUEsMjdFQUFBemQsSUFBQSwrekVBQW0zVTFRLEVBQUF0K0MsVUFBQTJ6RCxpQkFBQSxTQUFBdDZDLEdBQXlDLElBQUFLLEVBQUFMLEVBQUFncEQsWUFBQSxHQUFBNWpFLEVBQUFpQyxLQUFBa3VELEtBQUFyQixPQUEwQyxHQUFBOXVELEVBQUEsUUFBQUMsRUFBQSxFQUFpQkEsRUFBQUQsRUFBQXVELE9BQVd0RCxHQUFBLFVBQUEyTSxFQUFBNU0sRUFBQVEsSUFBQVAsR0FBQWlhLEVBQUEsRUFBNEJBLEVBQUF0TixFQUFBOGdFLFNBQUFucUUsT0FBb0IyVyxHQUFBLEtBQUF0TixFQUFBOGdFLFNBQUF4ekQsS0FBQWUsRUFBQSxPQUFBaGIsRUFBbUMsYUFBWTI5QyxFQUFBcjhDLFVBQUEyekQsaUJBQUEsU0FBQXQ2QyxHQUEwQyxPQUFBM1ksS0FBQW11RCxLQUFBd1MsY0FBQWhvRCxFQUFBZ3BELFlBQUEsUUFBb0R4bEIsRUFBQTc4QyxVQUFBMnpELGlCQUFBLFNBQUF0NkMsR0FBMEMsSUFBQUssRUFBQUwsRUFBQWdwRCxZQUFBLEdBQUE1akUsRUFBQWlDLEtBQUFvdUQsU0FBQXAxQyxHQUEwQyxPQUFBaFosS0FBQW1sRCxRQUFBaGtELFFBQUFwRCxJQUErQisrQyxFQUFBeDlDLFVBQUEwc0UsaUJBQUEsU0FBQXJ6RCxHQUEwQyxPQUFBM1ksS0FBQXF1RCxNQUFBbHRELFFBQUF3WCxJQUE2Qm1rQyxFQUFBeDlDLFVBQUF3aEUsaUJBQUEsU0FBQW5vRCxHQUEwQyxPQUFBM1ksS0FBQXF1RCxNQUFBMTFDLElBQXNCLElBQUFzekQsSUFBUUMsS0FIa2dELFNBQUF2ekQsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxHQUF1QmdPLEVBQUE2cEQsWUFBQTdwRCxFQUFBNDNDLE9BQUF2M0MsRUFBQWpiLEdBQUE0YSxFQUFBbzRDLE9BQUEveUQsRUFBQTJNLEdBQUFnTyxFQUFBNnpDLFdBR2hoRDdLLEVBQUFyaUQsVUFBQW12RCxzQkFBQSxTQUFBOTFDLEdBQStDM1ksS0FBQXNJLE1BQUFxUSxFQUFBclEsT0FBQSxFQUFBdEksS0FBQS9CLEtBQUEwYSxFQUFBMWEsTUFBQSxLQUFBK0IsS0FBQXdyRSxRQUFBN3lELEVBQUE2eUQsY0FBQSxFQUFBeHJFLEtBQUF5ckUsU0FBQTl5RCxFQUFBOHlELGVBQUEsSUFBQTl5RCxFQUFBNnlELFNBQUE3eUQsRUFBQTZ5RCxZQUFBN3lELEVBQUF3ekQsT0FBQW5zRSxLQUFBbXNFLEtBQUF4ekQsRUFBQXd6RCxNQUFBeHpELEVBQUF5ekQsT0FBQXBzRSxLQUFBb3NFLEtBQUF6ekQsRUFBQXl6RCxNQUFBenpELEVBQUEwekQsT0FBQXJzRSxLQUFBcXNFLEtBQUExekQsRUFBQTB6RCxNQUFBMXpELEVBQUEyekQsT0FBQXRzRSxLQUFBc3NFLEtBQUEzekQsRUFBQTJ6RCxNQUFBM3pELEVBQUF3NEMsZUFBQW54RCxLQUFBbXhELGFBQUF4NEMsRUFBQXc0QyxjQUFBL3lELE9BQUFDLGVBQUEyQixLQUFBLE9BSHNoRCxTQUFBMlksRUFBQUssR0FBaUIsSUFBQWpiLEVBQUFpYixHQUFBLElBQUF4YSxFQUFlLE9BQU9td0QsY0FBQSxFQUFBcHdELElBQUEsV0FBK0IseUJBQUFSLGNBQXNDMkMsSUFBQSxTQUFBaVksR0FBaUI1YSxFQUFBNGEsSUFHbnBEbXFDLENBQUE5aUQsRUFBQTJZLEVBQUErMUMsUUFBMFYvTSxFQUFBcmlELFVBQUFzaEUsV0FBQSxTQUFBam9ELEdBQXFDLElBQUEzWSxLQUFBeXJFLFNBQUFucUUsU0FBQXRCLEtBQUF3ckUsUUFBQTd5RCxHQUFBM1ksS0FBQXlyRSxTQUFBN29FLEtBQUErVixJQUFpRWdwQyxFQUFBcmlELFVBQUFnakUsZUFBQSxXQUF3QyxPQUFBdGlFLEtBQUEwdUQsS0FBQTRULGtCQUFrQzNnQixFQUFBcmlELFVBQUF1MkQsUUFBQSxTQUFBbDlDLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBOEYsSUFBQXNOLEVBQUFLLEVBQXBESyxPQUFBLElBQUFBLElBQUEsRUFBQUssT0FBQSxJQUFBQSxJQUFBLEVBQUFqYixPQUFBLElBQUFBLElBQUEsR0FBNERDLFVBQVUsSUFBQSs4QyxFQUFBLzhDLEVBQUFnM0QsT0FBQXQzRCxFQUFBTSxFQUFBbTNELE9BQTBCLEdBQUFuM0QsRUFBQXV1RSxTQUFBNWhFLEtBQUE0aEUsVUFBQWowRCxFQUFBdFksS0FBQTB1RCxNQUFBL2pELEVBQUE0aEUsUUFBQWx6QyxLQUFBcjVCLEtBQUFqQyxJQUFBdWEsRUFBQUwsRUFBQXROLEVBQUE0aEUsUUFBQXhXLFlBQUF6OUMsR0FBQUssRUFBQS9ULEtBQUFvUyxNQUFBMkIsR0FBQUssRUFBQXBVLEtBQUFvUyxNQUFBZ0MsR0FBQStoQyxFQUFBcjlDLEVBQUEsTUFBcUksQ0FBS3VhLEVBQUFqWSxLQUFBMHVELEtBQUFuQyxTQUFxQixJQUFBbnFELEVBQUEsRUFBQXBDLEtBQUEwdUQsS0FBQWdOLFdBQUEzOUQsT0FBK0IsSUFBQWc5QyxNQUFBMzRDLFFBQUEsSUFBQTFFLE1BQUEwRSxHQUFvQyxRQUFBcWYsRUFBQSxJQUFBampCLEVBQUFiLEVBQUEsRUFBb0JBLEVBQUFzYSxFQUFBM1csT0FBVzNELEdBQUEsR0FBTSxJQUFBRyxFQUFBbWEsRUFBQXRhLEdBQVcsTUFBQUcsRUFBQW1RLEtBQUF3VCxFQUFBOHVDLE9BQUE1M0MsRUFBQTdhLEVBQUE4N0IsRUFBQW1oQixFQUFBL2hDLEdBQUFsYixFQUFBbWdDLEVBQUF2Z0MsR0FBQSxNQUFBSSxFQUFBbVEsS0FBQXdULEVBQUFzdkMsT0FBQXA0QyxFQUFBN2EsRUFBQTg3QixFQUFBbWhCLEVBQUEvaEMsR0FBQWxiLEVBQUFtZ0MsRUFBQXZnQyxHQUFBLE1BQUFJLEVBQUFtUSxLQUFBd1QsRUFBQWswQyxpQkFBQWg5QyxFQUFBN2EsRUFBQXF1RCxHQUFBcFIsRUFBQS9oQyxHQUFBbGIsRUFBQXN1RCxHQUFBMXVELEVBQUFpYixFQUFBN2EsRUFBQTg3QixFQUFBbWhCLEVBQUEvaEMsR0FBQWxiLEVBQUFtZ0MsRUFBQXZnQyxHQUFBLE1BQUFJLEVBQUFtUSxLQUFBd1QsRUFBQXV2QyxRQUFBcjRDLEVBQUE3YSxFQUFBcXVELEdBQUFwUixFQUFBL2hDLEdBQUFsYixFQUFBc3VELEdBQUExdUQsRUFBQWliLEVBQUE3YSxFQUFBdXVELEdBQUF0UixFQUFBL2hDLEdBQUFsYixFQUFBd3VELEdBQUE1dUQsRUFBQWliLEVBQUE3YSxFQUFBODdCLEVBQUFtaEIsRUFBQS9oQyxHQUFBbGIsRUFBQW1nQyxFQUFBdmdDLEdBQUEsTUFBQUksRUFBQW1RLE1BQUF3VCxFQUFBNnVDLFlBQWdRLE9BQUE3dUMsR0FBU2tnQyxFQUFBcmlELFVBQUFrdEUsWUFBQSxXQUFnRCxZQUFBeHNFLEtBQUE2MEQsT0FBQSxTQUFpQyxRQUFBNzdDLEtBQUFqYixLQUFBQyxFQUFBLEVBQXNCQSxFQUFBZ0MsS0FBQTYwRCxPQUFBdnpELE9BQXFCdEQsR0FBQSxHQUFNLElBQUEyTSxFQUE3RjNLLEtBQTZGNjBELE9BQUE3MkQsR0FBa0JELEVBQUE2RSxLQUFBK0gsS0FBQWlxRCxxQkFBQTU3QyxFQUFBcFcsS0FBQTdFLFNBQWlELE9BQUErdUQsR0FBQWdHLFNBQUEsSUFBQS8wRCxFQUFBdUQsT0FBQSx1REFBQTBYLEdBQXlGMm9DLEVBQUFyaUQsVUFBQTR6RCxXQUFBLFdBQW9DLFFBQUF2NkMsRUFBQTNZLEtBQUEwdUQsS0FBQW5DLFNBQUF2ekMsS0FBQWpiLEtBQUFDLEVBQUEsRUFBMkNBLEVBQUEyYSxFQUFBclgsT0FBV3RELEdBQUEsR0FBTSxJQUFBMk0sRUFBQWdPLEVBQUEzYSxHQUFXLE1BQUEyTSxFQUFBc0QsT0FBQStLLEVBQUFwVyxLQUFBK0gsRUFBQWl2QixHQUFBNzdCLEVBQUE2RSxLQUFBK0gsRUFBQXN6QixJQUFBLE1BQUF0ekIsRUFBQXNELE1BQUEsTUFBQXRELEVBQUFzRCxPQUFBK0ssRUFBQXBXLEtBQUErSCxFQUFBd2hELElBQUFwdUQsRUFBQTZFLEtBQUErSCxFQUFBeWhELEtBQUEsTUFBQXpoRCxFQUFBc0QsT0FBQStLLEVBQUFwVyxLQUFBK0gsRUFBQTBoRCxJQUFBdHVELEVBQUE2RSxLQUFBK0gsRUFBQTJoRCxLQUEwSSxJQUFBcjBDLEdBQU9rMEQsS0FBQXZuRSxLQUFBc1gsSUFBQTVVLE1BQUEsS0FBQTBSLEdBQUFvekQsS0FBQXhuRSxLQUFBc1gsSUFBQTVVLE1BQUEsS0FBQXZKLEdBQUFzdUUsS0FBQXpuRSxLQUFBOEssSUFBQXBJLE1BQUEsS0FBQTBSLEdBQUFzekQsS0FBQTFuRSxLQUFBOEssSUFBQXBJLE1BQUEsS0FBQXZKLEdBQUEwdUUsZ0JBQUF6c0UsS0FBQXlzRSxpQkFBc0osT0FBQTU1RCxTQUFBb0YsRUFBQWswRCxRQUFBbDBELEVBQUFrMEQsS0FBQSxHQUFBdDVELFNBQUFvRixFQUFBbzBELFFBQUFwMEQsRUFBQW8wRCxLQUFBcnNFLEtBQUFteEQsY0FBQXQrQyxTQUFBb0YsRUFBQW0wRCxRQUFBbjBELEVBQUFtMEQsS0FBQSxHQUFBdjVELFNBQUFvRixFQUFBcTBELFFBQUFyMEQsRUFBQXEwRCxLQUFBLEdBQUFyMEQsRUFBQXkwRCxpQkFBQTFzRSxLQUFBbXhELGFBQUFsNUMsRUFBQXcwRCxpQkFBQXgwRCxFQUFBbzBELEtBQUFwMEQsRUFBQWswRCxNQUFBbDBELEdBQW9OMHBDLEVBQUFyaUQsVUFBQWlqRSxLQUFBLFNBQUE1cEQsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxHQUF1QzNLLEtBQUE2MUQsUUFBQTc4QyxFQUFBamIsRUFBQUMsRUFBQTJNLEdBQUE0M0QsS0FBQTVwRCxJQUE4QmdwQyxFQUFBcmlELFVBQUFxdEUsV0FBQSxTQUFBaDBELEVBQUFLLEVBQUFqYixFQUFBQyxHQUEyQyxTQUFBMk0sRUFBQXFPLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBb0IsSUFBQXNOLEVBQUEsRUFBQXJULEtBQUFDLEdBQWdCOFQsRUFBQTZwRCxZQUFjLFFBQUFscUQsRUFBQSxFQUFZQSxFQUFBVSxFQUFBMVgsT0FBV2dYLEdBQUEsRUFBQUssRUFBQTQzQyxPQUFBeHlELEVBQUFpYixFQUFBVixHQUFBc2hCLEVBQUFqdkIsRUFBQTNNLEVBQUFnYixFQUFBVixHQUFBMmxCLEVBQUF0ekIsR0FBQWdPLEVBQUFpMEQsSUFBQTd1RSxFQUFBaWIsRUFBQVYsR0FBQXNoQixFQUFBanZCLEVBQUEzTSxFQUFBZ2IsRUFBQVYsR0FBQTJsQixFQUFBdHpCLEVBQUEsSUFBQXNOLEdBQUEsR0FBMkVVLEVBQUEyM0MsWUFBQTMzQyxFQUFBc29DLE9BQXVCam9DLE9BQUEsSUFBQUEsSUFBQSxFQUFBamIsT0FBQSxJQUFBQSxJQUFBLEVBQUFDLE9BQUEsSUFBQUEsSUFBQSxHQUFvRCxRQUFBaWEsRUFBQSxFQUFBalksS0FBQTB1RCxLQUFBZ04sV0FBQTE5RCxFQUFBc2EsS0FBQXlpQyxLQUFBcjlDLEVBQUFzQyxLQUFBMHVELEtBQUF0c0QsRUFBQSxFQUE2REEsRUFBQTFFLEVBQUE2dUQsU0FBQWpyRCxPQUFvQmMsR0FBQSxHQUFNLElBQUFxZixFQUFBL2pCLEVBQUE2dUQsU0FBQW5xRCxRQUFvQixJQUFBcWYsRUFBQW1ZLEdBQUF0aEIsRUFBQTFWLE1BQXNCZzNCLEVBQUFuWSxFQUFBbVksRUFBQXFFLEdBQUF4YyxFQUFBd2MsU0FBYSxJQUFBeGMsRUFBQTBxQyxJQUFBcFIsRUFBQW40QyxNQUF5QmczQixFQUFBblksRUFBQTBxQyxHQUFBbHVCLEdBQUF4YyxFQUFBMnFDLFVBQWUsSUFBQTNxQyxFQUFBNHFDLElBQUF0UixFQUFBbjRDLE1BQXlCZzNCLEVBQUFuWSxFQUFBNHFDLEdBQUFwdUIsR0FBQXhjLEVBQUE2cUMsS0FBaUIzekMsRUFBQThwRCxVQUFBLE9BQUE5M0QsRUFBQTJOLEVBQUFVLEVBQUFqYixFQUFBa2EsR0FBQVUsRUFBQThwRCxVQUFBLE1BQUE5M0QsRUFBQW93QyxFQUFBL2hDLEVBQUFqYixFQUFBa2EsSUFBMkQwcEMsRUFBQXJpRCxVQUFBdXRFLFlBQUEsU0FBQWwwRCxFQUFBSyxFQUFBamIsRUFBQUMsR0FBNEMsSUFBQTJNLEVBQU1xTyxPQUFBLElBQUFBLElBQUEsRUFBQWpiLE9BQUEsSUFBQUEsSUFBQSxFQUFBQyxPQUFBLElBQUFBLElBQUEsR0FBQTJNLEVBQUEsRUFBQTNLLEtBQUEwdUQsS0FBQWdOLFdBQUExOUQsRUFBQTJhLEVBQUFncUQsVUFBQSxFQUFBaHFELEVBQUErcEQsWUFBQSxRQUFBdUosR0FBQUMsS0FBQXZ6RCxFQUFBSyxHQUFBLElBQUFBLEVBQUEsS0FBQWl6RCxHQUFBQyxLQUFBdnpELEdBQUEsSUFBQTVhLEVBQUEsSUFBQUEsR0FBbUssSUFBQWthLEVBQUFqWSxLQUFBbXNFLE1BQUEsRUFBQTd6RCxFQUFBdFksS0FBQW9zRSxNQUFBLEVBQUFyeEIsRUFBQS82QyxLQUFBcXNFLE1BQUEsRUFBQTN1RSxFQUFBc0MsS0FBQXNzRSxNQUFBLEVBQUFscUUsRUFBQXBDLEtBQUFteEQsY0FBQSxFQUF1Rng0QyxFQUFBK3BELFlBQUEsT0FBQXVKLEdBQUFDLEtBQUF2ekQsRUFBQUssRUFBQWYsRUFBQXROLEdBQUEsSUFBQXFPLEVBQUFmLEVBQUF0TixFQUFBLEtBQUFzaEUsR0FBQUMsS0FBQXZ6RCxFQUFBSyxFQUFBK2hDLEVBQUFwd0MsR0FBQSxJQUFBcU8sRUFBQStoQyxFQUFBcHdDLEVBQUEsS0FBQXNoRSxHQUFBQyxLQUFBdnpELEdBQUEsSUFBQTVhLEdBQUF1YSxFQUFBM04sRUFBQSxJQUFBNU0sR0FBQXVhLEVBQUEzTixHQUFBc2hFLEdBQUFDLEtBQUF2ekQsR0FBQSxJQUFBNWEsR0FBQUwsRUFBQWlOLEVBQUEsSUFBQTVNLEdBQUFMLEVBQUFpTixHQUFBZ08sRUFBQStwRCxZQUFBLFFBQUF1SixHQUFBQyxLQUFBdnpELEVBQUFLLEVBQUE1VyxFQUFBdUksR0FBQSxJQUFBcU8sRUFBQTVXLEVBQUF1SSxFQUFBLE1BQStNaTNDLEVBQUF0aUQsVUFBQWYsSUFBQSxTQUFBb2EsR0FBOEIseUJBQUEzWSxLQUFBNnNELE9BQUFsMEMsS0FBQTNZLEtBQUE2c0QsT0FBQWwwQyxHQUFBM1ksS0FBQTZzRCxPQUFBbDBDLE1BQUEzWSxLQUFBNnNELE9BQUFsMEMsSUFBMEZpcEMsRUFBQXRpRCxVQUFBc0QsS0FBQSxTQUFBK1YsRUFBQUssR0FBaUNoWixLQUFBNnNELE9BQUFsMEMsR0FBQUssRUFBQWhaLEtBQUFzQixVQUFnQyxJQUFBaThELElBQVFDLFNBQUE1YixFQUFBa3JCLFlBSHgzQyxTQUFBbjBELEVBQUFLLEdBQWlCLFdBQUEyb0MsR0FBZXI1QyxNQUFBMFEsRUFBQWsxQyxLQUFBdjFDLEtBR3cxQ28wRCxlQUh2MEMsU0FBQXAwRCxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixHQUF5QixrQkFBa0IsSUFBQUssRUFBQSxJQUFBcXBDLEdBQWNyNUMsTUFBQTBRLEVBQUFrMUMsS0FBQXYxQyxJQUFpQixPQUFBTCxFQUFBbzJDLEtBQUEsV0FBeUIzd0QsRUFBQXVhLEVBQUF0YSxFQUFBMk0sR0FBUyxJQUFBcU8sRUFBQWYsRUFBQVUsRUFBQWswQyxPQUFBdjBDLEdBQW9CLE9BQUFVLEVBQUEwaUQsV0FBQS9pRCxFQUFBK2lELFdBQUExaUQsR0FBbUMycEMsRUFBQXJxQyxFQUFBLGdCQUFBcXFDLEVBQUFycUMsRUFBQSxnQkFBQXFxQyxFQUFBcnFDLEVBQUEsZ0JBQUFxcUMsRUFBQXJxQyxFQUFBLGdCQUFBQSxJQUdvcUMwMEQsZUFINWtDLFNBQUFyMEQsRUFBQUssRUFBQWpiLEVBQUFDLEdBQXFCLGtCQUFrQixJQUFBMk0sRUFBQSxJQUFBZzNDLEdBQWNyNUMsTUFBQTBRLEVBQUFrMUMsS0FBQXYxQyxJQUFpQixPQUFBaE8sRUFBQStqRCxLQUFBLFdBQXlCLElBQUExMUMsRUFBQWpiLEVBQUE0YSxFQUFBaE8sRUFBQTNNLEdBQWUsT0FBQWdiLEVBQUEwaUQsV0FBQS9pRCxFQUFBK2lELFdBQUExaUQsR0FBbUNyTyxLQUcwL0I2a0QsS0FBTXZ4RCxLQUFBLFVBQUFxeEQsR0FBQSxFQUFBcmhELEtBQUEsUUFBaUNoUSxLQUFBLFNBQUFxeEQsR0FBQSxFQUFBcmhELEtBQUEsUUFBZ0NoUSxLQUFBLFlBQUFxeEQsR0FBQSxLQUFBcmhELEtBQUEsUUFBc0NoUSxLQUFBLFdBQUFxeEQsR0FBQSxFQUFBcmhELEtBQUEsUUFBa0NoUSxLQUFBLGFBQUFxeEQsR0FBQSxFQUFBcmhELEtBQUEsUUFBb0NoUSxLQUFBLFNBQUFxeEQsR0FBQSxFQUFBcmhELEtBQUEsUUFBZ0NoUSxLQUFBLGVBQUFxeEQsR0FBQSxLQUFBcmhELEtBQUEsU0FBQXRQLE1BQUEsSUFBb0RWLEtBQUEsY0FBQXF4RCxHQUFBLEtBQUFyaEQsS0FBQSxTQUFBdFAsTUFBQSxJQUFtRFYsS0FBQSxvQkFBQXF4RCxHQUFBLEtBQUFyaEQsS0FBQSxTQUFBdFAsT0FBQSxNQUE0RFYsS0FBQSxxQkFBQXF4RCxHQUFBLEtBQUFyaEQsS0FBQSxTQUFBdFAsTUFBQSxLQUEyRFYsS0FBQSxZQUFBcXhELEdBQUEsS0FBQXJoRCxLQUFBLFNBQUF0UCxNQUFBLElBQWlEVixLQUFBLGlCQUFBcXhELEdBQUEsS0FBQXJoRCxLQUFBLFNBQUF0UCxNQUFBLElBQXNEVixLQUFBLGFBQUFxeEQsR0FBQSxLQUFBcmhELE1BQUEsMkNBQUF0UCxPQUFBLHFCQUF1R1YsS0FBQSxXQUFBcXhELEdBQUEsR0FBQXJoRCxLQUFBLFdBQXNDaFEsS0FBQSxXQUFBcXhELEdBQUEsRUFBQXJoRCxNQUFBLHFDQUFBdFAsT0FBQSxXQUFrRlYsS0FBQSxjQUFBcXhELEdBQUEsS0FBQXJoRCxLQUFBLFNBQUF0UCxNQUFBLElBQW1EVixLQUFBLE9BQUFxeEQsR0FBQSxHQUFBcmhELFFBQUF0UCxNQUFBLE9BQXVDVixLQUFBLFVBQUFxeEQsR0FBQSxHQUFBcmhELEtBQUEsU0FBQXRQLE1BQUEsSUFBNkNWLEtBQUEsV0FBQXF4RCxHQUFBLEdBQUFyaEQsS0FBQSxTQUFBdFAsTUFBQSxJQUE4Q1YsS0FBQSxjQUFBcXhELEdBQUEsR0FBQXJoRCxLQUFBLFNBQUF0UCxNQUFBLElBQWlEVixLQUFBLFVBQUFxeEQsR0FBQSxHQUFBcmhELE1BQUEsbUJBQUF0UCxPQUFBLE9BQTREVixLQUFBLE1BQUFxeEQsR0FBQSxLQUFBcmhELE1BQUEsd0JBQWlEaFEsS0FBQSxpQkFBQXF4RCxHQUFBLEtBQUFyaEQsS0FBQSxTQUFBdFAsTUFBQSxJQUFzRFYsS0FBQSxrQkFBQXF4RCxHQUFBLEtBQUFyaEQsS0FBQSxTQUFBdFAsTUFBQSxJQUF1RFYsS0FBQSxjQUFBcXhELEdBQUEsS0FBQXJoRCxLQUFBLFNBQUF0UCxNQUFBLElBQW1EVixLQUFBLFdBQUFxeEQsR0FBQSxLQUFBcmhELEtBQUEsU0FBQXRQLE1BQUEsT0FBbURWLEtBQUEsVUFBQXF4RCxHQUFBLEtBQUFyaEQsS0FBQSxXQUF1Q2hRLEtBQUEsVUFBQXF4RCxHQUFBLEtBQUFyaEQsS0FBQSxXQUF1Q2hRLEtBQUEsV0FBQXF4RCxHQUFBLEtBQUFyaEQsS0FBQSxXQUF3Q2hRLEtBQUEsV0FBQXF4RCxHQUFBLEtBQUFyaEQsS0FBQSxRQUFtQ3loRCxLQUFPenhELEtBQUEsUUFBQXF4RCxHQUFBLEdBQUFyaEQsS0FBQSxTQUFBdFAsTUFBQSxJQUEyQ1YsS0FBQSxnQkFBQXF4RCxHQUFBLEdBQUFyaEQsS0FBQSxTQUFBdFAsTUFBQSxJQUFtRFYsS0FBQSxnQkFBQXF4RCxHQUFBLEdBQUFyaEQsS0FBQSxTQUFBdFAsTUFBQSxJQUFpRDhoRSxJQUFNckIsTUFGcG96QixTQUFBem1ELEVBQUFLLEVBQUFqYixHQUFtQkEsRUFBQTB5RCxPQUFBQyxPQUFnQixJQUFBMXlELEVBRDBpeUIsU0FBQTJhLEVBQUFLLEdBQWlCLElBQUFqYixLQUFTLE9BQUFBLEVBQUFrdkUsWUFBQXJlLEdBQUFvYyxTQUFBcnlELEVBQUFLLEdBQUFqYixFQUFBbXZFLFlBQUF0ZSxHQUFBb2MsU0FBQXJ5RCxFQUFBSyxFQUFBLEdBQUFqYixFQUFBeWxCLEtBQUFvckMsR0FBQW9jLFNBQUFyeUQsRUFBQUssRUFBQSxHQUFBamIsRUFBQW92RSxXQUFBdmUsR0FBQW9jLFNBQUFyeUQsRUFBQUssRUFBQSxHQUFBamIsRUFBQXUxQixZQUFBdGEsRUFBQWpiLEVBQUFteEQsVUFBQWwyQyxFQUFBLEVBQUFqYixFQUNwa3lCMnBELENBQUEvdUMsRUFBQUssR0FBQXJPLEVBQUEyM0MsRUFBQTNwQyxFQUFBM2EsRUFBQWt4RCxVQUFBTixHQUFBdWMsZUFBQWx6RCxFQUFBcXFDLEVBQUEzcEMsRUFBQWhPLEVBQUF1a0QsV0FBQTUyQyxFQUFBZ3FDLEVBQUEzcEMsRUFBQVYsRUFBQWkzQyxVQUFBTixHQUFBdWMsZUFBQXB3QixFQUFBdUgsRUFBQTNwQyxFQUFBTCxFQUFBNDJDLFdBQWdJbnhELEVBQUFtekQsT0FBQW5XLEVBQUFrVSxRQUFBbHhELEVBQUFrekQsV0FBQTVPLEVBQUF0a0QsRUFBQW16RCxRQUE2QyxJQUFBeHpELEVBQUFrVSxFQUFBK0csRUFBQUssRUFBQWYsRUFBQWczQyxRQUFBMzJDLEVBQUEyMkMsU0FBa0MsT0FBQXZ4RCxFQUFBNEQsT0FBQSxVQUFBckIsTUFBQSxpRkFBQXZDLEVBQUE0RCxRQUEySCxJQUFBYyxFQUFBMUUsRUFBQSxHQUFXLEdBQUFLLEVBQUEweUQsT0FBQUMsSUFBQUMsUUFBQXZ1RCxJQUFBZ3VELGVBQUFyeUQsRUFBQWl5RCxjQUFBNXRELEVBQUFndUQsYUFBQUosY0FBQWp5RCxFQUFBbXlELGNBQUE5dEQsRUFBQWd1RCxhQUFBRixvQkFBQSxJQUFBOXRELEVBQUFnckUsSUFBQSxhQUFBaHJFLEVBQUFnckUsSUFBQSxLQUFBcnZFLEVBQUF5eUQsV0FBQSxHQUFBenlELEVBQUF5eUQsVUFBQSxDQUEwTSxJQUFBL3VDLEVBQUFyZixFQUFBaXJFLFFBQUExdkUsRUFBQXlFLEVBQUFrckUsU0FBNkIsT0FBQTdyRCxHQUFBLElBQUE5akIsRUFBQSxVQUFBc0MsTUFBQSxvRkFBeUgsSUFBQW5DLEVBQUF3a0QsRUFBQTNwQyxFQUFMOEksR0FBQXpJLEdBQUs3WixFQUFBeVMsRUFBQStHLEVBQUFLLEVBQUFsYixFQUFBbXhELFFBQUEzMkMsRUFBQTIyQyxTQUE0QzdzRCxFQUFBeXVELFNBQUExeEQsRUFBQXhCLEdBQUFxYixFQUFBNVcsRUFBQXd1RCxVQUE5akQsU0FBQWo0QyxFQUFBSyxFQUFBamIsRUFBQUMsR0FBcUIsSUFBQTJNLEVBQUFzTixLQUFBSyxFQUFBLElBQUFzMkMsR0FBQVEsT0FBQXoyQyxFQUFBSyxHQUFBK2hDLEVBQUF6aUMsRUFBQWl2RCxhQUFpRCxPQUFBeHNCLEVBQUEsUUFBQXI5QyxFQUFBLEVBQXFCQSxFQUFBSyxFQUFJTCxJQUFBLENBQUssSUFBQWlOLEVBQUEyTixFQUFBaXZELGVBQUF2cEUsRUFBQSxVQUFBaUMsTUFBQSxzREFBQTBLLEVBQUEsY0FBQTNNLEVBQUEsS0FBc0hpYSxFQUFBclYsS0FBQStILE9BQVUsQ0FBSyxPQUFBb3dDLEVBQUEsVUFBQTk2QyxNQUFBLDREQUFBODZDLEdBQXdGLElBQUEzNEMsRUFBQWtXLEVBQUFrdkQsY0FBQS9sRCxFQUFBbkosRUFBQWt2RCxjQUF3QyxPQUFBL2xELEVBQUEsVUFBQXhoQixNQUFBLGtFQUFBd2hCLEdBQThGLFFBQUE5akIsRUFBQUcsRUFBQSxFQUFjQSxFQUFBc0UsRUFBSXRFLElBQUEsQ0FBSyxHQUFBNk0sRUFBQTJOLEVBQUFpdkQsYUFBQTVwRSxFQUFBMmEsRUFBQWt2RCxjQUFBNzhELEdBQUEzTSxFQUFBLFVBQUFpQyxNQUFBLHNEQUFBMEssRUFBQSxjQUFBM00sRUFBQSxLQUF3SSxHQUFBTCxFQUFBSSxFQUFBLFVBQUFrQyxNQUFBLDBEQUFBdEMsR0FBb0YsS0FBSzhqQixFQUFBOWpCLEVBQUk4akIsSUFBQXhKLEVBQUFyVixLQUFBK0gsR0FBYzhXLEVBQUE5akIsRUFBSSxHQUFBQSxJQUFBSSxFQUFBLFVBQUFrQyxNQUFBLGdFQUFBdEMsR0FBNEYsT0FBQXNhLEVBQTZ3QnMxRCxDQUFBNTBELEVBQUFoYixFQUFBSSxFQUFBa2lFLFVBQUE5Z0UsRUFBQW1DLFFBQTJELElBQUFuRCxFQUFBNmEsRUFBQTVXLEVBQUEwdEQsUUFBQSxHQUFBdHdELEVBQUFpd0QsRUFBQTkyQyxFQUFBeGEsRUFBQWlFLEVBQUEwdEQsUUFBQSxHQUFBeDNDLEVBQUEyMkMsU0FBc0QsR0FBQWx4RCxFQUFBaXlELGNBQUF4d0QsRUFBQXd3RCxjQUFBanlELEVBQUFteUQsY0FBQTF3RCxFQUFBMHdELGNBQUEsSUFBQTF3RCxFQUFBMndELE1BQUEsQ0FBZ0YsSUFBQTE3QyxFQUFBdFcsRUFBQXFCLEVBQUEyd0QsTUFBQTN4RCxFQUFBOGpELEVBQUEzcEMsRUFBQWxFLEdBQTBCMVcsRUFBQW95RCxNQUFBM3hELEVBQUF5d0QsUUFBQWx4RCxFQUFBeXZFLFVBQUFuckIsRUFBQXRrRCxFQUFBb3lELFlBQTBDcHlELEVBQUFveUQsU0FBQXB5RCxFQUFBeXZFLFVBQUEsRUFBOEIsSUFBQS90RSxFQUFBNmlELEVBQUEzcEMsRUFBQUssRUFBQTVXLEVBQUFxckUsYUFBNEIxdkUsRUFBQTJ2RSxRQUFBanVFLEVBQUF3dkQsUUFBQTN0RCxPQUEyQixJQUFBMUMsRUFEbXF4QixTQUFBK1osRUFBQUssRUFBQWpiLEVBQUFDLEdBQXFCLElBQUEyTSxFQUFBc04sRUFBQUssRUFBQSxJQUFBczJDLEdBQUFRLE9BQUF6MkMsRUFBQUssR0FBNkJqYixHQUFBLEVBQUssSUFBQWc5QyxHQUFBLFdBQUFyOUMsRUFBQTRhLEVBQUFpdkQsYUFBbUMsT0FBQTdwRSxFQUFBLFFBQUEwRSxFQUFBLEVBQXFCQSxFQUFBckUsRUFBSXFFLEdBQUEsRUFBQXVJLEVBQUEyTixFQUFBbXZELFdBQUExc0IsRUFBQW40QyxLQUFBZ2xELEVBQUE1cEQsRUFBQTJNLFNBQW9DLE9BQUFqTixFQUFBLEtBQW1CcTlDLEVBQUF6NUMsUUFBQXZELEdBQVksQ0FBRTRNLEVBQUEyTixFQUFBbXZELFdBQUF4dkQsRUFBQUssRUFBQWl2RCxhQUFnQyxRQUFBOWxELEVBQUEsRUFBWUEsR0FBQXhKLEVBQUt3SixHQUFBLEVBQUFzNUIsRUFBQW40QyxLQUFBZ2xELEVBQUE1cEQsRUFBQTJNLE9BQUEsTUFBMEIsQ0FBSyxPQUFBak4sRUFBQSxVQUFBdUMsTUFBQSwwQkFBQXZDLEdBQXNELEtBQUtxOUMsRUFBQXo1QyxRQUFBdkQsR0FBWSxDQUFFNE0sRUFBQTJOLEVBQUFtdkQsV0FBQXh2RCxFQUFBSyxFQUFBa3ZELGNBQWlDLFFBQUE3cEUsRUFBQSxFQUFZQSxHQUFBc2EsRUFBS3RhLEdBQUEsRUFBQW85QyxFQUFBbjRDLEtBQUFnbEQsRUFBQTVwRCxFQUFBMk0sT0FBQSxHQUEyQixPQUFBb3dDLEVBQ2preUI0eUIsQ0FBQWgxRCxFQUFBSyxFQUFBNVcsRUFBQStpRCxRQUFBcG5ELEVBQUEydkUsUUFBQXAxRCxFQUFBMjJDLFNBQTRDLElBQUE3c0QsRUFBQWdzRCxTQUFBcndELEVBQUE4aUUsWUFBQSxJQUFBMWtCLEVBQUEydkIsR0FBQWx0RSxHQUFBLElBQUF3RCxFQUFBZ3NELFNBQUFyd0QsRUFBQThpRSxZQUFBLElBQUExa0IsRUFBQTR2QixHQUFBbnRFLEdBQUFiLEVBQUE4aUUsWUFEOGh5QixTQUFBbG9ELEVBQUFLLEVBQUFqYixHQUFtQixJQUFBQyxFQUFBMk0sS0FBVXNOLEVBQUEsSUFBQTIyQyxHQUFBUSxPQUFBejJDLEVBQUFLLEdBQUFWLEVBQUFMLEVBQUFzdkQsYUFBdUMsT0FBQWp2RCxFQUFBLFFBQUF5aUMsRUFBQTlpQyxFQUFBc3ZELGFBQUE3cEUsRUFBQSxFQUFzQ0EsRUFBQXE5QyxFQUFJcjlDLEdBQUEsRUFBQU0sRUFBQWlhLEVBQUFzdkQsYUFBQTU4RCxFQUFBM00sR0FBQU4sTUFBNkIsQ0FBSyxPQUFBNGEsRUFBQSxVQUFBclksTUFBQSwyQkFBQXFZLEdBQXVELElBQUFsVyxFQUFBNlYsRUFBQXN2RCxhQUFxQnZwRSxFQUFBLEVBQUksUUFBQXlqQixFQUFBLEVBQVlBLEVBQUFyZixFQUFJcWYsR0FBQSxVQUFBOWpCLEVBQUFzYSxFQUFBc3ZELGFBQUF6cEUsRUFBQW1hLEVBQUFzdkQsYUFBQXBvRSxFQUFBeEIsRUFBbUR3QixHQUFBeEIsRUFBQUcsRUFBT3FCLEdBQUEsRUFBQXdMLEVBQUF4TCxHQUFBbkIsS0FBQSxFQUFpQixXQUFBbStDLEVBQUF4eEMsRUFBQTVNLEdBQ3oxeUI2dkUsQ0FBQWoxRCxFQUFBSyxFQUFBNVcsRUFBQWdzRCxTQUFBeHZELEdBQUFiLEVBQUFxd0QsU0FBQXJ3RCxFQUFBcXdELFVBQUFyd0QsRUFBQThpRSxZQUFBOWlFLEVBQUE4dUQsT0FBQSxJQUFBMFEsR0FBQUMsU0FBQXovRCxHQUFzTCxRQUFBdStDLEVBQUEsRUFBWUEsRUFBQXYrQyxFQUFBMnZFLFFBQVlweEIsR0FBQSxHQUFNLElBQUE5RyxFQUFBLzFDLEVBQUF3dkQsUUFBQTNTLEdBQW1CditDLEVBQUE4dUQsT0FBQWpxRCxLQUFBMDVDLEVBQUFpaEIsR0FBQXlQLGVBQUFqdkUsRUFBQXUrQyxFQUFBK1QsR0FBQTdhLE1BRW14d0IrMUIsS0FGNXRxQixTQUFBNXlELEVBQUFLLEdBQWlCLFFBQUFqYixFQUFBQyxFQUFBLElBQUF1ekQsR0FBQWlCLE1BQUEsU0FBa0N2MEQsS0FBQSxTQUFBZ1EsS0FBQSxXQUE4QmhRLEtBQUEsWUFBQWdRLEtBQUEsV0FBaUNoUSxLQUFBLGVBQUFnUSxLQUFBLFdBQW9DaFEsS0FBQSxjQUFBZ1EsS0FBQSxXQUFtQ2hRLEtBQUEsa0JBQUFnUSxLQUFBLFdBQXVDaFEsS0FBQSxXQUFBZ1EsS0FBQSxXQUFnQ2hRLEtBQUEsbUJBQUFnUSxLQUFBLFdBQXdDaFEsS0FBQSxjQUFBZ1EsS0FBQSxZQUFpQ3RELEVBQUEsRUFBQXFPLEVBQUEwaUQsV0FBQXpqRCxHQUF1QnBSLFFBQUFtUyxFQUFBblMsUUFBQW0xRCxTQUFBaGpELEVBQUFnakQsU0FBQVIsV0FBQXhpRCxFQUFBd2lELFdBQUFxUyxPQUFBNzBELEVBQUE4MEQsV0FBQUMsU0FBQS8wRCxFQUFBKzBELFdBQUEsU0FBQUMsWUFBQXJqRSxFQUFBLElBQUFBLEVBQUEsS0FBQXc2QyxRQUFBLElBQUFpSixTQUFBLEVBQUFxZixZQUFBLElBQUEzZCxTQUFBLFFBQXNNL1UsS0FBQXI5QyxFQUFBLEVBQVVBLEVBQUFpYixFQUFBclgsT0FBVzVELEdBQUEsRUFBQUssRUFBQTRhLEVBQUFwYSxJQUFBYixHQUFBcTlDLEVBQUFuNEMsS0FBQTdFLEVBQUFFLE1BQStCLElBQUFtRSxLQUFTcEUsRUFBQWl3RSxPQUEvOUcsSUFBQTFjLEdBQUFDLE9BQUEsV0FBZ0N2ekQsS0FBQSxRQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFvQ1YsS0FBQSxRQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFvQ1YsS0FBQSxVQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFzQ1YsS0FBQSxRQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxLQUFpMUdYLEVBQUFrd0UsVUFBNXlHLFNBQUF2MUQsR0FBZSxJQUFBSyxFQUFBLElBQUF1NEMsR0FBQUMsT0FBQSxlQUFtQ3Z6RCxLQUFBLFFBQUFnUSxLQUFBLFFBQUF0UCxZQUFzQ3FhLEVBQUFxMUMsU0FBVyxRQUFBdHdELEVBQUEsRUFBWUEsRUFBQTRhLEVBQUFyWCxPQUFXdkQsR0FBQSxFQUFBaWIsRUFBQXExQyxNQUFBenJELE1BQW1CM0UsS0FBQSxRQUFBRixFQUFBa1EsS0FBQSxPQUFBdFAsTUFBQWdhLEVBQUE1YSxLQUF3QyxPQUFBaWIsRUFBdW5HbTFELEVBQUFuMUQsRUFBQWlqRCxpQkFBaUQsSUFBQXg2QyxFQUFBNnZDLEdBQUFyNUMsRUFBQTdWLEdBQWNwRSxFQUFBb3dFLGFBQUExYyxHQUFBandDLEdBQUF6akIsRUFBQXF3RSxnQkFBL2dGLElBQUE5YyxHQUFBQyxPQUFBLHNCQUEyQ3Z6RCxLQUFBLFFBQUFnUSxLQUFBLFFBQUF0UCxZQUFvK0VYLEVBQUFzd0UsU0FBOTdFLFNBQUEzMUQsRUFBQUssR0FBaUIsUUFBQWpiLEVBQUEsSUFBQXd6RCxHQUFBQyxPQUFBLGFBQXFDdnpELEtBQUEsU0FBQWdRLEtBQUEsUUFBQXRQLE1BQUEsS0FBbUNYLEVBQUEsRUFBT0EsRUFBQTJhLEVBQUFyWCxPQUFXdEQsR0FBQSxHQUFNLElBQUEyTSxFQUFBZ08sRUFBQTNhLEdBQUFpYSxFQUFBbTVDLEdBQUF6bUQsRUFBQXFPLEdBQXFCamIsRUFBQTR1RCxPQUFBL3BELE1BQWUzRSxLQUFBLFNBQUFELEVBQUFpUSxLQUFBLE1BQUF0UCxNQUFBc1osSUFBcUMsT0FBQWxhLEVBQW93RXd3RSxDQUFBeHpCLEVBQUEzNEMsR0FBQXBFLEVBQUF3d0UsaUJBQWovQixTQUFBNzFELEdBQWUsUUFBQUssRUFBQSxJQUFBdTRDLEdBQUFDLE9BQUEsc0JBQThDdnpELEtBQUEsY0FBQWdRLEtBQUEsUUFBQXRQLFlBQXlDWixFQUFBLEVBQU9BLEVBQUE0YSxFQUFBclgsT0FBV3ZELEdBQUEsR0FBTSxJQUFBQyxFQUFBMmEsRUFBQXBhLElBQUFSLEdBQUE0TSxFQUFBaW5ELEdBQUE1ekQsR0FBdUJnYixFQUFBeTBELFlBQUE3cUUsTUFBb0IzRSxLQUFBRCxFQUFBQyxLQUFBZ1EsS0FBQSxhQUFBdFAsTUFBQWdNLElBQXdDLE9BQUFxTyxFQUFneUJ5MUQsQ0FBQTkxRCxHQUFBM2EsRUFBQTB3RSxZQUF2eEIsU0FBQS8xRCxFQUFBSyxHQUFpQixJQUFBamIsRUFBQSxJQUFBd3pELEdBQUFDLE9BQUEsaUJBQXFDdnpELEtBQUEsT0FBQWdRLEtBQUEsT0FBQXRQLFlBQW9DLE9BQUFaLEVBQUEwekQsS0FBQUosR0FBQTNCLEdBQUEvMkMsRUFBQUssR0FBQWpiLEVBQTZyQjR3RSxJQUFBdnNFLEdBQUFwRSxFQUFBNHdFLFlBQXZ1RixTQUFBajJELEdBQWUsSUFBQUssRUFBQSxJQUFBdTRDLEdBQUFDLE9BQUEsaUJBQXFDdnpELEtBQUEsVUFBQWdRLEtBQUEsUUFBQXRQLFlBQXdDcWEsRUFBQTYxRCxXQUFhLFFBQUE5d0UsRUFBQSxFQUFZQSxFQUFBNGEsRUFBQXJYLE9BQVd2RCxHQUFBLEVBQUFpYixFQUFBNjFELFFBQUFqc0UsTUFBcUIzRSxLQUFBLFVBQUFGLEVBQUFrUSxLQUFBLFNBQUF0UCxNQUFBZ2EsRUFBQTVhLEtBQTRDLE9BQUFpYixFQUFzaUY4MUQsQ0FBQTFzRSxHQUFrSSxJQUFBekUsRUFBQUssRUFBQWl3RSxPQUFBcGIsU0FBQTcwRCxFQUFBa3dFLFVBQUFyYixTQUFBNzBELEVBQUFvd0UsYUFBQXZiLFNBQUE3MEQsRUFBQTR3RSxZQUFBL2IsU0FBQTcwRCxFQUFBcXdFLGdCQUFBeGIsU0FBdUgsT0FBQTU2QyxFQUFBa3RDLFFBQUF4bkQsRUFBQXNhLEVBQUFtMkMsU0FBQSxFQUFBbjJDLEVBQUF3MUQsWUFBQXgxRCxFQUFBa3RDLFFBQUFubkQsRUFBQXN3RSxTQUFBemIsU0FBQTU2QyxFQUFBNjNDLFFBQUEsR0FBQTczQyxFQUFBdzFELFlBQUF6dkUsRUFBQXd3RSxpQkFBQTNiLFNBQUFweEMsRUFBQTZ2QyxHQUFBcjVDLEVBQUE3VixHQUFBcEUsRUFBQW93RSxhQUFBMWMsR0FBQWp3QyxHQUFBempCLElBRWsxb0J5aEUsSUFBS0wsTUFGbnJvQixTQUFBem1ELEVBQUFLLEdBQWlCLElBQUFqYixLQUFRQyxFQUFBLElBQUE0d0QsR0FBQVEsT0FBQXoyQyxFQUFBSyxHQUFzQixPQUFBamIsRUFBQThJLFFBQUE3SSxFQUFBK3BFLGVBQUFocUUsRUFBQWd4RSxhQUFBbnFFLEtBQUFvUyxNQUFBLElBQUFoWixFQUFBZ2dFLGNBQUEsSUFBQWpnRSxFQUFBaXhFLG1CQUFBaHhFLEVBQUEycEUsYUFBQTVwRSxFQUFBa3hFLFlBQUFqeEUsRUFBQTJwRSxhQUFBN2EsR0FBQWdHLFNBQUEsYUFBQS8wRCxFQUFBa3hFLFlBQUEsdUNBQUFseEUsRUFBQW14RSxNQUFBbHhFLEVBQUF3MkQsY0FBQXoyRCxFQUFBMjlELFdBQUExOUQsRUFBQXcyRCxjQUFBejJELEVBQUFveEUsUUFBQW54RSxFQUFBOHBFLG9CQUFBL3BFLEVBQUFxeEUsU0FBQXB4RSxFQUFBOHBFLG9CQUFBL3BFLEVBQUFvdUUsS0FBQW51RSxFQUFBZzJELGFBQUFqMkQsRUFBQXF1RSxLQUFBcHVFLEVBQUFnMkQsYUFBQWoyRCxFQUFBc3VFLEtBQUFydUUsRUFBQWcyRCxhQUFBajJELEVBQUF1dUUsS0FBQXR1RSxFQUFBZzJELGFBQUFqMkQsRUFBQXN4RSxTQUFBcnhFLEVBQUF3MkQsY0FBQXoyRCxFQUFBdXhFLGNBQUF0eEUsRUFBQXcyRCxjQUFBejJELEVBQUF3eEUsa0JBQUF2eEUsRUFBQWcyRCxhQUFBajJELEVBQUEyaEUsaUJBQUExaEUsRUFBQWcyRCxhQUFBajJELEVBQUF5eEUsZ0JBQUF4eEUsRUFBQWcyRCxhQUFBajJELEdBRW9vb0J3dEUsS0FGaGpuQixTQUFBNXlELEdBQWUsSUFBQUssRUFBQXBVLEtBQUFvUyxPQUFBLElBQUErdEMsTUFBQTBxQixVQUFBLGdCQUFBMXhFLEVBQUFpYixFQUEwRCxPQUFBTCxFQUFBZ2tELG1CQUFBNStELEVBQUE0YSxFQUFBZ2tELGlCQUFBLGdCQUFBcEwsR0FBQWlCLE1BQUEsU0FBbUZ2MEQsS0FBQSxVQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxRQUEwQ1YsS0FBQSxlQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxRQUErQ1YsS0FBQSxxQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBaURWLEtBQUEsY0FBQWdRLEtBQUEsUUFBQXRQLE1BQUEsYUFBbURWLEtBQUEsUUFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBcUNWLEtBQUEsYUFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsTUFBNENWLEtBQUEsVUFBQWdRLEtBQUEsZUFBQXRQLE1BQUFaLElBQTZDRSxLQUFBLFdBQUFnUSxLQUFBLGVBQUF0UCxNQUFBcWEsSUFBOEMvYSxLQUFBLE9BQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQW1DVixLQUFBLE9BQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQW1DVixLQUFBLE9BQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQW1DVixLQUFBLE9BQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQW1DVixLQUFBLFdBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLElBQXdDVixLQUFBLGdCQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUE2Q1YsS0FBQSxvQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBZ0RWLEtBQUEsbUJBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQStDVixLQUFBLGtCQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUE0Q2dhLEtBRWd0bEJpbkQsSUFBS1IsTUFGaHRsQixTQUFBem1ELEVBQUFLLEdBQWlCLElBQUFqYixLQUFRQyxFQUFBLElBQUE0d0QsR0FBQVEsT0FBQXoyQyxFQUFBSyxHQUFzQixPQUFBamIsRUFBQThJLFFBQUE3SSxFQUFBK3BFLGVBQUFocUUsRUFBQTQ5RCxTQUFBMzlELEVBQUFnMkQsYUFBQWoyRCxFQUFBNjlELFVBQUE1OUQsRUFBQWcyRCxhQUFBajJELEVBQUEyeEUsUUFBQTF4RSxFQUFBZzJELGFBQUFqMkQsRUFBQTR4RSxnQkFBQTN4RSxFQUFBdzJELGNBQUF6MkQsRUFBQTZ4RSxtQkFBQTV4RSxFQUFBZzJELGFBQUFqMkQsRUFBQTh4RSxvQkFBQTd4RSxFQUFBZzJELGFBQUFqMkQsRUFBQSt4RSxXQUFBOXhFLEVBQUFnMkQsYUFBQWoyRCxFQUFBZ3lFLGVBQUEveEUsRUFBQWcyRCxhQUFBajJELEVBQUFpeUUsY0FBQWh5RSxFQUFBZzJELGFBQUFqMkQsRUFBQWt5RSxZQUFBanlFLEVBQUFnMkQsYUFBQWgyRCxFQUFBZ3dELGdCQUFBLEVBQUFqd0QsRUFBQW15RSxpQkFBQWx5RSxFQUFBZzJELGFBQUFqMkQsRUFBQThoRSxpQkFBQTdoRSxFQUFBdzJELGNBQUF6MkQsR0FFaXFsQnd0RSxLQUZudmtCLFNBQUE1eUQsR0FBZSxXQUFBNDRDLEdBQUFpQixNQUFBLFNBQTZCdjBELEtBQUEsVUFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsUUFBMENWLEtBQUEsV0FBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBdUNWLEtBQUEsWUFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBd0NWLEtBQUEsVUFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBc0NWLEtBQUEsa0JBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLElBQStDVixLQUFBLHFCQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFpRFYsS0FBQSxzQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBa0RWLEtBQUEsYUFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBeUNWLEtBQUEsaUJBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQTZDVixLQUFBLGdCQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUE0Q1YsS0FBQSxjQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUEwQ1YsS0FBQSxZQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUF3Q1YsS0FBQSxZQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUF3Q1YsS0FBQSxZQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUF3Q1YsS0FBQSxZQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUF3Q1YsS0FBQSxtQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBK0NWLEtBQUEsbUJBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLElBQThDZ2EsS0FFOC9pQituRCxJQUFLdEIsTUFGOS9pQixTQUFBem1ELEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBdUIsUUFBQXNOLEVBQUFLLEVBQUF5aUMsRUFBQSxJQUFBNlQsR0FBQVEsT0FBQXoyQyxFQUFBSyxHQUFBdGIsRUFBQSxFQUFxQ0EsRUFBQU0sRUFBSU4sR0FBQSxHQUFNQSxFQUFBSyxJQUFBa2EsRUFBQThpQyxFQUFBeVosY0FBQWw4QyxFQUFBeWlDLEVBQUFpWixjQUEwQyxJQUFBNXhELEVBQUF1SSxFQUFBcE0sSUFBQWIsR0FBZTBFLEVBQUErdUQsYUFBQWw1QyxFQUFBN1YsRUFBQXFxRSxnQkFBQW4wRCxJQUUrM2lCaXpELEtBRnoxaUIsU0FBQTV5RCxHQUFlLFFBQUFLLEVBQUEsSUFBQXU0QyxHQUFBaUIsTUFBQSxXQUFBejBELEVBQUEsRUFBc0NBLEVBQUE0YSxFQUFBclgsT0FBV3ZELEdBQUEsR0FBTSxJQUFBQyxFQUFBMmEsRUFBQXBhLElBQUFSLEdBQUE0TSxFQUFBM00sRUFBQW16RCxjQUFBLEVBQUFsNUMsRUFBQWphLEVBQUF5dUUsaUJBQUEsRUFBMER6ekQsRUFBQTJ6QyxPQUFBL3BELE1BQWUzRSxLQUFBLGdCQUFBRixFQUFBa1EsS0FBQSxTQUFBdFAsTUFBQWdNLElBQTZDcU8sRUFBQTJ6QyxPQUFBL3BELE1BQWlCM0UsS0FBQSxtQkFBQUYsRUFBQWtRLEtBQUEsUUFBQXRQLE1BQUFzWixJQUFpRCxPQUFBZSxJQUU0bWlCOG1ELElBQUt5TCxLQUZ4bWlCLFNBQUE1eUQsR0FBZSxRQUFBSyxFQUFBLElBQUF1NEMsR0FBQWlCLE1BQUEsU0FBZ0N2MEQsS0FBQSxVQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFzQ1YsS0FBQSxRQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFvQ1YsS0FBQSxVQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQWdhLEVBQUFyWCxVQUEyQ3ZELEVBQUEsR0FBQUMsRUFBQSxLQUFBMmEsRUFBQXJYLE9BQUFxSixFQUFBLEVBQTRCQSxFQUFBZ08sRUFBQXJYLFNBQVdxSixFQUFBLENBQUssSUFBQXNOLEVBQUFsYSxFQUFBb0QsUUFBQXdYLEVBQUFoTyxJQUFzQnNOLEVBQUEsSUFBQUEsRUFBQWxhLEVBQUF1RCxPQUFBdkQsR0FBQTRhLEVBQUFoTyxJQUFBcU8sRUFBQTJ6QyxPQUFBL3BELE1BQXlDM0UsS0FBQSxVQUFBME0sRUFBQXNELEtBQUEsU0FBQXRQLE1BQUFYLEVBQUFpYSxJQUF5Q2UsRUFBQTJ6QyxPQUFBL3BELE1BQWlCM0UsS0FBQSxVQUFBME0sRUFBQXNELEtBQUEsU0FBQXRQLE1BQUFnYSxFQUFBaE8sR0FBQXJKLFNBQW1ELE9BQUEwWCxFQUFBMnpDLE9BQUEvcEQsTUFBc0IzRSxLQUFBLGFBQUFnUSxLQUFBLFlBQUF0UCxNQUFBWixJQUEyQ2liLEdBRTJxaEJvbUQsTUFGdnFoQixTQUFBem1ELEVBQUFLLEdBQWlCLElBQUFqYixFQUFBLElBQUE2d0QsR0FBQVEsT0FBQXoyQyxFQUFBSyxHQUFBaGIsRUFBQUQsRUFBQTRwRSxhQUEwQzdhLEdBQUFnRyxTQUFBLElBQUE5MEQsRUFBQSxtQ0FBQUQsRUFBQWtnRSxLQUFBLFdBQXVFLFFBQUF0ekQsRUFBQTVNLEVBQUE0cEUsYUFBQTF2RCxLQUFBSyxFQUFBLEVBQWtDQSxFQUFBM04sRUFBSTJOLElBQUEsQ0FBSyxRQUFBeWlDLEVBQUEsR0FBQXI5QyxFQUFBc2IsRUFBQWpiLEVBQUF5MkQsY0FBQXB5RCxFQUFBckUsRUFBQXkyRCxjQUFBL3lDLEVBQUEvakIsRUFBdUQrakIsRUFBQS9qQixFQUFBMEUsSUFBTXFmLEVBQUFzNUIsR0FBQWdDLE9BQUFDLGFBQUFya0MsRUFBQTJ1RCxRQUFBN2xELElBQXlDeEosRUFBQXJWLEtBQUFtNEMsR0FBVSxPQUFBOWlDLElBRTI1Z0IrbkQsSUFBS1osTUFGdjVnQixTQUFBem1ELEVBQUFLLEdBQWlCLElBQUFqYixLQUFRQyxFQUFBLElBQUE0d0QsR0FBQVEsT0FBQXoyQyxFQUFBSyxHQUFzQixPQUFBamIsRUFBQThJLFFBQUE3SSxFQUFBK3BFLGVBQUFocUUsRUFBQWtpRSxVQUFBamlFLEVBQUF3MkQsY0FBQSxJQUFBejJELEVBQUE4SSxVQUFBOUksRUFBQW95RSxVQUFBbnlFLEVBQUF3MkQsY0FBQXoyRCxFQUFBcXlFLFlBQUFweUUsRUFBQXcyRCxjQUFBejJELEVBQUFzeUUsbUJBQUFyeUUsRUFBQXcyRCxjQUFBejJELEVBQUF1eUUscUJBQUF0eUUsRUFBQXcyRCxjQUFBejJELEVBQUF3eUUsU0FBQXZ5RSxFQUFBdzJELGNBQUF6MkQsRUFBQXl5RSxrQkFBQXh5RSxFQUFBdzJELGNBQUF6MkQsRUFBQTB5RSxXQUFBenlFLEVBQUF3MkQsY0FBQXoyRCxFQUFBMnlFLGdCQUFBMXlFLEVBQUF3MkQsY0FBQXoyRCxFQUFBNHlFLG1CQUFBM3lFLEVBQUF3MkQsY0FBQXoyRCxFQUFBNnlFLGlCQUFBNXlFLEVBQUF3MkQsY0FBQXoyRCxFQUFBOHlFLHNCQUFBN3lFLEVBQUF3MkQsY0FBQXoyRCxFQUFBK3lFLHFCQUFBOXlFLEVBQUF3MkQsY0FBQXoyRCxFQUFBZ3pFLGtCQUFBL3lFLEVBQUF3MkQsZUFBQXoyRCxHQUV3MmdCd3RFLEtBRngxZixTQUFBNXlELEdBQWUsV0FBQTQ0QyxHQUFBaUIsTUFBQSxTQUE2QnYwRCxLQUFBLFVBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLFFBQTBDVixLQUFBLFlBQUFnUSxLQUFBLFNBQUF0UCxNQUFBZ2EsT0FFbXhmcTRELElBQUEsOFVBQUF2b0MsSUFBdVZ3b0MsRUFBQSxLQUFBaDJCLEVBQUEsS0FBQUssRUFBQSxLQUFBQyxFQUFBLEtBQUFrRyxFQUFBLEtBQUErQyxFQUFBLEtBQUFhLEVBQUEsS0FBQTJCLEVBQUEsS0FBQUcsRUFBQSxLQUFBQyxFQUFBLEtBQUEwRCxHQUFBLEtBQUFvbUIsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsVUFBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsUUFBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsVUFBQUMsR0FBQSxVQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLFFBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLFVBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsYUFBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsTUFBdytCQyxJQUFLN0csRUFBQSxFQUFBaDJCLEVBQUEsRUFBQUssRUFBQSxFQUFBQyxFQUFBLEVBQUFrRyxFQUFBLEVBQUErQyxFQUFBLEVBQUFhLEVBQUEsRUFBQTJCLEVBQUEsRUFBQUcsRUFBQSxFQUFBQyxFQUFBLEVBQUEwRCxHQUFBLEVBQUFvbUIsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUM3cCtCQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxHQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxHQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsR0FBa2lCNXZDLElBQUs4dkMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxNQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsTUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFVBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsVUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxTQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsTUFBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxVQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLFNBQUFDLEtBQUEsTUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxNQUFBQyxLQUFBLFNBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLGFBQUFDLEtBQUEsS0FBQUMsS0FBQSxhQUFBQyxLQUFBLFVBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxL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QSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxRQUF1QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLFFBQUE3N0UsSUFBQSxVQUE0QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLE1BQUE3N0UsSUFB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LFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsY0FBc3ZHLElBQUFzdUYsR0FBQTFwRixNQUFBK2IsTUFBQSxTQUFBbEgsR0FBK0IsT0FBQUEsRUFBQXRZLE1BQUEsNERBQTJFaTdELEdBQUFoOEQsVUFBQTBxRixRQUFBLFNBQUFyeEUsR0FBaUMsY0FBQTNZLEtBQUFvdUQsU0FBQTZFLGlCQUFBdDZDLElBQWdEMmlELEdBQUFoOEQsVUFBQTJ6RCxpQkFBQSxTQUFBdDZDLEdBQTJDLE9BQUEzWSxLQUFBb3VELFNBQUE2RSxpQkFBQXQ2QyxJQUF5QzJpRCxHQUFBaDhELFVBQUFtdUYsWUFBQSxTQUFBOTBFLEdBQXNDLElBQUFLLEVBQUFoWixLQUFBaXpELGlCQUFBdDZDLEdBQUE1YSxFQUFBaUMsS0FBQTZzRCxPQUFBdHVELElBQUF5YSxHQUFvRCxPQUFBamIsTUFBQWlDLEtBQUE2c0QsT0FBQXR1RCxJQUFBLElBQUFSLEdBQW1DdTlELEdBQUFoOEQsVUFBQW91RixlQUFBLFNBQUEvMEUsRUFBQUssR0FBc0RBLEtBQUFoWixLQUFBMnRGLHFCQUErQixRQUFBM3ZGLEVBQUF3dkYsR0FBQTcwRSxHQUFBaE8sS0FBQXNOLEVBQUEsRUFBeUJBLEVBQUFqYSxFQUFBc0QsT0FBVzJXLEdBQUEsR0FBTSxJQUFBSyxFQUFBdGEsRUFBQWlhLEdBQVd0TixFQUFBL0gsS0FBL0Y1QyxLQUErRml6RCxpQkFBQTM2QyxJQUE4QixJQUFBeWlDLEVBQUFwd0MsRUFBQXJKLE9BQWUsR0FBQTBYLEVBQUF3d0UsU0FBQSxDQUFlLElBQUE5ckYsRUFBQXNiLEVBQUFnMEMsUUFBQWh0RCxLQUFBeTlELGFBQUFrdEIsdUJBQUF2b0YsS0FBOEQ0VyxFQUFBd3dFLFNBQUFvRSxPQUFBeHJGLElBQUFna0IsT0FBQXBtQixLQUFBeTlELGFBQUE0dUIsV0FBQSxPQUFBM3VGLEVBQUFzYixFQUFBb3lELFlBQUFweUQsRUFBQXd3RSxTQUFBcUUsT0FBQXpyRixJQUFBZ2tCLE9BQUFwbUIsS0FBQXk5RCxhQUFBNHVCLFdBQUEsT0FBQTN1RixFQUFBc2IsRUFBQW95RCxZQUFrSyxRQUFBM3BELEVBQUEsRUFBWUEsRUFBQXM1QixFQUFJdDVCLEdBQUEsVUFBQTlqQixFQUFBLEVBQWlCQSxFQUFBeUUsRUFBQWQsT0FBVzNELElBQUEsQ0FBSyxRQUFBRyxFQUFBc0UsRUFBQXpFLEdBQUF3QixFQUFBckIsRUFBQWd1RixJQUFBM3RGLEVBQUFnQixFQUFBbUMsT0FBQTlCLEVBQUEsRUFBc0NBLEVBQUFyQixHQUFBZ0IsRUFBQUssS0FBQW1MLEVBQUE4VyxFQUFBamlCLElBQW1CQSxJQUFLQSxJQUFBckIsSUFBQXdNLEVBQUFwSixPQUFBa2dCLEVBQUF0akIsRUFBQUwsRUFBQWl1RixJQUFBaHhDLElBQUE1OEMsRUFBQSxJQUFxQyxRQUFBc1csRUFBQSxJQUFBM1EsTUFBQWkzQyxHQUFBdjhDLEVBQUF3QixLQUFBNnNELE9BQUF0dUQsSUFBQSxHQUFBa0IsRUFBQSxFQUFnREEsRUFBQXM3QyxFQUFJdDdDLEdBQUEsRUFBQWdWLEVBQUFoVixHQUFua0JPLEtBQW1rQjZzRCxPQUFBdHVELElBQUFvTSxFQUFBbEwsS0FBQWpCLEVBQWdDLE9BQUFpVyxHQUFTNm1ELEdBQUFoOEQsVUFBQTBzRSxpQkFBQSxTQUFBcnpELEdBQTJDLE9BQUEzWSxLQUFBcWdFLFdBQUEyTCxpQkFBQXJ6RCxJQUEyQzJpRCxHQUFBaDhELFVBQUF3dUYsWUFBQSxTQUFBbjFFLEdBQXNDLElBQUFLLEVBQUFoWixLQUFBZ3NFLGlCQUFBcnpELEdBQUE1YSxFQUFBaUMsS0FBQTZzRCxPQUFBdHVELElBQUF5YSxHQUFvRCxPQUFBamIsTUFBQWlDLEtBQUE2c0QsT0FBQXR1RCxJQUFBLElBQUFSLEdBQW1DdTlELEdBQUFoOEQsVUFBQXdoRSxpQkFBQSxTQUFBbm9ELEdBQTJDLE9BQUEzWSxLQUFBcWdFLFdBQUFTLGlCQUFBOWdFLEtBQUFxZ0UsV0FBQVMsaUJBQUFub0QsR0FBQSxJQUErRTJpRCxHQUFBaDhELFVBQUErckYsZ0JBQUEsU0FBQTF5RSxFQUFBSyxHQUE0Q0wsSUFBQXJRLE9BQUFxUSxFQUFBSyxJQUFBMVEsT0FBQTBRLEVBQTBCLElBQUFqYixFQUFBaUMsS0FBQTA0QyxTQUFBeXlDLHFCQUF5QyxPQUFBcHRGLEVBQUFpQyxLQUFBMDRDLFNBQUEyeUMsZ0JBQUF0dEYsRUFBQTRhLEVBQUFLLEdBQUFoWixLQUFBK2dFLGFBQUFwb0QsRUFBQSxJQUFBSyxJQUFBLEdBQTRFc2lELEdBQUFoOEQsVUFBQXF1RixzQkFBb0NJLFNBQUEsRUFBQXZFLFVBQXFCb0UsTUFBQSxFQUFBQyxNQUFBLElBQWlCdnlCLEdBQUFoOEQsVUFBQTB1RixhQUFBLFNBQUFyMUUsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBc04sR0FBaUQsSUFBQUssRUFBQXRZLEtBQVdnWixPQUFBLElBQUFBLElBQUEsRUFBQWpiLE9BQUEsSUFBQUEsSUFBQSxFQUFBQyxPQUFBLElBQUFBLElBQUEsR0FBQTJNLEtBQUEzSyxLQUFBMnRGLHFCQUFtRixJQUFBNXlDLEVBQUFyOUMsRUFBQSxFQUFBc0MsS0FBQTA3RCxXQUFBMTlELEVBQUFvRSxFQUFBcEMsS0FBQTB0RixlQUFBLzBFLEVBQUFoTyxHQUF1RCxHQUFBQSxFQUFBb2pGLFFBQUEsQ0FBYyxJQUFBdHNFLEVBQUE5VyxFQUFBcWlELFFBQUFodEQsS0FBQTA0QyxTQUFBaXlDLHVCQUFxRDV2QyxFQUFBLzZDLEtBQUEwNEMsU0FBQTB5QyxpQkFBQTNwRSxFQUFBOVcsRUFBQXlnRSxVQUErQyxRQUFBenRFLEVBQUEsRUFBWUEsRUFBQXlFLEVBQUFkLE9BQVczRCxHQUFBLEdBQU0sSUFBQUcsRUFBQXNFLEVBQUF6RSxHQUFXc2EsRUFBQXBhLEtBQUF5YSxFQUFBeGEsRUFBQWtiLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBQTdNLEVBQUFxekQsZUFBQW40QyxHQUFBbGIsRUFBQXF6RCxhQUFBenpELEdBQUFpTixFQUFBb2pGLFNBQUFwd0YsRUFBQXlFLEVBQUFkLE9BQUEsSUFBc0YwWCxJQUFBK2hDLEVBQUF6aUMsRUFBQW9nQyxTQUFBMnlDLGdCQUFBdHdDLEVBQUFqOUMsRUFBQXdLLE1BQUFsRyxFQUFBekUsRUFBQSxHQUFBMkssT0FBQWdRLEVBQUEreUUsZ0JBQUF2dEYsRUFBQXNFLEVBQUF6RSxFQUFBLEtBQUFELEdBQXdGaU4sRUFBQXNqRixjQUFBajFFLEdBQUFyTyxFQUFBc2pGLGNBQUFqd0YsRUFBQTJNLEVBQUF1akYsV0FBQWwxRSxHQUFBck8sRUFBQXVqRixTQUFBLElBQUFsd0YsR0FBdUUsT0FBQWdiLEdBQVNzaUQsR0FBQWg4RCxVQUFBdTJELFFBQUEsU0FBQWw5QyxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEdBQTBDLElBQUFzTixFQUFBLElBQUF6WixFQUFZLE9BQUF3QixLQUFBZ3VGLGFBQUFyMUUsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBLFNBQUFnTyxFQUFBSyxFQUFBamIsRUFBQUMsR0FBcUQsSUFBQXNhLEVBQUFLLEVBQUFrOUMsUUFBQTc4QyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUEzSyxNQUE4QmlZLEVBQUF2UyxPQUFBNFMsS0FBWUwsR0FBSXFqRCxHQUFBaDhELFVBQUE2dUYsU0FBQSxTQUFBeDFFLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBMkMsSUFBQXNOLEtBQVMsT0FBQWpZLEtBQUFndUYsYUFBQXIxRSxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUEsU0FBQWdPLEVBQUFLLEVBQUFqYixFQUFBQyxHQUFxRCxJQUFBc2EsRUFBQUssRUFBQWs5QyxRQUFBNzhDLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQTNLLE1BQThCaVksRUFBQXJWLEtBQUEwVixLQUFVTCxHQUFJcWpELEdBQUFoOEQsVUFBQTh1RixnQkFBQSxTQUFBejFFLEVBQUFLLEVBQUFqYixHQUE4QyxPQUFBaUMsS0FBQWd1RixhQUFBcjFFLEVBQUEsSUFBQUssRUFBQWpiLEVBQUEsZUFBaUR1OUQsR0FBQWg4RCxVQUFBaWpFLEtBQUEsU0FBQTVwRCxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixHQUF5Q2pZLEtBQUE2MUQsUUFBQTc4QyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixHQUFBc3FELEtBQUE1cEQsSUFBZ0MyaUQsR0FBQWg4RCxVQUFBcXRFLFdBQUEsU0FBQWgwRCxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixHQUErQ2pZLEtBQUFndUYsYUFBQWgxRSxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixFQUFBLFNBQUFlLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBOENxTyxFQUFBMnpELFdBQUFoMEQsRUFBQTVhLEVBQUFDLEVBQUEyTSxNQUF3QjJ3RCxHQUFBaDhELFVBQUF1dEUsWUFBQSxTQUFBbDBELEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLEdBQWdEalksS0FBQWd1RixhQUFBaDFFLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLEVBQUEsU0FBQWUsRUFBQWpiLEVBQUFDLEVBQUEyTSxHQUE4Q3FPLEVBQUE2ekQsWUFBQWwwRCxFQUFBNWEsRUFBQUMsRUFBQTJNLE1BQXlCMndELEdBQUFoOEQsVUFBQTJxRixlQUFBLFNBQUF0eEUsR0FBeUMsSUFBQUssRUFBQWhaLEtBQUFxdUQsTUFBQTExQyxHQUFvQixHQUFBSyxFQUFBLE9BQUFBLEVBQUE4aUQsSUFBaUJSLEdBQUFoOEQsVUFBQSt1RixTQUFBLFdBQW1ELFNBQUFyMUUsS0FBYyxJQUFBaGIsRUFBQUQsRUFBQWtzRixlQUFBanhFLEdBQTBCaGIsS0FBQTBYLE9BQUFwVSxPQUFzRCxJQUFBdkQsRUFBQWlDLEtBQVdnWixFQUFBLGNBQUFBLEVBQUEsY0FBQUEsRUFBQSxnQkFBQUEsRUFBQSxhQUFBQSxFQUFBLFdBQUFoWixLQUFBMDdELFlBQThISixHQUFBaDhELFVBQUFndkYsU0FBQSxXQUFrQyxPQUFBM0UsR0FBQUMsWUFBQTVwRixPQUE0QnM3RCxHQUFBaDhELFVBQUFpdkYsU0FBQSxXQUFrQyxPQUFBaCtFLFFBQUFDLEtBQUEsZ0VBQUF4USxLQUFBa2hELGlCQUF5R29hLEdBQUFoOEQsVUFBQTRoRCxjQUFBLFdBQXVDLFFBQUF2b0MsRUFBQTNZLEtBQUFzdUYsV0FBQXQxRSxFQUFBTCxFQUFBbzZDLFNBQUFoMUQsRUFBQSxJQUFBNjlDLFlBQUE1aUMsRUFBQTFYLFFBQUF0RCxFQUFBLElBQUFrbEIsV0FBQW5sQixHQUFBNE0sRUFBQSxFQUEyRkEsRUFBQXFPLEVBQUExWCxPQUFXcUosSUFBQTNNLEVBQUEyTSxHQUFBcU8sRUFBQXJPLEdBQWMsT0FBQTVNLEdBQVN1OUQsR0FBQWg4RCxVQUFBd21ELFNBQUEsU0FBQW50QyxHQUFtQyxJQUFBNWEsRUFBQWlDLEtBQUFpcUYsZUFBQSxjQUFBanNGLEVBQUFnQyxLQUFBaXFGLGVBQUEsaUJBQStFdHhFLEtBQUE1YSxFQUFBbzRCLFFBQUEsY0FBQW40QixFQUFBLE9BQXNDLElBQUEyTSxFQUFBM0ssS0FBQWtoRCxnQkFBMkIsR0FINW1FLG9CQUFBOTZDLE9BRzRtRUEsT0FBQW9vRixrQkFBQXBvRixPQUFBb29GLG1CQUFBcG9GLE9BQUFxb0Ysd0JBQUFyb0YsT0FBQW9vRixrQkFBQXBvRixPQUFBc29GLFVBQUEvakYsRUFBQWt4QyxXQUFBLFNBQUE3aUMsR0FBNkpBLEVBQUEyMUUsS0FBQUMsUUFBQWoyRSxHQUFrQjNaLFFBQUEsR0FBVSxTQUFBMlosR0FBYUEsRUFBQWsyRSxhQUFBLFNBQUE3MUUsR0FBMkIsSUFBQWpiLEVBQUEsSUFBQTR4RCxTQUFBaGxELEdBQUEzTSxFQUFBLElBQUFpUixNQUFBbFIsSUFBc0NrUSxLQUFBLGtCQUF1QitLLEVBQUF5aUMsTUFBQXo5QyxHQUFBZ2IsRUFBQTBkLGlCQUFBLHNCQUFvRDJ2QixTQUFBUixLQUFBbHRDLEVBQUFtMkUsVUFBd0IsUUFBUyxTQUFBbjJFLEdBQWEsVUFBQTFZLE1BQUEwWSxFQUFBMWEsS0FBQSxLQUFBMGEsRUFBQTRsRCxlQUF5QyxDQUFLLElBQUF0bUQsRUFBQWUsRUFBQSxNQUFBVixFQUFBdTdDLEdBQUFscEQsR0FBc0JzTixFQUFBODJFLGNBQUFwMkUsRUFBQUwsS0FBc0JnakQsR0FBQWg4RCxVQUFBKzlELG1CQUFpQzJ4QixPQUFBLEVBQUFDLFdBQUEsRUFBQUMsU0FBQSxFQUFBQyxTQUFBLEVBQUFDLFVBQUEsR0FBQUMsS0FBQSxHQUFBL3hCLFFBQUEsR0FBQWd5QixrQkFBQSxJQUFBQyxJQUFBLElBQUFDLFFBQUEsS0FBc0hsMEIsR0FBQWg4RCxVQUFBNjlELGdCQUE4QnN5QixnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxVQUFBLEVBQUFDLGVBQUEsRUFBQTV5QixPQUFBLEVBQUE2eUIsY0FBQSxFQUFBQyxTQUFBLEVBQUFDLGVBQUEsRUFBQUMsZUFBQSxHQUF1STEwQixHQUFBaDhELFVBQUF5OUQsaUJBQStCa3pCLEtBQUEsSUFBQUMsWUFBQSxJQUFBQyxNQUFBLElBQUFDLE9BQUEsSUFBQXB6QixPQUFBLElBQUFxekIsVUFBQSxJQUFBaEIsS0FBQSxJQUFBaUIsV0FBQSxJQUFBQyxNQUFBLEtBQTBHLElBQUFodkIsSUFBUWdLLEtBRnB1WSxTQUFBNXlELEVBQUFLLEdBQWlCLElBQUFqYixFQUFBLElBQUF3ekQsR0FBQWlCLE1BQUEsU0FBNEJ2MEQsS0FBQSxVQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxRQUEwQ1YsS0FBQSxlQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUE0Q1YsS0FBQSxpQkFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBOENWLEtBQUEsWUFBQWdRLEtBQUEsU0FBQXRQLE1BQUFnYSxFQUFBNjNFLEtBQUFsdkYsU0FBcURyRCxLQUFBLFdBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLEtBQXlDVixLQUFBLGdCQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQWdhLEVBQUE4M0UsVUFBQW52RixTQUE4RHJELEtBQUEsZUFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBQWdhLEVBQUE2M0UsS0FBQWx2RixVQUE2RHZELEVBQUEyeUYsYUFBQTN5RixFQUFBODBELFNBQTBCLFFBQUE3MEQsRUFBQSxFQUFZQSxFQUFBMmEsRUFBQTYzRSxLQUFBbHZGLE9BQWdCdEQsSUFBQUQsRUFBQTR1RCxPQUFBNXVELEVBQUE0dUQsT0FBQXZtQyxPQUFBeTNDLEdBQUE3L0QsRUFBQTJhLEVBQUE2M0UsS0FBQXh5RixHQUFBZ2IsSUFBZ0QsUUFBQXJPLEVBQUEsRUFBWUEsRUFBQWdPLEVBQUE4M0UsVUFBQW52RixPQUFxQnFKLElBQUE1TSxFQUFBNHVELE9BQUE1dUQsRUFBQTR1RCxPQUFBdm1DLE9BQUE4M0MsR0FBQXZ6RCxFQUFBZ08sRUFBQTgzRSxVQUFBOWxGLEdBQUFnTyxFQUFBNjNFLEtBQUF4M0UsSUFBNEQsT0FBQWpiLEdBRXVwWHFoRSxNQUY5b1gsU0FBQXptRCxFQUFBSyxFQUFBamIsR0FBbUIsSUFBQUMsRUFBQSxJQUFBNHdELEdBQUFRLE9BQUF6MkMsRUFBQUssR0FBQXJPLEVBQUEzTSxFQUFBMnBFLGFBQTBDN2EsR0FBQWdHLFNBQUEsUUFBQW5vRCxFQUFBLG1DQUF5RCxJQUFBc04sRUFBQWphLEVBQUEwcEUsZ0JBQXdCMXBFLEVBQUFpZ0UsS0FBQSxZQUFtQixRQUFBM2xELEVBQUF0YSxFQUFBdzJELGNBQUF6WixFQUFBLzhDLEVBQUF3MkQsY0FBQTkyRCxFQUFBTSxFQUFBdzJELGNBQUFweUQsRUFBQXBFLEVBQUF3MkQsY0FBQS95QyxLQUFBOWpCLEVBQUEsRUFBeUZBLEVBQUEyYSxFQUFJM2EsSUFBQThqQixFQUFBN2UsS0FBQWs3RCxHQUFBbmxELEVBQUFLLEVBQUFmLEVBQUF0YSxFQUFBbzlDLEVBQUFoOUMsSUFBNEIsUUFBQUQsS0FBQXFCLEVBQUE2WixFQUFBZixFQUFBSyxFQUFBeWlDLEVBQUE1OEMsRUFBQSxFQUEyQkEsRUFBQVQsRUFBSVMsSUFBQUwsRUFBQThFLEtBQUF3N0QsR0FBQXpsRCxFQUFBeFosRUFBQWhCLEVBQUFpRSxFQUFBcWYsRUFBQTFqQixJQUE0QixPQUFPeXlGLEtBQUEvdUUsRUFBQWd2RSxVQUFBM3lGLEtBRW0wVzZ5RixHQUFBLElBQUE3c0YsTUFBQSxJQUFrQjZzRixHQUFBLGNBQWlCLElBQUFoNEUsRUFBQTNZLEtBQUFvZixPQUFBcGYsS0FBQWd1RCxlQUFBaDFDLEVBQUFoWixLQUFBdzBELGNBQTJELFdBQUF4N0MsR0FBY3N5RSxVQUFBLEVBQUFqaEIsU0FBQXJxRSxLQUFBa3BFLGFBQUF0akQsRUFBQXlrRCxVQUFBMXJFLE1BQUFxQixLQUFBd29FLG9CQUFpRixJQUFBeHZELEdBQ3J2K0JzeUUsVUFBQSxFQUFBamhCLFNBQUFycUUsS0FBQWtwRSxhQUFBdGpELEVBQUF5a0QsVUFBQXhuRSxPQUFBN0MsS0FBQWlwRSw2QkFBc0ZuYyxHQUFBQyxRQUFBLE9BQUFwMEMsRUFBQXpZLFNBQUEsb0RBQXNGeXdGLEdBQUEsY0FBa0IsSUFBQWg0RSxFQUFBM1ksS0FBQW9mLE9BQUFwZixLQUFBZ3VELGVBQUFoMUMsRUFBQWhaLEtBQUF3MEQsY0FBMkQxSCxHQUFBQyxPQUFBLElBQUEvekMsR0FBQSxJQUFBQSxFQUFBLEtBQUFMLEVBQUF6WSxTQUFBLG1EQUEwRixJQUFBbkMsRUFBQWlDLEtBQUFrcEUsYUFBQXRqRCxFQUFBeWtELFVBQUFyc0UsRUFBQWdDLEtBQUF3MEQsY0FBQTdwRCxFQUFBM0ssS0FBQXcwRCxjQUE4RSxPQUFBeDdDLEVBQUEsT0FBZ0JzeUUsVUFBQXR5RSxFQUFBcXhELFNBQUF0c0UsRUFBQTZ5RixhQUFBNXlGLEVBQUE2eUYsYUFBQWxtRixFQUFBNGdGLFNBQUF2ckYsS0FBQW1vRSxVQUFBdmlELEVBQUFra0QsUUFBQWxrRCxFQUFBK2pELEtBQUEsV0FBeUcsT0FBTzZoQixZQUFBeHJGLEtBQUF3MEQsY0FBQWkzQixPQUFBenJGLEtBQUF3b0UsaUJBQUF4cUUsR0FBQTh5RixPQUFBOXdGLEtBQUF3b0UsaUJBQUE3OUQsU0FBcUcsT0FBQXFPLEVBQUEsQ0FBVSxJQUFBZixFQUFBalksS0FBQWtwRSxhQUFBdGpELEVBQUEwa0QsVUFBQWh5RCxFQUFBdFksS0FBQWtwRSxhQUFBdGpELEVBQUEwa0QsVUFBQXZ2QixFQUFBLzZDLEtBQUF3MEQsY0FBQTkyRCxFQUFBc0MsS0FBQXcwRCxjQUE4RyxPQUFPODJCLFVBQUF0eUUsRUFBQXF4RCxTQUFBdHNFLEVBQUE2eUYsYUFBQTV5RixFQUFBNnlGLGFBQUFsbUYsRUFBQStnRixVQUFBenpFLEVBQUEwekUsVUFBQXJ6RSxFQUFBeTRFLFlBQUFoMkMsRUFBQWkyQyxZQUFBdHpGLEVBQUFrdUYsYUFBQTVyRixLQUFBbW9FLFVBQUFwdEIsRUFBQW4xQixFQUFBK2pELEtBQUFqc0UsRUFBQSxXQUEySixPQUFPK3RGLE9BQUF6ckYsS0FBQXdvRSxpQkFBQXhxRSxHQUFBOHlGLE9BQUE5d0YsS0FBQXdvRSxpQkFBQTc5RCxVQUFzRWdtRixHQUFBLGNBQWtCLE9BQU83a0YsTUFBQSxnQ0FBcUM2a0YsR0FBQSxjQUFrQixPQUFPN2tGLE1BQUEsZ0NBQXFDNmtGLEdBQUEsY0FBa0IsT0FBTzdrRixNQUFBLGdDQUFxQzZrRixHQUFBLGNBQWtCLE9BQU83a0YsTUFBQSxnQ0FBcUM2a0YsR0FBQSxjQUFrQixPQUFPN2tGLE1BQUEsZ0NBQXFDNmtGLEdBQUEsY0FBa0IsT0FBTzdrRixNQUFBLGdDQUFxQzZrRixHQUFBLGNBQWtCLE9BQU83a0YsTUFBQSxnQ0FBc0MsSUFBQW1sRixHQUFBLElBQUFudEYsTUFBQSxJQUFBbzlELElBQXlCOUIsTUFIZzFrQixTQUFBem1ELEVBQUFLLEdBQXdCLElBQUFqYixFQUFBLElBQUE2bkIsRUFBQWpOLEVBQVBLLEtBQUEsR0FBT2hiLEVBQUFELEVBQUFncUUsYUFBQSxHQUFxQyxPQUFBamIsR0FBQWdHLFNBQUEsSUFBQTkwRCxHQUFBLE1BQUFBLEVBQUEsa0NBQUFBLEdBQUEsSUFBQUEsR0FBOEU2SSxRQUFBN0ksRUFBQXVyRixRQUFBeHJGLEVBQUEwc0Usa0JBQUErZSxTQUFBenJGLEVBQUEyc0UsbUJBQUErZSxRQUFBMXJGLEVBQUE0c0UsZ0JBQUFnbUIsTUFBb0c5cEYsUUFBQTdJLEVBQUF1ckYsUUFBQXhyRixFQUFBMHNFLGtCQUFBK2UsU0FBQXpyRixFQUFBMnNFLG1CQUFBK2UsUUFBQTFyRixFQUFBNHNFLGdCQUFBZ21CLElBQUFqSCxXQUFBM3JGLEVBQUE4c0UsK0JBRy9qbEJVLEtBSDRzbEIsU0FBQTV5RCxHQUFlLFdBQUE0NEMsR0FBQWlCLE1BQUEsU0FBNkJ2MEQsS0FBQSxVQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxRQUEwQ1YsS0FBQSxVQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFBNHlELEdBQUFrVixXQUFBOXRELEVBQUE0d0UsV0FBaUV0ckYsS0FBQSxXQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFBNHlELEdBQUFtVixZQUFBL3RELEVBQUE2d0UsWUFBb0V2ckYsS0FBQSxVQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFBNHlELEdBQUFvVixXQUFBaHVELEVBQUE4d0UsUUFBQXdILFNBR3Q1bEJqd0IsSUFBSzVCLE1BSDZqbkIsU0FBQXptRCxFQUFBSyxHQUFpQixJQUFBamIsRUFBQSxJQUFBNndELEdBQUFRLE9BQUF6MkMsRUFBQUssR0FBQWhiLEVBQUFELEVBQUF5MkQsY0FBMkMsT0FBQXgyRCxFQUFBLE9BQW5xQixTQUFBMmEsR0FBZSxJQUFBSyxLQUFTTCxFQUFBc2xELEtBQUEsVUFBaUIsSUFBQWxnRSxFQUFBNGEsRUFBQTY3QyxjQUFzQjFILEdBQUFnRyxTQUFBLElBQUEvMEQsRUFBQSx1Q0FBQTRhLEVBQUFzbEQsS0FBQSxZQUE0RSxJQUFBamdFLEVBQUEyYSxFQUFBNjdDLGNBQXNCNzdDLEVBQUFzbEQsS0FBQSxZQUFtQixRQUFBdHpELEVBQUEsRUFBWUEsRUFBQTNNLEVBQUkyTSxHQUFBLEdBQU0sSUFBQXNOLEVBQUFVLEVBQUE2N0MsY0FBQWw4QyxFQUFBSyxFQUFBNjdDLGNBQUF6WixFQUFBcGlDLEVBQUFxN0MsYUFBeURoN0MsRUFBQWYsRUFBQSxJQUFBSyxHQUFBeWlDLEVBQWEsT0FBQS9oQyxFQUFtWms0RSxDQUFBbnpGLEdBQXNCLE9BQUFDLEVBQUEsT0FBaGEsU0FBQTJhLEdBQWUsSUFBQUssS0FBU0wsRUFBQXNsRCxLQUFBLFVBQUF0bEQsRUFBQWd2RCxhQUFBLEdBQUFwM0QsUUFBQUMsS0FBQSw4Q0FBQW1JLEVBQUFzbEQsS0FBQSxTQUE4RyxJQUFBamdFLEVBQUEsSUFBQTJhLEVBQUE2N0MsY0FBOEIsR0FBQTc3QyxFQUFBc2xELEtBQUEsY0FBQWpnRSxFQUFBLENBQTJCLElBQUEyTSxFQUFBZ08sRUFBQTY3QyxjQUFzQjc3QyxFQUFBc2xELEtBQUEsWUFBbUIsUUFBQWhtRCxFQUFBLEVBQVlBLEVBQUF0TixFQUFJc04sR0FBQSxHQUFNLElBQUFLLEVBQUFLLEVBQUE2N0MsY0FBQXpaLEVBQUFwaUMsRUFBQTY3QyxjQUFBOTJELEVBQUFpYixFQUFBcTdDLGFBQXlEaDdDLEVBQUFWLEVBQUEsSUFBQXlpQyxHQUFBcjlDLEdBQWMsT0FBQXNiLEVBQTJGbTRFLENBQUFwekYsR0FBc0IsVUFBQWtDLE1BQUEsbUNBQUFqQyxFQUFBLFFBRzVwbkJ3aUUsSUFBS3BCLE1BSGt0bkIsU0FBQXptRCxFQUFBSyxFQUFBamIsRUFBQUMsR0FBcUIsUUFBQTJNLEVBQUEsSUFBQWlrRCxHQUFBUSxPQUFBejJDLEVBQUFLLEdBQUFmLEVBQUFqYSxFQUFBMk0sRUFBQTZwRCxZQUFBN3BELEVBQUFnOUQsV0FBQXJ2RCxLQUFBeWlDLEVBQUEsRUFBcUVBLEVBQUFoOUMsRUFBQSxFQUFNZzlDLEdBQUEsR0FBTSxJQUFBcjlDLEVBQUF1YSxFQUFBcGEsS0FBQThNLEdBQWdCM00sSUFBQU4sR0FBQSxHQUFBNGEsRUFBQTFWLEtBQUFsRixHQUFvQixPQUFBNGEsSUFHbDFuQkssRUFBQXk0RSxLQUFBOTFCLEdBQUEzaUQsRUFBQTA0RSxNQUFBMXZDLEVBQUFocEMsRUFBQTI0RSxLQUFBOXlGLEVBQUFtYSxFQUFBNDRFLFlBQUE5OEUsRUFBQWtFLEVBQUE2NEUsT0FBQTVpQyxHQUFBajJDLEVBQUF5bUQsTUFBQUosR0FBQXJtRCxFQUFBNGIsS0FIb2t2QixTQUFBNWIsRUFBQUssSUFBaUIsb0JBQUE1UyxPQUFBaTRELEdBQS9wSCxTQUFBMWxELEVBQUFLLEdBQWlCLElBQUFqYixFQUFBLElBQUF3NEIsZUFBeUJ4NEIsRUFBQXk0QixLQUFBLE1BQUE3ZCxHQUFBLEdBQUE1YSxFQUFBMDRCLGFBQUEsY0FBQTE0QixFQUFBczJCLE9BQUEsV0FBb0UsT0FBQXQyQixFQUFBNjRCLFNBQUE1ZCxFQUFBLEtBQUFqYixFQUFBNjRCLFVBQUE1ZCxFQUFBLDZCQUFBamIsRUFBQTB6RixhQUFrRjF6RixFQUFBMDJCLFFBQUEsV0FBc0J6YixFQUFBLDZCQUE4QmpiLEVBQUErNEIsU0FBMjZHbmUsRUFBQSxTQUFBQSxFQUFBNWEsR0FBbUQsR0FBQTRhLEVBQUEsT0FBQUssRUFBQUwsR0FBaUIsSUFBQTNhLEVBQU0sSUFBSUEsRUFBQWdoRSxHQUFBamhFLEdBQVEsTUFBQTRhLEdBQVMsT0FBQUssRUFBQUwsRUFBQSxNQUFpQixPQUFBSyxFQUFBLEtBQUFoYixNQUdyc3ZCMmEsRUFBQSs0RSxTQUh3dHZCLFNBQUEvNEUsR0FBZSxPQUFBcW1ELEdBQUFwTCxHQUFBNTZDLEVBQUEsTUFBQTI0RSxhQUFBaDVFLE1BR3Z1dkJ2YSxPQUFBQyxlQUFBc2EsRUFBQSxjQUFtSWhhLE9BQUEsUUFBYWQsS0FBQW1DLEtBQUFnWixFQUFBLFVBQUFnYixVQUFrQ3RvQixPQUFBLEVBQUFrbUYsR0FBQSxJQUFjMWdCLElBQUEsU0FBQXY0RCxFQUFBSyxFQUFBamIsR0FBc0IsU0FBQUMsSUFBYSxVQUFBaUMsTUFBQSxtQ0FBbUQsU0FBQTBLLElBQWEsVUFBQTFLLE1BQUEscUNBQXFELFNBQUFnWSxFQUFBVSxHQUFjLEdBQUFoYixJQUFBaVEsV0FBQSxPQUFBQSxXQUFBK0ssRUFBQSxHQUF5QyxJQUFBaGIsSUFBQUssSUFBQUwsSUFBQWlRLFdBQUEsT0FBQWpRLEVBQUFpUSxzQkFBQStLLEVBQUEsR0FBK0QsSUFBSSxPQUFBaGIsRUFBQWdiLEVBQUEsR0FBYyxNQUFBSyxHQUFTLElBQUksT0FBQXJiLEVBQUFFLEtBQUEsS0FBQThhLEVBQUEsR0FBd0IsTUFBQUssR0FBUyxPQUFBcmIsRUFBQUUsS0FBQW1DLEtBQUEyWSxFQUFBLEtBQTBPLFNBQUFvaUMsSUFBYXRtQyxHQUFBdFcsSUFBQXNXLEdBQUEsRUFBQXRXLEVBQUFtRCxPQUFBOUIsRUFBQXJCLEVBQUFpb0IsT0FBQTVtQixHQUFBaEIsR0FBQSxFQUFBZ0IsRUFBQThCLFFBQUE1RCxLQUF1RCxTQUFBQSxJQUFhLElBQUErVyxFQUFBLENBQU8sSUFBQWtFLEVBQUFWLEVBQUE4aUMsR0FBV3RtQyxHQUFBLEVBQUssUUFBQXVFLEVBQUF4WixFQUFBOEIsT0FBbUIwWCxHQUFFLENBQUUsSUFBQTdhLEVBQUFxQixTQUFhaEIsRUFBQXdhLEdBQU03YSxLQUFBSyxHQUFBcXpGLE1BQWVyekYsR0FBQSxFQUFBd2EsRUFBQXhaLEVBQUE4QixPQUFnQm5ELEVBQUEsS0FBQXNXLEdBQUEsRUFBalksU0FBQWtFLEdBQWMsR0FBQTdhLElBQUFrUSxhQUFBLE9BQUFBLGFBQUEySyxHQUEyQyxJQUFBN2EsSUFBQTZNLElBQUE3TSxJQUFBa1EsYUFBQSxPQUFBbFEsRUFBQWtRLDBCQUFBMkssR0FBbUUsSUFBSTdhLEVBQUE2YSxHQUFZLE1BQUFLLEdBQVMsSUFBSSxPQUFBbGIsRUFBQUQsS0FBQSxLQUFBOGEsR0FBc0IsTUFBQUssR0FBUyxPQUFBbGIsRUFBQUQsS0FBQW1DLEtBQUEyWSxLQUF5TUwsQ0FBQUssSUFBa0IsU0FBQXZXLEVBQUF1VyxFQUFBSyxHQUFnQmhaLEtBQUE4eEYsSUFBQW41RSxFQUFBM1ksS0FBQXNTLE1BQUEwRyxFQUF3QixTQUFBeUksS0FBYyxJQUFBOWpCLEVBQUFHLEVBQUFxQixFQUFBNlosRUFBQXhiLFlBQXVCLFdBQVksSUFBSUcsRUFBQSxtQkFBQWlRLHNCQUFBNVAsRUFBNkMsTUFBQTJhLEdBQVNoYixFQUFBSyxFQUFJLElBQUlGLEVBQUEsbUJBQUFrUSwwQkFBQXJELEVBQWlELE1BQUFnTyxHQUFTN2EsRUFBQTZNLEdBQXhJLEdBQWdKLElBQUF4TSxFQUFBcUIsS0FBQWlWLEdBQUEsRUFBQWpXLEdBQUEsRUFBcUJXLEVBQUErakQsU0FBQSxTQUFBdnFDLEdBQXVCLElBQUFLLEVBQUEsSUFBQWxWLE1BQUFSLFVBQUFoQyxPQUFBLEdBQW9DLEdBQUFnQyxVQUFBaEMsT0FBQSxVQUFBdkQsRUFBQSxFQUFrQ0EsRUFBQXVGLFVBQUFoQyxPQUFtQnZELElBQUFpYixFQUFBamIsRUFBQSxHQUFBdUYsVUFBQXZGLEdBQXdCeUIsRUFBQW9ELEtBQUEsSUFBQVIsRUFBQXVXLEVBQUFLLElBQUEsSUFBQXhaLEVBQUE4QixRQUFBbVQsR0FBQXdELEVBQUF2YSxJQUF5QzBFLEVBQUE5QyxVQUFBdXlGLElBQUEsV0FBNEI3eEYsS0FBQTh4RixJQUFBeHFGLE1BQUEsS0FBQXRILEtBQUFzUyxRQUFnQ25ULEVBQUE0eUYsTUFBQSxVQUFBNXlGLEVBQUE2eUYsU0FBQSxFQUFBN3lGLEVBQUF5NEQsT0FBd0N6NEQsRUFBQTh5RixRQUFBOXlGLEVBQUEwSCxRQUFBLEdBQUExSCxFQUFBK3lGLFlBQXFDL3lGLEVBQUF5SCxHQUFBNmEsRUFBQXRpQixFQUFBZ3pGLFlBQUExd0UsRUFBQXRpQixFQUFBaUksS0FBQXFhLEVBQUF0aUIsRUFBQXdILElBQUE4YSxFQUFBdGlCLEVBQUFpekYsZUFBQTN3RSxFQUFBdGlCLEVBQUFrekYsbUJBQUE1d0UsRUFBQXRpQixFQUFBNEcsS0FBQTBiLEVBQUF0aUIsRUFBQW16RixnQkFBQTd3RSxFQUFBdGlCLEVBQUFvekYsb0JBQUE5d0UsRUFBQXRpQixFQUFBcXpGLFVBQUEsU0FBQTc1RSxHQUFnSyxVQUFTeFosRUFBQXN6RixRQUFBLFNBQUE5NUUsR0FBdUIsVUFBQTFZLE1BQUEscUNBQW9EZCxFQUFBdXpGLElBQUEsV0FBa0IsV0FBVXZ6RixFQUFBd3pGLE1BQUEsU0FBQWg2RSxHQUFxQixVQUFBMVksTUFBQSxtQ0FBa0RkLEVBQUF5ekYsTUFBQSxXQUFvQixlQUFhemhCLElBQUEsU0FBQXg0RCxFQUFBSyxFQUFBamIsSUFBc0IsU0FBQTRhLEdBQWEsYUFBYSxTQUFBSyxFQUFBTCxHQUFjLG9CQUFBQSxNQUFBb2tDLE9BQUFwa0MsSUFBQSw2QkFBQTNVLEtBQUEyVSxHQUFBLFVBQUFxTCxVQUFBLDBDQUF3SSxPQUFBckwsRUFBQTVHLGNBQXVCLFNBQUFoVSxFQUFBNGEsR0FBYyx1QkFBQUEsTUFBQW9rQyxPQUFBcGtDLE1BQTBDLFNBQUEzYSxFQUFBMmEsR0FBYyxJQUFBSyxHQUFPeW1CLEtBQUEsV0FBZ0IsSUFBQXptQixFQUFBTCxFQUFBL1AsUUFBZ0IsT0FBTzZCLFVBQUEsSUFBQXVPLEVBQUFyYSxNQUFBcWEsS0FBMkIsT0FBQXhhLEVBQUFxMEYsV0FBQTc1RSxFQUFBdmEsT0FBQTZ5QyxVQUFBLFdBQWtELE9BQUF0NEIsSUFBU0EsRUFBSSxTQUFBck8sRUFBQWdPLEdBQWMzWSxLQUFBMlcsT0FBV2dDLGFBQUFoTyxFQUFBZ08sRUFBQWhQLFFBQUEsU0FBQWdQLEVBQUFLLEdBQXdDaFosS0FBQTh5RixPQUFBOTVFLEVBQUFMLElBQWlCM1ksTUFBQThELE1BQUFELFFBQUE4VSxLQUFBaFAsUUFBQSxTQUFBZ1AsR0FBOEMzWSxLQUFBOHlGLE9BQUFuNkUsRUFBQSxHQUFBQSxFQUFBLEtBQXVCM1ksTUFBQTJZLEdBQUF2YSxPQUFBMjBGLG9CQUFBcDZFLEdBQUFoUCxRQUFBLFNBQUFxUCxHQUE0RGhaLEtBQUE4eUYsT0FBQTk1RSxFQUFBTCxFQUFBSyxLQUFvQmhaLE1BQU8sU0FBQWlZLEVBQUFVLEdBQWMsR0FBQUEsRUFBQXE2RSxTQUFBLE9BQUF6b0YsUUFBQXk1QyxPQUFBLElBQUFoZ0MsVUFBQSxpQkFBbUVyTCxFQUFBcTZFLFVBQUEsRUFBYyxTQUFBMTZFLEVBQUFLLEdBQWMsV0FBQXBPLFFBQUEsU0FBQXlPLEVBQUFqYixHQUFpQzRhLEVBQUEwYixPQUFBLFdBQW9CcmIsRUFBQUwsRUFBQXl0QyxTQUFZenRDLEVBQUE4YixRQUFBLFdBQXNCMTJCLEVBQUE0YSxFQUFBN00sVUFBYyxTQUFBaXZDLEVBQUFwaUMsR0FBYyxJQUFBSyxFQUFBLElBQUFrdEMsV0FBQW5vRCxFQUFBdWEsRUFBQVUsR0FBNEIsT0FBQUEsRUFBQWk2RSxrQkFBQXQ2RSxHQUFBNWEsRUFBdU8sU0FBQTBqQixFQUFBOUksR0FBYyxHQUFBQSxFQUFBalIsTUFBQSxPQUFBaVIsRUFBQWpSLE1BQUEsR0FBNkIsSUFBQXNSLEVBQUEsSUFBQWtLLFdBQUF2SyxFQUFBa2pDLFlBQW1DLE9BQUE3aUMsRUFBQXRZLElBQUEsSUFBQXdpQixXQUFBdkssSUFBQUssRUFBQXROLE9BQXlDLFNBQUEvTixJQUFhLE9BQUFxQyxLQUFBZ3pGLFVBQUEsRUFBQWh6RixLQUFBa3pGLFVBQUEsU0FBQXY2RSxHQUFtRCxHQUFBM1ksS0FBQW16RixVQUFBeDZFLElBQUEsb0JBQUFBLEVBQUEzWSxLQUFBb3pGLFVBQUF6NkUsT0FBNkQsR0FBQW5hLEVBQUF3USxNQUFBQyxLQUFBM1AsVUFBQSt6RixjQUFBMTZFLEdBQUEzWSxLQUFBc3pGLFVBQUEzNkUsT0FBaUUsR0FBQW5hLEVBQUErMEYsVUFBQUMsU0FBQWwwRixVQUFBK3pGLGNBQUExNkUsR0FBQTNZLEtBQUF5ekYsY0FBQTk2RSxPQUE2RSxHQUFBbmEsRUFBQWsxRixjQUFBQyxnQkFBQXIwRixVQUFBK3pGLGNBQUExNkUsR0FBQTNZLEtBQUFvekYsVUFBQXo2RSxFQUFBelksZ0JBQStGLEdBQUExQixFQUFBbzFGLGFBQUFwMUYsRUFBQXdRLE1BQUFwUSxFQUFBK1osR0FBQTNZLEtBQUE2ekYsaUJBQUFweUUsRUFBQTlJLEVBQUFqTixRQUFBMUwsS0FBQW16RixVQUFBLElBQUFsa0YsTUFBQWpQLEtBQUE2ekYsdUJBQXVILENBQUssSUFBQXIxRixFQUFBbzFGLGNBQUFoNEMsWUFBQXQ4QyxVQUFBK3pGLGNBQUExNkUsS0FBQTJqQyxFQUFBM2pDLEdBQUEsVUFBQTFZLE1BQUEsNkJBQStHRCxLQUFBNnpGLGlCQUFBcHlFLEVBQUE5SSxRQUEyQjNZLEtBQUFvekYsVUFBQSxHQUF1QnB6RixLQUFBOHpGLFFBQUF2MUYsSUFBQSxtQ0FBQW9hLEVBQUEzWSxLQUFBOHpGLFFBQUFwekYsSUFBQSwyQ0FBa0dWLEtBQUFzekYsV0FBQXR6RixLQUFBc3pGLFVBQUFybEYsS0FBQWpPLEtBQUE4ekYsUUFBQXB6RixJQUFBLGVBQUFWLEtBQUFzekYsVUFBQXJsRixNQUFBelAsRUFBQWsxRixjQUFBQyxnQkFBQXIwRixVQUFBK3pGLGNBQUExNkUsSUFBQTNZLEtBQUE4ekYsUUFBQXB6RixJQUFBLG9FQUF5UGxDLEVBQUF3USxPQUFBaFAsS0FBQWdQLEtBQUEsV0FBK0IsSUFBQTJKLEVBQUFWLEVBQUFqWSxNQUFjLEdBQUEyWSxFQUFBLE9BQUFBLEVBQWMsR0FBQTNZLEtBQUFzekYsVUFBQSxPQUFBL29GLFFBQUEvRCxRQUFBeEcsS0FBQXN6RixXQUF5RCxHQUFBdHpGLEtBQUE2ekYsaUJBQUEsT0FBQXRwRixRQUFBL0QsUUFBQSxJQUFBeUksTUFBQWpQLEtBQUE2ekYsb0JBQW1GLEdBQUE3ekYsS0FBQXl6RixjQUFBLFVBQUF4ekYsTUFBQSx3Q0FBOEUsT0FBQXNLLFFBQUEvRCxRQUFBLElBQUF5SSxNQUFBalAsS0FBQW96RixjQUFtRHB6RixLQUFBNHpGLFlBQUEsV0FBNkIsT0FBQTV6RixLQUFBNnpGLGlCQUFBNTdFLEVBQUFqWSxPQUFBdUssUUFBQS9ELFFBQUF4RyxLQUFBNnpGLGtCQUFBN3pGLEtBQUFnUCxPQUFBL0IsS0FBQTh0QyxLQUFpRy82QyxLQUFBK3pGLEtBQUEsV0FBdUIsSUFBQXA3RSxFQUFBVixFQUFBalksTUFBYyxHQUFBMlksRUFBQSxPQUFBQSxFQUFjLEdBQUEzWSxLQUFBc3pGLFVBQUEsT0FBenhELFNBQUEzNkUsR0FBYyxJQUFBSyxFQUFBLElBQUFrdEMsV0FBQW5vRCxFQUFBdWEsRUFBQVUsR0FBNEIsT0FBQUEsRUFBQWc3RSxXQUFBcjdFLEdBQUE1YSxFQUErdURMLENBQUFzQyxLQUFBc3pGLFdBQTJDLEdBQUF0ekYsS0FBQTZ6RixpQkFBQSxPQUFBdHBGLFFBQUEvRCxRQUFqd0QsU0FBQW1TLEdBQWMsUUFBQUssRUFBQSxJQUFBa0ssV0FBQXZLLEdBQUE1YSxFQUFBLElBQUErRixNQUFBa1YsRUFBQTFYLFFBQUF0RCxFQUFBLEVBQXNEQSxFQUFBZ2IsRUFBQTFYLE9BQVd0RCxJQUFBRCxFQUFBQyxHQUFBKytDLE9BQUFDLGFBQUFoa0MsRUFBQWhiLElBQW1DLE9BQUFELEVBQUEwRCxLQUFBLElBQStvRFcsQ0FBQXBDLEtBQUE2ekYsbUJBQTBFLEdBQUE3ekYsS0FBQXl6RixjQUFBLFVBQUF4ekYsTUFBQSx3Q0FBOEUsT0FBQXNLLFFBQUEvRCxRQUFBeEcsS0FBQW96RixZQUF1QzUwRixFQUFBKzBGLFdBQUF2ekYsS0FBQXV6RixTQUFBLFdBQXVDLE9BQUF2ekYsS0FBQSt6RixPQUFBOW1GLEtBQUE5TyxLQUEyQjZCLEtBQUFpbEQsS0FBQSxXQUF1QixPQUFBamxELEtBQUErekYsT0FBQTltRixLQUFBMm9DLEtBQUF3cEIsUUFBb0NwL0QsS0FBcUUsU0FBQWIsRUFBQXdaLEVBQUFLLEdBQXdCLElBQUFqYixHQUFSaWIsU0FBUWk3RSxLQUFhLEdBQUF0N0UsYUFBQXhaLEVBQUEsQ0FBbUIsR0FBQXdaLEVBQUFxNkUsU0FBQSxVQUFBaHZFLFVBQUEsZ0JBQWtEaGtCLEtBQUFvMEIsSUFBQXpiLEVBQUF5YixJQUFBcDBCLEtBQUFrMEYsWUFBQXY3RSxFQUFBdTdFLFlBQUFsN0UsRUFBQTg2RSxVQUFBOXpGLEtBQUE4ekYsUUFBQSxJQUFBbnBGLEVBQUFnTyxFQUFBbTdFLFVBQUE5ekYsS0FBQStULE9BQUE0RSxFQUFBNUUsT0FBQS9ULEtBQUFuQixLQUFBOFosRUFBQTlaLEtBQUFkLEdBQUEsTUFBQTRhLEVBQUF3NkUsWUFBQXAxRixFQUFBNGEsRUFBQXc2RSxVQUFBeDZFLEVBQUFxNkUsVUFBQSxRQUFtTGh6RixLQUFBbzBCLElBQUEyb0IsT0FBQXBrQyxHQUF3QixHQUFBM1ksS0FBQWswRixZQUFBbDdFLEVBQUFrN0UsYUFBQWwwRixLQUFBazBGLGFBQUEsUUFBQWw3RSxFQUFBODZFLFNBQUE5ekYsS0FBQTh6RixVQUFBOXpGLEtBQUE4ekYsUUFBQSxJQUFBbnBGLEVBQUFxTyxFQUFBODZFLFVBQUE5ekYsS0FBQStULE9BQXBYLFNBQUE0RSxHQUFjLElBQUFLLEVBQUFMLEVBQUF3N0UsY0FBc0IsT0FBQTMrQyxFQUFBcjBDLFFBQUE2WCxJQUFBLEVBQUFBLEVBQUFMLEVBQWdWN2EsQ0FBQWtiLEVBQUFqRixRQUFBL1QsS0FBQStULFFBQUEsT0FBQS9ULEtBQUFuQixLQUFBbWEsRUFBQW5hLE1BQUFtQixLQUFBbkIsTUFBQSxLQUFBbUIsS0FBQW8wRixTQUFBLGNBQUFwMEYsS0FBQStULFFBQUEsU0FBQS9ULEtBQUErVCxTQUFBaFcsRUFBQSxVQUFBaW1CLFVBQUEsNkNBQXVVaGtCLEtBQUFrekYsVUFBQW4xRixHQUFrQixTQUFBSSxFQUFBd2EsR0FBYyxJQUFBSyxFQUFBLElBQUF3NkUsU0FBbUIsT0FBQTc2RSxFQUFBakQsT0FBQXJVLE1BQUEsS0FBQXNJLFFBQUEsU0FBQWdQLEdBQStDLEdBQUFBLEVBQUEsQ0FBTSxJQUFBNWEsRUFBQTRhLEVBQUF0WCxNQUFBLEtBQUFyRCxFQUFBRCxFQUFBNkssUUFBQXV0QixRQUFBLFdBQUF4ckIsRUFBQTVNLEVBQUEwRCxLQUFBLEtBQUEwMEIsUUFBQSxXQUFtRm5kLEVBQUE4NUUsT0FBQXVCLG1CQUFBcjJGLEdBQUFxMkYsbUJBQUExcEYsT0FBdURxTyxFQUFJLFNBQUF4WixFQUFBbVosR0FBYyxJQUFBSyxFQUFBLElBQUFyTyxFQUFZLE9BQUFnTyxFQUFBdFgsTUFBQSxTQUFBc0ksUUFBQSxTQUFBZ1AsR0FBNEMsSUFBQTVhLEVBQUE0YSxFQUFBdFgsTUFBQSxLQUFBckQsRUFBQUQsRUFBQTZLLFFBQUE4TSxPQUFzQyxHQUFBMVgsRUFBQSxDQUFNLElBQUEyTSxFQUFBNU0sRUFBQTBELEtBQUEsS0FBQWlVLE9BQXlCc0QsRUFBQTg1RSxPQUFBOTBGLEVBQUEyTSxNQUFlcU8sRUFBSSxTQUFBdkUsRUFBQWtFLEVBQUFLLEdBQWdCQSxVQUFRaFosS0FBQWlPLEtBQUEsVUFBQWpPLEtBQUEyMkIsT0FBQSxXQUFBM2QsSUFBQTJkLE9BQUEsSUFBQTMyQixLQUFBZ2xELEdBQUFobEQsS0FBQTIyQixRQUFBLEtBQUEzMkIsS0FBQTIyQixPQUFBLElBQUEzMkIsS0FBQXl4RixXQUFBLGVBQUF6NEUsSUFBQXk0RSxXQUFBLEtBQUF6eEYsS0FBQTh6RixRQUFBLElBQUFucEYsRUFBQXFPLEVBQUE4NkUsU0FBQTl6RixLQUFBbzBCLElBQUFwYixFQUFBb2IsS0FBQSxHQUFBcDBCLEtBQUFrekYsVUFBQXY2RSxHQUE0TixJQUFBQSxFQUFBMjdFLE1BQUEsQ0FBYSxJQUFBOTFGLEdBQU9rMUYsYUFBQSxvQkFBQS82RSxFQUFBazZFLFNBQUEsV0FBQWw2RSxHQUFBLGFBQUFsYSxPQUFBdVEsS0FBQSxlQUFBMkosR0FBQSxTQUFBQSxHQUFBLFdBQTRILElBQUksV0FBQTFKLE1BQUEsRUFBbUIsTUFBQTBKLEdBQVMsVUFBNUosR0FBc0s0NkUsU0FBQSxhQUFBNTZFLEVBQUFpN0UsWUFBQSxnQkFBQWo3RSxHQUEwRCxHQUFBbmEsRUFBQW8xRixZQUFBLElBQUFuMEYsR0FBQSxtTkFBQWIsRUFBQSxTQUFBK1osR0FBeVAsT0FBQUEsR0FBQWczQyxTQUFBcndELFVBQUErekYsY0FBQTE2RSxJQUE4QzJqQyxFQUFBVixZQUFBMjRDLFFBQUEsU0FBQTU3RSxHQUFtQyxPQUFBQSxHQUFBbFosRUFBQTBCLFFBQUEvQyxPQUFBa0IsVUFBQVksU0FBQXJDLEtBQUE4YSxLQUFBLEdBQTJEaE8sRUFBQXJMLFVBQUF3ekYsT0FBQSxTQUFBbjZFLEVBQUEzYSxHQUFpQzJhLEVBQUFLLEVBQUFMLEdBQUEzYSxFQUFBRCxFQUFBQyxHQUFjLElBQUEyTSxFQUFBM0ssS0FBQTJXLElBQUFnQyxHQUFrQjNZLEtBQUEyVyxJQUFBZ0MsR0FBQWhPLElBQUEsSUFBQTNNLEtBQXdCMk0sRUFBQXJMLFVBQUFrMUYsT0FBQSxTQUFBNzdFLFVBQWdDM1ksS0FBQTJXLElBQUFxQyxFQUFBTCxLQUFzQmhPLEVBQUFyTCxVQUFBZixJQUFBLFNBQUFvYSxHQUE2QixPQUFBQSxFQUFBSyxFQUFBTCxHQUFBM1ksS0FBQXloQyxJQUFBOW9CLEdBQUEzWSxLQUFBMlcsSUFBQWdDLEdBQUEsTUFBMkNoTyxFQUFBckwsVUFBQW1pQyxJQUFBLFNBQUE5b0IsR0FBNkIsT0FBQTNZLEtBQUEyVyxJQUFBcFgsZUFBQXlaLEVBQUFMLEtBQXFDaE8sRUFBQXJMLFVBQUFvQixJQUFBLFNBQUFpWSxFQUFBM2EsR0FBK0JnQyxLQUFBMlcsSUFBQXFDLEVBQUFMLElBQUE1YSxFQUFBQyxJQUFvQjJNLEVBQUFyTCxVQUFBcUssUUFBQSxTQUFBZ1AsRUFBQUssR0FBbUMsUUFBQWpiLEtBQUFpQyxLQUFBMlcsSUFBQTNXLEtBQUEyVyxJQUFBcFgsZUFBQXhCLElBQUE0YSxFQUFBOWEsS0FBQW1iLEVBQUFoWixLQUFBMlcsSUFBQTVZLEtBQUFpQyxPQUErRTJLLEVBQUFyTCxVQUFBbUQsS0FBQSxXQUE2QixJQUFBa1csS0FBUyxPQUFBM1ksS0FBQTJKLFFBQUEsU0FBQXFQLEVBQUFqYixHQUFrQzRhLEVBQUEvVixLQUFBN0UsS0FBVUMsRUFBQTJhLElBQU9oTyxFQUFBckwsVUFBQXVELE9BQUEsV0FBK0IsSUFBQThWLEtBQVMsT0FBQTNZLEtBQUEySixRQUFBLFNBQUFxUCxHQUFnQ0wsRUFBQS9WLEtBQUFvVyxLQUFVaGIsRUFBQTJhLElBQU9oTyxFQUFBckwsVUFBQW0xRixRQUFBLFdBQWdDLElBQUE5N0UsS0FBUyxPQUFBM1ksS0FBQTJKLFFBQUEsU0FBQXFQLEVBQUFqYixHQUFrQzRhLEVBQUEvVixNQUFBN0UsRUFBQWliLE1BQWNoYixFQUFBMmEsSUFBT25hLEVBQUFxMEYsV0FBQWxvRixFQUFBckwsVUFBQWIsT0FBQTZ5QyxVQUFBM21DLEVBQUFyTCxVQUFBbTFGLFNBQWdFLElBQUFqL0MsR0FBQSw4Q0FBcURyMkMsRUFBQUcsVUFBQW8xRixNQUFBLFdBQTZCLFdBQUF2MUYsRUFBQWEsTUFBbUJpMEYsS0FBQWowRixLQUFBbXpGLGFBQXNCeDFGLEVBQUFFLEtBQUFzQixFQUFBRyxXQUFBM0IsRUFBQUUsS0FBQTRXLEVBQUFuVixXQUFBbVYsRUFBQW5WLFVBQUFvMUYsTUFBQSxXQUFzRSxXQUFBamdGLEVBQUF6VSxLQUFBbXpGLFdBQTZCeDhELE9BQUEzMkIsS0FBQTIyQixPQUFBODZELFdBQUF6eEYsS0FBQXl4RixXQUFBcUMsUUFBQSxJQUFBbnBGLEVBQUEzSyxLQUFBOHpGLFNBQUExL0QsSUFBQXAwQixLQUFBbzBCLE9BQXlGM2YsRUFBQTNJLE1BQUEsV0FBb0IsSUFBQTZNLEVBQUEsSUFBQWxFLEVBQUEsTUFBa0JraUIsT0FBQSxFQUFBODZELFdBQUEsS0FBeUIsT0FBQTk0RSxFQUFBMUssS0FBQSxRQUFBMEssR0FBeUIsSUFBQThqQyxHQUFBLHFCQUE0QmhvQyxFQUFBa2dGLFNBQUEsU0FBQWg4RSxFQUFBSyxHQUF5QixRQUFBeWpDLEVBQUF0N0MsUUFBQTZYLEdBQUEsVUFBQTlGLFdBQUEsdUJBQWlFLFdBQUF1QixFQUFBLE1BQW1Ca2lCLE9BQUEzZCxFQUFBODZFLFNBQWtCenRDLFNBQUExdEMsTUFBY0EsRUFBQWk4RSxRQUFBanFGLEVBQUFnTyxFQUFBazhFLFFBQUExMUYsRUFBQXdaLEVBQUFtOEUsU0FBQXJnRixFQUFBa0UsRUFBQTI3RSxNQUFBLFNBQUEzN0UsRUFBQUssR0FBNEQsV0FBQXpPLFFBQUEsU0FBQXhNLEVBQUFDLEdBQWlDLElBQUEyTSxFQUFBLElBQUF4TCxFQUFBd1osRUFBQUssR0FBQWYsRUFBQSxJQUFBc2UsZUFBc0N0ZSxFQUFBb2MsT0FBQSxXQUFvQixJQUFBMWIsR0FBT2dlLE9BQUExZSxFQUFBMGUsT0FBQTg2RCxXQUFBeDVFLEVBQUF3NUUsV0FBQXFDLFFBQUF0MEYsRUFBQXlZLEVBQUE4OEUseUJBQUEsS0FBa0ZwOEUsRUFBQXliLElBQUEsZ0JBQUFuYyxJQUFBKzhFLFlBQUFyOEUsRUFBQW03RSxRQUFBdjFGLElBQUEsaUJBQXFFLElBQUF5YSxFQUFBLGFBQUFmLElBQUEyZSxTQUFBM2UsRUFBQWc5RSxhQUErQ2wzRixFQUFBLElBQUEwVyxFQUFBdUUsRUFBQUwsS0FBY1YsRUFBQXdjLFFBQUEsV0FBc0J6MkIsRUFBQSxJQUFBZ21CLFVBQUEsNEJBQTJDL0wsRUFBQWk5RSxVQUFBLFdBQXdCbDNGLEVBQUEsSUFBQWdtQixVQUFBLDRCQUEyQy9MLEVBQUF1ZSxLQUFBN3JCLEVBQUFvSixPQUFBcEosRUFBQXlwQixLQUFBLGVBQUF6cEIsRUFBQXVwRixjQUFBajhFLEVBQUFrOUUsaUJBQUEsb0JBQUFsOUUsR0FBQXpaLEVBQUF3USxPQUFBaUosRUFBQXdlLGFBQUEsUUFBQTlyQixFQUFBbXBGLFFBQUFucUYsUUFBQSxTQUFBZ1AsRUFBQUssR0FBaUtmLEVBQUFtOUUsaUJBQUFwOEUsRUFBQUwsS0FBd0JWLEVBQUE2ZSxVQUFBLElBQUFuc0IsRUFBQXdvRixVQUFBLEtBQUF4b0YsRUFBQXdvRixjQUFrRHg2RSxFQUFBMjdFLE1BQUFsd0MsVUFBQSxHQUExZ08sQ0FBZ2lPLG9CQUFBL0MsVUFBQXJoRCxXQUF3Q294RSxJQUFBLFNBQUF6NEQsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsZUFBdUJBLEVBQUEsb0JBQUFBLEVBQUEsc0JBQUFBLEVBQUEsd0JBQUFBLEVBQUEsa0JBQUFBLEVBQUEsaUJBQUFBLEVBQUEscUJBQUFBLEVBQUEsc0JBQUFBLEVBQUEsc0JBQUFBLEVBQUEsd0JBQUFBLEVBQUEsb0JBQUFBLEVBQUEsZUFBQUEsRUFBQSxvQkFBQUEsRUFBQSxvQkFBQUEsRUFBQSw4QkFBQUEsRUFBQSwyQkFBQUEsRUFBQSx1QkFBQUEsRUFBQSx1QkFBQUEsRUFBQSw0QkFBQUEsRUFBQSw0QkFBQUEsRUFBQSxvQkFBQUEsRUFBQSxtQkFBQUEsRUFBQSx1QkFBQUEsRUFBQSx5QkFBQUEsRUFBQSxxQkFBQUEsRUFBQSxrQkFBQUEsRUFBQSxrQkFBQUEsRUFBQSxtQkFBQUEsRUFBQSxpQkFBQUEsRUFBQSw4QkFBQUEsRUFBQSxvQkFBQUEsRUFBQSxrQkFBQUEsRUFBQSxjQUFBQSxFQUFBLGlCQUFBQSxFQUFBLG9CQUFBQSxFQUFBLGVBQUFBLEVBQUEsc0JBQUFBLEVBQUEsZUFBQUEsRUFBQSxnQkFBQUEsRUFBQSxvQkFBQUEsRUFBQSxpQkFBQUEsRUFBQSx1QkFBQUEsRUFBQSwyQkFBQUEsRUFBQSxtQ0FBQUEsRUFBQSx3QkFBQUEsRUFBQSwrQkFBQUEsRUFBQSwwQkFBQUEsRUFBQSxnQ0FBQUEsRUFBQSx5QkFBQUEsRUFBQSx5QkFBQUEsRUFBQSx1QkFBQUEsRUFBQSxpQkFBQUEsRUFBQSxtQkFBQUEsRUFBQSxvQkFBQUEsRUFBQSxxQkFBQUEsRUFBQSx1QkFBQUEsRUFBQSxxQkFBQUEsRUFBQSxtQ0FBQUEsRUFBQSx5QkFBQUEsRUFBQSxrQ0FBQUEsRUFBQSxxQkFBQUEsRUFBQSxzQkFBQUEsRUFBQSxnQkFBQUEsRUFBQSxlQUFBSyxFQUFBeGIsUUFBQVEsSUFBdy9DcTNGLDJCQUFBLEdBQUFDLDJCQUFBLEdBQUFDLG1CQUFBLEdBQUFDLGtCQUFBLEdBQUFDLG1CQUFBLEdBQUFDLHFCQUFBLEdBQUFDLHVCQUFBLEdBQUFDLGlCQUFBLEdBQUFDLGNBQUEsR0FBQUMsZ0JBQUEsR0FBQUMsY0FBQSxHQUFBQyxvQkFBQSxHQUFBQyxxQkFBQSxHQUFBQyxxQkFBQSxHQUFBQyx1QkFBQSxHQUFBQyxtQkFBQSxHQUFBQyw2QkFBQSxHQUFBQywwQkFBQSxHQUFBQyxzQkFBQSxHQUFBQyxzQkFBQSxHQUFBQyxjQUFBLEdBQUFDLG1CQUFBLEdBQUFDLG1CQUFBLEdBQUFDLHNCQUFBLEdBQUFDLHdCQUFBLEdBQUFDLG9CQUFBLEdBQUFDLGlCQUFBLEdBQUFDLGlCQUFBLEdBQUFDLGtCQUFBLEdBQUFDLGdCQUFBLEdBQUFDLDZCQUFBLEdBQUFDLG1CQUFBLEdBQUFDLGlCQUFBLEdBQUFDLGFBQUEsR0FBQUMsZ0JBQUEsR0FBQUMsbUJBQUEsR0FBQUMsY0FBQSxHQUFBQyxxQkFBQSxHQUFBQyxjQUFBLEdBQUFDLGVBQUEsR0FBQUMsbUJBQUEsR0FBQUMsZ0JBQUEsR0FBQUMsc0JBQUEsR0FBQUMsMEJBQUEsR0FBQUMsa0NBQUEsR0FBQUMsdUJBQUEsR0FBQUMsOEJBQUEsR0FBQUMseUJBQUEsR0FBQUMsK0JBQUEsR0FBQUMsd0JBQUEsR0FBQUMsd0JBQUEsR0FBQUMsc0JBQUEsR0FBQUMsZ0JBQUEsR0FBQUMsa0JBQUEsR0FBQUMsbUJBQUEsR0FBQUMsb0JBQUEsR0FBQUMsc0JBQUEsR0FBQUMsb0JBQUEsR0FBQUMsd0JBQUEsR0FBQUMsa0NBQUEsR0FBQUMsaUNBQUEsR0FBQUMsb0JBQUEsR0FBQUMscUJBQUEsR0FBQUMsZUFBQSxLQUEyL0MvbkIsSUFBQSxTQUFBMTRELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUF3QjNhLEVBQUFxN0YsbUJBQW9CcjdGLEVBQUFxN0YsZ0JBQUFDLFlBQUEsU0FBQTNnRixHQUEyQyxJQUFBSyxFQUFBTCxFQUFBLEdBQUE1YSxFQUFBNGEsRUFBQSxHQUFBM2EsRUFBQTJhLEVBQUEsR0FBQWhPLEdBQUEsRUFBQTVNLEdBQUFDLEVBQUEsRUFBcUMsV0FBQTJNLElBQUEsSUFBQUEsRUFBQTVNLEVBQUEsRUFBQTRNLEVBQUEsR0FBQTVNLEdBQUEsRUFBQUEsTUFBQUMsR0FBQSxJQUFBMk0sS0FBQXFPLEVBQUFqYixFQUFBNE0sRUFBQWdPLEVBQUEsS0FBaUUzYSxFQUFBcTdGLGdCQUFBRSxZQUFBLFNBQUE1Z0YsR0FBMkMsSUFBQUssRUFBQSxFQUFBTCxFQUFBLEdBQUE1YSxFQUFBNGEsRUFBQSxHQUFBM2EsRUFBQTJhLEVBQUEsR0FBQWhPLEtBQWdDLE9BQUE1TSxFQUFBNE0sR0FBQTNNLE1BQUEyYSxFQUFBLFFBQXdCLENBQUssSUFBQVYsRUFBQUssRUFBQXlpQyxFQUFBcjlDLEVBQUFrSCxLQUFBMEUsTUFBQTBQLEdBQUE1VyxFQUFBcEUsR0FBQSxFQUFBRCxHQUFBMGpCLEVBQUF6akIsR0FBQSxFQUFBRCxHQUFBaWIsRUFBQXRiLElBQUFDLEVBQUFLLEdBQUEsRUFBQUQsR0FBQSxFQUFBTCxFQUFBc2IsSUFBc0UsSUFBQXRiLEdBQUF1YSxFQUFBd0osRUFBQW5KLEVBQUF0YSxFQUFBKzhDLEVBQUEzNEMsR0FBQSxJQUFBMUUsR0FBQXVhLEVBQUE3VixFQUFBa1csRUFBQXRhLEVBQUErOEMsRUFBQXA5QyxHQUFBLElBQUFELEdBQUF1YSxFQUFBN1YsRUFBQWtXLEVBQUFtSixFQUFBczVCLEVBQUEvOEMsR0FBQSxJQUFBTixHQUFBdWEsRUFBQXRhLEVBQUEyYSxFQUFBbFcsRUFBQTI0QyxFQUFBLzhDLEdBQUEsSUFBQU4sR0FBQXVhLEVBQUFqYSxFQUFBc2EsRUFBQWxXLEVBQUEyNEMsRUFBQXQ1QixJQUFBeEosRUFBQWphLEVBQUFzYSxFQUFBM2EsRUFBQW85QyxFQUFBMzRDLEdBQUF1SSxHQUFBc04sRUFBQUssRUFBQXlpQyxFQUFBcGlDLEVBQUEsSUFBaUksT0FBQWhPLEdBQVMzTSxFQUFBcTdGLGdCQUFBRyxZQUFBLFNBQUE3Z0YsR0FBMkMsSUFBQUssRUFBQWpiLEVBQUE0YSxFQUFBLEdBQUEzYSxFQUFBMmEsRUFBQSxHQUFBaE8sRUFBQWdPLEVBQUEsR0FBMkIsT0FBQTVhLEVBQUFDLEVBQUEsSUFBQWdiLEVBQUFyTyxFQUFBLE1BQUEzTSxHQUFBMk0sSUFBQTNNLEVBQUEyTSxFQUFBM00sR0FBQTJNLEdBQUFxTyxJQUFBTCxFQUFBLEtBQXVEM2EsRUFBQXE3RixnQkFBQUksWUFBQSxTQUFBOWdGLEdBQTJDLElBQUFLLEVBQUEsRUFBQUwsRUFBQSxHQUFBNWEsRUFBQTRhLEVBQUEsR0FBQTNhLEVBQUEyYSxFQUFBLEdBQUFoTyxLQUFnQyxPQUFBNU0sRUFBQTRNLEdBQUEzTSxNQUFBMmEsRUFBQSxRQUF3QixDQUFLLElBQUFWLEVBQTZCSyxFQUFBLEVBQUF0YSxHQUF2QmlhLEVBQUFqYSxFQUFBLE1BQUFELEdBQUFDLElBQUFELEVBQUFDLEVBQUFELEdBQXVCZzlDLEVBQUEsU0FBQXBpQyxFQUFBSyxFQUFBamIsR0FBOEIsT0FBQTRhLEVBQUEsRUFBQUEsR0FBQSxFQUFBQSxHQUFBLElBQUFBLEdBQUEsR0FBQUEsRUFBQSxFQUFBSyxHQUFBamIsRUFBQWliLEdBQUFMLElBQUEsRUFBQTVhLEVBQUE0YSxFQUFBLEVBQUFLLEdBQUFqYixFQUFBaWIsSUFBQSxFQUFBTCxHQUFBSyxHQUFzRXJPLEdBQUFvd0MsRUFBQS9oQyxFQUFBLEVBQUFWLEVBQUFMLEdBQUE4aUMsRUFBQS9oQyxFQUFBVixFQUFBTCxHQUFBOGlDLEVBQUEvaEMsRUFBQSxFQUFBVixFQUFBTCxHQUFBVSxFQUFBLElBQXdDLE9BQUFoTyxHQUFTM00sRUFBQXE3RixnQkFBQUssWUFBQSxTQUFBL2dGLEdBQTJDLElBQUFLLEVBQUFqYixFQUFBQyxFQUFBMmEsRUFBQSxHQUFBaE8sRUFBQWdPLEVBQUEsR0FBQVYsRUFBQVUsRUFBQSxHQUFBTCxFQUFBMVQsS0FBQThLLElBQUExUixFQUFBMk0sRUFBQXNOLEdBQUE4aUMsRUFBQXppQyxFQUFBMVQsS0FBQXNYLElBQUFsZSxFQUFBMk0sRUFBQXNOLEdBQW1FLFdBQUE4aUMsR0FBQS9oQyxFQUFBLEVBQUFqYixFQUFBLElBQUFBLEVBQUFnOUMsRUFBQXppQyxFQUFBdGEsSUFBQXNhLEVBQUFVLEdBQUFyTyxFQUFBc04sR0FBQThpQyxFQUFBcHdDLElBQUEyTixFQUFBVSxFQUFBLEdBQUFmLEVBQUFqYSxHQUFBKzhDLEVBQUE5aUMsSUFBQUssSUFBQVUsRUFBQSxHQUFBaGIsRUFBQTJNLEdBQUFvd0MsR0FBQS9oQyxFQUFBLEVBQUFBLEdBQUEsRUFBQUEsR0FBQSxJQUFBQSxHQUFBLEtBQUFBLEVBQUEsRUFBQWpiLEVBQUF1YSxFQUFBSyxFQUFBLEtBQTJIM2EsRUFBQXE3RixnQkFBQU0sWUFBQSxTQUFBaGhGLEdBQTJDLElBQUFLLEVBQUFqYixFQUFBQyxFQUFBMmEsRUFBQSxHQUFBaE8sRUFBQWdPLEVBQUEsR0FBQVYsRUFBQVUsRUFBQSxHQUFBTCxFQUFBMVQsS0FBQThLLElBQUExUixFQUFBMk0sRUFBQXNOLEdBQUE4aUMsRUFBQW4yQyxLQUFBc1gsSUFBQWxlLEVBQUEyTSxFQUFBc04sR0FBQXZhLEVBQUE0YSxFQUFBeWlDLEVBQUEzNEMsRUFBQWtXLEVBQUF5aUMsRUFBNkUsV0FBQTM0QyxHQUFBNFcsRUFBQSxFQUFBamIsRUFBQSxJQUFBQSxFQUFBTCxFQUFBLEVBQUEwRSxFQUFBMUUsRUFBQTBFLEdBQUEsRUFBQTFFLEdBQUFNLElBQUFzYSxFQUFBVSxHQUFBck8sRUFBQXNOLEdBQUE3VixFQUFBdUksSUFBQTJOLEVBQUFVLEVBQUEsR0FBQWYsRUFBQWphLEdBQUFvRSxFQUFBNlYsSUFBQUssSUFBQVUsRUFBQSxHQUFBaGIsRUFBQTJNLEdBQUF2SSxHQUFBNFcsRUFBQSxFQUFBQSxHQUFBLEVBQUFBLEdBQUEsSUFBQUEsR0FBQSxLQUFBQSxFQUFBLEVBQUFqYixFQUFBTCxFQUFBLEVBQUFpYixFQUFBLEtBQXlJSyxFQUFBeGIsUUFBQVEsRUFBQXE3RixrQkFBK0JPLGVBQUEsS0FBa0J0b0IsSUFBQSxTQUFBMzRELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUFBaE8sRUFBQWdPLEVBQUEscUJBQWlEQSxFQUFBLGNBQUFBLEVBQUEseUJBQUEzYSxFQUFBc0IsVUFBQXU2RixNQUFBLFNBQUFsaEYsR0FBeUUsT0FBQTNhLEVBQUE4N0Ysb0JBQUEsUUFBQXgyRixXQUFBdEQsS0FBQSs1RixNQUFBcGhGLEdBQUFxaEYsYUFBMEVoOEYsRUFBQXNCLFVBQUEyNkYsS0FBQSxTQUFBdGhGLEdBQThCLE9BQUEzYSxFQUFBODdGLG9CQUFBLE9BQUF4MkYsV0FBQXRELEtBQUErNUYsTUFBQXBoRixHQUFBdWhGLFlBQXdFbDhGLEVBQUFzQixVQUFBNjZGLFdBQUEsU0FBQXhoRixHQUFvQyxPQUFBM2EsRUFBQTg3RixvQkFBQSxhQUFBeDJGLFdBQUF0RCxLQUFBKzVGLE1BQUFwaEYsR0FBQXloRixrQkFBb0ZwOEYsRUFBQXNCLFVBQUF5NkYsTUFBQSxXQUE4QixHQUFBLzdGLEVBQUE4N0Ysb0JBQUEsUUFBQXgyRixxQkFBQSxhQUFBdEYsRUFBQXE4RixNQUFBLE9BQUEvMkYsVUFBQSxHQUErRixJQUFBcVYsRUFBQXJWLFVBQUEsYUFBQVEsTUFBQVIsVUFBQSxHQUFBQSxVQUEwRCxXQUFBdEYsRUFBQXE4RixNQUFBcjZGLEtBQUEyWSxJQUEyQjNhLEVBQUFzQixVQUFBZzdGLE1BQUEsU0FBQTNoRixHQUErQixPQUFBM2EsRUFBQTg3RixvQkFBQSxRQUFBeDJGLFdBQUF0RCxLQUFBKzVGLE1BQUFwaEYsR0FBQTRoRixhQUEwRXY4RixFQUFBc0IsVUFBQWs3RixJQUFBLFNBQUE3aEYsR0FBNkIsT0FBQTNhLEVBQUE4N0Ysb0JBQUEsTUFBQXgyRixXQUFBdEQsS0FBQSs1RixNQUFBcGhGLEdBQUE4aEYsV0FBc0V6OEYsRUFBQXNCLFVBQUFvN0YsVUFBQSxTQUFBL2hGLEVBQUFLLEVBQUFqYixHQUF1Q0MsRUFBQTg3RixvQkFBQSxZQUFBeDJGLFdBQTZDLElBQUEyVSxFQUFBSyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQUFxZixFQUFBOWpCLEVBQUFxQyxLQUFBMjZGLFdBQUE3OEYsRUFBQWtDLEtBQUE0NkYsWUFBcUQsR0FBQWo5RixJQUFBZ04sRUFBQWt3RixJQUFBejRGLEVBQUF1VyxFQUFBbWlGLE9BQUFua0YsSUFBQSxTQUFBZ0MsR0FBd0MsT0FBQUEsRUFBQSxNQUFhOEksRUFBQXpJLEVBQUE4aEYsT0FBQW5rRixJQUFBLFNBQUFnQyxHQUE2QixPQUFBQSxFQUFBLFdBQWUsR0FBQWhiLElBQUFnTixFQUFBb3dGLElBQUFwaUYsRUFBQXloRixpQkFBQXBoRixFQUFBb2hGLGlCQUFBaDRGLEVBQUF1VyxFQUFBcWlGLEtBQUF2NUUsRUFBQXpJLEVBQUFnaUYsU0FBMEUsQ0FBSyxHQUFBcjlGLElBQUFnTixFQUFBc3dGLElBQUEsVUFBQWg3RixNQUFBdEMsRUFBQSxxQ0FBb0VnYixFQUFBdWlGLGdCQUFBbGlGLEVBQUFraUYsZ0JBQUE5NEYsRUFBQXVXLEVBQUF3aUYsS0FBQTE1RSxFQUFBekksRUFBQW1pRixLQUFzRCxPQUFBcDlGLEVBQUE2RyxLQUFBOEssSUFBQTlLLEtBQUFzWCxJQUFBbmUsRUFBQSxlQUFBaUMsS0FBQW83RixPQUFBcDdGLEtBQUFvN0YsS0FBQSxTQUFBemlGLEVBQUFLLEVBQUFqYixHQUFrRixPQUFBQSxHQUFBaWIsRUFBQUwsT0FBaUJWLEVBQUFqWSxLQUFBbzdGLEtBQUFoNUYsRUFBQSxHQUFBcWYsRUFBQSxHQUFBMWpCLEdBQUF1YSxFQUFBdFksS0FBQW83RixLQUFBaDVGLEVBQUEsR0FBQXFmLEVBQUEsR0FBQTFqQixHQUFBZzlDLEVBQUEvNkMsS0FBQW83RixLQUFBaDVGLEVBQUEsR0FBQXFmLEVBQUEsR0FBQTFqQixHQUFBTCxFQUFBc0MsS0FBQW83RixLQUFBaDVGLEVBQUEsR0FBQXFmLEVBQUEsR0FBQTFqQixHQUFBa2EsR0FBQW5hLEVBQUFILEdBQUEsR0FBQTJhLEdBQUF4YSxFQUFBSCxHQUFBLEdBQUFvOUMsR0FBQWo5QyxFQUFBSCxHQUFBLEdBQUFELEdBQUFJLEVBQUFILEdBQUEsR0FBQXFDLEtBQUErNUYsTUFBQTloRixFQUFBSyxFQUFBeWlDLEVBQUFyOUMsSUFBc0tNLEVBQUFzQixVQUFBKzdGLFVBQUEsU0FBQTFpRixHQUFtQyxPQUFBM2EsRUFBQTg3RixvQkFBQSxZQUFBeDJGLFdBQUF0RCxLQUFBKzVGLE1BQUFwaEYsR0FBQXVpRixpQkFBa0ZsOUYsRUFBQXNCLFVBQUFnOEYsSUFBQSxTQUFBM2lGLEdBQTZCLE9BQUEzYSxFQUFBODdGLG9CQUFBLE1BQUF4MkYsV0FBQXRELEtBQUErNUYsTUFBQXBoRixHQUFBNGlGLFdBQXNFdjlGLEVBQUFzQixVQUFBazhGLFdBQUEsU0FBQTdpRixHQUFvQyxPQUFBM2EsRUFBQTg3RixvQkFBQSxhQUFBeDJGLFdBQUF0RCxLQUFBKzVGLE1BQUFwaEYsR0FBQThpRixrQkFBb0Z6aUYsRUFBQXhiLFFBQUFRLElBQWUwOUYsb0JBQUEsR0FBQUMsd0JBQUEsR0FBQS9CLGVBQUEsR0FBQWdDLGFBQUEsS0FBb0ZycUIsSUFBQSxTQUFBNTRELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUFBaE8sRUFBQWdPLEVBQUEscUJBQUFWLEVBQUFVLEVBQUEsc0JBQTJFM2EsRUFBQXE4RixNQUFBLFNBQUExaEYsRUFBQUssR0FBc0IsR0FBQWhaLEtBQUE2N0YsbUJBQUFsakYsRUFBQWdpRixXQUFBaGlGLEVBQUFpaUYsYUFBQTU2RixLQUFBbkIsT0FBQThMLEVBQUFrd0YsS0FBQTc2RixLQUFBbkIsT0FBQThMLEVBQUFzd0YsS0FBQWo3RixLQUFBbkIsT0FBQThMLEVBQUFvd0YsSUFBQSxVQUFBOTZGLE1BQUFELEtBQUFuQixLQUFBLDZCQUFzSyxPQUFBbUIsS0FBQTg3RixPQUFBOTlGLEVBQUFxOEYsTUFBQTBCLGFBQUF6MEYsTUFBQXRILEtBQUFnWixHQUFBaFosS0FBQWc4RixtQkFBQWg4RixNQUFtRmhDLEVBQUFxOEYsTUFBQS82RixVQUFBWSxTQUFBLFNBQUF5WSxHQUF3QzNZLEtBQUFnN0YsT0FBQWg3RixLQUFBZzdGLEtBQUEvaUYsRUFBQXloRixZQUFBMTVGLEtBQUE4N0YsU0FBQTk3RixLQUFBbTdGLE9BQUFuN0YsS0FBQW03RixLQUFBbGpGLEVBQUEwaEYsWUFBQTM1RixLQUFBODdGLFNBQW9HLElBQUE5aUYsRUFBQWhaLEtBQUE4NkYsT0FBQS84RixFQUFBaUMsS0FBQTg3RixPQUFBOTlGLEVBQUFELEVBQUEsR0FBdUMsT0FBQTRhLEdBQVUsd0JBQUF5TixPQUFBcE4sRUFBQSxVQUFBb04sT0FBQXBOLEVBQUEsR0FBQTlZLFNBQUEsS0FBQThZLEVBQUEsR0FBQTlZLFNBQUEsSUFBQThZLEVBQUEsVUFBQW9OLE9BQUFwTixFQUFBLEdBQUE5WSxTQUFBLEtBQUE4WSxFQUFBLEdBQUE5WSxTQUFBLElBQUE4WSxFQUFBLFVBQUFvTixPQUFBcE4sRUFBQSxHQUFBOVksU0FBQSxLQUFBOFksRUFBQSxHQUFBOVksU0FBQSxLQUF3TSwwQkFBQWttQixPQUFBcE4sRUFBQSxVQUFBb04sT0FBQXBOLEVBQUEsR0FBQTlZLFNBQUEsS0FBQThZLEVBQUEsR0FBQTlZLFNBQUEsSUFBQThZLEVBQUEsVUFBQW9OLE9BQUFwTixFQUFBLEdBQUE5WSxTQUFBLEtBQUE4WSxFQUFBLEdBQUE5WSxTQUFBLElBQUE4WSxFQUFBLFVBQUFvTixPQUFBcE4sRUFBQSxHQUFBOVksU0FBQSxLQUFBOFksRUFBQSxHQUFBOVksU0FBQSxJQUFBOFksRUFBQSxVQUFBb04sT0FBQXBOLEVBQUEsR0FBQTlZLFNBQUEsS0FBQThZLEVBQUEsR0FBQTlZLFNBQUEsS0FBa1EscUJBQUFrbUIsT0FBQXhoQixLQUFBb1MsTUFBQSxHQUFBalosRUFBQSxJQUFBbUMsU0FBQSxJQUFBMEUsS0FBQW9TLE1BQUEsR0FBQWpaLEVBQUEsSUFBQW1DLFNBQUEsSUFBQTBFLEtBQUFvUyxNQUFBLEdBQUFqWixFQUFBLElBQUFtQyxTQUFBLEtBQWdJLHNCQUFBa21CLE9BQUF4aEIsS0FBQW9TLE1BQUEsR0FBQWpaLEVBQUEsSUFBQW1DLFNBQUEsSUFBQTBFLEtBQUFvUyxNQUFBLEdBQUFqWixFQUFBLElBQUFtQyxTQUFBLElBQUEwRSxLQUFBb1MsTUFBQSxHQUFBalosRUFBQSxJQUFBbUMsU0FBQSxJQUFBMEUsS0FBQW9TLE1BQUEsR0FBQWpaLEVBQUEsSUFBQW1DLFNBQUEsS0FBa0ssdUJBQUFrbUIsT0FBQXBOLEVBQUEsUUFBQUEsRUFBQSxRQUFBQSxFQUFBLFFBQTRELHdCQUFBb04sUUFBQSxJQUFBcm9CLEVBQUEsSUFBQWsrRixZQUFBLGNBQUFsK0YsRUFBQSxJQUFBaytGLFlBQUEsY0FBQWwrRixFQUFBLElBQUFrK0YsWUFBQSxTQUErSCwwQkFBQTcxRSxRQUFBLElBQUFyb0IsRUFBQSxJQUFBaytGLFlBQUEsY0FBQWwrRixFQUFBLElBQUFrK0YsWUFBQSxjQUFBbCtGLEVBQUEsSUFBQWsrRixZQUFBLGNBQUFsK0YsRUFBQSxJQUFBaytGLFlBQUEsU0FBaUssaUNBQUE3MUUsT0FBQXBtQixLQUFBZzdGLEtBQUEsR0FBQWg3RixLQUFBazhGLE1BQUF2eEYsRUFBQW93RixLQUFBLFFBQUEvNkYsS0FBQWc3RixLQUFBLEdBQUFoN0YsS0FBQWs4RixNQUFBdnhGLEVBQUFvd0YsS0FBQSxRQUFBLzZGLEtBQUFnN0YsS0FBQSxHQUFBaDdGLEtBQUFrOEYsTUFBQXZ4RixFQUFBb3dGLEtBQUEsUUFBNkosbUNBQUEzMEUsUUFBQSxJQUFBcG1CLEtBQUFnN0YsS0FBQSxJQUFBaUIsWUFBQSxjQUFBajhGLEtBQUFnN0YsS0FBQSxJQUFBaUIsWUFBQSxjQUFBajhGLEtBQUFnN0YsS0FBQSxJQUFBaUIsWUFBQSxTQUFrSyxvQ0FBQTcxRSxPQUFBcG1CLEtBQUFnN0YsS0FBQSxHQUFBaDdGLEtBQUFrOEYsTUFBQXZ4RixFQUFBb3dGLEtBQUEsUUFBQS82RixLQUFBZzdGLEtBQUEsR0FBQWg3RixLQUFBazhGLE1BQUF2eEYsRUFBQW93RixLQUFBLFFBQUEvNkYsS0FBQWc3RixLQUFBLEdBQUFoN0YsS0FBQWs4RixNQUFBdnhGLEVBQUFvd0YsS0FBQSxRQUFBLzhGLEVBQUEsS0FBdUssc0NBQUFvb0IsUUFBQSxJQUFBcG1CLEtBQUFnN0YsS0FBQSxJQUFBaUIsWUFBQSxjQUFBajhGLEtBQUFnN0YsS0FBQSxJQUFBaUIsWUFBQSxjQUFBajhGLEtBQUFnN0YsS0FBQSxJQUFBaUIsWUFBQSxjQUFBaitGLEdBQUFpK0YsWUFBQSxTQUFrTSx1QkFBQTcxRSxPQUFBcG1CLEtBQUFtN0YsS0FBQSxHQUFBbjdGLEtBQUFrOEYsTUFBQXZ4RixFQUFBc3dGLEtBQUEsUUFBQWo3RixLQUFBbTdGLEtBQUEsR0FBQW43RixLQUFBazhGLE1BQUF2eEYsRUFBQXN3RixLQUFBLFFBQUFqN0YsS0FBQW03RixLQUFBLEdBQUFuN0YsS0FBQWs4RixNQUFBdnhGLEVBQUFzd0YsS0FBQSxRQUFtSix3QkFBQTcwRSxRQUFBLElBQUFwbUIsS0FBQW03RixLQUFBLElBQUFjLFlBQUEsY0FBQWo4RixLQUFBbTdGLEtBQUEsSUFBQWMsWUFBQSxjQUFBajhGLEtBQUFtN0YsS0FBQSxJQUFBYyxZQUFBLFNBQXVKLHlCQUFBNzFFLE9BQUFwbUIsS0FBQW03RixLQUFBLEdBQUFuN0YsS0FBQWs4RixNQUFBdnhGLEVBQUFzd0YsS0FBQSxRQUFBajdGLEtBQUFtN0YsS0FBQSxHQUFBbjdGLEtBQUFrOEYsTUFBQXZ4RixFQUFBc3dGLEtBQUEsUUFBQWo3RixLQUFBbTdGLEtBQUEsR0FBQW43RixLQUFBazhGLE1BQUF2eEYsRUFBQXN3RixLQUFBLFFBQUFqOUYsRUFBQSxLQUE0Six5QkFBQW9vQixRQUFBLElBQUFwbUIsS0FBQW03RixLQUFBLElBQUFjLFlBQUEsY0FBQWo4RixLQUFBbTdGLEtBQUEsSUFBQWMsWUFBQSxjQUFBajhGLEtBQUFtN0YsS0FBQSxJQUFBYyxZQUFBLGNBQUFqK0YsR0FBQWkrRixZQUFBLFNBQXFMLGlDQUFBampGLEVBQUEsT0FBQUEsRUFBQSxPQUFBQSxFQUFBLE9BQUFoYixFQUFBLE1BQW1FQSxFQUFBcThGLE1BQUEvNkYsVUFBQTY4RixPQUFBLFNBQUF4akYsR0FBc0MzWSxLQUFBODdGLE9BQUEsR0FBQW5qRixFQUFBM1ksS0FBQWs4RixNQUFBdnhGLEVBQUFrd0YsS0FBQSxHQUFBNzZGLEtBQUFnOEYsb0JBQThEaCtGLEVBQUFxOEYsTUFBQS82RixVQUFBODhGLFNBQUEsU0FBQXpqRixHQUF3QzNZLEtBQUE4N0YsT0FBQSxHQUFBbmpGLEVBQUEzWSxLQUFBazhGLE1BQUF2eEYsRUFBQWt3RixLQUFBLEdBQUE3NkYsS0FBQWc4RixvQkFBOERoK0YsRUFBQXE4RixNQUFBLzZGLFVBQUErOEYsUUFBQSxTQUFBMWpGLEdBQXVDM1ksS0FBQTg3RixPQUFBLEdBQUFuakYsRUFBQTNZLEtBQUFrOEYsTUFBQXZ4RixFQUFBa3dGLEtBQUEsR0FBQTc2RixLQUFBZzhGLG9CQUE4RGgrRixFQUFBcThGLE1BQUEvNkYsVUFBQWc5RixTQUFBLFNBQUEzakYsR0FBd0MzWSxLQUFBODdGLE9BQUEsR0FBQW5qRixFQUFBM1ksS0FBQWs4RixNQUFBbDhGLEtBQUFuQixNQUFBLEdBQUFtQixLQUFBZzhGLG9CQUFrRWgrRixFQUFBcThGLE1BQUEvNkYsVUFBQTA4RixpQkFBQSxXQUErQyxRQUFBcmpGLEVBQUEzWSxLQUFBODdGLE9BQUE5aUYsRUFBQWhaLEtBQUE4NkYsT0FBQSxJQUFBaDNGLE1BQUE2VSxFQUFBclgsUUFBQXZELEVBQUE0YSxFQUFBclgsT0FBQSxFQUFxRXZELEdBQUEsSUFBS0EsRUFBQWliLEVBQUFqYixHQUFBNkcsS0FBQW9TLE1BQUEsSUFBQTJCLEVBQUE1YSxLQUE4QkMsRUFBQXE4RixNQUFBLzZGLFVBQUEwNkYsVUFBQSxXQUF3QyxPQUFBaDZGLEtBQUE4N0YsT0FBQSxHQUFBOTdGLEtBQUFrOEYsTUFBQWw4RixLQUFBbkIsTUFBQSxJQUErQ2IsRUFBQXE4RixNQUFBLzZGLFVBQUF1OEYsbUJBQUEsU0FBQWxqRixFQUFBSyxHQUFvRGhaLEtBQUFuQixLQUFBOFosRUFBQTNZLEtBQUFrOEYsTUFBQWxqRixHQUF5QmhiLEVBQUFxOEYsTUFBQS82RixVQUFBaTlGLFNBQUEsV0FBdUMsT0FBQXY4RixLQUFBbkIsTUFBaUJiLEVBQUFxOEYsTUFBQS82RixVQUFBazlGLFVBQUEsV0FBd0MsT0FBQXg4RixLQUFBazhGLE9BQWtCbCtGLEVBQUFxOEYsTUFBQS82RixVQUFBNDZGLFNBQUEsV0FBdUMsT0FBQWw2RixLQUFBODdGLE9BQUEsR0FBQTk3RixLQUFBazhGLE1BQUF2eEYsRUFBQWt3RixLQUFBLElBQTJDNzhGLEVBQUFxOEYsTUFBQS82RixVQUFBODZGLGVBQUEsV0FBNkMsT0FBQXA2RixLQUFBZzdGLE9BQUFoN0YsS0FBQWc3RixLQUFBL2lGLEVBQUF5aEYsWUFBQTE1RixLQUFBODdGLFNBQUE5N0YsS0FBQWc3RixLQUFBLEdBQUFoN0YsS0FBQWs4RixNQUFBdnhGLEVBQUFvd0YsS0FBQSxJQUEyRi84RixFQUFBcThGLE1BQUEvNkYsVUFBQWk3RixVQUFBLFdBQXdDLE9BQUF2NkYsS0FBQTg3RixPQUFBLEdBQUE5N0YsS0FBQWs4RixNQUFBdnhGLEVBQUFrd0YsS0FBQSxJQUEyQzc4RixFQUFBcThGLE1BQUEvNkYsVUFBQW03RixRQUFBLFdBQXNDLE9BQUF6NkYsS0FBQW5CLE9BQUE4TCxFQUFBb3dGLEtBQUEvNkYsS0FBQWc3RixPQUFBaDdGLEtBQUFnN0YsS0FBQS9pRixFQUFBeWhGLFlBQUExNUYsS0FBQTg3RixTQUFBOTdGLEtBQUFnN0YsS0FBQSxHQUFBaDdGLEtBQUFrOEYsTUFBQXZ4RixFQUFBb3dGLEtBQUEsS0FBQS82RixLQUFBbTdGLE9BQUFuN0YsS0FBQW03RixLQUFBbGpGLEVBQUEwaEYsWUFBQTM1RixLQUFBODdGLFNBQUE5N0YsS0FBQW03RixLQUFBLEdBQUFuN0YsS0FBQWs4RixNQUFBdnhGLEVBQUFzd0YsS0FBQSxLQUFxTWo5RixFQUFBcThGLE1BQUEvNkYsVUFBQTQ3RixjQUFBLFdBQTRDLE9BQUFsN0YsS0FBQW03RixPQUFBbjdGLEtBQUFtN0YsS0FBQWxqRixFQUFBMGhGLFlBQUEzNUYsS0FBQTg3RixTQUFBOTdGLEtBQUFtN0YsS0FBQSxHQUFBbjdGLEtBQUFrOEYsTUFBQXZ4RixFQUFBc3dGLEtBQUEsSUFBMkZqOUYsRUFBQXE4RixNQUFBLzZGLFVBQUFpOEYsUUFBQSxXQUFzQyxPQUFBdjdGLEtBQUE4N0YsT0FBQSxHQUFBOTdGLEtBQUFrOEYsTUFBQXZ4RixFQUFBa3dGLEtBQUEsSUFBMkM3OEYsRUFBQXE4RixNQUFBLzZGLFVBQUFtOEYsZUFBQSxXQUE2QyxPQUFBejdGLEtBQUFuQixPQUFBOEwsRUFBQW93RixLQUFBLzZGLEtBQUFnN0YsT0FBQWg3RixLQUFBZzdGLEtBQUEvaUYsRUFBQXloRixZQUFBMTVGLEtBQUE4N0YsU0FBQTk3RixLQUFBZzdGLEtBQUEsR0FBQWg3RixLQUFBazhGLE1BQUF2eEYsRUFBQW93RixLQUFBLEtBQUEvNkYsS0FBQW03RixPQUFBbjdGLEtBQUFtN0YsS0FBQWxqRixFQUFBMGhGLFlBQUEzNUYsS0FBQTg3RixTQUFBOTdGLEtBQUFtN0YsS0FBQSxHQUFBbjdGLEtBQUFrOEYsTUFBQXZ4RixFQUFBc3dGLEtBQUEsS0FBc00sSUFBQTNpRixHQUFPbWtGLFVBQUEsVUFBQUMsYUFBQSxVQUFBQyxLQUFBLFVBQUFDLFdBQUEsVUFBQUMsTUFBQSxVQUFBQyxNQUFBLFVBQUFDLE9BQUEsVUFBQUMsTUFBQSxVQUFBQyxlQUFBLFVBQUFoRCxLQUFBLFVBQUFpRCxXQUFBLFVBQUF2d0QsTUFBQSxVQUFBd3dELFVBQUEsVUFBQUMsVUFBQSxVQUFBQyxXQUFBLFVBQUFDLFVBQUEsVUFBQUMsTUFBQSxVQUFBQyxlQUFBLFVBQUFDLFNBQUEsVUFBQUMsUUFBQSxVQUFBQyxLQUFBLFVBQUFDLFNBQUEsVUFBQUMsU0FBQSxVQUFBQyxjQUFBLFVBQUFDLFNBQUEsVUFBQUMsVUFBQSxVQUFBQyxTQUFBLFVBQUFDLFVBQUEsVUFBQUMsWUFBQSxVQUFBQyxlQUFBLFVBQUFDLFdBQUEsVUFBQUMsV0FBQSxVQUFBQyxRQUFBLFVBQUFDLFdBQUEsVUFBQUMsYUFBQSxVQUFBQyxjQUFBLFVBQUFDLGNBQUEsVUFBQUMsY0FBQSxVQUFBQyxjQUFBLFVBQUFDLFdBQUEsVUFBQUMsU0FBQSxVQUFBQyxZQUFBLFVBQUFDLFFBQUEsVUFBQUMsUUFBQSxVQUFBQyxXQUFBLFVBQUFDLFVBQUEsVUFBQUMsWUFBQSxVQUFBQyxZQUFBLFVBQUFDLFFBQUEsVUFBQUMsVUFBQSxVQUFBQyxXQUFBLFVBQUFDLEtBQUEsVUFBQUMsVUFBQSxVQUFBQyxLQUFBLFVBQUF0RixNQUFBLFVBQUF1RixZQUFBLFVBQUFDLEtBQUEsVUFBQUMsU0FBQSxVQUFBQyxRQUFBLFVBQUFDLFVBQUEsVUFBQUMsT0FBQSxVQUFBQyxNQUFBLFVBQUFDLE1BQUEsVUFBQUMsU0FBQSxVQUFBQyxjQUFBLFVBQUFDLFVBQUEsVUFBQUMsYUFBQSxVQUFBQyxVQUFBLFVBQUFDLFdBQUEsVUFBQUMsVUFBQSxVQUFBQyxxQkFBQSxVQUFBQyxVQUFBLFVBQUFDLFdBQUEsVUFBQUMsVUFBQSxVQUFBQyxVQUFBLFVBQUFDLFlBQUEsVUFBQUMsY0FBQSxVQUFBQyxhQUFBLFVBQUFDLGVBQUEsVUFBQUMsZUFBQSxVQUFBQyxlQUFBLFVBQUFDLFlBQUEsVUFBQUMsS0FBQSxVQUFBQyxVQUFBLFVBQUFDLE1BQUEsVUFBQUMsUUFBQSxVQUFBQyxPQUFBLFVBQUFDLGlCQUFBLFVBQUFDLFdBQUEsVUFBQUMsYUFBQSxVQUFBQyxhQUFBLFVBQUFDLGVBQUEsVUFBQUMsZ0JBQUEsVUFBQUMsa0JBQUEsVUFBQUMsZ0JBQUEsVUFBQUMsZ0JBQUEsVUFBQUMsYUFBQSxVQUFBQyxVQUFBLFVBQUFDLFVBQUEsVUFBQUMsU0FBQSxVQUFBQyxZQUFBLFVBQUFDLEtBQUEsVUFBQUMsUUFBQSxVQUFBQyxNQUFBLFVBQUFDLFVBQUEsVUFBQUMsT0FBQSxVQUFBQyxVQUFBLFVBQUFDLE9BQUEsVUFBQUMsY0FBQSxVQUFBQyxVQUFBLFVBQUFDLGNBQUEsVUFBQUMsY0FBQSxVQUFBQyxXQUFBLFVBQUFDLFVBQUEsVUFBQUMsS0FBQSxVQUFBdjNELEtBQUEsVUFBQXczRCxLQUFBLFVBQUFDLFdBQUEsVUFBQUMsT0FBQSxVQUFBckksSUFBQSxVQUFBc0ksVUFBQSxVQUFBQyxVQUFBLFVBQUFDLFlBQUEsVUFBQUMsT0FBQSxVQUFBQyxXQUFBLFVBQUFDLFNBQUEsVUFBQUMsU0FBQSxVQUFBQyxPQUFBLFVBQUFDLE9BQUEsVUFBQUMsUUFBQSxVQUFBQyxVQUFBLFVBQUFDLFVBQUEsVUFBQUMsVUFBQSxVQUFBQyxLQUFBLFVBQUFDLFlBQUEsVUFBQUMsVUFBQSxVQUFBQyxJQUFBLFVBQUFDLEtBQUEsVUFBQUMsUUFBQSxVQUFBQyxPQUFBLFVBQUFDLFVBQUEsVUFBQUMsT0FBQSxVQUFBQyxNQUFBLFVBQUF4NEQsTUFBQSxVQUFBeTRELFdBQUEsVUFBQUMsT0FBQSxVQUFBQyxZQUFBLFdBQTgyRnRxRCxFQUFBLE1BQUFyOUMsRUFBQSxZQUFvQjBFLEVBQUEsZ0NBQUFxZixFQUFBLElBQUE2akYsT0FBQWxqRyxFQUFBbzBDLE9BQUEsS0FBQTc0QyxHQUFtRTRuRyxLQUFBLHFDQUFBQyxLQUFBLCtDQUFBQyxLQUFBLDhDQUE0SUMsS0FBQSwyREFBZ0U3SyxJQUFBLElBQUF5SyxRQUFBLFVBQUE1bkcsRUFBQTg0QyxPQUFBLElBQUE5NEMsRUFBQTg0QyxPQUFBLElBQUE5NEMsRUFBQTg0QyxPQUFBLFFBQUEvMEMsS0FBQXM1QyxFQUFBdkUsUUFBQSxLQUFBbXZELFlBQUEsSUFBQUwsUUFBQSxVQUFBN2pGLEVBQUErMEIsT0FBQSxJQUFBLzBCLEVBQUErMEIsT0FBQSxJQUFBLzBCLEVBQUErMEIsT0FBQSxRQUFBLzBDLEtBQUFzNUMsRUFBQXZFLFFBQUEsS0FBQW92RCxLQUFBLElBQUFOLFFBQUEsV0FBQTVuRyxFQUFBODRDLE9BQUEsSUFBQTk0QyxFQUFBODRDLE9BQUEsSUFBQTk0QyxFQUFBODRDLE9BQUEsSUFBQXAwQyxFQUFBbzBDLE9BQUEsUUFBQS8wQyxLQUFBczVDLEVBQUF2RSxRQUFBLEtBQUFxdkQsYUFBQSxJQUFBUCxRQUFBLFdBQUE3akYsRUFBQSswQixPQUFBLElBQUEvMEIsRUFBQSswQixPQUFBLElBQUEvMEIsRUFBQSswQixPQUFBLElBQUFwMEMsRUFBQW8wQyxPQUFBLFFBQUEvMEMsS0FBQXM1QyxFQUFBdkUsUUFBQSxLQUFBeWtELElBQUEsSUFBQXFLLFFBQUEsVUFBQTVuRyxFQUFBODRDLE9BQUEsSUFBQS8wQixFQUFBKzBCLE9BQUEsSUFBQS8wQixFQUFBKzBCLE9BQUEsUUFBQS8wQyxLQUFBczVDLEVBQUF2RSxRQUFBLEtBQUFzdkQsS0FBQSxJQUFBUixRQUFBLFdBQUE1bkcsRUFBQTg0QyxPQUFBLElBQUEvMEIsRUFBQSswQixPQUFBLElBQUEvMEIsRUFBQSswQixPQUFBLElBQUFwMEMsRUFBQW8wQyxPQUFBLFFBQUEvMEMsS0FBQXM1QyxFQUFBdkUsUUFBQSxLQUFBdWtELElBQUEsSUFBQXVLLFFBQUEsVUFBQTVuRyxFQUFBODRDLE9BQUEsSUFBQS8wQixFQUFBKzBCLE9BQUEsSUFBQS8wQixFQUFBKzBCLE9BQUEsUUFBQS8wQyxLQUFBczVDLEVBQUF2RSxRQUFBLEtBQUF1dkQsS0FBQSxJQUFBVCxRQUFBLFdBQUE1bkcsRUFBQTg0QyxPQUFBLElBQUEvMEIsRUFBQSswQixPQUFBLElBQUEvMEIsRUFBQSswQixPQUFBLElBQUFwMEMsRUFBQW8wQyxPQUFBLFFBQUEvMEMsS0FBQXM1QyxFQUFBdkUsUUFBQSxNQUEweEJ4NEMsRUFBQXE4RixNQUFBMEIsYUFBQSxTQUFBcGpGLEVBQUFLLEVBQUFqYixFQUFBZzlDLEdBQXVDLElBQUFyOUMsRUFBQTBFLEVBQUFrQixVQUFBaEMsT0FBQW1nQixFQUFBemhCLEtBQUFuQixLQUFBZixFQUFBa0MsS0FBQWs4RixNQUFBejZFLEdBQUF0aUIsS0FBMEQsR0FBQWlELEdBQUEsR0FBUyxJQUFBakQsRUFBQSxHQUFBd1osRUFBQTdhLEVBQUEsR0FBQXFCLEVBQUEsR0FBQTZaLEVBQUFsYixFQUFBLEdBQUFxQixFQUFBLEdBQUFwQixFQUFBRCxFQUFBLEdBQUFxQixFQUFBLG9CQUFBNDdDLElBQUFqOUMsRUFBQSxLQUFBSixFQUFBeUIsRUFBQW1DLE9BQUEsRUFBc0Y1RCxHQUFBLElBQUtBLEVBQUEsQ0FBSyxJQUFBUyxFQUFBZ0IsRUFBQXpCLEdBQVdTLEVBQUEsRUFBQWdCLEVBQUF6QixHQUFBLEVBQUFTLEVBQUEsSUFBQWdCLEVBQUF6QixHQUFBLEdBQXlCLE9BQUErakIsSUFBQTlXLEVBQUFzd0YsSUFBQWhqRixFQUFBd2hGLFlBQUF0NkYsR0FBQXNpQixJQUFBOVcsRUFBQW93RixJQUFBOWlGLEVBQUFzaEYsWUFBQXA2RixLQUErRCxPQUFBaUQsR0FBQSxpQkFBQXVXLEVBQUEsQ0FBOEIsSUFBQW5aLEVBQUFtWixFQUFBakQsT0FBQTNELGNBQTZCLEdBQUF1RyxFQUFBOVksR0FBQSxPQUFBeEIsRUFBQXE4RixNQUFBMEIsYUFBQWwrRixLQUFBbUMsS0FBQXNZLEVBQUE5WSxJQUFvRCxHQUFBN0IsRUFBQTRuRyxLQUFBdmhHLEtBQUF4RSxHQUFBLE9BQUFMLEVBQUF4QixFQUFBNG5HLEtBQUFsc0UsS0FBQTc1QixHQUFBa0ksTUFBQSxHQUFBaVAsSUFBQSxTQUFBZ0MsR0FBbUUsT0FBQTFFLFNBQUEwRSxJQUFBLFdBQTRCLEtBQUF4WixFQUFXLEdBQUF4QixFQUFBOG5HLEtBQUF6aEcsS0FBQXhFLEdBQUEsT0FBQUwsRUFBQXhCLEVBQUE4bkcsS0FBQXBzRSxLQUFBNzVCLEdBQUFrSSxNQUFBLEdBQUFpUCxJQUFBLFNBQUFnQyxHQUFtRSxPQUFBMUUsU0FBQTBFLEVBQUEsV0FBMEIsS0FBQXhaLEVBQVcsR0FBQXhCLEVBQUE2bkcsS0FBQXhoRyxLQUFBeEUsR0FBQSxPQUFBTCxFQUFBeEIsRUFBQTZuRyxLQUFBbnNFLEtBQUE3NUIsR0FBQWtJLE1BQUEsR0FBQWlQLElBQUEsU0FBQWdDLEdBQW1FLE9BQUExRSxTQUFBMEUsSUFBQSxVQUE4QixHQUFBaGIsRUFBQStuRyxLQUFBMWhHLEtBQUF4RSxHQUFBLE9BQUFMLEVBQUF4QixFQUFBK25HLEtBQUFyc0UsS0FBQTc1QixHQUFBa0ksTUFBQSxHQUFBaVAsSUFBQSxTQUFBZ0MsR0FBbUUsT0FBQTFFLFNBQUEwRSxFQUFBLFVBQTRCLEdBQUFoYixFQUFBazlGLElBQUE3MkYsS0FBQXhFLEdBQUEsT0FBQUwsRUFBQXhCLEVBQUFrOUYsSUFBQXhoRSxLQUFBNzVCLEdBQUFrSSxNQUFBLEdBQUFpUCxJQUFBLFNBQUFnQyxHQUFpRSxPQUFBQSxFQUFBLE9BQWEsS0FBQXhaLEVBQVcsR0FBQXhCLEVBQUFnb0csWUFBQTNoRyxLQUFBeEUsR0FBQSxPQUFBTCxFQUFBeEIsRUFBQWdvRyxZQUFBdHNFLEtBQUE3NUIsR0FBQWtJLE1BQUEsR0FBQWlQLElBQUEsU0FBQWdDLEdBQWlGLE9BQUFyRixXQUFBcUYsR0FBQSxPQUF5QixLQUFBeFosRUFBVyxHQUFBeEIsRUFBQWlvRyxLQUFBNWhHLEtBQUF4RSxHQUFBLE9BQUFMLEVBQUF4QixFQUFBaW9HLEtBQUF2c0UsS0FBQTc1QixHQUFBa0ksTUFBQSxHQUFBaVAsSUFBQSxTQUFBZ0MsRUFBQUssR0FBcUUsV0FBQUEsRUFBQTFGLFdBQUFxRixLQUFBLE1BQW1DLEdBQUFoYixFQUFBa29HLGFBQUE3aEcsS0FBQXhFLEdBQUEsT0FBQUwsRUFBQXhCLEVBQUFrb0csYUFBQXhzRSxLQUFBNzVCLEdBQUFrSSxNQUFBLEdBQUFpUCxJQUFBLFNBQUFnQyxFQUFBSyxHQUFxRixXQUFBQSxFQUFBMUYsV0FBQXFGLEdBQUFyRixXQUFBcUYsR0FBQSxNQUErQyxHQUFBaGIsRUFBQXM5RixJQUFBajNGLEtBQUF4RSxJQUFBTCxFQUFBeEIsRUFBQXM5RixJQUFBNWhFLEtBQUE3NUIsR0FBQWtJLE1BQUEsR0FBQWlQLElBQUEsU0FBQWdDLEVBQUFLLEdBQTZELFdBQUFBLEVBQUEvRSxTQUFBMEUsRUFBQSxRQUFBMUUsU0FBQTBFLEVBQUEsV0FBbUQsS0FBQWhiLEVBQUFtb0csS0FBQTloRyxLQUFBeEUsS0FBQUwsRUFBQXhCLEVBQUFtb0csS0FBQXpzRSxLQUFBNzVCLEdBQUFrSSxNQUFBLEdBQUFpUCxJQUFBLFNBQUFnQyxFQUFBSyxHQUF1RSxXQUFBQSxFQUFBL0UsU0FBQTBFLEVBQUEsWUFBQUssRUFBQTFGLFdBQUFxRixHQUFBMUUsU0FBQTBFLEVBQUEsWUFBdUV4WixJQUFBd1gsSUFBQSxTQUFBZ0MsR0FBdUIsT0FBQS9ULEtBQUE4SyxJQUFBOUssS0FBQXNYLElBQUF2RCxFQUFBLFNBQWlDclgsT0FBQSxPQUFBMlcsRUFBQXdoRixZQUFBdDZGLEdBQW1DLEdBQUF4QixFQUFBbzlGLElBQUEvMkYsS0FBQXhFLElBQUFMLEVBQUF4QixFQUFBbzlGLElBQUExaEUsS0FBQTc1QixHQUFBa0ksTUFBQSxHQUFBaVAsSUFBQSxTQUFBZ0MsRUFBQUssR0FBNkQsV0FBQUEsRUFBQS9FLFNBQUEwRSxFQUFBLFFBQUExRSxTQUFBMEUsRUFBQSxXQUFtRCxLQUFBaGIsRUFBQW9vRyxLQUFBL2hHLEtBQUF4RSxLQUFBTCxFQUFBeEIsRUFBQW9vRyxLQUFBMXNFLEtBQUE3NUIsR0FBQWtJLE1BQUEsR0FBQWlQLElBQUEsU0FBQWdDLEVBQUFLLEdBQXVFLFdBQUFBLEVBQUEvRSxTQUFBMEUsRUFBQSxZQUFBSyxFQUFBMUYsV0FBQXFGLEdBQUExRSxTQUFBMEUsRUFBQSxXQUF1RXhaLEVBQUFtQyxPQUFBLENBQWEsSUFBQTVELEVBQUF5QixFQUFBbUMsT0FBQSxFQUFpQjVELEdBQUEsSUFBS0EsRUFBQXlCLEVBQUF6QixHQUFBa0gsS0FBQThLLElBQUE5SyxLQUFBc1gsSUFBQS9jLEVBQUF6QixHQUFBLE1BQXNDLE9BQUF1YSxFQUFBc2hGLFlBQUFwNkYsR0FBd0JBLEdBQUEsYUFBWSxDQUFLLE9BQUFpRCxHQUFBLElBQUFBLEdBQUEsaUJBQUF1VyxFQUFBLFVBQUExWSxNQUFBcUQsVUFBQSx3Q0FBc0duRSxFQUFBLEdBQUF3WixFQUFBN2EsRUFBQSxHQUFBcUIsRUFBQSxHQUFBd1osRUFBQTdhLEVBQUEsR0FBQXFCLEVBQUEsR0FBQXdaLEVBQUE3YSxFQUFBLEdBQUFxQixFQUFBLG9CQUFBNlosSUFBQWxiLEVBQUEsS0FBQXFCLElBQUF3WCxJQUFBLFNBQUFnQyxHQUF5RixPQUFBL1QsS0FBQThLLElBQUE5SyxLQUFBc1gsSUFBQXZELEVBQUEsUUFBbUMsT0FBQXhaLEdBQVM2WixFQUFBeGIsUUFBQVEsRUFBQXE4RixRQUFxQnFCLG9CQUFBLEdBQUE5QixlQUFBLEdBQUFvTSxxQkFBQSxLQUFpRXgwQixJQUFBLFNBQUE3NEQsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsZ0JBQUFoTyxFQUFBZ08sRUFBQSxxQkFBaURBLEVBQUEsY0FBQTNhLEVBQUFzQixVQUFBMm1HLFdBQUEsV0FBa0QsT0FBQTNpRyxVQUFBLGFBQUF0RixFQUFBa29HLE1BQUFsbUcsS0FBQW1tRyxNQUFBN2lHLFVBQUEsT0FBQXRELEtBQUF1dEMsTUFBQXZ0QyxLQUFBK3VCLFFBQUEvdUIsS0FBQW9tRyxVQUFBSCxXQUFBMytGLE1BQUF0SCxLQUFBb21HLFVBQUE5aUcsV0FBQXRELE1BQXlKaEMsRUFBQXNCLFVBQUErdkIsTUFBQSxXQUE4QixPQUFBcnZCLEtBQUFvbUcsVUFBQS8yRSxRQUFBcnZCLE1BQW1DaEMsRUFBQXNCLFVBQUErbUcsVUFBQSxTQUFBMXRGLEVBQUFLLEVBQUFqYixFQUFBa2EsRUFBQUssR0FBMkMsR0FBQXRhLEVBQUE4N0Ysb0JBQUEsWUFBQXgyRixXQUFBcVYsSUFBQWhPLEVBQUFrd0YsS0FBQWxpRixJQUFBaE8sRUFBQW93RixLQUFBcGlGLElBQUFoTyxFQUFBc3dGLElBQUEsQ0FBaUZqN0YsS0FBQTI2RixXQUFBaGlGLEVBQWtCLElBQUFvaUMsRUFBQS82QyxLQUFBNDZGLFlBQUFqaUYsR0FBMEIsSUFBQXJWLFVBQUFoQyxRQUFBeTVDLEVBQUEsR0FBQS9oQyxFQUFBK2hDLEVBQUEsR0FBQS9oQyxFQUFBK2hDLEVBQUEsR0FBQS9oQyxFQUFBK2hDLEVBQUEsR0FBQS9oQyxHQUFBLElBQUExVixVQUFBaEMsUUFBQXk1QyxFQUFBLEdBQUEvaEMsRUFBQStoQyxFQUFBLEdBQUFoOUMsRUFBQWc5QyxFQUFBLEdBQUE5aUMsR0FBQSxJQUFBM1UsVUFBQWhDLFNBQUF5NUMsRUFBQSxHQUFBL2hDLEVBQUEraEMsRUFBQSxHQUFBaDlDLEVBQUFnOUMsRUFBQSxHQUFBOWlDLEVBQUE4aUMsRUFBQSxHQUFBemlDLEdBQW1KLE9BQUF0WSxNQUFZaEMsRUFBQXNCLFVBQUEyaEQsS0FBQSxXQUE2QixPQUFBamhELEtBQUFvbUcsVUFBQUUsYUFBQSxlQUFBdG1HLEtBQUFvbUcsVUFBQUUsYUFBQSxjQUFBdG1HLEtBQUFvbUcsVUFBQW5sRCxLQUFBMzVDLE1BQUF0SCxLQUFBb21HLFVBQUE5aUcsV0FBQXRELE1BQXFKaEMsRUFBQXNCLFVBQUFpbkcsT0FBQSxXQUErQixPQUFBdm1HLEtBQUFvbUcsVUFBQUUsYUFBQSxjQUFBdG1HLE1BQXNEaEMsRUFBQXNCLFVBQUFrbkcsU0FBQSxXQUFpQyxPQUFBeG1HLEtBQUFvbUcsVUFBQUUsYUFBQSxnQkFBQXRtRyxNQUF3RGhDLEVBQUFzQixVQUFBa3RELE9BQUEsV0FBK0IsT0FBQXhzRCxLQUFBb21HLFVBQUFFLGFBQUEsaUJBQUF0bUcsS0FBQW9tRyxVQUFBRSxhQUFBLGdCQUFBdG1HLEtBQUFvbUcsVUFBQTU1QyxPQUFBbGxELE1BQUF0SCxLQUFBb21HLFVBQUE5aUcsV0FBQXRELE1BQTJKZ1osRUFBQXhiLFFBQUFRLElBQWUwOUYsb0JBQUEsR0FBQTlCLGVBQUEsR0FBQWdDLGFBQUEsS0FBeURucUIsSUFBQSxTQUFBOTRELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUE0RyxLQUFBQyxHQUFjbVUsRUFBQXhiLFNBQVdpcEcsSUFBQSxNQUFBQyxNQUFBLFFBQUFDLE1BQUEsVUFBQUMsTUFBQSxZQUFBQyxLQUFBLFVBQUFDLEtBQUEsT0FBQUMsS0FBQSxPQUFBQyxLQUFBLE9BQUFDLFFBQUFqcEcsRUFBQSxFQUFBNkcsR0FBQTdHLEVBQUFrcEcsV0FBQWxwRyxFQUFBLEVBQUFtcEcsSUFBQSxFQUFBbnBHLEVBQUFvcEcsT0FBQSxFQUFBcHBHLEVBQUFxcEcsUUFBQSxVQUFBQyxRQUFBLFVBQUFDLFdBQUF2cEcsRUFBQSxJQUFBd3BHLFdBQUEsSUFBQXhwRyxFQUFBeXBHLE9BQUEsU0FBQUMsUUFBQSxVQUFBQyxPQUFBLFNBQUFDLE1BQUEsUUFBQUMsS0FBQSxPQUFBQyxPQUFBLFNBQUFDLElBQUEsTUFBQUMsT0FBQSxTQUFBQyxTQUFBLGFBQUFDLE9BQUEsRUFBQUMsTUFBQSxFQUFBQyxXQUFBLEVBQUFDLFVBQUEsRUFBQUMsVUFBQSxFQUFBQyxhQUFBLEVBQUFDLGVBQUEsRUFBQUMsTUFBQSxRQUFBQyxXQUFBLGFBQUFDLE1BQUEsUUFBQUMsS0FBQSxPQUFBQyxNQUFBLFFBQUFDLElBQUEsTUFBQUMsUUFBQSxTQUFBQyxPQUFBLE9BQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUF0TyxJQUFBLE1BQUFFLElBQUEsTUFBQUUsSUFBQSxNQUFBbU8sS0FBQSxPQUFBQyxJQUFBLEdBQUFDLFVBQUEsRUFBQUMsUUFBQSxHQUFBQyxPQUFBLEdBQUFDLFdBQUEsR0FBQUMsTUFBQSxHQUFBQyxPQUFBLEdBQUFDLFdBQUEsR0FBQUMsT0FBQSxHQUFBQyxPQUFBLEdBQUFDLFlBQUEsR0FBQUMsTUFBQSxHQUFBQyxJQUFBLEVBQUFDLFNBQUEsR0FBQUMsTUFBQSxjQUFBQyxJQUFBLFVBQUFDLFFBQUEsU0FBQUMsU0FBQSxVQUFBQyxXQUFBLGFBQUFDLFVBQUEsWUFBQUMsU0FBQSxXQUFBQyxPQUFBLFNBQUFDLFFBQUEsT0FBQUMsUUFBQSxVQUFBQyxXQUFBLGFBQUFDLFdBQUEsYUFBQUMsTUFBQSxjQUFBQyxLQUFBLGFBQUFDLFVBQUEsWUFBQUMsS0FBQSxPQUFBQyxPQUFBLFNBQUFDLE9BQUEsU0FBQUMsVUFBQSxZQUFBQyxPQUFBLFNBQUFDLE1BQUEsUUFBQUMsS0FBQSxPQUFBcGIsT0FBQSxTQUFBcEIsT0FBQSxTQUFBSyxLQUFBLE9BQUFvYyxtQkFBQSxVQUFBQyxrQkFBQSxLQUFBQyxZQUFBLFNBQUFDLE9BQUEsU0FBQUMsVUFBQSxZQUFBQyxPQUFBLFNBQUFDLE1BQUEsUUFBQUMsT0FBQSxTQUFBQyxLQUFBLE9BQUFDLFFBQUEsVUFBQUMsVUFBQSxZQUFBQyxRQUFBLFVBQUFDLE9BQUEsU0FBQUMsTUFBQSxRQUFBQyxPQUFBLFNBQUFDLFVBQUEsWUFBQUMsU0FBQSxXQUFBQyxnQkFBQSxVQUFBQyxjQUFBLFVBQUFDLEtBQUEsT0FBQUMsS0FBQSxhQUE4bURuN0IsSUFBQSxTQUFBLzRELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLFNBQUFDLElBQWEsT0FBQW9JLE9BQUEwbUcsWUFBQTkxRSxTQUFBKzFFLGlCQUFBLzFFLFNBQUErMUUsZ0JBQUFDLGFBQUFoMkUsU0FBQWk5RCxNQUFBajlELFNBQUFpOUQsS0FBQStZLGFBQUEsRUFBc0ksU0FBQXJpRyxJQUFhLE9BQUF2RSxPQUFBNm1HLGFBQUFqMkUsU0FBQSsxRSxpQkFBQS8xRSxTQUFBKzFFLGdCQUFBRyxjQUFBbDJFLFNBQUFpOUQsTUFBQWo5RCxTQUFBaTlELEtBQUFpWixjQUFBLEVBQ3grOEIsSUFBQW55RCxFQUFBcGlDLEVBQUEsVUFBQWpiLEVBQUFpYixFQUFBLGVBQUF2VyxHQUFBMUUsRUFBQWlwRyxNQUFBanBHLEVBQUFrcEcsTUFBQWxwRyxFQUFBbXBHLEtBQUFucEcsRUFBQW9wRyxLQUFBcHBHLEVBQUFxcEcsS0FBQXJwRyxFQUFBc3BHLE1BQXFGanNELEVBQUF6N0MsVUFBQTZ0RyxXQUFBLEVBQUFweUQsRUFBQXo3QyxVQUFBOHRHLGVBQUFobkcsT0FBQWluRyxZQUFBN25HLE1BQUF1MUMsRUFBQXo3QyxVQUFBZ3VHLGlCQUFBLEdBQTZHLElBQUE3ckYsRUFBQXJiLE9BQUFtbkcsTUFBbUJ4eUQsRUFBQXo3QyxVQUFBaXVHLE1BQUEsV0FBNkJqcUcsVUFBQWhDLE9BQUFpUCxRQUFBbkwsSUFBQWtDLE1BQUFpSixRQUFBak4sV0FBQW1lLEtBQTBEczVCLEVBQUF6N0MsVUFBQWt1RyxXQUFBLEVBQUF6eUQsRUFBQXo3QyxVQUFBbXVHLFFBQUF6MkUsU0FBQTAyRSxXQUFBM3lELEVBQUF6N0MsVUFBQXF1RyxPQUFBLFNBQUFoMUYsRUFBQUssRUFBQWpiLEdBQXFHLElBQUFDLEVBQUEsT0FBQTJNLEVBQUEzSyxLQUFBNHRHLFlBQUFDLElBQW9DLEdBQUF6ckcsRUFBQWpCLFFBQUF3WCxJQUFBLEVBQUEzYSxFQUFBMmEsT0FBdUIsb0JBQUFBLEVBQUEsQ0FBNEIsSUFBQVYsRUFBQSxHQUFTZSxHQUFBamIsR0FBQSxpQkFBQWliLEdBQUEsaUJBQUFqYixJQUFBa2EsRUFBQWUsRUFBQSxJQUFBamIsR0FBQUMsRUFBQSxZQUFBMmEsRUFBQStxQyxVQUFBLG1CQUFBL3FDLEVBQUErcUMsVUFBQSxZQUFBL3FDLEVBQUEsS0FBQVYsRUFBQSwwREFBQWpVLEtBQUEyVSxHQUFBLE9BQUFBLEVBQUEsS0FBQVYsRUFBQSxTQUFBVSxFQUFxT2hPLEVBQUFtakcsTUFBQUgsT0FBQTN2RyxHQUFpQis4QyxFQUFBejdDLFVBQUF5dUcsVUFBQSxTQUFBcDFGLEdBQW1DLE9BQUFvaUMsRUFBQSsrQyxvQkFBQSxZQUFBeDJGLFdBQUEsaUJBQUFxVixLQUFBLEVBQUEzWSxLQUFBbXRHLFlBQUFudEcsS0FBQXNtRyxhQUFBLG1CQUFBM3RGLEdBQUEzWSxLQUFBZ3VHLGFBQUFodUcsT0FBNkorNkMsRUFBQXo3QyxVQUFBMnVHLGFBQUEsV0FBcUMsT0FBQWp1RyxLQUFBK3RHLGFBQXdCaHpELEVBQUF6N0MsVUFBQTR1RyxhQUFBLFNBQUF2MUYsR0FBc0MsT0FBQTNZLEtBQUErdEcsVUFBQXAxRixJQUF5Qm9pQyxFQUFBejdDLFVBQUE2dUcsU0FBQSxXQUFpQ251RyxLQUFBNHRHLFlBQUFDLElBQUFDLE1BQUFILE9BQUEsUUFBeUM1eUQsRUFBQXo3QyxVQUFBOHVHLGFBQUFDLE9BQUE5Z0UsTUFBQXdOLEVBQUF6N0MsVUFBQWd2RyxjQUFBRCxPQUFBdC9FLE9BQUFnc0IsRUFBQXo3QyxVQUFBaXZHLFlBQUF2d0csSUFBQSs4QyxFQUFBejdDLFVBQUFrdkcsYUFBQTdqRyxJQUFBb3dDLEVBQUF6N0MsVUFBQW12RyxVQUFBLFNBQUE5MUYsR0FBMEszWSxLQUFBc21HLGFBQUEsY0FBQXRvRyxLQUFBZ0MsS0FBQXNtRyxhQUFBLGVBQUEzN0YsS0FBMkUsSUFBQXFPLEVBQUFqYixFQUFBaUMsS0FBQTB1RyxVQUFBdG9HLE9BQUFwRyxLQUFtQyxtQkFBQWpDLEVBQUE0d0cscUJBQUEsS0FBQTMxRixFQUFBamIsRUFBQTR3RyxjQUFBaDJGLEtBQUFLLEdBQUFMLEVBQUFpMkYsbUJBQTZGN3pELEVBQUF6N0MsVUFBQWl1QyxNQUFBLEVBQUF3TixFQUFBejdDLFVBQUF5dkIsT0FBQSxFQUFBZ3NCLEVBQUF6N0MsVUFBQXV2RyxXQUFBLFNBQUFsMkYsR0FBNkUsR0FBQW9pQyxFQUFBKytDLG9CQUFBLGFBQUF4MkYsZ0JBQUEsSUFBQXFWLEVBQUEsT0FBQXFlLFNBQUE4M0UsbUJBQUE5M0UsU0FBQSszRSx5QkFBQS8zRSxTQUFBZzRFLHNCQUFBaDRFLFNBQUFpNEUsb0JBQTZMdDJGLEVBRHE0NUIsU0FBQUEsR0FBYyxLQUFBcWUsU0FBQWs0RSxtQkFBQWw0RSxTQUFBbTRFLHlCQUFBbjRFLFNBQUFvNEUsc0JBQUFwNEUsU0FBQXE0RSxxQkFBQSxVQUFBcHZHLE1BQUEsMkNBQzlpK0IwWSxFQUFBMjJGLGtCQUFBMzJGLEVBQUEyMkYsb0JBQUEzMkYsRUFBQTQyRixxQkFBQTUyRixFQUFBNDJGLHVCQUFBNTJGLEVBQUE2MkYsd0JBQUE3MkYsRUFBQTYyRiwwQkFBQTcyRixFQUFBODJGLHFCQUFBOTJGLEVBQUE4MkYsc0JBQTJwRXgzRixDQUFBK2UsU0FBQSsxRSxpQkFBLzhELzFFLFNBQUEwNEUsZUFBQTE0RSxTQUFBMDRFLGlCQUFBMTRFLFNBQUEyNEUsb0JBQUEzNEUsU0FBQTI0RSxzQkFBQTM0RSxTQUFBNDRFLHFCQUFBNTRFLFNBQUE0NEUsdUJBQUE1NEUsU0FBQTY0RSxrQkFBQTc0RSxTQUFBNjRFLG9CQUFpL0Q5MEQsRUFBQXo3QyxVQUFBd3dHLGFBQUEsU0FBQW4zRixHQUFzRixJQUFBSyxFQUFNLE9BQXREK2hDLEVBQUErK0Msb0JBQUEsZUFBQXgyRixXQUFzRCxpQkFBQXFWLE9BQUEzWSxLQUFBK3ZHLGdCQUFBL3ZHLEtBQUErdkcsY0FBQXAzRixFQUFBM1ksS0FBQWd3RyxjQUFBLEdBQUFoM0YsRUFBQWhaLFVBQUFpd0csYUFBQWp3RyxLQUFBdXRDLE1BQUF2dEMsS0FBQSt1QixRQUFBLElBQUEvVixFQUFBaFosS0FBQSt2RyxjQUFBLzJGLEdBQTBLK2hDLEVBQUF6N0MsVUFBQTR3RyxlQUFBLFdBQXVDLE9BQUE5cEcsT0FBQStwRyxrQkFBK0JwMUQsRUFBQXo3QyxVQUFBOHdHLE9BQUEsV0FBK0IsT0FBQS9wRCxTQUFBUixNQUFxQjlLLEVBQUF6N0MsVUFBQSt3RyxXQUFBLFdBQW1DLE9BQUFocUQsU0FBQWlxRCxTQUFBanZHLE1BQUEsS0FBQTRrQixPQUFBLFNBQUF0TixHQUF1RCxXQUFBQSxLQUFlb2lDLEVBQUF6N0MsVUFBQWl4RyxhQUFBLFdBQXFDLFFBQUE1M0YsRUFBQUssRUFBQSxrQ0FBQWpiLEtBQW1ELE9BQUE0YSxFQUFBSyxFQUFBcWdCLEtBQUFndEIsU0FBQXo0QixVQUFrQ2pWLEVBQUFyUSxRQUFBMFEsRUFBQXczRixXQUFBeDNGLEVBQUF3M0YsWUFBQXp5RyxFQUFBNGEsRUFBQSxJQUFBQSxFQUFBLEdBQW1ELE9BQUE1YSxHQUFTaWIsRUFBQXhiLFFBQUF1OUMsSUFBZTAxRCxjQUFBLEdBQUFDLFNBQUEsS0FBNkIvK0IsSUFBQSxTQUFBaDVELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLFVBQWtCQSxFQUFBLGVBQWlCM2EsRUFBQTg3RixvQkFBQTk3RixFQUFBMnlHLHVCQUFBLGFBQTRELElBQUFobUcsRUFBQSxLQUFBMk4sRUFBQSxXQUE4SixJQUFBVSxLQUFRamIsRUFBQSxTQUFBNGEsR0FBZSxPQUFBdmEsT0FBQTIwRixvQkFBQXA2RSxHQUFBc04sT0FBQSxTQUFBdE4sR0FBd0QsY0FBQUEsRUFBQSxJQUFBQSxLQUFBSyxNQUFBTCxJQUFBLFFBQTRDaEMsSUFBQSxTQUFBcUMsR0FBa0IsSUFBQWpiLEVBQU0sT0FBQUEsRUFBQSxtQkFBQTRhLEVBQUFLLEdBQUEsV0FBQUEsTUFBQW03RSxjQUFBLHVCQUF1RmwyRixLQUFBK2EsRUFBQS9LLEtBQUFsUSxPQUFrQjRNLEtBQUF5YixPQUFBcm9CLEVBQUFDLEVBQUFzQixXQUFBdkIsRUFBQTRhLEVBQUEsa0JBQUFndkMsS0FBQSxTQUFBaHZDLEVBQUFLLEdBQXFFLE9BQUFBLEVBQUEvYSxLQUFBcUQsT0FBQXFYLEVBQUExYSxLQUFBcUQsVUFBcUN5NUMsRUFBQSxTQUFBcGlDLEVBQUFLLEdBQWlCQSxNQUFBekksUUFBQW5MLElBQUFsRyxLQUFBcVIsVUFBQTVGLEdBQUEyTixJQUFBM04sRUFBQWltRyxLQUFBLFNBQUE3eUcsR0FBMkQsR0FBQTRhLEVBQUE0bEQsU0FBQSxPQUFBNWxELEVBQUE0bEQsUUFBQWwrRCxNQUFBLE9BQUF0QyxFQUFBRSxLQUFBLGNBQUErYSxFQUFBLG1DQUFBamIsRUFBQUUsTUFBQSxhQUFBRixFQUFBa1EsS0FBQSxXQUFBbFEsRUFBQWtRLEtBQUEsMk9BQWdRalEsRUFBQXNCLFVBQUF1eEcsOEJBQUE5MUQsRUFBQSxhQUFBL2pCLFNBQUEydUIsYUFBQXYvQyxPQUFBc3dCLGlCQUFBLFFBQUFxa0IsR0FBQSxHQUFBMzBDLE9BQUFzd0IsaUJBQUEsa0JBQStKdHdCLE9BQUEwcUcsb0JBQUEsUUFBQS8xRCxHQUFBLE1BQXlDL2hDLEVBQUF4YixRQUFBUSxJQUFpQit5RyxzQ0FBQSxFQUFBTixjQUFBLEdBQUFDLFNBQUEsS0FBcUU5K0IsSUFBQSxTQUFBajVELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGVBQXVCSyxFQUFBeGIsU0FBV3d6RyxXQUFBLFNBQUFyNEYsRUFBQUssRUFBQWpiLEVBQUE0TSxFQUFBc04sR0FBK0IsT0FBQUEsSUFBQWphLEVBQUF5cEcsUUFBcUI3dEUsRUFBQWpoQixFQUFBc2xCLEVBQUFqbEIsRUFBQXlqQyxFQUFBMStDLEVBQUFnOUMsRUFBQXB3QyxHQUFnQnNOLElBQUFqYSxFQUFBMHBHLFNBQWdCOXRFLEVBQUFqaEIsRUFBQXNsQixFQUFBamxCLEVBQUF5akMsRUFBQTErQyxFQUFBNGEsRUFBQW9pQyxFQUFBcHdDLEVBQUFxTyxHQUFvQmYsSUFBQWphLEVBQUEycEcsUUFBZS90RSxFQUFBamhCLEVBQUE1YSxFQUFBa2dDLEVBQUFqbEIsRUFBQXJPLEVBQUE4eEMsRUFBQSxFQUFBMStDLEVBQUFnOUMsRUFBQSxFQUFBcHdDLEdBQXdCc04sSUFBQWphLEVBQUE4cEcsUUFBZWx1RSxFQUFBamhCLEVBQUEsR0FBQTVhLEVBQUFrZ0MsRUFBQWpsQixFQUFBLEdBQUFyTyxFQUFBOHhDLEVBQUExK0MsRUFBQWc5QyxFQUFBcHdDLFFBQTBCLE1BQVk4bEcsY0FBQSxLQUFpQjUrQixJQUFBLFNBQUFsNUQsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsZ0JBQUFoTyxFQUFBLFdBQXFDdkUsT0FBQTZxRyxRQUFBN3FHLE9BQUE4cUcsT0FBQSxtQkFBQTlxRyxPQUFBOHFHLE9BQUE5cUcsT0FBQW04RCxNQUFBLG1CQUFBbjhELE9BQUFtOEQsUUFBQXZrRSxFQUFBbXpHLFVBQUEsSUFBQW56RyxHQUFnSSxhQUFBZzVCLFNBQUEydUIsV0FBQWg3QyxJQUFBdkUsT0FBQXN3QixpQkFBQSxPQUFBL3JCLEdBQUEsS0FBNEVpdkYsZUFBQSxLQUFrQjluQixJQUFBLFNBQUFuNUQsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsVUFBa0IzYSxFQUFBc0IsVUFBQTh4RyxLQUFBLFdBQTRCLFVBQUFueEcsTUFBQSx5Q0FBd0RqQyxFQUFBc0IsVUFBQSt4RyxVQUFBLFdBQWtDLFVBQUFweEcsTUFBQSxxQ0FBb0RqQyxFQUFBc0IsVUFBQWd5RyxTQUFBLFdBQWlDLFVBQUFyeEcsTUFBQSxtQ0FBa0RqQyxFQUFBc0IsVUFBQWtrQixLQUFBLFdBQTZCLElBQUE3SyxFQUFBLDZEQUFtRSxVQUFBMVksTUFBQTBZLEdBQUEsc0RBQTBFSyxFQUFBeGIsUUFBQVEsSUFBZTB5RyxTQUFBLEtBQVkzK0IsSUFBQSxTQUFBcDVELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhNGEsRUFBQSxVQUFZLElBQUEzYSxFQUFBMmEsRUFBQSxlQUFBaE8sRUFBQSxTQUFBZ08sRUFBQUssRUFBQWpiLEdBQXlDLGtCQUFBaWIsUUFBQSxJQUFBamIsTUFBQWliLFNBQUEsR0FBQWhaLEtBQUF1eEcsWUFBQSxFQUFBdnhHLEtBQUErdkcsY0FBQW5yRyxLQUFBbWQsS0FBQTNiLE9BQUErcEcsbUJBQUEsRUFBQW53RyxLQUFBd3hHLFVBQUF4NEYsRUFBQWhaLEtBQUE0dEcsWUFBQSxLQUFBNXRHLEtBQUF5eEcsYUFBQXp4RyxLQUFBMHhHLGVBQUEsRUFBQTF4RyxLQUFBMnhHLGNBQUEsRUFBQTN4RyxLQUFBMHVHLFdBQUEsRUFBQTF1RyxLQUFBa3RCLE9BQUEsRUFBQWx0QixLQUFBNHhHLCtCQUFBNXhHLEtBQUE2eEcsb0JBQTZUdGtFLE1BQUEsSUFBQXhlLE9BQUEsS0FBcUIvdUIsS0FBQStHLFNBQWUrcUcsVUFBQSxLQUFBQyxVQUFBLEtBQUFDLFFBQUEsS0FBQUMsUUFBQSxLQUFBQyxTQUFBLEtBQUFDLE1BQUEsS0FBQUMsU0FBQSxLQUFBQyxVQUFBLEtBQUFDLFNBQUEsS0FBQUMsUUFBQSxLQUFBQyxNQUFBLEtBQUFDLFNBQUEsS0FBQUMsV0FBQSxLQUFBQyxVQUFBLEtBQUFDLFNBQUEsS0FBQUMsT0FBQSxLQUFBQyxLQUFBLE1BQXFPOXlHLEtBQUErRyxRQUFBZ3NHLE1BQUEsS0FBQS95RyxLQUFBZ3pHLGlCQUFBLGFBQUFoekcsS0FBQWl6RyxzQkFBdUYsUUFBQWoxRyxFQUFBSSxPQUFBMjBGLG9CQUFBcG9GLEVBQUFyTCxVQUFBMnpHLG9CQUFBaDdGLEVBQUEsRUFBeUVBLEVBQUFqYSxFQUFBc0QsT0FBVzJXLElBQUEsQ0FBSyxJQUFBSyxFQUFBdGEsRUFBQWlhLEdBQVdqWSxLQUFBaXpHLG1CQUFBMzZGLEdBQUEzTixFQUFBckwsVUFBQTJ6RyxtQkFBQTM2RixHQUFBNVEsUUFBcUV0QixPQUFBOHNHLHlCQUFBbHpHLEtBQUErRyxRQUFBb3NHLGtCQUFBLE1BQUEvc0csT0FBQWd0RyxvQkFBQWh0RyxPQUFBaXRHLGdCQUFBcnpHLEtBQUErRyxRQUFBdXNHLGFBQUEsTUFBQXR6RyxLQUFBK3lCLE9BQUEsV0FBOEsveUIsS0FBQXd4RyxXQUFBLGlCQUFBeHhHLEtBQUF3eEcsWUFBQXh4RyxLQUFBd3hHLFVBQUF4NkUsU0FBQTB0QixlQUFBMWtELEtBQUF3eEcsWUFBMEcsSUFBQTc0RixFQUFBM1ksS0FBQTB1RyxVQUFBdG9HLE9BQUFwRyxLQUFBZ1osRUFBQUwsRUFBQTQ2RixRQUE2QyxHQUFBdjZGLEVBQUEsQ0FBTSxJQUFBamIsRUFBQWk1QixTQUFBMHRCLGVBQUExa0QsS0FBQWd6RyxrQkFBcURqMUcsS0FBT0EsRUFBQWk1QixTQUFBQyxjQUFBLFFBQUF1OEUsVUFBQSxhQUFBejFHLEVBQUErdkcsTUFBQXAxRCxTQUFBLFdBQUEzNkMsRUFBQWdRLEdBQUEvTixLQUFBZ3pHLGtCQUFnSGh6RyxLQUFBd3hHLFdBQUF4NkUsU0FBQWk5RCxNQUFBN3VDLFlBQUFybkQsSUFBK0MsSUFBQUMsRUFBQWdDLEtBQUF5ekcsZ0JBQTJCLFFBQUF4N0YsS0FBQWphLEVBQUEsQ0FBZ0JBLEVBQUFpYSxHQUFBamEsRUFBQWlhLElBQUF0TixFQUFhLElBQUEyTixFQUFBdGEsRUFBQWlhLEdBQVdLLElBQUEzTixFQUFBckwsV0FBQWdaLElBQUEzTixJQUFBM0ssS0FBQTB1RyxZQUFBdG9HLE9BQUE2UixHQUFBalksS0FBQTB6RyxhQUFBMXpHLEtBQUFpWSxJQUFBSyxFQUFBdFksV0FBQTJ6RywwQkFBQTE3RixHQUFBSyxFQUFBTCxHQUFBSyxFQUFBTCxHQUFBalksS0FBQTB6RyxhQUFBcDdGLEVBQUFMLEdBQTBKZSxJQUFBaFosS0FBQTR6Ryw2QkFBaUM1ekcsS0FBQTZ6RyxTQUFBN3pHLEtBQUFndUcsYUFBQWh1RyxLQUFBOHpHLFNBQWtENTBHLEtBQUFjLFdBQUE0ekcsc0JBQUEsV0FBa0QsSUFBQWo3RixFQUFBM1ksS0FBQTB1RyxVQUFBdG9HLE9BQUFwRyxLQUFpQyxPQUFBMlksRUFBQWc1RixjQUFBLENBQXdCLElBQUEzNEYsRUFBQWdlLFNBQUEwdEIsZUFBQS9yQyxFQUFBcTZGLGtCQUFrRGg2RixLQUFBKzZGLFdBQUFudkQsWUFBQTVyQyxHQUFBTCxFQUFBazdGLFNBQUFsN0YsRUFBQXExRixhQUFBcjFGLEVBQUFtN0YsVUFBb0U5ekcsS0FBQWcwRyxrQkFBQSxXQUFtQyxJQUFBcjdGLEVBQUEzWSxLQUFBMHVHLFVBQUF0b0csT0FBQXBHLEtBQWlDLG1CQUFBMlksRUFBQTQ2RixVQUFBNTZGLEVBQUEydEYsYUFBQSxnQkFBQTN0RixFQUFBZzVGLGNBQUEsR0FBQWg1RixFQUFBaTdGLDBCQUE0RzV6RyxLQUFBMHpHLGFBQUEsU0FBQS82RixFQUFBSyxHQUFpQyxrQkFBa0IsT0FBQWhaLEtBQUFpMEcsb0JBQUFqMEcsS0FBQTJ6RywwQkFBQTM2RixHQUFBMVIsTUFBQXFSLEVBQUFyVixZQUFxRnBFLEtBQUFjLE9BQVlBLEtBQUFpMEcsa0JBQUEsV0FBbUMsSUFBQXQ3RixFQUFBM1ksS0FBQTB1RyxVQUFBdG9HLE9BQUFwRyxLQUFpQzJZLEVBQUEydEYsYUFBQSxnQkFBQTN0RixFQUFBZzVGLGNBQUEsSUFBa0QzeEcsS0FBQTZ6RyxPQUFBLFdBQXdCN3pHLEtBQUFrMEcsYUFBQWwwRyxLQUFBNnhHLG1CQUFBdGtFLE1BQUF2dEMsS0FBQTZ4RyxtQkFBQTlpRixPQUFBLE9BQXNGLElBQUFwVyxFQUFBM1ksS0FBQTB1RyxVQUFBdG9HLE9BQUFwRyxLQUFpQyxzQkFBQTJZLEVBQUE0NkYsUUFBQSxRQUFBdjZGLEtBQUFoWixLQUFBeXpHLGdCQUFBOTZGLEVBQUFLLEdBQUFoWixLQUFBeXpHLGdCQUFBejZGLE1BQUFMLEVBQUFLLElBQUFoWixPQUFBMlksRUFBQUssR0FBQUwsRUFBQUssR0FBQTlaLEtBQUFjLE9BQXFJLG1CQUFBMlksRUFBQXU0RixPQUFBdjRGLEVBQUF1NEYsUUFBc0MsUUFBQW56RyxFQUFBaTVCLFNBQUEydEIscUJBQUEsVUFBQTNtRCxFQUFBLEVBQXNEQSxFQUFBRCxFQUFBdUQsT0FBV3RELElBQUEsQ0FBSyxJQUFBMk0sRUFBQTVNLEVBQUFDLEdBQVcsU0FBQTJNLEVBQUF3cEcsUUFBQUMsU0FBQXpwRyxFQUFBbWpHLE1BQUF1RyxXQUFBLFVBQUExcEcsRUFBQXdwRyxRQUFBQyxRQUEyRXAwRyxLQUFBdXhHLFlBQUEsR0FBbUJyeUcsS0FBQWMsV0FBQTh6RyxNQUFBLFdBQWtDLElBQUFuN0YsRUFBQXZTLE9BQUFpbkcsWUFBQTduRyxNQUFBd1QsRUFBQUwsRUFBQTNZLEtBQUFvdEcsZUFBQXJ2RyxFQUFBLElBQUFpQyxLQUFBc3RHLG1CQUFtRnR0RyxLQUFBa3RCLE9BQUFsVSxHQUFBamIsRUFBQSxLQUFBaUMsS0FBQXMwRyxTQUFBdDBHLEtBQUFtdEcsV0FBQSxLQUFBeDBGLEVBQUEzWSxLQUFBb3RHLGdCQUFBcHRHLEtBQUFvdEcsZUFBQXowRixPQUFBLElBQUEzWSxLQUFBdTBHLG9CQUFBdjBHLEtBQUF1MEcsc0JBQUF2MEcsS0FBQWt0QixRQUFBbHRCLEtBQUEweEcsZUFBQXRyRyxPQUFBaThCLHNCQUFBcmlDLEtBQUE4ekcsU0FBZ1A1MEcsS0FBQWMsV0FBQWd1RyxXQUFBLFdBQXVDaHVHLEtBQUFzTyxpQkFBQWttRyxjQUFBeDBHLEtBQUFzTyxrQkFBMERwUCxLQUFBYyxXQUFBc21HLGFBQUEsU0FBQTN0RixFQUFBSyxHQUE0Q2haLEtBQUEyWSxHQUFBSyxFQUFBaFosS0FBQTB1RyxZQUFBdG9HLE9BQUF1UyxHQUFBSyxJQUF3QzlaLEtBQUFjLFdBQUF5SSxPQUFBLFdBQW1DLElBQUFrUSxFQUFBcWUsU0FBQTB0QixlQUFBMWtELEtBQUFnekcsa0JBQXFELEdBQUFyNkYsTUFBQW83RixXQUFBbnZELFlBQUFqc0MsR0FBQTNZLEtBQUFpMEcscUJBQUFqMEcsS0FBQTR0RyxZQUFBLENBQW1LLFFBQUE1MEYsS0FBcEZoWixLQUFBa3RCLE9BQUEsRUFBQWx0QixLQUFBMHhHLGdCQUFBdHJHLE9BQUFxdUcscUJBQUF6MEcsS0FBQTB4RyxnQkFBb0YxeEcsS0FBQStHLFFBQUFYLE9BQUEwcUcsb0JBQUE5M0YsRUFBQWhaLEtBQUErRyxRQUFBaVMsSUFBd0UsUUFBQWpiLEVBQUEsRUFBWUEsRUFBQWlDLEtBQUF5eEcsVUFBQW53RyxPQUF3QnZELElBQUEsQ0FBSyxJQUFBQyxFQUFBZ0MsS0FBQXl4RyxVQUFBMXpHLEdBQThFLFFBQUFrYSxLQUF0RGphLEVBQUE2dkcsSUFBQWtHLFlBQUEvMUcsRUFBQTZ2RyxJQUFBa0csV0FBQW52RCxZQUFBNW1ELEVBQUE2dkcsS0FBc0Q3dkcsRUFBQStJLFFBQUEvSSxFQUFBNnZHLElBQUFpRCxvQkFBQTc0RixFQUFBamEsRUFBQStJLFFBQUFrUixJQUFpRSxJQUFBSyxFQUFBdFksS0FBV0EsS0FBQWl6RyxtQkFBQXhxRyxPQUFBa0IsUUFBQSxTQUFBZ1AsUUFBbUQsSUFBQUEsS0FBQTlhLEtBQUF5YSxLQUF3QixHQUFBdFksS0FBQTB1RyxVQUFBLENBQW1CLFFBQUEzekQsS0FBQXB3QyxFQUFBckwsVUFBQSxXQUE2QjhHLE9BQUEyMEMsR0FBaUIsTUFBQXBpQyxHQUFTdlMsT0FBQTIwQyxRQUFBLEVBQWlCLFFBQUFyOUMsS0FBQXNDLEtBQUEsR0FBQUEsS0FBQVQsZUFBQTdCLEdBQUEsV0FBZ0QwSSxPQUFBMUksR0FBaUIsTUFBQWliLEdBQVN2UyxPQUFBMUksUUFBQSxFQUFpQmlOLEVBQUF3bUcsU0FBQSxPQUFpQmp5RyxLQUFBYyxXQUFBaXpHLG1CQUFBOXhDLEtBQUF4M0QsUUFBQSxTQUFBZ1AsUUFBNkQsSUFBQUEsS0FBQTlhLEtBQUFtQyxPQUF5QkEsTUFBTyxJQUFBKzZDLEVBQUEvNkMsS0FBQTAwRyxzQ0FBaUQsR0FBQS83RixJQUFBM1ksVUFBYSxDQUF1QyxRQUFBdEMsS0FBbENzQyxLQUFBMHVHLFdBQUEsRUFBQS9qRyxFQUFBd21HLFNBQUFueEcsS0FBa0MySyxFQUFBckwsVUFBQSxzQkFBQXFMLEVBQUFyTCxVQUFBNUIsR0FBQSxDQUErRCxJQUFBMEUsRUFBQTFFLEVBQUFnbUQsVUFBQSxHQUFxQjFqRCxLQUFBK0csUUFBQXhILGVBQUE2QyxLQUFBd0MsS0FBQXJGLGVBQUE3QixJQUFBa0gsS0FBQWxILEtBQUFpTixFQUFBckwsVUFBQTVCLEdBQUFxOUMsRUFBQXI5QyxFQUFBaU4sRUFBQXJMLFVBQUE1QixJQUFBcTlDLEVBQUFyOUMsRUFBQWlOLEVBQUFyTCxVQUFBNUIsR0FBQXdCLEtBQUFjLGFBQXNJKzZDLEVBQUFyOUMsRUFBQWlOLEVBQUFyTCxVQUFBNUIsSUFBeUIsUUFBQStqQixLQUFBemhCLFVBQUFULGVBQUFraUIsSUFBQXM1QixFQUFBdDVCLEVBQUF6aEIsS0FBQXloQixJQUF1RCxRQUFBOWpCLEtBQUFxQyxLQUFBK0csUUFBQSxDQUEyQixJQUFBakosRUFBQWtDLEtBQUEsTUFBQXJDLEdBQW9CLEdBQUFHLEVBQUEsQ0FBTSxJQUFBcUIsRUFBQXJCLEVBQUFvQixLQUFBYyxNQUFtQm9HLE9BQUFzd0IsaUJBQUEvNEIsRUFBQXdCLEdBQTZCdzFHLFNBQUEsSUFBVzMwRyxLQUFBK0csUUFBQXBKLEdBQUF3QixHQUFxQixJQUFBaEIsRUFBQSxXQUFpQjZCLEtBQUFzbUcsYUFBQSxlQUFnQ3BuRyxLQUFBYyxNQUFBUixFQUFBLFdBQXlCUSxLQUFBc21HLGFBQUEsZUFBZ0NwbkcsS0FBQWMsTUFBWW9HLE9BQUFzd0IsaUJBQUEsUUFBQXY0QixHQUFBaUksT0FBQXN3QixpQkFBQSxPQUFBbDNCLEdBQUFRLEtBQUE0MEcsZUFBQSxvQkFBNkd4dUcsT0FBQTBxRyxvQkFBQSxRQUFBM3lHLEdBQUFpSSxPQUFBMHFHLG9CQUFBLE9BQUF0eEcsS0FBMkV6QixFQUFBaUMsS0FBQSt5QixTQUFBLGFBQUFpRSxTQUFBMnVCLFdBQUEzbEQsS0FBQSt5QixTQUFBM3NCLE9BQUFzd0IsaUJBQUEsT0FBQTEyQixLQUFBK3lCLE9BQUE3ekIsS0FBQWMsT0FBQSxJQUFtWixRQUFBaVksS0FBdlJ0TixFQUFBckwsVUFBQXN5Ryw2QkFBQSxXQUFvRDV4RyxLQUFBNjBHLFdBQUE3MEcsS0FBQTgwRyxjQUFBLEdBQUE5MEcsS0FBQSswRyxhQUFBLEdBQUEvMEcsS0FBQTI2RixXQUFBMzhGLEVBQUE2OEYsSUFBQTc2RixLQUFBNDZGLGFBQW1Hb2EsS0FBQSxpQkFBQUMsS0FBQSxlQUFBQyxLQUFBLGdCQUE4RGwxRyxLQUFBZ3dHLGNBQUEsR0FBc0JybEcsRUFBQXdtRyxTQUFBLEtBQUF4bUcsRUFBQXdxRyx1QkFBQSxFQUE0Q24zRyxFQUFBMk0sRUFBQXJMLFVBQUEyWSxHQUFBamEsRUFBQWlhLEdBQW1DdE4sRUFBQXJMLFVBQUFtMEcsaUJBQTZCMkIsU0FBQXpxRyxFQUFBckwsVUFBQSsxRyxVQUFBMXFHLEVBQUFyTCxVQUFBZzJHLFlBQUEzcUcsRUFBQXJMLFVBQUFpMkcsUUFBQTVxRyxFQUFBckwsVUFBQWsyRyxVQUFBN3FHLEVBQUFyTCxVQUFBbTJHLFVBQUE5cUcsRUFBQXJMLFVBQUFvMkcsU0FBQS9xRyxFQUFBckwsVUFBQXEyRyxVQUFBaHJHLEVBQUFyTCxVQUFBczJHLFdBQUFqckcsRUFBQXJMLFdBQXFNcUwsRUFBQXJMLFVBQUEyekcsb0JBQWlDOXhDLFFBQUEwMEMsT0FBQTExQyxRQUFBMTNELFdBQWlDa0MsRUFBQXJMLFVBQUFxMEcsNkJBQXlDaHBHLEVBQUFyTCxVQUFBdzJHLHNCQUFBLFNBQUFuOUYsRUFBQUssR0FBaURyTyxFQUFBckwsVUFBQW0wRyxnQkFBQWwwRyxlQUFBb1osS0FBQWhPLEVBQUFyTCxVQUFBbTBHLGdCQUFBOTZGLEdBQUFLLElBQWtGck8sRUFBQXJMLFVBQUFzMUcsZUFBQSxTQUFBajhGLEVBQUFLLEdBQTBDLElBQUFqYixFQUFBaUMsTUFBQTJLLEVBQUFyTCxVQUF3QnZCLEVBQUFrMUcsbUJBQUExekcsZUFBQW9aLEtBQUE1YSxFQUFBazFHLG1CQUFBdDZGLE9BQUE1YSxFQUFBazFHLG1CQUFBdDZGLEdBQUEvVixLQUFBb1csSUFBcUdyTyxFQUFBckwsVUFBQW8xRyxvQ0FBQSxTQUFBLzdGLEdBQXFFLElBQUFLLEdBQVJMLFNBQVFvOUYsY0FBQTN2RyxPQUE2RSxPQUE3RXVTLEVBQUF2VCxLQUFBbUwsUUFBQW5MLElBQUFsRyxLQUFBcVIsU0FBNkUsU0FBQW9JLEVBQUFWLEdBQXFCdE4sRUFBQXdxRyxzQkFBQW44RixFQUFBTCxHQUFBVixJQUE4bUJlLEVBQUF4YixRQUFBbU4sSUFBZThsRyxjQUFBLEdBQUF1RixTQUFBLEtBQTZCaGtDLElBQUEsU0FBQXI1RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBYSxTQUFBQyxFQUFBMmEsRUFBQUssRUFBQWpiLEdBQWtCLFdBQUFpYixFQUFBZixFQUFBVSxFQUFBNWEsR0FBQTRNLEVBQUFnTyxFQUFBSyxFQUFBamIsR0FBQWlDLEtBQWtDLFNBQUEySyxFQUFBZ08sRUFBQUssRUFBQWpiLEdBQWtCQSxFQUFBZ0osUUFBQTRSLElBQUFWLEVBQUFVLEVBQUE1YSxHQUFxQixJQUFBQyxFQUFBZ2IsRUFBQTlaLEtBQUFuQixHQUFnQkEsRUFBQTh2RyxJQUFBbjNFLGlCQUFBL2QsRUFBQTNhLEdBQUEsR0FBQUQsRUFBQWdKLFFBQUE0UixHQUFBM2EsRUFBOEMsU0FBQWlhLEVBQUFVLEVBQUFLLEdBQWdCLElBQUFqYixFQUFBaWIsRUFBQWpTLFFBQUE0UixHQUFtQkssRUFBQTYwRixJQUFBaUQsb0JBQUFuNEYsRUFBQTVhLEdBQUEsR0FBQWliLEVBQUFqUyxRQUFBNFIsR0FBQSxLQUFvRCxJQUFBTCxFQUFBSyxFQUFBLFVBQWtCTCxFQUFBMjlGLFFBQUEsU0FBQXQ5RixFQUFBSyxHQUF3QmhaLEtBQUE2dEcsSUFBQWwxRixFQUFBM1ksS0FBQWsyRyxPQUFBbDlGLEVBQUFoWixLQUFBK0csV0FBd0MvRyxLQUFBdXRDLE1BQUF2dEMsS0FBQTZ0RyxJQUFBc0ksWUFBQW4yRyxLQUFBK3VCLE9BQUEvdUIsS0FBQTZ0RyxJQUFBdUksY0FBbUU5OUYsRUFBQTI5RixRQUFBMzJHLFVBQUE0QixPQUFBLFNBQUF5WCxHQUF3QyxnQkFBQUEsRUFBQTNZLEtBQUE2dEcsSUFBQWtHLFlBQUEsaUJBQUFwN0YsR0FBQSxNQUFBQSxFQUFBLEtBQUFBLElBQUErcUMsVUFBQSxJQUFBL3FDLEVBQUFxZSxTQUFBMHRCLGVBQUEvckMsaUJBQUFMLEVBQUEyOUYsVUFBQXQ5RixJQUFBazFGLEtBQUFsMUYsRUFBQXlzQyxZQUFBcGxELEtBQUE2dEcsS0FBQTd0RyxPQUF3THNZLEVBQUEyOUYsUUFBQTMyRyxVQUFBeU8sR0FBQSxTQUFBNEssR0FBb0MsZ0JBQUFBLEVBQUEzWSxLQUFBNnRHLElBQUE5L0YsSUFBQS9OLEtBQUE2dEcsSUFBQTkvRixHQUFBNEssRUFBQTNZLEtBQUF1dEMsTUFBQXZ0QyxLQUFBNnRHLElBQUFzSSxZQUFBbjJHLEtBQUErdUIsT0FBQS91QixLQUFBNnRHLElBQUF1SSxhQUFBcDJHLE9BQXFIc1ksRUFBQTI5RixRQUFBMzJHLFVBQUErMkcsTUFBQSxTQUFBMTlGLEdBQXVDLGdCQUFBQSxFQUFBM1ksS0FBQTZ0RyxJQUFBMXRHLFdBQUFILEtBQUE2dEcsSUFBQTF0RyxVQUFBd1ksRUFBQTNZLE9BQWlFc1ksRUFBQTI5RixRQUFBMzJHLFVBQUFnM0csYUFBQSxTQUFBMzlGLEdBQThDLE9BQUEzYSxFQUFBLHFCQUFBZ2IsR0FBaUMsT0FBQWhaLEtBQUFrMkcsT0FBQTVQLGFBQUEscUJBQUF0bUcsS0FBQWsyRyxPQUFBSyxnQkFBQXY5RixHQUFBTCxLQUF3RjNZLFlBQVlzWSxFQUFBMjlGLFFBQUEzMkcsVUFBQWszRyxjQUFBLFNBQUE3OUYsR0FBK0MsT0FBQTNhLEVBQUEsV0FBQTJhLEVBQUEzWSxZQUFpQ3NZLEVBQUEyOUYsUUFBQTMyRyxVQUFBbTNHLFdBQUEsU0FBQTk5RixHQUE0QyxPQUFBM2EsRUFBQSxRQUFBMmEsRUFBQTNZLFlBQThCc1ksRUFBQTI5RixRQUFBMzJHLFVBQUFvM0csY0FBQSxTQUFBLzlGLEdBQStDLE9BQUEzYSxFQUFBLFVBQUEyYSxFQUFBM1ksWUFBZ0NzWSxFQUFBMjlGLFFBQUEzMkcsVUFBQXEzRyxhQUFBLFNBQUFoK0YsR0FBOEMsT0FBQTNhLEVBQUEsUUFBQTJhLEVBQUEzWSxZQUE4QnNZLEVBQUEyOUYsUUFBQTMyRyxVQUFBczNHLFdBQUEsU0FBQWorRixHQUE0QyxPQUFBM2EsRUFBQSxZQUFBMmEsRUFBQTNZLFlBQWtDc1ksRUFBQTI5RixRQUFBMzJHLFVBQUF1M0csVUFBQSxTQUFBbCtGLEdBQTJDLE9BQUEzYSxFQUFBLFlBQUEyYSxFQUFBM1ksWUFBa0NzWSxFQUFBMjlGLFFBQUEzMkcsVUFBQXczRyxRQUFBLFNBQUFuK0YsR0FBeUMsT0FBQTNhLEVBQUEsU0FBQTJhLEVBQUEzWSxZQUErQnNZLEVBQUEyOUYsUUFBQTMyRyxVQUFBK1EsTUFBQSxTQUFBc0ksR0FBdUMsT0FBQTNhLEVBQUEsUUFBQTJhLEVBQUEzWSxZQUE4QnNZLEVBQUEyOUYsUUFBQTMyRyxVQUFBeTNHLFNBQUEsU0FBQXArRixHQUEwQyxPQUFBM2EsRUFBQSxXQUFBMmEsRUFBQTNZLFlBQWlDc1ksRUFBQTI5RixRQUFBMzJHLFVBQUEwM0csYUFBQSxTQUFBcitGLEdBQThDLE9BQUEzYSxFQUFBLGFBQUEyYSxFQUFBM1ksWUFBbUNzWSxFQUFBMjlGLFFBQUEzMkcsVUFBQTIzRyxXQUFBLFNBQUF0K0YsR0FBNEMsT0FBQTNhLEVBQUEsWUFBQTJhLEVBQUEzWSxZQUFrQ3NZLEVBQUEyOUYsUUFBQTMyRyxVQUFBNDNHLFdBQUEsU0FBQXYrRixHQUE0QyxPQUFBM2EsRUFBQSxXQUFBMmEsRUFBQTNZLFlBQWlDc1ksRUFBQTI5RixRQUFBMzJHLFVBQUE2M0csU0FBQSxTQUFBeCtGLEdBQTBDLE9BQUEzYSxFQUFBLFdBQUEyYSxFQUFBM1ksWUFBaUNzWSxFQUFBMjlGLFFBQUEzMkcsVUFBQTgzRyxVQUFBLFNBQUF6K0YsR0FBMkMsT0FBQTNhLEVBQUEsWUFBQTJhLEVBQUEzWSxZQUFrQ3NZLEVBQUEyOUYsUUFBQTMyRyxVQUFBKzNHLEtBQUEsU0FBQTErRixFQUFBSyxHQUF3QyxTQUFBamIsRUFBQWliLEdBQWMsSUFBQWpiLEVBQUEsSUFBQXVhLEVBQUFnL0YsS0FBQXQrRixHQUFvQixnQkFBQUEsR0FBbUJqYixFQUFBZytDLEtBQUEvaUMsRUFBQXUrRixPQUFBbnhELE9BQUF6dEMsRUFBQTVhLElBQTZCLE9BQUFxSSxPQUFBa3hHLE1BQUFseEcsT0FBQTgvQyxZQUFBOS9DLE9BQUFveEcsVUFBQXB4RyxPQUFBNkksTUFBQXRFLEVBQUEsb0JBQUFnTyxHQUE4RkEsRUFBQTgrRixrQkFBQTkrRixFQUFBaTJGLGtCQUF1QzV1RyxNQUFBMkssRUFBQSxxQkFBQWdPLEdBQWlDQSxFQUFBOCtGLGtCQUFBOStGLEVBQUFpMkYsa0JBQXVDNXVHLFdBQUEsSUFBQWdaLEdBQUFyTyxFQUFBLE9BQUFxTyxFQUFBaFosTUFBQTJLLEVBQUEsZ0JBQUFnTyxHQUF5REEsRUFBQTgrRixrQkFBQTkrRixFQUFBaTJGLGlCQUF1QyxRQUFBNTFGLEVBQUFMLEVBQUErK0YsYUFBQUMsTUFBQTM1RyxFQUFBLEVBQW1DQSxFQUFBZ2IsRUFBQTFYLE9BQVd0RCxJQUFBLENBQUssSUFBQTJNLEVBQUFxTyxFQUFBaGIsR0FBQWlhLEVBQUEsSUFBQWl1QyxXQUE0Qmp1QyxFQUFBb2MsT0FBQXQyQixFQUFBNE0sS0FBQXNELEtBQUE5TSxRQUFBLFdBQUE4VyxFQUFBKzdFLFdBQUFycEYsR0FBQXNOLEVBQUFxdUMsY0FBQTM3QyxLQUE0RTNLLE9BQUF1USxRQUFBbkwsSUFBQSwwREFBQXBGLE1BQW1Gc1ksRUFBQTI5RixRQUFBMzJHLFVBQUFnbkcsYUFBQSxTQUFBM3RGLEVBQUFLLEdBQWdEaFosS0FBQTJZLEdBQUFLLEdBQVVBLEVBQUF4YixRQUFBOGEsRUFBQTI5RixVQUF1QnZGLFNBQUEsS0FBWXorQixJQUFBLFNBQUF0NUQsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsVUFBQWhPLEVBQUFnTyxFQUFBLGVBQXFDM2EsRUFBQTQ1RyxTQUFBLFNBQUFqL0YsRUFBQUssRUFBQWpiLEVBQUFrYSxHQUE2QixJQUFBSyxFQUFBdmEsR0FBQTRNLEVBQUE4N0YsSUFBd0osUUFBQTFyRCxLQUF6SS82QyxLQUFBNjNHLE9BQUE3Z0YsU0FBQUMsY0FBQSxXQUFBaGYsRUFBQXU1RixXQUFBeDZFLFNBQUFpOUQsTUFBQTd1QyxZQUFBcGxELEtBQUE2M0csUUFBQTc1RyxFQUFBaTRHLFFBQUFwNEcsS0FBQW1DLFVBQUE2M0csT0FBQTUvRixHQUFBLEdBQXlJamEsRUFBQXNCLFVBQUFVLEtBQUErNkMsS0FBQSxtQkFBQS84QyxFQUFBc0IsVUFBQXk3QyxHQUFBLzZDLEtBQUErNkMsR0FBQS84QyxFQUFBc0IsVUFBQXk3QyxHQUFBNzdDLEtBQUFjLFdBQUErNkMsR0FBQS84QyxFQUFBc0IsVUFBQXk3QyxJQUErSCxPQUFBLzhDLEVBQUFzQixVQUFBc3lHLDZCQUFBdHFHLE1BQUF0SCxXQUFBdXRDLE1BQUE1MEIsRUFBQTNZLEtBQUErdUIsT0FBQS9WLEVBQUFoWixLQUFBK3ZHLGNBQUE5M0YsRUFBQTgzRixjQUFBejNGLElBQUEzTixFQUFBKzdGLE1BQUExbUcsS0FBQW9tRyxVQUFBLElBQUFwb0csRUFBQTg1RyxXQUFBOTNHLEtBQUE2M0csT0FBQTczRyxNQUFBLEdBQUFBLEtBQUFvbUcsVUFBQSxJQUFBcG9HLEVBQUErNUcsV0FBQS8zRyxLQUFBNjNHLE9BQUE3M0csTUFBQSxHQUFBaVksRUFBQXc1RixVQUFBN3VHLEtBQUE1QyxXQUFBb21HLFVBQUF5TSxPQUFBbDZGLEVBQUFLLEdBQUFoWixLQUFBb21HLFVBQUE0UixpQkFBQWg0RyxNQUF1VWhDLEVBQUE0NUcsU0FBQXQ0RyxVQUFBbEIsT0FBQVksT0FBQWhCLEVBQUFpNEcsUUFBQTMyRyxXQUFBdEIsRUFBQTQ1RyxTQUFBdDRHLFVBQUFtSixPQUFBLFdBQWdHekksS0FBQTZ0RyxJQUFBa0csWUFBQS96RyxLQUFBNnRHLElBQUFrRyxXQUFBbnZELFlBQUE1a0QsS0FBQTZ0RyxLQUErRCxJQUFBbDFGLEVBQUEzWSxLQUFBazJHLE9BQUF6RSxVQUFBdHdHLFFBQUFuQixNQUFvRixRQUFBZ1osS0FBMUMsSUFBQUwsR0FBQTNZLEtBQUFrMkcsT0FBQXpFLFVBQUFsd0csT0FBQW9YLEVBQUEsR0FBMEMzWSxLQUFBK0csUUFBQS9HLEtBQUE2dEcsSUFBQWlELG9CQUFBOTNGLEVBQUFoWixLQUFBK0csUUFBQWlTLEtBQTBFQSxFQUFBeGIsUUFBQVEsRUFBQTQ1RyxXQUF3Qm5ILGNBQUEsR0FBQUMsU0FBQSxLQUE2QngrQixJQUFBLFNBQUF2NUQsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsU0FBQUMsRUFBQTJhLEdBQWMsSUFBQUssRUFBQSxFQUFBamIsRUFBQSxFQUFZLEdBQUE0YSxFQUFBcy9GLGFBQUEsR0FBcUJqL0YsR0FBQUwsRUFBQXUvRixXQUFBbjZHLEdBQUE0YSxFQUFBdy9GLGdCQUErQngvRixJQUFBcy9GLG1CQUF3QmovRixHQUFBTCxFQUFBdS9GLFdBQUFuNkcsR0FBQTRhLEVBQUF3L0YsVUFBb0MsT0FBQW4vRixFQUFBamIsR0FBWSxJQUFBNE0sRUFBQWdPLEVBQUEsVUFBQVYsRUFBQVUsRUFBQSxxQkFBMkNoTyxFQUFBeXRHLFNBQUEsU0FBQXovRixFQUFBSyxFQUFBamIsR0FBMkI0TSxFQUFBc3JHLFFBQUFwNEcsS0FBQW1DLEtBQUEyWSxFQUFBSyxHQUFBaFosS0FBQTYzRyxPQUFBbC9GLEVBQUE1YSxHQUFBaUMsS0FBQXE0RyxlQUFBLEVBQUFyNEcsS0FBQWsyRyxPQUFBNVAsYUFBQSxjQUFBdG1HLFdBQUFrMkcsT0FBQTVQLGFBQUEsU0FBQXRtRyxLQUFBNjNHLFFBQUE3M0csS0FBQWsyRyxPQUFBNVAsYUFBQSxRQUFBdG1HLEtBQUF1dEMsT0FBQXZ0QyxLQUFBazJHLE9BQUE1UCxhQUFBLFNBQUF0bUcsS0FBQSt1QixVQUFBL3VCLEtBQUE2M0csT0FBQS9KLE1BQUF3SyxRQUFBLE9BQUF0NEcsS0FBQTYwRyxZQUFBNzBHLEtBQUF1NEcsVUFBQSxHQUFBdjRHLEtBQUF3NEcsYUFBQSxHQUFBeDRHLEtBQUF5NEcsVUFBQSxhQUFBejRHLEtBQUEwNEcsV0FBQXpnRyxFQUFBbTRFLE9BQUFwd0YsS0FBQTI0RyxZQUFBLEtBQUEzNEcsS0FBQTQ0RyxhQUFBLEtBQUE1NEcsS0FBQTY0RyxXQUFBNWdHLEVBQUE0dkYsS0FBQTduRyxLQUFBODRHLGNBQUE3Z0csRUFBQWd3RixTQUFBam9HLEtBQUErNEcsVUFBQTlnRyxFQUFBd3ZGLE9BQUF6bkcsS0FBQWc1RyxhQUFBL2dHLEVBQUE2dkYsT0FBQTluRyxLQUFBaTVHLGdCQUFBLEVBQUFqNUcsS0FBQWs1RyxXQUFBamhHLEVBQUF3dkYsT0FBQXpuRyxLQUFBbTVHLE1BQUEsS0FBQW41RyxLQUFBbzVHLFdBQUEsRUFBQXA1RyxLQUFBcTVHLFNBQUEsRUFBQXI1RyxLQUFBczVHLFlBQUEsRUFBQXQ1RyxLQUFBdTVHLFVBQUEsR0FBbXFCNXVHLEVBQUF5dEcsU0FBQTk0RyxVQUFBbEIsT0FBQVksT0FBQTJMLEVBQUFzckcsUUFBQTMyRyxXQUFBcUwsRUFBQXl0RyxTQUFBOTRHLFVBQUFzRCxLQUFBLFdBQThGLE9BQU80MkcsWUFBWUosVUFBQXA1RyxLQUFBbzVHLFVBQUFFLFdBQUF0NUcsS0FBQXM1RyxXQUFBRCxRQUFBcjVHLEtBQUFxNUcsUUFBQUUsU0FBQXY1RyxLQUFBdTVHLFNBQUFKLE1BQUFuNUcsS0FBQW01RyxNQUFBRCxXQUFBbDVHLEtBQUFrNUcsV0FBQUgsVUFBQS80RyxLQUFBKzRHLFVBQUFDLGFBQUFoNUcsS0FBQWc1RyxhQUFBUCxVQUFBejRHLEtBQUF5NEcsVUFBQUQsYUFBQXg0RyxLQUFBdzRHLGFBQUFELFVBQUF2NEcsS0FBQXU0RyxVQUFBTSxXQUFBNzRHLEtBQUE2NEcsV0FBQUMsY0FBQTk0RyxLQUFBODRHLGNBQUFKLFdBQUExNEcsS0FBQTA0RyxjQUE4Vy90RyxFQUFBeXRHLFNBQUE5NEcsVUFBQXd4RCxJQUFBLFNBQUFuNEMsR0FBc0NBLEVBQUE2Z0csWUFBQXA3RyxPQUFBNFgsT0FBQWhXLEtBQUEyWSxFQUFBNmdHLGFBQStDN3VHLEVBQUF5dEcsU0FBQTk0RyxVQUFBdXpHLE9BQUEsU0FBQWw2RixFQUFBSyxHQUEyQ2haLEtBQUF1dEMsTUFBQTUwQixFQUFBM1ksS0FBQSt1QixPQUFBL1YsRUFBQWhaLEtBQUE2dEcsSUFBQXRnRSxNQUFBNTBCLEVBQUEzWSxLQUFBazJHLE9BQUFuRyxjQUFBL3ZHLEtBQUE2dEcsSUFBQTkrRSxPQUFBL1YsRUFBQWhaLEtBQUFrMkcsT0FBQW5HLGNBQUEvdkcsS0FBQTZ0RyxJQUFBQyxNQUFBdmdFLE1BQUE1MEIsRUFBQSxLQUFBM1ksS0FBQTZ0RyxJQUFBQyxNQUFBLytFLE9BQUEvVixFQUFBLEtBQUFoWixLQUFBcTRHLGdCQUFBcjRHLEtBQUFrMkcsT0FBQTVQLGFBQUEsUUFBQXRtRyxLQUFBdXRDLE9BQUF2dEMsS0FBQWsyRyxPQUFBNVAsYUFBQSxTQUFBdG1HLEtBQUErdUIsVUFBNlJwa0IsRUFBQXl0RyxTQUFBOTRHLFVBQUFtNkcsWUFBQSxTQUFBOWdHLEdBQThDLHVCQUFBQSxHQUFBM1ksS0FBQXNtRyxhQUFBLGVBQUEzdEYsR0FBQTNZLEtBQUFrMkcsUUFBQWwyRyxLQUFBdzRHLGNBQTZGN3RHLEVBQUF5dEcsU0FBQTk0RyxVQUFBbzZHLFNBQUEsU0FBQS9nRyxHQUEyQyx1QkFBQUEsR0FBQTNZLEtBQUFzbUcsYUFBQSxZQUFBM3RGLEdBQUEzWSxLQUFBc21HLGFBQUEsZUFBQTN0RixFQUFBVixFQUFBeXpGLG1CQUFBMXJHLEtBQUEyNUcsd0JBQUEzNUcsS0FBQXU0RyxXQUErSjV0RyxFQUFBeXRHLFNBQUE5NEcsVUFBQXM2RyxVQUFBLFNBQUFqaEcsR0FBNEMsT0FBQUEsT0FBQVYsRUFBQW00RSxRQUFBejNFLElBQUFWLEVBQUErMkUsUUFBQXIyRSxJQUFBVixFQUFBbzNFLE1BQUFydkYsS0FBQXNtRyxhQUFBLGFBQUEzdEYsR0FBQTNZLEtBQUEyNUcsd0JBQUEzNUcsS0FBQTA0RyxZQUFpSS90RyxFQUFBeXRHLFNBQUE5NEcsVUFBQXU2RyxXQUFBLFdBQTRDLGNBQUE3NUcsS0FBQTI0RyxhQUFBMzRHLEtBQUE4NUcscUJBQUE5NUcsS0FBQTI0RyxhQUEyRWh1RyxFQUFBeXRHLFNBQUE5NEcsVUFBQXk2RyxZQUFBLFdBQTZDLGNBQUEvNUcsS0FBQTQ0RyxjQUFBNTRHLEtBQUE4NUcscUJBQUE5NUcsS0FBQTQ0RyxjQUE2RWp1RyxFQUFBeXRHLFNBQUE5NEcsVUFBQTA2RyxVQUFBLFNBQUFyaEcsRUFBQUssR0FBOEMsZ0JBQUFMLEdBQUEzWSxLQUFBc21HLGFBQUEsYUFBQTN0RixRQUFBLElBQUFLLEdBQUFoWixLQUFBc21HLGFBQUEsZ0JBQUF0dEYsR0FBQWhaLEtBQUEyNUcseUJBQW9JTSxXQUFBajZHLEtBQUE2NEcsV0FBQXFCLFNBQUFsNkcsS0FBQTg0RyxnQkFBd0RudUcsRUFBQXl0RyxTQUFBOTRHLFVBQUF5MEYsS0FBQSxTQUFBcDdFLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBK0MsSUFBQTJOLEVBQUF5aUMsRUFBQXI5QyxFQUFBMEUsRUFBQXFmLEVBQUE5akIsRUFBQXdCLEVBQUFoQixFQUFBcUIsRUFBQVEsS0FBQWsyRyxPQUFBemhHLEVBQUE4bkMsT0FBQTQ5RCxVQUF1RCxJQUFBbjZHLEtBQUFxNUcsU0FBQXI1RyxLQUFBbzVHLGlCQUFBLElBQUF6Z0csRUFBQSxDQUErQyxvQkFBQUEsUUFBQXpZLFlBQUF5WSxJQUFBd2QsUUFBQSxjQUFBN2QsRUFBQUssRUFBQXRYLE1BQUEsZUFBQXJELEVBQUEsQ0FBOEYsSUFBQUcsRUFBQSxFQUFBVCxFQUFBLEVBQVlBLEVBQUE0YSxFQUFBaFgsT0FBVzVELElBQUEsSUFBQStqQixFQUFBLEdBQUF0aUIsRUFBQW1aLEVBQUE1YSxHQUFBMkQsTUFBQSxLQUFBMDVDLEVBQUEsRUFBbUNBLEVBQUE1N0MsRUFBQW1DLE9BQVd5NUMsSUFBQXA5QyxFQUFBOGpCLEVBQUF0aUIsRUFBQTQ3QyxHQUFBLElBQUEvNkMsS0FBQW82RyxVQUFBejhHLEdBQUFLLEdBQUF5akIsRUFBQXRpQixFQUFBNDdDLEdBQUEsSUFBQTU4QyxHQUFBcUIsRUFBQWk2RyxlQUFBaDRGLEVBQUE5akIsRUFBNkUsT0FBQXFDLEtBQUErNEcsWUFBQTlnRyxFQUFBNnZGLFNBQUE5dUYsR0FBQWhiLEVBQUEsRUFBQUQsR0FBQTRNLEVBQUEsR0FBQTNLLEtBQUE2NEcsWUFBbUUsS0FBQTVnRyxFQUFBNnZGLE9BQUE5dUYsR0FBQWhiLEVBQUEsRUFBcUIsTUFBTSxLQUFBaWEsRUFBQTJ2RixNQUFBNXVGLEdBQUFoYixFQUFrQixJQUFBUSxHQUFBLEVBQVMsWUFBQW1NLEVBQUEsQ0FBZSxPQUFBM0ssS0FBQTg0RyxlQUEyQixLQUFBN2dHLEVBQUErdkYsT0FBQWpxRyxHQUFBNE0sRUFBQXhNLEVBQXFCLE1BQU0sS0FBQThaLEVBQUE2dkYsT0FBQS9wRyxJQUFBNE0sRUFBQXhNLEdBQUEsRUFBeUIsTUFBTSxLQUFBOFosRUFBQWd3RixTQUFBenBHLEdBQUEsRUFBQXdCLEtBQUE4NEcsY0FBQTdnRyxFQUFBOHZGLElBQThDdHpGLEVBQUExVyxFQUFBNE0sRUFBQW5MLEVBQUFxNkcsYUFBcUIsSUFBQW44RyxFQUFBLEVBQVFBLEVBQUE0YSxFQUFBaFgsT0FBVzVELElBQUEsQ0FBSyxJQUFBK2pCLEVBQUEsR0FBQXRpQixFQUFBbVosRUFBQTVhLEdBQUEyRCxNQUFBLEtBQUEwNUMsRUFBQSxFQUErQkEsRUFBQTU3QyxFQUFBbUMsT0FBV3k1QyxJQUFBcDlDLEVBQUE4akIsRUFBQXRpQixFQUFBNDdDLEdBQUEsSUFBQS82QyxLQUFBbzZHLFVBQUF6OEcsR0FBQUssR0FBQXlqQixFQUFBbmdCLE9BQUEsR0FBQXRCLEtBQUFxNkcsWUFBQTc2RyxFQUFBaWlCLEVBQUF6SSxFQUFBamIsRUFBQTBXLEdBQUFnTixFQUFBdGlCLEVBQUE0N0MsR0FBQSxJQUFBaDlDLEdBQUF5QixFQUFBaTZHLGVBQUFoNEYsRUFBQTlqQixFQUFxSHFDLEtBQUFxNkcsWUFBQTc2RyxFQUFBaWlCLEVBQUF6SSxFQUFBamIsRUFBQTBXLEdBQUExVyxHQUFBeUIsRUFBQWk2RyxjQUFBajdHLElBQUF3QixLQUFBODRHLGNBQUE3Z0csRUFBQWd3RixlQUFtRixDQUFLLElBQUF4b0csRUFBQSxFQUFBYixFQUFBWSxFQUFBdzZHLFlBQUFFLFNBQWlDLElBQUF0N0csSUFBQXFaLEVBQUE2dkYsT0FBQXJvRyxHQUFBNlksRUFBQWhYLE9BQUEsR0FBQTlCLEVBQUFpNkcsY0FBQSxFQUFBNzZHLElBQUFxWixFQUFBK3ZGLFNBQUF2b0csR0FBQTZZLEVBQUFoWCxPQUFBLEdBQUE5QixFQUFBaTZHLGVBQUFyM0csRUFBQSxFQUFxR0EsRUFBQWtXLEVBQUFoWCxPQUFXYyxJQUFBcEMsS0FBQXE2RyxZQUFBNzZHLEVBQUE4WSxFQUFBbFcsR0FBQTRXLEVBQUFqYixFQUFBMEIsRUFBQWdWLEdBQUExVyxHQUFBeUIsRUFBQWk2RyxjQUF3RCxPQUFBajZHLElBQVVtTCxFQUFBeXRHLFNBQUE5NEcsVUFBQTA0RyxlQUFBLFdBQWdELE9BQUFoNEcsTUFBWTJLLEVBQUF5dEcsU0FBQTk0RyxVQUFBZzdHLFlBQUEsU0FBQTNoRyxHQUE4Qyx1QkFBQUEsS0FBQTNZLEtBQUF5NEcsWUFBQTkvRixFQUFBdTFDLE1BQUF2MUMsRUFBQXUxQyxLQUFBL2pELFdBQXNFUSxFQUFBeXRHLFNBQUE5NEcsVUFBQXc2RyxtQkFBQSxXQUFvRCxHQUFBOTVHLEtBQUFzNkcsY0FBQSxPQUFBdDZHLEtBQUFzbUcsYUFBQSxjQUFBdG1HLEtBQUF5NEcsVUFBQUUsZUFBQTM0RyxLQUFBc21HLGFBQUEsZUFBQXRtRyxLQUFBeTRHLFVBQUFHLGdCQUFBNTRHLEtBQWdLLElBQUEyWSxFQUFBcWUsU0FBQUMsY0FBQSxRQUFxQ3RlLEVBQUFtMUYsTUFBQWp5QyxXQUFBNzdELEtBQUF5NEcsVUFBQTkvRixFQUFBbTFGLE1BQUF5TSxTQUFBdjZHLEtBQUF1NEcsVUFBQSxLQUFBNS9GLEVBQUE2NkYsVUFBQSxVQUE2RixJQUFBeDZGLEVBQUFnZSxTQUFBQyxjQUFBLE9BQW9DamUsRUFBQTgwRixNQUFBd0ssUUFBQSxlQUFBdC9GLEVBQUE4MEYsTUFBQXZnRSxNQUFBLE1BQUF2MEIsRUFBQTgwRixNQUFBLytFLE9BQUEsTUFBd0UsSUFBQWh4QixFQUFBaTVCLFNBQUFDLGNBQUEsT0FBb0NsNUIsRUFBQXFuRCxZQUFBenNDLEdBQUE1YSxFQUFBcW5ELFlBQUFwc0MsR0FBQWpiLEVBQUErdkcsTUFBQS8rRSxPQUFBLE1BQUFoeEIsRUFBQSt2RyxNQUFBME0sU0FBQSxTQUFBeGpGLFNBQUFpOUQsS0FBQTd1QyxZQUFBcm5ELEdBQUFpYixFQUFBODBGLE1BQUEyTSxjQUFBLFdBQStJLElBQUE5dkcsRUFBQTNNLEVBQUFnYixHQUFBZixFQUFBamEsRUFBQTJhLEdBQUFMLEVBQUEzTixFQUFBLEdBQUFzTixFQUFBLEdBQThCZSxFQUFBODBGLE1BQUEyTSxjQUFBLFNBQUE5dkcsRUFBQTNNLEVBQUFnYixHQUFBZixFQUFBamEsRUFBQTJhLEdBQTZDLElBQUFvaUMsRUFBQXB3QyxFQUFBLEdBQUFzTixFQUFBLEdBQUF2YSxFQUFBcTlDLEVBQUF6aUMsRUFBc0IsT0FBQTBlLFNBQUFpOUQsS0FBQXJ2QyxZQUFBN21ELEdBQUFpQyxLQUFBc21HLGFBQUEsY0FBQWh1RixHQUFBdFksS0FBQXNtRyxhQUFBLGVBQUE1b0csR0FBQXNDLE1BQWdIZ1osRUFBQXhiLFFBQUFtTixFQUFBeXRHLFdBQXdCMWMsb0JBQUEsR0FBQWdWLFNBQUEsS0FBbUN2K0IsSUFBQSxTQUFBeDVELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLFVBQUFoTyxFQUFBZ08sRUFBQSxlQUFBVixFQUFBVSxFQUFBLG9CQUE2REEsRUFBQSxpQkFBbUIsSUFBQUwsRUFBQSxnQkFBc0J0YSxFQUFBKzVHLFdBQUEsU0FBQXAvRixFQUFBSyxFQUFBamIsR0FBNkIsT0FBQUMsRUFBQW82RyxTQUFBdjZHLEtBQUFtQyxLQUFBMlksRUFBQUssRUFBQWpiLEdBQUFpQyxLQUFBMDZHLGVBQUExNkcsS0FBQTYzRyxPQUFBdHhHLFdBQUEsTUFBQXZHLEtBQUFrMkcsT0FBQTVQLGFBQUEsaUJBQUF0bUcsS0FBQTA2RyxnQkFBQTE2RyxNQUF3SmhDLEVBQUErNUcsV0FBQXo0RyxVQUFBbEIsT0FBQVksT0FBQWhCLEVBQUFvNkcsU0FBQTk0RyxXQUFBdEIsRUFBQSs1RyxXQUFBejRHLFVBQUEwNEcsZUFBQSxXQUE2R2g0RyxLQUFBMjZHLGlCQUFBMzZHLEtBQUE0Nkcsd0JBQUEsRUFBQTU2RyxLQUFBNjZHLFNBQUFsd0csRUFBQWdpRyxlQUFBM3NHLEtBQUE4NkcsV0FBQW53RyxFQUFBK2hHLGlCQUFBMXNHLEtBQUEwNkcsZUFBQUssUUFBQXB3RyxFQUFBcytGLE1BQUFqcEcsS0FBQTA2RyxlQUFBeHNELEtBQUEsMEJBQTZNbHdELEVBQUErNUcsV0FBQXo0RyxVQUFBdXpHLE9BQUEsU0FBQWw2RixFQUFBSyxHQUE2Q2hiLEVBQUFvNkcsU0FBQTk0RyxVQUFBdXpHLE9BQUFoMUcsS0FBQW1DLEtBQUEyWSxFQUFBSyxHQUFBaFosS0FBQTA2RyxlQUFBTSxNQUFBaDdHLEtBQUFrMkcsT0FBQW5HLGNBQUEvdkcsS0FBQWsyRyxPQUFBbkcsZ0JBQTBIL3hHLEVBQUErNUcsV0FBQXo0RyxVQUFBMm1HLFdBQUEsV0FBOEMsR0FBQWptRyxLQUFBMDZHLGVBQUFPLE9BQUFqN0csS0FBQWs3RyxjQUFBNTNHLFVBQUEsYUFBQXRGLEVBQUFrb0csTUFBQWxtRyxLQUFBazJHLE9BQUEvUCxNQUFBN2lHLFVBQUEsT0FBQXRELEtBQUF1dEMsTUFBQXZ0QyxLQUFBK3VCLFlBQTJJLENBQUssSUFBQXBXLEVBQUEzWSxLQUFBbTdHLFdBQUFuaUcsRUFBQWhaLEtBQUFrMkcsT0FBQW5jLE1BQUF6eUYsTUFBQXRILEtBQUFrMkcsT0FBQTV5RyxXQUFBdkYsRUFBQWliLEVBQUE5WSxXQUFzRkYsS0FBQTY2RyxTQUFBOThHLEdBQUFpQyxLQUFBMDZHLGVBQUFVLFNBQUEsSUFBQXA3RyxLQUFBdXRDLE1BQUF2dEMsS0FBQSt1QixRQUFBL3VCLEtBQUE2NkcsU0FBQWxpRyxHQUEyRjNZLEtBQUEwNkcsZUFBQVcsVUFBQXI3RyxLQUFBazJHLE9BQUFsRyxjQUFBLEdBQTBEaHlHLEVBQUErNUcsV0FBQXo0RyxVQUFBK3ZCLE1BQUEsV0FBeUNydkIsS0FBQTA2RyxlQUFBTyxPQUFBajdHLEtBQUFrN0csY0FBQWw3RyxLQUFBMDZHLGVBQUFZLFVBQUEsSUFBQXQ3RyxLQUFBdXRDLE1BQUF2dEMsS0FBQSt1QixRQUFBL3VCLEtBQUEwNkcsZUFBQVcsVUFBQXI3RyxLQUFBazJHLE9BQUFsRyxjQUFBLEdBQWtLaHlHLEVBQUErNUcsV0FBQXo0RyxVQUFBMmhELEtBQUEsV0FBd0MsSUFBQXRvQyxFQUFBM1ksS0FBQWsyRyxPQUFBbmMsTUFBQXp5RixNQUFBdEgsS0FBQWsyRyxPQUFBNXlHLFdBQXFEdEQsS0FBQTY2RyxTQUFBbGlHLEVBQUF6WSxhQUE0QmxDLEVBQUErNUcsV0FBQXo0RyxVQUFBa3RELE9BQUEsV0FBMEMsSUFBQTd6QyxFQUFBM1ksS0FBQWsyRyxPQUFBbmMsTUFBQXp5RixNQUFBdEgsS0FBQWsyRyxPQUFBNXlHLFdBQXFEdEQsS0FBQTg2RyxXQUFBbmlHLEVBQUF6WSxhQUE4QmxDLEVBQUErNUcsV0FBQXo0RyxVQUFBNm1HLE1BQUEsU0FBQXh0RixFQUFBSyxFQUFBamIsRUFBQTRNLEVBQUFzTixFQUFBSyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEdBQTBELElBQUFxZixFQUFNLElBQUl6aEIsS0FBQW01RyxRQUFBbjdHLEVBQUF1OUcsY0FBQTVpRyxhQUFBM2EsRUFBQXU5RyxjQUFBNWlHLEVBQUE2aUcsYUFBQTdpRyxFQUFBay9GLFNBQUFwMkYsRUFBQXpoQixLQUFBeTdHLHNCQUFBOWlHLEtBQUE4SSxNQUFBOUksRUFBQWsvRixRQUFBbC9GLEVBQUFrMUYsS0FBNkksSUFBQWx3RyxFQUFBLEVBQVFnYixFQUFBNDBCLE9BQUE1MEIsRUFBQTQwQixNQUFBLElBQUE1dkMsRUFBQThqQixFQUFBOHJCLE1BQUE1MEIsRUFBQTQwQixPQUFBdnRDLEtBQUEwNkcsZUFBQWdCLFVBQUFqNkYsRUFBQTlqQixFQUFBcWIsRUFBQXJiLEVBQUFJLEVBQUFKLEVBQUFnTixFQUFBaE4sRUFBQXNhLEVBQUFLLEVBQUF5aUMsRUFBQXI5QyxFQUFBMEUsR0FBaUcsTUFBQXVXLEdBQVMsOEJBQUFBLEVBQUExYSxLQUFBLE1BQUEwYSxFQUE2QzNZLEtBQUFrMkcsT0FBQWxHLGNBQUEsR0FBNEJoeUcsRUFBQSs1RyxXQUFBejRHLFVBQUFtOEcsc0JBQUEsU0FBQTlpRyxHQUEwRCxJQUFBQSxFQUFBay9GLE9BQUEsT0FBQWwvRixFQUFzQixJQUFBSyxFQUFBZixFQUFBMGpHLFVBQUFoakcsRUFBQWsvRixRQUFBOTVHLEVBQUFpNUIsU0FBQUMsY0FBQSxVQUErRGw1QixFQUFBd3ZDLE1BQUE1MEIsRUFBQWsvRixPQUFBdHFFLE1BQUF4dkMsRUFBQWd4QixPQUFBcFcsRUFBQWsvRixPQUFBOW9GLE9BQWdELFFBQUEvd0IsRUFBQUQsRUFBQXdJLFdBQUEsTUFBQW9FLEVBQUEzTSxFQUFBNDlHLGdCQUFBampHLEVBQUFrL0YsT0FBQXRxRSxNQUFBNTBCLEVBQUFrL0YsT0FBQTlvRixRQUFBelcsRUFBQTNOLEVBQUFveEMsS0FBQWhCLEVBQUEsRUFBOEZBLEVBQUEvaEMsRUFBQTFYLE9BQVd5NUMsR0FBQSxHQUFNLElBQUFyOUMsRUFBQXNiLEVBQUEraEMsR0FBQTM0QyxFQUFBNFcsRUFBQStoQyxFQUFBLEdBQUF0NUIsRUFBQXpJLEVBQUEraEMsRUFBQSxHQUFBcDlDLEVBQUFxYixFQUFBK2hDLEVBQUEsR0FBc0N6aUMsRUFBQXlpQyxHQUFBcjlDLEVBQUFzQyxLQUFBbTVHLE1BQUEsT0FBQTdnRyxFQUFBeWlDLEVBQUEsR0FBQTM0QyxFQUFBcEMsS0FBQW01RyxNQUFBLE9BQUE3Z0csRUFBQXlpQyxFQUFBLEdBQUF0NUIsRUFBQXpoQixLQUFBbTVHLE1BQUEsT0FBQTdnRyxFQUFBeWlDLEVBQUEsR0FBQXA5QyxFQUFBcUMsS0FBQW01RyxNQUFBLE9BQTBHLE9BQUFuN0csRUFBQTY5RyxhQUFBbHhHLEVBQUEsS0FBQTVNLEdBQStCQyxFQUFBKzVHLFdBQUF6NEcsVUFBQXc4RyxVQUFBLFNBQUFuakcsR0FBOEMzWSxLQUFBMDZHLGVBQUFxQix5QkFBQXBqRyxHQUErQzNhLEVBQUErNUcsV0FBQXo0RyxVQUFBMDhHLE1BQUEsV0FBeUMsSUFBQXJqRyxFQUFBM1ksS0FBQTA2RyxlQUFBcUIseUJBQUEvaUcsRUFBQTFWLG9CQUFBaEMsT0FBQSxHQUFBdkQsRUFBQStGLE1BQUF4RSxVQUFBb0ksTUFBQTdKLEtBQUF5RixVQUFBLEVBQUFBLFVBQUFoQyxPQUFBLEdBQWdKdEIsS0FBQTA2RyxlQUFBcUIseUJBQUEvaUcsRUFBQWhaLEtBQUFrMkcsT0FBQWwyRyxLQUFBazJHLE9BQUFsMUUsS0FBQTE1QixNQUFBdEgsS0FBQWsyRyxPQUFBbjRHLEdBQUFpQyxLQUFBZ2hDLEtBQUExNUIsTUFBQXRILEtBQUFqQyxHQUFBaUMsS0FBQTA2RyxlQUFBcUIseUJBQUFwakcsR0FBd0szYSxFQUFBKzVHLFdBQUF6NEcsVUFBQTBoQyxLQUFBLFdBQXdDLElBQUFyb0IsRUFBQUssRUFBQWpiLEVBQUE0TSxFQUFBc04sRUFBQUssRUFBQXlpQyxFQUFBcjlDLEVBQUEwRSxFQUFzQixPQUFBa0IsVUFBQWhDLE9BQUFxWCxFQUFBclYsVUFBQSxHQUFBMFYsRUFBQTFWLFVBQUEsR0FBQXZGLEVBQUF1RixVQUFBLEdBQUFxSCxFQUFBckgsVUFBQSxHQUFBMlUsRUFBQTNVLFVBQUEsR0FBQWdWLEVBQUFoVixVQUFBLEdBQUF5M0MsRUFBQXozQyxVQUFBLEdBQUE1RixFQUFBNEYsVUFBQSxHQUFBbEIsRUFBQWtCLFVBQUEsT0FBK0osQ0FBSyxPQUFBQSxVQUFBaEMsT0FBQSxVQUFBckIsTUFBQSwyQkFBbUUwWSxFQUFBM1ksS0FBQWsyRyxPQUFBbDlGLEVBQUExVixVQUFBLEdBQUF2RixFQUFBdUYsVUFBQSxHQUFBcUgsRUFBQXJILFVBQUEsR0FBQTJVLEVBQUEzVSxVQUFBLEdBQUFnVixFQUFBaFYsVUFBQSxHQUFBeTNDLEVBQUF6M0MsVUFBQSxHQUFBNUYsRUFBQTRGLFVBQUEsR0FBQWxCLEVBQUFrQixVQUFBLEdBQXNJdEYsRUFBQSs1RyxXQUFBa0UsWUFBQWo4RyxLQUFBMlksRUFBQUssRUFBQWpiLEVBQUE0TSxFQUFBc04sRUFBQUssRUFBQXlpQyxFQUFBcjlDLEVBQUEwRSxHQUFBcEMsS0FBQWsyRyxPQUFBbEcsY0FBQSxHQUE2RWh5RyxFQUFBKzVHLFdBQUFrRSxZQUFBLFNBQUF0akcsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBc04sRUFBQUssRUFBQXlpQyxFQUFBcjlDLEVBQUEwRSxHQUF3RDRXLEVBQUF3aUcsYUFBZSxJQUFBLzVGLEVBQUF6SSxFQUFBNitGLE9BQUF0cUUsTUFBQXYwQixFQUFBdTBCLE1BQTZCNTBCLEVBQUEraEcsZUFBQWdCLFVBQUExaUcsRUFBQTYrRixPQUFBcDJGLEVBQUExakIsRUFBQTBqQixFQUFBempCLEVBQUF5akIsRUFBQTlXLEVBQUE4VyxFQUFBeEosRUFBQUssRUFBQXlpQyxFQUFBcjlDLEVBQUEwRSxJQUE2RHBFLEVBQUErNUcsV0FBQXo0RyxVQUFBZixJQUFBLFNBQUFvYSxFQUFBSyxFQUFBamIsRUFBQTRNLEdBQThDLFlBQUE1TSxRQUFBLElBQUE0TSxTQUFBLElBQUFnTyxRQUFBLElBQUFLLEdBQUFMLEVBQUFLLEVBQUEsRUFBQWpiLEVBQUFpQyxLQUFBdXRDLE1BQUE1aUMsRUFBQTNLLEtBQUErdUIsUUFBQWh4QixFQUFBNE0sRUFBQSxHQUFBZ08sRUFBQTVhLEVBQUEsR0FBQWliLEVBQUFyTyxFQUFBLEdBQUFnTyxHQUFBM1ksS0FBQXV0QyxPQUFBdjBCLEdBQUFoWixLQUFBK3VCLE9BQUEsa0JBQTJKLElBQUE5VyxFQUFBalksS0FBQWsyRyxRQUFBbDJHLEtBQUFzWSxFQUFBTCxFQUFBODNGLGNBQTBDcDNGLEVBQUEvVCxLQUFBMEUsTUFBQXFQLEdBQUFLLEVBQUFwVSxLQUFBMEUsTUFBQTBQLEdBQUFqYixFQUFBNkcsS0FBQTBFLE1BQUF2TCxHQUFBNE0sRUFBQS9GLEtBQUEwRSxNQUFBcUIsR0FBZ0UsSUFBeU54TSxFQUFBcUIsRUFBek51N0MsRUFBQXBpQyxFQUFBTCxFQUFBNWEsRUFBQXNiLEVBQUFWLEVBQWdCLE9BQUF2YSxHQUFBLElBQUE0TSxHQUFBM0ssZ0JBQUFoQyxFQUFBODVHLFdBQUEsQ0FBK0MsSUFBQTExRyxFQUFBd0MsS0FBQXNYLElBQUFuZSxFQUFBa2EsRUFBQXMxQixPQUFBOXJCLEVBQUE3YyxLQUFBc1gsSUFBQXZSLEVBQUFzTixFQUFBOFcsUUFBQXB4QixFQUFBeUUsRUFBQWtXLEVBQUF4YSxFQUFBMmpCLEVBQUFuSixFQUFBblosRUFBQSxJQUFBbkIsRUFBQWtvRyxNQUFBOWpHLEVBQUFxZixHQUFnRixPQUFBdGlCLEVBQUEwNEcsT0FBQXR4RyxXQUFBLE1BQUFtMUcsVUFBQTE3RyxLQUFBNjNHLE9BQUE5OEQsRUFBQXI5QyxFQUFBQyxFQUFBRyxFQUFBLElBQUFzRSxFQUFBcWYsR0FBQXRpQixFQUFrRixPQUFBOFksRUFBQSszRixjQUFBN3hHLEVBQUE2QixLQUFBMDZHLGVBQUF3QixhQUFBbmhFLEVBQUFyOUMsRUFBQSxLQUFBcStDLEtBQUF2OEMsRUFBQSxJQUFBckIsRUFBQThaLEVBQUFra0csT0FBQTM4RyxFQUFBLEdBQUF1N0MsRUFBQXI5QyxFQUFBc0MsS0FBQXV0QyxNQUFBajFCLEtBQUFuYSxFQUFBcUIsRUFBQSxHQUFBckIsRUFBQXFCLEVBQUEsR0FBQXJCLEVBQUFxQixFQUFBLEdBQUFyQixFQUFBcUIsRUFBQSxLQUErSXhCLEVBQUErNUcsV0FBQXo0RyxVQUFBazhHLFdBQUEsV0FBOEMsSUFBQTdpRyxFQUFBM1ksS0FBQWsyRyxRQUFBbDJHLEtBQXdCLEdBQUEyWSxFQUFBcTNGLGFBQUEsQ0FBbUJyM0YsRUFBQXEzRixjQUFBLEVBQWtCLElBQUFoM0YsRUFBQUwsRUFBQW8zRixjQUFBaHlHLEVBQUFpQyxLQUFBdXRDLE1BQUF2MEIsRUFBQWhiLEVBQUFnQyxLQUFBK3VCLE9BQUEvVixFQUFBck8sRUFBQTNLLEtBQUEwNkcsZUFBQXdCLGFBQUEsSUFBQW4rRyxFQUFBQyxHQUFpRzJhLEVBQUEydEYsYUFBQSxZQUFBMzdGLEdBQUFnTyxFQUFBMnRGLGFBQUEsU0FBQTM3RixFQUFBb3hDLFFBQStELzlDLEVBQUErNUcsV0FBQXo0RyxVQUFBb0IsSUFBQSxTQUFBaVksRUFBQUssRUFBQWpiLEdBQTRDNGEsRUFBQS9ULEtBQUEwRSxNQUFBcVAsR0FBQUssRUFBQXBVLEtBQUEwRSxNQUFBMFAsR0FBZ0MsSUFBQXJPLEVBQUEzSyxLQUFBazJHLFFBQUFsMkcsS0FBd0IsR0FBQWpDLGFBQUFDLEVBQUFrb0csTUFBQWxtRyxLQUFBMDZHLGVBQUFPLE9BQUFqN0csS0FBQTA2RyxlQUFBMEIsYUFBQSxhQUFBcDhHLEtBQUEwNkcsZUFBQU0sTUFBQXJ3RyxFQUFBb2xHLGNBQUFwbEcsRUFBQW9sRyxlQUFBL3ZHLEtBQUEwNkcsZUFBQWdCLFVBQUEzOUcsRUFBQTg1RyxPQUFBbC9GLEVBQUFLLEdBQUFoWixLQUFBMDZHLGVBQUFXLFVBQUExd0csRUFBQXFsRyxjQUFBLE1BQXdQLENBQUssSUFBQS8zRixFQUFBLEVBQUFLLEVBQUEsRUFBQXlpQyxFQUFBLEVBQUFyOUMsRUFBQSxFQUFBMEUsRUFBQSxHQUFBNFcsRUFBQXJPLEVBQUFvbEcsZUFBQS92RyxLQUFBdXRDLE1BQUE1aUMsRUFBQW9sRyxlQUFBcDNGLEVBQUFoTyxFQUFBb2xHLGVBQTJGLEdBQUFwbEcsRUFBQTB4RyxZQUFBMXhHLEVBQUFxbEcsY0FBQXJsRyxFQUFBNndHLFdBQUEzOUcsS0FBQThNLEdBQUEsaUJBQUE1TSxFQUFBcUUsRUFBQXVJLEVBQUF3eEcsT0FBQTc2RyxTQUFBMlcsRUFBQWxhLEVBQUF1YSxFQUFBdmEsRUFBQWc5QyxFQUFBaDlDLEVBQUFMLEVBQUEsVUFBZ0gsR0FBQUssYUFBQStGLE1BQUEsQ0FBNEIsR0FBQS9GLEVBQUF1RCxPQUFBLFlBQUFyQixNQUFBLGdEQUE4RW1DLEVBQUF1SSxFQUFBd3hHLE9BQUE3NkcsU0FBQTJXLEVBQUFsYSxFQUFBLEdBQUF1YSxFQUFBdmEsRUFBQSxHQUFBZzlDLEVBQUFoOUMsRUFBQSxHQUFBTCxFQUFBSyxFQUFBLFNBQWlEQSxhQUFBQyxFQUFBcThGLE9BQUFqNEYsRUFBQXVJLEVBQUF3eEcsT0FBQTc2RyxTQUFBMlcsRUFBQWxhLEVBQUErOEYsT0FBQSxHQUFBeGlGLEVBQUF2YSxFQUFBKzhGLE9BQUEsR0FBQS8vQyxFQUFBaDlDLEVBQUErOEYsT0FBQSxHQUFBcDlGLEVBQUFLLEVBQUErOEYsT0FBQSxJQUF3RyxRQUFBcjVFLEVBQUEsRUFBWUEsRUFBQTlXLEVBQUFvbEcsY0FBa0J0dUYsSUFBQSxRQUFBOWpCLEVBQUEsRUFBZ0JBLEVBQUFnTixFQUFBb2xHLGNBQWtCcHlHLElBQUF5RSxFQUFBLElBQUE0VyxFQUFBck8sRUFBQW9sRyxjQUFBcHlHLEdBQUFxQyxLQUFBdXRDLE1BQUE1aUMsRUFBQW9sRyxlQUFBcDNGLEVBQUFoTyxFQUFBb2xHLGNBQUF0dUYsSUFBQTlXLEVBQUF3eEcsT0FBQS81RyxHQUFBNlYsRUFBQXROLEVBQUF3eEcsT0FBQS81RyxFQUFBLEdBQUFrVyxFQUFBM04sRUFBQXd4RyxPQUFBLzVHLEVBQUEsR0FBQTI0QyxFQUFBcHdDLEVBQUF3eEcsT0FBQS81RyxFQUFBLEdBQUExRSxJQUFnSk0sRUFBQSs1RyxXQUFBejRHLFVBQUFnOUcsYUFBQSxTQUFBM2pHLEVBQUFLLEVBQUFqYixFQUFBQyxHQUF1RCxJQUFBMk0sRUFBQTNLLEtBQUFrMkcsUUFBQWwyRyxLQUFBaVksRUFBQXROLEVBQUFvbEcsbUJBQTBDLElBQUFwM0YsUUFBQSxJQUFBSyxRQUFBLElBQUFqYixRQUFBLElBQUFDLElBQUEyYSxFQUFBLEVBQUFLLEVBQUEsRUFBQWpiLEVBQUFpQyxLQUFBdXRDLE1BQUF2dkMsRUFBQWdDLEtBQUErdUIsUUFBQWh4QixHQUFBa2EsRUFBQWphLEdBQUFpYSxFQUFBalksS0FBQTA2RyxlQUFBbUIsYUFBQWx4RyxFQUFBMHhHLFVBQUExakcsRUFBQUssRUFBQSxJQUFBamIsRUFBQUMsR0FBQSxJQUFBMmEsR0FBQSxJQUFBSyxHQUFBamIsSUFBQWlDLEtBQUF1dEMsT0FBQXZ2QyxJQUFBZ0MsS0FBQSt1QixTQUFBcGtCLEVBQUFxbEcsY0FBQSxJQUE0Tmh5RyxFQUFBKzVHLFdBQUF6NEcsVUFBQWk5RyxrQkFBQSxTQUFBNWpHLEVBQUFLLEdBQXdELElBQUFqYixFQUFBaWIsRUFBQSxFQUFBaGIsRUFBQTRHLEtBQUFxZCxJQUFBbGtCLEdBQUE0TSxFQUFBL0YsS0FBQUUsSUFBQS9HLEdBQUFrYSxFQUFBLEVBQUFyVCxLQUFBZ2dHLElBQUE3bUcsR0FBQXVhLEVBQUFLLEVBQUE1YSxFQUFBZzlDLEVBQUFuMkMsS0FBQXFkLElBQUEzSixHQUFBNWEsRUFBQWtILEtBQUFFLElBQUF3VCxHQUFBbFcsR0FBQSxFQUFBcEUsR0FBQSxFQUFBeWpCLEVBQUE5VyxHQUFBM00sRUFBQW9FLEdBQUE2VixFQUE4RyxPQUFPWSxHQUFBalUsS0FBQXFkLElBQUF0SixHQUFBNmpHLEdBQUE1M0csS0FBQUUsSUFBQTZULEdBQUFPLEdBQUE5VyxFQUFBMjRDLEVBQUF0NUIsRUFBQS9qQixFQUFBcXVGLEdBQUEzcEYsRUFBQTFFLEVBQUErakIsRUFBQXM1QixFQUFBeGpDLEdBQUFuVixFQUFBMjRDLEVBQUF0NUIsRUFBQS9qQixFQUFBKytHLEdBQUFyNkcsRUFBQTFFLEVBQUErakIsRUFBQXM1QixFQUFBcmpDLEdBQUE5UyxLQUFBcWQsSUFBQXRKLEVBQUFLLEdBQUFvOEMsR0FBQXh3RCxLQUFBRSxJQUFBNlQsRUFBQUssS0FBNkdoYixFQUFBKzVHLFdBQUF6NEcsVUFBQXN0RSxJQUFBLFNBQUFqMEQsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUFpYSxFQUFBSyxFQUFBeWlDLEdBQW9ELElBQUFyOUMsRUFBQXNDLEtBQUEwNkcsZUFBQXQ0RyxFQUFBckUsRUFBQSxFQUFBMGpCLEVBQUF6akIsRUFBQSxFQUFBRixFQUFBLEVBQUFxQixLQUFzRCxJQUFBd1osR0FBQXZXLEVBQUE0VyxHQUFBeUksRUFBY25KLEVBQUFMLEVBQXBFLE1BQTBFbmEsRUFBQThHLEtBQUFzWCxJQUFBNUQsRUFBQUwsRUFBQXROLEVBQUFzOEYsU0FBQTluRyxFQUFBeUQsS0FBQTVDLEtBQUF1OEcsa0JBQUF0a0csRUFBQW5hLElBQUFtYSxHQUFBbmEsRUFBb0UsT0FBQWtDLEtBQUFxNUcsVUFBQTM3RyxFQUFBOGtFLFlBQUFyakUsRUFBQXdLLFFBQUEsU0FBQTVMLEVBQUFDLEdBQTRELElBQUFBLEdBQUFOLEVBQUE2eUQsT0FBQTUzQyxFQUFBNWEsRUFBQThhLEdBQUF6VyxFQUFBNFcsRUFBQWpiLEVBQUF5K0csR0FBQS82RixHQUFBL2pCLEVBQUEwa0UsY0FBQXpwRCxFQUFBNWEsRUFBQW1iLEdBQUE5VyxFQUFBNFcsRUFBQWpiLEVBQUFndUYsR0FBQXRxRSxFQUFBOUksRUFBQTVhLEVBQUF3WixHQUFBblYsRUFBQTRXLEVBQUFqYixFQUFBMCtHLEdBQUFoN0YsRUFBQTlJLEVBQUE1YSxFQUFBMlosR0FBQXRWLEVBQUE0VyxFQUFBamIsRUFBQXEzRCxHQUFBM3pDLEtBQTBHczVCLElBQUFwd0MsRUFBQW0rRixLQUFBLE1BQUEvdEQsR0FBQXI5QyxFQUFBcXpELE9BQUFwNEMsRUFBQUssR0FBQXRiLEVBQUE0eUQsWUFBQTV5RCxFQUFBdWpELFFBQUFqaEQsS0FBQW81RyxZQUFBMTdHLEVBQUE4a0UsWUFBQXJqRSxFQUFBd0ssUUFBQSxTQUFBNUwsRUFBQUMsR0FBbUgsSUFBQUEsR0FBQU4sRUFBQTZ5RCxPQUFBNTNDLEVBQUE1YSxFQUFBOGEsR0FBQXpXLEVBQUE0VyxFQUFBamIsRUFBQXkrRyxHQUFBLzZGLEdBQUEvakIsRUFBQTBrRSxjQUFBenBELEVBQUE1YSxFQUFBbWIsR0FBQTlXLEVBQUE0VyxFQUFBamIsRUFBQWd1RixHQUFBdHFFLEVBQUE5SSxFQUFBNWEsRUFBQXdaLEdBQUFuVixFQUFBNFcsRUFBQWpiLEVBQUEwK0csR0FBQWg3RixFQUFBOUksRUFBQTVhLEVBQUEyWixHQUFBdFYsRUFBQTRXLEVBQUFqYixFQUFBcTNELEdBQUEzekMsS0FBMEdzNUIsSUFBQXB3QyxFQUFBbStGLEtBQUFwckcsRUFBQXF6RCxPQUFBcDRDLEVBQUFLLEdBQUF0YixFQUFBNHlELGFBQUF2VixJQUFBcHdDLEVBQUFrK0YsT0FBQW5yRyxFQUFBNHlELFlBQUE1eUQsRUFBQTh1RCxVQUFBeHNELE1BQXNGaEMsRUFBQSs1RyxXQUFBejRHLFVBQUFvOUcsUUFBQSxTQUFBL2pHLEdBQTRDLElBQUFLLEVBQUFoWixLQUFBMDZHLGVBQUEzOEcsRUFBQWlDLEtBQUFxNUcsUUFBQXI3RyxFQUFBZ0MsS0FBQW81RyxVQUFBenVHLEVBQUFnTyxFQUFBLEdBQUFWLEVBQUFVLEVBQUEsR0FBQW9pQyxFQUFBcGlDLEVBQUEsR0FBQWpiLEVBQUFpYixFQUFBLEdBQXNGLEdBQUE1YSxJQUFBQyxHQUFVLEdBQUFnQyxLQUFBbTdHLGFBQUE3aUcsRUFBQSxPQUFBdFksVUFBbUMsSUFBQWpDLEdBQUFDLEdBQUFnQyxLQUFBMjhHLGVBQUFya0csRUFBQSxPQUFBdFksS0FBaUQsSUFBQW9DLEVBQUEsWUFBQXFmLEVBQUFzNUIsRUFBQSxFQUFBMzRDLEVBQUF6RSxFQUFBRCxFQUFBLEVBQUEwRSxFQUFBdEUsRUFBQTZNLEVBQUFvd0MsRUFBQTU3QyxFQUFBOFksRUFBQXZhLEVBQUFTLEVBQUF3TSxFQUFBb3dDLEVBQUEsRUFBQXY3QyxFQUFBeVksRUFBQXZhLEVBQUEsRUFBOERzYixFQUFBd3BELFlBQUF4cEQsRUFBQXUzQyxPQUFBNWxELEVBQUFuTCxHQUFBd1osRUFBQW9wRCxjQUFBejNELEVBQUFuTCxFQUFBN0IsRUFBQVEsRUFBQXNqQixFQUFBeEosRUFBQTlaLEVBQUE4WixHQUFBZSxFQUFBb3BELGNBQUFqa0UsRUFBQXNqQixFQUFBeEosRUFBQW5hLEVBQUEwQixFQUFBN0IsRUFBQUcsRUFBQTBCLEdBQUF3WixFQUFBb3BELGNBQUF0a0UsRUFBQTBCLEVBQUE3QixFQUFBUSxFQUFBc2pCLEVBQUF0aUIsRUFBQWhCLEVBQUFnQixHQUFBNlosRUFBQW9wRCxjQUFBamtFLEVBQUFzakIsRUFBQXRpQixFQUFBd0wsRUFBQW5MLEVBQUE3QixFQUFBZ04sRUFBQW5MLEdBQUF3WixFQUFBczNDLFlBQUF2eUQsR0FBQWliLEVBQUFpb0MsT0FBQWpqRCxHQUFBZ2IsRUFBQXd6QyxVQUF3TXh1RCxFQUFBKzVHLFdBQUF6NEcsVUFBQTRzRSxLQUFBLFNBQUF2ekQsRUFBQUssRUFBQWpiLEVBQUFDLEdBQStDLElBQUEyTSxFQUFBM0ssS0FBQTA2RyxlQUEwQixPQUFBMTZHLEtBQUFvNUcsVUFBQXA1RyxLQUFBMjhHLGVBQUFya0csRUFBQXRZLE1BQUEySyxFQUFBZzRELFVBQUEsTUFBQWg0RCxFQUFBaXlHLFVBQUEsT0FBQWp5RyxFQUFBNjNELFlBQUE3M0QsRUFBQTRsRCxPQUFBNTNDLEVBQUFLLEdBQUFyTyxFQUFBb21ELE9BQUFoekQsRUFBQUMsR0FBQTJNLEVBQUE2aEQsU0FBQTdoRCxFQUFBZzRELFVBQUEsTUFBQWg0RCxFQUFBaXlHLFdBQUEsUUFBQTU4RyxZQUE4TGhDLEVBQUErNUcsV0FBQXo0RyxVQUFBMHZCLE1BQUEsU0FBQXJXLEVBQUFLLEdBQTRDLElBQUFqYixFQUFBaUMsS0FBQTA2RyxlQUEwQixJQUFBMTZHLEtBQUFvNUcsVUFBQSxPQUFBcDVHLEtBQStCLEdBQUFBLEtBQUEyOEcsZUFBQXJrRyxFQUFBLE9BQUF0WSxLQUFxQyxJQUFBaEMsRUFBQWdDLEtBQUEyOEcsYUFBQTFrRyxFQUFBalksS0FBQW03RyxXQUEwQ3hpRyxFQUFBL1QsS0FBQW9TLE1BQUEyQixHQUFBSyxFQUFBcFUsS0FBQW9TLE1BQUFnQyxHQUFBaFosS0FBQTY2RyxTQUFBNzhHLEdBQUFELEVBQUE0a0UsVUFBQSxHQUFBNWtFLEVBQUF5a0UsWUFBQXprRSxFQUFBNnVFLElBQUFqMEQsRUFBQUssRUFBQWpiLEVBQUE0a0UsVUFBQSxJQUFBaDRELEVBQUF5OEYsUUFBQSxHQUFBcnBHLEVBQUFrakQsUUFBQWxqRCxFQUFBcTlHLFNBQUF6aUcsRUFBQUssRUFBQSxLQUFBaFosS0FBQTY2RyxTQUFBNWlHLElBQW9LamEsRUFBQSs1RyxXQUFBejRHLFVBQUF1OUcsS0FBQSxTQUFBbGtHLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLEVBQUE4aUMsRUFBQXI5QyxHQUF1RCxJQUFBMEUsRUFBQXBDLEtBQUEwNkcsZUFBQWo1RixFQUFBemhCLEtBQUFxNUcsUUFBQTE3RyxFQUFBcUMsS0FBQW81RyxVQUEwRCxHQUFBMzNGLElBQUE5akIsR0FBVSxHQUFBcUMsS0FBQW03RyxhQUFBN2lHLEVBQUEsT0FBQXRZLFVBQW1DLElBQUF5aEIsR0FBQTlqQixHQUFBcUMsS0FBQTI4RyxlQUFBcmtHLEVBQUEsT0FBQXRZLEtBQWlELE9BQUFvQyxFQUFBb2dFLFlBQUFwZ0UsRUFBQW11RCxPQUFBNTNDLEVBQUFLLEdBQUE1VyxFQUFBMnVELE9BQUFoekQsRUFBQUMsR0FBQW9FLEVBQUEydUQsT0FBQXBtRCxFQUFBc04sR0FBQTdWLEVBQUEydUQsT0FBQWhXLEVBQUFyOUMsR0FBQTBFLEVBQUFrdUQsWUFBQTd1QyxHQUFBcmYsRUFBQTYrQyxPQUFBdGpELEdBQUF5RSxFQUFBb3FELFNBQUF4c0QsTUFBMEhoQyxFQUFBKzVHLFdBQUF6NEcsVUFBQXc5RyxLQUFBLFNBQUFua0csR0FBeUMsSUFBQUssRUFBQUwsRUFBQSxHQUFBNWEsRUFBQTRhLEVBQUEsR0FBQTNhLEVBQUEyYSxFQUFBLEdBQUFoTyxFQUFBZ08sRUFBQSxHQUFBVixFQUFBVSxFQUFBLEdBQUFvaUMsRUFBQXBpQyxFQUFBLEdBQUFqYixFQUFBaWIsRUFBQSxHQUFBdlcsRUFBQXVXLEVBQUEsR0FBQThJLEVBQUF6aEIsS0FBQTA2RyxlQUFBLzhHLEVBQUFxQyxLQUFBcTVHLFFBQUF2N0csRUFBQWtDLEtBQUFvNUcsVUFBa0gsR0FBQXo3RyxJQUFBRyxHQUFVLEdBQUFrQyxLQUFBbTdHLGFBQUE3aUcsRUFBQSxPQUFBdFksVUFBbUMsSUFBQXJDLEdBQUFHLEdBQUFrQyxLQUFBMjhHLGVBQUFya0csRUFBQSxPQUFBdFksS0FBaUQsR0FBQUEsS0FBQW81RyxXQUFBMzNGLEVBQUFraEQsVUFBQSxNQUFBbGhELEVBQUFtN0YsVUFBQSxPQUFBbjdGLEVBQUErZ0QsaUJBQUEsSUFBQXZxRCxFQUFBd0osRUFBQXE3RixLQUFBOWpHLEVBQUFqYixFQUFBQyxFQUFBMk0sT0FBaUcsTUFBSyxJQUFBb3dDLE1BQUE5aUMsUUFBQSxJQUFBdmEsTUFBQXE5QyxRQUFBLElBQUEzNEMsTUFBQTFFLEdBQXNELElBQUF5QixFQUFBbkIsRUFBQSxFQUFBRyxFQUFBd00sRUFBQSxFQUFnQjNNLEVBQUEsRUFBQWlhLE1BQUE5WSxHQUFBd0wsRUFBQSxFQUFBc04sTUFBQTlaLEdBQUFILEVBQUEsRUFBQSs4QyxNQUFBNTdDLEdBQUF3TCxFQUFBLEVBQUFvd0MsTUFBQTU4QyxHQUFBSCxFQUFBLEVBQUFOLE1BQUF5QixHQUFBd0wsRUFBQSxFQUFBak4sTUFBQVMsR0FBQUgsRUFBQSxFQUFBb0UsTUFBQWpELEdBQUF3TCxFQUFBLEVBQUF2SSxNQUFBakUsR0FBQXNqQixFQUFBK2dELFlBQUEvZ0QsRUFBQTh1QyxPQUFBdjNDLEVBQUFmLEVBQUFsYSxHQUFBMGpCLEVBQUFzN0YsTUFBQS9qRyxFQUFBaGIsRUFBQUQsRUFBQWliLEVBQUFoYixFQUFBRCxFQUFBNE0sRUFBQW93QyxHQUFBdDVCLEVBQUFzN0YsTUFBQS9qRyxFQUFBaGIsRUFBQUQsRUFBQTRNLEVBQUFxTyxFQUFBamIsRUFBQTRNLEVBQUFqTixHQUFBK2pCLEVBQUFzN0YsTUFBQS9qRyxFQUFBamIsRUFBQTRNLEVBQUFxTyxFQUFBamIsRUFBQXFFLEdBQUFxZixFQUFBczdGLE1BQUEvakcsRUFBQWpiLEVBQUFpYixFQUFBaGIsRUFBQUQsRUFBQWthLEdBQUF3SixFQUFBNnVDLFlBQWdQLE9BQUF0d0QsS0FBQXE1RyxTQUFBNTNGLEVBQUF3L0IsT0FBQWpoRCxLQUFBbzVHLFdBQUEzM0YsRUFBQStxQyxTQUFBeHNELEtBQUFvNUcsV0FBQTMzRixFQUFBa2hELFVBQUEsTUFBQWxoRCxFQUFBbTdGLFdBQUEsUUFBQTU4RyxNQUFxSGhDLEVBQUErNUcsV0FBQXo0RyxVQUFBMDlHLFNBQUEsU0FBQXJrRyxHQUE2QyxJQUFBSyxFQUFBaFosS0FBQTA2RyxlQUFBMzhHLEVBQUFpQyxLQUFBcTVHLFFBQUFyN0csRUFBQWdDLEtBQUFvNUcsVUFBQXp1RyxFQUFBZ08sRUFBQSxHQUFBVixFQUFBVSxFQUFBLEdBQUFvaUMsRUFBQXBpQyxFQUFBLEdBQUFqYixFQUFBaWIsRUFBQSxHQUFBdlcsRUFBQXVXLEVBQUEsR0FBQThJLEVBQUE5SSxFQUFBLEdBQW9HLEdBQUE1YSxJQUFBQyxHQUFVLEdBQUFnQyxLQUFBbTdHLGFBQUE3aUcsRUFBQSxPQUFBdFksVUFBbUMsSUFBQWpDLEdBQUFDLEdBQUFnQyxLQUFBMjhHLGVBQUFya0csRUFBQSxPQUFBdFksS0FBaURnWixFQUFBd3BELFlBQUF4cEQsRUFBQXUzQyxPQUFBNWxELEVBQUFzTixHQUFBZSxFQUFBKzNDLE9BQUFoVyxFQUFBcjlDLEdBQUFzYixFQUFBKzNDLE9BQUEzdUQsRUFBQXFmLEdBQUF6SSxFQUFBczNDLFlBQUF2eUQsR0FBQWliLEVBQUFpb0MsT0FBQWpqRCxHQUFBZ2IsRUFBQXd6QyxVQUFnR3h1RCxFQUFBKzVHLFdBQUF6NEcsVUFBQTI5RyxTQUFBLFNBQUF0a0csRUFBQUssRUFBQWpiLEVBQUFDLEVBQUFpYSxFQUFBSyxFQUFBeWlDLEdBQXlELE9BQUEvaEMsRUFBQTFYLE9BQUEsT0FBQXRCLEtBQTRCLElBQUFBLEtBQUFvNUcsWUFBQXA1RyxLQUFBcTVHLFFBQUEsT0FBQXI1RyxLQUE4QyxJQUFBdEMsRUFBQTBFLEVBQUF1VyxJQUFBaE8sRUFBQWcrRixNQUFvQnZtRyxJQUFBa1csR0FBQVUsRUFBQXBXLEtBQUFvVyxFQUFBLElBQW9CLElBQUF5SSxFQUFBOWpCLEVBQUFHLEVBQUFrYixFQUFBMVgsT0FBbUIsSUFBQXZELEdBQUFnOUMsSUFBQXB3QyxFQUFBdXlHLFNBQUEsT0FBQW5pRSxFQUFBLElBQUEvOEMsR0FBQSs4QyxJQUFBcHdDLEVBQUF1eUcsU0FBQSxPQUFBbmlFLEVBQUEsSUFBQTlpQyxHQUFBOGlDLElBQUFwd0MsRUFBQXV5RyxTQUFBLE9BQUFuaUUsRUFBQSxHQUFBQSxJQUFBcHdDLEVBQUF1OUYsT0FBQSxJQUFBem1GLEVBQUEsRUFBcUhBLEVBQUEzakIsRUFBSTJqQixJQUFBL2pCLEVBQUFzYixFQUFBeUksR0FBQXpoQixLQUFBbzVHLFdBQUFwNUcsS0FBQWsyRyxPQUFBMXBELE9BQUE5dUQsRUFBQSxJQUFBc0MsS0FBQWsyRyxPQUFBbG5GLE1BQUF0eEIsRUFBQSxHQUFBQSxFQUFBLFNBQWlGLEdBQUFxOUMsSUFBQXB3QyxFQUFBdzlGLE1BQUEsSUFBQTFtRixFQUFBLEVBQTRCQSxFQUFBLEVBQUEzakIsRUFBTTJqQixHQUFBLEVBQUEvakIsRUFBQXNiLEVBQUF5SSxHQUFBemhCLEtBQUFvNUcsV0FBQXA1RyxLQUFBazJHLE9BQUExcEQsT0FBQXh6QyxFQUFBeUksRUFBQSxPQUFBemhCLEtBQUFrMkcsT0FBQWhxQyxLQUFBeHVFLEVBQUEsR0FBQUEsRUFBQSxHQUFBc2IsRUFBQXlJLEVBQUEsTUFBQXpJLEVBQUF5SSxFQUFBLFlBQTBHLEdBQUFzNUIsSUFBQXB3QyxFQUFBMjlGLFVBQUEsSUFBQTdtRixFQUFBLEVBQWdDQSxFQUFBLEVBQUEzakIsRUFBTTJqQixHQUFBLEVBQUEvakIsRUFBQXNiLEVBQUF5SSxHQUFBemhCLEtBQUEwNkcsZUFBQWw0QyxZQUFBeGlFLEtBQUEwNkcsZUFBQW5xRCxPQUFBN3lELEVBQUEsR0FBQUEsRUFBQSxJQUFBc0MsS0FBQTA2RyxlQUFBM3BELE9BQUEvM0MsRUFBQXlJLEVBQUEsTUFBQXpJLEVBQUF5SSxFQUFBLE9BQUF6aEIsS0FBQTA2RyxlQUFBM3BELE9BQUEvM0MsRUFBQXlJLEVBQUEsTUFBQXpJLEVBQUF5SSxFQUFBLE9BQUF6aEIsS0FBQTA2RyxlQUFBcHFELFlBQUF0d0QsS0FBQXE1RyxVQUFBcjVHLEtBQUFrMkcsT0FBQWoxRCxLQUFBam9DLEVBQUF5SSxFQUFBLE9BQUF6aEIsS0FBQTA2RyxlQUFBejVELFFBQUFqaEQsS0FBQW81RyxZQUFBcDVHLEtBQUFrMkcsT0FBQTFwRCxPQUFBeHpDLEVBQUF5SSxFQUFBLE9BQUF6aEIsS0FBQTA2RyxlQUFBbHVELGVBQXNXLEdBQUF6UixJQUFBcHdDLEVBQUE2OUYsZUFBQSxJQUFBL21GLEVBQUEsRUFBcUNBLEVBQUEsRUFBQTNqQixFQUFNMmpCLElBQUEvakIsRUFBQXNiLEVBQUF5SSxHQUFBemhCLEtBQUEwNkcsZUFBQWw0QyxZQUFBeGlFLEtBQUEwNkcsZUFBQW5xRCxPQUFBdjNDLEVBQUF5SSxFQUFBLE1BQUF6SSxFQUFBeUksRUFBQSxPQUFBemhCLEtBQUEwNkcsZUFBQTNwRCxPQUFBcnpELEVBQUEsR0FBQUEsRUFBQSxJQUFBc0MsS0FBQW81RyxXQUFBcDVHLEtBQUFrMkcsT0FBQTFwRCxPQUFBeHpDLEVBQUF5SSxFQUFBLE9BQ25rK0J6aEIsS0FBQXE1RyxTQUFBcjVHLEtBQUFrMkcsT0FBQWoxRCxLQUFBam9DLEVBQUF5SSxFQUFBLE9BQUFBLEVBQUEsRUFBQTNqQixJQUFBa0MsS0FBQTA2RyxlQUFBM3BELE9BQUEvM0MsRUFBQXlJLEVBQUEsTUFBQXpJLEVBQUF5SSxFQUFBLE9BQUF6aEIsS0FBQW81RyxXQUFBcDVHLEtBQUFrMkcsT0FBQTFwRCxPQUFBeHpDLEVBQUF5SSxFQUFBLE9BQUF6aEIsS0FBQXE1RyxTQUFBcjVHLEtBQUFrMkcsT0FBQWoxRCxLQUFBam9DLEVBQUF5SSxFQUFBLFFBQUF6aEIsS0FBQW05RywwQkFBcU4sR0FBQXBpRSxJQUFBcHdDLEVBQUE0OUYsY0FBNEIsR0FBQXpxRyxFQUFBLEdBQVEsSUFBQWtDLEtBQUEwNkcsZUFBQWw0QyxZQUFBL2dELEVBQUEsRUFBd0NBLEVBQUEzakIsRUFBSTJqQixJQUFBL2pCLEVBQUFzYixFQUFBeUksR0FBQXpoQixLQUFBMDZHLGVBQUFucUQsT0FBQXYzQyxFQUFBLE1BQUFBLEVBQUEsT0FBQWhaLEtBQUEwNkcsZUFBQTNwRCxPQUFBLzNDLEVBQUF5SSxFQUFBLE1BQUF6SSxFQUFBeUksRUFBQSxPQUFBemhCLEtBQUEwNkcsZUFBQTNwRCxPQUFBcnpELEVBQUEsR0FBQUEsRUFBQSxJQUFBc0MsS0FBQTA2RyxlQUFBM3BELE9BQUEvM0MsRUFBQSxNQUFBQSxFQUFBLE9BQUF5SSxFQUFBM2pCLEVBQUEsSUFBQWtDLEtBQUFxNUcsU0FBQTM3RyxFQUFBLEtBQUFzYixFQUFBeUksRUFBQSxPQUFBemhCLEtBQUFvNUcsV0FBQTE3RyxFQUFBLEtBQUFzYixFQUFBeUksRUFBQSxTQUFBemhCLEtBQUFxNUcsVUFBQXI1RyxLQUFBazJHLE9BQUFqMUQsS0FBQXZqRCxFQUFBLElBQUFzQyxLQUFBMDZHLGVBQUF6NUQsT0FBQWpoRCxLQUFBazJHLE9BQUFqMUQsS0FBQWpvQyxFQUFBeUksRUFBQSxRQUFBemhCLEtBQUFvNUcsWUFBQXA1RyxLQUFBazJHLE9BQUExcEQsT0FBQTl1RCxFQUFBLElBQUFzQyxLQUFBMDZHLGVBQUFsdUQsU0FBQXhzRCxLQUFBazJHLE9BQUExcEQsT0FBQXh6QyxFQUFBeUksRUFBQSxRQUFBemhCLEtBQUEwNkcsZUFBQXBxRCxZQUFBdHdELEtBQUEwNkcsZUFBQWw0QyxhQUEwZ0J4aUUsS0FBQW05RywyQkFBMkIsR0FBQXBpRSxJQUFBcHdDLEVBQUE4OUYsTUFBQSxJQUFBaG5GLEVBQUEsRUFBNEJBLEVBQUEsRUFBQTNqQixFQUFNMmpCLEdBQUEsR0FBTSxJQUFBL2pCLEVBQUFzYixFQUFBeUksR0FBQXpoQixLQUFBMDZHLGVBQUFsNEMsWUFBQXhpRSxLQUFBMDZHLGVBQUFucUQsT0FBQTd5RCxFQUFBLEdBQUFBLEVBQUEsSUFBQUMsRUFBQSxFQUFxRkEsRUFBQSxFQUFJQSxJQUFBcUMsS0FBQTA2RyxlQUFBM3BELE9BQUEvM0MsRUFBQXlJLEVBQUE5akIsR0FBQSxHQUFBcWIsRUFBQXlJLEVBQUE5akIsR0FBQSxJQUFvRHFDLEtBQUEwNkcsZUFBQTNwRCxPQUFBcnpELEVBQUEsR0FBQUEsRUFBQSxJQUFBc0MsS0FBQXE1RyxTQUFBcjVHLEtBQUFrMkcsT0FBQWoxRCxLQUFBam9DLEVBQUF5SSxFQUFBLE9BQUF6aEIsS0FBQW81RyxXQUFBcDVHLEtBQUFrMkcsT0FBQTFwRCxPQUFBeHpDLEVBQUF5SSxFQUFBLE9BQUF6aEIsS0FBQW05RywwQkFBd0osR0FBQXBpRSxJQUFBcHdDLEVBQUErOUYsWUFBMEIsR0FBQTVxRyxFQUFBLE1BQUEyakIsRUFBQSxFQUFlQSxFQUFBLEVBQUEzakIsRUFBTTJqQixHQUFBLEVBQUEvakIsRUFBQXNiLEVBQUF5SSxHQUFBemhCLEtBQUEwNkcsZUFBQWw0QyxZQUFBL2dELEVBQUEsRUFBQTNqQixHQUFBa0MsS0FBQTA2RyxlQUFBbnFELE9BQUF2M0MsRUFBQXlJLEVBQUEsTUFBQXpJLEVBQUF5SSxFQUFBLE9BQUF6aEIsS0FBQTA2RyxlQUFBM3BELE9BQUFyekQsRUFBQSxHQUFBQSxFQUFBLElBQUFzQyxLQUFBMDZHLGVBQUEzcEQsT0FBQS8zQyxFQUFBeUksRUFBQSxNQUFBekksRUFBQXlJLEVBQUEsT0FBQXpoQixLQUFBMDZHLGVBQUEzcEQsT0FBQS8zQyxFQUFBeUksRUFBQSxNQUFBekksRUFBQXlJLEVBQUEsT0FBQXpoQixLQUFBcTVHLFNBQUFyNUcsS0FBQWsyRyxPQUFBajFELEtBQUFqb0MsRUFBQXlJLEVBQUEsT0FBQXpoQixLQUFBbzVHLFdBQUFwNUcsS0FBQWsyRyxPQUFBMXBELE9BQUF4ekMsRUFBQXlJLEVBQUEsU0FBQXpoQixLQUFBMDZHLGVBQUFucUQsT0FBQTd5RCxFQUFBLEdBQUFBLEVBQUEsSUFBQXNDLEtBQUEwNkcsZUFBQTNwRCxPQUFBLzNDLEVBQUF5SSxFQUFBLE1BQUF6SSxFQUFBeUksRUFBQSxRQUFBemhCLEtBQUFtOUcseUJBQW9iLENBQUssSUFBQW45RyxLQUFBMDZHLGVBQUFsNEMsWUFBQXhpRSxLQUFBMDZHLGVBQUFucUQsT0FBQXYzQyxFQUFBLE1BQUFBLEVBQUEsT0FBQXlJLEVBQUEsRUFBb0ZBLEVBQUEzakIsRUFBSTJqQixLQUFBL2pCLEVBQUFzYixFQUFBeUksSUFBQTI3RixTQUFBMS9HLEVBQUE2eUQsT0FBQXZ3RCxLQUFBMDZHLGVBQUFucUQsT0FBQTd5RCxFQUFBLEdBQUFBLEVBQUEsSUFBQXNDLEtBQUEwNkcsZUFBQTNwRCxPQUFBcnpELEVBQUEsR0FBQUEsRUFBQSxLQUE0R3NDLEtBQUFtOUcseUJBQTBCLENBQUssSUFBQW45RyxLQUFBMDZHLGVBQUFsNEMsWUFBQS9nRCxFQUFBLEVBQXdDQSxFQUFBM2pCLEVBQUkyakIsSUFBQXpJLEVBQUF5SSxHQUFBMjdGLE9BQUFwa0csRUFBQXlJLEdBQUE4dUMsT0FBQXZ3RCxLQUFBMDZHLGVBQUFucUQsUUFBQSxHQUFBdjNDLEVBQUF5SSxHQUFBLElBQUF6aEIsS0FBQTA2RyxlQUFBM3BELE9BQUEvM0MsRUFBQXlJLEdBQUEsR0FBQXpJLEVBQUF5SSxHQUFBLElBQUF6aEIsS0FBQTA2RyxlQUFBL2tELGlCQUFBMzhDLEVBQUF5SSxHQUFBLEdBQUF6SSxFQUFBeUksR0FBQSxHQUFBekksRUFBQXlJLEdBQUEsR0FBQXpJLEVBQUF5SSxHQUFBLElBQXNMemhCLEtBQUFtOUcseUJBQTBCLENBQUssSUFBQW45RyxLQUFBMDZHLGVBQUFsNEMsWUFBQS9nRCxFQUFBLEVBQXdDQSxFQUFBM2pCLEVBQUkyakIsSUFBQXpJLEVBQUF5SSxHQUFBMjdGLE9BQUFwa0csRUFBQXlJLEdBQUE4dUMsT0FBQXZ3RCxLQUFBMDZHLGVBQUFucUQsT0FBQXYzQyxFQUFBeUksR0FBQSxHQUFBekksRUFBQXlJLEdBQUEsSUFBQXpoQixLQUFBMDZHLGVBQUEzcEQsT0FBQS8zQyxFQUFBeUksR0FBQSxHQUFBekksRUFBQXlJLEdBQUEsSUFBQXpoQixLQUFBMDZHLGVBQUF0NEMsY0FBQXBwRCxFQUFBeUksR0FBQSxHQUFBekksRUFBQXlJLEdBQUEsR0FBQXpJLEVBQUF5SSxHQUFBLEdBQUF6SSxFQUFBeUksR0FBQSxHQUFBekksRUFBQXlJLEdBQUEsR0FBQXpJLEVBQUF5SSxHQUFBLElBQXVNemhCLEtBQUFtOUcsMEJBQTBCLEdBQUFyL0csRUFBQSxHQUFhLElBQUFxQixLQUFBaEIsRUFBQSxFQUFBNkIsS0FBQWk1RyxnQkFBa0MsSUFBQWo1RyxLQUFBMDZHLGVBQUFsNEMsWUFBQXhpRSxLQUFBMDZHLGVBQUFucUQsT0FBQXYzQyxFQUFBLE1BQUFBLEVBQUEsT0FBQXlJLEVBQUEsRUFBb0ZBLEVBQUEsRUFBQTNqQixFQUFNMmpCLElBQUEvakIsRUFBQXNiLEVBQUF5SSxHQUFBdGlCLEVBQUEsSUFBQXpCLEVBQUEsR0FBQUEsRUFBQSxJQUFBeUIsRUFBQSxJQUFBekIsRUFBQSxJQUFBUyxFQUFBNmEsRUFBQXlJLEVBQUEsTUFBQXRqQixFQUFBNmEsRUFBQXlJLEVBQUEsU0FBQS9qQixFQUFBLElBQUFTLEVBQUE2YSxFQUFBeUksRUFBQSxNQUFBdGpCLEVBQUE2YSxFQUFBeUksRUFBQSxVQUFBdGlCLEVBQUEsSUFBQTZaLEVBQUF5SSxFQUFBLE9BQUF0akIsRUFBQTZhLEVBQUF5SSxHQUFBLEdBQUF0akIsRUFBQTZhLEVBQUF5SSxFQUFBLFNBQUF6SSxFQUFBeUksRUFBQSxPQUFBdGpCLEVBQUE2YSxFQUFBeUksR0FBQSxHQUFBdGpCLEVBQUE2YSxFQUFBeUksRUFBQSxVQUFBdGlCLEVBQUEsSUFBQTZaLEVBQUF5SSxFQUFBLE1BQUF6SSxFQUFBeUksRUFBQSxPQUFBemhCLEtBQUEwNkcsZUFBQXQ0QyxjQUFBampFLEVBQUEsTUFBQUEsRUFBQSxNQUFBQSxFQUFBLE1BQUFBLEVBQUEsTUFBQUEsRUFBQSxNQUFBQSxFQUFBLE9BQWtTaUQsR0FBQXBDLEtBQUEwNkcsZUFBQTNwRCxPQUFBLzNDLEVBQUF5SSxFQUFBLE1BQUF6SSxFQUFBeUksRUFBQSxPQUFBemhCLEtBQUFtOUcscUJBQTZFLE9BQUFwL0csR0FBQSxFQUFBQyxHQUFBLEVBQUFpYSxHQUFBLEVBQUFLLEdBQUEsRUFBQWxXLEdBQUE0VyxFQUFBODNDLE1BQUE5d0QsS0FBQWsyRyxPQUFBbEcsY0FBQSxFQUFBaHdHLE1BQXVFaEMsRUFBQSs1RyxXQUFBejRHLFVBQUErOUcsU0FBQSxXQUE0QyxnQ0FBQXI5RyxLQUFBMDZHLGlCQUFBMTZHLEtBQUEwNkcsZUFBQTRDLHVCQUFBLEdBQUF0OUcsTUFBeUdoQyxFQUFBKzVHLFdBQUF6NEcsVUFBQWkrRyxPQUFBLFdBQTBDLGdDQUFBdjlHLEtBQUEwNkcsaUJBQUExNkcsS0FBQTA2RyxlQUFBNEMsdUJBQUEsR0FBQXQ5RyxNQUF5R2hDLEVBQUErNUcsV0FBQXo0RyxVQUFBaytHLFVBQUEsU0FBQTdrRyxHQUE4QyxPQUFBQSxJQUFBaE8sRUFBQXMrRixPQUFBdHdGLElBQUFoTyxFQUFBcStGLFFBQUFyd0YsSUFBQWhPLEVBQUFvK0YsVUFBQS9vRyxLQUFBMDZHLGVBQUFLLFFBQUFwaUcsR0FBQTNZLE1BQXNGaEMsRUFBQSs1RyxXQUFBejRHLFVBQUFtK0csV0FBQSxTQUFBOWtHLEdBQStDLE9BQUFBLElBQUFoTyxFQUFBcytGLE9BQUF0d0YsSUFBQWhPLEVBQUF1K0YsT0FBQXZ3RixJQUFBaE8sRUFBQXcrRixRQUFBbnBHLEtBQUEwNkcsZUFBQWdELFNBQUEva0csR0FBQTNZLE1BQW9GaEMsRUFBQSs1RyxXQUFBejRHLFVBQUFxK0csYUFBQSxTQUFBaGxHLEdBQWlELE9BQUEzWSxLQUFBMDZHLGVBQUEvM0MsZUFBQSxJQUFBaHFELEdBQUEsSUFBQUEsRUFBQSxLQUFBQSxFQUFBM1ksTUFBbUVoQyxFQUFBKzVHLFdBQUF6NEcsVUFBQTY3RyxTQUFBLFdBQTRDLE9BQUFuN0csS0FBQTI2RyxtQkFBQTM2RyxLQUFBMjZHLGlCQUFBMzZHLEtBQUEwNkcsZUFBQWo0QyxXQUFBemlFLEtBQUEyNkcsa0JBQTBHMzhHLEVBQUErNUcsV0FBQXo0RyxVQUFBdTdHLFNBQUEsU0FBQWxpRyxHQUE2Q0EsSUFBQTNZLEtBQUEyNkcsbUJBQUEzNkcsS0FBQTA2RyxlQUFBajRDLFVBQUE5cEQsRUFBQTNZLEtBQUEyNkcsaUJBQUFoaUcsSUFBcUYzYSxFQUFBKzVHLFdBQUF6NEcsVUFBQXE5RyxXQUFBLFdBQThDLE9BQUEzOEcsS0FBQTQ2RyxxQkFBQTU2RyxLQUFBNDZHLG1CQUFBNTZHLEtBQUEwNkcsZUFBQWg0QyxhQUFBMWlFLEtBQUE0Nkcsb0JBQWtINThHLEVBQUErNUcsV0FBQXo0RyxVQUFBdzdHLFdBQUEsU0FBQW5pRyxHQUErQ0EsSUFBQTNZLEtBQUE0NkcscUJBQUE1NkcsS0FBQTA2RyxlQUFBaDRDLFlBQUEvcEQsRUFBQTNZLEtBQUE0NkcsbUJBQUFqaUcsSUFBMkYzYSxFQUFBKzVHLFdBQUF6NEcsVUFBQXMrRyxPQUFBLFNBQUFqbEcsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBc04sRUFBQUssRUFBQXlpQyxHQUF5RCxPQUFBLzZDLEtBQUFrMkcsT0FBQTJILGFBQUE3OUcsS0FBQWsyRyxPQUFBNEgsT0FBQW5sRyxFQUFBSyxHQUFBaFosS0FBQWsyRyxPQUFBNkgsYUFBQWhnSCxFQUFBQyxFQUFBMk0sRUFBQXNOLEVBQUFLLEVBQUF5aUMsR0FBQS82QyxLQUFBazJHLE9BQUErRyxXQUFBajlHLE1BQTBIaEMsRUFBQSs1RyxXQUFBejRHLFVBQUErUyxNQUFBLFNBQUFzRyxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixFQUFBSyxFQUFBeWlDLEdBQXdELE9BQUEvNkMsS0FBQWsyRyxPQUFBMkgsYUFBQTc5RyxLQUFBazJHLE9BQUE4SCxZQUFBcmxHLEVBQUFLLEdBQUFoWixLQUFBazJHLE9BQUE4SCxZQUFBamdILEVBQUFDLEdBQUFnQyxLQUFBazJHLE9BQUE4SCxZQUFBcnpHLEVBQUFzTixHQUFBalksS0FBQWsyRyxPQUFBOEgsWUFBQTFsRyxFQUFBeWlDLEdBQUEvNkMsS0FBQWsyRyxPQUFBK0csV0FBQWo5RyxNQUFnTGhDLEVBQUErNUcsV0FBQXo0RyxVQUFBNjlHLG1CQUFBLFdBQXNEbjlHLEtBQUFxNUcsU0FBQXI1RyxLQUFBMDZHLGVBQUF6NUQsT0FBQWpoRCxLQUFBbzVHLFdBQUFwNUcsS0FBQTA2RyxlQUFBbHVELFNBQUF4c0QsS0FBQTA2RyxlQUFBcHFELFlBQUF0d0QsS0FBQWsyRyxPQUFBbEcsY0FBQSxHQUFrSmh5RyxFQUFBKzVHLFdBQUF6NEcsVUFBQTIrRyxZQUFBLFNBQUF0bEcsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBc04sR0FBMERqWSxLQUFBMDZHLGVBQUF3RCxVQUFBdmxHLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLElBQTJDamEsRUFBQSs1RyxXQUFBejRHLFVBQUE0N0csWUFBQSxXQUErQyxPQUFBbDdHLEtBQUEwNkcsZUFBQTBCLGFBQUEsYUFBQXA4RyxLQUFBMDZHLGVBQUFNLE1BQUFoN0csS0FBQWsyRyxPQUFBbkcsY0FBQS92RyxLQUFBazJHLE9BQUFuRyxlQUFBL3ZHLE1BQXlJaEMsRUFBQSs1RyxXQUFBejRHLFVBQUE2K0csT0FBQSxTQUFBeGxHLEdBQTJDM1ksS0FBQTA2RyxlQUFBeUQsT0FBQXhsRyxJQUE4QjNhLEVBQUErNUcsV0FBQXo0RyxVQUFBMDdHLE1BQUEsU0FBQXJpRyxFQUFBSyxHQUE0QyxPQUFBaFosS0FBQTA2RyxlQUFBTSxNQUFBcmlHLEVBQUFLLEdBQUFoWixNQUEyQ2hDLEVBQUErNUcsV0FBQXo0RyxVQUFBOCtHLE9BQUEsU0FBQXpsRyxHQUEyQyxPQUFBM1ksS0FBQTA2RyxlQUFBd0QsVUFBQSxJQUFBdDVHLEtBQUFnZ0csSUFBQWpzRixHQUFBLE9BQUEzWSxNQUFpRWhDLEVBQUErNUcsV0FBQXo0RyxVQUFBKytHLE9BQUEsU0FBQTFsRyxHQUEyQyxPQUFBM1ksS0FBQTA2RyxlQUFBd0QsVUFBQSxFQUFBdDVHLEtBQUFnZ0csSUFBQWpzRixHQUFBLFNBQUEzWSxNQUFpRWhDLEVBQUErNUcsV0FBQXo0RyxVQUFBczlHLFVBQUEsU0FBQWprRyxFQUFBSyxHQUFnRCxPQUFBTCxhQUFBM2EsRUFBQXNnSCxTQUFBdGxHLEVBQUFMLEVBQUFzbEIsRUFBQXRsQixJQUFBaWhCLEdBQUE1NUIsS0FBQTA2RyxlQUFBa0MsVUFBQWprRyxFQUFBSyxHQUFBaFosTUFBb0ZoQyxFQUFBKzVHLFdBQUF6NEcsVUFBQXkwRixLQUFBLFNBQUFwN0UsRUFBQUssRUFBQWpiLEVBQUFrYSxFQUFBSyxHQUFpRCxJQUFBeWlDLE9BQU0sSUFBQTlpQyxRQUFBLElBQUFLLEdBQUF0WSxLQUFBMDZHLGVBQUE2RCxlQUFBNXpHLEVBQUFzOUYsV0FBQWx0RCxHQUFBLEVBQUEvNkMsS0FBQTA2RyxlQUFBNkQsYUFBQTV6RyxFQUFBbzlGLEtBQXFILElBQUFycUcsRUFBQU0sRUFBQW82RyxTQUFBOTRHLFVBQUF5MEYsS0FBQXpzRixNQUFBdEgsS0FBQXNELFdBQXNELE9BQUF5M0MsSUFBQS82QyxLQUFBMDZHLGVBQUE2RCxhQUFBNXpHLEVBQUFzOUYsVUFBQXZxRyxHQUEwRE0sRUFBQSs1RyxXQUFBejRHLFVBQUErNkcsWUFBQSxTQUFBMWhHLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBaWEsR0FBd0QsS0FBQWphLEdBQUFpYSxHQUFBLE9BQUFVLEVBQUEvVixPQUFBNUMsS0FBQXM2RyxjQUFBdDZHLEtBQUF5NEcsVUFBQStGLFlBQUF4bEcsRUFBQWpiLEVBQUFDLEdBQWdGeWdILFNBQUF6K0csUUFBY0EsS0FBQW81RyxXQUFBcDVHLEtBQUFzNUcsWUFBQXQ1RyxLQUFBMDZHLGVBQUFnRSxXQUFBMWxHLEVBQUFqYixFQUFBQyxHQUFBZ0MsS0FBQXE1RyxVQUFBcjVHLEtBQUF1NUcsVUFBQXY1RyxLQUFBNjZHLFNBQUFsd0csRUFBQThnRyxvQkFBQXpyRyxLQUFBMDZHLGVBQUFpRSxTQUFBM2xHLEVBQUFqYixFQUFBQyxLQUFBMmEsRUFBQW00QyxNQUFBOXdELEtBQUFrMkcsT0FBQWxHLGNBQUEsRUFBQXIzRixHQUF3TjNhLEVBQUErNUcsV0FBQXo0RyxVQUFBODZHLFVBQUEsU0FBQXpoRyxHQUE4QyxPQUFBM1ksS0FBQXM2RyxjQUFBdDZHLEtBQUF5NEcsVUFBQW1HLFdBQUFqbUcsRUFBQTNZLEtBQUF1NEcsV0FBQXY0RyxLQUFBMDZHLGVBQUFtRSxZQUFBbG1HLEdBQUE0MEIsT0FBK0d2dkMsRUFBQSs1RyxXQUFBejRHLFVBQUFxNkcscUJBQUEsV0FBd0QsSUFBQWhoRyxFQUFBSyxFQUFBaFosS0FBQWsyRyxPQUFvQixPQUFBbDJHLEtBQUFzbUcsYUFBQSxvQkFBQXRtRyxLQUFBc21HLGFBQUEscUJBQUEzdEYsRUFBQTNZLEtBQUF5NEcsVUFBQXo0RyxLQUFBczZHLGdCQUFBM2hHLEVBQUEzWSxLQUFBeTRHLFVBQUF2cUQsS0FBQXNOLFdBQUF4N0QsS0FBQXNtRyxhQUFBLGFBQUF0bUcsS0FBQXk0RyxVQUFBdnFELEtBQUF1TixZQUFBejdELEtBQUEwNkcsZUFBQXhzRCxNQUFBbHVELEtBQUEwNEcsWUFBQSxlQUFBMTRHLEtBQUF1NEcsV0FBQSxXQUFBNS9GLEdBQUEsY0FBQTNZLEtBQUEwNkcsZUFBQVYsVUFBQWg2RyxLQUFBNjRHLFdBQUE3NEcsS0FBQTg0RyxnQkFBQW51RyxFQUFBbTlGLE9BQUE5bkcsS0FBQTA2RyxlQUFBNkQsYUFBQTV6RyxFQUFBZ2hHLFlBQUEzckcsS0FBQTA2RyxlQUFBNkQsYUFBQXYrRyxLQUFBODRHLGNBQUE5L0YsR0FBaWZoYixFQUFBKzVHLFdBQUF6NEcsVUFBQXNELEtBQUEsV0FBd0MsT0FBQTVDLEtBQUEwNkcsZUFBQU8sT0FBQWo5RyxFQUFBbzZHLFNBQUE5NEcsVUFBQXNELEtBQUEwRSxNQUFBdEgsT0FBd0VoQyxFQUFBKzVHLFdBQUF6NEcsVUFBQXd4RCxJQUFBLFNBQUFuNEMsR0FBd0MzWSxLQUFBMDZHLGVBQUFXLFVBQUFyN0csS0FBQTI2RyxpQkFBQTM2RyxLQUFBMDZHLGVBQUFqNEMsVUFBQXppRSxLQUFBNDZHLG1CQUFBNTZHLEtBQUEwNkcsZUFBQWg0QyxZQUFBMWtFLEVBQUFvNkcsU0FBQTk0RyxVQUFBd3hELElBQUFqekQsS0FBQW1DLEtBQUEyWSxJQUFnTEssRUFBQXhiLFFBQUFRLEVBQUErNUcsYUFBMEIrRyxtQkFBQSxHQUFBck8sY0FBQSxHQUFBQyxTQUFBLEdBQUFxTyxnQkFBQSxLQUFzRTNzQyxJQUFBLFNBQUF6NUQsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsVUFBQWhPLEVBQUFnTyxFQUFBLGVBQXFDQSxFQUFBLGlCQUFBQSxFQUFBLG1CQUFBQSxFQUFBLDBCQUFvRSxJQUFBVixFQUFBLGlCQUFBSyxFQUFBLFdBQW9DdGEsRUFBQXNCLFVBQUE0MEcsYUFBQSxTQUFBdjdGLEVBQUFLLEVBQUFqYixHQUF5Q0MsRUFBQTg3RixvQkFBQSxlQUFBeDJGLFdBQWdELElBQUF5M0MsRUFBQXI5QyxFQUFBSyxHQUFBNE0sRUFBQTg3RixJQUFpQixHQUFBL29HLElBQUFpTixFQUFBKzdGLE1BQUEsQ0FBZ0IsR0FBQTNyRCxFQUFBL2pCLFNBQUEwdEIsZUFBQXpzQyxHQUFBLENBQWlDOGlDLEVBQUFnNUQsV0FBQW52RCxZQUFBN0osR0FBNEIsSUFBQTM0QyxFQUFBcEMsS0FBQW9tRyxVQUFxQnBtRyxLQUFBeXhHLFVBQUF6eEcsS0FBQXl4RyxVQUFBeHJGLE9BQUEsU0FBQXROLEdBQWlELE9BQUFBLElBQUF2VyxLQUFlMjRDLEVBQUEvakIsU0FBQUMsY0FBQSxXQUFBbHBCLEdBQUFrSyxFQUFBOGlDLEVBQUFpa0UsVUFBQTcyRyxJQUFBbVEsUUFBNkQsR0FBQXRZLEtBQUFpL0csd0JBQUFsa0UsRUFBQS82QyxLQUFBNjNHLFdBQW1ELENBQUs5OEQsRUFBQS9qQixTQUFBQyxjQUFBLFVBQW1DLFFBQUF4VixFQUFBLEVBQVl1VixTQUFBMHRCLGVBQUEsZ0JBQUFqakMsSUFBMkNBLElBQUt4SixFQUFBLGdCQUFBd0osRUFBQXM1QixFQUFBaHRDLEdBQUFrSyxFQUFBOGlDLEVBQUFpa0UsVUFBQTcyRyxJQUFBbVEsR0FBOEMsT0FBQXRZLEtBQUF1eEcsYUFBQXgyRCxFQUFBbzVELFFBQUFDLFFBQUEsRUFBQXI1RCxFQUFBK3lELE1BQUF1RyxXQUFBLFVBQUFyMEcsS0FBQXd4RyxVQUFBeHhHLEtBQUF3eEcsVUFBQXBzRCxZQUFBckssR0FBQS9qQixTQUFBaTlELEtBQUE3dUMsWUFBQXJLLEdBQUFyOUMsSUFBQWlOLEVBQUErN0YsT0FBQTFtRyxLQUFBc21HLGFBQUEsZ0JBQUF0b0csRUFBQTg1RyxXQUFBLzhELEVBQUEvNkMsTUFBQSxJQUFBQSxLQUFBeXhHLFVBQUE3dUcsS0FBQTVDLEtBQUFvbUcsWUFBQXBtRyxLQUFBaS9HLDBCQUFBai9HLEtBQUFzbUcsYUFBQSxnQkFBQXRvRyxFQUFBKzVHLFdBQUFoOUQsRUFBQS82QyxNQUFBLElBQUFBLEtBQUFpL0cseUJBQUEsRUFBQWovRyxLQUFBeXhHLFVBQUE3dUcsS0FBQTVDLEtBQUFvbUcsWUFBQXBtRyxLQUFBb21HLFVBQUF5TSxPQUFBbDZGLEVBQUFLLEdBQUFoWixLQUFBb21HLFVBQUE0UixpQkFBQWg0RyxLQUFBb21HLFdBQTBlcG9HLEVBQUFzQixVQUFBMndHLGFBQUEsU0FBQXQzRixFQUFBSyxFQUFBamIsR0FBMEMsR0FBQUMsRUFBQTg3RixvQkFBQSxlQUFBeDJGLFdBQUF0RCxLQUFBb21HLFVBQUEsQ0FBbUUsSUFBQXo3RixLQUFTLFFBQUFzTixLQUFBalksS0FBQTA2RyxlQUFBLENBQWtDLElBQUFwaUcsRUFBQXRZLEtBQUEwNkcsZUFBQXppRyxHQUE2QixpQkFBQUssR0FBQSxtQkFBQUEsSUFBQTNOLEVBQUFzTixHQUFBSyxHQUF5RyxRQUFBeWlDLEtBQXRELzZDLEtBQUFvbUcsVUFBQXlNLE9BQUFsNkYsRUFBQUssR0FBQWhaLEtBQUF1dEMsTUFBQTUwQixFQUFBM1ksS0FBQSt1QixPQUFBL1YsRUFBc0RyTyxFQUFBLElBQW1CM0ssS0FBQTA2RyxlQUFBMy9ELEdBQUFwd0MsRUFBQW93QyxHQUE0QixNQUFBcGlDLElBQVU1YSxHQUFBaUMsS0FBQXMwRyxXQUFrQnQyRyxFQUFBc0IsVUFBQTQvRyxTQUFBLFdBQWlDbC9HLEtBQUE2M0csUUFBQTczRyxLQUFBNjNHLE9BQUE5RCxXQUFBbnZELFlBQUE1a0QsS0FBQTYzRyxTQUE2RDc1RyxFQUFBc0IsVUFBQTYvRyxlQUFBLFNBQUF4bUcsRUFBQUssRUFBQWpiLEdBQTRDLE9BQUFDLEVBQUE4N0Ysb0JBQUEsaUJBQUF4MkYsV0FBQSxJQUFBdEYsRUFBQTQ1RyxTQUFBai9GLEVBQUFLLEVBQUFqYixFQUFBaUMsT0FBb0ZoQyxFQUFBc0IsVUFBQXc4RyxVQUFBLFNBQUFuakcsR0FBbUMsR0FBQTNhLEVBQUE4N0Ysb0JBQUEsWUFBQXgyRixXQUFBcVYsSUFBQWhPLEVBQUF3L0YsT0FBQXh4RixJQUFBaE8sRUFBQTAvRixTQUFBMXhGLElBQUFoTyxFQUFBMi9GLFVBQUEzeEYsSUFBQWhPLEVBQUE0L0YsWUFBQTV4RixJQUFBaE8sRUFBQTgvRixVQUFBOXhGLElBQUFoTyxFQUFBNi9GLFdBQUE3eEYsSUFBQWhPLEVBQUErL0YsUUFBQS94RixJQUFBaE8sRUFBQWdnRyxTQUFBaHlGLElBQUFoTyxFQUFBaWdHLFNBQUFqeUYsSUFBQWhPLEVBQUFrZ0csWUFBQWx5RixJQUFBaE8sRUFBQW1nRyxZQUFBbnlGLElBQUFoTyxFQUFBb2dHLE9BQUFweUYsSUFBQWhPLEVBQUFxZ0csTUFBQXJ5RixJQUFBaE8sRUFBQXkvRixLQUFBenhGLElBQUFoTyxFQUFBeWxGLE9BQUEsVUFBQW53RixNQUFBLFFBQUEwWSxFQUFBLG9CQUE4VDNZLEtBQUFvbUcsVUFBQTBWLFVBQUFuakcsSUFBNEJLLEVBQUF4YixRQUFBUSxJQUFlb2hILHlCQUFBLEdBQUEzTyxjQUFBLEdBQUFDLFNBQUEsR0FBQTJPLGdCQUFBLEdBQUFDLGtCQUFBLEtBQWlHanRDLElBQUEsU0FBQTE1RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBYSxJQUFBQyxFQUFBMmEsRUFBQSxXQUFBaE8sRUFBQWdPLEVBQUEsZ0JBQUFWLEVBQUFVLEVBQUEsY0FBeURBLEVBQUEsb0JBQUEzYSxFQUFBc0IsVUFBQXN0RSxJQUFBLFNBQUFqMEQsRUFBQUssRUFBQWpiLEVBQUF1YSxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQUFxZixHQUFnRSxHQUFBempCLEVBQUE4N0Ysb0JBQUEsTUFBQXgyRixZQUFBdEQsS0FBQW9tRyxVQUFBZ1QsWUFBQXA1RyxLQUFBb21HLFVBQUFpVCxRQUFBLE9BQUFyNUcsS0FBeUcsSUFBQSs2QyxFQUFBLzZDLEtBQUF1L0csV0FBQXhrRSxHQUFBcjlDLEVBQUFzQyxLQUFBdS9HLFdBQUE3aEgsR0FBOENxOUMsRUFBQSxHQUFJQSxHQUFBcHdDLEVBQUF5OEYsT0FBYSxLQUFLMXBHLEVBQUEsR0FBSUEsR0FBQWlOLEVBQUF5OEYsWUFBYSxJQUFBcnNELFFBQUEsSUFBQXI5QyxNQUFBd1IsUUFBQSxNQUFBNnJDLEVBQUE3ckMsUUFBQSxLQUFBdEssS0FBQXNWLElBQUF4YyxFQUFBcTlDLEtBQUFwd0MsRUFBQXk4RixRQUFBcnNELEdBQUFwd0MsRUFBQXk4RixPQUFBMXBHLEdBQUFpTixFQUFBeThGLE9BQUFyc0QsR0FBQXB3QyxFQUFBeThGLFFBQUF4aUcsS0FBQXNWLElBQUF4YyxFQUFBcTlDLEdBQUFwd0MsRUFBQXk4RixTQUFBcnNELEdBQUFwd0MsRUFBQXk4RixPQUFBMXBHLEdBQUFpTixFQUFBeThGLE9BQUExcEcsR0FBQWlOLEVBQUF5OEYsU0FBQXJzRCxHQUFBcHdDLEVBQUFzOEYsUUFBQWxzRCxFQUFBbjJDLEtBQUE0NkcsS0FBQXpoSCxFQUFBdWEsRUFBQTFULEtBQUFnZ0csSUFBQTdwRCxNQUFBcHdDLEVBQUFzOEYsU0FBQWxzRCxHQUFBLEVBQUFwd0MsRUFBQXM4RixVQUFBbHNELEVBQUFuMkMsS0FBQTQ2RyxLQUFBemhILEVBQUF1YSxFQUFBMVQsS0FBQWdnRyxJQUFBN3BELElBQUFwd0MsRUFBQTlGLElBQUFuSCxHQUFBaU4sRUFBQXM4RixRQUFBdnBHLEVBQUFrSCxLQUFBNDZHLEtBQUF6aEgsRUFBQXVhLEVBQUExVCxLQUFBZ2dHLElBQUFsbkcsTUFBQWlOLEVBQUFzOEYsU0FBQXZwRyxHQUFBLEVBQUFpTixFQUFBczhGLFVBQUF2cEcsRUFBQWtILEtBQUE0NkcsS0FBQXpoSCxFQUFBdWEsRUFBQTFULEtBQUFnZ0csSUFBQWxuRyxJQUFBaU4sRUFBQTlGLElBQUFrMkMsRUFBQXI5QyxPQUFBaU4sRUFBQXk4RixRQUFBcnBHLEVBQUE2RyxLQUFBc1YsSUFBQW5jLEdBQUF1YSxFQUFBMVQsS0FBQXNWLElBQUE1QixHQUEyYixJQUFBM2EsRUFBQXNhLEVBQUErNEYsV0FBQXI0RixFQUFBSyxFQUFBamIsRUFBQXVhLEVBQUF0WSxLQUFBb21HLFVBQUE0UyxjQUF3RCxPQUFBaDVHLEtBQUFvbUcsVUFBQXg1QixJQUFBanZFLEVBQUFpOEIsRUFBQWo4QixFQUFBc2dDLEVBQUF0Z0MsRUFBQTgrQyxFQUFBOStDLEVBQUFvOUMsSUFBQXI5QyxFQUFBMEUsRUFBQXFmLEdBQUF6aEIsTUFBd0RoQyxFQUFBc0IsVUFBQW85RyxRQUFBLFNBQUEvakcsRUFBQUssRUFBQWpiLEVBQUE0TSxFQUFBMk4sR0FBeUMsR0FBQXRhLEVBQUE4N0Ysb0JBQUEsVUFBQXgyRixZQUFBdEQsS0FBQW9tRyxVQUFBZ1QsWUFBQXA1RyxLQUFBb21HLFVBQUFpVCxRQUFBLE9BQUFyNUcsS0FBNkdqQyxFQUFBLElBQUFBLEVBQUE2RyxLQUFBc1YsSUFBQW5jLFNBQUEsSUFBQTRNLElBQUE1TSxFQUFBNE0sRUFBQSxJQUFBQSxFQUFBL0YsS0FBQXNWLElBQUF2UCxJQUF5RCxJQUFBb3dDLEVBQUE5aUMsRUFBQSs0RixXQUFBcjRGLEVBQUFLLEVBQUFqYixFQUFBNE0sRUFBQTNLLEtBQUFvbUcsVUFBQTRTLGNBQXdELE9BQUFoNUcsS0FBQW9tRyxVQUFBc1csU0FBQTNoRSxFQUFBbmhCLEVBQUFtaEIsRUFBQTljLEVBQUE4YyxFQUFBMEIsRUFBQTFCLElBQUF6aUMsSUFBQXRZLE1BQXdEaEMsRUFBQXNCLFVBQUE0c0UsS0FBQSxXQUE2QixPQUFBbHVFLEVBQUE4N0Ysb0JBQUEsT0FBQXgyRixXQUFBdEQsS0FBQW9tRyxVQUFBZ1QsV0FBQXA1RyxLQUFBb21HLFVBQUFsNkIsS0FBQTVrRSxNQUFBdEgsS0FBQW9tRyxVQUFBOWlHLFdBQUF0RCxNQUFrSWhDLEVBQUFzQixVQUFBMHZCLE1BQUEsV0FBOEIsT0FBQWh4QixFQUFBODdGLG9CQUFBLFFBQUF4MkYsV0FBQXRELEtBQUFvbUcsVUFBQWdULFdBQUFwNUcsS0FBQW9tRyxVQUFBcDNFLE1BQUExbkIsTUFBQXRILEtBQUFvbUcsVUFBQTlpRyxXQUFBdEQsTUFBb0loQyxFQUFBc0IsVUFBQXU5RyxLQUFBLFdBQTZCLE9BQUE3K0csRUFBQTg3RixvQkFBQSxPQUFBeDJGLFlBQUF0RCxLQUFBb21HLFVBQUFnVCxXQUFBcDVHLEtBQUFvbUcsVUFBQWlULFVBQUFyNUcsS0FBQW9tRyxVQUFBeVcsS0FBQXYxRyxNQUFBdEgsS0FBQW9tRyxVQUFBOWlHLFdBQUF0RCxNQUE0SmhDLEVBQUFzQixVQUFBdzlHLEtBQUEsV0FBNkIsR0FBQTkrRyxFQUFBODdGLG9CQUFBLE9BQUF4MkYsV0FBQXRELEtBQUFvbUcsVUFBQWdULFdBQUFwNUcsS0FBQW9tRyxVQUFBaVQsUUFBQSxDQUE2RixRQUFBMWdHLEVBQUFWLEVBQUErNEYsV0FBQTF0RyxVQUFBLEdBQUFBLFVBQUEsR0FBQUEsVUFBQSxHQUFBQSxVQUFBLEdBQUF0RCxLQUFBb21HLFVBQUEyUyxXQUFBLy9GLEdBQUFMLEVBQUFpaEIsRUFBQWpoQixFQUFBc2xCLEVBQUF0bEIsRUFBQThqQyxFQUFBOWpDLEVBQUFvaUMsR0FBQWg5QyxFQUFBLEVBQTZIQSxFQUFBdUYsVUFBQWhDLE9BQW1CdkQsSUFBQWliLEVBQUFqYixHQUFBdUYsVUFBQXZGLEdBQXNCaUMsS0FBQW9tRyxVQUFBMFcsS0FBQTlqRyxHQUF1QixPQUFBaFosTUFBWWhDLEVBQUFzQixVQUFBMDlHLFNBQUEsV0FBaUMsT0FBQWgvRyxFQUFBODdGLG9CQUFBLFdBQUF4MkYsWUFBQXRELEtBQUFvbUcsVUFBQWdULFdBQUFwNUcsS0FBQW9tRyxVQUFBaVQsVUFBQXI1RyxLQUFBb21HLFVBQUE0VyxTQUFBMTVHLFdBQUF0RCxNQUErSWdaLEVBQUF4YixRQUFBUSxJQUFleWhILGVBQUEsR0FBQUMsbUJBQUEsR0FBQUMsYUFBQSxHQUFBQyxVQUFBLEtBQXFFdHRDLElBQUEsU0FBQTM1RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBYSxJQUFBQyxFQUFBMmEsRUFBQSxXQUFBaE8sRUFBQWdPLEVBQUEsZ0JBQXVDM2EsRUFBQXNCLFVBQUF1Z0gsWUFBQSxTQUFBbG5HLEdBQW9DLE9BQUEzYSxFQUFBODdGLG9CQUFBLGNBQUF4MkYsV0FBQXFWLElBQUFoTyxFQUFBODhGLFFBQUE5dUYsSUFBQWhPLEVBQUErOEYsU0FBQS91RixJQUFBaE8sRUFBQWc5RixRQUFBaHZGLElBQUFoTyxFQUFBbTlGLFNBQUE5bkcsS0FBQW9tRyxVQUFBNFMsYUFBQXJnRyxHQUFBM1ksTUFBb0poQyxFQUFBc0IsVUFBQSs5RyxTQUFBLFdBQWlDLE9BQUFyOUcsS0FBQW9tRyxVQUFBaVgsV0FBQXI5RyxNQUFzQ2hDLEVBQUFzQixVQUFBd2dILFNBQUEsU0FBQW5uRyxHQUFrQyxPQUFBM2EsRUFBQTg3RixvQkFBQSxXQUFBeDJGLFdBQUFxVixJQUFBaE8sRUFBQTg4RixRQUFBOXVGLElBQUFoTyxFQUFBKzhGLFNBQUEvdUYsSUFBQWhPLEVBQUFnOUYsUUFBQWh2RixJQUFBaE8sRUFBQW05RixTQUFBOW5HLEtBQUFvbUcsVUFBQTJTLFVBQUFwZ0csR0FBQTNZLE1BQThJaEMsRUFBQXNCLFVBQUFpK0csT0FBQSxXQUErQixPQUFBdjlHLEtBQUFvbUcsVUFBQW1YLFNBQUF2OUcsTUFBb0NoQyxFQUFBc0IsVUFBQWsrRyxVQUFBLFNBQUE3a0csR0FBbUMsT0FBQTNhLEVBQUE4N0Ysb0JBQUEsWUFBQXgyRixXQUFBcVYsSUFBQWhPLEVBQUFzK0YsT0FBQXR3RixJQUFBaE8sRUFBQXErRixRQUFBcndGLElBQUFoTyxFQUFBbytGLFNBQUEvb0csS0FBQW9tRyxVQUFBb1gsVUFBQTdrRyxHQUFBM1ksTUFBK0hoQyxFQUFBc0IsVUFBQW0rRyxXQUFBLFNBQUE5a0csR0FBb0MsT0FBQTNhLEVBQUE4N0Ysb0JBQUEsYUFBQXgyRixXQUFBcVYsSUFBQWhPLEVBQUFzK0YsT0FBQXR3RixJQUFBaE8sRUFBQXUrRixPQUFBdndGLElBQUFoTyxFQUFBdytGLE9BQUFucEcsS0FBQW9tRyxVQUFBcVgsV0FBQTlrRyxHQUFBM1ksTUFBOEhoQyxFQUFBc0IsVUFBQXErRyxhQUFBLFNBQUFobEcsR0FBc0MsT0FBQTNhLEVBQUE4N0Ysb0JBQUEsZUFBQXgyRixXQUFBdEQsS0FBQW9tRyxVQUFBdVgsYUFBQWhsRyxHQUFBM1ksTUFBMkZnWixFQUFBeGIsUUFBQVEsSUFBZXloSCxlQUFBLEdBQUFHLFVBQUEsS0FBK0JydEMsSUFBQSxTQUFBNTVELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLFdBQW1CQSxFQUFBLG9CQUFBM2EsRUFBQXNCLFVBQUFzK0csT0FBQSxXQUFvRCxPQUFBNS9HLEVBQUE4N0Ysb0JBQUEsU0FBQXgyRixXQUFBdEQsS0FBQW9tRyxVQUFBZ1QsV0FBQXA1RyxLQUFBb21HLFVBQUFpVCxTQUFBcjVHLEtBQUFvbUcsVUFBQXdYLE9BQUF0MkcsTUFBQXRILEtBQUFvbUcsVUFBQTlpRyxXQUFBdEQsWUFBb0toQyxFQUFBc0IsVUFBQXlnSCxhQUFBLFNBQUFwbkcsR0FBc0MsT0FBQTNhLEVBQUE4N0Ysb0JBQUEsZUFBQXgyRixXQUFBdEQsS0FBQTgwRyxjQUFBbjhGLEVBQUEzWSxNQUFpRmhDLEVBQUFzQixVQUFBMGdILFlBQUEsU0FBQXJuRyxFQUFBSyxFQUFBamIsRUFBQTRNLEVBQUFzTixHQUE2Q2phLEVBQUE4N0Ysb0JBQUEsY0FBQXgyRixXQUErQyxJQUFBZ1YsRUFBQSxFQUFBTCxFQUFVLE9BQUFyVCxLQUFBSyxJQUFBcVQsRUFBQSxHQUFBSyxFQUFBLEVBQUEvVCxLQUFBSyxJQUFBcVQsRUFBQSxHQUFBTCxFQUFBZSxFQUFBLEVBQUFWLEVBQUExVCxLQUFBSyxJQUFBZ1QsRUFBQSxHQUFBbGEsRUFBQTZHLEtBQUFLLElBQUFnVCxFQUFBLEdBQUF0TixHQUErRTNNLEVBQUFzQixVQUFBMmdILGNBQUEsU0FBQXRuRyxFQUFBSyxFQUFBamIsRUFBQTRNLEVBQUFzTixHQUErQ2phLEVBQUE4N0Ysb0JBQUEsZ0JBQUF4MkYsV0FBaUQsSUFBQWdWLEVBQUEsRUFBQUwsRUFBVSxTQUFBdE4sRUFBQS9GLEtBQUFLLElBQUFnVCxFQUFBLEtBQUFsYSxFQUFBNkcsS0FBQUssSUFBQWdULEVBQUEsS0FBQWxhLEVBQUF1YSxFQUFBTCxFQUFBLEVBQUFlLEVBQUFWLEVBQUFMLEVBQUEsRUFBQWUsRUFBQXBVLEtBQUFLLElBQUFxVCxFQUFBLEtBQUFLLEVBQUEvVCxLQUFBSyxJQUFBcVQsRUFBQSxJQUErRnRhLEVBQUFzQixVQUFBK1MsTUFBQSxXQUE4QixPQUFBclUsRUFBQTg3RixvQkFBQSxRQUFBeDJGLFdBQUF0RCxLQUFBb21HLFVBQUFnVCxXQUFBcDVHLEtBQUFvbUcsVUFBQS96RixNQUFBL0ssTUFBQXRILEtBQUFvbUcsVUFBQTlpRyxXQUFBdEQsTUFBb0loQyxFQUFBc0IsVUFBQTRnSCxZQUFBLFNBQUF2bkcsR0FBcUMsT0FBQTNhLEVBQUE4N0Ysb0JBQUEsY0FBQXgyRixXQUFBdEQsS0FBQSswRyxhQUFBcDhGLEVBQUEsSUFBQUEsRUFBQTNZLE1BQXFGaEMsRUFBQXNCLFVBQUE2Z0gsZUFBQSxTQUFBeG5HLEdBQXdDLE9BQUEzYSxFQUFBODdGLG9CQUFBLGlCQUFBeDJGLFdBQUF0RCxLQUFBb21HLFVBQUE2UyxnQkFBQXRnRyxFQUFBM1ksTUFBK0ZoQyxFQUFBc0IsVUFBQThnSCxXQUFBLFNBQUF6bkcsRUFBQUssRUFBQWpiLEVBQUE0TSxFQUFBc04sR0FBNENqYSxFQUFBODdGLG9CQUFBLGFBQUF4MkYsV0FBOEMsSUFBQWdWLEVBQUFMLE1BQUE4aUMsRUFBQTlpQyxJQUFrQixPQUFBVSxJQUFBLEdBQUFMLEVBQUF5aUMsRUFBQSxHQUFBOWlDLEdBQUFlLEdBQUEsSUFBQVYsRUFBQSxJQUFBeWlDLEVBQUEsR0FBQWg5QyxJQUFBLElBQUF1YSxFQUFBLEVBQUF5aUMsRUFBQSxHQUFBOWlDLEdBQUF0TixHQUFBLEdBQUEyTixFQUFBLEdBQUF5aUMsSUFBNEUvOEMsRUFBQXNCLFVBQUErZ0gsYUFBQSxTQUFBMW5HLEVBQUFLLEVBQUFqYixFQUFBNE0sRUFBQXNOLEdBQThDamEsRUFBQTg3RixvQkFBQSxlQUFBeDJGLFdBQWdELElBQUFnVixFQUFBTCxJQUFVLE9BQUFVLElBQUEsRUFBQUwsRUFBQSxJQUFBTCxFQUFBLElBQUFlLEdBQUEsRUFBQVYsRUFBQSxJQUFBTCxHQUFBbGEsSUFBQSxFQUFBdWEsRUFBQSxJQUFBTCxFQUFBLElBQUF0TixHQUFBLEVBQUEyTixFQUFBLEVBQUFMLElBQXFFZSxFQUFBeGIsUUFBQVEsSUFBZTBoSCxtQkFBQSxHQUFBRSxVQUFBLEtBQW1DcHRDLElBQUEsU0FBQTc1RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBYSxJQUFBQyxFQUFBMmEsRUFBQSxXQUFBaE8sRUFBQWdPLEVBQUEsZ0JBQUFWLEVBQUEsS0FBQUssS0FBQXlpQyxLQUFBcjlDLEdBQUEsRUFBQTBFLEdBQUEsRUFBQXFmLEdBQUEsRUFBQTlqQixHQUFBLEVBQUFHLEdBQUEsRUFBaUZFLEVBQUFzQixVQUFBZ2hILGFBQUEsV0FBb0MsT0FBQXZsRSxLQUFBcDlDLEdBQUEsRUFBQXFDLE1BQXNCaEMsRUFBQXNCLFVBQUF1K0csV0FBQSxTQUFBbGxHLEdBQW9DLE9BQUEzYSxFQUFBODdGLG9CQUFBLGFBQUF4MkYsV0FBQXRELEtBQUFvbUcsVUFBQW1hLE1BQUF2Z0gsS0FBQW9tRyxVQUFBeVgsV0FBQXYyRyxNQUFBdEgsS0FBQW9tRyxVQUFBOWlHLFlBQUEyVSxFQUFBVSxJQUFBaE8sRUFBQXU5RixRQUFBdnZGLElBQUFoTyxFQUFBdzlGLE9BQUF4dkYsSUFBQWhPLEVBQUEyOUYsV0FBQTN2RixJQUFBaE8sRUFBQTQ5RixjQUFBNXZGLElBQUFoTyxFQUFBNjlGLGdCQUFBN3ZGLElBQUFoTyxFQUFBODlGLE9BQUE5dkYsSUFBQWhPLEVBQUErOUYsV0FBQS92RixFQUFBLEtBQUFMLEtBQUF5aUMsTUFBQS82QyxNQUFrUmhDLEVBQUFzQixVQUFBeStHLGFBQUEsV0FBcUMsR0FBQS8vRyxFQUFBODdGLG9CQUFBLGVBQUF4MkYsV0FBQXRELEtBQUFvbUcsVUFBQW1hLE1BQUF2Z0gsS0FBQW9tRyxVQUFBMlgsYUFBQXoyRyxNQUFBdEgsS0FBQW9tRyxVQUFBOWlHLGVBQW9JLENBQUssT0FBQWdWLEVBQUFoWCxPQUFBLGdFQUFnRjVELEdBQUEsRUFBSyxRQUFBaWIsS0FBQUssRUFBQSxFQUFpQkEsRUFBQTFWLFVBQUFoQyxPQUFtQjBYLElBQUFMLEVBQUFLLEdBQUExVixVQUFBMFYsR0FBc0JMLEVBQUF5a0csUUFBQSxFQUFBei9HLEVBQUFvOUMsRUFBQW40QyxLQUFBK1YsR0FBQUwsRUFBQTFWLEtBQUErVixHQUFrQyxPQUFBM1ksTUFBWWhDLEVBQUFzQixVQUFBMCtHLFlBQUEsV0FBb0MsT0FBQWhnSCxFQUFBODdGLG9CQUFBLGNBQUF4MkYsV0FBQXRELEtBQUFvbUcsVUFBQW1hLE1BQUF2Z0gsS0FBQW9tRyxVQUFBNFgsWUFBQTEyRyxNQUFBdEgsS0FBQW9tRyxVQUFBOWlHLFlBQUFsQixHQUFBLEVBQUFwQyxLQUFBODlHLE9BQUF4NkcsVUFBQSxHQUFBQSxVQUFBLEtBQUF0RCxNQUF5TGhDLEVBQUFzQixVQUFBa2hILFdBQUEsV0FBbUMsSUFBQTduRyxFQUFBb2lDLEVBQUEsR0FBQXJ6QyxRQUFtQmlSLEVBQUF5a0csT0FBQXJpRSxFQUFBLEdBQUFxaUUsT0FBQXprRyxFQUFBNDNDLFFBQUEsRUFBQXhWLEVBQUFuNEMsS0FBQStWLEdBQUE3YSxJQUFBd2EsRUFBQTFWLEtBQUEwVixFQUFBLElBQUF4YSxHQUFBLEdBQWtFLFFBQUFrYixFQUFBLEVBQVlBLEVBQUEraEMsRUFBQXo1QyxPQUFXMFgsSUFBQVYsRUFBQTFWLEtBQUFtNEMsRUFBQS9oQyxJQUFpQixPQUFBaFosTUFBWWhDLEVBQUFzQixVQUFBMjlHLFNBQUEsU0FBQXRrRyxHQUFrQyxHQUFBM2EsRUFBQTg3RixvQkFBQSxXQUFBeDJGLFdBQUF0RCxLQUFBb21HLFVBQUFtYSxNQUFBdmdILEtBQUFvbUcsVUFBQTZXLFNBQUF0a0csRUFBQXZXLEVBQUExRSxFQUFBK2pCLEVBQUE5akIsRUFBQXNhLE9BQXlHLENBQUssT0FBQUssRUFBQWhYLE9BQUEsT0FBQXRCLEtBQTRCLElBQUFBLEtBQUFvbUcsVUFBQWdULFlBQUFwNUcsS0FBQW9tRyxVQUFBaVQsUUFBQSxPQUFBcjVHLEtBQWtFLElBQUFnWixFQUFBTCxJQUFBaE8sRUFBQWcrRixNQUFrQjN2RixJQUFBcmIsR0FBQTJhLEVBQUExVixLQUFBMFYsRUFBQSxJQUFBdFksS0FBQW9tRyxVQUFBNlcsU0FBQXRrRyxFQUFBTCxFQUFBbFcsRUFBQTFFLEVBQUErakIsRUFBQTlqQixFQUFBc2EsR0FBQTdWLEdBQUEsRUFBQTFFLEdBQUEsRUFBQStqQixHQUFBLEVBQUE5akIsR0FBQSxFQUFBRyxHQUFBLEVBQUFrYixHQUFBVixFQUFBdzRDLE1BQStGLE9BQUE5d0QsTUFBWWhDLEVBQUFzQixVQUFBbWhILGdCQUFBLFdBQXdDLEdBQUF6aUgsRUFBQTg3RixvQkFBQSxrQkFBQXgyRixXQUFBdEQsS0FBQW9tRyxVQUFBbWEsTUFBQXZnSCxLQUFBb21HLFVBQUFxYSxnQkFBQW41RyxNQUFBdEgsS0FBQW9tRyxVQUFBOWlHLGVBQTBJLENBQUssR0FBQXRELEtBQUEwZ0gsZUFBQSxDQUF3QixJQUFBL25HLEtBQVMsT0FBQUEsRUFBQWloQixFQUFBdDJCLFVBQUEsR0FBQXFWLEVBQUFzbEIsRUFBQTM2QixVQUFBLEdBQUFxVixFQUFBZ29HLEdBQUFyOUcsVUFBQSxHQUFBcVYsRUFBQWlvRyxHQUFBdDlHLFVBQUEsR0FBQXFWLEVBQUExSyxLQUFBdEQsRUFBQWtoRyxVQUFBN3JHLEtBQUE2Z0gsaUJBQUFqK0csS0FBQStWLEdBQUEzWSxLQUFtSSxLQUFBc1ksRUFBQWhYLE9BQUEsYUFBQXJCLE1BQUEsK0RBQWdHd2hCLEdBQUEsRUFBSyxRQUFBekksS0FBQWpiLEVBQUEsRUFBaUJBLEVBQUF1RixVQUFBaEMsT0FBbUJ2RCxJQUFBaWIsRUFBQWpiLEdBQUF1RixVQUFBdkYsR0FBc0JpYixFQUFBb2tHLFFBQUEsRUFBQXovRyxFQUFBbzlDLEVBQUFuNEMsS0FBQW9XLEdBQUFWLEVBQUExVixLQUFBb1csR0FBa0MsT0FBQWhaLE1BQVloQyxFQUFBc0IsVUFBQXcrRyxPQUFBLFNBQUFubEcsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxHQUF3QyxHQUFBM0ssS0FBQW9tRyxVQUFBbWEsTUFBQXZnSCxLQUFBb21HLFVBQUEwWCxPQUFBeDJHLE1BQUF0SCxLQUFBb21HLFVBQUE5aUcsZUFBOEUsQ0FBSyxJQUFBMlUsS0FBU0EsRUFBQW1sRyxRQUFBLEVBQUFubEcsRUFBQSxHQUFBVSxFQUFBVixFQUFBLEdBQUFlLEVBQUFmLEVBQUEsS0FBQUEsRUFBQSxLQUFBQSxFQUFBLEtBQUFBLEVBQUEsR0FBQWpZLEtBQUFvbUcsVUFBQStVLFdBQUFsakcsRUFBQSxHQUFBalksS0FBQW9tRyxVQUFBdVcsYUFBQTUrRyxJQUFBa2EsRUFBQXM0QyxPQUFBeHlELEdBQUFKLEdBQUEsSUFBQW85QyxFQUFBejVDLFNBQUEyVyxFQUFBczRDLFFBQUEsR0FBQXhWLEVBQUFuNEMsS0FBQXFWLElBQUFLLEVBQUExVixLQUFBcVYsR0FBbUwsT0FBQWpZLE1BQVlnWixFQUFBeGIsUUFBQVEsSUFBZXloSCxlQUFBLEdBQUFHLFVBQUEsS0FBK0JudEMsSUFBQSxTQUFBOTVELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhcUksT0FBQWk4QixzQkFBd0NqOEIsT0FBQWk4Qix1QkFBQWo4QixPQUFBMDZHLDZCQUFBMTZHLE9BQUEyNkcsMEJBQUEzNkcsT0FBQTQ2Ryx3QkFBQTU2RyxPQUFBNjZHLHlCQUFBLFNBQUF0b0csRUFBQUssR0FBdUw1UyxPQUFBd0gsV0FBQStLLEVBQUEsU0FBMkMsb0JBQUFvcUMscUNBQUF6akQsVUFBQW9JLE9BQUF0SixPQUFBQyxlQUFBMGtELGtCQUFBempELFVBQUEsU0FBcUlYLE1BQUFtRixNQUFBeEUsVUFBQW9JLE1BQUF2RCxVQUFBLEVBQUF3cUQsY0FBQSxFQUFBcndELFlBQUEsSUFBd0UsV0FBYyxJQUFBRixPQUFBNFgsT0FBQSxDQUFtQixJQUFBMkMsRUFBQXZhLE9BQUFxRSxLQUFBdVcsRUFBQTVhLE9BQUFDLGVBQW9GTCxFQUFBLG1CQUFBUyxRQUFBLGlCQUFBQSxTQUFBa00sRUFBQXZNLE9BQUFrQixVQUFBNGhILHFCQUFBanBHLEVBQUEsU0FBQVUsR0FBOEcsZ0JBQUFLLEdBQW1CLE9BQUFyTyxFQUFBOU0sS0FBQThhLEVBQUFLLEtBQWtVQSxFQUFBNWEsT0FBQSxVQUFtQk8sTUFBalUsU0FBQXFhLEVBQUFyTyxHQUFpQixJQUExUCxTQUFBZ08sR0FBd0QsZ0JBQUFBLEdBQUEsT0FBQUEsRUFBa001YSxDQUFBaWIsR0FBQSxVQUFBZ0wsVUFBQSw0QkFBeUQsSUFBQTFMLEVBQUF5aUMsRUFBQXI5QyxFQUFBMEUsRUFBQXFmLEVBQUFyakIsT0FBQTRhLEdBQXdCLElBQUFWLEVBQUEsRUFBUUEsRUFBQWhWLFVBQUFoQyxTQUFtQmdYLEVBQUEsSUFBQXlpQyxFQUFBMzhDLE9BQUFrRixVQUFBZ1YsSUFBQWxXLEVBQUF1VyxFQUFBb2lDLEdBQUEvOEMsR0FBQUksT0FBQStpSCx1QkFBQS8rRyxFQUFBUSxLQUFBMEUsTUFBQWxGLEVBQUFoRSxPQUFBK2lILHNCQUFBcG1FLEdBQUE5MEIsT0FBQWhPLEVBQUE4aUMsS0FBQXI5QyxFQUFBLEVBQXdJQSxFQUFBMEUsRUFBQWQsU0FBVzVELEVBQUErakIsRUFBQXJmLEVBQUExRSxJQUFBcTlDLEVBQUEzNEMsRUFBQTFFLElBQW9CLE9BQUErakIsR0FBNkJrdEMsY0FBQSxFQUFBcndELFlBQUEsRUFBQTZGLFVBQUEsS0FBM2tCLFFBQXNvQnV1RSxJQUFBLFNBQUEvNUQsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsVUFBa0IzYSxFQUFBc0IsVUFBQThoSCxPQUFBLFdBQThCcGhILEtBQUFrdEIsT0FBQSxHQUFjbHZCLEVBQUFzQixVQUFBb08sS0FBQSxXQUE2QjFOLEtBQUFrdEIsT0FBQSxFQUFBbHRCLEtBQUE4ekcsU0FBMkI5MUcsRUFBQXNCLFVBQUFzRCxLQUFBLFdBQTZCNUMsS0FBQTYwRyxRQUFBanlHLE1BQW1CeStHLE9BQU8xbUIsV0FBQTM2RixLQUFBMjZGLFlBQTJCOGpCLFNBQUF6K0csS0FBQW9tRyxVQUFBeGpHLFVBQWtDNUUsRUFBQXNCLFVBQUF3eEQsSUFBQSxXQUE0QixJQUFBbjRDLEVBQUEzWSxLQUFBNjBHLFFBQUEvakQsTUFBeUJuNEMsR0FBQTNZLEtBQUFvbUcsVUFBQXQxQyxJQUFBbjRDLEVBQUE4bEcsVUFBQXJnSCxPQUFBNFgsT0FBQWhXLEtBQUEyWSxFQUFBMG9HLFFBQUE5d0csUUFBQUMsS0FBQSw2Q0FBd0h4UyxFQUFBc0IsVUFBQWcxRyxPQUFBLFNBQUEzN0YsR0FBZ0MsSUFBQUssRUFBQS9FLFNBQUEwRSxJQUFrQnc5QixNQUFBbjlCLE1BQUEsS0FBQUEsRUFBQSxHQUF1QixJQUFBamIsRUFBQWlDLEtBQUEwdUcsVUFBQXRvRyxPQUFBcEcsS0FBQWhDLEVBQUFELEVBQUFtekcsTUFBQXZtRyxFQUFBNU0sRUFBQXdrRSxLQUFvRCxzQkFBQTUzRCxFQUFBLE1BQXlCLElBQUEzTSxHQUFBRCxFQUFBaTlHLE1BQUFqOUcsRUFBQWd5RyxjQUFBaHlHLEVBQUFneUcsZUFBcUQsUUFBQTkzRixFQUFBLFNBQUFVLEdBQXNCQSxFQUFBOWEsS0FBQUUsSUFBVXVhLEVBQUEsRUFBS0EsRUFBQVUsRUFBSVYsSUFBQXZhLEVBQUFtOUcsY0FBQW45RyxFQUFBcW9HLFVBQUFtYSxPQUFBeGlILEVBQUFxb0csVUFBQWtiLFVBQUF2akgsRUFBQXVvRyxhQUFBLGFBQUF2b0csRUFBQXl2RyxXQUFBLEdBQUF6dkcsRUFBQWsxRyxtQkFBQTRDLElBQUFsc0csUUFBQXNPLEdBQUF0TixJQUFBNU0sRUFBQWsxRyxtQkFBQTl5QyxLQUFBeDJELFFBQUFzTyxLQUF1TGUsRUFBQXhiLFFBQUFRLElBQWUweUcsU0FBQSxLQUFZLzlCLElBQUEsU0FBQWg2RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBYSxJQUFBQyxFQUFBMmEsRUFBQSxVQUFrQjNhLEVBQUFzQixVQUFBMitHLFlBQUEsU0FBQXRsRyxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixHQUE4QyxPQUFBalksS0FBQW9tRyxVQUFBNlgsWUFBQXRsRyxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixHQUFBalksTUFBb0RoQyxFQUFBc0IsVUFBQWlpSCxVQUFBLFdBQWtDLFVBQUF0aEgsTUFBQSxvQ0FBbURqQyxFQUFBc0IsVUFBQWtpSCxZQUFBLFdBQW9DLFVBQUF2aEgsTUFBQSxrQ0FBaURqQyxFQUFBc0IsVUFBQW1pSCxXQUFBLFdBQW1DLFVBQUF4aEgsTUFBQSxzQ0FBcURqQyxFQUFBc0IsVUFBQTQ3RyxZQUFBLFdBQW9DLE9BQUFsN0csS0FBQW9tRyxVQUFBOFUsY0FBQWw3RyxNQUF5Q2hDLEVBQUFzQixVQUFBNitHLE9BQUEsU0FBQXhsRyxFQUFBSyxHQUFrQyxPQUFBaGIsRUFBQTg3RixvQkFBQSxTQUFBeDJGLFdBQUF0RCxLQUFBb21HLFVBQUErWCxPQUFBbitHLEtBQUF1L0csV0FBQTVtRyxHQUFBSyxHQUFBaFosTUFBa0doQyxFQUFBc0IsVUFBQW9pSCxRQUFBLFNBQUEvb0csR0FBaUMsT0FBQTNZLEtBQUEyaEgsVUFBQSxXQUFBM2pILEVBQUE4N0Ysb0JBQUEsVUFBQXgyRixXQUFBdEQsS0FBQW9tRyxVQUFBc2IsUUFBQTFoSCxLQUFBdS9HLFdBQUE1bUcsSUFBQTNZLE1BQTRIaEMsRUFBQXNCLFVBQUFzaUgsUUFBQSxTQUFBanBHLEdBQWlDLE9BQUEzWSxLQUFBMmhILFVBQUEsV0FBQTNqSCxFQUFBODdGLG9CQUFBLFVBQUF4MkYsV0FBQXRELEtBQUFvbUcsVUFBQXdiLFFBQUE1aEgsS0FBQXUvRyxXQUFBNW1HLElBQUEzWSxNQUE0SGhDLEVBQUFzQixVQUFBdWlILFFBQUEsU0FBQWxwRyxHQUFpQyxPQUFBM1ksS0FBQTJoSCxVQUFBLFdBQUEzakgsRUFBQTg3RixvQkFBQSxVQUFBeDJGLFdBQUF0RCxLQUFBb21HLFVBQUF5YixRQUFBN2hILEtBQUF1L0csV0FBQTVtRyxJQUFBM1ksTUFBNEhoQyxFQUFBc0IsVUFBQTA3RyxNQUFBLFNBQUFyaUcsRUFBQUssRUFBQWpiLEdBQW1DLEdBQUFDLEVBQUE4N0Ysb0JBQUEsUUFBQXgyRixXQUFBcVYsYUFBQTNhLEVBQUFzZ0gsT0FBQSxDQUFtRSxJQUFBM3pHLEVBQUFnTyxFQUFRQSxFQUFBaE8sRUFBQWl2QixFQUFBNWdCLEVBQUFyTyxFQUFBc3pCLEVBQUFsZ0MsRUFBQTRNLEVBQUF1ekIsT0FBa0IsR0FBQXZsQixhQUFBN1UsTUFBQSxDQUE0QixJQUFBbVUsRUFBQVUsRUFBUUEsRUFBQVYsRUFBQSxHQUFBZSxFQUFBZixFQUFBLEdBQUFsYSxFQUFBa2EsRUFBQSxNQUF3QixPQUFBaytCLE1BQUFuOUIsS0FBQWpiLEVBQUE0YSxFQUFBdzlCLE1BQUFwNEMsT0FBQSxHQUFBaUMsS0FBQW9tRyxVQUFBNFUsTUFBQW45RyxLQUFBbUMsS0FBQW9tRyxVQUFBenRGLEVBQUFLLEVBQUFqYixHQUFBaUMsTUFBMkZoQyxFQUFBc0IsVUFBQTgrRyxPQUFBLFNBQUF6bEcsR0FBZ0MsT0FBQTNhLEVBQUE4N0Ysb0JBQUEsU0FBQXgyRixXQUFBdEQsS0FBQW9tRyxVQUFBZ1ksT0FBQXArRyxLQUFBdS9HLFdBQUE1bUcsSUFBQTNZLE1BQWdHaEMsRUFBQXNCLFVBQUErK0csT0FBQSxTQUFBMWxHLEdBQWdDLE9BQUEzYSxFQUFBODdGLG9CQUFBLFNBQUF4MkYsV0FBQXRELEtBQUFvbUcsVUFBQWlZLE9BQUFyK0csS0FBQXUvRyxXQUFBNW1HLElBQUEzWSxNQUFnR2hDLEVBQUFzQixVQUFBczlHLFVBQUEsU0FBQWprRyxFQUFBSyxFQUFBamIsR0FBdUMsT0FBQUMsRUFBQTg3RixvQkFBQSxZQUFBeDJGLFdBQUF0RCxLQUFBb21HLFVBQUFtYSxNQUFBdmdILEtBQUFvbUcsVUFBQXdXLFVBQUFqa0csRUFBQUssRUFBQWpiLEdBQUFpQyxLQUFBb21HLFVBQUF3VyxVQUFBamtHLEVBQUFLLEdBQUFoWixNQUE0SWdaLEVBQUF4YixRQUFBUSxJQUFlMHlHLFNBQUEsS0FBWTk5QixJQUFBLFNBQUFqNkQsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsZ0JBQXdCM2EsRUFBQXNCLFVBQUF3aUgsaUJBQUEsU0FBQW5wRyxFQUFBSyxHQUEyQyxPQUFBaGIsRUFBQTg3RixvQkFBQSxtQkFBQXgyRixXQUFBLElBQUF0RixFQUFBK2pILFdBQUFwcEcsRUFBQUssSUFBaUZoYixFQUFBc0IsVUFBQTBpSCxpQkFBQSxTQUFBcnBHLEVBQUFLLEdBQTRDLE9BQUFoYixFQUFBODdGLG9CQUFBLG1CQUFBeDJGLFdBQUEsSUFBQXRGLEVBQUFpa0gsV0FBQXRwRyxFQUFBSyxJQUFpRmhiLEVBQUFra0gsVUFBQSxTQUFBdnBHLEVBQUFLLEdBQTJCLE9BQUFMLGFBQUF2YSxPQUFBNEIsS0FBQSs3QyxLQUFBcGpDLEdBQUEzWSxLQUFBKzdDLFFBQW9ELzdDLEtBQUErN0MsS0FBQXBqQyxHQUFBSyxHQUFBaFosTUFBc0JoQyxFQUFBa2tILFVBQUE1aUgsVUFBQWtrQixLQUFBLFdBQXVDLE9BQUFwbEIsT0FBQXFFLEtBQUF6QyxLQUFBKzdDLE1BQUF6NkMsUUFBcUN0RCxFQUFBa2tILFVBQUE1aUgsVUFBQTZpSCxPQUFBLFNBQUF4cEcsR0FBMEMsT0FBQTNZLEtBQUErN0MsS0FBQXg4QyxlQUFBb1osSUFBbUMzYSxFQUFBa2tILFVBQUE1aUgsVUFBQWYsSUFBQSxTQUFBb2EsR0FBdUMsR0FBQTNZLEtBQUErN0MsS0FBQXg4QyxlQUFBb1osR0FBQSxPQUFBM1ksS0FBQSs3QyxLQUFBcGpDLEdBQW1EcEksUUFBQW5MLElBQUF1VCxFQUFBLHVDQUFvRDNhLEVBQUFra0gsVUFBQTVpSCxVQUFBb0IsSUFBQSxTQUFBaVksRUFBQUssR0FBeUNoWixLQUFBb2lILFVBQUFwcEcsR0FBQWhaLEtBQUErN0MsS0FBQXBqQyxHQUFBSyxFQUFBekksUUFBQW5MLElBQUEscURBQWlHcEgsRUFBQWtrSCxVQUFBNWlILFVBQUEraUgsUUFBQSxTQUFBMXBHLEdBQTJDLFFBQUFLLEtBQUFMLEVBQUEzWSxLQUFBVSxJQUFBc1ksRUFBQUwsRUFBQUssS0FBZ0NoYixFQUFBa2tILFVBQUE1aUgsVUFBQU4sT0FBQSxTQUFBMlosRUFBQUssR0FBNENMLGFBQUF2YSxhQUFBLElBQUE0YSxFQUFBaFosS0FBQXFpSCxRQUFBMXBHLFFBQUEsSUFBQUEsRUFBQTNZLEtBQUFVLElBQUFpWSxFQUFBSyxHQUFBekksUUFBQW5MLElBQUEsMkZBQStLcEgsRUFBQWtrSCxVQUFBNWlILFVBQUErdkIsTUFBQSxXQUF3Q3J2QixLQUFBKzdDLFNBQWEvOUMsRUFBQWtrSCxVQUFBNWlILFVBQUFtSixPQUFBLFNBQUFrUSxHQUEwQyxJQUFBM1ksS0FBQSs3QyxLQUFBeDhDLGVBQUFvWixHQUFBLFVBQUExWSxNQUFBMFksRUFBQSw2Q0FBd0YzWSxLQUFBKzdDLEtBQUFwakMsSUFBb0IzYSxFQUFBa2tILFVBQUE1aUgsVUFBQWl1RyxNQUFBLFdBQXdDLFFBQUE1MEYsS0FBQTNZLEtBQUErN0MsS0FBQXhyQyxRQUFBbkwsSUFBQSxPQUFBdVQsRUFBQSxVQUFBM1ksS0FBQSs3QyxLQUFBcGpDLEtBQW9FM2EsRUFBQWtrSCxVQUFBNWlILFVBQUFnakgsVUFBQSxTQUFBM3BHLEdBQTZDLElBQUFLLEVBQUEsR0FBUyxRQUFBamIsS0FBQWlDLEtBQUErN0MsS0FBQS9pQyxHQUFBamIsRUFBQSxJQUFBaUMsS0FBQSs3QyxLQUFBaCtDLEdBQUEsS0FBa0QsSUFBQTRNLEVBQUEsSUFBQXNFLE1BQUErSixJQUFvQi9LLEtBQUEsYUFBa0JqUSxFQUFBc0IsVUFBQWlqSCxhQUFBNTNHLEVBQUFnTyxHQUFBLGdCQUE2QzNhLEVBQUFra0gsVUFBQTVpSCxVQUFBa2pILFNBQUEsU0FBQTdwRyxFQUFBSyxHQUE4Q2hiLEVBQUFzQixVQUFBa2pILFNBQUF4aUgsS0FBQSs3QyxLQUFBcGpDLEVBQUFLLElBQW9DaGIsRUFBQWtrSCxVQUFBNWlILFVBQUE4aUgsVUFBQSxTQUFBenBHLEdBQTZDLFVBQVMzYSxFQUFBK2pILFdBQUEsV0FBeUIvakgsRUFBQWtrSCxVQUFBNTZHLE1BQUF0SCxLQUFBc0QsWUFBa0N0RixFQUFBK2pILFdBQUF6aUgsVUFBQWxCLE9BQUFZLE9BQUFoQixFQUFBa2tILFVBQUE1aUgsV0FBQXRCLEVBQUErakgsV0FBQXppSCxVQUFBOGlILFVBQUEsU0FBQXpwRyxHQUEwRyx1QkFBQUEsR0FBeUIzYSxFQUFBaWtILFdBQUEsV0FBeUJqa0gsRUFBQWtrSCxVQUFBNTZHLE1BQUF0SCxLQUFBc0QsWUFBa0N0RixFQUFBaWtILFdBQUEzaUgsVUFBQWxCLE9BQUFZLE9BQUFoQixFQUFBa2tILFVBQUE1aUgsV0FBQXRCLEVBQUFpa0gsV0FBQTNpSCxVQUFBOGlILFVBQUEsU0FBQXpwRyxHQUEwRyx1QkFBQUEsR0FBeUIzYSxFQUFBaWtILFdBQUEzaUgsVUFBQTZJLElBQUEsU0FBQXdRLEVBQUFLLEdBQTBDaFosS0FBQSs3QyxLQUFBeDhDLGVBQUFvWixHQUFBM1ksS0FBQSs3QyxLQUFBcGpDLElBQUFLLEVBQUF6SSxRQUFBbkwsSUFBQSxhQUFBdVQsRUFBQSx3Q0FBOEczYSxFQUFBaWtILFdBQUEzaUgsVUFBQXdzRixJQUFBLFNBQUFuekUsRUFBQUssR0FBMENoWixLQUFBbUksSUFBQXdRLEdBQUFLLElBQWVoYixFQUFBaWtILFdBQUEzaUgsVUFBQW0xQyxLQUFBLFNBQUE5N0IsRUFBQUssR0FBMkNoWixLQUFBKzdDLEtBQUF4OEMsZUFBQW9aLEdBQUEzWSxLQUFBKzdDLEtBQUFwakMsSUFBQUssRUFBQXpJLFFBQUFuTCxJQUFBLGFBQUF1VCxFQUFBLHdDQUE4RzNhLEVBQUFpa0gsV0FBQTNpSCxVQUFBbWpILElBQUEsU0FBQTlwRyxFQUFBSyxHQUEwQ2haLEtBQUErN0MsS0FBQXg4QyxlQUFBb1osR0FBQTNZLEtBQUErN0MsS0FBQXBqQyxJQUFBSyxFQUFBekksUUFBQW5MLElBQUEsYUFBQXVULEVBQUEsd0NBQThHM2EsRUFBQWlrSCxXQUFBM2lILFVBQUFvakgsV0FBQSxTQUFBL3BHLEdBQStDLE9BQUF2YSxPQUFBcUUsS0FBQXpDLEtBQUErN0MsTUFBQXo2QyxPQUFBLFVBQUFyQixNQUFBLDBFQUErSCxPQUFBN0IsT0FBQXFFLEtBQUF6QyxLQUFBKzdDLE1BQUF6NkMsT0FBQSxPQUFBdEIsS0FBQSs3QyxLQUFBMzlDLE9BQUFxRSxLQUFBekMsS0FBQSs3QyxNQUFBLElBQWlGLElBQUEvaUMsRUFBQWhaLEtBQUErN0MsS0FBQTM5QyxPQUFBcUUsS0FBQXpDLEtBQUErN0MsTUFBQSxJQUEyQyxRQUFBaCtDLEtBQUFpQyxLQUFBKzdDLEtBQUEvN0MsS0FBQSs3QyxLQUFBaCtDLEdBQUE0YSxFQUFBSyxFQUFBTCxJQUFBSyxFQUFBaFosS0FBQSs3QyxLQUFBaCtDLElBQTRELE9BQUFpYixHQUFTaGIsRUFBQWlrSCxXQUFBM2lILFVBQUEwYyxTQUFBLFdBQTRDLE9BQUFoYyxLQUFBMGlILFdBQUEsSUFBMEIxa0gsRUFBQWlrSCxXQUFBM2lILFVBQUEyYyxTQUFBLFdBQTRDLE9BQUFqYyxLQUFBMGlILFlBQUEsSUFBMkIxa0gsRUFBQWlrSCxXQUFBM2lILFVBQUFxakgsU0FBQSxTQUFBaHFHLEdBQTZDLE9BQUF2YSxPQUFBcUUsS0FBQXpDLEtBQUErN0MsTUFBQXo2QyxPQUFBLFVBQUFyQixNQUFBLGlEQUFzRyxPQUFBN0IsT0FBQXFFLEtBQUF6QyxLQUFBKzdDLE1BQUF6NkMsT0FBQSxPQUFBbEQsT0FBQXFFLEtBQUF6QyxLQUFBKzdDLE1BQUEsR0FBc0UsUUFBQS9pQyxFQUFBNWEsT0FBQXFFLEtBQUF6QyxLQUFBKzdDLE1BQUEsR0FBQWgrQyxFQUFBLEVBQXdDQSxFQUFBSyxPQUFBcUUsS0FBQXpDLEtBQUErN0MsTUFBQXo2QyxPQUFnQ3ZELElBQUFLLE9BQUFxRSxLQUFBekMsS0FBQSs3QyxNQUFBaCtDLEdBQUE0YSxFQUFBSyxFQUFBTCxJQUFBSyxFQUFBNWEsT0FBQXFFLEtBQUF6QyxLQUFBKzdDLE1BQUFoK0MsSUFBbUUsT0FBQWliLEdBQVNoYixFQUFBaWtILFdBQUEzaUgsVUFBQXNqSCxPQUFBLFdBQTBDLE9BQUE1aUgsS0FBQTJpSCxTQUFBLElBQXdCM2tILEVBQUFpa0gsV0FBQTNpSCxVQUFBdWpILE9BQUEsV0FBMEMsT0FBQTdpSCxLQUFBMmlILFVBQUEsSUFBeUIzcEcsRUFBQXhiLFFBQUFRLEVBQUFra0gsWUFBeUJ0b0IsZUFBQSxLQUFrQi9tQixJQUFBLFNBQUFsNkQsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsZ0JBQXdCM2EsRUFBQXNCLFVBQUF3akgsdUJBQUEsRUFBQTlrSCxFQUFBc0IsVUFBQXlqSCxjQUFBLEVBQUEva0gsRUFBQXNCLFVBQUEwakgsY0FBQSxFQUFBaGxILEVBQUFzQixVQUFBMmpILGNBQUEsRUFBQWpsSCxFQUFBc0IsVUFBQTRqSCxlQUFBLEVBQUFsbEgsRUFBQXNCLFVBQUE2akgsZUFBQSxFQUFBbmxILEVBQUFzQixVQUFBOGpILGVBQUEsRUFBQXBsSCxFQUFBc0IsVUFBQStqSCxzQkFBQSxXQUE2UHJqSCxLQUFBc21HLGFBQUEsaUJBQUF0bUcsS0FBQStpSCxlQUFBL2lILEtBQUFzbUcsYUFBQSxpQkFBQXRtRyxLQUFBZ2pILGVBQUFoakgsS0FBQXNtRyxhQUFBLGlCQUFBdG1HLEtBQUFpakgsZ0JBQXFLamxILEVBQUFzQixVQUFBZ2tILFVBQUEsRUFBQXRsSCxFQUFBc0IsVUFBQWlrSCxVQUFBLEVBQUF2bEgsRUFBQXNCLFVBQUFra0gsVUFBQSxFQUFBeGxILEVBQUFzQixVQUFBbWtILFdBQUEsRUFBQXpsSCxFQUFBc0IsVUFBQW9rSCxXQUFBLEVBQUExbEgsRUFBQXNCLFVBQUFxa0gsV0FBQSxFQUFvSixJQUFBaDVHLEVBQUFzTixFQUFBSyxFQUFBeWlDLEVBQUEsRUFBQXI5QyxFQUFBLEVBQUEwRSxFQUFBLEVBQUFxZixFQUFBLFlBQUE5akIsRUFBQSxZQUFBRyxFQUFBLFlBQWdFRSxFQUFBc0IsVUFBQXNrSCxrQkFBQSxXQUF5QzVqSCxLQUFBc21HLGFBQUEsYUFBQXRtRyxLQUFBc2pILFdBQUF0akgsS0FBQXNtRyxhQUFBLGFBQUF0bUcsS0FBQXVqSCxXQUFBdmpILEtBQUFzbUcsYUFBQSxhQUFBdG1HLEtBQUF3akgsWUFBNkl4bEgsRUFBQXNCLFVBQUF1a0gsY0FBQSxFQUE2QixJQUFBMWtILEVBQUEsR0FBQWhCLEVBQUEsR0FBY0gsRUFBQXNCLFVBQUF3a0gsaUJBQUEsU0FBQW5yRyxHQUF5QzNhLEVBQUE4N0Ysb0JBQUEsbUJBQUF4MkYsV0FBQW5FLEVBQUF3WixHQUF3RDNhLEVBQUFzQixVQUFBeWtILGtCQUFBLFNBQUFwckcsR0FBMkMzYSxFQUFBODdGLG9CQUFBLG9CQUFBeDJGLFdBQUFuRixFQUFBd2EsR0FBeUQzYSxFQUFBc0IsVUFBQTBrSCxxQkFBQSxTQUFBcnJHLEdBQThDM1ksS0FBQTRqSCxvQkFBQTVqSCxLQUFBc21HLGFBQUEsWUFBQTN0RixFQUFBc3JHLE1BQUFqa0gsS0FBQXNtRyxhQUFBLFlBQUEzdEYsRUFBQXVyRyxPQUFBbGtILEtBQUFzbUcsYUFBQSxZQUFBM3RGLEVBQUFraEYsT0FBQTc1RixLQUFBbWtILGlCQUFrS25tSCxFQUFBc0IsVUFBQThrSCxnQkFBQSxTQUFBenJHLEdBQXlDM1ksS0FBQXFqSCx3QkFBQXJqSCxLQUFBc21HLGFBQUEsa0JBQUEzdEYsRUFBQTByRyxhQUFBenFGLEdBQUE1NUIsS0FBQXNtRyxhQUFBLGtCQUFBM3RGLEVBQUEwckcsYUFBQXBtRixHQUFBaitCLEtBQUFzbUcsYUFBQSxrQkFBQTN0RixFQUFBMHJHLGFBQUFubUYsR0FBQWwrQixLQUFBbWtILGlCQUFvTm5tSCxFQUFBc0IsVUFBQTZrSCxjQUFBLFdBQXNDLEtBQUEvOUcsT0FBQWsrRyxjQUFBLEtBQUFsK0csT0FBQWsrRyxZQUFBdGtILEtBQUFzbUcsYUFBQSxxQ0FBQWxnRyxPQUFBaytHLFlBQUF0a0gsS0FBQXNtRyxhQUFBLHlDQUFBbGdHLE9BQUFrK0csYUFBQXRrSCxLQUFBc21HLGFBQUEsaUNBQThQLElBQUEzdEYsRUFBQTNZLEtBQUF1a0gsYUFBQW4rRyxPQUFBbStHLFlBQTJDLG1CQUFBNXJHLElBQUEvVCxLQUFBc1YsSUFBQWxhLEtBQUEraUgsY0FBQS9pSCxLQUFBa2pILGdCQUFBL2pILEdBQUF5RixLQUFBc1YsSUFBQWxhLEtBQUFnakgsY0FBQWhqSCxLQUFBbWpILGdCQUFBaGtILEdBQUF5RixLQUFBc1YsSUFBQWxhLEtBQUFpakgsY0FBQWpqSCxLQUFBb2pILGdCQUFBamtILElBQUF3WixJQUF3TCxJQUFBSyxFQUFBaFosS0FBQXdrSCxjQUFBcCtHLE9BQUFvK0csYUFBNkMsc0JBQUF4ckcsRUFBQSxDQUF5QixJQUFBamIsRUFBQWlDLEtBQUFzakgsVUFBQSxJQUFBdGxILEVBQUFnQyxLQUFBeWpILFdBQUEsSUFBQWprSCxFQUFBdTdDLEVBQUEsSUFBdURoOUMsRUFBQUMsRUFBQSxHQUFBRCxFQUFBQyxFQUFBLEtBQUFELEVBQUFDLEdBQUEsSUFBQXlqQixFQUFBLGFBQUExakIsRUFBQUMsRUFBQSxHQUFBRCxFQUFBQyxFQUFBLE9BQUF5akIsRUFBQSxxQkFBQUEsSUFBQTlXLElBQUFuTCxFQUFBekIsR0FBQTZHLEtBQUFzVixJQUFBbmMsRUFBQXlCLEdBQUEsSUFBQW9GLEtBQUFzVixJQUFBbmMsRUFBQXlCLEdBQUEsTUFBQUEsRUFBQXpCLEVBQUFpQyxLQUFBc21HLGFBQUEsZ0JBQUF0dEYsS0FBQXJPLEVBQUE4VyxFQUFBczVCLEVBQUF2N0MsRUFBQSxJQUEyTCxJQUFBaVYsRUFBQXpVLEtBQUF1akgsVUFBQSxJQUFBL2tILEVBQUF3QixLQUFBMGpILFdBQUEsSUFBQWprSCxFQUFBL0IsRUFBQSxJQUF1RCtXLEVBQUFqVyxFQUFBLEdBQUFpVyxFQUFBalcsRUFBQSxLQUFBaVcsRUFBQWpXLEdBQUEsSUFBQWIsRUFBQSxhQUFBOFcsRUFBQWpXLEVBQUEsR0FBQWlXLEVBQUF6VSxLQUFBMGpILFdBQUEsT0FBQS9sSCxFQUFBLHFCQUFBQSxJQUFBc2EsSUFBQXhZLEVBQUFnVixHQUFBN1AsS0FBQXNWLElBQUF6RixFQUFBaFYsR0FBQSxJQUFBbUYsS0FBQXNWLElBQUF6RixFQUFBaFYsR0FBQSxNQUFBQSxFQUFBZ1YsRUFBQXpVLEtBQUFzbUcsYUFBQSxnQkFBQXR0RixLQUFBZixFQUFBdGEsRUFBQUQsRUFBQStCLEVBQUEsSUFBQU8sS0FBQXdqSCxVQUFBeGpILEtBQUEyakgsV0FBQSxHQUFBM2pILEtBQUF3akgsVUFBQXhqSCxLQUFBMmpILFdBQUEsS0FBQTNqSCxLQUFBd2pILFVBQUF4akgsS0FBQTJqSCxZQUFBLElBQUE3bEgsRUFBQSxhQUFBa0MsS0FBQXdqSCxVQUFBeGpILEtBQUEyakgsV0FBQSxHQUFBM2pILEtBQUF3akgsVUFBQXhqSCxLQUFBMmpILFdBQUEsT0FBQTdsSCxFQUFBLHFCQUFBQSxJQUFBd2EsSUFBQWxXLEVBQUFwQyxLQUFBd2pILFdBQUE1K0csS0FBQXNWLElBQUFsYSxLQUFBd2pILFVBQUFwaEgsR0FBQSxJQUFBd0MsS0FBQXNWLElBQUFsYSxLQUFBd2pILFVBQUFwaEgsR0FBQSxNQUFBQSxFQUFBcEMsS0FBQXdqSCxVQUFBeGpILEtBQUFzbUcsYUFBQSxnQkFBQXR0RixLQUFBVixFQUFBeGEsRUFBQWtDLEtBQUFzbUcsYUFBQSxtQkFBNGxCLElBQXNFaHFELEVBQUE5RyxFQUF0RTUyQyxFQUFBb0IsS0FBQXlrSCxjQUFBcitHLE9BQUFxK0csYUFBNkMsbUJBQUE3bEgsSUFBaUMsT0FBQW9CLEtBQUFrakgsaUJBQUE1bUUsRUFBQTEzQyxLQUFBc1YsSUFBQWxhLEtBQUEraUgsY0FBQS9pSCxLQUFBa2pILGdCQUFBMXRFLEVBQUE1d0MsS0FBQXNWLElBQUFsYSxLQUFBZ2pILGNBQUFoakgsS0FBQW1qSCxpQkFBQTdtRSxFQUFBOUcsRUFBQXIzQyxHQUFBUyxNQUFnSm9hLEVBQUF4YixRQUFBUSxJQUFlNDdGLGVBQUEsS0FBa0I5bUIsSUFBQSxTQUFBbjZELEVBQUFLLEVBQUFqYixHQUFzQixhQUE2RixJQUFBNE0sRUFBQWdPLEVBQUEsZ0JBQUFWLEtBQTZCdE4sRUFBQXJMLFVBQUFvbEgsY0FBQSxFQUFBLzVHLEVBQUFyTCxVQUFBcWxILGNBQUEsRUFBQWg2RyxFQUFBckwsVUFBQUwsSUFBQSxHQUFBMEwsRUFBQXJMLFVBQUFzbEgsUUFBQSxFQUFBajZHLEVBQUFyTCxVQUFBdWxILFdBQUEsU0FBQWxzRyxHQUFvSSxJQUFBVixFQUFBVSxFQUFBbXNHLE9BQUEsQ0FBZ0I5a0gsS0FBQXNtRyxhQUFBLG1CQUFBdG1HLEtBQUFzbUcsYUFBQSxtQkFBQXRtRyxLQUFBc21HLGFBQUEsVUFBQTN0RixFQUFBbXNHLE9BQUE3c0csRUFBQVUsRUFBQW1zRyxRQUFBLEVBQUE5a0gsS0FBQXNtRyxhQUFBLE1BQUEzdEYsRUFBQTFaLEtBQUE4OUMsT0FBQUMsYUFBQXJrQyxFQUFBbXNHLFFBQUFuc0csRUFBQW1zRyxPQUFtTSxJQUFBOXJHLEVBQUFoWixLQUFBK2tILFlBQUEzK0csT0FBQTIrRyxXQUF5QyxtQkFBQS9yRyxHQUFBTCxFQUFBcXNHLFdBQXNDLElBQUFoc0csRUFBQUwsTUFBQWkyRixtQkFBZ0Nqa0csRUFBQXJMLFVBQUEybEgsU0FBQSxTQUFBdHNHLEdBQWtDLElBQUFLLEVBQUFoWixLQUFBa2xILGFBQUE5K0csT0FBQTgrRyxZQUEyQ2p0RyxFQUFBVSxFQUFBbXNHLFFBQUEsRUFBaG9CLFdBQWEsUUFBQW5zRyxLQUFBVixFQUFBLEdBQUFBLEVBQUExWSxlQUFBb1osS0FBQSxJQUFBVixFQUFBVSxHQUFBLFNBQTBELFNBQXlqQjNhLEtBQUFnQyxLQUFBc21HLGFBQUEsbUJBQUF0bUcsS0FBQXNtRyxhQUFBLG9CQUFBdG1HLEtBQUFzbUcsYUFBQSwwQkFBQXRtRyxLQUFBc21HLGFBQUEsTUFBQTN0RixFQUFBMVosS0FBQTg5QyxPQUFBQyxhQUFBcmtDLEVBQUFtc0csUUFBQW5zRyxFQUFBbXNHLE9BQUE5a0gsS0FBQXNtRyxhQUFBLFVBQUEzdEYsRUFBQW1zRyxPQUFBLG1CQUFBOXJHLElBQStRLElBQUFBLEVBQUFMLE1BQUFpMkYsa0JBQStCamtHLEVBQUFyTCxVQUFBNmxILFlBQUEsU0FBQXhzRyxHQUFxQyxHQUFBQSxFQUFBbXNHLFFBQUE5a0gsS0FBQW9sSCxrQkFBQSxDQUFxQ3BsSCxLQUFBc21HLGFBQUEsVUFBQTN0RixFQUFBbXNHLE9BQUE5a0gsS0FBQXNtRyxhQUFBLG9CQUFBM3RGLEVBQUFtc0csT0FBQTlrSCxLQUFBc21HLGFBQUEsTUFBQXZwRCxPQUFBQyxhQUFBcmtDLEVBQUFtc0csUUFBMEksSUFBQTlyRyxFQUFBaFosS0FBQXFsSCxVQUFBai9HLE9BQUFpL0csU0FBcUMsbUJBQUFyc0csSUFBeUIsSUFBQUEsRUFBQUwsTUFBQWkyRixtQkFBZ0Nqa0csRUFBQXJMLFVBQUFnbUgsUUFBQSxTQUFBM3NHLEdBQWlDVixNQUFLdE4sRUFBQXJMLFVBQUFpbUgsVUFBQSxTQUFBNXNHLEdBQW1DLE9BQUFoTyxFQUFBbXZGLG9CQUFBLFlBQUF4MkYsV0FBQTJVLEVBQUFVLElBQXlESyxFQUFBeGIsUUFBQW1OLElBQWVpdkYsZUFBQSxLQUFrQjdtQixJQUFBLFNBQUFwNkQsRUFBQUssRUFBQWpiLEdBQXNCLGFBQTZSLElBQUE0TSxFQUFBZ08sRUFBQSxnQkFBQVYsRUFBQVUsRUFBQSxxQkFBaURoTyxFQUFBckwsVUFBQWttSCxxQkFBQSxFQUFBNzZHLEVBQUFyTCxVQUFBbW1ILE9BQUEsRUFBQTk2RyxFQUFBckwsVUFBQW9tSCxPQUFBLEVBQUEvNkcsRUFBQXJMLFVBQUFxbUgsUUFBQSxFQUFBaDdHLEVBQUFyTCxVQUFBc21ILFFBQUEsRUFBQWo3RyxFQUFBckwsVUFBQXVtSCxVQUFBLEVBQUFsN0csRUFBQXJMLFVBQUF3bUgsVUFBQSxFQUFBbjdHLEVBQUFyTCxVQUFBeW1ILFdBQUEsRUFBQXA3RyxFQUFBckwsVUFBQTBtSCxXQUFBLEVBQUFyN0csRUFBQXJMLFVBQUEybUgsWUFBQSxFQUFBdDdHLEVBQUFyTCxVQUFBNG1ILGdCQUFBLEVBQUF2N0csRUFBQXJMLFVBQUE2bUgsdUJBQUEsU0FBQXh0RyxHQUFrVSxVQUFBM1ksS0FBQTR0RyxlQUFBajFGLEVBQUF5dEcsU0FBQXp0RyxFQUFBeXRHLFFBQUE5a0gsT0FBQSxJQUE4RCxJQUFBMFgsRUFBanNCLFNBQUFMLEVBQUFLLEVBQUFqYixFQUFBQyxHQUFvQkEsTUFBQXFvSCxVQUFBcm9ILEVBQUFvb0gsUUFBQXBvSCxJQUFBb29ILFFBQUEsR0FBQXBvSCxFQUFBc29ILGlCQUFBdG9ILElBQUFzb0gsZUFBQSxLQUFvRixJQUFBMzdHLEVBQUFnTyxFQUFBNHRHLHdCQUFBdHVHLEVBQUFVLEVBQUE2dEcsWUFBQXh0RyxFQUFBVixFQUFBSyxFQUFBOHRHLGFBQUExb0gsRUFBcUUsT0FBTzY3QixHQUFBNTdCLEVBQUFxb0gsUUFBQTE3RyxFQUFBdWpCLE1BQUFqVyxFQUFBZ21CLEdBQUFqZ0MsRUFBQTBvSCxRQUFBLzdHLEVBQUFnOEcsS0FBQXJ1RyxFQUFBc3VHLEtBQUE1b0gsRUFBQXFvSCxRQUFBUSxLQUFBN29ILEVBQUEwb0gsUUFBQTM0RyxHQUFBL1AsRUFBQThvSCxZQUE2Z0I5b0gsQ0FBQWdDLEtBQUE0dEcsWUFBQUMsSUFBQTd0RyxLQUFBdXRDLE1BQUF2dEMsS0FBQSt1QixPQUFBcFcsR0FBdUQzWSxLQUFBc21HLGFBQUEsU0FBQXR0RixFQUFBNGdCLEdBQUE1NUIsS0FBQXNtRyxhQUFBLFNBQUF0dEYsRUFBQWlsQixHQUFBaitCLEtBQUFzbUcsYUFBQSxZQUFBdHRGLEVBQUE0dEcsTUFBQTVtSCxLQUFBc21HLGFBQUEsWUFBQXR0RixFQUFBNnRHLE1BQTRJN21ILEtBQUF3bEgsc0JBQUF4bEgsS0FBQXUwRyxxQkFBQXYwRyxLQUFBc21HLGFBQUEsNEJBQWtHMzdGLEVBQUFyTCxVQUFBaTFHLG1CQUFBLFdBQTJDdjBHLEtBQUFzbUcsYUFBQSxVQUFBdG1HLEtBQUF5bEgsUUFBQXpsSCxLQUFBc21HLGFBQUEsVUFBQXRtRyxLQUFBMGxILFFBQUExbEgsS0FBQXNtRyxhQUFBLGFBQUF0bUcsS0FBQTZsSCxXQUFBN2xILEtBQUFzbUcsYUFBQSxhQUFBdG1HLEtBQUE4bEgsV0FBQTlsSCxLQUFBc21HLGFBQUEscUJBQUF0bUcsS0FBQSttSCxvQkFBK09wOEcsRUFBQXJMLFVBQUFpM0csZ0JBQUEsU0FBQTU5RixHQUF5QyxJQUFBQSxFQUFBcXVHLE9BQUFobkgsS0FBQXNtRyxhQUFBLGNBQUFydUYsRUFBQTZ2RixRQUFBLElBQUFudkYsRUFBQXF1RyxPQUFBaG5ILEtBQUFzbUcsYUFBQSxjQUFBcnVGLEVBQUEydkYsT0FBQTVuRyxLQUFBc21HLGFBQUEsY0FBQXJ1RixFQUFBNHZGLE9BQXFKbDlGLEVBQUFyTCxVQUFBMm5ILGFBQUEsU0FBQXR1RyxHQUFzQyxJQUFBSyxFQUFBaFosS0FBQTB1RyxVQUFBdG9HLE9BQUFwRyxLQUFpQ0EsS0FBQW1tSCx1QkFBQXh0RyxHQUFBM1ksS0FBQWttSCxlQUFBLG1CQUFBbHRHLEVBQUFrdUcsY0FBQSxJQUFBbHVHLEVBQUFrdUcsYUFBQXZ1RyxNQUFBaTJGLGlCQUFBLG1CQUFBNTFGLEVBQUFpK0YsYUFBQSxJQUFBaitGLEVBQUFpK0YsV0FBQXQrRixNQUFBaTJGLGlCQUFBLG1CQUFBNTFGLEVBQUE0OUYsYUFBQSxJQUFBNTlGLEVBQUE0OUYsV0FBQWorRixNQUFBaTJGLGtCQUFvUmprRyxFQUFBckwsVUFBQTZuSCxhQUFBLFNBQUF4dUcsR0FBc0MsSUFBQUssRUFBQWhaLEtBQUEwdUcsVUFBQXRvRyxPQUFBcEcsS0FBaUNBLEtBQUFzbUcsYUFBQSxxQkFBQXRtRyxLQUFBdTJHLGdCQUFBNTlGLEdBQUEzWSxLQUFBbW1ILHVCQUFBeHRHLEdBQUEsbUJBQUFLLEVBQUFzOUYsY0FBQSxJQUFBdDlGLEVBQUFzOUYsYUFBQTM5RixNQUFBaTJGLGlCQUFBLG1CQUFBNTFGLEVBQUFnK0YsZUFBQSxJQUFBaCtGLEVBQUFnK0YsYUFBQXIrRixNQUFBaTJGLGtCQUF5UGprRyxFQUFBckwsVUFBQThuSCxXQUFBLFNBQUF6dUcsR0FBb0MsSUFBQUssRUFBQWhaLEtBQUEwdUcsVUFBQXRvRyxPQUFBcEcsS0FBaUNBLEtBQUFzbUcsYUFBQSxxQkFDeGsrQixtQkFBQXR0RixFQUFBMDlGLGVBQUEsSUFBQTE5RixFQUFBMDlGLGNBQUEvOUYsTUFBQWkyRixpQkFBQSxtQkFBQTUxRixFQUFBaytGLGFBQUEsSUFBQWwrRixFQUFBaytGLFdBQUF2K0YsTUFBQWkyRixrQkFBeUpqa0csRUFBQXJMLFVBQUErbkgsV0FBQTE4RyxFQUFBckwsVUFBQThuSCxXQUFBejhHLEVBQUFyTCxVQUFBZ29ILFlBQUEzOEcsRUFBQXJMLFVBQUEybkgsYUFBQXQ4RyxFQUFBckwsVUFBQWlvSCxTQUFBLFNBQUE1dUcsR0FBaUksSUFBQUssRUFBQWhaLEtBQUEwdUcsVUFBQXRvRyxPQUFBcEcsS0FBaUMsbUJBQUFnWixFQUFBMjlGLGVBQXNDLElBQUEzOUYsRUFBQTI5RixhQUFBaCtGLE1BQUFpMkYsa0JBQTRDamtHLEVBQUFyTCxVQUFBa29ILFlBQUEsU0FBQTd1RyxHQUFxQyxJQUFBSyxFQUFBaFosS0FBQTB1RyxVQUFBdG9HLE9BQUFwRyxLQUFpQyxtQkFBQWdaLEVBQUF3OUYsZ0JBQXVDLElBQUF4OUYsRUFBQXc5RixjQUFBNzlGLE1BQUFpMkYsa0JBQTZDamtHLEVBQUFyTCxVQUFBeW5ILGtCQUFBLEVBQUFwOEcsRUFBQXJMLFVBQUFtb0gsbUJBQUEsRUFBQTk4RyxFQUFBckwsVUFBQW9vSCxTQUFBLFNBQUEvdUcsR0FBbUcsSUFBQUssRUFBQWhaLEtBQUEwdUcsVUFBQXRvRyxPQUFBcEcsS0FBaUNBLEtBQUFzbUcsYUFBQSxvQkFBQTN0RixFQUFBZ3ZHLFFBQUEsbUJBQUEzdUcsRUFBQXk5RixhQUFvRjk5RixFQUFBa1MsTUFBQWxTLEVBQUFndkcsUUFBaUIsSUFBQTN1RyxFQUFBeTlGLFdBQUE5OUYsTUFBQWkyRixtQkFBMEM1MUYsRUFBQXhiLFFBQUFtTixJQUFlK3dGLG9CQUFBLEdBQUE5QixlQUFBLEtBQXlDNW1CLElBQUEsU0FBQXI2RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBYSxTQUFBQyxFQUFBMmEsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxHQUFzQkEsS0FBQSxFQUFPLElBQUFzTixFQUFBVSxFQUFBNHRHLHdCQUFBanVHLEVBQUFLLEVBQUE2dEcsWUFBQXh0RyxFQUFBK2hDLEVBQUFwaUMsRUFBQTh0RyxhQUFBMW9ILEVBQUFMLEVBQUFNLEVBQUFvb0gsUUFBQXo3RyxJQUFBM00sRUFBQXNvSCxlQUFBMzdHLEdBQXlHLE9BQU9pdkIsR0FBQWw4QixFQUFBMm9ILFFBQUFwdUcsRUFBQWlXLE1BQUE1VixFQUFBMmxCLEdBQUF2Z0MsRUFBQWdwSCxRQUFBenVHLEVBQUEwdUcsS0FBQTVyRSxFQUFBNnJFLEtBQUFscEgsRUFBQTJvSCxRQUFBUSxLQUFBbnBILEVBQUFncEgsUUFBQTM0RyxHQUFBclEsRUFBQW9wSCxZQUE0RixJQUFBbjhHLEVBQUFnTyxFQUFBLGdCQUF3QmhPLEVBQUFyTCxVQUFBOG1ILFdBQUF6N0csRUFBQXJMLFVBQUFzb0gsbUJBQUEsU0FBQWp2RyxHQUFrRSxVQUFBM1ksS0FBQTR0RyxZQUFBLENBQTRCLFFBQUE1MEYsS0FBQWpiLEVBQUEsRUFBaUJBLEVBQUE0YSxFQUFBeXRHLFFBQUE5a0gsT0FBbUJ2RCxJQUFBaWIsRUFBQWpiLEdBQUFDLEVBQUFnQyxLQUFBNHRHLFlBQUFDLElBQUE3dEcsS0FBQXV0QyxNQUFBdnRDLEtBQUErdUIsT0FBQXBXLEVBQUE1YSxHQUE0RGlDLEtBQUFzbUcsYUFBQSxVQUFBdHRGLEtBQWdDck8sRUFBQXJMLFVBQUF1b0gsY0FBQSxTQUFBbHZHLEdBQXVDLElBQUFLLEVBQUFoWixLQUFBMHVHLFVBQUF0b0csT0FBQXBHLEtBQWlDQSxLQUFBc21HLGFBQUEscUJBQUF0bUcsS0FBQTRuSCxtQkFBQWp2RyxHQUFBM1ksS0FBQW1tSCx1QkFBQXh0RyxHQUFBM1ksS0FBQXUwRyxxQkFBQSxtQkFBQXY3RixFQUFBZytGLGNBQUEsSUFBQWgrRixFQUFBZytGLGFBQUFyK0YsTUFBQWkyRixpQkFBQSxtQkFBQTUxRixFQUFBczlGLGVBQUEsSUFBQXQ5RixFQUFBczlGLGFBQUEzOUYsTUFBQWkyRixrQkFBc1Jqa0csRUFBQXJMLFVBQUF3b0gsYUFBQSxTQUFBbnZHLEdBQXNDLElBQUFLLEVBQUFoWixLQUFBMHVHLFVBQUF0b0csT0FBQXBHLEtBQWlDQSxLQUFBNG5ILG1CQUFBanZHLEdBQUEzWSxLQUFBbW1ILHVCQUFBeHRHLEdBQUEsbUJBQUFLLEVBQUFpK0YsWUFBQSxJQUFBaitGLEVBQUFpK0YsV0FBQXQrRixNQUFBaTJGLGlCQUFBLG1CQUFBNTFGLEVBQUFrdUcsZUFBQSxJQUFBbHVHLEVBQUFrdUcsYUFBQXZ1RyxNQUFBaTJGLGtCQUFpTmprRyxFQUFBckwsVUFBQXlvSCxZQUFBLFNBQUFwdkcsR0FBcUMzWSxLQUFBc21HLGFBQUEscUJBQUF0bUcsS0FBQTRuSCxtQkFBQWp2RyxHQUFBM1ksS0FBQW1tSCx1QkFBQXh0RyxHQUFpRyxJQUFBSyxFQUFBaFosS0FBQTB1RyxVQUFBdG9HLE9BQUFwRyxLQUFpQyxtQkFBQWdaLEVBQUFrK0YsWUFBQSxJQUFBbCtGLEVBQUFrK0YsV0FBQXYrRixNQUFBaTJGLGlCQUFBLG1CQUFBNTFGLEVBQUEwOUYsZ0JBQUEsSUFBQTE5RixFQUFBMDlGLGNBQUEvOUYsTUFBQWkyRixrQkFBeUo1MUYsRUFBQXhiLFFBQUFtTixJQUFlaXZGLGVBQUEsS0FBa0IzbUIsSUFBQSxTQUFBdDZELEVBQUFLLEVBQUFqYixHQUFzQixhQUFpVSxTQUFBNE0sRUFBQWdPLEVBQUFLLEdBQWdCLFFBQUFqYixFQUFBa2EsRUFBQTBqRyxVQUFBaGpHLEdBQUFoTyxFQUFBZ08sRUFBQTQwQixNQUFBOXJCLEVBQUE5SSxFQUFBb1csT0FBQXB4QixFQUFBZ04sRUFBQThXLEVBQUEzakIsRUFBQSxJQUFBa3FILFdBQUFycUgsR0FBQXdCLEVBQUEsRUFBNEVBLEVBQUF4QixFQUFJd0IsSUFBQXJCLEVBQUFxQixHQUFBOFksRUFBQWd3RyxTQUFBbHFILEVBQUFvQixHQUF5QixJQUFBaEIsRUFBQXFCLEVBQUFpVixFQUFBalcsRUFBQWlCLEVBQUFiLEVBQUEwOUMsRUFBQTlHLEVBQUFpSCxFQUFBN2lCLEVBQWlIc2pCLEVBQUFDLEVBQUFDLEVBQUFDLEVBQWpIcGYsRUFBQSxJQUFBK3BGLFdBQUFycUgsR0FBQXVnQyxFQUFBLElBQUE4cEYsV0FBQXJxSCxHQUFBaS9DLEVBQUEsSUFBQW9yRSxXQUFBcnFILEdBQUF1UyxFQUFBLElBQUE4M0csV0FBQXJxSCxHQUFBcy9DLEVBQUEsRUFBNkgsSUFBMWlCLFNBQUF0a0MsR0FBYyxJQUFBSyxFQUFBLElBQUFMLEVBQUEsRUFBYyxHQUFBTCxLQUFBVSxJQUFBLElBQUFBLEVBQUEsSUFBQUEsRUFBQSxNQUE4QitoQyxFQUFBLEdBQUF6aUMsRUFBQVUsSUFBQSxFQUFBdGIsRUFBQSxJQUFBc3FILFdBQUFqdEUsR0FBQTM0QyxFQUFBLElBQUEwQixNQUFBaTNDLEdBQWdELFFBQUFoOUMsRUFBQSxFQUFZQSxFQUFBZzlDLEVBQUloOUMsSUFBQXFFLEVBQUFyRSxHQUFBLElBQUFpcUgsV0FBQSxLQUE2QixRQUFBaHFILEVBQUEyTSxFQUFBc04sRUFBQXdKLEVBQUE5akIsRUFBQSxFQUFBRyxFQUFBa2IsRUFBQSxFQUEwQnJiLEVBQUFxYixFQUFJcmIsSUFBQSxDQUFLRCxFQUFBc2IsRUFBQXJiLEdBQUFELEVBQUFJLEdBQUE2TSxFQUFBN00sSUFBQW1hLEVBQUE3VixFQUFBNFcsRUFBQXJiLEdBQUE4akIsRUFBQXJmLEVBQUF0RSxLQUFvQyxRQUFBcUIsRUFBQSxFQUFZQSxFQUFBLElBQU1BLElBQUE4WSxFQUFBOVksR0FBQXNpQixFQUFBdGlCLEdBQUF3TCxFQUFBeEwsRUFBa0JuQixFQUFBTixFQUFBc2IsT0FBQWYsRUFBQTdWLEVBQUE0VyxHQUFrQixRQUFBN2EsRUFBQSxFQUFZQSxFQUFBLElBQU1BLElBQUE4WixFQUFBOVosR0FBQUgsRUFBQUcsR0FBbVBILENBQUFnYixHQUFpQm1rQyxFQUFBLEVBQVFBLEVBQUExN0IsRUFBSTA3QixJQUFBLENBQUssSUFBQUQsRUFBQSxFQUFRQSxFQUFBdnlDLEVBQUl1eUMsSUFBQSxDQUFLLEdBQUExK0MsRUFBQWlXLEVBQUFqVixFQUFBQyxFQUFBdEIsRUFBQSxHQUFBUyxFQUFBcytDLEVBQUE1a0MsR0FBQSxFQUFBc2hCLEdBQUFoN0IsSUFBQSxNQUFrQyxDQUFLLEdBQUFBLEdBQUErTCxFQUFBLE1BQWNpdkIsRUFBQSxFQUFJLElBQUF3akIsRUFBQXhqQixFQUFRd2pCLEVBQUFyQyxLQUFBbjhDLEdBQUErTCxHQUFheXlDLElBQUEsQ0FBSyxJQUFBRSxFQUFBeC9DLEVBQUFjLEVBQUFxK0MsR0FBYUksRUFBQWo3QyxFQUFBZzdDLEdBQUEzOUMsR0FBQTQ5QyxJQUFBLFNBQUFDLEtBQUEsSUFBQTk5QyxHQUFBNjlDLEdBQUEsU0FBQUMsSUFBQSxJQUFBN29DLEdBQUE0b0MsR0FBQSxNQUFBQyxJQUFBLEdBQUE5K0MsR0FBQTYrQyxFQUFBLElBQUFDLEdBQUFuL0MsR0FBQVQsRUFBQTAvQyxHQUFBeCtDLElBQWtHcS9CLEVBQUFxZSxFQUFBVyxFQUFBQyxHQUFBejlDLEVBQUF0QixFQUFBKy9CLEVBQUFvZSxHQUFBOThDLEVBQUFyQixFQUFBeStDLEVBQUFOLEdBQUE3bkMsRUFBQXRXLEVBQUErUixFQUFBb3NDLEdBQUE5OUMsRUFBQUwsRUFBMEM4K0MsR0FBQXR5QyxFQUFLLElBQUFzeUMsRUFBQSxFQUFBUixHQUFBakgsR0FBQWw5QixHQUFBM04sRUFBQXd5QyxFQUFBLEVBQXVCQSxFQUFBMTdCLEVBQUkwN0IsSUFBQSxDQUFLLElBQUFELEVBQUEsRUFBUUEsRUFBQXZ5QyxFQUFJdXlDLElBQUEsQ0FBSyxHQUFBMStDLEVBQUFpVyxFQUFBalYsRUFBQUMsRUFBQXRCLEVBQUEsRUFBQXEzQyxFQUFBLEVBQUE1YixFQUFBMGlCLEdBQUE5RyxFQUFBNTJDLEVBQUFzK0MsTUFBOEIsQ0FBSyxHQUFBMUgsR0FBQS96QixFQUFBLE1BQWNtWSxFQUFBLEVBQUEwaUIsRUFBQTlHLEVBQUE1MkMsRUFBQXMrQyxFQUFBVCxFQUFjLElBQUFXLEVBQUF4akIsRUFBUXdqQixFQUFBckMsS0FBQXVCLEdBQUE3NkIsR0FBYTI3QixJQUFBQyxFQUFBajdDLEVBQUFnN0MsR0FBQTM5QyxHQUFBNDlDLEVBQUFwZixFQUFBci9CLElBQUFZLEdBQUE2OUMsRUFBQW5mLEVBQUF0L0IsSUFBQTZWLEdBQUE0b0MsRUFBQVQsRUFBQWgrQyxJQUFBSixHQUFBNitDLEVBQUFudEMsRUFBQXRSLElBQUFULEdBQUFULEVBQUEwL0MsR0FBQWQsSUFBQTE5QyxHQUFBK0wsRUFBd0U3TSxFQUFBby9DLEVBQUFELEdBQUF4OUMsRUFBQXRCLEdBQUEsR0FBQXFCLEVBQUFyQixHQUFBLEdBQUFzVyxFQUFBdFcsR0FBQSxFQUFBSyxFQUFBTCxFQUFrQzgrQyxHQUFBdHlDLEVBQUE4eEMsR0FBQTl4QyxFQUFBNnFDLElBQWN2OUIsRUFBQWl3RyxXQUFBbnFILEVBQUFELEdBQWtCLElBQXc2RndhLEVBQUF5aUMsRUFBQXI5QyxFQUFBMEUsRUFBeDZGNlYsR0FBUzBqRyxVQUFBLFNBQUFoakcsR0FBd0IsT0FBQUEsYUFBQXd2RyxVQUFBeHZHLEVBQUFvakMsS0FBQXBqQyxFQUFBcFMsV0FBQSxNQUFBMjFHLGFBQUEsSUFBQXZqRyxFQUFBNDBCLE1BQUE1MEIsRUFBQW9XLFFBQUFndEIsTUFBZ0drc0UsU0FBQSxTQUFBdHZHLEVBQUFLLEdBQTBCLElBQUFqYixFQUFBLEVBQUFpYixFQUFVLE9BQUFMLEVBQUE1YSxFQUFBLGtCQUFBNGEsRUFBQTVhLElBQUEsWUFBQTRhLEVBQUE1YSxFQUFBLGdCQUFBNGEsRUFBQTVhLEVBQUEsSUFBMEVtcUgsV0FBQSxTQUFBdnZHLEVBQUFLLEdBQTRCLFFBQUFqYixFQUFBLEVBQUFDLEVBQUEsRUFBQTJNLEVBQUFnTyxFQUFBclgsT0FBMkJ0RCxFQUFBMk0sRUFBSTNNLElBQUEyYSxFQUFBLEdBQUE1YSxFQUFBLEVBQUFDLEtBQUEsU0FBQWdiLEVBQUFoYixNQUFBLEdBQUEyYSxFQUFBNWEsRUFBQSxVQUFBaWIsRUFBQWhiLE1BQUEsRUFBQTJhLEVBQUE1YSxFQUFBLE9BQUFpYixFQUFBaGIsR0FBQTJhLEVBQUE1YSxFQUFBLGVBQUFpYixFQUFBaGIsTUFBQSxJQUE0R29xSCxhQUFBLFNBQUF6dkcsR0FBNEIsT0FBQUEsYUFBQXd2RyxVQUFBeHZHLElBQUFwUyxXQUFBLE1BQUEyMUcsYUFBQSxJQUFBdmpHLEVBQUE0MEIsTUFBQTUwQixFQUFBb1csU0FBc0ZzNUYsaUJBQUEsU0FBQTF2RyxFQUFBSyxHQUFrQyxPQUFBZixFQUFBcXdHLFdBQUF0eEYsU0FBQUMsY0FBQSxVQUFBaGYsRUFBQXN3RyxRQUFBdHdHLEVBQUFxd0csV0FBQS9oSCxXQUFBLE1BQUF2RyxLQUFBdW9ILFFBQUEzTSxnQkFBQWpqRyxFQUFBSyxJQUErSDFSLE1BQUEsU0FBQXFSLEVBQUFLLEVBQUFqYixHQUF5QixJQUFBQyxFQUFBMmEsRUFBQXBTLFdBQUEsTUFBQW9FLEVBQUEzTSxFQUFBaytHLGFBQUEsSUFBQXZqRyxFQUFBNDBCLE1BQUE1MEIsRUFBQW9XLFFBQUE5VyxFQUFBZSxFQUFBck8sRUFBQTVNLEdBQXlFa2EsYUFBQWt3RyxVQUFBbnFILEVBQUE2OUcsYUFBQTVqRyxFQUFBLFFBQUFVLEVBQUE0MEIsTUFBQTUwQixFQUFBb1csUUFBQS93QixFQUFBNjlHLGFBQUFseEcsRUFBQSxRQUFBZ08sRUFBQTQwQixNQUFBNTBCLEVBQUFvVyxTQUE2RzFLLFVBQUEsU0FBQTFMLEVBQUFLLEdBQTJCLElBQUFqYixFQUFBa2EsRUFBQTBqRyxVQUFBaGpHLFFBQXFCLElBQUFLLE1BQUEsSUFBbUIsUUFBQWhiLEVBQUE0RyxLQUFBMEUsTUFBQSxJQUFBMFAsR0FBQXJPLEVBQUEsRUFBZ0NBLEVBQUE1TSxFQUFBdUQsT0FBV3FKLEdBQUEsR0FBTSxJQUFBMk4sRUFBQXlpQyxFQUFBaDlDLEVBQUE0TSxHQUFBak4sRUFBQUssRUFBQTRNLEVBQUEsR0FBQXZJLEVBQUFyRSxFQUFBNE0sRUFBQSxHQUFBOFcsRUFBQSxNQUFBczVCLEVBQUEsTUFBQXI5QyxFQUFBLE1BQUEwRSxFQUF5RGtXLEVBQUFtSixHQUFBempCLEVBQUEsTUFBQUQsRUFBQTRNLEdBQUE1TSxFQUFBNE0sRUFBQSxHQUFBNU0sRUFBQTRNLEVBQUEsR0FBQTJOLElBQW1Dc25GLEtBQUEsU0FBQWpuRixHQUFvQixRQUFBSyxFQUFBZixFQUFBMGpHLFVBQUFoakcsR0FBQTVhLEVBQUEsRUFBNkJBLEVBQUFpYixFQUFBMVgsT0FBV3ZELEdBQUEsR0FBTSxJQUFBQyxFQUFBZ2IsRUFBQWpiLEdBQUE0TSxFQUFBcU8sRUFBQWpiLEVBQUEsR0FBQXVhLEVBQUFVLEVBQUFqYixFQUFBLEdBQUFnOUMsRUFBQSxNQUFBLzhDLEVBQUEsTUFBQTJNLEVBQUEsTUFBQTJOLEVBQXVEVSxFQUFBamIsR0FBQWliLEVBQUFqYixFQUFBLEdBQUFpYixFQUFBamIsRUFBQSxHQUFBZzlDLElBQXNCeXRFLE9BQUEsU0FBQTd2RyxHQUFzQixRQUFBSyxFQUFBZixFQUFBMGpHLFVBQUFoakcsR0FBQTVhLEVBQUEsRUFBNkJBLEVBQUFpYixFQUFBMVgsT0FBV3ZELEdBQUEsRUFBQWliLEVBQUFqYixFQUFBLE9BQWdCLE9BQUFpYixHQUFTeXZHLE9BQUEsU0FBQTl2RyxHQUFzQixRQUFBSyxFQUFBZixFQUFBMGpHLFVBQUFoakcsR0FBQTVhLEVBQUEsRUFBNkJBLEVBQUFpYixFQUFBMVgsT0FBV3ZELEdBQUEsRUFBQWliLEVBQUFqYixHQUFBLElBQUFpYixFQUFBamIsR0FBQWliLEVBQUFqYixFQUFBLE9BQUFpYixFQUFBamIsRUFBQSxHQUFBaWIsRUFBQWpiLEVBQUEsT0FBQWliLEVBQUFqYixFQUFBLElBQXVEMnFILFVBQUEsU0FBQS92RyxFQUFBSyxHQUEyQixJQUFBamIsRUFBQWthLEVBQUEwakcsVUFBQWhqRyxHQUFxQixHQUFBSyxFQUFBLEdBQUFBLEVBQUEsY0FBQS9ZLE1BQUEsZ0VBQThGLFFBQUFqQyxFQUFBZ2IsRUFBQSxFQUFBck8sRUFBQSxFQUFrQkEsRUFBQTVNLEVBQUF1RCxPQUFXcUosR0FBQSxHQUFNLElBQUEyTixFQUFBdmEsRUFBQTRNLEdBQUFvd0MsRUFBQWg5QyxFQUFBNE0sRUFBQSxHQUFBak4sRUFBQUssRUFBQTRNLEVBQUEsR0FBNkI1TSxFQUFBNE0sR0FBQSxLQUFBMk4sRUFBQVUsR0FBQSxHQUFBaGIsRUFBQUQsRUFBQTRNLEVBQUEsUUFBQW93QyxFQUFBL2hDLEdBQUEsR0FBQWhiLEVBQUFELEVBQUE0TSxFQUFBLFFBQUFqTixFQUFBc2IsR0FBQSxHQUFBaGIsSUFBaUUycUgsT0FBQSxTQUFBaHdHLEdBQXNCLFFBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQTJOLEVBQUF5aUMsRUFBQXI5QyxFQUFBMEUsRUFBQXFmLEVBQUE5akIsRUFBQUcsRUFBQXFCLEVBQUFoQixFQUFBcUIsRUFBQWlWLEVBQUFqVyxFQUFBaUIsRUFBQWIsRUFBQXFaLEVBQUEwakcsVUFBQWhqRyxHQUFBMmpDLEVBQUEsRUFBQTlHLEVBQUE1MkMsRUFBQTBDLE9BQUExQyxFQUFBMEMsT0FBQSxJQUFBbTdDLEVBQUEsSUFBQXVyRSxXQUFBeHlFLEdBQTJHOEcsRUFBQTlHLEdBQUksSUFBQXg4QixFQUFBc2pDLEVBQUF2K0MsRUFBQXUrQyxFQUFBM2pDLEVBQUE0MEIsTUFBcUIrTyxFQUFBditDLEdBQUlDLEVBQUEyTSxFQUFBc04sRUFBQWd3RyxTQUFBcnBILEVBQUEwOUMsR0FBQTUrQyxFQUFBNCtDLEVBQUEsRUFBQXZCLEVBQUF1QixFQUFBLEVBQUFsNkMsRUFBQWs2QyxFQUFBM2pDLEVBQUE0MEIsTUFBQTlyQixFQUFBNjZCLEVBQUEzakMsRUFBQTQwQixNQUFBN3ZDLEVBQUFzYixJQUFBdGIsRUFBQTQrQyxHQUFBdkIsR0FBQWg5QyxJQUFBZzlDLEVBQUF1QixHQUFBbDZDLEVBQUEsSUFBQUEsRUFBQSxHQUFBcWYsR0FBQSt6QixJQUFBL3pCLEVBQUE2NkIsR0FBQW45QyxFQUFBOFksRUFBQWd3RyxTQUFBcnBILEVBQUF3RCxHQUFBdEUsRUFBQW1hLEVBQUFnd0csU0FBQXJwSCxFQUFBbEIsR0FBQVMsRUFBQThaLEVBQUFnd0csU0FBQXJwSCxFQUFBNmlCLEdBQUE5akIsRUFBQXNhLEVBQUFnd0csU0FBQXJwSCxFQUFBbThDLEdBQUF2N0MsRUFBQSxJQUFBN0IsR0FBQSxhQUFBQSxHQUFBLGVBQUFBLEdBQUFhLEVBQUEsSUFBQVcsR0FBQSxhQUFBQSxHQUFBLGVBQUFBLEdBQUFNLEVBQUEsSUFBQXRCLEdBQUEsYUFBQUEsR0FBQSxlQUFBQSxJQUFBc1csRUFBQSxJQUFBM1csR0FBQSxhQUFBQSxHQUFBLGVBQUFBLEtBQUF3YSxFQUFBLElBQUF0YSxHQUFBLGFBQUFBLEdBQUEsZUFBQUEsTUFBQTJNLEVBQUE3TSxFQUFBd2EsRUFBQTdELEdBQUFqVixFQUFBOFksSUFBQTNOLEVBQUFoTixFQUFBMmEsRUFBQTlZLEdBQUFoQixFQUFBOFosSUFBQTNOLEVBQUF4TCxFQUFBbVosRUFBQTlaLEdBQUFpQixFQUFBNlksSUFBQTNOLEVBQUF4TSxFQUFBbWEsRUFBQTdZLEdBQUFnOUMsRUFBQUgsS0FBQTN4QyxFQUEyY3NOLEVBQUFpd0csV0FBQXRwSCxFQUFBNjlDLElBQWtCbXNFLE1BQUEsU0FBQWp3RyxHQUFxQixRQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUEyTixFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQUFxZixFQUFBOWpCLEVBQUFHLEVBQUFxQixFQUFBaEIsRUFBQXFCLEVBQUFpVixFQUFBalcsRUFBQWlCLEVBQUFiLEVBQUFxWixFQUFBMGpHLFVBQUFoakcsR0FBQTJqQyxFQUFBLEVBQUE5RyxFQUFBNTJDLEVBQUEwQyxPQUFBMUMsRUFBQTBDLE9BQUEsSUFBQW03QyxFQUFBLElBQUF1ckUsV0FBQXh5RSxHQUEyRzhHLEVBQUE5RyxHQUFJLElBQUF4OEIsRUFBQXNqQyxFQUFBditDLEVBQUF1K0MsRUFBQTNqQyxFQUFBNDBCLE1BQXFCK08sRUFBQXYrQyxHQUFJQyxFQUFBMk0sRUFBQXNOLEVBQUFnd0csU0FBQXJwSCxFQUFBMDlDLEdBQUE1K0MsRUFBQTQrQyxFQUFBLEVBQUF2QixFQUFBdUIsRUFBQSxFQUFBbDZDLEVBQUFrNkMsRUFBQTNqQyxFQUFBNDBCLE1BQUE5ckIsRUFBQTY2QixFQUFBM2pDLEVBQUE0MEIsTUFBQTd2QyxFQUFBc2IsSUFBQXRiLEVBQUE0K0MsR0FBQXZCLEdBQUFoOUMsSUFBQWc5QyxFQUFBdUIsR0FBQWw2QyxFQUFBLElBQUFBLEVBQUEsR0FBQXFmLEdBQUErekIsSUFBQS96QixFQUFBNjZCLEdBQUFuOUMsRUFBQThZLEVBQUFnd0csU0FBQXJwSCxFQUFBd0QsR0FBQXRFLEVBQUFtYSxFQUFBZ3dHLFNBQUFycEgsRUFBQWxCLEdBQUFTLEVBQUE4WixFQUFBZ3dHLFNBQUFycEgsRUFBQTZpQixHQUFBOWpCLEVBQUFzYSxFQUFBZ3dHLFNBQUFycEgsRUFBQW04QyxHQUFBdjdDLEVBQUEsSUFBQTdCLEdBQUEsYUFBQUEsR0FBQSxlQUFBQSxHQUFBYSxFQUFBLElBQUFXLEdBQUEsYUFBQUEsR0FBQSxlQUFBQSxHQUFBTSxFQUFBLElBQUF0QixHQUFBLGFBQUFBLEdBQUEsZUFBQUEsSUFBQXNXLEVBQUEsSUFBQTNXLEdBQUEsYUFBQUEsR0FBQSxlQUFBQSxLQUFBd2EsRUFBQSxJQUFBdGEsR0FBQSxhQUFBQSxHQUFBLGVBQUFBLE1BQUEyTSxFQUFBN00sRUFBQXdhLEVBQUE3RCxHQUFBalYsRUFBQThZLElBQUEzTixFQUFBaE4sRUFBQTJhLEVBQUE5WSxHQUFBaEIsRUFBQThaLElBQUEzTixFQUFBeEwsRUFBQW1aLEVBQUE5WixHQUFBaUIsRUFBQTZZLElBQUEzTixFQUFBeE0sRUFBQW1hLEVBQUE3WSxHQUFBZzlDLEVBQUFILEtBQUEzeEMsRUFBMmNzTixFQUFBaXdHLFdBQUF0cEgsRUFBQTY5QyxJQUErQnEyRCxLQUFBLFNBQUFuNkYsRUFBQUssR0FBcUJyTyxFQUFBZ08sRUFBQUssS0FBT0EsRUFBQXhiLFFBQUF5YSxPQUFnQmk3RCxJQUFBLFNBQUF2NkQsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsZ0JBQUFoTyxLQUE2QjNNLEVBQUFzQixVQUFBdXBILFlBQUEsU0FBQWx3RyxFQUFBSyxHQUFzQyxPQUFBaGIsRUFBQTg3RixvQkFBQSxjQUFBeDJGLFdBQUEsSUFBQXRGLEVBQUFrb0csTUFBQXZ0RixFQUFBSyxJQUF1RWhiLEVBQUFzQixVQUFBd3BILFdBQUEsV0FBbUM5cUgsRUFBQTg3RixvQkFBQSxhQUFBeDJGLFdBQThDLElBQUFxVixFQUFBSyxFQUFBamIsRUFBa1RrYSxFQUFsVHROLEtBQUFqRCxNQUFBN0osS0FBQXlGLFdBQXdULE9BQW5SQSxVQUFBLGFBQUF5bEgsbUJBQUFwd0csRUFBQXJWLFVBQUEsR0FBQXFILEVBQUEvQixTQUFBdEYsVUFBQSxhQUFBdEYsRUFBQWk0RyxTQUFBdDlGLEVBQUFyVixVQUFBLEdBQUF1cUcsSUFBQWxqRyxFQUFBL0IsU0FBQStQLEVBQUEzWSxLQUFBNHRHLGFBQUE1dEcsS0FBQTR0RyxZQUFBQyxJQUFBbGpHLEVBQUFySixRQUFBLElBQUEwWCxFQUFBck8sRUFBQSxJQUFBQSxFQUFBckosUUFBQSxJQUFBdkQsRUFBQTRNLEVBQUEsSUFBQTVNLEtBQUFDLEVBQUFzQixVQUFBMHBILG9CQUFBaHdHLEVBQUFqYixHQUFBLFdBQTZSLFFBQUFrYSxFQUFBLFlBQXNCLE1BQU0scUJBQUFBLEVBQUEsYUFBb0NVLEVBQUFzd0csT0FBQSxTQUFBdHdHLEdBQXFCM2EsRUFBQXNCLFVBQUFpakgsYUFBQTVwRyxFQUFBSyxFQUFBamIsSUFBZ0NrYSxJQUFJamEsRUFBQXNCLFVBQUE0cEgsV0FBQSxTQUFBdndHLEVBQUFLLEVBQUFqYixFQUFBa2EsRUFBQUssR0FBNEN0YSxFQUFBODdGLG9CQUFBLGFBQUF4MkYsV0FBOEMsSUFBQXkzQyxFQUFBaDlDLEdBQUEsRUFBV2c5QyxFQUFBLzhDLEVBQUFzQixVQUFBNnBILFVBQUFwdUUsRUFBQSxNQUFBQSxHQUFBLElBQXVDLElBQUFyOUMsRUFBQXVhLEdBQUEsR0FBWXZhLEVBQUFNLEVBQUFzQixVQUFBNnBILFVBQUF6ckgsRUFBQSxNQUFnQyxJQUFBMEUsRUFBQSxFQUFBcWYsRUFBQXpqQixFQUFBc0IsVUFBQThwSCxXQUFBenJILEVBQUFxQyxLQUFBNHRHLFlBQUFDLElBQUEvdkcsRUFBQXVySCxZQUFBLFdBQWlGNW5HLEVBQUE5SSxFQUFBdlcsRUFBQTRXLEVBQUFyYixHQUFBeUUsS0FBZSxJQUFBMUUsR0FBUWtRLFdBQUEsV0FBc0IsR0FBQTRtRyxjQUFBMTJHLEdBQUF3YSxJQUFBM04sUUFBMkIsUUFBQWdPLEVBQUEsRUFBaUJBLEVBQUFoTyxFQUFBckosT0FBV3FYLElBQUEsQ0FBSyxJQUFBSyxFQUFBck8sRUFBQWdPLEdBQVczYSxFQUFBc0IsVUFBQWlqSCxhQUFBdnBHLEVBQUFxakcsVUFBQXJqRyxFQUFBc3dHLFNBQUF0d0csRUFBQXV3RyxLQUF1RDUrRyxNQUFLb3dDLEVBQUEsTUFBUS84QyxFQUFBc0IsVUFBQThwSCxXQUFBLFNBQUF6d0csRUFBQUssRUFBQWpiLEdBQXdDLElBQUFDLEVBQW9DaWEsRUFBTSxHQUFwQ2phLEVBQUFnQyxVQUFBNHRHLFlBQUFDLElBQUE5dkcsRUFBb0NpYixFQUFBLE9BQUFBLEVBQUFqSCxlQUE2QixVQUFBa0csRUFBQSxZQUF3QixNQUFNLHFCQUFBQSxFQUFBLGFBQW9DLE1BQU0sUUFBQUEsRUFBQSxpQkFBc0JlLEVBQUEsTUFBQWYsRUFBQSxZQUEyQixJQUFBSyxFQUFBdGEsRUFBQXdySCxVQUFBdnhHLEdBQXFCSyxJQUFBNmQsUUFBQWxlLEVBQUEsc0JBQW9DLElBQUE4aUMsS0FBU0EsRUFBQXNoRSxVQUFBL2pHLEVBQUF5aUMsRUFBQXV1RSxTQUFBM3dHLEVBQUFvaUMsRUFBQXd1RSxJQUFBdndHLEVBQUFyTyxFQUFBL0gsS0FBQW00QyxJQUE2Qy9oQyxFQUFBeGIsUUFBQVEsSUFBZTQ3RixlQUFBLEtBQWtCem1CLElBQUEsU0FBQXg2RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBYSxTQUFBQyxFQUFBMmEsRUFBQUssR0FBZ0IsT0FBQUwsRUFBQSxHQUFBQSxFQUFBSyxFQUFBTCxFQUFBSyxFQUFvQixJQUFBck8sRUFBQWdPLEVBQUEsZ0JBQUFWLEVBQUFVLEVBQUEsYUFBQUwsRUFBQUssRUFBQSxtQkFBQW9pQyxFQUFBcGlDLEVBQUEscUJBQXlGQSxFQUFBLHlCQUFBaE8sRUFBQXJMLFVBQUErMUcsVUFBQSxTQUFBMThGLEVBQUFLLEVBQUFqYixHQUFpRTRNLEVBQUFtdkYsb0JBQUEsWUFBQXgyRixXQUE2QyxJQUFBdEYsRUFBQSxJQUFBa29HLE1BQUFqdUYsRUFBQSxJQUFBdE4sRUFBQXU3RixNQUFBLElBQUFsbUcsTUFBQXNZLEVBQUF0WSxLQUErQyxPQUFBaEMsRUFBQXEyQixPQUFBLFdBQTJCcGMsRUFBQXMxQixNQUFBdDFCLEVBQUE0L0YsT0FBQXRxRSxNQUFBdnZDLEVBQUF1dkMsTUFBQXQxQixFQUFBOFcsT0FBQTlXLEVBQUE0L0YsT0FBQTlvRixPQUFBL3dCLEVBQUErd0IsT0FBQTlXLEVBQUF5aUcsZUFBQWdCLFVBQUExOUcsRUFBQSxLQUFBaWEsRUFBQW0zRCxVQUFBLHFCQUFBcDJELEtBQUFmLEdBQUFLLEVBQUEwN0YscUJBQWtLaDJHLEVBQUF5MkIsUUFBQSxTQUFBOWIsR0FBdUJoTyxFQUFBZ21HLHVCQUFBLEVBQUEzeUcsRUFBQTIxQixLQUFBLG1CQUFBNTFCLEtBQUE0YSxJQUE2RCxJQUFBQSxFQUFBeFgsUUFBQSxpQkFBQW5ELEVBQUF5ckgsWUFBQSxhQUFBenJILEVBQUEyMUIsSUFBQWhiLEVBQUFWLEdBQXFFdE4sRUFBQXJMLFVBQUE2bUcsTUFBQSxTQUFBeHRGLEVBQUFLLEVBQUFqYixFQUFBa2EsRUFBQThpQyxFQUFBcjlDLEVBQUEwRSxFQUFBcWYsRUFBQTlqQixHQUErQ2dOLEVBQUFtdkYsb0JBQUEsUUFBQXgyRixXQUF5QyxJQUFBeEYsRUFBQTZhLEVBQUE0MEIsTUFBQXB1QyxFQUFBd1osRUFBQW9XLE9BQXlCcFcsRUFBQWsxRixLQUFBbDFGLEVBQUFrMUYsSUFBQTZiLGFBQUEvd0csRUFBQWsvRixTQUFBLzVHLEVBQUE2YSxFQUFBazFGLElBQUE2YixXQUFBdnFILEVBQUF3WixFQUFBazFGLElBQUE4YixhQUE2RSxJQUFBeHJILEVBQUE2YSxFQUFBeFosRUFBQXpCLEVBQUEwVyxFQUFBd0QsR0FBQW5hLEVBQUFVLEVBQUF1OEMsR0FBQTU3QyxFQUFBTSxFQUFBL0IsR0FBQSxFQUFBa0IsRUFBQXdELEdBQUEsRUFBQWs2QyxFQUFBNzZCLEdBQUEzakIsRUFBQTAzQyxFQUFBNzNDLEdBQUF3QixFQUFzRG05QyxFQUFBdCtDLEVBQUFzK0MsRUFBQXgrQyxHQUFBMDNDLEVBQUF4M0MsRUFBQXczQyxFQUFBcjJDLEdBQWtCLElBQUFzOUMsRUFBQSxFQUFROWpDLEVBQUFrMUYsTUFBQWwxRixFQUFBay9GLFFBQUFsL0YsRUFBQWsxRixJQUFBQyxNQUFBdmdFLFFBQUFrUCxFQUFBOWpDLEVBQUFrMUYsSUFBQTZiLGFBQUF6eEcsRUFBQVUsRUFBQWsxRixJQUFBNmIsV0FBQS93RyxFQUFBazFGLElBQUF0Z0UsTUFBQWtQLEdBQUF4b0MsU0FBQTBFLEVBQUFrMUYsSUFBQUMsTUFBQXZnRSxNQUFBLEtBQUE5dEMsR0FBQWc5QyxFQUFBNzlDLEdBQUE2OUMsRUFBQWpILEdBQUFpSCxFQUFBSCxHQUFBRyxFQUFpSixJQUFBN2lCLEVBQUF0aEIsRUFBQTA0RixXQUFBN3lHLEVBQUFxQixFQUFBaVYsRUFBQWpXLEVBQUF3QixLQUFBb21HLFVBQUE4UyxZQUFzRGw1RyxLQUFBb21HLFVBQUFELE1BQUF4dEYsRUFBQWxaLEVBQUFiLEVBQUEwOUMsRUFBQTlHLEVBQUE1YixNQUFBcUUsRUFBQXJFLEVBQUE2aUIsRUFBQTdpQixFQUFBbWhCLElBQWdEcHdDLEVBQUFyTCxVQUFBc3FILEtBQUEsV0FBNkJqL0csRUFBQW12RixvQkFBQSxPQUFBeDJGLFdBQXdDLElBQUFxVixFQUFBM1ksS0FBQSs1RixNQUFBenlGLE1BQUF0SCxLQUFBc0QsV0FBdUN0RCxLQUFBb21HLFVBQUErUyxNQUFBeGdHLEVBQUFtaUYsUUFBOEJud0YsRUFBQXJMLFVBQUF1cUgsT0FBQSxXQUErQjdwSCxLQUFBb21HLFVBQUErUyxNQUFBLE1BQTBCeHVHLEVBQUFyTCxVQUFBbThHLHNCQUFBLFNBQUE5aUcsR0FBK0MsSUFBQUEsRUFBQWsvRixPQUFBLE9BQUFsL0YsRUFBc0IsSUFBQUssRUFBQWYsRUFBQTBqRyxVQUFBaGpHLEVBQUFrL0YsUUFBQTk1RyxFQUFBaTVCLFNBQUFDLGNBQUEsVUFBK0RsNUIsRUFBQXd2QyxNQUFBNTBCLEVBQUFrL0YsT0FBQXRxRSxNQUFBeHZDLEVBQUFneEIsT0FBQXBXLEVBQUFrL0YsT0FBQTlvRixPQUFnRCxRQUFBL3dCLEVBQUFELEVBQUF3SSxXQUFBLE1BQUFvRSxFQUFBM00sRUFBQTQ5RyxnQkFBQWpqRyxFQUFBay9GLE9BQUF0cUUsTUFBQTUwQixFQUFBay9GLE9BQUE5b0YsUUFBQXpXLEVBQUEzTixFQUFBb3hDLEtBQUFoQixFQUFBLEVBQThGQSxFQUFBL2hDLEVBQUExWCxPQUFXeTVDLEdBQUEsR0FBTSxJQUFBcjlDLEVBQUFzYixFQUFBK2hDLEdBQUEzNEMsRUFBQTRXLEVBQUEraEMsRUFBQSxHQUFBdDVCLEVBQUF6SSxFQUFBK2hDLEVBQUEsR0FBQXA5QyxFQUFBcWIsRUFBQStoQyxFQUFBLEdBQXNDemlDLEVBQUF5aUMsR0FBQXI5QyxFQUFBc0MsS0FBQW9tRyxVQUFBK1MsTUFBQSxPQUFBN2dHLEVBQUF5aUMsRUFBQSxHQUFBMzRDLEVBQUFwQyxLQUFBb21HLFVBQUErUyxNQUFBLE9BQUE3Z0csRUFBQXlpQyxFQUFBLEdBQUF0NUIsRUFBQXpoQixLQUFBb21HLFVBQUErUyxNQUFBLE9BQUE3Z0csRUFBQXlpQyxFQUFBLEdBQUFwOUMsRUFBQXFDLEtBQUFvbUcsVUFBQStTLE1BQUEsT0FBa0osT0FBQW43RyxFQUFBNjlHLGFBQUFseEcsRUFBQSxLQUFBNU0sR0FBK0I0TSxFQUFBckwsVUFBQXdxSCxVQUFBLFNBQUFueEcsR0FBbUNoTyxFQUFBbXZGLG9CQUFBLFlBQUF4MkYsV0FBQXFWLElBQUFvaUMsRUFBQTBzRCxRQUFBOXVGLElBQUFvaUMsRUFBQTJzRCxTQUFBL3VGLElBQUFvaUMsRUFBQStzRCxTQUFBOW5HLEtBQUFvbUcsVUFBQThTLFdBQUF2Z0csSUFBc0hLLEVBQUF4YixRQUFBbU4sSUFBZSt3RixvQkFBQSxHQUFBQyx3QkFBQSxHQUFBb3VCLGtCQUFBLEdBQUFud0IsZUFBQSxHQUFBb3dCLFlBQUEsS0FBd0c1MkMsSUFBQSxTQUFBejZELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUFBaE8sRUFBQWdPLEVBQUEsYUFBeUMzYSxFQUFBa29HLE1BQUEsU0FBQXZ0RixFQUFBSyxHQUFzQmhaLEtBQUF1dEMsTUFBQTUwQixFQUFBM1ksS0FBQSt1QixPQUFBL1YsRUFBQWhaLEtBQUE2M0csT0FBQTdnRixTQUFBQyxjQUFBLFVBQUFqM0IsS0FBQTYzRyxPQUFBdHFFLE1BQUF2dEMsS0FBQXV0QyxNQUFBdnRDLEtBQUE2M0csT0FBQTlvRixPQUFBL3VCLEtBQUErdUIsT0FBQS91QixLQUFBMDZHLGVBQUExNkcsS0FBQTYzRyxPQUFBdHhHLFdBQUEsTUFBQXZHLEtBQUErdkcsY0FBQSxFQUFBL3ZHLEtBQUFpcUgsV0FBQSxFQUFBanFILEtBQUFnd0csY0FBQSxFQUFBaHdHLEtBQUFtOEcsV0FBZ1FuK0csRUFBQWtvRyxNQUFBNW1HLFVBQUFnbkcsYUFBQSxTQUFBM3RGLEVBQUFLLEdBQThDaFosS0FBQTJZLEdBQUFLLEVBQUFoWixLQUFBa3FILGFBQUEsSUFBK0Jsc0gsRUFBQWtvRyxNQUFBNW1HLFVBQUFrOEcsV0FBQSxXQUF5Q3g5RyxFQUFBKzVHLFdBQUF6NEcsVUFBQWs4RyxXQUFBMzlHLEtBQUFtQyxXQUFBa3FILGFBQUEsSUFBa0Vsc0gsRUFBQWtvRyxNQUFBNW1HLFVBQUFnOUcsYUFBQSxTQUFBM2pHLEVBQUFLLEVBQUFqYixFQUFBNE0sR0FBa0QzTSxFQUFBKzVHLFdBQUF6NEcsVUFBQWc5RyxhQUFBeitHLEtBQUFtQyxLQUFBMlksRUFBQUssRUFBQWpiLEVBQUE0TSxHQUFBM0ssS0FBQWtxSCxhQUFBLElBQTRFbHNILEVBQUFrb0csTUFBQTVtRyxVQUFBZixJQUFBLFNBQUFvYSxFQUFBSyxFQUFBamIsRUFBQTRNLEdBQXlDLE9BQUEzTSxFQUFBKzVHLFdBQUF6NEcsVUFBQWYsSUFBQVYsS0FBQW1DLEtBQUEyWSxFQUFBSyxFQUFBamIsRUFBQTRNLElBQXFEM00sRUFBQWtvRyxNQUFBNW1HLFVBQUFvQixJQUFBLFNBQUFpWSxFQUFBSyxFQUFBamIsR0FBdUNDLEVBQUErNUcsV0FBQXo0RyxVQUFBb0IsSUFBQTdDLEtBQUFtQyxLQUFBMlksRUFBQUssRUFBQWpiLEdBQUFpQyxLQUFBa3FILGFBQUEsSUFBaUVsc0gsRUFBQWtvRyxNQUFBNW1HLFVBQUF1ekcsT0FBQSxTQUFBbDZGLEVBQUFLLEdBQXdDLElBQUFMLEdBQUEsSUFBQUssR0FBQUwsRUFBQTNZLEtBQUE2M0csT0FBQXRxRSxNQUFBdjBCLEVBQUFoWixLQUFBNjNHLE9BQUE5b0YsUUFBQSxJQUFBcFcsSUFBQTNZLEtBQUE2M0csT0FBQXRxRSxNQUFBdjBCLEVBQUFoWixLQUFBNjNHLE9BQUE5b0YsT0FBQSxJQUFBL1YsTUFBQWhaLEtBQUE2M0csT0FBQTlvRixPQUFBcFcsRUFBQTNZLEtBQUE2M0csT0FBQXRxRSxPQUFBNTBCLEVBQUEvVCxLQUFBMEUsTUFBQXFQLEdBQUFLLEVBQUFwVSxLQUFBMEUsTUFBQTBQLEdBQXlMLElBQUFqYixFQUFBaTVCLFNBQUFDLGNBQUEsVUFBdUNsNUIsRUFBQXd2QyxNQUFBNTBCLEVBQUE1YSxFQUFBZ3hCLE9BQUEvVixFQUFBamIsRUFBQXdJLFdBQUEsTUFBQW0xRyxVQUFBMTdHLEtBQUE2M0csT0FBQSxJQUFBNzNHLEtBQUE2M0csT0FBQXRxRSxNQUFBdnRDLEtBQUE2M0csT0FBQTlvRixPQUFBLElBQUFoeEIsRUFBQXd2QyxNQUFBeHZDLEVBQUFneEIsUUFBQS91QixLQUFBNjNHLE9BQUF0cUUsTUFBQXZ0QyxLQUFBdXRDLE1BQUE1MEIsRUFBQTNZLEtBQUE2M0csT0FBQTlvRixPQUFBL3VCLEtBQUErdUIsT0FBQS9WLEVBQUFoWixLQUFBMDZHLGVBQUFnQixVQUFBMzlHLEVBQUEsSUFBQTRhLEVBQUFLLEVBQUEsSUFBQUwsRUFBQUssR0FBQWhaLEtBQUFtOEcsT0FBQTc2RyxPQUFBLEdBQUF0QixLQUFBdzdHLGFBQUF4N0csS0FBQWtxSCxhQUFBLEdBQUFscUgsS0FBQWd3RyxjQUFBLEdBQWdVaHlHLEVBQUFrb0csTUFBQTVtRyxVQUFBMGhDLEtBQUEsV0FBbUMsSUFBQXJvQixFQUFBSyxFQUFBamIsRUFBQTRNLEVBQUFzTixFQUFBSyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQXNCLE9BQUFrQixVQUFBaEMsT0FBQXFYLEVBQUFyVixVQUFBLEdBQUEwVixFQUFBMVYsVUFBQSxHQUFBdkYsRUFBQXVGLFVBQUEsR0FBQXFILEVBQUFySCxVQUFBLEdBQUEyVSxFQUFBM1UsVUFBQSxHQUFBZ1YsRUFBQWhWLFVBQUEsR0FBQXkzQyxFQUFBejNDLFVBQUEsR0FBQTVGLEVBQUE0RixVQUFBLEdBQUFsQixFQUFBa0IsVUFBQSxPQUErSixDQUFLLE9BQUFBLFVBQUFoQyxPQUFBLFVBQUFyQixNQUFBLDJCQUFtRTBZLEVBQUEzWSxLQUFBZ1osRUFBQTFWLFVBQUEsR0FBQXZGLEVBQUF1RixVQUFBLEdBQUFxSCxFQUFBckgsVUFBQSxHQUFBMlUsRUFBQTNVLFVBQUEsR0FBQWdWLEVBQUFoVixVQUFBLEdBQUF5M0MsRUFBQXozQyxVQUFBLEdBQUE1RixFQUFBNEYsVUFBQSxHQUFBbEIsRUFBQWtCLFVBQUEsR0FBK0h0RixFQUFBKzVHLFdBQUFrRSxZQUFBajhHLEtBQUEyWSxFQUFBSyxFQUFBamIsRUFBQTRNLEVBQUFzTixFQUFBSyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEdBQUFwQyxLQUFBZ3dHLGNBQUEsR0FBc0VoeUcsRUFBQWtvRyxNQUFBNW1HLFVBQUE2cUgsS0FBQSxTQUFBeHhHLFFBQW9DLElBQUFBLE1BQUEzWSxNQUFxQixJQUFBZ1osRUFBQWhaLEtBQUEwNkcsZUFBQXFCLHlCQUFBaCtHLEVBQUEsRUFBdUQ0YSxhQUFBM2EsRUFBQW82RyxXQUFBcjZHLEVBQUE0YSxFQUFBdTlGLE9BQUFuRyxlQUFvRCxJQUFBcGxHLEdBQUFnTyxFQUFBLElBQUE1YSxFQUFBNGEsRUFBQTQwQixNQUFBeHZDLEVBQUE0YSxFQUFBb1csT0FBQSxJQUFBL3VCLEtBQUF1dEMsTUFBQXZ0QyxLQUFBK3VCLFFBQThEL3VCLEtBQUEwNkcsZUFBQXFCLHlCQUFBLGlCQUFBLzlHLEVBQUFrb0csTUFBQTVtRyxVQUFBMGhDLEtBQUExNUIsTUFBQXRILEtBQUEySyxHQUFBM0ssS0FBQTA2RyxlQUFBcUIseUJBQUEvaUcsRUFBQWhaLEtBQUFrcUgsYUFBQSxJQUF1S2xzSCxFQUFBa29HLE1BQUE1bUcsVUFBQTJtQixPQUFBLFNBQUF0TixFQUFBSyxHQUF3Q3JPLEVBQUFyRCxNQUFBdEgsS0FBQTYzRyxPQUFBbHRHLEVBQUFnTyxFQUFBNUcsZUFBQWlILEdBQUFoWixLQUFBa3FILGFBQUEsSUFBK0Rsc0gsRUFBQWtvRyxNQUFBNW1HLFVBQUEwOEcsTUFBQSxXQUFvQ2grRyxFQUFBc0IsVUFBQTA4RyxNQUFBMTBHLE1BQUF0SCxLQUFBc0QsV0FBQXRELEtBQUFrcUgsYUFBQSxJQUE2RGxzSCxFQUFBa29HLE1BQUE1bUcsVUFBQTRxSCxZQUFBLFNBQUF2eEcsR0FBMkMzWSxLQUFBaXFILFVBQUF0eEcsR0FBaUIzYSxFQUFBa29HLE1BQUE1bUcsVUFBQThxSCxXQUFBLFdBQXlDLE9BQUFwcUgsS0FBQWlxSCxXQUFzQmpzSCxFQUFBa29HLE1BQUE1bUcsVUFBQTI3RyxLQUFBLFNBQUF0aUcsRUFBQUssR0FBc0NoYixFQUFBc0IsVUFBQXdwSCxXQUFBOW9ILEtBQUE2M0csT0FBQWwvRixFQUFBSyxJQUF3Q0EsRUFBQXhiLFFBQUFRLEVBQUFrb0csUUFBcUJ0TSxlQUFBLEdBQUFvd0IsWUFBQSxLQUFpQzMyQyxJQUFBLFNBQUExNkQsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsZ0JBQUFoTyxFQUFBZ08sRUFBQSxhQUF5Q0EsRUFBQSxxQkFBQTNhLEVBQUFzQixVQUFBNjhHLFVBQUFuK0csRUFBQXNCLFVBQUEwOEcsTUFBQSxXQUEwRWgrRyxFQUFBODdGLG9CQUFBLFFBQUF4MkYsV0FBQXRELEtBQUFvbUcsVUFBQXBtRyxLQUFBb21HLFVBQUE0VixNQUFBMTBHLE1BQUF0SCxLQUFBb21HLFVBQUE5aUcsV0FBQXRGLEVBQUErNUcsV0FBQXo0RyxVQUFBMDhHLE1BQUExMEcsTUFBQXRILEtBQUFzRCxZQUFnS3RGLEVBQUFzQixVQUFBMGhDLEtBQUEsV0FBNkJoakMsRUFBQTg3RixvQkFBQSxPQUFBeDJGLFdBQUF0RixFQUFBKzVHLFdBQUF6NEcsVUFBQTBoQyxLQUFBMTVCLE1BQUF0SCxLQUFBb21HLFVBQUE5aUcsWUFBb0d0RixFQUFBc0IsVUFBQTJtQixPQUFBLFNBQUF0TixFQUFBSyxHQUFrQ2hiLEVBQUE4N0Ysb0JBQUEsU0FBQXgyRixnQkFBQSxJQUFBdEQsS0FBQTYzRyxPQUFBbHRHLEVBQUFyRCxNQUFBdEgsS0FBQTYzRyxPQUFBbHRHLEVBQUFnTyxFQUFBNUcsZUFBQWlILEdBQUFyTyxFQUFBckQsTUFBQXRILEtBQUE2dEcsSUFBQWxqRyxFQUFBZ08sRUFBQTVHLGVBQUFpSCxJQUFnSmhiLEVBQUFzQixVQUFBZixJQUFBLFNBQUFvYSxFQUFBSyxFQUFBamIsRUFBQUMsR0FBbUMsT0FBQWdDLEtBQUFvbUcsVUFBQTduRyxJQUFBb2EsRUFBQUssRUFBQWpiLEVBQUFDLElBQW1DQSxFQUFBc0IsVUFBQWs4RyxXQUFBLFdBQW1DeDlHLEVBQUE4N0Ysb0JBQUEsYUFBQXgyRixXQUFBdEQsS0FBQW9tRyxVQUFBb1YsY0FBMEV4OUcsRUFBQXNCLFVBQUFvQixJQUFBLFNBQUFpWSxFQUFBSyxFQUFBamIsR0FBaUNpQyxLQUFBb21HLFVBQUExbEcsSUFBQWlZLEVBQUFLLEVBQUFqYixJQUEwQkMsRUFBQXNCLFVBQUFnOUcsYUFBQSxTQUFBM2pHLEVBQUFLLEVBQUFqYixFQUFBNE0sR0FBNEMzTSxFQUFBODdGLG9CQUFBLGVBQUF4MkYsV0FBQSxJQUFBdEQsS0FBQW04RyxPQUFBNzZHLFFBQUF0QixLQUFBb21HLFVBQUFrVyxhQUFBM2pHLEVBQUFLLEVBQUFqYixFQUFBNE0sSUFBNkdxTyxFQUFBeGIsUUFBQVEsSUFBZXFzSCxvQkFBQSxHQUFBendCLGVBQUEsR0FBQW93QixZQUFBLEtBQXdEMTJDLElBQUEsU0FBQTM2RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBYSxTQUFBQyxFQUFBMmEsRUFBQUssR0FBZ0IsSUFBQWpiLEtBQVMsYUFBQWliLFNBQUEsUUFBQWhiLEVBQUEsRUFBa0NBLEVBQUEyYSxFQUFBclgsT0FBV3RELElBQUFnYixFQUFBaGIsRUFBQWtDLFlBQUFsQyxFQUFzQixRQUFBMk0sRUFBQSxFQUFZQSxFQUFBcU8sRUFBQTFYLE9BQVdxSixJQUFBLENBQUssSUFBQXNOLEVBQUFlLEVBQUFyTyxHQUFBMk4sRUFBQUssRUFBQWhPLEdBQWtCNU0sRUFBQWthLEdBQUFLLEVBQU8sT0FBQXZhLEVBQW1WLFNBQUFrYSxFQUFBVSxHQUFjLE9BQUFBLEVBQUF3ZCxRQUFBLGNBQTRCQSxRQUFBLGFBQXFCQSxRQUFBLGFBQXFCQSxRQUFBLGVBQXVCQSxRQUFBLGVBQTBCLFNBQUE3ZCxFQUFBSyxFQUFBSyxHQUFnQkEsSUFBQSxJQUFBQSxHQUFBLFNBQUFBLE1BQUEsSUFBQUwsTUFBQSxZQUFnRCxJQUFBNWEsRUFBQSxHQUFTLE9BQUE0YSxLQUFBeFgsUUFBQSxVQUFBcEQsRUFBQTRhLEVBQUF0WCxNQUFBLEtBQUF5dkQsT0FBQTkzQyxHQUFBamIsSUFBQWliLElBQUFMLElBQUEsS0FBQTVhLEVBQUFpYixLQUFBTCxFQUFBNWEsR0FBc0ksSUFBQUwsRUFBQWliLEVBQUEsZ0JBQXdCQSxFQUFBLGdCQUFBQSxFQUFBLGVBQUF5ckMsV0FBOEMsSUFBQWhpRCxFQUFBdVcsRUFBQSxlQUF1QkEsRUFBQSx5QkFBQWpiLEVBQUE0QixVQUFBODFHLFNBQUEsV0FBMkQxM0csRUFBQW84RixvQkFBQSxXQUFBeDJGLFdBQTRDLFFBQUFxVixFQUFBSyxFQUFBamIsRUFBQUMsRUFBQXNGLFVBQUEsR0FBQXFILEtBQWlDc04sRUFBQSxPQUFBSyxFQUFBLEVBQWNBLEVBQUFoVixVQUFBaEMsT0FBbUJnWCxJQUFBLENBQUssSUFBQXlpQyxFQUFBejNDLFVBQUFnVixHQUFtQixpQkFBQXlpQyxFQUFBLFVBQUFBLEdBQUEsU0FBQUEsSUFBQTlpQyxFQUFBOGlDLEdBQUEsbUJBQUFBLEVBQUFwaUMsRUFBQUssRUFBQStoQyxFQUFBcGlDLEVBQUFvaUMsRUFBQSxpQkFBQUEsS0FBQXg3QyxlQUFBLG1CQUFBMFksRUFBQSxRQUFBbGEsRUFBQWc5QyxHQUF3SixJQUFBMzRDLEVBQUFwQyxLQUFXLE9BQUFBLEtBQUFzcUgsT0FBQXRzSCxFQUFBLE1BQUFELEVBQUFrYSxFQUFBLFNBQUFlLEdBQTJDLFFBQUFqYixLQUFBaWIsRUFBQXJPLEVBQUE1TSxHQUFBaWIsRUFBQWpiLFFBQXlCLElBQUE0YSxLQUFBSyxHQUFBNVcsRUFBQTR4RyxxQkFBdUMsU0FBQXI3RixHQUFhLEdBQUFqYixFQUFBaXpHLHVCQUFBLEVBQUEzeUcsSUFBQWdiLEVBQUEsTUFBQUwsRUFBNENLLEVBQUFMLEtBQUtoTyxHQUFJak4sRUFBQTRCLFVBQUFnMkcsWUFBQSxXQUFvQzUzRyxFQUFBbzhGLG9CQUFBLGNBQUF4MkYsV0FBK0MsUUFBQXFWLEVBQUFLLEVBQUFqYixLQUFBQyxFQUFBLEVBQXFCQSxFQUFBc0YsVUFBQWhDLE9BQW1CdEQsSUFBQSxDQUFLLElBQUEyTSxFQUFBckgsVUFBQXRGLEdBQW1CLG1CQUFBMk0sU0FBQSxJQUFBZ08sSUFBQWhPLE9BQUEsSUFBQXFPLE1BQUFyTyxJQUF5RCxJQUFBc04sRUFBQWpZLEtBQVcsT0FBQXRDLEVBQUE0QixVQUFBZ3JILE9BQUF6c0gsS0FBQW1DLEtBQUFzRCxVQUFBLHlCQUFBMFYsR0FBMEUsSUFBQWhiLEVBQUFnYixFQUFBbWQsUUFBQSxjQUFBQSxRQUFBLFlBQUE5MEIsTUFBQSxNQUE4RHlDLE1BQUF4RSxVQUFBc0QsS0FBQTBFLE1BQUF2SixFQUFBQyxRQUFBLElBQUEyYSxLQUFBNWEsR0FBQWthLEVBQUErN0YscUJBQXVFLFNBQUFyN0YsR0FBYSxHQUFBamIsRUFBQWl6Ryx1QkFBQSxFQUFBcnRHLFVBQUEsS0FBQTBWLEVBQUEsTUFBQUwsRUFBdURLLEVBQUFMLEtBQUs1YSxHQUFJTCxFQUFBNEIsVUFBQW0yRyxVQUFBLFNBQUE5OEYsR0FBbUMsSUFBQUssRUFBQWpiLEVBQUE0TSxLQUFBc04sR0FBQSxFQUFBSyxFQUFBSyxFQUFBK3FDLFVBQUEvcUMsRUFBQTR4RyxZQUFBLE9BQUE1eEcsRUFBQXJYLFFBQUF5NUMsRUFBQSxJQUFBMzRDLEdBQUEsRUFBMEUsUUFBQWtXLElBQUF5aUMsRUFBQSxNQUFvQixRQUFBdDVCLEVBQUEsRUFBWUEsRUFBQW5lLFVBQUFoQyxPQUFtQm1nQixJQUFBLHNCQUFBbmUsVUFBQW1lLFFBQUEsSUFBQXpJLElBQUExVixVQUFBbWUsUUFBQSxJQUFBMWpCLE1BQUF1RixVQUFBbWUsU0FBOEYsb0JBQUFuZSxVQUFBbWUsR0FBQSxHQUFBOVcsRUFBQS9ILEtBQUFVLFVBQUFtZSxJQUFBLFdBQUFuZSxVQUFBbWUsS0FBQXhKLEdBQUEsV0FBQTNVLFVBQUFtZSxHQUFBLENBQW9ILEdBQUFyZixFQUFBLFVBQUFuQyxNQUFBLHdDQUE2RDg2QyxFQUFBLElBQUEzNEMsR0FBQSxPQUFXLFdBQUFrQixVQUFBbWUsR0FBQSxDQUE4QixHQUFBcmYsRUFBQSxVQUFBbkMsTUFBQSx3Q0FBNkQ4NkMsRUFBQSxLQUFBMzRDLEdBQUEsRUFBWSxJQUFBekUsRUFBQSxJQUFBRCxFQUFBODBELE1BQUExMEQsRUFBQWtDLEtBQXlCLE9BQUFBLEtBQUFzcUgsT0FBQTN4RyxFQUFBLHVCQUFBQSxHQUErQyxRQUFBNWEsRUFBQTRNLEtBQWNuTCxFQUFBLElBQUFDLEtBQUFiLEVBQUEsRUFBQTA5QyxFQUFBLEtBQUE5RyxFQUFBLFdBQWtFN3FDLEVBQUE2L0csYUFBbEUsRUFBa0U3L0csRUFBQTgvRyxNQUFBLElBQTRCaHVFLEVBQUEsV0FBY0gsRUFBQTE1QyxLQUFBK0gsRUFBQTgvRyxPQUFBajFFLEtBQXdEdlgsRUFBQSxXQUFjdHpCLEVBQUE2L0csYUFBbEwsRUFBa0wvcUgsRUFBQW1ELEtBQUEwNUMsS0FBQSxRQUFvQyxDQUFFLFVBQUF2K0MsRUFBQTRhLEVBQUEvWixNQUFBLENBQXFCLEdBQUErTCxFQUFBKy9HLFFBQUEsVUFBQXpxSCxNQUFBLDJCQUF3RCxHQUFBcThDLEVBQUEsQ0FBTUcsSUFBQXhlLElBQVEsT0FBTyxVQUFBcWUsSUFBNUszeEMsRUFBQSsvRyxTQUFBLEVBQUFwdUUsS0FBQTlHLEtBQTlJLElBQTBUN3FDLEVBQUE2L0csYUFBQSxDQUFxQyxHQUFBenNILElBQUF5QixFQUFBLENBQVVtTCxFQUFBKy9HLFNBQUEsRUFBQS8vRyxFQUFBNi9HLGFBQXpXLEVBQXVZLFNBQVM3L0csRUFBQTYvRyxhQUFoWixFQUFpYSxHQUFqYSxJQUFpYTcvRyxFQUFBNi9HLGNBQUE3L0csRUFBQSsvRyxRQUFBLEdBQUEzc0gsSUFBQXlCLEVBQUFtWixFQUFBL1osS0FBQVksR0FBQW1MLEVBQUE4L0csT0FBQWpySCxFQUFBWixNQUFBK0wsRUFBQSsvRyxTQUFBLEVBQUEvL0csRUFBQTYvRyxhQUFqYSxPQUFxZ0IsQ0FBSyxHQUExZ0IsT0FBMGdCenNILEVBQUEsU0FBa0I0TSxFQUFBOC9HLE9BQUExc0gsTUFBNWhCLE9BQXVpQkEsR0FBdmlCLE9BQXVpQjRhLEVBQUEvWixRQUFBNjlDLElBQUF4ZSxLQUF2aUIsT0FBdWlCbGdDLEdBQUEwK0MsSUFBQXhlLEtBQUFsZ0MsSUFBQWc5QyxFQUFBMEIsSUFBdmlCLElBQXVpQjl4QyxFQUFBNi9HLGVBQUE3L0csRUFBQTgvRyxPQUFBMXNILEdBQThGLEdBQUFrYSxFQUFBdGEsRUFBQWd0SCxRQUFBbHJILEVBQUFtSixhQUF5QixJQUFBNlksRUFBQSxFQUFhQSxFQUFBaGlCLEVBQUEsR0FBQTZCLE9BQWNtZ0IsSUFBQTlqQixFQUFBZ3RILFFBQUFscEcsR0FBQSxPQUF3QixJQUFBeWMsRUFBTSxJQUFBemMsRUFBQSxFQUFRQSxFQUFBaGlCLEVBQUE2QixPQUFXbWdCLEtBQUEsSUFBQWhpQixFQUFBZ2lCLEdBQUFuZ0IsUUFBQSxjQUFBN0IsRUFBQWdpQixHQUFBLFNBQUFoaUIsRUFBQWdpQixHQUFBLE9BQUF5YyxFQUFBLElBQUF4Z0MsRUFBQWt0SCxVQUFBeDlHLElBQUEzTixFQUFBZ2lCLEdBQUF5YyxFQUFBMnNGLElBQUE3c0gsRUFBQXlCLEVBQUFnaUIsR0FBQTlqQixFQUFBZ3RILFNBQUFodEgsRUFBQW10SCxPQUFBNXNGLElBQThILG1CQUFBbGxCLEtBQUFyYixHQUFBRyxFQUFBazJHLHFCQUFpRCxTQUFBaDdGLEdBQWEsR0FBQXRiLEVBQUFpekcsdUJBQUEsRUFBQWg0RixJQUFBNWEsRUFBQSxNQUFBaWIsRUFBNENqYixFQUFBaWIsS0FBS3JiLEdBQUlELEVBQUE0QixVQUFBaTJHLFFBQUEsV0FBZ0MsUUFBQTU4RixFQUFBSyxFQUFBamIsS0FBZ0JDLEVBQUEsRUFBS0EsRUFBQXNGLFVBQUFoQyxPQUFtQnRELElBQUEsQ0FBSyxJQUFBMk0sRUFBQXJILFVBQUF0RixHQUFtQixtQkFBQTJNLFNBQUEsSUFBQWdPLElBQUFoTyxPQUFBLElBQUFxTyxNQUFBck8sSUFBeUQsSUFBQXNOLEVBQUFqWSxLQUFXLE9BQUFBLEtBQUFzcUgsT0FBQWhuSCxVQUFBLHdCQUFBMFYsR0FBd0QsUUFBQWhiLEtBQUFnYixFQUFBamIsRUFBQUMsR0FBQWdiLEVBQUFoYixRQUF5QixJQUFBMmEsS0FBQTVhLEdBQUFrYSxFQUFBKzdGLHFCQUF1QyxTQUFBcjdGLEdBQWEsR0FBQWpiLEVBQUFpekcsdUJBQUEsRUFBQXJ0RyxVQUFBLEtBQUEwVixFQUFBLE1BQUFMLEVBQXVESyxFQUFBTCxLQUFLNWEsR0FBSUwsRUFBQTRCLFVBQUFrMkcsVUFBQSxTQUFBNzhGLEVBQUFLLEVBQUFqYixHQUF1QyxJQUFBQyxLQUFRMk0sRUFBQTNLLEtBQVEsT0FBQUEsS0FBQXNxSCxPQUFBM3hHLEVBQUEsNkJBQUFBLEdBQXFEM2EsRUFBQStzSCxNQUFBLElBQUE3bkcsV0FBQXZLLEdBQUEsbUJBQUFLLEtBQUFoYixHQUFBMk0sRUFBQXFwRyxxQkFBMkUsU0FBQWg3RixHQUFhLEdBQUF0YixFQUFBaXpHLHVCQUFBLEVBQUFoNEYsSUFBQTVhLEVBQUEsTUFBQWliLEVBQTRDamIsRUFBQWliLEtBQUtoYixHQUFJTixFQUFBNEIsVUFBQTBySCxRQUFBLFdBQWdDdHRILEVBQUFvOEYsb0JBQUEsVUFBQXgyRixXQUEyQyxJQUFBcVYsRUFBQTdVLE1BQUF4RSxVQUFBb0ksTUFBQTdKLEtBQUF5RixXQUE0QyxPQUFBcVYsRUFBQXBYLE9BQUEsV0FBQTdELEVBQUE0QixVQUFBZ3JILE9BQUFoakgsTUFBQXRILEtBQUEyWSxJQUE0RGpiLEVBQUE0QixVQUFBMnJILFNBQUEsV0FBaUN2dEgsRUFBQW84RixvQkFBQSxXQUFBeDJGLFdBQTRDLElBQUFxVixFQUFBN1UsTUFBQXhFLFVBQUFvSSxNQUFBN0osS0FBQXlGLFdBQTRDLE9BQUFxVixFQUFBcFgsT0FBQSxZQUFBN0QsRUFBQTRCLFVBQUFnckgsT0FBQWhqSCxNQUFBdEgsS0FBQTJZLElBQTZEamIsRUFBQTRCLFVBQUFnckgsT0FBQSxXQUErQixRQUFBM3hHLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBaWEsRUFBQUssS0FBc0J5aUMsRUFBQSxFQUFBdDVCLEVBQUEsYUFBQTlqQixFQUFBMkYsVUFBQWhDLE9BQUEsRUFBeUMzRCxFQUFBLHNCQUFBMkYsVUFBQTNGLEdBQXFDQSxJQUFBbzlDLElBQVEsSUFBQWo5QyxFQUFBd0YsVUFBQWhDLE9BQUF5NUMsRUFBQTU3QyxFQUFBbUUsVUFBQSxHQUF3QyxPQUFBeEYsR0FBQSxpQkFBQXFCLEdBQUEsaUJBQUFtRSxVQUFBLEdBQUF0RixFQUFBLElBQUE2MkYsUUFBQTExRixFQUFBbUUsVUFBQSxJQUFBMFYsRUFBQTFWLFVBQUEsR0FBQXZGLEVBQUF1RixVQUFBLE9BQXdILENBQUssUUFBQW5GLEVBQUFxQixFQUFBLE1BQUFpVixFQUFBLEVBQXNCQSxFQUFBblIsVUFBQWhDLE9BQW1CbVQsSUFBQSxDQUFLLElBQUFqVyxFQUFBOEUsVUFBQW1SLEdBQW1CLG9CQUFBalcsRUFBQSxRQUFBQSxHQUFBLFNBQUFBLEdBQUEsUUFBQUEsR0FBQSxXQUFBQSxFQUFBZ0IsRUFBQWhCLEVBQUEsU0FBQUEsR0FBQSxVQUFBQSxHQUFBLFdBQUFBLEdBQUEsZ0JBQUFBLEdBQUEsUUFBQUEsR0FBQSxTQUFBQSxHQUFBLFVBQUFBLEVBQUFtYSxFQUFBbmEsRUFBQUwsRUFBQUssT0FBOEssb0JBQUFBLEVBQUFMLEVBQUFLLEVBQUEwQixnQkFBMEMsb0JBQUExQixFQUFBLEdBQUFBLEVBQUFlLGVBQUEseUJBQUFFLEtBQUFqQixFQUFBOFosRUFBQTdZLEdBQUFqQixFQUFBaUIsUUFBeUZ0QixFQUFBeTNDLEtBQUFDLFVBQUFyM0MsR0FBQWlqQixFQUFBLHVCQUE4QyxtQkFBQWpqQixJQUFBd2EsRUFBQWpiLEVBQUFTLEVBQUF3YSxFQUFBeGEsR0FBc0NSLEVBQUEsSUFBQTYyRixRQUFBMTFGLEdBQWlCNFUsT0FBQXZVLEVBQUFYLEtBQUEsT0FBQW8xRixLQUFBOTFGLEVBQUEyMUYsUUFBQSxJQUFBYyxTQUFpRHMyQixlQUFBenBHLE1BQXFCLE9BQUE5SSxPQUFBLElBQUF4WixFQUFBZ0MsUUFBQSxvQkFBQWhDLEVBQUFnQyxRQUFBLHNCQUFBOFcsS0FBQSxVQUFBVSxFQUFBdlcsRUFBQWpELEVBQUFtWixHQUFBZzhFLE1BQUF0MkYsSUFBQWlQLEtBQUEsU0FBQStMLEdBQWtJLElBQUFBLEVBQUFnc0MsR0FBQSxDQUFVLElBQUFqbkQsRUFBQSxJQUFBa0MsTUFBQStZLEVBQUFpN0UsTUFBd0IsTUFBQWwyRixFQUFBNDRCLE9BQUEzZCxFQUFBMmQsT0FBQTU0QixFQUFBaW5ELElBQUEsRUFBQWpuRCxFQUFrQyxJQUFBQyxFQUFBZ2IsRUFBQTg2RSxRQUFBdjFGLElBQUEsa0JBQXNDLE9BQUFQLEtBQUEsTUFBQU4sRUFBQWl6Ryx1QkFBQSxFQUFBeHhHLEdBQUF3WixHQUFtRCw4QkFBQUssRUFBQWlzQyxPQUF1QyxvQkFBQWpzQyxFQUFBaEssT0FBNkIseUJBQUFnSyxFQUFBNDZFLGNBQXlDLGlCQUFBNTZFLEVBQUErNkUsT0FBQTltRixLQUFBLFNBQUEwTCxHQUEyQyxPQUFoaUwsU0FBQWhPLEVBQUFnTyxHQUFjLElBQUFLLEVBQUEsSUFBQXRiLEVBQUF5dEgsSUFBQXB0SCxFQUFBNGEsRUFBQXl5RyxXQUErQixHQUFBcnRILEtBQUF1RCxPQUFBLENBQWdCLFFBQUF0RCxFQUFBLEVBQVlBLEVBQUFELEVBQUF1RCxPQUFXdEQsSUFBQSxDQUFLLElBQUFpYSxFQUFBdE4sRUFBQTVNLEVBQUFDLElBQWNnYixFQUFBcXlHLFNBQUFwekcsR0FBY2UsRUFBQXN5RyxRQUFBM3lHLEVBQUE0eUcsVUFBQXZ5RyxFQUFBd3lHLFNBQUE3eUcsRUFBQTh5RyxhQUFBenlHLEVBQUEweUcsZUFBQS95RyxHQUFvRSxRQUFBTCxFQUFBLEVBQVlBLEVBQUFVLEVBQUEyeUcsU0FBQXJxSCxPQUFvQmdYLElBQUFVLEVBQUEyeUcsU0FBQXJ6RyxHQUFBcFgsT0FBQThYLEVBQTJCLE9BQUFBLEVBQVMsT0FBQUEsRUFBQXN5RyxRQUFBM3lHLEVBQUE0eUcsVUFBQXZ5RyxFQUFBd3lHLFNBQUE3eUcsRUFBQTh5RyxhQUFBenlHLEVBQUEweUcsZUFBQS95RyxHQUFBSyxFQUFteUtyTyxFQUFBLElBQUFpaEgsV0FBQUMsZ0JBQUFsekcsRUFBQSxZQUFBbzBGLG1CQUEwRSxlQUFBL3pGLEVBQUErNkUsV0FBeUI5bUYsS0FBQStMLEdBQUEsY0FBd0JmLEVBQUF1YyxNQUFBejJCLEdBQUF3UyxRQUFBekUsT0FBQW1NLEdBQThCN1IsT0FBQTBJLElBQUExSSxPQUFBMEksS0FBQTFJLE9BQUEySSxVQUFBclIsRUFBQTRCLFVBQUF3c0gsYUFBQXB1SCxFQUFBNEIsVUFBQXV2RixhQUFBLFNBQUFsMkUsRUFBQUssR0FBeUcsSUFBQWpiLEVBQU0sUUFBQUMsS0FBQU4sRUFBQTRCLFVBQUF3c0gsVUFBQSxHQUFBcHVILEVBQUE0QixVQUFBd3NILFVBQUE5dEgsR0FBQUMsT0FBQTBhLEVBQUEsT0FBQTVhLEVBQUEsSUFBQUwsRUFBQXF1SCxZQUFBcHpHLEVBQUEzWSxLQUFBZ3NILFNBQUFoekcsR0FBQXRiLEVBQUE0QixVQUFBd3NILFVBQUFscEgsS0FBQTdFLEtBQXNKLE9BQUFBLEVBQUEsSUFBQUwsRUFBQXF1SCxZQUFBcHpHLEVBQUFLLEdBQUF0YixFQUFBNEIsVUFBQXdzSCxVQUFBbHBILEtBQUE3RSxNQUFnRUwsRUFBQXF1SCxZQUFBLFNBQUFwekcsRUFBQUssR0FBNkIsSUFBQWpiLEVBQUFpQyxLQUFXQSxLQUFBL0IsS0FBQTBhLEVBQUEzWSxLQUFBOG1ELFFBQUEsR0FBQTltRCxLQUFBeTdDLE1BQUEsU0FBQTlpQyxHQUFtRDNZLEtBQUE4bUQsU0FBQW51QyxHQUFnQjNZLEtBQUF1dEcsTUFBQSxTQUFBNTBGLEdBQXdCM1ksS0FBQThtRCxTQUFBbnVDLEVBQUEsTUFBcUIzWSxLQUFBcXZCLE1BQUEsV0FBdUJydkIsS0FBQThtRCxRQUFBLElBQWdCOW1ELEtBQUErSyxNQUFBLFdBQXVCLElBQUEvTSxLQUEyRCxRQUFBMk0sS0FBbEQzTSxFQUFBNEUsS0FBQTVDLEtBQUE4bUQsU0FBQXBwRCxFQUFBNEIsVUFBQTJzSCxVQUFBanVILEVBQUEyYSxFQUFBSyxHQUFrRHRiLEVBQUE0QixVQUFBd3NILFVBQUFwdUgsRUFBQTRCLFVBQUF3c0gsVUFBQW5oSCxHQUFBMU0sT0FBQStCLEtBQUEvQixNQUFBUCxFQUFBNEIsVUFBQXdzSCxVQUFBdnFILE9BQUFvSixFQUFBLEdBQWdINU0sRUFBQXN4QixRQUFBdHhCLE9BQWdCTCxFQUFBNEIsVUFBQTI3RyxLQUFBLFNBQUF0aUcsRUFBQUssRUFBQWpiLEdBQWtDLElBQUFDLEVBQUFzRixVQUFBcUgsRUFBQTNLLEtBQUE0dEcsWUFBQUMsSUFBdUMsT0FBQTd2RyxFQUFBc0QsT0FBc0QsR0FBQXRELEVBQUEsYUFBQU4sRUFBQTA2RyxVQUFBcDZHLEVBQUEsYUFBQU4sRUFBQWs2RyxTQUFBbDZHLEVBQUE0QixVQUFBd3BILFdBQUE5cUgsRUFBQSxHQUFBNnZHLElBQUE3dkcsRUFBQSxHQUFBQSxFQUFBLFNBQStHLE9BQUFBLEVBQUFzRCxRQUFBLGlCQUFBdEQsRUFBQSxHQUFBTixFQUFBNEIsVUFBQXdwSCxXQUFBbitHLEVBQUEzTSxFQUFBLFNBQTJFLE9BQUFzYSxFQUFBdGEsRUFBQSxHQUFBQSxFQUFBLFFBQXdCLHVCQUFBTixFQUFBNEIsVUFBQWtqSCxTQUFBeGtILEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLElBQTRELHNCQUFBTixFQUFBNEIsVUFBQTRzSCxZQUFBbHVILEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLElBQThELFFBQUFBLEVBQUEsYUFBQThGLE1BQUFwRyxFQUFBNEIsVUFBQTRzSCxZQUFBbHVILEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLElBQUFBLEVBQUEsYUFBQU4sRUFBQTgwRCxNQUFBOTBELEVBQUE0QixVQUFBZ2pILFVBQUF0a0gsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsSUFBQUEsRUFBQSxhQUFBTixFQUFBd29HLE1BQUF4b0csRUFBQTRCLFVBQUF3cEgsV0FBQTlxSCxFQUFBLEdBQUE2NUcsT0FBQTc1RyxFQUFBLElBQUFBLEVBQUEsYUFBQU4sRUFBQXl1SCxXQUFBenVILEVBQUE0QixVQUFBOHNILFVBQUFwdUgsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxTQUFsWU4sRUFBQTRCLFVBQUF3cEgsV0FBQW4rRyxJQUE2b0JqTixFQUFBNEIsVUFBQWtqSCxTQUFBLFNBQUE3cEcsRUFBQUssRUFBQWpiLEdBQWtGLElBQUFDLEVBQTVDTixFQUFBbzhGLG9CQUFBLFdBQUF4MkYsV0FBa0R0RixFQUFBRCxFQUFBNjNDLEtBQUFDLFVBQUFsOUIsR0FBQWk5QixLQUFBQyxVQUFBbDlCLE9BQUEsS0FBQTNZLEtBQUFrc0gsWUFBQWx1SCxFQUFBcUQsTUFBQSxNQUFBMlgsRUFBQSxTQUEwRnRiLEVBQUE0QixVQUFBK3NILGVBQUEzdUgsRUFBQTRCLFVBQUFrakgsU0FBQTlrSCxFQUFBNEIsVUFBQWd0SCxjQUFBNXVILEVBQUE0QixVQUFBa2pILFNBQUE5a0gsRUFBQTRCLFVBQUE0c0gsWUFBQSxTQUFBdnpHLEVBQUFLLEVBQUFqYixHQUF3SUwsRUFBQW84RixvQkFBQSxjQUFBeDJGLFdBQStDLFFBQUF0RixFQUFBRCxHQUFBLE1BQUE0TSxFQUFBM0ssS0FBQTZ1RixhQUFBNzFFLEVBQUFoYixHQUFBaWEsRUFBQSxFQUFnREEsRUFBQVUsRUFBQXJYLE9BQVcyVyxJQUFBVSxFQUFBclgsT0FBQXFKLEVBQUE0aUcsTUFBQTUwRixFQUFBVixJQUEyQnROLEVBQUFJLFFBQUFKLEVBQUEwa0IsU0FBb0IzeEIsRUFBQTRCLFVBQUFnakgsVUFBQSxTQUFBM3BHLEVBQUFLLEVBQUFqYixHQUFvRixJQUFBQyxFQUE3Q04sRUFBQW84RixvQkFBQSxZQUFBeDJGLFdBQW1EdEYsT0FBQSxJQUFBRCxFQUFBaWIsRUFBQTBxQyxVQUFBMXFDLEVBQUF1eEcsWUFBQSxPQUFBdnhHLEVBQUExWCxRQUFBdkQsRUFBMEQsSUFBQTRNLEVBQUEzSyxLQUFBNnVGLGFBQUE3MUUsRUFBQWhiLEdBQUFzYSxFQUFBSyxFQUFBZ3lHLFFBQUE1dkUsRUFBQSxJQUErQyxXQUFBLzhDLElBQUErOEMsRUFBQSxlQUFBLzhDLEVBQUEsQ0FBbUMsU0FBQXNhLEVBQUEsSUFBZSxRQUFBbFcsRUFBQSxFQUFZQSxFQUFBa1csRUFBQWhYLE9BQVdjLE1BQUFrVyxFQUFBaFgsT0FBQSxFQUFBcUosRUFBQTh3QyxNQUFBbmpDLEVBQUFsVyxHQUFBMjRDLEdBQUFwd0MsRUFBQTh3QyxNQUFBbmpDLEVBQUFsVyxJQUErQ3VJLEVBQUE4d0MsTUFBQSxNQUFjLFFBQUFoNkIsRUFBQSxFQUFZQSxFQUFBOUksRUFBQTR6RyxLQUFBanJILE9BQWdCbWdCLElBQUEsQ0FBSyxJQUFBOWpCLEVBQU0sSUFBQUEsRUFBQSxFQUFRQSxFQUFBZ2IsRUFBQTR6RyxLQUFBOXFHLEdBQUFyVSxJQUFBOUwsT0FBdUIzRCxNQUFBZ2IsRUFBQTR6RyxLQUFBOXFHLEdBQUFyVSxJQUFBOUwsT0FBQSxFQUFBcUosRUFBQTh3QyxNQUFBOWlDLEVBQUE0ekcsS0FBQTlxRyxHQUFBclUsSUFBQXpQLEdBQUFvOUMsSUFBQXBpQyxFQUFBNHpHLEtBQUFqckgsT0FBQXFKLEVBQUE4d0MsTUFBQTlpQyxFQUFBNHpHLEtBQUE5cUcsR0FBQXJVLElBQUF6UCxLQUFtR2dOLEVBQUE4d0MsTUFBQSxXQUFlLENBQUs5d0MsRUFBQTRpRyxNQUFBLFVBQUE1aUcsRUFBQTRpRyxNQUFBLFVBQW9DLElBQUF6dkcsRUFBQSw0Q0FBa0QsR0FBQUEsR0FBQSxnQ0FBbUI2TSxFQUFBNGlHLE1BQUF6dkcsR0FBQTZNLEVBQUE0aUcsTUFBQSxXQUFBNWlHLEVBQUE0aUcsTUFBQSxVQUFBNWlHLEVBQUE0aUcsTUFBQSxtQkFBQWoxRixFQUFBLElBQW9HM04sRUFBQTRpRyxNQUFBLFlBQW9CLFFBQUFwdUcsRUFBQSxFQUFZQSxFQUFBbVosRUFBQWhYLE9BQVduQyxJQUFBLENBQUssSUFBQWhCLEVBQUE4WixFQUFBSyxFQUFBblosSUFBY3dMLEVBQUE0aUcsTUFBQSxhQUFBcHZHLEdBQUF3TSxFQUFBNGlHLE1BQUEsZUFBK0M1aUcsRUFBQTRpRyxNQUFBLGFBQXFCLFFBQUEvdEcsRUFBQSxFQUFZQSxFQUFBbVosRUFBQTR6RyxLQUFBanJILE9BQWdCOUIsSUFBQSxDQUFLbUwsRUFBQTRpRyxNQUFBLFlBQW9CLFFBQUE5NEYsRUFBQSxFQUFZQSxFQUFBa0UsRUFBQWd5RyxRQUFBcnBILE9BQW1CbVQsSUFBQSxDQUFLLElBQUFqVyxFQUFBbWEsRUFBQTR6RyxLQUFBL3NILEdBQUFndEgsVUFBQS8zRyxHQUFBaFYsRUFBQXdZLEVBQUF6WixHQUFvQ21NLEVBQUE0aUcsTUFBQSxhQUFBOXRHLEdBQUFrTCxFQUFBNGlHLE1BQUEsZUFBK0M1aUcsRUFBQTRpRyxNQUFBLGFBQXFCNWlHLEVBQUE0aUcsTUFBQSxjQUFBNWlHLEVBQUE0aUcsTUFBQSxXQUFBNWlHLEVBQUE0aUcsTUFBQSxXQUE0RDVpRyxFQUFBSSxRQUFBSixFQUFBMGtCLFNBQW9CM3hCLEVBQUE0QixVQUFBMnNILFVBQUEsU0FBQXR6RyxFQUFBSyxFQUFBamIsR0FBdUMsSUFBQUMsRUFBQSwyQkFBaUNOLEVBQUE0QixVQUFBbXRILGNBQUF6dUgsRUFBQSxjQUEwQyxJQUFBMk0sRUFBQSxJQUFBc0UsS0FBQTBKLEdBQWtCMUssS0FBQWpRLElBQVNOLEVBQUE0QixVQUFBaWpILGFBQUE1M0csRUFBQXFPLEVBQUFqYixJQUFnQ0wsRUFBQTRCLFVBQUFpakgsYUFBQSxTQUFBdnBHLEVBQUFqYixFQUFBQyxHQUEwQyxJQUFBMk0sRUFBQTJOLEVBQUF2YSxFQUFBQyxHQUFBaWEsRUFBQXROLEVBQUEsR0FBb0IsR0FBQXFPLGFBQUEvSixLQUFzQjBKLEVBQUEsY0FBQW91QyxPQUFBL3RDLEVBQUFmLE9BQXRCLENBQThELElBQUE3VixFQUFBNDBCLFNBQUFDLGNBQUEsS0FBa0MsR0FBQTcwQixFQUFBeWpELEtBQUE3c0MsRUFBQTVXLEVBQUEwakQsU0FBQTd0QyxFQUFBN1YsRUFBQXNxSCxRQUFBLFNBQUEvekcsSUFBNzNRLFNBQUFBLEdBQWNxZSxTQUFBaTlELEtBQUFydkMsWUFBQWpzQyxFQUFBNCtGLFNBQTg1UXg4RCxDQUFBcGlDLEtBQUE4K0YsbUJBQXlCcjFHLEVBQUEwckcsTUFBQXdLLFFBQUEsT0FBQXRoRixTQUFBaTlELEtBQUE3dUMsWUFBQWhqRCxHQUFBMUUsRUFBQTRCLFVBQUFtdEgsWUFBQSxDQUE4RSxJQUFBaHJHLEVBQUEsaURBQXVEQSxHQUFBLGtDQUFBQSxHQUFBLDJDQUFBQSxHQUFBLHFDQUFBOVcsRUFBQSxPQUFBZ2lILE1BQUFsckcsR0FBNklyZixFQUFBK3ZHLFVBQVV6MEcsRUFBQTRCLFVBQUEwcEgsb0JBQUExd0csRUFBQTVhLEVBQUE0QixVQUFBbXRILFVBQUEsV0FBb0UsT0FBQXJ1SCxPQUFBa0IsVUFBQVksU0FBQXJDLEtBQUF1SSxPQUFBbS9DLGFBQUFwa0QsUUFBQSxrQkFBbUY2WCxFQUFBeGIsUUFBQUUsSUFBZWkrRix3QkFBQSxHQUFBL0IsZUFBQSxHQUFBZ3pCLGNBQUEsRUFBQUMsY0FBQSxFQUFBQyxhQUFBLEVBQUFDLGVBQUEsS0FBOEd4NUMsSUFBQSxTQUFBNTZELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUF3QjNhLEVBQUF3MEQsTUFBQSxTQUFBNzVDLEdBQW9CM1ksS0FBQTJxSCxXQUFBM3FILEtBQUF1c0gsU0FBNkJ2dUgsRUFBQXcwRCxNQUFBbHpELFVBQUF3ckgsT0FBQSxTQUFBbnlHLEdBQXNDLElBQUFLLEVBQUFMLEdBQUEsSUFBQTNhLEVBQUE0c0gsU0FBd0IsWUFBQTV4RyxFQUFBNUwsVUFBQSxJQUFBNEwsRUFBQTZ4RyxJQUFBLFVBQUE1cUgsTUFBQSxxQkFBQStZLEdBQTBFLE9BQUFBLEVBQUFneUMsTUFBQWhyRCxVQUFBdXNILEtBQUEzcEgsS0FBQW9XLE1BQXdDaGIsRUFBQXcwRCxNQUFBbHpELFVBQUEwdEgsVUFBQSxTQUFBcjBHLEdBQXlDM1ksS0FBQXVzSCxLQUFBNXpHLEdBQUFxeUMsTUFBQSxLQUF3QixJQUFBaHlDLEVBQUFoWixLQUFBdXNILEtBQUFockgsT0FBQW9YLEVBQUEsRUFBQTNZLEtBQUF1c0gsS0FBQWpySCxRQUE2Q3RCLEtBQUF1c0gsS0FBQXo3RCxNQUFBOXdELEtBQUF1c0gsS0FBQXZzSCxLQUFBdXNILEtBQUFubUcsT0FBQXBOLElBQThDaGIsRUFBQXcwRCxNQUFBbHpELFVBQUEydEgsT0FBQSxTQUFBdDBHLEdBQXNDLE9BQUEzWSxLQUFBdXNILEtBQUE1ekcsSUFBb0IzYSxFQUFBdzBELE1BQUFsekQsVUFBQTR0SCxRQUFBLFdBQXNDLE9BQUFsdEgsS0FBQXVzSCxNQUFpQnZ1SCxFQUFBdzBELE1BQUFsekQsVUFBQTZ0SCxRQUFBLFNBQUF4MEcsRUFBQUssR0FBeUMsb0JBQUFBLEdBQXVCLFFBQUFqYixFQUFBLEVBQVlBLEVBQUFpQyxLQUFBdXNILEtBQUFqckgsT0FBbUJ2RCxJQUFBLEdBQUFpQyxLQUFBdXNILEtBQUF4dUgsR0FBQThzSCxJQUFBN3hHLEtBQUFMLEVBQUEsT0FBQTNZLEtBQUF1c0gsS0FBQXh1SCxRQUFtRCxRQUFBQyxFQUFBLEVBQWlCQSxFQUFBZ0MsS0FBQXVzSCxLQUFBanJILE9BQW1CdEQsSUFBQSxHQUFBZ0MsS0FBQXVzSCxLQUFBdnVILEdBQUFvUCxJQUFBNEwsS0FBQUwsRUFBQSxPQUFBM1ksS0FBQXVzSCxLQUFBdnVILEdBQW1ELGFBQVlBLEVBQUF3MEQsTUFBQWx6RCxVQUFBOHRILFNBQUEsU0FBQXowRyxFQUFBSyxHQUEwQyxJQUFBamIsS0FBUyxvQkFBQWliLEVBQUEsUUFBQWhiLEVBQUEsRUFBa0NBLEVBQUFnQyxLQUFBdXNILEtBQUFqckgsT0FBbUJ0RCxJQUFBZ0MsS0FBQXVzSCxLQUFBdnVILEdBQUE2c0gsSUFBQTd4RyxLQUFBTCxHQUFBNWEsRUFBQTZFLEtBQUE1QyxLQUFBdXNILEtBQUF2dUgsU0FBa0QsUUFBQTJNLEVBQUEsRUFBaUJBLEVBQUEzSyxLQUFBdXNILEtBQUFqckgsT0FBbUJxSixJQUFBM0ssS0FBQXVzSCxLQUFBNWhILEdBQUF5QyxJQUFBNEwsS0FBQUwsR0FBQTVhLEVBQUE2RSxLQUFBNUMsS0FBQXVzSCxLQUFBNWhILElBQWtELE9BQUE1TSxHQUFTQyxFQUFBdzBELE1BQUFsekQsVUFBQSt0SCxTQUFBLFNBQUExMEcsRUFBQUssR0FBMEMsb0JBQUFBLEdBQXVCLFFBQUFqYixFQUFBLEVBQVlBLEVBQUFpQyxLQUFBdXNILEtBQUFqckgsT0FBbUJ2RCxJQUFBLEdBQUFpQyxLQUFBdXNILEtBQUF4dUgsR0FBQXFQLElBQUE0TCxHQUFBM1ksTUFBQXNZLEdBQUEsT0FBQTNZLEtBQUF1c0gsS0FBQXh1SCxRQUF3RCxRQUFBQyxFQUFBLEVBQWlCQSxFQUFBZ0MsS0FBQXVzSCxLQUFBanJILE9BQW1CdEQsSUFBQSxHQUFBZ0MsS0FBQXVzSCxLQUFBdnVILEdBQUE2c0gsSUFBQTd4RyxHQUFBM1ksTUFBQXNZLEdBQUEsT0FBQTNZLEtBQUF1c0gsS0FBQXZ1SCxHQUF3RCxhQUFZQSxFQUFBdzBELE1BQUFsekQsVUFBQWd1SCxVQUFBLFNBQUEzMEcsRUFBQUssR0FBMkMsSUFBQWpiLEtBQVMsb0JBQUFpYixFQUFBLFFBQUFoYixFQUFBLEVBQWtDQSxFQUFBZ0MsS0FBQXVzSCxLQUFBanJILE9BQW1CdEQsSUFBQWdDLEtBQUF1c0gsS0FBQXZ1SCxHQUFBb1AsSUFBQTRMLEdBQUEzWSxNQUFBc1ksSUFBQTVhLEVBQUE2RSxLQUFBNUMsS0FBQXVzSCxLQUFBdnVILFNBQXVELFFBQUEyTSxFQUFBLEVBQWlCQSxFQUFBM0ssS0FBQXVzSCxLQUFBanJILE9BQW1CcUosSUFBQTNLLEtBQUF1c0gsS0FBQTVoSCxHQUFBa2dILElBQUE3eEcsR0FBQTNZLE1BQUFzWSxJQUFBNWEsRUFBQTZFLEtBQUE1QyxLQUFBdXNILEtBQUE1aEgsSUFBdUQsT0FBQTVNLEdBQVNDLEVBQUF3MEQsTUFBQWx6RCxVQUFBaXVILFVBQUEsU0FBQTUwRyxHQUF5QyxJQUFBSyxLQUFTLG9CQUFBTCxFQUFBLFFBQUE1YSxFQUFBLEVBQWtDQSxFQUFBaUMsS0FBQXVzSCxLQUFBanJILE9BQW1CdkQsSUFBQWliLEVBQUFwVyxLQUFBNUMsS0FBQXVzSCxLQUFBeHVILEdBQUE4c0gsSUFBQWx5RyxTQUFnQyxRQUFBM2EsRUFBQSxFQUFpQkEsRUFBQWdDLEtBQUF1c0gsS0FBQWpySCxPQUFtQnRELElBQUFnYixFQUFBcFcsS0FBQTVDLEtBQUF1c0gsS0FBQXZ1SCxHQUFBb1AsSUFBQXVMLElBQWdDLE9BQUFLLEdBQVNoYixFQUFBdzBELE1BQUFsekQsVUFBQWt1SCxVQUFBLGtCQUF3Q3h0SCxLQUFBdXNILEtBQUF2c0gsS0FBQXVzSCxTQUE4QnZ1SCxFQUFBdzBELE1BQUFsekQsVUFBQW11SCxVQUFBLFNBQUE5MEcsR0FBeUMsSUFBQUssRUFBQUwsR0FBQSxLQUFjM1ksS0FBQTJxSCxRQUFBL25ILEtBQUFvVyxJQUFxQmhiLEVBQUF3MEQsTUFBQWx6RCxVQUFBb3VILGVBQUEsV0FBNkMsT0FBQTF0SCxLQUFBMnFILFFBQUFycEgsUUFBMkJ0RCxFQUFBdzBELE1BQUFsekQsVUFBQXF1SCxZQUFBLFdBQTBDLE9BQUEzdEgsS0FBQXVzSCxLQUFBanJILFFBQXdCdEQsRUFBQXcwRCxNQUFBbHpELFVBQUFzdUgsYUFBQSxTQUFBajFHLEVBQUFLLEdBQThDLFFBQUFqYixFQUFBLFNBQUE0YSxHQUFzQixPQUFBQSxFQUFBd2QsUUFBQSx5QkFBc0MsU0FBWW40QixLQUFBMk0sRUFBQSxFQUFVQSxFQUFBZ08sRUFBQXJYLE9BQVdxSixJQUFBM00sRUFBQTRFLEtBQUE3RSxFQUFBNGEsRUFBQXBGLE9BQUE1SSxLQUEyQixJQUFBc04sRUFBQSxJQUFBcXRGLE9BQUF0bkcsRUFBQXlELEtBQUEsVUFBa0MsWUFBQXVYLEVBQUEsUUFBQVYsRUFBQSxFQUEwQkEsRUFBQXRZLEtBQUEycUgsUUFBQXJwSCxPQUFzQmdYLElBQUEsUUFBQXlpQyxFQUFBLEVBQWdCQSxFQUFBLzZDLEtBQUF1c0gsS0FBQWpySCxPQUFtQnk1QyxJQUFBLENBQUssSUFBQXI5QyxFQUFBc0MsS0FBQXVzSCxLQUFBeHhFLEdBQUEzdEMsSUFBQWtMLEdBQTBCNWEsSUFBQXk0QixRQUFBbGUsRUFBQSxJQUFBalksS0FBQXVzSCxLQUFBeHhFLEdBQUEzdEMsSUFBQWtMLEdBQUE1YSxFQUFBc0MsS0FBQXVzSCxLQUFBeHhFLEdBQUE4dkUsSUFBQTdxSCxLQUFBMnFILFFBQUFyeUcsSUFBQTVhLE9BQTRFLG9CQUFBc2IsRUFBQSxRQUFBNVcsRUFBQSxFQUF1Q0EsRUFBQXBDLEtBQUF1c0gsS0FBQWpySCxPQUFtQmMsSUFBQSxDQUFLLElBQUFxZixFQUFBemhCLEtBQUF1c0gsS0FBQW5xSCxHQUFBeW9ILElBQUE3eEcsR0FBMEJ5SSxJQUFBMFUsUUFBQWxlLEVBQUEsSUFBQWpZLEtBQUF1c0gsS0FBQW5xSCxHQUFBeW9ILElBQUE3eEcsR0FBQXlJLEVBQXdDLElBQUE5akIsRUFBQXFDLEtBQUEycUgsUUFBQXhwSCxRQUFBNlgsR0FBOEJoWixLQUFBdXNILEtBQUFucUgsR0FBQWdMLElBQUF6UCxHQUFBOGpCLE9BQXNCLFFBQUEzakIsRUFBQSxFQUFpQkEsRUFBQWtDLEtBQUF1c0gsS0FBQWpySCxPQUFtQnhELElBQUEsQ0FBSyxJQUFBcUIsRUFBQWEsS0FBQXVzSCxLQUFBenVILEdBQUFzUCxJQUFBNEwsR0FBMEI3WixJQUFBZzNCLFFBQUFsZSxFQUFBLElBQUFqWSxLQUFBdXNILEtBQUF6dUgsR0FBQXNQLElBQUE0TCxHQUFBN1osRUFBQWEsS0FBQXVzSCxLQUFBenVILEdBQUErc0gsSUFBQTdxSCxLQUFBMnFILFFBQUEzeEcsSUFBQTdaLElBQTZFbkIsRUFBQXcwRCxNQUFBbHpELFVBQUFvVyxLQUFBLFNBQUFpRCxHQUFvQyxJQUFBSyxFQUFBLElBQUFzc0YsT0FBQSxTQUEwQixZQUFBM3NGLEVBQUEsUUFBQTVhLEVBQUEsRUFBMEJBLEVBQUFpQyxLQUFBMnFILFFBQUFycEgsT0FBc0J2RCxJQUFBLFFBQUFDLEVBQUEsRUFBZ0JBLEVBQUFnQyxLQUFBdXNILEtBQUFqckgsT0FBbUJ0RCxJQUFBLENBQUssSUFBQTJNLEVBQUEzSyxLQUFBdXNILEtBQUF2dUgsR0FBQW9QLElBQUFyUCxHQUEwQjRNLElBQUF3ckIsUUFBQW5kLEVBQUEsSUFBQWhaLEtBQUF1c0gsS0FBQXZ1SCxHQUFBb1AsSUFBQXJQLEdBQUE0TSxFQUFBM0ssS0FBQXVzSCxLQUFBdnVILEdBQUE2c0gsSUFBQTdxSCxLQUFBMnFILFFBQUE1c0gsSUFBQTRNLE9BQTRFLG9CQUFBZ08sRUFBQSxRQUFBVixFQUFBLEVBQXVDQSxFQUFBalksS0FBQXVzSCxLQUFBanJILE9BQW1CMlcsSUFBQSxDQUFLLElBQUFLLEVBQUF0WSxLQUFBdXNILEtBQUF0MEcsR0FBQTR5RyxJQUFBbHlHLEdBQTBCTCxJQUFBNmQsUUFBQW5kLEVBQUEsSUFBQWhaLEtBQUF1c0gsS0FBQXQwRyxHQUFBNHlHLElBQUFseUcsR0FBQUwsRUFBd0MsSUFBQXlpQyxFQUFBLzZDLEtBQUEycUgsUUFBQXhwSCxRQUFBd1gsR0FBOEIzWSxLQUFBdXNILEtBQUF0MEcsR0FBQTdLLElBQUEydEMsR0FBQXppQyxPQUFzQixRQUFBNWEsRUFBQSxFQUFpQkEsRUFBQXNDLEtBQUF1c0gsS0FBQWpySCxPQUFtQjVELElBQUEsQ0FBSyxJQUFBMEUsRUFBQXBDLEtBQUF1c0gsS0FBQTd1SCxHQUFBMFAsSUFBQXVMLEdBQTBCdlcsSUFBQSt6QixRQUFBbmQsRUFBQSxJQUFBaFosS0FBQXVzSCxLQUFBN3VILEdBQUEwUCxJQUFBdUwsR0FBQXZXLEVBQUFwQyxLQUFBdXNILEtBQUE3dUgsR0FBQW10SCxJQUFBN3FILEtBQUEycUgsUUFBQWh5RyxJQUFBdlcsSUFBNkVwRSxFQUFBdzBELE1BQUFsekQsVUFBQXV1SCxhQUFBLFNBQUFsMUcsR0FBNEMsSUFBQUssRUFBQWpiLEVBQVEsaUJBQUE0YSxHQUFBSyxFQUFBTCxFQUFBNWEsRUFBQWlDLEtBQUEycUgsUUFBQXhwSCxRQUFBd1gsS0FBQTVhLEVBQUE0YSxFQUFBSyxFQUFBaFosS0FBQTJxSCxRQUFBaHlHLElBQTJFLElBQUEzYSxFQUFBZ0MsS0FBQTJxSCxRQUFBcHBILE9BQUF4RCxFQUFBLEVBQUFpQyxLQUFBMnFILFFBQUFycEgsUUFBbUR0QixLQUFBMnFILFFBQUE3NUQsTUFBQTl3RCxLQUFBMnFILFFBQUEzcUgsS0FBQTJxSCxRQUFBdmtHLE9BQUFwb0IsR0FBdUQsUUFBQTJNLEVBQUEsRUFBWUEsRUFBQTNLLEtBQUF1c0gsS0FBQWpySCxPQUFtQnFKLElBQUEsQ0FBSyxJQUFBc04sRUFBQWpZLEtBQUF1c0gsS0FBQTVoSCxHQUFBeUMsSUFBQWtMLEVBQUFMLEVBQUExVyxPQUFBeEQsRUFBQSxFQUFBa2EsRUFBQTNXLFFBQWdEMlcsRUFBQTY0QyxNQUFBOXdELEtBQUF1c0gsS0FBQTVoSCxHQUFBeUMsSUFBQTZLLEVBQUFtTyxPQUFBOU4sVUFBQXRZLEtBQUF1c0gsS0FBQTVoSCxHQUFBa2dILElBQUE3eEcsS0FBaUVoYixFQUFBdzBELE1BQUFsekQsVUFBQW9CLElBQUEsU0FBQWlZLEVBQUFLLEVBQUFqYixHQUF1Q2lDLEtBQUF1c0gsS0FBQTV6RyxHQUFBalksSUFBQXNZLEVBQUFqYixJQUFzQkMsRUFBQXcwRCxNQUFBbHpELFVBQUF3dUgsT0FBQSxTQUFBbjFHLEVBQUFLLEVBQUFqYixHQUEwQ2lDLEtBQUF1c0gsS0FBQTV6RyxHQUFBbTFHLE9BQUE5MEcsRUFBQWpiLElBQXlCQyxFQUFBdzBELE1BQUFsekQsVUFBQXl1SCxVQUFBLFNBQUFwMUcsRUFBQUssRUFBQWpiLEdBQTZDaUMsS0FBQXVzSCxLQUFBNXpHLEdBQUFvMUcsVUFBQS8wRyxFQUFBamIsSUFBNEJDLEVBQUF3MEQsTUFBQWx6RCxVQUFBZixJQUFBLFNBQUFvYSxFQUFBSyxHQUFxQyxPQUFBaFosS0FBQXVzSCxLQUFBNXpHLEdBQUFwYSxJQUFBeWEsSUFBMkJoYixFQUFBdzBELE1BQUFsekQsVUFBQTB1SCxPQUFBLFNBQUFyMUcsRUFBQUssR0FBd0MsT0FBQWhaLEtBQUF1c0gsS0FBQTV6RyxHQUFBcTFHLE9BQUFoMUcsSUFBOEJoYixFQUFBdzBELE1BQUFsekQsVUFBQWt0SCxVQUFBLFNBQUE3ekcsRUFBQUssR0FBMkMsT0FBQWhaLEtBQUF1c0gsS0FBQTV6RyxHQUFBNnpHLFVBQUF4ekcsSUFBaUNoYixFQUFBdzBELE1BQUFsekQsVUFBQTJ1SCxVQUFBLFNBQUF0MUcsR0FBeUMsUUFBQUssRUFBQWpiLEVBQUFDLEtBQWdCMk0sRUFBQSxFQUFLQSxFQUFBM0ssS0FBQXVzSCxLQUFBanJILE9BQW1CcUosSUFBQSxHQUFBcU8sRUFBQWhaLEtBQUF1c0gsS0FBQTVoSCxHQUFBa2dILElBQUEsaUJBQUFseUcsRUFBQSxDQUE4QyxLQUFBM1ksS0FBQTJxSCxRQUFBeHBILFFBQUF3WCxJQUFBLGFBQUExWSxNQUFBLG1DQUFBMFksRUFBQSxLQUEyRjVhLEVBQUFpYixFQUFBTCxHQUFBM2EsRUFBQUQsR0FBQWliLE9BQWNoYixFQUFBMk0sR0FBQTNLLEtBQUF1c0gsS0FBQTVoSCxHQUFBa2dILElBQTJCLE9BQUE3c0gsR0FBU0EsRUFBQXcwRCxNQUFBbHpELFVBQUE0dUgsU0FBQSxXQUF1QyxRQUFBdjFHLEtBQUFLLEVBQUEsRUFBaUJBLEVBQUFoWixLQUFBdXNILEtBQUFqckgsT0FBbUIwWCxJQUFBTCxFQUFBL1YsS0FBQTVDLEtBQUF1c0gsS0FBQXZ6RyxHQUFBNUwsS0FBNkIsT0FBQXVMLEdBQVNLLEVBQUF4YixRQUFBUSxJQUFlNDdGLGVBQUEsS0FBa0JwbUIsSUFBQSxTQUFBNzZELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUF3QjNhLEVBQUE0c0gsU0FBQSxTQUFBanlHLEVBQUFLLEdBQXlCLElBQUFqYixLQUFBQyxLQUFjMmEsSUFBQUssS0FBQSxJQUFBamIsRUFBQTRhLEVBQUF0WCxNQUFBMlgsSUFBMkIsUUFBQXJPLEVBQUEsRUFBWUEsRUFBQTVNLEVBQUF1RCxPQUFXcUosSUFBQSxDQUFLLElBQUFzTixFQUFBdE4sRUFBQTJOLEVBQUF2YSxFQUFBNE0sR0FBZTNNLEVBQUFpYSxHQUFBSyxFQUFPdFksS0FBQW9OLElBQUFyUCxFQUFBaUMsS0FBQTZxSCxJQUFBN3NILEVBQUFnQyxLQUFBZ3JELE1BQUEsTUFBc0NodEQsRUFBQTRzSCxTQUFBdHJILFVBQUFvQixJQUFBLFNBQUFpWSxFQUFBSyxHQUF3QyxvQkFBQUwsRUFBQSxDQUF1QixJQUFBNWEsRUFBQWlDLEtBQUFnckQsTUFBQTIvRCxRQUFBeHBILFFBQUF3WCxHQUFvQyxLQUFBNWEsR0FBQSxhQUFBa0MsTUFBQSxtQ0FBQTBZLEVBQUEsS0FBcUUzWSxLQUFBNnFILElBQUFseUcsR0FBQUssRUFBQWhaLEtBQUFvTixJQUFBclAsR0FBQWliLE1BQTRCLENBQUssS0FBQUwsRUFBQTNZLEtBQUFnckQsTUFBQTIvRCxRQUFBcnBILFFBQUEsVUFBQXJCLE1BQUEsV0FBQTBZLEVBQUEsc0NBQXFHM1ksS0FBQW9OLElBQUF1TCxHQUFBSyxFQUFjLElBQUFoYixFQUFBZ0MsS0FBQWdyRCxNQUFBMi9ELFFBQUFoeUcsR0FBNEIzWSxLQUFBNnFILElBQUE3c0gsR0FBQWdiLElBQWVoYixFQUFBNHNILFNBQUF0ckgsVUFBQXd1SCxPQUFBLFNBQUFuMUcsRUFBQUssR0FBMkMsSUFBQWpiLEVBQUF1VixXQUFBMEYsR0FBb0JoWixLQUFBVSxJQUFBaVksRUFBQTVhLElBQWNDLEVBQUE0c0gsU0FBQXRySCxVQUFBeXVILFVBQUEsU0FBQXAxRyxFQUFBSyxHQUE4QyxJQUFBamIsRUFBQWliLEVBQUE5WSxXQUFtQkYsS0FBQVUsSUFBQWlZLEVBQUE1YSxJQUFjQyxFQUFBNHNILFNBQUF0ckgsVUFBQWYsSUFBQSxTQUFBb2EsR0FBc0MsdUJBQUFBLEVBQUEzWSxLQUFBNnFILElBQUFseUcsR0FBQTNZLEtBQUFvTixJQUFBdUwsSUFBaUQzYSxFQUFBNHNILFNBQUF0ckgsVUFBQTB1SCxPQUFBLFNBQUFyMUcsR0FBeUMsSUFBQUssRUFBTSxZQUFBQSxFQUFBLGlCQUFBTCxFQUFBckYsV0FBQXRULEtBQUE2cUgsSUFBQWx5RyxJQUFBckYsV0FBQXRULEtBQUFvTixJQUFBdUwsS0FBQXpZLFdBQUEsZUFBQUYsS0FBQTZxSCxJQUFBbHlHLEdBQUEseUJBQWlKLE9BQUFLLEdBQVNoYixFQUFBNHNILFNBQUF0ckgsVUFBQWt0SCxVQUFBLFNBQUE3ekcsR0FBNEMsdUJBQUFBLEVBQUEzWSxLQUFBNnFILElBQUFseUcsR0FBQXpZLFdBQUFGLEtBQUFvTixJQUFBdUwsR0FBQXpZLFlBQXVFOFksRUFBQXhiLFFBQUFRLElBQWU0N0YsZUFBQSxLQUFrQm5tQixJQUFBLFNBQUE5NkQsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsZ0JBQXdCM2EsRUFBQW10SCxJQUFBLFdBQWlCbnJILEtBQUEvQixLQUFBLEtBQUErQixLQUFBbXVILGNBQWlDbnVILEtBQUEyckgsWUFBQTNySCxLQUFBa0IsT0FBQSxLQUFBbEIsS0FBQThtRCxRQUFBLE1BQXFEOW9ELEVBQUFtdEgsSUFBQTdySCxVQUFBOHVILFVBQUEsV0FBc0MsT0FBQXB1SCxLQUFBa0IsUUFBbUJsRCxFQUFBbXRILElBQUE3ckgsVUFBQSt1SCxRQUFBLFdBQW9DLE9BQUFydUgsS0FBQS9CLE1BQWlCRCxFQUFBbXRILElBQUE3ckgsVUFBQWdzSCxRQUFBLFNBQUEzeUcsR0FBcUMzWSxLQUFBL0IsS0FBQTBhLEdBQVkzYSxFQUFBbXRILElBQUE3ckgsVUFBQWd2SCxZQUFBLFdBQXdDLE9BQUF0dUgsS0FBQTJySCxTQUFBcnFILE9BQUEsR0FBOEJ0RCxFQUFBbXRILElBQUE3ckgsVUFBQWl2SCxhQUFBLFdBQXlDLE9BQUF2dUgsS0FBQTJySCxTQUFBaDFHLElBQUEsU0FBQWdDLEdBQXFDLE9BQUFBLEVBQUExYSxRQUFnQkQsRUFBQW10SCxJQUFBN3JILFVBQUFrdkgsWUFBQSxTQUFBNzFHLEdBQXlDLE9BQUFBLEVBQUEzWSxLQUFBMnJILFNBQUExbEcsT0FBQSxTQUFBak4sR0FBMEMsT0FBQUEsRUFBQS9hLE9BQUEwYSxJQUFrQjNZLEtBQUEyckgsVUFBZ0IzdEgsRUFBQW10SCxJQUFBN3JILFVBQUFtdkgsU0FBQSxTQUFBOTFHLEdBQXNDLG9CQUFBQSxFQUFBLE9BQUEzWSxLQUFBMnJILFNBQUFoekcsR0FBOEMsUUFBQUssRUFBQSxFQUFZQSxFQUFBaFosS0FBQTJySCxTQUFBcnFILE9BQXVCMFgsSUFBQSxDQUFLLElBQUFqYixFQUFBaUMsS0FBQTJySCxTQUFBM3lHLEdBQXVCLEdBQUFqYixFQUFBRSxPQUFBMGEsRUFBQSxPQUFBNWEsSUFBd0JDLEVBQUFtdEgsSUFBQTdySCxVQUFBK3JILFNBQUEsU0FBQTF5RyxHQUFzQ0EsYUFBQTNhLEVBQUFtdEgsS0FBQW5ySCxLQUFBMnJILFNBQUEvb0gsS0FBQStWLElBQTBDM2EsRUFBQW10SCxJQUFBN3JILFVBQUFzbEQsWUFBQSxTQUFBanNDLEdBQXlDLElBQUFLLEdBQUEsRUFBUyxvQkFBQUwsR0FBdUIsUUFBQTVhLEVBQUEsRUFBWUEsRUFBQWlDLEtBQUEyckgsU0FBQXJxSCxPQUF1QnZELElBQUEsR0FBQWlDLEtBQUEyckgsU0FBQTV0SCxHQUFBRSxPQUFBMGEsRUFBQSxDQUFrQ0ssRUFBQWpiLEVBQUksWUFBT2liLEVBQUFMLEdBQVMsSUFBQUssR0FBQWhaLEtBQUEyckgsU0FBQXBxSCxPQUFBeVgsRUFBQSxJQUFrQ2hiLEVBQUFtdEgsSUFBQTdySCxVQUFBb3ZILGtCQUFBLFdBQThDLE9BQUF0d0gsT0FBQXFFLEtBQUF6QyxLQUFBbXVILFlBQUE3c0gsUUFBMkN0RCxFQUFBbXRILElBQUE3ckgsVUFBQXF2SCxlQUFBLFdBQTJDLE9BQUF2d0gsT0FBQXFFLEtBQUF6QyxLQUFBbXVILGFBQW9DbndILEVBQUFtdEgsSUFBQTdySCxVQUFBc3ZILGFBQUEsU0FBQWoyRyxHQUEwQyxRQUFBM1ksS0FBQW11SCxXQUFBeDFHLElBQTJCM2EsRUFBQW10SCxJQUFBN3JILFVBQUEwdUgsT0FBQSxTQUFBcjFHLEVBQUFLLEdBQXNDLE9BQUF1akMsT0FBQXY4QyxLQUFBbXVILFdBQUF4MUcsS0FBQUssR0FBQSxHQUF3Q2hiLEVBQUFtdEgsSUFBQTdySCxVQUFBa3RILFVBQUEsU0FBQTd6RyxFQUFBSyxHQUF5QyxPQUFBK2pDLE9BQUEvOEMsS0FBQW11SCxXQUFBeDFHLEtBQUFLLEdBQUEsTUFBMkNoYixFQUFBbXRILElBQUE3ckgsVUFBQTRsRCxhQUFBLFNBQUF2c0MsRUFBQUssR0FBNENoWixLQUFBbXVILFdBQUF4MUcsS0FBQTNZLEtBQUFtdUgsV0FBQXgxRyxHQUFBSyxJQUEyQ2hiLEVBQUFtdEgsSUFBQTdySCxVQUFBdXZILFdBQUEsU0FBQWwyRyxHQUF3QyxPQUFBM1ksS0FBQThtRCxTQUFBbnVDLEdBQUEsTUFBNkIzYSxFQUFBbXRILElBQUE3ckgsVUFBQXd2SCxXQUFBLFNBQUFuMkcsR0FBd0MzWSxLQUFBMnJILFNBQUFycUgsU0FBQXRCLEtBQUE4bUQsUUFBQW51QyxJQUF1QzNhLEVBQUFtdEgsSUFBQTdySCxVQUFBa3NILFNBQUEsU0FBQTd5RyxHQUFzQyxJQUFBSyxFQUFNQSxLQUFBTCxHQUFBd2QsUUFBQSxjQUFBbjJCLEtBQUE4bUQsUUFBQTl0QyxHQUE2Q2hiLEVBQUFtdEgsSUFBQTdySCxVQUFBb3NILGVBQUEsU0FBQS95RyxHQUE0QyxJQUFBSyxLQUFRamIsRUFBQTRhLEVBQUF3MUcsV0FBZ0IsR0FBQXB3SCxFQUFBLFFBQUFDLEVBQUEsRUFBaUJBLEVBQUFELEVBQUF1RCxPQUFXdEQsSUFBQSxDQUFLLElBQUEyTSxFQUFBNU0sRUFBQUMsR0FBV2diLEVBQUFyTyxFQUFBNGdILFVBQUE1Z0gsRUFBQW9rSCxVQUEwQi91SCxLQUFBbXVILFdBQUFuMUcsR0FBa0JBLEVBQUF4YixRQUFBUSxJQUFlNDdGLGVBQUEsS0FBa0JsbUIsSUFBQSxTQUFBLzZELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLFNBQUFDLEVBQUEyYSxFQUFBSyxFQUFBamIsR0FBa0Isc0JBQUE2RyxLQUFBb3FILE1BQUEsT0FBQXBxSCxLQUFBb3FILE1BQUExbkgsTUFBQSxLQUFBaEUsV0FBeUUsUUFBQXRGLEVBQUFzRixVQUFBaEMsT0FBQXFKLEtBQUFzTixFQUFBLEVBQUFLLEVBQUEsRUFBd0NBLEVBQUF0YSxFQUFJc2EsSUFBQSxDQUFLLElBQUF5aUMsRUFBQXozQyxVQUFBZ1YsR0FDbHQrQixJQUFBeWlDLE9BQUEsS0FBQUEsS0FBQSxnQkFBcUNBLEVBQUFuMkMsS0FBQXNWLElBQUE2Z0MsSUFBQTlpQyxNQUFBOGlDLEdBQUFwd0MsRUFBQTJOLEdBQUF5aUMsRUFBZ0MsSUFBQTlpQyxNQUFBLEdBQWEsUUFBQXZhLEVBQUEsRUFBQTBFLEVBQUEsRUFBQXFmLEVBQUEsRUFBb0JBLEVBQUF6akIsRUFBSXlqQixJQUFBLENBQUssSUFBQTlqQixFQUFBZ04sRUFBQThXLEdBQUF4SixFQUFBbmEsRUFBQUgsSUFBQXlFLEVBQUFqRCxFQUFBekIsRUFBQUksRUFBMkJzRSxFQUFBakQsRUFBQXpCLEVBQUFJLEVBQUFKLEVBQUF5QixFQUFZLE9BQUF5RixLQUFBa21CLEtBQUFwdEIsR0FBQXVhLEVBQXNCLElBQUF0TixFQUFBZ08sRUFBQSxnQkFBd0JoTyxFQUFBckwsVUFBQTRhLElBQUF0VixLQUFBc1YsSUFBQXZQLEVBQUFyTCxVQUFBeWlCLEtBQUFuZCxLQUFBbWQsS0FBQXBYLEVBQUFyTCxVQUFBNnBILFVBQUEsU0FBQXh3RyxFQUFBSyxFQUFBamIsR0FBMEYsT0FBQTRNLEVBQUFtdkYsb0JBQUEsWUFBQXgyRixXQUFBc0IsS0FBQThLLElBQUE5SyxLQUFBc1gsSUFBQXZELEVBQUE1YSxHQUFBaWIsSUFBOEVyTyxFQUFBckwsVUFBQXdnQyxLQUFBLFdBQTZCLE9BQUFuMUIsRUFBQW12RixvQkFBQSxPQUFBeDJGLFdBQUEsSUFBQUEsVUFBQWhDLE9BQUF0RCxFQUFBc0YsVUFBQSxHQUFBQSxVQUFBLEdBQUFBLFVBQUEsR0FBQUEsVUFBQSxRQUFBQSxVQUFBaEMsT0FBQXRELEVBQUFzRixVQUFBLEdBQUFBLFVBQUEsR0FBQUEsVUFBQSxHQUFBQSxVQUFBLEdBQUFBLFVBQUEsR0FBQUEsVUFBQSxZQUF3T3FILEVBQUFyTCxVQUFBOGUsSUFBQXhaLEtBQUF3WixJQUFBelQsRUFBQXJMLFVBQUFnSyxNQUFBMUUsS0FBQTBFLE1BQUFxQixFQUFBckwsVUFBQTg3RixLQUFBLFNBQUF6aUYsRUFBQUssRUFBQWpiLEdBQXdGLE9BQUE0TSxFQUFBbXZGLG9CQUFBLE9BQUF4MkYsV0FBQXZGLEdBQUFpYixFQUFBTCxNQUF5RGhPLEVBQUFyTCxVQUFBOEYsSUFBQVIsS0FBQVEsSUFBQXVGLEVBQUFyTCxVQUFBMnZILElBQUEsU0FBQXQyRyxFQUFBSyxHQUF3RCxPQUFBck8sRUFBQW12RixvQkFBQSxNQUFBeDJGLFdBQUF0RixFQUFBMmEsRUFBQUssSUFBcURyTyxFQUFBckwsVUFBQXFYLElBQUEsU0FBQWdDLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBaWEsRUFBQUssR0FBdUMzTixFQUFBbXZGLG9CQUFBLE1BQUF4MkYsV0FBdUMsSUFBQXkzQyxHQUFBcGlDLEVBQUFLLElBQUFqYixFQUFBaWIsSUFBQWYsRUFBQWphLEtBQTBCLE9BQUFzYSxFQUFBdGEsRUFBQWlhLEVBQUFqWSxLQUFBbXBILFVBQUFwdUUsRUFBQS84QyxFQUFBaWEsR0FBQWpZLEtBQUFtcEgsVUFBQXB1RSxFQUFBOWlDLEVBQUFqYSxHQUFBKzhDLEdBQTJEcHdDLEVBQUFyTCxVQUFBb1EsSUFBQSxXQUE0QixPQUFBL0UsRUFBQW12RixvQkFBQSxNQUFBeDJGLHFCQUFBLGFBQUFRLE1BQUFjLEtBQUE4SyxJQUFBcEksTUFBQSxLQUFBaEUsVUFBQSxJQUFBc0IsS0FBQThLLElBQUFwSSxNQUFBLEtBQUFoRSxZQUE0SXFILEVBQUFyTCxVQUFBNGMsSUFBQSxXQUE0QixPQUFBdlIsRUFBQW12RixvQkFBQSxNQUFBeDJGLHFCQUFBLGFBQUFRLE1BQUFjLEtBQUFzWCxJQUFBNVUsTUFBQSxLQUFBaEUsVUFBQSxJQUFBc0IsS0FBQXNYLElBQUE1VSxNQUFBLEtBQUFoRSxZQUE0SXFILEVBQUFyTCxVQUFBNHZILEtBQUEsU0FBQXYyRyxFQUFBSyxFQUFBamIsR0FBa0MsT0FBQTRNLEVBQUFtdkYsb0JBQUEsT0FBQXgyRixXQUFBdEQsS0FBQTJXLElBQUFnQyxFQUFBSyxFQUFBamIsRUFBQSxNQUFtRTRNLEVBQUFyTCxVQUFBMkYsSUFBQUwsS0FBQUssSUFBQTBGLEVBQUFyTCxVQUFBMFgsTUFBQXBTLEtBQUFvUyxNQUFBck0sRUFBQXJMLFVBQUE2dkgsR0FBQSxTQUFBeDJHLEdBQWtGLE9BQUFBLEtBQVdoTyxFQUFBckwsVUFBQXdyQixLQUFBbG1CLEtBQUFrbUIsS0FBQTlSLEVBQUF4YixRQUFBbU4sSUFBMENpdkYsZUFBQSxLQUFrQmptQixJQUFBLFNBQUFoN0QsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsZ0JBQXdCM2EsRUFBQXNCLFVBQUE4dkgsYUFBQSxTQUFBejJHLEVBQUFLLEVBQUFqYixHQUF5QyxPQUFBaUMsZ0JBQUFoQyxFQUFBLElBQUFBLEVBQUFzZ0gsT0FBQXQrRyxLQUFBc0QsV0FBQSxJQUFBdEYsRUFBQXNnSCxPQUFBM2xHLEVBQUFLLEVBQUFqYixJQUEwRWliLEVBQUF4YixRQUFBUSxJQUFlNDdGLGVBQUEsS0FBa0JobUIsSUFBQSxTQUFBajdELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyTSxFQUFBZ08sRUFBQSxnQkFBQXZXLEVBQUEsS0FBQXFmLEVBQUEsRUFBQTlqQixFQUFBLEdBQUFHLEVBQUEsU0FBQTZhLEdBQThFLFlBQUEvVCxLQUFBcWQsSUFBQXRKLEVBQUEvVCxLQUFBQyxNQUFrQzhGLEVBQUFyTCxVQUFBdTFDLE1BQUEsU0FBQWw4QixFQUFBSyxFQUFBamIsR0FBa0MsR0FBQWliLEtBQUEsRUFBQWpiLEtBQUEsUUFBQUMsRUFBQSxDQUEwQkEsRUFBQSxJQUFBOEYsTUFBQTFCLEVBQUEsR0FBaUIsUUFBQXVJLEVBQUEsRUFBWUEsRUFBQXZJLEVBQUEsRUFBTXVJLElBQUEzTSxFQUFBMk0sR0FBQS9GLEtBQUFpN0IsU0FBdUJsbkIsRUFBQSxJQUFBQSxNQUFBSyxFQUFBLElBQUFBLE1BQUFqYixFQUFBLElBQUFBLE1BQW9DLFFBQUFvQixFQUFBaEIsRUFBQXFCLEVBQUFpVixFQUFBalcsRUFBQWlCLEVBQUFtRixLQUFBMEUsTUFBQXFQLEdBQUEvWixFQUFBZ0csS0FBQTBFLE1BQUEwUCxHQUFBc2pDLEVBQUExM0MsS0FBQTBFLE1BQUF2TCxHQUFBeTNDLEVBQUE3OEIsRUFBQWxaLEVBQUFnOUMsRUFBQXpqQyxFQUFBcGEsRUFBQWc3QixFQUFBNzdCLEVBQUF1K0MsRUFBQXJlLEVBQUEsRUFBQUMsRUFBQSxHQUFBMGUsRUFBQSxFQUFpR0EsRUFBQW43QixFQUFJbTdCLElBQUEsQ0FBSyxJQUFBMXNDLEVBQUF6USxHQUFBYixHQUFwWCxJQUFvWDA5QyxHQUFwWCxHQUEwWW45QyxFQUFBckIsRUFBQTAzQyxHQUFBcjNDLEVBQUFMLEVBQUEyK0MsR0FBQWo5QyxFQUFBeEIsRUFBQWtTLEVBQUE5TixHQUFBNUMsR0FBQUwsR0FBQW5CLEVBQUFrUyxFQUFBLEVBQUE5TixHQUFBNUMsR0FBQWlWLEVBQUF6VyxFQUFBa1MsRUFBMVksR0FBMFk5TixHQUFBcVMsR0FBQXRWLEdBQUFuQixFQUFBa1MsRUFBMVksR0FBMFksRUFBQTlOLEdBQUFxUyxHQUFBalYsR0FBQXJCLEdBQUFzVyxFQUFBalYsR0FBQWlWLEVBQUF6VyxHQUFBa1MsR0FBMVksS0FBMFk5TixHQUFBcVMsR0FBQXRWLEdBQUFuQixFQUFBa1MsRUFBQSxFQUFBOU4sR0FBQXFTLEdBQUFqVyxFQUFBUixFQUFBa1MsRUFBMVksR0FBMFk5TixHQUFBNUQsR0FBQVcsR0FBQW5CLEVBQUFrUyxFQUExWSxHQUEwWSxFQUFBOU4sR0FBQTVELEdBQUFpVyxHQUFBdFcsR0FBQUssRUFBQWlXLEdBQUFqVixHQUFBMUIsRUFBQTg3QixJQUFBbmxCLEVBQUFqVixHQUFBeStCLEdBQUF6K0IsRUFBQTArQixLQUFBdmdDLEVBQUE4QixJQUFBLEVBQUFiLElBQUEsRUFBQTY5QyxHQUFBLEVBQUFILElBQUEsRUFBQTFpQixHQUFBLEdBQUE0YixHQUFBLFFBQUEvMUMsSUFBQSsxQyxLQUFBaUgsR0FBQSxJQUFBNzlDLElBQUE2OUMsS0FBQTdpQixHQUFBLElBQUEwaUIsSUFBQTFpQixLQUF3USxPQUFBcUUsR0FBU3R6QixFQUFBckwsVUFBQSt2SCxZQUFBLFNBQUExMkcsRUFBQUssR0FBdUNMLEVBQUEsSUFBQThJLEVBQUE5SSxHQUFBSyxFQUFBLElBQUFyYixFQUFBcWIsSUFBc0JyTyxFQUFBckwsVUFBQWd3SCxVQUFBLFNBQUEzMkcsR0FBbUMsSUFBQUssRUFBQSxXQUFpQixJQUFBTCxFQUFBSyxFQUFBamIsRUFBQSxXQUE0QyxPQUFPd3hILFFBQUEsU0FBQXZ4SCxHQUFvQmdiLEVBQUFMLEdBQUEsTUFBQTNhLEVBQUE0RyxLQUFBaTdCLFNBQUE5aEMsRUFBQUMsS0FBQSxHQUFvQ3d4SCxRQUFBLFdBQW9CLE9BQUE3MkcsR0FBU2luQixLQUFBLFdBQWlCLE9BQUE1bUIsR0FBekosUUFBeUpBLEVBQXpKLFlBQXlKamIsT0FBMUssR0FBcU1pYixFQUFBdTJHLFFBQUE1MkcsR0FBQTNhLEVBQUEsSUFBQThGLE1BQUExQixFQUFBLEdBQThCLFFBQUFyRSxFQUFBLEVBQVlBLEVBQUFxRSxFQUFBLEVBQU1yRSxJQUFBQyxFQUFBRCxHQUFBaWIsRUFBQTRtQixRQUFrQjVtQixFQUFBeGIsUUFBQW1OLElBQWVpdkYsZUFBQSxLQUFrQi9sQixJQUFBLFNBQUFsN0QsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsZ0JBQUFoTyxFQUFBZ08sRUFBQSxxQkFBaUQzYSxFQUFBc2dILE9BQUEsV0FBb0IsSUFBQTNsRyxFQUFBSyxFQUFBamIsRUFBVXVGLFVBQUEsYUFBQXRGLEdBQUFnQyxLQUFBeXZILEdBQUFuc0gsVUFBQSxHQUFBcVYsRUFBQXJWLFVBQUEsU0FBQTBWLEVBQUExVixVQUFBLFNBQUF2RixFQUFBdUYsVUFBQSxXQUFBcVYsRUFBQXJWLFVBQUEsTUFBQTBWLEVBQUExVixVQUFBLE1BQUF2RixFQUFBdUYsVUFBQSxPQUFBdEQsS0FBQTQ1QixFQUFBamhCLEVBQUEzWSxLQUFBaStCLEVBQUFqbEIsRUFBQWhaLEtBQUFrK0IsRUFBQW5nQyxHQUFrTUMsRUFBQXNnSCxPQUFBaC9HLFVBQUFZLFNBQUEsV0FBd0MsNkJBQUFGLEtBQUE0NUIsRUFBQSxLQUFBNTVCLEtBQUFpK0IsRUFBQSxLQUFBaitCLEtBQUFrK0IsRUFBQSxLQUFnRWxnQyxFQUFBc2dILE9BQUFoL0csVUFBQW9CLElBQUEsU0FBQWlZLEVBQUFLLEVBQUFqYixHQUF3QyxPQUFBNGEsYUFBQTNhLEVBQUFzZ0gsUUFBQXQrRyxLQUFBNDVCLEVBQUFqaEIsRUFBQWloQixHQUFBLEVBQUE1NUIsS0FBQWkrQixFQUFBdGxCLEVBQUFzbEIsR0FBQSxFQUFBaitCLEtBQUFrK0IsRUFBQXZsQixFQUFBdWxCLEdBQUEsRUFBQWwrQixNQUFBMlksYUFBQTdVLE9BQUE5RCxLQUFBNDVCLEVBQUFqaEIsRUFBQSxNQUFBM1ksS0FBQWkrQixFQUFBdGxCLEVBQUEsTUFBQTNZLEtBQUFrK0IsRUFBQXZsQixFQUFBLE1BQUEzWSxZQUFBNDVCLEVBQUFqaEIsR0FBQSxFQUFBM1ksS0FBQWkrQixFQUFBamxCLEdBQUEsRUFBQWhaLEtBQUFrK0IsRUFBQW5nQyxHQUFBLEVBQUFpQyxPQUFnTWhDLEVBQUFzZ0gsT0FBQWgvRyxVQUFBMGhDLEtBQUEsV0FBb0MsT0FBQWhoQyxLQUFBeXZILEdBQUEsSUFBQXp4SCxFQUFBc2dILE9BQUF0K0csS0FBQXl2SCxJQUFBenZILEtBQUE0NUIsRUFBQTU1QixLQUFBaStCLEVBQUFqK0IsS0FBQWsrQixJQUFBLElBQUFsZ0MsRUFBQXNnSCxPQUFBdCtHLEtBQUE0NUIsRUFBQTU1QixLQUFBaStCLEVBQUFqK0IsS0FBQWsrQixJQUErRmxnQyxFQUFBc2dILE9BQUFoL0csVUFBQTZJLElBQUEsU0FBQXdRLEVBQUFLLEVBQUFqYixHQUF3QyxPQUFBNGEsYUFBQTNhLEVBQUFzZ0gsUUFBQXQrRyxLQUFBNDVCLEdBQUFqaEIsRUFBQWloQixHQUFBLEVBQUE1NUIsS0FBQWkrQixHQUFBdGxCLEVBQUFzbEIsR0FBQSxFQUFBaitCLEtBQUFrK0IsR0FBQXZsQixFQUFBdWxCLEdBQUEsRUFBQWwrQixNQUFBMlksYUFBQTdVLE9BQUE5RCxLQUFBNDVCLEdBQUFqaEIsRUFBQSxNQUFBM1ksS0FBQWkrQixHQUFBdGxCLEVBQUEsTUFBQTNZLEtBQUFrK0IsR0FBQXZsQixFQUFBLE1BQUEzWSxZQUFBNDVCLEdBQUFqaEIsR0FBQSxFQUFBM1ksS0FBQWkrQixHQUFBamxCLEdBQUEsRUFBQWhaLEtBQUFrK0IsR0FBQW5nQyxHQUFBLEVBQUFpQyxPQUF5TWhDLEVBQUFzZ0gsT0FBQWgvRyxVQUFBd3NGLElBQUEsU0FBQW56RSxFQUFBSyxFQUFBamIsR0FBd0MsT0FBQTRhLGFBQUEzYSxFQUFBc2dILFFBQUF0K0csS0FBQTQ1QixHQUFBamhCLEVBQUFpaEIsR0FBQSxFQUFBNTVCLEtBQUFpK0IsR0FBQXRsQixFQUFBc2xCLEdBQUEsRUFBQWorQixLQUFBaytCLEdBQUF2bEIsRUFBQXVsQixHQUFBLEVBQUFsK0IsTUFBQTJZLGFBQUE3VSxPQUFBOUQsS0FBQTQ1QixHQUFBamhCLEVBQUEsTUFBQTNZLEtBQUFpK0IsR0FBQXRsQixFQUFBLE1BQUEzWSxLQUFBaytCLEdBQUF2bEIsRUFBQSxNQUFBM1ksWUFBQTQ1QixHQUFBamhCLEdBQUEsRUFBQTNZLEtBQUFpK0IsR0FBQWpsQixHQUFBLEVBQUFoWixLQUFBaytCLEdBQUFuZ0MsR0FBQSxFQUFBaUMsT0FBeU1oQyxFQUFBc2dILE9BQUFoL0csVUFBQW0xQyxLQUFBLFNBQUE5N0IsR0FBcUMsdUJBQUFBLEdBQUE5RixTQUFBOEYsSUFBQTNZLEtBQUE0NUIsR0FBQWpoQixFQUFBM1ksS0FBQWkrQixHQUFBdGxCLEVBQUEzWSxLQUFBaytCLEdBQUF2bEIsRUFBQTNZLE9BQUF1USxRQUFBQyxLQUFBLHFFQUFBeFEsT0FBb0toQyxFQUFBc2dILE9BQUFoL0csVUFBQW1qSCxJQUFBLFNBQUE5cEcsR0FBb0MsdUJBQUFBLEdBQUE5RixTQUFBOEYsR0FBQSxJQUFBQSxHQUFBcEksUUFBQUMsS0FBQSwwQ0FBQXhRLFlBQUE0NUIsR0FBQWpoQixFQUFBM1ksS0FBQWkrQixHQUFBdGxCLEVBQUEzWSxLQUFBaytCLEdBQUF2bEIsRUFBQTNZLE9BQUF1USxRQUFBQyxLQUFBLG9FQUFBeFEsT0FBdU9oQyxFQUFBc2dILE9BQUFoL0csVUFBQTJ2SCxJQUFBLFdBQW1DLE9BQUFycUgsS0FBQWttQixLQUFBOXFCLEtBQUEwdkgsVUFBK0IxeEgsRUFBQXNnSCxPQUFBaC9HLFVBQUFvd0gsTUFBQSxXQUFxQyxJQUFBLzJHLEVBQUEzWSxLQUFBNDVCLEVBQUE1Z0IsRUFBQWhaLEtBQUFpK0IsRUFBQWxnQyxFQUFBaUMsS0FBQWsrQixFQUErQixPQUFBdmxCLElBQUFLLElBQUFqYixLQUFtQkMsRUFBQXNnSCxPQUFBaC9HLFVBQUEwVSxJQUFBLFNBQUEyRSxFQUFBSyxFQUFBamIsR0FBd0MsT0FBQTRhLGFBQUEzYSxFQUFBc2dILE9BQUF0K0csS0FBQWdVLElBQUEyRSxFQUFBaWhCLEVBQUFqaEIsRUFBQXNsQixFQUFBdGxCLEVBQUF1bEIsR0FBQWwrQixLQUFBNDVCLEdBQUFqaEIsR0FBQSxHQUFBM1ksS0FBQWkrQixHQUFBamxCLEdBQUEsR0FBQWhaLEtBQUFrK0IsR0FBQW5nQyxHQUFBLElBQTZGQyxFQUFBc2dILE9BQUFoL0csVUFBQXF3SCxNQUFBLFNBQUFoM0csR0FBc0MsSUFBQUssRUFBQWhaLEtBQUFpK0IsRUFBQXRsQixFQUFBdWxCLEVBQUFsK0IsS0FBQWsrQixFQUFBdmxCLEVBQUFzbEIsRUFBQWxnQyxFQUFBaUMsS0FBQWsrQixFQUFBdmxCLEVBQUFpaEIsRUFBQTU1QixLQUFBNDVCLEVBQUFqaEIsRUFBQXVsQixFQUFBdnpCLEVBQUEzSyxLQUFBNDVCLEVBQUFqaEIsRUFBQXNsQixFQUFBaitCLEtBQUFpK0IsRUFBQXRsQixFQUFBaWhCLEVBQTRFLE9BQUE1NUIsS0FBQXl2SCxHQUFBLElBQUF6eEgsRUFBQXNnSCxPQUFBdCtHLEtBQUF5dkgsSUFBQXoyRyxFQUFBamIsRUFBQTRNLElBQUEsSUFBQTNNLEVBQUFzZ0gsT0FBQXRsRyxFQUFBamIsRUFBQTRNLElBQWlFM00sRUFBQXNnSCxPQUFBaC9HLFVBQUF3Z0MsS0FBQSxTQUFBbm5CLEdBQXFDLE9BQUFBLEVBQUFxb0IsT0FBQThxRCxJQUFBOXJGLE1BQUFpdkgsT0FBZ0NqeEgsRUFBQXNnSCxPQUFBaC9HLFVBQUFzd0gsVUFBQSxXQUF5QyxJQUFBajNHLEVBQUEzWSxLQUFBaXZILE1BQWlCLFdBQUF0MkcsR0FBQTNZLEtBQUF5MEMsS0FBQSxFQUFBOTdCLEdBQUEzWSxNQUFrQ2hDLEVBQUFzZ0gsT0FBQWgvRyxVQUFBdXdILE1BQUEsU0FBQWwzRyxHQUFzQyxJQUFBSyxFQUFBaFosS0FBQTB2SCxRQUFtQixPQUFBMTJHLEVBQUFMLEtBQUEzWSxLQUFBeWlILElBQUE3OUcsS0FBQWttQixLQUFBOVIsSUFBQXk3QixLQUFBOTdCLEdBQUEzWSxNQUFrRGhDLEVBQUFzZ0gsT0FBQWgvRyxVQUFBd3dILE9BQUEsU0FBQW4zRyxHQUF1QyxPQUFBM1ksS0FBQTR2SCxZQUFBbjdFLEtBQUE5N0IsSUFBZ0MzYSxFQUFBc2dILE9BQUFoL0csVUFBQXl3SCxRQUFBLFdBQXVDLElBQUFwM0csRUFBQS9ULEtBQUFvckgsTUFBQWh3SCxLQUFBaStCLEVBQUFqK0IsS0FBQTQ1QixHQUFnQyxPQUFBNTVCLEtBQUF5dkgsR0FBQXp2SCxLQUFBeXZILEdBQUFRLGFBQUF0M0csTUFBeUMzYSxFQUFBc2dILE9BQUFoL0csVUFBQTYrRyxPQUFBLFNBQUF4bEcsR0FBdUMsSUFBQUssRUFBQWhaLEtBQUErdkgsVUFBQXAzRyxFQUF1QjNZLEtBQUF5dkgsS0FBQXoyRyxFQUFBaFosS0FBQXl2SCxHQUFBbFEsV0FBQXZtRyxJQUFtQyxJQUFBamIsRUFBQWlDLEtBQUFpdkgsTUFBaUIsT0FBQWp2SCxLQUFBNDVCLEVBQUFoMUIsS0FBQXFkLElBQUFqSixHQUFBamIsRUFBQWlDLEtBQUFpK0IsRUFBQXI1QixLQUFBRSxJQUFBa1UsR0FBQWpiLEVBQUFpQyxNQUFzRGhDLEVBQUFzZ0gsT0FBQWgvRyxVQUFBNHdILGFBQUEsU0FBQXYzRyxHQUE2QyxJQUFBSyxFQUFBaFosS0FBQWdVLElBQUEyRSxJQUFBM1ksS0FBQWl2SCxNQUFBdDJHLEVBQUFzMkcsT0FBQWx4SCxFQUFBNkcsS0FBQXVySCxLQUFBdnJILEtBQUFzWCxJQUFBLEVBQUF0WCxLQUFBOEssS0FBQSxFQUFBc0osS0FBK0UsT0FBQWhaLEtBQUF5dkgsR0FBQXp2SCxLQUFBeXZILEdBQUFRLGFBQUFseUgsTUFBeUNDLEVBQUFzZ0gsT0FBQWgvRyxVQUFBODdGLEtBQUEsU0FBQXppRixFQUFBSyxFQUFBamIsRUFBQTRNLEdBQTJDLE9BQUFnTyxhQUFBM2EsRUFBQXNnSCxPQUFBdCtHLEtBQUFvN0YsS0FBQXppRixFQUFBaWhCLEVBQUFqaEIsRUFBQXNsQixFQUFBdGxCLEVBQUF1bEIsRUFBQWxsQixJQUFBaFosS0FBQTQ1QixJQUFBamhCLEVBQUEzWSxLQUFBNDVCLEdBQUFqdkIsR0FBQSxFQUFBM0ssS0FBQWkrQixJQUFBamxCLEVBQUFoWixLQUFBaStCLEdBQUF0ekIsR0FBQSxFQUFBM0ssS0FBQWsrQixJQUFBbmdDLEVBQUFpQyxLQUFBaytCLEdBQUF2ekIsR0FBQSxFQUFBM0ssT0FBcUloQyxFQUFBc2dILE9BQUFoL0csVUFBQWdULE1BQUEsV0FBcUMsT0FBQXRTLEtBQUE0NUIsR0FBQSxFQUFBNTVCLEtBQUFpK0IsR0FBQSxFQUFBaitCLEtBQUFrK0IsR0FBQSxJQUFzQ2xnQyxFQUFBc2dILE9BQUFoL0csVUFBQWkvQyxPQUFBLFNBQUE1bEMsRUFBQUssRUFBQWpiLEdBQTJDLElBQUE0TSxFQUFBc04sRUFBQUssRUFBVSxPQUFBSyxhQUFBM2EsRUFBQXNnSCxRQUFBM3pHLEVBQUFnTyxFQUFBaWhCLEdBQUEsRUFBQTNoQixFQUFBVSxFQUFBc2xCLEdBQUEsRUFBQTNsQixFQUFBSyxFQUFBdWxCLEdBQUEsR0FBQXZsQixhQUFBN1UsT0FBQTZHLEVBQUFnTyxFQUFBLE1BQUFWLEVBQUFVLEVBQUEsTUFBQUwsRUFBQUssRUFBQSxRQUFBaE8sRUFBQWdPLEdBQUEsRUFBQVYsRUFBQWUsR0FBQSxFQUFBVixFQUFBdmEsR0FBQSxHQUFBaUMsS0FBQTQ1QixJQUFBanZCLEdBQUEzSyxLQUFBaStCLElBQUFobUIsR0FBQWpZLEtBQUFrK0IsSUFBQTVsQixHQUF1S3RhLEVBQUFzZ0gsT0FBQThSLFVBQUEsU0FBQXozRyxFQUFBSyxHQUFrQyxnQkFBQUEsTUFBQSxPQUFBaGIsRUFBQXNnSCxPQUFBdGxHLEVBQUFwVSxLQUFBcWQsSUFBQXRKLEdBQUFLLEVBQUFwVSxLQUFBRSxJQUFBNlQsR0FBQSxJQUFxRTNhLEVBQUFzZ0gsT0FBQStSLFdBQUEsU0FBQTEzRyxFQUFBSyxFQUFBamIsUUFBcUMsSUFBQUEsTUFBQSxHQUFrQixJQUFBNE0sRUFBQS9GLEtBQUFxZCxJQUFBakosR0FBQWYsRUFBQXJULEtBQUFFLElBQUFrVSxHQUFBVixFQUFBMVQsS0FBQXFkLElBQUF0SixHQUFBb2lDLEVBQUFuMkMsS0FBQUUsSUFBQTZULEdBQTRELFdBQUEzYSxFQUFBc2dILE9BQUF2Z0gsRUFBQWc5QyxFQUFBOWlDLEdBQUFsYSxFQUFBdWEsRUFBQXZhLEVBQUFnOUMsRUFBQXB3QyxJQUFzQzNNLEVBQUFzZ0gsT0FBQWdTLFNBQUEsV0FBOEIsT0FBQXR3SCxLQUFBb3dILFVBQUF4ckgsS0FBQWk3QixTQUFBbDFCLEVBQUF5OEYsU0FBOENwcEcsRUFBQXNnSCxPQUFBaVMsU0FBQSxXQUE4QixJQUFBNTNHLEVBQUEvVCxLQUFBaTdCLFNBQUFsMUIsRUFBQXk4RixPQUFBcHVGLEVBQUEsRUFBQXBVLEtBQUFpN0IsU0FBQSxFQUFBOWhDLEVBQUE2RyxLQUFBa21CLEtBQUEsRUFBQTlSLEtBQUFmLEVBQUFsYSxFQUFBNkcsS0FBQXFkLElBQUF0SixHQUFBTCxFQUFBdmEsRUFBQTZHLEtBQUFFLElBQUE2VCxHQUFvRyxXQUFBM2EsRUFBQXNnSCxPQUFBcm1HLEVBQUFLLEVBQUFVLElBQTJCaGIsRUFBQXNnSCxPQUFBbjJHLElBQUEsU0FBQXdRLEVBQUFLLEVBQUFqYixHQUE4QixPQUFBQSxJQUFBMkMsSUFBQWlZLEdBQUE1YSxFQUFBNGEsRUFBQXFvQixPQUFBampDLEVBQUFvSyxJQUFBNlEsR0FBQWpiLEdBQXdDQyxFQUFBc2dILE9BQUF4eUIsSUFBQSxTQUFBbnpFLEVBQUFLLEVBQUFqYixHQUE4QixPQUFBQSxJQUFBMkMsSUFBQWlZLEdBQUE1YSxFQUFBNGEsRUFBQXFvQixPQUFBampDLEVBQUErdEYsSUFBQTl5RSxHQUFBamIsR0FBd0NDLEVBQUFzZ0gsT0FBQTdwRSxLQUFBLFNBQUE5N0IsRUFBQUssRUFBQWpiLEdBQStCLE9BQUFBLElBQUEyQyxJQUFBaVksR0FBQTVhLEVBQUE0YSxFQUFBcW9CLE9BQUFqakMsRUFBQTAyQyxLQUFBejdCLEdBQUFqYixHQUF5Q0MsRUFBQXNnSCxPQUFBbUUsSUFBQSxTQUFBOXBHLEVBQUFLLEVBQUFqYixHQUE4QixPQUFBQSxJQUFBMkMsSUFBQWlZLEdBQUE1YSxFQUFBNGEsRUFBQXFvQixPQUFBampDLEVBQUEwa0gsSUFBQXpwRyxHQUFBamIsR0FBd0NDLEVBQUFzZ0gsT0FBQXRxRyxJQUFBLFNBQUEyRSxFQUFBSyxHQUE0QixPQUFBTCxFQUFBM0UsSUFBQWdGLElBQWdCaGIsRUFBQXNnSCxPQUFBcVIsTUFBQSxTQUFBaDNHLEVBQUFLLEdBQThCLE9BQUFMLEVBQUFnM0csTUFBQTMyRyxJQUFrQmhiLEVBQUFzZ0gsT0FBQXgrRSxLQUFBLFNBQUFubkIsRUFBQUssR0FBNkIsT0FBQUwsRUFBQW1uQixLQUFBOW1CLElBQWlCaGIsRUFBQXNnSCxPQUFBbGpCLEtBQUEsU0FBQXppRixFQUFBSyxFQUFBamIsRUFBQUMsR0FBaUMsT0FBQUEsSUFBQTBDLElBQUFpWSxHQUFBM2EsRUFBQTJhLEVBQUFxb0IsT0FBQWhqQyxFQUFBbzlGLEtBQUFwaUYsRUFBQWpiLEdBQUFDLEdBQTJDQSxFQUFBc2dILE9BQUEyUSxJQUFBLFNBQUF0MkcsR0FBMEIsSUFBQUssRUFBQUwsRUFBQWloQixFQUFBNzdCLEVBQUE0YSxFQUFBc2xCLEVBQUFqZ0MsRUFBQTJhLEVBQUF1bEIsRUFBQXZ6QixFQUFBcU8sSUFBQWpiLElBQUFDLElBQW9DLE9BQUE0RyxLQUFBa21CLEtBQUFuZ0IsSUFBb0JxTyxFQUFBeGIsUUFBQVEsRUFBQXNnSCxTQUFzQjVpQixvQkFBQSxHQUFBOUIsZUFBQSxLQUF5QzlsQixJQUFBLFNBQUFuN0QsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsZ0JBQUFoTyxHQUFBLEVBQUFzTixHQUFBLEVBQUFLLEVBQUEsRUFBQXlpQyxFQUFBLFdBQW1ELElBQUFwaUMsRUFBQUssRUFBQWpiLEVBQUEsV0FBNEMsT0FBT3d4SCxRQUFBLFNBQUF2eEgsR0FBb0JnYixFQUFBTCxHQUFBLE1BQUEzYSxFQUFBNEcsS0FBQWk3QixTQUFBOWhDLEVBQUFDLEtBQUEsR0FBb0N3eEgsUUFBQSxXQUFvQixPQUFBNzJHLEdBQVNpbkIsS0FBQSxXQUFpQixPQUFBNW1CLEdBQXpKLFFBQXlKQSxFQUF6SixZQUF5SmpiLE9BQTVNLEdBQXVPQyxFQUFBc0IsVUFBQWt4SCxXQUFBLFNBQUE3M0csR0FBbUNvaUMsRUFBQXcwRSxRQUFBNTJHLEdBQUFoTyxHQUFBLEVBQUFzTixHQUFBLEdBQXVCamEsRUFBQXNCLFVBQUF1Z0MsT0FBQSxTQUFBbG5CLEVBQUFLLEdBQWtDLElBQUFqYixFQUFNLEdBQUFBLEVBQUE0TSxFQUFBb3dDLEVBQUFuYixPQUFBaDdCLEtBQUFpN0IsY0FBQSxJQUFBbG5CLEVBQUEsT0FBQTVhLEVBQWtELFlBQUFpYixFQUFBLE9BQUFMLGFBQUE3VSxNQUFBNlUsRUFBQS9ULEtBQUEwRSxNQUFBdkwsRUFBQTRhLEVBQUFyWCxTQUFBdkQsRUFBQTRhLEVBQXNFLEdBQUFBLEVBQUFLLEVBQUEsQ0FBUSxJQUFBaGIsRUFBQTJhLEVBQVFBLEVBQUFLLElBQUFoYixFQUFRLE9BQUFELEdBQUFpYixFQUFBTCxNQUFpQjNhLEVBQUFzQixVQUFBbXhILGVBQUEsU0FBQTkzRyxFQUFBSyxHQUEwQyxJQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFvd0MsRUFBWSxHQUFBOWlDLEVBQUFsYSxFQUFBdWEsRUFBQUwsR0FBQSxNQUFjLENBQUssR0FBR2phLEVBQUFnQyxLQUFBNi9CLE9BQUEsS0FBQWwxQixFQUFBM0ssS0FBQTYvQixPQUFBLEtBQUFrYixFQUFBLzhDLElBQUEyTSxVQUFnRG93QyxHQUFBLEdBQVlBLEVBQUFuMkMsS0FBQWttQixNQUFBLEVBQUFsbUIsS0FBQVEsSUFBQTIxQyxNQUFBaDlDLEVBQUFDLEVBQUErOEMsRUFBQXppQyxFQUFBM04sRUFBQW93QyxFQUFBOWlDLEdBQUEsRUFBK0MsSUFBQXZhLEVBQUFpYixHQUFBLEVBQVcsT0FBQTVhLEdBQUFpYixHQUFBLEdBQUF0YixHQUFrQnNiLEVBQUF4YixRQUFBUSxJQUFlNDdGLGVBQUEsS0FBa0I3bEIsSUFBQSxTQUFBcDdELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUFBaE8sRUFBQWdPLEVBQUEscUJBQWlEM2EsRUFBQXNCLFVBQUFveEgsV0FBQS9sSCxFQUFBMjhGLFFBQUF0cEcsRUFBQXNCLFVBQUE2d0gsS0FBQSxTQUFBeDNHLEdBQThELE9BQUEzWSxLQUFBaXdILGFBQUFyckgsS0FBQXVySCxLQUFBeDNHLEtBQXVDM2EsRUFBQXNCLFVBQUFxeEgsS0FBQSxTQUFBaDRHLEdBQThCLE9BQUEzWSxLQUFBaXdILGFBQUFyckgsS0FBQStySCxLQUFBaDRHLEtBQXVDM2EsRUFBQXNCLFVBQUFrZ0gsS0FBQSxTQUFBN21HLEdBQThCLE9BQUEzWSxLQUFBaXdILGFBQUFyckgsS0FBQTQ2RyxLQUFBN21HLEtBQXVDM2EsRUFBQXNCLFVBQUEwd0gsTUFBQSxTQUFBcjNHLEVBQUFLLEdBQWlDLE9BQUFoWixLQUFBaXdILGFBQUFyckgsS0FBQW9ySCxNQUFBcjNHLEVBQUFLLEtBQTBDaGIsRUFBQXNCLFVBQUEyaUIsSUFBQSxTQUFBdEosR0FBNkIsT0FBQS9ULEtBQUFxZCxJQUFBamlCLEtBQUF1L0csV0FBQTVtRyxLQUFvQzNhLEVBQUFzQixVQUFBd0YsSUFBQSxTQUFBNlQsR0FBNkIsT0FBQS9ULEtBQUFFLElBQUE5RSxLQUFBdS9HLFdBQUE1bUcsS0FBb0MzYSxFQUFBc0IsVUFBQXNsRyxJQUFBLFNBQUFqc0YsR0FBNkIsT0FBQS9ULEtBQUFnZ0csSUFBQTVrRyxLQUFBdS9HLFdBQUE1bUcsS0FBb0MzYSxFQUFBc0IsVUFBQXN4SCxRQUFBLFNBQUFqNEcsR0FBaUMsT0FBQUEsRUFBQWhPLEVBQUE2OEYsWUFBc0J4cEcsRUFBQXNCLFVBQUF1eEgsUUFBQSxTQUFBbDRHLEdBQWlDLE9BQUFBLEVBQUFoTyxFQUFBNDhGLFlBQXNCdnBHLEVBQUFzQixVQUFBd3hILFVBQUEsU0FBQW40RyxHQUFtQ0EsSUFBQWhPLEVBQUEwOEYsU0FBQTF1RixJQUFBaE8sRUFBQTI4RixVQUFBdG5HLEtBQUEwd0gsV0FBQS8zRyxJQUFrRDNhLEVBQUFzQixVQUFBaWdILFdBQUEsU0FBQTVtRyxHQUFvQyxPQUFBM1ksS0FBQTB3SCxhQUFBL2xILEVBQUEwOEYsUUFBQTF1RixFQUFBaE8sRUFBQTQ4RixXQUFBNXVGLEdBQW9EM2EsRUFBQXNCLFVBQUF5eEgsV0FBQSxTQUFBcDRHLEdBQW9DLE9BQUEzWSxLQUFBMHdILGFBQUEvbEgsRUFBQTI4RixRQUFBM3VGLEVBQUFoTyxFQUFBNjhGLFdBQUE3dUYsR0FBb0QzYSxFQUFBc0IsVUFBQTJ3SCxhQUFBLFNBQUF0M0csR0FBc0MsT0FBQTNZLEtBQUEwd0gsYUFBQS9sSCxFQUFBMDhGLFFBQUExdUYsRUFBQWhPLEVBQUE2OEYsV0FBQTd1RixHQUFvREssRUFBQXhiLFFBQUFRLElBQWUwOUYsb0JBQUEsR0FBQTlCLGVBQUEsS0FBeUM1bEIsSUFBQSxTQUFBcjdELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUF3QjNhLEVBQUFzQixVQUFBMDZHLFVBQUEsU0FBQXJoRyxFQUFBSyxHQUFvQyxPQUFBaGIsRUFBQTg3RixvQkFBQSxZQUFBeDJGLFdBQUF0RCxLQUFBb21HLFVBQUE0VCxVQUFBMXlHLE1BQUF0SCxLQUFBb21HLFVBQUE5aUcsWUFBNkd0RixFQUFBc0IsVUFBQW02RyxZQUFBLFNBQUE5Z0csR0FBcUMsT0FBQTNhLEVBQUE4N0Ysb0JBQUEsY0FBQXgyRixXQUFBdEQsS0FBQW9tRyxVQUFBcVQsWUFBQW55RyxNQUFBdEgsS0FBQW9tRyxVQUFBOWlHLFlBQWlIdEYsRUFBQXNCLFVBQUFvNkcsU0FBQSxTQUFBL2dHLEdBQWtDLE9BQUEzYSxFQUFBODdGLG9CQUFBLFdBQUF4MkYsV0FBQXRELEtBQUFvbUcsVUFBQXNULFNBQUFweUcsTUFBQXRILEtBQUFvbUcsVUFBQTlpRyxZQUEyR3RGLEVBQUFzQixVQUFBczZHLFVBQUEsU0FBQWpoRyxHQUFtQyxPQUFBM2EsRUFBQTg3RixvQkFBQSxZQUFBeDJGLFdBQUF0RCxLQUFBb21HLFVBQUF3VCxVQUFBdHlHLE1BQUF0SCxLQUFBb21HLFVBQUE5aUcsWUFBNkd0RixFQUFBc0IsVUFBQTg2RyxVQUFBLFNBQUF6aEcsR0FBbUMsT0FBQTNhLEVBQUE4N0Ysb0JBQUEsWUFBQXgyRixXQUFBLElBQUFxVixFQUFBclgsT0FBQSxFQUFBdEIsS0FBQW9tRyxVQUFBZ1UsVUFBQTl5RyxNQUFBdEgsS0FBQW9tRyxVQUFBOWlHLFlBQTRIdEYsRUFBQXNCLFVBQUF1NkcsV0FBQSxXQUFtQyxPQUFBNzdHLEVBQUE4N0Ysb0JBQUEsYUFBQXgyRixXQUFBdEQsS0FBQW9tRyxVQUFBeVQsY0FBaUY3N0csRUFBQXNCLFVBQUF5NkcsWUFBQSxXQUFvQyxPQUFBLzdHLEVBQUE4N0Ysb0JBQUEsY0FBQXgyRixXQUFBdEQsS0FBQW9tRyxVQUFBMlQsZUFBbUYvN0csRUFBQXNCLFVBQUF3NkcsbUJBQUEsV0FBMkMsT0FBQTk1RyxLQUFBb21HLFVBQUEwVCxzQkFBMkM5Z0csRUFBQXhiLFFBQUFRLElBQWU0N0YsZUFBQSxLQUFrQjNsQixJQUFBLFNBQUF0N0QsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsZ0JBQUFoTyxFQUFBZ08sRUFBQSxxQkFBQVYsRUFBQVUsRUFBQSxlQUFvRUEsRUFBQSx5QkFBQTNhLEVBQUFzQixVQUFBbzJHLFNBQUEsU0FBQS84RixFQUFBSyxFQUFBamIsR0FBZ0VDLEVBQUE4N0Ysb0JBQUEsV0FBQXgyRixXQUE0QyxJQUFBcUgsRUFBQSxJQUFBM00sRUFBQW96RixLQUFBcHhGLE1BQUFzWSxFQUFBdFksS0FBOEIsT0FBQWlZLEVBQUFzYyxLQUFBNWIsRUFBQSxTQUFBVixFQUFBOGlDLEdBQThCLEdBQUE5aUMsRUFBQSxnQkFBQWxhLElBQUFrYSxJQUFBamEsRUFBQTJ5Ryx1QkFBQSxFQUFBaDRGLFFBQUFwSSxRQUFBekUsTUFBQW1NLEVBQUFVLElBQW9GaE8sRUFBQXVqRCxLQUFBblQsT0FBQSxJQUFBL2hDLEtBQUFyTyxHQUFBMk4sRUFBQTA3RixvQkFBZ0QsSUFBQXQyRyxFQUFBMEUsRUFBQXpFLEVBQUFnYixFQUFBdFgsTUFBQSxNQUFBeXZELE1BQUF6dkQsTUFBQSxLQUFBeXZELE1BQUFoekQsRUFBQUgsRUFBQTRzSCxZQUFBLEtBQUFwckgsRUFBQXJCLEVBQUEsT0FBQUgsRUFBQWcwQyxPQUFBN3pDLEVBQUEsZ0NBQTRIcUQsUUFBQWhDLElBQUEsSUFBQXpCLEVBQUFDLEVBQUFnMEMsT0FBQSxFQUFBN3pDLElBQUFzRSxFQUFBNDBCLFNBQUFDLGNBQUEsVUFBQW11QixZQUFBcHVCLFNBQUFtc0IsZUFBQSxnQ0FBeUh6bEQsRUFBQSxlQUFxQmliLEVBQUEsWUFBcUJxZSxTQUFBd29DLEtBQUFwYSxZQUFBaGpELE1BQW9DdUksR0FBSTNNLEVBQUFzQixVQUFBeTBGLEtBQUEsU0FBQXA3RSxFQUFBSyxFQUFBamIsRUFBQTRNLEVBQUFzTixHQUFzQyxPQUFBamEsRUFBQTg3RixvQkFBQSxPQUFBeDJGLFdBQUF0RCxLQUFBb21HLFVBQUFpVCxTQUFBcjVHLEtBQUFvbUcsVUFBQWdULFVBQUFwNUcsS0FBQW9tRyxVQUFBclMsS0FBQXpzRixNQUFBdEgsS0FBQW9tRyxVQUFBOWlHLFdBQUF0RCxNQUF5SmhDLEVBQUFzQixVQUFBMHhILFNBQUEsU0FBQXI0RyxFQUFBSyxHQUFvQyxHQUFBaGIsRUFBQTg3RixvQkFBQSxXQUFBeDJGLHFCQUFBaEMsT0FBQSxDQUFpRSxJQUFBcVgsRUFBQSxVQUFBMVksTUFBQSxnQ0FBc0QsT0FBQUQsS0FBQW9tRyxVQUFBRSxhQUFBLFlBQUEzdEYsR0FBQUssSUFBQWhaLEtBQUFvbUcsVUFBQUUsYUFBQSxZQUFBdHRGLEdBQUFoWixLQUFBb21HLFVBQUFFLGFBQUEsZUFBQXR0RixFQUFBck8sRUFBQStnRyxvQkFBQTFyRyxLQUFBb21HLFVBQUF1VCx1QkFBME0sT0FBQTM1RyxLQUFBb21HLFVBQUFxUyxXQUFnQ3ovRixFQUFBeGIsUUFBQVEsSUFBZTA5RixvQkFBQSxHQUFBQyx3QkFBQSxHQUFBL0IsZUFBQSxHQUFBcTNCLGNBQUEsS0FBcUYvOEMsSUFBQSxTQUFBdjdELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLFNBQUFDLEVBQUEyYSxFQUFBSyxHQUFnQixRQUFBamIsRUFBb21CLFNBQUE0YSxFQUFBSyxHQUFnQixvQkFBQUwsSUFBQUssT0FBMEIsUUFBQWpiLEtBQUFpYixPQUFBLElBQUFMLEVBQUE1YSxLQUFBNGEsRUFBQTVhLEdBQUFpYixFQUFBamIsSUFBK0MsT0FBQTRhLEVBQTdyQm9pQyxDQUFBL2hDLEdBQWVrNEcsYUFBQSxHQUFBQyxrQkFBQSxJQUFvQ256SCxFQUFBbUIsRUFBQXdaLEVBQUEsS0FBQVYsRUFBQWphLEtBQUFELEVBQUFtekgsY0FBQTU0RyxLQUFBNWEsRUFBQSxFQUE2Q0EsRUFBQU0sRUFBSU4sR0FBQXVhLEVBQUFLLEVBQUExVixLQUFBekQsRUFBQXdaLEVBQUFqYixJQUFvQixPQUFBSyxFQUFBb3pILG1CQUFBeG1ILEVBQUEyTixFQUFBdmEsRUFBQW96SCxtQkFBQTc0RyxFQUF1RCxTQUFBM04sRUFBQWdPLEVBQUFLLEdBQWdCQSxPQUFBLElBQUFBLEVBQUEsRUFBQUEsRUFBaUIsUUFBQWpiLEVBQUEsRUFBQUMsRUFBQTJhLEVBQUFyWCxPQUFBLEVBQXlCcVgsRUFBQXJYLE9BQUEsR0FBQXRELEdBQUEsSUFBaUJBLEVBQUFvRSxFQUFBMUUsRUFBQWliLEVBQUEzYSxFQUFBLEdBQUFOLEVBQUFpYixFQUFBM2EsR0FBQU4sRUFBQWliLEVBQUEzYSxFQUFBLEdBQUFnYixLQUFBTCxFQUFBcFgsT0FBQXZELEVBQUEyYSxFQUFBclgsT0FBQSxHQUFBdkQsS0FBZ0UsT0FBQUEsRUFBUyxTQUFBa2EsRUFBQVUsR0FBYyxRQUFBSyxFQUFBamIsS0FBQUMsRUFBQSxFQUFtQkEsRUFBQTJhLEVBQUFyWCxPQUFXdEQsSUFBQSxNQUFBMmEsRUFBQTNhLEdBQUFpUSxPQUFBK0ssR0FBQWpiLEVBQUE2RSxLQUFBb1csV0FBQXBXLEtBQUEwVixFQUFBSyxFQUFBM2EsS0FBeUQsT0FBQUQsRUFBQTZFLEtBQUFvVyxHQUFBamIsRUFBbUIsU0FBQXVhLEVBQUFLLEdBQWMsSUFBQUssR0FBQUwsRUFBQTFLLE1BQWUsWUFBQTBLLEVBQUExSyxNQUFBLE1BQUEwSyxFQUFBMUssS0FBQStLLEVBQUFwVyxLQUFBK1YsRUFBQWloQixFQUFBamhCLEVBQUFzbEIsR0FBQSxNQUFBdGxCLEVBQUExSyxLQUFBK0ssRUFBQXBXLEtBQUErVixFQUFBd3pDLEdBQUF4ekMsRUFBQXl6QyxHQUFBenpDLEVBQUEwekMsR0FBQTF6QyxFQUFBMnpDLEdBQUEzekMsRUFBQWloQixFQUFBamhCLEVBQUFzbEIsR0FBQSxNQUFBdGxCLEVBQUExSyxNQUFBK0ssRUFBQXBXLEtBQUErVixFQUFBd3pDLEdBQUF4ekMsRUFBQXl6QyxHQUFBenpDLEVBQUFpaEIsRUFBQWpoQixFQUFBc2xCLEdBQUFqbEIsRUFBOE8sU0FBQXRiLEVBQUFpYixFQUFBSyxHQUFnQixJQUFBamIsRUFBQTRhLEVBQUFyWCxPQUFlLE9BQUFxWCxFQUFBSyxFQUFBLEVBQUFBLEVBQUFqYixJQUFBaWIsRUFBQWpiLEdBQXdCLFNBQUFxRSxFQUFBdVcsRUFBQUssRUFBQWpiLEVBQUFDLEdBQW9CLElBQUFBLEVBQUEsV0FBNFEsU0FBQTJhLEVBQUFLLEVBQUFqYixHQUFrQixPQUFBaWIsRUFBQSxHQUFBTCxFQUFBLEtBQUE1YSxFQUFBLEdBQUE0YSxFQUFBLEtBQUE1YSxFQUFBLEdBQUE0YSxFQUFBLEtBQUFLLEVBQUEsR0FBQUwsRUFBQSxJQUE5UjhJLENBQUE5SSxFQUFBSyxFQUFBamIsUUFBMEIsSUFBQXFFLEVBQUFndkgsWUFBQWh2SCxFQUFBZ3ZILGFBQUFodkgsRUFBQWl2SCxjQUFzRCxJQUFBMW1ILEVBQUF2SSxFQUFBZ3ZILFVBQUFuNUcsRUFBQTdWLEVBQUFpdkgsVUFBZ0MxbUgsRUFBQWl2QixFQUFBNWdCLEVBQUE0Z0IsRUFBQWpoQixFQUFBaWhCLEVBQUFqdkIsRUFBQXN6QixFQUFBamxCLEVBQUFpbEIsRUFBQXRsQixFQUFBc2xCLEVBQUFobUIsRUFBQTJoQixFQUFBNzdCLEVBQUE2N0IsRUFBQTVnQixFQUFBNGdCLEVBQUEzaEIsRUFBQWdtQixFQUFBbGdDLEVBQUFrZ0MsRUFBQWpsQixFQUFBaWxCLEVBQWdELElBQUEzbEIsRUFBQTNOLEVBQUFpdkIsRUFBQTNoQixFQUFBMmhCLEVBQUFqdkIsRUFBQXN6QixFQUFBaG1CLEVBQUFnbUIsRUFBQThjLEVBQUFuMkMsS0FBQWttQixLQUFBbmdCLEVBQUFpdkIsRUFBQWp2QixFQUFBaXZCLEVBQUFqdkIsRUFBQXN6QixFQUFBdHpCLEVBQUFzekIsR0FBQXZnQyxFQUFBa0gsS0FBQWttQixLQUFBN1MsRUFBQTJoQixFQUFBM2hCLEVBQUEyaEIsRUFBQTNoQixFQUFBZ21CLEVBQUFobUIsRUFBQWdtQixHQUFnRixPQUFBcjVCLEtBQUF1ckgsS0FBQTczRyxHQUFBeWlDLEVBQUFyOUMsSUFBQU0sRUFBb0csU0FBQUwsRUFBQWdiLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLEVBQUFLLEVBQUF5aUMsRUFBQXI5QyxHQUE4QixJQUFBMEUsRUFBQSxFQUFBMUUsRUFBQStqQixFQUFBN2MsS0FBQUssSUFBQTdDLEVBQUEsR0FBQXpFLEVBQUFpSCxLQUFBSyxJQUFBN0MsRUFBQSxHQUFBdEUsRUFBQUosSUFBQXlCLEVBQUFyQixFQUFBSixFQUFBUyxFQUFBc2pCLEVBQUE5SSxFQUFBLEVBQUFoYixFQUFBRCxFQUFBSyxFQUFBLEVBQUFxRSxFQUFBMUUsSUFBQWlOLEVBQUF4TCxFQUFBbVosRUFBQTlZLEVBQUFpaUIsRUFBQXpJLEVBQUEsRUFBQXJiLEVBQUFELEVBQUFNLEVBQUEsRUFBQW9FLEVBQUExRSxJQUFBdWEsRUFBQTlZLEVBQUE0N0MsRUFBQXRtQyxFQUFBa0UsRUFBQSxFQUFBamIsR0FBQUssRUFBQTRhLEdBQUE3YSxHQUFBNk0sRUFBQSxFQUFBNU0sRUFBQTRhLEdBQUFuYSxFQUFBd2EsRUFBQSxFQUFBdGIsR0FBQU0sRUFBQWdiLEdBQUFsYixHQUFBbWEsRUFBQSxFQUFBamEsRUFBQWdiLEdBQUF2WixFQUFBMUIsRUFBQSxFQUFBTCxHQUFBaU4sRUFBQTVNLEdBQUFELEdBQUF3YSxFQUFBLEVBQUEzTixFQUFBNU0sR0FBQWEsRUFBQVosRUFBQSxFQUFBTixHQUFBdWEsRUFBQWphLEdBQUFGLEdBQUFpOUMsRUFBQSxFQUFBOWlDLEVBQUFqYSxHQUFBcytDLEVBQUFsNkMsRUFBQXVXLEVBQUFqYixFQUFBSyxFQUFBeTNDLEVBQUFwekMsRUFBQTRXLEVBQUF0YixFQUFBTSxFQUFBeStDLEVBQUFyNkMsRUFBQXVJLEVBQUFqTixFQUFBNGEsRUFBQXNoQixFQUFBeDNCLEVBQUE2VixFQUFBdmEsRUFBQXE5QyxFQUFBOWMsRUFBQSxPQUFBcjVCLEtBQUFvckgsTUFBQXY3RyxFQUFBaFYsRUFBQWpCLEVBQUFJLEdBQUFnRyxLQUFBQyxHQUFtUyxPQUFBNFAsRUFBQWhWLEdBQUFqQixFQUFBSSxLQUFBcS9CLEdBQUEsTUFBNEJyRSxFQUFBejdCLEVBQUE4L0IsRUFBQXorQixFQUFBMUIsR0FBVzg3QixFQUFBbmxCLEVBQUF3cEIsRUFBQXovQixHQUFRVyxHQUFJeTZCLEVBQUFuNkIsRUFBQXcrQixFQUFBci9CLEdBQVErTyxPQUFRaXNCLEVBQUEwaUIsRUFBQXJlLEVBQUF1WCxHQUFRcHNDLEtBQU13d0IsRUFBQTZpQixFQUFBeGUsRUFBQXJFLEdBQVFpZ0UsTUFBQTU3RCxHQUFVLFNBQUFuZ0MsRUFBQTZhLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLEVBQUFLLEVBQUF5aUMsRUFBQXI5QyxHQUE4QixhQUFBQSxFQUFBNCtDLEVBQUEzakMsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBc04sRUFBQUssRUFBQXlpQyxHQUFBcDlDLEVBQUFnYixFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixFQUFBSyxFQUFBeWlDLEVBQSt0SyxTQUFBcGlDLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLEVBQUFLLEVBQUF5aUMsRUFBQXI5QyxHQUE4QixLQUFBQSxFQUFBLEdBQUE0K0MsRUFBQTNqQyxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixFQUFBSyxFQUFBeWlDLEdBQUFyOUMsR0FBQSxDQUFpQyxJQUFBMEUsRUFBQXpFLEVBQUE4akIsR0FBQTNqQixFQUFBLEVBQUFILEVBQTRCLElBQUF5RSxFQUFBazZDLEVBQUEzakMsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBc04sRUFBQUssRUFBQXlpQyxFQUFBajlDLEdBQTJCOEcsS0FBQXNWLElBQUE5WCxFQUFBMUUsR0FBdkQsS0FBdUVDLEdBQUEsRUFBQXlFLEVBQUFrNkMsRUFBQTNqQyxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixFQUFBSyxFQUFBeWlDLEVBQUFqOUMsSUFBQXNFLEVBQUExRSxFQUFBLE1BQUFDLEdBQTZDLE9BQUFHLEdBQWw1SzAzQyxDQUFBNzhCLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLEVBQUFLLEVBQUF5aUMsRUFBQXI5QyxJQUEwRSxTQUFBeUIsRUFBQXdaLEVBQUFLLEVBQUFqYixHQUF5QixRQUFBQyxFQUFBMk0sRUFBQXNOLEVBQUFLLEVBQUF5aUMsRUFBMkJ0NUIsRUFBQSxFQUFBdGlCLEVBQUEsRUFBQWhCLEdBQWxDd2EsRUFBQW5aLEVBQUFtWixJQUFrQ3JYLE9BQW9CbkMsRUFBQWhCLEVBQUlnQixJQUFBLENBQUssVUFBQThZLEVBQUFVLEVBQUF4WixJQUFBLEdBQUFuQixHQUFBaWEsRUFBQSxHQUFBdE4sR0FBQXNOLEVBQUEsT0FBcUMsQ0FBSyxHQUFBSyxFQUFBeGEsRUFBQUUsRUFBQTJNLEVBQUFzTixFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxJQUFBd0osRUFBQW5KLEVBQUFVLElBQUFqYixFQUFBLE9BQXVHNjdCLEdBQXZHbWhCLEVBQUFqOUMsRUFBQUUsRUFBQTJNLEVBQUFzTixFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxHQUFBZSxFQUFBeUksSUFBdUdtWSxFQUFBcUUsRUFBQThjLEVBQUE5YyxFQUFBNDdELE1BQUE5K0MsRUFBQTgrQyxPQUEyQnA0RSxHQUFBbkosRUFBQXRhLEdBQUFpYSxFQUFBLEdBQUF0TixHQUFBc04sRUFBQSxHQUFxQkEsRUFBQXJQLFFBQWUsT0FBQW15QyxFQUFBaDlDLEVBQUEwakIsRUFBQTlqQixFQUFBSyxFQUFBMk0sRUFBQXNOLEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLE9BQUE0aEYsUUFBQTkrQyxHQUF5RW5oQixFQUFBbWhCLEVBQUFuaEIsRUFBQXFFLEVBQUE4YyxFQUFBOWMsRUFBQTQ3RCxNQUFBOStDLEVBQUE4K0MsUUFBMEI5K0MsRUFBSSxTQUFBNThDLEVBQUF3YSxHQUFjLElBQUFLLEtBQUFqYixFQUFBLEVBQUFDLEVBQUEsRUFBQTJNLEVBQUEsRUFBQXNOLEVBQUEsRUFBQUssRUFBQSxFQUE2QixJQUFBSyxFQUFBLE9BQUFLLEVBQWUsTUFBQUwsRUFBQSxRQUFBNWEsR0FBQTRhLEVBQUEsTUFBQTNhLEdBQUEyYSxFQUFBLE1BQUFoTyxFQUFBNU0sRUFBQWthLEVBQUFqYSxFQUFBc2EsSUFBQVUsRUFBQSxRQUFBamIsRUFBQUMsSUFBa0UsUUFBQSs4QyxFQUFBcjlDLEVBQUEwRSxFQUFBcWYsRUFBQSxJQUFBOUksRUFBQXJYLFFBQUEsTUFBQXFYLEVBQUEsYUFBQUEsRUFBQSxNQUFBdzdFLGVBQUEsTUFBQXg3RSxFQUFBLE1BQUF3N0UsY0FBQXgyRixFQUFBMmEsRUFBQXhhLEVBQUE2YSxFQUFBclgsT0FBcUgzRCxFQUFBRyxFQUFJSCxJQUFBLENBQUssR0FBQXFiLEVBQUFwVyxLQUFBbEYsT0FBQTBFLEVBQUF1VyxFQUFBaGIsSUFBQSxLQUFBby9DLE9BQUF6OUMsVUFBQTYwRixZQUFBdDJGLEtBQUF1RSxFQUFBLFdBQUExRSxFQUFBLEdBQUFxL0MsT0FBQXo5QyxVQUFBNjBGLFlBQUF0MkYsS0FBQXVFLEVBQUEsSUFBQTFFLEVBQUEsSUFBZ0ksUUFBQUEsRUFBQSxHQUFBMEUsRUFBQSxHQUFBMUUsRUFBQSxHQUFBMEUsRUFBQSxHQUFBMUUsRUFBQSxHQUFBMEUsRUFBQSxHQUFBMUUsRUFBQSxHQUFBMEUsRUFBQSxHQUFBMUUsRUFBQSxHQUFBMEUsRUFBQSxHQUFBMUUsRUFBQSxLQUFBMEUsRUFBQSxHQUFBckUsR0FBQUwsRUFBQSxLQUFBMEUsRUFBQSxHQUFBcEUsR0FBd0YsTUFBTSxRQUFBTixFQUFBLElBQUEwRSxFQUFBLEdBQUFwRSxFQUFxQixNQUFNLFFBQUFOLEVBQUEsSUFBQTBFLEVBQUEsR0FBQXJFLEVBQXFCLE1BQU0sUUFBbUMsUUFBQW9CLEVBQUEsRUFBQWhCLEdBQW5DNDhDLEdBQUFoOUMsRUFBQUMsR0FBQW9vQixPQUFBaGtCLEVBQUFzRixNQUFBLEtBQW1DcEcsT0FBdUJuQyxFQUFBaEIsRUFBSWdCLElBQUE0N0MsRUFBQTU3QyxJQUFBNDdDLEVBQUE1N0MsR0FBQXBCLEVBQUFnOUMsSUFBQTU3QyxJQUFBNDdDLEVBQUE1N0MsR0FBQW5CLEVBQWdDZ2IsRUFBQTgzQyxNQUFBOTNDLElBQUFvTixPQUFBNW5CLEVBQUF1OEMsRUFBQXQ1QixJQUEyQixNQUFNLFFBQUE5VyxHQUFBdkksRUFBQSxHQUFBckUsRUFBQWthLEdBQUE3VixFQUFBLEdBQUFwRSxFQUE0QixNQUFNLFlBQUFtQixFQUFBLEVBQUFoQixFQUFBaUUsRUFBQWQsT0FBMkJuQyxFQUFBaEIsRUFBSWdCLElBQUF6QixFQUFBeUIsSUFBQWlELEVBQUFqRCxNQUFBLEVBQUFwQixFQUFBQyxRQUF5QixTQUFBb0UsRUFBQSxHQUFBMjRDLEdBQUFoOUMsRUFBQUMsR0FBQW9vQixPQUFBaGtCLEVBQUFzRixNQUFBLElBQUFzUixFQUFBODNDLE1BQUE5M0MsSUFBQW9OLE9BQUE1bkIsRUFBQXU4QyxFQUFBdDVCLElBQUEvakIsR0FBQSxLQUFBMG9CLE9BQUFoa0IsRUFBQXNGLE9BQUEsU0FBcUcsUUFBQWxJLEVBQUEsRUFBQWlWLEVBQUFyUyxFQUFBZCxPQUE0QjlCLEVBQUFpVixFQUFJalYsSUFBQTlCLEVBQUE4QixHQUFBNEMsRUFBQTVDLEdBQWMsT0FBQTlCLEVBQUEsSUFBYSxRQUFBSyxFQUFBNE0sRUFBQTNNLEVBQUFpYSxFQUFnQixNQUFNLFFBQUFsYSxFQUFBTCxFQUFBLEdBQWUsTUFBTSxRQUFBTSxFQUFBTixFQUFBLEdBQWUsTUFBTSxRQUFBaU4sRUFBQWpOLElBQUE0RCxPQUFBLEdBQUEyVyxFQUFBdmEsSUFBQTRELE9BQUEsR0FBd0MsTUFBTSxRQUFBdkQsRUFBQUwsSUFBQTRELE9BQUEsR0FBQXRELEVBQUFOLElBQUE0RCxPQUFBLElBQXlDLE9BQUEwWCxFQUFTLFNBQUF4WixFQUFBbVosRUFBQUssR0FBZ0IsSUFBQWpiLEVBQUFDLEVBQUFHLEVBQUF3YSxHQUFBaE8sRUFBQXFPLEdBQUE3YSxFQUFBNmEsR0FBQWYsR0FBMEIyaEIsRUFBQSxFQUFBcUUsRUFBQSxFQUFBL2tCLEdBQUEsRUFBQTZ5RSxHQUFBLEVBQUFudUMsRUFBQSxFQUFBakMsRUFBQSxFQUFBMjFFLEdBQUEsS0FBQUMsR0FBQSxNQUEwQ2o1RyxHQUFJc2hCLEVBQUEsRUFBQXFFLEVBQUEsRUFBQS9rQixHQUFBLEVBQUE2eUUsR0FBQSxFQUFBbnVDLEVBQUEsRUFBQWpDLEVBQUEsRUFBQTIxRSxHQUFBLEtBQUFDLEdBQUEsTUFBMEN4MkUsS0FBQXI5QyxLQUFBMEUsRUFBQSxTQUFBdVcsRUFBQUssRUFBQWpiLEdBQTZCLElBQUFDLEVBQUEyTSxFQUFvQixJQUFBZ08sRUFBQSxXQUFBSyxFQUFBNGdCLEVBQUE1Z0IsRUFBQWlsQixFQUFBamxCLEVBQUE0Z0IsRUFBQTVnQixFQUFBaWxCLEVBQUFqbEIsRUFBQTRnQixFQUFBNWdCLEVBQUFpbEIsR0FBMEMsT0FBQXRsQixFQUFBLEtBQW5EZ2tDLEVBQUEsRUFBQS8yQixFQUFBLEtBQW1ENU0sRUFBQXM0RyxHQUFBdDRHLEVBQUF1NEcsR0FBQSxNQUFBNTRHLEVBQUEsSUFBd0MsUUFBQUssRUFBQTRrQyxFQUFBamxDLEVBQUEsR0FBQUssRUFBQTJpQyxFQUFBaGpDLEVBQUEsR0FBMEIsTUFBTSxRQUFBQSxHQUFBLEtBQUF5TixPQUFzOUMsU0FBQTNSLEVBQUFrRSxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixFQUFBSyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEdBQWdDLElBQUFxZixFQUFBOWpCLEVBQUFHLEVBQUFxQixFQUFBaEIsRUFBQXFCLEVBQUFvRixLQUFBQyxHQUFBckcsRUFBQSxJQUFBZ0IsRUFBQSxJQUFBQyxFQUFBRCxFQUFBLE1BQUFtTCxHQUFBLEdBQUEvTCxLQUFBMDlDLEVBQUEsU0FBQTNqQyxFQUFBSyxFQUFBamIsR0FBMkUsT0FBTzY3QixFQUFBamhCLEVBQUEvVCxLQUFBcWQsSUFBQWxrQixHQUFBaWIsRUFBQXBVLEtBQUFFLElBQUEvRyxHQUFBa2dDLEVBQUF0bEIsRUFBQS9ULEtBQUFFLElBQUEvRyxHQUFBaWIsRUFBQXBVLEtBQUFxZCxJQUFBbGtCLEtBQThELEdBQUFxRSxFQUFBcWYsRUFBQXJmLEVBQUEsR0FBQXpFLEVBQUF5RSxFQUFBLEdBQUF0RSxFQUFBc0UsRUFBQSxHQUFBakQsRUFBQWlELEVBQUEsT0FBaUMsQ0FBS2pFLEVBQUFtK0MsRUFBQTNqQyxFQUFBSyxHQUFBdlosR0FBQWtaLEVBQUF4YSxFQUFBeTdCLEVBQUE1Z0IsRUFBQTdhLEVBQUE4L0IsRUFBQTkvQixFQUFBbStDLEVBQUF2QixFQUFBcjlDLEdBQUErQixHQUFBczdDLEVBQUE1OEMsRUFBQXk3QixFQUFBbDhCLEVBQUFTLEVBQUE4L0IsRUFBZ0QsSUFBQXVYLEdBQUE3OEIsRUFBQW9pQyxHQUFBLEVBQUEwQixHQUFBempDLEVBQUF0YixHQUFBLEVBQUFrOEIsRUFBQTRiLEtBQUF6M0MsS0FBQTArQyxLQUFBeitDLEtBQThDNDdCLEVBQUEsSUFBQUEsRUFBQWgxQixLQUFBa21CLEtBQUE4TyxHQUFBNzdCLEdBQUE2N0IsRUFBQTU3QixHQUFBNDdCLEdBQWdDLElBQUFxRSxFQUFBbGdDLElBQUFtZ0MsRUFBQWxnQyxJQUFBNCtDLEdBQUEza0MsSUFBQUssR0FBQSxLQUFBMVQsS0FBQWttQixLQUFBbG1CLEtBQUFzVixLQUFBK2pCLEVBQUFDLEVBQUFELEVBQUF3ZSxJQUFBdmUsRUFBQXNYLE1BQUF2WCxFQUFBd2UsSUFBQXZlLEVBQUFzWCxPQUFvRjEzQyxFQUFBOCtDLEVBQUE3K0MsRUFBQTArQyxFQUFBeitDLEdBQUEyYSxFQUFBb2lDLEdBQUEsRUFBQTU3QyxFQUFBeTlDLEdBQUE1K0MsRUFBQXczQyxFQUFBejNDLEdBQUFpYixFQUFBdGIsR0FBQSxFQUFBK2pCLEVBQUE3YyxLQUFBK3JILE9BQUEzM0csRUFBQTdaLEdBQUFuQixHQUFBa1IsUUFBQSxJQUFBdlIsRUFBQWlILEtBQUErckgsT0FBQWp6SCxFQUFBeUIsR0FBQW5CLEdBQUFrUixRQUFBLElBQUF1UyxFQUFBOUksRUFBQTdhLEVBQUEwQixFQUFBaWlCLElBQUE5akIsRUFBQW85QyxFQUFBajlDLEVBQUEwQixFQUFBN0IsSUFBQThqQixFQUFBLElBQUFBLEVBQUEsRUFBQWppQixFQUFBaWlCLEdBQUE5akIsRUFBQSxJQUFBQSxFQUFBLEVBQUE2QixFQUFBN0IsR0FBQTJhLEdBQUFtSixFQUFBOWpCLElBQUE4akIsR0FBQSxFQUFBamlCLElBQUE4WSxHQUFBM2EsRUFBQThqQixJQUFBOWpCLEdBQUEsRUFBQTZCLEdBQWtNLElBQUEwUSxFQUFBdlMsRUFBQThqQixFQUFVLEdBQUE3YyxLQUFBc1YsSUFBQWhLLEdBQUExUixFQUFBLENBQWtCLElBQUF5K0MsRUFBQXQvQyxFQUFBdS9DLEVBQUFuQyxFQUFBb0MsRUFBQXovQyxFQUFnQkMsRUFBQThqQixFQUFBampCLEdBQUE4WixHQUFBM2EsRUFBQThqQixFQUFBLE1BQUFzNUIsRUFBQWo5QyxFQUFBQyxFQUFBNkcsS0FBQXFkLElBQUF0a0IsR0FBQUQsRUFBQXlCLEVBQUFuQixFQUFBNEcsS0FBQUUsSUFBQW5ILEdBQUFpQixFQUFBNlYsRUFBQXNtQyxFQUFBcjlDLEVBQUFLLEVBQUFDLEVBQUEyTSxFQUFBLEVBQUEyTixFQUFBNGtDLEVBQUFDLEdBQUF4L0MsRUFBQXMvQyxFQUFBbi9DLEVBQUFxQixJQUF5RitRLEVBQUF2UyxFQUFBOGpCLEVBQU0sSUFBQTI3QixFQUFBeDRDLEtBQUFxZCxJQUFBUixHQUFBNDdCLEVBQUF6NEMsS0FBQUUsSUFBQTJjLEdBQUE2N0IsRUFBQTE0QyxLQUFBcWQsSUFBQXRrQixHQUFBNC9DLEVBQUEzNEMsS0FBQUUsSUFBQW5ILEdBQUE2L0MsRUFBQTU0QyxLQUFBZ2dHLElBQUExMEYsRUFBQSxHQUFBdXRDLEVBQUEsSUFBQTEvQyxFQUFBeS9DLEVBQUFFLEVBQUEsSUFBQTEvQyxFQUFBdy9DLEVBQUFHLEdBQUFobEMsRUFBQUssR0FBQTZrQyxHQUFBbGxDLEVBQUE4a0MsRUFBQUosRUFBQXJrQyxFQUFBMGtDLEVBQUFOLEdBQUFZLEdBQUFqRCxFQUFBMEMsRUFBQUYsRUFBQTcvQyxFQUFBZ2dELEVBQUFKLEdBQUFRLEdBQUEvQyxFQUFBcjlDLEdBQWdKLEdBQUFtZ0QsRUFBQSxLQUFBRixFQUFBLEdBQUFFLEVBQUEsR0FBQUEsRUFBQSxLQUFBRixFQUFBLEdBQUFFLEVBQUEsR0FBQXo3QyxFQUFBLE9BQUF5N0MsRUFBQUcsRUFBQUYsR0FBQTEzQixPQUFBeG5CLEdBQXFHLFFBQUFnbkIsS0FBQXcyQixFQUFBLEVBQUFNLEdBQXRDOTlDLEdBQUFpL0MsRUFBQUcsRUFBQUYsR0FBQTEzQixPQUFBeG5CLEdBQUE2QyxPQUFBSixNQUFBLE1BQXNDQyxPQUE0Qjg2QyxFQUFBTSxFQUFJTixJQUFBeDJCLEVBQUF3MkIsS0FBQSxFQUFBRSxFQUFBMTlDLEVBQUF3OUMsRUFBQSxHQUFBeDlDLEVBQUF3OUMsR0FBQTM4QyxHQUFBdytCLEVBQUFxZSxFQUFBMTlDLEVBQUF3OUMsR0FBQXg5QyxFQUFBdzlDLEVBQUEsR0FBQTM4QyxHQUFBbTZCLEVBQW1ELE9BQUFoVSxHQUFuaEZ0ZSxNQUFBLEdBQUEwUixFQUFBNGdCLEVBQUE1Z0IsRUFBQWlsQixHQUFBN1gsT0FBQXpOLEVBQUFqUixNQUFBLE1BQWdFLE1BQU0sY0FBQTNKLEdBQUEsTUFBQUEsR0FBQUMsRUFBQSxFQUFBZ2IsRUFBQTRnQixFQUFBNWdCLEVBQUFFLEdBQUF2TyxFQUFBLEVBQUFxTyxFQUFBaWxCLEVBQUFqbEIsRUFBQSt5RSxLQUFBL3RGLEVBQUFnYixFQUFBNGdCLEVBQUFqdkIsRUFBQXFPLEVBQUFpbEIsR0FBQXRsQixHQUFBLElBQUEzYSxFQUFBMk0sR0FBQXliLE9BQUF6TixFQUFBalIsTUFBQSxJQUFrRyxNQUFNLGNBQUEzSixHQUFBLE1BQUFBLEdBQUFpYixFQUFBczRHLEdBQUEsRUFBQXQ0RyxFQUFBNGdCLEVBQUE1Z0IsRUFBQXM0RyxHQUFBdDRHLEVBQUF1NEcsR0FBQSxFQUFBdjRHLEVBQUFpbEIsRUFBQWpsQixFQUFBdTRHLEtBQUF2NEcsRUFBQXM0RyxHQUFBdDRHLEVBQUE0Z0IsRUFBQTVnQixFQUFBdTRHLEdBQUF2NEcsRUFBQWlsQixHQUFBdGxCLEdBQUEsS0FBQXlOLE9BQUF4bkIsRUFBQW9hLEVBQUE0Z0IsRUFBQTVnQixFQUFBaWxCLEVBQUFqbEIsRUFBQXM0RyxHQUFBdDRHLEVBQUF1NEcsR0FBQTU0RyxFQUFBLEdBQUFBLEVBQUEsS0FBOEgsTUFBTSxRQUFBSyxFQUFBczRHLEdBQUEzNEcsRUFBQSxHQUFBSyxFQUFBdTRHLEdBQUE1NEcsRUFBQSxHQUFBQSxHQUFBLEtBQUF5TixPQUFBeG5CLEVBQUFvYSxFQUFBNGdCLEVBQUE1Z0IsRUFBQWlsQixFQUFBdGxCLEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsS0FBMkUsTUFBTSxRQUFBQSxHQUFBLEtBQUF5TixPQUFBM21CLEVBQUF1WixFQUFBNGdCLEVBQUE1Z0IsRUFBQWlsQixFQUFBdGxCLEVBQUEsR0FBQUEsRUFBQSxLQUE2QyxNQUFNLFFBQUFBLEdBQUEsS0FBQXlOLE9BQUEzbUIsRUFBQXVaLEVBQUE0Z0IsRUFBQTVnQixFQUFBaWxCLEVBQUF0bEIsRUFBQSxHQUFBSyxFQUFBaWxCLElBQTRDLE1BQU0sUUFBQXRsQixHQUFBLEtBQUF5TixPQUFBM21CLEVBQUF1WixFQUFBNGdCLEVBQUE1Z0IsRUFBQWlsQixFQUFBamxCLEVBQUE0Z0IsRUFBQWpoQixFQUFBLEtBQTRDLE1BQU0sUUFBQUEsR0FBQSxLQUFBeU4sT0FBQTNtQixFQUFBdVosRUFBQTRnQixFQUFBNWdCLEVBQUFpbEIsRUFBQWpsQixFQUFBNGtDLEVBQUE1a0MsRUFBQTJpQyxJQUEyQyxPQUFBaGpDLEdBQVM4SSxFQUFBLFNBQUE5SSxFQUFBSyxHQUFpQixHQUFBTCxFQUFBSyxHQUFBMVgsT0FBQSxHQUFrQnFYLEVBQUFLLEdBQUFwUSxRQUFhLFFBQUFxUCxFQUFBVSxFQUFBSyxHQUFlZixFQUFBM1csUUFBU3k1QyxFQUFBL2hDLEdBQUEsSUFBQXJPLElBQUFqTixFQUFBc2IsR0FBQSxLQUFBTCxFQUFBcFgsT0FBQXlYLElBQUEsUUFBQW9OLE9BQUFuTyxFQUFBMVcsT0FBQSxPQUFvRW9YLEVBQUFwWCxPQUFBeVgsRUFBQSxHQUFBamIsRUFBQTZHLEtBQUE4SyxJQUFBMVIsRUFBQXNELE9BQUFxSixLQUFBckosUUFBQSxLQUFtRDNELEVBQUEsU0FBQWdiLEVBQUFLLEVBQUFmLEVBQUFLLEVBQUF5aUMsR0FBdUJwaUMsR0FBQUssR0FBQSxNQUFBTCxFQUFBb2lDLEdBQUEsVUFBQS9oQyxFQUFBK2hDLEdBQUEsS0FBQS9oQyxFQUFBelgsT0FBQXc1QyxFQUFBLE9BQUF6aUMsRUFBQXNoQixFQUFBdGhCLEVBQUEybEIsSUFBQWhtQixFQUFBaUIsR0FBQSxFQUFBakIsRUFBQTh6RSxHQUFBLEVBQUE5ekUsRUFBQTJoQixFQUFBamhCLEVBQUFvaUMsR0FBQSxHQUFBOWlDLEVBQUFnbUIsRUFBQXRsQixFQUFBb2lDLEdBQUEsR0FBQWg5QyxFQUFBNkcsS0FBQThLLElBQUExUixFQUFBc0QsT0FBQXFKLEtBQUFySixRQUFBLEtBQTRJeEQsRUFBQSxHQUFBcUIsRUFBQSxHQUFXcEIsRUFBQTZHLEtBQUE4SyxJQUFBMVIsRUFBQXNELE9BQUFxSixLQUFBckosUUFBQSxHQUFvQyxRQUFBOUIsRUFBQSxFQUFZQSxFQUFBekIsRUFBSXlCLElBQUEsQ0FBS3hCLEVBQUF3QixLQUFBMUIsRUFBQUUsRUFBQXdCLEdBQUEsVUFBQTFCLElBQUFpOUMsRUFBQXY3QyxHQUFBMUIsRUFBQTBCLElBQUFMLEVBQUE0N0MsRUFBQXY3QyxFQUFBLEtBQUF4QixFQUFBd0IsR0FBQTRDLEVBQUFwRSxFQUFBd0IsR0FBQXlZLEVBQUE5WSxHQUFBLE1BQUE0N0MsRUFBQXY3QyxJQUFBLE1BQUExQixJQUFBaTlDLEVBQUF2N0MsR0FBQSxLQUFBaWlCLEVBQUF6akIsRUFBQXdCLEdBQUFtTCxNQUFBbkwsS0FBQTFCLEVBQUE2TSxFQUFBbkwsR0FBQSxVQUFBMUIsSUFBQUosRUFBQThCLEdBQUExQixFQUFBMEIsSUFBQUwsRUFBQXpCLEVBQUE4QixFQUFBLEtBQUFtTCxFQUFBbkwsR0FBQTRDLEVBQUF1SSxFQUFBbkwsR0FBQThZLEVBQUFuWixHQUFBLE1BQUF6QixFQUFBOEIsSUFBQSxNQUFBMUIsSUFBQUosRUFBQThCLEdBQUEsS0FBQWlpQixFQUFBOVcsRUFBQW5MLElBQUE3QixFQUFBSyxFQUFBMk0sRUFBQXNOLEVBQUFLLEVBQUE5WSxHQUFBN0IsRUFBQWdOLEVBQUEzTSxFQUFBc2EsRUFBQUwsRUFBQXpZLEdBQW1QLElBQUFoQixFQUFBUixFQUFBd0IsR0FBQTg4QyxFQUFBM3hDLEtBQUFuTCxHQUFBZzJDLEVBQUFoM0MsRUFBQThDLE9BQUFtN0MsRUFBQTl4QyxHQUFBMnhDLEVBQUFoN0MsT0FBOEMyVyxFQUFBMmhCLEVBQUFwN0IsRUFBQWczQyxFQUFBLEdBQUF2OUIsRUFBQWdtQixFQUFBei9CLEVBQUFnM0MsRUFBQSxHQUFBdjlCLEVBQUFpQixHQUFBNUYsV0FBQTlVLEVBQUFnM0MsRUFBQSxLQUFBdjlCLEVBQUEyaEIsRUFBQTNoQixFQUFBOHpFLEdBQUF6NEUsV0FBQTlVLEVBQUFnM0MsRUFBQSxLQUFBdjlCLEVBQUFnbUIsRUFBQTNsQixFQUFBWSxHQUFBdk8sSUFBQTJJLFdBQUFncEMsRUFBQUcsRUFBQSxLQUFBbmtDLEVBQUFzaEIsR0FBQXRoQixFQUFBeXpFLEdBQUFwaEYsSUFBQTJJLFdBQUFncEMsRUFBQUcsRUFBQSxLQUFBbmtDLEVBQUEybEIsR0FBQTNsQixFQUFBc2hCLEVBQUFqdkIsR0FBQTJ4QyxFQUFBRyxFQUFBLEdBQUFua0MsRUFBQTJsQixFQUFBdHpCLEdBQUEyeEMsRUFBQUcsRUFBQSxHQUFnTCxPQUFBOXhDLEdBQUEzTSxFQUFBMk0sR0FBQTNNLEVBQXVsQyxTQUFBUSxFQUFBbWEsRUFBQUssR0FBZ0IsUUFBQWpiLEtBQUFDLEVBQUEsRUFBQTJNLEVBQUFnTyxFQUFBclgsT0FBNEJxSixFQUFBLEdBQUFxTyxFQUFBaGIsRUFBU0EsR0FBQSxHQUFNLElBQUFpYSxJQUFRMmhCLEdBQUFqaEIsRUFBQTNhLEVBQUEsR0FBQWlnQyxHQUFBdGxCLEVBQUEzYSxFQUFBLEtBQXNCNDdCLEdBQUFqaEIsRUFBQTNhLEdBQUFpZ0MsR0FBQXRsQixFQUFBM2EsRUFBQSxLQUFvQjQ3QixHQUFBamhCLEVBQUEzYSxFQUFBLEdBQUFpZ0MsR0FBQXRsQixFQUFBM2EsRUFBQSxLQUFzQjQ3QixHQUFBamhCLEVBQUEzYSxFQUFBLEdBQUFpZ0MsR0FBQXRsQixFQUFBM2EsRUFBQSxLQUFzQmdiLEVBQUFoYixFQUFBMk0sRUFBQSxJQUFBM00sRUFBQWlhLEVBQUEsSUFBa0IyaEIsR0FBQWpoQixFQUFBLEdBQUFzbEIsR0FBQXRsQixFQUFBLElBQWdCaE8sRUFBQSxJQUFBM00sSUFBQWlhLEVBQUEsSUFBaUIyaEIsR0FBQWpoQixFQUFBLEdBQUFzbEIsR0FBQXRsQixFQUFBLElBQWdCVixFQUFBLElBQU8yaEIsR0FBQWpoQixFQUFBLEdBQUFzbEIsR0FBQXRsQixFQUFBLEtBQWdCVixFQUFBLElBQVEyaEIsR0FBQWpoQixFQUFBaE8sRUFBQSxHQUFBc3pCLEdBQUF0bEIsRUFBQWhPLEVBQUEsSUFBb0JBLEVBQUEsSUFBQTNNLEVBQUFpYSxFQUFBLEdBQUFBLEVBQUEsR0FBQWphLElBQUFpYSxFQUFBLElBQTZCMmhCLEdBQUFqaEIsRUFBQTNhLEdBQUFpZ0MsR0FBQXRsQixFQUFBM2EsRUFBQSxLQUFrQkQsRUFBQTZFLE1BQUEsTUFBQXFWLEVBQUEsR0FBQTJoQixFQUFBLEVBQUEzaEIsRUFBQSxHQUFBMmhCLEVBQUEzaEIsRUFBQSxHQUFBMmhCLEdBQUEsSUFBQTNoQixFQUFBLEdBQUFnbUIsRUFBQSxFQUFBaG1CLEVBQUEsR0FBQWdtQixFQUFBaG1CLEVBQUEsR0FBQWdtQixHQUFBLEdBQUFobUIsRUFBQSxHQUFBMmhCLEVBQUEsRUFBQTNoQixFQUFBLEdBQUEyaEIsRUFBQTNoQixFQUFBLEdBQUEyaEIsR0FBQSxHQUFBM2hCLEVBQUEsR0FBQWdtQixFQUFBLEVBQUFobUIsRUFBQSxHQUFBZ21CLEVBQUFobUIsRUFBQSxHQUFBZ21CLEdBQUEsRUFBQWhtQixFQUFBLEdBQUEyaEIsRUFBQTNoQixFQUFBLEdBQUFnbUIsSUFBNEksT0FBQWxnQyxFQUFTLFNBQUEwQixFQUFBa1osRUFBQUssRUFBQWpiLEVBQUFDLEdBQW9CLE9BQUEyYSxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQUQsRUFBQUMsR0FBb0IsU0FBQVksRUFBQStaLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLEdBQXdCLElBQUFLLEVBQUEsSUFBQXlpQyxFQUFBLElBQWdCLE9BQUF6aUMsRUFBQUssRUFBQW9pQyxFQUFBaDlDLEVBQUF1YSxFQUFBVSxFQUFBK2hDLEVBQUEvOEMsRUFBQXNhLEVBQUEzTixFQUFBb3dDLEVBQUFoOUMsRUFBQXVhLEVBQUFMLEVBQUE4aUMsRUFBQS84QyxFQUFBMk0sRUFBQXNOLEdBQTRDLFNBQUFxa0MsRUFBQTNqQyxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixFQUFBSyxFQUFBeWlDLEVBQUFyOUMsR0FBOEIsTUFBQUEsTUFBQSxHQUErQixRQUFBMEUsR0FBL0IxRSxJQUFBLElBQUFBLEVBQUEsSUFBQUEsR0FBK0IsRUFBQUMsSUFBQSw4RUFBQUcsRUFBQSxFQUFBcUIsR0FBQSx5RUFBQWhCLEVBQUEsRUFBeUxBLEVBQXpMLEdBQTZMQSxJQUFBLENBQUssSUFBQXFCLEVBQUE0QyxFQUFBekUsRUFBQVEsR0FBQWlFLEVBQUFxUyxFQUFBZ29DLEVBQUFqOUMsRUFBQW1aLEVBQUE1YSxFQUFBNE0sRUFBQTJOLEdBQUE5WixFQUFBaStDLEVBQUFqOUMsRUFBQXdaLEVBQUFoYixFQUFBaWEsRUFBQThpQyxHQUFBdDdDLEVBQUFnVixJQUFBalcsSUFBdURWLEdBQUFxQixFQUFBaEIsR0FBQXlHLEtBQUFrbUIsS0FBQXJyQixHQUFxQixPQUFBMkMsRUFBQXRFLEVBQXdNLFNBQUEyK0MsRUFBQTlqQyxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEdBQXNCLE9BQUFnTyxPQUFBLEVBQUFLLEVBQUEsRUFBQWpiLEVBQUEsRUFBQUMsRUFBQSxFQUFBMk0sR0FBQSxFQUFBcU8sRUFBQSxHQUFBamIsRUFBQSxFQUFBQyxHQUFBLEVBQUFnYixFQUFBLEVBQUFqYixFQUFxRCxTQUFBNjdCLElBQWEsUUFBQWpoQixFQUFBLEdBQUFLLEVBQUExVixVQUFBaEMsT0FBQSxFQUFrQzBYLEdBQUEsSUFBS0EsRUFBQSxDQUFLLElBQUFqYixFQUFBdUYsVUFBQTBWLEdBQW1CTCxHQUFBNWEsSUFBQUssT0FBQUwsR0FBQTYzQyxLQUFBQyxVQUFBOTNDLEtBQXFDLE9BQUE0YSxFQUFTLElBQUFzbEIsRUFBQXRsQixFQUFBLGdCQUFBdWxCLEVBQUF2bEIsRUFBQSxxQkFBaURzbEIsRUFBQW16RCxLQUFBLFNBQUF6NEUsR0FBbUIzWSxLQUFBa0IsT0FBQXlYLEVBQUEzWSxLQUFBd3hILFNBQTJCeHhILEtBQUFrdUQsVUFBQSxHQUFrQmp3QixFQUFBbXpELEtBQUE5eEYsVUFBQXFxRSxLQUFBLFdBQWtDLFVBQUExcEUsTUFBQSx3QkFBdUNnK0IsRUFBQW16RCxLQUFBOXhGLFVBQUFteUgsV0FBQSxTQUFBOTRHLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBaURxTyxPQUFBLElBQUFBLElBQUEsRUFBQWpiLE9BQUEsSUFBQUEsSUFBQSxFQUFBQyxLQUFBZ0MsS0FBQWtCLE9BQUFrbEcsVUFBQW1TLFVBQXVFLElBQUF0Z0csRUFBQXROLEtBQUE4ekcsVUFBQTl6RyxFQUFBOHpHLFNBQUF2SSxRQUFBbDJHLEtBQUFrQixPQUFBb1gsRUFBQUwsRUFBQW11RixVQUFBcnJELEVBQUF6aUMsRUFBQXVnRyxZQUFBMzZFLEVBQUEycEUsS0FBQW5xRyxFQUFBNGEsRUFBQXdnRyxlQUFBNTZFLEVBQUErcEUsU0FBQTdsRyxFQUFBdzNCLEVBQUEsYUFBQWpoQixFQUFBSyxFQUFBamIsRUFBQUMsRUFBQSs4QyxFQUFBcjlDLEdBQUErakIsRUFBQXpoQixLQUFBd3hILE1BQUFwdkgsR0FBcUssSUFBQXFmLEVBQUEsQ0FBTyxJQUFBOWpCLEVBQUFHLEVBQUFxQixFQUFBaEIsRUFBQXFCLEVBQUFpVixLQUFBalcsS0FBQWlCLEVBQUFPLEtBQUFzbkIsT0FBQXRwQixHQUF5Q2dDLEtBQUFrdUQsS0FBQTgvQixhQUFBcjFFLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQSxTQUFBZ08sRUFBQUssRUFBQWpiLEVBQUFDLEdBQW1ELElBQUEyTSxFQUFBZ08sRUFBQXU2QyxhQUFxQnorQyxFQUFBN1IsS0FBQW9XLEVBQUFyTyxFQUFBd2hFLEtBQUExc0UsR0FBQWdWLEVBQUE3UixLQUFBb1csRUFBQXJPLEVBQUEwaEUsS0FBQTVzRSxHQUFBakIsRUFBQW9FLEtBQUE3RSxHQUFBNE0sRUFBQXloRSxLQUFBM3NFLEdBQUFqQixFQUFBb0UsS0FBQTdFLEdBQUE0TSxFQUFBMmhFLEtBQUE3c0UsS0FBOEU5QixFQUFBaUgsS0FBQXNYLElBQUE1VSxNQUFBLEtBQUFtTixHQUFBM1csRUFBQThHLEtBQUFzWCxJQUFBNVUsTUFBQSxLQUFBOUksR0FBQVcsRUFBQXlGLEtBQUE4SyxJQUFBcEksTUFBQSxLQUFBbU4sR0FBQXRXLEVBQUF5RyxLQUFBOEssSUFBQXBJLE1BQUEsS0FBQTlJLEdBQUFpakIsR0FBeUdtWSxFQUFBajhCLEVBQUFzZ0MsRUFBQW5nQyxFQUFBaTlDLEVBQUE1OEMsRUFBQUwsRUFBQTIrQyxFQUFBdDlDLEVBQUF4QixFQUFBK3pILFFBQUEvekgsRUFBQXFiLEdBQWdDeFosRUFBQVEsS0FBQTJ4SCxpQkFBQXI1RyxFQUFBSyxFQUFBOEksRUFBQW1ZLEVBQUFuWSxFQUFBd2MsRUFBQXhjLEVBQUFnN0IsRUFBQWg3QixFQUFBaXdHLFNBQUFqd0csRUFBQW1ZLEVBQUFwNkIsRUFBQW82QixFQUFBblksRUFBQXdjLEVBQUF6K0IsRUFBQXkrQixFQUFBaitCLEtBQUF3eEgsTUFBQTUzRixFQUFBLGFBQUFqaEIsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUErOEMsRUFBQXI5QyxJQUFBK2pCLEVBQThHLE9BQUFBLEdBQVN3YyxFQUFBbXpELEtBQUE5eEYsVUFBQXN5SCxhQUFBLFNBQUFqNUcsRUFBQUssRUFBQWpiLEVBQUE0TSxFQUFBMk4sR0FBbUQsU0FBQXlpQyxFQUFBL2hDLEdBQWMsT0FBQXlJLEVBQUF6SSxHQUFBL2EsTUFBQSxVQUFBd2pCLEVBQUF6SSxHQUFBL2EsTUFBQTBhLEVBQUFyWCxTQUFBbWdCLEVBQUFuZ0IsUUFBQSxNQUFBcVgsRUFBQUssSUFBQXlJLEVBQUF6SSxHQUFBMVEsT0FBQSxJQUFBbVosRUFBQXpJLEdBQUExUSxNQUFtRyxJQUFBNUssRUFBQSxFQUFBMEUsS0FBQXFmLEVBQUF6aEIsS0FBQTZ4SCxXQUFBbDVHLEdBQWtDaE8sS0FBQTNLLEtBQUFrQixPQUFBa2xHLFVBQUFtUyxVQUFxQyxRQUFBNTZHLEVBQUEsRUFBWUEsRUFBQThqQixFQUFBbmdCLE9BQVczRCxJQUFBLENBQUssSUFBQW85QyxFQUFBcDlDLEdBQUEsUUFBQUcsRUFBQTJqQixFQUFBOWpCLEdBQUFrNEQsUUFBQTc4QyxFQUFBamIsRUFBQTRNLEdBQUF4TCxFQUFBOFksRUFBQW5hLEVBQUF5dUQsVUFBQXB1RCxFQUFBLEVBQTJEQSxFQUFBZ0IsRUFBQW1DLE9BQVduRCxJQUFBLFFBQUFxQixFQUFBeEIsRUFBQW1CLEVBQUFoQixHQUFBbWEsR0FBQTdELEVBQUEsRUFBNEJBLEVBQUFqVixFQUFBOEIsT0FBV21ULElBQUFqVixFQUFBaVYsR0FBQW1sQixHQUFBbDhCLEVBQUEwRSxFQUFBUSxLQUFBcEQsRUFBQWlWLElBQTJCL1csR0FBQStqQixFQUFBOWpCLEdBQUF3ekQsYUFBQW54RCxLQUFBc25CLE9BQUEzYyxHQUFvQyxPQUFBdkksR0FBUzY3QixFQUFBbXpELEtBQUE5eEYsVUFBQXV5SCxXQUFBLFNBQUFsNUcsR0FBeUMsT0FBQTNZLEtBQUFrdUQsS0FBQXcvQixlQUFBLzBFLElBQW1Dc2xCLEVBQUFtekQsS0FBQTl4RixVQUFBd3lILFNBQUEsU0FBQW41RyxFQUFBSyxFQUFBamIsRUFBQUMsR0FBNkMsSUFBQTJNLEVBQUEzTSxLQUFBeWdILFVBQUF6Z0gsRUFBQXlnSCxTQUFBdkksUUFBQWwyRyxLQUFBa0IsT0FBQStXLEVBQUF0TixFQUFBeTdGLFVBQUE5dEYsRUFBQXRZLEtBQUEyeEgsaUJBQUExNUcsRUFBQVUsRUFBQUssRUFBQWpiLEdBQW1HLE9BQUFpQyxLQUFBa3VELEtBQUEySCxRQUFBbDlDLEVBQUFMLEVBQUFzaEIsRUFBQXRoQixFQUFBMmxCLEVBQUFobUIsRUFBQXNnRyxVQUFBdjZHLElBQWtEaWdDLEVBQUFtekQsS0FBQTl4RixVQUFBeXlILGFBQUEsU0FBQXA1RyxFQUFBSyxFQUFBamIsRUFBQUMsR0FBaUQsSUFBQTJNLEVBQUEsRUFBUSx1QkFBQWdPLEdBQUFyVixVQUFBaEMsT0FBQSxFQUFBcVgsRUFBQTNZLEtBQUE4eEgsU0FBQW41RyxFQUFBSyxFQUFBamIsRUFBQUMsR0FBQSxpQkFBQWdiLElBQUFoYixFQUFBZ2IsR0FBQWhiLEdBQUEsaUJBQUFBLEVBQUFnMEgsV0FBQXJuSCxFQUFBM00sRUFBQWcwSCxVQUFBcjVHLEVBQUFpcUQsV0FBQWo0RCxJQUErSnN6QixFQUFBbXpELEtBQUE5eEYsVUFBQTJ5SCxRQUFBLFNBQUF0NUcsRUFBQUssRUFBQWpiLEVBQUFDLEdBQTRDLElBQUEyTSxFQUFBLEVBQVEsdUJBQUFnTyxHQUFBclYsVUFBQWhDLE9BQUEsRUFBQXFYLEVBQUEzWSxLQUFBOHhILFNBQUFuNUcsRUFBQUssRUFBQWpiLEVBQUFDLEdBQUEsaUJBQUFnYixJQUFBaGIsRUFBQWdiLEdBQUFoYixJQUFBLGlCQUFBQSxFQUFBZzBILFdBQUFybkgsRUFBQTNNLEVBQUFnMEgsVUFBQSxpQkFBQWgwSCxFQUFBeXVELGNBQUE5ekMsRUFBQTh6QyxZQUFBenVELEVBQUF5dUQsa0JBQUEsSUFBQXp1RCxFQUFBaWpELE9BQUF0b0MsRUFBQXNvQyxLQUFBampELEVBQUFpakQsV0FBQSxJQUFBampELEVBQUF3dUQsU0FBQTd6QyxFQUFBNnpDLE9BQUF4dUQsRUFBQXd1RCxTQUFBN3pDLEVBQUFrcUQsTUFBQWw0RCxJQUFrU3N6QixFQUFBbXpELEtBQUE5eEYsVUFBQWsvRyxZQUFBLFNBQUE3bEcsRUFBQUssRUFBQWpiLEVBQUFDLEdBQWdELElBQUEyTSxFQUFBc04sRUFBQWphLEtBQUF5Z0gsVUFBQXorRyxLQUFBa0IsT0FBQWtsRyxVQUFBOXRGLEVBQUFMLEVBQUF5aUcsZUFBZ0UvdkcsRUFBQSxpQkFBQWdPLEtBQUE0ekMsU0FBQTV6QyxFQUFBNHpDLFNBQUF2c0QsS0FBQTh4SCxTQUFBbjVHLEVBQUFLLEVBQUFqYixFQUFBQyxHQUFBdXVELFNBQUFqMEMsRUFBQWtxRCxZQUEwRixRQUFBem5CLEVBQUEsRUFBWUEsRUFBQXB3QyxFQUFBckosT0FBV3k1QyxHQUFBLEdBQU0sSUFBQXI5QyxFQUFBaU4sRUFBQW93QyxHQUFXLE1BQUFyOUMsRUFBQXVRLEtBQUFxSyxFQUFBaTRDLE9BQUE3eUQsRUFBQWs4QixFQUFBbDhCLEVBQUF1Z0MsR0FBQSxNQUFBdmdDLEVBQUF1USxLQUFBcUssRUFBQXk0QyxPQUFBcnpELEVBQUFrOEIsRUFBQWw4QixFQUFBdWdDLEdBQUEsTUFBQXZnQyxFQUFBdVEsS0FBQXFLLEVBQUE4cEQsY0FBQTFrRSxFQUFBeXVELEdBQUF6dUQsRUFBQTB1RCxHQUFBMXVELEVBQUEydUQsR0FBQTN1RCxFQUFBNHVELEdBQUE1dUQsRUFBQWs4QixFQUFBbDhCLEVBQUF1Z0MsR0FBQSxNQUFBdmdDLEVBQUF1USxLQUFBcUssRUFBQXE5QyxpQkFBQWo0RCxFQUFBeXVELEdBQUF6dUQsRUFBQTB1RCxHQUFBMXVELEVBQUFrOEIsRUFBQWw4QixFQUFBdWdDLEdBQUEsTUFBQXZnQyxFQUFBdVEsTUFBQXFLLEVBQUFnNEMsWUFBdU0sT0FBQXI0QyxFQUFBbWhHLFdBQUFuaEcsRUFBQXFoRyxZQUFBaGhHLEVBQUFrMEMsU0FBQXYwQyxFQUFBb2hHLFVBQUFwaEcsRUFBQXNoRyxVQUFBdGhHLEVBQUE0aUcsU0FBQTM4RSxFQUFBdXRFLG9CQUFBbnpGLEVBQUEyb0MsUUFBQWpoRCxNQUFxSGkrQixFQUFBbXpELEtBQUE5eEYsVUFBQXMvRyxXQUFBLFNBQUFqbUcsRUFBQUssR0FBMkMsT0FBQWhaLEtBQUFrdUQsS0FBQWtnQyxnQkFBQXoxRSxFQUFBSyxJQUFzQ2lsQixFQUFBbXpELEtBQUE5eEYsVUFBQXE1RyxZQUFBLFNBQUFoZ0csR0FBMEMsT0FBQTNZLEtBQUFrdUQsS0FBQXlOLFNBQUEzN0QsS0FBQXNuQixPQUFBM08sSUFBeUNzbEIsRUFBQW16RCxLQUFBOXhGLFVBQUFzNUcsYUFBQSxTQUFBamdHLEdBQTJDLE9BQUEzWSxLQUFBa3VELEtBQUEwTixVQUFBNTdELEtBQUFzbkIsT0FBQTNPLElBQTBDc2xCLEVBQUFtekQsS0FBQTl4RixVQUFBZ29CLE9BQUEsU0FBQTNPLEdBQXFDLFNBQUEzWSxLQUFBa3VELEtBQUF3TixZQUFBL2lELEdBQUEzWSxLQUFBa0IsT0FBQWtsRyxVQUFBbVMsWUFBbUV0NkUsRUFBQW16RCxLQUFBOXhGLFVBQUFxeUgsaUJBQUEsU0FBQWg1RyxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEdBQXVELElBQUFzTixFQUFBVSxFQUFBNC9GLFVBQWtCLGdCQUFBNXRHLE1BQUEzSyxLQUFBNCtHLFdBQUE1bEcsRUFBQWYsSUFBQVUsRUFBQWtnRyxZQUEwRCxLQUFBMzZFLEVBQUE0cEUsT0FBQS9wRyxHQUFBNE0sRUFBQSxFQUFxQixNQUFNLEtBQUF1ekIsRUFBQTBwRSxNQUFBN3BHLEdBQUE0TSxFQUFrQixPQUFBZ08sRUFBQW1nRyxlQUF3QixLQUFBNTZFLEVBQUE2cEUsSUFBQS9wRyxHQUFBZ0MsS0FBQTI0RyxZQUFBMWdHLEdBQWtDLE1BQU0sS0FBQWltQixFQUFBNHBFLE9BQUE5cEcsR0FBQWdDLEtBQUEyNEcsWUFBQTFnRyxHQUFBLEVBQXVDLE1BQU0sS0FBQWltQixFQUFBOHBFLE9BQUFocUcsR0FBQWdDLEtBQUE0NEcsYUFBQTNnRyxHQUFzQyxPQUFPMmhCLEVBQUE3N0IsRUFBQWtnQyxFQUFBamdDLElBQVNnYixFQUFBeGIsUUFBQXlnQyxJQUFleTlELG9CQUFBLEdBQUE5QixlQUFBLEtBQXlDemxCLElBQUEsU0FBQXg3RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBYSxJQUFBQyxFQUFBMmEsRUFBQSxnQkFBd0IzYSxFQUFBc0IsVUFBQXd6RixPQUFBLFNBQUFuNkUsRUFBQUssR0FBaUMsT0FBQUwsRUFBQS9WLEtBQUFvVyxHQUFBTCxHQUFtQjNhLEVBQUFzQixVQUFBNHlILFVBQUEsU0FBQXY1RyxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEdBQTJDLElBQUFzTixFQUFBSyxPQUFRLElBQUEzTixHQUFBMk4sRUFBQTFULEtBQUFzWCxJQUFBdlIsRUFBQWdPLEVBQUFyWCxRQUFBMlcsRUFBQWphLEVBQUEyYSxJQUFBalIsTUFBQXNSLEVBQUFWLEVBQUFVLFVBQUEsSUFBQWpiLEdBQUF1YSxFQUFBdmEsRUFBQXVhLEVBQUExVCxLQUFBc1gsSUFBQTVELEVBQUFLLEVBQUFyWCxTQUFBZ1gsRUFBQUssRUFBQXJYLE9BQUEyVyxFQUFBLEVBQUFsYSxFQUFBaWIsRUFBQUwsSUFBQWpSLE1BQUEsRUFBQTRRLElBQUF4VSxNQUFBeEUsVUFBQWlDLE9BQUErRixNQUFBdkosR0FBQWthLEVBQUFLLEdBQUE4TixPQUFBek4sS0FBcUwzYSxFQUFBc0IsVUFBQThtQixPQUFBLFNBQUF6TixFQUFBSyxHQUFrQyxPQUFBTCxFQUFBeU4sT0FBQXBOLElBQW1CaGIsRUFBQXNCLFVBQUFtakIsUUFBQSxTQUFBOUosR0FBaUMsT0FBQUEsRUFBQThKLFdBQW1CemtCLEVBQUFzQixVQUFBNnlILFFBQUEsU0FBQXg1RyxHQUFpQyxPQUFBQSxFQUFBbTRDLE1BQUFuNEMsR0FBaUIzYSxFQUFBc0IsVUFBQTh5SCxRQUFBLFNBQUF6NUcsRUFBQUssR0FBbUgsSUFBaEYsSUFBZ0ZoYixFQUFBMk0sRUFBaEY1TSxFQUFBNjlDLHlCQUFBMjRDLFFBQUEzNEMsWUFBQTI0QyxPQUFBNTdFLEdBQWdGVixHQUFuQlUsRUFBQUssR0FBQWpiLEVBQUE0YSxJQUFBalIsU0FBbUJwRyxPQUF1QjJXLEVBQUEsR0FBSWphLEVBQUE0RyxLQUFBaTdCLFNBQUE1bkIsRUFBQSxFQUFBdE4sRUFBQWdPLElBQUFWLEdBQUFVLEVBQUFWLEdBQUFVLEVBQUEzYSxHQUFBMmEsRUFBQTNhLEdBQUEyTSxFQUErQyxPQUFBZ08sR0FBUzNhLEVBQUFzQixVQUFBcW9ELEtBQUEsU0FBQWh2QyxFQUFBSyxHQUFnQyxJQUFBamIsRUFBQWliLEVBQUFMLEVBQUFqUixNQUFBLEVBQUE5QyxLQUFBc1gsSUFBQWxELEVBQUFMLEVBQUFyWCxTQUFBcVgsRUFBQTNhLEVBQUFnYixFQUFBTCxFQUFBalIsTUFBQTlDLEtBQUFzWCxJQUFBbEQsRUFBQUwsRUFBQXJYLFlBQStFLE9BQUF2RCxFQUFBLGlCQUFBQSxFQUFBLEdBQUFBLEVBQUE0cEQsT0FBQTVwRCxFQUFBNHBELEtBQUEsU0FBQWh2QyxFQUFBSyxHQUE2RCxPQUFBTCxFQUFBSyxLQUFXb04sT0FBQXBvQixJQUFjQSxFQUFBc0IsVUFBQWlDLE9BQUEsU0FBQW9YLEVBQUFLLEVBQUFqYixHQUFvQyxPQUFBK0YsTUFBQXhFLFVBQUFpQyxPQUFBK0YsTUFBQXFSLEdBQUE1YSxFQUFBLEdBQUFxb0IsT0FBQXBOLElBQUFMLEdBQXlEM2EsRUFBQXNCLFVBQUEreUgsT0FBQSxTQUFBMTVHLEVBQUFLLEVBQUFqYixHQUFvQyxnQkFBQUEsRUFBQTRhLEVBQUFqUixNQUFBc1IsSUFBQWpiLEdBQUE0YSxFQUFBalIsTUFBQXNSLEVBQUFMLEVBQUFyWCxTQUFxRDBYLEVBQUF4YixRQUFBUSxJQUFlNDdGLGVBQUEsS0FBa0J4bEIsSUFBQSxTQUFBejdELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUF3QjNhLEVBQUFzQixVQUFBZ3pILE1BQUEsU0FBQTM1RyxHQUE4QixPQUFBQSxhQUFBN1UsTUFBQTZVLEVBQUFoQyxJQUFBckQsdUJBQUFxRixJQUEwRDNhLEVBQUFzQixVQUFBaXpILElBQUEsU0FBQTU1RyxFQUFBSyxHQUErQixPQUFBQSxLQUFBLG9CQUFBTCxFQUFBMUUsU0FBQTBFLEVBQUFLLEdBQUEsaUJBQUFMLEVBQUEsRUFBQUEsRUFBQSxrQkFBQUEsSUFBQSxJQUFBQSxhQUFBN1UsTUFBQTZVLEVBQUFoQyxJQUFBLFNBQUFnQyxHQUFzSSxPQUFBM2EsRUFBQXNCLFVBQUFpekgsSUFBQTU1RyxFQUFBSyxVQUE0QixHQUFTaGIsRUFBQXNCLFVBQUFrekgsSUFBQSxTQUFBNzVHLEdBQTZCLE9BQUFBLGFBQUE3VSxNQUFBNlUsRUFBQWhDLElBQUEzWSxFQUFBc0IsVUFBQWt6SCxLQUFBejFFLE9BQUFwa0MsSUFBMkQzYSxFQUFBc0IsVUFBQW16SCxRQUFBLFNBQUE5NUcsR0FBaUMsdUJBQUFBLEVBQUEsSUFBQUEsRUFBQSxpQkFBQUEsRUFBQSxTQUFBQSxFQUFBNUcsY0FBQSxrQkFBQTRHLGlCQUFBN1UsTUFBQTZVLEVBQUFoQyxJQUFBM1ksRUFBQXNCLFVBQUFtekgsY0FBQSxHQUFzSnowSCxFQUFBc0IsVUFBQTBuRSxLQUFBLFNBQUFydUQsR0FBOEIsSUFBQUssRUFBQWhiLEVBQUFzQixVQUFBaXpILElBQUE1NUcsRUFBQSxJQUE0Qix1QkFBQUssS0FBQSxhQUFBQSxhQUFBbFYsTUFBQWtWLEVBQUFyQyxJQUFBM1ksRUFBQXNCLFVBQUEwbkUsV0FBQSxHQUEyRmhwRSxFQUFBc0IsVUFBQW96SCxLQUFBLFNBQUEvNUcsR0FBOEIsdUJBQUFBLEdBQUF3OUIsTUFBQXg5QixnQkFBQTdVLE1BQUE2VSxFQUFBaEMsSUFBQTNZLEVBQUFzQixVQUFBb3pILE1BQUEsaUJBQUEvNUcsRUFBQTNhLEVBQUFzQixVQUFBb3pILEtBQUF6K0csU0FBQTBFLEVBQUEsWUFBQW9rQyxPQUFBQyxhQUFBcmtDLElBQWdLM2EsRUFBQXNCLFVBQUFxekgsT0FBQSxTQUFBaDZHLEdBQWdDLHVCQUFBQSxHQUFBLElBQUFBLEVBQUFyWCxPQUFBcVgsRUFBQXVpQyxXQUFBLEdBQUF2aUMsYUFBQTdVLE1BQUE2VSxFQUFBaEMsSUFBQTNZLEVBQUFzQixVQUFBcXpILGFBQUEsR0FBMkczMEgsRUFBQXNCLFVBQUFzekgsSUFBQSxTQUFBajZHLEVBQUFLLEdBQStCLEdBQUFBLE9BQUEsSUFBQUEsR0FBQSxPQUFBQSxJQUFBLEVBQUFBLEVBQUFMLGFBQUE3VSxNQUFBLE9BQUE2VSxFQUFBaEMsSUFBQSxTQUFBZ0MsR0FBNEUsT0FBQTNhLEVBQUFzQixVQUFBc3pILElBQUFqNkcsRUFBQUssS0FBOEIsb0JBQUFMLEVBQUEsQ0FBdUJBLEVBQUEsSUFBQUEsRUFBQSxXQUFBQSxFQUFBLEdBQXdCLFFBQUE1YSxFQUFBdytDLE9BQUE1akMsR0FBQXpZLFNBQUEsSUFBQWkwRixjQUErQ3AyRixFQUFBdUQsT0FBQTBYLEdBQVdqYixFQUFBLElBQUFBLEVBQVMsT0FBQUEsRUFBQXVELFFBQUEwWCxJQUFBamIsSUFBQTJsRCxVQUFBM2xELEVBQUF1RCxPQUFBMFgsRUFBQWpiLEVBQUF1RCxTQUFBdkQsSUFBNERDLEVBQUFzQixVQUFBdXpILE1BQUEsU0FBQWw2RyxHQUErQixPQUFBQSxhQUFBN1UsTUFBQTZVLEVBQUFoQyxJQUFBM1ksRUFBQXNCLFVBQUF1ekgsT0FBQTUrRyxTQUFBLEtBQUEwRSxFQUFBLEtBQXVFSyxFQUFBeGIsUUFBQVEsSUFBZTQ3RixlQUFBLEtBQWtCdmxCLElBQUEsU0FBQTE3RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBYSxTQUFBQyxFQUFBMmEsRUFBQUssRUFBQWpiLEdBQWtCLElBQUFDLEVBQUEyYSxFQUFBLEVBQUFoTyxFQUFBM00sRUFBQTJhLEVBQUF6WSxXQUFBd2pELFVBQUEsR0FBQS9xQyxFQUFBelksV0FBQStYLEVBQUF0TixFQUFBeEosUUFBQSxLQUFBbVgsR0FBQSxJQUFBTCxFQUFBdE4sRUFBQSs0QyxVQUFBLEVBQUF6ckMsR0FBQXROLEVBQUFvd0MsR0FBQSxJQUFBOWlDLEVBQUF0TixFQUFBKzRDLFVBQUF6ckMsRUFBQSxNQUFBdmEsRUFBQU0sRUFBQSxPQUEwSSxZQUFBRCxFQUFBLENBQWUsSUFBQXFFLEVBQUEsS0FBUyxJQUFBNlYsR0FBQWxhLEVBQUFnOUMsRUFBQXo1QyxPQUFBLEtBQUFjLEVBQUEsS0FBQTI0QyxFQUFBejVDLE9BQUF2RCxJQUFBZzlDLElBQUEySSxVQUFBLEVBQUEzbEQsSUFBaUUsUUFBQTBqQixFQUFBLEVBQVlBLEVBQUF6SSxFQUFBVixFQUFBaFgsT0FBYW1nQixJQUFBL2pCLEdBQUEsSUFBV0EsR0FBQTRhLEVBQUE1YSxHQUFBMEUsRUFBQTFFLEdBQUFxOUMsRUFBZSxRQUFBcDlDLEVBQUEsRUFBWUEsRUFBQUksRUFBQWc5QyxFQUFBejVDLE9BQWEzRCxJQUFBRCxHQUFBLElBQVcsT0FBQUEsRUFBUyxRQUFBSSxFQUFBLEVBQVlBLEVBQUE4RyxLQUFBOEssSUFBQXNKLEVBQUFWLEVBQUFoWCxPQUFBLEdBQXlCeEQsSUFBQUosR0FBQSxJQUFXLE9BQUFBLEdBQUFpTixFQUFZLFNBQUFBLEVBQUFnTyxFQUFBSyxHQUErQixJQUFBamIsR0FBZjRhLElBQUF6WSxZQUFlaUIsUUFBQSxLQUFBbkQsR0FBQSxJQUFBRCxFQUFBNGEsRUFBQStxQyxVQUFBM2xELEdBQUEsR0FBQTRNLEdBQUEsSUFBQTVNLEVBQUE0YSxFQUFBK3FDLFVBQUEsRUFBQTNsRCxHQUFBNGEsRUFBNEUsR0FBQWhPLElBQUF6SyxXQUFBaTJCLFFBQUEsd0JBQXNDLFNBQUFuZCxFQUFBaGIsRUFBQSxRQUE0QixZQUFBZ2IsRUFBQSxHQUFBQSxFQUFBaGIsRUFBQXNELE9BQW1ELFFBQUEyVyxFQUFBZSxHQUFqQmhiLElBQUEsSUFBQUQsRUFBQSxRQUFpQnVELE9BQUEsRUFBQWdYLEVBQUEsRUFBMkJBLEVBQUFMLEVBQUlLLElBQUF0YSxHQUFBLFNBQVdBLElBQUEwbEQsVUFBQSxFQUFBMXFDLEVBQUEsR0FBMEIsT0FBQXJPLEVBQUEzTSxFQUFXLFNBQUFpYSxFQUFBVSxHQUFjLE9BQUFyRixXQUFBcUYsR0FBQSxNQUFBQSxFQUFBelksV0FBQXlZLEVBQUF6WSxXQUFxRCxTQUFBb1ksRUFBQUssR0FBYyxPQUFBckYsV0FBQXFGLEdBQUEsTUFBQUEsRUFBQXpZLFdBQUF5WSxFQUFBelksV0FBcUQsSUFBQTY2QyxFQUFBcGlDLEVBQUEsZ0JBQXdCQSxFQUFBLHlCQUFBb2lDLEVBQUF6N0MsVUFBQW1DLEtBQUEsU0FBQWtYLEVBQUFLLEdBQTBELE9BQUEraEMsRUFBQSsrQyxvQkFBQSxPQUFBeDJGLFdBQUFxVixFQUFBbFgsS0FBQXVYLElBQXlEK2hDLEVBQUF6N0MsVUFBQWUsTUFBQSxTQUFBc1ksRUFBQUssR0FBaUMsT0FBQStoQyxFQUFBKytDLG9CQUFBLFFBQUF4MkYsV0FBQXFWLEVBQUF0WSxNQUFBMlksSUFBMkQraEMsRUFBQXo3QyxVQUFBd3pILFNBQUEsU0FBQW42RyxFQUFBSyxHQUFvQytoQyxFQUFBKytDLG9CQUFBLFdBQUF4MkYsV0FBNEMsUUFBQXZGLEVBQUEsSUFBQXVuRyxPQUFBdHNGLEVBQUEsS0FBQWhiLEVBQUFELEVBQUFzN0IsS0FBQTFnQixHQUFBaE8sS0FBNkMsT0FBQTNNLEdBQVMyTSxFQUFBL0gsS0FBQTVFLEtBQUFELEVBQUFzN0IsS0FBQTFnQixHQUF1QixPQUFBaE8sR0FBU293QyxFQUFBejdDLFVBQUFncUYsR0FBQSxTQUFBM3dFLEVBQUFLLEVBQUFqYixHQUFnQyxPQUFBZzlDLEVBQUErK0Msb0JBQUEsS0FBQXgyRixXQUFBcVYsYUFBQTdVLE1BQUE2VSxFQUFBaEMsSUFBQSxTQUFBZ0MsR0FBa0YsT0FBQTNhLEVBQUEyYSxFQUFBSyxFQUFBamIsS0FBZ0IsdUJBQUFLLE9BQUFrQixVQUFBWSxTQUFBckMsS0FBQThhLEdBQUEsSUFBQUEsRUFBQXJYLE9BQUF0QixLQUFBc3BGLEdBQUEzd0UsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsUUFBQUEsRUFBQXJYLE9BQUF0QixLQUFBc3BGLEdBQUEzd0UsRUFBQSxHQUFBQSxFQUFBLElBQUEzWSxLQUFBc3BGLEdBQUEzd0UsRUFBQSxJQUFBM2EsRUFBQTJhLEVBQUFLLEVBQUFqYixJQUF1Smc5QyxFQUFBejdDLFVBQUF5ekgsSUFBQSxTQUFBcDZHLEVBQUFLLEdBQStCLE9BQUEraEMsRUFBQSsrQyxvQkFBQSxNQUFBeDJGLFdBQUFxVixhQUFBN1UsTUFBQTZVLEVBQUFoQyxJQUFBLFNBQUFnQyxHQUFtRixPQUFBaE8sRUFBQWdPLEVBQUFLLEtBQWNyTyxFQUFBZ08sRUFBQUssSUFBUytoQyxFQUFBejdDLFVBQUEwekgsSUFBQSxXQUE0Qmo0RSxFQUFBKytDLG9CQUFBLE1BQUF4MkYsV0FBdUMsSUFBQXFWLEVBQUFvaUMsRUFBQXo3QyxVQUFBZ3FGLEdBQUFoaUYsTUFBQXRILEtBQUFzRCxXQUEyQyxPQUFBcVYsYUFBQTdVLE1BQUE2VSxFQUFBaEMsSUFBQXNCLEtBQUFVLElBQXdDb2lDLEVBQUF6N0MsVUFBQTJ6SCxJQUFBLFdBQTRCbDRFLEVBQUErK0Msb0JBQUEsTUFBQXgyRixXQUF1QyxJQUFBcVYsRUFBQW9pQyxFQUFBejdDLFVBQUFncUYsR0FBQWhpRixNQUFBdEgsS0FBQXNELFdBQTJDLE9BQUFxVixhQUFBN1UsTUFBQTZVLEVBQUFoQyxJQUFBMkIsS0FBQUssSUFBd0NvaUMsRUFBQXo3QyxVQUFBK0IsTUFBQSxTQUFBc1gsRUFBQUssR0FBaUMsT0FBQStoQyxFQUFBKytDLG9CQUFBLFFBQUF4MkYsV0FBQXFWLEVBQUF0WCxNQUFBMlgsSUFBMkQraEMsRUFBQXo3QyxVQUFBNHpILFlBQUEsU0FBQXY2RyxFQUFBSyxHQUFzRixJQUFBamIsRUFBTSxHQUFyRGc5QyxFQUFBKytDLG9CQUFBLGNBQUF4MkYsZ0JBQXFELElBQUEwVixFQUFBLENBQWUsSUFBQWhiLEVBQUFnYixFQUFBck8sRUFBQSxNQUFBMHVCLEtBQUFyN0IsR0FBQWlhLEVBQUEsTUFBQW9oQixLQUFBcjdCLEdBQXdDaWEsR0FBQXROLEdBQUEzTSxJQUFBMEosTUFBQSxFQUFBaUQsRUFBQXJDLE9BQUF0SyxFQUFBMEosTUFBQWlELEVBQUFyQyxNQUFBLEdBQUEyUCxFQUFBLE1BQUFvaEIsS0FBQXI3QixPQUFBMEosTUFBQSxFQUFBdVEsRUFBQTNQLE9BQUF0SyxFQUFBMEosTUFBQXVRLEVBQUEzUCxNQUFBLEdBQUF2SyxFQUFBLElBQUF1bkcsT0FBQSxPQUFBdG5HLEVBQUEsYUFBQTJNLEdBQUEzTSxJQUFBMEosTUFBQSxFQUFBaUQsRUFBQXJDLE9BQUF0SyxFQUFBMEosTUFBQWlELEVBQUFyQyxNQUFBLEdBQUF2SyxFQUFBLElBQUF1bkcsT0FBQSxJQUFBdG5HLEVBQUEsYUFBQWlhLEdBQUFqYSxJQUFBMEosTUFBQSxFQUFBdVEsRUFBQTNQLE9BQUF0SyxFQUFBMEosTUFBQXVRLEVBQUEzUCxNQUFBLEdBQUF2SyxFQUFBLElBQUF1bkcsT0FBQSxJQUFBdG5HLEVBQUEsYUFBQUQsRUFBQSxJQUFBdW5HLE9BQUEsSUFBQXRuRyxFQUFBLGNBQTJURCxFQUFBLE1BQWEsT0FBQTRhLEVBQUF0WCxNQUFBdEQsR0FBQWtvQixPQUFBLFNBQUF0TixHQUFxQyxPQUFBQSxLQUFXb2lDLEVBQUF6N0MsVUFBQW9XLEtBQUEsU0FBQWlELEdBQThCLE9BQUFvaUMsRUFBQSsrQyxvQkFBQSxPQUFBeDJGLFdBQUFxVixhQUFBN1UsTUFBQTZVLEVBQUFoQyxJQUFBM1csS0FBQTBWLE1BQUFpRCxFQUFBakQsUUFBNEZzRCxFQUFBeGIsUUFBQXU5QyxJQUFlNGdELHdCQUFBLEdBQUEvQixlQUFBLEtBQTZDdGxCLElBQUEsU0FBQTM3RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBYSxJQUFBQyxFQUFBMmEsRUFBQSxnQkFBd0IzYSxFQUFBc0IsVUFBQTZ6SCxJQUFBLFdBQTJCLFdBQUFwdUUsTUFBQXF1RSxXQUEyQnAxSCxFQUFBc0IsVUFBQSt6SCxLQUFBLFdBQTZCLFdBQUF0dUUsTUFBQXV1RSxZQUE0QnQxSCxFQUFBc0IsVUFBQWkwSCxPQUFBLFdBQStCLFdBQUF4dUUsTUFBQXl1RSxjQUE4QngxSCxFQUFBc0IsVUFBQTBzSCxPQUFBLFdBQStCLE9BQUE1bEgsT0FBQWluRyxZQUFBN25HLE9BQWdDeEgsRUFBQXNCLFVBQUFtMEgsTUFBQSxXQUE4QixXQUFBMXVFLE1BQUEydUUsV0FBQSxHQUE4QjExSCxFQUFBc0IsVUFBQXEwSCxPQUFBLFdBQStCLFdBQUE1dUUsTUFBQTZ1RSxjQUE4QjUxSCxFQUFBc0IsVUFBQXUwSCxLQUFBLFdBQTZCLFdBQUE5dUUsTUFBQSt1RSxlQUErQjk2RyxFQUFBeGIsUUFBQVEsSUFBZTQ3RixlQUFBLEtBQWtCcmxCLElBQUEsU0FBQTU3RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBYSxJQUFBQyxFQUFBMmEsRUFBQSxnQkFBd0JBLEVBQUEsaUJBQW1CLElBQUFoTyxFQUFBZ08sRUFBQSxxQkFBNkIzYSxFQUFBc0IsVUFBQXkwSCxNQUFBLFNBQUFwN0csRUFBQUssRUFBQWpiLEVBQUE0TSxHQUFvQzNLLEtBQUEyaEgsVUFBQSxTQUFBM2pILEVBQUE4N0Ysb0JBQUEsUUFBQXgyRixnQkFBQSxJQUFBcVYsTUFBQSxhQUFBSyxNQUFBTCxRQUFBLElBQUE1YSxNQUFBLFlBQUE0TSxNQUFBLEdBQTBJLElBQUFzTixFQUFBLFNBQUFsYSxFQUFBLElBQUE0TSxFQUF1QixJQUFBM0ssS0FBQW9tRyxVQUFBNHRCLGVBQUEvN0csR0FBQSxDQUFzQyxJQUFnTThpQyxFQUFBLElBQUEvOEMsRUFBQWkySCxTQUFBbDJILEVBQUE0TSxFQUFoTSxXQUFpQixRQUFBZ08sRUFBQUssRUFBQWpiLEVBQUE0TSxFQUFBLEVBQWtCQSxHQUFBM0ssS0FBQWswSCxRQUFnQnZwSCxJQUFBLENBQUtxTyxFQUFBck8sRUFBQTNLLEtBQUFrMEgsUUFBaUIsUUFBQWo4RyxFQUFBLEVBQVlBLEdBQUFqWSxLQUFBbTBILFFBQWdCbDhHLElBQUFVLEVBQUFWLEVBQUFqWSxLQUFBbTBILFFBQUFwMkgsRUFBQSxJQUFBQyxFQUFBc2dILE9BQUEzbEcsRUFBQSxHQUFBSyxFQUFBLE1BQUFoWixLQUFBbzBILFNBQUF4eEgsS0FBQTdFLEdBQUFpQyxLQUFBcTBILElBQUF6eEgsS0FBQStWLEVBQUFLLE1BQW9IK2hDLEVBQUF1NUUsZUFBQUMsaUJBQUF4MkgsR0FBQSxHQUFBNE0sR0FBQSxFQUFBb3dDLEVBQUF5NUUscUJBQUFDLG1CQUFBbGtILFFBQUFuTCxJQUFBLDZFQUFBcEYsS0FBQW9tRyxVQUFBdjVELGNBQUE1MEIsRUFBQThpQyxHQUFrTixPQUFBLzZDLEtBQUFvbUcsVUFBQXN1QixrQkFBQXo4RyxFQUFBVSxFQUFBSyxFQUFBLEdBQUFoWixNQUFzRGhDLEVBQUFzQixVQUFBcTFILElBQUEsU0FBQWg4RyxFQUFBSyxFQUFBamIsRUFBQTRNLEVBQUFzTixHQUFxQ2pZLEtBQUEyaEgsVUFBQSxPQUFBM2pILEVBQUE4N0Ysb0JBQUEsTUFBQXgyRixnQkFBQSxJQUFBcVYsTUFBQSxhQUFBSyxNQUFBTCxRQUFBLElBQUE1YSxNQUFBaWIsR0FBb0gsSUFBQVYsRUFBQXRZLEtBQUFvbUcsVUFBQStuQixZQUFBbnVILEtBQUFvbUcsVUFBQStuQixXQUFBeUcsc0JBQTRFLElBQUFqcUgsTUFBQTJOLEVBQUEsY0FBQUwsTUFBQUssRUFBQSxLQUE0QyxJQUFBeWlDLEVBQUEsT0FBQXB3QyxFQUFBLElBQUFzTixFQUFxQixJQUFBalksS0FBQW9tRyxVQUFBNHRCLGVBQUFqNUUsR0FBQSxDQUFzQyxJQUE4YTM0QyxFQUFBLElBQUFwRSxFQUFBaTJILFNBQUF0cEgsRUFBQXNOLEVBQTlhLFdBQWlCLElBQUFVLElBQUEsNERBQW9FM1ksS0FBQTYwSCxnQkFBQSxxRkFBMEcsUUFBQTc3RyxFQUFBLEVBQVlBLEVBQUFMLEVBQUFyWCxPQUFXMFgsSUFBQSxDQUFLLFFBQUFqYixFQUFBNGEsRUFBQUssR0FBQXJPLEVBQUEsRUFBQXFPLEVBQUFmLEVBQUEsRUFBeUJBLEVBQUEsRUFBSUEsSUFBQSxDQUFLLElBQUFLLEVBQUF2YSxFQUFBa2EsR0FBQThpQyxFQUFBLElBQUEvOEMsRUFBQXNnSCxRQUFBLEtBQUFobUcsR0FBQSxTQUFBQSxHQUFBLFNBQUFBLEdBQUEsUUFBbUV0WSxLQUFBbzBILFNBQUF4eEgsS0FBQW00QyxHQUFBLzZDLEtBQUFxMEgsSUFBQXp4SCxLQUFBLEVBQUFxVixHQUFBLEVBQUFBLEdBQUEsR0FBaURqWSxLQUFBODBILE1BQUFseUgsTUFBQStILElBQUEsRUFBQUEsRUFBQSxJQUFBM0ssS0FBQTgwSCxNQUFBbHlILE1BQUErSCxFQUFBLEVBQUFBLEVBQUEsRUFBQUEsRUFBQSxPQUFzRnZJLEVBQUFteUgsaUJBQUE1cEgsR0FBQSxHQUFBc04sR0FBQSxFQUFBN1YsRUFBQW95SCxxQkFBQUMsbUJBQUFsa0gsUUFBQW5MLElBQUEsMkVBQUFwRixLQUFBb21HLFVBQUF2NUQsY0FBQWtPLEVBQUEzNEMsR0FBaU0sT0FBQXBDLEtBQUFvbUcsVUFBQXN1QixrQkFBQTM1RSxFQUFBcGlDLEVBQUFLLEVBQUFqYixHQUFBaUMsTUFBc0RoQyxFQUFBc0IsVUFBQXkxSCxPQUFBLFNBQUFwOEcsRUFBQUssRUFBQWpiLEdBQW9DLE9BQUFpQyxLQUFBMmhILFVBQUEsVUFBQTNqSCxFQUFBODdGLG9CQUFBLFNBQUF4MkYsZ0JBQUEsSUFBQXFWLE1BQUEsYUFBQUssTUFBQSxhQUFBamIsTUFBQSxJQUFBaUMsS0FBQWcxSCxVQUFBcjhHLE1BQUFLLEVBQUFqYixHQUFBaUMsTUFBbUssSUFBQWlZLEVBQUEsU0FBQVUsRUFBQUssRUFBQWpiLEVBQUE0TSxFQUFBc04sRUFBQUssRUFBQXlpQyxHQUE4QnBpQyxLQUFBLElBQUFBLEVBQUFLLElBQUEsSUFBQUEsRUFBQWpiLEtBQUEsRUFBQTRhLEVBQUE1YSxFQUFBNE0sSUFBQSxJQUFBQSxFQUFBc04sSUFBQSxJQUFBQSxFQUFBSyxPQUFBLElBQUFBLEtBQUF5aUMsT0FBQSxJQUFBQSxFQUFBLElBQUEvaEMsRUFBQStoQyxFQUF5RixJQUFBcjlDLEVBQUEwRSxFQUFBcWYsRUFBQTlqQixFQUFBRyxFQUFBcUIsRUFBQW1aLEdBQUEsSUFBQW5hLEVBQUE4WixHQUFBOGlDLEVBQUEsS0FBQXY3QyxLQUF1Q2lWLEVBQUE3UCxLQUFBb3JILE1BQUFyM0csRUFBQUssRUFBQWpiLEdBQXFCLElBQUFMLEVBQUF5QixFQUFRekIsR0FBQVMsSUFBS1QsRUFBQSxDQUFLLElBQUFjLEVBQUFpQixFQUFBL0IsRUFBQXVhLEVBQUFyWixFQUFBYixFQUFBMEIsRUFBa0IsSUFBQS9CLEVBQUEsR0FBQWtCLEVBQUEsRUFBQWEsRUFBQSxFQUFBakIsRUFBQW1hLEdBQUFqYixFQUFBdWEsR0FBQXJaLEVBQUFiLEVBQUEwQixFQUFBLEVBQUFqQixFQUFBd2EsR0FBQXhhLEVBQUFtYSxHQUFBSyxFQUFBTCxHQUFBbFosR0FBQSxJQUFBL0IsT0FBQXVhLEVBQUEsSUFBQXpaLEVBQUEsR0FBQUksR0FBQWIsRUFBQSxFQUFBeUIsRUFBQTlCLEdBQUEsSUFBQWMsRUFBQSxFQUFBbU0sRUFBQXZJLEVBQUEsRUFBcUdBLEVBQUE1QyxFQUFBOUIsS0FBTzBFLEVBQUEsQ0FBSyxJQUFBazZDLEVBQUFsNkMsRUFBQXVJLEVBQVUzSyxLQUFBbzBILFNBQUF4eEgsS0FBQSxJQUFBNUUsRUFBQXNnSCxPQUFBMTVHLEtBQUFFLElBQUEsRUFBQXczQyxFQUFBMTNDLEtBQUFDLElBQUFyRyxFQUFBSSxFQUFBZ0csS0FBQXFkLElBQUEsRUFBQXE2QixFQUFBMTNDLEtBQUFDLElBQUFyRyxJQUFBd0IsS0FBQWkxSCxjQUFBcnlILEtBQUEsSUFBQTVFLEVBQUFzZ0gsT0FBQTVnSCxFQUFBLEdBQUFBLEVBQUF1YSxFQUFBLEVBQUFyVCxLQUFBRSxJQUFBLEVBQUF3M0MsRUFBQTEzQyxLQUFBQyxJQUFBRCxLQUFBcWQsSUFBQXhOLEdBQUEvVyxFQUFBLEtBQUFBLEVBQUF1YSxFQUFBLEVBQUFyVCxLQUFBRSxJQUFBMlAsR0FBQS9XLEVBQUEsR0FBQUEsRUFBQXVhLEVBQUEsRUFBQXJULEtBQUFxZCxJQUFBLEVBQUFxNkIsRUFBQTEzQyxLQUFBQyxJQUFBRCxLQUFBcWQsSUFBQXhOLEtBQUF6VSxLQUFBcTBILElBQUF6eEgsS0FBQTA1QyxFQUFBNzhDLElBQWtRLElBQUErMUMsRUFBQSxFQUFRLEdBQUFsOUIsRUFBQSxDQUFNLElBQUFtSixFQUFBLEVBQVFBLEVBQUFqaUIsR0FBQSxLQUFRaWlCLEVBQUEzakIsR0FBQTJqQixFQUFBLEdBQUFqaUIsR0FBQSxHQUFBUSxLQUFBODBILE1BQUFseUgsTUFBQTR5QyxJQUFBLEVBQUExM0MsRUFBQTAzQyxFQUFBLEVBQUEvekIsSUFBbUQrekIsR0FBQWgyQyxHQUFBLEdBQUFBLEdBQUEsR0FBZSxJQUFBOUIsRUFBQSxFQUFRQSxFQUFBdWEsSUFBSXZhLEVBQUEsQ0FBSyxJQUFBMEUsRUFBQSxFQUFRQSxFQUFBNUMsRUFBQTlCLEtBQU8wRSxFQUFBLElBQUE1QyxFQUFBOUIsRUFBQSxJQUFBQyxHQUFBeUUsRUFBQSxHQUFBNUMsRUFBQTlCLEdBQUFzQyxLQUFBODBILE1BQUFseUgsTUFBQTR5QyxFQUFBcHpDLEVBQUFvekMsRUFBQTczQyxFQUFBNjNDLEVBQUFoMkMsRUFBQTlCLE9BQUFDLEdBQUF5RSxFQUFBLEdBQUE1QyxFQUFBOUIsR0FBQXNDLEtBQUE4MEgsTUFBQWx5SCxNQUFBNHlDLEVBQUFwekMsRUFBQW96QyxFQUFBNzNDLEVBQUE2M0MsRUFBQWgyQyxFQUFBOUIsR0FBQUMsSUFBQXFDLEtBQUE4MEgsTUFBQWx5SCxNQUFBNHlDLEVBQUFwekMsRUFBQW96QyxFQUFBaDJDLEVBQUE5QixHQUFBQyxFQUFBNjNDLEVBQUFoMkMsRUFBQTlCLEdBQUEwRSxLQUE0Sm96QyxHQUFBaDJDLEVBQUE5QixHQUFRLEdBQUFxOUMsRUFBQSxJQUFBdkYsR0FBQWgyQyxFQUFBeVksR0FBQTdWLEVBQUEsRUFBcUJBLEVBQUE1QyxFQUFBeVksRUFBQSxLQUFTN1YsRUFBQXpFLEdBQUF5RSxFQUFBLEdBQUE1QyxFQUFBeVksRUFBQSxHQUFBalksS0FBQTgwSCxNQUFBbHlILE1BQUE0eUMsRUFBQXB6QyxFQUFBb3pDLEVBQUE3M0MsRUFBQTYzQyxFQUFBaDJDLEVBQUF5WSxFQUFBLE1BQXdEamEsRUFBQXNCLFVBQUE0MUgsU0FBQSxTQUFBdjhHLEVBQUFLLEVBQUFqYixFQUFBNE0sRUFBQTJOLEVBQUF5aUMsR0FBMkMvNkMsS0FBQTJoSCxVQUFBLFlBQUEzakgsRUFBQTg3RixvQkFBQSxXQUFBeDJGLGdCQUFBLElBQUFxVixNQUFBLGFBQUFLLE1BQUFMLFFBQUEsSUFBQTVhLE1BQUEsYUFBQTRNLE1BQUEsWUFBQW93QyxPQUFBLFFBQ25sK0IsSUFBQXppQyxPQUFBLEdBQW1CLElBQUE1YSxFQUFBLFlBQUFLLEVBQUEsSUFBQTRNLEVBQUEsSUFBQTJOLEVBQUEsSUFBQXlpQyxFQUFzQyxJQUFBLzZDLEtBQUFvbUcsVUFBQTR0QixlQUFBdDJILEdBQUEsQ0FBc0MsSUFBQTBFLEVBQUEsSUFBQXBFLEVBQUFpMkgsU0FBQWwySCxFQUFBNE0sR0FBMEJzTixFQUFBcGEsS0FBQXVFLEVBQUEsTUFBQXJFLEVBQUE0TSxFQUFBMk4sRUFBQXlpQyxHQUFBMzRDLEVBQUFteUgsaUJBQUF4MkgsR0FBQSxJQUFBNE0sR0FBQSxHQUFBdkksRUFBQW95SCxxQkFBQUMsbUJBQUFsa0gsUUFBQW5MLElBQUEsa0ZBQUFwRixLQUFBb21HLFVBQUF2NUQsY0FBQW52QyxFQUFBMEUsR0FBa08sT0FBQXBDLEtBQUFvbUcsVUFBQXN1QixrQkFBQWgzSCxFQUFBaWIsRUFBQUssRUFBQUwsR0FBQTNZLE1BQXNEaEMsRUFBQXNCLFVBQUE2MUgsS0FBQSxTQUFBeDhHLEVBQUFLLEVBQUFqYixFQUFBNE0sRUFBQTJOLEdBQXNDdFksS0FBQTJoSCxVQUFBLFFBQUEzakgsRUFBQTg3RixvQkFBQSxPQUFBeDJGLGdCQUFBLElBQUFxVixNQUFBLGFBQUFLLE1BQUFMLFFBQUEsSUFBQTVhLE1BQUEsYUFBQTRNLE1BQUEsWUFBQTJOLE9BQUEsR0FBNEosSUFBQXlpQyxFQUFBLFFBQUFoOUMsRUFBQSxJQUFBNE0sRUFBQSxJQUFBMk4sRUFBNEIsSUFBQXRZLEtBQUFvbUcsVUFBQTR0QixlQUFBajVFLEdBQUEsQ0FBc0MsSUFBQXI5QyxFQUFBLElBQUFNLEVBQUFpMkgsU0FBQWwySCxFQUFBNE0sR0FBMEJzTixFQUFBcGEsS0FBQUgsRUFBQSxNQUFBSyxFQUFBNE0sRUFBQTJOLEdBQUEsR0FBQTVhLEVBQUE2MkgsaUJBQUF4MkgsR0FBQSxJQUFBNE0sR0FBQSxHQUFBak4sRUFBQTgySCxxQkFBQUMsbUJBQUFsa0gsUUFBQW5MLElBQUEsOEVBQUFwRixLQUFBb21HLFVBQUF2NUQsY0FBQWtPLEVBQUFyOUMsR0FBK04sT0FBQXNDLEtBQUFvbUcsVUFBQXN1QixrQkFBQTM1RSxFQUFBcGlDLEVBQUFLLEVBQUFMLEdBQUEzWSxNQUFzRGhDLEVBQUFzQixVQUFBMDFILFVBQUEsU0FBQXI4RyxFQUFBSyxFQUFBamIsRUFBQTRNLEVBQUFzTixHQUEyQ2pZLEtBQUEyaEgsVUFBQSxhQUFBM2pILEVBQUE4N0Ysb0JBQUEsWUFBQXgyRixnQkFBQSxJQUFBcVYsTUFBQSxhQUFBSyxNQUFBTCxRQUFBLElBQUE1YSxNQUFBNGEsUUFBQSxJQUFBaE8sTUFBQSxhQUFBc04sTUFBQSxJQUFzSyxJQUFBSyxFQUFBLGFBQUEzTixFQUFBLElBQUFzTixFQUEyQixJQUFBalksS0FBQW9tRyxVQUFBNHRCLGVBQUExN0csR0FBQSxDQUFzQyxJQUFtVDVhLEVBQUEsSUFBQU0sRUFBQWkySCxTQUFBdHBILEVBQUFzTixFQUFuVCxXQUFpQixRQUFBVSxFQUFBLEVBQVlBLEdBQUEzWSxLQUFBazBILFFBQWdCdjdHLElBQUEsUUFBQUssRUFBQUwsRUFBQTNZLEtBQUFrMEgsUUFBQW4ySCxFQUFBNkcsS0FBQUMsR0FBQW1VLEVBQUFwVSxLQUFBQyxHQUFBLEVBQUE4RixFQUFBL0YsS0FBQXFkLElBQUFsa0IsR0FBQWthLEVBQUFyVCxLQUFBRSxJQUFBL0csR0FBQXVhLEVBQUEsRUFBbUZBLEdBQUF0WSxLQUFBbTBILFFBQWdCNzdHLElBQUEsQ0FBSyxJQUFBeWlDLEVBQUF6aUMsRUFBQXRZLEtBQUFtMEgsUUFBQXoySCxFQUFBLEVBQUFrSCxLQUFBQyxHQUFBazJDLEVBQUEzNEMsRUFBQXdDLEtBQUFxZCxJQUFBdmtCLEdBQUErakIsRUFBQTdjLEtBQUFFLElBQUFwSCxHQUFBQyxFQUFBLElBQUFLLEVBQUFzZ0gsT0FBQTN6RyxFQUFBOFcsRUFBQXhKLEVBQUF0TixFQUFBdkksR0FBeUZwQyxLQUFBbzBILFNBQUF4eEgsS0FBQWpGLEdBQUFxQyxLQUFBaTFILGNBQUFyeUgsS0FBQWpGLEdBQUFxQyxLQUFBcTBILElBQUF6eEgsS0FBQW00QyxFQUFBL2hDLE1BQThGdGIsRUFBQTQySCxlQUFBM3BILEdBQUEsSUFBQXNOLEdBQUEsR0FBQXZhLEVBQUE4MkgscUJBQUFDLG1CQUFBbGtILFFBQUFuTCxJQUFBLDRFQUFBcEYsS0FBQW9tRyxVQUFBdjVELGNBQUF2MEIsRUFBQTVhLEdBQWtNLE9BQUFzQyxLQUFBb21HLFVBQUFzdUIsa0JBQUFwOEcsRUFBQUssRUFBQUssRUFBQWpiLEdBQUFpQyxNQUFzRGhDLEVBQUFzQixVQUFBODFILE1BQUEsU0FBQXo4RyxFQUFBSyxFQUFBamIsRUFBQTRNLEdBQXFDLEdBQUEzSyxLQUFBMmhILFVBQUEsU0FBQTNqSCxFQUFBODdGLG9CQUFBLFFBQUF4MkYsZ0JBQUEsSUFBQXFWLElBQUEsUUFBb0YsSUFBQUEsRUFBQSxPQUFrQixZQUFBSyxJQUFBLFFBQW1CLElBQUFBLEVBQUEsWUFBa0IsSUFBQWpiLE1BQUEsYUFBQTRNLE1BQUEsSUFBc0MsSUFBQXNOLEdBQUFlLEVBQUFMLEdBQUFzakYsWUFBQSxHQUFBM2pGLEVBQUEsU0FBQUwsRUFBQSxJQUFBbGEsRUFBQSxJQUFBNE0sRUFBb0QsSUFBQTNLLEtBQUFvbUcsVUFBQTR0QixlQUFBMTdHLEdBQUEsQ0FBc0MsSUFBK1U1YSxFQUFBLElBQUFNLEVBQUFpMkgsU0FBQWwySCxFQUFBNE0sRUFBL1UsV0FBaUIsUUFBQWdPLEVBQUEsRUFBWUEsR0FBQTNZLEtBQUFrMEgsUUFBZ0J2N0csSUFBQSxRQUFBSyxFQUFBTCxFQUFBM1ksS0FBQWswSCxRQUFBbjJILEVBQUEsRUFBQTZHLEtBQUFDLEdBQUFtVSxFQUFBck8sRUFBQS9GLEtBQUFxZCxJQUFBbGtCLEdBQUF1YSxFQUFBMVQsS0FBQUUsSUFBQS9HLEdBQUFnOUMsRUFBQSxFQUFBOWlDLEVBQUF0TixFQUFBak4sRUFBQSxFQUFtRkEsR0FBQXNDLEtBQUFtMEgsUUFBZ0J6MkgsSUFBQSxDQUFLLElBQUEwRSxFQUFBMUUsRUFBQXNDLEtBQUFtMEgsUUFBQTF5RyxFQUFBLEVBQUE3YyxLQUFBQyxHQUFBekMsRUFBQXpFLEVBQUFpSCxLQUFBcWQsSUFBQVIsR0FBQTNqQixFQUFBOEcsS0FBQUUsSUFBQTJjLEdBQUF0aUIsRUFBQSxJQUFBbkIsRUFBQXNnSCxPQUFBdmpFLEVBQUFwOUMsRUFBQW85QyxFQUFBajlDLEVBQUFtYSxFQUFBSyxHQUFBbmEsRUFBQSxJQUFBSCxFQUFBc2dILE9BQUEzekcsRUFBQWhOLEVBQUFnTixFQUFBN00sRUFBQXdhLEdBQXFIdFksS0FBQW8wSCxTQUFBeHhILEtBQUF6RCxHQUFBYSxLQUFBaTFILGNBQUFyeUgsS0FBQXpFLEdBQUE2QixLQUFBcTBILElBQUF6eEgsS0FBQVIsRUFBQTRXLE1BQThGdGIsRUFBQTQySCxlQUFBdjJILEdBQUEsSUFBQTRNLEdBQUEsR0FBQWpOLEVBQUE4MkgscUJBQUFDLG1CQUFBbGtILFFBQUFuTCxJQUFBLCtFQUFBcEYsS0FBQW9tRyxVQUFBdjVELGNBQUF2MEIsRUFBQTVhLEdBQXFNLE9BQUFzQyxLQUFBb21HLFVBQUFzdUIsa0JBQUFwOEcsRUFBQUssT0FBQTNZLE1BQXNEaEMsRUFBQTg1RyxXQUFBeDRHLFVBQUEwdkIsTUFBQSxTQUFBclcsRUFBQUssRUFBQWpiLEdBQThDaUMsS0FBQXExSCxrQkFBQXIxSCxLQUFBczFILGVBQUFDLGtCQUFBLElBQUF4M0gsTUFBQSxHQUEwRSxJQUFBNE0sS0FBUyxPQUFBQSxFQUFBL0gsS0FBQSxJQUFBNUUsRUFBQXNnSCxPQUFBM2xHLEVBQUFLLEVBQUFqYixJQUFBaUMsS0FBQXcxSCxZQUFBN3FILEVBQUEzSyxLQUFBeTFILG9CQUFBejFILEtBQUFzMUgsZUFBQUksZUFBQTExSCxNQUF1SGhDLEVBQUE4NUcsV0FBQXg0RyxVQUFBMDlHLFNBQUEsU0FBQXJrRyxHQUE2QyxJQUFBSyxFQUFBTCxFQUFBLEdBQUE1YSxFQUFBNGEsRUFBQSxHQUFBaE8sRUFBQWdPLEVBQUEsR0FBQVYsRUFBQVUsRUFBQSxHQUFBTCxFQUFBSyxFQUFBLEdBQUFvaUMsRUFBQXBpQyxFQUFBLEdBQUFqYixFQUFBLE1BQXNELElBQUFzQyxLQUFBZzBILGVBQUF0MkgsR0FBQSxDQUE0QixJQUFpTitqQixFQUFBLElBQUF6akIsRUFBQWkySCxTQUFBLElBQWpOLFdBQWlCLElBQUF0N0csS0FBU0EsRUFBQS9WLEtBQUEsSUFBQTVFLEVBQUFzZ0gsT0FBQSxRQUFBM2xHLEVBQUEvVixLQUFBLElBQUE1RSxFQUFBc2dILE9BQUEsUUFBQTNsRyxFQUFBL1YsS0FBQSxJQUFBNUUsRUFBQXNnSCxPQUFBLFFBQUF0K0csS0FBQTYwSCxnQkFBQSxrQkFBQTcwSCxLQUFBbzBILFNBQUF6N0csRUFBQTNZLEtBQUE4MEgsUUFBQSxRQUFBOTBILEtBQUFxMEgsS0FBQSxlQUFnTjV5RyxFQUFBK3lHLHFCQUFBQyxtQkFBQWh6RyxFQUFBOHlHLGlCQUFBdjBILEtBQUE2c0MsY0FBQW52QyxFQUFBK2pCLEdBQXFGLElBQUE5akIsRUFBQXFDLEtBQUEyMUgsVUFBQTMwRixPQUE0QixJQUFJLElBQUFsakMsRUFBQSxJQUFBRSxFQUFBNDNILFFBQUFqckgsRUFBQXFPLEVBQUFmLEVBQUFsYSxFQUFBLElBQUF1YSxFQUFBVSxFQUFBK2hDLEVBQUFoOUMsRUFBQSxZQUFBaWIsRUFBQWpiLEVBQUEsTUFBQTAyQyxLQUFBejBDLEtBQUEyMUgsV0FBbUYzMUgsS0FBQTIxSCxVQUFBNzNILEVBQUFrQyxLQUFBNjFILFlBQUFuNEgsR0FBcUMsUUFBUXNDLEtBQUEyMUgsVUFBQWg0SCxFQUFpQixPQUFBcUMsTUFBWWhDLEVBQUE4NUcsV0FBQXg0RyxVQUFBbzlHLFFBQUEsU0FBQS9qRyxHQUE0QzNZLEtBQUE0c0UsSUFBQWowRCxFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLEtBQUFoTyxFQUFBeThGLE9BQUF6OEYsRUFBQWkrRixLQUFBandGLEVBQUEsS0FBcUQzYSxFQUFBODVHLFdBQUF4NEcsVUFBQXN0RSxJQUFBLFNBQUFqMEQsR0FBd0MsSUFBQUssRUFBQWpiLEVBQUFrYSxFQUFBM1UsVUFBQSxHQUFBZ1YsRUFBQWhWLFVBQUEsR0FBQXkzQyxFQUFBejNDLFVBQUEsR0FBQTVGLEVBQUE0RixVQUFBLEdBQUFsQixFQUFBa0IsVUFBQSxHQUFBbWUsRUFBQW5lLFVBQUEsR0FBQTNGLEVBQUEyRixVQUFBLEdBQUF4RixFQUFBd0YsVUFBQSxPQUFvSSxHQUFBdkYsRUFBQTZHLEtBQUFzVixJQUFBdUgsRUFBQXJmLElBQUF1SSxFQUFBeThGLFFBQUFwdUYsRUFBQSxlQUFBbGIsRUFBQSxLQUFBa2IsRUFBQSxXQUFBNVcsRUFBQSxJQUFBcWYsRUFBQSxJQUFBOWpCLEVBQUEsSUFBQUcsRUFBQSxLQUFBa0MsS0FBQWcwSCxlQUFBajJILEdBQUEsQ0FBMEgsSUFBazZCSSxFQUFBLElBQUFILEVBQUFpMkgsU0FBQW4ySCxFQUFBLEVBQWw2QixXQUFpQixHQUFBa0MsS0FBQTYwSCxpQkFBQXp5SCxFQUFBOE0sUUFBQSxNQUFBdVMsRUFBQXZTLFFBQUEsS0FBd0R2UixJQUFBZ04sRUFBQW0rRixVQUFBLElBQUFuckcsSUFBQXFDLEtBQUFvMEgsU0FBQXh4SCxLQUFBLElBQUE1RSxFQUFBc2dILE9BQUEsVUFBQXQrRyxLQUFBcTBILElBQUF6eEgsTUFBQSxTQUEwRixRQUFBK1YsRUFBQSxFQUFZQSxHQUFBN2EsRUFBSzZhLElBQUEsQ0FBSyxJQUFBSyxFQUFBTCxFQUFBN2EsRUFBQUMsR0FBQTBqQixFQUFBcmYsR0FBQTRXLEVBQUE1VyxFQUFBNlYsRUFBQSxHQUFBclQsS0FBQXFkLElBQUFsa0IsR0FBQSxFQUFBdWEsRUFBQSxHQUFBMVQsS0FBQUUsSUFBQS9HLEdBQUEsRUFBNERpQyxLQUFBbzBILFNBQUF4eEgsS0FBQSxJQUFBNUUsRUFBQXNnSCxPQUFBcm1HLEVBQUFLLEVBQUEsSUFBQXRZLEtBQUFxMEgsSUFBQXp4SCxNQUFBcVYsRUFBQUssSUFBQUssRUFBQTdhLEVBQUEsSUFBQWtDLEtBQUE4MEgsTUFBQWx5SCxNQUFBLEVBQUErVixFQUFBLEVBQUFBLEVBQUEsSUFBQTNZLEtBQUE2MEgsY0FBQWp5SCxNQUFBK1YsRUFBQSxFQUFBQSxFQUFBLEtBQXNJLE9BQUFoYixHQUFVLEtBQUFnTixFQUFBbStGLElBQUE5b0csS0FBQTgwSCxNQUFBbHlILE1BQUEsRUFBQTVDLEtBQUFvMEgsU0FBQTl5SCxPQUFBLEVBQUF0QixLQUFBbzBILFNBQUE5eUgsT0FBQSxJQUFBdEIsS0FBQTYwSCxjQUFBanlILE1BQUEsTUFBQTVDLEtBQUE2MEgsY0FBQWp5SCxNQUFBNUMsS0FBQW8wSCxTQUFBOXlILE9BQUEsRUFBQXRCLEtBQUFvMEgsU0FBQTl5SCxPQUFBLElBQUF0QixLQUFBNjBILGNBQUFqeUgsTUFBQSxFQUFBNUMsS0FBQW8wSCxTQUFBOXlILE9BQUEsSUFBME8sTUFBTSxLQUFBcUosRUFBQWsrRixNQUFBN29HLEtBQUE2MEgsY0FBQWp5SCxNQUFBLE1BQUE1QyxLQUFBNjBILGNBQUFqeUgsTUFBQSxFQUFBNUMsS0FBQW8wSCxTQUFBOXlILE9BQUEsSUFBZ0csTUFBTSxLQUFBcUosRUFBQWkrRixLQUFBNW9HLEtBQUE2MEgsY0FBQWp5SCxNQUFBLE1BQTJDLE1BQU0sUUFBQTVDLEtBQUE4MEgsTUFBQWx5SCxNQUFBLEVBQUE1QyxLQUFBbzBILFNBQUE5eUgsT0FBQSxFQUFBdEIsS0FBQW8wSCxTQUFBOXlILE9BQUEsSUFBQXRCLEtBQUE2MEgsY0FBQWp5SCxNQUFBNUMsS0FBQW8wSCxTQUFBOXlILE9BQUEsRUFBQXRCLEtBQUFvMEgsU0FBQTl5SCxPQUFBLFFBQStLbkQsRUFBQW8ySCxpQkFBQXoySCxHQUFBLEdBQUFLLEVBQUFxMkgscUJBQUFDLGlCQUFBdDJILEdBQUFvUyxRQUFBbkwsSUFBQSxpQkFBQTRULEVBQUEsNkJBQUFoWixLQUFBNnNDLGNBQUE5dUMsRUFBQUksR0FBd0osSUFBQXFCLEVBQUFRLEtBQUEyMUgsVUFBQTMwRixPQUE0QixJQUFJaGhDLEtBQUEyMUgsVUFBQS9ZLFdBQUEza0csRUFBQUssRUFBQSxJQUFBdFksS0FBQTIxSCxVQUFBM2EsTUFBQWpnRSxFQUFBcjlDLEVBQUEsR0FBQXNDLEtBQUE2MUgsWUFBQTkzSCxHQUFrRixRQUFRaUMsS0FBQTIxSCxVQUFBbjJILEVBQWlCLE9BQUFRLE1BQVloQyxFQUFBODVHLFdBQUF4NEcsVUFBQXc5RyxLQUFBLFNBQUFua0csR0FBeUMsSUFBQUssRUFBQWhaLEtBQUFtdUgsV0FBQXlHLGlCQUFBNzJILEVBQUE0YSxFQUFBLEdBQUFoTyxFQUFBZ08sRUFBQSxHQUFBVixFQUFBVSxFQUFBLEdBQUFMLEVBQUFLLEVBQUEsR0FBQW9pQyxFQUFBcGlDLEVBQUEsS0FBQUssRUFBQSxNQUFBdGIsRUFBQWliLEVBQUEsS0FBQUssRUFBQSxNQUFBNVcsRUFBQSxRQUFBMjRDLEVBQUEsSUFBQXI5QyxFQUF1SCxJQUFBc0MsS0FBQWcwSCxlQUFBNXhILEdBQUEsQ0FBNEIsSUFBb1J6RSxFQUFBLElBQUFLLEVBQUFpMkgsU0FBQWw1RSxFQUFBcjlDLEVBQXBSLFdBQWlCLFFBQUFpYixFQUFBLEVBQVlBLEdBQUEzWSxLQUFBazBILFFBQWdCdjdHLElBQUEsUUFBQUssRUFBQUwsRUFBQTNZLEtBQUFrMEgsUUFBQW4ySCxFQUFBLEVBQWlDQSxHQUFBaUMsS0FBQW0wSCxRQUFnQnAySCxJQUFBLENBQUssSUFBQTRNLEVBQUE1TSxFQUFBaUMsS0FBQW0wSCxRQUFBbDhHLEVBQUEsSUFBQWphLEVBQUFzZ0gsT0FBQTN6RyxFQUFBcU8sRUFBQSxHQUEyQ2haLEtBQUFvMEgsU0FBQXh4SCxLQUFBcVYsR0FBQWpZLEtBQUFxMEgsSUFBQXp4SCxLQUFBK0gsRUFBQXFPLEdBQXlDK2hDLEVBQUEsR0FBQXI5QyxFQUFBLElBQUFzQyxLQUFBNjBILGdCQUFBLEVBQUE5NUUsU0FBQSxJQUFBcjlDLEVBQUEsUUFBQXE5QyxFQUFBLElBQUFyOUMsRUFBQSxNQUFBcTlDLEVBQUEsR0FBQXI5QyxLQUFBcTlDLEVBQUEsR0FBQXI5QyxFQUFBLE9BQXNIQyxFQUFBMjJILGVBQUFDLGlCQUFBQyxxQkFBQUMsbUJBQUF6MEgsS0FBQTZzQyxjQUFBenFDLEVBQUF6RSxHQUFrRyxJQUFBRyxFQUFBa0MsS0FBQTIxSCxVQUFBMzBGLE9BQTRCLElBQUloaEMsS0FBQTIxSCxVQUFBL1ksV0FBQTcrRyxFQUFBNE0sRUFBQSxJQUFBM0ssS0FBQTIxSCxVQUFBM2EsTUFBQS9pRyxFQUFBSyxFQUFBLEdBQUF0WSxLQUFBNjFILFlBQUF6ekgsR0FBa0YsUUFBUXBDLEtBQUEyMUgsVUFBQTczSCxFQUFpQixPQUFBa0MsTUFBWWhDLEVBQUE4NUcsV0FBQXg0RyxVQUFBdTlHLEtBQUEsU0FBQWxrRyxFQUFBSyxFQUFBamIsRUFBQTRNLEVBQUFzTixFQUFBSyxFQUFBeWlDLEVBQUFyOUMsR0FBdUQsSUFBQTBFLEVBQUEsUUFBQXVXLEVBQUEsSUFBQUssRUFBQSxJQUFBamIsRUFBQSxJQUFBNE0sRUFBQSxJQUFBc04sRUFBQSxJQUFBSyxFQUFBLElBQUF5aUMsRUFBQSxJQUFBcjlDLEVBQTBELElBQUFzQyxLQUFBZzBILGVBQUE1eEgsR0FBQSxDQUE0QixJQUE2UHpFLEVBQUEsSUFBQUssRUFBQWkySCxTQUFBLElBQTdQLFdBQWlCajBILEtBQUFvMEgsU0FBQXh4SCxLQUFBLElBQUE1RSxFQUFBc2dILE9BQUEzbEcsRUFBQUssRUFBQSxJQUFBaFosS0FBQW8wSCxTQUFBeHhILEtBQUEsSUFBQTVFLEVBQUFzZ0gsT0FBQXZnSCxFQUFBNE0sRUFBQSxJQUFBM0ssS0FBQW8wSCxTQUFBeHhILEtBQUEsSUFBQTVFLEVBQUFzZ0gsT0FBQXJtRyxFQUFBSyxFQUFBLElBQUF0WSxLQUFBbzBILFNBQUF4eEgsS0FBQSxJQUFBNUUsRUFBQXNnSCxPQUFBdmpFLEVBQUFyOUMsRUFBQSxJQUFBc0MsS0FBQXEwSCxJQUFBenhILEtBQUEsaUJBQUE1QyxLQUFBNjBILGdCQUFBLDBCQUFxUWwzSCxFQUFBNDJILGlCQUFBQyxxQkFBQUMsbUJBQUE5MkgsRUFBQW0zSCxRQUFBLGdCQUFBOTBILEtBQUE2c0MsY0FBQXpxQyxFQUFBekUsR0FBNkcsT0FBQXFDLEtBQUE2MUgsWUFBQXp6SCxHQUFBcEMsTUFBZ0NoQyxFQUFBODVHLFdBQUF4NEcsVUFBQXMrRyxPQUFBLFNBQUFqbEcsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBc04sRUFBQUssRUFBQXlpQyxFQUFBcjlDLEVBQUEwRSxFQUFBcWYsRUFBQTlqQixHQUFpRSxJQUFBMkYsVUFBQWhDLFNBQUFjLEVBQUFrVyxFQUFBbUosRUFBQXM1QixFQUFBemlDLEVBQUEzTixFQUFBb3dDLEVBQUEvOEMsRUFBQTJNLEVBQUEzTSxFQUFBRCxJQUFBa2EsRUFBQXZhLEVBQUFDLEVBQUEsR0FBMEQsSUFBQUcsRUFBQWtDLEtBQUFrMkcsT0FBQXBCLGVBQUEsR0FBb0M5MEcsS0FBQTY5RyxhQUFrQixRQUFBMStHLEVBQUEsRUFBWUEsR0FBQXJCLEVBQUtxQixJQUFBLENBQUssSUFBQWhCLEVBQUF5RyxLQUFBSyxJQUFBLEVBQUE5RixFQUFBckIsRUFBQSxHQUFBMEIsRUFBQUwsRUFBQXJCLEVBQUEsRUFBQThHLEtBQUFLLElBQUEsRUFBQTlGLEVBQUFyQixFQUFBLEdBQUEyVyxFQUFBLEVBQUE3UCxLQUFBSyxJQUFBOUYsRUFBQXJCLEVBQUEsTUFBQXFCLEVBQUFyQixHQUFBVSxFQUFBb0csS0FBQUssSUFBQTlGLEVBQUFyQixFQUFBLEdBQWdHa0MsS0FBQTg5RyxPQUFBbmxHLEVBQUF4YSxFQUFBSCxFQUFBd0IsRUFBQThZLEVBQUE3RCxFQUFBclMsRUFBQTVELEVBQUF3YSxFQUFBN2EsRUFBQXdNLEVBQUFuTCxFQUFBdTdDLEVBQUF0bUMsRUFBQWdOLEVBQUFqakIsRUFBQVQsRUFBQUksRUFBQThaLEVBQUF6WSxFQUFBOUIsRUFBQStXLEVBQUE5VyxFQUFBYSxHQUE2RCxPQUFBd0IsS0FBQWk5RyxXQUFBajlHLE1BQTRCaEMsRUFBQTg1RyxXQUFBeDRHLFVBQUErUyxNQUFBLFNBQUFzRyxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixFQUFBSyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQUFxZixFQUFBOWpCLEdBQWdFLElBQUEyRixVQUFBaEMsU0FBQWMsRUFBQWtXLEVBQUFtSixFQUFBczVCLEVBQUF6aUMsRUFBQTNOLEVBQUFvd0MsRUFBQS84QyxFQUFBMk0sRUFBQTNNLEVBQUFELElBQUFrYSxFQUFBdmEsRUFBQUMsRUFBQSxHQUEwRCxJQUFBRyxFQUFBa0MsS0FBQWsyRyxPQUFBbkIsYUFBK0IvMEcsS0FBQTY5RyxhQUFrQixRQUFBMStHLEVBQUEsRUFBWUEsR0FBQXJCLEVBQUtxQixJQUFBLENBQUssSUFBQWhCLEVBQUEsR0FBQXlHLEtBQUFLLElBQUE5RixFQUFBckIsRUFBQSxHQUFBMEIsRUFBQSxHQUFBb0YsS0FBQUssSUFBQTlGLEVBQUFyQixFQUFBLEdBQUEyVyxFQUFBdFYsRUFBQXJCLEVBQUEsR0FBQTJCLEVBQUF0QixHQUFBLEVBQUFILEVBQUEyYSxFQUFBLEVBQUFMLEVBQUFsVyxHQUFBNUMsR0FBQSxFQUFBbVosRUFBQSxFQUFBM2EsRUFBQSxFQUFBc2EsRUFBQWxXLEdBQUFxUyxJQUFBa0UsRUFBQUwsR0FBQSxFQUFBdGEsRUFBQSxHQUFBWSxFQUFBVCxHQUFBLEVBQUF3TSxFQUFBcU8sRUFBQSxFQUFBK2hDLEVBQUF0NUIsR0FBQWppQixHQUFBLEVBQUF3WixFQUFBLEVBQUFyTyxFQUFBLEVBQUFvd0MsRUFBQXQ1QixHQUFBaE4sSUFBQXVFLEVBQUEraEMsR0FBQSxFQUFBcHdDLEVBQUEsR0FBQTJ4QyxFQUFBbitDLEdBQUEsRUFBQThaLEVBQUFsYSxFQUFBLEVBQUFMLEVBQUFDLEdBQUE2QixHQUFBLEVBQUF6QixFQUFBLEVBQUFrYSxFQUFBLEVBQUF2YSxFQUFBQyxHQUFBOFcsSUFBQTFXLEVBQUFMLEdBQUEsRUFBQXVhLEVBQUEsR0FBMk5qWSxLQUFBODlHLE9BQUFyK0csRUFBQWIsRUFBQTA5QyxHQUFtQixPQUFBdDhDLEtBQUFpOUcsV0FBQWo5RyxNQUE0QmhDLEVBQUE4NUcsV0FBQXg0RyxVQUFBNHNFLEtBQUEsV0FBd0MsV0FBQTVvRSxVQUFBaEMsUUFBQXRCLEtBQUE2OUcsYUFBQTc5RyxLQUFBODlHLE9BQUF4NkcsVUFBQSxHQUFBQSxVQUFBLEdBQUFBLFVBQUEsSUFBQXRELEtBQUE4OUcsT0FBQXg2RyxVQUFBLEdBQUFBLFVBQUEsR0FBQUEsVUFBQSxJQUFBdEQsS0FBQWk5RyxZQUFBLElBQUEzNUcsVUFBQWhDLFNBQUF0QixLQUFBNjlHLGFBQUE3OUcsS0FBQTg5RyxPQUFBeDZHLFVBQUEsR0FBQUEsVUFBQSxNQUFBdEQsS0FBQTg5RyxPQUFBeDZHLFVBQUEsR0FBQUEsVUFBQSxNQUFBdEQsS0FBQWk5RyxZQUFBajlHLE1BQXlUaEMsRUFBQTg1RyxXQUFBeDRHLFVBQUF5K0csYUFBQSxXQUFnRCxPQUFBLzlHLEtBQUE4MUgsY0FBQUMsY0FBQXowSCxPQUFBLE1BQUFyQixNQUFBLDREQUF1SCxJQUFBMFksRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBc04sS0FBQUssS0FBQXlpQyxLQUFBcjlDLEVBQUE0RixVQUFBaEMsT0FBZ0QsR0FBQXFYLEVBQUEsTUFBQTNZLEtBQUFnMkgsbUJBQUExMEgsUUFBQXRCLEtBQUFpMkgsbUJBQUFqMkgsS0FBQWsyRyxPQUFBbkIsYUFBQSxDQUE2Ri8wRyxLQUFBZzJILHNCQUFBaDJILEtBQUFpMkgsaUJBQUFqMkgsS0FBQWsyRyxPQUFBbkIsYUFBMEUsUUFBQTN5RyxFQUFBLEVBQUFwQyxLQUFBaTJILGlCQUFBeDBHLEVBQUEsRUFBQTlqQixFQUFBLEVBQUFHLEVBQUEsRUFBOEMyakIsRUFBQSxHQUFJLENBQUUsR0FBQTlJLEVBQUFyRixXQUFBbU8sRUFBQXZTLFFBQUEsSUFBQWxQLEtBQUFnMkgsbUJBQUFsNEgsR0FBQWtDLEtBQUFrMkgsb0JBQUF2OUcsR0FBQWhiLEVBQUF1UixRQUFBLEtBQUE5TSxFQUFBOE0sUUFBQSxJQUFrSHlKLEVBQUFyRixXQUFBM1YsRUFBQXVSLFFBQUEsSUFBQW9FLFdBQUFtTyxFQUFBdlMsUUFBQSxNQUFBcFIsRUFBQWtDLEtBQUFnMkgsbUJBQUFsNEgsR0FBQWtDLEtBQUFrMkgsb0JBQUF2OUcsR0FBK0csTUFBTThJLEdBQUFyZixFQUFBekUsR0FBQXlFLElBQUF0RSxHQUFlLElBQUFxQixFQUFBYSxLQUFBZzJILG1CQUFBMTBILE9BQXFDLE9BQUE1RCxFQUFBLENBQVUsSUFBQXNDLEtBQUFtMkgsVUFBQSxFQUFBbCtHLEdBQUFqWSxLQUFBODFILGNBQUFDLGNBQUEsR0FBQXp5SCxVQUFBLEdBQUFBLFVBQUEsR0FBQUEsVUFBQSxJQUFBZ1YsR0FBQXRZLEtBQUE4MUgsY0FBQUMsY0FBQSxHQUFBenlILFVBQUEsR0FBQUEsVUFBQSxHQUFBQSxVQUFBLElBQUFxSCxFQUFBLEVBQXVMQSxFQUFBeEwsRUFBSXdMLElBQUFxTyxFQUFBZixFQUFBLEdBQUFqWSxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQXNOLEVBQUEsR0FBQWpZLEtBQUFnMkgsbUJBQUFyckgsR0FBQSxHQUFBc04sRUFBQSxHQUFBalksS0FBQWcySCxtQkFBQXJySCxHQUFBLEdBQUFzTixFQUFBLEdBQUFqWSxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQTVNLEVBQUF1YSxFQUFBLEdBQUF0WSxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQTJOLEVBQUEsR0FBQXRZLEtBQUFnMkgsbUJBQUFyckgsR0FBQSxHQUFBMk4sRUFBQSxHQUFBdFksS0FBQWcySCxtQkFBQXJySCxHQUFBLEdBQUEyTixFQUFBLEdBQUF0WSxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQTNLLEtBQUE4OUcsT0FBQTlrRyxFQUFBamIsR0FBaVRpQyxLQUFBODFILGNBQUFDLGNBQUEsR0FBQXp5SCxVQUFBLEdBQUF0RCxLQUFBODFILGNBQUFDLGNBQUEsR0FBQXp5SCxVQUFBLFFBQWtHLE9BQUE1RixFQUFBLENBQWUsSUFBQXNDLEtBQUFtMkgsVUFBQSxFQUFBbCtHLEdBQUFqWSxLQUFBODFILGNBQUFDLGNBQUEsR0FBQXp5SCxVQUFBLEdBQUFBLFVBQUEsR0FBQUEsVUFBQSxJQUFBZ1YsR0FBQXRZLEtBQUE4MUgsY0FBQUMsY0FBQSxHQUFBenlILFVBQUEsR0FBQUEsVUFBQSxHQUFBQSxVQUFBLElBQUF5M0MsR0FBQS82QyxLQUFBODFILGNBQUFDLGNBQUEsR0FBQXp5SCxVQUFBLEdBQUFBLFVBQUEsR0FBQUEsVUFBQSxJQUFBcUgsRUFBQSxFQUFzUUEsRUFBQXhMLEVBQUl3TCxJQUFBcU8sRUFBQWYsRUFBQSxHQUFBalksS0FBQWcySCxtQkFBQXJySCxHQUFBLEdBQUFzTixFQUFBLEdBQUFqWSxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQXNOLEVBQUEsR0FBQWpZLEtBQUFnMkgsbUJBQUFyckgsR0FBQSxHQUFBc04sRUFBQSxHQUFBalksS0FBQWcySCxtQkFBQXJySCxHQUFBLEdBQUE1TSxFQUFBdWEsRUFBQSxHQUFBdFksS0FBQWcySCxtQkFBQXJySCxHQUFBLEdBQUEyTixFQUFBLEdBQUF0WSxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQTJOLEVBQUEsR0FBQXRZLEtBQUFnMkgsbUJBQUFyckgsR0FBQSxHQUFBMk4sRUFBQSxHQUFBdFksS0FBQWcySCxtQkFBQXJySCxHQUFBLEdBQUEzTSxFQUFBKzhDLEVBQUEsR0FBQS82QyxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQW93QyxFQUFBLEdBQUEvNkMsS0FBQWcySCxtQkFBQXJySCxHQUFBLEdBQUFvd0MsRUFBQSxHQUFBLzZDLEtBQUFnMkgsbUJBQUFyckgsR0FBQSxHQUFBb3dDLEVBQUEsR0FBQS82QyxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQTNLLEtBQUE4OUcsT0FBQTlrRyxFQUFBamIsRUFBQUMsR0FBaWNnQyxLQUFBODFILGNBQUFDLGNBQUEsR0FBQXp5SCxVQUFBLEdBQUF0RCxLQUFBODFILGNBQUFDLGNBQUEsR0FBQXp5SCxVQUFBLEdBQUF0RCxLQUFBODFILGNBQUFDLGNBQUEsR0FBQXp5SCxVQUFBLEtBQW9KdEYsRUFBQTg1RyxXQUFBeDRHLFVBQUFtaEgsZ0JBQUEsV0FBbUQsT0FBQXpnSCxLQUFBODFILGNBQUFNLGlCQUFBOTBILE9BQUEsTUFBQXJCLE1BQUEsK0RBQTZILElBQUEwWSxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixLQUFBSyxLQUFBeWlDLEtBQUFyOUMsRUFBQTRGLFVBQUFoQyxPQUFnRCxHQUFBcVgsRUFBQSxNQUFBM1ksS0FBQXEySCxzQkFBQS8wSCxRQUFBdEIsS0FBQXMySCxzQkFBQXQySCxLQUFBazJHLE9BQUFuQixhQUFBLENBQW1HLzBHLEtBQUFxMkgseUJBQUFyMkgsS0FBQXMySCxvQkFBQXQySCxLQUFBazJHLE9BQUFuQixhQUFnRixRQUFBM3lHLEVBQUEsRUFBQXBDLEtBQUFzMkgsb0JBQUE3MEcsRUFBQSxFQUFBOWpCLEVBQUEsRUFBQUcsRUFBQSxFQUFpRDJqQixFQUFBLEdBQUksQ0FBRSxHQUFBOUksRUFBQXJGLFdBQUFtTyxFQUFBdlMsUUFBQSxJQUFBbFAsS0FBQXEySCxzQkFBQXY0SCxHQUFBa0MsS0FBQXUySCx1QkFBQTU5RyxHQUFBaGIsRUFBQXVSLFFBQUEsS0FBQTlNLEVBQUE4TSxRQUFBLElBQXdIeUosRUFBQXJGLFdBQUEzVixFQUFBdVIsUUFBQSxJQUFBb0UsV0FBQW1PLEVBQUF2UyxRQUFBLE1BQUFwUixFQUFBa0MsS0FBQXEySCxzQkFBQXY0SCxHQUFBa0MsS0FBQXUySCx1QkFBQTU5RyxHQUFxSCxNQUFNOEksR0FBQXJmLEVBQUF6RSxHQUFBeUUsSUFBQXRFLEdBQWUsSUFBQXFCLEVBQUFhLEtBQUFxMkgsc0JBQUEvMEgsT0FBd0MsT0FBQTVELEVBQUEsQ0FBVSxJQUFBc0MsS0FBQXcySCxhQUFBLEVBQUF2K0csR0FBQWpZLEtBQUE4MUgsY0FBQU0saUJBQUEsR0FBQTl5SCxVQUFBLEdBQUFBLFVBQUEsSUFBQWdWLEdBQUF0WSxLQUFBODFILGNBQUFNLGlCQUFBLEdBQUE5eUgsVUFBQSxHQUFBQSxVQUFBLElBQUFxSCxFQUFBLEVBQXNLQSxFQUFBeEwsRUFBSXdMLElBQUFxTyxFQUFBZixFQUFBLEdBQUFqWSxLQUFBcTJILHNCQUFBMXJILEdBQUEsR0FBQXNOLEVBQUEsR0FBQWpZLEtBQUFxMkgsc0JBQUExckgsR0FBQSxHQUFBc04sRUFBQSxHQUFBalksS0FBQXEySCxzQkFBQTFySCxHQUFBLEdBQUE1TSxFQUFBdWEsRUFBQSxHQUFBdFksS0FBQXEySCxzQkFBQTFySCxHQUFBLEdBQUEyTixFQUFBLEdBQUF0WSxLQUFBcTJILHNCQUFBMXJILEdBQUEsR0FBQTJOLEVBQUEsR0FBQXRZLEtBQUFxMkgsc0JBQUExckgsR0FBQSxHQUFBM0ssS0FBQTg5RyxPQUFBOWtHLEVBQUFqYixHQUE2UGlDLEtBQUE4MUgsY0FBQU0saUJBQUEsR0FBQTl5SCxVQUFBLEdBQUF0RCxLQUFBODFILGNBQUFNLGlCQUFBLEdBQUE5eUgsVUFBQSxRQUF3RyxPQUFBNUYsRUFBQSxDQUFlLElBQUFzQyxLQUFBdzJILGFBQUEsRUFBQXYrRyxHQUFBalksS0FBQTgxSCxjQUFBTSxpQkFBQSxHQUFBOXlILFVBQUEsR0FBQUEsVUFBQSxJQUFBZ1YsR0FBQXRZLEtBQUE4MUgsY0FBQU0saUJBQUEsR0FBQTl5SCxVQUFBLEdBQUFBLFVBQUEsSUFBQXkzQyxHQUFBLzZDLEtBQUE4MUgsY0FBQU0saUJBQUEsR0FBQTl5SCxVQUFBLEdBQUFBLFVBQUEsSUFBQXFILEVBQUEsRUFBMk9BLEVBQUF4TCxFQUFJd0wsSUFBQXFPLEVBQUFmLEVBQUEsR0FBQWpZLEtBQUFxMkgsc0JBQUExckgsR0FBQSxHQUFBc04sRUFBQSxHQUFBalksS0FBQXEySCxzQkFBQTFySCxHQUFBLEdBQUFzTixFQUFBLEdBQUFqWSxLQUFBcTJILHNCQUFBMXJILEdBQUEsR0FBQTVNLEVBQUF1YSxFQUFBLEdBQUF0WSxLQUFBcTJILHNCQUFBMXJILEdBQUEsR0FBQTJOLEVBQUEsR0FBQXRZLEtBQUFxMkgsc0JBQUExckgsR0FBQSxHQUFBMk4sRUFBQSxHQUFBdFksS0FBQXEySCxzQkFBQTFySCxHQUFBLEdBQUEzTSxFQUFBKzhDLEVBQUEsR0FBQS82QyxLQUFBcTJILHNCQUFBMXJILEdBQUEsR0FBQW93QyxFQUFBLEdBQUEvNkMsS0FBQXEySCxzQkFBQTFySCxHQUFBLEdBQUFvd0MsRUFBQSxHQUFBLzZDLEtBQUFxMkgsc0JBQUExckgsR0FBQSxHQUFBM0ssS0FBQTg5RyxPQUFBOWtHLEVBQUFqYixFQUFBQyxHQUFtWGdDLEtBQUE4MUgsY0FBQU0saUJBQUEsR0FBQTl5SCxVQUFBLEdBQUF0RCxLQUFBODFILGNBQUFNLGlCQUFBLEdBQUE5eUgsVUFBQSxHQUFBdEQsS0FBQTgxSCxjQUFBTSxpQkFBQSxHQUFBOXlILFVBQUEsS0FBNkp0RixFQUFBODVHLFdBQUF4NEcsVUFBQTArRyxZQUFBLFdBQStDLElBQUFybEcsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBc04sS0FBQUssS0FBQXlpQyxLQUE2QnBpQyxFQUFBLEVBQUksSUFBQWpiLEVBQUE0RixVQUFBaEMsT0FBdUIsT0FBQXRCLEtBQUFnMkgsbUJBQUExMEgsUUFBQXRCLEtBQUFpMkgsbUJBQUFqMkgsS0FBQWsyRyxPQUFBbkIsYUFBQSxDQUF5Ri8wRyxLQUFBZzJILHNCQUFBaDJILEtBQUFpMkgsaUJBQUFqMkgsS0FBQWsyRyxPQUFBbkIsYUFBMEUsUUFBQTN5RyxFQUFBLEVBQUFwQyxLQUFBaTJILGlCQUFBeDBHLEVBQUEsRUFBQTlqQixFQUFBLEVBQUFHLEVBQUEsRUFBOEMyakIsRUFBQSxHQUFJLENBQUUsR0FBQTlJLEVBQUFyRixXQUFBbU8sRUFBQXZTLFFBQUEsSUFBQWxQLEtBQUFnMkgsbUJBQUFsNEgsR0FBQWtDLEtBQUFrMkgsb0JBQUF2OUcsR0FBQWhiLEVBQUF1UixRQUFBLEtBQUE5TSxFQUFBOE0sUUFBQSxJQUFrSHlKLEVBQUFyRixXQUFBM1YsRUFBQXVSLFFBQUEsSUFBQW9FLFdBQUFtTyxFQUFBdlMsUUFBQSxNQUFBcFIsRUFBQWtDLEtBQUFnMkgsbUJBQUFsNEgsR0FBQWtDLEtBQUFrMkgsb0JBQUF2OUcsR0FBK0csTUFBTThJLEdBQUFyZixFQUFBekUsR0FBQXlFLElBQUF0RSxHQUFlLElBQUFxQixFQUFBYSxLQUFBZzJILG1CQUFBMTBILE9BQXFDLE9BQUE1RCxHQUFVLEdBQUFzQyxLQUFBODFILGNBQUFXLGFBQUE3ekgsS0FBQVUsVUFBQSxJQUFBdEQsS0FBQTgxSCxjQUFBVyxhQUFBN3pILEtBQUFVLFVBQUEsUUFBQXRELEtBQUE4MUgsY0FBQVcsYUFBQW4xSCxPQUFBLENBQXFKLElBQUF0QixLQUFBMDJILFNBQUEsRUFBQXorRyxFQUFBalksS0FBQTIySCxrQkFBQTMySCxLQUFBODFILGNBQUFXLGFBQUEsR0FBQXoySCxLQUFBODFILGNBQUFXLGFBQUEsR0FBQXoySCxLQUFBODFILGNBQUFXLGFBQUEsR0FBQXoySCxLQUFBODFILGNBQUFXLGFBQUEsS0FBQW4rRyxFQUFBdFksS0FBQTIySCxrQkFBQTMySCxLQUFBODFILGNBQUFXLGFBQUEsR0FBQXoySCxLQUFBODFILGNBQUFXLGFBQUEsR0FBQXoySCxLQUFBODFILGNBQUFXLGFBQUEsR0FBQXoySCxLQUFBODFILGNBQUFXLGFBQUEsS0FBQTlySCxFQUFBLEVBQXNXQSxFQUFBeEwsRUFBSXdMLElBQUFxTyxFQUFBZixFQUFBLEdBQUFqWSxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQXNOLEVBQUEsR0FBQWpZLEtBQUFnMkgsbUJBQUFyckgsR0FBQSxHQUFBc04sRUFBQSxHQUFBalksS0FBQWcySCxtQkFBQXJySCxHQUFBLEdBQUFzTixFQUFBLEdBQUFqWSxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQTVNLEVBQUF1YSxFQUFBLEdBQUF0WSxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQTJOLEVBQUEsR0FBQXRZLEtBQUFnMkgsbUJBQUFyckgsR0FBQSxHQUFBMk4sRUFBQSxHQUFBdFksS0FBQWcySCxtQkFBQXJySCxHQUFBLEdBQUEyTixFQUFBLEdBQUF0WSxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQTNLLEtBQUE4OUcsT0FBQTlrRyxFQUFBamIsR0FBaVQsSUFBQTRNLEVBQUEsRUFBUUEsRUFBQWpOLEVBQUlpTixJQUFBM0ssS0FBQTgxSCxjQUFBVyxhQUFBN3RILGNBQTZDLE9BQUFsTCxJQUFBc0MsS0FBQTgxSCxjQUFBVyxhQUFBN3pILEtBQUFVLFVBQUEsSUFBQXRELEtBQUE4MUgsY0FBQVcsYUFBQTd6SCxLQUFBVSxVQUFBLElBQUF0RCxLQUFBODFILGNBQUFXLGFBQUE3ekgsS0FBQVUsVUFBQSxTQUFBdEQsS0FBQTgxSCxjQUFBVyxhQUFBbjFILFFBQUEsQ0FBdU4sSUFBQXRCLEtBQUEwMkgsU0FBQSxFQUFBeitHLEVBQUFqWSxLQUFBMjJILGtCQUFBMzJILEtBQUE4MUgsY0FBQVcsYUFBQSxHQUFBejJILEtBQUE4MUgsY0FBQVcsYUFBQSxHQUFBejJILEtBQUE4MUgsY0FBQVcsYUFBQSxHQUFBejJILEtBQUE4MUgsY0FBQVcsYUFBQSxLQUFBbitHLEVBQUF0WSxLQUFBMjJILGtCQUFBMzJILEtBQUE4MUgsY0FBQVcsYUFBQSxHQUFBejJILEtBQUE4MUgsY0FBQVcsYUFBQSxHQUFBejJILEtBQUE4MUgsY0FBQVcsYUFBQSxHQUFBejJILEtBQUE4MUgsY0FBQVcsYUFBQSxNQUFBMTdFLEVBQUEvNkMsS0FBQTIySCxrQkFBQTMySCxLQUFBODFILGNBQUFXLGFBQUEsR0FBQXoySCxLQUFBODFILGNBQUFXLGFBQUEsR0FBQXoySCxLQUFBODFILGNBQUFXLGFBQUEsR0FBQXoySCxLQUFBODFILGNBQUFXLGFBQUEsTUFBQTlySCxFQUFBLEVBQStnQkEsRUFBQXhMLEVBQUl3TCxJQUFBcU8sRUFBQWYsRUFBQSxHQUFBalksS0FBQWcySCxtQkFBQXJySCxHQUFBLEdBQUFzTixFQUFBLEdBQUFqWSxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQXNOLEVBQUEsR0FBQWpZLEtBQUFnMkgsbUJBQUFyckgsR0FBQSxHQUFBc04sRUFBQSxHQUFBalksS0FBQWcySCxtQkFBQXJySCxHQUFBLEdBQUE1TSxFQUFBdWEsRUFBQSxHQUFBdFksS0FBQWcySCxtQkFBQXJySCxHQUFBLEdBQUEyTixFQUFBLEdBQUF0WSxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQTJOLEVBQUEsR0FBQXRZLEtBQUFnMkgsbUJBQUFyckgsR0FBQSxHQUFBMk4sRUFBQSxHQUFBdFksS0FBQWcySCxtQkFBQXJySCxHQUFBLEdBQUEzTSxFQUFBKzhDLEVBQUEsR0FBQS82QyxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQW93QyxFQUFBLEdBQUEvNkMsS0FBQWcySCxtQkFBQXJySCxHQUFBLEdBQUFvd0MsRUFBQSxHQUFBLzZDLEtBQUFnMkgsbUJBQUFyckgsR0FBQSxHQUFBb3dDLEVBQUEsR0FBQS82QyxLQUFBZzJILG1CQUFBcnJILEdBQUEsR0FBQTNLLEtBQUE4OUcsT0FBQTlrRyxFQUFBamIsRUFBQUMsR0FBaWMsSUFBQTJNLEVBQUEsRUFBUUEsRUFBQWpOLEVBQUlpTixJQUFBM0ssS0FBQTgxSCxjQUFBVyxhQUFBN3RILFVBQTZDb1EsRUFBQXhiLFFBQUFRLElBQWUwOUYsb0JBQUEsR0FBQTlCLGVBQUEsR0FBQWc5QixnQkFBQSxLQUE0RHBpRCxJQUFBLFNBQUE3N0QsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsSUFBQUMsRUFBQTJhLEVBQUEsZ0JBQUFoTyxFQUFBZ08sRUFBQSxxQkFBaUQzYSxFQUFBc0IsVUFBQXUzSCxhQUFBLFNBQUFsK0csRUFBQUssR0FBdUMsR0FBQWhaLEtBQUEyaEgsVUFBQSxnQkFBQTNqSCxFQUFBODdGLG9CQUFBLGVBQUF4MkYsV0FBQXRELEtBQUF5bEgsT0FBQXpsSCxLQUFBdXRDLE9BQUF2dEMsS0FBQXlsSCxPQUFBLEdBQUF6bEgsS0FBQTBsSCxPQUFBMWxILEtBQUErdUIsUUFBQS91QixLQUFBMGxILE9BQUEsR0FBaUssSUFBQTNuSCxFQUFBaUMsS0FBQW9tRyxVQUFBMHdCLGdCQUFnQyxJQUFBbitHLE1BQUEsWUFBQUssTUFBQUwsSUFBQSxJQUFBM1ksS0FBQSsySCxzQkFBQS8ySCxLQUFBNjNHLE9BQUFtZixjQUFBLFdBQXlHLFVBQVNoM0gsS0FBQXNtRyxhQUFBLGdDQUFBdG1HLEtBQUFpM0gsdUJBQUFqM0gsS0FBQTYzRyxPQUFBcWYsUUFBQSxXQUE4RyxVQUFTbDNILEtBQUFzbUcsYUFBQSw0QkFBK0MsSUFBQTM3RixFQUFBM0ssS0FBQSt1QixPQUFBL3VCLEtBQUF1dEMsTUFBQXZ0QyxLQUFBK3VCLE9BQUEvdUIsS0FBQXV0QyxNQUFvRCxHQUFBdnRDLEtBQUErbUgsb0JBQUEvbUgsS0FBQXluSCxxQkFBQXpuSCxLQUFBK21ILGtCQUFBLEVBQUEvbUgsS0FBQW9tRyxVQUFBMHdCLFdBQUFLLE9BQUEsT0FBQXhzSCxHQUFBM0ssS0FBQW9tRyxVQUFBMHdCLFdBQUFLLE9BQUEsUUFBQXhzSCxJQUFBM0ssS0FBQWttSCxlQUFBLEdBQUFsbUgsS0FBQWltSCxjQUFBam1ILEtBQUE2bkcsS0FBQSxDQUE0TixJQUFBNXZGLEdBQUFVLEdBQUEzWSxLQUFBeWxILE9BQUF6bEgsS0FBQTJsSCxTQUFBaDdHLEVBQUEyTixFQUFBVSxHQUFBaFosS0FBQTBsSCxPQUFBMWxILEtBQUE0bEgsU0FBQWo3RyxFQUF1RTNLLEtBQUFvbUcsVUFBQTB3QixXQUFBSyxPQUFBbC9HLEVBQUFLLEVBQUEsUUFBd0MsR0FBQXRZLEtBQUFpbUgsY0FBQWptSCxLQUFBNG5HLE1BQUEsQ0FBdUMsSUFBQTdzRCxFQUFBaDlDLEVBQUFxNUgsZ0JBQUExNUgsRUFBQWtILEtBQUFrbUIsS0FBQWl3QixFQUFBbmhCLEVBQUEsR0FBQW1oQixFQUFBbmhCLEVBQUEsR0FBQW1oQixFQUFBbmhCLEVBQUEsR0FBQW1oQixFQUFBbmhCLEVBQUEsSUFBaUUsSUFBQWw4QixJQUFBcTlDLEVBQUFuaEIsRUFBQSxJQUFBbDhCLEVBQUFxOUMsRUFBQW5oQixFQUFBLElBQUFsOEIsR0FBNkIsSUFBQTBFLEVBQUF3QyxLQUFBa21CLEtBQUFpd0IsRUFBQTljLEVBQUEsR0FBQThjLEVBQUE5YyxFQUFBLEdBQUE4YyxFQUFBOWMsRUFBQSxHQUFBOGMsRUFBQTljLEVBQUEsSUFBNkMsSUFBQTc3QixJQUFBMjRDLEVBQUE5YyxFQUFBLElBQUE3N0IsRUFBQTI0QyxFQUFBOWMsRUFBQSxJQUFBNzdCLEdBQTZCLElBQUFxZixHQUFBLEVBQUE5SSxHQUFBM1ksS0FBQXlsSCxPQUFBemxILEtBQUEybEgsU0FBQWhvSCxHQUFBLEVBQUFxYixHQUFBaFosS0FBQTBsSCxPQUFBMWxILEtBQUE0bEgsU0FBd0U3bkgsRUFBQWlnQyxZQUFBamdDLEVBQUFzNUgsS0FBQTUxRyxFQUFBczVCLEVBQUFuaEIsRUFBQSxHQUFBajhCLEVBQUFvOUMsRUFBQTdjLEVBQUEsR0FBQW5nQyxFQUFBdTVILEtBQUF2NUgsRUFBQXc1SCxLQUFBOTFHLEVBQUFzNUIsRUFBQW5oQixFQUFBLEdBQUFqOEIsRUFBQW85QyxFQUFBN2MsRUFBQSxJQUF3RSxPQUFBbCtCLE9BQWFoQyxFQUFBc0IsVUFBQWs0SCxVQUFBLFdBQWtDeDNILEtBQUEyaEgsVUFBQSxhQUFBM2pILEVBQUE4N0Ysb0JBQUEsWUFBQXgyRixXQUF5RSxRQUFBcVYsRUFBQTNZLEtBQUFpekcsbUJBQUE5eUMsS0FBQTcrRCxPQUFBLEVBQWdEcVgsR0FBQSxFQUFLQSxJQUFBM1ksS0FBQWl6RyxtQkFBQTl5QyxLQUFBeG5ELEdBQUF6WSxhQUFBRixLQUFBeTNILFFBQUF2M0gsWUFBQUYsS0FBQWl6RyxtQkFBQTl5QyxLQUFBeG5ELEdBQUF6WSxhQUFBRixLQUFBMDNILFlBQUF4M0gsWUFBQUYsS0FBQWl6RyxtQkFBQTl5QyxLQUFBNStELE9BQUFvWCxFQUFBLEdBQTZMclYsVUFBQSxLQUFBcUgsRUFBQWlpRyxLQUFBNXNHLEtBQUE0MEcsZUFBQSxPQUFBNTBHLEtBQUF5M0gsTUFBQTU1SCxLQUFBbUMsS0FBQXNELFVBQUEsR0FBQUEsVUFBQSxHQUFBQSxVQUFBLEdBQUFBLFVBQUEsR0FBQUEsVUFBQSxLQUFBQSxVQUFBLEtBQUFxSCxFQUFBa2lHLEtBQUE3c0csS0FBQTQwRyxlQUFBLE9BQUE1MEcsS0FBQTAzSCxVQUFBNzVILEtBQUFtQyxLQUFBc0QsVUFBQSxHQUFBQSxVQUFBLEdBQUFBLFVBQUEsR0FBQUEsVUFBQSxNQUFBdEQsS0FBQTQwRyxlQUFBLE9BQUE1MEcsS0FBQXkzSCxNQUFBNTVILEtBQUFtQyxLQUFBc0QsVUFBQSxHQUFBQSxVQUFBLEdBQUFBLFVBQUEsR0FBQUEsVUFBQSxHQUFBQSxVQUFBLEtBQUF0RCxLQUFBNDBHLGVBQUEsT0FBQTUwRyxLQUFBMDNILFVBQUE3NUgsS0FBQW1DLEtBQUFzRCxVQUFBLEdBQUFBLFVBQUEsR0FBQUEsVUFBQSxHQUFBQSxVQUFBLE9BQXdldEYsRUFBQXNCLFVBQUFxNEgsWUFBQSxXQUFvQzMzSCxLQUFBMmhILFVBQUEsZUFBOEIsUUFBQWhwRyxFQUFBM1ksS0FBQWl6RyxtQkFBQTl5QyxLQUFBNytELE9BQUEsRUFBZ0RxWCxHQUFBLEVBQUtBLElBQUEzWSxLQUFBaXpHLG1CQUFBOXlDLEtBQUF4bkQsR0FBQXpZLGFBQUFGLEtBQUF5M0gsUUFBQXYzSCxZQUFBRixLQUFBaXpHLG1CQUFBOXlDLEtBQUF4bkQsR0FBQXpZLGFBQUFGLEtBQUEwM0gsWUFBQXgzSCxZQUFBRixLQUFBaXpHLG1CQUFBOXlDLEtBQUE1K0QsT0FBQW9YLEVBQUEsSUFBNkwzYSxFQUFBc0IsVUFBQW00SCxNQUFBLFNBQUE5K0csRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxRQUF1QyxJQUFBZ08sTUFBQTNZLEtBQUF1dEMsTUFBQSxZQUFBdjBCLE1BQUFwVSxLQUFBb1MsTUFBQTJCLEVBQUEsUUFBQS9ULEtBQUFvUyxNQUFBMkIsRUFBQSxjQUFBNWEsTUFBQSxZQUFBQyxNQUFBLFlBQUEyTSxNQUFBLEdBQXlJLElBQUFzTixFQUFBVSxFQUFBSyxFQUFBVixFQUFBSyxFQUFBLEVBQWdCLGtCQUFrQjNZLEtBQUE0QyxPQUFBNUMsS0FBQXdzRCxPQUFBLElBQUF4c0QsS0FBQW9tRyxVQUFBd3hCLGVBQUEsT0FBQTUzSCxLQUFBb21HLFVBQUF3eEIsZUFBQSxPQUFBNTNILEtBQUFvbUcsVUFBQXd4QixlQUFBLElBQUE1M0gsS0FBQW9tRyxVQUFBdXZCLFVBQUFqMUgsSUFBQVYsS0FBQW9tRyxVQUFBMHdCLFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBb21HLFVBQUEwd0IsV0FBQWUsYUFBQUMsS0FBQSxHQUFBOTNILEtBQUFvbUcsVUFBQTB3QixXQUFBZSxhQUFBQyxLQUFBLEdBQUE5M0gsS0FBQW9tRyxVQUFBMHdCLFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBb21HLFVBQUEwd0IsV0FBQWUsYUFBQUMsS0FBQSxHQUFBOTNILEtBQUFvbUcsVUFBQTB3QixXQUFBZSxhQUFBQyxLQUFBLEdBQUE5M0gsS0FBQW9tRyxVQUFBMHdCLFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBb21HLFVBQUEwd0IsV0FBQWUsYUFBQUMsS0FBQSxHQUFBOTNILEtBQUFvbUcsVUFBQTB3QixXQUFBZSxhQUFBQyxLQUFBLEdBQUE5M0gsS0FBQW9tRyxVQUFBMHdCLFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBb21HLFVBQUEwd0IsV0FBQWUsYUFBQUMsS0FBQSxJQUFBOTNILEtBQUFvbUcsVUFBQTB3QixXQUFBZSxhQUFBQyxLQUFBLElBQUE5M0gsS0FBQW9tRyxVQUFBMHdCLFdBQUFlLGFBQUFDLEtBQUEsSUFBQTkzSCxLQUFBb21HLFVBQUEwd0IsV0FBQWUsYUFBQUMsS0FBQSxJQUFBOTNILEtBQUFvbUcsVUFBQTB3QixXQUFBZSxhQUFBQyxLQUFBLElBQUE5M0gsS0FBQW9tRyxVQUFBMHdCLFdBQUFlLGFBQUFDLEtBQUEsS0FBNDVCLFFBQUFuL0csRUFBQSxFQUFZQSxHQUFBSyxFQUFLTCxJQUFBM1ksS0FBQTY5RyxXQUFBNzlHLEtBQUFtb0csT0FBQW5vRyxLQUFBODlHLFFBQUF4bEcsRUFBQXZhLEVBQUFDLEVBQUEyYSxFQUFBVixFQUFBSyxFQUFBM04sR0FBQTNLLEtBQUE4OUcsUUFBQXhsRyxFQUFBdmEsRUFBQUMsRUFBQTJhLEVBQUFWLEVBQUFLLEVBQUEzTixHQUFBM0ssS0FBQWk5RyxXQUF3RyxRQUFBbGlFLEVBQUEsRUFBWUEsR0FBQS9oQyxFQUFLK2hDLElBQUEvNkMsS0FBQTY5RyxXQUFBNzlHLEtBQUFtb0csT0FBQW5vRyxLQUFBODlHLE9BQUEvaUUsRUFBQTlpQyxFQUFBSyxFQUFBdmEsRUFBQUMsR0FBQXNhLEVBQUEzTixHQUFBM0ssS0FBQTg5RyxPQUFBL2lFLEVBQUE5aUMsRUFBQUssRUFBQXZhLEVBQUFDLEdBQUFzYSxFQUFBM04sR0FBQTNLLEtBQUFpOUcsV0FBd0dqOUcsS0FBQTh3RCxRQUFZOXlELEVBQUFzQixVQUFBbzRILFVBQUEsU0FBQS8rRyxFQUFBSyxFQUFBamIsRUFBQUMsR0FBeUMsZ0JBQUEyYSxNQUFBM1ksS0FBQXV0QyxNQUFBLE1BQUF2dEMsS0FBQXV0QyxNQUFBLGdCQUFBdjBCLE9BQUFoWixLQUFBdXRDLE1BQUEsWUFBQXh2QyxNQUFBaWIsUUFBQSxJQUFBaGIsTUFBQWdiLEdBQUEsV0FBc0loWixLQUFBNEMsT0FBQTVDLEtBQUFvbUcsVUFBQXV2QixVQUFBajFILElBQUFWLEtBQUFvbUcsVUFBQTB3QixXQUFBZSxhQUFBQyxLQUFBLEdBQUE5M0gsS0FBQW9tRyxVQUFBMHdCLFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBb21HLFVBQUEwd0IsV0FBQWUsYUFBQUMsS0FBQSxHQUFBOTNILEtBQUFvbUcsVUFBQTB3QixXQUFBZSxhQUFBQyxLQUFBLEdBQUE5M0gsS0FBQW9tRyxVQUFBMHdCLFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBb21HLFVBQUEwd0IsV0FBQWUsYUFBQUMsS0FBQSxHQUFBOTNILEtBQUFvbUcsVUFBQTB3QixXQUFBZSxhQUFBQyxLQUFBLEdBQUE5M0gsS0FBQW9tRyxVQUFBMHdCLFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBb21HLFVBQUEwd0IsV0FBQWUsYUFBQUMsS0FBQSxHQUFBOTNILEtBQUFvbUcsVUFBQTB3QixXQUFBZSxhQUFBQyxLQUFBLEdBQUE5M0gsS0FBQW9tRyxVQUFBMHdCLFdBQUFlLGFBQUFDLEtBQUEsSUFBQTkzSCxLQUFBb21HLFVBQUEwd0IsV0FBQWUsYUFBQUMsS0FBQSxJQUFBOTNILEtBQUFvbUcsVUFBQTB3QixXQUFBZSxhQUFBQyxLQUFBLElBQUE5M0gsS0FBQW9tRyxVQUFBMHdCLFdBQUFlLGFBQUFDLEtBQUEsSUFBQTkzSCxLQUFBb21HLFVBQUEwd0IsV0FBQWUsYUFBQUMsS0FBQSxJQUFBOTNILEtBQUFvbUcsVUFBQTB3QixXQUFBZSxhQUFBQyxLQUFBLEtBQUE5M0gsS0FBQTI5RyxhQUFBLEdBQUEzOUcsS0FBQXdzRCxPQUFBLFNBQUF4c0QsS0FBQTY5RyxXQUFBNzlHLEtBQUFtb0csT0FBQW5vRyxLQUFBODlHLE9BQUE5a0csRUFBQWpiLEVBQUFDLEdBQUFnQyxLQUFBODlHLE9BQUE5a0csRUFBQUwsRUFBQTVhLEVBQUFDLEdBQUFnQyxLQUFBaTlHLFdBQUFqOUcsS0FBQXdzRCxPQUFBLFNBQUF4c0QsS0FBQTY5RyxXQUFBNzlHLEtBQUFtb0csT0FBQW5vRyxLQUFBODlHLE9BQUE5a0csRUFBQWpiLEVBQUFDLEdBQUFnQyxLQUFBODlHLE9BQUE5a0csRUFBQWpiLEVBQUE0YSxFQUFBM2EsR0FBQWdDLEtBQUFpOUcsV0FBQWo5RyxLQUFBd3NELE9BQUEsU0FBQXhzRCxLQUFBNjlHLFdBQUE3OUcsS0FBQW1vRyxPQUFBbm9HLEtBQUE4OUcsT0FBQTlrRyxFQUFBamIsRUFBQUMsR0FBQWdDLEtBQUE4OUcsT0FBQTlrRyxFQUFBamIsRUFBQUMsRUFBQTJhLEdBQUEzWSxLQUFBaTlHLFdBQUFqOUcsS0FBQTh3RCxRQUE0bkM5M0MsRUFBQXhiLFFBQUFRLElBQWUwOUYsb0JBQUEsR0FBQTlCLGVBQUEsS0FBeUNubEIsSUFBQSxTQUFBOTdELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUF3QjNhLEVBQUFzQixVQUFBeTRILGFBQUEsU0FBQXAvRyxFQUFBSyxFQUFBamIsRUFBQTRNLEdBQTJDM0ssS0FBQTJoSCxVQUFBLGdCQUFBM2pILEVBQUE4N0Ysb0JBQUEsZUFBQXgyRixXQUErRSxJQUFBMlUsRUFBQWpZLEtBQUErNUYsTUFBQXp5RixNQUFBdEgsS0FBQXNELFdBQUFnVixFQUFBdFksS0FBQW9tRyxVQUFBNHhCLGtCQUEwRSxPQUFBMS9HLEVBQUEyL0csV0FBQSxtQkFBQTMvRyxFQUFBMi9HLFdBQUEsaUJBQUFqNEgsS0FBQW9tRyxVQUFBOHhCLGNBQUFsNEgsS0FBQW9tRyxVQUFBK3hCLG1CQUFBdjFILEtBQUFxVixFQUFBNmpGLE9BQUEsR0FBQTdqRixFQUFBNmpGLE9BQUEsR0FBQTdqRixFQUFBNmpGLE9BQUEsSUFBQXhqRixFQUFBMi9HLFdBQUEsZ0JBQUFqNEgsS0FBQW9tRyxVQUFBK3hCLG9CQUFBNy9HLEVBQUEyL0csV0FBQSxxQkFBQWo0SCxLQUFBb21HLFVBQUEreEIsbUJBQUE3MkgsT0FBQSxHQUFBdEIsTUFBaVVoQyxFQUFBc0IsVUFBQTg0SCxpQkFBQSxTQUFBei9HLEVBQUFLLEVBQUFqYixFQUFBNE0sRUFBQXNOLEVBQUFLLEdBQW9EdFksS0FBQTJoSCxVQUFBLG9CQUFBM2pILEVBQUE4N0Ysb0JBQUEsbUJBQUF4MkYsV0FBdUYsSUFBQXkzQyxFQUFBcjlDLEVBQUFzQyxLQUFBb21HLFVBQUE0eEIsa0JBQXlDajlFLEVBQUFwaUMsYUFBQTNhLEVBQUFxOEYsTUFBQTFoRixFQUFBM1ksS0FBQSs1RixNQUFBcGhGLEVBQUFLLEVBQUFqYixHQUEyQyxJQUFBcUUsRUFBQXFmLEVBQUE5akIsRUFBQUcsRUFBQXdGLG9CQUFBaEMsT0FBQSxHQUEwQyxpQkFBQXhELEdBQUFzRSxFQUFBa0Isb0JBQUFoQyxPQUFBLEdBQUFtZ0IsRUFBQW5lLG9CQUFBaEMsT0FBQSxHQUFBM0QsRUFBQTJGLG9CQUFBaEMsT0FBQSxLQUFBYyxFQUFBdEUsRUFBQTg3QixFQUFBblksRUFBQTNqQixFQUFBbWdDLEVBQUF0Z0MsRUFBQUcsRUFBQW9nQyxHQUFBeGdDLEVBQUF1NkgsV0FBQSxtQkFBQXY2SCxFQUFBdTZILFdBQUEsaUJBQUFqNEgsS0FBQW9tRyxVQUFBOHhCLGNBQW9PLElBQUEvNEgsRUFBQXlGLEtBQUFrbUIsS0FBQTFvQixJQUFBcWYsSUFBQTlqQixLQUE2QixPQUFBcUMsS0FBQW9tRyxVQUFBaXlCLDJCQUFBejFILEtBQUFSLEVBQUFqRCxFQUFBc2lCLEVBQUF0aUIsRUFBQXhCLEVBQUF3QixHQUFBekIsRUFBQXU2SCxXQUFBLHFCQUFBajRILEtBQUFvbUcsVUFBQWl5Qiw0QkFBQXI0SCxLQUFBb21HLFVBQUFreUIsdUJBQUExMUgsS0FBQW00QyxFQUFBK2dELE9BQUEsR0FBQS9nRCxFQUFBK2dELE9BQUEsR0FBQS9nRCxFQUFBK2dELE9BQUEsSUFBQXArRixFQUFBdTZILFdBQUEsb0JBQUFqNEgsS0FBQW9tRyxVQUFBa3lCLHdCQUFBNTZILEVBQUF1NkgsV0FBQSx5QkFBQWo0SCxLQUFBb21HLFVBQUFreUIsdUJBQUFoM0gsT0FBQSxHQUFBdEIsTUFBbVloQyxFQUFBc0IsVUFBQWk1SCxXQUFBLFNBQUE1L0csRUFBQUssRUFBQWpiLEVBQUE0TSxFQUFBc04sRUFBQUssR0FBeUgsSUFBQXlpQyxFQUEzRS82QyxLQUFBMmhILFVBQUEsY0FBQTNqSCxFQUFBODdGLG9CQUFBLGFBQUF4MkYsV0FBaUZ5M0MsRUFBQXBpQyxhQUFBM2EsRUFBQXE4RixNQUFBMWhGLEVBQUEzWSxLQUFBKzVGLE1BQUFwaEYsRUFBQUssRUFBQWpiLEdBQTJDLElBQUFMLEVBQUEwRSxFQUFBcWYsRUFBQTlqQixFQUFBMkYsb0JBQUFoQyxPQUFBLEdBQTBDLGlCQUFBM0QsR0FBQUQsRUFBQTRGLG9CQUFBaEMsT0FBQSxHQUFBYyxFQUFBa0Isb0JBQUFoQyxPQUFBLEdBQUFtZ0IsRUFBQW5lLG9CQUFBaEMsT0FBQSxLQUFBNUQsRUFBQUMsRUFBQWk4QixFQUFBeDNCLEVBQUF6RSxFQUFBc2dDLEVBQUF4YyxFQUFBOWpCLEVBQUF1Z0MsR0FBeUksSUFBQXBnQyxFQUFBa0MsS0FBQW9tRyxVQUFBNHhCLGtCQUF1QyxPQUFBbDZILEVBQUFtNkgsV0FBQSxtQkFBQW42SCxFQUFBbTZILFdBQUEsaUJBQUFqNEgsS0FBQW9tRyxVQUFBOHhCLGNBQUFsNEgsS0FBQW9tRyxVQUFBb3lCLG9CQUFBNTFILEtBQUFsRixFQUFBMEUsRUFBQXFmLEdBQUEzakIsRUFBQW02SCxXQUFBLHNCQUFBajRILEtBQUFvbUcsVUFBQW95QixxQkFBQXg0SCxLQUFBb21HLFVBQUFxeUIsaUJBQUE3MUgsS0FBQW00QyxFQUFBK2dELE9BQUEsR0FBQS9nRCxFQUFBK2dELE9BQUEsR0FBQS9nRCxFQUFBK2dELE9BQUEsSUFBQWgrRixFQUFBbTZILFdBQUEsbUJBQUFqNEgsS0FBQW9tRyxVQUFBcXlCLGtCQUFBMzZILEVBQUFtNkgsV0FBQSxtQkFBQWo0SCxLQUFBb21HLFVBQUFxeUIsaUJBQUFuM0gsT0FBQSxHQUFBdEIsTUFBa2JnWixFQUFBeGIsUUFBQVEsSUFBZTQ3RixlQUFBLEtBQWtCbGxCLElBQUEsU0FBQS83RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBb3pCLElBQUE0TSxFQUFBZ08sRUFBQSxnQkFBd0JBLEVBQUEsaUJBQUFoTyxFQUFBckwsVUFBQXEyRyxVQUFBLFNBQUFoOUYsR0FBa0csSUFBQUssRUFBQWpiLEVBQUFrYSxFQUE3Q3ROLEVBQUFtdkYsb0JBQUEsWUFBQXgyRixXQUF1RCxrQkFBQUEsVUFBQSxJQUFBMFYsRUFBQTFWLFVBQUEsR0FBQXZGLEVBQUF1RixVQUFBLEdBQUEyVSxFQUFBM1UsVUFBQSxLQUFBMFYsR0FBQSxFQUFBamIsRUFBQXVGLFVBQUEsR0FBQTJVLEVBQUEzVSxVQUFBLElBQW1ILElBQUFnVixFQUFBLElBQUEzTixFQUFBc3BILFNBQXFCMzdHLEVBQUFvZ0gsSUFBQS8vRyxFQUFBLElBQUFLLEVBQWMsSUFBQStoQyxFQUFBLzZDLEtBQVcsT0FBQUEsS0FBQXMxRyxZQUFBMzhGLEVBQUEsU0FBQUEsSUFBNWtDLFNBQUFBLEVBQUFLLEdBQWdCLFFBQUFqYixHQUFXeTNDLEtBQUFtakYsTUFBQUMsT0FBaUI1NkgsS0FBS2lhLEVBQUEsRUFBS0EsRUFBQWUsRUFBQTFYLFNBQVcyVyxFQUFBLENBQUssSUFBQUssRUFBQVUsRUFBQWYsR0FBQXZDLE9BQUFyVSxNQUFBLFNBQWlDLEdBQUFpWCxFQUFBaFgsT0FBQSxXQUFBZ1gsRUFBQSxXQUFBQSxFQUFBLElBQTBDLElBQUF5aUMsRUFBQSxJQUFBcHdDLEVBQUEyekcsT0FBQWhyRyxXQUFBZ0YsRUFBQSxJQUFBaEYsV0FBQWdGLEVBQUEsSUFBQWhGLFdBQUFnRixFQUFBLEtBQXVFdmEsRUFBQXVhLEVBQUEsSUFBQTFWLEtBQUFtNEMsUUFBZ0IsVUFBQXppQyxFQUFBLElBQXFCLElBQUE1YSxHQUFBNFYsV0FBQWdGLEVBQUEsSUFBQWhGLFdBQUFnRixFQUFBLEtBQTBDdmEsRUFBQXVhLEVBQUEsSUFBQTFWLEtBQUFsRixRQUFnQixTQUFBNGEsRUFBQSxXQUFBbFcsRUFBQSxFQUErQkEsRUFBQWtXLEVBQUFoWCxTQUFXYyxFQUFBLENBQUssUUFBQXFmLEtBQUE5akIsR0FBQSxFQUFBeUUsRUFBQSxFQUFBQSxHQUFBdEUsRUFBQSxFQUE2QkEsRUFBQUgsRUFBQTJELFNBQVd4RCxFQUFBLENBQUssSUFBQXFCLEVBQUFtWixFQUFBM2EsRUFBQUcsSUFBQUssRUFBQSxFQUFrQixZQUFBSCxFQUFBbUIsR0FBQWhCLEVBQUFILEVBQUFtQixPQUF3QixDQUFLLFFBQUFLLEVBQUFMLEVBQUFrQyxNQUFBLEtBQUFvVCxFQUFBLEVBQTJCQSxFQUFBalYsRUFBQThCLE9BQVdtVCxJQUFBalYsRUFBQWlWLEdBQUFSLFNBQUF6VSxFQUFBaVYsSUFBQSxFQUEwQnRXLEVBQUFILEVBQUFtQixHQUFBd1osRUFBQXk3RyxTQUFBOXlILE9BQUFxWCxFQUFBeTdHLFNBQUF4eEgsS0FBQTdFLEVBQUF5M0MsRUFBQWgyQyxFQUFBLElBQUF3aEMsUUFBQWpqQyxFQUFBNDZILEdBQUFuNUgsRUFBQSxJQUFBbVosRUFBQTA3RyxJQUFBenhILEtBQUE3RSxFQUFBNDZILEdBQUFuNUgsRUFBQSxJQUFBa0ksU0FBQWlSLEVBQUEwN0csSUFBQXp4SCxNQUFBLE1BQUE3RSxFQUFBNjZILEdBQUFwNUgsRUFBQSxLQUFBbVosRUFBQXM4RyxjQUFBcnlILEtBQUE3RSxFQUFBNjZILEdBQUFwNUgsRUFBQSxJQUFBd2hDLFFBQTJLdmYsRUFBQTdlLEtBQUF6RSxHQUFVc2pCLEVBQUEsS0FBQUEsRUFBQSxJQUFBQSxFQUFBLEtBQUFBLEVBQUEsSUFBQUEsRUFBQSxLQUFBQSxFQUFBLElBQUE5SSxFQUFBbThHLE1BQUFseUgsS0FBQTZlLElBQXdELElBQUE5SSxFQUFBczhHLGNBQUEzekgsUUFBQXFYLEVBQUE0N0csa0JBQW1ZdjJILENBQUFzYSxFQUFBSyxHQUFBSyxHQUFBVixFQUFBczNHLFlBQUE3MEUsRUFBQWk1RCxvQkFBQSxtQkFBQWoyRyxLQUFBdWEsSUFBeUVwWixLQUFBYyxNQUFBaVksR0FBQUssR0FBaUIzTixFQUFBckwsVUFBQXU1SCxNQUFBLFNBQUFsZ0gsR0FBK0IzWSxLQUFBMmhILFVBQUEsU0FBQWgzRyxFQUFBbXZGLG9CQUFBLFFBQUF4MkYsV0FBQXFWLEVBQUF5N0csU0FBQTl5SCxPQUFBLElBQUF0QixLQUFBb21HLFVBQUE0dEIsZUFBQXI3RyxFQUFBKy9HLE9BQUEvL0csRUFBQTY3RyxxQkFBQUMsbUJBQUF6MEgsS0FBQW9tRyxVQUFBdjVELGNBQUFsMEIsRUFBQSsvRyxJQUFBLy9HLElBQUEzWSxLQUFBb21HLFVBQUF5dkIsWUFBQWw5RyxFQUFBKy9HLE9BQWtQMS9HLEVBQUF4YixRQUFBbU4sSUFBZWl2RixlQUFBLEdBQUFnOUIsZ0JBQUEsS0FBcUNqaUQsSUFBQSxTQUFBaDhELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUFBaE8sRUFBQWdPLEVBQUEscUJBQWlEQSxFQUFBLGdCQUFBM2EsRUFBQXNCLFVBQUFzMkcsV0FBQSxTQUFBajlGLEVBQUFLLEdBQXVEaGIsRUFBQTg3RixvQkFBQSxhQUFBeDJGLFdBQThDLElBQUF2RixFQUFBLElBQUFDLEVBQUE4NkgsT0FBQW51SCxFQUFBM0ssS0FBQWlZLEdBQUEsRUFBQUssR0FBQSxFQUFvQyxPQUFBdFksS0FBQXMxRyxZQUFBdDhGLEVBQUEsU0FBQUwsR0FBc0M1YSxFQUFBZzdILFNBQUFwZ0gsRUFBQWxYLEtBQUEsTUFBQXdXLEdBQUEsRUFBQUssR0FBQTNOLEVBQUFxcEcsc0JBQXNEaDBHLEtBQUFzMUcsWUFBQTM4RixFQUFBLFNBQUFBLEdBQWlDNWEsRUFBQWk3SCxTQUFBcmdILEVBQUFsWCxLQUFBLE1BQUE2VyxHQUFBLEVBQUFMLEdBQUF0TixFQUFBcXBHLHNCQUFzRGoyRyxHQUFJQyxFQUFBc0IsVUFBQTI1SCxhQUFBLFNBQUF0Z0gsRUFBQUssR0FBd0MsT0FBQWhaLEtBQUEyaEgsVUFBQSxnQkFBQTNqSCxFQUFBODdGLG9CQUFBLGVBQUF4MkYsV0FBQSxJQUFBdEYsRUFBQTg2SCxPQUFBOTRILEtBQUFvbUcsVUFBQXp0RixFQUFBSyxJQUF1SGhiLEVBQUFzQixVQUFBNDVILE9BQUEsU0FBQXZnSCxHQUFnQyxPQUFBM1ksS0FBQTJoSCxVQUFBLFVBQUEzakgsRUFBQTg3RixvQkFBQSxTQUFBeDJGLGdCQUFBLElBQUFxVixFQUFBeXRGLFlBQUF6dEYsRUFBQXl0RixVQUFBcG1HLEtBQUFvbUcsV0FBQXp0RixFQUFBd2dILGlCQUFBbjVILEtBQUFvbUcsVUFBQWd6QixnQkFBQXpnSCxHQUFBM1ksS0FBQW9tRyxVQUFBaXpCLGNBQUExZ0gsR0FBQTNZLE1BQXVOaEMsRUFBQXNCLFVBQUFnNkgsZUFBQSxXQUF1QyxPQUFBdDVILEtBQUEyaEgsVUFBQSxrQkFBQTNqSCxFQUFBODdGLG9CQUFBLGlCQUFBeDJGLFdBQUF0RCxLQUFBb21HLFVBQUFtekIsU0FBQTV1SCxFQUFBc2hHLEtBQUFqc0csS0FBQW9tRyxVQUFBaXpCLGNBQUFyNUgsS0FBQW9tRyxVQUFBb3pCLG9CQUFBeDVILEtBQUFvbUcsVUFBQTh4QixjQUFBLFNBQUFsNEgsS0FBQXdtRyxXQUFBeG1HLE1BQW9QaEMsRUFBQXNCLFVBQUFtNkgsUUFBQSxTQUFBOWdILEdBQWlDM1ksS0FBQTJoSCxVQUFBLFdBQUEzakgsRUFBQTg3RixvQkFBQSxVQUFBeDJGLFdBQUF0RCxLQUFBb21HLFVBQUFtekIsU0FBQTV1SCxFQUFBdWhHLFFBQXVHLElBQUFsekYsRUFBQWhaLEtBQUFvbUcsVUFBQTR4QixrQkFBdUMsT0FBQWgvRyxFQUFBaS9HLFdBQUEsZ0JBQUFqL0csRUFBQWkvRyxXQUFBLGdCQUFBai9HLEVBQUFpL0csV0FBQSxXQUFBdC9HLEdBQUEzWSxLQUFBd21HLFdBQUF4bUcsTUFBaUhoQyxFQUFBc0IsVUFBQW82SCxnQkFBQSxTQUFBL2dILEVBQUFLLEVBQUFqYixFQUFBNE0sR0FBK0MzSyxLQUFBMmhILFVBQUEsbUJBQUEzakgsRUFBQTg3RixvQkFBQSxrQkFBQXgyRixXQUFxRixJQUFBMlUsRUFBQWphLEVBQUFzQixVQUFBeTZGLE1BQUF6eUYsTUFBQXRILEtBQUFzRCxXQUE4Q3RELEtBQUFvbUcsVUFBQTh4QixhQUFBamdILEVBQUE2akYsT0FBcUMsSUFBQXhqRixFQUFBdFksS0FBQW9tRyxVQUFBNHhCLGtCQUF1QyxPQUFBMS9HLEVBQUEyL0csV0FBQSxpQkFBQWo0SCxLQUFBb21HLFVBQUE4eEIsY0FBQTUvRyxFQUFBMi9HLFdBQUEsZ0JBQUEzL0csRUFBQTIvRyxXQUFBLGdCQUFBajRILE1BQWlJaEMsRUFBQXNCLFVBQUFxNkgsaUJBQUEsU0FBQWhoSCxFQUFBSyxFQUFBamIsRUFBQTRNLEdBQWdEM0ssS0FBQTJoSCxVQUFBLG9CQUFBM2pILEVBQUE4N0Ysb0JBQUEsbUJBQUF4MkYsV0FBdUYsSUFBQTJVLEVBQUFqYSxFQUFBc0IsVUFBQXk2RixNQUFBenlGLE1BQUF0SCxLQUFBc0QsV0FBOEN0RCxLQUFBb21HLFVBQUE4eEIsYUFBQWpnSCxFQUFBNmpGLE9BQXFDLElBQUF4akYsRUFBQXRZLEtBQUFvbUcsVUFBQTR4QixrQkFBdUMsT0FBQTEvRyxFQUFBMi9HLFdBQUEsaUJBQUFqNEgsS0FBQW9tRyxVQUFBOHhCLGNBQUE1L0csRUFBQTIvRyxXQUFBLGdCQUFBMy9HLEVBQUEyL0csV0FBQSxnQkFBQWo0SCxNQUFpSWhDLEVBQUE4NUcsV0FBQXg0RyxVQUFBczZILGlCQUFBLFNBQUFqaEgsR0FBcUQsSUFBQUssRUFBQWhaLEtBQUE2NUgsR0FBQTk3SCxFQUFBaUMsS0FBQXU1SCxXQUFBNXVILEVBQUF1aEcsUUFBMEMsT0FBQW51RyxHQUFBNGEsSUFBQXJYLE9BQUEsTUFBQTBYLEVBQUE4Z0gsVUFBQS83SCxHQUFBaWIsRUFBQStnSCxPQUFBL2dILEVBQUFteEYsT0FBQW54RixFQUFBZ2hILGNBQUFoaEgsRUFBQWloSCxVQUFBamhILEVBQUFraEgsVUFBQWxoSCxFQUFBbWhILFVBQUFuaEgsRUFBQW9oSCx1QkFBQXBoSCxFQUFBOGdILFdBQUEsR0FBQTlnSCxFQUFBcWhILFFBQUFyaEgsRUFBQW14RixRQUFBeHhGLEdBQStLSyxFQUFBeGIsUUFBQVEsSUFBZTA5RixvQkFBQSxHQUFBOUIsZUFBQSxHQUFBMGdDLGVBQUEsS0FBMkQxbEQsSUFBQSxTQUFBajhELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUF3QjNhLEVBQUFzQixVQUFBaTdILE9BQUEsV0FBOEIsT0FBQXY2SCxLQUFBMmhILFVBQUEsVUFBQTNqSCxFQUFBODdGLG9CQUFBLFNBQUF4MkYsV0FBQXRELEtBQUFvbUcsVUFBQTB3QixXQUFBeUQsT0FBQWp6SCxNQUFBdEgsS0FBQW9tRyxVQUFBMHdCLFdBQUF4ekgsV0FBQXRELE1BQTJKaEMsRUFBQXNCLFVBQUFrN0gsWUFBQSxXQUFvQyxPQUFBeDZILEtBQUEyaEgsVUFBQSxlQUFBM2pILEVBQUE4N0Ysb0JBQUEsY0FBQXgyRixXQUFBdEQsS0FBQW9tRyxVQUFBMHdCLFdBQUEwRCxZQUFBbHpILE1BQUF0SCxLQUFBb21HLFVBQUEwd0IsV0FBQXh6SCxXQUFBdEQsTUFBMEtoQyxFQUFBc0IsVUFBQW03SCxNQUFBLFdBQThCLE9BQUF6NkgsS0FBQTJoSCxVQUFBLFNBQUEzakgsRUFBQTg3RixvQkFBQSxRQUFBeDJGLFdBQUF0RCxLQUFBb21HLFVBQUEwd0IsV0FBQTJELE1BQUFuekgsTUFBQXRILEtBQUFvbUcsVUFBQTB3QixXQUFBeHpILFdBQUF0RCxNQUF3SmhDLEVBQUFzQixVQUFBbzdILGFBQUEsV0FBcUMxNkgsS0FBQTJoSCxVQUFBLGdCQUErQixJQUFBaHBHLEVBQUEsSUFBQTNhLEVBQUEyOEgsT0FBQTM2SCxLQUFBb21HLFdBQW1DLE9BQUF6dEYsRUFBQWlpSCxnQ0FBQWppSCxFQUFBa2lILG9CQUFBNzZILEtBQUFvbUcsVUFBQTB3QixXQUFBbitHLEtBQTZGM2EsRUFBQTI4SCxPQUFBLFNBQUFoaUgsR0FBc0IzWSxLQUFBb21HLFVBQUF6dEYsRUFBQTNZLEtBQUE4NkgsV0FBQSxVQUFBOTZILEtBQUE2M0gsYUFBQSxJQUFBNzVILEVBQUE0M0gsT0FBQTUxSCxLQUFBKzZILFdBQUEsSUFBQS84SCxFQUFBNDNILFFBQXVHNTNILEVBQUEyOEgsT0FBQXI3SCxVQUFBazdILFlBQUEsU0FBQTdoSCxFQUFBSyxFQUFBamIsRUFBQTRNLFFBQWtELElBQUFnTyxLQUFBM1ksS0FBQWc3SCxpQkFBQWg3SCxLQUFBaTdILFVBQUF0aUgsR0FBQTNZLEtBQUFpN0gsVUFBQWo3SCxLQUFBb21HLFVBQUE4UCxPQUFBcUosV0FBQTVtRyxRQUFBLElBQUFLLE1BQUFoWixLQUFBazdILHlCQUFBLElBQUFuOUgsTUFBQWlDLEtBQUFtN0gsd0JBQUEsSUFBQXh3SCxNQUFBM0ssS0FBQW83SCxrQkFBQXI5SCxHQUFBLE9BQUFBLEVBQUEsSUFBQXdTLFFBQUFuTCxJQUFBLG9GQUFBdUYsRUFBQTVNLEdBQUF3UyxRQUFBbkwsSUFBQSxxRkFBQXBGLEtBQUFpN0gsVUFBQWo3SCxLQUFBb21HLFVBQUE4UCxPQUFBcUosV0FBQTVtRyxHQUFBM1ksS0FBQXE3SCxZQUFBcmlILEVBQUFoWixLQUFBczdILFdBQUF2OUgsRUFBQWlDLEtBQUF1N0gsVUFBQTV3SCxFQUFBM0ssS0FBQSs2SCxXQUFBLzhILEVBQUE0M0gsT0FBQTRGLFdBQWlrQixJQUFBdmpILEVBQUEsRUFBQXJULEtBQUFnZ0csSUFBQTVrRyxLQUFBaTdILFVBQUEsR0FBQTNpSCxFQUFBLEdBQUF0WSxLQUFBczdILFdBQUF0N0gsS0FBQXU3SCxXQUF3RXY3SCxLQUFBKzZILFdBQUFyNkgsSUFBQXVYLEVBQUFlLEVBQUEsU0FBQWYsRUFBQSxTQUFBdE4sRUFBQTVNLEdBQUF1YSxHQUFBLFFBQUEzTixFQUFBNU0sRUFBQXVhLEVBQUEsR0FBQXRZLEtBQUF5N0gsYUFBQXo3SCxLQUFBb21HLFVBQUFzMUIsU0FBQWg3SCxJQUFBVixLQUFBKzZILFdBQUFqRCxLQUFBLEdBQUE5M0gsS0FBQSs2SCxXQUFBakQsS0FBQSxHQUFBOTNILEtBQUErNkgsV0FBQWpELEtBQUEsR0FBQTkzSCxLQUFBKzZILFdBQUFqRCxLQUFBLEdBQUE5M0gsS0FBQSs2SCxXQUFBakQsS0FBQSxHQUFBOTNILEtBQUErNkgsV0FBQWpELEtBQUEsR0FBQTkzSCxLQUFBKzZILFdBQUFqRCxLQUFBLEdBQUE5M0gsS0FBQSs2SCxXQUFBakQsS0FBQSxHQUFBOTNILEtBQUErNkgsV0FBQWpELEtBQUEsR0FBQTkzSCxLQUFBKzZILFdBQUFqRCxLQUFBLEdBQUE5M0gsS0FBQSs2SCxXQUFBakQsS0FBQSxJQUFBOTNILEtBQUErNkgsV0FBQWpELEtBQUEsSUFBQTkzSCxLQUFBKzZILFdBQUFqRCxLQUFBLElBQUE5M0gsS0FBQSs2SCxXQUFBakQsS0FBQSxJQUFBOTNILEtBQUErNkgsV0FBQWpELEtBQUEsSUFBQTkzSCxLQUFBKzZILFdBQUFqRCxLQUFBLEtBQUE5M0gsS0FBQTg2SCxXQUFBLFVBQW1oQjk4SCxFQUFBMjhILE9BQUFyN0gsVUFBQW03SCxNQUFBLFNBQUE5aEgsRUFBQUssRUFBQWpiLEVBQUE0TSxFQUFBc04sRUFBQUssUUFBZ0QsSUFBQUssT0FBQTNZLEtBQUFvbUcsVUFBQTc0RCxNQUFBLFlBQUF2MEIsT0FBQWhaLEtBQUFvbUcsVUFBQTc0RCxNQUFBLFlBQUF4dkMsT0FBQWlDLEtBQUFvbUcsVUFBQXIzRSxPQUFBLFlBQUFwa0IsT0FBQTNLLEtBQUFvbUcsVUFBQXIzRSxPQUFBLFlBQUE5VyxNQUFBLFlBQUFLLE1BQUExVCxLQUFBOEssSUFBQTFQLEtBQUFvbUcsVUFBQTc0RCxNQUFBdnRDLEtBQUFvbUcsVUFBQXIzRSxTQUF5UCxJQUFBZ3NCLEVBQUEvaEMsRUFBQUwsRUFBQWpiLEVBQUFpTixFQUFBNU0sRUFBQXFFLEVBQUFrVyxFQUFBTCxFQUFBd0osRUFBQSxFQUFBczVCLEVBQUFwOUMsRUFBQSxFQUFBRCxFQUFBSSxHQUFBLEVBQUFzRSxFQUFBakQsSUFBQTZaLEVBQUFMLEdBQUFvaUMsRUFBQTU4QyxJQUFBd00sRUFBQTVNLEdBQUFMLEVBQUE4QixJQUFBOFksRUFBQUwsR0FBQTdWLEVBQTBFcEMsS0FBQSs2SCxXQUFBLzhILEVBQUE0M0gsT0FBQTRGLFdBQUF4N0gsS0FBQSs2SCxXQUFBcjZILElBQUErZ0IsRUFBQSxTQUFBOWpCLEVBQUEsUUFBQUcsRUFBQSxFQUFBcUIsRUFBQWhCLEVBQUFxQixFQUFBLEdBQUFRLEtBQUF5N0gsYUFBQXo3SCxLQUFBb21HLFVBQUFzMUIsU0FBQWg3SCxJQUFBVixLQUFBKzZILFdBQUFqRCxLQUFBLEdBQUE5M0gsS0FBQSs2SCxXQUFBakQsS0FBQSxHQUFBOTNILEtBQUErNkgsV0FBQWpELEtBQUEsR0FBQTkzSCxLQUFBKzZILFdBQUFqRCxLQUFBLEdBQUE5M0gsS0FBQSs2SCxXQUFBakQsS0FBQSxHQUFBOTNILEtBQUErNkgsV0FBQWpELEtBQUEsR0FBQTkzSCxLQUFBKzZILFdBQUFqRCxLQUFBLEdBQUE5M0gsS0FBQSs2SCxXQUFBakQsS0FBQSxHQUFBOTNILEtBQUErNkgsV0FBQWpELEtBQUEsR0FBQTkzSCxLQUFBKzZILFdBQUFqRCxLQUFBLEdBQUE5M0gsS0FBQSs2SCxXQUFBakQsS0FBQSxJQUFBOTNILEtBQUErNkgsV0FBQWpELEtBQUEsSUFBQTkzSCxLQUFBKzZILFdBQUFqRCxLQUFBLElBQUE5M0gsS0FBQSs2SCxXQUFBakQsS0FBQSxJQUFBOTNILEtBQUErNkgsV0FBQWpELEtBQUEsSUFBQTkzSCxLQUFBKzZILFdBQUFqRCxLQUFBLEtBQUE5M0gsS0FBQTg2SCxXQUFBLFVBQXdpQjk4SCxFQUFBMjhILE9BQUFyN0gsVUFBQXE4SCxZQUFBLFNBQUFoakgsRUFBQUssRUFBQWpiLEVBQUE0TSxHQUFrRCxJQUFBc04sRUFBQWpZLEtBQUE0N0gsUUFBQXRqSCxFQUFBdFksS0FBQTY3SCxRQUFBOWdGLEVBQUEvNkMsS0FBQTg3SCxRQUFpRDdqSCxHQUFBalksS0FBQXEzSCxLQUFBLytHLEdBQUF0WSxLQUFBczNILEtBQUF2OEUsR0FBQS82QyxLQUFBdTNILEtBQXVDLElBQUE3NUgsRUFBQU0sRUFBQTQzSCxPQUFBNEYsU0FBQXg3SCxLQUFBb21HLFVBQUE4UCxRQUErQ3g0RyxFQUFBeWdILE9BQUF4bEcsRUFBQUssRUFBQWpiLEVBQUE0TSxHQUFrQixJQUFBdkksR0FBQTZWLEVBQUF2YSxFQUFBbzZILEtBQUEsR0FBQXgvRyxFQUFBNWEsRUFBQW82SCxLQUFBLEdBQUEvOEUsRUFBQXI5QyxFQUFBbzZILEtBQUEsR0FBQTcvRyxFQUFBdmEsRUFBQW82SCxLQUFBLEdBQUF4L0csRUFBQTVhLEVBQUFvNkgsS0FBQSxHQUFBLzhFLEVBQUFyOUMsRUFBQW82SCxLQUFBLEdBQUE3L0csRUFBQXZhLEVBQUFvNkgsS0FBQSxHQUFBeC9HLEVBQUE1YSxFQUFBbzZILEtBQUEsR0FBQS84RSxFQUFBcjlDLEVBQUFvNkgsS0FBQSxLQUFxSDExSCxFQUFBLElBQUFwQyxLQUFBcTNILEtBQUFqMUgsRUFBQSxJQUFBcEMsS0FBQXMzSCxLQUFBbDFILEVBQUEsSUFBQXBDLEtBQUF1M0gsS0FBQXYzSCxLQUFBdTZILE9BQUF2NkgsS0FBQXEzSCxLQUFBcjNILEtBQUFzM0gsS0FBQXQzSCxLQUFBdTNILEtBQUFuMUgsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsR0FBQXBDLEtBQUEyaUMsSUFBQTNpQyxLQUFBNGlDLElBQUE1aUMsS0FBQTZpQyxNQUFxSTdrQyxFQUFBMjhILE9BQUFyN0gsVUFBQTY4QixJQUFBLFNBQUF4akIsR0FBb0MsSUFBQUssRUFBQWhaLEtBQUFvM0gsZ0JBQTJCcDNILEtBQUEyN0gsWUFBQWhqSCxFQUFBSyxFQUFBaWxCLEVBQUEsR0FBQWpsQixFQUFBaWxCLEVBQUEsR0FBQWpsQixFQUFBaWxCLEVBQUEsS0FBeUNqZ0MsRUFBQTI4SCxPQUFBcjdILFVBQUF5OEgsS0FBQSxTQUFBcGpILEdBQXFDLElBQUFLLEVBQUFoWixLQUFBbzNILGdCQUEyQnAzSCxLQUFBMjdILFlBQUFoakgsRUFBQUssRUFBQTRnQixFQUFBLEdBQUE1Z0IsRUFBQTRnQixFQUFBLEdBQUE1Z0IsRUFBQTRnQixFQUFBLEtBQXlDNTdCLEVBQUEyOEgsT0FBQXI3SCxVQUFBMDhILE9BQUEsU0FBQXJqSCxFQUFBSyxFQUFBamIsR0FBMkNpQyxLQUFBdTZILE9BQUF2NkgsS0FBQXEzSCxLQUFBcjNILEtBQUFzM0gsS0FBQXQzSCxLQUFBdTNILEtBQUE1K0csRUFBQUssRUFBQWpiLEVBQUFpQyxLQUFBMmlDLElBQUEzaUMsS0FBQTRpQyxJQUFBNWlDLEtBQUE2aUMsTUFBNEU3a0MsRUFBQTI4SCxPQUFBcjdILFVBQUFpN0gsT0FBQSxTQUFBNWhILEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLEVBQUFLLEVBQUF5aUMsRUFBQXI5QyxRQUF1RCxJQUFBaWIsTUFBQTNZLEtBQUFpOEgsWUFBQWpqSCxFQUFBaFosS0FBQWs4SCxZQUFBbitILEVBQUFpQyxLQUFBbThILFlBQUFuK0gsRUFBQTJhLEVBQUFoTyxFQUFBcU8sRUFBQWYsRUFBQSxFQUFBSyxFQUFBLEVBQUF5aUMsRUFBQSxFQUFBcjlDLEVBQUEsR0FBQXNDLEtBQUFxM0gsS0FBQTErRyxFQUFBM1ksS0FBQXMzSCxLQUFBdCtHLEVBQUFoWixLQUFBdTNILEtBQUF4NUgsRUFBQWlDLEtBQUE0N0gsUUFBQTU5SCxFQUFBZ0MsS0FBQTY3SCxRQUFBbHhILEVBQUEzSyxLQUFBODdILFFBQUE3akgsRUFBQWpZLEtBQUEyaUMsSUFBQXJxQixFQUFBdFksS0FBQTRpQyxJQUFBbVksRUFBQS82QyxLQUFBNmlDLElBQUFubEMsRUFBaU4sSUFBQTBFLEVBQUFwQyxLQUFBbzNILGdCQUEyQnAzSCxLQUFBNjNILGFBQUFuM0gsSUFBQTBCLEVBQUF3M0IsRUFBQSxHQUFBeDNCLEVBQUE2N0IsRUFBQSxHQUFBNzdCLEVBQUE4N0IsRUFBQSxLQUFBOTdCLEVBQUF3M0IsRUFBQSxHQUFBeDNCLEVBQUE2N0IsRUFBQSxHQUFBNzdCLEVBQUE4N0IsRUFBQSxLQUFBOTdCLEVBQUF3M0IsRUFBQSxHQUFBeDNCLEVBQUE2N0IsRUFBQSxHQUFBNzdCLEVBQUE4N0IsRUFBQSxjQUFvRyxJQUFBemMsR0FBQTlJLEVBQUFoYixHQUFBcWIsRUFBQWxiLEdBQUFDLEVBQW1CLE9BQUFpQyxLQUFBNjNILGFBQUFqYixXQUFBbjdGLEVBQUE5akIsRUFBQUcsSUFBQWtDLEtBQUF5N0gsYUFBQXo3SCxLQUFBb21HLFVBQUF1dkIsVUFBQWoxSCxJQUFBVixLQUFBNjNILGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBNjNILGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBNjNILGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBNjNILGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBNjNILGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBNjNILGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBNjNILGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBNjNILGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBNjNILGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBNjNILGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBNjNILGFBQUFDLEtBQUEsSUFBQTkzSCxLQUFBNjNILGFBQUFDLEtBQUEsSUFBQTkzSCxLQUFBNjNILGFBQUFDLEtBQUEsSUFBQTkzSCxLQUFBNjNILGFBQUFDLEtBQUEsSUFBQTkzSCxLQUFBNjNILGFBQUFDLEtBQUEsSUFBQTkzSCxLQUFBNjNILGFBQUFDLEtBQUEsS0FBQTkzSCxNQUF1Z0JoQyxFQUFBMjhILE9BQUFyN0gsVUFBQTg4SCxLQUFBLFNBQUF6akgsRUFBQUssRUFBQWpiLEdBQXlDLElBQUFDLEVBQUFnQyxLQUFBbzNILGdCQUFBenNILEdBQUEzTSxFQUFBNDdCLEVBQUEsR0FBQWpoQixFQUFBM2EsRUFBQTQ3QixFQUFBLEdBQUFqaEIsRUFBQTNhLEVBQUE0N0IsRUFBQSxHQUFBamhCLEdBQUFWLEdBQUFqYSxFQUFBaWdDLEVBQUEsR0FBQWpsQixFQUFBaGIsRUFBQWlnQyxFQUFBLEdBQUFqbEIsRUFBQWhiLEVBQUFpZ0MsRUFBQSxHQUFBamxCLEdBQUFWLEdBQUF0YSxFQUFBa2dDLEVBQUEsR0FBQW5nQyxFQUFBQyxFQUFBa2dDLEVBQUEsR0FBQW5nQyxFQUFBQyxFQUFBa2dDLEVBQUEsR0FBQW5nQyxHQUF3SGlDLEtBQUF1NkgsT0FBQXY2SCxLQUFBcTNILEtBQUExc0gsRUFBQSxHQUFBc04sRUFBQSxHQUFBSyxFQUFBLEdBQUF0WSxLQUFBczNILEtBQUEzc0gsRUFBQSxHQUFBc04sRUFBQSxHQUFBSyxFQUFBLEdBQUF0WSxLQUFBdTNILEtBQUE1c0gsRUFBQSxHQUFBc04sRUFBQSxHQUFBSyxFQUFBLEdBQUF0WSxLQUFBNDdILFFBQUFqeEgsRUFBQSxHQUFBc04sRUFBQSxHQUFBSyxFQUFBLEdBQUF0WSxLQUFBNjdILFFBQUFseEgsRUFBQSxHQUFBc04sRUFBQSxHQUFBSyxFQUFBLEdBQUF0WSxLQUFBODdILFFBQUFueEgsRUFBQSxHQUFBc04sRUFBQSxHQUFBSyxFQUFBLFdBQWtMdGEsRUFBQTI4SCxPQUFBcjdILFVBQUEwK0IsWUFBQSxTQUFBcmxCLEVBQUFLLEVBQUFqYixHQUFnRCxJQUFBQyxFQUFBMmEsRUFBQTNZLEtBQUFxM0gsS0FBQTFzSCxFQUFBcU8sRUFBQWhaLEtBQUFzM0gsS0FBQXIvRyxFQUFBbGEsRUFBQWlDLEtBQUF1M0gsS0FBOEN2M0gsS0FBQXU2SCxPQUFBNWhILEVBQUFLLEVBQUFqYixFQUFBaUMsS0FBQTQ3SCxRQUFBNTlILEVBQUFnQyxLQUFBNjdILFFBQUFseEgsRUFBQTNLLEtBQUE4N0gsUUFBQTdqSCxFQUFBLFFBQXNFamEsRUFBQTI4SCxPQUFBcjdILFVBQUFzN0gsOEJBQUEsV0FBNkQ1NkgsS0FBQWc3SCxpQkFBQSxPQUFBcDJILEtBQUFDLEdBQ3pwK0I3RSxLQUFBazdILG1CQUFBbDdILEtBQUFvbUcsVUFBQTc0RCxNQUFBdnRDLEtBQUFvbUcsVUFBQXIzRSxPQUFBL3VCLEtBQUFpOEgsWUFBQSxFQUFBajhILEtBQUFrOEgsWUFBQSxFQUFBbDhILEtBQUFtOEgsWUFBQW44SCxLQUFBb21HLFVBQUFyM0UsT0FBQSxFQUFBbnFCLEtBQUFnZ0csSUFBQTVrRyxLQUFBZzdILGlCQUFBLEdBQUFoN0gsS0FBQXE4SCxlQUFBLEVBQUFyOEgsS0FBQXM4SCxlQUFBLEVBQUF0OEgsS0FBQXU4SCxlQUFBLEVBQUF2OEgsS0FBQW03SCxrQkFBQSxHQUFBbjdILEtBQUFtOEgsWUFBQW44SCxLQUFBbzdILGlCQUFBLEdBQUFwN0gsS0FBQW04SCxhQUEyVW4rSCxFQUFBMjhILE9BQUFyN0gsVUFBQXU3SCxrQkFBQSxXQUFpRDc2SCxLQUFBaTdILFVBQUFqN0gsS0FBQWc3SCxpQkFBQWg3SCxLQUFBcTdILFlBQUFyN0gsS0FBQWs3SCxtQkFBQWw3SCxLQUFBcTNILEtBQUFyM0gsS0FBQWk4SCxZQUFBajhILEtBQUFzM0gsS0FBQXQzSCxLQUFBazhILFlBQUFsOEgsS0FBQXUzSCxLQUFBdjNILEtBQUFtOEgsWUFBQW44SCxLQUFBNDdILFFBQUE1N0gsS0FBQXE4SCxlQUFBcjhILEtBQUE2N0gsUUFBQTc3SCxLQUFBczhILGVBQUF0OEgsS0FBQTg3SCxRQUFBOTdILEtBQUF1OEgsZUFBQXY4SCxLQUFBMmlDLElBQUEsRUFBQTNpQyxLQUFBNGlDLElBQUEsRUFBQTVpQyxLQUFBNmlDLElBQUEsRUFBQTdpQyxLQUFBczdILFdBQUF0N0gsS0FBQW03SCxrQkFBQW43SCxLQUFBdTdILFVBQUF2N0gsS0FBQW83SCxpQkFBQXA3SCxLQUFBdzZILGNBQUF4NkgsS0FBQXU2SCxTQUFBdjZILEtBQUE4NkgsV0FBQSxXQUEwYTk4SCxFQUFBMjhILE9BQUFyN0gsVUFBQWs5SCxRQUFBLFdBQXVDLFlBQUF4OEgsS0FBQTg2SCxZQUFBOTZILEtBQUE0NkgsZ0NBQUE1NkgsS0FBQTY2SCxxQkFBQTc2SCxLQUFBdzZILFlBQUF4NkgsS0FBQWk3SCxVQUFBajdILEtBQUFvbUcsVUFBQTc0RCxNQUFBdnRDLEtBQUFvbUcsVUFBQXIzRSxTQUF3Sy93QixFQUFBMjhILE9BQUFyN0gsVUFBQTBoQyxLQUFBLFdBQW9DLElBQUFyb0IsRUFBQSxJQUFBM2EsRUFBQTI4SCxPQUFBMzZILEtBQUFvbUcsV0FBbUMsT0FBQXp0RixFQUFBc2lILFVBQUFqN0gsS0FBQWk3SCxVQUFBdGlILEVBQUEwaUgsWUFBQXI3SCxLQUFBcTdILFlBQUExaUgsRUFBQTArRyxLQUFBcjNILEtBQUFxM0gsS0FBQTErRyxFQUFBMitHLEtBQUF0M0gsS0FBQXMzSCxLQUFBMytHLEVBQUE0K0csS0FBQXYzSCxLQUFBdTNILEtBQUE1K0csRUFBQWlqSCxRQUFBNTdILEtBQUE0N0gsUUFBQWpqSCxFQUFBa2pILFFBQUE3N0gsS0FBQTY3SCxRQUFBbGpILEVBQUFtakgsUUFBQTk3SCxLQUFBODdILFFBQUFuakgsRUFBQTJpSCxXQUFBdDdILEtBQUFzN0gsV0FBQTNpSCxFQUFBNGlILFVBQUF2N0gsS0FBQXU3SCxVQUFBNWlILEVBQUFtaUgsV0FBQTk2SCxLQUFBODZILFdBQUFuaUgsRUFBQWsvRyxhQUFBNzNILEtBQUE2M0gsYUFBQTcyRixPQUFBcm9CLEVBQUFvaUgsV0FBQS82SCxLQUFBKzZILFdBQUEvNUYsT0FBQXJvQixHQUE0VjNhLEVBQUEyOEgsT0FBQXI3SCxVQUFBODNILGNBQUEsV0FBNkMsSUFBQXorRyxFQUFBM1ksS0FBQXEzSCxLQUFBcjNILEtBQUE0N0gsUUFBQTVpSCxFQUFBaFosS0FBQXMzSCxLQUFBdDNILEtBQUE2N0gsUUFBQTk5SCxFQUFBaUMsS0FBQXUzSCxLQUFBdjNILEtBQUE4N0gsUUFBQTk5SCxFQUFBNEcsS0FBQWttQixLQUFBblMsSUFBQUssSUFBQWpiLEtBQXdHLElBQUFDLElBQUEyYSxHQUFBM2EsRUFBQWdiLEdBQUFoYixFQUFBRCxHQUFBQyxHQUF3QixJQUFBMk0sRUFBQTNLLEtBQUEyaUMsSUFBQTFxQixFQUFBalksS0FBQTRpQyxJQUFBdHFCLEVBQUF0WSxLQUFBNmlDLElBQUFrWSxFQUFBOWlDLEVBQUFsYSxFQUFBdWEsRUFBQVUsRUFBQXRiLEdBQUFpTixFQUFBNU0sRUFBQXVhLEVBQUFLLEVBQUF2VyxFQUFBdUksRUFBQXFPLEVBQUFmLEVBQUFVLEVBQW9FaE8sRUFBQXFPLEVBQUE1VyxFQUFBckUsRUFBQUwsRUFBQXVhLEdBQUFVLEVBQUF2VyxFQUFBckUsRUFBQWc5QyxFQUFBemlDLEVBQUFLLEVBQUFqYixFQUFBc2IsRUFBQStoQyxFQUErQixJQUFBdDVCLEVBQUE3YyxLQUFBa21CLEtBQUFpd0IsSUFBQXI5QyxJQUFBMEUsS0FBNkIsSUFBQXFmLElBQUFzNUIsR0FBQXQ1QixFQUFBL2pCLEdBQUErakIsRUFBQXJmLEdBQUFxZixHQUF3QixJQUFBOWpCLEVBQUFpSCxLQUFBa21CLEtBQUFuZ0IsSUFBQXNOLElBQUFLLEtBQTZCLFdBQUEzYSxJQUFBZ04sR0FBQWhOLEVBQUFzYSxHQUFBdGEsRUFBQTJhLEdBQUEzYSxJQUFnQ2k4QixHQUFBbWhCLEVBQUFyOUMsRUFBQTBFLEdBQUE2N0IsR0FBQXR6QixFQUFBc04sRUFBQUssR0FBQTRsQixHQUFBdmxCLEVBQUFLLEVBQUFqYixLQUErQkMsRUFBQTI4SCxPQUFBcjdILFVBQUE2M0gsT0FBQSxTQUFBeCtHLEVBQUFLLEVBQUFqYixHQUEyQyxJQUFBQyxFQUFBZ0MsS0FBQXEzSCxLQUFBcjNILEtBQUE0N0gsUUFBQWp4SCxFQUFBM0ssS0FBQXMzSCxLQUFBdDNILEtBQUE2N0gsUUFBQTVqSCxFQUFBalksS0FBQXUzSCxLQUFBdjNILEtBQUE4N0gsUUFBQXhqSCxFQUFBMVQsS0FBQWttQixLQUFBOXNCLElBQUEyTSxJQUFBc04sS0FBQThpQyxFQUFBbjJDLEtBQUFvckgsTUFBQWh5SCxFQUFBaWEsR0FBQXZhLEVBQUFrSCxLQUFBdXJILEtBQUF2ckgsS0FBQThLLEtBQUEsRUFBQTlLLEtBQUFzWCxJQUFBLEVBQUF2UixFQUFBMk4sS0FBb0t5aUMsR0FBQXBpQyxFQUFBamIsR0FBQXNiLEdBQUFWLEdBQUF2YSxHQUFBLElBQUF1YSxFQUFBLElBQUE1YSxFQUFBa0gsS0FBQUMsR0FBQW5ILEVBQUFrSCxLQUFBQyxHQUFBbkgsR0FBQSxJQUFBQSxFQUFBLE1BQThELElBQUEwRSxFQUFBd0MsS0FBQUUsSUFBQXBILEdBQUE0YSxFQUFBMVQsS0FBQUUsSUFBQWkyQyxHQUFBdDVCLEVBQUE3YyxLQUFBcWQsSUFBQXZrQixHQUFBNGEsRUFBQTNhLEVBQUFpSCxLQUFBRSxJQUFBcEgsR0FBQTRhLEVBQUExVCxLQUFBcWQsSUFBQTg0QixHQUE0RS82QyxLQUFBdTZILE9BQUFuNEgsRUFBQXBDLEtBQUE0N0gsUUFBQW42RyxFQUFBemhCLEtBQUE2N0gsUUFBQWwrSCxFQUFBcUMsS0FBQTg3SCxRQUFBOTdILEtBQUE0N0gsUUFBQTU3SCxLQUFBNjdILFFBQUE3N0gsS0FBQTg3SCxRQUFBLFFBQXVHOTlILEVBQUEyOEgsT0FBQXI3SCxVQUFBbThILFVBQUEsV0FBeUMsT0FBQXo3SCxZQUFBb21HLFVBQUEwd0IsWUFBd0M5NEgsRUFBQXNCLFVBQUFtOUgsVUFBQSxTQUFBOWpILEdBQW1DM1ksS0FBQW9tRyxVQUFBMHdCLFdBQUFuK0csRUFBQTNZLEtBQUFvbUcsVUFBQXMxQixTQUFBaDdILElBQUFpWSxFQUFBb2lILFdBQUFqRCxLQUFBLEdBQUFuL0csRUFBQW9pSCxXQUFBakQsS0FBQSxHQUFBbi9HLEVBQUFvaUgsV0FBQWpELEtBQUEsR0FBQW4vRyxFQUFBb2lILFdBQUFqRCxLQUFBLEdBQUFuL0csRUFBQW9pSCxXQUFBakQsS0FBQSxHQUFBbi9HLEVBQUFvaUgsV0FBQWpELEtBQUEsR0FBQW4vRyxFQUFBb2lILFdBQUFqRCxLQUFBLEdBQUFuL0csRUFBQW9pSCxXQUFBakQsS0FBQSxHQUFBbi9HLEVBQUFvaUgsV0FBQWpELEtBQUEsR0FBQW4vRyxFQUFBb2lILFdBQUFqRCxLQUFBLEdBQUFuL0csRUFBQW9pSCxXQUFBakQsS0FBQSxJQUFBbi9HLEVBQUFvaUgsV0FBQWpELEtBQUEsSUFBQW4vRyxFQUFBb2lILFdBQUFqRCxLQUFBLElBQUFuL0csRUFBQW9pSCxXQUFBakQsS0FBQSxJQUFBbi9HLEVBQUFvaUgsV0FBQWpELEtBQUEsSUFBQW4vRyxFQUFBb2lILFdBQUFqRCxLQUFBLE1BQStZOStHLEVBQUF4YixRQUFBUSxFQUFBMjhILFNBQXNCL2dDLGVBQUEsS0FBa0Iva0IsSUFBQSxTQUFBbDhELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUF3QjNhLEVBQUFpMkgsU0FBQSxTQUFBdDdHLEVBQUFLLEVBQUFqYixHQUEyQixPQUFBaUMsS0FBQW8wSCxZQUFBcDBILEtBQUEwOEgsZ0JBQUExOEgsS0FBQTI4SCxlQUFBMzhILEtBQUFpMUgsaUJBQUFqMUgsS0FBQTgwSCxTQUFBOTBILEtBQUFxMEgsT0FBQXIwSCxLQUFBNDhILFNBQUE1OEgsS0FBQW0wSCxhQUFBLElBQUF4N0csSUFBQSxFQUFBM1ksS0FBQWswSCxhQUFBLElBQUFsN0csSUFBQSxFQUFBamIsYUFBQXNtRCxVQUFBdG1ELEVBQUFGLEtBQUFtQyxZQUFnT2hDLEVBQUFpMkgsU0FBQTMwSCxVQUFBZzFILGFBQUEsV0FBOEN0MEgsS0FBQTgwSCxNQUFBeHpILE9BQUEsRUFBb0IsUUFBQXFYLEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQTNLLEtBQUFtMEgsUUFBQSxFQUFBbDhHLEVBQUEsRUFBcUNBLEVBQUFqWSxLQUFBazBILFFBQWVqOEcsSUFBQSxRQUFBSyxFQUFBLEVBQWdCQSxFQUFBdFksS0FBQW0wSCxRQUFlNzdHLElBQUFLLEVBQUFWLEVBQUF0TixFQUFBMk4sRUFBQVUsRUFBQWYsRUFBQXROLEVBQUEyTixFQUFBLEVBQUF2YSxHQUFBa2EsRUFBQSxHQUFBdE4sRUFBQTJOLEVBQUEsRUFBQXRhLEdBQUFpYSxFQUFBLEdBQUF0TixFQUFBMk4sRUFBQXRZLEtBQUE4MEgsTUFBQWx5SCxNQUFBK1YsRUFBQUssRUFBQWhiLElBQUFnQyxLQUFBODBILE1BQUFseUgsTUFBQTVFLEVBQUFnYixFQUFBamIsSUFBa0csT0FBQWlDLE1BQVloQyxFQUFBaTJILFNBQUEzMEgsVUFBQXU5SCxlQUFBLFNBQUFsa0gsR0FBaUQsSUFBQUssRUFBQWhaLEtBQUE4MEgsTUFBQW44RyxHQUFBNWEsRUFBQWlDLEtBQUFvMEgsU0FBQXA3RyxFQUFBLElBQUFyTyxFQUFBM0ssS0FBQW8wSCxTQUFBcDdHLEVBQUEsSUFBQWYsRUFBQWpZLEtBQUFvMEgsU0FBQXA3RyxFQUFBLElBQUFWLEVBQUF0YSxFQUFBc2dILE9BQUF4eUIsSUFBQW5oRixFQUFBNU0sR0FBQWc5QyxFQUFBLzhDLEVBQUFzZ0gsT0FBQXh5QixJQUFBN3pFLEVBQUFsYSxHQUFBTCxFQUFBTSxFQUFBc2dILE9BQUFxUixNQUFBcjNHLEVBQUF5aUMsR0FBQTM0QyxFQUFBcEUsRUFBQXNnSCxPQUFBMlEsSUFBQXZ4SCxHQUFBK2pCLEVBQUFyZixHQUFBcEUsRUFBQXNnSCxPQUFBMlEsSUFBQTMyRyxHQUFBdGEsRUFBQXNnSCxPQUFBMlEsSUFBQWwwRSxJQUE0TSxXQUFBdDVCLEdBQUEwMEIsTUFBQTEwQixJQUFBbFIsUUFBQUMsS0FBQSx3RkFBQTlTLElBQUErakIsRUFBQSxJQUFBQSxFQUFBLEdBQUEvakIsRUFBQSsyQyxLQUFBN3ZDLEtBQUErckgsS0FBQWx2RyxHQUFBcmYsS0FBb0twRSxFQUFBaTJILFNBQUEzMEgsVUFBQWkxSCxlQUFBLFdBQWdELElBQUE1N0csRUFBQUssRUFBQWhaLEtBQUFpMUgsY0FBQWwzSCxFQUFBaUMsS0FBQW8wSCxTQUFBenBILEVBQUEzSyxLQUFBODBILE1BQXdELElBQUE5N0csRUFBQTFYLE9BQUEsRUFBQXFYLEVBQUEsRUFBbUJBLEVBQUE1YSxFQUFBdUQsU0FBV3FYLEVBQUFLLEVBQUFwVyxLQUFBLElBQUE1RSxFQUFBc2dILFFBQXlCLFFBQUFybUcsRUFBQSxFQUFZQSxFQUFBdE4sRUFBQXJKLFNBQVcyVyxFQUFBLFFBQUFLLEVBQUEzTixFQUFBc04sR0FBQThpQyxFQUFBLzZDLEtBQUE2OEgsZUFBQTVrSCxHQUFBdmEsRUFBQSxFQUFnREEsRUFBQSxJQUFJQSxFQUFBLENBQUssSUFBQTBFLEVBQUFrVyxFQUFBNWEsR0FBV3NiLEVBQUE1VyxHQUFBK0YsSUFBQTR5QyxHQUFZLElBQUFwaUMsRUFBQSxFQUFRQSxFQUFBNWEsRUFBQXVELFNBQVdxWCxFQUFBSyxFQUFBTCxHQUFBaTNHLFlBQXFCLE9BQUE1dkgsTUFBWWhDLEVBQUFpMkgsU0FBQTMwSCxVQUFBdzlILGVBQUEsV0FBZ0QsUUFBQW5rSCxFQUFBLEVBQVlBLEdBQUEzWSxLQUFBazBILFFBQWdCdjdHLElBQUEsQ0FBSyxJQUFBSyxFQUFBaFosS0FBQW0wSCxRQUFBLEVBQUFwMkgsRUFBQUMsRUFBQXNnSCxPQUFBbjJHLElBQUFuSSxLQUFBaTFILGNBQUF0OEcsRUFBQUssR0FBQWhaLEtBQUFpMUgsY0FBQXQ4RyxFQUFBSyxFQUFBaFosS0FBQW0wSCxVQUFrR3AySCxFQUFBQyxFQUFBc2dILE9BQUFtRSxJQUFBMWtILEVBQUEsR0FBQWlDLEtBQUFpMUgsY0FBQXQ4RyxFQUFBSyxHQUFBamIsRUFBQWlDLEtBQUFpMUgsY0FBQXQ4RyxFQUFBSyxFQUFBaFosS0FBQW0wSCxTQUFBcDJILEVBQXFGLE9BQUFpQyxNQUFZaEMsRUFBQWkySCxTQUFBMzBILFVBQUF5OUgsbUJBQUEsV0FBb0QsUUFBQXBrSCxFQUFBLElBQUEzYSxFQUFBc2dILE9BQUEsT0FBQXRsRyxFQUFBLEVBQWtDQSxFQUFBaFosS0FBQW0wSCxRQUFlbjdHLElBQUFMLEVBQUF4USxJQUFBbkksS0FBQWkxSCxjQUFBajhHLElBQWlDLElBQUFMLEVBQUEzYSxFQUFBc2dILE9BQUFtRSxJQUFBOXBHLEVBQUEzWSxLQUFBbTBILFNBQUFuN0csRUFBQSxFQUF1Q0EsRUFBQWhaLEtBQUFtMEgsUUFBZW43RyxJQUFBaFosS0FBQWkxSCxjQUFBajhHLEdBQUFMLEVBQTRCLElBQUFBLEVBQUEsSUFBQTNhLEVBQUFzZ0gsT0FBQSxPQUFBdGxHLEVBQUFoWixLQUFBbzBILFNBQUE5eUgsT0FBQSxFQUFtRDBYLEVBQUFoWixLQUFBbzBILFNBQUE5eUgsT0FBQSxFQUFBdEIsS0FBQW0wSCxRQUFzQ243RyxJQUFBTCxFQUFBeFEsSUFBQW5JLEtBQUFpMUgsY0FBQWo4RyxJQUFpQyxJQUFBTCxFQUFBM2EsRUFBQXNnSCxPQUFBbUUsSUFBQTlwRyxFQUFBM1ksS0FBQW0wSCxTQUFBbjdHLEVBQUFoWixLQUFBbzBILFNBQUE5eUgsT0FBQSxFQUE0RDBYLEVBQUFoWixLQUFBbzBILFNBQUE5eUgsT0FBQSxFQUFBdEIsS0FBQW0wSCxRQUFzQ243RyxJQUFBaFosS0FBQWkxSCxjQUFBajhHLEdBQUFMLEVBQTRCLE9BQUEzWSxNQUFZaEMsRUFBQWkySCxTQUFBMzBILFVBQUFrMUgsbUJBQUEsV0FBb0QsR0FBQXgwSCxLQUFBNDhILE1BQUF0N0gsT0FBQSxFQUFBd0MsTUFBQUQsUUFBQTdELEtBQUE2MEgsZUFBQSxRQUFBbDhHLEVBQUEsRUFBQUssRUFBQWhaLEtBQUE2MEgsY0FBQXZ6SCxPQUFpR3FYLEVBQUFLLEVBQUlMLElBQUEzWSxLQUFBNDhILE1BQUFoNkgsS0FBQTVDLEtBQUE2MEgsY0FBQWw4RyxTQUEyQyxRQUFBNWEsRUFBQSxFQUFpQkEsRUFBQWlDLEtBQUE4MEgsTUFBQXh6SCxPQUFvQnZELElBQUFpQyxLQUFBNDhILE1BQUFoNkgsTUFBQTVDLEtBQUE4MEgsTUFBQS8ySCxHQUFBLEdBQUFpQyxLQUFBODBILE1BQUEvMkgsR0FBQSxLQUFBaUMsS0FBQTQ4SCxNQUFBaDZILE1BQUE1QyxLQUFBODBILE1BQUEvMkgsR0FBQSxHQUFBaUMsS0FBQTgwSCxNQUFBLzJILEdBQUEsS0FBQWlDLEtBQUE0OEgsTUFBQWg2SCxNQUFBNUMsS0FBQTgwSCxNQUFBLzJILEdBQUEsR0FBQWlDLEtBQUE4MEgsTUFBQS8ySCxHQUFBLEtBQW1LLE9BQUFpQyxNQUFZaEMsRUFBQWkySCxTQUFBMzBILFVBQUFtMUgsaUJBQUEsV0FBa0R6MEgsS0FBQTA4SCxhQUFBcDdILE9BQUEsRUFBQXRCLEtBQUEyOEgsWUFBQXI3SCxPQUFBLEVBQXFELFFBQUFxWCxFQUFBLEVBQVlBLEVBQUEzWSxLQUFBNDhILE1BQUF0N0gsT0FBb0JxWCxJQUFBLENBQUssSUFBQUssRUFBQWhaLEtBQUFvMEgsU0FBQXAwSCxLQUFBNDhILE1BQUFqa0gsR0FBQSxJQUFBNWEsRUFBQWlDLEtBQUFvMEgsU0FBQXAwSCxLQUFBNDhILE1BQUFqa0gsR0FBQSxJQUFBM2EsRUFBQUQsRUFBQWlqQyxPQUFBOHFELElBQUE5eUUsR0FBQTQyRyxZQUFBamxILEVBQUFxTyxFQUFBMUcsUUFBQTJGLEVBQUFlLEVBQUExRyxRQUFBZ0csRUFBQXZhLEVBQUF1VSxRQUFBeW9DLEVBQUFoOUMsRUFBQXVVLFFBQUE1VSxFQUFBTSxFQUFBc1UsUUFBQWxRLEVBQUFwRSxFQUFBc1UsUUFBOEs1VSxFQUFBa0YsS0FBQSxHQUFBUixFQUFBUSxNQUFBLEdBQUE1QyxLQUFBMjhILFlBQUEvNUgsS0FBQWxGLEVBQUEwRSxFQUFBMUUsSUFBQTBFLEtBQUFwQyxLQUFBMDhILGFBQUE5NUgsS0FBQStILEVBQUFzTixFQUFBSyxJQUFBTCxFQUFBOGlDLEdBQTRGLE9BQUEvNkMsTUFBWWhDLEVBQUFpMkgsU0FBQTMwSCxVQUFBc3dILFVBQUEsV0FBMkMsR0FBQTV2SCxLQUFBbzBILFNBQUE5eUgsT0FBQSxHQUEyQixRQUFBcVgsRUFBQTNZLEtBQUFvMEgsU0FBQSxHQUFBcHpGLE9BQUFob0IsRUFBQWhaLEtBQUFvMEgsU0FBQSxHQUFBcHpGLE9BQUFqakMsRUFBQSxFQUFnRUEsRUFBQWlDLEtBQUFvMEgsU0FBQTl5SCxPQUF1QnZELElBQUE0YSxFQUFBaWhCLEVBQUFoMUIsS0FBQThLLElBQUFpSixFQUFBaWhCLEVBQUE1NUIsS0FBQW8wSCxTQUFBcjJILEdBQUE2N0IsR0FBQTVnQixFQUFBNGdCLEVBQUFoMUIsS0FBQXNYLElBQUFsRCxFQUFBNGdCLEVBQUE1NUIsS0FBQW8wSCxTQUFBcjJILEdBQUE2N0IsR0FBQWpoQixFQUFBc2xCLEVBQUFyNUIsS0FBQThLLElBQUFpSixFQUFBc2xCLEVBQUFqK0IsS0FBQW8wSCxTQUFBcjJILEdBQUFrZ0MsR0FBQWpsQixFQUFBaWxCLEVBQUFyNUIsS0FBQXNYLElBQUFsRCxFQUFBaWxCLEVBQUFqK0IsS0FBQW8wSCxTQUFBcjJILEdBQUFrZ0MsR0FBQXRsQixFQUFBdWxCLEVBQUF0NUIsS0FBQThLLElBQUFpSixFQUFBdWxCLEVBQUFsK0IsS0FBQW8wSCxTQUFBcjJILEdBQUFtZ0MsR0FBQWxsQixFQUFBa2xCLEVBQUF0NUIsS0FBQXNYLElBQUFsRCxFQUFBa2xCLEVBQUFsK0IsS0FBQW8wSCxTQUFBcjJILEdBQUFtZ0MsR0FBa08sSUFBQXZ6QixFQUFBM00sRUFBQXNnSCxPQUFBbGpCLEtBQUF6aUYsRUFBQUssRUFBQSxJQUFBZixFQUFBamEsRUFBQXNnSCxPQUFBeHlCLElBQUFuekUsRUFBQUssR0FBQVYsRUFBQTFULEtBQUE4SyxJQUFBOUssS0FBQThLLElBQUF1SSxFQUFBMmhCLEVBQUEzaEIsRUFBQWdtQixHQUFBaG1CLEVBQUFpbUIsR0FBQTZjLEVBQUEsSUFBQXppQyxFQUEwRixJQUFBdmEsRUFBQSxFQUFRQSxFQUFBaUMsS0FBQW8wSCxTQUFBOXlILE9BQXVCdkQsSUFBQWlDLEtBQUFvMEgsU0FBQXIySCxHQUFBK3RGLElBQUFuaEYsR0FBQTNLLEtBQUFvMEgsU0FBQXIySCxHQUFBMDJDLEtBQUFzRyxHQUFxRCxPQUFBLzZDLE1BQVlnWixFQUFBeGIsUUFBQVEsRUFBQWkySCxXQUF3QnI2QixlQUFBLEtBQWtCOWtCLElBQUEsU0FBQW44RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBYSxJQUFBQyxFQUFBMmEsRUFBQSxnQkFBQWhPLEVBQUE3RyxNQUFBbVUsRUFBQSxTQUFBVSxHQUE4QyxPQUFBQSxhQUFBN1UsT0FBMkIsb0JBQUF5TyxlQUFBNUgsRUFBQTRILGFBQUEwRixFQUFBLFNBQUFVLEdBQWdFLE9BQUFBLGFBQUE3VSxPQUFBNlUsYUFBQXBHLGVBQXFEdlUsRUFBQTQzSCxPQUFBLFdBQXNCLFFBQUFqOUcsRUFBQSxJQUFBN1UsTUFBQVIsVUFBQWhDLFFBQUEwWCxFQUFBLEVBQTBDQSxFQUFBTCxFQUFBclgsU0FBVzBYLEVBQUFMLEVBQUFLLEdBQUExVixVQUFBMFYsR0FBc0IsT0FBQUwsRUFBQXJYLFFBQUFxWCxJQUFBclgsT0FBQSxhQUFBdEQsSUFBQWdDLEtBQUF5dkgsR0FBQTkyRyxJQUFBclgsT0FBQSxhQUFBcVgsRUFBQSxHQUFBM1ksS0FBQWc5SCxLQUFBbDVILE1BQUFELFFBQUE4VSxFQUFBLElBQUFBLEVBQUEsT0FBQWhPLEdBQUEsb0JBQUEzSyxLQUFBODNILEtBQUFoMEgsTUFBQUQsUUFBQThVLEVBQUEsSUFBQUEsRUFBQSxPQUFBaE8sR0FBQSxrQ0FBQTNLLE1BQWlPaEMsRUFBQTQzSCxPQUFBdDJILFVBQUFvQixJQUFBLFNBQUFpWSxHQUFvQyxPQUFBQSxhQUFBM2EsRUFBQTQzSCxRQUFBNTFILEtBQUE4M0gsS0FBQW4vRyxFQUFBbS9HLEtBQUE5M0gsTUFBQWlZLEVBQUFVLElBQUEzWSxLQUFBODNILEtBQUFuL0csRUFBQTNZLE9BQUEsS0FBQXNELFVBQUFoQyxTQUFBdEIsS0FBQTgzSCxLQUFBLEdBQUF4MEgsVUFBQSxHQUFBdEQsS0FBQTgzSCxLQUFBLEdBQUF4MEgsVUFBQSxHQUFBdEQsS0FBQTgzSCxLQUFBLEdBQUF4MEgsVUFBQSxHQUFBdEQsS0FBQTgzSCxLQUFBLEdBQUF4MEgsVUFBQSxHQUFBdEQsS0FBQTgzSCxLQUFBLEdBQUF4MEgsVUFBQSxHQUFBdEQsS0FBQTgzSCxLQUFBLEdBQUF4MEgsVUFBQSxHQUFBdEQsS0FBQTgzSCxLQUFBLEdBQUF4MEgsVUFBQSxHQUFBdEQsS0FBQTgzSCxLQUFBLEdBQUF4MEgsVUFBQSxHQUFBdEQsS0FBQTgzSCxLQUFBLEdBQUF4MEgsVUFBQSxHQUFBdEQsS0FBQTgzSCxLQUFBLEdBQUF4MEgsVUFBQSxHQUFBdEQsS0FBQTgzSCxLQUFBLElBQUF4MEgsVUFBQSxJQUFBdEQsS0FBQTgzSCxLQUFBLElBQUF4MEgsVUFBQSxJQUFBdEQsS0FBQTgzSCxLQUFBLElBQUF4MEgsVUFBQSxJQUFBdEQsS0FBQTgzSCxLQUFBLElBQUF4MEgsVUFBQSxJQUFBdEQsS0FBQTgzSCxLQUFBLElBQUF4MEgsVUFBQSxJQUFBdEQsS0FBQTgzSCxLQUFBLElBQUF4MEgsVUFBQSxLQUFBdEQsT0FBeWhCaEMsRUFBQTQzSCxPQUFBdDJILFVBQUFmLElBQUEsV0FBbUMsV0FBQVAsRUFBQTQzSCxPQUFBNTFILEtBQUE4M0gsS0FBQTkzSCxLQUFBeXZILEtBQXVDenhILEVBQUE0M0gsT0FBQXQySCxVQUFBMGhDLEtBQUEsV0FBb0MsSUFBQXJvQixFQUFBLElBQUEzYSxFQUFBNDNILE9BQUE1MUgsS0FBQXl2SCxJQUE0QixPQUFBOTJHLEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUFtL0csS0FBQSxJQUFBOTNILEtBQUE4M0gsS0FBQSxJQUFBbi9HLEVBQUFtL0csS0FBQSxJQUFBOTNILEtBQUE4M0gsS0FBQSxJQUFBbi9HLEVBQUFtL0csS0FBQSxJQUFBOTNILEtBQUE4M0gsS0FBQSxJQUFBbi9HLEVBQUFtL0csS0FBQSxJQUFBOTNILEtBQUE4M0gsS0FBQSxJQUFBbi9HLEVBQUFtL0csS0FBQSxJQUFBOTNILEtBQUE4M0gsS0FBQSxJQUFBbi9HLEVBQUFtL0csS0FBQSxJQUFBOTNILEtBQUE4M0gsS0FBQSxJQUFBbi9HLEdBQXFZM2EsRUFBQTQzSCxPQUFBNEYsU0FBQSxTQUFBN2lILEdBQStCLFdBQUEzYSxFQUFBNDNILE9BQUFqOUcsSUFBdUIzYSxFQUFBNDNILE9BQUF0MkgsVUFBQWtYLFVBQUEsU0FBQW1DLEdBQTBDLElBQUFLLEVBQUFqYixFQUFBNE0sRUFBQTJOLEVBQUF5aUMsRUFBQXI5QyxFQUFnQixPQUFBaWIsYUFBQTNhLEVBQUE0M0gsUUFBQTU4RyxFQUFBTCxFQUFBbS9HLEtBQUEsR0FBQS81SCxFQUFBNGEsRUFBQW0vRyxLQUFBLEdBQUFudEgsRUFBQWdPLEVBQUFtL0csS0FBQSxHQUFBeC9HLEVBQUFLLEVBQUFtL0csS0FBQSxHQUFBLzhFLEVBQUFwaUMsRUFBQW0vRyxLQUFBLEdBQUFwNkgsRUFBQWliLEVBQUFtL0csS0FBQSxJQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUFtL0csS0FBQSxJQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBOStHLEVBQUFoWixLQUFBODNILEtBQUEsR0FBQW4vRyxFQUFBbS9HLEtBQUEsR0FBQTkzSCxLQUFBODNILEtBQUEsR0FBQW4vRyxFQUFBbS9HLEtBQUEsR0FBQTkzSCxLQUFBODNILEtBQUEsR0FBQW4vRyxFQUFBbS9HLEtBQUEsSUFBQTkzSCxLQUFBODNILEtBQUEsR0FBQS81SCxFQUFBaUMsS0FBQTgzSCxLQUFBLEdBQUF4L0csRUFBQXRZLEtBQUE4M0gsS0FBQSxJQUFBbi9HLEVBQUFtL0csS0FBQSxJQUFBOTNILEtBQUE4M0gsS0FBQSxJQUFBbi9HLEVBQUFtL0csS0FBQSxJQUFBOTNILEtBQUE4M0gsS0FBQSxJQUFBbnRILEVBQUEzSyxLQUFBODNILEtBQUEsSUFBQS84RSxFQUFBLzZDLEtBQUE4M0gsS0FBQSxJQUFBcDZILEVBQUFzQyxLQUFBODNILEtBQUEsSUFBQW4vRyxFQUFBbS9HLEtBQUEsS0FBQTcvRyxFQUFBVSxLQUFBSyxFQUFBTCxFQUFBLEdBQUE1YSxFQUFBNGEsRUFBQSxHQUFBaE8sRUFBQWdPLEVBQUEsR0FBQUwsRUFBQUssRUFBQSxHQUFBb2lDLEVBQUFwaUMsRUFBQSxHQUFBamIsRUFBQWliLEVBQUEsSUFBQTNZLEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUEsR0FBQTNZLEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUEsR0FBQTNZLEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUEsR0FBQTNZLEtBQUE4M0gsS0FBQSxHQUFBbi9HLEVBQUEsSUFBQTNZLEtBQUE4M0gsS0FBQSxHQUFBOStHLEVBQUFoWixLQUFBODNILEtBQUEsR0FBQW4vRyxFQUFBLEdBQUEzWSxLQUFBODNILEtBQUEsR0FBQW4vRyxFQUFBLEdBQUEzWSxLQUFBODNILEtBQUEsR0FBQW4vRyxFQUFBLElBQUEzWSxLQUFBODNILEtBQUEsR0FBQS81SCxFQUFBaUMsS0FBQTgzSCxLQUFBLEdBQUF4L0csRUFBQXRZLEtBQUE4M0gsS0FBQSxJQUFBbi9HLEVBQUEsSUFBQTNZLEtBQUE4M0gsS0FBQSxJQUFBbi9HLEVBQUEsSUFBQTNZLEtBQUE4M0gsS0FBQSxJQUFBbnRILEVBQUEzSyxLQUFBODNILEtBQUEsSUFBQS84RSxFQUFBLzZDLEtBQUE4M0gsS0FBQSxJQUFBcDZILEVBQUFzQyxLQUFBODNILEtBQUEsSUFBQW4vRyxFQUFBLEtBQUEzWSxNQUFvd0JoQyxFQUFBNDNILE9BQUF0MkgsVUFBQW1wSCxPQUFBLFNBQUE5dkcsR0FBdUMsSUFBQUssRUFBQWpiLEVBQUE0TSxFQUFBMk4sRUFBQXlpQyxFQUFBcjlDLEVBQUEwRSxFQUFBcWYsRUFBQTlqQixFQUFBRyxFQUFBcUIsRUFBQWhCLEVBQUFxQixFQUFBaVYsRUFBQWpXLEVBQUFpQixFQUFvQ2taLGFBQUEzYSxFQUFBNDNILFFBQUE1OEcsRUFBQUwsRUFBQW0vRyxLQUFBLEdBQUEvNUgsRUFBQTRhLEVBQUFtL0csS0FBQSxHQUFBbnRILEVBQUFnTyxFQUFBbS9HLEtBQUEsR0FBQXgvRyxFQUFBSyxFQUFBbS9HLEtBQUEsR0FBQS84RSxFQUFBcGlDLEVBQUFtL0csS0FBQSxHQUFBcDZILEVBQUFpYixFQUFBbS9HLEtBQUEsR0FBQTExSCxFQUFBdVcsRUFBQW0vRyxLQUFBLEdBQUFyMkcsRUFBQTlJLEVBQUFtL0csS0FBQSxHQUFBbjZILEVBQUFnYixFQUFBbS9HLEtBQUEsR0FBQWg2SCxFQUFBNmEsRUFBQW0vRyxLQUFBLEdBQUEzNEgsRUFBQXdaLEVBQUFtL0csS0FBQSxJQUFBMzVILEVBQUF3YSxFQUFBbS9HLEtBQUEsSUFBQXQ0SCxFQUFBbVosRUFBQW0vRyxLQUFBLElBQUFyakgsRUFBQWtFLEVBQUFtL0csS0FBQSxJQUFBdDVILEVBQUFtYSxFQUFBbS9HLEtBQUEsSUFBQXI0SCxFQUFBa1osRUFBQW0vRyxLQUFBLEtBQUE3L0csRUFBQVUsS0FBQUssRUFBQUwsRUFBQSxHQUFBNWEsRUFBQTRhLEVBQUEsR0FBQWhPLEVBQUFnTyxFQUFBLEdBQUFMLEVBQUFLLEVBQUEsR0FBQW9pQyxFQUFBcGlDLEVBQUEsR0FBQWpiLEVBQUFpYixFQUFBLEdBQUF2VyxFQUFBdVcsRUFBQSxHQUFBOEksRUFBQTlJLEVBQUEsR0FBQWhiLEVBQUFnYixFQUFBLEdBQUE3YSxFQUFBNmEsRUFBQSxHQUFBeFosRUFBQXdaLEVBQUEsSUFBQXhhLEVBQUF3YSxFQUFBLElBQUFuWixFQUFBbVosRUFBQSxJQUFBbEUsRUFBQWtFLEVBQUEsSUFBQW5hLEVBQUFtYSxFQUFBLElBQUFsWixFQUFBa1osRUFBQSxLQUE0VixJQUFBL1osRUFBQW9hLEVBQUF0YixFQUFBSyxFQUFBZzlDLEVBQUF1QixFQUFBdGpDLEVBQUE1VyxFQUFBdUksRUFBQW93QyxFQUFBdkYsRUFBQXg4QixFQUFBeUksRUFBQW5KLEVBQUF5aUMsRUFBQTBCLEVBQUExK0MsRUFBQXFFLEVBQUF1SSxFQUFBak4sRUFBQWs4QixFQUFBNzdCLEVBQUEwakIsRUFBQW5KLEVBQUE1YSxFQUFBdWdDLEVBQUF0ekIsRUFBQThXLEVBQUFuSixFQUFBbFcsRUFBQTg3QixFQUFBdmdDLEVBQUE4VyxFQUFBM1csRUFBQTBCLEVBQUFvOUMsRUFBQWovQyxFQUFBYSxFQUFBVyxFQUFBSyxFQUFBMFEsRUFBQXZTLEVBQUE4QixFQUFBdEIsRUFBQXFCLEVBQUF5OUMsRUFBQW4vQyxFQUFBVSxFQUFBVyxFQUFBc1YsRUFBQXlvQyxFQUFBcC9DLEVBQUEyQixFQUFBdEIsRUFBQXNXLEVBQUEwb0MsRUFBQWgrQyxFQUFBTSxFQUFBdEIsRUFBQUssRUFBQTQrQyxFQUFBeCtDLEVBQUF1K0MsRUFBQWIsRUFBQVksRUFBQTFILEVBQUF5SCxFQUFBUixFQUFBdnNDLEVBQUEwcEIsRUFBQWdqQixFQUFBM2UsRUFBQUMsRUFBc0osT0FBQWtmLEtBQUEsRUFBQUEsRUFBQXA5QyxLQUFBODNILEtBQUEsSUFBQXA2SCxFQUFBeS9DLEVBQUEvNkMsRUFBQTg2QyxFQUFBejdCLEVBQUF3N0IsR0FBQUcsRUFBQXA5QyxLQUFBODNILEtBQUEsSUFBQW50SCxFQUFBdXlDLEVBQUFuL0MsRUFBQW8vQyxFQUFBN2tDLEVBQUEya0MsR0FBQUcsRUFBQXA5QyxLQUFBODNILEtBQUEsSUFBQXJqSCxFQUFBd3BCLEVBQUF6L0IsRUFBQW83QixFQUFBbjZCLEVBQUFnOUMsR0FBQVcsRUFBQXA5QyxLQUFBODNILEtBQUEsSUFBQTM0SCxFQUFBeTZCLEVBQUE5N0IsRUFBQW1nQyxFQUFBOS9CLEVBQUFzK0MsR0FBQVcsRUFBQXA5QyxLQUFBODNILEtBQUEsSUFBQTExSCxFQUFBOE4sRUFBQTZxQyxFQUFBb0MsRUFBQTE3QixFQUFBbTdCLEdBQUFRLEVBQUFwOUMsS0FBQTgzSCxLQUFBLElBQUE5K0csRUFBQW1rQyxFQUFBeHlDLEVBQUF1RixFQUFBb0ksRUFBQXNrQyxHQUFBUSxFQUFBcDlDLEtBQUE4M0gsS0FBQSxJQUFBdDVILEVBQUFnM0MsRUFBQWgyQyxFQUFBeStCLEVBQUF4K0IsRUFBQTY4QyxHQUFBYyxFQUFBcDlDLEtBQUE4M0gsS0FBQSxJQUFBbjZILEVBQUFzZ0MsRUFBQTkrQixFQUFBcTJDLEVBQUFyM0MsRUFBQW0rQyxHQUFBYyxFQUFBcDlDLEtBQUE4M0gsS0FBQSxJQUFBLzhFLEVBQUFtQyxFQUFBeC9DLEVBQUF3UyxFQUFBdVIsRUFBQXljLEdBQUFrZixFQUFBcDlDLEtBQUE4M0gsS0FBQSxJQUFBLzVILEVBQUFtUyxFQUFBOEksRUFBQWtrQyxFQUFBNWtDLEVBQUE0bEIsR0FBQWtmLEVBQUFwOUMsS0FBQTgzSCxLQUFBLEtBQUF0NEgsRUFBQW82QixFQUFBbmxCLEVBQUErZ0MsRUFBQS8xQyxFQUFBYixHQUFBdytDLEVBQUFwOUMsS0FBQTgzSCxLQUFBLEtBQUFoNkgsRUFBQTAzQyxFQUFBNzNDLEVBQUFpOEIsRUFBQXo3QixFQUFBUyxHQUFBdytDLEVBQUFwOUMsS0FBQTgzSCxLQUFBLEtBQUFwNkgsRUFBQWsvQyxFQUFBN0IsRUFBQWtDLEVBQUE3NkMsRUFBQTg3QixHQUFBa2YsRUFBQXA5QyxLQUFBODNILEtBQUEsS0FBQTkrRyxFQUFBaWtDLEVBQUFsL0MsRUFBQTYrQyxFQUFBanlDLEVBQUF1ekIsR0FBQWtmLEVBQUFwOUMsS0FBQTgzSCxLQUFBLEtBQUFyakgsRUFBQTZuQyxFQUFBOThDLEVBQUFpOUMsRUFBQWorQyxFQUFBSSxHQUFBdytDLEVBQUFwOUMsS0FBQTgzSCxLQUFBLEtBQUFuNkgsRUFBQTgrQyxFQUFBMytDLEVBQUF3K0MsRUFBQW45QyxFQUFBUCxHQUFBdytDLEVBQUFwOUMsTUFBQSxNQUFpZmhDLEVBQUE0M0gsT0FBQXQySCxVQUFBMjlILFVBQUEsV0FBeUMsSUFBQXRrSCxFQUFBM1ksS0FBQWc5SCxLQUFBLEdBQUFoa0gsRUFBQWhaLEtBQUFnOUgsS0FBQSxHQUFBai9ILEVBQUFpQyxLQUFBZzlILEtBQUEsR0FBQWgvSCxFQUFBZ0MsS0FBQWc5SCxLQUFBLEdBQUFyeUgsRUFBQTNLLEtBQUFnOUgsS0FBQSxHQUFBL2tILEVBQUFqWSxLQUFBZzlILEtBQUEsR0FBQTFrSCxFQUFBdFksS0FBQWc5SCxLQUFBLEdBQUFqaUYsRUFBQS82QyxLQUFBZzlILEtBQUEsR0FBQXQvSCxFQUFBc0MsS0FBQWc5SCxLQUFBLEdBQUE1NkgsRUFBQTFFLEVBQUFpTixFQUFBc04sRUFBQThpQyxFQUFBdDVCLEdBQUEvakIsRUFBQU0sRUFBQWlhLEVBQUFLLEVBQUEzYSxFQUFBbzlDLEVBQUEvOEMsRUFBQTJNLEVBQUEyTixFQUFBeGEsRUFBQTZhLEVBQUF2VyxFQUFBNFcsRUFBQXlJLEVBQUExakIsRUFBQUosRUFBd0wsT0FBQUcsS0FBQSxFQUFBQSxFQUFBa0MsS0FBQWc5SCxLQUFBLEdBQUE1NkgsRUFBQXRFLEVBQUFrQyxLQUFBZzlILEtBQUEsS0FBQXQvSCxFQUFBc2IsRUFBQWpiLEVBQUFnOUMsR0FBQWo5QyxFQUFBa0MsS0FBQWc5SCxLQUFBLElBQUEva0gsRUFBQWUsRUFBQWpiLEVBQUE0TSxHQUFBN00sRUFBQWtDLEtBQUFnOUgsS0FBQSxHQUFBdjdHLEVBQUEzakIsRUFBQWtDLEtBQUFnOUgsS0FBQSxJQUFBdC9ILEVBQUFpYixFQUFBNWEsRUFBQXVhLEdBQUF4YSxFQUFBa0MsS0FBQWc5SCxLQUFBLEtBQUEva0gsRUFBQVUsRUFBQTVhLEVBQUFDLEdBQUFGLEVBQUFrQyxLQUFBZzlILEtBQUEsR0FBQXIvSCxFQUFBRyxFQUFBa0MsS0FBQWc5SCxLQUFBLEtBQUFqaUYsRUFBQXBpQyxFQUFBSyxFQUFBVixHQUFBeGEsRUFBQWtDLEtBQUFnOUgsS0FBQSxJQUFBcnlILEVBQUFnTyxFQUFBSyxFQUFBaGIsR0FBQUYsRUFBQWtDLE1BQUEsTUFBdU9oQyxFQUFBNDNILE9BQUF0MkgsVUFBQTQ5SCxhQUFBLFNBQUF2a0gsR0FBNkMsSUFBQUssRUFBQUwsRUFBQSxHQUFBNWEsRUFBQTRhLEVBQUEsR0FBQTNhLEVBQUEyYSxFQUFBLEdBQXlCLE9BQUEzWSxLQUFBZzlILEtBQUEsR0FBQXJrSCxFQUFBLEdBQUEzWSxLQUFBZzlILEtBQUEsR0FBQXJrSCxFQUFBLEdBQUEzWSxLQUFBZzlILEtBQUEsR0FBQWhrSCxFQUFBaFosS0FBQWc5SCxLQUFBLEdBQUFya0gsRUFBQSxHQUFBM1ksS0FBQWc5SCxLQUFBLEdBQUFqL0gsRUFBQWlDLEtBQUFnOUgsS0FBQSxHQUFBaC9ILEVBQUFnQyxNQUErR2hDLEVBQUE0M0gsT0FBQXQySCxVQUFBNjlILGlCQUFBLFNBQUF4a0gsUUFBaUQsSUFBQTNZLEtBQUFnOUgsS0FBQXpzSCxRQUFBekUsTUFBQSw4Q0FBQTlMLEtBQUFnOUgsS0FBQSxHQUFBcmtILEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUFnOUgsS0FBQSxHQUFBcmtILEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUFnOUgsS0FBQSxHQUFBcmtILEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUFnOUgsS0FBQSxHQUFBcmtILEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUFnOUgsS0FBQSxHQUFBcmtILEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUFnOUgsS0FBQSxHQUFBcmtILEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUFnOUgsS0FBQSxHQUFBcmtILEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUFnOUgsS0FBQSxHQUFBcmtILEVBQUFtL0csS0FBQSxHQUFBOTNILEtBQUFnOUgsS0FBQSxHQUFBcmtILEVBQUFtL0csS0FBQSxLQUFnUyxJQUFBOStHLEVBQUFoWixLQUFBaTlILFlBQXVCLEdBQUFqa0gsSUFBQWtrSCxhQUFBbDlILEtBQUFnOUgsV0FBK0IsUUFBQWovSCxFQUFBLEVBQWlCQSxFQUFBLEVBQUlBLElBQUFpQyxLQUFBZzlILEtBQUFqL0gsR0FBQSxFQUFtQixPQUFBaUMsTUFBWWhDLEVBQUE0M0gsT0FBQXQySCxVQUFBODlILFlBQUEsV0FBMkMsSUFBQXprSCxFQUFBM1ksS0FBQTgzSCxLQUFBLEdBQUE5M0gsS0FBQTgzSCxLQUFBLEdBQUE5M0gsS0FBQTgzSCxLQUFBLEdBQUE5M0gsS0FBQTgzSCxLQUFBLEdBQUE5K0csRUFBQWhaLEtBQUE4M0gsS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBLzVILEVBQUFpQyxLQUFBODNILEtBQUEsR0FBQTkzSCxLQUFBODNILEtBQUEsR0FBQTkzSCxLQUFBODNILEtBQUEsR0FBQTkzSCxLQUFBODNILEtBQUEsR0FBQTk1SCxFQUFBZ0MsS0FBQTgzSCxLQUFBLEdBQUE5M0gsS0FBQTgzSCxLQUFBLEdBQUE5M0gsS0FBQTgzSCxLQUFBLEdBQUE5M0gsS0FBQTgzSCxLQUFBLEdBQUFudEgsRUFBQTNLLEtBQUE4M0gsS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxHQUFBNy9HLEVBQUFqWSxLQUFBODNILEtBQUEsR0FBQTkzSCxLQUFBODNILEtBQUEsR0FBQTkzSCxLQUFBODNILEtBQUEsR0FBQTkzSCxLQUFBODNILEtBQUEsR0FBQXgvRyxFQUFBdFksS0FBQTgzSCxLQUFBLEdBQUE5M0gsS0FBQTgzSCxLQUFBLElBQUE5M0gsS0FBQTgzSCxLQUFBLEdBQUE5M0gsS0FBQTgzSCxLQUFBLElBQUEvOEUsRUFBQS82QyxLQUFBODNILEtBQUEsR0FBQTkzSCxLQUFBODNILEtBQUEsSUFBQTkzSCxLQUFBODNILEtBQUEsSUFBQTkzSCxLQUFBODNILEtBQUEsSUFBQXA2SCxFQUFBc0MsS0FBQTgzSCxLQUFBLEdBQUE5M0gsS0FBQTgzSCxLQUFBLElBQUE5M0gsS0FBQTgzSCxLQUFBLElBQUE5M0gsS0FBQTgzSCxLQUFBLElBQUExMUgsRUFBQXBDLEtBQUE4M0gsS0FBQSxHQUFBOTNILEtBQUE4M0gsS0FBQSxJQUFBOTNILEtBQUE4M0gsS0FBQSxJQUFBOTNILEtBQUE4M0gsS0FBQSxJQUFBcjJHLEVBQUF6aEIsS0FBQTgzSCxLQUFBLEdBQUE5M0gsS0FBQTgzSCxLQUFBLElBQUE5M0gsS0FBQTgzSCxLQUFBLElBQUE5M0gsS0FBQTgzSCxLQUFBLElBQW9tQixPQUFBbi9HLEdBQUEzWSxLQUFBODNILEtBQUEsSUFBQTkzSCxLQUFBODNILEtBQUEsSUFBQTkzSCxLQUFBODNILEtBQUEsSUFBQTkzSCxLQUFBODNILEtBQUEsS0FBQTkrRyxFQUFBeUksRUFBQTFqQixFQUFBcUUsRUFBQXBFLEVBQUFOLEVBQUFpTixFQUFBb3dDLEVBQUE5aUMsRUFBQUssR0FBdUZ0YSxFQUFBNDNILE9BQUF0MkgsVUFBQW0xQyxLQUFBLFNBQUE5N0IsR0FBcUMsSUFBQUssRUFBTSxHQUFBTCxJQUFBM1ksTUFBQTJZLElBQUEzWSxLQUFBODNILEtBQUE5K0csRUFBQWhaLEtBQUFnaEMsT0FBQTgyRixVQUE4QyxHQUFBbi9HLGFBQUEzYSxFQUFBNDNILE9BQUE1OEcsRUFBQUwsRUFBQW0vRyxTQUF1QyxDQUFLLElBQUE3L0csRUFBQVUsR0FBQSxPQUFnQkssRUFBQUwsRUFBSSxJQUFBNWEsRUFBQWlDLEtBQUE4M0gsS0FBQSxHQUFBbnRILEVBQUEzSyxLQUFBODNILEtBQUEsR0FBQXgvRyxFQUFBdFksS0FBQTgzSCxLQUFBLEdBQUEvOEUsRUFBQS82QyxLQUFBODNILEtBQUEsR0FBZ0UsT0FBQTkzSCxLQUFBODNILEtBQUEsR0FBQS81SCxFQUFBaWIsRUFBQSxHQUFBck8sRUFBQXFPLEVBQUEsR0FBQVYsRUFBQVUsRUFBQSxHQUFBK2hDLEVBQUEvaEMsRUFBQSxJQUFBaFosS0FBQTgzSCxLQUFBLEdBQUEvNUgsRUFBQWliLEVBQUEsR0FBQXJPLEVBQUFxTyxFQUFBLEdBQUFWLEVBQUFVLEVBQUEsR0FBQStoQyxFQUFBL2hDLEVBQUEsSUFBQWhaLEtBQUE4M0gsS0FBQSxHQUFBLzVILEVBQUFpYixFQUFBLEdBQUFyTyxFQUFBcU8sRUFBQSxHQUFBVixFQUFBVSxFQUFBLElBQUEraEMsRUFBQS9oQyxFQUFBLElBQUFoWixLQUFBODNILEtBQUEsR0FBQS81SCxFQUFBaWIsRUFBQSxHQUFBck8sRUFBQXFPLEVBQUEsR0FBQVYsRUFBQVUsRUFBQSxJQUFBK2hDLEVBQUEvaEMsRUFBQSxJQUFBamIsRUFBQWlDLEtBQUE4M0gsS0FBQSxHQUFBbnRILEVBQUEzSyxLQUFBODNILEtBQUEsR0FBQXgvRyxFQUFBdFksS0FBQTgzSCxLQUFBLEdBQUEvOEUsRUFBQS82QyxLQUFBODNILEtBQUEsR0FBQTkzSCxLQUFBODNILEtBQUEsR0FBQS81SCxFQUFBaWIsRUFBQSxHQUFBck8sRUFBQXFPLEVBQUEsR0FBQVYsRUFBQVUsRUFBQSxHQUFBK2hDLEVBQUEvaEMsRUFBQSxJQUFBaFosS0FBQTgzSCxLQUFBLEdBQUEvNUgsRUFBQWliLEVBQUEsR0FBQXJPLEVBQUFxTyxFQUFBLEdBQUFWLEVBQUFVLEVBQUEsR0FBQStoQyxFQUFBL2hDLEVBQUEsSUFBQWhaLEtBQUE4M0gsS0FBQSxHQUFBLzVILEVBQUFpYixFQUFBLEdBQUFyTyxFQUFBcU8sRUFBQSxHQUFBVixFQUFBVSxFQUFBLElBQUEraEMsRUFBQS9oQyxFQUFBLElBQUFoWixLQUFBODNILEtBQUEsR0FBQS81SCxFQUFBaWIsRUFBQSxHQUFBck8sRUFBQXFPLEVBQUEsR0FBQVYsRUFBQVUsRUFBQSxJQUFBK2hDLEVBQUEvaEMsRUFBQSxJQUFBamIsRUFBQWlDLEtBQUE4M0gsS0FBQSxHQUFBbnRILEVBQUEzSyxLQUFBODNILEtBQUEsR0FBQXgvRyxFQUFBdFksS0FBQTgzSCxLQUFBLElBQUEvOEUsRUFBQS82QyxLQUFBODNILEtBQUEsSUFBQTkzSCxLQUFBODNILEtBQUEsR0FBQS81SCxFQUFBaWIsRUFBQSxHQUFBck8sRUFBQXFPLEVBQUEsR0FBQVYsRUFBQVUsRUFBQSxHQUFBK2hDLEVBQUEvaEMsRUFBQSxJQUFBaFosS0FBQTgzSCxLQUFBLEdBQUEvNUgsRUFBQWliLEVBQUEsR0FBQXJPLEVBQUFxTyxFQUFBLEdBQUFWLEVBQUFVLEVBQUEsR0FBQStoQyxFQUFBL2hDLEVBQUEsSUFBQWhaLEtBQUE4M0gsS0FBQSxJQUFBLzVILEVBQUFpYixFQUFBLEdBQUFyTyxFQUFBcU8sRUFBQSxHQUFBVixFQUFBVSxFQUFBLElBQUEraEMsRUFBQS9oQyxFQUFBLElBQUFoWixLQUFBODNILEtBQUEsSUFBQS81SCxFQUFBaWIsRUFBQSxHQUFBck8sRUFBQXFPLEVBQUEsR0FBQVYsRUFBQVUsRUFBQSxJQUFBK2hDLEVBQUEvaEMsRUFBQSxJQUFBamIsRUFBQWlDLEtBQUE4M0gsS0FBQSxJQUFBbnRILEVBQUEzSyxLQUFBODNILEtBQUEsSUFBQXgvRyxFQUFBdFksS0FBQTgzSCxLQUFBLElBQUEvOEUsRUFBQS82QyxLQUFBODNILEtBQUEsSUFBQTkzSCxLQUFBODNILEtBQUEsSUFBQS81SCxFQUFBaWIsRUFBQSxHQUFBck8sRUFBQXFPLEVBQUEsR0FBQVYsRUFBQVUsRUFBQSxHQUFBK2hDLEVBQUEvaEMsRUFBQSxJQUFBaFosS0FBQTgzSCxLQUFBLElBQUEvNUgsRUFBQWliLEVBQUEsR0FBQXJPLEVBQUFxTyxFQUFBLEdBQUFWLEVBQUFVLEVBQUEsR0FBQStoQyxFQUFBL2hDLEVBQUEsSUFBQWhaLEtBQUE4M0gsS0FBQSxJQUFBLzVILEVBQUFpYixFQUFBLEdBQUFyTyxFQUFBcU8sRUFBQSxHQUFBVixFQUFBVSxFQUFBLElBQUEraEMsRUFBQS9oQyxFQUFBLElBQUFoWixLQUFBODNILEtBQUEsSUFBQS81SCxFQUFBaWIsRUFBQSxHQUFBck8sRUFBQXFPLEVBQUEsR0FBQVYsRUFBQVUsRUFBQSxJQUFBK2hDLEVBQUEvaEMsRUFBQSxJQUFBaFosTUFBbzNCaEMsRUFBQTQzSCxPQUFBdDJILFVBQUEwN0csTUFBQSxTQUFBcmlHLEVBQUFLLEVBQUFqYixHQUEwQyxPQUFBNGEsYUFBQTNhLEVBQUFzZ0gsUUFBQXRsRyxFQUFBTCxFQUFBc2xCLEVBQUFsZ0MsRUFBQTRhLEVBQUF1bEIsRUFBQXZsQixJQUFBaWhCLEdBQUFqaEIsYUFBQTdVLFFBQUFrVixFQUFBTCxFQUFBLEdBQUE1YSxFQUFBNGEsRUFBQSxHQUFBQSxJQUFBLElBQUEzWSxLQUFBODNILEtBQUEsSUFBQW4vRyxFQUFBM1ksS0FBQTgzSCxLQUFBLElBQUFuL0csRUFBQTNZLEtBQUE4M0gsS0FBQSxJQUFBbi9HLEVBQUEzWSxLQUFBODNILEtBQUEsSUFBQW4vRyxFQUFBM1ksS0FBQTgzSCxLQUFBLElBQUE5K0csRUFBQWhaLEtBQUE4M0gsS0FBQSxJQUFBOStHLEVBQUFoWixLQUFBODNILEtBQUEsSUFBQTkrRyxFQUFBaFosS0FBQTgzSCxLQUFBLElBQUE5K0csRUFBQWhaLEtBQUE4M0gsS0FBQSxJQUFBLzVILEVBQUFpQyxLQUFBODNILEtBQUEsSUFBQS81SCxFQUFBaUMsS0FBQTgzSCxLQUFBLEtBQUEvNUgsRUFBQWlDLEtBQUE4M0gsS0FBQSxLQUFBLzVILEVBQUFpQyxNQUFtU2hDLEVBQUE0M0gsT0FBQXQySCxVQUFBNitHLE9BQUEsU0FBQXhsRyxFQUFBSyxFQUFBamIsRUFBQTRNLEdBQTZDLElBQUFzTixFQUFBalksS0FBQXl2SCxHQUFBenZILEtBQUF5dkgsR0FBQWxRLFdBQUE1bUcsS0FBc0NLLGFBQUFoYixFQUFBc2dILFFBQUF2Z0gsRUFBQWliLEVBQUFpbEIsRUFBQXR6QixFQUFBcU8sRUFBQWtsQixFQUFBbGxCLElBQUE0Z0IsR0FBQTVnQixhQUFBbFYsUUFBQS9GLEVBQUFpYixFQUFBLEdBQUFyTyxFQUFBcU8sRUFBQSxHQUFBQSxJQUFBLElBQXFGLElBQUFWLEVBQUExVCxLQUFBa21CLEtBQUE5UixJQUFBamIsSUFBQTRNLEtBQTZCcU8sR0FBQSxFQUFBVixFQUFBdmEsR0FBQSxFQUFBdWEsRUFBQTNOLEdBQUEsRUFBQTJOLEVBQXFCLElBQUF5aUMsRUFBQS82QyxLQUFBODNILEtBQUEsR0FBQXA2SCxFQUFBc0MsS0FBQTgzSCxLQUFBLEdBQUExMUgsRUFBQXBDLEtBQUE4M0gsS0FBQSxHQUFBcjJHLEVBQUF6aEIsS0FBQTgzSCxLQUFBLEdBQUFuNkgsRUFBQXFDLEtBQUE4M0gsS0FBQSxHQUFBaDZILEVBQUFrQyxLQUFBODNILEtBQUEsR0FBQTM0SCxFQUFBYSxLQUFBODNILEtBQUEsR0FBQTM1SCxFQUFBNkIsS0FBQTgzSCxLQUFBLEdBQUF0NEgsRUFBQVEsS0FBQTgzSCxLQUFBLEdBQUFyakgsRUFBQXpVLEtBQUE4M0gsS0FBQSxHQUFBdDVILEVBQUF3QixLQUFBODNILEtBQUEsSUFBQXI0SCxFQUFBTyxLQUFBODNILEtBQUEsSUFBQWw1SCxFQUFBZ0csS0FBQUUsSUFBQW1ULEdBQUFxa0MsRUFBQTEzQyxLQUFBcWQsSUFBQWhLLEdBQUF1OUIsRUFBQSxFQUFBOEcsRUFBQUcsRUFBQXpqQyxJQUFBdzhCLEVBQUE4RyxFQUFBMWlCLEVBQUE3N0IsRUFBQWliLEVBQUF3OEIsRUFBQTdxQyxFQUFBL0wsRUFBQXEvQixFQUFBdHpCLEVBQUFxTyxFQUFBdzhCLEVBQUF6M0MsRUFBQWEsRUFBQXMvQixFQUFBbGxCLEVBQUFqYixFQUFBeTNDLEVBQUE3cUMsRUFBQS9MLEVBQUFnK0MsRUFBQTcrQyxJQUFBeTNDLEVBQUE4RyxFQUFBcHNDLEVBQUF2RixFQUFBNU0sRUFBQXkzQyxFQUFBeDhCLEVBQUFwYSxFQUFBcStDLEVBQUFqa0MsRUFBQXJPLEVBQUE2cUMsRUFBQXozQyxFQUFBYSxFQUFBcytDLEVBQUFuL0MsRUFBQTRNLEVBQUE2cUMsRUFBQXg4QixFQUFBcGEsRUFBQXUrQyxFQUFBeHlDLElBQUE2cUMsRUFBQThHLEVBQWtVLE9BQUF0OEMsS0FBQTgzSCxLQUFBLEdBQUEvOEUsRUFBQTBCLEVBQUE5K0MsRUFBQWk4QixFQUFBcDZCLEVBQUF5K0IsRUFBQWorQixLQUFBODNILEtBQUEsR0FBQXA2SCxFQUFBKytDLEVBQUEzK0MsRUFBQTg3QixFQUFBbmxCLEVBQUF3cEIsRUFBQWorQixLQUFBODNILEtBQUEsR0FBQTExSCxFQUFBcTZDLEVBQUF0OUMsRUFBQXk2QixFQUFBcDdCLEVBQUF5L0IsRUFBQWorQixLQUFBODNILEtBQUEsR0FBQXIyRyxFQUFBZzdCLEVBQUF0K0MsRUFBQXk3QixFQUFBbjZCLEVBQUF3K0IsRUFBQWorQixLQUFBODNILEtBQUEsR0FBQS84RSxFQUFBN2MsRUFBQXZnQyxFQUFBaS9DLEVBQUFwOUMsRUFBQTBRLEVBQUFsUSxLQUFBODNILEtBQUEsR0FBQXA2SCxFQUFBd2dDLEVBQUFwZ0MsRUFBQTgrQyxFQUFBbm9DLEVBQUF2RSxFQUFBbFEsS0FBQTgzSCxLQUFBLEdBQUExMUgsRUFBQTg3QixFQUFBLytCLEVBQUF5OUMsRUFBQXArQyxFQUFBMFIsRUFBQWxRLEtBQUE4M0gsS0FBQSxHQUFBcjJHLEVBQUF5YyxFQUFBLy9CLEVBQUF5K0MsRUFBQW45QyxFQUFBeVEsRUFBQWxRLEtBQUE4M0gsS0FBQSxHQUFBLzhFLEVBQUFrQyxFQUFBdC9DLEVBQUF1L0MsRUFBQTE5QyxFQUFBMjlDLEVBQUFuOUMsS0FBQTgzSCxLQUFBLEdBQUFwNkgsRUFBQXUvQyxFQUFBbi9DLEVBQUFvL0MsRUFBQXpvQyxFQUFBMG9DLEVBQUFuOUMsS0FBQTgzSCxLQUFBLElBQUExMUgsRUFBQTY2QyxFQUFBOTlDLEVBQUErOUMsRUFBQTErQyxFQUFBMitDLEVBQUFuOUMsS0FBQTgzSCxLQUFBLElBQUFyMkcsRUFBQXc3QixFQUFBOStDLEVBQUErK0MsRUFBQXo5QyxFQUFBMDlDLEVBQUFuOUMsTUFBMFRoQyxFQUFBNDNILE9BQUF0MkgsVUFBQXM5RyxVQUFBLFNBQUFqa0csR0FBMEMsSUFBQUssRUFBQUwsRUFBQSxHQUFBNWEsRUFBQTRhLEVBQUEsR0FBQTNhLEVBQUEyYSxFQUFBLE1BQTRCM1ksS0FBQTgzSCxLQUFBLEtBQUE5M0gsS0FBQTgzSCxLQUFBLEdBQUE5K0csRUFBQWhaLEtBQUE4M0gsS0FBQSxHQUFBLzVILEVBQUFpQyxLQUFBODNILEtBQUEsR0FBQTk1SCxFQUFBZ0MsS0FBQTgzSCxLQUFBLEtBQUE5M0gsS0FBQTgzSCxLQUFBLEdBQUE5K0csRUFBQWhaLEtBQUE4M0gsS0FBQSxHQUFBLzVILEVBQUFpQyxLQUFBODNILEtBQUEsR0FBQTk1SCxFQUFBZ0MsS0FBQTgzSCxLQUFBLEtBQUE5M0gsS0FBQTgzSCxLQUFBLEdBQUE5K0csRUFBQWhaLEtBQUE4M0gsS0FBQSxHQUFBLzVILEVBQUFpQyxLQUFBODNILEtBQUEsSUFBQTk1SCxFQUFBZ0MsS0FBQTgzSCxLQUFBLEtBQUE5M0gsS0FBQTgzSCxLQUFBLEdBQUE5K0csRUFBQWhaLEtBQUE4M0gsS0FBQSxHQUFBLzVILEVBQUFpQyxLQUFBODNILEtBQUEsSUFBQTk1SCxHQUFrUEEsRUFBQTQzSCxPQUFBdDJILFVBQUFvaUgsUUFBQSxTQUFBL29HLEdBQXdDM1ksS0FBQW0rRyxPQUFBeGxHLEVBQUEsUUFBcUIzYSxFQUFBNDNILE9BQUF0MkgsVUFBQXNpSCxRQUFBLFNBQUFqcEcsR0FBd0MzWSxLQUFBbStHLE9BQUF4bEcsRUFBQSxRQUFxQjNhLEVBQUE0M0gsT0FBQXQySCxVQUFBdWlILFFBQUEsU0FBQWxwRyxHQUF3QzNZLEtBQUFtK0csT0FBQXhsRyxFQUFBLFFBQXFCM2EsRUFBQTQzSCxPQUFBdDJILFVBQUFrN0gsWUFBQSxTQUFBN2hILEVBQUFLLEVBQUFqYixFQUFBQyxHQUFrRCxJQUFBMk0sRUFBQSxFQUFBL0YsS0FBQWdnRyxJQUFBanNGLEVBQUEsR0FBQVYsRUFBQSxHQUFBbGEsRUFBQUMsR0FBZ0MsT0FBQWdDLEtBQUE4M0gsS0FBQSxHQUFBbnRILEVBQUFxTyxFQUFBaFosS0FBQTgzSCxLQUFBLEtBQUE5M0gsS0FBQTgzSCxLQUFBLEtBQUE5M0gsS0FBQTgzSCxLQUFBLEtBQUE5M0gsS0FBQTgzSCxLQUFBLEtBQUE5M0gsS0FBQTgzSCxLQUFBLEdBQUFudEgsRUFBQTNLLEtBQUE4M0gsS0FBQSxLQUFBOTNILEtBQUE4M0gsS0FBQSxLQUFBOTNILEtBQUE4M0gsS0FBQSxLQUFBOTNILEtBQUE4M0gsS0FBQSxLQUFBOTNILEtBQUE4M0gsS0FBQSxLQUFBOTVILEVBQUFELEdBQUFrYSxFQUFBalksS0FBQTgzSCxLQUFBLE9BQUE5M0gsS0FBQTgzSCxLQUFBLE1BQUE5M0gsS0FBQTgzSCxLQUFBLE1BQUE5M0gsS0FBQTgzSCxLQUFBLE1BQUE5NUgsRUFBQUQsRUFBQWthLEVBQUFqWSxLQUFBODNILEtBQUEsTUFBQTkzSCxNQUFpUmhDLEVBQUE0M0gsT0FBQXQySCxVQUFBbTdILE1BQUEsU0FBQTloSCxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixHQUFnRCxJQUFBSyxFQUFBLEdBQUFLLEVBQUFLLEdBQUEraEMsRUFBQSxHQUFBaDlDLEVBQUFDLEdBQUFOLEVBQUEsR0FBQWlOLEVBQUFzTixHQUFrQyxPQUFBalksS0FBQTgzSCxLQUFBLE1BQUF4L0csRUFBQXRZLEtBQUE4M0gsS0FBQSxLQUFBOTNILEtBQUE4M0gsS0FBQSxLQUFBOTNILEtBQUE4M0gsS0FBQSxLQUFBOTNILEtBQUE4M0gsS0FBQSxLQUFBOTNILEtBQUE4M0gsS0FBQSxNQUFBLzhFLEVBQUEvNkMsS0FBQTgzSCxLQUFBLEtBQUE5M0gsS0FBQTgzSCxLQUFBLEtBQUE5M0gsS0FBQTgzSCxLQUFBLEtBQUE5M0gsS0FBQTgzSCxLQUFBLEtBQUE5M0gsS0FBQTgzSCxLQUFBLE1BQUFwNkgsRUFBQXNDLEtBQUE4M0gsS0FBQSxNQUFBOTNILEtBQUE4M0gsS0FBQSxLQUFBbi9HLEVBQUFLLEdBQUFWLEVBQUF0WSxLQUFBODNILEtBQUEsS0FBQTk1SCxFQUFBRCxHQUFBZzlDLEVBQUEvNkMsS0FBQTgzSCxLQUFBLEtBQUE3L0csRUFBQXROLEdBQUFqTixFQUFBc0MsS0FBQTgzSCxLQUFBLE1BQUE5M0gsTUFBNFJnWixFQUFBeGIsUUFBQVEsRUFBQTQzSCxTQUFzQmg4QixlQUFBLEtBQWtCN2tCLElBQUEsU0FBQXA4RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBYSxJQUFBQyxFQUFBMmEsRUFBQSxnQkFBQWhPLEVBQUFnTyxFQUFBLHFCQUFpRDNhLEVBQUE4NUcsV0FBQXg0RyxVQUFBdStHLFdBQUEsU0FBQWxsRyxHQUE4QyxPQUFBM1ksS0FBQTgxSCxjQUFBdUgsZUFBQSxJQUFBMWtILElBQUFoTyxFQUFBeTlGLGdCQUFBLElBQUFwb0csS0FBQTgxSCxjQUFBMUIsVUFBQXAwSCxLQUFBODFILGNBQUExQixZQUFBcDBILEtBQUE4MUgsY0FBQThHLFNBQUE1OEgsS0FBQTgxSCxjQUFBNEcsZ0JBQUExOEgsS0FBQTgxSCxjQUFBd0gsZ0JBQUF0OUgsS0FBQTgxSCxjQUFBNkcsZUFBQTM4SCxLQUFBODFILGNBQUF5SCxZQUFBdjlILEtBQUE4MUgsY0FBQTBILGFBQUF4OUgsS0FBQTY1SCxHQUFBMXNILGVBQUFuTixLQUFBODFILGNBQUEySCxZQUFBejlILEtBQUE2NUgsR0FBQTFzSCxlQUFBbk4sS0FBQTgxSCxjQUFBNEgsU0FBQTE5SCxLQUFBNjVILEdBQUExc0gsZUFBQW5OLEtBQUE4MUgsY0FBQTZILGlCQUFBMzlILEtBQUE2NUgsR0FBQTFzSCxlQUFBbk4sS0FBQTgxSCxjQUFBOEgsaUJBQUE1OUgsS0FBQTY1SCxHQUFBMXNILGVBQUFuTixLQUFBODFILGNBQUErSCxrQkFBQTc5SCxLQUFBNjVILEdBQUExc0gsZUFBQW5OLEtBQUE4MUgsY0FBQUMsaUJBQUEvMUgsS0FBQTgxSCxjQUFBTSxvQkFBQXAySCxLQUFBODFILGNBQUFXLGtCQUFBejJILEtBQUE4MUgsY0FBQTFCLFNBQUE5eUgsT0FBQSxFQUFBdEIsS0FBQTgxSCxjQUFBOEcsTUFBQXQ3SCxPQUFBLEVBQUF0QixLQUFBODFILGNBQUE0RyxhQUFBcDdILE9BQUEsRUFBQXRCLEtBQUE4MUgsY0FBQTZHLFlBQUFyN0gsT0FBQSxFQUFBdEIsS0FBQTgxSCxjQUFBd0gsYUFBQWg4SCxPQUFBLEVBQUF0QixLQUFBODFILGNBQUF5SCxTQUFBajhILE9BQUEsR0FBQXRCLEtBQUE4OUgsb0JBQUEsRUFBQTk5SCxNQUErK0JoQyxFQUFBODVHLFdBQUF4NEcsVUFBQXcrRyxPQUFBLFNBQUFubEcsRUFBQUssR0FBNkMsSUFBQWpiLEVBQUE0TSxFQUFBc04sRUFBVWxhLEVBQUE0TSxFQUFBc04sRUFBQSxNQUFBM1UsVUFBQWhDLE9BQUF2RCxFQUFBdUYsVUFBQSxPQUFBQSxVQUFBaEMsUUFBQXFKLEVBQUFySCxVQUFBLEdBQUEyVSxFQUFBM1UsVUFBQSxRQUFBQSxVQUFBaEMsU0FBQXZELEVBQUF1RixVQUFBLEdBQUFxSCxFQUFBckgsVUFBQSxHQUFBMlUsRUFBQTNVLFVBQUEsSUFBc0ssSUFBQWdWLEVBQUEsSUFBQXRhLEVBQUFzZ0gsT0FBQTNsRyxFQUFBSyxFQUFBamIsR0FBMEJpQyxLQUFBODFILGNBQUExQixTQUFBeHhILEtBQUEwVixHQUFvQyxJQUFBeWlDLEVBQUEvNkMsS0FBQWs0SCxlQUFBLFlBQXNDLE9BQUFsNEgsS0FBQTgxSCxjQUFBd0gsYUFBQTE2SCxLQUFBbTRDLEVBQUEsR0FBQUEsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsSUFBQS82QyxLQUFBODFILGNBQUF5SCxTQUFBMzZILEtBQUErSCxFQUFBc04sR0FBQWpZLEtBQUE4MUgsY0FBQUMsY0FBQSxHQUFBcDlHLEVBQUEzWSxLQUFBODFILGNBQUFDLGNBQUEsR0FBQS84RyxFQUFBaFosS0FBQTgxSCxjQUFBQyxjQUFBLEdBQUFoNEgsRUFBQWlDLEtBQUE4MUgsY0FBQU0saUJBQUEsR0FBQXo5RyxFQUFBM1ksS0FBQTgxSCxjQUFBTSxpQkFBQSxHQUFBcDlHLEVBQUFoWixLQUFBODFILGNBQUFNLGlCQUFBLEdBQUFyNEgsRUFBQWlDLE1BQXlWaEMsRUFBQTg1RyxXQUFBeDRHLFVBQUEyOUcsU0FBQSxTQUFBdGtHLEVBQUFLLEVBQUFqYixFQUFBa2EsRUFBQUssRUFBQXlpQyxHQUF1RCxHQUFBLzZDLEtBQUE4MUgsY0FBQXVILFlBQUExeUgsRUFBQXU5RixPQUFBbG9HLEtBQUFxMUgsa0JBQUFyMUgsS0FBQXMxSCxlQUFBQyxhQUFBdjFILEtBQUF3MUgsWUFBQXgxSCxLQUFBODFILGNBQUExQixTQUFBcDBILEtBQUE4MUgsY0FBQStILG1CQUFBNzlILEtBQUFzMUgsZUFBQUksb0JBQXlOLEdBQUExMUgsS0FBQTgxSCxjQUFBMUIsU0FBQTl5SCxPQUFBLEdBQThDLEdBQUF0QixLQUFBKzlILDBCQUFBLzlILEtBQUFvNUcsV0FBQXA1RyxLQUFBdTVILFdBQUE1dUgsRUFBQXVoRyxRQUFBLENBQTZFLFFBQUF4dUcsRUFBQSxFQUFZQSxFQUFBc0MsS0FBQTgxSCxjQUFBMUIsU0FBQTl5SCxPQUFBLEVBQXVDNUQsSUFBQXNDLEtBQUE4MUgsY0FBQThHLE1BQUFoNkgsTUFBQWxGLElBQUEsSUFBMkNpYixJQUFBaE8sRUFBQWcrRixPQUFBM29HLEtBQUE4MUgsY0FBQThHLE1BQUFoNkgsTUFBQTVDLEtBQUE4MUgsY0FBQTFCLFNBQUE5eUgsT0FBQSxNQUFBdEQsRUFBQWkySCxTQUFBMzBILFVBQUFtMUgsaUJBQUE1MkgsS0FBQW1DLEtBQUE4MUgsZUFBQTkxSCxLQUFBZytILDJCQUFvTCxHQUFBaCtILEtBQUFxNUcsUUFBQSxDQUFpQixHQUFBcjVHLEtBQUFtMkgsVUFBQW4ySCxLQUFBdzJILGFBQUF4MkgsS0FBQTAySCxRQUFBLENBQWtELElBQUF0MEgsR0FBQSxJQUFBbVEsYUFBQXZTLEtBQUFpK0gsV0FBQWorSCxLQUFBODFILGNBQUExQixZQUFBM3lHLEVBQUF6aEIsS0FBQWsrSCxhQUFBOTdILEdBQThGcEMsS0FBQTgxSCxjQUFBMUIsWUFBK0IsUUFBQXoySCxFQUFBLEVBQUFHLEVBQUEyakIsRUFBQW5nQixPQUF1QjNELEVBQUFHLEVBQUlILEdBQUEsRUFBQXFDLEtBQUE4OUcsT0FBQXI4RixFQUFBOWpCLEdBQUE4akIsRUFBQTlqQixFQUFBLEdBQUE4akIsRUFBQTlqQixFQUFBLElBQXFDcUMsS0FBQW0rSCx1QkFBQXhsSCxFQUFBSyxFQUFBamIsRUFBQWthLEVBQUFLLEVBQUF5aUMsSUFBMEMsT0FBQS82QyxLQUFBODFILGNBQUExQixTQUFBOXlILE9BQUEsRUFBQXRCLEtBQUE4MUgsY0FBQXdILGFBQUFoOEgsT0FBQSxFQUFBdEIsS0FBQTgxSCxjQUFBeUgsU0FBQWo4SCxPQUFBLEVBQUF0QixLQUFBODlILG9CQUFBLEVBQUE5OUgsS0FBQW0ySCxVQUFBLEVBQUFuMkgsS0FBQXcySCxhQUFBLEVBQUF4MkgsS0FBQTAySCxTQUFBLEVBQUExMkgsS0FBQTgxSCxjQUFBQyxjQUFBejBILE9BQUEsRUFBQXRCLEtBQUE4MUgsY0FBQU0saUJBQUE5MEgsT0FBQSxFQUFBdEIsS0FBQTgxSCxjQUFBVyxhQUFBbjFILE9BQUEsRUFBQXRCLE1BQStVaEMsRUFBQTg1RyxXQUFBeDRHLFVBQUE2K0gsdUJBQUEsU0FBQXhsSCxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQWlhLEVBQUFLLEdBQXFFLElBQUF5aUMsRUFBQS82QyxLQUFBNjVILEdBQWMsR0FBQTc1SCxLQUFBbytILGNBQUE3SSxhQUFBdjFILEtBQUFvK0gsY0FBQWpRLFdBQUFrUSxZQUFBcitILEtBQUFzK0gsWUFBQXQrSCxLQUFBODFILGNBQUEwSCxhQUFBemlGLEVBQUF3akYsYUFBQXYrSCxLQUFBaStILFdBQUFqK0gsS0FBQTgxSCxjQUFBMUIsVUFBQTdoSCxhQUFBd29DLEVBQUF5akYsY0FBQXgrSCxLQUFBbytILGNBQUFLLGFBQUF6K0gsS0FBQW8rSCxjQUFBalEsV0FBQWtRLFVBQUFoNEUsU0FBQSxFQUFBdEwsRUFBQTJqRixPQUFBLFFBQUExK0gsS0FBQXU1SCxXQUFBNXVILEVBQUFzaEcsTUFBQWpzRyxLQUFBbytILGNBQUFqUSxXQUFBd1EsZUFBQTMrSCxLQUFBcytILFlBQUF0K0gsS0FBQTgxSCxjQUFBMkgsWUFBQTFpRixFQUFBd2pGLGFBQUF2K0gsS0FBQTgxSCxjQUFBd0gsYUFBQS9xSCxhQUFBd29DLEVBQUF5akYsY0FBQXgrSCxLQUFBbytILGNBQUFLLGFBQUF6K0gsS0FBQW8rSCxjQUFBalEsV0FBQXdRLGFBQUF0NEUsU0FBQSxFQUFBdEwsRUFBQTJqRixPQUFBLFFBQUExK0gsS0FBQXU1SCxXQUFBNXVILEVBQUF1aEcsU0FBQWxzRyxLQUFBbytILGNBQUFqUSxXQUFBeVEsWUFBQTUrSCxLQUFBcytILFlBQUF0K0gsS0FBQTgxSCxjQUFBNEgsU0FBQTNpRixFQUFBd2pGLGFBQUF2K0gsS0FBQTgxSCxjQUFBeUgsU0FBQWhySCxhQUFBd29DLEVBQUF5akYsY0FBQXgrSCxLQUFBbytILGNBQUFLLGFBQUF6K0gsS0FBQW8rSCxjQUFBalEsV0FBQXlRLFVBQUF2NEUsU0FBQSxFQUFBdEwsRUFBQTJqRixPQUFBLFFBQUExK0gsS0FBQXU1SCxXQUFBNXVILEVBQUFzaEcsTUFBQWpzRyxLQUFBdTVILFdBQUE1dUgsRUFBQXVoRyxRQUFBLE9BQUFsc0csS0FBQTgxSCxjQUFBdUgsV0FBdzlCLEtBQUExeUgsRUFBQXk5RixXQUFBLEtBQUF6OUYsRUFBQXc5RixNQUFBLEtBQUF4OUYsRUFBQTI5RixVQUFBdG9HLEtBQUE4MUgsY0FBQXVILFVBQUFyOUgsS0FBQW0ySCxVQUFBbjJILEtBQUF3MkgsYUFBQXgySCxLQUFBMDJILFFBQUEvckgsRUFBQTI5RixVQUFBMzlGLEVBQUE0OUYsa0JBQXNKLE9BQUF2b0csS0FBQTgxSCxjQUFBdUgsV0FBMEMsS0FBQTF5SCxFQUFBeTlGLFdBQUEsS0FBQXo5RixFQUFBdzlGLE1BQUFub0csS0FBQTgxSCxjQUFBdUgsVUFBQTF5SCxFQUFBMDlGLFVBQXdFLEdBQUFyb0csS0FBQTgxSCxjQUFBdUgsWUFBQTF5SCxFQUFBODlGLE9BQUF6b0csS0FBQTgxSCxjQUFBdUgsWUFBQTF5SCxFQUFBKzlGLFdBQUEsVUFBQXpvRyxNQUFBLFVBQUFELEtBQUE4MUgsY0FBQXVILFVBQUEsdUNBQXFMcjlILEtBQUE0NUgsaUJBQUE1NUgsS0FBQWs0SCxjQUFBbjlFLEVBQUFnL0UsT0FBQWgvRSxFQUFBb3ZELE9BQUFwdkQsRUFBQThqRixXQUFBNytILEtBQUE4MUgsY0FBQXVILFVBQUEsRUFBQXI5SCxLQUFBODFILGNBQUExQixTQUFBOXlILFFBQUF0QixLQUFBazJHLE9BQUFsRyxjQUFBLEVBQUFod0csS0FBQW8rSCxjQUFBMUksZ0JBQXlNMTNILEVBQUE4NUcsV0FBQXg0RyxVQUFBMCtILHlCQUFBLFdBQTRELElBQUFybEgsRUFBQTNZLEtBQUE2NUgsR0FBYzc1SCxLQUFBOCtILGdCQUFBdkosYUFBQXYxSCxLQUFBOCtILGdCQUFBM1EsV0FBQWtRLFlBQUFyK0gsS0FBQXMrSCxZQUFBdCtILEtBQUE4MUgsY0FBQTZILGlCQUFBaGxILEVBQUE0bEgsYUFBQXYrSCxLQUFBKytILFNBQUEvK0gsS0FBQTgxSCxjQUFBNEcsY0FBQW5xSCxhQUFBb0csRUFBQXFtSCxhQUFBaC9ILEtBQUE4K0gsZ0JBQUFMLGFBQUF6K0gsS0FBQTgrSCxnQkFBQTNRLFdBQUFrUSxVQUFBaDRFLFNBQUEsRUFBQTF0QyxFQUFBK2xILE9BQUEsUUFBQTErSCxLQUFBOCtILGdCQUFBM1EsV0FBQThRLGFBQUFqL0gsS0FBQXMrSCxZQUFBdCtILEtBQUE4MUgsY0FBQThILGlCQUFBamxILEVBQUE0bEgsYUFBQXYrSCxLQUFBKytILFNBQUEvK0gsS0FBQTgxSCxjQUFBNkcsYUFBQXBxSCxhQUFBb0csRUFBQXFtSCxhQUFBaC9ILEtBQUE4K0gsZ0JBQUFMLGFBQUF6K0gsS0FBQTgrSCxnQkFBQTNRLFdBQUE4USxXQUFBNTRFLFNBQUEsRUFBQTF0QyxFQUFBK2xILE9BQUEsUUFBQTErSCxLQUFBNDVILGlCQUFBNTVILEtBQUE0M0gsZ0JBQUFqL0csRUFBQWttSCxXQUFBbG1ILEVBQUEydkYsVUFBQSxFQUFBdG9HLEtBQUE4MUgsY0FBQTRHLGFBQUFwN0gsUUFBQXRCLEtBQUE4K0gsZ0JBQUFwSixlQUFBMTFILEtBQUFrMkcsT0FBQWxHLGNBQUEsR0FBdXhCaDNGLEVBQUF4YixRQUFBUSxFQUFBODVHLGFBQTBCcGMsb0JBQUEsR0FBQTlCLGVBQUEsS0FBeUM1a0IsSUFBQSxTQUFBcjhELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUFBaE8sRUFBQSxFQUE0QjNNLEVBQUE4NUcsV0FBQXg0RyxVQUFBNC9ILG9CQUFBLFNBQUF2bUgsR0FBdUQsR0FBQTNZLEtBQUFtL0gsYUFBQXhtSCxLQUFBaE8sRUFBQSxLQUFpQyxJQUFBcU8sRUFBQTVhLE9BQUFxRSxLQUFBekMsS0FBQW8vSCxPQUFBLFVBQWlDcC9ILEtBQUFvL0gsTUFBQXBtSCxHQUFBck8sSUFBeUIzSyxLQUFBby9ILE1BQUF6bUgsT0FBaUIzYSxFQUFBODVHLFdBQUF4NEcsVUFBQTYvSCxhQUFBLFNBQUF4bUgsR0FBaUQsSUFBQUssRUFBQWhaLEtBQUFvL0gsTUFBQXptSCxHQUFvQixHQUFBSyxFQUFBLFFBQU1oWixLQUFBby9ILE1BQUF6bUgsR0FBQWhPLElBQXlCLElBQUE1TSxFQUFBaUMsS0FBQTY1SCxHQUFjN2dILEVBQUF3a0gsY0FBQXovSCxFQUFBc2hJLGFBQUFybUgsRUFBQXdrSCxjQUFBeGtILEVBQUFzbUgsY0FBQXZoSSxFQUFBc2hJLGFBQUFybUgsRUFBQXNtSCxjQUFBdG1ILEVBQUE0a0gsa0JBQUE3L0gsRUFBQXNoSSxhQUFBcm1ILEVBQUE0a0gsa0JBQUE1a0gsRUFBQTBrSCxVQUFBMy9ILEVBQUFzaEksYUFBQXJtSCxFQUFBMGtILFVBQUExa0gsRUFBQXVtSCxhQUFBeGhJLEVBQUFzaEksYUFBQXJtSCxFQUFBdW1ILGFBQUF2bUgsRUFBQTJrSCxrQkFBQTUvSCxFQUFBc2hJLGFBQUFybUgsRUFBQTJrSCxvQkFBaVMzL0gsRUFBQTg1RyxXQUFBeDRHLFVBQUF1dEMsY0FBQSxTQUFBbDBCLEVBQUFLLEdBQW9ELElBQUFqYixFQUFBaUMsS0FBQTY1SCxHQUFjNzVILEtBQUFrL0gsb0JBQUF2bUgsR0FBNEIsSUFBQTNhLEVBQUFnQyxLQUFBby9ILE1BQUF6bUgsR0FBb0IsT0FBQTNhLEVBQUF3aEksY0FBQSxFQUFBeG1ILEVBQUE4N0csTUFBQXh6SCxPQUFBdEQsRUFBQXloSSxnQkFBQXptSCxFQUFBMGpILGFBQUFwN0gsT0FBQXRCLEtBQUEwL0gsa0JBQUExL0gsS0FBQTgrSCxnQkFBQTNRLFdBQUFrUSxZQUFBcmdJLEVBQUEyL0gsaUJBQUE1L0gsRUFBQW9QLGVBQUFuTixLQUFBcytILFlBQUF0Z0ksRUFBQTIvSCxpQkFBQTUvSCxFQUFBd2dJLGFBQUF2K0gsS0FBQSsrSCxTQUFBL2xILEVBQUEwakgsY0FBQW5xSCxhQUFBeFUsRUFBQWloSSxhQUFBaC9ILEtBQUE4K0gsZ0JBQUFMLGFBQUF6K0gsS0FBQTgrSCxnQkFBQTNRLFdBQUFrUSxVQUFBaDRFLFNBQUEsRUFBQXRvRCxFQUFBMmdJLE9BQUEsUUFBQTErSCxLQUFBOCtILGdCQUFBM1EsV0FBQThRLGFBQUFqaEksRUFBQTQvSCxpQkFBQTcvSCxFQUFBb1AsZUFBQW5OLEtBQUFzK0gsWUFBQXRnSSxFQUFBNC9ILGlCQUFBNy9ILEVBQUF3Z0ksYUFBQXYrSCxLQUFBKytILFNBQUEvbEgsRUFBQTJqSCxhQUFBcHFILGFBQUF4VSxFQUFBaWhJLGFBQUFoL0gsS0FBQTgrSCxnQkFBQUwsYUFBQXorSCxLQUFBOCtILGdCQUFBM1EsV0FBQThRLFdBQUE1NEUsU0FBQSxFQUFBdG9ELEVBQUEyZ0ksT0FBQSxRQUFBMStILEtBQUFvK0gsY0FBQWpRLFdBQUFrUSxZQUFBcmdJLEVBQUF3L0gsYUFBQXovSCxFQUFBb1AsZUFBQW5OLEtBQUFzK0gsWUFBQXRnSSxFQUFBdy9ILGFBQUF6L0gsRUFBQXdnSSxhQUFBditILEtBQUFpK0gsV0FBQWpsSCxFQUFBbzdHLFVBQUE3aEgsYUFBQXhVLEVBQUFpaEksYUFBQWgvSCxLQUFBbytILGNBQUFLLGFBQUF6K0gsS0FBQW8rSCxjQUFBalEsV0FBQWtRLFVBQUFoNEUsU0FBQSxFQUFBdG9ELEVBQUEyZ0ksT0FBQSxRQUFBMWdJLEVBQUF1aEksWUFBQXhoSSxFQUFBb1AsZUFBQW5OLEtBQUFzK0gsWUFBQXRnSSxFQUFBdWhJLFlBQUF4aEksRUFBQTRoSSxxQkFBQTMvSCxLQUFBKytILFNBQUEvbEgsRUFBQTg3RyxPQUFBN3BFLFlBQUFsdEQsRUFBQWloSSxhQUFBaC9ILEtBQUFvK0gsY0FBQWpRLFdBQUF5UixVQUFBNWhJLEVBQUFzaEksYUFBQXZoSSxFQUFBb1AsZUFBQW5OLEtBQUFzK0gsWUFBQXRnSSxFQUFBc2hJLGFBQUF2aEksRUFBQXdnSSxhQUFBditILEtBQUFpK0gsV0FBQWpsSCxFQUFBaThHLGVBQUExaUgsYUFBQXhVLEVBQUFpaEksYUFBQWgvSCxLQUFBbytILGNBQUFLLGFBQUF6K0gsS0FBQW8rSCxjQUFBalEsV0FBQXlSLFFBQUF2NUUsU0FBQSxFQUFBdG9ELEVBQUEyZ0ksT0FBQSxRQUFBMStILEtBQUFvK0gsY0FBQWpRLFdBQUF5USxZQUFBNWdJLEVBQUEwL0gsU0FBQTMvSCxFQUFBb1AsZUFBQW5OLEtBQUFzK0gsWUFBQXRnSSxFQUFBMC9ILFNBQUEzL0gsRUFBQXdnSSxhQUFBditILEtBQUErK0gsU0FBQS9sSCxFQUFBcTdHLEtBQUE5aEgsYUFBQXhVLEVBQUFpaEksYUFBQWgvSCxLQUFBbytILGNBQUFLLGFBQUF6K0gsS0FBQW8rSCxjQUFBalEsV0FBQXlRLFVBQUF2NEUsU0FBQSxFQUFBdG9ELEVBQUEyZ0ksT0FBQSxRQUFBMWdJLEdBQTRtREEsRUFBQTg1RyxXQUFBeDRHLFVBQUF1MkgsWUFBQSxTQUFBbDlHLEdBQWdELElBQUFLLEVBQUFoWixLQUFBNjVILEdBQWM3NUgsS0FBQTAvSCxrQkFBdUIsSUFBQTNoSSxFQUFBaUMsS0FBQW8vSCxNQUFBem1ILEdBQW9CLE9BQUEzWSxLQUFBbzVHLFdBQUFyN0csRUFBQTBoSSxnQkFBQSxJQUFBei9ILEtBQUE4K0gsZ0JBQUF2SixhQUFBeDNILEVBQUE0L0gsbUJBQUEzOUgsS0FBQXMrSCxZQUFBdmdJLEVBQUE0L0gsaUJBQUEza0gsRUFBQXVsSCxjQUFBditILEtBQUE4K0gsZ0JBQUFMLGFBQUF6K0gsS0FBQTgrSCxnQkFBQTNRLFdBQUFrUSxVQUFBaDRFLFNBQUEsRUFBQXJ0QyxFQUFBMGxILE9BQUEsUUFBQTNnSSxFQUFBNi9ILG1CQUFBNTlILEtBQUFzK0gsWUFBQXZnSSxFQUFBNi9ILGlCQUFBNWtILEVBQUF1bEgsY0FBQXYrSCxLQUFBOCtILGdCQUFBTCxhQUFBeitILEtBQUE4K0gsZ0JBQUEzUSxXQUFBOFEsV0FBQTU0RSxTQUFBLEVBQUFydEMsRUFBQTBsSCxPQUFBLFFBQUExK0gsS0FBQTQ1SCxpQkFBQTU1SCxLQUFBNDNILGdCQUFBNTNILEtBQUE2L0gsWUFBQTdtSCxFQUFBc3ZGLFVBQUEzdkYsR0FBQTNZLEtBQUE4K0gsZ0JBQUFwSixpQkFBQSxJQUFBMTFILEtBQUFxNUcsVUFBQXI1RyxLQUFBbytILGNBQUE3SSxhQUFBeDNILEVBQUF5L0gsZUFBQXg5SCxLQUFBcytILFlBQUF2Z0ksRUFBQXkvSCxhQUFBeGtILEVBQUF1bEgsY0FBQXYrSCxLQUFBbytILGNBQUFLLGFBQUF6K0gsS0FBQW8rSCxjQUFBalEsV0FBQWtRLFVBQUFoNEUsU0FBQSxFQUFBcnRDLEVBQUEwbEgsT0FBQSxRQUFBM2dJLEVBQUF3aEksYUFBQXYvSCxLQUFBcytILFlBQUF2Z0ksRUFBQXdoSSxZQUFBdm1ILEVBQUEybUgsc0JBQUE1aEksRUFBQXVoSSxlQUFBdC9ILEtBQUFzK0gsWUFBQXZnSSxFQUFBdWhJLGFBQUF0bUgsRUFBQXVsSCxjQUFBditILEtBQUFvK0gsY0FBQUssYUFBQXorSCxLQUFBbytILGNBQUFqUSxXQUFBeVIsUUFBQXY1RSxTQUFBLEVBQUFydEMsRUFBQTBsSCxPQUFBLFFBQUEzZ0ksRUFBQTIvSCxXQUFBMTlILEtBQUFzK0gsWUFBQXZnSSxFQUFBMi9ILFNBQUExa0gsRUFBQXVsSCxjQUFBditILEtBQUFvK0gsY0FBQUssYUFBQXorSCxLQUFBbytILGNBQUFqUSxXQUFBeVEsVUFBQXY0RSxTQUFBLEVBQUFydEMsRUFBQTBsSCxPQUFBLFFBQUExK0gsS0FBQTQ1SCxpQkFBQTU1SCxLQUFBazRILGNBQUFsNEgsS0FBQTgvSCxjQUFBOW1ILEVBQUFzdkYsVUFBQTN2RixHQUFBM1ksS0FBQW8rSCxjQUFBMUksZ0JBQUExMUgsTUFBb3ZDaEMsRUFBQTg1RyxXQUFBeDRHLFVBQUFvMUgsa0JBQUEsU0FBQS83RyxFQUFBSyxFQUFBamIsRUFBQUMsR0FBNEQsSUFBQTJNLEVBQUEzSyxLQUFBMjFILFVBQUEzMEYsT0FBNEIsSUFBSWhoQyxLQUFBMjFILFVBQUEzYSxNQUFBaGlHLEVBQUFqYixFQUFBQyxHQUFBZ0MsS0FBQTYxSCxZQUFBbDlHLEdBQWdELFFBQVEzWSxLQUFBMjFILFVBQUFockgsSUFBa0IzTSxFQUFBODVHLFdBQUF4NEcsVUFBQXVnSSxZQUFBLFNBQUFsbkgsRUFBQUssR0FBa0QsT0FBQWhaLEtBQUE2NUgsR0FBQWdGLFdBQUFsbUgsRUFBQSxFQUFBM1ksS0FBQW8vSCxNQUFBcG1ILEdBQUF5bUgsaUJBQUF6L0gsS0FBQWsyRyxPQUFBbEcsY0FBQSxFQUFBaHdHLE1BQThGaEMsRUFBQTg1RyxXQUFBeDRHLFVBQUF3Z0ksY0FBQSxTQUFBbm5ILEVBQUFLLEdBQW9EaFosS0FBQTY1SCxHQUFBa0csYUFBQXBuSCxFQUFBM1ksS0FBQW8vSCxNQUFBcG1ILEdBQUF3bUgsY0FBQXgvSCxLQUFBNjVILEdBQUFtRyxlQUFBLEdBQUFoZ0ksS0FBQWsyRyxPQUFBbEcsY0FBQSxHQUF5R2h5RyxFQUFBODVHLFdBQUF4NEcsVUFBQWsySCxZQUFBLFNBQUE3OEcsRUFBQUssR0FBa0QsSUFBQWpiLEVBQUFpQyxLQUFBNjVILEdBQWM3NUgsS0FBQXMrSCxZQUFBdGxILEVBQUFqYixFQUFBd2dJLGFBQUF2K0gsS0FBQWkrSCxXQUFBdGxILEdBQUFwRyxhQUFBeFUsRUFBQWloSSxhQUFBaC9ILEtBQUFzMUgsZUFBQW1KLGFBQUF6K0gsS0FBQXMxSCxlQUFBbkgsV0FBQWtRLFVBQUFoNEUsU0FBQSxFQUFBdG9ELEVBQUEyZ0ksT0FBQSxPQUFBM2dJLEVBQUE4Z0ksV0FBQTlnSSxFQUFBa2lJLE9BQUEsRUFBQXRuSCxFQUFBclgsU0FBd04wWCxFQUFBeGIsUUFBQVEsRUFBQTg1RyxhQUEwQmxlLGVBQUEsS0FBa0Iza0IsSUFBQSxTQUFBdDhELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUFBaE8sRUFBQWdPLEVBQUEscUJBQUFWLEVBQUFVLEVBQUEsV0FBZ0VBLEVBQUEsZUFBQUEsRUFBQSxlQUFBQSxFQUFBLHVCQUFBQSxFQUFBLGVBQTRFLElBQUFMLEdBQU80bkgsY0FBQSwrWUFBeVpDLGdCQUFBLDRUQUE0VUMsZ0JBQUEsaUdBQW1IQyxXQUFBLDRkQUFxZUMsV0FBQSwwSEFBdUlDLFVBQUEsOElBQXdKQyxVQUFBLG0xRUFBMjFFQyxpQkFBQSwyWEFBOFlDLFVBQUEsdTFCQUNwZzdCQyxVQUFBLHc1RUFBZzZFQyxTQUFBLHdyQkFBK3JCQyxTQUFBLHV4TUFBa3lNQyxTQUFBLHMzSEFBNjNIQyxTQUFBLHlJQUFvSkMsVUFBQSx5VkFBbVdDLFVBQUEsNjRCQUF5NUJqakksRUFBQTg1RyxXQUFBLFNBQUFuL0YsRUFBQUssRUFBQWpiLEVBQUE0TSxHQUErQixPQUFBM00sRUFBQW82RyxTQUFBdjZHLEtBQUFtQyxLQUFBMlksRUFBQUssRUFBQWpiLEdBQUFpQyxLQUFBbXVILGNBQXFEeGpILFFBQVEzSyxLQUFBbXVILFdBQUF0MEIsV0FBQSxJQUFBbHZGLEVBQUFrdkYsT0FBQWx2RixFQUFBa3ZGLE1BQUE3NUYsS0FBQW11SCxXQUFBdnFGLFdBQUEsSUFBQWo1QixFQUFBaTVCLE9BQUFqNUIsRUFBQWk1QixNQUFBNWpDLEtBQUFtdUgsV0FBQStTLGFBQUEsSUFBQXYySCxFQUFBdTJILFNBQUF2MkgsRUFBQXUySCxRQUFBbGhJLEtBQUFtdUgsV0FBQWdULGVBQUEsSUFBQXgySCxFQUFBdzJILFdBQUF4MkgsRUFBQXcySCxVQUFBbmhJLEtBQUFtdUgsV0FBQWlULHdCQUFBLElBQUF6MkgsRUFBQXkySCxvQkFBQXoySCxFQUFBeTJILG1CQUFBcGhJLEtBQUFtdUgsV0FBQWtULDJCQUFBLElBQUExMkgsRUFBQTAySCx1QkFBQTEySCxFQUFBMDJILHNCQUFBcmhJLEtBQUFtdUgsV0FBQXlHLHNCQUFBLElBQUFqcUgsRUFBQWlxSCxrQkFBQWpxSCxFQUFBaXFILGlCQUFBNTBILEtBQUFzaEksZUFBQXRoSSxLQUFBdWdILE9BQUEsRUFBQXZnSCxLQUFBNjVILEdBQUE3NUgsS0FBQTA2RyxlQUFBMTZHLEtBQUFtNEgsc0JBQUFuNEgsS0FBQXE0SCw4QkFBQXI0SCxLQUFBczRILDBCQUFBdDRILEtBQUF3NEgsdUJBQUF4NEgsS0FBQXk0SCxvQkFBQXo0SCxLQUFBMjFILFVBQUEsSUFBQTMzSCxFQUFBNDNILE9BQUE1MUgsS0FBQTA3SCxTQUFBLElBQUExOUgsRUFBQTQzSCxPQUFBNTFILEtBQUF1aEksU0FBQSxJQUFBdmpJLEVBQUE0M0gsT0FBQSxRQUFBNTFILEtBQUE4MkgsV0FBQSxJQUFBOTRILEVBQUEyOEgsT0FBQTM2SCxXQUFBODJILFdBQUE4RCxnQ0FBQTU2SCxLQUFBODJILFdBQUErRCxvQkFBQTc2SCxLQUFBby9ILFNBQXk0QnAvSCxLQUFBd2hJLHlCQUFBLEVBQUF4aEksS0FBQXloSSxpQ0FBQSxFQUFBemhJLEtBQUEwaEksMEJBQUEsRUFBQTFoSSxLQUFBMmhJLHlCQUFBLEVBQUEzaEksS0FBQTRoSSx5QkFBQSxFQUFBNWhJLEtBQUFvK0gsbUJBQUEsRUFBQXArSCxLQUFBOCtILHFCQUFBLEVBQUE5K0gsS0FBQXMxSCxvQkFBQSxFQUFBdDFILEtBQUEwL0gsa0JBQUExL0gsS0FBQW81SCxnQkFBQXA1SCxLQUFBNmhJLGtCQUFBN2hJLEtBQUFxMUgsa0JBQUFyMUgsS0FBQXkxSCxtQkFBQXoxSCxLQUFBNjVILEdBQUExc0gsZUFBQW5OLEtBQUE4OUgsb0JBQUEsRUFBQTk5SCxLQUFBODFILGlCQUFvYjkxSCxLQUFBaWhELEtBQUEsaUJBQUFqaEQsS0FBQThoSSxVQUFBLEVBQUE5aEksS0FBQTI5RyxhQUFBLEdBQUEzOUcsS0FBQXdzRCxPQUFBLE9BQUF4c0QsS0FBQStoSSxZQUFBL2hJLEtBQUFpNUcsZ0JBQUEsRUFBQWo1RyxLQUFBZzJILHNCQUFBaDJILEtBQUFxMkgseUJBQUFyMkgsS0FBQWkySCxpQkFBQSxFQUFBajJILEtBQUFzMkgsb0JBQUEsRUFBQXQySCxLQUFBZ2lJLE9BQUFoaUksS0FBQWlpSSxhQUFBamlJLEtBQUFraUksYUFBd1JsaUksTUFBTWhDLEVBQUE4NUcsV0FBQXg0RyxVQUFBbEIsT0FBQVksT0FBQWhCLEVBQUFvNkcsU0FBQTk0RyxXQUFBdEIsRUFBQTg1RyxXQUFBeDRHLFVBQUFnaUksYUFBQSxXQUEyRyxJQUFJLEdBQUF0aEksS0FBQTA2RyxlQUFBMTZHLEtBQUE2M0csT0FBQXR4RyxXQUFBLFFBQUF2RyxLQUFBbXVILGFBQUFudUgsS0FBQTYzRyxPQUFBdHhHLFdBQUEscUJBQUF2RyxLQUFBbXVILFlBQUEsT0FBQW51SCxLQUFBMDZHLGVBQUEsVUFBQXo2RyxNQUFBLGdDQUFnTnNRLFFBQUFuTCxJQUFBLHdDQUFvRCxJQUFBdVQsRUFBQTNZLEtBQUEwNkcsZUFBMEIvaEcsRUFBQW9oSCxPQUFBcGhILEVBQUF3cEgsWUFBQXhwSCxFQUFBeXBILFVBQUF6cEgsRUFBQTBwSCxRQUFBMXBILEVBQUEycEgsU0FBQSxJQUFBM3BILEVBQUE0cEgsbUJBQUE1cEgsRUFBQTZwSCxxQkFBQXhpSSxLQUFBeWlJLFVBQUF6aUksS0FBQTA2RyxlQUFBZ29CLGFBQUExaUksS0FBQTA2RyxlQUFBaW9CLFVBQXNMLE1BQUFocUgsR0FBUyxNQUFBQSxJQUFTM2EsRUFBQTg1RyxXQUFBeDRHLFVBQUFzakksY0FBQSxTQUFBanFILEVBQUFLLEVBQUFqYixHQUFzRCxJQUFBNE0sRUFBQTNLLEtBQUF1dEMsTUFBQXQxQixFQUFBalksS0FBQSt1QixPQUFBelcsRUFBQXRZLEtBQUE2M0csT0FBQTlwRyxHQUFBZ3RDLEVBQUEvNkMsS0FBQTYzRyxPQUE4RDk4RCxLQUFBZzVELFdBQUFudkQsWUFBQTdKLE1BQUEvakIsU0FBQUMsY0FBQSxXQUFBbHBCLEdBQUF1SyxFQUFBdFksS0FBQWsyRyxPQUFBMUUsVUFBQXh4RyxLQUFBazJHLE9BQUExRSxVQUFBcHNELFlBQUFySyxHQUFBL2pCLFNBQUFpOUQsS0FBQTd1QyxZQUFBckssR0FBQS82QyxLQUFBazJHLE9BQUEyQixPQUFBOThELEVBQXNMLElBQUFyOUMsRUFBQSxJQUFBTSxFQUFBODVHLFdBQUE5M0csS0FBQWsyRyxPQUFBMkIsT0FBQTczRyxLQUFBazJHLFFBQUEsRUFBQXY5RixHQUE0RDNZLEtBQUFrMkcsT0FBQTVQLGFBQUEsWUFBQTVvRyxLQUFBbTFHLE9BQUFsb0csRUFBQXNOLEdBQUF2YSxFQUFBczZHLGlCQUFBaDRHLEtBQUFrMkcsT0FBQXpFLFVBQUE3dUcsS0FBQWxGLEdBQUEsbUJBQUFLLEdBQUE2UCxXQUFBLFdBQW1KN1AsRUFBQXVKLE1BQUFsQixPQUFBZ2dHLFVBQUFwdEYsSUFBNEIsSUFBSWhiLEVBQUFzQixVQUFBdWpJLGNBQUEsU0FBQWxxSCxFQUFBSyxHQUF5RSxJQUFBamIsRUFBaENpQyxLQUFBMmhILFVBQUEsc0JBQXNDLElBQUEzb0csR0FBQWpiLE1BQWdCNGEsR0FBQUssRUFBQUwsYUFBQXZhLFNBQUFMLEVBQUE0YSxHQUFBM1ksS0FBQTRDLE9BQUE1QyxLQUFBb21HLFVBQUF3OEIsY0FBQTdrSSxHQUFBaUMsS0FBQTh3RCxPQUEyRjl5RCxFQUFBODVHLFdBQUF4NEcsVUFBQWdpSCxRQUFBLFdBQTJDdGhILEtBQUEyMUgsVUFBQWoxSCxJQUFBVixLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsR0FBQTkzSCxLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsSUFBQTkzSCxLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsSUFBQTkzSCxLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsSUFBQTkzSCxLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsSUFBQTkzSCxLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsSUFBQTkzSCxLQUFBODJILFdBQUFlLGFBQUFDLEtBQUEsS0FBQTkzSCxLQUFBbTRILG1CQUFBNzJILE9BQUEsRUFBQXRCLEtBQUFxNEgsMkJBQUEvMkgsT0FBQSxFQUFBdEIsS0FBQXM0SCx1QkFBQWgzSCxPQUFBLEVBQUF0QixLQUFBdzRILG9CQUFBbDNILE9BQUEsRUFBQXRCLEtBQUF5NEgsaUJBQUFuM0gsT0FBQSxHQUEweEJ0RCxFQUFBODVHLFdBQUF4NEcsVUFBQTJtRyxXQUFBLFdBQThDLElBQUF0dEYsRUFBQTNZLEtBQUFrMkcsT0FBQW5jLE1BQUF6eUYsTUFBQXRILEtBQUFrMkcsT0FBQTV5RyxXQUFBMFYsRUFBQUwsRUFBQW1pRixPQUFBLE9BQUEvOEYsRUFBQTRhLEVBQUFtaUYsT0FBQSxPQUFBOThGLEVBQUEyYSxFQUFBbWlGLE9BQUEsT0FBQW53RixFQUFBZ08sRUFBQW1pRixPQUFBLE9BQTZIOTZGLEtBQUE2NUgsR0FBQWlKLFdBQUE5cEgsRUFBQWpiLEVBQUFDLEVBQUEyTSxHQUFBM0ssS0FBQTY1SCxHQUFBQyxXQUFBLEdBQUE5NUgsS0FBQTY1SCxHQUFBeHFHLE1BQUFydkIsS0FBQTY1SCxHQUFBa0osaUJBQUEvaUksS0FBQTY1SCxHQUFBbUosbUJBQW1IaGxJLEVBQUE4NUcsV0FBQXg0RyxVQUFBMmhELEtBQUEsU0FBQXRvQyxFQUFBSyxFQUFBamIsRUFBQWthLEdBQStDLElBQUFLLEVBQUF0YSxFQUFBc0IsVUFBQXk2RixNQUFBenlGLE1BQUF0SCxLQUFBazJHLE9BQUE1eUcsV0FBcUR0RCxLQUFBazRILGFBQUE1L0csRUFBQXdqRixPQUFBOTdGLEtBQUE4OUgsbUJBQUE5OUgsS0FBQXE1SCxjQUFBcjVILEtBQUFpakksMkJBQUFqakksS0FBQXE1SCxjQUFBcjVILEtBQUFrakksbUJBQUFsakksS0FBQXU1SCxTQUFBNXVILEVBQUFzaEcsS0FBQWpzRyxLQUFBbytILGNBQUFuRyxXQUFBLGlCQUFBajRILEtBQUFrNEgsZUFBd09sNkgsRUFBQTg1RyxXQUFBeDRHLFVBQUFrdEQsT0FBQSxTQUFBN3pDLEVBQUFLLEVBQUFqYixFQUFBNE0sR0FBaURySCxVQUFBLE9BQWlCLElBQUEyVSxFQUFBamEsRUFBQXNCLFVBQUF5NkYsTUFBQXp5RixNQUFBdEgsS0FBQWsyRyxPQUFBNXlHLFdBQXFEdEQsS0FBQTQzSCxlQUFBMy9HLEVBQUE2akYsT0FBQTk3RixLQUFBOCtILGdCQUFBN0csV0FBQSxpQkFBQWo0SCxLQUFBNDNILGdCQUFBNTNILEtBQUFzMUgsZUFBQTJDLFdBQUEsaUJBQUFoZ0gsRUFBQTZqRixTQUE2Sjk5RixFQUFBODVHLFdBQUF4NEcsVUFBQXErRyxhQUFBLFNBQUFobEcsR0FBaUQzWSxLQUFBbWpJLGtCQUFBeHFILElBQUEzWSxLQUFBOGhJLFVBQUFucEgsRUFBQTNZLEtBQUFtakksZ0JBQUF4cUgsRUFBQTNZLEtBQUE4K0gsZ0JBQUE3RyxXQUFBLGdCQUFBdC9HLEdBQUEzWSxLQUFBczFILGVBQUEyQyxXQUFBLGFBQUF0L0csS0FBc0szYSxFQUFBODVHLFdBQUF4NEcsVUFBQWYsSUFBQSxTQUFBb2EsRUFBQUssRUFBQWpiLEVBQUE0TSxHQUE4QyxPQUFBM00sRUFBQSs1RyxXQUFBejRHLFVBQUFmLElBQUErSSxNQUFBdEgsTUFBQTJZLEVBQUFLLEVBQUFqYixFQUFBNE0sS0FBd0QzTSxFQUFBODVHLFdBQUF4NEcsVUFBQWs4RyxXQUFBLFdBQThDLFFBQUF4N0csS0FBQW11SCxXQUFBa1Qsc0JBQUEsQ0FBNEksSUFBQTFvSCxFQUFBM1ksS0FBQWsyRyxPQUFBbkcsY0FBQS8yRixFQUFBaFosS0FBQXV0QyxNQUFBeHZDLEVBQUFpQyxLQUFBK3VCLE9BQTJEL1YsR0FBQUwsRUFBQTVhLEdBQUE0YSxPQUFBLElBQUEzWSxLQUFBbThHLFNBQUFuOEcsS0FBQW04RyxPQUFBLElBQUFqNUYsV0FBQWxqQixLQUFBNjVILEdBQUEwSSxtQkFBQXZpSSxLQUFBNjVILEdBQUEySSxvQkFBQSxJQUFBeGlJLEtBQUE2NUgsR0FBQXVKLFdBQUEsSUFBQXBxSCxFQUFBamIsRUFBQWlDLEtBQUE2NUgsR0FBQWowQixLQUFBNWxHLEtBQUE2NUgsR0FBQXdKLGNBQUFyakksS0FBQW04RyxRQUFBbjhHLEtBQUFrMkcsT0FBQTVQLGFBQUEsU0FBQXRtRyxLQUFBbThHLGFBQXZNNXJHLFFBQUFuTCxJQUFBLHVFQUF3YnBILEVBQUE4NUcsV0FBQXg0RyxVQUFBMDBILGVBQUEsU0FBQXI3RyxHQUFtRCxnQkFBQTNZLEtBQUFvL0gsTUFBQXptSCxJQUE4QjNhLEVBQUE4NUcsV0FBQXg0RyxVQUFBdXpHLE9BQUEsU0FBQWw2RixFQUFBSyxHQUE2Q2hiLEVBQUFvNkcsU0FBQTk0RyxVQUFBdXpHLE9BQUFoMUcsS0FBQW1DLEtBQUEyWSxFQUFBSyxHQUFBaFosS0FBQTY1SCxHQUFBeUksU0FBQSxJQUFBdGlJLEtBQUE2NUgsR0FBQTBJLG1CQUFBdmlJLEtBQUE2NUgsR0FBQTJJLHFCQUFBeGlJLEtBQUF5aUksVUFBQXppSSxLQUFBNjVILEdBQUE2SSxhQUFBMWlJLEtBQUE2NUgsR0FBQThJLFVBQUEzaUksS0FBQTgySCxXQUFBMEYsZUFBQSxJQUFBeDhILEtBQUFtOEcsU0FBQW44RyxLQUFBbThHLE9BQUEsSUFBQWo1RixXQUFBbGpCLEtBQUE2NUgsR0FBQTBJLG1CQUFBdmlJLEtBQUE2NUgsR0FBQTJJLG9CQUFBLEtBQXFUeGtJLEVBQUE4NUcsV0FBQXg0RyxVQUFBK3ZCLE1BQUEsV0FBeUMsSUFBQTFXLEVBQUFyVixVQUFBLE1BQUEwVixFQUFBMVYsVUFBQSxNQUFBdkYsRUFBQXVGLFVBQUEsTUFBQXRGLEVBQUFzRixVQUFBLE1BQTRFdEQsS0FBQTY1SCxHQUFBaUosV0FBQW5xSCxFQUFBSyxFQUFBamIsRUFBQUMsR0FBQWdDLEtBQUE2NUgsR0FBQXhxRyxNQUFBcnZCLEtBQUE2NUgsR0FBQWtKLGlCQUFBL2lJLEtBQUE2NUgsR0FBQW1KLG1CQUE2RmhsSSxFQUFBODVHLFdBQUF4NEcsVUFBQXM5RyxVQUFBLFNBQUFqa0csRUFBQUssRUFBQWpiLEdBQWtELE9BQUE0YSxhQUFBM2EsRUFBQXNnSCxTQUFBdmdILEVBQUE0YSxFQUFBdWxCLEVBQUFsbEIsRUFBQUwsRUFBQXNsQixFQUFBdGxCLElBQUFpaEIsR0FBQTU1QixLQUFBMjFILFVBQUEvWSxXQUFBamtHLEVBQUFLLEVBQUFqYixJQUFBaUMsTUFBeUZoQyxFQUFBODVHLFdBQUF4NEcsVUFBQTA3RyxNQUFBLFNBQUFyaUcsRUFBQUssRUFBQWpiLEdBQThDLE9BQUFpQyxLQUFBMjFILFVBQUEzYSxNQUFBcmlHLEVBQUFLLEVBQUFqYixHQUFBaUMsTUFBd0NoQyxFQUFBODVHLFdBQUF4NEcsVUFBQTYrRyxPQUFBLFNBQUF4bEcsRUFBQUssR0FBNkMsZ0JBQUFBLEVBQUFoWixLQUFBNmhILFFBQUFscEcsSUFBQXJWLFVBQUEsR0FBQXRELEtBQUFrMkcsT0FBQStaLGFBQUF0M0csR0FBQTNhLEVBQUE0M0gsT0FBQXQySCxVQUFBNitHLE9BQUE3MkcsTUFBQXRILEtBQUEyMUgsVUFBQXJ5SCxXQUFBdEQsT0FBNEloQyxFQUFBODVHLFdBQUF4NEcsVUFBQW9pSCxRQUFBLFNBQUEvb0csR0FBNEMsT0FBQTNZLEtBQUFtK0csT0FBQXhsRyxFQUFBLE9BQUEzWSxNQUFpQ2hDLEVBQUE4NUcsV0FBQXg0RyxVQUFBc2lILFFBQUEsU0FBQWpwRyxHQUE0QyxPQUFBM1ksS0FBQW0rRyxPQUFBeGxHLEVBQUEsT0FBQTNZLE1BQWlDaEMsRUFBQTg1RyxXQUFBeDRHLFVBQUF1aUgsUUFBQSxTQUFBbHBHLEdBQTRDLE9BQUEzWSxLQUFBbStHLE9BQUF4bEcsRUFBQSxPQUFBM1ksTUFBaUNoQyxFQUFBODVHLFdBQUF4NEcsVUFBQXNELEtBQUEsV0FBd0MsSUFBQStWLEVBQUEzYSxFQUFBbzZHLFNBQUE5NEcsVUFBQXNELEtBQUEwRSxNQUFBdEgsTUFBQWdaLEVBQUFMLEVBQUE2Z0csV0FBMkQsT0FBQXhnRyxFQUFBMjhHLFVBQUEzMUgsS0FBQTIxSCxVQUFBMzBGLE9BQUFob0IsRUFBQTBpSCxTQUFBMTdILEtBQUEwN0gsU0FBQTE2RixPQUFBaG9CLEVBQUE4OUcsV0FBQTkySCxLQUFBODJILFdBQUE5MkgsS0FBQTgySCxXQUFBOTJILEtBQUE4MkgsV0FBQTkxRixPQUFBcm9CLEdBQStJM2EsRUFBQTg1RyxXQUFBeDRHLFVBQUE0N0csWUFBQSxXQUErQyxPQUFBbDdHLEtBQUEyMUgsVUFBQTMzSCxFQUFBNDNILE9BQUE0RixTQUFBeDdILEtBQUFrMkcsUUFBQWwyRyxNQUEwRGhDLEVBQUE4NUcsV0FBQXg0RyxVQUFBKzVILGNBQUEsU0FBQTFnSCxHQUFrRCxPQUFBM1ksS0FBQW8rSCxnQkFBQXpsSCxJQUFBM1ksS0FBQW8rSCxjQUFBemxILEVBQUEzWSxLQUFBbytILGNBQUFqOUQsUUFBQW5oRSxLQUFBbytILGVBQW1HcGdJLEVBQUE4NUcsV0FBQXg0RyxVQUFBZ2tJLGVBQUEsU0FBQTNxSCxHQUFtRCxPQUFBM1ksS0FBQXMxSCxpQkFBQTM4RyxJQUFBM1ksS0FBQXMxSCxlQUFBMzhHLEVBQUEzWSxLQUFBczFILGVBQUFuMEQsUUFBQW5oRSxLQUFBczFILGdCQUF1R3QzSCxFQUFBODVHLFdBQUF4NEcsVUFBQTg1SCxnQkFBQSxTQUFBemdILEdBQW9ELE9BQUEzWSxLQUFBOCtILGtCQUFBbm1ILElBQUEzWSxLQUFBOCtILGdCQUFBbm1ILEVBQUEzWSxLQUFBOCtILGdCQUFBMzlELFFBQUFuaEUsS0FBQTgrSCxpQkFBMkc5Z0ksRUFBQTg1RyxXQUFBeDRHLFVBQUEwNEgsZ0JBQUEsV0FBbUQsT0FBQWg0SCxLQUFBbytILGVBQUFwK0gsS0FBQW8rSCxjQUFBbUYsaUJBQUF2akksS0FBQXE1SCxjQUFBcjVILEtBQUF3akksbUJBQUF4akksS0FBQW8rSCxlQUE2SHBnSSxFQUFBODVHLFdBQUF4NEcsVUFBQW9nSSxnQkFBQSxXQUFtRCxPQUFBMS9ILEtBQUFvK0gsZUFBQXArSCxLQUFBbytILGdCQUFBcCtILEtBQUF5aEksNkJBQUF6aEksS0FBQXE1SCxjQUFBcjVILEtBQUFrakksbUJBQUFsakksS0FBQW8rSCxlQUFnSnBnSSxFQUFBODVHLFdBQUF4NEcsVUFBQSsxSCxnQkFBQSxXQUFtRCxPQUFBcjFILEtBQUFzMUgsZ0JBQUF0MUgsS0FBQXNqSSxlQUFBdGpJLEtBQUF5akksbUJBQUF6akksS0FBQXMxSCxnQkFBNEZ0M0gsRUFBQTg1RyxXQUFBeDRHLFVBQUF5K0gsd0JBQUEsV0FBMkQsT0FBQS85SCxLQUFBbytILGVBQUFwK0gsS0FBQW8rSCxnQkFBQXArSCxLQUFBMmhJLHFCQUFBM2hJLEtBQUFxNUgsY0FBQXI1SCxLQUFBaWpJLDJCQUFBampJLEtBQUFvK0gsZUFBZ0pwZ0ksRUFBQTg1RyxXQUFBeDRHLFVBQUFra0ksZ0JBQUEsV0FBbUQsT0FBQXhqSSxLQUFBd2hJLHNCQUFBeGhJLEtBQUFtdUgsV0FBQXlHLGlCQUFBNTBILEtBQUF3aEksb0JBQUEsSUFBQXhqSSxFQUFBODZILE9BQUE5NEgsS0FBQXNZLEVBQUFvb0gsVUFBQXBvSCxFQUFBcW9ILFdBQUEzZ0ksS0FBQXdoSSxvQkFBQSxJQUFBeGpJLEVBQUE4NkgsT0FBQTk0SCxLQUFBc1ksRUFBQWtvSCxVQUFBbG9ILEVBQUFtb0gsbUJBQUF6Z0ksS0FBQXdoSSxxQkFBNE94akksRUFBQTg1RyxXQUFBeDRHLFVBQUEyakksd0JBQUEsV0FBMkQsT0FBQWpqSSxLQUFBeWhJLDhCQUFBemhJLEtBQUF5aEksNEJBQUEsSUFBQXpqSSxFQUFBODZILE9BQUE5NEgsS0FBQXNZLEVBQUE0bkgsY0FBQTVuSCxFQUFBOG5ILGtCQUFBcGdJLEtBQUF5aEksNkJBQWtLempJLEVBQUE4NUcsV0FBQXg0RyxVQUFBazZILGlCQUFBLFdBQW9ELE9BQUF4NUgsS0FBQTBoSSx1QkFBQTFoSSxLQUFBMGhJLHFCQUFBLElBQUExakksRUFBQTg2SCxPQUFBOTRILEtBQUFzWSxFQUFBK25ILFdBQUEvbkgsRUFBQWdvSCxhQUFBdGdJLEtBQUEwaEksc0JBQXFJMWpJLEVBQUE4NUcsV0FBQXg0RyxVQUFBNGpJLGdCQUFBLFdBQW1ELE9BQUFsakksS0FBQTJoSSxzQkFBQTNoSSxLQUFBMmhJLG9CQUFBLElBQUEzakksRUFBQTg2SCxPQUFBOTRILEtBQUFzWSxFQUFBK25ILFdBQUEvbkgsRUFBQWlvSCxZQUFBdmdJLEtBQUEyaEkscUJBQWlJM2pJLEVBQUE4NUcsV0FBQXg0RyxVQUFBbWtJLGdCQUFBLFdBQW1ELE9BQUF6akksS0FBQTRoSSxzQkFBQTVoSSxLQUFBNGhJLG9CQUFBLElBQUE1akksRUFBQTg2SCxPQUFBOTRILEtBQUFzWSxFQUFBMG9ILFVBQUExb0gsRUFBQTJvSCxZQUFBamhJLEtBQUE0aEkscUJBQWdJNWpJLEVBQUE4NUcsV0FBQXg0RyxVQUFBdWlJLGVBQUEsV0FBa0QsT0FBQTdoSSxLQUFBMGpJLHFCQUFBMWpJLEtBQUEwakksbUJBQUEsSUFBQTFsSSxFQUFBODZILE9BQUE5NEgsS0FBQXNZLEVBQUF3b0gsU0FBQXhvSCxFQUFBeW9ILFdBQUEvZ0ksS0FBQTBqSSxvQkFBMkgxbEksRUFBQTg1RyxXQUFBeDRHLFVBQUFxa0ksZUFBQSxXQUFrRCxPQUFBM2pJLEtBQUE0akkscUJBQUE1akksS0FBQTY1SCxHQUFBZ0ssYUFBQSw0QkFBQTdqSSxLQUFBNGpJLG1CQUFBLElBQUE1bEksRUFBQTg2SCxPQUFBOTRILEtBQUFzWSxFQUFBc29ILFNBQUF0b0gsRUFBQXVvSCxXQUFBN2dJLEtBQUE0akksb0JBQTRLNWxJLEVBQUE4NUcsV0FBQXg0RyxVQUFBd2tJLGlCQUFBLFdBQW9ELElBQUE5akksS0FBQStqSSxjQUFBLENBQXdCLElBQUFwckgsRUFBQSxJQUFBM2EsRUFBQWtvRyxNQUFBLEtBQXVCdnRGLEVBQUFqWSxJQUFBLFNBQUFWLEtBQUErakksY0FBQSxJQUFBL2xJLEVBQUFnbUksUUFBQWhrSSxLQUFBMlksR0FBd0QsT0FBQTNZLEtBQUErakksZUFBMEIvbEksRUFBQTg1RyxXQUFBeDRHLFVBQUEya0ksV0FBQSxTQUFBdHJILEdBQStDLFFBQUFLLEVBQUFoWixLQUFBK2hJLFNBQUFoa0ksRUFBQSxFQUE0QkEsRUFBQWliLEVBQUExWCxTQUFXdkQsRUFBQSxDQUFLLElBQUE0TSxFQUFBcU8sRUFBQWpiLEdBQVcsR0FBQTRNLEVBQUFncEIsTUFBQWhiLEVBQUEsT0FBQWhPLEVBQXNCLElBQUFzTixFQUFBLElBQUFqYSxFQUFBZ21JLFFBQUFoa0ksS0FBQTJZLEdBQTRCLE9BQUEzWSxLQUFBK2hJLFNBQUFuL0gsS0FBQXFWLE1BQStCamEsRUFBQTg1RyxXQUFBeDRHLFVBQUFnL0gsWUFBQSxTQUFBM2xILEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBd0QsR0FBQTNLLEtBQUE2NUgsR0FBQXFLLFdBQUFsckgsRUFBQUwsUUFBQSxJQUFBNWEsRUFBQSxDQUF1QyxJQUFBa2EsRUFBQSxJQUFBamEsRUFBQUQsR0FBZWlDLEtBQUE2NUgsR0FBQXNLLFdBQUFuckgsRUFBQWYsRUFBQXROLEtBQTJCM00sRUFBQTg1RyxXQUFBeDRHLFVBQUFpK0csT0FBQSxZQUEwQyxJQUFBdjlHLEtBQUFtdUgsV0FBQWdULFdBQUFuaEksS0FBQWsyRyxPQUFBMnNCLGNBQUEsaUJBQTBFN2tJLEVBQUE4NUcsV0FBQXg0RyxVQUFBKzlHLFNBQUEsWUFBNEMsSUFBQXI5RyxLQUFBbXVILFdBQUFnVCxXQUFBbmhJLEtBQUFrMkcsT0FBQTJzQixjQUFBLGlCQUEwRTdrSSxFQUFBODVHLFdBQUF4NEcsVUFBQXkvSCxTQUFBLFNBQUFwbUgsR0FBNkMsT0FBQUEsRUFBQXJYLE9BQUEsU0FBeUIsR0FBQXFYLEVBQUFyWCxPQUFBLEtBQWlCLElBQUEwWCxFQUFBamIsRUFBQUssT0FBQWtCLFVBQUFZLFNBQUF5SyxLQUFBc04sRUFBQVUsRUFBQWpSLFFBQXNFc1IsRUFBQWYsRUFBQTY0QyxNQUFVLEdBQWhGLG1CQUFtRi95RCxFQUFBRixLQUFBbWIsR0FBQWYsRUFBQXJWLEtBQUEwRSxNQUFBMlEsRUFBQWUsR0FBQXJPLEVBQUEvSCxLQUFBb1csU0FBMENmLEVBQUEzVyxhQUFBLEtBQUEwWCxFQUFBZixFQUFBNjRDLFFBQXNDLE9BQUFubUQsRUFBQThYLFVBQUE5WCxFQUFxQixTQUFBeWIsT0FBQTllLFNBQUFxUixJQUE0QjNhLEVBQUE4NUcsV0FBQXg0RyxVQUFBMitILFdBQUEsU0FBQXRsSCxHQUErQyxPQUFBM1ksS0FBQSsrSCxTQUFBcG1ILEVBQUFoQyxJQUFBLFNBQUFnQyxHQUF1QyxPQUFBQSxFQUFBaWhCLEVBQUFqaEIsRUFBQXNsQixFQUFBdGxCLEVBQUF1bEIsT0FBdUJsZ0MsRUFBQXNCLFVBQUFxaUgsVUFBQSxTQUFBaHBHLEdBQW1DLElBQUEzWSxLQUFBb21HLFVBQUFtYSxNQUFBLFVBQUF0Z0gsTUFBQTBZLEVBQUEsaUtBQTJNM2EsRUFBQTg1RyxXQUFBeDRHLFVBQUEyaUksV0FBQSxXQUF3VixJQUFBM3BILEVBQUEsSUFBQUwsRUFBQTZ2QyxjQUEwQixPQUFBeHZDLEVBQUFreUMsZ0JBQUF2eUMsRUFBQWd4QyxRQUFBYyxxQkFBcFUsU0FBQXB4QyxFQUFBSyxHQUFnQkEsSUFBQTFYLFFBQUFxWCxFQUFBLEdBQUFLLElBQUExWCxRQUFBcVgsRUFBQSxHQUFBSyxJQUFBMVgsUUFBQXFYLEVBQUEsS0FBb1RMLEVBQUFreUMsZ0JBQUF2eUMsRUFBQWd4QyxRQUFBTyxlQUFqUSxTQUFBN3dDLEdBQWNBLElBQUFWLEVBQUFvd0MsY0FBQUUsY0FBQWg0QyxRQUFBbkwsSUFBQSxvQ0FBQXVULEtBQW1QTCxFQUFBa3lDLGdCQUFBdnlDLEVBQUFneEMsUUFBQVUsZUFBOUosU0FBQWh4QyxHQUFjcEksUUFBQW5MLElBQUEsa0JBQUFtTCxRQUFBbkwsSUFBQSxpQkFBQXVULEtBQWdKTCxFQUFBa3lDLGdCQUFBdnlDLEVBQUFneEMsUUFBQVksaUJBQWxGLFNBQUFseEMsRUFBQUssRUFBQWpiLEdBQWtCLE9BQUE0YSxFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxNQUFnRUwsRUFBQWt5QyxnQkFBQXZ5QyxFQUFBZ3hDLFFBQUFXLG1CQUF6QyxTQUFBanhDLE1BQXlDTCxHQUEyUHRhLEVBQUE4NUcsV0FBQXg0RyxVQUFBNCtILGFBQUEsU0FBQXZsSCxHQUFpRDNZLEtBQUFnaUksT0FBQXozRSxjQUFBLE9BQWlDLElBQUF2eEMsS0FBU2haLEtBQUFnaUksT0FBQXQzRSxvQkFBQTF4QyxHQUFtQyxRQUFBamIsRUFBQSxFQUFZQSxFQUFBNGEsRUFBQXJYLE9BQVd2RCxJQUFBLENBQUtpQyxLQUFBZ2lJLE9BQUFyM0Usc0JBQWtDLFFBQUEzc0QsRUFBQTJhLEVBQUE1YSxHQUFBNE0sRUFBQSxFQUFtQkEsRUFBQTNNLEVBQUFzRCxPQUFXcUosR0FBQSxHQUFNLElBQUFzTixHQUFBamEsRUFBQTJNLEdBQUEzTSxFQUFBMk0sRUFBQSxHQUFBM00sRUFBQTJNLEVBQUEsSUFBMkIzSyxLQUFBZ2lJLE9BQUF2M0UsY0FBQXh5QyxLQUErQmpZLEtBQUFnaUksT0FBQXAzRSxvQkFBZ0MsT0FBQTVxRCxLQUFBZ2lJLE9BQUFuM0Usb0JBQUE3eEMsR0FBeUNoYixFQUFBODVHLFdBQUF4NEcsVUFBQTQySCxvQkFBQSxTQUFBdjlHLEdBQXdELElBQUFLLEVBQUFMLElBQUE1YSxFQUFBaWIsRUFBQUwsRUFBQTNhLEVBQUEsRUFBQTJhLEVBQUFoTyxFQUFBM00sSUFBNEIsT0FBQTJNLEVBQUEzTSxFQUFBLEVBQUEyTSxFQUFBZ08sRUFBQSxFQUFBM2EsRUFBQWdiLEVBQUFqYixJQUEwQkMsRUFBQTg1RyxXQUFBeDRHLFVBQUFpM0gsdUJBQUEsU0FBQTU5RyxHQUEyRCxJQUFBSyxFQUFBTCxJQUFBNWEsRUFBQSxFQUFBNGEsRUFBZ0IsT0FBQTVhLElBQUEsRUFBQUEsRUFBQTRhLEVBQUFLLElBQW9CaGIsRUFBQTg1RyxXQUFBeDRHLFVBQUFxM0gsaUJBQUEsU0FBQWgrRyxHQUFxRCxPQUFBQSxFQUFBLEdBQUFBLEVBQUEsSUFBQUEsRUFBQSxHQUFBQSxFQUFBLElBQUEzWSxLQUFBaTVHLGdCQUFBdGdHLEVBQUEsSUFBQUEsRUFBQSxHQUFBQSxFQUFBLElBQUEzWSxLQUFBaTVHLGdCQUFBdGdHLEVBQUEsS0FBOEZLLEVBQUF4YixRQUFBUSxFQUFBODVHLGFBQTBCcGMsb0JBQUEsR0FBQTlCLGVBQUEsR0FBQXdxQyxzQkFBQSxHQUFBQyxjQUFBLEdBQUFDLGNBQUEsR0FBQUMsY0FBQSxHQUFBMThFLFFBQUEsSUFBK0hxdEIsSUFBQSxTQUFBdjhELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUF3QjNhLEVBQUE4NkgsT0FBQSxTQUFBbmdILEVBQUFLLEVBQUFqYixHQUF5QmlDLEtBQUFvbUcsVUFBQXp0RixFQUFBM1ksS0FBQWc1SCxTQUFBaGdILEVBQUFoWixLQUFBKzRILFNBQUFoN0gsRUFBQWlDLEtBQUF3a0ksYUFBQSxFQUFBeGtJLEtBQUF5a0ksYUFBQSxFQUFBemtJLEtBQUEwa0ksV0FBQSxFQUFBMWtJLEtBQUEya0ksbUJBQUEsRUFBQTNrSSxLQUFBbXVILGNBQXVKbnVILEtBQUE0a0ksaUJBQUEsRUFBQTVrSSxLQUFBNmtJLFlBQXlDN2tJLEtBQUE4a0ksUUFBQSxFQUFBOWtJLEtBQUEra0ksYUFBaUMvbUksRUFBQTg2SCxPQUFBeDVILFVBQUE2aEUsS0FBQSxXQUFvQyxPQUFBbmhFLEtBQUEwa0ksV0FBQSxDQUF3QixJQUFBL3JILEVBQUEzWSxLQUFBb21HLFVBQUF5ekIsR0FBd0IsR0FBQTc1SCxLQUFBd2tJLFlBQUE3ckgsRUFBQXNnSCxhQUFBdGdILEVBQUFxc0gsZUFBQXJzSCxFQUFBc3NILGFBQUFqbEksS0FBQXdrSSxZQUFBeGtJLEtBQUFnNUgsVUFBQXJnSCxFQUFBdXNILGNBQUFsbEksS0FBQXdrSSxjQUFBN3JILEVBQUF3c0gsbUJBQUFubEksS0FBQXdrSSxZQUFBN3JILEVBQUF5c0gsZ0JBQUEsT0FBQTcwSCxRQUFBekUsTUFBQSx3REFBQTZNLEVBQUEwc0gsaUJBQUFybEksS0FBQXdrSSxjQUFBLEtBQXNULEdBQUF4a0ksS0FBQXlrSSxZQUFBOXJILEVBQUFzZ0gsYUFBQXRnSCxFQUFBMnNILGlCQUFBM3NILEVBQUFzc0gsYUFBQWpsSSxLQUFBeWtJLFlBQUF6a0ksS0FBQSs0SCxVQUFBcGdILEVBQUF1c0gsY0FBQWxsSSxLQUFBeWtJLGNBQUE5ckgsRUFBQXdzSCxtQkFBQW5sSSxLQUFBeWtJLFlBQUE5ckgsRUFBQXlzSCxnQkFBQSxPQUFBNzBILFFBQUF6RSxNQUFBLHlEQUFBNk0sRUFBQTBzSCxpQkFBQXJsSSxLQUFBeWtJLGNBQUEsS0FBeVR6a0ksS0FBQTBrSSxXQUFBL3JILEVBQUE0c0gsZ0JBQUE1c0gsRUFBQTZzSCxhQUFBeGxJLEtBQUEwa0ksV0FBQTFrSSxLQUFBd2tJLGFBQUE3ckgsRUFBQTZzSCxhQUFBeGxJLEtBQUEwa0ksV0FBQTFrSSxLQUFBeWtJLGFBQUE5ckgsRUFBQThzSCxZQUFBemxJLEtBQUEwa0ksWUFBQS9ySCxFQUFBK3NILG9CQUFBMWxJLEtBQUEwa0ksV0FBQS9ySCxFQUFBZ3RILGNBQUFwMUgsUUFBQXpFLE1BQUEsdUNBQUE2TSxFQUFBaXRILGtCQUFBNWxJLEtBQUEwa0ksYUFBQTFrSSxLQUFBNmxJLGtCQUFBN2xJLEtBQUE4bEksZ0JBQWdXLE9BQUE5bEksTUFBWWhDLEVBQUE4NkgsT0FBQXg1SCxVQUFBdW1JLGdCQUFBLFdBQStDLElBQUE3bEksS0FBQTJrSSxrQkFBQSxDQUE0QjNrSSxLQUFBbXVILGNBQW1CLFFBQUF4MUcsRUFBQTNZLEtBQUFvbUcsVUFBQXl6QixHQUFBN2dILEVBQUFMLEVBQUErc0gsb0JBQUExbEksS0FBQTBrSSxXQUFBL3JILEVBQUFvdEgsbUJBQUFob0ksRUFBQSxFQUE2RkEsRUFBQWliLElBQUlqYixFQUFBLENBQUssSUFBQUMsRUFBQTJhLEVBQUFxdEgsZ0JBQUFobUksS0FBQTBrSSxXQUFBM21JLEdBQUE0TSxFQUFBM00sRUFBQUMsS0FBQWdhLEVBQUFVLEVBQUFzdEgsa0JBQUFqbUksS0FBQTBrSSxXQUFBLzVILEdBQUEyTixLQUFrR0EsRUFBQXJhLEtBQUEwTSxFQUFBMk4sRUFBQSt0QyxTQUFBcHVDLEVBQUFLLEVBQUFySyxLQUFBalEsRUFBQWlRLEtBQUFxSyxFQUFBa0wsS0FBQXhsQixFQUFBd2xCLEtBQUF4akIsS0FBQW11SCxXQUFBeGpILEdBQUEyTixFQUF1RXRZLEtBQUEya0ksbUJBQUEsSUFBMkIzbUksRUFBQTg2SCxPQUFBeDVILFVBQUF3bUksY0FBQSxXQUE2QyxJQUFBOWxJLEtBQUE0a0ksZ0JBQUEsQ0FBMEIsUUFBQWpzSCxFQUFBM1ksS0FBQW9tRyxVQUFBeXpCLEdBQUE3Z0gsRUFBQUwsRUFBQStzSCxvQkFBQTFsSSxLQUFBMGtJLFdBQUEvckgsRUFBQXV0SCxpQkFBQW5vSSxFQUFBLEVBQUFDLEVBQUEsRUFBK0ZBLEVBQUFnYixJQUFJaGIsRUFBQSxDQUFLLElBQUEyTSxFQUFBZ08sRUFBQXd0SCxpQkFBQW5tSSxLQUFBMGtJLFdBQUExbUksR0FBQWlhLEtBQWlEQSxFQUFBb3VDLFNBQUExdEMsRUFBQXl0SCxtQkFBQXBtSSxLQUFBMGtJLFdBQUEvNUgsRUFBQTFNLE1BQUFnYSxFQUFBdUwsS0FBQTdZLEVBQUE2WSxLQUFzRSxJQUFBbEwsRUFBQTNOLEVBQUExTSxLQUFhME0sRUFBQTZZLEtBQUEsSUFBQWxMLElBQUFvckMsVUFBQSxFQUFBcHJDLEVBQUFuWCxRQUFBLFNBQUE4VyxFQUFBaGEsS0FBQXFhLEVBQUFMLEVBQUFoSyxLQUFBdEQsRUFBQXNELEtBQUFnSyxFQUFBaEssT0FBQTBLLEVBQUEwdEgsYUFBQXB1SCxFQUFBcXVILGFBQUF2b0ksTUFBQWlDLEtBQUEra0ksU0FBQW5pSSxLQUFBcVYsSUFBQWpZLEtBQUE2a0ksU0FBQXZzSCxHQUFBTCxFQUE0SmpZLEtBQUE0a0ksaUJBQUEsSUFBeUI1bUksRUFBQTg2SCxPQUFBeDVILFVBQUFpbkksUUFBQSxhQUF3Q3ZvSSxFQUFBODZILE9BQUF4NUgsVUFBQWkySCxXQUFBLFdBQTBDdjFILEtBQUFtaEUsT0FBQW5oRSxLQUFBOGtJLFNBQUE5a0ksS0FBQXdtSSxhQUFBeG1JLEtBQUE4a0ksUUFBQSxFQUFBOWtJLEtBQUF5bUksZUFBQXptSSxLQUFBMG1JLHFCQUFBMW1JLFlBQUFvbUcsVUFBQTA0QixpQkFBQTkrSCxLQUFBMm1JLHdCQUE0SzNvSSxFQUFBODZILE9BQUF4NUgsVUFBQW8ySCxhQUFBLFdBQTRDLE9BQUExMUgsS0FBQThrSSxTQUFBOWtJLEtBQUE0bUksaUJBQUE1bUksS0FBQThrSSxRQUFBLEdBQUE5a0ksTUFBZ0VoQyxFQUFBODZILE9BQUF4NUgsVUFBQW1uSSxhQUFBLFdBQTRDLFFBQUE5dEgsRUFBQTNZLEtBQUFvbUcsVUFBQXl6QixHQUFBN2dILEVBQUEsRUFBZ0NBLEVBQUFoWixLQUFBK2tJLFNBQUF6akksT0FBdUIwWCxJQUFBLENBQUssSUFBQWpiLEVBQUFpQyxLQUFBK2tJLFNBQUEvckgsR0FBQWhiLEVBQUFELEVBQUEwN0gsYUFBbUMsSUFBQXo3SCxNQUFBZ0MsS0FBQW9tRyxVQUFBMDlCLG9CQUFBbnJILEVBQUFrdUgsY0FBQWx1SCxFQUFBbXVILFNBQUEvb0ksRUFBQXVvSSxjQUFBdG9JLEVBQUErb0ksY0FBQS9vSSxFQUFBZ3BJLFNBQUFydUgsRUFBQXN1SCxVQUFBbHBJLEVBQUFzb0QsU0FBQXRvRCxFQUFBdW9JLGdCQUFnS3RvSSxFQUFBODZILE9BQUF4NUgsVUFBQTRuSSxlQUFBLFdBQThDLFFBQUF2dUgsRUFBQSxFQUFZQSxFQUFBM1ksS0FBQStrSSxTQUFBempJLE9BQXVCcVgsSUFBQSxDQUFLLElBQUFLLEVBQUFoWixLQUFBK2tJLFNBQUFwc0gsR0FBQTVhLEVBQUFpYixFQUFBeWdILFFBQW1DMTdILEtBQUFpcEksV0FBZWhwSSxFQUFBODZILE9BQUF4NUgsVUFBQXNuSSxlQUFBLGFBQStDNW9JLEVBQUE4NkgsT0FBQXg1SCxVQUFBb25JLG1CQUFBLFdBQWtEMW1JLEtBQUFpNEgsV0FBQSxvQkFBQWo0SCxLQUFBb21HLFVBQUFzMUIsU0FBQTVELE1BQUE5M0gsS0FBQWk0SCxXQUFBLG1CQUFBajRILEtBQUFvbUcsVUFBQXV2QixVQUFBbUMsTUFBQTkzSCxLQUFBaTRILFdBQUEsY0FBQWo0SCxLQUFBb21HLFVBQUEwd0IsV0FBQWUsYUFBQUMsTUFBQTkzSCxZQUFBb21HLFVBQUFnNEIsZ0JBQUFwK0gsS0FBQW9tRyxVQUFBbTdCLFNBQUFwRSxpQkFBQW45SCxLQUFBb21HLFVBQUF1dkIsV0FBQTMxSCxLQUFBaTRILFdBQUEsZ0JBQUFqNEgsS0FBQW9tRyxVQUFBbTdCLFNBQUF2RSxRQUF1WGgvSCxFQUFBODZILE9BQUF4NUgsVUFBQXFuSSxvQkFBQSxXQUFtRDNtSSxLQUFBaTRILFdBQUEsWUFBQWo0SCxLQUFBb21HLFVBQUFxOEIsWUFBc0R6a0ksRUFBQTg2SCxPQUFBeDVILFVBQUFrbkksV0FBQSxXQUEwQyxPQUFBeG1JLEtBQUFvbUcsVUFBQXl6QixHQUFBMk0sV0FBQXhtSSxLQUFBMGtJLFlBQUExa0ksTUFBMERoQyxFQUFBODZILE9BQUF4NUgsVUFBQTI0SCxXQUFBLFNBQUF0L0csRUFBQUssR0FBNkMsSUFBQWpiLEVBQUFpQyxLQUFBNmtJLFNBQUFsc0gsR0FBdUIsR0FBQTVhLEVBQUEsQ0FBTSxJQUFBQyxFQUFBRCxFQUFBc29ELFNBQUExN0MsRUFBQTNLLEtBQUFvbUcsVUFBQXl6QixHQUFxQyxPQUFBNzVILEtBQUF3bUksYUFBQXpvSSxFQUFBa1EsTUFBaUMsS0FBQXRELEVBQUF3OEgsTUFBQSxJQUFBbnVILEVBQUFyTyxFQUFBczhILFVBQUFqcEksRUFBQSxHQUFBMk0sRUFBQXM4SCxVQUFBanBJLEVBQUEsR0FBcUQsTUFBTSxLQUFBMk0sRUFBQXk4SCxJQUFBcnBJLEVBQUF5bEIsS0FBQSxFQUFBeEssRUFBQTFYLFFBQUFxSixFQUFBMDhILFdBQUFycEksRUFBQWdiLEdBQUFyTyxFQUFBczhILFVBQUFqcEksRUFBQWdiLEdBQWlFLE1BQU0sS0FBQXJPLEVBQUErekgsTUFBQTNnSSxFQUFBeWxCLEtBQUEsRUFBQXhLLEVBQUExWCxRQUFBcUosRUFBQTI4SCxXQUFBdHBJLEVBQUFnYixHQUFBck8sRUFBQTQ4SCxVQUFBdnBJLEVBQUFnYixHQUFtRSxNQUFNLEtBQUFyTyxFQUFBNjhILFdBQUE3OEgsRUFBQTg4SCxpQkFBQXpwSSxHQUFBLEVBQUFnYixHQUE2QyxNQUFNLEtBQUFyTyxFQUFBKzhILFdBQUEvOEgsRUFBQWc5SCxpQkFBQTNwSSxHQUFBLEVBQUFnYixHQUE2QyxNQUFNLEtBQUFyTyxFQUFBaTlILFdBQUE3cEksRUFBQXlsQixLQUFBLEVBQUF4SyxFQUFBMVgsUUFBQXFKLEVBQUFrOUgsV0FBQTdwSSxFQUFBZ2IsR0FBQXJPLEVBQUFtOUgsVUFBQTlwSSxFQUFBZ2IsRUFBQSxHQUFBQSxFQUFBLElBQWdGLE1BQU0sS0FBQXJPLEVBQUFvOUgsV0FDanQrQmhxSSxFQUFBeWxCLEtBQUEsRUFBQXhLLEVBQUExWCxRQUFBcUosRUFBQXE5SCxXQUFBaHFJLEVBQUFnYixHQUFBck8sRUFBQXM5SCxVQUFBanFJLEVBQUFnYixFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxJQUFtRSxNQUFNLEtBQUFyTyxFQUFBdTlILFdBQUFucUksRUFBQXlsQixLQUFBLEVBQUF4SyxFQUFBMVgsUUFBQXFKLEVBQUF3OUgsV0FBQW5xSSxFQUFBZ2IsR0FBQXJPLEVBQUF5OUgsVUFBQXBxSSxFQUFBZ2IsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxJQUEwRixNQUFNLEtBQUFyTyxFQUFBMDlILFNBQUF0cUksRUFBQXlsQixLQUFBLEVBQUF4SyxFQUFBMVgsUUFBQXFKLEVBQUEyOUgsV0FBQXRxSSxFQUFBZ2IsR0FBQXJPLEVBQUE0OUgsVUFBQXZxSSxFQUFBZ2IsRUFBQSxHQUFBQSxFQUFBLElBQThFLE1BQU0sS0FBQXJPLEVBQUE2OUgsU0FBQXpxSSxFQUFBeWxCLEtBQUEsRUFBQXhLLEVBQUExWCxRQUFBcUosRUFBQTg5SCxXQUFBenFJLEVBQUFnYixHQUFBck8sRUFBQSs5SCxVQUFBMXFJLEVBQUFnYixFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxJQUFtRixNQUFNLEtBQUFyTyxFQUFBZytILFNBQUE1cUksRUFBQXlsQixLQUFBLEVBQUF4SyxFQUFBMVgsUUFBQXFKLEVBQUFpK0gsV0FBQTVxSSxFQUFBZ2IsR0FBQXJPLEVBQUFrK0gsVUFBQTdxSSxFQUFBZ2IsRUFBQSxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsR0FBQUEsRUFBQSxJQUF3RixNQUFNLEtBQUFyTyxFQUFBMDdILFdBQUExN0gsRUFBQWs4SCxjQUFBbDhILEVBQUFtOEgsU0FBQS9vSSxFQUFBdW9JLGNBQUF2b0ksRUFBQTA3SCxRQUFBejVILEtBQUFvbUcsVUFBQTY5QixXQUFBanJILEdBQUFyTyxFQUFBczhILFVBQUFscEksRUFBQXNvRCxTQUFBdG9ELEVBQUF1b0ksY0FBMkksT0FBQXRtSSxPQUFhaEMsRUFBQTg2SCxPQUFBeDVILFVBQUFpa0ksY0FBQSxXQUE2QyxnQkFBQXZqSSxLQUFBNmtJLFNBQUFpRSxtQkFBQSxJQUFBOW9JLEtBQUE2a0ksU0FBQWtFLHlCQUFBLElBQUEvb0ksS0FBQTZrSSxTQUFBbUUsNkJBQUEsSUFBQWhwSSxLQUFBNmtJLFNBQUFvRSx1QkFBQSxJQUFBanBJLEtBQUE2a0ksU0FBQXFFLG9CQUFBLElBQUFscEksS0FBQTZrSSxTQUFBc0Usd0JBQUEsSUFBQW5wSSxLQUFBNmtJLFNBQUF1RSwwQkFBQSxJQUFBcHBJLEtBQUE2a0ksU0FBQXdFLHVCQUFBLElBQUFycEksS0FBQTZrSSxTQUFBeUUseUJBQUEsSUFBQXRwSSxLQUFBNmtJLFNBQUEwRSxXQUFnYXZySSxFQUFBODZILE9BQUF4NUgsVUFBQWtxSSxnQkFBQSxXQUErQyxPQUFBeHBJLEtBQUFzbUksYUFBQSxHQUEyQnRvSSxFQUFBODZILE9BQUF4NUgsVUFBQW1xSSxjQUFBLFdBQTZDLGdCQUFBenBJLEtBQUFtdUgsV0FBQXdRLG1CQUFBLElBQUEzK0gsS0FBQTZrSSxTQUFBNkUsZ0JBQW9GMXJJLEVBQUE4NkgsT0FBQXg1SCxVQUFBcXFJLGlCQUFBLFdBQWdELE9BQUEzcEksS0FBQXVqSSxpQkFBQXZqSSxLQUFBd3BJLG1CQUFvRHhySSxFQUFBODZILE9BQUF4NUgsVUFBQTY1SCxlQUFBLFdBQThDLGdCQUFBbjVILEtBQUE2a0ksU0FBQStFLGVBQTRDNXJJLEVBQUE4NkgsT0FBQXg1SCxVQUFBbS9ILGFBQUEsU0FBQTlsSCxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEVBQUFzTixHQUF1RCxJQUFBSyxFQUFBdFksS0FBQW9tRyxVQUFBeXpCLEdBQXdCLFdBQUFsaEgsSUFBQUwsRUFBQXV4SCx3QkFBQWx4SCxHQUFBTCxFQUFBd3hILG9CQUFBbnhILEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sRUFBQXNOLElBQUFqWSxNQUFxRmdaLEVBQUF4YixRQUFBUSxFQUFBODZILFNBQXNCbC9CLGVBQUEsS0FBa0J6a0IsSUFBQSxTQUFBeDhELEVBQUFLLEVBQUFqYixHQUFzQixhQUFhLElBQUFDLEVBQUEyYSxFQUFBLGdCQUFBaE8sRUFBQWdPLEVBQUEscUJBQWlEM2EsRUFBQWdtSSxRQUFBLFNBQUFyckgsRUFBQUssR0FBd0JoWixLQUFBb21HLFVBQUF6dEYsRUFBaUIsSUFBQTVhLEVBQUFpQyxLQUFBb21HLFVBQUF5ekIsR0FBd0I3NUgsS0FBQTJ6QixJQUFBM2EsRUFBQWhaLEtBQUErcEksV0FBQSxFQUFBL3BJLEtBQUFncUksU0FBQWpzSSxFQUFBa3NJLFdBQUFqcUksS0FBQWtxSSxTQUFBbnNJLEVBQUE2bkcsS0FBQTVsRyxLQUFBbXFJLFNBQUEsRUFBQW5xSSxLQUFBb3FJLFlBQUFyc0ksRUFBQTZ0RyxPQUFBNXJHLEtBQUFxcUksWUFBQXRzSSxFQUFBNnRHLE9BQUE1ckcsS0FBQXNxSSxRQUFBdnNJLEVBQUF3c0ksY0FBQXZxSSxLQUFBd3FJLFFBQUF6c0ksRUFBQXdzSSxjQUFBdnFJLEtBQUF5cUksdUJBQUEsSUFBQXpzSSxFQUFBdTlHLGNBQUF2aUcsYUFBQWhiLEVBQUF1OUcsYUFBQXY3RyxLQUFBMHFJLHFCQUFBLEVBQUExcUksS0FBQTJxSSxzQkFBQSxJQUFBM3NJLEVBQUFpNEcsU0FBQWo5RixhQUFBaGIsRUFBQWk0RyxXQUFBajlGLGFBQUFoYixFQUFBNDVHLFVBQUE1M0csS0FBQTRxSSxhQUFBNXhILGFBQUFoYixFQUFBa29HLE1BQUFsbUcsS0FBQTZxSSxnQkFBQTd4SCxhQUFBaGIsRUFBQTQ1RyxTQUFBNTNHLEtBQUE4cUksWUFBQSxvQkFBQTNpQixXQUFBbnZHLGFBQUFtdkcsVUFBMmlCLElBQUF4OUcsRUFBQTNLLEtBQUErcUksNEJBQXVDLE9BQUEvcUksS0FBQXV0QyxNQUFBNWlDLEVBQUE0aUMsTUFBQXZ0QyxLQUFBK3VCLE9BQUFwa0IsRUFBQW9rQixPQUFBL3VCLEtBQUFtaEUsS0FBQXgyRCxHQUFBM0ssTUFBaUVoQyxFQUFBZ21JLFFBQUExa0ksVUFBQXlySSwwQkFBQSxXQUEwRCxJQUFBcHlILEVBQU0sT0FBQTNZLEtBQUE0cUksYUFBQWp5SCxFQUFBM1ksS0FBQTJ6QixJQUFBa2tGLE9BQUE3M0csS0FBQXlxSSxtQkFBQXpxSSxLQUFBNnFJLGlCQUFBN3FJLEtBQUEycUksaUJBQUFoeUgsRUFBQTNZLEtBQUEyekIsSUFBQWs2RSxJQUFBN3RHLEtBQUE4cUksY0FBQW55SCxFQUFBM1ksS0FBQTJ6QixLQUFBaGIsR0FBK0ozYSxFQUFBZ21JLFFBQUExa0ksVUFBQTZoRSxLQUFBLFNBQUF4b0QsR0FBc0MsSUFBQUssRUFBQWhaLEtBQUFvbUcsVUFBQXl6QixHQUF3QixHQUFBNzVILEtBQUErcEksTUFBQS93SCxFQUFBZ3lILGdCQUFBaHJJLEtBQUErbUksY0FBQS90SCxFQUFBaXlILGNBQUFqeUgsRUFBQWl4SCxXQUFBanhILEVBQUFreUgsbUJBQUFsckksS0FBQXFxSSxhQUFBcnhILEVBQUFpeUgsY0FBQWp5SCxFQUFBaXhILFdBQUFqeEgsRUFBQW15SCxtQkFBQW5ySSxLQUFBb3FJLGFBQUFweEgsRUFBQWl5SCxjQUFBanlILEVBQUFpeEgsV0FBQWp4SCxFQUFBb3lILGVBQUFwckksS0FBQXNxSSxTQUFBdHhILEVBQUFpeUgsY0FBQWp5SCxFQUFBaXhILFdBQUFqeEgsRUFBQXF5SCxlQUFBcnJJLEtBQUF3cUksU0FBQSxJQUFBeHFJLEtBQUF1dEMsT0FBQSxJQUFBdnRDLEtBQUErdUIsUUFBQS91QixLQUFBeXFJLG9CQUFBenFJLEtBQUEyekIsSUFBQTIzRyxlQUFBLENBQXNZLElBQUF2dEksRUFBQSxJQUFBbWxCLFlBQUEsVUFBZ0NsSyxFQUFBdXlILFdBQUF2ckksS0FBQWdxSSxTQUFBLEVBQUFoeEgsRUFBQTRzRixLQUFBLE1BQUE1bEcsS0FBQWtxSSxTQUFBbHhILEVBQUFxcUgsY0FBQXRsSSxRQUEyRWliLEVBQUF1eUgsV0FBQXZySSxLQUFBZ3FJLFNBQUEsRUFBQWhxSSxLQUFBa3FJLFNBQUFscUksS0FBQWtxSSxTQUFBbHhILEVBQUFxcUgsY0FBQTFxSCxJQUFpRjNhLEVBQUFnbUksUUFBQTFrSSxVQUFBMG5JLE9BQUEsV0FBdUMsSUFBQXJ1SCxFQUFBM1ksS0FBQTJ6QixJQUFlLE9BQUFoYixFQUFBNDBCLE9BQUEsSUFBQTUwQixFQUFBb1csT0FBQSxTQUFzQyxJQUFBL1YsRUFBQWhaLEtBQUErcUksNEJBQUFodEksR0FBQSxFQUFBQyxFQUFBZ0MsS0FBQW9tRyxVQUFBeXpCLEdBQWdFLE9BQUE3Z0gsRUFBQXUwQixRQUFBdnRDLEtBQUF1dEMsT0FBQXYwQixFQUFBK1YsU0FBQS91QixLQUFBK3VCLFFBQUFoeEIsR0FBQSxFQUFBaUMsS0FBQXV0QyxNQUFBdjBCLEVBQUF1MEIsTUFBQXZ0QyxLQUFBK3VCLE9BQUEvVixFQUFBK1YsT0FBQS91QixLQUFBNHFJLGFBQUFqeUgsRUFBQXV4RyxhQUFBLElBQUFscUgsS0FBQXlxSSxtQkFBQXpxSSxLQUFBMnFJLG1CQUFBaHlILEVBQUF1eEcsYUFBQSxJQUFBbHFILEtBQUE0cUksYUFBQWp5SCxFQUFBeXhHLGVBQUFyc0gsR0FBQSxFQUFBNGEsRUFBQXV4RyxhQUFBLElBQUFscUgsS0FBQXlxSSxrQkFBQTl4SCxFQUFBeXhHLGNBQUFyc0gsR0FBQSxFQUFBNGEsRUFBQXV4RyxhQUFBLElBQUF2eEcsRUFBQTJ5SCxnQkFBQXRySSxLQUFBMHFJLHVCQUFBL3hILEVBQUF2USxTQUFBcEksS0FBQTBxSSxxQkFBQS94SCxFQUFBdlEsT0FBQXJLLEdBQUEsR0FBQWlDLEtBQUE4cUksWUFBQW55SCxFQUFBNnlILFNBQUE3eUgsRUFBQTZ5SCxRQUFBLEVBQUF6dEksR0FBQSxHQUFBQSxHQUFBLEVBQUFBLElBQUFpQyxLQUFBK21JLGNBQUEvb0ksRUFBQXV0SSxXQUFBdnJJLEtBQUFncUksU0FBQSxFQUFBaHFJLEtBQUFrcUksU0FBQWxxSSxLQUFBa3FJLFNBQUFsc0ksRUFBQXFsSSxjQUFBcnFILElBQUFqYixHQUErakJDLEVBQUFnbUksUUFBQTFrSSxVQUFBeW5JLFlBQUEsV0FBNEMsT0FBQS9tSSxLQUFBb21HLFVBQUF5ekIsR0FBQWtOLFlBQUEvbUksS0FBQWdxSSxTQUFBaHFJLEtBQUErcEksT0FBQS9wSSxNQUFvRWhDLEVBQUFnbUksUUFBQTFrSSxVQUFBbXNJLGNBQUEsV0FBOEN6ckksS0FBQW9tRyxVQUFBeXpCLEdBQUFrTixZQUFBL21JLEtBQUFncUksU0FBQSxPQUFrRGhzSSxFQUFBZ21JLFFBQUExa0ksVUFBQW9zSSxpQkFBQSxTQUFBL3lILEVBQUFLLEdBQW9ELElBQUFqYixFQUFBaUMsS0FBQW9tRyxVQUFBeXpCLEdBQXdCbGhILElBQUFoTyxFQUFBeWhHLFFBQUFwc0csS0FBQW9xSSxZQUFBcnNJLEVBQUFxdUcsUUFBQXBzRyxLQUFBb3FJLFlBQUFyc0ksRUFBQTZ0RyxPQUFBNXlGLElBQUFyTyxFQUFBeWhHLFFBQUFwc0csS0FBQXFxSSxZQUFBdHNJLEVBQUFxdUcsUUFBQXBzRyxLQUFBcXFJLFlBQUF0c0ksRUFBQTZ0RyxPQUFBNXJHLEtBQUErbUksY0FBQWhwSSxFQUFBa3RJLGNBQUFsdEksRUFBQWtzSSxXQUFBbHNJLEVBQUFvdEksbUJBQUFuckksS0FBQW9xSSxhQUFBcnNJLEVBQUFrdEksY0FBQWx0SSxFQUFBa3NJLFdBQUFsc0ksRUFBQW10SSxtQkFBQWxySSxLQUFBcXFJLGFBQUFycUksS0FBQXlySSxpQkFBc1R6dEksRUFBQWdtSSxRQUFBMWtJLFVBQUFxc0ksWUFBQSxTQUFBaHpILEVBQUFLLEdBQStDLElBQUFqYixFQUFBaUMsS0FBQW9tRyxVQUFBeXpCLEdBQUE3N0gsRUFBQSxTQUFBMmEsR0FBc0MsV0FBQUEsSUFBQSxJQUFrQlYsRUFBQWphLEVBQUFnQyxLQUFBdXRDLE9BQUFqMUIsRUFBQXRhLEVBQUFnQyxLQUFBdXRDLE9BQWlDNTBCLElBQUFoTyxFQUFBMGhHLE9BQUFwMEYsR0FBQUssRUFBQXRZLEtBQUFzcUksUUFBQXZzSSxFQUFBc3VHLFFBQUE5N0YsUUFBQUMsS0FBQSxpSEFBQXhRLEtBQUFzcUksUUFBQXZzSSxFQUFBd3NJLGVBQUE1eEgsSUFBQWhPLEVBQUE0aEcsT0FBQXQwRixHQUFBSyxFQUFBdFksS0FBQXNxSSxRQUFBdnNJLEVBQUE2dEksaUJBQUFyN0gsUUFBQUMsS0FBQSxpSEFBQXhRLEtBQUFzcUksUUFBQXZzSSxFQUFBd3NJLGVBQUF2cUksS0FBQXNxSSxRQUFBdnNJLEVBQUF3c0ksY0FBQXZ4SCxJQUFBck8sRUFBQTBoRyxPQUFBcDBGLEdBQUFLLEVBQUF0WSxLQUFBd3FJLFFBQUF6c0ksRUFBQXN1RyxRQUFBOTdGLFFBQUFDLEtBQUEsaUhBQUF4USxLQUFBd3FJLFFBQUF6c0ksRUFBQXdzSSxlQUFBdnhILElBQUFyTyxFQUFBNGhHLE9BQUF0MEYsR0FBQUssRUFBQXRZLEtBQUF3cUksUUFBQXpzSSxFQUFBNnRJLGlCQUFBcjdILFFBQUFDLEtBQUEsaUhBQUF4USxLQUFBd3FJLFFBQUF6c0ksRUFBQXdzSSxlQUFBdnFJLEtBQUF3cUksUUFBQXpzSSxFQUFBd3NJLGNBQUF2cUksS0FBQSttSSxjQUFBaHBJLEVBQUFrdEksY0FBQWx0SSxFQUFBa3NJLFdBQUFsc0ksRUFBQXF0SSxlQUFBcHJJLEtBQUFzcUksU0FBQXZzSSxFQUFBa3RJLGNBQUFsdEksRUFBQWtzSSxXQUFBbHNJLEVBQUFzdEksZUFBQXJySSxLQUFBd3FJLFNBQUF4cUksS0FBQXlySSxpQkFBZ2dDenlILEVBQUF4YixRQUFBUSxFQUFBZ21JLFVBQXVCdG9DLG9CQUFBLEdBQUE5QixlQUFBLEtBQXlDeGtCLElBQUEsU0FBQXo4RCxFQUFBSyxFQUFBamIsR0FBc0IsYUFBYSxTQUFBQyxFQUFBMmEsRUFBQUssR0FBZ0JoWixLQUFBdXRDLE1BQUE1MEIsRUFBQTNZLEtBQUErdUIsT0FBQS9WLEVBQUFoWixLQUFBNnJJLFNBQUE3ckksS0FBQThySSxVQUFBLFNBQUFuekgsR0FBb0UsSUFBQUssRUFBQWhaLEtBQUF1dEMsTUFBQXZ0QyxLQUFBK3VCLE9BQTZCLEdBQUFwVyxFQUFBSyxFQUFBLFVBQUEvWSxNQUFBLHVDQUE4RCxRQUFBbEMsRUFBQUMsRUFBQTJNLEVBQUEzSyxLQUFBNnJJLE1BQUF2cUksT0FBQSxFQUFrQ3FKLEdBQUEsSUFBS0EsRUFBQSxDQUFLLElBQUFzTixFQUFBalksS0FBQTZySSxNQUFBbGhJLEdBQW9CLEdBQUFzTixFQUFBM1AsTUFBQXFRLEVBQUFLLEVBQUEsQ0FBZ0JqYixFQUFBa2EsRUFBQWphLEVBQUFpYSxFQUFBb2tHLFVBQWtCLE9BQU8sSUFBQXQrRyxFQUFBLENBQU8sSUFBSUMsRUFBQSxJQUFBbXFILFVBQUFub0gsS0FBQXV0QyxNQUFBdnRDLEtBQUErdUIsUUFBd0MsTUFBQXBXLEdBQVMsSUFBQUwsRUFBQTBlLFNBQUEydEIscUJBQUEsYUFBQTVKLEdBQUF6aUMsRUFBc0RBLE9BQUEwZSxTQUFBQyxjQUFBLFdBQUE2MkUsTUFBQXdLLFFBQUEsT0FBQXRoRixTQUFBaTlELEtBQUE3dUMsWUFBQTlzQyxJQUE0RixJQUFBNWEsRUFBQTRhLEVBQUEvUixXQUFBLE1BQXlCN0ksSUFBQU0sRUFBQU4sRUFBQWsrRyxnQkFBQTU3RyxLQUFBdXRDLE1BQUF2dEMsS0FBQSt1QixTQUFBZ3NCLEdBQUEvakIsU0FBQWk5RCxLQUFBcnZDLFlBQUF0c0MsR0FBaUZ2YSxHQUFHdUssTUFBQSxFQUFBK3pHLFVBQUFyK0csR0FBb0JnQyxLQUFBNnJJLE1BQUFqcEksS0FBQTdFLEdBQW9CLElBQUFxRSxFQUFBckUsRUFBQXVLLE1BQWMsT0FBQXZLLEVBQUF1SyxPQUFBcVEsRUFBQTNhLEVBQUF3dEksUUFBQSxHQUErQm52QixVQUFBcitHLEVBQUFzSyxNQUFBbEcsSUFBc0IsU0FBQXVJLEVBQUFnTyxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEdBQXNCLElBQUFzTixFQUFBVSxFQUFBMGpHLFVBQUEvakcsRUFBQUwsRUFBQThqQyxLQUFBaEIsRUFBQSxFQUFBcGlDLEVBQUFyUSxRQUF5Q2dRLEVBQUF5aUMsS0FBQS9oQyxFQUFBVixFQUFBeWlDLEtBQUFoOUMsRUFBQXVhLEVBQUF5aUMsS0FBQS84QyxFQUFBc2EsRUFBQXlpQyxLQUFBcHdDLEVBQW9DLElBQUFzTixFQUFBVSxFQUFBLGdCQUFBTCxFQUFBSyxFQUFBLHFCQUFpREEsRUFBQSxlQUFBQSxFQUFBLG1CQUFBVixFQUFBNi9GLFdBQUF4NEcsVUFBQXE2RyxxQkFBQSxhQUE4RjFoRyxFQUFBNi9GLFdBQUF4NEcsVUFBQTg2RyxVQUFBLFNBQUF6aEcsR0FBOEMsT0FBQTNZLEtBQUFzNkcsY0FBQXQ2RyxLQUFBeTRHLFVBQUFtRyxXQUFBam1HLEVBQUEzWSxLQUFBdTRHLFdBQUEsR0FBeUUsSUFBQXg5RCxFQUFBLEVBQUFyOUMsRUFBQXE5QyxFQUFBdjdDLEVBQUFvRixLQUFBa21CLEtBQUEsR0FBQXJXLEVBQUEsU0FBQWtFLEdBQXVFM1ksS0FBQWt1RCxLQUFBdjFDLEVBQUEzWSxLQUFBK3JJLGlCQUFBLElBQUEvdEksRUFBdkUsT0FBdUVnQyxLQUFBZ3NJLGlCQUFBLElBQUFodUksRUFBdkUsT0FBdUVnQyxLQUFBaXNJLGlCQUFBLElBQUFqdUksRUFBdkUsT0FBdUVnQyxLQUFBa3NJLGtCQUFBLElBQUFsdUksRUFBdkUsT0FBdUVnQyxLQUFBbXNJLGtCQUFBLElBQUFudUksRUFBdkUsT0FBdUVnQyxLQUFBb3NJLGNBQXFNcHNJLEtBQUFxc0ksYUFBQSxTQUFBMXpILEdBQStCLFNBQUFLLEVBQUFMLEVBQUFLLEVBQUFqYixHQUFrQixTQUFBQyxFQUFBMmEsRUFBQUssRUFBQWpiLEdBQWtCLFFBQUFDLEVBQUEyYSxFQUFBclgsT0FBbUJ0RCxLQUFBLEdBQU8sQ0FBRSxJQUFBMk0sRUFBQWdPLEVBQUEzYSxHQUFXZ2IsRUFBQXJPLElBQUFxTyxFQUFBck8sR0FBQTVNLEVBQUE0TSxJQUFBNU0sRUFBQTRNLEdBQXNCLE9BQU91UixJQUFBbEQsRUFBQXRKLElBQUEzUixHQUFhLElBQUE0TSxFQUFBOHhDLEVBQUFuN0MsT0FBZW03QyxFQUFBNzVDLEtBQUE3RSxHQUFVLFFBQUFrYSxFQUFBamEsRUFBQTJhLEVBQUEsS0FBQUwsRUFBQTFULEtBQUE4SyxJQUFBOUssS0FBQTBFLE1BQUEyTyxFQUFBaUUsSUFBQTYrQixHQUFBLEdBQUEzNEMsRUFBQXdDLEtBQUFzWCxJQUFBdFgsS0FBQW1kLEtBQUE5SixFQUFBdkksSUFBQXFyQyxNQUFBdDVCLEVBQUFuSixFQUEwRm1KLEVBQUFyZixJQUFJcWYsRUFBQXdjLEVBQUF4YyxHQUFBN2UsS0FBQStILEdBQWlCLFFBQUFoTixFQUFBSyxFQUFBZ2IsRUFBQSxLQUFBbGIsRUFBQThHLEtBQUE4SyxJQUFBOUssS0FBQTBFLE1BQUEzTCxFQUFBdWUsSUFBQXhlLEdBQUEsR0FBQXlCLEVBQUF5RixLQUFBc1gsSUFBQXRYLEtBQUFtZCxLQUFBcGtCLEVBQUErUixJQUFBaFMsTUFBQVMsRUFBQUwsRUFBMEZLLEVBQUFnQixJQUFJaEIsRUFBQXk3QixFQUFBejdCLEdBQUF5RSxLQUFBK0gsR0FBd0QsU0FBQTNNLEVBQUEyYSxHQUFjLE9BQXJELFNBQUFBLEVBQUFLLEVBQUFqYixHQUFrQixPQUFBNGEsRUFBQUssSUFBQUwsRUFBQTVhLElBQUE0YSxFQUFtQzVhLENBQUEsSUFBQTRhLEVBQUEsT0FBNm5DLFNBQUF2VyxFQUFBdVcsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxFQUFBb3dDLEVBQUFyOUMsRUFBQTBFLEdBQTRCLFFBQUFxZixFQUFBLElBQW5vQyxTQUFBbkosRUFBQUssRUFBQUssRUFBQWpiLEVBQUFDLEdBQW9CZ0MsS0FBQXNzSSxHQUFBM3pILEVBQUEzWSxLQUFBdXNJLEdBQUF2ekgsRUFBQWhaLEtBQUF3c0ksR0FBQXp1SSxFQUFBaUMsS0FBQXlzSSxHQUFBenVJLEVBQUFnQyxLQUFBMHNJLFlBQUEsV0FBb0UsT0FBTzl5RyxFQUFBNTVCLEtBQUFzc0ksR0FBQTF5RyxFQUFBcUUsRUFBQWorQixLQUFBc3NJLEdBQUFydUcsRUFBQWt1QixHQUFBbnNELEtBQUF5c0ksR0FBQTd5RyxFQUFBd3lCLEdBQUFwc0QsS0FBQXlzSSxHQUFBeHVHLEVBQUExbUIsSUFBQSxHQUFBdlgsS0FBQXVzSSxHQUFBM3lHLEVBQUE1NUIsS0FBQXdzSSxHQUFBNXlHLElBQUE1NUIsS0FBQXNzSSxHQUFBMXlHLEVBQUE1NUIsS0FBQXlzSSxHQUFBN3lHLElBQUEsRUFBQTZpRixJQUFBLEdBQUF6OEcsS0FBQXVzSSxHQUFBdHVHLEVBQUFqK0IsS0FBQXdzSSxHQUFBdnVHLElBQUFqK0IsS0FBQXNzSSxHQUFBcnVHLEVBQUFqK0IsS0FBQXlzSSxHQUFBeHVHLElBQUEsSUFBNkpqK0IsS0FBQTJzSSxVQUFBLFdBQTJCLE9BQUExMEgsRUFBQXFtRyxPQUFBeHlCLElBQUE3ekUsRUFBQXFtRyxPQUFBeHlCLElBQUE5ckYsS0FBQXlzSSxHQUFBenNJLEtBQUFzc0ksSUFBQXIwSCxFQUFBcW1HLE9BQUE3cEUsS0FBQXg4QixFQUFBcW1HLE9BQUF4eUIsSUFBQTlyRixLQUFBd3NJLEdBQUF4c0ksS0FBQXVzSSxJQUFBLElBQUF0ZCxNQUFBLEdBQTBHanZILEtBQUFxQixNQUFBLFNBQUFzWCxHQUF3QixJQUFBSyxFQUFBZixFQUFBcW1HLE9BQUFsakIsS0FBQXA3RixLQUFBc3NJLEdBQUF0c0ksS0FBQXVzSSxHQUFBNXpILEdBQUE1YSxFQUFBa2EsRUFBQXFtRyxPQUFBbGpCLEtBQUFwN0YsS0FBQXVzSSxHQUFBdnNJLEtBQUF3c0ksR0FBQTd6SCxHQUFBM2EsRUFBQWlhLEVBQUFxbUcsT0FBQWxqQixLQUFBcGlGLEVBQUFqYixFQUFBNGEsR0FBaUczWSxLQUFBd3NJLEdBQUF2MEgsRUFBQXFtRyxPQUFBbGpCLEtBQUFwN0YsS0FBQXdzSSxHQUFBeHNJLEtBQUF5c0ksR0FBQTl6SCxHQUFBM1ksS0FBQXVzSSxHQUFBdDBILEVBQUFxbUcsT0FBQWxqQixLQUFBcjlGLEVBQUFpQyxLQUFBd3NJLEdBQUE3ekgsR0FBNEUsSUFBQWhPLEVBQUFzTixFQUFBcW1HLE9BQUFsakIsS0FBQXA5RixFQUFBZ0MsS0FBQXVzSSxHQUFBNXpILEdBQUFvaUMsRUFBQSxJQUFBemlDLEVBQUF0WSxLQUFBc3NJLEdBQUF0ekgsRUFBQWhiLEVBQUEyTSxHQUF3RCxPQUFBM0ssS0FBQXNzSSxHQUFBM2hJLEVBQUFvd0MsR0FBbUIvNkMsS0FBQTRzSSxpQkFBQSxXQUFrQyxJQUFBajBILEVBQUFWLEVBQUFxbUcsT0FBQXh5QixJQUFBOXJGLEtBQUF1c0ksR0FBQXZzSSxLQUFBc3NJLElBQUF0ekgsRUFBQWYsRUFBQXFtRyxPQUFBeHlCLElBQUE3ekUsRUFBQXFtRyxPQUFBeHlCLElBQUE5ckYsS0FBQXdzSSxHQUFBeHNJLEtBQUF1c0ksSUFBQTV6SCxHQUFBNWEsRUFBQWthLEVBQUFxbUcsT0FBQXh5QixJQUFBN3pFLEVBQUFxbUcsT0FBQXh5QixJQUFBN3pFLEVBQUFxbUcsT0FBQXh5QixJQUFBOXJGLEtBQUF5c0ksR0FBQXpzSSxLQUFBd3NJLElBQUE3ekgsR0FBQVYsRUFBQXFtRyxPQUFBN3BFLEtBQUF6N0IsRUFBQSxJQUFBaGIsS0FBQTJNLEVBQUFxTyxFQUFBNGdCLEVBQUE3N0IsRUFBQWtnQyxFQUFBamxCLEVBQUFpbEIsRUFBQWxnQyxFQUFBNjdCLEVBQTRMLE9BQUFqdkIsRUFBQSxDQUFVLElBQUEyTixFQUFBSyxFQUFBaWhCLEVBQUE3N0IsRUFBQWtnQyxFQUFBdGxCLEVBQUFzbEIsRUFBQWxnQyxFQUFBNjdCLEVBQUFtaEIsRUFBQXBpQyxFQUFBaWhCLEVBQUE1Z0IsRUFBQWlsQixFQUFBdGxCLEVBQUFzbEIsRUFBQWpsQixFQUFBNGdCLEVBQUFsOEIsRUFBQTRhLElBQUEsRUFBQTNOLEVBQUFvd0MsRUFBb0QsR0FBQXI5QyxHQUFBLEdBQVNpTixFQUFBLElBQUFBLEtBQUEyTixLQUFBeWlDLE1BQXNCLElBQUEzNEMsRUFBQXdDLEtBQUFrbUIsS0FBQXB0QixHQUFBK2pCLElBQUFuSixFQUFBbFcsSUFBQSxFQUFBdUksR0FBQWhOLElBQUEyYSxFQUFBbFcsSUFBQSxFQUFBdUksR0FBaUQ4VyxFQUFBLEdBQUFBLEVBQUEsSUFBQXpqQixFQUFBNEUsS0FBQTVDLEtBQUFxQixNQUFBb2dCLElBQUE5akIsRUFBQSxLQUFBQSxJQUFBLEVBQUE4akIsSUFBQTlqQixFQUFBLEdBQUFBLEVBQUEsR0FBQUssRUFBQTRFLEtBQUE1QyxLQUFBcUIsTUFBQTFELEtBQW1GLE9BQUFLLEVBQUE0RSxLQUFBNUMsTUFBQWhDLEdBQW1ELEtBQUFpYSxFQUFBcW1HLE9BQUEzbEcsRUFBQUssR0FBQSxJQUFBZixFQUFBcW1HLE9BQUF2Z0gsRUFBQUMsR0FBQSxJQUFBaWEsRUFBQXFtRyxPQUFBM3pHLEVBQUFvd0MsR0FBQSxJQUFBOWlDLEVBQUFxbUcsT0FBQTVnSCxFQUFBMEUsSUFBQXdxSSxtQkFBQWp2SSxLQUFBRyxFQUFBLEdBQUEwQixFQUFBTCxFQUFBLEVBQTRIQSxFQUFBc2lCLEVBQUFuZ0IsT0FBV25DLElBQUEsQ0FBSyxRQUFBaEIsRUFBQXNXLEVBQUFnTixFQUFBdGlCLEdBQUFYLFFBQXNCTCxFQUFBTCxFQUFBMlcsRUFBQWs0SCxjQUFBLE9BQTZCLENBQUUsSUFBQWx0SSxFQUFBbUYsS0FBQUssSUFBQTlHLEVBQUEsS0FBQVMsRUFBQTZWLEVBQUFwVCxNQUFBNUIsR0FBQTY4QyxFQUFBN25DLEVBQUFwVCxNQUFBLEVBQUE1QixHQUFBLEVBQUFBLElBQXdEOUIsRUFBQWlGLEtBQUFoRSxHQUFBSixFQUFBb0UsS0FBQTZSLEtBQUE2bkMsRUFBd0JuK0MsRUFBQSxHQUFBUixFQUFBaUYsS0FBQTZSLEVBQUFwVCxNQUFBLEtBQUExRCxFQUFBaUYsS0FBQTZSLEdBQUEzUSxNQUFBeEUsVUFBQXNELEtBQUEwRSxNQUFBM0osRUFBQWEsRUFBQWlrQixXQUE2RSxPQUFBOWtCLEVBQVMsU0FBQThqQixFQUFBOUksRUFBQTVhLEVBQUFDLEVBQUEyTSxHQUFvQnFPLEdBQUFMLEVBQUEzYSxJQUFBRCxFQUFBNE0sSUFBZWl2QixFQUFBamhCLEVBQUFzbEIsRUFBQWxnQyxFQUFBd1osSUFBQW9CLEVBQUEzYSxHQUFBLEVBQUF5K0csSUFBQTErRyxFQUFBNE0sR0FBQSxJQUFnQyxTQUFBaE4sRUFBQWdiLEVBQUFLLEVBQUFqYixFQUFBQyxHQUFvQixPQUFBNEcsS0FBQXNWLElBQUFuYyxFQUFBNGEsR0FBQSxNQUFBL1QsS0FBQXNWLElBQUFsYyxFQUFBZ2IsR0FBQSxLQUE4QyxTQUFBbGIsRUFBQTZhLEVBQUFLLEVBQUFqYixHQUFrQixRQUFBQyxFQUFBMmEsRUFBQXJYLE9BQUEyVyxFQUFBZSxFQUFBOHlILFVBQUE5dEksR0FBQXNhLEVBQUFMLEVBQUEzUCxNQUFBeXlDLEVBQUEsRUFBQXI5QyxFQUFBLEVBQXNEQSxFQUFBTSxJQUFJTixFQUFBcTlDLEdBQUFwaUMsRUFBQWpiLEdBQUE0RCxPQUFtQixRQUFBYyxFQUFBckUsRUFBQSt0SSxVQUFBL3dGLEdBQUF0NUIsRUFBQSxFQUE2QkEsRUFBQXpqQixJQUFJeWpCLEVBQUEsQ0FBSyxJQUFBOWpCLEVBQUFnYixFQUFBOEksR0FBQTNqQixFQUFBSCxFQUFBMkQsT0FBQW5DLEVBQUFpRCxFQUFBa0csTUFBZ0NxQyxFQUFBc04sRUFBQTlZLEdBQUEsTUFBQUEsRUFBQXJCLEdBQUEsTUFBQUEsR0FBMkIsUUFBQUssRUFBQSxFQUFZQSxFQUFBTCxJQUFJSyxFQUFBLENBQUssSUFBQXFCLEVBQUE3QixFQUFBUSxHQUFBdStDLEVBQWEveEMsRUFBQXZJLEVBQUE1QyxHQUFBLE1BQUFBLEVBQUEsTUFBcUIsT0FBT3F0SSxjQUFBenFJLEVBQUEwcUksVUFBQXgwSCxFQUFBeTBILGFBQUE5MEgsR0FBNEMsSUFBQTlZLEVBQUFhLEtBQUFvc0ksV0FBQXp6SCxFQUFBclEsT0FBK0IsR0FBQW5KLEVBQUEsT0FBQUEsRUFBYyxJQUFBaEIsRUFBQXdhLEVBQUEycEQsaUJBQUE3dEQsRUFBQXRXLEVBQUFndUQsR0FBQTN0RCxFQUFBTCxFQUFBaXVELEdBQUEzc0QsRUFBQXRCLEVBQUFrdUQsR0FBQTUzQyxFQUFBN1YsRUFBQVQsRUFBQW11RCxHQUFBOXRELEVBQUE4OUMsRUFBQTNqQyxFQUFBKzFDLEtBQUFuQyxTQUEyRSxPQUFBOXNELEdBQUEsSUFBQWIsSUFBQTA5QyxFQUFBaDdDLE9BQUEsT0FBQXRCLEtBQUFvc0ksV0FBQXp6SCxFQUFBclEsVUFBOEQsSUFBQWt0QyxFQUFBaUgsS0FBQTdpQixLQUFBcUUsS0FBcUIsSUFBQXVYLEVBQUF1RixFQUFBLEVBQVV2RixHQUFBLElBQUtBLEVBQUF2WCxFQUFBcjdCLFNBQWUsSUFBQTR5QyxFQUFBOTNDLEVBQUEsRUFBVTgzQyxHQUFBLElBQUtBLEVBQUE1YixFQUFBaDNCLFNBQWUsUUFBQXM3QixFQUFBMGUsRUFBQTFzQyxFQUFBK3NDLEVBQUFDLEVBQUEsRUFBb0JBLEVBQUFaLEVBQUFoN0MsU0FBVzQ3QyxFQUFBLENBQUssSUFBQUMsRUFBQWIsRUFBQVksR0FBQUUsR0FBQUQsRUFBQXZqQixFQUFBbmxCLEdBQUFoVixFQUFBNDlDLEdBQUFGLEVBQUFsZixFQUFBei9CLEdBQUFJLEVBQW1DLElBQUFqQixFQUFBdWdDLEVBQUEwZSxFQUFBUSxFQUFBQyxHQUFBLENBQWdCLE9BQUFGLEVBQUFsdkMsTUFBZSxRQUFBaUMsRUFBQWt0QyxFQUFBSCxFQUFBSSxFQUFnQixNQUFNLFFBQUE1N0IsRUFBQXljLEVBQUEwZSxFQUFBUSxFQUFBQyxHQUFtQixNQUFNLFlBQUFDLEdBQUFILEVBQUFnUCxHQUFBMTNDLEdBQUFoVixFQUFBODlDLEdBQUFKLEVBQUFpUCxHQUFBNXRELEdBQUFJLEVBQXNDb2EsR0FBQWtsQixFQUFBa2YsRUFBQUUsSUFBQVYsRUFBQVMsRUFBQUUsSUFBbUIzakIsRUFBQXNFLEVBQUFELEVBQUEyZSxFQUFBcmxDLEdBQUErbEMsRUFBQW0vRCxHQUFBbC9ELElBQW9CLE1BQU0sUUFBQTUvQyxFQUFBdWdDLEVBQUEwZSxFQUFBMXNDLEVBQUErc0MsR0FBQVIsRUFBQTc1QyxNQUEyQmczQixFQUFBc0UsRUFBQUQsRUFBQTJlLEtBQVFuN0IsRUFBQXljLEVBQUEwZSxFQUFBMXNDLEVBQUErc0MsR0FBQVIsRUFBQTc1QyxNQUFzQmczQixFQUFBMXBCLEVBQUErdEIsRUFBQWdmLEtBQVcsTUFBTSxnQkFBQU8sR0FBQUwsRUFBQWdQLEdBQUExM0MsR0FBQWhWLEVBQUFnK0MsR0FBQU4sRUFBQWlQLEdBQUE1dEQsR0FBQUksRUFBQTgrQyxHQUFBUCxFQUFBa1AsR0FBQTUzQyxHQUFBaFYsRUFBQWsrQyxHQUFBUixFQUFBbVAsR0FBQTl0RCxHQUFBSSxFQUFBaS9DLEVBQUF6N0MsRUFBQTg3QixFQUFBMGUsRUFBQVksRUFBQUMsRUFBQUMsRUFBQUMsRUFBQVAsRUFBQUMsR0FBQVcsRUFBQSxFQUE2RkEsRUFBQUgsRUFBQXY4QyxPQUFXMDhDLElBQUEsQ0FBSyxJQUFBRixFQUFBRCxFQUFBRyxHQUFBMHVGLGNBQXlCMXpILEdBQUE4a0MsRUFBQWxrQixFQUFBa2tCLEVBQUFxTyxHQUFBck8sRUFBQXZtQyxLQUFBdW1DLEVBQUE3ZixFQUFBNmYsRUFBQXNPLEdBQUF0TyxFQUFBMitELElBQUEzK0QsR0FBcUMsTUFBTSxrQkFBQTc5QyxNQUFBLHlCQUFBazlDLEVBQUFsdkMsTUFBeURpd0IsRUFBQWtmLEVBQUFSLEVBQUFTLEdBQVMsUUFBQXozQixFQUFBNjJCLEVBQUFuN0MsT0FBQTg2QyxFQUFBcDhDLEtBQUErckksaUJBQUFELFVBQUFsbUgsR0FBQTgyQixFQUFBTixFQUFBOXpDLE1BQUFxMEMsRUFBQSxFQUFzRUEsRUFBQS8yQixJQUFJKzJCLEVBQUEsQ0FBSyxJQUFBTixFQUFBSSxFQUFBRSxHQUFXaHlDLEVBQUF5eEMsRUFBQXArQyxFQUFBcStDLEVBQUF6aUIsR0FBQTU3QixFQUFBcStDLEVBQUFwZSxHQUFBamdDLEVBQUFxK0MsRUFBQTlrQyxJQUFBdlosRUFBQXErQyxFQUFBb2dFLEtBQW1DLE9BQUF0OUcsRUFBQWEsS0FBQW9zSSxXQUFBenpILEVBQUFyUSxRQUFtQzBrSSxNQUFBcjBILEVBQUFzMEgsWUFBQTl1SSxFQUFBZ3VELElBQUFodUQsRUFBQWl1RCxHQUFBanVELEVBQUFrdUQsSUFBQWx1RCxFQUFBbXVELElBQUE0Z0YsZ0JBQUE5d0YsRUFBQSt3RixRQUFBMXdGLEVBQUEyd0YsUUFBQXR2SSxFQUFBbWdDLEVBQUFqK0IsS0FBQWdzSSxpQkFBQWhzSSxLQUFBa3NJLG1CQUFBbUIsUUFBQXZ2SSxFQUFBODdCLEVBQUE1NUIsS0FBQWlzSSxpQkFBQWpzSSxLQUFBbXNJLHFCQUEyTG1CLGFBQUFudUksRUFBQWl1SSxRQUFBTixVQUFBM3RJLEVBQUFrdUksUUFBQVAsV0FBQTN0SSxJQUE2RDhZLEVBQUE2L0YsV0FBQXg0RyxVQUFBKzZHLFlBQUEsU0FBQTFoRyxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEdBQXVELEtBQUEzTSxHQUFBMk0sSUFBQTNLLEtBQUFxNUcsUUFBQSxDQUEwQixJQUFBcjVHLEtBQUFzNkcsY0FBQSxPQUFBL3BHLFFBQUFuTCxJQUFBLDRDQUFBdVQsRUFBd0ZBLEVBQUEvVixPQUFTLElBQUFwRCxFQUFBUSxLQUFBbytILGNBQUE1L0gsRUFBQXdCLEtBQUFvNUcsVUFBQTM1RyxFQUFBTyxLQUFBdTVILFNBQTBEdjVILEtBQUFvK0gsY0FBQSxLQUFBcCtILEtBQUFvNUcsV0FBQSxFQUFBcDVHLEtBQUF1NUgsU0FBQWpoSCxFQUFBNHpGLFFBQWtFLElBQUF0dEcsRUFBQW9CLEtBQUF5NEcsVUFBQXZxRCxLQUFBNVIsRUFBQXQ4QyxLQUFBeTRHLFVBQUE4MEIsVUFBcURqeEYsTUFBQXQ4QyxLQUFBeTRHLFVBQUE4MEIsVUFBQSxJQUFBOTRILEVBQUE3VixJQUF5QyxJQUFBNDJDLEVBQUF4MUMsS0FBQXk0RyxVQUFBa1osaUJBQUEzeEgsS0FBQWdaLEVBQUFqYixFQUFBQyxHQUFBeStDLEVBQUF6OEMsS0FBQXU0RyxVQUFBMytFLEVBQUE2aUIsRUFBQTc5QyxFQUFBODhELFdBQW9GMTdELEtBQUE0OEcsVUFBQXBuRSxFQUFBNWIsRUFBQTRiLEVBQUF2WCxFQUFBLEdBQUFqK0IsS0FBQWc3RyxNQUFBcGhGLElBQUEsR0FBNEMsSUFBQXFFLEVBQUFqK0IsS0FBQTY1SCxHQUFBMzdGLEdBQUFsK0IsS0FBQTRqSSxtQkFBQWhuRixFQUFBNThDLEtBQUFxNUgsY0FBQXI1SCxLQUFBMmpJLGtCQUFxRnpsRyxJQUFBMGUsRUFBQXE3RSxXQUFBLGtCQUFoNkksUUFBZzZJcjdFLEVBQUFxN0UsV0FBQSxtQkFBaDZJLFFBQWc2SXI3RSxFQUFBcTdFLFdBQUEsb0JBQWg2SSxRQUFnNklyN0UsRUFBQXE3RSxXQUFBLGFBQUFsOUUsRUFBQXI5QyxLQUFBc0MsS0FBQTQ1SCxpQkFBQTU1SCxLQUFBazRILGNBQWdNLElBQUFob0gsRUFBQWxRLEtBQUFvL0gsTUFBQTROLE1BQXVCLElBQUE5OEgsRUFBQSxDQUFPLElBQUErc0MsRUFBQWo5QyxLQUFBd3RJLFVBQUEsSUFBQXYxSCxFQUFBZzhHLFNBQUEsZUFBbUQsUUFBQXQ3RyxFQUFBLEVBQVlBLEdBQUEsRUFBS0EsSUFBQSxRQUFBSyxFQUFBLEVBQWdCQSxHQUFBLEVBQUtBLElBQUFoWixLQUFBbzBILFNBQUF4eEgsS0FBQSxJQUFBcVYsRUFBQXFtRyxPQUFBdGxHLEVBQUFMLEVBQUEsSUFBQTNZLEtBQUFxMEgsSUFBQXp4SCxLQUFBb1csRUFBQUwsS0FBaUVza0MsRUFBQXEzRSxlQUFBQyxpQkFBQXJrSCxFQUFBbFEsS0FBQTZzQyxjQUFBLFFBQUFvUSxHQUFrRWo5QyxLQUFBcytILFlBQUFwdUgsRUFBQXN0SCxhQUFBdi9GLEVBQUFzZ0csY0FBQTNoRixFQUFBNmhGLGFBQUE3aEYsRUFBQXV4RSxXQUFBa1EsVUFBQWg0RSxTQUFBLEVBQUFwb0IsRUFBQXlnRyxPQUFBLE9BQUExK0gsS0FBQXMrSCxZQUFBcHVILEVBQUFxdkgsWUFBQXRoRyxFQUFBMGhHLHNCQUFBMy9ILEtBQUFzK0gsWUFBQXB1SCxFQUFBd3RILFNBQUF6L0YsRUFBQXNnRyxjQUFBM2hGLEVBQUE2aEYsYUFBQTdoRixFQUFBdXhFLFdBQUF5USxVQUFBdjRFLFNBQUEsRUFBQXBvQixFQUFBeWdHLE9BQUEsT0FBQTloRixFQUFBcTdFLFdBQUEsaUJBQUFqNEgsS0FBQWs0SCxjQUFzVSxJQUFJLFFBQUFoN0UsRUFBQSxFQUFBQyxFQUFBLEtBQUFDLEdBQUEsRUFBQUMsRUFBQXorQyxFQUFBOHVGLGVBQUExMEUsR0FBQXNrQyxFQUFBLEVBQWtEQSxFQUFBRCxFQUFBLzdDLFNBQVdnOEMsRUFBQSxDQUFLLElBQUFDLEVBQUFGLEVBQUFDLEdBQVdILElBQUFELEdBQUF0K0MsRUFBQXlzRixnQkFBQWx1QyxFQUFBSSxJQUErQixJQUFBQyxFQUFBbEIsRUFBQSt2RixhQUFBOXVGLEdBQXdCLEdBQUFDLEVBQUF5dkYsV0FBQSxDQUFpQixJQUFBeHZGLEVBQUFELEVBQUE2dkYsUUFBQTN2RixFQUFBRixFQUFBNHZGLFFBQTRCeHdGLEVBQUFxN0UsV0FBQSxrQkFBQXo2RSxFQUFBMHZGLGdCQUFBN3dCLFdBQUF6L0QsRUFBQXE3RSxXQUFBLHFCQUFBeDZFLEVBQUFvdkYsY0FBQXh3QixXQUFBei9ELEVBQUFxN0UsV0FBQSxlQUFBeDZFLEVBQUFzdkYsYUFBQTF3QixXQUFBei9ELEVBQUFxN0UsV0FBQSxxQkFBQXY2RSxFQUFBbXZGLGNBQUF4d0IsV0FBQXovRCxFQUFBcTdFLFdBQUEsZUFBQXY2RSxFQUFBcXZGLGFBQUExd0IsV0FBQXovRCxFQUFBcTdFLFdBQUEsY0FBQXo2RSxFQUFBOHZGLGFBQUExd0YsRUFBQXE3RSxXQUFBLGFBQUF6NkUsRUFBQXl2RixZQUFBcndGLEVBQUFxN0UsV0FBQSxlQUFBLzZFLEdBQUFFLEVBQUFSLEVBQUE2cEYsZ0JBQUFycEYsR0FBQSxFQUFBUixFQUFBMjRFLGNBQUF0M0YsRUFBQThoRyxhQUFBOWhHLEVBQUFxcUUsVUFBQSxFQUFBdG9HLEtBQUE2NUgsR0FBQW1HLGVBQUEsR0FBbWY5aUYsR0FBQUssRUFBQTRULGFBQUFoVSxFQUFBSSxHQUF1QixRQUFRWCxFQUFBODRFLGVBQUExMUgsS0FBQW8rSCxjQUFBNStILEVBQUFRLEtBQUFvNUcsVUFBQTU2RyxFQUFBd0IsS0FBQXU1SCxTQUFBOTVILEVBQUFrWixFQUFBbTRDLE1BQStFLE9BQUE5d0QsS0FBQWsyRyxPQUFBbEcsY0FBQSxFQUFBcjNGLE1BQXlDK2lGLG9CQUFBLEdBQUE5QixlQUFBLEdBQUE2ekMsa0JBQUEsR0FBQWxKLGNBQUEsVUFBb0YsSUFkN2haLENBYzZoWix1Q0NidjJaLElBQUFtSixNQUF3QkMsU0FBQSxVQUV4QixTQUFBOXlGLEdBQ0EsYUFHQSxJQUFBa1MsRUFBQSxTQUFBNmdGLEVBQUFydkUsR0FDQSxJQUFBcXZFLEVBQXFCLE1BQUFydkUsR0FBQSxvQkFJckJzdkUsRUFBQSxTQUFBQyxFQUFBQyxFQUFBQyxHQUNBLE9BQUFGLEVBQUF2dUksZUFBQXd1SSxHQUNBRCxFQUFBQyxHQUVBQyxHQUtBQyxHQUFBLEVBQ0FDLEVBQUEsRUFDQUMsRUFBQSxXQUNBLEdBQUFGLEVBRUEsT0FEQUEsR0FBQSxFQUNBQyxFQUVBLElBQUE1eEYsRUFBQSxFQUFBMTNDLEtBQUFpN0IsU0FBQSxFQUNBMlYsRUFBQSxFQUFBNXdDLEtBQUFpN0IsU0FBQSxFQUNBcmhDLEVBQUE4OUMsSUFBQTlHLElBQ0EsTUFBQWgzQyxLQUFBLFNBQUEydkksSUFDQSxJQUFBcHdJLEVBQUE2RyxLQUFBa21CLE1BQUEsRUFBQWxtQixLQUFBUSxJQUFBNUcsTUFHQSxPQUZBMHZJLEVBQUExNEYsRUFBQXozQyxFQUNBa3dJLEdBQUEsRUFDQTN4RixFQUFBditDLEdBSUFxd0ksRUFBQSxTQUFBQyxFQUFBQyxHQUFnQyxPQUFBRCxFQUFBRixJQUFBRyxHQUdoQ0MsRUFBQSxTQUFBcHZJLEdBQ0EsZUFBQWczQyxNQUFBaDNDLEdBQTZDLFNBQzdDLHVCQUFBeThDLFlBQUEsQ0FHQSxJQURBLElBQUF4dUMsRUFBQSxJQUFBdEosTUFBQTNFLEdBQ0F6QixFQUFBLEVBQWtCQSxFQUFBeUIsRUFBSXpCLElBQU0wUCxFQUFBMVAsR0FBQSxFQUM1QixPQUFBMFAsRUFFQSxXQUFBb2hJLGFBQUFydkksSUFNQXN2SSxFQUFBLFNBQUF0dkksRUFBQW5CLEVBQUF5QixHQUdBLElBRkEsSUFBQWl2SSxPQUFBLElBQUFqdkksRUFDQW02QixLQUNBbDhCLEVBQUEsRUFBZ0JBLEVBQUF5QixFQUFJekIsSUFBQSxDQUVwQixJQURBLElBQUFpeEksS0FDQXZzSSxFQUFBLEVBQWtCQSxFQUFBcEUsRUFBSW9FLElBQ3RCc3NJLEVBQ0FDLEVBQUEvckksS0FBQW5ELEdBRUFrdkksRUFBQS9ySSxLQUFBd3JJLEVBQUEsU0FHQXgwRyxFQUFBaDNCLEtBQUErckksR0FFQSxPQUFBLzBHLEdBSUFnMUcsRUFBQSxTQUFBemlGLEVBQUFFLEdBR0EsSUFGQSxJQUFBblAsRUFBQWlQLEVBQUE3cUQsT0FDQXRELEVBQUEsRUFDQU4sRUFBQSxFQUFnQkEsRUFBQXcvQyxFQUFJeC9DLElBQUEsQ0FDcEIsSUFBQW14SSxFQUFBMWlGLEVBQUF6dUQsR0FDQW94SSxFQUFBemlGLEVBQUEzdUQsR0FDQU0sSUFBQTZ3SSxFQUFBQyxJQUFBRCxFQUFBQyxHQUVBLE9BQUE5d0ksR0FrQkErd0ksRUFBQSxTQUFBN3hGLEVBQUE4eEYsRUFBQUMsR0FDQSxJQUFBQyxFQUFBdHFJLEtBQUFrbUIsS0FBQW95QixFQUFBNTdDLFFBQ0F1OEMsRUFBQWo1QyxLQUFBMEUsTUFBQTRsSSxHQUNBbmlGLEVBQUFsUCxJQUFBcXhGLEVBQUEsNENBS0EsSUFKQSxJQUFBQyxFQUFBdnFJLEtBQUFRLElBQUE0cEksR0FDQWx4RixFQUFBeXdGLEVBQUExd0YsS0FFQXV4RixFQUFBYixFQUFBMXdGLEdBQ0FuZ0QsRUFBQSxFQUFnQkEsRUFBQW1nRCxFQUFJbmdELElBQUEsQ0FVcEIsSUFUQSxJQUFBMnhJLEdBQUFubkksSUFDQW9uSSxFQUFBcG5JLElBQ0ErN0csRUFBQSxFQUNBeDVHLEdBQUEsRUFLQThrSSxFQUFBLEdBQ0E5a0ksR0FBQSxDQUtBLElBREEsSUFBQStrSSxFQUFBLEVBQ0FwdEksRUFBQSxFQUFvQkEsRUFBQXk3QyxFQUFJejdDLElBQUEsQ0FDeEIsSUFBQXF0SSxFQUFBN3FJLEtBQUF3WixLQUFBOCtCLEVBQUF4L0MsRUFBQW1nRCxFQUFBejdDLEdBQUE2aEgsR0FDQXZtSCxJQUFBMEUsSUFBcUJxdEksRUFBQSxHQUNyQkwsRUFBQWh0SSxHQUFBcXRJLEVBQ0FELEdBQUFDLEVBR0EsSUFBQUMsRUFBQSxFQUNBLElBQUF0dEksRUFBQSxFQUFvQkEsRUFBQXk3QyxFQUFJejdDLElBQUEsQ0FDeEJxdEksRUFBQUwsRUFBQWh0SSxHQUFBb3RJLEVBQ0FKLEVBQUFodEksR0FBQXF0SSxFQUNBQSxFQUFBLE9BQUFDLEdBQUFELEVBQUE3cUksS0FBQVEsSUFBQXFxSSxJQUlBQyxFQUFBUCxHQUdBRSxFQUFBcHJCLEVBQ0FxckIsSUFBQXBuSSxJQUFvQys3RyxHQUFBLEVBQ3BCQSxLQUFBcXJCLEdBQUEsSUFJaEJBLEVBQUFyckIsRUFDQW9yQixLQUFBbm5JLElBQXFDKzdHLEdBQUEsRUFDckJBLEtBQUFvckIsR0FBQSxHQUloQkUsSUFDQTNxSSxLQUFBc1YsSUFBQXcxSCxFQUFBUCxHQUFBRixJQUE2Q3hrSSxHQUFBLEdBQzdDOGtJLEdBMUNBLEtBMEM2QjlrSSxHQUFBLEdBSzdCLElBQUFySSxFQUFBLEVBQWtCQSxFQUFBeTdDLEVBQUl6N0MsSUFBTTA3QyxFQUFBcGdELEVBQUFtZ0QsRUFBQXo3QyxHQUFBZ3RJLEVBQUFodEksR0FLNUIsSUFBQXV0SSxFQUFBcEIsRUFBQTF3RixLQUNBK3hGLEVBQUEsRUFBQS94RixFQUNBLElBQUFuZ0QsRUFBQSxFQUFnQkEsRUFBQW1nRCxFQUFJbmdELElBQ3BCLElBQUEwRSxFQUFBLEVBQWtCQSxFQUFBeTdDLEVBQUl6N0MsSUFDdEJ1dEksRUFBQWp5SSxFQUFBbWdELEVBQUF6N0MsR0FBQXdDLEtBQUE4SyxLQUFBb3VDLEVBQUFwZ0QsRUFBQW1nRCxFQUFBejdDLEdBQUEwN0MsRUFBQTE3QyxFQUFBeTdDLEVBQUFuZ0QsSUFBQWt5SSxFQUFBLFFBSUEsT0FBQUQsR0FJQSxTQUFBcjVFLEVBQUExOEIsR0FBb0IsT0FBQUEsRUFBQSxJQUFBQSxFQUFBLE9BRXBCLElBQUFpMkcsRUFBQSxTQUFBL0IsR0FDQUEsUUFDQTl0SSxLQUFBZ3ZJLFdBQUFuQixFQUFBQyxFQUFBLGlCQUNBOXRJLEtBQUE4dkksSUFBQWpDLEVBQUFDLEVBQUEsU0FDQTl0SSxLQUFBK3ZJLFFBQUFsQyxFQUFBQyxFQUFBLGNBRUE5dEksS0FBQWd3SSxLQUFBLEdBR0FILEVBQUF2d0ksV0FJQTJ3SSxZQUFBLFNBQUFyeUYsR0FDQSxJQUFBQyxFQUFBRCxFQUFBdDhDLE9BQ0E0N0MsRUFBQVUsRUFBQSxHQUFBdDhDLE9BQ0F5ckQsRUFBQWxQLEVBQUEsMkNBQ0FrUCxFQUFBN1AsRUFBQSx3Q0FDQSxJQUFBZ3pGLEVBL0dBLFNBQUF0eUYsR0FHQSxJQUZBLElBQUFDLEVBQUFELEVBQUF0OEMsT0FDQXcrQixFQUFBeXVHLEVBQUExd0YsS0FDQW5nRCxFQUFBLEVBQWdCQSxFQUFBbWdELEVBQUluZ0QsSUFDcEIsUUFBQTBFLEVBQUExRSxFQUFBLEVBQW9CMEUsRUFBQXk3QyxFQUFJejdDLElBQUEsQ0FDeEIsSUFBQXBFLEVBQUE0d0ksRUFBQWh4RixFQUFBbGdELEdBQUFrZ0QsRUFBQXg3QyxJQUNBMDlCLEVBQUFwaUMsRUFBQW1nRCxFQUFBejdDLEdBQUFwRSxFQUNBOGhDLEVBQUExOUIsRUFBQXk3QyxFQUFBbmdELEdBQUFNLEVBR0EsT0FBQThoQyxFQXFHQXF3RyxDQUFBdnlGLEdBQ0E1OUMsS0FBQTg5QyxFQUFBaXhGLEVBQUFtQixFQUFBbHdJLEtBQUFndkksV0FBQSxNQUNBaHZJLEtBQUE2OUMsSUFDQTc5QyxLQUFBb3dJLGdCQU1BQyxhQUFBLFNBQUFuekYsR0FDQSxJQUFBVyxFQUFBWCxFQUFBNTdDLE9BQ0F5ckQsRUFBQWxQLEVBQUEsMkNBR0EsSUFEQSxJQUFBcXlGLEVBQUEzQixFQUFBMXdGLEtBQ0FuZ0QsRUFBQSxFQUFrQkEsRUFBQW1nRCxFQUFJbmdELElBQ3RCLFFBQUEwRSxFQUFBMUUsRUFBQSxFQUFzQjBFLEVBQUF5N0MsRUFBSXo3QyxJQUFBLENBQzFCLElBQUFwRSxFQUFBay9DLEVBQUF4L0MsR0FBQTBFLEdBQ0E4dEksRUFBQXh5SSxFQUFBbWdELEVBQUF6N0MsR0FBQXBFLEVBQ0FreUksRUFBQTl0SSxFQUFBeTdDLEVBQUFuZ0QsR0FBQU0sRUFHQWdDLEtBQUE4OUMsRUFBQWl4RixFQUFBbUIsRUFBQWx3SSxLQUFBZ3ZJLFdBQUEsTUFDQWh2SSxLQUFBNjlDLElBQ0E3OUMsS0FBQW93SSxnQkFJQUEsYUFBQSxXQUVBcHdJLEtBQUEyN0MsRUFBQTh5RixFQUFBenVJLEtBQUE2OUMsRUFBQTc5QyxLQUFBOHZJLEtBQ0E5dkksS0FBQXN3SSxNQUFBN0IsRUFBQXp1SSxLQUFBNjlDLEVBQUE3OUMsS0FBQTh2SSxJQUFBLEdBQ0E5dkksS0FBQXV3SSxNQUFBOUIsRUFBQXp1SSxLQUFBNjlDLEVBQUE3OUMsS0FBQTh2SSxJQUFBLEdBQ0E5dkksS0FBQWd3SSxLQUFBLEdBSUFRLFlBQUEsV0FDQSxPQUFBeHdJLEtBQUEyN0MsR0FJQWg1QixLQUFBLFdBQ0EzaUIsS0FBQWd3SSxNQUFBLEVBU0EsSUFSQSxJQUFBbnlGLEVBQUE3OUMsS0FBQTY5QyxFQUVBNHlGLEVBQUF6d0ksS0FBQTB3SSxTQUFBMXdJLEtBQUEyN0MsR0FDQWcxRixFQUFBRixFQUFBRSxLQUNBQyxFQUFBSCxFQUFBRyxLQUdBQyxFQUFBdEMsRUFBQXZ1SSxLQUFBOHZJLEtBQ0FweUksRUFBQSxFQUFrQkEsRUFBQW1nRCxFQUFJbmdELElBQ3RCLFFBQUFNLEVBQUEsRUFBb0JBLEVBQUFnQyxLQUFBOHZJLElBQVc5eEksSUFBQSxDQUMvQixJQUFBMDZILEVBQUFrWSxFQUFBbHpJLEdBQUFNLEdBQ0E4eUksRUFBQTl3SSxLQUFBdXdJLE1BQUE3eUksR0FBQU0sR0FDQSt5SSxFQUFBL3dJLEtBQUFzd0ksTUFBQTV5SSxHQUFBTSxHQUdBZ3pJLEVBQUExNkUsRUFBQW9pRSxLQUFBcGlFLEVBQUF3NkUsR0FBQSxHQUFBQyxJQUFBLEdBQ0FBLEVBQUEsTUFBQUEsRUFBQSxLQUNBL3dJLEtBQUFzd0ksTUFBQTV5SSxHQUFBTSxHQUFBZ3pJLEVBR0EsSUFDQUMsR0FEQWp4SSxLQUFBZ3dJLEtBQUEsV0FDQWMsRUFBQTl3SSxLQUFBK3ZJLFFBQUFpQixFQUFBSixFQUFBbHpJLEdBQUFNLEdBQ0FnQyxLQUFBdXdJLE1BQUE3eUksR0FBQU0sR0FBQWl6SSxFQUdBanhJLEtBQUEyN0MsRUFBQWorQyxHQUFBTSxJQUFBaXpJLEVBRUFKLEVBQUE3eUksSUFBQWdDLEtBQUEyN0MsRUFBQWorQyxHQUFBTSxHQUtBLElBQUFOLEVBQUEsRUFBa0JBLEVBQUFtZ0QsRUFBSW5nRCxJQUN0QixJQUFBTSxFQUFBLEVBQW9CQSxFQUFBZ0MsS0FBQTh2SSxJQUFXOXhJLElBQy9CZ0MsS0FBQTI3QyxFQUFBaitDLEdBQUFNLElBQUE2eUksRUFBQTd5SSxHQUFBNi9DLEVBS0EsT0FBQTh5RixHQUlBTyxVQUFBLFdBUUEsSUFQQSxJQUFBcnpGLEVBQUE3OUMsS0FBQTY5QyxFQUVBNHlGLEVBQUF6d0ksS0FBQTB3SSxTQUFBMXdJLEtBQUEyN0MsR0FFQWkxRixHQURBSCxFQUFBRSxLQUNBRixFQUFBRyxNQUVBam1JLEVBQUEsS0FDQWpOLEVBQUEsRUFBa0JBLEVBQUFtZ0QsRUFBSW5nRCxJQUN0QixRQUFBTSxFQUFBLEVBQW9CQSxFQUFBZ0MsS0FBQTh2SSxJQUFXOXhJLElBQUEsQ0FDL0IsSUFBQW16SSxFQUFBbnhJLEtBQUEyN0MsRUFBQWorQyxHQUFBTSxHQUVBZ0MsS0FBQTI3QyxFQUFBaitDLEdBQUFNLEdBQUFtekksRUFBQXhtSSxFQUNBLElBQUF5bUksRUFBQXB4SSxLQUFBMHdJLFNBQUExd0ksS0FBQTI3QyxHQUVBMzdDLEtBQUEyN0MsRUFBQWorQyxHQUFBTSxHQUFBbXpJLEVBQUF4bUksRUFDQSxJQUFBMG1JLEVBQUFyeEksS0FBQTB3SSxTQUFBMXdJLEtBQUEyN0MsR0FFQTIxRixFQUFBVixFQUFBbHpJLEdBQUFNLEdBQ0F1ekksR0FBQUgsRUFBQVQsS0FBQVUsRUFBQVYsT0FBQSxFQUFBaG1JLEdBQ0E0RixRQUFBbkwsSUFBQTFILEVBQUEsSUFBQU0sRUFBQSx5QkFBQXN6SSxFQUFBLG1CQUFBQyxHQUVBdnhJLEtBQUEyN0MsRUFBQWorQyxHQUFBTSxHQUFBbXpJLElBTUFULFNBQUEsU0FBQS8wRixHQVVBLElBVEEsSUFBQWtDLEVBQUE3OUMsS0FBQTY5QyxFQUNBaXlGLEVBQUE5dkksS0FBQTh2SSxJQUNBaHlGLEVBQUE5OUMsS0FBQTg5QyxFQUVBMHpGLEVBQUF4eEksS0FBQWd3SSxLQUFBLFFBR0F5QixFQUFBbEQsRUFBQTF3RixLQUNBNnpGLEVBQUEsRUFDQWgwSSxFQUFBLEVBQWtCQSxFQUFBbWdELEVBQUluZ0QsSUFDdEIsUUFBQTBFLEVBQUExRSxFQUFBLEVBQXNCMEUsRUFBQXk3QyxFQUFJejdDLElBQUEsQ0FFMUIsSUFEQSxJQUFBdXZJLEVBQUEsRUFDQTN6SSxFQUFBLEVBQXNCQSxFQUFBOHhJLEVBQU05eEksSUFBQSxDQUM1QixJQUFBNHpJLEVBQUFqMkYsRUFBQWorQyxHQUFBTSxHQUFBMjlDLEVBQUF2NUMsR0FBQXBFLEdBQ0EyekksR0FBQUMsSUFFQSxJQUFBQyxFQUFBLEtBQUFGLEdBQ0FGLEVBQUEvekksRUFBQW1nRCxFQUFBejdDLEdBQUF5dkksRUFDQUosRUFBQXJ2SSxFQUFBeTdDLEVBQUFuZ0QsR0FBQW0wSSxFQUNBSCxHQUFBLEVBQUFHLEVBTUEsSUFGQSxJQUFBQyxFQUFBajBGLElBQ0FqNEIsRUFBQTJvSCxFQUFBdUQsR0FDQXI5SCxFQUFBLEVBQWtCQSxFQUFBcTlILEVBQUtyOUgsSUFBTW1SLEVBQUFuUixHQUFBN1AsS0FBQThLLElBQUEraEksRUFBQWg5SCxHQUFBaTlILEVBQUEsUUFFN0IsSUFBQWYsRUFBQSxFQUNBQyxLQUNBLElBQUFsekksRUFBQSxFQUFrQkEsRUFBQW1nRCxFQUFJbmdELElBQUEsQ0FDdEIsSUFBQXEwSSxFQUFBLElBQUFqdUksTUFBQWdzSSxHQUNBLElBQUE5eEksRUFBQSxFQUFvQkEsRUFBQTh4SSxFQUFNOXhJLElBQU0rekksRUFBQS96SSxHQUFBLEVBQ2hDLElBQUFvRSxFQUFBLEVBQW9CQSxFQUFBeTdDLEVBQUl6N0MsSUFBQSxDQUN4QnV1SSxJQUFBN3lGLEVBQUFwZ0QsRUFBQW1nRCxFQUFBejdDLEdBQUF3QyxLQUFBUSxJQUFBd2dCLEVBQUFsb0IsRUFBQW1nRCxFQUFBejdDLElBQ0EsSUFBQTR2SSxFQUFBLEdBQUFSLEVBQUExekYsRUFBQXBnRCxFQUFBbWdELEVBQUF6N0MsR0FBQXdqQixFQUFBbG9CLEVBQUFtZ0QsRUFBQXo3QyxJQUFBcXZJLEVBQUEvekksRUFBQW1nRCxFQUFBejdDLEdBQ0EsSUFBQXBFLEVBQUEsRUFBc0JBLEVBQUE4eEksRUFBTTl4SSxJQUM1Qit6SSxFQUFBL3pJLElBQUFnMEksR0FBQXIyRixFQUFBaitDLEdBQUFNLEdBQUEyOUMsRUFBQXY1QyxHQUFBcEUsSUFHQTR5SSxFQUFBaHVJLEtBQUFtdkksR0FHQSxPQUFjcEIsT0FBQUMsVUFJZC8xRixFQUFBZzFGLE9BbldBLENBb1dDbkMsR0FJRCxTQUFBdUUsR0FDQSxrQkFDbUMsSUFBQXgwSSxFQUFBRCxRQUNuQzRJLE9BQUFzbkksT0FBQXVFLEVBRUF4MEksRUFBQUQsUUFBQXkwSSxFQUxBLENBT0N2RSxpQ0NsWERwd0ksRUFBQWtCLEVBQUEwekksR0FBQSxJQUFBQyxFQUFBNzBJLEVBQUEsR0FBQTgwSSxFQUFBOTBJLEVBQUE2QixFQUFBZ3pJLEdBQUFFLEVBQUEvMEksRUFBQSxHQUFBZzFJLEVBQUFoMUksRUFBQTZCLEVBQUFrekksR0FBQUUsRUFBQWoxSSxFQUFBLEdBQUFrMUksRUFBQWwxSSxFQUFBNkIsRUFBQW96SSxHQUlBLE1BQUFFLEVBQUFqekksVUFDQWt6SSxFQUNBQyxjQUNBM3lJLEtBQUFvK0IsSUFBQTUrQixFQUFBNHZILGFBQUEsT0FDQXB2SCxLQUFBNjVDLE1BQUEsR0FDQTc1QyxLQUFBKzVGLE1BQUF2NkYsRUFBQXU2RixNQUFBLEtBQ0EvNUYsS0FBQXdqQixLQUFBLEVBQ0F4akIsS0FBQTR5SSxLQUFBLEVBQ0E1eUksS0FBQTZ5SSxTQUFBLEVBR0FGLFlBWUEsR0FYQW56SSxFQUFBZ25HLFdBQ0FobkcsRUFBQXloRCxLQUFBamhELEtBQUErNUYsT0FDQXY2RixFQUFBazZILGdCQUFBMTVILEtBQUF4QixFQUFBd0IsS0FBQXhCLEVBQUF3QixLQUFBeEIsR0FDQWdCLEVBQUFvRCxPQUNBcEQsRUFBQW85RyxVQUFBNThHLEtBQUFvK0IsSUFBQXhFLEVBQUE1NUIsS0FBQW8rQixJQUFBSCxFQUFBaitCLEtBQUFvK0IsSUFBQUYsR0FFQTErQixFQUFBbTFILElBQUEzMEgsS0FBQXdqQixNQUVBaGtCLEVBQUF5aEQsS0FBQSxRQUFBamhELEtBQUE0eUksTUFDQXB6SSxFQUFBbTFILElBQUEsSUFBQTMwSCxLQUFBd2pCLE1BRUEsS0FBQXhqQixLQUFBNHlJLE1BQ0E1eUksS0FBQTZ5SSxRQUFBLENBQ0EsSUFBQUMsRUFBQXR6SSxFQUFBOEosTUFBQTlKLEVBQUFxZ0MsT0FBQSxLQUNBa3pHLEVBQUFELEdBQUFqZ0csU0FBQXh5QixPQUFBcmdCLEtBQUF4QixFQUFBLElBQ0F1MEksRUFBQUQsR0FBQXR4SCxxQkFBNEM4d0gsRUFBQTM1SCxFQUFJZ2lDLEtBQUEsVUFBQTM2QyxLQUFBd2pCLEtBQUEsSUFBQTdQLGNBQUEzVCxLQUFBd2pCLEtBQUEsS0FDaER4akIsS0FBQTZ5SSxTQUFBLEVBS0E3eUksS0FBQTR5SSxNQUFBLElBRUFwekksRUFBQXN4RCxNQUtBNmhGLE9BQUFuekksR0FFQSxPQURBUSxLQUFBbytCLElBQUE1K0IsRUFDQVEsS0FHQTJ5SSxPQUFBbjBJLEVBQUE4WixFQUFBVSxFQUFBTCxHQUtBLE9BSkEzWSxLQUFBKzVGLE1BQUF2NkYsRUFBQXU2RixNQUFBdjdGLEVBQUE4WixFQUFBVSxFQUFBTCxHQUNBM1ksS0FBQXhCLElBQ0F3QixLQUFBc1ksSUFDQXRZLEtBQUFnWixJQUNBaFosS0FHQTJ5SSxRQUFBbHpJLEdBRUEsT0FEQU8sS0FBQXdqQixLQUFBL2pCLEVBQ0FPLE1BSUEsSUFDQWd6SSxFQUNBcjNGLEVBQ0FzM0YsRUFBQSxFQUNBbDNGLEtBQ0F5dEMsS0FFQTBwRCxHQUFBLElBQ0FDLEdBQUEsSUFFQXY1RyxFQUFBLEVBQ0FxRSxFQUFBLEVBRUE4MEcsS0FHQSxJQUFBSyxFQUFBLElBQWtCZCxFQUFBMzVILEVBQUkrakIsUUFBQSxHQUFBaEssV0FDdEIyZ0gsR0FBQSxJQUFvQmYsRUFBQTM1SCxFQUFJNHVCLFVBQUEvakMsUUFBQTR2SSxHQUN4QkMsRUFBQTM0RyxVQUFBLzdCLE1BQUEsS0FDQTAwSSxFQUFBN3JHLFNBQUE3b0MsTUFBQSxJQUVBLFFBQUFqQixFQUFBLEVBQWFBLEVBQUEsR0FBTUEsSUFDbkJxMUksRUFBQW53SSxLQUFBLElBQWtCMHZJLEVBQUEzNUgsRUFBSWs3QixTQUN0Qi9DLFlBQUEsR0FDQUYsZ0JBQUEsR0FDQWpyQixPQUFBLEVBQ0FxdEIsWUFDQS9rQyxLQUFBLFFBRUE0a0MsVUFDQXh5QixPQUFBLEtBQ0FDLE1BQUEsS0FDQUMsUUFBQSxJQUNBQyxRQUFBLElBRUEweUIsWUFDQWpsQyxLQUFBLFVBRUFrbEMsb0JBQ0E5eUIsT0FBQSxJQUNBQyxNQUFBLElBQ0FDLFFBQUEsSUFDQUMsUUFBQSxNQUVBZ3lCLFdBQUEsTUFDYWh2QyxRQUFBNnZJLElBRWI3ekksRUFBQTB4RyxNQUFBLE1BQ0ExeEcsRUFBQTAwRyxhQUFBLFFBQUExMEcsRUFBQWtuRyxPQUNBbG5HLEVBQUErOUcsU0FFQSxJQUFBdXdCLEdBQ0FpQyxRQUFBLEdBQ0FmLFdBQUEsR0FDQWMsSUFBQSxHQUVBa0QsRUFBQSxJQUFlUixFQUFBNzVILEVBQU1rM0gsS0FBQS9CLEdBRXJCLFFBQUFwd0ksRUFBQSxFQUFnQkEsRUExRGhCLElBMER1QkEsSUFBQSxDQUd2QixJQUFBNDFJLEVBQUE5ekksRUFBQXFnQyxPQUFBLEtBQ0EwekcsRUFBQS96SSxFQUFBcWdDLE9BQUEsS0FDQTJ6RyxFQUFBaDBJLEVBQUFxZ0MsT0FBQSxLQUdBMnBELEVBQUE1bUYsTUFBQTB3SSxFQUFBQyxFQUFBQyxJQUVBLElBQUF4MUksRUFBQSxJQUFBMDBJLEVBRUExMEksRUFBQXkxSSxPQUFBSCxFQUFBQyxFQUFBQyxFQUFBLEtBQUFFLFFBQUFILEVBQUEsTUFDQXgzRixFQUFBbjVDLEtBQUE1RSxHQUdBZzFJLEVBQUEvQyxZQUFBem1ELEdBQ0E3dEMsRUFBQXEzRixFQUFBeEMsZ0JBR0EsSUFBQW1ELEVBQUEsRUFDQW4wSSxFQUFBK2lFLEtBQUEsTUFDQS9pRSxFQUFBKzZILE9BQUEsSUFBQS82SCxFQUFBc0YsSUFBQXRGLEVBQUFndUcsV0FBQSxTQUFBaHVHLEVBQUF5aUIsSUFBQXppQixFQUFBZ3VHLFdBQUEsc0JBQ0FodUcsRUFBQXltRyxXQUFBLEdBQ0F6bUcsRUFBQXV1RyxVQUFBLElBRUEsSUFBQTZsQyxFQUFBcDBJLEVBQUEycEgsVUFBQTNwSCxFQUFBaW1ILE9BQUEsR0FBQWptSCxFQUFBc0YsS0FBQXRGLEVBQUFndUcsV0FBQSxNQUFBaHVHLEVBQUErdEMsT0FFQTNULEdBMUVBLElBeUVBZzZHLEVBQUFoNkcsR0FHQSxJQUFBaTZHLEVBQUFyMEksRUFBQTJwSCxVQUFBM3BILEVBQUFrbUgsT0FBQSxHQUFBbG1ILEVBQUF5aUIsS0FBQXppQixFQUFBZ3VHLFdBQUEsTUFBQWh1RyxFQUFBdXZCLFFBRUFrUCxHQTlFQSxJQTZFQTQxRyxFQUFBNTFHLEdBR0FpMUcsRUFBQTF6SSxFQUFBbVgsSUFBQWlqQixFQUFBLEVBQUFwNkIsRUFBQSt0QyxPQUFBLFNBQ0E0bEcsRUFBQTN6SSxFQUFBbVgsSUFBQXNuQixFQUFBLEVBQUF6K0IsRUFBQXV2QixRQUFBLFNBU0Fxa0gsRUFBQWozRyxJQUFBeDlCLE1BQUF1MEksRUFBQSxJQUVBMXpJLEVBQUErNEgsV0FBQSx1QkFFQS80SCxFQUFBdTRILGFBQUEsS0FLQTRiLEVBQUEsSUFBQW4wSSxFQUFBc0YsSUFBQXRGLEVBQUFndUcsV0FBQSxLQUNBaHVHLEVBQUFvRCxPQUNBcEQsRUFBQW85RyxVQUFBczJCLEVBQUEsS0FDQTF6SSxFQUFBeWhELEtBQUEsU0FDQXpoRCxFQUFBZ25HLFdBQ0FobkcsRUFBQW0xSCxJQUFBLFNBQ0FuMUgsRUFBQXN4RCxNQUVBdHhELEVBQUFvRCxPQUNBcEQsRUFBQW85RyxVQUFBLEVBQUF1MkIsRUFBQSxHQUNBM3pJLEVBQUF5aEQsS0FBQSxTQUNBemhELEVBQUFnbkcsV0FDQWhuRyxFQUFBbTFILElBQUEsU0FDQW4xSCxFQUFBc3hELE1BRUF0eEQsRUFBQW9ELE9BQ0FwRCxFQUFBbzlHLFVBQUFzMkIsRUFBQUMsRUFBQSxHQUNBM3pJLEVBQUF5aEQsS0FBQSxZQUNBemhELEVBQUFnbkcsV0FDQWhuRyxFQUFBbTFILElBQUEsU0FDQW4xSCxFQUFBc3hELFFBRUFtaUYsRUFDQSxLQUNBRCxFQUFBcndILE9BR0EsUUFBQWpsQixFQUFBLEVBQWdCQSxFQUFBaStDLEVBQUFyNkMsT0FBYTVELElBQzdCcStDLEVBQUFyK0MsR0FBQW8ySSxPQUFBdDBJLEVBQUE0dkgsYUFBQSxHQUFBenpFLEVBQUFqK0MsR0FBQSxNQUFBaStDLEVBQUFqK0MsR0FBQSxNQUFBaStDLEVBQUFqK0MsR0FBQSxLQUFBcTJJLFlBQ0F2MEksRUFBQXNnQyxLQUFBaWMsRUFBQXIrQyxHQUFBMGdDLElBQUF4RSxFQUFBbWlCLEVBQUFyK0MsR0FBQTBnQyxJQUFBSCxFQUFBLEVBQUFpMUcsRUFBQUMsRUFBQSxPQUNBcDNGLEVBQUFyK0MsR0FBQWsxSSxLQUFBLElBRUE3MkYsRUFBQXIrQyxHQUFBbTFJLFNBQUEsRUFJQXJ6SSxFQUFBK21HLFNBQ0EvbUcsRUFBQWd0RCxPQUFBLFFBQ0FodEQsRUFBQW0xSCxJQUFBLE9BR0FuMUgsRUFBQXVsSCxXQUFBLE1BQ0EsS0FBQXZsSCxFQUFBUCxLQUNBTyxFQUFBeTdHLEtBQUFsMkQsS0FBQXYvQyxNQUFBLFdBS2Uwc0ksRUFBQSxVQUNmLElBQUlFLEVBQUF6NUgsRUFBRTg1SCxrQkMvTk4sSUFBQW42SCxFQUdBQSxFQUFBLFdBQ0EsT0FBQXRZLEtBREEsR0FJQSxJQUVBc1ksS0FBQStyQyxTQUFBLGNBQUFBLEtBQUEsRUFBQTJ2RixNQUFBLFFBQ0MsTUFBQXJwSSxHQUVELGlCQUFBdkUsU0FBQWtTLEVBQUFsUyxRQU9BM0ksRUFBQUQsUUFBQThhIiwiZmlsZSI6Im1haW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMyk7XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSl7XG5cblx0Ly9VTURcblx0aWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0XHRkZWZpbmUoZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gZmFjdG9yeSgpO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiBcdH0gZWxzZSB7XG5cdFx0cm9vdC5Ub25lID0gZmFjdG9yeSgpO1xuXHR9XG5cbn0odGhpcywgZnVuY3Rpb24oKXtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBUb25lO1xuXHQvL2NvbnN0cnVjdHMgdGhlIG1haW4gVG9uZSBvYmplY3Rcblx0ZnVuY3Rpb24gTWFpbihmdW5jKXtcblx0XHRUb25lID0gZnVuYygpO1xuXHR9XG5cdC8vaW52b2tlcyBlYWNoIG9mIHRoZSBtb2R1bGVzIHdpdGggdGhlIG1haW4gVG9uZSBvYmplY3QgYXMgdGhlIGFyZ3VtZW50XG5cdGZ1bmN0aW9uIE1vZHVsZShmdW5jKXtcblx0XHRmdW5jKFRvbmUpO1xuXHR9XHQvKipcblx0ICogIFRvbmUuanNcblx0ICogIEBhdXRob3IgWW90YW0gTWFublxuXHQgKiAgQGxpY2Vuc2UgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCBNSVQgTGljZW5zZVxuXHQgKiAgQGNvcHlyaWdodCAyMDE0LTIwMTggWW90YW0gTWFublxuXHQgKi9cblx0TWFpbihmdW5jdGlvbiAoKSB7XG5cdCAgICBcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRPTkVcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZSBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgb3RoZXIgY2xhc3Nlcy5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICB2YXIgVG9uZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVG9uZSkpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb25zdHJ1Y3RvciBuZWVkcyB0byBiZSBjYWxsZWQgd2l0aCB0aGUgXFwnbmV3XFwnIGtleXdvcmQnKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBAcmV0dXJucyB7U3RyaW5nfSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBhcyBhIHN0cmluZ1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgY2xhc3NOYW1lIGluIFRvbmUpIHtcblx0ICAgICAgICAgICAgdmFyIGlzTGV0dGVyID0gY2xhc3NOYW1lWzBdLm1hdGNoKC9eW0EtWl0kLyk7XG5cdCAgICAgICAgICAgIHZhciBzYW1lQ29uc3RydWN0b3IgPSBUb25lW2NsYXNzTmFtZV0gPT09IHRoaXMuY29uc3RydWN0b3I7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzRnVuY3Rpb24oVG9uZVtjbGFzc05hbWVdKSAmJiBpc0xldHRlciAmJiBzYW1lQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuICdUb25lJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIGRpc2Nvbm5lY3QgYW5kIGRpc3Bvc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0R0VUL1NFVFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBwYXJhbWV0ZXJzIGF0IG9uY2UuIEVpdGhlciBwYXNzIGluIGFuXG5cdFx0ICogIG9iamVjdCBtYXBwaW5nIHBhcmFtZXRlcnMgdG8gdmFsdWVzLCBvciB0byBzZXQgYVxuXHRcdCAqICBzaW5nbGUgcGFyYW1ldGVyLCBieSBwYXNzaW5nIGluIGEgc3RyaW5nIGFuZCB2YWx1ZS5cblx0XHQgKiAgVGhlIGxhc3QgYXJndW1lbnQgaXMgYW4gb3B0aW9uYWwgcmFtcCB0aW1lIHdoaWNoXG5cdFx0ICogIHdpbGwgcmFtcCBhbnkgc2lnbmFsIHZhbHVlcyB0byB0aGVpciBkZXN0aW5hdGlvbiB2YWx1ZVxuXHRcdCAqICBvdmVyIHRoZSBkdXJhdGlvbiBvZiB0aGUgcmFtcFRpbWUuXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gcGFyYW1zXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmFtcFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmV9IHRoaXNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdmFsdWVzIHVzaW5nIGFuIG9iamVjdFxuXHRcdCAqIGZpbHRlci5zZXQoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IDMwMCxcblx0XHQgKiBcdFwidHlwZVwiIDogaGlnaHBhc3Ncblx0XHQgKiB9KTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBmaWx0ZXIuc2V0KFwidHlwZVwiLCBcImhpZ2hwYXNzXCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcmFtcCB0byB0aGUgdmFsdWUgMjIwIG92ZXIgMyBzZWNvbmRzLlxuXHRcdCAqIG9zY2lsbGF0b3Iuc2V0KHtcblx0XHQgKiBcdFwiZnJlcXVlbmN5XCIgOiAyMjBcblx0XHQgKiB9LCAzKTtcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChwYXJhbXMsIHZhbHVlLCByYW1wVGltZSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgcmFtcFRpbWUgPSB2YWx1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcocGFyYW1zKSkge1xuXHQgICAgICAgICAgICB2YXIgdG1wT2JqID0ge307XG5cdCAgICAgICAgICAgIHRtcE9ialtwYXJhbXNdID0gdmFsdWU7XG5cdCAgICAgICAgICAgIHBhcmFtcyA9IHRtcE9iajtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcGFyYW1Mb29wOlxuXHQgICAgICAgICAgICBmb3IgKHZhciBhdHRyIGluIHBhcmFtcykge1xuXHQgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJhbXNbYXR0cl07XG5cdCAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gdGhpcztcblx0ICAgICAgICAgICAgICAgIGlmIChhdHRyLmluZGV4T2YoJy4nKSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgYXR0clNwbGl0ID0gYXR0ci5zcGxpdCgnLicpO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0clNwbGl0Lmxlbmd0aCAtIDE7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbYXR0clNwbGl0W2ldXTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFRvbmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJTcGxpdC5zcGxpY2UoMCwgaSArIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlubmVyUGFyYW0gPSBhdHRyU3BsaXQuam9pbignLicpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnNldChpbm5lclBhcmFtLCB2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBwYXJhbUxvb3A7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGF0dHJTcGxpdFthdHRyU3BsaXQubGVuZ3RoIC0gMV07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB2YXIgcGFyYW0gPSBwYXJlbnRbYXR0cl07XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHBhcmFtKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuU2lnbmFsICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5TaWduYWwgfHwgVG9uZS5QYXJhbSAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0udmFsdWUgIT09IHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYocmFtcFRpbWUpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0ucmFtcFRvKHZhbHVlLCByYW1wVGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgQXVkaW9QYXJhbSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS52YWx1ZSAhPT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0udmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuVGltZUJhc2UgJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcGFyZW50W2F0dHJdID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgVG9uZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHBhcmFtLnNldCh2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtICE9PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHBhcmVudFthdHRyXSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgb2JqZWN0J3MgYXR0cmlidXRlcy4gR2l2ZW4gbm8gYXJndW1lbnRzIGdldFxuXHRcdCAqICB3aWxsIHJldHVybiBhbGwgYXZhaWxhYmxlIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nXG5cdFx0ICogIHZhbHVlcy4gUGFzcyBpbiBhIHNpbmdsZSBhdHRyaWJ1dGUgdG8gcmV0cmlldmUgb3IgYW4gYXJyYXlcblx0XHQgKiAgb2YgYXR0cmlidXRlcy4gVGhlIGF0dHJpYnV0ZSBzdHJpbmdzIGNhbiBhbHNvIGluY2x1ZGUgYSBcIi5cIlxuXHRcdCAqICB0byBhY2Nlc3MgZGVlcGVyIHByb3BlcnRpZXMuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG9zYy5nZXQoKTtcblx0XHQgKiAvL3JldHVybnMge1widHlwZVwiIDogXCJzaW5lXCIsIFwiZnJlcXVlbmN5XCIgOiA0NDAsIC4uLmV0Y31cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBvc2MuZ2V0KFwidHlwZVwiKTtcblx0XHQgKiAvL3JldHVybnMgeyBcInR5cGVcIiA6IFwic2luZVwifVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy91c2UgZG90IG5vdGF0aW9uIHRvIGFjY2VzcyBkZWVwIHByb3BlcnRpZXNcblx0XHQgKiBzeW50aC5nZXQoW1wiZW52ZWxvcGUuYXR0YWNrXCIsIFwiZW52ZWxvcGUucmVsZWFzZVwiXSk7XG5cdFx0ICogLy9yZXR1cm5zIHtcImVudmVsb3BlXCIgOiB7XCJhdHRhY2tcIiA6IDAuMiwgXCJyZWxlYXNlXCIgOiAwLjR9fVxuXHRcdCAqICBAcGFyYW0ge0FycmF5PXxzdHJpbmd8dW5kZWZpbmVkfSBwYXJhbXMgdGhlIHBhcmFtZXRlcnMgdG8gZ2V0LCBvdGhlcndpc2Ugd2lsbCByZXR1cm5cblx0XHQgKiAgXHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgIGFsbCBhdmFpbGFibGUuXG5cdFx0ICogIEByZXR1cm5zIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHBhcmFtcyA9IHRoaXMuX2NvbGxlY3REZWZhdWx0cyh0aGlzLmNvbnN0cnVjdG9yKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcocGFyYW1zKSkge1xuXHQgICAgICAgICAgICBwYXJhbXMgPSBbcGFyYW1zXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHJldCA9IHt9O1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBhdHRyID0gcGFyYW1zW2ldO1xuXHQgICAgICAgICAgICB2YXIgcGFyZW50ID0gdGhpcztcblx0ICAgICAgICAgICAgdmFyIHN1YlJldCA9IHJldDtcblx0ICAgICAgICAgICAgaWYgKGF0dHIuaW5kZXhPZignLicpICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGF0dHJTcGxpdCA9IGF0dHIuc3BsaXQoJy4nKTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0clNwbGl0Lmxlbmd0aCAtIDE7IGorKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBzdWJBdHRyID0gYXR0clNwbGl0W2pdO1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YlJldFtzdWJBdHRyXSA9IHN1YlJldFtzdWJBdHRyXSB8fCB7fTtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJSZXQgPSBzdWJSZXRbc3ViQXR0cl07XG5cdCAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50W3N1YkF0dHJdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYXR0ciA9IGF0dHJTcGxpdFthdHRyU3BsaXQubGVuZ3RoIC0gMV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIHBhcmFtID0gcGFyZW50W2F0dHJdO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChwYXJhbXNbYXR0cl0pKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS5nZXQoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLlNpZ25hbCAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuU2lnbmFsKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS52YWx1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLlBhcmFtICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5QYXJhbSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0udmFsdWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBBdWRpb1BhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS52YWx1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIFRvbmUpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLmdldCgpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKCFUb25lLmlzRnVuY3Rpb24ocGFyYW0pICYmIFRvbmUuaXNEZWZpbmVkKHBhcmFtKSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJldDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29sbGVjdCBhbGwgb2YgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBpbiBvbmVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY29uc3RyIHRoZSBjb25zdHJ1Y3RvciB0byBmaW5kIHRoZSBkZWZhdWx0cyBmcm9tXG5cdFx0ICogIEByZXR1cm4ge0FycmF5fSBhbGwgb2YgdGhlIGF0dHJpYnV0ZXMgd2hpY2ggYmVsb25nIHRvIHRoZSBjbGFzc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuX2NvbGxlY3REZWZhdWx0cyA9IGZ1bmN0aW9uIChjb25zdHIpIHtcblx0ICAgICAgICB2YXIgcmV0ID0gW107XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGNvbnN0ci5kZWZhdWx0cykpIHtcblx0ICAgICAgICAgICAgcmV0ID0gT2JqZWN0LmtleXMoY29uc3RyLmRlZmF1bHRzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGNvbnN0ci5fc3VwZXIpKSB7XG5cdCAgICAgICAgICAgIHZhciBzdXBlckRlZnMgPSB0aGlzLl9jb2xsZWN0RGVmYXVsdHMoY29uc3RyLl9zdXBlcik7XG5cdCAgICAgICAgICAgIC8vZmlsdGVyIG91dCByZXBlYXRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VwZXJEZWZzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAocmV0LmluZGV4T2Yoc3VwZXJEZWZzW2ldKSA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXQucHVzaChzdXBlckRlZnNbaV0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0REVGQVVMVFNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgdmFsdWVzICBUaGUgYXJndW1lbnRzIGFycmF5XG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAga2V5cyAgICBUaGUgbmFtZXMgb2YgdGhlIGFyZ3VtZW50c1xuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gY29uc3RyIFRoZSBjbGFzcyBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcmV0dXJuICB7T2JqZWN0fSAgQW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSAgZGVmYXVsdHMgYmV0d2VlbiB0aGUgY2xhc3MnIGRlZmF1bHRzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHBhc3NlZCBpbiBhcmd1bWVudHMuXG5cdFx0ICovXG5cdCAgICBUb25lLmRlZmF1bHRzID0gZnVuY3Rpb24gKHZhbHVlcywga2V5cywgY29uc3RyKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSB7fTtcblx0ICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSAmJiBUb25lLmlzT2JqZWN0KHZhbHVlc1swXSkpIHtcblx0ICAgICAgICAgICAgb3B0aW9ucyA9IHZhbHVlc1swXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnNba2V5c1tpXV0gPSB2YWx1ZXNbaV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGNvbnN0ci5kZWZhdWx0cykpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBjb25zdHIuZGVmYXVsdHMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc09iamVjdChjb25zdHIpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgY29uc3RyKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gb3B0aW9ucztcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHRoZSBgZ2l2ZW5gIHBhcmFtZXRlciBpcyB1bmRlZmluZWQsIHVzZSB0aGUgYGZhbGxiYWNrYC5cblx0XHQgKiAgSWYgYm90aCBgZ2l2ZW5gIGFuZCBgZmFsbGJhY2tgIGFyZSBvYmplY3QgbGl0ZXJhbHMsIGl0IHdpbGxcblx0XHQgKiAgcmV0dXJuIGEgZGVlcCBjb3B5IHdoaWNoIGluY2x1ZGVzIGFsbCBvZiB0aGUgcGFyYW1ldGVycyBmcm9tIGJvdGhcblx0XHQgKiAgb2JqZWN0cy4gSWYgYSBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIGluIGdpdmVuLCBpdCB3aWxsIHJldHVyblxuXHRcdCAqICB0aGUgZmFsbGJhY2sgcHJvcGVydHkuXG5cdFx0ICogIDxicj48YnI+XG5cdFx0ICogIFdBUk5JTkc6IGlmIG9iamVjdCBpcyBzZWxmIHJlZmVyZW50aWFsLCBpdCB3aWxsIGdvIGludG8gYW4gYW5cblx0XHQgKiAgaW5maW5pdGUgcmVjdXJzaXZlIGxvb3AuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBwYXJhbSAgeyp9IGdpdmVuXG5cdFx0ICogIEBwYXJhbSAgeyp9IGZhbGxiYWNrXG5cdFx0ICogIEByZXR1cm4geyp9XG5cdFx0ICovXG5cdCAgICBUb25lLmRlZmF1bHRBcmcgPSBmdW5jdGlvbiAoZ2l2ZW4sIGZhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QoZ2l2ZW4pICYmIFRvbmUuaXNPYmplY3QoZmFsbGJhY2spKSB7XG5cdCAgICAgICAgICAgIHZhciByZXQgPSB7fTtcblx0ICAgICAgICAgICAgLy9tYWtlIGEgZGVlcCBjb3B5IG9mIHRoZSBnaXZlbiBvYmplY3Rcblx0ICAgICAgICAgICAgZm9yICh2YXIgZ2l2ZW5Qcm9wIGluIGdpdmVuKSB7XG5cdCAgICAgICAgICAgICAgICByZXRbZ2l2ZW5Qcm9wXSA9IFRvbmUuZGVmYXVsdEFyZyhmYWxsYmFja1tnaXZlblByb3BdLCBnaXZlbltnaXZlblByb3BdKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBmb3IgKHZhciBmYWxsYmFja1Byb3AgaW4gZmFsbGJhY2spIHtcblx0ICAgICAgICAgICAgICAgIHJldFtmYWxsYmFja1Byb3BdID0gVG9uZS5kZWZhdWx0QXJnKGdpdmVuW2ZhbGxiYWNrUHJvcF0sIGZhbGxiYWNrW2ZhbGxiYWNrUHJvcF0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuaXNVbmRlZihnaXZlbikgPyBmYWxsYmFjayA6IGdpdmVuO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRDT05ORUNUSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0b2dldGhlciBhbGwgb2YgdGhlIGFyZ3VtZW50cyBpbiBzZXJpZXNcblx0XHQgKiAgQHBhcmFtIHsuLi5BdWRpb1BhcmFtfFRvbmV8QXVkaW9Ob2RlfSBub2Rlc1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZX1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5jb25uZWN0U2VyaWVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBjdXJyZW50VW5pdCA9IGFyZ3VtZW50c1swXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgdG9Vbml0ID0gYXJndW1lbnRzW2ldO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdC5jb25uZWN0KHRvVW5pdCk7XG5cdCAgICAgICAgICAgIGN1cnJlbnRVbml0ID0gdG9Vbml0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gVG9uZTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIFRZUEUgQ0hFQ0tJTkdcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZyBpcyB1bmRlZmluZWRcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyB1bmRlZmluZWRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc1VuZGVmID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJnIGlzIG5vdCB1bmRlZmluZWRcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyB1bmRlZmluZWRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc0RlZmluZWQgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuICFUb25lLmlzVW5kZWYodmFsKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJnIGlzIGEgZnVuY3Rpb25cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIGZ1bmN0aW9uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIuXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBudW1iZXJcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc051bWJlciA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGdpdmVuIGFyZ3VtZW50IGlzIGFuIG9iamVjdCBsaXRlcmFsIChpLmUuIGB7fWApO1xuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGFuIG9iamVjdCBsaXRlcmFsLlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzT2JqZWN0ID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgJiYgYXJnLmNvbnN0cnVjdG9yID09PSBPYmplY3Q7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGEgYm9vbGVhbi5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIGJvb2xlYW5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc0Jvb2xlYW4gPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgYW4gQXJyYXlcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhbiBhcnJheVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzQXJyYXkgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJnKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgYSBzdHJpbmcuXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBzdHJpbmdcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc1N0cmluZyA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGluIHRoZSBmb3JtIG9mIGEgbm90ZSBpbiBzY2llbnRpZmljIHBpdGNoIG5vdGF0aW9uLlxuXHRcdCAqICBlLmcuIFwiQzRcIlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgc3RyaW5nXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNOb3RlID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiBUb25lLmlzU3RyaW5nKGFyZykgJiYgL14oW2EtZ117MX0oPzpifCN8eHxiYik/KSgtP1swLTldKykvaS50ZXN0KGFyZyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFuIGVtcHR5IGZ1bmN0aW9uLlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLm5vT3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIE1ha2UgdGhlIHByb3BlcnR5IG5vdCB3cml0YWJsZS4gSW50ZXJuYWwgdXNlIG9ubHkuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHByb3BlcnR5ICB0aGUgcHJvcGVydHkgdG8gbWFrZSBub3Qgd3JpdGFibGVcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLl9yZWFkT25seSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5KSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZWFkT25seShwcm9wZXJ0eVtpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHksIHtcblx0ICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcblx0ICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBNYWtlIGFuIGF0dHJpYnV0ZSB3cml0ZWFibGUuIEludGVyYWwgdXNlIG9ubHkuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHByb3BlcnR5ICB0aGUgcHJvcGVydHkgdG8gbWFrZSB3cml0YWJsZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuX3dyaXRhYmxlID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydHkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRhYmxlKHByb3BlcnR5W2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eSwgeyB3cml0YWJsZTogdHJ1ZSB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUG9zc2libGUgcGxheSBzdGF0ZXMuXG5cdFx0ICogQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RhdGUgPSB7XG5cdCAgICAgICAgU3RhcnRlZDogJ3N0YXJ0ZWQnLFxuXHQgICAgICAgIFN0b3BwZWQ6ICdzdG9wcGVkJyxcblx0ICAgICAgICBQYXVzZWQ6ICdwYXVzZWQnXG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgRXF1YWwgcG93ZXIgZ2FpbiBzY2FsZS4gR29vZCBmb3IgY3Jvc3MtZmFkaW5nLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gcGVyY2VudCAoMC0xKVxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgb3V0cHV0IGdhaW4gKDAtMSlcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5lcXVhbFBvd2VyU2NhbGUgPSBmdW5jdGlvbiAocGVyY2VudCkge1xuXHQgICAgICAgIHZhciBwaUZhY3RvciA9IDAuNSAqIE1hdGguUEk7XG5cdCAgICAgICAgcmV0dXJuIE1hdGguc2luKHBlcmNlbnQgKiBwaUZhY3Rvcik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZGVjaWJlbHMgaW50byBnYWluLlxuXHRcdCAqICBAcGFyYW0gIHtEZWNpYmVsc30gZGJcblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmRiVG9HYWluID0gZnVuY3Rpb24gKGRiKSB7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucG93KDEwLCBkYiAvIDIwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBnYWluIHRvIGRlY2liZWxzLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9IGdhaW4gKDAtMSlcblx0XHQgKiAgQHJldHVybiB7RGVjaWJlbHN9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZ2FpblRvRGIgPSBmdW5jdGlvbiAoZ2Fpbikge1xuXHQgICAgICAgIHJldHVybiAyMCAqIChNYXRoLmxvZyhnYWluKSAvIE1hdGguTE4xMCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYW4gaW50ZXJ2YWwgKGluIHNlbWl0b25lcykgdG8gYSBmcmVxdWVuY3kgcmF0aW8uXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsfSBpbnRlcnZhbCB0aGUgbnVtYmVyIG9mIHNlbWl0b25lcyBhYm92ZSB0aGUgYmFzZSBub3RlXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgdGhlIGZyZXF1ZW5jeSByYXRpb1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oMCk7IC8vIDFcblx0XHQgKiB0b25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbygxMik7IC8vIDJcblx0XHQgKiB0b25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbygtMTIpOyAvLyAwLjVcblx0XHQgKi9cblx0ICAgIFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvID0gZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucG93KDIsIGludGVydmFsIC8gMTIpO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRJTUlOR1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIEF1ZGlvQ29udGV4dCBjbG9jay5cblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSB0aGUgY3VycmVudFRpbWUgZnJvbSB0aGUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUubm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLmNvbnRleHQubm93KCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSBBdWRpb0NvbnRleHQgY2xvY2suXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gdGhlIGN1cnJlbnRUaW1lIGZyb20gdGhlIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5jb250ZXh0Lm5vdygpO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdElOSEVSSVRBTkNFXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBoYXZlIGEgY2hpbGQgaW5oZXJpdCBhbGwgb2YgVG9uZSdzIChvciBhIHBhcmVudCdzKSBwcm90b3R5cGVcblx0XHQgKiAgdG8gaW5oZXJpdCB0aGUgcGFyZW50J3MgcHJvcGVydGllcywgbWFrZSBzdXJlIHRvIGNhbGxcblx0XHQgKiAgUGFyZW50LmNhbGwodGhpcykgaW4gdGhlIGNoaWxkJ3MgY29uc3RydWN0b3Jcblx0XHQgKlxuXHRcdCAqICBiYXNlZCBvbiBjbG9zdXJlIGxpYnJhcnkncyBpbmhlcml0IGZ1bmN0aW9uXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gXHRjaGlsZFxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19IHBhcmVudCAob3B0aW9uYWwpIHBhcmVudCB0byBpbmhlcml0IGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm8gcGFyZW50IGlzIHN1cHBsaWVkLCB0aGUgY2hpbGRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBpbmhlcml0IGZyb20gVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5leHRlbmQgPSBmdW5jdGlvbiAoY2hpbGQsIHBhcmVudCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYocGFyZW50KSkge1xuXHQgICAgICAgICAgICBwYXJlbnQgPSBUb25lO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBUZW1wQ29uc3RydWN0b3IoKSB7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRlbXBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlO1xuXHQgICAgICAgIGNoaWxkLnByb3RvdHlwZSA9IG5ldyBUZW1wQ29uc3RydWN0b3IoKTtcblx0ICAgICAgICAvKiogQG92ZXJyaWRlICovXG5cdCAgICAgICAgY2hpbGQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY2hpbGQ7XG5cdCAgICAgICAgY2hpbGQuX3N1cGVyID0gcGFyZW50O1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdENPTlRFWFRcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFByaXZhdGUgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgQXVkaW9Db250ZXh0XG5cdFx0ICogIEB0eXBlIHtBdWRpb0NvbnRleHR9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgYXVkaW9Db250ZXh0ID0gbnVsbDtcblx0ICAgIC8qKlxuXHRcdCAqICBBIHN0YXRpYyBwb2ludGVyIHRvIHRoZSBhdWRpbyBjb250ZXh0IGFjY2Vzc2libGUgYXMgVG9uZS5jb250ZXh0LlxuXHRcdCAqICBAdHlwZSB7VG9uZS5Db250ZXh0fVxuXHRcdCAqICBAbmFtZSBjb250ZXh0XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZSwgJ2NvbnRleHQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBhdWRpb0NvbnRleHQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLkNvbnRleHQgJiYgY29udGV4dCBpbnN0YW5jZW9mIFRvbmUuQ29udGV4dCkge1xuXHQgICAgICAgICAgICAgICAgYXVkaW9Db250ZXh0ID0gY29udGV4dDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGF1ZGlvQ29udGV4dCA9IG5ldyBUb25lLkNvbnRleHQoY29udGV4dCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9pbml0aWFsaXplIHRoZSBuZXcgYXVkaW8gY29udGV4dFxuXHQgICAgICAgICAgICBUb25lLkNvbnRleHQuZW1pdCgnaW5pdCcsIGF1ZGlvQ29udGV4dCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAdHlwZSB7VG9uZS5Db250ZXh0fVxuXHRcdCAqICBAbmFtZSBjb250ZXh0XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLnByb3RvdHlwZSwgJ2NvbnRleHQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmNvbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVG9uZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYSBjb250ZXh0IG9uIGluaXQsIGJ1dCBpZiB5b3UgYXJlIHdvcmtpbmdcblx0XHQgKiAgd2l0aCBvdGhlciBsaWJyYXJpZXMgd2hpY2ggYWxzbyBjcmVhdGUgYW4gQXVkaW9Db250ZXh0LCBpdCBjYW4gYmVcblx0XHQgKiAgdXNlZnVsIHRvIHNldCB5b3VyIG93bi4gSWYgeW91IGFyZSBnb2luZyB0byBzZXQgeW91ciBvd24gY29udGV4dCxcblx0XHQgKiAgYmUgc3VyZSB0byBkbyBpdCBhdCB0aGUgc3RhcnQgb2YgeW91ciBjb2RlLCBiZWZvcmUgY3JlYXRpbmcgYW55IG9iamVjdHMuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHBhcmFtIHtBdWRpb0NvbnRleHR9IGN0eCBUaGUgbmV3IGF1ZGlvIGNvbnRleHQgdG8gc2V0XG5cdFx0ICovXG5cdCAgICBUb25lLnNldENvbnRleHQgPSBmdW5jdGlvbiAoY3R4KSB7XG5cdCAgICAgICAgVG9uZS5jb250ZXh0ID0gY3R4O1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFUVFJJQlVURVNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBvZiAxIHByb2Nlc3NpbmcgYmxvY2sgKDEyOCBzYW1wbGVzKVxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBibG9ja1RpbWVcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLnByb3RvdHlwZSwgJ2Jsb2NrVGltZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIDEyOCAvIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIG9mIG9uZSBzYW1wbGUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIHNhbXBsZVRpbWVcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLnByb3RvdHlwZSwgJ3NhbXBsZVRpbWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxIC8gdGhpcy5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgV2hldGhlciBvciBub3QgYWxsIHRoZSB0ZWNobm9sb2dpZXMgdGhhdCBUb25lLmpzIHJlbGllcyBvbiBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJyb3dzZXIuXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBzdXBwb3J0ZWRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLCAnc3VwcG9ydGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaGFzQXVkaW9Db250ZXh0ID0gd2luZG93Lmhhc093blByb3BlcnR5KCdBdWRpb0NvbnRleHQnKSB8fCB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3dlYmtpdEF1ZGlvQ29udGV4dCcpO1xuXHQgICAgICAgICAgICB2YXIgaGFzUHJvbWlzZXMgPSB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ1Byb21pc2UnKTtcblx0ICAgICAgICAgICAgdmFyIGhhc1dvcmtlcnMgPSB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ1dvcmtlcicpO1xuXHQgICAgICAgICAgICByZXR1cm4gaGFzQXVkaW9Db250ZXh0ICYmIGhhc1Byb21pc2VzICYmIGhhc1dvcmtlcnM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQm9vbGVhbiB2YWx1ZSBpZiB0aGUgYXVkaW8gY29udGV4dCBoYXMgYmVlbiBpbml0aWFsaXplZC5cblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG5hbWUgaW5pdGlhbGl6ZWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLCAnaW5pdGlhbGl6ZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBhdWRpb0NvbnRleHQgIT09IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBjb250ZXh0IHdoZW4gaXQgYmVjb21lcyBhdmFpbGFibGVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICByZXNvbHZlICBDYWxsYmFjayB3aGVuIHRoZSBjb250ZXh0IGlzIGluaXRpYWxpemVkXG5cdFx0ICogIEByZXR1cm4gIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5nZXRDb250ZXh0ID0gZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pbml0aWFsaXplZCkge1xuXHQgICAgICAgICAgICByZXNvbHZlKFRvbmUuY29udGV4dCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHJlc0NhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmVzb2x2ZShUb25lLmNvbnRleHQpO1xuXHQgICAgICAgICAgICAgICAgVG9uZS5Db250ZXh0Lm9mZignaW5pdCcsIHJlc0NhbGxiYWNrKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgcmVzQ2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gVG9uZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdmVyc2lvbiBudW1iZXJcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUudmVyc2lvbiA9ICdyMTInO1xuXHQgICAgcmV0dXJuIFRvbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkVtaXR0ZXIgZ2l2ZXMgY2xhc3NlcyB3aGljaCBleHRlbmQgaXRcblx0XHQgKiAgICAgICAgIHRoZSBhYmlsaXR5IHRvIGxpc3RlbiBmb3IgYW5kIGVtaXQgZXZlbnRzLlxuXHRcdCAqICAgICAgICAgSW5zcGlyYXRpb24gYW5kIHJlZmVyZW5jZSBmcm9tIEplcm9tZSBFdGllbm5lJ3MgW01pY3JvRXZlbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9qZXJvbWVldGllbm5lL21pY3JvZXZlbnQuanMpLlxuXHRcdCAqICAgICAgICAgTUlUIChjKSAyMDExIEplcm9tZSBFdGllbm5lLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBDb250YWlucyBhbGwgb2YgdGhlIGV2ZW50cy5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0ge307XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FbWl0dGVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICBCaW5kIGEgY2FsbGJhY2sgdG8gYSBzcGVjaWZpYyBldmVudC5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBldmVudCAgICAgVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGxpc3RlbiBmb3IuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgaXMgZW1pdHRlZFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vc3BsaXQgdGhlIGV2ZW50XG5cdCAgICAgICAgdmFyIGV2ZW50cyA9IGV2ZW50LnNwbGl0KC9cXFcrLyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50TmFtZSA9IGV2ZW50c1tpXTtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9ldmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0gPSBbXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnROYW1lXS5wdXNoKGNhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEJpbmQgYSBjYWxsYmFjayB3aGljaCBpcyBvbmx5IGludm9rZWQgb25jZVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIGV2ZW50ICAgICBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gbGlzdGVuIGZvci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCBpcyBlbWl0dGVkXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcblx0ICAgICAgICB2YXIgYm91bmRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy9pbnZva2UgdGhlIGNhbGxiYWNrXG5cdCAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHRoaXMub2ZmKGV2ZW50LCBib3VuZENhbGxiYWNrKTtcblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgdGhpcy5vbihldmVudCwgYm91bmRDYWxsYmFjayk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXIuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgZXZlbnQgICAgIFRoZSBldmVudCB0byBzdG9wIGxpc3RlbmluZyB0by5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB3aGljaCB3YXMgYm91bmQgdG9cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGV2ZW50IHdpdGggVG9uZS5FbWl0dGVyLm9uLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBubyBjYWxsYmFjayBpcyBnaXZlbiwgYWxsIGNhbGxiYWNrc1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHMgYXJlIHJlbW92ZWQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuXHQgICAgICAgIHZhciBldmVudHMgPSBldmVudC5zcGxpdCgvXFxXKy8pO1xuXHQgICAgICAgIGZvciAodmFyIGV2ID0gMDsgZXYgPCBldmVudHMubGVuZ3RoOyBldisrKSB7XG5cdCAgICAgICAgICAgIGV2ZW50ID0gZXZlbnRzW2V2XTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudCkpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYoY2FsbGJhY2spKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzW2V2ZW50XSA9IFtdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZXZlbnRMaXN0ID0gdGhpcy5fZXZlbnRzW2V2ZW50XTtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50TGlzdC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnRMaXN0W2ldID09PSBjYWxsYmFjaykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRMaXN0LnNwbGljZShpLCAxKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW52b2tlIGFsbCBvZiB0aGUgY2FsbGJhY2tzIGJvdW5kIHRvIHRoZSBldmVudFxuXHRcdCAqICB3aXRoIGFueSBhcmd1bWVudHMgcGFzc2VkIGluLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBldmVudCAgVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZ3MuLi4gVGhlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbnMgbGlzdGVuaW5nLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cykge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LmFwcGx5KG51bGwsIGFyZ3VtZW50cykuc2xpY2UoMSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9ldmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnQpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXZlbnRMaXN0ID0gdGhpcy5fZXZlbnRzW2V2ZW50XS5zbGljZSgwKTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBldmVudExpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudExpc3RbaV0uYXBwbHkodGhpcywgYXJncyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBFbWl0dGVyIGZ1bmN0aW9ucyAob24vb2ZmL2VtaXQpIHRvIHRoZSBvYmplY3Rcblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fEZ1bmN0aW9ufSAgb2JqZWN0ICBUaGUgb2JqZWN0IG9yIGNsYXNzIHRvIGV4dGVuZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW1pdHRlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5taXhpbiA9IGZ1bmN0aW9uIChvYmplY3QpIHtcblx0ICAgICAgICB2YXIgZnVuY3Rpb25zID0gW1xuXHQgICAgICAgICAgICAnb24nLFxuXHQgICAgICAgICAgICAnb25jZScsXG5cdCAgICAgICAgICAgICdvZmYnLFxuXHQgICAgICAgICAgICAnZW1pdCdcblx0ICAgICAgICBdO1xuXHQgICAgICAgIG9iamVjdC5fZXZlbnRzID0ge307XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGZ1bmMgPSBmdW5jdGlvbnNbaV07XG5cdCAgICAgICAgICAgIHZhciBlbWl0dGVyRnVuYyA9IFRvbmUuRW1pdHRlci5wcm90b3R5cGVbZnVuY107XG5cdCAgICAgICAgICAgIG9iamVjdFtmdW5jXSA9IGVtaXR0ZXJGdW5jO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gVG9uZS5FbWl0dGVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVtaXR0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIFRpbWVsaW5lIGNsYXNzIGZvciBzY2hlZHVsaW5nIGFuZCBtYWludGFpbmluZyBzdGF0ZVxuXHRcdCAqICAgICAgICAgYWxvbmcgYSB0aW1lbGluZS4gQWxsIGV2ZW50cyBtdXN0IGhhdmUgYSBcInRpbWVcIiBwcm9wZXJ0eS5cblx0XHQgKiAgICAgICAgIEludGVybmFsbHksIGV2ZW50cyBhcmUgc3RvcmVkIGluIHRpbWUgb3JkZXIgZm9yIGZhc3Rcblx0XHQgKiAgICAgICAgIHJldHJpZXZhbC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IFttZW1vcnk9SW5maW5pdHldIFRoZSBudW1iZXIgb2YgcHJldmlvdXMgZXZlbnRzIHRoYXQgYXJlIHJldGFpbmVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ21lbW9yeSddLCBUb25lLlRpbWVsaW5lKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIHNjaGVkdWxlZCB0aW1lbGluZSBldmVudHNcblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lbGluZSA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtZW1vcnkgb2YgdGhlIHRpbWVsaW5lLCBpLmUuXG5cdFx0XHQgKiAgaG93IG1hbnkgZXZlbnRzIGluIHRoZSBwYXN0IGl0IHdpbGwgcmV0YWluXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tZW1vcnkgPSBvcHRpb25zLm1lbW9yeTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpbWVsaW5lKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLmRlZmF1bHRzID0geyAnbWVtb3J5JzogSW5maW5pdHkgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVGltZWxpbmUjXG5cdFx0ICogIEBuYW1lIGxlbmd0aFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRpbWVsaW5lLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lLmxlbmd0aDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnNlcnQgYW4gZXZlbnQgb2JqZWN0IG9udG8gdGhlIHRpbWVsaW5lLiBFdmVudHMgbXVzdCBoYXZlIGEgXCJ0aW1lXCIgYXR0cmlidXRlLlxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R9ICBldmVudCAgVGhlIGV2ZW50IG9iamVjdCB0byBpbnNlcnQgaW50byB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgLy90aGUgZXZlbnQgbmVlZHMgdG8gaGF2ZSBhIHRpbWUgYXR0cmlidXRlXG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihldmVudC50aW1lKSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuVGltZWxpbmU6IGV2ZW50cyBtdXN0IGhhdmUgYSB0aW1lIGF0dHJpYnV0ZScpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBldmVudC50aW1lID0gZXZlbnQudGltZS52YWx1ZU9mKCk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNwbGljZShpbmRleCArIDEsIDAsIGV2ZW50KTtcblx0ICAgICAgICAvL2lmIHRoZSBsZW5ndGggaXMgbW9yZSB0aGFuIHRoZSBtZW1vcnksIHJlbW92ZSB0aGUgcHJldmlvdXMgb25lc1xuXHQgICAgICAgIGlmICh0aGlzLmxlbmd0aCA+IHRoaXMubWVtb3J5KSB7XG5cdCAgICAgICAgICAgIHZhciBkaWZmID0gdGhpcy5sZW5ndGggLSB0aGlzLm1lbW9yeTtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUuc3BsaWNlKDAsIGRpZmYpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGFuIGV2ZW50IGZyb20gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R9ICBldmVudCAgVGhlIGV2ZW50IG9iamVjdCB0byByZW1vdmUgZnJvbSB0aGUgbGlzdC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3RpbWVsaW5lLmluZGV4T2YoZXZlbnQpO1xuXHQgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgbmVhcmVzdCBldmVudCB3aG9zZSB0aW1lIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGNvbXBhcmF0b3IgV2hpY2ggdmFsdWUgaW4gdGhlIG9iamVjdCB0byBjb21wYXJlXG5cdFx0ICogIEByZXR1cm5zIHtPYmplY3R9IFRoZSBldmVudCBvYmplY3Qgc2V0IGFmdGVyIHRoYXQgdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgY29tcGFyYXRvciA9IFRvbmUuZGVmYXVsdEFyZyhjb21wYXJhdG9yLCAndGltZScpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lLCBjb21wYXJhdG9yKTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtpbmRleF07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGZpcnN0IGV2ZW50IGluIHRoZSB0aW1lbGluZSB3aXRob3V0IHJlbW92aW5nIGl0XG5cdFx0ICogIEByZXR1cm5zIHtPYmplY3R9IFRoZSBmaXJzdCBldmVudCBvYmplY3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLnBlZWsgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lWzBdO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGZpcnN0IGV2ZW50IGluIHRoZSB0aW1lbGluZSBhbmQgcmVtb3ZlIGl0XG5cdFx0ICogIEByZXR1cm5zIHtPYmplY3R9IFRoZSBmaXJzdCBldmVudCBvYmplY3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLnNoaWZ0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZS5zaGlmdCgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGV2ZW50IHdoaWNoIGlzIHNjaGVkdWxlZCBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGNvbXBhcmF0b3IgV2hpY2ggdmFsdWUgaW4gdGhlIG9iamVjdCB0byBjb21wYXJlXG5cdFx0ICogIEByZXR1cm5zIHtPYmplY3R9IFRoZSBldmVudCBvYmplY3QgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmdldEFmdGVyID0gZnVuY3Rpb24gKHRpbWUsIGNvbXBhcmF0b3IpIHtcblx0ICAgICAgICBjb21wYXJhdG9yID0gVG9uZS5kZWZhdWx0QXJnKGNvbXBhcmF0b3IsICd0aW1lJyk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUsIGNvbXBhcmF0b3IpO1xuXHQgICAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl90aW1lbGluZS5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4ICsgMV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGV2ZW50IGJlZm9yZSB0aGUgZXZlbnQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBjb21wYXJhdG9yIFdoaWNoIHZhbHVlIGluIHRoZSBvYmplY3QgdG8gY29tcGFyZVxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXZlbnQgb2JqZWN0IGJlZm9yZSB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZ2V0QmVmb3JlID0gZnVuY3Rpb24gKHRpbWUsIGNvbXBhcmF0b3IpIHtcblx0ICAgICAgICBjb21wYXJhdG9yID0gVG9uZS5kZWZhdWx0QXJnKGNvbXBhcmF0b3IsICd0aW1lJyk7XG5cdCAgICAgICAgdmFyIGxlbiA9IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDtcblx0ICAgICAgICAvL2lmIGl0J3MgYWZ0ZXIgdGhlIGxhc3QgaXRlbSwgcmV0dXJuIHRoZSBsYXN0IGl0ZW1cblx0ICAgICAgICBpZiAobGVuID4gMCAmJiB0aGlzLl90aW1lbGluZVtsZW4gLSAxXVtjb21wYXJhdG9yXSA8IHRpbWUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2xlbiAtIDFdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSwgY29tcGFyYXRvcik7XG5cdCAgICAgICAgaWYgKGluZGV4IC0gMSA+PSAwKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtpbmRleCAtIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGV2ZW50cyBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIGlmICh0aGlzLl90aW1lbGluZS5sZW5ndGggPiAxKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaChhZnRlcik7XG5cdCAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbaW5kZXhdLnRpbWUgPT09IGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9nZXQgdGhlIGZpcnN0IGl0ZW0gd2l0aCB0aGF0IHRpbWVcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVtpXS50aW1lID09PSBhZnRlcikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSB0aGlzLl90aW1lbGluZS5zbGljZSgwLCBpbmRleCk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gdGhpcy5fdGltZWxpbmUuc2xpY2UoMCwgaW5kZXggKyAxKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3RpbWVsaW5lLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgICAgICAvL3RoZSBmaXJzdCBpdGVtJ3MgdGltZVxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbMF0udGltZSA+PSBhZnRlcikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBbXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGV2ZW50cyBiZWZvcmUgb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIGNhbmNlbCBiZWZvcmUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5jYW5jZWxCZWZvcmUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IHRoaXMuX3RpbWVsaW5lLnNsaWNlKGluZGV4ICsgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIHByZXZpb3VzIGV2ZW50IGlmIHRoZXJlIGlzIG9uZS4gbnVsbCBvdGhlcndpc2Vcblx0XHQgKiBAcGFyYW0gIHtPYmplY3R9IGV2ZW50IFRoZSBldmVudCB0byBmaW5kIHRoZSBwcmV2aW91cyBvbmUgb2Zcblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9ICAgICAgIFRoZSBldmVudCByaWdodCBiZWZvcmUgdGhlIGdpdmVuIGV2ZW50XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5wcmV2aW91c0V2ZW50ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fdGltZWxpbmUuaW5kZXhPZihldmVudCk7XG5cdCAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXggLSAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIERvZXMgYSBiaW5hcnkgc2VhcmNoIG9uIHRoZSB0aW1lbGluZSBhcnJheSBhbmQgcmV0dXJucyB0aGVcblx0XHQgKiAgbmVhcmVzdCBldmVudCBpbmRleCB3aG9zZSB0aW1lIGlzIGFmdGVyIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBJZiBhIHRpbWUgaXMgc2VhcmNoZWQgYmVmb3JlIHRoZSBmaXJzdCBpbmRleCBpbiB0aGUgdGltZWxpbmUsIC0xIGlzIHJldHVybmVkLlxuXHRcdCAqICBJZiB0aGUgdGltZSBpcyBhZnRlciB0aGUgZW5kLCB0aGUgaW5kZXggb2YgdGhlIGxhc3QgaXRlbSBpcyByZXR1cm5lZC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBjb21wYXJhdG9yIFdoaWNoIHZhbHVlIGluIHRoZSBvYmplY3QgdG8gY29tcGFyZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSB0aGUgaW5kZXggaW4gdGhlIHRpbWVsaW5lIGFycmF5XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5fc2VhcmNoID0gZnVuY3Rpb24gKHRpbWUsIGNvbXBhcmF0b3IpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdGltZWxpbmUubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAtMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgY29tcGFyYXRvciA9IFRvbmUuZGVmYXVsdEFyZyhjb21wYXJhdG9yLCAndGltZScpO1xuXHQgICAgICAgIHZhciBiZWdpbm5pbmcgPSAwO1xuXHQgICAgICAgIHZhciBsZW4gPSB0aGlzLl90aW1lbGluZS5sZW5ndGg7XG5cdCAgICAgICAgdmFyIGVuZCA9IGxlbjtcblx0ICAgICAgICBpZiAobGVuID4gMCAmJiB0aGlzLl90aW1lbGluZVtsZW4gLSAxXVtjb21wYXJhdG9yXSA8PSB0aW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBsZW4gLSAxO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB3aGlsZSAoYmVnaW5uaW5nIDwgZW5kKSB7XG5cdCAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgbWlkcG9pbnQgZm9yIHJvdWdobHkgZXF1YWwgcGFydGl0aW9uXG5cdCAgICAgICAgICAgIHZhciBtaWRQb2ludCA9IE1hdGguZmxvb3IoYmVnaW5uaW5nICsgKGVuZCAtIGJlZ2lubmluZykgLyAyKTtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fdGltZWxpbmVbbWlkUG9pbnRdO1xuXHQgICAgICAgICAgICB2YXIgbmV4dEV2ZW50ID0gdGhpcy5fdGltZWxpbmVbbWlkUG9pbnQgKyAxXTtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50W2NvbXBhcmF0b3JdID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAvL2Nob29zZSB0aGUgbGFzdCBvbmUgdGhhdCBoYXMgdGhlIHNhbWUgdGltZVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IG1pZFBvaW50OyBpIDwgdGhpcy5fdGltZWxpbmUubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdGVzdEV2ZW50ID0gdGhpcy5fdGltZWxpbmVbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RFdmVudFtjb21wYXJhdG9yXSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBtaWRQb2ludCA9IGk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG1pZFBvaW50O1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50W2NvbXBhcmF0b3JdIDwgdGltZSAmJiBuZXh0RXZlbnRbY29tcGFyYXRvcl0gPiB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbWlkUG9pbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRbY29tcGFyYXRvcl0gPiB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAvL3NlYXJjaCBsb3dlclxuXHQgICAgICAgICAgICAgICAgZW5kID0gbWlkUG9pbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvL3NlYXJjaCB1cHBlclxuXHQgICAgICAgICAgICAgICAgYmVnaW5uaW5nID0gbWlkUG9pbnQgKyAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAtMTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgaXRlcmF0b3IuIEFwcGxpZXMgZXh0cmEgc2FmZXR5IGNoZWNrcyBmb3Jcblx0XHQgKiAgcmVtb3ZpbmcgaXRlbXMgZnJvbSB0aGUgYXJyYXkuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2tcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gICAgbG93ZXJCb3VuZFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSAgICB1cHBlckJvdW5kXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5faXRlcmF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgbG93ZXJCb3VuZCwgdXBwZXJCb3VuZCkge1xuXHQgICAgICAgIGxvd2VyQm91bmQgPSBUb25lLmRlZmF1bHRBcmcobG93ZXJCb3VuZCwgMCk7XG5cdCAgICAgICAgdXBwZXJCb3VuZCA9IFRvbmUuZGVmYXVsdEFyZyh1cHBlckJvdW5kLCB0aGlzLl90aW1lbGluZS5sZW5ndGggLSAxKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5zbGljZShsb3dlckJvdW5kLCB1cHBlckJvdW5kICsgMSkuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBldmVudCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5XG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGF0IG9yIGJlZm9yZSB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hCZWZvcmUgPSBmdW5jdGlvbiAodGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL2l0ZXJhdGUgb3ZlciB0aGUgaXRlbXMgaW4gcmV2ZXJzZSBzbyB0aGF0IHJlbW92aW5nIGFuIGl0ZW0gZG9lc24ndCBicmVhayB0aGluZ3Ncblx0ICAgICAgICB2YXIgdXBwZXJCb3VuZCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBpZiAodXBwZXJCb3VuZCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgMCwgdXBwZXJCb3VuZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQWZ0ZXIgPSBmdW5jdGlvbiAodGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL2l0ZXJhdGUgb3ZlciB0aGUgaXRlbXMgaW4gcmV2ZXJzZSBzbyB0aGF0IHJlbW92aW5nIGFuIGl0ZW0gZG9lc24ndCBicmVhayB0aGluZ3Ncblx0ICAgICAgICB2YXIgbG93ZXJCb3VuZCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCBsb3dlckJvdW5kICsgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBiZXR3ZWVuIHRoZSBzdGFydFRpbWUgYW5kIGVuZFRpbWUuIFxuXHRcdCAqICBUaGUgdGltZXJhbmdlIGlzIGluY2x1c2l2ZSBvZiB0aGUgc3RhcnRUaW1lLCBidXQgZXhjbHVzaXZlIG9mIHRoZSBlbmRUaW1lLiBcblx0XHQgKiAgcmFuZ2UgPSBbc3RhcnRUaW1lLCBlbmRUaW1lKS4gXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHN0YXJ0VGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGVuZFRpbWUgVGhlIGVuZCBvZiB0aGUgdGVzdCBpbnRlcnZhbC4gXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hCZXR3ZWVuID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgZW5kVGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICB2YXIgbG93ZXJCb3VuZCA9IHRoaXMuX3NlYXJjaChzdGFydFRpbWUpO1xuXHQgICAgICAgIHZhciB1cHBlckJvdW5kID0gdGhpcy5fc2VhcmNoKGVuZFRpbWUpO1xuXHQgICAgICAgIGlmIChsb3dlckJvdW5kICE9PSAtMSAmJiB1cHBlckJvdW5kICE9PSAtMSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbbG93ZXJCb3VuZF0udGltZSAhPT0gc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICBsb3dlckJvdW5kICs9IDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9leGNsdXNpdmUgb2YgdGhlIGVuZCB0aW1lXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVt1cHBlckJvdW5kXS50aW1lID09PSBlbmRUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICB1cHBlckJvdW5kIC09IDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgbG93ZXJCb3VuZCwgdXBwZXJCb3VuZCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChsb3dlckJvdW5kID09PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCAwLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhdCBvciBhZnRlciB0aGUgZ2l2ZW4gdGltZS4gU2ltaWxhciB0b1xuXHRcdCAqICBmb3JFYWNoQWZ0ZXIsIGJ1dCBpbmNsdWRlcyB0aGUgaXRlbShzKSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hGcm9tID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIGxvd2VyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgLy93b3JrIGJhY2t3YXJkcyB1bnRpbCB0aGUgZXZlbnQgdGltZSBpcyBsZXNzIHRoYW4gdGltZVxuXHQgICAgICAgIHdoaWxlIChsb3dlckJvdW5kID49IDAgJiYgdGhpcy5fdGltZWxpbmVbbG93ZXJCb3VuZF0udGltZSA+PSB0aW1lKSB7XG5cdCAgICAgICAgICAgIGxvd2VyQm91bmQtLTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgbG93ZXJCb3VuZCArIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hBdFRpbWUgPSBmdW5jdGlvbiAodGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL2l0ZXJhdGUgb3ZlciB0aGUgaXRlbXMgaW4gcmV2ZXJzZSBzbyB0aGF0IHJlbW92aW5nIGFuIGl0ZW0gZG9lc24ndCBicmVhayB0aGluZ3Ncblx0ICAgICAgICB2YXIgdXBwZXJCb3VuZCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBpZiAodXBwZXJCb3VuZCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhpcy5faXRlcmF0ZShmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChldmVudC50aW1lID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBldmVudCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0sIDAsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlRpbWVsaW5lfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWVsaW5lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIXdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnT2ZmbGluZUF1ZGlvQ29udGV4dCcpICYmIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnd2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dCcpKSB7XG5cdCAgICAgICAgICAgIHdpbmRvdy5PZmZsaW5lQXVkaW9Db250ZXh0ID0gd2luZG93LndlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vcmV0dXJucyBwcm9taXNlP1xuXHQgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IE9mZmxpbmVBdWRpb0NvbnRleHQoMSwgMSwgNDQxMDApO1xuXHQgICAgICAgIHZhciByZXQgPSBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7XG5cdCAgICAgICAgaWYgKCEocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcblx0ICAgICAgICAgICAgT2ZmbGluZUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuX25hdGl2ZV9zdGFydFJlbmRlcmluZyA9IE9mZmxpbmVBdWRpb0NvbnRleHQucHJvdG90eXBlLnN0YXJ0UmVuZGVyaW5nO1xuXHQgICAgICAgICAgICBPZmZsaW5lQXVkaW9Db250ZXh0LnByb3RvdHlwZS5zdGFydFJlbmRlcmluZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoZG9uZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMub25jb21wbGV0ZSA9IGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZS5yZW5kZXJlZEJ1ZmZlcik7XG5cdCAgICAgICAgICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9uYXRpdmVfc3RhcnRSZW5kZXJpbmcoKTtcblx0ICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIXdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnQXVkaW9Db250ZXh0JykgJiYgd2luZG93Lmhhc093blByb3BlcnR5KCd3ZWJraXRBdWRpb0NvbnRleHQnKSkge1xuXHQgICAgICAgICAgICB3aW5kb3cuQXVkaW9Db250ZXh0ID0gd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9ub3QgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIGJ1dCBvbmx5IGFuIEFQSSBwbGFjZWhvbGRlclxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jbG9zZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNGdW5jdGlvbih0aGlzLnN1c3BlbmQpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5zdXNwZW5kKCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vbm90IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50XG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLnJlc3VtZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jcmVhdGVHYWluXG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUdhaW4gJiYgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluTm9kZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUdhaW4gPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUdhaW5Ob2RlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NyZWF0ZURlbGF5XG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5ICYmIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlRGVsYXlOb2RlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlRGVsYXkgPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5Tm9kZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy90ZXN0IGRlY29kZUF1ZGlvRGF0YSByZXR1cm5zIGEgcHJvbWlzZVxuXHQgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb2hheW9uYW8vd2ViLWF1ZGlvLWFwaS1zaGltL2Jsb2IvbWFzdGVyL3NyYy9BdWRpb0NvbnRleHQuanNcblx0ICAgICAgICAvLyBNSVQgTGljZW5zZSAoYykgMjAxNSBAbW9oYXlvbmFvXG5cdCAgICAgICAgdmFyIGRlY29kZUF1ZGlvRGF0YVByb21pc2UgPSBmYWxzZTtcblx0ICAgICAgICB2YXIgb2ZmbGluZUNvbnRleHQgPSBuZXcgT2ZmbGluZUF1ZGlvQ29udGV4dCgxLCAxLCA0NDEwMCk7XG5cdCAgICAgICAgdmFyIGF1ZGlvRGF0YSA9IG5ldyBVaW50MzJBcnJheShbXG5cdCAgICAgICAgICAgIDExNzkwMTE0MTAsXG5cdCAgICAgICAgICAgIDQ4LFxuXHQgICAgICAgICAgICAxMTYzMjgwNzI3LFxuXHQgICAgICAgICAgICA1NDQ1MDEwOTQsXG5cdCAgICAgICAgICAgIDE2LFxuXHQgICAgICAgICAgICAxMzEwNzMsXG5cdCAgICAgICAgICAgIDQ0MTAwLFxuXHQgICAgICAgICAgICAxNzY0MDAsXG5cdCAgICAgICAgICAgIDEwNDg1ODAsXG5cdCAgICAgICAgICAgIDE2MzUwMTcwNjAsXG5cdCAgICAgICAgICAgIDgsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDBcblx0ICAgICAgICBdKS5idWZmZXI7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgdmFyIHJldCA9IG9mZmxpbmVDb250ZXh0LmRlY29kZUF1ZGlvRGF0YShhdWRpb0RhdGEpO1xuXHQgICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHQgICAgICAgICAgICAgICAgZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSA9IHRydWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgIGRlY29kZUF1ZGlvRGF0YVByb21pc2UgPSBmYWxzZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCFkZWNvZGVBdWRpb0RhdGFQcm9taXNlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuX25hdGl2ZV9kZWNvZGVBdWRpb0RhdGEgPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmRlY29kZUF1ZGlvRGF0YTtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5kZWNvZGVBdWRpb0RhdGEgPSBmdW5jdGlvbiAoYXVkaW9EYXRhKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHN1Y2Nlc3MsIGVycm9yKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmF0aXZlX2RlY29kZUF1ZGlvRGF0YShhdWRpb0RhdGEsIHN1Y2Nlc3MsIGVycm9yKTtcblx0ICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgQXVkaW9Db250ZXh0LlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvQ29udGV4dD19IGNvbnRleHQgb3B0aW9uYWxseSBwYXNzIGluIGEgY29udGV4dFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnY29udGV4dCddLCBUb25lLkNvbnRleHQpO1xuXHQgICAgICAgIGlmICghb3B0aW9ucy5jb250ZXh0KSB7XG5cdCAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dCA9IG5ldyB3aW5kb3cuQXVkaW9Db250ZXh0KCk7XG5cdCAgICAgICAgICAgIGlmICghb3B0aW9ucy5jb250ZXh0KSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBjcmVhdGUgQXVkaW9Db250ZXh0LiBQb3NzaWJseSB0b28gbWFueSBBdWRpb0NvbnRleHRzIHJ1bm5pbmcgYWxyZWFkeS4nKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0O1xuXHQgICAgICAgIC8vIGV4dGVuZCBhbGwgb2YgdGhlIG1ldGhvZHNcblx0ICAgICAgICBmb3IgKHZhciBwcm9wIGluIHRoaXMuX2NvbnRleHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGVmaW5lUHJvcGVydHkodGhpcy5fY29udGV4dCwgcHJvcCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWZhdWx0IGxhdGVuY3kgaGludFxuXHRcdFx0ICogIEB0eXBlICB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sYXRlbmN5SGludCA9IG9wdGlvbnMubGF0ZW5jeUhpbnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBjb25zdGFudHMgQXVkaW9CdWZmZXJTb3VyY2VOb2Rlc1xuXHRcdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb25zdGFudHMgPSB7fTtcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8vIFdPUktFUlxuXHQgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiB0aW1lIGV2ZW50cyBhcmUgc2NoZWR1bGVkXG5cdFx0XHQgKiAgaW50byB0aGUgZnV0dXJlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvb2tBaGVhZCA9IG9wdGlvbnMubG9va0FoZWFkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgcmVmZXJlbmNlIHRvIHRoZSBhY3R1YWwgY29tcHV0ZWQgdXBkYXRlIGludGVydmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbXB1dGVkVXBkYXRlSW50ZXJ2YWwgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgcmVsaWFibGUgY2FsbGJhY2sgbWV0aG9kXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge1RpY2tlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpY2tlciA9IG5ldyBUaWNrZXIodGhpcy5lbWl0LmJpbmQodGhpcywgJ3RpY2snKSwgb3B0aW9ucy5jbG9ja1NvdXJjZSwgb3B0aW9ucy51cGRhdGVJbnRlcnZhbCk7XG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvLyBUSU1FT1VUU1xuXHQgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxsIG9mIHRoZSBzZXRUaW1lb3V0IGV2ZW50cy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRzID0gbmV3IFRvbmUuVGltZWxpbmUoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGltZW91dCBpZCBjb3VudGVyXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZW91dElkcyA9IDA7XG5cdCAgICAgICAgdGhpcy5vbigndGljaycsIHRoaXMuX3RpbWVvdXRMb29wLmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ29udGV4dCwgVG9uZS5FbWl0dGVyKTtcblx0ICAgIFRvbmUuRW1pdHRlci5taXhpbihUb25lLkNvbnRleHQpO1xuXHQgICAgLyoqXG5cdFx0ICogZGVmYXVsdHNcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnY2xvY2tTb3VyY2UnOiAnd29ya2VyJyxcblx0ICAgICAgICAnbGF0ZW5jeUhpbnQnOiAnaW50ZXJhY3RpdmUnLFxuXHQgICAgICAgICdsb29rQWhlYWQnOiAwLjEsXG5cdCAgICAgICAgJ3VwZGF0ZUludGVydmFsJzogMC4wM1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZpbmUgYSBwcm9wZXJ0eSBvbiB0aGlzIFRvbmUuQ29udGV4dC5cblx0XHQgKiAgVGhpcyBpcyB1c2VkIHRvIGV4dGVuZCB0aGUgbmF0aXZlIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAcGFyYW0gIHtBdWRpb0NvbnRleHR9ICBjb250ZXh0XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHByb3Bcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuX2RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKGNvbnRleHQsIHByb3ApIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXNbcHJvcF0pKSB7XG5cdCAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wLCB7XG5cdCAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHRbcHJvcF0gPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRbcHJvcF0uYmluZChjb250ZXh0KTtcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY29udGV4dFtwcm9wXSA9IHZhbDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCBhdWRpbyBjb250ZXh0IHRpbWVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUubm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0LmN1cnJlbnRUaW1lICsgdGhpcy5sb29rQWhlYWQ7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFByb21pc2Ugd2hpY2ggaXMgaW52b2tlZCB3aGVuIHRoZSBjb250ZXh0IGlzIHJ1bm5pbmcuXG5cdFx0ICogIFRyaWVzIHRvIHJlc3VtZSB0aGUgY29udGV4dCBpZiBpdCdzIG5vdCBzdGFydGVkLlxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUucmVhZHkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChkb25lKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9jb250ZXh0LnN0YXRlID09PSAncnVubmluZycpIHtcblx0ICAgICAgICAgICAgICAgIGRvbmUoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQucmVzdW1lKCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQcm9taXNlIHdoaWNoIGlzIGludm9rZWQgd2hlbiB0aGUgY29udGV4dCBpcyBydW5uaW5nLlxuXHRcdCAqICBUcmllcyB0byByZXN1bWUgdGhlIGNvbnRleHQgaWYgaXQncyBub3Qgc3RhcnRlZC5cblx0XHQgKiAgQHJldHVybiAge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0LmNsb3NlKCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQ29udGV4dC5lbWl0KCdjbG9zZScsIHRoaXMpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdlbmVyYXRlIGEgbG9vcGVkIGJ1ZmZlciBhdCBzb21lIGNvbnN0YW50IHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB2YWxcblx0XHQgKiAgQHJldHVybiAge0J1ZmZlclNvdXJjZU5vZGV9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmdldENvbnN0YW50ID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9jb25zdGFudHNbdmFsXSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uc3RhbnRzW3ZhbF07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuX2NvbnRleHQuY3JlYXRlQnVmZmVyKDEsIDEyOCwgdGhpcy5fY29udGV4dC5zYW1wbGVSYXRlKTtcblx0ICAgICAgICAgICAgdmFyIGFyciA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGFycltpXSA9IHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YXIgY29uc3RhbnQgPSB0aGlzLl9jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgICAgICBjb25zdGFudC5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgICAgICBjb25zdGFudC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICAgICAgY29uc3RhbnQuYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgICAgICBjb25zdGFudC5sb29wID0gdHJ1ZTtcblx0ICAgICAgICAgICAgY29uc3RhbnQuc3RhcnQoMCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50c1t2YWxdID0gY29uc3RhbnQ7XG5cdCAgICAgICAgICAgIHJldHVybiBjb25zdGFudDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcml2YXRlIGxvb3Agd2hpY2gga2VlcHMgdHJhY2sgb2YgdGhlIGNvbnRleHQgc2NoZWR1bGVkIHRpbWVvdXRzXG5cdFx0ICogIElzIGludm9rZWQgZnJvbSB0aGUgY2xvY2sgc291cmNlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLl90aW1lb3V0TG9vcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICB3aGlsZSAodGhpcy5fdGltZW91dHMgJiYgdGhpcy5fdGltZW91dHMubGVuZ3RoICYmIHRoaXMuX3RpbWVvdXRzLnBlZWsoKS50aW1lIDw9IG5vdykge1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lb3V0cy5zaGlmdCgpLmNhbGxiYWNrKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIHNldFRpbWVvdXQgd2hpY2ggaXMgZ2F1cmVudGVlZCBieSB0aGUgY2xvY2sgc291cmNlLlxuXHRcdCAqICBBbHNvIHJ1bnMgaW4gdGhlIG9mZmxpbmUgY29udGV4dC5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBmbiAgICAgICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlXG5cdFx0ICogIEBwYXJhbSAge1NlY29uZHN9ICAgIHRpbWVvdXQgIFRoZSB0aW1lb3V0IGluIHNlY29uZHNcblx0XHQgKiAgQHJldHVybnMge051bWJlcn0gSUQgdG8gdXNlIHdoZW4gaW52b2tpbmcgVG9uZS5Db250ZXh0LmNsZWFyVGltZW91dFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKGZuLCB0aW1lb3V0KSB7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dElkcysrO1xuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRzLmFkZCh7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrOiBmbixcblx0ICAgICAgICAgICAgdGltZTogbm93ICsgdGltZW91dCxcblx0ICAgICAgICAgICAgaWQ6IHRoaXMuX3RpbWVvdXRJZHNcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGltZW91dElkcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYXJzIGEgcHJldmlvdXNseSBzY2hlZHVsZWQgdGltZW91dCB3aXRoIFRvbmUuY29udGV4dC5zZXRUaW1lb3V0XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGlkICBUaGUgSUQgcmV0dXJuZWQgZnJvbSBzZXRUaW1lb3V0XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkNvbnRleHR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmNsZWFyVGltZW91dCA9IGZ1bmN0aW9uIChpZCkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChldmVudC5pZCA9PT0gaWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKGV2ZW50KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBIb3cgb2Z0ZW4gdGhlIFdlYiBXb3JrZXIgY2FsbGJhY2sgaXMgaW52b2tlZC5cblx0XHQgKiAgVGhpcyBudW1iZXIgY29ycmVzcG9uZHMgdG8gaG93IHJlc3BvbnNpdmUgdGhlIHNjaGVkdWxpbmdcblx0XHQgKiAgY2FuIGJlLiBDb250ZXh0LnVwZGF0ZUludGVydmFsICsgQ29udGV4dC5sb29rQWhlYWQgZ2l2ZXMgeW91IHRoZVxuXHRcdCAqICB0b3RhbCBsYXRlbmN5IGJldHdlZW4gc2NoZWR1bGluZyBhbiBldmVudCBhbmQgaGVhcmluZyBpdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ29udGV4dCNcblx0XHQgKiAgQG5hbWUgdXBkYXRlSW50ZXJ2YWxcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNvbnRleHQucHJvdG90eXBlLCAndXBkYXRlSW50ZXJ2YWwnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWNrZXIudXBkYXRlSW50ZXJ2YWw7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIudXBkYXRlSW50ZXJ2YWwgPSBpbnRlcnZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGF0IHRoZSBzb3VyY2Ugb2YgdGhlIGNsb2NrIGlzLCBlaXRoZXIgXCJ3b3JrZXJcIiAoV2ViIFdvcmtlciBbZGVmYXVsdF0pLFxuXHRcdCAqICBcInRpbWVvdXRcIiAoc2V0VGltZW91dCksIG9yIFwib2ZmbGluZVwiIChub25lKS5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ29udGV4dCNcblx0XHQgKiAgQG5hbWUgY2xvY2tTb3VyY2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNvbnRleHQucHJvdG90eXBlLCAnY2xvY2tTb3VyY2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWNrZXIudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja2VyLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0eXBlIG9mIHBsYXliYWNrLCB3aGljaCBhZmZlY3RzIHRyYWRlb2ZmcyBiZXR3ZWVuIGF1ZGlvXG5cdFx0ICogIG91dHB1dCBsYXRlbmN5IGFuZCByZXNwb25zaXZlbmVzcy5cblx0XHQgKlxuXHRcdCAqICBJbiBhZGRpdGlvbiB0byBzZXR0aW5nIHRoZSB2YWx1ZSBpbiBzZWNvbmRzLCB0aGUgbGF0ZW5jeUhpbnQgYWxzb1xuXHRcdCAqICBhY2NlcHRzIHRoZSBzdHJpbmdzIFwiaW50ZXJhY3RpdmVcIiAocHJpb3JpdGl6ZXMgbG93IGxhdGVuY3kpLFxuXHRcdCAqICBcInBsYXliYWNrXCIgKHByaW9yaXRpemVzIHN1c3RhaW5lZCBwbGF5YmFjayksIFwiYmFsYW5jZWRcIiAoYmFsYW5jZXNcblx0XHQgKiAgbGF0ZW5jeSBhbmQgcGVyZm9ybWFuY2UpLCBhbmQgXCJmYXN0ZXN0XCIgKGxvd2VzdCBsYXRlbmN5LCBtaWdodCBnbGl0Y2ggbW9yZSBvZnRlbikuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd8U2Vjb25kc31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ29udGV4dCNcblx0XHQgKiAgQG5hbWUgbGF0ZW5jeUhpbnRcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NldCB0aGUgbG9va0FoZWFkIHRvIDAuMyBzZWNvbmRzXG5cdFx0ICogVG9uZS5jb250ZXh0LmxhdGVuY3lIaW50ID0gMC4zO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udGV4dC5wcm90b3R5cGUsICdsYXRlbmN5SGludCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xhdGVuY3lIaW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaGludCkge1xuXHQgICAgICAgICAgICB2YXIgbG9va0FoZWFkID0gaGludDtcblx0ICAgICAgICAgICAgdGhpcy5fbGF0ZW5jeUhpbnQgPSBoaW50O1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc1N0cmluZyhoaW50KSkge1xuXHQgICAgICAgICAgICAgICAgc3dpdGNoIChoaW50KSB7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdpbnRlcmFjdGl2ZSc6XG5cdCAgICAgICAgICAgICAgICAgICAgbG9va0FoZWFkID0gMC4xO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubGF0ZW5jeUhpbnQgPSBoaW50O1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAncGxheWJhY2snOlxuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuODtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2JhbGFuY2VkJzpcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjI1O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubGF0ZW5jeUhpbnQgPSBoaW50O1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnZmFzdGVzdCc6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9ICdpbnRlcmFjdGl2ZSc7XG5cdCAgICAgICAgICAgICAgICAgICAgbG9va0FoZWFkID0gMC4wMTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmxvb2tBaGVhZCA9IGxvb2tBaGVhZDtcblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVJbnRlcnZhbCA9IGxvb2tBaGVhZCAvIDM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVW5saWtlIG90aGVyIGRpc3Bvc2UgbWV0aG9kcywgdGhpcyByZXR1cm5zIGEgUHJvbWlzZVxuXHRcdCAqICB3aGljaCBleGVjdXRlcyB3aGVuIHRoZSBjb250ZXh0IGlzIGNsb3NlZCBhbmQgZGlzcG9zZWRcblx0XHQgKiAgQHJldHVybnMge1Byb21pc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5jbG9zZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja2VyID0gbnVsbDtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dHMuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lb3V0cyA9IG51bGw7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNvbiBpbiB0aGlzLl9jb25zdGFudHMpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50c1tjb25dLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9jb25zdGFudHMgPSBudWxsO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIEEgY2xhc3Mgd2hpY2ggcHJvdmlkZXMgYSByZWxpYWJsZSBjYWxsYmFjayB1c2luZyBlaXRoZXJcblx0XHQgKiAgICAgICAgYSBXZWIgV29ya2VyLCBvciBpZiB0aGF0IGlzbid0IHN1cHBvcnRlZCwgZmFsbHMgYmFjayB0byBzZXRUaW1lb3V0LlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgVGlja2VyID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0eXBlLCB1cGRhdGVJbnRlcnZhbCkge1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogRWl0aGVyIFwid29ya2VyXCIgb3IgXCJ0aW1lb3V0XCJcblx0XHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdXBkYXRlIGludGVydmFsIG9mIHRoZSB3b3JrZXJcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJ2YWwgPSB1cGRhdGVJbnRlcnZhbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYXQgcmVndWxhciBpbnRlcnZhbHNcblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYWxsYmFjayA9IFRvbmUuZGVmYXVsdEFyZyhjYWxsYmFjaywgVG9uZS5ub09wKTtcblx0ICAgICAgICAvL2NyZWF0ZSB0aGUgY2xvY2sgc291cmNlIGZvciB0aGUgZmlyc3QgdGltZVxuXHQgICAgICAgIHRoaXMuX2NyZWF0ZUNsb2NrKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBvc3NpYmxlIHRpY2tlciB0eXBlc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRpY2tlci5UeXBlID0ge1xuXHQgICAgICAgIFdvcmtlcjogJ3dvcmtlcicsXG5cdCAgICAgICAgVGltZW91dDogJ3RpbWVvdXQnLFxuXHQgICAgICAgIE9mZmxpbmU6ICdvZmZsaW5lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZW5lcmF0ZSBhIHdlYiB3b3JrZXJcblx0XHQgKiAgQHJldHVybiAge1dlYldvcmtlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuX2NyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL1VSTCBTaGltXG5cdCAgICAgICAgd2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblx0ICAgICAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFsvL3RoZSBpbml0aWFsIHRpbWVvdXQgdGltZVxuXHQgICAgICAgICAgICAndmFyIHRpbWVvdXRUaW1lID0gJyArICh0aGlzLl91cGRhdGVJbnRlcnZhbCAqIDEwMDApLnRvRml4ZWQoMSkgKyAnOycgKyAvL29ubWVzc2FnZSBjYWxsYmFja1xuXHQgICAgICAgICAgICAnc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbihtc2cpeycgKyAnXFx0dGltZW91dFRpbWUgPSBwYXJzZUludChtc2cuZGF0YSk7JyArICd9OycgKyAvL3RoZSB0aWNrIGZ1bmN0aW9uIHdoaWNoIHBvc3RzIGEgbWVzc2FnZVxuXHQgICAgICAgICAgICAvL2FuZCBzY2hlZHVsZXMgYSBuZXcgdGlja1xuXHQgICAgICAgICAgICAnZnVuY3Rpb24gdGljaygpeycgKyAnXFx0c2V0VGltZW91dCh0aWNrLCB0aW1lb3V0VGltZSk7JyArICdcXHRzZWxmLnBvc3RNZXNzYWdlKFxcJ3RpY2tcXCcpOycgKyAnfScgKyAvL2NhbGwgdGljayBpbml0aWFsbHlcblx0ICAgICAgICAgICAgJ3RpY2soKTsnXSk7XG5cdCAgICAgICAgdmFyIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXHQgICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKGJsb2JVcmwpO1xuXHQgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSB0aGlzLl9jYWxsYmFjay5iaW5kKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dvcmtlciA9IHdvcmtlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDcmVhdGUgYSB0aW1lb3V0IGxvb3Bcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fY3JlYXRlVGltZW91dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVRpbWVvdXQoKTtcblx0ICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2soKTtcblx0ICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMuX3VwZGF0ZUludGVydmFsICogMTAwMCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ3JlYXRlIHRoZSBjbG9jayBzb3VyY2UuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuX2NyZWF0ZUNsb2NrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUaWNrZXIuVHlwZS5Xb3JrZXIpIHtcblx0ICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVdvcmtlcigpO1xuXHQgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICAvLyB3b3JrZXJzIG5vdCBzdXBwb3J0ZWQsIGZhbGxiYWNrIHRvIHRpbWVvdXRcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBUaWNrZXIuVHlwZS5UaW1lb3V0O1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlQ2xvY2soKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVGlja2VyLlR5cGUuVGltZW91dCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jcmVhdGVUaW1lb3V0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEBtZW1iZXJPZiBUaWNrZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSB1cGRhdGVJbnRlcnZhbFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGlja2VyLnByb3RvdHlwZSwgJ3VwZGF0ZUludGVydmFsJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlSW50ZXJ2YWw7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl91cGRhdGVJbnRlcnZhbCA9IE1hdGgubWF4KGludGVydmFsLCAxMjggLyA0NDEwMCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUaWNrZXIuVHlwZS5Xb3JrZXIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3dvcmtlci5wb3N0TWVzc2FnZShNYXRoLm1heChpbnRlcnZhbCAqIDEwMDAsIDEpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIHRpY2tlciwgZWl0aGVyIGEgd29ya2VyIG9yIGEgdGltZW91dFxuXHRcdCAqIEBtZW1iZXJPZiBUaWNrZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUaWNrZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2VDbG9jaygpO1xuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fY3JlYXRlQ2xvY2soKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwIHRoZSBjdXJyZW50IGNsb2NrIHNvdXJjZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9kaXNwb3NlQ2xvY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXQpIHtcblx0ICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMuX3dvcmtlcikge1xuXHQgICAgICAgICAgICB0aGlzLl93b3JrZXIudGVybWluYXRlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3dvcmtlci5vbm1lc3NhZ2UgPSBudWxsO1xuXHQgICAgICAgICAgICB0aGlzLl93b3JrZXIgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fZGlzcG9zZUNsb2NrKCk7XG5cdCAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTaGltIGFsbCBjb25uZWN0L2Rpc2Nvbm5lY3QgYW5kIHNvbWUgZGVwcmVjYXRlZCBtZXRob2RzIHdoaWNoIGFyZSBzdGlsbCBpblxuXHRcdCAqICBzb21lIG9sZGVyIGltcGxlbWVudGF0aW9ucy5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5hdGl2ZUNvbm5lY3QgPSBBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3Q7XG5cdCAgICAgICAgdmFyIG5hdGl2ZURpc2Nvbm5lY3QgPSBBdWRpb05vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3Q7XG5cdCAgICAgICAgLy9yZXBsYWNlIHRoZSBvbGQgY29ubmVjdCBtZXRob2Rcblx0ICAgICAgICBmdW5jdGlvbiB0b25lQ29ubmVjdChCLCBvdXROdW0sIGluTnVtKSB7XG5cdCAgICAgICAgICAgIGlmIChCLmlucHV0KSB7XG5cdCAgICAgICAgICAgICAgICBpbk51bSA9IFRvbmUuZGVmYXVsdEFyZyhpbk51bSwgMCk7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KEIuaW5wdXQpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdChCLmlucHV0W2luTnVtXSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3QoQi5pbnB1dCwgb3V0TnVtLCBpbk51bSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChCIGluc3RhbmNlb2YgQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUNvbm5lY3QuY2FsbCh0aGlzLCBCLCBvdXROdW0sIGluTnVtKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEI7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlQ29ubmVjdC5jYWxsKHRoaXMsIEIsIG91dE51bSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Vycm9yIGNvbm5lY3RpbmcgdG8gbm9kZTogJyArIEIgKyAnXFxuJyArIGUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vcmVwbGFjZSB0aGUgb2xkIGRpc2Nvbm5lY3QgbWV0aG9kXG5cdCAgICAgICAgZnVuY3Rpb24gdG9uZURpc2Nvbm5lY3QoQiwgb3V0TnVtLCBpbk51bSkge1xuXHQgICAgICAgICAgICBpZiAoQiAmJiBCLmlucHV0ICYmIFRvbmUuaXNBcnJheShCLmlucHV0KSkge1xuXHQgICAgICAgICAgICAgICAgaW5OdW0gPSBUb25lLmRlZmF1bHRBcmcoaW5OdW0sIDApO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0KEIuaW5wdXRbaW5OdW1dLCBvdXROdW0sIDApO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKEIgJiYgQi5pbnB1dCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0KEIuaW5wdXQsIG91dE51bSwgaW5OdW0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICBuYXRpdmVEaXNjb25uZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlcnJvciBkaXNjb25uZWN0aW5nIG5vZGU6ICcgKyBCICsgJ1xcbicgKyBlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0ICE9PSB0b25lQ29ubmVjdCkge1xuXHQgICAgICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3QgPSB0b25lQ29ubmVjdDtcblx0ICAgICAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gdG9uZURpc2Nvbm5lY3Q7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvLyBzZXQgdGhlIGF1ZGlvIGNvbnRleHQgaW5pdGlhbGx5LCBhbmQgaWYgb25lIGlzIG5vdCBhbHJlYWR5IGNyZWF0ZWRcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCAmJiAhVG9uZS5pbml0aWFsaXplZCkge1xuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IG5ldyBUb25lLkNvbnRleHQoKTtcblx0ICAgICAgICAvLyBsb2cgb24gZmlyc3QgaW5pdGlhbGl6YXRpb25cblx0ICAgICAgICAvLyBhbGxvdyBvcHRpb25hbCBzaWxlbmNpbmcgb2YgdGhpcyBsb2dcblx0ICAgICAgICBpZiAoIXdpbmRvdy5UT05FX1NJTEVOQ0VfVkVSU0lPTl9MT0dHSU5HKSB7XG5cdCAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cdCAgICAgICAgICAgIGNvbnNvbGUubG9nKCclYyAqIFRvbmUuanMgJyArIFRvbmUudmVyc2lvbiArICcgKiAnLCAnYmFja2dyb3VuZDogIzAwMDsgY29sb3I6ICNmZmYnKTtcblx0ICAgICAgICB9XG5cdCAgICB9IGVsc2UgaWYgKCFUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cdCAgICAgICAgY29uc29sZS53YXJuKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBUb25lLmpzJyk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gVG9uZS5Db250ZXh0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQXVkaW9Ob2RlIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBjbGFzc2VzIHdoaWNoIHByb2Nlc3MgYXVkaW8uXG5cdFx0ICogICAgICAgICBBdWRpb05vZGVzIGhhdmUgaW5wdXRzIGFuZCBvdXRwdXRzLlxuXHRcdCAqICBAcGFyYW1cdHtBdWRpb0NvbnRleHQ9fSBjb250ZXh0XHRUaGUgYXVkaW8gY29udGV4dCB0byB1c2Ugd2l0aCB0aGUgY2xhc3Ncblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLy91c2UgdGhlIGRlZmF1bHQgY29udGV4dCBpZiBvbmUgaXMgbm90IHBhc3NlZCBpblxuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnY29udGV4dCddLCB7ICdjb250ZXh0JzogVG9uZS5jb250ZXh0IH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIEF1ZGlvQ29udGV4dCBvZiB0aGlzIGluc3RhbmNlXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge0F1ZGlvQ29udGV4dH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnRleHQgPSBvcHRpb25zLmNvbnRleHQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBhdWRpbyBjb250ZXh0IGJlbG9uZ2luZyB0byB0aGlzIGluc3RhbmNlLlxuXHRcdCAqIEB0eXBlIHtUb25lLkNvbnRleHR9XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqIEBuYW1lIGNvbnRleHRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjb250ZXh0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDcmVhdGUgaW5wdXQgYW5kIG91dHB1dHMgZm9yIHRoaXMgb2JqZWN0LlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBbaW5wdXQ9MF0gICBUaGUgbnVtYmVyIG9mIGlucHV0c1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBbb3V0cHV0cz0wXSAgVGhlIG51bWJlciBvZiBvdXRwdXRzXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkF1ZGlvTm9kZX0gIHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jcmVhdGVJbnNPdXRzID0gZnVuY3Rpb24gKGlucHV0cywgb3V0cHV0cykge1xuXHQgICAgICAgIGlmIChpbnB1dHMgPT09IDEpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChpbnB1dHMgPiAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQgPSBuZXcgQXJyYXkoaW5wdXRzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKG91dHB1dHMgPT09IDEpIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAob3V0cHV0cyA+IDEpIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgQXJyYXkob3V0cHV0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjaGFubmVsQ291bnQgaXMgdGhlIG51bWJlciBvZiBjaGFubmVscyB1c2VkIHdoZW4gdXAtbWl4aW5nIGFuZCBkb3duLW1peGluZ1xuXHRcdCAqICBjb25uZWN0aW9ucyB0byBhbnkgaW5wdXRzIHRvIHRoZSBub2RlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyIGV4Y2VwdCBmb3Jcblx0XHQgKiAgc3BlY2lmaWMgbm9kZXMgd2hlcmUgaXRzIHZhbHVlIGlzIHNwZWNpYWxseSBkZXRlcm1pbmVkLlxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgY2hhbm5lbENvdW50XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NoYW5uZWxDb3VudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxDb3VudDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGMpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxDb3VudCA9IGM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2hhbm5lbENvdW50TW9kZSBkZXRlcm1pbmVzIGhvdyBjaGFubmVscyB3aWxsIGJlIGNvdW50ZWQgd2hlbiB1cC1taXhpbmcgYW5kXG5cdFx0ICogIGRvd24tbWl4aW5nIGNvbm5lY3Rpb25zIHRvIGFueSBpbnB1dHMgdG8gdGhlIG5vZGUuXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwibWF4XCIuIFRoaXMgYXR0cmlidXRlIGhhcyBubyBlZmZlY3QgZm9yIG5vZGVzIHdpdGggbm8gaW5wdXRzLlxuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIGNoYW5uZWxDb3VudE1vZGVcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnY2hhbm5lbENvdW50TW9kZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxDb3VudE1vZGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnRNb2RlID0gbTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjaGFubmVsSW50ZXJwcmV0YXRpb24gZGV0ZXJtaW5lcyBob3cgaW5kaXZpZHVhbCBjaGFubmVscyB3aWxsIGJlIHRyZWF0ZWRcblx0XHQgKiAgd2hlbiB1cC1taXhpbmcgYW5kIGRvd24tbWl4aW5nIGNvbm5lY3Rpb25zIHRvIGFueSBpbnB1dHMgdG8gdGhlIG5vZGUuXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwic3BlYWtlcnNcIi5cblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSBjaGFubmVsSW50ZXJwcmV0YXRpb25cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnY2hhbm5lbEludGVycHJldGF0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbEludGVycHJldGF0aW9uO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbEludGVycHJldGF0aW9uID0gaTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIGlucHV0cyBmZWVkaW5nIGludG8gdGhlIEF1ZGlvTm9kZS5cblx0XHQgKiAgRm9yIHNvdXJjZSBub2RlcywgdGhpcyB3aWxsIGJlIDAuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIG51bWJlck9mSW5wdXRzXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnbnVtYmVyT2ZJbnB1dHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmlucHV0KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMuaW5wdXQpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQubGVuZ3RoO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBvdXRwdXRzIGNvbWluZyBvdXQgb2YgdGhlIEF1ZGlvTm9kZS5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgbnVtYmVyT2ZPdXRwdXRzXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnbnVtYmVyT2ZPdXRwdXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5vdXRwdXQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5vdXRwdXQpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0Lmxlbmd0aDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2FsbGVkIHdoZW4gYW4gYXVkaW8gcGFyYW0gY29ubmVjdHMgdG8gdGhpcyBub2RlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5fb25Db25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjb25uZWN0IHRoZSBvdXRwdXQgb2YgYSBUb25lTm9kZSB0byBhbiBBdWRpb1BhcmFtLCBBdWRpb05vZGUsIG9yIFRvbmVOb2RlXG5cdFx0ICogIEBwYXJhbSAge1RvbmUgfCBBdWRpb1BhcmFtIHwgQXVkaW9Ob2RlfSB1bml0XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TnVtPTBdIG9wdGlvbmFsbHkgd2hpY2ggb3V0cHV0IHRvIGNvbm5lY3QgZnJvbVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2lucHV0TnVtPTBdIG9wdGlvbmFsbHkgd2hpY2ggaW5wdXQgdG8gY29ubmVjdCB0b1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKHVuaXQsIG91dHB1dE51bSwgaW5wdXROdW0pIHtcblx0ICAgICAgICBpZiAodW5pdC5fb25Db25uZWN0KSB7XG5cdCAgICAgICAgICAgIHVuaXQuX29uQ29ubmVjdCh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgb3V0cHV0TnVtID0gVG9uZS5kZWZhdWx0QXJnKG91dHB1dE51bSwgMCk7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0W291dHB1dE51bV0uY29ubmVjdCh1bml0LCAwLCBpbnB1dE51bSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuY29ubmVjdCh1bml0LCBvdXRwdXROdW0sIGlucHV0TnVtKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc2Nvbm5lY3QgdGhlIG91dHB1dFxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxBdWRpb05vZGV9IG91dHB1dCBFaXRoZXIgdGhlIG91dHB1dCBpbmRleCB0byBkaXNjb25uZWN0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSBvdXRwdXQgaXMgYW4gYXJyYXksIG9yIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlIHRvIGRpc2Nvbm5lY3QgZnJvbS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgb3V0cHV0TnVtLCBpbnB1dE51bSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5vdXRwdXQpKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGRlc3RpbmF0aW9uKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRbZGVzdGluYXRpb25dLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIG91dHB1dE51bSA9IFRvbmUuZGVmYXVsdEFyZyhvdXRwdXROdW0sIDApO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRbb3V0cHV0TnVtXS5kaXNjb25uZWN0KGRlc3RpbmF0aW9uLCAwLCBpbnB1dE51bSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dC5kaXNjb25uZWN0LmFwcGx5KHRoaXMub3V0cHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29ubmVjdCB0aGUgb3V0cHV0IG9mIHRoaXMgbm9kZSB0byB0aGUgcmVzdCBvZiB0aGUgbm9kZXMgaW4gc2VyaWVzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICAvL2Nvbm5lY3QgYSBub2RlIHRvIGFuIGVmZmVjdCwgcGFuVm9sIGFuZCB0aGVuIHRvIHRoZSBtYXN0ZXIgb3V0cHV0XG5cdFx0ICogIG5vZGUuY2hhaW4oZWZmZWN0LCBwYW5Wb2wsIFRvbmUuTWFzdGVyKTtcblx0XHQgKiAgQHBhcmFtIHsuLi5BdWRpb1BhcmFtfFRvbmV8QXVkaW9Ob2RlfSBub2Rlc1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jaGFpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY3VycmVudFVuaXQgPSB0aGlzO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB0b1VuaXQgPSBhcmd1bWVudHNbaV07XG5cdCAgICAgICAgICAgIGN1cnJlbnRVbml0LmNvbm5lY3QodG9Vbml0KTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQgPSB0b1VuaXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhpcyBub2RlIHRvIHRoZSByZXN0IG9mIHRoZSBub2RlcyBpbiBwYXJhbGxlbC5cblx0XHQgKiAgQHBhcmFtIHsuLi5BdWRpb1BhcmFtfFRvbmV8QXVkaW9Ob2RlfSBub2Rlc1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5mYW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5jb25uZWN0KGFyZ3VtZW50c1tpXSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIGlmICh3aW5kb3cuQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgLy9naXZlIG5hdGl2ZSBub2RlcyBjaGFpbiBhbmQgZmFuIG1ldGhvZHNcblx0ICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLmNoYWluID0gVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNoYWluO1xuXHQgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuZmFuID0gVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmZhbjtcblx0ICAgIH1cblx0ICAgIC8qKlxuXHRcdCAqIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiBAcmV0dXJuIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKHRoaXMuaW5wdXQpKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmlucHV0IGluc3RhbmNlb2YgQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmlucHV0LmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmlucHV0ID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5vdXRwdXQgaW5zdGFuY2VvZiBBdWRpb05vZGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0LmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLm91dHB1dCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2NvbnRleHQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkF1ZGlvTm9kZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCYXNlIGNsYXNzIGZvciBhbGwgU2lnbmFscy4gVXNlZCBJbnRlcm5hbGx5LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsQmFzZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2lnbmFsQmFzZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFdoZW4gc2lnbmFscyBjb25uZWN0IHRvIG90aGVyIHNpZ25hbHMgb3IgQXVkaW9QYXJhbXMsXG5cdFx0ICogIHRoZXkgdGFrZSBvdmVyIHRoZSBvdXRwdXQgdmFsdWUgb2YgdGhhdCBzaWduYWwgb3IgQXVkaW9QYXJhbS5cblx0XHQgKiAgRm9yIGFsbCBvdGhlciBub2RlcywgdGhlIGJlaGF2aW9yIGlzIHRoZSBzYW1lIGFzIGEgZGVmYXVsdCA8Y29kZT5jb25uZWN0PC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAb3ZlcnJpZGVcblx0XHQgKiAgQHBhcmFtIHtBdWRpb1BhcmFtfEF1ZGlvTm9kZXxUb25lLlNpZ25hbHxUb25lfSBub2RlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TnVtYmVyPTBdIFRoZSBvdXRwdXQgbnVtYmVyIHRvIGNvbm5lY3QgZnJvbS5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtpbnB1dE51bWJlcj0wXSBUaGUgaW5wdXQgbnVtYmVyIHRvIGNvbm5lY3QgdG8uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNpZ25hbEJhc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIChub2RlLCBvdXRwdXROdW1iZXIsIGlucHV0TnVtYmVyKSB7XG5cdCAgICAgICAgLy96ZXJvIGl0IG91dCBzbyB0aGF0IHRoZSBzaWduYWwgY2FuIGhhdmUgZnVsbCBjb250cm9sXG5cdCAgICAgICAgaWYgKFRvbmUuU2lnbmFsICYmIFRvbmUuU2lnbmFsID09PSBub2RlLmNvbnN0cnVjdG9yIHx8IFRvbmUuUGFyYW0gJiYgVG9uZS5QYXJhbSA9PT0gbm9kZS5jb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCBjaGFuZ2VzXG5cdCAgICAgICAgICAgIG5vZGUuX3BhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcygwKTtcblx0ICAgICAgICAgICAgLy9yZXNldCB0aGUgdmFsdWVcblx0ICAgICAgICAgICAgbm9kZS5fcGFyYW0udmFsdWUgPSAwO1xuXHQgICAgICAgICAgICAvL21hcmsgdGhlIHZhbHVlIGFzIG92ZXJyaWRkZW5cblx0ICAgICAgICAgICAgbm9kZS5vdmVycmlkZGVuID0gdHJ1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBBdWRpb1BhcmFtKSB7XG5cdCAgICAgICAgICAgIG5vZGUuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKDApO1xuXHQgICAgICAgICAgICBub2RlLnZhbHVlID0gMDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3QuY2FsbCh0aGlzLCBub2RlLCBvdXRwdXROdW1iZXIsIGlucHV0TnVtYmVyKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TaWduYWxCYXNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICAvL2ZpeGVzIHNhZmFyaSBvbmx5IGJ1ZyB3aGljaCBpcyBzdGlsbCBwcmVzZW50IGluIDExXG5cdCAgICAgICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuXHQgICAgICAgIHZhciBpc1NhZmFyaSA9IHVhLmluY2x1ZGVzKCdzYWZhcmknKSAmJiAhdWEuaW5jbHVkZXMoJ2Nocm9tZScpO1xuXHQgICAgICAgIGlmIChpc1NhZmFyaSkge1xuXHQgICAgICAgICAgICB2YXIgV2F2ZVNoYXBlck5vZGUgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxOb2RlID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gY29udGV4dC5fbmF0aXZlX2NyZWF0ZVdhdmVTaGFwZXIoKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gdGhpcy5faW50ZXJuYWxOb2RlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmaW5lUHJvcGVydHkodGhpcy5faW50ZXJuYWxOb2RlLCBwcm9wKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdhdmVTaGFwZXJOb2RlLnByb3RvdHlwZSwgJ2N1cnZlJywge1xuXHQgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnZlO1xuXHQgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGN1cnZlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGN1cnZlLmxlbmd0aCArIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgIGFycmF5LnNldChjdXJ2ZSwgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgYXJyYXlbMF0gPSBjdXJ2ZVswXTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbE5vZGUuY3VydmUgPSBhcnJheTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIFdhdmVTaGFwZXJOb2RlLnByb3RvdHlwZS5fZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoY29udGV4dCwgcHJvcCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aGlzW3Byb3BdKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wLCB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0W3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRbcHJvcF0uYmluZChjb250ZXh0KTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRbcHJvcF07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtwcm9wXSA9IHZhbDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLl9uYXRpdmVfY3JlYXRlV2F2ZVNoYXBlciA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlV2F2ZVNoYXBlcjtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVXYXZlU2hhcGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXYXZlU2hhcGVyTm9kZSh0aGlzKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcyB0aGUgbmF0aXZlIFdlYiBBdWRpbyBBUElcblx0XHQgKiAgICAgICAgIFtXYXZlU2hhcGVyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtd2F2ZXNoYXBlcm5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtmdW5jdGlvbnxBcnJheXxOdW1iZXJ9IG1hcHBpbmcgVGhlIGZ1bmN0aW9uIHVzZWQgdG8gZGVmaW5lIHRoZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWFwcGluZyBmdW5jdGlvbiBzaG91bGQgdGFrZSB0d28gYXJndW1lbnRzOlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpcnN0IGlzIHRoZSB2YWx1ZSBhdCB0aGUgY3VycmVudCBwb3NpdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIGFycmF5IHBvc2l0aW9uLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGFycmF5LCB0aGF0IGFycmF5IHdpbGwgYmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBhcyB0aGUgd2F2ZSBzaGFwaW5nIGZ1bmN0aW9uLiBUaGUgaW5wdXRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbCBpcyBhbiBBdWRpb1JhbmdlIFstMSwgMV0gdmFsdWUgYW5kIHRoZSBvdXRwdXRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbCBjYW4gdGFrZSBvbiBhbnkgbnVtZXJpY2FsIHZhbHVlcy5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gW2J1ZmZlckxlbj0xMDI0XSBUaGUgbGVuZ3RoIG9mIHRoZSBXYXZlU2hhcGVyTm9kZSBidWZmZXIuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHRpbWVzVHdvID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbih2YWwpe1xuXHRcdCAqIFx0cmV0dXJuIHZhbCAqIDI7XG5cdFx0ICogfSwgMjA0OCk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHdhdmVzaGFwZXIgY2FuIGFsc28gYmUgY29uc3RydWN0ZWQgd2l0aCBhbiBhcnJheSBvZiB2YWx1ZXNcblx0XHQgKiB2YXIgaW52ZXJ0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihbMSwgLTFdKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZVNoYXBlciA9IGZ1bmN0aW9uIChtYXBwaW5nLCBidWZmZXJMZW4pIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgd2F2ZXNoYXBlclxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZVdhdmVTaGFwZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgd2F2ZXNoYXBlcnMgY3VydmVcblx0XHRcdCAqICBAdHlwZSB7RmxvYXQzMkFycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGluZykpIHtcblx0ICAgICAgICAgICAgdGhpcy5jdXJ2ZSA9IG1hcHBpbmc7XG5cdCAgICAgICAgfSBlbHNlIGlmIChpc0Zpbml0ZShtYXBwaW5nKSB8fCBUb25lLmlzVW5kZWYobWFwcGluZykpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBuZXcgRmxvYXQzMkFycmF5KFRvbmUuZGVmYXVsdEFyZyhtYXBwaW5nLCAxMDI0KSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzRnVuY3Rpb24obWFwcGluZykpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBuZXcgRmxvYXQzMkFycmF5KFRvbmUuZGVmYXVsdEFyZyhidWZmZXJMZW4sIDEwMjQpKTtcblx0ICAgICAgICAgICAgdGhpcy5zZXRNYXAobWFwcGluZyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuV2F2ZVNoYXBlciwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBVc2VzIGEgbWFwcGluZyBmdW5jdGlvbiB0byBzZXQgdGhlIHZhbHVlIG9mIHRoZSBjdXJ2ZS5cblx0XHQgKiAgQHBhcmFtIHtmdW5jdGlvbn0gbWFwcGluZyBUaGUgZnVuY3Rpb24gdXNlZCB0byBkZWZpbmUgdGhlIHZhbHVlcy5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWFwcGluZyBmdW5jdGlvbiB0YWtlIHR3byBhcmd1bWVudHM6XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpcnN0IGlzIHRoZSB2YWx1ZSBhdCB0aGUgY3VycmVudCBwb3NpdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGdvZXMgZnJvbSAtMSB0byAxIG92ZXIgdGhlIG51bWJlciBvZiBlbGVtZW50c1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjdXJ2ZSBhcnJheS4gVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgYXJyYXkgcG9zaXRpb24uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLldhdmVTaGFwZXJ9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL21hcCB0aGUgaW5wdXQgc2lnbmFsIGZyb20gWy0xLCAxXSB0byBbMCwgMTBdXG5cdFx0ICogc2hhcGVyLnNldE1hcChmdW5jdGlvbih2YWwsIGluZGV4KXtcblx0XHQgKiBcdHJldHVybiAodmFsICsgMSkgKiA1O1xuXHRcdCAqIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVTaGFwZXIucHJvdG90eXBlLnNldE1hcCA9IGZ1bmN0aW9uIChtYXBwaW5nKSB7XG5cdCAgICAgICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHRoaXMuX2N1cnZlLmxlbmd0aCk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX2N1cnZlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBub3JtYWxpemVkID0gaSAvIChsZW4gLSAxKSAqIDIgLSAxO1xuXHQgICAgICAgICAgICBhcnJheVtpXSA9IG1hcHBpbmcobm9ybWFsaXplZCwgaSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuY3VydmUgPSBhcnJheTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXJyYXkgdG8gc2V0IGFzIHRoZSB3YXZlc2hhcGVyIGN1cnZlLiBGb3IgbGluZWFyIGN1cnZlc1xuXHRcdCAqIGFycmF5IGxlbmd0aCBkb2VzIG5vdCBtYWtlIG11Y2ggZGlmZmVyZW5jZSwgYnV0IGZvciBjb21wbGV4IGN1cnZlc1xuXHRcdCAqIGxvbmdlciBhcnJheXMgd2lsbCBwcm92aWRlIHNtb290aGVyIGludGVycG9sYXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuV2F2ZVNoYXBlciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgY3VydmVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLldhdmVTaGFwZXIucHJvdG90eXBlLCAnY3VydmUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZXIuY3VydmU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXBwaW5nKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gbmV3IEZsb2F0MzJBcnJheShtYXBwaW5nKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLmN1cnZlID0gdGhpcy5fY3VydmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBTcGVjaWZpZXMgd2hhdCB0eXBlIG9mIG92ZXJzYW1wbGluZyAoaWYgYW55KSBzaG91bGQgYmUgdXNlZCB3aGVuXG5cdFx0ICogYXBwbHlpbmcgdGhlIHNoYXBpbmcgY3VydmUuIENhbiBlaXRoZXIgYmUgXCJub25lXCIsIFwiMnhcIiBvciBcIjR4XCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuV2F2ZVNoYXBlciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIG92ZXJzYW1wbGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLldhdmVTaGFwZXIucHJvdG90eXBlLCAnb3ZlcnNhbXBsZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3ZlcnNhbXBsaW5nKSB7XG5cdCAgICAgICAgICAgIGlmIChbXG5cdCAgICAgICAgICAgICAgICAgICAgJ25vbmUnLFxuXHQgICAgICAgICAgICAgICAgICAgICcyeCcsXG5cdCAgICAgICAgICAgICAgICAgICAgJzR4J1xuXHQgICAgICAgICAgICAgICAgXS5pbmNsdWRlcyhvdmVyc2FtcGxpbmcpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZSA9IG92ZXJzYW1wbGluZztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUb25lLldhdmVTaGFwZXI6IG92ZXJzYW1wbGluZyBtdXN0IGJlIGVpdGhlciBcXCdub25lXFwnLCBcXCcyeFxcJywgb3IgXFwnNHhcXCcnKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5XYXZlU2hhcGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVTaGFwZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2N1cnZlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5XYXZlU2hhcGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVGltZUJhc2UgaXMgYSBmbGV4aWJsZSBlbmNvZGluZyBvZiB0aW1lXG5cdFx0ICogICAgICAgICB3aGljaCBjYW4gYmUgZXZhbHVhdGVkIHRvIGFuZCBmcm9tIGEgc3RyaW5nLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHZhbCAgICBUaGUgdGltZSB2YWx1ZSBhcyBhIG51bWJlciBvciBzdHJpbmdcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nPX0gIHVuaXRzICBVbml0IHZhbHVlc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoNCwgXCJuXCIpXG5cdFx0ICogVG9uZS5UaW1lQmFzZSgyLCBcInRcIilcblx0XHQgKiBUb25lLlRpbWVCYXNlKFwiMnRcIilcblx0XHQgKiBUb25lLlRpbWVCYXNlKFwiMnRcIikgKyBUb25lLlRpbWVCYXNlKFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICAvL2FsbG93cyBpdCB0byBiZSBjb25zdHJ1Y3RlZCB3aXRoIG9yIHdpdGhvdXQgJ25ldydcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgdmFsdWVcblx0XHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfFN0cmluZ3xUb25lLlRpbWVCYXNlfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbDtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSB1bml0c1xuXHRcdFx0XHQgKiBAdHlwZSB7U3RyaW5nP31cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdW5pdHM7XG5cdCAgICAgICAgICAgIC8vdGVzdCBpZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBudW1iZXJcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aGlzLl91bml0cykgJiYgVG9uZS5pc1N0cmluZyh0aGlzLl92YWwpICYmIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0ICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQodGhpcy5fdmFsKSA9PSB0aGlzLl92YWwgJiYgdGhpcy5fdmFsLmNoYXJBdCgwKSAhPT0gJysnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSBwYXJzZUZsb2F0KHRoaXMuX3ZhbCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl91bml0cyA9IHRoaXMuX2RlZmF1bHRVbml0cztcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwgJiYgdmFsLmNvbnN0cnVjdG9yID09PSB0aGlzLmNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgICAgICAvL2lmIHRoZXkncmUgdGhlIHNhbWUgdHlwZSwganVzdCBjb3B5IHZhbHVlcyBvdmVyXG5cdCAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwuX3ZhbDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdmFsLl91bml0cztcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX2RlZmF1bHRVbml0cykge1xuXHQgICAgICAgICAgICAgICAgY2FzZSAncyc6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLnRvU2Vjb25kcygpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnaSc6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLnRvVGlja3MoKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2h6Jzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ21pZGknOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b01pZGkoKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnJlY29nbml6ZWQgZGVmYXVsdCB1bml0cyAnICsgdGhpcy5fZGVmYXVsdFVuaXRzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaW1lQmFzZSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaW1lQmFzZSk7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBQlNUUkFDVCBTWU5UQVggVFJFRSBQQVJTRVJcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEFsbCB0aGUgcHJpbWFyeSBleHByZXNzaW9ucy5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMgPSB7XG5cdCAgICAgICAgJ24nOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyluKFxcLj8pJC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSwgZG90KSB7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIHZhciBzY2FsYXIgPSBkb3QgPT09ICcuJyA/IDEuNSA6IDE7XG5cdCAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IDEpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmVhdHNUb1VuaXRzKHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSkgKiBzY2FsYXI7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHMoNCAvIHZhbHVlKSAqIHNjYWxhcjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3QnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyl0JC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmVhdHNUb1VuaXRzKDggLyAocGFyc2VJbnQodmFsdWUpICogMykpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKW0kL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlSW50KHZhbHVlKSAqIHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdpJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspaSQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWNrc1RvVW5pdHMocGFyc2VJbnQodmFsdWUpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2h6Jzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT8paHokL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJlcXVlbmN5VG9Vbml0cyhwYXJzZUZsb2F0KHZhbHVlKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICd0cic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KTooXFxkKyg/OlxcLlxcZCspPyk6PyhcXGQrKD86XFwuXFxkKyk/KT8kLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAobSwgcSwgcykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHRvdGFsID0gMDtcblx0ICAgICAgICAgICAgICAgIGlmIChtICYmIG0gIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMuX2JlYXRzVG9Vbml0cyh0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkgKiBwYXJzZUZsb2F0KG0pKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChxICYmIHEgIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUZsb2F0KHEpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChzICYmIHMgIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUZsb2F0KHMpIC8gNCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdzJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT8pcyQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlY29uZHNUb1VuaXRzKHBhcnNlRmxvYXQodmFsdWUpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3NhbXBsZXMnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKylzYW1wbGVzJC8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpIC8gdGhpcy5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdkZWZhdWx0Jzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT8pJC8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwcmVzc2lvbnNbdGhpcy5fZGVmYXVsdFVuaXRzXS5tZXRob2QuY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2RlZmF1bHRVbml0cyA9ICdzJztcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRSQU5TUE9SVCBGQUxMQkFDS1Ncblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSBicG0sIG9yIDEyMCBpZiBUcmFuc3BvcnQgaXMgbm90IGF2YWlsYWJsZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9nZXRCcG0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIDEyMDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSB0aW1lU2lnbmF0dXJlIG9yIDQgaWYgVHJhbnNwb3J0IGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZ2V0VGltZVNpZ25hdHVyZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIDQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgUFBRIG9yIDE5MiBpZiBUcmFuc3BvcnQgaXMgbm90IGF2YWlsYWJsZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9nZXRQUFEgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC5QUFE7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIDE5Mjtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgaW4gd2hpY2hldmVyIGNvbnRleHQgaXMgcmVsZXZhbnRcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fbm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLm5vdygpO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFVOSVQgQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgZnJlcXVlbmN5IGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZnJlcXVlbmN5VG9Vbml0cyA9IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyBmcmVxO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBiZWF0cyBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gYmVhdHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMgPSBmdW5jdGlvbiAoYmVhdHMpIHtcblx0ICAgICAgICByZXR1cm4gNjAgLyB0aGlzLl9nZXRCcG0oKSAqIGJlYXRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9zZWNvbmRzVG9Vbml0cyA9IGZ1bmN0aW9uIChzZWNvbmRzKSB7XG5cdCAgICAgICAgcmV0dXJuIHNlY29uZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgdGljayBpbiB0aGUgY3VycmVudCB0aW1lIHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7VGlja3N9IHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fdGlja3NUb1VuaXRzID0gZnVuY3Rpb24gKHRpY2tzKSB7XG5cdCAgICAgICAgcmV0dXJuIHRpY2tzICogKHRoaXMuX2JlYXRzVG9Vbml0cygxKSAvIHRoaXMuX2dldFBQUSgpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBXaXRoIG5vIGFyZ3VtZW50cywgcmV0dXJuICdub3cnXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fbm9BcmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX25vdygpO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEVYUFJFU1NJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBFdmFsdWF0ZSB0aGUgdGltZSB2YWx1ZS4gUmV0dXJucyB0aGUgdGltZVxuXHRcdCAqICBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aGlzLl92YWwpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub0FyZygpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyh0aGlzLl92YWwpICYmIFRvbmUuaXNVbmRlZih0aGlzLl91bml0cykpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgdW5pdHMgaW4gdGhpcy5fZXhwcmVzc2lvbnMpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9leHByZXNzaW9uc1t1bml0c10ucmVnZXhwLnRlc3QodGhpcy5fdmFsLnRyaW0oKSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl91bml0cyA9IHVuaXRzO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh0aGlzLl91bml0cykpIHtcblx0ICAgICAgICAgICAgdmFyIGV4cHIgPSB0aGlzLl9leHByZXNzaW9uc1t0aGlzLl91bml0c107XG5cdCAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHRoaXMuX3ZhbC50b1N0cmluZygpLnRyaW0oKS5tYXRjaChleHByLnJlZ2V4cCk7XG5cdCAgICAgICAgICAgIGlmIChtYXRjaGluZykge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGV4cHIubWV0aG9kLmFwcGx5KHRoaXMsIG1hdGNoaW5nLnNsaWNlKDEpKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBleHByLm1ldGhvZC5jYWxsKHRoaXMsIHBhcnNlRmxvYXQodGhpcy5fdmFsKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBpbiBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4ge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIGluIGhlcnR6XG5cdFx0ICogIEByZXR1cm4ge0ZyZXF1ZW5jeX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAxIC8gdGhpcy50b1NlY29uZHMoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHNhbXBsZXNcblx0XHQgKiAgQHJldHVybiAge1NhbXBsZXN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b1NhbXBsZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudG9TZWNvbmRzKCkgKiB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge01pbGxpc2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvTWlsbGlzZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcygpICogMTAwMDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiB7VG9uZS5UaW1lQmFzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl92YWwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3VuaXRzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaW1lQmFzZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZyZXF1ZW5jeSBpcyBhIHByaW1pdGl2ZSB0eXBlIGZvciBlbmNvZGluZyBGcmVxdWVuY3kgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgRXZlbnR1YWxseSBhbGwgdGltZSB2YWx1ZXMgYXJlIGV2YWx1YXRlZCB0byBoZXJ0elxuXHRcdCAqICAgICAgICAgdXNpbmcgdGhlIGBldmFsYCBtZXRob2QuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UaW1lQmFzZX1cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIHZhbCAgICBUaGUgdGltZSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nPX0gIHVuaXRzICBUaGUgdW5pdHMgb2YgdGhlIHZhbHVlLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQzNcIikgLy8gMjYxXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koMzgsIFwibWlkaVwiKSAvL1xuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQzNcIikudHJhbnNwb3NlKDQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5GcmVxdWVuY3kpIHtcblx0ICAgICAgICAgICAgVG9uZS5UaW1lQmFzZS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5GcmVxdWVuY3kodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRnJlcXVlbmN5LCBUb25lLlRpbWVCYXNlKTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFVR01FTlQgQkFTRSBFWFBSRVNTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2V4cHJlc3Npb25zID0gT2JqZWN0LmFzc2lnbih7fSwgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zLCB7XG5cdCAgICAgICAgJ21pZGknOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspP21pZGkpLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kZWZhdWx0VW5pdHMgPT09ICdtaWRpJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5Lm10b2YodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbm90ZSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihbYS1nXXsxfSg/OmJ8I3x4fGJiKT8pKC0/WzAtOV0rKS9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChwaXRjaCwgb2N0YXZlKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBub3RlVG9TY2FsZUluZGV4W3BpdGNoLnRvTG93ZXJDYXNlKCldO1xuXHQgICAgICAgICAgICAgICAgdmFyIG5vdGVOdW1iZXIgPSBpbmRleCArIChwYXJzZUludChvY3RhdmUpICsgMSkgKiAxMjtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kZWZhdWx0VW5pdHMgPT09ICdtaWRpJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3RlTnVtYmVyO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kubXRvZihub3RlTnVtYmVyKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3RyJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT8pOihcXGQrKD86XFwuXFxkKyk/KTo/KFxcZCsoPzpcXC5cXGQrKT8pPy8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKG0sIHEsIHMpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IDE7XG5cdCAgICAgICAgICAgICAgICBpZiAobSAmJiBtICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCAqPSB0aGlzLl9iZWF0c1RvVW5pdHModGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpICogcGFyc2VGbG9hdChtKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAocSAmJiBxICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCAqPSB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VGbG9hdChxKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAocyAmJiBzICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCAqPSB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VGbG9hdChzKSAvIDQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRFWFBSRVNTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVHJhbnNwb3NlcyB0aGUgZnJlcXVlbmN5IGJ5IHRoZSBnaXZlbiBudW1iZXIgb2Ygc2VtaXRvbmVzLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbH0gIGludGVydmFsXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkZyZXF1ZW5jeX0gQSBuZXcgdHJhbnNwb3NlZCBmcmVxdWVuY3lcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkE0XCIpLnRyYW5zcG9zZSgzKTsgLy9cIkM1XCJcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50cmFuc3Bvc2UgPSBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy52YWx1ZU9mKCkgKiBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhpbnRlcnZhbCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUYWtlcyBhbiBhcnJheSBvZiBzZW1pdG9uZSBpbnRlcnZhbHMgYW5kIHJldHVybnNcblx0XHQgKiAgYW4gYXJyYXkgb2YgZnJlcXVlbmNpZXMgdHJhbnNwb3NlZCBieSB0aG9zZSBpbnRlcnZhbHMuXG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgaW50ZXJ2YWxzXG5cdFx0ICogIEByZXR1cm4gIHtBcnJheTxUb25lLkZyZXF1ZW5jeT59IFJldHVybnMgYW4gYXJyYXkgb2YgRnJlcXVlbmNpZXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkE0XCIpLmhhcm1vbml6ZShbMCwgMywgN10pOyAvL1tcIkE0XCIsIFwiQzVcIiwgXCJFNVwiXVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLmhhcm1vbml6ZSA9IGZ1bmN0aW9uIChpbnRlcnZhbHMpIHtcblx0ICAgICAgICByZXR1cm4gaW50ZXJ2YWxzLm1hcChmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNwb3NlKGludGVydmFsKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFVOSVQgQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBhcyBhIE1JREkgbm90ZVxuXHRcdCAqICBAcmV0dXJuICB7TUlESX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkM0XCIpLnRvTWlkaSgpOyAvLzYwXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9NaWRpID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKHRoaXMudmFsdWVPZigpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IGluIFNjaWVudGlmaWMgUGl0Y2ggTm90YXRpb25cblx0XHQgKiAgQHJldHVybiAge05vdGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koNjksIFwibWlkaVwiKS50b05vdGUoKTsgLy9cIkE0XCJcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b05vdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGZyZXEgPSB0aGlzLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgdmFyIGxvZyA9IE1hdGgubG9nMihmcmVxIC8gVG9uZS5GcmVxdWVuY3kuQTQpO1xuXHQgICAgICAgIHZhciBub3RlTnVtYmVyID0gTWF0aC5yb3VuZCgxMiAqIGxvZykgKyA1Nztcblx0ICAgICAgICB2YXIgb2N0YXZlID0gTWF0aC5mbG9vcihub3RlTnVtYmVyIC8gMTIpO1xuXHQgICAgICAgIGlmIChvY3RhdmUgPCAwKSB7XG5cdCAgICAgICAgICAgIG5vdGVOdW1iZXIgKz0gLTEyICogb2N0YXZlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgbm90ZU5hbWUgPSBzY2FsZUluZGV4VG9Ob3RlW25vdGVOdW1iZXIgJSAxMl07XG5cdCAgICAgICAgcmV0dXJuIG5vdGVOYW1lICsgb2N0YXZlLnRvU3RyaW5nKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZHVyYXRpb24gb2Ygb25lIGN5Y2xlIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvU2Vjb25kcy5jYWxsKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIGluIEhlcnR6XG5cdFx0ICogIEByZXR1cm4gIHtGcmVxdWVuY3l9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9GcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvRnJlcXVlbmN5LmNhbGwodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZHVyYXRpb24gb2Ygb25lIGN5Y2xlIGluIHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b1RpY2tzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBxdWFydGVyVGltZSA9IHRoaXMuX2JlYXRzVG9Vbml0cygxKTtcblx0ICAgICAgICB2YXIgcXVhcnRlcnMgPSB0aGlzLnZhbHVlT2YoKSAvIHF1YXJ0ZXJUaW1lO1xuXHQgICAgICAgIHJldHVybiBNYXRoLmZsb29yKHF1YXJ0ZXJzICogVG9uZS5UcmFuc3BvcnQuUFBRKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRVTklUIENPTlZFUlNJT05TIEhFTFBFUlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFdpdGggbm8gYXJndW1lbnRzLCByZXR1cm4gMFxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9ub0FyZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gMDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBmcmVxdWVuY3kgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fZnJlcXVlbmN5VG9Vbml0cyA9IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgcmV0dXJuIGZyZXE7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgdGljayBpbiB0aGUgY3VycmVudCB0aW1lIHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7VGlja3N9IHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiAxIC8gKHRpY2tzICogNjAgLyAoVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlICogVG9uZS5UcmFuc3BvcnQuUFBRKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMgPSBmdW5jdGlvbiAoYmVhdHMpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMuY2FsbCh0aGlzLCBiZWF0cyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9zZWNvbmRzVG9Vbml0cyA9IGZ1bmN0aW9uIChzZWNvbmRzKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyBzZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB1bml0cyBpZiBub25lIGFyZSBnaXZlbi5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fZGVmYXVsdFVuaXRzID0gJ2h6Jztcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEZSRVFVRU5DWSBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgTm90ZSB0byBzY2FsZSBpbmRleFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIHZhciBub3RlVG9TY2FsZUluZGV4ID0ge1xuXHQgICAgICAgICdjYmInOiAtMixcblx0ICAgICAgICAnY2InOiAtMSxcblx0ICAgICAgICAnYyc6IDAsXG5cdCAgICAgICAgJ2MjJzogMSxcblx0ICAgICAgICAnY3gnOiAyLFxuXHQgICAgICAgICdkYmInOiAwLFxuXHQgICAgICAgICdkYic6IDEsXG5cdCAgICAgICAgJ2QnOiAyLFxuXHQgICAgICAgICdkIyc6IDMsXG5cdCAgICAgICAgJ2R4JzogNCxcblx0ICAgICAgICAnZWJiJzogMixcblx0ICAgICAgICAnZWInOiAzLFxuXHQgICAgICAgICdlJzogNCxcblx0ICAgICAgICAnZSMnOiA1LFxuXHQgICAgICAgICdleCc6IDYsXG5cdCAgICAgICAgJ2ZiYic6IDMsXG5cdCAgICAgICAgJ2ZiJzogNCxcblx0ICAgICAgICAnZic6IDUsXG5cdCAgICAgICAgJ2YjJzogNixcblx0ICAgICAgICAnZngnOiA3LFxuXHQgICAgICAgICdnYmInOiA1LFxuXHQgICAgICAgICdnYic6IDYsXG5cdCAgICAgICAgJ2cnOiA3LFxuXHQgICAgICAgICdnIyc6IDgsXG5cdCAgICAgICAgJ2d4JzogOSxcblx0ICAgICAgICAnYWJiJzogNyxcblx0ICAgICAgICAnYWInOiA4LFxuXHQgICAgICAgICdhJzogOSxcblx0ICAgICAgICAnYSMnOiAxMCxcblx0ICAgICAgICAnYXgnOiAxMSxcblx0ICAgICAgICAnYmJiJzogOSxcblx0ICAgICAgICAnYmInOiAxMCxcblx0ICAgICAgICAnYic6IDExLFxuXHQgICAgICAgICdiIyc6IDEyLFxuXHQgICAgICAgICdieCc6IDEzXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHNjYWxlIGluZGV4IHRvIG5vdGUgKHNoYXJwcylcblx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBzY2FsZUluZGV4VG9Ob3RlID0gW1xuXHQgICAgICAgICdDJyxcblx0ICAgICAgICAnQyMnLFxuXHQgICAgICAgICdEJyxcblx0ICAgICAgICAnRCMnLFxuXHQgICAgICAgICdFJyxcblx0ICAgICAgICAnRicsXG5cdCAgICAgICAgJ0YjJyxcblx0ICAgICAgICAnRycsXG5cdCAgICAgICAgJ0cjJyxcblx0ICAgICAgICAnQScsXG5cdCAgICAgICAgJ0EjJyxcblx0ICAgICAgICAnQidcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIFtjb25jZXJ0IHBpdGNoXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db25jZXJ0X3BpdGNoKVxuXHRcdCAqICBBNCdzIHZhbHVlcyBpbiBIZXJ0ei5cblx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kuQTQgPSA0NDA7XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIE1JREkgbm90ZSB0byBmcmVxdWVuY3kgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge01JREl9IG1pZGkgVGhlIG1pZGkgbnVtYmVyIHRvIGNvbnZlcnQuXG5cdFx0ICogIEByZXR1cm4ge0ZyZXF1ZW5jeX0gdGhlIGNvcnJlc3BvbmRpbmcgZnJlcXVlbmN5IHZhbHVlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeS5tdG9mKDY5KTsgLy8gcmV0dXJucyA0NDBcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5Lm10b2YgPSBmdW5jdGlvbiAobWlkaSkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5BNCAqIE1hdGgucG93KDIsIChtaWRpIC0gNjkpIC8gMTIpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgZnJlcXVlbmN5IHZhbHVlIHRvIGEgTUlESSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSB2YWx1ZSB0byBmcmVxdWVuY3kgdmFsdWUgdG8gY29udmVydC5cblx0XHQgKiAgQHJldHVybnMgIHtNSURJfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3kuZnRvbSg0NDApOyAvLyByZXR1cm5zIDY5XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5mdG9tID0gZnVuY3Rpb24gKGZyZXF1ZW5jeSkge1xuXHQgICAgICAgIHJldHVybiA2OSArIE1hdGgucm91bmQoMTIgKiBNYXRoLmxvZzIoZnJlcXVlbmN5IC8gVG9uZS5GcmVxdWVuY3kuQTQpKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3k7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UaW1lIGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIFRpbWUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgVG9uZS5UaW1lIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIG9yIHdpdGhvdXQgdGhlIGBuZXdgIGtleXdvcmQuIFRvbmUuVGltZSBjYW4gYmUgcGFzc2VkXG5cdFx0ICogICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgb2YgYW55IG1ldGhvZCB3aGljaCB0YWtlcyB0aW1lIGFzIGFuIGFyZ3VtZW50LlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZUJhc2V9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdCA9IFRvbmUuVGltZShcIjRuXCIpOy8vYSBxdWFydGVyIG5vdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRpbWUpIHtcblx0ICAgICAgICAgICAgVG9uZS5UaW1lQmFzZS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaW1lKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpbWUsIFRvbmUuVGltZUJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogRXh0ZW5kIHRoZSBiYXNlIGV4cHJlc3Npb25zXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLl9leHByZXNzaW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9leHByZXNzaW9ucywge1xuXHQgICAgICAgICdxdWFudGl6ZSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXkAoLispLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAoY2FwdHVyZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50VG8gPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihjYXB0dXJlKTtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQubmV4dFN1YmRpdmlzaW9uKHF1YW50VG8pO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ25vdyc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXlxcKyguKykvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChjYXB0dXJlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm93KCkgKyBuZXcgdGhpcy5jb25zdHJ1Y3RvcihjYXB0dXJlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFF1YW50aXplIHRoZSB0aW1lIGJ5IHRoZSBnaXZlbiBzdWJkaXZpc2lvbi4gT3B0aW9uYWxseSBhZGQgYVxuXHRcdCAqICBwZXJjZW50YWdlIHdoaWNoIHdpbGwgbW92ZSB0aGUgdGltZSB2YWx1ZSB0b3dhcmRzIHRoZSBpZGVhbFxuXHRcdCAqICBxdWFudGl6ZWQgdmFsdWUgYnkgdGhhdCBwZXJjZW50YWdlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ8VGltZX0gIHZhbCAgICBUaGUgc3ViZGl2aXNpb24gdG8gcXVhbnRpemUgdG9cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBbcGVyY2VudD0xXSAgTW92ZSB0aGUgdGltZSB2YWx1ZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3dhcmRzIHRoZSBxdWFudGl6ZWQgdmFsdWUgYnlcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBwZXJjZW50YWdlLlxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVGltZSgyMSkucXVhbnRpemUoMikgLy9yZXR1cm5zIDIyXG5cdFx0ICogVG9uZS5UaW1lKDAuNikucXVhbnRpemUoXCI0blwiLCAwLjUpIC8vcmV0dXJucyAwLjU1XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnF1YW50aXplID0gZnVuY3Rpb24gKHN1YmRpdiwgcGVyY2VudCkge1xuXHQgICAgICAgIHBlcmNlbnQgPSBUb25lLmRlZmF1bHRBcmcocGVyY2VudCwgMSk7XG5cdCAgICAgICAgdmFyIHN1YmRpdmlzaW9uID0gbmV3IHRoaXMuY29uc3RydWN0b3Ioc3ViZGl2KTtcblx0ICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlT2YoKTtcblx0ICAgICAgICB2YXIgbXVsdGlwbGUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3ViZGl2aXNpb24pO1xuXHQgICAgICAgIHZhciBpZGVhbCA9IG11bHRpcGxlICogc3ViZGl2aXNpb247XG5cdCAgICAgICAgdmFyIGRpZmYgPSBpZGVhbCAtIHZhbHVlO1xuXHQgICAgICAgIHJldHVybiB2YWx1ZSArIGRpZmYgKiBwZXJjZW50O1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBUaW1lIHRvIE5vdGF0aW9uLiBUaGUgbm90YXRpb24gdmFsdWVzIGFyZSB3aWxsIGJlIHRoZVxuXHRcdCAqICBjbG9zZXN0IHJlcHJlc2VudGF0aW9uIGJldHdlZW4gMW0gdG8gMTI4dGggbm90ZS5cblx0XHQgKiAgQHJldHVybiB7Tm90YXRpb259XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pZiB0aGUgVHJhbnNwb3J0IGlzIGF0IDEyMGJwbTpcblx0XHQgKiBUb25lLlRpbWUoMikudG9Ob3RhdGlvbigpOy8vcmV0dXJucyBcIjFtXCJcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9Ob3RhdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgdGltZSA9IHRoaXMudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgdmFyIHRlc3ROb3RhdGlvbnMgPSBbJzFtJ107XG5cdCAgICAgICAgZm9yICh2YXIgcG93ZXIgPSAxOyBwb3dlciA8IDg7IHBvd2VyKyspIHtcblx0ICAgICAgICAgICAgdmFyIHN1YmRpdiA9IE1hdGgucG93KDIsIHBvd2VyKTtcblx0ICAgICAgICAgICAgdGVzdE5vdGF0aW9ucy5wdXNoKHN1YmRpdiArICduLicpO1xuXHQgICAgICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goc3ViZGl2ICsgJ24nKTtcblx0ICAgICAgICAgICAgdGVzdE5vdGF0aW9ucy5wdXNoKHN1YmRpdiArICd0Jyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaCgnMCcpO1xuXHQgICAgICAgIC8vZmluZCB0aGUgY2xvc2V0cyBub3RhdGlvbiByZXByZXNlbnRhdGlvblxuXHQgICAgICAgIHZhciBjbG9zZXN0ID0gdGVzdE5vdGF0aW9uc1swXTtcblx0ICAgICAgICB2YXIgY2xvc2VzdFNlY29uZHMgPSBUb25lLlRpbWUodGVzdE5vdGF0aW9uc1swXSkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgdGVzdE5vdGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChub3RhdGlvbikge1xuXHQgICAgICAgICAgICB2YXIgbm90YXRpb25TZWNvbmRzID0gVG9uZS5UaW1lKG5vdGF0aW9uKS50b1NlY29uZHMoKTtcblx0ICAgICAgICAgICAgaWYgKE1hdGguYWJzKG5vdGF0aW9uU2Vjb25kcyAtIHRpbWUpIDwgTWF0aC5hYnMoY2xvc2VzdFNlY29uZHMgLSB0aW1lKSkge1xuXHQgICAgICAgICAgICAgICAgY2xvc2VzdCA9IG5vdGF0aW9uO1xuXHQgICAgICAgICAgICAgICAgY2xvc2VzdFNlY29uZHMgPSBub3RhdGlvblNlY29uZHM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gY2xvc2VzdDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGVuY29kZWQgYXMgQmFyczpCZWF0czpTaXh0ZWVudGhzLlxuXHRcdCAqICBAcmV0dXJuICB7QmFyc0JlYXRzU2l4dGVlbnRoc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9CYXJzQmVhdHNTaXh0ZWVudGhzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBxdWFydGVyVGltZSA9IHRoaXMuX2JlYXRzVG9Vbml0cygxKTtcblx0ICAgICAgICB2YXIgcXVhcnRlcnMgPSB0aGlzLnZhbHVlT2YoKSAvIHF1YXJ0ZXJUaW1lO1xuXHQgICAgICAgIHZhciBtZWFzdXJlcyA9IE1hdGguZmxvb3IocXVhcnRlcnMgLyB0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkpO1xuXHQgICAgICAgIHZhciBzaXh0ZWVudGhzID0gcXVhcnRlcnMgJSAxICogNDtcblx0ICAgICAgICBxdWFydGVycyA9IE1hdGguZmxvb3IocXVhcnRlcnMpICUgdGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpO1xuXHQgICAgICAgIHNpeHRlZW50aHMgPSBzaXh0ZWVudGhzLnRvU3RyaW5nKCk7XG5cdCAgICAgICAgaWYgKHNpeHRlZW50aHMubGVuZ3RoID4gMykge1xuXHQgICAgICAgICAgICAvLyB0aGUgYWRkaXRpb25hbCBwYXJzZUZsb2F0IHJlbW92ZXMgaW5zaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvZXNcblx0ICAgICAgICAgICAgc2l4dGVlbnRocyA9IHBhcnNlRmxvYXQocGFyc2VGbG9hdChzaXh0ZWVudGhzKS50b0ZpeGVkKDMpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHByb2dyZXNzID0gW1xuXHQgICAgICAgICAgICBtZWFzdXJlcyxcblx0ICAgICAgICAgICAgcXVhcnRlcnMsXG5cdCAgICAgICAgICAgIHNpeHRlZW50aHNcblx0ICAgICAgICBdO1xuXHQgICAgICAgIHJldHVybiBwcm9ncmVzcy5qb2luKCc6Jyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiB0aWNrcy5cblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b1RpY2tzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBxdWFydGVyVGltZSA9IHRoaXMuX2JlYXRzVG9Vbml0cygxKTtcblx0ICAgICAgICB2YXIgcXVhcnRlcnMgPSB0aGlzLnZhbHVlT2YoKSAvIHF1YXJ0ZXJUaW1lO1xuXHQgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHF1YXJ0ZXJzICogdGhpcy5fZ2V0UFBRKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgYXMgYSBtaWRpIG5vdGUuXG5cdFx0ICogIEByZXR1cm4gIHtNaWRpfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b01pZGkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20odGhpcy50b0ZyZXF1ZW5jeSgpKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaW1lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVHJhbnNwb3J0VGltZSBpcyBhIHRoZSB0aW1lIGFsb25nIHRoZSBUcmFuc3BvcnQnc1xuXHRcdCAqICAgICAgICAgdGltZWxpbmUuIEl0IGlzIHNpbWlsYXIgdG8gVG9uZS5UaW1lLCBidXQgaW5zdGVhZCBvZiBldmFsdWF0aW5nXG5cdFx0ICogICAgICAgICBhZ2FpbnN0IHRoZSBBdWRpb0NvbnRleHQncyBjbG9jaywgaXQgaXMgZXZhbHVhdGVkIGFnYWluc3Rcblx0XHQgKiAgICAgICAgIHRoZSBUcmFuc3BvcnQncyBwb3NpdGlvbi4gU2VlIFtUcmFuc3BvcnRUaW1lIHdpa2ldKGh0dHBzOi8vZ2l0aHViLmNvbS9Ub25lanMvVG9uZS5qcy93aWtpL1RyYW5zcG9ydFRpbWUpLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHZhbCAgICBUaGUgdGltZSB2YWx1ZSBhcyBhIG51bWJlciBvciBzdHJpbmdcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nPX0gIHVuaXRzICBVbml0IHZhbHVlc1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UaW1lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuVHJhbnNwb3J0VGltZSkge1xuXHQgICAgICAgICAgICBUb25lLlRpbWUuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVHJhbnNwb3J0VGltZSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRUaW1lLCBUb25lLlRpbWUpO1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgaW4gd2hpY2hldmVyIGNvbnRleHQgaXMgcmVsZXZhbnRcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWUucHJvdG90eXBlLl9ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LnNlY29uZHM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0VGltZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VFlQRVNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogVW5pdHMgd2hpY2ggYSB2YWx1ZSBjYW4gdGFrZSBvbi5cblx0XHQgKiBAZW51bSB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UeXBlID0ge1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIERlZmF1bHQgdW5pdHNcblx0XHRcdCAqICBAdHlwZWRlZiB7RGVmYXVsdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIERlZmF1bHQ6ICdudW1iZXInLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRpbWUgY2FuIGJlIGRlc2NyaWJlZCBpbiBhIG51bWJlciBvZiB3YXlzLiBSZWFkIG1vcmUgW1RpbWVdKGh0dHBzOi8vZ2l0aHViLmNvbS9Ub25lanMvVG9uZS5qcy93aWtpL1RpbWUpLlxuXHRcdFx0ICpcblx0XHRcdCAqICAqIE51bWJlcnMsIHdoaWNoIHdpbGwgYmUgdGFrZW4gbGl0ZXJhbGx5IGFzIHRoZSB0aW1lIChpbiBzZWNvbmRzKS5cblx0XHRcdCAqICAqIE5vdGF0aW9uLCAoXCI0blwiLCBcIjh0XCIpIGRlc2NyaWJlcyB0aW1lIGluIEJQTSBhbmQgdGltZSBzaWduYXR1cmUgcmVsYXRpdmUgdmFsdWVzLlxuXHRcdFx0ICogICogVHJhbnNwb3J0VGltZSwgKFwiNDozOjJcIikgd2lsbCBhbHNvIHByb3ZpZGUgdGVtcG8gYW5kIHRpbWUgc2lnbmF0dXJlIHJlbGF0aXZlIHRpbWVzXG5cdFx0XHQgKiAgaW4gdGhlIGZvcm0gQkFSUzpRVUFSVEVSUzpTSVhURUVOVEhTLlxuXHRcdFx0ICogICogRnJlcXVlbmN5LCAoXCI4aHpcIikgaXMgY29udmVydGVkIHRvIHRoZSBsZW5ndGggb2YgdGhlIGN5Y2xlIGluIHNlY29uZHMuXG5cdFx0XHQgKiAgKiBOb3ctUmVsYXRpdmUsIChcIisxXCIpIHByZWZpeCBhbnkgb2YgdGhlIGFib3ZlIHdpdGggXCIrXCIgYW5kIGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXNcblx0XHRcdCAqICBcInRoZSBjdXJyZW50IHRpbWUgcGx1cyB3aGF0ZXZlciBleHByZXNzaW9uIGZvbGxvd3NcIi5cblx0XHRcdCAqICAqIEV4cHJlc3Npb25zLCAoXCIzOjAgKyAyIC0gKDFtIC8gNylcIikgYW55IG9mIHRoZSBhYm92ZSBjYW4gYWxzbyBiZSBjb21iaW5lZFxuXHRcdFx0ICogIGludG8gYSBtYXRoZW1hdGljYWwgZXhwcmVzc2lvbiB3aGljaCB3aWxsIGJlIGV2YWx1YXRlZCB0byBjb21wdXRlIHRoZSBkZXNpcmVkIHRpbWUuXG5cdFx0XHQgKiAgKiBObyBBcmd1bWVudCwgZm9yIG1ldGhvZHMgd2hpY2ggYWNjZXB0IHRpbWUsIG5vIGFyZ3VtZW50IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXNcblx0XHRcdCAqICBcIm5vd1wiIChpLmUuIHRoZSBjdXJyZW50VGltZSkuXG5cdFx0XHQgKlxuXHRcdFx0ICogIEB0eXBlZGVmIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgVGltZTogJ3RpbWUnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEZyZXF1ZW5jeSBjYW4gYmUgZGVzY3JpYmVkIHNpbWlsYXIgdG8gdGltZSwgZXhjZXB0IHVsdGltYXRlbHkgdGhlXG5cdFx0XHQgKiAgdmFsdWVzIGFyZSBjb252ZXJ0ZWQgdG8gZnJlcXVlbmN5IGluc3RlYWQgb2Ygc2Vjb25kcy4gQSBudW1iZXJcblx0XHRcdCAqICBpcyB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHZhbHVlIGluIGhlcnR6LiBBZGRpdGlvbmFsbHkgYW55IG9mIHRoZVxuXHRcdFx0ICogIFRpbWUgZW5jb2RpbmdzIGNhbiBiZSB1c2VkLiBOb3RlIG5hbWVzIGluIHRoZSBmb3JtXG5cdFx0XHQgKiAgb2YgTk9URSBPQ1RBVkUgKGkuZS4gQzQpIGFyZSBhbHNvIGFjY2VwdGVkIGFuZCBjb252ZXJ0ZWQgdG8gdGhlaXJcblx0XHRcdCAqICBmcmVxdWVuY3kgdmFsdWUuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0ZyZXF1ZW5jeX1cblx0XHRcdCAqL1xuXHQgICAgICAgIEZyZXF1ZW5jeTogJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVHJhbnNwb3J0VGltZSBkZXNjcmliZXMgYSBwb3NpdGlvbiBhbG9uZyB0aGUgVHJhbnNwb3J0J3MgdGltZWxpbmUuIEl0IGlzXG5cdFx0XHQgKiAgc2ltaWxhciB0byBUaW1lIGluIHRoYXQgaXQgdXNlcyBhbGwgdGhlIHNhbWUgZW5jb2RpbmdzLCBidXQgVHJhbnNwb3J0VGltZSBzcGVjaWZpY2FsbHlcblx0XHRcdCAqICBwZXJ0YWlucyB0byB0aGUgVHJhbnNwb3J0J3MgdGltZWxpbmUsIHdoaWNoIGlzIHN0YXJ0YWJsZSwgc3RvcHBhYmxlLCBsb29wYWJsZSwgYW5kIHNlZWthYmxlLlxuXHRcdFx0ICogIFtSZWFkIG1vcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9Ub25lanMvVG9uZS5qcy93aWtpL1RyYW5zcG9ydFRpbWUpXG5cdFx0XHQgKiAgQHR5cGVkZWYge1RyYW5zcG9ydFRpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBUcmFuc3BvcnRUaW1lOiAndHJhbnNwb3J0VGltZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGlja3MgYXJlIHRoZSBiYXNpYyBzdWJ1bml0IG9mIHRoZSBUcmFuc3BvcnQuIFRoZXkgYXJlXG5cdFx0XHQgKiAgdGhlIHNtYWxsZXN0IHVuaXQgb2YgdGltZSB0aGF0IHRoZSBUcmFuc3BvcnQgc3VwcG9ydHMuXG5cdFx0XHQgKiAgQHR5cGVkZWYge1RpY2tzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgVGlja3M6ICd0aWNrcycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTm9ybWFsIHZhbHVlcyBhcmUgd2l0aGluIHRoZSByYW5nZSBbMCwgMV0uXG5cdFx0XHQgKiAgQHR5cGVkZWYge05vcm1hbFJhbmdlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgTm9ybWFsUmFuZ2U6ICdub3JtYWxSYW5nZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQXVkaW9SYW5nZSB2YWx1ZXMgYXJlIGJldHdlZW4gWy0xLCAxXS5cblx0XHRcdCAqICBAdHlwZWRlZiB7QXVkaW9SYW5nZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIEF1ZGlvUmFuZ2U6ICdhdWRpb1JhbmdlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBEZWNpYmVscyBhcmUgYSBsb2dhcml0aG1pYyB1bml0IG9mIG1lYXN1cmVtZW50IHdoaWNoIGlzIHVzZWZ1bCBmb3Igdm9sdW1lXG5cdFx0XHQgKiAgYmVjYXVzZSBvZiB0aGUgbG9nYXJpdGhtaWMgd2F5IHRoYXQgd2UgcGVyY2VpdmUgbG91ZG5lc3MuIDAgZGVjaWJlbHNcblx0XHRcdCAqICBtZWFucyBubyBjaGFuZ2UgaW4gdm9sdW1lLiAtMTBkYiBpcyBhcHByb3hpbWF0ZWx5IGhhbGYgYXMgbG91ZCBhbmQgMTBkYlxuXHRcdFx0ICogIGlzIHR3aWNlIGlzIGxvdWQuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0RlY2liZWxzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgRGVjaWJlbHM6ICdkYicsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFsZi1zdGVwIG5vdGUgaW5jcmVtZW50cywgaS5lLiAxMiBpcyBhbiBvY3RhdmUgYWJvdmUgdGhlIHJvb3QuIGFuZCAxIGlzIGEgaGFsZi1zdGVwIHVwLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtJbnRlcnZhbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIEludGVydmFsOiAnaW50ZXJ2YWwnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEJlYXRzIHBlciBtaW51dGUuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0JQTX1cblx0XHRcdCAqL1xuXHQgICAgICAgIEJQTTogJ2JwbScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuXG5cdFx0XHQgKiAgQHR5cGVkZWYge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgUG9zaXRpdmU6ICdwb3NpdGl2ZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgR2FpbiBpcyB0aGUgcmF0aW8gYmV0d2VlbiBpbnB1dCBhbmQgb3V0cHV0IG9mIGEgc2lnbmFsLlxuXHRcdFx0ICogIEEgZ2FpbiBvZiAwIGlzIHRoZSBzYW1lIGFzIHNpbGVuY2luZyB0aGUgc2lnbmFsLiBBIGdhaW4gb2Zcblx0XHRcdCAqICAxLCBjYXVzZXMgbm8gY2hhbmdlIHRvIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0dhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICBHYWluOiAnZ2FpbicsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBjZW50IGlzIGEgaHVuZHJlZHRoIG9mIGEgc2VtaXRvbmUuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0NlbnRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQ2VudHM6ICdjZW50cycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW5nbGUgYmV0d2VlbiAwIGFuZCAzNjAuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0RlZ3JlZXN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBEZWdyZWVzOiAnZGVncmVlcycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBudW1iZXIgcmVwcmVzZW50aW5nIGEgbWlkaSBub3RlLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtNSURJfVxuXHRcdFx0ICovXG5cdCAgICAgICAgTUlESTogJ21pZGknLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgY29sb24tc2VwYXJhdGVkIHJlcHJlc2VudGF0aW9uIG9mIHRpbWUgaW4gdGhlIGZvcm0gb2Zcblx0XHRcdCAqICBCYXJzOkJlYXRzOlNpeHRlZW50aHMuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0JhcnNCZWF0c1NpeHRlZW50aHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBCYXJzQmVhdHNTaXh0ZWVudGhzOiAnYmFyc0JlYXRzU2l4dGVlbnRocycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2FtcGxpbmcgaXMgdGhlIHJlZHVjdGlvbiBvZiBhIGNvbnRpbnVvdXMgc2lnbmFsIHRvIGEgZGlzY3JldGUgc2lnbmFsLlxuXHRcdFx0ICogIEF1ZGlvIGlzIHR5cGljYWxseSBzYW1wbGVkIDQ0MTAwIHRpbWVzIHBlciBzZWNvbmQuXG5cdFx0XHQgKiAgQHR5cGVkZWYge1NhbXBsZXN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBTYW1wbGVzOiAnc2FtcGxlcycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGVydHogYXJlIGEgZnJlcXVlbmN5IHJlcHJlc2VudGF0aW9uIGRlZmluZWQgYXMgb25lIGN5Y2xlIHBlciBzZWNvbmQuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0hlcnR6fVxuXHRcdFx0ICovXG5cdCAgICAgICAgSGVydHo6ICdoZXJ0eicsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBmcmVxdWVuY3kgcmVwcmVzZW50ZWQgYnkgYSBsZXR0ZXIgbmFtZSxcblx0XHRcdCAqICBhY2NpZGVudGFsIGFuZCBvY3RhdmUuIFRoaXMgc3lzdGVtIGlzIGtub3duIGFzXG5cdFx0XHQgKiAgW1NjaWVudGlmaWMgUGl0Y2ggTm90YXRpb25dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NjaWVudGlmaWNfcGl0Y2hfbm90YXRpb24pLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtOb3RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgTm90ZTogJ25vdGUnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE9uZSBtaWxsaXNlY29uZCBpcyBhIHRob3VzYW5kdGggb2YgYSBzZWNvbmQuXG5cdFx0XHQgKiAgQHR5cGVkZWYge01pbGxpc2Vjb25kc31cblx0XHRcdCAqL1xuXHQgICAgICAgIE1pbGxpc2Vjb25kczogJ21pbGxpc2Vjb25kcycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2Vjb25kcyBhcmUgdGhlIHRpbWUgdW5pdCBvZiB0aGUgQXVkaW9Db250ZXh0LiBJbiB0aGUgZW5kLFxuXHRcdFx0ICogIGFsbCB2YWx1ZXMgbmVlZCB0byBiZSBldmFsdWF0ZWQgdG8gc2Vjb25kcy5cblx0XHRcdCAqICBAdHlwZWRlZiB7U2Vjb25kc31cblx0XHRcdCAqL1xuXHQgICAgICAgIFNlY29uZHM6ICdzZWNvbmRzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHN0cmluZyByZXByZXNlbnRpbmcgYSBkdXJhdGlvbiByZWxhdGl2ZSB0byBhIG1lYXN1cmUuXG5cdFx0XHQgKiAgKiBcIjRuXCIgPSBxdWFydGVyIG5vdGVcblx0XHRcdCAqICAqIFwiMm1cIiA9IHR3byBtZWFzdXJlc1xuXHRcdFx0ICogICogXCI4dFwiID0gZWlnaHRoLW5vdGUgdHJpcGxldFxuXHRcdFx0ICogIEB0eXBlZGVmIHtOb3RhdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIE5vdGF0aW9uOiAnbm90YXRpb24nXG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBBVUdNRU5UIFRPTkUncyBQUk9UT1RZUEVcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgVGltZSBpbnRvIHNlY29uZHMuXG5cdFx0ICpcblx0XHQgKiAgVW5saWtlIHRoZSBtZXRob2Qgd2hpY2ggaXQgb3ZlcnJpZGVzLCB0aGlzIHRha2VzIGludG8gYWNjb3VudFxuXHRcdCAqICB0cmFuc3BvcnR0aW1lIGFuZCBtdXNpY2FsIG5vdGF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIFRpbWUgOiAxLjQwXG5cdFx0ICogIE5vdGF0aW9uOiA0biBvciAxbSBvciAydFxuXHRcdCAqICBOb3cgUmVsYXRpdmU6ICszblxuXHRcdCAqICBNYXRoOiAzbisxNm4gb3IgZXZlbiBjb21wbGljYXRlZCBleHByZXNzaW9ucyAoKDNuKjIpLzYgKyAxKVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHJldHVybiB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRpbWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzVW5kZWYodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMubm93KCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaW1lKHRpbWUpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGltZSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRpbWUudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgZnJlcXVlbmN5IHJlcHJlc2VudGF0aW9uIGludG8gYSBudW1iZXIuXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gZnJlcVxuXHRcdCAqICBAcmV0dXJuIHtIZXJ0en0gICAgICB0aGUgZnJlcXVlbmN5IGluIGhlcnR6XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIoZnJlcSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZyZXE7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKGZyZXEpIHx8IFRvbmUuaXNVbmRlZihmcmVxKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuRnJlcXVlbmN5KGZyZXEpLnZhbHVlT2YoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGZyZXEgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmcmVxLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgdGltZSByZXByZXNlbnRhdGlvbiBpbnRvIHRpY2tzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm4ge1RpY2tzfSAgdGhlIHRpbWUgaW4gdGlja3Ncblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKHRpbWUpIHx8IFRvbmUuaXNTdHJpbmcodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRyYW5zcG9ydFRpbWUodGltZSkudG9UaWNrcygpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1VuZGVmKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC50aWNrcztcblx0ICAgICAgICB9IGVsc2UgaWYgKHRpbWUgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aW1lLnRvVGlja3MoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBhcmFtIHdyYXBzIHRoZSBuYXRpdmUgV2ViIEF1ZGlvJ3MgQXVkaW9QYXJhbSB0byBwcm92aWRlXG5cdFx0ICogICAgICAgICBhZGRpdGlvbmFsIHVuaXQgY29udmVyc2lvbiBmdW5jdGlvbmFsaXR5LiBJdCBhbHNvXG5cdFx0ICogICAgICAgICBzZXJ2ZXMgYXMgYSBiYXNlLWNsYXNzIGZvciBjbGFzc2VzIHdoaWNoIGhhdmUgYSBzaW5nbGUsXG5cdFx0ICogICAgICAgICBhdXRvbWF0YWJsZSBwYXJhbWV0ZXIuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtICB7QXVkaW9QYXJhbX0gIHBhcmFtICBUaGUgcGFyYW1ldGVyIHRvIHdyYXAuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuVHlwZX0gdW5pdHMgVGhlIHVuaXRzIG9mIHRoZSBhdWRpbyBwYXJhbS5cblx0XHQgKiAgQHBhcmFtICB7Qm9vbGVhbn0gY29udmVydCBJZiB0aGUgcGFyYW0gc2hvdWxkIGJlIGNvbnZlcnRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncGFyYW0nLFxuXHQgICAgICAgICAgICAndW5pdHMnLFxuXHQgICAgICAgICAgICAnY29udmVydCdcblx0ICAgICAgICBdLCBUb25lLlBhcmFtKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBuYXRpdmUgcGFyYW1ldGVyIHRvIGNvbnRyb2xcblx0XHRcdCAqICBAdHlwZSAge0F1ZGlvUGFyYW19XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dCA9IG9wdGlvbnMucGFyYW07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHVuaXRzIG9mIHRoZSBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UeXBlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy51bml0cyA9IG9wdGlvbnMudW5pdHM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSWYgdGhlIHZhbHVlIHNob3VsZCBiZSBjb252ZXJ0ZWQgb3Igbm90XG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmNvbnZlcnQgPSBvcHRpb25zLmNvbnZlcnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVHJ1ZSBpZiB0aGUgc2lnbmFsIHZhbHVlIGlzIGJlaW5nIG92ZXJyaWRkZW4gYnlcblx0XHRcdCAqICBhIGNvbm5lY3RlZCBzaWduYWwuXG5cdFx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0XHQgKiAgQHR5cGUgIHtib29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm92ZXJyaWRkZW4gPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB0aW1lbGluZSB3aGljaCB0cmFja3MgYWxsIG9mIHRoZSBhdXRvbWF0aW9ucy5cblx0XHRcdCAqIEB0eXBlIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBUb25lLlRpbWVsaW5lKDEwMDApO1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChvcHRpb25zLnZhbHVlKSAmJiB0aGlzLl9wYXJhbSkge1xuXHQgICAgICAgICAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYXJhbSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlZmF1bHQsXG5cdCAgICAgICAgJ2NvbnZlcnQnOiB0cnVlLFxuXHQgICAgICAgICdwYXJhbSc6IHVuZGVmaW5lZFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGFyYW0jXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFyYW0ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdG9Vbml0cyh0aGlzLmdldFZhbHVlQXRUaW1lKG5vdykpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5faW5pdGlhbFZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICAgICAgdGhpcy5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUF0VGltZSh2YWx1ZSwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGFyYW0jXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFyYW0ucHJvdG90eXBlLCAnbWluVmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuVGltZSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuRnJlcXVlbmN5IHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuUG9zaXRpdmUgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkJQTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkF1ZGlvUmFuZ2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAtMTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuRGVjaWJlbHMpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAtSW5maW5pdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW0ubWluVmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIG91dHB1dCB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGFyYW0jXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFyYW0ucHJvdG90eXBlLCAnbWF4VmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuTm9ybWFsUmFuZ2UgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkF1ZGlvUmFuZ2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmFtLm1heFZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCB0aGUgZ2l2ZW4gdmFsdWUgZnJvbSB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgVG9uZS5QYXJhbS51bml0c1xuXHRcdCAqICBpbnRvIHRoZSBkZXN0aW5hdGlvbiB2YWx1ZSAoc3VjaCBhcyBHYWluIG9yIEZyZXF1ZW5jeSkuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSAgeyp9IHZhbCB0aGUgdmFsdWUgdG8gY29udmVydFxuXHRcdCAqICBAcmV0dXJuIHtudW1iZXJ9ICAgICB0aGUgbnVtYmVyIHdoaWNoIHRoZSB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fZnJvbVVuaXRzID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIGlmICgodGhpcy5jb252ZXJ0IHx8IFRvbmUuaXNVbmRlZih0aGlzLmNvbnZlcnQpKSAmJiAhdGhpcy5vdmVycmlkZGVuKSB7XG5cdCAgICAgICAgICAgIHN3aXRjaCAodGhpcy51bml0cykge1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5UaW1lOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9TZWNvbmRzKHZhbCk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLkZyZXF1ZW5jeTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvRnJlcXVlbmN5KHZhbCk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLkRlY2liZWxzOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZGJUb0dhaW4odmFsKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuTm9ybWFsUmFuZ2U6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgodmFsLCAwKSwgMSk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLkF1ZGlvUmFuZ2U6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgodmFsLCAtMSksIDEpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5Qb3NpdGl2ZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCh2YWwsIDApO1xuXHQgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENvbnZlcnQgdGhlIHBhcmFtZXRlcnMgdmFsdWUgaW50byB0aGUgdW5pdHMgc3BlY2lmaWVkIGJ5IFRvbmUuUGFyYW0udW5pdHMuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0gIHtudW1iZXJ9IHZhbCB0aGUgdmFsdWUgdG8gY29udmVydFxuXHRcdCAqIEByZXR1cm4ge251bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl90b1VuaXRzID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIGlmICh0aGlzLmNvbnZlcnQgfHwgVG9uZS5pc1VuZGVmKHRoaXMuY29udmVydCkpIHtcblx0ICAgICAgICAgICAgc3dpdGNoICh0aGlzLnVuaXRzKSB7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLkRlY2liZWxzOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZ2FpblRvRGIodmFsKTtcblx0ICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fbWluT3V0cHV0ID0gMC4wMDAwMTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZXZlbnQgdHlwZXNcblx0XHQgKiAgQGVudW0ge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUgPSB7XG5cdCAgICAgICAgTGluZWFyOiAnbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgIEV4cG9uZW50aWFsOiAnZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZScsXG5cdCAgICAgICAgVGFyZ2V0OiAnc2V0VGFyZ2V0QXRUaW1lJyxcblx0ICAgICAgICBTZXRWYWx1ZTogJ3NldFZhbHVlQXRUaW1lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYSBwYXJhbWV0ZXIgdmFsdWUgY2hhbmdlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0geyp9XHR2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0IHRoZSBzaWduYWwuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gIHRpbWUgVGhlIHRpbWUgd2hlbiB0aGUgY2hhbmdlIHNob3VsZCBvY2N1ci5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NldCB0aGUgZnJlcXVlbmN5IHRvIFwiRzRcIiBpbiBleGFjdGx5IDEgc2Vjb25kIGZyb20gbm93LlxuXHRcdCAqIGZyZXEuc2V0VmFsdWVBdFRpbWUoXCJHNFwiLCBcIisxXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuc2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuU2V0VmFsdWUsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5zZXRWYWx1ZUF0VGltZSh2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc2lnbmFscyB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gU3Vic2VxdWVudCBzY2hlZHVsaW5nXG5cdFx0ICogIG1heSBpbnZhbGlkYXRlIHRoZSByZXR1cm5lZCB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFdoZW4gdG8gZ2V0IHRoZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfSBUaGUgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGFmdGVyID0gdGhpcy5fZXZlbnRzLmdldEFmdGVyKHRpbWUpO1xuXHQgICAgICAgIHZhciBiZWZvcmUgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHZhciBpbml0aWFsVmFsdWUgPSBUb25lLmRlZmF1bHRBcmcodGhpcy5faW5pdGlhbFZhbHVlLCB0aGlzLl9wYXJhbS5kZWZhdWx0VmFsdWUpO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblx0ICAgICAgICAvL2lmIGl0IHdhcyBzZXQgYnlcblx0ICAgICAgICBpZiAoYmVmb3JlID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYmVmb3JlLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuVGFyZ2V0KSB7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91cyA9IHRoaXMuX2V2ZW50cy5nZXRCZWZvcmUoYmVmb3JlLnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXNWYWw7XG5cdCAgICAgICAgICAgIGlmIChwcmV2aW91cyA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgcHJldmlvdXNWYWwgPSBpbml0aWFsVmFsdWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbCA9IHByZXZpb3VzLnZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZXhwb25lbnRpYWxBcHByb2FjaChiZWZvcmUudGltZSwgcHJldmlvdXNWYWwsIGJlZm9yZS52YWx1ZSwgYmVmb3JlLmNvbnN0YW50LCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGFmdGVyID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gYmVmb3JlLnZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9saW5lYXJJbnRlcnBvbGF0ZShiZWZvcmUudGltZSwgYmVmb3JlLnZhbHVlLCBhZnRlci50aW1lLCBhZnRlci52YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZXhwb25lbnRpYWxJbnRlcnBvbGF0ZShiZWZvcmUudGltZSwgYmVmb3JlLnZhbHVlLCBhZnRlci50aW1lLCBhZnRlci52YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSBiZWZvcmUudmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB2YWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ3JlYXRlcyBhIHNjaGVkdWxlIHBvaW50IHdpdGggdGhlIGN1cnJlbnQgdmFsdWUgYXQgdGhlIGN1cnJlbnQgdGltZS5cblx0XHQgKiAgVGhpcyBpcyB1c2VmdWwgZm9yIGNyZWF0aW5nIGFuIGF1dG9tYXRpb24gYW5jaG9yIHBvaW50IGluIG9yZGVyIHRvXG5cdFx0ICogIHNjaGVkdWxlIGNoYW5nZXMgZnJvbSB0aGUgY3VycmVudCB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IG5vdyAoT3B0aW9uYWxseSkgcGFzcyB0aGUgbm93IHZhbHVlIGluLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuc2V0UmFtcFBvaW50ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWwgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuY2FuY2VsQW5kSG9sZEF0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAoY3VycmVudFZhbCA9PT0gMCkge1xuXHQgICAgICAgICAgICBjdXJyZW50VmFsID0gdGhpcy5fbWluT3V0cHV0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnNldFZhbHVlQXRUaW1lKHRoaXMuX3RvVW5pdHMoY3VycmVudFZhbCksIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYSBsaW5lYXIgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb20gdGhlXG5cdFx0ICogIHByZXZpb3VzIHNjaGVkdWxlZCBwYXJhbWV0ZXIgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZW5kVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIGVuZFRpbWUpIHtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgZW5kVGltZSA9IHRoaXMudG9TZWNvbmRzKGVuZFRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiBlbmRUaW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIGVuZFRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gZXhwb25lbnRpYWwgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb21cblx0XHQgKiAgdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwYXJhbWV0ZXIgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZW5kVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5kVGltZSkge1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICB2YWx1ZSA9IE1hdGgubWF4KHRoaXMuX21pbk91dHB1dCwgdmFsdWUpO1xuXHQgICAgICAgIGVuZFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhlbmRUaW1lKTtcblx0ICAgICAgICAvL3N0b3JlIHRoZSBldmVudFxuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwsXG5cdCAgICAgICAgICAgICd0aW1lJzogZW5kVGltZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBlbmRUaW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGV4cG9uZW50aWFsIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBjdXJyZW50IHRpbWUgYW5kIGN1cnJlbnQgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlIG92ZXIgdGhlXG5cdFx0ICogIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2V4cG9uZW50aWFsbHkgcmFtcCB0byB0aGUgdmFsdWUgMiBvdmVyIDQgc2Vjb25kcy5cblx0XHQgKiBzaWduYWwuZXhwb25lbnRpYWxSYW1wVG8oMiwgNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIHN0YXJ0VGltZSArIHRoaXMudG9TZWNvbmRzKHJhbXBUaW1lKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhbiBsaW5lYXIgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb21cblx0XHQgKiAgdGhlIGN1cnJlbnQgdGltZSBhbmQgY3VycmVudCB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUgb3ZlciB0aGVcblx0XHQgKiAgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWUgICBUaGUgdmFsdWUgdG8gcmFtcCB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbGluZWFybHkgcmFtcCB0byB0aGUgdmFsdWUgNCBvdmVyIDMgc2Vjb25kcy5cblx0XHQgKiBzaWduYWwubGluZWFyUmFtcFRvKDQsIDMpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUubGluZWFyUmFtcFRvID0gZnVuY3Rpb24gKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLnNldFJhbXBQb2ludChzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIHN0YXJ0VGltZSArIHRoaXMudG9TZWNvbmRzKHJhbXBUaW1lKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gU2luY2UgaXRcblx0XHQgKiAgaXMgYW4gZXhwb25lbnRpYWwgYXBwcm9hY2ggaXQgd2lsbCBjb250aW51ZSBhcHByb2FjaGluZyBhZnRlciB0aGUgcmFtcCBkdXJhdGlvbi4gVGhlXG5cdFx0ICogIHJhbXBUaW1lIGlzIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdG8gcmVhY2ggb3ZlciA5OSUgb2YgdGhlIHdheSB0b3dhcmRzIHRoZSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0W3N0YXJ0VGltZT1ub3ddIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9leHBvbmVudGlhbGx5IHJhbXAgdG8gdGhlIHZhbHVlIDIgb3ZlciA0IHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmV4cG9uZW50aWFsUmFtcFRvKDIsIDQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUudGFyZ2V0UmFtcFRvID0gZnVuY3Rpb24gKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLnNldFJhbXBQb2ludChzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKHZhbHVlLCBzdGFydFRpbWUsIHJhbXBUaW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBTaW5jZSBpdFxuXHRcdCAqICBpcyBhbiBleHBvbmVudGlhbCBhcHByb2FjaCBpdCB3aWxsIGNvbnRpbnVlIGFwcHJvYWNoaW5nIGFmdGVyIHRoZSByYW1wIGR1cmF0aW9uLiBUaGVcblx0XHQgKiAgcmFtcFRpbWUgaXMgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0byByZWFjaCBvdmVyIDk5JSBvZiB0aGUgd2F5IHRvd2FyZHMgdGhlIHZhbHVlLiBUaGlzIG1ldGhvZHNcblx0XHQgKiAgaXMgc2ltaWxhciB0byBzZXRUYXJnZXRBdFRpbWUgZXhjZXB0IHRoZSB0aGlyZCBhcmd1bWVudCBpcyBhIHRpbWUgaW5zdGVhZCBvZiBhICd0aW1lQ29uc3RhbnQnXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWUgICBUaGUgdmFsdWUgdG8gcmFtcCB0by5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0dGltZSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2V4cG9uZW50aWFsbHkgcmFtcCB0byB0aGUgdmFsdWUgMiBvdmVyIDQgc2Vjb25kcy5cblx0XHQgKiBzaWduYWwuZXhwb25lbnRpYWxSYW1wVG8oMiwgNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUsIHJhbXBUaW1lKSB7XG5cdCAgICAgICAgdmFyIHRpbWVDb25zdGFudCA9IE1hdGgubG9nKHRoaXMudG9TZWNvbmRzKHJhbXBUaW1lKSArIDEpIC8gTWF0aC5sb2coMjAwKTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuc2V0VGFyZ2V0QXRUaW1lKHZhbHVlLCB0aW1lLCB0aW1lQ29uc3RhbnQpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUgd2l0aFxuXHRcdCAqICBhIHJhdGUgaGF2aW5nIHRoZSBnaXZlbiB0aW1lIGNvbnN0YW50LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHRpbWVDb25zdGFudFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25zdGFudCkge1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICAvLyBUaGUgdmFsdWUgd2lsbCBuZXZlciBiZSBhYmxlIHRvIGFwcHJvYWNoIHdpdGhvdXQgdGltZUNvbnN0YW50ID4gMC5cblx0ICAgICAgICBpZiAodGltZUNvbnN0YW50IDw9IDApIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aW1lQ29uc3RhbnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCcpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuVGFyZ2V0LFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiBzdGFydFRpbWUsXG5cdCAgICAgICAgICAgICdjb25zdGFudCc6IHRpbWVDb25zdGFudFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLnNldFRhcmdldEF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIGFuIGFycmF5IG9mIGFyYml0cmFyeSBwYXJhbWV0ZXIgdmFsdWVzIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb24uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtBcnJheX0gdmFsdWVzXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gZHVyYXRpb25cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3NjYWxpbmc9MV0gSWYgdGhlIHZhbHVlcyBpbiB0aGUgY3VydmUgc2hvdWxkIGJlIHNjYWxlZCBieSBzb21lIHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRWYWx1ZUN1cnZlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlcywgc3RhcnRUaW1lLCBkdXJhdGlvbiwgc2NhbGluZykge1xuXHQgICAgICAgIHNjYWxpbmcgPSBUb25lLmRlZmF1bHRBcmcoc2NhbGluZywgMSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLnNldFZhbHVlQXRUaW1lKHZhbHVlc1swXSAqIHNjYWxpbmcsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdmFyIHNlZ1RpbWUgPSBkdXJhdGlvbiAvICh2YWx1ZXMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZXNbaV0gKiBzY2FsaW5nLCBzdGFydFRpbWUgKyBpICogc2VnVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWxzIGFsbCBzY2hlZHVsZWQgcGFyYW1ldGVyIGNoYW5nZXMgd2l0aCB0aW1lcyBncmVhdGVyIHRoYW4gb3Jcblx0XHQgKiAgZXF1YWwgdG8gc3RhcnRUaW1lLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGlzIGlzIHNpbWlsYXIgdG8gW2NhbmNlbFNjaGVkdWxlZFZhbHVlc10oI2NhbmNlbFNjaGVkdWxlZFZhbHVlcykgZXhjZXB0XG5cdFx0ICogIGl0IGhvbGRzIHRoZSBhdXRvbWF0ZWQgdmFsdWUgYXQgdGltZSB1bnRpbCB0aGUgbmV4dCBhdXRvbWF0ZWQgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmNhbmNlbEFuZEhvbGRBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB2YWx1ZUF0VGltZSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgLy9pZiB0aGVyZSBpcyBhbiBldmVudCBhdCB0aGUgZ2l2ZW4gdGltZVxuXHQgICAgICAgIC8vYW5kIHRoYXQgZXZlbiBpcyBub3QgYSBcInNldFwiXG5cdCAgICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgdmFyIGFmdGVyID0gdGhpcy5fZXZlbnRzLmdldEFmdGVyKHRpbWUpO1xuXHQgICAgICAgIGlmIChiZWZvcmUgJiYgYmVmb3JlLnRpbWUgPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgLy9yZW1vdmUgZXZlcnl0aGluZyBhZnRlclxuXHQgICAgICAgICAgICBpZiAoYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwoYWZ0ZXIudGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKHRpbWUgKyAwLjAwMDAwMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKGFmdGVyKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIHRoZSBuZXh0IGV2ZW50KHMpXG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwoYWZ0ZXIudGltZSk7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcGFyYW0uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcikge1xuXHQgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZUF0VGltZSwgdGltZSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZUF0VGltZSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5FeHBvbmVudGlhbCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlQXRUaW1lLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5FeHBvbmVudGlhbCxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVBdFRpbWUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc2V0IHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuU2V0VmFsdWUsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlQXRUaW1lLFxuXHQgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBpZiAodGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhcmFtLnNldFZhbHVlQXRUaW1lKHZhbHVlQXRUaW1lLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJhbXBzIHRvIHRoZSBnaXZlbiB2YWx1ZSBvdmVyIHRoZSBkdXJhdGlvbiBvZiB0aGUgcmFtcFRpbWUuXG5cdFx0ICogIEF1dG9tYXRpY2FsbHkgc2VsZWN0cyB0aGUgYmVzdCByYW1wIHR5cGUgKGV4cG9uZW50aWFsIG9yIGxpbmVhcilcblx0XHQgKiAgZGVwZW5kaW5nIG9uIHRoZSBgdW5pdHNgIG9mIHRoZSBzaWduYWxcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIFx0VGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0W3N0YXJ0VGltZT1ub3ddIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9yYW1wIHRvIHRoZSB2YWx1ZSBlaXRoZXIgbGluZWFybHkgb3IgZXhwb25lbnRpYWxseVxuXHRcdCAqIC8vZGVwZW5kaW5nIG9uIHRoZSBcInVuaXRzXCIgdmFsdWUgb2YgdGhlIHNpZ25hbFxuXHRcdCAqIHNpZ25hbC5yYW1wVG8oMCwgMTApO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2NoZWR1bGUgaXQgdG8gcmFtcCBzdGFydGluZyBhdCBhIHNwZWNpZmljIHRpbWVcblx0XHQgKiBzaWduYWwucmFtcFRvKDAsIDEwLCA1KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUucmFtcFRvID0gZnVuY3Rpb24gKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgcmFtcFRpbWUgPSBUb25lLmRlZmF1bHRBcmcocmFtcFRpbWUsIDAuMSk7XG5cdCAgICAgICAgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5GcmVxdWVuY3kgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkJQTSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuRGVjaWJlbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5leHBvbmVudGlhbFJhbXBUbyh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5saW5lYXJSYW1wVG8odmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBVVRPTUFUSU9OIENVUlZFIENBTENVTEFUSU9OU1xuXHQgICAgLy9cdE1JVCBMaWNlbnNlLCBjb3B5cmlnaHQgKGMpIDIwMTQgSm9yZGFuIFNhbnRlbGxcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gQ2FsY3VsYXRlcyB0aGUgdGhlIHZhbHVlIGFsb25nIHRoZSBjdXJ2ZSBwcm9kdWNlZCBieSBzZXRUYXJnZXRBdFRpbWVcblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9leHBvbmVudGlhbEFwcHJvYWNoID0gZnVuY3Rpb24gKHQwLCB2MCwgdjEsIHRpbWVDb25zdGFudCwgdCkge1xuXHQgICAgICAgIHJldHVybiB2MSArICh2MCAtIHYxKSAqIE1hdGguZXhwKC0odCAtIHQwKSAvIHRpbWVDb25zdGFudCk7XG5cdCAgICB9O1xuXHQgICAgLy8gQ2FsY3VsYXRlcyB0aGUgdGhlIHZhbHVlIGFsb25nIHRoZSBjdXJ2ZSBwcm9kdWNlZCBieSBsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZVxuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2xpbmVhckludGVycG9sYXRlID0gZnVuY3Rpb24gKHQwLCB2MCwgdDEsIHYxLCB0KSB7XG5cdCAgICAgICAgcmV0dXJuIHYwICsgKHYxIC0gdjApICogKCh0IC0gdDApIC8gKHQxIC0gdDApKTtcblx0ICAgIH07XG5cdCAgICAvLyBDYWxjdWxhdGVzIHRoZSB0aGUgdmFsdWUgYWxvbmcgdGhlIGN1cnZlIHByb2R1Y2VkIGJ5IGV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWVcblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9leHBvbmVudGlhbEludGVycG9sYXRlID0gZnVuY3Rpb24gKHQwLCB2MCwgdDEsIHYxLCB0KSB7XG5cdCAgICAgICAgcmV0dXJuIHYwICogTWF0aC5wb3codjEgLyB2MCwgKHQgLSB0MCkgLyAodDEgLSB0MCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhcmFtO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIHRoZSBPZmZsaW5lQXVkaW9Db250ZXh0XG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkNvbnRleHR9XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGNoYW5uZWxzICBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIHRvIHJlbmRlclxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBkdXJhdGlvbiAgVGhlIGR1cmF0aW9uIHRvIHJlbmRlciBpbiBzYW1wbGVzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBzYW1wbGVSYXRlIHRoZSBzYW1wbGUgcmF0ZSB0byByZW5kZXIgYXRcblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQgPSBmdW5jdGlvbiAoY2hhbm5lbHMsIGR1cmF0aW9uLCBzYW1wbGVSYXRlKSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9mZmxpbmUgY29udGV4dFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtPZmZsaW5lQXVkaW9Db250ZXh0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdmFyIG9mZmxpbmVDb250ZXh0ID0gbmV3IE9mZmxpbmVBdWRpb0NvbnRleHQoY2hhbm5lbHMsIGR1cmF0aW9uICogc2FtcGxlUmF0ZSwgc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgLy93cmFwIHRoZSBtZXRob2RzL21lbWJlcnNcblx0ICAgICAgICBUb25lLkNvbnRleHQuY2FsbCh0aGlzLCB7XG5cdCAgICAgICAgICAgICdjb250ZXh0Jzogb2ZmbGluZUNvbnRleHQsXG5cdCAgICAgICAgICAgICdjbG9ja1NvdXJjZSc6ICdvZmZsaW5lJyxcblx0ICAgICAgICAgICAgJ2xvb2tBaGVhZCc6IDAsXG5cdCAgICAgICAgICAgICd1cGRhdGVJbnRlcnZhbCc6IDEyOCAvIHNhbXBsZVJhdGVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHByaXZhdGUgcmVmZXJlbmNlIHRvIHRoZSBkdXJhdGlvblxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kdXJhdGlvbiA9IGR1cmF0aW9uO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuIGFydGlmaWNpYWwgY2xvY2sgc291cmNlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk9mZmxpbmVDb250ZXh0LCBUb25lLkNvbnRleHQpO1xuXHQgICAgLyoqXG5cdFx0ICogIE92ZXJyaWRlIHRoZSBub3cgbWV0aG9kIHRvIHBvaW50IHRvIHRoZSBpbnRlcm5hbCBjbG9jayB0aW1lXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmVDb250ZXh0LnByb3RvdHlwZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRUaW1lO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW5kZXIgdGhlIG91dHB1dCBvZiB0aGUgT2ZmbGluZUNvbnRleHRcblx0XHQgKiAgQHJldHVybiAge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmVDb250ZXh0LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgd2hpbGUgKHRoaXMuX2R1cmF0aW9uIC0gdGhpcy5fY3VycmVudFRpbWUgPj0gMCkge1xuXHQgICAgICAgICAgICAvL2ludm9rZSBhbGwgdGhlIGNhbGxiYWNrcyBvbiB0aGF0IHRpbWVcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCd0aWNrJyk7XG5cdCAgICAgICAgICAgIC8vaW5jcmVtZW50IHRoZSBjbG9ja1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSB0aGlzLmJsb2NrVGltZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xvc2UgdGhlIGNvbnRleHRcblx0XHQgKiAgQHJldHVybiAge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmVDb250ZXh0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9jb250ZXh0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT2ZmbGluZUNvbnRleHQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcblx0ICAgICAgICB2YXIgaXNNb2JpbGVTYWZhcmkgPSB1YS5pbmNsdWRlcygnc2FmYXJpJykgJiYgIXVhLmluY2x1ZGVzKCdjaHJvbWUnKSAmJiB1YS5pbmNsdWRlcygnbW9iaWxlJyk7XG5cdCAgICAgICAgaWYgKGlzTW9iaWxlU2FmYXJpKSB7XG5cdCAgICAgICAgICAgIC8vbW9iaWxlIHNhZmFyaSBoYXMgYSBiaXphcnJlIGJ1ZyB3aXRoIHRoZSBvZmZsaW5lIGNvbnRleHRcblx0ICAgICAgICAgICAgLy93aGVuIGEgQnVmZmVyU291cmNlTm9kZSBpcyBzdGFydGVkLCBpdCBzdGFydHMgdGhlIG9mZmxpbmUgY29udGV4dFxuXHQgICAgICAgICAgICAvL1xuXHQgICAgICAgICAgICAvL2RlZmVycmluZyBhbGwgQnVmZmVyU291cmNlIHN0YXJ0cyB0aWxsIHRoZSBsYXN0IHBvc3NpYmxlIG1vbWVudFxuXHQgICAgICAgICAgICAvL3JlZHVjZXMgdGhlIGxpa2VsaWhvb2Qgb2YgdGhpcyBoYXBwZW5pbmdcblx0ICAgICAgICAgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlQnVmZmVyU291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlclNvdXJjZSA9IHRoaXMuX2NvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgX25hdGl2ZV9zdGFydCA9IGJ1ZmZlclNvdXJjZS5zdGFydDtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlclNvdXJjZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgX25hdGl2ZV9zdGFydC5jYWxsKGJ1ZmZlclNvdXJjZSwgdGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAwKTtcblx0ICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJTb3VyY2U7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSB0aGluIHdyYXBwZXIgYXJvdW5kIHRoZSBOYXRpdmUgV2ViIEF1ZGlvIEdhaW5Ob2RlLlxuXHRcdCAqICAgICAgICAgVGhlIEdhaW5Ob2RlIGlzIGEgYmFzaWMgYnVpbGRpbmcgYmxvY2sgb2YgdGhlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgQVBJIGFuZCBpcyB1c2VmdWwgZm9yIHJvdXRpbmcgYXVkaW8gYW5kIGFkanVzdGluZyBnYWlucy5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSAge051bWJlcj19ICBnYWluICBUaGUgaW5pdGlhbCBnYWluIG9mIHRoZSBHYWluTm9kZVxuXHRcdCAqICBAcGFyYW0ge1RvbmUuVHlwZT19IHVuaXRzIFRoZSB1bml0cyBvZiB0aGUgZ2FpbiBwYXJhbWV0ZXIuXG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICd1bml0cydcblx0ICAgICAgICBdLCBUb25lLkdhaW4pO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIEdhaW5Ob2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5fZ2Fpbk5vZGUgPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIHBhcmFtZXRlciBvZiB0aGUgZ2FpbiBub2RlLlxuXHRcdFx0ICogIEB0eXBlIHtHYWlufVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fZ2Fpbk5vZGUuZ2Fpbixcblx0ICAgICAgICAgICAgJ3VuaXRzJzogb3B0aW9ucy51bml0cyxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5nYWluLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IG9wdGlvbnMuY29udmVydFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdnYWluJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HYWluLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuR2Fpbi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZ2Fpbic6IDEsXG5cdCAgICAgICAgJ2NvbnZlcnQnOiB0cnVlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5HYWlufSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZ2FpbicpO1xuXHQgICAgICAgIHRoaXMuZ2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5nYWluID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HYWluO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQgJiYgIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlQ29uc3RhbnRTb3VyY2UpIHtcblx0ICAgICAgICB2YXIgQ29uc3RhbnRTb3VyY2VOb2RlID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDEsIDEyOCwgY29udGV4dC5zYW1wbGVSYXRlKTtcblx0ICAgICAgICAgICAgdmFyIGFyciA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGFycltpXSA9IDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmNoYW5uZWxDb3VudCA9IDE7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmJ1ZmZlciA9IGJ1ZmZlcjtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmxvb3AgPSB0cnVlO1xuXHQgICAgICAgICAgICB2YXIgZ2Fpbk5vZGUgPSB0aGlzLl9vdXRwdXQgPSBjb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICAgICAgdGhpcy5vZmZzZXQgPSBnYWluTm9kZS5nYWluO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuY29ubmVjdChnYWluTm9kZSk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgICAgIENvbnN0YW50U291cmNlTm9kZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5zdG9wKHRpbWUpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgICAgIENvbnN0YW50U291cmNlTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0LmNvbm5lY3QuYXBwbHkodGhpcy5fb3V0cHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgICAgIENvbnN0YW50U291cmNlTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0LmRpc2Nvbm5lY3QuYXBwbHkodGhpcy5fb3V0cHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlQ29uc3RhbnRTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnRTb3VyY2VOb2RlKHRoaXMpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVDb25zdGFudFNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudFNvdXJjZU5vZGUodGhpcyk7XG5cdCAgICAgICAgfTtcblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIHNpZ25hbCBpcyBhbiBhdWRpby1yYXRlIHZhbHVlLiBUb25lLlNpZ25hbCBpcyBhIGNvcmUgY29tcG9uZW50IG9mIHRoZSBsaWJyYXJ5LlxuXHRcdCAqICAgICAgICAgIFVubGlrZSBhIG51bWJlciwgU2lnbmFscyBjYW4gYmUgc2NoZWR1bGVkIHdpdGggc2FtcGxlLWxldmVsIGFjY3VyYWN5LiBUb25lLlNpZ25hbFxuXHRcdCAqICAgICAgICAgIGhhcyBhbGwgb2YgdGhlIG1ldGhvZHMgYXZhaWxhYmxlIHRvIG5hdGl2ZSBXZWIgQXVkaW9cblx0XHQgKiAgICAgICAgICBbQXVkaW9QYXJhbV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtYXVkaW9wYXJhbS1pbnRlcmZhY2UpXG5cdFx0ICogICAgICAgICAgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGNvbnZlbmllbmNlcy4gUmVhZCBtb3JlIGFib3V0IHdvcmtpbmcgd2l0aCBzaWduYWxzXG5cdFx0ICogICAgICAgICAgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9Ub25lanMvVG9uZS5qcy93aWtpL1NpZ25hbHMpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5QYXJhbX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8QXVkaW9QYXJhbX0gW3ZhbHVlXSBJbml0aWFsIHZhbHVlIG9mIHRoZSBzaWduYWwuIElmIGFuIEF1ZGlvUGFyYW1cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBwYXNzZWQgaW4sIHRoYXQgcGFyYW1ldGVyIHdpbGwgYmUgd3JhcHBlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBjb250cm9sbGVkIGJ5IHRoZSBTaWduYWwuXG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfSBbdW5pdHM9TnVtYmVyXSB1bml0IFRoZSB1bml0cyB0aGUgc2lnbmFsIGlzIGluLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMTApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndmFsdWUnLFxuXHQgICAgICAgICAgICAndW5pdHMnXG5cdCAgICAgICAgXSwgVG9uZS5TaWduYWwpO1xuXHQgICAgICAgIFRvbmUuUGFyYW0uY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCogV2hlbiBhIHNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gYW5vdGhlciBzaWduYWwgb3IgYXVkaW8gcGFyYW0sXG5cdFx0XHQqIHRoaXMgc2lnbmFsIGJlY29tZXMgYSBwcm94eSBmb3IgaXRcblx0XHRcdCogQHR5cGUge0FycmF5fVxuXHRcdFx0KiBAcHJpdmF0ZVxuXHRcdFx0Ki9cblx0ICAgICAgICB0aGlzLl9wcm94aWVzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQqIEluZGljYXRlcyBpZiB0aGUgY29uc3RhbnQgc291cmNlIHdhcyBzdGFydGVkIG9yIG5vdFxuXHRcdFx0KiBAcHJpdmF0ZVxuXHRcdFx0KiBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGNvbnN0YW50IHNvdXJjZSBub2RlIHdoaWNoIGdlbmVyYXRlcyB0aGUgc2lnbmFsXG5cdFx0XHQgKiBAdHlwZSB7Q29uc3RhbnRTb3VyY2VOb2RlfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNvbnN0YW50U291cmNlKCk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLl9jb25zdGFudFNvdXJjZS5vZmZzZXQ7XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbm9kZSB3aGVyZSB0aGUgY29uc3RhbnQgc2lnbmFsIHZhbHVlIGlzIHNjYWxlZC5cblx0XHRcdCAqIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IHRoaXMuX2NvbnN0YW50U291cmNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG5vZGUgd2hlcmUgdGhlIHZhbHVlIGlzIHNldC5cblx0XHRcdCAqIEB0eXBlIHtUb25lLlBhcmFtfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLl9wYXJhbSA9IHRoaXMub3V0cHV0Lm9mZnNldDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNpZ25hbCwgVG9uZS5QYXJhbSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZhbHVlJzogMCxcblx0ICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVmYXVsdCxcblx0ICAgICAgICAnY29udmVydCc6IHRydWVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgV2hlbiBzaWduYWxzIGNvbm5lY3QgdG8gb3RoZXIgc2lnbmFscyBvciBBdWRpb1BhcmFtcyxcblx0XHQgKiAgdGhleSB0YWtlIG92ZXIgdGhlIG91dHB1dCB2YWx1ZSBvZiB0aGF0IHNpZ25hbCBvciBBdWRpb1BhcmFtLlxuXHRcdCAqICBGb3IgYWxsIG90aGVyIG5vZGVzLCB0aGUgYmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgYSBkZWZhdWx0IDxjb2RlPmNvbm5lY3Q8L2NvZGU+LlxuXHRcdCAqXG5cdFx0ICogIEBvdmVycmlkZVxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvUGFyYW18QXVkaW9Ob2RlfFRvbmUuU2lnbmFsfFRvbmV9IG5vZGVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW1iZXI9MF0gVGhlIG91dHB1dCBudW1iZXIgdG8gY29ubmVjdCBmcm9tLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2lucHV0TnVtYmVyPTBdIFRoZSBpbnB1dCBudW1iZXIgdG8gY29ubmVjdCB0by5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsfSB0aGlzXG5cdFx0ICogIEBtZXRob2Rcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAvL3RoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHdoZXJlIHRoaXMgbm9kZSB3aWxsIGZvcndhcmQgYXV0b21hdGlvbnNcblx0ICAgICAgICAvL3RvIGNvbm5lY3RlZCBub2RlcyB3aXRob3V0IGFueSBzaWduYWwgaWYgcG9zc2libGUuXG5cdCAgICAgICAgaWYgKHRoaXMuX2lzUGFyYW0obm9kZSkgJiYgIXRoaXMuX3NvdXJjZVN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcHJveGllcy5wdXNoKG5vZGUpO1xuXHQgICAgICAgICAgICBub2RlLm92ZXJyaWRkZW4gPSB0cnVlO1xuXHQgICAgICAgICAgICB0aGlzLl9hcHBseUF1dG9tYXRpb25zKG5vZGUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZVN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2Uuc3RhcnQoMCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGFrZXMgYSBub2RlIGFzIGFuIGFyZ3VtZW50IGFuZCByZXR1cm5zIGlmIGl0IGlzIGEgUGFyYW0gb3IgQXVkaW9QYXJhbVxuXHRcdCAqIEBwYXJhbSAgeyp9IG5vZGUgVGhlIG5vZGUgdG8gdGVzdFxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5faXNQYXJhbSA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuUGFyYW0gJiYgVG9uZS5QYXJhbSA9PT0gbm9kZS5jb25zdHJ1Y3RvciB8fCBub2RlIGluc3RhbmNlb2YgQXVkaW9QYXJhbTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBEaXNjYXJkIHRoZSBvcHRpbWl6YXRpb24gYW5kIGNvbm5lY3QgYWxsIG9mIHRoZSBwcm94aWVzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5fY29ubmVjdFByb3hpZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VTdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZS5zdGFydCgwKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fcHJveGllcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm94eSkge1xuXHQgICAgICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QuY2FsbCh0aGlzLCBwcm94eSk7XG5cdCAgICAgICAgICAgIGlmIChwcm94eS5fcHJveGllcykge1xuXHQgICAgICAgICAgICAgICAgcHJveHkuX2Nvbm5lY3RQcm94aWVzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZWQgd2hlbiBhIG5vZGUgaXMgY29ubmVjdGVkIHRvIHRoaXNcblx0XHQgKiBAcGFyYW0gIHtBdWRpb05vZGV9IGZyb21cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLl9vbkNvbm5lY3QgPSBmdW5jdGlvbiAoZnJvbSkge1xuXHQgICAgICAgIGlmICghdGhpcy5faXNQYXJhbShmcm9tKSkge1xuXHQgICAgICAgICAgICAvL2Nvbm5lY3QgYWxsIHRoZSBwcm94aWVzXG5cdCAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RQcm94aWVzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEFwcGx5IGFsbCB0aGUgY3VycmVudCBhdXRvbWF0aW9ucyB0byB0aGUgZ2l2ZW4gcGFyYW1ldGVyXG5cdFx0ICogQHBhcmFtICB7QXVkaW9QYXJhbX0gcGFyYW1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLl9hcHBseUF1dG9tYXRpb25zID0gZnVuY3Rpb24gKHBhcmFtKSB7XG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMuY29udGV4dC5jdXJyZW50VGltZTtcblx0ICAgICAgICBwYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMobm93KTtcblx0ICAgICAgICB2YXIgY3VycmVudFZhbCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUobm93KTtcblx0ICAgICAgICBwYXJhbS5zZXRWYWx1ZUF0VGltZShjdXJyZW50VmFsLCBub3cpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5mb3JFYWNoRnJvbShub3csIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBwYXJhbVtldmVudC50eXBlXShldmVudC52YWx1ZSwgZXZlbnQudGltZSwgZXZlbnQuY29uc3RhbnQpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIERpc2Nvbm5lY3QgZnJvbSB0aGUgZ2l2ZW4gbm9kZSBvciBhbGwgbm9kZXMgaWYgbm8gcGFyYW0gaXMgZ2l2ZW4uXG5cdFx0ICogQHBhcmFtICB7QXVkaW9Ob2RlfEF1ZGlvUGFyYW19IG5vZGVcblx0XHQgKiBAcmV0dXJuIHtUb25lLlNpZ25hbH0gICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Byb3hpZXMuaW5jbHVkZXMobm9kZSkpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fcHJveGllcy5pbmRleE9mKG5vZGUpO1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgfSBlbHNlIGlmICghbm9kZSkge1xuXHQgICAgICAgICAgICAvL25vIGFyZ3VtZW50LCBkaXNjb25uZWN0IGV2ZXJ5dGhpbmdcblx0ICAgICAgICAgICAgdGhpcy5fcHJveGllcyA9IFtdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNjb25uZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSBjdXJyZW50IHNpZ25hbCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lIFdoZW4gdG8gZ2V0IHRoZSBzaWduYWwgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtOdW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9wYXJhbS5nZXRWYWx1ZUF0VGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW0uZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuUGFyYW0ucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lLmNhbGwodGhpcywgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8vd3JhcCBhbGwgb2YgdGhlIGF1dG9tYXRpb24gbWV0aG9kc1xuXHQgICAgW1xuXHQgICAgICAgICdzZXRWYWx1ZUF0VGltZScsXG5cdCAgICAgICAgJ2xpbmVhclJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICAnZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZScsXG5cdCAgICAgICAgJ3NldFRhcmdldEF0VGltZSdcblx0ICAgIF0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG5cdCAgICAgICAgdmFyIHByZXZpb3VzTWV0aG9kID0gVG9uZS5TaWduYWwucHJvdG90eXBlW21ldGhvZF07XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXHQgICAgICAgICAgICBwcmV2aW91c01ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICBhcmdzWzBdID0gdGhpcy5fZnJvbVVuaXRzKGFyZ3NbMF0pO1xuXHQgICAgICAgICAgICBhcmdzWzFdID0gdGhpcy50b1NlY29uZHMoYXJnc1sxXSk7XG5cdCAgICAgICAgICAgIC8vYXBwbHkgaXQgdG8gdGhlIHByb3hpZXNcblx0ICAgICAgICAgICAgdGhpcy5fcHJveGllcy5mb3JFYWNoKGZ1bmN0aW9uIChzaWduYWwpIHtcblx0ICAgICAgICAgICAgICAgIHNpZ25hbFttZXRob2RdLmFwcGx5KHNpZ25hbCwgYXJncyk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH07XG5cdCAgICB9KTtcblx0ICAgIFtcblx0ICAgICAgICAnY2FuY2VsU2NoZWR1bGVkVmFsdWVzJyxcblx0ICAgICAgICAnY2FuY2VsQW5kSG9sZEF0VGltZSdcblx0ICAgIF0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG5cdCAgICAgICAgdmFyIHByZXZpb3VzTWV0aG9kID0gVG9uZS5TaWduYWwucHJvdG90eXBlW21ldGhvZF07XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXHQgICAgICAgICAgICBwcmV2aW91c01ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICBhcmdzWzBdID0gdGhpcy50b1NlY29uZHMoYXJnc1swXSk7XG5cdCAgICAgICAgICAgIC8vYXBwbHkgaXQgdG8gdGhlIHByb3hpZXNcblx0ICAgICAgICAgICAgdGhpcy5fcHJveGllcy5mb3JFYWNoKGZ1bmN0aW9uIChzaWduYWwpIHtcblx0ICAgICAgICAgICAgICAgIHNpZ25hbFttZXRob2RdLmFwcGx5KHNpZ25hbCwgYXJncyk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH07XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNwb3NlIGFuZCBkaXNjb25uZWN0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcHJveGllcyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2lnbmFsO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgUG93IGFwcGxpZXMgYW4gZXhwb25lbnQgdG8gdGhlIGluY29taW5nIHNpZ25hbC4gVGhlIGluY29taW5nIHNpZ25hbFxuXHRcdCAqICAgICAgICAgbXVzdCBiZSBBdWRpb1JhbmdlLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfSBleHAgVGhlIGV4cG9uZW50IHRvIGFwcGx5IHRvIHRoZSBpbmNvbWluZyBzaWduYWwsIG11c3QgYmUgYXQgbGVhc3QgMi4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBvdyA9IG5ldyBUb25lLlBvdygyKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDAuNSkuY29ubmVjdChwb3cpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIHBvdyBpcyAwLjI1LiBcblx0XHQgKi9cblx0ICAgIFRvbmUuUG93ID0gZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIGV4cG9uZW50XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V4cCA9IFRvbmUuZGVmYXVsdEFyZyhleHAsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwU2NhbGVyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcih0aGlzLl9leHBGdW5jKHRoaXMuX2V4cCksIDgxOTIpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUG93LCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHZhbHVlIG9mIHRoZSBleHBvbmVudC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Qb3cjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUG93LnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cCA9IGV4cDtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwU2NhbGVyLnNldE1hcCh0aGlzLl9leHBGdW5jKHRoaXMuX2V4cCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBmdW5jdGlvbiB3aGljaCBtYXBzIHRoZSB3YXZlc2hhcGVyXG5cdFx0ICogIEBwYXJhbSAgIHtudW1iZXJ9IGV4cFxuXHRcdCAqICBAcmV0dXJuIHtmdW5jdGlvbn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUG93LnByb3RvdHlwZS5fZXhwRnVuYyA9IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5hYnModmFsKSwgZXhwKTtcblx0ICAgICAgICB9O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG93fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBvdy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9leHBTY2FsZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2V4cFNjYWxlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUG93O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRW52ZWxvcGUgaXMgYW4gW0FEU1JdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5bnRoZXNpemVyI0FEU1JfZW52ZWxvcGUpXG5cdFx0ICogICAgICAgICAgZW52ZWxvcGUgZ2VuZXJhdG9yLiBUb25lLkVudmVsb3BlIG91dHB1dHMgYSBzaWduYWwgd2hpY2hcblx0XHQgKiAgICAgICAgICBjYW4gYmUgY29ubmVjdGVkIHRvIGFuIEF1ZGlvUGFyYW0gb3IgVG9uZS5TaWduYWwuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL2UvZWEvQURTUl9wYXJhbWV0ZXIuc3ZnXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbYXR0YWNrXSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZSB0byBnbyBmcm9tXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgMCB0byBpdCdzIG1heGltdW0gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2RlY2F5XVx0VGhlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIHRoZSBhdHRhY2sgdGhhdCBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIFx0dG8gZmFsbCB0byB0aGUgc3VzdGFpbiB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3N1c3RhaW5dXHRUaGUgcGVyY2VudCBvZiB0aGUgbWF4aW11bSB2YWx1ZSB0aGF0IHRoZSBlbnZlbG9wZSByZXN0cyBhdCB1bnRpbFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHRoZSByZWxlYXNlIGlzIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbcmVsZWFzZV1cdFRoZSBhbW91bnQgb2YgdGltZSBhZnRlciB0aGUgcmVsZWFzZSBpcyB0cmlnZ2VyZWQgaXQgdGFrZXMgdG8gcmVhY2ggMC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2FuIGFtcGxpdHVkZSBlbnZlbG9wZVxuXHRcdCAqIHZhciBnYWluTm9kZSA9IFRvbmUuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdFx0ICogdmFyIGVudiA9IG5ldyBUb25lLkVudmVsb3BlKHtcblx0XHQgKiBcdFwiYXR0YWNrXCIgOiAwLjEsXG5cdFx0ICogXHRcImRlY2F5XCIgOiAwLjIsXG5cdFx0ICogXHRcInN1c3RhaW5cIiA6IDEsXG5cdFx0ICogXHRcInJlbGVhc2VcIiA6IDAuOCxcblx0XHQgKiB9KTtcblx0XHQgKiBlbnYuY29ubmVjdChnYWluTm9kZS5nYWluKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9nZXQgYWxsIG9mIHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdkZWNheScsXG5cdCAgICAgICAgICAgICdzdXN0YWluJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVuIHRyaWdnZXJBdHRhY2sgaXMgY2FsbGVkLCB0aGUgYXR0YWNrIHRpbWUgaXMgdGhlIGFtb3VudCBvZlxuXHRcdFx0ICogIHRpbWUgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZSB0byByZWFjaCBpdCdzIG1heGltdW0gdmFsdWUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG9wdGlvbnMuYXR0YWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFmdGVyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGUsIHRoZSB2YWx1ZSB3aWxsIGZhbGxcblx0XHRcdCAqICBvdmVyIHRoZSBkdXJhdGlvbiBvZiB0aGUgZGVjYXkgdGltZSB0byBpdCdzIHN1c3RhaW4gdmFsdWUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlY2F5ID0gb3B0aW9ucy5kZWNheTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFx0VGhlIHN1c3RhaW4gdmFsdWUgaXMgdGhlIHZhbHVlXG5cdFx0XHQgKiBcdHdoaWNoIHRoZSBlbnZlbG9wZSByZXN0cyBhdCBhZnRlciB0cmlnZ2VyQXR0YWNrIGlzXG5cdFx0XHQgKiBcdGNhbGxlZCwgYnV0IGJlZm9yZSB0cmlnZ2VyUmVsZWFzZSBpcyBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc3VzdGFpbiA9IG9wdGlvbnMuc3VzdGFpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBZnRlciB0cmlnZ2VyUmVsZWFzZSBpcyBjYWxsZWQsIHRoZSBlbnZlbG9wZSdzXG5cdFx0XHQgKiAgdmFsdWUgd2lsbCBmYWxsIHRvIGl0J3MgbWltaW51bSB2YWx1ZSBvdmVyIHRoZVxuXHRcdFx0ICogIGR1cmF0aW9uIG9mIHRoZSByZWxlYXNlIHRpbWUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJlbGVhc2UgPSBvcHRpb25zLnJlbGVhc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5leHQgdGltZSB0aGUgZW52ZWxvcGUgaXMgYXQgc3RhbmRieVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gJ2xpbmVhcic7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5leHQgdGltZSB0aGUgZW52ZWxvcGUgaXMgYXQgc3RhbmRieVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9ICdleHBvbmVudGlhbCc7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2lnID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TaWduYWwoMCk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGF0dGFja0N1cnZlIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuYXR0YWNrQ3VydmUgPSBvcHRpb25zLmF0dGFja0N1cnZlO1xuXHQgICAgICAgIHRoaXMucmVsZWFzZUN1cnZlID0gb3B0aW9ucy5yZWxlYXNlQ3VydmU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FbnZlbG9wZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgJ2RlY2F5JzogMC4xLFxuXHQgICAgICAgICdzdXN0YWluJzogMC41LFxuXHQgICAgICAgICdyZWxlYXNlJzogMSxcblx0ICAgICAgICAnYXR0YWNrQ3VydmUnOiAnbGluZWFyJyxcblx0ICAgICAgICAncmVsZWFzZUN1cnZlJzogJ2V4cG9uZW50aWFsJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlYWQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGVudmVsb3BlLiBVc2VmdWwgZm9yXG5cdFx0ICogc3luY3Jvbml6aW5nIHZpc3VhbCBvdXRwdXQgdG8gdGhlIGVudmVsb3BlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkVudmVsb3BlLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBzaGFwZSBvZiB0aGUgYXR0YWNrLlxuXHRcdCAqIENhbiBiZSBhbnkgb2YgdGhlc2Ugc3RyaW5nczpcblx0XHQgKiA8dWw+XG5cdFx0ICogICA8bGk+bGluZWFyPC9saT5cblx0XHQgKiAgIDxsaT5leHBvbmVudGlhbDwvbGk+XG5cdFx0ICogICA8bGk+c2luZTwvbGk+XG5cdFx0ICogICA8bGk+Y29zaW5lPC9saT5cblx0XHQgKiAgIDxsaT5ib3VuY2U8L2xpPlxuXHRcdCAqICAgPGxpPnJpcHBsZTwvbGk+XG5cdFx0ICogICA8bGk+c3RlcDwvbGk+XG5cdFx0ICogPC91bD5cblx0XHQgKiBDYW4gYWxzbyBiZSBhbiBhcnJheSB3aGljaCBkZXNjcmliZXMgdGhlIGN1cnZlLiBWYWx1ZXNcblx0XHQgKiBpbiB0aGUgYXJyYXkgYXJlIGV2ZW5seSBzdWJkaXZpZGVkIGFuZCBsaW5lYXJseVxuXHRcdCAqIGludGVycG9sYXRlZCBvdmVyIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXR0YWNrLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd8QXJyYXl9XG5cdFx0ICogQG5hbWUgYXR0YWNrQ3VydmVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIGVudi5hdHRhY2tDdXJ2ZSA9IFwibGluZWFyXCI7XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2NhbiBhbHNvIGJlIGFuIGFycmF5XG5cdFx0ICogZW52LmF0dGFja0N1cnZlID0gWzAsIDAuMiwgMC4zLCAwLjQsIDFdXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUsICdhdHRhY2tDdXJ2ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNTdHJpbmcodGhpcy5fYXR0YWNrQ3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNrQ3VydmU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0FycmF5KHRoaXMuX2F0dGFja0N1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgLy9sb29rIHVwIHRoZSBuYW1lIGluIHRoZSBjdXJ2ZXMgYXJyYXlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHR5cGUgaW4gVG9uZS5FbnZlbG9wZS5UeXBlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuRW52ZWxvcGUuVHlwZVt0eXBlXS5JbiA9PT0gdGhpcy5fYXR0YWNrQ3VydmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgLy9vdGhlcndpc2UganVzdCByZXR1cm4gdGhlIGFycmF5XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNrQ3VydmU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIC8vY2hlY2sgaWYgaXQncyBhIHZhbGlkIHR5cGVcblx0ICAgICAgICAgICAgaWYgKFRvbmUuRW52ZWxvcGUuVHlwZS5oYXNPd25Qcm9wZXJ0eShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjdXJ2ZURlZiA9IFRvbmUuRW52ZWxvcGUuVHlwZVtjdXJ2ZV07XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChjdXJ2ZURlZikpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9IGN1cnZlRGVmLkluO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9IGN1cnZlRGVmO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNBcnJheShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gY3VydmU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuRW52ZWxvcGU6IGludmFsaWQgY3VydmU6ICcgKyBjdXJ2ZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBzaGFwZSBvZiB0aGUgcmVsZWFzZS4gU2VlIHRoZSBhdHRhY2sgY3VydmUgdHlwZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge1N0cmluZ3xBcnJheX1cblx0XHQgKiBAbmFtZSByZWxlYXNlQ3VydmVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIGVudi5yZWxlYXNlQ3VydmUgPSBcImxpbmVhclwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLCAncmVsZWFzZUN1cnZlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc1N0cmluZyh0aGlzLl9yZWxlYXNlQ3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVsZWFzZUN1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNBcnJheSh0aGlzLl9yZWxlYXNlQ3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICAvL2xvb2sgdXAgdGhlIG5hbWUgaW4gdGhlIGN1cnZlcyBhcnJheVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgdHlwZSBpbiBUb25lLkVudmVsb3BlLlR5cGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5FbnZlbG9wZS5UeXBlW3R5cGVdLk91dCA9PT0gdGhpcy5fcmVsZWFzZUN1cnZlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZSBhcnJheVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbGVhc2VDdXJ2ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY3VydmUpIHtcblx0ICAgICAgICAgICAgLy9jaGVjayBpZiBpdCdzIGEgdmFsaWQgdHlwZVxuXHQgICAgICAgICAgICBpZiAoVG9uZS5FbnZlbG9wZS5UeXBlLmhhc093blByb3BlcnR5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGN1cnZlRGVmID0gVG9uZS5FbnZlbG9wZS5UeXBlW2N1cnZlXTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGN1cnZlRGVmKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IGN1cnZlRGVmLk91dDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gY3VydmVEZWY7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0FycmF5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gY3VydmU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuRW52ZWxvcGU6IGludmFsaWQgY3VydmU6ICcgKyBjdXJ2ZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2svZGVjYXkgcG9ydGlvbiBvZiB0aGUgQURTUiBlbnZlbG9wZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBhdHRhY2sgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IG9mIHRoZSBlbnZlbG9wZSBzY2FsZXMgdGhlIHZhbGVzLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBiZXR3ZWVuIDAtMVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICAvL3RyaWdnZXIgdGhlIGF0dGFjayAwLjUgc2Vjb25kcyBmcm9tIG5vdyB3aXRoIGEgdmVsb2NpdHkgb2YgMC4yXG5cdFx0ICogIGVudi50cmlnZ2VyQXR0YWNrKFwiKzAuNVwiLCAwLjIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgb3JpZ2luYWxBdHRhY2sgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLmF0dGFjayk7XG5cdCAgICAgICAgdmFyIGF0dGFjayA9IG9yaWdpbmFsQXR0YWNrO1xuXHQgICAgICAgIHZhciBkZWNheSA9IHRoaXMudG9TZWNvbmRzKHRoaXMuZGVjYXkpO1xuXHQgICAgICAgIHZlbG9jaXR5ID0gVG9uZS5kZWZhdWx0QXJnKHZlbG9jaXR5LCAxKTtcblx0ICAgICAgICAvL2NoZWNrIGlmIGl0J3Mgbm90IGEgY29tcGxldGUgYXR0YWNrXG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA+IDApIHtcblx0ICAgICAgICAgICAgLy9zdWJ0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBmcm9tIHRoZSBhdHRhY2sgdGltZVxuXHQgICAgICAgICAgICB2YXIgYXR0YWNrUmF0ZSA9IDEgLyBhdHRhY2s7XG5cdCAgICAgICAgICAgIHZhciByZW1haW5pbmdEaXN0YW5jZSA9IDEgLSBjdXJyZW50VmFsdWU7XG5cdCAgICAgICAgICAgIC8vdGhlIGF0dGFjayBpcyBub3cgdGhlIHJlbWFpbmluZyB0aW1lXG5cdCAgICAgICAgICAgIGF0dGFjayA9IHJlbWFpbmluZ0Rpc3RhbmNlIC8gYXR0YWNrUmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hdHRhY2tcblx0ICAgICAgICBpZiAodGhpcy5fYXR0YWNrQ3VydmUgPT09ICdsaW5lYXInKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy5saW5lYXJSYW1wVG8odmVsb2NpdHksIGF0dGFjaywgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9hdHRhY2tDdXJ2ZSA9PT0gJ2V4cG9uZW50aWFsJykge1xuXHQgICAgICAgICAgICB0aGlzLl9zaWcudGFyZ2V0UmFtcFRvKHZlbG9jaXR5LCBhdHRhY2ssIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYXR0YWNrID4gMCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zaWcuY2FuY2VsQW5kSG9sZEF0VGltZSh0aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGN1cnZlID0gdGhpcy5fYXR0YWNrQ3VydmU7XG5cdCAgICAgICAgICAgIC8vdGFrZSBvbmx5IGEgcG9ydGlvbiBvZiB0aGUgY3VydmVcblx0ICAgICAgICAgICAgaWYgKGF0dGFjayA8IG9yaWdpbmFsQXR0YWNrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgcGVyY2VudENvbXBsZXRlID0gMSAtIGF0dGFjayAvIG9yaWdpbmFsQXR0YWNrO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNsaWNlSW5kZXggPSBNYXRoLmZsb29yKHBlcmNlbnRDb21wbGV0ZSAqIHRoaXMuX2F0dGFja0N1cnZlLmxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICBjdXJ2ZSA9IHRoaXMuX2F0dGFja0N1cnZlLnNsaWNlKHNsaWNlSW5kZXgpO1xuXHQgICAgICAgICAgICAgICAgLy90aGUgZmlyc3QgaW5kZXggaXMgdGhlIGN1cnJlbnQgdmFsdWVcblx0ICAgICAgICAgICAgICAgIGN1cnZlWzBdID0gY3VycmVudFZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy5zZXRWYWx1ZUN1cnZlQXRUaW1lKGN1cnZlLCB0aW1lLCBhdHRhY2ssIHZlbG9jaXR5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9kZWNheVxuXHQgICAgICAgIGlmIChkZWNheSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zaWcudGFyZ2V0UmFtcFRvKHZlbG9jaXR5ICogdGhpcy5zdXN0YWluLCBkZWNheSwgYXR0YWNrICsgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VycyB0aGUgcmVsZWFzZSBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vdHJpZ2dlciByZWxlYXNlIGltbWVkaWF0ZWx5XG5cdFx0ICogIGVudi50cmlnZ2VyUmVsZWFzZSgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAoY3VycmVudFZhbHVlID4gMCkge1xuXHQgICAgICAgICAgICB2YXIgcmVsZWFzZSA9IHRoaXMudG9TZWNvbmRzKHRoaXMucmVsZWFzZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9yZWxlYXNlQ3VydmUgPT09ICdsaW5lYXInKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaWcubGluZWFyUmFtcFRvKDAsIHJlbGVhc2UsIHRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3JlbGVhc2VDdXJ2ZSA9PT0gJ2V4cG9uZW50aWFsJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2lnLnRhcmdldFJhbXBUbygwLCByZWxlYXNlLCB0aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjdXJ2ZSA9IHRoaXMuX3JlbGVhc2VDdXJ2ZTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnLnNldFZhbHVlQ3VydmVBdFRpbWUoY3VydmUsIHRpbWUsIHJlbGVhc2UsIGN1cnJlbnRWYWx1ZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBUaGlzIHdpbGxcblx0XHQgKiAgcmV0dXJuIHRoZSB1bmNvbnZlcnRlZCAocmF3KSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIFRoZSBzY2hlZHVsZWQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3NpZy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdHJpZ2dlckF0dGFja1JlbGVhc2UgaXMgc2hvcnRoYW5kIGZvciB0cmlnZ2VyQXR0YWNrLCB0aGVuIHdhaXRpbmdcblx0XHQgKiAgc29tZSBkdXJhdGlvbiwgdGhlbiB0cmlnZ2VyUmVsZWFzZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBkdXJhdGlvbiBUaGUgZHVyYXRpb24gb2YgdGhlIHN1c3RhaW4uXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBhdHRhY2sgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIGVudmVsb3BlLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciB0aGUgYXR0YWNrIGFuZCB0aGVuIHRoZSByZWxlYXNlIGFmdGVyIDAuNiBzZWNvbmRzLlxuXHRcdCAqIGVudi50cmlnZ2VyQXR0YWNrUmVsZWFzZSgwLjYpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAoZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSh0aW1lICsgdGhpcy50b1NlY29uZHMoZHVyYXRpb24pKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VscyBhbGwgc2NoZWR1bGVkIGVudmVsb3BlIGNoYW5nZXMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGFmdGVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLl9zaWcuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKGFmdGVyKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQm9ycm93cyB0aGUgY29ubmVjdCBtZXRob2QgZnJvbSBUb25lLlNpZ25hbC5cblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5jb25uZWN0ID0gVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0O1xuXHQgICAgLyoqXG5cdCBcdCAqICBHZW5lcmF0ZSBzb21lIGNvbXBsZXggZW52ZWxvcGUgY3VydmVzLlxuXHQgXHQgKi9cblx0ICAgIChmdW5jdGlvbiBfY3JlYXRlQ3VydmVzKCkge1xuXHQgICAgICAgIHZhciBjdXJ2ZUxlbiA9IDEyODtcblx0ICAgICAgICB2YXIgaSwgaztcblx0ICAgICAgICAvL2Nvc2luZSBjdXJ2ZVxuXHQgICAgICAgIHZhciBjb3NpbmVDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGNvc2luZUN1cnZlW2ldID0gTWF0aC5zaW4oaSAvIChjdXJ2ZUxlbiAtIDEpICogKE1hdGguUEkgLyAyKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vcmlwcGxlIGN1cnZlXG5cdCAgICAgICAgdmFyIHJpcHBsZUN1cnZlID0gW107XG5cdCAgICAgICAgdmFyIHJpcHBsZUN1cnZlRnJlcSA9IDYuNDtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW4gLSAxOyBpKyspIHtcblx0ICAgICAgICAgICAgayA9IGkgLyAoY3VydmVMZW4gLSAxKTtcblx0ICAgICAgICAgICAgdmFyIHNpbmVXYXZlID0gTWF0aC5zaW4oayAqIChNYXRoLlBJICogMikgKiByaXBwbGVDdXJ2ZUZyZXEgLSBNYXRoLlBJIC8gMikgKyAxO1xuXHQgICAgICAgICAgICByaXBwbGVDdXJ2ZVtpXSA9IHNpbmVXYXZlIC8gMTAgKyBrICogMC44Mztcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmlwcGxlQ3VydmVbY3VydmVMZW4gLSAxXSA9IDE7XG5cdCAgICAgICAgLy9zdGFpcnMgY3VydmVcblx0ICAgICAgICB2YXIgc3RhaXJzQ3VydmUgPSBbXTtcblx0ICAgICAgICB2YXIgc3RlcHMgPSA1O1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIHN0YWlyc0N1cnZlW2ldID0gTWF0aC5jZWlsKGkgLyAoY3VydmVMZW4gLSAxKSAqIHN0ZXBzKSAvIHN0ZXBzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2luLW91dCBlYXNpbmcgY3VydmVcblx0ICAgICAgICB2YXIgc2luZUN1cnZlID0gW107XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgayA9IGkgLyAoY3VydmVMZW4gLSAxKTtcblx0ICAgICAgICAgICAgc2luZUN1cnZlW2ldID0gMC41ICogKDEgLSBNYXRoLmNvcyhNYXRoLlBJICogaykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2EgYm91bmNlIGN1cnZlXG5cdCAgICAgICAgdmFyIGJvdW5jZUN1cnZlID0gW107XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgayA9IGkgLyAoY3VydmVMZW4gLSAxKTtcblx0ICAgICAgICAgICAgdmFyIGZyZXEgPSBNYXRoLnBvdyhrLCAzKSAqIDQgKyAwLjI7XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSBNYXRoLmNvcyhmcmVxICogTWF0aC5QSSAqIDIgKiBrKTtcblx0ICAgICAgICAgICAgYm91bmNlQ3VydmVbaV0gPSBNYXRoLmFicyh2YWwgKiAoMSAtIGspKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSW52ZXJ0IGEgdmFsdWUgY3VydmUgdG8gbWFrZSBpdCB3b3JrIGZvciB0aGUgcmVsZWFzZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICBmdW5jdGlvbiBpbnZlcnRDdXJ2ZShjdXJ2ZSkge1xuXHQgICAgICAgICAgICB2YXIgb3V0ID0gbmV3IEFycmF5KGN1cnZlLmxlbmd0aCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY3VydmUubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgIG91dFtqXSA9IDEgLSBjdXJ2ZVtqXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gb3V0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICByZXZlcnNlIHRoZSBjdXJ2ZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICBmdW5jdGlvbiByZXZlcnNlQ3VydmUoY3VydmUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGN1cnZlLnNsaWNlKDApLnJldmVyc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgYXR0YWNrIGFuZCByZWxlYXNlIGN1cnZlIGFycmF5c1xuXHRcdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICBUb25lLkVudmVsb3BlLlR5cGUgPSB7XG5cdCAgICAgICAgICAgICdsaW5lYXInOiAnbGluZWFyJyxcblx0ICAgICAgICAgICAgJ2V4cG9uZW50aWFsJzogJ2V4cG9uZW50aWFsJyxcblx0ICAgICAgICAgICAgJ2JvdW5jZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBpbnZlcnRDdXJ2ZShib3VuY2VDdXJ2ZSksXG5cdCAgICAgICAgICAgICAgICBPdXQ6IGJvdW5jZUN1cnZlXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdjb3NpbmUnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogY29zaW5lQ3VydmUsXG5cdCAgICAgICAgICAgICAgICBPdXQ6IHJldmVyc2VDdXJ2ZShjb3NpbmVDdXJ2ZSlcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ3N0ZXAnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogc3RhaXJzQ3VydmUsXG5cdCAgICAgICAgICAgICAgICBPdXQ6IGludmVydEN1cnZlKHN0YWlyc0N1cnZlKVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAncmlwcGxlJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IHJpcHBsZUN1cnZlLFxuXHQgICAgICAgICAgICAgICAgT3V0OiBpbnZlcnRDdXJ2ZShyaXBwbGVDdXJ2ZSlcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ3NpbmUnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogc2luZUN1cnZlLFxuXHQgICAgICAgICAgICAgICAgT3V0OiBpbnZlcnRDdXJ2ZShzaW5lQ3VydmUpXG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9O1xuXHQgICAgfSgpKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEaXNjb25uZWN0IGFuZCBkaXNwb3NlLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NpZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2lnID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FbnZlbG9wZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkFtcGxpdHVkZUVudmVsb3BlIGlzIGEgVG9uZS5FbnZlbG9wZSBjb25uZWN0ZWQgdG8gYSBnYWluIG5vZGUuXG5cdFx0ICogICAgICAgICAgVW5saWtlIFRvbmUuRW52ZWxvcGUsIHdoaWNoIG91dHB1dHMgdGhlIGVudmVsb3BlJ3MgdmFsdWUsIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgYWNjZXB0c1xuXHRcdCAqICAgICAgICAgIGFuIGF1ZGlvIHNpZ25hbCBhcyB0aGUgaW5wdXQgYW5kIHdpbGwgYXBwbHkgdGhlIGVudmVsb3BlIHRvIHRoZSBhbXBsaXR1ZGVcblx0XHQgKiAgICAgICAgICBvZiB0aGUgc2lnbmFsLiBSZWFkIG1vcmUgYWJvdXQgQURTUiBFbnZlbG9wZXMgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3ludGhlc2l6ZXIjQURTUl9lbnZlbG9wZSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVudmVsb3BlfVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbYXR0YWNrXSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZSB0byBnbyBmcm9tXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB0byBpdCdzIG1heGltdW0gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2RlY2F5XVx0VGhlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIHRoZSBhdHRhY2sgdGhhdCBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIFx0dG8gZmFsbCB0byB0aGUgc3VzdGFpbiB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3N1c3RhaW5dXHRUaGUgcGVyY2VudCBvZiB0aGUgbWF4aW11bSB2YWx1ZSB0aGF0IHRoZSBlbnZlbG9wZSByZXN0cyBhdCB1bnRpbFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHRoZSByZWxlYXNlIGlzIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbcmVsZWFzZV1cdFRoZSBhbW91bnQgb2YgdGltZSBhZnRlciB0aGUgcmVsZWFzZSBpcyB0cmlnZ2VyZWQgaXQgdGFrZXMgdG8gcmVhY2ggMC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgYW1wRW52ID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUoe1xuXHRcdCAqIFx0XCJhdHRhY2tcIjogMC4xLFxuXHRcdCAqIFx0XCJkZWNheVwiOiAwLjIsXG5cdFx0ICogXHRcInN1c3RhaW5cIjogMS4wLFxuXHRcdCAqIFx0XCJyZWxlYXNlXCI6IDAuOFxuXHRcdCAqIH0pLnRvTWFzdGVyKCk7XG5cdFx0ICogLy9jcmVhdGUgYW4gb3NjaWxsYXRvciBhbmQgY29ubmVjdCBpdFxuXHRcdCAqIHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkuY29ubmVjdChhbXBFbnYpLnN0YXJ0KCk7XG5cdFx0ICogLy90cmlnZ2VyIHRoZSBlbnZlbG9wZXMgYXR0YWNrIGFuZCByZWxlYXNlIFwiOHRcIiBhcGFydFxuXHRcdCAqIGFtcEVudi50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIjh0XCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVudmVsb3BlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGlucHV0IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICB0aGlzLl9zaWcuY29ubmVjdCh0aGlzLm91dHB1dC5nYWluKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFtcGxpdHVkZUVudmVsb3BlLCBUb25lLkVudmVsb3BlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFtcGxpdHVkZUVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQW5hbHlzZXJOb2RlLmdldEZsb2F0VGltZURvbWFpbkRhdGEgcG9seWZpbGxcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghQW5hbHlzZXJOb2RlLnByb3RvdHlwZS5nZXRGbG9hdFRpbWVEb21haW5EYXRhKSB7XG5cdCAgICAgICAgICAgIC8vcmVmZXJlbmNlZCBodHRwczovL2dpdGh1Yi5jb20vbW9oYXlvbmFvL2dldC1mbG9hdC10aW1lLWRvbWFpbi1kYXRhXG5cdCAgICAgICAgICAgIEFuYWx5c2VyTm9kZS5wcm90b3R5cGUuZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSA9IGZ1bmN0aW9uIChhcnJheSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkubGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKHVpbnQ4KTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdWludDgubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBhcnJheVtpXSA9ICh1aW50OFtpXSAtIDEyOCkgLyAxMjg7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgV2ViIEF1ZGlvJ3Ncblx0XHQgKiAgICAgICAgICBbQW5hbHlzZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI2lkbC1kZWYtQW5hbHlzZXJOb2RlKS5cblx0XHQgKiAgICAgICAgICBFeHRyYWN0cyBGRlQgb3IgV2F2ZWZvcm0gZGF0YSBmcm9tIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmc9fSB0eXBlIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgYW5hbHlzaXMsIGVpdGhlciBcImZmdFwiLCBvciBcIndhdmVmb3JtXCIuXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgRkZULiBWYWx1ZSBtdXN0IGJlIGEgcG93ZXIgb2Zcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdzaXplJ1xuXHQgICAgICAgIF0sIFRvbmUuQW5hbHlzZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFuYWx5c2VyIG5vZGUuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7QW5hbHlzZXJOb2RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlQW5hbHlzZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzaXMgdHlwZVxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGJ1ZmZlciB0aGF0IHRoZSBGRlQgZGF0YSBpcyB3cml0dGVuIHRvXG5cdFx0XHQgKiAgQHR5cGUge1R5cGVkQXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgLy9zZXQgdGhlIHZhbHVlcyBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLnNpemUgPSBvcHRpb25zLnNpemU7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQW5hbHlzZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnc2l6ZSc6IDEwMjQsXG5cdCAgICAgICAgJ3R5cGUnOiAnZmZ0Jyxcblx0ICAgICAgICAnc21vb3RoaW5nJzogMC44XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBvc3NpYmxlIHJldHVybiB0eXBlcyBvZiBhbmFseXNlci5nZXRWYWx1ZSgpXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLlR5cGUgPSB7XG5cdCAgICAgICAgV2F2ZWZvcm06ICd3YXZlZm9ybScsXG5cdCAgICAgICAgRkZUOiAnZmZ0J1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSdW4gdGhlIGFuYWx5c2lzIGdpdmVuIHRoZSBjdXJyZW50IHNldHRpbmdzIGFuZCByZXR1cm4gdGhlXG5cdFx0ICogIHJlc3VsdCBhcyBhIFR5cGVkQXJyYXkuXG5cdFx0ICogIEByZXR1cm5zIHtUeXBlZEFycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQW5hbHlzZXIuVHlwZS5GRlQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuZ2V0RmxvYXRGcmVxdWVuY3lEYXRhKHRoaXMuX2J1ZmZlcik7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUb25lLkFuYWx5c2VyLlR5cGUuV2F2ZWZvcm0pIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSh0aGlzLl9idWZmZXIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2l6ZSBvZiBhbmFseXNpcy4gVGhpcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQW5hbHlzZXIjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIHNpemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFuYWx5c2VyLnByb3RvdHlwZSwgJ3NpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5mcmVxdWVuY3lCaW5Db3VudDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuZmZ0U2l6ZSA9IHNpemUgKiAyO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KHNpemUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBhbmFseXNpcyBmdW5jdGlvbiByZXR1cm5lZCBieSBhbmFseXNlci5nZXRWYWx1ZSgpLCBlaXRoZXIgXCJmZnRcIiBvciBcIndhdmVmb3JtXCIuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkFuYWx5c2VyI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BbmFseXNlci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgaWYgKHR5cGUgIT09IFRvbmUuQW5hbHlzZXIuVHlwZS5XYXZlZm9ybSAmJiB0eXBlICE9PSBUb25lLkFuYWx5c2VyLlR5cGUuRkZUKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLkFuYWx5c2VyOiBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICAwIHJlcHJlc2VudHMgbm8gdGltZSBhdmVyYWdpbmcgd2l0aCB0aGUgbGFzdCBhbmFseXNpcyBmcmFtZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQW5hbHlzZXIjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgc21vb3RoaW5nXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BbmFseXNlci5wcm90b3R5cGUsICdzbW9vdGhpbmcnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5zbW9vdGhpbmdUaW1lQ29uc3RhbnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuc21vb3RoaW5nVGltZUNvbnN0YW50ID0gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5BbmFseXNlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQW5hbHlzZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkNvbXByZXNzb3IgaXMgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHRoZSBXZWIgQXVkaW9cblx0XHQgKiAgICAgICAgIFtEeW5hbWljc0NvbXByZXNzb3JOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1keW5hbWljc2NvbXByZXNzb3Jub2RlLWludGVyZmFjZSkuXG5cdFx0ICogICAgICAgICBDb21wcmVzc2lvbiByZWR1Y2VzIHRoZSB2b2x1bWUgb2YgbG91ZCBzb3VuZHMgb3IgYW1wbGlmaWVzIHF1aWV0IHNvdW5kc1xuXHRcdCAqICAgICAgICAgYnkgbmFycm93aW5nIG9yIFwiY29tcHJlc3NpbmdcIiBhbiBhdWRpbyBzaWduYWwncyBkeW5hbWljIHJhbmdlLlxuXHRcdCAqICAgICAgICAgUmVhZCBtb3JlIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0R5bmFtaWNfcmFuZ2VfY29tcHJlc3Npb24pLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN8T2JqZWN0fSBbdGhyZXNob2xkXSBUaGUgdmFsdWUgYWJvdmUgd2hpY2ggdGhlIGNvbXByZXNzaW9uIHN0YXJ0cyB0byBiZSBhcHBsaWVkLlxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfSBbcmF0aW9dIFRoZSBnYWluIHJlZHVjdGlvbiByYXRpby5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgY29tcCA9IG5ldyBUb25lLkNvbXByZXNzb3IoLTMwLCAzKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29tcHJlc3NvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnLFxuXHQgICAgICAgICAgICAncmF0aW8nXG5cdCAgICAgICAgXSwgVG9uZS5Db21wcmVzc29yKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBjb21wcmVzc29yIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7RHluYW1pY3NDb21wcmVzc29yTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3NvciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdGhyZXNob2xkIHZhdWVcblx0XHRcdCAqICBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy50aHJlc2hvbGQgPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2NvbXByZXNzb3IudGhyZXNob2xkLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVjaWJlbHMsXG5cdCAgICAgICAgICAgICdjb252ZXJ0JzogZmFsc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXR0YWNrIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXR0YWNrID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fY29tcHJlc3Nvci5hdHRhY2ssIFRvbmUuVHlwZS5UaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmVsZWFzZSBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJlbGVhc2UgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9jb21wcmVzc29yLnJlbGVhc2UsIFRvbmUuVHlwZS5UaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUga25lZSBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5rbmVlID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9jb21wcmVzc29yLmtuZWUsXG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWNpYmVscyxcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBmYWxzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByYXRpbyB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yYXRpbyA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fY29tcHJlc3Nvci5yYXRpbyxcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBmYWxzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2tuZWUnLFxuXHQgICAgICAgICAgICAncmVsZWFzZScsXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAncmF0aW8nLFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuc2V0KG9wdGlvbnMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ29tcHJlc3NvciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3JhdGlvJzogMTIsXG5cdCAgICAgICAgJ3RocmVzaG9sZCc6IC0yNCxcblx0ICAgICAgICAncmVsZWFzZSc6IDAuMjUsXG5cdCAgICAgICAgJ2F0dGFjayc6IDAuMDAzLFxuXHQgICAgICAgICdrbmVlJzogMzBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ29tcHJlc3Nvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db21wcmVzc29yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAna25lZScsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJyxcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyYXRpbycsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3Nvci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3NvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5hdHRhY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYXR0YWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlbGVhc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy50aHJlc2hvbGQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJhdGlvLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJhdGlvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmtuZWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMua25lZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ29tcHJlc3Nvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEFkZCBhIHNpZ25hbCBhbmQgYSBudW1iZXIgb3IgdHdvIHNpZ25hbHMuIFdoZW4gbm8gdmFsdWUgaXNcblx0XHQgKiAgICAgICAgIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3RvciwgVG9uZS5BZGQgd2lsbCBzdW0gPGNvZGU+aW5wdXRbMF08L2NvZGU+XG5cdFx0ICogICAgICAgICBhbmQgPGNvZGU+aW5wdXRbMV08L2NvZGU+LiBJZiBhIHZhbHVlIGlzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3RvciwgXG5cdFx0ICogICAgICAgICB0aGUgaXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgaW5wdXQuXG5cdFx0ICogIFxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBUb25lLkFkZCB3aWxsIHN1bSB0aGUgZmlyc3Rcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2Vjb25kIGlucHV0cy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgyKTtcblx0XHQgKiB2YXIgYWRkID0gbmV3IFRvbmUuQWRkKDIpO1xuXHRcdCAqIHNpZ25hbC5jb25uZWN0KGFkZCk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGFkZCBlcXVhbHMgNFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaWYgY29uc3RydWN0ZWQgd2l0aCBubyBhcmd1bWVudHNcblx0XHQgKiAvL2l0IHdpbGwgYWRkIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGlucHV0c1xuXHRcdCAqIHZhciBhZGQgPSBuZXcgVG9uZS5BZGQoKTtcblx0XHQgKiB2YXIgc2lnMCA9IG5ldyBUb25lLlNpZ25hbCgzKS5jb25uZWN0KGFkZCwgMCwgMCk7XG5cdFx0ICogdmFyIHNpZzEgPSBuZXcgVG9uZS5TaWduYWwoNCkuY29ubmVjdChhZGQsIDAsIDEpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBhZGQgZXF1YWxzIDcuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5BZGQgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc3VtbWluZyBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdW0gPSB0aGlzLmlucHV0WzBdID0gdGhpcy5pbnB1dFsxXSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuU2lnbmFsKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jb25uZWN0KHRoaXMuX3N1bSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BZGQsIFRvbmUuU2lnbmFsKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQWRkfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFkZC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3N1bS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3VtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BZGQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgTXVsdGlwbHkgdHdvIGluY29taW5nIHNpZ25hbHMuIE9yLCBpZiBhIG51bWJlciBpcyBnaXZlbiBpbiB0aGUgY29uc3RydWN0b3IsXG5cdFx0ICogICAgICAgICAgbXVsdGlwbGllcyB0aGUgaW5jb21pbmcgc2lnbmFsIGJ5IHRoYXQgdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZSBDb25zdGFudCB2YWx1ZSB0byBtdWx0aXBsZS4gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCByZXR1cm4gdGhlIHByb2R1Y3Qgb2YgdGhlIGZpcnN0IGFuZCBzZWNvbmQgaW5wdXRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHRcdCAqIHZhciBzaWdBID0gbmV3IFRvbmUuU2lnbmFsKDMpO1xuXHRcdCAqIHZhciBzaWdCID0gbmV3IFRvbmUuU2lnbmFsKDQpO1xuXHRcdCAqIHNpZ0EuY29ubmVjdChtdWx0LCAwLCAwKTtcblx0XHQgKiBzaWdCLmNvbm5lY3QobXVsdCwgMCwgMSk7XG5cdFx0ICogLy9vdXRwdXQgb2YgbXVsdCBpcyAxMi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KDEwKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDIpLmNvbm5lY3QobXVsdCk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIG11bHQgaXMgMjAuXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpcGx5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGlucHV0IG5vZGUgaXMgdGhlIHNhbWUgYXMgdGhlIG91dHB1dCBub2RlXG5cdFx0XHQgKiAgaXQgaXMgYWxzbyB0aGUgR2Fpbk5vZGUgd2hpY2ggaGFuZGxlcyB0aGUgc2NhbGluZyBvZiBpbmNvbWluZyBzaWduYWxcblx0XHRcdCAqXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0ID0gdGhpcy5pbnB1dFswXSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzY2FsaW5nIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb1BhcmFtfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXRbMV0gPSB0aGlzLm91dHB1dC5nYWluO1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBUb25lLmRlZmF1bHRBcmcodmFsdWUsIDApO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTXVsdGlwbHksIFRvbmUuU2lnbmFsKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NdWx0aXBseX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aXBseS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX211bHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NdWx0aXBseTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE5lZ2F0ZSB0aGUgaW5jb21pbmcgc2lnbmFsLiBpLmUuIGFuIGlucHV0IHNpZ25hbCBvZiAxMCB3aWxsIG91dHB1dCAtMTBcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbmVnID0gbmV3IFRvbmUuTmVnYXRlKCk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgtMikuY29ubmVjdChuZWcpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIG5lZyBpcyBwb3NpdGl2ZSAyLiBcblx0XHQgKi9cblx0ICAgIFRvbmUuTmVnYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIG5lZ2F0aW9uIGlzIGRvbmUgYnkgbXVsdGlwbHlpbmcgYnkgLTFcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NdWx0aXBseSgtMSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5OZWdhdGUsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTmVnYXRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5lZ2F0ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk5lZ2F0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFN1YnRyYWN0IHRoZSBzaWduYWwgY29ubmVjdGVkIHRvIDxjb2RlPmlucHV0WzFdPC9jb2RlPiBmcm9tIHRoZSBzaWduYWwgY29ubmVjdGVkIFxuXHRcdCAqICAgICAgICAgdG8gPGNvZGU+aW5wdXRbMF08L2NvZGU+LiBJZiBhbiBhcmd1bWVudCBpcyBwcm92aWRlZCBpbiB0aGUgY29uc3RydWN0b3IsIHRoZSBcblx0XHQgKiAgICAgICAgIHNpZ25hbHMgPGNvZGU+LnZhbHVlPC9jb2RlPiB3aWxsIGJlIHN1YnRyYWN0ZWQgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWUgVGhlIHZhbHVlIHRvIHN1YnRyYWN0IGZyb20gdGhlIGluY29taW5nIHNpZ25hbC4gSWYgdGhlIHZhbHVlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgaXMgb21pdHRlZCwgaXQgd2lsbCBzdWJ0cmFjdCB0aGUgc2Vjb25kIHNpZ25hbCBmcm9tIHRoZSBmaXJzdC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ViID0gbmV3IFRvbmUuU3VidHJhY3QoMSk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCg0KS5jb25uZWN0KHN1Yik7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIHN1YiBpcyAzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ViID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0XHQgKiB2YXIgc2lnQSA9IG5ldyBUb25lLlNpZ25hbCgxMCk7XG5cdFx0ICogdmFyIHNpZ0IgPSBuZXcgVG9uZS5TaWduYWwoMi41KTtcblx0XHQgKiBzaWdBLmNvbm5lY3Qoc3ViLCAwLCAwKTtcblx0XHQgKiBzaWdCLmNvbm5lY3Qoc3ViLCAwLCAxKTtcblx0XHQgKiAvL291dHB1dCBvZiBzdWIgaXMgNy41XG5cdFx0ICovXG5cdCAgICBUb25lLlN1YnRyYWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHN1bW1pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VtID0gdGhpcy5pbnB1dFswXSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIG5lZ2F0ZSB0aGUgaW5wdXQgb2YgdGhlIHNlY29uZCBpbnB1dCBiZWZvcmUgY29ubmVjdGluZyBpdFxuXHRcdFx0ICogIHRvIHRoZSBzdW1taW5nIG5vZGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTmVnYXRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9uZWcgPSBuZXcgVG9uZS5OZWdhdGUoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgdmFsdWUgaXMgc2V0XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5TaWduYWwodmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNoYWluKHRoaXMuX25lZywgdGhpcy5fc3VtKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN1YnRyYWN0LCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNpZ25hbEJhc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3VidHJhY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9uZWcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX25lZyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3VtLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9zdW0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN1YnRyYWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQ29udmVydCBhbiBpbmNvbWluZyBzaWduYWwgYmV0d2VlbiAwLCAxIHRvIGFuIGVxdWFsIHBvd2VyIGdhaW4gc2NhbGUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGVxUG93R2FpbiA9IG5ldyBUb25lLkVxdWFsUG93ZXJHYWluKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkVxdWFsUG93ZXJHYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2VxUG93ZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKE1hdGguYWJzKHZhbCkgPCAwLjAwMSkge1xuXHQgICAgICAgICAgICAgICAgLy9zaG91bGQgb3V0cHV0IDAgd2hlbiBpbnB1dCBpcyAwXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmVxdWFsUG93ZXJTY2FsZSh2YWwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpLCA0MDk2KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVxdWFsUG93ZXJHYWluLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVxdWFsUG93ZXJHYWlufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVxdWFsUG93ZXJHYWluLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2VxUG93ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2VxUG93ZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVxdWFsUG93ZXJHYWluO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyAgVG9uZS5Dcm9zc2ZhZGUgcHJvdmlkZXMgZXF1YWwgcG93ZXIgZmFkaW5nIGJldHdlZW4gdHdvIGlucHV0cy5cblx0XHQgKiAgICAgICAgIE1vcmUgb24gY3Jvc3NmYWRpbmcgdGVjaG5pcXVlIFtoZXJlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GYWRlXyhhdWRpb19lbmdpbmVlcmluZykjQ3Jvc3NmYWRpbmcpLlxuXHRcdCAqXG5cdFx0ICogQGNvbnN0cnVjdG9yXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtpbml0aWFsRmFkZT0wLjVdXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgY3Jvc3NGYWRlID0gbmV3IFRvbmUuQ3Jvc3NGYWRlKDAuNSk7XG5cdFx0ICogLy9jb25uZWN0IGVmZmVjdCBBIHRvIGNyb3NzZmFkZSBmcm9tXG5cdFx0ICogLy9lZmZlY3Qgb3V0cHV0IDAgdG8gY3Jvc3NmYWRlIGlucHV0IDBcblx0XHQgKiBlZmZlY3RBLmNvbm5lY3QoY3Jvc3NGYWRlLCAwLCAwKTtcblx0XHQgKiAvL2Nvbm5lY3QgZWZmZWN0IEIgdG8gY3Jvc3NmYWRlIGZyb21cblx0XHQgKiAvL2VmZmVjdCBvdXRwdXQgMCB0byBjcm9zc2ZhZGUgaW5wdXQgMVxuXHRcdCAqIGVmZmVjdEIuY29ubmVjdChjcm9zc0ZhZGUsIDAsIDEpO1xuXHRcdCAqIGNyb3NzRmFkZS5mYWRlLnZhbHVlID0gMDtcblx0XHQgKiAvLyBeIG9ubHkgZWZmZWN0QSBpcyBvdXRwdXRcblx0XHQgKiBjcm9zc0ZhZGUuZmFkZS52YWx1ZSA9IDE7XG5cdFx0ICogLy8gXiBvbmx5IGVmZmVjdEIgaXMgb3V0cHV0XG5cdFx0ICogY3Jvc3NGYWRlLmZhZGUudmFsdWUgPSAwLjU7XG5cdFx0ICogLy8gXiB0aGUgdHdvIHNpZ25hbHMgYXJlIG1peGVkIGVxdWFsbHkuXG5cdFx0ICovXG5cdCAgICBUb25lLkNyb3NzRmFkZSA9IGZ1bmN0aW9uIChpbml0aWFsRmFkZSkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFswXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYSA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzFdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5iID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFx0VGhlIG1peCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzLiBBIGZhZGUgdmFsdWUgb2YgMFxuXHRcdFx0ICogXHR3aWxsIG91dHB1dCAxMDAlIDxjb2RlPmlucHV0WzBdPC9jb2RlPiBhbmRcblx0XHRcdCAqIFx0YSB2YWx1ZSBvZiAxIHdpbGwgb3V0cHV0IDEwMCUgPGNvZGU+aW5wdXRbMV08L2NvZGU+LlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGUgPSBuZXcgVG9uZS5TaWduYWwoVG9uZS5kZWZhdWx0QXJnKGluaXRpYWxGYWRlLCAwLjUpLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGVxdWFsIHBvd2VyIGdhaW4gY3Jvc3MgZmFkZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRXF1YWxQb3dlckdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQSA9IG5ldyBUb25lLkVxdWFsUG93ZXJHYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZXF1YWwgcG93ZXIgZ2FpbiBjcm9zcyBmYWRlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5FcXVhbFBvd2VyR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJCID0gbmV3IFRvbmUuRXF1YWxQb3dlckdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpbnZlcnQgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmUgPSB0aGlzLmNvbnRleHQuZ2V0Q29uc3RhbnQoMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaW52ZXJ0IHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW52ZXJ0ID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5hLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuYi5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLmZhZGUuY2hhaW4odGhpcy5fZXF1YWxQb3dlckIsIHRoaXMuYi5nYWluKTtcblx0ICAgICAgICB0aGlzLl9vbmUuY29ubmVjdCh0aGlzLl9pbnZlcnQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuZmFkZS5jb25uZWN0KHRoaXMuX2ludmVydCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5faW52ZXJ0LmNoYWluKHRoaXMuX2VxdWFsUG93ZXJBLCB0aGlzLmEuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2ZhZGUnKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNyb3NzRmFkZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNyb3NzRmFkZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Dcm9zc0ZhZGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZmFkZScpO1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJBLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJCID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZhZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmFkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faW52ZXJ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9pbnZlcnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX29uZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5hLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuYi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5iID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Dcm9zc0ZhZGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5GaWx0ZXIgaXMgYSBmaWx0ZXIgd2hpY2ggYWxsb3dzIGZvciBhbGwgb2YgdGhlIHNhbWUgbmF0aXZlIG1ldGhvZHNcblx0XHQgKiAgICAgICAgICBhcyB0aGUgW0JpcXVhZEZpbHRlck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWJpcXVhZGZpbHRlcm5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKiAgICAgICAgICBUb25lLkZpbHRlciBoYXMgdGhlIGFkZGVkIGFiaWxpdHkgdG8gc2V0IHRoZSBmaWx0ZXIgcm9sbG9mZiBhdCAtMTJcblx0XHQgKiAgICAgICAgICAoZGVmYXVsdCksIC0yNCBhbmQgLTQ4LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlci5cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmc9fSB0eXBlIFRoZSB0eXBlIG9mIGZpbHRlci5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSByb2xsb2ZmIFRoZSBkcm9wIGluIGRlY2liZWxzIHBlciBvY3RhdmUgYWZ0ZXIgdGhlIGN1dG9mZiBmcmVxdWVuY3kuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgMyBjaG9pY2VzOiAtMTIsIC0yNCwgYW5kIC00OFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgZmlsdGVyID0gbmV3IFRvbmUuRmlsdGVyKDIwMCwgXCJoaWdocGFzc1wiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRmlsdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ3JvbGxvZmYnXG5cdCAgICAgICAgXSwgVG9uZS5GaWx0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmaWx0ZXIocylcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVyLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKDAsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gb2YgdGhlIGZpbHRlciwgb25seSB1c2VkIGluIGNlcnRhaW4gZmlsdGVyIHR5cGVzXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmdhaW4gPSBuZXcgVG9uZS5TaWduYWwoe1xuXHQgICAgICAgICAgICAndmFsdWUnOiBvcHRpb25zLmdhaW4sXG5cdCAgICAgICAgICAgICdjb252ZXJ0JzogZmFsc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgUSBvciBRdWFsaXR5IG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuUSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHR5cGUgb2YgdGhlIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlIHtzdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHJvbGxvZmYgdmFsdWUgb2YgdGhlIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JvbGxvZmYgPSBvcHRpb25zLnJvbGxvZmY7XG5cdCAgICAgICAgLy9zZXQgdGhlIHJvbGxvZmY7XG5cdCAgICAgICAgdGhpcy5yb2xsb2ZmID0gb3B0aW9ucy5yb2xsb2ZmO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmlsdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogJ2xvd3Bhc3MnLFxuXHQgICAgICAgICdmcmVxdWVuY3knOiAzNTAsXG5cdCAgICAgICAgJ3JvbGxvZmYnOiAtMTIsXG5cdCAgICAgICAgJ1EnOiAxLFxuXHQgICAgICAgICdnYWluJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBmaWx0ZXIuIFR5cGVzOiBcImxvd3Bhc3NcIiwgXCJoaWdocGFzc1wiLFxuXHRcdCAqIFwiYmFuZHBhc3NcIiwgXCJsb3dzaGVsZlwiLCBcImhpZ2hzaGVsZlwiLCBcIm5vdGNoXCIsIFwiYWxscGFzc1wiLCBvciBcInBlYWtpbmdcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GaWx0ZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GaWx0ZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHZhciB0eXBlcyA9IFtcblx0ICAgICAgICAgICAgICAgICdsb3dwYXNzJyxcblx0ICAgICAgICAgICAgICAgICdoaWdocGFzcycsXG5cdCAgICAgICAgICAgICAgICAnYmFuZHBhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ2xvd3NoZWxmJyxcblx0ICAgICAgICAgICAgICAgICdoaWdoc2hlbGYnLFxuXHQgICAgICAgICAgICAgICAgJ25vdGNoJyxcblx0ICAgICAgICAgICAgICAgICdhbGxwYXNzJyxcblx0ICAgICAgICAgICAgICAgICdwZWFraW5nJ1xuXHQgICAgICAgICAgICBdO1xuXHQgICAgICAgICAgICBpZiAodHlwZXMuaW5kZXhPZih0eXBlKSA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RvbmUuRmlsdGVyOiBpbnZhbGlkIHR5cGUgJyArIHR5cGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0udHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByb2xsb2ZmIG9mIHRoZSBmaWx0ZXIgd2hpY2ggaXMgdGhlIGRyb3AgaW4gZGJcblx0XHQgKiBwZXIgb2N0YXZlLiBJbXBsZW1lbnRlZCBpbnRlcm5hbGx5IGJ5IGNhc2NhZGluZyBmaWx0ZXJzLlxuXHRcdCAqIE9ubHkgYWNjZXB0cyB0aGUgdmFsdWVzIC0xMiwgLTI0LCAtNDggYW5kIC05Ni5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GaWx0ZXIjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSByb2xsb2ZmXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GaWx0ZXIucHJvdG90eXBlLCAncm9sbG9mZicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JvbGxvZmY7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyb2xsb2ZmKSB7XG5cdCAgICAgICAgICAgIHJvbGxvZmYgPSBwYXJzZUludChyb2xsb2ZmLCAxMCk7XG5cdCAgICAgICAgICAgIHZhciBwb3NzaWJpbGl0aWVzID0gW1xuXHQgICAgICAgICAgICAgICAgLTEyLFxuXHQgICAgICAgICAgICAgICAgLTI0LFxuXHQgICAgICAgICAgICAgICAgLTQ4LFxuXHQgICAgICAgICAgICAgICAgLTk2XG5cdCAgICAgICAgICAgIF07XG5cdCAgICAgICAgICAgIHZhciBjYXNjYWRpbmdDb3VudCA9IHBvc3NpYmlsaXRpZXMuaW5kZXhPZihyb2xsb2ZmKTtcblx0ICAgICAgICAgICAgLy9jaGVjayB0aGUgcm9sbG9mZiBpcyB2YWxpZFxuXHQgICAgICAgICAgICBpZiAoY2FzY2FkaW5nQ291bnQgPT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVG9uZS5GaWx0ZXI6IHJvbGxvZmYgY2FuIG9ubHkgYmUgLTEyLCAtMjQsIC00OCBvciAtOTYnKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBjYXNjYWRpbmdDb3VudCArPSAxO1xuXHQgICAgICAgICAgICB0aGlzLl9yb2xsb2ZmID0gcm9sbG9mZjtcblx0ICAgICAgICAgICAgLy9maXJzdCBkaXNjb25uZWN0IHRoZSBmaWx0ZXJzIGFuZCB0aHJvdyB0aGVtIGF3YXlcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldID0gbnVsbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gbmV3IEFycmF5KGNhc2NhZGluZ0NvdW50KTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY291bnQgPSAwOyBjb3VudCA8IGNhc2NhZGluZ0NvdW50OyBjb3VudCsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZmlsdGVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICAgICAgZmlsdGVyLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdChmaWx0ZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QoZmlsdGVyLmRldHVuZSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLlEuY29ubmVjdChmaWx0ZXIuUSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmdhaW4uY29ubmVjdChmaWx0ZXIuZ2Fpbik7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2NvdW50XSA9IGZpbHRlcjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL2Nvbm5lY3QgdGhlbSB1cFxuXHQgICAgICAgICAgICB2YXIgY29ubmVjdGlvbkNoYWluID0gW3RoaXMuaW5wdXRdLmNvbmNhdCh0aGlzLl9maWx0ZXJzKS5jb25jYXQoW3RoaXMub3V0cHV0XSk7XG5cdCAgICAgICAgICAgIFRvbmUuY29ubmVjdFNlcmllcy5hcHBseShUb25lLCBjb25uZWN0aW9uQ2hhaW4pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GaWx0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5RLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZ2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5nYWluID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GaWx0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTcGxpdCB0aGUgaW5jb21pbmcgc2lnbmFsIGludG8gdGhyZWUgYmFuZHMgKGxvdywgbWlkLCBoaWdoKVxuXHRcdCAqICAgICAgICAgd2l0aCB0d28gY3Jvc3NvdmVyIGZyZXF1ZW5jeSBjb250cm9scy5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtsb3dGcmVxdWVuY3ldIHRoZSBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3lcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtoaWdoRnJlcXVlbmN5XSB0aGUgbWlkL2hpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRTcGxpdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSdcblx0ICAgICAgICBdLCBUb25lLk11bHRpYmFuZFNwbGl0KTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG91dHB1dHNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gbmV3IEFycmF5KDMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb3cgYmFuZC4gQWxpYXMgZm9yIDxjb2RlPm91dHB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvdyA9IHRoaXMub3V0cHV0WzBdID0gbmV3IFRvbmUuRmlsdGVyKDAsICdsb3dwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxvd2VyIGZpbHRlciBvZiB0aGUgbWlkIGJhbmRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvd01pZEZpbHRlciA9IG5ldyBUb25lLkZpbHRlcigwLCAnaGlnaHBhc3MnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIGJhbmQgb3V0cHV0LiBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzFdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gdGhpcy5vdXRwdXRbMV0gPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2xvd3Bhc3MnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgaGlnaCBiYW5kIG91dHB1dC4gQWxpYXMgZm9yIDxjb2RlPm91dHB1dFsyXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2ggPSB0aGlzLm91dHB1dFsyXSA9IG5ldyBUb25lLkZpbHRlcigwLCAnaGlnaHBhc3MnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbG93L21pZCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5sb3dGcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuaGlnaEZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHF1YWxpdHkgb2YgYWxsIHRoZSBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5RKTtcblx0ICAgICAgICB0aGlzLmlucHV0LmZhbih0aGlzLmxvdywgdGhpcy5oaWdoKTtcblx0ICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMuX2xvd01pZEZpbHRlciwgdGhpcy5taWQpO1xuXHQgICAgICAgIC8vdGhlIGZyZXF1ZW5jeSBjb250cm9sIHNpZ25hbFxuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5LmNvbm5lY3QodGhpcy5sb3cuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2xvd01pZEZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeS5jb25uZWN0KHRoaXMubWlkLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5LmNvbm5lY3QodGhpcy5oaWdoLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy90aGUgUSB2YWx1ZVxuXHQgICAgICAgIHRoaXMuUS5jb25uZWN0KHRoaXMubG93LlEpO1xuXHQgICAgICAgIHRoaXMuUS5jb25uZWN0KHRoaXMuX2xvd01pZEZpbHRlci5RKTtcblx0ICAgICAgICB0aGlzLlEuY29ubmVjdCh0aGlzLm1pZC5RKTtcblx0ICAgICAgICB0aGlzLlEuY29ubmVjdCh0aGlzLmhpZ2guUSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTXVsdGliYW5kU3BsaXQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZFNwbGl0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdsb3dGcmVxdWVuY3knOiA0MDAsXG5cdCAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiAyNTAwLFxuXHQgICAgICAgICdRJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTXVsdGliYW5kU3BsaXR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kU3BsaXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5sb3cuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubG93ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sb3dNaWRGaWx0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xvd01pZEZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2guZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5RLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk11bHRpYmFuZFNwbGl0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5FUTMgaXMgYSB0aHJlZSBiYW5kIEVRIHdpdGggY29udHJvbCBvdmVyIGxvdywgbWlkLCBhbmQgaGlnaCBnYWluIGFzXG5cdFx0ICogICAgICAgICB3ZWxsIGFzIHRoZSBsb3cgYW5kIGhpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jaWVzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc3xPYmplY3R9IFtsb3dMZXZlbF0gVGhlIGdhaW4gYXBwbGllZCB0byB0aGUgbG93cy5cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc30gW21pZExldmVsXSBUaGUgZ2FpbiBhcHBsaWVkIHRvIHRoZSBtaWQuXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFtoaWdoTGV2ZWxdIFRoZSBnYWluIGFwcGxpZWQgdG8gdGhlIGhpZ2guXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGVxID0gbmV3IFRvbmUuRVEzKC0xMCwgMywgLTIwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRVEzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnaGlnaCdcblx0ICAgICAgICBdLCBUb25lLkVRMyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3V0cHV0IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtdWx0aWJhbmQgc3BsaXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aWJhbmRTcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTXVsdGliYW5kU3BsaXQoe1xuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jzogb3B0aW9ucy5sb3dGcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jzogb3B0aW9ucy5oaWdoRnJlcXVlbmN5XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gZm9yIHRoZSBsb3dlciBzaWduYWxzXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvd0dhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMubG93LCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIGZvciB0aGUgbWlkIHNpZ25hbHNcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5taWQsIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBpbiBkZWNpYmVscyBvZiB0aGUgaGlnaCBwYXJ0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2hpZ2hHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLmhpZ2gsIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBpbiBkZWNpYmVscyBvZiB0aGUgbG93IHBhcnRcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93ID0gdGhpcy5fbG93R2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIG1pZCBwYXJ0XG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMuX21pZEdhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBoaWdoIHBhcnRcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IHRoaXMuX2hpZ2hHYWluLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIFEgdmFsdWUgZm9yIGFsbCBvZiB0aGUgZmlsdGVycy5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gdGhpcy5fbXVsdGliYW5kU3BsaXQuUTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbG93L21pZCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSB0aGlzLl9tdWx0aWJhbmRTcGxpdC5sb3dGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSB0aGlzLl9tdWx0aWJhbmRTcGxpdC5oaWdoRnJlcXVlbmN5O1xuXHQgICAgICAgIC8vdGhlIGZyZXF1ZW5jeSBiYW5kc1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0Lmxvdy5jaGFpbih0aGlzLl9sb3dHYWluLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQubWlkLmNoYWluKHRoaXMuX21pZEdhaW4sIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdC5oaWdoLmNoYWluKHRoaXMuX2hpZ2hHYWluLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRVEzLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICovXG5cdCAgICBUb25lLkVRMy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbG93JzogMCxcblx0ICAgICAgICAnbWlkJzogMCxcblx0ICAgICAgICAnaGlnaCc6IDAsXG5cdCAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IDQwMCxcblx0ICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IDI1MDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRVEzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVRMy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xvd0dhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xvd0dhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZEdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZEdhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2hpZ2hHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9oaWdoR2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3cgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2ggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRVEzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFBlcmZvcm1zIGEgbGluZWFyIHNjYWxpbmcgb24gYW4gaW5wdXQgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgIFNjYWxlcyBhIE5vcm1hbFJhbmdlIGlucHV0IHRvIGJldHdlZW5cblx0XHQgKiAgICAgICAgICBvdXRwdXRNaW4gYW5kIG91dHB1dE1heC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXRNaW49MF0gVGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAwLiBcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXRNYXg9MV1cdFRoZSBvdXRwdXQgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgMS4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNjYWxlID0gbmV3IFRvbmUuU2NhbGUoNTAsIDEwMCk7XG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgwLjUpLmNvbm5lY3Qoc2NhbGUpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBzY2FsZSBlcXVhbHMgNzVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGUgPSBmdW5jdGlvbiAob3V0cHV0TWluLCBvdXRwdXRNYXgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKiogXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3V0cHV0TWluID0gVG9uZS5kZWZhdWx0QXJnKG91dHB1dE1pbiwgMCk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX291dHB1dE1heCA9IFRvbmUuZGVmYXVsdEFyZyhvdXRwdXRNYXgsIDEpO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aXBseSgxKTtcblx0ICAgICAgICAvKiogXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FkZCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuQWRkKDApO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmNvbm5lY3QodGhpcy5fYWRkKTtcblx0ICAgICAgICB0aGlzLl9zZXRSYW5nZSgpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2NhbGUsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSBvdXRwdXQgdmFsdWUuIFRoaXMgbnVtYmVyIGlzIG91dHB1dCB3aGVuIFxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAwLiBcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGUucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0TWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dE1pbiA9IG1pbjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW4gXG5cdFx0ICogdGhlIHZhbHVlIGlucHV0IHZhbHVlIGlzIDEuIFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZS5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRNYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0TWF4ID0gbWF4O1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIHNldCB0aGUgdmFsdWVzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlLnByb3RvdHlwZS5fc2V0UmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fYWRkLnZhbHVlID0gdGhpcy5fb3V0cHV0TWluO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLnZhbHVlID0gdGhpcy5fb3V0cHV0TWF4IC0gdGhpcy5fb3V0cHV0TWluO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2NhbGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYWRkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hZGQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2NhbGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFBlcmZvcm1zIGFuIGV4cG9uZW50aWFsIHNjYWxpbmcgb24gYW4gaW5wdXQgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgIFNjYWxlcyBhIE5vcm1hbFJhbmdlIHZhbHVlIFswLDFdIGV4cG9uZW50aWFsbHlcblx0XHQgKiAgICAgICAgICB0byB0aGUgb3V0cHV0IHJhbmdlIG9mIG91dHB1dE1pbiB0byBvdXRwdXRNYXguXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWluPTBdIFRoZSBvdXRwdXQgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgMC5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXRNYXg9MV1cdFRoZSBvdXRwdXQgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgMS5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtleHBvbmVudD0yXSBUaGUgZXhwb25lbnQgd2hpY2ggc2NhbGVzIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNjYWxlRXhwID0gbmV3IFRvbmUuU2NhbGVFeHAoMCwgMTAwLCAyKTtcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDAuNSkuY29ubmVjdChzY2FsZUV4cCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlRXhwID0gZnVuY3Rpb24gKG91dHB1dE1pbiwgb3V0cHV0TWF4LCBleHBvbmVudCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSBpbnB1dCB0byB0aGUgb3V0cHV0IHJhbmdlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TY2FsZShvdXRwdXRNaW4sIG91dHB1dE1heCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Qb3d9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V4cCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5Qb3coVG9uZS5kZWZhdWx0QXJnKGV4cG9uZW50LCAyKSk7XG5cdCAgICAgICAgdGhpcy5fZXhwLmNvbm5lY3QodGhpcy5fc2NhbGUpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2NhbGVFeHAsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBJbnN0ZWFkIG9mIGludGVycG9sYXRpbmcgbGluZWFybHkgYmV0d2VlbiB0aGUgPGNvZGU+bWluPC9jb2RlPiBhbmRcblx0XHQgKiA8Y29kZT5tYXg8L2NvZGU+IHZhbHVlcywgc2V0dGluZyB0aGUgZXhwb25lbnQgd2lsbCBpbnRlcnBvbGF0ZSBiZXR3ZWVuXG5cdFx0ICogdGhlIHR3byB2YWx1ZXMgd2l0aCBhbiBleHBvbmVudGlhbCBjdXJ2ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZUV4cCNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGV4cG9uZW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUsICdleHBvbmVudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAudmFsdWUgPSBleHA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSBvdXRwdXQgdmFsdWUuIFRoaXMgbnVtYmVyIGlzIG91dHB1dCB3aGVuXG5cdFx0ICogdGhlIHZhbHVlIGlucHV0IHZhbHVlIGlzIDAuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVFeHAjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlRXhwLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5taW4gPSBtaW47XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgdmFsdWUuIFRoaXMgbnVtYmVyIGlzIG91dHB1dCB3aGVuXG5cdFx0ICogdGhlIHZhbHVlIGlucHV0IHZhbHVlIGlzIDEuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVFeHAjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlRXhwLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5tYXggPSBtYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNjYWxlRXhwfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlRXhwLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXhwLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9leHAgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNjYWxlRXhwO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgV2ViIEF1ZGlvJ3MgbmF0aXZlIFtEZWxheU5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWRlbGF5bm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gZGVsYXlUaW1lIFRoZSBkZWxheSBhcHBsaWVkIHRvIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IG1heERlbGF5IFRoZSBtYXhpbXVtIGRlbGF5IHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkRlbGF5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdtYXhEZWxheSdcblx0ICAgICAgICBdLCBUb25lLkRlbGF5KTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG1heGltdW0gZGVsYXkgdGltZSBpbml0aWFsaXplZCB3aXRoIHRoZSBub2RlXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21heERlbGF5ID0gTWF0aC5tYXgodGhpcy50b1NlY29uZHMob3B0aW9ucy5tYXhEZWxheSksIHRoaXMudG9TZWNvbmRzKG9wdGlvbnMuZGVsYXlUaW1lKSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG5hdGl2ZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZURlbGF5KHRoaXMuX21heERlbGF5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIGluY29taW5nIHNpZ25hbCBpc1xuXHRcdFx0ICogIGRlbGF5ZWQuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2RlbGF5Tm9kZS5kZWxheVRpbWUsXG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5UaW1lLFxuXHQgICAgICAgICAgICAndmFsdWUnOiBvcHRpb25zLmRlbGF5VGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdkZWxheVRpbWUnKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkRlbGF5LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRGVsYXkuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21heERlbGF5JzogMSxcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIGRlbGF5IHRpbWUuIFRoaXMgY2Fubm90IGJlIGNoYW5nZWQuIFRoZSB2YWx1ZSBpcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IuXG5cdFx0ICogQG1lbWJlcm9mIFRvbmUuRGVsYXkjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbWF4RGVsYXlcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkRlbGF5LnByb3RvdHlwZSwgJ21heERlbGF5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF4RGVsYXk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkRlbGF5fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EZWxheS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZGVsYXlUaW1lJyk7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkRlbGF5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQ29tYiBmaWx0ZXJzIGFyZSBiYXNpYyBidWlsZGluZyBibG9ja3MgZm9yIHBoeXNpY2FsIG1vZGVsaW5nLiBSZWFkIG1vcmVcblx0XHQgKiAgICAgICAgIGFib3V0IGNvbWIgZmlsdGVycyBvbiBbQ0NSTUEncyB3ZWJzaXRlXShodHRwczovL2Njcm1hLnN0YW5mb3JkLmVkdS9+am9zL3Bhc3AvRmVlZGJhY2tfQ29tYl9GaWx0ZXJzLmh0bWwpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtkZWxheVRpbWVdIFRoZSBkZWxheSB0aW1lIG9mIHRoZSBmaWx0ZXIuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2U9fSByZXNvbmFuY2UgVGhlIGFtb3VudCBvZiBmZWVkYmFjayB0aGUgZmlsdGVyIGhhcy5cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnXG5cdCAgICAgICAgXSwgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkRlbGF5KG9wdGlvbnMuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGRlbGF5IG9mIHRoZSBjb21iIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IHRoaXMuX2RlbGF5LmRlbGF5VGltZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmVlZGJhY2sgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2sgPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMucmVzb25hbmNlLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZmVlZGJhY2sgb2YgdGhlIGRlbGF5ZWQgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IHRoaXMuX2ZlZWRiYWNrLmdhaW47XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuY2hhaW4odGhpcy5fZmVlZGJhY2ssIHRoaXMuX2RlbGF5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDAuMSxcblx0ICAgICAgICAncmVzb25hbmNlJzogMC41XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZlZWRiYWNrQ29tYkZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZlZWRiYWNrQ29tYkZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgR2V0IHRoZSBjdXJyZW50IHdhdmVmb3JtIGRhdGEgb2YgdGhlIGNvbm5lY3RlZCBhdWRpbyBzb3VyY2UuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBzaXplIFRoZSBzaXplIG9mIHRoZSBGRlQuIFZhbHVlIG11c3QgYmUgYSBwb3dlciBvZlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GRlQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzaXplJ10sIFRvbmUuRkZUKTtcblx0ICAgICAgICBvcHRpb25zLnR5cGUgPSBUb25lLkFuYWx5c2VyLlR5cGUuRkZUO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFuYWx5c2VyIG5vZGUuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbmFseXNlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuQW5hbHlzZXIob3B0aW9ucyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GRlQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GRlQuZGVmYXVsdHMgPSB7ICdzaXplJzogMTAyNCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldHMgdGhlIHdhdmVmb3JtIG9mIHRoZSBhdWRpbyBzb3VyY2UuIFJldHVybnMgdGhlIHdhdmVmb3JtIGRhdGFcblx0XHQgKiAgb2YgbGVuZ3RoIFtzaXplXSgjc2l6ZSkgYXMgYSBGbG9hdDMyQXJyYXkgd2l0aCB2YWx1ZXMgYmV0d2VlbiAtMSBhbmQgMS5cblx0XHQgKiAgQHJldHVybnMge1R5cGVkQXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLkZGVC5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLmdldFZhbHVlKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzaXplIG9mIGFuYWx5c2lzLiBUaGlzIG11c3QgYmUgYSBwb3dlciBvZiB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5GRlQjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIHNpemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZGVC5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc2l6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuc2l6ZSA9IHNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkZGVH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRkZULnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GRlQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBSZXR1cm4gdGhlIGFic29sdXRlIHZhbHVlIG9mIGFuIGluY29taW5nIHNpZ25hbC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKC0xKTtcblx0XHQgKiB2YXIgYWJzID0gbmV3IFRvbmUuQWJzKCk7XG5cdFx0ICogc2lnbmFsLmNvbm5lY3QoYWJzKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgYWJzIGlzIDEuXG5cdFx0ICovXG5cdCAgICBUb25lLkFicyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MZXNzVGhhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWJzID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyh2YWwpIDwgMC4wMDEpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHZhbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LCAxMDI0KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFicywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNwb3NlIG1ldGhvZFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BYnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQWJzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2Ficy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYWJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BYnM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Gb2xsb3dlciBpcyBhICBjcnVkZSBlbnZlbG9wZSBmb2xsb3dlciB3aGljaCB3aWxsIGZvbGxvd1xuXHRcdCAqICAgICAgICAgIHRoZSBhbXBsaXR1ZGUgb2YgYW4gaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgIFRha2UgY2FyZSB3aXRoIHNtYWxsICg8IDAuMDIpIGF0dGFjayBvciBkZWNheSB2YWx1ZXNcblx0XHQgKiAgICAgICAgICBhcyBmb2xsb3dlciBoYXMgc29tZSByaXBwbGUgd2hpY2ggaXMgZXhhZ2dlcmF0ZWRcblx0XHQgKiAgICAgICAgICBhdCB0aGVzZSB2YWx1ZXMuIFJlYWQgbW9yZSBhYm91dCBlbnZlbG9wZSBmb2xsb3dlcnMgKGFsc28ga25vd25cblx0XHQgKiAgICAgICAgICBhcyBlbnZlbG9wZSBkZXRlY3RvcnMpIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VudmVsb3BlX2RldGVjdG9yKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbYXR0YWNrXSBUaGUgcmF0ZSBhdCB3aGljaCB0aGUgZm9sbG93ZXIgcmlzZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJlbGVhc2UgVGhlIHJhdGUgYXQgd2hpY2ggdGhlIGZvbG93ZXIgZmFsbHMuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZvbGxvd2VyID0gbmV3IFRvbmUuRm9sbG93ZXIoMC4yLCAwLjQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkZvbGxvd2VyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BYnN9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FicyA9IG5ldyBUb25lLkFicygpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsb3dwYXNzIGZpbHRlciB3aGljaCBzbW9vdGhzIHRoZSBpbnB1dFxuXHRcdFx0ICogIEB0eXBlIHtCaXF1YWRGaWx0ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyLnR5cGUgPSAnbG93cGFzcyc7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyLmZyZXF1ZW5jeS52YWx1ZSA9IDA7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyLlEudmFsdWUgPSAtMTAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5VmFsdWVzID0gbmV3IFRvbmUuV2F2ZVNoYXBlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWIgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheSA9IG5ldyBUb25lLkRlbGF5KHRoaXMuYmxvY2tUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGlzIGtlZXBzIGl0IGZhciBmcm9tIDAsIGV2ZW4gZm9yIHZlcnkgc21hbGwgZGlmZmVyZW5jZXNcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KDEwMDAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hdHRhY2sgPSBvcHRpb25zLmF0dGFjaztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yZWxlYXNlID0gb3B0aW9ucy5yZWxlYXNlO1xuXHQgICAgICAgIC8vdGhlIHNtb290aGVkIHNpZ25hbCB0byBnZXQgdGhlIHZhbHVlc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4odGhpcy5fYWJzLCB0aGlzLl9maWx0ZXIsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL3RoZSBkaWZmZXJlbmNlIHBhdGhcblx0ICAgICAgICB0aGlzLl9hYnMuY29ubmVjdCh0aGlzLl9zdWIsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5jaGFpbih0aGlzLl9kZWxheSwgdGhpcy5fc3ViKTtcblx0ICAgICAgICAvL3RocmVzaG9sZCB0aGUgZGlmZmVyZW5jZSBhbmQgdXNlIHRoZSB0aHJlc2ggdG8gc2V0IHRoZSBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLl9zdWIuY2hhaW4odGhpcy5fbXVsdCwgdGhpcy5fZnJlcXVlbmN5VmFsdWVzLCB0aGlzLl9maWx0ZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3NldCB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIHZhbHVlcyBpbiB0aGUgdGFibGVcblx0ICAgICAgICB0aGlzLl9zZXRBdHRhY2tSZWxlYXNlKHRoaXMuX2F0dGFjaywgdGhpcy5fcmVsZWFzZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Gb2xsb3dlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2F0dGFjayc6IDAuMDUsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc2V0cyB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIHRpbWVzIGluIHRoZSB3YXZlIHNoYXBlclxuXHRcdCAqICBAcGFyYW0gICB7VGltZX0gYXR0YWNrXG5cdFx0ICogIEBwYXJhbSAgIHtUaW1lfSByZWxlYXNlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyLnByb3RvdHlwZS5fc2V0QXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChhdHRhY2ssIHJlbGVhc2UpIHtcblx0ICAgICAgICB2YXIgbWluVGltZSA9IHRoaXMuYmxvY2tUaW1lO1xuXHQgICAgICAgIGF0dGFjayA9IFRvbmUuVGltZShhdHRhY2spLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgcmVsZWFzZSA9IFRvbmUuVGltZShyZWxlYXNlKS50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIGF0dGFjayA9IE1hdGgubWF4KGF0dGFjaywgbWluVGltZSk7XG5cdCAgICAgICAgcmVsZWFzZSA9IE1hdGgubWF4KHJlbGVhc2UsIG1pblRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcy5zZXRNYXAoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAodmFsIDw9IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBhdHRhY2s7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gcmVsZWFzZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhdHRhY2sgdGltZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Gb2xsb3dlciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBhdHRhY2tcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZvbGxvd2VyLnByb3RvdHlwZSwgJ2F0dGFjaycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGF0dGFjaykge1xuXHQgICAgICAgICAgICB0aGlzLl9hdHRhY2sgPSBhdHRhY2s7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldEF0dGFja1JlbGVhc2UodGhpcy5fYXR0YWNrLCB0aGlzLl9yZWxlYXNlKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByZWxlYXNlIHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRm9sbG93ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgcmVsZWFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLCAncmVsZWFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbGVhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyZWxlYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlbGVhc2UgPSByZWxlYXNlO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBdHRhY2tSZWxlYXNlKHRoaXMuX2F0dGFjaywgdGhpcy5fcmVsZWFzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQm9ycm93cyB0aGUgY29ubmVjdCBtZXRob2QgZnJvbSBTaWduYWwgc28gdGhhdCB0aGUgb3V0cHV0IGNhbiBiZSB1c2VkXG5cdFx0ICogIGFzIGEgVG9uZS5TaWduYWwgY29udHJvbCBzaWduYWwuXG5cdFx0ICogIEBmdW5jdGlvblxuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUuY29ubmVjdCA9IFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdDtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNwb3NlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZvbGxvd2VyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcy5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5VmFsdWVzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N1Yi5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc3ViID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hYnMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FicyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbXVsdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZvbGxvd2VyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5TY2FsZWRFbnZlbG9wIGlzIGFuIGVudmVsb3BlIHdoaWNoIGNhbiBiZSBzY2FsZWRcblx0XHQgKiAgICAgICAgIHRvIGFueSByYW5nZS4gSXQncyB1c2VmdWwgZm9yIGFwcGx5aW5nIGFuIGVudmVsb3BlXG5cdFx0ICogICAgICAgICB0byBhIGZyZXF1ZW5jeSBvciBhbnkgb3RoZXIgbm9uLU5vcm1hbFJhbmdlIHNpZ25hbFxuXHRcdCAqICAgICAgICAgcGFyYW1ldGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVudmVsb3BlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja11cdHRoZSBhdHRhY2sgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2RlY2F5XVx0dGhlIGRlY2F5IHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3N1c3RhaW5dIFx0YSBwZXJjZW50YWdlICgwLTEpIG9mIHRoZSBmdWxsIGFtcGxpdHVkZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0dGhlIHJlbGVhc2UgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBzY2FsZWRFbnYgPSBuZXcgVG9uZS5TY2FsZWRFbnZlbG9wZSh7XG5cdFx0ICogIFx0XCJhdHRhY2tcIiA6IDAuMixcblx0XHQgKiAgXHRcIm1pblwiIDogMjAwLFxuXHRcdCAqICBcdFwibWF4XCIgOiAyMDAwXG5cdFx0ICogIH0pO1xuXHRcdCAqICBzY2FsZWRFbnYuY29ubmVjdChvc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlZEVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vZ2V0IGFsbCBvZiB0aGUgZGVmYXVsdHNcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAnZGVjYXknLFxuXHQgICAgICAgICAgICAnc3VzdGFpbicsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuU2NhbGVkRW52ZWxvcGUuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSBpbmNvbWluZyBzaWduYWwgYnkgYW4gZXhwb25lbnRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Qb3d9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V4cCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuUG93KG9wdGlvbnMuZXhwb25lbnQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSBzaWduYWwgdG8gdGhlIGRlc2lyZWQgcmFuZ2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlNjYWxlKG9wdGlvbnMubWluLCBvcHRpb25zLm1heCk7XG5cdCAgICAgICAgdGhpcy5fc2lnLmNoYWluKHRoaXMuX2V4cCwgdGhpcy5fc2NhbGUpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2NhbGVkRW52ZWxvcGUsIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZWRFbnZlbG9wZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAnZXhwb25lbnQnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgbWluIG91dHB1dCB2YWx1ZS4gVGhpcyBpcyB0aGUgdmFsdWUgd2hpY2ggaXRcblx0XHQgKiBzdGFydHMgYXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVkRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5taW4gPSBtaW47XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBtYXggb3V0cHV0IHZhbHVlLiBJbiBvdGhlciB3b3JkcywgdGhlIHZhbHVlXG5cdFx0ICogYXQgdGhlIHBlYWsgb2YgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZWRFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWF4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1heCA9IG1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIGV4cG9uZW50IHZhbHVlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlZEVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgZXhwb25lbnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZSwgJ2V4cG9uZW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwLnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cC52YWx1ZSA9IGV4cDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TY2FsZWRFbnZlbG9wZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9leHAuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2V4cCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2NhbGVkRW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZyZXF1ZW5jeUVudmVsb3BlIGlzIGEgVG9uZS5TY2FsZWRFbnZlbG9wZSwgYnV0IGluc3RlYWQgb2YgYG1pbmAgYW5kIGBtYXhgXG5cdFx0ICogICAgICAgICBpdCdzIGdvdCBhIGBiYXNlRnJlcXVlbmN5YCBhbmQgYG9jdGF2ZXNgIHBhcmFtZXRlci5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbnZlbG9wZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdXHR0aGUgYXR0YWNrIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdHRoZSBkZWNheSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtzdXN0YWluXSBcdGEgcGVyY2VudGFnZSAoMC0xKSBvZiB0aGUgZnVsbCBhbXBsaXR1ZGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbcmVsZWFzZV1cdHRoZSByZWxlYXNlIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgZnJlcUVudiA9IG5ldyBUb25lLkZyZXF1ZW5jeUVudmVsb3BlKHtcblx0XHQgKiAgXHRcImF0dGFja1wiIDogMC4yLFxuXHRcdCAqICBcdFwiYmFzZUZyZXF1ZW5jeVwiIDogXCJDMlwiLFxuXHRcdCAqICBcdFwib2N0YXZlc1wiIDogNFxuXHRcdCAqICB9KTtcblx0XHQgKiAgZnJlcUVudi5jb25uZWN0KG9zY2lsbGF0b3IuZnJlcXVlbmN5KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ2RlY2F5Jyxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkVudmVsb3BlKTtcblx0ICAgICAgICBUb25lLlNjYWxlZEVudmVsb3BlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLy9tZXJnZSBpdCB3aXRoIHRoZSBmcmVxdWVuY3kgZW52ZWxvcGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFN0b3JlcyB0aGUgb2N0YXZlIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8vc2V0dXBcblx0ICAgICAgICB0aGlzLmJhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUsIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDIwMCxcblx0ICAgICAgICAnb2N0YXZlcyc6IDQsXG5cdCAgICAgICAgJ2V4cG9uZW50JzogMlxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIG1pbmludW0gb3V0cHV0IHZhbHVlLiBUaGlzIGlzIHRoZSB2YWx1ZSB3aGljaCBpdFxuXHRcdCAqIHN0YXJ0cyBhdC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqIEBuYW1lIGJhc2VGcmVxdWVuY3lcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZyZXF1ZW5jeUVudmVsb3BlLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWluID0gdGhpcy50b0ZyZXF1ZW5jeShtaW4pO1xuXHQgICAgICAgICAgICAvL2Fsc28gdXBkYXRlIHRoZSBvY3RhdmVzXG5cdCAgICAgICAgICAgIHRoaXMub2N0YXZlcyA9IHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIGJhc2VGcmVxdWVuY3kgdGhhdCB0aGVcblx0XHQgKiBlbnZlbG9wZSB3aWxsIHNjYWxlIHRvLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdGF2ZXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdGF2ZXM7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1heCA9IHRoaXMuYmFzZUZyZXF1ZW5jeSAqIE1hdGgucG93KDIsIG9jdGF2ZXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgZXhwb25lbnQgdmFsdWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBleHBvbmVudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLCAnZXhwb25lbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHAudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwLnZhbHVlID0gZXhwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZyZXF1ZW5jeUVudmVsb3BlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeUVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3lFbnZlbG9wZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBHcmVhdGVyVGhhblplcm8gb3V0cHV0cyAxIHdoZW4gdGhlIGlucHV0IGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiB6ZXJvXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGd0MCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuWmVybygpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMC4wMSkuY29ubmVjdChndDApO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBndDAgaXMgMS5cblx0XHQgKiBzaWcudmFsdWUgPSAwO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBndDAgaXMgMC5cblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW5aZXJvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmICh2YWwgPD0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sIDEyNyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIGZpcnN0IHRocmVzaG9sZGVkIHNpZ25hbCBieSBhIGxhcmdlIHZhbHVlLlxuXHRcdFx0ICogIHRoaXMgd2lsbCBoZWxwIHdpdGggdmFsdWVzIHdoaWNoIGFyZSB2ZXJ5IGNsb3NlIHRvIDBcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMTAwMDApO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9zY2FsZS5jb25uZWN0KHRoaXMuX3RocmVzaCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HcmVhdGVyVGhhblplcm8sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBtZXRob2Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR3JlYXRlclRoYW5aZXJvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyZWF0ZXJUaGFuWmVyby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGhyZXNoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HcmVhdGVyVGhhblplcm87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgT3V0cHV0IDEgaWYgdGhlIHNpZ25hbCBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlLCBvdGhlcndpc2Ugb3V0cHV0cyAwLlxuXHRcdCAqICAgICAgICAgIGNhbiBjb21wYXJlIHR3byBzaWduYWxzIG9yIGEgc2lnbmFsIGFuZCBhIG51bWJlci5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZhbHVlPTBdIHRoZSB2YWx1ZSB0byBjb21wYXJlIHRvIHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZ3QgPSBuZXcgVG9uZS5HcmVhdGVyVGhhbigyKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDQpLmNvbm5lY3QoZ3QpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIGd0IGlzIGVxdWFsIDEuXG5cdFx0ICovXG5cdCAgICBUb25lLkdyZWF0ZXJUaGFuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3VidHJhY3QgdGhlIGFtb3VudCBmcm9tIHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuU3VidHJhY3QodmFsdWUpO1xuXHQgICAgICAgIHRoaXMuaW5wdXRbMV0gPSB0aGlzLl9wYXJhbS5pbnB1dFsxXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb21wYXJlIHRoYXQgYW1vdW50IHRvIHplcm9cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HcmVhdGVyVGhhblplcm99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2d0eiA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR3JlYXRlclRoYW5aZXJvKCk7XG5cdCAgICAgICAgLy9jb25uZWN0XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uY29ubmVjdCh0aGlzLl9ndHopO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR3JlYXRlclRoYW4sIFRvbmUuU2lnbmFsKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNwb3NlIG1ldGhvZFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HcmVhdGVyVGhhbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2d0ei5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ3R6ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HcmVhdGVyVGhhbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkdhdGUgb25seSBwYXNzZXMgYSBzaWduYWwgdGhyb3VnaCB3aGVuIHRoZSBpbmNvbWluZ1xuXHRcdCAqICAgICAgICAgIHNpZ25hbCBleGNlZWRzIGEgc3BlY2lmaWVkIHRocmVzaG9sZC4gVG8gZG8gdGhpcywgR2F0ZSB1c2VzXG5cdFx0ICogICAgICAgICAgYSBUb25lLkZvbGxvd2VyIHRvIGZvbGxvdyB0aGUgYW1wbGl0dWRlIG9mIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogICAgICAgICAgQSBjb21tb24gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjbGFzcyBpcyBhIFtOb2lzZSBHYXRlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Ob2lzZV9nYXRlKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfE9iamVjdH0gW3RocmVzaG9sZF0gVGhlIHRocmVzaG9sZCBhYm92ZSB3aGljaCB0aGUgZ2F0ZSB3aWxsIG9wZW4uXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGF0dGFjayBUaGUgZm9sbG93ZXIncyBhdHRhY2sgdGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByZWxlYXNlIFRoZSBmb2xsb3dlcidzIHJlbGVhc2UgdGltZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBnYXRlID0gbmV3IFRvbmUuR2F0ZSgtMzAsIDAuMiwgMC4zKS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBtaWMgPSBuZXcgVG9uZS5Vc2VyTWVkaWEoKS5jb25uZWN0KGdhdGUpO1xuXHRcdCAqIC8vdGhlIGdhdGUgd2lsbCBvbmx5IHBhc3MgdGhyb3VnaCB0aGUgaW5jb21pbmdcblx0XHQgKiAvL3NpZ25hbCB3aGVuIGl0J3MgbG91ZGVyIHRoYW4gLTMwZGJcblx0XHQgKi9cblx0ICAgIFRvbmUuR2F0ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnLFxuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5HYXRlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Gb2xsb3dlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZm9sbG93ZXIgPSBuZXcgVG9uZS5Gb2xsb3dlcihvcHRpb25zLmF0dGFjaywgb3B0aW9ucy5yZWxlYXNlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HcmVhdGVyVGhhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ3QgPSBuZXcgVG9uZS5HcmVhdGVyVGhhbihUb25lLmRiVG9HYWluKG9wdGlvbnMudGhyZXNob2xkKSk7XG5cdCAgICAgICAgLy90aGUgY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vdGhlIGNvbnRyb2wgc2lnbmFsXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLl9ndCwgdGhpcy5fZm9sbG93ZXIsIHRoaXMub3V0cHV0LmdhaW4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR2F0ZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkdhdGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2F0dGFjayc6IDAuMSxcblx0ICAgICAgICAncmVsZWFzZSc6IDAuMSxcblx0ICAgICAgICAndGhyZXNob2xkJzogLTQwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHRocmVzaG9sZCBvZiB0aGUgZ2F0ZSBpbiBkZWNpYmVsc1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdhdGUjXG5cdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdCAqIEBuYW1lIHRocmVzaG9sZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR2F0ZS5wcm90b3R5cGUsICd0aHJlc2hvbGQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmdhaW5Ub0RiKHRoaXMuX2d0LnZhbHVlKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRocmVzaCkge1xuXHQgICAgICAgICAgICB0aGlzLl9ndC52YWx1ZSA9IFRvbmUuZGJUb0dhaW4odGhyZXNoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhdHRhY2sgc3BlZWQgb2YgdGhlIGdhdGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HYXRlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGF0dGFja1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR2F0ZS5wcm90b3R5cGUsICdhdHRhY2snLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb2xsb3dlci5hdHRhY2s7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhdHRhY2tUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvbGxvd2VyLmF0dGFjayA9IGF0dGFja1RpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcmVsZWFzZSBzcGVlZCBvZiB0aGUgZ2F0ZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdhdGUjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgcmVsZWFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR2F0ZS5wcm90b3R5cGUsICdyZWxlYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9sbG93ZXIucmVsZWFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJlbGVhc2VUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvbGxvd2VyLnJlbGVhc2UgPSByZWxlYXNlVGltZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuR2F0ZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HYXRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZm9sbG93ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2d0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mb2xsb3dlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZ3QgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBUb25lLlRpY2tTaWduYWwgZXh0ZW5kcyBUb25lLlNpZ25hbCwgYnV0IGFkZHMgdGhlIGNhcGFiaWxpdHlcblx0XHQgKiAgICAgICAgdG8gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgZWxhcHNlZCB0aWNrcy4gZXhwb25lbnRpYWwgYW5kIHRhcmdldCBjdXJ2ZXNcblx0XHQgKiAgICAgICAgYXJlIGFwcHJveGltYXRlZCB3aXRoIG11bHRpcGxlIGxpbmVhciByYW1wcy5cblx0XHQgKlxuXHRcdCAqICAgICAgICBUaGFuayB5b3UgQnJ1bm8gRGlhcywgSC4gU29maWEgUGludG8sIGFuZCBEYXZpZCBNLiBNYXRvcywgZm9yIHlvdXIgW1dBQyBwYXBlcl0oaHR0cHM6Ly9zbWFydGVjaC5nYXRlY2guZWR1L2JpdHN0cmVhbS9oYW5kbGUvMTg1My81NDU4OC9XQUMyMDE2LTQ5LnBkZilcblx0XHQgKiAgICAgICAgZGVzY3JpYmluZyBpbnRlZ3JhdGluZyB0aW1pbmcgZnVuY3Rpb25zIGZvciB0ZW1wbyBjYWxjdWxhdGlvbnMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gdmFsdWUgVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHNpZ25hbFxuXHRcdCAqIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIHZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKHZhbHVlLCAxKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMsIHtcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLlRpY2tzLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vZXh0ZW5kIHRoZSBtZW1vcnlcblx0ICAgICAgICB0aGlzLl9ldmVudHMubWVtb3J5ID0gSW5maW5pdHk7XG5cdCAgICAgICAgLy9jbGVhciB0aGUgY2xvY2sgZnJvbSB0aGUgYmVnaW5uaW5nXG5cdCAgICAgICAgdGhpcy5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoMCk7XG5cdCAgICAgICAgLy9zZXQgYW4gaW5pdGlhbCBldmVudFxuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuU2V0VmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogMCxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpY2tTaWduYWwsIFRvbmUuU2lnbmFsKTtcblx0ICAgIC8qKlxuXHRcdCAqIFdyYXBzIFRvbmUuU2lnbmFsIG1ldGhvZHMgc28gdGhhdCB0aGV5IGFsc29cblx0XHQgKiByZWNvcmQgdGhlIHRpY2tzLlxuXHRcdCAqIEBwYXJhbSAge0Z1bmN0aW9ufSBtZXRob2Rcblx0XHQgKiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgZnVuY3Rpb24gX3dyYXBTY2hlZHVsZU1ldGhvZHMobWV0aG9kKSB7XG5cdCAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgICAgIG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXNFdmVudCA9IHRoaXMuX2V2ZW50cy5wcmV2aW91c0V2ZW50KGV2ZW50KTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzVW50aWxUaW1lID0gdGhpcy5fZ2V0VGlja3NVbnRpbEV2ZW50KHByZXZpb3VzRXZlbnQsIHRpbWUpO1xuXHQgICAgICAgICAgICBldmVudC50aWNrcyA9IE1hdGgubWF4KHRpY2tzVW50aWxUaW1lLCAwKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgIH1cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVBdFRpbWUgPSBfd3JhcFNjaGVkdWxlTWV0aG9kcyhUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVBdFRpbWUpO1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSA9IF93cmFwU2NoZWR1bGVNZXRob2RzKFRvbmUuU2lnbmFsLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lIHdpdGhcblx0XHQgKiAgYSByYXRlIGhhdmluZyB0aGUgZ2l2ZW4gdGltZSBjb25zdGFudC5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB0aW1lQ29uc3RhbnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5zZXRUYXJnZXRBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUsIGNvbnN0YW50KSB7XG5cdCAgICAgICAgLy9hcHJveGltYXRlIGl0IHdpdGggbXVsdGlwbGUgbGluZWFyIHJhbXBzXG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHRpbWUpO1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICAvL3N0YXJ0IGZyb20gcHJldmlvdXNseSBzY2hlZHVsZWQgdmFsdWVcblx0ICAgICAgICB2YXIgcHJldkV2ZW50ID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICB2YXIgc2VnbWVudHMgPSBNYXRoLnJvdW5kKE1hdGgubWF4KDEgLyBjb25zdGFudCwgMSkpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IHNlZ21lbnRzOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHNlZ1RpbWUgPSBjb25zdGFudCAqIGkgKyB0aW1lO1xuXHQgICAgICAgICAgICB2YXIgcmFtcFZhbCA9IHRoaXMuX2V4cG9uZW50aWFsQXBwcm9hY2gocHJldkV2ZW50LnRpbWUsIHByZXZFdmVudC52YWx1ZSwgdmFsdWUsIGNvbnN0YW50LCBzZWdUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh0aGlzLl90b1VuaXRzKHJhbXBWYWwpLCBzZWdUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhbiBleHBvbmVudGlhbCBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgcHJldmlvdXMgc2NoZWR1bGVkIHBhcmFtZXRlciB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZW5kVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICAvL2Fwcm94aW1hdGUgaXQgd2l0aCBtdWx0aXBsZSBsaW5lYXIgcmFtcHNcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIC8vc3RhcnQgZnJvbSBwcmV2aW91c2x5IHNjaGVkdWxlZCB2YWx1ZVxuXHQgICAgICAgIHZhciBwcmV2RXZlbnQgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIGlmIChwcmV2RXZlbnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgcHJldkV2ZW50ID0ge1xuXHQgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdGhpcy5faW5pdGlhbFZhbHVlLFxuXHQgICAgICAgICAgICAgICAgJ3RpbWUnOiAwXG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYXBwcm94IDEwIHNlZ21lbnRzIHBlciBzZWNvbmRcblx0ICAgICAgICB2YXIgc2VnbWVudHMgPSBNYXRoLnJvdW5kKE1hdGgubWF4KCh0aW1lIC0gcHJldkV2ZW50LnRpbWUpICogMTAsIDEpKTtcblx0ICAgICAgICB2YXIgc2VnbWVudER1ciA9ICh0aW1lIC0gcHJldkV2ZW50LnRpbWUpIC8gc2VnbWVudHM7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gc2VnbWVudHM7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgc2VnVGltZSA9IHNlZ21lbnREdXIgKiBpICsgcHJldkV2ZW50LnRpbWU7XG5cdCAgICAgICAgICAgIHZhciByYW1wVmFsID0gdGhpcy5fZXhwb25lbnRpYWxJbnRlcnBvbGF0ZShwcmV2RXZlbnQudGltZSwgcHJldkV2ZW50LnZhbHVlLCB0aW1lLCB2YWx1ZSwgc2VnVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodGhpcy5fdG9Vbml0cyhyYW1wVmFsKSwgc2VnVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIHRpY2sgdmFsdWUgYXQgdGhlIHRpbWUuIFRha2VzIGludG8gYWNjb3VudFxuXHRcdCAqIGFueSBhdXRvbWF0aW9uIGN1cnZlcyBzY2hlZHVsZWQgb24gdGhlIHNpZ25hbC5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gZ2V0IHRoZSB0aWNrIGNvdW50IGF0XG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgVGhlIG51bWJlciBvZiB0aWNrcyB3aGljaCBoYXZlIGVsYXBzZWQgYXQgdGhlIHRpbWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gYW55IGF1dG9tYXRpb25zLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5fZ2V0VGlja3NVbnRpbEV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50LCB0aW1lKSB7XG5cdCAgICAgICAgaWYgKGV2ZW50ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGV2ZW50ID0ge1xuXHQgICAgICAgICAgICAgICAgJ3RpY2tzJzogMCxcblx0ICAgICAgICAgICAgICAgICd0aW1lJzogMFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1VuZGVmKGV2ZW50LnRpY2tzKSkge1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXNFdmVudCA9IHRoaXMuX2V2ZW50cy5wcmV2aW91c0V2ZW50KGV2ZW50KTtcblx0ICAgICAgICAgICAgZXZlbnQudGlja3MgPSB0aGlzLl9nZXRUaWNrc1VudGlsRXZlbnQocHJldmlvdXNFdmVudCwgZXZlbnQudGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciB2YWwwID0gdGhpcy5nZXRWYWx1ZUF0VGltZShldmVudC50aW1lKTtcblx0ICAgICAgICB2YXIgdmFsMSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgLy9pZiBpdCdzIHJpZ2h0IG9uIHRoZSBsaW5lLCB0YWtlIHRoZSBwcmV2aW91cyB2YWx1ZVxuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMuZ2V0KHRpbWUpLnRpbWUgPT09IHRpbWUgJiYgdGhpcy5fZXZlbnRzLmdldCh0aW1lKS50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlKSB7XG5cdCAgICAgICAgICAgIHZhbDEgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUgLSB0aGlzLnNhbXBsZVRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gMC41ICogKHRpbWUgLSBldmVudC50aW1lKSAqICh2YWwwICsgdmFsMSkgKyBldmVudC50aWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSB0aWNrIHZhbHVlIGF0IHRoZSB0aW1lLiBUYWtlcyBpbnRvIGFjY291bnRcblx0XHQgKiBhbnkgYXV0b21hdGlvbiBjdXJ2ZXMgc2NoZWR1bGVkIG9uIHRoZSBzaWduYWwuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBUaGUgdGltZSB0byBnZXQgdGhlIHRpY2sgY291bnQgYXRcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgICBUaGUgbnVtYmVyIG9mIHRpY2tzIHdoaWNoIGhhdmUgZWxhcHNlZCBhdCB0aGUgdGltZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBhbnkgYXV0b21hdGlvbnMuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmdldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5fZ2V0VGlja3NVbnRpbEV2ZW50KGV2ZW50LCB0aW1lKSwgMCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIG51bWJlciBvZiB0aWNrcyBmcm9tIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtIHtUaWNrc30gdGlja3MgVGhlIG51bWJlciBvZiB0aWNrcyB0byBjYWxjdWxhdGVcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIGdldCB0aGUgbmV4dCB0aWNrIGZyb21cblx0XHQgKiBAcmV0dXJuIHtTZWNvbmRzfSBUaGUgZHVyYXRpb24gb2YgdGhlIG51bWJlciBvZiB0aWNrcyBmcm9tIHRoZSBnaXZlbiB0aW1lIGluIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZ2V0RHVyYXRpb25PZlRpY2tzID0gZnVuY3Rpb24gKHRpY2tzLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VGljayA9IHRoaXMuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGltZU9mVGljayhjdXJyZW50VGljayArIHRpY2tzKSAtIHRpbWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2l2ZW4gYSB0aWNrLCByZXR1cm5zIHRoZSB0aW1lIHRoYXQgdGljayBvY2N1cnMgYXQuXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tcblx0XHQgKiBAcmV0dXJuIHtUaW1lfSAgICAgIFRoZSB0aW1lIHRoYXQgdGhlIHRpY2sgb2NjdXJzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5nZXRUaW1lT2ZUaWNrID0gZnVuY3Rpb24gKHRpY2spIHtcblx0ICAgICAgICB2YXIgYmVmb3JlID0gdGhpcy5fZXZlbnRzLmdldCh0aWNrLCAndGlja3MnKTtcblx0ICAgICAgICB2YXIgYWZ0ZXIgPSB0aGlzLl9ldmVudHMuZ2V0QWZ0ZXIodGljaywgJ3RpY2tzJyk7XG5cdCAgICAgICAgaWYgKGJlZm9yZSAmJiBiZWZvcmUudGlja3MgPT09IHRpY2spIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGJlZm9yZS50aW1lO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYmVmb3JlICYmIGFmdGVyICYmIGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyICYmIGJlZm9yZS52YWx1ZSAhPT0gYWZ0ZXIudmFsdWUpIHtcblx0ICAgICAgICAgICAgdmFyIHZhbDAgPSB0aGlzLmdldFZhbHVlQXRUaW1lKGJlZm9yZS50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHZhbDEgPSB0aGlzLmdldFZhbHVlQXRUaW1lKGFmdGVyLnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgZGVsdGEgPSAodmFsMSAtIHZhbDApIC8gKGFmdGVyLnRpbWUgLSBiZWZvcmUudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBrID0gTWF0aC5zcXJ0KE1hdGgucG93KHZhbDAsIDIpIC0gMiAqIGRlbHRhICogKGJlZm9yZS50aWNrcyAtIHRpY2spKTtcblx0ICAgICAgICAgICAgdmFyIHNvbDEgPSAoLXZhbDAgKyBrKSAvIGRlbHRhO1xuXHQgICAgICAgICAgICB2YXIgc29sMiA9ICgtdmFsMCAtIGspIC8gZGVsdGE7XG5cdCAgICAgICAgICAgIHJldHVybiAoc29sMSA+IDAgPyBzb2wxIDogc29sMikgKyBiZWZvcmUudGltZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZSkge1xuXHQgICAgICAgICAgICBpZiAoYmVmb3JlLnZhbHVlID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gYmVmb3JlLnRpbWUgKyAodGljayAtIGJlZm9yZS50aWNrcykgLyBiZWZvcmUudmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdGljayAvIHRoaXMuX2luaXRpYWxWYWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ29udmVydCBzb21lIG51bWJlciBvZiB0aWNrcyB0aGVpciB0aGUgZHVyYXRpb24gaW4gc2Vjb25kcyBhY2NvdW50aW5nXG5cdFx0ICogZm9yIGFueSBhdXRvbWF0aW9uIGN1cnZlcyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIG51bWJlciBvZiB0aWNrcyB0byBjb252ZXJ0IHRvIHNlY29uZHMuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gW3doZW49bm93XSAgV2hlbiBhbG9uZyB0aGUgYXV0b21hdGlvbiB0aW1lbGluZSB0byBjb252ZXJ0IHRoZSB0aWNrcy5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlRpbWV9ICAgICAgIFRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIG9mIHRoZSB0aWNrcy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUudGlja3NUb1RpbWUgPSBmdW5jdGlvbiAodGlja3MsIHdoZW4pIHtcblx0ICAgICAgICB3aGVuID0gdGhpcy50b1NlY29uZHMod2hlbik7XG5cdCAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWUodGhpcy5nZXREdXJhdGlvbk9mVGlja3ModGlja3MsIHdoZW4pKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgaW52ZXJzZSBvZiBbdGlja3NUb1RpbWVdKCN0aWNrc3RvdGltZSkuIENvbnZlcnQgYSBkdXJhdGlvbiBpblxuXHRcdCAqIHNlY29uZHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbnVtYmVyIG9mIHRpY2tzIGFjY291bnRpbmcgZm9yIGFueVxuXHRcdCAqIGF1dG9tYXRpb24gY3VydmVzIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIFRoZSB0aW1lIGludGVydmFsIHRvIGNvbnZlcnQgdG8gdGlja3MuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gW3doZW49bm93XSAgICAgV2hlbiBhbG9uZyB0aGUgYXV0b21hdGlvbiB0aW1lbGluZSB0byBjb252ZXJ0IHRoZSB0aWNrcy5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlRpY2tzfSAgICAgICAgICBUaGUgZHVyYXRpb24gaW4gdGlja3MuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnRpbWVUb1RpY2tzID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB3aGVuKSB7XG5cdCAgICAgICAgd2hlbiA9IHRoaXMudG9TZWNvbmRzKHdoZW4pO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHZhciBzdGFydFRpY2tzID0gdGhpcy5nZXRUaWNrc0F0VGltZSh3aGVuKTtcblx0ICAgICAgICB2YXIgZW5kVGlja3MgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHdoZW4gKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpY2tzKGVuZFRpY2tzIC0gc3RhcnRUaWNrcyk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGlja1NpZ25hbDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIFRpbWVsaW5lIFN0YXRlLiBQcm92aWRlcyB0aGUgbWV0aG9kczogPGNvZGU+c2V0U3RhdGVBdFRpbWUoXCJzdGF0ZVwiLCB0aW1lKTwvY29kZT5cblx0XHQgKiAgICAgICAgICBhbmQgPGNvZGU+Z2V0VmFsdWVBdFRpbWUodGltZSk8L2NvZGU+LlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWVsaW5lfVxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gaW5pdGlhbCBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgVGltZWxpbmVTdGF0ZS4gXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIDxjb2RlPnVuZGVmaW5lZDwvY29kZT5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZSA9IGZ1bmN0aW9uIChpbml0aWFsKSB7XG5cdCAgICAgICAgVG9uZS5UaW1lbGluZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBpbml0aWFsIHN0YXRlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5pdGlhbCA9IGluaXRpYWw7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaW1lbGluZVN0YXRlLCBUb25lLlRpbWVsaW5lKTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBzY2hlZHVsZWQgc3RhdGUgc2NoZWR1bGVkIGJlZm9yZSBvciBhdFxuXHRcdCAqICB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm4gIHtTdHJpbmd9ICBUaGUgbmFtZSBvZiB0aGUgc3RhdGUgaW5wdXQgaW4gc2V0U3RhdGVBdFRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLmdldCh0aW1lKTtcblx0ICAgICAgICBpZiAoZXZlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnN0YXRlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbml0aWFsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgc3RhdGUgdG8gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBzdGF0ZSBUaGUgbmFtZSBvZiB0aGUgc3RhdGUgdG8gc2V0LlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmVTdGF0ZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlLnByb3RvdHlwZS5zZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdGltZSkge1xuXHQgICAgICAgIC8vYWxsIHN0YXRlIGNoYW5nZXMgbmVlZCB0byBiZSA+PSB0aGUgcHJldmlvdXMgc3RhdGUgdGltZVxuXHQgICAgICAgIC8vVE9ETyB0aHJvdyBlcnJvciBpZiB0aW1lIDwgdGhlIHByZXZpb3VzIGV2ZW50IHRpbWVcblx0ICAgICAgICB0aGlzLmFkZCh7XG5cdCAgICAgICAgICAgICdzdGF0ZSc6IHN0YXRlLFxuXHQgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBldmVudCBiZWZvcmUgdGhlIHRpbWUgd2l0aCB0aGUgZ2l2ZW4gc3RhdGVcblx0XHQgKiAgQHBhcmFtIHtUb25lLlN0YXRlfSBzdGF0ZSBUaGUgc3RhdGUgdG8gbG9vayBmb3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gY2hlY2sgYmVmb3JlXHRcdFx0XG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBUaGUgZXZlbnQgd2l0aCB0aGUgZ2l2ZW4gc3RhdGUgYmVmb3JlIHRoZSB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUucHJvdG90eXBlLmdldExhc3RTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4OyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl90aW1lbGluZVtpXTtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXRlID09PSBzdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGV2ZW50IGFmdGVyIHRoZSB0aW1lIHdpdGggdGhlIGdpdmVuIHN0YXRlXG5cdFx0ICogIEBwYXJhbSB7VG9uZS5TdGF0ZX0gc3RhdGUgVGhlIHN0YXRlIHRvIGxvb2sgZm9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGNoZWNrIGZyb21cblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIFRoZSBldmVudCB3aXRoIHRoZSBnaXZlbiBzdGF0ZSBhZnRlciB0aGUgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlLnByb3RvdHlwZS5nZXROZXh0U3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4OyBpIDwgdGhpcy5fdGltZWxpbmUubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3RpbWVsaW5lW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXRlID09PSBzdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaW1lbGluZVN0YXRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFVzZXMgW1RvbmUuVGlja1NpZ25hbF0oVGlja1NpZ25hbCkgdG8gdHJhY2sgZWxhcHNlZCB0aWNrcyB3aXRoXG5cdFx0ICogIFx0XHRjb21wbGV4IGF1dG9tYXRpb24gY3VydmVzLlxuXHRcdCAqXG5cdFx0ICogXHRAY29uc3RydWN0b3Jcblx0ICAgICAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBpbml0aWFsIGZyZXF1ZW5jeSB0aGF0IHRoZSBzaWduYWwgdGlja3MgYXRcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmcmVxdWVuY3knXSwgVG9uZS5UaWNrU291cmNlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBzaG91bGQgYmUgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSAge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlRpY2tTaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdmcmVxdWVuY3knKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3RhdGUgdGltZWxpbmVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZVN0YXRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG5ldyBUb25lLlRpbWVsaW5lU3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG9mZnNldCB2YWx1ZXMgb2YgdGhlIHRpY2tzXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0ID0gbmV3IFRvbmUuVGltZWxpbmUoKTtcblx0ICAgICAgICAvL2FkZCB0aGUgZmlyc3QgZXZlbnRcblx0ICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKDAsIDApO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGlja1NvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5kZWZhdWx0cyA9IHsgJ2ZyZXF1ZW5jeSc6IDEgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIsIFwic3RvcHBlZFwiIG9yIFwicGF1c2VkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVGlja1NvdXJjZSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgY2xvY2sgYXQgdGhlIGdpdmVuIHRpbWUuIE9wdGlvbmFsbHkgcGFzcyBpbiBhbiBvZmZzZXRcblx0XHQgKiAgb2Ygd2hlcmUgdG8gc3RhcnQgdGhlIHRpY2sgY291bnRlciBmcm9tLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIHRpbWUgICAgVGhlIHRpbWUgdGhlIGNsb2NrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge1RpY2tzPTB9IG9mZnNldCBUaGUgbnVtYmVyIG9mIHRpY2tzIHRvIHN0YXJ0IHRoZSBzb3VyY2UgYXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuVGlja1NvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RhcnRlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChvZmZzZXQpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKG9mZnNldCwgdGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGNsb2NrLiBTdG9wcGluZyB0aGUgY2xvY2sgcmVzZXRzIHRoZSB0aWNrIGNvdW50ZXIgdG8gMC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogY2xvY2suc3RvcCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy9jYW5jZWwgdGhlIHByZXZpb3VzIHN0b3Bcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RvcHBlZCkge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQodGltZSk7XG5cdCAgICAgICAgICAgIGlmIChldmVudC50aW1lID4gMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdGlja09mZnNldC5jYW5jZWwoZXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwoZXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGF1c2UgdGhlIGNsb2NrLiBQYXVzaW5nIGRvZXMgbm90IHJlc2V0IHRoZSB0aWNrIGNvdW50ZXIuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBjbG9jayBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuUGF1c2VkLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBzdGFydC9zdG9wL3BhdXNlIGFuZCBzZXRUaWNrQXRUaW1lIGV2ZW50cyBzY2hlZHVsZWQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRvIGNsZWFyIHRoZSBldmVudHMgYWZ0ZXJcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldC5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBlbGFwc2VkIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBnZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgIFRoZSBudW1iZXIgb2YgdGlja3Ncblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZ2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgc3RvcEV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0TGFzdFN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgLy90aGlzIGV2ZW50IGFsbG93cyBmb3JFYWNoQmV0d2VlbiB0byBpdGVyYXRlIHVudGlsIHRoZSBjdXJyZW50IHRpbWVcblx0ICAgICAgICB2YXIgdG1wRXZlbnQgPSB7XG5cdCAgICAgICAgICAgIHN0YXRlOiBUb25lLlN0YXRlLlBhdXNlZCxcblx0ICAgICAgICAgICAgdGltZTogdGltZVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuYWRkKHRtcEV2ZW50KTtcblx0ICAgICAgICAvL2tlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIG9mZnNldCBldmVudFxuXHQgICAgICAgIHZhciBsYXN0U3RhdGUgPSBzdG9wRXZlbnQ7XG5cdCAgICAgICAgdmFyIGVsYXBzZWRUaWNrcyA9IDA7XG5cdCAgICAgICAgLy9pdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBldmVudHMgc2luY2UgdGhlIGxhc3Qgc3RvcFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hCZXR3ZWVuKHN0b3BFdmVudC50aW1lLCB0aW1lICsgdGhpcy5zYW1wbGVUaW1lLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICB2YXIgcGVyaW9kU3RhcnRUaW1lID0gbGFzdFN0YXRlLnRpbWU7XG5cdCAgICAgICAgICAgIC8vaWYgdGhlcmUgaXMgYW4gb2Zmc2V0IGV2ZW50IGluIHRoaXMgcGVyaW9kIHVzZSB0aGF0XG5cdCAgICAgICAgICAgIHZhciBvZmZzZXRFdmVudCA9IHRoaXMuX3RpY2tPZmZzZXQuZ2V0KGUudGltZSk7XG5cdCAgICAgICAgICAgIGlmIChvZmZzZXRFdmVudC50aW1lID49IGxhc3RTdGF0ZS50aW1lKSB7XG5cdCAgICAgICAgICAgICAgICBlbGFwc2VkVGlja3MgPSBvZmZzZXRFdmVudC50aWNrcztcblx0ICAgICAgICAgICAgICAgIHBlcmlvZFN0YXJ0VGltZSA9IG9mZnNldEV2ZW50LnRpbWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKGxhc3RTdGF0ZS5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIGUuc3RhdGUgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgZWxhcHNlZFRpY2tzICs9IHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKGUudGltZSkgLSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShwZXJpb2RTdGFydFRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGxhc3RTdGF0ZSA9IGU7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgdGVtcG9yYXJ5IGV2ZW50XG5cdCAgICAgICAgdGhpcy5fc3RhdGUucmVtb3ZlKHRtcEV2ZW50KTtcblx0ICAgICAgICAvL3JldHVybiB0aGUgdGlja3Ncblx0ICAgICAgICByZXR1cm4gZWxhcHNlZFRpY2tzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC4gU3RhcnRzIGNvdW50aW5nIGF0IDBcblx0XHQgKiAgYW5kIGluY3JlbWVudHMgYWZ0ZXIgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkLiBSZXR1cm5zIC0xIHdoZW4gc3RvcHBlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVGlja1NvdXJjZSNcblx0XHQgKiAgQG5hbWUgdGlja3Ncblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUsICd0aWNrcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGlja3NBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUodCwgdGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgc2luY2UgdGlja3M9MCB0aGF0IHRoZSBUaWNrU291cmNlIGhhcyBiZWVuIHJ1bm5pbmcuIEFjY291bnRzXG5cdFx0ICogIGZvciB0ZW1wbyBjdXJ2ZXNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVGlja1NvdXJjZSNcblx0XHQgKiAgQG5hbWUgc2Vjb25kc1xuXHRcdCAqICBAdHlwZSB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLCAnc2Vjb25kcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2Vjb25kc0F0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHMpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuZnJlcXVlbmN5LnRpbWVUb1RpY2tzKHMsIG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUodGlja3MsIG5vdyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBlbGFwc2VkIHNlY29uZHMgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGdldCB0aGUgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfSAgVGhlIG51bWJlciBvZiBlbGFwc2VkIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZ2V0U2Vjb25kc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBzdG9wRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXRMYXN0U3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICAvL3RoaXMgZXZlbnQgYWxsb3dzIGZvckVhY2hCZXR3ZWVuIHRvIGl0ZXJhdGUgdW50aWwgdGhlIGN1cnJlbnQgdGltZVxuXHQgICAgICAgIHZhciB0bXBFdmVudCA9IHtcblx0ICAgICAgICAgICAgc3RhdGU6IFRvbmUuU3RhdGUuUGF1c2VkLFxuXHQgICAgICAgICAgICB0aW1lOiB0aW1lXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5hZGQodG1wRXZlbnQpO1xuXHQgICAgICAgIC8va2VlcCB0cmFjayBvZiB0aGUgcHJldmlvdXMgb2Zmc2V0IGV2ZW50XG5cdCAgICAgICAgdmFyIGxhc3RTdGF0ZSA9IHN0b3BFdmVudDtcblx0ICAgICAgICB2YXIgZWxhcHNlZFNlY29uZHMgPSAwO1xuXHQgICAgICAgIC8vaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgZXZlbnRzIHNpbmNlIHRoZSBsYXN0IHN0b3Bcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdG9wRXZlbnQudGltZSwgdGltZSArIHRoaXMuc2FtcGxlVGltZSwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgdmFyIHBlcmlvZFN0YXJ0VGltZSA9IGxhc3RTdGF0ZS50aW1lO1xuXHQgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGFuIG9mZnNldCBldmVudCBpbiB0aGlzIHBlcmlvZCB1c2UgdGhhdFxuXHQgICAgICAgICAgICB2YXIgb2Zmc2V0RXZlbnQgPSB0aGlzLl90aWNrT2Zmc2V0LmdldChlLnRpbWUpO1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0RXZlbnQudGltZSA+PSBsYXN0U3RhdGUudGltZSkge1xuXHQgICAgICAgICAgICAgICAgZWxhcHNlZFNlY29uZHMgPSBvZmZzZXRFdmVudC5zZWNvbmRzO1xuXHQgICAgICAgICAgICAgICAgcGVyaW9kU3RhcnRUaW1lID0gb2Zmc2V0RXZlbnQudGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAobGFzdFN0YXRlLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgZS5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICBlbGFwc2VkU2Vjb25kcyArPSBlLnRpbWUgLSBwZXJpb2RTdGFydFRpbWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbGFzdFN0YXRlID0gZTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIC8vcmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZXZlbnRcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5yZW1vdmUodG1wRXZlbnQpO1xuXHQgICAgICAgIC8vcmV0dXJuIHRoZSB0aWNrc1xuXHQgICAgICAgIHJldHVybiBlbGFwc2VkU2Vjb25kcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTZXQgdGhlIGNsb2NrJ3MgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIHZhbHVlIHRvIHNldFxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gc2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VG9uZS5UaWNrU291cmNlfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnNldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpY2tzLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuYWRkKHtcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lLFxuXHQgICAgICAgICAgICAndGlja3MnOiB0aWNrcyxcblx0ICAgICAgICAgICAgJ3NlY29uZHMnOiB0aGlzLmZyZXF1ZW5jeS5nZXREdXJhdGlvbk9mVGlja3ModGlja3MsIHRpbWUpXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHNjaGVkdWxlZCBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJuICB7U3RyaW5nfSAgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIGlucHV0IGluIHNldFN0YXRlQXRUaW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zdGFydChcIiswLjFcIik7XG5cdFx0ICogc291cmNlLmdldFN0YXRlQXRUaW1lKFwiKzAuMVwiKTsgLy9yZXR1cm5zIFwic3RhcnRlZFwiXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgdGltZSBvZiB0aGUgZ2l2ZW4gdGljay4gVGhlIHNlY29uZCBhcmd1bWVudFxuXHRcdCAqIGlzIHdoZW4gdG8gdGVzdCBiZWZvcmUuIFNpbmNlIHRpY2tzIGNhbiBiZSBzZXQgKHdpdGggc2V0VGlja3NBdFRpbWUpXG5cdFx0ICogdGhlcmUgbWF5IGJlIG11bHRpcGxlIHRpbWVzIGZvciBhIGdpdmVuIHRpY2sgdmFsdWUuIFxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgdGljayBudW1iZXIuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IGJlZm9yZSBXaGVuIHRvIG1lYXN1cmUgdGhlIHRpY2sgdmFsdWUgZnJvbS4gXG5cdFx0ICogQHJldHVybiB7VGltZX0gICAgICAgVGhlIHRpbWUgb2YgdGhlIHRpY2tcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZ2V0VGltZU9mVGljayA9IGZ1bmN0aW9uICh0aWNrLCBiZWZvcmUpIHtcblx0ICAgICAgICBiZWZvcmUgPSBUb25lLmRlZmF1bHRBcmcoYmVmb3JlLCB0aGlzLm5vdygpKTtcblx0ICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fdGlja09mZnNldC5nZXQoYmVmb3JlKTtcblx0ICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQoYmVmb3JlKTtcblx0ICAgICAgICB2YXIgc3RhcnRUaW1lID0gTWF0aC5tYXgob2Zmc2V0LnRpbWUsIGV2ZW50LnRpbWUpO1xuXHQgICAgICAgIHZhciBhYnNvbHV0ZVRpY2tzID0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUoc3RhcnRUaW1lKSArIHRpY2sgLSBvZmZzZXQudGlja3M7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZnJlcXVlbmN5LmdldFRpbWVPZlRpY2soYWJzb2x1dGVUaWNrcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludm9rZSB0aGUgY2FsbGJhY2sgZXZlbnQgYXQgYWxsIHNjaGVkdWxlZCB0aWNrcyBiZXR3ZWVuIHRoZSBcblx0XHQgKiAgc3RhcnQgdGltZSBhbmQgdGhlIGVuZCB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICAgIHN0YXJ0VGltZSAgVGhlIGJlZ2lubmluZyBvZiB0aGUgc2VhcmNoIHJhbmdlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICAgIGVuZFRpbWUgICAgVGhlIGVuZCBvZiB0aGUgc2VhcmNoIHJhbmdlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPFRpbWUsVGlja3M+fSAgY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZWFjaCB0aWNrXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlRpY2tTb3VyY2V9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZm9yRWFjaFRpY2tCZXR3ZWVuID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgZW5kVGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL29ubHkgaXRlcmF0ZSB0aHJvdWdoIHRoZSBzZWN0aW9ucyB3aGVyZSBpdCBpcyBcInN0YXJ0ZWRcIlxuXHQgICAgICAgIHZhciBsYXN0U3RhdGVFdmVudCA9IHRoaXMuX3N0YXRlLmdldChzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hCZXR3ZWVuKHN0YXJ0VGltZSwgZW5kVGltZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChsYXN0U3RhdGVFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIGV2ZW50LnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZm9yRWFjaFRpY2tCZXR3ZWVuKE1hdGgubWF4KGxhc3RTdGF0ZUV2ZW50LnRpbWUsIHN0YXJ0VGltZSksIGV2ZW50LnRpbWUgLSB0aGlzLnNhbXBsZVRpbWUsIGNhbGxiYWNrKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBsYXN0U3RhdGVFdmVudCA9IGV2ZW50O1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gTWF0aC5tYXgobGFzdFN0YXRlRXZlbnQudGltZSwgc3RhcnRUaW1lKTtcblx0ICAgICAgICBpZiAobGFzdFN0YXRlRXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiB0aGlzLl9zdGF0ZSkge1xuXHQgICAgICAgICAgICAvL2ZpZ3VyZSBvdXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZnJlcXVlbmN5IHRpY2tzIGFuZCB0aGUgXG5cdCAgICAgICAgICAgIHZhciBzdGFydFRpY2tzID0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUoc3RhcnRUaW1lKTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzQXRTdGFydCA9IHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKGxhc3RTdGF0ZUV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgZGlmZiA9IHN0YXJ0VGlja3MgLSB0aWNrc0F0U3RhcnQ7XG5cdCAgICAgICAgICAgIHZhciBvZmZzZXQgPSBkaWZmICUgMTtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gMCkge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMSAtIG9mZnNldDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YXIgbmV4dFRpY2tUaW1lID0gdGhpcy5mcmVxdWVuY3kuZ2V0VGltZU9mVGljayhzdGFydFRpY2tzICsgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgdmFyIGVycm9yID0gbnVsbDtcblx0ICAgICAgICAgICAgd2hpbGUgKG5leHRUaWNrVGltZSA8IGVuZFRpbWUgJiYgdGhpcy5fc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobmV4dFRpY2tUaW1lLCBNYXRoLnJvdW5kKHRoaXMuZ2V0VGlja3NBdFRpbWUobmV4dFRpY2tUaW1lKSkpO1xuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIG5leHRUaWNrVGltZSArPSB0aGlzLmZyZXF1ZW5jeS5nZXREdXJhdGlvbk9mVGlja3MoMSwgbmV4dFRpY2tUaW1lKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoZXJyb3IpIHtcblx0ICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGlja1NvdXJjZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIHNhbXBsZSBhY2N1cmF0ZSBjbG9jayB3aGljaCBwcm92aWRlcyBhIGNhbGxiYWNrIGF0IHRoZSBnaXZlbiByYXRlLlxuXHRcdCAqICAgICAgICAgIFdoaWxlIHRoZSBjYWxsYmFjayBpcyBub3Qgc2FtcGxlLWFjY3VyYXRlIChpdCBpcyBzdGlsbCBzdXNjZXB0aWJsZSB0b1xuXHRcdCAqICAgICAgICAgIGxvb3NlIEpTIHRpbWluZyksIHRoZSB0aW1lIHBhc3NlZCBpbiBhcyB0aGUgYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrXG5cdFx0ICogICAgICAgICAgaXMgcHJlY2lzZS4gRm9yIG1vc3QgYXBwbGljYXRpb25zLCBpdCBpcyBiZXR0ZXIgdG8gdXNlIFRvbmUuVHJhbnNwb3J0XG5cdFx0ICogICAgICAgICAgaW5zdGVhZCBvZiB0aGUgQ2xvY2sgYnkgaXRzZWxmIHNpbmNlIHlvdSBjYW4gc3luY2hyb25pemUgbXVsdGlwbGUgY2FsbGJhY2tzLlxuXHRcdCAqXG5cdFx0ICogXHRAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW1pdHRlcn1cblx0XHQgKiBcdEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdpdGggdGhlIHRpbWUgb2YgdGhlIGF1ZGlvIGV2ZW50XG5cdFx0ICogXHRAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSByYXRlIG9mIHRoZSBjYWxsYmFja1xuXHRcdCAqIFx0QGV4YW1wbGVcblx0XHQgKiAvL3RoZSBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgYXBwcm94aW1hdGVseSBvbmNlIGEgc2Vjb25kXG5cdFx0ICogLy9hbmQgd2lsbCBwcmludCB0aGUgdGltZSBleGFjdGx5IG9uY2UgYSBzZWNvbmQgYXBhcnQuXG5cdFx0ICogdmFyIGNsb2NrID0gbmV3IFRvbmUuQ2xvY2soZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHRjb25zb2xlLmxvZyh0aW1lKTtcblx0XHQgKiB9LCAxKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0sIFRvbmUuQ2xvY2spO1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBpbnZva2UgYXQgdGhlIHNjaGVkdWxlZCB0aWNrLlxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbmV4dCB0aW1lIHRoZSBjYWxsYmFjayBpcyBzY2hlZHVsZWQuXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0aWNrIGNvdW50ZXJcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVGlja1NvdXJjZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZSA9IG5ldyBUb25lLlRpY2tTb3VyY2Uob3B0aW9ucy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsYXN0IHRpbWUgdGhlIGxvb3AgY2FsbGJhY2sgd2FzIGludm9rZWRcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sYXN0VXBkYXRlID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmF0ZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gc2hvdWxkIGJlIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtCUE19XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl90aWNrU291cmNlLmZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHN0YXRlIHRpbWVsaW5lXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgLy9hZGQgYW4gaW5pdGlhbCBzdGF0ZVxuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvb3AgZnVuY3Rpb24gYm91bmQgdG8gaXRzIGNvbnRleHQuXG5cdFx0XHQgKiAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gcmVtb3ZlIHRoZSBldmVudCBpbiB0aGUgZW5kLlxuXHRcdFx0ICogIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYm91bmRMb29wID0gdGhpcy5fbG9vcC5iaW5kKHRoaXMpO1xuXHQgICAgICAgIC8vYmluZCBhIGNhbGxiYWNrIHRvIHRoZSB3b3JrZXIgdGhyZWFkXG5cdCAgICAgICAgdGhpcy5jb250ZXh0Lm9uKCd0aWNrJywgdGhpcy5fYm91bmRMb29wKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNsb2NrLCBUb25lLkVtaXR0ZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdjYWxsYmFjayc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIsIFwic3RvcHBlZFwiIG9yIFwicGF1c2VkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ2xvY2sjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DbG9jay5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBjbG9jayBhdCB0aGUgZ2l2ZW4gdGltZS4gT3B0aW9uYWxseSBwYXNzIGluIGFuIG9mZnNldFxuXHRcdCAqICBvZiB3aGVyZSB0byBzdGFydCB0aGUgdGljayBjb3VudGVyIGZyb20uXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgdGltZSAgICBUaGUgdGltZSB0aGUgY2xvY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSAge1RpY2tzPX0gIG9mZnNldCAgV2hlcmUgdGhlIHRpY2sgY291bnRlciBzdGFydHMgY291bnRpbmcgZnJvbS5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ2xvY2t9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5zdGFydCh0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICBpZiAodGltZSA8IHRoaXMuX2xhc3RVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RhcnQnLCB0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBjbG9jay4gU3RvcHBpbmcgdGhlIGNsb2NrIHJlc2V0cyB0aGUgdGljayBjb3VudGVyIHRvIDAuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBjbG9jayBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2xvY2t9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBjbG9jay5zdG9wKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5zdG9wKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aW1lIDwgdGhpcy5fbGFzdFVwZGF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0b3AnLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhdXNlIHRoZSBjbG9jay4gUGF1c2luZyBkb2VzIG5vdCByZXNldCB0aGUgdGljayBjb3VudGVyLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNsb2NrfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuUGF1c2VkLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5wYXVzZSh0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9sYXN0VXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3BhdXNlJywgdGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkLiBTdGFydHMgY291bnRpbmcgYXQgMFxuXHRcdCAqICBhbmQgaW5jcmVtZW50cyBhZnRlciB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNsb2NrLnByb3RvdHlwZSwgJ3RpY2tzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMuZ2V0VGlja3NBdFRpbWUodGhpcy5ub3coKSkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLnRpY2tzID0gdDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSBzaW5jZSB0aWNrcz0wIHRoYXQgdGhlIENsb2NrIGhhcyBiZWVuIHJ1bm5pbmcuIEFjY291bnRzXG5cdFx0ICogIGZvciB0ZW1wbyBjdXJ2ZXNcblx0XHQgKiAgQHR5cGUge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DbG9jay5wcm90b3R5cGUsICdzZWNvbmRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja1NvdXJjZS5zZWNvbmRzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocykge1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLnNlY29uZHMgPSBzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZWxhcHNlZCBzZWNvbmRzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBnZXQgdGhlIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc30gIFRoZSBudW1iZXIgb2YgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5nZXRTZWNvbmRzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGlja1NvdXJjZS5nZXRTZWNvbmRzQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFNldCB0aGUgY2xvY2sncyB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgdmFsdWUgdG8gc2V0XG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBzZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLkNsb2NrfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5zZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aWNrcywgdGltZSkge1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc2V0VGlja3NBdFRpbWUodGlja3MsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgY2xvY2sncyB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIGdldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgICBUaGUgdGljayB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLmdldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGlja1NvdXJjZS5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIHRpbWUgb2YgdGhlIG5leHQgdGlja1xuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgdGljayBudW1iZXIuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gYmVmb3JlIFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuQ2xvY2t9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLm5leHRUaWNrVGltZSA9IGZ1bmN0aW9uIChvZmZzZXQsIHdoZW4pIHtcblx0ICAgICAgICB3aGVuID0gdGhpcy50b1NlY29uZHMod2hlbik7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRUaWNrID0gdGhpcy5nZXRUaWNrc0F0VGltZSh3aGVuKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGlja1NvdXJjZS5nZXRUaW1lT2ZUaWNrKGN1cnJlbnRUaWNrICsgb2Zmc2V0LCB3aGVuKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNjaGVkdWxpbmcgbG9vcC5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLl9sb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBzdGFydFRpbWUgPSB0aGlzLl9sYXN0VXBkYXRlO1xuXHQgICAgICAgIHZhciBlbmRUaW1lID0gdGhpcy5ub3coKTtcblx0ICAgICAgICB0aGlzLl9sYXN0VXBkYXRlID0gZW5kVGltZTtcblx0ICAgICAgICBpZiAoc3RhcnRUaW1lICE9PSBlbmRUaW1lKSB7XG5cdCAgICAgICAgICAgIC8vdGhlIHN0YXRlIGNoYW5nZSBldmVudHNcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RhcnRUaW1lLCBlbmRUaW1lLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICAgICAgc3dpdGNoIChlLnN0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICBjYXNlIFRvbmUuU3RhdGUuU3RhcnRlZDpcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fdGlja1NvdXJjZS5nZXRUaWNrc0F0VGltZShlLnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RhcnQnLCBlLnRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlIFRvbmUuU3RhdGUuU3RvcHBlZDpcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoZS50aW1lICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RvcCcsIGUudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSBUb25lLlN0YXRlLlBhdXNlZDpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3BhdXNlJywgZS50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAgICAgLy90aGUgdGljayBjYWxsYmFja3Ncblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5mb3JFYWNoVGlja0JldHdlZW4oc3RhcnRUaW1lLCBlbmRUaW1lLCBmdW5jdGlvbiAodGltZSwgdGlja3MpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgdGlja3MpO1xuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgc2NoZWR1bGVkIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm4gIHtTdHJpbmd9ICBUaGUgbmFtZSBvZiB0aGUgc3RhdGUgaW5wdXQgaW4gc2V0U3RhdGVBdFRpbWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogY2xvY2suc3RhcnQoXCIrMC4xXCIpO1xuXHRcdCAqIGNsb2NrLmdldFN0YXRlQXRUaW1lKFwiKzAuMVwiKTsgLy9yZXR1cm5zIFwic3RhcnRlZFwiXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5nZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2xvY2t9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0Lm9mZigndGljaycsIHRoaXMuX2JvdW5kTG9vcCk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9ib3VuZExvb3AgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrID0gSW5maW5pdHk7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DbG9jaztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFNpbWlsYXIgdG8gVG9uZS5UaW1lbGluZSwgYnV0IGFsbCBldmVudHMgcmVwcmVzZW50XG5cdFx0ICogICAgICAgICBpbnRlcnZhbHMgd2l0aCBib3RoIFwidGltZVwiIGFuZCBcImR1cmF0aW9uXCIgdGltZXMuIFRoZVxuXHRcdCAqICAgICAgICAgZXZlbnRzIGFyZSBwbGFjZWQgaW4gYSB0cmVlIHN0cnVjdHVyZSBvcHRpbWl6ZWRcblx0XHQgKiAgICAgICAgIGZvciBxdWVyeWluZyBhbiBpbnRlcnNlY3Rpb24gcG9pbnQgd2l0aCB0aGUgdGltZWxpbmVcblx0XHQgKiAgICAgICAgIGV2ZW50cy4gSW50ZXJuYWxseSB1c2VzIGFuIFtJbnRlcnZhbCBUcmVlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JbnRlcnZhbF90cmVlKVxuXHRcdCAqICAgICAgICAgdG8gcmVwcmVzZW50IHRoZSBkYXRhLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJvb3Qgbm9kZSBvZiB0aGUgaW50ZXZhbCB0cmVlXG5cdFx0XHQgKiAgQHR5cGUgIHtJbnRlcnZhbE5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Jvb3QgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEtlZXAgdHJhY2sgb2YgdGhlIGxlbmd0aCBvZiB0aGUgdGltZWxpbmUuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xlbmd0aCA9IDA7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5JbnRlcnZhbFRpbWVsaW5lKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZXZlbnQgdG8gYWRkIHRvIHRoZSB0aW1lbGluZS4gQWxsIGV2ZW50cyBtdXN0XG5cdFx0ICogIGhhdmUgYSB0aW1lIGFuZCBkdXJhdGlvbiB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R9ICBldmVudCAgVGhlIGV2ZW50IHRvIGFkZCB0byB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHJldHVybiAge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihldmVudC50aW1lKSB8fCBUb25lLmlzVW5kZWYoZXZlbnQuZHVyYXRpb24pKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5JbnRlcnZhbFRpbWVsaW5lOiBldmVudHMgbXVzdCBoYXZlIHRpbWUgYW5kIGR1cmF0aW9uIHBhcmFtZXRlcnMnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZXZlbnQudGltZSA9IGV2ZW50LnRpbWUudmFsdWVPZigpO1xuXHQgICAgICAgIHZhciBub2RlID0gbmV3IEludGVydmFsTm9kZShldmVudC50aW1lLCBldmVudC50aW1lICsgZXZlbnQuZHVyYXRpb24sIGV2ZW50KTtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yb290ID0gbm9kZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9yb290Lmluc2VydChub2RlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fbGVuZ3RoKys7XG5cdCAgICAgICAgLy8gUmVzdHJ1Y3R1cmUgdHJlZSB0byBiZSBiYWxhbmNlZFxuXHQgICAgICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIG5vZGUudXBkYXRlSGVpZ2h0KCk7XG5cdCAgICAgICAgICAgIG5vZGUudXBkYXRlTWF4KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYmFsYW5jZShub2RlKTtcblx0ICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50O1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGFuIGV2ZW50IGZyb20gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R9ICBldmVudCAgVGhlIGV2ZW50IHRvIHJlbW92ZSBmcm9tIHRoZSB0aW1lbGluZVxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnNlYXJjaChldmVudC50aW1lLCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHJlc3VsdHNbaV07XG5cdCAgICAgICAgICAgICAgICBpZiAobm9kZS5ldmVudCA9PT0gZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVOb2RlKG5vZGUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xlbmd0aC0tO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuSW50ZXJ2YWxUaW1lbGluZSNcblx0XHQgKiAgQG5hbWUgbGVuZ3RoXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZW5ndGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGV2ZW50cyB3aG9zZSB0aW1lIHRpbWUgaXMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkludGVydmFsVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5mb3JFYWNoRnJvbShhZnRlciwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHRoaXMucmVtb3ZlKGV2ZW50KTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIHJvb3Qgbm9kZSBhcyB0aGUgZ2l2ZW4gbm9kZVxuXHRcdCAqICBAcGFyYW0ge0ludGVydmFsTm9kZX0gbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fc2V0Um9vdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgdGhpcy5fcm9vdCA9IG5vZGU7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5wYXJlbnQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVwbGFjZSB0aGUgcmVmZXJlbmNlcyB0byB0aGUgbm9kZSBpbiB0aGUgbm9kZSdzIHBhcmVudFxuXHRcdCAqICB3aXRoIHRoZSByZXBsYWNlbWVudCBub2RlLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIHJlcGxhY2VtZW50XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9yZXBsYWNlTm9kZUluUGFyZW50ID0gZnVuY3Rpb24gKG5vZGUsIHJlcGxhY2VtZW50KSB7XG5cdCAgICAgICAgaWYgKG5vZGUucGFyZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGlmIChub2RlLmlzTGVmdENoaWxkKCkpIHtcblx0ICAgICAgICAgICAgICAgIG5vZGUucGFyZW50LmxlZnQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIG5vZGUucGFyZW50LnJpZ2h0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fcmViYWxhbmNlKG5vZGUucGFyZW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSb290KHJlcGxhY2VtZW50KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSB0aGUgbm9kZSBmcm9tIHRoZSB0cmVlIGFuZCByZXBsYWNlIGl0IHdpdGhcblx0XHQgKiAgYSBzdWNjZXNzb3Igd2hpY2ggZm9sbG93cyB0aGUgc2NoZW1hLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9yZW1vdmVOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAobm9kZS5sZWZ0ID09PSBudWxsICYmIG5vZGUucmlnaHQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmVwbGFjZU5vZGVJblBhcmVudChub2RlLCBudWxsKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKG5vZGUucmlnaHQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmVwbGFjZU5vZGVJblBhcmVudChub2RlLCBub2RlLmxlZnQpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobm9kZS5sZWZ0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgbm9kZS5yaWdodCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIGJhbGFuY2UgPSBub2RlLmdldEJhbGFuY2UoKTtcblx0ICAgICAgICAgICAgdmFyIHJlcGxhY2VtZW50LCB0ZW1wO1xuXHQgICAgICAgICAgICBpZiAoYmFsYW5jZSA+IDApIHtcblx0ICAgICAgICAgICAgICAgIGlmIChub2RlLmxlZnQucmlnaHQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IG5vZGUubGVmdDtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5yaWdodCA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IG5vZGUubGVmdC5yaWdodDtcblx0ICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVwbGFjZW1lbnQucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC5yaWdodDtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucGFyZW50LnJpZ2h0ID0gcmVwbGFjZW1lbnQubGVmdDtcblx0ICAgICAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQucGFyZW50O1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LmxlZnQgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUucmlnaHQubGVmdCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQubGVmdCA9IG5vZGUubGVmdDtcblx0ICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5yaWdodC5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgd2hpbGUgKHJlcGxhY2VtZW50LmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LmxlZnQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5wYXJlbnQgPSByZXBsYWNlbWVudC5wYXJlbnQ7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5wYXJlbnQubGVmdCA9IHJlcGxhY2VtZW50LnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgdGVtcCA9IHJlcGxhY2VtZW50LnBhcmVudDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LmxlZnQgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5yaWdodCA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAobm9kZS5pc0xlZnRDaGlsZCgpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQubGVmdCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5yaWdodCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2V0Um9vdChyZXBsYWNlbWVudCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy8gdGhpcy5fcmVwbGFjZU5vZGVJblBhcmVudChub2RlLCByZXBsYWNlbWVudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYmFsYW5jZSh0ZW1wKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgbm9kZS5kaXNwb3NlKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJvdGF0ZSB0aGUgdHJlZSB0byB0aGUgbGVmdFxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9yb3RhdGVMZWZ0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cdCAgICAgICAgdmFyIGlzTGVmdENoaWxkID0gbm9kZS5pc0xlZnRDaGlsZCgpO1xuXHQgICAgICAgIC8vIE1ha2Ugbm9kZS5yaWdodCB0aGUgbmV3IHJvb3Qgb2YgdGhpcyBzdWIgdHJlZSAoaW5zdGVhZCBvZiBub2RlKVxuXHQgICAgICAgIHZhciBwaXZvdE5vZGUgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgIG5vZGUucmlnaHQgPSBwaXZvdE5vZGUubGVmdDtcblx0ICAgICAgICBwaXZvdE5vZGUubGVmdCA9IG5vZGU7XG5cdCAgICAgICAgaWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBpZiAoaXNMZWZ0Q2hpbGQpIHtcblx0ICAgICAgICAgICAgICAgIHBhcmVudC5sZWZ0ID0gcGl2b3ROb2RlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcGFyZW50LnJpZ2h0ID0gcGl2b3ROb2RlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0Um9vdChwaXZvdE5vZGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUm90YXRlIHRoZSB0cmVlIHRvIHRoZSByaWdodFxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9yb3RhdGVSaWdodCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50O1xuXHQgICAgICAgIHZhciBpc0xlZnRDaGlsZCA9IG5vZGUuaXNMZWZ0Q2hpbGQoKTtcblx0ICAgICAgICAvLyBNYWtlIG5vZGUubGVmdCB0aGUgbmV3IHJvb3Qgb2YgdGhpcyBzdWIgdHJlZSAoaW5zdGVhZCBvZiBub2RlKVxuXHQgICAgICAgIHZhciBwaXZvdE5vZGUgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgbm9kZS5sZWZ0ID0gcGl2b3ROb2RlLnJpZ2h0O1xuXHQgICAgICAgIHBpdm90Tm9kZS5yaWdodCA9IG5vZGU7XG5cdCAgICAgICAgaWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBpZiAoaXNMZWZ0Q2hpbGQpIHtcblx0ICAgICAgICAgICAgICAgIHBhcmVudC5sZWZ0ID0gcGl2b3ROb2RlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcGFyZW50LnJpZ2h0ID0gcGl2b3ROb2RlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0Um9vdChwaXZvdE5vZGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQmFsYW5jZSB0aGUgQlNUXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JlYmFsYW5jZSA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgdmFyIGJhbGFuY2UgPSBub2RlLmdldEJhbGFuY2UoKTtcblx0ICAgICAgICBpZiAoYmFsYW5jZSA+IDEpIHtcblx0ICAgICAgICAgICAgaWYgKG5vZGUubGVmdC5nZXRCYWxhbmNlKCkgPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVMZWZ0KG5vZGUubGVmdCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVSaWdodChub2RlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAoYmFsYW5jZSA8IC0xKSB7XG5cdCAgICAgICAgICAgIGlmIChub2RlLnJpZ2h0LmdldEJhbGFuY2UoKSA+IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZVJpZ2h0KG5vZGUucmlnaHQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlTGVmdChub2RlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IGFuIGV2ZW50IHdob3NlIHRpbWUgYW5kIGR1cmF0aW9uIHNwYW4gdGhlIGdpdmUgdGltZS4gV2lsbFxuXHRcdCAqICByZXR1cm4gdGhlIG1hdGNoIHdob3NlIFwidGltZVwiIHZhbHVlIGlzIGNsb3Nlc3QgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gYWRkIHRvIHRoZSB0aW1lbGluZVxuXHRcdCAqICBAcmV0dXJuICB7T2JqZWN0fSAgVGhlIGV2ZW50IHdoaWNoIHNwYW5zIHRoZSBkZXNpcmVkIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnNlYXJjaCh0aW1lLCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIG1heCA9IHJlc3VsdHNbMF07XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0c1tpXS5sb3cgPiBtYXgubG93KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG1heCA9IHJlc3VsdHNbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG1heC5ldmVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkludGVydmFsVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciBhbGxOb2RlcyA9IFtdO1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnRyYXZlcnNlKGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgICAgICAgICBhbGxOb2Rlcy5wdXNoKG5vZGUpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ID0gYWxsTm9kZXNbaV0uZXZlbnQ7XG5cdCAgICAgICAgICAgICAgICBpZiAoZXYpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhldik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBpbiB3aGljaCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBvdmVybGFwcyB3aXRoIHRoZSB0aW1lIGFuZCBkdXJhdGlvbiB0aW1lIG9mIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgb3ZlcmxhcHBpbmdcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hBdFRpbWUgPSBmdW5jdGlvbiAodGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnNlYXJjaCh0aW1lLCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IHJlc3VsdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldiA9IHJlc3VsdHNbaV0uZXZlbnQ7XG5cdCAgICAgICAgICAgICAgICBpZiAoZXYpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhldik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBpbiB3aGljaCB0aGUgdGltZSBpcyBncmVhdGVyXG5cdFx0ICogIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkludGVydmFsVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEZyb20gPSBmdW5jdGlvbiAodGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnNlYXJjaEFmdGVyKHRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gcmVzdWx0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ID0gcmVzdWx0c1tpXS5ldmVudDtcblx0ICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgYWxsTm9kZXMgPSBbXTtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnRyYXZlcnNlKGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgICAgICAgICBhbGxOb2Rlcy5wdXNoKG5vZGUpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBhbGxOb2Rlc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGFsbE5vZGVzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yb290ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRJTlRFUlZBTCBOT0RFIEhFTFBFUlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmVwcmVzZW50cyBhIG5vZGUgaW4gdGhlIGJpbmFyeSBzZWFyY2ggdHJlZSwgd2l0aCB0aGUgYWRkaXRpb25cblx0XHQgKiAgb2YgYSBcImhpZ2hcIiB2YWx1ZSB3aGljaCBrZWVwcyB0cmFjayBvZiB0aGUgaGlnaGVzdCB2YWx1ZSBvZlxuXHRcdCAqICBpdHMgY2hpbGRyZW4uXG5cdFx0ICogIFJlZmVyZW5jZXM6XG5cdFx0ICogIGh0dHBzOi8vYnJvb2tub3Zhay53b3JkcHJlc3MuY29tLzIwMTMvMTIvMDcvYXVnbWVudGVkLWludGVydmFsLXRyZWUtaW4tYy9cblx0XHQgKiAgaHR0cDovL3d3dy5taWYudnUubHQvfnZhbGRhcy9BTEdPUklUTUFJL0xJVEVSQVRVUkEvQ29ybWVuL0Nvcm1lbi5wZGZcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGxvd1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gaGlnaFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIEludGVydmFsTm9kZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGV2ZW50KSB7XG5cdCAgICAgICAgLy90aGUgZXZlbnQgY29udGFpbmVyXG5cdCAgICAgICAgdGhpcy5ldmVudCA9IGV2ZW50O1xuXHQgICAgICAgIC8vdGhlIGxvdyB2YWx1ZVxuXHQgICAgICAgIHRoaXMubG93ID0gbG93O1xuXHQgICAgICAgIC8vdGhlIGhpZ2ggdmFsdWVcblx0ICAgICAgICB0aGlzLmhpZ2ggPSBoaWdoO1xuXHQgICAgICAgIC8vdGhlIGhpZ2ggdmFsdWUgZm9yIHRoaXMgYW5kIGFsbCBjaGlsZCBub2Rlc1xuXHQgICAgICAgIHRoaXMubWF4ID0gdGhpcy5oaWdoO1xuXHQgICAgICAgIC8vdGhlIG5vZGVzIHRvIHRoZSBsZWZ0XG5cdCAgICAgICAgdGhpcy5fbGVmdCA9IG51bGw7XG5cdCAgICAgICAgLy90aGUgbm9kZXMgdG8gdGhlIHJpZ2h0XG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBudWxsO1xuXHQgICAgICAgIC8vdGhlIHBhcmVudCBub2RlXG5cdCAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXHQgICAgICAgIC8vdGhlIG51bWJlciBvZiBjaGlsZCBub2Rlc1xuXHQgICAgICAgIHRoaXMuaGVpZ2h0ID0gMDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW5zZXJ0IGEgbm9kZSBpbnRvIHRoZSBjb3JyZWN0IHNwb3QgaW4gdGhlIHRyZWVcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmIChub2RlLmxvdyA8PSB0aGlzLmxvdykge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5sZWZ0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmxlZnQgPSBub2RlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5sZWZ0Lmluc2VydChub2RlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0ID0gbm9kZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0Lmluc2VydChub2RlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNlYXJjaCB0aGUgdHJlZSBmb3Igbm9kZXMgd2hpY2ggb3ZlcmxhcFxuXHRcdCAqICB3aXRoIHRoZSBnaXZlbiBwb2ludFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBwb2ludCAgVGhlIHBvaW50IHRvIHF1ZXJ5XG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgcmVzdWx0cyAgVGhlIGFycmF5IHRvIHB1dCB0aGUgcmVzdWx0c1xuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5zZWFyY2ggPSBmdW5jdGlvbiAocG9pbnQsIHJlc3VsdHMpIHtcblx0ICAgICAgICAvLyBJZiBwIGlzIHRvIHRoZSByaWdodCBvZiB0aGUgcmlnaHRtb3N0IHBvaW50IG9mIGFueSBpbnRlcnZhbFxuXHQgICAgICAgIC8vIGluIHRoaXMgbm9kZSBhbmQgYWxsIGNoaWxkcmVuLCB0aGVyZSB3b24ndCBiZSBhbnkgbWF0Y2hlcy5cblx0ICAgICAgICBpZiAocG9pbnQgPiB0aGlzLm1heCkge1xuXHQgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIFNlYXJjaCBsZWZ0IGNoaWxkcmVuXG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLmxlZnQuc2VhcmNoKHBvaW50LCByZXN1bHRzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gQ2hlY2sgdGhpcyBub2RlXG5cdCAgICAgICAgaWYgKHRoaXMubG93IDw9IHBvaW50ICYmIHRoaXMuaGlnaCA+IHBvaW50KSB7XG5cdCAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gSWYgcCBpcyB0byB0aGUgbGVmdCBvZiB0aGUgdGltZSBvZiB0aGlzIGludGVydmFsLFxuXHQgICAgICAgIC8vIHRoZW4gaXQgY2FuJ3QgYmUgaW4gYW55IGNoaWxkIHRvIHRoZSByaWdodC5cblx0ICAgICAgICBpZiAodGhpcy5sb3cgPiBwb2ludCkge1xuXHQgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIFNlYXJjaCByaWdodCBjaGlsZHJlblxuXHQgICAgICAgIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQuc2VhcmNoKHBvaW50LCByZXN1bHRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNlYXJjaCB0aGUgdHJlZSBmb3Igbm9kZXMgd2hpY2ggYXJlIGxlc3Ncblx0XHQgKiAgdGhhbiB0aGUgZ2l2ZW4gcG9pbnRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgcG9pbnQgIFRoZSBwb2ludCB0byBxdWVyeVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIHJlc3VsdHMgIFRoZSBhcnJheSB0byBwdXQgdGhlIHJlc3VsdHNcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuc2VhcmNoQWZ0ZXIgPSBmdW5jdGlvbiAocG9pbnQsIHJlc3VsdHMpIHtcblx0ICAgICAgICAvLyBDaGVjayB0aGlzIG5vZGVcblx0ICAgICAgICBpZiAodGhpcy5sb3cgPj0gcG9pbnQpIHtcblx0ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmxlZnQuc2VhcmNoQWZ0ZXIocG9pbnQsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIHNlYXJjaCB0aGUgcmlnaHQgc2lkZVxuXHQgICAgICAgIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQuc2VhcmNoQWZ0ZXIocG9pbnQsIHJlc3VsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW52b2tlIHRoZSBjYWxsYmFjayBvbiB0aGlzIGVsZW1lbnQgYW5kIGJvdGggaXQncyBicmFuY2hlc1xuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnRyYXZlcnNlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLmxlZnQudHJhdmVyc2UoY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0LnRyYXZlcnNlKGNhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVwZGF0ZSB0aGUgaGVpZ2h0IG9mIHRoZSBub2RlXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnVwZGF0ZUhlaWdodCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsICYmIHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBNYXRoLm1heCh0aGlzLmxlZnQuaGVpZ2h0LCB0aGlzLnJpZ2h0LmhlaWdodCkgKyAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMucmlnaHQuaGVpZ2h0ICsgMTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMubGVmdC5oZWlnaHQgKyAxO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gMDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVwZGF0ZSB0aGUgaGVpZ2h0IG9mIHRoZSBub2RlXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnVwZGF0ZU1heCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLm1heCA9IHRoaXMuaGlnaDtcblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubWF4ID0gTWF0aC5tYXgodGhpcy5tYXgsIHRoaXMubGVmdC5tYXgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLm1heCA9IE1hdGgubWF4KHRoaXMubWF4LCB0aGlzLnJpZ2h0Lm1heCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYmFsYW5jZSBpcyBob3cgdGhlIGxlYWZzIGFyZSBkaXN0cmlidXRlZCBvbiB0aGUgbm9kZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgTmVnYXRpdmUgbnVtYmVycyBhcmUgYmFsYW5jZWQgdG8gdGhlIHJpZ2h0XG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLmdldEJhbGFuY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGJhbGFuY2UgPSAwO1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwgJiYgdGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBiYWxhbmNlID0gdGhpcy5sZWZ0LmhlaWdodCAtIHRoaXMucmlnaHQuaGVpZ2h0O1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGJhbGFuY2UgPSB0aGlzLmxlZnQuaGVpZ2h0ICsgMTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgYmFsYW5jZSA9IC0odGhpcy5yaWdodC5oZWlnaHQgKyAxKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGJhbGFuY2U7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoaXMgbm9kZSBpcyB0aGUgbGVmdCBjaGlsZFxuXHRcdCAqICBvZiBpdHMgcGFyZW50XG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLmlzTGVmdENoaWxkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCAhPT0gbnVsbCAmJiB0aGlzLnBhcmVudC5sZWZ0ID09PSB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBnZXQvc2V0IHRoZSBsZWZ0IG5vZGVcblx0XHQgKiAgQHR5cGUge0ludGVydmFsTm9kZX1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRlcnZhbE5vZGUucHJvdG90eXBlLCAnbGVmdCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xlZnQgPSBub2RlO1xuXHQgICAgICAgICAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlSGVpZ2h0KCk7XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlTWF4KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgZ2V0L3NldCB0aGUgcmlnaHQgbm9kZVxuXHRcdCAqICBAdHlwZSB7SW50ZXJ2YWxOb2RlfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludGVydmFsTm9kZS5wcm90b3R5cGUsICdyaWdodCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JpZ2h0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9yaWdodCA9IG5vZGU7XG5cdCAgICAgICAgICAgIGlmIChub2RlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVIZWlnaHQoKTtcblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVNYXgoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBudWxsIG91dCByZWZlcmVuY2VzLlxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yaWdodCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5ldmVudCA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RU5EIElOVEVSVkFMIE5PREUgSEVMUEVSXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIHJldHVybiBUb25lLkludGVydmFsVGltZWxpbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UaWNrcyBpcyBhIHByaW1pdGl2ZSB0eXBlIGZvciBlbmNvZGluZyBUaW1lIHZhbHVlcy5cblx0XHQgKiAgICAgICAgIFRvbmUuVGlja3MgY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCB0aGUgYG5ld2Aga2V5d29yZC4gVG9uZS5UaWNrcyBjYW4gYmUgcGFzc2VkXG5cdFx0ICogICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgb2YgYW55IG1ldGhvZCB3aGljaCB0YWtlcyB0aW1lIGFzIGFuIGFyZ3VtZW50LlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVHJhbnNwb3J0VGltZX1cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIHZhbCAgICBUaGUgdGltZSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nPX0gIHVuaXRzICBUaGUgdW5pdHMgb2YgdGhlIHZhbHVlLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB0ID0gVG9uZS5UaWNrcyhcIjRuXCIpOy8vYSBxdWFydGVyIG5vdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UaWNrcykge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydFRpbWUuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGlja3ModmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGlja3MsIFRvbmUuVHJhbnNwb3J0VGltZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fZGVmYXVsdFVuaXRzID0gJ2knO1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBjdXJyZW50IHRpbWUgaW4gdGhlIGdpdmVuIHVuaXRzXG5cdFx0ICogQHJldHVybiB7VGlja3N9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl9ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LnRpY2tzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBiZWF0cyBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gYmVhdHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMgPSBmdW5jdGlvbiAoYmVhdHMpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fZ2V0UFBRKCkgKiBiZWF0cztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzZWNvbmQgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtTZWNvbmRzfSBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiBzZWNvbmRzIC8gKDYwIC8gdGhpcy5fZ2V0QnBtKCkpICogdGhpcy5fZ2V0UFBRKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgdGljayBpbiB0aGUgY3VycmVudCB0aW1lIHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7VGlja3N9IHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fdGlja3NUb1VuaXRzID0gZnVuY3Rpb24gKHRpY2tzKSB7XG5cdCAgICAgICAgcmV0dXJuIHRpY2tzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpIC8gdGhpcy5fZ2V0UFBRKCkgKiAoNjAgLyB0aGlzLl9nZXRCcG0oKSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGlja3M7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmFuc3BvcnRFdmVudCBpcyBhbiBpbnRlcm5hbCBjbGFzcyB1c2VkIGJ5IChUb25lLlRyYW5zcG9ydClbVHJhbnNwb3J0XVxuXHRcdCAqICAgICAgICAgdG8gc2NoZWR1bGUgZXZlbnRzLiBEbyBubyBpbnZva2UgdGhpcyBjbGFzcyBkaXJlY3RseSwgaXQgaXNcblx0XHQgKiAgICAgICAgIGhhbmRsZWQgZnJvbSB3aXRoaW4gVG9uZS5UcmFuc3BvcnQuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudCA9IGZ1bmN0aW9uIChUcmFuc3BvcnQsIG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuVHJhbnNwb3J0RXZlbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFJlZmVyZW5jZSB0byB0aGUgVHJhbnNwb3J0IHRoYXQgY3JlYXRlZCBpdFxuXHRcdFx0ICogQHR5cGUge1RvbmUuVHJhbnNwb3J0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQgPSBUcmFuc3BvcnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdW5pcXVlIGlkIG9mIHRoZSBldmVudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaWQgPSBUb25lLlRyYW5zcG9ydEV2ZW50Ll9ldmVudElkKys7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdGltZSB0aGUgZXZlbnQgc3RhcnRzXG5cdFx0XHQgKiBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnRpbWUgPSBUb25lLlRpY2tzKG9wdGlvbnMudGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcblx0ICAgICAgICAvKipcblx0XHRcdCAqIElmIHRoZSBldmVudCBzaG91bGQgYmUgcmVtb3ZlZCBhZnRlciBiZWluZyBjcmVhdGVkLlxuXHRcdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25jZSA9IG9wdGlvbnMub25jZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydEV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25jZSc6IGZhbHNlLFxuXHQgICAgICAgICdjYWxsYmFjayc6IFRvbmUubm9PcFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEN1cnJlbnQgSUQgY291bnRlclxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50Ll9ldmVudElkID0gMDtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZSB0aGUgZXZlbnQgY2FsbGJhY2suXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgVGhlIEF1ZGlvQ29udGV4dCB0aW1lIGluIHNlY29uZHMgb2YgdGhlIGV2ZW50XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5pbnZva2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vbmNlICYmIHRoaXMuVHJhbnNwb3J0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLmlkKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0RXZlbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydEV2ZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQgaXMgYW4gaW50ZXJuYWwgY2xhc3MgdXNlZCBieSBUb25lLlRyYW5zcG9ydFxuXHRcdCAqICAgICAgICAgdG8gc2NoZWR1bGUgcmVwZWF0IGV2ZW50cy4gVGhpcyBjbGFzcyBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVHJhbnNwb3J0RXZlbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50ID0gZnVuY3Rpb24gKFRyYW5zcG9ydCwgb3B0aW9ucykge1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQuY2FsbCh0aGlzLCBUcmFuc3BvcnQsIG9wdGlvbnMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBXaGVuIHRoZSBldmVudCBzaG91bGQgc3RvcCByZXBlYXRpbmdcblx0XHRcdCAqIEB0eXBlIHtUaWNrc31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmR1cmF0aW9uID0gVG9uZS5UaWNrcyhvcHRpb25zLmR1cmF0aW9uKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBpbnRlcnZhbCBvZiB0aGUgcmVwZWF0ZWQgZXZlbnRcblx0XHRcdCAqIEB0eXBlIHtUaWNrc31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IFRvbmUuVGlja3Mob3B0aW9ucy5pbnRlcnZhbCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgSUQgb2YgdGhlIGN1cnJlbnQgdGltZWxpbmUgZXZlbnRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgSUQgb2YgdGhlIG5leHQgdGltZWxpbmUgZXZlbnRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbmV4dElkID0gLTE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgICogVGhlIHRpbWUgb2YgdGhlIG5leHQgZXZlbnRcblx0XHRcdCAgKiBAdHlwZSB7VGlja3N9XG5cdFx0XHQgICogQHByaXZhdGVcblx0XHRcdCAgKi9cblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IHRoaXMudGltZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIGEgcmVmZXJlbmNlIHRvIHRoZSBib3VuZCBzdGFydCBtZXRob2Rcblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ib3VuZFJlc3RhcnQgPSB0aGlzLl9yZXN0YXJ0LmJpbmQodGhpcyk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQub24oJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX2JvdW5kUmVzdGFydCk7XG5cdCAgICAgICAgdGhpcy5fcmVzdGFydCgpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQsIFRvbmUuVHJhbnNwb3J0RXZlbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHRzXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkdXJhdGlvbic6IEluZmluaXR5LFxuXHQgICAgICAgICdpbnRlcnZhbCc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2UgdGhlIGNhbGxiYWNrLiBSZXR1cm5zIHRoZSB0aWNrIHRpbWUgd2hpY2hcblx0XHQgKiB0aGUgbmV4dCBldmVudCBzaG91bGQgYmUgc2NoZWR1bGVkIGF0LlxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZSAgVGhlIEF1ZGlvQ29udGV4dCB0aW1lIGluIHNlY29uZHMgb2YgdGhlIGV2ZW50XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LnByb3RvdHlwZS5pbnZva2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vY3JlYXRlIG1vcmUgZXZlbnRzIGlmIG5lY2Vzc2FyeVxuXHQgICAgICAgIHRoaXMuX2NyZWF0ZUV2ZW50cyh0aW1lKTtcblx0ICAgICAgICAvL2NhbGwgdGhlIHN1cGVyIGNsYXNzXG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5wcm90b3R5cGUuaW52b2tlLmNhbGwodGhpcywgdGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUHVzaCBtb3JlIGV2ZW50cyBvbnRvIHRoZSB0aW1lbGluZSB0byBrZWVwIHVwIHdpdGggdGhlIHBvc2l0aW9uIG9mIHRoZSB0aW1lbGluZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LnByb3RvdHlwZS5fY3JlYXRlRXZlbnRzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvLyBzY2hlZHVsZSB0aGUgbmV4dCBldmVudFxuXHQgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuVHJhbnNwb3J0LmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aWNrcyA+PSB0aGlzLnRpbWUgJiYgdGlja3MgPj0gdGhpcy5fbmV4dFRpY2sgJiYgdGhpcy5fbmV4dFRpY2sgKyB0aGlzLl9pbnRlcnZhbCA8IHRoaXMudGltZSArIHRoaXMuZHVyYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fbmV4dFRpY2sgKz0gdGhpcy5faW50ZXJ2YWw7XG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJZCA9IHRoaXMuX25leHRJZDtcblx0ICAgICAgICAgICAgdGhpcy5fbmV4dElkID0gdGhpcy5UcmFuc3BvcnQuc2NoZWR1bGVPbmNlKHRoaXMuaW52b2tlLmJpbmQodGhpcyksIFRvbmUuVGlja3ModGhpcy5fbmV4dFRpY2spKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUHVzaCBtb3JlIGV2ZW50cyBvbnRvIHRoZSB0aW1lbGluZSB0byBrZWVwIHVwIHdpdGggdGhlIHBvc2l0aW9uIG9mIHRoZSB0aW1lbGluZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LnByb3RvdHlwZS5fcmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5fY3VycmVudElkKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9uZXh0SWQpO1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrID0gdGhpcy50aW1lO1xuXHQgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuVHJhbnNwb3J0LmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aWNrcyA+IHRoaXMudGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9uZXh0VGljayA9IHRoaXMudGltZSArIE1hdGguY2VpbCgodGlja3MgLSB0aGlzLnRpbWUpIC8gdGhpcy5faW50ZXJ2YWwpICogdGhpcy5faW50ZXJ2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2N1cnJlbnRJZCA9IHRoaXMuVHJhbnNwb3J0LnNjaGVkdWxlT25jZSh0aGlzLmludm9rZS5iaW5kKHRoaXMpLCBUb25lLlRpY2tzKHRoaXMuX25leHRUaWNrKSk7XG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgKz0gdGhpcy5faW50ZXJ2YWw7XG5cdCAgICAgICAgdGhpcy5fbmV4dElkID0gdGhpcy5UcmFuc3BvcnQuc2NoZWR1bGVPbmNlKHRoaXMuaW52b2tlLmJpbmQodGhpcyksIFRvbmUuVGlja3ModGhpcy5fbmV4dFRpY2spKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5fY3VycmVudElkKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9uZXh0SWQpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0Lm9mZignc3RhcnQgbG9vcFN0YXJ0JywgdGhpcy5fYm91bmRSZXN0YXJ0KTtcblx0ICAgICAgICB0aGlzLl9ib3VuZENyZWF0ZUV2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuZHVyYXRpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUcmFuc3BvcnQgZm9yIHRpbWluZyBtdXNpY2FsIGV2ZW50cy5cblx0XHQgKiAgICAgICAgICBTdXBwb3J0cyB0ZW1wbyBjdXJ2ZXMgYW5kIHRpbWUgY2hhbmdlcy4gVW5saWtlIGJyb3dzZXItYmFzZWQgdGltaW5nIChzZXRJbnRlcnZhbCwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKVxuXHRcdCAqICAgICAgICAgIFRvbmUuVHJhbnNwb3J0IHRpbWluZyBldmVudHMgcGFzcyBpbiB0aGUgZXhhY3QgdGltZSBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50XG5cdFx0ICogICAgICAgICAgaW4gdGhlIGFyZ3VtZW50IG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gUGFzcyB0aGF0IHRpbWUgdmFsdWUgdG8gdGhlIG9iamVjdFxuXHRcdCAqICAgICAgICAgIHlvdSdyZSBzY2hlZHVsaW5nLiA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgIEEgc2luZ2xlIHRyYW5zcG9ydCBpcyBjcmVhdGVkIGZvciB5b3Ugd2hlbiB0aGUgbGlicmFyeSBpcyBpbml0aWFsaXplZC5cblx0XHQgKiAgICAgICAgICA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgIFRoZSB0cmFuc3BvcnQgZW1pdHMgdGhlIGV2ZW50czogXCJzdGFydFwiLCBcInN0b3BcIiwgXCJwYXVzZVwiLCBhbmQgXCJsb29wXCIgd2hpY2ggYXJlXG5cdFx0ICogICAgICAgICAgY2FsbGVkIHdpdGggdGhlIHRpbWUgb2YgdGhhdCBldmVudCBhcyB0aGUgYXJndW1lbnQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW1pdHRlcn1cblx0XHQgKiAgQHNpbmdsZXRvblxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcmVwZWF0ZWQgZXZlbnQgZXZlcnkgOHRoIG5vdGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZVJlcGVhdChmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdC8vZG8gc29tZXRoaW5nIHdpdGggdGhlIHRpbWVcblx0XHQgKiB9LCBcIjhuXCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2NoZWR1bGUgYW4gZXZlbnQgb24gdGhlIDE2dGggbWVhc3VyZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly9kbyBzb21ldGhpbmcgd2l0aCB0aGUgdGltZVxuXHRcdCAqIH0sIFwiMTY6MDowXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLmNhbGwodGhpcyk7XG5cdCAgICAgICAgVG9uZS5nZXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdExPT1BJTkdcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogXHRJZiB0aGUgdHJhbnNwb3J0IGxvb3BzIG9yIG5vdC5cblx0XHRcdFx0ICogIEB0eXBlIHtib29sZWFufVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5sb29wID0gZmFsc2U7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdFRoZSBsb29wIHN0YXJ0IHBvc2l0aW9uIGluIHRpY2tzXG5cdFx0XHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gMDtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0VGhlIGxvb3AgZW5kIHBvc2l0aW9uIGluIHRpY2tzXG5cdFx0XHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IDA7XG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8vXHRDTE9DSy9URU1QT1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgUHVsc2VzIHBlciBxdWFydGVyIGlzIHRoZSBudW1iZXIgb2YgdGlja3MgcGVyIHF1YXJ0ZXIgbm90ZS5cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3BwcSA9IFRyYW5zcG9ydENvbnN0cnVjdG9yLmRlZmF1bHRzLlBQUTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICB3YXRjaGVzIHRoZSBtYWluIG9zY2lsbGF0b3IgZm9yIHRpbWluZyB0aWNrc1xuXHRcdFx0XHQgKiAgaW5pdGlhbGx5IHN0YXJ0cyBhdCAxMjBicG1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqICBAdHlwZSB7VG9uZS5DbG9ja31cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX2Nsb2NrID0gbmV3IFRvbmUuQ2xvY2soe1xuXHQgICAgICAgICAgICAgICAgJ2NhbGxiYWNrJzogdGhpcy5fcHJvY2Vzc1RpY2suYmluZCh0aGlzKSxcblx0ICAgICAgICAgICAgICAgICdmcmVxdWVuY3knOiAwXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB0aGlzLl9iaW5kQ2xvY2tFdmVudHMoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgQmVhdHMgUGVyIE1pbnV0ZSBvZiB0aGUgVHJhbnNwb3J0LlxuXHRcdFx0XHQgKiAgQHR5cGUge0JQTX1cblx0XHRcdFx0ICogIEBzaWduYWxcblx0XHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHRcdCAqIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZSA9IDgwO1xuXHRcdFx0XHQgKiAvL3JhbXAgdGhlIGJwbSB0byAxMjAgb3ZlciAxMCBzZWNvbmRzXG5cdFx0XHRcdCAqIFRvbmUuVHJhbnNwb3J0LmJwbS5yYW1wVG8oMTIwLCAxMCk7XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLmJwbSA9IHRoaXMuX2Nsb2NrLmZyZXF1ZW5jeTtcblx0ICAgICAgICAgICAgdGhpcy5icG0uX3RvVW5pdHMgPSB0aGlzLl90b1VuaXRzLmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLl9mcm9tVW5pdHMgPSB0aGlzLl9mcm9tVW5pdHMuYmluZCh0aGlzKTtcblx0ICAgICAgICAgICAgdGhpcy5icG0udW5pdHMgPSBUb25lLlR5cGUuQlBNO1xuXHQgICAgICAgICAgICB0aGlzLmJwbS52YWx1ZSA9IFRyYW5zcG9ydENvbnN0cnVjdG9yLmRlZmF1bHRzLmJwbTtcblx0ICAgICAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2JwbScpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSB0aW1lIHNpZ25hdHVyZSwgb3IgbW9yZSBhY2N1cmF0ZWx5IHRoZSBudW1lcmF0b3Jcblx0XHRcdFx0ICogIG9mIHRoZSB0aW1lIHNpZ25hdHVyZSBvdmVyIGEgZGVub21pbmF0b3Igb2YgNC5cblx0XHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdGltZVNpZ25hdHVyZSA9IFRyYW5zcG9ydENvbnN0cnVjdG9yLmRlZmF1bHRzLnRpbWVTaWduYXR1cmU7XG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8vXHRUSU1FTElORSBFVkVOVFNcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIEFsbCB0aGUgZXZlbnRzIGluIGFuIG9iamVjdCB0byBrZWVwIHRyYWNrIGJ5IElEXG5cdFx0XHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cyA9IHt9O1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogXHRUaGUgc2NoZWR1bGVkIGV2ZW50cy5cblx0XHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gbmV3IFRvbmUuVGltZWxpbmUoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBSZXBlYXRlZCBldmVudHNcblx0XHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBlYXRlZEV2ZW50cyA9IG5ldyBUb25lLkludGVydmFsVGltZWxpbmUoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBBbGwgb2YgdGhlIHN5bmNlZCBTaWduYWxzXG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fc3luY2VkU2lnbmFscyA9IFtdO1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0U1dJTkdcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSBzdWJkaXZpc2lvbiBvZiB0aGUgc3dpbmdcblx0XHRcdFx0ICogIEB0eXBlICB7VGlja3N9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fc3dpbmdUaWNrcyA9IFRyYW5zcG9ydENvbnN0cnVjdG9yLmRlZmF1bHRzLlBQUSAvIDI7XG5cdCAgICAgICAgICAgIC8vOG5cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgc3dpbmcgYW1vdW50XG5cdFx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fc3dpbmdBbW91bnQgPSAwO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnQsIFRvbmUuRW1pdHRlcik7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYnBtJzogMTIwLFxuXHQgICAgICAgICdzd2luZyc6IDAsXG5cdCAgICAgICAgJ3N3aW5nU3ViZGl2aXNpb24nOiAnOG4nLFxuXHQgICAgICAgICd0aW1lU2lnbmF0dXJlJzogNCxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAnbG9vcEVuZCc6ICc0bScsXG5cdCAgICAgICAgJ1BQUSc6IDE5MlxuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUSUNLU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIGNhbGxlZCBvbiBldmVyeSB0aWNrXG5cdFx0ICogIEBwYXJhbSAgIHtudW1iZXJ9IHRpY2tUaW1lIGNsb2NrIHJlbGF0aXZlIHRpY2sgdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLl9wcm9jZXNzVGljayA9IGZ1bmN0aW9uICh0aWNrVGltZSwgdGlja3MpIHtcblx0ICAgICAgICAvL2hhbmRsZSBzd2luZ1xuXHQgICAgICAgIGlmICh0aGlzLl9zd2luZ0Ftb3VudCA+IDAgJiYgdGlja3MgJSB0aGlzLl9wcHEgIT09IDAgJiYgLy9ub3Qgb24gYSBkb3duYmVhdFxuXHQgICAgICAgICAgICB0aWNrcyAlICh0aGlzLl9zd2luZ1RpY2tzICogMikgIT09IDApIHtcblx0ICAgICAgICAgICAgLy9hZGQgc29tZSBzd2luZ1xuXHQgICAgICAgICAgICB2YXIgcHJvZ3Jlc3MgPSB0aWNrcyAlICh0aGlzLl9zd2luZ1RpY2tzICogMikgLyAodGhpcy5fc3dpbmdUaWNrcyAqIDIpO1xuXHQgICAgICAgICAgICB2YXIgYW1vdW50ID0gTWF0aC5zaW4ocHJvZ3Jlc3MgKiBNYXRoLlBJKSAqIHRoaXMuX3N3aW5nQW1vdW50O1xuXHQgICAgICAgICAgICB0aWNrVGltZSArPSBUb25lLlRpY2tzKHRoaXMuX3N3aW5nVGlja3MgKiAyIC8gMykudG9TZWNvbmRzKCkgKiBhbW91bnQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vZG8gdGhlIGxvb3AgdGVzdFxuXHQgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgaWYgKHRpY2tzID49IHRoaXMuX2xvb3BFbmQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9vcEVuZCcsIHRpY2tUaW1lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2Nsb2NrLnNldFRpY2tzQXRUaW1lKHRoaXMuX2xvb3BTdGFydCwgdGlja1RpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGlja3MgPSB0aGlzLl9sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvb3BTdGFydCcsIHRpY2tUaW1lLCB0aGlzLl9jbG9jay5nZXRTZWNvbmRzQXRUaW1lKHRpY2tUaW1lKSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvb3AnLCB0aWNrVGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9pbnZva2UgdGhlIHRpbWVsaW5lIGV2ZW50cyBzY2hlZHVsZWQgb24gdGhpcyB0aWNrXG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuZm9yRWFjaEF0VGltZSh0aWNrcywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50Lmludm9rZSh0aWNrVGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFNDSEVEVUxBQkxFIEVWRU5UU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGFuIGV2ZW50IGFsb25nIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgYXQgdGhlIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gIHRpbWUgVGhlIHRpbWUgdG8gaW52b2tlIHRoZSBjYWxsYmFjayBhdC5cblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSBUaGUgaWQgb2YgdGhlIGV2ZW50IHdoaWNoIGNhbiBiZSB1c2VkIGZvciBjYW5jZWxpbmcgdGhlIGV2ZW50LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciB0aGUgY2FsbGJhY2sgd2hlbiB0aGUgVHJhbnNwb3J0IHJlYWNoZXMgdGhlIGRlc2lyZWQgdGltZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0ZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lKTtcblx0XHQgKiB9LCBcIjEyOGlcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRpbWUpIHtcblx0ICAgICAgICB2YXIgZXZlbnQgPSBuZXcgVG9uZS5UcmFuc3BvcnRFdmVudCh0aGlzLCB7XG5cdCAgICAgICAgICAgICd0aW1lJzogVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpLFxuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiBjYWxsYmFja1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hZGRFdmVudChldmVudCwgdGhpcy5fdGltZWxpbmUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZSBhIHJlcGVhdGVkIGV2ZW50IGFsb25nIHRoZSB0aW1lbGluZS4gVGhlIGV2ZW50IHdpbGwgZmlyZVxuXHRcdCAqICBhdCB0aGUgYGludGVydmFsYCBzdGFydGluZyBhdCB0aGUgYHN0YXJ0VGltZWAgYW5kIGZvciB0aGUgc3BlY2lmaWVkXG5cdFx0ICogIGBkdXJhdGlvbmAuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICBpbnRlcnZhbCAgIFRoZSBkdXJhdGlvbiBiZXR3ZWVuIHN1Y2Nlc3NpdmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MuIE11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWU9fSAgICBzdGFydFRpbWUgIFdoZW4gYWxvbmcgdGhlIHRpbWVsaW5lIHRoZSBldmVudHMgc2hvdWxkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgYmVpbmcgaW52b2tlZC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZHVyYXRpb249SW5maW5pdHldIEhvdyBsb25nIHRoZSBldmVudCBzaG91bGQgcmVwZWF0LlxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgICBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudC4gVXNlIHRoaXMgdG8gY2FuY2VsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZXZlbnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIGNhbGxiYWNrIGludm9rZWQgZXZlcnkgZWlnaHRoIG5vdGUgYWZ0ZXIgdGhlIGZpcnN0IG1lYXN1cmVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZVJlcGVhdChjYWxsYmFjaywgXCI4blwiLCBcIjFtXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnNjaGVkdWxlUmVwZWF0ID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBpbnRlcnZhbCwgc3RhcnRUaW1lLCBkdXJhdGlvbikge1xuXHQgICAgICAgIHZhciBldmVudCA9IG5ldyBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50KHRoaXMsIHtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogY2FsbGJhY2ssXG5cdCAgICAgICAgICAgICdpbnRlcnZhbCc6IFRvbmUuVGltZShpbnRlcnZhbCksXG5cdCAgICAgICAgICAgICd0aW1lJzogVG9uZS5UcmFuc3BvcnRUaW1lKHN0YXJ0VGltZSksXG5cdCAgICAgICAgICAgICdkdXJhdGlvbic6IFRvbmUuVGltZShUb25lLmRlZmF1bHRBcmcoZHVyYXRpb24sIEluZmluaXR5KSlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL2tpY2sgaXQgb2ZmIGlmIHRoZSBUcmFuc3BvcnQgaXMgc3RhcnRlZFxuXHQgICAgICAgIHJldHVybiB0aGlzLl9hZGRFdmVudChldmVudCwgdGhpcy5fcmVwZWF0ZWRFdmVudHMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZSBhbiBldmVudCB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBhZnRlciBpdCBpcyBpbnZva2VkLlxuXHRcdCAqICBOb3RlIHRoYXQgaWYgdGhlIGdpdmVuIHRpbWUgaXMgbGVzcyB0aGFuIHRoZSBjdXJyZW50IHRyYW5zcG9ydCB0aW1lLFxuXHRcdCAqICB0aGUgZXZlbnQgd2lsbCBiZSBpbnZva2VkIGltbWVkaWF0ZWx5LlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIG9uY2UuXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gdGltZSBUaGUgdGltZSB0aGUgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQuXG5cdFx0ICogIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnNjaGVkdWxlT25jZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdGltZSkge1xuXHQgICAgICAgIHZhciBldmVudCA9IG5ldyBUb25lLlRyYW5zcG9ydEV2ZW50KHRoaXMsIHtcblx0ICAgICAgICAgICAgJ3RpbWUnOiBUb25lLlRyYW5zcG9ydFRpbWUodGltZSksXG5cdCAgICAgICAgICAgICdjYWxsYmFjayc6IGNhbGxiYWNrLFxuXHQgICAgICAgICAgICAnb25jZSc6IHRydWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYWRkRXZlbnQoZXZlbnQsIHRoaXMuX3RpbWVsaW5lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYXIgdGhlIHBhc3NlZCBpbiBldmVudCBpZCBmcm9tIHRoZSB0aW1lbGluZVxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gZXZlbnRJZCBUaGUgaWQgb2YgdGhlIGV2ZW50LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIChldmVudElkKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3NjaGVkdWxlZEV2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudElkKSkge1xuXHQgICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuX3NjaGVkdWxlZEV2ZW50c1tldmVudElkLnRvU3RyaW5nKCldO1xuXHQgICAgICAgICAgICBpdGVtLnRpbWVsaW5lLnJlbW92ZShpdGVtLmV2ZW50KTtcblx0ICAgICAgICAgICAgaXRlbS5ldmVudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zY2hlZHVsZWRFdmVudHNbZXZlbnRJZC50b1N0cmluZygpXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQWRkIGFuIGV2ZW50IHRvIHRoZSBjb3JyZWN0IHRpbWVsaW5lLiBLZWVwIHRyYWNrIG9mIHRoZVxuXHRcdCAqIHRpbWVsaW5lIGl0IHdhcyBhZGRlZCB0by5cblx0XHQgKiBAcGFyYW0ge1RvbmUuVHJhbnNwb3J0RXZlbnR9XHRldmVudFxuXHRcdCAqIEBwYXJhbSB7VG9uZS5UaW1lbGluZX0gdGltZWxpbmVcblx0XHQgKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgZXZlbnQgaWQgd2hpY2ggd2FzIGp1c3QgYWRkZWRcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLl9hZGRFdmVudCA9IGZ1bmN0aW9uIChldmVudCwgdGltZWxpbmUpIHtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHNbZXZlbnQuaWQudG9TdHJpbmcoKV0gPSB7XG5cdCAgICAgICAgICAgICdldmVudCc6IGV2ZW50LFxuXHQgICAgICAgICAgICAndGltZWxpbmUnOiB0aW1lbGluZVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgdGltZWxpbmUuYWRkKGV2ZW50KTtcblx0ICAgICAgICByZXR1cm4gZXZlbnQuaWQ7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBzY2hlZHVsZWQgZXZlbnRzIGZyb20gdGhlIHRpbWVsaW5lIGFmdGVyXG5cdFx0ICogIHRoZSBnaXZlbiB0aW1lLiBSZXBlYXRlZCBldmVudHMgd2lsbCBiZSByZW1vdmVkXG5cdFx0ICogIGlmIHRoZWlyIHN0YXJ0VGltZSBpcyBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IFthZnRlcj0wXSBDbGVhciBhbGwgZXZlbnRzIGFmdGVyXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgdGltZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgYWZ0ZXIgPSBUb25lLmRlZmF1bHRBcmcoYWZ0ZXIsIDApO1xuXHQgICAgICAgIGFmdGVyID0gdGhpcy50b1RpY2tzKGFmdGVyKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5mb3JFYWNoRnJvbShhZnRlciwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2xlYXIoZXZlbnQuaWQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMuZm9yRWFjaEZyb20oYWZ0ZXIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICB0aGlzLmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRTVEFSVC9TVE9QL1BBVVNFXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQmluZCBzdGFydC9zdG9wL3BhdXNlIGV2ZW50cyBmcm9tIHRoZSBjbG9jayBhbmQgZW1pdCB0aGVtLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLl9iaW5kQ2xvY2tFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sub24oJ3N0YXJ0JywgZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLlRpY2tzKG9mZnNldCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RhcnQnLCB0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sub24oJ3N0b3AnLCBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0b3AnLCB0aW1lKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdwYXVzZScsIGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgncGF1c2UnLCB0aW1lKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIsIFwic3RvcHBlZFwiLCBvciBcInBhdXNlZFwiXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2suZ2V0U3RhdGVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIHRyYW5zcG9ydCBhbmQgYWxsIHNvdXJjZXMgc3luY2VkIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgdHJhbnNwb3J0IHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZT19IG9mZnNldCBUaGUgdGltZWxpbmUgb2Zmc2V0IHRvIHN0YXJ0IHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCBpbiBvbmUgc2Vjb25kIHN0YXJ0aW5nIGF0IGJlZ2lubmluZyBvZiB0aGUgNXRoIG1lYXN1cmUuXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoXCIrMVwiLCBcIjQ6MDowXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGNsb2NrXG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKG9mZnNldCkpIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1RpY2tzKG9mZnNldCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnN0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIHRyYW5zcG9ydCBhbmQgYWxsIHNvdXJjZXMgc3luY2VkIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgdHJhbnNwb3J0IHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdG9wKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGF1c2UgdGhlIHRyYW5zcG9ydCBhbmQgYWxsIHNvdXJjZXMgc3luY2VkIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnBhdXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRvZ2dsZSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdHJhbnNwb3J0LiBJZiBpdCBpc1xuXHRcdCAqIHN0YXJ0ZWQsIGl0IHdpbGwgc3RvcCBpdCwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RhcnQgdGhlIFRyYW5zcG9ydC5cblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydH0gICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX2Nsb2NrLmdldFN0YXRlQXRUaW1lKHRpbWUpICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5zdGFydCh0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLnN0b3AodGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRTRVRURVJTL0dFVFRFUlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSBzaWduYXR1cmUgYXMganVzdCB0aGUgbnVtZXJhdG9yIG92ZXIgNC5cblx0XHQgKiAgRm9yIGV4YW1wbGUgNC80IHdvdWxkIGJlIGp1c3QgNCBhbmQgNi84IHdvdWxkIGJlIDMuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge051bWJlcnxBcnJheX1cblx0XHQgKiAgQG5hbWUgdGltZVNpZ25hdHVyZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY29tbW9uIHRpbWVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC50aW1lU2lnbmF0dXJlID0gNDtcblx0XHQgKiAvLyA3Lzhcblx0XHQgKiBUb25lLlRyYW5zcG9ydC50aW1lU2lnbmF0dXJlID0gWzcsIDhdO1xuXHRcdCAqIC8vdGhpcyB3aWxsIGJlIHJlZHVjZWQgdG8gYSBzaW5nbGUgbnVtYmVyXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZTsgLy9yZXR1cm5zIDMuNVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3RpbWVTaWduYXR1cmUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lU2lnbmF0dXJlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZVNpZykge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRpbWVTaWcpKSB7XG5cdCAgICAgICAgICAgICAgICB0aW1lU2lnID0gdGltZVNpZ1swXSAvIHRpbWVTaWdbMV0gKiA0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVTaWduYXR1cmUgPSB0aW1lU2lnO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogV2hlbiB0aGUgVG9uZS5UcmFuc3BvcnQubG9vcCA9IHRydWUsIHRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBsb29wLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BTdGFydCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdGFydFBvc2l0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9UaWNrcyhzdGFydFBvc2l0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFdoZW4gdGhlIFRvbmUuVHJhbnNwb3J0Lmxvb3AgPSB0cnVlLCB0aGlzIGlzIHRoZSBlbmRpbmcgcG9zaXRpb24gb2YgdGhlIGxvb3AuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wRW5kKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGVuZFBvc2l0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvVGlja3MoZW5kUG9zaXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgbG9vcCBzdGFydCBhbmQgc3RvcCBhdCB0aGUgc2FtZSB0aW1lLlxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IHN0YXJ0UG9zaXRpb25cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBlbmRQb3NpdGlvblxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xvb3Agb3ZlciB0aGUgZmlyc3QgbWVhc3VyZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNldExvb3BQb2ludHMoMCwgXCIxbVwiKTtcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5sb29wID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zZXRMb29wUG9pbnRzID0gZnVuY3Rpb24gKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBzdGFydFBvc2l0aW9uO1xuXHQgICAgICAgIHRoaXMubG9vcEVuZCA9IGVuZFBvc2l0aW9uO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3dpbmcgdmFsdWUuIEJldHdlZW4gMC0xIHdoZXJlIDEgZXF1YWwgdG9cblx0XHQgKiAgdGhlIG5vdGUgKyBoYWxmIHRoZSBzdWJkaXZpc2lvbi5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHN3aW5nXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc3dpbmcnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zd2luZ0Ftb3VudDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGFtb3VudCkge1xuXHQgICAgICAgICAgICAvL3NjYWxlIHRoZSB2YWx1ZXMgdG8gYSBub3JtYWwgcmFuZ2Vcblx0ICAgICAgICAgICAgdGhpcy5fc3dpbmdBbW91bnQgPSBhbW91bnQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBzdWJkaXZpc2lvbiB3aGljaCB0aGUgc3dpbmcgd2lsbCBiZSBhcHBsaWVkIHRvLlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBhbiA4dGggbm90ZS4gVmFsdWUgbXVzdCBiZSBsZXNzXG5cdFx0ICogIHRoYW4gYSBxdWFydGVyIG5vdGUuXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgc3dpbmdTdWJkaXZpc2lvblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3N3aW5nU3ViZGl2aXNpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX3N3aW5nVGlja3MpLnRvTm90YXRpb24oKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHN1YmRpdmlzaW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nVGlja3MgPSB0aGlzLnRvVGlja3Moc3ViZGl2aXNpb24pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBUcmFuc3BvcnQncyBwb3NpdGlvbiBpbiBCYXJzOkJlYXRzOlNpeHRlZW50aHMuXG5cdFx0ICogIFNldHRpbmcgdGhlIHZhbHVlIHdpbGwganVtcCB0byB0aGF0IHBvc2l0aW9uIHJpZ2h0IGF3YXkuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge0JhcnNCZWF0c1NpeHRlZW50aHN9XG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAncG9zaXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLl9jbG9jay5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aWNrcykudG9CYXJzQmVhdHNTaXh0ZWVudGhzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9ncmVzcykge1xuXHQgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLnRvVGlja3MocHJvZ3Jlc3MpO1xuXHQgICAgICAgICAgICB0aGlzLnRpY2tzID0gdGlja3M7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIFRyYW5zcG9ydCdzIHBvc2l0aW9uIGluIHNlY29uZHNcblx0XHQgKiAgU2V0dGluZyB0aGUgdmFsdWUgd2lsbCBqdW1wIHRvIHRoYXQgcG9zaXRpb24gcmlnaHQgYXdheS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7U2Vjb25kc31cblx0XHQgKiAgQG5hbWUgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3NlY29uZHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay5zZWNvbmRzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocykge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5icG0udGltZVRvVGlja3Mocywgbm93KTtcblx0ICAgICAgICAgICAgdGhpcy50aWNrcyA9IHRpY2tzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBUcmFuc3BvcnQncyBsb29wIHBvc2l0aW9uIGFzIGEgbm9ybWFsaXplZCB2YWx1ZS4gQWx3YXlzXG5cdFx0ICogIHJldHVybnMgMCBpZiB0aGUgdHJhbnNwb3J0IGlmIGxvb3AgaXMgbm90IHRydWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQG5hbWUgcHJvZ3Jlc3Ncblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3Byb2dyZXNzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuX2Nsb2NrLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gKHRpY2tzIC0gdGhpcy5fbG9vcFN0YXJ0KSAvICh0aGlzLl9sb29wRW5kIC0gdGhpcy5fbG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRyYW5zcG9ydHMgY3VycmVudCB0aWNrIHBvc2l0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqICBAbmFtZSB0aWNrc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3RpY2tzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2sudGlja3M7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9jbG9jay50aWNrcyAhPT0gdCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgICAgICAvL3N0b3AgZXZlcnl0aGluZyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydFxuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RvcCcsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvY2suc2V0VGlja3NBdFRpbWUodCwgbm93KTtcblx0ICAgICAgICAgICAgICAgICAgICAvL3Jlc3RhcnQgaXQgd2l0aCB0aGUgbmV3IHRpbWVcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0Jywgbm93LCB0aGlzLnNlY29uZHMpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9jay5zZXRUaWNrc0F0VGltZSh0LCBub3cpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGNsb2NrJ3MgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBnZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgICAgVGhlIHRpY2sgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuZ2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuX2Nsb2NrLmdldFRpY2tzQXRUaW1lKHRpbWUpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBlbGFwc2VkIHNlY29uZHMgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGdldCB0aGUgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfSAgVGhlIG51bWJlciBvZiBlbGFwc2VkIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5nZXRTZWNvbmRzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2suZ2V0U2Vjb25kc0F0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUHVsc2VzIFBlciBRdWFydGVyIG5vdGUuIFRoaXMgaXMgdGhlIHNtYWxsZXN0IHJlc29sdXRpb25cblx0XHQgKiAgdGhlIFRyYW5zcG9ydCB0aW1pbmcgc3VwcG9ydHMuIFRoaXMgc2hvdWxkIGJlIHNldCBvbmNlXG5cdFx0ICogIG9uIGluaXRpYWxpemF0aW9uIGFuZCBub3Qgc2V0IGFnYWluLiBDaGFuZ2luZyB0aGlzIHZhbHVlXG5cdFx0ICogIGFmdGVyIG90aGVyIG9iamVjdHMgaGF2ZSBiZWVuIGNyZWF0ZWQgY2FuIGNhdXNlIHByb2JsZW1zLlxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgUFBRXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnUFBRJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHBxO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHBxKSB7XG5cdCAgICAgICAgICAgIHZhciBicG0gPSB0aGlzLmJwbS52YWx1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fcHBxID0gcHBxO1xuXHQgICAgICAgICAgICB0aGlzLmJwbS52YWx1ZSA9IGJwbTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGZyb20gQlBNIHRvIGZyZXF1ZW5jeSAoZmFjdG9yaW5nIGluIFBQUSlcblx0XHQgKiAgQHBhcmFtICB7QlBNfSAgYnBtIFRoZSBCUE0gdmFsdWUgdG8gY29udmVydCB0byBmcmVxdWVuY3lcblx0XHQgKiAgQHJldHVybiAge0ZyZXF1ZW5jeX0gIFRoZSBCUE0gYXMgYSBmcmVxdWVuY3kgd2l0aCBQUFEgZmFjdG9yZWQgaW4uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX2Zyb21Vbml0cyA9IGZ1bmN0aW9uIChicG0pIHtcblx0ICAgICAgICByZXR1cm4gMSAvICg2MCAvIGJwbSAvIHRoaXMuUFBRKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBmcm9tIGZyZXF1ZW5jeSAod2l0aCBQUFEpIGludG8gQlBNXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gIGZyZXEgVGhlIGNsb2NrcyBmcmVxdWVuY3kgdG8gY29udmVydCB0byBCUE1cblx0XHQgKiAgQHJldHVybiAge0JQTX0gIFRoZSBmcmVxdWVuY3kgdmFsdWUgYXMgQlBNLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLl90b1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gZnJlcSAvIHRoaXMuUFBRICogNjA7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFNZTkNJTkdcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB0aW1lIGFsaWduZWQgdG8gdGhlIG5leHQgc3ViZGl2aXNpb25cblx0XHQgKiAgb2YgdGhlIFRyYW5zcG9ydC4gSWYgdGhlIFRyYW5zcG9ydCBpcyBub3Qgc3RhcnRlZCxcblx0XHQgKiAgaXQgd2lsbCByZXR1cm4gMC5cblx0XHQgKiAgTm90ZTogdGhpcyB3aWxsIG5vdCB3b3JrIHByZWNpc2VseSBkdXJpbmcgdGVtcG8gcmFtcHMuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICBzdWJkaXZpc2lvbiAgVGhlIHN1YmRpdmlzaW9uIHRvIHF1YW50aXplIHRvXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBUaGUgY29udGV4dCB0aW1lIG9mIHRoZSBuZXh0IHN1YmRpdmlzaW9uLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KCk7IC8vdGhlIHRyYW5zcG9ydCBtdXN0IGJlIHN0YXJ0ZWRcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5uZXh0U3ViZGl2aXNpb24oXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5uZXh0U3ViZGl2aXNpb24gPSBmdW5jdGlvbiAoc3ViZGl2aXNpb24pIHtcblx0ICAgICAgICBzdWJkaXZpc2lvbiA9IHRoaXMudG9UaWNrcyhzdWJkaXZpc2lvbik7XG5cdCAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAvL2lmIHRoZSB0cmFuc3BvcnQncyBub3Qgc3RhcnRlZCwgcmV0dXJuIDBcblx0ICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIC8vdGhlIHJlbWFpbmRlciBvZiB0aGUgY3VycmVudCB0aWNrcyBhbmQgdGhlIHN1YmRpdmlzaW9uXG5cdCAgICAgICAgICAgIHZhciB0cmFuc3BvcnRQb3MgPSB0aGlzLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgIHZhciByZW1haW5pbmdUaWNrcyA9IHN1YmRpdmlzaW9uIC0gdHJhbnNwb3J0UG9zICUgc3ViZGl2aXNpb247XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay5uZXh0VGlja1RpbWUocmVtYWluaW5nVGlja3MsIG5vdyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBdHRhY2hlcyB0aGUgc2lnbmFsIHRvIHRoZSB0ZW1wbyBjb250cm9sIHNpZ25hbCBzbyB0aGF0XG5cdFx0ICogIGFueSBjaGFuZ2VzIGluIHRoZSB0ZW1wbyB3aWxsIGNoYW5nZSB0aGUgc2lnbmFsIGluIHRoZSBzYW1lXG5cdFx0ICogIHJhdGlvLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuU2lnbmFsfSBzaWduYWxcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSByYXRpbyBPcHRpb25hbGx5IHBhc3MgaW4gdGhlIHJhdGlvIGJldHdlZW5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdHdvIHNpZ25hbHMuIE90aGVyd2lzZSBpdCB3aWxsIGJlIGNvbXB1dGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gdGhlaXIgY3VycmVudCB2YWx1ZXMuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnN5bmNTaWduYWwgPSBmdW5jdGlvbiAoc2lnbmFsLCByYXRpbykge1xuXHQgICAgICAgIGlmICghcmF0aW8pIHtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIHN5bmMgcmF0aW9cblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIGlmIChzaWduYWwuZ2V0VmFsdWVBdFRpbWUobm93KSAhPT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmF0aW8gPSBzaWduYWwuZ2V0VmFsdWVBdFRpbWUobm93KSAvIHRoaXMuYnBtLmdldFZhbHVlQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByYXRpbyA9IDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHJhdGlvU2lnbmFsID0gbmV3IFRvbmUuR2FpbihyYXRpbyk7XG5cdCAgICAgICAgdGhpcy5icG0uY2hhaW4ocmF0aW9TaWduYWwsIHNpZ25hbC5fcGFyYW0pO1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZFNpZ25hbHMucHVzaCh7XG5cdCAgICAgICAgICAgICdyYXRpbyc6IHJhdGlvU2lnbmFsLFxuXHQgICAgICAgICAgICAnc2lnbmFsJzogc2lnbmFsLFxuXHQgICAgICAgICAgICAnaW5pdGlhbCc6IHNpZ25hbC52YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHNpZ25hbC52YWx1ZSA9IDA7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVuc3luY3MgYSBwcmV2aW91c2x5IHN5bmNlZCBzaWduYWwgZnJvbSB0aGUgdHJhbnNwb3J0J3MgY29udHJvbC5cblx0XHQgKiAgU2VlIFRvbmUuVHJhbnNwb3J0LnN5bmNTaWduYWwuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuU2lnbmFsfSBzaWduYWxcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUudW5zeW5jU2lnbmFsID0gZnVuY3Rpb24gKHNpZ25hbCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9zeW5jZWRTaWduYWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgIHZhciBzeW5jZWRTaWduYWwgPSB0aGlzLl9zeW5jZWRTaWduYWxzW2ldO1xuXHQgICAgICAgICAgICBpZiAoc3luY2VkU2lnbmFsLnNpZ25hbCA9PT0gc2lnbmFsKSB7XG5cdCAgICAgICAgICAgICAgICBzeW5jZWRTaWduYWwucmF0aW8uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgc3luY2VkU2lnbmFsLnNpZ25hbC52YWx1ZSA9IHN5bmNlZFNpZ25hbC5pbml0aWFsO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3luY2VkU2lnbmFscy5zcGxpY2UoaSwgMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jbG9jayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2JwbScpO1xuXHQgICAgICAgIHRoaXMuYnBtID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9yZXBlYXRlZEV2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdElOSVRJQUxJWkFUSU9OXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICB2YXIgVHJhbnNwb3J0Q29uc3RydWN0b3IgPSBUb25lLlRyYW5zcG9ydDtcblx0ICAgIFRvbmUuVHJhbnNwb3J0ID0gbmV3IFRyYW5zcG9ydENvbnN0cnVjdG9yKCk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0LlRyYW5zcG9ydCBpbnN0YW5jZW9mIFRyYW5zcG9ydENvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0ID0gY29udGV4dC5UcmFuc3BvcnQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQgPSBuZXcgVHJhbnNwb3J0Q29uc3RydWN0b3IoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zdG9yZSB0aGUgVHJhbnNwb3J0IG9uIHRoZSBjb250ZXh0IHNvIGl0IGNhbiBiZSByZXRyaWV2ZWQgbGF0ZXJcblx0ICAgICAgICBjb250ZXh0LlRyYW5zcG9ydCA9IFRvbmUuVHJhbnNwb3J0O1xuXHQgICAgfSk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2Nsb3NlJywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5UcmFuc3BvcnQgaW5zdGFuY2VvZiBUcmFuc3BvcnRDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICBjb250ZXh0LlRyYW5zcG9ydC5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlZvbHVtZSBpcyBhIHNpbXBsZSB2b2x1bWUgbm9kZSwgdXNlZnVsIGZvciBjcmVhdGluZyBhIHZvbHVtZSBmYWRlci5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbdm9sdW1lPTBdIHRoZSBpbml0aWFsIHZvbHVtZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB2b2wgPSBuZXcgVG9uZS5Wb2x1bWUoLTEyKTtcblx0XHQgKiBpbnN0cnVtZW50LmNoYWluKHZvbCwgVG9uZS5NYXN0ZXIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Wb2x1bWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd2b2x1bWUnXSwgVG9uZS5Wb2x1bWUpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiB0aGUgb3V0cHV0IG5vZGVcblx0XHRcdCAqIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMudm9sdW1lLCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHVubXV0ZWQgdm9sdW1lXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdW5tdXRlZFZvbHVtZSA9IG9wdGlvbnMudm9sdW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2b2x1bWUgY29udHJvbCBpbiBkZWNpYmVscy5cblx0XHRcdCAqICBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLm91dHB1dC5nYWluO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAvL3NldCB0aGUgbXV0ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Wb2x1bWUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuVm9sdW1lLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVm9sdW1lI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogdm9sdW1lLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVm9sdW1lLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnZvbHVtZS52YWx1ZSA9PT0gLUluZmluaXR5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMubXV0ZSAmJiBtdXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl91bm11dGVkVm9sdW1lID0gdGhpcy52b2x1bWUudmFsdWU7XG5cdCAgICAgICAgICAgICAgICAvL21heWJlIGl0IHNob3VsZCByYW1wIGhlcmU/XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZvbHVtZS52YWx1ZSA9IC1JbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm11dGUgJiYgIW11dGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudm9sdW1lLnZhbHVlID0gdGhpcy5fdW5tdXRlZFZvbHVtZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlZvbHVtZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Wb2x1bWUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5kaXNwb3NlKCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Wb2x1bWU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBzaW5nbGUgbWFzdGVyIG91dHB1dCB3aGljaCBpcyBjb25uZWN0ZWQgdG8gdGhlXG5cdFx0ICogICAgICAgICAgQXVkaW9EZXN0aW5hdGlvbk5vZGUgKGFrYSB5b3VyIHNwZWFrZXJzKS5cblx0XHQgKiAgICAgICAgICBJdCBwcm92aWRlcyB1c2VmdWwgY29udmVuaWVuY2VzIHN1Y2ggYXMgdGhlIGFiaWxpdHlcblx0XHQgKiAgICAgICAgICB0byBzZXQgdGhlIHZvbHVtZSBhbmQgbXV0ZSB0aGUgZW50aXJlIGFwcGxpY2F0aW9uLlxuXHRcdCAqICAgICAgICAgIEl0IGFsc28gZ2l2ZXMgeW91IHRoZSBhYmlsaXR5IHRvIGFwcGx5IG1hc3RlciBlZmZlY3RzIHRvIHlvdXIgYXBwbGljYXRpb24uXG5cdFx0ICogICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBMaWtlIFRvbmUuVHJhbnNwb3J0LCBBIHNpbmdsZSBUb25lLk1hc3RlciBpcyBjcmVhdGVkXG5cdFx0ICogICAgICAgICAgb24gaW5pdGlhbGl6YXRpb24gYW5kIHlvdSBkbyBub3QgbmVlZCB0byBleHBsaWNpdGx5IGNvbnN0cnVjdCBvbmUuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90aGUgYXVkaW8gd2lsbCBnbyBmcm9tIHRoZSBvc2NpbGxhdG9yIHRvIHRoZSBzcGVha2Vyc1xuXHRcdCAqIG9zY2lsbGF0b3IuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdFx0ICogLy9hIGNvbnZlbmllbmNlIGZvciBjb25uZWN0aW5nIHRvIHRoZSBtYXN0ZXIgb3V0cHV0IGlzIGFsc28gcHJvdmlkZWQ6XG5cdFx0ICogb3NjaWxsYXRvci50b01hc3RlcigpO1xuXHRcdCAqIC8vdGhlIGFib3ZlIHR3byBleGFtcGxlcyBhcmUgZXF1aXZhbGVudC5cblx0XHQgKi9cblx0ICAgIFRvbmUuTWFzdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgVG9uZS5nZXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDApO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSBwcml2YXRlIHZvbHVtZSBub2RlXG5cdFx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBtYXN0ZXIgb3V0cHV0LlxuXHRcdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHRcdCAqIEBzaWduYWxcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4odGhpcy5vdXRwdXQsIHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1hc3RlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NYXN0ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5NYXN0ZXIjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiBUb25lLk1hc3Rlci5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1hc3Rlci5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBtYXN0ZXIgZWZmZWN0cyBjaGFpbi4gTk9URTogdGhpcyB3aWxsIGRpc2Nvbm5lY3QgYW55IG5vZGVzIHdoaWNoIHdlcmUgcHJldmlvdXNseVxuXHRcdCAqICBjaGFpbmVkIGluIHRoZSBtYXN0ZXIgZWZmZWN0cyBjaGFpbi5cblx0XHQgKiAgQHBhcmFtIHtBdWRpb05vZGV8VG9uZX0gYXJncy4uLiBBbGwgYXJndW1lbnRzIHdpbGwgYmUgY29ubmVjdGVkIGluIGEgcm93XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBNYXN0ZXIgd2lsbCBiZSByb3V0ZWQgdGhyb3VnaCBpdC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTWFzdGVyfSAgdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc29tZSBvdmVyYWxsIGNvbXByZXNzaW9uIHRvIGtlZXAgdGhlIGxldmVscyBpbiBjaGVja1xuXHRcdCAqIHZhciBtYXN0ZXJDb21wcmVzc29yID0gbmV3IFRvbmUuQ29tcHJlc3Nvcih7XG5cdFx0ICogXHRcInRocmVzaG9sZFwiIDogLTYsXG5cdFx0ICogXHRcInJhdGlvXCIgOiAzLFxuXHRcdCAqIFx0XCJhdHRhY2tcIiA6IDAuNSxcblx0XHQgKiBcdFwicmVsZWFzZVwiIDogMC4xXG5cdFx0ICogfSk7XG5cdFx0ICogLy9naXZlIGEgbGl0dGxlIGJvb3N0IHRvIHRoZSBsb3dzXG5cdFx0ICogdmFyIGxvd0J1bXAgPSBuZXcgVG9uZS5GaWx0ZXIoMjAwLCBcImxvd3NoZWxmXCIpO1xuXHRcdCAqIC8vcm91dGUgZXZlcnl0aGluZyB0aHJvdWdoIHRoZSBmaWx0ZXJcblx0XHQgKiAvL2FuZCBjb21wcmVzc29yIGJlZm9yZSBnb2luZyB0byB0aGUgc3BlYWtlcnNcblx0XHQgKiBUb25lLk1hc3Rlci5jaGFpbihsb3dCdW1wLCBtYXN0ZXJDb21wcmVzc29yKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTWFzdGVyLnByb3RvdHlwZS5jaGFpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmlucHV0LmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLmlucHV0LmNoYWluLmFwcGx5KHRoaXMuaW5wdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuTWFzdGVyfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NYXN0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBVUdNRU5UIFRPTkUncyBQUk9UT1RZUEVcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIENvbm5lY3QgJ3RoaXMnIHRvIHRoZSBtYXN0ZXIgb3V0cHV0LiBTaG9ydGhhbmQgZm9yIHRoaXMuY29ubmVjdChUb25lLk1hc3Rlcilcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jb25uZWN0IGFuIG9zY2lsbGF0b3IgdG8gdGhlIG1hc3RlciBvdXRwdXRcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLnRvTWFzdGVyKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUudG9NYXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICBpZiAod2luZG93LkF1ZGlvTm9kZSkge1xuXHQgICAgICAgIC8vIEFsc28gYXVnbWVudCBBdWRpb05vZGUncyBwcm90b3R5cGUgdG8gaW5jbHVkZSB0b01hc3RlciBhcyBhIGNvbnZlbmllbmNlXG5cdCAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS50b01hc3RlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgIH1cblx0ICAgIC8qKlxuXHRcdCAqICBpbml0aWFsaXplIHRoZSBtb2R1bGUgYW5kIGxpc3RlbiBmb3IgbmV3IGF1ZGlvIGNvbnRleHRzXG5cdFx0ICovXG5cdCAgICB2YXIgTWFzdGVyQ29uc3RydWN0b3IgPSBUb25lLk1hc3Rlcjtcblx0ICAgIFRvbmUuTWFzdGVyID0gbmV3IE1hc3RlckNvbnN0cnVjdG9yKCk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIC8vIGlmIGl0IGFscmVhZHkgZXhpc3RzLCBqdXN0IHJlc3RvcmUgaXRcblx0ICAgICAgICBpZiAoY29udGV4dC5NYXN0ZXIgaW5zdGFuY2VvZiBNYXN0ZXJDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICBUb25lLk1hc3RlciA9IGNvbnRleHQuTWFzdGVyO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIFRvbmUuTWFzdGVyID0gbmV3IE1hc3RlckNvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGNvbnRleHQuTWFzdGVyID0gVG9uZS5NYXN0ZXI7XG5cdCAgICB9KTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignY2xvc2UnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0Lk1hc3RlciBpbnN0YW5jZW9mIE1hc3RlckNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIGNvbnRleHQuTWFzdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLk1hc3Rlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCYXNlIGNsYXNzIGZvciBzb3VyY2VzLiBTb3VyY2VzIGhhdmUgc3RhcnQvc3RvcCBtZXRob2RzXG5cdFx0ICogICAgICAgICAgYW5kIHRoZSBhYmlsaXR5IHRvIGJlIHN5bmNlZCB0byB0aGVcblx0XHQgKiAgICAgICAgICBzdGFydC9zdG9wIG9mIFRvbmUuVHJhbnNwb3J0LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9NdWx0aXBsZSBzdGF0ZSBjaGFuZ2UgZXZlbnRzIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLFxuXHRcdCAqIC8vYnV0IG11c3QgYmUgc2V0IGluIHRoZSBjb3JyZWN0IG9yZGVyIGFuZCB3aXRoIGFzY2VuZGluZyB0aW1lc1xuXHRcdCAqXG5cdFx0ICogLy8gT0tcblx0XHQgKiBzdGF0ZS5zdGFydCgpLnN0b3AoXCIrMC4yXCIpO1xuXHRcdCAqIC8vIEFORFxuXHRcdCAqIHN0YXRlLnN0YXJ0KCkuc3RvcChcIiswLjJcIikuc3RhcnQoXCIrMC40XCIpLnN0b3AoXCIrMC43XCIpXG5cdFx0ICpcblx0XHQgKiAvLyBCQURcblx0XHQgKiBzdGF0ZS5zdG9wKFwiKzAuMlwiKS5zdGFydCgpO1xuXHRcdCAqIC8vIE9SXG5cdFx0ICogc3RhdGUuc3RhcnQoXCIrMC4zXCIpLnN0b3AoXCIrMC4yXCIpO1xuXHRcdCAqXG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlNvdXJjZS5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IHZvbHVtZSBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIHNvdXJjZS52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBcdEtlZXAgdHJhY2sgb2YgdGhlIHNjaGVkdWxlZCBzdGF0ZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZVN0YXRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG5ldyBUb25lLlRpbWVsaW5lU3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5tZW1vcnkgPSAxMDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHN5bmNlZCBgc3RhcnRgIGNhbGxiYWNrIGZ1bmN0aW9uIGZyb20gdGhlIHRyYW5zcG9ydFxuXHRcdFx0ICogIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgS2VlcCB0cmFjayBvZiBhbGwgb2YgdGhlIHNjaGVkdWxlZCBldmVudCBpZHNcblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSBbXTtcblx0ICAgICAgICAvL21ha2UgdGhlIG91dHB1dCBleHBsaWNpdGx5IHN0ZXJlb1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudCA9IDI7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLm91dHB1dC5vdXRwdXQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgLy9tdXRlIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNvdXJjZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNvdXJjZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUoVG9uZS5UcmFuc3BvcnQuc2Vjb25kcyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiBzb3VyY2UubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Tb3VyY2UucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvL292ZXJ3cml0ZSB0aGVzZSBmdW5jdGlvbnNcblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5fc3RhcnQgPSBUb25lLm5vT3A7XG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUucmVzdGFydCA9IFRvbmUubm9PcDtcblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5fc3RvcCA9IFRvbmUubm9PcDtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgc291cmNlIGF0IHRoZSBzcGVjaWZpZWQgdGltZS4gSWYgbm8gdGltZSBpcyBnaXZlbixcblx0XHQgKiAgc3RhcnQgdGhlIHNvdXJjZSBub3cuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgc291cmNlIHNob3VsZCBiZSBzdGFydGVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RhcnQoXCIrMC41XCIpOyAvL3N0YXJ0cyB0aGUgc291cmNlIDAuNSBzZWNvbmRzIGZyb20gbm93XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0LCBkdXJhdGlvbikge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGltZSkgJiYgdGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydC5zZWNvbmRzO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9pZiBpdCdzIHN0YXJ0ZWQsIHN0b3AgaXQgYW5kIHJlc3RhcnQgaXRcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RhcnRlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMucmVzdGFydCh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIG9mZnNldCB0aW1lIHRvIHRoZSBldmVudFxuXHQgICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgZXZlbnQub2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgICAgICAgICBldmVudC5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNjaGVkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCh0LCBvZmZzZXQsIGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgdGltZSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWQucHVzaChzY2hlZCk7XG5cdCAgICAgICAgICAgICAgICAvL2lmIGl0J3MgYWxyZWFkeSBzdGFydGVkXG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNlZFN0YXJ0KHRoaXMubm93KCksIFRvbmUuVHJhbnNwb3J0LnNlY29uZHMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgc291cmNlIGF0IHRoZSBzcGVjaWZpZWQgdGltZS4gSWYgbm8gdGltZSBpcyBnaXZlbixcblx0XHQgKiAgc3RvcCB0aGUgc291cmNlIG5vdy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBzb3VyY2Ugc2hvdWxkIGJlIHN0b3BwZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zdG9wKCk7IC8vIHN0b3BzIHRoZSBzb3VyY2UgaW1tZWRpYXRlbHlcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRpbWUpICYmIHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnQuc2Vjb25kcztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghdGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3AuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgc2NoZWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZSh0aGlzLl9zdG9wLmJpbmQodGhpcyksIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWQucHVzaChzY2hlZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTeW5jIHRoZSBzb3VyY2UgdG8gdGhlIFRyYW5zcG9ydCBzbyB0aGF0IGFsbCBzdWJzZXF1ZW50XG5cdFx0ICogIGNhbGxzIHRvIGBzdGFydGAgYW5kIGBzdG9wYCBhcmUgc3luY2VkIHRvIHRoZSBUcmFuc3BvcnRUaW1lXG5cdFx0ICogIGluc3RlYWQgb2YgdGhlIEF1ZGlvQ29udGV4dCB0aW1lLlxuXHRcdCAqXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc3luYyB0aGUgc291cmNlIHNvIHRoYXQgaXQgcGxheXMgYmV0d2VlbiAwIGFuZCAwLjMgb24gdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lXG5cdFx0ICogc291cmNlLnN5bmMoKS5zdGFydCgwKS5zdG9wKDAuMyk7XG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KCk7XG5cdFx0ICpcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgd2l0aCBhbiBvZmZzZXQgYW5kIHRoZSBzeW5jJ2VkIHNvdXJjZXNcblx0XHQgKiAvL3dpbGwgc3RhcnQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb25cblx0XHQgKiBzb3VyY2Uuc3luYygpLnN0YXJ0KDAuMSk7XG5cdFx0ICogLy90aGUgc291cmNlIHdpbGwgYmUgaW52b2tlZCB3aXRoIGFuIG9mZnNldCBvZiAwLjRcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydChcIiswLjVcIiwgMC41KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZCA9IHRydWU7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkU3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIGlmIChvZmZzZXQgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIHBsYXliYWNrIHN0YXRlIGF0IHRoYXQgdGltZVxuXHQgICAgICAgICAgICAgICAgdmFyIHN0YXRlRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQob2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgIC8vIGxpc3RlbiBmb3Igc3RhcnQgZXZlbnRzIHdoaWNoIG1heSBvY2N1ciBpbiB0aGUgbWlkZGxlIG9mIHRoZSBzeW5jJ2VkIHRpbWVcblx0ICAgICAgICAgICAgICAgIGlmIChzdGF0ZUV2ZW50ICYmIHN0YXRlRXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBzdGF0ZUV2ZW50LnRpbWUgIT09IG9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgb2Zmc2V0XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gb2Zmc2V0IC0gdGhpcy50b1NlY29uZHMoc3RhdGVFdmVudC50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlRXZlbnQuZHVyYXRpb24pIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhzdGF0ZUV2ZW50LmR1cmF0aW9uKSAtIHN0YXJ0T2Zmc2V0O1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCh0aW1lLCB0aGlzLnRvU2Vjb25kcyhzdGF0ZUV2ZW50Lm9mZnNldCkgKyBzdGFydE9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZFN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB2YXIgc2Vjb25kcyA9IFRvbmUuVHJhbnNwb3J0LmdldFNlY29uZHNBdFRpbWUoTWF0aC5tYXgodGltZSAtIHRoaXMuc2FtcGxlVGltZSwgMCkpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUoc2Vjb25kcykgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5vbignc3RhcnQgbG9vcFN0YXJ0JywgdGhpcy5fc3luY2VkU3RhcnQpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9uKCdzdG9wIHBhdXNlIGxvb3BFbmQnLCB0aGlzLl9zeW5jZWRTdG9wKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVW5zeW5jIHRoZSBzb3VyY2UgdG8gdGhlIFRyYW5zcG9ydC4gU2VlIFRvbmUuU291cmNlLnN5bmNcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQub2ZmKCdzdG9wIHBhdXNlIGxvb3BFbmQnLCB0aGlzLl9zeW5jZWRTdG9wKTtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQub2ZmKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9zeW5jZWRTdGFydCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3N5bmNlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8vIGNsZWFyIGFsbCBvZiB0aGUgc2NoZWR1bGVkIGlkc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2NoZWR1bGVkLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBpZCA9IHRoaXMuX3NjaGVkdWxlZFtpXTtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQuY2xlYXIoaWQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSBbXTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwoMCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICpcdENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLnVuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Tb3VyY2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBBdWRpb0J1ZmZlci5jb3B5VG8vRnJvbUNoYW5uZWwgcG9seWZpbGxcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghQXVkaW9CdWZmZXIucHJvdG90eXBlLmNvcHlUb0NoYW5uZWwpIHtcblx0ICAgICAgICAgICAgQXVkaW9CdWZmZXIucHJvdG90eXBlLmNvcHlUb0NoYW5uZWwgPSBmdW5jdGlvbiAoc3JjLCBjaGFuTnVtLCBzdGFydCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSB0aGlzLmdldENoYW5uZWxEYXRhKGNoYW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydCB8fCAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFubmVsLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpICsgc3RhcnRdID0gc3JjW2ldO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBBdWRpb0J1ZmZlci5wcm90b3R5cGUuY29weUZyb21DaGFubmVsID0gZnVuY3Rpb24gKGRlc3QsIGNoYW5OdW0sIHN0YXJ0KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IHRoaXMuZ2V0Q2hhbm5lbERhdGEoY2hhbk51bSk7XG5cdCAgICAgICAgICAgICAgICBzdGFydCA9IHN0YXJ0IHx8IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlc3QubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBkZXN0W2ldID0gY2hhbm5lbFtpICsgc3RhcnRdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCdWZmZXIgbG9hZGluZyBhbmQgc3RvcmFnZS4gVG9uZS5CdWZmZXIgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IGFsbFxuXHRcdCAqICAgICAgICAgIGNsYXNzZXMgdGhhdCBtYWtlIHJlcXVlc3RzIGZvciBhdWRpbyBmaWxlcyBzdWNoIGFzIFRvbmUuUGxheWVyLFxuXHRcdCAqICAgICAgICAgIFRvbmUuU2FtcGxlciBhbmQgVG9uZS5Db252b2x2ZXIuXG5cdFx0ICpcblx0XHQgKiAgICAgICAgICBBc2lkZSBmcm9tIGxvYWQgY2FsbGJhY2tzIGZyb20gaW5kaXZpZHVhbCBidWZmZXJzLCBUb25lLkJ1ZmZlclxuXHRcdCAqICBcdFx0cHJvdmlkZXMgZXZlbnRzIHdoaWNoIGtlZXAgdHJhY2sgb2YgdGhlIGxvYWRpbmcgcHJvZ3Jlc3Ncblx0XHQgKiAgXHRcdG9mIF9hbGxfIG9mIHRoZSBidWZmZXJzLiBUaGVzZSBhcmUgVG9uZS5CdWZmZXIub24oXCJsb2FkXCIgLyBcInByb2dyZXNzXCIgLyBcImVycm9yXCIpXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvQnVmZmVyfFN0cmluZ30gdXJsIFRoZSB1cmwgdG8gbG9hZCwgb3IgdGhlIGF1ZGlvIGJ1ZmZlciB0byBzZXQuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb249fSBvbmxvYWQgQSBjYWxsYmFjayB3aGljaCBpcyBpbnZva2VkIGFmdGVyIHRoZSBidWZmZXIgaXMgbG9hZGVkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIGBUb25lLkJ1ZmZlci5vbignbG9hZCcsIGNhbGxiYWNrKWAgaW5zdGVhZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmNlIGl0IHdpbGwgZ2l2ZSB5b3UgYSBjYWxsYmFjayB3aGVuIF9hbGxfIGJ1ZmZlcnMgYXJlIGxvYWRlZC5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9uZXJyb3IgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBpZiB0aGVyZSBpcyBhbiBlcnJvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBidWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIoXCJwYXRoL3RvL3NvdW5kLm1wM1wiLCBmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly90aGUgYnVmZmVyIGlzIG5vdyBhdmFpbGFibGUuXG5cdFx0ICogXHR2YXIgYnVmZiA9IGJ1ZmZlci5nZXQoKTtcblx0XHQgKiB9KTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NhbiBsb2FkIHByb3ZpZGUgZmFsbGJhY2sgZXh0ZW5zaW9uIHR5cGVzIGlmIHRoZSBmaXJzdCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuXG5cdFx0ICogdmFyIGJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihcInBhdGgvdG8vc291bmQuW21wM3xvZ2d8d2F2XVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3VybCcsXG5cdCAgICAgICAgICAgICdvbmxvYWQnLFxuXHQgICAgICAgICAgICAnb25lcnJvcidcblx0ICAgICAgICBdLCBUb25lLkJ1ZmZlcik7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHN0b3JlcyB0aGUgbG9hZGVkIEF1ZGlvQnVmZmVyXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGluZGljYXRlcyBpZiB0aGUgYnVmZmVyIHNob3VsZCBiZSByZXZlcnNlZCBvciBub3Rcblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmV2ZXJzZWQgPSBvcHRpb25zLnJldmVyc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIFhIUlxuXHRcdFx0ICogIEB0eXBlICB7WE1MSHR0cFJlcXVlc3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3hociA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBQcml2YXRlIGNhbGxiYWNrIHdoZW4gdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25sb2FkID0gVG9uZS5ub09wO1xuXHQgICAgICAgIGlmIChvcHRpb25zLnVybCBpbnN0YW5jZW9mIEF1ZGlvQnVmZmVyIHx8IG9wdGlvbnMudXJsIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5zZXQob3B0aW9ucy51cmwpO1xuXHQgICAgICAgICAgICAvLyBpbnZva2UgdGhlIG9ubG9hZCBjYWxsYmFja1xuXHQgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmxvYWQpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvYWRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25sb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbmxvYWQgPSBvcHRpb25zLm9ubG9hZDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhvcHRpb25zLnVybCkpIHtcblx0ICAgICAgICAgICAgdGhpcy5sb2FkKG9wdGlvbnMudXJsKS50aGVuKG9wdGlvbnMub25sb2FkKS5jYXRjaChvcHRpb25zLm9uZXJyb3IpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJ1ZmZlcik7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3VybCc6IHVuZGVmaW5lZCxcblx0ICAgICAgICAncmV2ZXJzZSc6IGZhbHNlLFxuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ29uZXJyb3InOiBUb25lLm5vT3Bcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGFzcyBpbiBhbiBBdWRpb0J1ZmZlciBvciBUb25lLkJ1ZmZlciB0byBzZXQgdGhlIHZhbHVlXG5cdFx0ICogIG9mIHRoaXMgYnVmZmVyLlxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvQnVmZmVyfFRvbmUuQnVmZmVyfSBidWZmZXIgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIGlmIChidWZmZXIubG9hZGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9idWZmZXIgPSBidWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBidWZmZXIuX29ubG9hZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnNldChidWZmZXIpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IGJ1ZmZlcjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEByZXR1cm4ge0F1ZGlvQnVmZmVyfSBUaGUgYXVkaW8gYnVmZmVyIHN0b3JlZCBpbiB0aGUgb2JqZWN0LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBNYWtlcyBhbiB4aHIgcmVxZXN0IGZvciB0aGUgc2VsZWN0ZWQgdXJsIHRoZW4gZGVjb2Rlc1xuXHRcdCAqICB0aGUgZmlsZSBhcyBhbiBhdWRpbyBidWZmZXIuIEludm9rZXNcblx0XHQgKiAgdGhlIGNhbGxiYWNrIG9uY2UgdGhlIGF1ZGlvIGJ1ZmZlciBsb2Fkcy5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgdXJsIG9mIHRoZSBidWZmZXIgdG8gbG9hZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICBmaWxldHlwZSBzdXBwb3J0IGRlcGVuZHMgb24gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgYnJvd3Nlci5cblx0XHQgKiAgQHJldHVybnMge1Byb21pc2V9IHJldHVybnMgYSBQcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggdGhlIFRvbmUuQnVmZmVyXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uICh1cmwsIG9ubG9hZCwgb25lcnJvcikge1xuXHQgICAgICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKGxvYWQsIGVycm9yKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3hociA9IFRvbmUuQnVmZmVyLmxvYWQodXJsLCAvL3N1Y2Nlc3Ncblx0ICAgICAgICAgICAgZnVuY3Rpb24gKGJ1ZmYpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3hociA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNldChidWZmKTtcblx0ICAgICAgICAgICAgICAgIGxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICBpZiAob25sb2FkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb25sb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LmJpbmQodGhpcyksIC8vZXJyb3Jcblx0ICAgICAgICAgICAgZnVuY3Rpb24gKGVycikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIGVycm9yKGVycik7XG5cdCAgICAgICAgICAgICAgICBpZiAob25lcnJvcikge1xuXHQgICAgICAgICAgICAgICAgICAgIG9uZXJyb3IoZXJyKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHJldHVybiBwcm9taXNlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNwb3NlIGFuZCBkaXNjb25uZWN0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgaWYgKHRoaXMuX3hocikge1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5fcmVtb3ZlRnJvbURvd25sb2FkUXVldWUodGhpcy5feGhyKTtcblx0ICAgICAgICAgICAgdGhpcy5feGhyLmFib3J0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3hociA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXIgaXMgbG9hZGVkIG9yIG5vdFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA+IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZHVyYXRpb24gb2YgdGhlIGJ1ZmZlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBkdXJhdGlvblxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ2R1cmF0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fYnVmZmVyKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciBpbiBzYW1wbGVzXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgbGVuZ3RoXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fYnVmZmVyKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmxlbmd0aDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIGRpc2NyZXRlIGF1ZGlvIGNoYW5uZWxzLiBSZXR1cm5zIDAgaWYgbm8gYnVmZmVyXG5cdFx0ICogaXMgbG9hZGVkLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIG51bWJlck9mQ2hhbm5lbHNcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdudW1iZXJPZkNoYW5uZWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fYnVmZmVyKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgYXVkaW8gYnVmZmVyIGZyb20gdGhlIGFycmF5LiBUbyBjcmVhdGUgYSBtdWx0aWNoYW5uZWwgQXVkaW9CdWZmZXIsXG5cdFx0ICogIHBhc3MgaW4gYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LlxuXHRcdCAqICBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZpbGwgdGhlIGF1ZGlvIGJ1ZmZlclxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSkge1xuXHQgICAgICAgIHZhciBpc011bHRpZGltZW5zaW9uYWwgPSBhcnJheVswXS5sZW5ndGggPiAwO1xuXHQgICAgICAgIHZhciBjaGFubmVscyA9IGlzTXVsdGlkaW1lbnNpb25hbCA/IGFycmF5Lmxlbmd0aCA6IDE7XG5cdCAgICAgICAgdmFyIGxlbiA9IGlzTXVsdGlkaW1lbnNpb25hbCA/IGFycmF5WzBdLmxlbmd0aCA6IGFycmF5Lmxlbmd0aDtcblx0ICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlcihjaGFubmVscywgbGVuLCB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgaWYgKCFpc011bHRpZGltZW5zaW9uYWwgJiYgY2hhbm5lbHMgPT09IDEpIHtcblx0ICAgICAgICAgICAgYXJyYXkgPSBbYXJyYXldO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNoYW5uZWxzOyBjKyspIHtcblx0ICAgICAgICAgICAgYnVmZmVyLmNvcHlUb0NoYW5uZWwoYXJyYXlbY10sIGMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogXHRTdW1zIG11bGlwbGUgY2hhbm5lbHMgaW50byAxIGNoYW5uZWxcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBjaGFubmVsIE9wdGlvbmFsbHkgb25seSBjb3B5IGEgc2luZ2xlIGNoYW5uZWwgZnJvbSB0aGUgYXJyYXkuXG5cdFx0ICogIEByZXR1cm4ge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnRvTW9ubyA9IGZ1bmN0aW9uIChjaGFuTnVtKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIoY2hhbk51bSkpIHtcblx0ICAgICAgICAgICAgdGhpcy5mcm9tQXJyYXkodGhpcy50b0FycmF5KGNoYW5OdW0pKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgb3V0cHV0QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMubGVuZ3RoKTtcblx0ICAgICAgICAgICAgdmFyIG51bUNoYW5uZWxzID0gdGhpcy5udW1iZXJPZkNoYW5uZWxzO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsID0gMDsgY2hhbm5lbCA8IG51bUNoYW5uZWxzOyBjaGFubmVsKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsQXJyYXkgPSB0aGlzLnRvQXJyYXkoY2hhbm5lbCk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5uZWxBcnJheS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIG91dHB1dEFycmF5W2ldICs9IGNoYW5uZWxBcnJheVtpXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL2RpdmlkZSBieSB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzXG5cdCAgICAgICAgICAgIG91dHB1dEFycmF5ID0gb3V0cHV0QXJyYXkubWFwKGZ1bmN0aW9uIChzYW1wbGUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBzYW1wbGUgLyBudW1DaGFubmVscztcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuZnJvbUFycmF5KG91dHB1dEFycmF5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogXHRHZXQgdGhlIGJ1ZmZlciBhcyBhbiBhcnJheS4gU2luZ2xlIGNoYW5uZWwgYnVmZmVycyB3aWxsIHJldHVybiBhIDEtZGltZW5zaW9uYWxcblx0XHQgKiBcdEZsb2F0MzJBcnJheSwgYW5kIG11bHRpY2hhbm5lbCBidWZmZXJzIHdpbGwgcmV0dXJuIG11bHRpZGltZW5zaW9uYWwgYXJyYXlzLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IGNoYW5uZWwgT3B0aW9uYWxseSBvbmx5IGNvcHkgYSBzaW5nbGUgY2hhbm5lbCBmcm9tIHRoZSBhcnJheS5cblx0XHQgKiAgQHJldHVybiB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIChjaGFubmVsKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIoY2hhbm5lbCkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2hhbm5lbERhdGEoY2hhbm5lbCk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLm51bWJlck9mQ2hhbm5lbHMgPT09IDEpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9BcnJheSgwKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgcmV0ID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgdGhpcy5udW1iZXJPZkNoYW5uZWxzOyBjKyspIHtcblx0ICAgICAgICAgICAgICAgIHJldFtjXSA9IHRoaXMuZ2V0Q2hhbm5lbERhdGEoYyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHJldDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIEZsb2F0MzJBcnJheSByZXByZXNlbnRpbmcgdGhlIFBDTSBhdWRpbyBkYXRhIGZvciB0aGUgc3BlY2lmaWMgY2hhbm5lbC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgY2hhbm5lbCAgVGhlIGNoYW5uZWwgbnVtYmVyIHRvIHJldHVyblxuXHRcdCAqICBAcmV0dXJuICB7RmxvYXQzMkFycmF5fSAgVGhlIGF1ZGlvIGFzIGEgVHlwZWRBcnJheVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLmdldENoYW5uZWxEYXRhID0gZnVuY3Rpb24gKGNoYW5uZWwpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmdldENoYW5uZWxEYXRhKGNoYW5uZWwpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDdXQgYSBzdWJzZWN0aW9uIG9mIHRoZSBhcnJheSBhbmQgcmV0dXJuIGEgYnVmZmVyIG9mIHRoZVxuXHRcdCAqICBzdWJzZWN0aW9uLiBEb2VzIG5vdCBtb2RpZnkgdGhlIG9yaWdpbmFsIGJ1ZmZlclxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0IFRoZSB0aW1lIHRvIHN0YXJ0IHRoZSBzbGljZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBlbmQgVGhlIGVuZCB0aW1lIHRvIHNsaWNlLiBJZiBub25lIGlzIGdpdmVuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICB3aWxsIGRlZmF1bHQgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiAoc3RhcnQsIGVuZCkge1xuXHQgICAgICAgIGVuZCA9IFRvbmUuZGVmYXVsdEFyZyhlbmQsIHRoaXMuZHVyYXRpb24pO1xuXHQgICAgICAgIHZhciBzdGFydFNhbXBsZXMgPSBNYXRoLmZsb29yKHRoaXMuY29udGV4dC5zYW1wbGVSYXRlICogdGhpcy50b1NlY29uZHMoc3RhcnQpKTtcblx0ICAgICAgICB2YXIgZW5kU2FtcGxlcyA9IE1hdGguZmxvb3IodGhpcy5jb250ZXh0LnNhbXBsZVJhdGUgKiB0aGlzLnRvU2Vjb25kcyhlbmQpKTtcblx0ICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubnVtYmVyT2ZDaGFubmVsczsgaSsrKSB7XG5cdCAgICAgICAgICAgIHJlcGxhY2VtZW50W2ldID0gdGhpcy50b0FycmF5KGkpLnNsaWNlKHN0YXJ0U2FtcGxlcywgZW5kU2FtcGxlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciByZXRCdWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIoKS5mcm9tQXJyYXkocmVwbGFjZW1lbnQpO1xuXHQgICAgICAgIHJldHVybiByZXRCdWZmZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldmVyc2UgdGhlIGJ1ZmZlci5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5fcmV2ZXJzZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm51bWJlck9mQ2hhbm5lbHM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbCh0aGlzLmdldENoYW5uZWxEYXRhKGkpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXZlcnNlIHRoZSBidWZmZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIHJldmVyc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdyZXZlcnNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2ZXJzZWQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyZXYpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3JldmVyc2VkICE9PSByZXYpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JldmVyc2VkID0gcmV2O1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmV2ZXJzZSgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIFNUQVRJQyBNRVRIT0RTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vc3RhdGljYWxseSBpbmhlcml0cyBFbWl0dGVyIG1ldGhvZHNcblx0ICAgIFRvbmUuRW1pdHRlci5taXhpbihUb25lLkJ1ZmZlcik7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIHN0YXRpYyBxdWV1ZSBmb3IgYWxsIG9mIHRoZSB4aHIgcmVxdWVzdHNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUgPSBbXTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIHBhdGggd2hpY2ggaXMgcHJlZml4ZWQgYmVmb3JlIGV2ZXJ5IHVybC5cblx0XHQgKiAgQHR5cGUgIHtTdHJpbmd9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmJhc2VVcmwgPSAnJztcblx0ICAgIC8qKlxuXHRcdCAqICBDcmVhdGUgYSBUb25lLkJ1ZmZlciBmcm9tIHRoZSBhcnJheS4gVG8gY3JlYXRlIGEgbXVsdGljaGFubmVsIEF1ZGlvQnVmZmVyLFxuXHRcdCAqICBwYXNzIGluIGEgbXVsdGlkaW1lbnNpb25hbCBhcnJheS5cblx0XHQgKiAgQHBhcmFtIHtGbG9hdDMyQXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsIHRoZSBhdWRpbyBidWZmZXJcblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9IEEgVG9uZS5CdWZmZXIgY3JlYXRlZCBmcm9tIHRoZSBhcnJheVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KSB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyBUb25lLkJ1ZmZlcigpLmZyb21BcnJheShhcnJheSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ3JlYXRlcyBhIFRvbmUuQnVmZmVyIGZyb20gYSBVUkwsIHJldHVybnMgYSBwcm9taXNlXG5cdFx0ICogd2hpY2ggcmVzb2x2ZXMgdG8gYSBUb25lLkJ1ZmZlclxuXHRcdCAqIEBwYXJhbSAge1N0cmluZ30gdXJsIFRoZSB1cmwgdG8gbG9hZC5cblx0XHQgKiBAcmV0dXJuIHtQcm9taXNlPFRvbmUuQnVmZmVyPn0gICAgIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byBhIFRvbmUuQnVmZmVyXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5mcm9tVXJsID0gZnVuY3Rpb24gKHVybCkge1xuXHQgICAgICAgIHZhciBidWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIoKTtcblx0ICAgICAgICByZXR1cm4gYnVmZmVyLmxvYWQodXJsKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZW1vdmUgYW4geGhyIHJlcXVlc3QgZnJvbSB0aGUgZG93bmxvYWQgcXVldWVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlID0gZnVuY3Rpb24gKHJlcXVlc3QpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5pbmRleE9mKHJlcXVlc3QpO1xuXHQgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIExvYWRzIGEgdXJsIHVzaW5nIFhNTEh0dHBSZXF1ZXN0LlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdXJsXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IG9ubG9hZFxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBvbmVycm9yXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IG9ucHJvZ3Jlc3Ncblx0XHQgKiAgQHJldHVybiB7WE1MSHR0cFJlcXVlc3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5sb2FkID0gZnVuY3Rpb24gKHVybCwgb25sb2FkLCBvbmVycm9yKSB7XG5cdCAgICAgICAgLy9kZWZhdWx0XG5cdCAgICAgICAgb25sb2FkID0gVG9uZS5kZWZhdWx0QXJnKG9ubG9hZCwgVG9uZS5ub09wKTtcblx0ICAgICAgICAvLyB0ZXN0IGlmIHRoZSB1cmwgY29udGFpbnMgbXVsdGlwbGUgZXh0ZW5zaW9uc1xuXHQgICAgICAgIHZhciBtYXRjaGVzID0gdXJsLm1hdGNoKC9cXFsoLitcXHw/KStcXF0kLyk7XG5cdCAgICAgICAgaWYgKG1hdGNoZXMpIHtcblx0ICAgICAgICAgICAgdmFyIGV4dGVuc2lvbnMgPSBtYXRjaGVzWzFdLnNwbGl0KCd8Jyk7XG5cdCAgICAgICAgICAgIHZhciBleHRlbnNpb24gPSBleHRlbnNpb25zWzBdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLkJ1ZmZlci5zdXBwb3J0c1R5cGUoZXh0ZW5zaW9uc1tpXSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24gPSBleHRlbnNpb25zW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKG1hdGNoZXNbMF0sIGV4dGVuc2lvbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoZSkge1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5fcmVtb3ZlRnJvbURvd25sb2FkUXVldWUocmVxdWVzdCk7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLmVtaXQoJ2Vycm9yJywgZSk7XG5cdCAgICAgICAgICAgIGlmIChvbmVycm9yKSB7XG5cdCAgICAgICAgICAgICAgICBvbmVycm9yKGUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBvblByb2dyZXNzKCkge1xuXHQgICAgICAgICAgICAvL2NhbGN1bGF0ZSB0aGUgcHJvZ3Jlc3Ncblx0ICAgICAgICAgICAgdmFyIHRvdGFsUHJvZ3Jlc3MgPSAwO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0b3RhbFByb2dyZXNzICs9IFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlW2ldLnByb2dyZXNzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLmVtaXQoJ3Byb2dyZXNzJywgdG90YWxQcm9ncmVzcyAvIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLmxlbmd0aCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdCAgICAgICAgcmVxdWVzdC5vcGVuKCdHRVQnLCBUb25lLkJ1ZmZlci5iYXNlVXJsICsgdXJsLCB0cnVlKTtcblx0ICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XG5cdCAgICAgICAgLy9zdGFydCBvdXQgYXMgMFxuXHQgICAgICAgIHJlcXVlc3QucHJvZ3Jlc3MgPSAwO1xuXHQgICAgICAgIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLnB1c2gocmVxdWVzdCk7XG5cdCAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCkge1xuXHQgICAgICAgICAgICAgICAgVG9uZS5jb250ZXh0LmRlY29kZUF1ZGlvRGF0YShyZXF1ZXN0LnJlc3BvbnNlKS50aGVuKGZ1bmN0aW9uIChidWZmKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5wcm9ncmVzcyA9IDE7XG5cdCAgICAgICAgICAgICAgICAgICAgb25Qcm9ncmVzcygpO1xuXHQgICAgICAgICAgICAgICAgICAgIG9ubG9hZChidWZmKTtcblx0ICAgICAgICAgICAgICAgICAgICBUb25lLkJ1ZmZlci5fcmVtb3ZlRnJvbURvd25sb2FkUXVldWUocmVxdWVzdCk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvL2VtaXQgdGhlIGV2ZW50IGF0IHRoZSBlbmRcblx0ICAgICAgICAgICAgICAgICAgICAgICAgVG9uZS5CdWZmZXIuZW1pdCgnbG9hZCcpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBUb25lLkJ1ZmZlci5fcmVtb3ZlRnJvbURvd25sb2FkUXVldWUocmVxdWVzdCk7XG5cdCAgICAgICAgICAgICAgICAgICAgb25FcnJvcignVG9uZS5CdWZmZXI6IGNvdWxkIG5vdCBkZWNvZGUgYXVkaW8gZGF0YTogJyArIHVybCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIG9uRXJyb3IoJ1RvbmUuQnVmZmVyOiBjb3VsZCBub3QgbG9jYXRlIGZpbGU6ICcgKyB1cmwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuXHQgICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUpIHtcblx0ICAgICAgICAgICAgICAgIC8vb25seSBnbyB0byA5NSUsIHRoZSBsYXN0IDUlIGlzIHdoZW4gdGhlIGF1ZGlvIGlzIGRlY29kZWRcblx0ICAgICAgICAgICAgICAgIHJlcXVlc3QucHJvZ3Jlc3MgPSBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCAqIDAuOTU7XG5cdCAgICAgICAgICAgICAgICBvblByb2dyZXNzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXF1ZXN0LnNlbmQoKTtcblx0ICAgICAgICByZXR1cm4gcmVxdWVzdDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCBhbGwgb2YgdGhlIGRvd25sb2FkcyBpbiBwcm9ncmVzc1xuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuY2FuY2VsRG93bmxvYWRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdCkge1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5fcmVtb3ZlRnJvbURvd25sb2FkUXVldWUocmVxdWVzdCk7XG5cdCAgICAgICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gVG9uZS5CdWZmZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENoZWNrcyBhIHVybCdzIGV4dGVuc2lvbiB0byBzZWUgaWYgdGhlIGN1cnJlbnQgYnJvd3NlciBjYW4gcGxheSB0aGF0IGZpbGUgdHlwZS5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgdXJsL2V4dGVuc2lvbiB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm4ge0Jvb2xlYW59IElmIHRoZSBmaWxlIGV4dGVuc2lvbiBjYW4gYmUgcGxheWVkXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkJ1ZmZlci5zdXBwb3J0c1R5cGUoXCJ3YXZcIik7IC8vcmV0dXJucyB0cnVlXG5cdFx0ICogVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlKFwicGF0aC90by9maWxlLndhdlwiKTsgLy9yZXR1cm5zIHRydWVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZSA9IGZ1bmN0aW9uICh1cmwpIHtcblx0ICAgICAgICB2YXIgZXh0ZW5zaW9uID0gdXJsLnNwbGl0KCcuJyk7XG5cdCAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uW2V4dGVuc2lvbi5sZW5ndGggLSAxXTtcblx0ICAgICAgICB2YXIgcmVzcG9uc2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhdWRpbycpLmNhblBsYXlUeXBlKCdhdWRpby8nICsgZXh0ZW5zaW9uKTtcblx0ICAgICAgICByZXR1cm4gcmVzcG9uc2UgIT09ICcnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIGEgUHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aGVuIGFsbCBvZiB0aGUgYnVmZmVycyBoYXZlIGxvYWRlZFxuXHRcdCAqICBAcmV0dXJuIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5sb2FkZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9ubG9hZCwgb25lcnJvcjtcblx0ICAgICAgICBmdW5jdGlvbiByZW1vdmVFdmVudHMoKSB7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBldmVudHMgd2hlbiBpdCdzIHJlc29sdmVkXG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLm9mZignbG9hZCcsIG9ubG9hZCk7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLm9mZignZXJyb3InLCBvbmVycm9yKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChzdWNjZXNzLCBmYWlsKSB7XG5cdCAgICAgICAgICAgIG9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHN1Y2Nlc3MoKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgb25lcnJvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIGZhaWwoKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgLy9hZGQgdGhlIGV2ZW50IGxpc3RlbmVyc1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vbignbG9hZCcsIG9ubG9hZCk7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuXHQgICAgICAgIH0pLnRoZW4ocmVtb3ZlRXZlbnRzKS5jYXRjaChmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICByZW1vdmVFdmVudHMoKTtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkJ1ZmZlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIGZpcmUtYW5kLWZvcmdldCBPc2NpbGxhdG9yTm9kZS4gQWRkcyB0aGVcblx0XHQgKiAgICAgYWJpbGl0eSB0byByZXNjaGVkdWxlIHRoZSBzdG9wIG1ldGhvZC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0gIHtBdWRpb0J1ZmZlcnxUb25lLkJ1ZmZlcn0gIGJ1ZmZlciAgIFRoZSBidWZmZXIgdG8gcGxheVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIG9ubG9hZCAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBpcyBkb25lIHBsYXlpbmcuXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuT3NjaWxsYXRvck5vZGUpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBhZnRlciB0aGVcblx0XHRcdCAqICBidWZmZXIgc291cmNlIGlzIGRvbmUgcGxheWluZy5cblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vbmVuZGVkID0gb3B0aW9ucy5vbmVuZGVkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yIHN0YXJ0IHRpbWVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gLTE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3Igc3RvcCB0aW1lXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gLTE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gbm9kZSB3aGljaCBlbnZlbG9wZXMgdGhlIE9zY2lsbGF0b3JOb2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUgIHtPc2NpbGxhdG9yTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IHRoaXMuY29udGV4dC5jcmVhdGVPc2NpbGxhdG9yKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jb25uZWN0KHRoaXMuX2dhaW5Ob2RlKTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kudmFsdWUgPSBvcHRpb25zLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX29zY2lsbGF0b3IuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLnZhbHVlID0gb3B0aW9ucy5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHRoYXQgdGhlIGJ1ZmZlciByYW1wcyB0b1xuXHRcdFx0ICogIEB0eXBlIHtHYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluID0gMTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk9zY2lsbGF0b3JOb2RlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnb25lbmRlZCc6IFRvbmUubm9PcFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgb3NjaWxsYXRvciwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3JOb2RlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0YXRlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgcGxheWJhY2sgc3RhdGUgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFRoZSB0aW1lIHRvIHRlc3QgdGhlIHN0YXRlIGF0XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlN0YXRlfSAgVGhlIHBsYXliYWNrIHN0YXRlLiBcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLmdldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEgJiYgdGltZSA+PSB0aGlzLl9zdGFydFRpbWUgJiYgKHRoaXMuX3N0b3BUaW1lID09PSAtMSB8fCB0aW1lIDw9IHRoaXMuX3N0b3BUaW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdGFydGVkO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHQgICAgICogU3RhcnQgdGhlIG9zY2lsbGF0b3Igbm9kZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHQgICAgICogQHBhcmFtICB7VGltZT19IHRpbWUgV2hlbiB0byBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICogQHJldHVybiB7T3NjaWxsYXRvck5vZGV9ICAgICAgdGhpc1xuXHQgICAgICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQodGhpcy5fc3RhcnRUaW1lKTtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMuY29udGV4dC5jdXJyZW50VGltZTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMobm93KTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCBub3cpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDEsIHRoaXMuX3N0YXJ0VGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgY2FsbCBPc2NpbGxhdG9yTm9kZS5zdGFydCBtb3JlIHRoYW4gb25jZScpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0ICAgICAqIFNldHMgYW4gYXJiaXRyYXJ5IGN1c3RvbSBwZXJpb2RpYyB3YXZlZm9ybSBnaXZlbiBhIFBlcmlvZGljV2F2ZS5cblx0ICAgICAqIEBwYXJhbSAge1BlcmlvZGljV2F2ZX0gcGVyaW9kaWNXYXZlIFBlcmlvZGljV2F2ZSBzaG91bGQgYmUgY3JlYXRlZCB3aXRoIGNvbnRleHQuY3JlYXRlUGVyaW9kaWNXYXZlXG5cdCAgICAgKiBAcmV0dXJuIHtPc2NpbGxhdG9yTm9kZX0gdGhpc1xuXHQgICAgICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zZXRQZXJpb2RpY1dhdmUgPSBmdW5jdGlvbiAocGVyaW9kaWNXYXZlKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zZXRQZXJpb2RpY1dhdmUocGVyaW9kaWNXYXZlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0ICAgICAqIFN0b3AgdGhlIG9zY2lsbGF0b3Igbm9kZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHQgICAgICogQHBhcmFtICB7VGltZT19IHRpbWUgV2hlbiB0byBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgKiBAcmV0dXJuIHtPc2NpbGxhdG9yTm9kZX0gICAgICB0aGlzXG5cdCAgICAgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vY2FuY2VsIHRoZSBwcmV2aW91cyBzdG9wXG5cdCAgICAgICAgdGhpcy5jYW5jZWxTdG9wKCk7XG5cdCAgICAgICAgLy9yZXNjaGVkdWxlIGl0XG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRoaXMuX3N0b3BUaW1lKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXQgPSB0aGlzLmNvbnRleHQuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aGlzLm5vdygpKTtcblx0ICAgICAgICAgICAgdGhpcy5vbmVuZGVkKCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpLCB0aGlzLl9zdG9wVGltZSAtIHRoaXMubm93KCkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYSBzY2hlZHVsZWQgc3RvcCBldmVudFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Pc2NpbGxhdG9yTm9kZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLmNhbmNlbFN0b3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgLy9jYW5jZWwgdGhlIHN0b3AgZW52ZWxvcGVcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGhpcy5fc3RhcnRUaW1lICsgdGhpcy5zYW1wbGVUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCBNYXRoLm1heCh0aGlzLm5vdygpLCB0aGlzLl9zdGFydFRpbWUpKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG9zY2lsbGF0b3IgdHlwZS4gRWl0aGVyICdzaW5lJywgJ3Nhd3Rvb3RoJywgJ3NxdWFyZScsIG9yICd0cmlhbmdsZSdcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yTm9kZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Pc2NpbGxhdG9yTm9kZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT3NjaWxsYXRvck5vZGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk9zY2lsbGF0b3Igc3VwcG9ydHMgYSBudW1iZXIgb2YgZmVhdHVyZXMgaW5jbHVkaW5nXG5cdFx0ICogICAgICAgICBwaGFzZSByb3RhdGlvbiwgbXVsdGlwbGUgb3NjaWxsYXRvciB0eXBlcyAoc2VlIFRvbmUuT3NjaWxsYXRvci50eXBlKSxcblx0XHQgKiAgICAgICAgIGFuZCBUcmFuc3BvcnQgc3luY2luZyAoc2VlIFRvbmUuT3NjaWxsYXRvci5zeW5jRnJlcXVlbmN5KS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2ZyZXF1ZW5jeV0gU3RhcnRpbmcgZnJlcXVlbmN5XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfSBbdHlwZV0gVGhlIG9zY2lsbGF0b3IgdHlwZS4gUmVhZCBtb3JlIGFib3V0IHR5cGUgYmVsb3cuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9tYWtlIGFuZCBzdGFydCBhIDQ0MGh6IHNpbmUgdG9uZVxuXHRcdCAqIHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKDQ0MCwgXCJzaW5lXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLk9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1haW4gb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtPc2NpbGxhdG9yTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwZXJpb2RpYyB3YXZlXG5cdFx0XHQgKiAgQHR5cGUge1BlcmlvZGljV2F2ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fd2F2ZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhcnRpYWxzIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLnBhcnRpYWxzLCBbMV0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIGJldHdlZW4gMCAtIDM2MFxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtzdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBudWxsO1xuXHQgICAgICAgIC8vc2V0dXBcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMuX3BoYXNlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Pc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3BoYXNlJzogMCxcblx0ICAgICAgICAncGFydGlhbHMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgT3NjaWxsYXRvciB0eXBlc1xuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUgPSB7XG5cdCAgICAgICAgU2luZTogJ3NpbmUnLFxuXHQgICAgICAgIFRyaWFuZ2xlOiAndHJpYW5nbGUnLFxuXHQgICAgICAgIFNhd3Rvb3RoOiAnc2F3dG9vdGgnLFxuXHQgICAgICAgIFNxdWFyZTogJ3NxdWFyZScsXG5cdCAgICAgICAgQ3VzdG9tOiAnY3VzdG9tJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9uZXcgb3NjaWxsYXRvciB3aXRoIHByZXZpb3VzIHZhbHVlc1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yTm9kZSgpO1xuXHQgICAgICAgIGlmICh0aGlzLl93YXZlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc2V0UGVyaW9kaWNXYXZlKHRoaXMuX3dhdmUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgY29udHJvbCBzaWduYWwgdG8gdGhlIG9zY2lsbGF0b3IgZnJlcXVlbmN5ICYgZGV0dW5lXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX29zY2lsbGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHRoaXMuX29zY2lsbGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHJldHVybnMge1RvbmUuT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IpIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlc3RhcnQgdGhlIG9zY2lsbGF0b3IuIERvZXMgbm90IHN0b3AgdGhlIG9zY2lsbGF0b3IsIGJ1dCBpbnN0ZWFkXG5cdFx0ICoganVzdCBjYW5jZWxzIGFueSBzY2hlZHVsZWQgJ3N0b3AnIGZyb20gYmVpbmcgaW52b2tlZC5cblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuT3NjaWxsYXRvcn0gICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aGlzLnRvU2Vjb25kcyh0aW1lKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN5bmMgdGhlIHNpZ25hbCB0byB0aGUgVHJhbnNwb3J0J3MgYnBtLiBBbnkgY2hhbmdlcyB0byB0aGUgdHJhbnNwb3J0cyBicG0sXG5cdFx0ICogIHdpbGwgYWxzbyBhZmZlY3QgdGhlIG9zY2lsbGF0b3JzIGZyZXF1ZW5jeS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZSA9IDEyMDtcblx0XHQgKiBvc2MuZnJlcXVlbmN5LnZhbHVlID0gNDQwO1xuXHRcdCAqIC8vdGhlIHJhdGlvbiBiZXR3ZWVuIHRoZSBicG0gYW5kIHRoZSBmcmVxdWVuY3kgd2lsbCBiZSBtYWludGFpbmVkXG5cdFx0ICogb3NjLnN5bmNGcmVxdWVuY3koKTtcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgPSAyNDA7XG5cdFx0ICogLy8gdGhlIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvciBpcyBkb3VibGVkIHRvIDg4MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5zeW5jRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbnN5bmMgdGhlIG9zY2lsbGF0b3IncyBmcmVxdWVuY3kgZnJvbSB0aGUgVHJhbnNwb3J0LlxuXHRcdCAqICBTZWUgVG9uZS5Pc2NpbGxhdG9yLnN5bmNGcmVxdWVuY3lcblx0XHQgKiAgQHJldHVybnMge1RvbmUuT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS51bnN5bmNGcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQudW5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvcjogZWl0aGVyIHNpbmUsIHNxdWFyZSwgdHJpYW5nbGUsIG9yIHNhd3Rvb3RoLiBBbHNvIGNhcGFibGUgb2Zcblx0XHQgKiBzZXR0aW5nIHRoZSBmaXJzdCB4IG51bWJlciBvZiBwYXJ0aWFscyBvZiB0aGUgb3NjaWxsYXRvci4gRm9yIGV4YW1wbGU6IFwic2luZTRcIiB3b3VsZFxuXHRcdCAqIHNldCBiZSB0aGUgZmlyc3QgNCBwYXJ0aWFscyBvZiB0aGUgc2luZSB3YXZlIGFuZCBcInRyaWFuZ2xlOFwiIHdvdWxkIHNldCB0aGUgZmlyc3Rcblx0XHQgKiA4IHBhcnRpYWxzIG9mIHRoZSB0cmlhbmdsZSB3YXZlLlxuXHRcdCAqIDxicj48YnI+XG5cdFx0ICogVXNlcyBQZXJpb2RpY1dhdmUgaW50ZXJuYWxseSBldmVuIGZvciBuYXRpdmUgdHlwZXMgc28gdGhhdCBpdCBjYW4gc2V0IHRoZSBwaGFzZS5cblx0XHQgKiBQZXJpb2RpY1dhdmUgZXF1YXRpb25zIGFyZSBmcm9tIHRoZVxuXHRcdCAqIFtXZWJraXQgV2ViIEF1ZGlvIGltcGxlbWVudGF0aW9uXShodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2NvZGVzZWFyY2gjY2hyb21pdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9Tb3VyY2UvbW9kdWxlcy93ZWJhdWRpby9QZXJpb2RpY1dhdmUuY3BwJnNxPXBhY2thZ2U6Y2hyb21pdW0pLlxuXHRcdCAqXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IGl0IHRvIGEgc3F1YXJlIHdhdmVcblx0XHQgKiBvc2MudHlwZSA9IFwic3F1YXJlXCI7XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL3NldCB0aGUgZmlyc3QgNiBwYXJ0aWFscyBvZiBhIHNhd3Rvb3RoIHdhdmVcblx0XHQgKiBvc2MudHlwZSA9IFwic2F3dG9vdGg2XCI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB2YXIgaXNCYXNpY1R5cGUgPSBbXG5cdCAgICAgICAgICAgICAgICBUb25lLk9zY2lsbGF0b3IuVHlwZS5TaW5lLFxuXHQgICAgICAgICAgICAgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU3F1YXJlLFxuXHQgICAgICAgICAgICAgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuVHJpYW5nbGUsXG5cdCAgICAgICAgICAgICAgICBUb25lLk9zY2lsbGF0b3IuVHlwZS5TYXd0b290aFxuXHQgICAgICAgICAgICBdLmluY2x1ZGVzKHR5cGUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fcGhhc2UgPT09IDAgJiYgaXNCYXNpY1R5cGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3dhdmUgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgLy9qdXN0IGdvIHdpdGggdGhlIGJhc2ljIGFwcHJvYWNoXG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvciAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9PT0gdHlwZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjb2VmcyA9IHRoaXMuX2dldFJlYWxJbWFnaW5hcnkodHlwZSwgdGhpcy5fcGhhc2UpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHBlcmlvZGljV2F2ZSA9IHRoaXMuY29udGV4dC5jcmVhdGVQZXJpb2RpY1dhdmUoY29lZnNbMF0sIGNvZWZzWzFdKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3dhdmUgPSBwZXJpb2RpY1dhdmU7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvciAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc2V0UGVyaW9kaWNXYXZlKHRoaXMuX3dhdmUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHJlYWwgYW5kIGltYWdpbmFyeSBjb21wb25lbnRzIGJhc2VkXG5cdFx0ICogIG9uIHRoZSBvc2NpbGxhdG9yIHR5cGUuXG5cdFx0ICogIEByZXR1cm5zIHtBcnJheX0gW3JlYWwsIGltYWdpbmFyeV1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX2dldFJlYWxJbWFnaW5hcnkgPSBmdW5jdGlvbiAodHlwZSwgcGhhc2UpIHtcblx0ICAgICAgICB2YXIgZmZ0U2l6ZSA9IDQwOTY7XG5cdCAgICAgICAgdmFyIHBlcmlvZGljV2F2ZVNpemUgPSBmZnRTaXplIC8gMjtcblx0ICAgICAgICB2YXIgcmVhbCA9IG5ldyBGbG9hdDMyQXJyYXkocGVyaW9kaWNXYXZlU2l6ZSk7XG5cdCAgICAgICAgdmFyIGltYWcgPSBuZXcgRmxvYXQzMkFycmF5KHBlcmlvZGljV2F2ZVNpemUpO1xuXHQgICAgICAgIHZhciBwYXJ0aWFsQ291bnQgPSAxO1xuXHQgICAgICAgIGlmICh0eXBlID09PSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b20pIHtcblx0ICAgICAgICAgICAgcGFydGlhbENvdW50ID0gdGhpcy5fcGFydGlhbHMubGVuZ3RoICsgMTtcblx0ICAgICAgICAgICAgcGVyaW9kaWNXYXZlU2l6ZSA9IHBhcnRpYWxDb3VudDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgcGFydGlhbCA9IC9eKHNpbmV8dHJpYW5nbGV8c3F1YXJlfHNhd3Rvb3RoKShcXGQrKSQvLmV4ZWModHlwZSk7XG5cdCAgICAgICAgICAgIGlmIChwYXJ0aWFsKSB7XG5cdCAgICAgICAgICAgICAgICBwYXJ0aWFsQ291bnQgPSBwYXJzZUludChwYXJ0aWFsWzJdKSArIDE7XG5cdCAgICAgICAgICAgICAgICB0eXBlID0gcGFydGlhbFsxXTtcblx0ICAgICAgICAgICAgICAgIHBhcnRpYWxDb3VudCA9IE1hdGgubWF4KHBhcnRpYWxDb3VudCwgMik7XG5cdCAgICAgICAgICAgICAgICBwZXJpb2RpY1dhdmVTaXplID0gcGFydGlhbENvdW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZvciAodmFyIG4gPSAxOyBuIDwgcGVyaW9kaWNXYXZlU2l6ZTsgKytuKSB7XG5cdCAgICAgICAgICAgIHZhciBwaUZhY3RvciA9IDIgLyAobiAqIE1hdGguUEkpO1xuXHQgICAgICAgICAgICB2YXIgYjtcblx0ICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2luZTpcblx0ICAgICAgICAgICAgICAgIGIgPSBuIDw9IHBhcnRpYWxDb3VudCA/IDEgOiAwO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU3F1YXJlOlxuXHQgICAgICAgICAgICAgICAgYiA9IG4gJiAxID8gMiAqIHBpRmFjdG9yIDogMDtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNhd3Rvb3RoOlxuXHQgICAgICAgICAgICAgICAgYiA9IHBpRmFjdG9yICogKG4gJiAxID8gMSA6IC0xKTtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLlRyaWFuZ2xlOlxuXHQgICAgICAgICAgICAgICAgaWYgKG4gJiAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYiA9IDIgKiAocGlGYWN0b3IgKiBwaUZhY3RvcikgKiAobiAtIDEgPj4gMSAmIDEgPyAtMSA6IDEpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBiID0gMDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbTpcblx0ICAgICAgICAgICAgICAgIGIgPSB0aGlzLl9wYXJ0aWFsc1tuIC0gMV07XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RvbmUuT3NjaWxsYXRvcjogaW52YWxpZCB0eXBlOiAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKGIgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgIHJlYWxbbl0gPSAtYiAqIE1hdGguc2luKHBoYXNlICogbik7XG5cdCAgICAgICAgICAgICAgICBpbWFnW25dID0gYiAqIE1hdGguY29zKHBoYXNlICogbik7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZWFsW25dID0gMDtcblx0ICAgICAgICAgICAgICAgIGltYWdbbl0gPSAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBbXG5cdCAgICAgICAgICAgIHJlYWwsXG5cdCAgICAgICAgICAgIGltYWdcblx0ICAgICAgICBdO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb21wdXRlIHRoZSBpbnZlcnNlIEZGVCBmb3IgYSBnaXZlbiBwaGFzZS5cblx0XHQgKiAgQHBhcmFtICB7RmxvYXQzMkFycmF5fSAgcmVhbFxuXHRcdCAqICBAcGFyYW0gIHtGbG9hdDMyQXJyYXl9ICBpbWFnXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSAgcGhhc2Vcblx0XHQgKiAgQHJldHVybiAge0F1ZGlvUmFuZ2V9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9pbnZlcnNlRkZUID0gZnVuY3Rpb24gKHJlYWwsIGltYWcsIHBoYXNlKSB7XG5cdCAgICAgICAgdmFyIHN1bSA9IDA7XG5cdCAgICAgICAgdmFyIGxlbiA9IHJlYWwubGVuZ3RoO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgc3VtICs9IHJlYWxbaV0gKiBNYXRoLmNvcyhpICogcGhhc2UpICsgaW1hZ1tpXSAqIE1hdGguc2luKGkgKiBwaGFzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBzdW07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEByZXR1cm4gIHtBdWRpb1JhbmdlfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5fZ2V0SW5pdGlhbFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBjb2VmcyA9IHRoaXMuX2dldFJlYWxJbWFnaW5hcnkodGhpcy5fdHlwZSwgMCk7XG5cdCAgICAgICAgdmFyIHJlYWwgPSBjb2Vmc1swXTtcblx0ICAgICAgICB2YXIgaW1hZyA9IGNvZWZzWzFdO1xuXHQgICAgICAgIHZhciBtYXhWYWx1ZSA9IDA7XG5cdCAgICAgICAgdmFyIHR3b1BpID0gTWF0aC5QSSAqIDI7XG5cdCAgICAgICAgLy9jaGVjayBmb3IgcGVha3MgaW4gOCBwbGFjZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICBtYXhWYWx1ZSA9IE1hdGgubWF4KHRoaXMuX2ludmVyc2VGRlQocmVhbCwgaW1hZywgaSAvIDggKiB0d29QaSksIG1heFZhbHVlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIC10aGlzLl9pbnZlcnNlRkZUKHJlYWwsIGltYWcsIHRoaXMuX3BoYXNlKSAvIG1heFZhbHVlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSAhPT0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gW107XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFydGlhbHM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBhcnRpYWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgICAgIHRoaXMudHlwZSA9IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5waGFzZSA9IDE4MDsgLy9mbGlwcyB0aGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9waGFzZSAqICgxODAgLyBNYXRoLlBJKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BoYXNlID0gcGhhc2UgKiBNYXRoLlBJIC8gMTgwO1xuXHQgICAgICAgICAgICAvL3Jlc2V0IHRoZSB0eXBlXG5cdCAgICAgICAgICAgIHRoaXMudHlwZSA9IHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGlzcG9zZSBhbmQgZGlzY29ubmVjdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvciAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3dhdmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQXVkaW9Ub0dhaW4gY29udmVydHMgYW4gaW5wdXQgaW4gQXVkaW9SYW5nZSBbLTEsMV0gdG8gTm9ybWFsUmFuZ2UgWzAsMV0uIFxuXHRcdCAqICAgICAgICAgU2VlIFRvbmUuR2FpblRvQXVkaW8uXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBhMmcgPSBuZXcgVG9uZS5BdWRpb1RvR2FpbigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb1RvR2FpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25vcm0gPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh4KSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoeCArIDEpIC8gMjtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1ZGlvVG9HYWluLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvVG9HYWlufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvVG9HYWluLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX25vcm0uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX25vcm0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkF1ZGlvVG9HYWluO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuWmVybyBvdXRwdXRzIDAncyBhdCBhdWRpby1yYXRlLiBUaGUgcmVhc29uIHRoaXMgaGFzIHRvIGJlXG5cdFx0ICogICAgICAgICBpdCdzIG93biBjbGFzcyBpcyB0aGF0IG1hbnkgYnJvd3NlcnMgb3B0aW1pemUgb3V0IFRvbmUuU2lnbmFsXG5cdFx0ICogICAgICAgICB3aXRoIGEgdmFsdWUgb2YgMCBhbmQgd2lsbCBub3QgcHJvY2VzcyBub2RlcyBmdXJ0aGVyIGRvd24gdGhlIGdyYXBoLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5aZXJvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29uc3RhbnQoMCkuY29ubmVjdCh0aGlzLl9nYWluKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlplcm8sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuWmVyb30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuWmVyby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9nYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9nYWluID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5aZXJvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIExGTyBzdGFuZHMgZm9yIGxvdyBmcmVxdWVuY3kgb3NjaWxsYXRvci4gVG9uZS5MRk8gcHJvZHVjZXMgYW4gb3V0cHV0IHNpZ25hbFxuXHRcdCAqICAgICAgICAgIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB0byBhbiBBdWRpb1BhcmFtIG9yIFRvbmUuU2lnbmFsXG5cdFx0ICogICAgICAgICAgaW4gb3JkZXIgdG8gbW9kdWxhdGUgdGhhdCBwYXJhbWV0ZXIgd2l0aCBhbiBvc2NpbGxhdG9yLiBUaGUgTEZPIGNhblxuXHRcdCAqICAgICAgICAgIGFsc28gYmUgc3luY2VkIHRvIHRoZSB0cmFuc3BvcnQgdG8gc3RhcnQvc3RvcCBhbmQgY2hhbmdlIHdoZW4gdGhlIHRlbXBvIGNoYW5nZXMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdGlvbi4gVHlwaWNhbGx5LCBMRk9zIHdpbGwgYmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZnJlcXVlbmN5IHJhbmdlIG9mIDAuMSB0byAxMCBoZXJ0ei5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSBtaW4gVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlIG9mIHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gbWF4IFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBMRk8uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGxmbyA9IG5ldyBUb25lLkxGTyhcIjRuXCIsIDQwMCwgNDAwMCk7XG5cdFx0ICogbGZvLmNvbm5lY3QoZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkxGTyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbWluJyxcblx0ICAgICAgICAgICAgJ21heCdcblx0ICAgICAgICBdLCBUb25lLkxGTyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcih7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiBvcHRpb25zLnR5cGVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX29zY2lsbGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtcGxpdHVkZSBvZiB0aGUgTEZPLCB3aGljaCBjb250cm9scyB0aGUgb3V0cHV0IHJhbmdlIGJldHdlZW5cblx0XHRcdCAqIHRoZSBtaW4gYW5kIG1heCBvdXRwdXQuIEZvciBleGFtcGxlIGlmIHRoZSBtaW4gaXMgLTEwIGFuZCB0aGUgbWF4XG5cdFx0XHQgKiBpcyAxMCwgc2V0dGluZyB0aGUgYW1wbGl0dWRlIHRvIDAuNSB3b3VsZCBtYWtlIHRoZSBMRk8gbW9kdWxhdGVcblx0XHRcdCAqIGJldHdlZW4gLTUgYW5kIDUuXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUgPSB0aGlzLl9vc2NpbGxhdG9yLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLmFtcGxpdHVkZS51bml0cyA9IFRvbmUuVHlwZS5Ob3JtYWxSYW5nZTtcblx0ICAgICAgICB0aGlzLmFtcGxpdHVkZS52YWx1ZSA9IG9wdGlvbnMuYW1wbGl0dWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWduYWwgd2hpY2ggaXMgb3V0cHV0IHdoZW4gdGhlIExGTyBpcyBzdG9wcGVkXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgwLCBUb25lLlR5cGUuQXVkaW9SYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSnVzdCBvdXRwdXRzIHplcm9zLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlplcm99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3plcm9zID0gbmV3IFRvbmUuWmVybygpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB0aGF0IHRoZSBMRk8gb3V0cHV0cyB3aGVuIGl0J3Mgc3RvcHBlZFxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb1JhbmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdG9wcGVkVmFsdWUgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkF1ZGlvVG9HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hMmcgPSBuZXcgVG9uZS5BdWRpb1RvR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNjYWxlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZXIgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlNjYWxlKG9wdGlvbnMubWluLCBvcHRpb25zLm1heCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHVuaXRzIG9mIHRoZSBMRk8gKHVzZWQgZm9yIGNvbnZlcnRpbmcpXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVHlwZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdW5pdHMgPSBUb25lLlR5cGUuRGVmYXVsdDtcblx0ICAgICAgICB0aGlzLnVuaXRzID0gb3B0aW9ucy51bml0cztcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNoYWluKHRoaXMuX2EyZywgdGhpcy5fc2NhbGVyKTtcblx0ICAgICAgICB0aGlzLl96ZXJvcy5jb25uZWN0KHRoaXMuX2EyZyk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5jb25uZWN0KHRoaXMuX2EyZyk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnYW1wbGl0dWRlJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxGTywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgJ3BoYXNlJzogMCxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogJzRuJyxcblx0ICAgICAgICAnYW1wbGl0dWRlJzogMSxcblx0ICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVmYXVsdFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgTEZPLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBMRk8gd2lsbCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuc2V0VmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgTEZPLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBMRk8gd2lsbCBzdG9wXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnNldFZhbHVlQXRUaW1lKHRoaXMuX3N0b3BwZWRWYWx1ZSwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTeW5jIHRoZSBzdGFydC9zdG9wL3BhdXNlIHRvIHRoZSB0cmFuc3BvcnRcblx0XHQgKiAgYW5kIHRoZSBmcmVxdWVuY3kgdG8gdGhlIGJwbSBvZiB0aGUgdHJhbnNwb3J0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICBsZm8uZnJlcXVlbmN5LnZhbHVlID0gXCI4blwiO1xuXHRcdCAqICBsZm8uc3luYygpLnN0YXJ0KDApXG5cdFx0ICogIC8vdGhlIHJhdGUgb2YgdGhlIExGTyB3aWxsIGFsd2F5cyBiZSBhbiBlaWdodGggbm90ZSxcblx0XHQgKiAgLy9ldmVuIGFzIHRoZSB0ZW1wbyBjaGFuZ2VzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN5bmNGcmVxdWVuY3koKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdW5zeW5jIHRoZSBMRk8gZnJvbSB0cmFuc3BvcnQgY29udHJvbFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci51bnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnVuc3luY0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pdW11bSBvdXRwdXQgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90b1VuaXRzKHRoaXMuX3NjYWxlci5taW4pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIG1pbiA9IHRoaXMuX2Zyb21Vbml0cyhtaW4pO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZXIubWluID0gbWluO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdG9Vbml0cyh0aGlzLl9zY2FsZXIubWF4KTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICBtYXggPSB0aGlzLl9mcm9tVW5pdHMobWF4KTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGVyLm1heCA9IG1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yOiBzaW5lLCBzcXVhcmUsIHNhd3Rvb3RoLCB0cmlhbmdsZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcHBlZFZhbHVlID0gdGhpcy5fb3NjaWxsYXRvci5fZ2V0SW5pdGlhbFZhbHVlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwudmFsdWUgPSB0aGlzLl9zdG9wcGVkVmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcHBlZFZhbHVlID0gdGhpcy5fb3NjaWxsYXRvci5fZ2V0SW5pdGlhbFZhbHVlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwudmFsdWUgPSB0aGlzLl9zdG9wcGVkVmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3V0cHV0IHVuaXRzIG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtUb25lLlR5cGV9XG5cdFx0ICogQG5hbWUgdW5pdHNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICd1bml0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VuaXRzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHZhciBjdXJyZW50TWluID0gdGhpcy5taW47XG5cdCAgICAgICAgICAgIHZhciBjdXJyZW50TWF4ID0gdGhpcy5tYXg7XG5cdCAgICAgICAgICAgIC8vY29udmVydCB0aGUgbWluIGFuZCB0aGUgbWF4XG5cdCAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdmFsO1xuXHQgICAgICAgICAgICB0aGlzLm1pbiA9IGN1cnJlbnRNaW47XG5cdCAgICAgICAgICAgIHRoaXMubWF4ID0gY3VycmVudE1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3Iuc3RhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ29ubmVjdCB0aGUgb3V0cHV0IG9mIHRoZSBMRk8gdG8gYW4gQXVkaW9QYXJhbSwgQXVkaW9Ob2RlLCBvciBUb25lIE5vZGUuXG5cdFx0ICogIFRvbmUuTEZPIHdpbGwgYXV0b21hdGljYWxseSBjb252ZXJ0IHRvIHRoZSBkZXN0aW5hdGlvbiB1bml0cyBvZiB0aGVcblx0XHQgKiAgd2lsbCBnZXQgdGhlIHVuaXRzIGZyb20gdGhlIGNvbm5lY3RlZCBub2RlLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lIHwgQXVkaW9QYXJhbSB8IEF1ZGlvTm9kZX0gbm9kZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bT0wXSBvcHRpb25hbGx5IHdoaWNoIG91dHB1dCB0byBjb25uZWN0IGZyb21cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtpbnB1dE51bT0wXSBvcHRpb25hbGx5IHdoaWNoIGlucHV0IHRvIGNvbm5lY3QgdG9cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgaWYgKG5vZGUuY29uc3RydWN0b3IgPT09IFRvbmUuU2lnbmFsIHx8IG5vZGUuY29uc3RydWN0b3IgPT09IFRvbmUuUGFyYW0pIHtcblx0ICAgICAgICAgICAgdGhpcy5jb252ZXJ0ID0gbm9kZS5jb252ZXJ0O1xuXHQgICAgICAgICAgICB0aGlzLnVuaXRzID0gbm9kZS51bml0cztcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHByaXZhdGUgbWV0aG9kIGJvcnJvd2VkIGZyb20gUGFyYW0gY29udmVydHNcblx0XHQgKiAgdW5pdHMgZnJvbSB0aGVpciBkZXN0aW5hdGlvbiB2YWx1ZVxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5fZnJvbVVuaXRzID0gVG9uZS5QYXJhbS5wcm90b3R5cGUuX2Zyb21Vbml0cztcblx0ICAgIC8qKlxuXHRcdCAqICBwcml2YXRlIG1ldGhvZCBib3Jyb3dlZCBmcm9tIFBhcmFtIGNvbnZlcnRzXG5cdFx0ICogIHVuaXRzIHRvIHRoZWlyIGRlc3RpbmF0aW9uIHZhbHVlXG5cdFx0ICogIEBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLl90b1VuaXRzID0gVG9uZS5QYXJhbS5wcm90b3R5cGUuX3RvVW5pdHM7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzY29ubmVjdCBhbmQgZGlzcG9zZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnYW1wbGl0dWRlJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl96ZXJvcy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5femVyb3MgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hMmcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2EyZyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5MRk87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkxpbWl0ZXIgd2lsbCBsaW1pdCB0aGUgbG91ZG5lc3Mgb2YgYW4gaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgSXQgaXMgY29tcG9zZWQgb2YgYSBUb25lLkNvbXByZXNzb3Igd2l0aCBhIGZhc3QgYXR0YWNrXG5cdFx0ICogICAgICAgICBhbmQgcmVsZWFzZS4gTGltaXRlcnMgYXJlIGNvbW1vbmx5IHVzZWQgdG8gc2FmZWd1YXJkIGFnYWluc3Rcblx0XHQgKiAgICAgICAgIHNpZ25hbCBjbGlwcGluZy4gVW5saWtlIGEgY29tcHJlc3NvciwgbGltaXRlcnMgZG8gbm90IHByb3ZpZGVcblx0XHQgKiAgICAgICAgIHNtb290aCBnYWluIHJlZHVjdGlvbiBhbmQgYWxtb3N0IGNvbXBsZXRlbHkgcHJldmVudFxuXHRcdCAqICAgICAgICAgYWRkaXRpb25hbCBnYWluIGFib3ZlIHRoZSB0aHJlc2hvbGQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHRocmVzaG9sZCBUaGUgdGhlc2hvbGQgYWJvdmUgd2hpY2ggdGhlIGxpbWl0aW5nIGlzIGFwcGxpZWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBsaW1pdGVyID0gbmV3IFRvbmUuTGltaXRlcigtNik7XG5cdFx0ICovXG5cdCAgICBUb25lLkxpbWl0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd0aHJlc2hvbGQnXSwgVG9uZS5MaW1pdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBjb21wcmVzc29yXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Db21wcmVzc29yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3NvciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkNvbXByZXNzb3Ioe1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMDAxLFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJzogb3B0aW9ucy50aHJlc2hvbGRcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB0aHJlc2hvbGQgb2Ygb2YgdGhlIGxpbWl0ZXJcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy50aHJlc2hvbGQgPSB0aGlzLl9jb21wcmVzc29yLnRocmVzaG9sZDtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndGhyZXNob2xkJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5MaW1pdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGltaXRlci5kZWZhdWx0cyA9IHsgJ3RocmVzaG9sZCc6IC0xMiB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MaW1pdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpbWl0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndGhyZXNob2xkJyk7XG5cdCAgICAgICAgdGhpcy50aHJlc2hvbGQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkxpbWl0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkxvd3Bhc3MgaXMgYSBsb3dwYXNzIGZlZWRiYWNrIGNvbWIgZmlsdGVyLiBJdCBpcyBzaW1pbGFyIHRvXG5cdFx0ICogICAgICAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlciwgYnV0IGluY2x1ZGVzIGEgbG93cGFzcyBmaWx0ZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2RlbGF5VGltZV0gVGhlIGRlbGF5IHRpbWUgb2YgdGhlIGNvbWIgZmlsdGVyXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2U9fSByZXNvbmFuY2UgVGhlIHJlc29uYW5jZSAoZmVlZGJhY2spIG9mIHRoZSBjb21iIGZpbHRlclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeT19IGRhbXBlbmluZyBUaGUgY3V0b2ZmIG9mIHRoZSBsb3dwYXNzIGZpbHRlciBkYW1wZW5zIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwgYXMgaXQgaXMgZmVkYmFjay5cblx0XHQgKi9cblx0ICAgIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSwgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheSA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5EZWxheShvcHRpb25zLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlbGF5VGltZSBvZiB0aGUgY29tYiBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9kZWxheS5kZWxheVRpbWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxvd3Bhc3MgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUgIHtCaXF1YWRGaWx0ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb3dwYXNzID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcy5RLnZhbHVlID0gLTMuMDEwMjk5OTU2NjM5ODEyNTtcblx0ICAgICAgICB0aGlzLl9sb3dwYXNzLnR5cGUgPSAnbG93cGFzcyc7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRhbXBlbmluZyBjb250cm9sIG9mIHRoZSBmZWVkYmFja1xuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2xvd3Bhc3MuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAndmFsdWUnOiBvcHRpb25zLmRhbXBlbmluZ1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmZWVkYmFjayBnYWluXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2sgPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMucmVzb25hbmNlLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZmVlZGJhY2sgb2YgdGhlIGRlbGF5ZWQgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IHRoaXMuX2ZlZWRiYWNrLmdhaW47XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmNoYWluKHRoaXMuX2xvd3Bhc3MsIHRoaXMuX2ZlZWRiYWNrLCB0aGlzLl9kZWxheSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJyxcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Mb3dwYXNzQ29tYkZpbHRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDAuMSxcblx0ICAgICAgICAncmVzb25hbmNlJzogMC41LFxuXHQgICAgICAgICdkYW1wZW5pbmcnOiAzMDAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Mb3dwYXNzQ29tYkZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZycsXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sb3dwYXNzLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9sb3dwYXNzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFjay5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkxvd3Bhc3NDb21iRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTWVyZ2UgYnJpbmdzIHR3byBzaWduYWxzIGludG8gdGhlIGxlZnQgYW5kIHJpZ2h0XG5cdFx0ICogICAgICAgICAgY2hhbm5lbHMgb2YgYSBzaW5nbGUgc3RlcmVvIGNoYW5uZWwuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbWVyZ2UgPSBuZXcgVG9uZS5NZXJnZSgpLnRvTWFzdGVyKCk7XG5cdFx0ICogLy9yb3V0aW5nIGEgc2luZSB0b25lIGluIHRoZSBsZWZ0IGNoYW5uZWxcblx0XHQgKiAvL2FuZCBub2lzZSBpbiB0aGUgcmlnaHQgY2hhbm5lbFxuXHRcdCAqIHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkuY29ubmVjdChtZXJnZS5sZWZ0KTtcblx0XHQgKiB2YXIgbm9pc2UgPSBuZXcgVG9uZS5Ob2lzZSgpLmNvbm5lY3QobWVyZ2UucmlnaHQpO1xuXHRcdCAqIC8vc3RhcnRpbmcgb3VyIG9zY2lsbGF0b3JzXG5cdFx0ICogbm9pc2Uuc3RhcnQoKTtcblx0XHQgKiBvc2Muc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVyZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxlZnQgaW5wdXQgY2hhbm5lbC5cblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+aW5wdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5pbnB1dFswXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmlnaHQgaW5wdXQgY2hhbm5lbC5cblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+aW5wdXRbMV08L2NvZGU+LlxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtZXJnZXIgbm9kZSBmb3IgdGhlIHR3byBjaGFubmVsc1xuXHRcdFx0ICogIEB0eXBlIHtDaGFubmVsTWVyZ2VyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVyZ2VyID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ2hhbm5lbE1lcmdlcigyKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5sZWZ0LmNvbm5lY3QodGhpcy5fbWVyZ2VyLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLnJpZ2h0LmNvbm5lY3QodGhpcy5fbWVyZ2VyLCAwLCAxKTtcblx0ICAgICAgICB0aGlzLmxlZnQuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICB0aGlzLnJpZ2h0LmNoYW5uZWxDb3VudCA9IDE7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIHRoaXMucmlnaHQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NZXJnZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZXJnZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXJnZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMubGVmdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJpZ2h0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tZXJnZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWVyZ2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5NZXRlciBnZXRzIHRoZSBbUk1TXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Sb290X21lYW5fc3F1YXJlKVxuXHRcdCAqICAgICAgICAgIG9mIGFuIGlucHV0IHNpZ25hbCB3aXRoIHNvbWUgYXZlcmFnaW5nIGFwcGxpZWQuIEl0IGNhbiBhbHNvIGdldCB0aGUgcmF3XG5cdFx0ICogICAgICAgICAgdmFsdWUgb2YgdGhlIGlucHV0IHNpZ25hbC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gc21vb3RoaW5nIFRoZSBhbW91bnQgb2Ygc21vb3RoaW5nIGFwcGxpZWQgYmV0d2VlbiBmcmFtZXMuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG1ldGVyID0gbmV3IFRvbmUuTWV0ZXIoKTtcblx0XHQgKiB2YXIgbWljID0gbmV3IFRvbmUuVXNlck1lZGlhKCkub3BlbigpO1xuXHRcdCAqIC8vY29ubmVjdCBtaWMgdG8gdGhlIG1ldGVyXG5cdFx0ICogbWljLmNvbm5lY3QobWV0ZXIpO1xuXHRcdCAqIC8vdGhlIGN1cnJlbnQgbGV2ZWwgb2YgdGhlIG1pYyBpbnB1dCBpbiBkZWNpYmVsc1xuXHRcdCAqIHZhciBsZXZlbCA9IG1ldGVyLmdldFZhbHVlKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnc21vb3RoaW5nJ10sIFRvbmUuTWV0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFuYWx5c2VyIG5vZGUgd2hpY2ggY29tcHV0ZXMgdGhlIGxldmVscy5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5BbmFseXNlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuX2FuYWx5c2VyID0gbmV3IFRvbmUuQW5hbHlzZXIoJ3dhdmVmb3JtJywgMTAyNCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBjYXJyeW92ZXIgYmV0d2VlbiB0aGUgY3VycmVudCBhbmQgbGFzdCBmcmFtZS5cblx0XHRcdCAqICBPbmx5IGFwcGxpZWQgbWV0ZXIgZm9yIFwibGV2ZWxcIiB0eXBlLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zbW9vdGhpbmcgPSBvcHRpb25zLnNtb290aGluZztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1ldGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGVyLmRlZmF1bHRzID0geyAnc21vb3RoaW5nJzogMC44IH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBjdXJyZW50IGRlY2liZWwgdmFsdWUgb2YgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdCAqICBAcmV0dXJucyB7RGVjaWJlbHN9XG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGVyLnByb3RvdHlwZS5nZXRMZXZlbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci50eXBlID0gJ2ZmdCc7XG5cdCAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuX2FuYWx5c2VyLmdldFZhbHVlKCk7XG5cdCAgICAgICAgdmFyIG9mZnNldCA9IDI4O1xuXHQgICAgICAgIC8vIG5vcm1hbGl6ZXMgbW9zdCBzaWduYWwgbGV2ZWxzXG5cdCAgICAgICAgLy8gVE9ETzogY29tcHV0ZSBsb3VkbmVzcyBmcm9tIEZGVFxuXHQgICAgICAgIHJldHVybiBNYXRoLm1heC5hcHBseSh0aGlzLCB2YWx1ZXMpICsgb2Zmc2V0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNpZ25hbCB2YWx1ZSBvZiB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogIEByZXR1cm5zIHtOdW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGVyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci50eXBlID0gJ3dhdmVmb3JtJztcblx0ICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgICAgIHJldHVybiB2YWx1ZVswXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBBIHZhbHVlIGZyb20gMCAtPiAxIHdoZXJlIDAgcmVwcmVzZW50cyBubyB0aW1lIGF2ZXJhZ2luZyB3aXRoIHRoZSBsYXN0IGFuYWx5c2lzIGZyYW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk1ldGVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgc21vb3RoaW5nXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRlci5wcm90b3R5cGUsICdzbW9vdGhpbmcnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5zbW9vdGhpbmc7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuc21vb3RoaW5nID0gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZXRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWV0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICpcdEBjbGFzcyAgVG9uZS5TcGxpdCBzcGxpdHMgYW4gaW5jb21pbmcgc2lnbmFsIGludG8gbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3BsaXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHRcdCAqIHN0ZXJlb1NpZ25hbC5jb25uZWN0KHNwbGl0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU3BsaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMCwgMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge0NoYW5uZWxTcGxpdHRlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyID0gdGhpcy5pbnB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVDaGFubmVsU3BsaXR0ZXIoMik7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuY2hhbm5lbENvdW50ID0gMjtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBMZWZ0IGNoYW5uZWwgb3V0cHV0LlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubGVmdCA9IHRoaXMub3V0cHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFJpZ2h0IGNoYW5uZWwgb3V0cHV0LlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMV08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSB0aGlzLm91dHB1dFsxXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuY29ubmVjdCh0aGlzLmxlZnQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNvbm5lY3QodGhpcy5yaWdodCwgMSwgMCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TcGxpdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TcGxpdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TcGxpdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLmxlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yaWdodC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yaWdodCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNwbGl0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTWlkL1NpZGUgcHJvY2Vzc2luZyBzZXBhcmF0ZXMgdGhlIHRoZSAnbWlkJyBzaWduYWxcblx0XHQgKiAgICAgICAgICh3aGljaCBjb21lcyBvdXQgb2YgYm90aCB0aGUgbGVmdCBhbmQgdGhlIHJpZ2h0IGNoYW5uZWwpXG5cdFx0ICogICAgICAgICBhbmQgdGhlICdzaWRlJyAod2hpY2ggb25seSBjb21lcyBvdXQgb2YgdGhlIHRoZSBzaWRlIGNoYW5uZWxzKS4gPGJyPjxicj5cblx0XHQgKiAgICAgICAgIDxjb2RlPlxuXHRcdCAqICAgICAgICAgTWlkID0gKExlZnQrUmlnaHQpL3NxcnQoMik7ICAgLy8gb2J0YWluIG1pZC1zaWduYWwgZnJvbSBsZWZ0IGFuZCByaWdodDxicj5cblx0XHQgKiAgICAgICAgIFNpZGUgPSAoTGVmdC1SaWdodCkvc3FydCgyKTsgICAvLyBvYnRhaW4gc2lkZS1zaWduYWwgZnJvbSBsZWZ0IGFuZCByaWdoPGJyPlxuXHRcdCAqICAgICAgICAgPC9jb2RlPlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVTcGxpdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygwLCAyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzcGxpdCB0aGUgaW5jb21pbmcgc2lnbmFsIGludG8gbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHNcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NwbGl0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLlNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBzZW5kLiBDb25uZWN0IHRvIG1pZCBwcm9jZXNzaW5nLiBBbGlhcyBmb3Jcblx0XHRcdCAqICA8Y29kZT5vdXRwdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWRkfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkQWRkID0gbmV3IFRvbmUuQWRkKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgX21pZEFkZCBieSBzcXJ0KDEvMilcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLm91dHB1dFswXSA9IG5ldyBUb25lLk11bHRpcGx5KE1hdGguU1FSVDFfMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZGUgb3V0cHV0LiBDb25uZWN0IHRvIHNpZGUgcHJvY2Vzc2luZy4gQWxzbyBPdXRwdXQgMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0ID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIE11bHRpcGx5IHRoZSBfbWlkQWRkIGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGUgPSB0aGlzLm91dHB1dFsxXSA9IG5ldyBUb25lLk11bHRpcGx5KE1hdGguU1FSVDFfMik7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuY29ubmVjdCh0aGlzLl9taWRBZGQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fbWlkQWRkLCAxLCAxKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX3NpZGVTdWJ0cmFjdCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuY29ubmVjdCh0aGlzLl9zaWRlU3VidHJhY3QsIDEsIDEpO1xuXHQgICAgICAgIHRoaXMuX21pZEFkZC5jb25uZWN0KHRoaXMubWlkKTtcblx0ICAgICAgICB0aGlzLl9zaWRlU3VidHJhY3QuY29ubmVjdCh0aGlzLnNpZGUpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkU2lkZVNwbGl0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZVNwbGl0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVTcGxpdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnNpZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZEFkZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkQWRkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zaWRlU3VidHJhY3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NaWRTaWRlU3BsaXQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBNaWQvU2lkZSBwcm9jZXNzaW5nIHNlcGFyYXRlcyB0aGUgdGhlICdtaWQnIHNpZ25hbFxuXHRcdCAqICAgICAgICAgKHdoaWNoIGNvbWVzIG91dCBvZiBib3RoIHRoZSBsZWZ0IGFuZCB0aGUgcmlnaHQgY2hhbm5lbClcblx0XHQgKiAgICAgICAgIGFuZCB0aGUgJ3NpZGUnICh3aGljaCBvbmx5IGNvbWVzIG91dCBvZiB0aGUgdGhlIHNpZGUgY2hhbm5lbHMpLlxuXHRcdCAqICAgICAgICAgTWlkU2lkZU1lcmdlIG1lcmdlcyB0aGUgbWlkIGFuZCBzaWRlIHNpZ25hbCBhZnRlciB0aGV5J3ZlIGJlZW4gc2VwZXJhdGVkXG5cdFx0ICogICAgICAgICBieSBUb25lLk1pZFNpZGVTcGxpdC48YnI+PGJyPlxuXHRcdCAqICAgICAgICAgPGNvZGU+XG5cdFx0ICogICAgICAgICBMZWZ0ID0gKE1pZCtTaWRlKS9zcXJ0KDIpOyAgIC8vIG9idGFpbiBsZWZ0IHNpZ25hbCBmcm9tIG1pZCBhbmQgc2lkZTxicj5cblx0XHQgKiAgICAgICAgIFJpZ2h0ID0gKE1pZC1TaWRlKS9zcXJ0KDIpOyAgIC8vIG9idGFpbiByaWdodCBzaWduYWwgZnJvbSBtaWQgYW5kIHNpZGU8YnI+XG5cdFx0ICogICAgICAgICA8L2NvZGU+XG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZU1lcmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgc2lnbmFsIGlucHV0LiBBbGlhcyBmb3Jcblx0XHRcdCAqICA8Y29kZT5pbnB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gdGhpcy5pbnB1dFswXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICByZWNvbWJpbmUgdGhlIG1pZC9zaWRlIGludG8gTGVmdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGVmdCA9IG5ldyBUb25lLkFkZCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIGxlZnQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdCA9IG5ldyBUb25lLk11bHRpcGx5KE1hdGguU1FSVDFfMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZGUgc2lnbmFsIGlucHV0LiBBbGlhcyBmb3Jcblx0XHRcdCAqICA8Y29kZT5pbnB1dFsxXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcmVjb21iaW5lIHRoZSBtaWQvc2lkZSBpbnRvIFJpZ2h0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIE11bHRpcGx5IHRoZSByaWdodCBieSBzcXJ0KDEvMilcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29SaWdodCA9IG5ldyBUb25lLk11bHRpcGx5KE1hdGguU1FSVDFfMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTWVyZ2UgdGhlIGxlZnQvcmlnaHQgc2lnbmFsIGJhY2sgaW50byBhIHN0ZXJlbyBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NZXJnZSgpO1xuXHQgICAgICAgIHRoaXMubWlkLmNvbm5lY3QodGhpcy5fbGVmdCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5zaWRlLmNvbm5lY3QodGhpcy5fbGVmdCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5taWQuY29ubmVjdCh0aGlzLl9yaWdodCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5zaWRlLmNvbm5lY3QodGhpcy5fcmlnaHQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2xlZnQuY29ubmVjdCh0aGlzLl90aW1lc1R3b0xlZnQpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0LmNvbm5lY3QodGhpcy5fdGltZXNUd29SaWdodCk7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29MZWZ0LmNvbm5lY3QodGhpcy5fbWVyZ2UsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQuY29ubmVjdCh0aGlzLl9tZXJnZSwgMCwgMSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRTaWRlTWVyZ2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlTWVyZ2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZU1lcmdlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGVmdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29MZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9yaWdodCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29SaWdodC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29SaWdodCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NaWRTaWRlTWVyZ2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk1pZFNpZGVDb21wcmVzc29yIGFwcGxpZXMgdHdvIGRpZmZlcmVudCBjb21wcmVzc29ycyB0byB0aGUgbWlkXG5cdFx0ICogICAgICAgICBhbmQgc2lkZSBzaWduYWwgY29tcG9uZW50cy4gU2VlIFRvbmUuTWlkU2lkZVNwbGl0LlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIG9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBtaWQgYW5kIHNpZGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NvcnMuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlQ29tcHJlc3NvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtaWQvc2lkZSBzcGxpdFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5NaWRTaWRlU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NaWRTaWRlU3BsaXQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWlkL3NpZGUgcmVjb21iaW5hdGlvblxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5NaWRTaWRlTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTWlkU2lkZU1lcmdlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgbWlkIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Db21wcmVzc29yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMubWlkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBzaWRlIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Db21wcmVzc29yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLnNpZGUpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdC5taWQuY2hhaW4odGhpcy5taWQsIHRoaXMuX21pZFNpZGVNZXJnZS5taWQpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdC5zaWRlLmNoYWluKHRoaXMuc2lkZSwgdGhpcy5fbWlkU2lkZU1lcmdlLnNpZGUpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdzaWRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkU2lkZUNvbXByZXNzb3IsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlQ29tcHJlc3Nvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWlkJzoge1xuXHQgICAgICAgICAgICAncmF0aW8nOiAzLFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJzogLTI0LFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuMDMsXG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAyLFxuXHQgICAgICAgICAgICAna25lZSc6IDE2XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnc2lkZSc6IHtcblx0ICAgICAgICAgICAgJ3JhdGlvJzogNixcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCc6IC0zMCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjI1LFxuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMyxcblx0ICAgICAgICAgICAgJ2tuZWUnOiAxMFxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1pZFNpZGVDb21wcmVzc29yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVDb21wcmVzc29yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ3NpZGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NaWRTaWRlQ29tcHJlc3Nvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTW9ubyBjb2VyY2VzIHRoZSBpbmNvbWluZyBtb25vIG9yIHN0ZXJlbyBzaWduYWwgaW50byBhIG1vbm8gc2lnbmFsXG5cdFx0ICogICAgICAgICB3aGVyZSBib3RoIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzIGhhdmUgdGhlIHNhbWUgdmFsdWUuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuXHRcdCAqICAgICAgICAgZm9yIFtzdGVyZW8gaW1hZ2luZ10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3RlcmVvX2ltYWdpbmcpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbWVyZ2UgdGhlIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fbWVyZ2UsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9tZXJnZSwgMCwgMSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb25vLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Nb25vO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBjb21wcmVzc29yIHdpdGggc2VwZXJhdGUgY29udHJvbHMgb3ZlciBsb3cvbWlkL2hpZ2ggZHluYW1pY3Ncblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgbG93L21pZC9oaWdoIGNvbXByZXNzb3Igc2V0dGluZ3MuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBtdWx0aWJhbmQgPSBuZXcgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yKHtcblx0XHQgKiAgXHRcImxvd0ZyZXF1ZW5jeVwiIDogMjAwLFxuXHRcdCAqICBcdFwiaGlnaEZyZXF1ZW5jeVwiIDogMTMwMFxuXHRcdCAqICBcdFwibG93XCIgOiB7XG5cdFx0ICogIFx0XHRcInRocmVzaG9sZFwiIDogLTEyXG5cdFx0ICogIFx0fVxuXHRcdCAqICB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcoYXJndW1lbnRzLCBUb25lLk11bHRpYmFuZENvbXByZXNzb3IuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWwgaW50byBoaWdoL21pZC9sb3dcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aWJhbmRTcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTXVsdGliYW5kU3BsaXQoe1xuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jzogb3B0aW9ucy5sb3dGcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jzogb3B0aW9ucy5oaWdoRnJlcXVlbmN5XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbG93L21pZCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSB0aGlzLl9zcGxpdHRlci5sb3dGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbWlkL2hpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IHRoaXMuX3NwbGl0dGVyLmhpZ2hGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG91dHB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIGxvdyBmcmVxdWVuY2llcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Db21wcmVzc29yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3cgPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMubG93KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBtaWQgZnJlcXVlbmNpZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLm1pZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgaGlnaCBmcmVxdWVuY2llcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Db21wcmVzc29yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLmhpZ2gpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgY29tcHJlc3NvclxuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmxvdy5jaGFpbih0aGlzLmxvdywgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLm1pZC5jaGFpbih0aGlzLm1pZCwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmhpZ2guY2hhaW4odGhpcy5oaWdoLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTXVsdGliYW5kQ29tcHJlc3NvciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZENvbXByZXNzb3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2xvdyc6IFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyxcblx0ICAgICAgICAnbWlkJzogVG9uZS5Db21wcmVzc29yLmRlZmF1bHRzLFxuXHQgICAgICAgICdoaWdoJzogVG9uZS5Db21wcmVzc29yLmRlZmF1bHRzLFxuXHQgICAgICAgICdsb3dGcmVxdWVuY3knOiAyNTAsXG5cdCAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiAyMDAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk11bHRpYmFuZENvbXByZXNzb3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5sb3cuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhpZ2guZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvdyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkICYmICF3aW5kb3cuU3RlcmVvUGFubmVyTm9kZSkge1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogQGNsYXNzIFNoaW1tZWQgU3RlcmVvUGFubmVyTm9kZVxuXHRcdFx0ICogQHBhcmFtICB7QXVkaW9Db250ZXh0fSBjb250ZXh0XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdmFyIFN0ZXJlb1Bhbm5lck5vZGUgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIGF1ZGlvIGNvbnRleHRcblx0XHRcdFx0ICogQHR5cGUge0F1ZGlvQ29udGV4dH1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgbGVmdC9yaWdodCBwYW5uaW5nLiBbLTEsIDFdXG5cdFx0XHRcdCAqIEB0eXBlIHtBdWRpb1JhbmdlfVxuXHRcdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLnBhbiA9IG5ldyBUb25lLlNpZ25hbCgwLCBUb25lLlR5cGUuQXVkaW9SYW5nZSk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBFcXVhbCBwb3dlciBzY2FsaW5nIG9mIHRoZSByaWdodCBnYWluXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgcmlnaHRXYXZlU2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5lcXVhbFBvd2VyU2NhbGUoKHZhbCArIDEpIC8gMik7XG5cdCAgICAgICAgICAgIH0sIDQwOTYpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogRXF1YWwgcG93ZXIgc2NhbGluZyBvZiB0aGUgbGVmdCBnYWluXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgbGVmdFdhdmVTaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmVxdWFsUG93ZXJTY2FsZSgxIC0gKHZhbCArIDEpIC8gMik7XG5cdCAgICAgICAgICAgIH0sIDQwOTYpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIGxlZnQgZ2FpbiB2YWx1ZVxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIGxlZnRHYWluID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIHJpZ2h0IGdhaW4gdmFsdWVcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciByaWdodEdhaW4gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBTcGxpdCB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLlNwbGl0fVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHNwbGl0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLlNwbGl0KCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBLZWVwcyB0aGUgd2F2ZXNoYXBlcnMgZnJvbSBvcHRpbWl6aW5nIDBzXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLlplcm99XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgemVybyA9IG5ldyBUb25lLlplcm8oKTtcblx0ICAgICAgICAgICAgemVyby5mYW4ocmlnaHRXYXZlU2hhcGVyLCBsZWZ0V2F2ZVNoYXBlcik7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBNZXJnZSB0aGUgb3V0Z29pbmcgc2lnbmFsXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLk1lcmdlfVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIG1lcmdlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NZXJnZSgpO1xuXHQgICAgICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgICAgIHNwbGl0LmxlZnQuY2hhaW4obGVmdEdhaW4sIG1lcmdlLmxlZnQpO1xuXHQgICAgICAgICAgICBzcGxpdC5yaWdodC5jaGFpbihyaWdodEdhaW4sIG1lcmdlLnJpZ2h0KTtcblx0ICAgICAgICAgICAgdGhpcy5wYW4uY2hhaW4obGVmdFdhdmVTaGFwZXIsIGxlZnRHYWluLmdhaW4pO1xuXHQgICAgICAgICAgICB0aGlzLnBhbi5jaGFpbihyaWdodFdhdmVTaGFwZXIsIHJpZ2h0R2Fpbi5nYWluKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFN0ZXJlb1Bhbm5lck5vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmRpc2Nvbm5lY3QuYXBwbHkodGhpcy5vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBTdGVyZW9QYW5uZXJOb2RlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dC5jb25uZWN0LmFwcGx5KHRoaXMub3V0cHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgLy9hZGQgaXQgdG8gdGhlIEF1ZGlvQ29udGV4dFxuXHQgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlU3RlcmVvUGFubmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFN0ZXJlb1Bhbm5lck5vZGUodGhpcyk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmNyZWF0ZVN0ZXJlb1Bhbm5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGVyZW9QYW5uZXJOb2RlKHRoaXMpO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5QYW5uZXIgaXMgYW4gZXF1YWwgcG93ZXIgTGVmdC9SaWdodCBQYW5uZXIgYW5kIGRvZXMgbm90XG5cdFx0ICogICAgICAgICAgc3VwcG9ydCAzRC4gUGFubmVyIHVzZXMgdGhlIFN0ZXJlb1Bhbm5lck5vZGUgd2hlbiBhdmFpbGFibGUuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW2luaXRpYWxQYW49MF0gVGhlIGluaXRhaWwgcGFubmVyIHZhbHVlIChjZW50ZXIpLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICAvL3BhbiB0aGUgaW5wdXQgc2lnbmFsIGhhcmQgcmlnaHQuXG5cdFx0ICogIHZhciBwYW5uZXIgPSBuZXcgVG9uZS5QYW5uZXIoMSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lciA9IGZ1bmN0aW9uIChpbml0aWFsUGFuKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCogIHRoZSBwYW5uZXIgbm9kZVxuXHRcdFx0KiAgQHR5cGUge1N0ZXJlb1Bhbm5lck5vZGV9XG5cdFx0XHQqICBAcHJpdmF0ZVxuXHRcdFx0Ki9cblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlU3RlcmVvUGFubmVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQqICBUaGUgcGFuIGNvbnRyb2wuIC0xID0gaGFyZCBsZWZ0LCAxID0gaGFyZCByaWdodC5cblx0XHRcdCogIEB0eXBlIHtBdWRpb1JhbmdlfVxuXHRcdFx0KiAgQHNpZ25hbFxuXHRcdFx0Ki9cblx0ICAgICAgICB0aGlzLnBhbiA9IHRoaXMuX3Bhbm5lci5wYW47XG5cdCAgICAgICAgLy9pbml0aWFsIHZhbHVlXG5cdCAgICAgICAgdGhpcy5wYW4udmFsdWUgPSBUb25lLmRlZmF1bHRBcmcoaW5pdGlhbFBhbiwgMCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3BhbicpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFubmVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgncGFuJyk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucGFuID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYW5uZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBzcGF0aWFsaXplZCBwYW5uZXIgbm9kZSB3aGljaCBzdXBwb3J0cyBlcXVhbHBvd2VyIG9yIEhSVEYgcGFubmluZy5cblx0XHQgKiAgICAgICAgICBUcmllcyB0byBub3JtYWxpemUgdGhlIEFQSSBhY3Jvc3MgdmFyaW91cyBicm93c2Vycy4gU2VlIFRvbmUuTGlzdGVuZXJcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gcG9zaXRpb25YIFRoZSBpbml0aWFsIHggcG9zaXRpb24uXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBwb3NpdGlvblkgVGhlIGluaXRpYWwgeSBwb3NpdGlvbi5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHBvc2l0aW9uWiBUaGUgaW5pdGlhbCB6IHBvc2l0aW9uLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwb3NpdGlvblgnLFxuXHQgICAgICAgICAgICAncG9zaXRpb25ZJyxcblx0ICAgICAgICAgICAgJ3Bvc2l0aW9uWidcblx0ICAgICAgICBdLCBUb25lLlBhbm5lcjNEKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYW5uZXIgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtQYW5uZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCk7XG5cdCAgICAgICAgLy9zZXQgc29tZSB2YWx1ZXNcblx0ICAgICAgICB0aGlzLl9wYW5uZXIucGFubmluZ01vZGVsID0gb3B0aW9ucy5wYW5uaW5nTW9kZWw7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLm1heERpc3RhbmNlID0gb3B0aW9ucy5tYXhEaXN0YW5jZTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzdGFuY2VNb2RlbCA9IG9wdGlvbnMuZGlzdGFuY2VNb2RlbDtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuY29uZU91dGVyR2FpbiA9IG9wdGlvbnMuY29uZU91dGVyR2Fpbjtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuY29uZU91dGVyQW5nbGUgPSBvcHRpb25zLmNvbmVPdXRlckFuZ2xlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5jb25lSW5uZXJBbmdsZSA9IG9wdGlvbnMuY29uZUlubmVyQW5nbGU7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLnJlZkRpc3RhbmNlID0gb3B0aW9ucy5yZWZEaXN0YW5jZTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIucm9sbG9mZkZhY3RvciA9IG9wdGlvbnMucm9sbG9mZkZhY3Rvcjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkcyB0aGUgY3VycmVudCBvcmllbnRhdGlvblxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gW1xuXHQgICAgICAgICAgICBvcHRpb25zLm9yaWVudGF0aW9uWCxcblx0ICAgICAgICAgICAgb3B0aW9ucy5vcmllbnRhdGlvblksXG5cdCAgICAgICAgICAgIG9wdGlvbnMub3JpZW50YXRpb25aXG5cdCAgICAgICAgXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkcyB0aGUgY3VycmVudCBwb3NpdGlvblxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gW1xuXHQgICAgICAgICAgICBvcHRpb25zLnBvc2l0aW9uWCxcblx0ICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvblksXG5cdCAgICAgICAgICAgIG9wdGlvbnMucG9zaXRpb25aXG5cdCAgICAgICAgXTtcblx0ICAgICAgICAvLyBzZXQgdGhlIGRlZmF1bHQgcG9zaXRpb24vb3JpZW50YXRpb25cblx0ICAgICAgICB0aGlzLm9yaWVudGF0aW9uWCA9IG9wdGlvbnMub3JpZW50YXRpb25YO1xuXHQgICAgICAgIHRoaXMub3JpZW50YXRpb25ZID0gb3B0aW9ucy5vcmllbnRhdGlvblk7XG5cdCAgICAgICAgdGhpcy5vcmllbnRhdGlvblogPSBvcHRpb25zLm9yaWVudGF0aW9uWjtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uWCA9IG9wdGlvbnMucG9zaXRpb25YO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb25ZID0gb3B0aW9ucy5wb3NpdGlvblk7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvblogPSBvcHRpb25zLnBvc2l0aW9uWjtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhbm5lcjNELCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHMgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwb3NpdGlvblgnOiAwLFxuXHQgICAgICAgICdwb3NpdGlvblknOiAwLFxuXHQgICAgICAgICdwb3NpdGlvblonOiAwLFxuXHQgICAgICAgICdvcmllbnRhdGlvblgnOiAwLFxuXHQgICAgICAgICdvcmllbnRhdGlvblknOiAwLFxuXHQgICAgICAgICdvcmllbnRhdGlvblonOiAwLFxuXHQgICAgICAgICdwYW5uaW5nTW9kZWwnOiAnZXF1YWxwb3dlcicsXG5cdCAgICAgICAgJ21heERpc3RhbmNlJzogMTAwMDAsXG5cdCAgICAgICAgJ2Rpc3RhbmNlTW9kZWwnOiAnaW52ZXJzZScsXG5cdCAgICAgICAgJ2NvbmVPdXRlckdhaW4nOiAwLFxuXHQgICAgICAgICdjb25lT3V0ZXJBbmdsZSc6IDM2MCxcblx0ICAgICAgICAnY29uZUlubmVyQW5nbGUnOiAzNjAsXG5cdCAgICAgICAgJ3JlZkRpc3RhbmNlJzogMSxcblx0ICAgICAgICAncm9sbG9mZkZhY3Rvcic6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcmFtcCB0aW1lIHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIHNldFRhcmdldEF0VGltZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QucHJvdG90eXBlLl9yYW1wVGltZUNvbnN0YW50ID0gMC4wMTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgc291cmNlIGluIDNkIHNwYWNlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBhbm5lcjNEfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELnByb3RvdHlwZS5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Bhbm5lci5wb3NpdGlvblgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5wb3NpdGlvblguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5wb3NpdGlvblkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5wb3NpdGlvblouc2V0VGFyZ2V0QXRUaW1lKHosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnNldFBvc2l0aW9uKHgsIHksIHopO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBzb3VyY2UgaW4gM2Qgc3BhY2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGFubmVyM0R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QucHJvdG90eXBlLnNldE9yaWVudGF0aW9uID0gZnVuY3Rpb24gKHgsIHksIHopIHtcblx0ICAgICAgICBpZiAodGhpcy5fcGFubmVyLm9yaWVudGF0aW9uWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLm9yaWVudGF0aW9uWC5zZXRUYXJnZXRBdFRpbWUoeCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLm9yaWVudGF0aW9uWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLm9yaWVudGF0aW9uWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIuc2V0T3JpZW50YXRpb24oeCwgeSwgeik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ3Bvc2l0aW9uWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMF0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblswXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAncG9zaXRpb25ZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblsxXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzFdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25aXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdwb3NpdGlvblonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzJdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMl07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggb3JpZW50YXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBvcmllbnRhdGlvblhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ29yaWVudGF0aW9uWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMF0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblswXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBvcmllbnRhdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG9yaWVudGF0aW9uWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAnb3JpZW50YXRpb25ZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblsxXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzFdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IG9yaWVudGF0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgb3JpZW50YXRpb25aXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdvcmllbnRhdGlvblonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzJdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMl07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUHJveHkgYSBwcm9wZXJ0eSBvbiB0aGUgcGFubmVyIHRvIGFuIGV4cG9zZWQgcHVibGljIHByb3Blcnlcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wKSB7XG5cdCAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCBwcm9wLCB7XG5cdCAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcGFubmVyW3Byb3BdID0gdmFsO1xuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYW5uZXJbcHJvcF07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBhbm5pbmcgbW9kZWwuIEVpdGhlciBcImVxdWFscG93ZXJcIiBvciBcIkhSVEZcIi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHBhbm5pbmdNb2RlbFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgncGFubmluZ01vZGVsJyk7XG5cdCAgICAvKipcblx0XHQgKiAgQSByZWZlcmVuY2UgZGlzdGFuY2UgZm9yIHJlZHVjaW5nIHZvbHVtZSBhcyBzb3VyY2UgbW92ZSBmdXJ0aGVyIGZyb20gdGhlIGxpc3RlbmVyXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSByZWZEaXN0YW5jZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgncmVmRGlzdGFuY2UnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZXNjcmliZXMgaG93IHF1aWNrbHkgdGhlIHZvbHVtZSBpcyByZWR1Y2VkIGFzIHNvdXJjZSBtb3ZlcyBhd2F5IGZyb20gbGlzdGVuZXIuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSByb2xsb2ZmRmFjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdyb2xsb2ZmRmFjdG9yJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRpc3RhbmNlIG1vZGVsIHVzZWQgYnksICBcImxpbmVhclwiLCBcImludmVyc2VcIiwgb3IgXCJleHBvbmVudGlhbFwiLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgZGlzdGFuY2VNb2RlbFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnZGlzdGFuY2VNb2RlbCcpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBhbmdsZSwgaW4gZGVncmVlcywgaW5zaWRlIG9mIHdoaWNoIHRoZXJlIHdpbGwgYmUgbm8gdm9sdW1lIHJlZHVjdGlvblxuXHRcdCAqICBAdHlwZSB7RGVncmVlc31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIGNvbmVJbm5lckFuZ2xlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdjb25lSW5uZXJBbmdsZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBhbmdsZSwgaW4gZGVncmVlcywgb3V0c2lkZSBvZiB3aGljaCB0aGUgdm9sdW1lIHdpbGwgYmUgcmVkdWNlZFxuXHRcdCAqICB0byBhIGNvbnN0YW50IHZhbHVlIG9mIGNvbmVPdXRlckdhaW5cblx0XHQgKiAgQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBjb25lT3V0ZXJBbmdsZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnY29uZU91dGVyQW5nbGUnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZ2FpbiBvdXRzaWRlIG9mIHRoZSBjb25lT3V0ZXJBbmdsZVxuXHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIGNvbmVPdXRlckdhaW5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2NvbmVPdXRlckdhaW4nKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbWF4aW11bSBkaXN0YW5jZSBiZXR3ZWVuIHNvdXJjZSBhbmQgbGlzdGVuZXIsXG5cdFx0ICogIGFmdGVyIHdoaWNoIHRoZSB2b2x1bWUgd2lsbCBub3QgYmUgcmVkdWNlZCBhbnkgZnVydGhlci5cblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgbWF4RGlzdGFuY2Vcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ21heERpc3RhbmNlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhbm5lcjNEfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFubmVyM0Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBhblZvbCBpcyBhIFRvbmUuUGFubmVyIGFuZCBUb25lLlZvbHVtZSBpbiBvbmUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtBdWRpb1JhbmdlfSBwYW4gdGhlIGluaXRpYWwgcGFuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2b2x1bWUgVGhlIG91dHB1dCB2b2x1bWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9wYW4gdGhlIGluY29taW5nIHNpZ25hbCBsZWZ0IGFuZCBkcm9wIHRoZSB2b2x1bWVcblx0XHQgKiB2YXIgcGFuVm9sID0gbmV3IFRvbmUuUGFuVm9sKC0wLjI1LCAtMTIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5Wb2wgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncGFuJyxcblx0ICAgICAgICAgICAgJ3ZvbHVtZSdcblx0ICAgICAgICBdLCBUb25lLlBhblZvbCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGFubmluZyBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUGFubmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuUGFubmVyKG9wdGlvbnMucGFuKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgTC9SIHBhbm5pbmcgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBhbiA9IHRoaXMuX3Bhbm5lci5wYW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZvbHVtZSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZvbHVtZSBjb250cm9sIGluIGRlY2liZWxzLlxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5jb25uZWN0KHRoaXMuX3ZvbHVtZSk7XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3BhbicsXG5cdCAgICAgICAgICAgICd2b2x1bWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYW5Wb2wsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlBhblZvbC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGFuJzogMCxcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZS91bm11dGUgdGhlIHZvbHVtZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhblZvbCNcblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5Wb2wucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFuVm9sfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhblZvbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3BhbicsXG5cdCAgICAgICAgICAgICd2b2x1bWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucGFuID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhblZvbDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlNvbG8gbGV0cyB5b3UgaXNvbGF0ZSBhIHNwZWNpZmljIGF1ZGlvIHN0cmVhbS4gV2hlblxuXHRcdCAqICAgICAgICAgYW4gaW5zdGFuY2UgaXMgc2V0IHRvIGBzb2xvPXRydWVgLCBpdCB3aWxsIG11dGUgYWxsIG90aGVyIGluc3RhbmNlcy5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzb2xvQSA9IG5ldyBUb25lLlNvbG8oKVxuXHRcdCAqIHZhciBzb2xvQiA9IG5ldyBUb25lLlNvbG8oKVxuXHRcdCAqIHNvbG9BLnNvbG8gPSB0cnVlXG5cdFx0ICogLy9ubyBhdWRpbyB3aWxsIHBhc3MgdGhyb3VnaCBzb2xvQlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnc29sbyddLCBUb25lLlNvbG8pO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGlucHV0IGFuZCBvdXRwdXQgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgYm91bmQgX3NvbG9lZCBtZXRob2Rcblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zb2xvQmluZCA9IHRoaXMuX3NvbG9lZC5iaW5kKHRoaXMpO1xuXHQgICAgICAgIC8vbGlzdGVuIGZvciBzb2xvIGV2ZW50cyBjbGFzcy13aWRlLlxuXHQgICAgICAgIHRoaXMuY29udGV4dC5vbignc29sbycsIHRoaXMuX3NvbG9CaW5kKTtcblx0ICAgICAgICAvL3NldCBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLnNvbG8gPSBvcHRpb25zLnNvbG87XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Tb2xvLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8uZGVmYXVsdHMgPSB7IHNvbG86IGZhbHNlIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXNvbGF0ZXMgdGhpcyBpbnN0YW5jZSBhbmQgbXV0ZXMgYWxsIG90aGVyIGluc3RhbmNlcyBvZiBUb25lLlNvbG8uXG5cdFx0ICogIE9ubHkgb25lIGluc3RhbmNlIGNhbiBiZSBzb2xvZWQgYXQgYSB0aW1lLiBBIHNvbG9lZFxuXHRcdCAqICBpbnN0YW5jZSB3aWxsIHJlcG9ydCBgc29sbz1mYWxzZWAgd2hlbiBhbm90aGVyIGluc3RhbmNlIGlzIHNvbG9lZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuU29sbyNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBuYW1lIHNvbG9cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNvbG8ucHJvdG90eXBlLCAnc29sbycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzU29sb2VkKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzb2xvKSB7XG5cdCAgICAgICAgICAgIGlmIChzb2xvKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hZGRTb2xvKCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVTb2xvKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmVtaXQoJ3NvbG8nLCB0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgY3VycmVudCBpbnN0YW5jZSBpcyBtdXRlZCwgaS5lLiBhbm90aGVyIGluc3RhbmNlIGlzIHNvbG9lZFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Tb2xvI1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgbXV0ZWRcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Tb2xvLnByb3RvdHlwZSwgJ211dGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5nYWluLnZhbHVlID09PSAwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQWRkIHRoaXMgdG8gdGhlIHNvbG9lZCBhcnJheVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9hZGRTb2xvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghVG9uZS5pc0FycmF5KHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8pKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8gPSBbXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCF0aGlzLl9pc1NvbG9lZCgpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8ucHVzaCh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVtb3ZlIHRoaXMgZnJvbSB0aGUgc29sb2VkIGFycmF5XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX3JlbW92ZVNvbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2lzU29sb2VkKCkpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5pbmRleE9mKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IElzIHRoaXMgb24gdGhlIHNvbG9lZCBhcnJheVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9pc1NvbG9lZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8pKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLmxlbmd0aCAhPT0gMCAmJiB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLmluZGV4T2YodGhpcykgIT09IC0xO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIG5vIG9uZSBpcyBzb2xvZWRcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5fbm9Tb2xvcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gIVRvbmUuaXNBcnJheSh0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvKSB8fCB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLmxlbmd0aCA9PT0gMDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU29sbyB0aGUgY3VycmVudCBpbnN0YW5jZSBhbmQgdW5zb2xvIGFsbCBvdGhlciBpbnN0YW5jZXMuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuU29sb30gIGluc3RhbmNlICBUaGUgaW5zdGFuY2Ugd2hpY2ggaXMgYmVpbmcgc29sb2VkL3Vuc29sb2VkLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5fc29sb2VkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9pc1NvbG9lZCgpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuZ2Fpbi52YWx1ZSA9IDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ub1NvbG9zKCkpIHtcblx0ICAgICAgICAgICAgLy9ubyBvbmUgaXMgc29sb2VkXG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuZ2Fpbi52YWx1ZSA9IDE7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5nYWluLnZhbHVlID0gMDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlNvbG99ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0Lm9mZignc29sbycsIHRoaXMuX3NvbG9CaW5kKTtcblx0ICAgICAgICB0aGlzLl9yZW1vdmVTb2xvKCk7XG5cdCAgICAgICAgdGhpcy5fc29sb0JpbmQgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU29sbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgR2V0IHRoZSBjdXJyZW50IHdhdmVmb3JtIGRhdGEgb2YgdGhlIGNvbm5lY3RlZCBhdWRpbyBzb3VyY2UuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBzaXplIFRoZSBzaXplIG9mIHRoZSBGRlQuIFZhbHVlIG11c3QgYmUgYSBwb3dlciBvZlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlZm9ybSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3NpemUnXSwgVG9uZS5XYXZlZm9ybSk7XG5cdCAgICAgICAgb3B0aW9ucy50eXBlID0gVG9uZS5BbmFseXNlci5UeXBlLldhdmVmb3JtO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFuYWx5c2VyIG5vZGUuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbmFseXNlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuQW5hbHlzZXIob3B0aW9ucyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5XYXZlZm9ybSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtLmRlZmF1bHRzID0geyAnc2l6ZSc6IDEwMjQgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXRzIHRoZSB3YXZlZm9ybSBvZiB0aGUgYXVkaW8gc291cmNlLiBSZXR1cm5zIHRoZSB3YXZlZm9ybSBkYXRhXG5cdFx0ICogIG9mIGxlbmd0aCBbc2l6ZV0oI3NpemUpIGFzIGEgRmxvYXQzMkFycmF5IHdpdGggdmFsdWVzIGJldHdlZW4gLTEgYW5kIDEuXG5cdFx0ICogIEByZXR1cm5zIHtUeXBlZEFycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlZm9ybS5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLmdldFZhbHVlKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzaXplIG9mIGFuYWx5c2lzLiBUaGlzIG11c3QgYmUgYSBwb3dlciBvZiB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5XYXZlZm9ybSNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuV2F2ZWZvcm0ucHJvdG90eXBlLCAnc2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNpemUgPSBzaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5XYXZlZm9ybX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLldhdmVmb3JtO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5DdHJsSW50ZXJwb2xhdGUgd2lsbCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIGdpdmVuIHZhbHVlcyBiYXNlZFxuXHRcdCAqICAgICAgICAgb24gdGhlIFwiaW5kZXhcIiBwcm9wZXJ0eS4gUGFzc2luZyBpbiBhbiBhcnJheSBvciBvYmplY3QgbGl0ZXJhbFxuXHRcdCAqICAgICAgICAgd2lsbCBpbnRlcnBvbGF0ZSBlYWNoIG9mIHRoZSBwYXJhbWV0ZXJzLiBOb3RlIChpLmUuIFwiQzNcIilcblx0XHQgKiAgICAgICAgIGFuZCBUaW1lIChpLmUuIFwiNG4gKyAyXCIpIGNhbiBiZSBpbnRlcnBvbGF0ZWQuIEFsbCBvdGhlciB2YWx1ZXMgYXJlXG5cdFx0ICogICAgICAgICBhc3N1bWVkIHRvIGJlIG51bWJlcnMuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBpbnRlcnAgPSBuZXcgVG9uZS5DdHJsSW50ZXJwb2xhdGUoWzAsIDIsIDksIDRdKTtcblx0XHQgKiBpbnRlcnAuaW5kZXggPSAwLjc1O1xuXHRcdCAqIGludGVycC52YWx1ZTsgLy9yZXR1cm5zIDEuNVxuXHRcdCAqXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGludGVycCA9IG5ldyBUb25lLkN0cmxJbnRlcnBvbGF0ZShbXG5cdFx0ICogXHRbMiwgNCwgNV0sXG5cdFx0ICogXHRbOSwgMywgMl0sXG5cdFx0ICogXSk7XG5cdFx0ICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSBhcnJheSBvZiB2YWx1ZXMgdG8gaW50ZXJwb2xhdGUgb3ZlclxuXHRcdCAqIEBwYXJhbSB7UG9zaXRpdmV9IGluZGV4IFRoZSBpbml0aWFsIGludGVycG9sYXRpb24gaW5kZXguXG5cdFx0ICogQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd2YWx1ZXMnLFxuXHQgICAgICAgICAgICAnaW5kZXgnXG5cdCAgICAgICAgXSwgVG9uZS5DdHJsSW50ZXJwb2xhdGUpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWVzIHRvIGludGVycG9sYXRlIGJldHdlZW5cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBvcHRpb25zLnZhbHVlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgaW50ZXJwb2xhdGVkIGluZGV4IGJldHdlZW4gdmFsdWVzLiBGb3IgZXhhbXBsZTogYSB2YWx1ZSBvZiAxLjVcblx0XHRcdCAqICB3b3VsZCBpbnRlcnBvbGF0ZSBlcXVhbGx5IGJldHdlZW4gdGhlIHZhbHVlIGF0IGluZGV4IDFcblx0XHRcdCAqICBhbmQgdGhlIHZhbHVlIGF0IGluZGV4IDIuIFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiBpbnRlcnAuaW5kZXggPSAwOyBcblx0XHRcdCAqIGludGVycC52YWx1ZTsgLy9yZXR1cm5zIHRoZSB2YWx1ZSBhdCAwXG5cdFx0XHQgKiBpbnRlcnAuaW5kZXggPSAwLjU7XG5cdFx0XHQgKiBpbnRlcnAudmFsdWU7IC8vcmV0dXJucyB0aGUgdmFsdWUgYmV0d2VlbiBpbmRpY2VzIDAgYW5kIDEuIFxuXHRcdFx0ICogIEB0eXBlICB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmluZGV4ID0gb3B0aW9ucy5pbmRleDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkN0cmxJbnRlcnBvbGF0ZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdpbmRleCc6IDAsXG5cdCAgICAgICAgJ3ZhbHVlcyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IGludGVycG9sYXRlZCB2YWx1ZSBiYXNlZCBvbiB0aGUgaW5kZXhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkN0cmxJbnRlcnBvbGF0ZSNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DdHJsSW50ZXJwb2xhdGUucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXg7XG5cdCAgICAgICAgICAgIGluZGV4ID0gTWF0aC5taW4oaW5kZXgsIHRoaXMudmFsdWVzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgbG93ZXJQb3NpdGlvbiA9IE1hdGguZmxvb3IoaW5kZXgpO1xuXHQgICAgICAgICAgICB2YXIgbG93ZXIgPSB0aGlzLnZhbHVlc1tsb3dlclBvc2l0aW9uXTtcblx0ICAgICAgICAgICAgdmFyIHVwcGVyID0gdGhpcy52YWx1ZXNbTWF0aC5jZWlsKGluZGV4KV07XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcnBvbGF0ZShpbmRleCAtIGxvd2VyUG9zaXRpb24sIGxvd2VyLCB1cHBlcik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgaW50ZXJwb2xhdGlvbiByb3V0aW5lXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSAgaW5kZXggIFRoZSBpbmRleCBiZXR3ZWVuIHRoZSBsb3dlciBhbmQgdXBwZXJcblx0XHQgKiAgQHBhcmFtICB7Kn0gIGxvd2VyIFxuXHRcdCAqICBAcGFyYW0gIHsqfSAgdXBwZXIgXG5cdFx0ICogIEByZXR1cm4gIHsqfSAgVGhlIGludGVycG9sYXRlZCB2YWx1ZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUucHJvdG90eXBlLl9pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uIChpbmRleCwgbG93ZXIsIHVwcGVyKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheShsb3dlcikpIHtcblx0ICAgICAgICAgICAgdmFyIHJldEFycmF5ID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG93ZXIubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHJldEFycmF5W2ldID0gdGhpcy5faW50ZXJwb2xhdGUoaW5kZXgsIGxvd2VyW2ldLCB1cHBlcltpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHJldEFycmF5O1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc09iamVjdChsb3dlcikpIHtcblx0ICAgICAgICAgICAgdmFyIHJldE9iaiA9IHt9O1xuXHQgICAgICAgICAgICBmb3IgKHZhciBhdHRyIGluIGxvd2VyKSB7XG5cdCAgICAgICAgICAgICAgICByZXRPYmpbYXR0cl0gPSB0aGlzLl9pbnRlcnBvbGF0ZShpbmRleCwgbG93ZXJbYXR0cl0sIHVwcGVyW2F0dHJdKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0T2JqO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGxvd2VyID0gdGhpcy5fdG9OdW1iZXIobG93ZXIpO1xuXHQgICAgICAgICAgICB1cHBlciA9IHRoaXMuX3RvTnVtYmVyKHVwcGVyKTtcblx0ICAgICAgICAgICAgcmV0dXJuICgxIC0gaW5kZXgpICogbG93ZXIgKyBpbmRleCAqIHVwcGVyO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBmcm9tIHRoZSBnaXZlbiB0eXBlIGludG8gYSBudW1iZXJcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfFN0cmluZ30gIHZhbHVlXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZS5wcm90b3R5cGUuX3RvTnVtYmVyID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKHZhbCkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL290aGVyd2lzZSBhc3N1bWUgdGhhdCBpdCdzIFRpbWUuLi5cblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9TZWNvbmRzKHZhbCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5DdHJsSW50ZXJwb2xhdGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ3RybEludGVycG9sYXRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5DdHJsTWFya292IHJlcHJlc2VudHMgYSBNYXJrb3YgQ2hhaW4gd2hlcmUgZWFjaCBjYWxsXG5cdFx0ICogICAgICAgICB0byBUb25lLkN0cmxNYXJrb3YubmV4dCB3aWxsIG1vdmUgdG8gdGhlIG5leHQgc3RhdGUuIElmIHRoZSBuZXh0XG5cdFx0ICogICAgICAgICBzdGF0ZSBjaG9pY2UgaXMgYW4gYXJyYXksIHRoZSBuZXh0IHN0YXRlIGlzIGNob3NlbiByYW5kb21seSB3aXRoXG5cdFx0ICogICAgICAgICBldmVuIHByb2JhYmlsaXR5IGZvciBhbGwgb2YgdGhlIGNob2ljZXMuIEZvciBhIHdlaWdodGVkIHByb2JhYmlsaXR5XG5cdFx0ICogICAgICAgICBvZiB0aGUgbmV4dCBjaG9pY2VzLCBwYXNzIGluIGFuIG9iamVjdCB3aXRoIFwic3RhdGVcIiBhbmQgXCJwcm9iYWJpbGl0eVwiIGF0dHJpYnV0ZXMuIFxuXHRcdCAqICAgICAgICAgVGhlIHByb2JhYmlsaXRpZXMgd2lsbCBiZSBub3JtYWxpemVkIGFuZCB0aGVuIGNob3Nlbi4gSWYgbm8gbmV4dCBvcHRpb25zXG5cdFx0ICogICAgICAgICBhcmUgZ2l2ZW4gZm9yIHRoZSBjdXJyZW50IHN0YXRlLCB0aGUgc3RhdGUgd2lsbCBzdGF5IHRoZXJlLiBcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNoYWluID0gbmV3IFRvbmUuQ3RybE1hcmtvdih7XG5cdFx0ICogXHRcImJlZ2lubmluZ1wiIDogW1wiZW5kXCIsIFwibWlkZGxlXCJdLFxuXHRcdCAqIFx0XCJtaWRkbGVcIiA6IFwiZW5kXCJcblx0XHQgKiB9KTtcblx0XHQgKiBjaGFpbi52YWx1ZSA9IFwiYmVnaW5uaW5nXCI7XG5cdFx0ICogY2hhaW4ubmV4dCgpOyAvL3JldHVybnMgXCJlbmRcIiBvciBcIm1pZGRsZVwiIHdpdGggNTAlIHByb2JhYmlsaXR5XG5cdFx0ICpcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgY2hhaW4gPSBuZXcgVG9uZS5DdHJsTWFya292KHtcblx0XHQgKiBcdFwiYmVnaW5uaW5nXCIgOiBbe1widmFsdWVcIiA6IFwiZW5kXCIsIFwicHJvYmFiaWxpdHlcIiA6IDAuOH0sIFxuXHRcdCAqIFx0XHRcdFx0XHR7XCJ2YWx1ZVwiIDogXCJtaWRkbGVcIiwgXCJwcm9iYWJpbGl0eVwiIDogMC4yfV0sXG5cdFx0ICogXHRcIm1pZGRsZVwiIDogXCJlbmRcIlxuXHRcdCAqIH0pO1xuXHRcdCAqIGNoYWluLnZhbHVlID0gXCJiZWdpbm5pbmdcIjtcblx0XHQgKiBjaGFpbi5uZXh0KCk7IC8vcmV0dXJucyBcImVuZFwiIHdpdGggODAlIHByb2JhYmlsaXR5IG9yIFwibWlkZGxlXCIgd2l0aCAyMCUuXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgQW4gb2JqZWN0IHdpdGggdGhlIHN0YXRlIG5hbWVzIGFzIHRoZSBrZXlzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBuZXh0IHN0YXRlKHMpIGFzIHRoZSB2YWx1ZXMuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsTWFya292ID0gZnVuY3Rpb24gKHZhbHVlcywgaW5pdGlhbCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgTWFya292IHZhbHVlcyB3aXRoIHN0YXRlcyBhcyB0aGUga2V5c1xuXHRcdFx0ICogIGFuZCBuZXh0IHN0YXRlKHMpIGFzIHRoZSB2YWx1ZXMuIFxuXHRcdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IFRvbmUuZGVmYXVsdEFyZyh2YWx1ZXMsIHt9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgTWFya292IHZhbHVlcy4gVGhlIG5leHRcblx0XHRcdCAqICBzdGF0ZSB3aWxsIGJlIGV2YWx1YXRlZCBhbmQgcmV0dXJuZWQgd2hlbiBUb25lLkN0cmxNYXJrb3YubmV4dFxuXHRcdFx0ICogIGlzIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBUb25lLmRlZmF1bHRBcmcoaW5pdGlhbCwgT2JqZWN0LmtleXModGhpcy52YWx1ZXMpWzBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkN0cmxNYXJrb3YpO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIG5leHQgc3RhdGUgb2YgdGhlIE1hcmtvdiB2YWx1ZXMuIFxuXHRcdCAqICBAcmV0dXJuICB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsTWFya292LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLnZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh0aGlzLnZhbHVlKSkge1xuXHQgICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMudmFsdWVzW3RoaXMudmFsdWVdO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KG5leHQpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZGlzdHJpYnV0aW9uID0gdGhpcy5fZ2V0UHJvYkRpc3RyaWJ1dGlvbihuZXh0KTtcblx0ICAgICAgICAgICAgICAgIHZhciByYW5kID0gTWF0aC5yYW5kb20oKTtcblx0ICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3RyaWJ1dGlvbi5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBkaXN0ID0gZGlzdHJpYnV0aW9uW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChyYW5kID4gdG90YWwgJiYgcmFuZCA8IHRvdGFsICsgZGlzdCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hvc2VuID0gbmV4dFtpXTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QoY2hvc2VuKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNob3Nlbi52YWx1ZTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjaG9zZW47XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gZGlzdDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXh0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDaG9vc2UgcmFuZG9tbHkgZnJvbSBhbiBhcnJheSB3ZWlnaHRlZCBvcHRpb25zIGluIHRoZSBmb3JtIFxuXHRcdCAqICB7XCJzdGF0ZVwiIDogc3RyaW5nLCBcInByb2JhYmlsaXR5XCIgOiBudW1iZXJ9IG9yIGFuIGFycmF5IG9mIHZhbHVlc1xuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIG9wdGlvbnMgXG5cdFx0ICogIEByZXR1cm4gIHtBcnJheX0gIFRoZSByYW5kb21seSBzZWxlY3RlZCBjaG9pY2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdi5wcm90b3R5cGUuX2dldFByb2JEaXN0cmlidXRpb24gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIHZhciBkaXN0cmlidXRpb24gPSBbXTtcblx0ICAgICAgICB2YXIgdG90YWwgPSAwO1xuXHQgICAgICAgIHZhciBuZWVkc05vcm1hbGl6aW5nID0gZmFsc2U7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBvcHRpb24gPSBvcHRpb25zW2ldO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChvcHRpb24pKSB7XG5cdCAgICAgICAgICAgICAgICBuZWVkc05vcm1hbGl6aW5nID0gdHJ1ZTtcblx0ICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbltpXSA9IG9wdGlvbi5wcm9iYWJpbGl0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbltpXSA9IDEgLyBvcHRpb25zLmxlbmd0aDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0b3RhbCArPSBkaXN0cmlidXRpb25baV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChuZWVkc05vcm1hbGl6aW5nKSB7XG5cdCAgICAgICAgICAgIC8vbm9ybWFsaXplIHRoZSB2YWx1ZXNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkaXN0cmlidXRpb24ubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbltqXSA9IGRpc3RyaWJ1dGlvbltqXSAvIHRvdGFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBkaXN0cmlidXRpb247XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkN0cmxNYXJrb3Z9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxNYXJrb3Y7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBHZW5lcmF0ZSBwYXR0ZXJucyBmcm9tIGFuIGFycmF5IG9mIHZhbHVlcy5cblx0XHQgKiAgICAgICAgIEhhcyBhIG51bWJlciBvZiBhcnBlZ2dpYXRpb24gYW5kIHJhbmRvbWl6ZWRcblx0XHQgKiAgICAgICAgIHNlbGVjdGlvbiBwYXR0ZXJucy4gXG5cdFx0ICogICAgICAgICAgIDx1bD5cblx0XHQgKiAgXHQgICAgICAgIDxsaT5cInVwXCIgLSBjeWNsZXMgdXB3YXJkPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwiZG93blwiIC0gY3ljbGVzIGRvd253YXJkPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwidXBEb3duXCIgLSB1cCB0aGVuIGFuZCBkb3duPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwiZG93blVwXCIgLSBjeWNsZXMgZG93biB0aGVuIGFuZCB1cDwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImFsdGVybmF0ZVVwXCIgLSBqdW1wIHVwIHR3byBhbmQgZG93biBvbmU8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJhbHRlcm5hdGVEb3duXCIgLSBqdW1wIGRvd24gdHdvIGFuZCB1cCBvbmU8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJyYW5kb21cIiAtIHJhbmRvbWx5IHNlbGVjdCBhbiBpbmRleDwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInJhbmRvbVdhbGtcIiAtIHJhbmRvbWx5IG1vdmVzIG9uZSBpbmRleCBhd2F5IGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb248L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJyYW5kb21PbmNlXCIgLSByYW5kb21seSBzZWxlY3QgYW4gaW5kZXggd2l0aG91dCByZXBlYXRpbmcgdW50aWwgYWxsIHZhbHVlcyBoYXZlIGJlZW4gY2hvc2VuLjwvbGk+XG5cdFx0ICogICAgIFx0XHQ8L3VsPlxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIHZhbHVlcyAgIEFuIGFycmF5IG9mIG9wdGlvbnMgdG8gY2hvb3NlIGZyb20uXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuQ3RybFBhdHRlcm4uVHlwZT19ICB0eXBlICBUaGUgbmFtZSBvZiB0aGUgcGF0dGVybi5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3ZhbHVlcycsXG5cdCAgICAgICAgICAgICd0eXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuQ3RybFBhdHRlcm4pO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXJyYXkgb2YgdmFsdWVzIHRvIGFycGVnZ2lhdGUgb3ZlclxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gb3B0aW9ucy52YWx1ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHZhbHVlcyBhcnJheVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbmRleCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHR5cGUgcGxhY2Vob2xkZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5DdHJsUGF0dGVybi5UeXBlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTaHVmZmxlZCB2YWx1ZXMgZm9yIHRoZSBSYW5kb21PbmNlIHR5cGVcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NodWZmbGVkID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGlyZWN0aW9uIG9mIHRoZSBtb3ZlbWVudFxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3RybFBhdHRlcm4pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBDb250cm9sIFBhdHRlcm5zXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLlR5cGUgPSB7XG5cdCAgICAgICAgVXA6ICd1cCcsXG5cdCAgICAgICAgRG93bjogJ2Rvd24nLFxuXHQgICAgICAgIFVwRG93bjogJ3VwRG93bicsXG5cdCAgICAgICAgRG93blVwOiAnZG93blVwJyxcblx0ICAgICAgICBBbHRlcm5hdGVVcDogJ2FsdGVybmF0ZVVwJyxcblx0ICAgICAgICBBbHRlcm5hdGVEb3duOiAnYWx0ZXJuYXRlRG93bicsXG5cdCAgICAgICAgUmFuZG9tOiAncmFuZG9tJyxcblx0ICAgICAgICBSYW5kb21XYWxrOiAncmFuZG9tV2FsaycsXG5cdCAgICAgICAgUmFuZG9tT25jZTogJ3JhbmRvbU9uY2UnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy4gXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCxcblx0ICAgICAgICAndmFsdWVzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHZhbHVlIGF0IHRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBwYXR0ZXJuLlxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybFBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHsqfVxuXHRcdCAqICBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vc29tZSBzYWZlZ3VhcmRzXG5cdCAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlcy5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlcy5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5taW4odGhpcy5pbmRleCwgdGhpcy52YWx1ZXMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlc1t0aGlzLmluZGV4XTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbU9uY2UpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlcy5sZW5ndGggIT09IHRoaXMuX3NodWZmbGVkLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NodWZmbGVWYWx1ZXMoKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMudmFsdWVzW3RoaXMuX3NodWZmbGVkW3RoaXMuaW5kZXhdXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwYXR0ZXJuIHVzZWQgdG8gc2VsZWN0IHRoZSBuZXh0XG5cdFx0ICogIGl0ZW0gZnJvbSB0aGUgdmFsdWVzIGFycmF5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkN0cmxQYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7VG9uZS5DdHJsUGF0dGVybi5UeXBlfVxuXHRcdCAqICBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX3NodWZmbGVkID0gbnVsbDtcblx0ICAgICAgICAgICAgLy90aGUgZmlyc3QgaW5kZXhcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXBEb3duIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVVcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd24gfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd25VcCB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlRG93bikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy90aGUgZGlyZWN0aW9uXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXBEb3duIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVVcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duVXAgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZURvd24pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vcmFuZG9tc1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbU9uY2UpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NodWZmbGVWYWx1ZXMoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlJhbmRvbSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMudmFsdWVzLmxlbmd0aCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIG5leHQgdmFsdWUgZ2l2ZW4gdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHQgKiAgYW5kIHBhdHRlcm4uXG5cdFx0ICogIEByZXR1cm4geyp9IFRoZSBuZXh0IHZhbHVlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciB0eXBlID0gdGhpcy50eXBlO1xuXHQgICAgICAgIC8vY2hvb3NlIHRoZSBuZXh0IGluZGV4XG5cdCAgICAgICAgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCkge1xuXHQgICAgICAgICAgICB0aGlzLmluZGV4Kys7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID49IHRoaXMudmFsdWVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXgtLTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwRG93biB8fCB0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93blVwKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kaXJlY3Rpb24gPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleC0tO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IDE7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnZhbHVlcy5sZW5ndGggLSAyO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb20pIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMudmFsdWVzLmxlbmd0aCk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tV2Fsaykge1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5yYW5kb20oKSA8IDAuNSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleC0tO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IE1hdGgubWF4KHRoaXMuaW5kZXgsIDApO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IE1hdGgubWluKHRoaXMuaW5kZXgsIHRoaXMudmFsdWVzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSkge1xuXHQgICAgICAgICAgICB0aGlzLmluZGV4Kys7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID49IHRoaXMudmFsdWVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IDA7XG5cdCAgICAgICAgICAgICAgICAvL3Jlc2h1ZmZsZSB0aGUgdmFsdWVzIGZvciBuZXh0IHRpbWVcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NodWZmbGVWYWx1ZXMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZVVwKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kaXJlY3Rpb24gPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAyO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4IC09IDE7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZURvd24pIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDE7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggLT0gMjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnZhbHVlcy5sZW5ndGggLSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNodWZmbGVzIHRoZSB2YWx1ZXMgYW5kIHBsYWNlcyB0aGUgcmVzdWx0cyBpbnRvIHRoZSBfc2h1ZmZsZWRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLl9zaHVmZmxlVmFsdWVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBjb3B5ID0gW107XG5cdCAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGNvcHlbaV0gPSBpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB3aGlsZSAoY29weS5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgICAgIHZhciByYW5kVmFsID0gY29weS5zcGxpY2UoTWF0aC5mbG9vcihjb3B5Lmxlbmd0aCAqIE1hdGgucmFuZG9tKCkpLCAxKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZWQucHVzaChyYW5kVmFsWzBdKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkN0cmxQYXR0ZXJufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3NodWZmbGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ3RybFBhdHRlcm47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQ2hvb3NlIGEgcmFuZG9tIHZhbHVlLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcmFuZG9tV2FsayA9IG5ldyBUb25lLkN0cmxSYW5kb20oe1xuXHRcdCAqIFx0XCJtaW5cIiA6IDAsXG5cdFx0ICogXHRcIm1heFwiIDogMTAsXG5cdFx0ICogXHRcImludGVnZXJcIiA6IHRydWVcblx0XHQgKiB9KTtcblx0XHQgKiByYW5kb21XYWxrLmV2YWwoKTtcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxUaW1lPX0gbWluIFRoZSBtaW5pbXVtIHJldHVybiB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8VGltZT19IG1heCBUaGUgbWF4aW11bSByZXR1cm4gdmFsdWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxSYW5kb20gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnbWluJyxcblx0ICAgICAgICAgICAgJ21heCdcblx0ICAgICAgICBdLCBUb25lLkN0cmxSYW5kb20pO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWluaW11bSByZXR1cm4gdmFsdWVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcnxUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taW4gPSBvcHRpb25zLm1pbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWF4aW11bSByZXR1cm4gdmFsdWVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcnxUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tYXggPSBvcHRpb25zLm1heDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiB0aGUgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSBhbiBpbnRlZ2VyXG5cdFx0XHQgKiAgQHR5cGUgIHtCb29sZWFufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnRlZ2VyID0gb3B0aW9ucy5pbnRlZ2VyO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3RybFJhbmRvbSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFJhbmRvbS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAnaW50ZWdlcic6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiBhIHJhbmRvbSB2YWx1ZSBiZXR3ZWVuIG1pbiBhbmQgbWF4LiBcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkN0cmxSYW5kb20jXG5cdFx0ICogIEB0eXBlIHsqfVxuXHRcdCAqICBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ3RybFJhbmRvbS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMudG9TZWNvbmRzKHRoaXMubWluKTtcblx0ICAgICAgICAgICAgdmFyIG1heCA9IHRoaXMudG9TZWNvbmRzKHRoaXMubWF4KTtcblx0ICAgICAgICAgICAgdmFyIHJhbmQgPSBNYXRoLnJhbmRvbSgpO1xuXHQgICAgICAgICAgICB2YXIgdmFsID0gcmFuZCAqIG1pbiArICgxIC0gcmFuZCkgKiBtYXg7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmludGVnZXIpIHtcblx0ICAgICAgICAgICAgICAgIHZhbCA9IE1hdGguZmxvb3IodmFsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmUuQ3RybFJhbmRvbTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIGRhdGEgc3RydWN0dXJlIGZvciBob2xkaW5nIG11bHRpcGxlIGJ1ZmZlcnMuXG5cdFx0ICogIFxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R8QXJyYXl9ICAgIHVybHMgICAgICBBbiBvYmplY3QgbGl0ZXJhbCBvciBhcnJheVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB1cmxzIHRvIGxvYWQuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQuIFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xvYWQgYSB3aG9sZSBiYW5rIG9mIHBpYW5vIHNhbXBsZXNcblx0XHQgKiB2YXIgcGlhbm9TYW1wbGVzID0gbmV3IFRvbmUuQnVmZmVycyh7XG5cdFx0ICogXHRcIkM0XCIgOiBcInBhdGgvdG8vQzQubXAzXCJcblx0XHQgKiBcdFwiQyM0XCIgOiBcInBhdGgvdG8vQyM0Lm1wM1wiXG5cdFx0ICogXHRcIkQ0XCIgOiBcInBhdGgvdG8vRDQubXAzXCJcblx0XHQgKiBcdFwiRCM0XCIgOiBcInBhdGgvdG8vRCM0Lm1wM1wiXG5cdFx0ICogXHQuLi5cblx0XHQgKiB9LCBmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly9wbGF5IG9uZSBvZiB0aGUgc2FtcGxlcyB3aGVuIHRoZXkgYWxsIGxvYWRcblx0XHQgKiBcdHBsYXllci5idWZmZXIgPSBwaWFub1NhbXBsZXMuZ2V0KFwiQzRcIik7XG5cdFx0ICogXHRwbGF5ZXIuc3RhcnQoKTtcblx0XHQgKiB9KTtcblx0XHQgKiBcdEBleGFtcGxlXG5cdFx0ICogLy9UbyBwYXNzIGluIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlclxuXHRcdCAqIHZhciBidWZmZXJzID0gbmV3IFRvbmUuQnVmZmVycyh1cmxzLCB7XG5cdFx0ICogXHRcIm9ubG9hZFwiIDogY2FsbGJhY2ssXG5cdFx0ICogXHRcImJhc2VVcmxcIiA6IFwiLi4vcGF0aC90by9hdWRpby9cIlxuXHRcdCAqIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMgPSBmdW5jdGlvbiAodXJscykge1xuXHQgICAgICAgIC8vcmVtb3ZlIHRoZSB1cmxzIGZyb20gdGhlIG9wdGlvbnNcblx0ICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgYXJncy5zaGlmdCgpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmdzLCBbXG5cdCAgICAgICAgICAgICdvbmxvYWQnLFxuXHQgICAgICAgICAgICAnYmFzZVVybCdcblx0ICAgICAgICBdLCBUb25lLkJ1ZmZlcnMpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIGJ1ZmZlcnNcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVycyA9IHt9O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgcGF0aCB3aGljaCBpcyBwcmVmaXhlZCBiZWZvcmUgZXZlcnkgdXJsLlxuXHRcdFx0ICogIEB0eXBlICB7U3RyaW5nfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5iYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCA9IDA7XG5cdCAgICAgICAgLy9hZGQgZWFjaCBvbmVcblx0ICAgICAgICBmb3IgKHZhciBrZXkgaW4gdXJscykge1xuXHQgICAgICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQrKztcblx0ICAgICAgICAgICAgdGhpcy5hZGQoa2V5LCB1cmxzW2tleV0sIHRoaXMuX2J1ZmZlckxvYWRlZC5iaW5kKHRoaXMsIG9wdGlvbnMub25sb2FkKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQnVmZmVycyk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnYmFzZVVybCc6ICcnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRydWUgaWYgdGhlIGJ1ZmZlcnMgb2JqZWN0IGhhcyBhIGJ1ZmZlciBieSB0aGF0IG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICBuYW1lICBUaGUga2V5IG9yIGluZGV4IG9mIHRoZSBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5cblx0XHQgKiAgQHJldHVybiAge0Jvb2xlYW59XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcnMuaGFzT3duUHJvcGVydHkobmFtZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCBhIGJ1ZmZlciBieSBuYW1lLiBJZiBhbiBhcnJheSB3YXMgbG9hZGVkLCBcblx0XHQgKiAgdGhlbiB1c2UgdGhlIGFycmF5IGluZGV4LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgbmFtZSAgVGhlIGtleSBvciBpbmRleCBvZiB0aGUgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5oYXMobmFtZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcnNbbmFtZV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkJ1ZmZlcnM6IG5vIGJ1ZmZlciBuYW1lZCAnICsgbmFtZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIGJ1ZmZlciB3YXMgbG9hZGVkLiBkZWNyZW1lbnQgdGhlIGNvdW50ZXIuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLl9idWZmZXJMb2FkZWQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQtLTtcblx0ICAgICAgICBpZiAodGhpcy5fbG9hZGluZ0NvdW50ID09PSAwICYmIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVycyBhcmUgbG9hZGVkIG9yIG5vdFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlcnMjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJzLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGlzTG9hZGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgYnVmZk5hbWUgaW4gdGhpcy5fYnVmZmVycykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ1ZmYgPSB0aGlzLmdldChidWZmTmFtZSk7XG5cdCAgICAgICAgICAgICAgICBpc0xvYWRlZCA9IGlzTG9hZGVkICYmIGJ1ZmYubG9hZGVkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBpc0xvYWRlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBidWZmZXIgYnkgbmFtZSBhbmQgdXJsIHRvIHRoZSBCdWZmZXJzXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgbmFtZSAgICAgIEEgdW5pcXVlIG5hbWUgdG8gZ2l2ZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVmZmVyXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xUb25lLkJ1ZmZlcnxBdWRpb2J1ZmZlcn0gIHVybCAgRWl0aGVyIHRoZSB1cmwgb2YgdGhlIGJ1ZmVyLCBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGFkZGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2UgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobmFtZSwgdXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGNhbGxiYWNrID0gVG9uZS5kZWZhdWx0QXJnKGNhbGxiYWNrLCBUb25lLm5vT3ApO1xuXHQgICAgICAgIGlmICh1cmwgaW5zdGFuY2VvZiBUb25lLkJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzW25hbWVdID0gdXJsO1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHVybCBpbnN0YW5jZW9mIEF1ZGlvQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0gPSBuZXcgVG9uZS5CdWZmZXIodXJsKTtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHVybCkpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXSA9IG5ldyBUb25lLkJ1ZmZlcih0aGlzLmJhc2VVcmwgKyB1cmwsIGNhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fYnVmZmVycykge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzW25hbWVdLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQnVmZmVycztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgYnVzZXMgYXJlIGFub3RoZXIgd2F5IG9mIHJvdXRpbmcgYXVkaW9cblx0XHQgKlxuXHRcdCAqICBhdWdtZW50cyBUb25lLnByb3RvdHlwZSB0byBpbmNsdWRlIHNlbmQgYW5kIHJlY2lldmVcblx0XHQgKi9cblx0ICAgIC8qKlxuXHRcdCAqICBBbGwgb2YgdGhlIHJvdXRlc1xuXHRcdCAqXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBCdXNlcyA9IHt9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNlbmQgdGhpcyBzaWduYWwgdG8gdGhlIGNoYW5uZWwgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSBjaGFubmVsTmFtZSBBIG5hbWVkIGNoYW5uZWwgdG8gc2VuZCB0aGUgc2lnbmFsIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtEZWNpYmVsc30gYW1vdW50IFRoZSBhbW91bnQgb2YgdGhlIHNvdXJjZSB0byBzZW5kIHRvIHRoZSBidXMuXG5cdFx0ICogIEByZXR1cm4ge0dhaW5Ob2RlfSBUaGUgZ2FpbiBub2RlIHdoaWNoIGNvbm5lY3RzIHRoaXMgbm9kZSB0byB0aGUgZGVzaXJlZCBjaGFubmVsLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgdG8gYWRqdXN0IHRoZSBsZXZlbHMgb2YgdGhlIHNlbmQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnNlbmQoXCJyZXZlcmJcIiwgLTEyKTtcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbiAoY2hhbm5lbE5hbWUsIGFtb3VudCkge1xuXHQgICAgICAgIGlmICghQnVzZXMuaGFzT3duUHJvcGVydHkoY2hhbm5lbE5hbWUpKSB7XG5cdCAgICAgICAgICAgIEJ1c2VzW2NoYW5uZWxOYW1lXSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGFtb3VudCA9IFRvbmUuZGVmYXVsdEFyZyhhbW91bnQsIDApO1xuXHQgICAgICAgIHZhciBzZW5kS25vYiA9IG5ldyBUb25lLkdhaW4oYW1vdW50LCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIHRoaXMuY29ubmVjdChzZW5kS25vYik7XG5cdCAgICAgICAgc2VuZEtub2IuY29ubmVjdChCdXNlc1tjaGFubmVsTmFtZV0pO1xuXHQgICAgICAgIHJldHVybiBzZW5kS25vYjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVjaWV2ZSB0aGUgaW5wdXQgZnJvbSB0aGUgZGVzaXJlZCBjaGFubmVsTmFtZSB0byB0aGUgaW5wdXRcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9IGNoYW5uZWxOYW1lIEEgbmFtZWQgY2hhbm5lbCB0byBzZW5kIHRoZSBzaWduYWwgdG8uXG5cdFx0ICogIEBwYXJhbSAge051bWJlcj19IGNoYW5uZWxOdW1iZXIgVGhlIGNoYW5uZWwgdG8gY29ubmVjdCB0b1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHJldmVyYkVmZmVjdC5yZWNlaXZlKFwicmV2ZXJiXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUucmVjZWl2ZSA9IGZ1bmN0aW9uIChjaGFubmVsTmFtZSwgaW5wdXROdW0pIHtcblx0ICAgICAgICBpZiAoIUJ1c2VzLmhhc093blByb3BlcnR5KGNoYW5uZWxOYW1lKSkge1xuXHQgICAgICAgICAgICBCdXNlc1tjaGFubmVsTmFtZV0gPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBCdXNlc1tjaGFubmVsTmFtZV0uY29ubmVjdCh0aGlzLCAwLCBpbnB1dE51bSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy9yZW1vdmUgYWxsIHRoZSBzZW5kL3JlY2VpdmVzIHdoZW4gYSBuZXcgYXVkaW8gY29udGV4dCBpcyBwYXNzZWQgaW5cblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuQnVzZXMpIHtcblx0ICAgICAgICAgICAgQnVzZXMgPSBjb250ZXh0LkJ1c2VzO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIEJ1c2VzID0ge307XG5cdCAgICAgICAgICAgIGNvbnRleHQuQnVzZXMgPSBCdXNlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5EcmF3IGlzIHVzZWZ1bCBmb3Igc3luY2hyb25pemluZyB2aXN1YWxzIGFuZCBhdWRpbyBldmVudHMuXG5cdFx0ICogICAgICAgICBDYWxsYmFja3MgZnJvbSBUb25lLlRyYW5zcG9ydCBvciBhbnkgb2YgdGhlIFRvbmUuRXZlbnQgY2xhc3Nlc1xuXHRcdCAqICAgICAgICAgYWx3YXlzIGhhcHBlbiBfYmVmb3JlXyB0aGUgc2NoZWR1bGVkIHRpbWUgYW5kIGFyZSBub3Qgc3luY2hyb25pemVkXG5cdFx0ICogICAgICAgICB0byB0aGUgYW5pbWF0aW9uIGZyYW1lIHNvIHRoZXkgYXJlIG5vdCBnb29kIGZvciB0cmlnZ2VyaW5nIHRpZ2h0bHlcblx0XHQgKiAgICAgICAgIHN5bmNocm9uaXplZCB2aXN1YWxzIGFuZCBzb3VuZC4gVG9uZS5EcmF3IG1ha2VzIGl0IGVhc3kgdG8gc2NoZWR1bGVcblx0XHQgKiAgICAgICAgIGNhbGxiYWNrcyB1c2luZyB0aGUgQXVkaW9Db250ZXh0IHRpbWUgYW5kIHVzZXMgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxuXHRcdCAqICAgICAgICAgXG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL3VzZSB0aGUgdGltZSBhcmd1bWVudCB0byBzY2hlZHVsZSBhIGNhbGxiYWNrIHdpdGggVG9uZS5EcmF3XG5cdFx0ICogXHRUb25lLkRyYXcuc2NoZWR1bGUoZnVuY3Rpb24oKXtcblx0XHQgKiBcdFx0Ly9kbyBkcmF3aW5nIG9yIERPTSBtYW5pcHVsYXRpb24gaGVyZVxuXHRcdCAqIFx0fSwgdGltZSlcblx0XHQgKiB9LCBcIiswLjVcIilcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxsIG9mIHRoZSBldmVudHMuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkdXJhdGlvbiBhZnRlciB3aGljaCBldmVudHMgYXJlIG5vdCBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBkZWZhdWx0IDAuMjVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZXhwaXJhdGlvbiA9IDAuMjU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiB0aW1lIGJlZm9yZSB0aGUgc2NoZWR1bGVkIHRpbWUgXG5cdFx0XHQgKiAgdGhhdCB0aGUgY2FsbGJhY2sgY2FuIGJlIGludm9rZWQuIERlZmF1bHQgaXNcblx0XHRcdCAqICBoYWxmIHRoZSB0aW1lIG9mIGFuIGFuaW1hdGlvbiBmcmFtZSAoMC4wMDggc2Vjb25kcykuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQGRlZmF1bHQgMC4wMDhcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYW50aWNpcGF0aW9uID0gMC4wMDg7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRyYXcgbG9vcFxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JvdW5kRHJhd0xvb3AgPSB0aGlzLl9kcmF3TG9vcC5iaW5kKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRHJhdyk7XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYSBmdW5jdGlvbiBhdCB0aGUgZ2l2ZW4gdGltZSB0byBiZSBpbnZva2VkXG5cdFx0ICogIG9uIHRoZSBuZWFyZXN0IGFuaW1hdGlvbiBmcmFtZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgQ2FsbGJhY2sgaXMgaW52b2tlZCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgdGltZSAgICAgIFRoZSB0aW1lIHJlbGF0aXZlIHRvIHRoZSBBdWRpb0NvbnRleHQgdGltZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gaW52b2tlIHRoZSBjYWxsYmFjay5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRHJhd30gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EcmF3LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdGltZSkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG5cdCAgICAgICAgICAgIHRpbWU6IHRoaXMudG9TZWNvbmRzKHRpbWUpXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgZHJhdyBsb29wIG9uIHRoZSBmaXJzdCBldmVudFxuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9ib3VuZERyYXdMb29wKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBldmVudHMgc2NoZWR1bGVkIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgYWZ0ZXIgIFRpbWUgYWZ0ZXIgd2hpY2ggc2NoZWR1bGVkIGV2ZW50cyB3aWxsIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBiZSByZW1vdmVkIGZyb20gdGhlIHNjaGVkdWxpbmcgdGltZWxpbmUuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkRyYXd9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwodGhpcy50b1NlY29uZHMoYWZ0ZXIpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRyYXcgbG9vcFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EcmF3LnByb3RvdHlwZS5fZHJhd0xvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vdyA9IFRvbmUubm93KCk7XG5cdCAgICAgICAgd2hpbGUgKHRoaXMuX2V2ZW50cy5sZW5ndGggJiYgdGhpcy5fZXZlbnRzLnBlZWsoKS50aW1lIC0gdGhpcy5hbnRpY2lwYXRpb24gPD0gbm93KSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50cy5zaGlmdCgpO1xuXHQgICAgICAgICAgICBpZiAobm93IC0gZXZlbnQudGltZSA8PSB0aGlzLmV4cGlyYXRpb24pIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LmNhbGxiYWNrKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9ib3VuZERyYXdMb29wKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLy9tYWtlIGEgc2luZ2xldG9uXG5cdCAgICBUb25lLkRyYXcgPSBuZXcgVG9uZS5EcmF3KCk7XG5cdCAgICByZXR1cm4gVG9uZS5EcmF3O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJvdGggVG9uZS5QYW5uZXIzRCBhbmQgVG9uZS5MaXN0ZW5lciBoYXZlIGEgcG9zaXRpb24gaW4gM0Qgc3BhY2Vcblx0XHQgKiAgICAgICAgICB1c2luZyBhIHJpZ2h0LWhhbmRlZCBjYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW0uXG5cdFx0ICogICAgICAgICAgVGhlIHVuaXRzIHVzZWQgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGFyZSBub3QgZGVmaW5lZDtcblx0XHQgKiAgICAgICAgICB0aGVzZSBjb29yZGluYXRlcyBhcmUgaW5kZXBlbmRlbnQvaW52YXJpYW50IG9mIGFueSBwYXJ0aWN1bGFyXG5cdFx0ICogICAgICAgICAgdW5pdHMgc3VjaCBhcyBtZXRlcnMgb3IgZmVldC4gVG9uZS5QYW5uZXIzRCBvYmplY3RzIGhhdmUgYW4gZm9yd2FyZFxuXHRcdCAqICAgICAgICAgIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGRpcmVjdGlvbiB0aGUgc291bmQgaXMgcHJvamVjdGluZy4gQWRkaXRpb25hbGx5LFxuXHRcdCAqICAgICAgICAgIHRoZXkgaGF2ZSBhIHNvdW5kIGNvbmUgcmVwcmVzZW50aW5nIGhvdyBkaXJlY3Rpb25hbCB0aGUgc291bmQgaXMuXG5cdFx0ICogICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzb3VuZCBjb3VsZCBiZSBvbW5pZGlyZWN0aW9uYWwsIGluIHdoaWNoIGNhc2UgaXQgd291bGRcblx0XHQgKiAgICAgICAgICBiZSBoZWFyZCBhbnl3aGVyZSByZWdhcmRsZXNzIG9mIGl0cyBmb3J3YXJkLCBvciBpdCBjYW4gYmUgbW9yZSBkaXJlY3Rpb25hbFxuXHRcdCAqICAgICAgICAgIGFuZCBoZWFyZCBvbmx5IGlmIGl0IGlzIGZhY2luZyB0aGUgbGlzdGVuZXIuIFRvbmUuTGlzdGVuZXIgb2JqZWN0c1xuXHRcdCAqICAgICAgICAgIChyZXByZXNlbnRpbmcgYSBwZXJzb24ncyBlYXJzKSBoYXZlIGFuIGZvcndhcmQgYW5kIHVwIHZlY3RvclxuXHRcdCAqICAgICAgICAgIHJlcHJlc2VudGluZyBpbiB3aGljaCBkaXJlY3Rpb24gdGhlIHBlcnNvbiBpcyBmYWNpbmcuIEJlY2F1c2UgYm90aCB0aGVcblx0XHQgKiAgICAgICAgICBzb3VyY2Ugc3RyZWFtIGFuZCB0aGUgbGlzdGVuZXIgY2FuIGJlIG1vdmluZywgdGhleSBib3RoIGhhdmUgYSB2ZWxvY2l0eVxuXHRcdCAqICAgICAgICAgIHZlY3RvciByZXByZXNlbnRpbmcgYm90aCB0aGUgc3BlZWQgYW5kIGRpcmVjdGlvbiBvZiBtb3ZlbWVudC4gVGFrZW4gdG9nZXRoZXIsXG5cdFx0ICogICAgICAgICAgdGhlc2UgdHdvIHZlbG9jaXRpZXMgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBkb3BwbGVyIHNoaWZ0IGVmZmVjdCB3aGljaCBjaGFuZ2VzIHRoZSBwaXRjaC5cblx0XHQgKiAgICAgICAgICA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgIE5vdGU6IHRoZSBwb3NpdGlvbiBvZiB0aGUgTGlzdGVuZXIgd2lsbCBoYXZlIG5vIGVmZmVjdCBvbiBub2RlcyBub3QgY29ubmVjdGVkIHRvIGEgVG9uZS5QYW5uZXIzRFxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHNpbmdsZXRvblxuXHRcdCAqL1xuXHQgICAgVG9uZS5MaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgZm9yd2FyZCBvcmllbnRhdGlvblxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gW1xuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwXG5cdCAgICAgICAgXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkcyB0aGUgY3VycmVudCBwb3NpdGlvblxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gW1xuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwXG5cdCAgICAgICAgXTtcblx0ICAgICAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBzZXQgdGhlIGRlZmF1bHQgcG9zaXRpb24vZm9yd2FyZFxuXHQgICAgICAgICAgICB0aGlzLnNldChMaXN0ZW5lckNvbnN0cnVjdG9yLmRlZmF1bHRzKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTGlzdGVuZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MaXN0ZW5lci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncG9zaXRpb25YJzogMCxcblx0ICAgICAgICAncG9zaXRpb25ZJzogMCxcblx0ICAgICAgICAncG9zaXRpb25aJzogMCxcblx0ICAgICAgICAnZm9yd2FyZFgnOiAwLFxuXHQgICAgICAgICdmb3J3YXJkWSc6IDAsXG5cdCAgICAgICAgJ2ZvcndhcmRaJzogMSxcblx0ICAgICAgICAndXBYJzogMCxcblx0ICAgICAgICAndXBZJzogMSxcblx0ICAgICAgICAndXBaJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByYW1wIHRpbWUgd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgc2V0VGFyZ2V0QXRUaW1lXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUuX3JhbXBUaW1lQ29uc3RhbnQgPSAwLjAxO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsaXN0ZW5lciBpbiAzZCBzcGFjZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB5XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHpcblx0XHQgKiAgQHJldHVybiB7VG9uZS5MaXN0ZW5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUuc2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeikge1xuXHQgICAgICAgIGlmICh0aGlzLmNvbnRleHQubGlzdGVuZXIucG9zaXRpb25YKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIucG9zaXRpb25YLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIucG9zaXRpb25ZLnNldFRhcmdldEF0VGltZSh5LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIucG9zaXRpb25aLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5zZXRQb3NpdGlvbih4LCB5LCB6KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgbGlzdGVuZXIgdXNpbmcgdHdvIHZlY3RvcnMsIHRoZSBmb3J3YXJkXG5cdFx0ICogIHZlY3RvciAod2hpY2ggZGlyZWN0aW9uIHRoZSBsaXN0ZW5lciBpcyBmYWNpbmcpIGFuZCB0aGUgdXAgdmVjdG9yXG5cdFx0ICogICh3aGljaCB0aGUgdXAgZGlyZWN0aW9uIG9mIHRoZSBsaXN0ZW5lcikuIEFuIHVwIHZlY3RvclxuXHRcdCAqICBvZiAwLCAwLCAxIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGxpc3RlbmVyIHN0YW5kaW5nIHVwIGluIHRoZSBaIGRpcmVjdGlvbi5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB5XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHpcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdXBYXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHVwWVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB1cFpcblx0XHQgKiAgQHJldHVybiB7VG9uZS5MaXN0ZW5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUuc2V0T3JpZW50YXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeiwgdXBYLCB1cFksIHVwWikge1xuXHQgICAgICAgIGlmICh0aGlzLmNvbnRleHQubGlzdGVuZXIuZm9yd2FyZFgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWC5zZXRUYXJnZXRBdFRpbWUoeCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRZLnNldFRhcmdldEF0VGltZSh5LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuZm9yd2FyZFouc2V0VGFyZ2V0QXRUaW1lKHosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci51cFguc2V0VGFyZ2V0QXRUaW1lKHVwWCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnVwWS5zZXRUYXJnZXRBdFRpbWUodXBZLCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIudXBaLnNldFRhcmdldEF0VGltZSh1cFosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnNldE9yaWVudGF0aW9uKHgsIHksIHosIHVwWCwgdXBZLCB1cFopO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25YXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdwb3NpdGlvblgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvbllcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3Bvc2l0aW9uWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAncG9zaXRpb25aJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblsyXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzJdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVycyBmcm9udCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgd2hpY2ggd2F5IHRoZXkgYXJlIGZhY2luZy5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIGZvcndhcmRYXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdmb3J3YXJkWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMF0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblswXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcnMgZnJvbnQgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHdoaWNoIHdheSB0aGV5IGFyZSBmYWNpbmcuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBmb3J3YXJkWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAnZm9yd2FyZFknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXJzIGZyb250IGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB3aGljaCB3YXkgdGhleSBhcmUgZmFjaW5nLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgZm9yd2FyZFpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ2ZvcndhcmRaJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblsyXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzJdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVyJ3MgdXAgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHRoZSBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIHN0YW5kaW5nIGluLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgdXBYXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICd1cFgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzNdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bM107XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXIncyB1cCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgdGhlIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgc3RhbmRpbmcgaW4uXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSB1cFlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3VwWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bNF0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvbls0XTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcidzIHVwIGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB0aGUgZGlyZWN0aW9uIHRoZSBsaXN0ZW5lciBpcyBzdGFuZGluZyBpbi5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHVwWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAndXBaJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvbls1XSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzVdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MaXN0ZW5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vU0lOR0xFVE9OIFNFVFVQXG5cdCAgICB2YXIgTGlzdGVuZXJDb25zdHJ1Y3RvciA9IFRvbmUuTGlzdGVuZXI7XG5cdCAgICBUb25lLkxpc3RlbmVyID0gbmV3IExpc3RlbmVyQ29uc3RydWN0b3IoKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuTGlzdGVuZXIgaW5zdGFuY2VvZiBMaXN0ZW5lckNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIC8vYSBzaW5nbGUgbGlzdGVuZXIgb2JqZWN0XG5cdCAgICAgICAgICAgIFRvbmUuTGlzdGVuZXIgPSBjb250ZXh0Lkxpc3RlbmVyO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vbWFrZSBuZXcgTGlzdGVuZXIgaW5zaWRlc1xuXHQgICAgICAgICAgICBUb25lLkxpc3RlbmVyID0gbmV3IExpc3RlbmVyQ29uc3RydWN0b3IoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgY29udGV4dC5MaXN0ZW5lciA9IFRvbmUuTGlzdGVuZXI7XG5cdCAgICB9KTtcblx0ICAgIC8vRU5EIFNJTkdMRVRPTiBTRVRVUFxuXHQgICAgcmV0dXJuIFRvbmUuTGlzdGVuZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEJlY2F1c2Ugb2YgYSBidWcgaW4gaU9TIGNhdXNpbmcgdGhlIGN1cnJlbnRUaW1lIHRvIGluY3JlbWVudFxuXHRcdCAqIGJlZm9yZSB0aGUgcmVuZGVyaW5nIGlzIHN0YXJ0ZWQsIHNvbWV0aW1lcyBpdCB0YWtlcyBtdWx0aXBsZVxuXHRcdCAqIGF0dGVtcHRzIHRvIHJlbmRlciB0aGUgYXVkaW8gY29ycmVjdGx5LlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBmdW5jdGlvbiBhdHRlbXB0UmVuZGVyKGNhbGxiYWNrLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSwgdHJpZXMpIHtcblx0ICAgICAgICB0cmllcyA9IFRvbmUuZGVmYXVsdEFyZyh0cmllcywgMCk7XG5cdCAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgVG9uZS5PZmZsaW5lQ29udGV4dCgyLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgVG9uZS5jb250ZXh0ID0gY29udGV4dDtcblx0ICAgICAgICAvL2ludm9rZSB0aGUgY2FsbGJhY2svc2NoZWR1bGluZ1xuXHQgICAgICAgIHZhciByZXNwb25zZSA9IGNhbGxiYWNrKFRvbmUuVHJhbnNwb3J0KTtcblx0ICAgICAgICBpZiAoY29udGV4dC5jdXJyZW50VGltZSA+IDAgJiYgdHJpZXMgPCAxMDAwKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBhdHRlbXB0UmVuZGVyKGNhbGxiYWNrLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSwgKyt0cmllcyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgICAgICdyZXNwb25zZSc6IHJlc3BvbnNlLFxuXHQgICAgICAgICAgICAgICAgJ2NvbnRleHQnOiBjb250ZXh0XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHQgICAgLyoqXG5cdFx0ICogIEdlbmVyYXRlIGEgYnVmZmVyIGJ5IHJlbmRlcmluZyBhbGwgb2YgdGhlIFRvbmUuanMgY29kZSB3aXRoaW4gdGhlIGNhbGxiYWNrIHVzaW5nIHRoZSBPZmZsaW5lQXVkaW9Db250ZXh0LlxuXHRcdCAqICBUaGUgT2ZmbGluZUF1ZGlvQ29udGV4dCBpcyBjYXBhYmxlIG9mIHJlbmRlcmluZyBtdWNoIGZhc3RlciB0aGFuIHJlYWwgdGltZSBpbiBtYW55IGNhc2VzLlxuXHRcdCAqICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gYWxzbyBwYXNzZXMgaW4gYW4gb2ZmbGluZSBpbnN0YW5jZSBvZiBUb25lLlRyYW5zcG9ydCB3aGljaCBjYW4gYmUgdXNlZFxuXHRcdCAqICB0byBzY2hlZHVsZSBldmVudHMgYWxvbmcgdGhlIFRyYW5zcG9ydC4gKipOT1RFKiogT2ZmbGluZUF1ZGlvQ29udGV4dCBoYXMgdGhlIHNhbWUgcmVzdHJpY3Rpb25zXG5cdFx0ICogIGFzIHRoZSBBdWRpb0NvbnRleHQgaW4gdGhhdCBvbiBjZXJ0YWluIHBsYXRmb3JtcyAobGlrZSBpT1MpIGl0IG11c3QgYmUgaW52b2tlZCBieSBhbiBleHBsaWNpdFxuXHRcdCAqICB1c2VyIGFjdGlvbiBsaWtlIGEgY2xpY2sgb3IgdGFwLiBcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgQWxsIFRvbmUuanMgbm9kZXMgd2hpY2ggYXJlIGNyZWF0ZWQgYW5kIHNjaGVkdWxlZCB3aXRoaW4gdGhpcyBjYWxsYmFjayBhcmUgcmVjb3JkZWQgaW50byB0aGUgb3V0cHV0IEJ1ZmZlci5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIGR1cmF0aW9uICAgICB0aGUgYW1vdW50IG9mIHRpbWUgdG8gcmVjb3JkIGZvci5cblx0XHQgKiAgQHJldHVybiAge1Byb21pc2V9ICBUaGUgcHJvbWlzZSB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIFRvbmUuQnVmZmVyIG9mIHRoZSByZWNvcmRlZCBvdXRwdXQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9yZW5kZXIgMiBzZWNvbmRzIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogVG9uZS5PZmZsaW5lKGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL29ubHkgbm9kZXMgY3JlYXRlZCBpbiB0aGlzIGNhbGxiYWNrIHdpbGwgYmUgcmVjb3JkZWRcblx0XHQgKiBcdHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLnRvTWFzdGVyKCkuc3RhcnQoMClcblx0XHQgKiBcdC8vc2NoZWR1bGUgdGhlaXIgZXZlbnRzXG5cdFx0ICogfSwgMikudGhlbihmdW5jdGlvbihidWZmZXIpe1xuXHRcdCAqIFx0Ly9kbyBzb21ldGhpbmcgd2l0aCB0aGUgb3V0cHV0IGJ1ZmZlclxuXHRcdCAqIH0pXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2NhbiBhbHNvIHNjaGVkdWxlIGV2ZW50cyBhbG9uZyB0aGUgVHJhbnNwb3J0XG5cdFx0ICogLy91c2luZyB0aGUgcGFzc2VkIGluIE9mZmxpbmUgVHJhbnNwb3J0XG5cdFx0ICogVG9uZS5PZmZsaW5lKGZ1bmN0aW9uKFRyYW5zcG9ydCl7XG5cdFx0ICogXHR2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLnRvTWFzdGVyKClcblx0XHQgKiBcdFRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdFx0b3NjLnN0YXJ0KHRpbWUpLnN0b3AodGltZSArIDAuMSlcblx0XHQgKiBcdH0sIDEpXG5cdFx0ICogXHRUcmFuc3BvcnQuc3RhcnQoMC4yKVxuXHRcdCAqIH0sIDQpLnRoZW4oZnVuY3Rpb24oYnVmZmVyKXtcblx0XHQgKiBcdC8vZG8gc29tZXRoaW5nIHdpdGggdGhlIG91dHB1dCBidWZmZXJcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBkdXJhdGlvbikge1xuXHQgICAgICAgIC8vc2V0IHRoZSBPZmZsaW5lQXVkaW9Db250ZXh0XG5cdCAgICAgICAgdmFyIHNhbXBsZVJhdGUgPSBUb25lLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICB2YXIgb3JpZ2luYWxDb250ZXh0ID0gVG9uZS5jb250ZXh0O1xuXHQgICAgICAgIHZhciByZW5kZXJSZXQgPSBhdHRlbXB0UmVuZGVyKGNhbGxiYWNrLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVuZGVyUmV0LnJlc3BvbnNlO1xuXHQgICAgICAgIHZhciBjb250ZXh0ID0gcmVuZGVyUmV0LmNvbnRleHQ7XG5cdCAgICAgICAgdmFyIHJldDtcblx0ICAgICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdCAgICAgICAgICAgIC8vd2FpdCBmb3IgdGhlIHByb21pc2UgdG8gcmVzb2x2ZVxuXHQgICAgICAgICAgICByZXQgPSByZXNwb25zZS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIC8vdGhlbiByZW5kZXIgdGhlIGF1ZGlvXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5yZW5kZXIoKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9wcm9jZXNzIHRoZSBhdWRpb1xuXHQgICAgICAgICAgICByZXQgPSBjb250ZXh0LnJlbmRlcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JldHVybiB0aGUgb3JpZ2luYWwgQXVkaW9Db250ZXh0XG5cdCAgICAgICAgVG9uZS5jb250ZXh0ID0gb3JpZ2luYWxDb250ZXh0O1xuXHQgICAgICAgIC8vcmV0dXJuIHRoZSBhdWRpb1xuXHQgICAgICAgIHJldHVybiByZXQudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIC8vd3JhcCBpdCBpbiBhIFRvbmUuQnVmZmVyXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5CdWZmZXIoYnVmZmVyKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5PZmZsaW5lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqIFx0QGNsYXNzICBUb25lLkVmZmVjdCBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgZWZmZWN0cy4gQ29ubmVjdCB0aGUgZWZmZWN0IGJldHdlZW5cblx0XHQgKiBcdCAgICAgICAgdGhlIGVmZmVjdFNlbmQgYW5kIGVmZmVjdFJldHVybiBHYWluTm9kZXMsIHRoZW4gY29udHJvbCB0aGUgYW1vdW50IG9mXG5cdFx0ICogXHQgICAgICAgIGVmZmVjdCB3aGljaCBnb2VzIHRvIHRoZSBvdXRwdXQgdXNpbmcgdGhlIHdldCBjb250cm9sLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbd2V0XSBUaGUgc3RhcnRpbmcgd2V0IHZhbHVlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5FZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd3ZXQnXSwgVG9uZS5FZmZlY3QpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkcnl3ZXQga25vYiB0byBjb250cm9sIHRoZSBhbW91bnQgb2YgZWZmZWN0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3Jvc3NGYWRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBuZXcgVG9uZS5Dcm9zc0ZhZGUob3B0aW9ucy53ZXQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3ZXQgY29udHJvbCBpcyBob3cgbXVjaCBvZiB0aGUgZWZmZWN0ZWRcblx0XHRcdCAqICB3aWxsIHBhc3MgdGhyb3VnaCB0byB0aGUgb3V0cHV0LiAxID0gMTAwJSBlZmZlY3RlZFxuXHRcdFx0ICogIHNpZ25hbCwgMCA9IDEwMCUgZHJ5IHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy53ZXQgPSB0aGlzLl9kcnlXZXQuZmFkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb25uZWN0IHRoZSBlZmZlY3RTZW5kIHRvIHRoZSBpbnB1dCBvZiBodGUgZWZmZWN0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGUgZWZmZWN0IHRvIHRoZSBlZmZlY3RSZXR1cm5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX2RyeVdldC5hKTtcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5lZmZlY3RTZW5kKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybi5jb25uZWN0KHRoaXMuX2RyeVdldC5iKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWyd3ZXQnXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FZmZlY3QsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkVmZmVjdC5kZWZhdWx0cyA9IHsgJ3dldCc6IDEgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjaGFpbnMgdGhlIGVmZmVjdCBpbiBiZXR3ZWVuIHRoZSBlZmZlY3RTZW5kIGFuZCBlZmZlY3RSZXR1cm5cblx0XHQgKiAgQHBhcmFtICB7VG9uZX0gZWZmZWN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmNvbm5lY3RFZmZlY3QgPSBmdW5jdGlvbiAoZWZmZWN0KSB7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNoYWluKGVmZmVjdCwgdGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3dldCddKTtcblx0ICAgICAgICB0aGlzLndldCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BdXRvRmlsdGVyIGlzIGEgVG9uZS5GaWx0ZXIgd2l0aCBhIFRvbmUuTEZPIGNvbm5lY3RlZCB0byB0aGUgZmlsdGVyIGN1dG9mZiBmcmVxdWVuY3kuXG5cdFx0ICogICAgICAgICBTZXR0aW5nIHRoZSBMRk8gcmF0ZSBhbmQgZGVwdGggYWxsb3dzIGZvciBjb250cm9sIG92ZXIgdGhlIGZpbHRlciBtb2R1bGF0aW9uIHJhdGUgXG5cdFx0ICogICAgICAgICBhbmQgZGVwdGguXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIHJhdGUgb2YgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3k9fSBiYXNlRnJlcXVlbmN5IFRoZSBsb3dlciB2YWx1ZSBvZiB0aGUgTEZPcyBvc2NpbGxhdGlvblxuXHQgXHQgKiAgQHBhcmFtIHtGcmVxdWVuY3k9fSBvY3RhdmVzIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY3JlYXRlIGFuIGF1dG9maWx0ZXIgYW5kIHN0YXJ0IGl0J3MgTEZPXG5cdFx0ICogdmFyIGF1dG9GaWx0ZXIgPSBuZXcgVG9uZS5BdXRvRmlsdGVyKFwiNG5cIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqIC8vcm91dGUgYW4gb3NjaWxsYXRvciB0aHJvdWdoIHRoZSBmaWx0ZXIgYW5kIHN0YXJ0IGl0XG5cdFx0ICogdmFyIG9zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkuY29ubmVjdChhdXRvRmlsdGVyKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdiYXNlRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnXG5cdCAgICAgICAgXSwgVG9uZS5BdXRvRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8gd2hpY2ggZHJpdmVzIHRoZSBmaWx0ZXIgY3V0b2ZmXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm8gPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdhbXBsaXR1ZGUnOiBvcHRpb25zLmRlcHRoXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcmFuZ2Ugb2YgdGhlIGZpbHRlciBtb2R1bGF0aW5nIGJldHdlZW4gdGhlIG1pbiBhbmQgbWF4IGZyZXF1ZW5jeS4gXG5cdFx0XHQgKiAwID0gbm8gbW9kdWxhdGlvbi4gMSA9IGZ1bGwgbW9kdWxhdGlvbi5cblx0XHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9sZm8uYW1wbGl0dWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogSG93IGZhc3QgdGhlIGZpbHRlciBtb2R1bGF0ZXMgYmV0d2VlbiBtaW4gYW5kIG1heC4gXG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaWx0ZXIgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmlsdGVyID0gbmV3IFRvbmUuRmlsdGVyKG9wdGlvbnMuZmlsdGVyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb2N0YXZlcyBwbGFjZWhvbGRlclxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IDA7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLmZpbHRlcik7XG5cdCAgICAgICAgdGhpcy5fbGZvLmNvbm5lY3QodGhpcy5maWx0ZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICB0aGlzLmJhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICB9O1xuXHQgICAgLy9leHRlbmQgRWZmZWN0XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1dG9GaWx0ZXIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0c1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDEsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ2RlcHRoJzogMSxcblx0ICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDIwMCxcblx0ICAgICAgICAnb2N0YXZlcyc6IDIuNixcblx0ICAgICAgICAnZmlsdGVyJzoge1xuXHQgICAgICAgICAgICAndHlwZSc6ICdsb3dwYXNzJyxcblx0ICAgICAgICAgICAgJ3JvbGxvZmYnOiAtMTIsXG5cdCAgICAgICAgICAgICdRJzogMVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdGFydCB0aGUgZWZmZWN0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBMRk8gd2lsbCBzdGFydC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RvcC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBmaWx0ZXIgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFtkZWxheT0wXSBEZWxheSB0aW1lIGJlZm9yZSBzdGFydGluZyB0aGUgZWZmZWN0IGFmdGVyIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zcG9ydCBoYXMgc3RhcnRlZC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKGRlbGF5KSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN5bmMoZGVsYXkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgZmlsdGVyIGZyb20gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9sZm8udW5zeW5jKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVHlwZSBvZiBvc2NpbGxhdG9yIGF0dGFjaGVkIHRvIHRoZSBBdXRvRmlsdGVyLiBcblx0XHQgKiBQb3NzaWJsZSB2YWx1ZXM6IFwic2luZVwiLCBcInNxdWFyZVwiLCBcInRyaWFuZ2xlXCIsIFwic2F3dG9vdGhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBmaWx0ZXIncyBjdXRvZmYgZnJlcXVlbmN5LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9GaWx0ZXIjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLCAnYmFzZUZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmby5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby5taW4gPSB0aGlzLnRvRnJlcXVlbmN5KGZyZXEpO1xuXHQgICAgICAgICAgICAvL2FuZCBzZXQgdGhlIG1heFxuXHQgICAgICAgICAgICB0aGlzLm9jdGF2ZXMgPSB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGZpbHRlcidzIGN1dG9mZiBmcmVxdWVuY3kuIFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9GaWx0ZXIjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3QpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdDtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLm1heCA9IHRoaXMuYmFzZUZyZXF1ZW5jeSAqIE1hdGgucG93KDIsIG9jdCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9sZm8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5maWx0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkF1dG9GaWx0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkF1dG9QYW5uZXIgaXMgYSBUb25lLlBhbm5lciB3aXRoIGFuIExGTyBjb25uZWN0ZWQgdG8gdGhlIHBhbiBhbW91bnQuIFxuXHRcdCAqICAgICAgICAgTW9yZSBvbiB1c2luZyBhdXRvcGFubmVycyBbaGVyZV0oaHR0cHM6Ly93d3cuYWJsZXRvbi5jb20vZW4vYmxvZy9hdXRvcGFuLWNob3BwZXItZWZmZWN0LWFuZC1tb3JlLWxpdmVzY2hvb2wvKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFJhdGUgb2YgbGVmdC1yaWdodCBvc2NpbGxhdGlvbi4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jcmVhdGUgYW4gYXV0b3Bhbm5lciBhbmQgc3RhcnQgaXQncyBMRk9cblx0XHQgKiB2YXIgYXV0b1Bhbm5lciA9IG5ldyBUb25lLkF1dG9QYW5uZXIoXCI0blwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICogLy9yb3V0ZSBhbiBvc2NpbGxhdG9yIHRocm91Z2ggdGhlIHBhbm5lciBhbmQgc3RhcnQgaXRcblx0XHQgKiB2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KGF1dG9QYW5uZXIpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmcmVxdWVuY3knXSwgVG9uZS5BdXRvUGFubmVyKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8gd2hpY2ggZHJpdmVzIHRoZSBwYW5uaW5nXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm8gPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdhbXBsaXR1ZGUnOiBvcHRpb25zLmRlcHRoLFxuXHQgICAgICAgICAgICAnbWluJzogLTEsXG5cdCAgICAgICAgICAgICdtYXgnOiAxXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgYW1vdW50IG9mIHBhbm5pbmcgYmV0d2VlbiBsZWZ0IGFuZCByaWdodC4gXG5cdFx0XHQgKiAwID0gYWx3YXlzIGNlbnRlci4gMSA9IGZ1bGwgcmFuZ2UgYmV0d2VlbiBsZWZ0IGFuZCByaWdodC4gXG5cdFx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fbGZvLmFtcGxpdHVkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcGFubmVyIG5vZGUgd2hpY2ggZG9lcyB0aGUgcGFubmluZ1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBhbm5lcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbmV3IFRvbmUuUGFubmVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBIb3cgZmFzdCB0aGUgcGFubmVyIG1vZHVsYXRlcyBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0LiBcblx0XHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmby5mcmVxdWVuY3k7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9wYW5uZXIpO1xuXHQgICAgICAgIHRoaXMuX2xmby5jb25uZWN0KHRoaXMuX3Bhbm5lci5wYW4pO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdkZXB0aCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgLy9leHRlbmQgRWZmZWN0XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1dG9QYW5uZXIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0c1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDEsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ2RlcHRoJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0YXJ0IHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0YXJ0LiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCB0aGUgZWZmZWN0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBMRk8gd2lsbCBzdG9wLiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIHBhbm5lciB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW2RlbGF5PTBdIERlbGF5IHRpbWUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBlZmZlY3QgYWZ0ZXIgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IGhhcyBzdGFydGVkLiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoZGVsYXkpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3luYyhkZWxheSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVW5zeW5jIHRoZSBwYW5uZXIgZnJvbSB0aGUgdHJhbnNwb3J0XG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnVuc3luYygpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFR5cGUgb2Ygb3NjaWxsYXRvciBhdHRhY2hlZCB0byB0aGUgQXV0b0ZpbHRlci4gXG5cdFx0ICogUG9zc2libGUgdmFsdWVzOiBcInNpbmVcIiwgXCJzcXVhcmVcIiwgXCJ0cmlhbmdsZVwiLCBcInNhd3Rvb3RoXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmby50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8udHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGZvLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdkZXB0aCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkF1dG9QYW5uZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5BdXRvV2FoIGNvbm5lY3RzIGEgVG9uZS5Gb2xsb3dlciB0byBhIGJhbmRwYXNzIGZpbHRlciAoVG9uZS5GaWx0ZXIpLlxuXHRcdCAqICAgICAgICAgIFRoZSBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlciBpcyBhZGp1c3RlZCBwcm9wb3J0aW9uYWxseSB0byB0aGVcblx0XHQgKiAgICAgICAgICBpbmNvbWluZyBzaWduYWwncyBhbXBsaXR1ZGUuIEluc3BpcmF0aW9uIGZyb20gW1R1bmEuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9EaW5haG1vZS90dW5hKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtiYXNlRnJlcXVlbmN5XSBUaGUgZnJlcXVlbmN5IHRoZSBmaWx0ZXIgaXMgc2V0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGF0IHRoZSBsb3cgcG9pbnQgb2YgdGhlIHdhaFxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfSBbb2N0YXZlc10gVGhlIG51bWJlciBvZiBvY3RhdmVzIGFib3ZlIHRoZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaWx0ZXIgd2lsbCBzd2VlcCB0byB3aGVuIGZ1bGx5IG9wZW5cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc30gW3NlbnNpdGl2aXR5XSBUaGUgZGVjaWJlbCB0aHJlc2hvbGQgc2Vuc2l0aXZpdHkgZm9yXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbmNvbWluZyBzaWduYWwuIE5vcm1hbCByYW5nZSBvZiAtNDAgdG8gMC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgYXV0b1dhaCA9IG5ldyBUb25lLkF1dG9XYWgoNTAsIDYsIC0zMCkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL2luaXRpYWxpemUgdGhlIHN5bnRoIGFuZCBjb25uZWN0IHRvIGF1dG93YWhcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgU3ludGguY29ubmVjdChhdXRvV2FoKTtcblx0XHQgKiAvL1EgdmFsdWUgaW5mbHVlbmNlcyB0aGUgZWZmZWN0IG9mIHRoZSB3YWggLSBkZWZhdWx0IGlzIDJcblx0XHQgKiBhdXRvV2FoLlEudmFsdWUgPSA2O1xuXHRcdCAqIC8vbW9yZSBhdWRpYmxlIG9uIGhpZ2hlciBub3Rlc1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvV2FoID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnb2N0YXZlcycsXG5cdCAgICAgICAgICAgICdzZW5zaXRpdml0eSdcblx0ICAgICAgICBdLCBUb25lLkF1dG9XYWgpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGVudmVsb3BlIGZvbGxvd2VyLiBTZXQgdGhlIGF0dGFjay9yZWxlYXNlXG5cdFx0XHQgKiAgdGltaW5nIHRvIGFkanVzdCBob3cgdGhlIGVudmVsb3BlIGlzIGZvbGxvd2VkLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZvbGxvd2VyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZvbGxvd2VyID0gbmV3IFRvbmUuRm9sbG93ZXIob3B0aW9ucy5mb2xsb3dlcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGVzIHRoZSBmb2xsb3dlciB2YWx1ZSB0byB0aGUgZnJlcXVlbmN5IGRvbWFpblxuXHRcdFx0ICogIEB0eXBlIHtUb25lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlID0gbmV3IFRvbmUuU2NhbGVFeHAoMCwgMSwgMC41KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGlucHV0IGdhaW4gdG8gYWRqdXN0IHRoZSBzZW5zaXRpdml0eVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge0JpcXVhZEZpbHRlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JhbmRwYXNzID0gbmV3IFRvbmUuRmlsdGVyKHtcblx0ICAgICAgICAgICAgJ3JvbGxvZmYnOiAtNDgsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiAwLFxuXHQgICAgICAgICAgICAnUSc6IG9wdGlvbnMuUVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGVha2luZyA9IG5ldyBUb25lLkZpbHRlcigwLCAncGVha2luZycpO1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcuZ2Fpbi52YWx1ZSA9IG9wdGlvbnMuZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIG9mIHRoZSBmaWx0ZXIuXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5nYWluID0gdGhpcy5fcGVha2luZy5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHF1YWxpdHkgb2YgdGhlIGZpbHRlci5cblx0XHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IHRoaXMuX2JhbmRwYXNzLlE7XG5cdCAgICAgICAgLy90aGUgY29udHJvbCBzaWduYWwgcGF0aFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbih0aGlzLl9pbnB1dEJvb3N0LCB0aGlzLmZvbGxvd2VyLCB0aGlzLl9zd2VlcFJhbmdlKTtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLmNvbm5lY3QodGhpcy5fYmFuZHBhc3MuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLmNvbm5lY3QodGhpcy5fcGVha2luZy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vdGhlIGZpbHRlcmVkIHBhdGhcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4odGhpcy5fYmFuZHBhc3MsIHRoaXMuX3BlYWtpbmcsIHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgICAgICAvL3NldCB0aGUgaW5pdGlhbCB2YWx1ZVxuXHQgICAgICAgIHRoaXMuX3NldFN3ZWVwUmFuZ2UoKTtcblx0ICAgICAgICB0aGlzLnNlbnNpdGl2aXR5ID0gb3B0aW9ucy5zZW5zaXRpdml0eTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdXRvV2FoLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvV2FoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMTAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogNixcblx0ICAgICAgICAnc2Vuc2l0aXZpdHknOiAwLFxuXHQgICAgICAgICdRJzogMixcblx0ICAgICAgICAnZ2Fpbic6IDIsXG5cdCAgICAgICAgJ2ZvbGxvd2VyJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4zLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhhdCB0aGUgZmlsdGVyIHdpbGwgc3dlZXAgYWJvdmUgdGhlXG5cdFx0ICogYmFzZUZyZXF1ZW5jeS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvV2FoI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b1dhaC5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdGF2ZXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdGF2ZXM7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFN3ZWVwUmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBiYXNlIGZyZXF1ZW5jeSBmcm9tIHdoaWNoIHRoZSBzd2VlcCB3aWxsIHN0YXJ0IGZyb20uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b1dhaCNcblx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqIEBuYW1lIGJhc2VGcmVxdWVuY3lcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9XYWgucHJvdG90eXBlLCAnYmFzZUZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChiYXNlRnJlcSkge1xuXHQgICAgICAgICAgICB0aGlzLl9iYXNlRnJlcXVlbmN5ID0gYmFzZUZyZXE7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFN3ZWVwUmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBzZW5zaXRpdml0eSB0byBjb250cm9sIGhvdyByZXNwb25zaXZlIHRvIHRoZSBpbnB1dCBzaWduYWwgdGhlIGZpbHRlciBpcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvV2FoI1xuXHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHQgKiBAbmFtZSBzZW5zaXRpdml0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b1dhaC5wcm90b3R5cGUsICdzZW5zaXRpdml0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuZ2FpblRvRGIoMSAvIHRoaXMuX2lucHV0Qm9vc3QuZ2Fpbi52YWx1ZSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzZW5zaXRpdnkpIHtcblx0ICAgICAgICAgICAgdGhpcy5faW5wdXRCb29zdC5nYWluLnZhbHVlID0gMSAvIFRvbmUuZGJUb0dhaW4oc2Vuc2l0aXZ5KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXRzIHRoZSBzd2VlcCByYW5nZSBvZiB0aGUgc2NhbGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWgucHJvdG90eXBlLl9zZXRTd2VlcFJhbmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UubWluID0gdGhpcy5fYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLm1heCA9IE1hdGgubWluKHRoaXMuX2Jhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCB0aGlzLl9vY3RhdmVzKSwgdGhpcy5jb250ZXh0LnNhbXBsZVJhdGUgLyAyKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1dG9XYWh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuZm9sbG93ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZm9sbG93ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2JhbmRwYXNzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9iYW5kcGFzcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGVha2luZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcGVha2luZyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faW5wdXRCb29zdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faW5wdXRCb29zdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdXRvV2FoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU2lnbmFsLXJhdGUgbW9kdWxvIG9wZXJhdG9yLiBPbmx5IHdvcmtzIGluIEF1ZGlvUmFuZ2UgWy0xLCAxXSBhbmQgZm9yIG1vZHVsdXNcblx0XHQgKiAgICAgICAgIHZhbHVlcyBpbiB0aGUgTm9ybWFsUmFuZ2UuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IG1vZHVsdXMgVGhlIG1vZHVsdXMgdG8gYXBwbHkuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG1vZCA9IG5ldyBUb25lLk1vZHVsbygwLjIpXG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgwLjUpLmNvbm5lY3QobW9kKTtcblx0XHQgKiAvL21vZCBvdXRwdXRzIDAuMVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb2R1bG8gPSBmdW5jdGlvbiAobW9kdWx1cykge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHdhdmVzaGFwZXIgZ2V0cyB0aGUgaW50ZWdlciBtdWx0aXBsZSBvZlxuXHRcdFx0ICogIHRoZSBpbnB1dCBzaWduYWwgYW5kIHRoZSBtb2R1bHVzLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoTWF0aC5wb3coMiwgMTYpKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW50ZWdlciBtdWx0aXBsZSBpcyBtdWx0aXBsaWVkIGJ5IHRoZSBtb2R1bHVzXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IG5ldyBUb25lLk11bHRpcGx5KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgYW5kIHN1YnRyYWN0ZWQgZnJvbSB0aGUgaW5wdXQgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbW9kdWx1cyBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwgPSBuZXcgVG9uZS5TaWduYWwobW9kdWx1cyk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZmFuKHRoaXMuX3NoYXBlciwgdGhpcy5fc3VidHJhY3QpO1xuXHQgICAgICAgIHRoaXMuX21vZFNpZ25hbC5jb25uZWN0KHRoaXMuX211bHRpcGx5LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuY29ubmVjdCh0aGlzLl9tdWx0aXBseSwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkuY29ubmVjdCh0aGlzLl9zdWJ0cmFjdCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fc2V0V2F2ZVNoYXBlcihtb2R1bHVzKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1vZHVsbywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9ICBtb2QgIHRoZSBtb2R1bHVzIHRvIGFwcGx5XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vZHVsby5wcm90b3R5cGUuX3NldFdhdmVTaGFwZXIgPSBmdW5jdGlvbiAobW9kKSB7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLnNldE1hcChmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHZhciBtdWx0aXBsZSA9IE1hdGguZmxvb3IoKHZhbCArIDAuMDAwMSkgLyBtb2QpO1xuXHQgICAgICAgICAgICByZXR1cm4gbXVsdGlwbGU7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1vZHVsdXMgdmFsdWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTW9kdWxvI1xuXHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTW9kdWxvLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9kU2lnbmFsLnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobW9kKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZFNpZ25hbC52YWx1ZSA9IG1vZDtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0V2F2ZVNoYXBlcihtb2QpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9kdWxvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1vZHVsby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZFNpZ25hbC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Nb2R1bG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkJpdGNydXNoZXIgZG93bnNhbXBsZXMgdGhlIGluY29taW5nIHNpZ25hbCB0byBhIGRpZmZlcmVudCBiaXRkZXB0aC5cblx0XHQgKiAgICAgICAgIExvd2VyaW5nIHRoZSBiaXRkZXB0aCBvZiB0aGUgc2lnbmFsIGNyZWF0ZXMgZGlzdG9ydGlvbi4gUmVhZCBtb3JlIGFib3V0IEJpdGNydXNoaW5nXG5cdFx0ICogICAgICAgICBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CaXRjcnVzaGVyKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gYml0cyBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gZG93bnNhbXBsZSB0aGUgc2lnbmFsLiBOb21pbmFsIHJhbmdlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIG9mIDEgdG8gOC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2luaXRpYWxpemUgY3J1c2hlciBhbmQgcm91dGUgYSBzeW50aCB0aHJvdWdoIGl0XG5cdFx0ICogdmFyIGNydXNoZXIgPSBuZXcgVG9uZS5CaXRDcnVzaGVyKDQpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuTW9ub1N5bnRoKCkuY29ubmVjdChjcnVzaGVyKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQml0Q3J1c2hlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2JpdHMnXSwgVG9uZS5CaXRDcnVzaGVyKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIHZhciBpbnZTdGVwU2l6ZSA9IDEgLyBNYXRoLnBvdygyLCBvcHRpb25zLmJpdHMgLSAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTdWJ0cmFjdCB0aGUgaW5wdXQgc2lnbmFsIGFuZCB0aGUgbW9kdWx1cyBvZiB0aGUgaW5wdXQgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kIGZ1bmN0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1vZHVsb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxvID0gbmV3IFRvbmUuTW9kdWxvKGludlN0ZXBTaXplKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBrZWVwcyB0cmFjayBvZiB0aGUgYml0c1xuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JpdHMgPSBvcHRpb25zLmJpdHM7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmZhbih0aGlzLl9zdWJ0cmFjdCwgdGhpcy5fbW9kdWxvKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bG8uY29ubmVjdCh0aGlzLl9zdWJ0cmFjdCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QuY29ubmVjdCh0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CaXRDcnVzaGVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQml0Q3J1c2hlci5kZWZhdWx0cyA9IHsgJ2JpdHMnOiA0IH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYml0IGRlcHRoIG9mIHRoZSBlZmZlY3QuIE5vbWluYWwgcmFuZ2Ugb2YgMS04LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJpdENydXNoZXIjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBiaXRzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CaXRDcnVzaGVyLnByb3RvdHlwZSwgJ2JpdHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9iaXRzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYml0cykge1xuXHQgICAgICAgICAgICB0aGlzLl9iaXRzID0gYml0cztcblx0ICAgICAgICAgICAgdmFyIGludlN0ZXBTaXplID0gMSAvIE1hdGgucG93KDIsIGJpdHMgLSAxKTtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxvLnZhbHVlID0gaW52U3RlcFNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkJpdENydXNoZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQml0Q3J1c2hlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxvLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bG8gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkJpdENydXNoZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkNoZWJ5U2hldiBpcyBhIENoZWJ5c2hldiB3YXZlc2hhcGVyLCBhbiBlZmZlY3Qgd2hpY2ggaXMgZ29vZCBcblx0XHQgKiAgICAgICAgIGZvciBtYWtpbmcgZGlmZmVyZW50IHR5cGVzIG9mIGRpc3RvcnRpb24gc291bmRzLlxuXHRcdCAqICAgICAgICAgTm90ZSB0aGF0IG9kZCBvcmRlcnMgc291bmQgdmVyeSBkaWZmZXJlbnQgZnJvbSBldmVuIG9uZXMsIFxuXHRcdCAqICAgICAgICAgYW5kIG9yZGVyID0gMSBpcyBubyBjaGFuZ2UuIFxuXHRcdCAqICAgICAgICAgUmVhZCBtb3JlIGF0IFttdXNpYy5jb2x1bWJpYS5lZHVdKGh0dHA6Ly9tdXNpYy5jb2x1bWJpYS5lZHUvY21jL211c2ljYW5kY29tcHV0ZXJzL2NoYXB0ZXI0LzA0XzA2LnBocCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZXxPYmplY3R9IFtvcmRlcl0gVGhlIG9yZGVyIG9mIHRoZSBjaGVieXNoZXYgcG9seW5vbWlhbC4gTm9ybWFsIHJhbmdlIGJldHdlZW4gMS0xMDAuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY3JlYXRlIGEgbmV3IGNoZWJ5XG5cdFx0ICogdmFyIGNoZWJ5ID0gbmV3IFRvbmUuQ2hlYnlzaGV2KDUwKTtcblx0XHQgKiAvL2NyZWF0ZSBhIG1vbm9zeW50aCBjb25uZWN0ZWQgdG8gb3VyIGNoZWJ5XG5cdFx0ICogc3ludGggPSBuZXcgVG9uZS5Nb25vU3ludGgoKS5jb25uZWN0KGNoZWJ5KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hlYnlzaGV2ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnb3JkZXInXSwgVG9uZS5DaGVieXNoZXYpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKDQwOTYpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogaG9sZHMgb250byB0aGUgb3JkZXIgb2YgdGhlIGZpbHRlclxuXHRcdFx0ICogQHR5cGUge251bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vcmRlciA9IG9wdGlvbnMub3JkZXI7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX3NoYXBlcik7XG5cdCAgICAgICAgdGhpcy5vcmRlciA9IG9wdGlvbnMub3JkZXI7XG5cdCAgICAgICAgdGhpcy5vdmVyc2FtcGxlID0gb3B0aW9ucy5vdmVyc2FtcGxlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ2hlYnlzaGV2LCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hlYnlzaGV2LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvcmRlcic6IDEsXG5cdCAgICAgICAgJ292ZXJzYW1wbGUnOiAnbm9uZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZ2V0IHRoZSBjb2VmZmljaWVudCBmb3IgdGhhdCBkZWdyZWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHggdGhlIHggdmFsdWVcblx0XHQgKiAgQHBhcmFtICAge251bWJlcn0gZGVncmVlIFxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gbWVtbyBtZW1vaXplIHRoZSBjb21wdXRlZCB2YWx1ZS4gXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHRoaXMgc3BlZWRzIHVwIGNvbXB1dGF0aW9uIGdyZWF0bHkuIFxuXHRcdCAqICBAcmV0dXJuICB7bnVtYmVyfSAgICAgICB0aGUgY29lZmZpY2llbnQgXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldi5wcm90b3R5cGUuX2dldENvZWZmaWNpZW50ID0gZnVuY3Rpb24gKHgsIGRlZ3JlZSwgbWVtbykge1xuXHQgICAgICAgIGlmIChtZW1vLmhhc093blByb3BlcnR5KGRlZ3JlZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG1lbW9bZGVncmVlXTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGRlZ3JlZSA9PT0gMCkge1xuXHQgICAgICAgICAgICBtZW1vW2RlZ3JlZV0gPSAwO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoZGVncmVlID09PSAxKSB7XG5cdCAgICAgICAgICAgIG1lbW9bZGVncmVlXSA9IHg7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgbWVtb1tkZWdyZWVdID0gMiAqIHggKiB0aGlzLl9nZXRDb2VmZmljaWVudCh4LCBkZWdyZWUgLSAxLCBtZW1vKSAtIHRoaXMuX2dldENvZWZmaWNpZW50KHgsIGRlZ3JlZSAtIDIsIG1lbW8pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbWVtb1tkZWdyZWVdO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvcmRlciBvZiB0aGUgQ2hlYnlzaGV2IHBvbHlub21pYWwgd2hpY2ggY3JlYXRlc1xuXHRcdCAqIHRoZSBlcXVhdGlvbiB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBpbmNvbWluZyBcblx0XHQgKiBzaWduYWwgdGhyb3VnaCBhIFRvbmUuV2F2ZVNoYXBlci4gVGhlIGVxdWF0aW9uc1xuXHRcdCAqIGFyZSBpbiB0aGUgZm9ybTo8YnI+XG5cdFx0ICogb3JkZXIgMjogMnheMiArIDE8YnI+XG5cdFx0ICogb3JkZXIgMzogNHheMyArIDN4IDxicj5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaGVieXNoZXYjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIG9yZGVyXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLCAnb3JkZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmRlcjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9yZGVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yZGVyID0gb3JkZXI7XG5cdCAgICAgICAgICAgIHZhciBjdXJ2ZSA9IG5ldyBBcnJheSg0MDk2KTtcblx0ICAgICAgICAgICAgdmFyIGxlbiA9IGN1cnZlLmxlbmd0aDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHggPSBpICogMiAvIGxlbiAtIDE7XG5cdCAgICAgICAgICAgICAgICBpZiAoeCA9PT0gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vc2hvdWxkIG91dHB1dCAwIHdoZW4gaW5wdXQgaXMgMFxuXHQgICAgICAgICAgICAgICAgICAgIGN1cnZlW2ldID0gMDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY3VydmVbaV0gPSB0aGlzLl9nZXRDb2VmZmljaWVudCh4LCBvcmRlciwge30pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5jdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG92ZXJzYW1wbGluZyBvZiB0aGUgZWZmZWN0LiBDYW4gZWl0aGVyIGJlIFwibm9uZVwiLCBcIjJ4XCIgb3IgXCI0eFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNoZWJ5c2hldiNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIG92ZXJzYW1wbGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNoZWJ5c2hldi5wcm90b3R5cGUsICdvdmVyc2FtcGxlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvdmVyc2FtcGxpbmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGUgPSBvdmVyc2FtcGxpbmc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DaGVieXNoZXZ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNoZWJ5c2hldjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEJhc2UgY2xhc3MgZm9yIFN0ZXJlbyBlZmZlY3RzLiBQcm92aWRlcyBlZmZlY3RTZW5kTC9SIGFuZCBlZmZlY3RSZXR1cm5ML1IuXG5cdFx0ICpcblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd3ZXQnXSwgVG9uZS5FZmZlY3QpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZHJ5d2V0IGtub2IgdG8gY29udHJvbCB0aGUgYW1vdW50IG9mIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNyb3NzRmFkZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0ID0gbmV3IFRvbmUuQ3Jvc3NGYWRlKG9wdGlvbnMud2V0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgd2V0IGNvbnRyb2wsIGkuZS4gaG93IG11Y2ggb2YgdGhlIGVmZmVjdGVkXG5cdFx0XHQgKiAgd2lsbCBwYXNzIHRocm91Z2ggdG8gdGhlIG91dHB1dC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy53ZXQgPSB0aGlzLl9kcnlXZXQuZmFkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGVuIHNwbGl0IGl0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NwbGl0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0cyBzZW5kIExFRlRcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwgPSB0aGlzLl9zcGxpdC5sZWZ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBlZmZlY3RzIHNlbmQgUklHSFRcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIgPSB0aGlzLl9zcGxpdC5yaWdodDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc3RlcmVvIGVmZmVjdCBtZXJnZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBuZXcgVG9uZS5NZXJnZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBlZmZlY3QgcmV0dXJuIExFRlRcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTCA9IHRoaXMuX21lcmdlLmxlZnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdCByZXR1cm4gUklHSFRcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuUiA9IHRoaXMuX21lcmdlLnJpZ2h0O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fc3BsaXQpO1xuXHQgICAgICAgIC8vZHJ5IHdldCBjb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9kcnlXZXQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX21lcmdlLmNvbm5lY3QodGhpcy5fZHJ5V2V0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWyd3ZXQnXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9FZmZlY3QsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3RlcmVvRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5MID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnd2V0J10pO1xuXHQgICAgICAgIHRoaXMud2V0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdGVyZW9FZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkNob3J1cyBpcyBhIHN0ZXJlbyBjaG9ydXMgZWZmZWN0IGNvbXBvc2VkIG9mXG5cdFx0ICogICAgICAgICBhIGxlZnQgYW5kIHJpZ2h0IGRlbGF5IHdpdGggYSBUb25lLkxGTyBhcHBsaWVkIHRvIHRoZSBkZWxheVRpbWUgb2YgZWFjaCBjaGFubmVsLlxuXHRcdCAqICAgICAgICAgSW5zcGlyYXRpb24gZnJvbSBbVHVuYS5qc10oaHR0cHM6Ly9naXRodWIuY29tL0RpbmFobW9lL3R1bmEvYmxvYi9tYXN0ZXIvdHVuYS5qcykuXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgb24gdGhlIGNob3J1cyBlZmZlY3Qgb24gW1NvdW5kT25Tb3VuZF0oaHR0cDovL3d3dy5zb3VuZG9uc291bmQuY29tL3Nvcy9qdW4wNC9hcnRpY2xlcy9zeW50aHNlY3JldHMuaHRtKS5cblx0XHQgKlxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqXHRAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgb2YgdGhlIExGTy5cblx0XHQgKlx0QHBhcmFtIHtNaWxsaXNlY29uZHN9IFtkZWxheVRpbWVdIFRoZSBkZWxheSBvZiB0aGUgY2hvcnVzIGVmZmVjdCBpbiBtcy5cblx0XHQgKlx0QHBhcmFtIHtOb3JtYWxSYW5nZX0gW2RlcHRoXSBUaGUgZGVwdGggb2YgdGhlIGNob3J1cy5cblx0XHQgKlx0QGV4YW1wbGVcblx0XHQgKiB2YXIgY2hvcnVzID0gbmV3IFRvbmUuQ2hvcnVzKDQsIDIuNSwgMC41KTtcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5Qb2x5U3ludGgoNCwgVG9uZS5Nb25vU3ludGgpLmNvbm5lY3QoY2hvcnVzKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJDM1wiLFwiRTNcIixcIkczXCJdLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DaG9ydXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdLCBUb25lLkNob3J1cyk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVwdGggb2YgdGhlIGNob3J1c1xuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlcHRoID0gb3B0aW9ucy5kZXB0aDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXlUaW1lXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlUaW1lID0gb3B0aW9ucy5kZWxheVRpbWUgLyAxMDAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8gd2hpY2ggY29udHJvbHMgdGhlIGRlbGF5VGltZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAxXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgYW5vdGhlciBMRk8gZm9yIHRoZSByaWdodCBzaWRlIHdpdGggYSAxODAgZGVncmVlIHBoYXNlIGRpZmZcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogMTgwXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZGVsYXkgZm9yIGxlZnRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlTCA9IG5ldyBUb25lLkRlbGF5KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZGVsYXkgZm9yIHJpZ2h0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZVIgPSBuZXcgVG9uZS5EZWxheSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGZyZXF1ZW5jeSBvZiB0aGUgTEZPIHdoaWNoIG1vZHVsYXRlcyB0aGUgZGVsYXlUaW1lLlxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvTC5mcmVxdWVuY3k7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY2hhaW4odGhpcy5fZGVsYXlOb2RlTCwgdGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNoYWluKHRoaXMuX2RlbGF5Tm9kZVIsIHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgLy9hbmQgcGFzcyB0aHJvdWdoIHRvIG1ha2UgdGhlIGRldHVuZSBhcHBhcmVudFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY29ubmVjdCh0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY29ubmVjdCh0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIC8vbGZvIHNldHVwXG5cdCAgICAgICAgdGhpcy5fbGZvTC5jb25uZWN0KHRoaXMuX2RlbGF5Tm9kZUwuZGVsYXlUaW1lKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLmNvbm5lY3QodGhpcy5fZGVsYXlOb2RlUi5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGxmb1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3RhcnQoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN0YXJ0KCk7XG5cdCAgICAgICAgLy9oYXZlIG9uZSBMRk8gZnJlcXVlbmN5IGNvbnRyb2wgdGhlIG90aGVyXG5cdCAgICAgICAgdGhpcy5fbGZvTC5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9sZm9SLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2RlcHRoO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LnZhbHVlID0gb3B0aW9ucy5mcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZnJlcXVlbmN5J10pO1xuXHQgICAgICAgIHRoaXMuc3ByZWFkID0gb3B0aW9ucy5zcHJlYWQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DaG9ydXMsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNob3J1cy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMS41LFxuXHQgICAgICAgICdkZWxheVRpbWUnOiAzLjUsXG5cdCAgICAgICAgJ2RlcHRoJzogMC43LFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdzcHJlYWQnOiAxODBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVwdGggb2YgdGhlIGVmZmVjdC4gQSBkZXB0aCBvZiAxIG1ha2VzIHRoZSBkZWxheVRpbWVcblx0XHQgKiBtb2R1bGF0ZSBiZXR3ZWVuIDAgYW5kIDIqZGVsYXlUaW1lIChjZW50ZXJlZCBhcm91bmQgdGhlIGRlbGF5VGltZSkuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hvcnVzI1xuXHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiBAbmFtZSBkZXB0aFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hvcnVzLnByb3RvdHlwZSwgJ2RlcHRoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVwdGg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkZXB0aCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZXB0aCA9IGRlcHRoO1xuXHQgICAgICAgICAgICB2YXIgZGV2aWF0aW9uID0gdGhpcy5fZGVsYXlUaW1lICogZGVwdGg7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wubWluID0gTWF0aC5tYXgodGhpcy5fZGVsYXlUaW1lIC0gZGV2aWF0aW9uLCAwKTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5tYXggPSB0aGlzLl9kZWxheVRpbWUgKyBkZXZpYXRpb247XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWluID0gTWF0aC5tYXgodGhpcy5fZGVsYXlUaW1lIC0gZGV2aWF0aW9uLCAwKTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5tYXggPSB0aGlzLl9kZWxheVRpbWUgKyBkZXZpYXRpb247XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVsYXlUaW1lIGluIG1pbGxpc2Vjb25kcyBvZiB0aGUgY2hvcnVzLiBBIGxhcmdlciBkZWxheVRpbWVcblx0XHQgKiB3aWxsIGdpdmUgYSBtb3JlIHByb25vdW5jZWQgZWZmZWN0LiBOb21pbmFsIHJhbmdlIGEgZGVsYXlUaW1lXG5cdFx0ICogaXMgYmV0d2VlbiAyIGFuZCAyMG1zLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNob3J1cyNcblx0XHQgKiBAdHlwZSB7TWlsbGlzZWNvbmRzfVxuXHRcdCAqIEBuYW1lIGRlbGF5VGltZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hvcnVzLnByb3RvdHlwZSwgJ2RlbGF5VGltZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGF5VGltZSAqIDEwMDA7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkZWxheVRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGVsYXlUaW1lID0gZGVsYXlUaW1lIC8gMTAwMDtcblx0ICAgICAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2RlcHRoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG9zY2lsbGF0b3IgdHlwZSBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNob3J1cyNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvTC50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQW1vdW50IG9mIHN0ZXJlbyBzcHJlYWQuIFdoZW4gc2V0IHRvIDAsIGJvdGggTEZPJ3Mgd2lsbCBiZSBwYW5uZWQgY2VudHJhbGx5LlxuXHRcdCAqIFdoZW4gc2V0IHRvIDE4MCwgTEZPJ3Mgd2lsbCBiZSBwYW5uZWQgaGFyZCBsZWZ0IGFuZCByaWdodCByZXNwZWN0aXZlbHkuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hvcnVzI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHNwcmVhZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hvcnVzLnByb3RvdHlwZSwgJ3NwcmVhZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmb1IucGhhc2UgLSB0aGlzLl9sZm9MLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ByZWFkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wucGhhc2UgPSA5MCAtIHNwcmVhZCAvIDI7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IucGhhc2UgPSBzcHJlYWQgLyAyICsgOTA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNob3J1c30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DaG9ydXMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9sZm9MLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9MID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9SLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVMLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNob3J1cztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkNvbnZvbHZlciBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBOYXRpdmUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICAgW0NvbnZvbHZlck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWNvbnZvbHZlcm5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKiAgICAgICAgICBDb252b2x1dGlvbiBpcyB1c2VmdWwgZm9yIHJldmVyYiBhbmQgZmlsdGVyIGVtdWxhdGlvbi4gUmVhZCBtb3JlIGFib3V0IGNvbnZvbHV0aW9uIHJldmVyYiBvblxuXHRcdCAqICAgICAgICAgIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbnZvbHV0aW9uX3JldmVyYikuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd8VG9uZS5CdWZmZXJ8T2JqZWN0fSBbdXJsXSBUaGUgVVJMIG9mIHRoZSBpbXB1bHNlIHJlc3BvbnNlIG9yIHRoZSBUb25lLkJ1ZmZlclxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpYW5pbmcgdGhlIGltcHVsc2UgcmVzcG9uc2UuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb249fSBvbmxvYWQgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaW5pdGlhbGl6aW5nIHRoZSBjb252b2x2ZXIgd2l0aCBhbiBpbXB1bHNlIHJlc3BvbnNlXG5cdFx0ICogdmFyIGNvbnZvbHZlciA9IG5ldyBUb25lLkNvbnZvbHZlcihcIi4vcGF0aC90by9pci53YXZcIikudG9NYXN0ZXIoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udm9sdmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3VybCcsXG5cdCAgICAgICAgICAgICdvbmxvYWQnXG5cdCAgICAgICAgXSwgVG9uZS5Db252b2x2ZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29udm9sdmVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7Q29udm9sdmVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNvbnZvbHZlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBjb252b2x1dGlvbiBidWZmZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5CdWZmZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihvcHRpb25zLnVybCwgZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9jb252b2x2ZXIuYnVmZmVyID0gYnVmZmVyLmdldCgpO1xuXHQgICAgICAgICAgICBvcHRpb25zLm9ubG9hZCgpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX2NvbnZvbHZlcik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Db252b2x2ZXIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udm9sdmVyLmRlZmF1bHRzID0geyAnb25sb2FkJzogVG9uZS5ub09wIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGNvbnZvbHZlcidzIGJ1ZmZlclxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db252b2x2ZXIjXG5cdFx0ICogIEB0eXBlIHtBdWRpb0J1ZmZlcn1cblx0XHQgKiAgQG5hbWUgYnVmZmVyXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db252b2x2ZXIucHJvdG90eXBlLCAnYnVmZmVyJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmdldCgpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlci5zZXQoYnVmZmVyKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29udm9sdmVyLmJ1ZmZlciA9IHRoaXMuX2J1ZmZlci5nZXQoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBMb2FkIGFuIGltcHVsc2UgcmVzcG9uc2UgdXJsIGFzIGFuIGF1ZGlvIGJ1ZmZlci5cblx0XHQgKiAgRGVjb2RlcyB0aGUgYXVkaW8gYXN5bmNocm9ub3VzbHkgYW5kIGludm9rZXNcblx0XHQgKiAgdGhlIGNhbGxiYWNrIG9uY2UgdGhlIGF1ZGlvIGJ1ZmZlciBsb2Fkcy5cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgdXJsIG9mIHRoZSBidWZmZXIgdG8gbG9hZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICBmaWxldHlwZSBzdXBwb3J0IGRlcGVuZHMgb24gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgYnJvd3Nlci5cblx0XHQgKiAgQHBhcmFtICB7ZnVuY3Rpb249fSBjYWxsYmFja1xuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udm9sdmVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmxvYWQodXJsLCBmdW5jdGlvbiAoYnVmZikge1xuXHQgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmY7XG5cdCAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuXHQgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Db252b2x2ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udm9sdmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Db252b2x2ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkRpc3RvcnRpb24gaXMgYSBzaW1wbGUgZGlzdG9ydGlvbiBlZmZlY3QgdXNpbmcgVG9uZS5XYXZlU2hhcGVyLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZyb20gW2Egc3RhY2tvdmVyZmxvdyBhbnN3ZXJdKGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyMzEzNDA4KS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxPYmplY3R9IFtkaXN0b3J0aW9uXSBUaGUgYW1vdW50IG9mIGRpc3RvcnRpb24gKG5vbWluYWwgcmFuZ2Ugb2YgMC0xKVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBkaXN0ID0gbmV3IFRvbmUuRGlzdG9ydGlvbigwLjgpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIGZtID0gbmV3IFRvbmUuU2ltcGxlRk0oKS5jb25uZWN0KGRpc3QpO1xuXHRcdCAqIC8vdGhpcyBzb3VuZHMgZ29vZCBvbiBiYXNzIG5vdGVzXG5cdFx0ICogZm0udHJpZ2dlckF0dGFja1JlbGVhc2UoXCJBMVwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EaXN0b3J0aW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZGlzdG9ydGlvbiddLCBUb25lLkRpc3RvcnRpb24pO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcig0MDk2KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIGhvbGRzIHRoZSBkaXN0b3J0aW9uIGFtb3VudFxuXHRcdFx0ICogQHR5cGUge251bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kaXN0b3J0aW9uID0gb3B0aW9ucy5kaXN0b3J0aW9uO1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9zaGFwZXIpO1xuXHQgICAgICAgIHRoaXMuZGlzdG9ydGlvbiA9IG9wdGlvbnMuZGlzdG9ydGlvbjtcblx0ICAgICAgICB0aGlzLm92ZXJzYW1wbGUgPSBvcHRpb25zLm92ZXJzYW1wbGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5EaXN0b3J0aW9uLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRGlzdG9ydGlvbi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGlzdG9ydGlvbic6IDAuNCxcblx0ICAgICAgICAnb3ZlcnNhbXBsZSc6ICdub25lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhbW91bnQgb2YgZGlzdG9ydGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5EaXN0b3J0aW9uI1xuXHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiBAbmFtZSBkaXN0b3J0aW9uXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5EaXN0b3J0aW9uLnByb3RvdHlwZSwgJ2Rpc3RvcnRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9kaXN0b3J0aW9uO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYW1vdW50KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2Rpc3RvcnRpb24gPSBhbW91bnQ7XG5cdCAgICAgICAgICAgIHZhciBrID0gYW1vdW50ICogMTAwO1xuXHQgICAgICAgICAgICB2YXIgZGVnID0gTWF0aC5QSSAvIDE4MDtcblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLnNldE1hcChmdW5jdGlvbiAoeCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKHgpIDwgMC4wMDEpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL3Nob3VsZCBvdXRwdXQgMCB3aGVuIGlucHV0IGlzIDBcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgzICsgaykgKiB4ICogMjAgKiBkZWcgLyAoTWF0aC5QSSArIGsgKiBNYXRoLmFicyh4KSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG92ZXJzYW1wbGluZyBvZiB0aGUgZWZmZWN0LiBDYW4gZWl0aGVyIGJlIFwibm9uZVwiLCBcIjJ4XCIgb3IgXCI0eFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkRpc3RvcnRpb24jXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSBvdmVyc2FtcGxlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5EaXN0b3J0aW9uLnByb3RvdHlwZSwgJ292ZXJzYW1wbGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG92ZXJzYW1wbGluZykge1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZSA9IG92ZXJzYW1wbGluZztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkRpc3RvcnRpb259IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRGlzdG9ydGlvbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5EaXN0b3J0aW9uO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqIFx0QGNsYXNzICBUb25lLkZlZWRiYWNrRWZmZWN0IHByb3ZpZGVzIGEgbG9vcCBiZXR3ZWVuIGFuIFxuXHRcdCAqIFx0ICAgICAgICBhdWRpbyBzb3VyY2UgYW5kIGl0cyBvd24gb3V0cHV0LiBUaGlzIGlzIGEgYmFzZS1jbGFzc1xuXHRcdCAqIFx0ICAgICAgICBmb3IgZmVlZGJhY2sgZWZmZWN0cy4gXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFtmZWVkYmFja10gVGhlIGluaXRpYWwgZmVlZGJhY2sgdmFsdWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZmVlZGJhY2snXSwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZ2FpbiB3aGljaCBjb250cm9scyB0aGUgZmVlZGJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0dhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMuZmVlZGJhY2ssIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBzaWduYWwgd2hpY2ggaXMgZmVkIGJhY2sgaW50byB0aGUgZWZmZWN0IGlucHV0LiBcblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IHRoaXMuX2ZlZWRiYWNrR2Fpbi5nYWluO1xuXHQgICAgICAgIC8vdGhlIGZlZWRiYWNrIGxvb3Bcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybi5jaGFpbih0aGlzLl9mZWVkYmFja0dhaW4sIHRoaXMuZWZmZWN0U2VuZCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydmZWVkYmFjayddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZlZWRiYWNrRWZmZWN0LCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5kZWZhdWx0cyA9IHsgJ2ZlZWRiYWNrJzogMC4xMjUgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZlZWRiYWNrRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydmZWVkYmFjayddKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0dhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrR2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmVlZGJhY2tFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5GZWVkYmFja0RlbGF5IGlzIGEgRGVsYXlOb2RlIGluIHdoaWNoIHBhcnQgb2Ygb3V0cHV0XG5cdFx0ICogICAgICAgICAgc2lnbmFsIGlzIGZlZCBiYWNrIGludG8gdGhlIGRlbGF5LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5GZWVkYmFja0VmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2RlbGF5VGltZV0gVGhlIGRlbGF5IGFwcGxpZWQgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZT19IGZlZWRiYWNrIFRoZSBhbW91bnQgb2YgdGhlIGVmZmVjdGVkIHNpZ25hbCB3aGljaFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZlZCBiYWNrIHRocm91Z2ggdGhlIGRlbGF5LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBmZWVkYmFja0RlbGF5ID0gbmV3IFRvbmUuRmVlZGJhY2tEZWxheShcIjhuXCIsIDAuNSkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgdG9tID0gbmV3IFRvbmUuRHJ1bVN5bnRoKHtcblx0XHQgKiBcdFwib2N0YXZlc1wiIDogNCxcblx0XHQgKiBcdFwicGl0Y2hEZWNheVwiIDogMC4xXG5cdFx0ICogfSkuY29ubmVjdChmZWVkYmFja0RlbGF5KTtcblx0XHQgKiB0b20udHJpZ2dlckF0dGFja1JlbGVhc2UoXCJBMlwiLFwiMzJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0RlbGF5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdmZWVkYmFjaydcblx0ICAgICAgICBdLCBUb25lLkZlZWRiYWNrRGVsYXkpO1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBuZXcgVG9uZS5EZWxheShvcHRpb25zLmRlbGF5VGltZSwgb3B0aW9ucy5tYXhEZWxheSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlbGF5VGltZSBvZiB0aGUgRGVsYXlOb2RlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZGVsYXlOb2RlLmRlbGF5VGltZTtcblx0ICAgICAgICAvLyBjb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX2RlbGF5Tm9kZSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydkZWxheVRpbWUnXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GZWVkYmFja0RlbGF5LCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRGVsYXkuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDAuMjUsXG5cdCAgICAgICAgJ21heERlbGF5JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GZWVkYmFja0RlbGF5fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRGVsYXkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2RlbGF5VGltZSddKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmVlZGJhY2tEZWxheTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgYW4gYXJyYXkgb2YgY29tYiBmaWx0ZXIgZGVsYXkgdmFsdWVzIGZyb20gRnJlZXZlcmIgaW1wbGVtZW50YXRpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgY29tYkZpbHRlclR1bmluZ3MgPSBbXG5cdCAgICAgICAgMTU1NyAvIDQ0MTAwLFxuXHQgICAgICAgIDE2MTcgLyA0NDEwMCxcblx0ICAgICAgICAxNDkxIC8gNDQxMDAsXG5cdCAgICAgICAgMTQyMiAvIDQ0MTAwLFxuXHQgICAgICAgIDEyNzcgLyA0NDEwMCxcblx0ICAgICAgICAxMzU2IC8gNDQxMDAsXG5cdCAgICAgICAgMTE4OCAvIDQ0MTAwLFxuXHQgICAgICAgIDExMTYgLyA0NDEwMFxuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBhbiBhcnJheSBvZiBhbGxwYXNzIGZpbHRlciBmcmVxdWVuY3kgdmFsdWVzIGZyb20gRnJlZXZlcmIgaW1wbGVtZW50YXRpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzID0gW1xuXHQgICAgICAgIDIyNSxcblx0ICAgICAgICA1NTYsXG5cdCAgICAgICAgNDQxLFxuXHQgICAgICAgIDM0MVxuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GcmVldmVyYiBpcyBhIHJldmVyYiBiYXNlZCBvbiBbRnJlZXZlcmJdKGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L35qb3MvcGFzcC9GcmVldmVyYi5odG1sKS5cblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBvbiByZXZlcmIgb24gW1NvdW5kIE9uIFNvdW5kXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA0MDQwODM5MDIvaHR0cDovL3d3dy5zb3VuZG9uc291bmQuY29tOjgwL3Nvcy9mZWIwMS9hcnRpY2xlcy9zeW50aHNlY3JldHMuYXNwKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3Jvb21TaXplXSBDb3JyZWxhdGVkIHRvIHRoZSBkZWNheSB0aW1lLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2RhbXBlbmluZ10gVGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgYSBsb3dwYXNzIGZpbHRlciBhcyBwYXJ0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcmV2ZXJiLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBmcmVldmVyYiA9IG5ldyBUb25lLkZyZWV2ZXJiKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBmcmVldmVyYi5kYW1wZW5pbmcudmFsdWUgPSAxMDAwO1xuXHRcdCAqIC8vcm91dGluZyBzeW50aCB0aHJvdWdoIHRoZSByZXZlcmJcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5BTVN5bnRoKCkuY29ubmVjdChmcmVldmVyYik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZWV2ZXJiID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3Jvb21TaXplJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdLCBUb25lLkZyZWV2ZXJiKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByb29tU2l6ZSB2YWx1ZSBiZXR3ZWVuLiBBIGxhcmdlciByb29tU2l6ZVxuXHRcdFx0ICogIHdpbGwgcmVzdWx0IGluIGEgbG9uZ2VyIGRlY2F5LlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJvb21TaXplID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMucm9vbVNpemUsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBkYW1wZW5pbmcgb2YgdGhlIHJldmVyYmVyYW50IHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGFtcGVuaW5nLCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29tYiBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21iRmlsdGVycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhbGxwYXNzIGZpbHRlcnMgb24gdGhlIGxlZnRcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTCA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhbGxwYXNzIGZpbHRlcnMgb24gdGhlIHJpZ2h0XG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1IgPSBbXTtcblx0ICAgICAgICAvL21ha2UgdGhlIGFsbHBhc3MgZmlsdGVycyBvbiB0aGUgcmlnaHRcblx0ICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcy5sZW5ndGg7IGwrKykge1xuXHQgICAgICAgICAgICB2YXIgYWxscGFzc0wgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgIGFsbHBhc3NMLnR5cGUgPSAnYWxscGFzcyc7XG5cdCAgICAgICAgICAgIGFsbHBhc3NMLmZyZXF1ZW5jeS52YWx1ZSA9IGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llc1tsXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMLnB1c2goYWxscGFzc0wpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL21ha2UgdGhlIGFsbHBhc3MgZmlsdGVycyBvbiB0aGUgbGVmdFxuXHQgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzLmxlbmd0aDsgcisrKSB7XG5cdCAgICAgICAgICAgIHZhciBhbGxwYXNzUiA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgYWxscGFzc1IudHlwZSA9ICdhbGxwYXNzJztcblx0ICAgICAgICAgICAgYWxscGFzc1IuZnJlcXVlbmN5LnZhbHVlID0gYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzW3JdO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1IucHVzaChhbGxwYXNzUik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vbWFrZSB0aGUgY29tYiBmaWx0ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjb21iRmlsdGVyVHVuaW5ncy5sZW5ndGg7IGMrKykge1xuXHQgICAgICAgICAgICB2YXIgbGZwZiA9IG5ldyBUb25lLkxvd3Bhc3NDb21iRmlsdGVyKGNvbWJGaWx0ZXJUdW5pbmdzW2NdKTtcblx0ICAgICAgICAgICAgaWYgKGMgPCBjb21iRmlsdGVyVHVuaW5ncy5sZW5ndGggLyAyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNoYWluKGxmcGYsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTFswXSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNoYWluKGxmcGYsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUlswXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5yb29tU2l6ZS5jb25uZWN0KGxmcGYucmVzb25hbmNlKTtcblx0ICAgICAgICAgICAgdGhpcy5kYW1wZW5pbmcuY29ubmVjdChsZnBmLmRhbXBlbmluZyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbWJGaWx0ZXJzLnB1c2gobGZwZik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY2hhaW4gdGhlIGFsbHBhc3MgZmlsdGVycyB0b2dldGVoclxuXHQgICAgICAgIFRvbmUuY29ubmVjdFNlcmllcy5hcHBseShUb25lLCB0aGlzLl9hbGxwYXNzRmlsdGVyc0wpO1xuXHQgICAgICAgIFRvbmUuY29ubmVjdFNlcmllcy5hcHBseShUb25lLCB0aGlzLl9hbGxwYXNzRmlsdGVyc1IpO1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTFt0aGlzLl9hbGxwYXNzRmlsdGVyc0wubGVuZ3RoIC0gMV0uY29ubmVjdCh0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUlt0aGlzLl9hbGxwYXNzRmlsdGVyc1IubGVuZ3RoIC0gMV0uY29ubmVjdCh0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3Jvb21TaXplJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZyZWV2ZXJiLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVldmVyYi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncm9vbVNpemUnOiAwLjcsXG5cdCAgICAgICAgJ2RhbXBlbmluZyc6IDMwMDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZyZWV2ZXJifSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZWV2ZXJiLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgYWwgPSAwOyBhbCA8IHRoaXMuX2FsbHBhc3NGaWx0ZXJzTC5sZW5ndGg7IGFsKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMW2FsXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTFthbF0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0wgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGFyID0gMDsgYXIgPCB0aGlzLl9hbGxwYXNzRmlsdGVyc1IubGVuZ3RoOyBhcisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUlthcl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbYXJdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBjZiA9IDA7IGNmIDwgdGhpcy5fY29tYkZpbHRlcnMubGVuZ3RoOyBjZisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbWJGaWx0ZXJzW2NmXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbWJGaWx0ZXJzW2NmXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2NvbWJGaWx0ZXJzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdyb29tU2l6ZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GcmVldmVyYjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgYW4gYXJyYXkgb2YgdGhlIGNvbWIgZmlsdGVyIGRlbGF5IHRpbWUgdmFsdWVzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGNvbWJGaWx0ZXJEZWxheVRpbWVzID0gW1xuXHQgICAgICAgIDE2ODcgLyAyNTAwMCxcblx0ICAgICAgICAxNjAxIC8gMjUwMDAsXG5cdCAgICAgICAgMjA1MyAvIDI1MDAwLFxuXHQgICAgICAgIDIyNTEgLyAyNTAwMFxuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgcmVzb25hbmNlcyBvZiBlYWNoIG9mIHRoZSBjb21iIGZpbHRlcnNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgY29tYkZpbHRlclJlc29uYW5jZXMgPSBbXG5cdCAgICAgICAgMC43NzMsXG5cdCAgICAgICAgMC44MDIsXG5cdCAgICAgICAgMC43NTMsXG5cdCAgICAgICAgMC43MzNcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGFsbHBhc3MgZmlsdGVyIGZyZXF1ZW5jaWVzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGFsbHBhc3NGaWx0ZXJGcmVxcyA9IFtcblx0ICAgICAgICAzNDcsXG5cdCAgICAgICAgMTEzLFxuXHQgICAgICAgIDM3XG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkpDUmV2ZXJiIGlzIGEgc2ltcGxlIFtTY2hyb2VkZXIgUmV2ZXJiZXJhdG9yXShodHRwczovL2Njcm1hLnN0YW5mb3JkLmVkdS9+am9zL3Bhc3AvU2Nocm9lZGVyX1JldmVyYmVyYXRvcnMuaHRtbClcblx0XHQgKiAgICAgICAgIHR1bmVkIGJ5IEpvaG4gQ2hvd25pbmcgaW4gMTk3MC5cblx0XHQgKiAgICAgICAgIEl0IGlzIG1hZGUgdXAgb2YgdGhyZWUgYWxscGFzcyBmaWx0ZXJzIGFuZCBmb3VyIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLlxuXHRcdCAqXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFtyb29tU2l6ZV0gQ29vcmVsYXRlcyB0byB0aGUgZGVjYXkgdGltZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcmV2ZXJiID0gbmV3IFRvbmUuSkNSZXZlcmIoMC40KS5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0XHQgKiB2YXIgZGVsYXkgPSBuZXcgVG9uZS5GZWVkYmFja0RlbGF5KDAuNSk7XG5cdFx0ICogLy9jb25uZWN0aW5nIHRoZSBzeW50aCB0byByZXZlcmIgdGhyb3VnaCBkZWxheVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkR1b1N5bnRoKCkuY2hhaW4oZGVsYXksIHJldmVyYik7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJBNFwiLFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkpDUmV2ZXJiID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsncm9vbVNpemUnXSwgVG9uZS5KQ1JldmVyYik7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICByb29tIHNpemUgY29udHJvbCB2YWx1ZXMgYmV0d2VlbiBbMCwxXVxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJvb21TaXplID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMucm9vbVNpemUsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIHJvb20gc2l6ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNjYWxlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplID0gbmV3IFRvbmUuU2NhbGUoLTAuNzMzLCAwLjE5Nyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgYSBzZXJpZXMgb2YgYWxscGFzcyBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHBhcmFsbGVsIGZlZWRiYWNrIGNvbWIgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycyA9IFtdO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgYWxscGFzcyBmaWx0ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgYWYgPSAwOyBhZiA8IGFsbHBhc3NGaWx0ZXJGcmVxcy5sZW5ndGg7IGFmKyspIHtcblx0ICAgICAgICAgICAgdmFyIGFsbHBhc3MgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgIGFsbHBhc3MudHlwZSA9ICdhbGxwYXNzJztcblx0ICAgICAgICAgICAgYWxscGFzcy5mcmVxdWVuY3kudmFsdWUgPSBhbGxwYXNzRmlsdGVyRnJlcXNbYWZdO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVycy5wdXNoKGFsbHBhc3MpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2FuZCB0aGUgY29tYiBmaWx0ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgY2YgPSAwOyBjZiA8IGNvbWJGaWx0ZXJEZWxheVRpbWVzLmxlbmd0aDsgY2YrKykge1xuXHQgICAgICAgICAgICB2YXIgZmJjZiA9IG5ldyBUb25lLkZlZWRiYWNrQ29tYkZpbHRlcihjb21iRmlsdGVyRGVsYXlUaW1lc1tjZl0sIDAuMSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlUm9vbVNpemUuY29ubmVjdChmYmNmLnJlc29uYW5jZSk7XG5cdCAgICAgICAgICAgIGZiY2YucmVzb25hbmNlLnZhbHVlID0gY29tYkZpbHRlclJlc29uYW5jZXNbY2ZdO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1t0aGlzLl9hbGxwYXNzRmlsdGVycy5sZW5ndGggLSAxXS5jb25uZWN0KGZiY2YpO1xuXHQgICAgICAgICAgICBpZiAoY2YgPCBjb21iRmlsdGVyRGVsYXlUaW1lcy5sZW5ndGggLyAyKSB7XG5cdCAgICAgICAgICAgICAgICBmYmNmLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGZiY2YuY29ubmVjdCh0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnMucHVzaChmYmNmKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jaGFpbiB0aGUgYWxscGFzcyBmaWx0ZXJzIHRvZ2V0aGVyXG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZS5jb25uZWN0KHRoaXMuX3NjYWxlUm9vbVNpemUpO1xuXHQgICAgICAgIFRvbmUuY29ubmVjdFNlcmllcy5hcHBseShUb25lLCB0aGlzLl9hbGxwYXNzRmlsdGVycyk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jb25uZWN0KHRoaXMuX2FsbHBhc3NGaWx0ZXJzWzBdKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNvbm5lY3QodGhpcy5fYWxscGFzc0ZpbHRlcnNbMF0pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsncm9vbVNpemUnXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5KQ1JldmVyYiwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5KQ1JldmVyYi5kZWZhdWx0cyA9IHsgJ3Jvb21TaXplJzogMC41IH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkpDUmV2ZXJifSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkpDUmV2ZXJiLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgYXBmID0gMDsgYXBmIDwgdGhpcy5fYWxscGFzc0ZpbHRlcnMubGVuZ3RoOyBhcGYrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1thcGZdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNbYXBmXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBmYmNmID0gMDsgZmJjZiA8IHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnMubGVuZ3RoOyBmYmNmKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVyc1tmYmNmXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnNbZmJjZl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3Jvb21TaXplJ10pO1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlUm9vbVNpemUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlUm9vbVNpemUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkpDUmV2ZXJiO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTWlkL1NpZGUgcHJvY2Vzc2luZyBzZXBhcmF0ZXMgdGhlIHRoZSAnbWlkJyBzaWduYWxcblx0XHQgKiAgICAgICAgICh3aGljaCBjb21lcyBvdXQgb2YgYm90aCB0aGUgbGVmdCBhbmQgdGhlIHJpZ2h0IGNoYW5uZWwpXG5cdFx0ICogICAgICAgICBhbmQgdGhlICdzaWRlJyAod2hpY2ggb25seSBjb21lcyBvdXQgb2YgdGhlIHRoZSBzaWRlIGNoYW5uZWxzKVxuXHRcdCAqICAgICAgICAgYW5kIGVmZmVjdHMgdGhlbSBzZXBhcmF0ZWx5IGJlZm9yZSBiZWluZyByZWNvbWJpbmVkLlxuXHRcdCAqICAgICAgICAgQXBwbGllcyBhIE1pZC9TaWRlIHNlcGVyYXRpb24gYW5kIHJlY29tYmluYXRpb24uXG5cdFx0ICogICAgICAgICBBbGdvcml0aG0gZm91bmQgaW4gW2t2cmF1ZGlvIGZvcnVtc10oaHR0cDovL3d3dy5rdnJhdWRpby5jb20vZm9ydW0vdmlld3RvcGljLnBocD90PTIxMjU4NykuXG5cdFx0ICogICAgICAgICA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgVGhpcyBpcyBhIGJhc2UtY2xhc3MgZm9yIE1pZC9TaWRlIEVmZmVjdHMuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUVmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQvc2lkZSBzcGxpdFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5NaWRTaWRlU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdCA9IG5ldyBUb25lLk1pZFNpZGVTcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQvc2lkZSBtZXJnZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5NaWRTaWRlTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZSA9IG5ldyBUb25lLk1pZFNpZGVNZXJnZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgc2VuZC4gQ29ubmVjdCB0byBtaWQgcHJvY2Vzc2luZ1xuXHRcdFx0ICogIEB0eXBlIHtUb25lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZFNlbmQgPSB0aGlzLl9taWRTaWRlU3BsaXQubWlkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIHNlbmQuIENvbm5lY3QgdG8gc2lkZSBwcm9jZXNzaW5nXG5cdFx0XHQgKiAgQHR5cGUge1RvbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZVNlbmQgPSB0aGlzLl9taWRTaWRlU3BsaXQuc2lkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHJldHVybiBjb25uZWN0aW9uXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZFJldHVybiA9IHRoaXMuX21pZFNpZGVNZXJnZS5taWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZGUgcmV0dXJuIGNvbm5lY3Rpb25cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZVJldHVybiA9IHRoaXMuX21pZFNpZGVNZXJnZS5zaWRlO1xuXHQgICAgICAgIC8vdGhlIGNvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNvbm5lY3QodGhpcy5fbWlkU2lkZVNwbGl0KTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UuY29ubmVjdCh0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRTaWRlRWZmZWN0LCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1pZFNpZGVFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWRTZW5kID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGVTZW5kID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZFJldHVybiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlUmV0dXJuID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NaWRTaWRlRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QaGFzZXIgaXMgYSBwaGFzZXIgZWZmZWN0LiBQaGFzZXJzIHdvcmsgYnkgY2hhbmdpbmcgdGhlIHBoYXNlXG5cdFx0ICogICAgICAgICBvZiBkaWZmZXJlbnQgZnJlcXVlbmN5IGNvbXBvbmVudHMgb2YgYW4gaW5jb21pbmcgc2lnbmFsLiBSZWFkIG1vcmUgb25cblx0XHQgKiAgICAgICAgIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BoYXNlcl8oZWZmZWN0KSkuXG5cdFx0ICogICAgICAgICBJbnNwaXJhdGlvbiBmb3IgdGhpcyBwaGFzZXIgY29tZXMgZnJvbSBbVHVuYS5qc10oaHR0cHM6Ly9naXRodWIuY29tL0RpbmFobW9lL3R1bmEvKS5cblx0XHQgKlxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSBzcGVlZCBvZiB0aGUgcGhhc2luZy5cblx0XHQgKlx0QHBhcmFtIHtudW1iZXJ9IFtvY3RhdmVzXSBUaGUgb2N0YXZlcyBvZiB0aGUgZWZmZWN0LlxuXHRcdCAqXHRAcGFyYW0ge0ZyZXF1ZW5jeX0gW2Jhc2VGcmVxdWVuY3ldIFRoZSBiYXNlIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVycy5cblx0XHQgKlx0QGV4YW1wbGVcblx0XHQgKiB2YXIgcGhhc2VyID0gbmV3IFRvbmUuUGhhc2VyKHtcblx0XHQgKiBcdFwiZnJlcXVlbmN5XCIgOiAxNSxcblx0XHQgKiBcdFwib2N0YXZlc1wiIDogNSxcblx0XHQgKiBcdFwiYmFzZUZyZXF1ZW5jeVwiIDogMTAwMFxuXHRcdCAqIH0pLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuRk1TeW50aCgpLmNvbm5lY3QocGhhc2VyKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkUzXCIsIFwiMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBoYXNlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL3NldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnb2N0YXZlcycsXG5cdCAgICAgICAgICAgICdiYXNlRnJlcXVlbmN5J1xuXHQgICAgICAgIF0sIFRvbmUuUGhhc2VyKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8gd2hpY2ggY29udHJvbHMgdGhlIGZyZXF1ZW5jeSBvbiB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9MID0gbmV3IFRvbmUuTEZPKG9wdGlvbnMuZnJlcXVlbmN5LCAwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGNvbnRyb2xzIHRoZSBmcmVxdWVuY3kgb24gdGhlIHJpZ2h0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBuZXcgVG9uZS5MRk8ob3B0aW9ucy5mcmVxdWVuY3ksIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IucGhhc2UgPSAxODA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGJhc2UgbW9kdWxhdGlvbiBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvY3RhdmVzIG9mIHRoZSBwaGFzaW5nXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcXVhbGl0eSBmYWN0b3Igb2YgdGhlIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuUSwgVG9uZS5UeXBlLlBvc2l0aXZlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYXJyYXkgb2YgZmlsdGVycyBmb3IgdGhlIGxlZnQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc0wgPSB0aGlzLl9tYWtlRmlsdGVycyhvcHRpb25zLnN0YWdlcywgdGhpcy5fbGZvTCwgdGhpcy5RKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYXJyYXkgb2YgZmlsdGVycyBmb3IgdGhlIGxlZnQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc1IgPSB0aGlzLl9tYWtlRmlsdGVycyhvcHRpb25zLnN0YWdlcywgdGhpcy5fbGZvUiwgdGhpcy5RKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSBmcmVxdWVuY3kgb2YgdGhlIGVmZmVjdFxuXHRcdFx0ICogQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm9MLmZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS52YWx1ZSA9IG9wdGlvbnMuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGVtIHVwXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jb25uZWN0KHRoaXMuX2ZpbHRlcnNMWzBdKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNvbm5lY3QodGhpcy5fZmlsdGVyc1JbMF0pO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNMW29wdGlvbnMuc3RhZ2VzIC0gMV0uY29ubmVjdCh0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNSW29wdGlvbnMuc3RhZ2VzIC0gMV0uY29ubmVjdCh0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIC8vY29udHJvbCB0aGUgZnJlcXVlbmN5IHdpdGggb25lIExGT1xuXHQgICAgICAgIHRoaXMuX2xmb0wuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fbGZvUi5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBvcHRpb25zXG5cdCAgICAgICAgdGhpcy5iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBsZm9cblx0ICAgICAgICB0aGlzLl9sZm9MLnN0YXJ0KCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdGFydCgpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGhhc2VyLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdHNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7b2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaGFzZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDAuNSxcblx0ICAgICAgICAnb2N0YXZlcyc6IDMsXG5cdCAgICAgICAgJ3N0YWdlcyc6IDEwLFxuXHQgICAgICAgICdRJzogMTAsXG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAzNTBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHN0YWdlc1xuXHRcdCAqICBAcmV0dXJucyB7QXJyYXl9IHRoZSBudW1iZXIgb2YgZmlsdGVycyBhbGwgY29ubmVjdGVkIHRvZ2V0aGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBoYXNlci5wcm90b3R5cGUuX21ha2VGaWx0ZXJzID0gZnVuY3Rpb24gKHN0YWdlcywgY29ubmVjdFRvRnJlcSwgUSkge1xuXHQgICAgICAgIHZhciBmaWx0ZXJzID0gbmV3IEFycmF5KHN0YWdlcyk7XG5cdCAgICAgICAgLy9tYWtlIGFsbCB0aGUgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhZ2VzOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGZpbHRlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgZmlsdGVyLnR5cGUgPSAnYWxscGFzcyc7XG5cdCAgICAgICAgICAgIFEuY29ubmVjdChmaWx0ZXIuUSk7XG5cdCAgICAgICAgICAgIGNvbm5lY3RUb0ZyZXEuY29ubmVjdChmaWx0ZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICAgICAgZmlsdGVyc1tpXSA9IGZpbHRlcjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIGZpbHRlcnMpO1xuXHQgICAgICAgIHJldHVybiBmaWx0ZXJzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyB0aGUgcGhhc2UgZ29lcyBhYm92ZVxuXHRcdCAqIHRoZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGhhc2VyI1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QaGFzZXIucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3RhdmVzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3RhdmVzO1xuXHQgICAgICAgICAgICB2YXIgbWF4ID0gdGhpcy5fYmFzZUZyZXF1ZW5jeSAqIE1hdGgucG93KDIsIG9jdGF2ZXMpO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1heCA9IG1heDtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5tYXggPSBtYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdGhlIGJhc2UgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXJzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBoYXNlciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGJhc2VGcmVxdWVuY3lcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBoYXNlci5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IGZyZXE7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wubWluID0gZnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5taW4gPSBmcmVxO1xuXHQgICAgICAgICAgICB0aGlzLm9jdGF2ZXMgPSB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBoYXNlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaGFzZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLlEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzTC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzTFtpXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNMW2ldID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc0wgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fZmlsdGVyc1IubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1Jbal0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzUltqXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGhhc2VyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgSnVzdCBsaWtlIGEgc3RlcmVvIGZlZWRiYWNrIGVmZmVjdCwgYnV0IHRoZSBmZWVkYmFjayBpcyByb3V0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0XG5cdFx0ICogICAgICAgICBhbmQgcmlnaHQgdG8gbGVmdCBpbnN0ZWFkIG9mIG9uIHRoZSBzYW1lIGNoYW5uZWwuXG5cdFx0ICpcblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZmVlZGJhY2snXSwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIGZyb20gdGhlIG91dHB1dFxuXHRcdFx0ICogIGJhY2sgaW50byB0aGUgaW5wdXQgb2YgdGhlIGVmZmVjdCAocm91dGVkXG5cdFx0XHQgKiAgYWNyb3NzIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzKS5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZlZWRiYWNrLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZWZ0IHNpZGUgZmVlYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTFIgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHJpZ2h0IHNpZGUgZmVlYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUkwgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5MLmNoYWluKHRoaXMuX2ZlZWRiYWNrTFIsIHRoaXMuZWZmZWN0U2VuZFIpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuUi5jaGFpbih0aGlzLl9mZWVkYmFja1JMLCB0aGlzLmVmZmVjdFNlbmRMKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmZhbih0aGlzLl9mZWVkYmFja0xSLmdhaW4sIHRoaXMuX2ZlZWRiYWNrUkwuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydmZWVkYmFjayddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdCwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTFIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTFIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUkwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUkwgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBpbmdQb25nRGVsYXkgaXMgYSBmZWVkYmFjayBkZWxheSBlZmZlY3Qgd2hlcmUgdGhlIGVjaG8gaXMgaGVhcmRcblx0XHQgKiAgICAgICAgICBmaXJzdCBpbiBvbmUgY2hhbm5lbCBhbmQgbmV4dCBpbiB0aGUgb3Bwb3NpdGUgY2hhbm5lbC4gSW4gYSBzdGVyZW9cblx0XHQgKiAgICAgICAgICBzeXN0ZW0gdGhlc2UgYXJlIHRoZSByaWdodCBhbmQgbGVmdCBjaGFubmVscy5cblx0XHQgKiAgICAgICAgICBQaW5nUG9uZ0RlbGF5IGluIG1vcmUgc2ltcGxpZmllZCB0ZXJtcyBpcyB0d28gVG9uZS5GZWVkYmFja0RlbGF5c1xuXHRcdCAqICAgICAgICAgIHdpdGggaW5kZXBlbmRlbnQgZGVsYXkgdmFsdWVzLiBFYWNoIGRlbGF5IGlzIHJvdXRlZCB0byBvbmUgY2hhbm5lbFxuXHRcdCAqICAgICAgICAgIChsZWZ0IG9yIHJpZ2h0KSwgYW5kIHRoZSBjaGFubmVsIHRyaWdnZXJlZCBzZWNvbmQgd2lsbCBhbHdheXNcblx0XHQgKiAgICAgICAgICB0cmlnZ2VyIGF0IHRoZSBzYW1lIGludGVydmFsIGFmdGVyIHRoZSBmaXJzdC5cblx0XHQgKlxuXHRcdCAqIFx0QGNvbnN0cnVjdG9yXG5cdFx0ICogXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtkZWxheVRpbWVdIFRoZSBkZWxheVRpbWUgYmV0d2VlbiBjb25zZWN1dGl2ZSBlY2hvcy5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZT19IGZlZWRiYWNrIFRoZSBhbW91bnQgb2YgdGhlIGVmZmVjdGVkIHNpZ25hbCB3aGljaFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZmVkIGJhY2sgdGhyb3VnaCB0aGUgZGVsYXkuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBpbmdQb25nID0gbmV3IFRvbmUuUGluZ1BvbmdEZWxheShcIjRuXCIsIDAuMikudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgZHJ1bSA9IG5ldyBUb25lLkRydW1TeW50aCgpLmNvbm5lY3QocGluZ1BvbmcpO1xuXHRcdCAqIGRydW0udHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjMyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGluZ1BvbmdEZWxheSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnZmVlZGJhY2snXG5cdCAgICAgICAgXSwgVG9uZS5QaW5nUG9uZ0RlbGF5KTtcblx0ICAgICAgICBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlIG9uIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGVmdERlbGF5ID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlIG9uIHRoZSByaWdodCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0RGVsYXkgPSBuZXcgVG9uZS5EZWxheSgwLCBvcHRpb25zLm1heERlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHByZWRlbGF5IG9uIHRoZSByaWdodCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0UHJlRGVsYXkgPSBuZXcgVG9uZS5EZWxheSgwLCBvcHRpb25zLm1heERlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IHRpbWUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZWxheVRpbWUsIFRvbmUuVHlwZS5UaW1lKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNoYWluKHRoaXMuX2xlZnREZWxheSwgdGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNoYWluKHRoaXMuX3JpZ2h0UHJlRGVsYXksIHRoaXMuX3JpZ2h0RGVsYXksIHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUuZmFuKHRoaXMuX2xlZnREZWxheS5kZWxheVRpbWUsIHRoaXMuX3JpZ2h0RGVsYXkuZGVsYXlUaW1lLCB0aGlzLl9yaWdodFByZURlbGF5LmRlbGF5VGltZSk7XG5cdCAgICAgICAgLy9yZWFycmFuZ2VkIHRoZSBmZWVkYmFjayB0byBiZSBhZnRlciB0aGUgcmlnaHRQcmVEZWxheVxuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTFIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTFIuY29ubmVjdCh0aGlzLl9yaWdodERlbGF5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2RlbGF5VGltZSddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBpbmdQb25nRGVsYXksIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBpbmdQb25nRGVsYXkuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDAuMjUsXG5cdCAgICAgICAgJ21heERlbGF5VGltZSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBpbmdQb25nRGVsYXl9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGluZ1BvbmdEZWxheS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xlZnREZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGVmdERlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yaWdodERlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9yaWdodERlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yaWdodFByZURlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9yaWdodFByZURlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2RlbGF5VGltZSddKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBpbmdQb25nRGVsYXk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBpdGNoU2hpZnQgZG9lcyBuZWFyLXJlYWx0aW1lIHBpdGNoIHNoaWZ0aW5nIHRvIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogICAgICAgICBUaGUgZWZmZWN0IGlzIGFjaGlldmVkIGJ5IHNwZWVkaW5nIHVwIG9yIHNsb3dpbmcgZG93biB0aGUgZGVsYXlUaW1lXG5cdFx0ICogICAgICAgICBvZiBhIERlbGF5Tm9kZSB1c2luZyBhIHNhd3Rvb3RoIHdhdmUuXG5cdFx0ICogICAgICAgICBBbGdvcml0aG0gZm91bmQgaW4gW3RoaXMgcGRmXShodHRwOi8vZHNwLWJvb2submFyb2QucnUvc291bmRwcm9jLnBkZikuXG5cdFx0ICogICAgICAgICBBZGRpdGlvbmFsIHJlZmVyZW5jZSBieSBbTWlsbGVyIFB1Y2tldF0oaHR0cDovL21zcC51Y3NkLmVkdS90ZWNobmlxdWVzL3YwLjExL2Jvb2staHRtbC9ub2RlMTE1Lmh0bWwpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkZlZWRiYWNrRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge0ludGVydmFsPX0gcGl0Y2ggVGhlIGludGVydmFsIHRvIHRyYW5zcG9zZSB0aGUgaW5jb21pbmcgc2lnbmFsIGJ5LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaXRjaFNoaWZ0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsncGl0Y2gnXSwgVG9uZS5QaXRjaFNoaWZ0KTtcblx0ICAgICAgICBUb25lLkZlZWRiYWNrRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBpdGNoIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbCgwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBVc2VzIHR3byBEZWxheU5vZGVzIHRvIGNvdmVyIHVwIHRoZSBqdW1wIGluXG5cdFx0XHQgKiAgdGhlIHNhd3Rvb3RoIHdhdmUuXG5cdFx0XHQgKiAgQHR5cGUgIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5QSA9IG5ldyBUb25lLkRlbGF5KDAsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaXJzdCBMRk8uXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvQSA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMC4xLFxuXHQgICAgICAgICAgICAndHlwZSc6ICdzYXd0b290aCdcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2RlbGF5QS5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzZWNvbmQgRGVsYXlOb2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5QiA9IG5ldyBUb25lLkRlbGF5KDAsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaXJzdCBMRk8uXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvQiA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMC4xLFxuXHQgICAgICAgICAgICAndHlwZSc6ICdzYXd0b290aCcsXG5cdCAgICAgICAgICAgICdwaGFzZSc6IDE4MFxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5fZGVsYXlCLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQ3Jvc3NmYWRlIHF1aWNrbHkgYmV0d2VlbiB0aGUgdHdvIGRlbGF5IGxpbmVzXG5cdFx0XHQgKiAgdG8gY292ZXIgdXAgdGhlIGp1bXAgaW4gdGhlIHNhd3Rvb3RoIHdhdmVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ3Jvc3NGYWRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGUgPSBuZXcgVG9uZS5Dcm9zc0ZhZGUoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBMRk8gd2hpY2ggYWx0ZXJuYXRlcyBiZXR3ZWVuIHRoZSB0d29cblx0XHRcdCAqICBkZWxheSBsaW5lcyB0byBjb3ZlciB1cCB0aGUgZGlzcGFyaXR5IGluIHRoZVxuXHRcdFx0ICogIHNhd3Rvb3RoIHdhdmUuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlTEZPID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICAgICAndHlwZSc6ICd0cmlhbmdsZScsXG5cdCAgICAgICAgICAgICdwaGFzZSc6IDkwXG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9jcm9zc0ZhZGUuZmFkZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tEZWxheSA9IG5ldyBUb25lLkRlbGF5KG9wdGlvbnMuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGRlbGF5IG9uIHRoZSBpbnB1dCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IHRoaXMuX2ZlZWRiYWNrRGVsYXkuZGVsYXlUaW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdkZWxheVRpbWUnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkIHRoZSBjdXJyZW50IHBpdGNoXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGl0Y2ggPSBvcHRpb25zLnBpdGNoO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGQgdGhlIGN1cnJlbnQgd2luZG93U2l6ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3dpbmRvd1NpemUgPSBvcHRpb25zLndpbmRvd1NpemU7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSB0d28gZGVsYXkgbGluZXMgdXBcblx0ICAgICAgICB0aGlzLl9kZWxheUEuY29ubmVjdCh0aGlzLl9jcm9zc0ZhZGUuYSk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlCLmNvbm5lY3QodGhpcy5fY3Jvc3NGYWRlLmIpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5LmZhbih0aGlzLl9sZm9BLmZyZXF1ZW5jeSwgdGhpcy5fbGZvQi5mcmVxdWVuY3ksIHRoaXMuX2Nyb3NzRmFkZUxGTy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vcm91dGUgdGhlIGlucHV0XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmZhbih0aGlzLl9kZWxheUEsIHRoaXMuX2RlbGF5Qik7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlLmNoYWluKHRoaXMuX2ZlZWRiYWNrRGVsYXksIHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBMRk9zIGF0IHRoZSBzYW1lIHRpbWVcblx0ICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICB0aGlzLl9sZm9BLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgdGhpcy5fbGZvQi5zdGFydChub3cpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZUxGTy5zdGFydChub3cpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlXG5cdCAgICAgICAgdGhpcy53aW5kb3dTaXplID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBpdGNoU2hpZnQsIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBpdGNoU2hpZnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BpdGNoJzogMCxcblx0ICAgICAgICAnd2luZG93U2l6ZSc6IDAuMSxcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMCxcblx0ICAgICAgICAnZmVlZGJhY2snOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVwaXRjaCB0aGUgaW5jb21pbmcgc2lnbmFsIGJ5IHNvbWUgaW50ZXJ2YWwgKG1lYXN1cmVkXG5cdFx0ICogaW4gc2VtaS10b25lcykuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGl0Y2hTaGlmdCNcblx0XHQgKiBAdHlwZSB7SW50ZXJ2YWx9XG5cdFx0ICogQG5hbWUgcGl0Y2hcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHBpdGNoU2hpZnQucGl0Y2ggPSAtMTI7IC8vZG93biBvbmUgb2N0YXZlXG5cdFx0ICogcGl0Y2hTaGlmdC5waXRjaCA9IDc7IC8vdXAgYSBmaWZ0aFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGl0Y2hTaGlmdC5wcm90b3R5cGUsICdwaXRjaCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BpdGNoO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGl0Y2ggPSBpbnRlcnZhbDtcblx0ICAgICAgICAgICAgdmFyIGZhY3RvciA9IDA7XG5cdCAgICAgICAgICAgIGlmIChpbnRlcnZhbCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0EubWluID0gMDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0EubWF4ID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0IubWluID0gMDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0IubWF4ID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICAgICAgICAgIGZhY3RvciA9IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGludGVydmFsIC0gMSkgKyAxO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQS5taW4gPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQS5tYXggPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQi5taW4gPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQi5tYXggPSAwO1xuXHQgICAgICAgICAgICAgICAgZmFjdG9yID0gVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oaW50ZXJ2YWwpIC0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9mcmVxdWVuY3kudmFsdWUgPSBmYWN0b3IgKiAoMS4yIC8gdGhpcy5fd2luZG93U2l6ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgd2luZG93IHNpemUgY29ycmVzcG9uZHMgcm91Z2hseSB0byB0aGUgc2FtcGxlIGxlbmd0aCBpbiBhIGxvb3Bpbmcgc2FtcGxlci5cblx0XHQgKiBTbWFsbGVyIHZhbHVlcyBhcmUgZGVzaXJhYmxlIGZvciBhIGxlc3Mgbm90aWNlYWJsZSBkZWxheSB0aW1lIG9mIHRoZSBwaXRjaCBzaGlmdGVkXG5cdFx0ICogc2lnbmFsLCBidXQgbGFyZ2VyIHZhbHVlcyB3aWxsIHJlc3VsdCBpbiBzbW9vdGhlciBwaXRjaCBzaGlmdGluZyBmb3IgbGFyZ2VyIGludGVydmFscy5cblx0XHQgKiBBIG5vbWluYWwgcmFuZ2Ugb2YgMC4wMyB0byAwLjEgaXMgcmVjb21tZW5kZWQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGl0Y2hTaGlmdCNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSB3aW5kb3dTaXplXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBwaXRjaFNoaWZ0LndpbmRvd1NpemUgPSAwLjE7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QaXRjaFNoaWZ0LnByb3RvdHlwZSwgJ3dpbmRvd1NpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl93aW5kb3dTaXplID0gdGhpcy50b1NlY29uZHMoc2l6ZSk7XG5cdCAgICAgICAgICAgIHRoaXMucGl0Y2ggPSB0aGlzLl9waXRjaDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGl0Y2hTaGlmdH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGl0Y2hTaGlmdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5QS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlBID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kZWxheUIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5QiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvQS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvQSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvQi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvQiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZUxGTy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlTEZPID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZGVsYXlUaW1lJyk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tEZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tEZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBpdGNoU2hpZnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBCdWZmZXJTb3VyY2VOb2RlLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvQnVmZmVyfFRvbmUuQnVmZmVyfSAgYnVmZmVyICAgVGhlIGJ1ZmZlciB0byBwbGF5XG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgb25sb2FkICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIGlzIGRvbmUgcGxheWluZy5cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2J1ZmZlcicsXG5cdCAgICAgICAgICAgICdvbmxvYWQnXG5cdCAgICAgICAgXSwgVG9uZS5CdWZmZXJTb3VyY2UpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBhZnRlciB0aGVcblx0XHRcdCAqICBidWZmZXIgc291cmNlIGlzIGRvbmUgcGxheWluZy5cblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vbmVuZGVkID0gb3B0aW9ucy5vbmVuZGVkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0aW1lIHRoYXQgdGhlIGJ1ZmZlciB3YXMgc3RhcnRlZC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gLTE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW4gYWRkaXRpb25hbCBmbGFnIGlmIHRoZSBhY3R1YWwgQnVmZmVyU291cmNlTm9kZVxuXHRcdFx0ICogIGhhcyBiZWVuIHN0YXJ0ZWQuIGIvYyBzdG9wcGluZyBhbiB1bnN0YXJ0ZWQgYnVmZmVyXG5cdFx0XHQgKiAgd2lsbCB0aHJvdyBpdCBpbnRvIGFuIGludmFsaWQgc3RhdGVcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBGbGFnIGlmIHRoZSBzb3VyY2UgaGFzIGFscmVhZHkgYmVlbiBzdG9wcGVkXG5cdFx0XHQgKiAgQHR5cGUgIHtCb29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zb3VyY2VTdG9wcGVkID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpbWUgdGhhdCB0aGUgYnVmZmVyIGlzIHNjaGVkdWxlZCB0byBzdG9wLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIG5vZGUgd2hpY2ggZW52ZWxvcGVzIHRoZSBCdWZmZXJTb3VyY2Vcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYnVmZmVyIHNvdXJjZVxuXHRcdFx0ICogIEB0eXBlICB7QXVkaW9CdWZmZXJTb3VyY2VOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zb3VyY2UgPSB0aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmNvbm5lY3QodGhpcy5fZ2Fpbk5vZGUpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5vbmVuZGVkID0gdGhpcy5fb25lbmRlZC5iaW5kKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHByaXZhdGUgYnVmZmVyIGluc3RhbmNlXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5CdWZmZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKG9wdGlvbnMuYnVmZmVyLCBvcHRpb25zLm9ubG9hZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBsYXliYWNrUmF0ZSBvZiB0aGUgYnVmZmVyXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fc291cmNlLnBsYXliYWNrUmF0ZSwgVG9uZS5UeXBlLlBvc2l0aXZlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZUluIHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZUluID0gb3B0aW9ucy5mYWRlSW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZhZGVPdXQgdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlT3V0ID0gb3B0aW9ucy5mYWRlT3V0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGN1cnZlIGFwcGxpZWQgdG8gdGhlIGZhZGVzLCBlaXRoZXIgXCJsaW5lYXJcIiBvciBcImV4cG9uZW50aWFsXCJcblx0XHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmN1cnZlID0gb3B0aW9ucy5jdXJ2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgdGhhdCB0aGUgYnVmZmVyIHJhbXBzIHRvXG5cdFx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSAxO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG9uZW5kZWQgdGltZW91dFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmVuZGVkVGltZW91dCA9IC0xO1xuXHQgICAgICAgIC8vc2V0IHNvbWUgdmFsdWVzIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMubG9vcCA9IG9wdGlvbnMubG9vcDtcblx0ICAgICAgICB0aGlzLmxvb3BTdGFydCA9IG9wdGlvbnMubG9vcFN0YXJ0O1xuXHQgICAgICAgIHRoaXMubG9vcEVuZCA9IG9wdGlvbnMubG9vcEVuZDtcblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZS52YWx1ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQnVmZmVyU291cmNlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmVuZGVkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAnbG9vcEVuZCc6IDAsXG5cdCAgICAgICAgJ2ZhZGVJbic6IDAsXG5cdCAgICAgICAgJ2ZhZGVPdXQnOiAwLFxuXHQgICAgICAgICdjdXJ2ZSc6ICdsaW5lYXInLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0YXRlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgcGxheWJhY2sgc3RhdGUgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFRoZSB0aW1lIHRvIHRlc3QgdGhlIHN0YXRlIGF0XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlN0YXRlfSAgVGhlIHBsYXliYWNrIHN0YXRlLiBcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5nZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xICYmIHRpbWUgPj0gdGhpcy5fc3RhcnRUaW1lICYmICF0aGlzLl9zb3VyY2VTdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0YXJ0ZWQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBidWZmZXJcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3N0YXJ0VGltZT1ub3ddIFdoZW4gdGhlIHBsYXllciBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtvZmZzZXQ9MF0gVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgc2FtcGxlIHNob3VsZCBwbGF5LiBJZiBubyBkdXJhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnaXZlbiwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmdWxsIGxlbmd0aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2FtcGxlIChtaW51cyBhbnkgb2Zmc2V0KVxuXHRcdCAqICBAcGFyYW0gIHtHYWlufSAgW2dhaW49MV0gIFRoZSBnYWluIHRvIHBsYXkgdGhlIGJ1ZmZlciBiYWNrIGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIGZhZGVJblRpbWUgIFRoZSBvcHRpb25hbCBmYWRlSW4gcmFtcCB0aW1lLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0LCBkdXJhdGlvbiwgZ2FpbiwgZmFkZUluVGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJTb3VyY2UgY2FuIG9ubHkgYmUgc3RhcnRlZCBvbmNlLicpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIXRoaXMuYnVmZmVyLmxvYWRlZCkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyU291cmNlOiBidWZmZXIgaXMgZWl0aGVyIG5vdCBzZXQgb3Igbm90IGxvYWRlZC4nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vaWYgaXQncyBhIGxvb3AgdGhlIGRlZmF1bHQgb2Zmc2V0IGlzIHRoZSBsb29wc3RhcnQgcG9pbnRcblx0ICAgICAgICBpZiAodGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIHRoaXMubG9vcFN0YXJ0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL290aGVyd2lzZSB0aGUgZGVmYXVsdCBvZmZzZXQgaXMgMFxuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICBnYWluID0gVG9uZS5kZWZhdWx0QXJnKGdhaW4sIDEpO1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSBnYWluO1xuXHQgICAgICAgIGZhZGVJblRpbWUgPSB0aGlzLnRvU2Vjb25kcyhUb25lLmRlZmF1bHRBcmcoZmFkZUluVGltZSwgdGhpcy5mYWRlSW4pKTtcblx0ICAgICAgICB0aGlzLmZhZGVJbiA9IGZhZGVJblRpbWU7XG5cdCAgICAgICAgaWYgKGZhZGVJblRpbWUgPiAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmN1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh0aGlzLl9nYWluLCB0aW1lICsgZmFkZUluVGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSh0aGlzLl9nYWluLCB0aW1lLCBmYWRlSW5UaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoZ2FpbiwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWU7XG5cdCAgICAgICAgdmFyIGNvbXB1dGVkRHVyID0gdGhpcy50b1NlY29uZHMoVG9uZS5kZWZhdWx0QXJnKGR1cmF0aW9uLCB0aGlzLmJ1ZmZlci5kdXJhdGlvbiAtIG9mZnNldCAlIHRoaXMuYnVmZmVyLmR1cmF0aW9uKSk7XG5cdCAgICAgICAgY29tcHV0ZWREdXIgPSBNYXRoLm1heChjb21wdXRlZER1ciwgMCk7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGR1cmF0aW9uKSkge1xuXHQgICAgICAgICAgICAvL2NsaXAgdGhlIGR1cmF0aW9uIHdoZW4gbm90IGxvb3Bpbmdcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgICAgIGNvbXB1dGVkRHVyID0gTWF0aC5taW4oY29tcHV0ZWREdXIsIHRoaXMuYnVmZmVyLmR1cmF0aW9uIC0gb2Zmc2V0ICUgdGhpcy5idWZmZXIuZHVyYXRpb24pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcCh0aW1lICsgY29tcHV0ZWREdXIsIHRoaXMuZmFkZU91dCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc3RhcnQgdGhlIGJ1ZmZlciBzb3VyY2Vcblx0ICAgICAgICBpZiAodGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgIC8vbW9kaWZ5IHRoZSBvZmZzZXQgaWYgaXQncyBncmVhdGVyIHRoYW4gdGhlIGxvb3AgdGltZVxuXHQgICAgICAgICAgICB2YXIgbG9vcEVuZCA9IHRoaXMubG9vcEVuZCB8fCB0aGlzLmJ1ZmZlci5kdXJhdGlvbjtcblx0ICAgICAgICAgICAgdmFyIGxvb3BTdGFydCA9IHRoaXMubG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICB2YXIgbG9vcER1cmF0aW9uID0gbG9vcEVuZCAtIGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgLy9tb3ZlIHRoZSBvZmZzZXQgYmFja1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0ID49IGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgICAgIG9mZnNldCA9IChvZmZzZXQgLSBsb29wU3RhcnQpICUgbG9vcER1cmF0aW9uICsgbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5idWZmZXIgPSB0aGlzLmJ1ZmZlci5nZXQoKTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UubG9vcEVuZCA9IHRoaXMubG9vcEVuZCB8fCB0aGlzLmJ1ZmZlci5kdXJhdGlvbjtcblx0ICAgICAgICBpZiAob2Zmc2V0IDwgdGhpcy5idWZmZXIuZHVyYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5zdGFydCh0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgYnVmZmVyLiBPcHRpb25hbGx5IGFkZCBhIHJhbXAgdGltZSB0byBmYWRlIHRoZVxuXHRcdCAqICBidWZmZXIgb3V0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIHRpbWUgICAgICAgICBUaGUgdGltZSB0aGUgYnVmZmVyIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIGZhZGVPdXRUaW1lICBIb3cgbG9uZyB0aGUgZ2FpbiBzaG91bGQgZmFkZSBvdXQgZm9yXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlclNvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUsIGZhZGVPdXRUaW1lKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLmJ1ZmZlci5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkJ1ZmZlclNvdXJjZTogYnVmZmVyIGlzIGVpdGhlciBub3Qgc2V0IG9yIG5vdCBsb2FkZWQuJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLl9zb3VyY2VTdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vaWYgdGhlIGV2ZW50IGhhcyBhbHJlYWR5IGJlZW4gc2NoZWR1bGVkLCBjbGVhciBpdFxuXHQgICAgICAgIGlmICh0aGlzLl9zdG9wVGltZSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhpcy5jYW5jZWxTdG9wKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc3RvcCBpZiBpdCdzIHNjaGVkdWxlIGJlZm9yZSB0aGUgc3RhcnQgdGltZVxuXHQgICAgICAgIGlmICh0aW1lIDw9IHRoaXMuX3N0YXJ0VGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi52YWx1ZSA9IDA7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gTWF0aC5tYXgodGhpcy5fc3RhcnRUaW1lICsgdGhpcy5mYWRlSW4gKyB0aGlzLnNhbXBsZVRpbWUsIHRpbWUpO1xuXHQgICAgICAgIC8vY2FuY2VsIHRoZSBwcmV2aW91cyBjdXJ2ZVxuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gdGltZTtcblx0ICAgICAgICAvL3RoZSBmYWRlT3V0IHRpbWVcblx0ICAgICAgICBmYWRlT3V0VGltZSA9IHRoaXMudG9TZWNvbmRzKFRvbmUuZGVmYXVsdEFyZyhmYWRlT3V0VGltZSwgdGhpcy5mYWRlT3V0KSk7XG5cdCAgICAgICAgdmFyIGhlbGREdXJhdGlvbiA9IHRpbWUgLSB0aGlzLl9zdGFydFRpbWUgLSB0aGlzLmZhZGVJbiAtIHRoaXMuc2FtcGxlVGltZTtcblx0ICAgICAgICBpZiAoIXRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAvL21ha2Ugc3VyZSB0aGUgZmFkZSBkb2VzIG5vdCBnbyBiZXlvbmQgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyXG5cdCAgICAgICAgICAgIGhlbGREdXJhdGlvbiA9IE1hdGgubWluKGhlbGREdXJhdGlvbiwgdGhpcy5idWZmZXIuZHVyYXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmYWRlT3V0VGltZSA9IE1hdGgubWluKGhlbGREdXJhdGlvbiwgZmFkZU91dFRpbWUpO1xuXHQgICAgICAgIHZhciBzdGFydEZhZGUgPSB0aW1lIC0gZmFkZU91dFRpbWU7XG5cdCAgICAgICAgaWYgKGZhZGVPdXRUaW1lID4gdGhpcy5zYW1wbGVUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUodGhpcy5fZ2Fpbiwgc3RhcnRGYWRlKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuY3VydmUgPT09ICdsaW5lYXInKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUoMCwgc3RhcnRGYWRlLCBmYWRlT3V0VGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX29uZW5kZWRUaW1lb3V0KTtcblx0ICAgICAgICB0aGlzLl9vbmVuZGVkVGltZW91dCA9IFRvbmUuY29udGV4dC5zZXRUaW1lb3V0KHRoaXMuX29uZW5kZWQuYmluZCh0aGlzKSwgdGhpcy5fc3RvcFRpbWUgLSB0aGlzLm5vdygpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGEgc2NoZWR1bGVkIHN0b3AgZXZlbnRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLmNhbmNlbFN0b3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEgJiYgIXRoaXMuX3NvdXJjZVN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgLy9jYW5jZWwgdGhlIHN0b3AgZW52ZWxvcGVcblx0ICAgICAgICAgICAgdmFyIGZhZGVJblRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLmZhZGVJbik7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRoaXMuX3N0YXJ0VGltZSArIGZhZGVJblRpbWUgKyB0aGlzLnNhbXBsZVRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDEsIE1hdGgubWF4KHRoaXMubm93KCksIHRoaXMuX3N0YXJ0VGltZSArIGZhZGVJblRpbWUgKyB0aGlzLnNhbXBsZVRpbWUpKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl9vbmVuZGVkVGltZW91dCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gLTE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBjYWxsYmFjayB3aGVuIHRoZSBidWZmZXIgaXMgZW5kZWQuXG5cdFx0ICogIEludm9rZXMgYG9uZW5kZWRgIGFuZCBkaXNwb3NlcyB0aGUgbm9kZS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5fb25lbmRlZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZVN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlU3RvcHBlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIC8vYWxsb3cgYWRkaXRpb25hbCB0aW1lIGZvciB0aGUgZXhwb25lbnRpYWwgY3VydmUgdG8gZnVsbHkgZGVjYXlcblx0ICAgICAgICAgICAgdmFyIGFkZGl0aW9uYWxUYWlsID0gdGhpcy5jdXJ2ZSA9PT0gJ2V4cG9uZW50aWFsJyA/IHRoaXMuZmFkZU91dCAqIDIgOiAwO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlU3RhcnRlZCAmJiB0aGlzLl9zdG9wVGltZSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5zdG9wKHRoaXMuX3N0b3BUaW1lICsgYWRkaXRpb25hbFRhaWwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMub25lbmRlZCh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgbG9vcCBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIHN0YXJ0IGF0IHRoaXMgcG9zaXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb29wU3RhcnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wU3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLmxvb3BTdGFydCA9IHRoaXMudG9TZWNvbmRzKGxvb3BTdGFydCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgZW5kIGF0IHRoaXMgcG9zaXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLmxvb3BFbmQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wRW5kKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wRW5kID0gdGhpcy50b1NlY29uZHMobG9vcEVuZCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXVkaW8gYnVmZmVyIGJlbG9uZ2luZyB0byB0aGUgcGxheWVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VG9uZS5CdWZmZXJ9XG5cdFx0ICogQG5hbWUgYnVmZmVyXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnYnVmZmVyJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlci5zZXQoYnVmZmVyKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXIgc2hvdWxkIGxvb3Agb25jZSBpdCdzIG92ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvb3Bcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdsb29wJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLmxvb3A7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgdGhpcy5jYW5jZWxTdG9wKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlclNvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5vbmVuZGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zb3VyY2Uub25lbmRlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IC0xO1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlID0gbnVsbDtcblx0ICAgICAgICBUb25lLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX29uZW5kZWRUaW1lb3V0KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CdWZmZXJTb3VyY2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Ob2lzZSBpcyBhIG5vaXNlIGdlbmVyYXRvci4gSXQgdXNlcyBsb29wZWQgbm9pc2UgYnVmZmVycyB0byBzYXZlIG9uIHBlcmZvcm1hbmNlLlxuXHRcdCAqICAgICAgICAgIFRvbmUuTm9pc2Ugc3VwcG9ydHMgdGhlIG5vaXNlIHR5cGVzOiBcInBpbmtcIiwgXCJ3aGl0ZVwiLCBhbmQgXCJicm93blwiLiBSZWFkIG1vcmUgYWJvdXRcblx0XHQgKiAgICAgICAgICBjb2xvcnMgb2Ygbm9pc2Ugb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29sb3JzX29mX25vaXNlKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gdHlwZSB0aGUgbm9pc2UgdHlwZSAod2hpdGV8cGlua3xicm93bilcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2luaXRpYWxpemUgdGhlIG5vaXNlIGFuZCBzdGFydFxuXHRcdCAqIHZhciBub2lzZSA9IG5ldyBUb25lLk5vaXNlKFwicGlua1wiKS5zdGFydCgpO1xuXHRcdCAqXG5cdFx0ICogLy9tYWtlIGFuIGF1dG9maWx0ZXIgdG8gc2hhcGUgdGhlIG5vaXNlXG5cdFx0ICogdmFyIGF1dG9GaWx0ZXIgPSBuZXcgVG9uZS5BdXRvRmlsdGVyKHtcblx0XHQgKiBcdFwiZnJlcXVlbmN5XCIgOiBcIjhtXCIsXG5cdFx0ICogXHRcIm1pblwiIDogODAwLFxuXHRcdCAqIFx0XCJtYXhcIiA6IDE1MDAwXG5cdFx0ICogfSkuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdFx0ICpcblx0XHQgKiAvL2Nvbm5lY3QgdGhlIG5vaXNlXG5cdFx0ICogbm9pc2UuY29ubmVjdChhdXRvRmlsdGVyKTtcblx0XHQgKiAvL3N0YXJ0IHRoZSBhdXRvZmlsdGVyIExGT1xuXHRcdCAqIGF1dG9GaWx0ZXIuc3RhcnQoKVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3R5cGUnXSwgVG9uZS5Ob2lzZSk7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb0J1ZmZlclNvdXJjZU5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBidWZmZXJcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb0J1ZmZlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIG5vaXNlLiBBZmZlY3RzXG5cdFx0XHQgKiAgdGhlIFwiZnJlcXVlbmN5XCIgb2YgdGhlIG5vaXNlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5vaXNlLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogJ3doaXRlJyxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBub2lzZS4gQ2FuIGJlIFwid2hpdGVcIiwgXCJicm93blwiLCBvciBcInBpbmtcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Ob2lzZSNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG5vaXNlLnR5cGUgPSBcIndoaXRlXCI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Ob2lzZS5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgIT09IHR5cGUpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0eXBlIGluIF9ub2lzZUJ1ZmZlcnMpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgICAgICAgICAvL2lmIGl0J3MgcGxheWluZywgc3RvcCBhbmQgcmVzdGFydCBpdFxuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3Aobm93KTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQobm93KTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RvbmUuTm9pc2U6IGludmFsaWQgdHlwZTogJyArIHR5cGUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIG5vaXNlLiBBZmZlY3RzXG5cdFx0ICogIHRoZSBcImZyZXF1ZW5jeVwiIG9mIHRoZSBub2lzZS5cblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAc2lnbmFsXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Ob2lzZS5wcm90b3R5cGUsICdwbGF5YmFja1JhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2UpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5wbGF5YmFja1JhdGUudmFsdWUgPSByYXRlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgaW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciBidWZmZXIgPSBfbm9pc2VCdWZmZXJzW3RoaXMuX3R5cGVdO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IG5ldyBUb25lLkJ1ZmZlclNvdXJjZShidWZmZXIpLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UucGxheWJhY2tSYXRlLnZhbHVlID0gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5zdGFydCh0aGlzLnRvU2Vjb25kcyh0aW1lKSwgTWF0aC5yYW5kb20oKSAqIChidWZmZXIuZHVyYXRpb24gLSAwLjAwMSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBpbnRlcm5hbCBzdG9wIG1ldGhvZFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zb3VyY2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLnN0b3AodGhpcy50b1NlY29uZHModGltZSkpO1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXN0YXJ0cyB0aGUgbm9pc2UuXG5cdFx0ICogQHBhcmFtICB7W3R5cGVdfSB0aW1lIFtkZXNjcmlwdGlvbl1cblx0XHQgKiBAcmV0dXJuIHtbdHlwZV19ICAgICAgW2Rlc2NyaXB0aW9uXVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9UT0RPIGNvdWxkIGJlIG9wdGltaXplZCBieSBjYW5jZWxsaW5nIHRoZSBidWZmZXIgc291cmNlICdzdG9wJ1xuXHQgICAgICAgIC8vc3RvcCBhbmQgcmVzdGFydFxuXHQgICAgICAgIHRoaXMuX3N0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zb3VyY2UgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIFRIRSBCVUZGRVJTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vTm9pc2UgYnVmZmVyIHN0YXRzXG5cdCAgICB2YXIgYnVmZmVyTGVuZ3RoID0gNDQxMDAgKiA1O1xuXHQgICAgdmFyIGNoYW5uZWxzID0gMjtcblx0ICAgIC8qKlxuXHRcdCAqXHRUaGUgbm9pc2UgYXJyYXlzLiBHZW5lcmF0ZWQgb24gaW5pdGlhbGl6YXRpb24uXG5cdFx0ICogIGJvcnJvd2VkIGhlYXZpbHkgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vemFjaGFyeWRlbnRvbi9ub2lzZS5qc1xuXHRcdCAqICAoYykgMjAxMyBaYWNoIERlbnRvbiAoTUlUKVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBfbm9pc2VBcnJheXMgPSB7XG5cdCAgICAgICAgJ3BpbmsnOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY2hhbm5lbE51bSA9IDA7IGNoYW5uZWxOdW0gPCBjaGFubmVsczsgY2hhbm5lbE51bSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyTGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlcltjaGFubmVsTnVtXSA9IGNoYW5uZWw7XG5cdCAgICAgICAgICAgICAgICB2YXIgYjAsIGIxLCBiMiwgYjMsIGI0LCBiNSwgYjY7XG5cdCAgICAgICAgICAgICAgICBiMCA9IGIxID0gYjIgPSBiMyA9IGI0ID0gYjUgPSBiNiA9IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHdoaXRlID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxO1xuXHQgICAgICAgICAgICAgICAgICAgIGIwID0gMC45OTg4NiAqIGIwICsgd2hpdGUgKiAwLjA1NTUxNzk7XG5cdCAgICAgICAgICAgICAgICAgICAgYjEgPSAwLjk5MzMyICogYjEgKyB3aGl0ZSAqIDAuMDc1MDc1OTtcblx0ICAgICAgICAgICAgICAgICAgICBiMiA9IDAuOTY5ICogYjIgKyB3aGl0ZSAqIDAuMTUzODUyO1xuXHQgICAgICAgICAgICAgICAgICAgIGIzID0gMC44NjY1ICogYjMgKyB3aGl0ZSAqIDAuMzEwNDg1Njtcblx0ICAgICAgICAgICAgICAgICAgICBiNCA9IDAuNTUgKiBiNCArIHdoaXRlICogMC41MzI5NTIyO1xuXHQgICAgICAgICAgICAgICAgICAgIGI1ID0gLTAuNzYxNiAqIGI1IC0gd2hpdGUgKiAwLjAxNjg5ODtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2ldID0gYjAgKyBiMSArIGIyICsgYjMgKyBiNCArIGI1ICsgYjYgKyB3aGl0ZSAqIDAuNTM2Mjtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2ldICo9IDAuMTE7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gKHJvdWdobHkpIGNvbXBlbnNhdGUgZm9yIGdhaW5cblx0ICAgICAgICAgICAgICAgICAgICBiNiA9IHdoaXRlICogMC4xMTU5MjY7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcblx0ICAgICAgICB9KCksXG5cdCAgICAgICAgJ2Jyb3duJzogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWxOdW0gPSAwOyBjaGFubmVsTnVtIDwgY2hhbm5lbHM7IGNoYW5uZWxOdW0rKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJbY2hhbm5lbE51bV0gPSBjaGFubmVsO1xuXHQgICAgICAgICAgICAgICAgdmFyIGxhc3RPdXQgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB3aGl0ZSA9IE1hdGgucmFuZG9tKCkgKiAyIC0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2ldID0gKGxhc3RPdXQgKyAwLjAyICogd2hpdGUpIC8gMS4wMjtcblx0ICAgICAgICAgICAgICAgICAgICBsYXN0T3V0ID0gY2hhbm5lbFtpXTtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2ldICo9IDMuNTsgICAgLy8gKHJvdWdobHkpIGNvbXBlbnNhdGUgZm9yIGdhaW5cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuXHQgICAgICAgIH0oKSxcblx0ICAgICAgICAnd2hpdGUnOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY2hhbm5lbE51bSA9IDA7IGNoYW5uZWxOdW0gPCBjaGFubmVsczsgY2hhbm5lbE51bSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyTGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlcltjaGFubmVsTnVtXSA9IGNoYW5uZWw7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSA9IE1hdGgucmFuZG9tKCkgKiAyIC0gMTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuXHQgICAgICAgIH0oKVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqXHRzdGF0aWMgbm9pc2UgYnVmZmVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHQgKi9cblx0ICAgIHZhciBfbm9pc2VCdWZmZXJzID0ge307XG5cdCAgICAvL2NyZWF0ZSB0aGUgVG9uZS5CdWZmZXJzXG5cdCAgICBmdW5jdGlvbiBjcmVhdGVCdWZmZXJzKCkge1xuXHQgICAgICAgIGZvciAodmFyIHR5cGUgaW4gX25vaXNlQXJyYXlzKSB7XG5cdCAgICAgICAgICAgIF9ub2lzZUJ1ZmZlcnNbdHlwZV0gPSBuZXcgVG9uZS5CdWZmZXIoKS5mcm9tQXJyYXkoX25vaXNlQXJyYXlzW3R5cGVdKTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdCAgICAvL2NyZWF0ZSB0aGUgbm9pc2UgYnVmZmVyc1xuXHQgICAgVG9uZS5nZXRDb250ZXh0KGNyZWF0ZUJ1ZmZlcnMpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgY3JlYXRlQnVmZmVycyk7XG5cdCAgICByZXR1cm4gVG9uZS5Ob2lzZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFNpbXBsZSBjb252b2x1dGlvbiBjcmVhdGVkIHdpdGggZGVjYXlpbmcgbm9pc2UuXG5cdFx0ICogIFx0XHRHZW5lcmF0ZXMgYW4gSW1wdWxzZSBSZXNwb25zZSBCdWZmZXJcblx0XHQgKiBcdFx0XHR3aXRoIFRvbmUuT2ZmbGluZSB0aGVuIGZlZWRzIHRoZSBJUiBpbnRvIENvbnZvbHZlck5vZGUuXG5cdFx0ICogXHRcdFx0Tm90ZTogdGhlIFJldmVyYiB3aWxsIG5vdCBtYWtlIGFueSBzb3VuZCB1bnRpbCBbZ2VuZXJhdGVdKCNnZW5lcmF0ZSlcblx0XHQgKiBcdFx0XHRoYXMgYmVlbiBpbnZva2VkIGFuZCByZXNvbHZlZC5cblx0XHQgKlxuXHRcdCAqIFx0XHRcdEluc3BpcmF0aW9uIGZyb20gW1JldmVyYkdlbl0oaHR0cHM6Ly9naXRodWIuY29tL2FkZWxlc3BpbmFzc2UvcmV2ZXJiR2VuKS5cblx0XHQgKiBcdFx0XHRDb3B5cmlnaHQgKGMpIDIwMTQgQWxhbiBkZUxlc3BpbmFzc2UgQXBhY2hlIDIuMCBMaWNlbnNlLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkNvbnZvbHZlcn1cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gZGVjYXkgVGhlIGFtb3VudCBvZiB0aW1lIGl0IHdpbGwgcmV2ZXJiZXJhdGUgZm9yLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydkZWNheSddLCBUb25lLlJldmVyYik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBDb252b2x2ZXIgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtDb252b2x2ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ29udm9sdmVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZHVyYXRpb24gb2YgdGhlIHJldmVyYlxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlY2F5ID0gb3B0aW9ucy5kZWNheTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbW91bnQgb2YgdGltZSBiZWZvcmUgdGhlIHJldmVyYiBpcyBmdWxseVxuXHRcdFx0ICogcmFtcGVkIGluLlxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnByZURlbGF5ID0gb3B0aW9ucy5wcmVEZWxheTtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fY29udm9sdmVyKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlJldmVyYiwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHRzXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKiBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVjYXknOiAxLjUsXG5cdCAgICAgICAgJ3ByZURlbGF5JzogMC4wMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdlbmVyYXRlIHRoZSBJbXB1bHNlIFJlc3BvbnNlLiBSZXR1cm5zIGEgcHJvbWlzZSB3aGlsZSB0aGUgSVIgaXMgYmVpbmdcblx0XHQgKiBnZW5lcmF0ZWQuXG5cdFx0ICogQHJldHVybiB7UHJvbWlzZTxUb25lLlJldmVyYj59IFByb21pc2Ugd2hpY2ggcmV0dXJucyB0aGlzIG9iamVjdC5cblx0XHQgKi9cblx0ICAgIFRvbmUuUmV2ZXJiLnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5PZmZsaW5lKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy9jcmVhdGUgYSBub2lzZSBidXJzdCB3aGljaCBkZWNheXMgb3ZlciB0aGUgZHVyYXRpb25cblx0ICAgICAgICAgICAgdmFyIG5vaXNlTCA9IG5ldyBUb25lLk5vaXNlKCk7XG5cdCAgICAgICAgICAgIHZhciBub2lzZVIgPSBuZXcgVG9uZS5Ob2lzZSgpO1xuXHQgICAgICAgICAgICB2YXIgbWVyZ2UgPSBuZXcgVG9uZS5NZXJnZSgpO1xuXHQgICAgICAgICAgICBub2lzZUwuY29ubmVjdChtZXJnZS5sZWZ0KTtcblx0ICAgICAgICAgICAgbm9pc2VSLmNvbm5lY3QobWVyZ2UucmlnaHQpO1xuXHQgICAgICAgICAgICB2YXIgZ2Fpbk5vZGUgPSBuZXcgVG9uZS5HYWluKCkudG9NYXN0ZXIoKTtcblx0ICAgICAgICAgICAgbWVyZ2UuY29ubmVjdChnYWluTm9kZSk7XG5cdCAgICAgICAgICAgIG5vaXNlTC5zdGFydCgwKTtcblx0ICAgICAgICAgICAgbm9pc2VSLnN0YXJ0KDApO1xuXHQgICAgICAgICAgICAvL3Nob3J0IGZhZGUgaW5cblx0ICAgICAgICAgICAgZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCAwKTtcblx0ICAgICAgICAgICAgZ2Fpbk5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgxLCB0aGlzLnByZURlbGF5KTtcblx0ICAgICAgICAgICAgLy9kZWNheVxuXHQgICAgICAgICAgICBnYWluTm9kZS5nYWluLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSgwLCB0aGlzLnByZURlbGF5LCB0aGlzLmRlY2F5IC0gdGhpcy5wcmVEZWxheSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpLCB0aGlzLmRlY2F5KS50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY29udm9sdmVyLmJ1ZmZlciA9IGJ1ZmZlci5nZXQoKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlJldmVyYn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUmV2ZXJiLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlJldmVyYjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEJhc2UgY2xhc3MgZm9yIHN0ZXJlbyBmZWVkYmFjayBlZmZlY3RzIHdoZXJlIHRoZSBlZmZlY3RSZXR1cm5cblx0XHQgKiAgICAgICAgIGlzIGZlZCBiYWNrIGludG8gdGhlIHNhbWUgY2hhbm5lbC5cblx0XHQgKlxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9GZWVkYmFja0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZlZWRiYWNrJ10sIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29udHJvbHMgdGhlIGFtb3VudCBvZiBmZWVkYmFja1xuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZmVlZGJhY2ssIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxlZnQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSByaWdodCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1IgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5MLmNoYWluKHRoaXMuX2ZlZWRiYWNrTCwgdGhpcy5lZmZlY3RTZW5kTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SLmNoYWluKHRoaXMuX2ZlZWRiYWNrUiwgdGhpcy5lZmZlY3RTZW5kUik7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjay5mYW4odGhpcy5fZmVlZGJhY2tMLmdhaW4sIHRoaXMuX2ZlZWRiYWNrUi5nYWluKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3QsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9GZWVkYmFja0VmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9GZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZmVlZGJhY2snXSk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0wgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdGVyZW9GZWVkYmFja0VmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEFwcGxpZXMgYSB3aWR0aCBmYWN0b3IgdG8gdGhlIG1pZC9zaWRlIHNlcGVyYXRpb24uXG5cdFx0ICogICAgICAgICAwIGlzIGFsbCBtaWQgYW5kIDEgaXMgYWxsIHNpZGUuXG5cdFx0ICogICAgICAgICBBbGdvcml0aG0gZm91bmQgaW4gW2t2cmF1ZGlvIGZvcnVtc10oaHR0cDovL3d3dy5rdnJhdWRpby5jb20vZm9ydW0vdmlld3RvcGljLnBocD90PTIxMjU4NykuXG5cdFx0ICogICAgICAgICA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgPGNvZGU+XG5cdFx0ICogICAgICAgICBNaWQgKj0gMiooMS13aWR0aCk8YnI+XG5cdFx0ICogICAgICAgICBTaWRlICo9IDIqd2lkdGhcblx0XHQgKiAgICAgICAgIDwvY29kZT5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5NaWRTaWRlRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFt3aWR0aF0gVGhlIHN0ZXJlbyB3aWR0aC4gQSB3aWR0aCBvZiAwIGlzIG1vbm8gYW5kIDEgaXMgc3RlcmVvLiAwLjUgaXMgbm8gY2hhbmdlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9XaWRlbmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnd2lkdGgnXSwgVG9uZS5TdGVyZW9XaWRlbmVyKTtcblx0ICAgICAgICBUb25lLk1pZFNpZGVFZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgd2lkdGggY29udHJvbC4gMCA9IDEwMCUgbWlkLiAxID0gMTAwJSBzaWRlLiAwLjUgPSBubyBjaGFuZ2UuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy53aWR0aCwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3dpZHRoJ10pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVHdvIHRpbWVzIHRoZSAoMS13aWR0aCkgZm9yIHRoZSBtaWQgY2hhbm5lbFxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZCA9IG5ldyBUb25lLk11bHRpcGx5KDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVHdvIHRpbWVzIHRoZSB3aWR0aCBmb3IgdGhlIHNpZGUgY2hhbm5lbFxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aFNpZGUgPSBuZXcgVG9uZS5NdWx0aXBseSgyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBNaWQgbXVsdGlwbGllclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRNdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoTWlkLmNvbm5lY3QodGhpcy5fbWlkTXVsdCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5taWRTZW5kLmNoYWluKHRoaXMuX21pZE11bHQsIHRoaXMubWlkUmV0dXJuKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIDEgLSB3aWR0aFxuXHRcdFx0ICogQHR5cGUge1RvbmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmVNaW51c1dpZHRoID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICB0aGlzLl9vbmVNaW51c1dpZHRoLmNvbm5lY3QodGhpcy5fdHdvVGltZXNXaWR0aE1pZCk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmdldENvbnN0YW50KDEpLmNvbm5lY3QodGhpcy5fb25lTWludXNXaWR0aCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5jb25uZWN0KHRoaXMuX29uZU1pbnVzV2lkdGgsIDAsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNpZGUgbXVsdGlwbGllclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaWRlTXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KCk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5jb25uZWN0KHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlKTtcblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoU2lkZS5jb25uZWN0KHRoaXMuX3NpZGVNdWx0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLnNpZGVTZW5kLmNoYWluKHRoaXMuX3NpZGVNdWx0LCB0aGlzLnNpZGVSZXR1cm4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3RlcmVvV2lkZW5lciwgVG9uZS5NaWRTaWRlRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9XaWRlbmVyLmRlZmF1bHRzID0geyAnd2lkdGgnOiAwLjUgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3RlcmVvV2lkZW5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9XaWRlbmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTWlkU2lkZUVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnd2lkdGgnXSk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy53aWR0aCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkTXVsdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkTXVsdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2lkZU11bHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NpZGVNdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoTWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoTWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoU2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aFNpZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX29uZU1pbnVzV2lkdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX29uZU1pbnVzV2lkdGggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN0ZXJlb1dpZGVuZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyZW1vbG8gbW9kdWxhdGVzIHRoZSBhbXBsaXR1ZGUgb2YgYW4gaW5jb21pbmcgc2lnbmFsIHVzaW5nIGEgVG9uZS5MRk8uXG5cdFx0ICogICAgICAgICBUaGUgdHlwZSwgZnJlcXVlbmN5LCBhbmQgZGVwdGggb2YgdGhlIExGTyBpcyBjb250cm9sbGFibGUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtmcmVxdWVuY3ldIFRoZSByYXRlIG9mIHRoZSBlZmZlY3QuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtkZXB0aF0gVGhlIGRlcHRoIG9mIHRoZSBlZmZlY3QuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jcmVhdGUgYSB0cmVtb2xvIGFuZCBzdGFydCBpdCdzIExGT1xuXHRcdCAqIHZhciB0cmVtb2xvID0gbmV3IFRvbmUuVHJlbW9sbyg5LCAwLjc1KS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICogLy9yb3V0ZSBhbiBvc2NpbGxhdG9yIHRocm91Z2ggdGhlIHRyZW1vbG8gYW5kIHN0YXJ0IGl0XG5cdFx0ICogdmFyIG9zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkuY29ubmVjdCh0cmVtb2xvKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdLCBUb25lLlRyZW1vbG8pO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRyZW1lbG8gTEZPIGluIHRoZSBsZWZ0IGNoYW5uZWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9MID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ3BoYXNlJzogb3B0aW9ucy5zcHJlYWQsXG5cdCAgICAgICAgICAgICdtaW4nOiAxLFxuXHQgICAgICAgICAgICAnbWF4JzogMFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0cmVtZWxvIExGTyBpbiB0aGUgbGVmdCBjaGFubmVsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdwaGFzZSc6IG9wdGlvbnMuc3ByZWFkLFxuXHQgICAgICAgICAgICAnbWluJzogMSxcblx0ICAgICAgICAgICAgJ21heCc6IDBcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVyZSB0aGUgZ2FpbiBpcyBtdWx0aXBsaWVkXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVkZUwgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlcmUgdGhlIGdhaW4gaXMgbXVsdGlwbGllZFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVSID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIHRyZW1vbG8uXG5cdFx0XHQgKiAgQHR5cGUgIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXB0aCBvZiB0aGUgZWZmZWN0LiBBIGRlcHRoIG9mIDAsIGhhcyBubyBlZmZlY3Rcblx0XHRcdCAqICBvbiB0aGUgYW1wbGl0dWRlLCBhbmQgYSBkZXB0aCBvZiAxIG1ha2VzIHRoZSBhbXBsaXR1ZGVcblx0XHRcdCAqICBtb2R1bGF0ZSBmdWxseSBiZXR3ZWVuIDAgYW5kIDEuXG5cdFx0XHQgKiAgQHR5cGUgIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlcHRoID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGVwdGgsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY2hhaW4odGhpcy5fYW1wbGl0dWRlTCwgdGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNoYWluKHRoaXMuX2FtcGxpdHVkZVIsIHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5jb25uZWN0KHRoaXMuX2FtcGxpdHVkZUwuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5jb25uZWN0KHRoaXMuX2FtcGxpdHVkZVIuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZmFuKHRoaXMuX2xmb0wuZnJlcXVlbmN5LCB0aGlzLl9sZm9SLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXB0aC5mYW4odGhpcy5fbGZvUi5hbXBsaXR1ZGUsIHRoaXMuX2xmb0wuYW1wbGl0dWRlKTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5zcHJlYWQgPSBvcHRpb25zLnNwcmVhZDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyZW1vbG8sIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxMCxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZGVwdGgnOiAwLjUsXG5cdCAgICAgICAgJ3NwcmVhZCc6IDE4MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0YXJ0IHRoZSB0cmVtb2xvLlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSB0cmVtb2xvIGJlZ2lucy5cblx0XHQgKiBAcmV0dXJucyB7VG9uZS5UcmVtb2xvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm9MLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCB0aGUgdHJlbW9sby5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgdHJlbW9sbyBzdG9wcy5cblx0XHQgKiBAcmV0dXJucyB7VG9uZS5UcmVtb2xvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgZWZmZWN0IHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbZGVsYXk9MF0gRGVsYXkgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIGVmZmVjdCBhZnRlciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zcG9ydCBoYXMgc3RhcnRlZC5cblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoZGVsYXkpIHtcblx0ICAgICAgICB0aGlzLl9sZm9MLnN5bmMoZGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3luYyhkZWxheSk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQuc3luY1NpZ25hbCh0aGlzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVW5zeW5jIHRoZSBmaWx0ZXIgZnJvbSB0aGUgdHJhbnNwb3J0XG5cdFx0ICogQHJldHVybnMge1RvbmUuVHJlbW9sb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC51bnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnVuc3luYygpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LnVuc3luY1NpZ25hbCh0aGlzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIFRyZW1vbG8ncyBvc2NpbGxhdG9yIHR5cGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVHJlbW9sbyNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyZW1vbG8ucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmb0wudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEFtb3VudCBvZiBzdGVyZW8gc3ByZWFkLiBXaGVuIHNldCB0byAwLCBib3RoIExGTydzIHdpbGwgYmUgcGFubmVkIGNlbnRyYWxseS5cblx0XHQgKiBXaGVuIHNldCB0byAxODAsIExGTydzIHdpbGwgYmUgcGFubmVkIGhhcmQgbGVmdCBhbmQgcmlnaHQgcmVzcGVjdGl2ZWx5LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlRyZW1vbG8jXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmVtb2xvLnByb3RvdHlwZSwgJ3NwcmVhZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmb1IucGhhc2UgLSB0aGlzLl9sZm9MLnBoYXNlOyAgICAvLzE4MFxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ByZWFkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wucGhhc2UgPSA5MCAtIHNwcmVhZCAvIDI7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IucGhhc2UgPSBzcHJlYWQgLyAyICsgOTA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJlbW9sb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVkZUwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVkZUwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVkZVIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVkZVIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmVtb2xvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBWaWJyYXRvIGVmZmVjdCBjb21wb3NlZCBvZiBhIFRvbmUuRGVsYXkgYW5kIGEgVG9uZS5MRk8uIFRoZSBMRk9cblx0XHQgKiAgICAgICAgIG1vZHVsYXRlcyB0aGUgZGVsYXlUaW1lIG9mIHRoZSBkZWxheSwgY2F1c2luZyB0aGUgcGl0Y2ggdG8gcmlzZVxuXHRcdCAqICAgICAgICAgYW5kIGZhbGwuIFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgdmlicmF0by5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gZGVwdGggVGhlIGFtb3VudCB0aGUgcGl0Y2ggaXMgbW9kdWxhdGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5WaWJyYXRvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdLCBUb25lLlZpYnJhdG8pO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlbGF5IG5vZGUgdXNlZCBmb3IgdGhlIHZpYnJhdG8gZWZmZWN0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBMRk8gdXNlZCB0byBjb250cm9sIHRoZSB2aWJyYXRvXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm8gPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAndHlwZSc6IG9wdGlvbnMudHlwZSxcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiBvcHRpb25zLm1heERlbGF5LFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdwaGFzZSc6IC05MCAgICAvL29mZnNlIHRoZSBwaGFzZSBzbyB0aGUgcmVzdGluZyBwb3NpdGlvbiBpcyBpbiB0aGUgY2VudGVyXG5cdCAgICAgICAgfSkuc3RhcnQoKS5jb25uZWN0KHRoaXMuX2RlbGF5Tm9kZS5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIHZpYnJhdG9cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVwdGggb2YgdGhlIHZpYnJhdG8uIFxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fbGZvLmFtcGxpdHVkZTtcblx0ICAgICAgICB0aGlzLmRlcHRoLnZhbHVlID0gb3B0aW9ucy5kZXB0aDtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNoYWluKHRoaXMuX2RlbGF5Tm9kZSwgdGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVmlicmF0bywgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlZpYnJhdG8uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21heERlbGF5JzogMC4wMDUsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDUsXG5cdCAgICAgICAgJ2RlcHRoJzogMC4xLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVHlwZSBvZiBvc2NpbGxhdG9yIGF0dGFjaGVkIHRvIHRoZSBWaWJyYXRvLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlZpYnJhdG8jXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5WaWJyYXRvLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5WaWJyYXRvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlZpYnJhdG8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVmlicmF0bztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkV2ZW50IGFic3RyYWN0cyBhd2F5IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlIGFuZCBwcm92aWRlcyBhIHNjaGVkdWxhYmxlXG5cdFx0ICogICAgICAgICAgY2FsbGJhY2sgZm9yIGEgc2luZ2xlIG9yIHJlcGVhdGFibGUgZXZlbnRzIGFsb25nIHRoZSB0aW1lbGluZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBhdCB0aGUgdGltZS5cblx0XHQgKiAgQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgb3IgdmFsdWVzIHdoaWNoIHNob3VsZCBiZSBwYXNzZWQgdG9cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gb24gaW52b2NhdGlvbi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgY2hvcmQgPSBuZXcgVG9uZS5FdmVudChmdW5jdGlvbih0aW1lLCBjaG9yZCl7XG5cdFx0ICogXHQvL3RoZSBjaG9yZCBhcyB3ZWxsIGFzIHRoZSBleGFjdCB0aW1lIG9mIHRoZSBldmVudFxuXHRcdCAqIFx0Ly9hcmUgcGFzc2VkIGluIGFzIGFyZ3VtZW50cyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cblx0XHQgKiB9LCBbXCJENFwiLCBcIkU0XCIsIFwiRjRcIl0pO1xuXHRcdCAqIC8vc3RhcnQgdGhlIGNob3JkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRyYW5zcG9ydCB0aW1lbGluZVxuXHRcdCAqIGNob3JkLnN0YXJ0KCk7XG5cdFx0ICogLy9sb29wIGl0IGV2ZXJ5IG1lYXN1cmUgZm9yIDggbWVhc3VyZXNcblx0XHQgKiBjaG9yZC5sb29wID0gODtcblx0XHQgKiBjaG9yZC5sb29wRW5kID0gXCIxbVwiO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICd2YWx1ZSdcblx0ICAgICAgICBdLCBUb25lLkV2ZW50KTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTG9vcCB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbnxQb3NpdGl2ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcCA9IG9wdGlvbnMubG9vcDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlLlxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZVxuXHRcdFx0ICogIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHRcdFx0ICogIEB0eXBlICB7Kn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlbiB0aGUgbm90ZSBpcyBzY2hlZHVsZWQgdG8gc3RhcnQuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9UaWNrcyhvcHRpb25zLmxvb3BTdGFydCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlbiB0aGUgbm90ZSBpcyBzY2hlZHVsZWQgdG8gc3RhcnQuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvVGlja3Mob3B0aW9ucy5sb29wRW5kKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUcmFja3MgdGhlIHNjaGVkdWxlZCBldmVudHNcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZVN0YXRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG5ldyBUb25lLlRpbWVsaW5lU3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlIG5vdGUuIEEgc3BlZWQgb2YgMVxuXHRcdFx0ICogIGlzIG5vIGNoYW5nZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IDE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBkZWxheSB0aW1lIGZyb20gd2hlbiB0aGUgZXZlbnQgaXMgc2NoZWR1bGVkIHRvIHN0YXJ0XG5cdFx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGFydE9mZnNldCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcHJpdmF0ZSBob2xkZXIgb2YgcHJvYmFiaWxpdHkgdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Byb2JhYmlsaXR5ID0gb3B0aW9ucy5wcm9iYWJpbGl0eTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYW1vdW50IG9mIHZhcmlhdGlvbiBmcm9tIHRoZVxuXHRcdFx0ICogIGdpdmVuIHRpbWUuXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW58VGltZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faHVtYW5pemUgPSBvcHRpb25zLmh1bWFuaXplO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIG11dGUgaXMgdHJ1ZSwgdGhlIGNhbGxiYWNrIHdvbid0IGJlXG5cdFx0XHQgKiAgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgICAgICAvL3NldCB0aGUgaW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRXZlbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdjYWxsYmFjayc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wRW5kJzogJzFtJyxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAndmFsdWUnOiBudWxsLFxuXHQgICAgICAgICdwcm9iYWJpbGl0eSc6IDEsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZSxcblx0ICAgICAgICAnaHVtYW5pemUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXNjaGVkdWxlIGFsbCBvZiB0aGUgZXZlbnRzIGFsb25nIHRoZSB0aW1lbGluZVxuXHRcdCAqICB3aXRoIHRoZSB1cGRhdGVkIHZhbHVlcy5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBhZnRlciBPbmx5IHJlc2NoZWR1bGVzIGV2ZW50cyBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5fcmVzY2hlZHVsZUV2ZW50cyA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIC8vaWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHNjaGVkdWxlcyBhbGwgb2YgdGhlIGV2ZW50c1xuXHQgICAgICAgIGFmdGVyID0gVG9uZS5kZWZhdWx0QXJnKGFmdGVyLCAtMSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEZyb20oYWZ0ZXIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICB2YXIgZHVyYXRpb247XG5cdCAgICAgICAgICAgIGlmIChldmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoZXZlbnQuaWQpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQuY2xlYXIoZXZlbnQuaWQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdmFyIHN0YXJ0VGljayA9IGV2ZW50LnRpbWUgKyBNYXRoLnJvdW5kKHRoaXMuc3RhcnRPZmZzZXQgLyB0aGlzLl9wbGF5YmFja1JhdGUpO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IEluZmluaXR5O1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKHRoaXMuX2xvb3ApKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gdGhpcy5fbG9vcCAqIHRoaXMuX2dldExvb3BEdXJhdGlvbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0QWZ0ZXIoc3RhcnRUaWNrKTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEV2ZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gTWF0aC5taW4oZHVyYXRpb24sIG5leHRFdmVudC50aW1lIC0gc3RhcnRUaWNrKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKGR1cmF0aW9uICE9PSBJbmZpbml0eSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvL3NjaGVkdWxlIGEgc3RvcCBzaW5jZSBpdCdzIGZpbml0ZSBkdXJhdGlvblxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHN0YXJ0VGljayArIGR1cmF0aW9uICsgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gVG9uZS5UaWNrcyhkdXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBpbnRlcnZhbCA9IFRvbmUuVGlja3ModGhpcy5fZ2V0TG9vcER1cmF0aW9uKCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50LmlkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQodGhpcy5fdGljay5iaW5kKHRoaXMpLCBpbnRlcnZhbCwgVG9uZS5UaWNrcyhzdGFydFRpY2spLCBkdXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50LmlkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUodGhpcy5fdGljay5iaW5kKHRoaXMpLCBUb25lLlRpY2tzKHN0YXJ0VGljaykpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIG5vdGUsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC50aWNrcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN0YXJ0IGZyb20gdGhlIHNjaGVkdWxlZCBzdGFydCB0aW1lXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEBuYW1lIHN0YXJ0T2Zmc2V0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdzdGFydE9mZnNldCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0T2Zmc2V0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0T2Zmc2V0ID0gb2Zmc2V0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgbm90ZXMgYmVpbmcgdHJpZ2dlcmVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9iYWJpbGl0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAncHJvYmFiaWxpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9iYWJpbGl0eTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2IpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcHJvYmFiaWxpdHkgPSBwcm9iO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHNldCB0byB0cnVlLCB3aWxsIGFwcGx5IHNtYWxsIHJhbmRvbSB2YXJpYXRpb25cblx0XHQgKiAgdG8gdGhlIGNhbGxiYWNrIHRpbWUuIElmIHRoZSB2YWx1ZSBpcyBnaXZlbiBhcyBhIHRpbWUsIGl0IHdpbGwgcmFuZG9taXplXG5cdFx0ICogIGJ5IHRoYXQgYW1vdW50LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGV2ZW50Lmh1bWFuaXplID0gdHJ1ZTtcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58VGltZX1cblx0XHQgKiAgQG5hbWUgaHVtYW5pemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ2h1bWFuaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faHVtYW5pemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YXJpYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5faHVtYW5pemUgPSB2YXJpYXRpb247XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICB0aW1lICBXaGVuIHRoZSBub3RlIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RvcHBlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5hZGQoe1xuXHQgICAgICAgICAgICAgICAgJ3N0YXRlJzogVG9uZS5TdGF0ZS5TdGFydGVkLFxuXHQgICAgICAgICAgICAgICAgJ3RpbWUnOiB0aW1lLFxuXHQgICAgICAgICAgICAgICAgJ2lkJzogdW5kZWZpbmVkXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgRXZlbnQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICB0aW1lICBXaGVuIHRoZSBub3RlIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXRCZWZvcmUodGltZSk7XG5cdCAgICAgICAgICAgIHZhciByZXNjaGVkdWxUaW1lID0gdGltZTtcblx0ICAgICAgICAgICAgaWYgKHByZXZpb3VzRXZlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHJlc2NoZWR1bFRpbWUgPSBwcmV2aW91c0V2ZW50LnRpbWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cyhyZXNjaGVkdWxUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBhbGwgc2NoZWR1bGVkIGV2ZW50cyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIFt0aW1lPTBdICBUaGUgdGltZSBhZnRlciB3aGljaCBldmVudHMgd2lsbCBiZSBjYW5jZWwuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5kZWZhdWx0QXJnKHRpbWUsIC1JbmZpbml0eSk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoRnJvbSh0aW1lLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQuY2xlYXIoZXZlbnQuaWQpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZXIuIEFsc29cblx0XHQgKiAgY2hlY2tzIGlmIHRoZSBFdmVudCBpcyBkb25lIHBsYXlpbmdcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgb2YgdGhlIGV2ZW50IGluIHNlY29uZHNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdGlja3MgPSBUb25lLlRyYW5zcG9ydC5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAoIXRoaXMubXV0ZSAmJiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aWNrcykgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5wcm9iYWJpbGl0eSA8IDEgJiYgTWF0aC5yYW5kb20oKSA+IHRoaXMucHJvYmFiaWxpdHkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAodGhpcy5odW1hbml6ZSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHZhcmlhdGlvbiA9IDAuMDI7XG5cdCAgICAgICAgICAgICAgICBpZiAoIVRvbmUuaXNCb29sZWFuKHRoaXMuaHVtYW5pemUpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uID0gdGhpcy50b1NlY29uZHModGhpcy5odW1hbml6ZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB0aW1lICs9IChNYXRoLnJhbmRvbSgpICogMiAtIDEpICogdmFyaWF0aW9uO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgdGhpcy52YWx1ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGR1cmF0aW9uIG9mIHRoZSBsb29wLlxuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5fZ2V0TG9vcER1cmF0aW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKCh0aGlzLl9sb29wRW5kIC0gdGhpcy5fbG9vcFN0YXJ0KSAvIHRoaXMuX3BsYXliYWNrUmF0ZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHRoZSBub3RlIHNob3VsZCBsb29wIG9yIG5vdFxuXHRcdCAqICBiZXR3ZWVuIFRvbmUuRXZlbnQubG9vcFN0YXJ0IGFuZFxuXHRcdCAqICBUb25lLkV2ZW50Lmxvb3BFbmQuIEFuIGludGVnZXJcblx0XHQgKiAgdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhlIG51bWJlciBvZlxuXHRcdCAqICBsb29wcyB0aGUgRXZlbnQgZG9lcyBhZnRlciBpdCBzdGFydHMuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgbG9vcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3A7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBub3RlLiBEZWZhdWx0cyB0byAxLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBub3RlLmxvb3AgPSB0cnVlO1xuXHRcdCAqIC8vcmVwZWF0IHRoZSBub3RlIHR3aWNlIGFzIGZhc3Rcblx0XHQgKiBub3RlLnBsYXliYWNrUmF0ZSA9IDI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdwbGF5YmFja1JhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbG9vcEVuZCBwb2ludCBpcyB0aGUgdGltZSB0aGUgZXZlbnQgd2lsbCBsb29wXG5cdFx0ICogIGlmIFRvbmUuRXZlbnQubG9vcCBpcyB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BFbmQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKGxvb3BFbmQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgd2hlbiB0aGUgbG9vcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BTdGFydCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wU3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKGxvb3BTdGFydCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCBwcm9ncmVzcyBvZiB0aGUgbG9vcCBpbnRlcnZhbC5cblx0XHQgKiAgUmV0dXJucyAwIGlmIHRoZSBldmVudCBpcyBub3Qgc3RhcnRlZCB5ZXQgb3Jcblx0XHQgKiAgaXQgaXMgbm90IHNldCB0byBsb29wLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9ncmVzc1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3Byb2dyZXNzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHRpY2tzID0gVG9uZS5UcmFuc3BvcnQudGlja3M7XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFzdEV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KHRpY2tzKTtcblx0ICAgICAgICAgICAgICAgIGlmIChsYXN0RXZlbnQgIT09IG51bGwgJiYgbGFzdEV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbG9vcER1cmF0aW9uID0gdGhpcy5fZ2V0TG9vcER1cmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHByb2dyZXNzID0gKHRpY2tzIC0gbGFzdEV2ZW50LnRpbWUpICUgbG9vcER1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9ncmVzcyAvIGxvb3BEdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNhbmNlbCgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRXZlbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Mb29wIGNyZWF0ZXMgYSBsb29wZWQgY2FsbGJhY2sgYXQgdGhlIFxuXHRcdCAqICAgICAgICAgc3BlY2lmaWVkIGludGVydmFsLiBUaGUgY2FsbGJhY2sgY2FuIGJlIFxuXHRcdCAqICAgICAgICAgc3RhcnRlZCwgc3RvcHBlZCBhbmQgc2NoZWR1bGVkIGFsb25nXG5cdFx0ICogICAgICAgICB0aGUgVHJhbnNwb3J0J3MgdGltZWxpbmUuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBsb29wID0gbmV3IFRvbmUuTG9vcChmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdC8vdHJpZ2dlcmVkIGV2ZXJ5IGVpZ2h0aCBub3RlLiBcblx0XHQgKiBcdGNvbnNvbGUubG9nKHRpbWUpO1xuXHRcdCAqIH0sIFwiOG5cIikuc3RhcnQoMCk7XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoKTtcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gaW50ZXJ2YWwgVGhlIHRpbWUgYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxiYWNrIGNhbGxzLiBcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdpbnRlcnZhbCdcblx0ICAgICAgICBdLCBUb25lLkxvb3ApO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZXZlbnQgd2hpY2ggcHJvZHVjZXMgdGhlIGNhbGxiYWNrc1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnQgPSBuZXcgVG9uZS5FdmVudCh7XG5cdCAgICAgICAgICAgICdjYWxsYmFjayc6IHRoaXMuX3RpY2suYmluZCh0aGlzKSxcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0cnVlLFxuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IG9wdGlvbnMuaW50ZXJ2YWwsXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiBvcHRpb25zLnBsYXliYWNrUmF0ZSxcblx0ICAgICAgICAgICAgJ3Byb2JhYmlsaXR5Jzogb3B0aW9ucy5wcm9iYWJpbGl0eVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCB0aGUgbmV4dCBldmVudCBpbiB0aGUgcGF0dGVyblxuXHRcdFx0ICogIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpdGVyYXRpb25zXG5cdCAgICAgICAgdGhpcy5pdGVyYXRpb25zID0gb3B0aW9ucy5pdGVyYXRpb25zO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTG9vcCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnaW50ZXJ2YWwnOiAnNG4nLFxuXHQgICAgICAgICdjYWxsYmFjayc6IFRvbmUubm9PcCxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAnaXRlcmF0aW9ucyc6IEluZmluaXR5LFxuXHQgICAgICAgICdwcm9iYWJpbGl0eSc6IHRydWUsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgbG9vcCBhdCB0aGUgc3BlY2lmaWVkIHRpbWUgYWxvbmcgdGhlIFRyYW5zcG9ydCdzXG5cdFx0ICogIHRpbWVsaW5lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9uPX0gIHRpbWUgIFdoZW4gdG8gc3RhcnQgdGhlIExvb3AuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkxvb3B9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudC5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgbG9vcCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbj19ICB0aW1lICBXaGVuIHRvIHN0b3AgdGhlIEFycGVnZ2lvXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkxvb3B9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBhbGwgc2NoZWR1bGVkIGV2ZW50cyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIFt0aW1lPTBdICBUaGUgdGltZSBhZnRlciB3aGljaCBldmVudHMgd2lsbCBiZSBjYW5jZWwuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkxvb3B9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgbm90ZXMgc2hvdWxkIGJlIGNhbGxlZFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0aGUgZXZlbnQgb2NjdXJzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3RhdGUgb2YgdGhlIExvb3AsIGVpdGhlciBzdGFydGVkIG9yIHN0b3BwZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50LnN0YXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcm9ncmVzcyBvZiB0aGUgbG9vcCBhcyBhIHZhbHVlIGJldHdlZW4gMC0xLiAwLCB3aGVuXG5cdFx0ICogIHRoZSBsb29wIGlzIHN0b3BwZWQgb3IgZG9uZSBpdGVyYXRpbmcuIFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2dyZXNzXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdwcm9ncmVzcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50LnByb2dyZXNzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIGJldHdlZW4gc3VjY2Vzc2l2ZSBjYWxsYmFja3MuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGxvb3AuaW50ZXJ2YWwgPSBcIjhuXCI7IC8vbG9vcCBldmVyeSA4blxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgaW50ZXJ2YWxcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnaW50ZXJ2YWwnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQubG9vcEVuZCA9IGludGVydmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBsb29wLiBUaGUgbm9ybWFsIHBsYXliYWNrIHJhdGUgaXMgMSAobm8gY2hhbmdlKS4gXG5cdFx0ICogIEEgYHBsYXliYWNrUmF0ZWAgb2YgMiB3b3VsZCBiZSB0d2ljZSBhcyBmYXN0LiBcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdwbGF5YmFja1JhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50LnBsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmFuZG9tIHZhcmlhdGlvbiArLy0wLjAxcyB0byB0aGUgc2NoZWR1bGVkIHRpbWUuIFxuXHRcdCAqICBPciBnaXZlIGl0IGEgdGltZSB2YWx1ZSB3aGljaCBpdCB3aWxsIHJhbmRvbWl6ZSBieS5cblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58VGltZX1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQG5hbWUgaHVtYW5pemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnaHVtYW5pemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5odW1hbml6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhcmlhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5odW1hbml6ZSA9IHZhcmlhdGlvbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJvYmFibHkgb2YgdGhlIGNhbGxiYWNrIGJlaW5nIGludm9rZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvYmFiaWxpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAncHJvYmFiaWxpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5wcm9iYWJpbGl0eTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2IpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQucHJvYmFiaWxpdHkgPSBwcm9iO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIE11dGluZyB0aGUgTG9vcCBtZWFucyB0aGF0IG5vIGNhbGxiYWNrcyBhcmUgaW52b2tlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBuYW1lIG11dGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50Lm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50Lm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgbG9vcC4gVGhlIGRlZmF1bHRcblx0XHQgKiAgdmFsdWUgaXMgSW5maW5pdHkgKGxvb3AgZm9yZXZlcikuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgaXRlcmF0aW9uc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdpdGVyYXRpb25zJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZXZlbnQubG9vcCA9PT0gdHJ1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50Lmxvb3A7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGl0ZXJzKSB7XG5cdCAgICAgICAgICAgIGlmIChpdGVycyA9PT0gSW5maW5pdHkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmxvb3AgPSB0cnVlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnQubG9vcCA9IGl0ZXJzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkxvb3A7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBhcnQgaXMgYSBjb2xsZWN0aW9uIFRvbmUuRXZlbnRzIHdoaWNoIGNhbiBiZVxuXHRcdCAqICAgICAgICAgc3RhcnRlZC9zdG9wcGVkIGFuZCBsb29wZWQgYXMgYSBzaW5nbGUgdW5pdC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FdmVudH1cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBvbiBlYWNoIGV2ZW50XG5cdFx0ICogIEBwYXJhbSB7QXJyYXl9IGV2ZW50cyB0aGUgYXJyYXkgb2YgZXZlbnRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBhcnQgPSBuZXcgVG9uZS5QYXJ0KGZ1bmN0aW9uKHRpbWUsIG5vdGUpe1xuXHRcdCAqIFx0Ly90aGUgbm90ZXMgZ2l2ZW4gYXMgdGhlIHNlY29uZCBlbGVtZW50IGluIHRoZSBhcnJheVxuXHRcdCAqIFx0Ly93aWxsIGJlIHBhc3NlZCBpbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ICogXHRzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShub3RlLCBcIjhuXCIsIHRpbWUpO1xuXHRcdCAqIH0sIFtbMCwgXCJDMlwiXSwgW1wiMDoyXCIsIFwiQzNcIl0sIFtcIjA6MzoyXCIsIFwiRzJcIl1dKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3VzZSBhbiBhcnJheSBvZiBvYmplY3RzIGFzIGxvbmcgYXMgdGhlIG9iamVjdCBoYXMgYSBcInRpbWVcIiBhdHRyaWJ1dGVcblx0XHQgKiB2YXIgcGFydCA9IG5ldyBUb25lLlBhcnQoZnVuY3Rpb24odGltZSwgdmFsdWUpe1xuXHRcdCAqIFx0Ly90aGUgdmFsdWUgaXMgYW4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGJvdGggdGhlIG5vdGUgYW5kIHRoZSB2ZWxvY2l0eVxuXHRcdCAqIFx0c3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UodmFsdWUubm90ZSwgXCI4blwiLCB0aW1lLCB2YWx1ZS52ZWxvY2l0eSk7XG5cdFx0ICogfSwgW3tcInRpbWVcIiA6IDAsIFwibm90ZVwiIDogXCJDM1wiLCBcInZlbG9jaXR5XCI6IDAuOX0sXG5cdFx0ICogXHQgICB7XCJ0aW1lXCIgOiBcIjA6MlwiLCBcIm5vdGVcIiA6IFwiQzRcIiwgXCJ2ZWxvY2l0eVwiOiAwLjV9XG5cdFx0ICogXSkuc3RhcnQoMCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAnZXZlbnRzJ1xuXHQgICAgICAgIF0sIFRvbmUuUGFydCk7XG5cdCAgICAgICAgVG9uZS5FdmVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuIGFycmF5IG9mIE9iamVjdHMuXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gW107XG5cdCAgICAgICAgLy9hZGQgdGhlIGV2ZW50c1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5ldmVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5ldmVudHNbaV0pKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmFkZChvcHRpb25zLmV2ZW50c1tpXVswXSwgb3B0aW9ucy5ldmVudHNbaV1bMV0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5hZGQob3B0aW9ucy5ldmVudHNbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFydCwgVG9uZS5FdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcEVuZCc6ICcxbScsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ3Byb2JhYmlsaXR5JzogMSxcblx0ICAgICAgICAnaHVtYW5pemUnOiBmYWxzZSxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlLFxuXHQgICAgICAgICdldmVudHMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgcGFydCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gIHRpbWUgICAgV2hlbiB0byBzdGFydCB0aGUgcGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBvZmZzZXQgIFRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcnRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlZ2luIHBsYXlpbmcgYXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgIHZhciB0aWNrcyA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGlja3MpICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIHRoaXMuX2xvb3BTdGFydCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnRvVGlja3Mob2Zmc2V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuYWRkKHtcblx0ICAgICAgICAgICAgICAgICdzdGF0ZSc6IFRvbmUuU3RhdGUuU3RhcnRlZCxcblx0ICAgICAgICAgICAgICAgICd0aW1lJzogdGlja3MsXG5cdCAgICAgICAgICAgICAgICAnb2Zmc2V0Jzogb2Zmc2V0XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnROb3RlKGV2ZW50LCB0aWNrcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgZXZlbnQgaW4gdGhlIGdpdmVuIGV2ZW50IGF0IHRoZSBjb3JyZWN0IHRpbWUgZ2l2ZW5cblx0XHQgKiAgdGhlIHRpY2tzIGFuZCBvZmZzZXQgYW5kIGxvb3BpbmcuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuRXZlbnR9ICBldmVudFxuXHRcdCAqICBAcGFyYW0gIHtUaWNrc30gIHRpY2tzXG5cdFx0ICogIEBwYXJhbSAge1RpY2tzfSAgb2Zmc2V0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9zdGFydE5vdGUgPSBmdW5jdGlvbiAoZXZlbnQsIHRpY2tzLCBvZmZzZXQpIHtcblx0ICAgICAgICB0aWNrcyAtPSBvZmZzZXQ7XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0ID49IHRoaXMuX2xvb3BTdGFydCAmJiBldmVudC5zdGFydE9mZnNldCA8IHRoaXMuX2xvb3BFbmQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChldmVudC5zdGFydE9mZnNldCA8IG9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vc3RhcnQgaXQgb24gdGhlIG5leHQgbG9vcFxuXHQgICAgICAgICAgICAgICAgICAgIHRpY2tzICs9IHRoaXMuX2dldExvb3BEdXJhdGlvbigpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZXZlbnQuc3RhcnQoVG9uZS5UaWNrcyh0aWNrcykpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0IDwgdGhpcy5fbG9vcFN0YXJ0ICYmIGV2ZW50LnN0YXJ0T2Zmc2V0ID49IG9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQubG9vcCA9IGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuc3RhcnQoVG9uZS5UaWNrcyh0aWNrcykpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGFydE9mZnNldCA+PSBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuc3RhcnQoVG9uZS5UaWNrcyh0aWNrcykpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN0YXJ0IGZyb20gdGhlIHNjaGVkdWxlZCBzdGFydCB0aW1lXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQG5hbWUgc3RhcnRPZmZzZXRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnc3RhcnRPZmZzZXQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydE9mZnNldDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGFydE9mZnNldCA9IG9mZnNldDtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0T2Zmc2V0ICs9IHRoaXMuX3N0YXJ0T2Zmc2V0O1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBwYXJ0IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgdGltZSAgV2hlbiB0byBzdG9wIHRoZSBwYXJ0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpY2tzKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpY2tzKTtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQvU2V0IGFuIEV2ZW50J3MgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIElmIGEgdmFsdWUgaXMgcGFzc2VkIGluIGFuZCBubyBldmVudCBleGlzdHMgYXRcblx0XHQgKiAgdGhlIGdpdmVuIHRpbWUsIG9uZSB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB0aGF0IHZhbHVlLlxuXHRcdCAqICBJZiB0d28gZXZlbnRzIGFyZSBhdCB0aGUgc2FtZSB0aW1lLCB0aGUgZmlyc3Qgb25lIHdpbGxcblx0XHQgKiAgYmUgcmV0dXJuZWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcGFydC5hdChcIjFtXCIpOyAvL3JldHVybnMgdGhlIHBhcnQgYXQgdGhlIGZpcnN0IG1lYXN1cmVcblx0XHQgKlxuXHRcdCAqIHBhcnQuYXQoXCIybVwiLCBcIkMyXCIpOyAvL3NldCB0aGUgdmFsdWUgYXQgXCIybVwiIHRvIEMyLlxuXHRcdCAqIC8vaWYgYW4gZXZlbnQgZGlkbid0IGV4aXN0IGF0IHRoYXQgdGltZSwgaXQgd2lsbCBiZSBjcmVhdGVkLlxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IHRpbWUgVGhlIHRpbWUgb2YgdGhlIGV2ZW50IHRvIGdldCBvciBzZXQuXG5cdFx0ICogIEBwYXJhbSB7Kj19IHZhbHVlIElmIGEgdmFsdWUgaXMgcGFzc2VkIGluLCB0aGUgdmFsdWUgb2YgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgIGV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lIHdpbGwgYmUgc2V0IHRvIGl0LlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkV2ZW50fSB0aGUgZXZlbnQgYXQgdGhlIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiAodGltZSwgdmFsdWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIHZhciB0aWNrVGltZSA9IFRvbmUuVGlja3MoMSkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9ldmVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnModGltZS50b1RpY2tzKCkgLSBldmVudC5zdGFydE9mZnNldCkgPCB0aWNrVGltZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKHZhbHVlKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50LnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9pZiB0aGVyZSB3YXMgbm8gZXZlbnQgYXQgdGhhdCB0aW1lLCBjcmVhdGUgb25lXG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKHZhbHVlKSkge1xuXHQgICAgICAgICAgICB0aGlzLmFkZCh0aW1lLCB2YWx1ZSk7XG5cdCAgICAgICAgICAgIC8vcmV0dXJuIHRoZSBuZXcgZXZlbnRcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50c1t0aGlzLl9ldmVudHMubGVuZ3RoIC0gMV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBhbiBldmVudCB0byB0aGUgcGFydC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRoZSBub3RlIHNob3VsZCBzdGFydC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluLCBpdCBzaG91bGRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGEgJ3RpbWUnIGF0dHJpYnV0ZSBhbmQgdGhlIHJlc3Rcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgb2JqZWN0IHdpbGwgYmUgdXNlZCBhcyB0aGUgJ3ZhbHVlJy5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudHwqfSAgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFydH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHBhcnQuYWRkKFwiMW1cIiwgXCJDIysxMVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgLy9leHRyYWN0IHRoZSBwYXJhbWV0ZXJzXG5cdCAgICAgICAgaWYgKHRpbWUuaGFzT3duUHJvcGVydHkoJ3RpbWUnKSkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRpbWU7XG5cdCAgICAgICAgICAgIHRpbWUgPSB2YWx1ZS50aW1lO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIHZhciBldmVudDtcblx0ICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUb25lLkV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50ID0gdmFsdWU7XG5cdCAgICAgICAgICAgIGV2ZW50LmNhbGxiYWNrID0gdGhpcy5fdGljay5iaW5kKHRoaXMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGV2ZW50ID0gbmV3IFRvbmUuRXZlbnQoe1xuXHQgICAgICAgICAgICAgICAgJ2NhbGxiYWNrJzogdGhpcy5fdGljay5iaW5kKHRoaXMpLFxuXHQgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vdGhlIHN0YXJ0IG9mZnNldFxuXHQgICAgICAgIGV2ZW50LnN0YXJ0T2Zmc2V0ID0gdGltZTtcblx0ICAgICAgICAvL2luaXRpYWxpemUgdGhlIHZhbHVlc1xuXHQgICAgICAgIGV2ZW50LnNldCh7XG5cdCAgICAgICAgICAgICdsb29wRW5kJzogdGhpcy5sb29wRW5kLFxuXHQgICAgICAgICAgICAnbG9vcFN0YXJ0JzogdGhpcy5sb29wU3RhcnQsXG5cdCAgICAgICAgICAgICdsb29wJzogdGhpcy5sb29wLFxuXHQgICAgICAgICAgICAnaHVtYW5pemUnOiB0aGlzLmh1bWFuaXplLFxuXHQgICAgICAgICAgICAncGxheWJhY2tSYXRlJzogdGhpcy5wbGF5YmFja1JhdGUsXG5cdCAgICAgICAgICAgICdwcm9iYWJpbGl0eSc6IHRoaXMucHJvYmFiaWxpdHlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMucHVzaChldmVudCk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgbm90ZSBpZiBpdCBzaG91bGQgYmUgcGxheWVkIHJpZ2h0IG5vd1xuXHQgICAgICAgIHRoaXMuX3Jlc3RhcnRFdmVudChldmVudCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlc3RhcnQgdGhlIGdpdmVuIGV2ZW50XG5cdFx0ICogIEBwYXJhbSAge1RvbmUuRXZlbnR9ICBldmVudFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fcmVzdGFydEV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaChmdW5jdGlvbiAoc3RhdGVFdmVudCkge1xuXHQgICAgICAgICAgICBpZiAoc3RhdGVFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdGFydE5vdGUoZXZlbnQsIHN0YXRlRXZlbnQudGltZSwgc3RhdGVFdmVudC5vZmZzZXQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy9zdG9wIHRoZSBub3RlXG5cdCAgICAgICAgICAgICAgICBldmVudC5zdG9wKFRvbmUuVGlja3Moc3RhdGVFdmVudC50aW1lKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgcGFydC4gV2lsbCByZWN1cnNpdmVseSBpdGVyYXRlXG5cdFx0ICogIGludG8gbmVzdGVkIHBhcnRzIHRvIGZpbmQgdGhlIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogIEBwYXJhbSB7Kn0gdmFsdWUgT3B0aW9uYWxseSBzZWxlY3Qgb25seSBhIHNwZWNpZmljIGV2ZW50IHZhbHVlXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIC8vZXh0cmFjdCB0aGUgcGFyYW1ldGVyc1xuXHQgICAgICAgIGlmICh0aW1lLmhhc093blByb3BlcnR5KCd0aW1lJykpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aW1lO1xuXHQgICAgICAgICAgICB0aW1lID0gdmFsdWUudGltZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fZXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50c1tpXTtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgVG9uZS5QYXJ0KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5yZW1vdmUodGltZSwgdmFsdWUpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0ID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHZhbHVlKSB8fCBUb25lLmlzRGVmaW5lZCh2YWx1ZSkgJiYgZXZlbnQudmFsdWUgPT09IHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLnNwbGljZShpLCAxKTtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbGwgb2YgdGhlIG5vdGVzIGZyb20gdGhlIGdyb3VwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5yZW1vdmVBbGwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IFtdO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgc2NoZWR1bGVkIHN0YXRlIGNoYW5nZSBldmVudHM6IGkuZS4gXCJzdGFydFwiIGFuZCBcInN0b3BcIi5cblx0XHQgKiAgQHBhcmFtIHtUaW1lbGluZVBvc2l0aW9ufSBhZnRlciBUaGUgdGltZSBhZnRlciB3aGljaCB0byBjYW5jZWwgdGhlIHNjaGVkdWxlZCBldmVudHMuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LmNhbmNlbChhZnRlcik7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRoaXMudG9UaWNrcyhhZnRlcikpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBldmVudHNcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IGN0eCBUaGUgY29udGV4dFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgY3R4KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cykge1xuXHQgICAgICAgICAgICBjdHggPSBUb25lLmRlZmF1bHRBcmcoY3R4LCB0aGlzKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2V2ZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzLl9ldmVudHNbaV07XG5cdCAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFRvbmUuUGFydCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGUuX2ZvckVhY2goY2FsbGJhY2ssIGN0eCk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY3R4LCBlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBhdHRyaWJ1dGUgb2YgYWxsIG9mIHRoZSBldmVudHNcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgYXR0ciAgdGhlIGF0dHJpYnV0ZSB0byBzZXRcblx0XHQgKiAgQHBhcmFtICB7Kn0gIHZhbHVlICAgICAgVGhlIHZhbHVlIHRvIHNldCBpdCB0b1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fc2V0QWxsID0gZnVuY3Rpb24gKGF0dHIsIHZhbHVlKSB7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnRbYXR0cl0gPSB2YWx1ZTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgdGljayBtZXRob2Rcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgb2YgdGhlIGV2ZW50IGluIHNlY29uZHNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSwgdmFsdWUpIHtcblx0ICAgICAgICBpZiAoIXRoaXMubXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHZhbHVlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIERldGVybWluZSBpZiB0aGUgZXZlbnQgc2hvdWxkIGJlIGN1cnJlbnRseSBsb29waW5nXG5cdFx0ICogIGdpdmVuIHRoZSBsb29wIGJvdW5kcmllcyBvZiB0aGlzIFBhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuRXZlbnR9ICBldmVudCAgVGhlIGV2ZW50IHRvIHRlc3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3Rlc3RMb29wQm91bmRyaWVzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0IDwgdGhpcy5fbG9vcFN0YXJ0IHx8IGV2ZW50LnN0YXJ0T2Zmc2V0ID49IHRoaXMuX2xvb3BFbmQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuY2FuY2VsKDApO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RvcHBlZCkge1xuXHQgICAgICAgICAgICAvL3Jlc2NoZWR1bGUgaXQgaWYgaXQncyBzdG9wcGVkXG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc3RhcnRFdmVudChldmVudCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJvYmFiaWxpdHkgb2YgdGhlIG5vdGVzIGJlaW5nIHRyaWdnZXJlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9iYWJpbGl0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdwcm9iYWJpbGl0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2JhYmlsaXR5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvYikge1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9iYWJpbGl0eSA9IHByb2I7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldEFsbCgncHJvYmFiaWxpdHknLCBwcm9iKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiBzZXQgdG8gdHJ1ZSwgd2lsbCBhcHBseSBzbWFsbCByYW5kb20gdmFyaWF0aW9uXG5cdFx0ICogIHRvIHRoZSBjYWxsYmFjayB0aW1lLiBJZiB0aGUgdmFsdWUgaXMgZ2l2ZW4gYXMgYSB0aW1lLCBpdCB3aWxsIHJhbmRvbWl6ZVxuXHRcdCAqICBieSB0aGF0IGFtb3VudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBldmVudC5odW1hbml6ZSA9IHRydWU7XG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0ICogIEBuYW1lIGh1bWFuaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2h1bWFuaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faHVtYW5pemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YXJpYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5faHVtYW5pemUgPSB2YXJpYXRpb247XG5cdCAgICAgICAgICAgIHRoaXMuX3NldEFsbCgnaHVtYW5pemUnLCB2YXJpYXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHRoZSBwYXJ0IHNob3VsZCBsb29wIG9yIG5vdFxuXHRcdCAqICBiZXR3ZWVuIFRvbmUuUGFydC5sb29wU3RhcnQgYW5kXG5cdFx0ICogIFRvbmUuUGFydC5sb29wRW5kLiBBbiBpbnRlZ2VyXG5cdFx0ICogIHZhbHVlIGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2Zcblx0XHQgKiAgbG9vcHMgdGhlIFBhcnQgZG9lcyBhZnRlciBpdCBzdGFydHMuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFBvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBsb29wXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9sb29wIHRoZSBwYXJ0IDggdGltZXNcblx0XHQgKiBwYXJ0Lmxvb3AgPSA4O1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsb29wJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3ApIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5fbG9vcFN0YXJ0ID0gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuX2xvb3BFbmQgPSB0aGlzLl9sb29wRW5kO1xuXHQgICAgICAgICAgICAgICAgZXZlbnQubG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90ZXN0TG9vcEJvdW5kcmllcyhldmVudCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBsb29wRW5kIHBvaW50IGRldGVybWluZXMgd2hlbiBpdCB3aWxsXG5cdFx0ICogIGxvb3AgaWYgVG9uZS5QYXJ0Lmxvb3AgaXMgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcEVuZCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wRW5kKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvVGlja3MobG9vcEVuZCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3BFbmQgPSBsb29wRW5kO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rlc3RMb29wQm91bmRyaWVzKGV2ZW50KTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGxvb3BTdGFydCBwb2ludCBkZXRlcm1pbmVzIHdoZW4gaXQgd2lsbFxuXHRcdCAqICBsb29wIGlmIFRvbmUuUGFydC5sb29wIGlzIHRydWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wU3RhcnQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9UaWNrcyhsb29wU3RhcnQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5sb29wU3RhcnQgPSB0aGlzLmxvb3BTdGFydDtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXN0TG9vcEJvdW5kcmllcyhldmVudCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgcGFydFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdwbGF5YmFja1JhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldEFsbCgncGxheWJhY2tSYXRlJywgcmF0ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFRoZSBudW1iZXIgb2Ygc2NoZWR1bGVkIG5vdGVzIGluIHRoZSBwYXJ0LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGxlbmd0aFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzLmxlbmd0aDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMucmVtb3ZlQWxsKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhcnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYXR0ZXJuIGFycGVnZ2lhdGVzIGJldHdlZW4gdGhlIGdpdmVuIG5vdGVzXG5cdFx0ICogICAgICAgICBpbiBhIG51bWJlciBvZiBwYXR0ZXJucy4gU2VlIFRvbmUuQ3RybFBhdHRlcm4gZm9yXG5cdFx0ICogICAgICAgICBhIGZ1bGwgbGlzdCBvZiBwYXR0ZXJucy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGF0dGVybiA9IG5ldyBUb25lLlBhdHRlcm4oZnVuY3Rpb24odGltZSwgbm90ZSl7XG5cdFx0ICogICAvL3RoZSBvcmRlciBvZiB0aGUgbm90ZXMgcGFzc2VkIGluIGRlcGVuZHMgb24gdGhlIHBhdHRlcm5cblx0XHQgKiB9LCBbXCJDMlwiLCBcIkQ0XCIsIFwiRTVcIiwgXCJBNlwiXSwgXCJ1cERvd25cIik7XG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkxvb3B9XG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFycGVnZ2lhdGUgb3Zlci5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGF0dGVybiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICd2YWx1ZXMnLFxuXHQgICAgICAgICAgICAncGF0dGVybidcblx0ICAgICAgICBdLCBUb25lLlBhdHRlcm4pO1xuXHQgICAgICAgIFRvbmUuTG9vcC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYXR0ZXJuIG1hbmFnZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5DdHJsUGF0dGVybn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGF0dGVybiA9IG5ldyBUb25lLkN0cmxQYXR0ZXJuKHtcblx0ICAgICAgICAgICAgJ3ZhbHVlcyc6IG9wdGlvbnMudmFsdWVzLFxuXHQgICAgICAgICAgICAndHlwZSc6IG9wdGlvbnMucGF0dGVybixcblx0ICAgICAgICAgICAgJ2luZGV4Jzogb3B0aW9ucy5pbmRleFxuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGF0dGVybiwgVG9uZS5Mb29wKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXR0ZXJuLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwYXR0ZXJuJzogVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwLFxuXHQgICAgICAgICdjYWxsYmFjayc6IFRvbmUubm9PcCxcblx0ICAgICAgICAndmFsdWVzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIG5vdGVzIHNob3VsZCBiZSBjYWxsZWRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdGhlIGV2ZW50IG9jY3Vyc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXR0ZXJuLnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB0aGlzLl9wYXR0ZXJuLnZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9wYXR0ZXJuLm5leHQoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgaW5kZXggaW4gdGhlIHZhbHVlcyBhcnJheS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBpbmRleFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICdpbmRleCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHRlcm4uaW5kZXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhdHRlcm4uaW5kZXggPSBpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBhcnJheSBvZiBldmVudHMuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKiAgQG5hbWUgdmFsdWVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXR0ZXJuLnByb3RvdHlwZSwgJ3ZhbHVlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHRlcm4udmFsdWVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXR0ZXJuLnZhbHVlcyA9IHZhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHBhdHRlcm4uXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHsqfVxuXHRcdCAqICBAbmFtZSB2YWx1ZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuLnZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwYXR0ZXJuIHR5cGUuIFNlZSBUb25lLkN0cmxQYXR0ZXJuIGZvciB0aGUgZnVsbCBsaXN0IG9mIHBhdHRlcm5zLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSBwYXR0ZXJuXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXR0ZXJuLnByb3RvdHlwZSwgJ3BhdHRlcm4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhdHRlcm4udHlwZSA9IHBhdHRlcm47XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGF0dGVybn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGF0dGVybi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkxvb3AucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9wYXR0ZXJuLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wYXR0ZXJuID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYXR0ZXJuO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBzZXF1ZW5jZSBpcyBhbiBhbHRlcm5hdGUgbm90YXRpb24gb2YgYSBwYXJ0LiBJbnN0ZWFkXG5cdFx0ICogICAgICAgICBvZiBwYXNzaW5nIGluIGFuIGFycmF5IG9mIFt0aW1lLCBldmVudF0gcGFpcnMsIHBhc3Ncblx0XHQgKiAgICAgICAgIGluIGFuIGFycmF5IG9mIGV2ZW50cyB3aGljaCB3aWxsIGJlIHNwYWNlZCBhdCB0aGVcblx0XHQgKiAgICAgICAgIGdpdmVuIHN1YmRpdmlzaW9uLiBTdWItYXJyYXlzIHdpbGwgc3ViZGl2aWRlIHRoYXQgYmVhdFxuXHRcdCAqICAgICAgICAgYnkgdGhlIG51bWJlciBvZiBpdGVtcyBhcmUgaW4gdGhlIGFycmF5LlxuXHRcdCAqICAgICAgICAgU2VxdWVuY2Ugbm90YXRpb24gaW5zcGlyYXRpb24gZnJvbSBbVGlkYWxdKGh0dHA6Ly95YXh1Lm9yZy90aWRhbC8pXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBub3RlXG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgICBldmVudHMgIFRoZSBzZXF1ZW5jZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBzdWJkaXZpc2lvbiAgVGhlIHN1YmRpdmlzaW9uIGJldHdlZW4gd2hpY2ggZXZlbnRzIGFyZSBwbGFjZWQuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlBhcnR9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNlcSA9IG5ldyBUb25lLlNlcXVlbmNlKGZ1bmN0aW9uKHRpbWUsIG5vdGUpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2cobm90ZSk7XG5cdFx0ICogLy9zdHJhaWdodCBxdWF0ZXIgbm90ZXNcblx0XHQgKiB9LCBbXCJDNFwiLCBcIkU0XCIsIFwiRzRcIiwgXCJBNFwiXSwgXCI0blwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2VxID0gbmV3IFRvbmUuU2VxdWVuY2UoZnVuY3Rpb24odGltZSwgbm90ZSl7XG5cdFx0ICogXHRjb25zb2xlLmxvZyhub3RlKTtcblx0XHQgKiAvL3N1YmRpdmlzaW9ucyBhcmUgZ2l2ZW4gYXMgc3ViYXJyYXlzXG5cdFx0ICogfSwgW1wiQzRcIiwgW1wiRTRcIiwgXCJENFwiLCBcIkU0XCJdLCBcIkc0XCIsIFtcIkE0XCIsIFwiRzRcIl1dKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAnZXZlbnRzJyxcblx0ICAgICAgICAgICAgJ3N1YmRpdmlzaW9uJ1xuXHQgICAgICAgIF0sIFRvbmUuU2VxdWVuY2UpO1xuXHQgICAgICAgIC8vcmVtb3ZlIHRoZSBldmVudHNcblx0ICAgICAgICB2YXIgZXZlbnRzID0gb3B0aW9ucy5ldmVudHM7XG5cdCAgICAgICAgZGVsZXRlIG9wdGlvbnMuZXZlbnRzO1xuXHQgICAgICAgIFRvbmUuUGFydC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzdWJkaXZpc29uIG9mIGVhY2ggbm90ZVxuXHRcdFx0ICogIEB0eXBlICB7VGlja3N9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YmRpdmlzaW9uID0gdGhpcy50b1RpY2tzKG9wdGlvbnMuc3ViZGl2aXNpb24pO1xuXHQgICAgICAgIC8vaWYgbm8gdGltZSB3YXMgcGFzc2VkIGluLCB0aGUgbG9vcCBlbmQgaXMgdGhlIGVuZCBvZiB0aGUgY3ljbGVcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKG9wdGlvbnMubG9vcEVuZCkgJiYgVG9uZS5pc0RlZmluZWQoZXZlbnRzKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gZXZlbnRzLmxlbmd0aCAqIHRoaXMuX3N1YmRpdmlzaW9uO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2RlZmF1bHRzIHRvIGxvb3Bpbmdcblx0ICAgICAgICB0aGlzLl9sb29wID0gdHJ1ZTtcblx0ICAgICAgICAvL2FkZCBhbGwgb2YgdGhlIGV2ZW50c1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChldmVudHMpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmFkZChpLCBldmVudHNbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2VxdWVuY2UsIFRvbmUuUGFydCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UuZGVmYXVsdHMgPSB7ICdzdWJkaXZpc2lvbic6ICc0bicgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3ViZGl2aXNpb24gb2YgdGhlIHNlcXVlbmNlLiBUaGlzIGNhbiBvbmx5IGJlXG5cdFx0ICogIHNldCBpbiB0aGUgY29uc3RydWN0b3IuIFRoZSBzdWJkaXZpc2lvbiBpcyB0aGVcblx0XHQgKiAgaW50ZXJ2YWwgYmV0d2VlbiBzdWNjZXNzaXZlIHN0ZXBzLlxuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuU2VxdWVuY2UjXG5cdFx0ICogIEBuYW1lIHN1YmRpdmlzaW9uXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLCAnc3ViZGl2aXNpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX3N1YmRpdmlzaW9uKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQvU2V0IGFuIGluZGV4IG9mIHRoZSBzZXF1ZW5jZS4gSWYgdGhlIGluZGV4IGNvbnRhaW5zIGEgc3ViYXJyYXksXG5cdFx0ICogIGEgVG9uZS5TZXF1ZW5jZSByZXByZXNlbnRpbmcgdGhhdCBzdWItYXJyYXkgd2lsbCBiZSByZXR1cm5lZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2VxdWVuY2UgPSBuZXcgVG9uZS5TZXF1ZW5jZShwbGF5Tm90ZSwgW1wiRTRcIiwgXCJDNFwiLCBcIkYjNFwiLCBbXCJBNFwiLCBcIkJiM1wiXV0pXG5cdFx0ICogc2VxdWVuY2UuYXQoMCkvLyA9PiByZXR1cm5zIFwiRTRcIlxuXHRcdCAqIC8vc2V0IGEgdmFsdWVcblx0XHQgKiBzZXF1ZW5jZS5hdCgwLCBcIkczXCIpO1xuXHRcdCAqIC8vZ2V0IGEgbmVzdGVkIHNlcXVlbmNlXG5cdFx0ICogc2VxdWVuY2UuYXQoMykuYXQoMSkvLyA9PiByZXR1cm5zIFwiQmIzXCJcblx0XHQgKiBAcGFyYW0ge1Bvc2l0aXZlfSBpbmRleCBUaGUgaW5kZXggdG8gZ2V0IG9yIHNldFxuXHRcdCAqIEBwYXJhbSB7Kn0gdmFsdWUgT3B0aW9uYWxseSBwYXNzIGluIHRoZSB2YWx1ZSB0byBzZXQgYXQgdGhlIGdpdmVuIGluZGV4LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG5cdCAgICAgICAgLy9pZiB0aGUgdmFsdWUgaXMgYW4gYXJyYXksXG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh2YWx1ZSkpIHtcblx0ICAgICAgICAgICAgLy9yZW1vdmUgdGhlIGN1cnJlbnQgZXZlbnQgYXQgdGhhdCBpbmRleFxuXHQgICAgICAgICAgICB0aGlzLnJlbW92ZShpbmRleCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY2FsbCB0aGUgcGFyZW50J3MgbWV0aG9kXG5cdCAgICAgICAgcmV0dXJuIFRvbmUuUGFydC5wcm90b3R5cGUuYXQuY2FsbCh0aGlzLCB0aGlzLl9pbmRleFRpbWUoaW5kZXgpLCB2YWx1ZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhbiBldmVudCBhdCBhbiBpbmRleCwgaWYgdGhlcmUncyBhbHJlYWR5IHNvbWV0aGluZ1xuXHRcdCAqICBhdCB0aGF0IGluZGV4LCBvdmVyd3JpdGUgaXQuIElmIGB2YWx1ZWAgaXMgYW4gYXJyYXksXG5cdFx0ICogIGl0IHdpbGwgYmUgcGFyc2VkIGFzIGEgc3Vic2VxdWVuY2UuXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBpbmRleCBUaGUgaW5kZXggdG8gYWRkIHRoZSBldmVudCB0b1xuXHRcdCAqICBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhZGQgYXQgdGhhdCBpbmRleFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TZXF1ZW5jZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuXHQgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh2YWx1ZSkpIHtcblx0ICAgICAgICAgICAgLy9tYWtlIGEgc3Vic2VxdWVuY2UgYW5kIGFkZCB0aGF0IHRvIHRoZSBzZXF1ZW5jZVxuXHQgICAgICAgICAgICB2YXIgc3ViU3ViZGl2aXNpb24gPSBNYXRoLnJvdW5kKHRoaXMuX3N1YmRpdmlzaW9uIC8gdmFsdWUubGVuZ3RoKTtcblx0ICAgICAgICAgICAgdmFsdWUgPSBuZXcgVG9uZS5TZXF1ZW5jZSh0aGlzLl90aWNrLmJpbmQodGhpcyksIHZhbHVlLCBUb25lLlRpY2tzKHN1YlN1YmRpdmlzaW9uKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuUGFydC5wcm90b3R5cGUuYWRkLmNhbGwodGhpcywgdGhpcy5faW5kZXhUaW1lKGluZGV4KSwgdmFsdWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYSB2YWx1ZSBmcm9tIHRoZSBzZXF1ZW5jZSBieSBpbmRleFxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBldmVudCB0byByZW1vdmVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2VxdWVuY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcblx0ICAgICAgICBUb25lLlBhcnQucHJvdG90eXBlLnJlbW92ZS5jYWxsKHRoaXMsIHRoaXMuX2luZGV4VGltZShpbmRleCksIHZhbHVlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSB0aW1lIG9mIHRoZSBpbmRleCBnaXZlbiB0aGUgU2VxdWVuY2UncyBzdWJkaXZpc2lvblxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBpbmRleFxuXHRcdCAqICBAcmV0dXJuICB7VGltZX0gIFRoZSB0aW1lIG9mIHRoYXQgaW5kZXhcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLl9pbmRleFRpbWUgPSBmdW5jdGlvbiAoaW5kZXgpIHtcblx0ICAgICAgICBpZiAoaW5kZXggaW5zdGFuY2VvZiBUb25lLlRyYW5zcG9ydFRpbWUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKGluZGV4ICogdGhpcy5fc3ViZGl2aXNpb24gKyB0aGlzLnN0YXJ0T2Zmc2V0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlNlcXVlbmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuUGFydC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNlcXVlbmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QdWxzZU9zY2lsbGF0b3IgaXMgYSBwdWxzZSBvc2NpbGxhdG9yIHdpdGggY29udHJvbCBvdmVyIHB1bHNlIHdpZHRoLFxuXHRcdCAqICAgICAgICAgYWxzbyBrbm93biBhcyB0aGUgZHV0eSBjeWNsZS4gQXQgNTAlIGR1dHkgY3ljbGUgKHdpZHRoID0gMC41KSB0aGUgd2F2ZSBpc1xuXHRcdCAqICAgICAgICAgYSBzcXVhcmUgYW5kIG9ubHkgb2RkLW51bWJlcmVkIGhhcm1vbmljcyBhcmUgcHJlc2VudC4gQXQgYWxsIG90aGVyIHdpZHRoc1xuXHRcdCAqICAgICAgICAgZXZlbi1udW1iZXJlZCBoYXJtb25pY3MgYXJlIHByZXNlbnQuIFJlYWQgbW9yZVxuXHRcdCAqICAgICAgICAgW2hlcmVdKGh0dHBzOi8vd2lnZ2xld2F2ZS53b3JkcHJlc3MuY29tLzIwMTQvMDgvMTYvcHVsc2Utd2F2ZWZvcm1zLWFuZC1oYXJtb25pY3MvKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2ZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbd2lkdGhdIFRoZSB3aWR0aCBvZiB0aGUgcHVsc2Vcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcHVsc2UgPSBuZXcgVG9uZS5QdWxzZU9zY2lsbGF0b3IoXCJFNVwiLCAwLjQpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd3aWR0aCdcblx0ICAgICAgICBdLCBUb25lLk9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdpZHRoIG9mIHRoZSBwdWxzZS5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy53aWR0aCA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLndpZHRoLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGdhdGUgdGhlIHdpZHRoIGFtb3VudFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3dpZHRoR2F0ZSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2F3dG9vdGggb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoID0gbmV3IFRvbmUuT3NjaWxsYXRvcih7XG5cdCAgICAgICAgICAgIGZyZXF1ZW5jeTogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgIGRldHVuZTogb3B0aW9ucy5kZXR1bmUsXG5cdCAgICAgICAgICAgIHR5cGU6ICdzYXd0b290aCcsXG5cdCAgICAgICAgICAgIHBoYXNlOiBvcHRpb25zLnBoYXNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9zYXd0b290aC5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBpbiBjZW50cy5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLl9zYXd0b290aC5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhyZXNob2xkIHRoZSBzaWduYWwgdG8gdHVybiBpdCBpbnRvIGEgc3F1YXJlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGhyZXNoID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmICh2YWwgPCAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5jaGFpbih0aGlzLl90aHJlc2gsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLndpZHRoLmNoYWluKHRoaXMuX3dpZHRoR2F0ZSwgdGhpcy5fdGhyZXNoKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICd3aWR0aCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUHVsc2VPc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgcGFyYW1ldGVycy5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3BoYXNlJzogMCxcblx0ICAgICAgICAnd2lkdGgnOiAwLjJcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3dpZHRoR2F0ZS5nYWluLnNldFZhbHVlQXRUaW1lKDEsIHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLnN0b3AodGltZSk7XG5cdCAgICAgICAgLy90aGUgd2lkdGggaXMgc3RpbGwgY29ubmVjdGVkIHRvIHRoZSBvdXRwdXQuXG5cdCAgICAgICAgLy90aGF0IG5lZWRzIHRvIGJlIHN0b3BwZWQgYWxzb1xuXHQgICAgICAgIHRoaXMuX3dpZHRoR2F0ZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGgucmVzdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QdWxzZU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Nhd3Rvb3RoLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2F3dG9vdGgucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLiBBbHdheXMgcmV0dXJucyBcInB1bHNlXCIuXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUHVsc2VPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAncHVsc2UnO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQ2Fubm90IHNldCBwYXJ0aWFscyBmb3IgdGhpcyB3YXZlZm9ybSB0eXBlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUHVsc2VPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBbXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cCBtZXRob2QuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUHVsc2VPc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnd2lkdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLndpZHRoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3dpZHRoR2F0ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGhyZXNoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUHVsc2VPc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QV01Pc2NpbGxhdG9yIG1vZHVsYXRlcyB0aGUgd2lkdGggb2YgYSBUb25lLlB1bHNlT3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgYXQgdGhlIG1vZHVsYXRpb25GcmVxdWVuY3kuIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgY29udGludW91c2x5XG5cdFx0ICogICAgICAgICBjaGFuZ2luZyB0aGUgdGltYnJlIG9mIHRoZSBvc2NpbGxhdG9yIGJ5IGFsdGVyaW5nIHRoZSBoYXJtb25pY3Ncblx0XHQgKiAgICAgICAgIGdlbmVyYXRlZC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBzdGFydGluZyBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBtb2R1bGF0aW9uRnJlcXVlbmN5IFRoZSBtb2R1bGF0aW9uIGZyZXF1ZW5jeSBvZiB0aGUgd2lkdGggb2YgdGhlIHB1bHNlLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgcHdtID0gbmV3IFRvbmUuUFdNT3NjaWxsYXRvcihcIkFiM1wiLCAwLjMpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkZyZXF1ZW5jeSdcblx0ICAgICAgICBdLCBUb25lLlBXTU9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHB1bHNlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5QdWxzZU9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3B1bHNlID0gbmV3IFRvbmUuUHVsc2VPc2NpbGxhdG9yKG9wdGlvbnMubW9kdWxhdGlvbkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9jaGFuZ2UgdGhlIHB1bHNlIG9zY2lsbGF0b3IgdHlwZVxuXHQgICAgICAgIHRoaXMuX3B1bHNlLl9zYXd0b290aC50eXBlID0gJ3NpbmUnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtb2R1bGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnZGV0dW5lJzogb3B0aW9ucy5kZXR1bmUsXG5cdCAgICAgICAgICAgICdwaGFzZSc6IG9wdGlvbnMucGhhc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTY2FsZSB0aGUgb3NjaWxsYXRvciBzbyBpdCBkb2Vzbid0IGdvIHNpbGVudFxuXHRcdFx0ICogIGF0IHRoZSBleHRyZW1lIHZhbHVlcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBuZXcgVG9uZS5NdWx0aXBseSgyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLl9tb2R1bGF0b3IuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW9uIHJhdGUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25GcmVxdWVuY3kgPSB0aGlzLl9wdWxzZS5mcmVxdWVuY3k7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jaGFpbih0aGlzLl9zY2FsZSwgdGhpcy5fcHVsc2Uud2lkdGgpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25GcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBXTU9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3BoYXNlJzogMCxcblx0ICAgICAgICAnbW9kdWxhdGlvbkZyZXF1ZW5jeSc6IDAuNFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHJlc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2UucmVzdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvci4gQWx3YXlzIHJldHVybnMgXCJwd21cIi5cblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QV01Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gJ3B3bSc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBDYW5ub3Qgc2V0IHBhcnRpYWxzIGZvciB0aGlzIHdhdmVmb3JtIHR5cGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QV01Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gW107XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QV01Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGF0b3IucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QV01Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25GcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUFdNT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRk1Pc2NpbGxhdG9yXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gbW9kdWxhdGlvblR5cGUgVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBzaW5lIG9zY2lsbGF0b3IgZnJlcXVlbmN5LW1vZHVsYXRlZCBieSBhIHNxdWFyZSB3YXZlXG5cdFx0ICogdmFyIGZtT3NjID0gbmV3IFRvbmUuRk1Pc2NpbGxhdG9yKFwiQWIzXCIsIFwic2luZVwiLCBcInNxdWFyZVwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uVHlwZSdcblx0ICAgICAgICBdLCBUb25lLkZNT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMudHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMuX2NhcnJpZXIuZGV0dW5lO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLnZhbHVlID0gb3B0aW9ucy5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpb24gaW5kZXggd2hpY2ggaXMgaW4gZXNzZW5jZSB0aGUgZGVwdGggb3IgYW1vdW50IG9mIHRoZSBtb2R1bGF0aW9uLiBJbiBvdGhlciB0ZXJtcyBpdCBpcyB0aGVcblx0XHRcdCAqICByYXRpbyBvZiB0aGUgZnJlcXVlbmN5IG9mIHRoZSBtb2R1bGF0aW5nIHNpZ25hbCAobWYpIHRvIHRoZSBhbXBsaXR1ZGUgb2YgdGhlXG5cdFx0XHQgKiAgbW9kdWxhdGluZyBzaWduYWwgKG1hKSAtLSBhcyBpbiBtYS9tZi5cblx0XHRcdCAqXHRAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKlx0QHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXggPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLm1vZHVsYXRpb25JbmRleCk7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXgudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpbmcgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKG9wdGlvbnMuZnJlcXVlbmN5LCBvcHRpb25zLm1vZHVsYXRpb25UeXBlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgZnJlcXVlbmN5IHJhdGlvIGJldHdlZW4gdGhlIGNhcnJpZXIgYW5kIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvcnMuXG5cdFx0XHQgKiAgQSBoYXJtb25pY2l0eSBvZiAxIGdpdmVzIGJvdGggb3NjaWxsYXRvcnMgdGhlIHNhbWUgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy9waXRjaCB0aGUgbW9kdWxhdG9yIGFuIG9jdGF2ZSBiZWxvdyBjYXJyaWVyXG5cdFx0XHQgKiBzeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSBtb2R1bGF0aW9uIGhhcHBlbnNcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG5ldyBUb25lLkdhaW4oMCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMubW9kdWxhdGlvbkluZGV4LCB0aGlzLl9tb2R1bGF0aW9uTm9kZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNvbm5lY3QodGhpcy5fbW9kdWxhdGlvbk5vZGUuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHRoaXMuX21vZHVsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMucGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRk1Pc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3BoYXNlJzogMCxcblx0ICAgICAgICAnbW9kdWxhdGlvbkluZGV4JzogMixcblx0ICAgICAgICAnbW9kdWxhdGlvblR5cGUnOiAnc3F1YXJlJyxcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIucmVzdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uVHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ21vZHVsYXRpb25UeXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9kdWxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgY2FycmllciB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci5wYXJ0aWFscztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBhcnRpYWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIucGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5GTU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GTU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkFNT3NjaWxsYXRvclxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBzdGFydGluZyBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGF0aW9uVHlwZSBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHNpbmUgb3NjaWxsYXRvciBmcmVxdWVuY3ktbW9kdWxhdGVkIGJ5IGEgc3F1YXJlIHdhdmVcblx0XHQgKiB2YXIgZm1Pc2MgPSBuZXcgVG9uZS5BTU9zY2lsbGF0b3IoXCJBYjNcIiwgXCJzaW5lXCIsIFwic3F1YXJlXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25UeXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuQU1Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy50eXBlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvcidzIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMuX2NhcnJpZXIuZGV0dW5lO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLnZhbHVlID0gb3B0aW9ucy5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpbmcgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKG9wdGlvbnMuZnJlcXVlbmN5LCBvcHRpb25zLm1vZHVsYXRpb25UeXBlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb252ZXJ0IHRoZSAtMSwxIG91dHB1dCB0byAwLDFcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BdWRpb1RvR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgZnJlcXVlbmN5IHJhdGlvIGJldHdlZW4gdGhlIGNhcnJpZXIgYW5kIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvcnMuXG5cdFx0XHQgKiAgQSBoYXJtb25pY2l0eSBvZiAxIGdpdmVzIGJvdGggb3NjaWxsYXRvcnMgdGhlIHNhbWUgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy9waXRjaCB0aGUgbW9kdWxhdG9yIGFuIG9jdGF2ZSBiZWxvdyBjYXJyaWVyXG5cdFx0XHQgKiBzeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSBtb2R1bGF0aW9uIGhhcHBlbnNcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG5ldyBUb25lLkdhaW4oMCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fbW9kdWxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNoYWluKHRoaXMuX21vZHVsYXRpb25TY2FsZSwgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5jaGFpbih0aGlzLl9tb2R1bGF0aW9uTm9kZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMucGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BTU9zY2lsbGF0b3IsIFRvbmUuT3NjaWxsYXRvcik7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3BoYXNlJzogMCxcblx0ICAgICAgICAnbW9kdWxhdGlvblR5cGUnOiAnc3F1YXJlJyxcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIucmVzdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uVHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ21vZHVsYXRpb25UeXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9kdWxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkFNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgY2FycmllciB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkFNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci5wYXJ0aWFscztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBhcnRpYWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIucGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5BTU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BTU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZhdE9zY2lsbGF0b3Jcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBzdGFydGluZyBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGF0aW9uVHlwZSBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHNpbmUgb3NjaWxsYXRvciBmcmVxdWVuY3ktbW9kdWxhdGVkIGJ5IGEgc3F1YXJlIHdhdmVcblx0XHQgKiB2YXIgZm1Pc2MgPSBuZXcgVG9uZS5GYXRPc2NpbGxhdG9yKFwiQWIzXCIsIFwic2luZVwiLCBcInNxdWFyZVwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnc3ByZWFkJ1xuXHQgICAgICAgIF0sIFRvbmUuRmF0T3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvcidzIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiBvc2NpbGxhdG9yc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdG90YWwgc3ByZWFkIG9mIHRoZSBvc2NpbGxhdG9yc1xuXHRcdFx0ICogIEB0eXBlICB7Q2VudHN9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NwcmVhZCA9IG9wdGlvbnMuc3ByZWFkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUge0RlZ3JlZXN9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGFydGlhbHMgYXJyYXlcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMucGFydGlhbHMsIFtdKTtcblx0ICAgICAgICAvL3NldCB0aGUgY291bnQgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5jb3VudCA9IG9wdGlvbnMuY291bnQ7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZhdE9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3BoYXNlJzogMCxcblx0ICAgICAgICAnc3ByZWFkJzogMjAsXG5cdCAgICAgICAgJ2NvdW50JzogMyxcblx0ICAgICAgICAndHlwZSc6ICdzYXd0b290aCdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnN0b3AodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHJlc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2MucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgb3NjaWxsYXRvcnNcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBpdGVyYXRvciAgVGhlIGl0ZXJhdG9yIGZ1bmN0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLl9mb3JFYWNoID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBpdGVyYXRvci5jYWxsKHRoaXMsIHRoaXMuX29zY2lsbGF0b3JzW2ldLCBpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZhdE9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICBvc2MudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRldHVuZSBzcHJlYWQgYmV0d2VlbiB0aGUgb3NjaWxsYXRvcnMuIElmIFwiY291bnRcIiBpc1xuXHRcdCAqIHNldCB0byAzIG9zY2lsbGF0b3JzIGFuZCB0aGUgXCJzcHJlYWRcIiBpcyBzZXQgdG8gNDAsXG5cdFx0ICogdGhlIHRocmVlIG9zY2lsbGF0b3JzIHdvdWxkIGJlIGRldHVuZWQgbGlrZSB0aGlzOiBbLTIwLCAwLCAyMF1cblx0XHQgKiBmb3IgYSB0b3RhbCBkZXR1bmUgc3ByZWFkIG9mIDQwIGNlbnRzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZhdE9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0NlbnRzfVxuXHRcdCAqIEBuYW1lIHNwcmVhZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zcHJlYWQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3ByZWFkID0gc3ByZWFkO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoID4gMSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gLXNwcmVhZCAvIDI7XG5cdCAgICAgICAgICAgICAgICB2YXIgc3RlcCA9IHNwcmVhZCAvICh0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYywgaSkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9zYy5kZXR1bmUudmFsdWUgPSBzdGFydCArIHN0ZXAgKiBpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2YgZGV0dW5lZCBvc2NpbGxhdG9yc1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZhdE9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBjb3VudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICdjb3VudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGNvdW50KSB7XG5cdCAgICAgICAgICAgIGNvdW50ID0gTWF0aC5tYXgoY291bnQsIDEpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoICE9PSBjb3VudCkge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIHBhcnRpYWxzID0gdGhpcy5wYXJ0aWFscztcblx0ICAgICAgICAgICAgICAgIC8vIHZhciB0eXBlID0gdGhpcy50eXBlO1xuXHQgICAgICAgICAgICAgICAgLy9kaXNwb3NlIHRoZSBwcmV2aW91cyBvc2NpbGxhdG9yc1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBbXTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG9zYy5wYXJ0aWFscyA9IHRoaXMuX3BhcnRpYWxzO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG9zYy50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLnBoYXNlID0gdGhpcy5fcGhhc2U7XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLnZvbHVtZS52YWx1ZSA9IC02IC0gY291bnQgKiAxLjE7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdChvc2MuZnJlcXVlbmN5KTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KG9zYy5kZXR1bmUpO1xuXHQgICAgICAgICAgICAgICAgICAgIG9zYy5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXSA9IG9zYztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIC8vc2V0IHRoZSBzcHJlYWRcblx0ICAgICAgICAgICAgICAgIHRoaXMuc3ByZWFkID0gdGhpcy5fc3ByZWFkO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBvc2Muc3RhcnQoKTtcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgY2FycmllciB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZhdE9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJ0aWFscztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBhcnRpYWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b207XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkZhdE9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2MuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmF0T3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuT21uaU9zY2lsbGF0b3IgYWdncmVnYXRlcyBUb25lLk9zY2lsbGF0b3IsIFRvbmUuUHVsc2VPc2NpbGxhdG9yLFxuXHRcdCAqICAgICAgICAgVG9uZS5QV01Pc2NpbGxhdG9yLCBUb25lLkZNT3NjaWxsYXRvciwgVG9uZS5BTU9zY2lsbGF0b3IsIGFuZCBUb25lLkZhdE9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgIGludG8gb25lIGNsYXNzLiBUaGUgb3NjaWxsYXRvciBjbGFzcyBjYW4gYmUgY2hhbmdlZCBieSBzZXR0aW5nIHRoZSBgdHlwZWAuXG5cdFx0ICogICAgICAgICBgb21uaU9zYy50eXBlID0gXCJwd21cImAgd2lsbCBzZXQgaXQgdG8gdGhlIFRvbmUuUFdNT3NjaWxsYXRvci4gUHJlZml4aW5nXG5cdFx0ICogICAgICAgICBhbnkgb2YgdGhlIGJhc2ljIHR5cGVzIChcInNpbmVcIiwgXCJzcXVhcmU0XCIsIGV0Yy4pIHdpdGggXCJmbVwiLCBcImFtXCIsIG9yIFwiZmF0XCJcblx0XHQgKiAgICAgICAgIHdpbGwgdXNlIHRoZSBGTU9zY2lsbGF0b3IsIEFNT3NjaWxsYXRvciBvciBGYXRPc2NpbGxhdG9yIHJlc3BlY3RpdmVseS5cblx0XHQgKiAgICAgICAgIEZvciBleGFtcGxlOiBgb21uaU9zYy50eXBlID0gXCJmYXRzYXd0b290aFwiYCB3aWxsIGNyZWF0ZSBzZXQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgIHRvIGEgRmF0T3NjaWxsYXRvciBvZiB0eXBlIFwic2F3dG9vdGhcIi5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBpbml0aWFsIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBvbW5pT3NjID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3IoXCJDIzRcIiwgXCJwd21cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuT21uaU9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbFxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvciBzb3VyY2Vcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zb3VyY2VUeXBlID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgLy9zZXQgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICAvL3NldCB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHRoaXMuc2V0KG9wdGlvbnMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT21uaU9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdwaGFzZSc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQGVudW0ge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBPbW5pT3NjVHlwZSA9IHtcblx0ICAgICAgICBQdWxzZTogJ1B1bHNlT3NjaWxsYXRvcicsXG5cdCAgICAgICAgUFdNOiAnUFdNT3NjaWxsYXRvcicsXG5cdCAgICAgICAgT3NjOiAnT3NjaWxsYXRvcicsXG5cdCAgICAgICAgRk06ICdGTU9zY2lsbGF0b3InLFxuXHQgICAgICAgIEFNOiAnQU1Pc2NpbGxhdG9yJyxcblx0ICAgICAgICBGYXQ6ICdGYXRPc2NpbGxhdG9yJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdG8gc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRvIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvci4gQ2FuIGJlIGFueSBvZiB0aGUgYmFzaWMgdHlwZXM6IHNpbmUsIHNxdWFyZSwgdHJpYW5nbGUsIHNhd3Rvb3RoLiBPclxuXHRcdCAqIHByZWZpeCB0aGUgYmFzaWMgdHlwZXMgd2l0aCBcImZtXCIsIFwiYW1cIiwgb3IgXCJmYXRcIiB0byB1c2UgdGhlIEZNT3NjaWxsYXRvciwgQU1Pc2NpbGxhdG9yIG9yIEZhdE9zY2lsbGF0b3Jcblx0XHQgKiB0eXBlcy4gVGhlIG9zY2lsbGF0b3IgY291bGQgYWxzbyBiZSBzZXQgdG8gXCJwd21cIiBvciBcInB1bHNlXCIuIEFsbCBvZiB0aGUgcGFyYW1ldGVycyBvZiB0aGVcblx0XHQgKiBvc2NpbGxhdG9yJ3MgY2xhc3MgYXJlIGFjY2Vzc2libGUgd2hlbiB0aGUgb3NjaWxsYXRvciBpcyBzZXQgdG8gdGhhdCB0eXBlLCBidXQgdGhyb3dzIGFuIGVycm9yXG5cdFx0ICogd2hlbiBpdCdzIG5vdC5cblx0XHQgKlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb21uaU9zYy50eXBlID0gXCJwd21cIjtcblx0XHQgKiAvL21vZHVsYXRpb25GcmVxdWVuY3kgaXMgcGFyYW1ldGVyIHdoaWNoIGlzIGF2YWlsYWJsZVxuXHRcdCAqIC8vb25seSB3aGVuIHRoZSB0eXBlIGlzIFwicHdtXCIuXG5cdFx0ICogb21uaU9zYy5tb2R1bGF0aW9uRnJlcXVlbmN5LnZhbHVlID0gMC41O1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9hbiBzcXVhcmUgd2F2ZSBmcmVxdWVuY3kgbW9kdWxhdGVkIGJ5IGEgc2F3dG9vdGhcblx0XHQgKiBvbW5pT3NjLnR5cGUgPSBcImZtc3F1YXJlXCI7XG5cdFx0ICogb21uaU9zYy5tb2R1bGF0aW9uVHlwZSA9IFwic2F3dG9vdGhcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBwcmVmaXggPSAnJztcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNKSB7XG5cdCAgICAgICAgICAgICAgICBwcmVmaXggPSAnZm0nO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICBwcmVmaXggPSAnYW0nO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgcHJlZml4ID0gJ2ZhdCc7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIHRoaXMuX29zY2lsbGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgaWYgKHR5cGUuc3Vic3RyKDAsIDIpID09PSAnZm0nKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLkZNKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGUuc3Vic3RyKDIpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuc3Vic3RyKDAsIDIpID09PSAnYW0nKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLkFNKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGUuc3Vic3RyKDIpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuc3Vic3RyKDAsIDMpID09PSAnZmF0Jykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5GYXQpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZS5zdWJzdHIoMyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3B3bScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuUFdNKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncHVsc2UnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLlB1bHNlKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuT3NjKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBUaGlzIGlzIG5vdCBhdmFpbGFibGUgb24gXCJwd21cIiBhbmQgXCJwdWxzZVwiIG9zY2lsbGF0b3IgdHlwZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5wYXJ0aWFscztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBhcnRpYWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IucGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgYSBtZW1iZXIvYXR0cmlidXRlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHBhcmFtc1xuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJhbXBUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9tbmlPc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocGFyYW1zLCB2YWx1ZSkge1xuXHQgICAgICAgIC8vbWFrZSBzdXJlIHRoZSB0eXBlIGlzIHNldCBmaXJzdFxuXHQgICAgICAgIGlmIChwYXJhbXMgPT09ICd0eXBlJykge1xuXHQgICAgICAgICAgICB0aGlzLnR5cGUgPSB2YWx1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNPYmplY3QocGFyYW1zKSAmJiBwYXJhbXMuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSkge1xuXHQgICAgICAgICAgICB0aGlzLnR5cGUgPSBwYXJhbXMudHlwZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy90aGVuIHNldCB0aGUgcmVzdFxuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLnNldC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjb25uZWN0IHRoZSBvc2NpbGxhdG9yIHRvIHRoZSBmcmVxdWVuY3kgYW5kIGRldHVuZSBzaWduYWxzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5fY3JlYXRlTmV3T3NjaWxsYXRvciA9IGZ1bmN0aW9uIChvc2NUeXBlKSB7XG5cdCAgICAgICAgaWYgKG9zY1R5cGUgIT09IHRoaXMuX3NvdXJjZVR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlVHlwZSA9IG9zY1R5cGU7XG5cdCAgICAgICAgICAgIHZhciBPc2NpbGxhdG9yQ29uc3RydWN0b3IgPSBUb25lW29zY1R5cGVdO1xuXHQgICAgICAgICAgICAvL3Nob3J0IGRlbGF5IHRvIGF2b2lkIGNsaWNrcyBvbiB0aGUgY2hhbmdlXG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvciAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIG9sZE9zYyA9IHRoaXMuX29zY2lsbGF0b3I7XG5cdCAgICAgICAgICAgICAgICBvbGRPc2Muc3RvcChub3cpO1xuXHQgICAgICAgICAgICAgICAgLy9kaXNwb3NlIHRoZSBvbGQgb25lXG5cdCAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb2xkT3NjLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgICAgICAgICBvbGRPc2MgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgfSwgdGhpcy5ibG9ja1RpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBuZXcgT3NjaWxsYXRvckNvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHRoaXMuX29zY2lsbGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydChub3cpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgd2lkdGggb2YgdGhlIG9zY2lsbGF0b3IgKG9ubHkgaWYgdGhlIG9zY2lsbGF0b3IgaXMgc2V0IHRvIFwicHVsc2VcIilcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQHNpZ25hbFxuXHRcdCAqIEBuYW1lIHdpZHRoXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgb21uaU9zYyA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKDQ0MCwgXCJwdWxzZVwiKTtcblx0XHQgKiAvL2NhbiBhY2Nlc3MgdGhlIHdpZHRoIGF0dHJpYnV0ZSBvbmx5IGlmIHR5cGUgPT09IFwicHVsc2VcIlxuXHRcdCAqIG9tbmlPc2Mud2lkdGgudmFsdWUgPSAwLjI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICd3aWR0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLlB1bHNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci53aWR0aDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBkZXR1bmVkIG9zY2lsbGF0b3JzXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBjb3VudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnY291bnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLmNvdW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjb3VudCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvdW50ID0gY291bnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZXR1bmUgc3ByZWFkIGJldHdlZW4gdGhlIG9zY2lsbGF0b3JzLiBJZiBcImNvdW50XCIgaXNcblx0XHQgKiBzZXQgdG8gMyBvc2NpbGxhdG9ycyBhbmQgdGhlIFwic3ByZWFkXCIgaXMgc2V0IHRvIDQwLFxuXHRcdCAqIHRoZSB0aHJlZSBvc2NpbGxhdG9ycyB3b3VsZCBiZSBkZXR1bmVkIGxpa2UgdGhpczogWy0yMCwgMCwgMjBdXG5cdFx0ICogZm9yIGEgdG90YWwgZGV0dW5lIHNwcmVhZCBvZiA0MCBjZW50cy4gU2VlIFRvbmUuRmF0T3NjaWxsYXRvclxuXHRcdCAqIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0NlbnRzfVxuXHRcdCAqIEBuYW1lIHNwcmVhZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5zcHJlYWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNwcmVhZCA9IHNwcmVhZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yLiBPbmx5IGlmIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogaXMgc2V0IHRvIFwiYW1cIiBvciBcImZtXCIgdHlwZXMuIHNlZS4gVG9uZS5BTU9zY2lsbGF0b3Igb3IgVG9uZS5GTU9zY2lsbGF0b3Jcblx0XHQgKiBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvblR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ21vZHVsYXRpb25UeXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0gfHwgdGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuQU0pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLm1vZHVsYXRpb25UeXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtVHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0gfHwgdGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuQU0pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvblR5cGUgPSBtVHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1vZHVsYXRpb24gaW5kZXggd2hpY2ggaXMgaW4gZXNzZW5jZSB0aGUgZGVwdGggb3IgYW1vdW50IG9mIHRoZSBtb2R1bGF0aW9uLiBJbiBvdGhlciB0ZXJtcyBpdCBpcyB0aGVcblx0XHQgKiByYXRpbyBvZiB0aGUgZnJlcXVlbmN5IG9mIHRoZSBtb2R1bGF0aW5nIHNpZ25hbCAobWYpIHRvIHRoZSBhbXBsaXR1ZGUgb2YgdGhlXG5cdFx0ICogbW9kdWxhdGluZyBzaWduYWwgKG1hKSAtLSBhcyBpbiBtYS9tZi5cblx0XHQgKiBTZWUgVG9uZS5GTU9zY2lsbGF0b3IgZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQHNpZ25hbFxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25JbmRleFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvbkluZGV4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLm1vZHVsYXRpb25JbmRleDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgY2FycmllciBhbmQgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9ycy5cblx0XHQgKiAgQSBoYXJtb25pY2l0eSBvZiAxIGdpdmVzIGJvdGggb3NjaWxsYXRvcnMgdGhlIHNhbWUgZnJlcXVlbmN5LlxuXHRcdCAqICBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLiBTZWUgVG9uZS5BTU9zY2lsbGF0b3Igb3IgVG9uZS5GTU9zY2lsbGF0b3Jcblx0XHQgKiAgZm9yIG1vcmUgaW5mby5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogIEBzaWduYWxcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBoYXJtb25pY2l0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnaGFybW9uaWNpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSB8fCB0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IuaGFybW9uaWNpdHk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtb2R1bGF0aW9uRnJlcXVlbmN5IFNpZ25hbCBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqIChvbmx5IGlmIHRoZSBvc2NpbGxhdG9yIHR5cGUgaXMgc2V0IHRvIHB3bSkuIFNlZVxuXHRcdCAqIFRvbmUuUFdNT3NjaWxsYXRvciBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQHNpZ25hbFxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25GcmVxdWVuY3lcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBvbW5pT3NjID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3IoNDQwLCBcInB3bVwiKTtcblx0XHQgKiAvL2NhbiBhY2Nlc3MgdGhlIG1vZHVsYXRpb25GcmVxdWVuY3kgYXR0cmlidXRlIG9ubHkgaWYgdHlwZSA9PT0gXCJwd21cIlxuXHRcdCAqIG9tbmlPc2MubW9kdWxhdGlvbkZyZXF1ZW5jeS52YWx1ZSA9IDAuMjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ21vZHVsYXRpb25GcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5QV00pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLm1vZHVsYXRpb25GcmVxdWVuY3k7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5PbW5pT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVR5cGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9tbmlPc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJhc2UtY2xhc3MgZm9yIGFsbCBpbnN0cnVtZW50c1xuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5JbnN0cnVtZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvdXRwdXQgYW5kIHZvbHVtZSB0cmltaW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogc291cmNlLnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEtlZXAgdHJhY2sgb2YgYWxsIGV2ZW50cyBzY2hlZHVsZWQgdG8gdGhlIHRyYW5zcG9ydFxuXHRcdFx0ICogd2hlbiB0aGUgaW5zdHJ1bWVudCBpcyAnc3luY2VkJ1xuXHRcdFx0ICogQHR5cGUge0FycmF5PE51bWJlcj59XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzID0gW107XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5JbnN0cnVtZW50LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgYXR0cmlidXRlc1xuXHRcdCAqICBAdHlwZSB7b2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LmRlZmF1bHRzID0ge1xuXHQgICAgICAgIC8qKiB0aGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMgKi9cblx0ICAgICAgICAndm9sdW1lJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBub3RlIHRoZSBub3RlIHRvIHRyaWdnZXJcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRvIHRyaWdnZXIgdGhlIG50b2Vcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgdG8gdHJpZ2dlciB0aGUgbm90ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gVG9uZS5ub09wO1xuXHQgICAgLyoqXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gd2hlbiB0byB0cmlnZ2VyIHRoZSByZWxlYXNlXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gVG9uZS5ub09wO1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBpbnN0cnVtZW50LnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogaW5zdHJ1bWVudC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnQzQnLCAnOG4nLCAwKVxuXHRcdCAqIGluc3RydW1lbnQudHJpZ2dlckF0dGFja1JlbGVhc2UoJ0U0JywgJzhuJywgJzhuJylcblx0XHQgKiBpbnN0cnVtZW50LnRyaWdnZXJBdHRhY2tSZWxlYXNlKCdHNCcsICc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogV3JhcCB0aGUgZ2l2ZW4gbWV0aG9kIHNvIHRoYXQgaXQgY2FuIGJlIHN5bmNocm9uaXplZFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2QgV2hpY2ggbWV0aG9kIHRvIHdyYXAgYW5kIHN5bmNcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWVQb3NpdGlvbiBXaGF0IHBvc2l0aW9uIHRoZSB0aW1lIGFyZ3VtZW50IGFwcGVhcnMgaW5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5fc3luY01ldGhvZCA9IGZ1bmN0aW9uIChtZXRob2QsIHRpbWVQb3NpdGlvbikge1xuXHQgICAgICAgIHZhciBvcmlnaW5hbE1ldGhvZCA9IHRoaXNbJ19vcmlnaW5hbF8nICsgbWV0aG9kXSA9IHRoaXNbbWV0aG9kXTtcblx0ICAgICAgICB0aGlzW21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgdmFyIHRpbWUgPSBhcmdzW3RpbWVQb3NpdGlvbl07XG5cdCAgICAgICAgICAgIHZhciBpZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgICAgICBhcmdzW3RpbWVQb3NpdGlvbl0gPSB0O1xuXHQgICAgICAgICAgICAgICAgb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cy5wdXNoKGlkKTtcblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVW5zeW5jIHRoZSBpbnN0cnVtZW50IGZyb20gdGhlIFRyYW5zcG9ydFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihpZCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzID0gW107XG5cdCAgICAgICAgaWYgKHRoaXMuX29yaWdpbmFsX3RyaWdnZXJBdHRhY2spIHtcblx0ICAgICAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrID0gdGhpcy5fb3JpZ2luYWxfdHJpZ2dlckF0dGFjaztcblx0ICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSA9IHRoaXMuX29yaWdpbmFsX3RyaWdnZXJSZWxlYXNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrIGFuZCB0aGVuIHRoZSByZWxlYXNlIGFmdGVyIHRoZSBkdXJhdGlvbi5cblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byB0cmlnZ2VyLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgbm90ZSBzaG91bGQgYmUgaGVsZCBmb3IgYmVmb3JlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJpbmcgdGhlIHJlbGVhc2UuIFRoaXMgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddICBXaGVuIHRoZSBub3RlIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IHRoZSBub3RlIHNob3VsZCBiZSB0cmlnZ2VyZWQgYXQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgXCJDNFwiIGZvciB0aGUgZHVyYXRpb24gb2YgYW4gOHRoIG5vdGVcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGUsIGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sobm90ZSwgdGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsndm9sdW1lJ10pO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnVuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuSW5zdHJ1bWVudDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUaGlzIGlzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIG90aGVyIG1vbm9waG9uaWMgaW5zdHJ1bWVudHMgdG8gXG5cdFx0ICogICAgICAgICAgZXh0ZW5kLiBJTVBPUlRBTlQ6IEl0IGRvZXMgbm90IG1ha2UgYW55IHNvdW5kIG9uIGl0cyBvd24gYW5kXG5cdFx0ICogICAgICAgICAgc2hvdWxkbid0IGJlIGRpcmVjdGx5IGluc3RhbnRpYXRlZC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Nb25vcGhvbmljLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2xpZGUgdGltZSBiZXR3ZWVuIG5vdGVzLiBcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucG9ydGFtZW50byA9IG9wdGlvbnMucG9ydGFtZW50bztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1vbm9waG9uaWMsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5kZWZhdWx0cyA9IHsgJ3BvcnRhbWVudG8nOiAwIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrIG9mIHRoZSBub3RlIG9wdGlvbmFsbHkgd2l0aCBhIGdpdmVuIHZlbG9jaXR5LiBcblx0XHQgKiAgXG5cdFx0ICogIFxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHRyaWdnZXIuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIFdoZW4gdGhlIG5vdGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB2ZWxvY2l0eSBUaGUgdmVsb2NpdHkgc2NhbGVyIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVzIGhvdyBcImxvdWRcIiB0aGUgbm90ZSBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9waG9uaWN9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrKFwiQzRcIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIHRoZSBub3RlIGEgaGFsZiBzZWNvbmQgZnJvbSBub3cgYXQgaGFsZiB2ZWxvY2l0eVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2soXCJDNFwiLCBcIiswLjVcIiwgMC41KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMuc2V0Tm90ZShub3RlLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIElmIG5vIHRpbWUgaXMgZ2l2ZW4sIHRoZSByZWxlYXNlIGhhcHBlbnMgaW1tZWRpYXRseVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vcGhvbmljfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc3ludGgudHJpZ2dlclJlbGVhc2UoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBvdmVycmlkZSB0aGlzIG1ldGhvZCB3aXRoIHRoZSBhY3R1YWwgbWV0aG9kXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBvdmVycmlkZSB0aGlzIG1ldGhvZCB3aXRoIHRoZSBhY3R1YWwgbWV0aG9kXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBsZXZlbCBvZiB0aGUgb3V0cHV0IGF0IHRoZSBnaXZlbiB0aW1lLiBNZWFzdXJlc1xuXHRcdCAqICB0aGUgZW52ZWxvcGUocykgdmFsdWUgYXQgdGhlIHRpbWUuIFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gcXVlcnkgdGhlIGVudmVsb3BlIHZhbHVlXG5cdFx0ICogIEByZXR1cm4ge05vcm1hbFJhbmdlfSBUaGUgb3V0cHV0IGxldmVsIGJldHdlZW4gMC0xXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmdldExldmVsQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZW52ZWxvcGUuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gSWYgbm8gdGltZSBpcyBnaXZlbiwgdGhlIG5vdGVcblx0XHQgKiAgd2lsbCBzZXQgaW1tZWRpYXRlbHkuIFxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gbm90ZSBUaGUgbm90ZSB0byBjaGFuZ2UgdG8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgbm90ZSBzaG91bGQgYmUgc2V0LiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub3Bob25pY30gdGhpc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jaGFuZ2UgdG8gRiM2IGluIG9uZSBxdWFydGVyIG5vdGUgZnJvbSBub3cuXG5cdFx0ICogc3ludGguc2V0Tm90ZShcIkYjNlwiLCBcIis0blwiKTtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2hhbmdlIHRvIEJiNCByaWdodCBub3dcblx0XHQgKiBzeW50aC5zZXROb3RlKFwiQmI0XCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5zZXROb3RlID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMucG9ydGFtZW50byA+IDAgJiYgdGhpcy5nZXRMZXZlbEF0VGltZSh0aW1lKSA+IDAuMDUpIHtcblx0ICAgICAgICAgICAgdmFyIHBvcnRUaW1lID0gdGhpcy50b1NlY29uZHModGhpcy5wb3J0YW1lbnRvKTtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG8obm90ZSwgcG9ydFRpbWUsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKG5vdGUsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Nb25vcGhvbmljO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuU3ludGggaXMgY29tcG9zZWQgc2ltcGx5IG9mIGEgVG9uZS5PbW5pT3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgIHJvdXRlZCB0aHJvdWdoIGEgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZS5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMS0xXzBZVzJaMUoyRVBJMzZQOGZOQ01jWkc3TjF3MUdabHVQczRvZzRldm8vcHViP3c9MTE2MyZoPTIzMVwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLlN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9tbmlPc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3Iob3B0aW9ucy5vc2NpbGxhdG9yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMub3NjaWxsYXRvci5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIG9zY2lsbGF0b3JzIHRvIHRoZSBvdXRwdXRcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuY2hhaW4odGhpcy5lbnZlbG9wZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICd0cmlhbmdsZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4xLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAuMyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAxXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIC8vdGhlIGVudmVsb3Blc1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIC8vaWYgdGhlcmUgaXMgbm8gcmVsZWFzZSBwb3J0aW9uLCBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgICAgaWYgKHRoaXMuZW52ZWxvcGUuc3VzdGFpbiA9PT0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5hdHRhY2sgKyB0aGlzLmVudmVsb3BlLmRlY2F5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgcmVsZWFzZSBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEFNU3ludGggdXNlcyB0aGUgb3V0cHV0IG9mIG9uZSBUb25lLlN5bnRoIHRvIG1vZHVsYXRlIHRoZVxuXHRcdCAqICAgICAgICAgIGFtcGxpdHVkZSBvZiBhbm90aGVyIFRvbmUuU3ludGguIFRoZSBoYXJtb25pY2l0eSAodGhlIHJhdGlvIGJldHdlZW5cblx0XHQgKiAgICAgICAgICB0aGUgdHdvIHNpZ25hbHMpIGFmZmVjdHMgdGhlIHRpbWJyZSBvZiB0aGUgb3V0cHV0IHNpZ25hbCBncmVhdGx5LlxuXHRcdCAqICAgICAgICAgIFJlYWQgbW9yZSBhYm91dCBBbXBsaXR1ZGUgTW9kdWxhdGlvbiBTeW50aGVzaXMgb25cblx0XHQgKiAgICAgICAgICBbU291bmRPblNvdW5kXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA0MDQxMDM2NTMvaHR0cDovL3d3dy5zb3VuZG9uc291bmQuY29tOjgwL3Nvcy9tYXIwMC9hcnRpY2xlcy9zeW50aHNlY3JldHMuaHRtKS5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMVRRdThFZDRpRnIxWVRMS3BCM1UxX2h1ci1Vd0JyaDVnZEJYYzhCeGZHS3cvcHViP3c9MTAwOSZoPTQ1N1wiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuQU1TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuQU1TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIgdm9pY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3ludGh9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBuZXcgVG9uZS5TeW50aCgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyJ3Mgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSB0aGlzLl9jYXJyaWVyLm9zY2lsbGF0b3I7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIncyBlbnZlbG9wZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IHRoaXMuX2NhcnJpZXIuZW52ZWxvcGUuc2V0KG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3Igdm9pY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3ludGh9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLlN5bnRoKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yJ3Mgb3NjaWxsYXRvciB3aGljaCBpcyBhcHBsaWVkXG5cdFx0XHQgKiAgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSB0aGlzLl9tb2R1bGF0b3Iub3NjaWxsYXRvci5zZXQob3B0aW9ucy5tb2R1bGF0aW9uKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkVudmVsb3BlID0gdGhpcy5fbW9kdWxhdG9yLmVudmVsb3BlLnNldChvcHRpb25zLm1vZHVsYXRpb25FbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDQ0MCwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBpbiBjZW50c1xuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcy4gQSBoYXJtb25pY2l0eSBvZlxuXHRcdFx0ICogIDEgaXMgbm8gY2hhbmdlLiBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdm9pY2UxIGFuIG9jdGF2ZSBiZWxvdyB2b2ljZTBcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29udmVydCB0aGUgLTEsMSBvdXRwdXQgdG8gMCwxXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQXVkaW9Ub0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIG1vZHVsYXRpb24gaGFwcGVuc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29udHJvbCB0aGUgdHdvIHZvaWNlcyBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5mYW4odGhpcy5fY2Fycmllci5kZXR1bmUsIHRoaXMuX21vZHVsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jaGFpbih0aGlzLl9tb2R1bGF0aW9uU2NhbGUsIHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY2hhaW4odGhpcy5fbW9kdWxhdGlvbk5vZGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BTVN5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAzLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMDEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uJzogeyAndHlwZSc6ICdzcXVhcmUnIH0sXG5cdCAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMCxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdHJpZ2dlciB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgb2NjdXJcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BTVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICAvL3RoZSBwb3J0IGdsaWRlXG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vdGhlIGVudmVsb3Blc1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCByZWxlYXNlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BTVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbicsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25FbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BTVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTW9ub1N5bnRoIGlzIGNvbXBvc2VkIG9mIG9uZSBvc2NpbGxhdG9yLCBvbmUgZmlsdGVyLCBhbmQgdHdvIGVudmVsb3Blcy5cblx0XHQgKiAgICAgICAgICBUaGUgYW1wbGl0dWRlIG9mIHRoZSBUb25lLk9zY2lsbGF0b3IgYW5kIHRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZVxuXHRcdCAqICAgICAgICAgIFRvbmUuRmlsdGVyIGFyZSBjb250cm9sbGVkIGJ5IFRvbmUuRW52ZWxvcGVzLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xZ2FZMURGOV9IemtvZHFmOEpJMUNnMlZaZndTRWxwRlFmSTk0SVF3YWQzOC9wdWI/dz05MjQmaD0yNDBcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5Nb25vU3ludGgoe1xuXHRcdCAqIFx0XCJvc2NpbGxhdG9yXCIgOiB7XG5cdFx0ICogXHRcdFwidHlwZVwiIDogXCJzcXVhcmVcIlxuXHRcdCAqICB9LFxuXHRcdCAqICBcImVudmVsb3BlXCIgOiB7XG5cdFx0ICogIFx0XCJhdHRhY2tcIiA6IDAuMVxuXHRcdCAqICB9XG5cdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1vbm9TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT21uaU9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihvcHRpb25zLm9zY2lsbGF0b3IpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5vc2NpbGxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5vc2NpbGxhdG9yLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlsdGVyLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmlsdGVyID0gbmV3IFRvbmUuRmlsdGVyKG9wdGlvbnMuZmlsdGVyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlsdGVyIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZyZXF1ZW5jeUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZSA9IG5ldyBUb25lLkZyZXF1ZW5jeUVudmVsb3BlKG9wdGlvbnMuZmlsdGVyRW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBvc2NpbGxhdG9ycyB0byB0aGUgb3V0cHV0XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmNoYWluKHRoaXMuZmlsdGVyLCB0aGlzLmVudmVsb3BlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBmaWx0ZXIgZW52ZWxvcGVcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlLmNvbm5lY3QodGhpcy5maWx0ZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZmlsdGVyJyxcblx0ICAgICAgICAgICAgJ2ZpbHRlckVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9ub1N5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogJ0M0Jyxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc3F1YXJlJyB9LFxuXHQgICAgICAgICdmaWx0ZXInOiB7XG5cdCAgICAgICAgICAgICdRJzogNixcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnbG93cGFzcycsXG5cdCAgICAgICAgICAgICdyb2xsb2ZmJzogLTI0XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4xLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAuOSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAxXG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnZmlsdGVyRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjA2LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjIsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMC41LFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDIsXG5cdCAgICAgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICAgICAnb2N0YXZlcyc6IDcsXG5cdCAgICAgICAgICAgICdleHBvbmVudCc6IDJcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBhdHRhY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub1N5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuZW52ZWxvcGUuc3VzdGFpbiA9PT0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5hdHRhY2sgKyB0aGlzLmVudmVsb3BlLmRlY2F5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgcmVsZWFzZSBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub1N5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub1N5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZmlsdGVyJyxcblx0ICAgICAgICAgICAgJ2ZpbHRlckVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZpbHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9ub1N5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRHVvU3ludGggaXMgYSBtb25vcGhvbmljIHN5bnRoIGNvbXBvc2VkIG9mIHR3b1xuXHRcdCAqICAgICAgICAgIE1vbm9TeW50aHMgcnVuIGluIHBhcmFsbGVsIHdpdGggY29udHJvbCBvdmVyIHRoZVxuXHRcdCAqICAgICAgICAgIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSB0d28gdm9pY2VzIGFuZCB2aWJyYXRvIGVmZmVjdC5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMWJMNEdYdmZSTU1scVM3WHlCbTlDakw5S0pQU1VLYmNkQk5wcU9sa0ZMeGsvcHViP3c9MTAxMiZoPTQ0OFwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBkdW9TeW50aCA9IG5ldyBUb25lLkR1b1N5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBkdW9TeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuRHVvU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmaXJzdCB2b2ljZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1vbm9TeW50aH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9pY2UwID0gbmV3IFRvbmUuTW9ub1N5bnRoKG9wdGlvbnMudm9pY2UwKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHNlY29uZCB2b2ljZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1vbm9TeW50aH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9pY2UxID0gbmV3IFRvbmUuTW9ub1N5bnRoKG9wdGlvbnMudm9pY2UxKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMS52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZpYnJhdG8gTEZPLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdmlicmF0byA9IG5ldyBUb25lLkxGTyhvcHRpb25zLnZpYnJhdG9SYXRlLCAtNTAsIDUwKTtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvLnN0YXJ0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiB0aGUgdmlicmF0byBmcmVxdWVuY3lcblx0XHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZpYnJhdG9SYXRlID0gdGhpcy5fdmlicmF0by5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHZpYnJhdG8gZ2FpblxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG9HYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnZpYnJhdG9BbW91bnQsIFRvbmUuVHlwZS5Qb3NpdGl2ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgYW1vdW50IG9mIHZpYnJhdG9cblx0XHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmlicmF0b0Ftb3VudCA9IHRoaXMuX3ZpYnJhdG9HYWluLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZyZXF1ZW5jeSBjb250cm9sXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbCg0NDAsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSByYXRpbyBiZXR3ZWVuIHRoZSB0d28gdm9pY2VzLiBBIGhhcm1vbmljaXR5IG9mXG5cdFx0XHQgKiAgMSBpcyBubyBjaGFuZ2UuIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy9waXRjaCB2b2ljZTEgYW4gb2N0YXZlIGJlbG93IHZvaWNlMFxuXHRcdFx0ICogZHVvU3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIHR3byB2b2ljZXMgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLnZvaWNlMC5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMudm9pY2UxLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0by5jb25uZWN0KHRoaXMuX3ZpYnJhdG9HYWluKTtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2Fpbi5mYW4odGhpcy52b2ljZTAuZGV0dW5lLCB0aGlzLnZvaWNlMS5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3ZvaWNlMCcsXG5cdCAgICAgICAgICAgICd2b2ljZTEnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3ZpYnJhdG9BbW91bnQnLFxuXHQgICAgICAgICAgICAndmlicmF0b1JhdGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5EdW9TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2aWJyYXRvQW1vdW50JzogMC41LFxuXHQgICAgICAgICd2aWJyYXRvUmF0ZSc6IDUsXG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMS41LFxuXHQgICAgICAgICd2b2ljZTAnOiB7XG5cdCAgICAgICAgICAgICd2b2x1bWUnOiAtMTAsXG5cdCAgICAgICAgICAgICdwb3J0YW1lbnRvJzogMCxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgICAgICdmaWx0ZXJFbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAgICAgJ2RlY2F5JzogMCxcblx0ICAgICAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAgICAgJ2RlY2F5JzogMCxcblx0ICAgICAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICd2b2ljZTEnOiB7XG5cdCAgICAgICAgICAgICd2b2x1bWUnOiAtMTAsXG5cdCAgICAgICAgICAgICdwb3J0YW1lbnRvJzogMCxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgICAgICdmaWx0ZXJFbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAgICAgJ2RlY2F5JzogMCxcblx0ICAgICAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAgICAgJ2RlY2F5JzogMCxcblx0ICAgICAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVzXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBhdHRhY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRHVvU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3Blc1xuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgcmVsZWFzZSBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRHVvU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBsZXZlbCBvZiB0aGUgb3V0cHV0IGF0IHRoZSBnaXZlbiB0aW1lLiBNZWFzdXJlc1xuXHRcdCAqICB0aGUgZW52ZWxvcGUocykgdmFsdWUgYXQgdGhlIHRpbWUuIFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gcXVlcnkgdGhlIGVudmVsb3BlIHZhbHVlXG5cdFx0ICogIEByZXR1cm4ge05vcm1hbFJhbmdlfSBUaGUgb3V0cHV0IGxldmVsIGJldHdlZW4gMC0xXG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLnByb3RvdHlwZS5nZXRMZXZlbEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuICh0aGlzLnZvaWNlMC5nZXRMZXZlbEF0VGltZSh0aW1lKSArIHRoaXMudm9pY2UxLmdldExldmVsQXRUaW1lKHRpbWUpKSAvIDI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkR1b1N5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3ZvaWNlMCcsXG5cdCAgICAgICAgICAgICd2b2ljZTEnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3ZpYnJhdG9BbW91bnQnLFxuXHQgICAgICAgICAgICAndmlicmF0b1JhdGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMudm9pY2UwID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvaWNlMS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG9HYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZpYnJhdG9BbW91bnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMudmlicmF0b0Ftb3VudCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52aWJyYXRvUmF0ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRHVvU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgRk1TeW50aCBpcyBjb21wb3NlZCBvZiB0d28gVG9uZS5TeW50aHMgd2hlcmUgb25lIFRvbmUuU3ludGggbW9kdWxhdGVzXG5cdFx0ICogICAgICAgICAgdGhlIGZyZXF1ZW5jeSBvZiBhIHNlY29uZCBUb25lLlN5bnRoLiBBIGxvdCBvZiBzcGVjdHJhbCBjb250ZW50XG5cdFx0ICogICAgICAgICAgY2FuIGJlIGV4cGxvcmVkIHVzaW5nIHRoZSBtb2R1bGF0aW9uSW5kZXggcGFyYW1ldGVyLiBSZWFkIG1vcmUgYWJvdXRcblx0XHQgKiAgICAgICAgICBmcmVxdWVuY3kgbW9kdWxhdGlvbiBzeW50aGVzaXMgb24gU291bmQgT24gU291bmQ6IFtQYXJ0IDFdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwMzEyMzcwNC9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL2FwcjAwL2FydGljbGVzL3N5bnRoc2VjcmV0cy5odG0pLCBbUGFydCAyXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA0MDMxMTU4MzUvaHR0cDovL3d3dy5zb3VuZG9uc291bmQuY29tL3Nvcy9tYXkwMC9hcnRpY2xlcy9zeW50aC5odG0pLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xaDBQVURaWFBnaTRJa3g2YlZUNm9uY3JZUExsdUZLeTdsajUzcHV4ai1ETS9wdWI/dz05MDImaD00NjJcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZm1TeW50aCA9IG5ldyBUb25lLkZNU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIGZtU3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNVwiLCBcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuRk1TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIgdm9pY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3ludGh9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBuZXcgVG9uZS5TeW50aChvcHRpb25zLmNhcnJpZXIpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyJ3Mgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSB0aGlzLl9jYXJyaWVyLm9zY2lsbGF0b3I7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIncyBlbnZlbG9wZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gdGhpcy5fY2Fycmllci5lbnZlbG9wZS5zZXQob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuU3ludGgob3B0aW9ucy5tb2R1bGF0b3IpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvcidzIG9zY2lsbGF0b3Igd2hpY2ggaXMgYXBwbGllZFxuXHRcdFx0ICogIHRvIHRoZSBhbXBsaXR1ZGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uID0gdGhpcy5fbW9kdWxhdG9yLm9zY2lsbGF0b3Iuc2V0KG9wdGlvbnMubW9kdWxhdGlvbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkVudmVsb3BlID0gdGhpcy5fbW9kdWxhdG9yLmVudmVsb3BlLnNldChvcHRpb25zLm1vZHVsYXRpb25FbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoNDQwLCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSByYXRpbyBiZXR3ZWVuIHRoZSB0d28gdm9pY2VzLiBBIGhhcm1vbmljaXR5IG9mXG5cdFx0XHQgKiAgMSBpcyBubyBjaGFuZ2UuIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy9waXRjaCB2b2ljZTEgYW4gb2N0YXZlIGJlbG93IHZvaWNlMFxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGlvbiBpbmRleCB3aGljaCBlc3NlbnRpYWxseSB0aGUgZGVwdGggb3IgYW1vdW50IG9mIHRoZSBtb2R1bGF0aW9uLiBJdCBpcyB0aGVcblx0XHRcdCAqICByYXRpbyBvZiB0aGUgZnJlcXVlbmN5IG9mIHRoZSBtb2R1bGF0aW5nIHNpZ25hbCAobWYpIHRvIHRoZSBhbXBsaXR1ZGUgb2YgdGhlXG5cdFx0XHQgKiAgbW9kdWxhdGluZyBzaWduYWwgKG1hKSAtLSBhcyBpbiBtYS9tZi5cblx0XHRcdCAqXHRAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKlx0QHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXggPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLm1vZHVsYXRpb25JbmRleCk7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXgudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIG1vZHVsYXRpb24gaGFwcGVuc1xuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKDApO1xuXHQgICAgICAgIC8vY29udHJvbCB0aGUgdHdvIHZvaWNlcyBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLm1vZHVsYXRpb25JbmRleCwgdGhpcy5fbW9kdWxhdGlvbk5vZGUpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmZhbih0aGlzLl9jYXJyaWVyLmRldHVuZSwgdGhpcy5fbW9kdWxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNvbm5lY3QodGhpcy5fbW9kdWxhdGlvbk5vZGUuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jyxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbicsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRk1TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMyxcblx0ICAgICAgICAnbW9kdWxhdGlvbkluZGV4JzogMTAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4wMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ21vZHVsYXRpb24nOiB7ICd0eXBlJzogJ3NxdWFyZScgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC41LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0dHJpZ2dlciB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgb2NjdXJcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRk1TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vdGhlIGVudmVsb3Blc1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCByZWxlYXNlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZNU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRk1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25FbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GTVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTWVtYnJhbmVTeW50aCBtYWtlcyBraWNrIGFuZCB0b20gc291bmRzIHVzaW5nIGEgc2luZ2xlIG9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgICB3aXRoIGFuIGFtcGxpdHVkZSBlbnZlbG9wZSBhbmQgZnJlcXVlbmN5IHJhbXAuIEEgVG9uZS5PbW5pT3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgIGlzIHJvdXRlZCB0aHJvdWdoIGEgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSB0byB0aGUgb3V0cHV0LiBUaGUgZHJ1bVxuXHRcdCAqICAgICAgICAgIHF1YWxpdHkgb2YgdGhlIHNvdW5kIGNvbWVzIGZyb20gdGhlIGZyZXF1ZW5jeSBlbnZlbG9wZSBhcHBsaWVkXG5cdFx0ICogICAgICAgICAgZHVyaW5nIFRvbmUuTWVtYnJhbmVTeW50aC50cmlnZ2VyQXR0YWNrKG5vdGUpLiBUaGUgZnJlcXVlbmN5IGVudmVsb3BlXG5cdFx0ICogICAgICAgICAgc3RhcnRzIGF0IDxjb2RlPm5vdGUgKiAub2N0YXZlczwvY29kZT4gYW5kIHJhbXBzIHRvIDxjb2RlPm5vdGU8L2NvZGU+XG5cdFx0ICogICAgICAgICAgb3ZlciB0aGUgZHVyYXRpb24gb2YgPGNvZGU+LnBpdGNoRGVjYXk8L2NvZGU+LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLk1lbWJyYW5lU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzJcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1lbWJyYW5lU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9tbmlPc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3Iob3B0aW9ucy5vc2NpbGxhdG9yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyB0aGUgcGl0Y2ggZW52ZWxvcGUgcmFtcHMuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSB0aGUgZnJlcXVlbmN5IGVudmVsb3BlIHRha2VzLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5waXRjaERlY2F5ID0gb3B0aW9ucy5waXRjaERlY2F5O1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5jaGFpbih0aGlzLmVudmVsb3BlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1lbWJyYW5lU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwaXRjaERlY2F5JzogMC4wNSxcblx0ICAgICAgICAnb2N0YXZlcyc6IDEwLFxuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjQsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMC4wMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAxLjQsXG5cdCAgICAgICAgICAgICdhdHRhY2tDdXJ2ZSc6ICdleHBvbmVudGlhbCdcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHRpbWUgd2l0aCB0aGUgZ2l2ZW4gdmVsb2NpdHkuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICB0aGUgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICAgICB0aGUgdGltZSwgaWYgbm90IGdpdmVuIGlzIG5vd1xuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB2ZWxvY2l0eSBkZWZhdWx0cyB0byAxXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lbWJyYW5lU3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAga2ljay50cmlnZ2VyQXR0YWNrKDYwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBub3RlID0gdGhpcy50b0ZyZXF1ZW5jeShub3RlKTtcblx0ICAgICAgICB2YXIgbWF4Tm90ZSA9IG5vdGUgKiB0aGlzLm9jdGF2ZXM7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZShtYXhOb3RlLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5LmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUobm90ZSwgdGltZSArIHRoaXMudG9TZWNvbmRzKHRoaXMucGl0Y2hEZWNheSkpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIG5vdGUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIHJlbGVhc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVtYnJhbmVTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZW1icmFuZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWVtYnJhbmVTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEluaGFybW9uaWMgcmF0aW8gb2YgZnJlcXVlbmNpZXMgYmFzZWQgb24gdGhlIFJvbGFuZCBUUi04MDhcblx0XHQgKiAgVGFrZW4gZnJvbSBodHRwczovL2Njcm1hLnN0YW5mb3JkLmVkdS9wYXBlcnMvdHItODA4LWN5bWJhbC1waHlzaWNhbGx5LWluZm9ybWVkLWNpcmN1aXQtYmVuZGFibGUtZGlnaXRhbC1tb2RlbFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBpbmhhcm1SYXRpb3MgPSBbXG5cdCAgICAgICAgMSxcblx0ICAgICAgICAxLjQ4Myxcblx0ICAgICAgICAxLjkzMixcblx0ICAgICAgICAyLjU0Nixcblx0ICAgICAgICAyLjYzLFxuXHQgICAgICAgIDMuODk3XG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBoaWdobHkgaW5oYXJtb25pYyBhbmQgc3BlY3RyYWxseSBjb21wbGV4IHNvdXJjZSB3aXRoIGEgaGlnaHBhc3MgZmlsdGVyXG5cdFx0ICogICAgICAgICAgYW5kIGFtcGxpdHVkZSBlbnZlbG9wZSB3aGljaCBpcyBnb29kIGZvciBtYWtpbmcgbWV0YWxvcGhvbmUgc291bmRzLiBCYXNlZFxuXHRcdCAqICAgICAgICAgIG9uIEN5bWJhbFN5bnRoIGJ5IFtAcG9seXJoeXRobWF0aWNdKGh0dHBzOi8vZ2l0aHViLmNvbS9wb2x5cmh5dGhtYXRpYykuXG5cdFx0ICogICAgICAgICAgSW5zcGlyYXRpb24gZnJvbSBbU291bmQgb24gU291bmRdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDYxMDE0MzkyNC9odHRwczovL3d3dy5zb3VuZG9uc291bmQuY29tL3Nvcy9qdWwwMi9hcnRpY2xlcy9zeW50aHNlY3JldHMwNzAyLmFzcCkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgYXZhaWxibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1ldGFsU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIGN5bWJhbFxuXHRcdFx0ICogIEB0eXBlICB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXJyYXkgb2YgRk1Pc2NpbGxhdG9yc1xuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBtdWx0aXBsaWVyc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZnJlcU11bHRpcGxpZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBmb3IgdGhlIGJvZHlcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZSA9IG5ldyBUb25lLkdhaW4oMCkuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaGlnaHBhc3MgdGhlIG91dHB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faGlnaHBhc3MgPSBuZXcgVG9uZS5GaWx0ZXIoe1xuXHQgICAgICAgICAgICAndHlwZSc6ICdoaWdocGFzcycsXG5cdCAgICAgICAgICAgICdRJzogLTMuMDEwMjk5OTU2NjM5ODEyNVxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5fYW1wbGl0dWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyB0aGUgaGlnaHBhc3Ncblx0XHRcdCAqICBmaWx0ZXIgZnJlcXVlbmN5IHJhbXBzXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTY2FsZSB0aGUgYm9keSBlbnZlbG9wZVxuXHRcdFx0ICogIGZvciB0aGUgYmFuZHBhc3Ncblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlciA9IG5ldyBUb25lLlNjYWxlKG9wdGlvbnMucmVzb25hbmNlLCA3MDAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZW52ZWxvcGUgd2hpY2ggaXMgY29ubmVjdGVkIGJvdGggdG8gdGhlXG5cdFx0XHQgKiAgYW1wbGl0dWRlIGFuZCBoaWdocGFzcyBmaWx0ZXIncyBjdXRvZmYgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkVudmVsb3BlKHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IG9wdGlvbnMuZW52ZWxvcGUuYXR0YWNrLFxuXHQgICAgICAgICAgICAnYXR0YWNrQ3VydmUnOiAnbGluZWFyJyxcblx0ICAgICAgICAgICAgJ2RlY2F5Jzogb3B0aW9ucy5lbnZlbG9wZS5kZWNheSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IG9wdGlvbnMuZW52ZWxvcGUucmVsZWFzZVxuXHQgICAgICAgIH0pLmNoYWluKHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIsIHRoaXMuX2hpZ2hwYXNzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5jb25uZWN0KHRoaXMuX2FtcGxpdHVlLmdhaW4pO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5oYXJtUmF0aW9zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBvc2MgPSBuZXcgVG9uZS5GTU9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICAgICAgJ3R5cGUnOiAnc3F1YXJlJyxcblx0ICAgICAgICAgICAgICAgICdtb2R1bGF0aW9uVHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jzogb3B0aW9ucy5oYXJtb25pY2l0eSxcblx0ICAgICAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnOiBvcHRpb25zLm1vZHVsYXRpb25JbmRleFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgb3NjLmNvbm5lY3QodGhpcy5faGlnaHBhc3MpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXSA9IG9zYztcblx0ICAgICAgICAgICAgdmFyIG11bHQgPSBuZXcgVG9uZS5NdWx0aXBseShpbmhhcm1SYXRpb3NbaV0pO1xuXHQgICAgICAgICAgICB0aGlzLl9mcmVxTXVsdGlwbGllcnNbaV0gPSBtdWx0O1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbihtdWx0LCBvc2MuZnJlcXVlbmN5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zZXQgdGhlIG9jdGF2ZXNcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NZXRhbFN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDIwMCxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMS40LFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuMlxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogNS4xLFxuXHQgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnOiAzMixcblx0ICAgICAgICAncmVzb25hbmNlJzogNDAwMCxcblx0ICAgICAgICAnb2N0YXZlcyc6IDEuNVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2suXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICAgICAgV2hlbiB0aGUgYXR0YWNrIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSAgW3ZlbG9jaXR5PTFdICBUaGUgdmVsb2NpdHkgdGhhdCB0aGUgZW52ZWxvcGUgc2hvdWxkIGJlIHRyaWdnZXJlZCBhdC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTWV0YWxTeW50aH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWwpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmVsID0gVG9uZS5kZWZhdWx0QXJnKHZlbCwgMSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMuZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdGFydCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL2lmIHRoZSBzdXN0YWluIGlzIDAsIHN0b3AgdGhlIG9zY2lsbGF0b3IgYXMgd2VsbFxuXHQgICAgICAgIGlmICh0aGlzLmVudmVsb3BlLnN1c3RhaW4gPT09IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMuZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICBvc2Muc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5hdHRhY2sgKyB0aGlzLmVudmVsb3BlLmRlY2F5KTtcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2Ugb2YgdGhlIGVudmVsb3BlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgICAgIFdoZW4gdGhlIHJlbGVhc2Ugc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTWV0YWxTeW50aH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzLmZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogc3ludGguc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAwKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc4bicpXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyQXR0YWNrJywgMCk7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlclJlbGVhc2UnLCAwKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIG9mIHRoZSBlbnZlbG9wZSBhZnRlciB0aGUgZ2l2ZW5cblx0XHQgKiAgZHVyYXRpb24uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICBkdXJhdGlvbiAgVGhlIGR1cmF0aW9uIGJlZm9yZSB0cmlnZ2VyaW5nIHRoZSByZWxlYXNlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICAgICAgV2hlbiB0aGUgYXR0YWNrIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSAgW3ZlbG9jaXR5PTFdICBUaGUgdmVsb2NpdHkgdGhhdCB0aGUgZW52ZWxvcGUgc2hvdWxkIGJlIHRyaWdnZXJlZCBhdC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTWV0YWxTeW50aH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAoZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSh0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbW9kdWxhdGlvbkluZGV4IG9mIHRoZSBvc2NpbGxhdG9ycyB3aGljaCBtYWtlIHVwIHRoZSBzb3VyY2UuXG5cdFx0ICogIHNlZSBUb25lLkZNT3NjaWxsYXRvci5tb2R1bGF0aW9uSW5kZXhcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTWV0YWxTeW50aCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSAgbW9kdWxhdGlvbkluZGV4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZSwgJ21vZHVsYXRpb25JbmRleCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3JzWzBdLm1vZHVsYXRpb25JbmRleC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXS5tb2R1bGF0aW9uSW5kZXgudmFsdWUgPSB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgaGFybW9uaWNpdHkgb2YgdGhlIG9zY2lsbGF0b3JzIHdoaWNoIG1ha2UgdXAgdGhlIHNvdXJjZS5cblx0XHQgKiAgc2VlIFRvbmUuRk1Pc2NpbGxhdG9yLmhhcm1vbmljaXR5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk1ldGFsU3ludGgjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgIGhhcm1vbmljaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZSwgJ2hhcm1vbmljaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvcnNbMF0uaGFybW9uaWNpdHkudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0uaGFybW9uaWNpdHkudmFsdWUgPSB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBoaWdocGFzcyBmaWx0ZXIgYXR0YWNoZWQgdG8gdGhlIGVudmVsb3BlXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk1ldGFsU3ludGgjXG5cdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogIEBuYW1lICByZXNvbmFuY2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLCAncmVzb25hbmNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5taW4gPSB2YWw7XG5cdCAgICAgICAgICAgIHRoaXMub2N0YXZlcyA9IHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBvY3RhdmVzIGFib3ZlIHRoZSBcInJlc29uYW5jZVwiIGZyZXF1ZW5jeVxuXHRcdCAqICB0aGF0IHRoZSBmaWx0ZXIgcmFtcHMgZHVyaW5nIHRoZSBhdHRhY2svZGVjYXkgZW52ZWxvcGVcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTWV0YWxTeW50aCNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3RzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3RzO1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1heCA9IHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWluICogTWF0aC5wb3coMiwgb2N0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWV0YWxTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9mcmVxTXVsdGlwbGllcnNbaV0uZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZnJlcU11bHRpcGxpZXJzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faGlnaHBhc3MuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2hpZ2hwYXNzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZXRhbFN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTm9pc2VTeW50aCBpcyBjb21wb3NlZCBvZiBhIG5vaXNlIGdlbmVyYXRvciAoVG9uZS5Ob2lzZSksIG9uZSBmaWx0ZXIgKFRvbmUuRmlsdGVyKSxcblx0XHQgKiAgICAgICAgICBhbmQgdHdvIGVudmVsb3BlcyAoVG9uZS5FbnZlbG9wKS4gT25lIGVudmVsb3BlIGNvbnRyb2xzIHRoZSBhbXBsaXR1ZGVcblx0XHQgKiAgICAgICAgICBvZiB0aGUgbm9pc2UgYW5kIHRoZSBvdGhlciBpcyBjb250cm9scyB0aGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVyLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xcnF6dVg5ckJsaFQ1ME1SdkQyVEttbDliblpoY1ptelhGMXJmX283dmRuRS9wdWI/dz05MTgmaD0yNDJcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBub2lzZVN5bnRoID0gbmV3IFRvbmUuTm9pc2VTeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogbm9pc2VTeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTm9pc2VTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG5vaXNlIHNvdXJjZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Ob2lzZX1cblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogbm9pc2VTeW50aC5zZXQoXCJub2lzZS50eXBlXCIsIFwiYnJvd25cIik7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm5vaXNlID0gbmV3IFRvbmUuTm9pc2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgbm9pc2UgdG8gdGhlIG91dHB1dFxuXHQgICAgICAgIHRoaXMubm9pc2UuY2hhaW4odGhpcy5lbnZlbG9wZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ25vaXNlJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTm9pc2VTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdub2lzZSc6IHsgJ3R5cGUnOiAnd2hpdGUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3Blcy4gVW5saWtlIG90aGVyXG5cdFx0ICogIGluc3RydW1lbnRzLCBUb25lLk5vaXNlU3ludGggZG9lc24ndCBoYXZlIGEgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBhdHRhY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlU3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBub2lzZVN5bnRoLnRyaWdnZXJBdHRhY2soKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIC8vdGhlIGVudmVsb3Blc1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgbm9pc2Vcblx0ICAgICAgICB0aGlzLm5vaXNlLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLmVudmVsb3BlLnN1c3RhaW4gPT09IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5ub2lzZS5zdG9wKHRpbWUgPSB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5ub2lzZS5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogc3ludGguc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAwKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc4bicpXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyQXR0YWNrJywgMCk7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlclJlbGVhc2UnLCAwKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrIGFuZCB0aGVuIHRoZSByZWxlYXNlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiB0aGUgZHVyYXRpb24gb2YgdGhlIG5vdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgdGhlIHRpbWUgb2YgdGhlIGF0dGFja1xuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbm9pc2UnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5ub2lzZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5ub2lzZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTm9pc2VTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEthcnBsdXMtU3RyaW5nIHN0cmluZyBzeW50aGVzaXMuIE9mdGVuIG91dCBvZiB0dW5lLlxuXHRcdCAqICAgICAgICAgV2lsbCBjaGFuZ2Ugd2hlbiB0aGUgQXVkaW9Xb3JrZXJOb2RlIGlzIGF2YWlsYWJsZSBhY3Jvc3Ncblx0XHQgKiAgICAgICAgIGJyb3dzZXJzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHNlZSB0aGUgZGVmYXVsdHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGx1Y2t5ID0gbmV3IFRvbmUuUGx1Y2tTeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogcGx1Y2t5LnRyaWdnZXJBdHRhY2soXCJDNFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGx1Y2tTeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlBsdWNrU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk5vaXNlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ub2lzZSA9IG5ldyBUb25lLk5vaXNlKCdwaW5rJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBub2lzZSBhdCB0aGUgYXR0YWNrLlxuXHRcdFx0ICogIE5vbWluYWwgcmFuZ2Ugb2YgWzAuMSwgMjBdXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXR0YWNrTm9pc2UgPSBvcHRpb25zLmF0dGFja05vaXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBMRkNGXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTG93cGFzc0NvbWJGaWx0ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmY2YgPSBuZXcgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlcih7XG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnOiBvcHRpb25zLnJlc29uYW5jZSxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZyc6IG9wdGlvbnMuZGFtcGVuaW5nXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJlc29uYW5jZSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IHRoaXMuX2xmY2YucmVzb25hbmNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkYW1wZW5pbmcgY29udHJvbC4gaS5lLiB0aGUgbG93cGFzcyBmaWx0ZXIgZnJlcXVlbmN5IG9mIHRoZSBjb21iIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSB0aGlzLl9sZmNmLmRhbXBlbmluZztcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fbm9pc2UuY29ubmVjdCh0aGlzLl9sZmNmKTtcblx0ICAgICAgICB0aGlzLl9sZmNmLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QbHVja1N5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2F0dGFja05vaXNlJzogMSxcblx0ICAgICAgICAnZGFtcGVuaW5nJzogNDAwMCxcblx0ICAgICAgICAncmVzb25hbmNlJzogMC43XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIG5vdGUuXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBub3RlIFRoZSBub3RlIHRvIHRyaWdnZXIuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBub3RlIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsdWNrU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGx1Y2tTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlLCB0aW1lKSB7XG5cdCAgICAgICAgbm90ZSA9IHRoaXMudG9GcmVxdWVuY3kobm90ZSk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBkZWxheUFtb3VudCA9IDEgLyBub3RlO1xuXHQgICAgICAgIHRoaXMuX2xmY2YuZGVsYXlUaW1lLnNldFZhbHVlQXRUaW1lKGRlbGF5QW1vdW50LCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl9ub2lzZS5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9ub2lzZS5zdG9wKHRpbWUgKyBkZWxheUFtb3VudCAqIHRoaXMuYXR0YWNrTm9pc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGx1Y2tTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZmNmLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ub2lzZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZjZiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBsdWNrU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Qb2x5U3ludGggaGFuZGxlcyB2b2ljZSBjcmVhdGlvbiBhbmQgYWxsb2NhdGlvbiBmb3IgYW55XG5cdFx0ICogICAgICAgICAgaW5zdHJ1bWVudHMgcGFzc2VkIGluIGFzIHRoZSBzZWNvbmQgcGFyYW10ZXIuIFBvbHlTeW50aCBpc1xuXHRcdCAqICAgICAgICAgIG5vdCBhIHN5bnRoZXNpemVyIGJ5IGl0c2VsZiwgaXQgbWVyZWx5IG1hbmFnZXMgdm9pY2VzIG9mXG5cdFx0ICogICAgICAgICAgb25lIG9mIHRoZSBvdGhlciB0eXBlcyBvZiBzeW50aHMsIGFsbG93aW5nIGFueSBvZiB0aGVcblx0XHQgKiAgICAgICAgICBtb25vcGhvbmljIHN5bnRoZXNpemVycyB0byBiZSBwb2x5cGhvbmljLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge251bWJlcnxPYmplY3R9IFtwb2x5cGhvbnk9NF0gVGhlIG51bWJlciBvZiB2b2ljZXMgdG8gY3JlYXRlXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb259IFt2b2ljZT1Ub25lLlN5bnRoXSBUaGUgY29uc3RydWN0b3Igb2YgdGhlIHZvaWNlc1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VzIFRvbmUuU3ludGggYnkgZGVmYXVsdC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2EgcG9seXN5bnRoIGNvbXBvc2VkIG9mIDYgVm9pY2VzIG9mIFN5bnRoXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuUG9seVN5bnRoKDYsIFRvbmUuU3ludGgpLnRvTWFzdGVyKCk7XG5cdFx0ICogLy9zZXQgdGhlIGF0dHJpYnV0ZXMgdXNpbmcgdGhlIHNldCBpbnRlcmZhY2Vcblx0XHQgKiBzeW50aC5zZXQoXCJkZXR1bmVcIiwgLTEyMDApO1xuXHRcdCAqIC8vcGxheSBhIGNob3JkXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoW1wiQzRcIiwgXCJFNFwiLCBcIkE0XCJdLCBcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGggPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncG9seXBob255Jyxcblx0ICAgICAgICAgICAgJ3ZvaWNlJ1xuXHQgICAgICAgIF0sIFRvbmUuUG9seVN5bnRoKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuSW5zdHJ1bWVudC5kZWZhdWx0cyk7XG5cdCAgICAgICAgLy9tYXggcG9seXBob255XG5cdCAgICAgICAgb3B0aW9ucy5wb2x5cGhvbnkgPSBNYXRoLm1pbihUb25lLlBvbHlTeW50aC5NQVhfUE9MWVBIT05ZLCBvcHRpb25zLnBvbHlwaG9ueSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFycmF5IG9mIHZvaWNlc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9pY2VzID0gbmV3IEFycmF5KG9wdGlvbnMucG9seXBob255KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcXVldWUgb2Ygdm9pY2VzIHdpdGggZGF0YSBhYm91dCBsYXN0IHRyaWdnZXJcblx0XHRcdCAqICBhbmQgdGhlIHRyaWdnZXJlZCBub3RlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90cmlnZ2VycyA9IG5ldyBBcnJheShvcHRpb25zLnBvbHlwaG9ueSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBpbiBjZW50c1xuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZGV0dW5lJyk7XG5cdCAgICAgICAgLy9jcmVhdGUgdGhlIHZvaWNlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5wb2x5cGhvbnk7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgdiA9IG5ldyBvcHRpb25zLnZvaWNlKGFyZ3VtZW50c1syXSwgYXJndW1lbnRzWzNdKTtcblx0ICAgICAgICAgICAgaWYgKCEodiBpbnN0YW5jZW9mIFRvbmUuTW9ub3Bob25pYykpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3ludGggY29uc3RydWN0b3IgbXVzdCBiZSBpbnN0YW5jZSBvZiBUb25lLk1vbm9waG9uaWMnKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnZvaWNlc1tpXSA9IHY7XG5cdCAgICAgICAgICAgIHYuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgIGlmICh2Lmhhc093blByb3BlcnR5KCdkZXR1bmUnKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh2LmRldHVuZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcnNbaV0gPSB7XG5cdCAgICAgICAgICAgICAgICByZWxlYXNlOiAtMSxcblx0ICAgICAgICAgICAgICAgIG5vdGU6IG51bGwsXG5cdCAgICAgICAgICAgICAgICB2b2ljZTogdlxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBvbHlTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwb2x5cGhvbnknOiA0LFxuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICd2b2ljZSc6IFRvbmUuU3ludGhcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fEFycmF5fSBub3RlcyBUaGUgbm90ZXMgdG8gcGxheS4gQWNjZXB0cyBhIHNpbmdsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW5jeSBvciBhbiBhcnJheSBvZiBmcmVxdWVuY2llcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgVGhlIHN0YXJ0IHRpbWUgb2YgdGhlIG5vdGUuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgYSBjaG9yZCBpbW1lZGlhdGVseSB3aXRoIGEgdmVsb2NpdHkgb2YgMC4yXG5cdFx0ICogcG9seS50cmlnZ2VyQXR0YWNrKFtcIkFiM1wiLCBcIkM0XCIsIFwiRjVcIl0sIHVuZGVmaW5lZCwgMC4yKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGVzLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShub3RlcykpIHtcblx0ICAgICAgICAgICAgbm90ZXMgPSBbbm90ZXNdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3Rlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgdmFsID0gbm90ZXNbaV07XG5cdCAgICAgICAgICAgIC8vdHJpZ2dlciB0aGUgb2xkZXN0IHZvaWNlXG5cdCAgICAgICAgICAgIHZhciBvbGRlc3QgPSB0aGlzLl90cmlnZ2Vyc1swXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCB0aGlzLl90cmlnZ2Vycy5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RyaWdnZXJzW2pdLnJlbGVhc2UgPCBvbGRlc3QucmVsZWFzZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9sZGVzdCA9IHRoaXMuX3RyaWdnZXJzW2pdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIG9sZGVzdC5yZWxlYXNlID0gSW5maW5pdHk7XG5cdCAgICAgICAgICAgIG9sZGVzdC5ub3RlID0gSlNPTi5zdHJpbmdpZnkodmFsKTtcblx0ICAgICAgICAgICAgb2xkZXN0LnZvaWNlLnRyaWdnZXJBdHRhY2sodmFsLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2UgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkdXJhdGlvblxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeXxBcnJheX0gbm90ZXMgVGhlIG5vdGVzIHRvIHBsYXkuIEFjY2VwdHMgYSBzaW5nbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVxdWVuY3kgb3IgYW4gYXJyYXkgb2YgZnJlcXVlbmNpZXMuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIHRoZSBkdXJhdGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICAgICBpZiBubyB0aW1lIGlzIGdpdmVuLCBkZWZhdWx0cyB0byBub3dcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBhdHRhY2sgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIGEgY2hvcmQgZm9yIGEgZHVyYXRpb24gb2YgYSBoYWxmIG5vdGVcblx0XHQgKiBwb2x5LnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkViM1wiLCBcIkc0XCIsIFwiQzVcIl0sIFwiMm5cIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gcGFzcyBpbiBhbiBhcnJheSBvZiBkdXJhdGlvbnMgYXMgd2VsbFxuXHRcdCAqIHBvbHkudHJpZ2dlckF0dGFja1JlbGVhc2UoW1wiRWIzXCIsIFwiRzRcIiwgXCJDNVwiXSwgW1wiMm5cIiwgXCI0blwiLCBcIjRuXCJdKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlcywgZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayhub3RlcywgdGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkoZHVyYXRpb24pICYmIFRvbmUuaXNBcnJheShub3RlcykpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3Rlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGQgPSBkdXJhdGlvbltNYXRoLm1pbihpLCBkdXJhdGlvbi5sZW5ndGggLSAxKV07XG5cdCAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKG5vdGVzW2ldLCB0aW1lICsgdGhpcy50b1NlY29uZHMoZCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZShub3RlcywgdGltZSArIHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIG9mIHRoZSBub3RlLiBVbmxpa2UgbW9ub3Bob25pYyBpbnN0cnVtZW50cyxcblx0XHQgKiAgYSBub3RlIChvciBhcnJheSBvZiBub3RlcykgbmVlZHMgdG8gYmUgcGFzc2VkIGluIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fEFycmF5fSBub3RlcyBUaGUgbm90ZXMgdG8gcGxheS4gQWNjZXB0cyBhIHNpbmdsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW5jeSBvciBhbiBhcnJheSBvZiBmcmVxdWVuY2llcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgV2hlbiB0aGUgcmVsZWFzZSB3aWxsIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcG9seS50cmlnZ2VyUmVsZWFzZShbXCJBYjNcIiwgXCJDNFwiLCBcIkY1XCJdLCBcIisyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlcywgdGltZSkge1xuXHQgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShub3RlcykpIHtcblx0ICAgICAgICAgICAgbm90ZXMgPSBbbm90ZXNdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3Rlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAvL2dldCB0aGUgdm9pY2Vcblx0ICAgICAgICAgICAgdmFyIHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkobm90ZXNbaV0pO1xuXHQgICAgICAgICAgICBmb3IgKHZhciB2ID0gMDsgdiA8IHRoaXMuX3RyaWdnZXJzLmxlbmd0aDsgdisrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZGVzYyA9IHRoaXMuX3RyaWdnZXJzW3ZdO1xuXHQgICAgICAgICAgICAgICAgaWYgKGRlc2Mubm90ZSA9PT0gc3RyaW5naWZpZWQgJiYgZGVzYy5yZWxlYXNlID4gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGRlc2Mudm9pY2UudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZGVzYy5yZWxlYXNlID0gdGltZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyQXR0YWNrJywgMSk7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlclJlbGVhc2UnLCAxKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IGEgbWVtYmVyL2F0dHJpYnV0ZSBvZiB0aGUgdm9pY2VzLlxuXHRcdCAqICBAcGFyYW0ge09iamVjdHxzdHJpbmd9IHBhcmFtc1xuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJhbXBUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHBvbHkuc2V0KHtcblx0XHQgKiBcdFwiZmlsdGVyXCIgOiB7XG5cdFx0ICogXHRcdFwidHlwZVwiIDogXCJoaWdocGFzc1wiXG5cdFx0ICogXHR9LFxuXHRcdCAqIFx0XCJlbnZlbG9wZVwiIDoge1xuXHRcdCAqIFx0XHRcImF0dGFja1wiIDogMC4yNVxuXHRcdCAqIFx0fVxuXHRcdCAqIH0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChwYXJhbXMsIHZhbHVlLCByYW1wVGltZSkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52b2ljZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy52b2ljZXNbaV0uc2V0KHBhcmFtcywgdmFsdWUsIHJhbXBUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc3ludGgncyBhdHRyaWJ1dGVzLiBHaXZlbiBubyBhcmd1bWVudHMgZ2V0XG5cdFx0ICogIHdpbGwgcmV0dXJuIGFsbCBhdmFpbGFibGUgb2JqZWN0IHByb3BlcnRpZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmdcblx0XHQgKiAgdmFsdWVzLiBQYXNzIGluIGEgc2luZ2xlIGF0dHJpYnV0ZSB0byByZXRyaWV2ZSBvciBhbiBhcnJheVxuXHRcdCAqICBvZiBhdHRyaWJ1dGVzLiBUaGUgYXR0cmlidXRlIHN0cmluZ3MgY2FuIGFsc28gaW5jbHVkZSBhIFwiLlwiXG5cdFx0ICogIHRvIGFjY2VzcyBkZWVwZXIgcHJvcGVydGllcy5cblx0XHQgKiAgQHBhcmFtIHtBcnJheT19IHBhcmFtcyB0aGUgcGFyYW1ldGVycyB0byBnZXQsIG90aGVyd2lzZSB3aWxsIHJldHVyblxuXHRcdCAqICBcdFx0XHRcdFx0ICAgYWxsIGF2YWlsYWJsZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudm9pY2VzWzBdLmdldChwYXJhbXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgYWxsIHRoZSBjdXJyZW50bHkgYWN0aXZlIHZvaWNlcy5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIG5vdGVzIHNob3VsZCBiZSByZWxlYXNlZC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5yZWxlYXNlQWxsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90cmlnZ2Vycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZGVzYyA9IHRoaXMuX3RyaWdnZXJzW2ldO1xuXHQgICAgICAgICAgICBpZiAoZGVzYy5yZWxlYXNlID4gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgZGVzYy5yZWxlYXNlID0gdGltZTtcblx0ICAgICAgICAgICAgICAgIGRlc2Mudm9pY2UudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52b2ljZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy52b2ljZXNbaV0uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLnZvaWNlc1tpXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdkZXR1bmUnKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9pY2VzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90cmlnZ2VycyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBtYXhpbXVtIG51bWJlciBvZiBub3RlcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWRcblx0XHQgKiAgdG8gYSBwb2x5c3ludGguXG5cdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5NQVhfUE9MWVBIT05ZID0gMjA7XG5cdCAgICByZXR1cm4gVG9uZS5Qb2x5U3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBBdXRvbWF0aWNhbGx5IGludGVycG9sYXRlcyBiZXR3ZWVuIGEgc2V0IG9mIHBpdGNoZWQgc2FtcGxlcy4gUGFzcyBpbiBhbiBvYmplY3Qgd2hpY2ggbWFwcyB0aGUgbm90ZSdzIHBpdGNoIG9yIG1pZGkgdmFsdWUgdG8gdGhlIHVybCwgdGhlbiB5b3UgY2FuIHRyaWdnZXIgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSBvZiB0aGF0IG5vdGUgbGlrZSBvdGhlciBpbnN0cnVtZW50cy4gQnkgYXV0b21hdGljYWxseSByZXBpdGNoaW5nIHRoZSBzYW1wbGVzLCBpdCBpcyBwb3NzaWJsZSB0byBwbGF5IHBpdGNoZXMgd2hpY2ggd2VyZSBub3QgZXhwbGljaXRseSBpbmNsdWRlZCB3aGljaCBjYW4gc2F2ZSBsb2FkaW5nIHRpbWUuXG5cdFx0ICogICAgICAgIEZvciBzYW1wbGUgb3IgYnVmZmVyIHBsYXliYWNrIHdoZXJlIHJlcGl0Y2hpbmcgaXMgbm90IG5lY2Vzc2FyeSwgdXNlIFtUb25lLlBsYXllcl0oaHR0cHM6Ly90b25lanMuZ2l0aHViLmlvL2RvY3MvUGxheWVyKS5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2FtcGxlcyBBbiBvYmplY3Qgb2Ygc2FtcGxlcyBtYXBwaW5nIGVpdGhlciBNaWRpXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSBOdW1iZXJzIG9yIFNjaWVudGlmaWMgUGl0Y2ggTm90YXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgdXJsIG9mIHRoYXQgc2FtcGxlLlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbmxvYWQgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIGFsbCBvZiB0aGUgc2FtcGxlcyBhcmUgbG9hZGVkLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nPX0gYmFzZVVybCBUaGUgcm9vdCBVUkwgb2YgYWxsIG9mIHRoZSBzYW1wbGVzLCB3aGljaCBpcyBwcmVwZW5kZWQgdG8gYWxsIHRoZSBVUkxzLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIHNhbXBsZXIgPSBuZXcgVG9uZS5TYW1wbGVyKHtcblx0XHQgKiBcdFwiQzNcIiA6IFwicGF0aC90by9DMy5tcDNcIixcblx0XHQgKiBcdFwiRCMzXCIgOiBcInBhdGgvdG8vRHNoYXJwMy5tcDNcIixcblx0XHQgKiBcdFwiRiMzXCIgOiBcInBhdGgvdG8vRnNoYXJwMy5tcDNcIixcblx0XHQgKiBcdFwiQTNcIiA6IFwicGF0aC90by9BMy5tcDNcIixcblx0XHQgKiB9LCBmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly9zYW1wbGVyIHdpbGwgcmVwaXRjaCB0aGUgY2xvc2VzdCBzYW1wbGVcblx0XHQgKiBcdHNhbXBsZXIudHJpZ2dlckF0dGFjayhcIkQzXCIpXG5cdFx0ICogfSlcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyID0gZnVuY3Rpb24gKHVybHMpIHtcblx0ICAgICAgICAvLyBzaGlmdCBhcmd1bWVudHMgb3ZlciBvbmUuIFRob3NlIGFyZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBvcHRpb25zXG5cdCAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIGFyZ3Muc2hpZnQoKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJncywgW1xuXHQgICAgICAgICAgICAnb25sb2FkJyxcblx0ICAgICAgICAgICAgJ2Jhc2VVcmwnXG5cdCAgICAgICAgXSwgVG9uZS5TYW1wbGVyKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICB2YXIgdXJsTWFwID0ge307XG5cdCAgICAgICAgZm9yICh2YXIgbm90ZSBpbiB1cmxzKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzTm90ZShub3RlKSkge1xuXHQgICAgICAgICAgICAgICAgLy9jb252ZXJ0IHRoZSBub3RlIG5hbWUgdG8gTUlESVxuXHQgICAgICAgICAgICAgICAgdmFyIG1pZCA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgICAgICAgICAgdXJsTWFwW21pZF0gPSB1cmxzW25vdGVdO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc05hTihwYXJzZUZsb2F0KG5vdGUpKSkge1xuXHQgICAgICAgICAgICAgICAgLy9vdGhlcndpc2UgaWYgaXQncyBudW1iZXJzIGFzc3VtZSBpdCdzIG1pZGlcblx0ICAgICAgICAgICAgICAgIHVybE1hcFtub3RlXSA9IHVybHNbbm90ZV07XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuU2FtcGxlcjogdXJsIGtleXMgbXVzdCBiZSB0aGUgbm90ZVxcJ3MgcGl0Y2gnKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBzdG9yZWQgYW5kIGxvYWRlZCBidWZmZXJzXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5CdWZmZXJzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBuZXcgVG9uZS5CdWZmZXJzKHVybE1hcCwgb3B0aW9ucy5vbmxvYWQsIG9wdGlvbnMuYmFzZVVybCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgb2JqZWN0IG9mIGFsbCBjdXJyZW50bHkgcGxheWluZyBCdWZmZXJTb3VyY2VzXG5cdFx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSB7fTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBlbnZlbG9wZSBhcHBsaWVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZS5cblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBvcHRpb25zLmF0dGFjaztcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBlbnZlbG9wZSBhcHBsaWVkIHRvIHRoZSBlbmQgb2YgdGhlIGVudmVsb3BlLlxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJlbGVhc2UgPSBvcHRpb25zLnJlbGVhc2U7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TYW1wbGVyLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHRzXG5cdFx0ICogQGNvbnN0XG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICBhdHRhY2s6IDAsXG5cdCAgICAgICAgcmVsZWFzZTogMC4xLFxuXHQgICAgICAgIG9ubG9hZDogVG9uZS5ub09wLFxuXHQgICAgICAgIGJhc2VVcmw6ICcnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBpbiBzdGVwcyBiZXR3ZWVuIHRoZSBnaXZlbiBtaWRpIG5vdGUgYXQgdGhlIGNsb3NldHMgc2FtcGxlLlxuXHRcdCAqIEBwYXJhbSAge01pZGl9IG1pZGlcblx0XHQgKiBAcmV0dXJuIHtJbnRlcnZhbH1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5fZmluZENsb3Nlc3QgPSBmdW5jdGlvbiAobWlkaSkge1xuXHQgICAgICAgIC8vc2VhcmNoZXMgd2l0aGluIDggb2N0YXZlcyBvZiB0aGUgZ2l2ZW4gbWlkaSBub3RlXG5cdCAgICAgICAgdmFyIE1BWF9JTlRFUlZBTCA9IDk2O1xuXHQgICAgICAgIHZhciBpbnRlcnZhbCA9IDA7XG5cdCAgICAgICAgd2hpbGUgKGludGVydmFsIDwgTUFYX0lOVEVSVkFMKSB7XG5cdCAgICAgICAgICAgIC8vIGNoZWNrIGFib3ZlIGFuZCBiZWxvd1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fYnVmZmVycy5oYXMobWlkaSArIGludGVydmFsKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC1pbnRlcnZhbDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9idWZmZXJzLmhhcyhtaWRpIC0gaW50ZXJ2YWwpKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJ2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaW50ZXJ2YWwrKztcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byBwbGF5XG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFdoZW4gdG8gcGxheSB0aGUgbm90ZVxuXHRcdCAqIEBwYXJhbSAge05vcm1hbFJhbmdlPX0gdmVsb2NpdHkgVGhlIHZlbG9jaXR5IHRvIHBsYXkgdGhlIHNhbXBsZSBiYWNrLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn0gICAgICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdmFyIG1pZGkgPSBUb25lLkZyZXF1ZW5jeShub3RlKS50b01pZGkoKTtcblx0ICAgICAgICAvLyBmaW5kIHRoZSBjbG9zZXN0IG5vdGUgcGl0Y2hcblx0ICAgICAgICB2YXIgZGlmZmVyZW5jZSA9IHRoaXMuX2ZpbmRDbG9zZXN0KG1pZGkpO1xuXHQgICAgICAgIGlmIChkaWZmZXJlbmNlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9zZXN0Tm90ZSA9IG1pZGkgLSBkaWZmZXJlbmNlO1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5fYnVmZmVycy5nZXQoY2xvc2VzdE5vdGUpO1xuXHQgICAgICAgICAgICAvLyBwbGF5IHRoYXQgbm90ZVxuXHQgICAgICAgICAgICB2YXIgc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKHtcblx0ICAgICAgICAgICAgICAgICdidWZmZXInOiBidWZmZXIsXG5cdCAgICAgICAgICAgICAgICAncGxheWJhY2tSYXRlJzogVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oZGlmZmVyZW5jZSksXG5cdCAgICAgICAgICAgICAgICAnZmFkZUluJzogdGhpcy5hdHRhY2ssXG5cdCAgICAgICAgICAgICAgICAnZmFkZU91dCc6IHRoaXMucmVsZWFzZSxcblx0ICAgICAgICAgICAgICAgICdjdXJ2ZSc6ICdleHBvbmVudGlhbCdcblx0ICAgICAgICAgICAgfSkuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdGFydCh0aW1lLCAwLCBidWZmZXIuZHVyYXRpb24sIHZlbG9jaXR5KTtcblx0ICAgICAgICAgICAgLy8gYWRkIGl0IHRvIHRoZSBhY3RpdmUgc291cmNlc1xuXHQgICAgICAgICAgICBpZiAoIVRvbmUuaXNBcnJheSh0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0ucHVzaCh7XG5cdCAgICAgICAgICAgICAgICBub3RlOiBtaWRpLFxuXHQgICAgICAgICAgICAgICAgc291cmNlOiBzb3VyY2Vcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gcmVsZWFzZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSAgICAgXHRXaGVuIHRvIHJlbGVhc2UgdGhlIG5vdGUuXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfVx0dGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlLCB0aW1lKSB7XG5cdCAgICAgICAgdmFyIG1pZGkgPSBUb25lLkZyZXF1ZW5jeShub3RlKS50b01pZGkoKTtcblx0ICAgICAgICAvLyBmaW5kIHRoZSBub3RlXG5cdCAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0gJiYgdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0uc2hpZnQoKS5zb3VyY2U7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgc291cmNlLnN0b3AodGltZSArIHRoaXMucmVsZWFzZSwgdGhpcy5yZWxlYXNlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVsZWFzZSBhbGwgY3VycmVudGx5IGFjdGl2ZSBub3Rlcy5cblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSAgICAgXHRXaGVuIHRvIHJlbGVhc2UgdGhlIG5vdGVzLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn1cdHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUucmVsZWFzZUFsbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIG5vdGUgaW4gdGhpcy5fYWN0aXZlU291cmNlcykge1xuXHQgICAgICAgICAgICB2YXIgc291cmNlcyA9IHRoaXMuX2FjdGl2ZVNvdXJjZXNbbm90ZV07XG5cdCAgICAgICAgICAgIHdoaWxlIChzb3VyY2VzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXMuc2hpZnQoKS5zb3VyY2U7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lICsgdGhpcy5yZWxlYXNlLCB0aGlzLnJlbGVhc2UpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogc3ludGguc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAwKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc4bicpXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyQXR0YWNrJywgMSk7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlclJlbGVhc2UnLCAxKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2UgdGhlIGF0dGFjayBwaGFzZSwgdGhlbiBhZnRlciB0aGUgZHVyYXRpb24sIGludm9rZSB0aGUgcmVsZWFzZS5cblx0XHQgKiBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHBsYXlcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiBUaGUgdGltZSB0aGUgbm90ZSBzaG91bGQgYmUgaGVsZFxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBXaGVuIHRvIHN0YXJ0IHRoZSBhdHRhY2tcblx0XHQgKiBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgYXR0YWNrXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfSAgICAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGUsIGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sobm90ZSwgdGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2Uobm90ZSwgdGltZSArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgbm90ZSB0byB0aGUgc2FtcGxlci5cblx0XHQgKiAgQHBhcmFtICB7Tm90ZXxNaWRpfSAgIG5vdGUgICAgICBUaGUgYnVmZmVyJ3MgcGl0Y2guXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xUb25lLkJ1ZmZlcnxBdWRpb2J1ZmZlcn0gIHVybCAgRWl0aGVyIHRoZSB1cmwgb2YgdGhlIGJ1ZmVyLFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYWRkZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5vdGUsIHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc05vdGUobm90ZSkpIHtcblx0ICAgICAgICAgICAgLy9jb252ZXJ0IHRoZSBub3RlIG5hbWUgdG8gTUlESVxuXHQgICAgICAgICAgICB2YXIgbWlkID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnMuYWRkKG1pZCwgdXJsLCBjYWxsYmFjayk7XG5cdCAgICAgICAgfSBlbHNlIGlmICghaXNOYU4ocGFyc2VGbG9hdChub3RlKSkpIHtcblx0ICAgICAgICAgICAgLy9vdGhlcndpc2UgaWYgaXQncyBudW1iZXJzIGFzc3VtZSBpdCdzIG1pZGlcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVycy5hZGQobm90ZSwgdXJsLCBjYWxsYmFjayk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlNhbXBsZXI6IG5vdGUgbXVzdCBiZSB0aGUgbm90ZVxcJ3MgcGl0Y2guIEluc3RlYWQgZ290ICcgKyBub3RlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TYW1wbGVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2FtcGxlci5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXJzLmxvYWRlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVycy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgbWlkaSBpbiB0aGlzLl9hY3RpdmVTb3VyY2VzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TYW1wbGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIU9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zZXRQZXJpb2RpY1dhdmUpIHtcblx0ICAgICAgICAgICAgT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFBlcmlvZGljV2F2ZSA9IE9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zZXRXYXZlVGFibGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVQZXJpb2RpY1dhdmUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVQZXJpb2RpY1dhdmUgPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVdhdmVUYWJsZTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBNYXBzIGEgTm9ybWFsUmFuZ2UgWzAsIDFdIHRvIGFuIEF1ZGlvUmFuZ2UgWy0xLCAxXS4gXG5cdFx0ICogICAgICAgICBTZWUgYWxzbyBUb25lLkF1ZGlvVG9HYWluLiBcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZzJhID0gbmV3IFRvbmUuR2FpblRvQXVkaW8oKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuR2FpblRvQXVkaW8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ub3JtID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAoeCkge1xuXHQgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMoeCkgKiAyIC0gMTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdhaW5Ub0F1ZGlvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdhaW5Ub0F1ZGlvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW5Ub0F1ZGlvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX25vcm0uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX25vcm0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdhaW5Ub0F1ZGlvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTm9ybWFsaXplIHRha2VzIGFuIGlucHV0IG1pbiBhbmQgbWF4IGFuZCBtYXBzIGl0IGxpbmVhcmx5IHRvIE5vcm1hbFJhbmdlIFswLDFdXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBpbnB1dE1pbiB0aGUgbWluIGlucHV0IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBpbnB1dE1heCB0aGUgbWF4IGlucHV0IHZhbHVlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG5vcm0gPSBuZXcgVG9uZS5Ob3JtYWxpemUoMiwgNCk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgzKS5jb25uZWN0KG5vcm0pO1xuXHRcdCAqIC8vb3V0cHV0IG9mIG5vcm0gaXMgMC41LiBcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9ybWFsaXplID0gZnVuY3Rpb24gKGlucHV0TWluLCBpbnB1dE1heCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtaW4gaW5wdXQgdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnB1dE1pbiA9IFRvbmUuZGVmYXVsdEFyZyhpbnB1dE1pbiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1heCBpbnB1dCB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2lucHV0TWF4ID0gVG9uZS5kZWZhdWx0QXJnKGlucHV0TWF4LCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzdWJ0cmFjdCB0aGUgbWluIGZyb20gdGhlIGlucHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWRkfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWIgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuQWRkKDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGRpdmlkZSBieSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbnB1dCBhbmQgb3V0cHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RpdiA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMSk7XG5cdCAgICAgICAgdGhpcy5fc3ViLmNvbm5lY3QodGhpcy5fZGl2KTtcblx0ICAgICAgICB0aGlzLl9zZXRSYW5nZSgpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTm9ybWFsaXplLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gdmFsdWUgdGhlIGlucHV0IHNpZ25hbCB3aWxsIHJlYWNoLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk5vcm1hbGl6ZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTm9ybWFsaXplLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0TWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2lucHV0TWluID0gbWluO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gdmFsdWUgdGhlIGlucHV0IHNpZ25hbCB3aWxsIHJlYWNoLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk5vcm1hbGl6ZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTm9ybWFsaXplLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0TWF4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2lucHV0TWF4ID0gbWF4O1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIHNldCB0aGUgdmFsdWVzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUuX3NldFJhbmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N1Yi52YWx1ZSA9IC10aGlzLl9pbnB1dE1pbjtcblx0ICAgICAgICB0aGlzLl9kaXYudmFsdWUgPSAxIC8gKHRoaXMuX2lucHV0TWF4IC0gdGhpcy5faW5wdXRNaW4pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob3JtYWxpemV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9ybWFsaXplLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3N1Yi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3ViID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kaXYuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RpdiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTm9ybWFsaXplO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbCBleHRlbmRzIFRvbmUuU2lnbmFsLCBidXQgYWRkcyB0aGUgYWJpbGl0eSB0byBzeW5jaHJvbml6ZSB0aGUgc2lnbmFsIHRvIHRoZSBzaWduYWwgdG8gdGhlIFRvbmUuVHJhbnNwb3J0XG5cdFx0ICogQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHJlYWwgc2lnbmFsIG91dHB1dFxuXHRcdFx0ICogQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5fb3V0cHV0U2lnID0gbmV3IFRvbmUuU2lnbmFsKHRoaXMuX2luaXRpYWxWYWx1ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBLZWVwIHRyYWNrIG9mIHRoZSBsYXN0IHZhbHVlLiAoc21hbGwgb3B0aW1pemF0aW9uKVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sYXN0VmFsID0gdGhpcy52YWx1ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBldmVudCBpZCBvZiB0aGUgdGljayB1cGRhdGUgbG9vcFxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZVJlcGVhdCh0aGlzLl9vblRpY2suYmluZCh0aGlzKSwgJzFpJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBBIGJvdW5kIHZlcnNpb24gb2YgdGhlIGFuY2hvciB2YWx1ZSBtZXRob2RzXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmluZEFuY2hvclZhbHVlID0gdGhpcy5fYW5jaG9yVmFsdWUuYmluZCh0aGlzKTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5vbignc3RhcnQgc3RvcCBwYXVzZScsIHRoaXMuX2JpbmRBbmNob3JWYWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLm1lbW9yeSA9IEluZmluaXR5O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwsIFRvbmUuU2lnbmFsKTtcblx0ICAgIC8qKlxuXHRcdCAqIENhbGxiYWNrIHdoaWNoIGlzIGludm9rZWQgZXZlcnkgdGljay5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuX29uVGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHZhbCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoVG9uZS5UcmFuc3BvcnQuc2Vjb25kcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuX2xhc3RWYWwgIT09IHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sYXN0VmFsID0gdmFsO1xuXHQgICAgICAgICAgICAvL2FwcHJveGltYXRlIHJhbXAgY3VydmVzIHdpdGggbGluZWFyIHJhbXBzXG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dFNpZy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWwsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBBbmNob3IgdGhlIHZhbHVlIGF0IHRoZSBzdGFydCBhbmQgc3RvcCBvZiB0aGUgVHJhbnNwb3J0XG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgdGhpc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5fYW5jaG9yVmFsdWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB2YWwgPSB0aGlzLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnNlY29uZHMpO1xuXHQgICAgICAgIHRoaXMuX2xhc3RWYWwgPSB2YWw7XG5cdCAgICAgICAgdGhpcy5fb3V0cHV0U2lnLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcuc2V0VmFsdWVBdFRpbWUodmFsLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzY2hlZHVsZWQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFRoaXMgd2lsbFxuXHRcdCAqICByZXR1cm4gdGhlIHVuY29udmVydGVkIChyYXcpIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSAgdGltZSAgVGhlIHRpbWUgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIFRoZSBzY2hlZHVsZWQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gVG9uZS5TaWduYWwucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lLmNhbGwodGhpcywgdGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU2V0IHRoZSBvdXRwdXQgb2YgdGhlIHNpZ25hbCBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoYW5nZSB0byBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9IHRpbWUgIFRoZSB0aW1lIHRvIGNoYW5nZSB0aGUgc2lnbmFsXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHZhbHVlLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBMaW5lYXIgcmFtcCB0byB0aGUgZ2l2ZW4gdmFsdWUgZnJvbSB0aGUgcHJldmlvdXMgc2NoZWR1bGVkIHBvaW50IHRvIHRoZSBnaXZlbiB2YWx1ZVxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoYW5nZSB0byBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9IHRpbWUgIFRoZSB0aW1lIHRvIGNoYW5nZSB0aGUgc2lnbmFsXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHZhbHVlLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBFeHBvbmVudGlhbCByYW1wIHRvIHRoZSBnaXZlbiB2YWx1ZSBmcm9tIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcG9pbnQgdG8gdGhlIGdpdmVuIHZhbHVlXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hhbmdlIHRvIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gdGltZSAgVGhlIHRpbWUgdG8gY2hhbmdlIHRoZSBzaWduYWxcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHZhbHVlLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lIHdpdGhcblx0XHQgKiAgYSByYXRlIGhhdmluZyB0aGUgZ2l2ZW4gdGltZSBjb25zdGFudC5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB0aW1lQ29uc3RhbnRcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5zZXRUYXJnZXRBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLnNldFRhcmdldEF0VGltZS5jYWxsKHRoaXMsIHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbHMgYWxsIHNjaGVkdWxlZCBwYXJhbWV0ZXIgY2hhbmdlcyB3aXRoIHRpbWVzIGdyZWF0ZXIgdGhhbiBvclxuXHRcdCAqICBlcXVhbCB0byBzdGFydFRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVkVmFsdWVzID0gZnVuY3Rpb24gKHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMuY2FsbCh0aGlzLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgYW4gYXJyYXkgb2YgYXJiaXRyYXJ5IHZhbHVlcyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gdGltZSBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqICBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gdmFsdWVzXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gZHVyYXRpb25cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3NjYWxpbmc9MV0gSWYgdGhlIHZhbHVlcyBpbiB0aGUgY3VydmUgc2hvdWxkIGJlIHNjYWxlZCBieSBzb21lIHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVDdXJ2ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZXMsIHN0YXJ0VGltZSwgZHVyYXRpb24sIHNjYWxpbmcpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IFRvbmUuVHJhbnNwb3J0VGltZShkdXJhdGlvbik7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLnNldFZhbHVlQ3VydmVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZXMsIHN0YXJ0VGltZSwgZHVyYXRpb24sIHNjYWxpbmcpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGlzIGlzIHNpbWlsYXIgdG8gW2NhbmNlbFNjaGVkdWxlZFZhbHVlc10oI2NhbmNlbFNjaGVkdWxlZFZhbHVlcykgZXhjZXB0XG5cdFx0ICogIGl0IGhvbGRzIHRoZSBhdXRvbWF0ZWQgdmFsdWUgYXQgdGltZSB1bnRpbCB0aGUgbmV4dCBhdXRvbWF0ZWQgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmNhbmNlbEFuZEhvbGRBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlNpZ25hbC5wcm90b3R5cGUuY2FuY2VsQW5kSG9sZEF0VGltZS5jYWxsKHRoaXMsIFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQuY2xlYXIodGhpcy5fc3luY2VkKTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5vZmYoJ3N0YXJ0IHN0b3AgcGF1c2UnLCB0aGlzLl9zeW5jZWRDYWxsYmFjayk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCgwKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb3V0cHV0U2lnID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIFRvbmUuR3JhaW5QbGF5ZXIgaW1wbGVtZW50cyBbZ3JhbnVsYXIgc3ludGhlc2lzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HcmFudWxhcl9zeW50aGVzaXMpLlxuXHRcdCAqICAgICAgICBHcmFudWxhciBTeW50aGVzaXMgZW5hYmxlcyB5b3UgdG8gYWRqdXN0IHBpdGNoIGFuZCBwbGF5YmFjayByYXRlIGluZGVwZW5kZW50bHkuIFRoZSBncmFpblNpemUgaXMgdGhlXG5cdFx0ICogICAgICAgIGFtb3VudCBvZiB0aW1lIGVhY2ggc21hbGwgY2h1bmsgb2YgYXVkaW8gaXMgcGxheWVkIGZvciBhbmQgdGhlIG92ZXJsYXAgaXMgdGhlXG5cdFx0ICogICAgICAgIGFtb3VudCBvZiBjcm9zc2ZhZGluZyB0cmFuc2l0aW9uIHRpbWUgYmV0d2VlbiBzdWNjZXNzaXZlIGdyYWlucy5cblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogQHBhcmFtIHtTdHJpbmd8VG9uZS5CdWZmZXJ9IHVybFx0VGhlIHVybCB0byBsb2FkLCBvciB0aGUgVG9uZS5CdWZmZXIgdG8gcGxheS5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBhZnRlciB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICBdLCBUb25lLkdyYWluUGxheWVyKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhdWRpbyBidWZmZXIgYmVsb25naW5nIHRvIHRoZSBwbGF5ZXIuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKG9wdGlvbnMudXJsLCBvcHRpb25zLm9ubG9hZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQ3JlYXRlIGEgcmVwZWF0aW5nIHRpY2sgdG8gc2NoZWR1bGVcblx0XHRcdCAqICB0aGUgZ3JhaW5zLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5DbG9ja31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2xvY2sgPSBuZXcgVG9uZS5DbG9jayh0aGlzLl90aWNrLmJpbmQodGhpcyksIG9wdGlvbnMuZ3JhaW5TaXplKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcEVuZCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBBbGwgb2YgdGhlIGN1cnJlbnRseSBwbGF5aW5nIEJ1ZmZlclNvdXJjZXNcblx0XHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ncmFpblNpemUgPSBvcHRpb25zLmdyYWluU2l6ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vdmVybGFwID0gb3B0aW9ucy5vdmVybGFwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFkanVzdCB0aGUgcGl0Y2ggaW5kZXBlbmRlbnRseSBvZiB0aGUgcGxheWJhY2tSYXRlLlxuXHRcdFx0ICogIEB0eXBlICB7Q2VudHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8vc2V0dXBcblx0ICAgICAgICB0aGlzLm92ZXJsYXAgPSBvcHRpb25zLm92ZXJsYXA7XG5cdCAgICAgICAgdGhpcy5sb29wID0gb3B0aW9ucy5sb29wO1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgdGhpcy5ncmFpblNpemUgPSBvcHRpb25zLmdyYWluU2l6ZTtcblx0ICAgICAgICB0aGlzLmxvb3BTdGFydCA9IG9wdGlvbnMubG9vcFN0YXJ0O1xuXHQgICAgICAgIHRoaXMubG9vcEVuZCA9IG9wdGlvbnMubG9vcEVuZDtcblx0ICAgICAgICB0aGlzLnJldmVyc2UgPSBvcHRpb25zLnJldmVyc2U7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sub24oJ3N0b3AnLCB0aGlzLl9vbnN0b3AuYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HcmFpblBsYXllciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnb3ZlcmxhcCc6IDAuMSxcblx0ICAgICAgICAnZ3JhaW5TaXplJzogMC4yLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAwLFxuXHQgICAgICAgICdyZXZlcnNlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGxheSB0aGUgYnVmZmVyIGF0IHRoZSBnaXZlbiBzdGFydFRpbWUuIE9wdGlvbmFsbHkgYWRkIGFuIG9mZnNldFxuXHRcdCAqICBhbmQvb3IgZHVyYXRpb24gd2hpY2ggd2lsbCBwbGF5IHRoZSBidWZmZXIgZnJvbSBhIHBvc2l0aW9uXG5cdFx0ICogIHdpdGhpbiB0aGUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb24uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3N0YXJ0VGltZT1ub3ddIFdoZW4gdGhlIHBsYXllciBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtvZmZzZXQ9MF0gVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgc2FtcGxlIHNob3VsZCBwbGF5LiBJZiBubyBkdXJhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnaXZlbiwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmdWxsIGxlbmd0aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2FtcGxlIChtaW51cyBhbnkgb2Zmc2V0KVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HcmFpblBsYXllcn0gdGhpc1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiAgQG1ldGhvZCBzdGFydFxuXHRcdCAqICBAbmFtZSBzdGFydFxuXHRcdCAqL1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBvZmZzZXRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fb2Zmc2V0ID0gb2Zmc2V0O1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIGlmIChkdXJhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLnN0b3AodGltZSArIHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBzdGFydCBtZXRob2Rcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2VkIHdoZW4gdGhlIGNsb2NrIGlzIHN0b3BwZWRcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuX29uc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9zdG9wIHRoZSBwbGF5ZXJzXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgc291cmNlLnN0b3AodGltZSwgMCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludm9rZWQgb24gZWFjaCBjbG9jayB0aWNrLiBzY2hlZHVsZWQgYSBuZXdcblx0XHQgKiAgZ3JhaW4gYXQgdGhpcyB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciBmYWRlSW4gPSB0aGlzLl9vZmZzZXQgPCB0aGlzLl9vdmVybGFwID8gMCA6IHRoaXMuX292ZXJsYXA7XG5cdCAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBUb25lLkJ1ZmZlclNvdXJjZSh7XG5cdCAgICAgICAgICAgICdidWZmZXInOiB0aGlzLmJ1ZmZlcixcblx0ICAgICAgICAgICAgJ2ZhZGVJbic6IGZhZGVJbixcblx0ICAgICAgICAgICAgJ2ZhZGVPdXQnOiB0aGlzLl9vdmVybGFwLFxuXHQgICAgICAgICAgICAnbG9vcCc6IHRoaXMubG9vcCxcblx0ICAgICAgICAgICAgJ2xvb3BTdGFydCc6IHRoaXMuX2xvb3BTdGFydCxcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiB0aGlzLl9sb29wRW5kLFxuXHQgICAgICAgICAgICAncGxheWJhY2tSYXRlJzogVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8odGhpcy5kZXR1bmUgLyAxMDApXG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgc291cmNlLnN0YXJ0KHRpbWUsIHRoaXMuX29mZnNldCk7XG5cdCAgICAgICAgdGhpcy5fb2Zmc2V0ICs9IHRoaXMuZ3JhaW5TaXplO1xuXHQgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUgKyB0aGlzLmdyYWluU2l6ZSk7XG5cdCAgICAgICAgLy9hZGQgaXQgdG8gdGhlIGFjdGl2ZSBzb3VyY2VzXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5wdXNoKHNvdXJjZSk7XG5cdCAgICAgICAgLy9yZW1vdmUgaXQgd2hlbiBpdCdzIGRvbmVcblx0ICAgICAgICBzb3VyY2Uub25lbmRlZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fYWN0aXZlU291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cdCAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSnVtcCB0byBhIHNwZWNpZmljIHRpbWUgYW5kIHBsYXkgaXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICBvZmZzZXQgIFRoZSBvZmZzZXQgdG8ganVtcCB0by5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gdGltZSBXaGVuIHRvIG1ha2UgdGhlIGp1bXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkdyYWluUGxheWVyfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuc2VlayA9IGZ1bmN0aW9uIChvZmZzZXQsIHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgIHRoaXMuX3RpY2sodGhpcy50b1NlY29uZHModGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBzYW1wbGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdwbGF5YmFja1JhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIHRoaXMuZ3JhaW5TaXplID0gdGhpcy5fZ3JhaW5TaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGxvb3Agc3RhcnQgdGltZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbG9vcCBlbmQgdGltZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRpcmVjdGlvbiB0aGUgYnVmZmVyIHNob3VsZCBwbGF5IGluXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgcmV2ZXJzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAncmV2ZXJzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLnJldmVyc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyZXYpIHtcblx0ICAgICAgICAgICAgdGhpcy5idWZmZXIucmV2ZXJzZSA9IHJldjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBzaXplIG9mIGVhY2ggY2h1bmsgb2YgYXVkaW8gdGhhdCB0aGVcblx0XHQgKiBidWZmZXIgaXMgY2hvcHBlZCBpbnRvIGFuZCBwbGF5ZWQgYmFjayBhdC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBncmFpblNpemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ2dyYWluU2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dyYWluU2l6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ3JhaW5TaXplID0gdGhpcy50b1NlY29uZHMoc2l6ZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2Nsb2NrLmZyZXF1ZW5jeS52YWx1ZSA9IHRoaXMuX3BsYXliYWNrUmF0ZSAvIHRoaXMuX2dyYWluU2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoaXMgaXMgdGhlIGR1cmF0aW9uIG9mIHRoZSBjcm9zcy1mYWRlIGJldHdlZW5cblx0XHQgKiBzdWNlc3NpdmUgZ3JhaW5zLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIG92ZXJsYXBcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ292ZXJsYXAnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdmVybGFwO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdmVybGFwID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuR3JhaW5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmJ1ZmZlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jbG9jayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgc291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HcmFpblBsYXllcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBsYXllciBpcyBhbiBhdWRpbyBmaWxlIHBsYXllciB3aXRoIHN0YXJ0LCBsb29wLCBhbmQgc3RvcCBmdW5jdGlvbnMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd8QXVkaW9CdWZmZXJ9IHVybCBFaXRoZXIgdGhlIEF1ZGlvQnVmZmVyIG9yIHRoZSB1cmwgZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRvIGxvYWQgdGhlIEF1ZGlvQnVmZmVyXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb249fSBvbmxvYWQgVGhlIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIHRoZSBidWZmZXIgaXMgbG9hZGVkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY29tbWVuZGVkIHRvIHVzZSBUb25lLkJ1ZmZlci5vbignbG9hZCcpIGluc3RlYWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBsYXllciA9IG5ldyBUb25lLlBsYXllcihcIi4vcGF0aC90by9zYW1wbGUubXAzXCIpLnRvTWFzdGVyKCk7XG5cdFx0ICogLy9wbGF5IGFzIHNvb24gYXMgdGhlIGJ1ZmZlciBpcyBsb2FkZWRcblx0XHQgKiBwbGF5ZXIuYXV0b3N0YXJ0ID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyID0gZnVuY3Rpb24gKHVybCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zO1xuXHQgICAgICAgIGlmICh1cmwgaW5zdGFuY2VvZiBUb25lLkJ1ZmZlciAmJiB1cmwubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIHVybCA9IHVybC5nZXQoKTtcblx0ICAgICAgICAgICAgb3B0aW9ucyA9IFRvbmUuUGxheWVyLmRlZmF1bHRzO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAgICAgJ3VybCcsXG5cdCAgICAgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgICAgICBdLCBUb25lLlBsYXllcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSWYgdGhlIGZpbGUgc2hvdWxkIHBsYXkgYXMgc29vblxuXHRcdFx0ICogIGFzIHRoZSBidWZmZXIgaXMgbG9hZGVkLlxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3dpbGwgcGxheSBhcyBzb29uIGFzIGl0J3MgbG9hZGVkXG5cdFx0XHQgKiB2YXIgcGxheWVyID0gbmV3IFRvbmUuUGxheWVyKHtcblx0XHRcdCAqIFx0XCJ1cmxcIiA6IFwiLi9wYXRoL3RvL3NhbXBsZS5tcDNcIixcblx0XHRcdCAqIFx0XCJhdXRvc3RhcnRcIiA6IHRydWUsXG5cdFx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdXRvc3RhcnQgPSBvcHRpb25zLmF1dG9zdGFydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYnVmZmVyXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5CdWZmZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIoe1xuXHQgICAgICAgICAgICAndXJsJzogb3B0aW9ucy51cmwsXG5cdCAgICAgICAgICAgICdvbmxvYWQnOiB0aGlzLl9vbmxvYWQuYmluZCh0aGlzLCBvcHRpb25zLm9ubG9hZCksXG5cdCAgICAgICAgICAgICdyZXZlcnNlJzogb3B0aW9ucy5yZXZlcnNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKHVybCBpbnN0YW5jZW9mIEF1ZGlvQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlci5zZXQodXJsKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaWYgdGhlIGJ1ZmZlciBzaG91bGQgbG9vcCBvbmNlIGl0J3Mgb3ZlclxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wID0gb3B0aW9ucy5sb29wO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGlmICdsb29wJyBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIHN0YXJ0IGF0IHRoaXMgcG9zaXRpb25cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gb3B0aW9ucy5sb29wU3RhcnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaWYgJ2xvb3AnIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgZW5kIGF0IHRoaXMgcG9zaXRpb25cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcEVuZCA9IG9wdGlvbnMubG9vcEVuZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcGxheWJhY2sgcmF0ZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgYWN0aXZlIGJ1ZmZlciBzb3VyY2Ugbm9kZXNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXk8VG9uZS5CdWZmZXJTb3VyY2U+fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGVsYXBzZWQgdGltZSBjb3VudGVyLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpY2tTb3VyY2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lID0gbmV3IFRvbmUuVGlja1NvdXJjZShvcHRpb25zLnBsYXliYWNrUmF0ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZhZGVJbiB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVJbiA9IG9wdGlvbnMuZmFkZUluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlT3V0IHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZU91dCA9IG9wdGlvbnMuZmFkZU91dDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBsYXllciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnYXV0b3N0YXJ0JzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAwLFxuXHQgICAgICAgICdyZXRyaWdnZXInOiBmYWxzZSxcblx0ICAgICAgICAncmV2ZXJzZSc6IGZhbHNlLFxuXHQgICAgICAgICdmYWRlSW4nOiAwLFxuXHQgICAgICAgICdmYWRlT3V0JzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBMb2FkIHRoZSBhdWRpbyBmaWxlIGFzIGFuIGF1ZGlvIGJ1ZmZlci5cblx0XHQgKiAgRGVjb2RlcyB0aGUgYXVkaW8gYXN5bmNocm9ub3VzbHkgYW5kIGludm9rZXNcblx0XHQgKiAgdGhlIGNhbGxiYWNrIG9uY2UgdGhlIGF1ZGlvIGJ1ZmZlciBsb2Fkcy5cblx0XHQgKiAgTm90ZTogdGhpcyBkb2VzIG5vdCBuZWVkIHRvIGJlIGNhbGxlZCBpZiBhIHVybFxuXHRcdCAqICB3YXMgcGFzc2VkIGluIHRvIHRoZSBjb25zdHJ1Y3Rvci4gT25seSB1c2UgdGhpc1xuXHRcdCAqICBpZiB5b3Ugd2FudCB0byBtYW51YWxseSBsb2FkIGEgbmV3IHVybC5cblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGJ1ZmZlciB0byBsb2FkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgRmlsZXR5cGUgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgYnJvd3Nlci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdG8gaW52b2tlIG9uY2Vcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2FtcGxlIGlzIGxvYWRlZC5cblx0XHQgKiAgQHJldHVybnMge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sb2FkKHVybCwgdGhpcy5fb25sb2FkLmJpbmQodGhpcywgY2FsbGJhY2spKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnRlcm5hbCBjYWxsYmFjayB3aGVuIHRoZSBidWZmZXIgaXMgbG9hZGVkLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX29ubG9hZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIGNhbGxiYWNrID0gVG9uZS5kZWZhdWx0QXJnKGNhbGxiYWNrLCBUb25lLm5vT3ApO1xuXHQgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIGlmICh0aGlzLmF1dG9zdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLnN0YXJ0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludGVybmFsIGNhbGxiYWNrIHdoZW4gdGhlIGJ1ZmZlciBpcyBkb25lIHBsYXlpbmcuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fb25Tb3VyY2VFbmQgPSBmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fYWN0aXZlU291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQbGF5IHRoZSBidWZmZXIgYXQgdGhlIGdpdmVuIHN0YXJ0VGltZS4gT3B0aW9uYWxseSBhZGQgYW4gb2Zmc2V0XG5cdFx0ICogIGFuZC9vciBkdXJhdGlvbiB3aGljaCB3aWxsIHBsYXkgdGhlIGJ1ZmZlciBmcm9tIGEgcG9zaXRpb25cblx0XHQgKiAgd2l0aGluIHRoZSBidWZmZXIgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbc3RhcnRUaW1lPW5vd10gV2hlbiB0aGUgcGxheWVyIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW29mZnNldD0wXSBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBzYW1wbGUgc2hvdWxkIHBsYXkuIElmIG5vIGR1cmF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdpdmVuLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZ1bGwgbGVuZ3RoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzYW1wbGUgKG1pbnVzIGFueSBvZmZzZXQpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogIEBtZXRob2Qgc3RhcnRcblx0XHQgKiAgQG5hbWUgc3RhcnRcblx0XHQgKi9cblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBzdGFydCBtZXRob2Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgLy9pZiBpdCdzIGEgbG9vcCB0aGUgZGVmYXVsdCBvZmZzZXQgaXMgdGhlIGxvb3BzdGFydCBwb2ludFxuXHQgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIHRoaXMuX2xvb3BTdGFydCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9vdGhlcndpc2UgdGhlIGRlZmF1bHQgb2Zmc2V0IGlzIDBcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY29tcHV0ZSB0aGUgdmFsdWVzIGluIHNlY29uZHNcblx0ICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgIHZhciBjb21wdXRlZER1cmF0aW9uID0gVG9uZS5kZWZhdWx0QXJnKGR1cmF0aW9uLCBNYXRoLm1heCh0aGlzLl9idWZmZXIuZHVyYXRpb24gLSBvZmZzZXQsIDApKTtcblx0ICAgICAgICBjb21wdXRlZER1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoY29tcHV0ZWREdXJhdGlvbik7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBlbGFwc2VkIHRpbWUgY291bnRlclxuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLnN0YXJ0KHN0YXJ0VGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAvL21ha2UgdGhlIHNvdXJjZVxuXHQgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2Uoe1xuXHQgICAgICAgICAgICAnYnVmZmVyJzogdGhpcy5fYnVmZmVyLFxuXHQgICAgICAgICAgICAnbG9vcCc6IHRoaXMuX2xvb3AsXG5cdCAgICAgICAgICAgICdsb29wU3RhcnQnOiB0aGlzLl9sb29wU3RhcnQsXG5cdCAgICAgICAgICAgICdsb29wRW5kJzogdGhpcy5fbG9vcEVuZCxcblx0ICAgICAgICAgICAgJ29uZW5kZWQnOiB0aGlzLl9vblNvdXJjZUVuZC5iaW5kKHRoaXMpLFxuXHQgICAgICAgICAgICAncGxheWJhY2tSYXRlJzogdGhpcy5fcGxheWJhY2tSYXRlLFxuXHQgICAgICAgICAgICAnZmFkZUluJzogdGhpcy5mYWRlSW4sXG5cdCAgICAgICAgICAgICdmYWRlT3V0JzogdGhpcy5mYWRlT3V0XG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGxvb3BpbmcgcHJvcGVydGllc1xuXHQgICAgICAgIGlmICghdGhpcy5fbG9vcCAmJiAhdGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIC8vaWYgaXQncyBub3QgbG9vcGluZywgc2V0IHRoZSBzdGF0ZSBjaGFuZ2UgYXQgdGhlIGVuZCBvZiB0aGUgc2FtcGxlXG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgc3RhcnRUaW1lICsgY29tcHV0ZWREdXJhdGlvbiAvIHRoaXMuX3BsYXliYWNrUmF0ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYWRkIGl0IHRvIHRoZSBhcnJheSBvZiBhY3RpdmUgc291cmNlc1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMucHVzaChzb3VyY2UpO1xuXHQgICAgICAgIC8vc3RhcnQgaXRcblx0ICAgICAgICBpZiAodGhpcy5fbG9vcCAmJiBUb25lLmlzVW5kZWYoZHVyYXRpb24pKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdGFydChzdGFydFRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgc291cmNlLnN0YXJ0KHN0YXJ0VGltZSwgb2Zmc2V0LCBjb21wdXRlZER1cmF0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgcGxheWJhY2suXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgYW5kIHRoZW4gcmVzdGFydCB0aGUgcGxheWVyIGZyb20gdGhlIGJlZ2lubmluZyAob3Igb2Zmc2V0KVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbc3RhcnRUaW1lPW5vd10gV2hlbiB0aGUgcGxheWVyIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW29mZnNldD0wXSBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBzYW1wbGUgc2hvdWxkIHBsYXkuIElmIG5vIGR1cmF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdpdmVuLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZ1bGwgbGVuZ3RoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzYW1wbGUgKG1pbnVzIGFueSBvZmZzZXQpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0LCBkdXJhdGlvbikge1xuXHQgICAgICAgIHRoaXMuX3N0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhcnQodGltZSwgb2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNlZWsgdG8gYSBzcGVjaWZpYyB0aW1lIGluIHRoZSBwbGF5ZXIncyBidWZmZXIuIElmIHRoZVxuXHRcdCAqICBzb3VyY2UgaXMgbm8gbG9uZ2VyIHBsYXlpbmcgYXQgdGhhdCB0aW1lLCBpdCB3aWxsIHN0b3AuXG5cdFx0ICogIElmIHlvdSBzZWVrIHRvIGEgdGltZSB0aGF0XG5cdFx0ICogIEBwYXJhbSB7VGltZX0gb2Zmc2V0IFRoZSB0aW1lIHRvIHNlZWsgdG8uXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHRpbWUgVGhlIHRpbWUgZm9yIHRoZSBzZWVrIGV2ZW50IHRvIG9jY3VyLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zdGFydCgwLjIpO1xuXHRcdCAqIHNvdXJjZS5zdG9wKDAuNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuc2VlayA9IGZ1bmN0aW9uIChvZmZzZXQsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICAgICAgLy8gaWYgaXQncyBjdXJyZW50bHkgcGxheWluZywgc3RvcCBpdFxuXHQgICAgICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgICAgICAvL3Jlc3RhcnQgaXQgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAgICAgICAgdGhpcy5fc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgbG9vcCBzdGFydCBhbmQgZW5kLiBXaWxsIG9ubHkgbG9vcCBpZiBsb29wIGlzXG5cdFx0ICogIHNldCB0byB0cnVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGxvb3BTdGFydCBUaGUgbG9vcCBlbmQgdGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGxvb3BFbmQgVGhlIGxvb3AgZW5kIHRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9sb29wIDAuMSBzZWNvbmRzIG9mIHRoZSBmaWxlLlxuXHRcdCAqIHBsYXllci5zZXRMb29wUG9pbnRzKDAuMiwgMC4zKTtcblx0XHQgKiBwbGF5ZXIubG9vcCA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuc2V0TG9vcFBvaW50cyA9IGZ1bmN0aW9uIChsb29wU3RhcnQsIGxvb3BFbmQpIHtcblx0ICAgICAgICB0aGlzLmxvb3BTdGFydCA9IGxvb3BTdGFydDtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBsb29wRW5kO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBzdGFydCBhdCB0aGlzIHBvc2l0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wU3RhcnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wU3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAvL2dldCB0aGUgY3VycmVudCBzb3VyY2Vcblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgICAgIHNvdXJjZS5sb29wU3RhcnQgPSBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgbG9vcCBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIGVuZCBhdCB0aGlzIHBvc2l0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3BFbmQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wRW5kKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSBsb29wRW5kO1xuXHQgICAgICAgICAgICAvL2dldCB0aGUgY3VycmVudCBzb3VyY2Vcblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgICAgIHNvdXJjZS5sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXVkaW8gYnVmZmVyIGJlbG9uZ2luZyB0byB0aGUgcGxheWVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7VG9uZS5CdWZmZXJ9XG5cdFx0ICogQG5hbWUgYnVmZmVyXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnYnVmZmVyJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlci5zZXQoYnVmZmVyKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXIgc2hvdWxkIGxvb3Agb25jZSBpdCdzIG92ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvb3Bcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdsb29wJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3ApIHtcblx0ICAgICAgICAgICAgLy9pZiBubyBjaGFuZ2UsIGRvIG5vdGhpbmdcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3AgPT09IGxvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIGlmICghbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgLy9zdG9wIHRoZSBwbGF5YmFjayBvbiB0aGUgbmV4dCBjeWNsZVxuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RvcEF0TmV4dEl0ZXJhdGlvbihub3cpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy9yZW1vdmUgdGhlIG5leHQgc3RvcEV2ZW50XG5cdCAgICAgICAgICAgICAgICB2YXIgc3RvcEV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0TmV4dFN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCwgbm93KTtcblx0ICAgICAgICAgICAgICAgIGlmIChzdG9wRXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UubG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHN0b3BFdmVudC50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5jYW5jZWwoc3RvcEV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGEgc3RvcCBldmVudCBhdCB0aGUgbmV4dCBmdWxsIGl0ZXJhdGlvbi4gVXNlZFxuXHRcdCAqICBmb3Igc2NoZWR1bGluZyBzdG9wIHdoZW4gdGhlIGxvb3Agc3RhdGUgb3IgcGxheWJhY2tSYXRlIGNoYW5nZXNcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgbm93ICBUaGUgY3VycmVudCB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX3N0b3BBdE5leHRJdGVyYXRpb24gPSBmdW5jdGlvbiAobm93KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKG5vdykgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB2YXIgbmV4dFN0b3AgPSB0aGlzLl9zdGF0ZS5nZXROZXh0U3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBub3cpO1xuXHQgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLl9lbGFwc2VkVGltZS5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IE1hdGgubWF4KE1hdGguY2VpbChwb3NpdGlvbiAvIHRoaXMuYnVmZmVyLmR1cmF0aW9uKSwgMSk7XG5cdCAgICAgICAgICAgIHZhciBzdG9wVGltZSA9IHRoaXMuX2VsYXBzZWRUaW1lLmdldFRpbWVPZlRpY2soaXRlcmF0aW9ucyAqIHRoaXMuYnVmZmVyLmR1cmF0aW9uLCBuZXh0U3RvcCA/IG5leHRTdG9wLnRpbWUgLSB0aGlzLnNhbXBsZVRpbWUgOiBJbmZpbml0eSk7XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcChzdG9wVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwbGF5YmFjayBzcGVlZC4gMSBpcyBub3JtYWwgc3BlZWQuIFRoaXMgaXMgbm90IGEgc2lnbmFsIGJlY2F1c2Vcblx0XHQgKiBTYWZhcmkgYW5kIGlPUyBjdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBwbGF5YmFja1JhdGUgYXMgYSBzaWduYWwuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKHJhdGUsIG5vdyk7XG5cdCAgICAgICAgICAgIC8vaWYgaXQncyBub3QgbG9vcGluZ1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BBdE5leHRJdGVyYXRpb24obm93KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL3NldCBhbGwgdGhlIHNvdXJjZXNcblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgICAgIHNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VmFsdWVBdFRpbWUocmF0ZSwgbm93KTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyLiBcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBwb3NpdGlvblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ3Bvc2l0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKG5vdykgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiB0aGlzLmxvYWRlZCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gdGhpcy5idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLl9lbGFwc2VkVGltZS5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICUgZHVyYXRpb247XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRpcmVjdGlvbiB0aGUgYnVmZmVyIHNob3VsZCBwbGF5IGluXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIHJldmVyc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdyZXZlcnNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLnJldmVyc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyZXYpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnJldmVyc2UgPSByZXY7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiBhbGwgdGhlIGJ1ZmZlciBpcyBsb2FkZWRcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmxvYWRlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBEaXNwb3NlIGFuZCBkaXNjb25uZWN0LlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9kaXNjb25uZWN0IGFsbCBvZiB0aGUgcGxheWVyc1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IG51bGw7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QbGF5ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5QbGF5ZXJzIGNvbWJpbmVzIG11bHRpcGxlIFtUb25lLlBsYXllcl0oUGxheWVyKSBvYmplY3RzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSB1cmxzIEFuIG9iamVjdCBtYXBwaW5nIGEgbmFtZSB0byBhIHVybC5cblx0XHQgKiAgQHBhcmFtIHtmdW5jdGlvbj19IG9ubG9hZCBUaGUgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gYWxsIGJ1ZmZlcnMgYXJlIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycyA9IGZ1bmN0aW9uICh1cmxzKSB7XG5cdCAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIGFyZ3Muc2hpZnQoKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJncywgWydvbmxvYWQnXSwgVG9uZS5QbGF5ZXJzKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBzb3VyY2Uudm9sdW1lLnZhbHVlID0gLTY7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgb3V0cHV0IGV4cGxpY2l0bHkgc3RlcmVvXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLm91dHB1dC5vdXRwdXQuY2hhbm5lbENvdW50ID0gMjtcblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICAvL211dGUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGNvbnRhaW5lciBvZiBhbGwgb2YgdGhlIHBsYXllcnNcblx0XHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWVycyA9IHt9O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGxvYWRpbmcgY291bnRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50ID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHByaXZhdGUgaG9sZGVyIG9mIHRoZSBmYWRlSW4gdGltZVxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmFkZUluID0gb3B0aW9ucy5mYWRlSW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBwcml2YXRlIGhvbGRlciBvZiB0aGUgZmFkZU91dCB0aW1lXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mYWRlT3V0ID0gb3B0aW9ucy5mYWRlT3V0O1xuXHQgICAgICAgIC8vYWRkIGFsbCBvZiB0aGUgcGxheWVyc1xuXHQgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdXJscykge1xuXHQgICAgICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQrKztcblx0ICAgICAgICAgICAgdGhpcy5hZGQobmFtZSwgdXJsc1tuYW1lXSwgdGhpcy5fYnVmZmVyTG9hZGVkLmJpbmQodGhpcywgb3B0aW9ucy5vbmxvYWQpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QbGF5ZXJzLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2UsXG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnZmFkZUluJzogMCxcblx0ICAgICAgICAnZmFkZU91dCc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQSBidWZmZXIgd2FzIGxvYWRlZC4gZGVjcmVtZW50IHRoZSBjb3VudGVyLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLl9idWZmZXJMb2FkZWQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQtLTtcblx0ICAgICAgICBpZiAodGhpcy5fbG9hZGluZ0NvdW50ID09PSAwICYmIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogc291cmNlLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBmYWRlSW4gdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBmYWRlSW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnZmFkZUluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmFkZUluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZmFkZUluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZhZGVJbiA9IGZhZGVJbjtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgICAgICBwbGF5ZXIuZmFkZUluID0gZmFkZUluO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBmYWRlT3V0IHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgZmFkZU91dFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdmYWRlT3V0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmFkZU91dDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGZhZGVPdXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmFkZU91dCA9IGZhZGVPdXQ7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgcGxheWVyLmZhZGVPdXQgPSBmYWRlT3V0O1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBzdGF0ZSBvZiB0aGUgcGxheWVycyBvYmplY3QuIFJldHVybnMgXCJzdGFydGVkXCIgaWYgYW55IG9mIHRoZSBwbGF5ZXJzIGFyZSBwbGF5aW5nLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllcnMjXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAbmFtZSBzdGF0ZVxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHBsYXlpbmcgPSBmYWxzZTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgICAgICBwbGF5aW5nID0gcGxheWluZyB8fCBwbGF5ZXIuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHJldHVybiBwbGF5aW5nID8gVG9uZS5TdGF0ZS5TdGFydGVkIDogVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRydWUgaWYgdGhlIGJ1ZmZlcnMgb2JqZWN0IGhhcyBhIGJ1ZmZlciBieSB0aGF0IG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICBuYW1lICBUaGUga2V5IG9yIGluZGV4IG9mIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLlxuXHRcdCAqICBAcmV0dXJuICB7Qm9vbGVhbn1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fcGxheWVycy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IGEgcGxheWVyIGJ5IG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIG5hbWUgIFRoZSBwbGF5ZXJzIG5hbWUgYXMgZGVmaW5lZCBpblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29uc3RydWN0b3Igb2JqZWN0IG9yIGBhZGRgIG1ldGhvZC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGxheWVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIGlmICh0aGlzLmhhcyhuYW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWVyc1tuYW1lXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuUGxheWVyczogbm8gcGxheWVyIG5hbWVkICcgKyBuYW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgcGxheWVyc1xuXHRcdCAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuXHRcdCAqIEByZXR1cm4ge1RvbmUuUGxheWVyc30gICAgICAgICAgICB0aGlzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuX2ZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBmb3IgKHZhciBwbGF5ZXJOYW1lIGluIHRoaXMuX3BsYXllcnMpIHtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcy5fcGxheWVyc1twbGF5ZXJOYW1lXSwgcGxheWVyTmFtZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGFsbCB0aGUgYnVmZmVycyBhcmUgbG9hZGVkIG9yIG5vdFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllcnMjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGlzTG9hZGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgICAgICBpc0xvYWRlZCA9IGlzTG9hZGVkICYmIHBsYXllci5sb2FkZWQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICByZXR1cm4gaXNMb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgcGxheWVyIGJ5IG5hbWUgYW5kIHVybCB0byB0aGUgUGxheWVyc1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIG5hbWUgICAgICBBIHVuaXF1ZSBuYW1lIHRvIGdpdmUgdGhlIHBsYXllclxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8VG9uZS5CdWZmZXJ8QXVkaW9idWZmZXJ9ICB1cmwgIEVpdGhlciB0aGUgdXJsIG9mIHRoZSBidWZlcixcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGFkZGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5fcGxheWVyc1tuYW1lXSA9IG5ldyBUb25lLlBsYXllcih1cmwsIGNhbGxiYWNrKS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzW25hbWVdLmZhZGVJbiA9IHRoaXMuX2ZhZGVJbjtcblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzW25hbWVdLmZhZGVPdXQgPSB0aGlzLl9mYWRlT3V0O1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgYWxsIG9mIHRoZSBwbGF5ZXJzIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIHN0b3AgYWxsIG9mIHRoZSBwbGF5ZXJzLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuUGxheWVyc30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5zdG9wQWxsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgcGxheWVyLnN0b3AodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3QuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGxheWVyc30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICBwbGF5ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBsYXllcnM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Vc2VyTWVkaWEgdXNlcyBNZWRpYURldmljZXMuZ2V0VXNlck1lZGlhIHRvIG9wZW4gdXBcblx0XHQgKiAgICAgICAgICBhbmQgZXh0ZXJuYWwgbWljcm9waG9uZSBvciBhdWRpbyBpbnB1dC4gQ2hlY2tcblx0XHQgKiAgICAgICAgICBbTWVkaWFEZXZpY2VzIEFQSSBTdXBwb3J0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTWVkaWFEZXZpY2VzL2dldFVzZXJNZWRpYSlcblx0XHQgKiAgICAgICAgICB0byBzZWUgd2hpY2ggYnJvd3NlcnMgYXJlIHN1cHBvcnRlZC4gQWNjZXNzIHRvIGFuIGV4dGVybmFsIGlucHV0XG5cdFx0ICogICAgICAgICAgaXMgbGltaXRlZCB0byBzZWN1cmUgKEhUVFBTKSBjb25uZWN0aW9ucy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzPX0gdm9sdW1lIFRoZSBsZXZlbCBvZiB0aGUgaW5wdXRcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xpc3QgdGhlIGlucHV0cyBhbmQgb3BlbiB0aGUgdGhpcmQgb25lXG5cdFx0ICogdmFyIG1vdHUgPSBuZXcgVG9uZS5Vc2VyTWVkaWEoKTtcblx0XHQgKlxuXHRcdCAqIC8vb3BlbmluZyB0aGUgaW5wdXQgYXNrcyB0aGUgdXNlciB0byBhY3RpdmF0ZSB0aGVpciBtaWNcblx0XHQgKiBtb3R1Lm9wZW4oKS50aGVuKGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3Byb21pc2UgcmVzb2x2ZXMgd2hlbiBpbnB1dCBpcyBhdmFpbGFibGVcblx0XHQgKiB9KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVXNlck1lZGlhID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndm9sdW1lJ10sIFRvbmUuVXNlck1lZGlhKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBNZWRpYVN0cmVhbU5vZGVcblx0XHRcdCAqICBAdHlwZSB7TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWVkaWEgc3RyZWFtIGNyZWF0ZWQgYnkgZ2V0VXNlck1lZGlhLlxuXHRcdFx0ICogIEB0eXBlIHtMb2NhbE1lZGlhU3RyZWFtfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdHJlYW0gPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvcGVuIGRldmljZVxuXHRcdFx0ICogIEB0eXBlICB7TWVkaWFEZXZpY2VJbmZvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZXZpY2UgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvdXRwdXQgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogaW5wdXQudm9sdW1lLnZhbHVlID0gLTY7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlVzZXJNZWRpYSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIE9wZW4gdGhlIG1lZGlhIHN0cmVhbS4gSWYgYSBzdHJpbmcgaXMgcGFzc2VkIGluLCBpdCBpcyBhc3N1bWVkXG5cdFx0ICogIHRvIGJlIHRoZSBsYWJlbCBvciBpZCBvZiB0aGUgc3RyZWFtLCBpZiBhIG51bWJlciBpcyBwYXNzZWQgaW4sXG5cdFx0ICogIGl0IGlzIHRoZSBpbnB1dCBudW1iZXIgb2YgdGhlIHN0cmVhbS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gW2xhYmVsT3JJZD1cImRlZmF1bHRcIl0gVGhlIGxhYmVsIG9yIGlkIG9mIHRoZSBhdWRpbyBpbnB1dCBtZWRpYSBkZXZpY2UuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXRoIG5vIGFyZ3VtZW50LCB0aGUgZGVmYXVsdCBzdHJlYW0gaXMgb3BlbmVkLlxuXHRcdCAqICBAcmV0dXJuIHtQcm9taXNlfSBUaGUgcHJvbWlzZSBpcyByZXNvbHZlZCB3aGVuIHRoZSBzdHJlYW0gaXMgb3Blbi5cblx0XHQgKi9cblx0ICAgIFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24gKGxhYmVsT3JJZCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlVzZXJNZWRpYS5lbnVtZXJhdGVEZXZpY2VzKCkudGhlbihmdW5jdGlvbiAoZGV2aWNlcykge1xuXHQgICAgICAgICAgICB2YXIgZGV2aWNlO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc051bWJlcihsYWJlbE9ySWQpKSB7XG5cdCAgICAgICAgICAgICAgICBkZXZpY2UgPSBkZXZpY2VzW2xhYmVsT3JJZF07XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBkZXZpY2UgPSBkZXZpY2VzLmZpbmQoZnVuY3Rpb24gKGRldmljZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXZpY2UubGFiZWwgPT09IGxhYmVsT3JJZCB8fCBkZXZpY2UuZGV2aWNlSWQgPT09IGxhYmVsT3JJZDtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgLy9kaWRuJ3QgZmluZCBhIG1hdGNoaW5nIGRldmljZVxuXHQgICAgICAgICAgICAgICAgaWYgKCFkZXZpY2UgJiYgZGV2aWNlcy5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZGV2aWNlID0gZGV2aWNlc1swXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRldmljZSAmJiBUb25lLmlzRGVmaW5lZChsYWJlbE9ySWQpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlVzZXJNZWRpYTogbm8gbWF0Y2hpbmcgZGV2aWNlOiAnICsgbGFiZWxPcklkKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9kZXZpY2UgPSBkZXZpY2U7XG5cdCAgICAgICAgICAgIC8vZG8gZ2V0VXNlck1lZGlhXG5cdCAgICAgICAgICAgIHZhciBjb25zdHJhaW50cyA9IHtcblx0ICAgICAgICAgICAgICAgIGF1ZGlvOiB7XG5cdCAgICAgICAgICAgICAgICAgICAgJ2VjaG9DYW5jZWxsYXRpb24nOiBmYWxzZSxcblx0ICAgICAgICAgICAgICAgICAgICAnc2FtcGxlUmF0ZSc6IHRoaXMuY29udGV4dC5zYW1wbGVSYXRlXG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIGlmIChkZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzLmF1ZGlvLmRldmljZUlkID0gZGV2aWNlLmRldmljZUlkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYShjb25zdHJhaW50cykudGhlbihmdW5jdGlvbiAoc3RyZWFtKSB7XG5cdCAgICAgICAgICAgICAgICAvL3N0YXJ0IGEgbmV3IHNvdXJjZSBvbmx5IGlmIHRoZSBwcmV2aW91cyBvbmUgaXMgY2xvc2VkXG5cdCAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3N0cmVhbSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcblx0ICAgICAgICAgICAgICAgICAgICAvL1dyYXAgYSBNZWRpYVN0cmVhbVNvdXJjZU5vZGUgYXJvdW5kIHRoZSBsaXZlIGlucHV0IHN0cmVhbS5cblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbSA9IHRoaXMuY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShzdHJlYW0pO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vQ29ubmVjdCB0aGUgTWVkaWFTdHJlYW1Tb3VyY2VOb2RlIHRvIGEgZ2F0ZSBnYWluIG5vZGVcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsb3NlIHRoZSBtZWRpYSBzdHJlYW1cblx0XHQgKiAgQHJldHVybiB7VG9uZS5Vc2VyTWVkaWF9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RyZWFtKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0cmVhbS5nZXRBdWRpb1RyYWNrcygpLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG5cdCAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB0aGlzLl9zdHJlYW0gPSBudWxsO1xuXHQgICAgICAgICAgICAvL3JlbW92ZSB0aGUgb2xkIG1lZGlhIHN0cmVhbVxuXHQgICAgICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZGV2aWNlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyBhIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2l0aCB0aGUgbGlzdCBvZiBhdWRpbyBpbnB1dCBkZXZpY2VzIGF2YWlsYWJsZS5cblx0XHQgKiAgQHJldHVybiB7UHJvbWlzZX0gVGhlIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIHRoZSBkZXZpY2VzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlVzZXJNZWRpYS5lbnVtZXJhdGVEZXZpY2VzKCkudGhlbihmdW5jdGlvbihkZXZpY2VzKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKGRldmljZXMpXG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuVXNlck1lZGlhLmVudW1lcmF0ZURldmljZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oZnVuY3Rpb24gKGRldmljZXMpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGRldmljZXMuZmlsdGVyKGZ1bmN0aW9uIChkZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBkZXZpY2Uua2luZCA9PT0gJ2F1ZGlvaW5wdXQnO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgXCJzdGFydGVkXCIgd2hlbiB0aGUgbWljcm9waG9uZSBpcyBvcGVuXG5cdFx0ICogIGFuZCBcInN0b3BwZWRcIiB3aGVuIHRoZSBtaWMgaXMgY2xvc2VkLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbSAmJiB0aGlzLl9zdHJlYW0uYWN0aXZlID8gVG9uZS5TdGF0ZS5TdGFydGVkIDogVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRSZXR1cm5zIGFuIGlkZW50aWZpZXIgZm9yIHRoZSByZXByZXNlbnRlZCBkZXZpY2UgdGhhdCBpc1xuXHRcdCAqIFx0cGVyc2lzdGVkIGFjcm9zcyBzZXNzaW9ucy4gSXQgaXMgdW4tZ3Vlc3NhYmxlIGJ5IG90aGVyIGFwcGxpY2F0aW9ucyBhbmRcblx0XHQgKiBcdHVuaXF1ZSB0byB0aGUgb3JpZ2luIG9mIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLiBJdCBpcyByZXNldCB3aGVuIHRoZVxuXHRcdCAqIFx0dXNlciBjbGVhcnMgY29va2llcyAoZm9yIFByaXZhdGUgQnJvd3NpbmcsIGEgZGlmZmVyZW50IGlkZW50aWZpZXIgaXNcblx0XHQgKiBcdHVzZWQgdGhhdCBpcyBub3QgcGVyc2lzdGVkIGFjcm9zcyBzZXNzaW9ucykuIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlXG5cdFx0ICogXHRkZXZpY2UgaXMgbm90IG9wZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIGRldmljZUlkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnZGV2aWNlSWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2UuZGV2aWNlSWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0UmV0dXJucyBhIGdyb3VwIGlkZW50aWZpZXIuIFR3byBkZXZpY2VzIGhhdmUgdGhlXG5cdFx0ICogXHRzYW1lIGdyb3VwIGlkZW50aWZpZXIgaWYgdGhleSBiZWxvbmcgdG8gdGhlIHNhbWUgcGh5c2ljYWwgZGV2aWNlLlxuXHRcdCAqIFx0UmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgZGV2aWNlIGlzIG5vdCBvcGVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBncm91cElkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnZ3JvdXBJZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZS5ncm91cElkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFJldHVybnMgYSBsYWJlbCBkZXNjcmliaW5nIHRoaXMgZGV2aWNlIChmb3IgZXhhbXBsZSBcIkJ1aWx0LWluIE1pY3JvcGhvbmVcIikuXG5cdFx0ICogXHRSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZSBkZXZpY2UgaXMgbm90IG9wZW4gb3IgbGFiZWwgaXMgbm90IGF2YWlsYWJsZVxuXHRcdCAqIFx0YmVjYXVzZSBvZiBwZXJtaXNzaW9ucy5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgZ3JvdXBJZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ2xhYmVsJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlLmxhYmVsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogdXNlck1lZGlhLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXAuXG5cdFx0ICogQHJldHVybiB7VG9uZS5Vc2VyTWVkaWF9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jbG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiBnZXRVc2VyTWVkaWEgaXMgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLlxuXHRcdCAqICBAdHlwZSAge0Jvb2xlYW59XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgc3VwcG9ydGVkXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEsICdzdXBwb3J0ZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmlzRGVmaW5lZChuYXZpZ2F0b3IubWVkaWFEZXZpY2VzKSAmJiBUb25lLmlzRnVuY3Rpb24obmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmUuVXNlck1lZGlhO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTWlkaSBpcyBhIHByaW1pdGl2ZSB0eXBlIGZvciBlbmNvZGluZyBUaW1lIHZhbHVlcy5cblx0XHQgKiAgICAgICAgIFRvbmUuTWlkaSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0IHRoZSBgbmV3YCBrZXl3b3JkLiBUb25lLk1pZGkgY2FuIGJlIHBhc3NlZFxuXHRcdCAqICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIG9mIGFueSBtZXRob2Qgd2hpY2ggdGFrZXMgdGltZSBhcyBhbiBhcmd1bWVudC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkZyZXF1ZW5jeX1cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIHZhbCAgICBUaGUgdGltZSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nPX0gIHVuaXRzICBUaGUgdW5pdHMgb2YgdGhlIHZhbHVlLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB0ID0gVG9uZS5NaWRpKFwiNG5cIik7Ly9hIHF1YXJ0ZXIgbm90ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuTWlkaSkge1xuXHQgICAgICAgICAgICBUb25lLkZyZXF1ZW5jeS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5NaWRpKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZGksIFRvbmUuRnJlcXVlbmN5KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB1bml0cyBpZiBub25lIGFyZSBnaXZlbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX2RlZmF1bHRVbml0cyA9ICdtaWRpJztcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIGZyZXF1ZW5jeSBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fZnJlcXVlbmN5VG9Vbml0cyA9IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20oVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzLmNhbGwodGhpcywgZnJlcSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fdGlja3NUb1VuaXRzID0gZnVuY3Rpb24gKHRpY2tzKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20oVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl90aWNrc1RvVW5pdHMuY2FsbCh0aGlzLCB0aWNrcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBiZWF0cyBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gYmVhdHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzLmNhbGwodGhpcywgYmVhdHMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzZWNvbmQgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtTZWNvbmRzfSBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9zZWNvbmRzVG9Vbml0cyA9IGZ1bmN0aW9uIChzZWNvbmRzKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20oVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9zZWNvbmRzVG9Vbml0cy5jYWxsKHRoaXMsIHNlY29uZHMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IGFzIGEgTUlESSBub3RlXG5cdFx0ICogIEByZXR1cm4gIHtNSURJfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuTWlkaSg2MCkudG9NaWRpKCk7IC8vNjBcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUudG9NaWRpID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IGFzIGEgTUlESSBub3RlXG5cdFx0ICogIEByZXR1cm4gIHtNSURJfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuTWlkaSg2MCkudG9NaWRpKCk7IC8vNjBcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUudG9GcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5Lm10b2YodGhpcy50b01pZGkoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyYW5zcG9zZXMgdGhlIGZyZXF1ZW5jeSBieSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlbWl0b25lcy5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWx9ICBpbnRlcnZhbFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5GcmVxdWVuY3l9IEEgbmV3IHRyYW5zcG9zZWQgZnJlcXVlbmN5XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJBNFwiKS50cmFuc3Bvc2UoMyk7IC8vXCJDNVwiXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLnRyYW5zcG9zZSA9IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnRvTWlkaSgpICsgaW50ZXJ2YWwpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZGk7XG5cdH0pO1xuXHRcblx0cmV0dXJuIFRvbmU7XG59KSk7IiwiLyohIHA1LmpzIHYwLjcuMiBTZXB0ZW1iZXIgMDIsIDIwMTggKi8gIWZ1bmN0aW9uKGEpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPWEoKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sYSk7ZWxzZXt2YXIgYjtiPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcyxiLnA1PWEoKX19KGZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIGZ1bmN0aW9uIGEoYixjLGQpe2Z1bmN0aW9uIGUoZyxoKXtpZighY1tnXSl7aWYoIWJbZ10pe3ZhciBpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWgmJmkpcmV0dXJuIGkoZywhMCk7aWYoZilyZXR1cm4gZihnLCEwKTt2YXIgaj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2crXCInXCIpO3Rocm93IGouY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixqfXZhciBrPWNbZ109e2V4cG9ydHM6e319O2JbZ11bMF0uY2FsbChrLmV4cG9ydHMsZnVuY3Rpb24oYSl7dmFyIGM9YltnXVsxXVthXTtyZXR1cm4gZShjfHxhKX0sayxrLmV4cG9ydHMsYSxiLGMsZCl9cmV0dXJuIGNbZ10uZXhwb3J0c31mb3IodmFyIGY9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxnPTA7ZzxkLmxlbmd0aDtnKyspZShkW2ddKTtyZXR1cm4gZX0oezE6W2Z1bmN0aW9uKGEsYixjKXshZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihhKXt2YXIgYj1hLmNoYXJDb2RlQXQoMCk7cmV0dXJuIGI9PT1mfHxiPT09az82MjpiPT09Z3x8Yj09PWw/NjM6YjxoPy0xOmI8aCsxMD9iLWgrMjYrMjY6YjxqKzI2P2ItajpiPGkrMjY/Yi1pKzI2OnZvaWQgMH1mdW5jdGlvbiBjKGEpe2Z1bmN0aW9uIGMoYSl7altsKytdPWF9dmFyIGQsZixnLGgsaSxqO2lmKGEubGVuZ3RoJTQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0XCIpO3ZhciBrPWEubGVuZ3RoO2k9XCI9XCI9PT1hLmNoYXJBdChrLTIpPzI6XCI9XCI9PT1hLmNoYXJBdChrLTEpPzE6MCxqPW5ldyBlKDMqYS5sZW5ndGgvNC1pKSxnPWk+MD9hLmxlbmd0aC00OmEubGVuZ3RoO3ZhciBsPTA7Zm9yKGQ9MCxmPTA7ZDxnO2QrPTQsZis9MyloPWIoYS5jaGFyQXQoZCkpPDwxOHxiKGEuY2hhckF0KGQrMSkpPDwxMnxiKGEuY2hhckF0KGQrMikpPDw2fGIoYS5jaGFyQXQoZCszKSksYygoMTY3MTE2ODAmaCk+PjE2KSxjKCg2NTI4MCZoKT4+OCksYygyNTUmaCk7cmV0dXJuIDI9PT1pPyhoPWIoYS5jaGFyQXQoZCkpPDwyfGIoYS5jaGFyQXQoZCsxKSk+PjQsYygyNTUmaCkpOjE9PT1pJiYoaD1iKGEuY2hhckF0KGQpKTw8MTB8YihhLmNoYXJBdChkKzEpKTw8NHxiKGEuY2hhckF0KGQrMikpPj4yLGMoaD4+OCYyNTUpLGMoMjU1JmgpKSxqfWZ1bmN0aW9uIGQoYSl7ZnVuY3Rpb24gYihhKXtyZXR1cm5cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIi5jaGFyQXQoYSl9ZnVuY3Rpb24gYyhhKXtyZXR1cm4gYihhPj4xOCY2MykrYihhPj4xMiY2MykrYihhPj42JjYzKStiKDYzJmEpfXZhciBkLGUsZixnPWEubGVuZ3RoJTMsaD1cIlwiO2ZvcihkPTAsZj1hLmxlbmd0aC1nO2Q8ZjtkKz0zKWU9KGFbZF08PDE2KSsoYVtkKzFdPDw4KSthW2QrMl0saCs9YyhlKTtzd2l0Y2goZyl7Y2FzZSAxOmU9YVthLmxlbmd0aC0xXSxoKz1iKGU+PjIpLGgrPWIoZTw8NCY2MyksaCs9XCI9PVwiO2JyZWFrO2Nhc2UgMjplPShhW2EubGVuZ3RoLTJdPDw4KSthW2EubGVuZ3RoLTFdLGgrPWIoZT4+MTApLGgrPWIoZT4+NCY2MyksaCs9YihlPDwyJjYzKSxoKz1cIj1cIn1yZXR1cm4gaH12YXIgZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LGY9XCIrXCIuY2hhckNvZGVBdCgwKSxnPVwiL1wiLmNoYXJDb2RlQXQoMCksaD1cIjBcIi5jaGFyQ29kZUF0KDApLGk9XCJhXCIuY2hhckNvZGVBdCgwKSxqPVwiQVwiLmNoYXJDb2RlQXQoMCksaz1cIi1cIi5jaGFyQ29kZUF0KDApLGw9XCJfXCIuY2hhckNvZGVBdCgwKTthLnRvQnl0ZUFycmF5PWMsYS5mcm9tQnl0ZUFycmF5PWR9KHZvaWQgMD09PWM/dGhpcy5iYXNlNjRqcz17fTpjKX0se31dLDI6W2Z1bmN0aW9uKGEsYixjKXt9LHt9XSwzOltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoKXtmdW5jdGlvbiBhKCl7fXRyeXt2YXIgYj1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gYi5mb289ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9LGIuY29uc3RydWN0b3I9YSw0Mj09PWIuZm9vKCkmJmIuY29uc3RydWN0b3I9PT1hJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnN1YmFycmF5JiYwPT09Yi5zdWJhcnJheSgxLDEpLmJ5dGVMZW5ndGh9Y2F0Y2goYSl7cmV0dXJuITF9fWZ1bmN0aW9uIGUoKXtyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiBmKGEpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZj8oZi5UWVBFRF9BUlJBWV9TVVBQT1JUfHwodGhpcy5sZW5ndGg9MCx0aGlzLnBhcmVudD12b2lkIDApLFwibnVtYmVyXCI9PXR5cGVvZiBhP2codGhpcyxhKTpcInN0cmluZ1wiPT10eXBlb2YgYT9oKHRoaXMsYSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOlwidXRmOFwiKTppKHRoaXMsYSkpOmFyZ3VtZW50cy5sZW5ndGg+MT9uZXcgZihhLGFyZ3VtZW50c1sxXSk6bmV3IGYoYSl9ZnVuY3Rpb24gZyhhLGIpe2lmKGE9cChhLGI8MD8wOjB8cShiKSksIWYuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIGM9MDtjPGI7YysrKWFbY109MDtyZXR1cm4gYX1mdW5jdGlvbiBoKGEsYixjKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYyYmXCJcIiE9PWN8fChjPVwidXRmOFwiKSxhPXAoYSwwfHMoYixjKSksYS53cml0ZShiLGMpLGF9ZnVuY3Rpb24gaShhLGIpe2lmKGYuaXNCdWZmZXIoYikpcmV0dXJuIGooYSxiKTtpZihZKGIpKXJldHVybiBrKGEsYik7aWYobnVsbD09Yil0aHJvdyBuZXcgVHlwZUVycm9yKFwibXVzdCBzdGFydCB3aXRoIG51bWJlciwgYnVmZmVyLCBhcnJheSBvciBzdHJpbmdcIik7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyKXtpZihiLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBsKGEsYik7aWYoYiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBtKGEsYil9cmV0dXJuIGIubGVuZ3RoP24oYSxiKTpvKGEsYil9ZnVuY3Rpb24gaihhLGIpe3ZhciBjPTB8cShiLmxlbmd0aCk7cmV0dXJuIGE9cChhLGMpLGIuY29weShhLDAsMCxjKSxhfWZ1bmN0aW9uIGsoYSxiKXt2YXIgYz0wfHEoYi5sZW5ndGgpO2E9cChhLGMpO2Zvcih2YXIgZD0wO2Q8YztkKz0xKWFbZF09MjU1JmJbZF07cmV0dXJuIGF9ZnVuY3Rpb24gbChhLGIpe3ZhciBjPTB8cShiLmxlbmd0aCk7YT1wKGEsYyk7Zm9yKHZhciBkPTA7ZDxjO2QrPTEpYVtkXT0yNTUmYltkXTtyZXR1cm4gYX1mdW5jdGlvbiBtKGEsYil7cmV0dXJuIGYuVFlQRURfQVJSQVlfU1VQUE9SVD8oYi5ieXRlTGVuZ3RoLGE9Zi5fYXVnbWVudChuZXcgVWludDhBcnJheShiKSkpOmE9bChhLG5ldyBVaW50OEFycmF5KGIpKSxhfWZ1bmN0aW9uIG4oYSxiKXt2YXIgYz0wfHEoYi5sZW5ndGgpO2E9cChhLGMpO2Zvcih2YXIgZD0wO2Q8YztkKz0xKWFbZF09MjU1JmJbZF07cmV0dXJuIGF9ZnVuY3Rpb24gbyhhLGIpe3ZhciBjLGQ9MDtcIkJ1ZmZlclwiPT09Yi50eXBlJiZZKGIuZGF0YSkmJihjPWIuZGF0YSxkPTB8cShjLmxlbmd0aCkpLGE9cChhLGQpO2Zvcih2YXIgZT0wO2U8ZDtlKz0xKWFbZV09MjU1JmNbZV07cmV0dXJuIGF9ZnVuY3Rpb24gcChhLGIpe3JldHVybiBmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGE9Zi5fYXVnbWVudChuZXcgVWludDhBcnJheShiKSksYS5fX3Byb3RvX189Zi5wcm90b3R5cGUpOihhLmxlbmd0aD1iLGEuX2lzQnVmZmVyPSEwKSwwIT09YiYmYjw9Zi5wb29sU2l6ZT4+PjEmJihhLnBhcmVudD1aKSxhfWZ1bmN0aW9uIHEoYSl7aWYoYT49ZSgpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweFwiK2UoKS50b1N0cmluZygxNikrXCIgYnl0ZXNcIik7cmV0dXJuIDB8YX1mdW5jdGlvbiByKGEsYil7aWYoISh0aGlzIGluc3RhbmNlb2YgcikpcmV0dXJuIG5ldyByKGEsYik7dmFyIGM9bmV3IGYoYSxiKTtyZXR1cm4gZGVsZXRlIGMucGFyZW50LGN9ZnVuY3Rpb24gcyhhLGIpe1wic3RyaW5nXCIhPXR5cGVvZiBhJiYoYT1cIlwiK2EpO3ZhciBjPWEubGVuZ3RoO2lmKDA9PT1jKXJldHVybiAwO2Zvcih2YXIgZD0hMTs7KXN3aXRjaChiKXtjYXNlXCJhc2NpaVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcInJhd1wiOmNhc2VcInJhd3NcIjpyZXR1cm4gYztjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gUihhKS5sZW5ndGg7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIDIqYztjYXNlXCJoZXhcIjpyZXR1cm4gYz4+PjE7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIFUoYSkubGVuZ3RoO2RlZmF1bHQ6aWYoZClyZXR1cm4gUihhKS5sZW5ndGg7Yj0oXCJcIitiKS50b0xvd2VyQ2FzZSgpLGQ9ITB9fWZ1bmN0aW9uIHQoYSxiLGMpe3ZhciBkPSExO2lmKGJ8PTAsYz12b2lkIDA9PT1jfHxjPT09MS8wP3RoaXMubGVuZ3RoOjB8YyxhfHwoYT1cInV0ZjhcIiksYjwwJiYoYj0wKSxjPnRoaXMubGVuZ3RoJiYoYz10aGlzLmxlbmd0aCksYzw9YilyZXR1cm5cIlwiO2Zvcig7Oylzd2l0Y2goYSl7Y2FzZVwiaGV4XCI6cmV0dXJuIEYodGhpcyxiLGMpO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBCKHRoaXMsYixjKTtjYXNlXCJhc2NpaVwiOnJldHVybiBEKHRoaXMsYixjKTtjYXNlXCJiaW5hcnlcIjpyZXR1cm4gRSh0aGlzLGIsYyk7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIEEodGhpcyxiLGMpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBHKHRoaXMsYixjKTtkZWZhdWx0OmlmKGQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2EpO2E9KGErXCJcIikudG9Mb3dlckNhc2UoKSxkPSEwfX1mdW5jdGlvbiB1KGEsYixjLGQpe2M9TnVtYmVyKGMpfHwwO3ZhciBlPWEubGVuZ3RoLWM7ZD8oZD1OdW1iZXIoZCkpPmUmJihkPWUpOmQ9ZTt2YXIgZj1iLmxlbmd0aDtpZihmJTIhPTApdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBoZXggc3RyaW5nXCIpO2Q+Zi8yJiYoZD1mLzIpO2Zvcih2YXIgZz0wO2c8ZDtnKyspe3ZhciBoPXBhcnNlSW50KGIuc3Vic3RyKDIqZywyKSwxNik7aWYoaXNOYU4oaCkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBoZXggc3RyaW5nXCIpO2FbYytnXT1ofXJldHVybiBnfWZ1bmN0aW9uIHYoYSxiLGMsZCl7cmV0dXJuIFYoUihiLGEubGVuZ3RoLWMpLGEsYyxkKX1mdW5jdGlvbiB3KGEsYixjLGQpe3JldHVybiBWKFMoYiksYSxjLGQpfWZ1bmN0aW9uIHgoYSxiLGMsZCl7cmV0dXJuIHcoYSxiLGMsZCl9ZnVuY3Rpb24geShhLGIsYyxkKXtyZXR1cm4gVihVKGIpLGEsYyxkKX1mdW5jdGlvbiB6KGEsYixjLGQpe3JldHVybiBWKFQoYixhLmxlbmd0aC1jKSxhLGMsZCl9ZnVuY3Rpb24gQShhLGIsYyl7cmV0dXJuIDA9PT1iJiZjPT09YS5sZW5ndGg/Vy5mcm9tQnl0ZUFycmF5KGEpOlcuZnJvbUJ5dGVBcnJheShhLnNsaWNlKGIsYykpfWZ1bmN0aW9uIEIoYSxiLGMpe2M9TWF0aC5taW4oYS5sZW5ndGgsYyk7Zm9yKHZhciBkPVtdLGU9YjtlPGM7KXt2YXIgZj1hW2VdLGc9bnVsbCxoPWY+MjM5PzQ6Zj4yMjM/MzpmPjE5MT8yOjE7aWYoZStoPD1jKXt2YXIgaSxqLGssbDtzd2l0Y2goaCl7Y2FzZSAxOmY8MTI4JiYoZz1mKTticmVhaztjYXNlIDI6aT1hW2UrMV0sMTI4PT0oMTkyJmkpJiYobD0oMzEmZik8PDZ8NjMmaSk+MTI3JiYoZz1sKTticmVhaztjYXNlIDM6aT1hW2UrMV0saj1hW2UrMl0sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImaikmJihsPSgxNSZmKTw8MTJ8KDYzJmkpPDw2fDYzJmopPjIwNDcmJihsPDU1Mjk2fHxsPjU3MzQzKSYmKGc9bCk7YnJlYWs7Y2FzZSA0Omk9YVtlKzFdLGo9YVtlKzJdLGs9YVtlKzNdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJmopJiYxMjg9PSgxOTImaykmJihsPSgxNSZmKTw8MTh8KDYzJmkpPDwxMnwoNjMmaik8PDZ8NjMmayk+NjU1MzUmJmw8MTExNDExMiYmKGc9bCl9fW51bGw9PT1nPyhnPTY1NTMzLGg9MSk6Zz42NTUzNSYmKGctPTY1NTM2LGQucHVzaChnPj4+MTAmMTAyM3w1NTI5NiksZz01NjMyMHwxMDIzJmcpLGQucHVzaChnKSxlKz1ofXJldHVybiBDKGQpfWZ1bmN0aW9uIEMoYSl7dmFyIGI9YS5sZW5ndGg7aWYoYjw9JClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsYSk7Zm9yKHZhciBjPVwiXCIsZD0wO2Q8YjspYys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsYS5zbGljZShkLGQrPSQpKTtyZXR1cm4gY31mdW5jdGlvbiBEKGEsYixjKXt2YXIgZD1cIlwiO2M9TWF0aC5taW4oYS5sZW5ndGgsYyk7Zm9yKHZhciBlPWI7ZTxjO2UrKylkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZhW2VdKTtyZXR1cm4gZH1mdW5jdGlvbiBFKGEsYixjKXt2YXIgZD1cIlwiO2M9TWF0aC5taW4oYS5sZW5ndGgsYyk7Zm9yKHZhciBlPWI7ZTxjO2UrKylkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGFbZV0pO3JldHVybiBkfWZ1bmN0aW9uIEYoYSxiLGMpe3ZhciBkPWEubGVuZ3RoOyghYnx8YjwwKSYmKGI9MCksKCFjfHxjPDB8fGM+ZCkmJihjPWQpO2Zvcih2YXIgZT1cIlwiLGY9YjtmPGM7ZisrKWUrPVEoYVtmXSk7cmV0dXJuIGV9ZnVuY3Rpb24gRyhhLGIsYyl7Zm9yKHZhciBkPWEuc2xpY2UoYixjKSxlPVwiXCIsZj0wO2Y8ZC5sZW5ndGg7Zis9MillKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGRbZl0rMjU2KmRbZisxXSk7cmV0dXJuIGV9ZnVuY3Rpb24gSChhLGIsYyl7aWYoYSUxIT0wfHxhPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgaXMgbm90IHVpbnRcIik7aWYoYStiPmMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoXCIpfWZ1bmN0aW9uIEkoYSxiLGMsZCxlLGcpe2lmKCFmLmlzQnVmZmVyKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJidWZmZXIgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZVwiKTtpZihiPmV8fGI8Zyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInZhbHVlIGlzIG91dCBvZiBib3VuZHNcIik7aWYoYytkPmEubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiaW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIEooYSxiLGMsZCl7YjwwJiYoYj02NTUzNStiKzEpO2Zvcih2YXIgZT0wLGY9TWF0aC5taW4oYS5sZW5ndGgtYywyKTtlPGY7ZSsrKWFbYytlXT0oYiYyNTU8PDgqKGQ/ZToxLWUpKT4+PjgqKGQ/ZToxLWUpfWZ1bmN0aW9uIEsoYSxiLGMsZCl7YjwwJiYoYj00Mjk0OTY3Mjk1K2IrMSk7Zm9yKHZhciBlPTAsZj1NYXRoLm1pbihhLmxlbmd0aC1jLDQpO2U8ZjtlKyspYVtjK2VdPWI+Pj44KihkP2U6My1lKSYyNTV9ZnVuY3Rpb24gTChhLGIsYyxkLGUsZil7aWYoYj5lfHxiPGYpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ2YWx1ZSBpcyBvdXQgb2YgYm91bmRzXCIpO2lmKGMrZD5hLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImluZGV4IG91dCBvZiByYW5nZVwiKTtpZihjPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gTShhLGIsYyxkLGUpe3JldHVybiBlfHxMKGEsYixjLDQsMy40MDI4MjM0NjYzODUyODg2ZTM4LC0zLjQwMjgyMzQ2NjM4NTI4ODZlMzgpLFgud3JpdGUoYSxiLGMsZCwyMyw0KSxjKzR9ZnVuY3Rpb24gTihhLGIsYyxkLGUpe3JldHVybiBlfHxMKGEsYixjLDgsMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCwtMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCksWC53cml0ZShhLGIsYyxkLDUyLDgpLGMrOH1mdW5jdGlvbiBPKGEpe2lmKGE9UChhKS5yZXBsYWNlKGFhLFwiXCIpLGEubGVuZ3RoPDIpcmV0dXJuXCJcIjtmb3IoO2EubGVuZ3RoJTQhPTA7KWErPVwiPVwiO3JldHVybiBhfWZ1bmN0aW9uIFAoYSl7cmV0dXJuIGEudHJpbT9hLnRyaW0oKTphLnJlcGxhY2UoL15cXHMrfFxccyskL2csXCJcIil9ZnVuY3Rpb24gUShhKXtyZXR1cm4gYTwxNj9cIjBcIithLnRvU3RyaW5nKDE2KTphLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBSKGEsYil7Yj1ifHwxLzA7Zm9yKHZhciBjLGQ9YS5sZW5ndGgsZT1udWxsLGY9W10sZz0wO2c8ZDtnKyspe2lmKChjPWEuY2hhckNvZGVBdChnKSk+NTUyOTUmJmM8NTczNDQpe2lmKCFlKXtpZihjPjU2MzE5KXsoYi09Myk+LTEmJmYucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoZysxPT09ZCl7KGItPTMpPi0xJiZmLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWU9Yztjb250aW51ZX1pZihjPDU2MzIwKXsoYi09Myk+LTEmJmYucHVzaCgyMzksMTkxLDE4OSksZT1jO2NvbnRpbnVlfWM9NjU1MzYrKGUtNTUyOTY8PDEwfGMtNTYzMjApfWVsc2UgZSYmKGItPTMpPi0xJiZmLnB1c2goMjM5LDE5MSwxODkpO2lmKGU9bnVsbCxjPDEyOCl7aWYoKGItPTEpPDApYnJlYWs7Zi5wdXNoKGMpfWVsc2UgaWYoYzwyMDQ4KXtpZigoYi09Mik8MClicmVhaztmLnB1c2goYz4+NnwxOTIsNjMmY3wxMjgpfWVsc2UgaWYoYzw2NTUzNil7aWYoKGItPTMpPDApYnJlYWs7Zi5wdXNoKGM+PjEyfDIyNCxjPj42JjYzfDEyOCw2MyZjfDEyOCl9ZWxzZXtpZighKGM8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb2RlIHBvaW50XCIpO2lmKChiLT00KTwwKWJyZWFrO2YucHVzaChjPj4xOHwyNDAsYz4+MTImNjN8MTI4LGM+PjYmNjN8MTI4LDYzJmN8MTI4KX19cmV0dXJuIGZ9ZnVuY3Rpb24gUyhhKXtmb3IodmFyIGI9W10sYz0wO2M8YS5sZW5ndGg7YysrKWIucHVzaCgyNTUmYS5jaGFyQ29kZUF0KGMpKTtyZXR1cm4gYn1mdW5jdGlvbiBUKGEsYil7Zm9yKHZhciBjLGQsZSxmPVtdLGc9MDtnPGEubGVuZ3RoJiYhKChiLT0yKTwwKTtnKyspYz1hLmNoYXJDb2RlQXQoZyksZD1jPj44LGU9YyUyNTYsZi5wdXNoKGUpLGYucHVzaChkKTtyZXR1cm4gZn1mdW5jdGlvbiBVKGEpe3JldHVybiBXLnRvQnl0ZUFycmF5KE8oYSkpfWZ1bmN0aW9uIFYoYSxiLGMsZCl7Zm9yKHZhciBlPTA7ZTxkJiYhKGUrYz49Yi5sZW5ndGh8fGU+PWEubGVuZ3RoKTtlKyspYltlK2NdPWFbZV07cmV0dXJuIGV9dmFyIFc9YShcImJhc2U2NC1qc1wiKSxYPWEoXCJpZWVlNzU0XCIpLFk9YShcImlzYXJyYXlcIik7Yy5CdWZmZXI9ZixjLlNsb3dCdWZmZXI9cixjLklOU1BFQ1RfTUFYX0JZVEVTPTUwLGYucG9vbFNpemU9ODE5Mjt2YXIgWj17fTtmLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwIT09Yi5UWVBFRF9BUlJBWV9TVVBQT1JUP2IuVFlQRURfQVJSQVlfU1VQUE9SVDpkKCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyhmLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsZi5fX3Byb3RvX189VWludDhBcnJheSk6KGYucHJvdG90eXBlLmxlbmd0aD12b2lkIDAsZi5wcm90b3R5cGUucGFyZW50PXZvaWQgMCksZi5pc0J1ZmZlcj1mdW5jdGlvbihhKXtyZXR1cm4hKG51bGw9PWF8fCFhLl9pc0J1ZmZlcil9LGYuY29tcGFyZT1mdW5jdGlvbihhLGIpe2lmKCFmLmlzQnVmZmVyKGEpfHwhZi5pc0J1ZmZlcihiKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVyc1wiKTtpZihhPT09YilyZXR1cm4gMDtmb3IodmFyIGM9YS5sZW5ndGgsZD1iLmxlbmd0aCxlPTAsZz1NYXRoLm1pbihjLGQpO2U8ZyYmYVtlXT09PWJbZV07KSsrZTtyZXR1cm4gZSE9PWcmJihjPWFbZV0sZD1iW2VdKSxjPGQ/LTE6ZDxjPzE6MH0sZi5pc0VuY29kaW5nPWZ1bmN0aW9uKGEpe3N3aXRjaChTdHJpbmcoYSkudG9Mb3dlckNhc2UoKSl7Y2FzZVwiaGV4XCI6Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJiYXNlNjRcIjpjYXNlXCJyYXdcIjpjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sZi5jb25jYXQ9ZnVuY3Rpb24oYSxiKXtpZighWShhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwibGlzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMuXCIpO2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gbmV3IGYoMCk7dmFyIGM7aWYodm9pZCAwPT09Yilmb3IoYj0wLGM9MDtjPGEubGVuZ3RoO2MrKyliKz1hW2NdLmxlbmd0aDt2YXIgZD1uZXcgZihiKSxlPTA7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGc9YVtjXTtnLmNvcHkoZCxlKSxlKz1nLmxlbmd0aH1yZXR1cm4gZH0sZi5ieXRlTGVuZ3RoPXMsZi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09YT9cIlwiOjA9PT1hcmd1bWVudHMubGVuZ3RoP0IodGhpcywwLGEpOnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxmLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oYSl7aWYoIWYuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXJcIik7cmV0dXJuIHRoaXM9PT1hfHwwPT09Zi5jb21wYXJlKHRoaXMsYSl9LGYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgYT1cIlwiLGI9Yy5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGE9dGhpcy50b1N0cmluZyhcImhleFwiLDAsYikubWF0Y2goLy57Mn0vZykuam9pbihcIiBcIiksdGhpcy5sZW5ndGg+YiYmKGErPVwiIC4uLiBcIikpLFwiPEJ1ZmZlciBcIithK1wiPlwifSxmLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGEpe2lmKCFmLmlzQnVmZmVyKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09YT8wOmYuY29tcGFyZSh0aGlzLGEpfSxmLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIsYyl7Zm9yKHZhciBkPS0xLGU9MDtjK2U8YS5sZW5ndGg7ZSsrKWlmKGFbYytlXT09PWJbLTE9PT1kPzA6ZS1kXSl7aWYoLTE9PT1kJiYoZD1lKSxlLWQrMT09PWIubGVuZ3RoKXJldHVybiBjK2R9ZWxzZSBkPS0xO3JldHVybi0xfWlmKGI+MjE0NzQ4MzY0Nz9iPTIxNDc0ODM2NDc6YjwtMjE0NzQ4MzY0OCYmKGI9LTIxNDc0ODM2NDgpLGI+Pj0wLDA9PT10aGlzLmxlbmd0aClyZXR1cm4tMTtpZihiPj10aGlzLmxlbmd0aClyZXR1cm4tMTtpZihiPDAmJihiPU1hdGgubWF4KHRoaXMubGVuZ3RoK2IsMCkpLFwic3RyaW5nXCI9PXR5cGVvZiBhKXJldHVybiAwPT09YS5sZW5ndGg/LTE6U3RyaW5nLnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcyxhLGIpO2lmKGYuaXNCdWZmZXIoYSkpcmV0dXJuIGModGhpcyxhLGIpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBhKXJldHVybiBmLlRZUEVEX0FSUkFZX1NVUFBPUlQmJlwiZnVuY3Rpb25cIj09PVVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsYSxiKTpjKHRoaXMsW2FdLGIpO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXJcIil9LGYucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gY29uc29sZS5sb2coXCIuZ2V0KCkgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHVzaW5nIGFycmF5IGluZGV4ZXMgaW5zdGVhZC5cIiksdGhpcy5yZWFkVUludDgoYSl9LGYucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe3JldHVybiBjb25zb2xlLmxvZyhcIi5zZXQoKSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdXNpbmcgYXJyYXkgaW5kZXhlcyBpbnN0ZWFkLlwiKSx0aGlzLndyaXRlVUludDgoYSxiKX0sZi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oYSxiLGMsZCl7aWYodm9pZCAwPT09YilkPVwidXRmOFwiLGM9dGhpcy5sZW5ndGgsYj0wO2Vsc2UgaWYodm9pZCAwPT09YyYmXCJzdHJpbmdcIj09dHlwZW9mIGIpZD1iLGM9dGhpcy5sZW5ndGgsYj0wO2Vsc2UgaWYoaXNGaW5pdGUoYikpYnw9MCxpc0Zpbml0ZShjKT8oY3w9MCx2b2lkIDA9PT1kJiYoZD1cInV0ZjhcIikpOihkPWMsYz12b2lkIDApO2Vsc2V7dmFyIGU9ZDtkPWIsYj0wfGMsYz1lfXZhciBmPXRoaXMubGVuZ3RoLWI7aWYoKHZvaWQgMD09PWN8fGM+ZikmJihjPWYpLGEubGVuZ3RoPjAmJihjPDB8fGI8MCl8fGI+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJhdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kc1wiKTtkfHwoZD1cInV0ZjhcIik7Zm9yKHZhciBnPSExOzspc3dpdGNoKGQpe2Nhc2VcImhleFwiOnJldHVybiB1KHRoaXMsYSxiLGMpO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiB2KHRoaXMsYSxiLGMpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIHcodGhpcyxhLGIsYyk7Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIHgodGhpcyxhLGIsYyk7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIHkodGhpcyxhLGIsYyk7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIHoodGhpcyxhLGIsYyk7ZGVmYXVsdDppZihnKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitkKTtkPShcIlwiK2QpLnRvTG93ZXJDYXNlKCksZz0hMH19LGYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiQnVmZmVyXCIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgJD00MDk2O2YucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5sZW5ndGg7YT1+fmEsYj12b2lkIDA9PT1iP2M6fn5iLGE8MD8oYSs9Yyk8MCYmKGE9MCk6YT5jJiYoYT1jKSxiPDA/KGIrPWMpPDAmJihiPTApOmI+YyYmKGI9YyksYjxhJiYoYj1hKTt2YXIgZDtpZihmLlRZUEVEX0FSUkFZX1NVUFBPUlQpZD1mLl9hdWdtZW50KHRoaXMuc3ViYXJyYXkoYSxiKSk7ZWxzZXt2YXIgZT1iLWE7ZD1uZXcgZihlLHZvaWQgMCk7Zm9yKHZhciBnPTA7ZzxlO2crKylkW2ddPXRoaXNbZythXX1yZXR1cm4gZC5sZW5ndGgmJihkLnBhcmVudD10aGlzLnBhcmVudHx8dGhpcyksZH0sZi5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihhLGIsYyl7YXw9MCxifD0wLGN8fEgoYSxiLHRoaXMubGVuZ3RoKTtmb3IodmFyIGQ9dGhpc1thXSxlPTEsZj0wOysrZjxiJiYoZSo9MjU2KTspZCs9dGhpc1thK2ZdKmU7cmV0dXJuIGR9LGYucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oYSxiLGMpe2F8PTAsYnw9MCxjfHxIKGEsYix0aGlzLmxlbmd0aCk7Zm9yKHZhciBkPXRoaXNbYSstLWJdLGU9MTtiPjAmJihlKj0yNTYpOylkKz10aGlzW2ErLS1iXSplO3JldHVybiBkfSxmLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDEsdGhpcy5sZW5ndGgpLHRoaXNbYV19LGYucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsMix0aGlzLmxlbmd0aCksdGhpc1thXXx0aGlzW2ErMV08PDh9LGYucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsMix0aGlzLmxlbmd0aCksdGhpc1thXTw8OHx0aGlzW2ErMV19LGYucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksKHRoaXNbYV18dGhpc1thKzFdPDw4fHRoaXNbYSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbYSszXX0sZi5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2FdKyh0aGlzW2ErMV08PDE2fHRoaXNbYSsyXTw8OHx0aGlzW2ErM10pfSxmLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oYSxiLGMpe2F8PTAsYnw9MCxjfHxIKGEsYix0aGlzLmxlbmd0aCk7Zm9yKHZhciBkPXRoaXNbYV0sZT0xLGY9MDsrK2Y8YiYmKGUqPTI1Nik7KWQrPXRoaXNbYStmXSplO3JldHVybiBlKj0xMjgsZD49ZSYmKGQtPU1hdGgucG93KDIsOCpiKSksZH0sZi5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGEsYixjKXthfD0wLGJ8PTAsY3x8SChhLGIsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZD1iLGU9MSxmPXRoaXNbYSstLWRdO2Q+MCYmKGUqPTI1Nik7KWYrPXRoaXNbYSstLWRdKmU7cmV0dXJuIGUqPTEyOCxmPj1lJiYoZi09TWF0aC5wb3coMiw4KmIpKSxmfSxmLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbYV0/LTEqKDI1NS10aGlzW2FdKzEpOnRoaXNbYV19LGYucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGEsYil7Ynx8SChhLDIsdGhpcy5sZW5ndGgpO3ZhciBjPXRoaXNbYV18dGhpc1thKzFdPDw4O3JldHVybiAzMjc2OCZjPzQyOTQ5MDE3NjB8YzpjfSxmLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihhLGIpe2J8fEgoYSwyLHRoaXMubGVuZ3RoKTt2YXIgYz10aGlzW2ErMV18dGhpc1thXTw8ODtyZXR1cm4gMzI3NjgmYz80Mjk0OTAxNzYwfGM6Y30sZi5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLHRoaXNbYV18dGhpc1thKzFdPDw4fHRoaXNbYSsyXTw8MTZ8dGhpc1thKzNdPDwyNH0sZi5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLHRoaXNbYV08PDI0fHRoaXNbYSsxXTw8MTZ8dGhpc1thKzJdPDw4fHRoaXNbYSszXX0sZi5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLFgucmVhZCh0aGlzLGEsITAsMjMsNCl9LGYucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSxYLnJlYWQodGhpcyxhLCExLDIzLDQpfSxmLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDgsdGhpcy5sZW5ndGgpLFgucmVhZCh0aGlzLGEsITAsNTIsOCl9LGYucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsOCx0aGlzLmxlbmd0aCksWC5yZWFkKHRoaXMsYSwhMSw1Miw4KX0sZi5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oYSxiLGMsZCl7YT0rYSxifD0wLGN8PTAsZHx8SSh0aGlzLGEsYixjLE1hdGgucG93KDIsOCpjKSwwKTt2YXIgZT0xLGY9MDtmb3IodGhpc1tiXT0yNTUmYTsrK2Y8YyYmKGUqPTI1Nik7KXRoaXNbYitmXT1hL2UmMjU1O3JldHVybiBiK2N9LGYucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGEsYixjLGQpe2E9K2EsYnw9MCxjfD0wLGR8fEkodGhpcyxhLGIsYyxNYXRoLnBvdygyLDgqYyksMCk7dmFyIGU9Yy0xLGY9MTtmb3IodGhpc1tiK2VdPTI1NSZhOy0tZT49MCYmKGYqPTI1Nik7KXRoaXNbYitlXT1hL2YmMjU1O3JldHVybiBiK2N9LGYucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwxLDI1NSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChhPU1hdGguZmxvb3IoYSkpLHRoaXNbYl09MjU1JmEsYisxfSxmLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMiw2NTUzNSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09MjU1JmEsdGhpc1tiKzFdPWE+Pj44KTpKKHRoaXMsYSxiLCEwKSxiKzJ9LGYucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwyLDY1NTM1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hPj4+OCx0aGlzW2IrMV09MjU1JmEpOkoodGhpcyxhLGIsITEpLGIrMn0sZi5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDQsNDI5NDk2NzI5NSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYiszXT1hPj4+MjQsdGhpc1tiKzJdPWE+Pj4xNix0aGlzW2IrMV09YT4+PjgsdGhpc1tiXT0yNTUmYSk6Syh0aGlzLGEsYiwhMCksYis0fSxmLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsNCw0Mjk0OTY3Mjk1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hPj4+MjQsdGhpc1tiKzFdPWE+Pj4xNix0aGlzW2IrMl09YT4+PjgsdGhpc1tiKzNdPTI1NSZhKTpLKHRoaXMsYSxiLCExKSxiKzR9LGYucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYT0rYSxifD0wLCFkKXt2YXIgZT1NYXRoLnBvdygyLDgqYy0xKTtJKHRoaXMsYSxiLGMsZS0xLC1lKX12YXIgZj0wLGc9MSxoPWE8MD8xOjA7Zm9yKHRoaXNbYl09MjU1JmE7KytmPGMmJihnKj0yNTYpOyl0aGlzW2IrZl09KGEvZz4+MCktaCYyNTU7cmV0dXJuIGIrY30sZi5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihhLGIsYyxkKXtpZihhPSthLGJ8PTAsIWQpe3ZhciBlPU1hdGgucG93KDIsOCpjLTEpO0kodGhpcyxhLGIsYyxlLTEsLWUpfXZhciBmPWMtMSxnPTEsaD1hPDA/MTowO2Zvcih0aGlzW2IrZl09MjU1JmE7LS1mPj0wJiYoZyo9MjU2KTspdGhpc1tiK2ZdPShhL2c+PjApLWgmMjU1O3JldHVybiBiK2N9LGYucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDEsMTI3LC0xMjgpLGYuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGE9TWF0aC5mbG9vcihhKSksYTwwJiYoYT0yNTUrYSsxKSx0aGlzW2JdPTI1NSZhLGIrMX0sZi5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMiwzMjc2NywtMzI3NjgpLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT0yNTUmYSx0aGlzW2IrMV09YT4+PjgpOkoodGhpcyxhLGIsITApLGIrMn0sZi5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMiwzMjc2NywtMzI3NjgpLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hPj4+OCx0aGlzW2IrMV09MjU1JmEpOkoodGhpcyxhLGIsITEpLGIrMn0sZi5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09MjU1JmEsdGhpc1tiKzFdPWE+Pj44LHRoaXNbYisyXT1hPj4+MTYsdGhpc1tiKzNdPWE+Pj4yNCk6Syh0aGlzLGEsYiwhMCksYis0fSxmLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGE8MCYmKGE9NDI5NDk2NzI5NSthKzEpLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hPj4+MjQsdGhpc1tiKzFdPWE+Pj4xNix0aGlzW2IrMl09YT4+PjgsdGhpc1tiKzNdPTI1NSZhKTpLKHRoaXMsYSxiLCExKSxiKzR9LGYucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIE0odGhpcyxhLGIsITAsYyl9LGYucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIE0odGhpcyxhLGIsITEsYyl9LGYucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBOKHRoaXMsYSxiLCEwLGMpfSxmLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTih0aGlzLGEsYiwhMSxjKX0sZi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhLGIsYyxkKXtpZihjfHwoYz0wKSxkfHwwPT09ZHx8KGQ9dGhpcy5sZW5ndGgpLGI+PWEubGVuZ3RoJiYoYj1hLmxlbmd0aCksYnx8KGI9MCksZD4wJiZkPGMmJihkPWMpLGQ9PT1jKXJldHVybiAwO2lmKDA9PT1hLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKGI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHNcIik7aWYoYzwwfHxjPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHNcIik7aWYoZDwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlRW5kIG91dCBvZiBib3VuZHNcIik7ZD50aGlzLmxlbmd0aCYmKGQ9dGhpcy5sZW5ndGgpLGEubGVuZ3RoLWI8ZC1jJiYoZD1hLmxlbmd0aC1iK2MpO3ZhciBlLGc9ZC1jO2lmKHRoaXM9PT1hJiZjPGImJmI8ZClmb3IoZT1nLTE7ZT49MDtlLS0pYVtlK2JdPXRoaXNbZStjXTtlbHNlIGlmKGc8MWUzfHwhZi5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihlPTA7ZTxnO2UrKylhW2UrYl09dGhpc1tlK2NdO2Vsc2UgYS5fc2V0KHRoaXMuc3ViYXJyYXkoYyxjK2cpLGIpO3JldHVybiBnfSxmLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGEsYixjKXtpZihhfHwoYT0wKSxifHwoYj0wKSxjfHwoYz10aGlzLmxlbmd0aCksYzxiKXRocm93IG5ldyBSYW5nZUVycm9yKFwiZW5kIDwgc3RhcnRcIik7aWYoYyE9PWImJjAhPT10aGlzLmxlbmd0aCl7aWYoYjwwfHxiPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInN0YXJ0IG91dCBvZiBib3VuZHNcIik7aWYoYzwwfHxjPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiZW5kIG91dCBvZiBib3VuZHNcIik7dmFyIGQ7aWYoXCJudW1iZXJcIj09dHlwZW9mIGEpZm9yKGQ9YjtkPGM7ZCsrKXRoaXNbZF09YTtlbHNle3ZhciBlPVIoYS50b1N0cmluZygpKSxmPWUubGVuZ3RoO2ZvcihkPWI7ZDxjO2QrKyl0aGlzW2RdPWVbZCVmXX1yZXR1cm4gdGhpc319LGYucHJvdG90eXBlLnRvQXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheSl7aWYoZi5UWVBFRF9BUlJBWV9TVVBQT1JUKXJldHVybiBuZXcgZih0aGlzKS5idWZmZXI7Zm9yKHZhciBhPW5ldyBVaW50OEFycmF5KHRoaXMubGVuZ3RoKSxiPTAsYz1hLmxlbmd0aDtiPGM7Yis9MSlhW2JdPXRoaXNbYl07cmV0dXJuIGEuYnVmZmVyfXRocm93IG5ldyBUeXBlRXJyb3IoXCJCdWZmZXIudG9BcnJheUJ1ZmZlciBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKX07dmFyIF89Zi5wcm90b3R5cGU7Zi5fYXVnbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gYS5jb25zdHJ1Y3Rvcj1mLGEuX2lzQnVmZmVyPSEwLGEuX3NldD1hLnNldCxhLmdldD1fLmdldCxhLnNldD1fLnNldCxhLndyaXRlPV8ud3JpdGUsYS50b1N0cmluZz1fLnRvU3RyaW5nLGEudG9Mb2NhbGVTdHJpbmc9Xy50b1N0cmluZyxhLnRvSlNPTj1fLnRvSlNPTixhLmVxdWFscz1fLmVxdWFscyxhLmNvbXBhcmU9Xy5jb21wYXJlLGEuaW5kZXhPZj1fLmluZGV4T2YsYS5jb3B5PV8uY29weSxhLnNsaWNlPV8uc2xpY2UsYS5yZWFkVUludExFPV8ucmVhZFVJbnRMRSxhLnJlYWRVSW50QkU9Xy5yZWFkVUludEJFLGEucmVhZFVJbnQ4PV8ucmVhZFVJbnQ4LGEucmVhZFVJbnQxNkxFPV8ucmVhZFVJbnQxNkxFLGEucmVhZFVJbnQxNkJFPV8ucmVhZFVJbnQxNkJFLGEucmVhZFVJbnQzMkxFPV8ucmVhZFVJbnQzMkxFLGEucmVhZFVJbnQzMkJFPV8ucmVhZFVJbnQzMkJFLGEucmVhZEludExFPV8ucmVhZEludExFLGEucmVhZEludEJFPV8ucmVhZEludEJFLGEucmVhZEludDg9Xy5yZWFkSW50OCxhLnJlYWRJbnQxNkxFPV8ucmVhZEludDE2TEUsYS5yZWFkSW50MTZCRT1fLnJlYWRJbnQxNkJFLGEucmVhZEludDMyTEU9Xy5yZWFkSW50MzJMRSxhLnJlYWRJbnQzMkJFPV8ucmVhZEludDMyQkUsYS5yZWFkRmxvYXRMRT1fLnJlYWRGbG9hdExFLGEucmVhZEZsb2F0QkU9Xy5yZWFkRmxvYXRCRSxhLnJlYWREb3VibGVMRT1fLnJlYWREb3VibGVMRSxhLnJlYWREb3VibGVCRT1fLnJlYWREb3VibGVCRSxhLndyaXRlVUludDg9Xy53cml0ZVVJbnQ4LGEud3JpdGVVSW50TEU9Xy53cml0ZVVJbnRMRSxhLndyaXRlVUludEJFPV8ud3JpdGVVSW50QkUsYS53cml0ZVVJbnQxNkxFPV8ud3JpdGVVSW50MTZMRSxhLndyaXRlVUludDE2QkU9Xy53cml0ZVVJbnQxNkJFLGEud3JpdGVVSW50MzJMRT1fLndyaXRlVUludDMyTEUsYS53cml0ZVVJbnQzMkJFPV8ud3JpdGVVSW50MzJCRSxhLndyaXRlSW50TEU9Xy53cml0ZUludExFLGEud3JpdGVJbnRCRT1fLndyaXRlSW50QkUsYS53cml0ZUludDg9Xy53cml0ZUludDgsYS53cml0ZUludDE2TEU9Xy53cml0ZUludDE2TEUsYS53cml0ZUludDE2QkU9Xy53cml0ZUludDE2QkUsYS53cml0ZUludDMyTEU9Xy53cml0ZUludDMyTEUsYS53cml0ZUludDMyQkU9Xy53cml0ZUludDMyQkUsYS53cml0ZUZsb2F0TEU9Xy53cml0ZUZsb2F0TEUsYS53cml0ZUZsb2F0QkU9Xy53cml0ZUZsb2F0QkUsYS53cml0ZURvdWJsZUxFPV8ud3JpdGVEb3VibGVMRSxhLndyaXRlRG91YmxlQkU9Xy53cml0ZURvdWJsZUJFLGEuZmlsbD1fLmZpbGwsYS5pbnNwZWN0PV8uaW5zcGVjdCxhLnRvQXJyYXlCdWZmZXI9Xy50b0FycmF5QnVmZmVyLGF9O3ZhciBhYT0vW14rXFwvMC05QS1aYS16LV9dL2d9KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtcImJhc2U2NC1qc1wiOjEsaWVlZTc1NDo3LGlzYXJyYXk6OH1dLDQ6W2Z1bmN0aW9uKGIsYyxkKXsoZnVuY3Rpb24oZSxmKXshZnVuY3Rpb24oYixlKXtcIm9iamVjdFwiPT10eXBlb2YgZCYmdm9pZCAwIT09Yz9jLmV4cG9ydHM9ZSgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJmEuYW1kP2EoZSk6Yi5FUzZQcm9taXNlPWUoKX0odGhpcyxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoYSl7dmFyIGI9dHlwZW9mIGE7cmV0dXJuIG51bGwhPT1hJiYoXCJvYmplY3RcIj09PWJ8fFwiZnVuY3Rpb25cIj09PWIpfWZ1bmN0aW9uIGMoYSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgYX1mdW5jdGlvbiBkKGEpe1g9YX1mdW5jdGlvbiBnKGEpe1k9YX1mdW5jdGlvbiBoKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUubmV4dFRpY2sobSl9fWZ1bmN0aW9uIGkoKXtyZXR1cm4gdm9pZCAwIT09Vz9mdW5jdGlvbigpe1cobSl9OmwoKX1mdW5jdGlvbiBqKCl7dmFyIGE9MCxiPW5ldyBfKG0pLGM9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7cmV0dXJuIGIub2JzZXJ2ZShjLHtjaGFyYWN0ZXJEYXRhOiEwfSksZnVuY3Rpb24oKXtjLmRhdGE9YT0rK2ElMn19ZnVuY3Rpb24gaygpe3ZhciBhPW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gYS5wb3J0MS5vbm1lc3NhZ2U9bSxmdW5jdGlvbigpe3JldHVybiBhLnBvcnQyLnBvc3RNZXNzYWdlKDApfX1mdW5jdGlvbiBsKCl7dmFyIGE9c2V0VGltZW91dDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYShtLDEpfX1mdW5jdGlvbiBtKCl7Zm9yKHZhciBhPTA7YTxWO2ErPTIpeygwLGNhW2FdKShjYVthKzFdKSxjYVthXT12b2lkIDAsY2FbYSsxXT12b2lkIDB9Vj0wfWZ1bmN0aW9uIG4oKXt0cnl7dmFyIGE9YixjPWEoXCJ2ZXJ0eFwiKTtyZXR1cm4gVz1jLnJ1bk9uTG9vcHx8Yy5ydW5PbkNvbnRleHQsaSgpfWNhdGNoKGEpe3JldHVybiBsKCl9fWZ1bmN0aW9uIG8oYSxiKXt2YXIgYz1hcmd1bWVudHMsZD10aGlzLGU9bmV3IHRoaXMuY29uc3RydWN0b3IocSk7dm9pZCAwPT09ZVtlYV0mJkooZSk7dmFyIGY9ZC5fc3RhdGU7cmV0dXJuIGY/ZnVuY3Rpb24oKXt2YXIgYT1jW2YtMV07WShmdW5jdGlvbigpe3JldHVybiBHKGYsZSxhLGQuX3Jlc3VsdCl9KX0oKTpDKGQsZSxhLGIpLGV9ZnVuY3Rpb24gcChhKXt2YXIgYj10aGlzO2lmKGEmJlwib2JqZWN0XCI9PXR5cGVvZiBhJiZhLmNvbnN0cnVjdG9yPT09YilyZXR1cm4gYTt2YXIgYz1uZXcgYihxKTtyZXR1cm4geShjLGEpLGN9ZnVuY3Rpb24gcSgpe31mdW5jdGlvbiByKCl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgY2Fubm90IHJlc29sdmUgYSBwcm9taXNlIHdpdGggaXRzZWxmXCIpfWZ1bmN0aW9uIHMoKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihcIkEgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS5cIil9ZnVuY3Rpb24gdChhKXt0cnl7cmV0dXJuIGEudGhlbn1jYXRjaChhKXtyZXR1cm4gaWEuZXJyb3I9YSxpYX19ZnVuY3Rpb24gdShhLGIsYyxkKXt0cnl7YS5jYWxsKGIsYyxkKX1jYXRjaChhKXtyZXR1cm4gYX19ZnVuY3Rpb24gdihhLGIsYyl7WShmdW5jdGlvbihhKXt2YXIgZD0hMSxlPXUoYyxiLGZ1bmN0aW9uKGMpe2R8fChkPSEwLGIhPT1jP3koYSxjKTpBKGEsYykpfSxmdW5jdGlvbihiKXtkfHwoZD0hMCxCKGEsYikpfSxcIlNldHRsZTogXCIrKGEuX2xhYmVsfHxcIiB1bmtub3duIHByb21pc2VcIikpOyFkJiZlJiYoZD0hMCxCKGEsZSkpfSxhKX1mdW5jdGlvbiB3KGEsYil7Yi5fc3RhdGU9PT1nYT9BKGEsYi5fcmVzdWx0KTpiLl9zdGF0ZT09PWhhP0IoYSxiLl9yZXN1bHQpOkMoYix2b2lkIDAsZnVuY3Rpb24oYil7cmV0dXJuIHkoYSxiKX0sZnVuY3Rpb24oYil7cmV0dXJuIEIoYSxiKX0pfWZ1bmN0aW9uIHgoYSxiLGQpe2IuY29uc3RydWN0b3I9PT1hLmNvbnN0cnVjdG9yJiZkPT09byYmYi5jb25zdHJ1Y3Rvci5yZXNvbHZlPT09cD93KGEsYik6ZD09PWlhPyhCKGEsaWEuZXJyb3IpLGlhLmVycm9yPW51bGwpOnZvaWQgMD09PWQ/QShhLGIpOmMoZCk/dihhLGIsZCk6QShhLGIpfWZ1bmN0aW9uIHkoYixjKXtiPT09Yz9CKGIscigpKTphKGMpP3goYixjLHQoYykpOkEoYixjKX1mdW5jdGlvbiB6KGEpe2EuX29uZXJyb3ImJmEuX29uZXJyb3IoYS5fcmVzdWx0KSxEKGEpfWZ1bmN0aW9uIEEoYSxiKXthLl9zdGF0ZT09PWZhJiYoYS5fcmVzdWx0PWIsYS5fc3RhdGU9Z2EsMCE9PWEuX3N1YnNjcmliZXJzLmxlbmd0aCYmWShELGEpKX1mdW5jdGlvbiBCKGEsYil7YS5fc3RhdGU9PT1mYSYmKGEuX3N0YXRlPWhhLGEuX3Jlc3VsdD1iLFkoeixhKSl9ZnVuY3Rpb24gQyhhLGIsYyxkKXt2YXIgZT1hLl9zdWJzY3JpYmVycyxmPWUubGVuZ3RoO2EuX29uZXJyb3I9bnVsbCxlW2ZdPWIsZVtmK2dhXT1jLGVbZitoYV09ZCwwPT09ZiYmYS5fc3RhdGUmJlkoRCxhKX1mdW5jdGlvbiBEKGEpe3ZhciBiPWEuX3N1YnNjcmliZXJzLGM9YS5fc3RhdGU7aWYoMCE9PWIubGVuZ3RoKXtmb3IodmFyIGQ9dm9pZCAwLGU9dm9pZCAwLGY9YS5fcmVzdWx0LGc9MDtnPGIubGVuZ3RoO2crPTMpZD1iW2ddLGU9YltnK2NdLGQ/RyhjLGQsZSxmKTplKGYpO2EuX3N1YnNjcmliZXJzLmxlbmd0aD0wfX1mdW5jdGlvbiBFKCl7dGhpcy5lcnJvcj1udWxsfWZ1bmN0aW9uIEYoYSxiKXt0cnl7cmV0dXJuIGEoYil9Y2F0Y2goYSl7cmV0dXJuIGphLmVycm9yPWEsamF9fWZ1bmN0aW9uIEcoYSxiLGQsZSl7dmFyIGY9YyhkKSxnPXZvaWQgMCxoPXZvaWQgMCxpPXZvaWQgMCxqPXZvaWQgMDtpZihmKXtpZihnPUYoZCxlKSxnPT09amE/KGo9ITAsaD1nLmVycm9yLGcuZXJyb3I9bnVsbCk6aT0hMCxiPT09ZylyZXR1cm4gdm9pZCBCKGIscygpKX1lbHNlIGc9ZSxpPSEwO2IuX3N0YXRlIT09ZmF8fChmJiZpP3koYixnKTpqP0IoYixoKTphPT09Z2E/QShiLGcpOmE9PT1oYSYmQihiLGcpKX1mdW5jdGlvbiBIKGEsYil7dHJ5e2IoZnVuY3Rpb24oYil7eShhLGIpfSxmdW5jdGlvbihiKXtCKGEsYil9KX1jYXRjaChiKXtCKGEsYil9fWZ1bmN0aW9uIEkoKXtyZXR1cm4ga2ErK31mdW5jdGlvbiBKKGEpe2FbZWFdPWthKyssYS5fc3RhdGU9dm9pZCAwLGEuX3Jlc3VsdD12b2lkIDAsYS5fc3Vic2NyaWJlcnM9W119ZnVuY3Rpb24gSyhhLGIpe3RoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I9YSx0aGlzLnByb21pc2U9bmV3IGEocSksdGhpcy5wcm9taXNlW2VhXXx8Sih0aGlzLnByb21pc2UpLFUoYik/KHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuX3JlbWFpbmluZz1iLmxlbmd0aCx0aGlzLl9yZXN1bHQ9bmV3IEFycmF5KHRoaXMubGVuZ3RoKSwwPT09dGhpcy5sZW5ndGg/QSh0aGlzLnByb21pc2UsdGhpcy5fcmVzdWx0KToodGhpcy5sZW5ndGg9dGhpcy5sZW5ndGh8fDAsdGhpcy5fZW51bWVyYXRlKGIpLDA9PT10aGlzLl9yZW1haW5pbmcmJkEodGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCkpKTpCKHRoaXMucHJvbWlzZSxMKCkpfWZ1bmN0aW9uIEwoKXtyZXR1cm4gbmV3IEVycm9yKFwiQXJyYXkgTWV0aG9kcyBtdXN0IGJlIHByb3ZpZGVkIGFuIEFycmF5XCIpfWZ1bmN0aW9uIE0oYSl7cmV0dXJuIG5ldyBLKHRoaXMsYSkucHJvbWlzZX1mdW5jdGlvbiBOKGEpe3ZhciBiPXRoaXM7cmV0dXJuIG5ldyBiKFUoYSk/ZnVuY3Rpb24oYyxkKXtmb3IodmFyIGU9YS5sZW5ndGgsZj0wO2Y8ZTtmKyspYi5yZXNvbHZlKGFbZl0pLnRoZW4oYyxkKX06ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYihuZXcgVHlwZUVycm9yKFwiWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLlwiKSl9KX1mdW5jdGlvbiBPKGEpe3ZhciBiPXRoaXMsYz1uZXcgYihxKTtyZXR1cm4gQihjLGEpLGN9ZnVuY3Rpb24gUCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yXCIpfWZ1bmN0aW9uIFEoKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpfWZ1bmN0aW9uIFIoYSl7dGhpc1tlYV09SSgpLHRoaXMuX3Jlc3VsdD10aGlzLl9zdGF0ZT12b2lkIDAsdGhpcy5fc3Vic2NyaWJlcnM9W10scSE9PWEmJihcImZ1bmN0aW9uXCIhPXR5cGVvZiBhJiZQKCksdGhpcyBpbnN0YW5jZW9mIFI/SCh0aGlzLGEpOlEoKSl9ZnVuY3Rpb24gUygpe3ZhciBhPXZvaWQgMDtpZih2b2lkIDAhPT1mKWE9ZjtlbHNlIGlmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKWE9c2VsZjtlbHNlIHRyeXthPUZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChhKXt0aHJvdyBuZXcgRXJyb3IoXCJwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnRcIil9dmFyIGI9YS5Qcm9taXNlO2lmKGIpe3ZhciBjPW51bGw7dHJ5e2M9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGIucmVzb2x2ZSgpKX1jYXRjaChhKXt9aWYoXCJbb2JqZWN0IFByb21pc2VdXCI9PT1jJiYhYi5jYXN0KXJldHVybn1hLlByb21pc2U9Un12YXIgVD12b2lkIDA7VD1BcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpfTt2YXIgVT1ULFY9MCxXPXZvaWQgMCxYPXZvaWQgMCxZPWZ1bmN0aW9uKGEsYil7Y2FbVl09YSxjYVtWKzFdPWIsMj09PShWKz0yKSYmKFg/WChtKTpkYSgpKX0sWj1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAsJD1afHx7fSxfPSQuTXV0YXRpb25PYnNlcnZlcnx8JC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGFhPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBzZWxmJiZ2b2lkIDAhPT1lJiZcIltvYmplY3QgcHJvY2Vzc11cIj09PXt9LnRvU3RyaW5nLmNhbGwoZSksYmE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1lc3NhZ2VDaGFubmVsLGNhPW5ldyBBcnJheSgxZTMpLGRhPXZvaWQgMDtkYT1hYT9oKCk6Xz9qKCk6YmE/aygpOnZvaWQgMD09PVomJlwiZnVuY3Rpb25cIj09dHlwZW9mIGI/bigpOmwoKTt2YXIgZWE9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDE2KSxmYT12b2lkIDAsZ2E9MSxoYT0yLGlhPW5ldyBFLGphPW5ldyBFLGthPTA7cmV0dXJuIEsucHJvdG90eXBlLl9lbnVtZXJhdGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTA7dGhpcy5fc3RhdGU9PT1mYSYmYjxhLmxlbmd0aDtiKyspdGhpcy5fZWFjaEVudHJ5KGFbYl0sYil9LEsucHJvdG90eXBlLl9lYWNoRW50cnk9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yLGQ9Yy5yZXNvbHZlO2lmKGQ9PT1wKXt2YXIgZT10KGEpO2lmKGU9PT1vJiZhLl9zdGF0ZSE9PWZhKXRoaXMuX3NldHRsZWRBdChhLl9zdGF0ZSxiLGEuX3Jlc3VsdCk7ZWxzZSBpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRoaXMuX3JlbWFpbmluZy0tLHRoaXMuX3Jlc3VsdFtiXT1hO2Vsc2UgaWYoYz09PVIpe3ZhciBmPW5ldyBjKHEpO3goZixhLGUpLHRoaXMuX3dpbGxTZXR0bGVBdChmLGIpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KG5ldyBjKGZ1bmN0aW9uKGIpe3JldHVybiBiKGEpfSksYil9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQoZChhKSxiKX0sSy5wcm90b3R5cGUuX3NldHRsZWRBdD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5wcm9taXNlO2QuX3N0YXRlPT09ZmEmJih0aGlzLl9yZW1haW5pbmctLSxhPT09aGE/QihkLGMpOnRoaXMuX3Jlc3VsdFtiXT1jKSwwPT09dGhpcy5fcmVtYWluaW5nJiZBKGQsdGhpcy5fcmVzdWx0KX0sSy5wcm90b3R5cGUuX3dpbGxTZXR0bGVBdD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7QyhhLHZvaWQgMCxmdW5jdGlvbihhKXtyZXR1cm4gYy5fc2V0dGxlZEF0KGdhLGIsYSl9LGZ1bmN0aW9uKGEpe3JldHVybiBjLl9zZXR0bGVkQXQoaGEsYixhKX0pfSxSLmFsbD1NLFIucmFjZT1OLFIucmVzb2x2ZT1wLFIucmVqZWN0PU8sUi5fc2V0U2NoZWR1bGVyPWQsUi5fc2V0QXNhcD1nLFIuX2FzYXA9WSxSLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Uix0aGVuOm8sY2F0Y2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudGhlbihudWxsLGEpfX0sUi5wb2x5ZmlsbD1TLFIuUHJvbWlzZT1SLFJ9KX0pLmNhbGwodGhpcyxiKFwiX3Byb2Nlc3NcIiksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtfcHJvY2VzczoxMX1dLDU6W2Z1bmN0aW9uKGIsYyxkKXshZnVuY3Rpb24oYixlKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiZhLmFtZClhKFtcImV4cG9ydHNcIixcIm1vZHVsZVwiXSxlKTtlbHNlIGlmKHZvaWQgMCE9PWQmJnZvaWQgMCE9PWMpZShkLGMpO2Vsc2V7dmFyIGY9e2V4cG9ydHM6e319O2UoZi5leHBvcnRzLGYpLGIuZmV0Y2hKc29ucD1mLmV4cG9ydHN9fSh0aGlzLGZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYygpe3JldHVyblwianNvbnBfXCIrRGF0ZS5ub3coKStcIl9cIitNYXRoLmNlaWwoMWU1Kk1hdGgucmFuZG9tKCkpfWZ1bmN0aW9uIGQoYSl7dHJ5e2RlbGV0ZSB3aW5kb3dbYV19Y2F0Y2goYil7d2luZG93W2FdPXZvaWQgMH19ZnVuY3Rpb24gZShhKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKTtiJiZkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0ucmVtb3ZlQ2hpbGQoYil9ZnVuY3Rpb24gZihhKXt2YXIgYj1hcmd1bWVudHMubGVuZ3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/e306YXJndW1lbnRzWzFdLGY9YSxoPWIudGltZW91dHx8Zy50aW1lb3V0LGk9Yi5qc29ucENhbGxiYWNrfHxnLmpzb25wQ2FsbGJhY2ssaj12b2lkIDA7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGcsayl7dmFyIGw9Yi5qc29ucENhbGxiYWNrRnVuY3Rpb258fGMoKSxtPWkrXCJfXCIrbDt3aW5kb3dbbF09ZnVuY3Rpb24oYSl7Zyh7b2s6ITAsanNvbjpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoYSl9fSksaiYmY2xlYXJUaW1lb3V0KGopLGUobSksZChsKX0sZis9LTE9PT1mLmluZGV4T2YoXCI/XCIpP1wiP1wiOlwiJlwiO3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7bi5zZXRBdHRyaWJ1dGUoXCJzcmNcIixcIlwiK2YraStcIj1cIitsKSxiLmNoYXJzZXQmJm4uc2V0QXR0cmlidXRlKFwiY2hhcnNldFwiLGIuY2hhcnNldCksbi5pZD1tLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChuKSxqPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtrKG5ldyBFcnJvcihcIkpTT05QIHJlcXVlc3QgdG8gXCIrYStcIiB0aW1lZCBvdXRcIikpLGQobCksZShtKSx3aW5kb3dbbF09ZnVuY3Rpb24oKXtkKGwpfX0saCksbi5vbmVycm9yPWZ1bmN0aW9uKCl7ayhuZXcgRXJyb3IoXCJKU09OUCByZXF1ZXN0IHRvIFwiK2ErXCIgZmFpbGVkXCIpKSxkKGwpLGUobSksaiYmY2xlYXJUaW1lb3V0KGopfX0pfXZhciBnPXt0aW1lb3V0OjVlMyxqc29ucENhbGxiYWNrOlwiY2FsbGJhY2tcIixqc29ucENhbGxiYWNrRnVuY3Rpb246bnVsbH07Yi5leHBvcnRzPWZ9KX0se31dLDY6W2Z1bmN0aW9uKGIsYyxkKXt2YXIgZT1lfHxmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtpZighKHZvaWQgMD09PWF8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9NU0lFIFsxLTldXFwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSl7dmFyIGI9YS5kb2N1bWVudCxjPWZ1bmN0aW9uKCl7cmV0dXJuIGEuVVJMfHxhLndlYmtpdFVSTHx8YX0sZD1iLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcImFcIiksZT1cImRvd25sb2FkXCJpbiBkLGY9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiKTthLmRpc3BhdGNoRXZlbnQoYil9LGc9L2NvbnN0cnVjdG9yL2kudGVzdChhLkhUTUxFbGVtZW50KXx8YS5zYWZhcmksaD0vQ3JpT1NcXC9bXFxkXSsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksaT1mdW5jdGlvbihiKXsoYS5zZXRJbW1lZGlhdGV8fGEuc2V0VGltZW91dCkoZnVuY3Rpb24oKXt0aHJvdyBifSwwKX0saj1cImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiLGs9NGU0LGw9ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXtcInN0cmluZ1wiPT10eXBlb2YgYT9jKCkucmV2b2tlT2JqZWN0VVJMKGEpOmEucmVtb3ZlKCl9O3NldFRpbWVvdXQoYixrKX0sbT1mdW5jdGlvbihhLGIsYyl7Yj1bXS5jb25jYXQoYik7Zm9yKHZhciBkPWIubGVuZ3RoO2QtLTspe3ZhciBlPWFbXCJvblwiK2JbZF1dO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpdHJ5e2UuY2FsbChhLGN8fGEpfWNhdGNoKGEpe2koYSl9fX0sbj1mdW5jdGlvbihhKXtyZXR1cm4vXlxccyooPzp0ZXh0XFwvXFxTKnxhcHBsaWNhdGlvblxcL3htbHxcXFMqXFwvXFxTKlxcK3htbClcXHMqOy4qY2hhcnNldFxccyo9XFxzKnV0Zi04L2kudGVzdChhLnR5cGUpP25ldyBCbG9iKFtTdHJpbmcuZnJvbUNoYXJDb2RlKDY1Mjc5KSxhXSx7dHlwZTphLnR5cGV9KTphfSxvPWZ1bmN0aW9uKGIsaSxrKXtrfHwoYj1uKGIpKTt2YXIgbyxwPXRoaXMscT1iLnR5cGUscj1xPT09aixzPWZ1bmN0aW9uKCl7bShwLFwid3JpdGVzdGFydCBwcm9ncmVzcyB3cml0ZSB3cml0ZWVuZFwiLnNwbGl0KFwiIFwiKSl9LHQ9ZnVuY3Rpb24oKXtpZigoaHx8ciYmZykmJmEuRmlsZVJlYWRlcil7dmFyIGQ9bmV3IEZpbGVSZWFkZXI7cmV0dXJuIGQub25sb2FkZW5kPWZ1bmN0aW9uKCl7dmFyIGI9aD9kLnJlc3VsdDpkLnJlc3VsdC5yZXBsYWNlKC9eZGF0YTpbXjtdKjsvLFwiZGF0YTphdHRhY2htZW50L2ZpbGU7XCIpO2Eub3BlbihiLFwiX2JsYW5rXCIpfHwoYS5sb2NhdGlvbi5ocmVmPWIpLGI9dm9pZCAwLHAucmVhZHlTdGF0ZT1wLkRPTkUscygpfSxkLnJlYWRBc0RhdGFVUkwoYiksdm9pZChwLnJlYWR5U3RhdGU9cC5JTklUKX1pZihvfHwobz1jKCkuY3JlYXRlT2JqZWN0VVJMKGIpKSxyKWEubG9jYXRpb24uaHJlZj1vO2Vsc2V7YS5vcGVuKG8sXCJfYmxhbmtcIil8fChhLmxvY2F0aW9uLmhyZWY9byl9cC5yZWFkeVN0YXRlPXAuRE9ORSxzKCksbChvKX07aWYocC5yZWFkeVN0YXRlPXAuSU5JVCxlKXJldHVybiBvPWMoKS5jcmVhdGVPYmplY3RVUkwoYiksdm9pZCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5ocmVmPW8sZC5kb3dubG9hZD1pLGYoZCkscygpLGwobykscC5yZWFkeVN0YXRlPXAuRE9ORX0pO3QoKX0scD1vLnByb3RvdHlwZSxxPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbmV3IG8oYSxifHxhLm5hbWV8fFwiZG93bmxvYWRcIixjKX07cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2I/ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPWJ8fGEubmFtZXx8XCJkb3dubG9hZFwiLGN8fChhPW4oYSkpLG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGEsYil9OihwLmFib3J0PWZ1bmN0aW9uKCl7fSxwLnJlYWR5U3RhdGU9cC5JTklUPTAscC5XUklUSU5HPTEscC5ET05FPTIscC5lcnJvcj1wLm9ud3JpdGVzdGFydD1wLm9ucHJvZ3Jlc3M9cC5vbndyaXRlPXAub25hYm9ydD1wLm9uZXJyb3I9cC5vbndyaXRlZW5kPW51bGwscSl9fShcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZnx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93fHx0aGlzLmNvbnRlbnQpO3ZvaWQgMCE9PWMmJmMuZXhwb3J0cz9jLmV4cG9ydHMuc2F2ZUFzPWU6dm9pZCAwIT09YSYmbnVsbCE9PWEmJm51bGwhPT1hLmFtZCYmYShcIkZpbGVTYXZlci5qc1wiLGZ1bmN0aW9uKCl7cmV0dXJuIGV9KX0se31dLDc6W2Z1bmN0aW9uKGEsYixjKXtjLnJlYWQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGg9OCplLWQtMSxpPSgxPDxoKS0xLGo9aT4+MSxrPS03LGw9Yz9lLTE6MCxtPWM/LTE6MSxuPWFbYitsXTtmb3IobCs9bSxmPW4mKDE8PC1rKS0xLG4+Pj0tayxrKz1oO2s+MDtmPTI1NipmK2FbYitsXSxsKz1tLGstPTgpO2ZvcihnPWYmKDE8PC1rKS0xLGY+Pj0tayxrKz1kO2s+MDtnPTI1NipnK2FbYitsXSxsKz1tLGstPTgpO2lmKDA9PT1mKWY9MS1qO2Vsc2V7aWYoZj09PWkpcmV0dXJuIGc/TmFOOjEvMCoobj8tMToxKTtnKz1NYXRoLnBvdygyLGQpLGYtPWp9cmV0dXJuKG4/LTE6MSkqZypNYXRoLnBvdygyLGYtZCl9LGMud3JpdGU9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnLGgsaSxqPTgqZi1lLTEsaz0oMTw8aiktMSxsPWs+PjEsbT0yMz09PWU/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLG49ZD8wOmYtMSxvPWQ/MTotMSxwPWI8MHx8MD09PWImJjEvYjwwPzE6MDtmb3IoYj1NYXRoLmFicyhiKSxpc05hTihiKXx8Yj09PTEvMD8oaD1pc05hTihiKT8xOjAsZz1rKTooZz1NYXRoLmZsb29yKE1hdGgubG9nKGIpL01hdGguTE4yKSxiKihpPU1hdGgucG93KDIsLWcpKTwxJiYoZy0tLGkqPTIpLGIrPWcrbD49MT9tL2k6bSpNYXRoLnBvdygyLDEtbCksYippPj0yJiYoZysrLGkvPTIpLGcrbD49az8oaD0wLGc9ayk6ZytsPj0xPyhoPShiKmktMSkqTWF0aC5wb3coMixlKSxnKz1sKTooaD1iKk1hdGgucG93KDIsbC0xKSpNYXRoLnBvdygyLGUpLGc9MCkpO2U+PTg7YVtjK25dPTI1NSZoLG4rPW8saC89MjU2LGUtPTgpO2ZvcihnPWc8PGV8aCxqKz1lO2o+MDthW2Mrbl09MjU1Jmcsbis9byxnLz0yNTYsai09OCk7YVtjK24tb118PTEyOCpwfX0se31dLDg6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD17fS50b1N0cmluZztiLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT1kLmNhbGwoYSl9fSx7fV0sOTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiKXtyZXR1cm4gYS5iPT09Yi5iJiZhLmE9PT1iLmF9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLmI8Yi5ifHxhLmI9PT1iLmImJmEuYTw9Yi5hfWZ1bmN0aW9uIGYoYSxiLGMpe3ZhciBkPWIuYi1hLmIsZT1jLmItYi5iXG47cmV0dXJuIDA8ZCtlP2Q8ZT9iLmEtYS5hK2QvKGQrZSkqKGEuYS1jLmEpOmIuYS1jLmErZS8oZCtlKSooYy5hLWEuYSk6MH1mdW5jdGlvbiBnKGEsYixjKXt2YXIgZD1iLmItYS5iLGU9Yy5iLWIuYjtyZXR1cm4gMDxkK2U/KGIuYS1jLmEpKmQrKGIuYS1hLmEpKmU6MH1mdW5jdGlvbiBoKGEsYil7cmV0dXJuIGEuYTxiLmF8fGEuYT09PWIuYSYmYS5iPD1iLmJ9ZnVuY3Rpb24gaShhLGIsYyl7dmFyIGQ9Yi5hLWEuYSxlPWMuYS1iLmE7cmV0dXJuIDA8ZCtlP2Q8ZT9iLmItYS5iK2QvKGQrZSkqKGEuYi1jLmIpOmIuYi1jLmIrZS8oZCtlKSooYy5iLWEuYik6MH1mdW5jdGlvbiBqKGEsYixjKXt2YXIgZD1iLmEtYS5hLGU9Yy5hLWIuYTtyZXR1cm4gMDxkK2U/KGIuYi1jLmIpKmQrKGIuYi1hLmIpKmU6MH1mdW5jdGlvbiBrKGEpe3JldHVybiBlKGEuYi5hLGEuYSl9ZnVuY3Rpb24gbChhKXtyZXR1cm4gZShhLmEsYS5iLmEpfWZ1bmN0aW9uIG0oYSxiLGMsZCl7cmV0dXJuIGE9MD5hPzA6YSxjPTA+Yz8wOmMsYTw9Yz8wPT09Yz8oYitkKS8yOmIrYS8oYStjKSooZC1iKTpkK2MvKGErYykqKGItZCl9ZnVuY3Rpb24gbihhKXt2YXIgYj1zKGEuYik7cmV0dXJuIHUoYixhLmMpLHUoYi5iLGEuYyksdihiLGEuYSksYn1mdW5jdGlvbiBvKGEsYil7dmFyIGM9ITEsZD0hMTthIT09YiYmKGIuYSE9PWEuYSYmKGQ9ITAseChiLmEsYS5hKSksYi5kIT09YS5kJiYoYz0hMCx5KGIuZCxhLmQpKSx0KGIsYSksZHx8KHUoYixhLmEpLGEuYS5jPWEpLGN8fCh2KGIsYS5kKSxhLmQuYT1hKSl9ZnVuY3Rpb24gcChhKXt2YXIgYj1hLmIsYz0hMTthLmQhPT1hLmIuZCYmKGM9ITAseShhLmQsYS5iLmQpKSxhLmM9PT1hP3goYS5hLG51bGwpOihhLmIuZC5hPSQoYSksYS5hLmM9YS5jLHQoYSwkKGEpKSxjfHx2KGEsYS5kKSksYi5jPT09Yj8oeChiLmEsbnVsbCkseShiLmQsbnVsbCkpOihhLmQuYT0kKGIpLGIuYS5jPWIuYyx0KGIsJChiKSkpLHcoYSl9ZnVuY3Rpb24gcShhKXt2YXIgYj1zKGEpLGM9Yi5iO3JldHVybiB0KGIsYS5lKSxiLmE9YS5iLmEsdShjLGIuYSksYi5kPWMuZD1hLmQsYj1iLmIsdChhLmIsJChhLmIpKSx0KGEuYixiKSxhLmIuYT1iLmEsYi5iLmEuYz1iLmIsYi5iLmQ9YS5iLmQsYi5mPWEuZixiLmIuZj1hLmIuZixifWZ1bmN0aW9uIHIoYSxiKXt2YXIgYz0hMSxkPXMoYSksZT1kLmI7cmV0dXJuIGIuZCE9PWEuZCYmKGM9ITAseShiLmQsYS5kKSksdChkLGEuZSksdChlLGIpLGQuYT1hLmIuYSxlLmE9Yi5hLGQuZD1lLmQ9YS5kLGEuZC5hPWUsY3x8dihkLGEuZCksZH1mdW5jdGlvbiBzKGEpe3ZhciBiPW5ldyBaLGM9bmV3IFosZD1hLmIuaDtyZXR1cm4gYy5oPWQsZC5iLmg9YixiLmg9YSxhLmIuaD1jLGIuYj1jLGIuYz1iLGIuZT1jLGMuYj1iLGMuYz1jLGMuZT1ifWZ1bmN0aW9uIHQoYSxiKXt2YXIgYz1hLmMsZD1iLmM7Yy5iLmU9YixkLmIuZT1hLGEuYz1kLGIuYz1jfWZ1bmN0aW9uIHUoYSxiKXt2YXIgYz1iLmYsZD1uZXcgYWEoYixjKTtjLmU9ZCxiLmY9ZCxjPWQuYz1hO2Rve2MuYT1kLGM9Yy5jfXdoaWxlKGMhPT1hKX1mdW5jdGlvbiB2KGEsYil7dmFyIGM9Yi5kLGQ9bmV3IFkoYixjKTtjLmI9ZCxiLmQ9ZCxkLmE9YSxkLmM9Yi5jLGM9YTtkb3tjLmQ9ZCxjPWMuZX13aGlsZShjIT09YSl9ZnVuY3Rpb24gdyhhKXt2YXIgYj1hLmg7YT1hLmIuaCxiLmIuaD1hLGEuYi5oPWJ9ZnVuY3Rpb24geChhLGIpe3ZhciBjPWEuYyxkPWM7ZG97ZC5hPWIsZD1kLmN9d2hpbGUoZCE9PWMpO2M9YS5mLGQ9YS5lLGQuZj1jLGMuZT1kfWZ1bmN0aW9uIHkoYSxiKXt2YXIgYz1hLmEsZD1jO2Rve2QuZD1iLGQ9ZC5lfXdoaWxlKGQhPT1jKTtjPWEuZCxkPWEuYixkLmQ9YyxjLmI9ZH1mdW5jdGlvbiB6KGEpe3ZhciBiPTA7cmV0dXJuIE1hdGguYWJzKGFbMV0pPk1hdGguYWJzKGFbMF0pJiYoYj0xKSxNYXRoLmFicyhhWzJdKT5NYXRoLmFicyhhW2JdKSYmKGI9MiksYn1mdW5jdGlvbiBBKGEsYil7YS5mKz1iLmYsYS5iLmYrPWIuYi5mfWZ1bmN0aW9uIEIoYSxiLGMpe3JldHVybiBhPWEuYSxiPWIuYSxjPWMuYSxiLmIuYT09PWE/Yy5iLmE9PT1hP2UoYi5hLGMuYSk/MD49ZyhjLmIuYSxiLmEsYy5hKTowPD1nKGIuYi5hLGMuYSxiLmEpOjA+PWcoYy5iLmEsYSxjLmEpOmMuYi5hPT09YT8wPD1nKGIuYi5hLGEsYi5hKTooYj1mKGIuYi5hLGEsYi5hKSxhPWYoYy5iLmEsYSxjLmEpLGI+PWEpfWZ1bmN0aW9uIEMoYSl7YS5hLmk9bnVsbDt2YXIgYj1hLmU7Yi5hLmM9Yi5jLGIuYy5hPWIuYSxhLmU9bnVsbH1mdW5jdGlvbiBEKGEsYil7cChhLmEpLGEuYz0hMSxhLmE9YixiLmk9YX1mdW5jdGlvbiBFKGEpe3ZhciBiPWEuYS5hO2Rve2E9b2EoYSl9d2hpbGUoYS5hLmE9PT1iKTtyZXR1cm4gYS5jJiYoYj1yKG5hKGEpLmEuYixhLmEuZSksRChhLGIpLGE9b2EoYSkpLGF9ZnVuY3Rpb24gRihhLGIsYyl7dmFyIGQ9bmV3IG1hO3JldHVybiBkLmE9YyxkLmU9VChhLmYsYi5lLGQpLGMuaT1kfWZ1bmN0aW9uIEcoYSxiKXtzd2l0Y2goYS5zKXtjYXNlIDEwMDEzMDpyZXR1cm4gMCE9KDEmYik7Y2FzZSAxMDAxMzE6cmV0dXJuIDAhPT1iO2Nhc2UgMTAwMTMyOnJldHVybiAwPGI7Y2FzZSAxMDAxMzM6cmV0dXJuIDA+YjtjYXNlIDEwMDEzNDpyZXR1cm4gMjw9Ynx8LTI+PWJ9cmV0dXJuITF9ZnVuY3Rpb24gSChhKXt2YXIgYj1hLmEsYz1iLmQ7Yy5jPWEuZCxjLmE9YixDKGEpfWZ1bmN0aW9uIEkoYSxiLGMpe2ZvcihhPWIsYj1iLmE7YSE9PWM7KXthLmM9ITE7dmFyIGQ9bmEoYSksZT1kLmE7aWYoZS5hIT09Yi5hKXtpZighZC5jKXtIKGEpO2JyZWFrfWU9cihiLmMuYixlLmIpLEQoZCxlKX1iLmMhPT1lJiYobygkKGUpLGUpLG8oYixlKSksSChhKSxiPWQuYSxhPWR9cmV0dXJuIGJ9ZnVuY3Rpb24gSihhLGIsYyxkLGUsZil7dmFyIGc9ITA7ZG97RihhLGIsYy5iKSxjPWMuY313aGlsZShjIT09ZCk7Zm9yKG51bGw9PT1lJiYoZT1uYShiKS5hLmIuYyk7ZD1uYShiKSxjPWQuYS5iLGMuYT09PWUuYTspYy5jIT09ZSYmKG8oJChjKSxjKSxvKCQoZSksYykpLGQuZj1iLmYtYy5mLGQuZD1HKGEsZC5mKSxiLmI9ITAsIWcmJk4oYSxiKSYmKEEoYyxlKSxDKGIpLHAoZSkpLGc9ITEsYj1kLGU9YztiLmI9ITAsZiYmUChhLGIpfWZ1bmN0aW9uIEsoYSxiLGMsZCxlKXt2YXIgZj1bYi5nWzBdLGIuZ1sxXSxiLmdbMl1dO2IuZD1udWxsLGIuZD1hLm8/YS5vKGYsYyxkLGEuYyl8fG51bGw6bnVsbCxudWxsPT09Yi5kJiYoZT9hLm58fChYKGEsMTAwMTU2KSxhLm49ITApOmIuZD1jWzBdKX1mdW5jdGlvbiBMKGEsYixjKXt2YXIgZD1bbnVsbCxudWxsLG51bGwsbnVsbF07ZFswXT1iLmEuZCxkWzFdPWMuYS5kLEsoYSxiLmEsZCxbLjUsLjUsMCwwXSwhMSksbyhiLGMpfWZ1bmN0aW9uIE0oYSxiLGMsZCxlKXt2YXIgZj1NYXRoLmFicyhiLmItYS5iKStNYXRoLmFicyhiLmEtYS5hKSxnPU1hdGguYWJzKGMuYi1hLmIpK01hdGguYWJzKGMuYS1hLmEpLGg9ZSsxO2RbZV09LjUqZy8oZitnKSxkW2hdPS41KmYvKGYrZyksYS5nWzBdKz1kW2VdKmIuZ1swXStkW2hdKmMuZ1swXSxhLmdbMV0rPWRbZV0qYi5nWzFdK2RbaF0qYy5nWzFdLGEuZ1syXSs9ZFtlXSpiLmdbMl0rZFtoXSpjLmdbMl19ZnVuY3Rpb24gTihhLGIpe3ZhciBjPW5hKGIpLGY9Yi5hLGg9Yy5hO2lmKGUoZi5hLGguYSkpe2lmKDA8ZyhoLmIuYSxmLmEsaC5hKSlyZXR1cm4hMTtpZihkKGYuYSxoLmEpKXtpZihmLmEhPT1oLmEpe3ZhciBjPWEuZSxpPWYuYS5oO2lmKDA8PWkpe3ZhciBjPWMuYixqPWMuZCxrPWMuZSxsPWMuYyxtPWxbaV07alttXT1qW2MuYV0sbFtqW21dXT1tLG08PS0tYy5hJiYoMT49bT9rYShjLG0pOmUoa1tqW20+PjFdXSxrW2pbbV1dKT9rYShjLG0pOmxhKGMsbSkpLGtbaV09bnVsbCxsW2ldPWMuYixjLmI9aX1lbHNlIGZvcihjLmNbLShpKzEpXT1udWxsOzA8Yy5hJiZudWxsPT09Yy5jW2MuZFtjLmEtMV1dOyktLWMuYTtMKGEsJChoKSxmKX19ZWxzZSBxKGguYiksbyhmLCQoaCkpLGIuYj1jLmI9ITB9ZWxzZXtpZigwPmcoZi5iLmEsaC5hLGYuYSkpcmV0dXJuITE7b2EoYikuYj1iLmI9ITAscShmLmIpLG8oJChoKSxmKX1yZXR1cm4hMH1mdW5jdGlvbiBPKGEsYil7dmFyIGM9bmEoYiksaz1iLmEsbD1jLmEsbj1rLmEscD1sLmEscj1rLmIuYSxzPWwuYi5hLHQ9bmV3IGFhO2lmKGcocixhLmEsbiksZyhzLGEuYSxwKSxuPT09cHx8TWF0aC5taW4obi5hLHIuYSk+TWF0aC5tYXgocC5hLHMuYSkpcmV0dXJuITE7aWYoZShuLHApKXtpZigwPGcocyxuLHApKXJldHVybiExfWVsc2UgaWYoMD5nKHIscCxuKSlyZXR1cm4hMTt2YXIgdSx2LHc9cix4PW4seT1zLHo9cDtpZihlKHcseCl8fCh1PXcsdz14LHg9dSksZSh5LHopfHwodT15LHk9eix6PXUpLGUodyx5KXx8KHU9dyx3PXkseT11LHU9eCx4PXosej11KSxlKHkseCk/ZSh4LHopPyh1PWYodyx5LHgpLHY9Zih5LHgseiksMD51K3YmJih1PS11LHY9LXYpLHQuYj1tKHUseS5iLHYseC5iKSk6KHU9Zyh3LHkseCksdj0tZyh3LHoseCksMD51K3YmJih1PS11LHY9LXYpLHQuYj1tKHUseS5iLHYsei5iKSk6dC5iPSh5LmIreC5iKS8yLGgodyx4KXx8KHU9dyx3PXgseD11KSxoKHkseil8fCh1PXkseT16LHo9dSksaCh3LHkpfHwodT13LHc9eSx5PXUsdT14LHg9eix6PXUpLGgoeSx4KT9oKHgseik/KHU9aSh3LHkseCksdj1pKHkseCx6KSwwPnUrdiYmKHU9LXUsdj0tdiksdC5hPW0odSx5LmEsdix4LmEpKToodT1qKHcseSx4KSx2PS1qKHcseix4KSwwPnUrdiYmKHU9LXUsdj0tdiksdC5hPW0odSx5LmEsdix6LmEpKTp0LmE9KHkuYSt4LmEpLzIsZSh0LGEuYSkmJih0LmI9YS5hLmIsdC5hPWEuYS5hKSx3PWUobixwKT9uOnAsZSh3LHQpJiYodC5iPXcuYix0LmE9dy5hKSxkKHQsbil8fGQodCxwKSlyZXR1cm4gTihhLGIpLCExO2lmKCFkKHIsYS5hKSYmMDw9ZyhyLGEuYSx0KXx8IWQocyxhLmEpJiYwPj1nKHMsYS5hLHQpKXtpZihzPT09YS5hKXJldHVybiBxKGsuYiksbyhsLmIsayksYj1FKGIpLGs9bmEoYikuYSxJKGEsbmEoYiksYyksSihhLGIsJChrKSxrLGssITApLCEwO2lmKHI9PT1hLmEpe3EobC5iKSxvKGsuZSwkKGwpKSxuPWM9YixwPW4uYS5iLmE7ZG97bj1vYShuKX13aGlsZShuLmEuYi5hPT09cCk7cmV0dXJuIGI9bixuPW5hKGIpLmEuYi5jLGMuYT0kKGwpLGw9SShhLGMsbnVsbCksSihhLGIsbC5jLGsuYi5jLG4sITApLCEwfXJldHVybiAwPD1nKHIsYS5hLHQpJiYob2EoYikuYj1iLmI9ITAscShrLmIpLGsuYS5iPWEuYS5iLGsuYS5hPWEuYS5hKSwwPj1nKHMsYS5hLHQpJiYoYi5iPWMuYj0hMCxxKGwuYiksbC5hLmI9YS5hLmIsbC5hLmE9YS5hLmEpLCExfXJldHVybiBxKGsuYikscShsLmIpLG8oJChsKSxrKSxrLmEuYj10LmIsay5hLmE9dC5hLGsuYS5oPWRhKGEuZSxrLmEpLGs9ay5hLGw9WzAsMCwwLDBdLHQ9W24uZCxyLmQscC5kLHMuZF0say5nWzBdPWsuZ1sxXT1rLmdbMl09MCxNKGssbixyLGwsMCksTShrLHAscyxsLDIpLEsoYSxrLHQsbCwhMCksb2EoYikuYj1iLmI9Yy5iPSEwLCExfWZ1bmN0aW9uIFAoYSxiKXtmb3IodmFyIGM9bmEoYik7Oyl7Zm9yKDtjLmI7KWI9YyxjPW5hKGMpO2lmKCFiLmImJihjPWIsbnVsbD09PShiPW9hKGIpKXx8IWIuYikpYnJlYWs7Yi5iPSExO3ZhciBkLGY9Yi5hLGg9Yy5hO2lmKGQ9Zi5iLmEhPT1oLmIuYSlhOntkPWI7dmFyIGk9bmEoZCksaj1kLmEsaz1pLmEsbD12b2lkIDA7aWYoZShqLmIuYSxrLmIuYSkpe2lmKDA+ZyhqLmIuYSxrLmIuYSxqLmEpKXtkPSExO2JyZWFrIGF9b2EoZCkuYj1kLmI9ITAsbD1xKGopLG8oay5iLGwpLGwuZC5jPWQuZH1lbHNle2lmKDA8ZyhrLmIuYSxqLmIuYSxrLmEpKXtkPSExO2JyZWFrIGF9ZC5iPWkuYj0hMCxsPXEoayksbyhqLmUsay5iKSxsLmIuZC5jPWQuZH1kPSEwfWlmKGQmJihjLmM/KEMoYykscChoKSxjPW5hKGIpLGg9Yy5hKTpiLmMmJihDKGIpLHAoZiksYj1vYShjKSxmPWIuYSkpLGYuYSE9PWguYSlpZihmLmIuYT09PWguYi5hfHxiLmN8fGMuY3x8Zi5iLmEhPT1hLmEmJmguYi5hIT09YS5hKU4oYSxiKTtlbHNlIGlmKE8oYSxiKSlicmVhaztmLmE9PT1oLmEmJmYuYi5hPT09aC5iLmEmJihBKGgsZiksQyhiKSxwKGYpLGI9b2EoYykpfX1mdW5jdGlvbiBRKGEsYil7YS5hPWI7Zm9yKHZhciBjPWIuYztudWxsPT09Yy5pOylpZigoYz1jLmMpPT09Yi5jKXt2YXIgYz1hLGY9YixoPW5ldyBtYTtoLmE9Zi5jLmI7dmFyIGk9Yy5mLGo9aS5hO2Rve2o9ai5hfXdoaWxlKG51bGwhPT1qLmImJiFpLmMoaS5iLGgsai5iKSk7dmFyIGk9ai5iLGs9bmEoaSksaD1pLmEsaj1rLmE7aWYoMD09PWcoaC5iLmEsZixoLmEpKWg9aS5hLGQoaC5hLGYpfHxkKGguYi5hLGYpfHwocShoLmIpLGkuYyYmKHAoaC5jKSxpLmM9ITEpLG8oZi5jLGgpLFEoYyxmKSk7ZWxzZXt2YXIgbD1lKGouYi5hLGguYi5hKT9pOmssaz12b2lkIDA7aS5kfHxsLmM/KGs9bD09PWk/cihmLmMuYixoLmUpOnIoai5iLmMuYixmLmMpLmIsbC5jP0QobCxrKTooaD1jLGk9RihjLGksayksaS5mPW9hKGkpLmYraS5hLmYsaS5kPUcoaCxpLmYpKSxRKGMsZikpOkooYyxpLGYuYyxmLmMsbnVsbCwhMCl9cmV0dXJufWlmKGM9RShjLmkpLGg9bmEoYyksaT1oLmEsaD1JKGEsaCxudWxsKSxoLmM9PT1pKXt2YXIgaT1oLGg9aS5jLGo9bmEoYyksaz1jLmEsbD1qLmEsbT0hMTtrLmIuYSE9PWwuYi5hJiZPKGEsYyksZChrLmEsYS5hKSYmKG8oJChoKSxrKSxjPUUoYyksaD1uYShjKS5hLEkoYSxuYShjKSxqKSxtPSEwKSxkKGwuYSxhLmEpJiYobyhpLCQobCkpLGk9SShhLGosbnVsbCksbT0hMCksbT9KKGEsYyxpLmMsaCxoLCEwKTooZj1lKGwuYSxrLmEpPyQobCk6ayxmPXIoaS5jLmIsZiksSihhLGMsZixmLmMsZi5jLCExKSxmLmIuaS5jPSEwLFAoYSxjKSl9ZWxzZSBKKGEsYyxoLmMsaSxpLCEwKX1mdW5jdGlvbiBSKGEsYil7dmFyIGM9bmV3IG1hLGQ9bihhLmIpO2QuYS5iPXFhLGQuYS5hPWIsZC5iLmEuYj0tcWEsZC5iLmEuYT1iLGEuYT1kLmIuYSxjLmE9ZCxjLmY9MCxjLmQ9ITEsYy5jPSExLGMuaD0hMCxjLmI9ITEsZD1hLmYsZD1UKGQsZC5hLGMpLGMuZT1kfWZ1bmN0aW9uIFMoYSl7dGhpcy5hPW5ldyBVLHRoaXMuYj1hLHRoaXMuYz1CfWZ1bmN0aW9uIFQoYSxiLGMpe2Rve2I9Yi5jfXdoaWxlKG51bGwhPT1iLmImJiFhLmMoYS5iLGIuYixjKSk7cmV0dXJuIGE9bmV3IFUoYyxiLmEsYiksYi5hLmM9YSxiLmE9YX1mdW5jdGlvbiBVKGEsYixjKXt0aGlzLmI9YXx8bnVsbCx0aGlzLmE9Ynx8dGhpcyx0aGlzLmM9Y3x8dGhpc31mdW5jdGlvbiBWKCl7dGhpcy5kPXJhLHRoaXMucD10aGlzLmI9dGhpcy5xPW51bGwsdGhpcy5qPVswLDAsMF0sdGhpcy5zPTEwMDEzMCx0aGlzLm49ITEsdGhpcy5vPXRoaXMuYT10aGlzLmU9dGhpcy5mPW51bGwsdGhpcy5tPSExLHRoaXMuYz10aGlzLnI9dGhpcy5pPXRoaXMuaz10aGlzLmw9dGhpcy5oPW51bGx9ZnVuY3Rpb24gVyhhLGIpe2lmKGEuZCE9PWIpZm9yKDthLmQhPT1iOylpZihhLmQ8Yilzd2l0Y2goYS5kKXtjYXNlIHJhOlgoYSwxMDAxNTEpLGEudShudWxsKTticmVhaztjYXNlIDE6WChhLDEwMDE1MiksYS50KCl9ZWxzZSBzd2l0Y2goYS5kKXtjYXNlIDI6WChhLDEwMDE1NCksYS52KCk7YnJlYWs7Y2FzZSAxOlgoYSwxMDAxNTMpLGEudygpfX1mdW5jdGlvbiBYKGEsYil7YS5wJiZhLnAoYixhLmMpfWZ1bmN0aW9uIFkoYSxiKXt0aGlzLmI9YXx8dGhpcyx0aGlzLmQ9Ynx8dGhpcyx0aGlzLmE9bnVsbCx0aGlzLmM9ITF9ZnVuY3Rpb24gWigpe3RoaXMuaD10aGlzLHRoaXMuaT10aGlzLmQ9dGhpcy5hPXRoaXMuZT10aGlzLmM9dGhpcy5iPW51bGwsdGhpcy5mPTB9ZnVuY3Rpb24gJChhKXtyZXR1cm4gYS5iLmV9ZnVuY3Rpb24gXygpe3RoaXMuYz1uZXcgYWEsdGhpcy5hPW5ldyBZLHRoaXMuYj1uZXcgWix0aGlzLmQ9bmV3IFosdGhpcy5iLmI9dGhpcy5kLHRoaXMuZC5iPXRoaXMuYn1mdW5jdGlvbiBhYShhLGIpe3RoaXMuZT1hfHx0aGlzLHRoaXMuZj1ifHx0aGlzLHRoaXMuZD10aGlzLmM9bnVsbCx0aGlzLmc9WzAsMCwwXSx0aGlzLmg9dGhpcy5hPXRoaXMuYj0wfWZ1bmN0aW9uIGJhKCl7dGhpcy5jPVtdLHRoaXMuZD1udWxsLHRoaXMuYT0wLHRoaXMuZT0hMSx0aGlzLmI9bmV3IGZhfWZ1bmN0aW9uIGNhKGEpe2EuZD1bXTtmb3IodmFyIGI9MDtiPGEuYTtiKyspYS5kW2JdPWI7YS5kLnNvcnQoZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGUoYVtiXSxhW2NdKT8xOi0xfX0oYS5jKSksYS5lPSEwLGhhKGEuYil9ZnVuY3Rpb24gZGEoYSxiKXtpZihhLmUpe3ZhciBjPWEuYixkPSsrYy5hOzIqZD5jLmYmJihjLmYqPTIsYy5jPWdhKGMuYyxjLmYrMSkpO3ZhciBlO3JldHVybiAwPT09Yy5iP2U9ZDooZT1jLmIsYy5iPWMuY1tjLmJdKSxjLmVbZV09YixjLmNbZV09ZCxjLmRbZF09ZSxjLmgmJmxhKGMsZCksZX1yZXR1cm4gYz1hLmErKyxhLmNbY109YiwtKGMrMSl9ZnVuY3Rpb24gZWEoYSl7aWYoMD09PWEuYSlyZXR1cm4gamEoYS5iKTt2YXIgYj1hLmNbYS5kW2EuYS0xXV07aWYoMCE9PWEuYi5hJiZlKGlhKGEuYiksYikpcmV0dXJuIGphKGEuYik7ZG97LS1hLmF9d2hpbGUoMDxhLmEmJm51bGw9PT1hLmNbYS5kW2EuYS0xXV0pO3JldHVybiBifWZ1bmN0aW9uIGZhKCl7dGhpcy5kPWdhKFswXSwzMyksdGhpcy5lPVtudWxsLG51bGxdLHRoaXMuYz1bMCwwXSx0aGlzLmE9MCx0aGlzLmY9MzIsdGhpcy5iPTAsdGhpcy5oPSExLHRoaXMuZFsxXT0xfWZ1bmN0aW9uIGdhKGEsYil7Zm9yKHZhciBjPUFycmF5KGIpLGQ9MDtkPGEubGVuZ3RoO2QrKyljW2RdPWFbZF07Zm9yKDtkPGI7ZCsrKWNbZF09MDtyZXR1cm4gY31mdW5jdGlvbiBoYShhKXtmb3IodmFyIGI9YS5hOzE8PWI7LS1iKWthKGEsYik7YS5oPSEwfWZ1bmN0aW9uIGlhKGEpe3JldHVybiBhLmVbYS5kWzFdXX1mdW5jdGlvbiBqYShhKXt2YXIgYj1hLmQsYz1hLmUsZD1hLmMsZT1iWzFdLGY9Y1tlXTtyZXR1cm4gMDxhLmEmJihiWzFdPWJbYS5hXSxkW2JbMV1dPTEsY1tlXT1udWxsLGRbZV09YS5iLGEuYj1lLDA8LS1hLmEmJmthKGEsMSkpLGZ9ZnVuY3Rpb24ga2EoYSxiKXtmb3IodmFyIGM9YS5kLGQ9YS5lLGY9YS5jLGc9YixoPWNbZ107Oyl7dmFyIGk9Zzw8MTtpPGEuYSYmZShkW2NbaSsxXV0sZFtjW2ldXSkmJihpKz0xKTt2YXIgaj1jW2ldO2lmKGk+YS5hfHxlKGRbaF0sZFtqXSkpe2NbZ109aCxmW2hdPWc7YnJlYWt9Y1tnXT1qLGZbal09ZyxnPWl9fWZ1bmN0aW9uIGxhKGEsYil7Zm9yKHZhciBjPWEuZCxkPWEuZSxmPWEuYyxnPWIsaD1jW2ddOzspe3ZhciBpPWc+PjEsaj1jW2ldO2lmKDA9PT1pfHxlKGRbal0sZFtoXSkpe2NbZ109aCxmW2hdPWc7YnJlYWt9Y1tnXT1qLGZbal09ZyxnPWl9fWZ1bmN0aW9uIG1hKCl7dGhpcy5lPXRoaXMuYT1udWxsLHRoaXMuZj0wLHRoaXMuYz10aGlzLmI9dGhpcy5oPXRoaXMuZD0hMX1mdW5jdGlvbiBuYShhKXtyZXR1cm4gYS5lLmMuYn1mdW5jdGlvbiBvYShhKXtyZXR1cm4gYS5lLmEuYn12YXIgcGEscWE9NGUxNTAscmE9MDtwYT1WLnByb3RvdHlwZSxwYS54PWZ1bmN0aW9uKCl7Vyh0aGlzLHJhKX0scGEuQj1mdW5jdGlvbihhLGIpe3N3aXRjaChhKXtjYXNlIDEwMDE0MjpyZXR1cm47Y2FzZSAxMDAxNDA6c3dpdGNoKGIpe2Nhc2UgMTAwMTMwOmNhc2UgMTAwMTMxOmNhc2UgMTAwMTMyOmNhc2UgMTAwMTMzOmNhc2UgMTAwMTM0OnJldHVybiB2b2lkKHRoaXMucz1iKX1icmVhaztjYXNlIDEwMDE0MTpyZXR1cm4gdm9pZCh0aGlzLm09ISFiKTtkZWZhdWx0OnJldHVybiB2b2lkIFgodGhpcywxMDA5MDApfVgodGhpcywxMDA5MDEpfSxwYS55PWZ1bmN0aW9uKGEpe3N3aXRjaChhKXtjYXNlIDEwMDE0MjpyZXR1cm4gMDtjYXNlIDEwMDE0MDpyZXR1cm4gdGhpcy5zO2Nhc2UgMTAwMTQxOnJldHVybiB0aGlzLm07ZGVmYXVsdDpYKHRoaXMsMTAwOTAwKX1yZXR1cm4hMX0scGEuQT1mdW5jdGlvbihhLGIsYyl7dGhpcy5qWzBdPWEsdGhpcy5qWzFdPWIsdGhpcy5qWzJdPWN9LHBhLno9ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHxudWxsO3N3aXRjaChhKXtjYXNlIDEwMDEwMDpjYXNlIDEwMDEwNjp0aGlzLmg9YzticmVhaztjYXNlIDEwMDEwNDpjYXNlIDEwMDExMDp0aGlzLmw9YzticmVhaztjYXNlIDEwMDEwMTpjYXNlIDEwMDEwNzp0aGlzLms9YzticmVhaztjYXNlIDEwMDEwMjpjYXNlIDEwMDEwODp0aGlzLmk9YzticmVhaztjYXNlIDEwMDEwMzpjYXNlIDEwMDEwOTp0aGlzLnA9YzticmVhaztjYXNlIDEwMDEwNTpjYXNlIDEwMDExMTp0aGlzLm89YzticmVhaztjYXNlIDEwMDExMjp0aGlzLnI9YzticmVhaztkZWZhdWx0OlgodGhpcywxMDA5MDApfX0scGEuQz1mdW5jdGlvbihhLGIpe3ZhciBjPSExLGQ9WzAsMCwwXTtXKHRoaXMsMik7Zm9yKHZhciBlPTA7Mz5lOysrZSl7dmFyIGY9YVtlXTstMWUxNTA+ZiYmKGY9LTFlMTUwLGM9ITApLDFlMTUwPGYmJihmPTFlMTUwLGM9ITApLGRbZV09Zn1jJiZYKHRoaXMsMTAwMTU1KSxjPXRoaXMucSxudWxsPT09Yz8oYz1uKHRoaXMuYiksbyhjLGMuYikpOihxKGMpLGM9Yy5lKSxjLmEuZD1iLGMuYS5nWzBdPWRbMF0sYy5hLmdbMV09ZFsxXSxjLmEuZ1syXT1kWzJdLGMuZj0xLGMuYi5mPS0xLHRoaXMucT1jfSxwYS51PWZ1bmN0aW9uKGEpe1codGhpcyxyYSksdGhpcy5kPTEsdGhpcy5iPW5ldyBfLHRoaXMuYz1hfSxwYS50PWZ1bmN0aW9uKCl7Vyh0aGlzLDEpLHRoaXMuZD0yLHRoaXMucT1udWxsfSxwYS52PWZ1bmN0aW9uKCl7Vyh0aGlzLDIpLHRoaXMuZD0xfSxwYS53PWZ1bmN0aW9uKCl7Vyh0aGlzLDEpLHRoaXMuZD1yYTt2YXIgYT10aGlzLmpbMF0sYj10aGlzLmpbMV0sYz10aGlzLmpbMl0sZj0hMSxoPVthLGIsY107aWYoMD09PWEmJjA9PT1iJiYwPT09Yyl7Zm9yKHZhciBiPVstMmUxNTAsLTJlMTUwLC0yZTE1MF0saT1bMmUxNTAsMmUxNTAsMmUxNTBdLGM9W10saj1bXSxmPXRoaXMuYi5jLGE9Zi5lO2EhPT1mO2E9YS5lKWZvcih2YXIgbT0wOzM+bTsrK20pe3ZhciBuPWEuZ1ttXTtuPGlbbV0mJihpW21dPW4salttXT1hKSxuPmJbbV0mJihiW21dPW4sY1ttXT1hKX1pZihhPTAsYlsxXS1pWzFdPmJbMF0taVswXSYmKGE9MSksYlsyXS1pWzJdPmJbYV0taVthXSYmKGE9MiksaVthXT49YlthXSloWzBdPTAsaFsxXT0wLGhbMl09MTtlbHNle2ZvcihiPTAsaT1qW2FdLGM9Y1thXSxqPVswLDAsMF0saT1baS5nWzBdLWMuZ1swXSxpLmdbMV0tYy5nWzFdLGkuZ1syXS1jLmdbMl1dLG09WzAsMCwwXSxhPWYuZTthIT09ZjthPWEuZSltWzBdPWEuZ1swXS1jLmdbMF0sbVsxXT1hLmdbMV0tYy5nWzFdLG1bMl09YS5nWzJdLWMuZ1syXSxqWzBdPWlbMV0qbVsyXS1pWzJdKm1bMV0salsxXT1pWzJdKm1bMF0taVswXSptWzJdLGpbMl09aVswXSptWzFdLWlbMV0qbVswXSwobj1qWzBdKmpbMF0ralsxXSpqWzFdK2pbMl0qalsyXSk+YiYmKGI9bixoWzBdPWpbMF0saFsxXT1qWzFdLGhbMl09alsyXSk7MD49YiYmKGhbMF09aFsxXT1oWzJdPTAsaFt6KGkpXT0xKX1mPSEwfWZvcihqPXooaCksYT10aGlzLmIuYyxiPShqKzEpJTMsYz0oaisyKSUzLGo9MDxoW2pdPzE6LTEsaD1hLmU7aCE9PWE7aD1oLmUpaC5iPWguZ1tiXSxoLmE9aipoLmdbY107aWYoZil7Zm9yKGg9MCxmPXRoaXMuYi5hLGE9Zi5iO2EhPT1mO2E9YS5iKWlmKGI9YS5hLCEoMD49Yi5mKSlkb3toKz0oYi5hLmItYi5iLmEuYikqKGIuYS5hK2IuYi5hLmEpLGI9Yi5lfXdoaWxlKGIhPT1hLmEpO2lmKDA+aClmb3IoaD10aGlzLmIuYyxmPWguZTtmIT09aDtmPWYuZSlmLmE9LWYuYX1mb3IodGhpcy5uPSExLGg9dGhpcy5iLmIsYT1oLmg7YSE9PWg7YT1mKWY9YS5oLGI9YS5lLGQoYS5hLGEuYi5hKSYmYS5lLmUhPT1hJiYoTCh0aGlzLGIsYSkscChhKSxhPWIsYj1hLmUpLGIuZT09PWEmJihiIT09YSYmKGIhPT1mJiZiIT09Zi5ifHwoZj1mLmgpLHAoYikpLGEhPT1mJiZhIT09Zi5ifHwoZj1mLmgpLHAoYSkpO2Zvcih0aGlzLmU9aD1uZXcgYmEsZj10aGlzLmIuYyxhPWYuZTthIT09ZjthPWEuZSlhLmg9ZGEoaCxhKTtmb3IoY2EoaCksdGhpcy5mPW5ldyBTKHRoaXMpLFIodGhpcywtcWEpLFIodGhpcyxxYSk7bnVsbCE9PShoPWVhKHRoaXMuZSkpOyl7Zm9yKDs7KXthOmlmKGE9dGhpcy5lLDA9PT1hLmEpZj1pYShhLmIpO2Vsc2UgaWYoZj1hLmNbYS5kW2EuYS0xXV0sMCE9PWEuYi5hJiYoYT1pYShhLmIpLGUoYSxmKSkpe2Y9YTticmVhayBhfWlmKG51bGw9PT1mfHwhZChmLGgpKWJyZWFrO2Y9ZWEodGhpcy5lKSxMKHRoaXMsaC5jLGYuYyl9USh0aGlzLGgpfWZvcih0aGlzLmE9dGhpcy5mLmEuYS5iLmEuYSxoPTA7bnVsbCE9PShmPXRoaXMuZi5hLmEuYik7KWYuaHx8KytoLEMoZik7Zm9yKHRoaXMuZj1udWxsLGg9dGhpcy5lLGguYj1udWxsLGguZD1udWxsLHRoaXMuZT1oLmM9bnVsbCxoPXRoaXMuYixhPWguYS5iO2EhPT1oLmE7YT1mKWY9YS5iLGE9YS5hLGEuZS5lPT09YSYmKEEoYS5jLGEpLHAoYSkpO2lmKCF0aGlzLm4pe2lmKGg9dGhpcy5iLHRoaXMubSlmb3IoYT1oLmIuaDthIT09aC5iO2E9ZilmPWEuaCxhLmIuZC5jIT09YS5kLmM/YS5mPWEuZC5jPzE6LTE6cChhKTtlbHNlIGZvcihhPWguYS5iO2EhPT1oLmE7YT1mKWlmKGY9YS5iLGEuYyl7Zm9yKGE9YS5hO2UoYS5iLmEsYS5hKTthPWEuYy5iKTtmb3IoO2UoYS5hLGEuYi5hKTthPWEuZSk7Zm9yKGI9YS5jLmIsYz12b2lkIDA7YS5lIT09YjspaWYoZShhLmIuYSxiLmEpKXtmb3IoO2IuZSE9PWEmJihrKGIuZSl8fDA+PWcoYi5hLGIuYi5hLGIuZS5iLmEpKTspYz1yKGIuZSxiKSxiPWMuYjtiPWIuYy5ifWVsc2V7Zm9yKDtiLmUhPT1hJiYobChhLmMuYil8fDA8PWcoYS5iLmEsYS5hLGEuYy5iLmEpKTspYz1yKGEsYS5jLmIpLGE9Yy5iO2E9YS5lfWZvcig7Yi5lLmUhPT1hOyljPXIoYi5lLGIpLGI9Yy5ifWlmKHRoaXMuaHx8dGhpcy5pfHx0aGlzLmt8fHRoaXMubClpZih0aGlzLm0pe2ZvcihoPXRoaXMuYixmPWguYS5iO2YhPT1oLmE7Zj1mLmIpaWYoZi5jKXt0aGlzLmgmJnRoaXMuaCgyLHRoaXMuYyksYT1mLmE7ZG97dGhpcy5rJiZ0aGlzLmsoYS5hLmQsdGhpcy5jKSxhPWEuZX13aGlsZShhIT09Zi5hKTt0aGlzLmkmJnRoaXMuaSh0aGlzLmMpfX1lbHNle2ZvcihoPXRoaXMuYixmPSEhdGhpcy5sLGE9ITEsYj0tMSxjPWguYS5kO2MhPT1oLmE7Yz1jLmQpaWYoYy5jKXthfHwodGhpcy5oJiZ0aGlzLmgoNCx0aGlzLmMpLGE9ITApLGo9Yy5hO2Rve2YmJihpPWouYi5kLmM/MDoxLGIhPT1pJiYoYj1pLHRoaXMubCYmdGhpcy5sKCEhYix0aGlzLmMpKSksdGhpcy5rJiZ0aGlzLmsoai5hLmQsdGhpcy5jKSxqPWouZX13aGlsZShqIT09Yy5hKX1hJiZ0aGlzLmkmJnRoaXMuaSh0aGlzLmMpfWlmKHRoaXMucil7Zm9yKGg9dGhpcy5iLGE9aC5hLmI7YSE9PWguYTthPWYpaWYoZj1hLmIsIWEuYyl7Yj1hLmEsYz1iLmUsaj12b2lkIDA7ZG97aj1jLGM9ai5lLGouZD1udWxsLG51bGw9PT1qLmIuZCYmKGouYz09PWo/eChqLmEsbnVsbCk6KGouYS5jPWouYyx0KGosJChqKSkpLGk9ai5iLGkuYz09PWk/eChpLmEsbnVsbCk6KGkuYS5jPWkuYyx0KGksJChpKSkpLHcoaikpfXdoaWxlKGohPT1iKTtiPWEuZCxhPWEuYixhLmQ9YixiLmI9YX1yZXR1cm4gdGhpcy5yKHRoaXMuYiksdm9pZCh0aGlzLmM9dGhpcy5iPW51bGwpfX10aGlzLmI9dGhpcy5jPW51bGx9LHRoaXMubGlidGVzcz17R2x1VGVzc2VsYXRvcjpWLHdpbmRpbmdSdWxlOntHTFVfVEVTU19XSU5ESU5HX09ERDoxMDAxMzAsR0xVX1RFU1NfV0lORElOR19OT05aRVJPOjEwMDEzMSxHTFVfVEVTU19XSU5ESU5HX1BPU0lUSVZFOjEwMDEzMixHTFVfVEVTU19XSU5ESU5HX05FR0FUSVZFOjEwMDEzMyxHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFfVFdPOjEwMDEzNH0scHJpbWl0aXZlVHlwZTp7R0xfTElORV9MT09QOjIsR0xfVFJJQU5HTEVTOjQsR0xfVFJJQU5HTEVfU1RSSVA6NSxHTF9UUklBTkdMRV9GQU46Nn0sZXJyb3JUeXBlOntHTFVfVEVTU19NSVNTSU5HX0JFR0lOX1BPTFlHT046MTAwMTUxLEdMVV9URVNTX01JU1NJTkdfRU5EX1BPTFlHT046MTAwMTUzLEdMVV9URVNTX01JU1NJTkdfQkVHSU5fQ09OVE9VUjoxMDAxNTIsR0xVX1RFU1NfTUlTU0lOR19FTkRfQ09OVE9VUjoxMDAxNTQsR0xVX1RFU1NfQ09PUkRfVE9PX0xBUkdFOjEwMDE1NSxHTFVfVEVTU19ORUVEX0NPTUJJTkVfQ0FMTEJBQ0s6MTAwMTU2fSxnbHVFbnVtOntHTFVfVEVTU19NRVNIOjEwMDExMixHTFVfVEVTU19UT0xFUkFOQ0U6MTAwMTQyLEdMVV9URVNTX1dJTkRJTkdfUlVMRToxMDAxNDAsR0xVX1RFU1NfQk9VTkRBUllfT05MWToxMDAxNDEsR0xVX0lOVkFMSURfRU5VTToxMDA5MDAsR0xVX0lOVkFMSURfVkFMVUU6MTAwOTAxLEdMVV9URVNTX0JFR0lOOjEwMDEwMCxHTFVfVEVTU19WRVJURVg6MTAwMTAxLEdMVV9URVNTX0VORDoxMDAxMDIsR0xVX1RFU1NfRVJST1I6MTAwMTAzLEdMVV9URVNTX0VER0VfRkxBRzoxMDAxMDQsR0xVX1RFU1NfQ09NQklORToxMDAxMDUsR0xVX1RFU1NfQkVHSU5fREFUQToxMDAxMDYsR0xVX1RFU1NfVkVSVEVYX0RBVEE6MTAwMTA3LEdMVV9URVNTX0VORF9EQVRBOjEwMDEwOCxHTFVfVEVTU19FUlJPUl9EQVRBOjEwMDEwOSxHTFVfVEVTU19FREdFX0ZMQUdfREFUQToxMDAxMTAsR0xVX1RFU1NfQ09NQklORV9EQVRBOjEwMDExMX19LFYucHJvdG90eXBlLmdsdURlbGV0ZVRlc3M9Vi5wcm90b3R5cGUueCxWLnByb3RvdHlwZS5nbHVUZXNzUHJvcGVydHk9Vi5wcm90b3R5cGUuQixWLnByb3RvdHlwZS5nbHVHZXRUZXNzUHJvcGVydHk9Vi5wcm90b3R5cGUueSxWLnByb3RvdHlwZS5nbHVUZXNzTm9ybWFsPVYucHJvdG90eXBlLkEsVi5wcm90b3R5cGUuZ2x1VGVzc0NhbGxiYWNrPVYucHJvdG90eXBlLnosVi5wcm90b3R5cGUuZ2x1VGVzc1ZlcnRleD1WLnByb3RvdHlwZS5DLFYucHJvdG90eXBlLmdsdVRlc3NCZWdpblBvbHlnb249Vi5wcm90b3R5cGUudSxWLnByb3RvdHlwZS5nbHVUZXNzQmVnaW5Db250b3VyPVYucHJvdG90eXBlLnQsVi5wcm90b3R5cGUuZ2x1VGVzc0VuZENvbnRvdXI9Vi5wcm90b3R5cGUudixWLnByb3RvdHlwZS5nbHVUZXNzRW5kUG9seWdvbj1WLnByb3RvdHlwZS53LHZvaWQgMCE9PWImJihiLmV4cG9ydHM9dGhpcy5saWJ0ZXNzKX0se31dLDEwOltmdW5jdGlvbihiLGMsZCl7KGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihiLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBkJiZ2b2lkIDAhPT1jP2UoZCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYSYmYS5hbWQ/YShbXCJleHBvcnRzXCJdLGUpOmUoYi5vcGVudHlwZT17fSl9KHRoaXMsZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYygpe3RoaXMudGFibGU9bmV3IFVpbnQxNkFycmF5KDE2KSx0aGlzLnRyYW5zPW5ldyBVaW50MTZBcnJheSgyODgpfWZ1bmN0aW9uIGQoYSxiKXt0aGlzLnNvdXJjZT1hLHRoaXMuc291cmNlSW5kZXg9MCx0aGlzLnRhZz0wLHRoaXMuYml0Y291bnQ9MCx0aGlzLmRlc3Q9Yix0aGlzLmRlc3RMZW49MCx0aGlzLmx0cmVlPW5ldyBjLHRoaXMuZHRyZWU9bmV3IGN9ZnVuY3Rpb24gZihhLGIsYyxkKXt2YXIgZSxmO2ZvcihlPTA7ZTxjOysrZSlhW2VdPTA7Zm9yKGU9MDtlPDMwLWM7KytlKWFbZStjXT1lL2N8MDtmb3IoZj1kLGU9MDtlPDMwOysrZSliW2VdPWYsZis9MTw8YVtlXX1mdW5jdGlvbiBnKGEsYil7dmFyIGM7Zm9yKGM9MDtjPDc7KytjKWEudGFibGVbY109MDtmb3IoYS50YWJsZVs3XT0yNCxhLnRhYmxlWzhdPTE1MixhLnRhYmxlWzldPTExMixjPTA7YzwyNDsrK2MpYS50cmFuc1tjXT0yNTYrYztmb3IoYz0wO2M8MTQ0OysrYylhLnRyYW5zWzI0K2NdPWM7Zm9yKGM9MDtjPDg7KytjKWEudHJhbnNbMTY4K2NdPTI4MCtjO2ZvcihjPTA7YzwxMTI7KytjKWEudHJhbnNbMTc2K2NdPTE0NCtjO2ZvcihjPTA7Yzw1OysrYyliLnRhYmxlW2NdPTA7Zm9yKGIudGFibGVbNV09MzIsYz0wO2M8MzI7KytjKWIudHJhbnNbY109Y31mdW5jdGlvbiBoKGEsYixjLGQpe3ZhciBlLGY7Zm9yKGU9MDtlPDE2OysrZSlhLnRhYmxlW2VdPTA7Zm9yKGU9MDtlPGQ7KytlKWEudGFibGVbYltjK2VdXSsrO2ZvcihhLnRhYmxlWzBdPTAsZj0wLGU9MDtlPDE2OysrZSl2ZVtlXT1mLGYrPWEudGFibGVbZV07Zm9yKGU9MDtlPGQ7KytlKWJbYytlXSYmKGEudHJhbnNbdmVbYltjK2VdXSsrXT1lKX1mdW5jdGlvbiBpKGEpe2EuYml0Y291bnQtLXx8KGEudGFnPWEuc291cmNlW2Euc291cmNlSW5kZXgrK10sYS5iaXRjb3VudD03KTt2YXIgYj0xJmEudGFnO3JldHVybiBhLnRhZz4+Pj0xLGJ9ZnVuY3Rpb24gaihhLGIsYyl7aWYoIWIpcmV0dXJuIGM7Zm9yKDthLmJpdGNvdW50PDI0OylhLnRhZ3w9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsrXTw8YS5iaXRjb3VudCxhLmJpdGNvdW50Kz04O3ZhciBkPWEudGFnJjY1NTM1Pj4+MTYtYjtyZXR1cm4gYS50YWc+Pj49YixhLmJpdGNvdW50LT1iLGQrY31mdW5jdGlvbiBrKGEsYil7Zm9yKDthLmJpdGNvdW50PDI0OylhLnRhZ3w9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsrXTw8YS5iaXRjb3VudCxhLmJpdGNvdW50Kz04O3ZhciBjPTAsZD0wLGU9MCxmPWEudGFnO2Rve2Q9MipkKygxJmYpLGY+Pj49MSwrK2UsYys9Yi50YWJsZVtlXSxkLT1iLnRhYmxlW2VdfXdoaWxlKGQ+PTApO3JldHVybiBhLnRhZz1mLGEuYml0Y291bnQtPWUsYi50cmFuc1tjK2RdfWZ1bmN0aW9uIGwoYSxiLGMpe3ZhciBkLGUsZixnLGksbDtmb3IoZD1qKGEsNSwyNTcpLGU9aihhLDUsMSksZj1qKGEsNCw0KSxnPTA7ZzwxOTsrK2cpdWVbZ109MDtmb3IoZz0wO2c8ZjsrK2cpe3ZhciBtPWooYSwzLDApO3VlW3NlW2ddXT1tfWZvcihoKHRlLHVlLDAsMTkpLGk9MDtpPGQrZTspe3ZhciBuPWsoYSx0ZSk7c3dpdGNoKG4pe2Nhc2UgMTY6dmFyIG89dWVbaS0xXTtmb3IobD1qKGEsMiwzKTtsOy0tbCl1ZVtpKytdPW87YnJlYWs7Y2FzZSAxNzpmb3IobD1qKGEsMywzKTtsOy0tbCl1ZVtpKytdPTA7YnJlYWs7Y2FzZSAxODpmb3IobD1qKGEsNywxMSk7bDstLWwpdWVbaSsrXT0wO2JyZWFrO2RlZmF1bHQ6dWVbaSsrXT1ufX1oKGIsdWUsMCxkKSxoKGMsdWUsZCxlKX1mdW5jdGlvbiBtKGEsYixjKXtmb3IoOzspe3ZhciBkPWsoYSxiKTtpZigyNTY9PT1kKXJldHVybiBrZTtpZihkPDI1NilhLmRlc3RbYS5kZXN0TGVuKytdPWQ7ZWxzZXt2YXIgZSxmLGcsaDtmb3IoZC09MjU3LGU9aihhLG9lW2RdLHBlW2RdKSxmPWsoYSxjKSxnPWEuZGVzdExlbi1qKGEscWVbZl0scmVbZl0pLGg9ZztoPGcrZTsrK2gpYS5kZXN0W2EuZGVzdExlbisrXT1hLmRlc3RbaF19fX1mdW5jdGlvbiBuKGEpe2Zvcih2YXIgYixjLGQ7YS5iaXRjb3VudD44OylhLnNvdXJjZUluZGV4LS0sYS5iaXRjb3VudC09ODtpZihiPWEuc291cmNlW2Euc291cmNlSW5kZXgrMV0sYj0yNTYqYithLnNvdXJjZVthLnNvdXJjZUluZGV4XSxjPWEuc291cmNlW2Euc291cmNlSW5kZXgrM10sYz0yNTYqYythLnNvdXJjZVthLnNvdXJjZUluZGV4KzJdLGIhPT0oNjU1MzUmfmMpKXJldHVybiBsZTtmb3IoYS5zb3VyY2VJbmRleCs9NCxkPWI7ZDstLWQpYS5kZXN0W2EuZGVzdExlbisrXT1hLnNvdXJjZVthLnNvdXJjZUluZGV4KytdO3JldHVybiBhLmJpdGNvdW50PTAsa2V9ZnVuY3Rpb24gbyhhLGIpe3ZhciBjLGUsZj1uZXcgZChhLGIpO2Rve3N3aXRjaChjPWkoZiksaihmLDIsMCkpe2Nhc2UgMDplPW4oZik7YnJlYWs7Y2FzZSAxOmU9bShmLG1lLG5lKTticmVhaztjYXNlIDI6bChmLGYubHRyZWUsZi5kdHJlZSksZT1tKGYsZi5sdHJlZSxmLmR0cmVlKTticmVhaztkZWZhdWx0OmU9bGV9aWYoZSE9PWtlKXRocm93IG5ldyBFcnJvcihcIkRhdGEgZXJyb3JcIil9d2hpbGUoIWMpO3JldHVybiBmLmRlc3RMZW48Zi5kZXN0Lmxlbmd0aD9cImZ1bmN0aW9uXCI9PXR5cGVvZiBmLmRlc3Quc2xpY2U/Zi5kZXN0LnNsaWNlKDAsZi5kZXN0TGVuKTpmLmRlc3Quc3ViYXJyYXkoMCxmLmRlc3RMZW4pOmYuZGVzdH1mdW5jdGlvbiBwKGEsYixjLGQsZSl7cmV0dXJuIE1hdGgucG93KDEtZSwzKSphKzMqTWF0aC5wb3coMS1lLDIpKmUqYiszKigxLWUpKk1hdGgucG93KGUsMikqYytNYXRoLnBvdyhlLDMpKmR9ZnVuY3Rpb24gcSgpe3RoaXMueDE9TnVtYmVyLk5hTix0aGlzLnkxPU51bWJlci5OYU4sdGhpcy54Mj1OdW1iZXIuTmFOLHRoaXMueTI9TnVtYmVyLk5hTn1mdW5jdGlvbiByKCl7dGhpcy5jb21tYW5kcz1bXSx0aGlzLmZpbGw9XCJibGFja1wiLHRoaXMuc3Ryb2tlPW51bGwsdGhpcy5zdHJva2VXaWR0aD0xfWZ1bmN0aW9uIHMoYSl7dGhyb3cgbmV3IEVycm9yKGEpfWZ1bmN0aW9uIHQoYSxiKXthfHxzKGIpfWZ1bmN0aW9uIHUoYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGF9fWZ1bmN0aW9uIHYoYSl7cmV0dXJuIGE+PS0xMjgmJmE8PTEyN31mdW5jdGlvbiB3KGEsYixjKXtmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2I8ZSYmZDw2NCYmMD09PWFbYl07KSsrYiwrK2Q7cmV0dXJuIGMucHVzaCgxMjh8ZC0xKSxifWZ1bmN0aW9uIHgoYSxiLGMpe2Zvcih2YXIgZD0wLGU9YS5sZW5ndGgsZj1iO2Y8ZSYmZDw2NDspe3ZhciBnPWFbZl07aWYoIXYoZykpYnJlYWs7aWYoMD09PWcmJmYrMTxlJiYwPT09YVtmKzFdKWJyZWFrOysrZiwrK2R9Yy5wdXNoKGQtMSk7Zm9yKHZhciBoPWI7aDxmOysraCljLnB1c2goYVtoXSsyNTYmMjU1KTtyZXR1cm4gZn1mdW5jdGlvbiB5KGEsYixjKXtmb3IodmFyIGQ9MCxlPWEubGVuZ3RoLGY9YjtmPGUmJmQ8NjQ7KXt2YXIgZz1hW2ZdO2lmKDA9PT1nKWJyZWFrO2lmKHYoZykmJmYrMTxlJiZ2KGFbZisxXSkpYnJlYWs7KytmLCsrZH1jLnB1c2goNjR8ZC0xKTtmb3IodmFyIGg9YjtoPGY7KytoKXt2YXIgaT1hW2hdO2MucHVzaChpKzY1NTM2Pj44JjI1NSxpKzI1NiYyNTUpfXJldHVybiBmfWZ1bmN0aW9uIHooYSxiLGMpe2Zvcih2YXIgZD10aGlzLGU9MDtlPGIubGVuZ3RoO2UrPTEpe3ZhciBmPWJbZV07ZFtmLm5hbWVdPWYudmFsdWV9aWYodGhpcy50YWJsZU5hbWU9YSx0aGlzLmZpZWxkcz1iLGMpZm9yKHZhciBnPU9iamVjdC5rZXlzKGMpLGg9MDtoPGcubGVuZ3RoO2grPTEpe3ZhciBpPWdbaF0saj1jW2ldO3ZvaWQgMCE9PWRbaV0mJihkW2ldPWopfX1mdW5jdGlvbiBBKGEsYixjKXt2b2lkIDA9PT1jJiYoYz1iLmxlbmd0aCk7dmFyIGQ9bmV3IEFycmF5KGIubGVuZ3RoKzEpO2RbMF09e25hbWU6YStcIkNvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmN9O2Zvcih2YXIgZT0wO2U8Yi5sZW5ndGg7ZSsrKWRbZSsxXT17bmFtZTphK2UsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmJbZV19O3JldHVybiBkfWZ1bmN0aW9uIEIoYSxiLGMpe3ZhciBkPWIubGVuZ3RoLGU9bmV3IEFycmF5KGQrMSk7ZVswXT17bmFtZTphK1wiQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZH07Zm9yKHZhciBmPTA7ZjxkO2YrKyllW2YrMV09e25hbWU6YStmLHR5cGU6XCJUQUJMRVwiLHZhbHVlOmMoYltmXSxmKX07cmV0dXJuIGV9ZnVuY3Rpb24gQyhhLGIsYyl7dmFyIGQ9Yi5sZW5ndGgsZT1bXTtlWzBdPXtuYW1lOmErXCJDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkfTtmb3IodmFyIGY9MDtmPGQ7ZisrKWU9ZS5jb25jYXQoYyhiW2ZdLGYpKTtyZXR1cm4gZX1mdW5jdGlvbiBEKGEpezE9PT1hLmZvcm1hdD96LmNhbGwodGhpcyxcImNvdmVyYWdlVGFibGVcIixbe25hbWU6XCJjb3ZlcmFnZUZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxfV0uY29uY2F0KEEoXCJnbHlwaFwiLGEuZ2x5cGhzKSkpOnhlLmFzc2VydCghMSxcIkNhbid0IGNyZWF0ZSBjb3ZlcmFnZSB0YWJsZSBmb3JtYXQgMiB5ZXQuXCIpfWZ1bmN0aW9uIEUoYSl7ei5jYWxsKHRoaXMsXCJzY3JpcHRMaXN0VGFibGVcIixDKFwic2NyaXB0UmVjb3JkXCIsYSxmdW5jdGlvbihhLGIpe3ZhciBjPWEuc2NyaXB0LGQ9Yy5kZWZhdWx0TGFuZ1N5cztyZXR1cm4geGUuYXNzZXJ0KCEhZCxcIlVuYWJsZSB0byB3cml0ZSBHU1VCOiBzY3JpcHQgXCIrYS50YWcrXCIgaGFzIG5vIGRlZmF1bHQgbGFuZ3VhZ2Ugc3lzdGVtLlwiKSxbe25hbWU6XCJzY3JpcHRUYWdcIitiLHR5cGU6XCJUQUdcIix2YWx1ZTphLnRhZ30se25hbWU6XCJzY3JpcHRcIitiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyB6KFwic2NyaXB0VGFibGVcIixbe25hbWU6XCJkZWZhdWx0TGFuZ1N5c1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyB6KFwiZGVmYXVsdExhbmdTeXNcIixbe25hbWU6XCJsb29rdXBPcmRlclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlcUZlYXR1cmVJbmRleFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkLnJlcUZlYXR1cmVJbmRleH1dLmNvbmNhdChBKFwiZmVhdHVyZUluZGV4XCIsZC5mZWF0dXJlSW5kZXhlcykpKX1dLmNvbmNhdChDKFwibGFuZ1N5c1wiLGMubGFuZ1N5c1JlY29yZHMsZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxhbmdTeXM7cmV0dXJuW3tuYW1lOlwibGFuZ1N5c1RhZ1wiK2IsdHlwZTpcIlRBR1wiLHZhbHVlOmEudGFnfSx7bmFtZTpcImxhbmdTeXNcIitiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyB6KFwibGFuZ1N5c1wiLFt7bmFtZTpcImxvb2t1cE9yZGVyXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVxRmVhdHVyZUluZGV4XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmMucmVxRmVhdHVyZUluZGV4fV0uY29uY2F0KEEoXCJmZWF0dXJlSW5kZXhcIixjLmZlYXR1cmVJbmRleGVzKSkpfV19KSkpfV19KSl9ZnVuY3Rpb24gRihhKXt6LmNhbGwodGhpcyxcImZlYXR1cmVMaXN0VGFibGVcIixDKFwiZmVhdHVyZVJlY29yZFwiLGEsZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmZlYXR1cmU7cmV0dXJuW3tuYW1lOlwiZmVhdHVyZVRhZ1wiK2IsdHlwZTpcIlRBR1wiLHZhbHVlOmEudGFnfSx7bmFtZTpcImZlYXR1cmVcIitiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyB6KFwiZmVhdHVyZVRhYmxlXCIsW3tuYW1lOlwiZmVhdHVyZVBhcmFtc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjLmZlYXR1cmVQYXJhbXN9XS5jb25jYXQoQShcImxvb2t1cExpc3RJbmRleFwiLGMubG9va3VwTGlzdEluZGV4ZXMpKSl9XX0pKX1mdW5jdGlvbiBHKGEsYil7ei5jYWxsKHRoaXMsXCJsb29rdXBMaXN0VGFibGVcIixCKFwibG9va3VwXCIsYSxmdW5jdGlvbihhKXt2YXIgYz1iW2EubG9va3VwVHlwZV07cmV0dXJuIHhlLmFzc2VydCghIWMsXCJVbmFibGUgdG8gd3JpdGUgR1NVQiBsb29rdXAgdHlwZSBcIithLmxvb2t1cFR5cGUrXCIgdGFibGVzLlwiKSxuZXcgeihcImxvb2t1cFRhYmxlXCIsW3tuYW1lOlwibG9va3VwVHlwZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmxvb2t1cFR5cGV9LHtuYW1lOlwibG9va3VwRmxhZ1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmxvb2t1cEZsYWd9XS5jb25jYXQoQihcInN1YnRhYmxlXCIsYS5zdWJ0YWJsZXMsYykpKX0pKX1mdW5jdGlvbiBIKGEsYil7cmV0dXJuIGEuZ2V0VWludDgoYil9ZnVuY3Rpb24gSShhLGIpe3JldHVybiBhLmdldFVpbnQxNihiLCExKX1mdW5jdGlvbiBKKGEsYil7cmV0dXJuIGEuZ2V0SW50MTYoYiwhMSl9ZnVuY3Rpb24gSyhhLGIpe3JldHVybiBhLmdldFVpbnQzMihiLCExKX1mdW5jdGlvbiBMKGEsYil7cmV0dXJuIGEuZ2V0SW50MTYoYiwhMSkrYS5nZXRVaW50MTYoYisyLCExKS82NTUzNX1mdW5jdGlvbiBNKGEsYil7Zm9yKHZhciBjPVwiXCIsZD1iO2Q8Yis0O2QrPTEpYys9U3RyaW5nLmZyb21DaGFyQ29kZShhLmdldEludDgoZCkpO3JldHVybiBjfWZ1bmN0aW9uIE4oYSxiLGMpe2Zvcih2YXIgZD0wLGU9MDtlPGM7ZSs9MSlkPDw9OCxkKz1hLmdldFVpbnQ4KGIrZSk7cmV0dXJuIGR9ZnVuY3Rpb24gTyhhLGIsYyl7Zm9yKHZhciBkPVtdLGU9YjtlPGM7ZSs9MSlkLnB1c2goYS5nZXRVaW50OChlKSk7cmV0dXJuIGR9ZnVuY3Rpb24gUChhKXtmb3IodmFyIGI9XCJcIixjPTA7YzxhLmxlbmd0aDtjKz0xKWIrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtjXSk7cmV0dXJuIGJ9ZnVuY3Rpb24gUShhLGIpe3RoaXMuZGF0YT1hLHRoaXMub2Zmc2V0PWIsdGhpcy5yZWxhdGl2ZU9mZnNldD0wfWZ1bmN0aW9uIFIoYSxiKXtiLnBhcnNlVVNob3J0KCksYS5sZW5ndGg9Yi5wYXJzZVVMb25nKCksYS5sYW5ndWFnZT1iLnBhcnNlVUxvbmcoKTt2YXIgYzthLmdyb3VwQ291bnQ9Yz1iLnBhcnNlVUxvbmcoKSxhLmdseXBoSW5kZXhNYXA9e307Zm9yKHZhciBkPTA7ZDxjO2QrPTEpZm9yKHZhciBlPWIucGFyc2VVTG9uZygpLGY9Yi5wYXJzZVVMb25nKCksZz1iLnBhcnNlVUxvbmcoKSxoPWU7aDw9ZjtoKz0xKWEuZ2x5cGhJbmRleE1hcFtoXT1nLGcrK31mdW5jdGlvbiBTKGEsYixjLGQsZSl7YS5sZW5ndGg9Yi5wYXJzZVVTaG9ydCgpLGEubGFuZ3VhZ2U9Yi5wYXJzZVVTaG9ydCgpO3ZhciBmO2Euc2VnQ291bnQ9Zj1iLnBhcnNlVVNob3J0KCk+PjEsYi5za2lwKFwidVNob3J0XCIsMyksYS5nbHlwaEluZGV4TWFwPXt9O2Zvcih2YXIgZz1uZXcgTGUuUGFyc2VyKGMsZCtlKzE0KSxoPW5ldyBMZS5QYXJzZXIoYyxkK2UrMTYrMipmKSxpPW5ldyBMZS5QYXJzZXIoYyxkK2UrMTYrNCpmKSxqPW5ldyBMZS5QYXJzZXIoYyxkK2UrMTYrNipmKSxrPWQrZSsxNis4KmYsbD0wO2w8Zi0xO2wrPTEpZm9yKHZhciBtPXZvaWQgMCxuPWcucGFyc2VVU2hvcnQoKSxvPWgucGFyc2VVU2hvcnQoKSxwPWkucGFyc2VTaG9ydCgpLHE9ai5wYXJzZVVTaG9ydCgpLHI9bztyPD1uO3IrPTEpMCE9PXE/KGs9ai5vZmZzZXQrai5yZWxhdGl2ZU9mZnNldC0yLGsrPXEsays9Miooci1vKSwwIT09KG09TGUuZ2V0VVNob3J0KGMsaykpJiYobT1tK3AmNjU1MzUpKTptPXIrcCY2NTUzNSxhLmdseXBoSW5kZXhNYXBbcl09bX1mdW5jdGlvbiBUKGEsYil7dmFyIGM9e307Yy52ZXJzaW9uPUxlLmdldFVTaG9ydChhLGIpLHhlLmFyZ3VtZW50KDA9PT1jLnZlcnNpb24sXCJjbWFwIHRhYmxlIHZlcnNpb24gc2hvdWxkIGJlIDAuXCIpLGMubnVtVGFibGVzPUxlLmdldFVTaG9ydChhLGIrMik7Zm9yKHZhciBkPS0xLGU9Yy5udW1UYWJsZXMtMTtlPj0wO2UtPTEpe3ZhciBmPUxlLmdldFVTaG9ydChhLGIrNCs4KmUpLGc9TGUuZ2V0VVNob3J0KGEsYis0KzgqZSsyKTtpZigzPT09ZiYmKDA9PT1nfHwxPT09Z3x8MTA9PT1nKXx8MD09PWYmJigwPT09Z3x8MT09PWd8fDI9PT1nfHwzPT09Z3x8ND09PWcpKXtkPUxlLmdldFVMb25nKGEsYis0KzgqZSs0KTticmVha319aWYoLTE9PT1kKXRocm93IG5ldyBFcnJvcihcIk5vIHZhbGlkIGNtYXAgc3ViLXRhYmxlcyBmb3VuZC5cIik7dmFyIGg9bmV3IExlLlBhcnNlcihhLGIrZCk7aWYoYy5mb3JtYXQ9aC5wYXJzZVVTaG9ydCgpLDEyPT09Yy5mb3JtYXQpUihjLGgpO2Vsc2V7aWYoNCE9PWMuZm9ybWF0KXRocm93IG5ldyBFcnJvcihcIk9ubHkgZm9ybWF0IDQgYW5kIDEyIGNtYXAgdGFibGVzIGFyZSBzdXBwb3J0ZWQgKGZvdW5kIGZvcm1hdCBcIitjLmZvcm1hdCtcIikuXCIpO1MoYyxoLGEsYixkKX1yZXR1cm4gY31mdW5jdGlvbiBVKGEsYixjKXthLnNlZ21lbnRzLnB1c2goe2VuZDpiLHN0YXJ0OmIsZGVsdGE6LShiLWMpLG9mZnNldDowLGdseXBoSW5kZXg6Y30pfWZ1bmN0aW9uIFYoYSl7YS5zZWdtZW50cy5wdXNoKHtlbmQ6NjU1MzUsc3RhcnQ6NjU1MzUsZGVsdGE6MSxvZmZzZXQ6MH0pfWZ1bmN0aW9uIFcoYSl7dmFyIGIsYz0hMDtmb3IoYj1hLmxlbmd0aC0xO2I+MDtiLT0xKXtpZihhLmdldChiKS51bmljb2RlPjY1NTM1KXtjb25zb2xlLmxvZyhcIkFkZGluZyBDTUFQIGZvcm1hdCAxMiAobmVlZGVkISlcIiksYz0hMTticmVha319dmFyIGQ9W3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcIm51bVRhYmxlc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjPzE6Mn0se25hbWU6XCJwbGF0Zm9ybUlEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjN9LHtuYW1lOlwiZW5jb2RpbmdJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmM/MTI6MjB9XTtjfHwoZD1kLmNvbmNhdChbe25hbWU6XCJjbWFwMTJQbGF0Zm9ybUlEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjN9LHtuYW1lOlwiY21hcDEyRW5jb2RpbmdJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxMH0se25hbWU6XCJjbWFwMTJPZmZzZXRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfV0pKSxkPWQuY29uY2F0KFt7bmFtZTpcImZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTo0fSx7bmFtZTpcImNtYXA0TGVuZ3RoXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibGFuZ3VhZ2VcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzZWdDb3VudFgyXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic2VhcmNoUmFuZ2VcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJlbnRyeVNlbGVjdG9yXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmFuZ2VTaGlmdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfV0pO3ZhciBlPW5ldyBJZS5UYWJsZShcImNtYXBcIixkKTtmb3IoZS5zZWdtZW50cz1bXSxiPTA7YjxhLmxlbmd0aDtiKz0xKXtmb3IodmFyIGY9YS5nZXQoYiksZz0wO2c8Zi51bmljb2Rlcy5sZW5ndGg7Zys9MSlVKGUsZi51bmljb2Rlc1tnXSxiKTtlLnNlZ21lbnRzPWUuc2VnbWVudHMuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0YXJ0LWIuc3RhcnR9KX1WKGUpO3ZhciBoPWUuc2VnbWVudHMubGVuZ3RoLGk9MCxqPVtdLGs9W10sbD1bXSxtPVtdLG49W10sbz1bXTtmb3IoYj0wO2I8aDtiKz0xKXt2YXIgcD1lLnNlZ21lbnRzW2JdO3AuZW5kPD02NTUzNSYmcC5zdGFydDw9NjU1MzU/KGo9ai5jb25jYXQoe25hbWU6XCJlbmRfXCIrYix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6cC5lbmR9KSxrPWsuY29uY2F0KHtuYW1lOlwic3RhcnRfXCIrYix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6cC5zdGFydH0pLGw9bC5jb25jYXQoe25hbWU6XCJpZERlbHRhX1wiK2IsdHlwZTpcIlNIT1JUXCIsdmFsdWU6cC5kZWx0YX0pLG09bS5jb25jYXQoe25hbWU6XCJpZFJhbmdlT2Zmc2V0X1wiK2IsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOnAub2Zmc2V0fSksdm9pZCAwIT09cC5nbHlwaElkJiYobj1uLmNvbmNhdCh7bmFtZTpcImdseXBoX1wiK2IsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOnAuZ2x5cGhJZH0pKSk6aSs9MSxjfHx2b2lkIDA9PT1wLmdseXBoSW5kZXh8fChvPW8uY29uY2F0KHtuYW1lOlwiY21hcDEyU3RhcnRfXCIrYix0eXBlOlwiVUxPTkdcIix2YWx1ZTpwLnN0YXJ0fSksbz1vLmNvbmNhdCh7bmFtZTpcImNtYXAxMkVuZF9cIitiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnAuZW5kfSksbz1vLmNvbmNhdCh7bmFtZTpcImNtYXAxMkdseXBoX1wiK2IsdHlwZTpcIlVMT05HXCIsdmFsdWU6cC5nbHlwaEluZGV4fSkpfWlmKGUuc2VnQ291bnRYMj0yKihoLWkpLGUuc2VhcmNoUmFuZ2U9MipNYXRoLnBvdygyLE1hdGguZmxvb3IoTWF0aC5sb2coaC1pKS9NYXRoLmxvZygyKSkpLGUuZW50cnlTZWxlY3Rvcj1NYXRoLmxvZyhlLnNlYXJjaFJhbmdlLzIpL01hdGgubG9nKDIpLGUucmFuZ2VTaGlmdD1lLnNlZ0NvdW50WDItZS5zZWFyY2hSYW5nZSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQoaiksZS5maWVsZHMucHVzaCh7bmFtZTpcInJlc2VydmVkUGFkXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9KSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQoayksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KGwpLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChtKSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQobiksZS5jbWFwNExlbmd0aD0xNCsyKmoubGVuZ3RoKzIrMiprLmxlbmd0aCsyKmwubGVuZ3RoKzIqbS5sZW5ndGgrMipuLmxlbmd0aCwhYyl7dmFyIHE9MTYrNCpvLmxlbmd0aDtlLmNtYXAxMk9mZnNldD0yMCtlLmNtYXA0TGVuZ3RoLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChbe25hbWU6XCJjbWFwMTJGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MTJ9LHtuYW1lOlwiY21hcDEyUmVzZXJ2ZWRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJjbWFwMTJMZW5ndGhcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTpxfSx7bmFtZTpcImNtYXAxMkxhbmd1YWdlXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJjbWFwMTJuR3JvdXBzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6by5sZW5ndGgvM31dKSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQobyl9cmV0dXJuIGV9ZnVuY3Rpb24gWChhKXt0aGlzLmZvbnQ9YX1mdW5jdGlvbiBZKGEpe3RoaXMuY21hcD1hfWZ1bmN0aW9uIFooYSxiKXt0aGlzLmVuY29kaW5nPWEsdGhpcy5jaGFyc2V0PWJ9ZnVuY3Rpb24gJChhKXt2YXIgYj10aGlzO3N3aXRjaChhLnZlcnNpb24pe2Nhc2UgMTp0aGlzLm5hbWVzPVFlLnNsaWNlKCk7YnJlYWs7Y2FzZSAyOnRoaXMubmFtZXM9bmV3IEFycmF5KGEubnVtYmVyT2ZHbHlwaHMpO2Zvcih2YXIgYz0wO2M8YS5udW1iZXJPZkdseXBocztjKyspYS5nbHlwaE5hbWVJbmRleFtjXTxRZS5sZW5ndGg/Yi5uYW1lc1tjXT1RZVthLmdseXBoTmFtZUluZGV4W2NdXTpiLm5hbWVzW2NdPWEubmFtZXNbYS5nbHlwaE5hbWVJbmRleFtjXS1RZS5sZW5ndGhdO2JyZWFrO2Nhc2UgMi41OnRoaXMubmFtZXM9bmV3IEFycmF5KGEubnVtYmVyT2ZHbHlwaHMpO2Zvcih2YXIgZD0wO2Q8YS5udW1iZXJPZkdseXBocztkKyspYi5uYW1lc1tkXT1RZVtkK2EuZ2x5cGhOYW1lSW5kZXhbZF1dO2JyZWFrO2Nhc2UgMzpkZWZhdWx0OnRoaXMubmFtZXM9W119fWZ1bmN0aW9uIF8oYSl7Zm9yKHZhciBiLGM9YS50YWJsZXMuY21hcC5nbHlwaEluZGV4TWFwLGQ9T2JqZWN0LmtleXMoYyksZT0wO2U8ZC5sZW5ndGg7ZSs9MSl7dmFyIGY9ZFtlXSxnPWNbZl07Yj1hLmdseXBocy5nZXQoZyksYi5hZGRVbmljb2RlKHBhcnNlSW50KGYpKX1mb3IodmFyIGg9MDtoPGEuZ2x5cGhzLmxlbmd0aDtoKz0xKWI9YS5nbHlwaHMuZ2V0KGgpLGEuY2ZmRW5jb2Rpbmc/YS5pc0NJREZvbnQ/Yi5uYW1lPVwiZ2lkXCIraDpiLm5hbWU9YS5jZmZFbmNvZGluZy5jaGFyc2V0W2hdOmEuZ2x5cGhOYW1lcy5uYW1lcyYmKGIubmFtZT1hLmdseXBoTmFtZXMuZ2x5cGhJbmRleFRvTmFtZShoKSl9ZnVuY3Rpb24gYWEoYSxiLGMsZCxlKXthLmJlZ2luUGF0aCgpLGEubW92ZVRvKGIsYyksYS5saW5lVG8oZCxlKSxhLnN0cm9rZSgpfWZ1bmN0aW9uIGJhKGEsYil7dmFyIGM9Ynx8bmV3IHI7cmV0dXJue2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiYoYz1jKCkpLGN9LHNldDpmdW5jdGlvbihhKXtjPWF9fX1mdW5jdGlvbiBjYShhKXt0aGlzLmJpbmRDb25zdHJ1Y3RvclZhbHVlcyhhKX1mdW5jdGlvbiBkYShhLGIsYyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEucGF0aCxhW2NdfSxzZXQ6ZnVuY3Rpb24oYil7YVtjXT1ifSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIGVhKGEsYil7dmFyIGM9dGhpcztpZih0aGlzLmZvbnQ9YSx0aGlzLmdseXBocz17fSxBcnJheS5pc0FycmF5KGIpKWZvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKWMuZ2x5cGhzW2RdPWJbZF07dGhpcy5sZW5ndGg9YiYmYi5sZW5ndGh8fDB9ZnVuY3Rpb24gZmEoYSxiKXtyZXR1cm4gbmV3IGNhKHtpbmRleDpiLGZvbnQ6YX0pfWZ1bmN0aW9uIGdhKGEsYixjLGQsZSxmKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZz1uZXcgY2Eoe2luZGV4OmIsZm9udDphfSk7cmV0dXJuIGcucGF0aD1mdW5jdGlvbigpe2MoZyxkLGUpO3ZhciBiPWYoYS5nbHlwaHMsZyk7cmV0dXJuIGIudW5pdHNQZXJFbT1hLnVuaXRzUGVyRW0sYn0sZGEoZyxcInhNaW5cIixcIl94TWluXCIpLGRhKGcsXCJ4TWF4XCIsXCJfeE1heFwiKSxkYShnLFwieU1pblwiLFwiX3lNaW5cIiksZGEoZyxcInlNYXhcIixcIl95TWF4XCIpLGd9fWZ1bmN0aW9uIGhhKGEsYixjLGQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPW5ldyBjYSh7aW5kZXg6Yixmb250OmF9KTtyZXR1cm4gZS5wYXRoPWZ1bmN0aW9uKCl7dmFyIGI9YyhhLGUsZCk7cmV0dXJuIGIudW5pdHNQZXJFbT1hLnVuaXRzUGVyRW0sYn0sZX19ZnVuY3Rpb24gaWEoYSxiKXtpZihhPT09YilyZXR1cm4hMDtpZihBcnJheS5pc0FycmF5KGEpJiZBcnJheS5pc0FycmF5KGIpKXtpZihhLmxlbmd0aCE9PWIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7Yys9MSlpZighaWEoYVtjXSxiW2NdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBqYShhKXtyZXR1cm4gYS5sZW5ndGg8MTI0MD8xMDc6YS5sZW5ndGg8MzM5MDA/MTEzMTozMjc2OH1mdW5jdGlvbiBrYShhLGIsYyl7dmFyIGQsZSxmPVtdLGc9W10saD1MZS5nZXRDYXJkMTYoYSxiKTtpZigwIT09aCl7dmFyIGk9TGUuZ2V0Qnl0ZShhLGIrMik7ZD1iKyhoKzEpKmkrMjtmb3IodmFyIGo9YiszLGs9MDtrPGgrMTtrKz0xKWYucHVzaChMZS5nZXRPZmZzZXQoYSxqLGkpKSxqKz1pO2U9ZCtmW2hdfWVsc2UgZT1iKzI7Zm9yKHZhciBsPTA7bDxmLmxlbmd0aC0xO2wrPTEpe3ZhciBtPUxlLmdldEJ5dGVzKGEsZCtmW2xdLGQrZltsKzFdKTtjJiYobT1jKG0pKSxnLnB1c2gobSl9cmV0dXJue29iamVjdHM6ZyxzdGFydE9mZnNldDpiLGVuZE9mZnNldDplfX1mdW5jdGlvbiBsYShhKXtmb3IodmFyIGI9XCJcIixjPTE1LGQ9W1wiMFwiLFwiMVwiLFwiMlwiLFwiM1wiLFwiNFwiLFwiNVwiLFwiNlwiLFwiN1wiLFwiOFwiLFwiOVwiLFwiLlwiLFwiRVwiLFwiRS1cIixudWxsLFwiLVwiXTs7KXt2YXIgZT1hLnBhcnNlQnl0ZSgpLGY9ZT4+NCxnPTE1JmU7aWYoZj09PWMpYnJlYWs7aWYoYis9ZFtmXSxnPT09YylicmVhaztiKz1kW2ddfXJldHVybiBwYXJzZUZsb2F0KGIpfWZ1bmN0aW9uIG1hKGEsYil7dmFyIGMsZCxlLGY7aWYoMjg9PT1iKXJldHVybiBjPWEucGFyc2VCeXRlKCksZD1hLnBhcnNlQnl0ZSgpLGM8PDh8ZDtpZigyOT09PWIpcmV0dXJuIGM9YS5wYXJzZUJ5dGUoKSxkPWEucGFyc2VCeXRlKCksZT1hLnBhcnNlQnl0ZSgpLGY9YS5wYXJzZUJ5dGUoKSxjPDwyNHxkPDwxNnxlPDw4fGY7aWYoMzA9PT1iKXJldHVybiBsYShhKTtpZihiPj0zMiYmYjw9MjQ2KXJldHVybiBiLTEzOTtpZihiPj0yNDcmJmI8PTI1MClyZXR1cm4gYz1hLnBhcnNlQnl0ZSgpLDI1NiooYi0yNDcpK2MrMTA4O2lmKGI+PTI1MSYmYjw9MjU0KXJldHVybiBjPWEucGFyc2VCeXRlKCksMjU2Ki0oYi0yNTEpLWMtMTA4O3Rocm93IG5ldyBFcnJvcihcIkludmFsaWQgYjAgXCIrYil9ZnVuY3Rpb24gbmEoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrPTEpe3ZhciBkPWFbY11bMF0sZT1hW2NdWzFdLGY9dm9pZCAwO2lmKGY9MT09PWUubGVuZ3RoP2VbMF06ZSxiLmhhc093blByb3BlcnR5KGQpJiYhaXNOYU4oYltkXSkpdGhyb3cgbmV3IEVycm9yKFwiT2JqZWN0IFwiK2IrXCIgYWxyZWFkeSBoYXMga2V5IFwiK2QpO2JbZF09Zn1yZXR1cm4gYn1mdW5jdGlvbiBvYShhLGIsYyl7Yj12b2lkIDAhPT1iP2I6MDt2YXIgZD1uZXcgTGUuUGFyc2VyKGEsYiksZT1bXSxmPVtdO2ZvcihjPXZvaWQgMCE9PWM/YzphLmxlbmd0aDtkLnJlbGF0aXZlT2Zmc2V0PGM7KXt2YXIgZz1kLnBhcnNlQnl0ZSgpO2c8PTIxPygxMj09PWcmJihnPTEyMDArZC5wYXJzZUJ5dGUoKSksZS5wdXNoKFtnLGZdKSxmPVtdKTpmLnB1c2gobWEoZCxnKSl9cmV0dXJuIG5hKGUpfWZ1bmN0aW9uIHBhKGEsYil7cmV0dXJuIGI9Yjw9MzkwP05lW2JdOmFbYi0zOTFdfWZ1bmN0aW9uIHFhKGEsYixjKXtmb3IodmFyIGQsZT17fSxmPTA7ZjxiLmxlbmd0aDtmKz0xKXt2YXIgZz1iW2ZdO2lmKEFycmF5LmlzQXJyYXkoZy50eXBlKSl7dmFyIGg9W107aC5sZW5ndGg9Zy50eXBlLmxlbmd0aDtmb3IodmFyIGk9MDtpPGcudHlwZS5sZW5ndGg7aSsrKWQ9dm9pZCAwIT09YVtnLm9wXT9hW2cub3BdW2ldOnZvaWQgMCx2b2lkIDA9PT1kJiYoZD12b2lkIDAhPT1nLnZhbHVlJiZ2b2lkIDAhPT1nLnZhbHVlW2ldP2cudmFsdWVbaV06bnVsbCksXCJTSURcIj09PWcudHlwZVtpXSYmKGQ9cGEoYyxkKSksaFtpXT1kO2VbZy5uYW1lXT1ofWVsc2UgZD1hW2cub3BdLHZvaWQgMD09PWQmJihkPXZvaWQgMCE9PWcudmFsdWU/Zy52YWx1ZTpudWxsKSxcIlNJRFwiPT09Zy50eXBlJiYoZD1wYShjLGQpKSxlW2cubmFtZV09ZH1yZXR1cm4gZX1mdW5jdGlvbiByYShhLGIpe3ZhciBjPXt9O3JldHVybiBjLmZvcm1hdE1ham9yPUxlLmdldENhcmQ4KGEsYiksYy5mb3JtYXRNaW5vcj1MZS5nZXRDYXJkOChhLGIrMSksYy5zaXplPUxlLmdldENhcmQ4KGEsYisyKSxjLm9mZnNldFNpemU9TGUuZ2V0Q2FyZDgoYSxiKzMpLGMuc3RhcnRPZmZzZXQ9YixjLmVuZE9mZnNldD1iKzQsY31mdW5jdGlvbiBzYShhLGIpe3JldHVybiBxYShvYShhLDAsYS5ieXRlTGVuZ3RoKSxUZSxiKX1mdW5jdGlvbiB0YShhLGIsYyxkKXtyZXR1cm4gcWEob2EoYSxiLGMpLFVlLGQpfWZ1bmN0aW9uIHVhKGEsYixjLGQpe2Zvcih2YXIgZT1bXSxmPTA7ZjxjLmxlbmd0aDtmKz0xKXt2YXIgZz1uZXcgRGF0YVZpZXcobmV3IFVpbnQ4QXJyYXkoY1tmXSkuYnVmZmVyKSxoPXNhKGcsZCk7aC5fc3VicnM9W10saC5fc3VicnNCaWFzPTA7dmFyIGk9aC5wcml2YXRlWzBdLGo9aC5wcml2YXRlWzFdO2lmKDAhPT1pJiYwIT09ail7dmFyIGs9dGEoYSxqK2IsaSxkKTtpZihoLl9kZWZhdWx0V2lkdGhYPWsuZGVmYXVsdFdpZHRoWCxoLl9ub21pbmFsV2lkdGhYPWsubm9taW5hbFdpZHRoWCwwIT09ay5zdWJycyl7dmFyIGw9aitrLnN1YnJzLG09a2EoYSxsK2IpO2guX3N1YnJzPW0ub2JqZWN0cyxoLl9zdWJyc0JpYXM9amEoaC5fc3VicnMpfWguX3ByaXZhdGVEaWN0PWt9ZS5wdXNoKGgpfXJldHVybiBlfWZ1bmN0aW9uIHZhKGEsYixjLGQpe3ZhciBlLGYsZz1uZXcgTGUuUGFyc2VyKGEsYik7Yy09MTt2YXIgaD1bXCIubm90ZGVmXCJdLGk9Zy5wYXJzZUNhcmQ4KCk7aWYoMD09PWkpZm9yKHZhciBqPTA7ajxjO2orPTEpZT1nLnBhcnNlU0lEKCksaC5wdXNoKHBhKGQsZSkpO2Vsc2UgaWYoMT09PWkpZm9yKDtoLmxlbmd0aDw9Yzspe2U9Zy5wYXJzZVNJRCgpLGY9Zy5wYXJzZUNhcmQ4KCk7Zm9yKHZhciBrPTA7azw9ZjtrKz0xKWgucHVzaChwYShkLGUpKSxlKz0xfWVsc2V7aWYoMiE9PWkpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBjaGFyc2V0IGZvcm1hdCBcIitpKTtmb3IoO2gubGVuZ3RoPD1jOyl7ZT1nLnBhcnNlU0lEKCksZj1nLnBhcnNlQ2FyZDE2KCk7Zm9yKHZhciBsPTA7bDw9ZjtsKz0xKWgucHVzaChwYShkLGUpKSxlKz0xfX1yZXR1cm4gaH1mdW5jdGlvbiB3YShhLGIsYyl7dmFyIGQsZT17fSxmPW5ldyBMZS5QYXJzZXIoYSxiKSxnPWYucGFyc2VDYXJkOCgpO2lmKDA9PT1nKWZvcih2YXIgaD1mLnBhcnNlQ2FyZDgoKSxpPTA7aTxoO2krPTEpZD1mLnBhcnNlQ2FyZDgoKSxlW2RdPWk7ZWxzZXtpZigxIT09Zyl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGVuY29kaW5nIGZvcm1hdCBcIitnKTt2YXIgaj1mLnBhcnNlQ2FyZDgoKTtkPTE7Zm9yKHZhciBrPTA7azxqO2srPTEpZm9yKHZhciBsPWYucGFyc2VDYXJkOCgpLG09Zi5wYXJzZUNhcmQ4KCksbj1sO248PWwrbTtuKz0xKWVbbl09ZCxkKz0xfXJldHVybiBuZXcgWihlLGMpfWZ1bmN0aW9uIHhhKGEsYixjKXtmdW5jdGlvbiBkKGEsYil7dCYmby5jbG9zZVBhdGgoKSxvLm1vdmVUbyhhLGIpLHQ9ITB9ZnVuY3Rpb24gZSgpe3ZhciBhO2E9cC5sZW5ndGglMiE9MCxhJiYhcyYmKHk9cC5zaGlmdCgpK24pLHErPXAubGVuZ3RoPj4xLHAubGVuZ3RoPTAscz0hMH1mdW5jdGlvbiBmKGMpe2Zvcih2YXIgbSxyLHcseCx6LEEsQixDLEQsRSxGLEcsSD0wO0g8Yy5sZW5ndGg7KXt2YXIgST1jW0hdO3N3aXRjaChIKz0xLEkpe2Nhc2UgMTpjYXNlIDM6ZSgpO2JyZWFrO2Nhc2UgNDpwLmxlbmd0aD4xJiYhcyYmKHk9cC5zaGlmdCgpK24scz0hMCksdis9cC5wb3AoKSxkKHUsdik7YnJlYWs7Y2FzZSA1OmZvcig7cC5sZW5ndGg+MDspdSs9cC5zaGlmdCgpLHYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2JyZWFrO2Nhc2UgNjpmb3IoO3AubGVuZ3RoPjAmJih1Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KSwwIT09cC5sZW5ndGgpOyl2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTticmVhaztjYXNlIDc6Zm9yKDtwLmxlbmd0aD4wJiYodis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdiksMCE9PXAubGVuZ3RoKTspdSs9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7YnJlYWs7Y2FzZSA4OmZvcig7cC5sZW5ndGg+MDspZz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxcbnU9aStwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMTA6ej1wLnBvcCgpK2wsQT1rW3pdLEEmJmYoQSk7YnJlYWs7Y2FzZSAxMTpyZXR1cm47Y2FzZSAxMjpzd2l0Y2goST1jW0hdLEgrPTEsSSl7Y2FzZSAzNTpnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLEI9aStwLnNoaWZ0KCksQz1qK3Auc2hpZnQoKSxEPUIrcC5zaGlmdCgpLEU9QytwLnNoaWZ0KCksRj1EK3Auc2hpZnQoKSxHPUUrcC5zaGlmdCgpLHU9RitwLnNoaWZ0KCksdj1HK3Auc2hpZnQoKSxwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosQixDKSxvLmN1cnZlVG8oRCxFLEYsRyx1LHYpO2JyZWFrO2Nhc2UgMzQ6Zz11K3Auc2hpZnQoKSxoPXYsaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLEI9aStwLnNoaWZ0KCksQz1qLEQ9QitwLnNoaWZ0KCksRT1qLEY9RCtwLnNoaWZ0KCksRz12LHU9RitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosQixDKSxvLmN1cnZlVG8oRCxFLEYsRyx1LHYpO2JyZWFrO2Nhc2UgMzY6Zz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxCPWkrcC5zaGlmdCgpLEM9aixEPUIrcC5zaGlmdCgpLEU9aixGPUQrcC5zaGlmdCgpLEc9RStwLnNoaWZ0KCksdT1GK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaixCLEMpLG8uY3VydmVUbyhELEUsRixHLHUsdik7YnJlYWs7Y2FzZSAzNzpnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLEI9aStwLnNoaWZ0KCksQz1qK3Auc2hpZnQoKSxEPUIrcC5zaGlmdCgpLEU9QytwLnNoaWZ0KCksRj1EK3Auc2hpZnQoKSxHPUUrcC5zaGlmdCgpLE1hdGguYWJzKEYtdSk+TWF0aC5hYnMoRy12KT91PUYrcC5zaGlmdCgpOnY9RytwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosQixDKSxvLmN1cnZlVG8oRCxFLEYsRyx1LHYpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5sb2coXCJHbHlwaCBcIitiLmluZGV4K1wiOiB1bmtub3duIG9wZXJhdG9yIDEyMDBcIitJKSxwLmxlbmd0aD0wfWJyZWFrO2Nhc2UgMTQ6cC5sZW5ndGg+MCYmIXMmJih5PXAuc2hpZnQoKStuLHM9ITApLHQmJihvLmNsb3NlUGF0aCgpLHQ9ITEpO2JyZWFrO2Nhc2UgMTg6ZSgpO2JyZWFrO2Nhc2UgMTk6Y2FzZSAyMDplKCksSCs9cSs3Pj4zO2JyZWFrO2Nhc2UgMjE6cC5sZW5ndGg+MiYmIXMmJih5PXAuc2hpZnQoKStuLHM9ITApLHYrPXAucG9wKCksdSs9cC5wb3AoKSxkKHUsdik7YnJlYWs7Y2FzZSAyMjpwLmxlbmd0aD4xJiYhcyYmKHk9cC5zaGlmdCgpK24scz0hMCksdSs9cC5wb3AoKSxkKHUsdik7YnJlYWs7Y2FzZSAyMzplKCk7YnJlYWs7Y2FzZSAyNDpmb3IoO3AubGVuZ3RoPjI7KWc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7dSs9cC5zaGlmdCgpLHYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2JyZWFrO2Nhc2UgMjU6Zm9yKDtwLmxlbmd0aD42Oyl1Kz1wLnNoaWZ0KCksdis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7Zz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztjYXNlIDI2OmZvcihwLmxlbmd0aCUyJiYodSs9cC5zaGlmdCgpKTtwLmxlbmd0aD4wOylnPXUsaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pLHY9aitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztjYXNlIDI3OmZvcihwLmxlbmd0aCUyJiYodis9cC5zaGlmdCgpKTtwLmxlbmd0aD4wOylnPXUrcC5zaGlmdCgpLGg9dixpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWosby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztjYXNlIDI4Om09Y1tIXSxyPWNbSCsxXSxwLnB1c2goKG08PDI0fHI8PDE2KT4+MTYpLEgrPTI7YnJlYWs7Y2FzZSAyOTp6PXAucG9wKCkrYS5nc3VicnNCaWFzLEE9YS5nc3VicnNbel0sQSYmZihBKTticmVhaztjYXNlIDMwOmZvcig7cC5sZW5ndGg+MCYmKGc9dSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aisoMT09PXAubGVuZ3RoP3Auc2hpZnQoKTowKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpLDAhPT1wLmxlbmd0aCk7KWc9dStwLnNoaWZ0KCksaD12LGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLHU9aSsoMT09PXAubGVuZ3RoP3Auc2hpZnQoKTowKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMzE6Zm9yKDtwLmxlbmd0aD4wJiYoZz11K3Auc2hpZnQoKSxoPXYsaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksdT1pKygxPT09cC5sZW5ndGg/cC5zaGlmdCgpOjApLG8uY3VydmVUbyhnLGgsaSxqLHUsdiksMCE9PXAubGVuZ3RoKTspZz11LGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qKygxPT09cC5sZW5ndGg/cC5zaGlmdCgpOjApLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7ZGVmYXVsdDpJPDMyP2NvbnNvbGUubG9nKFwiR2x5cGggXCIrYi5pbmRleCtcIjogdW5rbm93biBvcGVyYXRvciBcIitJKTpJPDI0Nz9wLnB1c2goSS0xMzkpOkk8MjUxPyhtPWNbSF0sSCs9MSxwLnB1c2goMjU2KihJLTI0NykrbSsxMDgpKTpJPDI1NT8obT1jW0hdLEgrPTEscC5wdXNoKDI1NiotKEktMjUxKS1tLTEwOCkpOihtPWNbSF0scj1jW0grMV0sdz1jW0grMl0seD1jW0grM10sSCs9NCxwLnB1c2goKG08PDI0fHI8PDE2fHc8PDh8eCkvNjU1MzYpKX19fXZhciBnLGgsaSxqLGssbCxtLG4sbz1uZXcgcixwPVtdLHE9MCxzPSExLHQ9ITEsdT0wLHY9MDtpZihhLmlzQ0lERm9udCl7dmFyIHc9YS50YWJsZXMuY2ZmLnRvcERpY3QuX2ZkU2VsZWN0W2IuaW5kZXhdLHg9YS50YWJsZXMuY2ZmLnRvcERpY3QuX2ZkQXJyYXlbd107az14Ll9zdWJycyxsPXguX3N1YnJzQmlhcyxtPXguX2RlZmF1bHRXaWR0aFgsbj14Ll9ub21pbmFsV2lkdGhYfWVsc2Ugaz1hLnRhYmxlcy5jZmYudG9wRGljdC5fc3VicnMsbD1hLnRhYmxlcy5jZmYudG9wRGljdC5fc3VicnNCaWFzLG09YS50YWJsZXMuY2ZmLnRvcERpY3QuX2RlZmF1bHRXaWR0aFgsbj1hLnRhYmxlcy5jZmYudG9wRGljdC5fbm9taW5hbFdpZHRoWDt2YXIgeT1tO3JldHVybiBmKGMpLGIuYWR2YW5jZVdpZHRoPXksb31mdW5jdGlvbiB5YShhLGIsYyxkKXt2YXIgZSxmPVtdLGc9bmV3IExlLlBhcnNlcihhLGIpLGg9Zy5wYXJzZUNhcmQ4KCk7aWYoMD09PWgpZm9yKHZhciBpPTA7aTxjO2krKyl7aWYoKGU9Zy5wYXJzZUNhcmQ4KCkpPj1kKXRocm93IG5ldyBFcnJvcihcIkNGRiB0YWJsZSBDSUQgRm9udCBGRFNlbGVjdCBoYXMgYmFkIEZEIGluZGV4IHZhbHVlIFwiK2UrXCIgKEZEIGNvdW50IFwiK2QrXCIpXCIpO2YucHVzaChlKX1lbHNle2lmKDMhPT1oKXRocm93IG5ldyBFcnJvcihcIkNGRiBUYWJsZSBDSUQgRm9udCBGRFNlbGVjdCB0YWJsZSBoYXMgdW5zdXBwb3J0ZWQgZm9ybWF0IFwiK2gpO3ZhciBqPWcucGFyc2VDYXJkMTYoKSxrPWcucGFyc2VDYXJkMTYoKTtpZigwIT09ayl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgVGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgZm9ybWF0IDMgcmFuZ2UgaGFzIGJhZCBpbml0aWFsIEdJRCBcIitrKTtmb3IodmFyIGwsbT0wO208ajttKyspe2lmKGU9Zy5wYXJzZUNhcmQ4KCksbD1nLnBhcnNlQ2FyZDE2KCksZT49ZCl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgdGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgaGFzIGJhZCBGRCBpbmRleCB2YWx1ZSBcIitlK1wiIChGRCBjb3VudCBcIitkK1wiKVwiKTtpZihsPmMpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIFRhYmxlIENJRCBGb250IEZEU2VsZWN0IGZvcm1hdCAzIHJhbmdlIGhhcyBiYWQgR0lEIFwiK2wpO2Zvcig7azxsO2srKylmLnB1c2goZSk7az1sfWlmKGwhPT1jKXRocm93IG5ldyBFcnJvcihcIkNGRiBUYWJsZSBDSUQgRm9udCBGRFNlbGVjdCBmb3JtYXQgMyByYW5nZSBoYXMgYmFkIGZpbmFsIEdJRCBcIitsKX1yZXR1cm4gZn1mdW5jdGlvbiB6YShhLGIsYyl7Yy50YWJsZXMuY2ZmPXt9O3ZhciBkPXJhKGEsYiksZT1rYShhLGQuZW5kT2Zmc2V0LExlLmJ5dGVzVG9TdHJpbmcpLGY9a2EoYSxlLmVuZE9mZnNldCksZz1rYShhLGYuZW5kT2Zmc2V0LExlLmJ5dGVzVG9TdHJpbmcpLGg9a2EoYSxnLmVuZE9mZnNldCk7Yy5nc3VicnM9aC5vYmplY3RzLGMuZ3N1YnJzQmlhcz1qYShjLmdzdWJycyk7dmFyIGk9dWEoYSxiLGYub2JqZWN0cyxnLm9iamVjdHMpO2lmKDEhPT1pLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgdGFibGUgaGFzIHRvbyBtYW55IGZvbnRzIGluICdGb250U2V0JyAtIGNvdW50IG9mIGZvbnRzIE5hbWVJbmRleC5sZW5ndGggPSBcIitpLmxlbmd0aCk7dmFyIGo9aVswXTtpZihjLnRhYmxlcy5jZmYudG9wRGljdD1qLGouX3ByaXZhdGVEaWN0JiYoYy5kZWZhdWx0V2lkdGhYPWouX3ByaXZhdGVEaWN0LmRlZmF1bHRXaWR0aFgsYy5ub21pbmFsV2lkdGhYPWouX3ByaXZhdGVEaWN0Lm5vbWluYWxXaWR0aFgpLHZvaWQgMCE9PWoucm9zWzBdJiZ2b2lkIDAhPT1qLnJvc1sxXSYmKGMuaXNDSURGb250PSEwKSxjLmlzQ0lERm9udCl7dmFyIGs9ai5mZEFycmF5LGw9ai5mZFNlbGVjdDtpZigwPT09a3x8MD09PWwpdGhyb3cgbmV3IEVycm9yKFwiRm9udCBpcyBtYXJrZWQgYXMgYSBDSUQgZm9udCwgYnV0IEZEQXJyYXkgYW5kL29yIEZEU2VsZWN0IGluZm9ybWF0aW9uIGlzIG1pc3NpbmdcIik7ays9Yjt2YXIgbT1rYShhLGspLG49dWEoYSxiLG0ub2JqZWN0cyxnLm9iamVjdHMpO2ouX2ZkQXJyYXk9bixsKz1iLGouX2ZkU2VsZWN0PXlhKGEsbCxjLm51bUdseXBocyxuLmxlbmd0aCl9dmFyIG89YitqLnByaXZhdGVbMV0scD10YShhLG8sai5wcml2YXRlWzBdLGcub2JqZWN0cyk7aWYoYy5kZWZhdWx0V2lkdGhYPXAuZGVmYXVsdFdpZHRoWCxjLm5vbWluYWxXaWR0aFg9cC5ub21pbmFsV2lkdGhYLDAhPT1wLnN1YnJzKXt2YXIgcT1vK3Auc3VicnMscj1rYShhLHEpO2Muc3VicnM9ci5vYmplY3RzLGMuc3VicnNCaWFzPWphKGMuc3VicnMpfWVsc2UgYy5zdWJycz1bXSxjLnN1YnJzQmlhcz0wO3ZhciBzPWthKGEsYitqLmNoYXJTdHJpbmdzKTtjLm5HbHlwaHM9cy5vYmplY3RzLmxlbmd0aDt2YXIgdD12YShhLGIrai5jaGFyc2V0LGMubkdseXBocyxnLm9iamVjdHMpOzA9PT1qLmVuY29kaW5nP2MuY2ZmRW5jb2Rpbmc9bmV3IFooT2UsdCk6MT09PWouZW5jb2Rpbmc/Yy5jZmZFbmNvZGluZz1uZXcgWihQZSx0KTpjLmNmZkVuY29kaW5nPXdhKGEsYitqLmVuY29kaW5nLHQpLGMuZW5jb2Rpbmc9Yy5lbmNvZGluZ3x8Yy5jZmZFbmNvZGluZyxjLmdseXBocz1uZXcgU2UuR2x5cGhTZXQoYyk7Zm9yKHZhciB1PTA7dTxjLm5HbHlwaHM7dSs9MSl7dmFyIHY9cy5vYmplY3RzW3VdO2MuZ2x5cGhzLnB1c2godSxTZS5jZmZHbHlwaExvYWRlcihjLHUseGEsdikpfX1mdW5jdGlvbiBBYShhLGIpe3ZhciBjLGQ9TmUuaW5kZXhPZihhKTtyZXR1cm4gZD49MCYmKGM9ZCksZD1iLmluZGV4T2YoYSksZD49MD9jPWQrTmUubGVuZ3RoOihjPU5lLmxlbmd0aCtiLmxlbmd0aCxiLnB1c2goYSkpLGN9ZnVuY3Rpb24gQmEoKXtyZXR1cm4gbmV3IEllLlJlY29yZChcIkhlYWRlclwiLFt7bmFtZTpcIm1ham9yXCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6MX0se25hbWU6XCJtaW5vclwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjB9LHtuYW1lOlwiaGRyU2l6ZVwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjR9LHtuYW1lOlwibWFqb3JcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZToxfV0pfWZ1bmN0aW9uIENhKGEpe3ZhciBiPW5ldyBJZS5SZWNvcmQoXCJOYW1lIElOREVYXCIsW3tuYW1lOlwibmFtZXNcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKTtiLm5hbWVzPVtdO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7Yys9MSliLm5hbWVzLnB1c2goe25hbWU6XCJuYW1lX1wiK2MsdHlwZTpcIk5BTUVcIix2YWx1ZTphW2NdfSk7cmV0dXJuIGJ9ZnVuY3Rpb24gRGEoYSxiLGMpe2Zvcih2YXIgZD17fSxlPTA7ZTxhLmxlbmd0aDtlKz0xKXt2YXIgZj1hW2VdLGc9YltmLm5hbWVdO3ZvaWQgMD09PWd8fGlhKGcsZi52YWx1ZSl8fChcIlNJRFwiPT09Zi50eXBlJiYoZz1BYShnLGMpKSxkW2Yub3BdPXtuYW1lOmYubmFtZSx0eXBlOmYudHlwZSx2YWx1ZTpnfSl9cmV0dXJuIGR9ZnVuY3Rpb24gRWEoYSxiKXt2YXIgYz1uZXcgSWUuUmVjb3JkKFwiVG9wIERJQ1RcIixbe25hbWU6XCJkaWN0XCIsdHlwZTpcIkRJQ1RcIix2YWx1ZTp7fX1dKTtyZXR1cm4gYy5kaWN0PURhKFRlLGEsYiksY31mdW5jdGlvbiBGYShhKXt2YXIgYj1uZXcgSWUuUmVjb3JkKFwiVG9wIERJQ1QgSU5ERVhcIixbe25hbWU6XCJ0b3BEaWN0c1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pO3JldHVybiBiLnRvcERpY3RzPVt7bmFtZTpcInRvcERpY3RfMFwiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOmF9XSxifWZ1bmN0aW9uIEdhKGEpe3ZhciBiPW5ldyBJZS5SZWNvcmQoXCJTdHJpbmcgSU5ERVhcIixbe25hbWU6XCJzdHJpbmdzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSk7Yi5zdHJpbmdzPVtdO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7Yys9MSliLnN0cmluZ3MucHVzaCh7bmFtZTpcInN0cmluZ19cIitjLHR5cGU6XCJTVFJJTkdcIix2YWx1ZTphW2NdfSk7cmV0dXJuIGJ9ZnVuY3Rpb24gSGEoKXtyZXR1cm4gbmV3IEllLlJlY29yZChcIkdsb2JhbCBTdWJyIElOREVYXCIsW3tuYW1lOlwic3VicnNcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKX1mdW5jdGlvbiBJYShhLGIpe2Zvcih2YXIgYz1uZXcgSWUuUmVjb3JkKFwiQ2hhcnNldHNcIixbe25hbWU6XCJmb3JtYXRcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZTowfV0pLGQ9MDtkPGEubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF0sZj1BYShlLGIpO2MuZmllbGRzLnB1c2goe25hbWU6XCJnbHlwaF9cIitkLHR5cGU6XCJTSURcIix2YWx1ZTpmfSl9cmV0dXJuIGN9ZnVuY3Rpb24gSmEoYSl7dmFyIGI9W10sYz1hLnBhdGg7Yi5wdXNoKHtuYW1lOlwid2lkdGhcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6YS5hZHZhbmNlV2lkdGh9KTtmb3IodmFyIGQ9MCxlPTAsZj0wO2Y8Yy5jb21tYW5kcy5sZW5ndGg7Zis9MSl7dmFyIGc9dm9pZCAwLGg9dm9pZCAwLGk9Yy5jb21tYW5kc1tmXTtpZihcIlFcIj09PWkudHlwZSl7dmFyIGo9MS8zLGs9Mi8zO2k9e3R5cGU6XCJDXCIseDppLngseTppLnkseDE6aipkK2sqaS54MSx5MTpqKmUrayppLnkxLHgyOmoqaS54K2sqaS54MSx5MjpqKmkueStrKmkueTF9fWlmKFwiTVwiPT09aS50eXBlKWc9TWF0aC5yb3VuZChpLngtZCksaD1NYXRoLnJvdW5kKGkueS1lKSxiLnB1c2goe25hbWU6XCJkeFwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpnfSksYi5wdXNoKHtuYW1lOlwiZHlcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6aH0pLGIucHVzaCh7bmFtZTpcInJtb3ZldG9cIix0eXBlOlwiT1BcIix2YWx1ZToyMX0pLGQ9TWF0aC5yb3VuZChpLngpLGU9TWF0aC5yb3VuZChpLnkpO2Vsc2UgaWYoXCJMXCI9PT1pLnR5cGUpZz1NYXRoLnJvdW5kKGkueC1kKSxoPU1hdGgucm91bmQoaS55LWUpLGIucHVzaCh7bmFtZTpcImR4XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmd9KSxiLnB1c2goe25hbWU6XCJkeVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpofSksYi5wdXNoKHtuYW1lOlwicmxpbmV0b1wiLHR5cGU6XCJPUFwiLHZhbHVlOjV9KSxkPU1hdGgucm91bmQoaS54KSxlPU1hdGgucm91bmQoaS55KTtlbHNlIGlmKFwiQ1wiPT09aS50eXBlKXt2YXIgbD1NYXRoLnJvdW5kKGkueDEtZCksbT1NYXRoLnJvdW5kKGkueTEtZSksbj1NYXRoLnJvdW5kKGkueDItaS54MSksbz1NYXRoLnJvdW5kKGkueTItaS55MSk7Zz1NYXRoLnJvdW5kKGkueC1pLngyKSxoPU1hdGgucm91bmQoaS55LWkueTIpLGIucHVzaCh7bmFtZTpcImR4MVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpsfSksYi5wdXNoKHtuYW1lOlwiZHkxXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOm19KSxiLnB1c2goe25hbWU6XCJkeDJcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6bn0pLGIucHVzaCh7bmFtZTpcImR5MlwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpvfSksYi5wdXNoKHtuYW1lOlwiZHhcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6Z30pLGIucHVzaCh7bmFtZTpcImR5XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmh9KSxiLnB1c2goe25hbWU6XCJycmN1cnZldG9cIix0eXBlOlwiT1BcIix2YWx1ZTo4fSksZD1NYXRoLnJvdW5kKGkueCksZT1NYXRoLnJvdW5kKGkueSl9fXJldHVybiBiLnB1c2goe25hbWU6XCJlbmRjaGFyXCIsdHlwZTpcIk9QXCIsdmFsdWU6MTR9KSxifWZ1bmN0aW9uIEthKGEpe2Zvcih2YXIgYj1uZXcgSWUuUmVjb3JkKFwiQ2hhclN0cmluZ3MgSU5ERVhcIixbe25hbWU6XCJjaGFyU3RyaW5nc1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pLGM9MDtjPGEubGVuZ3RoO2MrPTEpe3ZhciBkPWEuZ2V0KGMpLGU9SmEoZCk7Yi5jaGFyU3RyaW5ncy5wdXNoKHtuYW1lOmQubmFtZSx0eXBlOlwiQ0hBUlNUUklOR1wiLHZhbHVlOmV9KX1yZXR1cm4gYn1mdW5jdGlvbiBMYShhLGIpe3ZhciBjPW5ldyBJZS5SZWNvcmQoXCJQcml2YXRlIERJQ1RcIixbe25hbWU6XCJkaWN0XCIsdHlwZTpcIkRJQ1RcIix2YWx1ZTp7fX1dKTtyZXR1cm4gYy5kaWN0PURhKFVlLGEsYiksY31mdW5jdGlvbiBNYShhLGIpe2Zvcih2YXIgYyxkPW5ldyBJZS5UYWJsZShcIkNGRiBcIixbe25hbWU6XCJoZWFkZXJcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwibmFtZUluZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcInRvcERpY3RJbmRleFwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJzdHJpbmdJbmRleFwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJnbG9iYWxTdWJySW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwiY2hhcnNldHNcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwiY2hhclN0cmluZ3NJbmRleFwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJwcml2YXRlRGljdFwiLHR5cGU6XCJSRUNPUkRcIn1dKSxlPTEvYi51bml0c1BlckVtLGY9e3ZlcnNpb246Yi52ZXJzaW9uLGZ1bGxOYW1lOmIuZnVsbE5hbWUsZmFtaWx5TmFtZTpiLmZhbWlseU5hbWUsd2VpZ2h0OmIud2VpZ2h0TmFtZSxmb250QkJveDpiLmZvbnRCQm94fHxbMCwwLDAsMF0sZm9udE1hdHJpeDpbZSwwLDAsZSwwLDBdLGNoYXJzZXQ6OTk5LGVuY29kaW5nOjAsY2hhclN0cmluZ3M6OTk5LHByaXZhdGU6WzAsOTk5XX0sZz17fSxoPVtdLGk9MTtpPGEubGVuZ3RoO2krPTEpYz1hLmdldChpKSxoLnB1c2goYy5uYW1lKTt2YXIgaj1bXTtkLmhlYWRlcj1CYSgpLGQubmFtZUluZGV4PUNhKFtiLnBvc3RTY3JpcHROYW1lXSk7dmFyIGs9RWEoZixqKTtkLnRvcERpY3RJbmRleD1GYShrKSxkLmdsb2JhbFN1YnJJbmRleD1IYSgpLGQuY2hhcnNldHM9SWEoaCxqKSxkLmNoYXJTdHJpbmdzSW5kZXg9S2EoYSksZC5wcml2YXRlRGljdD1MYShnLGopLGQuc3RyaW5nSW5kZXg9R2Eoaik7dmFyIGw9ZC5oZWFkZXIuc2l6ZU9mKCkrZC5uYW1lSW5kZXguc2l6ZU9mKCkrZC50b3BEaWN0SW5kZXguc2l6ZU9mKCkrZC5zdHJpbmdJbmRleC5zaXplT2YoKStkLmdsb2JhbFN1YnJJbmRleC5zaXplT2YoKTtyZXR1cm4gZi5jaGFyc2V0PWwsZi5lbmNvZGluZz0wLGYuY2hhclN0cmluZ3M9Zi5jaGFyc2V0K2QuY2hhcnNldHMuc2l6ZU9mKCksZi5wcml2YXRlWzFdPWYuY2hhclN0cmluZ3MrZC5jaGFyU3RyaW5nc0luZGV4LnNpemVPZigpLGs9RWEoZixqKSxkLnRvcERpY3RJbmRleD1GYShrKSxkfWZ1bmN0aW9uIE5hKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7cmV0dXJuIGMudmVyc2lvbj1kLnBhcnNlVmVyc2lvbigpLGMuZm9udFJldmlzaW9uPU1hdGgucm91bmQoMWUzKmQucGFyc2VGaXhlZCgpKS8xZTMsYy5jaGVja1N1bUFkanVzdG1lbnQ9ZC5wYXJzZVVMb25nKCksYy5tYWdpY051bWJlcj1kLnBhcnNlVUxvbmcoKSx4ZS5hcmd1bWVudCgxNTk0ODM0MTY1PT09Yy5tYWdpY051bWJlcixcIkZvbnQgaGVhZGVyIGhhcyB3cm9uZyBtYWdpYyBudW1iZXIuXCIpLGMuZmxhZ3M9ZC5wYXJzZVVTaG9ydCgpLGMudW5pdHNQZXJFbT1kLnBhcnNlVVNob3J0KCksYy5jcmVhdGVkPWQucGFyc2VMb25nRGF0ZVRpbWUoKSxjLm1vZGlmaWVkPWQucGFyc2VMb25nRGF0ZVRpbWUoKSxjLnhNaW49ZC5wYXJzZVNob3J0KCksYy55TWluPWQucGFyc2VTaG9ydCgpLGMueE1heD1kLnBhcnNlU2hvcnQoKSxjLnlNYXg9ZC5wYXJzZVNob3J0KCksYy5tYWNTdHlsZT1kLnBhcnNlVVNob3J0KCksYy5sb3dlc3RSZWNQUEVNPWQucGFyc2VVU2hvcnQoKSxjLmZvbnREaXJlY3Rpb25IaW50PWQucGFyc2VTaG9ydCgpLGMuaW5kZXhUb0xvY0Zvcm1hdD1kLnBhcnNlU2hvcnQoKSxjLmdseXBoRGF0YUZvcm1hdD1kLnBhcnNlU2hvcnQoKSxjfWZ1bmN0aW9uIE9hKGEpe3ZhciBiPU1hdGgucm91bmQoKG5ldyBEYXRlKS5nZXRUaW1lKCkvMWUzKSsyMDgyODQ0ODAwLGM9YjtyZXR1cm4gYS5jcmVhdGVkVGltZXN0YW1wJiYoYz1hLmNyZWF0ZWRUaW1lc3RhbXArMjA4Mjg0NDgwMCksbmV3IEllLlRhYmxlKFwiaGVhZFwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiRklYRURcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJmb250UmV2aXNpb25cIix0eXBlOlwiRklYRURcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJjaGVja1N1bUFkanVzdG1lbnRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1hZ2ljTnVtYmVyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MTU5NDgzNDE2NX0se25hbWU6XCJmbGFnc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVuaXRzUGVyRW1cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MWUzfSx7bmFtZTpcImNyZWF0ZWRcIix0eXBlOlwiTE9OR0RBVEVUSU1FXCIsdmFsdWU6Y30se25hbWU6XCJtb2RpZmllZFwiLHR5cGU6XCJMT05HREFURVRJTUVcIix2YWx1ZTpifSx7bmFtZTpcInhNaW5cIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInlNaW5cIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInhNYXhcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInlNYXhcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcIm1hY1N0eWxlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibG93ZXN0UmVjUFBFTVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImZvbnREaXJlY3Rpb25IaW50XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6Mn0se25hbWU6XCJpbmRleFRvTG9jRm9ybWF0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJnbHlwaERhdGFGb3JtYXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfV0sYSl9ZnVuY3Rpb24gUGEoYSxiKXt2YXIgYz17fSxkPW5ldyBMZS5QYXJzZXIoYSxiKTtyZXR1cm4gYy52ZXJzaW9uPWQucGFyc2VWZXJzaW9uKCksYy5hc2NlbmRlcj1kLnBhcnNlU2hvcnQoKSxjLmRlc2NlbmRlcj1kLnBhcnNlU2hvcnQoKSxjLmxpbmVHYXA9ZC5wYXJzZVNob3J0KCksYy5hZHZhbmNlV2lkdGhNYXg9ZC5wYXJzZVVTaG9ydCgpLGMubWluTGVmdFNpZGVCZWFyaW5nPWQucGFyc2VTaG9ydCgpLGMubWluUmlnaHRTaWRlQmVhcmluZz1kLnBhcnNlU2hvcnQoKSxjLnhNYXhFeHRlbnQ9ZC5wYXJzZVNob3J0KCksYy5jYXJldFNsb3BlUmlzZT1kLnBhcnNlU2hvcnQoKSxjLmNhcmV0U2xvcGVSdW49ZC5wYXJzZVNob3J0KCksYy5jYXJldE9mZnNldD1kLnBhcnNlU2hvcnQoKSxkLnJlbGF0aXZlT2Zmc2V0Kz04LGMubWV0cmljRGF0YUZvcm1hdD1kLnBhcnNlU2hvcnQoKSxjLm51bWJlck9mSE1ldHJpY3M9ZC5wYXJzZVVTaG9ydCgpLGN9ZnVuY3Rpb24gUWEoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcImhoZWFcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwiYXNjZW5kZXJcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImRlc2NlbmRlclwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwibGluZUdhcFwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwiYWR2YW5jZVdpZHRoTWF4XCIsdHlwZTpcIlVGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwibWluTGVmdFNpZGVCZWFyaW5nXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJtaW5SaWdodFNpZGVCZWFyaW5nXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJ4TWF4RXh0ZW50XCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJjYXJldFNsb3BlUmlzZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwiY2FyZXRTbG9wZVJ1blwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiY2FyZXRPZmZzZXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlc2VydmVkMVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVzZXJ2ZWQyXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXNlcnZlZDNcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlc2VydmVkNFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibWV0cmljRGF0YUZvcm1hdFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibnVtYmVyT2ZITWV0cmljc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfV0sYSl9ZnVuY3Rpb24gUmEoYSxiLGMsZCxlKXtmb3IodmFyIGYsZyxoPW5ldyBMZS5QYXJzZXIoYSxiKSxpPTA7aTxkO2krPTEpe2k8YyYmKGY9aC5wYXJzZVVTaG9ydCgpLGc9aC5wYXJzZVNob3J0KCkpO3ZhciBqPWUuZ2V0KGkpO2ouYWR2YW5jZVdpZHRoPWYsai5sZWZ0U2lkZUJlYXJpbmc9Z319ZnVuY3Rpb24gU2EoYSl7Zm9yKHZhciBiPW5ldyBJZS5UYWJsZShcImhtdHhcIixbXSksYz0wO2M8YS5sZW5ndGg7Yys9MSl7dmFyIGQ9YS5nZXQoYyksZT1kLmFkdmFuY2VXaWR0aHx8MCxmPWQubGVmdFNpZGVCZWFyaW5nfHwwO2IuZmllbGRzLnB1c2goe25hbWU6XCJhZHZhbmNlV2lkdGhfXCIrYyx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZX0pLGIuZmllbGRzLnB1c2goe25hbWU6XCJsZWZ0U2lkZUJlYXJpbmdfXCIrYyx0eXBlOlwiU0hPUlRcIix2YWx1ZTpmfSl9cmV0dXJuIGJ9ZnVuY3Rpb24gVGEoYSl7Zm9yKHZhciBiPW5ldyBJZS5UYWJsZShcImx0YWdcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MX0se25hbWU6XCJmbGFnc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibnVtVGFnc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmEubGVuZ3RofV0pLGM9XCJcIixkPTEyKzQqYS5sZW5ndGgsZT0wO2U8YS5sZW5ndGg7KytlKXt2YXIgZj1jLmluZGV4T2YoYVtlXSk7ZjwwJiYoZj1jLmxlbmd0aCxjKz1hW2VdKSxiLmZpZWxkcy5wdXNoKHtuYW1lOlwib2Zmc2V0IFwiK2UsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmQrZn0pLGIuZmllbGRzLnB1c2goe25hbWU6XCJsZW5ndGggXCIrZSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YVtlXS5sZW5ndGh9KX1yZXR1cm4gYi5maWVsZHMucHVzaCh7bmFtZTpcInN0cmluZ1Bvb2xcIix0eXBlOlwiQ0hBUkFSUkFZXCIsdmFsdWU6Y30pLGJ9ZnVuY3Rpb24gVWEoYSxiKXt2YXIgYz1uZXcgTGUuUGFyc2VyKGEsYiksZD1jLnBhcnNlVUxvbmcoKTt4ZS5hcmd1bWVudCgxPT09ZCxcIlVuc3VwcG9ydGVkIGx0YWcgdGFibGUgdmVyc2lvbi5cIiksYy5za2lwKFwidUxvbmdcIiwxKTtmb3IodmFyIGU9Yy5wYXJzZVVMb25nKCksZj1bXSxnPTA7ZzxlO2crKyl7Zm9yKHZhciBoPVwiXCIsaT1iK2MucGFyc2VVU2hvcnQoKSxqPWMucGFyc2VVU2hvcnQoKSxrPWk7azxpK2o7KytrKWgrPVN0cmluZy5mcm9tQ2hhckNvZGUoYS5nZXRJbnQ4KGspKTtmLnB1c2goaCl9cmV0dXJuIGZ9ZnVuY3Rpb24gVmEoYSxiKXt2YXIgYz17fSxkPW5ldyBMZS5QYXJzZXIoYSxiKTtyZXR1cm4gYy52ZXJzaW9uPWQucGFyc2VWZXJzaW9uKCksYy5udW1HbHlwaHM9ZC5wYXJzZVVTaG9ydCgpLDE9PT1jLnZlcnNpb24mJihjLm1heFBvaW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb250b3Vycz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb21wb3NpdGVQb2ludHM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29tcG9zaXRlQ29udG91cnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Wm9uZXM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4VHdpbGlnaHRQb2ludHM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4U3RvcmFnZT1kLnBhcnNlVVNob3J0KCksYy5tYXhGdW5jdGlvbkRlZnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4SW5zdHJ1Y3Rpb25EZWZzPWQucGFyc2VVU2hvcnQoKSxjLm1heFN0YWNrRWxlbWVudHM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbXBvbmVudEVsZW1lbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbXBvbmVudERlcHRoPWQucGFyc2VVU2hvcnQoKSksY31mdW5jdGlvbiBXYShhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwibWF4cFwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiRklYRURcIix2YWx1ZToyMDQ4MH0se25hbWU6XCJudW1HbHlwaHNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YX1dKX1mdW5jdGlvbiBYYShhLGIsYyl7c3dpdGNoKGEpe2Nhc2UgMDppZig2NTUzNT09PWIpcmV0dXJuXCJ1bmRcIjtpZihjKXJldHVybiBjW2JdO2JyZWFrO2Nhc2UgMTpyZXR1cm4gYWZbYl07Y2FzZSAzOnJldHVybiBjZltiXX19ZnVuY3Rpb24gWWEoYSxiLGMpe3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIGRmO2Nhc2UgMTpyZXR1cm4gZmZbY118fGVmW2JdO2Nhc2UgMzppZigxPT09Ynx8MTA9PT1iKXJldHVybiBkZn19ZnVuY3Rpb24gWmEoYSxiLGMpe2Zvcih2YXIgZD17fSxlPW5ldyBMZS5QYXJzZXIoYSxiKSxmPWUucGFyc2VVU2hvcnQoKSxnPWUucGFyc2VVU2hvcnQoKSxoPWUub2Zmc2V0K2UucGFyc2VVU2hvcnQoKSxpPTA7aTxnO2krKyl7dmFyIGo9ZS5wYXJzZVVTaG9ydCgpLGs9ZS5wYXJzZVVTaG9ydCgpLGw9ZS5wYXJzZVVTaG9ydCgpLG09ZS5wYXJzZVVTaG9ydCgpLG49X2VbbV18fG0sbz1lLnBhcnNlVVNob3J0KCkscD1lLnBhcnNlVVNob3J0KCkscT1YYShqLGwsYykscj1ZYShqLGssbCk7aWYodm9pZCAwIT09ciYmdm9pZCAwIT09cSl7dmFyIHM9dm9pZCAwO2lmKHM9cj09PWRmP0FlLlVURjE2KGEsaCtwLG8pOkFlLk1BQ1NUUklORyhhLGgrcCxvLHIpKXt2YXIgdD1kW25dO3ZvaWQgMD09PXQmJih0PWRbbl09e30pLHRbcV09c319fXJldHVybiAxPT09ZiYmZS5wYXJzZVVTaG9ydCgpLGR9ZnVuY3Rpb24gJGEoYSl7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYlthW2NdXT1wYXJzZUludChjKTtyZXR1cm4gYn1mdW5jdGlvbiBfYShhLGIsYyxkLGUsZil7cmV0dXJuIG5ldyBJZS5SZWNvcmQoXCJOYW1lUmVjb3JkXCIsW3tuYW1lOlwicGxhdGZvcm1JRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphfSx7bmFtZTpcImVuY29kaW5nSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Yn0se25hbWU6XCJsYW5ndWFnZUlEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmN9LHtuYW1lOlwibmFtZUlEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmR9LHtuYW1lOlwibGVuZ3RoXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmV9LHtuYW1lOlwib2Zmc2V0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmZ9XSl9ZnVuY3Rpb24gYWIoYSxiKXt2YXIgYz1hLmxlbmd0aCxkPWIubGVuZ3RoLWMrMTthOmZvcih2YXIgZT0wO2U8ZDtlKyspZm9yKDtlPGQ7ZSsrKXtmb3IodmFyIGY9MDtmPGM7ZisrKWlmKGJbZStmXSE9PWFbZl0pY29udGludWUgYTtyZXR1cm4gZX1yZXR1cm4tMX1mdW5jdGlvbiBiYihhLGIpe3ZhciBjPWFiKGEsYik7aWYoYzwwKXtjPWIubGVuZ3RoO2Zvcih2YXIgZD0wLGU9YS5sZW5ndGg7ZDxlOysrZCliLnB1c2goYVtkXSl9cmV0dXJuIGN9ZnVuY3Rpb24gY2IoYSxiKXt2YXIgYyxkPVtdLGU9e30sZj0kYShfZSk7Zm9yKHZhciBnIGluIGEpe3ZhciBoPWZbZ107aWYodm9pZCAwPT09aCYmKGg9ZyksYz1wYXJzZUludChoKSxpc05hTihjKSl0aHJvdyBuZXcgRXJyb3IoJ05hbWUgdGFibGUgZW50cnkgXCInK2crJ1wiIGRvZXMgbm90IGV4aXN0LCBzZWUgbmFtZVRhYmxlTmFtZXMgZm9yIGNvbXBsZXRlIGxpc3QuJyk7ZVtjXT1hW2ddLGQucHVzaChjKX1mb3IodmFyIGk9JGEoYWYpLGo9JGEoY2YpLGs9W10sbD1bXSxtPTA7bTxkLmxlbmd0aDttKyspe2M9ZFttXTt2YXIgbj1lW2NdO2Zvcih2YXIgbyBpbiBuKXt2YXIgcD1uW29dLHE9MSxyPWlbb10scz1iZltyXSx0PVlhKHEscyxyKSx1PUJlLk1BQ1NUUklORyhwLHQpO3ZvaWQgMD09PXUmJihxPTAscj1iLmluZGV4T2YobykscjwwJiYocj1iLmxlbmd0aCxiLnB1c2gobykpLHM9NCx1PUJlLlVURjE2KHApKTt2YXIgdj1iYih1LGwpO2sucHVzaChfYShxLHMscixjLHUubGVuZ3RoLHYpKTt2YXIgdz1qW29dO2lmKHZvaWQgMCE9PXcpe3ZhciB4PUJlLlVURjE2KHApLHk9YmIoeCxsKTtrLnB1c2goX2EoMywxLHcsYyx4Lmxlbmd0aCx5KSl9fX1rLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5wbGF0Zm9ybUlELWIucGxhdGZvcm1JRHx8YS5lbmNvZGluZ0lELWIuZW5jb2RpbmdJRHx8YS5sYW5ndWFnZUlELWIubGFuZ3VhZ2VJRHx8YS5uYW1lSUQtYi5uYW1lSUR9KTtmb3IodmFyIHo9bmV3IEllLlRhYmxlKFwibmFtZVwiLFt7bmFtZTpcImZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImNvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmsubGVuZ3RofSx7bmFtZTpcInN0cmluZ09mZnNldFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTo2KzEyKmsubGVuZ3RofV0pLEE9MDtBPGsubGVuZ3RoO0ErKyl6LmZpZWxkcy5wdXNoKHtuYW1lOlwicmVjb3JkX1wiK0EsdHlwZTpcIlJFQ09SRFwiLHZhbHVlOmtbQV19KTtyZXR1cm4gei5maWVsZHMucHVzaCh7bmFtZTpcInN0cmluZ3NcIix0eXBlOlwiTElURVJBTFwiLHZhbHVlOmx9KSx6fWZ1bmN0aW9uIGRiKGEpe2Zvcih2YXIgYj0wO2I8aGYubGVuZ3RoO2IrPTEpe3ZhciBjPWhmW2JdO2lmKGE+PWMuYmVnaW4mJmE8Yy5lbmQpcmV0dXJuIGJ9cmV0dXJuLTF9ZnVuY3Rpb24gZWIoYSxiKXt2YXIgYz17fSxkPW5ldyBMZS5QYXJzZXIoYSxiKTtjLnZlcnNpb249ZC5wYXJzZVVTaG9ydCgpLGMueEF2Z0NoYXJXaWR0aD1kLnBhcnNlU2hvcnQoKSxjLnVzV2VpZ2h0Q2xhc3M9ZC5wYXJzZVVTaG9ydCgpLGMudXNXaWR0aENsYXNzPWQucGFyc2VVU2hvcnQoKSxjLmZzVHlwZT1kLnBhcnNlVVNob3J0KCksYy55U3Vic2NyaXB0WFNpemU9ZC5wYXJzZVNob3J0KCksYy55U3Vic2NyaXB0WVNpemU9ZC5wYXJzZVNob3J0KCksYy55U3Vic2NyaXB0WE9mZnNldD1kLnBhcnNlU2hvcnQoKSxjLnlTdWJzY3JpcHRZT2Zmc2V0PWQucGFyc2VTaG9ydCgpLGMueVN1cGVyc2NyaXB0WFNpemU9ZC5wYXJzZVNob3J0KCksYy55U3VwZXJzY3JpcHRZU2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdXBlcnNjcmlwdFhPZmZzZXQ9ZC5wYXJzZVNob3J0KCksYy55U3VwZXJzY3JpcHRZT2Zmc2V0PWQucGFyc2VTaG9ydCgpLGMueVN0cmlrZW91dFNpemU9ZC5wYXJzZVNob3J0KCksYy55U3RyaWtlb3V0UG9zaXRpb249ZC5wYXJzZVNob3J0KCksYy5zRmFtaWx5Q2xhc3M9ZC5wYXJzZVNob3J0KCksYy5wYW5vc2U9W107Zm9yKHZhciBlPTA7ZTwxMDtlKyspYy5wYW5vc2VbZV09ZC5wYXJzZUJ5dGUoKTtyZXR1cm4gYy51bFVuaWNvZGVSYW5nZTE9ZC5wYXJzZVVMb25nKCksYy51bFVuaWNvZGVSYW5nZTI9ZC5wYXJzZVVMb25nKCksYy51bFVuaWNvZGVSYW5nZTM9ZC5wYXJzZVVMb25nKCksYy51bFVuaWNvZGVSYW5nZTQ9ZC5wYXJzZVVMb25nKCksYy5hY2hWZW5kSUQ9U3RyaW5nLmZyb21DaGFyQ29kZShkLnBhcnNlQnl0ZSgpLGQucGFyc2VCeXRlKCksZC5wYXJzZUJ5dGUoKSxkLnBhcnNlQnl0ZSgpKSxjLmZzU2VsZWN0aW9uPWQucGFyc2VVU2hvcnQoKSxjLnVzRmlyc3RDaGFySW5kZXg9ZC5wYXJzZVVTaG9ydCgpLGMudXNMYXN0Q2hhckluZGV4PWQucGFyc2VVU2hvcnQoKSxjLnNUeXBvQXNjZW5kZXI9ZC5wYXJzZVNob3J0KCksYy5zVHlwb0Rlc2NlbmRlcj1kLnBhcnNlU2hvcnQoKSxjLnNUeXBvTGluZUdhcD1kLnBhcnNlU2hvcnQoKSxjLnVzV2luQXNjZW50PWQucGFyc2VVU2hvcnQoKSxjLnVzV2luRGVzY2VudD1kLnBhcnNlVVNob3J0KCksYy52ZXJzaW9uPj0xJiYoYy51bENvZGVQYWdlUmFuZ2UxPWQucGFyc2VVTG9uZygpLGMudWxDb2RlUGFnZVJhbmdlMj1kLnBhcnNlVUxvbmcoKSksYy52ZXJzaW9uPj0yJiYoYy5zeEhlaWdodD1kLnBhcnNlU2hvcnQoKSxjLnNDYXBIZWlnaHQ9ZC5wYXJzZVNob3J0KCksYy51c0RlZmF1bHRDaGFyPWQucGFyc2VVU2hvcnQoKSxjLnVzQnJlYWtDaGFyPWQucGFyc2VVU2hvcnQoKSxjLnVzTWF4Q29udGVudD1kLnBhcnNlVVNob3J0KCkpLGN9ZnVuY3Rpb24gZmIoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcIk9TLzJcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjN9LHtuYW1lOlwieEF2Z0NoYXJXaWR0aFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNXZWlnaHRDbGFzc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzV2lkdGhDbGFzc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImZzVHlwZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInlTdWJzY3JpcHRYU2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjY1MH0se25hbWU6XCJ5U3Vic2NyaXB0WVNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo2OTl9LHtuYW1lOlwieVN1YnNjcmlwdFhPZmZzZXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInlTdWJzY3JpcHRZT2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MTQwfSx7bmFtZTpcInlTdXBlcnNjcmlwdFhTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6NjUwfSx7bmFtZTpcInlTdXBlcnNjcmlwdFlTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6Njk5fSx7bmFtZTpcInlTdXBlcnNjcmlwdFhPZmZzZXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInlTdXBlcnNjcmlwdFlPZmZzZXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo0Nzl9LHtuYW1lOlwieVN0cmlrZW91dFNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo0OX0se25hbWU6XCJ5U3RyaWtlb3V0UG9zaXRpb25cIix0eXBlOlwiU0hPUlRcIix2YWx1ZToyNTh9LHtuYW1lOlwic0ZhbWlseUNsYXNzXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJiRmFtaWx5VHlwZVwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiU2VyaWZTdHlsZVwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiV2VpZ2h0XCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJQcm9wb3J0aW9uXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJDb250cmFzdFwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiU3Ryb2tlVmFyaWF0aW9uXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJBcm1TdHlsZVwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiTGV0dGVyZm9ybVwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiTWlkbGluZVwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiWEhlaWdodFwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJ1bFVuaWNvZGVSYW5nZTFcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcInVsVW5pY29kZVJhbmdlMlwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwidWxVbmljb2RlUmFuZ2UzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJ1bFVuaWNvZGVSYW5nZTRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcImFjaFZlbmRJRFwiLHR5cGU6XCJDSEFSQVJSQVlcIix2YWx1ZTpcIlhYWFhcIn0se25hbWU6XCJmc1NlbGVjdGlvblwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzRmlyc3RDaGFySW5kZXhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c0xhc3RDaGFySW5kZXhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzVHlwb0FzY2VuZGVyXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzVHlwb0Rlc2NlbmRlclwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic1R5cG9MaW5lR2FwXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c1dpbkFzY2VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzV2luRGVzY2VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVsQ29kZVBhZ2VSYW5nZTFcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcInVsQ29kZVBhZ2VSYW5nZTJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcInN4SGVpZ2h0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzQ2FwSGVpZ2h0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c0RlZmF1bHRDaGFyXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNCcmVha0NoYXJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c01heENvbnRleHRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dLGEpfWZ1bmN0aW9uIGdiKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7c3dpdGNoKGMudmVyc2lvbj1kLnBhcnNlVmVyc2lvbigpLGMuaXRhbGljQW5nbGU9ZC5wYXJzZUZpeGVkKCksYy51bmRlcmxpbmVQb3NpdGlvbj1kLnBhcnNlU2hvcnQoKSxjLnVuZGVybGluZVRoaWNrbmVzcz1kLnBhcnNlU2hvcnQoKSxjLmlzRml4ZWRQaXRjaD1kLnBhcnNlVUxvbmcoKSxjLm1pbk1lbVR5cGU0Mj1kLnBhcnNlVUxvbmcoKSxjLm1heE1lbVR5cGU0Mj1kLnBhcnNlVUxvbmcoKSxjLm1pbk1lbVR5cGUxPWQucGFyc2VVTG9uZygpLGMubWF4TWVtVHlwZTE9ZC5wYXJzZVVMb25nKCksYy52ZXJzaW9uKXtjYXNlIDE6Yy5uYW1lcz1RZS5zbGljZSgpO2JyZWFrO2Nhc2UgMjpjLm51bWJlck9mR2x5cGhzPWQucGFyc2VVU2hvcnQoKSxjLmdseXBoTmFtZUluZGV4PW5ldyBBcnJheShjLm51bWJlck9mR2x5cGhzKTtmb3IodmFyIGU9MDtlPGMubnVtYmVyT2ZHbHlwaHM7ZSsrKWMuZ2x5cGhOYW1lSW5kZXhbZV09ZC5wYXJzZVVTaG9ydCgpO2MubmFtZXM9W107Zm9yKHZhciBmPTA7ZjxjLm51bWJlck9mR2x5cGhzO2YrKylpZihjLmdseXBoTmFtZUluZGV4W2ZdPj1RZS5sZW5ndGgpe3ZhciBnPWQucGFyc2VDaGFyKCk7Yy5uYW1lcy5wdXNoKGQucGFyc2VTdHJpbmcoZykpfWJyZWFrO2Nhc2UgMi41OmMubnVtYmVyT2ZHbHlwaHM9ZC5wYXJzZVVTaG9ydCgpLGMub2Zmc2V0PW5ldyBBcnJheShjLm51bWJlck9mR2x5cGhzKTtmb3IodmFyIGg9MDtoPGMubnVtYmVyT2ZHbHlwaHM7aCsrKWMub2Zmc2V0W2hdPWQucGFyc2VDaGFyKCl9cmV0dXJuIGN9ZnVuY3Rpb24gaGIoKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwicG9zdFwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiRklYRURcIix2YWx1ZToxOTY2MDh9LHtuYW1lOlwiaXRhbGljQW5nbGVcIix0eXBlOlwiRklYRURcIix2YWx1ZTowfSx7bmFtZTpcInVuZGVybGluZVBvc2l0aW9uXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJ1bmRlcmxpbmVUaGlja25lc3NcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImlzRml4ZWRQaXRjaFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWluTWVtVHlwZTQyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtYXhNZW1UeXBlNDJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1pbk1lbVR5cGUxXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtYXhNZW1UeXBlMVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9XSl9ZnVuY3Rpb24gaWIoYSxiKXtiPWJ8fDA7dmFyIGM9bmV3IFEoYSxiKSxkPWMucGFyc2VWZXJzaW9uKDEpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09ZHx8MS4xPT09ZCxcIlVuc3VwcG9ydGVkIEdTVUIgdGFibGUgdmVyc2lvbi5cIiksMT09PWQ/e3ZlcnNpb246ZCxzY3JpcHRzOmMucGFyc2VTY3JpcHRMaXN0KCksZmVhdHVyZXM6Yy5wYXJzZUZlYXR1cmVMaXN0KCksbG9va3VwczpjLnBhcnNlTG9va3VwTGlzdChsZil9Ont2ZXJzaW9uOmQsc2NyaXB0czpjLnBhcnNlU2NyaXB0TGlzdCgpLGZlYXR1cmVzOmMucGFyc2VGZWF0dXJlTGlzdCgpLGxvb2t1cHM6Yy5wYXJzZUxvb2t1cExpc3QobGYpLHZhcmlhdGlvbnM6Yy5wYXJzZUZlYXR1cmVWYXJpYXRpb25zTGlzdCgpfX1mdW5jdGlvbiBqYihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiR1NVQlwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJzY3JpcHRzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLlNjcmlwdExpc3QoYS5zY3JpcHRzKX0se25hbWU6XCJmZWF0dXJlc1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5GZWF0dXJlTGlzdChhLmZlYXR1cmVzKX0se25hbWU6XCJsb29rdXBzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkxvb2t1cExpc3QoYS5sb29rdXBzLG5mKX1dKX1mdW5jdGlvbiBrYihhLGIpe3ZhciBjPW5ldyBMZS5QYXJzZXIoYSxiKSxkPWMucGFyc2VVTG9uZygpO3hlLmFyZ3VtZW50KDE9PT1kLFwiVW5zdXBwb3J0ZWQgTUVUQSB0YWJsZSB2ZXJzaW9uLlwiKSxjLnBhcnNlVUxvbmcoKSxjLnBhcnNlVUxvbmcoKTtmb3IodmFyIGU9Yy5wYXJzZVVMb25nKCksZj17fSxnPTA7ZzxlO2crKyl7dmFyIGg9Yy5wYXJzZVRhZygpLGk9Yy5wYXJzZVVMb25nKCksaj1jLnBhcnNlVUxvbmcoKSxrPUFlLlVURjgoYSxiK2ksaik7ZltoXT1rfXJldHVybiBmfWZ1bmN0aW9uIGxiKGEpe3ZhciBiPU9iamVjdC5rZXlzKGEpLmxlbmd0aCxjPVwiXCIsZD0xNisxMipiLGU9bmV3IEllLlRhYmxlKFwibWV0YVwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZToxfSx7bmFtZTpcImZsYWdzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJvZmZzZXRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTpkfSx7bmFtZTpcIm51bVRhZ3NcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTpifV0pO2Zvcih2YXIgZiBpbiBhKXt2YXIgZz1jLmxlbmd0aDtjKz1hW2ZdLGUuZmllbGRzLnB1c2goe25hbWU6XCJ0YWcgXCIrZix0eXBlOlwiVEFHXCIsdmFsdWU6Zn0pLGUuZmllbGRzLnB1c2goe25hbWU6XCJvZmZzZXQgXCIrZix0eXBlOlwiVUxPTkdcIix2YWx1ZTpkK2d9KSxlLmZpZWxkcy5wdXNoKHtuYW1lOlwibGVuZ3RoIFwiK2YsdHlwZTpcIlVMT05HXCIsdmFsdWU6YVtmXS5sZW5ndGh9KX1yZXR1cm4gZS5maWVsZHMucHVzaCh7bmFtZTpcInN0cmluZ1Bvb2xcIix0eXBlOlwiQ0hBUkFSUkFZXCIsdmFsdWU6Y30pLGV9ZnVuY3Rpb24gbWIoYSl7cmV0dXJuIE1hdGgubG9nKGEpL01hdGgubG9nKDIpfDB9ZnVuY3Rpb24gbmIoYSl7Zm9yKDthLmxlbmd0aCU0IT0wOylhLnB1c2goMCk7Zm9yKHZhciBiPTAsYz0wO2M8YS5sZW5ndGg7Yys9NCliKz0oYVtjXTw8MjQpKyhhW2MrMV08PDE2KSsoYVtjKzJdPDw4KSthW2MrM107cmV0dXJuIGIlPU1hdGgucG93KDIsMzIpfWZ1bmN0aW9uIG9iKGEsYixjLGQpe3JldHVybiBuZXcgSWUuUmVjb3JkKFwiVGFibGUgUmVjb3JkXCIsW3tuYW1lOlwidGFnXCIsdHlwZTpcIlRBR1wiLHZhbHVlOnZvaWQgMCE9PWE/YTpcIlwifSx7bmFtZTpcImNoZWNrU3VtXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6dm9pZCAwIT09Yj9iOjB9LHtuYW1lOlwib2Zmc2V0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6dm9pZCAwIT09Yz9jOjB9LHtuYW1lOlwibGVuZ3RoXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6dm9pZCAwIT09ZD9kOjB9XSl9ZnVuY3Rpb24gcGIoYSl7dmFyIGI9bmV3IEllLlRhYmxlKFwic2ZudFwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVEFHXCIsdmFsdWU6XCJPVFRPXCJ9LHtuYW1lOlwibnVtVGFibGVzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic2VhcmNoUmFuZ2VcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJlbnRyeVNlbGVjdG9yXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmFuZ2VTaGlmdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfV0pO2IudGFibGVzPWEsYi5udW1UYWJsZXM9YS5sZW5ndGg7dmFyIGM9TWF0aC5wb3coMixtYihiLm51bVRhYmxlcykpO2Iuc2VhcmNoUmFuZ2U9MTYqYyxiLmVudHJ5U2VsZWN0b3I9bWIoYyksYi5yYW5nZVNoaWZ0PTE2KmIubnVtVGFibGVzLWIuc2VhcmNoUmFuZ2U7Zm9yKHZhciBkPVtdLGU9W10sZj1iLnNpemVPZigpK29iKCkuc2l6ZU9mKCkqYi5udW1UYWJsZXM7ZiU0IT0wOylmKz0xLGUucHVzaCh7bmFtZTpcInBhZGRpbmdcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9KTtmb3IodmFyIGc9MDtnPGEubGVuZ3RoO2crPTEpe3ZhciBoPWFbZ107eGUuYXJndW1lbnQoND09PWgudGFibGVOYW1lLmxlbmd0aCxcIlRhYmxlIG5hbWVcIitoLnRhYmxlTmFtZStcIiBpcyBpbnZhbGlkLlwiKTt2YXIgaT1oLnNpemVPZigpLGo9b2IoaC50YWJsZU5hbWUsbmIoaC5lbmNvZGUoKSksZixpKTtmb3IoZC5wdXNoKHtuYW1lOmoudGFnK1wiIFRhYmxlIFJlY29yZFwiLHR5cGU6XCJSRUNPUkRcIix2YWx1ZTpqfSksZS5wdXNoKHtuYW1lOmgudGFibGVOYW1lK1wiIHRhYmxlXCIsdHlwZTpcIlJFQ09SRFwiLHZhbHVlOmh9KSxmKz1pLHhlLmFyZ3VtZW50KCFpc05hTihmKSxcIlNvbWV0aGluZyB3ZW50IHdyb25nIGNhbGN1bGF0aW5nIHRoZSBvZmZzZXQuXCIpO2YlNCE9MDspZis9MSxlLnB1c2goe25hbWU6XCJwYWRkaW5nXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSl9cmV0dXJuIGQuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnZhbHVlLnRhZz5iLnZhbHVlLnRhZz8xOi0xfSksYi5maWVsZHM9Yi5maWVsZHMuY29uY2F0KGQpLGIuZmllbGRzPWIuZmllbGRzLmNvbmNhdChlKSxifWZ1bmN0aW9uIHFiKGEsYixjKXtmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrPTEpe3ZhciBlPWEuY2hhclRvR2x5cGhJbmRleChiW2RdKTtpZihlPjApe3JldHVybiBhLmdseXBocy5nZXQoZSkuZ2V0TWV0cmljcygpfX1yZXR1cm4gY31mdW5jdGlvbiByYihhKXtmb3IodmFyIGI9MCxjPTA7YzxhLmxlbmd0aDtjKz0xKWIrPWFbY107cmV0dXJuIGIvYS5sZW5ndGh9ZnVuY3Rpb24gc2IoYSl7Zm9yKHZhciBiLGM9W10sZD1bXSxlPVtdLGY9W10sZz1bXSxoPVtdLGk9W10saj0wLGs9MCxsPTAsbT0wLG49MCxvPTA7bzxhLmdseXBocy5sZW5ndGg7bys9MSl7dmFyIHA9YS5nbHlwaHMuZ2V0KG8pLHE9MHxwLnVuaWNvZGU7aWYoaXNOYU4ocC5hZHZhbmNlV2lkdGgpKXRocm93IG5ldyBFcnJvcihcIkdseXBoIFwiK3AubmFtZStcIiAoXCIrbytcIik6IGFkdmFuY2VXaWR0aCBpcyBub3QgYSBudW1iZXIuXCIpOyhiPnF8fHZvaWQgMD09PWIpJiZxPjAmJihiPXEpLGo8cSYmKGo9cSk7dmFyIHI9amYuZ2V0VW5pY29kZVJhbmdlKHEpO2lmKHI8MzIpa3w9MTw8cjtlbHNlIGlmKHI8NjQpbHw9MTw8ci0zMjtlbHNlIGlmKHI8OTYpbXw9MTw8ci02NDtlbHNle2lmKCEocjwxMjMpKXRocm93IG5ldyBFcnJvcihcIlVuaWNvZGUgcmFuZ2VzIGJpdHMgPiAxMjMgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2FnZVwiKTtufD0xPDxyLTk2fWlmKFwiLm5vdGRlZlwiIT09cC5uYW1lKXt2YXIgcz1wLmdldE1ldHJpY3MoKTtjLnB1c2gocy54TWluKSxkLnB1c2gocy55TWluKSxlLnB1c2gocy54TWF4KSxmLnB1c2gocy55TWF4KSxoLnB1c2gocy5sZWZ0U2lkZUJlYXJpbmcpLGkucHVzaChzLnJpZ2h0U2lkZUJlYXJpbmcpLGcucHVzaChwLmFkdmFuY2VXaWR0aCl9fXZhciB0PXt4TWluOk1hdGgubWluLmFwcGx5KG51bGwsYykseU1pbjpNYXRoLm1pbi5hcHBseShudWxsLGQpLHhNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxlKSx5TWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsZiksYWR2YW5jZVdpZHRoTWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsZyksYWR2YW5jZVdpZHRoQXZnOnJiKGcpLG1pbkxlZnRTaWRlQmVhcmluZzpNYXRoLm1pbi5hcHBseShudWxsLGgpLG1heExlZnRTaWRlQmVhcmluZzpNYXRoLm1heC5hcHBseShudWxsLGgpLG1pblJpZ2h0U2lkZUJlYXJpbmc6TWF0aC5taW4uYXBwbHkobnVsbCxpKX07dC5hc2NlbmRlcj1hLmFzY2VuZGVyLHQuZGVzY2VuZGVyPWEuZGVzY2VuZGVyO3ZhciB1PVdlLm1ha2Uoe2ZsYWdzOjMsdW5pdHNQZXJFbTphLnVuaXRzUGVyRW0seE1pbjp0LnhNaW4seU1pbjp0LnlNaW4seE1heDp0LnhNYXgseU1heDp0LnlNYXgsbG93ZXN0UmVjUFBFTTozLGNyZWF0ZWRUaW1lc3RhbXA6YS5jcmVhdGVkVGltZXN0YW1wfSksdj1YZS5tYWtlKHthc2NlbmRlcjp0LmFzY2VuZGVyLGRlc2NlbmRlcjp0LmRlc2NlbmRlcixhZHZhbmNlV2lkdGhNYXg6dC5hZHZhbmNlV2lkdGhNYXgsbWluTGVmdFNpZGVCZWFyaW5nOnQubWluTGVmdFNpZGVCZWFyaW5nLG1pblJpZ2h0U2lkZUJlYXJpbmc6dC5taW5SaWdodFNpZGVCZWFyaW5nLHhNYXhFeHRlbnQ6dC5tYXhMZWZ0U2lkZUJlYXJpbmcrKHQueE1heC10LnhNaW4pLG51bWJlck9mSE1ldHJpY3M6YS5nbHlwaHMubGVuZ3RofSksdz0kZS5tYWtlKGEuZ2x5cGhzLmxlbmd0aCkseD1qZi5tYWtlKHt4QXZnQ2hhcldpZHRoOk1hdGgucm91bmQodC5hZHZhbmNlV2lkdGhBdmcpLHVzV2VpZ2h0Q2xhc3M6YS50YWJsZXMub3MyLnVzV2VpZ2h0Q2xhc3MsdXNXaWR0aENsYXNzOmEudGFibGVzLm9zMi51c1dpZHRoQ2xhc3MsdXNGaXJzdENoYXJJbmRleDpiLHVzTGFzdENoYXJJbmRleDpqLHVsVW5pY29kZVJhbmdlMTprLHVsVW5pY29kZVJhbmdlMjpsLHVsVW5pY29kZVJhbmdlMzptLHVsVW5pY29kZVJhbmdlNDpuLGZzU2VsZWN0aW9uOmEudGFibGVzLm9zMi5mc1NlbGVjdGlvbixzVHlwb0FzY2VuZGVyOnQuYXNjZW5kZXIsc1R5cG9EZXNjZW5kZXI6dC5kZXNjZW5kZXIsc1R5cG9MaW5lR2FwOjAsdXNXaW5Bc2NlbnQ6dC55TWF4LHVzV2luRGVzY2VudDpNYXRoLmFicyh0LnlNaW4pLHVsQ29kZVBhZ2VSYW5nZTE6MSxzeEhlaWdodDpxYihhLFwieHl2d1wiLHt5TWF4Ok1hdGgucm91bmQodC5hc2NlbmRlci8yKX0pLnlNYXgsc0NhcEhlaWdodDpxYihhLFwiSElLTEVGSk1OVFpCRFBSQUdPUVNVVldYWVwiLHQpLnlNYXgsdXNEZWZhdWx0Q2hhcjphLmhhc0NoYXIoXCIgXCIpPzMyOjAsdXNCcmVha0NoYXI6YS5oYXNDaGFyKFwiIFwiKT8zMjowfSkseT1ZZS5tYWtlKGEuZ2x5cGhzKSx6PU1lLm1ha2UoYS5nbHlwaHMpLEE9YS5nZXRFbmdsaXNoTmFtZShcImZvbnRGYW1pbHlcIiksQj1hLmdldEVuZ2xpc2hOYW1lKFwiZm9udFN1YmZhbWlseVwiKSxDPUErXCIgXCIrQixEPWEuZ2V0RW5nbGlzaE5hbWUoXCJwb3N0U2NyaXB0TmFtZVwiKTtEfHwoRD1BLnJlcGxhY2UoL1xccy9nLFwiXCIpK1wiLVwiK0IpO3ZhciBFPXt9O2Zvcih2YXIgRiBpbiBhLm5hbWVzKUVbRl09YS5uYW1lc1tGXTtFLnVuaXF1ZUlEfHwoRS51bmlxdWVJRD17ZW46YS5nZXRFbmdsaXNoTmFtZShcIm1hbnVmYWN0dXJlclwiKStcIjpcIitDfSksRS5wb3N0U2NyaXB0TmFtZXx8KEUucG9zdFNjcmlwdE5hbWU9e2VuOkR9KSxFLnByZWZlcnJlZEZhbWlseXx8KEUucHJlZmVycmVkRmFtaWx5PWEubmFtZXMuZm9udEZhbWlseSksRS5wcmVmZXJyZWRTdWJmYW1pbHl8fChFLnByZWZlcnJlZFN1YmZhbWlseT1hLm5hbWVzLmZvbnRTdWJmYW1pbHkpO3ZhciBHPVtdLEg9Z2YubWFrZShFLEcpLEk9Ry5sZW5ndGg+MD9aZS5tYWtlKEcpOnZvaWQgMCxKPWtmLm1ha2UoKSxLPVZlLm1ha2UoYS5nbHlwaHMse3ZlcnNpb246YS5nZXRFbmdsaXNoTmFtZShcInZlcnNpb25cIiksZnVsbE5hbWU6QyxmYW1pbHlOYW1lOkEsd2VpZ2h0TmFtZTpCLHBvc3RTY3JpcHROYW1lOkQsdW5pdHNQZXJFbTphLnVuaXRzUGVyRW0sZm9udEJCb3g6WzAsdC55TWluLHQuYXNjZW5kZXIsdC5hZHZhbmNlV2lkdGhNYXhdfSksTD1hLm1ldGFzJiZPYmplY3Qua2V5cyhhLm1ldGFzKS5sZW5ndGg+MD9wZi5tYWtlKGEubWV0YXMpOnZvaWQgMCxNPVt1LHYsdyx4LEgseixKLEsseV07SSYmTS5wdXNoKEkpLGEudGFibGVzLmdzdWImJk0ucHVzaChvZi5tYWtlKGEudGFibGVzLmdzdWIpKSxMJiZNLnB1c2goTCk7Zm9yKHZhciBOPXBiKE0pLE89Ti5lbmNvZGUoKSxQPW5iKE8pLFE9Ti5maWVsZHMsUj0hMSxTPTA7UzxRLmxlbmd0aDtTKz0xKWlmKFwiaGVhZCB0YWJsZVwiPT09UVtTXS5uYW1lKXtRW1NdLnZhbHVlLmNoZWNrU3VtQWRqdXN0bWVudD0yOTgxMTQ2NTU0LVAsUj0hMDticmVha31pZighUil0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBoZWFkIHRhYmxlIHdpdGggY2hlY2tTdW0gdG8gYWRqdXN0LlwiKTtyZXR1cm4gTn1mdW5jdGlvbiB0YihhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGgtMTtjPD1kOyl7dmFyIGU9YytkPj4+MSxmPWFbZV0udGFnO2lmKGY9PT1iKXJldHVybiBlO2Y8Yj9jPWUrMTpkPWUtMX1yZXR1cm4tYy0xfWZ1bmN0aW9uIHViKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aC0xO2M8PWQ7KXt2YXIgZT1jK2Q+Pj4xLGY9YVtlXTtpZihmPT09YilyZXR1cm4gZTtmPGI/Yz1lKzE6ZD1lLTF9cmV0dXJuLWMtMX1mdW5jdGlvbiB2YihhLGIpe2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aC0xO2Q8PWU7KXt2YXIgZj1kK2U+Pj4xO2M9YVtmXTt2YXIgZz1jLnN0YXJ0O2lmKGc9PT1iKXJldHVybiBjO2c8Yj9kPWYrMTplPWYtMX1pZihkPjApcmV0dXJuIGM9YVtkLTFdLGI+Yy5lbmQ/MDpjfWZ1bmN0aW9uIHdiKGEsYil7dGhpcy5mb250PWEsdGhpcy50YWJsZU5hbWU9Yn1mdW5jdGlvbiB4YihhKXt3Yi5jYWxsKHRoaXMsYSxcImdwb3NcIil9ZnVuY3Rpb24geWIoYSl7d2IuY2FsbCh0aGlzLGEsXCJnc3ViXCIpfWZ1bmN0aW9uIHpiKGEsYil7dmFyIGM9YS5sZW5ndGg7aWYoYyE9PWIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgZD0wO2Q8YztkKyspaWYoYVtkXSE9PWJbZF0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQWIoYSxiLGMpe2Zvcih2YXIgZD1hLnN1YnRhYmxlcyxlPTA7ZTxkLmxlbmd0aDtlKyspe3ZhciBmPWRbZV07aWYoZi5zdWJzdEZvcm1hdD09PWIpcmV0dXJuIGZ9aWYoYylyZXR1cm4gZC5wdXNoKGMpLGN9ZnVuY3Rpb24gQmIoKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93fWZ1bmN0aW9uIENiKGEpe2Zvcih2YXIgYj1uZXcgQXJyYXlCdWZmZXIoYS5sZW5ndGgpLGM9bmV3IFVpbnQ4QXJyYXkoYiksZD0wO2Q8YS5sZW5ndGg7KytkKWNbZF09YVtkXTtyZXR1cm4gYn1mdW5jdGlvbiBEYihhKXtmb3IodmFyIGI9bmV3IGUoYS5ieXRlTGVuZ3RoKSxjPW5ldyBVaW50OEFycmF5KGEpLGQ9MDtkPGIubGVuZ3RoOysrZCliW2RdPWNbZF07cmV0dXJuIGJ9ZnVuY3Rpb24gRWIoYSxiKXtpZighYSl0aHJvdyBifWZ1bmN0aW9uIEZiKGEsYixjLGQsZSl7dmFyIGY7cmV0dXJuKGImZCk+MD8oZj1hLnBhcnNlQnl0ZSgpLDA9PShiJmUpJiYoZj0tZiksZj1jK2YpOmY9KGImZSk+MD9jOmMrYS5wYXJzZVNob3J0KCksZn1mdW5jdGlvbiBHYihhLGIsYyl7dmFyIGQ9bmV3IExlLlBhcnNlcihiLGMpO2EubnVtYmVyT2ZDb250b3Vycz1kLnBhcnNlU2hvcnQoKSxhLl94TWluPWQucGFyc2VTaG9ydCgpLGEuX3lNaW49ZC5wYXJzZVNob3J0KCksYS5feE1heD1kLnBhcnNlU2hvcnQoKSxhLl95TWF4PWQucGFyc2VTaG9ydCgpO3ZhciBlLGY7aWYoYS5udW1iZXJPZkNvbnRvdXJzPjApe2Zvcih2YXIgZz1hLmVuZFBvaW50SW5kaWNlcz1bXSxoPTA7aDxhLm51bWJlck9mQ29udG91cnM7aCs9MSlnLnB1c2goZC5wYXJzZVVTaG9ydCgpKTthLmluc3RydWN0aW9uTGVuZ3RoPWQucGFyc2VVU2hvcnQoKSxhLmluc3RydWN0aW9ucz1bXTtmb3IodmFyIGk9MDtpPGEuaW5zdHJ1Y3Rpb25MZW5ndGg7aSs9MSlhLmluc3RydWN0aW9ucy5wdXNoKGQucGFyc2VCeXRlKCkpO3ZhciBqPWdbZy5sZW5ndGgtMV0rMTtlPVtdO2Zvcih2YXIgaz0wO2s8ajtrKz0xKWlmKGY9ZC5wYXJzZUJ5dGUoKSxlLnB1c2goZiksKDgmZik+MClmb3IodmFyIGw9ZC5wYXJzZUJ5dGUoKSxtPTA7bTxsO20rPTEpZS5wdXNoKGYpLGsrPTE7aWYoeGUuYXJndW1lbnQoZS5sZW5ndGg9PT1qLFwiQmFkIGZsYWdzLlwiKSxnLmxlbmd0aD4wKXt2YXIgbixvPVtdO2lmKGo+MCl7Zm9yKHZhciBwPTA7cDxqO3ArPTEpZj1lW3BdLG49e30sbi5vbkN1cnZlPSEhKDEmZiksbi5sYXN0UG9pbnRPZkNvbnRvdXI9Zy5pbmRleE9mKHApPj0wLG8ucHVzaChuKTtmb3IodmFyIHE9MCxyPTA7cjxqO3IrPTEpZj1lW3JdLG49b1tyXSxuLng9RmIoZCxmLHEsMiwxNikscT1uLng7Zm9yKHZhciBzPTAsdD0wO3Q8ajt0Kz0xKWY9ZVt0XSxuPW9bdF0sbi55PUZiKGQsZixzLDQsMzIpLHM9bi55fWEucG9pbnRzPW99ZWxzZSBhLnBvaW50cz1bXX1lbHNlIGlmKDA9PT1hLm51bWJlck9mQ29udG91cnMpYS5wb2ludHM9W107ZWxzZXthLmlzQ29tcG9zaXRlPSEwLGEucG9pbnRzPVtdLGEuY29tcG9uZW50cz1bXTtmb3IodmFyIHU9ITA7dTspe2U9ZC5wYXJzZVVTaG9ydCgpO3ZhciB2PXtnbHlwaEluZGV4OmQucGFyc2VVU2hvcnQoKSx4U2NhbGU6MSxzY2FsZTAxOjAsc2NhbGUxMDowLHlTY2FsZToxLGR4OjAsZHk6MH07KDEmZSk+MD8oMiZlKT4wPyh2LmR4PWQucGFyc2VTaG9ydCgpLHYuZHk9ZC5wYXJzZVNob3J0KCkpOnYubWF0Y2hlZFBvaW50cz1bZC5wYXJzZVVTaG9ydCgpLGQucGFyc2VVU2hvcnQoKV06KDImZSk+MD8odi5keD1kLnBhcnNlQ2hhcigpLHYuZHk9ZC5wYXJzZUNoYXIoKSk6di5tYXRjaGVkUG9pbnRzPVtkLnBhcnNlQnl0ZSgpLGQucGFyc2VCeXRlKCldLCg4JmUpPjA/di54U2NhbGU9di55U2NhbGU9ZC5wYXJzZUYyRG90MTQoKTooNjQmZSk+MD8odi54U2NhbGU9ZC5wYXJzZUYyRG90MTQoKSx2LnlTY2FsZT1kLnBhcnNlRjJEb3QxNCgpKTooMTI4JmUpPjAmJih2LnhTY2FsZT1kLnBhcnNlRjJEb3QxNCgpLHYuc2NhbGUwMT1kLnBhcnNlRjJEb3QxNCgpLHYuc2NhbGUxMD1kLnBhcnNlRjJEb3QxNCgpLHYueVNjYWxlPWQucGFyc2VGMkRvdDE0KCkpLGEuY29tcG9uZW50cy5wdXNoKHYpLHU9ISEoMzImZSl9aWYoMjU2JmUpe2EuaW5zdHJ1Y3Rpb25MZW5ndGg9ZC5wYXJzZVVTaG9ydCgpLGEuaW5zdHJ1Y3Rpb25zPVtdO2Zvcih2YXIgdz0wO3c8YS5pbnN0cnVjdGlvbkxlbmd0aDt3Kz0xKWEuaW5zdHJ1Y3Rpb25zLnB1c2goZC5wYXJzZUJ5dGUoKSl9fX1mdW5jdGlvbiBIYihhLGIpe2Zvcih2YXIgYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdLGY9e3g6Yi54U2NhbGUqZS54K2Iuc2NhbGUwMSplLnkrYi5keCx5OmIuc2NhbGUxMCplLngrYi55U2NhbGUqZS55K2IuZHksb25DdXJ2ZTplLm9uQ3VydmUsbGFzdFBvaW50T2ZDb250b3VyOmUubGFzdFBvaW50T2ZDb250b3VyfTtjLnB1c2goZil9cmV0dXJuIGN9ZnVuY3Rpb24gSWIoYSl7Zm9yKHZhciBiPVtdLGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXTtjLnB1c2goZSksZS5sYXN0UG9pbnRPZkNvbnRvdXImJihiLnB1c2goYyksYz1bXSl9cmV0dXJuIHhlLmFyZ3VtZW50KDA9PT1jLmxlbmd0aCxcIlRoZXJlIGFyZSBzdGlsbCBwb2ludHMgbGVmdCBpbiB0aGUgY3VycmVudCBjb250b3VyLlwiKSxifWZ1bmN0aW9uIEpiKGEpe3ZhciBiPW5ldyByO2lmKCFhKXJldHVybiBiO2Zvcih2YXIgYz1JYihhKSxkPTA7ZDxjLmxlbmd0aDsrK2Qpe3ZhciBlPWNbZF0sZj1udWxsLGc9ZVtlLmxlbmd0aC0xXSxoPWVbMF07aWYoZy5vbkN1cnZlKWIubW92ZVRvKGcueCxnLnkpO2Vsc2UgaWYoaC5vbkN1cnZlKWIubW92ZVRvKGgueCxoLnkpO2Vsc2V7dmFyIGk9e3g6LjUqKGcueCtoLngpLHk6LjUqKGcueStoLnkpfTtiLm1vdmVUbyhpLngsaS55KX1mb3IodmFyIGo9MDtqPGUubGVuZ3RoOysrailpZihmPWcsZz1oLGg9ZVsoaisxKSVlLmxlbmd0aF0sZy5vbkN1cnZlKWIubGluZVRvKGcueCxnLnkpO2Vsc2V7dmFyIGs9aDtmLm9uQ3VydmV8fHt4Oi41KihnLngrZi54KSx5Oi41KihnLnkrZi55KX0saC5vbkN1cnZlfHwoaz17eDouNSooZy54K2gueCkseTouNSooZy55K2gueSl9KSxiLnF1YWRyYXRpY0N1cnZlVG8oZy54LGcueSxrLngsay55KX1iLmNsb3NlUGF0aCgpfXJldHVybiBifWZ1bmN0aW9uIEtiKGEsYil7aWYoYi5pc0NvbXBvc2l0ZSlmb3IodmFyIGM9MDtjPGIuY29tcG9uZW50cy5sZW5ndGg7Yys9MSl7dmFyIGQ9Yi5jb21wb25lbnRzW2NdLGU9YS5nZXQoZC5nbHlwaEluZGV4KTtpZihlLmdldFBhdGgoKSxlLnBvaW50cyl7dmFyIGY9dm9pZCAwO2lmKHZvaWQgMD09PWQubWF0Y2hlZFBvaW50cylmPUhiKGUucG9pbnRzLGQpO2Vsc2V7XG5pZihkLm1hdGNoZWRQb2ludHNbMF0+Yi5wb2ludHMubGVuZ3RoLTF8fGQubWF0Y2hlZFBvaW50c1sxXT5lLnBvaW50cy5sZW5ndGgtMSl0aHJvdyBFcnJvcihcIk1hdGNoZWQgcG9pbnRzIG91dCBvZiByYW5nZSBpbiBcIitiLm5hbWUpO3ZhciBnPWIucG9pbnRzW2QubWF0Y2hlZFBvaW50c1swXV0saD1lLnBvaW50c1tkLm1hdGNoZWRQb2ludHNbMV1dLGk9e3hTY2FsZTpkLnhTY2FsZSxzY2FsZTAxOmQuc2NhbGUwMSxzY2FsZTEwOmQuc2NhbGUxMCx5U2NhbGU6ZC55U2NhbGUsZHg6MCxkeTowfTtoPUhiKFtoXSxpKVswXSxpLmR4PWcueC1oLngsaS5keT1nLnktaC55LGY9SGIoZS5wb2ludHMsaSl9Yi5wb2ludHM9Yi5wb2ludHMuY29uY2F0KGYpfX1yZXR1cm4gSmIoYi5wb2ludHMpfWZ1bmN0aW9uIExiKGEsYixjLGQpe2Zvcih2YXIgZT1uZXcgU2UuR2x5cGhTZXQoZCksZj0wO2Y8Yy5sZW5ndGgtMTtmKz0xKXt2YXIgZz1jW2ZdO2chPT1jW2YrMV0/ZS5wdXNoKGYsU2UudHRmR2x5cGhMb2FkZXIoZCxmLEdiLGEsYitnLEtiKSk6ZS5wdXNoKGYsU2UuZ2x5cGhMb2FkZXIoZCxmKSl9cmV0dXJuIGV9ZnVuY3Rpb24gTWIoYSl7dGhpcy5mb250PWEsdGhpcy5nZXRDb21tYW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gdmYuZ2V0UGF0aChhKS5jb21tYW5kc30sdGhpcy5fZnBnbVN0YXRlPXRoaXMuX3ByZXBTdGF0ZT12b2lkIDAsdGhpcy5fZXJyb3JTdGF0ZT0wfWZ1bmN0aW9uIE5iKGEpe3JldHVybiBhfWZ1bmN0aW9uIE9iKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqTWF0aC5yb3VuZChNYXRoLmFicyhhKSl9ZnVuY3Rpb24gUGIoYSl7cmV0dXJuIE1hdGguc2lnbihhKSpNYXRoLnJvdW5kKE1hdGguYWJzKDIqYSkpLzJ9ZnVuY3Rpb24gUWIoYSl7cmV0dXJuIE1hdGguc2lnbihhKSooTWF0aC5yb3VuZChNYXRoLmFicyhhKSsuNSktLjUpfWZ1bmN0aW9uIFJiKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqTWF0aC5jZWlsKE1hdGguYWJzKGEpKX1mdW5jdGlvbiBTYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKk1hdGguZmxvb3IoTWF0aC5hYnMoYSkpfWZ1bmN0aW9uIFRiKGEsYil7dGhpcy54PWEsdGhpcy55PWIsdGhpcy5heGlzPXZvaWQgMCx0aGlzLnNsb3BlPWIvYSx0aGlzLm5vcm1hbFNsb3BlPS1hL2IsT2JqZWN0LmZyZWV6ZSh0aGlzKX1mdW5jdGlvbiBVYihhLGIpe3ZhciBjPU1hdGguc3FydChhKmErYipiKTtyZXR1cm4gYS89YyxiLz1jLDE9PT1hJiYwPT09Yj94ZjowPT09YSYmMT09PWI/eWY6bmV3IFRiKGEsYil9ZnVuY3Rpb24gVmIoYSxiLGMsZCl7dGhpcy54PXRoaXMueG89TWF0aC5yb3VuZCg2NCphKS82NCx0aGlzLnk9dGhpcy55bz1NYXRoLnJvdW5kKDY0KmIpLzY0LHRoaXMubGFzdFBvaW50T2ZDb250b3VyPWMsdGhpcy5vbkN1cnZlPWQsdGhpcy5wcmV2UG9pbnRPbkNvbnRvdXI9dm9pZCAwLHRoaXMubmV4dFBvaW50T25Db250b3VyPXZvaWQgMCx0aGlzLnhUb3VjaGVkPSExLHRoaXMueVRvdWNoZWQ9ITEsT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHRoaXMpfWZ1bmN0aW9uIFdiKGEsYil7c3dpdGNoKHRoaXMuZW52PWEsdGhpcy5zdGFjaz1bXSx0aGlzLnByb2c9YixhKXtjYXNlXCJnbHlmXCI6dGhpcy56cDA9dGhpcy56cDE9dGhpcy56cDI9MSx0aGlzLnJwMD10aGlzLnJwMT10aGlzLnJwMj0wO2Nhc2VcInByZXBcIjp0aGlzLmZ2PXRoaXMucHY9dGhpcy5kcHY9eGYsdGhpcy5yb3VuZD1PYn19ZnVuY3Rpb24gWGIoYSl7Zm9yKHZhciBiPWEudFpvbmU9bmV3IEFycmF5KGEuZ1pvbmUubGVuZ3RoKSxjPTA7YzxiLmxlbmd0aDtjKyspYltjXT1uZXcgVmIoMCwwKX1mdW5jdGlvbiBZYihhLGIpe3ZhciBjLGQ9YS5wcm9nLGU9YS5pcCxmPTE7ZG97aWYoODg9PT0oYz1kWysrZV0pKWYrKztlbHNlIGlmKDg5PT09YylmLS07ZWxzZSBpZig2ND09PWMpZSs9ZFtlKzFdKzE7ZWxzZSBpZig2NT09PWMpZSs9MipkW2UrMV0rMTtlbHNlIGlmKGM+PTE3NiYmYzw9MTgzKWUrPWMtMTc2KzE7ZWxzZSBpZihjPj0xODQmJmM8PTE5MSllKz0yKihjLTE4NCsxKTtlbHNlIGlmKGImJjE9PT1mJiYyNz09PWMpYnJlYWt9d2hpbGUoZj4wKTthLmlwPWV9ZnVuY3Rpb24gWmIoYixjKXthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTVlRDQVtcIitiLmF4aXMrXCJdXCIpLGMuZnY9Yy5wdj1jLmRwdj1ifWZ1bmN0aW9uICRiKGIsYyl7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU1BWVENBW1wiK2IuYXhpcytcIl1cIiksYy5wdj1jLmRwdj1ifWZ1bmN0aW9uIF9iKGIsYyl7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU0ZWVENBW1wiK2IuYXhpcytcIl1cIiksYy5mdj1ifWZ1bmN0aW9uIGFjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MltlXSxoPWMuejFbZl07YS5ERUJVRyYmY29uc29sZS5sb2coXCJTUFZUTFtcIitiK1wiXVwiLGUsZik7dmFyIGksajtiPyhpPWcueS1oLnksaj1oLngtZy54KTooaT1oLngtZy54LGo9aC55LWcueSksYy5wdj1jLmRwdj1VYihpLGopfWZ1bmN0aW9uIGJjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MltlXSxoPWMuejFbZl07YS5ERUJVRyYmY29uc29sZS5sb2coXCJTRlZUTFtcIitiK1wiXVwiLGUsZik7dmFyIGksajtiPyhpPWcueS1oLnksaj1oLngtZy54KTooaT1oLngtZy54LGo9aC55LWcueSksYy5mdj1VYihpLGopfWZ1bmN0aW9uIGNjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUFZGU1tdXCIsZCxlKSxiLnB2PWIuZHB2PVViKGUsZCl9ZnVuY3Rpb24gZGMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNQVkZTW11cIixkLGUpLGIuZnY9VWIoZSxkKX1mdW5jdGlvbiBlYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yi5wdjthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJHUFZbXVwiKSxjLnB1c2goMTYzODQqZC54KSxjLnB1c2goMTYzODQqZC55KX1mdW5jdGlvbiBmYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yi5mdjthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJHRlZbXVwiKSxjLnB1c2goMTYzODQqZC54KSxjLnB1c2goMTYzODQqZC55KX1mdW5jdGlvbiBnYyhiKXtiLmZ2PWIucHYsYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0ZWVFBWW11cIil9ZnVuY3Rpb24gaGMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpLGY9Yy5wb3AoKSxnPWMucG9wKCksaD1jLnBvcCgpLGk9Yi56MCxqPWIuejEsaz1pW2RdLGw9aVtlXSxtPWpbZl0sbj1qW2ddLG89Yi56MltoXTthLkRFQlVHJiZjb25zb2xlLmxvZyhcIklTRUNUW10sIFwiLGQsZSxmLGcsaCk7dmFyIHA9ay54LHE9ay55LHI9bC54LHM9bC55LHQ9bS54LHU9bS55LHY9bi54LHc9bi55LHg9KHAtcikqKHUtdyktKHEtcykqKHQtdikseT1wKnMtcSpyLHo9dCp3LXUqdjtvLng9KHkqKHQtdikteioocC1yKSkveCxvLnk9KHkqKHUtdykteioocS1zKSkveH1mdW5jdGlvbiBpYyhiKXtiLnJwMD1iLnN0YWNrLnBvcCgpLGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNSUDBbXVwiLGIucnAwKX1mdW5jdGlvbiBqYyhiKXtiLnJwMT1iLnN0YWNrLnBvcCgpLGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNSUDFbXVwiLGIucnAxKX1mdW5jdGlvbiBrYyhiKXtiLnJwMj1iLnN0YWNrLnBvcCgpLGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNSUDJbXVwiLGIucnAyKX1mdW5jdGlvbiBsYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO3N3aXRjaChhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTWlAwW11cIixjKSxiLnpwMD1jLGMpe2Nhc2UgMDpiLnRab25lfHxYYihiKSxiLnowPWIudFpvbmU7YnJlYWs7Y2FzZSAxOmIuejA9Yi5nWm9uZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgem9uZSBwb2ludGVyXCIpfX1mdW5jdGlvbiBtYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO3N3aXRjaChhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTWlAxW11cIixjKSxiLnpwMT1jLGMpe2Nhc2UgMDpiLnRab25lfHxYYihiKSxiLnoxPWIudFpvbmU7YnJlYWs7Y2FzZSAxOmIuejE9Yi5nWm9uZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgem9uZSBwb2ludGVyXCIpfX1mdW5jdGlvbiBuYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO3N3aXRjaChhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTWlAyW11cIixjKSxiLnpwMj1jLGMpe2Nhc2UgMDpiLnRab25lfHxYYihiKSxiLnoyPWIudFpvbmU7YnJlYWs7Y2FzZSAxOmIuejI9Yi5nWm9uZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgem9uZSBwb2ludGVyXCIpfX1mdW5jdGlvbiBvYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO3N3aXRjaChhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTWlBTW11cIixjKSxiLnpwMD1iLnpwMT1iLnpwMj1jLGMpe2Nhc2UgMDpiLnRab25lfHxYYihiKSxiLnowPWIuejE9Yi56Mj1iLnRab25lO2JyZWFrO2Nhc2UgMTpiLnowPWIuejE9Yi56Mj1iLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lIHBvaW50ZXJcIil9fWZ1bmN0aW9uIHBjKGIpe2IubG9vcD1iLnN0YWNrLnBvcCgpLGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNMT09QW11cIixiLmxvb3ApfWZ1bmN0aW9uIHFjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJUR1tdXCIpLGIucm91bmQ9T2J9ZnVuY3Rpb24gcmMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlRIR1tdXCIpLGIucm91bmQ9UWJ9ZnVuY3Rpb24gc2MoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTTURbXVwiLGMpLGIubWluRGlzPWMvNjR9ZnVuY3Rpb24gdGMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRUxTRVtdXCIpLFliKGIsITEpfWZ1bmN0aW9uIHVjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiSk1QUltdXCIsYyksYi5pcCs9Yy0xfWZ1bmN0aW9uIHZjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0NWVENJW11cIixjKSxiLmN2Q3V0SW49Yy82NH1mdW5jdGlvbiB3YyhiKXt2YXIgYz1iLnN0YWNrO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkRVUFtdXCIpLGMucHVzaChjW2MubGVuZ3RoLTFdKX1mdW5jdGlvbiB4YyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJQT1BbXVwiKSxiLnN0YWNrLnBvcCgpfWZ1bmN0aW9uIHljKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkNMRUFSW11cIiksYi5zdGFjay5sZW5ndGg9MH1mdW5jdGlvbiB6YyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1dBUFtdXCIpLGMucHVzaChkKSxjLnB1c2goZSl9ZnVuY3Rpb24gQWMoYil7dmFyIGM9Yi5zdGFjazthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJERVBUSFtdXCIpLGMucHVzaChjLmxlbmd0aCl9ZnVuY3Rpb24gQmMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkxPT1BDQUxMW11cIixkLGUpO3ZhciBmPWIuaXAsZz1iLnByb2c7Yi5wcm9nPWIuZnVuY3NbZF07Zm9yKHZhciBoPTA7aDxlO2grKylzZihiKSxhLkRFQlVHJiZjb25zb2xlLmxvZygrK2Iuc3RlcCxoKzE8ZT9cIm5leHQgbG9vcGNhbGxcIjpcImRvbmUgbG9vcGNhbGxcIixoKTtiLmlwPWYsYi5wcm9nPWd9ZnVuY3Rpb24gQ2MoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJDQUxMW11cIixjKTt2YXIgZD1iLmlwLGU9Yi5wcm9nO2IucHJvZz1iLmZ1bmNzW2NdLHNmKGIpLGIuaXA9ZCxiLnByb2c9ZSxhLkRFQlVHJiZjb25zb2xlLmxvZygrK2Iuc3RlcCxcInJldHVybmluZyBmcm9tXCIsYyl9ZnVuY3Rpb24gRGMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQ0lOREVYW11cIixkKSxjLnB1c2goY1tjLmxlbmd0aC1kXSl9ZnVuY3Rpb24gRWMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTUlOREVYW11cIixkKSxjLnB1c2goYy5zcGxpY2UoYy5sZW5ndGgtZCwxKVswXSl9ZnVuY3Rpb24gRmMoYil7aWYoXCJmcGdtXCIhPT1iLmVudil0aHJvdyBuZXcgRXJyb3IoXCJGREVGIG5vdCBhbGxvd2VkIGhlcmVcIik7dmFyIGM9Yi5zdGFjayxkPWIucHJvZyxlPWIuaXAsZj1jLnBvcCgpLGc9ZTtmb3IoYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRkRFRltdXCIsZik7NDUhPT1kWysrZV07KTtiLmlwPWUsYi5mdW5jc1tmXT1kLnNsaWNlKGcrMSxlKX1mdW5jdGlvbiBHYyhiLGMpe3ZhciBkPWMuc3RhY2sucG9wKCksZT1jLnowW2RdLGY9Yy5mdixnPWMucHY7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiTURBUFtcIitiK1wiXVwiLGQpO3ZhciBoPWcuZGlzdGFuY2UoZSx6Zik7YiYmKGg9Yy5yb3VuZChoKSksZi5zZXRSZWxhdGl2ZShlLHpmLGgsZyksZi50b3VjaChlKSxjLnJwMD1jLnJwMT1kfWZ1bmN0aW9uIEhjKGIsYyl7dmFyIGQsZSxmLGc9Yy56MixoPWcubGVuZ3RoLTI7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiSVVQW1wiK2IuYXhpcytcIl1cIik7Zm9yKHZhciBpPTA7aTxoO2krKylkPWdbaV0sYi50b3VjaGVkKGQpfHwoZT1kLnByZXZUb3VjaGVkKGIpKSE9PWQmJihmPWQubmV4dFRvdWNoZWQoYiksZT09PWYmJmIuc2V0UmVsYXRpdmUoZCxkLGIuZGlzdGFuY2UoZSxlLCExLCEwKSxiLCEwKSxiLmludGVycG9sYXRlKGQsZSxmLGIpKX1mdW5jdGlvbiBJYyhiLGMpe2Zvcih2YXIgZD1jLnN0YWNrLGU9Yj9jLnJwMTpjLnJwMixmPShiP2MuejA6Yy56MSlbZV0sZz1jLmZ2LGg9Yy5wdixpPWMubG9vcCxqPWMuejI7aS0tOyl7dmFyIGs9ZC5wb3AoKSxsPWpba10sbT1oLmRpc3RhbmNlKGYsZiwhMSwhMCk7Zy5zZXRSZWxhdGl2ZShsLGwsbSxoKSxnLnRvdWNoKGwpLGEuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCwoYy5sb29wPjE/XCJsb29wIFwiKyhjLmxvb3AtaSkrXCI6IFwiOlwiXCIpK1wiU0hQW1wiKyhiP1wicnAxXCI6XCJycDJcIikrXCJdXCIsayl9Yy5sb29wPTF9ZnVuY3Rpb24gSmMoYixjKXt2YXIgZD1jLnN0YWNrLGU9Yj9jLnJwMTpjLnJwMixmPShiP2MuejA6Yy56MSlbZV0sZz1jLmZ2LGg9Yy5wdixpPWQucG9wKCksaj1jLnoyW2MuY29udG91cnNbaV1dLGs9ajthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTSENbXCIrYitcIl1cIixpKTt2YXIgbD1oLmRpc3RhbmNlKGYsZiwhMSwhMCk7ZG97ayE9PWYmJmcuc2V0UmVsYXRpdmUoayxrLGwsaCksaz1rLm5leHRQb2ludE9uQ29udG91cn13aGlsZShrIT09ail9ZnVuY3Rpb24gS2MoYixjKXt2YXIgZD1jLnN0YWNrLGU9Yj9jLnJwMTpjLnJwMixmPShiP2MuejA6Yy56MSlbZV0sZz1jLmZ2LGg9Yy5wdixpPWQucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU0haW1wiK2IrXCJdXCIsaSk7dmFyIGo7c3dpdGNoKGkpe2Nhc2UgMDpqPWMudFpvbmU7YnJlYWs7Y2FzZSAxOmo9Yy5nWm9uZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgem9uZVwiKX1mb3IodmFyIGssbD1oLmRpc3RhbmNlKGYsZiwhMSwhMCksbT1qLmxlbmd0aC0yLG49MDtuPG07bisrKWs9altuXSxnLnNldFJlbGF0aXZlKGssayxsLGgpfWZ1bmN0aW9uIExjKGIpe2Zvcih2YXIgYz1iLnN0YWNrLGQ9Yi5sb29wLGU9Yi5mdixmPWMucG9wKCkvNjQsZz1iLnoyO2QtLTspe3ZhciBoPWMucG9wKCksaT1nW2hdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCwoYi5sb29wPjE/XCJsb29wIFwiKyhiLmxvb3AtZCkrXCI6IFwiOlwiXCIpK1wiU0hQSVhbXVwiLGgsZiksZS5zZXRSZWxhdGl2ZShpLGksZiksZS50b3VjaChpKX1iLmxvb3A9MX1mdW5jdGlvbiBNYyhiKXtmb3IodmFyIGM9Yi5zdGFjayxkPWIucnAxLGU9Yi5ycDIsZj1iLmxvb3AsZz1iLnowW2RdLGg9Yi56MVtlXSxpPWIuZnYsaj1iLmRwdixrPWIuejI7Zi0tOyl7dmFyIGw9Yy5wb3AoKSxtPWtbbF07YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLChiLmxvb3A+MT9cImxvb3AgXCIrKGIubG9vcC1mKStcIjogXCI6XCJcIikrXCJJUFtdXCIsbCxkLFwiPC0+XCIsZSksaS5pbnRlcnBvbGF0ZShtLGcsaCxqKSxpLnRvdWNoKG0pfWIubG9vcD0xfWZ1bmN0aW9uIE5jKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCkvNjQsZj1kLnBvcCgpLGc9Yy56MVtmXSxoPWMuejBbYy5ycDBdLGk9Yy5mdixqPWMucHY7aS5zZXRSZWxhdGl2ZShnLGgsZSxqKSxpLnRvdWNoKGcpLGEuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIk1TSVJQW1wiK2IrXCJdXCIsZSxmKSxjLnJwMT1jLnJwMCxjLnJwMj1mLGImJihjLnJwMD1mKX1mdW5jdGlvbiBPYyhiKXtmb3IodmFyIGM9Yi5zdGFjayxkPWIucnAwLGU9Yi56MFtkXSxmPWIubG9vcCxnPWIuZnYsaD1iLnB2LGk9Yi56MTtmLS07KXt2YXIgaj1jLnBvcCgpLGs9aVtqXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsKGIubG9vcD4xP1wibG9vcCBcIisoYi5sb29wLWYpK1wiOiBcIjpcIlwiKStcIkFMSUdOUlBbXVwiLGopLGcuc2V0UmVsYXRpdmUoayxlLDAsaCksZy50b3VjaChrKX1iLmxvb3A9MX1mdW5jdGlvbiBQYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSVERHW11cIiksYi5yb3VuZD1QYn1mdW5jdGlvbiBRYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejBbZl0saD1jLmZ2LGk9Yy5wdixqPWMuY3Z0W2VdO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIk1JQVBbXCIrYitcIl1cIixlLFwiKFwiLGosXCIpXCIsZik7dmFyIGs9aS5kaXN0YW5jZShnLHpmKTtiJiYoTWF0aC5hYnMoay1qKTxjLmN2Q3V0SW4mJihrPWopLGs9Yy5yb3VuZChrKSksaC5zZXRSZWxhdGl2ZShnLHpmLGssaSksMD09PWMuenAwJiYoZy54bz1nLngsZy55bz1nLnkpLGgudG91Y2goZyksYy5ycDA9Yy5ycDE9Zn1mdW5jdGlvbiBSYyhiKXt2YXIgYz1iLnByb2csZD1iLmlwLGU9Yi5zdGFjayxmPWNbKytkXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJOUFVTSEJbXVwiLGYpO2Zvcih2YXIgZz0wO2c8ZjtnKyspZS5wdXNoKGNbKytkXSk7Yi5pcD1kfWZ1bmN0aW9uIFNjKGIpe3ZhciBjPWIuaXAsZD1iLnByb2csZT1iLnN0YWNrLGY9ZFsrK2NdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5QVVNIV1tdXCIsZik7Zm9yKHZhciBnPTA7ZzxmO2crKyl7dmFyIGg9ZFsrK2NdPDw4fGRbKytjXTszMjc2OCZoJiYoaD0tKDErKDY1NTM1XmgpKSksZS5wdXNoKGgpfWIuaXA9Y31mdW5jdGlvbiBUYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yi5zdG9yZTtkfHwoZD1iLnN0b3JlPVtdKTt2YXIgZT1jLnBvcCgpLGY9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJXU1wiLGUsZiksZFtmXT1lfWZ1bmN0aW9uIFVjKGIpe3ZhciBjPWIuc3RhY2ssZD1iLnN0b3JlLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSU1wiLGUpO3ZhciBmPWQmJmRbZV18fDA7Yy5wdXNoKGYpfWZ1bmN0aW9uIFZjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJXQ1ZUUFwiLGQsZSksYi5jdnRbZV09ZC82NH1mdW5jdGlvbiBXYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSQ1ZUXCIsZCksYy5wdXNoKDY0KmIuY3Z0W2RdKX1mdW5jdGlvbiBYYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9Yy56MltlXTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJHQ1tcIitiK1wiXVwiLGUpLGQucHVzaCg2NCpjLmRwdi5kaXN0YW5jZShmLHpmLGIsITEpKX1mdW5jdGlvbiBZYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejFbZV0saD1jLnowW2ZdLGk9Yy5kcHYuZGlzdGFuY2UoaCxnLGIsYik7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiTURbXCIrYitcIl1cIixlLGYsXCItPlwiLGkpLGMuc3RhY2sucHVzaChNYXRoLnJvdW5kKDY0KmkpKX1mdW5jdGlvbiBaYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNUFBFTVtdXCIpLGIuc3RhY2sucHVzaChiLnBwZW0pfWZ1bmN0aW9uICRjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkZMSVBPTltdXCIpLGIuYXV0b0ZsaXA9ITB9ZnVuY3Rpb24gX2MoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkxUW11cIixkLGUpLGMucHVzaChlPGQ/MTowKX1mdW5jdGlvbiBhZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTFRFUVtdXCIsZCxlKSxjLnB1c2goZTw9ZD8xOjApfWZ1bmN0aW9uIGJkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJHVFtdXCIsZCxlKSxjLnB1c2goZT5kPzE6MCl9ZnVuY3Rpb24gY2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdURVFbXVwiLGQsZSksYy5wdXNoKGU+PWQ/MTowKX1mdW5jdGlvbiBkZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRVFbXVwiLGQsZSksYy5wdXNoKGQ9PT1lPzE6MCl9ZnVuY3Rpb24gZWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5FUVtdXCIsZCxlKSxjLnB1c2goZCE9PWU/MTowKX1mdW5jdGlvbiBmZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJPRERbXVwiLGQpLGMucHVzaChNYXRoLnRydW5jKGQpJTI/MTowKX1mdW5jdGlvbiBnZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFVkVOW11cIixkKSxjLnB1c2goTWF0aC50cnVuYyhkKSUyPzA6MSl9ZnVuY3Rpb24gaGQoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJJRltdXCIsYyksY3x8KFliKGIsITApLGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVJRltdXCIpKX1mdW5jdGlvbiBpZChiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFSUZbXVwiKX1mdW5jdGlvbiBqZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQU5EW11cIixkLGUpLGMucHVzaChkJiZlPzE6MCl9ZnVuY3Rpb24ga2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk9SW11cIixkLGUpLGMucHVzaChkfHxlPzE6MCl9ZnVuY3Rpb24gbGQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTk9UW11cIixkKSxjLnB1c2goZD8wOjEpfWZ1bmN0aW9uIG1kKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1jLmZ2LGc9Yy5wdixoPWMucHBlbSxpPWMuZGVsdGFCYXNlKzE2KihiLTEpLGo9Yy5kZWx0YVNoaWZ0LGs9Yy56MDthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJERUxUQVBbXCIrYitcIl1cIixlLGQpO2Zvcih2YXIgbD0wO2w8ZTtsKyspe3ZhciBtPWQucG9wKCksbj1kLnBvcCgpO2lmKGkrKCgyNDAmbik+PjQpPT09aCl7dmFyIG89KDE1Jm4pLTg7bz49MCYmbysrLGEuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIkRFTFRBUEZJWFwiLG0sXCJieVwiLG8qaik7dmFyIHA9a1ttXTtmLnNldFJlbGF0aXZlKHAscCxvKmosZyl9fX1mdW5jdGlvbiBuZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTREJbXVwiLGQpLGIuZGVsdGFCYXNlPWR9ZnVuY3Rpb24gb2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0RTW11cIixkKSxiLmRlbHRhU2hpZnQ9TWF0aC5wb3coLjUsZCl9ZnVuY3Rpb24gcGQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkFERFtdXCIsZCxlKSxjLnB1c2goZStkKX1mdW5jdGlvbiBxZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1VCW11cIixkLGUpLGMucHVzaChlLWQpfWZ1bmN0aW9uIHJkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJESVZbXVwiLGQsZSksYy5wdXNoKDY0KmUvZCl9ZnVuY3Rpb24gc2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk1VTFtdXCIsZCxlKSxjLnB1c2goZSpkLzY0KX1mdW5jdGlvbiB0ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJBQlNbXVwiLGQpLGMucHVzaChNYXRoLmFicyhkKSl9ZnVuY3Rpb24gdWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTkVHW11cIixkKSxjLnB1c2goLWQpfWZ1bmN0aW9uIHZkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkZMT09SW11cIixkKSxjLnB1c2goNjQqTWF0aC5mbG9vcihkLzY0KSl9ZnVuY3Rpb24gd2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQ0VJTElOR1tdXCIsZCksYy5wdXNoKDY0Kk1hdGguY2VpbChkLzY0KSl9ZnVuY3Rpb24geGQoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJST1VORFtdXCIpLGQucHVzaCg2NCpjLnJvdW5kKGUvNjQpKX1mdW5jdGlvbiB5ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiV0NWVEZbXVwiLGQsZSksYi5jdnRbZV09ZCpiLnBwZW0vYi5mb250LnVuaXRzUGVyRW19ZnVuY3Rpb24gemQoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWMucHBlbSxnPWMuZGVsdGFCYXNlKzE2KihiLTEpLGg9Yy5kZWx0YVNoaWZ0O2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIkRFTFRBQ1tcIitiK1wiXVwiLGUsZCk7Zm9yKHZhciBpPTA7aTxlO2krKyl7dmFyIGo9ZC5wb3AoKSxrPWQucG9wKCk7aWYoZysoKDI0MCZrKT4+NCk9PT1mKXt2YXIgbD0oMTUmayktODtsPj0wJiZsKys7dmFyIG09bCpoO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIkRFTFRBQ0ZJWFwiLGosXCJieVwiLG0pLGMuY3Z0W2pdKz1tfX19ZnVuY3Rpb24gQWQoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUk9VTkRbXVwiLGMpLGIucm91bmQ9d2Y7dmFyIGQ7c3dpdGNoKDE5MiZjKXtjYXNlIDA6ZD0uNTticmVhaztjYXNlIDY0OmQ9MTticmVhaztjYXNlIDEyODpkPTI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFNST1VORCB2YWx1ZVwiKX1zd2l0Y2goYi5zclBlcmlvZD1kLDQ4JmMpe2Nhc2UgMDpiLnNyUGhhc2U9MDticmVhaztjYXNlIDE2OmIuc3JQaGFzZT0uMjUqZDticmVhaztjYXNlIDMyOmIuc3JQaGFzZT0uNSpkO2JyZWFrO2Nhc2UgNDg6Yi5zclBoYXNlPS43NSpkO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBTUk9VTkQgdmFsdWVcIil9YyY9MTUsYi5zclRocmVzaG9sZD0wPT09Yz8wOihjLzgtLjUpKmR9ZnVuY3Rpb24gQmQoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTNDVST1VORFtdXCIsYyksYi5yb3VuZD13Zjt2YXIgZDtzd2l0Y2goMTkyJmMpe2Nhc2UgMDpkPU1hdGguc3FydCgyKS8yO2JyZWFrO2Nhc2UgNjQ6ZD1NYXRoLnNxcnQoMik7YnJlYWs7Y2FzZSAxMjg6ZD0yKk1hdGguc3FydCgyKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgUzQ1Uk9VTkQgdmFsdWVcIil9c3dpdGNoKGIuc3JQZXJpb2Q9ZCw0OCZjKXtjYXNlIDA6Yi5zclBoYXNlPTA7YnJlYWs7Y2FzZSAxNjpiLnNyUGhhc2U9LjI1KmQ7YnJlYWs7Y2FzZSAzMjpiLnNyUGhhc2U9LjUqZDticmVhaztjYXNlIDQ4OmIuc3JQaGFzZT0uNzUqZDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgUzQ1Uk9VTkQgdmFsdWVcIil9YyY9MTUsYi5zclRocmVzaG9sZD0wPT09Yz8wOihjLzgtLjUpKmR9ZnVuY3Rpb24gQ2QoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUk9GRltdXCIpLGIucm91bmQ9TmJ9ZnVuY3Rpb24gRGQoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlVUR1tdXCIpLGIucm91bmQ9UmJ9ZnVuY3Rpb24gRWQoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUkRUR1tdXCIpLGIucm91bmQ9U2J9ZnVuY3Rpb24gRmQoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTQ0FOQ1RSTFtdXCIsYyl9ZnVuY3Rpb24gR2QoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnoyW2VdLGg9Yy56MVtmXTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTRFBWVExbXCIrYitcIl1cIixlLGYpO3ZhciBpLGo7Yj8oaT1nLnktaC55LGo9aC54LWcueCk6KGk9aC54LWcueCxqPWgueS1nLnkpLGMuZHB2PVViKGksail9ZnVuY3Rpb24gSGQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT0wO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdFVElORk9bXVwiLGQpLDEmZCYmKGU9MzUpLDMyJmQmJihlfD00MDk2KSxjLnB1c2goZSl9ZnVuY3Rpb24gSWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpLGY9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJST0xMW11cIiksYy5wdXNoKGUpLGMucHVzaChkKSxjLnB1c2goZil9ZnVuY3Rpb24gSmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk1BWFtdXCIsZCxlKSxjLnB1c2goTWF0aC5tYXgoZSxkKSl9ZnVuY3Rpb24gS2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk1JTltdXCIsZCxlKSxjLnB1c2goTWF0aC5taW4oZSxkKSl9ZnVuY3Rpb24gTGQoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTQ0FOVFlQRVtdXCIsYyl9ZnVuY3Rpb24gTWQoYil7dmFyIGM9Yi5zdGFjay5wb3AoKSxkPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIklOU1RDVFJMW11cIixjLGQpLGMpe2Nhc2UgMTpyZXR1cm4gdm9pZChiLmluaGliaXRHcmlkRml0PSEhZCk7Y2FzZSAyOnJldHVybiB2b2lkKGIuaWdub3JlQ3Z0PSEhZCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIElOU1RDVFJMW10gc2VsZWN0b3JcIil9fWZ1bmN0aW9uIE5kKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWMucHJvZyxmPWMuaXA7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiUFVTSEJbXCIrYitcIl1cIik7Zm9yKHZhciBnPTA7ZzxiO2crKylkLnB1c2goZVsrK2ZdKTtjLmlwPWZ9ZnVuY3Rpb24gT2QoYixjKXt2YXIgZD1jLmlwLGU9Yy5wcm9nLGY9Yy5zdGFjazthLkRFQlVHJiZjb25zb2xlLmxvZyhjLmlwLFwiUFVTSFdbXCIrYitcIl1cIik7Zm9yKHZhciBnPTA7ZzxiO2crKyl7dmFyIGg9ZVsrK2RdPDw4fGVbKytkXTszMjc2OCZoJiYoaD0tKDErKDY1NTM1XmgpKSksZi5wdXNoKGgpfWMuaXA9ZH1mdW5jdGlvbiBQZChiLGMsZCxlLGYsZyl7dmFyIGgsaSxqLGssbD1nLnN0YWNrLG09YiYmbC5wb3AoKSxuPWwucG9wKCksbz1nLnJwMCxwPWcuejBbb10scT1nLnoxW25dLHI9Zy5taW5EaXMscz1nLmZ2LHQ9Zy5kcHY7aT1oPXQuZGlzdGFuY2UocSxwLCEwLCEwKSxqPWk+PTA/MTotMSxpPU1hdGguYWJzKGkpLGImJihrPWcuY3Z0W21dLGUmJk1hdGguYWJzKGktayk8Zy5jdkN1dEluJiYoaT1rKSksZCYmaTxyJiYoaT1yKSxlJiYoaT1nLnJvdW5kKGkpKSxzLnNldFJlbGF0aXZlKHEscCxqKmksdCkscy50b3VjaChxKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhnLnN0ZXAsKGI/XCJNSVJQW1wiOlwiTURSUFtcIikrKGM/XCJNXCI6XCJtXCIpKyhkP1wiPlwiOlwiX1wiKSsoZT9cIlJcIjpcIl9cIikrKDA9PT1mP1wiR3JcIjoxPT09Zj9cIkJsXCI6Mj09PWY/XCJXaFwiOlwiXCIpK1wiXVwiLGI/bStcIihcIitnLmN2dFttXStcIixcIitrK1wiKVwiOlwiXCIsbixcIihkID1cIixoLFwiLT5cIixqKmksXCIpXCIpLGcucnAxPWcucnAwLGcucnAyPW4sYyYmKGcucnAwPW4pfWZ1bmN0aW9uIFFkKGEpe2E9YXx8e30sYS5lbXB0eXx8KEViKGEuZmFtaWx5TmFtZSxcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIGZhbWlseU5hbWUgaXMgcmVxdWlyZWQuXCIpLEViKGEuc3R5bGVOYW1lLFwiV2hlbiBjcmVhdGluZyBhIG5ldyBGb250IG9iamVjdCwgc3R5bGVOYW1lIGlzIHJlcXVpcmVkLlwiKSxFYihhLnVuaXRzUGVyRW0sXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCB1bml0c1BlckVtIGlzIHJlcXVpcmVkLlwiKSxFYihhLmFzY2VuZGVyLFwiV2hlbiBjcmVhdGluZyBhIG5ldyBGb250IG9iamVjdCwgYXNjZW5kZXIgaXMgcmVxdWlyZWQuXCIpLEViKGEuZGVzY2VuZGVyLFwiV2hlbiBjcmVhdGluZyBhIG5ldyBGb250IG9iamVjdCwgZGVzY2VuZGVyIGlzIHJlcXVpcmVkLlwiKSxFYihhLmRlc2NlbmRlcjwwLFwiRGVzY2VuZGVyIHNob3VsZCBiZSBuZWdhdGl2ZSAoZS5nLiAtNTEyKS5cIiksdGhpcy5uYW1lcz17Zm9udEZhbWlseTp7ZW46YS5mYW1pbHlOYW1lfHxcIiBcIn0sZm9udFN1YmZhbWlseTp7ZW46YS5zdHlsZU5hbWV8fFwiIFwifSxmdWxsTmFtZTp7ZW46YS5mdWxsTmFtZXx8YS5mYW1pbHlOYW1lK1wiIFwiK2Euc3R5bGVOYW1lfSxwb3N0U2NyaXB0TmFtZTp7ZW46YS5wb3N0U2NyaXB0TmFtZXx8KGEuZmFtaWx5TmFtZSthLnN0eWxlTmFtZSkucmVwbGFjZSgvXFxzL2csXCJcIil9LGRlc2lnbmVyOntlbjphLmRlc2lnbmVyfHxcIiBcIn0sZGVzaWduZXJVUkw6e2VuOmEuZGVzaWduZXJVUkx8fFwiIFwifSxtYW51ZmFjdHVyZXI6e2VuOmEubWFudWZhY3R1cmVyfHxcIiBcIn0sbWFudWZhY3R1cmVyVVJMOntlbjphLm1hbnVmYWN0dXJlclVSTHx8XCIgXCJ9LGxpY2Vuc2U6e2VuOmEubGljZW5zZXx8XCIgXCJ9LGxpY2Vuc2VVUkw6e2VuOmEubGljZW5zZVVSTHx8XCIgXCJ9LHZlcnNpb246e2VuOmEudmVyc2lvbnx8XCJWZXJzaW9uIDAuMVwifSxkZXNjcmlwdGlvbjp7ZW46YS5kZXNjcmlwdGlvbnx8XCIgXCJ9LGNvcHlyaWdodDp7ZW46YS5jb3B5cmlnaHR8fFwiIFwifSx0cmFkZW1hcms6e2VuOmEudHJhZGVtYXJrfHxcIiBcIn19LHRoaXMudW5pdHNQZXJFbT1hLnVuaXRzUGVyRW18fDFlMyx0aGlzLmFzY2VuZGVyPWEuYXNjZW5kZXIsdGhpcy5kZXNjZW5kZXI9YS5kZXNjZW5kZXIsdGhpcy5jcmVhdGVkVGltZXN0YW1wPWEuY3JlYXRlZFRpbWVzdGFtcCx0aGlzLnRhYmxlcz17b3MyOnt1c1dlaWdodENsYXNzOmEud2VpZ2h0Q2xhc3N8fHRoaXMudXNXZWlnaHRDbGFzc2VzLk1FRElVTSx1c1dpZHRoQ2xhc3M6YS53aWR0aENsYXNzfHx0aGlzLnVzV2lkdGhDbGFzc2VzLk1FRElVTSxmc1NlbGVjdGlvbjphLmZzU2VsZWN0aW9ufHx0aGlzLmZzU2VsZWN0aW9uVmFsdWVzLlJFR1VMQVJ9fSksdGhpcy5zdXBwb3J0ZWQ9ITAsdGhpcy5nbHlwaHM9bmV3IFNlLkdseXBoU2V0KHRoaXMsYS5nbHlwaHN8fFtdKSx0aGlzLmVuY29kaW5nPW5ldyBYKHRoaXMpLHRoaXMucG9zaXRpb249bmV3IHhiKHRoaXMpLHRoaXMuc3Vic3RpdHV0aW9uPW5ldyB5Yih0aGlzKSx0aGlzLnRhYmxlcz10aGlzLnRhYmxlc3x8e30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJoaW50aW5nXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oaW50aW5nP3RoaXMuX2hpbnRpbmc6XCJ0cnVldHlwZVwiPT09dGhpcy5vdXRsaW5lc0Zvcm1hdD90aGlzLl9oaW50aW5nPW5ldyBNYih0aGlzKTp2b2lkIDB9fSl9ZnVuY3Rpb24gUmQoYSxiKXt2YXIgYz1KU09OLnN0cmluZ2lmeShhKSxkPTI1Njtmb3IodmFyIGUgaW4gYil7dmFyIGY9cGFyc2VJbnQoZSk7aWYoZiYmIShmPDI1Nikpe2lmKEpTT04uc3RyaW5naWZ5KGJbZV0pPT09YylyZXR1cm4gZjtkPD1mJiYoZD1mKzEpfX1yZXR1cm4gYltkXT1hLGR9ZnVuY3Rpb24gU2QoYSxiLGMpe3ZhciBkPVJkKGIubmFtZSxjKTtyZXR1cm5be25hbWU6XCJ0YWdfXCIrYSx0eXBlOlwiVEFHXCIsdmFsdWU6Yi50YWd9LHtuYW1lOlwibWluVmFsdWVfXCIrYSx0eXBlOlwiRklYRURcIix2YWx1ZTpiLm1pblZhbHVlPDwxNn0se25hbWU6XCJkZWZhdWx0VmFsdWVfXCIrYSx0eXBlOlwiRklYRURcIix2YWx1ZTpiLmRlZmF1bHRWYWx1ZTw8MTZ9LHtuYW1lOlwibWF4VmFsdWVfXCIrYSx0eXBlOlwiRklYRURcIix2YWx1ZTpiLm1heFZhbHVlPDwxNn0se25hbWU6XCJmbGFnc19cIithLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcIm5hbWVJRF9cIithLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkfV19ZnVuY3Rpb24gVGQoYSxiLGMpe3ZhciBkPXt9LGU9bmV3IExlLlBhcnNlcihhLGIpO3JldHVybiBkLnRhZz1lLnBhcnNlVGFnKCksZC5taW5WYWx1ZT1lLnBhcnNlRml4ZWQoKSxkLmRlZmF1bHRWYWx1ZT1lLnBhcnNlRml4ZWQoKSxkLm1heFZhbHVlPWUucGFyc2VGaXhlZCgpLGUuc2tpcChcInVTaG9ydFwiLDEpLGQubmFtZT1jW2UucGFyc2VVU2hvcnQoKV18fHt9LGR9ZnVuY3Rpb24gVWQoYSxiLGMsZCl7Zm9yKHZhciBlPVJkKGIubmFtZSxkKSxmPVt7bmFtZTpcIm5hbWVJRF9cIithLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTplfSx7bmFtZTpcImZsYWdzX1wiK2EsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSxnPTA7ZzxjLmxlbmd0aDsrK2cpe3ZhciBoPWNbZ10udGFnO2YucHVzaCh7bmFtZTpcImF4aXNfXCIrYStcIiBcIitoLHR5cGU6XCJGSVhFRFwiLHZhbHVlOmIuY29vcmRpbmF0ZXNbaF08PDE2fSl9cmV0dXJuIGZ9ZnVuY3Rpb24gVmQoYSxiLGMsZCl7dmFyIGU9e30sZj1uZXcgTGUuUGFyc2VyKGEsYik7ZS5uYW1lPWRbZi5wYXJzZVVTaG9ydCgpXXx8e30sZi5za2lwKFwidVNob3J0XCIsMSksZS5jb29yZGluYXRlcz17fTtmb3IodmFyIGc9MDtnPGMubGVuZ3RoOysrZyllLmNvb3JkaW5hdGVzW2NbZ10udGFnXT1mLnBhcnNlRml4ZWQoKTtyZXR1cm4gZX1mdW5jdGlvbiBXZChhLGIpe3ZhciBjPW5ldyBJZS5UYWJsZShcImZ2YXJcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwib2Zmc2V0VG9EYXRhXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiY291bnRTaXplUGFpcnNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Mn0se25hbWU6XCJheGlzQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5heGVzLmxlbmd0aH0se25hbWU6XCJheGlzU2l6ZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToyMH0se25hbWU6XCJpbnN0YW5jZUNvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEuaW5zdGFuY2VzLmxlbmd0aH0se25hbWU6XCJpbnN0YW5jZVNpemVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6NCs0KmEuYXhlcy5sZW5ndGh9XSk7Yy5vZmZzZXRUb0RhdGE9Yy5zaXplT2YoKTtmb3IodmFyIGQ9MDtkPGEuYXhlcy5sZW5ndGg7ZCsrKWMuZmllbGRzPWMuZmllbGRzLmNvbmNhdChTZChkLGEuYXhlc1tkXSxiKSk7Zm9yKHZhciBlPTA7ZTxhLmluc3RhbmNlcy5sZW5ndGg7ZSsrKWMuZmllbGRzPWMuZmllbGRzLmNvbmNhdChVZChlLGEuaW5zdGFuY2VzW2VdLGEuYXhlcyxiKSk7cmV0dXJuIGN9ZnVuY3Rpb24gWGQoYSxiLGMpe3ZhciBkPW5ldyBMZS5QYXJzZXIoYSxiKSxlPWQucGFyc2VVTG9uZygpO3hlLmFyZ3VtZW50KDY1NTM2PT09ZSxcIlVuc3VwcG9ydGVkIGZ2YXIgdGFibGUgdmVyc2lvbi5cIik7dmFyIGY9ZC5wYXJzZU9mZnNldDE2KCk7ZC5za2lwKFwidVNob3J0XCIsMSk7Zm9yKHZhciBnPWQucGFyc2VVU2hvcnQoKSxoPWQucGFyc2VVU2hvcnQoKSxpPWQucGFyc2VVU2hvcnQoKSxqPWQucGFyc2VVU2hvcnQoKSxrPVtdLGw9MDtsPGc7bCsrKWsucHVzaChUZChhLGIrZitsKmgsYykpO2Zvcih2YXIgbT1bXSxuPWIrZitnKmgsbz0wO288aTtvKyspbS5wdXNoKFZkKGEsbitvKmosayxjKSk7cmV0dXJue2F4ZXM6ayxpbnN0YW5jZXM6bX19ZnVuY3Rpb24gWWQoYSxiKXtiPWJ8fDA7dmFyIGM9bmV3IFEoYSxiKSxkPWMucGFyc2VWZXJzaW9uKDEpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09ZHx8MS4xPT09ZCxcIlVuc3VwcG9ydGVkIEdQT1MgdGFibGUgdmVyc2lvbiBcIitkKSwxPT09ZD97dmVyc2lvbjpkLHNjcmlwdHM6Yy5wYXJzZVNjcmlwdExpc3QoKSxmZWF0dXJlczpjLnBhcnNlRmVhdHVyZUxpc3QoKSxsb29rdXBzOmMucGFyc2VMb29rdXBMaXN0KERmKX06e3ZlcnNpb246ZCxzY3JpcHRzOmMucGFyc2VTY3JpcHRMaXN0KCksZmVhdHVyZXM6Yy5wYXJzZUZlYXR1cmVMaXN0KCksbG9va3VwczpjLnBhcnNlTG9va3VwTGlzdChEZiksdmFyaWF0aW9uczpjLnBhcnNlRmVhdHVyZVZhcmlhdGlvbnNMaXN0KCl9fWZ1bmN0aW9uIFpkKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJHUE9TXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjY1NTM2fSx7bmFtZTpcInNjcmlwdHNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuU2NyaXB0TGlzdChhLnNjcmlwdHMpfSx7bmFtZTpcImZlYXR1cmVzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkZlYXR1cmVMaXN0KGEuZmVhdHVyZXMpfSx7bmFtZTpcImxvb2t1cHNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuTG9va3VwTGlzdChhLmxvb2t1cHMsRWYpfV0pfWZ1bmN0aW9uICRkKGEpe3ZhciBiPXt9O2Euc2tpcChcInVTaG9ydFwiKTt2YXIgYz1hLnBhcnNlVVNob3J0KCk7eGUuYXJndW1lbnQoMD09PWMsXCJVbnN1cHBvcnRlZCBrZXJuIHN1Yi10YWJsZSB2ZXJzaW9uLlwiKSxhLnNraXAoXCJ1U2hvcnRcIiwyKTt2YXIgZD1hLnBhcnNlVVNob3J0KCk7YS5za2lwKFwidVNob3J0XCIsMyk7Zm9yKHZhciBlPTA7ZTxkO2UrPTEpe3ZhciBmPWEucGFyc2VVU2hvcnQoKSxnPWEucGFyc2VVU2hvcnQoKSxoPWEucGFyc2VTaG9ydCgpO2JbZitcIixcIitnXT1ofXJldHVybiBifWZ1bmN0aW9uIF9kKGEpe3ZhciBiPXt9O2Euc2tpcChcInVTaG9ydFwiKSxhLnBhcnNlVUxvbmcoKT4xJiZjb25zb2xlLndhcm4oXCJPbmx5IHRoZSBmaXJzdCBrZXJuIHN1YnRhYmxlIGlzIHN1cHBvcnRlZC5cIiksYS5za2lwKFwidUxvbmdcIik7dmFyIGM9YS5wYXJzZVVTaG9ydCgpLGQ9MjU1JmM7aWYoYS5za2lwKFwidVNob3J0XCIpLDA9PT1kKXt2YXIgZT1hLnBhcnNlVVNob3J0KCk7YS5za2lwKFwidVNob3J0XCIsMyk7Zm9yKHZhciBmPTA7ZjxlO2YrPTEpe3ZhciBnPWEucGFyc2VVU2hvcnQoKSxoPWEucGFyc2VVU2hvcnQoKSxpPWEucGFyc2VTaG9ydCgpO2JbZytcIixcIitoXT1pfX1yZXR1cm4gYn1mdW5jdGlvbiBhZShhLGIpe3ZhciBjPW5ldyBMZS5QYXJzZXIoYSxiKSxkPWMucGFyc2VVU2hvcnQoKTtpZigwPT09ZClyZXR1cm4gJGQoYyk7aWYoMT09PWQpcmV0dXJuIF9kKGMpO3Rocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGtlcm4gdGFibGUgdmVyc2lvbiAoXCIrZCtcIikuXCIpfWZ1bmN0aW9uIGJlKGEsYixjLGQpe2Zvcih2YXIgZT1uZXcgTGUuUGFyc2VyKGEsYiksZj1kP2UucGFyc2VVU2hvcnQ6ZS5wYXJzZVVMb25nLGc9W10saD0wO2g8YysxO2grPTEpe3ZhciBpPWYuY2FsbChlKTtkJiYoaSo9MiksZy5wdXNoKGkpfXJldHVybiBnfWZ1bmN0aW9uIGNlKGEsYyl7YihcImZzXCIpLnJlYWRGaWxlKGEsZnVuY3Rpb24oYSxiKXtpZihhKXJldHVybiBjKGEubWVzc2FnZSk7YyhudWxsLENiKGIpKX0pfWZ1bmN0aW9uIGRlKGEsYil7dmFyIGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2Mub3BlbihcImdldFwiLGEsITApLGMucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIixjLm9ubG9hZD1mdW5jdGlvbigpe3JldHVybiBjLnJlc3BvbnNlP2IobnVsbCxjLnJlc3BvbnNlKTpiKFwiRm9udCBjb3VsZCBub3QgYmUgbG9hZGVkOiBcIitjLnN0YXR1c1RleHQpfSxjLm9uZXJyb3I9ZnVuY3Rpb24oKXtiKFwiRm9udCBjb3VsZCBub3QgYmUgbG9hZGVkXCIpfSxjLnNlbmQoKX1mdW5jdGlvbiBlZShhLGIpe2Zvcih2YXIgYz1bXSxkPTEyLGU9MDtlPGI7ZSs9MSl7dmFyIGY9TGUuZ2V0VGFnKGEsZCksZz1MZS5nZXRVTG9uZyhhLGQrNCksaD1MZS5nZXRVTG9uZyhhLGQrOCksaT1MZS5nZXRVTG9uZyhhLGQrMTIpO2MucHVzaCh7dGFnOmYsY2hlY2tzdW06ZyxvZmZzZXQ6aCxsZW5ndGg6aSxjb21wcmVzc2lvbjohMX0pLGQrPTE2fXJldHVybiBjfWZ1bmN0aW9uIGZlKGEsYil7Zm9yKHZhciBjPVtdLGQ9NDQsZT0wO2U8YjtlKz0xKXt2YXIgZj1MZS5nZXRUYWcoYSxkKSxnPUxlLmdldFVMb25nKGEsZCs0KSxoPUxlLmdldFVMb25nKGEsZCs4KSxpPUxlLmdldFVMb25nKGEsZCsxMiksaj12b2lkIDA7aj1oPGkmJlwiV09GRlwiLGMucHVzaCh7dGFnOmYsb2Zmc2V0OmcsY29tcHJlc3Npb246aixjb21wcmVzc2VkTGVuZ3RoOmgsbGVuZ3RoOml9KSxkKz0yMH1yZXR1cm4gY31mdW5jdGlvbiBnZShhLGIpe2lmKFwiV09GRlwiPT09Yi5jb21wcmVzc2lvbil7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoYS5idWZmZXIsYi5vZmZzZXQrMixiLmNvbXByZXNzZWRMZW5ndGgtMiksZD1uZXcgVWludDhBcnJheShiLmxlbmd0aCk7aWYod2UoYyxkKSxkLmJ5dGVMZW5ndGghPT1iLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJEZWNvbXByZXNzaW9uIGVycm9yOiBcIitiLnRhZytcIiBkZWNvbXByZXNzZWQgbGVuZ3RoIGRvZXNuJ3QgbWF0Y2ggcmVjb3JkZWQgbGVuZ3RoXCIpO3JldHVybntkYXRhOm5ldyBEYXRhVmlldyhkLmJ1ZmZlciwwKSxvZmZzZXQ6MH19cmV0dXJue2RhdGE6YSxvZmZzZXQ6Yi5vZmZzZXR9fWZ1bmN0aW9uIGhlKGEpe3ZhciBiLGMsZCxlPW5ldyBRZCh7ZW1wdHk6ITB9KSxmPW5ldyBEYXRhVmlldyhhLDApLGc9W10saD1MZS5nZXRUYWcoZiwwKTtpZihoPT09U3RyaW5nLmZyb21DaGFyQ29kZSgwLDEsMCwwKXx8XCJ0cnVlXCI9PT1ofHxcInR5cDFcIj09PWgpZS5vdXRsaW5lc0Zvcm1hdD1cInRydWV0eXBlXCIsZD1MZS5nZXRVU2hvcnQoZiw0KSxnPWVlKGYsZCk7ZWxzZSBpZihcIk9UVE9cIj09PWgpZS5vdXRsaW5lc0Zvcm1hdD1cImNmZlwiLGQ9TGUuZ2V0VVNob3J0KGYsNCksZz1lZShmLGQpO2Vsc2V7aWYoXCJ3T0ZGXCIhPT1oKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIE9wZW5UeXBlIHNpZ25hdHVyZSBcIitoKTt2YXIgaT1MZS5nZXRUYWcoZiw0KTtpZihpPT09U3RyaW5nLmZyb21DaGFyQ29kZSgwLDEsMCwwKSllLm91dGxpbmVzRm9ybWF0PVwidHJ1ZXR5cGVcIjtlbHNle2lmKFwiT1RUT1wiIT09aSl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBPcGVuVHlwZSBmbGF2b3IgXCIraCk7ZS5vdXRsaW5lc0Zvcm1hdD1cImNmZlwifWQ9TGUuZ2V0VVNob3J0KGYsMTIpLGc9ZmUoZixkKX1mb3IodmFyIGosayxsLG0sbixvLHAscSxyLHMsdCx1PTA7dTxkO3UrPTEpe3ZhciB2PWdbdV0sdz12b2lkIDA7c3dpdGNoKHYudGFnKXtjYXNlXCJjbWFwXCI6dz1nZShmLHYpLGUudGFibGVzLmNtYXA9TWUucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLmVuY29kaW5nPW5ldyBZKGUudGFibGVzLmNtYXApO2JyZWFrO2Nhc2VcImN2dCBcIjp3PWdlKGYsdiksdD1uZXcgTGUuUGFyc2VyKHcuZGF0YSx3Lm9mZnNldCksZS50YWJsZXMuY3Z0PXQucGFyc2VTaG9ydExpc3Qodi5sZW5ndGgvMik7YnJlYWs7Y2FzZVwiZnZhclwiOms9djticmVhaztjYXNlXCJmcGdtXCI6dz1nZShmLHYpLHQ9bmV3IExlLlBhcnNlcih3LmRhdGEsdy5vZmZzZXQpLGUudGFibGVzLmZwZ209dC5wYXJzZUJ5dGVMaXN0KHYubGVuZ3RoKTticmVhaztjYXNlXCJoZWFkXCI6dz1nZShmLHYpLGUudGFibGVzLmhlYWQ9V2UucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLnVuaXRzUGVyRW09ZS50YWJsZXMuaGVhZC51bml0c1BlckVtLGI9ZS50YWJsZXMuaGVhZC5pbmRleFRvTG9jRm9ybWF0O2JyZWFrO2Nhc2VcImhoZWFcIjp3PWdlKGYsdiksZS50YWJsZXMuaGhlYT1YZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUuYXNjZW5kZXI9ZS50YWJsZXMuaGhlYS5hc2NlbmRlcixlLmRlc2NlbmRlcj1lLnRhYmxlcy5oaGVhLmRlc2NlbmRlcixlLm51bWJlck9mSE1ldHJpY3M9ZS50YWJsZXMuaGhlYS5udW1iZXJPZkhNZXRyaWNzO2JyZWFrO2Nhc2VcImhtdHhcIjpvPXY7YnJlYWs7Y2FzZVwibHRhZ1wiOnc9Z2UoZix2KSxjPVplLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCk7YnJlYWs7Y2FzZVwibWF4cFwiOnc9Z2UoZix2KSxlLnRhYmxlcy5tYXhwPSRlLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS5udW1HbHlwaHM9ZS50YWJsZXMubWF4cC5udW1HbHlwaHM7YnJlYWs7Y2FzZVwibmFtZVwiOnI9djticmVhaztjYXNlXCJPUy8yXCI6dz1nZShmLHYpLGUudGFibGVzLm9zMj1qZi5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpO2JyZWFrO2Nhc2VcInBvc3RcIjp3PWdlKGYsdiksZS50YWJsZXMucG9zdD1rZi5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUuZ2x5cGhOYW1lcz1uZXcgJChlLnRhYmxlcy5wb3N0KTticmVhaztjYXNlXCJwcmVwXCI6dz1nZShmLHYpLHQ9bmV3IExlLlBhcnNlcih3LmRhdGEsdy5vZmZzZXQpLGUudGFibGVzLnByZXA9dC5wYXJzZUJ5dGVMaXN0KHYubGVuZ3RoKTticmVhaztjYXNlXCJnbHlmXCI6bD12O2JyZWFrO2Nhc2VcImxvY2FcIjpxPXY7YnJlYWs7Y2FzZVwiQ0ZGIFwiOmo9djticmVhaztjYXNlXCJrZXJuXCI6cD12O2JyZWFrO2Nhc2VcIkdQT1NcIjptPXY7YnJlYWs7Y2FzZVwiR1NVQlwiOm49djticmVhaztjYXNlXCJtZXRhXCI6cz12fX12YXIgeD1nZShmLHIpO2lmKGUudGFibGVzLm5hbWU9Z2YucGFyc2UoeC5kYXRhLHgub2Zmc2V0LGMpLGUubmFtZXM9ZS50YWJsZXMubmFtZSxsJiZxKXt2YXIgeT0wPT09Yix6PWdlKGYscSksQT1IZi5wYXJzZSh6LmRhdGEsei5vZmZzZXQsZS5udW1HbHlwaHMseSksQj1nZShmLGwpO2UuZ2x5cGhzPXZmLnBhcnNlKEIuZGF0YSxCLm9mZnNldCxBLGUpfWVsc2V7aWYoIWopdGhyb3cgbmV3IEVycm9yKFwiRm9udCBkb2Vzbid0IGNvbnRhaW4gVHJ1ZVR5cGUgb3IgQ0ZGIG91dGxpbmVzLlwiKTt2YXIgQz1nZShmLGopO1ZlLnBhcnNlKEMuZGF0YSxDLm9mZnNldCxlKX12YXIgRD1nZShmLG8pO2lmKFllLnBhcnNlKEQuZGF0YSxELm9mZnNldCxlLm51bWJlck9mSE1ldHJpY3MsZS5udW1HbHlwaHMsZS5nbHlwaHMpLF8oZSkscCl7dmFyIEU9Z2UoZixwKTtlLmtlcm5pbmdQYWlycz1HZi5wYXJzZShFLmRhdGEsRS5vZmZzZXQpfWVsc2UgZS5rZXJuaW5nUGFpcnM9e307aWYobSl7dmFyIEY9Z2UoZixtKTtlLnRhYmxlcy5ncG9zPUZmLnBhcnNlKEYuZGF0YSxGLm9mZnNldCksZS5wb3NpdGlvbi5pbml0KCl9aWYobil7dmFyIEc9Z2UoZixuKTtlLnRhYmxlcy5nc3ViPW9mLnBhcnNlKEcuZGF0YSxHLm9mZnNldCl9aWYoayl7dmFyIEg9Z2UoZixrKTtlLnRhYmxlcy5mdmFyPUNmLnBhcnNlKEguZGF0YSxILm9mZnNldCxlLm5hbWVzKX1pZihzKXt2YXIgST1nZShmLHMpO2UudGFibGVzLm1ldGE9cGYucGFyc2UoSS5kYXRhLEkub2Zmc2V0KSxlLm1ldGFzPWUudGFibGVzLm1ldGF9cmV0dXJuIGV9ZnVuY3Rpb24gaWUoYSxiKXsoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHdpbmRvdz9jZTpkZSkoYSxmdW5jdGlvbihhLGMpe2lmKGEpcmV0dXJuIGIoYSk7dmFyIGQ7dHJ5e2Q9aGUoYyl9Y2F0Y2goYSl7cmV0dXJuIGIoYSxudWxsKX1yZXR1cm4gYihudWxsLGQpfSl9ZnVuY3Rpb24gamUoYSl7cmV0dXJuIGhlKENiKGIoXCJmc1wiKS5yZWFkRmlsZVN5bmMoYSkpKX1TdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0fHxmdW5jdGlvbigpe3ZhciBhPWZ1bmN0aW9uKCl7dHJ5e3ZhciBhPXt9LGI9T2JqZWN0LmRlZmluZVByb3BlcnR5LGM9YihhLGEsYSkmJmJ9Y2F0Y2goYSl7fXJldHVybiBjfSgpLGI9ZnVuY3Rpb24oYSl7aWYobnVsbD09dGhpcyl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgYj1TdHJpbmcodGhpcyksYz1iLmxlbmd0aCxkPWE/TnVtYmVyKGEpOjA7aWYoZCE9ZCYmKGQ9MCksIShkPDB8fGQ+PWMpKXt2YXIgZSxmPWIuY2hhckNvZGVBdChkKTtyZXR1cm4gZj49NTUyOTYmJmY8PTU2MzE5JiZjPmQrMSYmKGU9Yi5jaGFyQ29kZUF0KGQrMSkpPj01NjMyMCYmZTw9NTczNDM/MTAyNCooZi01NTI5NikrZS01NjMyMCs2NTUzNjpmfX07YT9hKFN0cmluZy5wcm90b3R5cGUsXCJjb2RlUG9pbnRBdFwiLHt2YWx1ZTpiLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOlN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQ9Yn0oKTt2YXIga2U9MCxsZT0tMyxtZT1uZXcgYyxuZT1uZXcgYyxvZT1uZXcgVWludDhBcnJheSgzMCkscGU9bmV3IFVpbnQxNkFycmF5KDMwKSxxZT1uZXcgVWludDhBcnJheSgzMCkscmU9bmV3IFVpbnQxNkFycmF5KDMwKSxzZT1uZXcgVWludDhBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLHRlPW5ldyBjLHVlPW5ldyBVaW50OEFycmF5KDMyMCksdmU9bmV3IFVpbnQxNkFycmF5KDE2KTtnKG1lLG5lKSxmKG9lLHBlLDQsMyksZihxZSxyZSwyLDEpLG9lWzI4XT0wLHBlWzI4XT0yNTg7dmFyIHdlPW87cS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiBpc05hTih0aGlzLngxKXx8aXNOYU4odGhpcy55MSl8fGlzTmFOKHRoaXMueDIpfHxpc05hTih0aGlzLnkyKX0scS5wcm90b3R5cGUuYWRkUG9pbnQ9ZnVuY3Rpb24oYSxiKXtcIm51bWJlclwiPT10eXBlb2YgYSYmKChpc05hTih0aGlzLngxKXx8aXNOYU4odGhpcy54MikpJiYodGhpcy54MT1hLHRoaXMueDI9YSksYTx0aGlzLngxJiYodGhpcy54MT1hKSxhPnRoaXMueDImJih0aGlzLngyPWEpKSxcIm51bWJlclwiPT10eXBlb2YgYiYmKChpc05hTih0aGlzLnkxKXx8aXNOYU4odGhpcy55MikpJiYodGhpcy55MT1iLHRoaXMueTI9YiksYjx0aGlzLnkxJiYodGhpcy55MT1iKSxiPnRoaXMueTImJih0aGlzLnkyPWIpKX0scS5wcm90b3R5cGUuYWRkWD1mdW5jdGlvbihhKXt0aGlzLmFkZFBvaW50KGEsbnVsbCl9LHEucHJvdG90eXBlLmFkZFk9ZnVuY3Rpb24oYSl7dGhpcy5hZGRQb2ludChudWxsLGEpfSxxLnByb3RvdHlwZS5hZGRCZXppZXI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXt2YXIgaT10aGlzLGo9W2EsYl0saz1bYyxkXSxsPVtlLGZdLG09W2csaF07dGhpcy5hZGRQb2ludChhLGIpLHRoaXMuYWRkUG9pbnQoZyxoKTtmb3IodmFyIG49MDtuPD0xO24rKyl7dmFyIG89NipqW25dLTEyKmtbbl0rNipsW25dLHE9LTMqaltuXSs5Kmtbbl0tOSpsW25dKzMqbVtuXSxyPTMqa1tuXS0zKmpbbl07aWYoMCE9PXEpe3ZhciBzPU1hdGgucG93KG8sMiktNCpyKnE7aWYoIShzPDApKXt2YXIgdD0oLW8rTWF0aC5zcXJ0KHMpKS8oMipxKTswPHQmJnQ8MSYmKDA9PT1uJiZpLmFkZFgocChqW25dLGtbbl0sbFtuXSxtW25dLHQpKSwxPT09biYmaS5hZGRZKHAoaltuXSxrW25dLGxbbl0sbVtuXSx0KSkpO3ZhciB1PSgtby1NYXRoLnNxcnQocykpLygyKnEpOzA8dSYmdTwxJiYoMD09PW4mJmkuYWRkWChwKGpbbl0sa1tuXSxsW25dLG1bbl0sdSkpLDE9PT1uJiZpLmFkZFkocChqW25dLGtbbl0sbFtuXSxtW25dLHUpKSl9fWVsc2V7aWYoMD09PW8pY29udGludWU7dmFyIHY9LXIvbzswPHYmJnY8MSYmKDA9PT1uJiZpLmFkZFgocChqW25dLGtbbl0sbFtuXSxtW25dLHYpKSwxPT09biYmaS5hZGRZKHAoaltuXSxrW25dLGxbbl0sbVtuXSx2KSkpfX19LHEucHJvdG90eXBlLmFkZFF1YWQ9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPWErMi8zKihjLWEpLGg9YisyLzMqKGQtYiksaT1nKzEvMyooZS1hKSxqPWgrMS8zKihmLWIpO3RoaXMuYWRkQmV6aWVyKGEsYixnLGgsaSxqLGUsZil9LHIucHJvdG90eXBlLm1vdmVUbz1mdW5jdGlvbihhLGIpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIk1cIix4OmEseTpifSl9LHIucHJvdG90eXBlLmxpbmVUbz1mdW5jdGlvbihhLGIpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIkxcIix4OmEseTpifSl9LHIucHJvdG90eXBlLmN1cnZlVG89ci5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbz1mdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiQ1wiLHgxOmEseTE6Yix4MjpjLHkyOmQseDplLHk6Zn0pfSxyLnByb3RvdHlwZS5xdWFkVG89ci5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbz1mdW5jdGlvbihhLGIsYyxkKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJRXCIseDE6YSx5MTpiLHg6Yyx5OmR9KX0sci5wcm90b3R5cGUuY2xvc2U9ci5wcm90b3R5cGUuY2xvc2VQYXRoPWZ1bmN0aW9uKCl7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiWlwifSl9LHIucHJvdG90eXBlLmV4dGVuZD1mdW5jdGlvbihhKXtpZihhLmNvbW1hbmRzKWE9YS5jb21tYW5kcztlbHNlIGlmKGEgaW5zdGFuY2VvZiBxKXt2YXIgYj1hO3JldHVybiB0aGlzLm1vdmVUbyhiLngxLGIueTEpLHRoaXMubGluZVRvKGIueDIsYi55MSksdGhpcy5saW5lVG8oYi54MixiLnkyKSx0aGlzLmxpbmVUbyhiLngxLGIueTIpLHZvaWQgdGhpcy5jbG9zZSgpfUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuY29tbWFuZHMsYSl9LHIucHJvdG90eXBlLmdldEJvdW5kaW5nQm94PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMsYj1uZXcgcSxjPTAsZD0wLGU9MCxmPTAsZz0wO2c8dGhpcy5jb21tYW5kcy5sZW5ndGg7ZysrKXt2YXIgaD1hLmNvbW1hbmRzW2ddO3N3aXRjaChoLnR5cGUpe2Nhc2VcIk1cIjpiLmFkZFBvaW50KGgueCxoLnkpLGM9ZT1oLngsZD1mPWgueTticmVhaztjYXNlXCJMXCI6Yi5hZGRQb2ludChoLngsaC55KSxlPWgueCxmPWgueTticmVhaztjYXNlXCJRXCI6Yi5hZGRRdWFkKGUsZixoLngxLGgueTEsaC54LGgueSksZT1oLngsZj1oLnk7YnJlYWs7Y2FzZVwiQ1wiOmIuYWRkQmV6aWVyKGUsZixoLngxLGgueTEsaC54MixoLnkyLGgueCxoLnkpLGU9aC54LGY9aC55O2JyZWFrO2Nhc2VcIlpcIjplPWMsZj1kO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBwYXRoIGNvbW1hbmQgXCIraC50eXBlKX19cmV0dXJuIGIuaXNFbXB0eSgpJiZiLmFkZFBvaW50KDAsMCksYn0sci5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2EuYmVnaW5QYXRoKCk7Zm9yKHZhciBjPTA7Yzx0aGlzLmNvbW1hbmRzLmxlbmd0aDtjKz0xKXt2YXIgZD1iLmNvbW1hbmRzW2NdO1wiTVwiPT09ZC50eXBlP2EubW92ZVRvKGQueCxkLnkpOlwiTFwiPT09ZC50eXBlP2EubGluZVRvKGQueCxkLnkpOlwiQ1wiPT09ZC50eXBlP2EuYmV6aWVyQ3VydmVUbyhkLngxLGQueTEsZC54MixkLnkyLGQueCxkLnkpOlwiUVwiPT09ZC50eXBlP2EucXVhZHJhdGljQ3VydmVUbyhkLngxLGQueTEsZC54LGQueSk6XCJaXCI9PT1kLnR5cGUmJmEuY2xvc2VQYXRoKCl9dGhpcy5maWxsJiYoYS5maWxsU3R5bGU9dGhpcy5maWxsLGEuZmlsbCgpKSx0aGlzLnN0cm9rZSYmKGEuc3Ryb2tlU3R5bGU9dGhpcy5zdHJva2UsYS5saW5lV2lkdGg9dGhpcy5zdHJva2VXaWR0aCxhLnN0cm9rZSgpKX0sci5wcm90b3R5cGUudG9QYXRoRGF0YT1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGIpe3JldHVybiBNYXRoLnJvdW5kKGIpPT09Yj9cIlwiK01hdGgucm91bmQoYik6Yi50b0ZpeGVkKGEpfWZ1bmN0aW9uIGMoKXtmb3IodmFyIGE9YXJndW1lbnRzLGM9XCJcIixkPTA7ZDxhcmd1bWVudHMubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF07ZT49MCYmZD4wJiYoYys9XCIgXCIpLGMrPWIoZSl9cmV0dXJuIGN9dmFyIGQ9dGhpczthPXZvaWQgMCE9PWE/YToyO2Zvcih2YXIgZT1cIlwiLGY9MDtmPHRoaXMuY29tbWFuZHMubGVuZ3RoO2YrPTEpe3ZhciBnPWQuY29tbWFuZHNbZl07XCJNXCI9PT1nLnR5cGU/ZSs9XCJNXCIrYyhnLngsZy55KTpcIkxcIj09PWcudHlwZT9lKz1cIkxcIitjKGcueCxnLnkpOlwiQ1wiPT09Zy50eXBlP2UrPVwiQ1wiK2MoZy54MSxnLnkxLGcueDIsZy55MixnLngsZy55KTpcIlFcIj09PWcudHlwZT9lKz1cIlFcIitjKGcueDEsZy55MSxnLngsZy55KTpcIlpcIj09PWcudHlwZSYmKGUrPVwiWlwiKX1yZXR1cm4gZX0sci5wcm90b3R5cGUudG9TVkc9ZnVuY3Rpb24oYSl7dmFyIGI9JzxwYXRoIGQ9XCInO3JldHVybiBiKz10aGlzLnRvUGF0aERhdGEoYSksYis9J1wiJyx0aGlzLmZpbGwmJlwiYmxhY2tcIiE9PXRoaXMuZmlsbCYmKG51bGw9PT10aGlzLmZpbGw/Yis9JyBmaWxsPVwibm9uZVwiJzpiKz0nIGZpbGw9XCInK3RoaXMuZmlsbCsnXCInKSx0aGlzLnN0cm9rZSYmKGIrPScgc3Ryb2tlPVwiJyt0aGlzLnN0cm9rZSsnXCIgc3Ryb2tlLXdpZHRoPVwiJyt0aGlzLnN0cm9rZVdpZHRoKydcIicpLGIrPVwiLz5cIn0sci5wcm90b3R5cGUudG9ET01FbGVtZW50PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudG9QYXRoRGF0YShhKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJwYXRoXCIpO3JldHVybiBjLnNldEF0dHJpYnV0ZShcImRcIixiKSxjfTt2YXIgeGU9e2ZhaWw6cyxhcmd1bWVudDp0LGFzc2VydDp0fSx5ZT0zMjc2OCx6ZT0yMTQ3NDgzNjQ4LEFlPXt9LEJlPXt9LENlPXt9O0JlLkJZVEU9ZnVuY3Rpb24oYSl7cmV0dXJuIHhlLmFyZ3VtZW50KGE+PTAmJmE8PTI1NSxcIkJ5dGUgdmFsdWUgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMjU1LlwiKSxbYV19LENlLkJZVEU9dSgxKSxCZS5DSEFSPWZ1bmN0aW9uKGEpe3JldHVyblthLmNoYXJDb2RlQXQoMCldfSxDZS5DSEFSPXUoMSksQmUuQ0hBUkFSUkFZPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKz0xKWJbY109YS5jaGFyQ29kZUF0KGMpO3JldHVybiBifSxDZS5DSEFSQVJSQVk9ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSxCZS5VU0hPUlQ9ZnVuY3Rpb24oYSl7cmV0dXJuW2E+PjgmMjU1LDI1NSZhXX0sQ2UuVVNIT1JUPXUoMiksQmUuU0hPUlQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGE+PXllJiYoYT0tKDIqeWUtYSkpLFthPj44JjI1NSwyNTUmYV19LENlLlNIT1JUPXUoMiksQmUuVUlOVDI0PWZ1bmN0aW9uKGEpe3JldHVyblthPj4xNiYyNTUsYT4+OCYyNTUsMjU1JmFdfSxDZS5VSU5UMjQ9dSgzKSxCZS5VTE9ORz1mdW5jdGlvbihhKXtyZXR1cm5bYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLlVMT05HPXUoNCksQmUuTE9ORz1mdW5jdGlvbihhKXtyZXR1cm4gYT49emUmJihhPS0oMip6ZS1hKSksW2E+PjI0JjI1NSxhPj4xNiYyNTUsYT4+OCYyNTUsMjU1JmFdfSxDZS5MT05HPXUoNCksQmUuRklYRUQ9QmUuVUxPTkcsQ2UuRklYRUQ9Q2UuVUxPTkcsQmUuRldPUkQ9QmUuU0hPUlQsQ2UuRldPUkQ9Q2UuU0hPUlQsQmUuVUZXT1JEPUJlLlVTSE9SVCxDZS5VRldPUkQ9Q2UuVVNIT1JULEJlLkxPTkdEQVRFVElNRT1mdW5jdGlvbihhKXtyZXR1cm5bMCwwLDAsMCxhPj4yNCYyNTUsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuTE9OR0RBVEVUSU1FPXUoOCksQmUuVEFHPWZ1bmN0aW9uKGEpe3JldHVybiB4ZS5hcmd1bWVudCg0PT09YS5sZW5ndGgsXCJUYWcgc2hvdWxkIGJlIGV4YWN0bHkgNCBBU0NJSSBjaGFyYWN0ZXJzLlwiKSxbYS5jaGFyQ29kZUF0KDApLGEuY2hhckNvZGVBdCgxKSxhLmNoYXJDb2RlQXQoMiksYS5jaGFyQ29kZUF0KDMpXX0sQ2UuVEFHPXUoNCksQmUuQ2FyZDg9QmUuQllURSxDZS5DYXJkOD1DZS5CWVRFLEJlLkNhcmQxNj1CZS5VU0hPUlQsQ2UuQ2FyZDE2PUNlLlVTSE9SVCxCZS5PZmZTaXplPUJlLkJZVEUsQ2UuT2ZmU2l6ZT1DZS5CWVRFLEJlLlNJRD1CZS5VU0hPUlQsQ2UuU0lEPUNlLlVTSE9SVCxCZS5OVU1CRVI9ZnVuY3Rpb24oYSl7cmV0dXJuIGE+PS0xMDcmJmE8PTEwNz9bYSsxMzldOmE+PTEwOCYmYTw9MTEzMT8oYS09MTA4LFsyNDcrKGE+PjgpLDI1NSZhXSk6YT49LTExMzEmJmE8PS0xMDg/KGE9LWEtMTA4LFsyNTErKGE+PjgpLDI1NSZhXSk6YT49LTMyNzY4JiZhPD0zMjc2Nz9CZS5OVU1CRVIxNihhKTpCZS5OVU1CRVIzMihhKVxufSxDZS5OVU1CRVI9ZnVuY3Rpb24oYSl7cmV0dXJuIEJlLk5VTUJFUihhKS5sZW5ndGh9LEJlLk5VTUJFUjE2PWZ1bmN0aW9uKGEpe3JldHVyblsyOCxhPj44JjI1NSwyNTUmYV19LENlLk5VTUJFUjE2PXUoMyksQmUuTlVNQkVSMzI9ZnVuY3Rpb24oYSl7cmV0dXJuWzI5LGE+PjI0JjI1NSxhPj4xNiYyNTUsYT4+OCYyNTUsMjU1JmFdfSxDZS5OVU1CRVIzMj11KDUpLEJlLlJFQUw9ZnVuY3Rpb24oYSl7dmFyIGI9YS50b1N0cmluZygpLGM9L1xcLihcXGQqPykoPzo5ezUsMjB9fDB7NSwyMH0pXFxkezAsMn0oPzplKC4rKXwkKS8uZXhlYyhiKTtpZihjKXt2YXIgZD1wYXJzZUZsb2F0KFwiMWVcIisoKGNbMl0/K2NbMl06MCkrY1sxXS5sZW5ndGgpKTtiPShNYXRoLnJvdW5kKGEqZCkvZCkudG9TdHJpbmcoKX1mb3IodmFyIGU9XCJcIixmPTAsZz1iLmxlbmd0aDtmPGc7Zis9MSl7dmFyIGg9YltmXTtlKz1cImVcIj09PWg/XCItXCI9PT1iWysrZl0/XCJjXCI6XCJiXCI6XCIuXCI9PT1oP1wiYVwiOlwiLVwiPT09aD9cImVcIjpofWUrPTEmZS5sZW5ndGg/XCJmXCI6XCJmZlwiO2Zvcih2YXIgaT1bMzBdLGo9MCxrPWUubGVuZ3RoO2o8aztqKz0yKWkucHVzaChwYXJzZUludChlLnN1YnN0cihqLDIpLDE2KSk7cmV0dXJuIGl9LENlLlJFQUw9ZnVuY3Rpb24oYSl7cmV0dXJuIEJlLlJFQUwoYSkubGVuZ3RofSxCZS5OQU1FPUJlLkNIQVJBUlJBWSxDZS5OQU1FPUNlLkNIQVJBUlJBWSxCZS5TVFJJTkc9QmUuQ0hBUkFSUkFZLENlLlNUUklORz1DZS5DSEFSQVJSQVksQWUuVVRGOD1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPVtdLGU9YyxmPTA7ZjxlO2YrKyxiKz0xKWRbZl09YS5nZXRVaW50OChiKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGQpfSxBZS5VVEYxNj1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPVtdLGU9Yy8yLGY9MDtmPGU7ZisrLGIrPTIpZFtmXT1hLmdldFVpbnQxNihiKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGQpfSxCZS5VVEYxNj1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YS5sZW5ndGg7Yys9MSl7dmFyIGQ9YS5jaGFyQ29kZUF0KGMpO2JbYi5sZW5ndGhdPWQ+PjgmMjU1LGJbYi5sZW5ndGhdPTI1NSZkfXJldHVybiBifSxDZS5VVEYxNj1mdW5jdGlvbihhKXtyZXR1cm4gMiphLmxlbmd0aH07dmFyIERlPXtcIngtbWFjLWNyb2F0aWFuXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7FoOKEosK0wqjiiaDFvcOY4oiewrHiiaTiiaXiiIbCteKIguKIkeKIj8Wh4oirwqrCus6pxb7DuMK/wqHCrOKImsaS4omIxIbCq8SM4oCmwqDDgMODw5XFksWTxJDigJTigJzigJ3igJjigJnDt+KXiu+jv8Kp4oGE4oKs4oC54oC6w4bCu+KAk8K34oCa4oCe4oCww4LEh8OBxI3DiMONw47Dj8OMw5PDlMSRw5LDmsObw5nEscuGy5zCr8+Aw4vLmsK4w4rDpsuHXCIsXCJ4LW1hYy1jeXJpbGxpY1wiOlwi0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr+KAoMKw0pDCo8Kn4oCiwrbQhsKuwqnihKLQgtGS4omg0IPRk+KInsKx4omk4oml0ZbCtdKR0IjQhNGU0IfRl9CJ0ZnQitGa0ZjQhcKs4oiaxpLiiYjiiIbCq8K74oCmwqDQi9Gb0IzRnNGV4oCT4oCU4oCc4oCd4oCY4oCZw7figJ7QjtGe0I/Rn+KEltCB0ZHRj9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGOXCIsXCJ4LW1hYy1nYWVsaWNcIjpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jhuILCseKJpOKJpeG4g8SKxIvhuIrhuIvhuJ7huJ/EoMSh4bmAw6bDuOG5geG5luG5l8m8xpLFv+G5oMKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnhuaHhupvDv8W44bmq4oKs4oC54oC6xbbFt+G5q8K34buy4buz4oGKw4LDisOBw4vDiMONw47Dj8OMw5PDlOKZo8OSw5rDm8OZxLHDncO9xbTFteG6hOG6heG6gOG6geG6guG6g1wiLFwieC1tYWMtZ3JlZWtcIjpcIsOEwrnCssOJwrPDlsOczoXDoMOiw6TOhMKow6fDqcOow6rDq8Kj4oSiw67Dr+KAosK94oCww7TDtsKm4oKsw7nDu8O84oCgzpPOlM6YzpvOns6gw5/CrsKpzqPOqsKn4omgwrDCt86RwrHiiaTiiaXCpc6SzpXOls6XzpnOms6czqbOq86ozqnOrM6dwqzOn86h4omIzqTCq8K74oCmwqDOpc6nzobOiMWT4oCT4oCV4oCc4oCd4oCY4oCZw7fOic6KzozOjs6tzq7Or8+Mzo/Pjc6xzrLPiM60zrXPhs6zzrfOuc6+zrrOu868zr3Ov8+Az47Pgc+Dz4TOuM+Jz4LPh8+FzrbPis+LzpDOsMKtXCIsXCJ4LW1hYy1pY2VsYW5kaWNcIjpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zDncKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCus6pw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhOKCrMOQw7DDnsO+w73Ct+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvo7/DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIixcIngtbWFjLWludWl0XCI6XCLhkIPhkIThkIXhkIbhkIrhkIvhkLHhkLLhkLPhkLThkLjhkLnhkYnhkY7hkY/hkZDhkZHhkZXhkZbhkabhka3hka7hka/hkbDhkbLhkbPhkoPhkovhkozhko3hko7hkpDhkpHCsOGSoeGSpeGSpuKAosK24ZKnwq7CqeKEouGSqOGSquGSq+GSu+GTguGTg+GThOGTheGTh+GTiOGTkOGTr+GTsOGTseGTsuGTtOGTteGUheGTleGTluGTl+GTmOGTmuGTm+GTquGUqOGUqeGUquGUq+GUreKApsKg4ZSu4ZS+4ZWV4ZWW4ZWX4oCT4oCU4oCc4oCd4oCY4oCZ4ZWY4ZWZ4ZWa4ZWd4ZWG4ZWH4ZWI4ZWJ4ZWL4ZWM4ZWQ4ZW/4ZaA4ZaB4ZaC4ZaD4ZaE4ZaF4ZaP4ZaQ4ZaR4ZaS4ZaT4ZaU4ZaV4Zmx4Zmy4Zmz4Zm04Zm14Zm24ZaW4Zag4Zah4Zai4Zaj4Zak4Zal4Zam4ZW8xYHFglwiLFwieC1tYWMtY2VcIjpcIsOExIDEgcOJxITDlsOcw6HEhcSMw6TEjcSGxIfDqcW5xbrEjsOtxI/EksSTxJbDs8SXw7TDtsO1w7rEmsSbw7zigKDCsMSYwqPCp+KAosK2w5/CrsKp4oSixJnCqOKJoMSjxK7Er8Sq4omk4omlxKvEtuKIguKIkcWCxLvEvMS9xL7EucS6xYXFhsWDwqziiJrFhMWH4oiGwqvCu+KApsKgxYjFkMOVxZHFjOKAk+KAlOKAnOKAneKAmOKAmcO34peKxY3FlMWVxZjigLnigLrFmcWWxZfFoOKAmuKAnsWhxZrFm8OBxaTFpcONxb3FvsWqw5PDlMWrxa7DmsWvxbDFscWyxbPDncO9xLfFu8WBxbzEosuHXCIsbWFjaW50b3NoOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCus6pw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhOKCrOKAueKAuu+sge+sguKAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+jv8OSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiLFwieC1tYWMtcm9tYW5pYW5cIjpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMSCyJjiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrOqcSDyJnCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTigqzigLnigLrImsib4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU76O/w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCIsXCJ4LW1hYy10dXJraXNoXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK6zqnDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W4xJ7En8SwxLHFnsWf4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU76O/w5LDmsObw5nvoqDLhsucwq/LmMuZy5rCuMudy5vLh1wifTtBZS5NQUNTVFJJTkc9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9RGVbZF07aWYodm9pZCAwIT09ZSl7Zm9yKHZhciBmPVwiXCIsZz0wO2c8YztnKyspe3ZhciBoPWEuZ2V0VWludDgoYitnKTtmKz1oPD0xMjc/U3RyaW5nLmZyb21DaGFyQ29kZShoKTplWzEyNyZoXX1yZXR1cm4gZn19O3ZhciBFZSxGZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBXZWFrTWFwJiZuZXcgV2Vha01hcCxHZT1mdW5jdGlvbihhKXtpZighRWUpe0VlPXt9O2Zvcih2YXIgYiBpbiBEZSlFZVtiXT1uZXcgU3RyaW5nKGIpfXZhciBjPUVlW2FdO2lmKHZvaWQgMCE9PWMpe2lmKEZlKXt2YXIgZD1GZS5nZXQoYyk7aWYodm9pZCAwIT09ZClyZXR1cm4gZH12YXIgZT1EZVthXTtpZih2b2lkIDAhPT1lKXtmb3IodmFyIGY9e30sZz0wO2c8ZS5sZW5ndGg7ZysrKWZbZS5jaGFyQ29kZUF0KGcpXT1nKzEyODtyZXR1cm4gRmUmJkZlLnNldChjLGYpLGZ9fX07QmUuTUFDU1RSSU5HPWZ1bmN0aW9uKGEsYil7dmFyIGM9R2UoYik7aWYodm9pZCAwIT09Yyl7Zm9yKHZhciBkPVtdLGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIGY9YS5jaGFyQ29kZUF0KGUpO2lmKGY+PTEyOCYmdm9pZCAwPT09KGY9Y1tmXSkpcmV0dXJuO2RbZV09Zn1yZXR1cm4gZH19LENlLk1BQ1NUUklORz1mdW5jdGlvbihhLGIpe3ZhciBjPUJlLk1BQ1NUUklORyhhLGIpO3JldHVybiB2b2lkIDAhPT1jP2MubGVuZ3RoOjB9LEJlLlZBUkRFTFRBUz1mdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPVtdO2I8YS5sZW5ndGg7KXt2YXIgZD1hW2JdO2I9MD09PWQ/dyhhLGIsYyk6ZD49LTEyOCYmZDw9MTI3P3goYSxiLGMpOnkoYSxiLGMpfXJldHVybiBjfSxCZS5JTkRFWD1mdW5jdGlvbihhKXtmb3IodmFyIGI9MSxjPVtiXSxkPVtdLGU9MDtlPGEubGVuZ3RoO2UrPTEpe3ZhciBmPUJlLk9CSkVDVChhW2VdKTtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkLGYpLGIrPWYubGVuZ3RoLGMucHVzaChiKX1pZigwPT09ZC5sZW5ndGgpcmV0dXJuWzAsMF07Zm9yKHZhciBnPVtdLGg9MStNYXRoLmZsb29yKE1hdGgubG9nKGIpL01hdGgubG9nKDIpKS84fDAsaT1bdm9pZCAwLEJlLkJZVEUsQmUuVVNIT1JULEJlLlVJTlQyNCxCZS5VTE9OR11baF0saj0wO2o8Yy5sZW5ndGg7ais9MSl7dmFyIGs9aShjW2pdKTtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShnLGspfXJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0KEJlLkNhcmQxNihhLmxlbmd0aCksQmUuT2ZmU2l6ZShoKSxnLGQpfSxDZS5JTkRFWD1mdW5jdGlvbihhKXtyZXR1cm4gQmUuSU5ERVgoYSkubGVuZ3RofSxCZS5ESUNUPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPU9iamVjdC5rZXlzKGEpLGQ9Yy5sZW5ndGgsZT0wO2U8ZDtlKz0xKXt2YXIgZj1wYXJzZUludChjW2VdLDApLGc9YVtmXTtiPWIuY29uY2F0KEJlLk9QRVJBTkQoZy52YWx1ZSxnLnR5cGUpKSxiPWIuY29uY2F0KEJlLk9QRVJBVE9SKGYpKX1yZXR1cm4gYn0sQ2UuRElDVD1mdW5jdGlvbihhKXtyZXR1cm4gQmUuRElDVChhKS5sZW5ndGh9LEJlLk9QRVJBVE9SPWZ1bmN0aW9uKGEpe3JldHVybiBhPDEyMDA/W2FdOlsxMixhLTEyMDBdfSxCZS5PUEVSQU5EPWZ1bmN0aW9uKGEsYil7dmFyIGM9W107aWYoQXJyYXkuaXNBcnJheShiKSlmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrPTEpeGUuYXJndW1lbnQoYS5sZW5ndGg9PT1iLmxlbmd0aCxcIk5vdCBlbm91Z2ggYXJndW1lbnRzIGdpdmVuIGZvciB0eXBlXCIrYiksYz1jLmNvbmNhdChCZS5PUEVSQU5EKGFbZF0sYltkXSkpO2Vsc2UgaWYoXCJTSURcIj09PWIpYz1jLmNvbmNhdChCZS5OVU1CRVIoYSkpO2Vsc2UgaWYoXCJvZmZzZXRcIj09PWIpYz1jLmNvbmNhdChCZS5OVU1CRVIzMihhKSk7ZWxzZSBpZihcIm51bWJlclwiPT09YiljPWMuY29uY2F0KEJlLk5VTUJFUihhKSk7ZWxzZXtpZihcInJlYWxcIiE9PWIpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcGVyYW5kIHR5cGUgXCIrYik7Yz1jLmNvbmNhdChCZS5SRUFMKGEpKX1yZXR1cm4gY30sQmUuT1A9QmUuQllURSxDZS5PUD1DZS5CWVRFO3ZhciBIZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBXZWFrTWFwJiZuZXcgV2Vha01hcDtCZS5DSEFSU1RSSU5HPWZ1bmN0aW9uKGEpe2lmKEhlKXt2YXIgYj1IZS5nZXQoYSk7aWYodm9pZCAwIT09YilyZXR1cm4gYn1mb3IodmFyIGM9W10sZD1hLmxlbmd0aCxlPTA7ZTxkO2UrPTEpe3ZhciBmPWFbZV07Yz1jLmNvbmNhdChCZVtmLnR5cGVdKGYudmFsdWUpKX1yZXR1cm4gSGUmJkhlLnNldChhLGMpLGN9LENlLkNIQVJTVFJJTkc9ZnVuY3Rpb24oYSl7cmV0dXJuIEJlLkNIQVJTVFJJTkcoYSkubGVuZ3RofSxCZS5PQkpFQ1Q9ZnVuY3Rpb24oYSl7dmFyIGI9QmVbYS50eXBlXTtyZXR1cm4geGUuYXJndW1lbnQodm9pZCAwIT09YixcIk5vIGVuY29kaW5nIGZ1bmN0aW9uIGZvciB0eXBlIFwiK2EudHlwZSksYihhLnZhbHVlKX0sQ2UuT0JKRUNUPWZ1bmN0aW9uKGEpe3ZhciBiPUNlW2EudHlwZV07cmV0dXJuIHhlLmFyZ3VtZW50KHZvaWQgMCE9PWIsXCJObyBzaXplT2YgZnVuY3Rpb24gZm9yIHR5cGUgXCIrYS50eXBlKSxiKGEudmFsdWUpfSxCZS5UQUJMRT1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz1hLmZpZWxkcy5sZW5ndGgsZD1bXSxlPVtdLGY9MDtmPGM7Zis9MSl7dmFyIGc9YS5maWVsZHNbZl0saD1CZVtnLnR5cGVdO3hlLmFyZ3VtZW50KHZvaWQgMCE9PWgsXCJObyBlbmNvZGluZyBmdW5jdGlvbiBmb3IgZmllbGQgdHlwZSBcIitnLnR5cGUrXCIgKFwiK2cubmFtZStcIilcIik7dmFyIGk9YVtnLm5hbWVdO3ZvaWQgMD09PWkmJihpPWcudmFsdWUpO3ZhciBqPWgoaSk7XCJUQUJMRVwiPT09Zy50eXBlPyhlLnB1c2goYi5sZW5ndGgpLGI9Yi5jb25jYXQoWzAsMF0pLGQucHVzaChqKSk6Yj1iLmNvbmNhdChqKX1mb3IodmFyIGs9MDtrPGQubGVuZ3RoO2srPTEpe3ZhciBsPWVba10sbT1iLmxlbmd0aDt4ZS5hcmd1bWVudChtPDY1NTM2LFwiVGFibGUgXCIrYS50YWJsZU5hbWUrXCIgdG9vIGJpZy5cIiksYltsXT1tPj44LGJbbCsxXT0yNTUmbSxiPWIuY29uY2F0KGRba10pfXJldHVybiBifSxDZS5UQUJMRT1mdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPWEuZmllbGRzLmxlbmd0aCxkPTA7ZDxjO2QrPTEpe3ZhciBlPWEuZmllbGRzW2RdLGY9Q2VbZS50eXBlXTt4ZS5hcmd1bWVudCh2b2lkIDAhPT1mLFwiTm8gc2l6ZU9mIGZ1bmN0aW9uIGZvciBmaWVsZCB0eXBlIFwiK2UudHlwZStcIiAoXCIrZS5uYW1lK1wiKVwiKTt2YXIgZz1hW2UubmFtZV07dm9pZCAwPT09ZyYmKGc9ZS52YWx1ZSksYis9ZihnKSxcIlRBQkxFXCI9PT1lLnR5cGUmJihiKz0yKX1yZXR1cm4gYn0sQmUuUkVDT1JEPUJlLlRBQkxFLENlLlJFQ09SRD1DZS5UQUJMRSxCZS5MSVRFUkFMPWZ1bmN0aW9uKGEpe3JldHVybiBhfSxDZS5MSVRFUkFMPWZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0sei5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIEJlLlRBQkxFKHRoaXMpfSx6LnByb3RvdHlwZS5zaXplT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gQ2UuVEFCTEUodGhpcyl9LEQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoei5wcm90b3R5cGUpLEQucHJvdG90eXBlLmNvbnN0cnVjdG9yPUQsRS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6LnByb3RvdHlwZSksRS5wcm90b3R5cGUuY29uc3RydWN0b3I9RSxGLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHoucHJvdG90eXBlKSxGLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1GLEcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoei5wcm90b3R5cGUpLEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUc7dmFyIEllPXtUYWJsZTp6LFJlY29yZDp6LENvdmVyYWdlOkQsU2NyaXB0TGlzdDpFLEZlYXR1cmVMaXN0OkYsTG9va3VwTGlzdDpHLHVzaG9ydExpc3Q6QSx0YWJsZUxpc3Q6QixyZWNvcmRMaXN0OkN9LEplPXtieXRlOjEsdVNob3J0OjIsc2hvcnQ6Mix1TG9uZzo0LGZpeGVkOjQsbG9uZ0RhdGVUaW1lOjgsdGFnOjR9O1EucHJvdG90eXBlLnBhcnNlQnl0ZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YS5nZXRVaW50OCh0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MSxhfSxRLnByb3RvdHlwZS5wYXJzZUNoYXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0SW50OCh0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MSxhfSxRLnByb3RvdHlwZS5wYXJzZUNhcmQ4PVEucHJvdG90eXBlLnBhcnNlQnl0ZSxRLnByb3RvdHlwZS5wYXJzZVVTaG9ydD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YS5nZXRVaW50MTYodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIsYX0sUS5wcm90b3R5cGUucGFyc2VDYXJkMTY9US5wcm90b3R5cGUucGFyc2VVU2hvcnQsUS5wcm90b3R5cGUucGFyc2VTSUQ9US5wcm90b3R5cGUucGFyc2VVU2hvcnQsUS5wcm90b3R5cGUucGFyc2VPZmZzZXQxNj1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydCxRLnByb3RvdHlwZS5wYXJzZVNob3J0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldEludDE2KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yLGF9LFEucHJvdG90eXBlLnBhcnNlRjJEb3QxND1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YS5nZXRJbnQxNih0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KS8xNjM4NDtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MixhfSxRLnByb3RvdHlwZS5wYXJzZVVMb25nPWZ1bmN0aW9uKCl7dmFyIGE9Syh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTQsYX0sUS5wcm90b3R5cGUucGFyc2VPZmZzZXQzMj1RLnByb3RvdHlwZS5wYXJzZVVMb25nLFEucHJvdG90eXBlLnBhcnNlRml4ZWQ9ZnVuY3Rpb24oKXt2YXIgYT1MKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9NCxhfSxRLnByb3RvdHlwZS5wYXJzZVN0cmluZz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmRhdGEsYz10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGQ9XCJcIjt0aGlzLnJlbGF0aXZlT2Zmc2V0Kz1hO2Zvcih2YXIgZT0wO2U8YTtlKyspZCs9U3RyaW5nLmZyb21DaGFyQ29kZShiLmdldFVpbnQ4KGMrZSkpO3JldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVRhZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlU3RyaW5nKDQpfSxRLnByb3RvdHlwZS5wYXJzZUxvbmdEYXRlVGltZT1mdW5jdGlvbigpe3ZhciBhPUsodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQrNCk7cmV0dXJuIGEtPTIwODI4NDQ4MDAsdGhpcy5yZWxhdGl2ZU9mZnNldCs9OCxhfSxRLnByb3RvdHlwZS5wYXJzZVZlcnNpb249ZnVuY3Rpb24oYSl7dmFyIGI9SSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCksYz1JKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KzIpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz00LHZvaWQgMD09PWEmJihhPTQwOTYpLGIrYy9hLzEwfSxRLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9MSksdGhpcy5yZWxhdGl2ZU9mZnNldCs9SmVbYV0qYn0sUS5wcm90b3R5cGUucGFyc2VVTG9uZ0xpc3Q9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9dGhpcy5wYXJzZVVMb25nKCkpO2Zvcih2YXIgYj1uZXcgQXJyYXkoYSksYz10aGlzLmRhdGEsZD10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGU9MDtlPGE7ZSsrKWJbZV09Yy5nZXRVaW50MzIoZCksZCs9NDtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9NCphLGJ9LFEucHJvdG90eXBlLnBhcnNlT2Zmc2V0MTZMaXN0PVEucHJvdG90eXBlLnBhcnNlVVNob3J0TGlzdD1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT10aGlzLnBhcnNlVVNob3J0KCkpO2Zvcih2YXIgYj1uZXcgQXJyYXkoYSksYz10aGlzLmRhdGEsZD10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGU9MDtlPGE7ZSsrKWJbZV09Yy5nZXRVaW50MTYoZCksZCs9MjtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MiphLGJ9LFEucHJvdG90eXBlLnBhcnNlU2hvcnRMaXN0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1uZXcgQXJyYXkoYSksYz10aGlzLmRhdGEsZD10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGU9MDtlPGE7ZSsrKWJbZV09Yy5nZXRJbnQxNihkKSxkKz0yO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yKmEsYn0sUS5wcm90b3R5cGUucGFyc2VCeXRlTGlzdD1mdW5jdGlvbihhKXtmb3IodmFyIGI9bmV3IEFycmF5KGEpLGM9dGhpcy5kYXRhLGQ9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxlPTA7ZTxhO2UrKyliW2VdPWMuZ2V0VWludDgoZCsrKTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9YSxifSxRLnByb3RvdHlwZS5wYXJzZUxpc3Q9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2J8fChiPWEsYT10aGlzLnBhcnNlVVNob3J0KCkpO2Zvcih2YXIgZD1uZXcgQXJyYXkoYSksZT0wO2U8YTtlKyspZFtlXT1iLmNhbGwoYyk7cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlTGlzdDMyPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztifHwoYj1hLGE9dGhpcy5wYXJzZVVMb25nKCkpO2Zvcih2YXIgZD1uZXcgQXJyYXkoYSksZT0wO2U8YTtlKyspZFtlXT1iLmNhbGwoYyk7cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlUmVjb3JkTGlzdD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Ynx8KGI9YSxhPXRoaXMucGFyc2VVU2hvcnQoKSk7Zm9yKHZhciBkPW5ldyBBcnJheShhKSxlPU9iamVjdC5rZXlzKGIpLGY9MDtmPGE7ZisrKXtmb3IodmFyIGc9e30saD0wO2g8ZS5sZW5ndGg7aCsrKXt2YXIgaT1lW2hdLGo9YltpXTtnW2ldPWouY2FsbChjKX1kW2ZdPWd9cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlUmVjb3JkTGlzdDMyPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztifHwoYj1hLGE9dGhpcy5wYXJzZVVMb25nKCkpO2Zvcih2YXIgZD1uZXcgQXJyYXkoYSksZT1PYmplY3Qua2V5cyhiKSxmPTA7ZjxhO2YrKyl7Zm9yKHZhciBnPXt9LGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGk9ZVtoXSxqPWJbaV07Z1tpXT1qLmNhbGwoYyl9ZFtmXT1nfXJldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVN0cnVjdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGEpcmV0dXJuIGEuY2FsbCh0aGlzKTtmb3IodmFyIGM9T2JqZWN0LmtleXMoYSksZD17fSxlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWNbZV0sZz1hW2ZdO2RbZl09Zy5jYWxsKGIpfXJldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVZhbHVlUmVjb3JkPWZ1bmN0aW9uKGEpe2lmKHZvaWQgMD09PWEmJihhPXRoaXMucGFyc2VVU2hvcnQoKSksMCE9PWEpe3ZhciBiPXt9O3JldHVybiAxJmEmJihiLnhQbGFjZW1lbnQ9dGhpcy5wYXJzZVNob3J0KCkpLDImYSYmKGIueVBsYWNlbWVudD10aGlzLnBhcnNlU2hvcnQoKSksNCZhJiYoYi54QWR2YW5jZT10aGlzLnBhcnNlU2hvcnQoKSksOCZhJiYoYi55QWR2YW5jZT10aGlzLnBhcnNlU2hvcnQoKSksMTYmYSYmKGIueFBsYURldmljZT12b2lkIDAsdGhpcy5wYXJzZVNob3J0KCkpLDMyJmEmJihiLnlQbGFEZXZpY2U9dm9pZCAwLHRoaXMucGFyc2VTaG9ydCgpKSw2NCZhJiYoYi54QWR2RGV2aWNlPXZvaWQgMCx0aGlzLnBhcnNlU2hvcnQoKSksMTI4JmEmJihiLnlBZHZEZXZpY2U9dm9pZCAwLHRoaXMucGFyc2VTaG9ydCgpKSxifX0sUS5wcm90b3R5cGUucGFyc2VWYWx1ZVJlY29yZExpc3Q9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcyxiPXRoaXMucGFyc2VVU2hvcnQoKSxjPXRoaXMucGFyc2VVU2hvcnQoKSxkPW5ldyBBcnJheShjKSxlPTA7ZTxjO2UrKylkW2VdPWEucGFyc2VWYWx1ZVJlY29yZChiKTtyZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VQb2ludGVyPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucGFyc2VPZmZzZXQxNigpO2lmKGI+MClyZXR1cm4gbmV3IFEodGhpcy5kYXRhLHRoaXMub2Zmc2V0K2IpLnBhcnNlU3RydWN0KGEpfSxRLnByb3RvdHlwZS5wYXJzZVBvaW50ZXIzMj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnBhcnNlT2Zmc2V0MzIoKTtpZihiPjApcmV0dXJuIG5ldyBRKHRoaXMuZGF0YSx0aGlzLm9mZnNldCtiKS5wYXJzZVN0cnVjdChhKX0sUS5wcm90b3R5cGUucGFyc2VMaXN0T2ZMaXN0cz1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcyxjPXRoaXMucGFyc2VPZmZzZXQxNkxpc3QoKSxkPWMubGVuZ3RoLGU9dGhpcy5yZWxhdGl2ZU9mZnNldCxmPW5ldyBBcnJheShkKSxnPTA7ZzxkO2crKyl7dmFyIGg9Y1tnXTtpZigwIT09aClpZihiLnJlbGF0aXZlT2Zmc2V0PWgsYSl7Zm9yKHZhciBpPWIucGFyc2VPZmZzZXQxNkxpc3QoKSxqPW5ldyBBcnJheShpLmxlbmd0aCksaz0wO2s8aS5sZW5ndGg7aysrKWIucmVsYXRpdmVPZmZzZXQ9aCtpW2tdLGpba109YS5jYWxsKGIpO2ZbZ109an1lbHNlIGZbZ109Yi5wYXJzZVVTaG9ydExpc3QoKTtlbHNlIGZbZ109dm9pZCAwfXJldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0PWUsZn0sUS5wcm90b3R5cGUucGFyc2VDb3ZlcmFnZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGM9dGhpcy5wYXJzZVVTaG9ydCgpLGQ9dGhpcy5wYXJzZVVTaG9ydCgpO2lmKDE9PT1jKXJldHVybntmb3JtYXQ6MSxnbHlwaHM6dGhpcy5wYXJzZVVTaG9ydExpc3QoZCl9O2lmKDI9PT1jKXtmb3IodmFyIGU9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWVbZl09e3N0YXJ0OmEucGFyc2VVU2hvcnQoKSxlbmQ6YS5wYXJzZVVTaG9ydCgpLGluZGV4OmEucGFyc2VVU2hvcnQoKX07cmV0dXJue2Zvcm1hdDoyLHJhbmdlczplfX10aHJvdyBuZXcgRXJyb3IoXCIweFwiK2IudG9TdHJpbmcoMTYpK1wiOiBDb3ZlcmFnZSBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpfSxRLnByb3RvdHlwZS5wYXJzZUNsYXNzRGVmPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTtpZigxPT09YilyZXR1cm57Zm9ybWF0OjEsc3RhcnRHbHlwaDp0aGlzLnBhcnNlVVNob3J0KCksY2xhc3Nlczp0aGlzLnBhcnNlVVNob3J0TGlzdCgpfTtpZigyPT09YilyZXR1cm57Zm9ybWF0OjIscmFuZ2VzOnRoaXMucGFyc2VSZWNvcmRMaXN0KHtzdGFydDpRLnVTaG9ydCxlbmQ6US51U2hvcnQsY2xhc3NJZDpRLnVTaG9ydH0pfTt0aHJvdyBuZXcgRXJyb3IoXCIweFwiK2EudG9TdHJpbmcoMTYpK1wiOiBDbGFzc0RlZiBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpfSxRLmxpc3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZUxpc3QoYSxiKX19LFEubGlzdDMyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VMaXN0MzIoYSxiKX19LFEucmVjb3JkTGlzdD1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUmVjb3JkTGlzdChhLGIpfX0sUS5yZWNvcmRMaXN0MzI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVJlY29yZExpc3QzMihhLGIpfX0sUS5wb2ludGVyPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcihhKX19LFEucG9pbnRlcjMyPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcjMyKGEpfX0sUS50YWc9US5wcm90b3R5cGUucGFyc2VUYWcsUS5ieXRlPVEucHJvdG90eXBlLnBhcnNlQnl0ZSxRLnVTaG9ydD1RLm9mZnNldDE2PVEucHJvdG90eXBlLnBhcnNlVVNob3J0LFEudVNob3J0TGlzdD1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydExpc3QsUS51TG9uZz1RLm9mZnNldDMyPVEucHJvdG90eXBlLnBhcnNlVUxvbmcsUS51TG9uZ0xpc3Q9US5wcm90b3R5cGUucGFyc2VVTG9uZ0xpc3QsUS5zdHJ1Y3Q9US5wcm90b3R5cGUucGFyc2VTdHJ1Y3QsUS5jb3ZlcmFnZT1RLnByb3RvdHlwZS5wYXJzZUNvdmVyYWdlLFEuY2xhc3NEZWY9US5wcm90b3R5cGUucGFyc2VDbGFzc0RlZjt2YXIgS2U9e3Jlc2VydmVkOlEudVNob3J0LHJlcUZlYXR1cmVJbmRleDpRLnVTaG9ydCxmZWF0dXJlSW5kZXhlczpRLnVTaG9ydExpc3R9O1EucHJvdG90eXBlLnBhcnNlU2NyaXB0TGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcihRLnJlY29yZExpc3Qoe3RhZzpRLnRhZyxzY3JpcHQ6US5wb2ludGVyKHtkZWZhdWx0TGFuZ1N5czpRLnBvaW50ZXIoS2UpLGxhbmdTeXNSZWNvcmRzOlEucmVjb3JkTGlzdCh7dGFnOlEudGFnLGxhbmdTeXM6US5wb2ludGVyKEtlKX0pfSl9KSl8fFtdfSxRLnByb3RvdHlwZS5wYXJzZUZlYXR1cmVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyKFEucmVjb3JkTGlzdCh7dGFnOlEudGFnLGZlYXR1cmU6US5wb2ludGVyKHtmZWF0dXJlUGFyYW1zOlEub2Zmc2V0MTYsbG9va3VwTGlzdEluZGV4ZXM6US51U2hvcnRMaXN0fSl9KSl8fFtdfSxRLnByb3RvdHlwZS5wYXJzZUxvb2t1cExpc3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyKFEubGlzdChRLnBvaW50ZXIoZnVuY3Rpb24oKXt2YXIgYj10aGlzLnBhcnNlVVNob3J0KCk7eGUuYXJndW1lbnQoMTw9YiYmYjw9OSxcIkdQT1MvR1NVQiBsb29rdXAgdHlwZSBcIitiK1wiIHVua25vd24uXCIpO3ZhciBjPXRoaXMucGFyc2VVU2hvcnQoKSxkPTE2JmM7cmV0dXJue2xvb2t1cFR5cGU6Yixsb29rdXBGbGFnOmMsc3VidGFibGVzOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihhW2JdKSksbWFya0ZpbHRlcmluZ1NldDpkP3RoaXMucGFyc2VVU2hvcnQoKTp2b2lkIDB9fSkpKXx8W119LFEucHJvdG90eXBlLnBhcnNlRmVhdHVyZVZhcmlhdGlvbnNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyMzIoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCksYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hJiZiPDEsXCJHUE9TL0dTVUIgZmVhdHVyZSB2YXJpYXRpb25zIHRhYmxlIHVua25vd24uXCIpLHRoaXMucGFyc2VSZWNvcmRMaXN0MzIoe2NvbmRpdGlvblNldE9mZnNldDpRLm9mZnNldDMyLGZlYXR1cmVUYWJsZVN1YnN0aXR1dGlvbk9mZnNldDpRLm9mZnNldDMyfSl9KXx8W119O3ZhciBMZT17Z2V0Qnl0ZTpILGdldENhcmQ4OkgsZ2V0VVNob3J0OkksZ2V0Q2FyZDE2OkksZ2V0U2hvcnQ6SixnZXRVTG9uZzpLLGdldEZpeGVkOkwsZ2V0VGFnOk0sZ2V0T2Zmc2V0Ok4sZ2V0Qnl0ZXM6TyxieXRlc1RvU3RyaW5nOlAsUGFyc2VyOlF9LE1lPXtwYXJzZTpULG1ha2U6V30sTmU9W1wiLm5vdGRlZlwiLFwic3BhY2VcIixcImV4Y2xhbVwiLFwicXVvdGVkYmxcIixcIm51bWJlcnNpZ25cIixcImRvbGxhclwiLFwicGVyY2VudFwiLFwiYW1wZXJzYW5kXCIsXCJxdW90ZXJpZ2h0XCIsXCJwYXJlbmxlZnRcIixcInBhcmVucmlnaHRcIixcImFzdGVyaXNrXCIsXCJwbHVzXCIsXCJjb21tYVwiLFwiaHlwaGVuXCIsXCJwZXJpb2RcIixcInNsYXNoXCIsXCJ6ZXJvXCIsXCJvbmVcIixcInR3b1wiLFwidGhyZWVcIixcImZvdXJcIixcImZpdmVcIixcInNpeFwiLFwic2V2ZW5cIixcImVpZ2h0XCIsXCJuaW5lXCIsXCJjb2xvblwiLFwic2VtaWNvbG9uXCIsXCJsZXNzXCIsXCJlcXVhbFwiLFwiZ3JlYXRlclwiLFwicXVlc3Rpb25cIixcImF0XCIsXCJBXCIsXCJCXCIsXCJDXCIsXCJEXCIsXCJFXCIsXCJGXCIsXCJHXCIsXCJIXCIsXCJJXCIsXCJKXCIsXCJLXCIsXCJMXCIsXCJNXCIsXCJOXCIsXCJPXCIsXCJQXCIsXCJRXCIsXCJSXCIsXCJTXCIsXCJUXCIsXCJVXCIsXCJWXCIsXCJXXCIsXCJYXCIsXCJZXCIsXCJaXCIsXCJicmFja2V0bGVmdFwiLFwiYmFja3NsYXNoXCIsXCJicmFja2V0cmlnaHRcIixcImFzY2lpY2lyY3VtXCIsXCJ1bmRlcnNjb3JlXCIsXCJxdW90ZWxlZnRcIixcImFcIixcImJcIixcImNcIixcImRcIixcImVcIixcImZcIixcImdcIixcImhcIixcImlcIixcImpcIixcImtcIixcImxcIixcIm1cIixcIm5cIixcIm9cIixcInBcIixcInFcIixcInJcIixcInNcIixcInRcIixcInVcIixcInZcIixcIndcIixcInhcIixcInlcIixcInpcIixcImJyYWNlbGVmdFwiLFwiYmFyXCIsXCJicmFjZXJpZ2h0XCIsXCJhc2NpaXRpbGRlXCIsXCJleGNsYW1kb3duXCIsXCJjZW50XCIsXCJzdGVybGluZ1wiLFwiZnJhY3Rpb25cIixcInllblwiLFwiZmxvcmluXCIsXCJzZWN0aW9uXCIsXCJjdXJyZW5jeVwiLFwicXVvdGVzaW5nbGVcIixcInF1b3RlZGJsbGVmdFwiLFwiZ3VpbGxlbW90bGVmdFwiLFwiZ3VpbHNpbmdsbGVmdFwiLFwiZ3VpbHNpbmdscmlnaHRcIixcImZpXCIsXCJmbFwiLFwiZW5kYXNoXCIsXCJkYWdnZXJcIixcImRhZ2dlcmRibFwiLFwicGVyaW9kY2VudGVyZWRcIixcInBhcmFncmFwaFwiLFwiYnVsbGV0XCIsXCJxdW90ZXNpbmdsYmFzZVwiLFwicXVvdGVkYmxiYXNlXCIsXCJxdW90ZWRibHJpZ2h0XCIsXCJndWlsbGVtb3RyaWdodFwiLFwiZWxsaXBzaXNcIixcInBlcnRob3VzYW5kXCIsXCJxdWVzdGlvbmRvd25cIixcImdyYXZlXCIsXCJhY3V0ZVwiLFwiY2lyY3VtZmxleFwiLFwidGlsZGVcIixcIm1hY3JvblwiLFwiYnJldmVcIixcImRvdGFjY2VudFwiLFwiZGllcmVzaXNcIixcInJpbmdcIixcImNlZGlsbGFcIixcImh1bmdhcnVtbGF1dFwiLFwib2dvbmVrXCIsXCJjYXJvblwiLFwiZW1kYXNoXCIsXCJBRVwiLFwib3JkZmVtaW5pbmVcIixcIkxzbGFzaFwiLFwiT3NsYXNoXCIsXCJPRVwiLFwib3JkbWFzY3VsaW5lXCIsXCJhZVwiLFwiZG90bGVzc2lcIixcImxzbGFzaFwiLFwib3NsYXNoXCIsXCJvZVwiLFwiZ2VybWFuZGJsc1wiLFwib25lc3VwZXJpb3JcIixcImxvZ2ljYWxub3RcIixcIm11XCIsXCJ0cmFkZW1hcmtcIixcIkV0aFwiLFwib25laGFsZlwiLFwicGx1c21pbnVzXCIsXCJUaG9yblwiLFwib25lcXVhcnRlclwiLFwiZGl2aWRlXCIsXCJicm9rZW5iYXJcIixcImRlZ3JlZVwiLFwidGhvcm5cIixcInRocmVlcXVhcnRlcnNcIixcInR3b3N1cGVyaW9yXCIsXCJyZWdpc3RlcmVkXCIsXCJtaW51c1wiLFwiZXRoXCIsXCJtdWx0aXBseVwiLFwidGhyZWVzdXBlcmlvclwiLFwiY29weXJpZ2h0XCIsXCJBYWN1dGVcIixcIkFjaXJjdW1mbGV4XCIsXCJBZGllcmVzaXNcIixcIkFncmF2ZVwiLFwiQXJpbmdcIixcIkF0aWxkZVwiLFwiQ2NlZGlsbGFcIixcIkVhY3V0ZVwiLFwiRWNpcmN1bWZsZXhcIixcIkVkaWVyZXNpc1wiLFwiRWdyYXZlXCIsXCJJYWN1dGVcIixcIkljaXJjdW1mbGV4XCIsXCJJZGllcmVzaXNcIixcIklncmF2ZVwiLFwiTnRpbGRlXCIsXCJPYWN1dGVcIixcIk9jaXJjdW1mbGV4XCIsXCJPZGllcmVzaXNcIixcIk9ncmF2ZVwiLFwiT3RpbGRlXCIsXCJTY2Fyb25cIixcIlVhY3V0ZVwiLFwiVWNpcmN1bWZsZXhcIixcIlVkaWVyZXNpc1wiLFwiVWdyYXZlXCIsXCJZYWN1dGVcIixcIllkaWVyZXNpc1wiLFwiWmNhcm9uXCIsXCJhYWN1dGVcIixcImFjaXJjdW1mbGV4XCIsXCJhZGllcmVzaXNcIixcImFncmF2ZVwiLFwiYXJpbmdcIixcImF0aWxkZVwiLFwiY2NlZGlsbGFcIixcImVhY3V0ZVwiLFwiZWNpcmN1bWZsZXhcIixcImVkaWVyZXNpc1wiLFwiZWdyYXZlXCIsXCJpYWN1dGVcIixcImljaXJjdW1mbGV4XCIsXCJpZGllcmVzaXNcIixcImlncmF2ZVwiLFwibnRpbGRlXCIsXCJvYWN1dGVcIixcIm9jaXJjdW1mbGV4XCIsXCJvZGllcmVzaXNcIixcIm9ncmF2ZVwiLFwib3RpbGRlXCIsXCJzY2Fyb25cIixcInVhY3V0ZVwiLFwidWNpcmN1bWZsZXhcIixcInVkaWVyZXNpc1wiLFwidWdyYXZlXCIsXCJ5YWN1dGVcIixcInlkaWVyZXNpc1wiLFwiemNhcm9uXCIsXCJleGNsYW1zbWFsbFwiLFwiSHVuZ2FydW1sYXV0c21hbGxcIixcImRvbGxhcm9sZHN0eWxlXCIsXCJkb2xsYXJzdXBlcmlvclwiLFwiYW1wZXJzYW5kc21hbGxcIixcIkFjdXRlc21hbGxcIixcInBhcmVubGVmdHN1cGVyaW9yXCIsXCJwYXJlbnJpZ2h0c3VwZXJpb3JcIixcIjI2NiBmZlwiLFwib25lZG90ZW5sZWFkZXJcIixcInplcm9vbGRzdHlsZVwiLFwib25lb2xkc3R5bGVcIixcInR3b29sZHN0eWxlXCIsXCJ0aHJlZW9sZHN0eWxlXCIsXCJmb3Vyb2xkc3R5bGVcIixcImZpdmVvbGRzdHlsZVwiLFwic2l4b2xkc3R5bGVcIixcInNldmVub2xkc3R5bGVcIixcImVpZ2h0b2xkc3R5bGVcIixcIm5pbmVvbGRzdHlsZVwiLFwiY29tbWFzdXBlcmlvclwiLFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLFwicGVyaW9kc3VwZXJpb3JcIixcInF1ZXN0aW9uc21hbGxcIixcImFzdXBlcmlvclwiLFwiYnN1cGVyaW9yXCIsXCJjZW50c3VwZXJpb3JcIixcImRzdXBlcmlvclwiLFwiZXN1cGVyaW9yXCIsXCJpc3VwZXJpb3JcIixcImxzdXBlcmlvclwiLFwibXN1cGVyaW9yXCIsXCJuc3VwZXJpb3JcIixcIm9zdXBlcmlvclwiLFwicnN1cGVyaW9yXCIsXCJzc3VwZXJpb3JcIixcInRzdXBlcmlvclwiLFwiZmZcIixcImZmaVwiLFwiZmZsXCIsXCJwYXJlbmxlZnRpbmZlcmlvclwiLFwicGFyZW5yaWdodGluZmVyaW9yXCIsXCJDaXJjdW1mbGV4c21hbGxcIixcImh5cGhlbnN1cGVyaW9yXCIsXCJHcmF2ZXNtYWxsXCIsXCJBc21hbGxcIixcIkJzbWFsbFwiLFwiQ3NtYWxsXCIsXCJEc21hbGxcIixcIkVzbWFsbFwiLFwiRnNtYWxsXCIsXCJHc21hbGxcIixcIkhzbWFsbFwiLFwiSXNtYWxsXCIsXCJKc21hbGxcIixcIktzbWFsbFwiLFwiTHNtYWxsXCIsXCJNc21hbGxcIixcIk5zbWFsbFwiLFwiT3NtYWxsXCIsXCJQc21hbGxcIixcIlFzbWFsbFwiLFwiUnNtYWxsXCIsXCJTc21hbGxcIixcIlRzbWFsbFwiLFwiVXNtYWxsXCIsXCJWc21hbGxcIixcIldzbWFsbFwiLFwiWHNtYWxsXCIsXCJZc21hbGxcIixcIlpzbWFsbFwiLFwiY29sb25tb25ldGFyeVwiLFwib25lZml0dGVkXCIsXCJydXBpYWhcIixcIlRpbGRlc21hbGxcIixcImV4Y2xhbWRvd25zbWFsbFwiLFwiY2VudG9sZHN0eWxlXCIsXCJMc2xhc2hzbWFsbFwiLFwiU2Nhcm9uc21hbGxcIixcIlpjYXJvbnNtYWxsXCIsXCJEaWVyZXNpc3NtYWxsXCIsXCJCcmV2ZXNtYWxsXCIsXCJDYXJvbnNtYWxsXCIsXCJEb3RhY2NlbnRzbWFsbFwiLFwiTWFjcm9uc21hbGxcIixcImZpZ3VyZWRhc2hcIixcImh5cGhlbmluZmVyaW9yXCIsXCJPZ29uZWtzbWFsbFwiLFwiUmluZ3NtYWxsXCIsXCJDZWRpbGxhc21hbGxcIixcInF1ZXN0aW9uZG93bnNtYWxsXCIsXCJvbmVlaWdodGhcIixcInRocmVlZWlnaHRoc1wiLFwiZml2ZWVpZ2h0aHNcIixcInNldmVuZWlnaHRoc1wiLFwib25ldGhpcmRcIixcInR3b3RoaXJkc1wiLFwiemVyb3N1cGVyaW9yXCIsXCJmb3Vyc3VwZXJpb3JcIixcImZpdmVzdXBlcmlvclwiLFwic2l4c3VwZXJpb3JcIixcInNldmVuc3VwZXJpb3JcIixcImVpZ2h0c3VwZXJpb3JcIixcIm5pbmVzdXBlcmlvclwiLFwiemVyb2luZmVyaW9yXCIsXCJvbmVpbmZlcmlvclwiLFwidHdvaW5mZXJpb3JcIixcInRocmVlaW5mZXJpb3JcIixcImZvdXJpbmZlcmlvclwiLFwiZml2ZWluZmVyaW9yXCIsXCJzaXhpbmZlcmlvclwiLFwic2V2ZW5pbmZlcmlvclwiLFwiZWlnaHRpbmZlcmlvclwiLFwibmluZWluZmVyaW9yXCIsXCJjZW50aW5mZXJpb3JcIixcImRvbGxhcmluZmVyaW9yXCIsXCJwZXJpb2RpbmZlcmlvclwiLFwiY29tbWFpbmZlcmlvclwiLFwiQWdyYXZlc21hbGxcIixcIkFhY3V0ZXNtYWxsXCIsXCJBY2lyY3VtZmxleHNtYWxsXCIsXCJBdGlsZGVzbWFsbFwiLFwiQWRpZXJlc2lzc21hbGxcIixcIkFyaW5nc21hbGxcIixcIkFFc21hbGxcIixcIkNjZWRpbGxhc21hbGxcIixcIkVncmF2ZXNtYWxsXCIsXCJFYWN1dGVzbWFsbFwiLFwiRWNpcmN1bWZsZXhzbWFsbFwiLFwiRWRpZXJlc2lzc21hbGxcIixcIklncmF2ZXNtYWxsXCIsXCJJYWN1dGVzbWFsbFwiLFwiSWNpcmN1bWZsZXhzbWFsbFwiLFwiSWRpZXJlc2lzc21hbGxcIixcIkV0aHNtYWxsXCIsXCJOdGlsZGVzbWFsbFwiLFwiT2dyYXZlc21hbGxcIixcIk9hY3V0ZXNtYWxsXCIsXCJPY2lyY3VtZmxleHNtYWxsXCIsXCJPdGlsZGVzbWFsbFwiLFwiT2RpZXJlc2lzc21hbGxcIixcIk9Fc21hbGxcIixcIk9zbGFzaHNtYWxsXCIsXCJVZ3JhdmVzbWFsbFwiLFwiVWFjdXRlc21hbGxcIixcIlVjaXJjdW1mbGV4c21hbGxcIixcIlVkaWVyZXNpc3NtYWxsXCIsXCJZYWN1dGVzbWFsbFwiLFwiVGhvcm5zbWFsbFwiLFwiWWRpZXJlc2lzc21hbGxcIixcIjAwMS4wMDBcIixcIjAwMS4wMDFcIixcIjAwMS4wMDJcIixcIjAwMS4wMDNcIixcIkJsYWNrXCIsXCJCb2xkXCIsXCJCb29rXCIsXCJMaWdodFwiLFwiTWVkaXVtXCIsXCJSZWd1bGFyXCIsXCJSb21hblwiLFwiU2VtaWJvbGRcIl0sT2U9W1wiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcInNwYWNlXCIsXCJleGNsYW1cIixcInF1b3RlZGJsXCIsXCJudW1iZXJzaWduXCIsXCJkb2xsYXJcIixcInBlcmNlbnRcIixcImFtcGVyc2FuZFwiLFwicXVvdGVyaWdodFwiLFwicGFyZW5sZWZ0XCIsXCJwYXJlbnJpZ2h0XCIsXCJhc3Rlcmlza1wiLFwicGx1c1wiLFwiY29tbWFcIixcImh5cGhlblwiLFwicGVyaW9kXCIsXCJzbGFzaFwiLFwiemVyb1wiLFwib25lXCIsXCJ0d29cIixcInRocmVlXCIsXCJmb3VyXCIsXCJmaXZlXCIsXCJzaXhcIixcInNldmVuXCIsXCJlaWdodFwiLFwibmluZVwiLFwiY29sb25cIixcInNlbWljb2xvblwiLFwibGVzc1wiLFwiZXF1YWxcIixcImdyZWF0ZXJcIixcInF1ZXN0aW9uXCIsXCJhdFwiLFwiQVwiLFwiQlwiLFwiQ1wiLFwiRFwiLFwiRVwiLFwiRlwiLFwiR1wiLFwiSFwiLFwiSVwiLFwiSlwiLFwiS1wiLFwiTFwiLFwiTVwiLFwiTlwiLFwiT1wiLFwiUFwiLFwiUVwiLFwiUlwiLFwiU1wiLFwiVFwiLFwiVVwiLFwiVlwiLFwiV1wiLFwiWFwiLFwiWVwiLFwiWlwiLFwiYnJhY2tldGxlZnRcIixcImJhY2tzbGFzaFwiLFwiYnJhY2tldHJpZ2h0XCIsXCJhc2NpaWNpcmN1bVwiLFwidW5kZXJzY29yZVwiLFwicXVvdGVsZWZ0XCIsXCJhXCIsXCJiXCIsXCJjXCIsXCJkXCIsXCJlXCIsXCJmXCIsXCJnXCIsXCJoXCIsXCJpXCIsXCJqXCIsXCJrXCIsXCJsXCIsXCJtXCIsXCJuXCIsXCJvXCIsXCJwXCIsXCJxXCIsXCJyXCIsXCJzXCIsXCJ0XCIsXCJ1XCIsXCJ2XCIsXCJ3XCIsXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJicmFjZWxlZnRcIixcImJhclwiLFwiYnJhY2VyaWdodFwiLFwiYXNjaWl0aWxkZVwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJleGNsYW1kb3duXCIsXCJjZW50XCIsXCJzdGVybGluZ1wiLFwiZnJhY3Rpb25cIixcInllblwiLFwiZmxvcmluXCIsXCJzZWN0aW9uXCIsXCJjdXJyZW5jeVwiLFwicXVvdGVzaW5nbGVcIixcInF1b3RlZGJsbGVmdFwiLFwiZ3VpbGxlbW90bGVmdFwiLFwiZ3VpbHNpbmdsbGVmdFwiLFwiZ3VpbHNpbmdscmlnaHRcIixcImZpXCIsXCJmbFwiLFwiXCIsXCJlbmRhc2hcIixcImRhZ2dlclwiLFwiZGFnZ2VyZGJsXCIsXCJwZXJpb2RjZW50ZXJlZFwiLFwiXCIsXCJwYXJhZ3JhcGhcIixcImJ1bGxldFwiLFwicXVvdGVzaW5nbGJhc2VcIixcInF1b3RlZGJsYmFzZVwiLFwicXVvdGVkYmxyaWdodFwiLFwiZ3VpbGxlbW90cmlnaHRcIixcImVsbGlwc2lzXCIsXCJwZXJ0aG91c2FuZFwiLFwiXCIsXCJxdWVzdGlvbmRvd25cIixcIlwiLFwiZ3JhdmVcIixcImFjdXRlXCIsXCJjaXJjdW1mbGV4XCIsXCJ0aWxkZVwiLFwibWFjcm9uXCIsXCJicmV2ZVwiLFwiZG90YWNjZW50XCIsXCJkaWVyZXNpc1wiLFwiXCIsXCJyaW5nXCIsXCJjZWRpbGxhXCIsXCJcIixcImh1bmdhcnVtbGF1dFwiLFwib2dvbmVrXCIsXCJjYXJvblwiLFwiZW1kYXNoXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIkFFXCIsXCJcIixcIm9yZGZlbWluaW5lXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIkxzbGFzaFwiLFwiT3NsYXNoXCIsXCJPRVwiLFwib3JkbWFzY3VsaW5lXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiYWVcIixcIlwiLFwiXCIsXCJcIixcImRvdGxlc3NpXCIsXCJcIixcIlwiLFwibHNsYXNoXCIsXCJvc2xhc2hcIixcIm9lXCIsXCJnZXJtYW5kYmxzXCJdLFBlPVtcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJzcGFjZVwiLFwiZXhjbGFtc21hbGxcIixcIkh1bmdhcnVtbGF1dHNtYWxsXCIsXCJcIixcImRvbGxhcm9sZHN0eWxlXCIsXCJkb2xsYXJzdXBlcmlvclwiLFwiYW1wZXJzYW5kc21hbGxcIixcIkFjdXRlc21hbGxcIixcInBhcmVubGVmdHN1cGVyaW9yXCIsXCJwYXJlbnJpZ2h0c3VwZXJpb3JcIixcInR3b2RvdGVubGVhZGVyXCIsXCJvbmVkb3RlbmxlYWRlclwiLFwiY29tbWFcIixcImh5cGhlblwiLFwicGVyaW9kXCIsXCJmcmFjdGlvblwiLFwiemVyb29sZHN0eWxlXCIsXCJvbmVvbGRzdHlsZVwiLFwidHdvb2xkc3R5bGVcIixcInRocmVlb2xkc3R5bGVcIixcImZvdXJvbGRzdHlsZVwiLFwiZml2ZW9sZHN0eWxlXCIsXCJzaXhvbGRzdHlsZVwiLFwic2V2ZW5vbGRzdHlsZVwiLFwiZWlnaHRvbGRzdHlsZVwiLFwibmluZW9sZHN0eWxlXCIsXCJjb2xvblwiLFwic2VtaWNvbG9uXCIsXCJjb21tYXN1cGVyaW9yXCIsXCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoXCIsXCJwZXJpb2RzdXBlcmlvclwiLFwicXVlc3Rpb25zbWFsbFwiLFwiXCIsXCJhc3VwZXJpb3JcIixcImJzdXBlcmlvclwiLFwiY2VudHN1cGVyaW9yXCIsXCJkc3VwZXJpb3JcIixcImVzdXBlcmlvclwiLFwiXCIsXCJcIixcImlzdXBlcmlvclwiLFwiXCIsXCJcIixcImxzdXBlcmlvclwiLFwibXN1cGVyaW9yXCIsXCJuc3VwZXJpb3JcIixcIm9zdXBlcmlvclwiLFwiXCIsXCJcIixcInJzdXBlcmlvclwiLFwic3N1cGVyaW9yXCIsXCJ0c3VwZXJpb3JcIixcIlwiLFwiZmZcIixcImZpXCIsXCJmbFwiLFwiZmZpXCIsXCJmZmxcIixcInBhcmVubGVmdGluZmVyaW9yXCIsXCJcIixcInBhcmVucmlnaHRpbmZlcmlvclwiLFwiQ2lyY3VtZmxleHNtYWxsXCIsXCJoeXBoZW5zdXBlcmlvclwiLFwiR3JhdmVzbWFsbFwiLFwiQXNtYWxsXCIsXCJCc21hbGxcIixcIkNzbWFsbFwiLFwiRHNtYWxsXCIsXCJFc21hbGxcIixcIkZzbWFsbFwiLFwiR3NtYWxsXCIsXCJIc21hbGxcIixcIklzbWFsbFwiLFwiSnNtYWxsXCIsXCJLc21hbGxcIixcIkxzbWFsbFwiLFwiTXNtYWxsXCIsXCJOc21hbGxcIixcIk9zbWFsbFwiLFwiUHNtYWxsXCIsXCJRc21hbGxcIixcIlJzbWFsbFwiLFwiU3NtYWxsXCIsXCJUc21hbGxcIixcIlVzbWFsbFwiLFwiVnNtYWxsXCIsXCJXc21hbGxcIixcIlhzbWFsbFwiLFwiWXNtYWxsXCIsXCJac21hbGxcIixcImNvbG9ubW9uZXRhcnlcIixcIm9uZWZpdHRlZFwiLFwicnVwaWFoXCIsXCJUaWxkZXNtYWxsXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcImV4Y2xhbWRvd25zbWFsbFwiLFwiY2VudG9sZHN0eWxlXCIsXCJMc2xhc2hzbWFsbFwiLFwiXCIsXCJcIixcIlNjYXJvbnNtYWxsXCIsXCJaY2Fyb25zbWFsbFwiLFwiRGllcmVzaXNzbWFsbFwiLFwiQnJldmVzbWFsbFwiLFwiQ2Fyb25zbWFsbFwiLFwiXCIsXCJEb3RhY2NlbnRzbWFsbFwiLFwiXCIsXCJcIixcIk1hY3JvbnNtYWxsXCIsXCJcIixcIlwiLFwiZmlndXJlZGFzaFwiLFwiaHlwaGVuaW5mZXJpb3JcIixcIlwiLFwiXCIsXCJPZ29uZWtzbWFsbFwiLFwiUmluZ3NtYWxsXCIsXCJDZWRpbGxhc21hbGxcIixcIlwiLFwiXCIsXCJcIixcIm9uZXF1YXJ0ZXJcIixcIm9uZWhhbGZcIixcInRocmVlcXVhcnRlcnNcIixcInF1ZXN0aW9uZG93bnNtYWxsXCIsXCJvbmVlaWdodGhcIixcInRocmVlZWlnaHRoc1wiLFwiZml2ZWVpZ2h0aHNcIixcInNldmVuZWlnaHRoc1wiLFwib25ldGhpcmRcIixcInR3b3RoaXJkc1wiLFwiXCIsXCJcIixcInplcm9zdXBlcmlvclwiLFwib25lc3VwZXJpb3JcIixcInR3b3N1cGVyaW9yXCIsXCJ0aHJlZXN1cGVyaW9yXCIsXCJmb3Vyc3VwZXJpb3JcIixcImZpdmVzdXBlcmlvclwiLFwic2l4c3VwZXJpb3JcIixcInNldmVuc3VwZXJpb3JcIixcImVpZ2h0c3VwZXJpb3JcIixcIm5pbmVzdXBlcmlvclwiLFwiemVyb2luZmVyaW9yXCIsXCJvbmVpbmZlcmlvclwiLFwidHdvaW5mZXJpb3JcIixcInRocmVlaW5mZXJpb3JcIixcImZvdXJpbmZlcmlvclwiLFwiZml2ZWluZmVyaW9yXCIsXCJzaXhpbmZlcmlvclwiLFwic2V2ZW5pbmZlcmlvclwiLFwiZWlnaHRpbmZlcmlvclwiLFwibmluZWluZmVyaW9yXCIsXCJjZW50aW5mZXJpb3JcIixcImRvbGxhcmluZmVyaW9yXCIsXCJwZXJpb2RpbmZlcmlvclwiLFwiY29tbWFpbmZlcmlvclwiLFwiQWdyYXZlc21hbGxcIixcIkFhY3V0ZXNtYWxsXCIsXCJBY2lyY3VtZmxleHNtYWxsXCIsXCJBdGlsZGVzbWFsbFwiLFwiQWRpZXJlc2lzc21hbGxcIixcIkFyaW5nc21hbGxcIixcIkFFc21hbGxcIixcIkNjZWRpbGxhc21hbGxcIixcIkVncmF2ZXNtYWxsXCIsXCJFYWN1dGVzbWFsbFwiLFwiRWNpcmN1bWZsZXhzbWFsbFwiLFwiRWRpZXJlc2lzc21hbGxcIixcIklncmF2ZXNtYWxsXCIsXCJJYWN1dGVzbWFsbFwiLFwiSWNpcmN1bWZsZXhzbWFsbFwiLFwiSWRpZXJlc2lzc21hbGxcIixcIkV0aHNtYWxsXCIsXCJOdGlsZGVzbWFsbFwiLFwiT2dyYXZlc21hbGxcIixcIk9hY3V0ZXNtYWxsXCIsXCJPY2lyY3VtZmxleHNtYWxsXCIsXCJPdGlsZGVzbWFsbFwiLFwiT2RpZXJlc2lzc21hbGxcIixcIk9Fc21hbGxcIixcIk9zbGFzaHNtYWxsXCIsXCJVZ3JhdmVzbWFsbFwiLFwiVWFjdXRlc21hbGxcIixcIlVjaXJjdW1mbGV4c21hbGxcIixcIlVkaWVyZXNpc3NtYWxsXCIsXCJZYWN1dGVzbWFsbFwiLFwiVGhvcm5zbWFsbFwiLFwiWWRpZXJlc2lzc21hbGxcIl0sUWU9W1wiLm5vdGRlZlwiLFwiLm51bGxcIixcIm5vbm1hcmtpbmdyZXR1cm5cIixcInNwYWNlXCIsXCJleGNsYW1cIixcInF1b3RlZGJsXCIsXCJudW1iZXJzaWduXCIsXCJkb2xsYXJcIixcInBlcmNlbnRcIixcImFtcGVyc2FuZFwiLFwicXVvdGVzaW5nbGVcIixcInBhcmVubGVmdFwiLFwicGFyZW5yaWdodFwiLFwiYXN0ZXJpc2tcIixcInBsdXNcIixcImNvbW1hXCIsXCJoeXBoZW5cIixcInBlcmlvZFwiLFwic2xhc2hcIixcInplcm9cIixcIm9uZVwiLFwidHdvXCIsXCJ0aHJlZVwiLFwiZm91clwiLFwiZml2ZVwiLFwic2l4XCIsXCJzZXZlblwiLFwiZWlnaHRcIixcIm5pbmVcIixcImNvbG9uXCIsXCJzZW1pY29sb25cIixcImxlc3NcIixcImVxdWFsXCIsXCJncmVhdGVyXCIsXCJxdWVzdGlvblwiLFwiYXRcIixcIkFcIixcIkJcIixcIkNcIixcIkRcIixcIkVcIixcIkZcIixcIkdcIixcIkhcIixcIklcIixcIkpcIixcIktcIixcIkxcIixcIk1cIixcIk5cIixcIk9cIixcIlBcIixcIlFcIixcIlJcIixcIlNcIixcIlRcIixcIlVcIixcIlZcIixcIldcIixcIlhcIixcIllcIixcIlpcIixcImJyYWNrZXRsZWZ0XCIsXCJiYWNrc2xhc2hcIixcImJyYWNrZXRyaWdodFwiLFwiYXNjaWljaXJjdW1cIixcInVuZGVyc2NvcmVcIixcImdyYXZlXCIsXCJhXCIsXCJiXCIsXCJjXCIsXCJkXCIsXCJlXCIsXCJmXCIsXCJnXCIsXCJoXCIsXCJpXCIsXCJqXCIsXCJrXCIsXCJsXCIsXCJtXCIsXCJuXCIsXCJvXCIsXCJwXCIsXCJxXCIsXCJyXCIsXCJzXCIsXCJ0XCIsXCJ1XCIsXCJ2XCIsXCJ3XCIsXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJicmFjZWxlZnRcIixcImJhclwiLFwiYnJhY2VyaWdodFwiLFwiYXNjaWl0aWxkZVwiLFwiQWRpZXJlc2lzXCIsXCJBcmluZ1wiLFwiQ2NlZGlsbGFcIixcIkVhY3V0ZVwiLFwiTnRpbGRlXCIsXCJPZGllcmVzaXNcIixcIlVkaWVyZXNpc1wiLFwiYWFjdXRlXCIsXCJhZ3JhdmVcIixcImFjaXJjdW1mbGV4XCIsXCJhZGllcmVzaXNcIixcImF0aWxkZVwiLFwiYXJpbmdcIixcImNjZWRpbGxhXCIsXCJlYWN1dGVcIixcImVncmF2ZVwiLFwiZWNpcmN1bWZsZXhcIixcImVkaWVyZXNpc1wiLFwiaWFjdXRlXCIsXCJpZ3JhdmVcIixcImljaXJjdW1mbGV4XCIsXCJpZGllcmVzaXNcIixcIm50aWxkZVwiLFwib2FjdXRlXCIsXCJvZ3JhdmVcIixcIm9jaXJjdW1mbGV4XCIsXCJvZGllcmVzaXNcIixcIm90aWxkZVwiLFwidWFjdXRlXCIsXCJ1Z3JhdmVcIixcInVjaXJjdW1mbGV4XCIsXCJ1ZGllcmVzaXNcIixcImRhZ2dlclwiLFwiZGVncmVlXCIsXCJjZW50XCIsXCJzdGVybGluZ1wiLFwic2VjdGlvblwiLFwiYnVsbGV0XCIsXCJwYXJhZ3JhcGhcIixcImdlcm1hbmRibHNcIixcInJlZ2lzdGVyZWRcIixcImNvcHlyaWdodFwiLFwidHJhZGVtYXJrXCIsXCJhY3V0ZVwiLFwiZGllcmVzaXNcIixcIm5vdGVxdWFsXCIsXCJBRVwiLFwiT3NsYXNoXCIsXCJpbmZpbml0eVwiLFwicGx1c21pbnVzXCIsXCJsZXNzZXF1YWxcIixcImdyZWF0ZXJlcXVhbFwiLFwieWVuXCIsXCJtdVwiLFwicGFydGlhbGRpZmZcIixcInN1bW1hdGlvblwiLFwicHJvZHVjdFwiLFwicGlcIixcImludGVncmFsXCIsXCJvcmRmZW1pbmluZVwiLFwib3JkbWFzY3VsaW5lXCIsXCJPbWVnYVwiLFwiYWVcIixcIm9zbGFzaFwiLFwicXVlc3Rpb25kb3duXCIsXCJleGNsYW1kb3duXCIsXCJsb2dpY2Fsbm90XCIsXCJyYWRpY2FsXCIsXCJmbG9yaW5cIixcImFwcHJveGVxdWFsXCIsXCJEZWx0YVwiLFwiZ3VpbGxlbW90bGVmdFwiLFwiZ3VpbGxlbW90cmlnaHRcIixcImVsbGlwc2lzXCIsXCJub25icmVha2luZ3NwYWNlXCIsXCJBZ3JhdmVcIixcIkF0aWxkZVwiLFwiT3RpbGRlXCIsXCJPRVwiLFwib2VcIixcImVuZGFzaFwiLFwiZW1kYXNoXCIsXCJxdW90ZWRibGxlZnRcIixcInF1b3RlZGJscmlnaHRcIixcInF1b3RlbGVmdFwiLFwicXVvdGVyaWdodFwiLFwiZGl2aWRlXCIsXCJsb3plbmdlXCIsXCJ5ZGllcmVzaXNcIixcIllkaWVyZXNpc1wiLFwiZnJhY3Rpb25cIixcImN1cnJlbmN5XCIsXCJndWlsc2luZ2xsZWZ0XCIsXCJndWlsc2luZ2xyaWdodFwiLFwiZmlcIixcImZsXCIsXCJkYWdnZXJkYmxcIixcInBlcmlvZGNlbnRlcmVkXCIsXCJxdW90ZXNpbmdsYmFzZVwiLFwicXVvdGVkYmxiYXNlXCIsXCJwZXJ0aG91c2FuZFwiLFwiQWNpcmN1bWZsZXhcIixcIkVjaXJjdW1mbGV4XCIsXCJBYWN1dGVcIixcIkVkaWVyZXNpc1wiLFwiRWdyYXZlXCIsXCJJYWN1dGVcIixcIkljaXJjdW1mbGV4XCIsXCJJZGllcmVzaXNcIixcIklncmF2ZVwiLFwiT2FjdXRlXCIsXCJPY2lyY3VtZmxleFwiLFwiYXBwbGVcIixcIk9ncmF2ZVwiLFwiVWFjdXRlXCIsXCJVY2lyY3VtZmxleFwiLFwiVWdyYXZlXCIsXCJkb3RsZXNzaVwiLFwiY2lyY3VtZmxleFwiLFwidGlsZGVcIixcIm1hY3JvblwiLFwiYnJldmVcIixcImRvdGFjY2VudFwiLFwicmluZ1wiLFwiY2VkaWxsYVwiLFwiaHVuZ2FydW1sYXV0XCIsXCJvZ29uZWtcIixcImNhcm9uXCIsXCJMc2xhc2hcIixcImxzbGFzaFwiLFwiU2Nhcm9uXCIsXCJzY2Fyb25cIixcIlpjYXJvblwiLFwiemNhcm9uXCIsXCJicm9rZW5iYXJcIixcIkV0aFwiLFwiZXRoXCIsXCJZYWN1dGVcIixcInlhY3V0ZVwiLFwiVGhvcm5cIixcInRob3JuXCIsXCJtaW51c1wiLFwibXVsdGlwbHlcIixcIm9uZXN1cGVyaW9yXCIsXCJ0d29zdXBlcmlvclwiLFwidGhyZWVzdXBlcmlvclwiLFwib25laGFsZlwiLFwib25lcXVhcnRlclwiLFwidGhyZWVxdWFydGVyc1wiLFwiZnJhbmNcIixcIkdicmV2ZVwiLFwiZ2JyZXZlXCIsXCJJZG90YWNjZW50XCIsXCJTY2VkaWxsYVwiLFwic2NlZGlsbGFcIixcIkNhY3V0ZVwiLFwiY2FjdXRlXCIsXCJDY2Fyb25cIixcImNjYXJvblwiLFwiZGNyb2F0XCJdO1gucHJvdG90eXBlLmNoYXJUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7dmFyIGI9YS5jb2RlUG9pbnRBdCgwKSxjPXRoaXMuZm9udC5nbHlwaHM7aWYoYylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrPTEpZm9yKHZhciBlPWMuZ2V0KGQpLGY9MDtmPGUudW5pY29kZXMubGVuZ3RoO2YrPTEpaWYoZS51bmljb2Rlc1tmXT09PWIpcmV0dXJuIGQ7cmV0dXJuIG51bGx9LFkucHJvdG90eXBlLmNoYXJUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY21hcC5nbHlwaEluZGV4TWFwW2EuY29kZVBvaW50QXQoMCldfHwwfSxaLnByb3RvdHlwZS5jaGFyVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3ZhciBiPWEuY29kZVBvaW50QXQoMCksYz10aGlzLmVuY29kaW5nW2JdO3JldHVybiB0aGlzLmNoYXJzZXQuaW5kZXhPZihjKX0sJC5wcm90b3R5cGUubmFtZVRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5uYW1lcy5pbmRleE9mKGEpfSwkLnByb3RvdHlwZS5nbHlwaEluZGV4VG9OYW1lPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5hbWVzW2FdfTt2YXIgUmU9e2xpbmU6YWF9O2NhLnByb3RvdHlwZS5iaW5kQ29uc3RydWN0b3JWYWx1ZXM9ZnVuY3Rpb24oYSl7dGhpcy5pbmRleD1hLmluZGV4fHwwLHRoaXMubmFtZT1hLm5hbWV8fG51bGwsdGhpcy51bmljb2RlPWEudW5pY29kZXx8dm9pZCAwLHRoaXMudW5pY29kZXM9YS51bmljb2Rlc3x8dm9pZCAwIT09YS51bmljb2RlP1thLnVuaWNvZGVdOltdLGEueE1pbiYmKHRoaXMueE1pbj1hLnhNaW4pLGEueU1pbiYmKHRoaXMueU1pbj1hLnlNaW4pLGEueE1heCYmKHRoaXMueE1heD1hLnhNYXgpLGEueU1heCYmKHRoaXMueU1heD1hLnlNYXgpLGEuYWR2YW5jZVdpZHRoJiYodGhpcy5hZHZhbmNlV2lkdGg9YS5hZHZhbmNlV2lkdGgpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicGF0aFwiLGJhKHRoaXMsYS5wYXRoKSl9LGNhLnByb3RvdHlwZS5hZGRVbmljb2RlPWZ1bmN0aW9uKGEpezA9PT10aGlzLnVuaWNvZGVzLmxlbmd0aCYmKHRoaXMudW5pY29kZT1hKSx0aGlzLnVuaWNvZGVzLnB1c2goYSl9LGNhLnByb3RvdHlwZS5nZXRCb3VuZGluZ0JveD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGguZ2V0Qm91bmRpbmdCb3goKX0sY2EucHJvdG90eXBlLmdldFBhdGg9ZnVuY3Rpb24oYSxiLGMsZCxlKXthPXZvaWQgMCE9PWE/YTowLGI9dm9pZCAwIT09Yj9iOjAsYz12b2lkIDAhPT1jP2M6NzI7dmFyIGYsZztkfHwoZD17fSk7dmFyIGg9ZC54U2NhbGUsaT1kLnlTY2FsZTtpZihkLmhpbnRpbmcmJmUmJmUuaGludGluZyYmKGc9dGhpcy5wYXRoJiZlLmhpbnRpbmcuZXhlYyh0aGlzLGMpKSxnKWY9ZS5oaW50aW5nLmdldENvbW1hbmRzKGcpLGE9TWF0aC5yb3VuZChhKSxiPU1hdGgucm91bmQoYiksaD1pPTE7ZWxzZXtmPXRoaXMucGF0aC5jb21tYW5kczt2YXIgaj0xL3RoaXMucGF0aC51bml0c1BlckVtKmM7dm9pZCAwPT09aCYmKGg9aiksdm9pZCAwPT09aSYmKGk9ail9Zm9yKHZhciBrPW5ldyByLGw9MDtsPGYubGVuZ3RoO2wrPTEpe3ZhciBtPWZbbF07XCJNXCI9PT1tLnR5cGU/ay5tb3ZlVG8oYSttLngqaCxiKy1tLnkqaSk6XCJMXCI9PT1tLnR5cGU/ay5saW5lVG8oYSttLngqaCxiKy1tLnkqaSk6XCJRXCI9PT1tLnR5cGU/ay5xdWFkcmF0aWNDdXJ2ZVRvKGErbS54MSpoLGIrLW0ueTEqaSxhK20ueCpoLGIrLW0ueSppKTpcIkNcIj09PW0udHlwZT9rLmN1cnZlVG8oYSttLngxKmgsYistbS55MSppLGErbS54MipoLGIrLW0ueTIqaSxhK20ueCpoLGIrLW0ueSppKTpcIlpcIj09PW0udHlwZSYmay5jbG9zZVBhdGgoKX1yZXR1cm4ga30sY2EucHJvdG90eXBlLmdldENvbnRvdXJzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcztpZih2b2lkIDA9PT10aGlzLnBvaW50cylyZXR1cm5bXTtmb3IodmFyIGI9W10sYz1bXSxkPTA7ZDx0aGlzLnBvaW50cy5sZW5ndGg7ZCs9MSl7dmFyIGU9YS5wb2ludHNbZF07Yy5wdXNoKGUpLGUubGFzdFBvaW50T2ZDb250b3VyJiYoYi5wdXNoKGMpLGM9W10pfXJldHVybiB4ZS5hcmd1bWVudCgwPT09Yy5sZW5ndGgsXCJUaGVyZSBhcmUgc3RpbGwgcG9pbnRzIGxlZnQgaW4gdGhlIGN1cnJlbnQgY29udG91ci5cIiksYn0sY2EucHJvdG90eXBlLmdldE1ldHJpY3M9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5wYXRoLmNvbW1hbmRzLGI9W10sYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdO1wiWlwiIT09ZS50eXBlJiYoYi5wdXNoKGUueCksYy5wdXNoKGUueSkpLFwiUVwiIT09ZS50eXBlJiZcIkNcIiE9PWUudHlwZXx8KGIucHVzaChlLngxKSxjLnB1c2goZS55MSkpLFwiQ1wiPT09ZS50eXBlJiYoYi5wdXNoKGUueDIpLGMucHVzaChlLnkyKSl9dmFyIGY9e3hNaW46TWF0aC5taW4uYXBwbHkobnVsbCxiKSx5TWluOk1hdGgubWluLmFwcGx5KG51bGwsYykseE1heDpNYXRoLm1heC5hcHBseShudWxsLGIpLHlNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxjKSxsZWZ0U2lkZUJlYXJpbmc6dGhpcy5sZWZ0U2lkZUJlYXJpbmd9O3JldHVybiBpc0Zpbml0ZShmLnhNaW4pfHwoZi54TWluPTApLGlzRmluaXRlKGYueE1heCl8fChmLnhNYXg9dGhpcy5hZHZhbmNlV2lkdGgpLGlzRmluaXRlKGYueU1pbil8fChmLnlNaW49MCksaXNGaW5pdGUoZi55TWF4KXx8KGYueU1heD0wKSxmLnJpZ2h0U2lkZUJlYXJpbmc9dGhpcy5hZHZhbmNlV2lkdGgtZi5sZWZ0U2lkZUJlYXJpbmctKGYueE1heC1mLnhNaW4pLGZ9LGNhLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGEsYixjLGQsZSl7dGhpcy5nZXRQYXRoKGIsYyxkLGUpLmRyYXcoYSl9LGNhLnByb3RvdHlwZS5kcmF3UG9pbnRzPWZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoYixjLGQsZSl7dmFyIGY9MipNYXRoLlBJO2EuYmVnaW5QYXRoKCk7Zm9yKHZhciBnPTA7ZzxiLmxlbmd0aDtnKz0xKWEubW92ZVRvKGMrYltnXS54KmUsZCtiW2ddLnkqZSksYS5hcmMoYytiW2ddLngqZSxkK2JbZ10ueSplLDIsMCxmLCExKTthLmNsb3NlUGF0aCgpLGEuZmlsbCgpfWI9dm9pZCAwIT09Yj9iOjAsYz12b2lkIDAhPT1jP2M6MCxkPXZvaWQgMCE9PWQ/ZDoyNDtmb3IodmFyIGY9MS90aGlzLnBhdGgudW5pdHNQZXJFbSpkLGc9W10saD1bXSxpPXRoaXMucGF0aCxqPTA7ajxpLmNvbW1hbmRzLmxlbmd0aDtqKz0xKXt2YXIgaz1pLmNvbW1hbmRzW2pdO3ZvaWQgMCE9PWsueCYmZy5wdXNoKHt4OmsueCx5Oi1rLnl9KSx2b2lkIDAhPT1rLngxJiZoLnB1c2goe3g6ay54MSx5Oi1rLnkxfSksdm9pZCAwIT09ay54MiYmaC5wdXNoKHt4OmsueDIseTotay55Mn0pfWEuZmlsbFN0eWxlPVwiYmx1ZVwiLGUoZyxiLGMsZiksYS5maWxsU3R5bGU9XCJyZWRcIixlKGgsYixjLGYpfSxjYS5wcm90b3R5cGUuZHJhd01ldHJpY3M9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU7Yj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/YzowLGQ9dm9pZCAwIT09ZD9kOjI0LGU9MS90aGlzLnBhdGgudW5pdHNQZXJFbSpkLGEubGluZVdpZHRoPTEsYS5zdHJva2VTdHlsZT1cImJsYWNrXCIsUmUubGluZShhLGIsLTFlNCxiLDFlNCksUmUubGluZShhLC0xZTQsYywxZTQsYyk7dmFyIGY9dGhpcy54TWlufHwwLGc9dGhpcy55TWlufHwwLGg9dGhpcy54TWF4fHwwLGk9dGhpcy55TWF4fHwwLGo9dGhpcy5hZHZhbmNlV2lkdGh8fDA7YS5zdHJva2VTdHlsZT1cImJsdWVcIixSZS5saW5lKGEsYitmKmUsLTFlNCxiK2YqZSwxZTQpLFJlLmxpbmUoYSxiK2gqZSwtMWU0LGIraCplLDFlNCksUmUubGluZShhLC0xZTQsYystZyplLDFlNCxjKy1nKmUpLFJlLmxpbmUoYSwtMWU0LGMrLWkqZSwxZTQsYystaSplKSxhLnN0cm9rZVN0eWxlPVwiZ3JlZW5cIixSZS5saW5lKGEsYitqKmUsLTFlNCxiK2oqZSwxZTQpfSxlYS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuZ2x5cGhzW2FdJiYodGhpcy5nbHlwaHNbYV09dGhpcy5nbHlwaHNbYV0oKSksdGhpcy5nbHlwaHNbYV19LGVhLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGEsYil7dGhpcy5nbHlwaHNbYV09Yix0aGlzLmxlbmd0aCsrfTt2YXIgU2U9e0dseXBoU2V0OmVhLGdseXBoTG9hZGVyOmZhLHR0ZkdseXBoTG9hZGVyOmdhLGNmZkdseXBoTG9hZGVyOmhhfSxUZT1be25hbWU6XCJ2ZXJzaW9uXCIsb3A6MCx0eXBlOlwiU0lEXCJ9LHtuYW1lOlwibm90aWNlXCIsb3A6MSx0eXBlOlwiU0lEXCJ9LHtuYW1lOlwiY29weXJpZ2h0XCIsb3A6MTIwMCx0eXBlOlwiU0lEXCJ9LHtuYW1lOlwiZnVsbE5hbWVcIixvcDoyLHR5cGU6XCJTSURcIn0se25hbWU6XCJmYW1pbHlOYW1lXCIsb3A6Myx0eXBlOlwiU0lEXCJ9LHtuYW1lOlwid2VpZ2h0XCIsb3A6NCx0eXBlOlwiU0lEXCJ9LHtuYW1lOlwiaXNGaXhlZFBpdGNoXCIsb3A6MTIwMSx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJpdGFsaWNBbmdsZVwiLG9wOjEyMDIsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwidW5kZXJsaW5lUG9zaXRpb25cIixvcDoxMjAzLHR5cGU6XCJudW1iZXJcIix2YWx1ZTotMTAwfSx7bmFtZTpcInVuZGVybGluZVRoaWNrbmVzc1wiLG9wOjEyMDQsdHlwZTpcIm51bWJlclwiLHZhbHVlOjUwfSx7bmFtZTpcInBhaW50VHlwZVwiLG9wOjEyMDUsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwiY2hhcnN0cmluZ1R5cGVcIixvcDoxMjA2LHR5cGU6XCJudW1iZXJcIix2YWx1ZToyfSx7bmFtZTpcImZvbnRNYXRyaXhcIixvcDoxMjA3LHR5cGU6W1wicmVhbFwiLFwicmVhbFwiLFwicmVhbFwiLFwicmVhbFwiLFwicmVhbFwiLFwicmVhbFwiXSx2YWx1ZTpbLjAwMSwwLDAsLjAwMSwwLDBdfSx7bmFtZTpcInVuaXF1ZUlkXCIsb3A6MTMsdHlwZTpcIm51bWJlclwifSx7bmFtZTpcImZvbnRCQm94XCIsb3A6NSx0eXBlOltcIm51bWJlclwiLFwibnVtYmVyXCIsXCJudW1iZXJcIixcIm51bWJlclwiXSx2YWx1ZTpbMCwwLDAsMF19LHtuYW1lOlwic3Ryb2tlV2lkdGhcIixvcDoxMjA4LHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcInh1aWRcIixvcDoxNCx0eXBlOltdLHZhbHVlOm51bGx9LHtuYW1lOlwiY2hhcnNldFwiLG9wOjE1LHR5cGU6XCJvZmZzZXRcIix2YWx1ZTowfSx7bmFtZTpcImVuY29kaW5nXCIsb3A6MTYsdHlwZTpcIm9mZnNldFwiLHZhbHVlOjB9LHtuYW1lOlwiY2hhclN0cmluZ3NcIixvcDoxNyx0eXBlOlwib2Zmc2V0XCIsdmFsdWU6MH0se25hbWU6XCJwcml2YXRlXCIsb3A6MTgsdHlwZTpbXCJudW1iZXJcIixcIm9mZnNldFwiXSx2YWx1ZTpbMCwwXX0se25hbWU6XCJyb3NcIixvcDoxMjMwLHR5cGU6W1wiU0lEXCIsXCJTSURcIixcIm51bWJlclwiXX0se25hbWU6XCJjaWRGb250VmVyc2lvblwiLG9wOjEyMzEsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwiY2lkRm9udFJldmlzaW9uXCIsb3A6MTIzMix0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJjaWRGb250VHlwZVwiLG9wOjEyMzMsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwiY2lkQ291bnRcIixvcDoxMjM0LHR5cGU6XCJudW1iZXJcIix2YWx1ZTo4NzIwfSx7bmFtZTpcInVpZEJhc2VcIixvcDoxMjM1LHR5cGU6XCJudW1iZXJcIn0se25hbWU6XCJmZEFycmF5XCIsb3A6MTIzNix0eXBlOlwib2Zmc2V0XCJ9LHtuYW1lOlwiZmRTZWxlY3RcIixvcDoxMjM3LHR5cGU6XCJvZmZzZXRcIn0se25hbWU6XCJmb250TmFtZVwiLG9wOjEyMzgsdHlwZTpcIlNJRFwifV0sVWU9W3tuYW1lOlwic3VicnNcIixvcDoxOSx0eXBlOlwib2Zmc2V0XCIsdmFsdWU6MH0se25hbWU6XCJkZWZhdWx0V2lkdGhYXCIsb3A6MjAsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwibm9taW5hbFdpZHRoWFwiLG9wOjIxLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfV0sVmU9e3BhcnNlOnphLG1ha2U6TWF9LFdlPXtwYXJzZTpOYSxtYWtlOk9hfSxYZT17cGFyc2U6UGEsbWFrZTpRYX0sWWU9e3BhcnNlOlJhLG1ha2U6U2F9LFplPXttYWtlOlRhLHBhcnNlOlVhfSwkZT17cGFyc2U6VmEsbWFrZTpXYX0sX2U9W1wiY29weXJpZ2h0XCIsXCJmb250RmFtaWx5XCIsXCJmb250U3ViZmFtaWx5XCIsXCJ1bmlxdWVJRFwiLFwiZnVsbE5hbWVcIixcInZlcnNpb25cIixcInBvc3RTY3JpcHROYW1lXCIsXCJ0cmFkZW1hcmtcIixcIm1hbnVmYWN0dXJlclwiLFwiZGVzaWduZXJcIixcImRlc2NyaXB0aW9uXCIsXCJtYW51ZmFjdHVyZXJVUkxcIixcImRlc2lnbmVyVVJMXCIsXCJsaWNlbnNlXCIsXCJsaWNlbnNlVVJMXCIsXCJyZXNlcnZlZFwiLFwicHJlZmVycmVkRmFtaWx5XCIsXCJwcmVmZXJyZWRTdWJmYW1pbHlcIixcImNvbXBhdGlibGVGdWxsTmFtZVwiLFwic2FtcGxlVGV4dFwiLFwicG9zdFNjcmlwdEZpbmRGb250TmFtZVwiLFwid3dzRmFtaWx5XCIsXCJ3d3NTdWJmYW1pbHlcIl0sYWY9ezA6XCJlblwiLDE6XCJmclwiLDI6XCJkZVwiLDM6XCJpdFwiLDQ6XCJubFwiLDU6XCJzdlwiLDY6XCJlc1wiLDc6XCJkYVwiLDg6XCJwdFwiLDk6XCJub1wiLDEwOlwiaGVcIiwxMTpcImphXCIsMTI6XCJhclwiLDEzOlwiZmlcIiwxNDpcImVsXCIsMTU6XCJpc1wiLDE2OlwibXRcIiwxNzpcInRyXCIsMTg6XCJoclwiLDE5OlwiemgtSGFudFwiLDIwOlwidXJcIiwyMTpcImhpXCIsMjI6XCJ0aFwiLDIzOlwia29cIiwyNDpcImx0XCIsMjU6XCJwbFwiLDI2OlwiaHVcIiwyNzpcImVzXCIsMjg6XCJsdlwiLDI5Olwic2VcIiwzMDpcImZvXCIsMzE6XCJmYVwiLDMyOlwicnVcIiwzMzpcInpoXCIsMzQ6XCJubC1CRVwiLDM1OlwiZ2FcIiwzNjpcInNxXCIsMzc6XCJyb1wiLDM4OlwiY3pcIiwzOTpcInNrXCIsNDA6XCJzaVwiLDQxOlwieWlcIiw0MjpcInNyXCIsNDM6XCJta1wiLDQ0OlwiYmdcIiw0NTpcInVrXCIsNDY6XCJiZVwiLDQ3OlwidXpcIiw0ODpcImtrXCIsNDk6XCJhei1DeXJsXCIsNTA6XCJhei1BcmFiXCIsNTE6XCJoeVwiLDUyOlwia2FcIiw1MzpcIm1vXCIsNTQ6XCJreVwiLDU1OlwidGdcIiw1NjpcInRrXCIsNTc6XCJtbi1DTlwiLDU4OlwibW5cIiw1OTpcInBzXCIsNjA6XCJrc1wiLDYxOlwia3VcIiw2MjpcInNkXCIsNjM6XCJib1wiLDY0OlwibmVcIiw2NTpcInNhXCIsNjY6XCJtclwiLDY3OlwiYm5cIiw2ODpcImFzXCIsNjk6XCJndVwiLDcwOlwicGFcIiw3MTpcIm9yXCIsNzI6XCJtbFwiLDczOlwia25cIiw3NDpcInRhXCIsNzU6XCJ0ZVwiLDc2Olwic2lcIiw3NzpcIm15XCIsNzg6XCJrbVwiLDc5OlwibG9cIiw4MDpcInZpXCIsODE6XCJpZFwiLDgyOlwidGxcIiw4MzpcIm1zXCIsODQ6XCJtcy1BcmFiXCIsODU6XCJhbVwiLDg2OlwidGlcIiw4NzpcIm9tXCIsODg6XCJzb1wiLDg5Olwic3dcIiw5MDpcInJ3XCIsOTE6XCJyblwiLDkyOlwibnlcIiw5MzpcIm1nXCIsOTQ6XCJlb1wiLDEyODpcImN5XCIsMTI5OlwiZXVcIiwxMzA6XCJjYVwiLDEzMTpcImxhXCIsMTMyOlwicXVcIiwxMzM6XCJnblwiLDEzNDpcImF5XCIsMTM1OlwidHRcIiwxMzY6XCJ1Z1wiLDEzNzpcImR6XCIsMTM4OlwianZcIiwxMzk6XCJzdVwiLDE0MDpcImdsXCIsMTQxOlwiYWZcIiwxNDI6XCJiclwiLDE0MzpcIml1XCIsMTQ0OlwiZ2RcIiwxNDU6XCJndlwiLDE0NjpcImdhXCIsMTQ3OlwidG9cIiwxNDg6XCJlbC1wb2x5dG9uXCIsMTQ5Olwia2xcIiwxNTA6XCJhelwiLDE1MTpcIm5uXCJ9LGJmPXswOjAsMTowLDI6MCwzOjAsNDowLDU6MCw2OjAsNzowLDg6MCw5OjAsMTA6NSwxMToxLDEyOjQsMTM6MCwxNDo2LDE1OjAsMTY6MCwxNzowLDE4OjAsMTk6MiwyMDo0LFxuMjE6OSwyMjoyMSwyMzozLDI0OjI5LDI1OjI5LDI2OjI5LDI3OjI5LDI4OjI5LDI5OjAsMzA6MCwzMTo0LDMyOjcsMzM6MjUsMzQ6MCwzNTowLDM2OjAsMzc6MCwzODoyOSwzOToyOSw0MDowLDQxOjUsNDI6Nyw0Mzo3LDQ0OjcsNDU6Nyw0Njo3LDQ3OjcsNDg6Nyw0OTo3LDUwOjQsNTE6MjQsNTI6MjMsNTM6Nyw1NDo3LDU1OjcsNTY6Nyw1NzoyNyw1ODo3LDU5OjQsNjA6NCw2MTo0LDYyOjQsNjM6MjYsNjQ6OSw2NTo5LDY2OjksNjc6MTMsNjg6MTMsNjk6MTEsNzA6MTAsNzE6MTIsNzI6MTcsNzM6MTYsNzQ6MTQsNzU6MTUsNzY6MTgsNzc6MTksNzg6MjAsNzk6MjIsODA6MzAsODE6MCw4MjowLDgzOjAsODQ6NCw4NToyOCw4NjoyOCw4NzoyOCw4ODowLDg5OjAsOTA6MCw5MTowLDkyOjAsOTM6MCw5NDowLDEyODowLDEyOTowLDEzMDowLDEzMTowLDEzMjowLDEzMzowLDEzNDowLDEzNTo3LDEzNjo0LDEzNzoyNiwxMzg6MCwxMzk6MCwxNDA6MCwxNDE6MCwxNDI6MCwxNDM6MjgsMTQ0OjAsMTQ1OjAsMTQ2OjAsMTQ3OjAsMTQ4OjYsMTQ5OjAsMTUwOjAsMTUxOjB9LGNmPXsxMDc4OlwiYWZcIiwxMDUyOlwic3FcIiwxMTU2OlwiZ3N3XCIsMTExODpcImFtXCIsNTEyMTpcImFyLURaXCIsMTUzNjE6XCJhci1CSFwiLDMwNzM6XCJhclwiLDIwNDk6XCJhci1JUVwiLDExMjY1OlwiYXItSk9cIiwxMzMxMzpcImFyLUtXXCIsMTIyODk6XCJhci1MQlwiLDQwOTc6XCJhci1MWVwiLDYxNDU6XCJhcnlcIiw4MTkzOlwiYXItT01cIiwxNjM4NTpcImFyLVFBXCIsMTAyNTpcImFyLVNBXCIsMTAyNDE6XCJhci1TWVwiLDcxNjk6XCJhZWJcIiwxNDMzNzpcImFyLUFFXCIsOTIxNzpcImFyLVlFXCIsMTA2NzpcImh5XCIsMTEwMTpcImFzXCIsMjA5MjpcImF6LUN5cmxcIiwxMDY4OlwiYXpcIiwxMTMzOlwiYmFcIiwxMDY5OlwiZXVcIiwxMDU5OlwiYmVcIiwyMTE3OlwiYm5cIiwxMDkzOlwiYm4tSU5cIiw4MjE4OlwiYnMtQ3lybFwiLDUxNDY6XCJic1wiLDExNTA6XCJiclwiLDEwMjY6XCJiZ1wiLDEwMjc6XCJjYVwiLDMwNzY6XCJ6aC1IS1wiLDUxMjQ6XCJ6aC1NT1wiLDIwNTI6XCJ6aFwiLDQxMDA6XCJ6aC1TR1wiLDEwMjg6XCJ6aC1UV1wiLDExNTU6XCJjb1wiLDEwNTA6XCJoclwiLDQxMjI6XCJoci1CQVwiLDEwMjk6XCJjc1wiLDEwMzA6XCJkYVwiLDExNjQ6XCJwcnNcIiwxMTI1OlwiZHZcIiwyMDY3OlwibmwtQkVcIiwxMDQzOlwibmxcIiwzMDgxOlwiZW4tQVVcIiwxMDI0OTpcImVuLUJaXCIsNDEwNTpcImVuLUNBXCIsOTIyNTpcImVuLTAyOVwiLDE2MzkzOlwiZW4tSU5cIiw2MTUzOlwiZW4tSUVcIiw4MjAxOlwiZW4tSk1cIiwxNzQxNzpcImVuLU1ZXCIsNTEyOTpcImVuLU5aXCIsMTMzMjE6XCJlbi1QSFwiLDE4NDQxOlwiZW4tU0dcIiw3MTc3OlwiZW4tWkFcIiwxMTI3MzpcImVuLVRUXCIsMjA1NzpcImVuLUdCXCIsMTAzMzpcImVuXCIsMTIyOTc6XCJlbi1aV1wiLDEwNjE6XCJldFwiLDEwODA6XCJmb1wiLDExMjQ6XCJmaWxcIiwxMDM1OlwiZmlcIiwyMDYwOlwiZnItQkVcIiwzMDg0OlwiZnItQ0FcIiwxMDM2OlwiZnJcIiw1MTMyOlwiZnItTFVcIiw2MTU2OlwiZnItTUNcIiw0MTA4OlwiZnItQ0hcIiwxMTIyOlwiZnlcIiwxMTEwOlwiZ2xcIiwxMDc5Olwia2FcIiwzMDc5OlwiZGUtQVRcIiwxMDMxOlwiZGVcIiw1MTI3OlwiZGUtTElcIiw0MTAzOlwiZGUtTFVcIiwyMDU1OlwiZGUtQ0hcIiwxMDMyOlwiZWxcIiwxMTM1Olwia2xcIiwxMDk1OlwiZ3VcIiwxMTI4OlwiaGFcIiwxMDM3OlwiaGVcIiwxMDgxOlwiaGlcIiwxMDM4OlwiaHVcIiwxMDM5OlwiaXNcIiwxMTM2OlwiaWdcIiwxMDU3OlwiaWRcIiwxMTE3OlwiaXVcIiwyMTQxOlwiaXUtTGF0blwiLDIxMDg6XCJnYVwiLDEwNzY6XCJ4aFwiLDEwNzc6XCJ6dVwiLDEwNDA6XCJpdFwiLDIwNjQ6XCJpdC1DSFwiLDEwNDE6XCJqYVwiLDEwOTk6XCJrblwiLDEwODc6XCJra1wiLDExMDc6XCJrbVwiLDExNTg6XCJxdWNcIiwxMTU5OlwicndcIiwxMDg5Olwic3dcIiwxMTExOlwia29rXCIsMTA0MjpcImtvXCIsMTA4ODpcImt5XCIsMTEwODpcImxvXCIsMTA2MjpcImx2XCIsMTA2MzpcImx0XCIsMjA5NDpcImRzYlwiLDExMzQ6XCJsYlwiLDEwNzE6XCJta1wiLDIxMTA6XCJtcy1CTlwiLDEwODY6XCJtc1wiLDExMDA6XCJtbFwiLDEwODI6XCJtdFwiLDExNTM6XCJtaVwiLDExNDY6XCJhcm5cIiwxMTAyOlwibXJcIiwxMTQ4OlwibW9oXCIsMTEwNDpcIm1uXCIsMjEyODpcIm1uLUNOXCIsMTEyMTpcIm5lXCIsMTA0NDpcIm5iXCIsMjA2ODpcIm5uXCIsMTE1NDpcIm9jXCIsMTA5NjpcIm9yXCIsMTEyMzpcInBzXCIsMTA0NTpcInBsXCIsMTA0NjpcInB0XCIsMjA3MDpcInB0LVBUXCIsMTA5NDpcInBhXCIsMTEzMTpcInF1LUJPXCIsMjE1NTpcInF1LUVDXCIsMzE3OTpcInF1XCIsMTA0ODpcInJvXCIsMTA0NzpcInJtXCIsMTA0OTpcInJ1XCIsOTI3NTpcInNtblwiLDQxNTU6XCJzbWotTk9cIiw1MTc5Olwic21qXCIsMzEzMTpcInNlLUZJXCIsMTA4MzpcInNlXCIsMjEwNzpcInNlLVNFXCIsODI1MTpcInNtc1wiLDYyMDM6XCJzbWEtTk9cIiw3MjI3Olwic21zXCIsMTEwMzpcInNhXCIsNzE5NDpcInNyLUN5cmwtQkFcIiwzMDk4Olwic3JcIiw2MTcwOlwic3ItTGF0bi1CQVwiLDIwNzQ6XCJzci1MYXRuXCIsMTEzMjpcIm5zb1wiLDEwNzQ6XCJ0blwiLDExMTU6XCJzaVwiLDEwNTE6XCJza1wiLDEwNjA6XCJzbFwiLDExMjc0OlwiZXMtQVJcIiwxNjM5NDpcImVzLUJPXCIsMTMzMjI6XCJlcy1DTFwiLDkyMjY6XCJlcy1DT1wiLDUxMzA6XCJlcy1DUlwiLDcxNzg6XCJlcy1ET1wiLDEyMjk4OlwiZXMtRUNcIiwxNzQxODpcImVzLVNWXCIsNDEwNjpcImVzLUdUXCIsMTg0NDI6XCJlcy1ITlwiLDIwNTg6XCJlcy1NWFwiLDE5NDY2OlwiZXMtTklcIiw2MTU0OlwiZXMtUEFcIiwxNTM3MDpcImVzLVBZXCIsMTAyNTA6XCJlcy1QRVwiLDIwNDkwOlwiZXMtUFJcIiwzMDgyOlwiZXNcIiwxMDM0OlwiZXNcIiwyMTUxNDpcImVzLVVTXCIsMTQzNDY6XCJlcy1VWVwiLDgyMDI6XCJlcy1WRVwiLDIwNzc6XCJzdi1GSVwiLDEwNTM6XCJzdlwiLDExMTQ6XCJzeXJcIiwxMDY0OlwidGdcIiwyMTQzOlwidHptXCIsMTA5NzpcInRhXCIsMTA5MjpcInR0XCIsMTA5ODpcInRlXCIsMTA1NDpcInRoXCIsMTEwNTpcImJvXCIsMTA1NTpcInRyXCIsMTA5MDpcInRrXCIsMTE1MjpcInVnXCIsMTA1ODpcInVrXCIsMTA3MDpcImhzYlwiLDEwNTY6XCJ1clwiLDIxMTU6XCJ1ei1DeXJsXCIsMTA5MTpcInV6XCIsMTA2NjpcInZpXCIsMTEwNjpcImN5XCIsMTE2MDpcIndvXCIsMTE1NzpcInNhaFwiLDExNDQ6XCJpaVwiLDExMzA6XCJ5b1wifSxkZj1cInV0Zi0xNlwiLGVmPXswOlwibWFjaW50b3NoXCIsMTpcIngtbWFjLWphcGFuZXNlXCIsMjpcIngtbWFjLWNoaW5lc2V0cmFkXCIsMzpcIngtbWFjLWtvcmVhblwiLDY6XCJ4LW1hYy1ncmVla1wiLDc6XCJ4LW1hYy1jeXJpbGxpY1wiLDk6XCJ4LW1hYy1kZXZhbmFnYWlcIiwxMDpcIngtbWFjLWd1cm11a2hpXCIsMTE6XCJ4LW1hYy1ndWphcmF0aVwiLDEyOlwieC1tYWMtb3JpeWFcIiwxMzpcIngtbWFjLWJlbmdhbGlcIiwxNDpcIngtbWFjLXRhbWlsXCIsMTU6XCJ4LW1hYy10ZWx1Z3VcIiwxNjpcIngtbWFjLWthbm5hZGFcIiwxNzpcIngtbWFjLW1hbGF5YWxhbVwiLDE4OlwieC1tYWMtc2luaGFsZXNlXCIsMTk6XCJ4LW1hYy1idXJtZXNlXCIsMjA6XCJ4LW1hYy1raG1lclwiLDIxOlwieC1tYWMtdGhhaVwiLDIyOlwieC1tYWMtbGFvXCIsMjM6XCJ4LW1hYy1nZW9yZ2lhblwiLDI0OlwieC1tYWMtYXJtZW5pYW5cIiwyNTpcIngtbWFjLWNoaW5lc2VzaW1wXCIsMjY6XCJ4LW1hYy10aWJldGFuXCIsMjc6XCJ4LW1hYy1tb25nb2xpYW5cIiwyODpcIngtbWFjLWV0aGlvcGljXCIsMjk6XCJ4LW1hYy1jZVwiLDMwOlwieC1tYWMtdmlldG5hbWVzZVwiLDMxOlwieC1tYWMtZXh0YXJhYmljXCJ9LGZmPXsxNTpcIngtbWFjLWljZWxhbmRpY1wiLDE3OlwieC1tYWMtdHVya2lzaFwiLDE4OlwieC1tYWMtY3JvYXRpYW5cIiwyNDpcIngtbWFjLWNlXCIsMjU6XCJ4LW1hYy1jZVwiLDI2OlwieC1tYWMtY2VcIiwyNzpcIngtbWFjLWNlXCIsMjg6XCJ4LW1hYy1jZVwiLDMwOlwieC1tYWMtaWNlbGFuZGljXCIsMzc6XCJ4LW1hYy1yb21hbmlhblwiLDM4OlwieC1tYWMtY2VcIiwzOTpcIngtbWFjLWNlXCIsNDA6XCJ4LW1hYy1jZVwiLDE0MzpcIngtbWFjLWludWl0XCIsMTQ2OlwieC1tYWMtZ2FlbGljXCJ9LGdmPXtwYXJzZTpaYSxtYWtlOmNifSxoZj1be2JlZ2luOjAsZW5kOjEyN30se2JlZ2luOjEyOCxlbmQ6MjU1fSx7YmVnaW46MjU2LGVuZDozODN9LHtiZWdpbjozODQsZW5kOjU5MX0se2JlZ2luOjU5MixlbmQ6Njg3fSx7YmVnaW46Njg4LGVuZDo3Njd9LHtiZWdpbjo3NjgsZW5kOjg3OX0se2JlZ2luOjg4MCxlbmQ6MTAyM30se2JlZ2luOjExMzkyLGVuZDoxMTUxOX0se2JlZ2luOjEwMjQsZW5kOjEyNzl9LHtiZWdpbjoxMzI4LGVuZDoxNDIzfSx7YmVnaW46MTQyNCxlbmQ6MTUzNX0se2JlZ2luOjQyMjQwLGVuZDo0MjU1OX0se2JlZ2luOjE1MzYsZW5kOjE3OTF9LHtiZWdpbjoxOTg0LGVuZDoyMDQ3fSx7YmVnaW46MjMwNCxlbmQ6MjQzMX0se2JlZ2luOjI0MzIsZW5kOjI1NTl9LHtiZWdpbjoyNTYwLGVuZDoyNjg3fSx7YmVnaW46MjY4OCxlbmQ6MjgxNX0se2JlZ2luOjI4MTYsZW5kOjI5NDN9LHtiZWdpbjoyOTQ0LGVuZDozMDcxfSx7YmVnaW46MzA3MixlbmQ6MzE5OX0se2JlZ2luOjMyMDAsZW5kOjMzMjd9LHtiZWdpbjozMzI4LGVuZDozNDU1fSx7YmVnaW46MzU4NCxlbmQ6MzcxMX0se2JlZ2luOjM3MTIsZW5kOjM4Mzl9LHtiZWdpbjo0MjU2LGVuZDo0MzUxfSx7YmVnaW46NjkxMixlbmQ6NzAzOX0se2JlZ2luOjQzNTIsZW5kOjQ2MDd9LHtiZWdpbjo3NjgwLGVuZDo3OTM1fSx7YmVnaW46NzkzNixlbmQ6ODE5MX0se2JlZ2luOjgxOTIsZW5kOjgzMDN9LHtiZWdpbjo4MzA0LGVuZDo4MzUxfSx7YmVnaW46ODM1MixlbmQ6ODM5OX0se2JlZ2luOjg0MDAsZW5kOjg0NDd9LHtiZWdpbjo4NDQ4LGVuZDo4NTI3fSx7YmVnaW46ODUyOCxlbmQ6ODU5MX0se2JlZ2luOjg1OTIsZW5kOjg3MDN9LHtiZWdpbjo4NzA0LGVuZDo4OTU5fSx7YmVnaW46ODk2MCxlbmQ6OTIxNX0se2JlZ2luOjkyMTYsZW5kOjkyNzl9LHtiZWdpbjo5MjgwLGVuZDo5MzExfSx7YmVnaW46OTMxMixlbmQ6OTQ3MX0se2JlZ2luOjk0NzIsZW5kOjk1OTl9LHtiZWdpbjo5NjAwLGVuZDo5NjMxfSx7YmVnaW46OTYzMixlbmQ6OTcyN30se2JlZ2luOjk3MjgsZW5kOjk5ODN9LHtiZWdpbjo5OTg0LGVuZDoxMDE3NX0se2JlZ2luOjEyMjg4LGVuZDoxMjM1MX0se2JlZ2luOjEyMzUyLGVuZDoxMjQ0N30se2JlZ2luOjEyNDQ4LGVuZDoxMjU0M30se2JlZ2luOjEyNTQ0LGVuZDoxMjU5MX0se2JlZ2luOjEyNTkyLGVuZDoxMjY4N30se2JlZ2luOjQzMDcyLGVuZDo0MzEzNX0se2JlZ2luOjEyODAwLGVuZDoxMzA1NX0se2JlZ2luOjEzMDU2LGVuZDoxMzMxMX0se2JlZ2luOjQ0MDMyLGVuZDo1NTIxNX0se2JlZ2luOjU1Mjk2LGVuZDo1NzM0M30se2JlZ2luOjY3ODQwLGVuZDo2Nzg3MX0se2JlZ2luOjE5OTY4LGVuZDo0MDk1OX0se2JlZ2luOjU3MzQ0LGVuZDo2Mzc0M30se2JlZ2luOjEyNzM2LGVuZDoxMjc4M30se2JlZ2luOjY0MjU2LGVuZDo2NDMzNX0se2JlZ2luOjY0MzM2LGVuZDo2NTAyM30se2JlZ2luOjY1MDU2LGVuZDo2NTA3MX0se2JlZ2luOjY1MDQwLGVuZDo2NTA1NX0se2JlZ2luOjY1MTA0LGVuZDo2NTEzNX0se2JlZ2luOjY1MTM2LGVuZDo2NTI3OX0se2JlZ2luOjY1MjgwLGVuZDo2NTUxOX0se2JlZ2luOjY1NTIwLGVuZDo2NTUzNX0se2JlZ2luOjM4NDAsZW5kOjQwOTV9LHtiZWdpbjoxNzkyLGVuZDoxODcxfSx7YmVnaW46MTkyMCxlbmQ6MTk4M30se2JlZ2luOjM0NTYsZW5kOjM1ODN9LHtiZWdpbjo0MDk2LGVuZDo0MjU1fSx7YmVnaW46NDYwOCxlbmQ6NDk5MX0se2JlZ2luOjUwMjQsZW5kOjUxMTl9LHtiZWdpbjo1MTIwLGVuZDo1NzU5fSx7YmVnaW46NTc2MCxlbmQ6NTc5MX0se2JlZ2luOjU3OTIsZW5kOjU4ODd9LHtiZWdpbjo2MDE2LGVuZDo2MTQzfSx7YmVnaW46NjE0NCxlbmQ6NjMxOX0se2JlZ2luOjEwMjQwLGVuZDoxMDQ5NX0se2JlZ2luOjQwOTYwLGVuZDo0MjEyN30se2JlZ2luOjU4ODgsZW5kOjU5MTl9LHtiZWdpbjo2NjMwNCxlbmQ6NjYzNTF9LHtiZWdpbjo2NjM1MixlbmQ6NjYzODN9LHtiZWdpbjo2NjU2MCxlbmQ6NjY2Mzl9LHtiZWdpbjoxMTg3ODQsZW5kOjExOTAzOX0se2JlZ2luOjExOTgwOCxlbmQ6MTIwODMxfSx7YmVnaW46MTA0NDQ4MCxlbmQ6MTA0ODU3M30se2JlZ2luOjY1MDI0LGVuZDo2NTAzOX0se2JlZ2luOjkxNzUwNCxlbmQ6OTE3NjMxfSx7YmVnaW46NjQwMCxlbmQ6NjQ3OX0se2JlZ2luOjY0ODAsZW5kOjY1Mjd9LHtiZWdpbjo2NTI4LGVuZDo2NjIzfSx7YmVnaW46NjY1NixlbmQ6NjY4N30se2JlZ2luOjExMjY0LGVuZDoxMTM1OX0se2JlZ2luOjExNTY4LGVuZDoxMTY0N30se2JlZ2luOjE5OTA0LGVuZDoxOTk2N30se2JlZ2luOjQzMDA4LGVuZDo0MzA1NX0se2JlZ2luOjY1NTM2LGVuZDo2NTY2M30se2JlZ2luOjY1ODU2LGVuZDo2NTkzNX0se2JlZ2luOjY2NDMyLGVuZDo2NjQ2M30se2JlZ2luOjY2NDY0LGVuZDo2NjUyN30se2JlZ2luOjY2NjQwLGVuZDo2NjY4N30se2JlZ2luOjY2Njg4LGVuZDo2NjczNX0se2JlZ2luOjY3NTg0LGVuZDo2NzY0N30se2JlZ2luOjY4MDk2LGVuZDo2ODE5MX0se2JlZ2luOjExOTU1MixlbmQ6MTE5NjQ3fSx7YmVnaW46NzM3MjgsZW5kOjc0NzUxfSx7YmVnaW46MTE5NjQ4LGVuZDoxMTk2Nzl9LHtiZWdpbjo3MDQwLGVuZDo3MTAzfSx7YmVnaW46NzE2OCxlbmQ6NzI0N30se2JlZ2luOjcyNDgsZW5kOjcyOTV9LHtiZWdpbjo0MzEzNixlbmQ6NDMyMzF9LHtiZWdpbjo0MzI2NCxlbmQ6NDMzMTF9LHtiZWdpbjo0MzMxMixlbmQ6NDMzNTl9LHtiZWdpbjo0MzUyMCxlbmQ6NDM2MTV9LHtiZWdpbjo2NTkzNixlbmQ6NjU5OTl9LHtiZWdpbjo2NmUzLGVuZDo2NjA0N30se2JlZ2luOjY2MjA4LGVuZDo2NjI3MX0se2JlZ2luOjEyNzAyNCxlbmQ6MTI3MTM1fV0samY9e3BhcnNlOmViLG1ha2U6ZmIsdW5pY29kZVJhbmdlczpoZixnZXRVbmljb2RlUmFuZ2U6ZGJ9LGtmPXtwYXJzZTpnYixtYWtlOmhifSxsZj1uZXcgQXJyYXkoOSk7bGZbMV09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiAxPT09Yj97c3Vic3RGb3JtYXQ6MSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxkZWx0YUdseXBoSWQ6dGhpcy5wYXJzZVVTaG9ydCgpfToyPT09Yj97c3Vic3RGb3JtYXQ6Mixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxzdWJzdGl0dXRlOnRoaXMucGFyc2VPZmZzZXQxNkxpc3QoKX06dm9pZCB4ZS5hc3NlcnQoITEsXCIweFwiK2EudG9TdHJpbmcoMTYpK1wiOiBsb29rdXAgdHlwZSAxIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIil9LGxmWzJdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgTXVsdGlwbGUgU3Vic3RpdHV0aW9uIFN1YnRhYmxlIGlkZW50aWZpZXItZm9ybWF0IG11c3QgYmUgMVwiKSx7c3Vic3RGb3JtYXQ6YSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxzZXF1ZW5jZXM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKCl9fSxsZlszXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWEsXCJHU1VCIEFsdGVybmF0ZSBTdWJzdGl0dXRpb24gU3VidGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpLHtzdWJzdEZvcm1hdDphLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGFsdGVybmF0ZVNldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKCl9fSxsZls0XT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWEsXCJHU1VCIGxpZ2F0dXJlIHRhYmxlIGlkZW50aWZpZXItZm9ybWF0IG11c3QgYmUgMVwiKSx7c3Vic3RGb3JtYXQ6YSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxsaWdhdHVyZVNldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7cmV0dXJue2xpZ0dseXBoOnRoaXMucGFyc2VVU2hvcnQoKSxjb21wb25lbnRzOnRoaXMucGFyc2VVU2hvcnRMaXN0KHRoaXMucGFyc2VVU2hvcnQoKS0xKX19KX19O3ZhciBtZj17c2VxdWVuY2VJbmRleDpRLnVTaG9ydCxsb29rdXBMaXN0SW5kZXg6US51U2hvcnR9O2xmWzVdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTtpZigxPT09YilyZXR1cm57c3Vic3RGb3JtYXQ6Yixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxydWxlU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCksYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJue2lucHV0OnRoaXMucGFyc2VVU2hvcnRMaXN0KGEtMSksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChiLG1mKX19KX07aWYoMj09PWIpcmV0dXJue3N1YnN0Rm9ybWF0OmIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksY2xhc3NEZWY6dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksY2xhc3NTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKSxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm57Y2xhc3Nlczp0aGlzLnBhcnNlVVNob3J0TGlzdChhLTEpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QoYixtZil9fSl9O2lmKDM9PT1iKXt2YXIgYz10aGlzLnBhcnNlVVNob3J0KCksZD10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJue3N1YnN0Rm9ybWF0OmIsY292ZXJhZ2VzOnRoaXMucGFyc2VMaXN0KGMsUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KGQsbWYpfX14ZS5hc3NlcnQoITEsXCIweFwiK2EudG9TdHJpbmcoMTYpK1wiOiBsb29rdXAgdHlwZSA1IGZvcm1hdCBtdXN0IGJlIDEsIDIgb3IgMy5cIil9LGxmWzZdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4gMT09PWI/e3N1YnN0Rm9ybWF0OjEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksY2hhaW5SdWxlU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoZnVuY3Rpb24oKXtyZXR1cm57YmFja3RyYWNrOnRoaXMucGFyc2VVU2hvcnRMaXN0KCksaW5wdXQ6dGhpcy5wYXJzZVVTaG9ydExpc3QodGhpcy5wYXJzZVNob3J0KCktMSksbG9va2FoZWFkOnRoaXMucGFyc2VVU2hvcnRMaXN0KCksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChtZil9fSl9OjI9PT1iP3tzdWJzdEZvcm1hdDoyLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGJhY2t0cmFja0NsYXNzRGVmOnRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGlucHV0Q2xhc3NEZWY6dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksbG9va2FoZWFkQ2xhc3NEZWY6dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksY2hhaW5DbGFzc1NldDp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoZnVuY3Rpb24oKXtyZXR1cm57YmFja3RyYWNrOnRoaXMucGFyc2VVU2hvcnRMaXN0KCksaW5wdXQ6dGhpcy5wYXJzZVVTaG9ydExpc3QodGhpcy5wYXJzZVNob3J0KCktMSksbG9va2FoZWFkOnRoaXMucGFyc2VVU2hvcnRMaXN0KCksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChtZil9fSl9OjM9PT1iP3tzdWJzdEZvcm1hdDozLGJhY2t0cmFja0NvdmVyYWdlOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmNvdmVyYWdlKSksaW5wdXRDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGxvb2thaGVhZENvdmVyYWdlOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmNvdmVyYWdlKSksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChtZil9OnZvaWQgeGUuYXNzZXJ0KCExLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogbG9va3VwIHR5cGUgNiBmb3JtYXQgbXVzdCBiZSAxLCAyIG9yIDMuXCIpfSxsZls3XT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKTt4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgRXh0ZW5zaW9uIFN1YnN0aXR1dGlvbiBzdWJ0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIik7dmFyIGI9dGhpcy5wYXJzZVVTaG9ydCgpLGM9bmV3IFEodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucGFyc2VVTG9uZygpKTtyZXR1cm57c3Vic3RGb3JtYXQ6MSxsb29rdXBUeXBlOmIsZXh0ZW5zaW9uOmxmW2JdLmNhbGwoYyl9fSxsZls4XT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWEsXCJHU1VCIFJldmVyc2UgQ2hhaW5pbmcgQ29udGV4dHVhbCBTaW5nbGUgU3Vic3RpdHV0aW9uIFN1YnRhYmxlIGlkZW50aWZpZXItZm9ybWF0IG11c3QgYmUgMVwiKSx7c3Vic3RGb3JtYXQ6YSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxiYWNrdHJhY2tDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGxvb2thaGVhZENvdmVyYWdlOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmNvdmVyYWdlKSksc3Vic3RpdHV0ZXM6dGhpcy5wYXJzZVVTaG9ydExpc3QoKX19O3ZhciBuZj1uZXcgQXJyYXkoOSk7bmZbMV09ZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLnN1YnN0Rm9ybWF0P25ldyBJZS5UYWJsZShcInN1YnN0aXR1dGlvblRhYmxlXCIsW3tuYW1lOlwic3Vic3RGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJjb3ZlcmFnZVwiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Db3ZlcmFnZShhLmNvdmVyYWdlKX0se25hbWU6XCJkZWx0YUdseXBoSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5kZWx0YUdseXBoSWR9XSk6bmV3IEllLlRhYmxlKFwic3Vic3RpdHV0aW9uVGFibGVcIixbe25hbWU6XCJzdWJzdEZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToyfSx7bmFtZTpcImNvdmVyYWdlXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkNvdmVyYWdlKGEuY292ZXJhZ2UpfV0uY29uY2F0KEllLnVzaG9ydExpc3QoXCJzdWJzdGl0dXRlXCIsYS5zdWJzdGl0dXRlKSkpfSxuZlszXT1mdW5jdGlvbihhKXtyZXR1cm4geGUuYXNzZXJ0KDE9PT1hLnN1YnN0Rm9ybWF0LFwiTG9va3VwIHR5cGUgMyBzdWJzdEZvcm1hdCBtdXN0IGJlIDEuXCIpLG5ldyBJZS5UYWJsZShcInN1YnN0aXR1dGlvblRhYmxlXCIsW3tuYW1lOlwic3Vic3RGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJjb3ZlcmFnZVwiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Db3ZlcmFnZShhLmNvdmVyYWdlKX1dLmNvbmNhdChJZS50YWJsZUxpc3QoXCJhbHRTZXRcIixhLmFsdGVybmF0ZVNldHMsZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcImFsdGVybmF0ZVNldFRhYmxlXCIsSWUudXNob3J0TGlzdChcImFsdGVybmF0ZVwiLGEpKX0pKSl9LG5mWzRdPWZ1bmN0aW9uKGEpe3JldHVybiB4ZS5hc3NlcnQoMT09PWEuc3Vic3RGb3JtYXQsXCJMb29rdXAgdHlwZSA0IHN1YnN0Rm9ybWF0IG11c3QgYmUgMS5cIiksbmV3IEllLlRhYmxlKFwic3Vic3RpdHV0aW9uVGFibGVcIixbe25hbWU6XCJzdWJzdEZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcImNvdmVyYWdlXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkNvdmVyYWdlKGEuY292ZXJhZ2UpfV0uY29uY2F0KEllLnRhYmxlTGlzdChcImxpZ1NldFwiLGEubGlnYXR1cmVTZXRzLGZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJsaWdhdHVyZVNldFRhYmxlXCIsSWUudGFibGVMaXN0KFwibGlnYXR1cmVcIixhLGZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJsaWdhdHVyZVRhYmxlXCIsW3tuYW1lOlwibGlnR2x5cGhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5saWdHbHlwaH1dLmNvbmNhdChJZS51c2hvcnRMaXN0KFwiY29tcG9uZW50XCIsYS5jb21wb25lbnRzLGEuY29tcG9uZW50cy5sZW5ndGgrMSkpKX0pKX0pKSl9O3ZhciBvZj17cGFyc2U6aWIsbWFrZTpqYn0scGY9e3BhcnNlOmtiLG1ha2U6bGJ9LHFmPXttYWtlOnBiLGZvbnRUb1RhYmxlOnNiLGNvbXB1dGVDaGVja1N1bTpuYn07d2IucHJvdG90eXBlPXtzZWFyY2hUYWc6dGIsYmluU2VhcmNoOnViLGdldFRhYmxlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZm9udC50YWJsZXNbdGhpcy50YWJsZU5hbWVdO3JldHVybiFiJiZhJiYoYj10aGlzLmZvbnQudGFibGVzW3RoaXMudGFibGVOYW1lXT10aGlzLmNyZWF0ZURlZmF1bHRUYWJsZSgpKSxifSxnZXRTY3JpcHROYW1lczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0VGFibGUoKTtyZXR1cm4gYT9hLnNjcmlwdHMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnRhZ30pOltdfSxnZXREZWZhdWx0U2NyaXB0TmFtZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0VGFibGUoKTtpZihhKXtmb3IodmFyIGI9ITEsYz0wO2M8YS5zY3JpcHRzLmxlbmd0aDtjKyspe3ZhciBkPWEuc2NyaXB0c1tjXS50YWc7aWYoXCJERkxUXCI9PT1kKXJldHVybiBkO1wibGF0blwiPT09ZCYmKGI9ITApfXJldHVybiBiP1wibGF0blwiOnZvaWQgMH19LGdldFNjcmlwdFRhYmxlOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5nZXRUYWJsZShiKTtpZihjKXthPWF8fFwiREZMVFwiO3ZhciBkPWMuc2NyaXB0cyxlPXRiKGMuc2NyaXB0cyxhKTtpZihlPj0wKXJldHVybiBkW2VdLnNjcmlwdDtpZihiKXt2YXIgZj17dGFnOmEsc2NyaXB0OntkZWZhdWx0TGFuZ1N5czp7cmVzZXJ2ZWQ6MCxyZXFGZWF0dXJlSW5kZXg6NjU1MzUsZmVhdHVyZUluZGV4ZXM6W119LGxhbmdTeXNSZWNvcmRzOltdfX07cmV0dXJuIGQuc3BsaWNlKC0xLWUsMCxmKSxmLnNjcmlwdH19fSxnZXRMYW5nU3lzVGFibGU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuZ2V0U2NyaXB0VGFibGUoYSxjKTtpZihkKXtpZighYnx8XCJkZmx0XCI9PT1ifHxcIkRGTFRcIj09PWIpcmV0dXJuIGQuZGVmYXVsdExhbmdTeXM7dmFyIGU9dGIoZC5sYW5nU3lzUmVjb3JkcyxiKTtpZihlPj0wKXJldHVybiBkLmxhbmdTeXNSZWNvcmRzW2VdLmxhbmdTeXM7aWYoYyl7dmFyIGY9e3RhZzpiLGxhbmdTeXM6e3Jlc2VydmVkOjAscmVxRmVhdHVyZUluZGV4OjY1NTM1LGZlYXR1cmVJbmRleGVzOltdfX07cmV0dXJuIGQubGFuZ1N5c1JlY29yZHMuc3BsaWNlKC0xLWUsMCxmKSxmLmxhbmdTeXN9fX0sZ2V0RmVhdHVyZVRhYmxlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZ2V0TGFuZ1N5c1RhYmxlKGEsYixkKTtpZihlKXtmb3IodmFyIGYsZz1lLmZlYXR1cmVJbmRleGVzLGg9dGhpcy5mb250LnRhYmxlc1t0aGlzLnRhYmxlTmFtZV0uZmVhdHVyZXMsaT0wO2k8Zy5sZW5ndGg7aSsrKWlmKGY9aFtnW2ldXSxmLnRhZz09PWMpcmV0dXJuIGYuZmVhdHVyZTtpZihkKXt2YXIgaj1oLmxlbmd0aDtyZXR1cm4geGUuYXNzZXJ0KDA9PT1qfHxjPj1oW2otMV0udGFnLFwiRmVhdHVyZXMgbXVzdCBiZSBhZGRlZCBpbiBhbHBoYWJldGljYWwgb3JkZXIuXCIpLGY9e3RhZzpjLGZlYXR1cmU6e3BhcmFtczowLGxvb2t1cExpc3RJbmRleGVzOltdfX0saC5wdXNoKGYpLGcucHVzaChqKSxmLmZlYXR1cmV9fX0sZ2V0TG9va3VwVGFibGVzOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9dGhpcy5nZXRGZWF0dXJlVGFibGUoYSxiLGMsZSksZz1bXTtpZihmKXtmb3IodmFyIGgsaT1mLmxvb2t1cExpc3RJbmRleGVzLGo9dGhpcy5mb250LnRhYmxlc1t0aGlzLnRhYmxlTmFtZV0ubG9va3VwcyxrPTA7azxpLmxlbmd0aDtrKyspaD1qW2lba11dLGgubG9va3VwVHlwZT09PWQmJmcucHVzaChoKTtpZigwPT09Zy5sZW5ndGgmJmUpe2g9e2xvb2t1cFR5cGU6ZCxsb29rdXBGbGFnOjAsc3VidGFibGVzOltdLG1hcmtGaWx0ZXJpbmdTZXQ6dm9pZCAwfTt2YXIgbD1qLmxlbmd0aDtyZXR1cm4gai5wdXNoKGgpLGkucHVzaChsKSxbaF19fXJldHVybiBnfSxnZXRHbHlwaENsYXNzOmZ1bmN0aW9uKGEsYil7c3dpdGNoKGEuZm9ybWF0KXtjYXNlIDE6cmV0dXJuIGEuc3RhcnRHbHlwaDw9YiYmYjxhLnN0YXJ0R2x5cGgrYS5jbGFzc2VzLmxlbmd0aD9hLmNsYXNzZXNbYi1hLnN0YXJ0R2x5cGhdOjA7Y2FzZSAyOnZhciBjPXZiKGEucmFuZ2VzLGIpO3JldHVybiBjP2MuY2xhc3NJZDowfX0sZ2V0Q292ZXJhZ2VJbmRleDpmdW5jdGlvbihhLGIpe3N3aXRjaChhLmZvcm1hdCl7Y2FzZSAxOnZhciBjPXViKGEuZ2x5cGhzLGIpO3JldHVybiBjPj0wP2M6LTE7Y2FzZSAyOnZhciBkPXZiKGEucmFuZ2VzLGIpO3JldHVybiBkP2QuaW5kZXgrYi1kLnN0YXJ0Oi0xfX0sZXhwYW5kQ292ZXJhZ2U6ZnVuY3Rpb24oYSl7aWYoMT09PWEuZm9ybWF0KXJldHVybiBhLmdseXBocztmb3IodmFyIGI9W10sYz1hLnJhbmdlcyxkPTA7ZDxjLmxlbmd0aDtkKyspZm9yKHZhciBlPWNbZF0sZj1lLnN0YXJ0LGc9ZS5lbmQsaD1mO2g8PWc7aCsrKWIucHVzaChoKTtyZXR1cm4gYn19LHhiLnByb3RvdHlwZT13Yi5wcm90b3R5cGUseGIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldERlZmF1bHRTY3JpcHROYW1lKCk7dGhpcy5kZWZhdWx0S2VybmluZ1RhYmxlcz10aGlzLmdldEtlcm5pbmdUYWJsZXMoYSl9LHhiLnByb3RvdHlwZS5nZXRLZXJuaW5nVmFsdWU9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD10aGlzLGU9MDtlPGEubGVuZ3RoO2UrKylmb3IodmFyIGY9YVtlXS5zdWJ0YWJsZXMsZz0wO2c8Zi5sZW5ndGg7ZysrKXt2YXIgaD1mW2ddLGk9ZC5nZXRDb3ZlcmFnZUluZGV4KGguY292ZXJhZ2UsYik7aWYoIShpPDApKXN3aXRjaChoLnBvc0Zvcm1hdCl7Y2FzZSAxOmZvcih2YXIgaj1oLnBhaXJTZXRzW2ldLGs9MDtrPGoubGVuZ3RoO2srKyl7dmFyIGw9altrXTtpZihsLnNlY29uZEdseXBoPT09YylyZXR1cm4gbC52YWx1ZTEmJmwudmFsdWUxLnhBZHZhbmNlfHwwfWJyZWFrO2Nhc2UgMjp2YXIgbT1kLmdldEdseXBoQ2xhc3MoaC5jbGFzc0RlZjEsYiksbj1kLmdldEdseXBoQ2xhc3MoaC5jbGFzc0RlZjIsYyksbz1oLmNsYXNzUmVjb3Jkc1ttXVtuXTtyZXR1cm4gby52YWx1ZTEmJm8udmFsdWUxLnhBZHZhbmNlfHwwfX1yZXR1cm4gMH0seGIucHJvdG90eXBlLmdldEtlcm5pbmdUYWJsZXM9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLmZvbnQudGFibGVzLmdwb3MpcmV0dXJuIHRoaXMuZ2V0TG9va3VwVGFibGVzKGEsYixcImtlcm5cIiwyKX0seWIucHJvdG90eXBlPXdiLnByb3RvdHlwZSx5Yi5wcm90b3R5cGUuY3JlYXRlRGVmYXVsdFRhYmxlPWZ1bmN0aW9uKCl7cmV0dXJue3ZlcnNpb246MSxzY3JpcHRzOlt7dGFnOlwiREZMVFwiLHNjcmlwdDp7ZGVmYXVsdExhbmdTeXM6e3Jlc2VydmVkOjAscmVxRmVhdHVyZUluZGV4OjY1NTM1LGZlYXR1cmVJbmRleGVzOltdfSxsYW5nU3lzUmVjb3JkczpbXX19XSxmZWF0dXJlczpbXSxsb29rdXBzOltdfX0seWIucHJvdG90eXBlLmdldFNpbmdsZT1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT1bXSxmPXRoaXMuZ2V0TG9va3VwVGFibGVzKGIsYyxhLDEpLGc9MDtnPGYubGVuZ3RoO2crKylmb3IodmFyIGg9ZltnXS5zdWJ0YWJsZXMsaT0wO2k8aC5sZW5ndGg7aSsrKXt2YXIgaj1oW2ldLGs9ZC5leHBhbmRDb3ZlcmFnZShqLmNvdmVyYWdlKSxsPXZvaWQgMDtpZigxPT09ai5zdWJzdEZvcm1hdCl7dmFyIG09ai5kZWx0YUdseXBoSWQ7Zm9yKGw9MDtsPGsubGVuZ3RoO2wrKyl7dmFyIG49a1tsXTtlLnB1c2goe3N1YjpuLGJ5Om4rbX0pfX1lbHNle3ZhciBvPWouc3Vic3RpdHV0ZTtmb3IobD0wO2w8ay5sZW5ndGg7bCsrKWUucHVzaCh7c3ViOmtbbF0sYnk6b1tsXX0pfX1yZXR1cm4gZX0seWIucHJvdG90eXBlLmdldEFsdGVybmF0ZXM9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD10aGlzLGU9W10sZj10aGlzLmdldExvb2t1cFRhYmxlcyhiLGMsYSwzKSxnPTA7ZzxmLmxlbmd0aDtnKyspZm9yKHZhciBoPWZbZ10uc3VidGFibGVzLGk9MDtpPGgubGVuZ3RoO2krKylmb3IodmFyIGo9aFtpXSxrPWQuZXhwYW5kQ292ZXJhZ2Uoai5jb3ZlcmFnZSksbD1qLmFsdGVybmF0ZVNldHMsbT0wO208ay5sZW5ndGg7bSsrKWUucHVzaCh7c3ViOmtbbV0sYnk6bFttXX0pO3JldHVybiBlfSx5Yi5wcm90b3R5cGUuZ2V0TGlnYXR1cmVzPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPVtdLGY9dGhpcy5nZXRMb29rdXBUYWJsZXMoYixjLGEsNCksZz0wO2c8Zi5sZW5ndGg7ZysrKWZvcih2YXIgaD1mW2ddLnN1YnRhYmxlcyxpPTA7aTxoLmxlbmd0aDtpKyspZm9yKHZhciBqPWhbaV0saz1kLmV4cGFuZENvdmVyYWdlKGouY292ZXJhZ2UpLGw9ai5saWdhdHVyZVNldHMsbT0wO208ay5sZW5ndGg7bSsrKWZvcih2YXIgbj1rW21dLG89bFttXSxwPTA7cDxvLmxlbmd0aDtwKyspe3ZhciBxPW9bcF07ZS5wdXNoKHtzdWI6W25dLmNvbmNhdChxLmNvbXBvbmVudHMpLGJ5OnEubGlnR2x5cGh9KX1yZXR1cm4gZX0seWIucHJvdG90eXBlLmFkZFNpbmdsZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldExvb2t1cFRhYmxlcyhjLGQsYSwxLCEwKVswXSxmPUFiKGUsMix7c3Vic3RGb3JtYXQ6Mixjb3ZlcmFnZTp7Zm9ybWF0OjEsZ2x5cGhzOltdfSxzdWJzdGl0dXRlOltdfSk7eGUuYXNzZXJ0KDE9PT1mLmNvdmVyYWdlLmZvcm1hdCxcIkxpZ2F0dXJlOiB1bmFibGUgdG8gbW9kaWZ5IGNvdmVyYWdlIHRhYmxlIGZvcm1hdCBcIitmLmNvdmVyYWdlLmZvcm1hdCk7dmFyIGc9Yi5zdWIsaD10aGlzLmJpblNlYXJjaChmLmNvdmVyYWdlLmdseXBocyxnKTtoPDAmJihoPS0xLWgsZi5jb3ZlcmFnZS5nbHlwaHMuc3BsaWNlKGgsMCxnKSxmLnN1YnN0aXR1dGUuc3BsaWNlKGgsMCwwKSksZi5zdWJzdGl0dXRlW2hdPWIuYnl9LHliLnByb3RvdHlwZS5hZGRBbHRlcm5hdGU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5nZXRMb29rdXBUYWJsZXMoYyxkLGEsMywhMClbMF0sZj1BYihlLDEse3N1YnN0Rm9ybWF0OjEsY292ZXJhZ2U6e2Zvcm1hdDoxLGdseXBoczpbXX0sYWx0ZXJuYXRlU2V0czpbXX0pO3hlLmFzc2VydCgxPT09Zi5jb3ZlcmFnZS5mb3JtYXQsXCJMaWdhdHVyZTogdW5hYmxlIHRvIG1vZGlmeSBjb3ZlcmFnZSB0YWJsZSBmb3JtYXQgXCIrZi5jb3ZlcmFnZS5mb3JtYXQpO3ZhciBnPWIuc3ViLGg9dGhpcy5iaW5TZWFyY2goZi5jb3ZlcmFnZS5nbHlwaHMsZyk7aDwwJiYoaD0tMS1oLGYuY292ZXJhZ2UuZ2x5cGhzLnNwbGljZShoLDAsZyksZi5hbHRlcm5hdGVTZXRzLnNwbGljZShoLDAsMCkpLGYuYWx0ZXJuYXRlU2V0c1toXT1iLmJ5fSx5Yi5wcm90b3R5cGUuYWRkTGlnYXR1cmU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5nZXRMb29rdXBUYWJsZXMoYyxkLGEsNCwhMClbMF0sZj1lLnN1YnRhYmxlc1swXTtmfHwoZj17c3Vic3RGb3JtYXQ6MSxjb3ZlcmFnZTp7Zm9ybWF0OjEsZ2x5cGhzOltdfSxsaWdhdHVyZVNldHM6W119LGUuc3VidGFibGVzWzBdPWYpLHhlLmFzc2VydCgxPT09Zi5jb3ZlcmFnZS5mb3JtYXQsXCJMaWdhdHVyZTogdW5hYmxlIHRvIG1vZGlmeSBjb3ZlcmFnZSB0YWJsZSBmb3JtYXQgXCIrZi5jb3ZlcmFnZS5mb3JtYXQpO3ZhciBnPWIuc3ViWzBdLGg9Yi5zdWIuc2xpY2UoMSksaT17bGlnR2x5cGg6Yi5ieSxjb21wb25lbnRzOmh9LGo9dGhpcy5iaW5TZWFyY2goZi5jb3ZlcmFnZS5nbHlwaHMsZyk7aWYoaj49MCl7Zm9yKHZhciBrPWYubGlnYXR1cmVTZXRzW2pdLGw9MDtsPGsubGVuZ3RoO2wrKylpZih6YihrW2xdLmNvbXBvbmVudHMsaCkpcmV0dXJuO2sucHVzaChpKX1lbHNlIGo9LTEtaixmLmNvdmVyYWdlLmdseXBocy5zcGxpY2UoaiwwLGcpLGYubGlnYXR1cmVTZXRzLnNwbGljZShqLDAsW2ldKX0seWIucHJvdG90eXBlLmdldEZlYXR1cmU9ZnVuY3Rpb24oYSxiLGMpe2lmKC9zc1xcZFxcZC8udGVzdChhKSlyZXR1cm4gdGhpcy5nZXRTaW5nbGUoYSxiLGMpO3N3aXRjaChhKXtjYXNlXCJhYWx0XCI6Y2FzZVwic2FsdFwiOnJldHVybiB0aGlzLmdldFNpbmdsZShhLGIsYykuY29uY2F0KHRoaXMuZ2V0QWx0ZXJuYXRlcyhhLGIsYykpO2Nhc2VcImRsaWdcIjpjYXNlXCJsaWdhXCI6Y2FzZVwicmxpZ1wiOnJldHVybiB0aGlzLmdldExpZ2F0dXJlcyhhLGIsYyl9fSx5Yi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEsYixjLGQpe2lmKC9zc1xcZFxcZC8udGVzdChhKSlyZXR1cm4gdGhpcy5hZGRTaW5nbGUoYSxiLGMsZCk7c3dpdGNoKGEpe2Nhc2VcImFhbHRcIjpjYXNlXCJzYWx0XCI6cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGIuYnk/dGhpcy5hZGRTaW5nbGUoYSxiLGMsZCk6dGhpcy5hZGRBbHRlcm5hdGUoYSxiLGMsZCk7Y2FzZVwiZGxpZ1wiOmNhc2VcImxpZ2FcIjpjYXNlXCJybGlnXCI6cmV0dXJuIHRoaXMuYWRkTGlnYXR1cmUoYSxiLGMsZCl9fTt2YXIgcmYsc2YsdGYsdWYsdmY9e2dldFBhdGg6SmIscGFyc2U6TGJ9LHdmPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuc3JQZXJpb2QsYz10aGlzLnNyUGhhc2UsZD10aGlzLnNyVGhyZXNob2xkLGU9MTtyZXR1cm4gYTwwJiYoYT0tYSxlPS0xKSxhKz1kLWMsYT1NYXRoLnRydW5jKGEvYikqYixhKz1jLGE8MD9jKmU6YSplfSx4Zj17eDoxLHk6MCxheGlzOlwieFwiLGRpc3RhbmNlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybihjP2EueG86YS54KS0oZD9iLnhvOmIueCl9LGludGVycG9sYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrO3JldHVybiBkJiZkIT09dGhpcz8oZT1kLmRpc3RhbmNlKGEsYiwhMCwhMCksZj1kLmRpc3RhbmNlKGEsYywhMCwhMCksaT1kLmRpc3RhbmNlKGIsYiwhMSwhMCksaj1kLmRpc3RhbmNlKGMsYywhMSwhMCksZz1NYXRoLmFicyhlKSxoPU1hdGguYWJzKGYpLDA9PT0oaz1nK2gpP3ZvaWQgeGYuc2V0UmVsYXRpdmUoYSxhLChpK2opLzIsZCwhMCk6dm9pZCB4Zi5zZXRSZWxhdGl2ZShhLGEsKGkqaCtqKmcpL2ssZCwhMCkpOihlPWEueG8tYi54byxmPWEueG8tYy54byxpPWIueC1iLnhvLGo9Yy54LWMueG8sZz1NYXRoLmFicyhlKSxoPU1hdGguYWJzKGYpLDA9PT0oaz1nK2gpP3ZvaWQoYS54PWEueG8rKGkraikvMik6dm9pZChhLng9YS54bysoaSpoK2oqZykvaykpfSxub3JtYWxTbG9wZTpOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksc2V0UmVsYXRpdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZighZHx8ZD09PXRoaXMpcmV0dXJuIHZvaWQoYS54PShlP2IueG86Yi54KStjKTt2YXIgZj1lP2IueG86Yi54LGc9ZT9iLnlvOmIueSxoPWYrYypkLngsaT1nK2MqZC55O2EueD1oKyhhLnktaSkvZC5ub3JtYWxTbG9wZX0sc2xvcGU6MCx0b3VjaDpmdW5jdGlvbihhKXthLnhUb3VjaGVkPSEwfSx0b3VjaGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnhUb3VjaGVkfSx1bnRvdWNoOmZ1bmN0aW9uKGEpe2EueFRvdWNoZWQ9ITF9fSx5Zj17eDowLHk6MSxheGlzOlwieVwiLGRpc3RhbmNlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybihjP2EueW86YS55KS0oZD9iLnlvOmIueSl9LGludGVycG9sYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrO3JldHVybiBkJiZkIT09dGhpcz8oZT1kLmRpc3RhbmNlKGEsYiwhMCwhMCksZj1kLmRpc3RhbmNlKGEsYywhMCwhMCksaT1kLmRpc3RhbmNlKGIsYiwhMSwhMCksaj1kLmRpc3RhbmNlKGMsYywhMSwhMCksZz1NYXRoLmFicyhlKSxoPU1hdGguYWJzKGYpLDA9PT0oaz1nK2gpP3ZvaWQgeWYuc2V0UmVsYXRpdmUoYSxhLChpK2opLzIsZCwhMCk6dm9pZCB5Zi5zZXRSZWxhdGl2ZShhLGEsKGkqaCtqKmcpL2ssZCwhMCkpOihlPWEueW8tYi55byxmPWEueW8tYy55byxpPWIueS1iLnlvLGo9Yy55LWMueW8sZz1NYXRoLmFicyhlKSxoPU1hdGguYWJzKGYpLDA9PT0oaz1nK2gpP3ZvaWQoYS55PWEueW8rKGkraikvMik6dm9pZChhLnk9YS55bysoaSpoK2oqZykvaykpfSxub3JtYWxTbG9wZTowLHNldFJlbGF0aXZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoIWR8fGQ9PT10aGlzKXJldHVybiB2b2lkKGEueT0oZT9iLnlvOmIueSkrYyk7dmFyIGY9ZT9iLnhvOmIueCxnPWU/Yi55bzpiLnksaD1mK2MqZC54LGk9ZytjKmQueTthLnk9aStkLm5vcm1hbFNsb3BlKihhLngtaCl9LHNsb3BlOk51bWJlci5QT1NJVElWRV9JTkZJTklUWSx0b3VjaDpmdW5jdGlvbihhKXthLnlUb3VjaGVkPSEwfSx0b3VjaGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnlUb3VjaGVkfSx1bnRvdWNoOmZ1bmN0aW9uKGEpe2EueVRvdWNoZWQ9ITF9fTtPYmplY3QuZnJlZXplKHhmKSxPYmplY3QuZnJlZXplKHlmKSxUYi5wcm90b3R5cGUuZGlzdGFuY2U9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMueCp4Zi5kaXN0YW5jZShhLGIsYyxkKSt0aGlzLnkqeWYuZGlzdGFuY2UoYSxiLGMsZCl9LFRiLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztpZihnPWQuZGlzdGFuY2UoYSxiLCEwLCEwKSxoPWQuZGlzdGFuY2UoYSxjLCEwLCEwKSxlPWQuZGlzdGFuY2UoYixiLCExLCEwKSxmPWQuZGlzdGFuY2UoYyxjLCExLCEwKSxpPU1hdGguYWJzKGcpLGo9TWF0aC5hYnMoaCksMD09PShrPWkraikpcmV0dXJuIHZvaWQgdGhpcy5zZXRSZWxhdGl2ZShhLGEsKGUrZikvMixkLCEwKTt0aGlzLnNldFJlbGF0aXZlKGEsYSwoZSpqK2YqaSkvayxkLCEwKX0sVGIucHJvdG90eXBlLnNldFJlbGF0aXZlPWZ1bmN0aW9uKGEsYixjLGQsZSl7ZD1kfHx0aGlzO3ZhciBmPWU/Yi54bzpiLngsZz1lP2IueW86Yi55LGg9ZitjKmQueCxpPWcrYypkLnksaj1kLm5vcm1hbFNsb3BlLGs9dGhpcy5zbG9wZSxsPWEueCxtPWEueTthLng9KGsqbC1qKmgraS1tKS8oay1qKSxhLnk9ayooYS54LWwpK219LFRiLnByb3RvdHlwZS50b3VjaD1mdW5jdGlvbihhKXthLnhUb3VjaGVkPSEwLGEueVRvdWNoZWQ9ITB9LFZiLnByb3RvdHlwZS5uZXh0VG91Y2hlZD1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5uZXh0UG9pbnRPbkNvbnRvdXI7IWEudG91Y2hlZChiKSYmYiE9PXRoaXM7KWI9Yi5uZXh0UG9pbnRPbkNvbnRvdXI7cmV0dXJuIGJ9LFZiLnByb3RvdHlwZS5wcmV2VG91Y2hlZD1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5wcmV2UG9pbnRPbkNvbnRvdXI7IWEudG91Y2hlZChiKSYmYiE9PXRoaXM7KWI9Yi5wcmV2UG9pbnRPbkNvbnRvdXI7cmV0dXJuIGJ9O3ZhciB6Zj1PYmplY3QuZnJlZXplKG5ldyBWYigwLDApKSxBZj17Y3ZDdXRJbjoxNy8xNixkZWx0YUJhc2U6OSxkZWx0YVNoaWZ0Oi4xMjUsbG9vcDoxLG1pbkRpczoxLGF1dG9GbGlwOiEwfTtNYi5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihiLGMpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBjKXRocm93IG5ldyBFcnJvcihcIlBvaW50IHNpemUgaXMgbm90IGEgbnVtYmVyIVwiKTtpZighKHRoaXMuX2Vycm9yU3RhdGU+Mikpe3ZhciBkPXRoaXMuZm9udCxlPXRoaXMuX3ByZXBTdGF0ZTtpZighZXx8ZS5wcGVtIT09Yyl7dmFyIGY9dGhpcy5fZnBnbVN0YXRlO2lmKCFmKXtXYi5wcm90b3R5cGU9QWYsZj10aGlzLl9mcGdtU3RhdGU9bmV3IFdiKFwiZnBnbVwiLGQudGFibGVzLmZwZ20pLGYuZnVuY3M9W10sZi5mb250PWQsYS5ERUJVRyYmKGNvbnNvbGUubG9nKFwiLS0tRVhFQyBGUEdNLS0tXCIpLGYuc3RlcD0tMSk7dHJ5e3NmKGYpfWNhdGNoKGEpe3JldHVybiBjb25zb2xlLmxvZyhcIkhpbnRpbmcgZXJyb3IgaW4gRlBHTTpcIithKSx2b2lkKHRoaXMuX2Vycm9yU3RhdGU9Myl9fVdiLnByb3RvdHlwZT1mLGU9dGhpcy5fcHJlcFN0YXRlPW5ldyBXYihcInByZXBcIixkLnRhYmxlcy5wcmVwKSxlLnBwZW09Yzt2YXIgZz1kLnRhYmxlcy5jdnQ7aWYoZylmb3IodmFyIGg9ZS5jdnQ9bmV3IEFycmF5KGcubGVuZ3RoKSxpPWMvZC51bml0c1BlckVtLGo9MDtqPGcubGVuZ3RoO2orKyloW2pdPWdbal0qaTtlbHNlIGUuY3Z0PVtdO2EuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgUFJFUC0tLVwiKSxlLnN0ZXA9LTEpO3RyeXtzZihlKX1jYXRjaChhKXt0aGlzLl9lcnJvclN0YXRlPDImJmNvbnNvbGUubG9nKFwiSGludGluZyBlcnJvciBpbiBQUkVQOlwiK2EpLHRoaXMuX2Vycm9yU3RhdGU9Mn19aWYoISh0aGlzLl9lcnJvclN0YXRlPjEpKXRyeXtyZXR1cm4gdGYoYixlKX1jYXRjaChhKXtyZXR1cm4gdGhpcy5fZXJyb3JTdGF0ZTwxJiYoY29uc29sZS5sb2coXCJIaW50aW5nIGVycm9yOlwiK2EpLGNvbnNvbGUubG9nKFwiTm90ZTogZnVydGhlciBoaW50aW5nIGVycm9ycyBhcmUgc2lsZW5jZWRcIikpLHZvaWQodGhpcy5fZXJyb3JTdGF0ZT0xKX19fSx0Zj1mdW5jdGlvbihiLGMpe3ZhciBkLGUsZixnPWMucHBlbS9jLmZvbnQudW5pdHNQZXJFbSxoPWcsaT1iLmNvbXBvbmVudHM7aWYoV2IucHJvdG90eXBlPWMsaSl7dmFyIGo9Yy5mb250O2U9W10sZD1bXTtmb3IodmFyIGs9MDtrPGkubGVuZ3RoO2srKyl7dmFyIGw9aVtrXSxtPWouZ2x5cGhzLmdldChsLmdseXBoSW5kZXgpO2Y9bmV3IFdiKFwiZ2x5ZlwiLG0uaW5zdHJ1Y3Rpb25zKSxhLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIENPTVAgXCIraytcIi0tLVwiKSxmLnN0ZXA9LTEpLHVmKG0sZixnLGgpO2Zvcih2YXIgbj1NYXRoLnJvdW5kKGwuZHgqZyksbz1NYXRoLnJvdW5kKGwuZHkqaCkscD1mLmdab25lLHE9Zi5jb250b3VycyxyPTA7cjxwLmxlbmd0aDtyKyspe3ZhciBzPXBbcl07cy54VG91Y2hlZD1zLnlUb3VjaGVkPSExLHMueG89cy54PXMueCtuLHMueW89cy55PXMueStvfXZhciB0PWUubGVuZ3RoO2UucHVzaC5hcHBseShlLHApO2Zvcih2YXIgdT0wO3U8cS5sZW5ndGg7dSsrKWQucHVzaChxW3VdK3QpfWIuaW5zdHJ1Y3Rpb25zJiYhZi5pbmhpYml0R3JpZEZpdCYmKGY9bmV3IFdiKFwiZ2x5ZlwiLGIuaW5zdHJ1Y3Rpb25zKSxmLmdab25lPWYuejA9Zi56MT1mLnoyPWUsZi5jb250b3Vycz1kLGUucHVzaChuZXcgVmIoMCwwKSxuZXcgVmIoTWF0aC5yb3VuZChiLmFkdmFuY2VXaWR0aCpnKSwwKSksYS5ERUJVRyYmKGNvbnNvbGUubG9nKFwiLS0tRVhFQyBDT01QT1NJVEUtLS1cIiksZi5zdGVwPS0xKSxzZihmKSxlLmxlbmd0aC09Mil9ZWxzZSBmPW5ldyBXYihcImdseWZcIixiLmluc3RydWN0aW9ucyksYS5ERUJVRyYmKGNvbnNvbGUubG9nKFwiLS0tRVhFQyBHTFlQSC0tLVwiKSxmLnN0ZXA9LTEpLHVmKGIsZixnLGgpLGU9Zi5nWm9uZTtyZXR1cm4gZX0sdWY9ZnVuY3Rpb24oYixjLGQsZSl7Zm9yKHZhciBmLGc9Yi5wb2ludHN8fFtdLGg9Zy5sZW5ndGgsaT1jLmdab25lPWMuejA9Yy56MT1jLnoyPVtdLGo9Yy5jb250b3Vycz1bXSxrPTA7azxoO2srKylmPWdba10saVtrXT1uZXcgVmIoZi54KmQsZi55KmUsZi5sYXN0UG9pbnRPZkNvbnRvdXIsZi5vbkN1cnZlKTtmb3IodmFyIGwsbSxuPTA7bjxoO24rKylmPWlbbl0sbHx8KGw9ZixqLnB1c2gobikpLGYubGFzdFBvaW50T2ZDb250b3VyPyhmLm5leHRQb2ludE9uQ29udG91cj1sLGwucHJldlBvaW50T25Db250b3VyPWYsbD12b2lkIDApOihtPWlbbisxXSxmLm5leHRQb2ludE9uQ29udG91cj1tLG0ucHJldlBvaW50T25Db250b3VyPWYpO2lmKCFjLmluaGliaXRHcmlkRml0KXtpZihhLkRFQlVHKXtjb25zb2xlLmxvZyhcIlBST0NFU1NJTkcgR0xZUEhcIixjLnN0YWNrKTtmb3IodmFyIG89MDtvPGg7bysrKWNvbnNvbGUubG9nKG8saVtvXS54LGlbb10ueSl9aWYoaS5wdXNoKG5ldyBWYigwLDApLG5ldyBWYihNYXRoLnJvdW5kKGIuYWR2YW5jZVdpZHRoKmQpLDApKSxzZihjKSxpLmxlbmd0aC09MixhLkRFQlVHKXtjb25zb2xlLmxvZyhcIkZJTklTSEVEIEdMWVBIXCIsYy5zdGFjayk7Zm9yKHZhciBwPTA7cDxoO3ArKyljb25zb2xlLmxvZyhwLGlbcF0ueCxpW3BdLnkpfX19LHNmPWZ1bmN0aW9uKGIpe3ZhciBjPWIucHJvZztpZihjKXt2YXIgZCxlPWMubGVuZ3RoO2ZvcihiLmlwPTA7Yi5pcDxlO2IuaXArKyl7aWYoYS5ERUJVRyYmYi5zdGVwKyssIShkPXJmW2NbYi5pcF1dKSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGluc3RydWN0aW9uOiAweFwiK051bWJlcihjW2IuaXBdKS50b1N0cmluZygxNikpO2QoYil9fX0scmY9W1piLmJpbmQodm9pZCAwLHlmKSxaYi5iaW5kKHZvaWQgMCx4ZiksJGIuYmluZCh2b2lkIDAseWYpLCRiLmJpbmQodm9pZCAwLHhmKSxfYi5iaW5kKHZvaWQgMCx5ZiksX2IuYmluZCh2b2lkIDAseGYpLGFjLmJpbmQodm9pZCAwLDApLGFjLmJpbmQodm9pZCAwLDEpLGJjLmJpbmQodm9pZCAwLDApLGJjLmJpbmQodm9pZCAwLDEpLGNjLGRjLGVjLGZjLGdjLGhjLGljLGpjLGtjLGxjLG1jLG5jLG9jLHBjLHFjLHJjLHNjLHRjLHVjLHZjLHZvaWQgMCx2b2lkIDAsd2MseGMseWMsemMsQWMsRGMsRWMsdm9pZCAwLHZvaWQgMCx2b2lkIDAsQmMsQ2MsRmMsdm9pZCAwLEdjLmJpbmQodm9pZCAwLDApLEdjLmJpbmQodm9pZCAwLDEpLEhjLmJpbmQodm9pZCAwLHlmKSxIYy5iaW5kKHZvaWQgMCx4ZiksSWMuYmluZCh2b2lkIDAsMCksSWMuYmluZCh2b2lkIDAsMSksSmMuYmluZCh2b2lkIDAsMCksSmMuYmluZCh2b2lkIDAsMSksS2MuYmluZCh2b2lkIDAsMCksS2MuYmluZCh2b2lkIDAsMSksTGMsTWMsTmMuYmluZCh2b2lkIDAsMCksTmMuYmluZCh2b2lkIDAsMSksT2MsUGMsUWMuYmluZCh2b2lkIDAsMCksUWMuYmluZCh2b2lkIDAsMSksUmMsU2MsVGMsVWMsVmMsV2MsWGMuYmluZCh2b2lkIDAsMCksWGMuYmluZCh2b2lkIDAsMSksdm9pZCAwLFljLmJpbmQodm9pZCAwLDApLFljLmJpbmQodm9pZCAwLDEpLFpjLHZvaWQgMCwkYyx2b2lkIDAsdm9pZCAwLF9jLGFkLGJkLGNkLGRkLGVkLGZkLGdkLGhkLGlkLGpkLGtkLGxkLG1kLmJpbmQodm9pZCAwLDEpLG5kLG9kLHBkLHFkLHJkLHNkLHRkLHVkLHZkLHdkLHhkLmJpbmQodm9pZCAwLDApLHhkLmJpbmQodm9pZCAwLDEpLHhkLmJpbmQodm9pZCAwLDIpLHhkLmJpbmQodm9pZCAwLDMpLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx5ZCxtZC5iaW5kKHZvaWQgMCwyKSxtZC5iaW5kKHZvaWQgMCwzKSx6ZC5iaW5kKHZvaWQgMCwxKSx6ZC5iaW5kKHZvaWQgMCwyKSx6ZC5iaW5kKHZvaWQgMCwzKSxBZCxCZCx2b2lkIDAsdm9pZCAwLENkLHZvaWQgMCxEZCxFZCx4Yyx4Yyx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLEZkLEdkLmJpbmQodm9pZCAwLDApLEdkLmJpbmQodm9pZCAwLDEpLEhkLHZvaWQgMCxJZCxKZCxLZCxMZCxNZCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxOZC5iaW5kKHZvaWQgMCwxKSxOZC5iaW5kKHZvaWQgMCwyKSxOZC5iaW5kKHZvaWQgMCwzKSxOZC5iaW5kKHZvaWQgMCw0KSxOZC5iaW5kKHZvaWQgMCw1KSxOZC5iaW5kKHZvaWQgMCw2KSxOZC5iaW5kKHZvaWQgMCw3KSxOZC5iaW5kKHZvaWQgMCw4KSxPZC5iaW5kKHZvaWQgMCwxKSxPZC5iaW5kKHZvaWQgMCwyKSxPZC5iaW5kKHZvaWQgMCwzKSxPZC5iaW5kKHZvaWQgMCw0KSxPZC5iaW5kKHZvaWQgMCw1KSxPZC5iaW5kKHZvaWQgMCw2KSxPZC5iaW5kKHZvaWQgMCw3KSxPZC5iaW5kKHZvaWQgMCw4KSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwwLDApLFBkLmJpbmQodm9pZCAwLDAsMCwwLDAsMSksUGQuYmluZCh2b2lkIDAsMCwwLDAsMCwyKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwwLDMpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDEsMCksUGQuYmluZCh2b2lkIDAsMCwwLDAsMSwxKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwxLDIpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDEsMyksUGQuYmluZCh2b2lkIDAsMCwwLDEsMCwwKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwwLDEpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDAsMiksUGQuYmluZCh2b2lkIDAsMCwwLDEsMCwzKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwxLDApLFBkLmJpbmQodm9pZCAwLDAsMCwxLDEsMSksUGQuYmluZCh2b2lkIDAsMCwwLDEsMSwyKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwxLDMpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDAsMCksUGQuYmluZCh2b2lkIDAsMCwxLDAsMCwxKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwwLDIpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDAsMyksUGQuYmluZCh2b2lkIDAsMCwxLDAsMSwwKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwxLDEpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDEsMiksUGQuYmluZCh2b2lkIDAsMCwxLDAsMSwzKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwwLDApLFBkLmJpbmQodm9pZCAwLDAsMSwxLDAsMSksUGQuYmluZCh2b2lkIDAsMCwxLDEsMCwyKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwwLDMpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDEsMCksUGQuYmluZCh2b2lkIDAsMCwxLDEsMSwxKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwxLDIpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDEsMyksUGQuYmluZCh2b2lkIDAsMSwwLDAsMCwwKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwwLDEpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDAsMiksUGQuYmluZCh2b2lkIDAsMSwwLDAsMCwzKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwxLDApLFBkLmJpbmQodm9pZCAwLDEsMCwwLDEsMSksUGQuYmluZCh2b2lkIDAsMSwwLDAsMSwyKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwxLDMpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDAsMCksUGQuYmluZCh2b2lkIDAsMSwwLDEsMCwxKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwwLDIpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDAsMyksUGQuYmluZCh2b2lkIDAsMSwwLDEsMSwwKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwxLDEpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDEsMiksUGQuYmluZCh2b2lkIDAsMSwwLDEsMSwzKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwwLDApLFBkLmJpbmQodm9pZCAwLDEsMSwwLDAsMSksUGQuYmluZCh2b2lkIDAsMSwxLDAsMCwyKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwwLDMpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDEsMCksUGQuYmluZCh2b2lkIDAsMSwxLDAsMSwxKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwxLDIpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDEsMyksUGQuYmluZCh2b2lkIDAsMSwxLDEsMCwwKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwwLDEpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDAsMiksUGQuYmluZCh2b2lkIDAsMSwxLDEsMCwzKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwxLDApLFBkLmJpbmQodm9pZCAwLDEsMSwxLDEsMSksUGQuYmluZCh2b2lkIDAsMSwxLDEsMSwyKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwxLDMpXTt2YXIgQmY9QXJyYXkuZnJvbXx8ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF0Y2goL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0/fFteXFx1RDgwMC1cXHVERkZGXXwuL2cpfHxbXX07UWQucHJvdG90eXBlLmhhc0NoYXI9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT10aGlzLmVuY29kaW5nLmNoYXJUb0dseXBoSW5kZXgoYSl9LFFkLnByb3RvdHlwZS5jaGFyVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVuY29kaW5nLmNoYXJUb0dseXBoSW5kZXgoYSl9LFFkLnByb3RvdHlwZS5jaGFyVG9HbHlwaD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmNoYXJUb0dseXBoSW5kZXgoYSksYz10aGlzLmdseXBocy5nZXQoYik7cmV0dXJuIGN8fChjPXRoaXMuZ2x5cGhzLmdldCgwKSksY30sUWQucHJvdG90eXBlLnN0cmluZ1RvR2x5cGhzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztiPWJ8fHRoaXMuZGVmYXVsdFJlbmRlck9wdGlvbnM7Zm9yKHZhciBkPUJmKGEpLGU9W10sZj0wO2Y8ZC5sZW5ndGg7Zis9MSl7dmFyIGc9ZFtmXTtlLnB1c2goYy5jaGFyVG9HbHlwaEluZGV4KGcpKX12YXIgaD1lLmxlbmd0aDtpZihiLmZlYXR1cmVzKXt2YXIgaT1iLnNjcmlwdHx8dGhpcy5zdWJzdGl0dXRpb24uZ2V0RGVmYXVsdFNjcmlwdE5hbWUoKSxqPVtdO2IuZmVhdHVyZXMubGlnYSYmKGo9ai5jb25jYXQodGhpcy5zdWJzdGl0dXRpb24uZ2V0RmVhdHVyZShcImxpZ2FcIixpLGIubGFuZ3VhZ2UpKSksYi5mZWF0dXJlcy5ybGlnJiYoaj1qLmNvbmNhdCh0aGlzLnN1YnN0aXR1dGlvbi5nZXRGZWF0dXJlKFwicmxpZ1wiLGksYi5sYW5ndWFnZSkpKTtmb3IodmFyIGs9MDtrPGg7ays9MSlmb3IodmFyIGw9MDtsPGoubGVuZ3RoO2wrKyl7Zm9yKHZhciBtPWpbbF0sbj1tLnN1YixvPW4ubGVuZ3RoLHA9MDtwPG8mJm5bcF09PT1lW2srcF07KXArKztwPT09byYmKGUuc3BsaWNlKGssbyxtLmJ5KSxoPWgtbysxKX19Zm9yKHZhciBxPW5ldyBBcnJheShoKSxyPXRoaXMuZ2x5cGhzLmdldCgwKSxzPTA7czxoO3MrPTEpcVtzXT1jLmdseXBocy5nZXQoZVtzXSl8fHI7cmV0dXJuIHF9LFFkLnByb3RvdHlwZS5uYW1lVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdseXBoTmFtZXMubmFtZVRvR2x5cGhJbmRleChhKX0sUWQucHJvdG90eXBlLm5hbWVUb0dseXBoPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubmFtZVRvR2x5cGhJbmRleChhKSxjPXRoaXMuZ2x5cGhzLmdldChiKTtyZXR1cm4gY3x8KGM9dGhpcy5nbHlwaHMuZ2V0KDApKSxjfSxRZC5wcm90b3R5cGUuZ2x5cGhJbmRleFRvTmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nbHlwaE5hbWVzLmdseXBoSW5kZXhUb05hbWU/dGhpcy5nbHlwaE5hbWVzLmdseXBoSW5kZXhUb05hbWUoYSk6XCJcIn0sUWQucHJvdG90eXBlLmdldEtlcm5pbmdWYWx1ZT1mdW5jdGlvbihhLGIpe2E9YS5pbmRleHx8YSxiPWIuaW5kZXh8fGI7dmFyIGM9dGhpcy5wb3NpdGlvbi5kZWZhdWx0S2VybmluZ1RhYmxlcztyZXR1cm4gYz90aGlzLnBvc2l0aW9uLmdldEtlcm5pbmdWYWx1ZShjLGEsYik6dGhpcy5rZXJuaW5nUGFpcnNbYStcIixcIitiXXx8MH0sUWQucHJvdG90eXBlLmRlZmF1bHRSZW5kZXJPcHRpb25zPXtrZXJuaW5nOiEwLGZlYXR1cmVzOntsaWdhOiEwLHJsaWc6ITB9fSxRZC5wcm90b3R5cGUuZm9yRWFjaEdseXBoPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz10aGlzO2I9dm9pZCAwIT09Yj9iOjAsYz12b2lkIDAhPT1jP2M6MCxkPXZvaWQgMCE9PWQ/ZDo3MixlPWV8fHRoaXMuZGVmYXVsdFJlbmRlck9wdGlvbnM7dmFyIGgsaT0xL3RoaXMudW5pdHNQZXJFbSpkLGo9dGhpcy5zdHJpbmdUb0dseXBocyhhLGUpO2lmKGUua2VybmluZyl7dmFyIGs9ZS5zY3JpcHR8fHRoaXMucG9zaXRpb24uZ2V0RGVmYXVsdFNjcmlwdE5hbWUoKTtoPXRoaXMucG9zaXRpb24uZ2V0S2VybmluZ1RhYmxlcyhrLGUubGFuZ3VhZ2UpfWZvcih2YXIgbD0wO2w8ai5sZW5ndGg7bCs9MSl7dmFyIG09altsXTtpZihmLmNhbGwoZyxtLGIsYyxkLGUpLG0uYWR2YW5jZVdpZHRoJiYoYis9bS5hZHZhbmNlV2lkdGgqaSksZS5rZXJuaW5nJiZsPGoubGVuZ3RoLTEpe2IrPShoP2cucG9zaXRpb24uZ2V0S2VybmluZ1ZhbHVlKGgsbS5pbmRleCxqW2wrMV0uaW5kZXgpOmcuZ2V0S2VybmluZ1ZhbHVlKG0saltsKzFdKSkqaX1lLmxldHRlclNwYWNpbmc/Yis9ZS5sZXR0ZXJTcGFjaW5nKmQ6ZS50cmFja2luZyYmKGIrPWUudHJhY2tpbmcvMWUzKmQpfXJldHVybiBifSxRZC5wcm90b3R5cGUuZ2V0UGF0aD1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPW5ldyByO3JldHVybiB0aGlzLmZvckVhY2hHbHlwaChhLGIsYyxkLGUsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGc9YS5nZXRQYXRoKGIsYyxkLGUsdGhpcyk7Zi5leHRlbmQoZyl9KSxmfSxRZC5wcm90b3R5cGUuZ2V0UGF0aHM9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoR2x5cGgoYSxiLGMsZCxlLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBnPWEuZ2V0UGF0aChiLGMsZCxlLHRoaXMpO2YucHVzaChnKX0pLGZ9LFFkLnByb3RvdHlwZS5nZXRBZHZhbmNlV2lkdGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLmZvckVhY2hHbHlwaChhLDAsMCxiLGMsZnVuY3Rpb24oKXt9KX0sUWQucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZ2V0UGF0aChiLGMsZCxlLGYpLmRyYXcoYSl9LFFkLnByb3RvdHlwZS5kcmF3UG9pbnRzPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmZvckVhY2hHbHlwaChiLGMsZCxlLGYsZnVuY3Rpb24oYixjLGQsZSl7Yi5kcmF3UG9pbnRzKGEsYyxkLGUpfSl9LFFkLnByb3RvdHlwZS5kcmF3TWV0cmljcz1mdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5mb3JFYWNoR2x5cGgoYixjLGQsZSxmLGZ1bmN0aW9uKGIsYyxkLGUpe2IuZHJhd01ldHJpY3MoYSxjLGQsZSl9KX0sUWQucHJvdG90eXBlLmdldEVuZ2xpc2hOYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubmFtZXNbYV07aWYoYilyZXR1cm4gYi5lbn0sUWQucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe31mdW5jdGlvbiBiKGIpe3ZhciBkPWMuZ2V0RW5nbGlzaE5hbWUoYik7YShkJiZkLnRyaW0oKS5sZW5ndGg+MCxcIk5vIEVuZ2xpc2ggXCIrYitcIiBzcGVjaWZpZWQuXCIpfXZhciBjPXRoaXM7YihcImZvbnRGYW1pbHlcIiksYihcIndlaWdodE5hbWVcIiksYihcIm1hbnVmYWN0dXJlclwiKSxiKFwiY29weXJpZ2h0XCIpLGIoXCJ2ZXJzaW9uXCIpLGEodGhpcy51bml0c1BlckVtPjAsXCJObyB1bml0c1BlckVtIHNwZWNpZmllZC5cIil9LFFkLnByb3RvdHlwZS50b1RhYmxlcz1mdW5jdGlvbigpe3JldHVybiBxZi5mb250VG9UYWJsZSh0aGlzKX0sUWQucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybihcIkZvbnQudG9CdWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIEZvbnQudG9BcnJheUJ1ZmZlciBpbnN0ZWFkLlwiKSx0aGlzLnRvQXJyYXlCdWZmZXIoKX0sUWQucHJvdG90eXBlLnRvQXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy50b1RhYmxlcygpLGI9YS5lbmNvZGUoKSxjPW5ldyBBcnJheUJ1ZmZlcihiLmxlbmd0aCksZD1uZXcgVWludDhBcnJheShjKSxlPTA7ZTxiLmxlbmd0aDtlKyspZFtlXT1iW2VdO3JldHVybiBjfSxRZC5wcm90b3R5cGUuZG93bmxvYWQ9ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5nZXRFbmdsaXNoTmFtZShcImZvbnRGYW1pbHlcIiksZD10aGlzLmdldEVuZ2xpc2hOYW1lKFwiZm9udFN1YmZhbWlseVwiKTthPWF8fGMucmVwbGFjZSgvXFxzL2csXCJcIikrXCItXCIrZCtcIi5vdGZcIjt2YXIgZT10aGlzLnRvQXJyYXlCdWZmZXIoKTtpZihCYigpKXdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbT13aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW18fHdpbmRvdy53ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbSx3aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW0od2luZG93LlRFTVBPUkFSWSxlLmJ5dGVMZW5ndGgsZnVuY3Rpb24oYil7Yi5yb290LmdldEZpbGUoYSx7Y3JlYXRlOiEwfSxmdW5jdGlvbihhKXthLmNyZWF0ZVdyaXRlcihmdW5jdGlvbihiKXt2YXIgYz1uZXcgRGF0YVZpZXcoZSksZD1uZXcgQmxvYihbY10se3R5cGU6XCJmb250L29wZW50eXBlXCJ9KTtiLndyaXRlKGQpLGIuYWRkRXZlbnRMaXN0ZW5lcihcIndyaXRlZW5kXCIsZnVuY3Rpb24oKXtsb2NhdGlvbi5ocmVmPWEudG9VUkwoKX0sITEpfSl9KX0sZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKGEubmFtZStcIjogXCIrYS5tZXNzYWdlKX0pO2Vsc2V7dmFyIGY9YihcImZzXCIpLGc9RGIoZSk7Zi53cml0ZUZpbGVTeW5jKGEsZyl9fSxRZC5wcm90b3R5cGUuZnNTZWxlY3Rpb25WYWx1ZXM9e0lUQUxJQzoxLFVOREVSU0NPUkU6MixORUdBVElWRTo0LE9VVExJTkVEOjgsU1RSSUtFT1VUOjE2LEJPTEQ6MzIsUkVHVUxBUjo2NCxVU0VSX1RZUE9fTUVUUklDUzoxMjgsV1dTOjI1NixPQkxJUVVFOjUxMn0sUWQucHJvdG90eXBlLnVzV2lkdGhDbGFzc2VzPXtVTFRSQV9DT05ERU5TRUQ6MSxFWFRSQV9DT05ERU5TRUQ6MixDT05ERU5TRUQ6MyxTRU1JX0NPTkRFTlNFRDo0LE1FRElVTTo1LFNFTUlfRVhQQU5ERUQ6NixFWFBBTkRFRDo3LEVYVFJBX0VYUEFOREVEOjgsVUxUUkFfRVhQQU5ERUQ6OX0sUWQucHJvdG90eXBlLnVzV2VpZ2h0Q2xhc3Nlcz17VEhJTjoxMDAsRVhUUkFfTElHSFQ6MjAwLExJR0hUOjMwMCxOT1JNQUw6NDAwLE1FRElVTTo1MDAsU0VNSV9CT0xEOjYwMCxCT0xEOjcwMCxFWFRSQV9CT0xEOjgwMCxCTEFDSzo5MDB9O3ZhciBDZj17bWFrZTpXZCxwYXJzZTpYZH0sRGY9bmV3IEFycmF5KDEwKTtEZlsxXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIDE9PT1iP3twb3NGb3JtYXQ6MSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSx2YWx1ZTp0aGlzLnBhcnNlVmFsdWVSZWNvcmQoKX06Mj09PWI/e1xucG9zRm9ybWF0OjIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksdmFsdWVzOnRoaXMucGFyc2VWYWx1ZVJlY29yZExpc3QoKX06dm9pZCB4ZS5hc3NlcnQoITEsXCIweFwiK2EudG9TdHJpbmcoMTYpK1wiOiBHUE9TIGxvb2t1cCB0eXBlIDEgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKX0sRGZbMl09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO3hlLmFzc2VydCgxPT09Ynx8Mj09PWIsXCIweFwiK2EudG9TdHJpbmcoMTYpK1wiOiBHUE9TIGxvb2t1cCB0eXBlIDIgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKTt2YXIgYz10aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxkPXRoaXMucGFyc2VVU2hvcnQoKSxlPXRoaXMucGFyc2VVU2hvcnQoKTtpZigxPT09YilyZXR1cm57cG9zRm9ybWF0OmIsY292ZXJhZ2U6Yyx2YWx1ZUZvcm1hdDE6ZCx2YWx1ZUZvcm1hdDI6ZSxwYWlyU2V0czp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5saXN0KGZ1bmN0aW9uKCl7cmV0dXJue3NlY29uZEdseXBoOnRoaXMucGFyc2VVU2hvcnQoKSx2YWx1ZTE6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKGQpLHZhbHVlMjp0aGlzLnBhcnNlVmFsdWVSZWNvcmQoZSl9fSkpKX07aWYoMj09PWIpe3ZhciBmPXRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGc9dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksaD10aGlzLnBhcnNlVVNob3J0KCksaT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJue3Bvc0Zvcm1hdDpiLGNvdmVyYWdlOmMsdmFsdWVGb3JtYXQxOmQsdmFsdWVGb3JtYXQyOmUsY2xhc3NEZWYxOmYsY2xhc3NEZWYyOmcsY2xhc3MxQ291bnQ6aCxjbGFzczJDb3VudDppLGNsYXNzUmVjb3Jkczp0aGlzLnBhcnNlTGlzdChoLFEubGlzdChpLGZ1bmN0aW9uKCl7cmV0dXJue3ZhbHVlMTp0aGlzLnBhcnNlVmFsdWVSZWNvcmQoZCksdmFsdWUyOnRoaXMucGFyc2VWYWx1ZVJlY29yZChlKX19KSl9fX0sRGZbM109ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCAzIG5vdCBzdXBwb3J0ZWRcIn19LERmWzRdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgNCBub3Qgc3VwcG9ydGVkXCJ9fSxEZls1XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDUgbm90IHN1cHBvcnRlZFwifX0sRGZbNl09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA2IG5vdCBzdXBwb3J0ZWRcIn19LERmWzddPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgNyBub3Qgc3VwcG9ydGVkXCJ9fSxEZls4XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDggbm90IHN1cHBvcnRlZFwifX0sRGZbOV09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA5IG5vdCBzdXBwb3J0ZWRcIn19O3ZhciBFZj1uZXcgQXJyYXkoMTApLEZmPXtwYXJzZTpZZCxtYWtlOlpkfSxHZj17cGFyc2U6YWV9LEhmPXtwYXJzZTpiZX07YS5Gb250PVFkLGEuR2x5cGg9Y2EsYS5QYXRoPXIsYS5Cb3VuZGluZ0JveD1xLGEuX3BhcnNlPUxlLGEucGFyc2U9aGUsYS5sb2FkPWllLGEubG9hZFN5bmM9amUsT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KX0pLmNhbGwodGhpcyxiKFwiYnVmZmVyXCIpLkJ1ZmZlcil9LHtidWZmZXI6MyxmczoyfV0sMTE6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKCl7dGhyb3cgbmV3IEVycm9yKFwic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBlKCl7dGhyb3cgbmV3IEVycm9yKFwiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGYoYSl7aWYobD09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoYSwwKTtpZigobD09PWR8fCFsKSYmc2V0VGltZW91dClyZXR1cm4gbD1zZXRUaW1lb3V0LHNldFRpbWVvdXQoYSwwKTt0cnl7cmV0dXJuIGwoYSwwKX1jYXRjaChiKXt0cnl7cmV0dXJuIGwuY2FsbChudWxsLGEsMCl9Y2F0Y2goYil7cmV0dXJuIGwuY2FsbCh0aGlzLGEsMCl9fX1mdW5jdGlvbiBnKGEpe2lmKG09PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChhKTtpZigobT09PWV8fCFtKSYmY2xlYXJUaW1lb3V0KXJldHVybiBtPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoYSk7dHJ5e3JldHVybiBtKGEpfWNhdGNoKGIpe3RyeXtyZXR1cm4gbS5jYWxsKG51bGwsYSl9Y2F0Y2goYil7cmV0dXJuIG0uY2FsbCh0aGlzLGEpfX19ZnVuY3Rpb24gaCgpe3EmJm8mJihxPSExLG8ubGVuZ3RoP3A9by5jb25jYXQocCk6cj0tMSxwLmxlbmd0aCYmaSgpKX1mdW5jdGlvbiBpKCl7aWYoIXEpe3ZhciBhPWYoaCk7cT0hMDtmb3IodmFyIGI9cC5sZW5ndGg7Yjspe2ZvcihvPXAscD1bXTsrK3I8YjspbyYmb1tyXS5ydW4oKTtyPS0xLGI9cC5sZW5ndGh9bz1udWxsLHE9ITEsZyhhKX19ZnVuY3Rpb24gaihhLGIpe3RoaXMuZnVuPWEsdGhpcy5hcnJheT1ifWZ1bmN0aW9uIGsoKXt9dmFyIGwsbSxuPWIuZXhwb3J0cz17fTshZnVuY3Rpb24oKXt0cnl7bD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6ZH1jYXRjaChhKXtsPWR9dHJ5e209XCJmdW5jdGlvblwiPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDplfWNhdGNoKGEpe209ZX19KCk7dmFyIG8scD1bXSxxPSExLHI9LTE7bi5uZXh0VGljaz1mdW5jdGlvbihhKXt2YXIgYj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliW2MtMV09YXJndW1lbnRzW2NdO3AucHVzaChuZXcgaihhLGIpKSwxIT09cC5sZW5ndGh8fHF8fGYoaSl9LGoucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LG4udGl0bGU9XCJicm93c2VyXCIsbi5icm93c2VyPSEwLG4uZW52PXt9LG4uYXJndj1bXSxuLnZlcnNpb249XCJcIixuLnZlcnNpb25zPXt9LG4ub249ayxuLmFkZExpc3RlbmVyPWssbi5vbmNlPWssbi5vZmY9ayxuLnJlbW92ZUxpc3RlbmVyPWssbi5yZW1vdmVBbGxMaXN0ZW5lcnM9ayxuLmVtaXQ9ayxuLnByZXBlbmRMaXN0ZW5lcj1rLG4ucHJlcGVuZE9uY2VMaXN0ZW5lcj1rLG4ubGlzdGVuZXJzPWZ1bmN0aW9uKGEpe3JldHVybltdfSxuLmJpbmRpbmc9ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIil9LG4uY3dkPWZ1bmN0aW9uKCl7cmV0dXJuXCIvXCJ9LG4uY2hkaXI9ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkXCIpfSxuLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7fV0sMTI6W2Z1bmN0aW9uKGEsYixjKXshZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihhKXtpZihcInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9U3RyaW5nKGEpKSwvW15hLXowLTlcXC0jJCUmJyorLlxcXl9gfH5dL2kudGVzdChhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWVcIik7cmV0dXJuIGEudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBjKGEpe3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBhJiYoYT1TdHJpbmcoYSkpLGF9ZnVuY3Rpb24gZChhKXt2YXIgYj17bmV4dDpmdW5jdGlvbigpe3ZhciBiPWEuc2hpZnQoKTtyZXR1cm57ZG9uZTp2b2lkIDA9PT1iLHZhbHVlOmJ9fX07cmV0dXJuIHIuaXRlcmFibGUmJihiW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gYn0pLGJ9ZnVuY3Rpb24gZShhKXt0aGlzLm1hcD17fSxhIGluc3RhbmNlb2YgZT9hLmZvckVhY2goZnVuY3Rpb24oYSxiKXt0aGlzLmFwcGVuZChiLGEpfSx0aGlzKTpBcnJheS5pc0FycmF5KGEpP2EuZm9yRWFjaChmdW5jdGlvbihhKXt0aGlzLmFwcGVuZChhWzBdLGFbMV0pfSx0aGlzKTphJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3RoaXMuYXBwZW5kKGIsYVtiXSl9LHRoaXMpfWZ1bmN0aW9uIGYoYSl7aWYoYS5ib2R5VXNlZClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcihcIkFscmVhZHkgcmVhZFwiKSk7YS5ib2R5VXNlZD0hMH1mdW5jdGlvbiBnKGEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihiLGMpe2Eub25sb2FkPWZ1bmN0aW9uKCl7YihhLnJlc3VsdCl9LGEub25lcnJvcj1mdW5jdGlvbigpe2MoYS5lcnJvcil9fSl9ZnVuY3Rpb24gaChhKXt2YXIgYj1uZXcgRmlsZVJlYWRlcixjPWcoYik7cmV0dXJuIGIucmVhZEFzQXJyYXlCdWZmZXIoYSksY31mdW5jdGlvbiBpKGEpe3ZhciBiPW5ldyBGaWxlUmVhZGVyLGM9ZyhiKTtyZXR1cm4gYi5yZWFkQXNUZXh0KGEpLGN9ZnVuY3Rpb24gaihhKXtmb3IodmFyIGI9bmV3IFVpbnQ4QXJyYXkoYSksYz1uZXcgQXJyYXkoYi5sZW5ndGgpLGQ9MDtkPGIubGVuZ3RoO2QrKyljW2RdPVN0cmluZy5mcm9tQ2hhckNvZGUoYltkXSk7cmV0dXJuIGMuam9pbihcIlwiKX1mdW5jdGlvbiBrKGEpe2lmKGEuc2xpY2UpcmV0dXJuIGEuc2xpY2UoMCk7dmFyIGI9bmV3IFVpbnQ4QXJyYXkoYS5ieXRlTGVuZ3RoKTtyZXR1cm4gYi5zZXQobmV3IFVpbnQ4QXJyYXkoYSkpLGIuYnVmZmVyfWZ1bmN0aW9uIGwoKXtyZXR1cm4gdGhpcy5ib2R5VXNlZD0hMSx0aGlzLl9pbml0Qm9keT1mdW5jdGlvbihhKXtpZih0aGlzLl9ib2R5SW5pdD1hLGEpaWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpdGhpcy5fYm9keVRleHQ9YTtlbHNlIGlmKHIuYmxvYiYmQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSl0aGlzLl9ib2R5QmxvYj1hO2Vsc2UgaWYoci5mb3JtRGF0YSYmRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkpdGhpcy5fYm9keUZvcm1EYXRhPWE7ZWxzZSBpZihyLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpKXRoaXMuX2JvZHlUZXh0PWEudG9TdHJpbmcoKTtlbHNlIGlmKHIuYXJyYXlCdWZmZXImJnIuYmxvYiYmdChhKSl0aGlzLl9ib2R5QXJyYXlCdWZmZXI9ayhhLmJ1ZmZlciksdGhpcy5fYm9keUluaXQ9bmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pO2Vsc2V7aWYoIXIuYXJyYXlCdWZmZXJ8fCFBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSYmIXUoYSkpdGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgQm9keUluaXQgdHlwZVwiKTt0aGlzLl9ib2R5QXJyYXlCdWZmZXI9ayhhKX1lbHNlIHRoaXMuX2JvZHlUZXh0PVwiXCI7dGhpcy5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKXx8KFwic3RyaW5nXCI9PXR5cGVvZiBhP3RoaXMuaGVhZGVycy5zZXQoXCJjb250ZW50LXR5cGVcIixcInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOFwiKTp0aGlzLl9ib2R5QmxvYiYmdGhpcy5fYm9keUJsb2IudHlwZT90aGlzLmhlYWRlcnMuc2V0KFwiY29udGVudC10eXBlXCIsdGhpcy5fYm9keUJsb2IudHlwZSk6ci5zZWFyY2hQYXJhbXMmJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSYmdGhpcy5oZWFkZXJzLnNldChcImNvbnRlbnQtdHlwZVwiLFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLThcIikpfSxyLmJsb2ImJih0aGlzLmJsb2I9ZnVuY3Rpb24oKXt2YXIgYT1mKHRoaXMpO2lmKGEpcmV0dXJuIGE7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKFwiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iXCIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpfSx0aGlzLmFycmF5QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj9mKHRoaXMpfHxQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKTp0aGlzLmJsb2IoKS50aGVuKGgpfSksdGhpcy50ZXh0PWZ1bmN0aW9uKCl7dmFyIGE9Zih0aGlzKTtpZihhKXJldHVybiBhO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBpKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShqKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHRcIik7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dCl9LHIuZm9ybURhdGEmJih0aGlzLmZvcm1EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4obyl9KSx0aGlzLmpzb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKX0sdGhpc31mdW5jdGlvbiBtKGEpe3ZhciBiPWEudG9VcHBlckNhc2UoKTtyZXR1cm4gdi5pbmRleE9mKGIpPi0xP2I6YX1mdW5jdGlvbiBuKGEsYil7Yj1ifHx7fTt2YXIgYz1iLmJvZHk7aWYoYSBpbnN0YW5jZW9mIG4pe2lmKGEuYm9keVVzZWQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFscmVhZHkgcmVhZFwiKTt0aGlzLnVybD1hLnVybCx0aGlzLmNyZWRlbnRpYWxzPWEuY3JlZGVudGlhbHMsYi5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBlKGEuaGVhZGVycykpLHRoaXMubWV0aG9kPWEubWV0aG9kLHRoaXMubW9kZT1hLm1vZGUsY3x8bnVsbD09YS5fYm9keUluaXR8fChjPWEuX2JvZHlJbml0LGEuYm9keVVzZWQ9ITApfWVsc2UgdGhpcy51cmw9U3RyaW5nKGEpO2lmKHRoaXMuY3JlZGVudGlhbHM9Yi5jcmVkZW50aWFsc3x8dGhpcy5jcmVkZW50aWFsc3x8XCJvbWl0XCIsIWIuaGVhZGVycyYmdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBlKGIuaGVhZGVycykpLHRoaXMubWV0aG9kPW0oYi5tZXRob2R8fHRoaXMubWV0aG9kfHxcIkdFVFwiKSx0aGlzLm1vZGU9Yi5tb2RlfHx0aGlzLm1vZGV8fG51bGwsdGhpcy5yZWZlcnJlcj1udWxsLChcIkdFVFwiPT09dGhpcy5tZXRob2R8fFwiSEVBRFwiPT09dGhpcy5tZXRob2QpJiZjKXRocm93IG5ldyBUeXBlRXJyb3IoXCJCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0c1wiKTt0aGlzLl9pbml0Qm9keShjKX1mdW5jdGlvbiBvKGEpe3ZhciBiPW5ldyBGb3JtRGF0YTtyZXR1cm4gYS50cmltKCkuc3BsaXQoXCImXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGM9YS5zcGxpdChcIj1cIiksZD1jLnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csXCIgXCIpLGU9Yy5qb2luKFwiPVwiKS5yZXBsYWNlKC9cXCsvZyxcIiBcIik7Yi5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KGQpLGRlY29kZVVSSUNvbXBvbmVudChlKSl9fSksYn1mdW5jdGlvbiBwKGEpe3ZhciBiPW5ldyBlO3JldHVybiBhLnNwbGl0KC9cXHI/XFxuLykuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYz1hLnNwbGl0KFwiOlwiKSxkPWMuc2hpZnQoKS50cmltKCk7aWYoZCl7dmFyIGU9Yy5qb2luKFwiOlwiKS50cmltKCk7Yi5hcHBlbmQoZCxlKX19KSxifWZ1bmN0aW9uIHEoYSxiKXtifHwoYj17fSksdGhpcy50eXBlPVwiZGVmYXVsdFwiLHRoaXMuc3RhdHVzPVwic3RhdHVzXCJpbiBiP2Iuc3RhdHVzOjIwMCx0aGlzLm9rPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMCx0aGlzLnN0YXR1c1RleHQ9XCJzdGF0dXNUZXh0XCJpbiBiP2Iuc3RhdHVzVGV4dDpcIk9LXCIsdGhpcy5oZWFkZXJzPW5ldyBlKGIuaGVhZGVycyksdGhpcy51cmw9Yi51cmx8fFwiXCIsdGhpcy5faW5pdEJvZHkoYSl9aWYoIWEuZmV0Y2gpe3ZhciByPXtzZWFyY2hQYXJhbXM6XCJVUkxTZWFyY2hQYXJhbXNcImluIGEsaXRlcmFibGU6XCJTeW1ib2xcImluIGEmJlwiaXRlcmF0b3JcImluIFN5bWJvbCxibG9iOlwiRmlsZVJlYWRlclwiaW4gYSYmXCJCbG9iXCJpbiBhJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEJsb2IsITB9Y2F0Y2goYSl7cmV0dXJuITF9fSgpLGZvcm1EYXRhOlwiRm9ybURhdGFcImluIGEsYXJyYXlCdWZmZXI6XCJBcnJheUJ1ZmZlclwiaW4gYX07aWYoci5hcnJheUJ1ZmZlcil2YXIgcz1bXCJbb2JqZWN0IEludDhBcnJheV1cIixcIltvYmplY3QgVWludDhBcnJheV1cIixcIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldXCIsXCJbb2JqZWN0IEludDE2QXJyYXldXCIsXCJbb2JqZWN0IFVpbnQxNkFycmF5XVwiLFwiW29iamVjdCBJbnQzMkFycmF5XVwiLFwiW29iamVjdCBVaW50MzJBcnJheV1cIixcIltvYmplY3QgRmxvYXQzMkFycmF5XVwiLFwiW29iamVjdCBGbG9hdDY0QXJyYXldXCJdLHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJkRhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpfSx1PUFycmF5QnVmZmVyLmlzVmlld3x8ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJnMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkpPi0xfTtlLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oYSxkKXthPWIoYSksZD1jKGQpO3ZhciBlPXRoaXMubWFwW2FdO3RoaXMubWFwW2FdPWU/ZStcIixcIitkOmR9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihhKXtkZWxldGUgdGhpcy5tYXBbYihhKV19LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gYT1iKGEpLHRoaXMuaGFzKGEpP3RoaXMubWFwW2FdOm51bGx9LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkoYihhKSl9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGQpe3RoaXMubWFwW2IoYSldPWMoZCl9LGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMgaW4gdGhpcy5tYXApdGhpcy5tYXAuaGFzT3duUHJvcGVydHkoYykmJmEuY2FsbChiLHRoaXMubWFwW2NdLGMsdGhpcyl9LGUucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGIsYyl7YS5wdXNoKGMpfSksZChhKX0sZS5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihiKXthLnB1c2goYil9KSxkKGEpfSxlLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihiLGMpe2EucHVzaChbYyxiXSl9KSxkKGEpfSxyLml0ZXJhYmxlJiYoZS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1lLnByb3RvdHlwZS5lbnRyaWVzKTt2YXIgdj1bXCJERUxFVEVcIixcIkdFVFwiLFwiSEVBRFwiLFwiT1BUSU9OU1wiLFwiUE9TVFwiLFwiUFVUXCJdO24ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMse2JvZHk6dGhpcy5fYm9keUluaXR9KX0sbC5jYWxsKG4ucHJvdG90eXBlKSxsLmNhbGwocS5wcm90b3R5cGUpLHEucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxKHRoaXMuX2JvZHlJbml0LHtzdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0aGlzLnN0YXR1c1RleHQsaGVhZGVyczpuZXcgZSh0aGlzLmhlYWRlcnMpLHVybDp0aGlzLnVybH0pfSxxLmVycm9yPWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHEobnVsbCx7c3RhdHVzOjAsc3RhdHVzVGV4dDpcIlwifSk7cmV0dXJuIGEudHlwZT1cImVycm9yXCIsYX07dmFyIHc9WzMwMSwzMDIsMzAzLDMwNywzMDhdO3EucmVkaXJlY3Q9ZnVuY3Rpb24oYSxiKXtpZigtMT09PXcuaW5kZXhPZihiKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgc3RhdHVzIGNvZGVcIik7cmV0dXJuIG5ldyBxKG51bGwse3N0YXR1czpiLGhlYWRlcnM6e2xvY2F0aW9uOmF9fSl9LGEuSGVhZGVycz1lLGEuUmVxdWVzdD1uLGEuUmVzcG9uc2U9cSxhLmZldGNoPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsZCl7dmFyIGU9bmV3IG4oYSxiKSxmPW5ldyBYTUxIdHRwUmVxdWVzdDtmLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBhPXtzdGF0dXM6Zi5zdGF0dXMsc3RhdHVzVGV4dDpmLnN0YXR1c1RleHQsaGVhZGVyczpwKGYuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCl8fFwiXCIpfTthLnVybD1cInJlc3BvbnNlVVJMXCJpbiBmP2YucmVzcG9uc2VVUkw6YS5oZWFkZXJzLmdldChcIlgtUmVxdWVzdC1VUkxcIik7dmFyIGI9XCJyZXNwb25zZVwiaW4gZj9mLnJlc3BvbnNlOmYucmVzcG9uc2VUZXh0O2MobmV3IHEoYixhKSl9LGYub25lcnJvcj1mdW5jdGlvbigpe2QobmV3IFR5cGVFcnJvcihcIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWRcIikpfSxmLm9udGltZW91dD1mdW5jdGlvbigpe2QobmV3IFR5cGVFcnJvcihcIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWRcIikpfSxmLm9wZW4oZS5tZXRob2QsZS51cmwsITApLFwiaW5jbHVkZVwiPT09ZS5jcmVkZW50aWFscyYmKGYud2l0aENyZWRlbnRpYWxzPSEwKSxcInJlc3BvbnNlVHlwZVwiaW4gZiYmci5ibG9iJiYoZi5yZXNwb25zZVR5cGU9XCJibG9iXCIpLGUuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGEsYil7Zi5zZXRSZXF1ZXN0SGVhZGVyKGIsYSl9KSxmLnNlbmQodm9pZCAwPT09ZS5fYm9keUluaXQ/bnVsbDplLl9ib2R5SW5pdCl9KX0sYS5mZXRjaC5wb2x5ZmlsbD0hMH19KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcyl9LHt9XSwxMzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL2NvcmUvbWFpblwiKTthKFwiLi9jb3JlL2NvbnN0YW50c1wiKSxhKFwiLi9jb3JlL2Vudmlyb25tZW50XCIpLGEoXCIuL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxhKFwiLi9jb3JlL2hlbHBlcnNcIiksYShcIi4vY29yZS9sZWdhY3lcIiksYShcIi4vY29yZS9wNS5FbGVtZW50XCIpLGEoXCIuL2NvcmUvcDUuR3JhcGhpY3NcIiksYShcIi4vY29yZS9wNS5SZW5kZXJlclwiKSxhKFwiLi9jb3JlL3A1LlJlbmRlcmVyMkRcIiksYShcIi4vY29yZS9yZW5kZXJpbmdcIiksYShcIi4vY29yZS9zaGltXCIpLGEoXCIuL2NvcmUvc3RydWN0dXJlXCIpLGEoXCIuL2NvcmUvdHJhbnNmb3JtXCIpLGEoXCIuL2NvcmUvc2hhcGUvMmRfcHJpbWl0aXZlc1wiKSxhKFwiLi9jb3JlL3NoYXBlL2F0dHJpYnV0ZXNcIiksYShcIi4vY29yZS9zaGFwZS9jdXJ2ZXNcIiksYShcIi4vY29yZS9zaGFwZS92ZXJ0ZXhcIiksYShcIi4vY29sb3IvY29sb3JfY29udmVyc2lvblwiKSxhKFwiLi9jb2xvci9jcmVhdGluZ19yZWFkaW5nXCIpLGEoXCIuL2NvbG9yL3A1LkNvbG9yXCIpLGEoXCIuL2NvbG9yL3NldHRpbmdcIiksYShcIi4vZGF0YS9wNS5UeXBlZERpY3RcIiksYShcIi4vZXZlbnRzL2FjY2VsZXJhdGlvblwiKSxhKFwiLi9ldmVudHMva2V5Ym9hcmRcIiksYShcIi4vZXZlbnRzL21vdXNlXCIpLGEoXCIuL2V2ZW50cy90b3VjaFwiKSxhKFwiLi9pbWFnZS9maWx0ZXJzXCIpLGEoXCIuL2ltYWdlL2ltYWdlXCIpLGEoXCIuL2ltYWdlL2xvYWRpbmdfZGlzcGxheWluZ1wiKSxhKFwiLi9pbWFnZS9wNS5JbWFnZVwiKSxhKFwiLi9pbWFnZS9waXhlbHNcIiksYShcIi4vaW8vZmlsZXNcIiksYShcIi4vaW8vcDUuVGFibGVcIiksYShcIi4vaW8vcDUuVGFibGVSb3dcIiksYShcIi4vaW8vcDUuWE1MXCIpLGEoXCIuL21hdGgvY2FsY3VsYXRpb25cIiksYShcIi4vbWF0aC9tYXRoXCIpLGEoXCIuL21hdGgvbm9pc2VcIiksYShcIi4vbWF0aC9wNS5WZWN0b3JcIiksYShcIi4vbWF0aC9yYW5kb21cIiksYShcIi4vbWF0aC90cmlnb25vbWV0cnlcIiksYShcIi4vdHlwb2dyYXBoeS9hdHRyaWJ1dGVzXCIpLGEoXCIuL3R5cG9ncmFwaHkvbG9hZGluZ19kaXNwbGF5aW5nXCIpLGEoXCIuL3R5cG9ncmFwaHkvcDUuRm9udFwiKSxhKFwiLi91dGlsaXRpZXMvYXJyYXlfZnVuY3Rpb25zXCIpLGEoXCIuL3V0aWxpdGllcy9jb252ZXJzaW9uXCIpLGEoXCIuL3V0aWxpdGllcy9zdHJpbmdfZnVuY3Rpb25zXCIpLGEoXCIuL3V0aWxpdGllcy90aW1lX2RhdGVcIiksYShcIi4vd2ViZ2wvM2RfcHJpbWl0aXZlc1wiKSxhKFwiLi93ZWJnbC9pbnRlcmFjdGlvblwiKSxhKFwiLi93ZWJnbC9saWdodFwiKSxhKFwiLi93ZWJnbC9sb2FkaW5nXCIpLGEoXCIuL3dlYmdsL21hdGVyaWFsXCIpLGEoXCIuL3dlYmdsL3A1LkNhbWVyYVwiKSxhKFwiLi93ZWJnbC9wNS5HZW9tZXRyeVwiKSxhKFwiLi93ZWJnbC9wNS5NYXRyaXhcIiksYShcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5JbW1lZGlhdGVcIiksYShcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTFwiKSxhKFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLlJldGFpbmVkXCIpLGEoXCIuL3dlYmdsL3A1LlNoYWRlclwiKSxhKFwiLi93ZWJnbC9wNS5UZXh0dXJlXCIpLGEoXCIuL3dlYmdsL3RleHRcIiksYShcIi4vY29yZS9pbml0XCIpLGIuZXhwb3J0cz1kfSx7XCIuL2NvbG9yL2NvbG9yX2NvbnZlcnNpb25cIjoxNCxcIi4vY29sb3IvY3JlYXRpbmdfcmVhZGluZ1wiOjE1LFwiLi9jb2xvci9wNS5Db2xvclwiOjE2LFwiLi9jb2xvci9zZXR0aW5nXCI6MTcsXCIuL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuL2NvcmUvZW52aXJvbm1lbnRcIjoxOSxcIi4vY29yZS9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuL2NvcmUvaGVscGVyc1wiOjIxLFwiLi9jb3JlL2luaXRcIjoyMixcIi4vY29yZS9sZWdhY3lcIjoyMyxcIi4vY29yZS9tYWluXCI6MjQsXCIuL2NvcmUvcDUuRWxlbWVudFwiOjI1LFwiLi9jb3JlL3A1LkdyYXBoaWNzXCI6MjYsXCIuL2NvcmUvcDUuUmVuZGVyZXJcIjoyNyxcIi4vY29yZS9wNS5SZW5kZXJlcjJEXCI6MjgsXCIuL2NvcmUvcmVuZGVyaW5nXCI6MjksXCIuL2NvcmUvc2hhcGUvMmRfcHJpbWl0aXZlc1wiOjMwLFwiLi9jb3JlL3NoYXBlL2F0dHJpYnV0ZXNcIjozMSxcIi4vY29yZS9zaGFwZS9jdXJ2ZXNcIjozMixcIi4vY29yZS9zaGFwZS92ZXJ0ZXhcIjozMyxcIi4vY29yZS9zaGltXCI6MzQsXCIuL2NvcmUvc3RydWN0dXJlXCI6MzUsXCIuL2NvcmUvdHJhbnNmb3JtXCI6MzYsXCIuL2RhdGEvcDUuVHlwZWREaWN0XCI6MzcsXCIuL2V2ZW50cy9hY2NlbGVyYXRpb25cIjozOCxcIi4vZXZlbnRzL2tleWJvYXJkXCI6MzksXCIuL2V2ZW50cy9tb3VzZVwiOjQwLFwiLi9ldmVudHMvdG91Y2hcIjo0MSxcIi4vaW1hZ2UvZmlsdGVyc1wiOjQyLFwiLi9pbWFnZS9pbWFnZVwiOjQzLFwiLi9pbWFnZS9sb2FkaW5nX2Rpc3BsYXlpbmdcIjo0NCxcIi4vaW1hZ2UvcDUuSW1hZ2VcIjo0NSxcIi4vaW1hZ2UvcGl4ZWxzXCI6NDYsXCIuL2lvL2ZpbGVzXCI6NDcsXCIuL2lvL3A1LlRhYmxlXCI6NDgsXCIuL2lvL3A1LlRhYmxlUm93XCI6NDksXCIuL2lvL3A1LlhNTFwiOjUwLFwiLi9tYXRoL2NhbGN1bGF0aW9uXCI6NTEsXCIuL21hdGgvbWF0aFwiOjUyLFwiLi9tYXRoL25vaXNlXCI6NTMsXCIuL21hdGgvcDUuVmVjdG9yXCI6NTQsXCIuL21hdGgvcmFuZG9tXCI6NTUsXCIuL21hdGgvdHJpZ29ub21ldHJ5XCI6NTYsXCIuL3R5cG9ncmFwaHkvYXR0cmlidXRlc1wiOjU3LFwiLi90eXBvZ3JhcGh5L2xvYWRpbmdfZGlzcGxheWluZ1wiOjU4LFwiLi90eXBvZ3JhcGh5L3A1LkZvbnRcIjo1OSxcIi4vdXRpbGl0aWVzL2FycmF5X2Z1bmN0aW9uc1wiOjYwLFwiLi91dGlsaXRpZXMvY29udmVyc2lvblwiOjYxLFwiLi91dGlsaXRpZXMvc3RyaW5nX2Z1bmN0aW9uc1wiOjYyLFwiLi91dGlsaXRpZXMvdGltZV9kYXRlXCI6NjMsXCIuL3dlYmdsLzNkX3ByaW1pdGl2ZXNcIjo2NCxcIi4vd2ViZ2wvaW50ZXJhY3Rpb25cIjo2NSxcIi4vd2ViZ2wvbGlnaHRcIjo2NixcIi4vd2ViZ2wvbG9hZGluZ1wiOjY3LFwiLi93ZWJnbC9tYXRlcmlhbFwiOjY4LFwiLi93ZWJnbC9wNS5DYW1lcmFcIjo2OSxcIi4vd2ViZ2wvcDUuR2VvbWV0cnlcIjo3MCxcIi4vd2ViZ2wvcDUuTWF0cml4XCI6NzEsXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0xcIjo3NCxcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5JbW1lZGlhdGVcIjo3MixcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5SZXRhaW5lZFwiOjczLFwiLi93ZWJnbC9wNS5TaGFkZXJcIjo3NSxcIi4vd2ViZ2wvcDUuVGV4dHVyZVwiOjc2LFwiLi93ZWJnbC90ZXh0XCI6Nzd9XSwxNDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5Db2xvckNvbnZlcnNpb249e30sZC5Db2xvckNvbnZlcnNpb24uX2hzYmFUb0hTTEE9ZnVuY3Rpb24oYSl7dmFyIGI9YVswXSxjPWFbMV0sZD1hWzJdLGU9KDItYykqZC8yO3JldHVybiAwIT09ZSYmKDE9PT1lP2M9MDplPC41P2MvPTItYzpjPWMqZC8oMi0yKmUpKSxbYixjLGUsYVszXV19LGQuQ29sb3JDb252ZXJzaW9uLl9oc2JhVG9SR0JBPWZ1bmN0aW9uKGEpe3ZhciBiPTYqYVswXSxjPWFbMV0sZD1hWzJdLGU9W107aWYoMD09PWMpZT1bZCxkLGQsYVszXV07ZWxzZXt2YXIgZixnLGgsaT1NYXRoLmZsb29yKGIpLGo9ZCooMS1jKSxrPWQqKDEtYyooYi1pKSksbD1kKigxLWMqKDEraS1iKSk7MT09PWk/KGY9ayxnPWQsaD1qKToyPT09aT8oZj1qLGc9ZCxoPWwpOjM9PT1pPyhmPWosZz1rLGg9ZCk6ND09PWk/KGY9bCxnPWosaD1kKTo1PT09aT8oZj1kLGc9aixoPWspOihmPWQsZz1sLGg9aiksZT1bZixnLGgsYVszXV19cmV0dXJuIGV9LGQuQ29sb3JDb252ZXJzaW9uLl9oc2xhVG9IU0JBPWZ1bmN0aW9uKGEpe3ZhciBiLGM9YVswXSxkPWFbMV0sZT1hWzJdO3JldHVybiBiPWU8LjU/KDErZCkqZTplK2QtZSpkLGQ9MiooYi1lKS9iLFtjLGQsYixhWzNdXX0sZC5Db2xvckNvbnZlcnNpb24uX2hzbGFUb1JHQkE9ZnVuY3Rpb24oYSl7dmFyIGI9NiphWzBdLGM9YVsxXSxkPWFbMl0sZT1bXTtpZigwPT09YyllPVtkLGQsZCxhWzNdXTtlbHNle3ZhciBmO2Y9ZDwuNT8oMStjKSpkOmQrYy1kKmM7dmFyIGc9MipkLWYsaD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE8MD9hKz02OmE+PTYmJihhLT02KSxhPDE/YisoYy1iKSphOmE8Mz9jOmE8ND9iKyhjLWIpKig0LWEpOmJ9O2U9W2goYisyLGcsZiksaChiLGcsZiksaChiLTIsZyxmKSxhWzNdXX1yZXR1cm4gZX0sZC5Db2xvckNvbnZlcnNpb24uX3JnYmFUb0hTQkE9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPWFbMF0sZT1hWzFdLGY9YVsyXSxnPU1hdGgubWF4KGQsZSxmKSxoPWctTWF0aC5taW4oZCxlLGYpO3JldHVybiAwPT09aD8oYj0wLGM9MCk6KGM9aC9nLGQ9PT1nP2I9KGUtZikvaDplPT09Zz9iPTIrKGYtZCkvaDpmPT09ZyYmKGI9NCsoZC1lKS9oKSxiPDA/Yis9NjpiPj02JiYoYi09NikpLFtiLzYsYyxnLGFbM11dfSxkLkNvbG9yQ29udmVyc2lvbi5fcmdiYVRvSFNMQT1mdW5jdGlvbihhKXt2YXIgYixjLGQ9YVswXSxlPWFbMV0sZj1hWzJdLGc9TWF0aC5tYXgoZCxlLGYpLGg9TWF0aC5taW4oZCxlLGYpLGk9ZytoLGo9Zy1oO3JldHVybiAwPT09aj8oYj0wLGM9MCk6KGM9aTwxP2ovaTpqLygyLWkpLGQ9PT1nP2I9KGUtZikvajplPT09Zz9iPTIrKGYtZCkvajpmPT09ZyYmKGI9NCsoZC1lKS9qKSxiPDA/Yis9NjpiPj02JiYoYi09NikpLFtiLzYsYyxpLzIsYVszXV19LGIuZXhwb3J0cz1kLkNvbG9yQ29udmVyc2lvbn0se1wiLi4vY29yZS9tYWluXCI6MjR9XSwxNTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4vcDUuQ29sb3JcIiksYShcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxkLnByb3RvdHlwZS5hbHBoYT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYWxwaGFcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldEFscGhhKCl9LGQucHJvdG90eXBlLmJsdWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJsdWVcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldEJsdWUoKX0sZC5wcm90b3R5cGUuYnJpZ2h0bmVzcz1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYnJpZ2h0bmVzc1wiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0QnJpZ2h0bmVzcygpfSxkLnByb3RvdHlwZS5jb2xvcj1mdW5jdGlvbigpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvbG9yXCIsYXJndW1lbnRzKSxhcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQuQ29sb3IpcmV0dXJuIGFyZ3VtZW50c1swXTt2YXIgYT1hcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5P2FyZ3VtZW50c1swXTphcmd1bWVudHM7cmV0dXJuIG5ldyBkLkNvbG9yKHRoaXMsYSl9LGQucHJvdG90eXBlLmdyZWVuPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJncmVlblwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0R3JlZW4oKX0sZC5wcm90b3R5cGUuaHVlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJodWVcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldEh1ZSgpfSxkLnByb3RvdHlwZS5sZXJwQ29sb3I9ZnVuY3Rpb24oYSxiLGMpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxlcnBDb2xvclwiLGFyZ3VtZW50cyk7dmFyIGYsZyxoLGksaixrLGw9dGhpcy5fY29sb3JNb2RlLG09dGhpcy5fY29sb3JNYXhlcztpZihsPT09ZS5SR0Ipaj1hLmxldmVscy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEvMjU1fSksaz1iLmxldmVscy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEvMjU1fSk7ZWxzZSBpZihsPT09ZS5IU0IpYS5fZ2V0QnJpZ2h0bmVzcygpLGIuX2dldEJyaWdodG5lc3MoKSxqPWEuaHNiYSxrPWIuaHNiYTtlbHNle2lmKGwhPT1lLkhTTCl0aHJvdyBuZXcgRXJyb3IobCtcImNhbm5vdCBiZSB1c2VkIGZvciBpbnRlcnBvbGF0aW9uLlwiKTthLl9nZXRMaWdodG5lc3MoKSxiLl9nZXRMaWdodG5lc3MoKSxqPWEuaHNsYSxrPWIuaHNsYX1yZXR1cm4gYz1NYXRoLm1heChNYXRoLm1pbihjLDEpLDApLHZvaWQgMD09PXRoaXMubGVycCYmKHRoaXMubGVycD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGMqKGItYSkrYX0pLGY9dGhpcy5sZXJwKGpbMF0sa1swXSxjKSxnPXRoaXMubGVycChqWzFdLGtbMV0sYyksaD10aGlzLmxlcnAoalsyXSxrWzJdLGMpLGk9dGhpcy5sZXJwKGpbM10sa1szXSxjKSxmKj1tW2xdWzBdLGcqPW1bbF1bMV0saCo9bVtsXVsyXSxpKj1tW2xdWzNdLHRoaXMuY29sb3IoZixnLGgsaSl9LGQucHJvdG90eXBlLmxpZ2h0bmVzcz1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibGlnaHRuZXNzXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRMaWdodG5lc3MoKX0sZC5wcm90b3R5cGUucmVkPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyZWRcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldFJlZCgpfSxkLnByb3RvdHlwZS5zYXR1cmF0aW9uPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXR1cmF0aW9uXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRTYXR1cmF0aW9uKCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vcDUuQ29sb3JcIjoxNn1dLDE2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKSxmPWEoXCIuL2NvbG9yX2NvbnZlcnNpb25cIik7ZC5Db2xvcj1mdW5jdGlvbihhLGIpe2lmKHRoaXMuX3N0b3JlTW9kZUFuZE1heGVzKGEuX2NvbG9yTW9kZSxhLl9jb2xvck1heGVzKSx0aGlzLm1vZGUhPT1lLlJHQiYmdGhpcy5tb2RlIT09ZS5IU0wmJnRoaXMubW9kZSE9PWUuSFNCKXRocm93IG5ldyBFcnJvcih0aGlzLm1vZGUrXCIgaXMgYW4gaW52YWxpZCBjb2xvck1vZGUuXCIpO3JldHVybiB0aGlzLl9hcnJheT1kLkNvbG9yLl9wYXJzZUlucHV0cy5hcHBseSh0aGlzLGIpLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpLHRoaXN9LGQuQ29sb3IucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGEpe3RoaXMuaHNiYXx8KHRoaXMuaHNiYT1mLl9yZ2JhVG9IU0JBKHRoaXMuX2FycmF5KSksdGhpcy5oc2xhfHwodGhpcy5oc2xhPWYuX3JnYmFUb0hTTEEodGhpcy5fYXJyYXkpKTt2YXIgYj10aGlzLmxldmVscyxjPXRoaXMuX2FycmF5LGQ9Y1szXTtzd2l0Y2goYSl7Y2FzZVwiI3JyZ2diYlwiOnJldHVyblwiI1wiLmNvbmNhdChiWzBdPDE2P1wiMFwiLmNvbmNhdChiWzBdLnRvU3RyaW5nKDE2KSk6YlswXS50b1N0cmluZygxNiksYlsxXTwxNj9cIjBcIi5jb25jYXQoYlsxXS50b1N0cmluZygxNikpOmJbMV0udG9TdHJpbmcoMTYpLGJbMl08MTY/XCIwXCIuY29uY2F0KGJbMl0udG9TdHJpbmcoMTYpKTpiWzJdLnRvU3RyaW5nKDE2KSk7Y2FzZVwiI3JyZ2diYmFhXCI6cmV0dXJuXCIjXCIuY29uY2F0KGJbMF08MTY/XCIwXCIuY29uY2F0KGJbMF0udG9TdHJpbmcoMTYpKTpiWzBdLnRvU3RyaW5nKDE2KSxiWzFdPDE2P1wiMFwiLmNvbmNhdChiWzFdLnRvU3RyaW5nKDE2KSk6YlsxXS50b1N0cmluZygxNiksYlsyXTwxNj9cIjBcIi5jb25jYXQoYlsyXS50b1N0cmluZygxNikpOmJbMl0udG9TdHJpbmcoMTYpLGJbM108MTY/XCIwXCIuY29uY2F0KGJbMl0udG9TdHJpbmcoMTYpKTpiWzNdLnRvU3RyaW5nKDE2KSk7Y2FzZVwiI3JnYlwiOnJldHVyblwiI1wiLmNvbmNhdChNYXRoLnJvdW5kKDE1KmNbMF0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbMV0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbMl0pLnRvU3RyaW5nKDE2KSk7Y2FzZVwiI3JnYmFcIjpyZXR1cm5cIiNcIi5jb25jYXQoTWF0aC5yb3VuZCgxNSpjWzBdKS50b1N0cmluZygxNiksTWF0aC5yb3VuZCgxNSpjWzFdKS50b1N0cmluZygxNiksTWF0aC5yb3VuZCgxNSpjWzJdKS50b1N0cmluZygxNiksTWF0aC5yb3VuZCgxNSpjWzNdKS50b1N0cmluZygxNikpO2Nhc2VcInJnYlwiOnJldHVyblwicmdiKFwiLmNvbmNhdChiWzBdLFwiLCBcIixiWzFdLFwiLCBcIixiWzJdLFwiKVwiKTtjYXNlXCJyZ2IlXCI6cmV0dXJuXCJyZ2IoXCIuY29uY2F0KCgxMDAqY1swXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzJdKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcInJnYmElXCI6cmV0dXJuXCJyZ2JhKFwiLmNvbmNhdCgoMTAwKmNbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1syXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbM10pLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwiaHNiXCI6Y2FzZVwiaHN2XCI6cmV0dXJuXCJoc2IoXCIuY29uY2F0KHRoaXMuaHNiYVswXSp0aGlzLm1heGVzW2UuSFNCXVswXSxcIiwgXCIsdGhpcy5oc2JhWzFdKnRoaXMubWF4ZXNbZS5IU0JdWzFdLFwiLCBcIix0aGlzLmhzYmFbMl0qdGhpcy5tYXhlc1tlLkhTQl1bMl0sXCIpXCIpO2Nhc2VcImhzYiVcIjpjYXNlXCJoc3YlXCI6cmV0dXJuXCJoc2IoXCIuY29uY2F0KCgxMDAqdGhpcy5oc2JhWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2JhWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2JhWzJdKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcImhzYmFcIjpjYXNlXCJoc3ZhXCI6cmV0dXJuXCJoc2JhKFwiLmNvbmNhdCh0aGlzLmhzYmFbMF0qdGhpcy5tYXhlc1tlLkhTQl1bMF0sXCIsIFwiLHRoaXMuaHNiYVsxXSp0aGlzLm1heGVzW2UuSFNCXVsxXSxcIiwgXCIsdGhpcy5oc2JhWzJdKnRoaXMubWF4ZXNbZS5IU0JdWzJdLFwiLCBcIixkLFwiKVwiKTtjYXNlXCJoc2JhJVwiOmNhc2VcImhzdmElXCI6cmV0dXJuXCJoc2JhKFwiLmNvbmNhdCgoMTAwKnRoaXMuaHNiYVswXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNiYVsxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNiYVsyXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmQpLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwiaHNsXCI6cmV0dXJuXCJoc2woXCIuY29uY2F0KHRoaXMuaHNsYVswXSp0aGlzLm1heGVzW2UuSFNMXVswXSxcIiwgXCIsdGhpcy5oc2xhWzFdKnRoaXMubWF4ZXNbZS5IU0xdWzFdLFwiLCBcIix0aGlzLmhzbGFbMl0qdGhpcy5tYXhlc1tlLkhTTF1bMl0sXCIpXCIpO2Nhc2VcImhzbCVcIjpyZXR1cm5cImhzbChcIi5jb25jYXQoKDEwMCp0aGlzLmhzbGFbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzbGFbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzbGFbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwiaHNsYVwiOnJldHVyblwiaHNsYShcIi5jb25jYXQodGhpcy5oc2xhWzBdKnRoaXMubWF4ZXNbZS5IU0xdWzBdLFwiLCBcIix0aGlzLmhzbGFbMV0qdGhpcy5tYXhlc1tlLkhTTF1bMV0sXCIsIFwiLHRoaXMuaHNsYVsyXSp0aGlzLm1heGVzW2UuSFNMXVsyXSxcIiwgXCIsZCxcIilcIik7Y2FzZVwiaHNsYSVcIjpyZXR1cm5cImhzbChcIi5jb25jYXQoKDEwMCp0aGlzLmhzbGFbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzbGFbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzbGFbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpkKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcInJnYmFcIjpkZWZhdWx0OnJldHVyblwicmdiYShcIitiWzBdK1wiLFwiK2JbMV0rXCIsXCIrYlsyXStcIixcIitkK1wiKVwifX0sZC5Db2xvci5wcm90b3R5cGUuc2V0UmVkPWZ1bmN0aW9uKGEpe3RoaXMuX2FycmF5WzBdPWEvdGhpcy5tYXhlc1tlLlJHQl1bMF0sdGhpcy5fY2FsY3VsYXRlTGV2ZWxzKCl9LGQuQ29sb3IucHJvdG90eXBlLnNldEdyZWVuPWZ1bmN0aW9uKGEpe3RoaXMuX2FycmF5WzFdPWEvdGhpcy5tYXhlc1tlLlJHQl1bMV0sdGhpcy5fY2FsY3VsYXRlTGV2ZWxzKCl9LGQuQ29sb3IucHJvdG90eXBlLnNldEJsdWU9ZnVuY3Rpb24oYSl7dGhpcy5fYXJyYXlbMl09YS90aGlzLm1heGVzW2UuUkdCXVsyXSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKX0sZC5Db2xvci5wcm90b3R5cGUuc2V0QWxwaGE9ZnVuY3Rpb24oYSl7dGhpcy5fYXJyYXlbM109YS90aGlzLm1heGVzW3RoaXMubW9kZV1bM10sdGhpcy5fY2FsY3VsYXRlTGV2ZWxzKCl9LGQuQ29sb3IucHJvdG90eXBlLl9jYWxjdWxhdGVMZXZlbHM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5fYXJyYXksYj10aGlzLmxldmVscz1uZXcgQXJyYXkoYS5sZW5ndGgpLGM9YS5sZW5ndGgtMTtjPj0wOy0tYyliW2NdPU1hdGgucm91bmQoMjU1KmFbY10pfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0QWxwaGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXlbM10qdGhpcy5tYXhlc1t0aGlzLm1vZGVdWzNdfSxkLkNvbG9yLnByb3RvdHlwZS5fc3RvcmVNb2RlQW5kTWF4ZXM9ZnVuY3Rpb24oYSxiKXt0aGlzLm1vZGU9YSx0aGlzLm1heGVzPWJ9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZX0sZC5Db2xvci5wcm90b3R5cGUuX2dldE1heGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4ZXN9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRCbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5WzJdKnRoaXMubWF4ZXNbZS5SR0JdWzJdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0QnJpZ2h0bmVzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhzYmF8fCh0aGlzLmhzYmE9Zi5fcmdiYVRvSFNCQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNiYVsyXSp0aGlzLm1heGVzW2UuSFNCXVsyXX0sZC5Db2xvci5wcm90b3R5cGUuX2dldEdyZWVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5WzFdKnRoaXMubWF4ZXNbZS5SR0JdWzFdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0SHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZT09PWUuSFNCPyh0aGlzLmhzYmF8fCh0aGlzLmhzYmE9Zi5fcmdiYVRvSFNCQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNiYVswXSp0aGlzLm1heGVzW2UuSFNCXVswXSk6KHRoaXMuaHNsYXx8KHRoaXMuaHNsYT1mLl9yZ2JhVG9IU0xBKHRoaXMuX2FycmF5KSksdGhpcy5oc2xhWzBdKnRoaXMubWF4ZXNbZS5IU0xdWzBdKX0sZC5Db2xvci5wcm90b3R5cGUuX2dldExpZ2h0bmVzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhzbGF8fCh0aGlzLmhzbGE9Zi5fcmdiYVRvSFNMQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNsYVsyXSp0aGlzLm1heGVzW2UuSFNMXVsyXX0sZC5Db2xvci5wcm90b3R5cGUuX2dldFJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheVswXSp0aGlzLm1heGVzW2UuUkdCXVswXX0sZC5Db2xvci5wcm90b3R5cGUuX2dldFNhdHVyYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlPT09ZS5IU0I/KHRoaXMuaHNiYXx8KHRoaXMuaHNiYT1mLl9yZ2JhVG9IU0JBKHRoaXMuX2FycmF5KSksdGhpcy5oc2JhWzFdKnRoaXMubWF4ZXNbZS5IU0JdWzFdKToodGhpcy5oc2xhfHwodGhpcy5oc2xhPWYuX3JnYmFUb0hTTEEodGhpcy5fYXJyYXkpKSx0aGlzLmhzbGFbMV0qdGhpcy5tYXhlc1tlLkhTTF1bMV0pfTt2YXIgZz17YWxpY2VibHVlOlwiI2YwZjhmZlwiLGFudGlxdWV3aGl0ZTpcIiNmYWViZDdcIixhcXVhOlwiIzAwZmZmZlwiLGFxdWFtYXJpbmU6XCIjN2ZmZmQ0XCIsYXp1cmU6XCIjZjBmZmZmXCIsYmVpZ2U6XCIjZjVmNWRjXCIsYmlzcXVlOlwiI2ZmZTRjNFwiLGJsYWNrOlwiIzAwMDAwMFwiLGJsYW5jaGVkYWxtb25kOlwiI2ZmZWJjZFwiLGJsdWU6XCIjMDAwMGZmXCIsYmx1ZXZpb2xldDpcIiM4YTJiZTJcIixicm93bjpcIiNhNTJhMmFcIixidXJseXdvb2Q6XCIjZGViODg3XCIsY2FkZXRibHVlOlwiIzVmOWVhMFwiLGNoYXJ0cmV1c2U6XCIjN2ZmZjAwXCIsY2hvY29sYXRlOlwiI2QyNjkxZVwiLGNvcmFsOlwiI2ZmN2Y1MFwiLGNvcm5mbG93ZXJibHVlOlwiIzY0OTVlZFwiLGNvcm5zaWxrOlwiI2ZmZjhkY1wiLGNyaW1zb246XCIjZGMxNDNjXCIsY3lhbjpcIiMwMGZmZmZcIixkYXJrYmx1ZTpcIiMwMDAwOGJcIixkYXJrY3lhbjpcIiMwMDhiOGJcIixkYXJrZ29sZGVucm9kOlwiI2I4ODYwYlwiLGRhcmtncmF5OlwiI2E5YTlhOVwiLGRhcmtncmVlbjpcIiMwMDY0MDBcIixkYXJrZ3JleTpcIiNhOWE5YTlcIixkYXJra2hha2k6XCIjYmRiNzZiXCIsZGFya21hZ2VudGE6XCIjOGIwMDhiXCIsZGFya29saXZlZ3JlZW46XCIjNTU2YjJmXCIsZGFya29yYW5nZTpcIiNmZjhjMDBcIixkYXJrb3JjaGlkOlwiIzk5MzJjY1wiLGRhcmtyZWQ6XCIjOGIwMDAwXCIsZGFya3NhbG1vbjpcIiNlOTk2N2FcIixkYXJrc2VhZ3JlZW46XCIjOGZiYzhmXCIsZGFya3NsYXRlYmx1ZTpcIiM0ODNkOGJcIixkYXJrc2xhdGVncmF5OlwiIzJmNGY0ZlwiLGRhcmtzbGF0ZWdyZXk6XCIjMmY0ZjRmXCIsZGFya3R1cnF1b2lzZTpcIiMwMGNlZDFcIixkYXJrdmlvbGV0OlwiIzk0MDBkM1wiLGRlZXBwaW5rOlwiI2ZmMTQ5M1wiLGRlZXBza3libHVlOlwiIzAwYmZmZlwiLGRpbWdyYXk6XCIjNjk2OTY5XCIsZGltZ3JleTpcIiM2OTY5NjlcIixkb2RnZXJibHVlOlwiIzFlOTBmZlwiLGZpcmVicmljazpcIiNiMjIyMjJcIixmbG9yYWx3aGl0ZTpcIiNmZmZhZjBcIixmb3Jlc3RncmVlbjpcIiMyMjhiMjJcIixmdWNoc2lhOlwiI2ZmMDBmZlwiLGdhaW5zYm9ybzpcIiNkY2RjZGNcIixnaG9zdHdoaXRlOlwiI2Y4ZjhmZlwiLGdvbGQ6XCIjZmZkNzAwXCIsZ29sZGVucm9kOlwiI2RhYTUyMFwiLGdyYXk6XCIjODA4MDgwXCIsZ3JlZW46XCIjMDA4MDAwXCIsZ3JlZW55ZWxsb3c6XCIjYWRmZjJmXCIsZ3JleTpcIiM4MDgwODBcIixob25leWRldzpcIiNmMGZmZjBcIixob3RwaW5rOlwiI2ZmNjliNFwiLGluZGlhbnJlZDpcIiNjZDVjNWNcIixpbmRpZ286XCIjNGIwMDgyXCIsaXZvcnk6XCIjZmZmZmYwXCIsa2hha2k6XCIjZjBlNjhjXCIsbGF2ZW5kZXI6XCIjZTZlNmZhXCIsbGF2ZW5kZXJibHVzaDpcIiNmZmYwZjVcIixsYXduZ3JlZW46XCIjN2NmYzAwXCIsbGVtb25jaGlmZm9uOlwiI2ZmZmFjZFwiLGxpZ2h0Ymx1ZTpcIiNhZGQ4ZTZcIixsaWdodGNvcmFsOlwiI2YwODA4MFwiLGxpZ2h0Y3lhbjpcIiNlMGZmZmZcIixsaWdodGdvbGRlbnJvZHllbGxvdzpcIiNmYWZhZDJcIixsaWdodGdyYXk6XCIjZDNkM2QzXCIsbGlnaHRncmVlbjpcIiM5MGVlOTBcIixsaWdodGdyZXk6XCIjZDNkM2QzXCIsbGlnaHRwaW5rOlwiI2ZmYjZjMVwiLGxpZ2h0c2FsbW9uOlwiI2ZmYTA3YVwiLGxpZ2h0c2VhZ3JlZW46XCIjMjBiMmFhXCIsbGlnaHRza3libHVlOlwiIzg3Y2VmYVwiLGxpZ2h0c2xhdGVncmF5OlwiIzc3ODg5OVwiLGxpZ2h0c2xhdGVncmV5OlwiIzc3ODg5OVwiLGxpZ2h0c3RlZWxibHVlOlwiI2IwYzRkZVwiLGxpZ2h0eWVsbG93OlwiI2ZmZmZlMFwiLGxpbWU6XCIjMDBmZjAwXCIsbGltZWdyZWVuOlwiIzMyY2QzMlwiLGxpbmVuOlwiI2ZhZjBlNlwiLG1hZ2VudGE6XCIjZmYwMGZmXCIsbWFyb29uOlwiIzgwMDAwMFwiLG1lZGl1bWFxdWFtYXJpbmU6XCIjNjZjZGFhXCIsbWVkaXVtYmx1ZTpcIiMwMDAwY2RcIixtZWRpdW1vcmNoaWQ6XCIjYmE1NWQzXCIsbWVkaXVtcHVycGxlOlwiIzkzNzBkYlwiLG1lZGl1bXNlYWdyZWVuOlwiIzNjYjM3MVwiLG1lZGl1bXNsYXRlYmx1ZTpcIiM3YjY4ZWVcIixtZWRpdW1zcHJpbmdncmVlbjpcIiMwMGZhOWFcIixtZWRpdW10dXJxdW9pc2U6XCIjNDhkMWNjXCIsbWVkaXVtdmlvbGV0cmVkOlwiI2M3MTU4NVwiLG1pZG5pZ2h0Ymx1ZTpcIiMxOTE5NzBcIixtaW50Y3JlYW06XCIjZjVmZmZhXCIsbWlzdHlyb3NlOlwiI2ZmZTRlMVwiLG1vY2Nhc2luOlwiI2ZmZTRiNVwiLG5hdmFqb3doaXRlOlwiI2ZmZGVhZFwiLG5hdnk6XCIjMDAwMDgwXCIsb2xkbGFjZTpcIiNmZGY1ZTZcIixvbGl2ZTpcIiM4MDgwMDBcIixvbGl2ZWRyYWI6XCIjNmI4ZTIzXCIsb3JhbmdlOlwiI2ZmYTUwMFwiLG9yYW5nZXJlZDpcIiNmZjQ1MDBcIixvcmNoaWQ6XCIjZGE3MGQ2XCIscGFsZWdvbGRlbnJvZDpcIiNlZWU4YWFcIixwYWxlZ3JlZW46XCIjOThmYjk4XCIscGFsZXR1cnF1b2lzZTpcIiNhZmVlZWVcIixwYWxldmlvbGV0cmVkOlwiI2RiNzA5M1wiLHBhcGF5YXdoaXA6XCIjZmZlZmQ1XCIscGVhY2hwdWZmOlwiI2ZmZGFiOVwiLHBlcnU6XCIjY2Q4NTNmXCIscGluazpcIiNmZmMwY2JcIixwbHVtOlwiI2RkYTBkZFwiLHBvd2RlcmJsdWU6XCIjYjBlMGU2XCIscHVycGxlOlwiIzgwMDA4MFwiLHJlZDpcIiNmZjAwMDBcIixyb3N5YnJvd246XCIjYmM4ZjhmXCIscm95YWxibHVlOlwiIzQxNjllMVwiLHNhZGRsZWJyb3duOlwiIzhiNDUxM1wiLHNhbG1vbjpcIiNmYTgwNzJcIixzYW5keWJyb3duOlwiI2Y0YTQ2MFwiLHNlYWdyZWVuOlwiIzJlOGI1N1wiLHNlYXNoZWxsOlwiI2ZmZjVlZVwiLHNpZW5uYTpcIiNhMDUyMmRcIixzaWx2ZXI6XCIjYzBjMGMwXCIsc2t5Ymx1ZTpcIiM4N2NlZWJcIixzbGF0ZWJsdWU6XCIjNmE1YWNkXCIsc2xhdGVncmF5OlwiIzcwODA5MFwiLHNsYXRlZ3JleTpcIiM3MDgwOTBcIixzbm93OlwiI2ZmZmFmYVwiLHNwcmluZ2dyZWVuOlwiIzAwZmY3ZlwiLHN0ZWVsYmx1ZTpcIiM0NjgyYjRcIix0YW46XCIjZDJiNDhjXCIsdGVhbDpcIiMwMDgwODBcIix0aGlzdGxlOlwiI2Q4YmZkOFwiLHRvbWF0bzpcIiNmZjYzNDdcIix0dXJxdW9pc2U6XCIjNDBlMGQwXCIsdmlvbGV0OlwiI2VlODJlZVwiLHdoZWF0OlwiI2Y1ZGViM1wiLHdoaXRlOlwiI2ZmZmZmZlwiLHdoaXRlc21va2U6XCIjZjVmNWY1XCIseWVsbG93OlwiI2ZmZmYwMFwiLHllbGxvd2dyZWVuOlwiIzlhY2QzMlwifSxoPS9cXHMqLyxpPS8oXFxkezEsM30pLyxqPS8oKD86XFxkKyg/OlxcLlxcZCspPyl8KD86XFwuXFxkKykpLyxrPW5ldyBSZWdFeHAoai5zb3VyY2UrXCIlXCIpLGw9e0hFWDM6L14jKFthLWYwLTldKShbYS1mMC05XSkoW2EtZjAtOV0pJC9pLEhFWDQ6L14jKFthLWYwLTldKShbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKSQvaSxIRVg2Oi9eIyhbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KSQvaSxIRVg4Oi9eIyhbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkkL2ksUkdCOm5ldyBSZWdFeHAoW1wiXnJnYlxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsaS5zb3VyY2UsXCIsXCIsaS5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLFJHQl9QRVJDRU5UOm5ldyBSZWdFeHAoW1wiXnJnYlxcXFwoXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLFJHQkE6bmV3IFJlZ0V4cChbXCJecmdiYVxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsaS5zb3VyY2UsXCIsXCIsaS5zb3VyY2UsXCIsXCIsai5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLFJHQkFfUEVSQ0VOVDpuZXcgUmVnRXhwKFtcIl5yZ2JhXFxcXChcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixqLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksSFNMOm5ldyBSZWdFeHAoW1wiXmhzbFxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLEhTTEE6bmV3IFJlZ0V4cChbXCJeaHNsYVxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsai5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLEhTQjpuZXcgUmVnRXhwKFtcIl5oc2JcXFxcKFwiLGkuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxIU0JBOm5ldyBSZWdFeHAoW1wiXmhzYmFcXFxcKFwiLGkuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGouc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKX07ZC5Db2xvci5fcGFyc2VJbnB1dHM9ZnVuY3Rpb24oYSxiLGMsaCl7dmFyIGksaj1hcmd1bWVudHMubGVuZ3RoLGs9dGhpcy5tb2RlLG09dGhpcy5tYXhlc1trXSxuPVtdO2lmKGo+PTMpe2ZvcihuWzBdPWEvbVswXSxuWzFdPWIvbVsxXSxuWzJdPWMvbVsyXSxuWzNdPVwibnVtYmVyXCI9PXR5cGVvZiBoP2gvbVszXToxLGk9bi5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIG89bltpXTtvPDA/bltpXT0wOm8+MSYmKG5baV09MSl9cmV0dXJuIGs9PT1lLkhTTD9mLl9oc2xhVG9SR0JBKG4pOms9PT1lLkhTQj9mLl9oc2JhVG9SR0JBKG4pOm59aWYoMT09PWomJlwic3RyaW5nXCI9PXR5cGVvZiBhKXt2YXIgcD1hLnRyaW0oKS50b0xvd2VyQ2FzZSgpO2lmKGdbcF0pcmV0dXJuIGQuQ29sb3IuX3BhcnNlSW5wdXRzLmNhbGwodGhpcyxnW3BdKTtpZihsLkhFWDMudGVzdChwKSlyZXR1cm4gbj1sLkhFWDMuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGErYSwxNikvMjU1fSksblszXT0xLG47aWYobC5IRVg2LnRlc3QocCkpcmV0dXJuIG49bC5IRVg2LmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUludChhLDE2KS8yNTV9KSxuWzNdPTEsbjtpZihsLkhFWDQudGVzdChwKSlyZXR1cm4gbj1sLkhFWDQuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGErYSwxNikvMjU1fSk7aWYobC5IRVg4LnRlc3QocCkpcmV0dXJuIG49bC5IRVg4LmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUludChhLDE2KS8yNTV9KTtpZihsLlJHQi50ZXN0KHApKXJldHVybiBuPWwuUkdCLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLzI1NX0pLG5bM109MSxuO2lmKGwuUkdCX1BFUkNFTlQudGVzdChwKSlyZXR1cm4gbj1sLlJHQl9QRVJDRU5ULmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUZsb2F0KGEpLzEwMH0pLG5bM109MSxuO2lmKGwuUkdCQS50ZXN0KHApKXJldHVybiBuPWwuUkdCQS5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAzPT09Yj9wYXJzZUZsb2F0KGEpOmEvMjU1fSk7aWYobC5SR0JBX1BFUkNFTlQudGVzdChwKSlyZXR1cm4gbj1sLlJHQkFfUEVSQ0VOVC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAzPT09Yj9wYXJzZUZsb2F0KGEpOnBhcnNlRmxvYXQoYSkvMTAwfSk7aWYobC5IU0wudGVzdChwKT8obj1sLkhTTC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAwPT09Yj9wYXJzZUludChhLDEwKS8zNjA6cGFyc2VJbnQoYSwxMCkvMTAwfSksblszXT0xKTpsLkhTTEEudGVzdChwKSYmKG49bC5IU0xBLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDA9PT1iP3BhcnNlSW50KGEsMTApLzM2MDozPT09Yj9wYXJzZUZsb2F0KGEpOnBhcnNlSW50KGEsMTApLzEwMH0pKSxuPW4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLm1heChNYXRoLm1pbihhLDEpLDApfSksbi5sZW5ndGgpcmV0dXJuIGYuX2hzbGFUb1JHQkEobik7aWYobC5IU0IudGVzdChwKT8obj1sLkhTQi5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAwPT09Yj9wYXJzZUludChhLDEwKS8zNjA6cGFyc2VJbnQoYSwxMCkvMTAwfSksblszXT0xKTpsLkhTQkEudGVzdChwKSYmKG49bC5IU0JBLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDA9PT1iP3BhcnNlSW50KGEsMTApLzM2MDozPT09Yj9wYXJzZUZsb2F0KGEpOnBhcnNlSW50KGEsMTApLzEwMH0pKSxuLmxlbmd0aCl7Zm9yKGk9bi5sZW5ndGgtMTtpPj0wOy0taSluW2ldPU1hdGgubWF4KE1hdGgubWluKG5baV0sMSksMCk7cmV0dXJuIGYuX2hzYmFUb1JHQkEobil9bj1bMSwxLDEsMV19ZWxzZXtpZigxIT09aiYmMiE9PWp8fFwibnVtYmVyXCIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcihhcmd1bWVudHMrXCJpcyBub3QgYSB2YWxpZCBjb2xvciByZXByZXNlbnRhdGlvbi5cIik7blswXT1hL21bMl0sblsxXT1hL21bMl0sblsyXT1hL21bMl0sblszXT1cIm51bWJlclwiPT10eXBlb2YgYj9iL21bM106MSxuPW4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLm1heChNYXRoLm1pbihhLDEpLDApfSl9cmV0dXJuIG59LGIuZXhwb3J0cz1kLkNvbG9yfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL2NvbG9yX2NvbnZlcnNpb25cIjoxNH1dLDE3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi9wNS5Db2xvclwiKSxkLnByb3RvdHlwZS5iYWNrZ3JvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c1swXWluc3RhbmNlb2YgZC5JbWFnZT90aGlzLmltYWdlKGFyZ3VtZW50c1swXSwwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCk6dGhpcy5fcmVuZGVyZXIuYmFja2dyb3VuZC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmNsZWFyKCksdGhpc30sZC5wcm90b3R5cGUuY29sb3JNb2RlPWZ1bmN0aW9uKGEsYixjLGYsZyl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29sb3JNb2RlXCIsYXJndW1lbnRzKSxhPT09ZS5SR0J8fGE9PT1lLkhTQnx8YT09PWUuSFNMKXt0aGlzLl9jb2xvck1vZGU9YTt2YXIgaD10aGlzLl9jb2xvck1heGVzW2FdOzI9PT1hcmd1bWVudHMubGVuZ3RoPyhoWzBdPWIsaFsxXT1iLGhbMl09YixoWzNdPWIpOjQ9PT1hcmd1bWVudHMubGVuZ3RoPyhoWzBdPWIsaFsxXT1jLGhbMl09Zik6NT09PWFyZ3VtZW50cy5sZW5ndGgmJihoWzBdPWIsaFsxXT1jLGhbMl09ZixoWzNdPWcpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9maWxsU2V0XCIsITApLHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9kb0ZpbGxcIiwhMCksdGhpcy5fcmVuZGVyZXIuZmlsbC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLm5vRmlsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZG9GaWxsXCIsITEpLHRoaXN9LGQucHJvdG90eXBlLm5vU3Ryb2tlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9kb1N0cm9rZVwiLCExKSx0aGlzfSxkLnByb3RvdHlwZS5zdHJva2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX3N0cm9rZVNldFwiLCEwKSx0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZG9TdHJva2VcIiwhMCksdGhpcy5fcmVuZGVyZXIuc3Ryb2tlLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vcDUuQ29sb3JcIjoxNn1dLDE4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9TWF0aC5QSTtiLmV4cG9ydHM9e1AyRDpcInAyZFwiLFdFQkdMOlwid2ViZ2xcIixBUlJPVzpcImRlZmF1bHRcIixDUk9TUzpcImNyb3NzaGFpclwiLEhBTkQ6XCJwb2ludGVyXCIsTU9WRTpcIm1vdmVcIixURVhUOlwidGV4dFwiLFdBSVQ6XCJ3YWl0XCIsSEFMRl9QSTpkLzIsUEk6ZCxRVUFSVEVSX1BJOmQvNCxUQVU6MipkLFRXT19QSToyKmQsREVHUkVFUzpcImRlZ3JlZXNcIixSQURJQU5TOlwicmFkaWFuc1wiLERFR19UT19SQUQ6ZC8xODAsUkFEX1RPX0RFRzoxODAvZCxDT1JORVI6XCJjb3JuZXJcIixDT1JORVJTOlwiY29ybmVyc1wiLFJBRElVUzpcInJhZGl1c1wiLFJJR0hUOlwicmlnaHRcIixMRUZUOlwibGVmdFwiLENFTlRFUjpcImNlbnRlclwiLFRPUDpcInRvcFwiLEJPVFRPTTpcImJvdHRvbVwiLEJBU0VMSU5FOlwiYWxwaGFiZXRpY1wiLFBPSU5UUzowLExJTkVTOjEsTElORV9TVFJJUDozLExJTkVfTE9PUDoyLFRSSUFOR0xFUzo0LFRSSUFOR0xFX0ZBTjo2LFRSSUFOR0xFX1NUUklQOjUsUVVBRFM6XCJxdWFkc1wiLFFVQURfU1RSSVA6XCJxdWFkX3N0cmlwXCIsQ0xPU0U6XCJjbG9zZVwiLE9QRU46XCJvcGVuXCIsQ0hPUkQ6XCJjaG9yZFwiLFBJRTpcInBpZVwiLFBST0pFQ1Q6XCJzcXVhcmVcIixTUVVBUkU6XCJidXR0XCIsUk9VTkQ6XCJyb3VuZFwiLEJFVkVMOlwiYmV2ZWxcIixNSVRFUjpcIm1pdGVyXCIsUkdCOlwicmdiXCIsSFNCOlwiaHNiXCIsSFNMOlwiaHNsXCIsQVVUTzpcImF1dG9cIixBTFQ6MTgsQkFDS1NQQUNFOjgsQ09OVFJPTDoxNyxERUxFVEU6NDYsRE9XTl9BUlJPVzo0MCxFTlRFUjoxMyxFU0NBUEU6MjcsTEVGVF9BUlJPVzozNyxPUFRJT046MTgsUkVUVVJOOjEzLFJJR0hUX0FSUk9XOjM5LFNISUZUOjE2LFRBQjo5LFVQX0FSUk9XOjM4LEJMRU5EOlwic291cmNlLW92ZXJcIixBREQ6XCJsaWdodGVyXCIsREFSS0VTVDpcImRhcmtlblwiLExJR0hURVNUOlwibGlnaHRlblwiLERJRkZFUkVOQ0U6XCJkaWZmZXJlbmNlXCIsRVhDTFVTSU9OOlwiZXhjbHVzaW9uXCIsTVVMVElQTFk6XCJtdWx0aXBseVwiLFNDUkVFTjpcInNjcmVlblwiLFJFUExBQ0U6XCJjb3B5XCIsT1ZFUkxBWTpcIm92ZXJsYXlcIixIQVJEX0xJR0hUOlwiaGFyZC1saWdodFwiLFNPRlRfTElHSFQ6XCJzb2Z0LWxpZ2h0XCIsRE9ER0U6XCJjb2xvci1kb2RnZVwiLEJVUk46XCJjb2xvci1idXJuXCIsVEhSRVNIT0xEOlwidGhyZXNob2xkXCIsR1JBWTpcImdyYXlcIixPUEFRVUU6XCJvcGFxdWVcIixJTlZFUlQ6XCJpbnZlcnRcIixQT1NURVJJWkU6XCJwb3N0ZXJpemVcIixESUxBVEU6XCJkaWxhdGVcIixFUk9ERTpcImVyb2RlXCIsQkxVUjpcImJsdXJcIixOT1JNQUw6XCJub3JtYWxcIixJVEFMSUM6XCJpdGFsaWNcIixCT0xEOlwiYm9sZFwiLF9ERUZBVUxUX1RFWFRfRklMTDpcIiMwMDAwMDBcIixfREVGQVVMVF9MRUFETVVMVDoxLjI1LF9DVFhfTUlERExFOlwibWlkZGxlXCIsTElORUFSOlwibGluZWFyXCIsUVVBRFJBVElDOlwicXVhZHJhdGljXCIsQkVaSUVSOlwiYmV6aWVyXCIsQ1VSVkU6XCJjdXJ2ZVwiLFNUUk9LRTpcInN0cm9rZVwiLEZJTEw6XCJmaWxsXCIsVEVYVFVSRTpcInRleHR1cmVcIixJTU1FRElBVEU6XCJpbW1lZGlhdGVcIixORUFSRVNUOlwibmVhcmVzdFwiLFJFUEVBVDpcInJlcGVhdFwiLENMQU1QOlwiY2xhbXBcIixNSVJST1I6XCJtaXJyb3JcIixMQU5EU0NBUEU6XCJsYW5kc2NhcGVcIixQT1JUUkFJVDpcInBvcnRyYWl0XCIsX0RFRkFVTFRfU1RST0tFOlwiIzAwMDAwMFwiLF9ERUZBVUxUX0ZJTEw6XCIjRkZGRkZGXCIsR1JJRDpcImdyaWRcIixBWEVTOlwiYXhlc1wifX0se31dLDE5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZCgpe3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGh8fGRvY3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGh8fDB9ZnVuY3Rpb24gZSgpe3JldHVybiB3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodHx8ZG9jdW1lbnQuYm9keSYmZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHR8fDB9ZnVuY3Rpb24gZihhKXtpZighKGRvY3VtZW50LmZ1bGxzY3JlZW5FbmFibGVkfHxkb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRW5hYmxlZHx8ZG9jdW1lbnQubW96RnVsbFNjcmVlbkVuYWJsZWR8fGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVuYWJsZWQpKXRocm93IG5ldyBFcnJvcihcIkZ1bGxzY3JlZW4gbm90IGVuYWJsZWQgaW4gdGhpcyBicm93c2VyLlwiKVxuO2EucmVxdWVzdEZ1bGxzY3JlZW4/YS5yZXF1ZXN0RnVsbHNjcmVlbigpOmEubW96UmVxdWVzdEZ1bGxTY3JlZW4/YS5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpOmEud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4/YS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpOmEubXNSZXF1ZXN0RnVsbHNjcmVlbiYmYS5tc1JlcXVlc3RGdWxsc2NyZWVuKCl9ZnVuY3Rpb24gZygpe2RvY3VtZW50LmV4aXRGdWxsc2NyZWVuP2RvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk6ZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbj9kb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuKCk6ZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4/ZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4oKTpkb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuJiZkb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKCl9dmFyIGg9YShcIi4vbWFpblwiKSxpPWEoXCIuL2NvbnN0YW50c1wiKSxqPVtpLkFSUk9XLGkuQ1JPU1MsaS5IQU5ELGkuTU9WRSxpLlRFWFQsaS5XQUlUXTtoLnByb3RvdHlwZS5fZnJhbWVSYXRlPTAsaC5wcm90b3R5cGUuX2xhc3RGcmFtZVRpbWU9d2luZG93LnBlcmZvcm1hbmNlLm5vdygpLGgucHJvdG90eXBlLl90YXJnZXRGcmFtZVJhdGU9NjA7dmFyIGs9d2luZG93LnByaW50O2gucHJvdG90eXBlLnByaW50PWZ1bmN0aW9uKCl7YXJndW1lbnRzLmxlbmd0aD9jb25zb2xlLmxvZy5hcHBseShjb25zb2xlLGFyZ3VtZW50cyk6aygpfSxoLnByb3RvdHlwZS5mcmFtZUNvdW50PTAsaC5wcm90b3R5cGUuZm9jdXNlZD1kb2N1bWVudC5oYXNGb2N1cygpLGgucHJvdG90eXBlLmN1cnNvcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9XCJhdXRvXCIsZT10aGlzLl9jdXJFbGVtZW50LmVsdDtpZihqLmluZGV4T2YoYSk+LTEpZD1hO2Vsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpe3ZhciBmPVwiXCI7YiYmYyYmXCJudW1iZXJcIj09dHlwZW9mIGImJlwibnVtYmVyXCI9PXR5cGVvZiBjJiYoZj1iK1wiIFwiK2MpLGQ9XCJodHRwOi8vXCI9PT1hLnN1YnN0cmluZygwLDcpfHxcImh0dHBzOi8vXCI9PT1hLnN1YnN0cmluZygwLDgpP1widXJsKFwiK2ErXCIpIFwiK2YrXCIsIGF1dG9cIjovXFwuKGN1cnxqcGd8anBlZ3xnaWZ8cG5nfENVUnxKUEd8SlBFR3xHSUZ8UE5HKSQvLnRlc3QoYSk/XCJ1cmwoXCIrYStcIikgXCIrZitcIiwgYXV0b1wiOmF9ZS5zdHlsZS5jdXJzb3I9ZH0saC5wcm90b3R5cGUuZnJhbWVSYXRlPWZ1bmN0aW9uKGEpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJmcmFtZVJhdGVcIixhcmd1bWVudHMpLFwibnVtYmVyXCIhPXR5cGVvZiBhfHxhPDA/dGhpcy5fZnJhbWVSYXRlOih0aGlzLl9zZXRQcm9wZXJ0eShcIl90YXJnZXRGcmFtZVJhdGVcIixhKSx0aGlzLl9ydW5GcmFtZXMoKSx0aGlzKX0saC5wcm90b3R5cGUuZ2V0RnJhbWVSYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJhbWVSYXRlKCl9LGgucHJvdG90eXBlLnNldEZyYW1lUmF0ZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5mcmFtZVJhdGUoYSl9LGgucHJvdG90eXBlLm5vQ3Vyc29yPWZ1bmN0aW9uKCl7dGhpcy5fY3VyRWxlbWVudC5lbHQuc3R5bGUuY3Vyc29yPVwibm9uZVwifSxoLnByb3RvdHlwZS5kaXNwbGF5V2lkdGg9c2NyZWVuLndpZHRoLGgucHJvdG90eXBlLmRpc3BsYXlIZWlnaHQ9c2NyZWVuLmhlaWdodCxoLnByb3RvdHlwZS53aW5kb3dXaWR0aD1kKCksaC5wcm90b3R5cGUud2luZG93SGVpZ2h0PWUoKSxoLnByb3RvdHlwZS5fb25yZXNpemU9ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UHJvcGVydHkoXCJ3aW5kb3dXaWR0aFwiLGQoKSksdGhpcy5fc2V0UHJvcGVydHkoXCJ3aW5kb3dIZWlnaHRcIixlKCkpO3ZhciBiLGM9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7XCJmdW5jdGlvblwiPT10eXBlb2YgYy53aW5kb3dSZXNpemVkJiYodm9pZCAwPT09KGI9Yy53aW5kb3dSZXNpemVkKGEpKXx8Ynx8YS5wcmV2ZW50RGVmYXVsdCgpKX0saC5wcm90b3R5cGUud2lkdGg9MCxoLnByb3RvdHlwZS5oZWlnaHQ9MCxoLnByb3RvdHlwZS5mdWxsc2NyZWVuPWZ1bmN0aW9uKGEpe2lmKGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcImZ1bGxzY3JlZW5cIixhcmd1bWVudHMpLHZvaWQgMD09PWEpcmV0dXJuIGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50fHxkb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnR8fGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQ7YT9mKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk6ZygpfSxoLnByb3RvdHlwZS5waXhlbERlbnNpdHk9ZnVuY3Rpb24oYSl7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicGl4ZWxEZW5zaXR5XCIsYXJndW1lbnRzKTt2YXIgYjtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYT8oYSE9PXRoaXMuX3BpeGVsRGVuc2l0eSYmKHRoaXMuX3BpeGVsRGVuc2l0eT1hLHRoaXMuX3BpeGVsc0RpcnR5PSEwKSxiPXRoaXMsdGhpcy5yZXNpemVDYW52YXModGhpcy53aWR0aCx0aGlzLmhlaWdodCwhMCkpOmI9dGhpcy5fcGl4ZWxEZW5zaXR5LGJ9LGgucHJvdG90eXBlLmRpc3BsYXlEZW5zaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfSxoLnByb3RvdHlwZS5nZXRVUkw9ZnVuY3Rpb24oKXtyZXR1cm4gbG9jYXRpb24uaHJlZn0saC5wcm90b3R5cGUuZ2V0VVJMUGF0aD1mdW5jdGlvbigpe3JldHVybiBsb2NhdGlvbi5wYXRobmFtZS5zcGxpdChcIi9cIikuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVyblwiXCIhPT1hfSl9LGgucHJvdG90eXBlLmdldFVSTFBhcmFtcz1mdW5jdGlvbigpe2Zvcih2YXIgYSxiPS9bPyZdKFteJj1dKykoPzpbJj1dKShbXiY9XSspL2dpbSxjPXt9O251bGwhPShhPWIuZXhlYyhsb2NhdGlvbi5zZWFyY2gpKTspYS5pbmRleD09PWIubGFzdEluZGV4JiZiLmxhc3RJbmRleCsrLGNbYVsxXV09YVsyXTtyZXR1cm4gY30sYi5leHBvcnRzPWh9LHtcIi4vY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNH1dLDIwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKTthKFwiLi9jb25zdGFudHNcIik7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzPWQuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcj1mdW5jdGlvbigpe307dmFyIGU9bnVsbCxmPVwiaHR0cHM6Ly9naXRodWIuY29tL3Byb2Nlc3NpbmcvcDUuanMvd2lraS9wNS5qcy1vdmVydmlldyN3aHktY2FudC1pLWFzc2lnbi12YXJpYWJsZXMtdXNpbmctcDUtZnVuY3Rpb25zLWFuZC12YXJpYWJsZXMtYmVmb3JlLXNldHVwXCIsZz1mdW5jdGlvbigpe3ZhciBiPXt9LGM9ZnVuY3Rpb24oYSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm5cIl9cIiE9PWFbMF0mJighKGEgaW4gYikmJihiW2FdPSEwLCEwKSl9KS5tYXAoZnVuY3Rpb24oYil7dmFyIGM7cmV0dXJuIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgYVtiXT9cImZ1bmN0aW9uXCI6Yj09PWIudG9VcHBlckNhc2UoKT9cImNvbnN0YW50XCI6XCJ2YXJpYWJsZVwiLHtuYW1lOmIsdHlwZTpjfX0pfTtlPVtdLmNvbmNhdChjKGQucHJvdG90eXBlKSxjKGEoXCIuL2NvbnN0YW50c1wiKSkpLGUuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBiLm5hbWUubGVuZ3RoLWEubmFtZS5sZW5ndGh9KX0saD1mdW5jdGlvbihhLGIpe2J8fChiPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSkpLGV8fGcoKSxlLnNvbWUoZnVuY3Rpb24oYyl7aWYoYS5tZXNzYWdlJiZudWxsIT09YS5tZXNzYWdlLm1hdGNoKFwiXFxcXFc/XCIrYy5uYW1lK1wiXFxcXFdcIikpcmV0dXJuIGIoXCJEaWQgeW91IGp1c3QgdHJ5IHRvIHVzZSBwNS5qcydzIFwiK2MubmFtZSsoXCJmdW5jdGlvblwiPT09Yy50eXBlP1wiKCkgXCI6XCIgXCIpK2MudHlwZStcIj8gSWYgc28sIHlvdSBtYXkgd2FudCB0byBtb3ZlIGl0IGludG8geW91ciBza2V0Y2gncyBzZXR1cCgpIGZ1bmN0aW9uLlxcblxcbkZvciBtb3JlIGRldGFpbHMsIHNlZTogXCIrZiksITB9KX07ZC5wcm90b3R5cGUuX2hlbHBGb3JNaXN1c2VkQXRUb3BMZXZlbENvZGU9aCxcImNvbXBsZXRlXCIhPT1kb2N1bWVudC5yZWFkeVN0YXRlJiYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLGgsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLGZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLGgsITEpfSkpLGIuZXhwb3J0cz1kfSx7XCIuLi8uLi9kb2NzL3JlZmVyZW5jZS9kYXRhLmpzb25cIjp2b2lkIDAsXCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjR9XSwyMTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL2NvbnN0YW50c1wiKTtiLmV4cG9ydHM9e21vZGVBZGp1c3Q6ZnVuY3Rpb24oYSxiLGMsZSxmKXtyZXR1cm4gZj09PWQuQ09STkVSP3t4OmEseTpiLHc6YyxoOmV9OmY9PT1kLkNPUk5FUlM/e3g6YSx5OmIsdzpjLWEsaDplLWJ9OmY9PT1kLlJBRElVUz97eDphLWMseTpiLWUsdzoyKmMsaDoyKmV9OmY9PT1kLkNFTlRFUj97eDphLS41KmMseTpiLS41KmUsdzpjLGg6ZX06dm9pZCAwfX19LHtcIi4vY29uc3RhbnRzXCI6MTh9XSwyMjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1mdW5jdGlvbigpe3dpbmRvdy5tb2NoYXx8KHdpbmRvdy5zZXR1cCYmXCJmdW5jdGlvblwiPT10eXBlb2Ygd2luZG93LnNldHVwfHx3aW5kb3cuZHJhdyYmXCJmdW5jdGlvblwiPT10eXBlb2Ygd2luZG93LmRyYXcpJiYhZC5pbnN0YW5jZSYmbmV3IGR9O1wiY29tcGxldGVcIj09PWRvY3VtZW50LnJlYWR5U3RhdGU/ZSgpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLGUsITEpfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDIzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKTtkLnByb3RvdHlwZS5leGl0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiZXhpdCgpIG5vdCBpbXBsZW1lbnRlZCwgc2VlIHJlbW92ZSgpXCIpfSxkLnByb3RvdHlwZS5wdXNoU3R5bGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJwdXNoU3R5bGUoKSBub3QgdXNlZCwgc2VlIHB1c2goKVwiKX0sZC5wcm90b3R5cGUucG9wU3R5bGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJwb3BTdHlsZSgpIG5vdCB1c2VkLCBzZWUgcG9wKClcIil9LGQucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXt2YXIgYT1cInNpemUoKSBpcyBub3QgYSB2YWxpZCBwNSBmdW5jdGlvbiwgdG8gc2V0IHRoZSBzaXplIG9mIHRoZSBcIjt0aHJvdyBhKz1cImRyYXdpbmcgY2FudmFzLCBwbGVhc2UgdXNlIGNyZWF0ZUNhbnZhcygpIGluc3RlYWRcIixuZXcgRXJyb3IoYSl9LGIuZXhwb3J0cz1kfSx7XCIuL21haW5cIjoyNH1dLDI0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7YShcIi4vc2hpbVwiKTt2YXIgZD1hKFwiLi9jb25zdGFudHNcIiksZT1mdW5jdGlvbihhLGIsYyl7XCJib29sZWFuXCI9PXR5cGVvZiBiJiZ2b2lkIDA9PT1jJiYoYz1iLGI9dm9pZCAwKSx0aGlzLl9zZXR1cERvbmU9ITEsdGhpcy5fcGl4ZWxEZW5zaXR5PU1hdGguY2VpbCh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyl8fDEsdGhpcy5fdXNlck5vZGU9Yix0aGlzLl9jdXJFbGVtZW50PW51bGwsdGhpcy5fZWxlbWVudHM9W10sdGhpcy5fcmVxdWVzdEFuaW1JZD0wLHRoaXMuX3ByZWxvYWRDb3VudD0wLHRoaXMuX2lzR2xvYmFsPSExLHRoaXMuX2xvb3A9ITAsdGhpcy5faW5pdGlhbGl6ZUluc3RhbmNlVmFyaWFibGVzKCksdGhpcy5fZGVmYXVsdENhbnZhc1NpemU9e3dpZHRoOjEwMCxoZWlnaHQ6MTAwfSx0aGlzLl9ldmVudHM9e21vdXNlbW92ZTpudWxsLG1vdXNlZG93bjpudWxsLG1vdXNldXA6bnVsbCxkcmFnZW5kOm51bGwsZHJhZ292ZXI6bnVsbCxjbGljazpudWxsLGRibGNsaWNrOm51bGwsbW91c2VvdmVyOm51bGwsbW91c2VvdXQ6bnVsbCxrZXlkb3duOm51bGwsa2V5dXA6bnVsbCxrZXlwcmVzczpudWxsLHRvdWNoc3RhcnQ6bnVsbCx0b3VjaG1vdmU6bnVsbCx0b3VjaGVuZDpudWxsLHJlc2l6ZTpudWxsLGJsdXI6bnVsbH0sdGhpcy5fZXZlbnRzLndoZWVsPW51bGwsdGhpcy5fbG9hZGluZ1NjcmVlbklkPVwicDVfbG9hZGluZ1wiLHRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzPXt9O2Zvcih2YXIgZD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlLnByb3RvdHlwZS5fcmVnaXN0ZXJlZE1ldGhvZHMpLGY9MDtmPGQubGVuZ3RoO2YrKyl7dmFyIGc9ZFtmXTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kc1tnXT1lLnByb3RvdHlwZS5fcmVnaXN0ZXJlZE1ldGhvZHNbZ10uc2xpY2UoKX13aW5kb3cuRGV2aWNlT3JpZW50YXRpb25FdmVudCYmKHRoaXMuX2V2ZW50cy5kZXZpY2VvcmllbnRhdGlvbj1udWxsKSx3aW5kb3cuRGV2aWNlTW90aW9uRXZlbnQmJiF3aW5kb3cuX2lzTm9kZVdlYmtpdCYmKHRoaXMuX2V2ZW50cy5kZXZpY2Vtb3Rpb249bnVsbCksdGhpcy5fc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl91c2VyTm9kZSYmXCJzdHJpbmdcIj09dHlwZW9mIHRoaXMuX3VzZXJOb2RlJiYodGhpcy5fdXNlck5vZGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fdXNlck5vZGUpKTt2YXIgYT10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcyxiPWEucHJlbG9hZDtpZihiKXt2YXIgYz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9sb2FkaW5nU2NyZWVuSWQpO2lmKCFjKXtjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksYy5pbm5lckhUTUw9XCJMb2FkaW5nLi4uXCIsYy5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsYy5pZD10aGlzLl9sb2FkaW5nU2NyZWVuSWQ7KHRoaXMuX3VzZXJOb2RlfHxkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChjKX12YXIgZD10aGlzLl9wcmVsb2FkTWV0aG9kcztmb3IodmFyIGYgaW4gZCl7ZFtmXT1kW2ZdfHxlO3ZhciBnPWRbZl07ZyE9PWUucHJvdG90eXBlJiZnIT09ZXx8KHRoaXMuX2lzR2xvYmFsJiYod2luZG93W2ZdPXRoaXMuX3dyYXBQcmVsb2FkKHRoaXMsZikpLGc9dGhpcyksdGhpcy5fcmVnaXN0ZXJlZFByZWxvYWRNZXRob2RzW2ZdPWdbZl0sZ1tmXT10aGlzLl93cmFwUHJlbG9hZChnLGYpfWIoKSx0aGlzLl9ydW5JZlByZWxvYWRzQXJlRG9uZSgpfWVsc2UgdGhpcy5fc2V0dXAoKSx0aGlzLl9ydW5GcmFtZXMoKSx0aGlzLl9kcmF3KCl9LmJpbmQodGhpcyksdGhpcy5fcnVuSWZQcmVsb2Fkc0FyZURvbmU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztpZigwPT09YS5fcHJlbG9hZENvdW50KXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhLl9sb2FkaW5nU2NyZWVuSWQpO2ImJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKSxhLl9zZXR1cCgpLGEuX3J1bkZyYW1lcygpLGEuX2RyYXcoKX19LHRoaXMuX2RlY3JlbWVudFByZWxvYWQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLnByZWxvYWQmJihhLl9zZXRQcm9wZXJ0eShcIl9wcmVsb2FkQ291bnRcIixhLl9wcmVsb2FkQ291bnQtMSksYS5fcnVuSWZQcmVsb2Fkc0FyZURvbmUoKSl9LHRoaXMuX3dyYXBQcmVsb2FkPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2luY3JlbWVudFByZWxvYWQoKSx0aGlzLl9yZWdpc3RlcmVkUHJlbG9hZE1ldGhvZHNbYl0uYXBwbHkoYSxhcmd1bWVudHMpfS5iaW5kKHRoaXMpfSx0aGlzLl9pbmNyZW1lbnRQcmVsb2FkPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7YS5fc2V0UHJvcGVydHkoXCJfcHJlbG9hZENvdW50XCIsYS5fcHJlbG9hZENvdW50KzEpfSx0aGlzLl9zZXR1cD1mdW5jdGlvbigpe3RoaXMuY3JlYXRlQ2FudmFzKHRoaXMuX2RlZmF1bHRDYW52YXNTaXplLndpZHRoLHRoaXMuX2RlZmF1bHRDYW52YXNTaXplLmhlaWdodCxcInAyZFwiKTt2YXIgYT10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLnByZWxvYWQpZm9yKHZhciBiIGluIHRoaXMuX3ByZWxvYWRNZXRob2RzKWFbYl09dGhpcy5fcHJlbG9hZE1ldGhvZHNbYl1bYl0sYVtiXSYmdGhpcyYmKGFbYl09YVtiXS5iaW5kKHRoaXMpKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLnNldHVwJiZhLnNldHVwKCk7Zm9yKHZhciBjPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiY2FudmFzXCIpLGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXTtcInRydWVcIj09PWUuZGF0YXNldC5oaWRkZW4mJihlLnN0eWxlLnZpc2liaWxpdHk9XCJcIixkZWxldGUgZS5kYXRhc2V0LmhpZGRlbil9dGhpcy5fc2V0dXBEb25lPSEwfS5iaW5kKHRoaXMpLHRoaXMuX2RyYXc9ZnVuY3Rpb24oKXt2YXIgYT13aW5kb3cucGVyZm9ybWFuY2Uubm93KCksYj1hLXRoaXMuX2xhc3RGcmFtZVRpbWUsYz0xZTMvdGhpcy5fdGFyZ2V0RnJhbWVSYXRlOyghdGhpcy5fbG9vcHx8Yj49Yy01KSYmKHRoaXMucmVkcmF3KCksdGhpcy5fZnJhbWVSYXRlPTFlMy8oYS10aGlzLl9sYXN0RnJhbWVUaW1lKSx0aGlzLl9sYXN0RnJhbWVUaW1lPWEsdm9pZCAwIT09dGhpcy5fdXBkYXRlTW91c2VDb29yZHMmJnRoaXMuX3VwZGF0ZU1vdXNlQ29vcmRzKCkpLHRoaXMuX2xvb3AmJih0aGlzLl9yZXF1ZXN0QW5pbUlkPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fZHJhdykpfS5iaW5kKHRoaXMpLHRoaXMuX3J1bkZyYW1lcz1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuX3VwZGF0ZUludGVydmFsKX0uYmluZCh0aGlzKSx0aGlzLl9zZXRQcm9wZXJ0eT1mdW5jdGlvbihhLGIpe3RoaXNbYV09Yix0aGlzLl9pc0dsb2JhbCYmKHdpbmRvd1thXT1iKX0uYmluZCh0aGlzKSx0aGlzLnJlbW92ZT1mdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2xvYWRpbmdTY3JlZW5JZCk7aWYoYSYmKGEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKSx0aGlzLl9pbmNyZW1lbnRQcmVsb2FkKCkpLHRoaXMuX2N1ckVsZW1lbnQpe3RoaXMuX2xvb3A9ITEsdGhpcy5fcmVxdWVzdEFuaW1JZCYmd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RBbmltSWQpO2Zvcih2YXIgYiBpbiB0aGlzLl9ldmVudHMpd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYix0aGlzLl9ldmVudHNbYl0pO2Zvcih2YXIgYz0wO2M8dGhpcy5fZWxlbWVudHMubGVuZ3RoO2MrKyl7dmFyIGQ9dGhpcy5fZWxlbWVudHNbY107ZC5lbHQucGFyZW50Tm9kZSYmZC5lbHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkLmVsdCk7Zm9yKHZhciBmIGluIGQuX2V2ZW50cylkLmVsdC5yZW1vdmVFdmVudExpc3RlbmVyKGYsZC5fZXZlbnRzW2ZdKX12YXIgZz10aGlzO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnJlbW92ZS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEmJmEuY2FsbChnKX0pfWlmKHRoaXMuX2lzR2xvYmFsKXtmb3IodmFyIGggaW4gZS5wcm90b3R5cGUpdHJ5e2RlbGV0ZSB3aW5kb3dbaF19Y2F0Y2goYSl7d2luZG93W2hdPXZvaWQgMH1mb3IodmFyIGkgaW4gdGhpcylpZih0aGlzLmhhc093blByb3BlcnR5KGkpKXRyeXtkZWxldGUgd2luZG93W2ldfWNhdGNoKGEpe3dpbmRvd1tpXT12b2lkIDB9ZS5pbnN0YW5jZT1udWxsfX0uYmluZCh0aGlzKSx0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5pbml0LmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwIT09YSYmYS5jYWxsKHRoaXMpfSx0aGlzKTt2YXIgaD10aGlzLl9jcmVhdGVGcmllbmRseUdsb2JhbEZ1bmN0aW9uQmluZGVyKCk7aWYoYSlhKHRoaXMpO2Vsc2V7dGhpcy5faXNHbG9iYWw9ITAsZS5pbnN0YW5jZT10aGlzO2Zvcih2YXIgaSBpbiBlLnByb3RvdHlwZSlpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnByb3RvdHlwZVtpXSl7dmFyIGo9aS5zdWJzdHJpbmcoMik7dGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGopfHwoTWF0aC5oYXNPd25Qcm9wZXJ0eShpKSYmTWF0aFtpXT09PWUucHJvdG90eXBlW2ldP2goaSxlLnByb3RvdHlwZVtpXSk6aChpLGUucHJvdG90eXBlW2ldLmJpbmQodGhpcykpKX1lbHNlIGgoaSxlLnByb3RvdHlwZVtpXSk7Zm9yKHZhciBrIGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eShrKSYmaChrLHRoaXNba10pfWZvcih2YXIgbCBpbiB0aGlzLl9ldmVudHMpe3ZhciBtPXRoaXNbXCJfb25cIitsXTtpZihtKXt2YXIgbj1tLmJpbmQodGhpcyk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIobCxuLHtwYXNzaXZlOiExfSksdGhpcy5fZXZlbnRzW2xdPW59fXZhciBvPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJmb2N1c2VkXCIsITApfS5iaW5kKHRoaXMpLHA9ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcImZvY3VzZWRcIiwhMSl9LmJpbmQodGhpcyk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLG8pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLHApLHRoaXMucmVnaXN0ZXJNZXRob2QoXCJyZW1vdmVcIixmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIixvKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIixwKX0pLGM/dGhpcy5fc3RhcnQoKTpcImNvbXBsZXRlXCI9PT1kb2N1bWVudC5yZWFkeVN0YXRlP3RoaXMuX3N0YXJ0KCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsdGhpcy5fc3RhcnQuYmluZCh0aGlzKSwhMSl9O2UucHJvdG90eXBlLl9pbml0aWFsaXplSW5zdGFuY2VWYXJpYWJsZXM9ZnVuY3Rpb24oKXt0aGlzLl9zdHlsZXM9W10sdGhpcy5fYmV6aWVyRGV0YWlsPTIwLHRoaXMuX2N1cnZlRGV0YWlsPTIwLHRoaXMuX2NvbG9yTW9kZT1kLlJHQix0aGlzLl9jb2xvck1heGVzPXtyZ2I6WzI1NSwyNTUsMjU1LDI1NV0saHNiOlszNjAsMTAwLDEwMCwxXSxoc2w6WzM2MCwxMDAsMTAwLDFdfSx0aGlzLl9waXhlbHNEaXJ0eT0hMH0sZS5pbnN0YW5jZT1udWxsLGUuZGlzYWJsZUZyaWVuZGx5RXJyb3JzPSExO2Zvcih2YXIgZiBpbiBkKWUucHJvdG90eXBlW2ZdPWRbZl07ZS5wcm90b3R5cGUuX3ByZWxvYWRNZXRob2RzPXtsb2FkSlNPTjplLnByb3RvdHlwZSxsb2FkSW1hZ2U6ZS5wcm90b3R5cGUsbG9hZFN0cmluZ3M6ZS5wcm90b3R5cGUsbG9hZFhNTDplLnByb3RvdHlwZSxsb2FkQnl0ZXM6ZS5wcm90b3R5cGUsbG9hZFRhYmxlOmUucHJvdG90eXBlLGxvYWRGb250OmUucHJvdG90eXBlLGxvYWRNb2RlbDplLnByb3RvdHlwZSxsb2FkU2hhZGVyOmUucHJvdG90eXBlfSxlLnByb3RvdHlwZS5fcmVnaXN0ZXJlZE1ldGhvZHM9e2luaXQ6W10scHJlOltdLHBvc3Q6W10scmVtb3ZlOltdfSxlLnByb3RvdHlwZS5fcmVnaXN0ZXJlZFByZWxvYWRNZXRob2RzPXt9LGUucHJvdG90eXBlLnJlZ2lzdGVyUHJlbG9hZE1ldGhvZD1mdW5jdGlvbihhLGIpe2UucHJvdG90eXBlLl9wcmVsb2FkTWV0aG9kcy5oYXNPd25Qcm9wZXJ0eShhKXx8KGUucHJvdG90eXBlLl9wcmVsb2FkTWV0aG9kc1thXT1iKX0sZS5wcm90b3R5cGUucmVnaXN0ZXJNZXRob2Q9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzfHxlLnByb3RvdHlwZTtjLl9yZWdpc3RlcmVkTWV0aG9kcy5oYXNPd25Qcm9wZXJ0eShhKXx8KGMuX3JlZ2lzdGVyZWRNZXRob2RzW2FdPVtdKSxjLl9yZWdpc3RlcmVkTWV0aG9kc1thXS5wdXNoKGIpfSxlLnByb3RvdHlwZS5fY3JlYXRlRnJpZW5kbHlHbG9iYWxGdW5jdGlvbkJpbmRlcj1mdW5jdGlvbihhKXthPWF8fHt9O3ZhciBiPWEuZ2xvYmFsT2JqZWN0fHx3aW5kb3csYz1hLmxvZ3x8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxkPXtwcmludDohMH07cmV0dXJuIGZ1bmN0aW9uKGEsZil7aWYoZS5kaXNhYmxlRnJpZW5kbHlFcnJvcnMsMSliW2FdPWY7ZWxzZSB0cnl7aWYoYSBpbiBiJiYhKGEgaW4gZCkpdGhyb3cgbmV3IEVycm9yKCdnbG9iYWwgXCInK2ErJ1wiIGFscmVhZHkgZXhpc3RzJyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsYSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHNldDpmdW5jdGlvbihkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYixhLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpkLHdyaXRhYmxlOiEwfSksYygnWW91IGp1c3QgY2hhbmdlZCB0aGUgdmFsdWUgb2YgXCInK2ErXCJcXFwiLCB3aGljaCB3YXMgYSBwNSBmdW5jdGlvbi4gVGhpcyBjb3VsZCBjYXVzZSBwcm9ibGVtcyBsYXRlciBpZiB5b3UncmUgbm90IGNhcmVmdWwuXCIpfX0pfWNhdGNoKGQpe2MoJ3A1IGhhZCBwcm9ibGVtcyBjcmVhdGluZyB0aGUgZ2xvYmFsIGZ1bmN0aW9uIFwiJythKydcIiwgcG9zc2libHkgYmVjYXVzZSB5b3VyIGNvZGUgaXMgYWxyZWFkeSB1c2luZyB0aGF0IG5hbWUgYXMgYSB2YXJpYWJsZS4gWW91IG1heSB3YW50IHRvIHJlbmFtZSB5b3VyIHZhcmlhYmxlIHRvIHNvbWV0aGluZyBlbHNlLicpLGJbYV09Zn19fSxiLmV4cG9ydHM9ZX0se1wiLi9jb25zdGFudHNcIjoxOCxcIi4vc2hpbVwiOjM0fV0sMjU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4hMT09PWI/ZihhLGMpOmUoYSxiLGMpLHRoaXN9ZnVuY3Rpb24gZShhLGIsYyl7Yy5fZXZlbnRzW2FdJiZmKGEsYyk7dmFyIGQ9Yi5iaW5kKGMpO2MuZWx0LmFkZEV2ZW50TGlzdGVuZXIoYSxkLCExKSxjLl9ldmVudHNbYV09ZH1mdW5jdGlvbiBmKGEsYil7dmFyIGM9Yi5fZXZlbnRzW2FdO2IuZWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxjLCExKSxiLl9ldmVudHNbYV09bnVsbH12YXIgZz1hKFwiLi9tYWluXCIpO2cuRWxlbWVudD1mdW5jdGlvbihhLGIpe3RoaXMuZWx0PWEsdGhpcy5fcEluc3Q9Yix0aGlzLl9ldmVudHM9e30sdGhpcy53aWR0aD10aGlzLmVsdC5vZmZzZXRXaWR0aCx0aGlzLmhlaWdodD10aGlzLmVsdC5vZmZzZXRIZWlnaHR9LGcuRWxlbWVudC5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hP3RoaXMuZWx0LnBhcmVudE5vZGU6KFwic3RyaW5nXCI9PXR5cGVvZiBhPyhcIiNcIj09PWFbMF0mJihhPWEuc3Vic3RyaW5nKDEpKSxhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKTphIGluc3RhbmNlb2YgZy5FbGVtZW50JiYoYT1hLmVsdCksYS5hcHBlbmRDaGlsZCh0aGlzLmVsdCksdGhpcyl9LGcuRWxlbWVudC5wcm90b3R5cGUuaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/dGhpcy5lbHQuaWQ6KHRoaXMuZWx0LmlkPWEsdGhpcy53aWR0aD10aGlzLmVsdC5vZmZzZXRXaWR0aCx0aGlzLmhlaWdodD10aGlzLmVsdC5vZmZzZXRIZWlnaHQsdGhpcyl9LGcuRWxlbWVudC5wcm90b3R5cGUuY2xhc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/dGhpcy5lbHQuY2xhc3NOYW1lOih0aGlzLmVsdC5jbGFzc05hbWU9YSx0aGlzKX0sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZVByZXNzZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJtb3VzZWRvd25cIixmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMCksdGhpcy5fcEluc3QuX3NldE1vdXNlQnV0dG9uKGIpLGEoKX0sdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5kb3VibGVDbGlja2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiZGJsY2xpY2tcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VXaGVlbD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIndoZWVsXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlUmVsZWFzZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJtb3VzZXVwXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlQ2xpY2tlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcImNsaWNrXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlTW92ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJtb3VzZW1vdmVcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VPdmVyPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2VvdmVyXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmNoYW5nZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJjaGFuZ2VcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuaW5wdXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJpbnB1dFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZU91dD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNlb3V0XCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLnRvdWNoU3RhcnRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcInRvdWNoc3RhcnRcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUudG91Y2hNb3ZlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcInRvdWNobW92ZVwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS50b3VjaEVuZGVkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwidG91Y2hlbmRcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuZHJhZ092ZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJkcmFnb3ZlclwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5kcmFnTGVhdmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJkcmFnbGVhdmVcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuZHJvcD1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYil7dmFyIGM9bmV3IGcuRmlsZShiKTtyZXR1cm4gZnVuY3Rpb24oYil7Yy5kYXRhPWIudGFyZ2V0LnJlc3VsdCxhKGMpfX1yZXR1cm4gd2luZG93LkZpbGUmJndpbmRvdy5GaWxlUmVhZGVyJiZ3aW5kb3cuRmlsZUxpc3QmJndpbmRvdy5CbG9iPyhlKFwiZHJhZ292ZXJcIixmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpLGEucHJldmVudERlZmF1bHQoKX0sdGhpcyksZShcImRyYWdsZWF2ZVwiLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzKSx2b2lkIDAhPT1iJiZlKFwiZHJvcFwiLGIsdGhpcyksZShcImRyb3BcIixmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpLGEucHJldmVudERlZmF1bHQoKTtmb3IodmFyIGI9YS5kYXRhVHJhbnNmZXIuZmlsZXMsZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgZT1iW2RdLGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9YyhlKSxlLnR5cGUuaW5kZXhPZihcInRleHRcIik+LTE/Zi5yZWFkQXNUZXh0KGUpOmYucmVhZEFzRGF0YVVSTChlKX19LHRoaXMpKTpjb25zb2xlLmxvZyhcIlRoZSBGaWxlIEFQSXMgYXJlIG5vdCBmdWxseSBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLlwiKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLl9zZXRQcm9wZXJ0eT1mdW5jdGlvbihhLGIpe3RoaXNbYV09Yn0sYi5leHBvcnRzPWcuRWxlbWVudH0se1wiLi9tYWluXCI6MjR9XSwyNjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIiksZT1hKFwiLi9jb25zdGFudHNcIik7ZC5HcmFwaGljcz1mdW5jdGlvbihhLGIsYyxmKXt2YXIgZz1jfHxlLlAyRDt0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLChmLl91c2VyTm9kZXx8ZG9jdW1lbnQuYm9keSkuYXBwZW5kQ2hpbGQodGhpcy5jYW52YXMpLGQuRWxlbWVudC5jYWxsKHRoaXMsdGhpcy5jYW52YXMsZiwhMSk7Zm9yKHZhciBoIGluIGQucHJvdG90eXBlKXRoaXNbaF18fChcImZ1bmN0aW9uXCI9PXR5cGVvZiBkLnByb3RvdHlwZVtoXT90aGlzW2hdPWQucHJvdG90eXBlW2hdLmJpbmQodGhpcyk6dGhpc1toXT1kLnByb3RvdHlwZVtoXSk7cmV0dXJuIGQucHJvdG90eXBlLl9pbml0aWFsaXplSW5zdGFuY2VWYXJpYWJsZXMuYXBwbHkodGhpcyksdGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5fcGl4ZWxEZW5zaXR5PWYuX3BpeGVsRGVuc2l0eSxnPT09ZS5XRUJHTD90aGlzLl9yZW5kZXJlcj1uZXcgZC5SZW5kZXJlckdMKHRoaXMuY2FudmFzLHRoaXMsITEpOnRoaXMuX3JlbmRlcmVyPW5ldyBkLlJlbmRlcmVyMkQodGhpcy5jYW52YXMsdGhpcywhMSksZi5fZWxlbWVudHMucHVzaCh0aGlzKSx0aGlzLl9yZW5kZXJlci5yZXNpemUoYSxiKSx0aGlzLl9yZW5kZXJlci5fYXBwbHlEZWZhdWx0cygpLHRoaXN9LGQuR3JhcGhpY3MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5FbGVtZW50LnByb3RvdHlwZSksZC5HcmFwaGljcy5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5lbHQucGFyZW50Tm9kZSYmdGhpcy5lbHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVsdCk7dmFyIGE9dGhpcy5fcEluc3QuX2VsZW1lbnRzLmluZGV4T2YodGhpcyk7LTEhPT1hJiZ0aGlzLl9wSW5zdC5fZWxlbWVudHMuc3BsaWNlKGEsMSk7Zm9yKHZhciBiIGluIHRoaXMuX2V2ZW50cyl0aGlzLmVsdC5yZW1vdmVFdmVudExpc3RlbmVyKGIsdGhpcy5fZXZlbnRzW2JdKX0sYi5leHBvcnRzPWQuR3JhcGhpY3N9LHtcIi4vY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNH1dLDI3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhKXt2YXIgYj0wLGM9MDtpZihhLm9mZnNldFBhcmVudClkb3tiKz1hLm9mZnNldExlZnQsYys9YS5vZmZzZXRUb3B9d2hpbGUoYT1hLm9mZnNldFBhcmVudCk7ZWxzZSBiKz1hLm9mZnNldExlZnQsYys9YS5vZmZzZXRUb3A7cmV0dXJuW2IsY119dmFyIGU9YShcIi4vbWFpblwiKSxmPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtlLlJlbmRlcmVyPWZ1bmN0aW9uKGEsYixjKXtlLkVsZW1lbnQuY2FsbCh0aGlzLGEsYiksdGhpcy5jYW52YXM9YSxjPyh0aGlzLl9pc01haW5DYW52YXM9ITAsdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiX2N1ckVsZW1lbnRcIix0aGlzKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJjYW52YXNcIix0aGlzLmNhbnZhcyksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwid2lkdGhcIix0aGlzLndpZHRoKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJoZWlnaHRcIix0aGlzLmhlaWdodCkpOih0aGlzLmNhbnZhcy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLHRoaXMuX3N0eWxlcz1bXSksdGhpcy5fdGV4dFNpemU9MTIsdGhpcy5fdGV4dExlYWRpbmc9MTUsdGhpcy5fdGV4dEZvbnQ9XCJzYW5zLXNlcmlmXCIsdGhpcy5fdGV4dFN0eWxlPWYuTk9STUFMLHRoaXMuX3RleHRBc2NlbnQ9bnVsbCx0aGlzLl90ZXh0RGVzY2VudD1udWxsLHRoaXMuX3RleHRBbGlnbj1mLkxFRlQsdGhpcy5fdGV4dEJhc2VsaW5lPWYuQkFTRUxJTkUsdGhpcy5fcmVjdE1vZGU9Zi5DT1JORVIsdGhpcy5fZWxsaXBzZU1vZGU9Zi5DRU5URVIsdGhpcy5fY3VydmVUaWdodG5lc3M9MCx0aGlzLl9pbWFnZU1vZGU9Zi5DT1JORVIsdGhpcy5fdGludD1udWxsLHRoaXMuX2RvU3Ryb2tlPSEwLHRoaXMuX2RvRmlsbD0hMCx0aGlzLl9zdHJva2VTZXQ9ITEsdGhpcy5fZmlsbFNldD0hMX0sZS5SZW5kZXJlci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLkVsZW1lbnQucHJvdG90eXBlKSxlLlJlbmRlcmVyLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKCl7cmV0dXJue3Byb3BlcnRpZXM6e19kb1N0cm9rZTp0aGlzLl9kb1N0cm9rZSxfc3Ryb2tlU2V0OnRoaXMuX3N0cm9rZVNldCxfZG9GaWxsOnRoaXMuX2RvRmlsbCxfZmlsbFNldDp0aGlzLl9maWxsU2V0LF90aW50OnRoaXMuX3RpbnQsX2ltYWdlTW9kZTp0aGlzLl9pbWFnZU1vZGUsX3JlY3RNb2RlOnRoaXMuX3JlY3RNb2RlLF9lbGxpcHNlTW9kZTp0aGlzLl9lbGxpcHNlTW9kZSxfdGV4dEZvbnQ6dGhpcy5fdGV4dEZvbnQsX3RleHRMZWFkaW5nOnRoaXMuX3RleHRMZWFkaW5nLF90ZXh0U2l6ZTp0aGlzLl90ZXh0U2l6ZSxfdGV4dEFsaWduOnRoaXMuX3RleHRBbGlnbixfdGV4dEJhc2VsaW5lOnRoaXMuX3RleHRCYXNlbGluZSxfdGV4dFN0eWxlOnRoaXMuX3RleHRTdHlsZX19fSxlLlJlbmRlcmVyLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oYSl7YS5wcm9wZXJ0aWVzJiZPYmplY3QuYXNzaWduKHRoaXMsYS5wcm9wZXJ0aWVzKX0sZS5SZW5kZXJlci5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGEsYil7dGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5lbHQud2lkdGg9YSp0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LHRoaXMuZWx0LmhlaWdodD1iKnRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksdGhpcy5lbHQuc3R5bGUud2lkdGg9YStcInB4XCIsdGhpcy5lbHQuc3R5bGUuaGVpZ2h0PWIrXCJweFwiLHRoaXMuX2lzTWFpbkNhbnZhcyYmKHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIndpZHRoXCIsdGhpcy53aWR0aCksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiaGVpZ2h0XCIsdGhpcy5oZWlnaHQpKX0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dExlYWRpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGE/KHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRMZWFkaW5nXCIsYSksdGhpcy5fcEluc3QpOnRoaXMuX3RleHRMZWFkaW5nfSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0U2l6ZT1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYT8odGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dFNpemVcIixhKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0TGVhZGluZ1wiLGEqZi5fREVGQVVMVF9MRUFETVVMVCksdGhpcy5fYXBwbHlUZXh0UHJvcGVydGllcygpKTp0aGlzLl90ZXh0U2l6ZX0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dFN0eWxlPWZ1bmN0aW9uKGEpe3JldHVybiBhPyhhIT09Zi5OT1JNQUwmJmEhPT1mLklUQUxJQyYmYSE9PWYuQk9MRHx8dGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dFN0eWxlXCIsYSksdGhpcy5fYXBwbHlUZXh0UHJvcGVydGllcygpKTp0aGlzLl90ZXh0U3R5bGV9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRBc2NlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuX3RleHRBc2NlbnQmJnRoaXMuX3VwZGF0ZVRleHRNZXRyaWNzKCksdGhpcy5fdGV4dEFzY2VudH0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dERlc2NlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuX3RleHREZXNjZW50JiZ0aGlzLl91cGRhdGVUZXh0TWV0cmljcygpLHRoaXMuX3RleHREZXNjZW50fSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0QWxpZ249ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwIT09YT8odGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEFsaWduXCIsYSksdm9pZCAwIT09YiYmdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEJhc2VsaW5lXCIsYiksdGhpcy5fYXBwbHlUZXh0UHJvcGVydGllcygpKTp7aG9yaXpvbnRhbDp0aGlzLl90ZXh0QWxpZ24sdmVydGljYWw6dGhpcy5fdGV4dEJhc2VsaW5lfX0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dD1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBnLGgsaSxqLGssbCxtLG4sbyxwPXRoaXMuX3BJbnN0LHE9TnVtYmVyLk1BWF9WQUxVRTtpZigodGhpcy5fZG9GaWxsfHx0aGlzLl9kb1N0cm9rZSkmJnZvaWQgMCE9PWEpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBhJiYoYT1hLnRvU3RyaW5nKCkpLGE9YS5yZXBsYWNlKC8oXFx0KS9nLFwiICBcIiksZz1hLnNwbGl0KFwiXFxuXCIpLHZvaWQgMCE9PWQpe2ZvcihvPTAsaT0wO2k8Zy5sZW5ndGg7aSsrKWZvcihrPVwiXCIsbj1nW2ldLnNwbGl0KFwiIFwiKSxoPTA7aDxuLmxlbmd0aDtoKyspbD1rK25baF0rXCIgXCIsbT10aGlzLnRleHRXaWR0aChsKSxtPmQ/KGs9bltoXStcIiBcIixvKz1wLnRleHRMZWFkaW5nKCkpOms9bDtzd2l0Y2godGhpcy5fcmVjdE1vZGU9PT1mLkNFTlRFUiYmKGItPWQvMixjLT1lLzIpLHRoaXMuX3RleHRBbGlnbil7Y2FzZSBmLkNFTlRFUjpiKz1kLzI7YnJlYWs7Y2FzZSBmLlJJR0hUOmIrPWR9dmFyIHI9ITE7aWYodm9pZCAwIT09ZSl7c3dpdGNoKHRoaXMuX3RleHRCYXNlbGluZSl7Y2FzZSBmLkJPVFRPTTpjKz1lLW87YnJlYWs7Y2FzZSBmLkNFTlRFUjpjKz0oZS1vKS8yO2JyZWFrO2Nhc2UgZi5CQVNFTElORTpyPSEwLHRoaXMuX3RleHRCYXNlbGluZT1mLlRPUH1xPWMrZS1wLnRleHRBc2NlbnQoKX1mb3IoaT0wO2k8Zy5sZW5ndGg7aSsrKXtmb3Ioaz1cIlwiLG49Z1tpXS5zcGxpdChcIiBcIiksaD0wO2g8bi5sZW5ndGg7aCsrKWw9aytuW2hdK1wiIFwiLG09dGhpcy50ZXh0V2lkdGgobCksbT5kJiZrLmxlbmd0aD4wPyh0aGlzLl9yZW5kZXJUZXh0KHAsayxiLGMscSksaz1uW2hdK1wiIFwiLGMrPXAudGV4dExlYWRpbmcoKSk6az1sO3RoaXMuX3JlbmRlclRleHQocCxrLGIsYyxxKSxjKz1wLnRleHRMZWFkaW5nKCksciYmKHRoaXMuX3RleHRCYXNlbGluZT1mLkJBU0VMSU5FKX19ZWxzZXt2YXIgcz0wLHQ9cC50ZXh0QWxpZ24oKS52ZXJ0aWNhbDtmb3IodD09PWYuQ0VOVEVSP3M9KGcubGVuZ3RoLTEpKnAudGV4dExlYWRpbmcoKS8yOnQ9PT1mLkJPVFRPTSYmKHM9KGcubGVuZ3RoLTEpKnAudGV4dExlYWRpbmcoKSksaj0wO2o8Zy5sZW5ndGg7aisrKXRoaXMuX3JlbmRlclRleHQocCxnW2pdLGIsYy1zLHEpLGMrPXAudGV4dExlYWRpbmcoKX1yZXR1cm4gcH19LGUuUmVuZGVyZXIucHJvdG90eXBlLl9hcHBseURlZmF1bHRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUuUmVuZGVyZXIucHJvdG90eXBlLl9pc09wZW5UeXBlPWZ1bmN0aW9uKGEpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZihhPWF8fHRoaXMuX3RleHRGb250KSYmYS5mb250JiZhLmZvbnQuc3VwcG9ydGVkfSxlLlJlbmRlcmVyLnByb3RvdHlwZS5fdXBkYXRlVGV4dE1ldHJpY3M9ZnVuY3Rpb24oKXtpZih0aGlzLl9pc09wZW5UeXBlKCkpcmV0dXJuIHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRBc2NlbnRcIix0aGlzLl90ZXh0Rm9udC5fdGV4dEFzY2VudCgpKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0RGVzY2VudFwiLHRoaXMuX3RleHRGb250Ll90ZXh0RGVzY2VudCgpKSx0aGlzO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO2Euc3R5bGUuZm9udEZhbWlseT10aGlzLl90ZXh0Rm9udCxhLnN0eWxlLmZvbnRTaXplPXRoaXMuX3RleHRTaXplK1wicHhcIixhLmlubmVySFRNTD1cIkFCQ2pncXxcIjt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2Iuc3R5bGUuZGlzcGxheT1cImlubGluZS1ibG9ja1wiLGIuc3R5bGUud2lkdGg9XCIxcHhcIixiLnN0eWxlLmhlaWdodD1cIjBweFwiO3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7Yy5hcHBlbmRDaGlsZChhKSxjLmFwcGVuZENoaWxkKGIpLGMuc3R5bGUuaGVpZ2h0PVwiMHB4XCIsYy5zdHlsZS5vdmVyZmxvdz1cImhpZGRlblwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYyksYi5zdHlsZS52ZXJ0aWNhbEFsaWduPVwiYmFzZWxpbmVcIjt2YXIgZT1kKGIpLGY9ZChhKSxnPWVbMV0tZlsxXTtiLnN0eWxlLnZlcnRpY2FsQWxpZ249XCJib3R0b21cIixlPWQoYiksZj1kKGEpO3ZhciBoPWVbMV0tZlsxXSxpPWgtZztyZXR1cm4gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChjKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QXNjZW50XCIsZyksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dERlc2NlbnRcIixpKSx0aGlzfSxiLmV4cG9ydHM9ZS5SZW5kZXJlcn0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0fV0sMjg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpLGU9YShcIi4vY29uc3RhbnRzXCIpLGY9YShcIi4uL2ltYWdlL2ZpbHRlcnNcIik7YShcIi4vcDUuUmVuZGVyZXJcIik7dmFyIGc9XCJyZ2JhKDAsMCwwLDApXCI7ZC5SZW5kZXJlcjJEPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZC5SZW5kZXJlci5jYWxsKHRoaXMsYSxiLGMpLHRoaXMuZHJhd2luZ0NvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcImRyYXdpbmdDb250ZXh0XCIsdGhpcy5kcmF3aW5nQ29udGV4dCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQuUmVuZGVyZXIucHJvdG90eXBlKSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9hcHBseURlZmF1bHRzPWZ1bmN0aW9uKCl7dGhpcy5fY2FjaGVkRmlsbFN0eWxlPXRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlPXZvaWQgMCx0aGlzLl9zZXRGaWxsKGUuX0RFRkFVTFRfRklMTCksdGhpcy5fc2V0U3Ryb2tlKGUuX0RFRkFVTFRfU1RST0tFKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVDYXA9ZS5ST1VORCx0aGlzLmRyYXdpbmdDb250ZXh0LmZvbnQ9XCJub3JtYWwgMTJweCBzYW5zLXNlcmlmXCJ9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGEsYil7ZC5SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcyxhLGIpLHRoaXMuZHJhd2luZ0NvbnRleHQuc2NhbGUodGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSx0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5KX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5iYWNrZ3JvdW5kPWZ1bmN0aW9uKCl7aWYodGhpcy5kcmF3aW5nQ29udGV4dC5zYXZlKCksdGhpcy5yZXNldE1hdHJpeCgpLGFyZ3VtZW50c1swXWluc3RhbmNlb2YgZC5JbWFnZSl0aGlzLl9wSW5zdC5pbWFnZShhcmd1bWVudHNbMF0sMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpO2Vsc2V7dmFyIGE9dGhpcy5fZ2V0RmlsbCgpLGI9dGhpcy5fcEluc3QuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKSxjPWIudG9TdHJpbmcoKTt0aGlzLl9zZXRGaWxsKGMpLHRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFJlY3QoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuX3NldEZpbGwoYSl9dGhpcy5kcmF3aW5nQ29udGV4dC5yZXN0b3JlKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5kcmF3aW5nQ29udGV4dC5zYXZlKCksdGhpcy5yZXNldE1hdHJpeCgpLHRoaXMuZHJhd2luZ0NvbnRleHQuY2xlYXJSZWN0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRyYXdpbmdDb250ZXh0LnJlc3RvcmUoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX3BJbnN0LmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyk7dGhpcy5fc2V0RmlsbChhLnRvU3RyaW5nKCkpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnN0cm9rZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX3BJbnN0LmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyk7dGhpcy5fc2V0U3Ryb2tlKGEudG9TdHJpbmcoKSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oYSxiLGMsZSxmLGcsaCxpLGope3ZhciBrO3RyeXt0aGlzLl90aW50JiYoZC5NZWRpYUVsZW1lbnQmJmEgaW5zdGFuY2VvZiBkLk1lZGlhRWxlbWVudCYmYS5sb2FkUGl4ZWxzKCksYS5jYW52YXMmJihrPXRoaXMuX2dldFRpbnRlZEltYWdlQ2FudmFzKGEpKSksa3x8KGs9YS5jYW52YXN8fGEuZWx0KTt2YXIgbD0xO2Eud2lkdGgmJmEud2lkdGg+MCYmKGw9ay53aWR0aC9hLndpZHRoKSx0aGlzLmRyYXdpbmdDb250ZXh0LmRyYXdJbWFnZShrLGwqYixsKmMsbCplLGwqZixnLGgsaSxqKX1jYXRjaChhKXtpZihcIk5TX0VSUk9SX05PVF9BVkFJTEFCTEVcIiE9PWEubmFtZSl0aHJvdyBhfXRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fZ2V0VGludGVkSW1hZ2VDYW52YXM9ZnVuY3Rpb24oYSl7aWYoIWEuY2FudmFzKXJldHVybiBhO3ZhciBiPWYuX3RvUGl4ZWxzKGEuY2FudmFzKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7Yy53aWR0aD1hLmNhbnZhcy53aWR0aCxjLmhlaWdodD1hLmNhbnZhcy5oZWlnaHQ7Zm9yKHZhciBkPWMuZ2V0Q29udGV4dChcIjJkXCIpLGU9ZC5jcmVhdGVJbWFnZURhdGEoYS5jYW52YXMud2lkdGgsYS5jYW52YXMuaGVpZ2h0KSxnPWUuZGF0YSxoPTA7aDxiLmxlbmd0aDtoKz00KXt2YXIgaT1iW2hdLGo9YltoKzFdLGs9YltoKzJdLGw9YltoKzNdO2dbaF09aSp0aGlzLl90aW50WzBdLzI1NSxnW2grMV09aip0aGlzLl90aW50WzFdLzI1NSxnW2grMl09ayp0aGlzLl90aW50WzJdLzI1NSxnW2grM109bCp0aGlzLl90aW50WzNdLzI1NX1yZXR1cm4gZC5wdXRJbWFnZURhdGEoZSwwLDApLGN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYmxlbmRNb2RlPWZ1bmN0aW9uKGEpe3RoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWF9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYmxlbmQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbixiPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdLGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDAsYXJndW1lbnRzLmxlbmd0aC0xKTt0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1iLHRoaXMuX3BJbnN0P3RoaXMuX3BJbnN0LmNvcHkuYXBwbHkodGhpcy5fcEluc3QsYyk6dGhpcy5jb3B5LmFwcGx5KHRoaXMsYyksdGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGEsYixjLGUsZixnLGgsaSxqO2lmKDk9PT1hcmd1bWVudHMubGVuZ3RoKWE9YXJndW1lbnRzWzBdLGI9YXJndW1lbnRzWzFdLGM9YXJndW1lbnRzWzJdLGU9YXJndW1lbnRzWzNdLGY9YXJndW1lbnRzWzRdLGc9YXJndW1lbnRzWzVdLGg9YXJndW1lbnRzWzZdLGk9YXJndW1lbnRzWzddLGo9YXJndW1lbnRzWzhdO2Vsc2V7aWYoOCE9PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiU2lnbmF0dXJlIG5vdCBzdXBwb3J0ZWRcIik7YT10aGlzLl9wSW5zdCxiPWFyZ3VtZW50c1swXSxjPWFyZ3VtZW50c1sxXSxlPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXSxnPWFyZ3VtZW50c1s0XSxoPWFyZ3VtZW50c1s1XSxpPWFyZ3VtZW50c1s2XSxqPWFyZ3VtZW50c1s3XX1kLlJlbmRlcmVyMkQuX2NvcHlIZWxwZXIodGhpcyxhLGIsYyxlLGYsZyxoLGksaiksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQuX2NvcHlIZWxwZXI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGksail7Yi5sb2FkUGl4ZWxzKCk7dmFyIGs9Yi5jYW52YXMud2lkdGgvYi53aWR0aDthLmRyYXdpbmdDb250ZXh0LmRyYXdJbWFnZShiLmNhbnZhcyxrKmMsaypkLGsqZSxrKmYsZyxoLGksail9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEsYixjLGUpe2lmKHZvaWQgMD09PWMmJnZvaWQgMD09PWUmJih2b2lkIDA9PT1hJiZ2b2lkIDA9PT1iPyhhPWI9MCxjPXRoaXMud2lkdGgsZT10aGlzLmhlaWdodCk6Yz1lPTEpLGErYzwwfHxiK2U8MHx8YT49dGhpcy53aWR0aHx8Yj49dGhpcy5oZWlnaHQpcmV0dXJuWzAsMCwwLDI1NV07dmFyIGY9dGhpcy5fcEluc3R8fHRoaXMsZz1mLl9waXhlbERlbnNpdHk7YT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihiKSxjPU1hdGguZmxvb3IoYyksZT1NYXRoLmZsb29yKGUpO3ZhciBoPWEqZyxpPWIqZztpZigxIT09Y3x8MSE9PWV8fHRoaXMgaW5zdGFuY2VvZiBkLlJlbmRlcmVyR0wpe3ZhciBqPU1hdGgubWluKGMsZi53aWR0aCksaz1NYXRoLm1pbihlLGYuaGVpZ2h0KSxsPWoqZyxtPWsqZyxuPW5ldyBkLkltYWdlKGosayk7cmV0dXJuIG4uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKS5kcmF3SW1hZ2UodGhpcy5jYW52YXMsaCxpLGwsbSwwLDAsaixrKSxufXZhciBvLHA7cmV0dXJuIGYuX3BpeGVsc0RpcnR5PyhvPXRoaXMuZHJhd2luZ0NvbnRleHQuZ2V0SW1hZ2VEYXRhKGgsaSwxLDEpLmRhdGEscD0wKToobz1mLnBpeGVscyxwPTQqKGgraSp0aGlzLndpZHRoKmcpKSxbb1twKzBdLG9bcCsxXSxvW3ArMl0sb1twKzNdXX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5sb2FkUGl4ZWxzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcEluc3R8fHRoaXM7aWYoYS5fcGl4ZWxzRGlydHkpe2EuX3BpeGVsc0RpcnR5PSExO3ZhciBiPWEuX3BpeGVsRGVuc2l0eSxjPXRoaXMud2lkdGgqYixkPXRoaXMuaGVpZ2h0KmIsZT10aGlzLmRyYXdpbmdDb250ZXh0LmdldEltYWdlRGF0YSgwLDAsYyxkKTthLl9zZXRQcm9wZXJ0eShcImltYWdlRGF0YVwiLGUpLGEuX3NldFByb3BlcnR5KFwicGl4ZWxzXCIsZS5kYXRhKX19LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXthPU1hdGguZmxvb3IoYSksYj1NYXRoLmZsb29yKGIpO3ZhciBlPXRoaXMuX3BJbnN0fHx0aGlzO2lmKGMgaW5zdGFuY2VvZiBkLkltYWdlKXRoaXMuZHJhd2luZ0NvbnRleHQuc2F2ZSgpLHRoaXMuZHJhd2luZ0NvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx0aGlzLmRyYXdpbmdDb250ZXh0LnNjYWxlKGUuX3BpeGVsRGVuc2l0eSxlLl9waXhlbERlbnNpdHkpLHRoaXMuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGMuY2FudmFzLGEsYiksdGhpcy5kcmF3aW5nQ29udGV4dC5yZXN0b3JlKCksZS5fcGl4ZWxzRGlydHk9ITA7ZWxzZXt2YXIgZj0wLGc9MCxoPTAsaT0wLGo9NCooYiplLl9waXhlbERlbnNpdHkqKHRoaXMud2lkdGgqZS5fcGl4ZWxEZW5zaXR5KSthKmUuX3BpeGVsRGVuc2l0eSk7aWYoZS5pbWFnZURhdGEmJiFlLl9waXhlbHNEaXJ0eXx8ZS5sb2FkUGl4ZWxzLmNhbGwoZSksXCJudW1iZXJcIj09dHlwZW9mIGMpajxlLnBpeGVscy5sZW5ndGgmJihmPWMsZz1jLGg9YyxpPTI1NSk7ZWxzZSBpZihjIGluc3RhbmNlb2YgQXJyYXkpe2lmKGMubGVuZ3RoPDQpdGhyb3cgbmV3IEVycm9yKFwicGl4ZWwgYXJyYXkgbXVzdCBiZSBvZiB0aGUgZm9ybSBbUiwgRywgQiwgQV1cIik7ajxlLnBpeGVscy5sZW5ndGgmJihmPWNbMF0sZz1jWzFdLGg9Y1syXSxpPWNbM10pfWVsc2UgYyBpbnN0YW5jZW9mIGQuQ29sb3ImJmo8ZS5waXhlbHMubGVuZ3RoJiYoZj1jLmxldmVsc1swXSxnPWMubGV2ZWxzWzFdLGg9Yy5sZXZlbHNbMl0saT1jLmxldmVsc1szXSk7Zm9yKHZhciBrPTA7azxlLl9waXhlbERlbnNpdHk7aysrKWZvcih2YXIgbD0wO2w8ZS5fcGl4ZWxEZW5zaXR5O2wrKylqPTQqKChiKmUuX3BpeGVsRGVuc2l0eStsKSp0aGlzLndpZHRoKmUuX3BpeGVsRGVuc2l0eSsoYSplLl9waXhlbERlbnNpdHkraykpLGUucGl4ZWxzW2pdPWYsZS5waXhlbHNbaisxXT1nLGUucGl4ZWxzW2orMl09aCxlLnBpeGVsc1tqKzNdPWl9fSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnVwZGF0ZVBpeGVscz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLl9wSW5zdHx8dGhpcyxmPWUuX3BpeGVsRGVuc2l0eTt2b2lkIDA9PT1hJiZ2b2lkIDA9PT1iJiZ2b2lkIDA9PT1jJiZ2b2lkIDA9PT1kJiYoYT0wLGI9MCxjPXRoaXMud2lkdGgsZD10aGlzLmhlaWdodCksYyo9ZixkKj1mLHRoaXMuZHJhd2luZ0NvbnRleHQucHV0SW1hZ2VEYXRhKGUuaW1hZ2VEYXRhLGEsYiwwLDAsYyxkKSwwPT09YSYmMD09PWImJmM9PT10aGlzLndpZHRoJiZkPT09dGhpcy5oZWlnaHR8fChlLl9waXhlbHNEaXJ0eT0hMCl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2FjdXRlQXJjVG9CZXppZXI9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLzIsZD1NYXRoLmNvcyhjKSxlPU1hdGguc2luKGMpLGY9MS9NYXRoLnRhbihjKSxnPWErYyxoPU1hdGguY29zKGcpLGk9TWF0aC5zaW4oZyksaj0oNC1kKS8zLGs9ZSsoZC1qKSpmO3JldHVybntheDpNYXRoLmNvcyhhKSxheTpNYXRoLnNpbihhKSxieDpqKmgrayppLGJ5OmoqaS1rKmgsY3g6aipoLWsqaSxjeTpqKmkraypoLGR4Ok1hdGguY29zKGErYiksZHk6TWF0aC5zaW4oYStiKX19LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYXJjPWZ1bmN0aW9uKGEsYixjLGQsZixnLGgpe3ZhciBpPXRoaXMuZHJhd2luZ0NvbnRleHQsaj1jLzIsaz1kLzIsbD0xZS01LG09MCxuPVtdO2ZvcihhKz1qLGIrPWs7Zy1mPmw7KW09TWF0aC5taW4oZy1mLGUuSEFMRl9QSSksbi5wdXNoKHRoaXMuX2FjdXRlQXJjVG9CZXppZXIoZixtKSksZis9bTtyZXR1cm4gdGhpcy5fZG9GaWxsJiYoaS5iZWdpblBhdGgoKSxuLmZvckVhY2goZnVuY3Rpb24oYyxkKXswPT09ZCYmaS5tb3ZlVG8oYStjLmF4KmosYitjLmF5KmspLGkuYmV6aWVyQ3VydmVUbyhhK2MuYngqaixiK2MuYnkqayxhK2MuY3gqaixiK2MuY3kqayxhK2MuZHgqaixiK2MuZHkqayl9KSxoIT09ZS5QSUUmJm51bGwhPWh8fGkubGluZVRvKGEsYiksaS5jbG9zZVBhdGgoKSxpLmZpbGwoKSksdGhpcy5fZG9TdHJva2UmJihpLmJlZ2luUGF0aCgpLG4uZm9yRWFjaChmdW5jdGlvbihjLGQpezA9PT1kJiZpLm1vdmVUbyhhK2MuYXgqaixiK2MuYXkqayksaS5iZXppZXJDdXJ2ZVRvKGErYy5ieCpqLGIrYy5ieSprLGErYy5jeCpqLGIrYy5jeSprLGErYy5keCpqLGIrYy5keSprKX0pLGg9PT1lLlBJRT8oaS5saW5lVG8oYSxiKSxpLmNsb3NlUGF0aCgpKTpoPT09ZS5DSE9SRCYmaS5jbG9zZVBhdGgoKSxpLnN0cm9rZSgpKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmVsbGlwc2U9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kcmF3aW5nQ29udGV4dCxjPXRoaXMuX2RvRmlsbCxkPXRoaXMuX2RvU3Ryb2tlLGU9YVswXSxmPWFbMV0saD1hWzJdLGk9YVszXTtpZihjJiYhZCl7aWYodGhpcy5fZ2V0RmlsbCgpPT09ZylyZXR1cm4gdGhpc31lbHNlIGlmKCFjJiZkJiZ0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7dmFyIGo9LjU1MjI4NDc0OTgsaz1oLzIqaixsPWkvMipqLG09ZStoLG49ZitpLG89ZStoLzIscD1mK2kvMjtiLmJlZ2luUGF0aCgpLGIubW92ZVRvKGUscCksYi5iZXppZXJDdXJ2ZVRvKGUscC1sLG8tayxmLG8sZiksYi5iZXppZXJDdXJ2ZVRvKG8rayxmLG0scC1sLG0scCksYi5iZXppZXJDdXJ2ZVRvKG0scCtsLG8rayxuLG8sbiksYi5iZXppZXJDdXJ2ZVRvKG8tayxuLGUscCtsLGUscCksYi5jbG9zZVBhdGgoKSxjJiZiLmZpbGwoKSxkJiZiLnN0cm9rZSgpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmxpbmU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5kcmF3aW5nQ29udGV4dDtyZXR1cm4gdGhpcy5fZG9TdHJva2U/dGhpcy5fZ2V0U3Ryb2tlKCk9PT1nP3RoaXM6KGUubGluZVdpZHRoJTI9PTEmJmUudHJhbnNsYXRlKC41LC41KSxlLmJlZ2luUGF0aCgpLGUubW92ZVRvKGEsYiksZS5saW5lVG8oYyxkKSxlLnN0cm9rZSgpLGUubGluZVdpZHRoJTI9PTEmJmUudHJhbnNsYXRlKC0uNSwtLjUpLHRoaXMpOnRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmRyYXdpbmdDb250ZXh0O2lmKCF0aGlzLl9kb1N0cm9rZSlyZXR1cm4gdGhpcztpZih0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7dmFyIGQ9dGhpcy5fZ2V0U3Ryb2tlKCksZj10aGlzLl9nZXRGaWxsKCk7YT1NYXRoLnJvdW5kKGEpLGI9TWF0aC5yb3VuZChiKSx0aGlzLl9zZXRGaWxsKGQpLGMubGluZVdpZHRoPjE/KGMuYmVnaW5QYXRoKCksYy5hcmMoYSxiLGMubGluZVdpZHRoLzIsMCxlLlRXT19QSSwhMSksYy5maWxsKCkpOmMuZmlsbFJlY3QoYSxiLDEsMSksdGhpcy5fc2V0RmlsbChmKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5xdWFkPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGgsaSl7dmFyIGo9dGhpcy5kcmF3aW5nQ29udGV4dCxrPXRoaXMuX2RvRmlsbCxsPXRoaXMuX2RvU3Ryb2tlO2lmKGsmJiFsKXtpZih0aGlzLl9nZXRGaWxsKCk9PT1nKXJldHVybiB0aGlzfWVsc2UgaWYoIWsmJmwmJnRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpcztyZXR1cm4gai5iZWdpblBhdGgoKSxqLm1vdmVUbyhhLGIpLGoubGluZVRvKGMsZCksai5saW5lVG8oZSxmKSxqLmxpbmVUbyhoLGkpLGouY2xvc2VQYXRoKCksayYmai5maWxsKCksbCYmai5zdHJva2UoKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnJlY3Q9ZnVuY3Rpb24oYSl7dmFyIGI9YVswXSxjPWFbMV0sZD1hWzJdLGU9YVszXSxmPWFbNF0saD1hWzVdLGk9YVs2XSxqPWFbN10saz10aGlzLmRyYXdpbmdDb250ZXh0LGw9dGhpcy5fZG9GaWxsLG09dGhpcy5fZG9TdHJva2U7aWYobCYmIW0pe2lmKHRoaXMuX2dldEZpbGwoKT09PWcpcmV0dXJuIHRoaXN9ZWxzZSBpZighbCYmbSYmdGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO2lmKHRoaXMuX2RvU3Ryb2tlJiZrLmxpbmVXaWR0aCUyPT0xJiZrLnRyYW5zbGF0ZSguNSwuNSksay5iZWdpblBhdGgoKSx2b2lkIDA9PT1mKWsucmVjdChiLGMsZCxlKTtlbHNle3ZvaWQgMD09PWgmJihoPWYpLHZvaWQgMD09PWkmJihpPWgpLHZvaWQgMD09PWomJihqPWkpO3ZhciBuPWQvMixvPWUvMjtkPDIqZiYmKGY9biksZTwyKmYmJihmPW8pLGQ8MipoJiYoaD1uKSxlPDIqaCYmKGg9byksZDwyKmkmJihpPW4pLGU8MippJiYoaT1vKSxkPDIqaiYmKGo9biksZTwyKmomJihqPW8pLGsuYmVnaW5QYXRoKCksay5tb3ZlVG8oYitmLGMpLGsuYXJjVG8oYitkLGMsYitkLGMrZSxoKSxrLmFyY1RvKGIrZCxjK2UsYixjK2UsaSksay5hcmNUbyhiLGMrZSxiLGMsaiksay5hcmNUbyhiLGMsYitkLGMsZiksay5jbG9zZVBhdGgoKX1yZXR1cm4gdGhpcy5fZG9GaWxsJiZrLmZpbGwoKSx0aGlzLl9kb1N0cm9rZSYmay5zdHJva2UoKSx0aGlzLl9kb1N0cm9rZSYmay5saW5lV2lkdGglMj09MSYmay50cmFuc2xhdGUoLS41LC0uNSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS50cmlhbmdsZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmRyYXdpbmdDb250ZXh0LGM9dGhpcy5fZG9GaWxsLGQ9dGhpcy5fZG9TdHJva2UsZT1hWzBdLGY9YVsxXSxoPWFbMl0saT1hWzNdLGo9YVs0XSxrPWFbNV07aWYoYyYmIWQpe2lmKHRoaXMuX2dldEZpbGwoKT09PWcpcmV0dXJuIHRoaXN9ZWxzZSBpZighYyYmZCYmdGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO2IuYmVnaW5QYXRoKCksYi5tb3ZlVG8oZSxmKSxiLmxpbmVUbyhoLGkpLGIubGluZVRvKGosayksYi5jbG9zZVBhdGgoKSxjJiZiLmZpbGwoKSxkJiZiLnN0cm9rZSgpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmVuZFNoYXBlPWZ1bmN0aW9uKGEsYixjLGQsZixnLGgpe2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gdGhpcztpZighdGhpcy5fZG9TdHJva2UmJiF0aGlzLl9kb0ZpbGwpcmV0dXJuIHRoaXM7dmFyIGksaj1hPT09ZS5DTE9TRTtqJiYhZyYmYi5wdXNoKGJbMF0pO3ZhciBrLGwsbT1iLmxlbmd0aDtpZighY3x8aCE9PWUuUE9MWUdPTiYmbnVsbCE9PWgpaWYoIWR8fGghPT1lLlBPTFlHT04mJm51bGwhPT1oKWlmKCFmfHxoIT09ZS5QT0xZR09OJiZudWxsIT09aClpZihoPT09ZS5QT0lOVFMpZm9yKGs9MDtrPG07aysrKWk9YltrXSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGlbNl0pLHRoaXMuX3BJbnN0LnBvaW50KGlbMF0saVsxXSk7ZWxzZSBpZihoPT09ZS5MSU5FUylmb3Ioaz0wO2srMTxtO2srPTIpaT1iW2tdLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzFdWzZdKSx0aGlzLl9wSW5zdC5saW5lKGlbMF0saVsxXSxiW2srMV1bMF0sYltrKzFdWzFdKTtlbHNlIGlmKGg9PT1lLlRSSUFOR0xFUylmb3Ioaz0wO2srMjxtO2srPTMpaT1iW2tdLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oaVswXSxpWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srMV1bMF0sYltrKzFdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srMl1bMF0sYltrKzJdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2RvRmlsbCYmKHRoaXMuX3BJbnN0LmZpbGwoYltrKzJdWzVdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGwoKSksdGhpcy5fZG9TdHJva2UmJih0aGlzLl9wSW5zdC5zdHJva2UoYltrKzJdWzZdKSx0aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZSgpKTtlbHNlIGlmKGg9PT1lLlRSSUFOR0xFX1NUUklQKWZvcihrPTA7aysxPG07aysrKWk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJbaysxXVswXSxiW2srMV1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSksdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srMV1bNl0pLFxudGhpcy5fZG9GaWxsJiZ0aGlzLl9wSW5zdC5maWxsKGJbaysxXVs1XSksaysyPG0mJih0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srMl1bMF0sYltrKzJdWzFdKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbaysyXVs2XSksdGhpcy5fZG9GaWxsJiZ0aGlzLl9wSW5zdC5maWxsKGJbaysyXVs1XSkpLHRoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCk7ZWxzZSBpZihoPT09ZS5UUklBTkdMRV9GQU4pe2lmKG0+Mil7Zm9yKHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksaz0yO2s8bTtrKyspaT1iW2tdLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJbMF1bMF0sYlswXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrLTFdWzBdLGJbay0xXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiWzBdWzBdLGJbMF1bMV0pLGs8bS0xJiYodGhpcy5fZG9GaWxsJiZpWzVdIT09YltrKzFdWzVdfHx0aGlzLl9kb1N0cm9rZSYmaVs2XSE9PWJbaysxXVs2XSkmJih0aGlzLl9kb0ZpbGwmJih0aGlzLl9wSW5zdC5maWxsKGlbNV0pLHRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbCgpLHRoaXMuX3BJbnN0LmZpbGwoYltrKzFdWzVdKSksdGhpcy5fZG9TdHJva2UmJih0aGlzLl9wSW5zdC5zdHJva2UoaVs2XSksdGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2UoKSx0aGlzLl9wSW5zdC5zdHJva2UoYltrKzFdWzZdKSksdGhpcy5kcmF3aW5nQ29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpKTt0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfX1lbHNlIGlmKGg9PT1lLlFVQURTKWZvcihrPTA7ayszPG07ays9NCl7Zm9yKGk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGlbMF0saVsxXSksbD0xO2w8NDtsKyspdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrK2xdWzBdLGJbaytsXVsxXSk7dGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSx0aGlzLl9kb0ZpbGwmJnRoaXMuX3BJbnN0LmZpbGwoYltrKzNdWzVdKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbayszXVs2XSksdGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNlIGlmKGg9PT1lLlFVQURfU1RSSVApe2lmKG0+Mylmb3Ioaz0wO2srMTxtO2srPTIpaT1iW2tdLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksayszPG0/KHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJbaysyXVswXSxiW2srMl1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzFdWzBdLGJbaysxXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzNdWzBdLGJbayszXVsxXSksdGhpcy5fZG9GaWxsJiZ0aGlzLl9wSW5zdC5maWxsKGJbayszXVs1XSksdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srM11bNl0pKToodGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oaVswXSxpWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srMV1bMF0sYltrKzFdWzFdKSksdGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNle2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJbMF1bMF0sYlswXVsxXSksaz0xO2s8bTtrKyspaT1iW2tdLGkuaXNWZXJ0JiYoaS5tb3ZlVG8/dGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oaVswXSxpWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pKTt0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2V7Zm9yKHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksaz0wO2s8bTtrKyspYltrXS5pc1ZlcnQ/YltrXS5tb3ZlVG8/dGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oWzBdLGJba11bMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJba11bMF0sYltrXVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKGJba11bMF0sYltrXVsxXSxiW2tdWzJdLGJba11bM10pO3RoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZXtmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSxrPTA7azxtO2srKyliW2tdLmlzVmVydD9iW2tdLm1vdmVUbz90aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiW2tdWzBdLGJba11bMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJba11bMF0sYltrXVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5iZXppZXJDdXJ2ZVRvKGJba11bMF0sYltrXVsxXSxiW2tdWzJdLGJba11bM10sYltrXVs0XSxiW2tdWzVdKTt0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2UgaWYobT4zKXt2YXIgbj1bXSxvPTEtdGhpcy5fY3VydmVUaWdodG5lc3M7Zm9yKHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYlsxXVswXSxiWzFdWzFdKSxrPTE7aysyPG07aysrKWk9YltrXSxuWzBdPVtpWzBdLGlbMV1dLG5bMV09W2lbMF0rKG8qYltrKzFdWzBdLW8qYltrLTFdWzBdKS82LGlbMV0rKG8qYltrKzFdWzFdLW8qYltrLTFdWzFdKS82XSxuWzJdPVtiW2srMV1bMF0rKG8qYltrXVswXS1vKmJbaysyXVswXSkvNixiW2srMV1bMV0rKG8qYltrXVsxXS1vKmJbaysyXVsxXSkvNl0sblszXT1bYltrKzFdWzBdLGJbaysxXVsxXV0sdGhpcy5kcmF3aW5nQ29udGV4dC5iZXppZXJDdXJ2ZVRvKG5bMV1bMF0sblsxXVsxXSxuWzJdWzBdLG5bMl1bMV0sblszXVswXSxuWzNdWzFdKTtqJiZ0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srMV1bMF0sYltrKzFdWzFdKSx0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfXJldHVybiBjPSExLGQ9ITEsZj0hMSxnPSExLGomJmIucG9wKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUubm9TbW9vdGg9ZnVuY3Rpb24oKXtyZXR1cm5cImltYWdlU21vb3RoaW5nRW5hYmxlZFwiaW4gdGhpcy5kcmF3aW5nQ29udGV4dCYmKHRoaXMuZHJhd2luZ0NvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSExKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNtb290aD1mdW5jdGlvbigpe3JldHVyblwiaW1hZ2VTbW9vdGhpbmdFbmFibGVkXCJpbiB0aGlzLmRyYXdpbmdDb250ZXh0JiYodGhpcy5kcmF3aW5nQ29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITApLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc3Ryb2tlQ2FwPWZ1bmN0aW9uKGEpe3JldHVybiBhIT09ZS5ST1VORCYmYSE9PWUuU1FVQVJFJiZhIT09ZS5QUk9KRUNUfHwodGhpcy5kcmF3aW5nQ29udGV4dC5saW5lQ2FwPWEpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc3Ryb2tlSm9pbj1mdW5jdGlvbihhKXtyZXR1cm4gYSE9PWUuUk9VTkQmJmEhPT1lLkJFVkVMJiZhIT09ZS5NSVRFUnx8KHRoaXMuZHJhd2luZ0NvbnRleHQubGluZUpvaW49YSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zdHJva2VXZWlnaHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVdpZHRoPXZvaWQgMD09PWF8fDA9PT1hPzFlLTQ6YSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9nZXRGaWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhY2hlZEZpbGxTdHlsZXx8KHRoaXMuX2NhY2hlZEZpbGxTdHlsZT10aGlzLmRyYXdpbmdDb250ZXh0LmZpbGxTdHlsZSksdGhpcy5fY2FjaGVkRmlsbFN0eWxlfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9zZXRGaWxsPWZ1bmN0aW9uKGEpe2EhPT10aGlzLl9jYWNoZWRGaWxsU3R5bGUmJih0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGxTdHlsZT1hLHRoaXMuX2NhY2hlZEZpbGxTdHlsZT1hKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fZ2V0U3Ryb2tlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlfHwodGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGU9dGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2VTdHlsZSksdGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGV9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX3NldFN0cm9rZT1mdW5jdGlvbihhKXthIT09dGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGUmJih0aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZVN0eWxlPWEsdGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGU9YSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYmV6aWVyPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCl7cmV0dXJuIHRoaXMuX3BJbnN0LmJlZ2luU2hhcGUoKSx0aGlzLl9wSW5zdC52ZXJ0ZXgoYSxiKSx0aGlzLl9wSW5zdC5iZXppZXJWZXJ0ZXgoYyxkLGUsZixnLGgpLHRoaXMuX3BJbnN0LmVuZFNoYXBlKCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3JldHVybiB0aGlzLl9wSW5zdC5iZWdpblNoYXBlKCksdGhpcy5fcEluc3QuY3VydmVWZXJ0ZXgoYSxiKSx0aGlzLl9wSW5zdC5jdXJ2ZVZlcnRleChjLGQpLHRoaXMuX3BJbnN0LmN1cnZlVmVydGV4KGUsZiksdGhpcy5fcEluc3QuY3VydmVWZXJ0ZXgoZyxoKSx0aGlzLl9wSW5zdC5lbmRTaGFwZSgpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2RvRmlsbFN0cm9rZUNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5fZG9GaWxsJiZ0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGwoKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2UoKSx0aGlzLmRyYXdpbmdDb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5kcmF3aW5nQ29udGV4dC50cmFuc2Zvcm0oYSxiLGMsZCxlLGYpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnJlc2V0TWF0cml4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx0aGlzLmRyYXdpbmdDb250ZXh0LnNjYWxlKHRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksdGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24oYSl7dGhpcy5kcmF3aW5nQ29udGV4dC5yb3RhdGUoYSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC5zY2FsZShhLGIpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc2hlYXJYPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnRyYW5zZm9ybSgxLDAsTWF0aC50YW4oYSksMSwwLDApLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc2hlYXJZPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnRyYW5zZm9ybSgxLE1hdGgudGFuKGEpLDAsMSwwLDApLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3RvciYmKGI9YS55LGE9YS54KSx0aGlzLmRyYXdpbmdDb250ZXh0LnRyYW5zbGF0ZShhLGIpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudGV4dD1mdW5jdGlvbihhLGIsYyxmLGcpe3ZhciBoO3ZvaWQgMCE9PWYmJnZvaWQgMCE9PWcmJnRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPT09ZS5CQVNFTElORSYmKGg9ITAsdGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QmFzZWxpbmU9ZS5UT1ApO3ZhciBpPWQuUmVuZGVyZXIucHJvdG90eXBlLnRleHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBoJiYodGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QmFzZWxpbmU9ZS5CQVNFTElORSksaX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fcmVuZGVyVGV4dD1mdW5jdGlvbihhLGIsYyxkLGYpe2lmKCEoZD49ZikpcmV0dXJuIGEucHVzaCgpLHRoaXMuX2lzT3BlblR5cGUoKT90aGlzLl90ZXh0Rm9udC5fcmVuZGVyUGF0aChiLGMsZCx7cmVuZGVyZXI6dGhpc30pOih0aGlzLl9kb1N0cm9rZSYmdGhpcy5fc3Ryb2tlU2V0JiZ0aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZVRleHQoYixjLGQpLHRoaXMuX2RvRmlsbCYmKHRoaXMuX2ZpbGxTZXR8fHRoaXMuX3NldEZpbGwoZS5fREVGQVVMVF9URVhUX0ZJTEwpLHRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFRleHQoYixjLGQpKSksYS5wb3AoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsYX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS50ZXh0V2lkdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2lzT3BlblR5cGUoKT90aGlzLl90ZXh0Rm9udC5fdGV4dFdpZHRoKGEsdGhpcy5fdGV4dFNpemUpOnRoaXMuZHJhd2luZ0NvbnRleHQubWVhc3VyZVRleHQoYSkud2lkdGh9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2FwcGx5VGV4dFByb3BlcnRpZXM9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuX3BJbnN0O3JldHVybiB0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QXNjZW50XCIsbnVsbCksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dERlc2NlbnRcIixudWxsKSxhPXRoaXMuX3RleHRGb250LHRoaXMuX2lzT3BlblR5cGUoKSYmKGE9dGhpcy5fdGV4dEZvbnQuZm9udC5mYW1pbHlOYW1lLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRTdHlsZVwiLHRoaXMuX3RleHRGb250LmZvbnQuc3R5bGVOYW1lKSksdGhpcy5kcmF3aW5nQ29udGV4dC5mb250PSh0aGlzLl90ZXh0U3R5bGV8fFwibm9ybWFsXCIpK1wiIFwiKyh0aGlzLl90ZXh0U2l6ZXx8MTIpK1wicHggXCIrKGF8fFwic2Fucy1zZXJpZlwiKSx0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRBbGlnbj10aGlzLl90ZXh0QWxpZ24sdGhpcy5fdGV4dEJhc2VsaW5lPT09ZS5DRU5URVI/dGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QmFzZWxpbmU9ZS5fQ1RYX01JRERMRTp0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT10aGlzLl90ZXh0QmFzZWxpbmUsYn0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQuc2F2ZSgpLGQuUmVuZGVyZXIucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcyl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKGEpe3RoaXMuZHJhd2luZ0NvbnRleHQucmVzdG9yZSgpLHRoaXMuX2NhY2hlZEZpbGxTdHlsZT10aGlzLmRyYXdpbmdDb250ZXh0LmZpbGxTdHlsZSx0aGlzLl9jYWNoZWRTdHJva2VTdHlsZT10aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZVN0eWxlLGQuUmVuZGVyZXIucHJvdG90eXBlLnBvcC5jYWxsKHRoaXMsYSl9LGIuZXhwb3J0cz1kLlJlbmRlcmVyMkR9LHtcIi4uL2ltYWdlL2ZpbHRlcnNcIjo0MixcIi4vY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNCxcIi4vcDUuUmVuZGVyZXJcIjoyN31dLDI5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKSxlPWEoXCIuL2NvbnN0YW50c1wiKTthKFwiLi9wNS5HcmFwaGljc1wiKSxhKFwiLi9wNS5SZW5kZXJlcjJEXCIpLGEoXCIuLi93ZWJnbC9wNS5SZW5kZXJlckdMXCIpO3ZhciBmPVwiZGVmYXVsdENhbnZhczBcIixnPVwicDVDYW52YXNcIjtkLnByb3RvdHlwZS5jcmVhdGVDYW52YXM9ZnVuY3Rpb24oYSxiLGMpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZUNhbnZhc1wiLGFyZ3VtZW50cyk7dmFyIGgsaT1jfHxlLlAyRDtpZihpPT09ZS5XRUJHTCl7aWYoaD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChmKSl7aC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGgpO3ZhciBqPXRoaXMuX3JlbmRlcmVyO3RoaXMuX2VsZW1lbnRzPXRoaXMuX2VsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYSE9PWp9KX1oPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksaC5pZD1mLGguY2xhc3NMaXN0LmFkZChnKX1lbHNlIGlmKHRoaXMuX2RlZmF1bHRHcmFwaGljc0NyZWF0ZWQpaD10aGlzLmNhbnZhcztlbHNle2g9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtmb3IodmFyIGs9MDtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlZmF1bHRDYW52YXNcIitrKTspaysrO2Y9XCJkZWZhdWx0Q2FudmFzXCIrayxoLmlkPWYsaC5jbGFzc0xpc3QuYWRkKGcpfXJldHVybiB0aGlzLl9zZXR1cERvbmV8fChoLmRhdGFzZXQuaGlkZGVuPSEwLGguc3R5bGUudmlzaWJpbGl0eT1cImhpZGRlblwiKSx0aGlzLl91c2VyTm9kZT90aGlzLl91c2VyTm9kZS5hcHBlbmRDaGlsZChoKTpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGgpLGk9PT1lLldFQkdMPyh0aGlzLl9zZXRQcm9wZXJ0eShcIl9yZW5kZXJlclwiLG5ldyBkLlJlbmRlcmVyR0woaCx0aGlzLCEwKSksdGhpcy5fZWxlbWVudHMucHVzaCh0aGlzLl9yZW5kZXJlcikpOnRoaXMuX2RlZmF1bHRHcmFwaGljc0NyZWF0ZWR8fCh0aGlzLl9zZXRQcm9wZXJ0eShcIl9yZW5kZXJlclwiLG5ldyBkLlJlbmRlcmVyMkQoaCx0aGlzLCEwKSksdGhpcy5fZGVmYXVsdEdyYXBoaWNzQ3JlYXRlZD0hMCx0aGlzLl9lbGVtZW50cy5wdXNoKHRoaXMuX3JlbmRlcmVyKSksdGhpcy5fcmVuZGVyZXIucmVzaXplKGEsYiksdGhpcy5fcmVuZGVyZXIuX2FwcGx5RGVmYXVsdHMoKSx0aGlzLl9yZW5kZXJlcn0sZC5wcm90b3R5cGUucmVzaXplQ2FudmFzPWZ1bmN0aW9uKGEsYixjKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyZXNpemVDYW52YXNcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyKXt2YXIgZT17fTtmb3IodmFyIGYgaW4gdGhpcy5kcmF3aW5nQ29udGV4dCl7dmFyIGc9dGhpcy5kcmF3aW5nQ29udGV4dFtmXTtcIm9iamVjdFwiIT10eXBlb2YgZyYmXCJmdW5jdGlvblwiIT10eXBlb2YgZyYmKGVbZl09Zyl9dGhpcy5fcmVuZGVyZXIucmVzaXplKGEsYiksdGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWI7Zm9yKHZhciBoIGluIGUpdHJ5e3RoaXMuZHJhd2luZ0NvbnRleHRbaF09ZVtoXX1jYXRjaChhKXt9Y3x8dGhpcy5yZWRyYXcoKX19LGQucHJvdG90eXBlLm5vQ2FudmFzPWZ1bmN0aW9uKCl7dGhpcy5jYW52YXMmJnRoaXMuY2FudmFzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jYW52YXMpfSxkLnByb3RvdHlwZS5jcmVhdGVHcmFwaGljcz1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZUdyYXBoaWNzXCIsYXJndW1lbnRzKSxuZXcgZC5HcmFwaGljcyhhLGIsYyx0aGlzKX0sZC5wcm90b3R5cGUuYmxlbmRNb2RlPWZ1bmN0aW9uKGEpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJsZW5kTW9kZVwiLGFyZ3VtZW50cyksYSE9PWUuQkxFTkQmJmEhPT1lLkRBUktFU1QmJmEhPT1lLkxJR0hURVNUJiZhIT09ZS5ESUZGRVJFTkNFJiZhIT09ZS5NVUxUSVBMWSYmYSE9PWUuRVhDTFVTSU9OJiZhIT09ZS5TQ1JFRU4mJmEhPT1lLlJFUExBQ0UmJmEhPT1lLk9WRVJMQVkmJmEhPT1lLkhBUkRfTElHSFQmJmEhPT1lLlNPRlRfTElHSFQmJmEhPT1lLkRPREdFJiZhIT09ZS5CVVJOJiZhIT09ZS5BREQmJmEhPT1lLk5PUk1BTCl0aHJvdyBuZXcgRXJyb3IoXCJNb2RlIFwiK2ErXCIgbm90IHJlY29nbml6ZWQuXCIpO3RoaXMuX3JlbmRlcmVyLmJsZW5kTW9kZShhKX0sYi5leHBvcnRzPWR9LHtcIi4uL3dlYmdsL3A1LlJlbmRlcmVyR0xcIjo3NCxcIi4vY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNCxcIi4vcDUuR3JhcGhpY3NcIjoyNixcIi4vcDUuUmVuZGVyZXIyRFwiOjI4fV0sMzA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vbWFpblwiKSxlPWEoXCIuLi9jb25zdGFudHNcIiksZj1hKFwiLi4vaGVscGVyc1wiKTthKFwiLi4vZXJyb3JfaGVscGVyc1wiKSxkLnByb3RvdHlwZS5hcmM9ZnVuY3Rpb24oYSxiLGMsZyxoLGksaixrKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJhcmNcIixhcmd1bWVudHMpLCF0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJiF0aGlzLl9yZW5kZXJlci5fZG9GaWxsKXJldHVybiB0aGlzO2ZvcihoPXRoaXMuX3RvUmFkaWFucyhoKSxpPXRoaXMuX3RvUmFkaWFucyhpKTtoPDA7KWgrPWUuVFdPX1BJO2Zvcig7aTwwOylpKz1lLlRXT19QSTt2b2lkIDAhPT1oJiZ2b2lkIDAhPT1pJiYoaS50b0ZpeGVkKDEwKT09PWgudG9GaXhlZCgxMCl8fE1hdGguYWJzKGktaCk9PT1lLlRXT19QST8oaCU9ZS5UV09fUEksaSU9ZS5UV09fUEksaCs9ZS5UV09fUEkpOk1hdGguYWJzKGktaCk+ZS5UV09fUEkmJihoJT1lLlRXT19QSSxpJT1lLlRXT19QSSxpKz1lLlRXT19QSSkpLGg8PWUuSEFMRl9QST9oPU1hdGguYXRhbihjL2cqTWF0aC50YW4oaCkpOmg+ZS5IQUxGX1BJJiZoPD0zKmUuSEFMRl9QSSYmKGg9TWF0aC5hdGFuKGMvZypNYXRoLnRhbihoKSkrZS5QSSksaTw9ZS5IQUxGX1BJP2k9TWF0aC5hdGFuKGMvZypNYXRoLnRhbihpKSk6aT5lLkhBTEZfUEkmJmk8PTMqZS5IQUxGX1BJJiYoaT1NYXRoLmF0YW4oYy9nKk1hdGgudGFuKGkpKStlLlBJKSxoPmkmJihpKz1lLlRXT19QSSksYz1NYXRoLmFicyhjKSxnPU1hdGguYWJzKGcpO3ZhciBsPWYubW9kZUFkanVzdChhLGIsYyxnLHRoaXMuX3JlbmRlcmVyLl9lbGxpcHNlTW9kZSk7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmFyYyhsLngsbC55LGwudyxsLmgsaCxpLGosayksdGhpc30sZC5wcm90b3R5cGUuZWxsaXBzZT1mdW5jdGlvbihhLGIsYyxlLGcpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImVsbGlwc2VcIixhcmd1bWVudHMpLCF0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJiF0aGlzLl9yZW5kZXJlci5fZG9GaWxsKXJldHVybiB0aGlzO2M8MCYmKGM9TWF0aC5hYnMoYykpLHZvaWQgMD09PWU/ZT1jOmU8MCYmKGU9TWF0aC5hYnMoZSkpO3ZhciBoPWYubW9kZUFkanVzdChhLGIsYyxlLHRoaXMuX3JlbmRlcmVyLl9lbGxpcHNlTW9kZSk7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmVsbGlwc2UoW2gueCxoLnksaC53LGguaCxnXSksdGhpc30sZC5wcm90b3R5cGUubGluZT1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsaW5lXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJnRoaXMuX3JlbmRlcmVyLmxpbmUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwb2ludFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiZ0aGlzLl9yZW5kZXJlci5wb2ludC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLnF1YWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicXVhZFwiLGFyZ3VtZW50cyksKHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZXx8dGhpcy5fcmVuZGVyZXIuX2RvRmlsbCkmJnRoaXMuX3JlbmRlcmVyLnF1YWQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5yZWN0PWZ1bmN0aW9uKCl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicmVjdFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlfHx0aGlzLl9yZW5kZXJlci5fZG9GaWxsKXtmb3IodmFyIGE9Zi5tb2RlQWRqdXN0KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSx0aGlzLl9yZW5kZXJlci5fcmVjdE1vZGUpLGI9W2EueCxhLnksYS53LGEuaF0sYz00O2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYltjXT1hcmd1bWVudHNbY107dGhpcy5fcmVuZGVyZXIucmVjdChiKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUudHJpYW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidHJpYW5nbGVcIixhcmd1bWVudHMpLCh0aGlzLl9yZW5kZXJlci5fZG9TdHJva2V8fHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpJiZ0aGlzLl9yZW5kZXJlci50cmlhbmdsZShhcmd1bWVudHMpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb25zdGFudHNcIjoxOCxcIi4uL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2hlbHBlcnNcIjoyMSxcIi4uL21haW5cIjoyNH1dLDMxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL21haW5cIiksZT1hKFwiLi4vY29uc3RhbnRzXCIpO2QucHJvdG90eXBlLmVsbGlwc2VNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJlbGxpcHNlTW9kZVwiLGFyZ3VtZW50cyksYSE9PWUuQ09STkVSJiZhIT09ZS5DT1JORVJTJiZhIT09ZS5SQURJVVMmJmEhPT1lLkNFTlRFUnx8KHRoaXMuX3JlbmRlcmVyLl9lbGxpcHNlTW9kZT1hKSx0aGlzfSxkLnByb3RvdHlwZS5ub1Ntb290aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5ub1Ntb290aCgpLHRoaXN9LGQucHJvdG90eXBlLnJlY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyZWN0TW9kZVwiLGFyZ3VtZW50cyksYSE9PWUuQ09STkVSJiZhIT09ZS5DT1JORVJTJiZhIT09ZS5SQURJVVMmJmEhPT1lLkNFTlRFUnx8KHRoaXMuX3JlbmRlcmVyLl9yZWN0TW9kZT1hKSx0aGlzfSxkLnByb3RvdHlwZS5zbW9vdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuc21vb3RoKCksdGhpc30sZC5wcm90b3R5cGUuc3Ryb2tlQ2FwPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzdHJva2VDYXBcIixhcmd1bWVudHMpLGEhPT1lLlJPVU5EJiZhIT09ZS5TUVVBUkUmJmEhPT1lLlBST0pFQ1R8fHRoaXMuX3JlbmRlcmVyLnN0cm9rZUNhcChhKSx0aGlzfSxkLnByb3RvdHlwZS5zdHJva2VKb2luPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzdHJva2VKb2luXCIsYXJndW1lbnRzKSxhIT09ZS5ST1VORCYmYSE9PWUuQkVWRUwmJmEhPT1lLk1JVEVSfHx0aGlzLl9yZW5kZXJlci5zdHJva2VKb2luKGEpLHRoaXN9LGQucHJvdG90eXBlLnN0cm9rZVdlaWdodD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3Ryb2tlV2VpZ2h0XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5zdHJva2VXZWlnaHQoYSksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4uL2NvbnN0YW50c1wiOjE4LFwiLi4vbWFpblwiOjI0fV0sMzI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vbWFpblwiKTthKFwiLi4vZXJyb3JfaGVscGVyc1wiKSxkLnByb3RvdHlwZS5iZXppZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmV6aWVyXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2V8fHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGw/KHRoaXMuX3JlbmRlcmVyLmJlemllci5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXMpOnRoaXN9LGQucHJvdG90eXBlLmJlemllckRldGFpbD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmV6aWVyRGV0YWlsXCIsYXJndW1lbnRzKSx0aGlzLl9iZXppZXJEZXRhaWw9YSx0aGlzfSxkLnByb3RvdHlwZS5iZXppZXJQb2ludD1mdW5jdGlvbihhLGIsYyxlLGYpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllclBvaW50XCIsYXJndW1lbnRzKTt2YXIgZz0xLWY7cmV0dXJuIE1hdGgucG93KGcsMykqYSszKk1hdGgucG93KGcsMikqZipiKzMqZypNYXRoLnBvdyhmLDIpKmMrTWF0aC5wb3coZiwzKSplfSxkLnByb3RvdHlwZS5iZXppZXJUYW5nZW50PWZ1bmN0aW9uKGEsYixjLGUsZil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmV6aWVyVGFuZ2VudFwiLGFyZ3VtZW50cyk7dmFyIGc9MS1mO3JldHVybiAzKmUqTWF0aC5wb3coZiwyKS0zKmMqTWF0aC5wb3coZiwyKSs2KmMqZypmLTYqYipnKmYrMypiKk1hdGgucG93KGcsMiktMyphKk1hdGgucG93KGcsMil9LGQucHJvdG90eXBlLmN1cnZlPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJnRoaXMuX3JlbmRlcmVyLmN1cnZlLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUuY3VydmVEZXRhaWw9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlRGV0YWlsXCIsYXJndW1lbnRzKSx0aGlzLl9jdXJ2ZURldGFpbD1hPDM/MzphLHRoaXN9LGQucHJvdG90eXBlLmN1cnZlVGlnaHRuZXNzPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVRpZ2h0bmVzc1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2N1cnZlVGlnaHRuZXNzPWEsdGhpc30sZC5wcm90b3R5cGUuY3VydmVQb2ludD1mdW5jdGlvbihhLGIsYyxlLGYpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlUG9pbnRcIixhcmd1bWVudHMpO3ZhciBnPWYqZipmLGg9ZipmO3JldHVybiBhKigtLjUqZytoLS41KmYpK2IqKDEuNSpnLTIuNSpoKzEpK2MqKC0xLjUqZysyKmgrLjUqZikrZSooLjUqZy0uNSpoKX0sZC5wcm90b3R5cGUuY3VydmVUYW5nZW50PWZ1bmN0aW9uKGEsYixjLGUsZil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVUYW5nZW50XCIsYXJndW1lbnRzKTt2YXIgZz1mKmY7cmV0dXJuIGEqKC0zKmcvMisyKmYtLjUpK2IqKDkqZy8yLTUqZikrYyooLTkqZy8yKzQqZisuNSkrZSooMypnLzItZil9LGIuZXhwb3J0cz1kfSx7XCIuLi9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9tYWluXCI6MjR9XSwzMzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9tYWluXCIpLGU9YShcIi4uL2NvbnN0YW50c1wiKSxmPW51bGwsZz1bXSxoPVtdLGk9ITEsaj0hMSxrPSExLGw9ITEsbT0hMDtkLnByb3RvdHlwZS5iZWdpbkNvbnRvdXI9ZnVuY3Rpb24oKXtyZXR1cm4gaD1bXSxsPSEwLHRoaXN9LGQucHJvdG90eXBlLmJlZ2luU2hhcGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlZ2luU2hhcGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEP3RoaXMuX3JlbmRlcmVyLmJlZ2luU2hhcGUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTooZj1hPT09ZS5QT0lOVFN8fGE9PT1lLkxJTkVTfHxhPT09ZS5UUklBTkdMRVN8fGE9PT1lLlRSSUFOR0xFX0ZBTnx8YT09PWUuVFJJQU5HTEVfU1RSSVB8fGE9PT1lLlFVQURTfHxhPT09ZS5RVUFEX1NUUklQP2E6bnVsbCxnPVtdLGg9W10pLHRoaXN9LGQucHJvdG90eXBlLmJlemllclZlcnRleD1mdW5jdGlvbigpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllclZlcnRleFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhpcy5fcmVuZGVyZXIuYmV6aWVyVmVydGV4LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk7ZWxzZXtpZigwPT09Zy5sZW5ndGgpdGhyb3dcInZlcnRleCgpIG11c3QgYmUgdXNlZCBvbmNlIGJlZm9yZSBjYWxsaW5nIGJlemllclZlcnRleCgpXCI7aT0hMDtmb3IodmFyIGE9W10sYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspYVtiXT1hcmd1bWVudHNbYl07YS5pc1ZlcnQ9ITEsbD9oLnB1c2goYSk6Zy5wdXNoKGEpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS5jdXJ2ZVZlcnRleD1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVZlcnRleFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0Q/dGhpcy5fcmVuZGVyZXIuY3VydmVWZXJ0ZXguYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTooaj0hMCx0aGlzLnZlcnRleChhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKSksdGhpc30sZC5wcm90b3R5cGUuZW5kQ29udG91cj1mdW5jdGlvbigpe3ZhciBhPWhbMF0uc2xpY2UoKTthLmlzVmVydD1oWzBdLmlzVmVydCxhLm1vdmVUbz0hMSxoLnB1c2goYSksbSYmKGcucHVzaChnWzBdKSxtPSExKTtmb3IodmFyIGI9MDtiPGgubGVuZ3RoO2IrKylnLnB1c2goaFtiXSk7cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLmVuZFNoYXBlPWZ1bmN0aW9uKGEpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImVuZFNoYXBlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRCl0aGlzLl9yZW5kZXJlci5lbmRTaGFwZShhLGosaSxrLGwsZik7ZWxzZXtpZigwPT09Zy5sZW5ndGgpcmV0dXJuIHRoaXM7aWYoIXRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmIXRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpcmV0dXJuIHRoaXM7dmFyIGI9YT09PWUuQ0xPU0U7YiYmIWwmJmcucHVzaChnWzBdKSx0aGlzLl9yZW5kZXJlci5lbmRTaGFwZShhLGcsaixpLGssbCxmKSxqPSExLGk9ITEsaz0hMSxsPSExLG09ITAsYiYmZy5wb3AoKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUucXVhZHJhdGljVmVydGV4PWZ1bmN0aW9uKCl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicXVhZHJhdGljVmVydGV4XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRCl0aGlzLl9yZW5kZXJlci5xdWFkcmF0aWNWZXJ0ZXguYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTtlbHNle2lmKHRoaXMuX2NvbnRvdXJJbml0ZWQpe3ZhciBhPXt9O3JldHVybiBhLng9YXJndW1lbnRzWzBdLGEueT1hcmd1bWVudHNbMV0sYS54Mz1hcmd1bWVudHNbMl0sYS55Mz1hcmd1bWVudHNbM10sYS50eXBlPWUuUVVBRFJBVElDLHRoaXMuX2NvbnRvdXJWZXJ0aWNlcy5wdXNoKGEpLHRoaXN9aWYoIShnLmxlbmd0aD4wKSl0aHJvdyBuZXcgRXJyb3IoXCJ2ZXJ0ZXgoKSBtdXN0IGJlIHVzZWQgb25jZSBiZWZvcmUgY2FsbGluZyBxdWFkcmF0aWNWZXJ0ZXgoKVwiKTtrPSEwO2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliW2NdPWFyZ3VtZW50c1tjXTtiLmlzVmVydD0hMSxsP2gucHVzaChiKTpnLnB1c2goYil9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLnZlcnRleD1mdW5jdGlvbihhLGIsYyxkLGUpe2lmKHRoaXMuX3JlbmRlcmVyLmlzUDNEKXRoaXMuX3JlbmRlcmVyLnZlcnRleC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpO2Vsc2V7dmFyIGY9W107Zi5pc1ZlcnQ9ITAsZlswXT1hLGZbMV09YixmWzJdPTAsZlszXT0wLGZbNF09MCxmWzVdPXRoaXMuX3JlbmRlcmVyLl9nZXRGaWxsKCksZls2XT10aGlzLl9yZW5kZXJlci5fZ2V0U3Ryb2tlKCksYyYmKGYubW92ZVRvPWMpLGw/KDA9PT1oLmxlbmd0aCYmKGYubW92ZVRvPSEwKSxoLnB1c2goZikpOmcucHVzaChmKX1yZXR1cm4gdGhpc30sYi5leHBvcnRzPWR9LHtcIi4uL2NvbnN0YW50c1wiOjE4LFwiLi4vbWFpblwiOjI0fV0sMzQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGZ1bmN0aW9uKGEsYil7d2luZG93LnNldFRpbWVvdXQoYSwxZTMvNjApfX0oKSxmdW5jdGlvbigpe1widW5kZWZpbmVkXCI9PXR5cGVvZiBVaW50OENsYW1wZWRBcnJheXx8VWludDhDbGFtcGVkQXJyYXkucHJvdG90eXBlLnNsaWNlfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoVWludDhDbGFtcGVkQXJyYXkucHJvdG90eXBlLFwic2xpY2VcIix7dmFsdWU6QXJyYXkucHJvdG90eXBlLnNsaWNlLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExfSl9KCksZnVuY3Rpb24oKXtpZighT2JqZWN0LmFzc2lnbil7dmFyIGE9T2JqZWN0LmtleXMsYj1PYmplY3QuZGVmaW5lUHJvcGVydHksYz1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwIT09YSYmbnVsbCE9PWF9LGQ9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCksZT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGY9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBlLmNhbGwoYSxiKX19LGc9ZnVuY3Rpb24oYixlKXtpZighYyhiKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0XCIpO3ZhciBnLGgsaSxqLGs9T2JqZWN0KGIpO2ZvcihnPTE7Zzxhcmd1bWVudHMubGVuZ3RoOysrZylmb3IoaD1PYmplY3QoYXJndW1lbnRzW2ddKSxqPWEoaCksZCYmT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmai5wdXNoLmFwcGx5KGosT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhoKS5maWx0ZXIoZihoKSkpLGk9MDtpPGoubGVuZ3RoOysraSlrW2pbaV1dPWhbaltpXV07cmV0dXJuIGt9O2IoT2JqZWN0LFwiYXNzaWduXCIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITB9KX19KCl9LHt9XSwzNTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIik7ZC5wcm90b3R5cGUubm9Mb29wPWZ1bmN0aW9uKCl7dGhpcy5fbG9vcD0hMX0sZC5wcm90b3R5cGUubG9vcD1mdW5jdGlvbigpe3RoaXMuX2xvb3A9ITAsdGhpcy5fZHJhdygpfSxkLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKCl7dGhpcy5fc3R5bGVzLnB1c2goe3Byb3BzOntfY29sb3JNb2RlOnRoaXMuX2NvbG9yTW9kZX0scmVuZGVyZXI6dGhpcy5fcmVuZGVyZXIucHVzaCgpfSl9LGQucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX3N0eWxlcy5wb3AoKTthPyh0aGlzLl9yZW5kZXJlci5wb3AoYS5yZW5kZXJlciksT2JqZWN0LmFzc2lnbih0aGlzLGEucHJvcHMpKTpjb25zb2xlLndhcm4oXCJwb3AoKSB3YXMgY2FsbGVkIHdpdGhvdXQgbWF0Y2hpbmcgcHVzaCgpXCIpfSxkLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oYSl7dmFyIGI9cGFyc2VJbnQoYSk7KGlzTmFOKGIpfHxiPDEpJiYoYj0xKTt2YXIgYz10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcyxkPWMuc2V0dXAsZT1jLmRyYXc7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSl7dm9pZCAwPT09ZCYmYy5zY2FsZShjLl9waXhlbERlbnNpdHksYy5fcGl4ZWxEZW5zaXR5KTtmb3IodmFyIGY9ZnVuY3Rpb24oYSl7YS5jYWxsKGMpfSxnPTA7ZzxiO2crKyljLnJlc2V0TWF0cml4KCksYy5fcmVuZGVyZXIuaXNQM0QmJmMuX3JlbmRlcmVyLl91cGRhdGUoKSxjLl9zZXRQcm9wZXJ0eShcImZyYW1lQ291bnRcIixjLmZyYW1lQ291bnQrMSksYy5fcmVnaXN0ZXJlZE1ldGhvZHMucHJlLmZvckVhY2goZiksZSgpLGMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3QuZm9yRWFjaChmKX19LGIuZXhwb3J0cz1kfSx7XCIuL21haW5cIjoyNH1dLDM2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKTtkLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihhLGIsYyxkLGUsZil7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmFwcGx5TWF0cml4KGEsYixjLGQsZSxmKSx0aGlzfSxkLnByb3RvdHlwZS5wb3BNYXRyaXg9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJwb3BNYXRyaXgoKSBub3QgdXNlZCwgc2VlIHBvcCgpXCIpfSxkLnByb3RvdHlwZS5wcmludE1hdHJpeD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInByaW50TWF0cml4KCkgbm90IGltcGxlbWVudGVkXCIpfSxkLnByb3RvdHlwZS5wdXNoTWF0cml4PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicHVzaE1hdHJpeCgpIG5vdCB1c2VkLCBzZWUgcHVzaCgpXCIpfSxkLnByb3RvdHlwZS5yZXNldE1hdHJpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5yZXNldE1hdHJpeCgpLHRoaXN9LGQucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyb3RhdGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnJvdGF0ZSh0aGlzLl90b1JhZGlhbnMoYSksYiksdGhpc30sZC5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJyb3RhdGVYXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJvdGF0ZVhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnJvdGF0ZVgodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInJvdGF0ZVlcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicm90YXRlWVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIucm90YXRlWSh0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwicm90YXRlWlwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyb3RhdGVaXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5yb3RhdGVaKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYSxiLGMpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNjYWxlXCIsYXJndW1lbnRzKSxhIGluc3RhbmNlb2YgZC5WZWN0b3Ipe3ZhciBlPWE7YT1lLngsYj1lLnksYz1lLnp9ZWxzZSBpZihhIGluc3RhbmNlb2YgQXJyYXkpe3ZhciBmPWE7YT1mWzBdLGI9ZlsxXSxjPWZbMl18fDF9cmV0dXJuIGlzTmFOKGIpP2I9Yz1hOmlzTmFOKGMpJiYoYz0xKSx0aGlzLl9yZW5kZXJlci5zY2FsZS5jYWxsKHRoaXMuX3JlbmRlcmVyLGEsYixjKSx0aGlzfSxkLnByb3RvdHlwZS5zaGVhclg9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNoZWFyWFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuc2hlYXJYKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUuc2hlYXJZPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzaGVhcllcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnNoZWFyWSh0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRyYW5zbGF0ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0Q/dGhpcy5fcmVuZGVyZXIudHJhbnNsYXRlKGEsYixjKTp0aGlzLl9yZW5kZXJlci50cmFuc2xhdGUoYSxiKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi9tYWluXCI6MjR9XSwzNzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuY3JlYXRlU3RyaW5nRGljdD1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVTdHJpbmdEaWN0XCIsYXJndW1lbnRzKSxuZXcgZC5TdHJpbmdEaWN0KGEsYil9LGQucHJvdG90eXBlLmNyZWF0ZU51bWJlckRpY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlTnVtYmVyRGljdFwiLGFyZ3VtZW50cyksbmV3IGQuTnVtYmVyRGljdChhLGIpfSxkLlR5cGVkRGljdD1mdW5jdGlvbihhLGIpe3JldHVybiBhIGluc3RhbmNlb2YgT2JqZWN0P3RoaXMuZGF0YT1hOih0aGlzLmRhdGE9e30sdGhpcy5kYXRhW2FdPWIpLHRoaXN9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RofSxkLlR5cGVkRGljdC5wcm90b3R5cGUuaGFzS2V5PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSl9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7aWYodGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpKXJldHVybiB0aGlzLmRhdGFbYV07Y29uc29sZS5sb2coYStcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIERpY3Rpb25hcnlcIil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXt0aGlzLl92YWxpZGF0ZShiKT90aGlzLmRhdGFbYV09Yjpjb25zb2xlLmxvZyhcIlRob3NlIHZhbHVlcyBkb250IHdvcmsgZm9yIHRoaXMgZGljdGlvbmFyeSB0eXBlLlwiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLl9hZGRPYmo9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpdGhpcy5zZXQoYixhW2JdKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbihhLGIpe2EgaW5zdGFuY2VvZiBPYmplY3QmJnZvaWQgMD09PWI/dGhpcy5fYWRkT2JqKGEpOnZvaWQgMCE9PWE/dGhpcy5zZXQoYSxiKTpjb25zb2xlLmxvZyhcIkluIG9yZGVyIHRvIGNyZWF0ZSBhIG5ldyBEaWN0aW9uYXJ5IGVudHJ5IHlvdSBtdXN0IHBhc3MgYW4gb2JqZWN0IG9yIGEga2V5LCB2YWx1ZSBwYWlyXCIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmRhdGE9e319LGQuVHlwZWREaWN0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oYSl7aWYoIXRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgRXJyb3IoYStcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIERpY3Rpb25hcnlcIik7ZGVsZXRlIHRoaXMuZGF0YVthXX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnByaW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIHRoaXMuZGF0YSljb25zb2xlLmxvZyhcImtleTpcIithK1wiIHZhbHVlOlwiK3RoaXMuZGF0YVthXSl9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5zYXZlVGFibGU9ZnVuY3Rpb24oYSl7dmFyIGI9XCJcIjtmb3IodmFyIGMgaW4gdGhpcy5kYXRhKWIrPWMrXCIsXCIrdGhpcy5kYXRhW2NdK1wiXFxuXCI7dmFyIGU9bmV3IEJsb2IoW2JdLHt0eXBlOlwidGV4dC9jc3ZcIn0pO2QucHJvdG90eXBlLmRvd25sb2FkRmlsZShlLGF8fFwibXljc3ZcIixcImNzdlwiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnNhdmVKU09OPWZ1bmN0aW9uKGEsYil7ZC5wcm90b3R5cGUuc2F2ZUpTT04odGhpcy5kYXRhLGEsYil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuITB9LGQuU3RyaW5nRGljdD1mdW5jdGlvbigpe2QuVHlwZWREaWN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5TdHJpbmdEaWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQuVHlwZWREaWN0LnByb3RvdHlwZSksZC5TdHJpbmdEaWN0LnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGF9LGQuTnVtYmVyRGljdD1mdW5jdGlvbigpe2QuVHlwZWREaWN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQuVHlwZWREaWN0LnByb3RvdHlwZSksZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGF9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpP3RoaXMuZGF0YVthXSs9Yjpjb25zb2xlLmxvZyhcIlRoZSBrZXkgLSBcIithK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGljdGlvbmFyeS5cIil9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGEsYil7dGhpcy5hZGQoYSwtYil9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubXVsdD1mdW5jdGlvbihhLGIpe3RoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKT90aGlzLmRhdGFbYV0qPWI6Y29uc29sZS5sb2coXCJUaGUga2V5IC0gXCIrYStcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGRpY3Rpb25hcnkuXCIpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLmRpdj1mdW5jdGlvbihhLGIpe3RoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKT90aGlzLmRhdGFbYV0vPWI6Y29uc29sZS5sb2coXCJUaGUga2V5IC0gXCIrYStcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGRpY3Rpb25hcnkuXCIpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLl92YWx1ZVRlc3Q9ZnVuY3Rpb24oYSl7aWYoMD09PU9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBzZWFyY2ggZm9yIGEgbWluaW11bSBvciBtYXhpbXVtIHZhbHVlIG9uIGFuIGVtcHR5IE51bWJlckRpY3RcIik7aWYoMT09PU9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoKXJldHVybiB0aGlzLmRhdGFbT2JqZWN0LmtleXModGhpcy5kYXRhKVswXV07dmFyIGI9dGhpcy5kYXRhW09iamVjdC5rZXlzKHRoaXMuZGF0YSlbMF1dO2Zvcih2YXIgYyBpbiB0aGlzLmRhdGEpdGhpcy5kYXRhW2NdKmE8YiphJiYoYj10aGlzLmRhdGFbY10pO3JldHVybiBifSxkLk51bWJlckRpY3QucHJvdG90eXBlLm1pblZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlVGVzdCgxKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5tYXhWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZVRlc3QoLTEpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLl9rZXlUZXN0PWZ1bmN0aW9uKGEpe2lmKDA9PT1PYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gdXNlIG1pblZhbHVlIG9uIGFuIGVtcHR5IE51bWJlckRpY3RcIik7aWYoMT09PU9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoKXJldHVybiBPYmplY3Qua2V5cyh0aGlzLmRhdGEpWzBdO2Zvcih2YXIgYj1PYmplY3Qua2V5cyh0aGlzLmRhdGEpWzBdLGM9MTtjPE9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoO2MrKylPYmplY3Qua2V5cyh0aGlzLmRhdGEpW2NdKmE8YiphJiYoYj1PYmplY3Qua2V5cyh0aGlzLmRhdGEpW2NdKTtyZXR1cm4gYn0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5taW5LZXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa2V5VGVzdCgxKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5tYXhLZXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa2V5VGVzdCgtMSl9LGIuZXhwb3J0cz1kLlR5cGVkRGljdH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSwzODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuZGV2aWNlT3JpZW50YXRpb249dm9pZCAwLGQucHJvdG90eXBlLmFjY2VsZXJhdGlvblg9MCxkLnByb3RvdHlwZS5hY2NlbGVyYXRpb25ZPTAsZC5wcm90b3R5cGUuYWNjZWxlcmF0aW9uWj0wLGQucHJvdG90eXBlLnBBY2NlbGVyYXRpb25YPTAsZC5wcm90b3R5cGUucEFjY2VsZXJhdGlvblk9MCxkLnByb3RvdHlwZS5wQWNjZWxlcmF0aW9uWj0wLGQucHJvdG90eXBlLl91cGRhdGVQQWNjZWxlcmF0aW9ucz1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwicEFjY2VsZXJhdGlvblhcIix0aGlzLmFjY2VsZXJhdGlvblgpLHRoaXMuX3NldFByb3BlcnR5KFwicEFjY2VsZXJhdGlvbllcIix0aGlzLmFjY2VsZXJhdGlvblkpLHRoaXMuX3NldFByb3BlcnR5KFwicEFjY2VsZXJhdGlvblpcIix0aGlzLmFjY2VsZXJhdGlvblopfSxkLnByb3RvdHlwZS5yb3RhdGlvblg9MCxkLnByb3RvdHlwZS5yb3RhdGlvblk9MCxkLnByb3RvdHlwZS5yb3RhdGlvblo9MCxkLnByb3RvdHlwZS5wUm90YXRpb25YPTAsZC5wcm90b3R5cGUucFJvdGF0aW9uWT0wLGQucHJvdG90eXBlLnBSb3RhdGlvblo9MDt2YXIgZSxmLGcsaD0wLGk9MCxqPTAsaz1cImNsb2Nrd2lzZVwiLGw9XCJjbG9ja3dpc2VcIixtPVwiY2xvY2t3aXNlXCI7ZC5wcm90b3R5cGUuX3VwZGF0ZVBSb3RhdGlvbnM9ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcInBSb3RhdGlvblhcIix0aGlzLnJvdGF0aW9uWCksdGhpcy5fc2V0UHJvcGVydHkoXCJwUm90YXRpb25ZXCIsdGhpcy5yb3RhdGlvblkpLHRoaXMuX3NldFByb3BlcnR5KFwicFJvdGF0aW9uWlwiLHRoaXMucm90YXRpb25aKX0sZC5wcm90b3R5cGUudHVybkF4aXM9dm9pZCAwO3ZhciBuPS41LG89MzA7ZC5wcm90b3R5cGUuc2V0TW92ZVRocmVzaG9sZD1mdW5jdGlvbihhKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzZXRNb3ZlVGhyZXNob2xkXCIsYXJndW1lbnRzKSxuPWF9LGQucHJvdG90eXBlLnNldFNoYWtlVGhyZXNob2xkPWZ1bmN0aW9uKGEpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNldFNoYWtlVGhyZXNob2xkXCIsYXJndW1lbnRzKSxvPWF9LGQucHJvdG90eXBlLl9vbmRldmljZW9yaWVudGF0aW9uPWZ1bmN0aW9uKGEpe3RoaXMuX3VwZGF0ZVBSb3RhdGlvbnMoKSx0aGlzLl9zZXRQcm9wZXJ0eShcInJvdGF0aW9uWFwiLGEuYmV0YSksdGhpcy5fc2V0UHJvcGVydHkoXCJyb3RhdGlvbllcIixhLmdhbW1hKSx0aGlzLl9zZXRQcm9wZXJ0eShcInJvdGF0aW9uWlwiLGEuYWxwaGEpLHRoaXMuX2hhbmRsZU1vdGlvbigpfSxkLnByb3RvdHlwZS5fb25kZXZpY2Vtb3Rpb249ZnVuY3Rpb24oYSl7dGhpcy5fdXBkYXRlUEFjY2VsZXJhdGlvbnMoKSx0aGlzLl9zZXRQcm9wZXJ0eShcImFjY2VsZXJhdGlvblhcIiwyKmEuYWNjZWxlcmF0aW9uLngpLHRoaXMuX3NldFByb3BlcnR5KFwiYWNjZWxlcmF0aW9uWVwiLDIqYS5hY2NlbGVyYXRpb24ueSksdGhpcy5fc2V0UHJvcGVydHkoXCJhY2NlbGVyYXRpb25aXCIsMiphLmFjY2VsZXJhdGlvbi56KSx0aGlzLl9oYW5kbGVNb3Rpb24oKX0sZC5wcm90b3R5cGUuX2hhbmRsZU1vdGlvbj1mdW5jdGlvbigpezkwPT09d2luZG93Lm9yaWVudGF0aW9ufHwtOTA9PT13aW5kb3cub3JpZW50YXRpb24/dGhpcy5fc2V0UHJvcGVydHkoXCJkZXZpY2VPcmllbnRhdGlvblwiLFwibGFuZHNjYXBlXCIpOjA9PT13aW5kb3cub3JpZW50YXRpb24/dGhpcy5fc2V0UHJvcGVydHkoXCJkZXZpY2VPcmllbnRhdGlvblwiLFwicG9ydHJhaXRcIik6dm9pZCAwPT09d2luZG93Lm9yaWVudGF0aW9uJiZ0aGlzLl9zZXRQcm9wZXJ0eShcImRldmljZU9yaWVudGF0aW9uXCIsXCJ1bmRlZmluZWRcIik7dmFyIGE9dGhpcy5kZXZpY2VNb3ZlZHx8d2luZG93LmRldmljZU1vdmVkO1wiZnVuY3Rpb25cIj09dHlwZW9mIGEmJihNYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblgtdGhpcy5wQWNjZWxlcmF0aW9uWCk+bnx8TWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25ZLXRoaXMucEFjY2VsZXJhdGlvblkpPm58fE1hdGguYWJzKHRoaXMuYWNjZWxlcmF0aW9uWi10aGlzLnBBY2NlbGVyYXRpb25aKT5uKSYmYSgpO3ZhciBiPXRoaXMuZGV2aWNlVHVybmVkfHx3aW5kb3cuZGV2aWNlVHVybmVkO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGIpe3ZhciBjPXRoaXMucm90YXRpb25YKzE4MCxkPXRoaXMucFJvdGF0aW9uWCsxODAscD1oKzE4MDtjLWQ+MCYmYy1kPDI3MHx8Yy1kPC0yNzA/az1cImNsb2Nrd2lzZVwiOihjLWQ8MHx8Yy1kPjI3MCkmJihrPVwiY291bnRlci1jbG9ja3dpc2VcIiksayE9PWUmJihwPWMpLE1hdGguYWJzKGMtcCk+OTAmJk1hdGguYWJzKGMtcCk8MjcwJiYocD1jLHRoaXMuX3NldFByb3BlcnR5KFwidHVybkF4aXNcIixcIlhcIiksYigpKSxlPWssaD1wLTE4MDt2YXIgcT10aGlzLnJvdGF0aW9uWSsxODAscj10aGlzLnBSb3RhdGlvblkrMTgwLHM9aSsxODA7cS1yPjAmJnEtcjwyNzB8fHEtcjwtMjcwP2w9XCJjbG9ja3dpc2VcIjoocS1yPDB8fHEtdGhpcy5wUm90YXRpb25ZPjI3MCkmJihsPVwiY291bnRlci1jbG9ja3dpc2VcIiksbCE9PWYmJihzPXEpLE1hdGguYWJzKHEtcyk+OTAmJk1hdGguYWJzKHEtcyk8MjcwJiYocz1xLHRoaXMuX3NldFByb3BlcnR5KFwidHVybkF4aXNcIixcIllcIiksYigpKSxmPWwsaT1zLTE4MCx0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo+MCYmdGhpcy5yb3RhdGlvblotdGhpcy5wUm90YXRpb25aPDI3MHx8dGhpcy5yb3RhdGlvblotdGhpcy5wUm90YXRpb25aPC0yNzA/bT1cImNsb2Nrd2lzZVwiOih0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo8MHx8dGhpcy5yb3RhdGlvblotdGhpcy5wUm90YXRpb25aPjI3MCkmJihtPVwiY291bnRlci1jbG9ja3dpc2VcIiksbSE9PWcmJihqPXRoaXMucm90YXRpb25aKSxNYXRoLmFicyh0aGlzLnJvdGF0aW9uWi1qKT45MCYmTWF0aC5hYnModGhpcy5yb3RhdGlvblotaik8MjcwJiYoaj10aGlzLnJvdGF0aW9uWix0aGlzLl9zZXRQcm9wZXJ0eShcInR1cm5BeGlzXCIsXCJaXCIpLGIoKSksZz1tLHRoaXMuX3NldFByb3BlcnR5KFwidHVybkF4aXNcIix2b2lkIDApfXZhciB0PXRoaXMuZGV2aWNlU2hha2VufHx3aW5kb3cuZGV2aWNlU2hha2VuO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpe3ZhciB1LHY7bnVsbCE9PXRoaXMucEFjY2VsZXJhdGlvblgmJih1PU1hdGguYWJzKHRoaXMuYWNjZWxlcmF0aW9uWC10aGlzLnBBY2NlbGVyYXRpb25YKSx2PU1hdGguYWJzKHRoaXMuYWNjZWxlcmF0aW9uWS10aGlzLnBBY2NlbGVyYXRpb25ZKSksdSt2Pm8mJnQoKX19LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDM5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZCgpe2Zvcih2YXIgYSBpbiBmKWlmKGYuaGFzT3duUHJvcGVydHkoYSkmJiEwPT09ZlthXSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpLGY9e307ZS5wcm90b3R5cGUuaXNLZXlQcmVzc2VkPSExLGUucHJvdG90eXBlLmtleUlzUHJlc3NlZD0hMSxlLnByb3RvdHlwZS5rZXk9XCJcIixlLnByb3RvdHlwZS5rZXlDb2RlPTAsZS5wcm90b3R5cGUuX29ua2V5ZG93bj1mdW5jdGlvbihhKXtpZighZlthLndoaWNoXSl7dGhpcy5fc2V0UHJvcGVydHkoXCJpc0tleVByZXNzZWRcIiwhMCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlJc1ByZXNzZWRcIiwhMCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlDb2RlXCIsYS53aGljaCksZlthLndoaWNoXT0hMCx0aGlzLl9zZXRQcm9wZXJ0eShcImtleVwiLGEua2V5fHxTdHJpbmcuZnJvbUNoYXJDb2RlKGEud2hpY2gpfHxhLndoaWNoKTt2YXIgYj10aGlzLmtleVByZXNzZWR8fHdpbmRvdy5rZXlQcmVzc2VkO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGImJiFhLmNoYXJDb2RlKXshMT09PWIoYSkmJmEucHJldmVudERlZmF1bHQoKX19fSxlLnByb3RvdHlwZS5fb25rZXl1cD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmtleVJlbGVhc2VkfHx3aW5kb3cua2V5UmVsZWFzZWQ7aWYoZlthLndoaWNoXT0hMSxkKCl8fCh0aGlzLl9zZXRQcm9wZXJ0eShcImlzS2V5UHJlc3NlZFwiLCExKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleUlzUHJlc3NlZFwiLCExKSksdGhpcy5fc2V0UHJvcGVydHkoXCJfbGFzdEtleUNvZGVUeXBlZFwiLG51bGwpLHRoaXMuX3NldFByb3BlcnR5KFwia2V5XCIsYS5rZXl8fFN0cmluZy5mcm9tQ2hhckNvZGUoYS53aGljaCl8fGEud2hpY2gpLHRoaXMuX3NldFByb3BlcnR5KFwia2V5Q29kZVwiLGEud2hpY2gpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGIpeyExPT09YihhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX0sZS5wcm90b3R5cGUuX29ua2V5cHJlc3M9ZnVuY3Rpb24oYSl7aWYoYS53aGljaCE9PXRoaXMuX2xhc3RLZXlDb2RlVHlwZWQpe3RoaXMuX3NldFByb3BlcnR5KFwia2V5Q29kZVwiLGEud2hpY2gpLHRoaXMuX3NldFByb3BlcnR5KFwiX2xhc3RLZXlDb2RlVHlwZWRcIixhLndoaWNoKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleVwiLFN0cmluZy5mcm9tQ2hhckNvZGUoYS53aGljaCkpO3ZhciBiPXRoaXMua2V5VHlwZWR8fHdpbmRvdy5rZXlUeXBlZDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiKXshMT09PWIoYSkmJmEucHJldmVudERlZmF1bHQoKX19fSxlLnByb3RvdHlwZS5fb25ibHVyPWZ1bmN0aW9uKGEpe2Y9e319LGUucHJvdG90eXBlLmtleUlzRG93bj1mdW5jdGlvbihhKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwia2V5SXNEb3duXCIsYXJndW1lbnRzKSxmW2FdfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw0MDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMsZCl7ZCYmIWQuY2xpZW50WCYmKGQudG91Y2hlcz9kPWQudG91Y2hlc1swXTpkLmNoYW5nZWRUb3VjaGVzJiYoZD1kLmNoYW5nZWRUb3VjaGVzWzBdKSk7dmFyIGU9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPWEuc2Nyb2xsV2lkdGgvYixnPWEuc2Nyb2xsSGVpZ2h0L2M7cmV0dXJue3g6KGQuY2xpZW50WC1lLmxlZnQpL2YseTooZC5jbGllbnRZLWUudG9wKS9nLHdpblg6ZC5jbGllbnRYLHdpblk6ZC5jbGllbnRZLGlkOmQuaWRlbnRpZmllcn19dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKSxmPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtlLnByb3RvdHlwZS5faGFzTW91c2VJbnRlcmFjdGVkPSExLGUucHJvdG90eXBlLm1vdXNlWD0wLGUucHJvdG90eXBlLm1vdXNlWT0wLGUucHJvdG90eXBlLnBtb3VzZVg9MCxlLnByb3RvdHlwZS5wbW91c2VZPTAsZS5wcm90b3R5cGUud2luTW91c2VYPTAsZS5wcm90b3R5cGUud2luTW91c2VZPTAsZS5wcm90b3R5cGUucHdpbk1vdXNlWD0wLGUucHJvdG90eXBlLnB3aW5Nb3VzZVk9MCxlLnByb3RvdHlwZS5tb3VzZUJ1dHRvbj0wLGUucHJvdG90eXBlLm1vdXNlSXNQcmVzc2VkPSExLGUucHJvdG90eXBlLl91cGRhdGVOZXh0TW91c2VDb29yZHM9ZnVuY3Rpb24oYSl7aWYobnVsbCE9PXRoaXMuX2N1ckVsZW1lbnQmJighYS50b3VjaGVzfHxhLnRvdWNoZXMubGVuZ3RoPjApKXt2YXIgYj1kKHRoaXMuX2N1ckVsZW1lbnQuZWx0LHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsYSk7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZVhcIixiLngpLHRoaXMuX3NldFByb3BlcnR5KFwibW91c2VZXCIsYi55KSx0aGlzLl9zZXRQcm9wZXJ0eShcIndpbk1vdXNlWFwiLGIud2luWCksdGhpcy5fc2V0UHJvcGVydHkoXCJ3aW5Nb3VzZVlcIixiLndpblkpfXRoaXMuX2hhc01vdXNlSW50ZXJhY3RlZHx8KHRoaXMuX3VwZGF0ZU1vdXNlQ29vcmRzKCksdGhpcy5fc2V0UHJvcGVydHkoXCJfaGFzTW91c2VJbnRlcmFjdGVkXCIsITApKX0sZS5wcm90b3R5cGUuX3VwZGF0ZU1vdXNlQ29vcmRzPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJwbW91c2VYXCIsdGhpcy5tb3VzZVgpLHRoaXMuX3NldFByb3BlcnR5KFwicG1vdXNlWVwiLHRoaXMubW91c2VZKSx0aGlzLl9zZXRQcm9wZXJ0eShcInB3aW5Nb3VzZVhcIix0aGlzLndpbk1vdXNlWCksdGhpcy5fc2V0UHJvcGVydHkoXCJwd2luTW91c2VZXCIsdGhpcy53aW5Nb3VzZVkpLHRoaXMuX3NldFByb3BlcnR5KFwiX3Btb3VzZVdoZWVsRGVsdGFZXCIsdGhpcy5fbW91c2VXaGVlbERlbHRhWSl9LGUucHJvdG90eXBlLl9zZXRNb3VzZUJ1dHRvbj1mdW5jdGlvbihhKXsxPT09YS5idXR0b24/dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUJ1dHRvblwiLGYuQ0VOVEVSKToyPT09YS5idXR0b24/dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUJ1dHRvblwiLGYuUklHSFQpOnRoaXMuX3NldFByb3BlcnR5KFwibW91c2VCdXR0b25cIixmLkxFRlQpfSxlLnByb3RvdHlwZS5fb25tb3VzZW1vdmU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzKGEpLHRoaXMubW91c2VJc1ByZXNzZWQ/XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZURyYWdnZWQ/ITE9PT1iLm1vdXNlRHJhZ2dlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hNb3ZlZCYmITE9PT1iLnRvdWNoTW92ZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlTW92ZWQmJiExPT09Yi5tb3VzZU1vdmVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbm1vdXNlZG93bj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczt0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlSXNQcmVzc2VkXCIsITApLHRoaXMuX3NldE1vdXNlQnV0dG9uKGEpLHRoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlUHJlc3NlZD8hMT09PWIubW91c2VQcmVzc2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaFN0YXJ0ZWQmJiExPT09Yi50b3VjaFN0YXJ0ZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29ubW91c2V1cD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczt0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlSXNQcmVzc2VkXCIsITEpLFxuXCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVJlbGVhc2VkPyExPT09Yi5tb3VzZVJlbGVhc2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaEVuZGVkJiYhMT09PWIudG91Y2hFbmRlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb25kcmFnZW5kPWUucHJvdG90eXBlLl9vbm1vdXNldXAsZS5wcm90b3R5cGUuX29uZHJhZ292ZXI9ZS5wcm90b3R5cGUuX29ubW91c2Vtb3ZlLGUucHJvdG90eXBlLl9vbmNsaWNrPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VDbGlja2VkKXshMT09PWIubW91c2VDbGlja2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fSxlLnByb3RvdHlwZS5fb25kYmxjbGljaz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLmRvdWJsZUNsaWNrZWQpeyExPT09Yi5kb3VibGVDbGlja2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fSxlLnByb3RvdHlwZS5fbW91c2VXaGVlbERlbHRhWT0wLGUucHJvdG90eXBlLl9wbW91c2VXaGVlbERlbHRhWT0wLGUucHJvdG90eXBlLl9vbndoZWVsPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKHRoaXMuX3NldFByb3BlcnR5KFwiX21vdXNlV2hlZWxEZWx0YVlcIixhLmRlbHRhWSksXCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVdoZWVsKXthLmRlbHRhPWEuZGVsdGFZOyExPT09Yi5tb3VzZVdoZWVsKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNDE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjLGQsZSl7ZT1lfHwwO3ZhciBmPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZz1hLnNjcm9sbFdpZHRoL2IsaD1hLnNjcm9sbEhlaWdodC9jLGk9ZC50b3VjaGVzW2VdfHxkLmNoYW5nZWRUb3VjaGVzW2VdO3JldHVybnt4OihpLmNsaWVudFgtZi5sZWZ0KS9nLHk6KGkuY2xpZW50WS1mLnRvcCkvaCx3aW5YOmkuY2xpZW50WCx3aW5ZOmkuY2xpZW50WSxpZDppLmlkZW50aWZpZXJ9fXZhciBlPWEoXCIuLi9jb3JlL21haW5cIik7ZS5wcm90b3R5cGUudG91Y2hlcz1bXSxlLnByb3RvdHlwZS5fdXBkYXRlVG91Y2hDb29yZHM9ZnVuY3Rpb24oYSl7aWYobnVsbCE9PXRoaXMuX2N1ckVsZW1lbnQpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLnRvdWNoZXMubGVuZ3RoO2MrKyliW2NdPWQodGhpcy5fY3VyRWxlbWVudC5lbHQsdGhpcy53aWR0aCx0aGlzLmhlaWdodCxhLGMpO3RoaXMuX3NldFByb3BlcnR5KFwidG91Y2hlc1wiLGIpfX0sZS5wcm90b3R5cGUuX29udG91Y2hzdGFydD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczt0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlSXNQcmVzc2VkXCIsITApLHRoaXMuX3VwZGF0ZVRvdWNoQ29vcmRzKGEpLHRoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKSx0aGlzLl91cGRhdGVNb3VzZUNvb3JkcygpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hTdGFydGVkPyExPT09Yi50b3VjaFN0YXJ0ZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlUHJlc3NlZCYmITE9PT1iLm1vdXNlUHJlc3NlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb250b3VjaG1vdmU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fdXBkYXRlVG91Y2hDb29yZHMoYSksdGhpcy5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzKGEpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hNb3ZlZD8hMT09PWIudG91Y2hNb3ZlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VEcmFnZ2VkJiYhMT09PWIubW91c2VEcmFnZ2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbnRvdWNoZW5kPWZ1bmN0aW9uKGEpe3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMSksdGhpcy5fdXBkYXRlVG91Y2hDb29yZHMoYSksdGhpcy5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzKGEpO3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO1wiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hFbmRlZD8hMT09PWIudG91Y2hFbmRlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VSZWxlYXNlZCYmITE9PT1iLm1vdXNlUmVsZWFzZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNDI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEpe3ZhciBiPTMuNSphfDA7aWYoYj1iPDE/MTpiPDI0OD9iOjI0OCxnIT09Yil7Zz1iLGg9MStnPDwxLGk9bmV3IEludDMyQXJyYXkoaCksaj1uZXcgQXJyYXkoaCk7Zm9yKHZhciBjPTA7YzxoO2MrKylqW2NdPW5ldyBJbnQzMkFycmF5KDI1Nik7Zm9yKHZhciBkLGUsZixrLGw9MSxtPWItMTtsPGI7bCsrKXtpW2IrbF09aVttXT1lPW0qbSxmPWpbYitsXSxrPWpbbS0tXTtmb3IodmFyIG49MDtuPDI1NjtuKyspZltuXT1rW25dPWUqbn1kPWlbYl09YipiLGY9altiXTtmb3IodmFyIG89MDtvPDI1NjtvKyspZltvXT1kKm99fWZ1bmN0aW9uIGUoYSxiKXtmb3IodmFyIGM9Zi5fdG9QaXhlbHMoYSksZT1hLndpZHRoLGs9YS5oZWlnaHQsbD1lKmssbT1uZXcgSW50MzJBcnJheShsKSxuPTA7bjxsO24rKyltW25dPWYuX2dldEFSR0IoYyxuKTt2YXIgbyxwLHEscixzLHQsdSx2LHcseCx5PW5ldyBJbnQzMkFycmF5KGwpLHo9bmV3IEludDMyQXJyYXkobCksQT1uZXcgSW50MzJBcnJheShsKSxCPW5ldyBJbnQzMkFycmF5KGwpLEM9MDtkKGIpO3ZhciBELEUsRixHO2ZvcihFPTA7RTxrO0UrKyl7Zm9yKEQ9MDtEPGU7RCsrKXtpZihyPXE9cD1zPW89MCwodD1ELWcpPDApeD0tdCx0PTA7ZWxzZXtpZih0Pj1lKWJyZWFrO3g9MH1mb3IoRj14O0Y8aCYmISh0Pj1lKTtGKyspe3ZhciBIPW1bdCtDXTtHPWpbRl0scys9R1soLTE2Nzc3MjE2JkgpPj4+MjRdLHArPUdbKDE2NzExNjgwJkgpPj4xNl0scSs9R1soNjUyODAmSCk+PjhdLHIrPUdbMjU1JkhdLG8rPWlbRl0sdCsrfXU9QytELHlbdV09cy9vLHpbdV09cC9vLEFbdV09cS9vLEJbdV09ci9vfUMrPWV9Zm9yKEM9MCx2PS1nLHc9diplLEU9MDtFPGs7RSsrKXtmb3IoRD0wO0Q8ZTtEKyspe2lmKHI9cT1wPXM9bz0wLHY8MCl4PXU9LXYsdD1EO2Vsc2V7aWYodj49aylicmVhazt4PTAsdT12LHQ9RCt3fWZvcihGPXg7RjxoJiYhKHU+PWspO0YrKylHPWpbRl0scys9R1t5W3RdXSxwKz1HW3pbdF1dLHErPUdbQVt0XV0scis9R1tCW3RdXSxvKz1pW0ZdLHUrKyx0Kz1lO21bRCtDXT1zL288PDI0fHAvbzw8MTZ8cS9vPDw4fHIvb31DKz1lLHcrPWUsdisrfWYuX3NldFBpeGVscyhjLG0pfXZhciBmPXt9O2YuX3RvUGl4ZWxzPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgSW1hZ2VEYXRhP2EuZGF0YTphLmdldENvbnRleHQoXCIyZFwiKS5nZXRJbWFnZURhdGEoMCwwLGEud2lkdGgsYS5oZWlnaHQpLmRhdGF9LGYuX2dldEFSR0I9ZnVuY3Rpb24oYSxiKXt2YXIgYz00KmI7cmV0dXJuIGFbYyszXTw8MjQmNDI3ODE5MDA4MHxhW2NdPDwxNiYxNjcxMTY4MHxhW2MrMV08PDgmNjUyODB8MjU1JmFbYysyXX0sZi5fc2V0UGl4ZWxzPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZD0wLGU9YS5sZW5ndGg7ZDxlO2QrKyljPTQqZCxhW2MrMF09KDE2NzExNjgwJmJbZF0pPj4+MTYsYVtjKzFdPSg2NTI4MCZiW2RdKT4+PjgsYVtjKzJdPTI1NSZiW2RdLGFbYyszXT0oNDI3ODE5MDA4MCZiW2RdKT4+PjI0fSxmLl90b0ltYWdlRGF0YT1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEltYWdlRGF0YT9hOmEuZ2V0Q29udGV4dChcIjJkXCIpLmdldEltYWdlRGF0YSgwLDAsYS53aWR0aCxhLmhlaWdodCl9LGYuX2NyZWF0ZUltYWdlRGF0YT1mdW5jdGlvbihhLGIpe3JldHVybiBmLl90bXBDYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxmLl90bXBDdHg9Zi5fdG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKSx0aGlzLl90bXBDdHguY3JlYXRlSW1hZ2VEYXRhKGEsYil9LGYuYXBwbHk9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0Q29udGV4dChcIjJkXCIpLGU9ZC5nZXRJbWFnZURhdGEoMCwwLGEud2lkdGgsYS5oZWlnaHQpLGY9YihlLGMpO2YgaW5zdGFuY2VvZiBJbWFnZURhdGE/ZC5wdXRJbWFnZURhdGEoZiwwLDAsMCwwLGEud2lkdGgsYS5oZWlnaHQpOmQucHV0SW1hZ2VEYXRhKGUsMCwwLDAsMCxhLndpZHRoLGEuaGVpZ2h0KX0sZi50aHJlc2hvbGQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1mLl90b1BpeGVscyhhKTt2b2lkIDA9PT1iJiYoYj0uNSk7Zm9yKHZhciBkPU1hdGguZmxvb3IoMjU1KmIpLGU9MDtlPGMubGVuZ3RoO2UrPTQpe3ZhciBnLGg9Y1tlXSxpPWNbZSsxXSxqPWNbZSsyXSxrPS4yMTI2KmgrLjcxNTIqaSsuMDcyMipqO2c9az49ZD8yNTU6MCxjW2VdPWNbZSsxXT1jW2UrMl09Z319LGYuZ3JheT1mdW5jdGlvbihhKXtmb3IodmFyIGI9Zi5fdG9QaXhlbHMoYSksYz0wO2M8Yi5sZW5ndGg7Yys9NCl7dmFyIGQ9YltjXSxlPWJbYysxXSxnPWJbYysyXSxoPS4yMTI2KmQrLjcxNTIqZSsuMDcyMipnO2JbY109YltjKzFdPWJbYysyXT1ofX0sZi5vcGFxdWU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWYuX3RvUGl4ZWxzKGEpLGM9MDtjPGIubGVuZ3RoO2MrPTQpYltjKzNdPTI1NTtyZXR1cm4gYn0sZi5pbnZlcnQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWYuX3RvUGl4ZWxzKGEpLGM9MDtjPGIubGVuZ3RoO2MrPTQpYltjXT0yNTUtYltjXSxiW2MrMV09MjU1LWJbYysxXSxiW2MrMl09MjU1LWJbYysyXX0sZi5wb3N0ZXJpemU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1mLl90b1BpeGVscyhhKTtpZihiPDJ8fGI+MjU1KXRocm93IG5ldyBFcnJvcihcIkxldmVsIG11c3QgYmUgZ3JlYXRlciB0aGFuIDIgYW5kIGxlc3MgdGhhbiAyNTUgZm9yIHBvc3Rlcml6ZVwiKTtmb3IodmFyIGQ9Yi0xLGU9MDtlPGMubGVuZ3RoO2UrPTQpe3ZhciBnPWNbZV0saD1jW2UrMV0saT1jW2UrMl07Y1tlXT0yNTUqKGcqYj4+OCkvZCxjW2UrMV09MjU1KihoKmI+PjgpL2QsY1tlKzJdPTI1NSooaSpiPj44KS9kfX0sZi5kaWxhdGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZCxlLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdD1mLl90b1BpeGVscyhhKSx1PTAsdj10Lmxlbmd0aD90Lmxlbmd0aC80OjAsdz1uZXcgSW50MzJBcnJheSh2KTt1PHY7KWZvcihiPXUsYz11K2Eud2lkdGg7dTxjOylkPWU9Zi5fZ2V0QVJHQih0LHUpLGk9dS0xLGg9dSsxLGo9dS1hLndpZHRoLGs9dSthLndpZHRoLGk8YiYmKGk9dSksaD49YyYmKGg9dSksajwwJiYoaj0wKSxrPj12JiYoaz11KSxuPWYuX2dldEFSR0IodCxqKSxtPWYuX2dldEFSR0IodCxpKSxvPWYuX2dldEFSR0IodCxrKSxsPWYuX2dldEFSR0IodCxoKSxnPTc3KihkPj4xNiYyNTUpKzE1MSooZD4+OCYyNTUpKzI4KigyNTUmZCkscT03NyoobT4+MTYmMjU1KSsxNTEqKG0+PjgmMjU1KSsyOCooMjU1Jm0pLHA9NzcqKGw+PjE2JjI1NSkrMTUxKihsPj44JjI1NSkrMjgqKDI1NSZsKSxyPTc3KihuPj4xNiYyNTUpKzE1MSoobj4+OCYyNTUpKzI4KigyNTUmbikscz03Nyoobz4+MTYmMjU1KSsxNTEqKG8+PjgmMjU1KSsyOCooMjU1Jm8pLHE+ZyYmKGU9bSxnPXEpLHA+ZyYmKGU9bCxnPXApLHI+ZyYmKGU9bixnPXIpLHM+ZyYmKGU9byxnPXMpLHdbdSsrXT1lO2YuX3NldFBpeGVscyh0LHcpfSxmLmVyb2RlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQsZSxnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ9Zi5fdG9QaXhlbHMoYSksdT0wLHY9dC5sZW5ndGg/dC5sZW5ndGgvNDowLHc9bmV3IEludDMyQXJyYXkodik7dTx2Oylmb3IoYj11LGM9dSthLndpZHRoO3U8YzspZD1lPWYuX2dldEFSR0IodCx1KSxpPXUtMSxoPXUrMSxqPXUtYS53aWR0aCxrPXUrYS53aWR0aCxpPGImJihpPXUpLGg+PWMmJihoPXUpLGo8MCYmKGo9MCksaz49diYmKGs9dSksbj1mLl9nZXRBUkdCKHQsaiksbT1mLl9nZXRBUkdCKHQsaSksbz1mLl9nZXRBUkdCKHQsayksbD1mLl9nZXRBUkdCKHQsaCksZz03NyooZD4+MTYmMjU1KSsxNTEqKGQ+PjgmMjU1KSsyOCooMjU1JmQpLHE9NzcqKG0+PjE2JjI1NSkrMTUxKihtPj44JjI1NSkrMjgqKDI1NSZtKSxwPTc3KihsPj4xNiYyNTUpKzE1MSoobD4+OCYyNTUpKzI4KigyNTUmbCkscj03Nyoobj4+MTYmMjU1KSsxNTEqKG4+PjgmMjU1KSsyOCooMjU1Jm4pLHM9NzcqKG8+PjE2JjI1NSkrMTUxKihvPj44JjI1NSkrMjgqKDI1NSZvKSxxPGcmJihlPW0sZz1xKSxwPGcmJihlPWwsZz1wKSxyPGcmJihlPW4sZz1yKSxzPGcmJihlPW8sZz1zKSx3W3UrK109ZTtmLl9zZXRQaXhlbHModCx3KX07dmFyIGcsaCxpLGo7Zi5ibHVyPWZ1bmN0aW9uKGEsYil7ZShhLGIpfSxiLmV4cG9ydHM9Zn0se31dLDQzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPVtdO2QucHJvdG90eXBlLmNyZWF0ZUltYWdlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZUltYWdlXCIsYXJndW1lbnRzKSxuZXcgZC5JbWFnZShhLGIpfSxkLnByb3RvdHlwZS5zYXZlQ2FudmFzPWZ1bmN0aW9uKCl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZUNhbnZhc1wiLGFyZ3VtZW50cyk7dmFyIGEsYixjLGU9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2FyZ3VtZW50c1swXWluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQ/KGE9YXJndW1lbnRzWzBdLGUuc2hpZnQoKSk6YXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkLkVsZW1lbnQ/KGE9YXJndW1lbnRzWzBdLmVsdCxlLnNoaWZ0KCkpOmE9dGhpcy5fY3VyRWxlbWVudCYmdGhpcy5fY3VyRWxlbWVudC5lbHQsZS5sZW5ndGg+PTEmJihiPWVbMF0pLGUubGVuZ3RoPj0yJiYoYz1lWzFdKSxjPWN8fGQucHJvdG90eXBlLl9jaGVja0ZpbGVFeHRlbnNpb24oYixjKVsxXXx8XCJwbmdcIjt2YXIgZjtzd2l0Y2goYyl7ZGVmYXVsdDpmPVwiaW1hZ2UvcG5nXCI7YnJlYWs7Y2FzZVwianBlZ1wiOmNhc2VcImpwZ1wiOmY9XCJpbWFnZS9qcGVnXCJ9YS50b0Jsb2IoZnVuY3Rpb24oYSl7ZC5wcm90b3R5cGUuZG93bmxvYWRGaWxlKGEsYixjKX0sZil9LGQucHJvdG90eXBlLnNhdmVGcmFtZXM9ZnVuY3Rpb24oYSxiLGMsZixnKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlRnJhbWVzXCIsYXJndW1lbnRzKTt2YXIgaD1jfHwzO2g9ZC5wcm90b3R5cGUuY29uc3RyYWluKGgsMCwxNSksaCo9MWUzO3ZhciBpPWZ8fDE1O2k9ZC5wcm90b3R5cGUuY29uc3RyYWluKGksMCwyMik7dmFyIGo9MCxrPWQucHJvdG90eXBlLl9tYWtlRnJhbWUsbD10aGlzLl9jdXJFbGVtZW50LmVsdCxtPXNldEludGVydmFsKGZ1bmN0aW9uKCl7ayhhK2osYixsKSxqKyt9LDFlMy9pKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoY2xlYXJJbnRlcnZhbChtKSxnKWcoZSk7ZWxzZSBmb3IodmFyIGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIGI9ZVthXTtkLnByb3RvdHlwZS5kb3dubG9hZEZpbGUoYi5pbWFnZURhdGEsYi5maWxlbmFtZSxiLmV4dCl9ZT1bXX0saCsuMDEpfSxkLnByb3RvdHlwZS5fbWFrZUZyYW1lPWZ1bmN0aW9uKGEsYixjKXt2YXIgZDtkPXRoaXM/dGhpcy5fY3VyRWxlbWVudC5lbHQ6Yzt2YXIgZjtpZihiKXN3aXRjaChiLnRvTG93ZXJDYXNlKCkpe2Nhc2VcInBuZ1wiOmY9XCJpbWFnZS9wbmdcIjticmVhaztjYXNlXCJqcGVnXCI6Y2FzZVwianBnXCI6Zj1cImltYWdlL2pwZWdcIjticmVhaztkZWZhdWx0OmY9XCJpbWFnZS9wbmdcIn1lbHNlIGI9XCJwbmdcIixmPVwiaW1hZ2UvcG5nXCI7dmFyIGc9ZC50b0RhdGFVUkwoZik7Zz1nLnJlcGxhY2UoZixcImltYWdlL29jdGV0LXN0cmVhbVwiKTt2YXIgaD17fTtoLmltYWdlRGF0YT1nLGguZmlsZW5hbWU9YSxoLmV4dD1iLGUucHVzaChoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNDQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7cmV0dXJuIGE+MCYmYTxiP2E6Yn12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpLGY9YShcIi4vZmlsdGVyc1wiKSxnPWEoXCIuLi9jb3JlL2hlbHBlcnNcIiksaD1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxlLnByb3RvdHlwZS5sb2FkSW1hZ2U9ZnVuY3Rpb24oYSxiLGMpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRJbWFnZVwiLGFyZ3VtZW50cyk7dmFyIGQ9bmV3IEltYWdlLGY9bmV3IGUuSW1hZ2UoMSwxLHRoaXMpLGc9dGhpcztyZXR1cm4gZC5vbmxvYWQ9ZnVuY3Rpb24oKXtmLndpZHRoPWYuY2FudmFzLndpZHRoPWQud2lkdGgsZi5oZWlnaHQ9Zi5jYW52YXMuaGVpZ2h0PWQuaGVpZ2h0LGYuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGQsMCwwKSxmLm1vZGlmaWVkPSEwLFwiZnVuY3Rpb25cIj09dHlwZW9mIGImJmIoZiksZy5fZGVjcmVtZW50UHJlbG9hZCgpfSxkLm9uZXJyb3I9ZnVuY3Rpb24oYSl7ZS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDAsZC5zcmMpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJmMoYSl9LDAhPT1hLmluZGV4T2YoXCJkYXRhOmltYWdlL1wiKSYmKGQuY3Jvc3NPcmlnaW49XCJBbm9ueW1vdXNcIiksZC5zcmM9YSxmfSxlLnByb3RvdHlwZS5pbWFnZT1mdW5jdGlvbihhLGIsYyxmLGgsaSxqLGssbCl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaW1hZ2VcIixhcmd1bWVudHMpO3ZhciBtPWEud2lkdGgsbj1hLmhlaWdodDthLmVsdCYmYS5lbHQudmlkZW9XaWR0aCYmIWEuY2FudmFzJiYobT1hLmVsdC52aWRlb1dpZHRoLG49YS5lbHQudmlkZW9IZWlnaHQpO3ZhciBvPWIscD1jLHE9Znx8bSxyPWh8fG4scz1pfHwwLHQ9anx8MCx1PWt8fG0sdj1sfHxuO3U9ZCh1LG0pLHY9ZCh2LG4pO3ZhciB3PTE7YS5lbHQmJiFhLmNhbnZhcyYmYS5lbHQuc3R5bGUud2lkdGgmJih3PWEuZWx0LnZpZGVvV2lkdGgmJiFmP2EuZWx0LnZpZGVvV2lkdGg6YS5lbHQud2lkdGgsdy89cGFyc2VJbnQoYS5lbHQuc3R5bGUud2lkdGgsMTApKSxzKj13LHQqPXcsdio9dyx1Kj13O3ZhciB4PWcubW9kZUFkanVzdChvLHAscSxyLHRoaXMuX3JlbmRlcmVyLl9pbWFnZU1vZGUpO3RoaXMuX3JlbmRlcmVyLmltYWdlKGEscyx0LHUsdix4LngseC55LHgudyx4LmgpfSxlLnByb3RvdHlwZS50aW50PWZ1bmN0aW9uKCl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGludFwiLGFyZ3VtZW50cyk7dmFyIGE9dGhpcy5jb2xvci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fcmVuZGVyZXIuX3RpbnQ9YS5sZXZlbHN9LGUucHJvdG90eXBlLm5vVGludD1mdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl90aW50PW51bGx9LGUucHJvdG90eXBlLl9nZXRUaW50ZWRJbWFnZUNhbnZhcz1mdW5jdGlvbihhKXtpZighYS5jYW52YXMpcmV0dXJuIGE7dmFyIGI9Zi5fdG9QaXhlbHMoYS5jYW52YXMpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtjLndpZHRoPWEuY2FudmFzLndpZHRoLGMuaGVpZ2h0PWEuY2FudmFzLmhlaWdodDtmb3IodmFyIGQ9Yy5nZXRDb250ZXh0KFwiMmRcIiksZT1kLmNyZWF0ZUltYWdlRGF0YShhLmNhbnZhcy53aWR0aCxhLmNhbnZhcy5oZWlnaHQpLGc9ZS5kYXRhLGg9MDtoPGIubGVuZ3RoO2grPTQpe3ZhciBpPWJbaF0saj1iW2grMV0saz1iW2grMl0sbD1iW2grM107Z1toXT1pKnRoaXMuX3JlbmRlcmVyLl90aW50WzBdLzI1NSxnW2grMV09aip0aGlzLl9yZW5kZXJlci5fdGludFsxXS8yNTUsZ1toKzJdPWsqdGhpcy5fcmVuZGVyZXIuX3RpbnRbMl0vMjU1LGdbaCszXT1sKnRoaXMuX3JlbmRlcmVyLl90aW50WzNdLzI1NX1yZXR1cm4gZC5wdXRJbWFnZURhdGEoZSwwLDApLGN9LGUucHJvdG90eXBlLmltYWdlTW9kZT1mdW5jdGlvbihhKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJpbWFnZU1vZGVcIixhcmd1bWVudHMpLGEhPT1oLkNPUk5FUiYmYSE9PWguQ09STkVSUyYmYSE9PWguQ0VOVEVSfHwodGhpcy5fcmVuZGVyZXIuX2ltYWdlTW9kZT1hKX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvaGVscGVyc1wiOjIxLFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL2ZpbHRlcnNcIjo0Mn1dLDQ1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuL2ZpbHRlcnNcIik7ZC5JbWFnZT1mdW5jdGlvbihhLGIpe3RoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iLHRoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksdGhpcy5jYW52YXMud2lkdGg9dGhpcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQ9dGhpcy5oZWlnaHQsdGhpcy5kcmF3aW5nQ29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIiksdGhpcy5fcGl4ZWxEZW5zaXR5PTEsdGhpcy5fbW9kaWZpZWQ9ITEsdGhpcy5fcGl4ZWxzRGlydHk9ITAsdGhpcy5waXhlbHM9W119LGQuSW1hZ2UucHJvdG90eXBlLl9zZXRQcm9wZXJ0eT1mdW5jdGlvbihhLGIpe3RoaXNbYV09Yix0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUubG9hZFBpeGVscz1mdW5jdGlvbigpe2QuUmVuZGVyZXIyRC5wcm90b3R5cGUubG9hZFBpeGVscy5jYWxsKHRoaXMpLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS51cGRhdGVQaXhlbHM9ZnVuY3Rpb24oYSxiLGMsZSl7ZC5SZW5kZXJlcjJELnByb3RvdHlwZS51cGRhdGVQaXhlbHMuY2FsbCh0aGlzLGEsYixjLGUpLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiLGMsZSl7cmV0dXJuIGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZ2V0LmNhbGwodGhpcyxhLGIsYyxlKX0sZC5JbWFnZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXtkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNldC5jYWxsKHRoaXMsYSxiLGMpLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oYSxiKXswPT09YSYmMD09PWI/KGE9dGhpcy5jYW52YXMud2lkdGgsYj10aGlzLmNhbnZhcy5oZWlnaHQpOjA9PT1hP2E9dGhpcy5jYW52YXMud2lkdGgqYi90aGlzLmNhbnZhcy5oZWlnaHQ6MD09PWImJihiPXRoaXMuY2FudmFzLmhlaWdodCphL3RoaXMuY2FudmFzLndpZHRoKSxhPU1hdGguZmxvb3IoYSksYj1NYXRoLmZsb29yKGIpO3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7Yy53aWR0aD1hLGMuaGVpZ2h0PWIsYy5nZXRDb250ZXh0KFwiMmRcIikuZHJhd0ltYWdlKHRoaXMuY2FudmFzLDAsMCx0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQsMCwwLGMud2lkdGgsYy5oZWlnaHQpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMud2lkdGg9YSx0aGlzLmNhbnZhcy5oZWlnaHQ9dGhpcy5oZWlnaHQ9Yix0aGlzLmRyYXdpbmdDb250ZXh0LmRyYXdJbWFnZShjLDAsMCxhLGIsMCwwLGEsYiksdGhpcy5waXhlbHMubGVuZ3RoPjAmJnRoaXMubG9hZFBpeGVscygpLHRoaXMuc2V0TW9kaWZpZWQoITApLHRoaXMuX3BpeGVsc0RpcnR5PSEwfSxkLkltYWdlLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGEsYixjLGUsZixnLGgsaSxqO2lmKDk9PT1hcmd1bWVudHMubGVuZ3RoKWE9YXJndW1lbnRzWzBdLGI9YXJndW1lbnRzWzFdLGM9YXJndW1lbnRzWzJdLGU9YXJndW1lbnRzWzNdLGY9YXJndW1lbnRzWzRdLGc9YXJndW1lbnRzWzVdLGg9YXJndW1lbnRzWzZdLGk9YXJndW1lbnRzWzddLGo9YXJndW1lbnRzWzhdO2Vsc2V7aWYoOCE9PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiU2lnbmF0dXJlIG5vdCBzdXBwb3J0ZWRcIik7YT10aGlzLGI9YXJndW1lbnRzWzBdLGM9YXJndW1lbnRzWzFdLGU9YXJndW1lbnRzWzJdLGY9YXJndW1lbnRzWzNdLGc9YXJndW1lbnRzWzRdLGg9YXJndW1lbnRzWzVdLGk9YXJndW1lbnRzWzZdLGo9YXJndW1lbnRzWzddfWQuUmVuZGVyZXIyRC5fY29weUhlbHBlcih0aGlzLGEsYixjLGUsZixnLGgsaSxqKSx0aGlzLl9waXhlbHNEaXJ0eT0hMH0sZC5JbWFnZS5wcm90b3R5cGUubWFzaz1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT10aGlzKTt2YXIgYj10aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbixjPTE7YSBpbnN0YW5jZW9mIGQuUmVuZGVyZXImJihjPWEuX3BJbnN0Ll9waXhlbERlbnNpdHkpO3ZhciBlPVthLDAsMCxjKmEud2lkdGgsYyphLmhlaWdodCwwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodF07dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249XCJkZXN0aW5hdGlvbi1pblwiLGQuSW1hZ2UucHJvdG90eXBlLmNvcHkuYXBwbHkodGhpcyxlKSx0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1iLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24oYSxiKXtlLmFwcGx5KHRoaXMuY2FudmFzLGVbYS50b0xvd2VyQ2FzZSgpXSxiKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUuYmxlbmQ9ZnVuY3Rpb24oKXtkLnByb3RvdHlwZS5ibGVuZC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLnNldE1vZGlmaWVkPWZ1bmN0aW9uKGEpe3RoaXMuX21vZGlmaWVkPWF9LGQuSW1hZ2UucHJvdG90eXBlLmlzTW9kaWZpZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9kaWZpZWR9LGQuSW1hZ2UucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oYSxiKXtkLnByb3RvdHlwZS5zYXZlQ2FudmFzKHRoaXMuY2FudmFzLGEsYil9LGIuZXhwb3J0cz1kLkltYWdlfSx7XCIuLi9jb3JlL21haW5cIjoyNCxcIi4vZmlsdGVyc1wiOjQyfV0sNDY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4vZmlsdGVyc1wiKTthKFwiLi4vY29sb3IvcDUuQ29sb3JcIiksZC5wcm90b3R5cGUucGl4ZWxzPVtdLGQucHJvdG90eXBlLmJsZW5kPWZ1bmN0aW9uKCl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmxlbmRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyP3RoaXMuX3JlbmRlcmVyLmJsZW5kLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk6ZC5SZW5kZXJlcjJELnByb3RvdHlwZS5ibGVuZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjb3B5XCIsYXJndW1lbnRzKSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmNvcHkuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKGEsYil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZmlsdGVyXCIsYXJndW1lbnRzKSx2b2lkIDAhPT10aGlzLmNhbnZhcz9lLmFwcGx5KHRoaXMuY2FudmFzLGVbYS50b0xvd2VyQ2FzZSgpXSxiKTplLmFwcGx5KHRoaXMuZWx0LGVbYS50b0xvd2VyQ2FzZSgpXSxiKX0sZC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLl9yZW5kZXJlci5nZXQoYSxiLGMsZCl9LGQucHJvdG90eXBlLmxvYWRQaXhlbHM9ZnVuY3Rpb24oKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkUGl4ZWxzXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5sb2FkUGl4ZWxzKCl9LGQucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7dGhpcy5fcmVuZGVyZXIuc2V0KGEsYixjKX0sZC5wcm90b3R5cGUudXBkYXRlUGl4ZWxzPWZ1bmN0aW9uKGEsYixjLGUpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInVwZGF0ZVBpeGVsc1wiLGFyZ3VtZW50cyksMCE9PXRoaXMucGl4ZWxzLmxlbmd0aCYmdGhpcy5fcmVuZGVyZXIudXBkYXRlUGl4ZWxzKGEsYixjLGUpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29sb3IvcDUuQ29sb3JcIjoxNixcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9maWx0ZXJzXCI6NDJ9XSw0NzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiKXt2YXIgYz17fTtpZih2b2lkIDA9PT0oYj1ifHxbXSkpZm9yKHZhciBkPTA7ZDxhLmxlbmd0aDtkKyspYltkLnRvU3RyaW5nKCldPWQ7Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDtlKyspe3ZhciBmPWJbZV0sZz1hW2VdO2NbZl09Z31yZXR1cm4gY31mdW5jdGlvbiBlKGEpe3ZhciBiPW5ldyBpLlhNTCxjPWEuY2hpbGROb2RlcztpZihjJiZjLmxlbmd0aCl7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBmPWUoY1tkXSk7Yi5hZGRDaGlsZChmKX1iLnNldE5hbWUoYS5ub2RlTmFtZSksYi5fc2V0Q29udChhLnRleHRDb250ZW50KSxiLl9zZXRBdHRyaWJ1dGVzKGEpO2Zvcih2YXIgZz0wO2c8Yi5jaGlsZHJlbi5sZW5ndGg7ZysrKWIuY2hpbGRyZW5bZ10ucGFyZW50PWI7cmV0dXJuIGJ9cmV0dXJuIGIuc2V0TmFtZShhLm5vZGVOYW1lKSxiLl9zZXRDb250KGEudGV4dENvbnRlbnQpLGIuX3NldEF0dHJpYnV0ZXMoYSksYn1mdW5jdGlvbiBmKGEpe3JldHVybiBhLnJlcGxhY2UoLyYvZyxcIiZhbXA7XCIpLnJlcGxhY2UoLzwvZyxcIiZsdDtcIikucmVwbGFjZSgvPi9nLFwiJmd0O1wiKS5yZXBsYWNlKC9cIi9nLFwiJnF1b3Q7XCIpLnJlcGxhY2UoLycvZyxcIiYjMDM5O1wiKX1mdW5jdGlvbiBnKGEsYil7YiYmITAhPT1iJiZcInRydWVcIiE9PWJ8fChiPVwiXCIpLGF8fChhPVwidW50aXRsZWRcIik7dmFyIGM9XCJcIjtyZXR1cm4gYSYmYS5pbmRleE9mKFwiLlwiKT4tMSYmKGM9YS5zcGxpdChcIi5cIikucG9wKCkpLGImJmMhPT1iJiYoYz1iLGE9YStcIi5cIitjKSxbYSxjXX1mdW5jdGlvbiBoKGEpe2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYS50YXJnZXQpfXZhciBpPWEoXCIuLi9jb3JlL21haW5cIik7YShcIndoYXR3Zy1mZXRjaFwiKSxhKFwiZXM2LXByb21pc2VcIikucG9seWZpbGwoKTt2YXIgaj1hKFwiZmV0Y2gtanNvbnBcIik7YShcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxpLnByb3RvdHlwZS5sb2FkSlNPTj1mdW5jdGlvbigpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRKU09OXCIsYXJndW1lbnRzKTtmb3IodmFyIGEsYixjLGQ9YXJndW1lbnRzWzBdLGU9e30sZj1cImpzb25cIixnPTE7Zzxhcmd1bWVudHMubGVuZ3RoO2crKyl7dmFyIGg9YXJndW1lbnRzW2ddO1wic3RyaW5nXCI9PXR5cGVvZiBoP1wianNvbnBcIiE9PWgmJlwianNvblwiIT09aHx8KGY9aCk6XCJmdW5jdGlvblwiPT10eXBlb2YgaD9hP2I9aDphPWg6XCJvYmplY3RcIj09dHlwZW9mIGgmJmguaGFzT3duUHJvcGVydHkoXCJqc29ucENhbGxiYWNrXCIpJiYoZj1cImpzb25wXCIsYz1oKX12YXIgaj10aGlzO3JldHVybiB0aGlzLmh0dHBEbyhkLFwiR0VUXCIsYyxmLGZ1bmN0aW9uKGIpe2Zvcih2YXIgYyBpbiBiKWVbY109YltjXTt2b2lkIDAhPT1hJiZhKGIpLGouX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYSl7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDUsZCksIWIpdGhyb3cgYTtiKGEpfSksZX0saS5wcm90b3R5cGUubG9hZFN0cmluZ3M9ZnVuY3Rpb24oKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkU3RyaW5nc1wiLGFyZ3VtZW50cyk7Zm9yKHZhciBhLGIsYz1bXSxkPTE7ZDxhcmd1bWVudHMubGVuZ3RoO2QrKyl7dmFyIGU9YXJndW1lbnRzW2RdO1wiZnVuY3Rpb25cIj09dHlwZW9mIGUmJih2b2lkIDA9PT1hP2E9ZTp2b2lkIDA9PT1iJiYoYj1lKSl9dmFyIGY9dGhpcztyZXR1cm4gaS5wcm90b3R5cGUuaHR0cERvLmNhbGwodGhpcyxhcmd1bWVudHNbMF0sXCJHRVRcIixcInRleHRcIixmdW5jdGlvbihiKXt2YXIgZD1iLnJlcGxhY2UoL1xcclxcbi9nLFwiXFxyXCIpLnJlcGxhY2UoL1xcbi9nLFwiXFxyXCIpLnNwbGl0KC9cXHIvKTtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShjLGQpLHZvaWQgMCE9PWEmJmEoYyksZi5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihhKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoMyxhcmd1bWVudHNbMF0pLCFiKXRocm93IGE7YihhKX0pLGN9LGkucHJvdG90eXBlLmxvYWRUYWJsZT1mdW5jdGlvbihhKXt2YXIgYixjLGU9W10sZj0hMSxnPWEuc3Vic3RyaW5nKGEubGFzdEluZGV4T2YoXCIuXCIpKzEsYS5sZW5ndGgpLGg9XCIsXCIsaj0hMTtcInRzdlwiPT09ZyYmKGg9XCJcXHRcIik7Zm9yKHZhciBrPTE7azxhcmd1bWVudHMubGVuZ3RoO2srKylpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhcmd1bWVudHNba10pdm9pZCAwPT09Yj9iPWFyZ3VtZW50c1trXTp2b2lkIDA9PT1jJiYoYz1hcmd1bWVudHNba10pO2Vsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIGFyZ3VtZW50c1trXSlpZihlLnB1c2goYXJndW1lbnRzW2tdKSxcImhlYWRlclwiPT09YXJndW1lbnRzW2tdJiYoZj0hMCksXCJjc3ZcIj09PWFyZ3VtZW50c1trXSl7aWYoail0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc2V0IG11bHRpcGxlIHNlcGFyYXRvciB0eXBlcy5cIik7aD1cIixcIixqPSEwfWVsc2UgaWYoXCJ0c3ZcIj09PWFyZ3VtZW50c1trXSl7aWYoail0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc2V0IG11bHRpcGxlIHNlcGFyYXRvciB0eXBlcy5cIik7aD1cIlxcdFwiLGo9ITB9dmFyIGw9bmV3IGkuVGFibGUsbT10aGlzO3JldHVybiB0aGlzLmh0dHBEbyhhLFwiR0VUXCIsXCJ0YWJsZVwiLGZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxlPXt9LGc9MCxqPTEsbj0yLG89NCxwPSdcIicscT1cIlxcclwiLHI9XCJcXG5cIixzPVtdLHQ9MCx1PW51bGwsdj1mdW5jdGlvbigpe2UuY3VycmVudFN0YXRlPWcsZS50b2tlbj1cIlwifSx3PWZ1bmN0aW9uKCl7dS5wdXNoKGUudG9rZW4pLHYoKX0seD1mdW5jdGlvbigpe2UuZXNjYXBlZD0hMSx1PVtdLHYoKX0seT1mdW5jdGlvbigpe2UuY3VycmVudFN0YXRlPW8scy5wdXNoKHUpLHU9bnVsbH07Oyl7aWYobnVsbD09KGM9YVt0KytdKSl7aWYoZS5lc2NhcGVkKXRocm93IG5ldyBFcnJvcihcIlVuY2xvc2VkIHF1b3RlIGluIGZpbGUuXCIpO2lmKHUpe3coKSx5KCk7YnJlYWt9fWlmKG51bGw9PT11JiZ4KCksZS5jdXJyZW50U3RhdGU9PT1nKXtpZihjPT09cCl7ZS5lc2NhcGVkPSEwLGUuY3VycmVudFN0YXRlPWo7Y29udGludWV9ZS5jdXJyZW50U3RhdGU9an1pZihlLmN1cnJlbnRTdGF0ZT09PWomJmUuZXNjYXBlZClpZihjPT09cClhW3RdPT09cD8oZS50b2tlbis9cCx0KyspOihlLmVzY2FwZWQ9ITEsZS5jdXJyZW50U3RhdGU9bik7ZWxzZXtpZihjPT09cSljb250aW51ZTtlLnRva2VuKz1jfWVsc2UgYz09PXE/KGFbdF09PT1yJiZ0KyssdygpLHkoKSk6Yz09PXI/KHcoKSx5KCkpOmM9PT1oP3coKTplLmN1cnJlbnRTdGF0ZT09PWomJihlLnRva2VuKz1jKX1pZihmKWwuY29sdW1ucz1zLnNoaWZ0KCk7ZWxzZSBmb3Ioaz0wO2s8c1swXS5sZW5ndGg7aysrKWwuY29sdW1uc1trXT1cIm51bGxcIjt2YXIgejtmb3Ioaz0wO2s8cy5sZW5ndGg7aysrKSgxIT09c1trXS5sZW5ndGh8fFwidW5kZWZpbmVkXCIhPT1zW2tdWzBdJiZcIlwiIT09c1trXVswXSkmJih6PW5ldyBpLlRhYmxlUm93LHouYXJyPXNba10sei5vYmo9ZChzW2tdLGwuY29sdW1ucyksbC5hZGRSb3coeikpO1wiZnVuY3Rpb25cIj09dHlwZW9mIGImJmIobCksbS5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihiKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoMixhKSwhYyl0aHJvdyBiO2MoYil9KSxsfSxpLnByb3RvdHlwZS5sb2FkWE1MPWZ1bmN0aW9uKCl7Zm9yKHZhciBhLGIsYz17fSxkPTE7ZDxhcmd1bWVudHMubGVuZ3RoO2QrKyl7dmFyIGU9YXJndW1lbnRzW2RdO1wiZnVuY3Rpb25cIj09dHlwZW9mIGUmJih2b2lkIDA9PT1hP2E9ZTp2b2lkIDA9PT1iJiYoYj1lKSl9dmFyIGY9dGhpcztyZXR1cm4gdGhpcy5odHRwRG8oYXJndW1lbnRzWzBdLFwiR0VUXCIsXCJ4bWxcIixmdW5jdGlvbihiKXtmb3IodmFyIGQgaW4gYiljW2RdPWJbZF07dm9pZCAwIT09YSYmYShjKSxmLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGEpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcigxLGFyZ3VtZW50c1swXSksIWIpdGhyb3cgYTtiKGEpfSksY30saS5wcm90b3R5cGUubG9hZEJ5dGVzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD17fSxlPXRoaXM7cmV0dXJuIHRoaXMuaHR0cERvKGEsXCJHRVRcIixcImFycmF5QnVmZmVyXCIsZnVuY3Rpb24oYSl7ZC5ieXRlcz1uZXcgVWludDhBcnJheShhKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiJiZiKGQpLGUuX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYil7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDYsYSksIWMpdGhyb3cgYjtjKGIpfSksZH0saS5wcm90b3R5cGUuaHR0cEdldD1mdW5jdGlvbigpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImh0dHBHZXRcIixhcmd1bWVudHMpO3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGEuc3BsaWNlKDEsMCxcIkdFVFwiKSxpLnByb3RvdHlwZS5odHRwRG8uYXBwbHkodGhpcyxhKX0saS5wcm90b3R5cGUuaHR0cFBvc3Q9ZnVuY3Rpb24oKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJodHRwUG9zdFwiLGFyZ3VtZW50cyk7dmFyIGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gYS5zcGxpY2UoMSwwLFwiUE9TVFwiKSxpLnByb3RvdHlwZS5odHRwRG8uYXBwbHkodGhpcyxhKX0saS5wcm90b3R5cGUuaHR0cERvPWZ1bmN0aW9uKCl7Zm9yKHZhciBhLGIsYyxkLGYsZz17fSxoPTAsaz1cInRleHQvcGxhaW5cIixsPWFyZ3VtZW50cy5sZW5ndGgtMTtsPjAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGFyZ3VtZW50c1tsXTtsLS0paCsrO3ZhciBtPWFyZ3VtZW50cy5sZW5ndGgtaCxuPWFyZ3VtZW50c1swXTtpZigyPT09bSYmXCJzdHJpbmdcIj09dHlwZW9mIG4mJlwib2JqZWN0XCI9PXR5cGVvZiBhcmd1bWVudHNbMV0pZD1uZXcgUmVxdWVzdChuLGFyZ3VtZW50c1sxXSksYj1hcmd1bWVudHNbMl0sYz1hcmd1bWVudHNbM107ZWxzZXtmb3IodmFyIG8scD1cIkdFVFwiLHE9MTtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKXt2YXIgcj1hcmd1bWVudHNbcV07aWYoXCJzdHJpbmdcIj09dHlwZW9mIHIpXCJHRVRcIj09PXJ8fFwiUE9TVFwiPT09cnx8XCJQVVRcIj09PXJ8fFwiREVMRVRFXCI9PT1yP3A9cjpcImpzb25cIj09PXJ8fFwianNvbnBcIj09PXJ8fFwiYmluYXJ5XCI9PT1yfHxcImFycmF5QnVmZmVyXCI9PT1yfHxcInhtbFwiPT09cnx8XCJ0ZXh0XCI9PT1yfHxcInRhYmxlXCI9PT1yP2E9cjpvPXI7ZWxzZSBpZihcIm51bWJlclwiPT10eXBlb2YgcilvPXIudG9TdHJpbmcoKTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiByKWlmKHIuaGFzT3duUHJvcGVydHkoXCJqc29ucENhbGxiYWNrXCIpKWZvcih2YXIgcyBpbiByKWdbc109cltzXTtlbHNlIG89SlNPTi5zdHJpbmdpZnkociksaz1cImFwcGxpY2F0aW9uL2pzb25cIjtlbHNlXCJmdW5jdGlvblwiPT10eXBlb2YgciYmKGI/Yz1yOmI9cil9ZD1uZXcgUmVxdWVzdChuLHttZXRob2Q6cCxtb2RlOlwiY29yc1wiLGJvZHk6byxoZWFkZXJzOm5ldyBIZWFkZXJzKHtcIkNvbnRlbnQtVHlwZVwiOmt9KX0pfXJldHVybiBhfHwoYT0tMSE9PW4uaW5kZXhPZihcImpzb25cIik/XCJqc29uXCI6LTEhPT1uLmluZGV4T2YoXCJ4bWxcIik/XCJ4bWxcIjpcInRleHRcIiksZj1cImpzb25wXCI9PT1hP2oobixnKTpmZXRjaChkKSxmPWYudGhlbihmdW5jdGlvbihiKXtpZighYi5vayl7dmFyIGM9bmV3IEVycm9yKGIuYm9keSk7dGhyb3cgYy5zdGF0dXM9Yi5zdGF0dXMsYy5vaz0hMSxjfXZhciBkPWIuaGVhZGVycy5nZXQoXCJjb250ZW50LWxlbmd0aFwiKTtzd2l0Y2goZCYmZD42NGU2JiZpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoNyxuKSxhKXtjYXNlXCJqc29uXCI6Y2FzZVwianNvbnBcIjpyZXR1cm4gYi5qc29uKCk7Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIGIuYmxvYigpO2Nhc2VcImFycmF5QnVmZmVyXCI6cmV0dXJuIGIuYXJyYXlCdWZmZXIoKTtjYXNlXCJ4bWxcIjpyZXR1cm4gYi50ZXh0KCkudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gZSgobmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEsXCJ0ZXh0L3htbFwiKS5kb2N1bWVudEVsZW1lbnQpfSk7ZGVmYXVsdDpyZXR1cm4gYi50ZXh0KCl9fSksZi50aGVuKGJ8fGZ1bmN0aW9uKCl7fSksZi5jYXRjaChjfHxjb25zb2xlLmVycm9yKSxmfSx3aW5kb3cuVVJMPXdpbmRvdy5VUkx8fHdpbmRvdy53ZWJraXRVUkwsaS5wcm90b3R5cGUuX3BXcml0ZXJzPVtdLGkucHJvdG90eXBlLmNyZWF0ZVdyaXRlcj1mdW5jdGlvbihhLGIpe3ZhciBjO2Zvcih2YXIgZCBpbiBpLnByb3RvdHlwZS5fcFdyaXRlcnMpaWYoaS5wcm90b3R5cGUuX3BXcml0ZXJzW2RdLm5hbWU9PT1hKXJldHVybiBjPW5ldyBpLlByaW50V3JpdGVyKGErdGhpcy5taWxsaXMoKSxiKSxpLnByb3RvdHlwZS5fcFdyaXRlcnMucHVzaChjKSxjO3JldHVybiBjPW5ldyBpLlByaW50V3JpdGVyKGEsYiksaS5wcm90b3R5cGUuX3BXcml0ZXJzLnB1c2goYyksY30saS5QcmludFdyaXRlcj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7dGhpcy5uYW1lPWEsdGhpcy5jb250ZW50PVwiXCIsdGhpcy53cml0ZT1mdW5jdGlvbihhKXt0aGlzLmNvbnRlbnQrPWF9LHRoaXMucHJpbnQ9ZnVuY3Rpb24oYSl7dGhpcy5jb250ZW50Kz1hK1wiXFxuXCJ9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmNvbnRlbnQ9XCJcIn0sdGhpcy5jbG9zZT1mdW5jdGlvbigpe3ZhciBkPVtdO2QucHVzaCh0aGlzLmNvbnRlbnQpLGkucHJvdG90eXBlLndyaXRlRmlsZShkLGEsYik7Zm9yKHZhciBlIGluIGkucHJvdG90eXBlLl9wV3JpdGVycylpLnByb3RvdHlwZS5fcFdyaXRlcnNbZV0ubmFtZT09PXRoaXMubmFtZSYmaS5wcm90b3R5cGUuX3BXcml0ZXJzLnNwbGljZShlLDEpO2MuY2xlYXIoKSxjPXt9fX0saS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YXJndW1lbnRzLGU9dGhpcy5fY3VyRWxlbWVudC5lbHQ7aWYoMD09PWQubGVuZ3RoKXJldHVybiB2b2lkIGkucHJvdG90eXBlLnNhdmVDYW52YXMoZSk7aWYoZFswXWluc3RhbmNlb2YgaS5SZW5kZXJlcnx8ZFswXWluc3RhbmNlb2YgaS5HcmFwaGljcylyZXR1cm4gdm9pZCBpLnByb3RvdHlwZS5zYXZlQ2FudmFzKGRbMF0uZWx0LGRbMV0sZFsyXSk7aWYoMT09PWQubGVuZ3RoJiZcInN0cmluZ1wiPT10eXBlb2YgZFswXSlpLnByb3RvdHlwZS5zYXZlQ2FudmFzKGUsZFswXSk7ZWxzZXtzd2l0Y2goZyhkWzFdLGRbMl0pWzFdKXtjYXNlXCJqc29uXCI6cmV0dXJuIHZvaWQgaS5wcm90b3R5cGUuc2F2ZUpTT04oZFswXSxkWzFdLGRbMl0pO2Nhc2VcInR4dFwiOnJldHVybiB2b2lkIGkucHJvdG90eXBlLnNhdmVTdHJpbmdzKGRbMF0sZFsxXSxkWzJdKTtkZWZhdWx0OmRbMF1pbnN0YW5jZW9mIEFycmF5P2kucHJvdG90eXBlLnNhdmVTdHJpbmdzKGRbMF0sZFsxXSxkWzJdKTpkWzBdaW5zdGFuY2VvZiBpLlRhYmxlP2kucHJvdG90eXBlLnNhdmVUYWJsZShkWzBdLGRbMV0sZFsyXSk6ZFswXWluc3RhbmNlb2YgaS5JbWFnZT9pLnByb3RvdHlwZS5zYXZlQ2FudmFzKGRbMF0uY2FudmFzLGRbMV0pOmRbMF1pbnN0YW5jZW9mIGkuU291bmRGaWxlJiZpLnByb3RvdHlwZS5zYXZlU291bmQoZFswXSxkWzFdLGRbMl0sZFszXSl9fX0saS5wcm90b3R5cGUuc2F2ZUpTT049ZnVuY3Rpb24oYSxiLGMpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVKU09OXCIsYXJndW1lbnRzKTt2YXIgZDtkPWM/SlNPTi5zdHJpbmdpZnkoYSk6SlNPTi5zdHJpbmdpZnkoYSx2b2lkIDAsMiksdGhpcy5zYXZlU3RyaW5ncyhkLnNwbGl0KFwiXFxuXCIpLGIsXCJqc29uXCIpfSxpLnByb3RvdHlwZS5zYXZlSlNPTk9iamVjdD1pLnByb3RvdHlwZS5zYXZlSlNPTixpLnByb3RvdHlwZS5zYXZlSlNPTkFycmF5PWkucHJvdG90eXBlLnNhdmVKU09OLGkucHJvdG90eXBlLnNhdmVTdHJpbmdzPWZ1bmN0aW9uKGEsYixjKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlU3RyaW5nc1wiLGFyZ3VtZW50cyk7Zm9yKHZhciBkPWN8fFwidHh0XCIsZT10aGlzLmNyZWF0ZVdyaXRlcihiLGQpLGY9MDtmPGEubGVuZ3RoO2YrKylhLmxlbmd0aCxlLnByaW50KGFbZl0pO2UuY2xvc2UoKSxlLmNsZWFyKCl9LGkucHJvdG90eXBlLnNhdmVUYWJsZT1mdW5jdGlvbihhLGIsYyl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZVRhYmxlXCIsYXJndW1lbnRzKTt2YXIgZDtkPXZvaWQgMD09PWM/Yi5zdWJzdHJpbmcoYi5sYXN0SW5kZXhPZihcIi5cIikrMSxiLmxlbmd0aCk6Yzt2YXIgZT10aGlzLmNyZWF0ZVdyaXRlcihiLGQpLGc9YS5jb2x1bW5zLGg9XCIsXCI7aWYoXCJ0c3ZcIj09PWQmJihoPVwiXFx0XCIpLFwiaHRtbFwiIT09ZCl7aWYoXCIwXCIhPT1nWzBdKXtmb3IodmFyIGo9MDtqPGcubGVuZ3RoO2orKylqPGcubGVuZ3RoLTE/ZS53cml0ZShnW2pdK2gpOmUud3JpdGUoZ1tqXSk7ZS53cml0ZShcIlxcblwiKX1mb3IodmFyIGs9MDtrPGEucm93cy5sZW5ndGg7aysrKXt2YXIgbDtmb3IobD0wO2w8YS5yb3dzW2tdLmFyci5sZW5ndGg7bCsrKWw8YS5yb3dzW2tdLmFyci5sZW5ndGgtMT9lLndyaXRlKGEucm93c1trXS5hcnJbbF0raCk6KGEucm93cy5sZW5ndGgsZS53cml0ZShhLnJvd3Nba10uYXJyW2xdKSk7ZS53cml0ZShcIlxcblwiKX19ZWxzZXtlLnByaW50KFwiPGh0bWw+XCIpLGUucHJpbnQoXCI8aGVhZD5cIik7dmFyIG09JyAgPG1ldGEgaHR0cC1lcXVpdj1cImNvbnRlbnQtdHlwZVwiIGNvbnRlbnQnO2lmKG0rPSc9XCJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOFwiIC8+JyxlLnByaW50KG0pLGUucHJpbnQoXCI8L2hlYWQ+XCIpLGUucHJpbnQoXCI8Ym9keT5cIiksZS5wcmludChcIiAgPHRhYmxlPlwiKSxcIjBcIiE9PWdbMF0pe2UucHJpbnQoXCIgICAgPHRyPlwiKTtmb3IodmFyIG49MDtuPGcubGVuZ3RoO24rKyl7dmFyIG89ZihnW25dKTtlLnByaW50KFwiICAgICAgPHRkPlwiK28pLGUucHJpbnQoXCIgICAgICA8L3RkPlwiKX1lLnByaW50KFwiICAgIDwvdHI+XCIpfWZvcih2YXIgcD0wO3A8YS5yb3dzLmxlbmd0aDtwKyspe2UucHJpbnQoXCIgICAgPHRyPlwiKTtmb3IodmFyIHE9MDtxPGEuY29sdW1ucy5sZW5ndGg7cSsrKXt2YXIgcj1hLnJvd3NbcF0uZ2V0U3RyaW5nKHEpLHM9ZihyKTtlLnByaW50KFwiICAgICAgPHRkPlwiK3MpLGUucHJpbnQoXCIgICAgICA8L3RkPlwiKX1lLnByaW50KFwiICAgIDwvdHI+XCIpfWUucHJpbnQoXCIgIDwvdGFibGU+XCIpLGUucHJpbnQoXCI8L2JvZHk+XCIpLGUucHJpbnQoXCI8L2h0bWw+XCIpfWUuY2xvc2UoKSxlLmNsZWFyKCl9LGkucHJvdG90eXBlLndyaXRlRmlsZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9XCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjtpLnByb3RvdHlwZS5faXNTYWZhcmkoKSYmKGQ9XCJ0ZXh0L3BsYWluXCIpO3ZhciBlPW5ldyBCbG9iKGEse3R5cGU6ZH0pO2kucHJvdG90eXBlLmRvd25sb2FkRmlsZShlLGIsYyl9LGkucHJvdG90eXBlLmRvd25sb2FkRmlsZT1mdW5jdGlvbihiLGMsZCl7dmFyIGU9ZyhjLGQpLGY9ZVswXTtpZihiIGluc3RhbmNlb2YgQmxvYil7cmV0dXJuIHZvaWQgYShcImZpbGUtc2F2ZXJcIikuc2F2ZUFzKGIsZil9dmFyIGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7aWYoai5ocmVmPWIsai5kb3dubG9hZD1mLGoub25jbGljaz1mdW5jdGlvbihhKXtoKGEpLGEuc3RvcFByb3BhZ2F0aW9uKCl9LGouc3R5bGUuZGlzcGxheT1cIm5vbmVcIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGopLGkucHJvdG90eXBlLl9pc1NhZmFyaSgpKXt2YXIgaz1cIkhlbGxvLCBTYWZhcmkgdXNlciEgVG8gZG93bmxvYWQgdGhpcyBmaWxlLi4uXFxuXCI7ays9XCIxLiBHbyB0byBGaWxlIC0tXFx4M2UgU2F2ZSBBcy5cXG5cIixrKz0nMi4gQ2hvb3NlIFwiUGFnZSBTb3VyY2VcIiBhcyB0aGUgRm9ybWF0Llxcbicsays9JzMuIE5hbWUgaXQgd2l0aCB0aGlzIGV4dGVuc2lvbjogLlwiJytlWzFdKydcIicsYWxlcnQoayl9ai5jbGljaygpfSxpLnByb3RvdHlwZS5fY2hlY2tGaWxlRXh0ZW5zaW9uPWcsaS5wcm90b3R5cGUuX2lzU2FmYXJpPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3aW5kb3cuSFRNTEVsZW1lbnQpLmluZGV4T2YoXCJDb25zdHJ1Y3RvclwiKT4wfSxiLmV4cG9ydHM9aX0se1wiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9jb3JlL21haW5cIjoyNCxcImVzNi1wcm9taXNlXCI6NCxcImZldGNoLWpzb25wXCI6NSxcImZpbGUtc2F2ZXJcIjo2LFwid2hhdHdnLWZldGNoXCI6MTJ9XSw0ODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5UYWJsZT1mdW5jdGlvbihhKXt0aGlzLmNvbHVtbnM9W10sdGhpcy5yb3dzPVtdfSxkLlRhYmxlLnByb3RvdHlwZS5hZGRSb3c9ZnVuY3Rpb24oYSl7dmFyIGI9YXx8bmV3IGQuVGFibGVSb3c7aWYodm9pZCAwPT09Yi5hcnJ8fHZvaWQgMD09PWIub2JqKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgVGFibGVSb3c6IFwiK2IpO3JldHVybiBiLnRhYmxlPXRoaXMsdGhpcy5yb3dzLnB1c2goYiksYn0sZC5UYWJsZS5wcm90b3R5cGUucmVtb3ZlUm93PWZ1bmN0aW9uKGEpe3RoaXMucm93c1thXS50YWJsZT1udWxsO3ZhciBiPXRoaXMucm93cy5zcGxpY2UoYSsxLHRoaXMucm93cy5sZW5ndGgpO3RoaXMucm93cy5wb3AoKSx0aGlzLnJvd3M9dGhpcy5yb3dzLmNvbmNhdChiKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0Um93PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvd3NbYV19LGQuVGFibGUucHJvdG90eXBlLmdldFJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3dzfSxkLlRhYmxlLnByb3RvdHlwZS5maW5kUm93PWZ1bmN0aW9uKGEsYil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGIpe2Zvcih2YXIgYz0wO2M8dGhpcy5yb3dzLmxlbmd0aDtjKyspaWYodGhpcy5yb3dzW2NdLm9ialtiXT09PWEpcmV0dXJuIHRoaXMucm93c1tjXX1lbHNlIGZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspaWYodGhpcy5yb3dzW2RdLmFycltiXT09PWEpcmV0dXJuIHRoaXMucm93c1tkXTtyZXR1cm4gbnVsbH0sZC5UYWJsZS5wcm90b3R5cGUuZmluZFJvd3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtpZihcInN0cmluZ1wiPT10eXBlb2YgYilmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKXRoaXMucm93c1tkXS5vYmpbYl09PT1hJiZjLnB1c2godGhpcy5yb3dzW2RdKTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5yb3dzLmxlbmd0aDtlKyspdGhpcy5yb3dzW2VdLmFycltiXT09PWEmJmMucHVzaCh0aGlzLnJvd3NbZV0pO3JldHVybiBjfSxkLlRhYmxlLnByb3RvdHlwZS5tYXRjaFJvdz1mdW5jdGlvbihhLGIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBiKXtmb3IodmFyIGM9MDtjPHRoaXMucm93cy5sZW5ndGg7YysrKWlmKHRoaXMucm93c1tjXS5hcnJbYl0ubWF0Y2goYSkpcmV0dXJuIHRoaXMucm93c1tjXX1lbHNlIGZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspaWYodGhpcy5yb3dzW2RdLm9ialtiXS5tYXRjaChhKSlyZXR1cm4gdGhpcy5yb3dzW2RdO3JldHVybiBudWxsfSxkLlRhYmxlLnByb3RvdHlwZS5tYXRjaFJvd3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtpZihcIm51bWJlclwiPT10eXBlb2YgYilmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKXRoaXMucm93c1tkXS5hcnJbYl0ubWF0Y2goYSkmJmMucHVzaCh0aGlzLnJvd3NbZF0pO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLnJvd3MubGVuZ3RoO2UrKyl0aGlzLnJvd3NbZV0ub2JqW2JdLm1hdGNoKGEpJiZjLnB1c2godGhpcy5yb3dzW2VdKTtyZXR1cm4gY30sZC5UYWJsZS5wcm90b3R5cGUuZ2V0Q29sdW1uPWZ1bmN0aW9uKGEpe3ZhciBiPVtdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhKWZvcih2YXIgYz0wO2M8dGhpcy5yb3dzLmxlbmd0aDtjKyspYi5wdXNoKHRoaXMucm93c1tjXS5vYmpbYV0pO2Vsc2UgZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKyliLnB1c2godGhpcy5yb3dzW2RdLmFyclthXSk7cmV0dXJuIGJ9LGQuVGFibGUucHJvdG90eXBlLmNsZWFyUm93cz1mdW5jdGlvbigpe2RlbGV0ZSB0aGlzLnJvd3MsdGhpcy5yb3dzPVtdfSxkLlRhYmxlLnByb3RvdHlwZS5hZGRDb2x1bW49ZnVuY3Rpb24oYSl7dmFyIGI9YXx8bnVsbDt0aGlzLmNvbHVtbnMucHVzaChiKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0Q29sdW1uQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2x1bW5zLmxlbmd0aH0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0Um93Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3dzLmxlbmd0aH0sZC5UYWJsZS5wcm90b3R5cGUucmVtb3ZlVG9rZW5zPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZyxcIlxcXFwkJlwiKX0sZD1bXSxlPTA7ZTxhLmxlbmd0aDtlKyspZC5wdXNoKGMoYS5jaGFyQXQoZSkpKTt2YXIgZj1uZXcgUmVnRXhwKGQuam9pbihcInxcIiksXCJnXCIpO2lmKHZvaWQgMD09PWIpZm9yKHZhciBnPTA7Zzx0aGlzLmNvbHVtbnMubGVuZ3RoO2crKylmb3IodmFyIGg9MDtoPHRoaXMucm93cy5sZW5ndGg7aCsrKXt2YXIgaT10aGlzLnJvd3NbaF0uYXJyW2ddO2k9aS5yZXBsYWNlKGYsXCJcIiksdGhpcy5yb3dzW2hdLmFycltnXT1pLHRoaXMucm93c1toXS5vYmpbdGhpcy5jb2x1bW5zW2ddXT1pfWVsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIGIpZm9yKHZhciBqPTA7ajx0aGlzLnJvd3MubGVuZ3RoO2orKyl7dmFyIGs9dGhpcy5yb3dzW2pdLm9ialtiXTtrPWsucmVwbGFjZShmLFwiXCIpLHRoaXMucm93c1tqXS5vYmpbYl09azt2YXIgbD10aGlzLmNvbHVtbnMuaW5kZXhPZihiKTt0aGlzLnJvd3Nbal0uYXJyW2xdPWt9ZWxzZSBmb3IodmFyIG09MDttPHRoaXMucm93cy5sZW5ndGg7bSsrKXt2YXIgbj10aGlzLnJvd3NbbV0uYXJyW2JdO249bi5yZXBsYWNlKGYsXCJcIiksdGhpcy5yb3dzW21dLmFycltiXT1uLHRoaXMucm93c1ttXS5vYmpbdGhpcy5jb2x1bW5zW2JdXT1ufX0sZC5UYWJsZS5wcm90b3R5cGUudHJpbT1mdW5jdGlvbihhKXt2YXIgYj1uZXcgUmVnRXhwKFwiIFwiLFwiZ1wiKTtpZih2b2lkIDA9PT1hKWZvcih2YXIgYz0wO2M8dGhpcy5jb2x1bW5zLmxlbmd0aDtjKyspZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKyl7dmFyIGU9dGhpcy5yb3dzW2RdLmFycltjXTtlPWUucmVwbGFjZShiLFwiXCIpLHRoaXMucm93c1tkXS5hcnJbY109ZSx0aGlzLnJvd3NbZF0ub2JqW3RoaXMuY29sdW1uc1tjXV09ZX1lbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBhKWZvcih2YXIgZj0wO2Y8dGhpcy5yb3dzLmxlbmd0aDtmKyspe3ZhciBnPXRoaXMucm93c1tmXS5vYmpbYV07Zz1nLnJlcGxhY2UoYixcIlwiKSx0aGlzLnJvd3NbZl0ub2JqW2FdPWc7dmFyIGg9dGhpcy5jb2x1bW5zLmluZGV4T2YoYSk7dGhpcy5yb3dzW2ZdLmFycltoXT1nfWVsc2UgZm9yKHZhciBpPTA7aTx0aGlzLnJvd3MubGVuZ3RoO2krKyl7dmFyIGo9dGhpcy5yb3dzW2ldLmFyclthXTtqPWoucmVwbGFjZShiLFwiXCIpLHRoaXMucm93c1tpXS5hcnJbYV09aix0aGlzLnJvd3NbaV0ub2JqW3RoaXMuY29sdW1uc1thXV09an19LGQuVGFibGUucHJvdG90eXBlLnJlbW92ZUNvbHVtbj1mdW5jdGlvbihhKXt2YXIgYixjO1wic3RyaW5nXCI9PXR5cGVvZiBhPyhiPWEsYz10aGlzLmNvbHVtbnMuaW5kZXhPZihhKSk6KGM9YSxiPXRoaXMuY29sdW1uc1thXSk7dmFyIGQ9dGhpcy5jb2x1bW5zLnNwbGljZShjKzEsdGhpcy5jb2x1bW5zLmxlbmd0aCk7dGhpcy5jb2x1bW5zLnBvcCgpLHRoaXMuY29sdW1ucz10aGlzLmNvbHVtbnMuY29uY2F0KGQpO2Zvcih2YXIgZT0wO2U8dGhpcy5yb3dzLmxlbmd0aDtlKyspe3ZhciBmPXRoaXMucm93c1tlXS5hcnIsZz1mLnNwbGljZShjKzEsZi5sZW5ndGgpO2YucG9wKCksdGhpcy5yb3dzW2VdLmFycj1mLmNvbmNhdChnKSxkZWxldGUgdGhpcy5yb3dzW2VdLm9ialtiXX19LGQuVGFibGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7dGhpcy5yb3dzW2FdLnNldChiLGMpfSxkLlRhYmxlLnByb3RvdHlwZS5zZXROdW09ZnVuY3Rpb24oYSxiLGMpe3RoaXMucm93c1thXS5zZXROdW0oYixjKX0sZC5UYWJsZS5wcm90b3R5cGUuc2V0U3RyaW5nPWZ1bmN0aW9uKGEsYixjKXt0aGlzLnJvd3NbYV0uc2V0U3RyaW5nKGIsYyl9LGQuVGFibGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnJvd3NbYV0uZ2V0KGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXROdW09ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5yb3dzW2FdLmdldE51bShiKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0U3RyaW5nPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucm93c1thXS5nZXRTdHJpbmcoYil9LGQuVGFibGUucHJvdG90eXBlLmdldE9iamVjdD1mdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkPXt9LGU9MDtlPHRoaXMucm93cy5sZW5ndGg7ZSsrKWlmKGI9dGhpcy5yb3dzW2VdLm9iaixcInN0cmluZ1wiPT10eXBlb2YgYSl7aWYoISh0aGlzLmNvbHVtbnMuaW5kZXhPZihhKT49MCkpdGhyb3cgbmV3IEVycm9yKCdUaGlzIHRhYmxlIGhhcyBubyBjb2x1bW4gbmFtZWQgXCInK2ErJ1wiJyk7Yz1iW2FdLGRbY109Yn1lbHNlIGRbZV09dGhpcy5yb3dzW2VdLm9iajtyZXR1cm4gZH0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0QXJyYXk9ZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sYj0wO2I8dGhpcy5yb3dzLmxlbmd0aDtiKyspYS5wdXNoKHRoaXMucm93c1tiXS5hcnIpO3JldHVybiBhfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw0OTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5UYWJsZVJvdz1mdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQ9e307YSYmKGI9Ynx8XCIsXCIsYz1hLnNwbGl0KGIpKTtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyl7dmFyIGY9ZSxnPWNbZV07ZFtmXT1nfXRoaXMuYXJyPWMsdGhpcy5vYmo9ZCx0aGlzLnRhYmxlPW51bGx9LGQuVGFibGVSb3cucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXt2YXIgYz10aGlzLnRhYmxlLmNvbHVtbnMuaW5kZXhPZihhKTtpZighKGM+PTApKXRocm93IG5ldyBFcnJvcignVGhpcyB0YWJsZSBoYXMgbm8gY29sdW1uIG5hbWVkIFwiJythKydcIicpO3RoaXMub2JqW2FdPWIsdGhpcy5hcnJbY109Yn1lbHNle2lmKCEoYTx0aGlzLnRhYmxlLmNvbHVtbnMubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IoXCJDb2x1bW4gI1wiK2ErXCIgaXMgb3V0IG9mIHRoZSByYW5nZSBvZiB0aGlzIHRhYmxlXCIpO3RoaXMuYXJyW2FdPWI7dmFyIGQ9dGhpcy50YWJsZS5jb2x1bW5zW2FdO3RoaXMub2JqW2RdPWJ9fSxkLlRhYmxlUm93LnByb3RvdHlwZS5zZXROdW09ZnVuY3Rpb24oYSxiKXt2YXIgYz1wYXJzZUZsb2F0KGIpO3RoaXMuc2V0KGEsYyl9LGQuVGFibGVSb3cucHJvdG90eXBlLnNldFN0cmluZz1mdW5jdGlvbihhLGIpe3ZhciBjPWIudG9TdHJpbmcoKTt0aGlzLnNldChhLGMpfSxkLlRhYmxlUm93LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGE/dGhpcy5vYmpbYV06dGhpcy5hcnJbYV19LGQuVGFibGVSb3cucHJvdG90eXBlLmdldE51bT1mdW5jdGlvbihhKXt2YXIgYjtpZihiPVwic3RyaW5nXCI9PXR5cGVvZiBhP3BhcnNlRmxvYXQodGhpcy5vYmpbYV0pOnBhcnNlRmxvYXQodGhpcy5hcnJbYV0pLFwiTmFOXCI9PT1iLnRvU3RyaW5nKCkpdGhyb3dcIkVycm9yOiBcIit0aGlzLm9ialthXStcIiBpcyBOYU4gKE5vdCBhIE51bWJlcilcIjtyZXR1cm4gYn0sZC5UYWJsZVJvdy5wcm90b3R5cGUuZ2V0U3RyaW5nPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhP3RoaXMub2JqW2FdLnRvU3RyaW5nKCk6dGhpcy5hcnJbYV0udG9TdHJpbmcoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuWE1MPWZ1bmN0aW9uKCl7dGhpcy5uYW1lPW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMuY2hpbGRyZW49W10sdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNvbnRlbnQ9bnVsbH0sZC5YTUwucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0sZC5YTUwucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lfSxkLlhNTC5wcm90b3R5cGUuc2V0TmFtZT1mdW5jdGlvbihhKXt0aGlzLm5hbWU9YX0sZC5YTUwucHJvdG90eXBlLmhhc0NoaWxkcmVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjB9LGQuWE1MLnByb3RvdHlwZS5saXN0Q2hpbGRyZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEubmFtZX0pfSxkLlhNTC5wcm90b3R5cGUuZ2V0Q2hpbGRyZW49ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIGIubmFtZT09PWF9KTp0aGlzLmNoaWxkcmVufSxkLlhNTC5wcm90b3R5cGUuZ2V0Q2hpbGQ9ZnVuY3Rpb24oYSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGEpcmV0dXJuIHRoaXMuY2hpbGRyZW5bYV07Zm9yKHZhciBiPTA7Yjx0aGlzLmNoaWxkcmVuLmxlbmd0aDtiKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bYl07aWYoYy5uYW1lPT09YSlyZXR1cm4gY319LGQuWE1MLnByb3RvdHlwZS5hZGRDaGlsZD1mdW5jdGlvbihhKXthIGluc3RhbmNlb2YgZC5YTUwmJnRoaXMuY2hpbGRyZW4ucHVzaChhKX0sZC5YTUwucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKGEpe3ZhciBiPS0xO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXtmb3IodmFyIGM9MDtjPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2MrKylpZih0aGlzLmNoaWxkcmVuW2NdLm5hbWU9PT1hKXtiPWM7YnJlYWt9fWVsc2UgYj1hOy0xIT09YiYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoYiwxKX0sZC5YTUwucHJvdG90eXBlLmdldEF0dHJpYnV0ZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcykubGVuZ3RofSxkLlhNTC5wcm90b3R5cGUubGlzdEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKX0sZC5YTUwucHJvdG90eXBlLmhhc0F0dHJpYnV0ZT1mdW5jdGlvbihhKXtyZXR1cm4hIXRoaXMuYXR0cmlidXRlc1thXX0sZC5YTUwucHJvdG90eXBlLmdldE51bT1mdW5jdGlvbihhLGIpe3JldHVybiBOdW1iZXIodGhpcy5hdHRyaWJ1dGVzW2FdKXx8Ynx8MH0sZC5YTUwucHJvdG90eXBlLmdldFN0cmluZz1mdW5jdGlvbihhLGIpe3JldHVybiBTdHJpbmcodGhpcy5hdHRyaWJ1dGVzW2FdKXx8Ynx8bnVsbH0sZC5YTUwucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbihhLGIpe3RoaXMuYXR0cmlidXRlc1thXSYmKHRoaXMuYXR0cmlidXRlc1thXT1iKX0sZC5YTUwucHJvdG90eXBlLmdldENvbnRlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY29udGVudHx8YXx8bnVsbH0sZC5YTUwucHJvdG90eXBlLnNldENvbnRlbnQ9ZnVuY3Rpb24oYSl7dGhpcy5jaGlsZHJlbi5sZW5ndGh8fCh0aGlzLmNvbnRlbnQ9YSl9LGQuWE1MLnByb3RvdHlwZS5fc2V0Q29udD1mdW5jdGlvbihhKXt2YXIgYjtiPWEsYj1iLnJlcGxhY2UoL1xcc1xccysvZyxcIixcIiksdGhpcy5jb250ZW50PWJ9LGQuWE1MLnByb3RvdHlwZS5fc2V0QXR0cmlidXRlcz1mdW5jdGlvbihhKXt2YXIgYj17fSxjPWEuYXR0cmlidXRlcztpZihjKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdO2JbZS5ub2RlTmFtZV09ZS5ub2RlVmFsdWV9dGhpcy5hdHRyaWJ1dGVzPWJ9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDUxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgTWF0aC5oeXBvdClyZXR1cm4gTWF0aC5oeXBvdC5hcHBseShudWxsLGFyZ3VtZW50cyk7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsZT1bXSxmPTAsZz0wO2c8ZDtnKyspe3ZhciBoPWFyZ3VtZW50c1tnXVxuO2lmKChoPStoKT09PTEvMHx8aD09PS0xLzApcmV0dXJuIDEvMDtoPU1hdGguYWJzKGgpLGg+ZiYmKGY9aCksZVtnXT1ofTA9PT1mJiYoZj0xKTtmb3IodmFyIGk9MCxqPTAsaz0wO2s8ZDtrKyspe3ZhciBsPWVba10vZixtPWwqbC1qLG49aSttO2o9bi1pLW0saT1ufXJldHVybiBNYXRoLnNxcnQoaSkqZn12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpO2UucHJvdG90eXBlLmFicz1NYXRoLmFicyxlLnByb3RvdHlwZS5jZWlsPU1hdGguY2VpbCxlLnByb3RvdHlwZS5jb25zdHJhaW49ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjb25zdHJhaW5cIixhcmd1bWVudHMpLE1hdGgubWF4KE1hdGgubWluKGEsYyksYil9LGUucHJvdG90eXBlLmRpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZGlzdFwiLGFyZ3VtZW50cyksND09PWFyZ3VtZW50cy5sZW5ndGg/ZChhcmd1bWVudHNbMl0tYXJndW1lbnRzWzBdLGFyZ3VtZW50c1szXS1hcmd1bWVudHNbMV0pOjY9PT1hcmd1bWVudHMubGVuZ3RoP2QoYXJndW1lbnRzWzNdLWFyZ3VtZW50c1swXSxhcmd1bWVudHNbNF0tYXJndW1lbnRzWzFdLGFyZ3VtZW50c1s1XS1hcmd1bWVudHNbMl0pOnZvaWQgMH0sZS5wcm90b3R5cGUuZXhwPU1hdGguZXhwLGUucHJvdG90eXBlLmZsb29yPU1hdGguZmxvb3IsZS5wcm90b3R5cGUubGVycD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxlcnBcIixhcmd1bWVudHMpLGMqKGItYSkrYX0sZS5wcm90b3R5cGUubG9nPU1hdGgubG9nLGUucHJvdG90eXBlLm1hZz1mdW5jdGlvbihhLGIpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYWdcIixhcmd1bWVudHMpLGQoYSxiKX0sZS5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKGEsYixjLGQsZixnKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYXBcIixhcmd1bWVudHMpO3ZhciBoPShhLWIpLyhjLWIpKihmLWQpK2Q7cmV0dXJuIGc/ZDxmP3RoaXMuY29uc3RyYWluKGgsZCxmKTp0aGlzLmNvbnN0cmFpbihoLGYsZCk6aH0sZS5wcm90b3R5cGUubWF4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1heFwiLGFyZ3VtZW50cyksYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBBcnJheT9NYXRoLm1heC5hcHBseShudWxsLGFyZ3VtZW50c1swXSk6TWF0aC5tYXguYXBwbHkobnVsbCxhcmd1bWVudHMpfSxlLnByb3RvdHlwZS5taW49ZnVuY3Rpb24oKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWluXCIsYXJndW1lbnRzKSxhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5P01hdGgubWluLmFwcGx5KG51bGwsYXJndW1lbnRzWzBdKTpNYXRoLm1pbi5hcHBseShudWxsLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlLm5vcm09ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJub3JtXCIsYXJndW1lbnRzKSx0aGlzLm1hcChhLGIsYywwLDEpfSxlLnByb3RvdHlwZS5wb3c9TWF0aC5wb3csZS5wcm90b3R5cGUucm91bmQ9TWF0aC5yb3VuZCxlLnByb3RvdHlwZS5zcT1mdW5jdGlvbihhKXtyZXR1cm4gYSphfSxlLnByb3RvdHlwZS5zcXJ0PU1hdGguc3FydCxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1MjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuY3JlYXRlVmVjdG9yPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGQ/bmV3IGQuVmVjdG9yKHRoaXMsYXJndW1lbnRzKTpuZXcgZC5WZWN0b3IoYSxiLGMpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1MzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkLGU9YShcIi4uL2NvcmUvbWFpblwiKSxmPTQsZz0xPDxmLGg9OCxpPTE8PGgsaj00MDk1LGs9NCxsPS41LG09ZnVuY3Rpb24oYSl7cmV0dXJuLjUqKDEtTWF0aC5jb3MoYSpNYXRoLlBJKSl9O2UucHJvdG90eXBlLm5vaXNlPWZ1bmN0aW9uKGEsYixjKXtpZihiPWJ8fDAsYz1jfHwwLG51bGw9PWQpe2Q9bmV3IEFycmF5KGorMSk7Zm9yKHZhciBlPTA7ZTxqKzE7ZSsrKWRbZV09TWF0aC5yYW5kb20oKX1hPDAmJihhPS1hKSxiPDAmJihiPS1iKSxjPDAmJihjPS1jKTtmb3IodmFyIG4sbyxwLHEscixzPU1hdGguZmxvb3IoYSksdD1NYXRoLmZsb29yKGIpLHU9TWF0aC5mbG9vcihjKSx2PWEtcyx3PWItdCx4PWMtdSx5PTAsej0uNSxBPTA7QTxrO0ErKyl7dmFyIEI9cysodDw8ZikrKHU8PGgpO249bSh2KSxvPW0odykscD1kW0Imal0scCs9biooZFtCKzEmal0tcCkscT1kW0IrZyZqXSxxKz1uKihkW0IrZysxJmpdLXEpLHArPW8qKHEtcCksQis9aSxxPWRbQiZqXSxxKz1uKihkW0IrMSZqXS1xKSxyPWRbQitnJmpdLHIrPW4qKGRbQitnKzEmal0tcikscSs9byooci1xKSxwKz1tKHgpKihxLXApLHkrPXAqeix6Kj1sLHM8PD0xLHYqPTIsdDw8PTEsdyo9Mix1PDw9MSx4Kj0yLHY+PTEmJihzKyssdi0tKSx3Pj0xJiYodCsrLHctLSkseD49MSYmKHUrKyx4LS0pfXJldHVybiB5fSxlLnByb3RvdHlwZS5ub2lzZURldGFpbD1mdW5jdGlvbihhLGIpe2E+MCYmKGs9YSksYj4wJiYobD1iKX0sZS5wcm90b3R5cGUubm9pc2VTZWVkPWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKCl7dmFyIGEsYixjPTQyOTQ5NjcyOTYsZD0xNjY0NTI1LGU9MTAxMzkwNDIyMztyZXR1cm57c2V0U2VlZDpmdW5jdGlvbihkKXtiPWE9KG51bGw9PWQ/TWF0aC5yYW5kb20oKSpjOmQpPj4+MH0sZ2V0U2VlZDpmdW5jdGlvbigpe3JldHVybiBhfSxyYW5kOmZ1bmN0aW9uKCl7cmV0dXJuKGI9KGQqYitlKSVjKS9jfX19KCk7Yi5zZXRTZWVkKGEpLGQ9bmV3IEFycmF5KGorMSk7Zm9yKHZhciBjPTA7YzxqKzE7YysrKWRbY109Yi5yYW5kKCl9LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDU0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLlZlY3Rvcj1mdW5jdGlvbigpe3ZhciBhLGIsYzthcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQ/KHRoaXMucDU9YXJndW1lbnRzWzBdLGE9YXJndW1lbnRzWzFdWzBdfHwwLGI9YXJndW1lbnRzWzFdWzFdfHwwLGM9YXJndW1lbnRzWzFdWzJdfHwwKTooYT1hcmd1bWVudHNbMF18fDAsYj1hcmd1bWVudHNbMV18fDAsYz1hcmd1bWVudHNbMl18fDApLHRoaXMueD1hLHRoaXMueT1iLHRoaXMuej1jfSxkLlZlY3Rvci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cInA1LlZlY3RvciBPYmplY3QgOiBbXCIrdGhpcy54K1wiLCBcIit0aGlzLnkrXCIsIFwiK3RoaXMueitcIl1cIn0sZC5WZWN0b3IucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj8odGhpcy54PWEueHx8MCx0aGlzLnk9YS55fHwwLHRoaXMuej1hLnp8fDAsdGhpcyk6YSBpbnN0YW5jZW9mIEFycmF5Pyh0aGlzLng9YVswXXx8MCx0aGlzLnk9YVsxXXx8MCx0aGlzLno9YVsyXXx8MCx0aGlzKToodGhpcy54PWF8fDAsdGhpcy55PWJ8fDAsdGhpcy56PWN8fDAsdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucDU/bmV3IGQuVmVjdG9yKHRoaXMucDUsW3RoaXMueCx0aGlzLnksdGhpcy56XSk6bmV3IGQuVmVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX0sZC5WZWN0b3IucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj8odGhpcy54Kz1hLnh8fDAsdGhpcy55Kz1hLnl8fDAsdGhpcy56Kz1hLnp8fDAsdGhpcyk6YSBpbnN0YW5jZW9mIEFycmF5Pyh0aGlzLngrPWFbMF18fDAsdGhpcy55Kz1hWzFdfHwwLHRoaXMueis9YVsyXXx8MCx0aGlzKToodGhpcy54Kz1hfHwwLHRoaXMueSs9Ynx8MCx0aGlzLnorPWN8fDAsdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KHRoaXMueC09YS54fHwwLHRoaXMueS09YS55fHwwLHRoaXMuei09YS56fHwwLHRoaXMpOmEgaW5zdGFuY2VvZiBBcnJheT8odGhpcy54LT1hWzBdfHwwLHRoaXMueS09YVsxXXx8MCx0aGlzLnotPWFbMl18fDAsdGhpcyk6KHRoaXMueC09YXx8MCx0aGlzLnktPWJ8fDAsdGhpcy56LT1jfHwwLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUubXVsdD1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYSYmaXNGaW5pdGUoYSk/KHRoaXMueCo9YSx0aGlzLnkqPWEsdGhpcy56Kj1hLHRoaXMpOihjb25zb2xlLndhcm4oXCJwNS5WZWN0b3IucHJvdG90eXBlLm11bHQ6XCIsXCJuIGlzIHVuZGVmaW5lZCBvciBub3QgYSBmaW5pdGUgbnVtYmVyXCIpLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhJiZpc0Zpbml0ZShhKT8wPT09YT8oY29uc29sZS53YXJuKFwicDUuVmVjdG9yLnByb3RvdHlwZS5kaXY6XCIsXCJkaXZpZGUgYnkgMFwiKSx0aGlzKToodGhpcy54Lz1hLHRoaXMueS89YSx0aGlzLnovPWEsdGhpcyk6KGNvbnNvbGUud2FybihcInA1LlZlY3Rvci5wcm90b3R5cGUuZGl2OlwiLFwibiBpcyB1bmRlZmluZWQgb3Igbm90IGEgZmluaXRlIG51bWJlclwiKSx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLm1hZz1mdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy5tYWdTcSgpKX0sZC5WZWN0b3IucHJvdG90eXBlLm1hZ1NxPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy54LGI9dGhpcy55LGM9dGhpcy56O3JldHVybiBhKmErYipiK2MqY30sZC5WZWN0b3IucHJvdG90eXBlLmRvdD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj90aGlzLmRvdChhLngsYS55LGEueik6dGhpcy54KihhfHwwKSt0aGlzLnkqKGJ8fDApK3RoaXMueiooY3x8MCl9LGQuVmVjdG9yLnByb3RvdHlwZS5jcm9zcz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnkqYS56LXRoaXMueiphLnksYz10aGlzLnoqYS54LXRoaXMueCphLnosZT10aGlzLngqYS55LXRoaXMueSphLng7cmV0dXJuIHRoaXMucDU/bmV3IGQuVmVjdG9yKHRoaXMucDUsW2IsYyxlXSk6bmV3IGQuVmVjdG9yKGIsYyxlKX0sZC5WZWN0b3IucHJvdG90eXBlLmRpc3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY29weSgpLnN1Yih0aGlzKS5tYWcoKX0sZC5WZWN0b3IucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMubWFnKCk7cmV0dXJuIDAhPT1hJiZ0aGlzLm11bHQoMS9hKSx0aGlzfSxkLlZlY3Rvci5wcm90b3R5cGUubGltaXQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5tYWdTcSgpO3JldHVybiBiPmEqYSYmdGhpcy5kaXYoTWF0aC5zcXJ0KGIpKS5tdWx0KGEpLHRoaXN9LGQuVmVjdG9yLnByb3RvdHlwZS5zZXRNYWc9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdChhKX0sZC5WZWN0b3IucHJvdG90eXBlLmhlYWRpbmc9ZnVuY3Rpb24oKXt2YXIgYT1NYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpO3JldHVybiB0aGlzLnA1P3RoaXMucDUuX2Zyb21SYWRpYW5zKGEpOmF9LGQuVmVjdG9yLnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5oZWFkaW5nKCkrYTt0aGlzLnA1JiYoYj10aGlzLnA1Ll90b1JhZGlhbnMoYikpO3ZhciBjPXRoaXMubWFnKCk7cmV0dXJuIHRoaXMueD1NYXRoLmNvcyhiKSpjLHRoaXMueT1NYXRoLnNpbihiKSpjLHRoaXN9LGQuVmVjdG9yLnByb3RvdHlwZS5hbmdsZUJldHdlZW49ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kb3QoYSkvKHRoaXMubWFnKCkqYS5tYWcoKSksYz1NYXRoLmFjb3MoTWF0aC5taW4oMSxNYXRoLm1heCgtMSxiKSkpO3JldHVybiB0aGlzLnA1P3RoaXMucDUuX2Zyb21SYWRpYW5zKGMpOmN9LGQuVmVjdG9yLnByb3RvdHlwZS5sZXJwPWZ1bmN0aW9uKGEsYixjLGUpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/dGhpcy5sZXJwKGEueCxhLnksYS56LGIpOih0aGlzLngrPShhLXRoaXMueCkqZXx8MCx0aGlzLnkrPShiLXRoaXMueSkqZXx8MCx0aGlzLnorPShjLXRoaXMueikqZXx8MCx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLmFycmF5PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMueHx8MCx0aGlzLnl8fDAsdGhpcy56fHwwXX0sZC5WZWN0b3IucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihhLGIsYyl7dmFyIGUsZixnO3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KGU9YS54fHwwLGY9YS55fHwwLGc9YS56fHwwKTphIGluc3RhbmNlb2YgQXJyYXk/KGU9YVswXXx8MCxmPWFbMV18fDAsZz1hWzJdfHwwKTooZT1hfHwwLGY9Ynx8MCxnPWN8fDApLHRoaXMueD09PWUmJnRoaXMueT09PWYmJnRoaXMuej09PWd9LGQuVmVjdG9yLmZyb21BbmdsZT1mdW5jdGlvbihhLGIpe3JldHVybiB2b2lkIDA9PT1iJiYoYj0xKSxuZXcgZC5WZWN0b3IoYipNYXRoLmNvcyhhKSxiKk1hdGguc2luKGEpLDApfSxkLlZlY3Rvci5mcm9tQW5nbGVzPWZ1bmN0aW9uKGEsYixjKXt2b2lkIDA9PT1jJiYoYz0xKTt2YXIgZT1NYXRoLmNvcyhiKSxmPU1hdGguc2luKGIpLGc9TWF0aC5jb3MoYSksaD1NYXRoLnNpbihhKTtyZXR1cm4gbmV3IGQuVmVjdG9yKGMqaCpmLC1jKmcsYypoKmUpfSxkLlZlY3Rvci5yYW5kb20yRD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZyb21BbmdsZShNYXRoLnJhbmRvbSgpKmUuVFdPX1BJKX0sZC5WZWN0b3IucmFuZG9tM0Q9ZnVuY3Rpb24oKXt2YXIgYT1NYXRoLnJhbmRvbSgpKmUuVFdPX1BJLGI9MipNYXRoLnJhbmRvbSgpLTEsYz1NYXRoLnNxcnQoMS1iKmIpLGY9YypNYXRoLmNvcyhhKSxnPWMqTWF0aC5zaW4oYSk7cmV0dXJuIG5ldyBkLlZlY3RvcihmLGcsYil9LGQuVmVjdG9yLmFkZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/Yy5zZXQoYSk6Yz1hLmNvcHkoKSxjLmFkZChiKSxjfSxkLlZlY3Rvci5zdWI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP2Muc2V0KGEpOmM9YS5jb3B5KCksYy5zdWIoYiksY30sZC5WZWN0b3IubXVsdD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/Yy5zZXQoYSk6Yz1hLmNvcHkoKSxjLm11bHQoYiksY30sZC5WZWN0b3IuZGl2PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz9jLnNldChhKTpjPWEuY29weSgpLGMuZGl2KGIpLGN9LGQuVmVjdG9yLmRvdD1mdW5jdGlvbihhLGIpe3JldHVybiBhLmRvdChiKX0sZC5WZWN0b3IuY3Jvc3M9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5jcm9zcyhiKX0sZC5WZWN0b3IuZGlzdD1mdW5jdGlvbihhLGIpe3JldHVybiBhLmRpc3QoYil9LGQuVmVjdG9yLmxlcnA9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGQ/ZC5zZXQoYSk6ZD1hLmNvcHkoKSxkLmxlcnAoYixjKSxkfSxkLlZlY3Rvci5tYWc9ZnVuY3Rpb24oYSl7dmFyIGI9YS54LGM9YS55LGQ9YS56LGU9YipiK2MqYytkKmQ7cmV0dXJuIE1hdGguc3FydChlKX0sYi5leHBvcnRzPWQuVmVjdG9yfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw1NTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT0hMSxmPSExLGc9MCxoPWZ1bmN0aW9uKCl7dmFyIGEsYixjPTQyOTQ5NjcyOTYsZD0xNjY0NTI1LGU9MTAxMzkwNDIyMztyZXR1cm57c2V0U2VlZDpmdW5jdGlvbihkKXtiPWE9KG51bGw9PWQ/TWF0aC5yYW5kb20oKSpjOmQpPj4+MH0sZ2V0U2VlZDpmdW5jdGlvbigpe3JldHVybiBhfSxyYW5kOmZ1bmN0aW9uKCl7cmV0dXJuKGI9KGQqYitlKSVjKS9jfX19KCk7ZC5wcm90b3R5cGUucmFuZG9tU2VlZD1mdW5jdGlvbihhKXtoLnNldFNlZWQoYSksZT0hMCxmPSExfSxkLnByb3RvdHlwZS5yYW5kb209ZnVuY3Rpb24oYSxiKXt2YXIgYztpZihjPWU/aC5yYW5kKCk6TWF0aC5yYW5kb20oKSx2b2lkIDA9PT1hKXJldHVybiBjO2lmKHZvaWQgMD09PWIpcmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hW01hdGguZmxvb3IoYyphLmxlbmd0aCldOmMqYTtpZihhPmIpe3ZhciBkPWE7YT1iLGI9ZH1yZXR1cm4gYyooYi1hKSthfSxkLnByb3RvdHlwZS5yYW5kb21HYXVzc2lhbj1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxoO2lmKGYpYz1nLGY9ITE7ZWxzZXtkb3tkPXRoaXMucmFuZG9tKDIpLTEsZT10aGlzLnJhbmRvbSgyKS0xLGg9ZCpkK2UqZX13aGlsZShoPj0xKTtoPU1hdGguc3FydCgtMipNYXRoLmxvZyhoKS9oKSxjPWQqaCxnPWUqaCxmPSEwfXZhciBpPWF8fDA7cmV0dXJuIGMqKGJ8fDEpK2l9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDU2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLnByb3RvdHlwZS5fYW5nbGVNb2RlPWUuUkFESUFOUyxkLnByb3RvdHlwZS5hY29zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9mcm9tUmFkaWFucyhNYXRoLmFjb3MoYSkpfSxkLnByb3RvdHlwZS5hc2luPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9mcm9tUmFkaWFucyhNYXRoLmFzaW4oYSkpfSxkLnByb3RvdHlwZS5hdGFuPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9mcm9tUmFkaWFucyhNYXRoLmF0YW4oYSkpfSxkLnByb3RvdHlwZS5hdGFuMj1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9mcm9tUmFkaWFucyhNYXRoLmF0YW4yKGEsYikpfSxkLnByb3RvdHlwZS5jb3M9ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguY29zKHRoaXMuX3RvUmFkaWFucyhhKSl9LGQucHJvdG90eXBlLnNpbj1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5zaW4odGhpcy5fdG9SYWRpYW5zKGEpKX0sZC5wcm90b3R5cGUudGFuPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnRhbih0aGlzLl90b1JhZGlhbnMoYSkpfSxkLnByb3RvdHlwZS5kZWdyZWVzPWZ1bmN0aW9uKGEpe3JldHVybiBhKmUuUkFEX1RPX0RFR30sZC5wcm90b3R5cGUucmFkaWFucz1mdW5jdGlvbihhKXtyZXR1cm4gYSplLkRFR19UT19SQUR9LGQucHJvdG90eXBlLmFuZ2xlTW9kZT1mdW5jdGlvbihhKXthIT09ZS5ERUdSRUVTJiZhIT09ZS5SQURJQU5TfHwodGhpcy5fYW5nbGVNb2RlPWEpfSxkLnByb3RvdHlwZS5fdG9SYWRpYW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hbmdsZU1vZGU9PT1lLkRFR1JFRVM/YSplLkRFR19UT19SQUQ6YX0sZC5wcm90b3R5cGUuX3RvRGVncmVlcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYW5nbGVNb2RlPT09ZS5SQURJQU5TP2EqZS5SQURfVE9fREVHOmF9LGQucHJvdG90eXBlLl9mcm9tUmFkaWFucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYW5nbGVNb2RlPT09ZS5ERUdSRUVTP2EqZS5SQURfVE9fREVHOmF9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw1NzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUudGV4dEFsaWduPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRBbGlnblwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dEFsaWduLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRMZWFkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0TGVhZGluZ1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dExlYWRpbmcuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dFNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRTaXplXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0U2l6ZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0U3R5bGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRTdHlsZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dFN0eWxlLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRXaWR0aD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dFdpZHRoXCIsYXJndW1lbnRzKSwwPT09YS5sZW5ndGg/MDp0aGlzLl9yZW5kZXJlci50ZXh0V2lkdGguYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dEFzY2VudD1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0QXNjZW50XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0QXNjZW50KCl9LGQucHJvdG90eXBlLnRleHREZXNjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHREZXNjZW50XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0RGVzY2VudCgpfSxkLnByb3RvdHlwZS5fdXBkYXRlVGV4dE1ldHJpY3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3VwZGF0ZVRleHRNZXRyaWNzKCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDU4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKSxmPWEoXCJvcGVudHlwZS5qc1wiKTthKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGQucHJvdG90eXBlLmxvYWRGb250PWZ1bmN0aW9uKGEsYixjKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkRm9udFwiLGFyZ3VtZW50cyk7dmFyIGU9bmV3IGQuRm9udCh0aGlzKSxnPXRoaXM7cmV0dXJuIGYubG9hZChhLGZ1bmN0aW9uKGYsaCl7aWYoZilyZXR1cm4gdm9pZCAwIT09Yz9jKGYpOihkLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoNCxhKSx2b2lkIGNvbnNvbGUuZXJyb3IoZixhKSk7ZS5mb250PWgsdm9pZCAwIT09YiYmYihlKSxnLl9kZWNyZW1lbnRQcmVsb2FkKCk7dmFyIGksaixrPVtcInR0ZlwiLFwib3RmXCIsXCJ3b2ZmXCIsXCJ3b2ZmMlwiXSxsPWEuc3BsaXQoXCJcXFxcXCIpLnBvcCgpLnNwbGl0KFwiL1wiKS5wb3AoKSxtPWwubGFzdEluZGV4T2YoXCIuXCIpLG49bTwxP251bGw6bC5zdWJzdHIobSsxKTtrLmluZGV4T2Yobik+LTEmJihpPWwuc3Vic3RyKDAsbSksaj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIiksai5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlxcbkBmb250LWZhY2Uge1xcbmZvbnQtZmFtaWx5OiBcIitpK1wiO1xcbnNyYzogdXJsKFwiK2ErXCIpO1xcbn1cXG5cIikpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaikpfSksZX0sZC5wcm90b3R5cGUudGV4dD1mdW5jdGlvbihhLGIsYyxlLGYpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9GaWxsfHx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2U/dGhpcy5fcmVuZGVyZXIudGV4dC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpOnRoaXN9LGQucHJvdG90eXBlLnRleHRGb250PWZ1bmN0aW9uKGEsYil7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dEZvbnRcIixhcmd1bWVudHMpLGFyZ3VtZW50cy5sZW5ndGgpe2lmKCFhKXRocm93IG5ldyBFcnJvcihcIm51bGwgZm9udCBwYXNzZWQgdG8gdGV4dEZvbnRcIik7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl90ZXh0Rm9udFwiLGEpLGImJih0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfdGV4dFNpemVcIixiKSx0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfdGV4dExlYWRpbmdcIixiKmUuX0RFRkFVTFRfTEVBRE1VTFQpKSx0aGlzLl9yZW5kZXJlci5fYXBwbHlUZXh0UHJvcGVydGllcygpfXJldHVybiB0aGlzLl9yZW5kZXJlci5fdGV4dEZvbnR9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9jb3JlL21haW5cIjoyNCxcIm9wZW50eXBlLmpzXCI6MTB9XSw1OTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiKXtmb3IodmFyIGM9aChiLHtzYW1wbGVGYWN0b3I6LjEsc2ltcGxpZnlUaHJlc2hvbGQ6MH0pLGQ9bihhLDAsMSksZj1kLyhkKmMuc2FtcGxlRmFjdG9yKSxnPVtdLGk9MDtpPGQ7aSs9ZilnLnB1c2gobihhLGkpKTtyZXR1cm4gYy5zaW1wbGlmeVRocmVzaG9sZCYmZShnLGMuc2ltcGxpZnlUaHJlc2hvbGQpLGd9ZnVuY3Rpb24gZShhLGIpe2I9dm9pZCAwPT09Yj8wOmI7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aC0xO2EubGVuZ3RoPjMmJmQ+PTA7LS1kKWooaShhLGQtMSksaShhLGQpLGkoYSxkKzEpLGIpJiYoYS5zcGxpY2UoZCVhLmxlbmd0aCwxKSxjKyspO3JldHVybiBjfWZ1bmN0aW9uIGYoYSl7Zm9yKHZhciBiLGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCsrKVwiTVwiPT09YVtkXS50eXBlJiYoYiYmYy5wdXNoKGIpLGI9W10pLGIucHVzaChnKGFbZF0pKTtyZXR1cm4gYy5wdXNoKGIpLGN9ZnVuY3Rpb24gZyhhKXt2YXIgYj1bYS50eXBlXTtyZXR1cm5cIk1cIj09PWEudHlwZXx8XCJMXCI9PT1hLnR5cGU/Yi5wdXNoKGEueCxhLnkpOlwiQ1wiPT09YS50eXBlP2IucHVzaChhLngxLGEueTEsYS54MixhLnkyLGEueCxhLnkpOlwiUVwiPT09YS50eXBlJiZiLnB1c2goYS54MSxhLnkxLGEueCxhLnkpLGJ9ZnVuY3Rpb24gaChhLGIpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiBhKWE9YjtlbHNlIGZvcih2YXIgYyBpbiBiKXZvaWQgMD09PWFbY10mJihhW2NdPWJbY10pO3JldHVybiBhfWZ1bmN0aW9uIGkoYSxiKXt2YXIgYz1hLmxlbmd0aDtyZXR1cm4gYVtiPDA/YiVjK2M6YiVjXX1mdW5jdGlvbiBqKGEsYixjLGQpe2lmKCFkKXJldHVybiAwPT09ayhhLGIsYyk7dm9pZCAwPT09ai50bXBQb2ludDEmJihqLnRtcFBvaW50MT1bXSxqLnRtcFBvaW50Mj1bXSk7dmFyIGU9ai50bXBQb2ludDEsZj1qLnRtcFBvaW50MjtlLng9Yi54LWEueCxlLnk9Yi55LWEueSxmLng9Yy54LWIueCxmLnk9Yy55LWIueTt2YXIgZz1lLngqZi54K2UueSpmLnksaD1NYXRoLnNxcnQoZS54KmUueCtlLnkqZS55KSxpPU1hdGguc3FydChmLngqZi54K2YueSpmLnkpO3JldHVybiBNYXRoLmFjb3MoZy8oaCppKSk8ZH1mdW5jdGlvbiBrKGEsYixjKXtyZXR1cm4oYlswXS1hWzBdKSooY1sxXS1hWzFdKS0oY1swXS1hWzBdKSooYlsxXS1hWzFdKX1mdW5jdGlvbiBsKGEsYixjLGQsZSxmLGcsaCxpKXt2YXIgaj0xLWksaz1NYXRoLnBvdyhqLDMpLGw9TWF0aC5wb3coaiwyKSxtPWkqaSxuPW0qaSxvPWsqYSszKmwqaSpjKzMqaippKmkqZStuKmcscD1rKmIrMypsKmkqZCszKmoqaSppKmYrbipoLHE9YSsyKmkqKGMtYSkrbSooZS0yKmMrYSkscj1iKzIqaSooZC1iKSttKihmLTIqZCtiKSxzPWMrMippKihlLWMpK20qKGctMiplK2MpLHQ9ZCsyKmkqKGYtZCkrbSooaC0yKmYrZCksdT1qKmEraSpjLHY9aipiK2kqZCx3PWoqZStpKmcseD1qKmYraSpoLHk9OTAtMTgwKk1hdGguYXRhbjIocS1zLHItdCkvTWF0aC5QSTtyZXR1cm4ocT5zfHxyPHQpJiYoeSs9MTgwKSx7eDpvLHk6cCxtOnt4OnEseTpyfSxuOnt4OnMseTp0fSxzdGFydDp7eDp1LHk6dn0sZW5kOnt4OncseTp4fSxhbHBoYTp5fX1mdW5jdGlvbiBtKGEsYixjLGQsZSxmLGcsaCxpKXtyZXR1cm4gbnVsbD09aT91KGEsYixjLGQsZSxmLGcsaCk6bChhLGIsYyxkLGUsZixnLGgsdihhLGIsYyxkLGUsZixnLGgsaSkpfWZ1bmN0aW9uIG4oYSxiLGMpe2E9cChhKTtmb3IodmFyIGQsZSxmLGcsaCxpPVwiXCIsaj17fSxrPTAsbj0wLG89YS5sZW5ndGg7bjxvO24rKyl7aWYoZj1hW25dLFwiTVwiPT09ZlswXSlkPStmWzFdLGU9K2ZbMl07ZWxzZXtpZihnPW0oZCxlLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSxmWzZdKSxrK2c+YiYmIWMpcmV0dXJuIGg9bShkLGUsZlsxXSxmWzJdLGZbM10sZls0XSxmWzVdLGZbNl0sYi1rKSx7eDpoLngseTpoLnksYWxwaGE6aC5hbHBoYX07ays9ZyxkPStmWzVdLGU9K2ZbNl19aSs9Zi5zaGlmdCgpK2Z9cmV0dXJuIGouZW5kPWksaD1jP2s6bChkLGUsZlswXSxmWzFdLGZbMl0sZlszXSxmWzRdLGZbNV0sMSksaC5hbHBoYSYmKGg9e3g6aC54LHk6aC55LGFscGhhOmguYWxwaGF9KSxofWZ1bmN0aW9uIG8oYSl7dmFyIGI9W10sYz0wLGQ9MCxlPTAsZj0wLGc9MDtpZighYSlyZXR1cm4gYjtcIk1cIj09PWFbMF1bMF0mJihjPSthWzBdWzFdLGQ9K2FbMF1bMl0sZT1jLGY9ZCxnKyssYlswXT1bXCJNXCIsYyxkXSk7Zm9yKHZhciBoLGksaixrPTM9PT1hLmxlbmd0aCYmXCJNXCI9PT1hWzBdWzBdJiZcIlJcIj09PWFbMV1bMF0udG9VcHBlckNhc2UoKSYmXCJaXCI9PT1hWzJdWzBdLnRvVXBwZXJDYXNlKCksbD1nLG09YS5sZW5ndGg7bDxtO2wrKyl7aWYoYi5wdXNoKGk9W10pLGo9YVtsXSxqWzBdIT09U3RyaW5nLnByb3RvdHlwZS50b1VwcGVyQ2FzZS5jYWxsKGpbMF0pKXN3aXRjaChpWzBdPVN0cmluZy5wcm90b3R5cGUudG9VcHBlckNhc2UuY2FsbChqWzBdKSxpWzBdKXtjYXNlXCJBXCI6aVsxXT1qWzFdLGlbMl09alsyXSxpWzNdPWpbM10saVs0XT1qWzRdLGlbNV09als1XSxpWzZdPSsoals2XStjKSxpWzddPSsoals3XStkKTticmVhaztjYXNlXCJWXCI6aVsxXT0ralsxXStkO2JyZWFrO2Nhc2VcIkhcIjppWzFdPStqWzFdK2M7YnJlYWs7Y2FzZVwiUlwiOmg9W2MsZF0uY29uY2F0KGouc2xpY2UoMSkpO2Zvcih2YXIgbj0yLG89aC5sZW5ndGg7bjxvO24rKyloW25dPStoW25dK2MsaFsrK25dPStoW25dK2Q7Yi5wb3AoKSxiPWIuY29uY2F0KHIoaCxrKSk7YnJlYWs7Y2FzZVwiTVwiOmU9K2pbMV0rYyxmPStqWzJdK2Q7YnJlYWs7ZGVmYXVsdDpmb3Iobj0xLG89ai5sZW5ndGg7bjxvO24rKylpW25dPStqW25dKyhuJTI/YzpkKX1lbHNlIGlmKFwiUlwiPT09alswXSloPVtjLGRdLmNvbmNhdChqLnNsaWNlKDEpKSxiLnBvcCgpLGI9Yi5jb25jYXQocihoLGspKSxpPVtcIlJcIl0uY29uY2F0KGouc2xpY2UoLTIpKTtlbHNlIGZvcih2YXIgcD0wLHE9ai5sZW5ndGg7cDxxO3ArKylpW3BdPWpbcF07c3dpdGNoKGlbMF0pe2Nhc2VcIlpcIjpjPWUsZD1mO2JyZWFrO2Nhc2VcIkhcIjpjPWlbMV07YnJlYWs7Y2FzZVwiVlwiOmQ9aVsxXTticmVhaztjYXNlXCJNXCI6ZT1pW2kubGVuZ3RoLTJdLGY9aVtpLmxlbmd0aC0xXTticmVhaztkZWZhdWx0OmM9aVtpLmxlbmd0aC0yXSxkPWlbaS5sZW5ndGgtMV19fXJldHVybiBifWZ1bmN0aW9uIHAoYSxiKXt2YXIgYyxkPW8oYSksZT1iJiZvKGIpLGY9e3g6MCx5OjAsYng6MCxieTowLFg6MCxZOjAscXg6bnVsbCxxeTpudWxsfSxnPXt4OjAseTowLGJ4OjAsYnk6MCxYOjAsWTowLHF4Om51bGwscXk6bnVsbH0saD1bXSxpPVtdLGo9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj17VDoxLFE6MX07aWYoIWEpcmV0dXJuW1wiQ1wiLGIueCxiLnksYi54LGIueSxiLngsYi55XTtzd2l0Y2goYVswXWluIGZ8fChiLnF4PWIucXk9bnVsbCksYVswXSl7Y2FzZVwiTVwiOmIuWD1hWzFdLGIuWT1hWzJdO2JyZWFrO2Nhc2VcIkFcIjphPVtcIkNcIl0uY29uY2F0KHEuYXBwbHkoMCxbYi54LGIueV0uY29uY2F0KGEuc2xpY2UoMSkpKSk7YnJlYWs7Y2FzZVwiU1wiOlwiQ1wiPT09Y3x8XCJTXCI9PT1jPyhkPTIqYi54LWIuYngsZT0yKmIueS1iLmJ5KTooZD1iLngsZT1iLnkpLGE9W1wiQ1wiLGQsZV0uY29uY2F0KGEuc2xpY2UoMSkpO2JyZWFrO2Nhc2VcIlRcIjpcIlFcIj09PWN8fFwiVFwiPT09Yz8oYi5xeD0yKmIueC1iLnF4LGIucXk9MipiLnktYi5xeSk6KGIucXg9Yi54LGIucXk9Yi55KSxhPVtcIkNcIl0uY29uY2F0KHQoYi54LGIueSxiLnF4LGIucXksYVsxXSxhWzJdKSk7YnJlYWs7Y2FzZVwiUVwiOmIucXg9YVsxXSxiLnF5PWFbMl0sYT1bXCJDXCJdLmNvbmNhdCh0KGIueCxiLnksYVsxXSxhWzJdLGFbM10sYVs0XSkpO2JyZWFrO2Nhc2VcIkxcIjphPVtcIkNcIl0uY29uY2F0KHMoYi54LGIueSxhWzFdLGFbMl0pKTticmVhaztjYXNlXCJIXCI6YT1bXCJDXCJdLmNvbmNhdChzKGIueCxiLnksYVsxXSxiLnkpKTticmVhaztjYXNlXCJWXCI6YT1bXCJDXCJdLmNvbmNhdChzKGIueCxiLnksYi54LGFbMV0pKTticmVhaztjYXNlXCJaXCI6YT1bXCJDXCJdLmNvbmNhdChzKGIueCxiLnksYi5YLGIuWSkpfXJldHVybiBhfSxrPWZ1bmN0aW9uKGEsYil7aWYoYVtiXS5sZW5ndGg+Nyl7YVtiXS5zaGlmdCgpO2Zvcih2YXIgZj1hW2JdO2YubGVuZ3RoOyloW2JdPVwiQVwiLGUmJihpW2JdPVwiQVwiKSxhLnNwbGljZShiKyssMCxbXCJDXCJdLmNvbmNhdChmLnNwbGljZSgwLDYpKSk7YS5zcGxpY2UoYiwxKSxjPU1hdGgubWF4KGQubGVuZ3RoLGUmJmUubGVuZ3RofHwwKX19LGw9ZnVuY3Rpb24oYSxiLGYsZyxoKXthJiZiJiZcIk1cIj09PWFbaF1bMF0mJlwiTVwiIT09YltoXVswXSYmKGIuc3BsaWNlKGgsMCxbXCJNXCIsZy54LGcueV0pLGYuYng9MCxmLmJ5PTAsZi54PWFbaF1bMV0sZi55PWFbaF1bMl0sYz1NYXRoLm1heChkLmxlbmd0aCxlJiZlLmxlbmd0aHx8MCkpfSxtPVwiXCIsbj1cIlwiO2M9TWF0aC5tYXgoZC5sZW5ndGgsZSYmZS5sZW5ndGh8fDApO2Zvcih2YXIgcD0wO3A8YztwKyspe2RbcF0mJihtPWRbcF1bMF0pLFwiQ1wiIT09bSYmKGhbcF09bSxwJiYobj1oW3AtMV0pKSxkW3BdPWooZFtwXSxmLG4pLFwiQVwiIT09aFtwXSYmXCJDXCI9PT1tJiYoaFtwXT1cIkNcIiksayhkLHApLGUmJihlW3BdJiYobT1lW3BdWzBdKSxcIkNcIiE9PW0mJihpW3BdPW0scCYmKG49aVtwLTFdKSksZVtwXT1qKGVbcF0sZyxuKSxcIkFcIiE9PWlbcF0mJlwiQ1wiPT09bSYmKGlbcF09XCJDXCIpLGsoZSxwKSksbChkLGUsZixnLHApLGwoZSxkLGcsZixwKTt2YXIgcj1kW3BdLHU9ZSYmZVtwXSx2PXIubGVuZ3RoLHc9ZSYmdS5sZW5ndGg7Zi54PXJbdi0yXSxmLnk9clt2LTFdLGYuYng9cGFyc2VGbG9hdChyW3YtNF0pfHxmLngsZi5ieT1wYXJzZUZsb2F0KHJbdi0zXSl8fGYueSxnLmJ4PWUmJihwYXJzZUZsb2F0KHVbdy00XSl8fGcueCksZy5ieT1lJiYocGFyc2VGbG9hdCh1W3ctM10pfHxnLnkpLGcueD1lJiZ1W3ctMl0sZy55PWUmJnVbdy0xXX1yZXR1cm4gZT9bZCxlXTpkfWZ1bmN0aW9uIHEoYSxiLGMsZCxlLGYsZyxoLGksail7dmFyIGssbCxtLG4sbyxwPU1hdGguUEkscj0xMjAqcC8xODAscz1wLzE4MCooK2V8fDApLHQ9W10sdT1mdW5jdGlvbihhLGIsYyl7cmV0dXJue3g6YSpNYXRoLmNvcyhjKS1iKk1hdGguc2luKGMpLHk6YSpNYXRoLnNpbihjKStiKk1hdGguY29zKGMpfX07aWYoailrPWpbMF0sbD1qWzFdLG09alsyXSxuPWpbM107ZWxzZXtvPXUoYSxiLC1zKSxhPW8ueCxiPW8ueSxvPXUoaCxpLC1zKSxoPW8ueCxpPW8ueTt2YXIgdj0oYS1oKS8yLHc9KGItaSkvMix4PXYqdi8oYypjKSt3KncvKGQqZCk7eD4xJiYoeD1NYXRoLnNxcnQoeCksYyo9eCxkKj14KTt2YXIgeT1jKmMsej1kKmQsQT0oZj09PWc/LTE6MSkqTWF0aC5zcXJ0KE1hdGguYWJzKCh5KnoteSp3Kncteip2KnYpLyh5Kncqdyt6KnYqdikpKTttPUEqYyp3L2QrKGEraCkvMixuPUEqLWQqdi9jKyhiK2kpLzIsaz1NYXRoLmFzaW4oKChiLW4pL2QpLnRvRml4ZWQoOSkpLGw9TWF0aC5hc2luKCgoaS1uKS9kKS50b0ZpeGVkKDkpKSxrPWE8bT9wLWs6ayxsPWg8bT9wLWw6bCxrPDAmJihrPTIqcCtrKSxsPDAmJihsPTIqcCtsKSxnJiZrPmwmJihrLT0yKnApLCFnJiZsPmsmJihsLT0yKnApfXZhciBCPWwtaztpZihNYXRoLmFicyhCKT5yKXt2YXIgQz1sLEQ9aCxFPWk7bD1rK3IqKGcmJmw+az8xOi0xKSxoPW0rYypNYXRoLmNvcyhsKSxpPW4rZCpNYXRoLnNpbihsKSx0PXEoaCxpLGMsZCxlLDAsZyxELEUsW2wsQyxtLG5dKX1CPWwtazt2YXIgRj1NYXRoLmNvcyhrKSxHPU1hdGguc2luKGspLEg9TWF0aC5jb3MobCksST1NYXRoLnNpbihsKSxKPU1hdGgudGFuKEIvNCksSz00LzMqYypKLEw9NC8zKmQqSixNPVthLGJdLE49W2ErSypHLGItTCpGXSxPPVtoK0sqSSxpLUwqSF0sUD1baCxpXTtpZihOWzBdPTIqTVswXS1OWzBdLE5bMV09MipNWzFdLU5bMV0sailyZXR1cm5bTixPLFBdLmNvbmNhdCh0KTt0PVtOLE8sUF0uY29uY2F0KHQpLmpvaW4oKS5zcGxpdChcIixcIik7Zm9yKHZhciBRPVtdLFI9MCxTPXQubGVuZ3RoO1I8UztSKyspUVtSXT1SJTI/dSh0W1ItMV0sdFtSXSxzKS55OnUodFtSXSx0W1IrMV0scykueDtyZXR1cm4gUX1mdW5jdGlvbiByKGEsYil7Zm9yKHZhciBjPVtdLGQ9MCxlPWEubGVuZ3RoO2UtMiohYj5kO2QrPTIpe3ZhciBmPVt7eDorYVtkLTJdLHk6K2FbZC0xXX0se3g6K2FbZF0seTorYVtkKzFdfSx7eDorYVtkKzJdLHk6K2FbZCszXX0se3g6K2FbZCs0XSx5OithW2QrNV19XTtiP2Q/ZS00PT09ZD9mWzNdPXt4OithWzBdLHk6K2FbMV19OmUtMj09PWQmJihmWzJdPXt4OithWzBdLHk6K2FbMV19LGZbM109e3g6K2FbMl0seTorYVszXX0pOmZbMF09e3g6K2FbZS0yXSx5OithW2UtMV19OmUtND09PWQ/ZlszXT1mWzJdOmR8fChmWzBdPXt4OithW2RdLHk6K2FbZCsxXX0pLGMucHVzaChbXCJDXCIsKC1mWzBdLngrNipmWzFdLngrZlsyXS54KS82LCgtZlswXS55KzYqZlsxXS55K2ZbMl0ueSkvNiwoZlsxXS54KzYqZlsyXS54LWZbM10ueCkvNiwoZlsxXS55KzYqZlsyXS55LWZbM10ueSkvNixmWzJdLngsZlsyXS55XSl9cmV0dXJuIGN9ZnVuY3Rpb24gcyhhLGIsYyxkKXtyZXR1cm5bYSxiLGMsZCxjLGRdfWZ1bmN0aW9uIHQoYSxiLGMsZCxlLGYpe3ZhciBnPTEvMyxoPTIvMztyZXR1cm5bZyphK2gqYyxnKmIraCpkLGcqZStoKmMsZypmK2gqZCxlLGZdfWZ1bmN0aW9uIHUoYSxiLGMsZCxlLGYsZyxoLGkpe251bGw9PWkmJihpPTEpLGk9aT4xPzE6aTwwPzA6aTtmb3IodmFyIGo9aS8yLGs9MTIsbD1bLS4xMjUyLC4xMjUyLC0uMzY3OCwuMzY3OCwtLjU4NzMsLjU4NzMsLS43Njk5LC43Njk5LC0uOTA0MSwuOTA0MSwtLjk4MTYsLjk4MTZdLG09MCxuPVsuMjQ5MSwuMjQ5MSwuMjMzNSwuMjMzNSwuMjAzMiwuMjAzMiwuMTYwMSwuMTYwMSwuMTA2OSwuMTA2OSwuMDQ3MiwuMDQ3Ml0sbz0wO288aztvKyspe3ZhciBwPWoqbFtvXStqLHE9dyhwLGEsYyxlLGcpLHI9dyhwLGIsZCxmLGgpLHM9cSpxK3IqcjttKz1uW29dKk1hdGguc3FydChzKX1yZXR1cm4gaiptfWZ1bmN0aW9uIHYoYSxiLGMsZCxlLGYsZyxoLGkpe2lmKCEoaTwwfHx1KGEsYixjLGQsZSxmLGcsaCk8aSkpe3ZhciBqLGs9MSxsPWsvMixtPWstbCxuPS4wMTtmb3Ioaj11KGEsYixjLGQsZSxmLGcsaCxtKTtNYXRoLmFicyhqLWkpPm47KWwvPTIsbSs9KGo8aT8xOi0xKSpsLGo9dShhLGIsYyxkLGUsZixnLGgsbSk7cmV0dXJuIG19fWZ1bmN0aW9uIHcoYSxiLGMsZCxlKXtyZXR1cm4gYSooYSooLTMqYis5KmMtOSpkKzMqZSkrNipiLTEyKmMrNipkKS0zKmIrMypjfWZ1bmN0aW9uIHgoKXtmb3IodmFyIGE9XCJcIixiPWFyZ3VtZW50cy5sZW5ndGgtMTtiPj0wOy0tYil7dmFyIGM9YXJndW1lbnRzW2JdO2ErPWM9PT1PYmplY3QoYyk/SlNPTi5zdHJpbmdpZnkoYyk6Y31yZXR1cm4gYX12YXIgeT1hKFwiLi4vY29yZS9tYWluXCIpLHo9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO3kuRm9udD1mdW5jdGlvbihhKXt0aGlzLnBhcmVudD1hLHRoaXMuY2FjaGU9e30sdGhpcy5mb250PXZvaWQgMH0seS5Gb250LnByb3RvdHlwZS5saXN0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwibm90IHlldCBpbXBsZW1lbnRlZFwiKX0seS5Gb250LnByb3RvdHlwZS50ZXh0Qm91bmRzPWZ1bmN0aW9uKGEsYixjLGQsZSl7Yj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/YzowLGQ9ZHx8dGhpcy5wYXJlbnQuX3JlbmRlcmVyLl90ZXh0U2l6ZTt2YXIgZj1lJiZlLnJlbmRlcmVyJiZlLnJlbmRlcmVyLl9wSW5zdHx8dGhpcy5wYXJlbnQsZz1mLl9yZW5kZXJlcixoPWcuX3RleHRBbGlnbnx8ei5MRUZULGk9Zy5fdGV4dEJhc2VsaW5lfHx6LkJBU0VMSU5FLGo9eChcInRleHRCb3VuZHNcIixhLGIsYyxkLGgsaSksaz10aGlzLmNhY2hlW2pdO2lmKCFrKXt2YXIgbCxtLG4sbyxwLHE9W10scj1bXSxzPXRoaXMuX3NjYWxlKGQpO3RoaXMuZm9udC5mb3JFYWNoR2x5cGgoYSxiLGMsZCxlLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWEuZ2V0TWV0cmljcygpO3EucHVzaChiK2UueE1pbipzKSxxLnB1c2goYitlLnhNYXgqcyksci5wdXNoKGMrLWUueU1pbipzKSxyLnB1c2goYystZS55TWF4KnMpfSksbD1NYXRoLm1pbi5hcHBseShudWxsLHEpLG09TWF0aC5taW4uYXBwbHkobnVsbCxyKSxuPU1hdGgubWF4LmFwcGx5KG51bGwscSksbz1NYXRoLm1heC5hcHBseShudWxsLHIpLGs9e3g6bCx5Om0saDpvLW0sdzpuLWwsYWR2YW5jZTpsLWJ9LHA9dGhpcy5faGFuZGxlQWxpZ25tZW50KGcsYSxrLngsay55LGsudytrLmFkdmFuY2UpLGsueD1wLngsay55PXAueSx0aGlzLmNhY2hlW3goXCJ0ZXh0Qm91bmRzXCIsYSxiLGMsZCxoLGkpXT1rfXJldHVybiBrfSx5LkZvbnQucHJvdG90eXBlLnRleHRUb1BvaW50cz1mdW5jdGlvbihhLGIsYyxlLGcpe2Z1bmN0aW9uIGgoYil7cmV0dXJuIGtbYl0ubmFtZSYmXCJzcGFjZVwiPT09a1tiXS5uYW1lfHxhLmxlbmd0aD09PWsubGVuZ3RoJiZcIiBcIj09PWFbYl18fGtbYl0uaW5kZXgmJjM9PT1rW2JdLmluZGV4fXZhciBpPTAsaj1bXSxrPXRoaXMuX2dldEdseXBocyhhKTtlPWV8fHRoaXMucGFyZW50Ll9yZW5kZXJlci5fdGV4dFNpemU7Zm9yKHZhciBsPTA7bDxrLmxlbmd0aDtsKyspe2lmKCFoKGwpKWZvcih2YXIgbT1rW2xdLmdldFBhdGgoYixjLGUpLG49ZihtLmNvbW1hbmRzKSxvPTA7bzxuLmxlbmd0aDtvKyspZm9yKHZhciBwPWQobltvXSxnKSxxPTA7cTxwLmxlbmd0aDtxKyspcFtxXS54Kz1pLGoucHVzaChwW3FdKTtpKz1rW2xdLmFkdmFuY2VXaWR0aCp0aGlzLl9zY2FsZShlKX1yZXR1cm4gan0seS5Gb250LnByb3RvdHlwZS5fZ2V0R2x5cGhzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZvbnQuc3RyaW5nVG9HbHlwaHMoYSl9LHkuRm9udC5wcm90b3R5cGUuX2dldFBhdGg9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZCYmZC5yZW5kZXJlciYmZC5yZW5kZXJlci5fcEluc3R8fHRoaXMucGFyZW50LGY9ZS5fcmVuZGVyZXIsZz10aGlzLl9oYW5kbGVBbGlnbm1lbnQoZixhLGIsYyk7cmV0dXJuIHRoaXMuZm9udC5nZXRQYXRoKGEsZy54LGcueSxmLl90ZXh0U2l6ZSxkKX0seS5Gb250LnByb3RvdHlwZS5fZ2V0UGF0aERhdGE9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9MztyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYSYmYXJndW1lbnRzLmxlbmd0aD4yP2E9dGhpcy5fZ2V0UGF0aChhLGIsYyxkKTpcIm9iamVjdFwiPT10eXBlb2YgYiYmKGQ9YiksZCYmXCJudW1iZXJcIj09dHlwZW9mIGQuZGVjaW1hbHMmJihlPWQuZGVjaW1hbHMpLGEudG9QYXRoRGF0YShlKX0seS5Gb250LnByb3RvdHlwZS5fZ2V0U1ZHPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPTM7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGEmJmFyZ3VtZW50cy5sZW5ndGg+Mj9hPXRoaXMuX2dldFBhdGgoYSxiLGMsZCk6XCJvYmplY3RcIj09dHlwZW9mIGImJihkPWIpLGQmJihcIm51bWJlclwiPT10eXBlb2YgZC5kZWNpbWFscyYmKGU9ZC5kZWNpbWFscyksXCJudW1iZXJcIj09dHlwZW9mIGQuc3Ryb2tlV2lkdGgmJihhLnN0cm9rZVdpZHRoPWQuc3Ryb2tlV2lkdGgpLHZvaWQgMCE9PWQuZmlsbCYmKGEuZmlsbD1kLmZpbGwpLHZvaWQgMCE9PWQuc3Ryb2tlJiYoYS5zdHJva2U9ZC5zdHJva2UpKSxhLnRvU1ZHKGUpfSx5LkZvbnQucHJvdG90eXBlLl9yZW5kZXJQYXRoPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGY9ZCYmZC5yZW5kZXJlcnx8dGhpcy5wYXJlbnQuX3JlbmRlcmVyLGc9Zi5kcmF3aW5nQ29udGV4dDtlPVwib2JqZWN0XCI9PXR5cGVvZiBhJiZhLmNvbW1hbmRzP2EuY29tbWFuZHM6dGhpcy5fZ2V0UGF0aChhLGIsYyxkKS5jb21tYW5kcyxnLmJlZ2luUGF0aCgpO2Zvcih2YXIgaD0wO2g8ZS5sZW5ndGg7aCs9MSl7dmFyIGk9ZVtoXTtcIk1cIj09PWkudHlwZT9nLm1vdmVUbyhpLngsaS55KTpcIkxcIj09PWkudHlwZT9nLmxpbmVUbyhpLngsaS55KTpcIkNcIj09PWkudHlwZT9nLmJlemllckN1cnZlVG8oaS54MSxpLnkxLGkueDIsaS55MixpLngsaS55KTpcIlFcIj09PWkudHlwZT9nLnF1YWRyYXRpY0N1cnZlVG8oaS54MSxpLnkxLGkueCxpLnkpOlwiWlwiPT09aS50eXBlJiZnLmNsb3NlUGF0aCgpfXJldHVybiBmLl9kb1N0cm9rZSYmZi5fc3Ryb2tlU2V0JiZnLnN0cm9rZSgpLGYuX2RvRmlsbCYmKGYuX2ZpbGxTZXR8fGYuX3NldEZpbGwoei5fREVGQVVMVF9URVhUX0ZJTEwpLGcuZmlsbCgpKSx0aGlzfSx5LkZvbnQucHJvdG90eXBlLl90ZXh0V2lkdGg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5mb250LmdldEFkdmFuY2VXaWR0aChhLGIpfSx5LkZvbnQucHJvdG90eXBlLl90ZXh0QXNjZW50PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZvbnQuYXNjZW5kZXIqdGhpcy5fc2NhbGUoYSl9LHkuRm9udC5wcm90b3R5cGUuX3RleHREZXNjZW50PWZ1bmN0aW9uKGEpe3JldHVybi10aGlzLmZvbnQuZGVzY2VuZGVyKnRoaXMuX3NjYWxlKGEpfSx5LkZvbnQucHJvdG90eXBlLl9zY2FsZT1mdW5jdGlvbihhKXtyZXR1cm4gMS90aGlzLmZvbnQudW5pdHNQZXJFbSooYXx8dGhpcy5wYXJlbnQuX3JlbmRlcmVyLl90ZXh0U2l6ZSl9LHkuRm9udC5wcm90b3R5cGUuX2hhbmRsZUFsaWdubWVudD1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWEuX3RleHRTaXplO3N3aXRjaCh2b2lkIDA9PT1lJiYoZT10aGlzLl90ZXh0V2lkdGgoYixmKSksYS5fdGV4dEFsaWduKXtjYXNlIHouQ0VOVEVSOmMtPWUvMjticmVhaztjYXNlIHouUklHSFQ6Yy09ZX1zd2l0Y2goYS5fdGV4dEJhc2VsaW5lKXtjYXNlIHouVE9QOmQrPXRoaXMuX3RleHRBc2NlbnQoZik7YnJlYWs7Y2FzZSB6LkNFTlRFUjpkKz10aGlzLl90ZXh0QXNjZW50KGYpLzI7YnJlYWs7Y2FzZSB6LkJPVFRPTTpkLT10aGlzLl90ZXh0RGVzY2VudChmKX1yZXR1cm57eDpjLHk6ZH19LGIuZXhwb3J0cz15fSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw2MDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEucHVzaChiKSxhfSxkLnByb3RvdHlwZS5hcnJheUNvcHk9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnO3ZvaWQgMCE9PWU/KGc9TWF0aC5taW4oZSxhLmxlbmd0aCksZj1kLGE9YS5zbGljZShiLGcrYikpOih2b2lkIDAhPT1jPyhnPWMsZz1NYXRoLm1pbihnLGEubGVuZ3RoKSk6Zz1hLmxlbmd0aCxmPTAsYz1iLGE9YS5zbGljZSgwLGcpKSxBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGMsW2YsZ10uY29uY2F0KGEpKX0sZC5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuY29uY2F0KGIpfSxkLnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJldmVyc2UoKX0sZC5wcm90b3R5cGUuc2hvcnRlbj1mdW5jdGlvbihhKXtyZXR1cm4gYS5wb3AoKSxhfSxkLnByb3RvdHlwZS5zaHVmZmxlPWZ1bmN0aW9uKGEsYil7dmFyIGM9QXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldyYmQXJyYXlCdWZmZXIuaXNWaWV3KGEpO2E9Ynx8Yz9hOmEuc2xpY2UoKTtmb3IodmFyIGQsZSxmPWEubGVuZ3RoO2Y+MTspZD1NYXRoLnJhbmRvbSgpKmZ8MCxlPWFbLS1mXSxhW2ZdPWFbZF0sYVtkXT1lO3JldHVybiBhfSxkLnByb3RvdHlwZS5zb3J0PWZ1bmN0aW9uKGEsYil7dmFyIGM9Yj9hLnNsaWNlKDAsTWF0aC5taW4oYixhLmxlbmd0aCkpOmEsZD1iP2Euc2xpY2UoTWF0aC5taW4oYixhLmxlbmd0aCkpOltdO3JldHVybiBjPVwic3RyaW5nXCI9PXR5cGVvZiBjWzBdP2Muc29ydCgpOmMuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLWJ9KSxjLmNvbmNhdChkKX0sZC5wcm90b3R5cGUuc3BsaWNlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShhLFtjLDBdLmNvbmNhdChiKSksYX0sZC5wcm90b3R5cGUuc3Vic2V0PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdm9pZCAwIT09Yz9hLnNsaWNlKGIsYitjKTphLnNsaWNlKGIsYS5sZW5ndGgpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw2MTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuZmxvYXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChwYXJzZUZsb2F0KTpwYXJzZUZsb2F0KGEpfSxkLnByb3RvdHlwZS5pbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj1ifHwxMCxcInN0cmluZ1wiPT10eXBlb2YgYT9wYXJzZUludChhLGIpOlwibnVtYmVyXCI9PXR5cGVvZiBhPzB8YTpcImJvb2xlYW5cIj09dHlwZW9mIGE/YT8xOjA6YSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBkLnByb3RvdHlwZS5pbnQoYSxiKX0pOnZvaWQgMH0sZC5wcm90b3R5cGUuc3RyPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUuc3RyKTpTdHJpbmcoYSl9LGQucHJvdG90eXBlLmJvb2xlYW49ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGE/MCE9PWE6XCJzdHJpbmdcIj09dHlwZW9mIGE/XCJ0cnVlXCI9PT1hLnRvTG93ZXJDYXNlKCk6XCJib29sZWFuXCI9PXR5cGVvZiBhP2E6YSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLmJvb2xlYW4pOnZvaWQgMH0sZC5wcm90b3R5cGUuYnl0ZT1mdW5jdGlvbihhKXt2YXIgYj1kLnByb3RvdHlwZS5pbnQoYSwxMCk7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGI/KGIrMTI4KSUyNTYtMTI4OmIgaW5zdGFuY2VvZiBBcnJheT9iLm1hcChkLnByb3RvdHlwZS5ieXRlKTp2b2lkIDB9LGQucHJvdG90eXBlLmNoYXI9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIGF8fGlzTmFOKGEpP2EgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChkLnByb3RvdHlwZS5jaGFyKTpcInN0cmluZ1wiPT10eXBlb2YgYT9kLnByb3RvdHlwZS5jaGFyKHBhcnNlSW50KGEsMTApKTp2b2lkIDA6U3RyaW5nLmZyb21DaGFyQ29kZShhKX0sZC5wcm90b3R5cGUudW5jaGFyPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhJiYxPT09YS5sZW5ndGg/YS5jaGFyQ29kZUF0KDApOmEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChkLnByb3RvdHlwZS51bmNoYXIpOnZvaWQgMH0sZC5wcm90b3R5cGUuaGV4PWZ1bmN0aW9uKGEsYil7aWYoYj12b2lkIDA9PT1ifHxudWxsPT09Yj9iPTg6YixhIGluc3RhbmNlb2YgQXJyYXkpcmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBkLnByb3RvdHlwZS5oZXgoYSxiKX0pO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBhKXthPDAmJihhPTQyOTQ5NjcyOTUrYSsxKTtmb3IodmFyIGM9TnVtYmVyKGEpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO2MubGVuZ3RoPGI7KWM9XCIwXCIrYztyZXR1cm4gYy5sZW5ndGg+PWImJihjPWMuc3Vic3RyaW5nKGMubGVuZ3RoLWIsYy5sZW5ndGgpKSxjfX0sZC5wcm90b3R5cGUudW5oZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChkLnByb3RvdHlwZS51bmhleCk6cGFyc2VJbnQoXCIweFwiK2EsMTYpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw2MjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMpe3ZhciBkPWE8MCxlPWQ/YS50b1N0cmluZygpLnN1YnN0cmluZygxKTphLnRvU3RyaW5nKCksZj1lLmluZGV4T2YoXCIuXCIpLGc9LTEhPT1mP2Uuc3Vic3RyaW5nKDAsZik6ZSxoPS0xIT09Zj9lLnN1YnN0cmluZyhmKzEpOlwiXCIsaT1kP1wiLVwiOlwiXCI7aWYodm9pZCAwIT09Yyl7dmFyIGo9XCJcIjsoLTEhPT1mfHxjLWgubGVuZ3RoPjApJiYoaj1cIi5cIiksaC5sZW5ndGg+YyYmKGg9aC5zdWJzdHJpbmcoMCxjKSk7Zm9yKHZhciBrPTA7azxiLWcubGVuZ3RoO2srKylpKz1cIjBcIjtpKz1nLGkrPWosaSs9aDtmb3IodmFyIGw9MDtsPGMtaC5sZW5ndGg7bCsrKWkrPVwiMFwiO3JldHVybiBpfWZvcih2YXIgbT0wO208TWF0aC5tYXgoYi1nLmxlbmd0aCwwKTttKyspaSs9XCIwXCI7cmV0dXJuIGkrPWV9ZnVuY3Rpb24gZShhLGIpe2E9YS50b1N0cmluZygpO3ZhciBjPWEuaW5kZXhPZihcIi5cIiksZD0tMSE9PWM/YS5zdWJzdHJpbmcoYyk6XCJcIixlPS0xIT09Yz9hLnN1YnN0cmluZygwLGMpOmE7aWYoZT1lLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZyxcIixcIiksMD09PWIpZD1cIlwiO2Vsc2UgaWYodm9pZCAwIT09YilpZihiPmQubGVuZ3RoKXtkKz0tMT09PWM/XCIuXCI6XCJcIjtmb3IodmFyIGY9Yi1kLmxlbmd0aCsxLGc9MDtnPGY7ZysrKWQrPVwiMFwifWVsc2UgZD1kLnN1YnN0cmluZygwLGIrMSk7cmV0dXJuIGUrZH1mdW5jdGlvbiBmKGEpe3JldHVybiBwYXJzZUZsb2F0KGEpPjA/XCIrXCIrYS50b1N0cmluZygpOmEudG9TdHJpbmcoKX1mdW5jdGlvbiBnKGEpe3JldHVybiBwYXJzZUZsb2F0KGEpPjA/XCIgXCIrYS50b1N0cmluZygpOmEudG9TdHJpbmcoKX12YXIgaD1hKFwiLi4vY29yZS9tYWluXCIpO2EoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksaC5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihhLGIpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJqb2luXCIsYXJndW1lbnRzKSxhLmpvaW4oYil9LGgucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1hdGNoXCIsYXJndW1lbnRzKSxhLm1hdGNoKGIpfSxoLnByb3RvdHlwZS5tYXRjaEFsbD1mdW5jdGlvbihhLGIpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1hdGNoQWxsXCIsYXJndW1lbnRzKTtmb3IodmFyIGM9bmV3IFJlZ0V4cChiLFwiZ1wiKSxkPWMuZXhlYyhhKSxlPVtdO251bGwhPT1kOyllLnB1c2goZCksZD1jLmV4ZWMoYSk7cmV0dXJuIGV9LGgucHJvdG90eXBlLm5mPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibmZcIixhcmd1bWVudHMpLGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gZChhLGIsYyl9KTpcIltvYmplY3QgQXJndW1lbnRzXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpPzM9PT1hLmxlbmd0aD90aGlzLm5mKGFbMF0sYVsxXSxhWzJdKToyPT09YS5sZW5ndGg/dGhpcy5uZihhWzBdLGFbMV0pOnRoaXMubmYoYVswXSk6ZChhLGIsYyl9LGgucHJvdG90eXBlLm5mYz1mdW5jdGlvbihhLGIpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJuZmNcIixhcmd1bWVudHMpLGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gZShhLGIpfSk6ZShhLGIpfSxoLnByb3RvdHlwZS5uZnA9ZnVuY3Rpb24oKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJuZnBcIixhcmd1bWVudHMpO3ZhciBhPWgucHJvdG90eXBlLm5mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGYpOmYoYSl9LGgucHJvdG90eXBlLm5mcz1mdW5jdGlvbigpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5mc1wiLGFyZ3VtZW50cyk7dmFyIGE9aC5wcm90b3R5cGUubmYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZyk6ZyhhKX0saC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3BsaXRcIixhcmd1bWVudHMpLGEuc3BsaXQoYil9LGgucHJvdG90eXBlLnNwbGl0VG9rZW5zPWZ1bmN0aW9uKGEsYil7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3BsaXRUb2tlbnNcIixhcmd1bWVudHMpO3ZhciBjO2lmKHZvaWQgMCE9PWIpe3ZhciBkPWIsZT0vXFxdL2cuZXhlYyhkKSxmPS9cXFsvZy5leGVjKGQpO2YmJmU/KGQ9ZC5zbGljZSgwLGUuaW5kZXgpK2Quc2xpY2UoZS5pbmRleCsxKSxmPS9cXFsvZy5leGVjKGQpLGQ9ZC5zbGljZSgwLGYuaW5kZXgpK2Quc2xpY2UoZi5pbmRleCsxKSxjPW5ldyBSZWdFeHAoXCJbXFxcXFtcIitkK1wiXFxcXF1dXCIsXCJnXCIpKTplPyhkPWQuc2xpY2UoMCxlLmluZGV4KStkLnNsaWNlKGUuaW5kZXgrMSksYz1uZXcgUmVnRXhwKFwiW1wiK2QrXCJcXFxcXV1cIixcImdcIikpOmY/KGQ9ZC5zbGljZSgwLGYuaW5kZXgpK2Quc2xpY2UoZi5pbmRleCsxKSxjPW5ldyBSZWdFeHAoXCJbXCIrZCtcIlxcXFxbXVwiLFwiZ1wiKSk6Yz1uZXcgUmVnRXhwKFwiW1wiK2QrXCJdXCIsXCJnXCIpfWVsc2UgYz0vXFxzL2c7cmV0dXJuIGEuc3BsaXQoYykuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhfSl9LGgucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oYSl7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRyaW1cIixhcmd1bWVudHMpLGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcCh0aGlzLnRyaW0pOmEudHJpbSgpfSxiLmV4cG9ydHM9aH0se1wiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9jb3JlL21haW5cIjoyNH1dLDYzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5kYXk9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldERhdGUoKX0sZC5wcm90b3R5cGUuaG91cj1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0SG91cnMoKX0sZC5wcm90b3R5cGUubWludXRlPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRNaW51dGVzKCl9LGQucHJvdG90eXBlLm1pbGxpcz1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCl9LGQucHJvdG90eXBlLm1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRNb250aCgpKzF9LGQucHJvdG90eXBlLnNlY29uZD1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0U2Vjb25kcygpfSxkLnByb3RvdHlwZS55ZWFyPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw2NDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7YShcIi4vcDUuR2VvbWV0cnlcIik7dmFyIGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QucHJvdG90eXBlLnBsYW5lPWZ1bmN0aW9uKGEsYixjLGUpe3RoaXMuX2Fzc2VydDNkKFwicGxhbmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicGxhbmVcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj1hKSx2b2lkIDA9PT1jJiYoYz0xKSx2b2lkIDA9PT1lJiYoZT0xKTt2YXIgZj1cInBsYW5lfFwiK2MrXCJ8XCIrZTtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goZikpe3ZhciBnPWZ1bmN0aW9uKCl7Zm9yKHZhciBhLGIsYyxlPTA7ZTw9dGhpcy5kZXRhaWxZO2UrKyl7Yj1lL3RoaXMuZGV0YWlsWTtmb3IodmFyIGY9MDtmPD10aGlzLmRldGFpbFg7ZisrKWE9Zi90aGlzLmRldGFpbFgsYz1uZXcgZC5WZWN0b3IoYS0uNSxiLS41LDApLHRoaXMudmVydGljZXMucHVzaChjKSx0aGlzLnV2cy5wdXNoKGEsYil9fSxoPW5ldyBkLkdlb21ldHJ5KGMsZSxnKTtoLmNvbXB1dGVGYWNlcygpLmNvbXB1dGVOb3JtYWxzKCksYzw9MSYmZTw9MT9oLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBwbGFuZSBvYmplY3RzIHdpdGggbW9yZSB0aGFuIDEgZGV0YWlsWCBvciAxIGRldGFpbFlcIiksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhmLGgpfXJldHVybiB0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVyc1NjYWxlZChmLGEsYiwxKSx0aGlzfSxkLnByb3RvdHlwZS5ib3g9ZnVuY3Rpb24oYSxiLGMsZSxmKXt0aGlzLl9hc3NlcnQzZChcImJveFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJib3hcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj1hKSx2b2lkIDA9PT1jJiYoYz1iKTt2YXIgZz10aGlzLl9yZW5kZXJlci5hdHRyaWJ1dGVzJiZ0aGlzLl9yZW5kZXJlci5hdHRyaWJ1dGVzLnBlclBpeGVsTGlnaHRpbmc7dm9pZCAwPT09ZSYmKGU9Zz8xOjQpLHZvaWQgMD09PWYmJihmPWc/MTo0KTt2YXIgaD1cImJveHxcIitlK1wifFwiK2Y7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGgpKXt2YXIgaT1mdW5jdGlvbigpe3ZhciBhPVtbMCw0LDIsNl0sWzEsMyw1LDddLFswLDEsNCw1XSxbMiw2LDMsN10sWzAsMiwxLDNdLFs0LDUsNiw3XV07dGhpcy5zdHJva2VJbmRpY2VzPVtbMCwxXSxbMSwzXSxbMywyXSxbNiw3XSxbOCw5XSxbOSwxMV0sWzE0LDE1XSxbMTYsMTddLFsxNywxOV0sWzE4LDE5XSxbMjAsMjFdLFsyMiwyM11dO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKXtmb3IodmFyIGM9YVtiXSxlPTQqYixmPTA7Zjw0O2YrKyl7dmFyIGc9Y1tmXSxoPW5ldyBkLlZlY3RvcigoMiooMSZnKS0xKS8yLCgoMiZnKS0xKS8yLCgoNCZnKS8yLTEpLzIpO3RoaXMudmVydGljZXMucHVzaChoKSx0aGlzLnV2cy5wdXNoKDEmZiwoMiZmKS8yKX10aGlzLmZhY2VzLnB1c2goW2UsZSsxLGUrMl0pLHRoaXMuZmFjZXMucHVzaChbZSsyLGUrMSxlKzNdKX19LGo9bmV3IGQuR2VvbWV0cnkoZSxmLGkpO2ouY29tcHV0ZU5vcm1hbHMoKSxlPD00JiZmPD00P2ouX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlIG9uIGJveCBvYmplY3RzIHdpdGggbW9yZSB0aGFuIDQgZGV0YWlsWCBvciA0IGRldGFpbFlcIiksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhoLGopfXJldHVybiB0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVyc1NjYWxlZChoLGEsYixjKSx0aGlzfSxkLnByb3RvdHlwZS5zcGhlcmU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInNwaGVyZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzcGhlcmVcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj0yNCksdm9pZCAwPT09YyYmKGM9MTYpLHRoaXMuZWxsaXBzb2lkKGEsYSxhLGIsYyksdGhpc307dmFyIGY9ZnVuY3Rpb24oYSxiLGMsZSxmLGcsaCl7YT1hPD0wPzE6YSxiPWI8MD8wOmIsYz1jPD0wP2E6YyxlPWU8Mz8zOmUsZj1mPDE/MTpmLGc9dm9pZCAwPT09Z3x8ZyxoPXZvaWQgMD09PWg/MCE9PWI6aDt2YXIgaSxqLGssbCxtLG49Zz8tMjowLG89ZisoaD8yOjApLHA9e30scT1NYXRoLmF0YW4yKGEtYixjKTtmb3IoaT1uO2k8PW87KytpKXt2YXIgcixzPWkvZix0PWMqcztmb3IoaTwwPyh0PTAscz0wLHI9YSk6aT5mPyh0PWMscz0xLHI9Yik6cj1hKyhiLWEpKnMsLTIhPT1pJiZpIT09ZisyfHwocj0wKSx0LT1jLzIscFtpXT0wPT09cj8xOmUsaj0wO2o8cFtpXTsrK2ope3ZhciB1PWovZTt0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKE1hdGguc2luKDIqdSpNYXRoLlBJKSpyLHQsTWF0aC5jb3MoMip1Kk1hdGguUEkpKnIpKSx0aGlzLnZlcnRleE5vcm1hbHMucHVzaChuZXcgZC5WZWN0b3IoaTwwfHxpPmY/MDpNYXRoLnNpbigyKnUqTWF0aC5QSSkqTWF0aC5jb3MocSksaTwwPy0xOmk+Zj8xOk1hdGguc2luKHEpLGk8MHx8aT5mPzA6TWF0aC5jb3MoMip1Kk1hdGguUEkpKk1hdGguY29zKHEpKSksdGhpcy51dnMucHVzaCh1LHMpfX12YXIgdj0wO2lmKGcpe2ZvcihrPTA7azxwWy0xXTsrK2spbT0oaysxKSVwWy0xXSx0aGlzLmZhY2VzLnB1c2goW3YsdisxK20sdisxK2tdKTt2Kz1wWy0yXStwWy0xXX1mb3IoaT0wO2k8ZjsrK2kpe2ZvcihqPTA7ajxwW2ldOysraikxPT09cFtpKzFdPyhsPShqKzEpJXBbaV0sdGhpcy5mYWNlcy5wdXNoKFt2K2osditsLHYrcFtpXV0pKToobD0oaisxKSVwW2ldLHRoaXMuZmFjZXMucHVzaChbditqLHYrbCx2K3BbaV0rbF0pLHRoaXMuZmFjZXMucHVzaChbditqLHYrcFtpXStsLHYrcFtpXStqXSkpO3YrPXBbaV19aWYoaClmb3Iodis9cFtmXSxqPTA7ajxwW2YrMV07KytqKWw9KGorMSklcFtmKzFdLHRoaXMuZmFjZXMucHVzaChbditqLHYrbCx2K3BbZisxXV0pfTtkLnByb3RvdHlwZS5jeWxpbmRlcj1mdW5jdGlvbihhLGIsYyxlLGcsaCl7dGhpcy5fYXNzZXJ0M2QoXCJjeWxpbmRlclwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjeWxpbmRlclwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPTI0KSx2b2lkIDA9PT1lJiYoZT0xKSx2b2lkIDA9PT1oJiYoaD0hMCksXG52b2lkIDA9PT1nJiYoZz0hMCk7dmFyIGk9XCJjeWxpbmRlcnxcIitjK1wifFwiK2UrXCJ8XCIrZytcInxcIitoO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChpKSl7dmFyIGo9bmV3IGQuR2VvbWV0cnkoYyxlKTtmLmNhbGwoaiwxLDEsMSxjLGUsZyxoKSxqLmNvbXB1dGVOb3JtYWxzKCksYzw9MjQmJmU8PTE2P2ouX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlIG9uIGN5bGluZGVyIG9iamVjdHMgd2l0aCBtb3JlIHRoYW4gMjQgZGV0YWlsWCBvciAxNiBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoaSxqKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoaSxhLGIsYSksdGhpc30sZC5wcm90b3R5cGUuY29uZT1mdW5jdGlvbihhLGIsYyxlLGcpe3RoaXMuX2Fzc2VydDNkKFwiY29uZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjb25lXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9MjQpLHZvaWQgMD09PWUmJihlPTEpLHZvaWQgMD09PWcmJihnPSEwKTt2YXIgaD1cImNvbmV8XCIrYytcInxcIitlK1wifFwiK2c7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGgpKXt2YXIgaT1uZXcgZC5HZW9tZXRyeShjLGUpO2YuY2FsbChpLDEsMCwxLGMsZSxnLCExKSxpLmNvbXB1dGVOb3JtYWxzKCksYzw9MjQmJmU8PTE2P2kuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlIG9uIGNvbmUgb2JqZWN0cyB3aXRoIG1vcmUgdGhhbiAyNCBkZXRhaWxYIG9yIDE2IGRldGFpbFlcIiksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhoLGkpfXJldHVybiB0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVyc1NjYWxlZChoLGEsYixhKSx0aGlzfSxkLnByb3RvdHlwZS5lbGxpcHNvaWQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXt0aGlzLl9hc3NlcnQzZChcImVsbGlwc29pZFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJlbGxpcHNvaWRcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj1hKSx2b2lkIDA9PT1jJiYoYz1hKSx2b2lkIDA9PT1lJiYoZT0yNCksdm9pZCAwPT09ZiYmKGY9MTYpO3ZhciBnPVwiZWxsaXBzb2lkfFwiK2UrXCJ8XCIrZjtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goZykpe3ZhciBoPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTw9dGhpcy5kZXRhaWxZO2ErKylmb3IodmFyIGI9YS90aGlzLmRldGFpbFksYz1NYXRoLlBJKmItTWF0aC5QSS8yLGU9TWF0aC5jb3MoYyksZj1NYXRoLnNpbihjKSxnPTA7Zzw9dGhpcy5kZXRhaWxYO2crKyl7dmFyIGg9Zy90aGlzLmRldGFpbFgsaT0yKk1hdGguUEkqaCxqPU1hdGguY29zKGkpLGs9TWF0aC5zaW4oaSksbD1uZXcgZC5WZWN0b3IoZSprLGYsZSpqKTt0aGlzLnZlcnRpY2VzLnB1c2gobCksdGhpcy52ZXJ0ZXhOb3JtYWxzLnB1c2gobCksdGhpcy51dnMucHVzaChoLGIpfX0saT1uZXcgZC5HZW9tZXRyeShlLGYsaCk7aS5jb21wdXRlRmFjZXMoKSxlPD0yNCYmZjw9MjQ/aS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gZWxsaXBzb2lkcyB3aXRoIG1vcmUgdGhhbiAyNCBkZXRhaWxYIG9yIDI0IGRldGFpbFlcIiksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhnLGkpfXJldHVybiB0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVyc1NjYWxlZChnLGEsYixjKSx0aGlzfSxkLnByb3RvdHlwZS50b3J1cz1mdW5jdGlvbihhLGIsYyxlKXtpZih0aGlzLl9hc3NlcnQzZChcInRvcnVzXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRvcnVzXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hKWE9NTA7ZWxzZSBpZighYSlyZXR1cm47aWYodm9pZCAwPT09YiliPTEwO2Vsc2UgaWYoIWIpcmV0dXJuO3ZvaWQgMD09PWMmJihjPTI0KSx2b2lkIDA9PT1lJiYoZT0xNik7dmFyIGY9KGIvYSkudG9QcmVjaXNpb24oNCksZz1cInRvcnVzfFwiK2YrXCJ8XCIrYytcInxcIitlO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChnKSl7dmFyIGg9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD10aGlzLmRldGFpbFk7YSsrKWZvcih2YXIgYj1hL3RoaXMuZGV0YWlsWSxjPTIqTWF0aC5QSSpiLGU9TWF0aC5jb3MoYyksZz1NYXRoLnNpbihjKSxoPTErZiplLGk9MDtpPD10aGlzLmRldGFpbFg7aSsrKXt2YXIgaj1pL3RoaXMuZGV0YWlsWCxrPTIqTWF0aC5QSSpqLGw9TWF0aC5jb3MoayksbT1NYXRoLnNpbihrKSxuPW5ldyBkLlZlY3RvcihoKmwsaCptLGYqZyksbz1uZXcgZC5WZWN0b3IoZSpsLGUqbSxnKTt0aGlzLnZlcnRpY2VzLnB1c2gobiksdGhpcy52ZXJ0ZXhOb3JtYWxzLnB1c2gobyksdGhpcy51dnMucHVzaChqLGIpfX0saT1uZXcgZC5HZW9tZXRyeShjLGUsaCk7aS5jb21wdXRlRmFjZXMoKSxjPD0yNCYmZTw9MTY/aS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2VzIG9uIHRvcnVzIG9iamVjdCB3aXRoIG1vcmUgdGhhbiAyNCBkZXRhaWxYIG9yIDE2IGRldGFpbFlcIiksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhnLGkpfXJldHVybiB0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVyc1NjYWxlZChnLGEsYSxhKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLl91c2VQb2ludFNoYWRlcigpLHRoaXMuY3VyUG9pbnRTaGFkZXIuYmluZFNoYWRlcigpLHZvaWQgMD09PWMmJihjPTApO3ZhciBlPVtdO3JldHVybiBlLnB1c2gobmV3IGQuVmVjdG9yKGEsYixjKSksdGhpcy5fZHJhd1BvaW50cyhlLHRoaXMuX3BvaW50VmVydGV4QnVmZmVyKSx0aGlzLmN1clBvaW50U2hhZGVyLnVuYmluZFNoYWRlcigpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUudHJpYW5nbGU9ZnVuY3Rpb24oYSl7dmFyIGI9YVswXSxjPWFbMV0sZT1hWzJdLGY9YVszXSxnPWFbNF0saD1hWzVdLGk9XCJ0cmlcIjtpZighdGhpcy5nZW9tZXRyeUluSGFzaChpKSl7dmFyIGo9ZnVuY3Rpb24oKXt2YXIgYT1bXTthLnB1c2gobmV3IGQuVmVjdG9yKDAsMCwwKSksYS5wdXNoKG5ldyBkLlZlY3RvcigwLDEsMCkpLGEucHVzaChuZXcgZC5WZWN0b3IoMSwwLDApKSx0aGlzLnN0cm9rZUluZGljZXM9W1swLDFdLFsxLDJdLFsyLDBdXSx0aGlzLnZlcnRpY2VzPWEsdGhpcy5mYWNlcz1bWzAsMSwyXV0sdGhpcy51dnM9WzAsMCwwLDEsMSwxXX0saz1uZXcgZC5HZW9tZXRyeSgxLDEsaik7ay5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCksay5jb21wdXRlTm9ybWFscygpLHRoaXMuY3JlYXRlQnVmZmVycyhpLGspfXZhciBsPXRoaXMudU1WTWF0cml4LmNvcHkoKTt0cnl7dmFyIG09bmV3IGQuTWF0cml4KFtlLWIsZi1jLDAsMCxnLWIsaC1jLDAsMCwwLDAsMSwwLGIsYywwLDFdKS5tdWx0KHRoaXMudU1WTWF0cml4KTt0aGlzLnVNVk1hdHJpeD1tLHRoaXMuZHJhd0J1ZmZlcnMoaSl9ZmluYWxseXt0aGlzLnVNVk1hdHJpeD1sfXJldHVybiB0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmVsbGlwc2U9ZnVuY3Rpb24oYSl7dGhpcy5hcmMoYVswXSxhWzFdLGFbMl0sYVszXSwwLGUuVFdPX1BJLGUuT1BFTixhWzRdKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5hcmM9ZnVuY3Rpb24oYSl7dmFyIGIsYyxmPWFyZ3VtZW50c1swXSxnPWFyZ3VtZW50c1sxXSxoPWFyZ3VtZW50c1syXSxpPWFyZ3VtZW50c1szXSxqPWFyZ3VtZW50c1s0XSxrPWFyZ3VtZW50c1s1XSxsPWFyZ3VtZW50c1s2XSxtPWFyZ3VtZW50c1s3XXx8MjU7aWYoTWF0aC5hYnMoay1qKT49ZS5UV09fUEk/KGI9XCJlbGxpcHNlXCIsYz1iK1wifFwiK20rXCJ8XCIpOihiPVwiYXJjXCIsYz1iK1wifFwiK2orXCJ8XCIraytcInxcIitsK1wifFwiK20rXCJ8XCIpLCF0aGlzLmdlb21ldHJ5SW5IYXNoKGMpKXt2YXIgbj1mdW5jdGlvbigpe2lmKHRoaXMuc3Ryb2tlSW5kaWNlcz1bXSxqLnRvRml4ZWQoMTApIT09ay50b0ZpeGVkKDEwKSl7bCE9PWUuUElFJiZ2b2lkIDAhPT1sfHwodGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvciguNSwuNSwwKSksdGhpcy51dnMucHVzaChbLjUsLjVdKSk7Zm9yKHZhciBhPTA7YTw9bTthKyspe3ZhciBiPWEvbSxjPShrLWopKmIraixmPS41K01hdGguY29zKGMpLzIsZz0uNStNYXRoLnNpbihjKS8yO3RoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoZixnLDApKSx0aGlzLnV2cy5wdXNoKFtmLGddKSxhPG0tMSYmKHRoaXMuZmFjZXMucHVzaChbMCxhKzEsYSsyXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goW2ErMSxhKzJdKSl9c3dpdGNoKGwpe2Nhc2UgZS5QSUU6dGhpcy5mYWNlcy5wdXNoKFswLHRoaXMudmVydGljZXMubGVuZ3RoLTIsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLDFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMix0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pO2JyZWFrO2Nhc2UgZS5DSE9SRDp0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCwxXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pO2JyZWFrO2Nhc2UgZS5PUEVOOnRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLDFdKTticmVhaztkZWZhdWx0OnRoaXMuZmFjZXMucHVzaChbMCx0aGlzLnZlcnRpY2VzLmxlbmd0aC0yLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMix0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSl9fX0sbz1uZXcgZC5HZW9tZXRyeShtLDEsbik7by5jb21wdXRlTm9ybWFscygpLG08PTUwP28uX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcyhvKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBzdHJva2UgXCIrYitcIiB3aXRoIG1vcmUgdGhhbiA1MCBkZXRhaWxcIiksdGhpcy5jcmVhdGVCdWZmZXJzKGMsbyl9dmFyIHA9dGhpcy51TVZNYXRyaXguY29weSgpO3RyeXt0aGlzLnVNVk1hdHJpeC50cmFuc2xhdGUoW2YsZywwXSksdGhpcy51TVZNYXRyaXguc2NhbGUoaCxpLDEpLHRoaXMuZHJhd0J1ZmZlcnMoYyl9ZmluYWxseXt0aGlzLnVNVk1hdHJpeD1wfXJldHVybiB0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJlY3Q9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hdHRyaWJ1dGVzLnBlclBpeGVsTGlnaHRpbmcsYz1hWzBdLGU9YVsxXSxmPWFbMl0sZz1hWzNdLGg9YVs0XXx8KGI/MToyNCksaT1hWzVdfHwoYj8xOjE2KSxqPVwicmVjdHxcIitoK1wifFwiK2k7aWYoIXRoaXMuZ2VvbWV0cnlJbkhhc2goaikpe3ZhciBrPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTw9dGhpcy5kZXRhaWxZO2ErKylmb3IodmFyIGI9YS90aGlzLmRldGFpbFksYz0wO2M8PXRoaXMuZGV0YWlsWDtjKyspe3ZhciBlPWMvdGhpcy5kZXRhaWxYLGY9bmV3IGQuVmVjdG9yKGUsYiwwKTt0aGlzLnZlcnRpY2VzLnB1c2goZiksdGhpcy51dnMucHVzaChlLGIpfWg+MCYmaT4wJiYodGhpcy5zdHJva2VJbmRpY2VzPVtbMCxoXSxbaCwoaCsxKSooaSsxKS0xXSxbKGgrMSkqKGkrMSktMSwoaCsxKSppXSxbKGgrMSkqaSwwXV0pfSxsPW5ldyBkLkdlb21ldHJ5KGgsaSxrKTtsLmNvbXB1dGVGYWNlcygpLmNvbXB1dGVOb3JtYWxzKCkuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpLHRoaXMuY3JlYXRlQnVmZmVycyhqLGwpfXZhciBtPXRoaXMudU1WTWF0cml4LmNvcHkoKTt0cnl7dGhpcy51TVZNYXRyaXgudHJhbnNsYXRlKFtjLGUsMF0pLHRoaXMudU1WTWF0cml4LnNjYWxlKGYsZywxKSx0aGlzLmRyYXdCdWZmZXJzKGopfWZpbmFsbHl7dGhpcy51TVZNYXRyaXg9bX1yZXR1cm4gdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5xdWFkPWZ1bmN0aW9uKGEsYixjLGUsZixnLGgsaSl7dmFyIGo9XCJxdWFkfFwiK2ErXCJ8XCIrYitcInxcIitjK1wifFwiK2UrXCJ8XCIrZitcInxcIitnK1wifFwiK2grXCJ8XCIraTtpZighdGhpcy5nZW9tZXRyeUluSGFzaChqKSl7dmFyIGs9ZnVuY3Rpb24oKXt0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGEsYiwwKSksdGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihjLGUsMCkpLHRoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoZixnLDApKSx0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGgsaSwwKSksdGhpcy51dnMucHVzaCgwLDAsMSwwLDEsMSwwLDEpLHRoaXMuc3Ryb2tlSW5kaWNlcz1bWzAsMV0sWzEsMl0sWzIsM10sWzMsMF1dfSxsPW5ldyBkLkdlb21ldHJ5KDIsMixrKTtsLmNvbXB1dGVOb3JtYWxzKCkuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpLGwuZmFjZXM9W1swLDEsMl0sWzIsMywwXV0sdGhpcy5jcmVhdGVCdWZmZXJzKGosbCl9cmV0dXJuIHRoaXMuZHJhd0J1ZmZlcnMoaiksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5iZXppZXI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGksaixrLGwpezg9PT1hcmd1bWVudHMubGVuZ3RoJiYoaj1nLGs9aCxnPWUsaD1kLGQ9YyxlPWQsYz1mPWk9bD0wKTt2YXIgbT10aGlzLl9wSW5zdC5fYmV6aWVyRGV0YWlsfHwyMDt0aGlzLmJlZ2luU2hhcGUoKTtmb3IodmFyIG49MDtuPD1tO24rKyl7dmFyIG89TWF0aC5wb3coMS1uL20sMykscD1uL20qMypNYXRoLnBvdygxLW4vbSwyKSxxPTMqTWF0aC5wb3cobi9tLDIpKigxLW4vbSkscj1NYXRoLnBvdyhuL20sMyk7dGhpcy52ZXJ0ZXgoYSpvK2QqcCtnKnEraipyLGIqbytlKnAraCpxK2sqcixjKm8rZipwK2kqcStsKnIpfXJldHVybiB0aGlzLmVuZFNoYXBlKCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSxqLGssbCl7OD09PWFyZ3VtZW50cy5sZW5ndGgmJihqPWcsaz1oLGc9ZSxoPWQsZD1jLGU9ZCxjPWY9aT1sPTApO3ZhciBtPXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbDt0aGlzLmJlZ2luU2hhcGUoKTtmb3IodmFyIG49MDtuPD1tO24rKyl7dmFyIG89LjUqTWF0aC5wb3cobi9tLDMpLHA9LjUqTWF0aC5wb3cobi9tLDIpLHE9bi9tKi41LHI9LjUscz1vKigzKmQtYS0zKmcraikrcCooMiphLTUqZCs0KmctaikrcSooLWErZykrciooMipkKSx0PW8qKDMqZS1iLTMqaCtrKStwKigyKmItNSplKzQqaC1rKStxKigtYitoKStyKigyKmUpLHU9byooMypmLWMtMyppK2wpK3AqKDIqYy01KmYrNCppLWwpK3EqKC1jK2kpK3IqKDIqZik7dGhpcy52ZXJ0ZXgocyx0LHUpfXJldHVybiB0aGlzLmVuZFNoYXBlKCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIDY9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLmJlZ2luU2hhcGUoKSx0aGlzLnZlcnRleChhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSksdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSxhcmd1bWVudHNbNV0pLHRoaXMuZW5kU2hhcGUoKSk6ND09PWFyZ3VtZW50cy5sZW5ndGgmJih0aGlzLmJlZ2luU2hhcGUoKSx0aGlzLnZlcnRleChhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLDApLHRoaXMudmVydGV4KGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10sMCksdGhpcy5lbmRTaGFwZSgpKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmJlemllclZlcnRleD1mdW5jdGlvbigpe2lmKDA9PT10aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleC5sZW5ndGgpdGhyb3cgRXJyb3IoXCJ2ZXJ0ZXgoKSBtdXN0IGJlIHVzZWQgb25jZSBiZWZvcmUgY2FsbGluZyBiZXppZXJWZXJ0ZXgoKVwiKTt2YXIgYSxiLGMsZCxlLGY9W10sZz1bXSxoPVtdLGk9YXJndW1lbnRzLmxlbmd0aDtpZihhPTAsMD09PXRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyLmxlbmd0aHx8dGhpcy5fbHV0QmV6aWVyRGV0YWlsIT09dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsKXt0aGlzLl9sb29rVXBUYWJsZUJlemllcj1bXSx0aGlzLl9sdXRCZXppZXJEZXRhaWw9dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsO2Zvcih2YXIgaj0xL3RoaXMuX2x1dEJlemllckRldGFpbCxrPTAsbD0xLG09MDtrPDE7KXtpZihhPXBhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSx0aGlzLl9sb29rVXBUYWJsZUJlemllclttXT10aGlzLl9iZXppZXJDb2VmZmljaWVudHMoYSksbC50b0ZpeGVkKDYpPT09ai50b0ZpeGVkKDYpKXthPXBhcnNlRmxvYXQobC50b0ZpeGVkKDYpKStwYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksKyttLHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW21dPXRoaXMuX2JlemllckNvZWZmaWNpZW50cyhhKTticmVha31rKz1qLGwtPWosKyttfX12YXIgbj10aGlzLl9sb29rVXBUYWJsZUJlemllci5sZW5ndGg7aWYoNj09PWkpe2Zvcih0aGlzLmlzQmV6aWVyPSEwLGY9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzBdLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzRdXSxnPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsxXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s1XV0sZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStmWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZ1szXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSx0aGlzLnZlcnRleChiLGMpO3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzBdPWFyZ3VtZW50c1s0XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsxXT1hcmd1bWVudHNbNV19ZWxzZSBpZig5PT09aSl7Zm9yKHRoaXMuaXNCZXppZXI9ITAsZj1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF0sYXJndW1lbnRzWzBdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNl1dLGc9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbNF0sYXJndW1lbnRzWzddXSxoPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsyXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzVdLGFyZ3VtZW50c1s4XV0sZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStmWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZ1szXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxkPWhbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0raFsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStoWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2hbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sdGhpcy52ZXJ0ZXgoYixjLGQpO3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzBdPWFyZ3VtZW50c1s2XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsxXT1hcmd1bWVudHNbN10sdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMl09YXJndW1lbnRzWzhdfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5xdWFkcmF0aWNWZXJ0ZXg9ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXgubGVuZ3RoKXRocm93IEVycm9yKFwidmVydGV4KCkgbXVzdCBiZSB1c2VkIG9uY2UgYmVmb3JlIGNhbGxpbmcgcXVhZHJhdGljVmVydGV4KClcIik7dmFyIGEsYixjLGQsZSxmPVtdLGc9W10saD1bXSxpPWFyZ3VtZW50cy5sZW5ndGg7aWYoYT0wLDA9PT10aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpYy5sZW5ndGh8fHRoaXMuX2x1dFF1YWRyYXRpY0RldGFpbCE9PXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbCl7dGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWM9W10sdGhpcy5fbHV0UXVhZHJhdGljRGV0YWlsPXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbDtmb3IodmFyIGo9MS90aGlzLl9sdXRRdWFkcmF0aWNEZXRhaWwsaz0wLGw9MSxtPTA7azwxOyl7aWYoYT1wYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbbV09dGhpcy5fcXVhZHJhdGljQ29lZmZpY2llbnRzKGEpLGwudG9GaXhlZCg2KT09PWoudG9GaXhlZCg2KSl7YT1wYXJzZUZsb2F0KGwudG9GaXhlZCg2KSkrcGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLCsrbSx0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1ttXT10aGlzLl9xdWFkcmF0aWNDb2VmZmljaWVudHMoYSk7YnJlYWt9ays9aixsLT1qLCsrbX19dmFyIG49dGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWMubGVuZ3RoO2lmKDQ9PT1pKXtmb3IodGhpcy5pc1F1YWRyYXRpYz0hMCxmPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFswXSxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzJdXSxnPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzNdXSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sdGhpcy52ZXJ0ZXgoYixjKTt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFswXT1hcmd1bWVudHNbMl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMV09YXJndW1lbnRzWzNdfWVsc2UgaWYoNj09PWkpe2Zvcih0aGlzLmlzUXVhZHJhdGljPSEwLGY9W3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbM11dLGc9W3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbNF1dLGg9W3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzJdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbNV1dLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSxkPWhbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0raFsxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStoWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLHRoaXMudmVydGV4KGIsYyxkKTt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFswXT1hcmd1bWVudHNbM10sdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMV09YXJndW1lbnRzWzRdLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzJdPWFyZ3VtZW50c1s1XX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuY3VydmVWZXJ0ZXg9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGY9W10sZz1bXSxoPVtdO2E9MDt2YXIgaT1hcmd1bWVudHMubGVuZ3RoO2lmKDA9PT10aGlzLl9sb29rVXBUYWJsZUJlemllci5sZW5ndGh8fHRoaXMuX2x1dEJlemllckRldGFpbCE9PXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbCl7dGhpcy5fbG9va1VwVGFibGVCZXppZXI9W10sdGhpcy5fbHV0QmV6aWVyRGV0YWlsPXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbDtmb3IodmFyIGo9MS90aGlzLl9sdXRCZXppZXJEZXRhaWwsaz0wLGw9MSxtPTA7azwxOyl7aWYoYT1wYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksdGhpcy5fbG9va1VwVGFibGVCZXppZXJbbV09dGhpcy5fYmV6aWVyQ29lZmZpY2llbnRzKGEpLGwudG9GaXhlZCg2KT09PWoudG9GaXhlZCg2KSl7YT1wYXJzZUZsb2F0KGwudG9GaXhlZCg2KSkrcGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLCsrbSx0aGlzLl9sb29rVXBUYWJsZUJlemllclttXT10aGlzLl9iZXppZXJDb2VmZmljaWVudHMoYSk7YnJlYWt9ays9aixsLT1qLCsrbX19dmFyIG49dGhpcy5fbG9va1VwVGFibGVCZXppZXIubGVuZ3RoO2lmKDI9PT1pKXtpZih0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzBdKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzFdKSw4PT09dGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5sZW5ndGgpe2Zvcih0aGlzLmlzQ3VydmU9ITAsZj10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFsyXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzRdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNl1dKSxnPXRoaXMuX2JlemllclRvQ2F0bXVsbChbdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFsxXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzNdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNV0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs3XV0pLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZlszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2dbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sdGhpcy52ZXJ0ZXgoYixjKTtmb3IoZT0wO2U8aTtlKyspdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5zaGlmdCgpfX1lbHNlIGlmKDM9PT1pJiYodGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5wdXNoKGFyZ3VtZW50c1swXSksdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5wdXNoKGFyZ3VtZW50c1sxXSksdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5wdXNoKGFyZ3VtZW50c1syXSksMTI9PT10aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4Lmxlbmd0aCkpe2Zvcih0aGlzLmlzQ3VydmU9ITAsZj10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFszXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzZdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbOV1dKSxnPXRoaXMuX2JlemllclRvQ2F0bXVsbChbdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFsxXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzRdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbN10sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFsxMF1dKSxoPXRoaXMuX2JlemllclRvQ2F0bXVsbChbdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFsyXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzVdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbOF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFsxMV1dKSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2ZbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStnWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGQ9aFswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStoWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2hbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0raFszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSx0aGlzLnZlcnRleChiLGMsZCk7Zm9yKGU9MDtlPGk7ZSsrKXRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXguc2hpZnQoKX19LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1Lkdlb21ldHJ5XCI6NzB9XSw2NTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5wcm90b3R5cGUub3JiaXRDb250cm9sPWZ1bmN0aW9uKGEsYil7aWYodGhpcy5fYXNzZXJ0M2QoXCJvcmJpdENvbnRyb2xcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwib3JiaXRDb250cm9sXCIsYXJndW1lbnRzKSx0aGlzLm1vdXNlWDx0aGlzLndpZHRoJiZ0aGlzLm1vdXNlWD4wJiZ0aGlzLm1vdXNlWTx0aGlzLmhlaWdodCYmdGhpcy5tb3VzZVk+MCl7dmFyIGM9dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYTt2b2lkIDA9PT1hJiYoYT0xKSx2b2lkIDA9PT1iJiYoYj1hKSwhMCE9PXRoaXMuY29udGV4dE1lbnVEaXNhYmxlZCYmKHRoaXMuY2FudmFzLm9uY29udGV4dG1lbnU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdGhpcy5fc2V0UHJvcGVydHkoXCJjb250ZXh0TWVudURpc2FibGVkXCIsITApKSwhMCE9PXRoaXMud2hlZWxEZWZhdWx0RGlzYWJsZWQmJih0aGlzLmNhbnZhcy5vbndoZWVsPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHRoaXMuX3NldFByb3BlcnR5KFwid2hlZWxEZWZhdWx0RGlzYWJsZWRcIiwhMCkpO3ZhciBlPXRoaXMuaGVpZ2h0PHRoaXMud2lkdGg/dGhpcy5oZWlnaHQ6dGhpcy53aWR0aDtpZih0aGlzLl9tb3VzZVdoZWVsRGVsdGFZIT09dGhpcy5fcG1vdXNlV2hlZWxEZWx0YVkmJih0aGlzLl9tb3VzZVdoZWVsRGVsdGFZPjA/dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5fb3JiaXQoMCwwLC41KmUpOnRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuX29yYml0KDAsMCwtLjUqZSkpLHRoaXMubW91c2VJc1ByZXNzZWQpaWYodGhpcy5tb3VzZUJ1dHRvbj09PXRoaXMuTEVGVCl7dmFyIGY9LWEqKHRoaXMubW91c2VYLXRoaXMucG1vdXNlWCkvZSxnPWIqKHRoaXMubW91c2VZLXRoaXMucG1vdXNlWSkvZTt0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLl9vcmJpdChmLGcsMCl9ZWxzZSBpZih0aGlzLm1vdXNlQnV0dG9uPT09dGhpcy5SSUdIVCl7dmFyIGg9Yy5fZ2V0TG9jYWxBeGVzKCksaT1NYXRoLnNxcnQoaC54WzBdKmgueFswXStoLnhbMl0qaC54WzJdKTswIT09aSYmKGgueFswXS89aSxoLnhbMl0vPWkpO3ZhciBqPU1hdGguc3FydChoLnlbMF0qaC55WzBdK2gueVsyXSpoLnlbMl0pOzAhPT1qJiYoaC55WzBdLz1qLGgueVsyXS89aik7dmFyIGs9LTEqYSoodGhpcy5tb3VzZVgtdGhpcy5wbW91c2VYKSxsPS0xKmIqKHRoaXMubW91c2VZLXRoaXMucG1vdXNlWSk7Yy5zZXRQb3NpdGlvbihjLmV5ZVgraypoLnhbMF0rbCpoLnpbMF0sYy5leWVZLGMuZXllWitrKmgueFsyXStsKmguelsyXSl9cmV0dXJuIHRoaXN9fSxkLnByb3RvdHlwZS5kZWJ1Z01vZGU9ZnVuY3Rpb24oKXt0aGlzLl9hc3NlcnQzZChcImRlYnVnTW9kZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJkZWJ1Z01vZGVcIixhcmd1bWVudHMpO2Zvcih2YXIgYT10aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0Lmxlbmd0aC0xO2E+PTA7YS0tKXRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3RbYV0udG9TdHJpbmcoKSE9PXRoaXMuX2dyaWQoKS50b1N0cmluZygpJiZ0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0W2FdLnRvU3RyaW5nKCkhPT10aGlzLl9heGVzSWNvbigpLnRvU3RyaW5nKCl8fHRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3Quc3BsaWNlKGEsMSk7YXJndW1lbnRzWzBdPT09ZS5HUklEP3RoaXMucmVnaXN0ZXJNZXRob2QoXCJwb3N0XCIsdGhpcy5fZ3JpZC5jYWxsKHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzRdLGFyZ3VtZW50c1s1XSkpOmFyZ3VtZW50c1swXT09PWUuQVhFUz90aGlzLnJlZ2lzdGVyTWV0aG9kKFwicG9zdFwiLHRoaXMuX2F4ZXNJY29uLmNhbGwodGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNF0pKToodGhpcy5yZWdpc3Rlck1ldGhvZChcInBvc3RcIix0aGlzLl9ncmlkLmNhbGwodGhpcyxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzRdKSksdGhpcy5yZWdpc3Rlck1ldGhvZChcInBvc3RcIix0aGlzLl9heGVzSWNvbi5jYWxsKHRoaXMsYXJndW1lbnRzWzVdLGFyZ3VtZW50c1s2XSxhcmd1bWVudHNbN10sYXJndW1lbnRzWzhdKSkpfSxkLnByb3RvdHlwZS5ub0RlYnVnTW9kZT1mdW5jdGlvbigpe3RoaXMuX2Fzc2VydDNkKFwibm9EZWJ1Z01vZGVcIik7Zm9yKHZhciBhPXRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3QubGVuZ3RoLTE7YT49MDthLS0pdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdFthXS50b1N0cmluZygpIT09dGhpcy5fZ3JpZCgpLnRvU3RyaW5nKCkmJnRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3RbYV0udG9TdHJpbmcoKSE9PXRoaXMuX2F4ZXNJY29uKCkudG9TdHJpbmcoKXx8dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5zcGxpY2UoYSwxKX0sZC5wcm90b3R5cGUuX2dyaWQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2b2lkIDA9PT1hJiYoYT10aGlzLndpZHRoLzIpLHZvaWQgMD09PWImJihiPU1hdGgucm91bmQoYS8zMCk8ND80Ok1hdGgucm91bmQoYS8zMCkpLHZvaWQgMD09PWMmJihjPTApLHZvaWQgMD09PWQmJihkPTApLHZvaWQgMD09PWUmJihlPTApO3ZhciBmPWEvYixnPWEvMjtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnB1c2goKSx0aGlzLnN0cm9rZSgyNTUqdGhpcy5fcmVuZGVyZXIuY3VyU3Ryb2tlQ29sb3JbMF0sMjU1KnRoaXMuX3JlbmRlcmVyLmN1clN0cm9rZUNvbG9yWzFdLDI1NSp0aGlzLl9yZW5kZXJlci5jdXJTdHJva2VDb2xvclsyXSksdGhpcy5fcmVuZGVyZXIudU1WTWF0cml4LnNldCh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzBdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsyXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzNdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs1XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzZdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbN10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs4XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzldLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTBdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTFdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTJdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTNdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTRdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTVdKTtmb3IodmFyIGE9MDthPD1iO2ErKyl0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoLWcrYyxkLGEqZi1nK2UpLHRoaXMudmVydGV4KCtnK2MsZCxhKmYtZytlKSx0aGlzLmVuZFNoYXBlKCk7Zm9yKHZhciBoPTA7aDw9YjtoKyspdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KGgqZi1nK2MsZCwtZytlKSx0aGlzLnZlcnRleChoKmYtZytjLGQsK2crZSksdGhpcy5lbmRTaGFwZSgpO3RoaXMucG9wKCl9fSxkLnByb3RvdHlwZS5fYXhlc0ljb249ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHZvaWQgMD09PWEmJihhPXRoaXMud2lkdGgvMjA+NDA/dGhpcy53aWR0aC8yMDo0MCksdm9pZCAwPT09YiYmKGI9LXRoaXMud2lkdGgvNCksdm9pZCAwPT09YyYmKGM9Yiksdm9pZCAwPT09ZCYmKGQ9YiksZnVuY3Rpb24oKXt0aGlzLnB1c2goKSx0aGlzLl9yZW5kZXJlci51TVZNYXRyaXguc2V0KHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzJdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbM10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs0XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzVdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs3XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzhdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxM10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNV0pLHRoaXMuc3Ryb2tlV2VpZ2h0KDIpLHRoaXMuc3Ryb2tlKDI1NSwwLDApLHRoaXMuYmVnaW5TaGFwZSh0aGlzLkxJTkVTKSx0aGlzLnZlcnRleChiLGMsZCksdGhpcy52ZXJ0ZXgoYithLGMsZCksdGhpcy5lbmRTaGFwZSgpLHRoaXMuc3Ryb2tlKDAsMjU1LDApLHRoaXMuYmVnaW5TaGFwZSh0aGlzLkxJTkVTKSx0aGlzLnZlcnRleChiLGMsZCksdGhpcy52ZXJ0ZXgoYixjK2EsZCksdGhpcy5lbmRTaGFwZSgpLHRoaXMuc3Ryb2tlKDAsMCwyNTUpLHRoaXMuYmVnaW5TaGFwZSh0aGlzLkxJTkVTKSx0aGlzLnZlcnRleChiLGMsZCksdGhpcy52ZXJ0ZXgoYixjLGQrYSksdGhpcy5lbmRTaGFwZSgpLHRoaXMucG9wKCl9fSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmFtYmllbnRMaWdodD1mdW5jdGlvbihhLGIsYyxlKXt0aGlzLl9hc3NlcnQzZChcImFtYmllbnRMaWdodFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJhbWJpZW50TGlnaHRcIixhcmd1bWVudHMpO3ZhciBmPXRoaXMuY29sb3IuYXBwbHkodGhpcyxhcmd1bWVudHMpLGc9dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIGcuc2V0VW5pZm9ybShcInVVc2VMaWdodGluZ1wiLCEwKSxnLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvciksdGhpcy5fcmVuZGVyZXIuYW1iaWVudExpZ2h0Q29sb3JzLnB1c2goZi5fYXJyYXlbMF0sZi5fYXJyYXlbMV0sZi5fYXJyYXlbMl0pLGcuc2V0VW5pZm9ybShcInVBbWJpZW50Q29sb3JcIix0aGlzLl9yZW5kZXJlci5hbWJpZW50TGlnaHRDb2xvcnMpLGcuc2V0VW5pZm9ybShcInVBbWJpZW50TGlnaHRDb3VudFwiLHRoaXMuX3JlbmRlcmVyLmFtYmllbnRMaWdodENvbG9ycy5sZW5ndGgvMyksdGhpc30sZC5wcm90b3R5cGUuZGlyZWN0aW9uYWxMaWdodD1mdW5jdGlvbihhLGIsYyxlLGYsZyl7dGhpcy5fYXNzZXJ0M2QoXCJkaXJlY3Rpb25hbExpZ2h0XCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImRpcmVjdGlvbmFsTGlnaHRcIixhcmd1bWVudHMpO3ZhciBoLGk9dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7aD1hIGluc3RhbmNlb2YgZC5Db2xvcj9hOnRoaXMuY29sb3IoYSxiLGMpO3ZhciBqLGssbCxtPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdO1wibnVtYmVyXCI9PXR5cGVvZiBtPyhqPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTNdLGs9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMl0sbD1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSk6KGo9bS54LGs9bS55LGw9bS56KSxpLnNldFVuaWZvcm0oXCJ1VXNlTGlnaHRpbmdcIiwhMCksaS5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3IpO3ZhciBuPU1hdGguc3FydChqKmorayprK2wqbCk7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25zLnB1c2goai9uLGsvbixsL24pLGkuc2V0VW5pZm9ybShcInVMaWdodGluZ0RpcmVjdGlvblwiLHRoaXMuX3JlbmRlcmVyLmRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25zKSx0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzLnB1c2goaC5fYXJyYXlbMF0saC5fYXJyYXlbMV0saC5fYXJyYXlbMl0pLGkuc2V0VW5pZm9ybShcInVEaXJlY3Rpb25hbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodENvbG9ycyksaS5zZXRVbmlmb3JtKFwidURpcmVjdGlvbmFsTGlnaHRDb3VudFwiLHRoaXMuX3JlbmRlcmVyLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnMubGVuZ3RoLzMpLHRoaXN9LGQucHJvdG90eXBlLnBvaW50TGlnaHQ9ZnVuY3Rpb24oYSxiLGMsZSxmLGcpe3RoaXMuX2Fzc2VydDNkKFwicG9pbnRMaWdodFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwb2ludExpZ2h0XCIsYXJndW1lbnRzKTt2YXIgaDtoPWEgaW5zdGFuY2VvZiBkLkNvbG9yP2E6dGhpcy5jb2xvcihhLGIsYyk7dmFyIGksaixrLGw9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV07XCJudW1iZXJcIj09dHlwZW9mIGw/KGk9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtM10saj1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSxrPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKTooaT1sLngsaj1sLnksaz1sLnopO3ZhciBtPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBtLnNldFVuaWZvcm0oXCJ1VXNlTGlnaHRpbmdcIiwhMCksbS5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3IpLHRoaXMuX3JlbmRlcmVyLnBvaW50TGlnaHRQb3NpdGlvbnMucHVzaChpLGosayksbS5zZXRVbmlmb3JtKFwidVBvaW50TGlnaHRMb2NhdGlvblwiLHRoaXMuX3JlbmRlcmVyLnBvaW50TGlnaHRQb3NpdGlvbnMpLHRoaXMuX3JlbmRlcmVyLnBvaW50TGlnaHRDb2xvcnMucHVzaChoLl9hcnJheVswXSxoLl9hcnJheVsxXSxoLl9hcnJheVsyXSksbS5zZXRVbmlmb3JtKFwidVBvaW50TGlnaHRDb2xvclwiLHRoaXMuX3JlbmRlcmVyLnBvaW50TGlnaHRDb2xvcnMpLG0uc2V0VW5pZm9ybShcInVQb2ludExpZ2h0Q291bnRcIix0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0Q29sb3JzLmxlbmd0aC8zKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw2NzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiKXtmb3IodmFyIGM9e3Y6W10sdnQ6W10sdm46W119LGQ9e30sZj0wO2Y8Yi5sZW5ndGg7KytmKXt2YXIgZz1iW2ZdLnRyaW0oKS5zcGxpdCgvXFxiXFxzKy8pO2lmKGcubGVuZ3RoPjApaWYoXCJ2XCI9PT1nWzBdfHxcInZuXCI9PT1nWzBdKXt2YXIgaD1uZXcgZS5WZWN0b3IocGFyc2VGbG9hdChnWzFdKSxwYXJzZUZsb2F0KGdbMl0pLHBhcnNlRmxvYXQoZ1szXSkpO2NbZ1swXV0ucHVzaChoKX1lbHNlIGlmKFwidnRcIj09PWdbMF0pe3ZhciBpPVtwYXJzZUZsb2F0KGdbMV0pLHBhcnNlRmxvYXQoZ1syXSldO2NbZ1swXV0ucHVzaChpKX1lbHNlIGlmKFwiZlwiPT09Z1swXSlmb3IodmFyIGo9MztqPGcubGVuZ3RoOysrail7Zm9yKHZhciBrPVtdLGw9WzEsai0xLGpdLG09MDttPGwubGVuZ3RoOysrbSl7dmFyIG49Z1tsW21dXSxvPTA7aWYodm9pZCAwIT09ZFtuXSlvPWRbbl07ZWxzZXtmb3IodmFyIHA9bi5zcGxpdChcIi9cIikscT0wO3E8cC5sZW5ndGg7cSsrKXBbcV09cGFyc2VJbnQocFtxXSktMTtvPWRbbl09YS52ZXJ0aWNlcy5sZW5ndGgsYS52ZXJ0aWNlcy5wdXNoKGMudltwWzBdXS5jb3B5KCkpLGMudnRbcFsxXV0/YS51dnMucHVzaChjLnZ0W3BbMV1dLnNsaWNlKCkpOmEudXZzLnB1c2goWzAsMF0pLGMudm5bcFsyXV0mJmEudmVydGV4Tm9ybWFscy5wdXNoKGMudm5bcFsyXV0uY29weSgpKX1rLnB1c2gobyl9a1swXSE9PWtbMV0mJmtbMF0hPT1rWzJdJiZrWzFdIT09a1syXSYmYS5mYWNlcy5wdXNoKGspfX1yZXR1cm4gMD09PWEudmVydGV4Tm9ybWFscy5sZW5ndGgmJmEuY29tcHV0ZU5vcm1hbHMoKSxhfXZhciBlPWEoXCIuLi9jb3JlL21haW5cIik7YShcIi4vcDUuR2VvbWV0cnlcIiksZS5wcm90b3R5cGUubG9hZE1vZGVsPWZ1bmN0aW9uKGEpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRNb2RlbFwiLGFyZ3VtZW50cyk7dmFyIGIsYyxmO1wiYm9vbGVhblwiPT10eXBlb2YgYXJndW1lbnRzWzFdPyhiPWFyZ3VtZW50c1sxXSxjPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXSk6KGI9ITEsYz1hcmd1bWVudHNbMV0sZj1hcmd1bWVudHNbMl0pO3ZhciBnPW5ldyBlLkdlb21ldHJ5O2cuZ2lkPWErXCJ8XCIrYjt2YXIgaD10aGlzO3JldHVybiB0aGlzLmxvYWRTdHJpbmdzKGEsZnVuY3Rpb24oYSl7ZChnLGEpLGImJmcubm9ybWFsaXplKCksaC5fZGVjcmVtZW50UHJlbG9hZCgpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJmMoZyl9LmJpbmQodGhpcyksZiksZ30sZS5wcm90b3R5cGUubW9kZWw9ZnVuY3Rpb24oYSl7dGhpcy5fYXNzZXJ0M2QoXCJtb2RlbFwiKSxlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtb2RlbFwiLGFyZ3VtZW50cyksYS52ZXJ0aWNlcy5sZW5ndGg+MCYmKHRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGEuZ2lkKXx8KGEuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoYS5naWQsYSkpLHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzKGEuZ2lkKSl9LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNCxcIi4vcDUuR2VvbWV0cnlcIjo3MH1dLDY4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi9wNS5UZXh0dXJlXCIpLGQucHJvdG90eXBlLmxvYWRTaGFkZXI9ZnVuY3Rpb24oYSxiKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkU2hhZGVyXCIsYXJndW1lbnRzKTt2YXIgYz1uZXcgZC5TaGFkZXIsZT10aGlzLGY9ITEsZz0hMTtyZXR1cm4gdGhpcy5sb2FkU3RyaW5ncyhiLGZ1bmN0aW9uKGEpe2MuX2ZyYWdTcmM9YS5qb2luKFwiXFxuXCIpLGY9ITAsZyYmZS5fZGVjcmVtZW50UHJlbG9hZCgpfSksdGhpcy5sb2FkU3RyaW5ncyhhLGZ1bmN0aW9uKGEpe2MuX3ZlcnRTcmM9YS5qb2luKFwiXFxuXCIpLGc9ITAsZiYmZS5fZGVjcmVtZW50UHJlbG9hZCgpfSksY30sZC5wcm90b3R5cGUuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwiY3JlYXRlU2hhZGVyXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZVNoYWRlclwiLGFyZ3VtZW50cyksbmV3IGQuU2hhZGVyKHRoaXMuX3JlbmRlcmVyLGEsYil9LGQucHJvdG90eXBlLnNoYWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJzaGFkZXJcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2hhZGVyXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hLl9yZW5kZXJlciYmKGEuX3JlbmRlcmVyPXRoaXMuX3JlbmRlcmVyKSxhLmlzU3Ryb2tlU2hhZGVyKCk/dGhpcy5fcmVuZGVyZXIuc2V0U3Ryb2tlU2hhZGVyKGEpOnRoaXMuX3JlbmRlcmVyLnNldEZpbGxTaGFkZXIoYSksdGhpc30sZC5wcm90b3R5cGUubm9ybWFsTWF0ZXJpYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJub3JtYWxNYXRlcmlhbFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJub3JtYWxNYXRlcmlhbFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuZHJhd01vZGU9ZS5GSUxMLHRoaXMuX3JlbmRlcmVyLnNldEZpbGxTaGFkZXIodGhpcy5fcmVuZGVyZXIuX2dldE5vcm1hbFNoYWRlcigpKSx0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3I9WzEsMSwxLDFdLHRoaXMubm9TdHJva2UoKSx0aGlzfSxkLnByb3RvdHlwZS50ZXh0dXJlPWZ1bmN0aW9uKGEpe3RoaXMuX2Fzc2VydDNkKFwidGV4dHVyZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0dXJlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5kcmF3TW9kZT1lLlRFWFRVUkU7dmFyIGI9dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIGIuc2V0VW5pZm9ybShcInVTcGVjdWxhclwiLCExKSxiLnNldFVuaWZvcm0oXCJpc1RleHR1cmVcIiwhMCksYi5zZXRVbmlmb3JtKFwidVNhbXBsZXJcIixhKSx0aGlzLm5vU3Ryb2tlKCksdGhpc30sZC5wcm90b3R5cGUuYW1iaWVudE1hdGVyaWFsPWZ1bmN0aW9uKGEsYixjLGUpe3RoaXMuX2Fzc2VydDNkKFwiYW1iaWVudE1hdGVyaWFsXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImFtYmllbnRNYXRlcmlhbFwiLGFyZ3VtZW50cyk7dmFyIGY9ZC5wcm90b3R5cGUuY29sb3IuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvcj1mLl9hcnJheTt2YXIgZz10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gZy5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3IpLGcuc2V0VW5pZm9ybShcInVTcGVjdWxhclwiLCExKSxnLnNldFVuaWZvcm0oXCJpc1RleHR1cmVcIiwhMSksdGhpc30sZC5wcm90b3R5cGUuc3BlY3VsYXJNYXRlcmlhbD1mdW5jdGlvbihhLGIsYyxlKXt0aGlzLl9hc3NlcnQzZChcInNwZWN1bGFyTWF0ZXJpYWxcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3BlY3VsYXJNYXRlcmlhbFwiLGFyZ3VtZW50cyk7dmFyIGY9ZC5wcm90b3R5cGUuY29sb3IuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvcj1mLl9hcnJheTt2YXIgZz10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gZy5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3IpLGcuc2V0VW5pZm9ybShcInVTcGVjdWxhclwiLCEwKSxnLnNldFVuaWZvcm0oXCJpc1RleHR1cmVcIiwhMSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fYXBwbHlDb2xvckJsZW5kPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuR0wsYz10aGlzLmRyYXdNb2RlPT09ZS5URVhUVVJFO3JldHVybiBjfHxhW2EubGVuZ3RoLTFdPDE/KGIuZGVwdGhNYXNrKGMpLGIuZW5hYmxlKGIuQkxFTkQpLGIuYmxlbmRFcXVhdGlvbihiLkZVTkNfQUREKSxiLmJsZW5kRnVuYyhiLlNSQ19BTFBIQSxiLk9ORV9NSU5VU19TUkNfQUxQSEEpKTooYi5kZXB0aE1hc2soITApLGIuZGlzYWJsZShiLkJMRU5EKSksYX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vcDUuVGV4dHVyZVwiOjc2fV0sNjk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmNhbWVyYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcImNhbWVyYVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjYW1lcmFcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhLmFwcGx5KHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5wZXJzcGVjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInBlcnNwZWN0aXZlXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBlcnNwZWN0aXZlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLnBlcnNwZWN0aXZlLmFwcGx5KHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5vcnRobz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcIm9ydGhvXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm9ydGhvXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLm9ydGhvLmFwcGx5KHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5jcmVhdGVDYW1lcmE9ZnVuY3Rpb24oKXt0aGlzLl9hc3NlcnQzZChcImNyZWF0ZUNhbWVyYVwiKTt2YXIgYT1uZXcgZC5DYW1lcmEodGhpcy5fcmVuZGVyZXIpO3JldHVybiBhLl9jb21wdXRlQ2FtZXJhRGVmYXVsdFNldHRpbmdzKCksYS5fc2V0RGVmYXVsdENhbWVyYSgpLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmE9YSxhfSxkLkNhbWVyYT1mdW5jdGlvbihhKXt0aGlzLl9yZW5kZXJlcj1hLHRoaXMuY2FtZXJhVHlwZT1cImRlZmF1bHRcIix0aGlzLmNhbWVyYU1hdHJpeD1uZXcgZC5NYXRyaXgsdGhpcy5wcm9qTWF0cml4PW5ldyBkLk1hdHJpeH0sZC5DYW1lcmEucHJvdG90eXBlLnBlcnNwZWN0aXZlPWZ1bmN0aW9uKGEsYixjLGUpe3ZvaWQgMD09PWE/KGE9dGhpcy5kZWZhdWx0Q2FtZXJhRk9WLHRoaXMuY2FtZXJhRk9WPWEpOnRoaXMuY2FtZXJhRk9WPXRoaXMuX3JlbmRlcmVyLl9wSW5zdC5fdG9SYWRpYW5zKGEpLHZvaWQgMD09PWImJihiPXRoaXMuZGVmYXVsdEFzcGVjdFJhdGlvKSx2b2lkIDA9PT1jJiYoYz10aGlzLmRlZmF1bHRDYW1lcmFOZWFyKSx2b2lkIDA9PT1lJiYoZT10aGlzLmRlZmF1bHRDYW1lcmFGYXIpLGM8PTFlLTQmJihjPS4wMSxjb25zb2xlLmxvZyhcIkF2b2lkIHBlcnNwZWN0aXZlIG5lYXIgcGxhbmUgdmFsdWVzIGNsb3NlIHRvIG9yIGJlbG93IDAuIFNldHRpbmcgdmFsdWUgdG8gMC4wMS5cIikpLGU8YyYmY29uc29sZS5sb2coXCJQZXJzcGVjdGl2ZSBmYXIgcGxhbmUgdmFsdWUgaXMgbGVzcyB0aGFuIG5lYXIgcGxhbmUgdmFsdWUuIE5vdGhpbmcgd2lsbCBiZSBzaG93bi5cIiksdGhpcy5jYW1lcmFGT1Y9dGhpcy5fcmVuZGVyZXIuX3BJbnN0Ll90b1JhZGlhbnMoYSksdGhpcy5hc3BlY3RSYXRpbz1iLHRoaXMuY2FtZXJhTmVhcj1jLHRoaXMuY2FtZXJhRmFyPWUsdGhpcy5wcm9qTWF0cml4PWQuTWF0cml4LmlkZW50aXR5KCk7dmFyIGY9MS9NYXRoLnRhbih0aGlzLmNhbWVyYUZPVi8yKSxnPTEvKHRoaXMuY2FtZXJhTmVhci10aGlzLmNhbWVyYUZhcik7dGhpcy5wcm9qTWF0cml4LnNldChmL2IsMCwwLDAsMCwtZiwwLDAsMCwwLChlK2MpKmcsLTEsMCwwLDIqZSpjKmcsMCksdGhpcy5faXNBY3RpdmUoKSYmdGhpcy5fcmVuZGVyZXIudVBNYXRyaXguc2V0KHRoaXMucHJvak1hdHJpeC5tYXQ0WzBdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzFdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzJdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzNdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzRdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzVdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzZdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzddLHRoaXMucHJvak1hdHJpeC5tYXQ0WzhdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzldLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEwXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTJdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEzXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxNF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTVdKSx0aGlzLmNhbWVyYVR5cGU9XCJjdXN0b21cIn0sZC5DYW1lcmEucHJvdG90eXBlLm9ydGhvPWZ1bmN0aW9uKGEsYixjLGUsZixnKXt2b2lkIDA9PT1hJiYoYT0tdGhpcy5fcmVuZGVyZXIud2lkdGgvMiksdm9pZCAwPT09YiYmKGI9K3RoaXMuX3JlbmRlcmVyLndpZHRoLzIpLHZvaWQgMD09PWMmJihjPS10aGlzLl9yZW5kZXJlci5oZWlnaHQvMiksdm9pZCAwPT09ZSYmKGU9K3RoaXMuX3JlbmRlcmVyLmhlaWdodC8yKSx2b2lkIDA9PT1mJiYoZj0wKSx2b2lkIDA9PT1nJiYoZz1NYXRoLm1heCh0aGlzLl9yZW5kZXJlci53aWR0aCx0aGlzLl9yZW5kZXJlci5oZWlnaHQpKTt2YXIgaD1iLWEsaT1lLWMsaj1nLWYsaz0yL2gsbD0yL2ksbT0tMi9qLG49LShiK2EpL2gsbz0tKGUrYykvaSxwPS0oZytmKS9qO3RoaXMucHJvak1hdHJpeD1kLk1hdHJpeC5pZGVudGl0eSgpLHRoaXMucHJvak1hdHJpeC5zZXQoaywwLDAsMCwwLC1sLDAsMCwwLDAsbSwwLG4sbyxwLDEpLHRoaXMuX2lzQWN0aXZlKCkmJnRoaXMuX3JlbmRlcmVyLnVQTWF0cml4LnNldCh0aGlzLnByb2pNYXRyaXgubWF0NFswXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxXSx0aGlzLnByb2pNYXRyaXgubWF0NFsyXSx0aGlzLnByb2pNYXRyaXgubWF0NFszXSx0aGlzLnByb2pNYXRyaXgubWF0NFs0XSx0aGlzLnByb2pNYXRyaXgubWF0NFs1XSx0aGlzLnByb2pNYXRyaXgubWF0NFs2XSx0aGlzLnByb2pNYXRyaXgubWF0NFs3XSx0aGlzLnByb2pNYXRyaXgubWF0NFs4XSx0aGlzLnByb2pNYXRyaXgubWF0NFs5XSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTFdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEyXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxM10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTRdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzE1XSksdGhpcy5jYW1lcmFUeXBlPVwiY3VzdG9tXCJ9LGQuQ2FtZXJhLnByb3RvdHlwZS5fcm90YXRlVmlldz1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj10aGlzLmNlbnRlclgsZz10aGlzLmNlbnRlclksaD10aGlzLmNlbnRlclo7Zi09dGhpcy5leWVYLGctPXRoaXMuZXllWSxoLT10aGlzLmV5ZVo7dmFyIGk9ZC5NYXRyaXguaWRlbnRpdHkodGhpcy5fcmVuZGVyZXIuX3BJbnN0KTtpLnJvdGF0ZShhLGIsYyxlKTt2YXIgaj1bZippLm1hdDRbMF0rZyppLm1hdDRbNF0raCppLm1hdDRbOF0sZippLm1hdDRbMV0rZyppLm1hdDRbNV0raCppLm1hdDRbOV0sZippLm1hdDRbMl0rZyppLm1hdDRbNl0raCppLm1hdDRbMTBdXTtqWzBdKz10aGlzLmV5ZVgsalsxXSs9dGhpcy5leWVZLGpbMl0rPXRoaXMuZXllWix0aGlzLmNhbWVyYSh0aGlzLmV5ZVgsdGhpcy5leWVZLHRoaXMuZXllWixqWzBdLGpbMV0salsyXSx0aGlzLnVwWCx0aGlzLnVwWSx0aGlzLnVwWil9LGQuQ2FtZXJhLnByb3RvdHlwZS5wYW49ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fZ2V0TG9jYWxBeGVzKCk7dGhpcy5fcm90YXRlVmlldyhhLGIueVswXSxiLnlbMV0sYi55WzJdKX0sZC5DYW1lcmEucHJvdG90eXBlLnRpbHQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fZ2V0TG9jYWxBeGVzKCk7dGhpcy5fcm90YXRlVmlldyhhLGIueFswXSxiLnhbMV0sYi54WzJdKX0sZC5DYW1lcmEucHJvdG90eXBlLmxvb2tBdD1mdW5jdGlvbihhLGIsYyl7dGhpcy5jYW1lcmEodGhpcy5leWVYLHRoaXMuZXllWSx0aGlzLmV5ZVosYSxiLGMsdGhpcy51cFgsdGhpcy51cFksdGhpcy51cFopfSxkLkNhbWVyYS5wcm90b3R5cGUuY2FtZXJhPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpKXt2b2lkIDA9PT1hJiYoYT10aGlzLmRlZmF1bHRFeWVYLGI9dGhpcy5kZWZhdWx0RXllWSxjPXRoaXMuZGVmYXVsdEV5ZVosZD1hLGU9YixmPTAsZz0wLGg9MSxpPTApLHRoaXMuZXllWD1hLHRoaXMuZXllWT1iLHRoaXMuZXllWj1jLHRoaXMuY2VudGVyWD1kLHRoaXMuY2VudGVyWT1lLHRoaXMuY2VudGVyWj1mLHRoaXMudXBYPWcsdGhpcy51cFk9aCx0aGlzLnVwWj1pO3ZhciBqPXRoaXMuX2dldExvY2FsQXhlcygpO3RoaXMuY2FtZXJhTWF0cml4LnNldChqLnhbMF0sai55WzBdLGouelswXSwwLGoueFsxXSxqLnlbMV0sai56WzFdLDAsai54WzJdLGoueVsyXSxqLnpbMl0sMCwwLDAsMCwxKTt2YXIgaz0tYSxsPS1iLG09LWM7cmV0dXJuIHRoaXMuY2FtZXJhTWF0cml4LnRyYW5zbGF0ZShbayxsLG1dKSx0aGlzLl9pc0FjdGl2ZSgpJiZ0aGlzLl9yZW5kZXJlci51TVZNYXRyaXguc2V0KHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMF0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsxXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzJdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbM10sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs0XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzVdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbNl0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs3XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzhdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbOV0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsxMF0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsxMV0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsxMl0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsxM10sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsxNF0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsxNV0pLHRoaXN9LGQuQ2FtZXJhLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl9nZXRMb2NhbEF4ZXMoKSxlPVtkLnhbMF0qYSxkLnhbMV0qYSxkLnhbMl0qYV0sZj1bZC55WzBdKmIsZC55WzFdKmIsZC55WzJdKmJdLGc9W2QuelswXSpjLGQuelsxXSpjLGQuelsyXSpjXTt0aGlzLmNhbWVyYSh0aGlzLmV5ZVgrZVswXStmWzBdK2dbMF0sdGhpcy5leWVZK2VbMV0rZlsxXStnWzFdLHRoaXMuZXllWitlWzJdK2ZbMl0rZ1syXSx0aGlzLmNlbnRlclgrZVswXStmWzBdK2dbMF0sdGhpcy5jZW50ZXJZK2VbMV0rZlsxXStnWzFdLHRoaXMuY2VudGVyWitlWzJdK2ZbMl0rZ1syXSwwLDEsMCl9LGQuQ2FtZXJhLnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS10aGlzLmV5ZVgsZT1iLXRoaXMuZXllWSxmPWMtdGhpcy5leWVaO3RoaXMuY2FtZXJhKGEsYixjLHRoaXMuY2VudGVyWCtkLHRoaXMuY2VudGVyWStlLHRoaXMuY2VudGVyWitmLDAsMSwwKX0sZC5DYW1lcmEucHJvdG90eXBlLl9jb21wdXRlQ2FtZXJhRGVmYXVsdFNldHRpbmdzPWZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0Q2FtZXJhRk9WPTYwLzE4MCpNYXRoLlBJLFxudGhpcy5kZWZhdWx0QXNwZWN0UmF0aW89dGhpcy5fcmVuZGVyZXIud2lkdGgvdGhpcy5fcmVuZGVyZXIuaGVpZ2h0LHRoaXMuZGVmYXVsdEV5ZVg9MCx0aGlzLmRlZmF1bHRFeWVZPTAsdGhpcy5kZWZhdWx0RXllWj10aGlzLl9yZW5kZXJlci5oZWlnaHQvMi9NYXRoLnRhbih0aGlzLmRlZmF1bHRDYW1lcmFGT1YvMiksdGhpcy5kZWZhdWx0Q2VudGVyWD0wLHRoaXMuZGVmYXVsdENlbnRlclk9MCx0aGlzLmRlZmF1bHRDZW50ZXJaPTAsdGhpcy5kZWZhdWx0Q2FtZXJhTmVhcj0uMSp0aGlzLmRlZmF1bHRFeWVaLHRoaXMuZGVmYXVsdENhbWVyYUZhcj0xMCp0aGlzLmRlZmF1bHRFeWVafSxkLkNhbWVyYS5wcm90b3R5cGUuX3NldERlZmF1bHRDYW1lcmE9ZnVuY3Rpb24oKXt0aGlzLmNhbWVyYUZPVj10aGlzLmRlZmF1bHRDYW1lcmFGT1YsdGhpcy5hc3BlY3RSYXRpbz10aGlzLmRlZmF1bHRBc3BlY3RSYXRpbyx0aGlzLmV5ZVg9dGhpcy5kZWZhdWx0RXllWCx0aGlzLmV5ZVk9dGhpcy5kZWZhdWx0RXllWSx0aGlzLmV5ZVo9dGhpcy5kZWZhdWx0RXllWix0aGlzLmNlbnRlclg9dGhpcy5kZWZhdWx0Q2VudGVyWCx0aGlzLmNlbnRlclk9dGhpcy5kZWZhdWx0Q2VudGVyWSx0aGlzLmNlbnRlclo9dGhpcy5kZWZhdWx0Q2VudGVyWix0aGlzLnVwWD0wLHRoaXMudXBZPTEsdGhpcy51cFo9MCx0aGlzLmNhbWVyYU5lYXI9dGhpcy5kZWZhdWx0Q2FtZXJhTmVhcix0aGlzLmNhbWVyYUZhcj10aGlzLmRlZmF1bHRDYW1lcmFGYXIsdGhpcy5wZXJzcGVjdGl2ZSgpLHRoaXMuY2FtZXJhKCksdGhpcy5jYW1lcmFUeXBlPVwiZGVmYXVsdFwifSxkLkNhbWVyYS5wcm90b3R5cGUuX3Jlc2l6ZT1mdW5jdGlvbigpe1wiZGVmYXVsdFwiPT09dGhpcy5jYW1lcmFUeXBlPyh0aGlzLl9jb21wdXRlQ2FtZXJhRGVmYXVsdFNldHRpbmdzKCksdGhpcy5fc2V0RGVmYXVsdENhbWVyYSgpKTp0aGlzLnBlcnNwZWN0aXZlKHRoaXMuY2FtZXJhRk9WLHRoaXMuX3JlbmRlcmVyLndpZHRoL3RoaXMuX3JlbmRlcmVyLmhlaWdodCl9LGQuQ2FtZXJhLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGQuQ2FtZXJhKHRoaXMuX3JlbmRlcmVyKTtyZXR1cm4gYS5jYW1lcmFGT1Y9dGhpcy5jYW1lcmFGT1YsYS5hc3BlY3RSYXRpbz10aGlzLmFzcGVjdFJhdGlvLGEuZXllWD10aGlzLmV5ZVgsYS5leWVZPXRoaXMuZXllWSxhLmV5ZVo9dGhpcy5leWVaLGEuY2VudGVyWD10aGlzLmNlbnRlclgsYS5jZW50ZXJZPXRoaXMuY2VudGVyWSxhLmNlbnRlclo9dGhpcy5jZW50ZXJaLGEuY2FtZXJhTmVhcj10aGlzLmNhbWVyYU5lYXIsYS5jYW1lcmFGYXI9dGhpcy5jYW1lcmFGYXIsYS5jYW1lcmFUeXBlPXRoaXMuY2FtZXJhVHlwZSxhLmNhbWVyYU1hdHJpeD10aGlzLmNhbWVyYU1hdHJpeC5jb3B5KCksYS5wcm9qTWF0cml4PXRoaXMucHJvak1hdHJpeC5jb3B5KCksYX0sZC5DYW1lcmEucHJvdG90eXBlLl9nZXRMb2NhbEF4ZXM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmV5ZVgtdGhpcy5jZW50ZXJYLGI9dGhpcy5leWVZLXRoaXMuY2VudGVyWSxjPXRoaXMuZXllWi10aGlzLmNlbnRlclosZD1NYXRoLnNxcnQoYSphK2IqYitjKmMpOzAhPT1kJiYoYS89ZCxiLz1kLGMvPWQpO3ZhciBlPXRoaXMudXBYLGY9dGhpcy51cFksZz10aGlzLnVwWixoPWYqYy1nKmIsaT0tZSpjK2cqYSxqPWUqYi1mKmE7ZT1iKmotYyppLGY9LWEqaitjKmgsZz1hKmktYipoO3ZhciBrPU1hdGguc3FydChoKmgraSppK2oqaik7MCE9PWsmJihoLz1rLGkvPWssai89ayk7dmFyIGw9TWF0aC5zcXJ0KGUqZStmKmYrZypnKTtyZXR1cm4gMCE9PWwmJihlLz1sLGYvPWwsZy89bCkse3g6W2gsaSxqXSx5OltlLGYsZ10sejpbYSxiLGNdfX0sZC5DYW1lcmEucHJvdG90eXBlLl9vcmJpdD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5leWVYLXRoaXMuY2VudGVyWCxlPXRoaXMuZXllWS10aGlzLmNlbnRlclksZj10aGlzLmV5ZVotdGhpcy5jZW50ZXJaLGc9TWF0aC5zcXJ0KGQqZCtlKmUrZipmKSxoPU1hdGguYXRhbjIoZCxmKSxpPU1hdGguYWNvcyhNYXRoLm1heCgtMSxNYXRoLm1pbigxLGUvZykpKTtoKz1hLGkrPWIsZys9YyxnPDAmJihnPS4xKSxpPk1hdGguUEk/aT1NYXRoLlBJOmk8PTAmJihpPS4wMDEpO3ZhciBqPU1hdGguc2luKGkpKmcqTWF0aC5zaW4oaCksaz1NYXRoLmNvcyhpKSpnLGw9TWF0aC5zaW4oaSkqZypNYXRoLmNvcyhoKTt0aGlzLmNhbWVyYShqK3RoaXMuY2VudGVyWCxrK3RoaXMuY2VudGVyWSxsK3RoaXMuY2VudGVyWix0aGlzLmNlbnRlclgsdGhpcy5jZW50ZXJZLHRoaXMuY2VudGVyWiwwLDEsMCl9LGQuQ2FtZXJhLnByb3RvdHlwZS5faXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PXRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmF9LGQucHJvdG90eXBlLnNldENhbWVyYT1mdW5jdGlvbihhKXt0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhPWEsdGhpcy5fcmVuZGVyZXIudVBNYXRyaXguc2V0KGEucHJvak1hdHJpeC5tYXQ0WzBdLGEucHJvak1hdHJpeC5tYXQ0WzFdLGEucHJvak1hdHJpeC5tYXQ0WzJdLGEucHJvak1hdHJpeC5tYXQ0WzNdLGEucHJvak1hdHJpeC5tYXQ0WzRdLGEucHJvak1hdHJpeC5tYXQ0WzVdLGEucHJvak1hdHJpeC5tYXQ0WzZdLGEucHJvak1hdHJpeC5tYXQ0WzddLGEucHJvak1hdHJpeC5tYXQ0WzhdLGEucHJvak1hdHJpeC5tYXQ0WzldLGEucHJvak1hdHJpeC5tYXQ0WzEwXSxhLnByb2pNYXRyaXgubWF0NFsxMV0sYS5wcm9qTWF0cml4Lm1hdDRbMTJdLGEucHJvak1hdHJpeC5tYXQ0WzEzXSxhLnByb2pNYXRyaXgubWF0NFsxNF0sYS5wcm9qTWF0cml4Lm1hdDRbMTVdKX0sYi5leHBvcnRzPWQuQ2FtZXJhfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDcwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLkdlb21ldHJ5PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy52ZXJ0aWNlcz1bXSx0aGlzLmxpbmVWZXJ0aWNlcz1bXSx0aGlzLmxpbmVOb3JtYWxzPVtdLHRoaXMudmVydGV4Tm9ybWFscz1bXSx0aGlzLmZhY2VzPVtdLHRoaXMudXZzPVtdLHRoaXMuZWRnZXM9W10sdGhpcy5kZXRhaWxYPXZvaWQgMCE9PWE/YToxLHRoaXMuZGV0YWlsWT12b2lkIDAhPT1iP2I6MSxjIGluc3RhbmNlb2YgRnVuY3Rpb24mJmMuY2FsbCh0aGlzKSx0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5jb21wdXRlRmFjZXM9ZnVuY3Rpb24oKXt0aGlzLmZhY2VzLmxlbmd0aD0wO2Zvcih2YXIgYSxiLGMsZCxlPXRoaXMuZGV0YWlsWCsxLGY9MDtmPHRoaXMuZGV0YWlsWTtmKyspZm9yKHZhciBnPTA7Zzx0aGlzLmRldGFpbFg7ZysrKWE9ZiplK2csYj1mKmUrZysxLGM9KGYrMSkqZStnKzEsZD0oZisxKSplK2csdGhpcy5mYWNlcy5wdXNoKFthLGIsZF0pLHRoaXMuZmFjZXMucHVzaChbZCxiLGNdKTtyZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuX2dldEZhY2VOb3JtYWw9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5mYWNlc1thXSxjPXRoaXMudmVydGljZXNbYlswXV0sZT10aGlzLnZlcnRpY2VzW2JbMV1dLGY9dGhpcy52ZXJ0aWNlc1tiWzJdXSxnPWQuVmVjdG9yLnN1YihlLGMpLGg9ZC5WZWN0b3Iuc3ViKGYsYyksaT1kLlZlY3Rvci5jcm9zcyhnLGgpLGo9ZC5WZWN0b3IubWFnKGkpLGs9ai8oZC5WZWN0b3IubWFnKGcpKmQuVmVjdG9yLm1hZyhoKSk7cmV0dXJuIDA9PT1rfHxpc05hTihrKT8oY29uc29sZS53YXJuKFwicDUuR2VvbWV0cnkucHJvdG90eXBlLl9nZXRGYWNlTm9ybWFsOlwiLFwiZmFjZSBoYXMgY29saW5lYXIgc2lkZXMgb3IgYSByZXBlYXRlZCB2ZXJ0ZXhcIiksaSk6KGs+MSYmKGs9MSksaS5tdWx0KE1hdGguYXNpbihrKS9qKSl9LGQuR2VvbWV0cnkucHJvdG90eXBlLmNvbXB1dGVOb3JtYWxzPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLnZlcnRleE5vcm1hbHMsYz10aGlzLnZlcnRpY2VzLGU9dGhpcy5mYWNlcztmb3IoYi5sZW5ndGg9MCxhPTA7YTxjLmxlbmd0aDsrK2EpYi5wdXNoKG5ldyBkLlZlY3Rvcik7Zm9yKHZhciBmPTA7ZjxlLmxlbmd0aDsrK2YpZm9yKHZhciBnPWVbZl0saD10aGlzLl9nZXRGYWNlTm9ybWFsKGYpLGk9MDtpPDM7KytpKXt2YXIgaj1nW2ldO2Jbal0uYWRkKGgpfWZvcihhPTA7YTxjLmxlbmd0aDsrK2EpYlthXS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuYXZlcmFnZU5vcm1hbHM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD10aGlzLmRldGFpbFk7YSsrKXt2YXIgYj10aGlzLmRldGFpbFgrMSxjPWQuVmVjdG9yLmFkZCh0aGlzLnZlcnRleE5vcm1hbHNbYSpiXSx0aGlzLnZlcnRleE5vcm1hbHNbYSpiK3RoaXMuZGV0YWlsWF0pO2M9ZC5WZWN0b3IuZGl2KGMsMiksdGhpcy52ZXJ0ZXhOb3JtYWxzW2EqYl09Yyx0aGlzLnZlcnRleE5vcm1hbHNbYSpiK3RoaXMuZGV0YWlsWF09Y31yZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuYXZlcmFnZVBvbGVOb3JtYWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPW5ldyBkLlZlY3RvcigwLDAsMCksYj0wO2I8dGhpcy5kZXRhaWxYO2IrKylhLmFkZCh0aGlzLnZlcnRleE5vcm1hbHNbYl0pO2ZvcihhPWQuVmVjdG9yLmRpdihhLHRoaXMuZGV0YWlsWCksYj0wO2I8dGhpcy5kZXRhaWxYO2IrKyl0aGlzLnZlcnRleE5vcm1hbHNbYl09YTtmb3IoYT1uZXcgZC5WZWN0b3IoMCwwLDApLGI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMTtiPnRoaXMudmVydGljZXMubGVuZ3RoLTEtdGhpcy5kZXRhaWxYO2ItLSlhLmFkZCh0aGlzLnZlcnRleE5vcm1hbHNbYl0pO2ZvcihhPWQuVmVjdG9yLmRpdihhLHRoaXMuZGV0YWlsWCksYj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xO2I+dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMS10aGlzLmRldGFpbFg7Yi0tKXRoaXMudmVydGV4Tm9ybWFsc1tiXT1hO3JldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5fbWFrZVRyaWFuZ2xlRWRnZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmVkZ2VzLmxlbmd0aD0wLEFycmF5LmlzQXJyYXkodGhpcy5zdHJva2VJbmRpY2VzKSlmb3IodmFyIGE9MCxiPXRoaXMuc3Ryb2tlSW5kaWNlcy5sZW5ndGg7YTxiO2ErKyl0aGlzLmVkZ2VzLnB1c2godGhpcy5zdHJva2VJbmRpY2VzW2FdKTtlbHNlIGZvcih2YXIgYz0wO2M8dGhpcy5mYWNlcy5sZW5ndGg7YysrKXRoaXMuZWRnZXMucHVzaChbdGhpcy5mYWNlc1tjXVswXSx0aGlzLmZhY2VzW2NdWzFdXSksdGhpcy5lZGdlcy5wdXNoKFt0aGlzLmZhY2VzW2NdWzFdLHRoaXMuZmFjZXNbY11bMl1dKSx0aGlzLmVkZ2VzLnB1c2goW3RoaXMuZmFjZXNbY11bMl0sdGhpcy5mYWNlc1tjXVswXV0pO3JldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5fZWRnZXNUb1ZlcnRpY2VzPWZ1bmN0aW9uKCl7dGhpcy5saW5lVmVydGljZXMubGVuZ3RoPTAsdGhpcy5saW5lTm9ybWFscy5sZW5ndGg9MDtmb3IodmFyIGE9MDthPHRoaXMuZWRnZXMubGVuZ3RoO2ErKyl7dmFyIGI9dGhpcy52ZXJ0aWNlc1t0aGlzLmVkZ2VzW2FdWzBdXSxjPXRoaXMudmVydGljZXNbdGhpcy5lZGdlc1thXVsxXV0sZD1jLmNvcHkoKS5zdWIoYikubm9ybWFsaXplKCksZT1iLmFycmF5KCksZj1iLmFycmF5KCksZz1jLmFycmF5KCksaD1jLmFycmF5KCksaT1kLmFycmF5KCksaj1kLmFycmF5KCk7aS5wdXNoKDEpLGoucHVzaCgtMSksdGhpcy5saW5lTm9ybWFscy5wdXNoKGksaixpLGksaixqKSx0aGlzLmxpbmVWZXJ0aWNlcy5wdXNoKGUsZixnLGcsZixoKX1yZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy52ZXJ0aWNlcy5sZW5ndGg+MCl7Zm9yKHZhciBhPXRoaXMudmVydGljZXNbMF0uY29weSgpLGI9dGhpcy52ZXJ0aWNlc1swXS5jb3B5KCksYz0wO2M8dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YysrKWEueD1NYXRoLm1heChhLngsdGhpcy52ZXJ0aWNlc1tjXS54KSxiLng9TWF0aC5taW4oYi54LHRoaXMudmVydGljZXNbY10ueCksYS55PU1hdGgubWF4KGEueSx0aGlzLnZlcnRpY2VzW2NdLnkpLGIueT1NYXRoLm1pbihiLnksdGhpcy52ZXJ0aWNlc1tjXS55KSxhLno9TWF0aC5tYXgoYS56LHRoaXMudmVydGljZXNbY10ueiksYi56PU1hdGgubWluKGIueix0aGlzLnZlcnRpY2VzW2NdLnopO3ZhciBlPWQuVmVjdG9yLmxlcnAoYSxiLC41KSxmPWQuVmVjdG9yLnN1YihhLGIpLGc9TWF0aC5tYXgoTWF0aC5tYXgoZi54LGYueSksZi56KSxoPTIwMC9nO2ZvcihjPTA7Yzx0aGlzLnZlcnRpY2VzLmxlbmd0aDtjKyspdGhpcy52ZXJ0aWNlc1tjXS5zdWIoZSksdGhpcy52ZXJ0aWNlc1tjXS5tdWx0KGgpfXJldHVybiB0aGlzfSxiLmV4cG9ydHM9ZC5HZW9tZXRyeX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3MTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1BcnJheSxmPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXl9O1widW5kZWZpbmVkXCIhPXR5cGVvZiBGbG9hdDMyQXJyYXkmJihlPUZsb2F0MzJBcnJheSxmPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXl8fGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl9KSxkLk1hdHJpeD1mdW5jdGlvbigpe2Zvcih2YXIgYT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksYj0wO2I8YS5sZW5ndGg7KytiKWFbYl09YXJndW1lbnRzW2JdO3JldHVybiBhLmxlbmd0aCYmYVthLmxlbmd0aC0xXWluc3RhbmNlb2YgZCYmKHRoaXMucDU9YVthLmxlbmd0aC0xXSksXCJtYXQzXCI9PT1hWzBdP3RoaXMubWF0Mz1BcnJheS5pc0FycmF5KGFbMV0pP2FbMV06bmV3IGUoWzEsMCwwLDAsMSwwLDAsMCwxXSk6dGhpcy5tYXQ0PUFycmF5LmlzQXJyYXkoYVswXSk/YVswXTpuZXcgZShbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLk1hdHJpeD8odGhpcy5tYXQ0PWEubWF0NCx0aGlzKTpmKGEpPyh0aGlzLm1hdDQ9YSx0aGlzKTooMTY9PT1hcmd1bWVudHMubGVuZ3RoJiYodGhpcy5tYXQ0WzBdPWFyZ3VtZW50c1swXSx0aGlzLm1hdDRbMV09YXJndW1lbnRzWzFdLHRoaXMubWF0NFsyXT1hcmd1bWVudHNbMl0sdGhpcy5tYXQ0WzNdPWFyZ3VtZW50c1szXSx0aGlzLm1hdDRbNF09YXJndW1lbnRzWzRdLHRoaXMubWF0NFs1XT1hcmd1bWVudHNbNV0sdGhpcy5tYXQ0WzZdPWFyZ3VtZW50c1s2XSx0aGlzLm1hdDRbN109YXJndW1lbnRzWzddLHRoaXMubWF0NFs4XT1hcmd1bWVudHNbOF0sdGhpcy5tYXQ0WzldPWFyZ3VtZW50c1s5XSx0aGlzLm1hdDRbMTBdPWFyZ3VtZW50c1sxMF0sdGhpcy5tYXQ0WzExXT1hcmd1bWVudHNbMTFdLHRoaXMubWF0NFsxMl09YXJndW1lbnRzWzEyXSx0aGlzLm1hdDRbMTNdPWFyZ3VtZW50c1sxM10sdGhpcy5tYXQ0WzE0XT1hcmd1bWVudHNbMTRdLHRoaXMubWF0NFsxNV09YXJndW1lbnRzWzE1XSksdGhpcyl9LGQuTWF0cml4LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGQuTWF0cml4KHRoaXMubWF0NCx0aGlzLnA1KX0sZC5NYXRyaXgucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZC5NYXRyaXgodGhpcy5wNSk7cmV0dXJuIGEubWF0NFswXT10aGlzLm1hdDRbMF0sYS5tYXQ0WzFdPXRoaXMubWF0NFsxXSxhLm1hdDRbMl09dGhpcy5tYXQ0WzJdLGEubWF0NFszXT10aGlzLm1hdDRbM10sYS5tYXQ0WzRdPXRoaXMubWF0NFs0XSxhLm1hdDRbNV09dGhpcy5tYXQ0WzVdLGEubWF0NFs2XT10aGlzLm1hdDRbNl0sYS5tYXQ0WzddPXRoaXMubWF0NFs3XSxhLm1hdDRbOF09dGhpcy5tYXQ0WzhdLGEubWF0NFs5XT10aGlzLm1hdDRbOV0sYS5tYXQ0WzEwXT10aGlzLm1hdDRbMTBdLGEubWF0NFsxMV09dGhpcy5tYXQ0WzExXSxhLm1hdDRbMTJdPXRoaXMubWF0NFsxMl0sYS5tYXQ0WzEzXT10aGlzLm1hdDRbMTNdLGEubWF0NFsxNF09dGhpcy5tYXQ0WzE0XSxhLm1hdDRbMTVdPXRoaXMubWF0NFsxNV0sYX0sZC5NYXRyaXguaWRlbnRpdHk9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBkLk1hdHJpeChhKX0sZC5NYXRyaXgucHJvdG90eXBlLnRyYW5zcG9zZT1mdW5jdGlvbihhKXt2YXIgYixjLGUsZyxoLGk7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLk1hdHJpeD8oYj1hLm1hdDRbMV0sYz1hLm1hdDRbMl0sZT1hLm1hdDRbM10sZz1hLm1hdDRbNl0saD1hLm1hdDRbN10saT1hLm1hdDRbMTFdLHRoaXMubWF0NFswXT1hLm1hdDRbMF0sdGhpcy5tYXQ0WzFdPWEubWF0NFs0XSx0aGlzLm1hdDRbMl09YS5tYXQ0WzhdLHRoaXMubWF0NFszXT1hLm1hdDRbMTJdLHRoaXMubWF0NFs0XT1iLHRoaXMubWF0NFs1XT1hLm1hdDRbNV0sdGhpcy5tYXQ0WzZdPWEubWF0NFs5XSx0aGlzLm1hdDRbN109YS5tYXQ0WzEzXSx0aGlzLm1hdDRbOF09Yyx0aGlzLm1hdDRbOV09Zyx0aGlzLm1hdDRbMTBdPWEubWF0NFsxMF0sdGhpcy5tYXQ0WzExXT1hLm1hdDRbMTRdLHRoaXMubWF0NFsxMl09ZSx0aGlzLm1hdDRbMTNdPWgsdGhpcy5tYXQ0WzE0XT1pLHRoaXMubWF0NFsxNV09YS5tYXQ0WzE1XSk6ZihhKSYmKGI9YVsxXSxjPWFbMl0sZT1hWzNdLGc9YVs2XSxoPWFbN10saT1hWzExXSx0aGlzLm1hdDRbMF09YVswXSx0aGlzLm1hdDRbMV09YVs0XSx0aGlzLm1hdDRbMl09YVs4XSx0aGlzLm1hdDRbM109YVsxMl0sdGhpcy5tYXQ0WzRdPWIsdGhpcy5tYXQ0WzVdPWFbNV0sdGhpcy5tYXQ0WzZdPWFbOV0sdGhpcy5tYXQ0WzddPWFbMTNdLHRoaXMubWF0NFs4XT1jLHRoaXMubWF0NFs5XT1nLHRoaXMubWF0NFsxMF09YVsxMF0sdGhpcy5tYXQ0WzExXT1hWzE0XSx0aGlzLm1hdDRbMTJdPWUsdGhpcy5tYXQ0WzEzXT1oLHRoaXMubWF0NFsxNF09aSx0aGlzLm1hdDRbMTVdPWFbMTVdKSx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzO2EgaW5zdGFuY2VvZiBkLk1hdHJpeD8oYj1hLm1hdDRbMF0sYz1hLm1hdDRbMV0sZT1hLm1hdDRbMl0sZz1hLm1hdDRbM10saD1hLm1hdDRbNF0saT1hLm1hdDRbNV0saj1hLm1hdDRbNl0saz1hLm1hdDRbN10sbD1hLm1hdDRbOF0sbT1hLm1hdDRbOV0sbj1hLm1hdDRbMTBdLG89YS5tYXQ0WzExXSxwPWEubWF0NFsxMl0scT1hLm1hdDRbMTNdLHI9YS5tYXQ0WzE0XSxzPWEubWF0NFsxNV0pOmYoYSkmJihiPWFbMF0sYz1hWzFdLGU9YVsyXSxnPWFbM10saD1hWzRdLGk9YVs1XSxqPWFbNl0saz1hWzddLGw9YVs4XSxtPWFbOV0sbj1hWzEwXSxvPWFbMTFdLHA9YVsxMl0scT1hWzEzXSxyPWFbMTRdLHM9YVsxNV0pO3ZhciB0PWIqaS1jKmgsdT1iKmotZSpoLHY9YiprLWcqaCx3PWMqai1lKmkseD1jKmstZyppLHk9ZSprLWcqaix6PWwqcS1tKnAsQT1sKnItbipwLEI9bCpzLW8qcCxDPW0qci1uKnEsRD1tKnMtbypxLEU9bipzLW8qcixGPXQqRS11KkQrdipDK3cqQi14KkEreSp6O3JldHVybiBGPyhGPTEvRix0aGlzLm1hdDRbMF09KGkqRS1qKkQraypDKSpGLHRoaXMubWF0NFsxXT0oZSpELWMqRS1nKkMpKkYsdGhpcy5tYXQ0WzJdPShxKnktcip4K3MqdykqRix0aGlzLm1hdDRbM109KG4qeC1tKnktbyp3KSpGLHRoaXMubWF0NFs0XT0oaipCLWgqRS1rKkEpKkYsdGhpcy5tYXQ0WzVdPShiKkUtZSpCK2cqQSkqRix0aGlzLm1hdDRbNl09KHIqdi1wKnktcyp1KSpGLHRoaXMubWF0NFs3XT0obCp5LW4qditvKnUpKkYsdGhpcy5tYXQ0WzhdPShoKkQtaSpCK2sqeikqRix0aGlzLm1hdDRbOV09KGMqQi1iKkQtZyp6KSpGLHRoaXMubWF0NFsxMF09KHAqeC1xKnYrcyp0KSpGLHRoaXMubWF0NFsxMV09KG0qdi1sKngtbyp0KSpGLHRoaXMubWF0NFsxMl09KGkqQS1oKkMtaip6KSpGLHRoaXMubWF0NFsxM109KGIqQy1jKkErZSp6KSpGLHRoaXMubWF0NFsxNF09KHEqdS1wKnctcip0KSpGLHRoaXMubWF0NFsxNV09KGwqdy1tKnUrbip0KSpGLHRoaXMpOm51bGx9LGQuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQzeDM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1hdDNbMF0sYj10aGlzLm1hdDNbMV0sYz10aGlzLm1hdDNbMl0sZD10aGlzLm1hdDNbM10sZT10aGlzLm1hdDNbNF0sZj10aGlzLm1hdDNbNV0sZz10aGlzLm1hdDNbNl0saD10aGlzLm1hdDNbN10saT10aGlzLm1hdDNbOF0saj1pKmUtZipoLGs9LWkqZCtmKmcsbD1oKmQtZSpnLG09YSpqK2IqaytjKmw7cmV0dXJuIG0/KG09MS9tLHRoaXMubWF0M1swXT1qKm0sdGhpcy5tYXQzWzFdPSgtaSpiK2MqaCkqbSx0aGlzLm1hdDNbMl09KGYqYi1jKmUpKm0sdGhpcy5tYXQzWzNdPWsqbSx0aGlzLm1hdDNbNF09KGkqYS1jKmcpKm0sdGhpcy5tYXQzWzVdPSgtZiphK2MqZCkqbSx0aGlzLm1hdDNbNl09bCptLHRoaXMubWF0M1s3XT0oLWgqYStiKmcpKm0sdGhpcy5tYXQzWzhdPShlKmEtYipkKSptLHRoaXMpOm51bGx9LGQuTWF0cml4LnByb3RvdHlwZS50cmFuc3Bvc2UzeDM9ZnVuY3Rpb24oYSl7dmFyIGI9YVsxXSxjPWFbMl0sZD1hWzVdO3JldHVybiB0aGlzLm1hdDNbMV09YVszXSx0aGlzLm1hdDNbMl09YVs2XSx0aGlzLm1hdDNbM109Yix0aGlzLm1hdDNbNV09YVs3XSx0aGlzLm1hdDNbNl09Yyx0aGlzLm1hdDNbN109ZCx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuaW52ZXJzZVRyYW5zcG9zZT1mdW5jdGlvbihhKXt2b2lkIDA9PT10aGlzLm1hdDM/Y29uc29sZS5lcnJvcihcInNvcnJ5LCB0aGlzIGZ1bmN0aW9uIG9ubHkgd29ya3Mgd2l0aCBtYXQzXCIpOih0aGlzLm1hdDNbMF09YS5tYXQ0WzBdLHRoaXMubWF0M1sxXT1hLm1hdDRbMV0sdGhpcy5tYXQzWzJdPWEubWF0NFsyXSx0aGlzLm1hdDNbM109YS5tYXQ0WzRdLHRoaXMubWF0M1s0XT1hLm1hdDRbNV0sdGhpcy5tYXQzWzVdPWEubWF0NFs2XSx0aGlzLm1hdDNbNl09YS5tYXQ0WzhdLHRoaXMubWF0M1s3XT1hLm1hdDRbOV0sdGhpcy5tYXQzWzhdPWEubWF0NFsxMF0pO3ZhciBiPXRoaXMuaW52ZXJ0M3gzKCk7aWYoYiliLnRyYW5zcG9zZTN4Myh0aGlzLm1hdDMpO2Vsc2UgZm9yKHZhciBjPTA7Yzw5O2MrKyl0aGlzLm1hdDNbY109MDtyZXR1cm4gdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLmRldGVybWluYW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5tYXQ0WzBdKnRoaXMubWF0NFs1XS10aGlzLm1hdDRbMV0qdGhpcy5tYXQ0WzRdLGI9dGhpcy5tYXQ0WzBdKnRoaXMubWF0NFs2XS10aGlzLm1hdDRbMl0qdGhpcy5tYXQ0WzRdLGM9dGhpcy5tYXQ0WzBdKnRoaXMubWF0NFs3XS10aGlzLm1hdDRbM10qdGhpcy5tYXQ0WzRdLGQ9dGhpcy5tYXQ0WzFdKnRoaXMubWF0NFs2XS10aGlzLm1hdDRbMl0qdGhpcy5tYXQ0WzVdLGU9dGhpcy5tYXQ0WzFdKnRoaXMubWF0NFs3XS10aGlzLm1hdDRbM10qdGhpcy5tYXQ0WzVdLGY9dGhpcy5tYXQ0WzJdKnRoaXMubWF0NFs3XS10aGlzLm1hdDRbM10qdGhpcy5tYXQ0WzZdLGc9dGhpcy5tYXQ0WzhdKnRoaXMubWF0NFsxM10tdGhpcy5tYXQ0WzldKnRoaXMubWF0NFsxMl0saD10aGlzLm1hdDRbOF0qdGhpcy5tYXQ0WzE0XS10aGlzLm1hdDRbMTBdKnRoaXMubWF0NFsxMl0saT10aGlzLm1hdDRbOF0qdGhpcy5tYXQ0WzE1XS10aGlzLm1hdDRbMTFdKnRoaXMubWF0NFsxMl0saj10aGlzLm1hdDRbOV0qdGhpcy5tYXQ0WzE0XS10aGlzLm1hdDRbMTBdKnRoaXMubWF0NFsxM10saz10aGlzLm1hdDRbOV0qdGhpcy5tYXQ0WzE1XS10aGlzLm1hdDRbMTFdKnRoaXMubWF0NFsxM107cmV0dXJuIGEqKHRoaXMubWF0NFsxMF0qdGhpcy5tYXQ0WzE1XS10aGlzLm1hdDRbMTFdKnRoaXMubWF0NFsxNF0pLWIqaytjKmorZCppLWUqaCtmKmd9LGQuTWF0cml4LnByb3RvdHlwZS5tdWx0PWZ1bmN0aW9uKGEpe3ZhciBiO2lmKGE9PT10aGlzfHxhPT09dGhpcy5tYXQ0KWI9dGhpcy5jb3B5KCkubWF0NDtlbHNlIGlmKGEgaW5zdGFuY2VvZiBkLk1hdHJpeCliPWEubWF0NDtlbHNle2lmKCFmKGEpKXJldHVybjtiPWF9dmFyIGM9dGhpcy5tYXQ0WzBdLGU9dGhpcy5tYXQ0WzFdLGc9dGhpcy5tYXQ0WzJdLGg9dGhpcy5tYXQ0WzNdO3JldHVybiB0aGlzLm1hdDRbMF09YypiWzBdK2UqYls0XStnKmJbOF0raCpiWzEyXSx0aGlzLm1hdDRbMV09YypiWzFdK2UqYls1XStnKmJbOV0raCpiWzEzXSx0aGlzLm1hdDRbMl09YypiWzJdK2UqYls2XStnKmJbMTBdK2gqYlsxNF0sdGhpcy5tYXQ0WzNdPWMqYlszXStlKmJbN10rZypiWzExXStoKmJbMTVdLGM9dGhpcy5tYXQ0WzRdLGU9dGhpcy5tYXQ0WzVdLGc9dGhpcy5tYXQ0WzZdLGg9dGhpcy5tYXQ0WzddLHRoaXMubWF0NFs0XT1jKmJbMF0rZSpiWzRdK2cqYls4XStoKmJbMTJdLHRoaXMubWF0NFs1XT1jKmJbMV0rZSpiWzVdK2cqYls5XStoKmJbMTNdLHRoaXMubWF0NFs2XT1jKmJbMl0rZSpiWzZdK2cqYlsxMF0raCpiWzE0XSx0aGlzLm1hdDRbN109YypiWzNdK2UqYls3XStnKmJbMTFdK2gqYlsxNV0sYz10aGlzLm1hdDRbOF0sZT10aGlzLm1hdDRbOV0sZz10aGlzLm1hdDRbMTBdLGg9dGhpcy5tYXQ0WzExXSx0aGlzLm1hdDRbOF09YypiWzBdK2UqYls0XStnKmJbOF0raCpiWzEyXSx0aGlzLm1hdDRbOV09YypiWzFdK2UqYls1XStnKmJbOV0raCpiWzEzXSx0aGlzLm1hdDRbMTBdPWMqYlsyXStlKmJbNl0rZypiWzEwXStoKmJbMTRdLHRoaXMubWF0NFsxMV09YypiWzNdK2UqYls3XStnKmJbMTFdK2gqYlsxNV0sYz10aGlzLm1hdDRbMTJdLGU9dGhpcy5tYXQ0WzEzXSxnPXRoaXMubWF0NFsxNF0saD10aGlzLm1hdDRbMTVdLHRoaXMubWF0NFsxMl09YypiWzBdK2UqYls0XStnKmJbOF0raCpiWzEyXSx0aGlzLm1hdDRbMTNdPWMqYlsxXStlKmJbNV0rZypiWzldK2gqYlsxM10sdGhpcy5tYXQ0WzE0XT1jKmJbMl0rZSpiWzZdK2cqYlsxMF0raCpiWzE0XSx0aGlzLm1hdDRbMTVdPWMqYlszXStlKmJbN10rZypiWzExXStoKmJbMTVdLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj8oYj1hLnksYz1hLnosYT1hLngpOmEgaW5zdGFuY2VvZiBBcnJheSYmKGI9YVsxXSxjPWFbMl0sYT1hWzBdKSx0aGlzLm1hdDRbMF0qPWEsdGhpcy5tYXQ0WzFdKj1hLHRoaXMubWF0NFsyXSo9YSx0aGlzLm1hdDRbM10qPWEsdGhpcy5tYXQ0WzRdKj1iLHRoaXMubWF0NFs1XSo9Yix0aGlzLm1hdDRbNl0qPWIsdGhpcy5tYXQ0WzddKj1iLHRoaXMubWF0NFs4XSo9Yyx0aGlzLm1hdDRbOV0qPWMsdGhpcy5tYXQ0WzEwXSo9Yyx0aGlzLm1hdDRbMTFdKj1jLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9dGhpcy5wNT90aGlzLnA1Ll90b1JhZGlhbnMoYSk6YTtiIGluc3RhbmNlb2YgZC5WZWN0b3I/KGM9Yi55LGU9Yi56LGI9Yi54KTpiIGluc3RhbmNlb2YgQXJyYXkmJihjPWJbMV0sZT1iWzJdLGI9YlswXSk7dmFyIGc9TWF0aC5zcXJ0KGIqYitjKmMrZSplKTtiKj0xL2csYyo9MS9nLGUqPTEvZzt2YXIgaD10aGlzLm1hdDRbMF0saT10aGlzLm1hdDRbMV0saj10aGlzLm1hdDRbMl0saz10aGlzLm1hdDRbM10sbD10aGlzLm1hdDRbNF0sbT10aGlzLm1hdDRbNV0sbj10aGlzLm1hdDRbNl0sbz10aGlzLm1hdDRbN10scD10aGlzLm1hdDRbOF0scT10aGlzLm1hdDRbOV0scj10aGlzLm1hdDRbMTBdLHM9dGhpcy5tYXQ0WzExXSx0PU1hdGguc2luKGYpLHU9TWF0aC5jb3MoZiksdj0xLXUsdz1iKmIqdit1LHg9YypiKnYrZSp0LHk9ZSpiKnYtYyp0LHo9YipjKnYtZSp0LEE9YypjKnYrdSxCPWUqYyp2K2IqdCxDPWIqZSp2K2MqdCxEPWMqZSp2LWIqdCxFPWUqZSp2K3U7cmV0dXJuIHRoaXMubWF0NFswXT1oKncrbCp4K3AqeSx0aGlzLm1hdDRbMV09aSp3K20qeCtxKnksdGhpcy5tYXQ0WzJdPWoqdytuKngrcip5LHRoaXMubWF0NFszXT1rKncrbyp4K3MqeSx0aGlzLm1hdDRbNF09aCp6K2wqQStwKkIsdGhpcy5tYXQ0WzVdPWkqeittKkErcSpCLHRoaXMubWF0NFs2XT1qKnorbipBK3IqQix0aGlzLm1hdDRbN109ayp6K28qQStzKkIsdGhpcy5tYXQ0WzhdPWgqQytsKkQrcCpFLHRoaXMubWF0NFs5XT1pKkMrbSpEK3EqRSx0aGlzLm1hdDRbMTBdPWoqQytuKkQrcipFLHRoaXMubWF0NFsxMV09aypDK28qRCtzKkUsdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihhKXt2YXIgYj1hWzBdLGM9YVsxXSxkPWFbMl18fDA7dGhpcy5tYXQ0WzEyXSs9dGhpcy5tYXQ0WzBdKmIrdGhpcy5tYXQ0WzRdKmMrdGhpcy5tYXQ0WzhdKmQsdGhpcy5tYXQ0WzEzXSs9dGhpcy5tYXQ0WzFdKmIrdGhpcy5tYXQ0WzVdKmMrdGhpcy5tYXQ0WzldKmQsdGhpcy5tYXQ0WzE0XSs9dGhpcy5tYXQ0WzJdKmIrdGhpcy5tYXQ0WzZdKmMrdGhpcy5tYXQ0WzEwXSpkLHRoaXMubWF0NFsxNV0rPXRoaXMubWF0NFszXSpiK3RoaXMubWF0NFs3XSpjK3RoaXMubWF0NFsxMV0qZH0sZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oYSl7dGhpcy5yb3RhdGUoYSwxLDAsMCl9LGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKGEpe3RoaXMucm90YXRlKGEsMCwxLDApfSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbihhKXt0aGlzLnJvdGF0ZShhLDAsMCwxKX0sZC5NYXRyaXgucHJvdG90eXBlLnBlcnNwZWN0aXZlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPTEvTWF0aC50YW4oYS8yKSxmPTEvKGMtZCk7cmV0dXJuIHRoaXMubWF0NFswXT1lL2IsdGhpcy5tYXQ0WzFdPTAsdGhpcy5tYXQ0WzJdPTAsdGhpcy5tYXQ0WzNdPTAsdGhpcy5tYXQ0WzRdPTAsdGhpcy5tYXQ0WzVdPWUsdGhpcy5tYXQ0WzZdPTAsdGhpcy5tYXQ0WzddPTAsdGhpcy5tYXQ0WzhdPTAsdGhpcy5tYXQ0WzldPTAsdGhpcy5tYXQ0WzEwXT0oZCtjKSpmLHRoaXMubWF0NFsxMV09LTEsdGhpcy5tYXQ0WzEyXT0wLHRoaXMubWF0NFsxM109MCx0aGlzLm1hdDRbMTRdPTIqZCpjKmYsdGhpcy5tYXQ0WzE1XT0wLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5vcnRobz1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9MS8oYS1iKSxoPTEvKGMtZCksaT0xLyhlLWYpO3JldHVybiB0aGlzLm1hdDRbMF09LTIqZyx0aGlzLm1hdDRbMV09MCx0aGlzLm1hdDRbMl09MCx0aGlzLm1hdDRbM109MCx0aGlzLm1hdDRbNF09MCx0aGlzLm1hdDRbNV09LTIqaCx0aGlzLm1hdDRbNl09MCx0aGlzLm1hdDRbN109MCx0aGlzLm1hdDRbOF09MCx0aGlzLm1hdDRbOV09MCx0aGlzLm1hdDRbMTBdPTIqaSx0aGlzLm1hdDRbMTFdPTAsdGhpcy5tYXQ0WzEyXT0oYStiKSpnLHRoaXMubWF0NFsxM109KGQrYykqaCx0aGlzLm1hdDRbMTRdPShmK2UpKmksdGhpcy5tYXQ0WzE1XT0xLHRoaXN9LGIuZXhwb3J0cz1kLk1hdHJpeH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3MjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5SZW5kZXJlckdMLnByb3RvdHlwZS5iZWdpblNoYXBlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPXZvaWQgMCE9PWE/YTplLkxJTkVfU1RSSVAsdm9pZCAwPT09dGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzPyh0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLmVkZ2VzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGljZXM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleENvbG9ycz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUubGluZU5vcm1hbHM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUuY29sb3JCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUudXZCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRleEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFsQnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLnBvaW50VmVydGV4QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXg9W10sdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXg9W10sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleD1bXSk6KHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUuZWRnZXMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0aWNlcy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUubGluZU5vcm1hbHMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleENvbG9ycy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUudXZDb29yZHMubGVuZ3RoPTApLHRoaXMuaXNJbW1lZGlhdGVEcmF3aW5nPSEwLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUudmVydGV4PWZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmO2M9ZT1mPTAsMz09PWFyZ3VtZW50cy5sZW5ndGg/Yz1hcmd1bWVudHNbMl06ND09PWFyZ3VtZW50cy5sZW5ndGg/KGU9YXJndW1lbnRzWzJdLGY9YXJndW1lbnRzWzNdKTo1PT09YXJndW1lbnRzLmxlbmd0aCYmKGM9YXJndW1lbnRzWzJdLGU9YXJndW1lbnRzWzNdLGY9YXJndW1lbnRzWzRdKTt2YXIgZz1uZXcgZC5WZWN0b3IoYSxiLGMpO3RoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5wdXNoKGcpO3ZhciBoPXRoaXMuY3VyRmlsbENvbG9yfHxbLjUsLjUsLjUsMV07cmV0dXJuIHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnMucHVzaChoWzBdLGhbMV0saFsyXSxoWzNdKSx0aGlzLmltbWVkaWF0ZU1vZGUudXZDb29yZHMucHVzaChlLGYpLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzBdPWEsdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV09Yix0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsyXT1jLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdPWEsdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMV09Yix0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsyXT1jLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZW5kU2hhcGU9ZnVuY3Rpb24oYSxiLGMsZixnLGgpe2lmKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9PT1lLlBPSU5UUyl0aGlzLl91c2VQb2ludFNoYWRlcigpLHRoaXMuY3VyUG9pbnRTaGFkZXIuYmluZFNoYWRlcigpLHRoaXMuX2RyYXdQb2ludHModGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLHRoaXMuaW1tZWRpYXRlTW9kZS5wb2ludFZlcnRleEJ1ZmZlciksdGhpcy5jdXJQb2ludFNoYWRlci51bmJpbmRTaGFkZXIoKTtlbHNlIGlmKHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGg+MSl7aWYodGhpcy5fdXNlSW1tZWRpYXRlTW9kZVNoYWRlcigpLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLmRyYXdNb2RlIT09ZS5URVhUVVJFKXtmb3IodmFyIGk9MDtpPHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGgtMTtpKyspdGhpcy5pbW1lZGlhdGVNb2RlLmVkZ2VzLnB1c2goW2ksaSsxXSk7YT09PWUuQ0xPU0UmJnRoaXMuaW1tZWRpYXRlTW9kZS5lZGdlcy5wdXNoKFt0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoLTEsMF0pLGQuR2VvbWV0cnkucHJvdG90eXBlLl9lZGdlc1RvVmVydGljZXMuY2FsbCh0aGlzLmltbWVkaWF0ZU1vZGUpLHRoaXMuX2RyYXdTdHJva2VJbW1lZGlhdGVNb2RlKCl9aWYodGhpcy5fZG9GaWxsKXtpZih0aGlzLmlzQmV6aWVyfHx0aGlzLmlzUXVhZHJhdGljfHx0aGlzLmlzQ3VydmUpe3ZhciBqPVtuZXcgRmxvYXQzMkFycmF5KHRoaXMuX3ZUb05BcnJheSh0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMpKV0saz10aGlzLl90cmlhbmd1bGF0ZShqKTt0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXM9W107Zm9yKHZhciBsPTAsbT1rLmxlbmd0aDtsPG07bCs9Myl0aGlzLnZlcnRleChrW2xdLGtbbCsxXSxrW2wrMl0pfXRoaXMuX2RyYXdGaWxsSW1tZWRpYXRlTW9kZShhLGIsYyxmLGcsaCl9fXJldHVybiB0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleENvbG9ycy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUudXZDb29yZHMubGVuZ3RoPTAsdGhpcy5pc0ltbWVkaWF0ZURyYXdpbmc9ITEsdGhpcy5pc0Jlemllcj0hMSx0aGlzLmlzUXVhZHJhdGljPSExLHRoaXMuaXNDdXJ2ZT0hMSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleC5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleC5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4Lmxlbmd0aD0wLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdGaWxsSW1tZWRpYXRlTW9kZT1mdW5jdGlvbihhLGIsYyxkLGYsZyl7dmFyIGg9dGhpcy5HTDtpZih0aGlzLmN1ckZpbGxTaGFkZXIuYmluZFNoYWRlcigpLHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbiYmKHRoaXMuX2JpbmRCdWZmZXIodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleEJ1ZmZlcixoLkFSUkFZX0JVRkZFUix0aGlzLl92VG9OQXJyYXkodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzKSxGbG9hdDMyQXJyYXksaC5EWU5BTUlDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsaC5GTE9BVCwhMSwwLDApKSx0aGlzLmRyYXdNb2RlPT09ZS5GSUxMJiZ0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4Q29sb3ImJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS5jb2xvckJ1ZmZlcixoLkFSUkFZX0JVRkZFUix0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzLEZsb2F0MzJBcnJheSxoLkRZTkFNSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4Q29sb3IubG9jYXRpb24sNCxoLkZMT0FULCExLDAsMCkpLHRoaXMuZHJhd01vZGU9PT1lLlRFWFRVUkUmJnRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZCYmKHRoaXMuX2JpbmRCdWZmZXIodGhpcy5pbW1lZGlhdGVNb2RlLnV2QnVmZmVyLGguQVJSQVlfQlVGRkVSLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3JkcyxGbG9hdDMyQXJyYXksaC5EWU5BTUlDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVRleENvb3JkLmxvY2F0aW9uLDIsaC5GTE9BVCwhMSwwLDApKSx0aGlzLmRyYXdNb2RlPT09ZS5GSUxMfHx0aGlzLmRyYXdNb2RlPT09ZS5URVhUVVJFKXN3aXRjaCh0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlKXtjYXNlIGUuTElORV9TVFJJUDpjYXNlIGUuTElORVM6Y2FzZSBlLlRSSUFOR0xFUzp0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPXRoaXMuaXNCZXppZXJ8fHRoaXMuaXNRdWFkcmF0aWN8fHRoaXMuaXNDdXJ2ZT9lLlRSSUFOR0xFUzplLlRSSUFOR0xFX0ZBTn1lbHNlIHN3aXRjaCh0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlKXtjYXNlIGUuTElORV9TVFJJUDpjYXNlIGUuTElORVM6dGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT1lLkxJTkVfTE9PUH1pZih0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPT09ZS5RVUFEU3x8dGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT09PWUuUVVBRF9TVFJJUCl0aHJvdyBuZXcgRXJyb3IoXCJzb3JyeSwgXCIrdGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZStcIiBub3QgeWV0IGltcGxlbWVudGVkIGluIHdlYmdsIG1vZGUuXCIpO3RoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1ckZpbGxDb2xvciksaC5lbmFibGUoaC5CTEVORCksaC5kcmF3QXJyYXlzKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGUsMCx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsdGhpcy5jdXJGaWxsU2hhZGVyLnVuYmluZFNoYWRlcigpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9kcmF3U3Ryb2tlSW1tZWRpYXRlTW9kZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuR0w7dGhpcy5jdXJTdHJva2VTaGFkZXIuYmluZFNoYWRlcigpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRleEJ1ZmZlcixhLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGljZXMpLEZsb2F0MzJBcnJheSxhLlNUQVRJQ19EUkFXKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxhLkZMT0FULCExLDAsMCkpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYURpcmVjdGlvbiYmKHRoaXMuX2JpbmRCdWZmZXIodGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxCdWZmZXIsYS5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbih0aGlzLmltbWVkaWF0ZU1vZGUubGluZU5vcm1hbHMpLEZsb2F0MzJBcnJheSxhLlNUQVRJQ19EUkFXKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uLmxvY2F0aW9uLDQsYS5GTE9BVCwhMSwwLDApKSx0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJTdHJva2VDb2xvciksYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLDAsdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0aWNlcy5sZW5ndGgpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLnVuYmluZFNoYWRlcigpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sYi5leHBvcnRzPWQuUmVuZGVyZXJHTH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9MDtkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9pbml0QnVmZmVyRGVmYXVsdHM9ZnVuY3Rpb24oYSl7aWYodGhpcy5fZnJlZUJ1ZmZlcnMoYSksKytlPjFlMyl7dmFyIGI9T2JqZWN0LmtleXModGhpcy5nSGFzaClbMF07ZGVsZXRlIHRoaXMuZ0hhc2hbYl0sZS0tfXRoaXMuZ0hhc2hbYV09e319LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2ZyZWVCdWZmZXJzPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ0hhc2hbYV07aWYoYil7ZGVsZXRlIHRoaXMuZ0hhc2hbYV0sZS0tO3ZhciBjPXRoaXMuR0w7Yi52ZXJ0ZXhCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIudmVydGV4QnVmZmVyKSxiLm5vcm1hbEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi5ub3JtYWxCdWZmZXIpLGIubGluZU5vcm1hbEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi5saW5lTm9ybWFsQnVmZmVyKSxiLnV2QnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLnV2QnVmZmVyKSxiLmluZGV4QnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLmluZGV4QnVmZmVyKSxiLmxpbmVWZXJ0ZXhCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIubGluZVZlcnRleEJ1ZmZlcil9fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmNyZWF0ZUJ1ZmZlcnM9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLkdMO3RoaXMuX2luaXRCdWZmZXJEZWZhdWx0cyhhKTt2YXIgZD10aGlzLmdIYXNoW2FdO3JldHVybiBkLm51bWJlck9mSXRlbXM9MypiLmZhY2VzLmxlbmd0aCxkLmxpbmVWZXJ0ZXhDb3VudD1iLmxpbmVWZXJ0aWNlcy5sZW5ndGgsdGhpcy5fdXNlQ29sb3JTaGFkZXIoKSx0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbiYmKGQubGluZVZlcnRleEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC5saW5lVmVydGV4QnVmZmVyLGMuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4oYi5saW5lVmVydGljZXMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxjLkZMT0FULCExLDAsMCkpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYURpcmVjdGlvbiYmKGQubGluZU5vcm1hbEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC5saW5lTm9ybWFsQnVmZmVyLGMuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4oYi5saW5lTm9ybWFscyksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24ubG9jYXRpb24sNCxjLkZMT0FULCExLDAsMCkpLHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbiYmKGQudmVydGV4QnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLnZlcnRleEJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl92VG9OQXJyYXkoYi52ZXJ0aWNlcyksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYy5GTE9BVCwhMSwwLDApKSxkLmluZGV4QnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLmluZGV4QnVmZmVyLGMuRUxFTUVOVF9BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbihiLmZhY2VzKSxVaW50MTZBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hTm9ybWFsJiYoZC5ub3JtYWxCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQubm9ybWFsQnVmZmVyLGMuQVJSQVlfQlVGRkVSLHRoaXMuX3ZUb05BcnJheShiLnZlcnRleE5vcm1hbHMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFOb3JtYWwubG9jYXRpb24sMyxjLkZMT0FULCExLDAsMCkpLHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZCYmKGQudXZCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQudXZCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbihiLnV2cyksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVRleENvb3JkLmxvY2F0aW9uLDIsYy5GTE9BVCwhMSwwLDApKSxkfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmRyYXdCdWZmZXJzPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuR0w7dGhpcy5fdXNlQ29sb3JTaGFkZXIoKTt2YXIgYz10aGlzLmdIYXNoW2FdO3JldHVybiB0aGlzLl9kb1N0cm9rZSYmYy5saW5lVmVydGV4Q291bnQ+MCYmKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmJpbmRTaGFkZXIoKSxjLmxpbmVWZXJ0ZXhCdWZmZXImJih0aGlzLl9iaW5kQnVmZmVyKGMubGluZVZlcnRleEJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYi5GTE9BVCwhMSwwLDApKSxjLmxpbmVOb3JtYWxCdWZmZXImJih0aGlzLl9iaW5kQnVmZmVyKGMubGluZU5vcm1hbEJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYURpcmVjdGlvbi5sb2NhdGlvbiw0LGIuRkxPQVQsITEsMCwwKSksdGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyU3Ryb2tlQ29sb3IpLHRoaXMuX2RyYXdBcnJheXMoYi5UUklBTkdMRVMsYSksdGhpcy5jdXJTdHJva2VTaGFkZXIudW5iaW5kU2hhZGVyKCkpLCExIT09dGhpcy5fZG9GaWxsJiYodGhpcy5jdXJGaWxsU2hhZGVyLmJpbmRTaGFkZXIoKSxjLnZlcnRleEJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy52ZXJ0ZXhCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYi5GTE9BVCwhMSwwLDApKSxjLmluZGV4QnVmZmVyJiZ0aGlzLl9iaW5kQnVmZmVyKGMuaW5kZXhCdWZmZXIsYi5FTEVNRU5UX0FSUkFZX0JVRkZFUiksYy5ub3JtYWxCdWZmZXImJih0aGlzLl9iaW5kQnVmZmVyKGMubm9ybWFsQnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFOb3JtYWwubG9jYXRpb24sMyxiLkZMT0FULCExLDAsMCkpLGMudXZCdWZmZXImJih0aGlzLl9iaW5kQnVmZmVyKGMudXZCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVRleENvb3JkLmxvY2F0aW9uLDIsYi5GTE9BVCwhMSwwLDApKSx0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJGaWxsQ29sb3IpLHRoaXMuX2RyYXdFbGVtZW50cyhiLlRSSUFOR0xFUyxhKSx0aGlzLmN1ckZpbGxTaGFkZXIudW5iaW5kU2hhZGVyKCkpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZHJhd0J1ZmZlcnNTY2FsZWQ9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy51TVZNYXRyaXguY29weSgpO3RyeXt0aGlzLnVNVk1hdHJpeC5zY2FsZShiLGMsZCksdGhpcy5kcmF3QnVmZmVycyhhKX1maW5hbGx5e3RoaXMudU1WTWF0cml4PWV9fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9kcmF3QXJyYXlzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuR0wuZHJhd0FycmF5cyhhLDAsdGhpcy5nSGFzaFtiXS5saW5lVmVydGV4Q291bnQpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9kcmF3RWxlbWVudHM9ZnVuY3Rpb24oYSxiKXt0aGlzLkdMLmRyYXdFbGVtZW50cyhhLHRoaXMuZ0hhc2hbYl0ubnVtYmVyT2ZJdGVtcyx0aGlzLkdMLlVOU0lHTkVEX1NIT1JULDApLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd1BvaW50cz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuR0w7dGhpcy5fYmluZEJ1ZmZlcihiLGMuQVJSQVlfQlVGRkVSLHRoaXMuX3ZUb05BcnJheShhKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJQb2ludFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJQb2ludFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGMuRkxPQVQsITEsMCwwKSxjLmRyYXdBcnJheXMoYy5Qb2ludHMsMCxhLmxlbmd0aCl9LGIuZXhwb3J0cz1kLlJlbmRlcmVyR0x9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpLGY9YShcImxpYnRlc3NcIik7YShcIi4vcDUuU2hhZGVyXCIpLGEoXCIuL3A1LkNhbWVyYVwiKSxhKFwiLi4vY29yZS9wNS5SZW5kZXJlclwiKSxhKFwiLi9wNS5NYXRyaXhcIik7dmFyIGc9e2ltbWVkaWF0ZVZlcnQ6XCJhdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgYVZlcnRleENvbG9yO1xcblxcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIGZsb2F0IHVSZXNvbHV0aW9uO1xcbnVuaWZvcm0gZmxvYXQgdVBvaW50U2l6ZTtcXG5cXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZvaWQgbWFpbih2b2lkKSB7XFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuICB2Q29sb3IgPSBhVmVydGV4Q29sb3I7XFxuICBnbF9Qb2ludFNpemUgPSB1UG9pbnRTaXplO1xcbn1cXG5cIix2ZXJ0ZXhDb2xvclZlcnQ6XCJhdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgYVZlcnRleENvbG9yO1xcblxcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKSB7XFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuICB2Q29sb3IgPSBhVmVydGV4Q29sb3I7XFxufVxcblwiLHZlcnRleENvbG9yRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjtcXG59XCIsbm9ybWFsVmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMyBhTm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXhDb29yZDtcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIHVOb3JtYWxNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMzIHZWZXJ0ZXhOb3JtYWw7XFxudmFyeWluZyBoaWdocCB2ZWMyIHZWZXJ0VGV4Q29vcmQ7XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG4gIHZWZXJ0ZXhOb3JtYWwgPSBub3JtYWxpemUodmVjMyggdU5vcm1hbE1hdHJpeCAqIGFOb3JtYWwgKSk7XFxuICB2VmVydFRleENvb3JkID0gYVRleENvb3JkO1xcbn1cXG5cIixub3JtYWxGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxudmFyeWluZyB2ZWMzIHZWZXJ0ZXhOb3JtYWw7XFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQodlZlcnRleE5vcm1hbCwgMS4wKTtcXG59XCIsYmFzaWNGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxudmFyeWluZyB2ZWMzIHZWZXJ0ZXhOb3JtYWw7XFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcbnZvaWQgbWFpbih2b2lkKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB1TWF0ZXJpYWxDb2xvcjtcXG59XCIsbGlnaHRWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMzIGFOb3JtYWw7XFxuYXR0cmlidXRlIHZlYzIgYVRleENvb3JkO1xcblxcbnVuaWZvcm0gbWF0NCB1Vmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIHVOb3JtYWxNYXRyaXg7XFxudW5pZm9ybSBpbnQgdUFtYmllbnRMaWdodENvdW50O1xcbnVuaWZvcm0gaW50IHVEaXJlY3Rpb25hbExpZ2h0Q291bnQ7XFxudW5pZm9ybSBpbnQgdVBvaW50TGlnaHRDb3VudDtcXG5cXG51bmlmb3JtIHZlYzMgdUFtYmllbnRDb2xvcls4XTtcXG51bmlmb3JtIHZlYzMgdUxpZ2h0aW5nRGlyZWN0aW9uWzhdO1xcbnVuaWZvcm0gdmVjMyB1RGlyZWN0aW9uYWxDb2xvcls4XTtcXG51bmlmb3JtIHZlYzMgdVBvaW50TGlnaHRMb2NhdGlvbls4XTtcXG51bmlmb3JtIHZlYzMgdVBvaW50TGlnaHRDb2xvcls4XTtcXG51bmlmb3JtIGJvb2wgdVNwZWN1bGFyO1xcblxcbnZhcnlpbmcgdmVjMyB2VmVydGV4Tm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2VmVydFRleENvb3JkO1xcbnZhcnlpbmcgdmVjMyB2TGlnaHRXZWlnaHRpbmc7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcblxcbiAgdmVjMyB2ZXJ0ZXhOb3JtYWwgPSBub3JtYWxpemUodmVjMyggdU5vcm1hbE1hdHJpeCAqIGFOb3JtYWwgKSk7XFxuICB2VmVydGV4Tm9ybWFsID0gdmVydGV4Tm9ybWFsO1xcbiAgdlZlcnRUZXhDb29yZCA9IGFUZXhDb29yZDtcXG5cXG4gIHZlYzQgbXZQb3NpdGlvbiA9IHVNb2RlbFZpZXdNYXRyaXggKiB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIHZlYzMgZXllRGlyZWN0aW9uID0gbm9ybWFsaXplKC1tdlBvc2l0aW9uLnh5eik7XFxuXFxuICBmbG9hdCBzaGluaW5lc3MgPSAzMi4wO1xcbiAgZmxvYXQgc3BlY3VsYXJGYWN0b3IgPSAyLjA7XFxuICBmbG9hdCBkaWZmdXNlRmFjdG9yID0gMC4zO1xcblxcbiAgdmVjMyBhbWJpZW50TGlnaHRGYWN0b3IgPSB2ZWMzKDAuMCk7XFxuXFxuICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykge1xcbiAgICBpZiAodUFtYmllbnRMaWdodENvdW50ID09IGkpIGJyZWFrO1xcbiAgICBhbWJpZW50TGlnaHRGYWN0b3IgKz0gdUFtYmllbnRDb2xvcltpXTtcXG4gIH1cXG5cXG5cXG4gIHZlYzMgZGlyZWN0aW9uYWxMaWdodEZhY3RvciA9IHZlYzMoMC4wKTtcXG5cXG4gIGZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKSB7XFxuICAgIGlmICh1RGlyZWN0aW9uYWxMaWdodENvdW50ID09IGopIGJyZWFrO1xcbiAgICB2ZWMzIGRpciA9IHVMaWdodGluZ0RpcmVjdGlvbltqXTtcXG4gICAgZmxvYXQgZGlyZWN0aW9uYWxMaWdodFdlaWdodGluZyA9IG1heChkb3QodmVydGV4Tm9ybWFsLCAtZGlyKSwgMC4wKTtcXG4gICAgZGlyZWN0aW9uYWxMaWdodEZhY3RvciArPSB1RGlyZWN0aW9uYWxDb2xvcltqXSAqIGRpcmVjdGlvbmFsTGlnaHRXZWlnaHRpbmc7XFxuICB9XFxuXFxuXFxuICB2ZWMzIHBvaW50TGlnaHRGYWN0b3IgPSB2ZWMzKDAuMCk7XFxuXFxuICBmb3IgKGludCBrID0gMDsgayA8IDg7IGsrKykge1xcbiAgICBpZiAodVBvaW50TGlnaHRDb3VudCA9PSBrKSBicmVhaztcXG4gICAgdmVjMyBsb2MgPSAodVZpZXdNYXRyaXggKiB2ZWM0KHVQb2ludExpZ2h0TG9jYXRpb25ba10sIDEuMCkpLnh5ejtcXG4gICAgdmVjMyBsaWdodERpcmVjdGlvbiA9IG5vcm1hbGl6ZShsb2MgLSBtdlBvc2l0aW9uLnh5eik7XFxuXFxuICAgIGZsb2F0IGRpcmVjdGlvbmFsTGlnaHRXZWlnaHRpbmcgPSBtYXgoZG90KHZlcnRleE5vcm1hbCwgbGlnaHREaXJlY3Rpb24pLCAwLjApO1xcblxcbiAgICBmbG9hdCBzcGVjdWxhckxpZ2h0V2VpZ2h0aW5nID0gMC4wO1xcbiAgICBpZiAodVNwZWN1bGFyICl7XFxuICAgICAgdmVjMyByZWZsZWN0aW9uRGlyZWN0aW9uID0gcmVmbGVjdCgtbGlnaHREaXJlY3Rpb24sIHZlcnRleE5vcm1hbCk7XFxuICAgICAgc3BlY3VsYXJMaWdodFdlaWdodGluZyA9IHBvdyhtYXgoZG90KHJlZmxlY3Rpb25EaXJlY3Rpb24sIGV5ZURpcmVjdGlvbiksIDAuMCksIHNoaW5pbmVzcyk7XFxuICAgIH1cXG5cXG4gICAgcG9pbnRMaWdodEZhY3RvciArPSB1UG9pbnRMaWdodENvbG9yW2tdICogKHNwZWN1bGFyRmFjdG9yICogc3BlY3VsYXJMaWdodFdlaWdodGluZ1xcbiAgICAgICsgZGlyZWN0aW9uYWxMaWdodFdlaWdodGluZyAqIGRpZmZ1c2VGYWN0b3IpO1xcbiAgfVxcblxcbiAgdkxpZ2h0V2VpZ2h0aW5nID0gIGFtYmllbnRMaWdodEZhY3RvciArIGRpcmVjdGlvbmFsTGlnaHRGYWN0b3IgKyBwb2ludExpZ2h0RmFjdG9yO1xcbn1cXG5cIixsaWdodFRleHR1cmVGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gYm9vbCBpc1RleHR1cmU7XFxudW5pZm9ybSBib29sIHVVc2VMaWdodGluZztcXG5cXG52YXJ5aW5nIHZlYzMgdkxpZ2h0V2VpZ2h0aW5nO1xcbnZhcnlpbmcgaGlnaHAgdmVjMiB2VmVydFRleENvb3JkO1xcblxcbnZvaWQgbWFpbih2b2lkKSB7XFxuICBnbF9GcmFnQ29sb3IgPSBpc1RleHR1cmUgPyB0ZXh0dXJlMkQodVNhbXBsZXIsIHZWZXJ0VGV4Q29vcmQpIDogdU1hdGVyaWFsQ29sb3I7XFxuICBpZiAodVVzZUxpZ2h0aW5nKVxcbiAgICBnbF9GcmFnQ29sb3IucmdiICo9IHZMaWdodFdlaWdodGluZztcXG59XCIscGhvbmdWZXJ0OlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMzIGFOb3JtYWw7XFxuYXR0cmlidXRlIHZlYzIgYVRleENvb3JkO1xcblxcbnVuaWZvcm0gdmVjMyB1QW1iaWVudENvbG9yWzhdO1xcblxcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgdU5vcm1hbE1hdHJpeDtcXG51bmlmb3JtIGludCB1QW1iaWVudExpZ2h0Q291bnQ7XFxuXFxudmFyeWluZyB2ZWMzIHZOb3JtYWw7XFxudmFyeWluZyB2ZWMyIHZUZXhDb29yZDtcXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdkFtYmllbnRDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICB2ZWM0IHZpZXdNb2RlbFBvc2l0aW9uID0gdU1vZGVsVmlld01hdHJpeCAqIHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcblxcbiAgLy8gUGFzcyB2YXJ5aW5ncyB0byBmcmFnbWVudCBzaGFkZXJcXG4gIHZWaWV3UG9zaXRpb24gPSB2aWV3TW9kZWxQb3NpdGlvbi54eXo7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdmlld01vZGVsUG9zaXRpb247ICBcXG5cXG4gIHZOb3JtYWwgPSBub3JtYWxpemUodU5vcm1hbE1hdHJpeCAqIG5vcm1hbGl6ZShhTm9ybWFsKSk7XFxuICB2VGV4Q29vcmQgPSBhVGV4Q29vcmQ7XFxuXFxuICB2QW1iaWVudENvbG9yID0gdmVjMygwLjApO1xcbiAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHtcXG4gICAgaWYgKHVBbWJpZW50TGlnaHRDb3VudCA9PSBpKSBicmVhaztcXG4gICAgdkFtYmllbnRDb2xvciArPSB1QW1iaWVudENvbG9yW2ldO1xcbiAgfVxcbn1cXG5cIixcbnBob25nRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbi8vdW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVWaWV3TWF0cml4O1xcblxcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGJvb2wgaXNUZXh0dXJlO1xcbnVuaWZvcm0gYm9vbCB1VXNlTGlnaHRpbmc7XFxuXFxudW5pZm9ybSB2ZWMzIHVMaWdodGluZ0RpcmVjdGlvbls4XTtcXG51bmlmb3JtIHZlYzMgdURpcmVjdGlvbmFsQ29sb3JbOF07XFxudW5pZm9ybSB2ZWMzIHVQb2ludExpZ2h0TG9jYXRpb25bOF07XFxudW5pZm9ybSB2ZWMzIHVQb2ludExpZ2h0Q29sb3JbOF07XFxudW5pZm9ybSBib29sIHVTcGVjdWxhcjtcXG5cXG51bmlmb3JtIGludCB1RGlyZWN0aW9uYWxMaWdodENvdW50O1xcbnVuaWZvcm0gaW50IHVQb2ludExpZ2h0Q291bnQ7XFxuXFxudmFyeWluZyB2ZWMzIHZOb3JtYWw7XFxudmFyeWluZyB2ZWMyIHZUZXhDb29yZDtcXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdkFtYmllbnRDb2xvcjtcXG5cXG52ZWMzIFY7XFxudmVjMyBOO1xcblxcbmNvbnN0IGZsb2F0IHNoaW5pbmVzcyA9IDMyLjA7XFxuY29uc3QgZmxvYXQgc3BlY3VsYXJGYWN0b3IgPSAyLjA7XFxuY29uc3QgZmxvYXQgZGlmZnVzZUZhY3RvciA9IDAuNzM7XFxuXFxuc3RydWN0IExpZ2h0UmVzdWx0IHtcXG5cXHRmbG9hdCBzcGVjdWxhcjtcXG5cXHRmbG9hdCBkaWZmdXNlO1xcbn07XFxuXFxuZmxvYXQgcGhvbmdTcGVjdWxhcihcXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXFxuICBmbG9hdCBzaGluaW5lc3MpIHtcXG5cXG4gIHZlYzMgUiA9IG5vcm1hbGl6ZShyZWZsZWN0KC1saWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCkpOyAgXFxuICByZXR1cm4gcG93KG1heCgwLjAsIGRvdChSLCB2aWV3RGlyZWN0aW9uKSksIHNoaW5pbmVzcyk7XFxufVxcblxcbmZsb2F0IGxhbWJlcnREaWZmdXNlKFxcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCkge1xcbiAgcmV0dXJuIG1heCgwLjAsIGRvdCgtbGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpKTtcXG59XFxuXFxuTGlnaHRSZXN1bHQgbGlnaHQodmVjMyBsaWdodFZlY3Rvcikge1xcblxcbiAgdmVjMyBMID0gbm9ybWFsaXplKGxpZ2h0VmVjdG9yKTtcXG5cXG4gIC8vY29tcHV0ZSBvdXIgZGlmZnVzZSAmIHNwZWN1bGFyIHRlcm1zXFxuICBMaWdodFJlc3VsdCBscjtcXG4gIGlmICh1U3BlY3VsYXIpXFxuICAgIGxyLnNwZWN1bGFyID0gcGhvbmdTcGVjdWxhcihMLCBWLCBOLCBzaGluaW5lc3MpO1xcbiAgbHIuZGlmZnVzZSA9IGxhbWJlcnREaWZmdXNlKEwsIE4pO1xcbiAgcmV0dXJuIGxyO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZCkge1xcblxcbiAgViA9IG5vcm1hbGl6ZSh2Vmlld1Bvc2l0aW9uKTtcXG4gIE4gPSB2Tm9ybWFsO1xcblxcbiAgdmVjMyBkaWZmdXNlID0gdmVjMygwLjApO1xcbiAgZmxvYXQgc3BlY3VsYXIgPSAwLjA7XFxuXFxuICBmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykge1xcbiAgICBpZiAodURpcmVjdGlvbmFsTGlnaHRDb3VudCA9PSBqKSBicmVhaztcXG5cXG4gICAgTGlnaHRSZXN1bHQgcmVzdWx0ID0gbGlnaHQodUxpZ2h0aW5nRGlyZWN0aW9uW2pdKTtcXG4gICAgZGlmZnVzZSArPSByZXN1bHQuZGlmZnVzZSAqIHVEaXJlY3Rpb25hbENvbG9yW2pdO1xcbiAgICBzcGVjdWxhciArPSByZXN1bHQuc3BlY3VsYXI7XFxuICB9XFxuXFxuICBmb3IgKGludCBrID0gMDsgayA8IDg7IGsrKykge1xcbiAgICBpZiAodVBvaW50TGlnaHRDb3VudCA9PSBrKSBicmVhaztcXG5cXG4gICAgdmVjMyBsaWdodFBvc2l0aW9uID0gKHVWaWV3TWF0cml4ICogdmVjNCh1UG9pbnRMaWdodExvY2F0aW9uW2tdLCAxLjApKS54eXo7XFxuICAgIHZlYzMgbGlnaHRWZWN0b3IgPSB2Vmlld1Bvc2l0aW9uIC0gbGlnaHRQb3NpdGlvbjtcXG5cXHRcXG4gICAgLy9jYWxjdWxhdGUgYXR0ZW51YXRpb25cXG4gICAgZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aChsaWdodFZlY3Rvcik7XFxuICAgIGZsb2F0IGZhbGxvZmYgPSA1MDAuMCAvIChsaWdodERpc3RhbmNlICsgNTAwLjApO1xcblxcbiAgICBMaWdodFJlc3VsdCByZXN1bHQgPSBsaWdodChsaWdodFZlY3Rvcik7XFxuICAgIGRpZmZ1c2UgKz0gcmVzdWx0LmRpZmZ1c2UgKiBmYWxsb2ZmICogdVBvaW50TGlnaHRDb2xvcltrXTtcXG4gICAgc3BlY3VsYXIgKz0gcmVzdWx0LnNwZWN1bGFyICogZmFsbG9mZjtcXG4gIH1cXG5cXG4gIGdsX0ZyYWdDb2xvciA9IGlzVGV4dHVyZSA/IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleENvb3JkKSA6IHVNYXRlcmlhbENvbG9yO1xcbiAgZ2xfRnJhZ0NvbG9yLnJnYiA9IGdsX0ZyYWdDb2xvci5yZ2IgKiAoZGlmZnVzZSAqIGRpZmZ1c2VGYWN0b3IgKyB2QW1iaWVudENvbG9yKSArIHNwZWN1bGFyICogc3BlY3VsYXJGYWN0b3I7XFxufVwiLGZvbnRWZXJ0OlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXhDb29yZDtcXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxuXFxudW5pZm9ybSB2ZWM0IHVHbHlwaFJlY3Q7XFxudW5pZm9ybSBmbG9hdCB1R2x5cGhPZmZzZXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXhDb29yZDtcXG52YXJ5aW5nIGZsb2F0IHc7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG5cXG4gIC8vIHNjYWxlIGJ5IHRoZSBzaXplIG9mIHRoZSBnbHlwaCdzIHJlY3RhbmdsZVxcbiAgcG9zaXRpb25WZWM0Lnh5ICo9IHVHbHlwaFJlY3QuencgLSB1R2x5cGhSZWN0Lnh5O1xcblxcbiAgLy8gbW92ZSB0byB0aGUgY29ybmVyIG9mIHRoZSBnbHlwaFxcbiAgcG9zaXRpb25WZWM0Lnh5ICs9IHVHbHlwaFJlY3QueHk7XFxuXFxuICAvLyBtb3ZlIHRvIHRoZSBsZXR0ZXIncyBsaW5lIG9mZnNldFxcbiAgcG9zaXRpb25WZWM0LnggKz0gdUdseXBoT2Zmc2V0O1xcbiAgXFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG4gIHZUZXhDb29yZCA9IGFUZXhDb29yZDtcXG4gIHcgPSBnbF9Qb3NpdGlvbi53O1xcbn1cXG5cIixmb250RnJhZzpcIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuI2lmIDBcXG4gIC8vIHNpbXVsYXRlIGludGVnZXIgbWF0aCB1c2luZyBmbG9hdHNcXG5cXHQjZGVmaW5lIGludCBmbG9hdFxcblxcdCNkZWZpbmUgaXZlYzIgdmVjMlxcblxcdCNkZWZpbmUgSU5UKHgpIGZsb2F0KHgpXFxuXFxuXFx0aW50IGlmbG9vcihmbG9hdCB2KSB7IHJldHVybiBmbG9vcih2KTsgfVxcblxcdGl2ZWMyIGlmbG9vcih2ZWMyIHYpIHsgcmV0dXJuIGZsb29yKHYpOyB9XFxuXFxuI2Vsc2VcXG4gIC8vIHVzZSBuYXRpdmUgaW50ZWdlciBtYXRoXFxuXFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xcblxcdCNkZWZpbmUgSU5UKHgpIHhcXG5cXG5cXHRpbnQgaWZsb29yKGZsb2F0IHYpIHsgcmV0dXJuIGludCh2KTsgfVxcblxcdGludCBpZmxvb3IoaW50IHYpIHsgcmV0dXJuIHY7IH1cXG5cXHRpdmVjMiBpZmxvb3IodmVjMiB2KSB7IHJldHVybiBpdmVjMih2KTsgfVxcblxcbiNlbmRpZlxcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyU3Ryb2tlcztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlclJvd1N0cm9rZXM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJSb3dzO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyQ29sU3Ryb2tlcztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlckNvbHM7XFxuXFxudW5pZm9ybSBpdmVjMiB1U3Ryb2tlSW1hZ2VTaXplO1xcbnVuaWZvcm0gaXZlYzIgdUNlbGxzSW1hZ2VTaXplO1xcbnVuaWZvcm0gaXZlYzIgdUdyaWRJbWFnZVNpemU7XFxuXFxudW5pZm9ybSBpdmVjMiB1R3JpZE9mZnNldDtcXG51bmlmb3JtIGl2ZWMyIHVHcmlkU2l6ZTtcXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXhDb29yZDtcXG5cXG4vLyBzb21lIGhlbHBlciBmdW5jdGlvbnNcXG5pbnQgcm91bmQoZmxvYXQgdikgeyByZXR1cm4gaWZsb29yKHYgKyAwLjUpOyB9XFxuaXZlYzIgcm91bmQodmVjMiB2KSB7IHJldHVybiBpZmxvb3IodiArIDAuNSk7IH1cXG5mbG9hdCBzYXR1cmF0ZShmbG9hdCB2KSB7IHJldHVybiBjbGFtcCh2LCAwLjAsIDEuMCk7IH1cXG52ZWMyIHNhdHVyYXRlKHZlYzIgdikgeyByZXR1cm4gY2xhbXAodiwgMC4wLCAxLjApOyB9XFxuXFxuaW50IG11bChmbG9hdCB2MSwgaW50IHYyKSB7XFxuICByZXR1cm4gaWZsb29yKHYxICogZmxvYXQodjIpKTtcXG59XFxuXFxuaXZlYzIgbXVsKHZlYzIgdjEsIGl2ZWMyIHYyKSB7XFxuICByZXR1cm4gaWZsb29yKHYxICogdmVjMih2MikgKyAwLjUpO1xcbn1cXG5cXG4vLyB1bnBhY2sgYSAxNi1iaXQgaW50ZWdlciBmcm9tIGEgZmxvYXQgdmVjMlxcbmludCBnZXRJbnQxNih2ZWMyIHYpIHtcXG4gIGl2ZWMyIGl2ID0gcm91bmQodiAqIDI1NS4wKTtcXG4gIHJldHVybiBpdi54ICogSU5UKDEyOCkgKyBpdi55O1xcbn1cXG5cXG52ZWMyIHBpeGVsU2NhbGU7XFxudmVjMiBjb3ZlcmFnZSA9IHZlYzIoMC4wKTtcXG52ZWMyIHdlaWdodCA9IHZlYzIoMC41KTtcXG5jb25zdCBmbG9hdCBtaW5EaXN0YW5jZSA9IDEuMC84MTkyLjA7XFxuY29uc3QgZmxvYXQgaGFyZG5lc3MgPSAxLjA1OyAvLyBhbW91bnQgb2YgYW50aWFsaWFzXFxuXFxuLy8gdGhlIG1heGltdW0gbnVtYmVyIG9mIGN1cnZlcyBpbiBhIGdseXBoXFxuY29uc3QgaW50IE4gPSBJTlQoMjUwKTtcXG5cXG4vLyByZXRyaWV2ZXMgYW4gaW5kZXhlZCBwaXhlbCBmcm9tIGEgc2FtcGxlclxcbnZlYzQgZ2V0VGV4ZWwoc2FtcGxlcjJEIHNhbXBsZXIsIGludCBwb3MsIGl2ZWMyIHNpemUpIHtcXG4gIGludCB3aWR0aCA9IHNpemUueDtcXG4gIGludCB5ID0gaWZsb29yKHBvcyAvIHdpZHRoKTtcXG4gIGludCB4ID0gcG9zIC0geSAqIHdpZHRoOyAgLy8gcG9zICUgd2lkdGhcXG5cXG4gIHJldHVybiB0ZXh0dXJlMkQoc2FtcGxlciwgKHZlYzIoeCwgeSkgKyAwLjUpIC8gdmVjMihzaXplKSk7XFxufVxcblxcbnZvaWQgY2FsdWxhdGVDcm9zc2luZ3ModmVjMiBwMCwgdmVjMiBwMSwgdmVjMiBwMiwgb3V0IHZlYzIgQzEsIG91dCB2ZWMyIEMyKSB7XFxuXFxuICAvLyBnZXQgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgcXVhZHJhdGljIGluIHRcXG4gIHZlYzIgYSA9IHAwIC0gcDEgKiAyLjAgKyBwMjtcXG4gIHZlYzIgYiA9IHAwIC0gcDE7XFxuICB2ZWMyIGMgPSBwMCAtIHZUZXhDb29yZDtcXG5cXG4gIC8vIGZvdW5kIG91dCB3aGljaCB2YWx1ZXMgb2YgJ3QnIGl0IGNyb3NzZXMgdGhlIGF4ZXNcXG4gIHZlYzIgc3VyZCA9IHNxcnQobWF4KHZlYzIoMC4wKSwgYiAqIGIgLSBhICogYykpO1xcbiAgdmVjMiB0MSA9ICgoYiAtIHN1cmQpIC8gYSkueXg7XFxuICB2ZWMyIHQyID0gKChiICsgc3VyZCkgLyBhKS55eDtcXG5cXG4gIC8vIGFwcHJveGltYXRlIHN0cmFpZ2h0IGxpbmVzIHRvIGF2b2lkIHJvdW5kaW5nIGVycm9yc1xcbiAgaWYgKGFicyhhLnkpIDwgMC4wMDEpXFxuICAgIHQxLnggPSB0Mi54ID0gYy55IC8gKDIuMCAqIGIueSk7XFxuXFxuICBpZiAoYWJzKGEueCkgPCAwLjAwMSlcXG4gICAgdDEueSA9IHQyLnkgPSBjLnggLyAoMi4wICogYi54KTtcXG5cXG4gIC8vIHBsdWcgaW50byBxdWFkcmF0aWMgZm9ybXVsYSB0byBmaW5kIHRoZSBjb3JyZGluYXRlcyBvZiB0aGUgY3Jvc3NpbmdzXFxuICBDMSA9ICgoYSAqIHQxIC0gYiAqIDIuMCkgKiB0MSArIGMpICogcGl4ZWxTY2FsZTtcXG4gIEMyID0gKChhICogdDIgLSBiICogMi4wKSAqIHQyICsgYykgKiBwaXhlbFNjYWxlO1xcbn1cXG5cXG52b2lkIGNvdmVyYWdlWCh2ZWMyIHAwLCB2ZWMyIHAxLCB2ZWMyIHAyKSB7XFxuXFxuICB2ZWMyIEMxLCBDMjtcXG4gIGNhbHVsYXRlQ3Jvc3NpbmdzKHAwLCBwMSwgcDIsIEMxLCBDMik7XFxuXFxuICAvLyBkZXRlcm1pbmUgb24gd2hpY2ggc2lkZSBvZiB0aGUgeC1heGlzIHRoZSBwb2ludHMgbGllXFxuICBib29sIHkwID0gcDAueSA+IHZUZXhDb29yZC55O1xcbiAgYm9vbCB5MSA9IHAxLnkgPiB2VGV4Q29vcmQueTtcXG4gIGJvb2wgeTIgPSBwMi55ID4gdlRleENvb3JkLnk7XFxuXFxuICAvLyBjb3VsZCB3ZWIgYmUgdW5kZXIgdGhlIGN1cnZlIChhZnRlciB0MSk/XFxuICBpZiAoeTEgPyAheTIgOiB5MCkge1xcbiAgICAvLyBhZGQgdGhlIGNvdmVyYWdlIGZvciB0MVxcbiAgICBjb3ZlcmFnZS54ICs9IHNhdHVyYXRlKEMxLnggKyAwLjUpO1xcbiAgICAvLyBjYWxjdWxhdGUgdGhlIGFudGktYWxpYXNpbmcgZm9yIHQxXFxuICAgIHdlaWdodC54ID0gbWluKHdlaWdodC54LCBhYnMoQzEueCkpO1xcbiAgfVxcblxcbiAgLy8gYXJlIHdlIG91dHNpZGUgdGhlIGN1cnZlIChhZnRlciB0Mik/XFxuICBpZiAoeTEgPyAheTAgOiB5Mikge1xcbiAgICAvLyBzdWJ0cmFjdCB0aGUgY292ZXJhZ2UgZm9yIHQyXFxuICAgIGNvdmVyYWdlLnggLT0gc2F0dXJhdGUoQzIueCArIDAuNSk7XFxuICAgIC8vIGNhbGN1bGF0ZSB0aGUgYW50aS1hbGlhc2luZyBmb3IgdDJcXG4gICAgd2VpZ2h0LnggPSBtaW4od2VpZ2h0LngsIGFicyhDMi54KSk7XFxuICB9XFxufVxcblxcbi8vIHRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgY292ZXJhZ2VYLCBidXQgd2l0aCB0aGUgYXhlcyBzd2FwcGVkXFxudm9pZCBjb3ZlcmFnZVkodmVjMiBwMCwgdmVjMiBwMSwgdmVjMiBwMikge1xcblxcbiAgdmVjMiBDMSwgQzI7XFxuICBjYWx1bGF0ZUNyb3NzaW5ncyhwMCwgcDEsIHAyLCBDMSwgQzIpO1xcblxcbiAgYm9vbCB4MCA9IHAwLnggPiB2VGV4Q29vcmQueDtcXG4gIGJvb2wgeDEgPSBwMS54ID4gdlRleENvb3JkLng7XFxuICBib29sIHgyID0gcDIueCA+IHZUZXhDb29yZC54O1xcblxcbiAgaWYgKHgxID8gIXgyIDogeDApIHtcXG4gICAgY292ZXJhZ2UueSAtPSBzYXR1cmF0ZShDMS55ICsgMC41KTtcXG4gICAgd2VpZ2h0LnkgPSBtaW4od2VpZ2h0LnksIGFicyhDMS55KSk7XFxuICB9XFxuXFxuICBpZiAoeDEgPyAheDAgOiB4Mikge1xcbiAgICBjb3ZlcmFnZS55ICs9IHNhdHVyYXRlKEMyLnkgKyAwLjUpO1xcbiAgICB3ZWlnaHQueSA9IG1pbih3ZWlnaHQueSwgYWJzKEMyLnkpKTtcXG4gIH1cXG59XFxuXFxudm9pZCBtYWluKCkge1xcblxcbiAgLy8gY2FsY3VsYXRlIHRoZSBwaXhlbCBzY2FsZSBiYXNlZCBvbiBzY3JlZW4tY29vcmRpbmF0ZXNcXG4gIHBpeGVsU2NhbGUgPSBoYXJkbmVzcyAvIGZ3aWR0aCh2VGV4Q29vcmQpO1xcblxcbiAgLy8gd2hpY2ggZ3JpZCBjZWxsIGlzIHRoaXMgcGl4ZWwgaW4/XFxuICBpdmVjMiBncmlkQ29vcmQgPSBpZmxvb3IodlRleENvb3JkICogdmVjMih1R3JpZFNpemUpKTtcXG5cXG4gIC8vIGludGVyc2VjdCBjdXJ2ZXMgaW4gdGhpcyByb3dcXG4gIHtcXG4gICAgLy8gdGhlIGluZGV4IGludG8gdGhlIHJvdyBpbmZvIGJpdG1hcFxcbiAgICBpbnQgcm93SW5kZXggPSBncmlkQ29vcmQueSArIHVHcmlkT2Zmc2V0Lnk7XFxuICAgIC8vIGZldGNoIHRoZSBpbmZvIHRleGVsXFxuICAgIHZlYzQgcm93SW5mbyA9IGdldFRleGVsKHVTYW1wbGVyUm93cywgcm93SW5kZXgsIHVHcmlkSW1hZ2VTaXplKTtcXG4gICAgLy8gdW5wYWNrIHRoZSByb3dJbmZvXFxuICAgIGludCByb3dTdHJva2VJbmRleCA9IGdldEludDE2KHJvd0luZm8ueHkpO1xcbiAgICBpbnQgcm93U3Ryb2tlQ291bnQgPSBnZXRJbnQxNihyb3dJbmZvLnp3KTtcXG5cXG4gICAgZm9yIChpbnQgaVJvd1N0cm9rZSA9IElOVCgwKTsgaVJvd1N0cm9rZSA8IE47IGlSb3dTdHJva2UrKykge1xcbiAgICAgIGlmIChpUm93U3Ryb2tlID49IHJvd1N0cm9rZUNvdW50KVxcbiAgICAgICAgYnJlYWs7XFxuXFxuICAgICAgLy8gZWFjaCBzdHJva2UgaXMgbWFkZSB1cCBvZiAzIHBvaW50czogdGhlIHN0YXJ0IGFuZCBjb250cm9sIHBvaW50XFxuICAgICAgLy8gYW5kIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjdXJ2ZS5cXG4gICAgICAvLyBmZXRjaCB0aGUgaW5kaWNlcyBvZiB0aGlzIHBhaXIgb2Ygc3Ryb2tlczpcXG4gICAgICB2ZWM0IHN0cm9rZUluZGljZXMgPSBnZXRUZXhlbCh1U2FtcGxlclJvd1N0cm9rZXMsIHJvd1N0cm9rZUluZGV4KyssIHVDZWxsc0ltYWdlU2l6ZSk7XFxuXFxuICAgICAgLy8gdW5wYWNrIHRoZSBzdHJva2UgaW5kZXhcXG4gICAgICBpbnQgc3Ryb2tlUG9zID0gZ2V0SW50MTYoc3Ryb2tlSW5kaWNlcy54eSk7XFxuXFxuICAgICAgLy8gZmV0Y2ggdGhlIHR3byBzdHJva2VzXFxuICAgICAgdmVjNCBzdHJva2UwID0gZ2V0VGV4ZWwodVNhbXBsZXJTdHJva2VzLCBzdHJva2VQb3MgKyBJTlQoMCksIHVTdHJva2VJbWFnZVNpemUpO1xcbiAgICAgIHZlYzQgc3Ryb2tlMSA9IGdldFRleGVsKHVTYW1wbGVyU3Ryb2tlcywgc3Ryb2tlUG9zICsgSU5UKDEpLCB1U3Ryb2tlSW1hZ2VTaXplKTtcXG5cXG4gICAgICAvLyBjYWxjdWxhdGUgdGhlIGNvdmVyYWdlXFxuICAgICAgY292ZXJhZ2VYKHN0cm9rZTAueHksIHN0cm9rZTAuencsIHN0cm9rZTEueHkpO1xcbiAgICB9XFxuICB9XFxuXFxuICAvLyBpbnRlcnNlY3QgY3VydmVzIGluIHRoaXMgY29sdW1uXFxuICB7XFxuICAgIGludCBjb2xJbmRleCA9IGdyaWRDb29yZC54ICsgdUdyaWRPZmZzZXQueDtcXG4gICAgdmVjNCBjb2xJbmZvID0gZ2V0VGV4ZWwodVNhbXBsZXJDb2xzLCBjb2xJbmRleCwgdUdyaWRJbWFnZVNpemUpO1xcbiAgICBpbnQgY29sU3Ryb2tlSW5kZXggPSBnZXRJbnQxNihjb2xJbmZvLnh5KTtcXG4gICAgaW50IGNvbFN0cm9rZUNvdW50ID0gZ2V0SW50MTYoY29sSW5mby56dyk7XFxuICAgIFxcbiAgICBmb3IgKGludCBpQ29sU3Ryb2tlID0gSU5UKDApOyBpQ29sU3Ryb2tlIDwgTjsgaUNvbFN0cm9rZSsrKSB7XFxuICAgICAgaWYgKGlDb2xTdHJva2UgPj0gY29sU3Ryb2tlQ291bnQpXFxuICAgICAgICBicmVhaztcXG5cXG4gICAgICB2ZWM0IHN0cm9rZUluZGljZXMgPSBnZXRUZXhlbCh1U2FtcGxlckNvbFN0cm9rZXMsIGNvbFN0cm9rZUluZGV4KyssIHVDZWxsc0ltYWdlU2l6ZSk7XFxuXFxuICAgICAgaW50IHN0cm9rZVBvcyA9IGdldEludDE2KHN0cm9rZUluZGljZXMueHkpO1xcbiAgICAgIHZlYzQgc3Ryb2tlMCA9IGdldFRleGVsKHVTYW1wbGVyU3Ryb2tlcywgc3Ryb2tlUG9zICsgSU5UKDApLCB1U3Ryb2tlSW1hZ2VTaXplKTtcXG4gICAgICB2ZWM0IHN0cm9rZTEgPSBnZXRUZXhlbCh1U2FtcGxlclN0cm9rZXMsIHN0cm9rZVBvcyArIElOVCgxKSwgdVN0cm9rZUltYWdlU2l6ZSk7XFxuICAgICAgY292ZXJhZ2VZKHN0cm9rZTAueHksIHN0cm9rZTAuencsIHN0cm9rZTEueHkpO1xcbiAgICB9XFxuICB9XFxuXFxuICB3ZWlnaHQgPSBzYXR1cmF0ZSgxLjAgLSB3ZWlnaHQgKiAyLjApO1xcbiAgZmxvYXQgZGlzdGFuY2UgPSBtYXgod2VpZ2h0LnggKyB3ZWlnaHQueSwgbWluRGlzdGFuY2UpOyAvLyBtYW5oYXR0YW4gYXBwcm94LlxcbiAgZmxvYXQgYW50aWFsaWFzID0gYWJzKGRvdChjb3ZlcmFnZSwgd2VpZ2h0KSAvIGRpc3RhbmNlKTtcXG4gIGZsb2F0IGNvdmVyID0gbWluKGFicyhjb3ZlcmFnZS54KSwgYWJzKGNvdmVyYWdlLnkpKTtcXG4gIGdsX0ZyYWdDb2xvciA9IHVNYXRlcmlhbENvbG9yO1xcbiAgZ2xfRnJhZ0NvbG9yLmEgKj0gc2F0dXJhdGUobWF4KGFudGlhbGlhcywgY292ZXIpKTtcXG59XCIsbGluZVZlcnQ6XCIvKlxcbiAgUGFydCBvZiB0aGUgUHJvY2Vzc2luZyBwcm9qZWN0IC0gaHR0cDovL3Byb2Nlc3Npbmcub3JnXFxuICBDb3B5cmlnaHQgKGMpIDIwMTItMTUgVGhlIFByb2Nlc3NpbmcgRm91bmRhdGlvblxcbiAgQ29weXJpZ2h0IChjKSAyMDA0LTEyIEJlbiBGcnkgYW5kIENhc2V5IFJlYXNcXG4gIENvcHlyaWdodCAoYykgMjAwMS0wNCBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5XFxuICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXFxuICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXFxuICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuMS5cXG4gIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxcbiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcXG4gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXFxuICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxcbiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsXFxuICBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGVcXG4gIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsXFxuICBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0FcXG4qL1xcblxcbiNkZWZpbmUgUFJPQ0VTU0lOR19MSU5FX1NIQURFUlxcblxcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIGZsb2F0IHVTdHJva2VXZWlnaHQ7XFxuXFxudW5pZm9ybSB2ZWM0IHVWaWV3cG9ydDtcXG5cXG4vLyB1c2luZyBhIHNjYWxlIDwxIG1vdmVzIHRoZSBsaW5lcyB0b3dhcmRzIHRoZSBjYW1lcmFcXG4vLyBpbiBvcmRlciB0byBwcmV2ZW50IHBvcHBpbmcgZWZmZWN0cyBkdWUgdG8gaGFsZiBvZlxcbi8vIHRoZSBsaW5lIGRpc2FwcGVhcmluZyBiZWhpbmQgdGhlIGdlb21ldHJ5IGZhY2VzLlxcbnZlYzMgc2NhbGUgPSB2ZWMzKDAuOTk5NSk7XFxuXFxuYXR0cmlidXRlIHZlYzQgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGFEaXJlY3Rpb247XFxuICBcXG52b2lkIG1haW4oKSB7XFxuICB2ZWM0IHBvc3AgPSB1TW9kZWxWaWV3TWF0cml4ICogYVBvc2l0aW9uO1xcbiAgdmVjNCBwb3NxID0gdU1vZGVsVmlld01hdHJpeCAqIChhUG9zaXRpb24gKyB2ZWM0KGFEaXJlY3Rpb24ueHl6LCAwKSk7XFxuXFxuICAvLyBNb3ZpbmcgdmVydGljZXMgc2xpZ2h0bHkgdG93YXJkIHRoZSBjYW1lcmFcXG4gIC8vIHRvIGF2b2lkIGRlcHRoLWZpZ2h0aW5nIHdpdGggdGhlIGZpbGwgdHJpYW5nbGVzLlxcbiAgLy8gRGlzY3Vzc2VkIGhlcmU6XFxuICAvLyBodHRwOi8vd3d3Lm9wZW5nbC5vcmcvZGlzY3Vzc2lvbl9ib2FyZHMvdWJidGhyZWFkcy5waHA/dWJiPXNob3dmbGF0Jk51bWJlcj0yNTI4NDggIFxcbiAgcG9zcC54eXogPSBwb3NwLnh5eiAqIHNjYWxlO1xcbiAgcG9zcS54eXogPSBwb3NxLnh5eiAqIHNjYWxlO1xcblxcbiAgdmVjNCBwID0gdVByb2plY3Rpb25NYXRyaXggKiBwb3NwO1xcbiAgdmVjNCBxID0gdVByb2plY3Rpb25NYXRyaXggKiBwb3NxO1xcblxcbiAgLy8gZm9ybXVsYSB0byBjb252ZXJ0IGZyb20gY2xpcCBzcGFjZSAocmFuZ2UgLTEuLjEpIHRvIHNjcmVlbiBzcGFjZSAocmFuZ2UgMC4uW3dpZHRoIG9yIGhlaWdodF0pXFxuICAvLyBzY3JlZW5fcCA9IChwLnh5L3AudyArIDwxLDE+KSAqIDAuNSAqIHVWaWV3cG9ydC56d1xcblxcbiAgLy8gcHJldmVudCBkaXZpc2lvbiBieSBXIGJ5IHRyYW5zZm9ybWluZyB0aGUgdGFuZ2VudCBmb3JtdWxhIChkaXYgYnkgMCBjYXVzZXNcXG4gIC8vIHRoZSBsaW5lIHRvIGRpc2FwcGVhciwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9jZXNzaW5nL3Byb2Nlc3NpbmcvaXNzdWVzLzUxODMpXFxuICAvLyB0ID0gc2NyZWVuX3EgLSBzY3JlZW5fcFxcbiAgLy9cXG4gIC8vIHRhbmdlbnQgaXMgbm9ybWFsaXplZCBhbmQgd2UgZG9uJ3QgY2FyZSB3aGljaCBhRGlyZWN0aW9uIGl0IHBvaW50cyB0byAoKy0pXFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCBzY3JlZW5fcSAtIHNjcmVlbl9wIClcXG4gIC8vIHQgPSArLSBub3JtYWxpemUoIChxLnh5L3Eudys8MSwxPikqMC41KnVWaWV3cG9ydC56dyAtIChwLnh5L3Audys8MSwxPikqMC41KnVWaWV3cG9ydC56dyApXFxuICAvL1xcbiAgLy8gZXh0cmFjdCBjb21tb24gZmFjdG9yLCA8MSwxPiAtIDwxLDE+IGNhbmNlbHMgb3V0XFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCAocS54eS9xLncgLSBwLnh5L3AudykgKiAwLjUgKiB1Vmlld3BvcnQuencgKVxcbiAgLy9cXG4gIC8vIGNvbnZlcnQgdG8gY29tbW9uIGRpdmlzb3JcXG4gIC8vIHQgPSArLSBub3JtYWxpemUoICgocS54eSpwLncgLSBwLnh5KnEudykgLyAocC53KnEudykpICogMC41ICogdVZpZXdwb3J0Lnp3IClcXG4gIC8vXFxuICAvLyByZW1vdmUgdGhlIGNvbW1vbiBzY2FsYXIgZGl2aXNvci9mYWN0b3IsIG5vdCBuZWVkZWQgZHVlIHRvIG5vcm1hbGl6ZSBhbmQgKy1cXG4gIC8vIChrZWVwIHVWaWV3cG9ydCAtIGNhbid0IHJlbW92ZSBiZWNhdXNlIGl0IGhhcyBkaWZmZXJlbnQgY29tcG9uZW50cyBmb3IgeCBhbmQgeVxcbiAgLy8gIGFuZCBjb3JyZWN0cyBmb3IgYXNwZWN0IHJhdGlvLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb2Nlc3NpbmcvcHJvY2Vzc2luZy9pc3N1ZXMvNTE4MSlcXG4gIC8vIHQgPSArLSBub3JtYWxpemUoIChxLnh5KnAudyAtIHAueHkqcS53KSAqIHVWaWV3cG9ydC56dyApXFxuXFxuICB2ZWMyIHRhbmdlbnQgPSBub3JtYWxpemUoKHEueHkqcC53IC0gcC54eSpxLncpICogdVZpZXdwb3J0Lnp3KTtcXG5cXG4gIC8vIGZsaXAgdGFuZ2VudCB0byBub3JtYWwgKGl0J3MgYWxyZWFkeSBub3JtYWxpemVkKVxcbiAgdmVjMiBub3JtYWwgPSB2ZWMyKC10YW5nZW50LnksIHRhbmdlbnQueCk7XFxuXFxuICBmbG9hdCB0aGlja25lc3MgPSBhRGlyZWN0aW9uLncgKiB1U3Ryb2tlV2VpZ2h0O1xcbiAgdmVjMiBvZmZzZXQgPSBub3JtYWwgKiB0aGlja25lc3MgLyAyLjA7XFxuXFxuICAvLyBQZXJzcGVjdGl2ZSAtLS1cXG4gIC8vIGNvbnZlcnQgZnJvbSB3b3JsZCB0byBjbGlwIGJ5IG11bHRpcGx5aW5nIHdpdGggcHJvamVjdGlvbiBzY2FsaW5nIGZhY3RvclxcbiAgLy8gdG8gZ2V0IHRoZSByaWdodCB0aGlja25lc3MgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvY2Vzc2luZy9wcm9jZXNzaW5nL2lzc3Vlcy81MTgyKVxcbiAgLy8gaW52ZXJ0IFksIHByb2plY3Rpb25zIGluIFByb2Nlc3NpbmcgaW52ZXJ0IFlcXG4gIHZlYzIgcGVyc3BTY2FsZSA9ICh1UHJvamVjdGlvbk1hdHJpeCAqIHZlYzQoMSwgLTEsIDAsIDApKS54eTtcXG5cXG4gIC8vIE5vIFBlcnNwZWN0aXZlIC0tLVxcbiAgLy8gbXVsdGlwbHkgYnkgVyAodG8gY2FuY2VsIG91dCBkaXZpc2lvbiBieSBXIGxhdGVyIGluIHRoZSBwaXBlbGluZSkgYW5kXFxuICAvLyBjb252ZXJ0IGZyb20gc2NyZWVuIHRvIGNsaXAgKGRlcml2ZWQgZnJvbSBjbGlwIHRvIHNjcmVlbiBhYm92ZSlcXG4gIHZlYzIgbm9QZXJzcFNjYWxlID0gcC53IC8gKDAuNSAqIHVWaWV3cG9ydC56dyk7XFxuXFxuICAvL2dsX1Bvc2l0aW9uLnh5ID0gcC54eSArIG9mZnNldC54eSAqIG1peChub1BlcnNwU2NhbGUsIHBlcnNwU2NhbGUsIGZsb2F0KHBlcnNwZWN0aXZlID4gMCkpO1xcbiAgZ2xfUG9zaXRpb24ueHkgPSBwLnh5ICsgb2Zmc2V0Lnh5ICogcGVyc3BTY2FsZTtcXG4gIGdsX1Bvc2l0aW9uLnp3ID0gcC56dztcXG59XFxuXCIsbGluZUZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5wcmVjaXNpb24gbWVkaXVtcCBpbnQ7XFxuXFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IHVNYXRlcmlhbENvbG9yO1xcbn1cIixwb2ludFZlcnQ6XCJhdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxudW5pZm9ybSBmbG9hdCB1UG9pbnRTaXplO1xcbnZhcnlpbmcgZmxvYXQgdlN0cm9rZVdlaWdodDtcXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudm9pZCBtYWluKCkge1xcblxcdHZlYzQgcG9zaXRpb25WZWM0ID0gIHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcblxcdGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcblxcdGdsX1BvaW50U2l6ZSA9IHVQb2ludFNpemU7XFxuXFx0dlN0cm9rZVdlaWdodCA9IHVQb2ludFNpemU7XFxufVwiLHBvaW50RnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnByZWNpc2lvbiBtZWRpdW1wIGludDtcXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxudmFyeWluZyBmbG9hdCB2U3Ryb2tlV2VpZ2h0O1xcblxcbnZvaWQgbWFpbigpe1xcblxcdGZsb2F0IG1hc2sgPSAwLjA7XFxuXFxuXFx0Ly8gbWFrZSBhIGNpcmN1bGFyIG1hc2sgdXNpbmcgdGhlIGdsX1BvaW50Q29vcmQgKGdvZXMgZnJvbSAwIC0gMSBvbiBhIHBvaW50KVxcbiAgICAvLyBtaWdodCBiZSBhYmxlIHRvIGdldCBhIG5pY2VyIGVkZ2Ugb24gYmlnIHN0cm9rZXdlaWdodHMgd2l0aCBzbW9vdGhzdGVwIGJ1dCBzbGlnaHRseSBsZXNzIHBlcmZvcm1hbnRcXG5cXG5cXHRtYXNrID0gc3RlcCgwLjk4LCBsZW5ndGgoZ2xfUG9pbnRDb29yZCAqIDIuMCAtIDEuMCkpO1xcblxcblxcdC8vIGlmIHN0cm9rZVdlaWdodCBpcyAxIG9yIGxlc3MgbGV0cyBqdXN0IGRyYXcgYSBzcXVhcmVcXG5cXHQvLyB0aGlzIHByZXZlbnRzIHdlaXJkIGFydGlmYWN0aW5nIGZyb20gY2FydmluZyBjaXJjbGVzIHdoZW4gb3VyIHBvaW50cyBhcmUgcmVhbGx5IHNtYWxsXFxuXFx0Ly8gaWYgc3Ryb2tlV2VpZ2h0IGlzIGxhcmdlciB0aGFuIDEsIHdlIGp1c3QgdXNlIGl0IGFzIGlzXFxuXFxuXFx0bWFzayA9IG1peCgwLjAsIG1hc2ssIGNsYW1wKGZsb29yKHZTdHJva2VXZWlnaHQgLSAwLjUpLDAuMCwxLjApKTtcXG5cXG5cXHQvLyB0aHJvdyBhd2F5IHRoZSBib3JkZXJzIG9mIHRoZSBtYXNrXFxuICAgIC8vIG90aGVyd2lzZSB3ZSBnZXQgd2VpcmQgYWxwaGEgYmxlbmRpbmcgaXNzdWVzXFxuXFxuXFx0aWYobWFzayA+IDAuOTgpe1xcbiAgICAgIGRpc2NhcmQ7XFxuICBcXHR9XFxuXFxuICBcXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KHVNYXRlcmlhbENvbG9yLnJnYiAqICgxLjAgLSBtYXNrKSwgdU1hdGVyaWFsQ29sb3IuYSkgO1xcbn1cIn07ZC5SZW5kZXJlckdMPWZ1bmN0aW9uKGEsYixjLGUpe3JldHVybiBkLlJlbmRlcmVyLmNhbGwodGhpcyxhLGIsYyksdGhpcy5hdHRyaWJ1dGVzPXt9LGU9ZXx8e30sdGhpcy5hdHRyaWJ1dGVzLmFscGhhPXZvaWQgMD09PWUuYWxwaGF8fGUuYWxwaGEsdGhpcy5hdHRyaWJ1dGVzLmRlcHRoPXZvaWQgMD09PWUuZGVwdGh8fGUuZGVwdGgsdGhpcy5hdHRyaWJ1dGVzLnN0ZW5jaWw9dm9pZCAwPT09ZS5zdGVuY2lsfHxlLnN0ZW5jaWwsdGhpcy5hdHRyaWJ1dGVzLmFudGlhbGlhcz12b2lkIDAhPT1lLmFudGlhbGlhcyYmZS5hbnRpYWxpYXMsdGhpcy5hdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYT12b2lkIDAhPT1lLnByZW11bHRpcGxpZWRBbHBoYSYmZS5wcmVtdWx0aXBsaWVkQWxwaGEsdGhpcy5hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj12b2lkIDA9PT1lLnByZXNlcnZlRHJhd2luZ0J1ZmZlcnx8ZS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsdGhpcy5hdHRyaWJ1dGVzLnBlclBpeGVsTGlnaHRpbmc9dm9pZCAwIT09ZS5wZXJQaXhlbExpZ2h0aW5nJiZlLnBlclBpeGVsTGlnaHRpbmcsdGhpcy5faW5pdENvbnRleHQoKSx0aGlzLmlzUDNEPSEwLHRoaXMuR0w9dGhpcy5kcmF3aW5nQ29udGV4dCx0aGlzLmFtYmllbnRMaWdodENvbG9ycz1bXSx0aGlzLmRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25zPVtdLHRoaXMuZGlyZWN0aW9uYWxMaWdodENvbG9ycz1bXSx0aGlzLnBvaW50TGlnaHRQb3NpdGlvbnM9W10sdGhpcy5wb2ludExpZ2h0Q29sb3JzPVtdLHRoaXMudU1WTWF0cml4PW5ldyBkLk1hdHJpeCx0aGlzLnVQTWF0cml4PW5ldyBkLk1hdHJpeCx0aGlzLnVOTWF0cml4PW5ldyBkLk1hdHJpeChcIm1hdDNcIiksdGhpcy5fY3VyQ2FtZXJhPW5ldyBkLkNhbWVyYSh0aGlzKSx0aGlzLl9jdXJDYW1lcmEuX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3MoKSx0aGlzLl9jdXJDYW1lcmEuX3NldERlZmF1bHRDYW1lcmEoKSx0aGlzLmdIYXNoPXt9LHRoaXMuX2RlZmF1bHRMaWdodFNoYWRlcj12b2lkIDAsdGhpcy5fZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXI9dm9pZCAwLHRoaXMuX2RlZmF1bHROb3JtYWxTaGFkZXI9dm9pZCAwLHRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcj12b2lkIDAsdGhpcy5fZGVmYXVsdFBvaW50U2hhZGVyPXZvaWQgMCx0aGlzLmN1ckZpbGxTaGFkZXI9dm9pZCAwLHRoaXMuY3VyU3Ryb2tlU2hhZGVyPXZvaWQgMCx0aGlzLmN1clBvaW50U2hhZGVyPXZvaWQgMCx0aGlzLl91c2VDb2xvclNoYWRlcigpLHRoaXMuc2V0U3Ryb2tlU2hhZGVyKHRoaXMuX2dldExpbmVTaGFkZXIoKSksdGhpcy5fdXNlUG9pbnRTaGFkZXIoKSx0aGlzLl9wb2ludFZlcnRleEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaXNJbW1lZGlhdGVEcmF3aW5nPSExLHRoaXMuaW1tZWRpYXRlTW9kZT17fSx0aGlzLmZpbGwoMjU1LDI1NSwyNTUsMjU1KSx0aGlzLnBvaW50U2l6ZT01LHRoaXMuc3Ryb2tlV2VpZ2h0KDEpLHRoaXMuc3Ryb2tlKDAsMCwwKSx0aGlzLnRleHR1cmVzPVtdLHRoaXMuX2N1cnZlVGlnaHRuZXNzPTYsdGhpcy5fbG9va1VwVGFibGVCZXppZXI9W10sdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWM9W10sdGhpcy5fbHV0QmV6aWVyRGV0YWlsPTAsdGhpcy5fbHV0UXVhZHJhdGljRGV0YWlsPTAsdGhpcy5fdGVzc3k9dGhpcy5faW5pdFRlc3N5KCksdGhpcy5mb250SW5mb3M9e30sdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQuUmVuZGVyZXIucHJvdG90eXBlKSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9pbml0Q29udGV4dD1mdW5jdGlvbigpe3RyeXtpZih0aGlzLmRyYXdpbmdDb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoXCJ3ZWJnbFwiLHRoaXMuYXR0cmlidXRlcyl8fHRoaXMuY2FudmFzLmdldENvbnRleHQoXCJleHBlcmltZW50YWwtd2ViZ2xcIix0aGlzLmF0dHJpYnV0ZXMpLG51bGw9PT10aGlzLmRyYXdpbmdDb250ZXh0KXRocm93IG5ldyBFcnJvcihcIkVycm9yIGNyZWF0aW5nIHdlYmdsIGNvbnRleHRcIik7Y29uc29sZS5sb2coXCJwNS5SZW5kZXJlckdMOiBlbmFibGVkIHdlYmdsIGNvbnRleHRcIik7dmFyIGE9dGhpcy5kcmF3aW5nQ29udGV4dDthLmVuYWJsZShhLkRFUFRIX1RFU1QpLGEuZGVwdGhGdW5jKGEuTEVRVUFMKSxhLnZpZXdwb3J0KDAsMCxhLmRyYXdpbmdCdWZmZXJXaWR0aCxhLmRyYXdpbmdCdWZmZXJIZWlnaHQpLHRoaXMuX3ZpZXdwb3J0PXRoaXMuZHJhd2luZ0NvbnRleHQuZ2V0UGFyYW1ldGVyKHRoaXMuZHJhd2luZ0NvbnRleHQuVklFV1BPUlQpfWNhdGNoKGEpe3Rocm93IGF9fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9yZXNldENvbnRleHQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPXRoaXMud2lkdGgsZj10aGlzLmhlaWdodCxnPXRoaXMuY2FudmFzLmlkLGg9dGhpcy5jYW52YXM7aCYmaC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGgpLGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxoLmlkPWcsdGhpcy5fcEluc3QuX3VzZXJOb2RlP3RoaXMuX3BJbnN0Ll91c2VyTm9kZS5hcHBlbmRDaGlsZChoKTpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGgpLHRoaXMuX3BJbnN0LmNhbnZhcz1oO3ZhciBpPW5ldyBkLlJlbmRlcmVyR0wodGhpcy5fcEluc3QuY2FudmFzLHRoaXMuX3BJbnN0LCEwLGEpO3RoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIl9yZW5kZXJlclwiLGkpLGkucmVzaXplKGUsZiksaS5fYXBwbHlEZWZhdWx0cygpLHRoaXMuX3BJbnN0Ll9lbGVtZW50cy5wdXNoKGkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmFwcGx5KHdpbmRvdy5fcmVuZGVyZXIsYil9LDApfSxkLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKGEsYil7dGhpcy5fYXNzZXJ0M2QoXCJzZXRBdHRyaWJ1dGVzXCIpO3ZhciBjO3ZvaWQgMCE9PWI/KGM9e30sY1thXT1iKTphIGluc3RhbmNlb2YgT2JqZWN0JiYoYz1hKSx0aGlzLnB1c2goKSx0aGlzLl9yZW5kZXJlci5fcmVzZXRDb250ZXh0KGMpLHRoaXMucG9wKCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3RoaXMudU1WTWF0cml4LnNldCh0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzFdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsyXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbM10sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzRdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs1XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNl0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzddLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs4XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOV0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEwXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTFdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMl0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEzXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTRdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNV0pLHRoaXMuYW1iaWVudExpZ2h0Q29sb3JzLmxlbmd0aD0wLHRoaXMuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbnMubGVuZ3RoPTAsdGhpcy5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzLmxlbmd0aD0wLHRoaXMucG9pbnRMaWdodFBvc2l0aW9ucy5sZW5ndGg9MCx0aGlzLnBvaW50TGlnaHRDb2xvcnMubGVuZ3RoPTB9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX3BJbnN0LmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyksYj1hLmxldmVsc1swXS8yNTUsYz1hLmxldmVsc1sxXS8yNTUsZD1hLmxldmVsc1syXS8yNTUsZT1hLmxldmVsc1szXS8yNTU7dGhpcy5HTC5jbGVhckNvbG9yKGIsYyxkLGUpLHRoaXMuR0wuZGVwdGhNYXNrKCEwKSx0aGlzLkdMLmNsZWFyKHRoaXMuR0wuQ09MT1JfQlVGRkVSX0JJVHx0aGlzLkdMLkRFUFRIX0JVRkZFUl9CSVQpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oYSxiLGMsZil7dmFyIGc9ZC5wcm90b3R5cGUuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKTt0aGlzLmN1ckZpbGxDb2xvcj1nLl9hcnJheSx0aGlzLmlzSW1tZWRpYXRlRHJhd2luZz90aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0SW1tZWRpYXRlTW9kZVNoYWRlcigpKTp0aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0Q29sb3JTaGFkZXIoKSksdGhpcy5kcmF3TW9kZT1lLkZJTEwsdGhpcy5jdXJGaWxsU2hhZGVyLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuY3VyRmlsbENvbG9yKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zdHJva2U9ZnVuY3Rpb24oYSxiLGMsZSl7YXJndW1lbnRzWzNdPTI1NTt2YXIgZj1kLnByb3RvdHlwZS5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpO3RoaXMuY3VyU3Ryb2tlQ29sb3I9Zi5fYXJyYXksdGhpcy5jdXJTdHJva2VTaGFkZXIuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5jdXJTdHJva2VDb2xvciksdGhpcy5jdXJQb2ludFNoYWRlci5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIixmLl9hcnJheSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc3Ryb2tlV2VpZ2h0PWZ1bmN0aW9uKGEpe3RoaXMuY3VyU3Ryb2tlV2VpZ2h0IT09YSYmKHRoaXMucG9pbnRTaXplPWEsdGhpcy5jdXJTdHJva2VXZWlnaHQ9YSx0aGlzLmN1clN0cm9rZVNoYWRlci5zZXRVbmlmb3JtKFwidVN0cm9rZVdlaWdodFwiLGEpLHRoaXMuY3VyUG9pbnRTaGFkZXIuc2V0VW5pZm9ybShcInVQb2ludFNpemVcIixhKSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEsYixjLGUpe3JldHVybiBkLlJlbmRlcmVyMkQucHJvdG90eXBlLmdldC5hcHBseSh0aGlzLFthLGIsYyxlXSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUubG9hZFBpeGVscz1mdW5jdGlvbigpe2lmKCEwIT09dGhpcy5hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcilyZXR1cm4gdm9pZCBjb25zb2xlLmxvZyhcImxvYWRQaXhlbHMgb25seSB3b3JrcyBpbiBXZWJHTCB3aGVuIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBpcyB0cnVlLlwiKTt2YXIgYT10aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LGI9dGhpcy53aWR0aCxjPXRoaXMuaGVpZ2h0O2IqPWEsYyo9YSx2b2lkIDA9PT10aGlzLnBpeGVscyYmKHRoaXMucGl4ZWxzPW5ldyBVaW50OEFycmF5KHRoaXMuR0wuZHJhd2luZ0J1ZmZlcldpZHRoKnRoaXMuR0wuZHJhd2luZ0J1ZmZlckhlaWdodCo0KSksdGhpcy5HTC5yZWFkUGl4ZWxzKDAsMCxiLGMsdGhpcy5HTC5SR0JBLHRoaXMuR0wuVU5TSUdORURfQllURSx0aGlzLnBpeGVscyksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwicGl4ZWxzXCIsdGhpcy5waXhlbHMpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmdlb21ldHJ5SW5IYXNoPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDAhPT10aGlzLmdIYXNoW2FdfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihhLGIpe2QuUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsYSxiKSx0aGlzLkdMLnZpZXdwb3J0KDAsMCx0aGlzLkdMLmRyYXdpbmdCdWZmZXJXaWR0aCx0aGlzLkdMLmRyYXdpbmdCdWZmZXJIZWlnaHQpLHRoaXMuX3ZpZXdwb3J0PXRoaXMuR0wuZ2V0UGFyYW1ldGVyKHRoaXMuR0wuVklFV1BPUlQpLHRoaXMuX2N1ckNhbWVyYS5fcmVzaXplKCksdm9pZCAwIT09dGhpcy5waXhlbHMmJih0aGlzLnBpeGVscz1uZXcgVWludDhBcnJheSh0aGlzLkdMLmRyYXdpbmdCdWZmZXJXaWR0aCp0aGlzLkdMLmRyYXdpbmdCdWZmZXJIZWlnaHQqNCkpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzWzBdfHwwLGI9YXJndW1lbnRzWzFdfHwwLGM9YXJndW1lbnRzWzJdfHwwLGQ9YXJndW1lbnRzWzNdfHwwO3RoaXMuR0wuY2xlYXJDb2xvcihhLGIsYyxkKSx0aGlzLkdMLmNsZWFyKHRoaXMuR0wuQ09MT1JfQlVGRkVSX0JJVHx0aGlzLkdMLkRFUFRIX0JVRkZFUl9CSVQpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3RvciYmKGM9YS56LGI9YS55LGE9YS54KSx0aGlzLnVNVk1hdHJpeC50cmFuc2xhdGUoW2EsYixjXSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMudU1WTWF0cml4LnNjYWxlKGEsYixjKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhLGIpe3JldHVybiB2b2lkIDA9PT1iP3RoaXMucm90YXRlWihhKTooYXJndW1lbnRzWzBdPXRoaXMuX3BJbnN0Ll9mcm9tUmFkaWFucyhhKSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlLmFwcGx5KHRoaXMudU1WTWF0cml4LGFyZ3VtZW50cyksdGhpcyl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3RhdGUoYSwxLDAsMCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvdGF0ZShhLDAsMSwwKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm90YXRlKGEsMCwwLDEpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3ZhciBhPWQuUmVuZGVyZXIucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcyksYj1hLnByb3BlcnRpZXM7cmV0dXJuIGIudU1WTWF0cml4PXRoaXMudU1WTWF0cml4LmNvcHkoKSxiLnVQTWF0cml4PXRoaXMudVBNYXRyaXguY29weSgpLGIuX2N1ckNhbWVyYT10aGlzLl9jdXJDYW1lcmEsdGhpcy5fY3VyQ2FtZXJhPXRoaXMuX2N1ckNhbWVyYS5jb3B5KCksYX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yZXNldE1hdHJpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVNVk1hdHJpeD1kLk1hdHJpeC5pZGVudGl0eSh0aGlzLl9wSW5zdCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zZXRGaWxsU2hhZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmN1ckZpbGxTaGFkZXIhPT1hJiYodGhpcy5jdXJGaWxsU2hhZGVyPWEsdGhpcy5jdXJGaWxsU2hhZGVyLmluaXQoKSksdGhpcy5jdXJGaWxsU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNldFBvaW50U2hhZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmN1clBvaW50U2hhZGVyIT09YSYmKHRoaXMuY3VyUG9pbnRTaGFkZXI9YSx0aGlzLmN1clBvaW50U2hhZGVyLmluaXQoKSksdGhpcy5jdXJQb2ludFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zZXRTdHJva2VTaGFkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY3VyU3Ryb2tlU2hhZGVyIT09YSYmKHRoaXMuY3VyU3Ryb2tlU2hhZGVyPWEsdGhpcy5jdXJTdHJva2VTaGFkZXIuaW5pdCgpKSx0aGlzLmN1clN0cm9rZVNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXNlTGlnaHRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJGaWxsU2hhZGVyJiZ0aGlzLmN1ckZpbGxTaGFkZXIuaXNMaWdodFNoYWRlcigpfHx0aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0TGlnaHRTaGFkZXIoKSksdGhpcy5jdXJGaWxsU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91c2VDb2xvclNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1ckZpbGxTaGFkZXImJnRoaXMuY3VyRmlsbFNoYWRlciE9PXRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyfHx0aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0Q29sb3JTaGFkZXIoKSksdGhpcy5jdXJGaWxsU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91c2VQb2ludFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1clBvaW50U2hhZGVyfHx0aGlzLnNldFBvaW50U2hhZGVyKHRoaXMuX2dldFBvaW50U2hhZGVyKCkpLHRoaXMuY3VyUG9pbnRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VzZUltbWVkaWF0ZU1vZGVTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJGaWxsU2hhZGVyJiZ0aGlzLmN1ckZpbGxTaGFkZXIhPT10aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXJ8fHRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRJbW1lZGlhdGVNb2RlU2hhZGVyKCkpLHRoaXMuY3VyRmlsbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0TGlnaHRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdExpZ2h0U2hhZGVyfHwodGhpcy5hdHRyaWJ1dGVzLnBlclBpeGVsTGlnaHRpbmc/dGhpcy5fZGVmYXVsdExpZ2h0U2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcucGhvbmdWZXJ0LGcucGhvbmdGcmFnKTp0aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5saWdodFZlcnQsZy5saWdodFRleHR1cmVGcmFnKSksdGhpcy5fZGVmYXVsdExpZ2h0U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRJbW1lZGlhdGVNb2RlU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyfHwodGhpcy5fZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5pbW1lZGlhdGVWZXJ0LGcudmVydGV4Q29sb3JGcmFnKSksdGhpcy5fZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldE5vcm1hbFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0Tm9ybWFsU2hhZGVyfHwodGhpcy5fZGVmYXVsdE5vcm1hbFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLm5vcm1hbFZlcnQsZy5ub3JtYWxGcmFnKSksdGhpcy5fZGVmYXVsdE5vcm1hbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0Q29sb3JTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyfHwodGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcubm9ybWFsVmVydCxnLmJhc2ljRnJhZykpLHRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0UG9pbnRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFBvaW50U2hhZGVyfHwodGhpcy5fZGVmYXVsdFBvaW50U2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcucG9pbnRWZXJ0LGcucG9pbnRGcmFnKSksdGhpcy5fZGVmYXVsdFBvaW50U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRMaW5lU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRMaW5lU2hhZGVyfHwodGhpcy5fZGVmYXVsdExpbmVTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5saW5lVmVydCxnLmxpbmVGcmFnKSksdGhpcy5fZGVmYXVsdExpbmVTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldEZvbnRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTaGFkZXJ8fCh0aGlzLkdMLmdldEV4dGVuc2lvbihcIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlc1wiKSx0aGlzLl9kZWZhdWx0Rm9udFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLmZvbnRWZXJ0LGcuZm9udEZyYWcpKSx0aGlzLl9kZWZhdWx0Rm9udFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0RW1wdHlUZXh0dXJlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2VtcHR5VGV4dHVyZSl7dmFyIGE9bmV3IGQuSW1hZ2UoMSwxKTthLnNldCgwLDAsMjU1KSx0aGlzLl9lbXB0eVRleHR1cmU9bmV3IGQuVGV4dHVyZSh0aGlzLGEpfXJldHVybiB0aGlzLl9lbXB0eVRleHR1cmV9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZ2V0VGV4dHVyZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy50ZXh0dXJlcyxjPTA7YzxiLmxlbmd0aDsrK2Mpe3ZhciBlPWJbY107aWYoZS5zcmM9PT1hKXJldHVybiBlfXZhciBmPW5ldyBkLlRleHR1cmUodGhpcyxhKTtyZXR1cm4gdGhpcy50ZXh0dXJlcy5wdXNoKGYpLGZ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2JpbmRCdWZmZXI9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZih0aGlzLkdMLmJpbmRCdWZmZXIoYixhKSx2b2lkIDAhPT1jKXt2YXIgZj1uZXcgZChjKTt0aGlzLkdMLmJ1ZmZlckRhdGEoYixmLGUpfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zbW9vdGg9ZnVuY3Rpb24oKXshMT09PXRoaXMuYXR0cmlidXRlcy5hbnRpYWxpYXMmJnRoaXMuX3BJbnN0LnNldEF0dHJpYnV0ZXMoXCJhbnRpYWxpYXNcIiwhMCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUubm9TbW9vdGg9ZnVuY3Rpb24oKXshMD09PXRoaXMuYXR0cmlidXRlcy5hbnRpYWxpYXMmJnRoaXMuX3BJbnN0LnNldEF0dHJpYnV0ZXMoXCJhbnRpYWxpYXNcIiwhMSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2ZsYXR0ZW49ZnVuY3Rpb24oYSl7aWYoMD09PWEubGVuZ3RoKXJldHVybltdO2lmKGEubGVuZ3RoPjJlNCl7dmFyIGIsYz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGQ9XCJbb2JqZWN0IEFycmF5XVwiLGU9W10sZj1hLnNsaWNlKCk7Yj1mLnBvcCgpO2Rve2MuY2FsbChiKT09PWQ/Zi5wdXNoLmFwcGx5KGYsYik6ZS5wdXNoKGIpfXdoaWxlKGYubGVuZ3RoJiZ2b2lkIDAhPT0oYj1mLnBvcCgpKSk7cmV0dXJuIGUucmV2ZXJzZSgpLGV9cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLGEpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl92VG9OQXJyYXk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2ZsYXR0ZW4oYS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuW2EueCxhLnksYS56XX0pKX0sZC5wcm90b3R5cGUuX2Fzc2VydDNkPWZ1bmN0aW9uKGEpe2lmKCF0aGlzLl9yZW5kZXJlci5pc1AzRCl0aHJvdyBuZXcgRXJyb3IoYStcIigpIGlzIG9ubHkgc3VwcG9ydGVkIGluIFdFQkdMIG1vZGUuIElmIHlvdSdkIGxpa2UgdG8gdXNlIDNEIGdyYXBoaWNzIGFuZCBXZWJHTCwgc2VlICBodHRwczovL3A1anMub3JnL2V4YW1wbGVzL2Zvcm0tM2QtcHJpbWl0aXZlcy5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5faW5pdFRlc3N5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe2JbYi5sZW5ndGhdPWFbMF0sYltiLmxlbmd0aF09YVsxXSxiW2IubGVuZ3RoXT1hWzJdfWZ1bmN0aW9uIGIoYSl7YSE9PWYucHJpbWl0aXZlVHlwZS5HTF9UUklBTkdMRVMmJmNvbnNvbGUubG9nKFwiZXhwZWN0ZWQgVFJJQU5HTEVTIGJ1dCBnb3QgdHlwZTogXCIrYSl9ZnVuY3Rpb24gYyhhKXtjb25zb2xlLmxvZyhcImVycm9yIGNhbGxiYWNrXCIpLGNvbnNvbGUubG9nKFwiZXJyb3IgbnVtYmVyOiBcIithKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm5bYVswXSxhWzFdLGFbMl1dfWZ1bmN0aW9uIGUoYSl7fXZhciBnPW5ldyBmLkdsdVRlc3NlbGF0b3I7cmV0dXJuIGcuZ2x1VGVzc0NhbGxiYWNrKGYuZ2x1RW51bS5HTFVfVEVTU19WRVJURVhfREFUQSxhKSxnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfQkVHSU4sYiksZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX0VSUk9SLGMpLGcuZ2x1VGVzc0NhbGxiYWNrKGYuZ2x1RW51bS5HTFVfVEVTU19DT01CSU5FLGQpLGcuZ2x1VGVzc0NhbGxiYWNrKGYuZ2x1RW51bS5HTFVfVEVTU19FREdFX0ZMQUcsZSksZ30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdHJpYW5ndWxhdGU9ZnVuY3Rpb24oYSl7dGhpcy5fdGVzc3kuZ2x1VGVzc05vcm1hbCgwLDAsMSk7dmFyIGI9W107dGhpcy5fdGVzc3kuZ2x1VGVzc0JlZ2luUG9seWdvbihiKTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl7dGhpcy5fdGVzc3kuZ2x1VGVzc0JlZ2luQ29udG91cigpO2Zvcih2YXIgZD1hW2NdLGU9MDtlPGQubGVuZ3RoO2UrPTMpe3ZhciBmPVtkW2VdLGRbZSsxXSxkW2UrMl1dO3RoaXMuX3Rlc3N5LmdsdVRlc3NWZXJ0ZXgoZixmKX10aGlzLl90ZXNzeS5nbHVUZXNzRW5kQ29udG91cigpfXJldHVybiB0aGlzLl90ZXNzeS5nbHVUZXNzRW5kUG9seWdvbigpLGJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2JlemllckNvZWZmaWNpZW50cz1mdW5jdGlvbihhKXt2YXIgYj1hKmEsYz1iKmEsZD0xLWEsZT1kKmQ7cmV0dXJuW2UqZCwzKmUqYSwzKmQqYixjXX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fcXVhZHJhdGljQ29lZmZpY2llbnRzPWZ1bmN0aW9uKGEpe3ZhciBiPWEqYSxjPTEtYTtyZXR1cm5bYypjLDIqYyphLGJdfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9iZXppZXJUb0NhdG11bGw9ZnVuY3Rpb24oYSl7cmV0dXJuW2FbMV0sYVsxXSsoYVsyXS1hWzBdKS90aGlzLl9jdXJ2ZVRpZ2h0bmVzcyxhWzJdLShhWzNdLWFbMV0pL3RoaXMuX2N1cnZlVGlnaHRuZXNzLGFbMl1dfSxiLmV4cG9ydHM9ZC5SZW5kZXJlckdMfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuLi9jb3JlL3A1LlJlbmRlcmVyXCI6MjcsXCIuL3A1LkNhbWVyYVwiOjY5LFwiLi9wNS5NYXRyaXhcIjo3MSxcIi4vcDUuU2hhZGVyXCI6NzUsbGlidGVzczo5fV0sNzU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuU2hhZGVyPWZ1bmN0aW9uKGEsYixjKXt0aGlzLl9yZW5kZXJlcj1hLHRoaXMuX3ZlcnRTcmM9Yix0aGlzLl9mcmFnU3JjPWMsdGhpcy5fdmVydFNoYWRlcj0tMSx0aGlzLl9mcmFnU2hhZGVyPS0xLHRoaXMuX2dsUHJvZ3JhbT0wLHRoaXMuX2xvYWRlZEF0dHJpYnV0ZXM9ITEsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMuX2xvYWRlZFVuaWZvcm1zPSExLHRoaXMudW5pZm9ybXM9e30sdGhpcy5fYm91bmQ9ITEsdGhpcy5zYW1wbGVycz1bXX0sZC5TaGFkZXIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5fZ2xQcm9ncmFtKXt2YXIgYT10aGlzLl9yZW5kZXJlci5HTDtpZih0aGlzLl92ZXJ0U2hhZGVyPWEuY3JlYXRlU2hhZGVyKGEuVkVSVEVYX1NIQURFUiksYS5zaGFkZXJTb3VyY2UodGhpcy5fdmVydFNoYWRlcix0aGlzLl92ZXJ0U3JjKSxhLmNvbXBpbGVTaGFkZXIodGhpcy5fdmVydFNoYWRlciksIWEuZ2V0U2hhZGVyUGFyYW1ldGVyKHRoaXMuX3ZlcnRTaGFkZXIsYS5DT01QSUxFX1NUQVRVUykpcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJZaWtlcyEgQW4gZXJyb3Igb2NjdXJyZWQgY29tcGlsaW5nIHRoZSB2ZXJ0ZXggc2hhZGVyOlwiK2EuZ2V0U2hhZGVySW5mb0xvZyh0aGlzLl92ZXJ0U2hhZGVyKSksbnVsbDtpZih0aGlzLl9mcmFnU2hhZGVyPWEuY3JlYXRlU2hhZGVyKGEuRlJBR01FTlRfU0hBREVSKSxhLnNoYWRlclNvdXJjZSh0aGlzLl9mcmFnU2hhZGVyLHRoaXMuX2ZyYWdTcmMpLGEuY29tcGlsZVNoYWRlcih0aGlzLl9mcmFnU2hhZGVyKSwhYS5nZXRTaGFkZXJQYXJhbWV0ZXIodGhpcy5fZnJhZ1NoYWRlcixhLkNPTVBJTEVfU1RBVFVTKSlyZXR1cm4gY29uc29sZS5lcnJvcihcIkRhcm4hIEFuIGVycm9yIG9jY3VycmVkIGNvbXBpbGluZyB0aGUgZnJhZ21lbnQgc2hhZGVyOlwiK2EuZ2V0U2hhZGVySW5mb0xvZyh0aGlzLl9mcmFnU2hhZGVyKSksbnVsbDt0aGlzLl9nbFByb2dyYW09YS5jcmVhdGVQcm9ncmFtKCksYS5hdHRhY2hTaGFkZXIodGhpcy5fZ2xQcm9ncmFtLHRoaXMuX3ZlcnRTaGFkZXIpLGEuYXR0YWNoU2hhZGVyKHRoaXMuX2dsUHJvZ3JhbSx0aGlzLl9mcmFnU2hhZGVyKSxhLmxpbmtQcm9ncmFtKHRoaXMuX2dsUHJvZ3JhbSksYS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMuX2dsUHJvZ3JhbSxhLkxJTktfU1RBVFVTKXx8Y29uc29sZS5lcnJvcihcIlNuYXAhIEVycm9yIGxpbmtpbmcgc2hhZGVyIHByb2dyYW06IFwiK2EuZ2V0UHJvZ3JhbUluZm9Mb2codGhpcy5fZ2xQcm9ncmFtKSksdGhpcy5fbG9hZEF0dHJpYnV0ZXMoKSx0aGlzLl9sb2FkVW5pZm9ybXMoKX1yZXR1cm4gdGhpc30sZC5TaGFkZXIucHJvdG90eXBlLl9sb2FkQXR0cmlidXRlcz1mdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWRBdHRyaWJ1dGVzKXt0aGlzLmF0dHJpYnV0ZXM9e307Zm9yKHZhciBhPXRoaXMuX3JlbmRlcmVyLkdMLGI9YS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMuX2dsUHJvZ3JhbSxhLkFDVElWRV9BVFRSSUJVVEVTKSxjPTA7YzxiOysrYyl7dmFyIGQ9YS5nZXRBY3RpdmVBdHRyaWIodGhpcy5fZ2xQcm9ncmFtLGMpLGU9ZC5uYW1lLGY9YS5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLl9nbFByb2dyYW0sZSksZz17fTtnLm5hbWU9ZSxnLmxvY2F0aW9uPWYsZy50eXBlPWQudHlwZSxnLnNpemU9ZC5zaXplLHRoaXMuYXR0cmlidXRlc1tlXT1nfXRoaXMuX2xvYWRlZEF0dHJpYnV0ZXM9ITB9fSxkLlNoYWRlci5wcm90b3R5cGUuX2xvYWRVbmlmb3Jtcz1mdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWRVbmlmb3Jtcyl7Zm9yKHZhciBhPXRoaXMuX3JlbmRlcmVyLkdMLGI9YS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMuX2dsUHJvZ3JhbSxhLkFDVElWRV9VTklGT1JNUyksYz0wLGQ9MDtkPGI7KytkKXt2YXIgZT1hLmdldEFjdGl2ZVVuaWZvcm0odGhpcy5fZ2xQcm9ncmFtLGQpLGY9e307Zi5sb2NhdGlvbj1hLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLl9nbFByb2dyYW0sZS5uYW1lKSxmLnNpemU9ZS5zaXplO3ZhciBnPWUubmFtZTtlLnNpemU+MSYmKGc9Zy5zdWJzdHJpbmcoMCxnLmluZGV4T2YoXCJbMF1cIikpKSxmLm5hbWU9ZyxmLnR5cGU9ZS50eXBlLGYudHlwZT09PWEuU0FNUExFUl8yRCYmKGYuc2FtcGxlckluZGV4PWMsYysrLHRoaXMuc2FtcGxlcnMucHVzaChmKSksdGhpcy51bmlmb3Jtc1tnXT1mfXRoaXMuX2xvYWRlZFVuaWZvcm1zPSEwfX0sZC5TaGFkZXIucHJvdG90eXBlLmNvbXBpbGU9ZnVuY3Rpb24oKXt9LGQuU2hhZGVyLnByb3RvdHlwZS5iaW5kU2hhZGVyPWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5fYm91bmR8fCh0aGlzLnVzZVByb2dyYW0oKSx0aGlzLl9ib3VuZD0hMCx0aGlzLmJpbmRUZXh0dXJlcygpLHRoaXMuX3NldE1hdHJpeFVuaWZvcm1zKCksdGhpcz09PXRoaXMuX3JlbmRlcmVyLmN1clN0cm9rZVNoYWRlciYmdGhpcy5fc2V0Vmlld3BvcnRVbmlmb3JtKCkpfSxkLlNoYWRlci5wcm90b3R5cGUudW5iaW5kU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvdW5kJiYodGhpcy51bmJpbmRUZXh0dXJlcygpLHRoaXMuX2JvdW5kPSExKSx0aGlzfSxkLlNoYWRlci5wcm90b3R5cGUuYmluZFRleHR1cmVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuX3JlbmRlcmVyLkdMLGI9MDtiPHRoaXMuc2FtcGxlcnMubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5zYW1wbGVyc1tiXSxkPWMudGV4dHVyZTt2b2lkIDA9PT1kJiYoZD10aGlzLl9yZW5kZXJlci5fZ2V0RW1wdHlUZXh0dXJlKCkpLGEuYWN0aXZlVGV4dHVyZShhLlRFWFRVUkUwK2Muc2FtcGxlckluZGV4KSxkLmJpbmRUZXh0dXJlKCksZC51cGRhdGUoKSxhLnVuaWZvcm0xaShjLmxvY2F0aW9uLGMuc2FtcGxlckluZGV4KX19LGQuU2hhZGVyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlcz1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8dGhpcy5zYW1wbGVycy5sZW5ndGg7YSsrKXt2YXIgYj10aGlzLnNhbXBsZXJzW2FdLGM9Yi50ZXh0dXJlO2MmJmMudXBkYXRlKCl9fSxkLlNoYWRlci5wcm90b3R5cGUudW5iaW5kVGV4dHVyZXM9ZnVuY3Rpb24oKXt9LGQuU2hhZGVyLnByb3RvdHlwZS5fc2V0TWF0cml4VW5pZm9ybXM9ZnVuY3Rpb24oKXt0aGlzLnNldFVuaWZvcm0oXCJ1UHJvamVjdGlvbk1hdHJpeFwiLHRoaXMuX3JlbmRlcmVyLnVQTWF0cml4Lm1hdDQpLHRoaXMuc2V0VW5pZm9ybShcInVNb2RlbFZpZXdNYXRyaXhcIix0aGlzLl9yZW5kZXJlci51TVZNYXRyaXgubWF0NCksdGhpcy5zZXRVbmlmb3JtKFwidVZpZXdNYXRyaXhcIix0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0KSx0aGlzPT09dGhpcy5fcmVuZGVyZXIuY3VyRmlsbFNoYWRlciYmKHRoaXMuX3JlbmRlcmVyLnVOTWF0cml4LmludmVyc2VUcmFuc3Bvc2UodGhpcy5fcmVuZGVyZXIudU1WTWF0cml4KSx0aGlzLnNldFVuaWZvcm0oXCJ1Tm9ybWFsTWF0cml4XCIsdGhpcy5fcmVuZGVyZXIudU5NYXRyaXgubWF0MykpfSxkLlNoYWRlci5wcm90b3R5cGUuX3NldFZpZXdwb3J0VW5pZm9ybT1mdW5jdGlvbigpe3RoaXMuc2V0VW5pZm9ybShcInVWaWV3cG9ydFwiLHRoaXMuX3JlbmRlcmVyLl92aWV3cG9ydCl9LGQuU2hhZGVyLnByb3RvdHlwZS51c2VQcm9ncmFtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLkdMLnVzZVByb2dyYW0odGhpcy5fZ2xQcm9ncmFtKSx0aGlzfSxkLlNoYWRlci5wcm90b3R5cGUuc2V0VW5pZm9ybT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMudW5pZm9ybXNbYV07aWYoYyl7dmFyIGQ9Yy5sb2NhdGlvbixlPXRoaXMuX3JlbmRlcmVyLkdMO3N3aXRjaCh0aGlzLnVzZVByb2dyYW0oKSxjLnR5cGUpe2Nhc2UgZS5CT09MOiEwPT09Yj9lLnVuaWZvcm0xaShkLDEpOmUudW5pZm9ybTFpKGQsMCk7YnJlYWs7Y2FzZSBlLklOVDpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtMWl2KGQsYik6ZS51bmlmb3JtMWkoZCxiKTticmVhaztjYXNlIGUuRkxPQVQ6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTFmdihkLGIpOmUudW5pZm9ybTFmKGQsYik7YnJlYWs7Y2FzZSBlLkZMT0FUX01BVDM6ZS51bmlmb3JtTWF0cml4M2Z2KGQsITEsYik7YnJlYWs7Y2FzZSBlLkZMT0FUX01BVDQ6ZS51bmlmb3JtTWF0cml4NGZ2KGQsITEsYik7YnJlYWs7Y2FzZSBlLkZMT0FUX1ZFQzI6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTJmdihkLGIpOmUudW5pZm9ybTJmKGQsYlswXSxiWzFdKTticmVhaztjYXNlIGUuRkxPQVRfVkVDMzpcbmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0zZnYoZCxiKTplLnVuaWZvcm0zZihkLGJbMF0sYlsxXSxiWzJdKTticmVhaztjYXNlIGUuRkxPQVRfVkVDNDpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtNGZ2KGQsYik6ZS51bmlmb3JtNGYoZCxiWzBdLGJbMV0sYlsyXSxiWzNdKTticmVhaztjYXNlIGUuSU5UX1ZFQzI6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTJpdihkLGIpOmUudW5pZm9ybTJpKGQsYlswXSxiWzFdKTticmVhaztjYXNlIGUuSU5UX1ZFQzM6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTNpdihkLGIpOmUudW5pZm9ybTNpKGQsYlswXSxiWzFdLGJbMl0pO2JyZWFrO2Nhc2UgZS5JTlRfVkVDNDpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtNGl2KGQsYik6ZS51bmlmb3JtNGkoZCxiWzBdLGJbMV0sYlsyXSxiWzNdKTticmVhaztjYXNlIGUuU0FNUExFUl8yRDplLmFjdGl2ZVRleHR1cmUoZS5URVhUVVJFMCtjLnNhbXBsZXJJbmRleCksYy50ZXh0dXJlPXRoaXMuX3JlbmRlcmVyLmdldFRleHR1cmUoYiksZS51bmlmb3JtMWkoYy5sb2NhdGlvbixjLnNhbXBsZXJJbmRleCl9cmV0dXJuIHRoaXN9fSxkLlNoYWRlci5wcm90b3R5cGUuaXNMaWdodFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVVc2VMaWdodGluZ3x8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51QW1iaWVudExpZ2h0Q291bnR8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudURpcmVjdGlvbmFsTGlnaHRDb3VudHx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51UG9pbnRMaWdodENvdW50fHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVBbWJpZW50Q29sb3J8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudURpcmVjdGlvbmFsQ29sb3J8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVBvaW50TGlnaHRMb2NhdGlvbnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51UG9pbnRMaWdodENvbG9yfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVMaWdodGluZ0RpcmVjdGlvbnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51U3BlY3VsYXJ9LGQuU2hhZGVyLnByb3RvdHlwZS5pc1RleHR1cmVTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zYW1wbGVySW5kZXg+MH0sZC5TaGFkZXIucHJvdG90eXBlLmlzQ29sb3JTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5hdHRyaWJ1dGVzLmFWZXJ0ZXhDb2xvcnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51TWF0ZXJpYWxDb2xvcn0sZC5TaGFkZXIucHJvdG90eXBlLmlzVGV4TGlnaHRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0xpZ2h0U2hhZGVyKCkmJnRoaXMuaXNUZXh0dXJlU2hhZGVyKCl9LGQuU2hhZGVyLnByb3RvdHlwZS5pc1N0cm9rZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVTdHJva2VXZWlnaHR9LGQuU2hhZGVyLnByb3RvdHlwZS5lbmFibGVBdHRyaWI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPXRoaXMuX3JlbmRlcmVyLkdMO3JldHVybi0xIT09YSYmKGcuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYSksZy52ZXJ0ZXhBdHRyaWJQb2ludGVyKGEsYixjLGQsZSxmKSksdGhpc30sYi5leHBvcnRzPWQuU2hhZGVyfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDc2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLlRleHR1cmU9ZnVuY3Rpb24oYSxiKXt0aGlzLl9yZW5kZXJlcj1hO3ZhciBjPXRoaXMuX3JlbmRlcmVyLkdMO3RoaXMuc3JjPWIsdGhpcy5nbFRleD12b2lkIDAsdGhpcy5nbFRhcmdldD1jLlRFWFRVUkVfMkQsdGhpcy5nbEZvcm1hdD1jLlJHQkEsdGhpcy5taXBtYXBzPSExLHRoaXMuZ2xNaW5GaWx0ZXI9Yy5MSU5FQVIsdGhpcy5nbE1hZ0ZpbHRlcj1jLkxJTkVBUix0aGlzLmdsV3JhcFM9Yy5DTEFNUF9UT19FREdFLHRoaXMuZ2xXcmFwVD1jLkNMQU1QX1RPX0VER0UsdGhpcy5pc1NyY01lZGlhRWxlbWVudD12b2lkIDAhPT1kLk1lZGlhRWxlbWVudCYmYiBpbnN0YW5jZW9mIGQuTWVkaWFFbGVtZW50LHRoaXMuX3ZpZGVvUHJldlVwZGF0ZVRpbWU9MCx0aGlzLmlzU3JjSFRNTEVsZW1lbnQ9dm9pZCAwIT09ZC5FbGVtZW50JiZiIGluc3RhbmNlb2YgZC5FbGVtZW50JiYhKGIgaW5zdGFuY2VvZiBkLkdyYXBoaWNzKSx0aGlzLmlzU3JjUDVJbWFnZT1iIGluc3RhbmNlb2YgZC5JbWFnZSx0aGlzLmlzU3JjUDVHcmFwaGljcz1iIGluc3RhbmNlb2YgZC5HcmFwaGljcyx0aGlzLmlzSW1hZ2VEYXRhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBJbWFnZURhdGEmJmIgaW5zdGFuY2VvZiBJbWFnZURhdGE7dmFyIGU9dGhpcy5fZ2V0VGV4dHVyZURhdGFGcm9tU291cmNlKCk7cmV0dXJuIHRoaXMud2lkdGg9ZS53aWR0aCx0aGlzLmhlaWdodD1lLmhlaWdodCx0aGlzLmluaXQoZSksdGhpc30sZC5UZXh0dXJlLnByb3RvdHlwZS5fZ2V0VGV4dHVyZURhdGFGcm9tU291cmNlPWZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIHRoaXMuaXNTcmNQNUltYWdlP2E9dGhpcy5zcmMuY2FudmFzOnRoaXMuaXNTcmNNZWRpYUVsZW1lbnR8fHRoaXMuaXNTcmNQNUdyYXBoaWNzfHx0aGlzLmlzU3JjSFRNTEVsZW1lbnQ/YT10aGlzLnNyYy5lbHQ6dGhpcy5pc0ltYWdlRGF0YSYmKGE9dGhpcy5zcmMpLGF9LGQuVGV4dHVyZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9yZW5kZXJlci5HTDtpZih0aGlzLmdsVGV4PWIuY3JlYXRlVGV4dHVyZSgpLHRoaXMuYmluZFRleHR1cmUoKSxiLnRleFBhcmFtZXRlcmkoYi5URVhUVVJFXzJELGIuVEVYVFVSRV9NQUdfRklMVEVSLHRoaXMuZ2xNYWdGaWx0ZXIpLGIudGV4UGFyYW1ldGVyaShiLlRFWFRVUkVfMkQsYi5URVhUVVJFX01JTl9GSUxURVIsdGhpcy5nbE1pbkZpbHRlciksYi50ZXhQYXJhbWV0ZXJpKGIuVEVYVFVSRV8yRCxiLlRFWFRVUkVfV1JBUF9TLHRoaXMuZ2xXcmFwUyksYi50ZXhQYXJhbWV0ZXJpKGIuVEVYVFVSRV8yRCxiLlRFWFRVUkVfV1JBUF9ULHRoaXMuZ2xXcmFwVCksMD09PXRoaXMud2lkdGh8fDA9PT10aGlzLmhlaWdodHx8dGhpcy5pc1NyY01lZGlhRWxlbWVudCYmIXRoaXMuc3JjLmxvYWRlZG1ldGFkYXRhKXt2YXIgYz1uZXcgVWludDhBcnJheShbMSwxLDEsMV0pO2IudGV4SW1hZ2UyRCh0aGlzLmdsVGFyZ2V0LDAsYi5SR0JBLDEsMSwwLHRoaXMuZ2xGb3JtYXQsYi5VTlNJR05FRF9CWVRFLGMpfWVsc2UgYi50ZXhJbWFnZTJEKHRoaXMuZ2xUYXJnZXQsMCx0aGlzLmdsRm9ybWF0LHRoaXMuZ2xGb3JtYXQsYi5VTlNJR05FRF9CWVRFLGEpfSxkLlRleHR1cmUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuc3JjO2lmKDA9PT1hLndpZHRofHwwPT09YS5oZWlnaHQpcmV0dXJuITE7dmFyIGI9dGhpcy5fZ2V0VGV4dHVyZURhdGFGcm9tU291cmNlKCksYz0hMSxkPXRoaXMuX3JlbmRlcmVyLkdMO3JldHVybiBiLndpZHRoIT09dGhpcy53aWR0aHx8Yi5oZWlnaHQhPT10aGlzLmhlaWdodD8oYz0hMCx0aGlzLndpZHRoPWIud2lkdGgsdGhpcy5oZWlnaHQ9Yi5oZWlnaHQsdGhpcy5pc1NyY1A1SW1hZ2U/YS5zZXRNb2RpZmllZCghMSk6KHRoaXMuaXNTcmNNZWRpYUVsZW1lbnR8fHRoaXMuaXNTcmNIVE1MRWxlbWVudCkmJmEuc2V0TW9kaWZpZWQoITApKTp0aGlzLmlzU3JjUDVJbWFnZT9hLmlzTW9kaWZpZWQoKSYmKGM9ITAsYS5zZXRNb2RpZmllZCghMSkpOnRoaXMuaXNTcmNNZWRpYUVsZW1lbnQ/YS5pc01vZGlmaWVkKCk/KGM9ITAsYS5zZXRNb2RpZmllZCghMSkpOmEubG9hZGVkbWV0YWRhdGEmJnRoaXMuX3ZpZGVvUHJldlVwZGF0ZVRpbWUhPT1hLnRpbWUoKSYmKHRoaXMuX3ZpZGVvUHJldlVwZGF0ZVRpbWU9YS50aW1lKCksYz0hMCk6dGhpcy5pc0ltYWdlRGF0YT9hLl9kaXJ0eSYmKGEuX2RpcnR5PSExLGM9ITApOmM9ITAsYyYmKHRoaXMuYmluZFRleHR1cmUoKSxkLnRleEltYWdlMkQodGhpcy5nbFRhcmdldCwwLHRoaXMuZ2xGb3JtYXQsdGhpcy5nbEZvcm1hdCxkLlVOU0lHTkVEX0JZVEUsYikpLGN9LGQuVGV4dHVyZS5wcm90b3R5cGUuYmluZFRleHR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuR0wuYmluZFRleHR1cmUodGhpcy5nbFRhcmdldCx0aGlzLmdsVGV4KSx0aGlzfSxkLlRleHR1cmUucHJvdG90eXBlLnVuYmluZFRleHR1cmU9ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5HTC5iaW5kVGV4dHVyZSh0aGlzLmdsVGFyZ2V0LG51bGwpfSxkLlRleHR1cmUucHJvdG90eXBlLnNldEludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9yZW5kZXJlci5HTDthPT09ZS5ORUFSRVNUP3RoaXMuZ2xNaW5GaWx0ZXI9Yy5ORUFSRVNUOnRoaXMuZ2xNaW5GaWx0ZXI9Yy5MSU5FQVIsYj09PWUuTkVBUkVTVD90aGlzLmdsTWFnRmlsdGVyPWMuTkVBUkVTVDp0aGlzLmdsTWFnRmlsdGVyPWMuTElORUFSLHRoaXMuYmluZFRleHR1cmUoKSxjLnRleFBhcmFtZXRlcmkoYy5URVhUVVJFXzJELGMuVEVYVFVSRV9NSU5fRklMVEVSLHRoaXMuZ2xNaW5GaWx0ZXIpLGMudGV4UGFyYW1ldGVyaShjLlRFWFRVUkVfMkQsYy5URVhUVVJFX01BR19GSUxURVIsdGhpcy5nbE1hZ0ZpbHRlciksdGhpcy51bmJpbmRUZXh0dXJlKCl9LGQuVGV4dHVyZS5wcm90b3R5cGUuc2V0V3JhcE1vZGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9yZW5kZXJlci5HTCxkPWZ1bmN0aW9uKGEpe3JldHVybiAwPT0oYSZhLTEpfSxmPWQodGhpcy53aWR0aCksZz1kKHRoaXMud2lkdGgpO2E9PT1lLlJFUEVBVD9mJiZnP3RoaXMuZ2xXcmFwUz1jLlJFUEVBVDooY29uc29sZS53YXJuKFwiWW91IHRyaWVkIHRvIHNldCB0aGUgd3JhcCBtb2RlIHRvIFJFUEVBVCBidXQgdGhlIHRleHR1cmUgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uIFNldHRpbmcgdG8gQ0xBTVAgaW5zdGVhZFwiKSx0aGlzLmdsV3JhcFM9Yy5DTEFNUF9UT19FREdFKTphPT09ZS5NSVJST1I/ZiYmZz90aGlzLmdsV3JhcFM9Yy5NSVJST1JFRF9SRVBFQVQ6KGNvbnNvbGUud2FybihcIllvdSB0cmllZCB0byBzZXQgdGhlIHdyYXAgbW9kZSB0byBNSVJST1IgYnV0IHRoZSB0ZXh0dXJlIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgdHdvLiBTZXR0aW5nIHRvIENMQU1QIGluc3RlYWRcIiksdGhpcy5nbFdyYXBTPWMuQ0xBTVBfVE9fRURHRSk6dGhpcy5nbFdyYXBTPWMuQ0xBTVBfVE9fRURHRSxiPT09ZS5SRVBFQVQ/ZiYmZz90aGlzLmdsV3JhcFQ9Yy5SRVBFQVQ6KGNvbnNvbGUud2FybihcIllvdSB0cmllZCB0byBzZXQgdGhlIHdyYXAgbW9kZSB0byBSRVBFQVQgYnV0IHRoZSB0ZXh0dXJlIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgdHdvLiBTZXR0aW5nIHRvIENMQU1QIGluc3RlYWRcIiksdGhpcy5nbFdyYXBUPWMuQ0xBTVBfVE9fRURHRSk6Yj09PWUuTUlSUk9SP2YmJmc/dGhpcy5nbFdyYXBUPWMuTUlSUk9SRURfUkVQRUFUOihjb25zb2xlLndhcm4oXCJZb3UgdHJpZWQgdG8gc2V0IHRoZSB3cmFwIG1vZGUgdG8gTUlSUk9SIGJ1dCB0aGUgdGV4dHVyZSBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIHR3by4gU2V0dGluZyB0byBDTEFNUCBpbnN0ZWFkXCIpLHRoaXMuZ2xXcmFwVD1jLkNMQU1QX1RPX0VER0UpOnRoaXMuZ2xXcmFwVD1jLkNMQU1QX1RPX0VER0UsdGhpcy5iaW5kVGV4dHVyZSgpLGMudGV4UGFyYW1ldGVyaShjLlRFWFRVUkVfMkQsYy5URVhUVVJFX1dSQVBfUyx0aGlzLmdsV3JhcFMpLGMudGV4UGFyYW1ldGVyaShjLlRFWFRVUkVfMkQsYy5URVhUVVJFX1dSQVBfVCx0aGlzLmdsV3JhcFQpLHRoaXMudW5iaW5kVGV4dHVyZSgpfSxiLmV4cG9ydHM9ZC5UZXh0dXJlfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw3NzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiKXt0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yix0aGlzLmluZm9zPVtdLHRoaXMuZmluZEltYWdlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMud2lkdGgqdGhpcy5oZWlnaHQ7aWYoYT5iKXRocm93IG5ldyBFcnJvcihcImZvbnQgaXMgdG9vIGNvbXBsZXggdG8gcmVuZGVyIGluIDNEXCIpO2Zvcih2YXIgYyxkLGU9dGhpcy5pbmZvcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIGY9dGhpcy5pbmZvc1tlXTtpZihmLmluZGV4K2E8Yil7Yz1mLGQ9Zi5pbWFnZURhdGE7YnJlYWt9fWlmKCFjKXt0cnl7ZD1uZXcgSW1hZ2VEYXRhKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfWNhdGNoKGEpe3ZhciBnPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiY2FudmFzXCIpWzBdLGg9IWc7Z3x8KGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxnLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChnKSk7dmFyIGk9Zy5nZXRDb250ZXh0KFwiMmRcIik7aSYmKGQ9aS5jcmVhdGVJbWFnZURhdGEodGhpcy53aWR0aCx0aGlzLmhlaWdodCkpLGgmJmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZyl9Yz17aW5kZXg6MCxpbWFnZURhdGE6ZH0sdGhpcy5pbmZvcy5wdXNoKGMpfXZhciBqPWMuaW5kZXg7cmV0dXJuIGMuaW5kZXgrPWEsZC5fZGlydHk9ITAse2ltYWdlRGF0YTpkLGluZGV4Omp9fX1mdW5jdGlvbiBlKGEsYixjLGQsZSl7dmFyIGY9YS5pbWFnZURhdGEsZz1mLmRhdGEsaD00KmEuaW5kZXgrKztnW2grK109YixnW2grK109YyxnW2grK109ZCxnW2grK109ZX12YXIgZj1hKFwiLi4vY29yZS9tYWluXCIpLGc9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuL3A1LlNoYWRlclwiKSxhKFwiLi9wNS5SZW5kZXJlckdMXCIpLGYuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2FwcGx5VGV4dFByb3BlcnRpZXM9ZnVuY3Rpb24oKXt9LGYuUmVuZGVyZXJHTC5wcm90b3R5cGUudGV4dFdpZHRoPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9pc09wZW5UeXBlKCk/dGhpcy5fdGV4dEZvbnQuX3RleHRXaWR0aChhLHRoaXMuX3RleHRTaXplKTowfTt2YXIgaD05LGk9aCxqPTY0LGs9NjQsbD02NCxtPTY0LG49NjQsbz02NCxwPU1hdGguc3FydCgzKSxxPWZ1bmN0aW9uKGEpe3RoaXMuZm9udD1hLHRoaXMuc3Ryb2tlSW1hZ2VJbmZvcz1uZXcgZChqLGspLHRoaXMuY29sRGltSW1hZ2VJbmZvcz1uZXcgZChsLG0pLHRoaXMucm93RGltSW1hZ2VJbmZvcz1uZXcgZChsLG0pLHRoaXMuY29sQ2VsbEltYWdlSW5mb3M9bmV3IGQobixvKSx0aGlzLnJvd0NlbGxJbWFnZUluZm9zPW5ldyBkKG4sbyksdGhpcy5nbHlwaEluZm9zPXt9LHRoaXMuZ2V0R2x5cGhJbmZvPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiLGMpe2Z1bmN0aW9uIGQoYSxiLGMpe2Zvcih2YXIgZD1hLmxlbmd0aDtkLS0gPjA7KXt2YXIgZT1hW2RdO2I+ZSYmKGI9ZSksYzxlJiYoYz1lKX1yZXR1cm57bWluOmIsbWF4OmN9fXZhciBlPXcubGVuZ3RoO3cucHVzaChjKTtmb3IodmFyIGY9ZChhLDEsMCksZz1NYXRoLm1heChNYXRoLmZsb29yKGYubWluKmgpLDApLGo9TWF0aC5taW4oTWF0aC5jZWlsKGYubWF4KmgpLGgpLGs9ZztrPGo7KytrKXlba10ucHVzaChlKTtmb3IodmFyIGw9ZChiLDEsMCksbT1NYXRoLm1heChNYXRoLmZsb29yKGwubWluKmkpLDApLG49TWF0aC5taW4oTWF0aC5jZWlsKGwubWF4KmkpLGkpLG89bTtvPG47KytvKXhbb10ucHVzaChlKX1mdW5jdGlvbiBjKGEsYixjKXtyZXR1cm4gYTxiP2I6YT5jP2M6YX1mdW5jdGlvbiBkKGEpe3JldHVybiBjKDI1NSphLDAsMjU1KX1mdW5jdGlvbiBnKGEsYixjLGQpe3RoaXMucDA9YSx0aGlzLmMwPWIsdGhpcy5jMT1jLHRoaXMucDE9ZCx0aGlzLnRvUXVhZHJhdGljPWZ1bmN0aW9uKCl7cmV0dXJue3g6dGhpcy5wMC54LHk6dGhpcy5wMC55LHgxOnRoaXMucDEueCx5MTp0aGlzLnAxLnksY3g6KDMqKHRoaXMuYzAueCt0aGlzLmMxLngpLSh0aGlzLnAwLngrdGhpcy5wMS54KSkvNCxjeTooMyoodGhpcy5jMC55K3RoaXMuYzEueSktKHRoaXMucDAueSt0aGlzLnAxLnkpKS80fX0sdGhpcy5xdWFkRXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gZi5WZWN0b3Iuc3ViKGYuVmVjdG9yLnN1Yih0aGlzLnAxLHRoaXMucDApLGYuVmVjdG9yLm11bHQoZi5WZWN0b3Iuc3ViKHRoaXMuYzEsdGhpcy5jMCksMykpLm1hZygpLzJ9LHRoaXMuc3BsaXQ9ZnVuY3Rpb24oYSl7dmFyIGI9Zi5WZWN0b3IubGVycCh0aGlzLnAwLHRoaXMuYzAsYSksYz1mLlZlY3Rvci5sZXJwKHRoaXMuYzAsdGhpcy5jMSxhKSxkPWYuVmVjdG9yLmxlcnAoYixjLGEpO3RoaXMuYzE9Zi5WZWN0b3IubGVycCh0aGlzLmMxLHRoaXMucDEsYSksdGhpcy5jMD1mLlZlY3Rvci5sZXJwKGMsdGhpcy5jMSxhKTt2YXIgZT1mLlZlY3Rvci5sZXJwKGQsdGhpcy5jMCxhKSxoPW5ldyBnKHRoaXMucDAsYixkLGUpO3JldHVybiB0aGlzLnAwPWUsaH0sdGhpcy5zcGxpdEluZmxlY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIGE9Zi5WZWN0b3Iuc3ViKHRoaXMuYzAsdGhpcy5wMCksYj1mLlZlY3Rvci5zdWIoZi5WZWN0b3Iuc3ViKHRoaXMuYzEsdGhpcy5jMCksYSksYz1mLlZlY3Rvci5zdWIoZi5WZWN0b3Iuc3ViKGYuVmVjdG9yLnN1Yih0aGlzLnAxLHRoaXMuYzEpLGEpLGYuVmVjdG9yLm11bHQoYiwyKSksZD1bXSxlPWIueCpjLnktYi55KmMueDtpZigwIT09ZSl7dmFyIGc9YS54KmMueS1hLnkqYy54LGg9YS54KmIueS1hLnkqYi54LGk9ZypnLTQqZSpoO2lmKGk+PTApe2U8MCYmKGU9LWUsZz0tZyxoPS1oKTt2YXIgaj1NYXRoLnNxcnQoaSksaz0oLWctaikvKDIqZSksbD0oLWcraikvKDIqZSk7az4wJiZrPDEmJihkLnB1c2godGhpcy5zcGxpdChrKSksbD0xLSgxLWwpLygxLWspKSxsPjAmJmw8MSYmZC5wdXNoKHRoaXMuc3BsaXQobCkpfX1yZXR1cm4gZC5wdXNoKHRoaXMpLGR9fWZ1bmN0aW9uIGooYSxiLGMsZCxlLGgsaSxqKXtmb3IodmFyIGs9bmV3IGcobmV3IGYuVmVjdG9yKGEsYiksbmV3IGYuVmVjdG9yKGMsZCksbmV3IGYuVmVjdG9yKGUsaCksbmV3IGYuVmVjdG9yKGksaikpLnNwbGl0SW5mbGVjdGlvbnMoKSxsPVtdLG09MzAvcCxuPTA7bjxrLmxlbmd0aDtuKyspe2Zvcih2YXIgbyxxPWtbbl0scj1bXTshKChvPW0vcS5xdWFkRXJyb3IoKSk+PS4xMjUpOyl7dmFyIHM9TWF0aC5wb3cobywxLzMpLHQ9cS5zcGxpdChzKSx1PXEuc3BsaXQoMS1zLygxLXMpKTtsLnB1c2godCksci5wdXNoKHEpLHE9dX1vPDEmJmwucHVzaChxLnNwbGl0KC41KSksbC5wdXNoKHEpLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGwsci5yZXZlcnNlKCkpfXJldHVybiBsfWZ1bmN0aW9uIGsoYSxjLGQsZSl7YihbYSxkXSxbYyxlXSx7eDphLHk6YyxjeDooYStkKS8yLGN5OihjK2UpLzJ9KX1mdW5jdGlvbiBsKGEsYixjLGQpe3JldHVybiBNYXRoLmFicyhjLWEpPDFlLTUmJk1hdGguYWJzKGQtYik8MWUtNX1mdW5jdGlvbiBtKGEsYixjKXtmb3IodmFyIGQ9YS5sZW5ndGgsZj1iLmZpbmRJbWFnZShkKSxnPWYuaW5kZXgsaD0wLGk9MDtpPGQ7KytpKWgrPWFbaV0ubGVuZ3RoO2Zvcih2YXIgaj1jLmZpbmRJbWFnZShoKSxrPTA7azxkOysrayl7dmFyIGw9YVtrXSxtPWwubGVuZ3RoLG49ai5pbmRleDtlKGYsbj4+NywxMjcmbixtPj43LDEyNyZtKTtmb3IodmFyIG89MDtvPG07KytvKXt2YXIgcD1sW29dK1M7ZShqLHA+PjcsMTI3JnAsMCwwKX19cmV0dXJue2NlbGxJbWFnZUluZm86aixkaW1PZmZzZXQ6ZyxkaW1JbWFnZUluZm86Zn19dmFyIG49dGhpcy5nbHlwaEluZm9zW2EuaW5kZXhdO2lmKG4pcmV0dXJuIG47dmFyIG89YS5nZXRCb3VuZGluZ0JveCgpLHE9by54MSxyPW8ueTEscz1vLngyLXEsdD1vLnkyLXIsdT1hLnBhdGguY29tbWFuZHM7aWYoMD09PXN8fDA9PT10fHwhdS5sZW5ndGgpcmV0dXJuIHRoaXMuZ2x5cGhJbmZvc1thLmluZGV4XT17fTt2YXIgdix3PVtdLHg9W10seT1bXTtmb3Iodj1oLTE7dj49MDstLXYpeS5wdXNoKFtdKTtmb3Iodj1pLTE7dj49MDstLXYpeC5wdXNoKFtdKTtmb3IodmFyIHosQSxCLEMsRD0wO0Q8dS5sZW5ndGg7KytEKXt2YXIgRT11W0RdLEY9KEUueC1xKS9zLEc9KEUueS1yKS90O2lmKCFsKHosQSxGLEcpKXtzd2l0Y2goRS50eXBlKXtjYXNlXCJNXCI6Qj1GLEM9RzticmVhaztjYXNlXCJMXCI6ayh6LEEsRixHKTticmVhaztjYXNlXCJRXCI6dmFyIEg9KEUueDEtcSkvcyxJPShFLnkxLXIpL3Q7YihbeixGLEhdLFtBLEcsSV0se3g6eix5OkEsY3g6SCxjeTpJfSk7YnJlYWs7Y2FzZVwiWlwiOmwoeixBLEIsQyk/dy5wdXNoKHt4OnoseTpBfSk6KGsoeixBLEIsQyksdy5wdXNoKHt4OkIseTpDfSkpO2JyZWFrO2Nhc2VcIkNcIjpmb3IodmFyIEo9KEUueDEtcSkvcyxLPShFLnkxLXIpL3QsTD0oRS54Mi1xKS9zLE09KEUueTItcikvdCxOPWooeixBLEosSyxMLE0sRixHKSxPPTA7TzxOLmxlbmd0aDtPKyspe3ZhciBQPU5bT10udG9RdWFkcmF0aWMoKTtiKFtQLngsUC54MSxQLmN4XSxbUC55LFAueTEsUC5jeV0sUCl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGNvbW1hbmQgdHlwZTogXCIrRS50eXBlKX16PUYsQT1HfX1mb3IodmFyIFE9dy5sZW5ndGgsUj10aGlzLnN0cm9rZUltYWdlSW5mb3MuZmluZEltYWdlKFEpLFM9Ui5pbmRleCxUPTA7VDxROysrVCl7dmFyIFU9d1tUXTtlKFIsZChVLngpLGQoVS55KSxkKFUuY3gpLGQoVS5jeSkpfXJldHVybiBuPXRoaXMuZ2x5cGhJbmZvc1thLmluZGV4XT17Z2x5cGg6YSx1R2x5cGhSZWN0OltvLngxLC1vLnkxLG8ueDIsLW8ueTJdLHN0cm9rZUltYWdlSW5mbzpSLHN0cm9rZXM6dyxjb2xJbmZvOm0oeSx0aGlzLmNvbERpbUltYWdlSW5mb3MsdGhpcy5jb2xDZWxsSW1hZ2VJbmZvcykscm93SW5mbzptKHgsdGhpcy5yb3dEaW1JbWFnZUluZm9zLHRoaXMucm93Q2VsbEltYWdlSW5mb3MpfSxuLnVHcmlkT2Zmc2V0PVtuLmNvbEluZm8uZGltT2Zmc2V0LG4ucm93SW5mby5kaW1PZmZzZXRdLG59fTtmLlJlbmRlcmVyR0wucHJvdG90eXBlLl9yZW5kZXJUZXh0PWZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoIShkPj1lKSYmdGhpcy5fZG9GaWxsKXtpZighdGhpcy5faXNPcGVuVHlwZSgpKXJldHVybiBjb25zb2xlLmxvZyhcIldFQkdMOiBvbmx5IG9wZW50eXBlIGZvbnRzIGFyZSBzdXBwb3J0ZWRcIiksYTthLnB1c2goKTt2YXIgcD10aGlzLmN1ckZpbGxTaGFkZXIscj10aGlzLl9kb1N0cm9rZSxzPXRoaXMuZHJhd01vZGU7dGhpcy5jdXJGaWxsU2hhZGVyPW51bGwsdGhpcy5fZG9TdHJva2U9ITEsdGhpcy5kcmF3TW9kZT1nLlRFWFRVUkU7dmFyIHQ9dGhpcy5fdGV4dEZvbnQuZm9udCx1PXRoaXMuX3RleHRGb250Ll9mb250SW5mbzt1fHwodT10aGlzLl90ZXh0Rm9udC5fZm9udEluZm89bmV3IHEodCkpO3ZhciB2PXRoaXMuX3RleHRGb250Ll9oYW5kbGVBbGlnbm1lbnQodGhpcyxiLGMsZCksdz10aGlzLl90ZXh0U2l6ZSx4PXcvdC51bml0c1BlckVtO3RoaXMudHJhbnNsYXRlKHYueCx2LnksMCksdGhpcy5zY2FsZSh4LHgsMSk7dmFyIHk9dGhpcy5HTCx6PSF0aGlzLl9kZWZhdWx0Rm9udFNoYWRlcixBPXRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRGb250U2hhZGVyKCkpO3omJihBLnNldFVuaWZvcm0oXCJ1R3JpZEltYWdlU2l6ZVwiLFtsLG1dKSxBLnNldFVuaWZvcm0oXCJ1Q2VsbHNJbWFnZVNpemVcIixbbixvXSksQS5zZXRVbmlmb3JtKFwidVN0cm9rZUltYWdlU2l6ZVwiLFtqLGtdKSxBLnNldFVuaWZvcm0oXCJ1R3JpZFNpemVcIixbaCxpXSkpLHRoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1ckZpbGxDb2xvcik7dmFyIEI9dGhpcy5nSGFzaC5nbHlwaDtpZighQil7dmFyIEM9dGhpcy5fdGV4dEdlb209bmV3IGYuR2VvbWV0cnkoMSwxLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTw9MTthKyspZm9yKHZhciBiPTA7Yjw9MTtiKyspdGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBmLlZlY3RvcihiLGEsMCkpLHRoaXMudXZzLnB1c2goYixhKX0pO0MuY29tcHV0ZUZhY2VzKCkuY29tcHV0ZU5vcm1hbHMoKSxCPXRoaXMuY3JlYXRlQnVmZmVycyhcImdseXBoXCIsQyl9dGhpcy5fYmluZEJ1ZmZlcihCLnZlcnRleEJ1ZmZlcix5LkFSUkFZX0JVRkZFUiksQS5lbmFibGVBdHRyaWIoQS5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLHkuRkxPQVQsITEsMCwwKSx0aGlzLl9iaW5kQnVmZmVyKEIuaW5kZXhCdWZmZXIseS5FTEVNRU5UX0FSUkFZX0JVRkZFUiksdGhpcy5fYmluZEJ1ZmZlcihCLnV2QnVmZmVyLHkuQVJSQVlfQlVGRkVSKSxBLmVuYWJsZUF0dHJpYihBLmF0dHJpYnV0ZXMuYVRleENvb3JkLmxvY2F0aW9uLDIseS5GTE9BVCwhMSwwLDApLEEuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5jdXJGaWxsQ29sb3IpO3RyeXtmb3IodmFyIEQ9MCxFPW51bGwsRj0hMSxHPXQuc3RyaW5nVG9HbHlwaHMoYiksSD0wO0g8Ry5sZW5ndGg7KytIKXt2YXIgST1HW0hdO0UmJihEKz10LmdldEtlcm5pbmdWYWx1ZShFLEkpKTt2YXIgSj11LmdldEdseXBoSW5mbyhJKTtpZihKLnVHbHlwaFJlY3Qpe3ZhciBLPUoucm93SW5mbyxMPUouY29sSW5mbztBLnNldFVuaWZvcm0oXCJ1U2FtcGxlclN0cm9rZXNcIixKLnN0cm9rZUltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVTYW1wbGVyUm93U3Ryb2tlc1wiLEsuY2VsbEltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVTYW1wbGVyUm93c1wiLEsuZGltSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidVNhbXBsZXJDb2xTdHJva2VzXCIsTC5jZWxsSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidVNhbXBsZXJDb2xzXCIsTC5kaW1JbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1R3JpZE9mZnNldFwiLEoudUdyaWRPZmZzZXQpLEEuc2V0VW5pZm9ybShcInVHbHlwaFJlY3RcIixKLnVHbHlwaFJlY3QpLEEuc2V0VW5pZm9ybShcInVHbHlwaE9mZnNldFwiLEQpLEY/QS5iaW5kVGV4dHVyZXMoKTooRj0hMCxBLmJpbmRTaGFkZXIoKSkseS5kcmF3RWxlbWVudHMoeS5UUklBTkdMRVMsNix0aGlzLkdMLlVOU0lHTkVEX1NIT1JULDApfUQrPUkuYWR2YW5jZVdpZHRoLEU9SX19ZmluYWxseXtBLnVuYmluZFNoYWRlcigpLHRoaXMuY3VyRmlsbFNoYWRlcj1wLHRoaXMuX2RvU3Ryb2tlPXIsdGhpcy5kcmF3TW9kZT1zLGEucG9wKCl9cmV0dXJuIHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCxhfX19LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vcDUuUmVuZGVyZXJHTFwiOjc0LFwiLi9wNS5TaGFkZXJcIjo3NX1dfSx7fSxbMTNdKSgxMyl9KTsiLCIvLyBjcmVhdGUgbWFpbiBnbG9iYWwgb2JqZWN0XG52YXIgdHNuZWpzID0gdHNuZWpzIHx8IHsgUkVWSVNJT046ICdBTFBIQScgfTtcblxuKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICAvLyB1dGlsaXR5IGZ1bmN0aW9uXG4gIHZhciBhc3NlcnQgPSBmdW5jdGlvbihjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgICBpZiAoIWNvbmRpdGlvbikgeyB0aHJvdyBtZXNzYWdlIHx8IFwiQXNzZXJ0aW9uIGZhaWxlZFwiOyB9XG4gIH1cblxuICAvLyBzeW50YXggc3VnYXJcbiAgdmFyIGdldG9wdCA9IGZ1bmN0aW9uKG9wdCwgZmllbGQsIGRlZmF1bHR2YWwpIHtcbiAgICBpZihvcHQuaGFzT3duUHJvcGVydHkoZmllbGQpKSB7XG4gICAgICByZXR1cm4gb3B0W2ZpZWxkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRlZmF1bHR2YWw7XG4gICAgfVxuICB9XG5cbiAgLy8gcmV0dXJuIDAgbWVhbiB1bml0IHN0YW5kYXJkIGRldmlhdGlvbiByYW5kb20gbnVtYmVyXG4gIHZhciByZXR1cm5fdiA9IGZhbHNlO1xuICB2YXIgdl92YWwgPSAwLjA7XG4gIHZhciBnYXVzc1JhbmRvbSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmKHJldHVybl92KSB7IFxuICAgICAgcmV0dXJuX3YgPSBmYWxzZTtcbiAgICAgIHJldHVybiB2X3ZhbDsgXG4gICAgfVxuICAgIHZhciB1ID0gMipNYXRoLnJhbmRvbSgpLTE7XG4gICAgdmFyIHYgPSAyKk1hdGgucmFuZG9tKCktMTtcbiAgICB2YXIgciA9IHUqdSArIHYqdjtcbiAgICBpZihyID09IDAgfHwgciA+IDEpIHJldHVybiBnYXVzc1JhbmRvbSgpO1xuICAgIHZhciBjID0gTWF0aC5zcXJ0KC0yKk1hdGgubG9nKHIpL3IpO1xuICAgIHZfdmFsID0gdipjOyAvLyBjYWNoZSB0aGlzIGZvciBuZXh0IGZ1bmN0aW9uIGNhbGwgZm9yIGVmZmljaWVuY3lcbiAgICByZXR1cm5fdiA9IHRydWU7XG4gICAgcmV0dXJuIHUqYztcbiAgfVxuXG4gIC8vIHJldHVybiByYW5kb20gbm9ybWFsIG51bWJlclxuICB2YXIgcmFuZG4gPSBmdW5jdGlvbihtdSwgc3RkKXsgcmV0dXJuIG11K2dhdXNzUmFuZG9tKCkqc3RkOyB9XG5cbiAgLy8gdXRpbGl0aXR5IHRoYXQgY3JlYXRlcyBjb250aWd1b3VzIHZlY3RvciBvZiB6ZXJvcyBvZiBzaXplIG5cbiAgdmFyIHplcm9zID0gZnVuY3Rpb24obikge1xuICAgIGlmKHR5cGVvZihuKT09PSd1bmRlZmluZWQnIHx8IGlzTmFOKG4pKSB7IHJldHVybiBbXTsgfVxuICAgIGlmKHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGxhY2tpbmcgYnJvd3NlciBzdXBwb3J0XG4gICAgICB2YXIgYXJyID0gbmV3IEFycmF5KG4pO1xuICAgICAgZm9yKHZhciBpPTA7aTxuO2krKykgeyBhcnJbaV09IDA7IH1cbiAgICAgIHJldHVybiBhcnI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRmxvYXQ2NEFycmF5KG4pOyAvLyB0eXBlZCBhcnJheXMgYXJlIGZhc3RlclxuICAgIH1cbiAgfVxuXG4gIC8vIHV0aWxpdHkgdGhhdCByZXR1cm5zIDJkIGFycmF5IGZpbGxlZCB3aXRoIHJhbmRvbSBudW1iZXJzXG4gIC8vIG9yIHdpdGggdmFsdWUgcywgaWYgcHJvdmlkZWRcbiAgdmFyIHJhbmRuMmQgPSBmdW5jdGlvbihuLGQscykge1xuICAgIHZhciB1c2VzID0gdHlwZW9mIHMgIT09ICd1bmRlZmluZWQnO1xuICAgIHZhciB4ID0gW107XG4gICAgZm9yKHZhciBpPTA7aTxuO2krKykge1xuICAgICAgdmFyIHhoZXJlID0gW107XG4gICAgICBmb3IodmFyIGo9MDtqPGQ7aisrKSB7IFxuICAgICAgICBpZih1c2VzKSB7XG4gICAgICAgICAgeGhlcmUucHVzaChzKTsgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeGhlcmUucHVzaChyYW5kbigwLjAsIDFlLTQpKTsgXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHgucHVzaCh4aGVyZSk7XG4gICAgfVxuICAgIHJldHVybiB4O1xuICB9XG5cbiAgLy8gY29tcHV0ZSBMMiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWN0b3JzXG4gIHZhciBMMiA9IGZ1bmN0aW9uKHgxLCB4Mikge1xuICAgIHZhciBEID0geDEubGVuZ3RoO1xuICAgIHZhciBkID0gMDtcbiAgICBmb3IodmFyIGk9MDtpPEQ7aSsrKSB7IFxuICAgICAgdmFyIHgxaSA9IHgxW2ldO1xuICAgICAgdmFyIHgyaSA9IHgyW2ldO1xuICAgICAgZCArPSAoeDFpLXgyaSkqKHgxaS14MmkpO1xuICAgIH1cbiAgICByZXR1cm4gZDtcbiAgfVxuXG4gIC8vIGNvbXB1dGUgcGFpcndpc2UgZGlzdGFuY2UgaW4gYWxsIHZlY3RvcnMgaW4gWFxuICB2YXIgeHRvZCA9IGZ1bmN0aW9uKFgpIHtcbiAgICB2YXIgTiA9IFgubGVuZ3RoO1xuICAgIHZhciBkaXN0ID0gemVyb3MoTiAqIE4pOyAvLyBhbGxvY2F0ZSBjb250aWd1b3VzIGFycmF5XG4gICAgZm9yKHZhciBpPTA7aTxOO2krKykge1xuICAgICAgZm9yKHZhciBqPWkrMTtqPE47aisrKSB7XG4gICAgICAgIHZhciBkID0gTDIoWFtpXSwgWFtqXSk7XG4gICAgICAgIGRpc3RbaSpOK2pdID0gZDtcbiAgICAgICAgZGlzdFtqKk4raV0gPSBkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlzdDtcbiAgfVxuXG4gIC8vIGNvbXB1dGUgKHBfe2l8an0gKyBwX3tqfGl9KS8oMm4pXG4gIHZhciBkMnAgPSBmdW5jdGlvbihELCBwZXJwbGV4aXR5LCB0b2wpIHtcbiAgICB2YXIgTmYgPSBNYXRoLnNxcnQoRC5sZW5ndGgpOyAvLyB0aGlzIGJldHRlciBiZSBhbiBpbnRlZ2VyXG4gICAgdmFyIE4gPSBNYXRoLmZsb29yKE5mKTtcbiAgICBhc3NlcnQoTiA9PT0gTmYsIFwiRCBzaG91bGQgaGF2ZSBzcXVhcmUgbnVtYmVyIG9mIGVsZW1lbnRzLlwiKTtcbiAgICB2YXIgSHRhcmdldCA9IE1hdGgubG9nKHBlcnBsZXhpdHkpOyAvLyB0YXJnZXQgZW50cm9weSBvZiBkaXN0cmlidXRpb25cbiAgICB2YXIgUCA9IHplcm9zKE4gKiBOKTsgLy8gdGVtcG9yYXJ5IHByb2JhYmlsaXR5IG1hdHJpeFxuXG4gICAgdmFyIHByb3cgPSB6ZXJvcyhOKTsgLy8gYSB0ZW1wb3Jhcnkgc3RvcmFnZSBjb21wYXJ0bWVudFxuICAgIGZvcih2YXIgaT0wO2k8TjtpKyspIHtcbiAgICAgIHZhciBiZXRhbWluID0gLUluZmluaXR5O1xuICAgICAgdmFyIGJldGFtYXggPSBJbmZpbml0eTtcbiAgICAgIHZhciBiZXRhID0gMTsgLy8gaW5pdGlhbCB2YWx1ZSBvZiBwcmVjaXNpb25cbiAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICB2YXIgbWF4dHJpZXMgPSA1MDtcblxuICAgICAgLy8gcGVyZm9ybSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgYSBzdWl0YWJsZSBwcmVjaXNpb24gYmV0YVxuICAgICAgLy8gc28gdGhhdCB0aGUgZW50cm9weSBvZiB0aGUgZGlzdHJpYnV0aW9uIGlzIGFwcHJvcHJpYXRlXG4gICAgICB2YXIgbnVtID0gMDtcbiAgICAgIHdoaWxlKCFkb25lKSB7XG4gICAgICAgIC8vZGVidWdnZXI7XG5cbiAgICAgICAgLy8gY29tcHV0ZSBlbnRyb3B5IGFuZCBrZXJuZWwgcm93IHdpdGggYmV0YSBwcmVjaXNpb25cbiAgICAgICAgdmFyIHBzdW0gPSAwLjA7XG4gICAgICAgIGZvcih2YXIgaj0wO2o8TjtqKyspIHtcbiAgICAgICAgICB2YXIgcGogPSBNYXRoLmV4cCgtIERbaSpOK2pdICogYmV0YSk7XG4gICAgICAgICAgaWYoaT09PWopIHsgcGogPSAwOyB9IC8vIHdlIGRvbnQgY2FyZSBhYm91dCBkaWFnb25hbHNcbiAgICAgICAgICBwcm93W2pdID0gcGo7XG4gICAgICAgICAgcHN1bSArPSBwajtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3JtYWxpemUgcCBhbmQgY29tcHV0ZSBlbnRyb3B5XG4gICAgICAgIHZhciBIaGVyZSA9IDAuMDtcbiAgICAgICAgZm9yKHZhciBqPTA7ajxOO2orKykge1xuICAgICAgICAgIHZhciBwaiA9IHByb3dbal0gLyBwc3VtO1xuICAgICAgICAgIHByb3dbal0gPSBwajtcbiAgICAgICAgICBpZihwaiA+IDFlLTcpIEhoZXJlIC09IHBqICogTWF0aC5sb2cocGopO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRqdXN0IGJldGEgYmFzZWQgb24gcmVzdWx0XG4gICAgICAgIGlmKEhoZXJlID4gSHRhcmdldCkge1xuICAgICAgICAgIC8vIGVudHJvcHkgd2FzIHRvbyBoaWdoIChkaXN0cmlidXRpb24gdG9vIGRpZmZ1c2UpXG4gICAgICAgICAgLy8gc28gd2UgbmVlZCB0byBpbmNyZWFzZSB0aGUgcHJlY2lzaW9uIGZvciBtb3JlIHBlYWt5IGRpc3RyaWJ1dGlvblxuICAgICAgICAgIGJldGFtaW4gPSBiZXRhOyAvLyBtb3ZlIHVwIHRoZSBib3VuZHNcbiAgICAgICAgICBpZihiZXRhbWF4ID09PSBJbmZpbml0eSkgeyBiZXRhID0gYmV0YSAqIDI7IH1cbiAgICAgICAgICBlbHNlIHsgYmV0YSA9IChiZXRhICsgYmV0YW1heCkgLyAyOyB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjb252ZXJzZSBjYXNlLiBtYWtlIGRpc3RydWJ0aW9uIGxlc3MgcGVha3lcbiAgICAgICAgICBiZXRhbWF4ID0gYmV0YTtcbiAgICAgICAgICBpZihiZXRhbWluID09PSAtSW5maW5pdHkpIHsgYmV0YSA9IGJldGEgLyAyOyB9XG4gICAgICAgICAgZWxzZSB7IGJldGEgPSAoYmV0YSArIGJldGFtaW4pIC8gMjsgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3RvcHBpbmcgY29uZGl0aW9uczogdG9vIG1hbnkgdHJpZXMgb3IgZ290IGEgZ29vZCBwcmVjaXNpb25cbiAgICAgICAgbnVtKys7XG4gICAgICAgIGlmKE1hdGguYWJzKEhoZXJlIC0gSHRhcmdldCkgPCB0b2wpIHsgZG9uZSA9IHRydWU7IH1cbiAgICAgICAgaWYobnVtID49IG1heHRyaWVzKSB7IGRvbmUgPSB0cnVlOyB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKCdkYXRhIHBvaW50ICcgKyBpICsgJyBnZXRzIHByZWNpc2lvbiAnICsgYmV0YSArICcgYWZ0ZXIgJyArIG51bSArICcgYmluYXJ5IHNlYXJjaCBzdGVwcy4nKTtcbiAgICAgIC8vIGNvcHkgb3ZlciB0aGUgZmluYWwgcHJvdyB0byBQIGF0IHJvdyBpXG4gICAgICBmb3IodmFyIGo9MDtqPE47aisrKSB7IFBbaSpOK2pdID0gcHJvd1tqXTsgfVxuXG4gICAgfSAvLyBlbmQgbG9vcCBvdmVyIGV4YW1wbGVzIGlcblxuICAgIC8vIHN5bW1ldHJpemUgUCBhbmQgbm9ybWFsaXplIGl0IHRvIHN1bSB0byAxIG92ZXIgYWxsIGlqXG4gICAgdmFyIFBvdXQgPSB6ZXJvcyhOICogTik7XG4gICAgdmFyIE4yID0gTioyO1xuICAgIGZvcih2YXIgaT0wO2k8TjtpKyspIHtcbiAgICAgIGZvcih2YXIgaj0wO2o8TjtqKyspIHtcbiAgICAgICAgUG91dFtpKk4ral0gPSBNYXRoLm1heCgoUFtpKk4ral0gKyBQW2oqTitpXSkvTjIsIDFlLTEwMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFBvdXQ7XG4gIH1cblxuICAvLyBoZWxwZXIgZnVuY3Rpb25cbiAgZnVuY3Rpb24gc2lnbih4KSB7IHJldHVybiB4ID4gMCA/IDEgOiB4IDwgMCA/IC0xIDogMDsgfVxuXG4gIHZhciB0U05FID0gZnVuY3Rpb24ob3B0KSB7XG4gICAgdmFyIG9wdCA9IG9wdCB8fCB7fTtcbiAgICB0aGlzLnBlcnBsZXhpdHkgPSBnZXRvcHQob3B0LCBcInBlcnBsZXhpdHlcIiwgMzApOyAvLyBlZmZlY3RpdmUgbnVtYmVyIG9mIG5lYXJlc3QgbmVpZ2hib3JzXG4gICAgdGhpcy5kaW0gPSBnZXRvcHQob3B0LCBcImRpbVwiLCAyKTsgLy8gYnkgZGVmYXVsdCAyLUQgdFNORVxuICAgIHRoaXMuZXBzaWxvbiA9IGdldG9wdChvcHQsIFwiZXBzaWxvblwiLCAxMCk7IC8vIGxlYXJuaW5nIHJhdGVcblxuICAgIHRoaXMuaXRlciA9IDA7XG4gIH1cblxuICB0U05FLnByb3RvdHlwZSA9IHtcblxuICAgIC8vIHRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzZXQgb2YgaGlnaC1kaW1lbnNpb25hbCBwb2ludHNcbiAgICAvLyBhbmQgY3JlYXRlcyBtYXRyaXggUCBmcm9tIHRoZW0gdXNpbmcgZ2F1c3NpYW4ga2VybmVsXG4gICAgaW5pdERhdGFSYXc6IGZ1bmN0aW9uKFgpIHtcbiAgICAgIHZhciBOID0gWC5sZW5ndGg7XG4gICAgICB2YXIgRCA9IFhbMF0ubGVuZ3RoO1xuICAgICAgYXNzZXJ0KE4gPiAwLCBcIiBYIGlzIGVtcHR5PyBZb3UgbXVzdCBoYXZlIHNvbWUgZGF0YSFcIik7XG4gICAgICBhc3NlcnQoRCA+IDAsIFwiIFhbMF0gaXMgZW1wdHk/IFdoZXJlIGlzIHRoZSBkYXRhP1wiKTtcbiAgICAgIHZhciBkaXN0cyA9IHh0b2QoWCk7IC8vIGNvbnZlcnQgWCB0byBkaXN0YW5jZXMgdXNpbmcgZ2F1c3NpYW4ga2VybmVsXG4gICAgICB0aGlzLlAgPSBkMnAoZGlzdHMsIHRoaXMucGVycGxleGl0eSwgMWUtNCk7IC8vIGF0dGFjaCB0byBvYmplY3RcbiAgICAgIHRoaXMuTiA9IE47IC8vIGJhY2sgdXAgdGhlIHNpemUgb2YgdGhlIGRhdGFzZXRcbiAgICAgIHRoaXMuaW5pdFNvbHV0aW9uKCk7IC8vIHJlZnJlc2ggdGhpc1xuICAgIH0sXG5cbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRha2VzIGEgZ2l2ZW4gZGlzdGFuY2UgbWF0cml4IGFuZCBjcmVhdGVzXG4gICAgLy8gbWF0cml4IFAgZnJvbSB0aGVtLlxuICAgIC8vIEQgaXMgYXNzdW1lZCB0byBiZSBwcm92aWRlZCBhcyBhIGxpc3Qgb2YgbGlzdHMsIGFuZCBzaG91bGQgYmUgc3ltbWV0cmljXG4gICAgaW5pdERhdGFEaXN0OiBmdW5jdGlvbihEKSB7XG4gICAgICB2YXIgTiA9IEQubGVuZ3RoO1xuICAgICAgYXNzZXJ0KE4gPiAwLCBcIiBYIGlzIGVtcHR5PyBZb3UgbXVzdCBoYXZlIHNvbWUgZGF0YSFcIik7XG4gICAgICAvLyBjb252ZXJ0IEQgdG8gYSAoZmFzdCkgdHlwZWQgYXJyYXkgdmVyc2lvblxuICAgICAgdmFyIGRpc3RzID0gemVyb3MoTiAqIE4pOyAvLyBhbGxvY2F0ZSBjb250aWd1b3VzIGFycmF5XG4gICAgICBmb3IodmFyIGk9MDtpPE47aSsrKSB7XG4gICAgICAgIGZvcih2YXIgaj1pKzE7ajxOO2orKykge1xuICAgICAgICAgIHZhciBkID0gRFtpXVtqXTtcbiAgICAgICAgICBkaXN0c1tpKk4ral0gPSBkO1xuICAgICAgICAgIGRpc3RzW2oqTitpXSA9IGQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuUCA9IGQycChkaXN0cywgdGhpcy5wZXJwbGV4aXR5LCAxZS00KTtcbiAgICAgIHRoaXMuTiA9IE47XG4gICAgICB0aGlzLmluaXRTb2x1dGlvbigpOyAvLyByZWZyZXNoIHRoaXNcbiAgICB9LFxuXG4gICAgLy8gKHJlKWluaXRpYWxpemVzIHRoZSBzb2x1dGlvbiB0byByYW5kb21cbiAgICBpbml0U29sdXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgLy8gZ2VuZXJhdGUgcmFuZG9tIHNvbHV0aW9uIHRvIHQtU05FXG4gICAgICB0aGlzLlkgPSByYW5kbjJkKHRoaXMuTiwgdGhpcy5kaW0pOyAvLyB0aGUgc29sdXRpb25cbiAgICAgIHRoaXMuZ2FpbnMgPSByYW5kbjJkKHRoaXMuTiwgdGhpcy5kaW0sIDEuMCk7IC8vIHN0ZXAgZ2FpbnMgdG8gYWNjZWxlcmF0ZSBwcm9ncmVzcyBpbiB1bmNoYW5naW5nIGRpcmVjdGlvbnNcbiAgICAgIHRoaXMueXN0ZXAgPSByYW5kbjJkKHRoaXMuTiwgdGhpcy5kaW0sIDAuMCk7IC8vIG1vbWVudHVtIGFjY3VtdWxhdG9yXG4gICAgICB0aGlzLml0ZXIgPSAwO1xuICAgIH0sXG5cbiAgICAvLyByZXR1cm4gcG9pbnRlciB0byBjdXJyZW50IHNvbHV0aW9uXG4gICAgZ2V0U29sdXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuWTtcbiAgICB9LFxuXG4gICAgLy8gcGVyZm9ybSBhIHNpbmdsZSBzdGVwIG9mIG9wdGltaXphdGlvbiB0byBpbXByb3ZlIHRoZSBlbWJlZGRpbmdcbiAgICBzdGVwOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuaXRlciArPSAxO1xuICAgICAgdmFyIE4gPSB0aGlzLk47XG5cbiAgICAgIHZhciBjZyA9IHRoaXMuY29zdEdyYWQodGhpcy5ZKTsgLy8gZXZhbHVhdGUgZ3JhZGllbnRcbiAgICAgIHZhciBjb3N0ID0gY2cuY29zdDtcbiAgICAgIHZhciBncmFkID0gY2cuZ3JhZDtcblxuICAgICAgLy8gcGVyZm9ybSBncmFkaWVudCBzdGVwXG4gICAgICB2YXIgeW1lYW4gPSB6ZXJvcyh0aGlzLmRpbSk7XG4gICAgICBmb3IodmFyIGk9MDtpPE47aSsrKSB7XG4gICAgICAgIGZvcih2YXIgZD0wO2Q8dGhpcy5kaW07ZCsrKSB7XG4gICAgICAgICAgdmFyIGdpZCA9IGdyYWRbaV1bZF07XG4gICAgICAgICAgdmFyIHNpZCA9IHRoaXMueXN0ZXBbaV1bZF07XG4gICAgICAgICAgdmFyIGdhaW5pZCA9IHRoaXMuZ2FpbnNbaV1bZF07XG5cbiAgICAgICAgICAvLyBjb21wdXRlIGdhaW4gdXBkYXRlXG4gICAgICAgICAgdmFyIG5ld2dhaW4gPSBzaWduKGdpZCkgPT09IHNpZ24oc2lkKSA/IGdhaW5pZCAqIDAuOCA6IGdhaW5pZCArIDAuMjtcbiAgICAgICAgICBpZihnYWluaWQgPCAwLjAxKSBnYWluaWQgPSAwLjAxOyAvLyBjbGFtcFxuICAgICAgICAgIHRoaXMuZ2FpbnNbaV1bZF0gPSBuZXdnYWluOyAvLyBzdG9yZSBmb3IgbmV4dCB0dXJuXG5cbiAgICAgICAgICAvLyBjb21wdXRlIG1vbWVudHVtIHN0ZXAgZGlyZWN0aW9uXG4gICAgICAgICAgdmFyIG1vbXZhbCA9IHRoaXMuaXRlciA8IDI1MCA/IDAuNSA6IDAuODtcbiAgICAgICAgICB2YXIgbmV3c2lkID0gbW9tdmFsICogc2lkIC0gdGhpcy5lcHNpbG9uICogbmV3Z2FpbiAqIGdyYWRbaV1bZF07XG4gICAgICAgICAgdGhpcy55c3RlcFtpXVtkXSA9IG5ld3NpZDsgLy8gcmVtZW1iZXIgdGhlIHN0ZXAgd2UgdG9va1xuXG4gICAgICAgICAgLy8gc3RlcCFcbiAgICAgICAgICB0aGlzLllbaV1bZF0gKz0gbmV3c2lkOyBcblxuICAgICAgICAgIHltZWFuW2RdICs9IHRoaXMuWVtpXVtkXTsgLy8gYWNjdW11bGF0ZSBtZWFuIHNvIHRoYXQgd2UgY2FuIGNlbnRlciBsYXRlclxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHJlcHJvamVjdCBZIHRvIGJlIHplcm8gbWVhblxuICAgICAgZm9yKHZhciBpPTA7aTxOO2krKykge1xuICAgICAgICBmb3IodmFyIGQ9MDtkPHRoaXMuZGltO2QrKykge1xuICAgICAgICAgIHRoaXMuWVtpXVtkXSAtPSB5bWVhbltkXS9OO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vaWYodGhpcy5pdGVyJTEwMD09PTApIGNvbnNvbGUubG9nKCdpdGVyICcgKyB0aGlzLml0ZXIgKyAnLCBjb3N0OiAnICsgY29zdCk7XG4gICAgICByZXR1cm4gY29zdDsgLy8gcmV0dXJuIGN1cnJlbnQgY29zdFxuICAgIH0sXG5cbiAgICAvLyBmb3IgZGVidWdnaW5nOiBncmFkaWVudCBjaGVja1xuICAgIGRlYnVnR3JhZDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgTiA9IHRoaXMuTjtcblxuICAgICAgdmFyIGNnID0gdGhpcy5jb3N0R3JhZCh0aGlzLlkpOyAvLyBldmFsdWF0ZSBncmFkaWVudFxuICAgICAgdmFyIGNvc3QgPSBjZy5jb3N0O1xuICAgICAgdmFyIGdyYWQgPSBjZy5ncmFkO1xuXG4gICAgICB2YXIgZSA9IDFlLTU7XG4gICAgICBmb3IodmFyIGk9MDtpPE47aSsrKSB7XG4gICAgICAgIGZvcih2YXIgZD0wO2Q8dGhpcy5kaW07ZCsrKSB7XG4gICAgICAgICAgdmFyIHlvbGQgPSB0aGlzLllbaV1bZF07XG5cbiAgICAgICAgICB0aGlzLllbaV1bZF0gPSB5b2xkICsgZTtcbiAgICAgICAgICB2YXIgY2cwID0gdGhpcy5jb3N0R3JhZCh0aGlzLlkpO1xuXG4gICAgICAgICAgdGhpcy5ZW2ldW2RdID0geW9sZCAtIGU7XG4gICAgICAgICAgdmFyIGNnMSA9IHRoaXMuY29zdEdyYWQodGhpcy5ZKTtcbiAgICAgICAgICBcbiAgICAgICAgICB2YXIgYW5hbHl0aWMgPSBncmFkW2ldW2RdO1xuICAgICAgICAgIHZhciBudW1lcmljYWwgPSAoY2cwLmNvc3QgLSBjZzEuY29zdCkgLyAoIDIgKiBlICk7XG4gICAgICAgICAgY29uc29sZS5sb2coaSArICcsJyArIGQgKyAnOiBncmFkY2hlY2sgYW5hbHl0aWM6ICcgKyBhbmFseXRpYyArICcgdnMuIG51bWVyaWNhbDogJyArIG51bWVyaWNhbCk7XG5cbiAgICAgICAgICB0aGlzLllbaV1bZF0gPSB5b2xkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIHJldHVybiBjb3N0IGFuZCBncmFkaWVudCwgZ2l2ZW4gYW4gYXJyYW5nZW1lbnRcbiAgICBjb3N0R3JhZDogZnVuY3Rpb24oWSkge1xuICAgICAgdmFyIE4gPSB0aGlzLk47XG4gICAgICB2YXIgZGltID0gdGhpcy5kaW07IC8vIGRpbSBvZiBvdXRwdXQgc3BhY2VcbiAgICAgIHZhciBQID0gdGhpcy5QO1xuXG4gICAgICB2YXIgcG11bCA9IHRoaXMuaXRlciA8IDEwMCA/IDQgOiAxOyAvLyB0cmljayB0aGF0IGhlbHBzIHdpdGggbG9jYWwgb3B0aW1hXG5cbiAgICAgIC8vIGNvbXB1dGUgY3VycmVudCBRIGRpc3RyaWJ1dGlvbiwgdW5ub3JtYWxpemVkIGZpcnN0XG4gICAgICB2YXIgUXUgPSB6ZXJvcyhOICogTik7XG4gICAgICB2YXIgcXN1bSA9IDAuMDtcbiAgICAgIGZvcih2YXIgaT0wO2k8TjtpKyspIHtcbiAgICAgICAgZm9yKHZhciBqPWkrMTtqPE47aisrKSB7XG4gICAgICAgICAgdmFyIGRzdW0gPSAwLjA7XG4gICAgICAgICAgZm9yKHZhciBkPTA7ZDxkaW07ZCsrKSB7XG4gICAgICAgICAgICB2YXIgZGhlcmUgPSBZW2ldW2RdIC0gWVtqXVtkXTtcbiAgICAgICAgICAgIGRzdW0gKz0gZGhlcmUgKiBkaGVyZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHF1ID0gMS4wIC8gKDEuMCArIGRzdW0pOyAvLyBTdHVkZW50IHQtZGlzdHJpYnV0aW9uXG4gICAgICAgICAgUXVbaSpOK2pdID0gcXU7XG4gICAgICAgICAgUXVbaipOK2ldID0gcXU7XG4gICAgICAgICAgcXN1bSArPSAyICogcXU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIG5vcm1hbGl6ZSBRIGRpc3RyaWJ1dGlvbiB0byBzdW0gdG8gMVxuICAgICAgdmFyIE5OID0gTipOO1xuICAgICAgdmFyIFEgPSB6ZXJvcyhOTik7XG4gICAgICBmb3IodmFyIHE9MDtxPE5OO3ErKykgeyBRW3FdID0gTWF0aC5tYXgoUXVbcV0gLyBxc3VtLCAxZS0xMDApOyB9XG5cbiAgICAgIHZhciBjb3N0ID0gMC4wO1xuICAgICAgdmFyIGdyYWQgPSBbXTtcbiAgICAgIGZvcih2YXIgaT0wO2k8TjtpKyspIHtcbiAgICAgICAgdmFyIGdzdW0gPSBuZXcgQXJyYXkoZGltKTsgLy8gaW5pdCBncmFkIGZvciBwb2ludCBpXG4gICAgICAgIGZvcih2YXIgZD0wO2Q8ZGltO2QrKykgeyBnc3VtW2RdID0gMC4wOyB9XG4gICAgICAgIGZvcih2YXIgaj0wO2o8TjtqKyspIHtcbiAgICAgICAgICBjb3N0ICs9IC0gUFtpKk4ral0gKiBNYXRoLmxvZyhRW2kqTitqXSk7IC8vIGFjY3VtdWxhdGUgY29zdCAodGhlIG5vbi1jb25zdGFudCBwb3J0aW9uIGF0IGxlYXN0Li4uKVxuICAgICAgICAgIHZhciBwcmVtdWx0ID0gNCAqIChwbXVsICogUFtpKk4ral0gLSBRW2kqTitqXSkgKiBRdVtpKk4ral07XG4gICAgICAgICAgZm9yKHZhciBkPTA7ZDxkaW07ZCsrKSB7XG4gICAgICAgICAgICBnc3VtW2RdICs9IHByZW11bHQgKiAoWVtpXVtkXSAtIFlbal1bZF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBncmFkLnB1c2goZ3N1bSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7Y29zdDogY29zdCwgZ3JhZDogZ3JhZH07XG4gICAgfVxuICB9XG5cbiAgZ2xvYmFsLnRTTkUgPSB0U05FOyAvLyBleHBvcnQgdFNORSBjbGFzc1xufSkodHNuZWpzKTtcblxuXG4vLyBleHBvcnQgdGhlIGxpYnJhcnkgdG8gd2luZG93LCBvciB0byBtb2R1bGUgaW4gbm9kZWpzXG4oZnVuY3Rpb24obGliKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB3aW5kb3cudHNuZWpzID0gbGliOyAvLyBpbiBvcmRpbmFyeSBicm93c2VyIGF0dGFjaCBsaWJyYXJ5IHRvIHdpbmRvd1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gbGliOyAvLyBpbiBub2RlanNcbiAgfVxufSkodHNuZWpzKTtcbiIsImltcG9ydCBwNSBmcm9tICdwNS9saWIvcDUubWluJztcbmltcG9ydCBUb25lIGZyb20gJ3RvbmUnO1xuaW1wb3J0IHRzbmVqcyBmcm9tICd0c25lJztcblxuY29uc3Qgc2tldGNoID0gKHApID0+IHtcblx0Y2xhc3MgRGF0YVBvaW50IHtcblx0XHRjb25zdHJ1Y3RvcigpIHtcbiAgXHRcdFx0dGhpcy5wb3MgPSBwLmNyZWF0ZVZlY3RvcigwLDAsMCk7XG4gIFx0XHRcdHRoaXMubGFiZWwgPSBcIlwiO1xuICBcdFx0XHR0aGlzLmNvbG9yID0gcC5jb2xvcigyNTUpO1xuICBcdFx0XHR0aGlzLnNpemUgPSAxO1xuICBcdFx0XHR0aGlzLnRyaWcgPSAwO1xuICBcdFx0XHR0aGlzLmNhblRyaWcgPSB0cnVlO1xuXHRcdH1cblxuICBcdFx0ZHJhd1BvaW50KCl7XG4gIFx0XHQgIHAubm9TdHJva2UoKTtcbiAgXHRcdCAgcC5maWxsKHRoaXMuY29sb3IpO1xuICBcdFx0ICBwLmFtYmllbnRNYXRlcmlhbCh0aGlzLnIsIHRoaXMucix0aGlzLnIpO1xuICBcdFx0ICBwLnB1c2goKTtcbiAgXHRcdCAgcC50cmFuc2xhdGUodGhpcy5wb3MueCwgdGhpcy5wb3MueSwgdGhpcy5wb3Mueik7XG4gIFx0XHQgIC8vcC5yb3RhdGVYKHRoaXMuc2l6ZSwwLDApO1xuICBcdFx0ICBwLmJveCh0aGlzLnNpemUpO1xuXG4gIFx0XHQgIHAuZmlsbCgyNTUsMCwwLHRoaXMudHJpZyk7XG4gIFx0XHQgIHAuYm94KHRoaXMuc2l6ZSAqIDEuNSk7XG4gIFx0XHQgIFxuICBcdFx0ICBpZih0aGlzLnRyaWcgPT0gMjU1KSB7XG4gIFx0XHQgIFx0aWYodGhpcy5jYW5UcmlnKSB7XG4gIFx0XHQgIFx0XHRsZXQgcm5kID0gcC5mbG9vcihwLnJhbmRvbSgxMCkpO1xuICBcdFx0ICBcdFx0c3ludGhzWyBybmQgXS5lbnZlbG9wZS5hdHRhY2sgPSB0aGlzLnIvMTAwMDtcbiAgXHRcdCAgXHRcdHN5bnRoc1sgcm5kIF0udHJpZ2dlckF0dGFja1JlbGVhc2UoIFRvbmUuTWlkaSggKCgyNTUvMjAgKyAyKSAtIHRoaXMuc2l6ZSArIDIpICogMTAgKS50b0ZyZXF1ZW5jeSgpLCB0aGlzLnNpemUvNTAwKTtcbiAgXHRcdCAgXHRcdHRoaXMuY2FuVHJpZyA9IGZhbHNlO1xuICBcdFx0ICBcdH1cbiAgXHRcdCAgfVxuXG5cbiAgXHRcdCAgdGhpcy50cmlnLT0xMDA7XG5cbiAgXHRcdCAgcC5wb3AoKTtcblxuXG4gIFx0XHR9XG5cdFx0XG4gIFx0XHRzZXRQb3MocCkge1xuICBcdFx0XHR0aGlzLnBvcyA9IHA7XG4gIFx0XHRcdHJldHVybiB0aGlzO1xuICBcdFx0fVxuXHRcdFxuICBcdFx0c2V0Q29sKHIsZyxiLGEpIHtcbiAgXHRcdFx0dGhpcy5jb2xvciA9IHAuY29sb3IocixnLGIsYSk7XG4gIFx0XHRcdHRoaXMuciA9IHI7XG4gIFx0XHRcdHRoaXMuZyA9IGc7XG4gIFx0XHRcdHRoaXMuYiA9IGI7XG4gIFx0XHRcdHJldHVybiB0aGlzO1xuICBcdFx0fVxuXHRcdFxuICBcdFx0c2V0U2l6ZShzKSB7XG4gIFx0XHRcdHRoaXMuc2l6ZSA9IHM7XG4gIFx0XHRcdHJldHVybiB0aGlzO1xuICBcdFx0fVxuXHR9XG5cblx0bGV0IG51bSA9IDUwMDtcblx0bGV0IHRzbmU7XG5cdGxldCBZO1xuXHRsZXQgc3RlcENvdW50ID0gMDtcblx0bGV0IGRhdGEgPSBbXTtcblx0bGV0IGZlYXR1cmVzID0gW107XG5cblx0bGV0IHBsYXlIZWFkeCA9IC0yNTA7XG5cdGxldCBwbGF5SGVhZHkgPSAtMjUwO1xuXHRcblx0bGV0IHggPSAwO1xuXHRsZXQgeSA9IDA7XG5cdGxldCAgZWFzaW5nID0gMC45O1xuXHRsZXQgc3ludGhzID0gW107XG5cblxuXHR2YXIgcGFubmVyID0gbmV3IFRvbmUuUGFubmVyKC0xKS50b01hc3RlcigpO1xuXHR2YXIgZnJlZXZlcmIgPSBuZXcgVG9uZS5GcmVldmVyYigpLmNvbm5lY3QocGFubmVyKTtcbiAgICAgICAgZnJlZXZlcmIuZGFtcGVuaW5nLnZhbHVlID0gMzUwMDtcbiAgICAgICAgZnJlZXZlcmIucm9vbVNpemUudmFsdWUgPSAwLjc5O1xuXHRcblx0Zm9yKGxldCBpPTA7IGk8MTA7IGkrKykge1xuXHRcdHN5bnRocy5wdXNoKG5ldyBUb25lLkZNU3ludGgoe1xuICAgICAgICAgICAgICAgIFwiaGFybW9uaWNpdHlcIiAgOiAxMCAsXG4gICAgICAgICAgICAgICAgXCJtb2R1bGF0aW9uSW5kZXhcIiAgOiA4MCAsXG4gICAgICAgICAgICAgICAgXCJkZXR1bmVcIiAgOiAwICxcbiAgICAgICAgICAgICAgICBcIm9zY2lsbGF0b3JcIiAgOiB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiICA6IFwic2luZVwiXG4gICAgICAgICAgICAgICAgfSAgLFxuICAgICAgICAgICAgICAgIFwiZW52ZWxvcGVcIiAgOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiYXR0YWNrXCIgIDogMC4wMDEgLFxuICAgICAgICAgICAgICAgICAgICBcImRlY2F5XCIgIDogMC4wMDMgLFxuICAgICAgICAgICAgICAgICAgICBcInN1c3RhaW5cIiAgOiAwLjA2ICxcbiAgICAgICAgICAgICAgICAgICAgXCJyZWxlYXNlXCIgIDogMC4zXG4gICAgICAgICAgICAgICAgfSAgLFxuICAgICAgICAgICAgICAgIFwibW9kdWxhdGlvblwiICA6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCIgIDogXCJzcXVhcmVcIlxuICAgICAgICAgICAgICAgIH0gICxcbiAgICAgICAgICAgICAgICBcIm1vZHVsYXRpb25FbnZlbG9wZVwiICA6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJhdHRhY2tcIiAgOiAwLjAxICxcbiAgICAgICAgICAgICAgICAgICAgXCJkZWNheVwiICA6IDAuMDIgLFxuICAgICAgICAgICAgICAgICAgICBcInN1c3RhaW5cIiAgOiAwLjAzICxcbiAgICAgICAgICAgICAgICAgICAgXCJyZWxlYXNlXCIgIDogMC4wMzNcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwicG9ydGFtZW50b1wiIDogMC4wMSBcbiAgICAgICAgICAgIH0pLmNvbm5lY3QoZnJlZXZlcmIpKTtcblx0fVxuXHRwLnNldHVwID0gKCkgPT4ge1xuXHRcdGxldCBjYW52YXMgPSBwLmNyZWF0ZUNhbnZhcyg4MDAsODAwLCBwLldFQkdMKTtcblx0XHRwLnNtb290aCgpO1xuXG5cdFx0bGV0IG9wdCA9IHt9XG4gIFx0XHRvcHQuZXBzaWxvbiA9IDMwOyAvLyBlcHNpbG9uIGlzIGxlYXJuaW5nIHJhdGUgKDEwID0gZGVmYXVsdClcbiAgXHRcdG9wdC5wZXJwbGV4aXR5ID0gMzA7IC8vIHJvdWdobHkgaG93IG1hbnkgbmVpZ2hib3JzIGVhY2ggcG9pbnQgaW5mbHVlbmNlcyAoMzAgPSBkZWZhdWx0KVxuICBcdFx0b3B0LmRpbSA9IDM7IC8vIGRpbWVuc2lvbmFsaXR5IG9mIHRoZSBlbWJlZGRpbmcgKDIgPSBkZWZhdWx0KVxuXHRcdFxuICBcdFx0dHNuZSA9IG5ldyB0c25lanMudFNORShvcHQpOyAvLyBjcmVhdGUgYSB0U05FIGluc3RhbmNlXG4gIFx0XHRcbiAgXHRcdGZvcihsZXQgaT0wOyBpPG51bTsgaSsrKSB7XG4gIFx0XHQgIFxuICBcdFx0ICAvLyBnZW5lcmF0aW5nIHJhbmRvbSBkYXRhXG4gIFx0XHQgIGxldCBmMSA9IHAucmFuZG9tKDI1NSk7XG4gIFx0XHQgIGxldCBmMiA9IHAucmFuZG9tKDI1NSk7XG4gIFx0XHQgIGxldCBmMyA9IHAucmFuZG9tKDI1NSk7XG5cdFx0XG4gIFx0XHQgIC8vIGFkZCBnZW5lcmF0ZWQgZGF0YSB0byBhbiBhcnJheSBvZiBmZWF0dXJlIHZlY3RvcnNcbiAgXHRcdCAgZmVhdHVyZXMucHVzaCggW2YxLCBmMiwgZjNdICk7IC8vIGZlYXR1cmUgdmVjdG9yJ3MgbGVuZ3RoIChjb21wb25lbnRzKSBjYW4gYmUgc2VsZWN0ZWQgZnJlZWx5XG5cdFx0XG4gIFx0XHQgIGxldCBkID0gbmV3IERhdGFQb2ludCgpO1xuICBcdFx0ICAvLyB1c2UgZGF0YSBhcyBjb2xvciBjb21wb25lbnRzIGZvciB0aGUgZGF0YXBvaW50c1xuICBcdFx0ICBkLnNldENvbCggZjEsIGYyLCBmMywgMjU1ICkuc2V0U2l6ZShmMi8yMCArIDIpO1xuICBcdFx0XHRkYXRhLnB1c2goZCk7XG4gIFx0XHR9XG4gIFx0XHRcbiAgXHRcdHRzbmUuaW5pdERhdGFSYXcoZmVhdHVyZXMpO1xuICBcdFx0WSA9IHRzbmUuZ2V0U29sdXRpb24oKTsgLy8gWSBpcyBhbiBhcnJheSBvZiAyLUQgcG9pbnRzIHRoYXQgeW91IGNhbiBwbG90XG5cdH1cblxuXHRsZXQgenAgPSAwO1xuXHRwLmRyYXcgPSAoKSA9PiB7XG5cdFx0cC5jYW1lcmEocC5zaW4ocC5mcmFtZUNvdW50LzMwMCkgKiAxMDAsIHAuY29zKHAuZnJhbWVDb3VudC8zMDApICogMTAwLCA4MDAsIDAsIDAsIDAsIDAsIDEsIDApO1xuXHRcdHAuYmFja2dyb3VuZCgwKTtcblx0XHRwLmZyYW1lUmF0ZSg2MCk7XG5cblx0XHRsZXQgdGFyZ2V0WCA9IHAuY29uc3RyYWluKHAubW91c2VYICsgcC5zaW4oLXAuZnJhbWVDb3VudC8yMCkgKiA4MCwwLHAud2lkdGgpO1xuICBcdFx0bGV0IGR4ID0gdGFyZ2V0WCAtIHg7XG4gIFx0XHR4ICs9IGR4ICogZWFzaW5nO1xuXG4gIFx0XHRsZXQgdGFyZ2V0WSA9IHAuY29uc3RyYWluKHAubW91c2VZICsgcC5jb3MoLXAuZnJhbWVDb3VudC8yMCkgKiA4MCwwLHAuaGVpZ2h0KTtcbiAgXHRcdGxldCBkeSA9IHRhcmdldFkgLSB5O1xuICBcdFx0eSArPSBkeSAqIGVhc2luZztcblx0XHRcblx0XHRwbGF5SGVhZHggPSBwLm1hcCh4LDAscC53aWR0aCwtMjUwLDI1MCk7XG5cdFx0cGxheUhlYWR5ID0gcC5tYXAoeSwwLHAuaGVpZ2h0LC0yNTAsMjUwKTtcblx0XHRcblx0XHQvKmlmKHBsYXlIZWFkeCA+IDI1MCkge1xuXHRcdFx0cGxheUhlYWR4ID0gLTI1MDtcblx0XHRcdGZvcihsZXQgaT0wOyBpPCBZLmxlbmd0aDsgaSsrKSB7XG4gICAgXHRcdFx0ZGF0YVtpXS5jYW5UcmlnID0gdHJ1ZTtcbiAgICBcdFx0fVxuXHRcdH0qL1xuXG5cdFx0cGFubmVyLnBhbi52YWx1ZSA9IHBsYXlIZWFkeCAvIDI1MDtcblxuXHRcdHAucG9pbnRMaWdodCgxNTAsIDE1MCwgMTUwLCA1MDAsIDAsIDIwMCk7XG5cdFx0Ly9wLmRpcmVjdGlvbmFsTGlnaHQoMjU1LDI1NSwyNTUsIC0xLCAwLCAtMSk7XG5cdFx0cC5hbWJpZW50TGlnaHQoMjU1KTtcblxuXHRcdC8vcC5yb3RhdGVZKHAuc2luKHAuZnJhbWVDb3VudC8xMDAwKSAqIHAuUEkvNCk7XG5cdFx0Ly9wLnJvdGF0ZVgoLXAuZnJhbWVDb3VudC8xMDAwKTtcblxuXHRcdHpwID0gcC5zaW4ocC5mcmFtZUNvdW50LzEwMCkgKiAyNTA7XG5cdFx0cC5wdXNoKCk7XG5cdFx0cC50cmFuc2xhdGUocGxheUhlYWR4LDAsMCk7XG5cdFx0cC5maWxsKDI1NSwxMjApO1xuXHRcdHAubm9TdHJva2UoKTtcblx0XHRwLmJveCg1LDUwMCwwKTtcblx0XHRwLnBvcCgpO1xuXG5cdFx0cC5wdXNoKCk7XG5cdFx0cC50cmFuc2xhdGUoMCxwbGF5SGVhZHksMCk7XG5cdFx0cC5maWxsKDI1NSwxMjApO1xuXHRcdHAubm9TdHJva2UoKTtcblx0XHRwLmJveCg1MDAsNSwwKTtcblx0XHRwLnBvcCgpO1xuXG5cdFx0cC5wdXNoKCk7XG5cdFx0cC50cmFuc2xhdGUocGxheUhlYWR4LHBsYXlIZWFkeSwwKTtcblx0XHRwLmZpbGwoMjU1LDAsMCw0MCk7XG5cdFx0cC5ub1N0cm9rZSgpO1xuXHRcdHAuYm94KDUsNSw1MDApO1xuXHRcdHAucG9wKCk7XG5cblx0XHRzdGVwQ291bnQrKztcbiAgXHRcdGlmKHN0ZXBDb3VudDw2MDApIHtcbiAgICBcdFx0dHNuZS5zdGVwKCk7XG4gIFx0XHR9XG5cbiAgXHRcdGZvcihsZXQgaT0wOyBpPCBZLmxlbmd0aDsgaSsrKSB7XG4gICAgXHRcdGRhdGFbaV0uc2V0UG9zKCBwLmNyZWF0ZVZlY3RvcihZW2ldWzBdICogMTAsIFlbaV1bMV0gKiAxMCwgWVtpXVsyXSAqIDEwKSApLmRyYXdQb2ludCgpO1xuICAgIFx0XHRpZihwLmRpc3QoZGF0YVtpXS5wb3MueCxkYXRhW2ldLnBvcy55LDAsIHBsYXlIZWFkeCxwbGF5SGVhZHksIDApIDw9IDEwKSB7XG4gICAgXHRcdFx0ZGF0YVtpXS50cmlnID0gMjU1O1xuICAgIFx0XHR9IGVsc2Uge1xuICAgIFx0XHRcdGRhdGFbaV0uY2FuVHJpZyA9IHRydWU7XG4gICAgXHRcdH1cbiAgXHRcdH1cblxuICBcdFx0cC5ub0ZpbGwoKTtcbiAgXHRcdHAuc3Ryb2tlKDI1NSwgNTApO1xuICBcdFx0cC5ib3goNTAwKTtcblx0fVxuXG4gIHAua2V5UHJlc3NlZCA9ICgpID0+IHtcbiAgICAgICAgaWYocC5rZXkgPT0gJ20nKSB7XG4gICAgICAgICAgICBwLnNhdmUoRGF0ZS5ub3coKSArIFwiLmpwZ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc2tldGNoO1xubmV3IHA1KHNrZXRjaCk7XG5cblxuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsIGV2YWwpKFwidGhpc1wiKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file + */return function(e){t=e()}(function(){var t=function(){if(!(this instanceof t))throw new Error("constructor needs to be called with the 'new' keyword")};t.prototype.toString=function(){for(var e in t){var i=e[0].match(/^[A-Z]$/),r=t[e]===this.constructor;if(t.isFunction(t[e])&&i&&r)return e}return"Tone"},t.prototype.dispose=function(){return this},t.prototype.set=function(e,i,r){if(t.isObject(e))r=i;else if(t.isString(e)){var n={};n[e]=i,e=n}t:for(var o in e){i=e[o];var s=this;if(-1!==o.indexOf(".")){for(var a=o.split("."),h=0;hthis.memory){var r=this.length-this.memory;this._timeline.splice(0,r)}return this},t.Timeline.prototype.remove=function(t){var e=this._timeline.indexOf(t);return-1!==e&&this._timeline.splice(e,1),this},t.Timeline.prototype.get=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return-1!==r?this._timeline[r]:null},t.Timeline.prototype.peek=function(){return this._timeline[0]},t.Timeline.prototype.shift=function(){return this._timeline.shift()},t.Timeline.prototype.getAfter=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return r+10&&this._timeline[r-1][i]=0?this._timeline[n-1]:null},t.Timeline.prototype.cancel=function(t){if(this._timeline.length>1){var e=this._search(t);if(e>=0)if(this._timeline[e].time===t){for(var i=e;i>=0&&this._timeline[i].time===t;i--)e=i;this._timeline=this._timeline.slice(0,e)}else this._timeline=this._timeline.slice(0,e+1);else this._timeline=[]}else 1===this._timeline.length&&this._timeline[0].time>=t&&(this._timeline=[]);return this},t.Timeline.prototype.cancelBefore=function(t){var e=this._search(t);return e>=0&&(this._timeline=this._timeline.slice(e+1)),this},t.Timeline.prototype.previousEvent=function(t){var e=this._timeline.indexOf(t);return e>0?this._timeline[e-1]:null},t.Timeline.prototype._search=function(e,i){if(0===this._timeline.length)return-1;i=t.defaultArg(i,"time");var r=0,n=this._timeline.length,o=n;if(n>0&&this._timeline[n-1][i]<=e)return n-1;for(;re)return s;a[i]>e?o=s:r=s+1}return-1},t.Timeline.prototype._iterate=function(e,i,r){i=t.defaultArg(i,0),r=t.defaultArg(r,this._timeline.length-1),this._timeline.slice(i,r+1).forEach(function(t){e.call(this,t)}.bind(this))},t.Timeline.prototype.forEach=function(t){return this._iterate(t),this},t.Timeline.prototype.forEachBefore=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(e,0,i),this},t.Timeline.prototype.forEachAfter=function(t,e){var i=this._search(t);return this._iterate(e,i+1),this},t.Timeline.prototype.forEachBetween=function(t,e,i){var r=this._search(t),n=this._search(e);return-1!==r&&-1!==n?(this._timeline[r].time!==t&&(r+=1),this._timeline[n].time===e&&(n-=1),this._iterate(i,r,n)):-1===r&&this._iterate(i,0,n),this},t.Timeline.prototype.forEachFrom=function(t,e){for(var i=this._search(t);i>=0&&this._timeline[i].time>=t;)i--;return this._iterate(e,i+1),this},t.Timeline.prototype.forEachAtTime=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(function(i){i.time===t&&e.call(this,i)},0,i),this},t.Timeline.prototype.dispose=function(){return t.prototype.dispose.call(this),this._timeline=null,this},t.Timeline}),e(function(t){t.supported&&(!window.hasOwnProperty("OfflineAudioContext")&&window.hasOwnProperty("webkitOfflineAudioContext")&&(window.OfflineAudioContext=window.webkitOfflineAudioContext),new OfflineAudioContext(1,1,44100).startRendering()instanceof Promise||(OfflineAudioContext.prototype._native_startRendering=OfflineAudioContext.prototype.startRendering,OfflineAudioContext.prototype.startRendering=function(){return new Promise(function(t){this.oncomplete=function(e){t(e.renderedBuffer)},this._native_startRendering()}.bind(this))}))}),e(function(t){if(t.supported){!window.hasOwnProperty("AudioContext")&&window.hasOwnProperty("webkitAudioContext")&&(window.AudioContext=window.webkitAudioContext),AudioContext.prototype.close||(AudioContext.prototype.close=function(){return t.isFunction(this.suspend)&&this.suspend(),Promise.resolve()}),AudioContext.prototype.resume||(AudioContext.prototype.resume=function(){return Promise.resolve()}),!AudioContext.prototype.createGain&&AudioContext.prototype.createGainNode&&(AudioContext.prototype.createGain=AudioContext.prototype.createGainNode),!AudioContext.prototype.createDelay&&AudioContext.prototype.createDelayNode&&(AudioContext.prototype.createDelay=AudioContext.prototype.createDelayNode);var e=!1,i=new OfflineAudioContext(1,1,44100),r=new Uint32Array([1179011410,48,1163280727,544501094,16,131073,44100,176400,1048580,1635017060,8,0,0,0,0]).buffer;try{i.decodeAudioData(r)instanceof Promise&&(e=!0)}catch(t){e=!1}e||(AudioContext.prototype._native_decodeAudioData=AudioContext.prototype.decodeAudioData,AudioContext.prototype.decodeAudioData=function(t){return new Promise(function(e,i){this._native_decodeAudioData(t,e,i)}.bind(this))})}}),e(function(t){t.Context=function(){t.Emitter.call(this);var i=t.defaults(arguments,["context"],t.Context);if(!i.context&&(i.context=new window.AudioContext,!i.context))throw new Error("could not create AudioContext. Possibly too many AudioContexts running already.");for(var r in this._context=i.context,this._context)this._defineProperty(this._context,r);this._latencyHint=i.latencyHint,this._constants={},this.lookAhead=i.lookAhead,this._computedUpdateInterval=0,this._ticker=new e(this.emit.bind(this,"tick"),i.clockSource,i.updateInterval),this._timeouts=new t.Timeline,this._timeoutIds=0,this.on("tick",this._timeoutLoop.bind(this))},t.extend(t.Context,t.Emitter),t.Emitter.mixin(t.Context),t.Context.defaults={clockSource:"worker",latencyHint:"interactive",lookAhead:.1,updateInterval:.03},t.Context.prototype._defineProperty=function(e,i){t.isUndef(this[i])&&Object.defineProperty(this,i,{get:function(){return"function"==typeof e[i]?e[i].bind(e):e[i]},set:function(t){e[i]=t}})},t.Context.prototype.now=function(){return this._context.currentTime+this.lookAhead},t.Context.prototype.ready=function(){return new Promise(function(t){"running"===this._context.state?t():this._context.resume().then(function(){t()})}.bind(this))},t.Context.prototype.close=function(){return this._context.close().then(function(){t.Context.emit("close",this)}.bind(this))},t.Context.prototype.getConstant=function(t){if(this._constants[t])return this._constants[t];for(var e=this._context.createBuffer(1,128,this._context.sampleRate),i=e.getChannelData(0),r=0;r1&&(this.input=new Array(t)),1===e?this.output=this.context.createGain():e>1&&(this.output=new Array(e))},Object.defineProperty(t.AudioNode.prototype,"channelCount",{get:function(){return this.output.channelCount},set:function(t){return this.output.channelCount=t}}),Object.defineProperty(t.AudioNode.prototype,"channelCountMode",{get:function(){return this.output.channelCountMode},set:function(t){return this.output.channelCountMode=t}}),Object.defineProperty(t.AudioNode.prototype,"channelInterpretation",{get:function(){return this.output.channelInterpretation},set:function(t){return this.output.channelInterpretation=t}}),Object.defineProperty(t.AudioNode.prototype,"numberOfInputs",{get:function(){return this.input?t.isArray(this.input)?this.input.length:1:0}}),Object.defineProperty(t.AudioNode.prototype,"numberOfOutputs",{get:function(){return this.output?t.isArray(this.output)?this.output.length:1:0}}),t.AudioNode.prototype._onConnect=function(){},t.AudioNode.prototype.connect=function(e,i,r){return e._onConnect&&e._onConnect(this),t.isArray(this.output)?(i=t.defaultArg(i,0),this.output[i].connect(e,0,r)):this.output.connect(e,i,r),this},t.AudioNode.prototype.disconnect=function(e,i,r){t.isArray(this.output)?t.isNumber(e)?this.output[e].disconnect():(i=t.defaultArg(i,0),this.output[i].disconnect(e,0,r)):this.output.disconnect.apply(this.output,arguments)},t.AudioNode.prototype.chain=function(){for(var t=this,e=0;e3&&(r=parseFloat(parseFloat(r).toFixed(3))),[i,e,r].join(":")},t.Time.prototype.toTicks=function(){var t=this._beatsToUnits(1),e=this.valueOf()/t;return Math.round(e*this._getPPQ())},t.Time.prototype.toSeconds=function(){return this.valueOf()},t.Time.prototype.toMidi=function(){return t.Frequency.ftom(this.toFrequency())},t.Time}),e(function(t){return t.TransportTime=function(e,i){if(!(this instanceof t.TransportTime))return new t.TransportTime(e,i);t.Time.call(this,e,i)},t.extend(t.TransportTime,t.Time),t.TransportTime.prototype._now=function(){return t.Transport.seconds},t.TransportTime}),e(function(t){return t.Type={Default:"number",Time:"time",Frequency:"frequency",TransportTime:"transportTime",Ticks:"ticks",NormalRange:"normalRange",AudioRange:"audioRange",Decibels:"db",Interval:"interval",BPM:"bpm",Positive:"positive",Gain:"gain",Cents:"cents",Degrees:"degrees",MIDI:"midi",BarsBeatsSixteenths:"barsBeatsSixteenths",Samples:"samples",Hertz:"hertz",Note:"note",Milliseconds:"milliseconds",Seconds:"seconds",Notation:"notation"},t.prototype.toSeconds=function(e){return t.isNumber(e)?e:t.isUndef(e)?this.now():t.isString(e)?new t.Time(e).toSeconds():e instanceof t.TimeBase?e.toSeconds():void 0},t.prototype.toFrequency=function(e){return t.isNumber(e)?e:t.isString(e)||t.isUndef(e)?new t.Frequency(e).valueOf():e instanceof t.TimeBase?e.toFrequency():void 0},t.prototype.toTicks=function(e){return t.isNumber(e)||t.isString(e)?new t.TransportTime(e).toTicks():t.isUndef(e)?t.Transport.ticks:e instanceof t.TimeBase?e.toTicks():void 0},t}),e(function(t){return t.Param=function(){var e=t.defaults(arguments,["param","units","convert"],t.Param);t.AudioNode.call(this),this._param=this.input=e.param,this.units=e.units,this.convert=e.convert,this.overridden=!1,this._events=new t.Timeline(1e3),t.isDefined(e.value)&&this._param&&(this.value=e.value)},t.extend(t.Param,t.AudioNode),t.Param.defaults={units:t.Type.Default,convert:!0,param:void 0},Object.defineProperty(t.Param.prototype,"value",{get:function(){var t=this.now();return this._toUnits(this.getValueAtTime(t))},set:function(t){this._initialValue=this._fromUnits(t),this.cancelScheduledValues(this.context.currentTime),this.setValueAtTime(t,this.context.currentTime)}}),Object.defineProperty(t.Param.prototype,"minValue",{get:function(){return this.units===t.Type.Time||this.units===t.Type.Frequency||this.units===t.Type.NormalRange||this.units===t.Type.Positive||this.units===t.Type.BPM?0:this.units===t.Type.AudioRange?-1:this.units===t.Type.Decibels?-1/0:this._param.minValue}}),Object.defineProperty(t.Param.prototype,"maxValue",{get:function(){return this.units===t.Type.NormalRange||this.units===t.Type.AudioRange?1:this._param.maxValue}}),t.Param.prototype._fromUnits=function(e){if(!this.convert&&!t.isUndef(this.convert)||this.overridden)return e;switch(this.units){case t.Type.Time:return this.toSeconds(e);case t.Type.Frequency:return this.toFrequency(e);case t.Type.Decibels:return t.dbToGain(e);case t.Type.NormalRange:return Math.min(Math.max(e,0),1);case t.Type.AudioRange:return Math.min(Math.max(e,-1),1);case t.Type.Positive:return Math.max(e,0);default:return e}},t.Param.prototype._toUnits=function(e){if(!this.convert&&!t.isUndef(this.convert))return e;switch(this.units){case t.Type.Decibels:return t.gainToDb(e);default:return e}},t.Param.prototype._minOutput=1e-5,t.Param.AutomationType={Linear:"linearRampToValueAtTime",Exponential:"exponentialRampToValueAtTime",Target:"setTargetAtTime",SetValue:"setValueAtTime"},t.Param.prototype.setValueAtTime=function(e,i){return i=this.toSeconds(i),e=this._fromUnits(e),this._events.add({type:t.Param.AutomationType.SetValue,value:e,time:i}),this._param.setValueAtTime(e,i),this},t.Param.prototype.getValueAtTime=function(e){e=this.toSeconds(e);var i=this._events.getAfter(e),r=this._events.get(e),n=t.defaultArg(this._initialValue,this._param.defaultValue),o=n;if(null===r)o=n;else if(r.type===t.Param.AutomationType.Target){var s,a=this._events.getBefore(r.time);s=null===a?n:a.value,o=this._exponentialApproach(r.time,s,r.value,r.constant,e)}else o=null===i?r.value:i.type===t.Param.AutomationType.Linear?this._linearInterpolate(r.time,r.value,i.time,i.value,e):i.type===t.Param.AutomationType.Exponential?this._exponentialInterpolate(r.time,r.value,i.time,i.value,e):r.value;return o},t.Param.prototype.setRampPoint=function(t){t=this.toSeconds(t);var e=this.getValueAtTime(t);return this.cancelAndHoldAtTime(t),0===e&&(e=this._minOutput),this.setValueAtTime(this._toUnits(e),t),this},t.Param.prototype.linearRampToValueAtTime=function(e,i){return e=this._fromUnits(e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Linear,value:e,time:i}),this._param.linearRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampToValueAtTime=function(e,i){return e=this._fromUnits(e),e=Math.max(this._minOutput,e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Exponential,time:i,value:e}),this._param.exponentialRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.linearRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.linearRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.targetRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialApproachValueAtTime(t,i,e),this},t.Param.prototype.exponentialApproachValueAtTime=function(t,e,i){var r=Math.log(this.toSeconds(i)+1)/Math.log(200);return e=this.toSeconds(e),this.setTargetAtTime(t,e,r)},t.Param.prototype.setTargetAtTime=function(e,i,r){if(e=this._fromUnits(e),r<=0)throw new Error("timeConstant must be greater than 0");return i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Target,value:e,time:i,constant:r}),this._param.setTargetAtTime(e,i,r),this},t.Param.prototype.setValueCurveAtTime=function(e,i,r,n){n=t.defaultArg(n,1),r=this.toSeconds(r),i=this.toSeconds(i),this.setValueAtTime(e[0]*n,i);for(var o=r/(e.length-1),s=1;s=0;)this.emit("tick"),this._currentTime+=this.blockTime;return this._context.startRendering()},t.OfflineContext.prototype.close=function(){return this._context=null,Promise.resolve()},t.OfflineContext}),e(function(t){if(t.supported){var e=navigator.userAgent.toLowerCase();e.includes("safari")&&!e.includes("chrome")&&e.includes("mobile")&&(t.OfflineContext.prototype.createBufferSource=function(){var t=this._context.createBufferSource(),e=t.start;return t.start=function(i){this.setTimeout(function(){e.call(t,i)}.bind(this),0)}.bind(this),t})}}),e(function(t){return t.Gain=function(){var e=t.defaults(arguments,["gain","units"],t.Gain);t.AudioNode.call(this),this.input=this.output=this._gainNode=this.context.createGain(),this.gain=new t.Param({param:this._gainNode.gain,units:e.units,value:e.gain,convert:e.convert}),this._readOnly("gain")},t.extend(t.Gain,t.AudioNode),t.Gain.defaults={gain:1,convert:!0},t.Gain.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._gainNode.disconnect(),this._gainNode=null,this._writable("gain"),this.gain.dispose(),this.gain=null},t.Gain}),e(function(t){if(t.supported&&!AudioContext.prototype.createConstantSource){var e=function(t){this.context=t;for(var e=t.createBuffer(1,128,t.sampleRate),i=e.getChannelData(0),r=0;r0&&(n=(1-s)/(1/n)),"linear"===this._attackCurve)this._sig.linearRampTo(i,n,e);else if("exponential"===this._attackCurve)this._sig.targetRampTo(i,n,e);else if(n>0){this._sig.cancelAndHoldAtTime(e);var a=this._attackCurve;if(n0){var r=this.toSeconds(this.release);if("linear"===this._releaseCurve)this._sig.linearRampTo(0,r,e);else if("exponential"===this._releaseCurve)this._sig.targetRampTo(0,r,e);else{var n=this._releaseCurve;t.isArray(n)&&(this._sig.cancelAndHoldAtTime(e),this._sig.setValueCurveAtTime(n,e,r,i))}}return this},t.Envelope.prototype.getValueAtTime=function(t){return this._sig.getValueAtTime(t)},t.Envelope.prototype.triggerAttackRelease=function(t,e,i){return e=this.toSeconds(e),this.triggerAttack(e,i),this.triggerRelease(e+this.toSeconds(t)),this},t.Envelope.prototype.cancel=function(t){return this._sig.cancelScheduledValues(t),this},t.Envelope.prototype.connect=t.SignalBase.prototype.connect,function(){var e,i,r=[];for(e=0;e<128;e++)r[e]=Math.sin(e/127*(Math.PI/2));var n=[];for(e=0;e<127;e++){i=e/127;var o=Math.sin(i*(2*Math.PI)*6.4-Math.PI/2)+1;n[e]=o/10+.83*i}n[127]=1;var s=[];for(e=0;e<128;e++)s[e]=Math.ceil(e/127*5)/5;var a=[];for(e=0;e<128;e++)i=e/127,a[e]=.5*(1-Math.cos(Math.PI*i));var h=[];for(e=0;e<128;e++){i=e/127;var l=4*Math.pow(i,3)+.2,u=Math.cos(l*Math.PI*2*i);h[e]=Math.abs(u*(1-i))}function c(t){for(var e=new Array(t.length),i=0;i0?a:(-n-s)/o)+i.time}return i?0===i.value?1/0:i.time+(e-i.ticks)/i.value:e/this._initialValue},t.TickSignal.prototype.ticksToTime=function(e,i){return i=this.toSeconds(i),new t.Time(this.getDurationOfTicks(e,i))},t.TickSignal.prototype.timeToTicks=function(e,i){i=this.toSeconds(i),e=this.toSeconds(e);var r=this.getTicksAtTime(i),n=this.getTicksAtTime(i+e);return new t.Ticks(n-r)},t.TickSignal}),e(function(t){return t.TimelineState=function(e){t.Timeline.call(this),this._initial=e},t.extend(t.TimelineState,t.Timeline),t.TimelineState.prototype.getValueAtTime=function(t){var e=this.get(t);return null!==e?e.state:this._initial},t.TimelineState.prototype.setStateAtTime=function(t,e){return this.add({state:t,time:e}),this},t.TimelineState.prototype.getLastState=function(t,e){e=this.toSeconds(e);for(var i=this._search(e);i>=0;i--){var r=this._timeline[i];if(r.state===t)return r}},t.TimelineState.prototype.getNextState=function(t,e){e=this.toSeconds(e);var i=this._search(e);if(-1!==i)for(var r=i;r0&&(this._tickOffset.cancel(i.time),this._state.cancel(i.time))}return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this.setTicksAtTime(0,e),this},t.TickSource.prototype.pause=function(e){return e=this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started&&this._state.setStateAtTime(t.State.Paused,e),this},t.TickSource.prototype.cancel=function(t){return t=this.toSeconds(t),this._state.cancel(t),this._tickOffset.cancel(t),this},t.TickSource.prototype.getTicksAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.ticks,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=this.frequency.getTicksAtTime(e.time)-this.frequency.getTicksAtTime(i)),n=e}.bind(this)),this._state.remove(r),o},Object.defineProperty(t.TickSource.prototype,"ticks",{get:function(){return this.getTicksAtTime(this.now())},set:function(t){this.setTicksAtTime(t,this.now())}}),Object.defineProperty(t.TickSource.prototype,"seconds",{get:function(){return this.getSecondsAtTime(this.now())},set:function(t){var e=this.now(),i=this.frequency.timeToTicks(t,e);this.setTicksAtTime(i,e)}}),t.TickSource.prototype.getSecondsAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.seconds,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=e.time-i),n=e}.bind(this)),this._state.remove(r),o},t.TickSource.prototype.setTicksAtTime=function(t,e){return e=this.toSeconds(e),this._tickOffset.cancel(e),this._tickOffset.add({time:e,ticks:t,seconds:this.frequency.getDurationOfTicks(t,e)}),this},t.TickSource.prototype.getStateAtTime=function(t){return t=this.toSeconds(t),this._state.getValueAtTime(t)},t.TickSource.prototype.getTimeOfTick=function(e,i){i=t.defaultArg(i,this.now());var r=this._tickOffset.get(i),n=this._state.get(i),o=Math.max(r.time,n.time),s=this.frequency.getTicksAtTime(o)+e-r.ticks;return this.frequency.getTimeOfTick(s)},t.TickSource.prototype.forEachTickBetween=function(e,i,r){var n=this._state.get(e);if(this._state.forEachBetween(e,i,function(i){n.state===t.State.Started&&i.state!==t.State.Started&&this.forEachTickBetween(Math.max(n.time,e),i.time-this.sampleTime,r),n=i}.bind(this)),e=Math.max(n.time,e),n.state===t.State.Started&&this._state){var o=this.frequency.getTicksAtTime(e),s=(o-this.frequency.getTicksAtTime(n.time))%1;0!==s&&(s=1-s);for(var a=this.frequency.getTimeOfTick(o+s),h=null;a0)if(null===t.left.right)(e=t.left).right=t.right,i=e;else{for(e=t.left.right;null!==e.right;)e=e.right;e.parent.right=e.left,i=e.parent,e.left=t.left,e.right=t.right}else if(null===t.right.left)(e=t.right).left=t.left,i=e;else{for(e=t.right.left;null!==e.left;)e=e.left;e.parent=e.parent,e.parent.left=e.right,i=e.parent,e.left=t.left,e.right=t.right}null!==t.parent?t.isLeftChild()?t.parent.left=e:t.parent.right=e:this._setRoot(e),this._rebalance(i)}t.dispose()},t.IntervalTimeline.prototype._rotateLeft=function(t){var e=t.parent,i=t.isLeftChild(),r=t.right;t.right=r.left,r.left=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rotateRight=function(t){var e=t.parent,i=t.isLeftChild(),r=t.left;t.left=r.right,r.right=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rebalance=function(t){var e=t.getBalance();e>1?t.left.getBalance()<0?this._rotateLeft(t.left):this._rotateRight(t):e<-1&&(t.right.getBalance()>0?this._rotateRight(t.right):this._rotateLeft(t))},t.IntervalTimeline.prototype.get=function(t){if(null!==this._root){var e=[];if(this._root.search(t,e),e.length>0){for(var i=e[0],r=1;ri.low&&(i=e[r]);return i.event}}return null},t.IntervalTimeline.prototype.forEach=function(t){if(null!==this._root){var e=[];this._root.traverse(function(t){e.push(t)});for(var i=0;i=0;r--){var n=i[r].event;n&&e(n)}}return this},t.IntervalTimeline.prototype.forEachFrom=function(t,e){if(null!==this._root){var i=[];this._root.searchAfter(t,i);for(var r=i.length-1;r>=0;r--)e(i[r].event)}return this},t.IntervalTimeline.prototype.dispose=function(){var t=[];null!==this._root&&this._root.traverse(function(e){t.push(e)});for(var e=0;ethis.max||(null!==this.left&&this.left.search(t,e),this.low<=t&&this.high>t&&e.push(this),this.low>t||null!==this.right&&this.right.search(t,e))},e.prototype.searchAfter=function(t,e){this.low>=t&&(e.push(this),null!==this.left&&this.left.searchAfter(t,e)),null!==this.right&&this.right.searchAfter(t,e)},e.prototype.traverse=function(t){t(this),null!==this.left&&this.left.traverse(t),null!==this.right&&this.right.traverse(t)},e.prototype.updateHeight=function(){null!==this.left&&null!==this.right?this.height=Math.max(this.left.height,this.right.height)+1:null!==this.right?this.height=this.right.height+1:null!==this.left?this.height=this.left.height+1:this.height=0},e.prototype.updateMax=function(){this.max=this.high,null!==this.left&&(this.max=Math.max(this.max,this.left.max)),null!==this.right&&(this.max=Math.max(this.max,this.right.max))},e.prototype.getBalance=function(){var t=0;return null!==this.left&&null!==this.right?t=this.left.height-this.right.height:null!==this.left?t=this.left.height+1:null!==this.right&&(t=-(this.right.height+1)),t},e.prototype.isLeftChild=function(){return null!==this.parent&&this.parent.left===this},Object.defineProperty(e.prototype,"left",{get:function(){return this._left},set:function(t){this._left=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),Object.defineProperty(e.prototype,"right",{get:function(){return this._right},set:function(t){this._right=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),e.prototype.dispose=function(){this.parent=null,this._left=null,this._right=null,this.event=null},t.IntervalTimeline}),e(function(t){return t.Ticks=function(e,i){if(!(this instanceof t.Ticks))return new t.Ticks(e,i);t.TransportTime.call(this,e,i)},t.extend(t.Ticks,t.TransportTime),t.Ticks.prototype._defaultUnits="i",t.Ticks.prototype._now=function(){return t.Transport.ticks},t.Ticks.prototype._beatsToUnits=function(t){return this._getPPQ()*t},t.Ticks.prototype._secondsToUnits=function(t){return t/(60/this._getBpm())*this._getPPQ()},t.Ticks.prototype._ticksToUnits=function(t){return t},t.Ticks.prototype.toTicks=function(){return this.valueOf()},t.Ticks.prototype.toSeconds=function(){return this.valueOf()/this._getPPQ()*(60/this._getBpm())},t.Ticks}),e(function(t){return t.TransportEvent=function(e,i){i=t.defaultArg(i,t.TransportEvent.defaults),t.call(this),this.Transport=e,this.id=t.TransportEvent._eventId++,this.time=t.Ticks(i.time),this.callback=i.callback,this._once=i.once},t.extend(t.TransportEvent),t.TransportEvent.defaults={once:!1,callback:t.noOp},t.TransportEvent._eventId=0,t.TransportEvent.prototype.invoke=function(t){this.callback&&(this.callback(t),this._once&&this.Transport&&this.Transport.clear(this.id))},t.TransportEvent.prototype.dispose=function(){return t.prototype.dispose.call(this),this.Transport=null,this.callback=null,this.time=null,this},t.TransportEvent}),e(function(t){return t.TransportRepeatEvent=function(e,i){t.TransportEvent.call(this,e,i),i=t.defaultArg(i,t.TransportRepeatEvent.defaults),this.duration=t.Ticks(i.duration),this._interval=t.Ticks(i.interval),this._currentId=-1,this._nextId=-1,this._nextTick=this.time,this._boundRestart=this._restart.bind(this),this.Transport.on("start loopStart",this._boundRestart),this._restart()},t.extend(t.TransportRepeatEvent,t.TransportEvent),t.TransportRepeatEvent.defaults={duration:1/0,interval:1},t.TransportRepeatEvent.prototype.invoke=function(e){this._createEvents(e),t.TransportEvent.prototype.invoke.call(this,e)},t.TransportRepeatEvent.prototype._createEvents=function(e){var i=this.Transport.getTicksAtTime(e);i>=this.time&&i>=this._nextTick&&this._nextTick+this._intervalthis.time&&(this._nextTick=this.time+Math.ceil((i-this.time)/this._interval)*this._interval),this._currentId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick)),this._nextTick+=this._interval,this._nextId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick))},t.TransportRepeatEvent.prototype.dispose=function(){return this.Transport.clear(this._currentId),this.Transport.clear(this._nextId),this.Transport.off("start loopStart",this._boundRestart),this._boundCreateEvents=null,t.TransportEvent.prototype.dispose.call(this),this.duration=null,this._interval=null,this},t.TransportRepeatEvent}),e(function(t){t.Transport=function(){t.Emitter.call(this),t.getContext(function(){this.loop=!1,this._loopStart=0,this._loopEnd=0,this._ppq=e.defaults.PPQ,this._clock=new t.Clock({callback:this._processTick.bind(this),frequency:0}),this._bindClockEvents(),this.bpm=this._clock.frequency,this.bpm._toUnits=this._toUnits.bind(this),this.bpm._fromUnits=this._fromUnits.bind(this),this.bpm.units=t.Type.BPM,this.bpm.value=e.defaults.bpm,this._readOnly("bpm"),this._timeSignature=e.defaults.timeSignature,this._scheduledEvents={},this._timeline=new t.Timeline,this._repeatedEvents=new t.IntervalTimeline,this._syncedSignals=[],this._swingTicks=e.defaults.PPQ/2,this._swingAmount=0}.bind(this))},t.extend(t.Transport,t.Emitter),t.Transport.defaults={bpm:120,swing:0,swingSubdivision:"8n",timeSignature:4,loopStart:0,loopEnd:"4m",PPQ:192},t.Transport.prototype._processTick=function(e,i){if(this._swingAmount>0&&i%this._ppq!=0&&i%(2*this._swingTicks)!=0){var r=i%(2*this._swingTicks)/(2*this._swingTicks),n=Math.sin(r*Math.PI)*this._swingAmount;e+=t.Ticks(2*this._swingTicks/3).toSeconds()*n}this.loop&&i>=this._loopEnd&&(this.emit("loopEnd",e),this._clock.setTicksAtTime(this._loopStart,e),i=this._loopStart,this.emit("loopStart",e,this._clock.getSecondsAtTime(e)),this.emit("loop",e)),this._timeline.forEachAtTime(i,function(t){t.invoke(e)})},t.Transport.prototype.schedule=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e});return this._addEvent(r,this._timeline)},t.Transport.prototype.scheduleRepeat=function(e,i,r,n){var o=new t.TransportRepeatEvent(this,{callback:e,interval:t.Time(i),time:t.TransportTime(r),duration:t.Time(t.defaultArg(n,1/0))});return this._addEvent(o,this._repeatedEvents)},t.Transport.prototype.scheduleOnce=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e,once:!0});return this._addEvent(r,this._timeline)},t.Transport.prototype.clear=function(t){if(this._scheduledEvents.hasOwnProperty(t)){var e=this._scheduledEvents[t.toString()];e.timeline.remove(e.event),e.event.dispose(),delete this._scheduledEvents[t.toString()]}return this},t.Transport.prototype._addEvent=function(t,e){return this._scheduledEvents[t.id.toString()]={event:t,timeline:e},e.add(t),t.id},t.Transport.prototype.cancel=function(e){return e=t.defaultArg(e,0),e=this.toTicks(e),this._timeline.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this._repeatedEvents.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this},t.Transport.prototype._bindClockEvents=function(){this._clock.on("start",function(e,i){i=t.Ticks(i).toSeconds(),this.emit("start",e,i)}.bind(this)),this._clock.on("stop",function(t){this.emit("stop",t)}.bind(this)),this._clock.on("pause",function(t){this.emit("pause",t)}.bind(this))},Object.defineProperty(t.Transport.prototype,"state",{get:function(){return this._clock.getStateAtTime(this.now())}}),t.Transport.prototype.start=function(e,i){return t.isDefined(i)&&(i=this.toTicks(i)),this._clock.start(e,i),this},t.Transport.prototype.stop=function(t){return this._clock.stop(t),this},t.Transport.prototype.pause=function(t){return this._clock.pause(t),this},t.Transport.prototype.toggle=function(e){return e=this.toSeconds(e),this._clock.getStateAtTime(e)!==t.State.Started?this.start(e):this.stop(e),this},Object.defineProperty(t.Transport.prototype,"timeSignature",{get:function(){return this._timeSignature},set:function(e){t.isArray(e)&&(e=e[0]/e[1]*4),this._timeSignature=e}}),Object.defineProperty(t.Transport.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t)}}),t.Transport.prototype.setLoopPoints=function(t,e){return this.loopStart=t,this.loopEnd=e,this},Object.defineProperty(t.Transport.prototype,"swing",{get:function(){return this._swingAmount},set:function(t){this._swingAmount=t}}),Object.defineProperty(t.Transport.prototype,"swingSubdivision",{get:function(){return t.Ticks(this._swingTicks).toNotation()},set:function(t){this._swingTicks=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"position",{get:function(){var e=this.now(),i=this._clock.getTicksAtTime(e);return t.Ticks(i).toBarsBeatsSixteenths()},set:function(t){var e=this.toTicks(t);this.ticks=e}}),Object.defineProperty(t.Transport.prototype,"seconds",{get:function(){return this._clock.seconds},set:function(t){var e=this.now(),i=this.bpm.timeToTicks(t,e);this.ticks=i}}),Object.defineProperty(t.Transport.prototype,"progress",{get:function(){if(this.loop){var t=this.now();return(this._clock.getTicksAtTime(t)-this._loopStart)/(this._loopEnd-this._loopStart)}return 0}}),Object.defineProperty(t.Transport.prototype,"ticks",{get:function(){return this._clock.ticks},set:function(e){if(this._clock.ticks!==e){var i=this.now();this.state===t.State.Started?(this.emit("stop",i),this._clock.setTicksAtTime(e,i),this.emit("start",i,this.seconds)):this._clock.setTicksAtTime(e,i)}}}),t.Transport.prototype.getTicksAtTime=function(t){return Math.round(this._clock.getTicksAtTime(t))},t.Transport.prototype.getSecondsAtTime=function(t){return this._clock.getSecondsAtTime(t)},Object.defineProperty(t.Transport.prototype,"PPQ",{get:function(){return this._ppq},set:function(t){var e=this.bpm.value;this._ppq=t,this.bpm.value=e}}),t.Transport.prototype._fromUnits=function(t){return 1/(60/t/this.PPQ)},t.Transport.prototype._toUnits=function(t){return t/this.PPQ*60},t.Transport.prototype.nextSubdivision=function(e){if(e=this.toTicks(e),this.state!==t.State.Started)return 0;var i=this.now(),r=e-this.getTicksAtTime(i)%e;return this._clock.nextTickTime(r,i)},t.Transport.prototype.syncSignal=function(e,i){if(!i){var r=this.now();i=0!==e.getValueAtTime(r)?e.getValueAtTime(r)/this.bpm.getValueAtTime(r):0}var n=new t.Gain(i);return this.bpm.chain(n,e._param),this._syncedSignals.push({ratio:n,signal:e,initial:e.value}),e.value=0,this},t.Transport.prototype.unsyncSignal=function(t){for(var e=this._syncedSignals.length-1;e>=0;e--){var i=this._syncedSignals[e];i.signal===t&&(i.ratio.dispose(),i.signal.value=i.initial,this._syncedSignals.splice(e,1))}return this},t.Transport.prototype.dispose=function(){return t.Emitter.prototype.dispose.call(this),this._clock.dispose(),this._clock=null,this._writable("bpm"),this.bpm=null,this._timeline.dispose(),this._timeline=null,this._repeatedEvents.dispose(),this._repeatedEvents=null,this};var e=t.Transport;return t.Transport=new e,t.Context.on("init",function(i){i.Transport instanceof e?t.Transport=i.Transport:t.Transport=new e,i.Transport=t.Transport}),t.Context.on("close",function(t){t.Transport instanceof e&&t.Transport.dispose()}),t.Transport}),e(function(t){return t.Volume=function(){var e=t.defaults(arguments,["volume"],t.Volume);t.AudioNode.call(this),this.output=this.input=new t.Gain(e.volume,t.Type.Decibels),this._unmutedVolume=e.volume,this.volume=this.output.gain,this._readOnly("volume"),this.mute=e.mute},t.extend(t.Volume,t.AudioNode),t.Volume.defaults={volume:0,mute:!1},Object.defineProperty(t.Volume.prototype,"mute",{get:function(){return this.volume.value===-1/0},set:function(t){!this.mute&&t?(this._unmutedVolume=this.volume.value,this.volume.value=-1/0):this.mute&&!t&&(this.volume.value=this._unmutedVolume)}}),t.Volume.prototype.dispose=function(){return this.input.dispose(),t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this.volume.dispose(),this.volume=null,this},t.Volume}),e(function(t){t.Master=function(){t.AudioNode.call(this),t.getContext(function(){this.createInsOuts(1,0),this._volume=this.output=new t.Volume,this.volume=this._volume.volume,this._readOnly("volume"),this.input.chain(this.output,this.context.destination)}.bind(this))},t.extend(t.Master,t.AudioNode),t.Master.defaults={volume:0,mute:!1},Object.defineProperty(t.Master.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Master.prototype.chain=function(){this.input.disconnect(),this.input.chain.apply(this.input,arguments),arguments[arguments.length-1].connect(this.output)},t.Master.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null},t.AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this},window.AudioNode&&(AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this});var e=t.Master;return t.Master=new e,t.Context.on("init",function(i){i.Master instanceof e?t.Master=i.Master:t.Master=new e,i.Master=t.Master}),t.Context.on("close",function(t){t.Master instanceof e&&t.Master.dispose()}),t.Master}),e(function(t){return t.Source=function(e){e=t.defaultArg(e,t.Source.defaults),t.AudioNode.call(this),this._volume=this.output=new t.Volume(e.volume),this.volume=this._volume.volume,this._readOnly("volume"),this._state=new t.TimelineState(t.State.Stopped),this._state.memory=100,this._synced=!1,this._scheduled=[],this._volume.output.output.channelCount=2,this._volume.output.output.channelCountMode="explicit",this.mute=e.mute},t.extend(t.Source,t.AudioNode),t.Source.defaults={volume:0,mute:!1},Object.defineProperty(t.Source.prototype,"state",{get:function(){return this._synced?t.Transport.state===t.State.Started?this._state.getValueAtTime(t.Transport.seconds):t.State.Stopped:this._state.getValueAtTime(this.now())}}),Object.defineProperty(t.Source.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Source.prototype._start=t.noOp,t.Source.prototype.restart=t.noOp,t.Source.prototype._stop=t.noOp,t.Source.prototype.start=function(e,i,r){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started)this._state.cancel(e),this._state.setStateAtTime(t.State.Started,e),this.restart(e,i,r);else if(this._state.setStateAtTime(t.State.Started,e),this._synced){var n=this._state.get(e);n.offset=t.defaultArg(i,0),n.duration=r;var o=t.Transport.schedule(function(t){this._start(t,i,r)}.bind(this),e);this._scheduled.push(o),t.Transport.state===t.State.Started&&this._syncedStart(this.now(),t.Transport.seconds)}else this._start.apply(this,arguments);return this},t.Source.prototype.stop=function(e){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._synced){var i=t.Transport.schedule(this._stop.bind(this),e);this._scheduled.push(i)}else this._stop.apply(this,arguments);return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this},t.Source.prototype.sync=function(){return this._synced=!0,this._syncedStart=function(e,i){if(i>0){var r=this._state.get(i);if(r&&r.state===t.State.Started&&r.time!==i){var n,o=i-this.toSeconds(r.time);r.duration&&(n=this.toSeconds(r.duration)-o),this._start(e,this.toSeconds(r.offset)+o,n)}}}.bind(this),this._syncedStop=function(e){var i=t.Transport.getSecondsAtTime(Math.max(e-this.sampleTime,0));this._state.getValueAtTime(i)===t.State.Started&&this._stop(e)}.bind(this),t.Transport.on("start loopStart",this._syncedStart),t.Transport.on("stop pause loopEnd",this._syncedStop),this},t.Source.prototype.unsync=function(){this._synced&&(t.Transport.off("stop pause loopEnd",this._syncedStop),t.Transport.off("start loopStart",this._syncedStart)),this._synced=!1;for(var e=0;e0}}),Object.defineProperty(t.Buffer.prototype,"duration",{get:function(){return this._buffer?this._buffer.duration:0}}),Object.defineProperty(t.Buffer.prototype,"length",{get:function(){return this._buffer?this._buffer.length:0}}),Object.defineProperty(t.Buffer.prototype,"numberOfChannels",{get:function(){return this._buffer?this._buffer.numberOfChannels:0}}),t.Buffer.prototype.fromArray=function(t){var e=t[0].length>0,i=e?t.length:1,r=e?t[0].length:t.length,n=this.context.createBuffer(i,r,this.context.sampleRate);e||1!==i||(t=[t]);for(var o=0;o=this._startTime&&(-1===this._stopTime||e<=this._stopTime)?t.State.Started:t.State.Stopped},t.OscillatorNode.prototype.start=function(t){if(-1!==this._startTime)throw new Error("cannot call OscillatorNode.start more than once");this._startTime=this.toSeconds(t),this._oscillator.start(this._startTime);var e=this.context.currentTime;return this._gainNode.gain.cancelScheduledValues(e),this._gainNode.gain.setValueAtTime(0,e),this._gainNode.gain.setValueAtTime(1,this._startTime),this},t.OscillatorNode.prototype.setPeriodicWave=function(t){return this._oscillator.setPeriodicWave(t),this},t.OscillatorNode.prototype.stop=function(t){return this.cancelStop(),this._stopTime=this.toSeconds(t),this._gainNode.gain.setValueAtTime(0,this._stopTime),this.context.clearTimeout(this._timeout),this._timeout=this.context.setTimeout(function(){this._oscillator.stop(this.now()),this.onended()}.bind(this),this._stopTime-this.now()),this},t.OscillatorNode.prototype.cancelStop=function(){return-1!==this._startTime&&(this._gainNode.gain.cancelScheduledValues(this._startTime+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime)),this.context.clearTimeout(this._timeout),this._stopTime=-1),this},Object.defineProperty(t.OscillatorNode.prototype,"type",{get:function(){return this._oscillator.type},set:function(t){this._oscillator.type=t}}),t.OscillatorNode.prototype.dispose=function(){return this.context.clearTimeout(this._timeout),t.AudioNode.prototype.dispose.call(this),this.onended=null,this._oscillator.disconnect(),this._oscillator=null,this._gainNode.dispose(),this._gainNode=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this},t.OscillatorNode}),e(function(t){return t.Oscillator=function(){var e=t.defaults(arguments,["frequency","type"],t.Oscillator);t.Source.call(this,e),this._oscillator=null,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this._wave=null,this._partials=t.defaultArg(e.partials,[1]),this._phase=e.phase,this._type=null,this.type=e.type,this.phase=this._phase,this._readOnly(["frequency","detune"])},t.extend(t.Oscillator,t.Source),t.Oscillator.defaults={type:"sine",frequency:440,detune:0,phase:0,partials:[]},t.Oscillator.Type={Sine:"sine",Triangle:"triangle",Sawtooth:"sawtooth",Square:"square",Custom:"custom"},t.Oscillator.prototype._start=function(e){this._oscillator=new t.OscillatorNode,this._wave?this._oscillator.setPeriodicWave(this._wave):this._oscillator.type=this._type,this._oscillator.connect(this.output),this.frequency.connect(this._oscillator.frequency),this.detune.connect(this._oscillator.detune),e=this.toSeconds(e),this._oscillator.start(e)},t.Oscillator.prototype._stop=function(t){return this._oscillator&&(t=this.toSeconds(t),this._oscillator.stop(t)),this},t.Oscillator.prototype.restart=function(t){return this._oscillator.cancelStop(),this._state.cancel(this.toSeconds(t)),this},t.Oscillator.prototype.syncFrequency=function(){return t.Transport.syncSignal(this.frequency),this},t.Oscillator.prototype.unsyncFrequency=function(){return t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Oscillator.prototype,"type",{get:function(){return this._type},set:function(e){var i=[t.Oscillator.Type.Sine,t.Oscillator.Type.Square,t.Oscillator.Type.Triangle,t.Oscillator.Type.Sawtooth].includes(e);if(0===this._phase&&i)this._wave=null,null!==this._oscillator&&this._oscillator.type;else{var r=this._getRealImaginary(e,this._phase),n=this.context.createPeriodicWave(r[0],r[1]);this._wave=n,null!==this._oscillator&&this._oscillator.setPeriodicWave(this._wave)}this._type=e}}),t.Oscillator.prototype._getRealImaginary=function(e,i){var r=2048,n=new Float32Array(r),o=new Float32Array(r),s=1;if(e===t.Oscillator.Type.Custom)r=s=this._partials.length+1;else{var a=/^(sine|triangle|square|sawtooth)(\d+)$/.exec(e);a&&(s=parseInt(a[2])+1,e=a[1],r=s=Math.max(s,2))}for(var h=1;h>1&1?-1:1):0;break;case t.Oscillator.Type.Custom:l=this._partials[h-1];break;default:throw new TypeError("Tone.Oscillator: invalid type: "+e)}0!==l?(n[h]=-l*Math.sin(i*h),o[h]=l*Math.cos(i*h)):(n[h]=0,o[h]=0)}return[n,o]},t.Oscillator.prototype._inverseFFT=function(t,e,i){for(var r=0,n=t.length,o=0;on&&r=this.values.length&&(this.index=0)):e===t.CtrlPattern.Type.Down?(this.index--,this.index<0&&(this.index=this.values.length-1)):e===t.CtrlPattern.Type.UpDown||e===t.CtrlPattern.Type.DownUp?(this._direction===t.CtrlPattern.Type.Up?this.index++:this.index--,this.index<0?(this.index=1,this._direction=t.CtrlPattern.Type.Up):this.index>=this.values.length&&(this.index=this.values.length-2,this._direction=t.CtrlPattern.Type.Down)):e===t.CtrlPattern.Type.Random?this.index=Math.floor(Math.random()*this.values.length):e===t.CtrlPattern.Type.RandomWalk?Math.random()<.5?(this.index--,this.index=Math.max(this.index,0)):(this.index++,this.index=Math.min(this.index,this.values.length-1)):e===t.CtrlPattern.Type.RandomOnce?(this.index++,this.index>=this.values.length&&(this.index=0,this._shuffleValues())):e===t.CtrlPattern.Type.AlternateUp?(this._direction===t.CtrlPattern.Type.Up?(this.index+=2,this._direction=t.CtrlPattern.Type.Down):(this.index-=1,this._direction=t.CtrlPattern.Type.Up),this.index>=this.values.length&&(this.index=0,this._direction=t.CtrlPattern.Type.Up)):e===t.CtrlPattern.Type.AlternateDown&&(this._direction===t.CtrlPattern.Type.Up?(this.index+=1,this._direction=t.CtrlPattern.Type.Down):(this.index-=2,this._direction=t.CtrlPattern.Type.Up),this.index<0&&(this.index=this.values.length-1,this._direction=t.CtrlPattern.Type.Down)),this.value},t.CtrlPattern.prototype._shuffleValues=function(){var t=[];this._shuffled=[];for(var e=0;e0;){var i=t.splice(Math.floor(t.length*Math.random()),1);this._shuffled.push(i[0])}},t.CtrlPattern.prototype.dispose=function(){this._shuffled=null,this.values=null},t.CtrlPattern}),e(function(t){return t.CtrlRandom=function(){var e=t.defaults(arguments,["min","max"],t.CtrlRandom);t.call(this),this.min=e.min,this.max=e.max,this.integer=e.integer},t.extend(t.CtrlRandom),t.CtrlRandom.defaults={min:0,max:1,integer:!1},Object.defineProperty(t.CtrlRandom.prototype,"value",{get:function(){var t=this.toSeconds(this.min),e=this.toSeconds(this.max),i=Math.random(),r=i*t+(1-i)*e;return this.integer&&(r=Math.floor(r)),r}}),t.CtrlRandom}),e(function(t){return t.Buffers=function(e){var i=Array.prototype.slice.call(arguments);i.shift();var r=t.defaults(i,["onload","baseUrl"],t.Buffers);for(var n in t.call(this),this._buffers={},this.baseUrl=r.baseUrl,this._loadingCount=0,e)this._loadingCount++,this.add(n,e[n],this._bufferLoaded.bind(this,r.onload))},t.extend(t.Buffers),t.Buffers.defaults={onload:t.noOp,baseUrl:""},t.Buffers.prototype.has=function(t){return this._buffers.hasOwnProperty(t)},t.Buffers.prototype.get=function(t){if(this.has(t))return this._buffers[t];throw new Error("Tone.Buffers: no buffer named "+t)},t.Buffers.prototype._bufferLoaded=function(t){this._loadingCount--,0===this._loadingCount&&t&&t(this)},Object.defineProperty(t.Buffers.prototype,"loaded",{get:function(){var t=!0;for(var e in this._buffers){var i=this.get(e);t=t&&i.loaded}return t}}),t.Buffers.prototype.add=function(e,i,r){return r=t.defaultArg(r,t.noOp),i instanceof t.Buffer?(this._buffers[e]=i,r(this)):i instanceof AudioBuffer?(this._buffers[e]=new t.Buffer(i),r(this)):t.isString(i)&&(this._buffers[e]=new t.Buffer(this.baseUrl+i,r)),this},t.Buffers.prototype.dispose=function(){for(var e in t.prototype.dispose.call(this),this._buffers)this._buffers[e].dispose();return this._buffers=null,this},t.Buffers}),e(function(t){var e={};return t.prototype.send=function(i,r){e.hasOwnProperty(i)||(e[i]=this.context.createGain()),r=t.defaultArg(r,0);var n=new t.Gain(r,t.Type.Decibels);return this.connect(n),n.connect(e[i]),n},t.prototype.receive=function(t,i){return e.hasOwnProperty(t)||(e[t]=this.context.createGain()),e[t].connect(this,0,i),this},t.Context.on("init",function(t){t.Buses?e=t.Buses:(e={},t.Buses=e)}),t}),e(function(t){return t.Draw=function(){t.call(this),this._events=new t.Timeline,this.expiration=.25,this.anticipation=.008,this._boundDrawLoop=this._drawLoop.bind(this)},t.extend(t.Draw),t.Draw.prototype.schedule=function(t,e){return this._events.add({callback:t,time:this.toSeconds(e)}),1===this._events.length&&requestAnimationFrame(this._boundDrawLoop),this},t.Draw.prototype.cancel=function(t){return this._events.cancel(this.toSeconds(t)),this},t.Draw.prototype._drawLoop=function(){for(var e=t.now();this._events.length&&this._events.peek().time-this.anticipation<=e;){var i=this._events.shift();e-i.time<=this.expiration&&i.callback()}this._events.length>0&&requestAnimationFrame(this._boundDrawLoop)},t.Draw=new t.Draw,t.Draw}),e(function(t){t.Listener=function(){t.call(this),this._orientation=[0,0,0,0,0,0],this._position=[0,0,0],t.getContext(function(){this.set(e.defaults)}.bind(this))},t.extend(t.Listener),t.Listener.defaults={positionX:0,positionY:0,positionZ:0,forwardX:0,forwardY:0,forwardZ:1,upX:0,upY:1,upZ:0},t.Listener.prototype._rampTimeConstant=.01,t.Listener.prototype.setPosition=function(t,e,i){if(this.context.listener.positionX){var r=this.now();this.context.listener.positionX.setTargetAtTime(t,r,this._rampTimeConstant),this.context.listener.positionY.setTargetAtTime(e,r,this._rampTimeConstant),this.context.listener.positionZ.setTargetAtTime(i,r,this._rampTimeConstant)}else this.context.listener.setPosition(t,e,i);return this._position=Array.prototype.slice.call(arguments),this},t.Listener.prototype.setOrientation=function(t,e,i,r,n,o){if(this.context.listener.forwardX){var s=this.now();this.context.listener.forwardX.setTargetAtTime(t,s,this._rampTimeConstant),this.context.listener.forwardY.setTargetAtTime(e,s,this._rampTimeConstant),this.context.listener.forwardZ.setTargetAtTime(i,s,this._rampTimeConstant),this.context.listener.upX.setTargetAtTime(r,s,this._rampTimeConstant),this.context.listener.upY.setTargetAtTime(n,s,this._rampTimeConstant),this.context.listener.upZ.setTargetAtTime(o,s,this._rampTimeConstant)}else this.context.listener.setOrientation(t,e,i,r,n,o);return this._orientation=Array.prototype.slice.call(arguments),this},Object.defineProperty(t.Listener.prototype,"positionX",{set:function(t){this._position[0]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[0]}}),Object.defineProperty(t.Listener.prototype,"positionY",{set:function(t){this._position[1]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[1]}}),Object.defineProperty(t.Listener.prototype,"positionZ",{set:function(t){this._position[2]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[2]}}),Object.defineProperty(t.Listener.prototype,"forwardX",{set:function(t){this._orientation[0]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[0]}}),Object.defineProperty(t.Listener.prototype,"forwardY",{set:function(t){this._orientation[1]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[1]}}),Object.defineProperty(t.Listener.prototype,"forwardZ",{set:function(t){this._orientation[2]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[2]}}),Object.defineProperty(t.Listener.prototype,"upX",{set:function(t){this._orientation[3]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[3]}}),Object.defineProperty(t.Listener.prototype,"upY",{set:function(t){this._orientation[4]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[4]}}),Object.defineProperty(t.Listener.prototype,"upZ",{set:function(t){this._orientation[5]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[5]}}),t.Listener.prototype.dispose=function(){return this._orientation=null,this._position=null,this};var e=t.Listener;return t.Listener=new e,t.Context.on("init",function(i){i.Listener instanceof e?t.Listener=i.Listener:t.Listener=new e,i.Listener=t.Listener}),t.Listener}),e(function(t){return t.Offline=function(e,i){var r,n=t.context.sampleRate,o=t.context,s=function e(i,r,n,o){o=t.defaultArg(o,0);var s=new t.OfflineContext(2,r,n);t.context=s;var a=i(t.Transport);return s.currentTime>0&&o<1e3?e(i,r,n,++o):{response:a,context:s}}(e,i,n),a=s.response,h=s.context;return r=a instanceof Promise?a.then(function(){return h.render()}):h.render(),t.context=o,r.then(function(e){return new t.Buffer(e)})},t.Offline}),e(function(t){return t.Effect=function(){var e=t.defaults(arguments,["wet"],t.Effect);t.AudioNode.call(this),this.createInsOuts(1,1),this._dryWet=new t.CrossFade(e.wet),this.wet=this._dryWet.fade,this.effectSend=new t.Gain,this.effectReturn=new t.Gain,this.input.connect(this._dryWet.a),this.input.connect(this.effectSend),this.effectReturn.connect(this._dryWet.b),this._dryWet.connect(this.output),this._readOnly(["wet"])},t.extend(t.Effect,t.AudioNode),t.Effect.defaults={wet:1},t.Effect.prototype.connectEffect=function(t){return this.effectSend.chain(t,this.effectReturn),this},t.Effect.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this._dryWet.dispose(),this._dryWet=null,this.effectSend.dispose(),this.effectSend=null,this.effectReturn.dispose(),this.effectReturn=null,this._writable(["wet"]),this.wet=null,this},t.Effect}),e(function(t){return t.AutoFilter=function(){var e=t.defaults(arguments,["frequency","baseFrequency","octaves"],t.AutoFilter);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth}),this.depth=this._lfo.amplitude,this.frequency=this._lfo.frequency,this.filter=new t.Filter(e.filter),this._octaves=0,this.connectEffect(this.filter),this._lfo.connect(this.filter.frequency),this.type=e.type,this._readOnly(["frequency","depth"]),this.octaves=e.octaves,this.baseFrequency=e.baseFrequency},t.extend(t.AutoFilter,t.Effect),t.AutoFilter.defaults={frequency:1,type:"sine",depth:1,baseFrequency:200,octaves:2.6,filter:{type:"lowpass",rolloff:-12,Q:1}},t.AutoFilter.prototype.start=function(t){return this._lfo.start(t),this},t.AutoFilter.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoFilter.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoFilter.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoFilter.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),Object.defineProperty(t.AutoFilter.prototype,"baseFrequency",{get:function(){return this._lfo.min},set:function(t){this._lfo.min=this.toFrequency(t),this.octaves=this._octaves}}),Object.defineProperty(t.AutoFilter.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._lfo.max=this.baseFrequency*Math.pow(2,t)}}),t.AutoFilter.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this.filter.dispose(),this.filter=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null,this},t.AutoFilter}),e(function(t){return t.AutoPanner=function(){var e=t.defaults(arguments,["frequency"],t.AutoPanner);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth,min:-1,max:1}),this.depth=this._lfo.amplitude,this._panner=new t.Panner,this.frequency=this._lfo.frequency,this.connectEffect(this._panner),this._lfo.connect(this._panner.pan),this.type=e.type,this._readOnly(["depth","frequency"])},t.extend(t.AutoPanner,t.Effect),t.AutoPanner.defaults={frequency:1,type:"sine",depth:1},t.AutoPanner.prototype.start=function(t){return this._lfo.start(t),this},t.AutoPanner.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoPanner.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoPanner.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoPanner.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.AutoPanner.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this._panner.dispose(),this._panner=null,this._writable(["depth","frequency"]),this.frequency=null,this.depth=null,this},t.AutoPanner}),e(function(t){return t.AutoWah=function(){var e=t.defaults(arguments,["baseFrequency","octaves","sensitivity"],t.AutoWah);t.Effect.call(this,e),this.follower=new t.Follower(e.follower),this._sweepRange=new t.ScaleExp(0,1,.5),this._baseFrequency=e.baseFrequency,this._octaves=e.octaves,this._inputBoost=new t.Gain,this._bandpass=new t.Filter({rolloff:-48,frequency:0,Q:e.Q}),this._peaking=new t.Filter(0,"peaking"),this._peaking.gain.value=e.gain,this.gain=this._peaking.gain,this.Q=this._bandpass.Q,this.effectSend.chain(this._inputBoost,this.follower,this._sweepRange),this._sweepRange.connect(this._bandpass.frequency),this._sweepRange.connect(this._peaking.frequency),this.effectSend.chain(this._bandpass,this._peaking,this.effectReturn),this._setSweepRange(),this.sensitivity=e.sensitivity,this._readOnly(["gain","Q"])},t.extend(t.AutoWah,t.Effect),t.AutoWah.defaults={baseFrequency:100,octaves:6,sensitivity:0,Q:2,gain:2,follower:{attack:.3,release:.5}},Object.defineProperty(t.AutoWah.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"baseFrequency",{get:function(){return this._baseFrequency},set:function(t){this._baseFrequency=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"sensitivity",{get:function(){return t.gainToDb(1/this._inputBoost.gain.value)},set:function(e){this._inputBoost.gain.value=1/t.dbToGain(e)}}),t.AutoWah.prototype._setSweepRange=function(){this._sweepRange.min=this._baseFrequency,this._sweepRange.max=Math.min(this._baseFrequency*Math.pow(2,this._octaves),this.context.sampleRate/2)},t.AutoWah.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this.follower.dispose(),this.follower=null,this._sweepRange.dispose(),this._sweepRange=null,this._bandpass.dispose(),this._bandpass=null,this._peaking.dispose(),this._peaking=null,this._inputBoost.dispose(),this._inputBoost=null,this._writable(["gain","Q"]),this.gain=null,this.Q=null,this},t.AutoWah}),e(function(t){return t.Modulo=function(e){t.SignalBase.call(this),this.createInsOuts(1,0),this._shaper=new t.WaveShaper(Math.pow(2,16)),this._multiply=new t.Multiply,this._subtract=this.output=new t.Subtract,this._modSignal=new t.Signal(e),this.input.fan(this._shaper,this._subtract),this._modSignal.connect(this._multiply,0,0),this._shaper.connect(this._multiply,0,1),this._multiply.connect(this._subtract,0,1),this._setWaveShaper(e)},t.extend(t.Modulo,t.SignalBase),t.Modulo.prototype._setWaveShaper=function(t){this._shaper.setMap(function(e){return Math.floor((e+1e-4)/t)})},Object.defineProperty(t.Modulo.prototype,"value",{get:function(){return this._modSignal.value},set:function(t){this._modSignal.value=t,this._setWaveShaper(t)}}),t.Modulo.prototype.dispose=function(){return t.SignalBase.prototype.dispose.call(this),this._shaper.dispose(),this._shaper=null,this._multiply.dispose(),this._multiply=null,this._subtract.dispose(),this._subtract=null,this._modSignal.dispose(),this._modSignal=null,this},t.Modulo}),e(function(t){return t.BitCrusher=function(){var e=t.defaults(arguments,["bits"],t.BitCrusher);t.Effect.call(this,e);var i=1/Math.pow(2,e.bits-1);this._subtract=new t.Subtract,this._modulo=new t.Modulo(i),this._bits=e.bits,this.effectSend.fan(this._subtract,this._modulo),this._modulo.connect(this._subtract,0,1),this._subtract.connect(this.effectReturn)},t.extend(t.BitCrusher,t.Effect),t.BitCrusher.defaults={bits:4},Object.defineProperty(t.BitCrusher.prototype,"bits",{get:function(){return this._bits},set:function(t){this._bits=t;var e=1/Math.pow(2,t-1);this._modulo.value=e}}),t.BitCrusher.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._subtract.dispose(),this._subtract=null,this._modulo.dispose(),this._modulo=null,this},t.BitCrusher}),e(function(t){return t.Chebyshev=function(){var e=t.defaults(arguments,["order"],t.Chebyshev);t.Effect.call(this,e),this._shaper=new t.WaveShaper(4096),this._order=e.order,this.connectEffect(this._shaper),this.order=e.order,this.oversample=e.oversample},t.extend(t.Chebyshev,t.Effect),t.Chebyshev.defaults={order:1,oversample:"none"},t.Chebyshev.prototype._getCoefficient=function(t,e,i){return i.hasOwnProperty(e)?i[e]:(i[e]=0===e?0:1===e?t:2*t*this._getCoefficient(t,e-1,i)-this._getCoefficient(t,e-2,i),i[e])},Object.defineProperty(t.Chebyshev.prototype,"order",{get:function(){return this._order},set:function(t){this._order=t;for(var e=new Array(4096),i=e.length,r=0;r=this._startTime&&!this._sourceStopped?t.State.Started:t.State.Stopped},t.BufferSource.prototype.start=function(e,i,r,n,o){if(-1!==this._startTime)throw new Error("Tone.BufferSource can only be started once.");if(!this.buffer.loaded)throw new Error("Tone.BufferSource: buffer is either not set or not loaded.");e=this.toSeconds(e),i=this.loop?t.defaultArg(i,this.loopStart):t.defaultArg(i,0),i=this.toSeconds(i),n=t.defaultArg(n,1),this._gain=n,o=this.toSeconds(t.defaultArg(o,this.fadeIn)),this.fadeIn=o,o>0?(this._gainNode.gain.setValueAtTime(0,e),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(this._gain,e+o):this._gainNode.gain.exponentialApproachValueAtTime(this._gain,e,o)):this._gainNode.gain.setValueAtTime(n,e),this._startTime=e;var s=this.toSeconds(t.defaultArg(r,this.buffer.duration-i%this.buffer.duration));if(s=Math.max(s,0),t.isDefined(r)&&(this.loop||(s=Math.min(s,this.buffer.duration-i%this.buffer.duration)),this.stop(e+s,this.fadeOut)),this.loop){var a=this.loopEnd||this.buffer.duration,h=this.loopStart;i>=a&&(i=(i-h)%(a-h)+h)}return this._source.buffer=this.buffer.get(),this._source.loopEnd=this.loopEnd||this.buffer.duration,ithis.sampleTime?(this._gainNode.gain.setValueAtTime(this._gain,n),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(0,e):this._gainNode.gain.exponentialApproachValueAtTime(0,n,i)):this._gainNode.gain.setValueAtTime(0,e),t.context.clearTimeout(this._onendedTimeout),this._onendedTimeout=t.context.setTimeout(this._onended.bind(this),this._stopTime-this.now()),this}},t.BufferSource.prototype.cancelStop=function(){if(-1!==this._startTime&&!this._sourceStopped){var t=this.toSeconds(this.fadeIn);this._gainNode.gain.cancelScheduledValues(this._startTime+t+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime+t+this.sampleTime)),this.context.clearTimeout(this._onendedTimeout),this._stopTime=-1}return this},t.BufferSource.prototype._onended=function(){if(!this._sourceStopped){this._sourceStopped=!0;var t="exponential"===this.curve?2*this.fadeOut:0;this._sourceStarted&&-1!==this._stopTime&&this._source.stop(this._stopTime+t),this.onended(this)}},Object.defineProperty(t.BufferSource.prototype,"loopStart",{get:function(){return this._source.loopStart},set:function(t){this._source.loopStart=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"loopEnd",{get:function(){return this._source.loopEnd},set:function(t){this._source.loopEnd=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"buffer",{get:function(){return this._buffer},set:function(t){this._buffer.set(t)}}),Object.defineProperty(t.BufferSource.prototype,"loop",{get:function(){return this._source.loop},set:function(t){this._source.loop=t,this.cancelStop()}}),t.BufferSource.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.onended=null,this._source.onended=null,this._source.disconnect(),this._source=null,this._gainNode.dispose(),this._gainNode=null,this._buffer.dispose(),this._buffer=null,this._startTime=-1,this.playbackRate=null,t.context.clearTimeout(this._onendedTimeout),this},t.BufferSource}),e(function(t){t.Noise=function(){var e=t.defaults(arguments,["type"],t.Noise);t.Source.call(this,e),this._source=null,this._type=e.type,this._playbackRate=e.playbackRate},t.extend(t.Noise,t.Source),t.Noise.defaults={type:"white",playbackRate:1},Object.defineProperty(t.Noise.prototype,"type",{get:function(){return this._type},set:function(e){if(this._type!==e){if(!(e in i))throw new TypeError("Tone.Noise: invalid type: "+e);if(this._type=e,this.state===t.State.Started){var r=this.now();this._stop(r),this._start(r)}}}}),Object.defineProperty(t.Noise.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._source&&(this._source.playbackRate.value=t)}}),t.Noise.prototype._start=function(e){var r=i[this._type];this._source=new t.BufferSource(r).connect(this.output),this._source.loop=!0,this._source.playbackRate.value=this._playbackRate,this._source.start(this.toSeconds(e),Math.random()*(r.duration-.001))},t.Noise.prototype._stop=function(t){this._source&&(this._source.stop(this.toSeconds(t)),this._source=null)},t.Noise.prototype.restart=function(t){this._stop(t),this._start(t)},t.Noise.prototype.dispose=function(){return t.Source.prototype.dispose.call(this),null!==this._source&&(this._source.disconnect(),this._source=null),this._buffer=null,this};var e={pink:function(){for(var t=[],e=0;e<2;e++){var i,r,n,o,s,a,h,l=new Float32Array(220500);t[e]=l,i=r=n=o=s=a=h=0;for(var u=0;u<220500;u++){var c=2*Math.random()-1;i=.99886*i+.0555179*c,r=.99332*r+.0750759*c,n=.969*n+.153852*c,o=.8665*o+.3104856*c,s=.55*s+.5329522*c,a=-.7616*a-.016898*c,l[u]=i+r+n+o+s+a+h+.5362*c,l[u]*=.11,h=.115926*c}}return t}(),brown:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0,n=0;n<220500;n++){var o=2*Math.random()-1;i[n]=(r+.02*o)/1.02,r=i[n],i[n]*=3.5}}return t}(),white:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0;r<220500;r++)i[r]=2*Math.random()-1}return t}()},i={};function r(){for(var r in e)i[r]=(new t.Buffer).fromArray(e[r])}return t.getContext(r),t.Context.on("init",r),t.Noise}),e(function(t){return t.Reverb=function(){var e=t.defaults(arguments,["decay"],t.Reverb);t.Effect.call(this,e),this._convolver=this.context.createConvolver(),this.decay=e.decay,this.preDelay=e.preDelay,this.connectEffect(this._convolver)},t.extend(t.Reverb,t.Effect),t.Reverb.defaults={decay:1.5,preDelay:.01},t.Reverb.prototype.generate=function(){return t.Offline(function(){var e=new t.Noise,i=new t.Noise,r=new t.Merge;e.connect(r.left),i.connect(r.right);var n=(new t.Gain).toMaster();r.connect(n),e.start(0),i.start(0),n.gain.setValueAtTime(0,0),n.gain.linearRampToValueAtTime(1,this.preDelay),n.gain.exponentialApproachValueAtTime(0,this.preDelay,this.decay-this.preDelay)}.bind(this),this.decay).then(function(t){return this._convolver.buffer=t.get(),this}.bind(this))},t.Reverb.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._convolver.disconnect(),this._convolver=null,this},t.Reverb}),e(function(t){return t.StereoFeedbackEffect=function(){var e=t.defaults(arguments,["feedback"],t.FeedbackEffect);t.StereoEffect.call(this,e),this.feedback=new t.Signal(e.feedback,t.Type.NormalRange),this._feedbackL=new t.Gain,this._feedbackR=new t.Gain,this.effectReturnL.chain(this._feedbackL,this.effectSendL),this.effectReturnR.chain(this._feedbackR,this.effectSendR),this.feedback.fan(this._feedbackL.gain,this._feedbackR.gain),this._readOnly(["feedback"])},t.extend(t.StereoFeedbackEffect,t.StereoEffect),t.StereoFeedbackEffect.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["feedback"]),this.feedback.dispose(),this.feedback=null,this._feedbackL.dispose(),this._feedbackL=null,this._feedbackR.dispose(),this._feedbackR=null,this},t.StereoFeedbackEffect}),e(function(t){return t.StereoWidener=function(){var e=t.defaults(arguments,["width"],t.StereoWidener);t.MidSideEffect.call(this,e),this.width=new t.Signal(e.width,t.Type.NormalRange),this._readOnly(["width"]),this._twoTimesWidthMid=new t.Multiply(2),this._twoTimesWidthSide=new t.Multiply(2),this._midMult=new t.Multiply,this._twoTimesWidthMid.connect(this._midMult,0,1),this.midSend.chain(this._midMult,this.midReturn),this._oneMinusWidth=new t.Subtract,this._oneMinusWidth.connect(this._twoTimesWidthMid),this.context.getConstant(1).connect(this._oneMinusWidth,0,0),this.width.connect(this._oneMinusWidth,0,1),this._sideMult=new t.Multiply,this.width.connect(this._twoTimesWidthSide),this._twoTimesWidthSide.connect(this._sideMult,0,1),this.sideSend.chain(this._sideMult,this.sideReturn)},t.extend(t.StereoWidener,t.MidSideEffect),t.StereoWidener.defaults={width:.5},t.StereoWidener.prototype.dispose=function(){return t.MidSideEffect.prototype.dispose.call(this),this._writable(["width"]),this.width.dispose(),this.width=null,this._midMult.dispose(),this._midMult=null,this._sideMult.dispose(),this._sideMult=null,this._twoTimesWidthMid.dispose(),this._twoTimesWidthMid=null,this._twoTimesWidthSide.dispose(),this._twoTimesWidthSide=null,this._oneMinusWidth.dispose(),this._oneMinusWidth=null,this},t.StereoWidener}),e(function(t){return t.Tremolo=function(){var e=t.defaults(arguments,["frequency","depth"],t.Tremolo);t.StereoEffect.call(this,e),this._lfoL=new t.LFO({phase:e.spread,min:1,max:0}),this._lfoR=new t.LFO({phase:e.spread,min:1,max:0}),this._amplitudeL=new t.Gain,this._amplitudeR=new t.Gain,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.depth=new t.Signal(e.depth,t.Type.NormalRange),this._readOnly(["frequency","depth"]),this.effectSendL.chain(this._amplitudeL,this.effectReturnL),this.effectSendR.chain(this._amplitudeR,this.effectReturnR),this._lfoL.connect(this._amplitudeL.gain),this._lfoR.connect(this._amplitudeR.gain),this.frequency.fan(this._lfoL.frequency,this._lfoR.frequency),this.depth.fan(this._lfoR.amplitude,this._lfoL.amplitude),this.type=e.type,this.spread=e.spread},t.extend(t.Tremolo,t.StereoEffect),t.Tremolo.defaults={frequency:10,type:"sine",depth:.5,spread:180},t.Tremolo.prototype.start=function(t){return this._lfoL.start(t),this._lfoR.start(t),this},t.Tremolo.prototype.stop=function(t){return this._lfoL.stop(t),this._lfoR.stop(t),this},t.Tremolo.prototype.sync=function(e){return this._lfoL.sync(e),this._lfoR.sync(e),t.Transport.syncSignal(this.frequency),this},t.Tremolo.prototype.unsync=function(){return this._lfoL.unsync(),this._lfoR.unsync(),t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Tremolo.prototype,"type",{get:function(){return this._lfoL.type},set:function(t){this._lfoL.type=t,this._lfoR.type=t}}),Object.defineProperty(t.Tremolo.prototype,"spread",{get:function(){return this._lfoR.phase-this._lfoL.phase},set:function(t){this._lfoL.phase=90-t/2,this._lfoR.phase=t/2+90}}),t.Tremolo.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["frequency","depth"]),this._lfoL.dispose(),this._lfoL=null,this._lfoR.dispose(),this._lfoR=null,this._amplitudeL.dispose(),this._amplitudeL=null,this._amplitudeR.dispose(),this._amplitudeR=null,this.frequency=null,this.depth=null,this},t.Tremolo}),e(function(t){return t.Vibrato=function(){var e=t.defaults(arguments,["frequency","depth"],t.Vibrato);t.Effect.call(this,e),this._delayNode=new t.Delay(0,e.maxDelay),this._lfo=new t.LFO({type:e.type,min:0,max:e.maxDelay,frequency:e.frequency,phase:-90}).start().connect(this._delayNode.delayTime),this.frequency=this._lfo.frequency,this.depth=this._lfo.amplitude,this.depth.value=e.depth,this._readOnly(["frequency","depth"]),this.effectSend.chain(this._delayNode,this.effectReturn)},t.extend(t.Vibrato,t.Effect),t.Vibrato.defaults={maxDelay:.005,frequency:5,depth:.1,type:"sine"},Object.defineProperty(t.Vibrato.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.Vibrato.prototype.dispose=function(){t.Effect.prototype.dispose.call(this),this._delayNode.dispose(),this._delayNode=null,this._lfo.dispose(),this._lfo=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null},t.Vibrato}),e(function(t){return t.Event=function(){var e=t.defaults(arguments,["callback","value"],t.Event);t.call(this),this._loop=e.loop,this.callback=e.callback,this.value=e.value,this._loopStart=this.toTicks(e.loopStart),this._loopEnd=this.toTicks(e.loopEnd),this._state=new t.TimelineState(t.State.Stopped),this._playbackRate=1,this._startOffset=0,this._probability=e.probability,this._humanize=e.humanize,this.mute=e.mute,this.playbackRate=e.playbackRate},t.extend(t.Event),t.Event.defaults={callback:t.noOp,loop:!1,loopEnd:"1m",loopStart:0,playbackRate:1,value:null,probability:1,mute:!1,humanize:!1},t.Event.prototype._rescheduleEvents=function(e){return e=t.defaultArg(e,-1),this._state.forEachFrom(e,function(e){var i;if(e.state===t.State.Started){t.isDefined(e.id)&&t.Transport.clear(e.id);var r=e.time+Math.round(this.startOffset/this._playbackRate);if(this._loop){i=1/0,t.isNumber(this._loop)&&(i=this._loop*this._getLoopDuration());var n=this._state.getAfter(r);null!==n&&(i=Math.min(i,n.time-r)),i!==1/0&&(this._state.setStateAtTime(t.State.Stopped,r+i+1),i=t.Ticks(i));var o=t.Ticks(this._getLoopDuration());e.id=t.Transport.scheduleRepeat(this._tick.bind(this),o,t.Ticks(r),i)}else e.id=t.Transport.schedule(this._tick.bind(this),t.Ticks(r))}}.bind(this)),this},Object.defineProperty(t.Event.prototype,"state",{get:function(){return this._state.getValueAtTime(t.Transport.ticks)}}),Object.defineProperty(t.Event.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t}}),Object.defineProperty(t.Event.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t}}),Object.defineProperty(t.Event.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t}}),t.Event.prototype.start=function(e){return e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Stopped&&(this._state.add({state:t.State.Started,time:e,id:void 0}),this._rescheduleEvents(e)),this},t.Event.prototype.stop=function(e){if(this.cancel(e),e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Started){this._state.setStateAtTime(t.State.Stopped,e);var i=this._state.getBefore(e),r=e;null!==i&&(r=i.time),this._rescheduleEvents(r)}return this},t.Event.prototype.cancel=function(e){return e=t.defaultArg(e,-1/0),e=this.toTicks(e),this._state.forEachFrom(e,function(e){t.Transport.clear(e.id)}),this._state.cancel(e),this},t.Event.prototype._tick=function(e){var i=t.Transport.getTicksAtTime(e);if(!this.mute&&this._state.getValueAtTime(i)===t.State.Started){if(this.probability<1&&Math.random()>this.probability)return;if(this.humanize){var r=.02;t.isBoolean(this.humanize)||(r=this.toSeconds(this.humanize)),e+=(2*Math.random()-1)*r}this.callback(e,this.value)}},t.Event.prototype._getLoopDuration=function(){return Math.round((this._loopEnd-this._loopStart)/this._playbackRate)},Object.defineProperty(t.Event.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"progress",{get:function(){if(this._loop){var e=t.Transport.ticks,i=this._state.get(e);if(null!==i&&i.state===t.State.Started){var r=this._getLoopDuration();return(e-i.time)%r/r}return 0}return 0}}),t.Event.prototype.dispose=function(){this.cancel(),this._state.dispose(),this._state=null,this.callback=null,this.value=null},t.Event}),e(function(t){return t.Loop=function(){var e=t.defaults(arguments,["callback","interval"],t.Loop);t.call(this),this._event=new t.Event({callback:this._tick.bind(this),loop:!0,loopEnd:e.interval,playbackRate:e.playbackRate,probability:e.probability}),this.callback=e.callback,this.iterations=e.iterations},t.extend(t.Loop),t.Loop.defaults={interval:"4n",callback:t.noOp,playbackRate:1,iterations:1/0,probability:!0,mute:!1},t.Loop.prototype.start=function(t){return this._event.start(t),this},t.Loop.prototype.stop=function(t){return this._event.stop(t),this},t.Loop.prototype.cancel=function(t){return this._event.cancel(t),this},t.Loop.prototype._tick=function(t){this.callback(t)},Object.defineProperty(t.Loop.prototype,"state",{get:function(){return this._event.state}}),Object.defineProperty(t.Loop.prototype,"progress",{get:function(){return this._event.progress}}),Object.defineProperty(t.Loop.prototype,"interval",{get:function(){return this._event.loopEnd},set:function(t){this._event.loopEnd=t}}),Object.defineProperty(t.Loop.prototype,"playbackRate",{get:function(){return this._event.playbackRate},set:function(t){this._event.playbackRate=t}}),Object.defineProperty(t.Loop.prototype,"humanize",{get:function(){return this._event.humanize},set:function(t){this._event.humanize=t}}),Object.defineProperty(t.Loop.prototype,"probability",{get:function(){return this._event.probability},set:function(t){this._event.probability=t}}),Object.defineProperty(t.Loop.prototype,"mute",{get:function(){return this._event.mute},set:function(t){this._event.mute=t}}),Object.defineProperty(t.Loop.prototype,"iterations",{get:function(){return!0===this._event.loop?1/0:this._event.loop},set:function(t){this._event.loop=t===1/0||t}}),t.Loop.prototype.dispose=function(){this._event.dispose(),this._event=null,this.callback=null},t.Loop}),e(function(t){return t.Part=function(){var e=t.defaults(arguments,["callback","events"],t.Part);t.Event.call(this,e),this._events=[];for(var i=0;i=this._loopStart&&e.startOffset=r&&(e.loop=!1,e.start(t.Ticks(i))):e.startOffset>=r&&e.start(t.Ticks(i))},Object.defineProperty(t.Part.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t,this._forEach(function(t){t.startOffset+=this._startOffset})}}),t.Part.prototype.stop=function(e){var i=this.toTicks(e);return this._state.cancel(i),this._state.setStateAtTime(t.State.Stopped,i),this._forEach(function(t){t.stop(e)}),this},t.Part.prototype.at=function(e,i){e=t.TransportTime(e);for(var r=t.Ticks(1).toSeconds(),n=0;n=0;r--){var n=this._events[r];n instanceof t.Part?n.remove(e,i):n.startOffset===e&&(t.isUndef(i)||t.isDefined(i)&&n.value===i)&&(this._events.splice(r,1),n.dispose())}return this},t.Part.prototype.removeAll=function(){return this._forEach(function(t){t.dispose()}),this._events=[],this},t.Part.prototype.cancel=function(t){return this._forEach(function(e){e.cancel(t)}),this._state.cancel(this.toTicks(t)),this},t.Part.prototype._forEach=function(e,i){if(this._events){i=t.defaultArg(i,this);for(var r=this._events.length-1;r>=0;r--){var n=this._events[r];n instanceof t.Part?n._forEach(e,i):e.call(i,n)}}return this},t.Part.prototype._setAll=function(t,e){this._forEach(function(i){i[t]=e})},t.Part.prototype._tick=function(t,e){this.mute||this.callback(t,e)},t.Part.prototype._testLoopBoundries=function(e){e.startOffset=this._loopEnd?e.cancel(0):e.state===t.State.Stopped&&this._restartEvent(e)},Object.defineProperty(t.Part.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t,this._setAll("probability",t)}}),Object.defineProperty(t.Part.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t,this._setAll("humanize",t)}}),Object.defineProperty(t.Part.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._forEach(function(e){e._loopStart=this._loopStart,e._loopEnd=this._loopEnd,e.loop=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._forEach(function(e){e.loopEnd=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._forEach(function(t){t.loopStart=this.loopStart,this._testLoopBoundries(t)})}}),Object.defineProperty(t.Part.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._setAll("playbackRate",t)}}),Object.defineProperty(t.Part.prototype,"length",{get:function(){return this._events.length}}),t.Part.prototype.dispose=function(){return this.removeAll(),this._state.dispose(),this._state=null,this.callback=null,this._events=null,this},t.Part}),e(function(t){return t.Pattern=function(){var e=t.defaults(arguments,["callback","values","pattern"],t.Pattern);t.Loop.call(this,e),this._pattern=new t.CtrlPattern({values:e.values,type:e.pattern,index:e.index})},t.extend(t.Pattern,t.Loop),t.Pattern.defaults={pattern:t.CtrlPattern.Type.Up,callback:t.noOp,values:[]},t.Pattern.prototype._tick=function(t){this.callback(t,this._pattern.value),this._pattern.next()},Object.defineProperty(t.Pattern.prototype,"index",{get:function(){return this._pattern.index},set:function(t){this._pattern.index=t}}),Object.defineProperty(t.Pattern.prototype,"values",{get:function(){return this._pattern.values},set:function(t){this._pattern.values=t}}),Object.defineProperty(t.Pattern.prototype,"value",{get:function(){return this._pattern.value}}),Object.defineProperty(t.Pattern.prototype,"pattern",{get:function(){return this._pattern.type},set:function(t){this._pattern.type=t}}),t.Pattern.prototype.dispose=function(){t.Loop.prototype.dispose.call(this),this._pattern.dispose(),this._pattern=null},t.Pattern}),e(function(t){return t.Sequence=function(){var e=t.defaults(arguments,["callback","events","subdivision"],t.Sequence),i=e.events;if(delete e.events,t.Part.call(this,e),this._subdivision=this.toTicks(e.subdivision),t.isUndef(e.loopEnd)&&t.isDefined(i)&&(this._loopEnd=i.length*this._subdivision),this._loop=!0,t.isDefined(i))for(var r=0;r1){var e=-t/2,i=t/(this._oscillators.length-1);this._forEach(function(t,r){t.detune.value=e+i*r})}}}),Object.defineProperty(t.FatOscillator.prototype,"count",{get:function(){return this._oscillators.length},set:function(e){if(e=Math.max(e,1),this._oscillators.length!==e){this._forEach(function(t){t.dispose()}),this._oscillators=[];for(var i=0;i0&&this.getLevelAtTime(e)>.05){var i=this.toSeconds(this.portamento);this.frequency.exponentialRampTo(t,i,e)}else this.frequency.setValueAtTime(t,e);return this},t.Monophonic}),e(function(t){return t.Synth=function(e){e=t.defaultArg(e,t.Synth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","frequency","detune","envelope"])},t.extend(t.Synth,t.Monophonic),t.Synth.defaults={oscillator:{type:"triangle"},envelope:{attack:.005,decay:.1,sustain:.3,release:1}},t.Synth.prototype._triggerEnvelopeAttack=function(t,e){return this.envelope.triggerAttack(t,e),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.Synth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.Synth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.frequency=null,this.detune=null,this},t.Synth}),e(function(t){return t.AMSynth=function(e){e=t.defaultArg(e,t.AMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth,this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth,this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this._modulationScale=new t.AudioToGain,this._modulationNode=new t.Gain,this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.chain(this._modulationScale,this._modulationNode.gain),this._carrier.chain(this._modulationNode,this.output),this._readOnly(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.AMSynth,t.Monophonic),t.AMSynth.defaults={harmonicity:3,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.AMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.AMSynth.prototype._triggerEnvelopeRelease=function(t){return this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.AMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationScale.dispose(),this._modulationScale=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.AMSynth}),e(function(t){return t.MonoSynth=function(e){e=t.defaultArg(e,t.MonoSynth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.filter=new t.Filter(e.filter),this.filterEnvelope=new t.FrequencyEnvelope(e.filterEnvelope),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.filter,this.envelope,this.output),this.filterEnvelope.connect(this.filter.frequency),this._readOnly(["oscillator","frequency","detune","filter","filterEnvelope","envelope"])},t.extend(t.MonoSynth,t.Monophonic),t.MonoSynth.defaults={frequency:"C4",detune:0,oscillator:{type:"square"},filter:{Q:6,type:"lowpass",rolloff:-24},envelope:{attack:.005,decay:.1,sustain:.9,release:1},filterEnvelope:{attack:.06,decay:.2,sustain:.5,release:2,baseFrequency:200,octaves:7,exponent:2}},t.MonoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.envelope.triggerAttack(t,e),this.filterEnvelope.triggerAttack(t),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.MonoSynth.prototype._triggerEnvelopeRelease=function(t){return this.envelope.triggerRelease(t),this.filterEnvelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MonoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","filter","filterEnvelope","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.filterEnvelope.dispose(),this.filterEnvelope=null,this.filter.dispose(),this.filter=null,this.frequency=null,this.detune=null,this},t.MonoSynth}),e(function(t){return t.DuoSynth=function(e){e=t.defaultArg(e,t.DuoSynth.defaults),t.Monophonic.call(this,e),this.voice0=new t.MonoSynth(e.voice0),this.voice0.volume.value=-10,this.voice1=new t.MonoSynth(e.voice1),this.voice1.volume.value=-10,this._vibrato=new t.LFO(e.vibratoRate,-50,50),this._vibrato.start(),this.vibratoRate=this._vibrato.frequency,this._vibratoGain=new t.Gain(e.vibratoAmount,t.Type.Positive),this.vibratoAmount=this._vibratoGain.gain,this.frequency=new t.Signal(440,t.Type.Frequency),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.frequency.connect(this.voice0.frequency),this.frequency.chain(this.harmonicity,this.voice1.frequency),this._vibrato.connect(this._vibratoGain),this._vibratoGain.fan(this.voice0.detune,this.voice1.detune),this.voice0.connect(this.output),this.voice1.connect(this.output),this._readOnly(["voice0","voice1","frequency","vibratoAmount","vibratoRate"])},t.extend(t.DuoSynth,t.Monophonic),t.DuoSynth.defaults={vibratoAmount:.5,vibratoRate:5,harmonicity:1.5,voice0:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}},voice1:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}}},t.DuoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.voice0._triggerEnvelopeAttack(t,e),this.voice1._triggerEnvelopeAttack(t,e),this},t.DuoSynth.prototype._triggerEnvelopeRelease=function(t){return this.voice0._triggerEnvelopeRelease(t),this.voice1._triggerEnvelopeRelease(t),this},t.DuoSynth.prototype.getLevelAtTime=function(t){return(this.voice0.getLevelAtTime(t)+this.voice1.getLevelAtTime(t))/2},t.DuoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["voice0","voice1","frequency","vibratoAmount","vibratoRate"]),this.voice0.dispose(),this.voice0=null,this.voice1.dispose(),this.voice1=null,this.frequency.dispose(),this.frequency=null,this._vibratoGain.dispose(),this._vibratoGain=null,this._vibrato=null,this.harmonicity.dispose(),this.harmonicity=null,this.vibratoAmount.dispose(),this.vibratoAmount=null,this.vibratoRate=null,this},t.DuoSynth}),e(function(t){return t.FMSynth=function(e){e=t.defaultArg(e,t.FMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth(e.carrier),this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth(e.modulator),this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.modulationIndex=new t.Multiply(e.modulationIndex),this.modulationIndex.units=t.Type.Positive,this._modulationNode=new t.Gain(0),this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.frequency.chain(this.modulationIndex,this._modulationNode),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.connect(this._modulationNode.gain),this._modulationNode.connect(this._carrier.frequency),this._carrier.connect(this.output),this._readOnly(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.FMSynth,t.Monophonic),t.FMSynth.defaults={harmonicity:3,modulationIndex:10,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.FMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.FMSynth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.FMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.modulationIndex.dispose(),this.modulationIndex=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.FMSynth}),e(function(t){return t.MembraneSynth=function(e){e=t.defaultArg(e,t.MembraneSynth.defaults),t.Instrument.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.octaves=e.octaves,this.pitchDecay=e.pitchDecay,this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","envelope"])},t.extend(t.MembraneSynth,t.Instrument),t.MembraneSynth.defaults={pitchDecay:.05,octaves:10,oscillator:{type:"sine"},envelope:{attack:.001,decay:.4,sustain:.01,release:1.4,attackCurve:"exponential"}},t.MembraneSynth.prototype.triggerAttack=function(t,e,i){e=this.toSeconds(e);var r=(t=this.toFrequency(t))*this.octaves;return this.oscillator.frequency.setValueAtTime(r,e),this.oscillator.frequency.exponentialRampToValueAtTime(t,e+this.toSeconds(this.pitchDecay)),this.envelope.triggerAttack(e,i),this.oscillator.start(e),this},t.MembraneSynth.prototype.triggerRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MembraneSynth.prototype.dispose=function(){return t.Instrument.prototype.dispose.call(this),this._writable(["oscillator","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this},t.MembraneSynth}),e(function(t){var e=[1,1.483,1.932,2.546,2.63,3.897];return t.MetalSynth=function(i){i=t.defaultArg(i,t.MetalSynth.defaults),t.Instrument.call(this,i),this.frequency=new t.Signal(i.frequency,t.Type.Frequency),this._oscillators=[],this._freqMultipliers=[],this._amplitue=new t.Gain(0).connect(this.output),this._highpass=new t.Filter({type:"highpass",Q:-3.0102999566398125}).connect(this._amplitue),this._octaves=i.octaves,this._filterFreqScaler=new t.Scale(i.resonance,7e3),this.envelope=new t.Envelope({attack:i.envelope.attack,attackCurve:"linear",decay:i.envelope.decay,sustain:0,release:i.envelope.release}).chain(this._filterFreqScaler,this._highpass.frequency),this.envelope.connect(this._amplitue.gain);for(var r=0;re&&(o.voice.triggerRelease(e),o.release=e)}return this},t.PolySynth.prototype.sync=function(){return this._syncMethod("triggerAttack",1),this._syncMethod("triggerRelease",1),this},t.PolySynth.prototype.set=function(t,e,i){for(var r=0;rt&&(i.release=t,i.voice.triggerRelease(t))}return this},t.PolySynth.prototype.dispose=function(){t.Instrument.prototype.dispose.call(this);for(var e=0;e0)r=i[0];else if(!r&&t.isDefined(e))throw new Error("Tone.UserMedia: no matching device: "+e);this._device=r;var n={audio:{echoCancellation:!1,sampleRate:this.context.sampleRate}};return r&&(n.audio.deviceId=r.deviceId),navigator.mediaDevices.getUserMedia(n).then(function(t){return this._stream||(this._stream=t,this._mediaStream=this.context.createMediaStreamSource(t),this._mediaStream.connect(this.output)),this}.bind(this))}.bind(this))},t.UserMedia.prototype.close=function(){return this._stream&&(this._stream.getAudioTracks().forEach(function(t){t.stop()}),this._stream=null,this._mediaStream.disconnect(),this._mediaStream=null),this._device=null,this},t.UserMedia.enumerateDevices=function(){return navigator.mediaDevices.enumerateDevices().then(function(t){return t.filter(function(t){return"audioinput"===t.kind})})},Object.defineProperty(t.UserMedia.prototype,"state",{get:function(){return this._stream&&this._stream.active?t.State.Started:t.State.Stopped}}),Object.defineProperty(t.UserMedia.prototype,"deviceId",{get:function(){if(this._device)return this._device.deviceId}}),Object.defineProperty(t.UserMedia.prototype,"groupId",{get:function(){if(this._device)return this._device.groupId}}),Object.defineProperty(t.UserMedia.prototype,"label",{get:function(){if(this._device)return this._device.label}}),Object.defineProperty(t.UserMedia.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.UserMedia.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.close(),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null,this},Object.defineProperty(t.UserMedia,"supported",{get:function(){return t.isDefined(navigator.mediaDevices)&&t.isFunction(navigator.mediaDevices.getUserMedia)}}),t.UserMedia}),e(function(t){return t.Midi=function(e,i){if(!(this instanceof t.Midi))return new t.Midi(e,i);t.Frequency.call(this,e,i)},t.extend(t.Midi,t.Frequency),t.Midi.prototype._defaultUnits="midi",t.Midi.prototype._frequencyToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._frequencyToUnits.call(this,e))},t.Midi.prototype._ticksToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._ticksToUnits.call(this,e))},t.Midi.prototype._beatsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._beatsToUnits.call(this,e))},t.Midi.prototype._secondsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._secondsToUnits.call(this,e))},t.Midi.prototype.toMidi=function(){return this.valueOf()},t.Midi.prototype.toFrequency=function(){return t.Frequency.mtof(this.toMidi())},t.Midi.prototype.transpose=function(t){return new this.constructor(this.toMidi()+t)},t.Midi}),t}()}.call(e,i,e,t))||(t.exports=r)},function(t,e,i){(function(e){var i;t.exports=function t(e,r,n){function o(a,h){if(!r[a]){if(!e[a]){var l="function"==typeof i&&i;if(!h&&l)return i(a,!0);if(s)return s(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var c=r[a]={exports:{}};e[a][0].call(c.exports,function(t){var i=e[a][1][t];return o(i||t)},c,c.exports,t,e,r,n)}return r[a].exports}for(var s="function"==typeof i&&i,a=0;a0)throw new Error("Invalid string. Length must be a multiple of 4");var u=t.length;h="="===t.charAt(u-2)?2:"="===t.charAt(u-1)?1:0,l=new i(3*t.length/4-h),s=h>0?t.length-4:t.length;var c=0;for(n=0,o=0;n>16),r((65280&a)>>8),r(255&a);return 2===h?r(255&(a=e(t.charAt(n))<<2|e(t.charAt(n+1))>>4)):1===h&&(r((a=e(t.charAt(n))<<10|e(t.charAt(n+1))<<4|e(t.charAt(n+2))>>2)>>8&255),r(255&a)),l},t.fromByteArray=function(t){function e(t){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t)}function i(t){return e(t>>18&63)+e(t>>12&63)+e(t>>6&63)+e(63&t)}var r,n,o,s=t.length%3,a="";for(r=0,o=t.length-s;r>2),a+=e(n<<4&63),a+="==";break;case 2:n=(t[t.length-2]<<8)+t[t.length-1],a+=e(n>>10),a+=e(n>>4&63),a+=e(n<<2&63),a+="="}return a}}(void 0===i?this.base64js={}:i)},{}],2:[function(t,e,i){},{}],3:[function(t,i,r){(function(e){"use strict";function i(){return n.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function n(t){return this instanceof n?(n.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof t?function(t,e){if(t=s(t,e<0?0:0|a(e)),!n.TYPED_ARRAY_SUPPORT)for(var i=0;i1?arguments[1]:"utf8"):function(t,e){if(n.isBuffer(e))return function(t,e){var i=0|a(e.length);return t=s(t,i),e.copy(t,0,0,i),t}(t,e);if(F(e))return function(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r1?new n(t,arguments[1]):new n(t)}function o(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r>>1&&(t.parent=I),t}function a(t){if(t>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|t}function h(t,e){"string"!=typeof t&&(t=""+t);var i=t.length;if(0===i)return 0;for(var r=!1;;)switch(e){case"ascii":case"binary":case"raw":case"raws":return i;case"utf8":case"utf-8":return k(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return C(t).length;default:if(r)return k(t).length;e=(""+e).toLowerCase(),r=!0}}function l(t,e,i,r){i=Number(i)||0;var n=t.length-i;r?(r=Number(r))>n&&(r=n):r=n;var o=e.length;if(o%2!=0)throw new Error("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,n=i%256,o.push(n),o.push(r);return o}(e,t.length-i),t,i,r)}function m(t,e,i){return 0===e&&i===t.length?O.fromByteArray(t):O.fromByteArray(t.slice(e,i))}function y(t,e,i){i=Math.min(t.length,i);for(var r=[],n=e;n239?4:l>223?3:l>191?2:1;if(n+c<=i)switch(c){case 1:l<128&&(u=l);break;case 2:128==(192&(o=t[n+1]))&&(h=(31&l)<<6|63&o)>127&&(u=h);break;case 3:o=t[n+1],s=t[n+2],128==(192&o)&&128==(192&s)&&(h=(15&l)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(u=h);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&l)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(u=h)}null===u?(u=65533,c=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),n+=c}return function(t){var e=t.length;if(e<=D)return String.fromCharCode.apply(String,t);for(var i="",r=0;rr)&&(i=r);for(var n="",o=e;oi)throw new RangeError("Trying to access beyond buffer length")}function x(t,e,i,r,o,s){if(!n.isBuffer(t))throw new TypeError("buffer must be a Buffer instance");if(e>o||et.length)throw new RangeError("index out of range")}function w(t,e,i,r){e<0&&(e=65535+e+1);for(var n=0,o=Math.min(t.length-i,2);n>>8*(r?n:1-n)}function T(t,e,i,r){e<0&&(e=4294967295+e+1);for(var n=0,o=Math.min(t.length-i,4);n>>8*(r?n:3-n)&255}function M(t,e,i,r,n,o){if(e>n||et.length)throw new RangeError("index out of range");if(i<0)throw new RangeError("index out of range")}function A(t,e,i,r,n){return n||M(t,e,i,4,3.4028234663852886e38,-3.4028234663852886e38),L.write(t,e,i,r,23,4),i+4}function P(t,e,i,r,n){return n||M(t,e,i,8,1.7976931348623157e308,-1.7976931348623157e308),L.write(t,e,i,r,52,8),i+8}function E(t){return t<16?"0"+t.toString(16):t.toString(16)}function k(t,e){e=e||1/0;for(var i,r=t.length,n=null,o=[],s=0;s55295&&i<57344){if(!n){if(i>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}n=i;continue}if(i<56320){(e-=3)>-1&&o.push(239,191,189),n=i;continue}i=65536+(n-55296<<10|i-56320)}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,i<128){if((e-=1)<0)break;o.push(i)}else if(i<2048){if((e-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((e-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function C(t){return O.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(B,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function R(t,e,i,r){for(var n=0;n=e.length||n>=t.length);n++)e[n+i]=t[n];return n}var O=t("base64-js"),L=t("ieee754"),F=t("isarray");r.Buffer=n,r.SlowBuffer=function t(e,i){if(!(this instanceof t))return new t(e,i);var r=new n(e,i);return delete r.parent,r},r.INSPECT_MAX_BYTES=50,n.poolSize=8192;var I={};n.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){function t(){}try{var e=new Uint8Array(1);return e.foo=function(){return 42},e.constructor=t,42===e.foo()&&e.constructor===t&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}(),n.TYPED_ARRAY_SUPPORT?(n.prototype.__proto__=Uint8Array.prototype,n.__proto__=Uint8Array):(n.prototype.length=void 0,n.prototype.parent=void 0),n.isBuffer=function(t){return!(null==t||!t._isBuffer)},n.compare=function(t,e){if(!n.isBuffer(t)||!n.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var i=t.length,r=e.length,o=0,s=Math.min(i,r);othis.length&&(i=this.length),i<=e)return"";for(;;)switch(t){case"hex":return _(this,e,i);case"utf8":case"utf-8":return y(this,e,i);case"ascii":return v(this,e,i);case"binary":return g(this,e,i);case"base64":return m(this,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return b(this,e,i);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}.apply(this,arguments)},n.prototype.equals=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===n.compare(this,t)},n.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},n.prototype.compare=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?0:n.compare(this,t)},n.prototype.indexOf=function(t,e){function i(t,e,i){for(var r=-1,n=0;i+n2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e>>=0,0===this.length)return-1;if(e>=this.length)return-1;if(e<0&&(e=Math.max(this.length+e,0)),"string"==typeof t)return 0===t.length?-1:String.prototype.indexOf.call(this,t,e);if(n.isBuffer(t))return i(this,t,e);if("number"==typeof t)return n.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,t,e):i(this,[t],e);throw new TypeError("val must be string, number or Buffer")},n.prototype.get=function(t){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(t)},n.prototype.set=function(t,e){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(t,e)},n.prototype.write=function(t,e,i,r){if(void 0===e)r="utf8",i=this.length,e=0;else if(void 0===i&&"string"==typeof e)r=e,i=this.length,e=0;else if(isFinite(e))e|=0,isFinite(i)?(i|=0,void 0===r&&(r="utf8")):(r=i,i=void 0);else{var n=r;r=e,e=0|i,i=n}var o=this.length-e;if((void 0===i||i>o)&&(i=o),t.length>0&&(i<0||e<0)||e>this.length)throw new RangeError("attempt to write outside buffer bounds");r||(r="utf8");for(var s=!1;;)switch(r){case"hex":return l(this,t,e,i);case"utf8":case"utf-8":return u(this,t,e,i);case"ascii":return c(this,t,e,i);case"binary":return p(this,t,e,i);case"base64":return d(this,t,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return f(this,t,e,i);default:if(s)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),s=!0}},n.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var D=4096;n.prototype.slice=function(t,e){var i,r=this.length;if(t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(n*=256);)r+=this[t+--e]*n;return r},n.prototype.readUInt8=function(t,e){return e||S(t,1,this.length),this[t]},n.prototype.readUInt16LE=function(t,e){return e||S(t,2,this.length),this[t]|this[t+1]<<8},n.prototype.readUInt16BE=function(t,e){return e||S(t,2,this.length),this[t]<<8|this[t+1]},n.prototype.readUInt32LE=function(t,e){return e||S(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},n.prototype.readUInt32BE=function(t,e){return e||S(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},n.prototype.readIntLE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=this[t],n=1,o=0;++o=(n*=128)&&(r-=Math.pow(2,8*e)),r},n.prototype.readIntBE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=e,n=1,o=this[t+--r];r>0&&(n*=256);)o+=this[t+--r]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},n.prototype.readInt8=function(t,e){return e||S(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},n.prototype.readInt16LE=function(t,e){e||S(t,2,this.length);var i=this[t]|this[t+1]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt16BE=function(t,e){e||S(t,2,this.length);var i=this[t+1]|this[t]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt32LE=function(t,e){return e||S(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},n.prototype.readInt32BE=function(t,e){return e||S(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},n.prototype.readFloatLE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!0,23,4)},n.prototype.readFloatBE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!1,23,4)},n.prototype.readDoubleLE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!0,52,8)},n.prototype.readDoubleBE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!1,52,8)},n.prototype.writeUIntLE=function(t,e,i,r){t=+t,e|=0,i|=0,r||x(this,t,e,i,Math.pow(2,8*i),0);var n=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+n]=t/o&255;return e+i},n.prototype.writeUInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,255,0),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},n.prototype.writeUInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeUInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeUInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):T(this,t,e,!0),e+4},n.prototype.writeUInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeIntLE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=0,s=1,a=t<0?1:0;for(this[e]=255&t;++o>0)-a&255;return e+i},n.prototype.writeIntBE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=i-1,s=1,a=t<0?1:0;for(this[e+o]=255&t;--o>=0&&(s*=256);)this[e+o]=(t/s>>0)-a&255;return e+i},n.prototype.writeInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,127,-128),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},n.prototype.writeInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):T(this,t,e,!0),e+4},n.prototype.writeInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeFloatLE=function(t,e,i){return A(this,t,e,!0,i)},n.prototype.writeFloatBE=function(t,e,i){return A(this,t,e,!1,i)},n.prototype.writeDoubleLE=function(t,e,i){return P(this,t,e,!0,i)},n.prototype.writeDoubleBE=function(t,e,i){return P(this,t,e,!1,i)},n.prototype.copy=function(t,e,i,r){if(i||(i=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;o--)t[o+e]=this[o+i];else if(s<1e3||!n.TYPED_ARRAY_SUPPORT)for(o=0;o=this.length)throw new RangeError("start out of bounds");if(i<0||i>this.length)throw new RangeError("end out of bounds");var r;if("number"==typeof t)for(r=e;r>1,u=-7,c=i?n-1:0,p=i?-1:1,d=t[e+c];for(c+=p,o=d&(1<<-u)-1,d>>=-u,u+=a;u>0;o=256*o+t[e+c],c+=p,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=r;u>0;s=256*s+t[e+c],c+=p,u-=8);if(0===o)o=1-l;else{if(o===h)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,r),o-=l}return(d?-1:1)*s*Math.pow(2,o-r)},i.write=function(t,e,i,r,n,o){var s,a,h,l=8*o-n-1,u=(1<>1,p=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,f=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+c>=1?p/h:p*Math.pow(2,1-c))*h>=2&&(s++,h/=2),s+c>=u?(a=0,s=u):s+c>=1?(a=(e*h-1)*Math.pow(2,n),s+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,n),s=0));n>=8;t[i+d]=255&a,d+=f,a/=256,n-=8);for(s=s<0;t[i+d]=255&s,d+=f,s/=256,l-=8);t[i+d-f]|=128*m}},{}],8:[function(t,e,i){var r={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},{}],9:[function(t,e,i){"use strict";function r(t,e){return t.b===e.b&&t.a===e.a}function n(t,e){return t.bt?0:t)<=(i=0>i?0:i)?0===i?(e+r)/2:e+t/(t+i)*(r-e):r+i/(t+i)*(e-r)}function d(t){var e=g(t.b);return b(e,t.c),b(e.b,t.c),S(e,t.a),e}function f(t,e){var i=!1,r=!1;t!==e&&(e.a!==t.a&&(r=!0,w(e.a,t.a)),e.d!==t.d&&(i=!0,T(e.d,t.d)),_(e,t),r||(b(e,t.a),t.a.c=t),i||(S(e,t.d),t.d.a=t))}function m(t){var e=t.b,i=!1;t.d!==t.b.d&&(i=!0,T(t.d,t.b.d)),t.c===t?w(t.a,null):(t.b.d.a=J(t),t.a.c=t.c,_(t,J(t)),i||S(t,t.d)),e.c===e?(w(e.a,null),T(e.d,null)):(t.d.a=J(e),e.a.c=e.c,_(e,J(e))),x(t)}function y(t){var e=g(t),i=e.b;return _(e,t.e),e.a=t.b.a,b(i,e.a),e.d=i.d=t.d,e=e.b,_(t.b,J(t.b)),_(t.b,e),t.b.a=e.a,e.b.a.c=e.b,e.b.d=t.b.d,e.f=t.f,e.b.f=t.b.f,e}function v(t,e){var i=!1,r=g(t),n=r.b;return e.d!==t.d&&(i=!0,T(e.d,t.d)),_(r,t.e),_(n,e),r.a=t.b.a,n.a=e.a,r.d=n.d=t.d,t.d.a=n,i||S(r,t.d),r}function g(t){var e=new Z,i=new Z,r=t.b.h;return i.h=r,r.b.h=e,e.h=t,t.b.h=i,e.b=i,e.c=e,e.e=i,i.b=e,i.c=i,i.e=e}function _(t,e){var i=t.c,r=e.c;i.b.e=e,r.b.e=t,t.c=r,e.c=i}function b(t,e){var i=e.f,r=new K(e,i);i.e=r,e.f=r,i=r.c=t;do{i.a=r,i=i.c}while(i!==t)}function S(t,e){var i=e.d,r=new Q(e,i);i.b=r,e.d=r,r.a=t,r.c=e.c,i=t;do{i.d=r,i=i.e}while(i!==t)}function x(t){var e=t.h;t=t.b.h,e.b.h=t,t.b.h=e}function w(t,e){var i=t.c,r=i;do{r.a=e,r=r.c}while(r!==i);i=t.f,(r=t.e).f=i,i.e=r}function T(t,e){var i=t.a,r=i;do{r.d=e,r=r.e}while(r!==i);i=t.d,(r=t.b).d=i,i.b=r}function M(t){var e=0;return Math.abs(t[1])>Math.abs(t[0])&&(e=1),Math.abs(t[2])>Math.abs(t[e])&&(e=2),e}function A(t,e){t.f+=e.f,t.b.f+=e.b.f}function P(t,e,i){return t=t.a,e=e.a,i=i.a,e.b.a===t?i.b.a===t?n(e.a,i.a)?0>=s(i.b.a,e.a,i.a):0<=s(e.b.a,i.a,e.a):0>=s(i.b.a,t,i.a):i.b.a===t?0<=s(e.b.a,t,e.a):(e=o(e.b.a,t,e.a),t=o(i.b.a,t,i.a),e>=t)}function E(t){t.a.i=null;var e=t.e;e.a.c=e.c,e.c.a=e.a,t.e=null}function k(t,e){m(t.a),t.c=!1,t.a=e,e.i=t}function C(t){var e=t.a.a;do{t=ut(t)}while(t.a.a===e);return t.c&&(e=v(lt(t).a.b,t.a.e),k(t,e),t=ut(t)),t}function R(t,e,i){var r=new ht;return r.a=i,r.e=z(t.f,e.e,r),i.i=r}function O(t,e){switch(t.s){case 100130:return 0!=(1&e);case 100131:return 0!==e;case 100132:return 0e;case 100134:return 2<=e||-2>=e}return!1}function L(t){var e=t.a,i=e.d;i.c=t.d,i.a=e,E(t)}function F(t,e,i){for(t=e,e=e.a;t!==i;){t.c=!1;var r=lt(t),n=r.a;if(n.a!==e.a){if(!r.c){L(t);break}n=v(e.c.b,n.b),k(r,n)}e.c!==n&&(f(J(n),n),f(e,n)),L(t),e=r.a,t=r}return e}function I(t,e,i,r,n,o){var s=!0;do{R(t,e,i.b),i=i.c}while(i!==r);for(null===n&&(n=lt(e).a.b.c);r=lt(e),(i=r.a.b).a===n.a;)i.c!==n&&(f(J(i),i),f(J(n),i)),r.f=e.f-i.f,r.d=O(t,r.f),e.b=!0,!s&&N(t,e)&&(A(i,n),E(e),m(n)),s=!1,e=r,n=i;e.b=!0,o&&q(t,e)}function D(t,e,i,r,n){var o=[e.g[0],e.g[1],e.g[2]];e.d=null,e.d=t.o&&t.o(o,i,r,t.c)||null,null===e.d&&(n?t.n||(Y(t,100156),t.n=!0):e.d=i[0])}function U(t,e,i){var r=[null,null,null,null];r[0]=e.a.d,r[1]=i.a.d,D(t,e.a,r,[.5,.5,0,0],!1),f(e,i)}function B(t,e,i,r,n){var o=Math.abs(e.b-t.b)+Math.abs(e.a-t.a),s=Math.abs(i.b-t.b)+Math.abs(i.a-t.a),a=n+1;r[n]=.5*s/(o+s),r[a]=.5*o/(o+s),t.g[0]+=r[n]*e.g[0]+r[a]*i.g[0],t.g[1]+=r[n]*e.g[1]+r[a]*i.g[1],t.g[2]+=r[n]*e.g[2]+r[a]*i.g[2]}function N(t,e){var i=lt(e),o=e.a,a=i.a;if(n(o.a,a.a)){if(0=p?st(i,p):n(u[l[p>>1]],u[l[p]])?st(i,p):at(i,p)),u[h]=null,c[h]=i.b,i.b=h}else for(i.c[-(h+1)]=null;0s(o.b.a,a.a,o.a))return!1;ut(e).b=e.b=!0,y(o.b),f(J(a),o)}return!0}function G(t,e){var i=lt(e),u=e.a,c=i.a,d=u.a,m=c.a,v=u.b.a,g=c.b.a,_=new K;if(s(v,t.a,d),s(g,t.a,m),d===m||Math.min(d.a,v.a)>Math.max(m.a,g.a))return!1;if(n(d,m)){if(0s(v,m,d))return!1;var b,S,x=v,w=d,T=g,M=m;if(n(x,w)||(b=x,x=w,w=b),n(T,M)||(b=T,T=M,M=b),n(x,T)||(b=x,x=T,T=b,b=w,w=M,M=b),n(T,w)?n(w,M)?(b=o(x,T,w),S=o(T,w,M),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,w.b)):(b=s(x,T,w),S=-s(x,M,w),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,M.b)):_.b=(T.b+w.b)/2,a(x,w)||(b=x,x=w,w=b),a(T,M)||(b=T,T=M,M=b),a(x,T)||(b=x,x=T,T=b,b=w,w=M,M=b),a(T,w)?a(w,M)?(b=h(x,T,w),S=h(T,w,M),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,w.a)):(b=l(x,T,w),S=-l(x,M,w),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,M.a)):_.a=(T.a+w.a)/2,n(_,t.a)&&(_.b=t.a.b,_.a=t.a.a),n(x=n(d,m)?d:m,_)&&(_.b=x.b,_.a=x.a),r(_,d)||r(_,m))return N(t,e),!1;if(!r(v,t.a)&&0<=s(v,t.a,_)||!r(g,t.a)&&0>=s(g,t.a,_)){if(g===t.a)return y(u.b),f(c.b,u),e=C(e),u=lt(e).a,F(t,lt(e),i),I(t,e,J(u),u,u,!0),!0;if(v===t.a){y(c.b),f(u.e,J(c)),d=i=e,m=d.a.b.a;do{d=ut(d)}while(d.a.b.a===m);return d=lt(e=d).a.b.c,i.a=J(c),c=F(t,i,null),I(t,e,c.c,u.b.c,d,!0),!0}return 0<=s(v,t.a,_)&&(ut(e).b=e.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=s(g,t.a,_)&&(e.b=i.b=!0,y(c.b),c.a.b=t.a.b,c.a.a=t.a.a),!1}return y(u.b),y(c.b),f(J(c),u),u.a.b=_.b,u.a.a=_.a,u.a.h=et(t.e,u.a),u=u.a,c=[0,0,0,0],_=[d.d,v.d,m.d,g.d],u.g[0]=u.g[1]=u.g[2]=0,B(u,d,v,c,0),B(u,m,g,c,2),D(t,u,_,c,!0),ut(e).b=e.b=i.b=!0,!1}function q(t,e){for(var i=lt(e);;){for(;i.b;)e=i,i=lt(i);if(!e.b&&(i=e,null===(e=ut(e))||!e.b))break;e.b=!1;var r,o=e.a,a=i.a;if(r=o.b.a!==a.b.a)t:{var h=lt(r=e),l=r.a,u=h.a,c=void 0;if(n(l.b.a,u.b.a)){if(0>s(l.b.a,u.b.a,l.a)){r=!1;break t}ut(r).b=r.b=!0,c=y(l),f(u.b,c),c.d.c=r.d}else{if(0r.f&&(r.f*=2,r.c=rt(r.c,r.f+1)),0===r.b?i=n:(i=r.b,r.b=r.c[r.b]),r.e[i]=e,r.c[i]=n,r.d[n]=i,r.h&&at(r,n),i}return r=t.a++,t.c[r]=e,-(r+1)}function it(t){if(0===t.a)return ot(t.b);var e=t.c[t.d[t.a-1]];if(0!==t.b.a&&n(nt(t.b),e))return ot(t.b);do{--t.a}while(0t.a||n(r[a],r[l])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function at(t,e){for(var i=t.d,r=t.e,o=t.c,s=e,a=i[s];;){var h=s>>1,l=i[h];if(0===h||n(r[l],r[a])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function ht(){this.e=this.a=null,this.f=0,this.c=this.b=this.h=this.d=!1}function lt(t){return t.e.c.b}function ut(t){return t.e.a.b}var ct,pt=4e150,dt=0;(ct=H.prototype).x=function(){X(this,dt)},ct.B=function(t,e){switch(t){case 100142:return;case 100140:switch(e){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=e)}break;case 100141:return void(this.m=!!e);default:return void Y(this,100900)}Y(this,100901)},ct.y=function(t){switch(t){case 100142:return 0;case 100140:return this.s;case 100141:return this.m;default:Y(this,100900)}return!1},ct.A=function(t,e,i){this.j[0]=t,this.j[1]=e,this.j[2]=i},ct.z=function(t,e){var i=e||null;switch(t){case 100100:case 100106:this.h=i;break;case 100104:case 100110:this.l=i;break;case 100101:case 100107:this.k=i;break;case 100102:case 100108:this.i=i;break;case 100103:case 100109:this.p=i;break;case 100105:case 100111:this.o=i;break;case 100112:this.r=i;break;default:Y(this,100900)}},ct.C=function(t,e){var i=!1,r=[0,0,0];X(this,2);for(var n=0;3>n;++n){var o=t[n];-1e150>o&&(o=-1e150,i=!0),1e150p;++p){var d=t.g[p];de[p]&&(e[p]=d,i[p]=t)}if(t=0,e[1]-h[1]>e[0]-h[0]&&(t=1),e[2]-h[2]>e[t]-h[t]&&(t=2),h[t]>=e[t])a[0]=0,a[1]=0,a[2]=1;else{for(e=0,h=l[t],i=i[t],l=[0,0,0],h=[h.g[0]-i.g[0],h.g[1]-i.g[1],h.g[2]-i.g[2]],p=[0,0,0],t=o.e;t!==o;t=t.e)p[0]=t.g[0]-i.g[0],p[1]=t.g[1]-i.g[1],p[2]=t.g[2]-i.g[2],l[0]=h[1]*p[2]-h[2]*p[1],l[1]=h[2]*p[0]-h[0]*p[2],l[2]=h[0]*p[1]-h[1]*p[0],(d=l[0]*l[0]+l[1]*l[1]+l[2]*l[2])>e&&(e=d,a[0]=l[0],a[1]=l[1],a[2]=l[2]);0>=e&&(a[0]=a[1]=a[2]=0,a[M(h)]=1)}o=!0}for(l=M(a),t=this.b.c,e=(l+1)%3,i=(l+2)%3,l=0=(e=t.a).f))do{a+=(e.a.b-e.b.a.b)*(e.a.a+e.b.a.a),e=e.e}while(e!==t.a);if(0>a)for(a=this.b.c,o=a.e;o!==a;o=o.e)o.a=-o.a}for(this.n=!1,a=this.b.b,t=a.h;t!==a;t=o)o=t.h,e=t.e,r(t.a,t.b.a)&&t.e.e!==t&&(U(this,e,t),m(t),e=(t=e).e),e.e===t&&(e!==t&&(e!==o&&e!==o.b||(o=o.h),m(e)),t!==o&&t!==o.b||(o=o.h),m(t));for(this.e=a=new $,o=this.b.c,t=o.e;t!==o;t=t.e)t.h=et(a,t);for(tt(a),this.f=new function(t){this.a=new W,this.b=t,this.c=P}(this),j(this,-pt),j(this,pt);null!==(a=it(this.e));){for(;;){t:if(t=this.e,0===t.a)o=nt(t.b);else if(o=t.c[t.d[t.a-1]],0!==t.b.a&&(t=nt(t.b),n(t,o))){o=t;break t}if(null===o||!r(o,a))break;o=it(this.e),U(this,a.c,o.c)}V(this,a)}for(this.a=this.f.a.a.b.a.a,a=0;null!==(o=this.f.a.a.b);)o.h||++a,E(o);for(this.f=null,(a=this.e).b=null,a.d=null,this.e=a.c=null,a=this.b,t=a.a.b;t!==a.a;t=o)o=t.b,(t=t.a).e.e===t&&(A(t.c,t),m(t));if(!this.n){if(a=this.b,this.m)for(t=a.b.h;t!==a.b;t=o)o=t.h,t.b.d.c!==t.d.c?t.f=t.d.c?1:-1:m(t);else for(t=a.a.b;t!==a.a;t=o)if(o=t.b,t.c){for(t=t.a;n(t.b.a,t.a);t=t.c.b);for(;n(t.a,t.b.a);t=t.e);for(e=t.c.b,i=void 0;t.e!==e;)if(n(t.b.a,e.a)){for(;e.e!==t&&(u(e.e)||0>=s(e.a,e.b.a,e.e.b.a));)i=v(e.e,e),e=i.b;e=e.c.b}else{for(;e.e!==t&&(c(t.c.b)||0<=s(t.b.a,t.a,t.c.b.a));)i=v(t,t.c.b),t=i.b;t=t.e}for(;e.e.e!==t;)i=v(e.e,e),e=i.b}if(this.h||this.i||this.k||this.l)if(this.m){for(a=this.b,o=a.a.b;o!==a.a;o=o.b)if(o.c){this.h&&this.h(2,this.c),t=o.a;do{this.k&&this.k(t.a.d,this.c),t=t.e}while(t!==o.a);this.i&&this.i(this.c)}}else{for(a=this.b,o=!!this.l,t=!1,e=-1,i=a.a.d;i!==a.a;i=i.d)if(i.c){t||(this.h&&this.h(4,this.c),t=!0),l=i.a;do{o&&(h=l.b.d.c?0:1,e!==h&&(e=h,this.l&&this.l(!!e,this.c))),this.k&&this.k(l.a.d,this.c),l=l.e}while(l!==i.a)}t&&this.i&&this.i(this.c)}if(this.r){for(a=this.b,t=a.a.b;t!==a.a;t=o)if(o=t.b,!t.c){e=t.a,i=e.e,l=void 0;do{i=(l=i).e,l.d=null,null===l.b.d&&(l.c===l?w(l.a,null):(l.a.c=l.c,_(l,J(l))),(h=l.b).c===h?w(h.a,null):(h.a.c=h.c,_(h,J(h))),x(l))}while(l!==e);e=t.d,(t=t.b).d=e,e.b=t}return this.r(this.b),void(this.c=this.b=null)}}this.b=this.c=null},this.libtess={GluTesselator:H,windingRule:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},errorType:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156},gluEnum:{GLU_TESS_MESH:100112,GLU_TESS_TOLERANCE:100142,GLU_TESS_WINDING_RULE:100140,GLU_TESS_BOUNDARY_ONLY:100141,GLU_INVALID_ENUM:100900,GLU_INVALID_VALUE:100901,GLU_TESS_BEGIN:100100,GLU_TESS_VERTEX:100101,GLU_TESS_END:100102,GLU_TESS_ERROR:100103,GLU_TESS_EDGE_FLAG:100104,GLU_TESS_COMBINE:100105,GLU_TESS_BEGIN_DATA:100106,GLU_TESS_VERTEX_DATA:100107,GLU_TESS_END_DATA:100108,GLU_TESS_ERROR_DATA:100109,GLU_TESS_EDGE_FLAG_DATA:100110,GLU_TESS_COMBINE_DATA:100111}},H.prototype.gluDeleteTess=H.prototype.x,H.prototype.gluTessProperty=H.prototype.B,H.prototype.gluGetTessProperty=H.prototype.y,H.prototype.gluTessNormal=H.prototype.A,H.prototype.gluTessCallback=H.prototype.z,H.prototype.gluTessVertex=H.prototype.C,H.prototype.gluTessBeginPolygon=H.prototype.u,H.prototype.gluTessBeginContour=H.prototype.t,H.prototype.gluTessEndContour=H.prototype.v,H.prototype.gluTessEndPolygon=H.prototype.w,void 0!==e&&(e.exports=this.libtess)},{}],10:[function(t,e,i){(function(r){!function(t,r){r("object"==typeof i&&void 0!==e?i:t.opentype={})}(this,function(e){"use strict";function i(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function n(t,e){this.source=t,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=e,this.destLen=0,this.ltree=new i,this.dtree=new i}function o(t,e,i,r){var n,o;for(n=0;n>>=1,e}function h(t,e,i){if(!e)return i;for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>16-e;return t.tag>>>=e,t.bitcount-=e,r+i}function l(t,e){for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>=1,++n,i+=e.table[n],r-=e.table[n]}while(r>=0);return t.tag=o,t.bitcount-=n,e.trans[i+r]}function u(t,e,i){var r,n,o,a,u,c;for(r=h(t,5,257),n=h(t,5,1),o=h(t,4,4),a=0;a<19;++a)Le[a]=0;for(a=0;a8;)t.sourceIndex--,t.bitcount-=8;if(e=256*(e=t.source[t.sourceIndex+1])+t.source[t.sourceIndex],i=256*(i=t.source[t.sourceIndex+3])+t.source[t.sourceIndex+2],e!==(65535&~i))return Te;for(t.sourceIndex+=4,r=e;r;--r)t.dest[t.destLen++]=t.source[t.sourceIndex++];return t.bitcount=0,we}function d(t,e,i,r,n){return Math.pow(1-n,3)*t+3*Math.pow(1-n,2)*n*e+3*(1-n)*Math.pow(n,2)*i+Math.pow(n,3)*r}function f(){this.x1=Number.NaN,this.y1=Number.NaN,this.x2=Number.NaN,this.y2=Number.NaN}function m(){this.commands=[],this.fill="black",this.stroke=null,this.strokeWidth=1}function y(t){throw new Error(t)}function v(t,e){t||y(e)}function g(t){return function(){return t}}function _(t){return t>=-128&&t<=127}function b(t,e,i){for(var r=0,n=t.length;e>8&255,h+256&255)}return o}function w(t,e,i){for(var r=this,n=0;n>4,o=15&r;if(15===n)break;if(e+=i[n],15===o)break;e+=i[o]}return parseFloat(e)}(t);if(e>=32&&e<=246)return e-139;if(e>=247&&e<=250)return i=t.parseByte(),256*(e-247)+i+108;if(e>=251&&e<=254)return i=t.parseByte(),256*-(e-251)-i-108;throw new Error("Invalid b0 "+e)}function Y(t,e,i){e=void 0!==e?e:0;var r=new Ye.Parser(t,e),n=[],o=[];for(i=void 0!==i?i:t.length;r.relativeOffset>1,f.length=0,v=!0}var o,s,a,h,l,u,c,p,d=new m,f=[],y=0,v=!1,g=!1,_=0,b=0;if(t.isCIDFont){var S=t.tables.cff.topDict._fdSelect[e.index],x=t.tables.cff.topDict._fdArray[S];l=x._subrs,u=x._subrsBias,c=x._defaultWidthX,p=x._nominalWidthX}else l=t.tables.cff.topDict._subrs,u=t.tables.cff.topDict._subrsBias,c=t.tables.cff.topDict._defaultWidthX,p=t.tables.cff.topDict._nominalWidthX;var w=c;return function i(c){for(var m,S,x,T,M,A,P,E,k,C,R,O,L=0;L1&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_,b);break;case 5:for(;f.length>0;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 6:for(;f.length>0&&(_+=f.shift(),d.lineTo(_,b),0!==f.length);)b+=f.shift(),d.lineTo(_,b);break;case 7:for(;f.length>0&&(b+=f.shift(),d.lineTo(_,b),0!==f.length);)_+=f.shift(),d.lineTo(_,b);break;case 8:for(;f.length>0;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 10:M=f.pop()+u,(A=l[M])&&i(A);break;case 11:return;case 12:switch(F=c[L],L+=1,F){case 35:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h+f.shift(),k=P+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),b=O+f.shift(),f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;case 34:o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h,k=P+f.shift(),C=h,R=k+f.shift(),O=b,_=R+f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;case 36:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h,k=P+f.shift(),C=h,R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;case 37:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h+f.shift(),k=P+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),Math.abs(R-_)>Math.abs(O-b)?_=R+f.shift():b=O+f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;default:console.log("Glyph "+e.index+": unknown operator 1200"+F),f.length=0}break;case 14:f.length>0&&!v&&(w=f.shift()+p,v=!0),g&&(d.closePath(),g=!1);break;case 18:n();break;case 19:case 20:n(),L+=y+7>>3;break;case 21:f.length>2&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_+=f.pop(),b);break;case 22:f.length>1&&!v&&(w=f.shift()+p,v=!0),r(_+=f.pop(),b);break;case 23:n();break;case 24:for(;f.length>2;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 25:for(;f.length>6;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 26:for(f.length%2&&(_+=f.shift());f.length>0;)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a,b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 27:for(f.length%2&&(b+=f.shift());f.length>0;)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h,d.curveTo(o,s,a,h,_,b);break;case 28:m=c[L],S=c[L+1],f.push((m<<24|S<<16)>>16),L+=2;break;case 29:M=f.pop()+t.gsubrsBias,(A=t.gsubrs[M])&&i(A);break;case 30:for(;f.length>0&&(o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;case 31:for(;f.length>0&&(o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;default:F<32?console.log("Glyph "+e.index+": unknown operator "+F):F<247?f.push(F-139):F<251?(m=c[L],L+=1,f.push(256*(F-247)+m+108)):F<255?(m=c[L],L+=1,f.push(256*-(F-251)-m-108)):(m=c[L],S=c[L+1],x=c[L+2],T=c[L+3],L+=4,f.push((m<<24|S<<16|x<<8|T)/65536))}}}(i),e.advanceWidth=w,d}function et(t,e){var i,r=Ze.indexOf(t);return r>=0&&(i=r),(r=e.indexOf(t))>=0?i=r+Ze.length:(i=Ze.length+e.length,e.push(t)),i}function it(t,e,i){for(var r={},n=0;ne.value.tag?1:-1}),e.fields=e.fields.concat(r),e.fields=e.fields.concat(n),e}function mt(t,e,i){for(var r=0;r0)return t.glyphs.get(n).getMetrics()}return i}function yt(t,e){for(var i=0,r=t.length-1;i<=r;){var n=i+r>>>1,o=t[n].tag;if(o===e)return n;o>>1,o=t[n];if(o===e)return n;o>>1,s=(i=t[o]).start;if(s===e)return i;s0)return i=t[r-1],e>i.end?0:i}function _t(t,e){this.font=t,this.tableName=e}function bt(t){_t.call(this,t,"gpos")}function St(t){_t.call(this,t,"gsub")}function xt(t,e){var i=t.length;if(i!==e.length)return!1;for(var r=0;r0?(o=t.parseByte(),0==(e&n)&&(o=-o),o=i+o):o=(e&n)>0?i:i+t.parseShort(),o}function Et(t,e,i){var r,n,o=new Ye.Parser(e,i);if(t.numberOfContours=o.parseShort(),t._xMin=o.parseShort(),t._yMin=o.parseShort(),t._xMax=o.parseShort(),t._yMax=o.parseShort(),t.numberOfContours>0){for(var s=t.endPointIndices=[],a=0;a0)for(var c=o.parseByte(),p=0;p0){var d,f=[];if(l>0){for(var m=0;m=0,f.push(d);for(var y=0,v=0;v0?(2&r)>0?(S.dx=o.parseShort(),S.dy=o.parseShort()):S.matchedPoints=[o.parseUShort(),o.parseUShort()]:(2&r)>0?(S.dx=o.parseChar(),S.dy=o.parseChar()):S.matchedPoints=[o.parseByte(),o.parseByte()],(8&r)>0?S.xScale=S.yScale=o.parseF2Dot14():(64&r)>0?(S.xScale=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()):(128&r)>0&&(S.xScale=o.parseF2Dot14(),S.scale01=o.parseF2Dot14(),S.scale10=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()),t.components.push(S),b=!!(32&r)}if(256&r){t.instructionLength=o.parseUShort(),t.instructions=[];for(var x=0;xe.points.length-1||r.matchedPoints[1]>n.points.length-1)throw Error("Matched points out of range in "+e.name);var s=e.points[r.matchedPoints[0]],a=n.points[r.matchedPoints[1]],h={xScale:r.xScale,scale01:r.scale01,scale10:r.scale10,yScale:r.yScale,dx:0,dy:0};a=kt([a],h)[0],h.dx=s.x-a.x,h.dy=s.y-a.y,o=kt(n.points,h)}e.points=e.points.concat(o)}}return Ct(e.points)}function Ot(t){this.font=t,this.getCommands=function(t){return Ri.getPath(t).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function Lt(t){return t}function Ft(t){return Math.sign(t)*Math.round(Math.abs(t))}function It(t){return Math.sign(t)*Math.round(Math.abs(2*t))/2}function Dt(t){return Math.sign(t)*(Math.round(Math.abs(t)+.5)-.5)}function Ut(t){return Math.sign(t)*Math.ceil(Math.abs(t))}function Bt(t){return Math.sign(t)*Math.floor(Math.abs(t))}function Nt(t,e){this.x=t,this.y=e,this.axis=void 0,this.slope=e/t,this.normalSlope=-t/e,Object.freeze(this)}function Gt(t,e){var i=Math.sqrt(t*t+e*e);return e/=i,1==(t/=i)&&0===e?Li:0===t&&1===e?Fi:new Nt(t,e)}function qt(t,e,i,r){this.x=this.xo=Math.round(64*t)/64,this.y=this.yo=Math.round(64*e)/64,this.lastPointOfContour=i,this.onCurve=r,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}function Vt(t,e){switch(this.env=t,this.stack=[],this.prog=e,t){case"glyf":this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=Li,this.round=Ft}}function jt(t){for(var e=t.tZone=new Array(t.gZone.length),i=0;i=176&&i<=183)n+=i-176+1;else if(i>=184&&i<=191)n+=2*(i-184+1);else if(e&&1===o&&27===i)break}while(o>0);t.ip=n}function Wt(t,i){e.DEBUG&&console.log(i.step,"SVTCA["+t.axis+"]"),i.fv=i.pv=i.dpv=t}function Ht(t,i){e.DEBUG&&console.log(i.step,"SPVTCA["+t.axis+"]"),i.pv=i.dpv=t}function Xt(t,i){e.DEBUG&&console.log(i.step,"SFVTCA["+t.axis+"]"),i.fv=t}function Yt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.pv=i.dpv=Gt(r,n)}function Qt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SFVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.fv=Gt(r,n)}function Zt(t){e.DEBUG&&console.log(t.step,"POP[]"),t.stack.pop()}function Jt(t,i){var r=i.stack.pop(),n=i.z0[r],o=i.fv,s=i.pv;e.DEBUG&&console.log(i.step,"MDAP["+t+"]",r);var a=s.distance(n,Ii);t&&(a=i.round(a)),o.setRelative(n,Ii,a,s),o.touch(n),i.rp0=i.rp1=r}function Kt(t,i){var r,n,o,s=i.z2,a=s.length-2;e.DEBUG&&console.log(i.step,"IUP["+t.axis+"]");for(var h=0;h1?"loop "+(i.loop-h)+": ":"")+"SHP["+(t?"rp1":"rp2")+"]",u)}i.loop=1}function te(t,i){var r=i.stack,n=t?i.rp1:i.rp2,o=(t?i.z0:i.z1)[n],s=i.fv,a=i.pv,h=r.pop(),l=i.z2[i.contours[h]],u=l;e.DEBUG&&console.log(i.step,"SHC["+t+"]",h);var c=a.distance(o,o,!1,!0);do{u!==o&&s.setRelative(u,u,c,a),u=u.nextPointOnContour}while(u!==l)}function ee(t,i){var r,n=i.stack,o=t?i.rp1:i.rp2,s=(t?i.z0:i.z1)[o],a=i.fv,h=i.pv,l=n.pop();switch(e.DEBUG&&console.log(i.step,"SHZ["+t+"]",l),l){case 0:r=i.tZone;break;case 1:r=i.gZone;break;default:throw new Error("Invalid zone")}for(var u,c=h.distance(s,s,!1,!0),p=r.length-2,d=0;d",h),i.stack.push(Math.round(64*h))}function se(t,i){var r=i.stack,n=r.pop(),o=i.fv,s=i.pv,a=i.ppem,h=i.deltaBase+16*(t-1),l=i.deltaShift,u=i.z0;e.DEBUG&&console.log(i.step,"DELTAP["+t+"]",n,r);for(var c=0;c>4)===a){var f=(15&d)-8;f>=0&&f++,e.DEBUG&&console.log(i.step,"DELTAPFIX",p,"by",f*l);var m=u[p];o.setRelative(m,m,f*l,s)}}}function ae(t,i){var r=i.stack,n=r.pop();e.DEBUG&&console.log(i.step,"ROUND[]"),r.push(64*i.round(n/64))}function he(t,i){var r=i.stack,n=r.pop(),o=i.ppem,s=i.deltaBase+16*(t-1),a=i.deltaShift;e.DEBUG&&console.log(i.step,"DELTAC["+t+"]",n,r);for(var h=0;h>4)===o){var c=(15&u)-8;c>=0&&c++;var p=c*a;e.DEBUG&&console.log(i.step,"DELTACFIX",l,"by",p),i.cvt[l]+=p}}}function le(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log(i.step,"SDPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.dpv=Gt(r,n)}function ue(t,i){var r=i.stack,n=i.prog,o=i.ip;e.DEBUG&&console.log(i.step,"PUSHB["+t+"]");for(var s=0;s=0?1:-1,h=Math.abs(h),t&&(u=s.cvt[p],n&&Math.abs(h-u)":"_")+(n?"R":"_")+(0===o?"Gr":1===o?"Bl":2===o?"Wh":"")+"]",t?p+"("+s.cvt[p]+","+u+")":"",d,"(d =",a,"->",l*h,")"),s.rp1=s.rp0,s.rp2=d,i&&(s.rp0=d)}function de(t){(t=t||{}).empty||(At(t.familyName,"When creating a new Font object, familyName is required."),At(t.styleName,"When creating a new Font object, styleName is required."),At(t.unitsPerEm,"When creating a new Font object, unitsPerEm is required."),At(t.ascender,"When creating a new Font object, ascender is required."),At(t.descender,"When creating a new Font object, descender is required."),At(t.descender<0,"Descender should be negative (e.g. -512)."),this.names={fontFamily:{en:t.familyName||" "},fontSubfamily:{en:t.styleName||" "},fullName:{en:t.fullName||t.familyName+" "+t.styleName},postScriptName:{en:t.postScriptName||(t.familyName+t.styleName).replace(/\s/g,"")},designer:{en:t.designer||" "},designerURL:{en:t.designerURL||" "},manufacturer:{en:t.manufacturer||" "},manufacturerURL:{en:t.manufacturerURL||" "},license:{en:t.license||" "},licenseURL:{en:t.licenseURL||" "},version:{en:t.version||"Version 0.1"},description:{en:t.description||" "},copyright:{en:t.copyright||" "},trademark:{en:t.trademark||" "}},this.unitsPerEm=t.unitsPerEm||1e3,this.ascender=t.ascender,this.descender=t.descender,this.createdTimestamp=t.createdTimestamp,this.tables={os2:{usWeightClass:t.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:t.widthClass||this.usWidthClasses.MEDIUM,fsSelection:t.fsSelection||this.fsSelectionValues.REGULAR}}),this.supported=!0,this.glyphs=new ei.GlyphSet(this,t.glyphs||[]),this.encoding=new U(this),this.position=new bt(this),this.substitution=new St(this),this.tables=this.tables||{},Object.defineProperty(this,"hinting",{get:function(){return this._hinting?this._hinting:"truetype"===this.outlinesFormat?this._hinting=new Ot(this):void 0}})}function fe(t,e){var i=JSON.stringify(t),r=256;for(var n in e){var o=parseInt(n);if(o&&!(o<256)){if(JSON.stringify(e[n])===i)return o;r<=o&&(r=o+1)}}return e[r]=t,r}function me(t,e,i){var r=fe(e.name,i);return[{name:"tag_"+t,type:"TAG",value:e.tag},{name:"minValue_"+t,type:"FIXED",value:e.minValue<<16},{name:"defaultValue_"+t,type:"FIXED",value:e.defaultValue<<16},{name:"maxValue_"+t,type:"FIXED",value:e.maxValue<<16},{name:"flags_"+t,type:"USHORT",value:0},{name:"nameID_"+t,type:"USHORT",value:r}]}function ye(t,e,i){var r={},n=new Ye.Parser(t,e);return r.tag=n.parseTag(),r.minValue=n.parseFixed(),r.defaultValue=n.parseFixed(),r.maxValue=n.parseFixed(),n.skip("uShort",1),r.name=i[n.parseUShort()]||{},r}function ve(t,e,i,r){for(var n=fe(e.name,r),o=[{name:"nameID_"+t,type:"USHORT",value:n},{name:"flags_"+t,type:"USHORT",value:0}],s=0;s=i)){var n,o=e.charCodeAt(r);return o>=55296&&o<=56319&&i>r+1&&(n=e.charCodeAt(r+1))>=56320&&n<=57343?1024*(o-55296)+n-56320+65536:o}};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}();var we=0,Te=-3,Me=new i,Ae=new i,Pe=new Uint8Array(30),Ee=new Uint16Array(30),ke=new Uint8Array(30),Ce=new Uint16Array(30),Re=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Oe=new i,Le=new Uint8Array(320),Fe=new Uint16Array(16);(function(t,e){var i;for(i=0;i<7;++i)t.table[i]=0;for(t.table[7]=24,t.table[8]=152,t.table[9]=112,i=0;i<24;++i)t.trans[i]=256+i;for(i=0;i<144;++i)t.trans[24+i]=i;for(i=0;i<8;++i)t.trans[168+i]=280+i;for(i=0;i<112;++i)t.trans[176+i]=144+i;for(i=0;i<5;++i)e.table[i]=0;for(e.table[5]=32,i=0;i<32;++i)e.trans[i]=i})(Me,Ae),o(Pe,Ee,4,3),o(ke,Ce,2,1),Pe[28]=0,Ee[28]=258;var Ie=function(t,e){var i,r,o=new n(t,e);do{switch(i=a(o),h(o,2,0)){case 0:r=p(o);break;case 1:r=c(o,Me,Ae);break;case 2:u(o,o.ltree,o.dtree),r=c(o,o.ltree,o.dtree);break;default:r=Te}if(r!==we)throw new Error("Data error")}while(!i);return o.destLenthis.x2&&(this.x2=t)),"number"==typeof e&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),ethis.y2&&(this.y2=e))},f.prototype.addX=function(t){this.addPoint(t,null)},f.prototype.addY=function(t){this.addPoint(null,t)},f.prototype.addBezier=function(t,e,i,r,n,o,s,a){var h=this,l=[t,e],u=[i,r],c=[n,o],p=[s,a];this.addPoint(t,e),this.addPoint(s,a);for(var f=0;f<=1;f++){var m=6*l[f]-12*u[f]+6*c[f],y=-3*l[f]+9*u[f]-9*c[f]+3*p[f],v=3*u[f]-3*l[f];if(0!==y){var g=Math.pow(m,2)-4*v*y;if(!(g<0)){var _=(-m+Math.sqrt(g))/(2*y);0<_&&_<1&&(0===f&&h.addX(d(l[f],u[f],c[f],p[f],_)),1===f&&h.addY(d(l[f],u[f],c[f],p[f],_)));var b=(-m-Math.sqrt(g))/(2*y);0=0&&r>0&&(i+=" "),i+=e(n)}return i}t=void 0!==t?t:2;for(var r="",n=0;n=0&&t<=255,"Byte value should be between 0 and 255."),[t]},Ge.BYTE=g(1),Ne.CHAR=function(t){return[t.charCodeAt(0)]},Ge.CHAR=g(1),Ne.CHARARRAY=function(t){for(var e=[],i=0;i>8&255,255&t]},Ge.USHORT=g(2),Ne.SHORT=function(t){return t>=32768&&(t=-(65536-t)),[t>>8&255,255&t]},Ge.SHORT=g(2),Ne.UINT24=function(t){return[t>>16&255,t>>8&255,255&t]},Ge.UINT24=g(3),Ne.ULONG=function(t){return[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.ULONG=g(4),Ne.LONG=function(t){return t>=Ue&&(t=-(2*Ue-t)),[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONG=g(4),Ne.FIXED=Ne.ULONG,Ge.FIXED=Ge.ULONG,Ne.FWORD=Ne.SHORT,Ge.FWORD=Ge.SHORT,Ne.UFWORD=Ne.USHORT,Ge.UFWORD=Ge.USHORT,Ne.LONGDATETIME=function(t){return[0,0,0,0,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONGDATETIME=g(8),Ne.TAG=function(t){return De.argument(4===t.length,"Tag should be exactly 4 ASCII characters."),[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]},Ge.TAG=g(4),Ne.Card8=Ne.BYTE,Ge.Card8=Ge.BYTE,Ne.Card16=Ne.USHORT,Ge.Card16=Ge.USHORT,Ne.OffSize=Ne.BYTE,Ge.OffSize=Ge.BYTE,Ne.SID=Ne.USHORT,Ge.SID=Ge.USHORT,Ne.NUMBER=function(t){return t>=-107&&t<=107?[t+139]:t>=108&&t<=1131?[247+((t-=108)>>8),255&t]:t>=-1131&&t<=-108?[251+((t=-t-108)>>8),255&t]:t>=-32768&&t<=32767?Ne.NUMBER16(t):Ne.NUMBER32(t)},Ge.NUMBER=function(t){return Ne.NUMBER(t).length},Ne.NUMBER16=function(t){return[28,t>>8&255,255&t]},Ge.NUMBER16=g(3),Ne.NUMBER32=function(t){return[29,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.NUMBER32=g(5),Ne.REAL=function(t){var e=t.toString(),i=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(e);if(i){var r=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));e=(Math.round(t*r)/r).toString()}for(var n="",o=0,s=e.length;o>8&255,e[e.length]=255&r}return e},Ge.UTF16=function(t){return 2*t.length};var qe={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};Be.MACSTRING=function(t,e,i,r){var n=qe[r];if(void 0!==n){for(var o="",s=0;s=128&&void 0===(o=i[o]))return;r[n]=o}return r}},Ge.MACSTRING=function(t,e){var i=Ne.MACSTRING(t,e);return void 0!==i?i.length:0},Ne.VARDELTAS=function(t){for(var e=0,i=[];e=-128&&r<=127?S(t,e,i):x(t,e,i)}return i},Ne.INDEX=function(t){for(var e=1,i=[e],r=[],n=0;n>8,e[c+1]=255&p,e=e.concat(r[u])}return e},Ge.TABLE=function(t){for(var e=0,i=t.fields.length,r=0;r0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parsePointer32=function(t){var e=this.parseOffset32();if(e>0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parseListOfLists=function(t){for(var e=this,i=this.parseOffset16List(),r=i.length,n=this.relativeOffset,o=new Array(r),s=0;s=0;n-=1){var o=Ye.getUShort(t,e+4+8*n),s=Ye.getUShort(t,e+4+8*n+2);if(3===o&&(0===s||1===s||10===s)||0===o&&(0===s||1===s||2===s||3===s||4===s)){r=Ye.getULong(t,e+4+8*n+4);break}}if(-1===r)throw new Error("No valid cmap sub-tables found.");var a=new Ye.Parser(t,e+r);if(i.format=a.parseUShort(),12===i.format)!function(t,e){var i;e.parseUShort(),t.length=e.parseULong(),t.language=e.parseULong(),t.groupCount=i=e.parseULong(),t.glyphIndexMap={};for(var r=0;r>1,e.skip("uShort",3),t.glyphIndexMap={};for(var s=new Ye.Parser(i,r+n+14),a=new Ye.Parser(i,r+n+16+2*o),h=new Ye.Parser(i,r+n+16+4*o),l=new Ye.Parser(i,r+n+16+6*o),u=r+n+16+8*o,c=0;c0;e-=1)if(t.get(e).unicode>65535){console.log("Adding CMAP format 12 (needed!)"),i=!1;break}var r=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:i?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:i?12:20}];i||(r=r.concat([{name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}])),r=r.concat([{name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);var n=new We.Table("cmap",r);for(n.segments=[],e=0;e=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");o.push(n)}else{if(3!==a)throw new Error("CFF Table CID Font FDSelect table has unsupported format "+a);var l=s.parseCard16(),u=s.parseCard16();if(0!==u)throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+u);for(var c,p=0;p=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");if(c>i)throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+c);for(;u=1&&(i.ulCodePageRange1=r.parseULong(),i.ulCodePageRange2=r.parseULong()),i.version>=2&&(i.sxHeight=r.parseShort(),i.sCapHeight=r.parseShort(),i.usDefaultChar=r.parseUShort(),i.usBreakChar=r.parseUShort(),i.usMaxContent=r.parseUShort()),i},make:function(t){return new We.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],t)},unicodeRanges:gi,getUnicodeRange:function(t){for(var e=0;e=i.begin&&t=$e.length){var s=r.parseChar();i.names.push(r.parseString(s))}break;case 2.5:i.numberOfGlyphs=r.parseUShort(),i.offset=new Array(i.numberOfGlyphs);for(var a=0;ay||void 0===e)&&y>0&&(e=y),l 123 are reserved for internal usage");d|=1<0?hi.make(O):void 0,I=bi.make(),D=ni.make(t.glyphs,{version:t.getEnglishName("version"),fullName:E,familyName:A,weightName:P,postScriptName:k,unitsPerEm:t.unitsPerEm,fontBBox:[0,_.yMin,_.ascender,_.advanceWidthMax]}),U=t.metas&&Object.keys(t.metas).length>0?Mi.make(t.metas):void 0,B=[b,S,x,w,L,M,I,D,T];F&&B.push(F),t.tables.gsub&&B.push(Ti.make(t.tables.gsub)),U&&B.push(U);for(var N=ft(B),G=pt(N.encode()),q=N.fields,V=!1,j=0;j=0)return r[n].script;if(e){var o={tag:t,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return r.splice(-1-n,0,o),o.script}}},getLangSysTable:function(t,e,i){var r=this.getScriptTable(t,i);if(r){if(!e||"dflt"===e||"DFLT"===e)return r.defaultLangSys;var n=yt(r.langSysRecords,e);if(n>=0)return r.langSysRecords[n].langSys;if(i){var o={tag:e,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return r.langSysRecords.splice(-1-n,0,o),o.langSys}}},getFeatureTable:function(t,e,i,r){var n=this.getLangSysTable(t,e,r);if(n){for(var o,s=n.featureIndexes,a=this.font.tables[this.tableName].features,h=0;h=a[l-1].tag,"Features must be added in alphabetical order."),o={tag:i,feature:{params:0,lookupListIndexes:[]}},a.push(o),s.push(l),o.feature}}},getLookupTables:function(t,e,i,r,n){var o=this.getFeatureTable(t,e,i,n),s=[];if(o){for(var a,h=o.lookupListIndexes,l=this.font.tables[this.tableName].lookups,u=0;u=0?i:-1;case 2:var r=gt(t.ranges,e);return r?r.index+e-r.start:-1}},expandCoverage:function(t){if(1===t.format)return t.glyphs;for(var e=[],i=t.ranges,r=0;r=0){for(var u=o.ligatureSets[l],c=0;c2)){var r=this.font,n=this._prepState;if(!n||n.ppem!==i){var o=this._fpgmState;if(!o){Vt.prototype=Di,(o=this._fpgmState=new Vt("fpgm",r.tables.fpgm)).funcs=[],o.font=r,e.DEBUG&&(console.log("---EXEC FPGM---"),o.step=-1);try{Ei(o)}catch(t){return console.log("Hinting error in FPGM:"+t),void(this._errorState=3)}}Vt.prototype=o,(n=this._prepState=new Vt("prep",r.tables.prep)).ppem=i;var s=r.tables.cvt;if(s)for(var a=n.cvt=new Array(s.length),h=i/r.unitsPerEm,l=0;l1))try{return ki(t,n)}catch(t){return this._errorState<1&&(console.log("Hinting error:"+t),console.log("Note: further hinting errors are silenced")),void(this._errorState=1)}}},ki=function(t,i){var r,n,o,s=i.ppem/i.font.unitsPerEm,a=s,h=t.components;if(Vt.prototype=i,h){var l=i.font;n=[],r=[];for(var u=0;u1?"loop "+(t.loop-r)+": ":"")+"SHPIX[]",a,o),n.setRelative(h,h,o),n.touch(h)}t.loop=1},function(t){for(var i=t.stack,r=t.rp1,n=t.rp2,o=t.loop,s=t.z0[r],a=t.z1[n],h=t.fv,l=t.dpv,u=t.z2;o--;){var c=i.pop(),p=u[c];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"IP[]",c,r,"<->",n),h.interpolate(p,s,a,l),h.touch(p)}t.loop=1},ie.bind(void 0,0),ie.bind(void 0,1),function(t){for(var i=t.stack,r=t.rp0,n=t.z0[r],o=t.loop,s=t.fv,a=t.pv,h=t.z1;o--;){var l=i.pop(),u=h[l];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"ALIGNRP[]",l),s.setRelative(u,n,0,a),s.touch(u)}t.loop=1},function(t){e.DEBUG&&console.log(t.step,"RTDG[]"),t.round=It},re.bind(void 0,0),re.bind(void 0,1),function(t){var i=t.prog,r=t.ip,n=t.stack,o=i[++r];e.DEBUG&&console.log(t.step,"NPUSHB[]",o);for(var s=0;sr?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"GTEQ[]",r,n),i.push(n>=r?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"EQ[]",r,n),i.push(r===n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"NEQ[]",r,n),i.push(r!==n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ODD[]",r),i.push(Math.trunc(r)%2?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"EVEN[]",r),i.push(Math.trunc(r)%2?0:1)},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"IF[]",i),i||(zt(t,!0),e.DEBUG&&console.log(t.step,"EIF[]"))},function(t){e.DEBUG&&console.log(t.step,"EIF[]")},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"AND[]",r,n),i.push(r&&n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"OR[]",r,n),i.push(r||n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NOT[]",r),i.push(r?0:1)},se.bind(void 0,1),function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDB[]",i),t.deltaBase=i},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDS[]",i),t.deltaShift=Math.pow(.5,i)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"ADD[]",r,n),i.push(n+r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"SUB[]",r,n),i.push(n-r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"DIV[]",r,n),i.push(64*n/r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MUL[]",r,n),i.push(n*r/64)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ABS[]",r),i.push(Math.abs(r))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NEG[]",r),i.push(-r)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"FLOOR[]",r),i.push(64*Math.floor(r/64))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"CEILING[]",r),i.push(64*Math.ceil(r/64))},ae.bind(void 0,0),ae.bind(void 0,1),ae.bind(void 0,2),ae.bind(void 0,3),void 0,void 0,void 0,void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"WCVTF[]",r,n),t.cvt[n]=r*t.ppem/t.font.unitsPerEm},se.bind(void 0,2),se.bind(void 0,3),he.bind(void 0,1),he.bind(void 0,2),he.bind(void 0,3),function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"SROUND[]",r),t.round=Oi,192&r){case 0:i=.5;break;case 64:i=1;break;case 128:i=2;break;default:throw new Error("invalid SROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid SROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"S45ROUND[]",r),t.round=Oi,192&r){case 0:i=Math.sqrt(2)/2;break;case 64:i=Math.sqrt(2);break;case 128:i=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid S45ROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},void 0,void 0,function(t){e.DEBUG&&console.log(t.step,"ROFF[]"),t.round=Lt},void 0,function(t){e.DEBUG&&console.log(t.step,"RUTG[]"),t.round=Ut},function(t){e.DEBUG&&console.log(t.step,"RDTG[]"),t.round=Bt},Zt,Zt,void 0,void 0,void 0,void 0,void 0,function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANCTRL[]",i)},le.bind(void 0,0),le.bind(void 0,1),function(t){var i=t.stack,r=i.pop(),n=0;e.DEBUG&&console.log(t.step,"GETINFO[]",r),1&r&&(n=35),32&r&&(n|=4096),i.push(n)},void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop(),o=i.pop();e.DEBUG&&console.log(t.step,"ROLL[]"),i.push(n),i.push(r),i.push(o)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MAX[]",r,n),i.push(Math.max(n,r))},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MIN[]",r,n),i.push(Math.min(n,r))},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANTYPE[]",i)},function(t){var i=t.stack.pop(),r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"INSTCTRL[]",i,r),i){case 1:return void(t.inhibitGridFit=!!r);case 2:return void(t.ignoreCvt=!!r);default:throw new Error("invalid INSTCTRL[] selector")}},void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,ue.bind(void 0,1),ue.bind(void 0,2),ue.bind(void 0,3),ue.bind(void 0,4),ue.bind(void 0,5),ue.bind(void 0,6),ue.bind(void 0,7),ue.bind(void 0,8),ce.bind(void 0,1),ce.bind(void 0,2),ce.bind(void 0,3),ce.bind(void 0,4),ce.bind(void 0,5),ce.bind(void 0,6),ce.bind(void 0,7),ce.bind(void 0,8),pe.bind(void 0,0,0,0,0,0),pe.bind(void 0,0,0,0,0,1),pe.bind(void 0,0,0,0,0,2),pe.bind(void 0,0,0,0,0,3),pe.bind(void 0,0,0,0,1,0),pe.bind(void 0,0,0,0,1,1),pe.bind(void 0,0,0,0,1,2),pe.bind(void 0,0,0,0,1,3),pe.bind(void 0,0,0,1,0,0),pe.bind(void 0,0,0,1,0,1),pe.bind(void 0,0,0,1,0,2),pe.bind(void 0,0,0,1,0,3),pe.bind(void 0,0,0,1,1,0),pe.bind(void 0,0,0,1,1,1),pe.bind(void 0,0,0,1,1,2),pe.bind(void 0,0,0,1,1,3),pe.bind(void 0,0,1,0,0,0),pe.bind(void 0,0,1,0,0,1),pe.bind(void 0,0,1,0,0,2),pe.bind(void 0,0,1,0,0,3),pe.bind(void 0,0,1,0,1,0),pe.bind(void 0,0,1,0,1,1),pe.bind(void 0,0,1,0,1,2),pe.bind(void 0,0,1,0,1,3),pe.bind(void 0,0,1,1,0,0),pe.bind(void 0,0,1,1,0,1),pe.bind(void 0,0,1,1,0,2),pe.bind(void 0,0,1,1,0,3),pe.bind(void 0,0,1,1,1,0),pe.bind(void 0,0,1,1,1,1),pe.bind(void 0,0,1,1,1,2),pe.bind(void 0,0,1,1,1,3),pe.bind(void 0,1,0,0,0,0),pe.bind(void 0,1,0,0,0,1),pe.bind(void 0,1,0,0,0,2),pe.bind(void 0,1,0,0,0,3),pe.bind(void 0,1,0,0,1,0),pe.bind(void 0,1,0,0,1,1),pe.bind(void 0,1,0,0,1,2),pe.bind(void 0,1,0,0,1,3),pe.bind(void 0,1,0,1,0,0),pe.bind(void 0,1,0,1,0,1),pe.bind(void 0,1,0,1,0,2),pe.bind(void 0,1,0,1,0,3),pe.bind(void 0,1,0,1,1,0),pe.bind(void 0,1,0,1,1,1),pe.bind(void 0,1,0,1,1,2),pe.bind(void 0,1,0,1,1,3),pe.bind(void 0,1,1,0,0,0),pe.bind(void 0,1,1,0,0,1),pe.bind(void 0,1,1,0,0,2),pe.bind(void 0,1,1,0,0,3),pe.bind(void 0,1,1,0,1,0),pe.bind(void 0,1,1,0,1,1),pe.bind(void 0,1,1,0,1,2),pe.bind(void 0,1,1,0,1,3),pe.bind(void 0,1,1,1,0,0),pe.bind(void 0,1,1,1,0,1),pe.bind(void 0,1,1,1,0,2),pe.bind(void 0,1,1,1,0,3),pe.bind(void 0,1,1,1,1,0),pe.bind(void 0,1,1,1,1,1),pe.bind(void 0,1,1,1,1,2),pe.bind(void 0,1,1,1,1,3)];var Ui=Array.from||function(t){return t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]?|[^\uD800-\uDFFF]|./g)||[]};de.prototype.hasChar=function(t){return null!==this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyphIndex=function(t){return this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyph=function(t){var e=this.charToGlyphIndex(t),i=this.glyphs.get(e);return i||(i=this.glyphs.get(0)),i},de.prototype.stringToGlyphs=function(t,e){e=e||this.defaultRenderOptions;for(var i=Ui(t),r=[],n=0;n1&&console.warn("Only the first kern subtable is supported."),t.skip("uLong");var i=255&t.parseUShort();if(t.skip("uShort"),0===i){var r=t.parseUShort();t.skip("uShort",3);for(var n=0;n1)for(var i=1;i-1?e:t}(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(i)}function c(t){var e=new FormData;return t.trim().split("&").forEach(function(t){if(t){var i=t.split("="),r=i.shift().replace(/\+/g," "),n=i.join("=").replace(/\+/g," ");e.append(decodeURIComponent(r),decodeURIComponent(n))}}),e}function p(t){var e=new n;return t.split(/\r?\n/).forEach(function(t){var i=t.split(":"),r=i.shift().trim();if(r){var n=i.join(":").trim();e.append(r,n)}}),e}function d(t,e){e||(e={}),this.type="default",this.status="status"in e?e.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new n(e.headers),this.url=e.url||"",this._initBody(t)}if(!t.fetch){var f={searchParams:"URLSearchParams"in t,iterable:"Symbol"in t&&"iterator"in Symbol,blob:"FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in t,arrayBuffer:"ArrayBuffer"in t};if(f.arrayBuffer)var m=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],y=function(t){return t&&DataView.prototype.isPrototypeOf(t)},v=ArrayBuffer.isView||function(t){return t&&m.indexOf(Object.prototype.toString.call(t))>-1};n.prototype.append=function(t,r){t=e(t),r=i(r);var n=this.map[t];this.map[t]=n?n+","+r:r},n.prototype.delete=function(t){delete this.map[e(t)]},n.prototype.get=function(t){return t=e(t),this.has(t)?this.map[t]:null},n.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},n.prototype.set=function(t,r){this.map[e(t)]=i(r)},n.prototype.forEach=function(t,e){for(var i in this.map)this.map.hasOwnProperty(i)&&t.call(e,this.map[i],i,this)},n.prototype.keys=function(){var t=[];return this.forEach(function(e,i){t.push(i)}),r(t)},n.prototype.values=function(){var t=[];return this.forEach(function(e){t.push(e)}),r(t)},n.prototype.entries=function(){var t=[];return this.forEach(function(e,i){t.push([i,e])}),r(t)},f.iterable&&(n.prototype[Symbol.iterator]=n.prototype.entries);var g=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];u.prototype.clone=function(){return new u(this,{body:this._bodyInit})},l.call(u.prototype),l.call(d.prototype),d.prototype.clone=function(){return new d(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new n(this.headers),url:this.url})},d.error=function(){var t=new d(null,{status:0,statusText:""});return t.type="error",t};var _=[301,302,303,307,308];d.redirect=function(t,e){if(-1===_.indexOf(e))throw new RangeError("Invalid status code");return new d(null,{status:e,headers:{location:t}})},t.Headers=n,t.Request=u,t.Response=d,t.fetch=function(t,e){return new Promise(function(i,r){var n=new u(t,e),o=new XMLHttpRequest;o.onload=function(){var t={status:o.status,statusText:o.statusText,headers:p(o.getAllResponseHeaders()||"")};t.url="responseURL"in o?o.responseURL:t.headers.get("X-Request-URL");var e="response"in o?o.response:o.responseText;i(new d(e,t))},o.onerror=function(){r(new TypeError("Network request failed"))},o.ontimeout=function(){r(new TypeError("Network request failed"))},o.open(n.method,n.url,!0),"include"===n.credentials&&(o.withCredentials=!0),"responseType"in o&&f.blob&&(o.responseType="blob"),n.headers.forEach(function(t,e){o.setRequestHeader(e,t)}),o.send(void 0===n._bodyInit?null:n._bodyInit)})},t.fetch.polyfill=!0}}("undefined"!=typeof self?self:this)},{}],13:[function(t,e,i){"use strict";var r=t("./core/main");t("./core/constants"),t("./core/environment"),t("./core/error_helpers"),t("./core/helpers"),t("./core/legacy"),t("./core/p5.Element"),t("./core/p5.Graphics"),t("./core/p5.Renderer"),t("./core/p5.Renderer2D"),t("./core/rendering"),t("./core/shim"),t("./core/structure"),t("./core/transform"),t("./core/shape/2d_primitives"),t("./core/shape/attributes"),t("./core/shape/curves"),t("./core/shape/vertex"),t("./color/color_conversion"),t("./color/creating_reading"),t("./color/p5.Color"),t("./color/setting"),t("./data/p5.TypedDict"),t("./events/acceleration"),t("./events/keyboard"),t("./events/mouse"),t("./events/touch"),t("./image/filters"),t("./image/image"),t("./image/loading_displaying"),t("./image/p5.Image"),t("./image/pixels"),t("./io/files"),t("./io/p5.Table"),t("./io/p5.TableRow"),t("./io/p5.XML"),t("./math/calculation"),t("./math/math"),t("./math/noise"),t("./math/p5.Vector"),t("./math/random"),t("./math/trigonometry"),t("./typography/attributes"),t("./typography/loading_displaying"),t("./typography/p5.Font"),t("./utilities/array_functions"),t("./utilities/conversion"),t("./utilities/string_functions"),t("./utilities/time_date"),t("./webgl/3d_primitives"),t("./webgl/interaction"),t("./webgl/light"),t("./webgl/loading"),t("./webgl/material"),t("./webgl/p5.Camera"),t("./webgl/p5.Geometry"),t("./webgl/p5.Matrix"),t("./webgl/p5.RendererGL.Immediate"),t("./webgl/p5.RendererGL"),t("./webgl/p5.RendererGL.Retained"),t("./webgl/p5.Shader"),t("./webgl/p5.Texture"),t("./webgl/text"),t("./core/init"),e.exports=r},{"./color/color_conversion":14,"./color/creating_reading":15,"./color/p5.Color":16,"./color/setting":17,"./core/constants":18,"./core/environment":19,"./core/error_helpers":20,"./core/helpers":21,"./core/init":22,"./core/legacy":23,"./core/main":24,"./core/p5.Element":25,"./core/p5.Graphics":26,"./core/p5.Renderer":27,"./core/p5.Renderer2D":28,"./core/rendering":29,"./core/shape/2d_primitives":30,"./core/shape/attributes":31,"./core/shape/curves":32,"./core/shape/vertex":33,"./core/shim":34,"./core/structure":35,"./core/transform":36,"./data/p5.TypedDict":37,"./events/acceleration":38,"./events/keyboard":39,"./events/mouse":40,"./events/touch":41,"./image/filters":42,"./image/image":43,"./image/loading_displaying":44,"./image/p5.Image":45,"./image/pixels":46,"./io/files":47,"./io/p5.Table":48,"./io/p5.TableRow":49,"./io/p5.XML":50,"./math/calculation":51,"./math/math":52,"./math/noise":53,"./math/p5.Vector":54,"./math/random":55,"./math/trigonometry":56,"./typography/attributes":57,"./typography/loading_displaying":58,"./typography/p5.Font":59,"./utilities/array_functions":60,"./utilities/conversion":61,"./utilities/string_functions":62,"./utilities/time_date":63,"./webgl/3d_primitives":64,"./webgl/interaction":65,"./webgl/light":66,"./webgl/loading":67,"./webgl/material":68,"./webgl/p5.Camera":69,"./webgl/p5.Geometry":70,"./webgl/p5.Matrix":71,"./webgl/p5.RendererGL":74,"./webgl/p5.RendererGL.Immediate":72,"./webgl/p5.RendererGL.Retained":73,"./webgl/p5.Shader":75,"./webgl/p5.Texture":76,"./webgl/text":77}],14:[function(t,e,i){"use strict";var r=t("../core/main");r.ColorConversion={},r.ColorConversion._hsbaToHSLA=function(t){var e=t[0],i=t[1],r=t[2],n=(2-i)*r/2;return 0!==n&&(1===n?i=0:n<.5?i/=2-i:i=i*r/(2-2*n)),[e,i,n,t[3]]},r.ColorConversion._hsbaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s,a,h=Math.floor(e),l=r*(1-i),u=r*(1-i*(e-h)),c=r*(1-i*(1+h-e));1===h?(o=u,s=r,a=l):2===h?(o=l,s=r,a=c):3===h?(o=l,s=u,a=r):4===h?(o=c,s=l,a=r):5===h?(o=r,s=l,a=u):(o=r,s=c,a=l),n=[o,s,a,t[3]]}return n},r.ColorConversion._hslaToHSBA=function(t){var e,i=t[0],r=t[1],n=t[2];return[i,r=2*((e=n<.5?(1+r)*n:n+r-n*r)-n)/e,e,t[3]]},r.ColorConversion._hslaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s=2*r-(o=r<.5?(1+i)*r:r+i-r*i),a=function(t,e,i){return t<0?t+=6:t>=6&&(t-=6),t<1?e+(i-e)*t:t<3?i:t<4?e+(i-e)*(4-t):e};n=[a(e+2,s,o),a(e,s,o),a(e-2,s,o),t[3]]}return n},r.ColorConversion._rgbaToHSBA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=s-Math.min(r,n,o);return 0===a?(e=0,i=0):(i=a/s,r===s?e=(n-o)/a:n===s?e=2+(o-r)/a:o===s&&(e=4+(r-n)/a),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,s,t[3]]},r.ColorConversion._rgbaToHSLA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=Math.min(r,n,o),h=s+a,l=s-a;return 0===l?(e=0,i=0):(i=h<1?l/h:l/(2-h),r===s?e=(n-o)/l:n===s?e=2+(o-r)/l:o===s&&(e=4+(r-n)/l),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,h/2,t[3]]},e.exports=r.ColorConversion},{"../core/main":24}],15:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),t("../core/error_helpers"),r.prototype.alpha=function(t){return r._validateParameters("alpha",arguments),this.color(t)._getAlpha()},r.prototype.blue=function(t){return r._validateParameters("blue",arguments),this.color(t)._getBlue()},r.prototype.brightness=function(t){return r._validateParameters("brightness",arguments),this.color(t)._getBrightness()},r.prototype.color=function(){if(r._validateParameters("color",arguments),arguments[0]instanceof r.Color)return arguments[0];var t=arguments[0]instanceof Array?arguments[0]:arguments;return new r.Color(this,t)},r.prototype.green=function(t){return r._validateParameters("green",arguments),this.color(t)._getGreen()},r.prototype.hue=function(t){return r._validateParameters("hue",arguments),this.color(t)._getHue()},r.prototype.lerpColor=function(t,e,i){r._validateParameters("lerpColor",arguments);var o,s,a,h,l,u,c=this._colorMode,p=this._colorMaxes;if(c===n.RGB)l=t.levels.map(function(t){return t/255}),u=e.levels.map(function(t){return t/255});else if(c===n.HSB)t._getBrightness(),e._getBrightness(),l=t.hsba,u=e.hsba;else{if(c!==n.HSL)throw new Error(c+"cannot be used for interpolation.");t._getLightness(),e._getLightness(),l=t.hsla,u=e.hsla}return i=Math.max(Math.min(i,1),0),void 0===this.lerp&&(this.lerp=function(t,e,i){return i*(e-t)+t}),o=this.lerp(l[0],u[0],i),s=this.lerp(l[1],u[1],i),a=this.lerp(l[2],u[2],i),h=this.lerp(l[3],u[3],i),o*=p[c][0],s*=p[c][1],a*=p[c][2],h*=p[c][3],this.color(o,s,a,h)},r.prototype.lightness=function(t){return r._validateParameters("lightness",arguments),this.color(t)._getLightness()},r.prototype.red=function(t){return r._validateParameters("red",arguments),this.color(t)._getRed()},r.prototype.saturation=function(t){return r._validateParameters("saturation",arguments),this.color(t)._getSaturation()},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"./p5.Color":16}],16:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("./color_conversion");r.Color=function(t,e){if(this._storeModeAndMaxes(t._colorMode,t._colorMaxes),this.mode!==n.RGB&&this.mode!==n.HSL&&this.mode!==n.HSB)throw new Error(this.mode+" is an invalid colorMode.");return this._array=r.Color._parseInputs.apply(this,e),this._calculateLevels(),this},r.Color.prototype.toString=function(t){this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsla||(this.hsla=o._rgbaToHSLA(this._array));var e=this.levels,i=this._array,r=i[3];switch(t){case"#rrggbb":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16));case"#rrggbbaa":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16),e[3]<16?"0".concat(e[2].toString(16)):e[3].toString(16));case"#rgb":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16));case"#rgba":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16),Math.round(15*i[3]).toString(16));case"rgb":return"rgb(".concat(e[0],", ",e[1],", ",e[2],")");case"rgb%":return"rgb(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%)");case"rgba%":return"rgba(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%, ",(100*i[3]).toPrecision(3),"%)");case"hsb":case"hsv":return"hsb(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],")");case"hsb%":case"hsv%":return"hsb(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%)");case"hsba":case"hsva":return"hsba(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],", ",r,")");case"hsba%":case"hsva%":return"hsba(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"hsl":return"hsl(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],")");case"hsl%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%)");case"hsla":return"hsla(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],", ",r,")");case"hsla%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"rgba":default:return"rgba("+e[0]+","+e[1]+","+e[2]+","+r+")"}},r.Color.prototype.setRed=function(t){this._array[0]=t/this.maxes[n.RGB][0],this._calculateLevels()},r.Color.prototype.setGreen=function(t){this._array[1]=t/this.maxes[n.RGB][1],this._calculateLevels()},r.Color.prototype.setBlue=function(t){this._array[2]=t/this.maxes[n.RGB][2],this._calculateLevels()},r.Color.prototype.setAlpha=function(t){this._array[3]=t/this.maxes[this.mode][3],this._calculateLevels()},r.Color.prototype._calculateLevels=function(){for(var t=this._array,e=this.levels=new Array(t.length),i=t.length-1;i>=0;--i)e[i]=Math.round(255*t[i])},r.Color.prototype._getAlpha=function(){return this._array[3]*this.maxes[this.mode][3]},r.Color.prototype._storeModeAndMaxes=function(t,e){this.mode=t,this.maxes=e},r.Color.prototype._getMode=function(){return this.mode},r.Color.prototype._getMaxes=function(){return this.maxes},r.Color.prototype._getBlue=function(){return this._array[2]*this.maxes[n.RGB][2]},r.Color.prototype._getBrightness=function(){return this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[2]*this.maxes[n.HSB][2]},r.Color.prototype._getGreen=function(){return this._array[1]*this.maxes[n.RGB][1]},r.Color.prototype._getHue=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[0]*this.maxes[n.HSB][0]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[0]*this.maxes[n.HSL][0])},r.Color.prototype._getLightness=function(){return this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[2]*this.maxes[n.HSL][2]},r.Color.prototype._getRed=function(){return this._array[0]*this.maxes[n.RGB][0]},r.Color.prototype._getSaturation=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[1]*this.maxes[n.HSB][1]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[1]*this.maxes[n.HSL][1])};var s={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},a=/\s*/,h=/(\d{1,3})/,l=/((?:\d+(?:\.\d+)?)|(?:\.\d+))/,u=new RegExp(l.source+"%"),c={HEX3:/^#([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX4:/^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX6:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,HEX8:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,RGB:new RegExp(["^rgb\\(",h.source,",",h.source,",",h.source,"\\)$"].join(a.source),"i"),RGB_PERCENT:new RegExp(["^rgb\\(",u.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),RGBA:new RegExp(["^rgba\\(",h.source,",",h.source,",",h.source,",",l.source,"\\)$"].join(a.source),"i"),RGBA_PERCENT:new RegExp(["^rgba\\(",u.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSL:new RegExp(["^hsl\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSLA:new RegExp(["^hsla\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSB:new RegExp(["^hsb\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSBA:new RegExp(["^hsba\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i")};r.Color._parseInputs=function(t,e,i,a){var h,l=arguments.length,u=this.mode,p=this.maxes[u],d=[];if(l>=3){for(d[0]=t/p[0],d[1]=e/p[1],d[2]=i/p[2],d[3]="number"==typeof a?a/p[3]:1,h=d.length-1;h>=0;--h){var f=d[h];f<0?d[h]=0:f>1&&(d[h]=1)}return u===n.HSL?o._hslaToRGBA(d):u===n.HSB?o._hsbaToRGBA(d):d}if(1===l&&"string"==typeof t){var m=t.trim().toLowerCase();if(s[m])return r.Color._parseInputs.call(this,s[m]);if(c.HEX3.test(m))return(d=c.HEX3.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255}))[3]=1,d;if(c.HEX6.test(m))return(d=c.HEX6.exec(m).slice(1).map(function(t){return parseInt(t,16)/255}))[3]=1,d;if(c.HEX4.test(m))return d=c.HEX4.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255});if(c.HEX8.test(m))return d=c.HEX8.exec(m).slice(1).map(function(t){return parseInt(t,16)/255});if(c.RGB.test(m))return(d=c.RGB.exec(m).slice(1).map(function(t){return t/255}))[3]=1,d;if(c.RGB_PERCENT.test(m))return(d=c.RGB_PERCENT.exec(m).slice(1).map(function(t){return parseFloat(t)/100}))[3]=1,d;if(c.RGBA.test(m))return d=c.RGBA.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):t/255});if(c.RGBA_PERCENT.test(m))return d=c.RGBA_PERCENT.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):parseFloat(t)/100});if(c.HSL.test(m)?(d=c.HSL.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSLA.test(m)&&(d=c.HSLA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),(d=d.map(function(t){return Math.max(Math.min(t,1),0)})).length)return o._hslaToRGBA(d);if(c.HSB.test(m)?(d=c.HSB.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSBA.test(m)&&(d=c.HSBA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),d.length){for(h=d.length-1;h>=0;--h)d[h]=Math.max(Math.min(d[h],1),0);return o._hsbaToRGBA(d)}d=[1,1,1,1]}else{if(1!==l&&2!==l||"number"!=typeof t)throw new Error(arguments+"is not a valid color representation.");d[0]=t/p[2],d[1]=t/p[2],d[2]=t/p[2],d[3]="number"==typeof e?e/p[3]:1,d=d.map(function(t){return Math.max(Math.min(t,1),0)})}return d},e.exports=r.Color},{"../core/constants":18,"../core/main":24,"./color_conversion":14}],17:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),r.prototype.background=function(){return arguments[0]instanceof r.Image?this.image(arguments[0],0,0,this.width,this.height):this._renderer.background.apply(this._renderer,arguments),this},r.prototype.clear=function(){return this._renderer.clear(),this},r.prototype.colorMode=function(t,e,i,o,s){if(r._validateParameters("colorMode",arguments),t===n.RGB||t===n.HSB||t===n.HSL){this._colorMode=t;var a=this._colorMaxes[t];2===arguments.length?(a[0]=e,a[1]=e,a[2]=e,a[3]=e):4===arguments.length?(a[0]=e,a[1]=i,a[2]=o):5===arguments.length&&(a[0]=e,a[1]=i,a[2]=o,a[3]=s)}return this},r.prototype.fill=function(){return this._renderer._setProperty("_fillSet",!0),this._renderer._setProperty("_doFill",!0),this._renderer.fill.apply(this._renderer,arguments),this},r.prototype.noFill=function(){return this._renderer._setProperty("_doFill",!1),this},r.prototype.noStroke=function(){return this._renderer._setProperty("_doStroke",!1),this},r.prototype.stroke=function(){return this._renderer._setProperty("_strokeSet",!0),this._renderer._setProperty("_doStroke",!0),this._renderer.stroke.apply(this._renderer,arguments),this},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Color":16}],18:[function(t,e,i){"use strict";var r=Math.PI;e.exports={P2D:"p2d",WEBGL:"webgl",ARROW:"default",CROSS:"crosshair",HAND:"pointer",MOVE:"move",TEXT:"text",WAIT:"wait",HALF_PI:r/2,PI:r,QUARTER_PI:r/4,TAU:2*r,TWO_PI:2*r,DEGREES:"degrees",RADIANS:"radians",DEG_TO_RAD:r/180,RAD_TO_DEG:180/r,CORNER:"corner",CORNERS:"corners",RADIUS:"radius",RIGHT:"right",LEFT:"left",CENTER:"center",TOP:"top",BOTTOM:"bottom",BASELINE:"alphabetic",POINTS:0,LINES:1,LINE_STRIP:3,LINE_LOOP:2,TRIANGLES:4,TRIANGLE_FAN:6,TRIANGLE_STRIP:5,QUADS:"quads",QUAD_STRIP:"quad_strip",CLOSE:"close",OPEN:"open",CHORD:"chord",PIE:"pie",PROJECT:"square",SQUARE:"butt",ROUND:"round",BEVEL:"bevel",MITER:"miter",RGB:"rgb",HSB:"hsb",HSL:"hsl",AUTO:"auto",ALT:18,BACKSPACE:8,CONTROL:17,DELETE:46,DOWN_ARROW:40,ENTER:13,ESCAPE:27,LEFT_ARROW:37,OPTION:18,RETURN:13,RIGHT_ARROW:39,SHIFT:16,TAB:9,UP_ARROW:38,BLEND:"source-over",ADD:"lighter",DARKEST:"darken",LIGHTEST:"lighten",DIFFERENCE:"difference",EXCLUSION:"exclusion",MULTIPLY:"multiply",SCREEN:"screen",REPLACE:"copy",OVERLAY:"overlay",HARD_LIGHT:"hard-light",SOFT_LIGHT:"soft-light",DODGE:"color-dodge",BURN:"color-burn",THRESHOLD:"threshold",GRAY:"gray",OPAQUE:"opaque",INVERT:"invert",POSTERIZE:"posterize",DILATE:"dilate",ERODE:"erode",BLUR:"blur",NORMAL:"normal",ITALIC:"italic",BOLD:"bold",_DEFAULT_TEXT_FILL:"#000000",_DEFAULT_LEADMULT:1.25,_CTX_MIDDLE:"middle",LINEAR:"linear",QUADRATIC:"quadratic",BEZIER:"bezier",CURVE:"curve",STROKE:"stroke",FILL:"fill",TEXTURE:"texture",IMMEDIATE:"immediate",NEAREST:"nearest",REPEAT:"repeat",CLAMP:"clamp",MIRROR:"mirror",LANDSCAPE:"landscape",PORTRAIT:"portrait",_DEFAULT_STROKE:"#000000",_DEFAULT_FILL:"#FFFFFF",GRID:"grid",AXES:"axes"}},{}],19:[function(t,e,i){"use strict";function r(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth||0}function n(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight||0}var o=t("./main"),s=t("./constants"),a=[s.ARROW,s.CROSS,s.HAND,s.MOVE,s.TEXT,s.WAIT];o.prototype._frameRate=0,o.prototype._lastFrameTime=window.performance.now(),o.prototype._targetFrameRate=60;var h=window.print;o.prototype.print=function(){arguments.length?console.log.apply(console,arguments):h()},o.prototype.frameCount=0,o.prototype.focused=document.hasFocus(),o.prototype.cursor=function(t,e,i){var r="auto",n=this._curElement.elt;if(a.indexOf(t)>-1)r=t;else if("string"==typeof t){var o="";e&&i&&"number"==typeof e&&"number"==typeof i&&(o=e+" "+i),r="http://"===t.substring(0,7)||"https://"===t.substring(0,8)?"url("+t+") "+o+", auto":/\.(cur|jpg|jpeg|gif|png|CUR|JPG|JPEG|GIF|PNG)$/.test(t)?"url("+t+") "+o+", auto":t}n.style.cursor=r},o.prototype.frameRate=function(t){return o._validateParameters("frameRate",arguments),"number"!=typeof t||t<0?this._frameRate:(this._setProperty("_targetFrameRate",t),this._runFrames(),this)},o.prototype.getFrameRate=function(){return this.frameRate()},o.prototype.setFrameRate=function(t){return this.frameRate(t)},o.prototype.noCursor=function(){this._curElement.elt.style.cursor="none"},o.prototype.displayWidth=screen.width,o.prototype.displayHeight=screen.height,o.prototype.windowWidth=r(),o.prototype.windowHeight=n(),o.prototype._onresize=function(t){this._setProperty("windowWidth",r()),this._setProperty("windowHeight",n());var e,i=this._isGlobal?window:this;"function"==typeof i.windowResized&&(void 0===(e=i.windowResized(t))||e||t.preventDefault())},o.prototype.width=0,o.prototype.height=0,o.prototype.fullscreen=function(t){if(o._validateParameters("fullscreen",arguments),void 0===t)return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;t?function(t){if(!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled))throw new Error("Fullscreen not enabled in this browser.");t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.msRequestFullscreen&&t.msRequestFullscreen()}(document.documentElement):document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.msExitFullscreen&&document.msExitFullscreen()},o.prototype.pixelDensity=function(t){var e;return o._validateParameters("pixelDensity",arguments),"number"==typeof t?(t!==this._pixelDensity&&(this._pixelDensity=t,this._pixelsDirty=!0),e=this,this.resizeCanvas(this.width,this.height,!0)):e=this._pixelDensity,e},o.prototype.displayDensity=function(){return window.devicePixelRatio},o.prototype.getURL=function(){return location.href},o.prototype.getURLPath=function(){return location.pathname.split("/").filter(function(t){return""!==t})},o.prototype.getURLParams=function(){for(var t,e=/[?&]([^&=]+)(?:[&=])([^&=]+)/gim,i={};null!=(t=e.exec(location.search));)t.index===e.lastIndex&&e.lastIndex++,i[t[1]]=t[2];return i},e.exports=o},{"./constants":18,"./main":24}],20:[function(t,e,i){"use strict";var r=t("./main");t("./constants"),r._validateParameters=r._friendlyFileLoadError=function(){};var n=null,o=function(){var e={},i=function(t){return Object.getOwnPropertyNames(t).filter(function(t){return!("_"===t[0]||t in e||(e[t]=!0,0))}).map(function(e){var i;return i="function"==typeof t[e]?"function":e===e.toUpperCase()?"constant":"variable",{name:e,type:i}})};(n=[].concat(i(r.prototype),i(t("./constants")))).sort(function(t,e){return e.name.length-t.name.length})},s=function(t,e){e||(e=console.log.bind(console)),n||o(),n.some(function(i){if(t.message&&null!==t.message.match("\\W?"+i.name+"\\W"))return e("Did you just try to use p5.js's "+i.name+("function"===i.type?"() ":" ")+i.type+"? If so, you may want to move it into your sketch's setup() function.\n\nFor more details, see: https://github.com/processing/p5.js/wiki/p5.js-overview#why-cant-i-assign-variables-using-p5-functions-and-variables-before-setup"),!0})};r.prototype._helpForMisusedAtTopLevelCode=s,"complete"!==document.readyState&&(window.addEventListener("error",s,!1),window.addEventListener("load",function(){window.removeEventListener("error",s,!1)})),e.exports=r},{"../../docs/reference/data.json":void 0,"./constants":18,"./main":24}],21:[function(t,e,i){"use strict";var r=t("./constants");e.exports={modeAdjust:function(t,e,i,n,o){return o===r.CORNER?{x:t,y:e,w:i,h:n}:o===r.CORNERS?{x:t,y:e,w:i-t,h:n-e}:o===r.RADIUS?{x:t-i,y:e-n,w:2*i,h:2*n}:o===r.CENTER?{x:t-.5*i,y:e-.5*n,w:i,h:n}:void 0}}},{"./constants":18}],22:[function(t,e,i){"use strict";var r=t("../core/main"),n=function(){window.mocha||(window.setup&&"function"==typeof window.setup||window.draw&&"function"==typeof window.draw)&&!r.instance&&new r};"complete"===document.readyState?n():window.addEventListener("load",n,!1)},{"../core/main":24}],23:[function(t,e,i){"use strict";var r=t("./main");r.prototype.exit=function(){throw new Error("exit() not implemented, see remove()")},r.prototype.pushStyle=function(){throw new Error("pushStyle() not used, see push()")},r.prototype.popStyle=function(){throw new Error("popStyle() not used, see pop()")},r.prototype.size=function(){var t="size() is not a valid p5 function, to set the size of the ";throw new Error(t+="drawing canvas, please use createCanvas() instead")},e.exports=r},{"./main":24}],24:[function(t,e,i){"use strict";t("./shim");var r=t("./constants"),n=function(t,e,i){"boolean"==typeof e&&void 0===i&&(i=e,e=void 0),this._setupDone=!1,this._pixelDensity=Math.ceil(window.devicePixelRatio)||1,this._userNode=e,this._curElement=null,this._elements=[],this._requestAnimId=0,this._preloadCount=0,this._isGlobal=!1,this._loop=!0,this._initializeInstanceVariables(),this._defaultCanvasSize={width:100,height:100},this._events={mousemove:null,mousedown:null,mouseup:null,dragend:null,dragover:null,click:null,dblclick:null,mouseover:null,mouseout:null,keydown:null,keyup:null,keypress:null,touchstart:null,touchmove:null,touchend:null,resize:null,blur:null},this._events.wheel=null,this._loadingScreenId="p5_loading",this._registeredMethods={};for(var r=Object.getOwnPropertyNames(n.prototype._registeredMethods),o=0;o=i-5)&&(this.redraw(),this._frameRate=1e3/(t-this._lastFrameTime),this._lastFrameTime=t,void 0!==this._updateMouseCoords&&this._updateMouseCoords()),this._loop&&(this._requestAnimId=window.requestAnimationFrame(this._draw))}.bind(this),this._runFrames=function(){this._updateInterval&&clearInterval(this._updateInterval)}.bind(this),this._setProperty=function(t,e){this[t]=e,this._isGlobal&&(window[t]=e)}.bind(this),this.remove=function(){var t=document.getElementById(this._loadingScreenId);if(t&&(t.parentNode.removeChild(t),this._incrementPreload()),this._curElement){for(var e in this._loop=!1,this._requestAnimId&&window.cancelAnimationFrame(this._requestAnimId),this._events)window.removeEventListener(e,this._events[e]);for(var i=0;i-1?o.readAsText(n):o.readAsDataURL(n)}},this)):console.log("The File APIs are not fully supported in this browser."),this},s.Element.prototype._setProperty=function(t,e){this[t]=e},e.exports=s.Element},{"./main":24}],26:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");r.Graphics=function(t,e,i,o){var s=i||n.P2D;for(var a in this.canvas=document.createElement("canvas"),(o._userNode||document.body).appendChild(this.canvas),r.Element.call(this,this.canvas,o,!1),r.prototype)this[a]||("function"==typeof r.prototype[a]?this[a]=r.prototype[a].bind(this):this[a]=r.prototype[a]);return r.prototype._initializeInstanceVariables.apply(this),this.width=t,this.height=e,this._pixelDensity=o._pixelDensity,s===n.WEBGL?this._renderer=new r.RendererGL(this.canvas,this,!1):this._renderer=new r.Renderer2D(this.canvas,this,!1),o._elements.push(this),this._renderer.resize(t,e),this._renderer._applyDefaults(),this},r.Graphics.prototype=Object.create(r.Element.prototype),r.Graphics.prototype.remove=function(){this.elt.parentNode&&this.elt.parentNode.removeChild(this.elt);var t=this._pInst._elements.indexOf(this);for(var e in-1!==t&&this._pInst._elements.splice(t,1),this._events)this.elt.removeEventListener(e,this._events[e])},e.exports=r.Graphics},{"./constants":18,"./main":24}],27:[function(t,e,i){"use strict";function r(t){var e=0,i=0;if(t.offsetParent)do{e+=t.offsetLeft,i+=t.offsetTop}while(t=t.offsetParent);else e+=t.offsetLeft,i+=t.offsetTop;return[e,i]}var n=t("./main"),o=t("../core/constants");n.Renderer=function(t,e,i){n.Element.call(this,t,e),this.canvas=t,i?(this._isMainCanvas=!0,this._pInst._setProperty("_curElement",this),this._pInst._setProperty("canvas",this.canvas),this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height)):(this.canvas.style.display="none",this._styles=[]),this._textSize=12,this._textLeading=15,this._textFont="sans-serif",this._textStyle=o.NORMAL,this._textAscent=null,this._textDescent=null,this._textAlign=o.LEFT,this._textBaseline=o.BASELINE,this._rectMode=o.CORNER,this._ellipseMode=o.CENTER,this._curveTightness=0,this._imageMode=o.CORNER,this._tint=null,this._doStroke=!0,this._doFill=!0,this._strokeSet=!1,this._fillSet=!1},n.Renderer.prototype=Object.create(n.Element.prototype),n.Renderer.prototype.push=function(){return{properties:{_doStroke:this._doStroke,_strokeSet:this._strokeSet,_doFill:this._doFill,_fillSet:this._fillSet,_tint:this._tint,_imageMode:this._imageMode,_rectMode:this._rectMode,_ellipseMode:this._ellipseMode,_textFont:this._textFont,_textLeading:this._textLeading,_textSize:this._textSize,_textAlign:this._textAlign,_textBaseline:this._textBaseline,_textStyle:this._textStyle}}},n.Renderer.prototype.pop=function(t){t.properties&&Object.assign(this,t.properties)},n.Renderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.elt.width=t*this._pInst._pixelDensity,this.elt.height=e*this._pInst._pixelDensity,this.elt.style.width=t+"px",this.elt.style.height=e+"px",this._isMainCanvas&&(this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height))},n.Renderer.prototype.textLeading=function(t){return"number"==typeof t?(this._setProperty("_textLeading",t),this._pInst):this._textLeading},n.Renderer.prototype.textSize=function(t){return"number"==typeof t?(this._setProperty("_textSize",t),this._setProperty("_textLeading",t*o._DEFAULT_LEADMULT),this._applyTextProperties()):this._textSize},n.Renderer.prototype.textStyle=function(t){return t?(t!==o.NORMAL&&t!==o.ITALIC&&t!==o.BOLD||this._setProperty("_textStyle",t),this._applyTextProperties()):this._textStyle},n.Renderer.prototype.textAscent=function(){return null===this._textAscent&&this._updateTextMetrics(),this._textAscent},n.Renderer.prototype.textDescent=function(){return null===this._textDescent&&this._updateTextMetrics(),this._textDescent},n.Renderer.prototype.textAlign=function(t,e){return void 0!==t?(this._setProperty("_textAlign",t),void 0!==e&&this._setProperty("_textBaseline",e),this._applyTextProperties()):{horizontal:this._textAlign,vertical:this._textBaseline}},n.Renderer.prototype.text=function(t,e,i,r,n){var s,a,h,l,u,c,p,d,f=this._pInst,m=Number.MAX_VALUE;if((this._doFill||this._doStroke)&&void 0!==t){if("string"!=typeof t&&(t=t.toString()),t=t.replace(/(\t)/g," "),s=t.split("\n"),void 0!==r){for(d=0,h=0;hr?(u=p[a]+" ",d+=f.textLeading()):u=c;switch(this._rectMode===o.CENTER&&(e-=r/2,i-=n/2),this._textAlign){case o.CENTER:e+=r/2;break;case o.RIGHT:e+=r}var y=!1;if(void 0!==n){switch(this._textBaseline){case o.BOTTOM:i+=n-d;break;case o.CENTER:i+=(n-d)/2;break;case o.BASELINE:y=!0,this._textBaseline=o.TOP}m=i+n-f.textAscent()}for(h=0;hr&&u.length>0?(this._renderText(f,u,e,i,m),u=p[a]+" ",i+=f.textLeading()):u=c;this._renderText(f,u,e,i,m),i+=f.textLeading(),y&&(this._textBaseline=o.BASELINE)}}else{var v=0,g=f.textAlign().vertical;for(g===o.CENTER?v=(s.length-1)*f.textLeading()/2:g===o.BOTTOM&&(v=(s.length-1)*f.textLeading()),l=0;l0&&(c=u.width/t.width),this.drawingContext.drawImage(u,c*e,c*i,c*n,c*o,s,a,h,l)}catch(t){if("NS_ERROR_NOT_AVAILABLE"!==t.name)throw t}this._pInst._pixelsDirty=!0},r.Renderer2D.prototype._getTintedImageCanvas=function(t){if(!t.canvas)return t;var e=o._toPixels(t.canvas),i=document.createElement("canvas");i.width=t.canvas.width,i.height=t.canvas.height;for(var r=i.getContext("2d"),n=r.createImageData(t.canvas.width,t.canvas.height),s=n.data,a=0;a=this.width||e>=this.height)return[0,0,0,255];var o=this._pInst||this,s=o._pixelDensity;t=Math.floor(t),e=Math.floor(e),i=Math.floor(i),n=Math.floor(n);var a,h,l=t*s,u=e*s;if(1!==i||1!==n||this instanceof r.RendererGL){var c=Math.min(i,o.width),p=Math.min(n,o.height),d=c*s,f=p*s,m=new r.Image(c,p);return m.canvas.getContext("2d").drawImage(this.canvas,l,u,d,f,0,0,c,p),m}return o._pixelsDirty?(a=this.drawingContext.getImageData(l,u,1,1).data,h=0):(a=o.pixels,h=4*(l+u*this.width*s)),[a[h+0],a[h+1],a[h+2],a[h+3]]},r.Renderer2D.prototype.loadPixels=function(){var t=this._pInst||this;if(t._pixelsDirty){t._pixelsDirty=!1;var e=t._pixelDensity,i=this.width*e,r=this.height*e,n=this.drawingContext.getImageData(0,0,i,r);t._setProperty("imageData",n),t._setProperty("pixels",n.data)}},r.Renderer2D.prototype.set=function(t,e,i){t=Math.floor(t),e=Math.floor(e);var n=this._pInst||this;if(i instanceof r.Image)this.drawingContext.save(),this.drawingContext.setTransform(1,0,0,1,0,0),this.drawingContext.scale(n._pixelDensity,n._pixelDensity),this.drawingContext.drawImage(i.canvas,t,e),this.drawingContext.restore(),n._pixelsDirty=!0;else{var o=0,s=0,a=0,h=0,l=4*(e*n._pixelDensity*(this.width*n._pixelDensity)+t*n._pixelDensity);if(n.imageData&&!n._pixelsDirty||n.loadPixels.call(n),"number"==typeof i)l1e-5;)c=Math.min(s-o,n.HALF_PI),p.push(this._acuteArcToBezier(o,c)),o+=c;return this._doFill&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a!==n.PIE&&null!=a||h.lineTo(t,e),h.closePath(),h.fill()),this._doStroke&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a===n.PIE?(h.lineTo(t,e),h.closePath()):a===n.CHORD&&h.closePath(),h.stroke()),this},r.Renderer2D.prototype.ellipse=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;var l=.5522847498,u=a/2*l,c=h/2*l,p=n+a,d=o+h,f=n+a/2,m=o+h/2;e.beginPath(),e.moveTo(n,m),e.bezierCurveTo(n,m-c,f-u,o,f,o),e.bezierCurveTo(f+u,o,p,m-c,p,m),e.bezierCurveTo(p,m+c,f+u,d,f,d),e.bezierCurveTo(f-u,d,n,m+c,n,m),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.line=function(t,e,i,r){var n=this.drawingContext;return this._doStroke?this._getStroke()===s?this:(n.lineWidth%2==1&&n.translate(.5,.5),n.beginPath(),n.moveTo(t,e),n.lineTo(i,r),n.stroke(),n.lineWidth%2==1&&n.translate(-.5,-.5),this):this},r.Renderer2D.prototype.point=function(t,e){var i=this.drawingContext;if(!this._doStroke)return this;if(this._getStroke()===s)return this;var r=this._getStroke(),o=this._getFill();t=Math.round(t),e=Math.round(e),this._setFill(r),i.lineWidth>1?(i.beginPath(),i.arc(t,e,i.lineWidth/2,0,n.TWO_PI,!1),i.fill()):i.fillRect(t,e,1,1),this._setFill(o)},r.Renderer2D.prototype.quad=function(t,e,i,r,n,o,a,h){var l=this.drawingContext,u=this._doFill,c=this._doStroke;if(u&&!c){if(this._getFill()===s)return this}else if(!u&&c&&this._getStroke()===s)return this;return l.beginPath(),l.moveTo(t,e),l.lineTo(i,r),l.lineTo(n,o),l.lineTo(a,h),l.closePath(),u&&l.fill(),c&&l.stroke(),this},r.Renderer2D.prototype.rect=function(t){var e=t[0],i=t[1],r=t[2],n=t[3],o=t[4],a=t[5],h=t[6],l=t[7],u=this.drawingContext,c=this._doFill,p=this._doStroke;if(c&&!p){if(this._getFill()===s)return this}else if(!c&&p&&this._getStroke()===s)return this;if(this._doStroke&&u.lineWidth%2==1&&u.translate(.5,.5),u.beginPath(),void 0===o)u.rect(e,i,r,n);else{void 0===a&&(a=o),void 0===h&&(h=a),void 0===l&&(l=h);var d=r/2,f=n/2;r<2*o&&(o=d),n<2*o&&(o=f),r<2*a&&(a=d),n<2*a&&(a=f),r<2*h&&(h=d),n<2*h&&(h=f),r<2*l&&(l=d),n<2*l&&(l=f),u.beginPath(),u.moveTo(e+o,i),u.arcTo(e+r,i,e+r,i+n,a),u.arcTo(e+r,i+n,e,i+n,h),u.arcTo(e,i+n,e,i,l),u.arcTo(e,i,e+r,i,o),u.closePath()}return this._doFill&&u.fill(),this._doStroke&&u.stroke(),this._doStroke&&u.lineWidth%2==1&&u.translate(-.5,-.5),this},r.Renderer2D.prototype.triangle=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3],l=t[4],u=t[5];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;e.beginPath(),e.moveTo(n,o),e.lineTo(a,h),e.lineTo(l,u),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.endShape=function(t,e,i,r,o,s,a){if(0===e.length)return this;if(!this._doStroke&&!this._doFill)return this;var h,l=t===n.CLOSE;l&&!s&&e.push(e[0]);var u,c,p=e.length;if(!i||a!==n.POLYGON&&null!==a)if(!r||a!==n.POLYGON&&null!==a)if(!o||a!==n.POLYGON&&null!==a)if(a===n.POINTS)for(u=0;u2){for(this.drawingContext.beginPath(),u=2;u3)for(u=0;u+13){var d=[],f=1-this._curveTightness;for(this.drawingContext.beginPath(),this.drawingContext.moveTo(e[1][0],e[1][1]),u=1;u+2=o))return t.push(),this._isOpenType()?this._textFont._renderPath(e,i,r,{renderer:this}):(this._doStroke&&this._strokeSet&&this.drawingContext.strokeText(e,i,r),this._doFill&&(this._fillSet||this._setFill(n._DEFAULT_TEXT_FILL),this.drawingContext.fillText(e,i,r))),t.pop(),this._pInst._pixelsDirty=!0,t},r.Renderer2D.prototype.textWidth=function(t){return this._isOpenType()?this._textFont._textWidth(t,this._textSize):this.drawingContext.measureText(t).width},r.Renderer2D.prototype._applyTextProperties=function(){var t,e=this._pInst;return this._setProperty("_textAscent",null),this._setProperty("_textDescent",null),t=this._textFont,this._isOpenType()&&(t=this._textFont.font.familyName,this._setProperty("_textStyle",this._textFont.font.styleName)),this.drawingContext.font=(this._textStyle||"normal")+" "+(this._textSize||12)+"px "+(t||"sans-serif"),this.drawingContext.textAlign=this._textAlign,this._textBaseline===n.CENTER?this.drawingContext.textBaseline=n._CTX_MIDDLE:this.drawingContext.textBaseline=this._textBaseline,e},r.Renderer2D.prototype.push=function(){return this.drawingContext.save(),r.Renderer.prototype.push.apply(this)},r.Renderer2D.prototype.pop=function(t){this.drawingContext.restore(),this._cachedFillStyle=this.drawingContext.fillStyle,this._cachedStrokeStyle=this.drawingContext.strokeStyle,r.Renderer.prototype.pop.call(this,t)},e.exports=r.Renderer2D},{"../image/filters":42,"./constants":18,"./main":24,"./p5.Renderer":27}],29:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");t("./p5.Graphics"),t("./p5.Renderer2D"),t("../webgl/p5.RendererGL");var o="defaultCanvas0",s="p5Canvas";r.prototype.createCanvas=function(t,e,i){r._validateParameters("createCanvas",arguments);var a,h=i||n.P2D;if(h===n.WEBGL){if(a=document.getElementById(o)){a.parentNode.removeChild(a);var l=this._renderer;this._elements=this._elements.filter(function(t){return t!==l})}(a=document.createElement("canvas")).id=o,a.classList.add(s)}else if(this._defaultGraphicsCreated)a=this.canvas;else{a=document.createElement("canvas");for(var u=0;document.getElementById("defaultCanvas"+u);)u++;o="defaultCanvas"+u,a.id=o,a.classList.add(s)}return this._setupDone||(a.dataset.hidden=!0,a.style.visibility="hidden"),this._userNode?this._userNode.appendChild(a):document.body.appendChild(a),h===n.WEBGL?(this._setProperty("_renderer",new r.RendererGL(a,this,!0)),this._elements.push(this._renderer)):this._defaultGraphicsCreated||(this._setProperty("_renderer",new r.Renderer2D(a,this,!0)),this._defaultGraphicsCreated=!0,this._elements.push(this._renderer)),this._renderer.resize(t,e),this._renderer._applyDefaults(),this._renderer},r.prototype.resizeCanvas=function(t,e,i){if(r._validateParameters("resizeCanvas",arguments),this._renderer){var n={};for(var o in this.drawingContext){var s=this.drawingContext[o];"object"!=typeof s&&"function"!=typeof s&&(n[o]=s)}for(var a in this._renderer.resize(t,e),this.width=t,this.height=e,n)try{this.drawingContext[a]=n[a]}catch(t){}i||this.redraw()}},r.prototype.noCanvas=function(){this.canvas&&this.canvas.parentNode.removeChild(this.canvas)},r.prototype.createGraphics=function(t,e,i){return r._validateParameters("createGraphics",arguments),new r.Graphics(t,e,i,this)},r.prototype.blendMode=function(t){if(r._validateParameters("blendMode",arguments),t!==n.BLEND&&t!==n.DARKEST&&t!==n.LIGHTEST&&t!==n.DIFFERENCE&&t!==n.MULTIPLY&&t!==n.EXCLUSION&&t!==n.SCREEN&&t!==n.REPLACE&&t!==n.OVERLAY&&t!==n.HARD_LIGHT&&t!==n.SOFT_LIGHT&&t!==n.DODGE&&t!==n.BURN&&t!==n.ADD&&t!==n.NORMAL)throw new Error("Mode "+t+" not recognized.");this._renderer.blendMode(t)},e.exports=r},{"../webgl/p5.RendererGL":74,"./constants":18,"./main":24,"./p5.Graphics":26,"./p5.Renderer2D":28}],30:[function(t,e,i){"use strict";var r=t("../main"),n=t("../constants"),o=t("../helpers");t("../error_helpers"),r.prototype.arc=function(t,e,i,s,a,h,l,u){if(r._validateParameters("arc",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;for(a=this._toRadians(a),h=this._toRadians(h);a<0;)a+=n.TWO_PI;for(;h<0;)h+=n.TWO_PI;void 0!==a&&void 0!==h&&(h.toFixed(10)===a.toFixed(10)||Math.abs(h-a)===n.TWO_PI?(a%=n.TWO_PI,h%=n.TWO_PI,a+=n.TWO_PI):Math.abs(h-a)>n.TWO_PI&&(a%=n.TWO_PI,h%=n.TWO_PI,h+=n.TWO_PI)),a<=n.HALF_PI?a=Math.atan(i/s*Math.tan(a)):a>n.HALF_PI&&a<=3*n.HALF_PI&&(a=Math.atan(i/s*Math.tan(a))+n.PI),h<=n.HALF_PI?h=Math.atan(i/s*Math.tan(h)):h>n.HALF_PI&&h<=3*n.HALF_PI&&(h=Math.atan(i/s*Math.tan(h))+n.PI),a>h&&(h+=n.TWO_PI),i=Math.abs(i),s=Math.abs(s);var c=o.modeAdjust(t,e,i,s,this._renderer._ellipseMode);return this._renderer.arc(c.x,c.y,c.w,c.h,a,h,l,u),this},r.prototype.ellipse=function(t,e,i,n,s){if(r._validateParameters("ellipse",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;i<0&&(i=Math.abs(i)),void 0===n?n=i:n<0&&(n=Math.abs(n));var a=o.modeAdjust(t,e,i,n,this._renderer._ellipseMode);return this._renderer.ellipse([a.x,a.y,a.w,a.h,s]),this},r.prototype.line=function(){return r._validateParameters("line",arguments),this._renderer._doStroke&&this._renderer.line.apply(this._renderer,arguments),this},r.prototype.point=function(){return r._validateParameters("point",arguments),this._renderer._doStroke&&this._renderer.point.apply(this._renderer,arguments),this},r.prototype.quad=function(){return r._validateParameters("quad",arguments),(this._renderer._doStroke||this._renderer._doFill)&&this._renderer.quad.apply(this._renderer,arguments),this},r.prototype.rect=function(){if(r._validateParameters("rect",arguments),this._renderer._doStroke||this._renderer._doFill){for(var t=o.modeAdjust(arguments[0],arguments[1],arguments[2],arguments[3],this._renderer._rectMode),e=[t.x,t.y,t.w,t.h],i=4;i0))throw new Error("vertex() must be used once before calling quadraticVertex()");u=!0;for(var e=[],i=0;id||Math.abs(this.accelerationY-this.pAccelerationY)>d||Math.abs(this.accelerationZ-this.pAccelerationZ)>d)&&t();var e=this.deviceTurned||window.deviceTurned;if("function"==typeof e){var i=this.rotationX+180,r=this.pRotationX+180,m=a+180;i-r>0&&i-r<270||i-r<-270?u="clockwise":(i-r<0||i-r>270)&&(u="counter-clockwise"),u!==n&&(m=i),Math.abs(i-m)>90&&Math.abs(i-m)<270&&(m=i,this._setProperty("turnAxis","X"),e()),n=u,a=m-180;var y=this.rotationY+180,v=this.pRotationY+180,g=h+180;y-v>0&&y-v<270||y-v<-270?c="clockwise":(y-v<0||y-this.pRotationY>270)&&(c="counter-clockwise"),c!==o&&(g=y),Math.abs(y-g)>90&&Math.abs(y-g)<270&&(g=y,this._setProperty("turnAxis","Y"),e()),o=c,h=g-180,this.rotationZ-this.pRotationZ>0&&this.rotationZ-this.pRotationZ<270||this.rotationZ-this.pRotationZ<-270?p="clockwise":(this.rotationZ-this.pRotationZ<0||this.rotationZ-this.pRotationZ>270)&&(p="counter-clockwise"),p!==s&&(l=this.rotationZ),Math.abs(this.rotationZ-l)>90&&Math.abs(this.rotationZ-l)<270&&(l=this.rotationZ,this._setProperty("turnAxis","Z"),e()),s=p,this._setProperty("turnAxis",void 0)}var _,b,S=this.deviceShaken||window.deviceShaken;"function"==typeof S&&(null!==this.pAccelerationX&&(_=Math.abs(this.accelerationX-this.pAccelerationX),b=Math.abs(this.accelerationY-this.pAccelerationY)),_+b>f&&S())},e.exports=r},{"../core/main":24}],39:[function(t,e,i){"use strict";var r=t("../core/main"),n={};r.prototype.isKeyPressed=!1,r.prototype.keyIsPressed=!1,r.prototype.key="",r.prototype.keyCode=0,r.prototype._onkeydown=function(t){if(!n[t.which]){this._setProperty("isKeyPressed",!0),this._setProperty("keyIsPressed",!0),this._setProperty("keyCode",t.which),n[t.which]=!0,this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which);var e=this.keyPressed||window.keyPressed;"function"!=typeof e||t.charCode||!1===e(t)&&t.preventDefault()}},r.prototype._onkeyup=function(t){var e=this.keyReleased||window.keyReleased;n[t.which]=!1,function(){for(var t in n)if(n.hasOwnProperty(t)&&!0===n[t])return!0;return!1}()||(this._setProperty("isKeyPressed",!1),this._setProperty("keyIsPressed",!1)),this._setProperty("_lastKeyCodeTyped",null),this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which),this._setProperty("keyCode",t.which),"function"==typeof e&&!1===e(t)&&t.preventDefault()},r.prototype._onkeypress=function(t){if(t.which!==this._lastKeyCodeTyped){this._setProperty("keyCode",t.which),this._setProperty("_lastKeyCodeTyped",t.which),this._setProperty("key",String.fromCharCode(t.which));var e=this.keyTyped||window.keyTyped;"function"==typeof e&&!1===e(t)&&t.preventDefault()}},r.prototype._onblur=function(t){n={}},r.prototype.keyIsDown=function(t){return r._validateParameters("keyIsDown",arguments),n[t]},e.exports=r},{"../core/main":24}],40:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._hasMouseInteracted=!1,r.prototype.mouseX=0,r.prototype.mouseY=0,r.prototype.pmouseX=0,r.prototype.pmouseY=0,r.prototype.winMouseX=0,r.prototype.winMouseY=0,r.prototype.pwinMouseX=0,r.prototype.pwinMouseY=0,r.prototype.mouseButton=0,r.prototype.mouseIsPressed=!1,r.prototype._updateNextMouseCoords=function(t){if(null!==this._curElement&&(!t.touches||t.touches.length>0)){var e=function(t,e,i,r){r&&!r.clientX&&(r.touches?r=r.touches[0]:r.changedTouches&&(r=r.changedTouches[0]));var n=t.getBoundingClientRect(),o=t.scrollWidth/e,s=t.scrollHeight/i;return{x:(r.clientX-n.left)/o,y:(r.clientY-n.top)/s,winX:r.clientX,winY:r.clientY,id:r.identifier}}(this._curElement.elt,this.width,this.height,t);this._setProperty("mouseX",e.x),this._setProperty("mouseY",e.y),this._setProperty("winMouseX",e.winX),this._setProperty("winMouseY",e.winY)}this._hasMouseInteracted||(this._updateMouseCoords(),this._setProperty("_hasMouseInteracted",!0))},r.prototype._updateMouseCoords=function(){this._setProperty("pmouseX",this.mouseX),this._setProperty("pmouseY",this.mouseY),this._setProperty("pwinMouseX",this.winMouseX),this._setProperty("pwinMouseY",this.winMouseY),this._setProperty("_pmouseWheelDeltaY",this._mouseWheelDeltaY)},r.prototype._setMouseButton=function(t){1===t.button?this._setProperty("mouseButton",n.CENTER):2===t.button?this._setProperty("mouseButton",n.RIGHT):this._setProperty("mouseButton",n.LEFT)},r.prototype._onmousemove=function(t){var e=this._isGlobal?window:this;this._updateNextMouseCoords(t),this.mouseIsPressed?"function"==typeof e.mouseDragged?!1===e.mouseDragged(t)&&t.preventDefault():"function"==typeof e.touchMoved&&!1===e.touchMoved(t)&&t.preventDefault():"function"==typeof e.mouseMoved&&!1===e.mouseMoved(t)&&t.preventDefault()},r.prototype._onmousedown=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!0),this._setMouseButton(t),this._updateNextMouseCoords(t),"function"==typeof e.mousePressed?!1===e.mousePressed(t)&&t.preventDefault():"function"==typeof e.touchStarted&&!1===e.touchStarted(t)&&t.preventDefault()},r.prototype._onmouseup=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!1),"function"==typeof e.mouseReleased?!1===e.mouseReleased(t)&&t.preventDefault():"function"==typeof e.touchEnded&&!1===e.touchEnded(t)&&t.preventDefault()},r.prototype._ondragend=r.prototype._onmouseup,r.prototype._ondragover=r.prototype._onmousemove,r.prototype._onclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.mouseClicked&&!1===e.mouseClicked(t)&&t.preventDefault()},r.prototype._ondblclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.doubleClicked&&!1===e.doubleClicked(t)&&t.preventDefault()},r.prototype._mouseWheelDeltaY=0,r.prototype._pmouseWheelDeltaY=0,r.prototype._onwheel=function(t){var e=this._isGlobal?window:this;this._setProperty("_mouseWheelDeltaY",t.deltaY),"function"==typeof e.mouseWheel&&(t.delta=t.deltaY,!1===e.mouseWheel(t)&&t.preventDefault())},e.exports=r},{"../core/constants":18,"../core/main":24}],41:[function(t,e,i){"use strict";function r(t,e,i,r,n){n=n||0;var o=t.getBoundingClientRect(),s=t.scrollWidth/e,a=t.scrollHeight/i,h=r.touches[n]||r.changedTouches[n];return{x:(h.clientX-o.left)/s,y:(h.clientY-o.top)/a,winX:h.clientX,winY:h.clientY,id:h.identifier}}var n=t("../core/main");n.prototype.touches=[],n.prototype._updateTouchCoords=function(t){if(null!==this._curElement){for(var e=[],i=0;i=r)break;x=0}for(M=x;M=r);M++){var O=c[g+R];A=a[M],v+=A[(-16777216&O)>>>24],f+=A[(16711680&O)>>16],m+=A[(65280&O)>>8],y+=A[255&O],d+=s[M],g++}P[_=R+w]=v/d,E[_]=f/d,k[_]=m/d,C[_]=y/d}R+=r}for(R=0,S=(b=-n)*r,T=0;T=l)break;x=0,_=b,g=w+S}for(M=x;M=l);M++)A=a[M],v+=A[P[g]],f+=A[E[g]],m+=A[k[g]],y+=A[C[g]],d+=s[M],_++,g+=r;c[w+R]=v/d<<24|f/d<<16|m/d<<8|y/d}R+=r,S+=r,b++}h._setPixels(i,c)}var n,o,s,a,h={_toPixels:function(t){return t instanceof ImageData?t.data:t.getContext("2d").getImageData(0,0,t.width,t.height).data},_getARGB:function(t,e){var i=4*e;return t[i+3]<<24&4278190080|t[i]<<16&16711680|t[i+1]<<8&65280|255&t[i+2]},_setPixels:function(t,e){for(var i=0,r=0,n=t.length;r>>16,t[i+1]=(65280&e[r])>>>8,t[i+2]=255&e[r],t[i+3]=(4278190080&e[r])>>>24},_toImageData:function(t){return t instanceof ImageData?t:t.getContext("2d").getImageData(0,0,t.width,t.height)},_createImageData:function(t,e){return h._tmpCanvas=document.createElement("canvas"),h._tmpCtx=h._tmpCanvas.getContext("2d"),this._tmpCtx.createImageData(t,e)},apply:function(t,e,i){var r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),o=e(n,i);o instanceof ImageData?r.putImageData(o,0,0,0,0,t.width,t.height):r.putImageData(n,0,0,0,0,t.width,t.height)},threshold:function(t,e){var i=h._toPixels(t);void 0===e&&(e=.5);for(var r=Math.floor(255*e),n=0;n=r?255:0,i[n]=i[n+1]=i[n+2]=o}},gray:function(t){for(var e=h._toPixels(t),i=0;i255)throw new Error("Level must be greater than 2 and less than 255 for posterize");for(var r=e-1,n=0;n>8)/r,i[n+1]=255*(s*e>>8)/r,i[n+2]=255*(a*e>>8)/r}},dilate:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))>(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m>o&&(n=c,o=m),v>o&&(n=d,o=v),g>o&&(n=f,o=g),x[b++]=n;h._setPixels(_,x)},erode:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))<(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m=1&&(e=o[0]),o.length>=2&&(i=o[1]),i=i||r.prototype._checkFileExtension(e,i)[1]||"png"){default:n="image/png";break;case"jpeg":case"jpg":n="image/jpeg"}t.toBlob(function(t){r.prototype.downloadFile(t,e,i)},n)},r.prototype.saveFrames=function(t,e,i,o,s){r._validateParameters("saveFrames",arguments);var a=i||3;a=r.prototype.constrain(a,0,15),a*=1e3;var h=o||15;h=r.prototype.constrain(h,0,22);var l=0,u=r.prototype._makeFrame,c=this._curElement.elt,p=setInterval(function(){u(t+l,e,c),l++},1e3/h);setTimeout(function(){if(clearInterval(p),s)s(n);else for(var t=0;t0&&t0&&this.loadPixels(),this.setModified(!0),this._pixelsDirty=!0},r.Image.prototype.copy=function(){var t,e,i,n,o,s,a,h,l;if(9===arguments.length)t=arguments[0],e=arguments[1],i=arguments[2],n=arguments[3],o=arguments[4],s=arguments[5],a=arguments[6],h=arguments[7],l=arguments[8];else{if(8!==arguments.length)throw new Error("Signature not supported");t=this,e=arguments[0],i=arguments[1],n=arguments[2],o=arguments[3],s=arguments[4],a=arguments[5],h=arguments[6],l=arguments[7]}r.Renderer2D._copyHelper(this,t,e,i,n,o,s,a,h,l),this._pixelsDirty=!0},r.Image.prototype.mask=function(t){void 0===t&&(t=this);var e=this.drawingContext.globalCompositeOperation,i=1;t instanceof r.Renderer&&(i=t._pInst._pixelDensity);var n=[t,0,0,i*t.width,i*t.height,0,0,this.width,this.height];this.drawingContext.globalCompositeOperation="destination-in",r.Image.prototype.copy.apply(this,n),this.drawingContext.globalCompositeOperation=e,this.setModified(!0)},r.Image.prototype.filter=function(t,e){n.apply(this.canvas,n[t.toLowerCase()],e),this.setModified(!0)},r.Image.prototype.blend=function(){r.prototype.blend.apply(this,arguments),this.setModified(!0)},r.Image.prototype.setModified=function(t){this._modified=t},r.Image.prototype.isModified=function(){return this._modified},r.Image.prototype.save=function(t,e){r.prototype.saveCanvas(this.canvas,t,e)},e.exports=r.Image},{"../core/main":24,"./filters":42}],46:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("./filters");t("../color/p5.Color"),r.prototype.pixels=[],r.prototype.blend=function(){r._validateParameters("blend",arguments),this._renderer?this._renderer.blend.apply(this._renderer,arguments):r.Renderer2D.prototype.blend.apply(this,arguments)},r.prototype.copy=function(){r._validateParameters("copy",arguments),r.Renderer2D.prototype.copy.apply(this._renderer,arguments)},r.prototype.filter=function(t,e){r._validateParameters("filter",arguments),void 0!==this.canvas?n.apply(this.canvas,n[t.toLowerCase()],e):n.apply(this.elt,n[t.toLowerCase()],e)},r.prototype.get=function(t,e,i,r){return this._renderer.get(t,e,i,r)},r.prototype.loadPixels=function(){r._validateParameters("loadPixels",arguments),this._renderer.loadPixels()},r.prototype.set=function(t,e,i){this._renderer.set(t,e,i)},r.prototype.updatePixels=function(t,e,i,n){r._validateParameters("updatePixels",arguments),0!==this.pixels.length&&this._renderer.updatePixels(t,e,i,n)},e.exports=r},{"../color/p5.Color":16,"../core/main":24,"./filters":42}],47:[function(t,e,i){"use strict";function r(t,e){var i={};if(void 0===(e=e||[]))for(var r=0;r/g,">").replace(/"/g,""").replace(/'/g,"'")}function o(t,e){e&&!0!==e&&"true"!==e||(e=""),t||(t="untitled");var i="";return t&&t.indexOf(".")>-1&&(i=t.split(".").pop()),e&&i!==e&&(t=t+"."+(i=e)),[t,i]}var s=t("../core/main");t("whatwg-fetch"),t("es6-promise").polyfill();var a=t("fetch-jsonp");t("../core/error_helpers"),s.prototype.loadJSON=function(){s._validateParameters("loadJSON",arguments);for(var t,e,i,r=arguments[0],n={},o="json",a=1;a0&&"function"==typeof arguments[u];u--)h++;var c=arguments.length-h,p=arguments[0];if(2===c&&"string"==typeof p&&"object"==typeof arguments[1])r=new Request(p,arguments[1]),e=arguments[2],i=arguments[3];else{for(var d,f="GET",m=1;m64e6&&s._friendlyFileLoadError(7,p),t){case"json":case"jsonp":return e.json();case"binary":return e.blob();case"arrayBuffer":return e.arrayBuffer();case"xml":return e.text().then(function(t){return function t(e){var i=new s.XML,r=e.childNodes;if(r&&r.length){for(var n=0;n"),o.print("");var p=' "),o.print(""),o.print(" "),"0"!==a[0]){o.print(" ");for(var d=0;d"+f),o.print(" ")}o.print(" ")}for(var m=0;m");for(var y=0;y"+g),o.print(" ")}o.print(" ")}o.print("
"),o.print(""),o.print("")}o.close(),o.clear()},s.prototype.writeFile=function(t,e,i){var r="application/octet-stream";s.prototype._isSafari()&&(r="text/plain");var n=new Blob(t,{type:r});s.prototype.downloadFile(n,e,i)},s.prototype.downloadFile=function(e,i,r){var n=o(i,r),a=n[0];if(e instanceof Blob)t("file-saver").saveAs(e,a);else{var h=document.createElement("a");if(h.href=e,h.download=a,h.onclick=function(t){(function(t){document.body.removeChild(t.target)})(t),t.stopPropagation()},h.style.display="none",document.body.appendChild(h),s.prototype._isSafari()){var l="Hello, Safari user! To download this file...\n";l+="1. Go to File --\x3e Save As.\n",l+='2. Choose "Page Source" as the Format.\n',l+='3. Name it with this extension: ."'+n[1]+'"',alert(l)}h.click()}},s.prototype._checkFileExtension=o,s.prototype._isSafari=function(){return Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0},e.exports=s},{"../core/error_helpers":20,"../core/main":24,"es6-promise":4,"fetch-jsonp":5,"file-saver":6,"whatwg-fetch":12}],48:[function(t,e,i){"use strict";var r=t("../core/main");r.Table=function(t){this.columns=[],this.rows=[]},r.Table.prototype.addRow=function(t){var e=t||new r.TableRow;if(void 0===e.arr||void 0===e.obj)throw new Error("invalid TableRow: "+e);return e.table=this,this.rows.push(e),e},r.Table.prototype.removeRow=function(t){this.rows[t].table=null;var e=this.rows.splice(t+1,this.rows.length);this.rows.pop(),this.rows=this.rows.concat(e)},r.Table.prototype.getRow=function(t){return this.rows[t]},r.Table.prototype.getRows=function(){return this.rows},r.Table.prototype.findRow=function(t,e){if("string"==typeof e){for(var i=0;i=0))throw new Error('This table has no column named "'+t+'"');i=e[t],r[i]=e}else r[n]=this.rows[n].obj;return r},r.Table.prototype.getArray=function(){for(var t=[],e=0;e=0))throw new Error('This table has no column named "'+t+'"');this.obj[t]=e,this.arr[i]=e}else{if(!(t0},r.XML.prototype.listChildren=function(){return this.children.map(function(t){return t.name})},r.XML.prototype.getChildren=function(t){return t?this.children.filter(function(e){return e.name===t}):this.children},r.XML.prototype.getChild=function(t){if("string"!=typeof t)return this.children[t];for(var e=0;eo&&(o=a),n[s]=a}0===o&&(o=1);for(var h=0,l=0,u=0;u=1&&(f++,v--),g>=1&&(m++,g--),_>=1&&(y++,_--)}return b},n.prototype.noiseDetail=function(t,e){t>0&&(s=t),e>0&&(a=e)},n.prototype.noiseSeed=function(t){var e=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();e.setSeed(t),r=new Array(o+1);for(var i=0;it*t&&this.div(Math.sqrt(e)).mult(t),this},r.Vector.prototype.setMag=function(t){return this.normalize().mult(t)},r.Vector.prototype.heading=function(){var t=Math.atan2(this.y,this.x);return this.p5?this.p5._fromRadians(t):t},r.Vector.prototype.rotate=function(t){var e=this.heading()+t;this.p5&&(e=this.p5._toRadians(e));var i=this.mag();return this.x=Math.cos(e)*i,this.y=Math.sin(e)*i,this},r.Vector.prototype.angleBetween=function(t){var e=this.dot(t)/(this.mag()*t.mag()),i=Math.acos(Math.min(1,Math.max(-1,e)));return this.p5?this.p5._fromRadians(i):i},r.Vector.prototype.lerp=function(t,e,i,n){return t instanceof r.Vector?this.lerp(t.x,t.y,t.z,e):(this.x+=(t-this.x)*n||0,this.y+=(e-this.y)*n||0,this.z+=(i-this.z)*n||0,this)},r.Vector.prototype.array=function(){return[this.x||0,this.y||0,this.z||0]},r.Vector.prototype.equals=function(t,e,i){var n,o,s;return t instanceof r.Vector?(n=t.x||0,o=t.y||0,s=t.z||0):t instanceof Array?(n=t[0]||0,o=t[1]||0,s=t[2]||0):(n=t||0,o=e||0,s=i||0),this.x===n&&this.y===o&&this.z===s},r.Vector.fromAngle=function(t,e){return void 0===e&&(e=1),new r.Vector(e*Math.cos(t),e*Math.sin(t),0)},r.Vector.fromAngles=function(t,e,i){void 0===i&&(i=1);var n=Math.cos(e),o=Math.sin(e),s=Math.cos(t),a=Math.sin(t);return new r.Vector(i*a*o,-i*s,i*a*n)},r.Vector.random2D=function(){return this.fromAngle(Math.random()*n.TWO_PI)},r.Vector.random3D=function(){var t=Math.random()*n.TWO_PI,e=2*Math.random()-1,i=Math.sqrt(1-e*e),o=i*Math.cos(t),s=i*Math.sin(t);return new r.Vector(o,s,e)},r.Vector.add=function(t,e,i){return i?i.set(t):i=t.copy(),i.add(e),i},r.Vector.sub=function(t,e,i){return i?i.set(t):i=t.copy(),i.sub(e),i},r.Vector.mult=function(t,e,i){return i?i.set(t):i=t.copy(),i.mult(e),i},r.Vector.div=function(t,e,i){return i?i.set(t):i=t.copy(),i.div(e),i},r.Vector.dot=function(t,e){return t.dot(e)},r.Vector.cross=function(t,e){return t.cross(e)},r.Vector.dist=function(t,e){return t.dist(e)},r.Vector.lerp=function(t,e,i,r){return r?r.set(t):r=t.copy(),r.lerp(e,i),r},r.Vector.mag=function(t){var e=t.x,i=t.y,r=t.z,n=e*e+i*i+r*r;return Math.sqrt(n)},e.exports=r.Vector},{"../core/constants":18,"../core/main":24}],55:[function(t,e,i){"use strict";var r=t("../core/main"),n=!1,o=!1,s=0,a=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();r.prototype.randomSeed=function(t){a.setSeed(t),n=!0,o=!1},r.prototype.random=function(t,e){var i;if(i=n?a.rand():Math.random(),void 0===t)return i;if(void 0===e)return t instanceof Array?t[Math.floor(i*t.length)]:i*t;if(t>e){var r=t;t=e,e=r}return i*(e-t)+t},r.prototype.randomGaussian=function(t,e){var i,r,n,a;if(o)i=s,o=!1;else{do{r=this.random(2)-1,n=this.random(2)-1,a=r*r+n*n}while(a>=1);a=Math.sqrt(-2*Math.log(a)/a),i=r*a,s=n*a,o=!0}var h=t||0;return i*(e||1)+h},e.exports=r},{"../core/main":24}],56:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._angleMode=n.RADIANS,r.prototype.acos=function(t){return this._fromRadians(Math.acos(t))},r.prototype.asin=function(t){return this._fromRadians(Math.asin(t))},r.prototype.atan=function(t){return this._fromRadians(Math.atan(t))},r.prototype.atan2=function(t,e){return this._fromRadians(Math.atan2(t,e))},r.prototype.cos=function(t){return Math.cos(this._toRadians(t))},r.prototype.sin=function(t){return Math.sin(this._toRadians(t))},r.prototype.tan=function(t){return Math.tan(this._toRadians(t))},r.prototype.degrees=function(t){return t*n.RAD_TO_DEG},r.prototype.radians=function(t){return t*n.DEG_TO_RAD},r.prototype.angleMode=function(t){t!==n.DEGREES&&t!==n.RADIANS||(this._angleMode=t)},r.prototype._toRadians=function(t){return this._angleMode===n.DEGREES?t*n.DEG_TO_RAD:t},r.prototype._toDegrees=function(t){return this._angleMode===n.RADIANS?t*n.RAD_TO_DEG:t},r.prototype._fromRadians=function(t){return this._angleMode===n.DEGREES?t*n.RAD_TO_DEG:t},e.exports=r},{"../core/constants":18,"../core/main":24}],57:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.textAlign=function(t,e){return r._validateParameters("textAlign",arguments),this._renderer.textAlign.apply(this._renderer,arguments)},r.prototype.textLeading=function(t){return r._validateParameters("textLeading",arguments),this._renderer.textLeading.apply(this._renderer,arguments)},r.prototype.textSize=function(t){return r._validateParameters("textSize",arguments),this._renderer.textSize.apply(this._renderer,arguments)},r.prototype.textStyle=function(t){return r._validateParameters("textStyle",arguments),this._renderer.textStyle.apply(this._renderer,arguments)},r.prototype.textWidth=function(t){return r._validateParameters("textWidth",arguments),0===t.length?0:this._renderer.textWidth.apply(this._renderer,arguments)},r.prototype.textAscent=function(){return r._validateParameters("textAscent",arguments),this._renderer.textAscent()},r.prototype.textDescent=function(){return r._validateParameters("textDescent",arguments),this._renderer.textDescent()},r.prototype._updateTextMetrics=function(){return this._renderer._updateTextMetrics()},e.exports=r},{"../core/main":24}],58:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("opentype.js");t("../core/error_helpers"),r.prototype.loadFont=function(t,e,i){r._validateParameters("loadFont",arguments);var n=new r.Font(this),s=this;return o.load(t,function(o,a){if(o)return void 0!==i?i(o):(r._friendlyFileLoadError(4,t),void console.error(o,t));n.font=a,void 0!==e&&e(n),s._decrementPreload();var h,l,u=t.split("\\").pop().split("/").pop(),c=u.lastIndexOf("."),p=c<1?null:u.substr(c+1);["ttf","otf","woff","woff2"].indexOf(p)>-1&&(h=u.substr(0,c),(l=document.createElement("style")).appendChild(document.createTextNode("\n@font-face {\nfont-family: "+h+";\nsrc: url("+t+");\n}\n")),document.head.appendChild(l))}),n},r.prototype.text=function(t,e,i,n,o){return r._validateParameters("text",arguments),this._renderer._doFill||this._renderer._doStroke?this._renderer.text.apply(this._renderer,arguments):this},r.prototype.textFont=function(t,e){if(r._validateParameters("textFont",arguments),arguments.length){if(!t)throw new Error("null font passed to textFont");return this._renderer._setProperty("_textFont",t),e&&(this._renderer._setProperty("_textSize",e),this._renderer._setProperty("_textLeading",e*n._DEFAULT_LEADMULT)),this._renderer._applyTextProperties()}return this._renderer._textFont},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"opentype.js":10}],59:[function(t,e,i){"use strict";function r(t,e){for(var i=function(t,e){if("object"!=typeof t)t=e;else for(var i in e)void 0===t[i]&&(t[i]=e[i]);return t}(e,{sampleFactor:.1,simplifyThreshold:0}),r=c(t,0,1),o=r/(r*i.sampleFactor),s=[],a=0;a3&&r>=0;--r)h(a(t,r-1),a(t,r),a(t,r+1),e)&&(t.splice(r%t.length,1),i++);return i}function o(t){for(var e,i=[],r=0;rg||v<_)&&(T+=180),{x:f,y:m,m:{x:y,y:v},n:{x:g,y:_},start:{x:b,y:S},end:{x:x,y:w},alpha:T}}function u(t,e,i,r,n,o,s,a,h){return null==h?v(t,e,i,r,n,o,s,a):l(t,e,i,r,n,o,s,a,function(t,e,i,r,n,o,s,a,h){if(!(h<0||v(t,e,i,r,n,o,s,a).01;)u/=2,l=v(t,e,i,r,n,o,s,a,c+=(le&&!i)return{x:(a=u(r,n,o[1],o[2],o[3],o[4],o[5],o[6],e-h)).x,y:a.y,alpha:a.alpha};h+=s,r=+o[5],n=+o[6]}o.shift()}return(a=i?h:l(r,n,o[0],o[1],o[2],o[3],o[4],o[5],1)).alpha&&(a={x:a.x,y:a.y,alpha:a.alpha}),a}function p(t){var e=[],i=0,r=0,n=0,o=0,s=0;if(!t)return e;"M"===t[0][0]&&(i=+t[0][1],r=+t[0][2],n=i,o=r,s++,e[0]=["M",i,r]);for(var a,h,l,u=3===t.length&&"M"===t[0][0]&&"R"===t[1][0].toUpperCase()&&"Z"===t[2][0].toUpperCase(),c=s,p=t.length;c1&&(w=Math.sqrt(w),r*=w,n*=w);var T=r*r,M=n*n,A=(s===a?-1:1)*Math.sqrt(Math.abs((T*M-T*x*x-M*S*S)/(T*x*x+M*S*S)));d=A*r*x/n+(e+h)/2,f=A*-n*S/r+(i+l)/2,c=Math.asin(((i-f)/n).toFixed(9)),p=Math.asin(((l-f)/n).toFixed(9)),c=ep&&(c-=2*y),!a&&p>c&&(p-=2*y)}var P=p-c;if(Math.abs(P)>v){var E=p,k=h,C=l;p=c+v*(a&&p>c?1:-1),h=d+r*Math.cos(p),l=f+n*Math.sin(p),_=t(h,l,r,n,o,0,a,k,C,[p,E,d,f])}P=p-c;var R=Math.cos(c),O=Math.sin(c),L=Math.cos(p),F=Math.sin(p),I=Math.tan(P/4),D=4/3*r*I,U=4/3*n*I,B=[e,i],N=[e+D*O,i-U*R],G=[h+D*F,l-U*L],q=[h,l];if(N[0]=2*B[0]-N[0],N[1]=2*B[1]-N[1],u)return[N,G,q].concat(_);for(var V=[],j=0,z=(_=[N,G,q].concat(_).join().split(",")).length;j7){t[e].shift();for(var o=t[e];o.length;)a[e]="A",n&&(h[e]="A"),t.splice(e++,0,["C"].concat(o.splice(0,6)));t.splice(e,1),i=Math.max(r.length,n&&n.length||0)}},c=function(t,e,o,s,a){t&&e&&"M"===t[a][0]&&"M"!==e[a][0]&&(e.splice(a,0,["M",s.x,s.y]),o.bx=0,o.by=0,o.x=t[a][1],o.y=t[a][2],i=Math.max(r.length,n&&n.length||0))},d="",f="";i=Math.max(r.length,n&&n.length||0);for(var v=0;vr;r+=2){var o=[{x:+t[r-2],y:+t[r-1]},{x:+t[r],y:+t[r+1]},{x:+t[r+2],y:+t[r+3]},{x:+t[r+4],y:+t[r+5]}];e?r?n-4===r?o[3]={x:+t[0],y:+t[1]}:n-2===r&&(o[2]={x:+t[0],y:+t[1]},o[3]={x:+t[2],y:+t[3]}):o[0]={x:+t[n-2],y:+t[n-1]}:n-4===r?o[3]=o[2]:r||(o[0]={x:+t[r],y:+t[r+1]}),i.push(["C",(-o[0].x+6*o[1].x+o[2].x)/6,(-o[0].y+6*o[1].y+o[2].y)/6,(o[1].x+6*o[2].x-o[3].x)/6,(o[1].y+6*o[2].y-o[3].y)/6,o[2].x,o[2].y])}return i}function m(t,e,i,r){return[t,e,i,r,i,r]}function y(t,e,i,r,n,o){var s=1/3,a=2/3;return[s*t+a*i,s*e+a*r,s*n+a*i,s*o+a*r,n,o]}function v(t,e,i,r,n,o,s,a,h){null==h&&(h=1);for(var l=(h=h>1?1:h<0?0:h)/2,u=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],c=0,p=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],d=0;d<12;d++){var f=l*u[d]+l,m=g(f,t,i,n,s),y=g(f,e,r,o,a),v=m*m+y*y;c+=p[d]*Math.sqrt(v)}return l*c}function g(t,e,i,r,n){return t*(t*(-3*e+9*i-9*r+3*n)+6*e-12*i+6*r)-3*e+3*i}function _(){for(var t="",e=arguments.length-1;e>=0;--e){var i=arguments[e];t+=i===Object(i)?JSON.stringify(i):i}return t}var b=t("../core/main"),S=t("../core/constants");b.Font=function(t){this.parent=t,this.cache={},this.font=void 0},b.Font.prototype.list=function(){throw new Error("not yet implemented")},b.Font.prototype.textBounds=function(t,e,i,r,n){e=void 0!==e?e:0,i=void 0!==i?i:0,r=r||this.parent._renderer._textSize;var o=n&&n.renderer&&n.renderer._pInst||this.parent,s=o._renderer,a=s._textAlign||S.LEFT,h=s._textBaseline||S.BASELINE,l=_("textBounds",t,e,i,r,a,h),u=this.cache[l];if(!u){var c,p,d,f,m,y=[],v=[],g=this._scale(r);this.font.forEachGlyph(t,e,i,r,n,function(t,e,i,r){var n=t.getMetrics();y.push(e+n.xMin*g),y.push(e+n.xMax*g),v.push(i+-n.yMin*g),v.push(i+-n.yMax*g)}),c=Math.min.apply(null,y),p=Math.min.apply(null,v),d=Math.max.apply(null,y),f=Math.max.apply(null,v),u={x:c,y:p,h:f-p,w:d-c,advance:c-e},m=this._handleAlignment(s,t,u.x,u.y,u.w+u.advance),u.x=m.x,u.y=m.y,this.cache[_("textBounds",t,e,i,r,a,h)]=u}return u},b.Font.prototype.textToPoints=function(t,e,i,n,s){function a(e){return u[e].name&&"space"===u[e].name||t.length===u.length&&" "===t[e]||u[e].index&&3===u[e].index}var h=0,l=[],u=this._getGlyphs(t);n=n||this.parent._renderer._textSize;for(var c=0;c2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&"number"==typeof r.decimals&&(n=r.decimals),t.toPathData(n)},b.Font.prototype._getSVG=function(t,e,i,r){var n=3;return"string"==typeof t&&arguments.length>2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&("number"==typeof r.decimals&&(n=r.decimals),"number"==typeof r.strokeWidth&&(t.strokeWidth=r.strokeWidth),void 0!==r.fill&&(t.fill=r.fill),void 0!==r.stroke&&(t.stroke=r.stroke)),t.toSVG(n)},b.Font.prototype._renderPath=function(t,e,i,r){var n,o=r&&r.renderer||this.parent._renderer,s=o.drawingContext;n="object"==typeof t&&t.commands?t.commands:this._getPath(t,e,i,r).commands,s.beginPath();for(var a=0;a1;)i=Math.random()*o|0,r=t[--o],t[o]=t[i],t[i]=r;return t},r.prototype.sort=function(t,e){var i=e?t.slice(0,Math.min(e,t.length)):t,r=e?t.slice(Math.min(e,t.length)):[];return(i="string"==typeof i[0]?i.sort():i.sort(function(t,e){return t-e})).concat(r)},r.prototype.splice=function(t,e,i){return Array.prototype.splice.apply(t,[i,0].concat(e)),t},r.prototype.subset=function(t,e,i){return void 0!==i?t.slice(e,e+i):t.slice(e,t.length)},e.exports=r},{"../core/main":24}],61:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.float=function(t){return t instanceof Array?t.map(parseFloat):parseFloat(t)},r.prototype.int=function(t,e){return e=e||10,"string"==typeof t?parseInt(t,e):"number"==typeof t?0|t:"boolean"==typeof t?t?1:0:t instanceof Array?t.map(function(t){return r.prototype.int(t,e)}):void 0},r.prototype.str=function(t){return t instanceof Array?t.map(r.prototype.str):String(t)},r.prototype.boolean=function(t){return"number"==typeof t?0!==t:"string"==typeof t?"true"===t.toLowerCase():"boolean"==typeof t?t:t instanceof Array?t.map(r.prototype.boolean):void 0},r.prototype.byte=function(t){var e=r.prototype.int(t,10);return"number"==typeof e?(e+128)%256-128:e instanceof Array?e.map(r.prototype.byte):void 0},r.prototype.char=function(t){return"number"!=typeof t||isNaN(t)?t instanceof Array?t.map(r.prototype.char):"string"==typeof t?r.prototype.char(parseInt(t,10)):void 0:String.fromCharCode(t)},r.prototype.unchar=function(t){return"string"==typeof t&&1===t.length?t.charCodeAt(0):t instanceof Array?t.map(r.prototype.unchar):void 0},r.prototype.hex=function(t,e){if(e=void 0===e||null===e?e=8:e,t instanceof Array)return t.map(function(t){return r.prototype.hex(t,e)});if("number"==typeof t){t<0&&(t=4294967295+t+1);for(var i=Number(t).toString(16).toUpperCase();i.length=e&&(i=i.substring(i.length-e,i.length)),i}},r.prototype.unhex=function(t){return t instanceof Array?t.map(r.prototype.unhex):parseInt("0x"+t,16)},e.exports=r},{"../core/main":24}],62:[function(t,e,i){"use strict";function r(t,e,i){var r=t<0,n=r?t.toString().substring(1):t.toString(),o=n.indexOf("."),s=-1!==o?n.substring(0,o):n,a=-1!==o?n.substring(o+1):"",h=r?"-":"";if(void 0!==i){var l="";(-1!==o||i-a.length>0)&&(l="."),a.length>i&&(a=a.substring(0,i));for(var u=0;ur.length)for(var o=e-(r+=-1===i?".":"").length+1,s=0;s0?"+"+t.toString():t.toString()}function s(t){return parseFloat(t)>0?" "+t.toString():t.toString()}var a=t("../core/main");t("../core/error_helpers"),a.prototype.join=function(t,e){return a._validateParameters("join",arguments),t.join(e)},a.prototype.match=function(t,e){return a._validateParameters("match",arguments),t.match(e)},a.prototype.matchAll=function(t,e){a._validateParameters("matchAll",arguments);for(var i=new RegExp(e,"g"),r=i.exec(t),n=[];null!==r;)n.push(r),r=i.exec(t);return n},a.prototype.nf=function(t,e,i){return a._validateParameters("nf",arguments),t instanceof Array?t.map(function(t){return r(t,e,i)}):"[object Arguments]"===Object.prototype.toString.call(t)?3===t.length?this.nf(t[0],t[1],t[2]):2===t.length?this.nf(t[0],t[1]):this.nf(t[0]):r(t,e,i)},a.prototype.nfc=function(t,e){return a._validateParameters("nfc",arguments),t instanceof Array?t.map(function(t){return n(t,e)}):n(t,e)},a.prototype.nfp=function(){a._validateParameters("nfp",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(o):o(t)},a.prototype.nfs=function(){a._validateParameters("nfs",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(s):s(t)},a.prototype.split=function(t,e){return a._validateParameters("split",arguments),t.split(e)},a.prototype.splitTokens=function(t,e){var i;if(a._validateParameters("splitTokens",arguments),void 0!==e){var r=e,n=/\]/g.exec(r),o=/\[/g.exec(r);o&&n?(r=r.slice(0,n.index)+r.slice(n.index+1),o=/\[/g.exec(r),r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("[\\["+r+"\\]]","g")):n?(r=r.slice(0,n.index)+r.slice(n.index+1),i=new RegExp("["+r+"\\]]","g")):o?(r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("["+r+"\\[]","g")):i=new RegExp("["+r+"]","g")}else i=/\s/g;return t.split(i).filter(function(t){return t})},a.prototype.trim=function(t){return a._validateParameters("trim",arguments),t instanceof Array?t.map(this.trim):t.trim()},e.exports=a},{"../core/error_helpers":20,"../core/main":24}],63:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.day=function(){return(new Date).getDate()},r.prototype.hour=function(){return(new Date).getHours()},r.prototype.minute=function(){return(new Date).getMinutes()},r.prototype.millis=function(){return window.performance.now()},r.prototype.month=function(){return(new Date).getMonth()+1},r.prototype.second=function(){return(new Date).getSeconds()},r.prototype.year=function(){return(new Date).getFullYear()},e.exports=r},{"../core/main":24}],64:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry");var n=t("../core/constants");r.prototype.plane=function(t,e,i,n){this._assert3d("plane"),r._validateParameters("plane",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=1),void 0===n&&(n=1);var o="plane|"+i+"|"+n;if(!this._renderer.geometryInHash(o)){var s=new r.Geometry(i,n,function(){for(var t,e,i,n=0;n<=this.detailY;n++){e=n/this.detailY;for(var o=0;o<=this.detailX;o++)t=o/this.detailX,i=new r.Vector(t-.5,e-.5,0),this.vertices.push(i),this.uvs.push(t,e)}});s.computeFaces().computeNormals(),i<=1&&n<=1?s._makeTriangleEdges()._edgesToVertices():console.log("Cannot draw stroke on plane objects with more than 1 detailX or 1 detailY"),this._renderer.createBuffers(o,s)}return this._renderer.drawBuffersScaled(o,t,e,1),this},r.prototype.box=function(t,e,i,n,o){this._assert3d("box"),r._validateParameters("box",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=e);var s=this._renderer.attributes&&this._renderer.attributes.perPixelLighting;void 0===n&&(n=s?1:4),void 0===o&&(o=s?1:4);var a="box|"+n+"|"+o;if(!this._renderer.geometryInHash(a)){var h=new r.Geometry(n,o,function(){var t=[[0,4,2,6],[1,3,5,7],[0,1,4,5],[2,6,3,7],[0,2,1,3],[4,5,6,7]];this.strokeIndices=[[0,1],[1,3],[3,2],[6,7],[8,9],[9,11],[14,15],[16,17],[17,19],[18,19],[20,21],[22,23]];for(var e=0;eo?(_=i,g=1,v=e):v=t+(e-t)*g,-2!==h&&h!==o+2||(v=0),_-=i/2,m[h]=0===v?1:n,l=0;lo?0:Math.sin(2*b*Math.PI)*Math.cos(y),h<0?-1:h>o?1:Math.sin(y),h<0||h>o?0:Math.cos(2*b*Math.PI)*Math.cos(y))),this.uvs.push(b,g)}}var S=0;if(s){for(u=0;u=n.TWO_PI?(e="ellipse")+"|"+p+"|":(e="arc")+"|"+l+"|"+u+"|"+c+"|"+p+"|",!this.geometryInHash(i)){var d=new r.Geometry(p,1,function(){if(this.strokeIndices=[],l.toFixed(10)!==u.toFixed(10)){c!==n.PIE&&void 0!==c||(this.vertices.push(new r.Vector(.5,.5,0)),this.uvs.push([.5,.5]));for(var t=0;t<=p;t++){var e=t/p,i=(u-l)*e+l,o=.5+Math.cos(i)/2,s=.5+Math.sin(i)/2;this.vertices.push(new r.Vector(o,s,0)),this.uvs.push([o,s]),t0&&h>0&&(this.strokeIndices=[[0,a],[a,(a+1)*(h+1)-1],[(a+1)*(h+1)-1,(a+1)*h],[(a+1)*h,0]])});u.computeFaces().computeNormals()._makeTriangleEdges()._edgesToVertices(),this.createBuffers(l,u)}var c=this.uMVMatrix.copy();try{this.uMVMatrix.translate([i,n,0]),this.uMVMatrix.scale(o,s,1),this.drawBuffers(l)}finally{this.uMVMatrix=c}return this},r.RendererGL.prototype.quad=function(t,e,i,n,o,s,a,h){var l="quad|"+t+"|"+e+"|"+i+"|"+n+"|"+o+"|"+s+"|"+a+"|"+h;if(!this.geometryInHash(l)){var u=new r.Geometry(2,2,function(){this.vertices.push(new r.Vector(t,e,0)),this.vertices.push(new r.Vector(i,n,0)),this.vertices.push(new r.Vector(o,s,0)),this.vertices.push(new r.Vector(a,h,0)),this.uvs.push(0,0,1,0,1,1,0,1),this.strokeIndices=[[0,1],[1,2],[2,3],[3,0]]});u.computeNormals()._makeTriangleEdges()._edgesToVertices(),u.faces=[[0,1,2],[2,3,0]],this.createBuffers(l,u)}return this.drawBuffers(l),this},r.RendererGL.prototype.bezier=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._bezierDetail||20;this.beginShape();for(var d=0;d<=p;d++){var f=Math.pow(1-d/p,3),m=d/p*3*Math.pow(1-d/p,2),y=3*Math.pow(d/p,2)*(1-d/p),v=Math.pow(d/p,3);this.vertex(t*f+r*m+s*y+l*v,e*f+n*m+a*y+u*v,i*f+o*m+h*y+c*v)}return this.endShape(),this},r.RendererGL.prototype.curve=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._curveDetail;this.beginShape();for(var d=0;d<=p;d++){var f=.5*Math.pow(d/p,3),m=.5*Math.pow(d/p,2),y=d/p*.5,v=f*(3*r-t-3*s+l)+m*(2*t-5*r+4*s-l)+y*(-t+s)+2*r*.5,g=f*(3*n-e-3*a+u)+m*(2*e-5*n+4*a-u)+y*(-e+a)+2*n*.5,_=f*(3*o-i-3*h+c)+m*(2*i-5*o+4*h-c)+y*(-i+h)+2*o*.5;this.vertex(v,g,_)}return this.endShape(),this},r.RendererGL.prototype.line=function(){return 6===arguments.length?(this.beginShape(),this.vertex(arguments[0],arguments[1],arguments[2]),this.vertex(arguments[3],arguments[4],arguments[5]),this.endShape()):4===arguments.length&&(this.beginShape(),this.vertex(arguments[0],arguments[1],0),this.vertex(arguments[2],arguments[3],0),this.endShape()),this},r.RendererGL.prototype.bezierVertex=function(){if(0===this.immediateMode._bezierVertex.length)throw Error("vertex() must be used once before calling bezierVertex()");var t,e,i,r,n,o=[],s=[],a=[],h=arguments.length;if(t=0,0===this._lookUpTableBezier.length||this._lutBezierDetail!==this._pInst._curveDetail){this._lookUpTableBezier=[],this._lutBezierDetail=this._pInst._curveDetail;for(var l=1/this._lutBezierDetail,u=0,c=1,p=0;u<1;){if(t=parseFloat(u.toFixed(6)),this._lookUpTableBezier[p]=this._bezierCoefficients(t),c.toFixed(6)===l.toFixed(6)){t=parseFloat(c.toFixed(6))+parseFloat(u.toFixed(6)),++p,this._lookUpTableBezier[p]=this._bezierCoefficients(t);break}u+=l,c-=l,++p}}var d=this._lookUpTableBezier.length;if(6===h){for(this.isBezier=!0,o=[this.immediateMode._bezierVertex[0],arguments[0],arguments[2],arguments[4]],s=[this.immediateMode._bezierVertex[1],arguments[1],arguments[3],arguments[5]],n=0;n0&&this.mouseY0){var i=this._renderer._curCamera;void 0===t&&(t=1),void 0===e&&(e=t),!0!==this.contextMenuDisabled&&(this.canvas.oncontextmenu=function(){return!1},this._setProperty("contextMenuDisabled",!0)),!0!==this.wheelDefaultDisabled&&(this.canvas.onwheel=function(){return!1},this._setProperty("wheelDefaultDisabled",!0));var n=this.height0?this._renderer._curCamera._orbit(0,0,.5*n):this._renderer._curCamera._orbit(0,0,-.5*n)),this.mouseIsPressed)if(this.mouseButton===this.LEFT){var o=-t*(this.mouseX-this.pmouseX)/n,s=e*(this.mouseY-this.pmouseY)/n;this._renderer._curCamera._orbit(o,s,0)}else if(this.mouseButton===this.RIGHT){var a=i._getLocalAxes(),h=Math.sqrt(a.x[0]*a.x[0]+a.x[2]*a.x[2]);0!==h&&(a.x[0]/=h,a.x[2]/=h);var l=Math.sqrt(a.y[0]*a.y[0]+a.y[2]*a.y[2]);0!==l&&(a.y[0]/=l,a.y[2]/=l);var u=-1*t*(this.mouseX-this.pmouseX),c=-1*e*(this.mouseY-this.pmouseY);i.setPosition(i.eyeX+u*a.x[0]+c*a.z[0],i.eyeY,i.eyeZ+u*a.x[2]+c*a.z[2])}return this}},r.prototype.debugMode=function(){this._assert3d("debugMode"),r._validateParameters("debugMode",arguments);for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1);arguments[0]===n.GRID?this.registerMethod("post",this._grid.call(this,arguments[1],arguments[2],arguments[3],arguments[4],arguments[5])):arguments[0]===n.AXES?this.registerMethod("post",this._axesIcon.call(this,arguments[1],arguments[2],arguments[3],arguments[4])):(this.registerMethod("post",this._grid.call(this,arguments[0],arguments[1],arguments[2],arguments[3],arguments[4])),this.registerMethod("post",this._axesIcon.call(this,arguments[5],arguments[6],arguments[7],arguments[8])))},r.prototype.noDebugMode=function(){this._assert3d("noDebugMode");for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1)},r.prototype._grid=function(t,e,i,r,n){void 0===t&&(t=this.width/2),void 0===e&&(e=Math.round(t/30)<4?4:Math.round(t/30)),void 0===i&&(i=0),void 0===r&&(r=0),void 0===n&&(n=0);var o=t/e,s=t/2;return function(){this.push(),this.stroke(255*this._renderer.curStrokeColor[0],255*this._renderer.curStrokeColor[1],255*this._renderer.curStrokeColor[2]),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]);for(var t=0;t<=e;t++)this.beginShape(this.LINES),this.vertex(-s+i,r,t*o-s+n),this.vertex(+s+i,r,t*o-s+n),this.endShape();for(var a=0;a<=e;a++)this.beginShape(this.LINES),this.vertex(a*o-s+i,r,-s+n),this.vertex(a*o-s+i,r,+s+n),this.endShape();this.pop()}},r.prototype._axesIcon=function(t,e,i,r){return void 0===t&&(t=this.width/20>40?this.width/20:40),void 0===e&&(e=-this.width/4),void 0===i&&(i=e),void 0===r&&(r=e),function(){this.push(),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]),this.strokeWeight(2),this.stroke(255,0,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e+t,i,r),this.endShape(),this.stroke(0,255,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i+t,r),this.endShape(),this.stroke(0,0,255),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i,r+t),this.endShape(),this.pop()}},e.exports=r},{"../core/constants":18,"../core/main":24}],66:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.ambientLight=function(t,e,i,n){this._assert3d("ambientLight"),r._validateParameters("ambientLight",arguments);var o=this.color.apply(this,arguments),s=this._renderer._useLightShader();return s.setUniform("uUseLighting",!0),s.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.ambientLightColors.push(o._array[0],o._array[1],o._array[2]),s.setUniform("uAmbientColor",this._renderer.ambientLightColors),s.setUniform("uAmbientLightCount",this._renderer.ambientLightColors.length/3),this},r.prototype.directionalLight=function(t,e,i,n,o,s){this._assert3d("directionalLight"),r._validateParameters("directionalLight",arguments);var a,h=this._renderer._useLightShader();a=t instanceof r.Color?t:this.color(t,e,i);var l,u,c,p=arguments[arguments.length-1];"number"==typeof p?(l=arguments[arguments.length-3],u=arguments[arguments.length-2],c=arguments[arguments.length-1]):(l=p.x,u=p.y,c=p.z),h.setUniform("uUseLighting",!0),h.setUniform("uMaterialColor",this._renderer.curFillColor);var d=Math.sqrt(l*l+u*u+c*c);return this._renderer.directionalLightDirections.push(l/d,u/d,c/d),h.setUniform("uLightingDirection",this._renderer.directionalLightDirections),this._renderer.directionalLightColors.push(a._array[0],a._array[1],a._array[2]),h.setUniform("uDirectionalColor",this._renderer.directionalLightColors),h.setUniform("uDirectionalLightCount",this._renderer.directionalLightColors.length/3),this},r.prototype.pointLight=function(t,e,i,n,o,s){var a;this._assert3d("pointLight"),r._validateParameters("pointLight",arguments),a=t instanceof r.Color?t:this.color(t,e,i);var h,l,u,c=arguments[arguments.length-1];"number"==typeof c?(h=arguments[arguments.length-3],l=arguments[arguments.length-2],u=arguments[arguments.length-1]):(h=c.x,l=c.y,u=c.z);var p=this._renderer._useLightShader();return p.setUniform("uUseLighting",!0),p.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.pointLightPositions.push(h,l,u),p.setUniform("uPointLightLocation",this._renderer.pointLightPositions),this._renderer.pointLightColors.push(a._array[0],a._array[1],a._array[2]),p.setUniform("uPointLightColor",this._renderer.pointLightColors),p.setUniform("uPointLightCount",this._renderer.pointLightColors.length/3),this},e.exports=r},{"../core/main":24}],67:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry"),r.prototype.loadModel=function(t){var e,i,n;r._validateParameters("loadModel",arguments),"boolean"==typeof arguments[1]?(e=arguments[1],i=arguments[2],n=arguments[3]):(e=!1,i=arguments[1],n=arguments[2]);var o=new r.Geometry;o.gid=t+"|"+e;var s=this;return this.loadStrings(t,function(t){(function(t,e){for(var i={v:[],vt:[],vn:[]},n={},o=0;o0)if("v"===s[0]||"vn"===s[0]){var a=new r.Vector(parseFloat(s[1]),parseFloat(s[2]),parseFloat(s[3]));i[s[0]].push(a)}else if("vt"===s[0]){var h=[parseFloat(s[1]),parseFloat(s[2])];i[s[0]].push(h)}else if("f"===s[0])for(var l=3;l0&&(this._renderer.geometryInHash(t.gid)||(t._makeTriangleEdges()._edgesToVertices(),this._renderer.createBuffers(t.gid,t)),this._renderer.drawBuffers(t.gid))},e.exports=r},{"../core/main":24,"./p5.Geometry":70}],68:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Texture"),r.prototype.loadShader=function(t,e){r._validateParameters("loadShader",arguments);var i=new r.Shader,n=this,o=!1,s=!1;return this.loadStrings(e,function(t){i._fragSrc=t.join("\n"),o=!0,s&&n._decrementPreload()}),this.loadStrings(t,function(t){i._vertSrc=t.join("\n"),s=!0,o&&n._decrementPreload()}),i},r.prototype.createShader=function(t,e){return this._assert3d("createShader"),r._validateParameters("createShader",arguments),new r.Shader(this._renderer,t,e)},r.prototype.shader=function(t){return this._assert3d("shader"),r._validateParameters("shader",arguments),void 0===t._renderer&&(t._renderer=this._renderer),t.isStrokeShader()?this._renderer.setStrokeShader(t):this._renderer.setFillShader(t),this},r.prototype.normalMaterial=function(){return this._assert3d("normalMaterial"),r._validateParameters("normalMaterial",arguments),this._renderer.drawMode=n.FILL,this._renderer.setFillShader(this._renderer._getNormalShader()),this._renderer.curFillColor=[1,1,1,1],this.noStroke(),this},r.prototype.texture=function(t){this._assert3d("texture"),r._validateParameters("texture",arguments),this._renderer.drawMode=n.TEXTURE;var e=this._renderer._useLightShader();return e.setUniform("uSpecular",!1),e.setUniform("isTexture",!0),e.setUniform("uSampler",t),this.noStroke(),this},r.prototype.ambientMaterial=function(t,e,i,n){this._assert3d("ambientMaterial"),r._validateParameters("ambientMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!1),s.setUniform("isTexture",!1),this},r.prototype.specularMaterial=function(t,e,i,n){this._assert3d("specularMaterial"),r._validateParameters("specularMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!0),s.setUniform("isTexture",!1),this},r.RendererGL.prototype._applyColorBlend=function(t){var e=this.GL,i=this.drawMode===n.TEXTURE;return i||t[t.length-1]<1?(e.depthMask(i),e.enable(e.BLEND),e.blendEquation(e.FUNC_ADD),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA)):(e.depthMask(!0),e.disable(e.BLEND)),t},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Texture":76}],69:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.camera=function(){return this._assert3d("camera"),r._validateParameters("camera",arguments),this._renderer._curCamera.camera.apply(this._renderer._curCamera,arguments),this},r.prototype.perspective=function(){return this._assert3d("perspective"),r._validateParameters("perspective",arguments),this._renderer._curCamera.perspective.apply(this._renderer._curCamera,arguments),this},r.prototype.ortho=function(){return this._assert3d("ortho"),r._validateParameters("ortho",arguments),this._renderer._curCamera.ortho.apply(this._renderer._curCamera,arguments),this},r.prototype.createCamera=function(){this._assert3d("createCamera");var t=new r.Camera(this._renderer);return t._computeCameraDefaultSettings(),t._setDefaultCamera(),this._renderer._curCamera=t,t},r.Camera=function(t){this._renderer=t,this.cameraType="default",this.cameraMatrix=new r.Matrix,this.projMatrix=new r.Matrix},r.Camera.prototype.perspective=function(t,e,i,n){void 0===t?(t=this.defaultCameraFOV,this.cameraFOV=t):this.cameraFOV=this._renderer._pInst._toRadians(t),void 0===e&&(e=this.defaultAspectRatio),void 0===i&&(i=this.defaultCameraNear),void 0===n&&(n=this.defaultCameraFar),i<=1e-4&&(i=.01,console.log("Avoid perspective near plane values close to or below 0. Setting value to 0.01.")),nMath.PI?h=Math.PI:h<=0&&(h=.001);var l=Math.sin(h)*s*Math.sin(a),u=Math.cos(h)*s,c=Math.sin(h)*s*Math.cos(a);this.camera(l+this.centerX,u+this.centerY,c+this.centerZ,this.centerX,this.centerY,this.centerZ,0,1,0)},r.Camera.prototype._isActive=function(){return this===this._renderer._curCamera},r.prototype.setCamera=function(t){this._renderer._curCamera=t,this._renderer.uPMatrix.set(t.projMatrix.mat4[0],t.projMatrix.mat4[1],t.projMatrix.mat4[2],t.projMatrix.mat4[3],t.projMatrix.mat4[4],t.projMatrix.mat4[5],t.projMatrix.mat4[6],t.projMatrix.mat4[7],t.projMatrix.mat4[8],t.projMatrix.mat4[9],t.projMatrix.mat4[10],t.projMatrix.mat4[11],t.projMatrix.mat4[12],t.projMatrix.mat4[13],t.projMatrix.mat4[14],t.projMatrix.mat4[15])},e.exports=r.Camera},{"../core/main":24}],70:[function(t,e,i){"use strict";var r=t("../core/main");r.Geometry=function(t,e,i){return this.vertices=[],this.lineVertices=[],this.lineNormals=[],this.vertexNormals=[],this.faces=[],this.uvs=[],this.edges=[],this.detailX=void 0!==t?t:1,this.detailY=void 0!==e?e:1,i instanceof Function&&i.call(this),this},r.Geometry.prototype.computeFaces=function(){this.faces.length=0;for(var t,e,i,r,n=this.detailX+1,o=0;o1&&(u=1),h.mult(Math.asin(u)/l))},r.Geometry.prototype.computeNormals=function(){var t,e=this.vertexNormals,i=this.vertices,n=this.faces;for(e.length=0,t=0;tthis.vertices.length-1-this.detailX;e--)t.add(this.vertexNormals[e]);for(t=r.Vector.div(t,this.detailX),e=this.vertices.length-1;e>this.vertices.length-1-this.detailX;e--)this.vertexNormals[e]=t;return this},r.Geometry.prototype._makeTriangleEdges=function(){if(this.edges.length=0,Array.isArray(this.strokeIndices))for(var t=0,e=this.strokeIndices.length;t0){for(var t=this.vertices[0].copy(),e=this.vertices[0].copy(),i=0;i1){if(this._useImmediateModeShader(),this._doStroke&&this.drawMode!==n.TEXTURE){for(var h=0;h1e3){var e=Object.keys(this.gHash)[0];delete this.gHash[e],n--}this.gHash[t]={}},r.RendererGL.prototype._freeBuffers=function(t){var e=this.gHash[t];if(e){delete this.gHash[t],n--;var i=this.GL;e.vertexBuffer&&i.deleteBuffer(e.vertexBuffer),e.normalBuffer&&i.deleteBuffer(e.normalBuffer),e.lineNormalBuffer&&i.deleteBuffer(e.lineNormalBuffer),e.uvBuffer&&i.deleteBuffer(e.uvBuffer),e.indexBuffer&&i.deleteBuffer(e.indexBuffer),e.lineVertexBuffer&&i.deleteBuffer(e.lineVertexBuffer)}},r.RendererGL.prototype.createBuffers=function(t,e){var i=this.GL;this._initBufferDefaults(t);var r=this.gHash[t];return r.numberOfItems=3*e.faces.length,r.lineVertexCount=e.lineVertices.length,this._useColorShader(),this.curStrokeShader.attributes.aPosition&&(r.lineVertexBuffer=i.createBuffer(),this._bindBuffer(r.lineVertexBuffer,i.ARRAY_BUFFER,this._flatten(e.lineVertices),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),this.curStrokeShader.attributes.aDirection&&(r.lineNormalBuffer=i.createBuffer(),this._bindBuffer(r.lineNormalBuffer,i.ARRAY_BUFFER,this._flatten(e.lineNormals),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aPosition&&(r.vertexBuffer=i.createBuffer(),this._bindBuffer(r.vertexBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertices),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),r.indexBuffer=i.createBuffer(),this._bindBuffer(r.indexBuffer,i.ELEMENT_ARRAY_BUFFER,this._flatten(e.faces),Uint16Array,i.STATIC_DRAW),this.curFillShader.attributes.aNormal&&(r.normalBuffer=i.createBuffer(),this._bindBuffer(r.normalBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertexNormals),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aTexCoord&&(r.uvBuffer=i.createBuffer(),this._bindBuffer(r.uvBuffer,i.ARRAY_BUFFER,this._flatten(e.uvs),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,i.FLOAT,!1,0,0)),r},r.RendererGL.prototype.drawBuffers=function(t){var e=this.GL;this._useColorShader();var i=this.gHash[t];return this._doStroke&&i.lineVertexCount>0&&(this.curStrokeShader.bindShader(),i.lineVertexBuffer&&(this._bindBuffer(i.lineVertexBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.lineNormalBuffer&&(this._bindBuffer(i.lineNormalBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curStrokeColor),this._drawArrays(e.TRIANGLES,t),this.curStrokeShader.unbindShader()),!1!==this._doFill&&(this.curFillShader.bindShader(),i.vertexBuffer&&(this._bindBuffer(i.vertexBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.indexBuffer&&this._bindBuffer(i.indexBuffer,e.ELEMENT_ARRAY_BUFFER),i.normalBuffer&&(this._bindBuffer(i.normalBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,e.FLOAT,!1,0,0)),i.uvBuffer&&(this._bindBuffer(i.uvBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curFillColor),this._drawElements(e.TRIANGLES,t),this.curFillShader.unbindShader()),this},r.RendererGL.prototype.drawBuffersScaled=function(t,e,i,r){var n=this.uMVMatrix.copy();try{this.uMVMatrix.scale(e,i,r),this.drawBuffers(t)}finally{this.uMVMatrix=n}},r.RendererGL.prototype._drawArrays=function(t,e){return this.GL.drawArrays(t,0,this.gHash[e].lineVertexCount),this._pInst._pixelsDirty=!0,this},r.RendererGL.prototype._drawElements=function(t,e){this.GL.drawElements(t,this.gHash[e].numberOfItems,this.GL.UNSIGNED_SHORT,0),this._pInst._pixelsDirty=!0},r.RendererGL.prototype._drawPoints=function(t,e){var i=this.GL;this._bindBuffer(e,i.ARRAY_BUFFER,this._vToNArray(t),Float32Array,i.STATIC_DRAW),this.curPointShader.enableAttrib(this.curPointShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0),i.drawArrays(i.Points,0,t.length)},e.exports=r.RendererGL},{"../core/main":24}],74:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("libtess");t("./p5.Shader"),t("./p5.Camera"),t("../core/p5.Renderer"),t("./p5.Matrix");var s={immediateVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uResolution;\nuniform float uPointSize;\n\nvarying vec4 vColor;\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n gl_PointSize = uPointSize;\n}\n",vertexColorVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n}\n",vertexColorFrag:"precision mediump float;\nvarying vec4 vColor;\nvoid main(void) {\n gl_FragColor = vColor;\n}",normalVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\n\nvarying vec3 vVertexNormal;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vVertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertTexCoord = aTexCoord;\n}\n",normalFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nvoid main(void) {\n gl_FragColor = vec4(vVertexNormal, 1.0);\n}",basicFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nuniform vec4 uMaterialColor;\nvoid main(void) {\n gl_FragColor = uMaterialColor;\n}",lightVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uViewMatrix;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nuniform vec3 uAmbientColor[8];\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nvarying vec3 vVertexNormal;\nvarying vec2 vVertTexCoord;\nvarying vec3 vLightWeighting;\n\nvoid main(void){\n\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\n vec3 vertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertexNormal = vertexNormal;\n vVertTexCoord = aTexCoord;\n\n vec4 mvPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n vec3 eyeDirection = normalize(-mvPosition.xyz);\n\n float shininess = 32.0;\n float specularFactor = 2.0;\n float diffuseFactor = 0.3;\n\n vec3 ambientLightFactor = vec3(0.0);\n\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n ambientLightFactor += uAmbientColor[i];\n }\n\n\n vec3 directionalLightFactor = vec3(0.0);\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n vec3 dir = uLightingDirection[j];\n float directionalLightWeighting = max(dot(vertexNormal, -dir), 0.0);\n directionalLightFactor += uDirectionalColor[j] * directionalLightWeighting;\n }\n\n\n vec3 pointLightFactor = vec3(0.0);\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n vec3 loc = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightDirection = normalize(loc - mvPosition.xyz);\n\n float directionalLightWeighting = max(dot(vertexNormal, lightDirection), 0.0);\n\n float specularLightWeighting = 0.0;\n if (uSpecular ){\n vec3 reflectionDirection = reflect(-lightDirection, vertexNormal);\n specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess);\n }\n\n pointLightFactor += uPointLightColor[k] * (specularFactor * specularLightWeighting\n + directionalLightWeighting * diffuseFactor);\n }\n\n vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightFactor;\n}\n",lightTextureFrag:"precision mediump float;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nvarying vec3 vLightWeighting;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n gl_FragColor = isTexture ? texture2D(uSampler, vVertTexCoord) : uMaterialColor;\n if (uUseLighting)\n gl_FragColor.rgb *= vLightWeighting;\n}",phongVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform vec3 uAmbientColor[8];\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvoid main(void){\n\n vec4 viewModelPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n\n // Pass varyings to fragment shader\n vViewPosition = viewModelPosition.xyz;\n gl_Position = uProjectionMatrix * viewModelPosition; \n\n vNormal = normalize(uNormalMatrix * normalize(aNormal));\n vTexCoord = aTexCoord;\n\n vAmbientColor = vec3(0.0);\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n vAmbientColor += uAmbientColor[i];\n }\n}\n",phongFrag:"precision mediump float;\n\n//uniform mat4 uModelViewMatrix;\nuniform mat4 uViewMatrix;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvec3 V;\nvec3 N;\n\nconst float shininess = 32.0;\nconst float specularFactor = 2.0;\nconst float diffuseFactor = 0.73;\n\nstruct LightResult {\n\tfloat specular;\n\tfloat diffuse;\n};\n\nfloat phongSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float shininess) {\n\n vec3 R = normalize(reflect(-lightDirection, surfaceNormal)); \n return pow(max(0.0, dot(R, viewDirection)), shininess);\n}\n\nfloat lambertDiffuse(\n vec3 lightDirection,\n vec3 surfaceNormal) {\n return max(0.0, dot(-lightDirection, surfaceNormal));\n}\n\nLightResult light(vec3 lightVector) {\n\n vec3 L = normalize(lightVector);\n\n //compute our diffuse & specular terms\n LightResult lr;\n if (uSpecular)\n lr.specular = phongSpecular(L, V, N, shininess);\n lr.diffuse = lambertDiffuse(L, N);\n return lr;\n}\n\nvoid main(void) {\n\n V = normalize(vViewPosition);\n N = vNormal;\n\n vec3 diffuse = vec3(0.0);\n float specular = 0.0;\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n\n LightResult result = light(uLightingDirection[j]);\n diffuse += result.diffuse * uDirectionalColor[j];\n specular += result.specular;\n }\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n\n vec3 lightPosition = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightVector = vViewPosition - lightPosition;\n\t\n //calculate attenuation\n float lightDistance = length(lightVector);\n float falloff = 500.0 / (lightDistance + 500.0);\n\n LightResult result = light(lightVector);\n diffuse += result.diffuse * falloff * uPointLightColor[k];\n specular += result.specular * falloff;\n }\n\n gl_FragColor = isTexture ? texture2D(uSampler, vTexCoord) : uMaterialColor;\n gl_FragColor.rgb = gl_FragColor.rgb * (diffuse * diffuseFactor + vAmbientColor) + specular * specularFactor;\n}",fontVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nuniform vec4 uGlyphRect;\nuniform float uGlyphOffset;\n\nvarying vec2 vTexCoord;\nvarying float w;\n\nvoid main() {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n\n // scale by the size of the glyph's rectangle\n positionVec4.xy *= uGlyphRect.zw - uGlyphRect.xy;\n\n // move to the corner of the glyph\n positionVec4.xy += uGlyphRect.xy;\n\n // move to the letter's line offset\n positionVec4.x += uGlyphOffset;\n \n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vTexCoord = aTexCoord;\n w = gl_Position.w;\n}\n",fontFrag:"#extension GL_OES_standard_derivatives : enable\nprecision mediump float;\n\n#if 0\n // simulate integer math using floats\n\t#define int float\n\t#define ivec2 vec2\n\t#define INT(x) float(x)\n\n\tint ifloor(float v) { return floor(v); }\n\tivec2 ifloor(vec2 v) { return floor(v); }\n\n#else\n // use native integer math\n\tprecision mediump int;\n\t#define INT(x) x\n\n\tint ifloor(float v) { return int(v); }\n\tint ifloor(int v) { return v; }\n\tivec2 ifloor(vec2 v) { return ivec2(v); }\n\n#endif\n\nuniform sampler2D uSamplerStrokes;\nuniform sampler2D uSamplerRowStrokes;\nuniform sampler2D uSamplerRows;\nuniform sampler2D uSamplerColStrokes;\nuniform sampler2D uSamplerCols;\n\nuniform ivec2 uStrokeImageSize;\nuniform ivec2 uCellsImageSize;\nuniform ivec2 uGridImageSize;\n\nuniform ivec2 uGridOffset;\nuniform ivec2 uGridSize;\nuniform vec4 uMaterialColor;\n\nvarying vec2 vTexCoord;\n\n// some helper functions\nint round(float v) { return ifloor(v + 0.5); }\nivec2 round(vec2 v) { return ifloor(v + 0.5); }\nfloat saturate(float v) { return clamp(v, 0.0, 1.0); }\nvec2 saturate(vec2 v) { return clamp(v, 0.0, 1.0); }\n\nint mul(float v1, int v2) {\n return ifloor(v1 * float(v2));\n}\n\nivec2 mul(vec2 v1, ivec2 v2) {\n return ifloor(v1 * vec2(v2) + 0.5);\n}\n\n// unpack a 16-bit integer from a float vec2\nint getInt16(vec2 v) {\n ivec2 iv = round(v * 255.0);\n return iv.x * INT(128) + iv.y;\n}\n\nvec2 pixelScale;\nvec2 coverage = vec2(0.0);\nvec2 weight = vec2(0.5);\nconst float minDistance = 1.0/8192.0;\nconst float hardness = 1.05; // amount of antialias\n\n// the maximum number of curves in a glyph\nconst int N = INT(250);\n\n// retrieves an indexed pixel from a sampler\nvec4 getTexel(sampler2D sampler, int pos, ivec2 size) {\n int width = size.x;\n int y = ifloor(pos / width);\n int x = pos - y * width; // pos % width\n\n return texture2D(sampler, (vec2(x, y) + 0.5) / vec2(size));\n}\n\nvoid calulateCrossings(vec2 p0, vec2 p1, vec2 p2, out vec2 C1, out vec2 C2) {\n\n // get the coefficients of the quadratic in t\n vec2 a = p0 - p1 * 2.0 + p2;\n vec2 b = p0 - p1;\n vec2 c = p0 - vTexCoord;\n\n // found out which values of 't' it crosses the axes\n vec2 surd = sqrt(max(vec2(0.0), b * b - a * c));\n vec2 t1 = ((b - surd) / a).yx;\n vec2 t2 = ((b + surd) / a).yx;\n\n // approximate straight lines to avoid rounding errors\n if (abs(a.y) < 0.001)\n t1.x = t2.x = c.y / (2.0 * b.y);\n\n if (abs(a.x) < 0.001)\n t1.y = t2.y = c.x / (2.0 * b.x);\n\n // plug into quadratic formula to find the corrdinates of the crossings\n C1 = ((a * t1 - b * 2.0) * t1 + c) * pixelScale;\n C2 = ((a * t2 - b * 2.0) * t2 + c) * pixelScale;\n}\n\nvoid coverageX(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n // determine on which side of the x-axis the points lie\n bool y0 = p0.y > vTexCoord.y;\n bool y1 = p1.y > vTexCoord.y;\n bool y2 = p2.y > vTexCoord.y;\n\n // could web be under the curve (after t1)?\n if (y1 ? !y2 : y0) {\n // add the coverage for t1\n coverage.x += saturate(C1.x + 0.5);\n // calculate the anti-aliasing for t1\n weight.x = min(weight.x, abs(C1.x));\n }\n\n // are we outside the curve (after t2)?\n if (y1 ? !y0 : y2) {\n // subtract the coverage for t2\n coverage.x -= saturate(C2.x + 0.5);\n // calculate the anti-aliasing for t2\n weight.x = min(weight.x, abs(C2.x));\n }\n}\n\n// this is essentially the same as coverageX, but with the axes swapped\nvoid coverageY(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n bool x0 = p0.x > vTexCoord.x;\n bool x1 = p1.x > vTexCoord.x;\n bool x2 = p2.x > vTexCoord.x;\n\n if (x1 ? !x2 : x0) {\n coverage.y -= saturate(C1.y + 0.5);\n weight.y = min(weight.y, abs(C1.y));\n }\n\n if (x1 ? !x0 : x2) {\n coverage.y += saturate(C2.y + 0.5);\n weight.y = min(weight.y, abs(C2.y));\n }\n}\n\nvoid main() {\n\n // calculate the pixel scale based on screen-coordinates\n pixelScale = hardness / fwidth(vTexCoord);\n\n // which grid cell is this pixel in?\n ivec2 gridCoord = ifloor(vTexCoord * vec2(uGridSize));\n\n // intersect curves in this row\n {\n // the index into the row info bitmap\n int rowIndex = gridCoord.y + uGridOffset.y;\n // fetch the info texel\n vec4 rowInfo = getTexel(uSamplerRows, rowIndex, uGridImageSize);\n // unpack the rowInfo\n int rowStrokeIndex = getInt16(rowInfo.xy);\n int rowStrokeCount = getInt16(rowInfo.zw);\n\n for (int iRowStroke = INT(0); iRowStroke < N; iRowStroke++) {\n if (iRowStroke >= rowStrokeCount)\n break;\n\n // each stroke is made up of 3 points: the start and control point\n // and the start of the next curve.\n // fetch the indices of this pair of strokes:\n vec4 strokeIndices = getTexel(uSamplerRowStrokes, rowStrokeIndex++, uCellsImageSize);\n\n // unpack the stroke index\n int strokePos = getInt16(strokeIndices.xy);\n\n // fetch the two strokes\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n\n // calculate the coverage\n coverageX(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n // intersect curves in this column\n {\n int colIndex = gridCoord.x + uGridOffset.x;\n vec4 colInfo = getTexel(uSamplerCols, colIndex, uGridImageSize);\n int colStrokeIndex = getInt16(colInfo.xy);\n int colStrokeCount = getInt16(colInfo.zw);\n \n for (int iColStroke = INT(0); iColStroke < N; iColStroke++) {\n if (iColStroke >= colStrokeCount)\n break;\n\n vec4 strokeIndices = getTexel(uSamplerColStrokes, colStrokeIndex++, uCellsImageSize);\n\n int strokePos = getInt16(strokeIndices.xy);\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n coverageY(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n weight = saturate(1.0 - weight * 2.0);\n float distance = max(weight.x + weight.y, minDistance); // manhattan approx.\n float antialias = abs(dot(coverage, weight) / distance);\n float cover = min(abs(coverage.x), abs(coverage.y));\n gl_FragColor = uMaterialColor;\n gl_FragColor.a *= saturate(max(antialias, cover));\n}",lineVert:"/*\n Part of the Processing project - http://processing.org\n Copyright (c) 2012-15 The Processing Foundation\n Copyright (c) 2004-12 Ben Fry and Casey Reas\n Copyright (c) 2001-04 Massachusetts Institute of Technology\n This library is free software; you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, version 2.1.\n This library is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General\n Public License along with this library; if not, write to the\n Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n Boston, MA 02111-1307 USA\n*/\n\n#define PROCESSING_LINE_SHADER\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uStrokeWeight;\n\nuniform vec4 uViewport;\n\n// using a scale <1 moves the lines towards the camera\n// in order to prevent popping effects due to half of\n// the line disappearing behind the geometry faces.\nvec3 scale = vec3(0.9995);\n\nattribute vec4 aPosition;\nattribute vec4 aDirection;\n \nvoid main() {\n vec4 posp = uModelViewMatrix * aPosition;\n vec4 posq = uModelViewMatrix * (aPosition + vec4(aDirection.xyz, 0));\n\n // Moving vertices slightly toward the camera\n // to avoid depth-fighting with the fill triangles.\n // Discussed here:\n // http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=252848 \n posp.xyz = posp.xyz * scale;\n posq.xyz = posq.xyz * scale;\n\n vec4 p = uProjectionMatrix * posp;\n vec4 q = uProjectionMatrix * posq;\n\n // formula to convert from clip space (range -1..1) to screen space (range 0..[width or height])\n // screen_p = (p.xy/p.w + <1,1>) * 0.5 * uViewport.zw\n\n // prevent division by W by transforming the tangent formula (div by 0 causes\n // the line to disappear, see https://github.com/processing/processing/issues/5183)\n // t = screen_q - screen_p\n //\n // tangent is normalized and we don't care which aDirection it points to (+-)\n // t = +- normalize( screen_q - screen_p )\n // t = +- normalize( (q.xy/q.w+<1,1>)*0.5*uViewport.zw - (p.xy/p.w+<1,1>)*0.5*uViewport.zw )\n //\n // extract common factor, <1,1> - <1,1> cancels out\n // t = +- normalize( (q.xy/q.w - p.xy/p.w) * 0.5 * uViewport.zw )\n //\n // convert to common divisor\n // t = +- normalize( ((q.xy*p.w - p.xy*q.w) / (p.w*q.w)) * 0.5 * uViewport.zw )\n //\n // remove the common scalar divisor/factor, not needed due to normalize and +-\n // (keep uViewport - can't remove because it has different components for x and y\n // and corrects for aspect ratio, see https://github.com/processing/processing/issues/5181)\n // t = +- normalize( (q.xy*p.w - p.xy*q.w) * uViewport.zw )\n\n vec2 tangent = normalize((q.xy*p.w - p.xy*q.w) * uViewport.zw);\n\n // flip tangent to normal (it's already normalized)\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n float thickness = aDirection.w * uStrokeWeight;\n vec2 offset = normal * thickness / 2.0;\n\n // Perspective ---\n // convert from world to clip by multiplying with projection scaling factor\n // to get the right thickness (see https://github.com/processing/processing/issues/5182)\n // invert Y, projections in Processing invert Y\n vec2 perspScale = (uProjectionMatrix * vec4(1, -1, 0, 0)).xy;\n\n // No Perspective ---\n // multiply by W (to cancel out division by W later in the pipeline) and\n // convert from screen to clip (derived from clip to screen above)\n vec2 noPerspScale = p.w / (0.5 * uViewport.zw);\n\n //gl_Position.xy = p.xy + offset.xy * mix(noPerspScale, perspScale, float(perspective > 0));\n gl_Position.xy = p.xy + offset.xy * perspScale;\n gl_Position.zw = p.zw;\n}\n",lineFrag:"precision mediump float;\nprecision mediump int;\n\nuniform vec4 uMaterialColor;\n\nvoid main() {\n gl_FragColor = uMaterialColor;\n}",pointVert:"attribute vec3 aPosition;\nuniform float uPointSize;\nvarying float vStrokeWeight;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvoid main() {\n\tvec4 positionVec4 = vec4(aPosition, 1.0);\n\tgl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\tgl_PointSize = uPointSize;\n\tvStrokeWeight = uPointSize;\n}",pointFrag:"precision mediump float;\nprecision mediump int;\nuniform vec4 uMaterialColor;\nvarying float vStrokeWeight;\n\nvoid main(){\n\tfloat mask = 0.0;\n\n\t// make a circular mask using the gl_PointCoord (goes from 0 - 1 on a point)\n // might be able to get a nicer edge on big strokeweights with smoothstep but slightly less performant\n\n\tmask = step(0.98, length(gl_PointCoord * 2.0 - 1.0));\n\n\t// if strokeWeight is 1 or less lets just draw a square\n\t// this prevents weird artifacting from carving circles when our points are really small\n\t// if strokeWeight is larger than 1, we just use it as is\n\n\tmask = mix(0.0, mask, clamp(floor(vStrokeWeight - 0.5),0.0,1.0));\n\n\t// throw away the borders of the mask\n // otherwise we get weird alpha blending issues\n\n\tif(mask > 0.98){\n discard;\n \t}\n\n \tgl_FragColor = vec4(uMaterialColor.rgb * (1.0 - mask), uMaterialColor.a) ;\n}"};r.RendererGL=function(t,e,i,n){return r.Renderer.call(this,t,e,i),this.attributes={},n=n||{},this.attributes.alpha=void 0===n.alpha||n.alpha,this.attributes.depth=void 0===n.depth||n.depth,this.attributes.stencil=void 0===n.stencil||n.stencil,this.attributes.antialias=void 0!==n.antialias&&n.antialias,this.attributes.premultipliedAlpha=void 0!==n.premultipliedAlpha&&n.premultipliedAlpha,this.attributes.preserveDrawingBuffer=void 0===n.preserveDrawingBuffer||n.preserveDrawingBuffer,this.attributes.perPixelLighting=void 0!==n.perPixelLighting&&n.perPixelLighting,this._initContext(),this.isP3D=!0,this.GL=this.drawingContext,this.ambientLightColors=[],this.directionalLightDirections=[],this.directionalLightColors=[],this.pointLightPositions=[],this.pointLightColors=[],this.uMVMatrix=new r.Matrix,this.uPMatrix=new r.Matrix,this.uNMatrix=new r.Matrix("mat3"),this._curCamera=new r.Camera(this),this._curCamera._computeCameraDefaultSettings(),this._curCamera._setDefaultCamera(),this.gHash={},this._defaultLightShader=void 0,this._defaultImmediateModeShader=void 0,this._defaultNormalShader=void 0,this._defaultColorShader=void 0,this._defaultPointShader=void 0,this.curFillShader=void 0,this.curStrokeShader=void 0,this.curPointShader=void 0,this._useColorShader(),this.setStrokeShader(this._getLineShader()),this._usePointShader(),this._pointVertexBuffer=this.GL.createBuffer(),this.isImmediateDrawing=!1,this.immediateMode={},this.fill(255,255,255,255),this.pointSize=5,this.strokeWeight(1),this.stroke(0,0,0),this.textures=[],this._curveTightness=6,this._lookUpTableBezier=[],this._lookUpTableQuadratic=[],this._lutBezierDetail=0,this._lutQuadraticDetail=0,this._tessy=this._initTessy(),this.fontInfos={},this},r.RendererGL.prototype=Object.create(r.Renderer.prototype),r.RendererGL.prototype._initContext=function(){try{if(this.drawingContext=this.canvas.getContext("webgl",this.attributes)||this.canvas.getContext("experimental-webgl",this.attributes),null===this.drawingContext)throw new Error("Error creating webgl context");console.log("p5.RendererGL: enabled webgl context");var t=this.drawingContext;t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),this._viewport=this.drawingContext.getParameter(this.drawingContext.VIEWPORT)}catch(t){throw t}},r.RendererGL.prototype._resetContext=function(t,e,i){var n=this.width,o=this.height,s=this.canvas.id,a=this.canvas;a&&a.parentNode.removeChild(a),(a=document.createElement("canvas")).id=s,this._pInst._userNode?this._pInst._userNode.appendChild(a):document.body.appendChild(a),this._pInst.canvas=a;var h=new r.RendererGL(this._pInst.canvas,this._pInst,!0,t);this._pInst._setProperty("_renderer",h),h.resize(n,o),h._applyDefaults(),this._pInst._elements.push(h),"function"==typeof i&&setTimeout(function(){i.apply(window._renderer,e)},0)},r.prototype.setAttributes=function(t,e){var i;this._assert3d("setAttributes"),void 0!==e?(i={})[t]=e:t instanceof Object&&(i=t),this.push(),this._renderer._resetContext(i),this.pop()},r.RendererGL.prototype._update=function(){this.uMVMatrix.set(this._curCamera.cameraMatrix.mat4[0],this._curCamera.cameraMatrix.mat4[1],this._curCamera.cameraMatrix.mat4[2],this._curCamera.cameraMatrix.mat4[3],this._curCamera.cameraMatrix.mat4[4],this._curCamera.cameraMatrix.mat4[5],this._curCamera.cameraMatrix.mat4[6],this._curCamera.cameraMatrix.mat4[7],this._curCamera.cameraMatrix.mat4[8],this._curCamera.cameraMatrix.mat4[9],this._curCamera.cameraMatrix.mat4[10],this._curCamera.cameraMatrix.mat4[11],this._curCamera.cameraMatrix.mat4[12],this._curCamera.cameraMatrix.mat4[13],this._curCamera.cameraMatrix.mat4[14],this._curCamera.cameraMatrix.mat4[15]),this.ambientLightColors.length=0,this.directionalLightDirections.length=0,this.directionalLightColors.length=0,this.pointLightPositions.length=0,this.pointLightColors.length=0},r.RendererGL.prototype.background=function(){var t=this._pInst.color.apply(this._pInst,arguments),e=t.levels[0]/255,i=t.levels[1]/255,r=t.levels[2]/255,n=t.levels[3]/255;this.GL.clearColor(e,i,r,n),this.GL.depthMask(!0),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.fill=function(t,e,i,o){var s=r.prototype.color.apply(this._pInst,arguments);this.curFillColor=s._array,this.isImmediateDrawing?this.setFillShader(this._getImmediateModeShader()):this.setFillShader(this._getColorShader()),this.drawMode=n.FILL,this.curFillShader.setUniform("uMaterialColor",this.curFillColor)},r.RendererGL.prototype.stroke=function(t,e,i,n){arguments[3]=255;var o=r.prototype.color.apply(this._pInst,arguments);this.curStrokeColor=o._array,this.curStrokeShader.setUniform("uMaterialColor",this.curStrokeColor),this.curPointShader.setUniform("uMaterialColor",o._array)},r.RendererGL.prototype.strokeWeight=function(t){this.curStrokeWeight!==t&&(this.pointSize=t,this.curStrokeWeight=t,this.curStrokeShader.setUniform("uStrokeWeight",t),this.curPointShader.setUniform("uPointSize",t))},r.RendererGL.prototype.get=function(t,e,i,n){return r.Renderer2D.prototype.get.apply(this,[t,e,i,n])},r.RendererGL.prototype.loadPixels=function(){if(!0===this.attributes.preserveDrawingBuffer){var t=this._pInst._pixelDensity,e=this.width,i=this.height;e*=t,i*=t,void 0===this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4)),this.GL.readPixels(0,0,e,i,this.GL.RGBA,this.GL.UNSIGNED_BYTE,this.pixels),this._pInst._setProperty("pixels",this.pixels)}else console.log("loadPixels only works in WebGL when preserveDrawingBuffer is true.")},r.RendererGL.prototype.geometryInHash=function(t){return void 0!==this.gHash[t]},r.RendererGL.prototype.resize=function(t,e){r.Renderer.prototype.resize.call(this,t,e),this.GL.viewport(0,0,this.GL.drawingBufferWidth,this.GL.drawingBufferHeight),this._viewport=this.GL.getParameter(this.GL.VIEWPORT),this._curCamera._resize(),void 0!==this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4))},r.RendererGL.prototype.clear=function(){var t=arguments[0]||0,e=arguments[1]||0,i=arguments[2]||0,r=arguments[3]||0;this.GL.clearColor(t,e,i,r),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.translate=function(t,e,i){return t instanceof r.Vector&&(i=t.z,e=t.y,t=t.x),this.uMVMatrix.translate([t,e,i]),this},r.RendererGL.prototype.scale=function(t,e,i){return this.uMVMatrix.scale(t,e,i),this},r.RendererGL.prototype.rotate=function(t,e){return void 0===e?this.rotateZ(t):(arguments[0]=this._pInst._fromRadians(t),r.Matrix.prototype.rotate.apply(this.uMVMatrix,arguments),this)},r.RendererGL.prototype.rotateX=function(t){return this.rotate(t,1,0,0),this},r.RendererGL.prototype.rotateY=function(t){return this.rotate(t,0,1,0),this},r.RendererGL.prototype.rotateZ=function(t){return this.rotate(t,0,0,1),this},r.RendererGL.prototype.push=function(){var t=r.Renderer.prototype.push.apply(this),e=t.properties;return e.uMVMatrix=this.uMVMatrix.copy(),e.uPMatrix=this.uPMatrix.copy(),e._curCamera=this._curCamera,this._curCamera=this._curCamera.copy(),t},r.RendererGL.prototype.resetMatrix=function(){return this.uMVMatrix=r.Matrix.identity(this._pInst),this},r.RendererGL.prototype.setFillShader=function(t){return this.curFillShader!==t&&(this.curFillShader=t,this.curFillShader.init()),this.curFillShader},r.RendererGL.prototype.setPointShader=function(t){return this.curPointShader!==t&&(this.curPointShader=t,this.curPointShader.init()),this.curPointShader},r.RendererGL.prototype.setStrokeShader=function(t){return this.curStrokeShader!==t&&(this.curStrokeShader=t,this.curStrokeShader.init()),this.curStrokeShader},r.RendererGL.prototype._useLightShader=function(){return this.curFillShader&&this.curFillShader.isLightShader()||this.setFillShader(this._getLightShader()),this.curFillShader},r.RendererGL.prototype._useColorShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultImmediateModeShader||this.setFillShader(this._getColorShader()),this.curFillShader},r.RendererGL.prototype._usePointShader=function(){return this.curPointShader||this.setPointShader(this._getPointShader()),this.curPointShader},r.RendererGL.prototype._useImmediateModeShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultColorShader||this.setFillShader(this._getImmediateModeShader()),this.curFillShader},r.RendererGL.prototype._getLightShader=function(){return this._defaultLightShader||(this.attributes.perPixelLighting?this._defaultLightShader=new r.Shader(this,s.phongVert,s.phongFrag):this._defaultLightShader=new r.Shader(this,s.lightVert,s.lightTextureFrag)),this._defaultLightShader},r.RendererGL.prototype._getImmediateModeShader=function(){return this._defaultImmediateModeShader||(this._defaultImmediateModeShader=new r.Shader(this,s.immediateVert,s.vertexColorFrag)),this._defaultImmediateModeShader},r.RendererGL.prototype._getNormalShader=function(){return this._defaultNormalShader||(this._defaultNormalShader=new r.Shader(this,s.normalVert,s.normalFrag)),this._defaultNormalShader},r.RendererGL.prototype._getColorShader=function(){return this._defaultColorShader||(this._defaultColorShader=new r.Shader(this,s.normalVert,s.basicFrag)),this._defaultColorShader},r.RendererGL.prototype._getPointShader=function(){return this._defaultPointShader||(this._defaultPointShader=new r.Shader(this,s.pointVert,s.pointFrag)),this._defaultPointShader},r.RendererGL.prototype._getLineShader=function(){return this._defaultLineShader||(this._defaultLineShader=new r.Shader(this,s.lineVert,s.lineFrag)),this._defaultLineShader},r.RendererGL.prototype._getFontShader=function(){return this._defaultFontShader||(this.GL.getExtension("OES_standard_derivatives"),this._defaultFontShader=new r.Shader(this,s.fontVert,s.fontFrag)),this._defaultFontShader},r.RendererGL.prototype._getEmptyTexture=function(){if(!this._emptyTexture){var t=new r.Image(1,1);t.set(0,0,255),this._emptyTexture=new r.Texture(this,t)}return this._emptyTexture},r.RendererGL.prototype.getTexture=function(t){for(var e=this.textures,i=0;i2e4){var e,i=Object.prototype.toString,r=[],n=t.slice();e=n.pop();do{"[object Array]"===i.call(e)?n.push.apply(n,e):r.push(e)}while(n.length&&void 0!==(e=n.pop()));return r.reverse(),r}return[].concat.apply([],t)},r.RendererGL.prototype._vToNArray=function(t){return this._flatten(t.map(function(t){return[t.x,t.y,t.z]}))},r.prototype._assert3d=function(t){if(!this._renderer.isP3D)throw new Error(t+"() is only supported in WEBGL mode. If you'd like to use 3D graphics and WebGL, see https://p5js.org/examples/form-3d-primitives.html for more information.")},r.RendererGL.prototype._initTessy=function(){var t=new o.GluTesselator;return t.gluTessCallback(o.gluEnum.GLU_TESS_VERTEX_DATA,function(t,e){e[e.length]=t[0],e[e.length]=t[1],e[e.length]=t[2]}),t.gluTessCallback(o.gluEnum.GLU_TESS_BEGIN,function(t){t!==o.primitiveType.GL_TRIANGLES&&console.log("expected TRIANGLES but got type: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_ERROR,function(t){console.log("error callback"),console.log("error number: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_COMBINE,function(t,e,i){return[t[0],t[1],t[2]]}),t.gluTessCallback(o.gluEnum.GLU_TESS_EDGE_FLAG,function(t){}),t},r.RendererGL.prototype._triangulate=function(t){this._tessy.gluTessNormal(0,0,1);var e=[];this._tessy.gluTessBeginPolygon(e);for(var i=0;i1&&(s=s.substring(0,s.indexOf("[0]"))),o.name=s,o.type=n.type,o.type===t.SAMPLER_2D&&(o.samplerIndex=i,i++,this.samplers.push(o)),this.uniforms[s]=o}this._loadedUniforms=!0}},r.Shader.prototype.compile=function(){},r.Shader.prototype.bindShader=function(){this.init(),this._bound||(this.useProgram(),this._bound=!0,this.bindTextures(),this._setMatrixUniforms(),this===this._renderer.curStrokeShader&&this._setViewportUniform())},r.Shader.prototype.unbindShader=function(){return this._bound&&(this.unbindTextures(),this._bound=!1),this},r.Shader.prototype.bindTextures=function(){for(var t=this._renderer.GL,e=0;e1?e.length&&n.uniform1iv(r,e):n.uniform1i(r,e);break;case n.FLOAT:i.size>1?e.length&&n.uniform1fv(r,e):n.uniform1f(r,e);break;case n.FLOAT_MAT3:n.uniformMatrix3fv(r,!1,e);break;case n.FLOAT_MAT4:n.uniformMatrix4fv(r,!1,e);break;case n.FLOAT_VEC2:i.size>1?e.length&&n.uniform2fv(r,e):n.uniform2f(r,e[0],e[1]);break;case n.FLOAT_VEC3:i.size>1?e.length&&n.uniform3fv(r,e):n.uniform3f(r,e[0],e[1],e[2]);break;case n.FLOAT_VEC4:i.size>1?e.length&&n.uniform4fv(r,e):n.uniform4f(r,e[0],e[1],e[2],e[3]);break;case n.INT_VEC2:i.size>1?e.length&&n.uniform2iv(r,e):n.uniform2i(r,e[0],e[1]);break;case n.INT_VEC3:i.size>1?e.length&&n.uniform3iv(r,e):n.uniform3i(r,e[0],e[1],e[2]);break;case n.INT_VEC4:i.size>1?e.length&&n.uniform4iv(r,e):n.uniform4i(r,e[0],e[1],e[2],e[3]);break;case n.SAMPLER_2D:n.activeTexture(n.TEXTURE0+i.samplerIndex),i.texture=this._renderer.getTexture(e),n.uniform1i(i.location,i.samplerIndex)}return this}},r.Shader.prototype.isLightShader=function(){return void 0!==this.uniforms.uUseLighting||void 0!==this.uniforms.uAmbientLightCount||void 0!==this.uniforms.uDirectionalLightCount||void 0!==this.uniforms.uPointLightCount||void 0!==this.uniforms.uAmbientColor||void 0!==this.uniforms.uDirectionalColor||void 0!==this.uniforms.uPointLightLocation||void 0!==this.uniforms.uPointLightColor||void 0!==this.uniforms.uLightingDirection||void 0!==this.uniforms.uSpecular},r.Shader.prototype.isTextureShader=function(){return this.samplerIndex>0},r.Shader.prototype.isColorShader=function(){return void 0!==this.attributes.aVertexColor||void 0!==this.uniforms.uMaterialColor},r.Shader.prototype.isTexLightShader=function(){return this.isLightShader()&&this.isTextureShader()},r.Shader.prototype.isStrokeShader=function(){return void 0!==this.uniforms.uStrokeWeight},r.Shader.prototype.enableAttrib=function(t,e,i,r,n,o){var s=this._renderer.GL;return-1!==t&&(s.enableVertexAttribArray(t),s.vertexAttribPointer(t,e,i,r,n,o)),this},e.exports=r.Shader},{"../core/main":24}],76:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.Texture=function(t,e){this._renderer=t;var i=this._renderer.GL;this.src=e,this.glTex=void 0,this.glTarget=i.TEXTURE_2D,this.glFormat=i.RGBA,this.mipmaps=!1,this.glMinFilter=i.LINEAR,this.glMagFilter=i.LINEAR,this.glWrapS=i.CLAMP_TO_EDGE,this.glWrapT=i.CLAMP_TO_EDGE,this.isSrcMediaElement=void 0!==r.MediaElement&&e instanceof r.MediaElement,this._videoPrevUpdateTime=0,this.isSrcHTMLElement=void 0!==r.Element&&e instanceof r.Element&&!(e instanceof r.Graphics),this.isSrcP5Image=e instanceof r.Image,this.isSrcP5Graphics=e instanceof r.Graphics,this.isImageData="undefined"!=typeof ImageData&&e instanceof ImageData;var n=this._getTextureDataFromSource();return this.width=n.width,this.height=n.height,this.init(n),this},r.Texture.prototype._getTextureDataFromSource=function(){var t;return this.isSrcP5Image?t=this.src.canvas:this.isSrcMediaElement||this.isSrcP5Graphics||this.isSrcHTMLElement?t=this.src.elt:this.isImageData&&(t=this.src),t},r.Texture.prototype.init=function(t){var e=this._renderer.GL;if(this.glTex=e.createTexture(),this.bindTexture(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,this.glMagFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,this.glMinFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,this.glWrapS),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,this.glWrapT),0===this.width||0===this.height||this.isSrcMediaElement&&!this.src.loadedmetadata){var i=new Uint8Array([1,1,1,1]);e.texImage2D(this.glTarget,0,e.RGBA,1,1,0,this.glFormat,e.UNSIGNED_BYTE,i)}else e.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,e.UNSIGNED_BYTE,t)},r.Texture.prototype.update=function(){var t=this.src;if(0===t.width||0===t.height)return!1;var e=this._getTextureDataFromSource(),i=!1,r=this._renderer.GL;return e.width!==this.width||e.height!==this.height?(i=!0,this.width=e.width,this.height=e.height,this.isSrcP5Image?t.setModified(!1):(this.isSrcMediaElement||this.isSrcHTMLElement)&&t.setModified(!0)):this.isSrcP5Image?t.isModified()&&(i=!0,t.setModified(!1)):this.isSrcMediaElement?t.isModified()?(i=!0,t.setModified(!1)):t.loadedmetadata&&this._videoPrevUpdateTime!==t.time()&&(this._videoPrevUpdateTime=t.time(),i=!0):this.isImageData?t._dirty&&(t._dirty=!1,i=!0):i=!0,i&&(this.bindTexture(),r.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,r.UNSIGNED_BYTE,e)),i},r.Texture.prototype.bindTexture=function(){return this._renderer.GL.bindTexture(this.glTarget,this.glTex),this},r.Texture.prototype.unbindTexture=function(){this._renderer.GL.bindTexture(this.glTarget,null)},r.Texture.prototype.setInterpolation=function(t,e){var i=this._renderer.GL;t===n.NEAREST?this.glMinFilter=i.NEAREST:this.glMinFilter=i.LINEAR,e===n.NEAREST?this.glMagFilter=i.NEAREST:this.glMagFilter=i.LINEAR,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,this.glMinFilter),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,this.glMagFilter),this.unbindTexture()},r.Texture.prototype.setWrapMode=function(t,e){var i=this._renderer.GL,r=function(t){return 0==(t&t-1)},o=r(this.width),s=r(this.width);t===n.REPEAT?o&&s?this.glWrapS=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):t===n.MIRROR?o&&s?this.glWrapS=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):this.glWrapS=i.CLAMP_TO_EDGE,e===n.REPEAT?o&&s?this.glWrapT=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):e===n.MIRROR?o&&s?this.glWrapT=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):this.glWrapT=i.CLAMP_TO_EDGE,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,this.glWrapS),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,this.glWrapT),this.unbindTexture()},e.exports=r.Texture},{"../core/constants":18,"../core/main":24}],77:[function(t,e,i){"use strict";function r(t,e){this.width=t,this.height=e,this.infos=[],this.findImage=function(t){var e=this.width*this.height;if(t>e)throw new Error("font is too complex to render in 3D");for(var i,r,n=this.infos.length-1;n>=0;--n){var o=this.infos[n];if(o.index+t0;){var n=t[r];e>n&&(e=n),ii?i:t}(255*t,0,255)}function r(t,e,i,r,n,s,a,h){for(var u=new function t(e,i,r,n){this.p0=e,this.c0=i,this.c1=r,this.p1=n,this.toQuadratic=function(){return{x:this.p0.x,y:this.p0.y,x1:this.p1.x,y1:this.p1.y,cx:(3*(this.c0.x+this.c1.x)-(this.p0.x+this.p1.x))/4,cy:(3*(this.c0.y+this.c1.y)-(this.p0.y+this.p1.y))/4}},this.quadError=function(){return o.Vector.sub(o.Vector.sub(this.p1,this.p0),o.Vector.mult(o.Vector.sub(this.c1,this.c0),3)).mag()/2},this.split=function(e){var i=o.Vector.lerp(this.p0,this.c0,e),r=o.Vector.lerp(this.c0,this.c1,e),n=o.Vector.lerp(i,r,e);this.c1=o.Vector.lerp(this.c1,this.p1,e),this.c0=o.Vector.lerp(r,this.c1,e);var s=o.Vector.lerp(n,this.c0,e),a=new t(this.p0,i,n,s);return this.p0=s,a},this.splitInflections=function(){var t=o.Vector.sub(this.c0,this.p0),e=o.Vector.sub(o.Vector.sub(this.c1,this.c0),t),i=o.Vector.sub(o.Vector.sub(o.Vector.sub(this.p1,this.c1),t),o.Vector.mult(e,2)),r=[],n=e.x*i.y-e.y*i.x;if(0!==n){var s=t.x*i.y-t.y*i.x,a=t.x*e.y-t.y*e.x,h=s*s-4*n*a;if(h>=0){n<0&&(n=-n,s=-s,a=-a);var l=Math.sqrt(h),u=(-s-l)/(2*n),c=(-s+l)/(2*n);u>0&&u<1&&(r.push(this.split(u)),c=1-(1-c)/(1-u)),c>0&&c<1&&r.push(this.split(c))}}return r.push(this),r}}(new o.Vector(t,e),new o.Vector(i,r),new o.Vector(n,s),new o.Vector(a,h)).splitInflections(),c=[],p=30/l,d=0;d=.125);){var v=Math.pow(f,1/3),g=m.split(v),_=m.split(1-v/(1-v));c.push(g),y.push(m),m=_}f<1&&c.push(m.split(.5)),c.push(m),Array.prototype.push.apply(c,y.reverse())}return c}function s(t,i,r,n){e([t,r],[i,n],{x:t,y:i,cx:(t+r)/2,cy:(i+n)/2})}function u(t,e,i,r){return Math.abs(i-t)<1e-5&&Math.abs(r-e)<1e-5}function c(t,e,i){for(var r=t.length,o=e.findImage(r),s=o.index,a=0,h=0;h>7,127&d,p>>7,127&p);for(var f=0;f>7,127&m,0,0)}}return{cellImageInfo:l,dimOffset:s,dimImageInfo:o}}var p=this.glyphInfos[t.index];if(p)return p;var d=t.getBoundingBox(),f=d.x1,m=d.y1,y=d.x2-f,v=d.y2-m,g=t.path.commands;if(0===y||0===v||!g.length)return this.glyphInfos[t.index]={};var _,b=[],S=[],x=[];for(_=a-1;_>=0;--_)x.push([]);for(_=h-1;_>=0;--_)S.push([]);for(var w,T,M,A,P=0;P=n)&&this._doFill){if(!this._isOpenType())return console.log("WEBGL: only opentype fonts are supported"),t;t.push();var l=this.curFillShader,c=this._doStroke,p=this.drawMode;this.curFillShader=null,this._doStroke=!1,this.drawMode=s.TEXTURE;var d=this._textFont.font,f=this._textFont._fontInfo;f||(f=this._textFont._fontInfo=new u(d));var m=this._textFont._handleAlignment(this,e,i,r),y=this._textSize,v=y/d.unitsPerEm;this.translate(m.x,m.y,0),this.scale(v,v,1);var g=this.GL,_=!this._defaultFontShader,b=this.setFillShader(this._getFontShader());_&&(b.setUniform("uGridImageSize",[64,64]),b.setUniform("uCellsImageSize",[64,64]),b.setUniform("uStrokeImageSize",[64,64]),b.setUniform("uGridSize",[a,h])),this._applyColorBlend(this.curFillColor);var S=this.gHash.glyph;if(!S){var x=this._textGeom=new o.Geometry(1,1,function(){for(var t=0;t<=1;t++)for(var e=0;e<=1;e++)this.vertices.push(new o.Vector(e,t,0)),this.uvs.push(e,t)});x.computeFaces().computeNormals(),S=this.createBuffers("glyph",x)}this._bindBuffer(S.vertexBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aPosition.location,3,g.FLOAT,!1,0,0),this._bindBuffer(S.indexBuffer,g.ELEMENT_ARRAY_BUFFER),this._bindBuffer(S.uvBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aTexCoord.location,2,g.FLOAT,!1,0,0),b.setUniform("uMaterialColor",this.curFillColor);try{for(var w=0,T=null,M=!1,A=d.stringToGlyphs(e),P=0;P1)return o();var s=Math.sqrt(-2*Math.log(i)/i);return n=e*s,r=!0,t*s},s=function(t,e){return t+o()*e},a=function(t){if(void 0===t||isNaN(t))return[];if("undefined"==typeof ArrayBuffer){for(var e=new Array(t),i=0;i1e-7&&(_-=g*Math.log(g))}_>s?(c=d,p===1/0?d*=2:d=(d+p)/2):(p=d,c===-1/0?d/=2:d=(d+c)/2),m++,Math.abs(_-s)=50&&(f=!0)}for(v=0;v0?1:t<0?-1:0}var p=function(t){t=t||{};this.perplexity=i(t,"perplexity",30),this.dim=i(t,"dim",2),this.epsilon=i(t,"epsilon",10),this.iter=0};p.prototype={initDataRaw:function(t){var i=t.length,r=t[0].length;e(i>0," X is empty? You must have some data!"),e(r>0," X[0] is empty? Where is the data?");var n=function(t){for(var e=t.length,i=a(e*e),r=0;r0," X is empty? You must have some data!");for(var r=a(i*i),n=0;n{class e{constructor(){this.pos=t.createVector(0,0,0),this.label="",this.color=t.color(255),this.size=1,this.trig=0,this.canTrig=!0}drawPoint(){if(t.noStroke(),t.fill(this.color),t.ambientMaterial(this.r,this.r,this.r),t.push(),t.translate(this.pos.x,this.pos.y,this.pos.z),t.box(this.size),t.fill(255,0,0,this.trig),t.box(1.5*this.size),255==this.trig&&this.canTrig){let e=t.floor(t.random(10));f[e].envelope.attack=this.r/1e3,f[e].triggerAttackRelease(s.a.Midi(10*(14.75-this.size+2)).toFrequency(),this.size/500),this.canTrig=!1}this.trig-=100,t.pop()}setPos(t){return this.pos=t,this}setCol(e,i,r,n){return this.color=t.color(e,i,r,n),this.r=e,this.g=i,this.b=r,this}setSize(t){return this.size=t,this}}let i,r,n=0,o=[],a=[],l=-250,c=-250,p=0,d=0,f=[];var m=new s.a.Panner(-1).toMaster(),y=(new s.a.Freeverb).connect(m);y.dampening.value=3500,y.roomSize.value=.79;for(let t=0;t<10;t++)f.push(new s.a.FMSynth({harmonicity:10,modulationIndex:80,detune:0,oscillator:{type:"sine"},envelope:{attack:.001,decay:.003,sustain:.06,release:.3},modulation:{type:"square"},modulationEnvelope:{attack:.01,decay:.02,sustain:.03,release:.033},portamento:.01}).connect(y));t.setup=(()=>{t.createCanvas(800,800,t.WEBGL);t.smooth();let n={epsilon:30,perplexity:30,dim:3};i=new h.a.tSNE(n);for(let i=0;i<500;i++){let i=t.random(255),r=t.random(255),n=t.random(255);a.push([i,r,n]);let s=new e;s.setCol(i,r,n,255).setSize(r/20+2),o.push(s)}i.initDataRaw(a),r=i.getSolution()});let v=0;t.draw=(()=>{t.camera(100*t.sin(t.frameCount/300),100*t.cos(t.frameCount/300),800,0,0,0,0,1,0),t.background(0),t.frameRate(60);let e=t.constrain(t.mouseX+80*t.sin(-t.frameCount/20),0,t.width);p+=.9*(e-p);let s=t.constrain(t.mouseY+80*t.cos(-t.frameCount/20),0,t.height);d+=.9*(s-d),l=t.map(p,0,t.width,-250,250),c=t.map(d,0,t.height,-250,250),m.pan.value=l/250,t.pointLight(150,150,150,500,0,200),t.ambientLight(255),v=250*t.sin(t.frameCount/100),t.push(),t.translate(l,0,0),t.fill(255,120),t.noStroke(),t.box(5,500,0),t.pop(),t.push(),t.translate(0,c,0),t.fill(255,120),t.noStroke(),t.box(500,5,0),t.pop(),t.push(),t.translate(l,c,0),t.fill(255,0,0,40),t.noStroke(),t.box(5,5,500),t.pop(),++n<600&&i.step();for(let e=0;e{"m"==t.key&&t.save(Date.now()+".jpg")}),t.mousePressed=(()=>{u()(s.a.context).then(function(){})})};e.default=c,new n.a(c)},function(t,e){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i}]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RvbmUvYnVpbGQvVG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcDUvbGliL3A1Lm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdHNuZS90c25lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdGFydGF1ZGlvY29udGV4dC9TdGFydEF1ZGlvQ29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsIl9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fIiwidW5kZWZpbmVkIiwiVG9uZSIsIk1vZHVsZSIsImZ1bmMiLCJNYWluIiwidGhpcyIsIkVycm9yIiwidG9TdHJpbmciLCJjbGFzc05hbWUiLCJpc0xldHRlciIsIm1hdGNoIiwic2FtZUNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiLCJpc0Z1bmN0aW9uIiwiZGlzcG9zZSIsInNldCIsInBhcmFtcyIsInJhbXBUaW1lIiwiaXNPYmplY3QiLCJpc1N0cmluZyIsInRtcE9iaiIsInBhcmFtTG9vcCIsImF0dHIiLCJwYXJlbnQiLCJpbmRleE9mIiwiYXR0clNwbGl0Iiwic3BsaXQiLCJsZW5ndGgiLCJzcGxpY2UiLCJpbm5lclBhcmFtIiwiam9pbiIsInBhcmFtIiwiaXNVbmRlZiIsIlNpZ25hbCIsIlBhcmFtIiwicmFtcFRvIiwiQXVkaW9QYXJhbSIsIlRpbWVCYXNlIiwiX2NvbGxlY3REZWZhdWx0cyIsInJldCIsInN1YlJldCIsImoiLCJzdWJBdHRyIiwiaXNEZWZpbmVkIiwiY29uc3RyIiwiZGVmYXVsdHMiLCJrZXlzIiwiX3N1cGVyIiwic3VwZXJEZWZzIiwicHVzaCIsInZhbHVlcyIsIm9wdGlvbnMiLCJkZWZhdWx0QXJnIiwiZ2l2ZW4iLCJmYWxsYmFjayIsImdpdmVuUHJvcCIsImZhbGxiYWNrUHJvcCIsImNvbm5lY3RTZXJpZXMiLCJjdXJyZW50VW5pdCIsImFyZ3VtZW50cyIsInRvVW5pdCIsImNvbm5lY3QiLCJ2YWwiLCJpc051bWJlciIsImFyZyIsImlzQm9vbGVhbiIsImlzQXJyYXkiLCJBcnJheSIsImlzTm90ZSIsInRlc3QiLCJub09wIiwiX3JlYWRPbmx5Iiwid3JpdGFibGUiLCJfd3JpdGFibGUiLCJTdGF0ZSIsIlN0YXJ0ZWQiLCJTdG9wcGVkIiwiUGF1c2VkIiwiZXF1YWxQb3dlclNjYWxlIiwicGVyY2VudCIsInBpRmFjdG9yIiwiTWF0aCIsIlBJIiwic2luIiwiZGJUb0dhaW4iLCJkYiIsInBvdyIsImdhaW5Ub0RiIiwiZ2FpbiIsImxvZyIsIkxOMTAiLCJpbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8iLCJpbnRlcnZhbCIsIm5vdyIsImNvbnRleHQiLCJleHRlbmQiLCJjaGlsZCIsIlRlbXBDb25zdHJ1Y3RvciIsImF1ZGlvQ29udGV4dCIsIkNvbnRleHQiLCJlbWl0Iiwic2V0Q29udGV4dCIsImN0eCIsInNhbXBsZVJhdGUiLCJoYXNBdWRpb0NvbnRleHQiLCJ3aW5kb3ciLCJoYXNQcm9taXNlcyIsImhhc1dvcmtlcnMiLCJnZXRDb250ZXh0IiwicmVzb2x2ZSIsImluaXRpYWxpemVkIiwicmVzQ2FsbGJhY2siLCJvZmYiLCJvbiIsInZlcnNpb24iLCJFbWl0dGVyIiwiX2V2ZW50cyIsImV2ZW50IiwiY2FsbGJhY2siLCJldmVudHMiLCJldmVudE5hbWUiLCJvbmNlIiwiYm91bmRDYWxsYmFjayIsImFwcGx5IiwiZXYiLCJldmVudExpc3QiLCJhcmdzIiwic2xpY2UiLCJsZW4iLCJtaXhpbiIsImZ1bmN0aW9ucyIsImVtaXR0ZXJGdW5jIiwiVGltZWxpbmUiLCJfdGltZWxpbmUiLCJtZW1vcnkiLCJJbmZpbml0eSIsImFkZCIsInRpbWUiLCJ2YWx1ZU9mIiwiaW5kZXgiLCJfc2VhcmNoIiwiZGlmZiIsInJlbW92ZSIsImNvbXBhcmF0b3IiLCJwZWVrIiwic2hpZnQiLCJnZXRBZnRlciIsImdldEJlZm9yZSIsImNhbmNlbCIsImFmdGVyIiwiY2FuY2VsQmVmb3JlIiwicHJldmlvdXNFdmVudCIsImJlZ2lubmluZyIsImVuZCIsIm1pZFBvaW50IiwiZmxvb3IiLCJuZXh0RXZlbnQiLCJfaXRlcmF0ZSIsImxvd2VyQm91bmQiLCJ1cHBlckJvdW5kIiwiZm9yRWFjaCIsImZvckVhY2hCZWZvcmUiLCJmb3JFYWNoQWZ0ZXIiLCJmb3JFYWNoQmV0d2VlbiIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJmb3JFYWNoRnJvbSIsImZvckVhY2hBdFRpbWUiLCJzdXBwb3J0ZWQiLCJPZmZsaW5lQXVkaW9Db250ZXh0Iiwid2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dCIsInN0YXJ0UmVuZGVyaW5nIiwiUHJvbWlzZSIsIl9uYXRpdmVfc3RhcnRSZW5kZXJpbmciLCJkb25lIiwib25jb21wbGV0ZSIsImUiLCJyZW5kZXJlZEJ1ZmZlciIsIkF1ZGlvQ29udGV4dCIsIndlYmtpdEF1ZGlvQ29udGV4dCIsImNsb3NlIiwic3VzcGVuZCIsInJlc3VtZSIsImNyZWF0ZUdhaW4iLCJjcmVhdGVHYWluTm9kZSIsImNyZWF0ZURlbGF5IiwiY3JlYXRlRGVsYXlOb2RlIiwiZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSIsIm9mZmxpbmVDb250ZXh0IiwiYXVkaW9EYXRhIiwiVWludDMyQXJyYXkiLCJidWZmZXIiLCJkZWNvZGVBdWRpb0RhdGEiLCJfbmF0aXZlX2RlY29kZUF1ZGlvRGF0YSIsInN1Y2Nlc3MiLCJlcnJvciIsInByb3AiLCJfY29udGV4dCIsIl9kZWZpbmVQcm9wZXJ0eSIsIl9sYXRlbmN5SGludCIsImxhdGVuY3lIaW50IiwiX2NvbnN0YW50cyIsImxvb2tBaGVhZCIsIl9jb21wdXRlZFVwZGF0ZUludGVydmFsIiwiX3RpY2tlciIsIlRpY2tlciIsImNsb2NrU291cmNlIiwidXBkYXRlSW50ZXJ2YWwiLCJfdGltZW91dHMiLCJfdGltZW91dElkcyIsIl90aW1lb3V0TG9vcCIsImN1cnJlbnRUaW1lIiwicmVhZHkiLCJzdGF0ZSIsInRoZW4iLCJnZXRDb25zdGFudCIsImNyZWF0ZUJ1ZmZlciIsImFyciIsImdldENoYW5uZWxEYXRhIiwiY29uc3RhbnQiLCJjcmVhdGVCdWZmZXJTb3VyY2UiLCJjaGFubmVsQ291bnQiLCJjaGFubmVsQ291bnRNb2RlIiwibG9vcCIsInN0YXJ0Iiwic2V0VGltZW91dCIsImZuIiwidGltZW91dCIsImlkIiwiY2xlYXJUaW1lb3V0IiwidHlwZSIsImhpbnQiLCJjb24iLCJkaXNjb25uZWN0IiwiX3R5cGUiLCJfdXBkYXRlSW50ZXJ2YWwiLCJfY2FsbGJhY2siLCJfY3JlYXRlQ2xvY2siLCJUeXBlIiwiV29ya2VyIiwiVGltZW91dCIsIk9mZmxpbmUiLCJfY3JlYXRlV29ya2VyIiwiVVJMIiwid2Via2l0VVJMIiwiYmxvYiIsIkJsb2IiLCJ0b0ZpeGVkIiwiYmxvYlVybCIsImNyZWF0ZU9iamVjdFVSTCIsIndvcmtlciIsIm9ubWVzc2FnZSIsIl93b3JrZXIiLCJfY3JlYXRlVGltZW91dCIsIl90aW1lb3V0IiwibWF4IiwicG9zdE1lc3NhZ2UiLCJfZGlzcG9zZUNsb2NrIiwidGVybWluYXRlIiwibmF0aXZlQ29ubmVjdCIsIkF1ZGlvTm9kZSIsIm5hdGl2ZURpc2Nvbm5lY3QiLCJ0b25lQ29ubmVjdCIsIkIiLCJvdXROdW0iLCJpbk51bSIsImlucHV0IiwiVE9ORV9TSUxFTkNFX1ZFUlNJT05fTE9HR0lORyIsImNvbnNvbGUiLCJ3YXJuIiwiY3JlYXRlSW5zT3V0cyIsImlucHV0cyIsIm91dHB1dHMiLCJvdXRwdXQiLCJjaGFubmVsSW50ZXJwcmV0YXRpb24iLCJfb25Db25uZWN0IiwidW5pdCIsIm91dHB1dE51bSIsImlucHV0TnVtIiwiZGVzdGluYXRpb24iLCJjaGFpbiIsImZhbiIsIlNpZ25hbEJhc2UiLCJub2RlIiwib3V0cHV0TnVtYmVyIiwiaW5wdXROdW1iZXIiLCJfcGFyYW0iLCJjYW5jZWxTY2hlZHVsZWRWYWx1ZXMiLCJvdmVycmlkZGVuIiwidWEiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwiV2F2ZVNoYXBlck5vZGUiLCJfaW50ZXJuYWxOb2RlIiwiX25hdGl2ZV9jcmVhdGVXYXZlU2hhcGVyIiwiX2N1cnZlIiwiY3VydmUiLCJhcnJheSIsIkZsb2F0MzJBcnJheSIsImNyZWF0ZVdhdmVTaGFwZXIiLCJXYXZlU2hhcGVyIiwibWFwcGluZyIsImJ1ZmZlckxlbiIsIl9zaGFwZXIiLCJpc0Zpbml0ZSIsInNldE1hcCIsIm5vcm1hbGl6ZWQiLCJvdmVyc2FtcGxlIiwib3ZlcnNhbXBsaW5nIiwiUmFuZ2VFcnJvciIsInVuaXRzIiwiX3ZhbCIsIl91bml0cyIsInBhcnNlRmxvYXQiLCJjaGFyQXQiLCJfZGVmYXVsdFVuaXRzIiwidG9TZWNvbmRzIiwidG9UaWNrcyIsInRvRnJlcXVlbmN5IiwidG9NaWRpIiwiX2V4cHJlc3Npb25zIiwicmVnZXhwIiwibWV0aG9kIiwiZG90IiwicGFyc2VJbnQiLCJzY2FsYXIiLCJfYmVhdHNUb1VuaXRzIiwiX2dldFRpbWVTaWduYXR1cmUiLCJfdGlja3NUb1VuaXRzIiwiaHoiLCJfZnJlcXVlbmN5VG9Vbml0cyIsInRyIiwicSIsInRvdGFsIiwiX3NlY29uZHNUb1VuaXRzIiwic2FtcGxlcyIsImRlZmF1bHQiLCJfZ2V0QnBtIiwiVHJhbnNwb3J0IiwiYnBtIiwidGltZVNpZ25hdHVyZSIsIl9nZXRQUFEiLCJQUFEiLCJfbm93IiwiZnJlcSIsImJlYXRzIiwic2Vjb25kcyIsInRpY2tzIiwiX25vQXJnIiwidHJpbSIsImV4cHIiLCJtYXRjaGluZyIsInRvU2FtcGxlcyIsInRvTWlsbGlzZWNvbmRzIiwiRnJlcXVlbmN5IiwiYXNzaWduIiwibWlkaSIsIm10b2YiLCJub3RlIiwicGl0Y2giLCJvY3RhdmUiLCJub3RlTnVtYmVyIiwibm90ZVRvU2NhbGVJbmRleCIsInRyYW5zcG9zZSIsImhhcm1vbml6ZSIsImludGVydmFscyIsIm1hcCIsImZ0b20iLCJ0b05vdGUiLCJsb2cyIiwiQTQiLCJyb3VuZCIsInNjYWxlSW5kZXhUb05vdGUiLCJxdWFydGVyVGltZSIsInF1YXJ0ZXJzIiwiY2JiIiwiY2IiLCJjIyIsImN4IiwiZGJiIiwiZCMiLCJkeCIsImViYiIsImViIiwiZSMiLCJleCIsImZiYiIsImZiIiwiZiIsImYjIiwiZngiLCJnYmIiLCJnYiIsImciLCJnIyIsImd4IiwiYWJiIiwiYWIiLCJhIiwiYSMiLCJheCIsImJiYiIsImJiIiwiYiIsImIjIiwiYngiLCJmcmVxdWVuY3kiLCJUaW1lIiwicXVhbnRpemUiLCJjYXB0dXJlIiwicXVhbnRUbyIsIm5leHRTdWJkaXZpc2lvbiIsInN1YmRpdiIsInN1YmRpdmlzaW9uIiwidG9Ob3RhdGlvbiIsInRlc3ROb3RhdGlvbnMiLCJwb3dlciIsImNsb3Nlc3QiLCJjbG9zZXN0U2Vjb25kcyIsIm5vdGF0aW9uIiwibm90YXRpb25TZWNvbmRzIiwiYWJzIiwidG9CYXJzQmVhdHNTaXh0ZWVudGhzIiwibWVhc3VyZXMiLCJzaXh0ZWVudGhzIiwiVHJhbnNwb3J0VGltZSIsIkRlZmF1bHQiLCJUaWNrcyIsIk5vcm1hbFJhbmdlIiwiQXVkaW9SYW5nZSIsIkRlY2liZWxzIiwiSW50ZXJ2YWwiLCJCUE0iLCJQb3NpdGl2ZSIsIkdhaW4iLCJDZW50cyIsIkRlZ3JlZXMiLCJNSURJIiwiQmFyc0JlYXRzU2l4dGVlbnRocyIsIlNhbXBsZXMiLCJIZXJ0eiIsIk5vdGUiLCJNaWxsaXNlY29uZHMiLCJTZWNvbmRzIiwiTm90YXRpb24iLCJjb252ZXJ0IiwiX3RvVW5pdHMiLCJnZXRWYWx1ZUF0VGltZSIsIl9pbml0aWFsVmFsdWUiLCJfZnJvbVVuaXRzIiwic2V0VmFsdWVBdFRpbWUiLCJtaW5WYWx1ZSIsIm1heFZhbHVlIiwibWluIiwiX21pbk91dHB1dCIsIkF1dG9tYXRpb25UeXBlIiwiTGluZWFyIiwiRXhwb25lbnRpYWwiLCJUYXJnZXQiLCJTZXRWYWx1ZSIsImJlZm9yZSIsImluaXRpYWxWYWx1ZSIsImRlZmF1bHRWYWx1ZSIsInByZXZpb3VzVmFsIiwicHJldmlvdXMiLCJfZXhwb25lbnRpYWxBcHByb2FjaCIsIl9saW5lYXJJbnRlcnBvbGF0ZSIsIl9leHBvbmVudGlhbEludGVycG9sYXRlIiwic2V0UmFtcFBvaW50IiwiY3VycmVudFZhbCIsImNhbmNlbEFuZEhvbGRBdFRpbWUiLCJsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZSIsImV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUiLCJleHBvbmVudGlhbFJhbXBUbyIsImxpbmVhclJhbXBUbyIsInRhcmdldFJhbXBUbyIsImV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSIsInRpbWVDb25zdGFudCIsInNldFRhcmdldEF0VGltZSIsInNldFZhbHVlQ3VydmVBdFRpbWUiLCJkdXJhdGlvbiIsInNjYWxpbmciLCJzZWdUaW1lIiwidmFsdWVBdFRpbWUiLCJ0MCIsInYwIiwidjEiLCJleHAiLCJ0MSIsIk9mZmxpbmVDb250ZXh0IiwiY2hhbm5lbHMiLCJfZHVyYXRpb24iLCJfY3VycmVudFRpbWUiLCJyZW5kZXIiLCJibG9ja1RpbWUiLCJidWZmZXJTb3VyY2UiLCJfbmF0aXZlX3N0YXJ0IiwiX2dhaW5Ob2RlIiwiY3JlYXRlQ29uc3RhbnRTb3VyY2UiLCJDb25zdGFudFNvdXJjZU5vZGUiLCJfYnVmZmVyU291cmNlIiwiZ2Fpbk5vZGUiLCJfb3V0cHV0Iiwib2Zmc2V0Iiwic3RvcCIsIl9wcm94aWVzIiwiX3NvdXJjZVN0YXJ0ZWQiLCJfY29uc3RhbnRTb3VyY2UiLCJfaXNQYXJhbSIsIl9hcHBseUF1dG9tYXRpb25zIiwiX2Nvbm5lY3RQcm94aWVzIiwicHJveHkiLCJmcm9tIiwicHJldmlvdXNNZXRob2QiLCJzaWduYWwiLCJQb3ciLCJfZXhwIiwiX2V4cFNjYWxlciIsIl9leHBGdW5jIiwiRW52ZWxvcGUiLCJhdHRhY2siLCJkZWNheSIsInN1c3RhaW4iLCJyZWxlYXNlIiwiX2F0dGFja0N1cnZlIiwiX3JlbGVhc2VDdXJ2ZSIsIl9zaWciLCJhdHRhY2tDdXJ2ZSIsInJlbGVhc2VDdXJ2ZSIsIkluIiwiY3VydmVEZWYiLCJPdXQiLCJ0cmlnZ2VyQXR0YWNrIiwidmVsb2NpdHkiLCJvcmlnaW5hbEF0dGFjayIsImN1cnJlbnRWYWx1ZSIsInBlcmNlbnRDb21wbGV0ZSIsInNsaWNlSW5kZXgiLCJ0cmlnZ2VyUmVsZWFzZSIsInRyaWdnZXJBdHRhY2tSZWxlYXNlIiwiayIsImNvc2luZUN1cnZlIiwicmlwcGxlQ3VydmUiLCJjdXJ2ZUxlbiIsInNpbmVXYXZlIiwic3RhaXJzQ3VydmUiLCJjZWlsIiwic2luZUN1cnZlIiwiY29zIiwiYm91bmNlQ3VydmUiLCJpbnZlcnRDdXJ2ZSIsIm91dCIsImxpbmVhciIsImV4cG9uZW50aWFsIiwiYm91bmNlIiwiY29zaW5lIiwicmV2ZXJzZSIsInJldmVyc2VDdXJ2ZSIsInN0ZXAiLCJyaXBwbGUiLCJzaW5lIiwiQW1wbGl0dWRlRW52ZWxvcGUiLCJBbmFseXNlck5vZGUiLCJnZXRGbG9hdFRpbWVEb21haW5EYXRhIiwidWludDgiLCJVaW50OEFycmF5IiwiZ2V0Qnl0ZVRpbWVEb21haW5EYXRhIiwiQW5hbHlzZXIiLCJfYW5hbHlzZXIiLCJjcmVhdGVBbmFseXNlciIsIl9idWZmZXIiLCJzaXplIiwic21vb3RoaW5nIiwiV2F2ZWZvcm0iLCJGRlQiLCJnZXRWYWx1ZSIsImdldEZsb2F0RnJlcXVlbmN5RGF0YSIsImZyZXF1ZW5jeUJpbkNvdW50IiwiZmZ0U2l6ZSIsIlR5cGVFcnJvciIsInNtb290aGluZ1RpbWVDb25zdGFudCIsIkNvbXByZXNzb3IiLCJfY29tcHJlc3NvciIsImNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvciIsInRocmVzaG9sZCIsImtuZWUiLCJyYXRpbyIsIkFkZCIsIl9zdW0iLCJNdWx0aXBseSIsIl9tdWx0IiwiTmVnYXRlIiwiX211bHRpcGx5IiwiU3VidHJhY3QiLCJfbmVnIiwiRXF1YWxQb3dlckdhaW4iLCJfZXFQb3dlciIsIkNyb3NzRmFkZSIsImluaXRpYWxGYWRlIiwiZmFkZSIsIl9lcXVhbFBvd2VyQSIsIl9lcXVhbFBvd2VyQiIsIl9vbmUiLCJfaW52ZXJ0IiwiRmlsdGVyIiwiX2ZpbHRlcnMiLCJkZXR1bmUiLCJRIiwiX3JvbGxvZmYiLCJyb2xsb2ZmIiwiY2FzY2FkaW5nQ291bnQiLCJjb3VudCIsImZpbHRlciIsImNyZWF0ZUJpcXVhZEZpbHRlciIsImNvbm5lY3Rpb25DaGFpbiIsImNvbmNhdCIsIk11bHRpYmFuZFNwbGl0IiwibG93IiwiX2xvd01pZEZpbHRlciIsIm1pZCIsImhpZ2giLCJsb3dGcmVxdWVuY3kiLCJoaWdoRnJlcXVlbmN5IiwiRVEzIiwiX211bHRpYmFuZFNwbGl0IiwiX2xvd0dhaW4iLCJfbWlkR2FpbiIsIl9oaWdoR2FpbiIsIlNjYWxlIiwib3V0cHV0TWluIiwib3V0cHV0TWF4IiwiX291dHB1dE1pbiIsIl9vdXRwdXRNYXgiLCJfc2NhbGUiLCJfYWRkIiwiX3NldFJhbmdlIiwiU2NhbGVFeHAiLCJleHBvbmVudCIsIkRlbGF5IiwiX21heERlbGF5IiwibWF4RGVsYXkiLCJkZWxheVRpbWUiLCJfZGVsYXlOb2RlIiwiRmVlZGJhY2tDb21iRmlsdGVyIiwiX2RlbGF5IiwiX2ZlZWRiYWNrIiwicmVzb25hbmNlIiwiQWJzIiwiX2FicyIsIkZvbGxvd2VyIiwiX2ZpbHRlciIsIl9mcmVxdWVuY3lWYWx1ZXMiLCJfc3ViIiwiX2F0dGFjayIsIl9yZWxlYXNlIiwiX3NldEF0dGFja1JlbGVhc2UiLCJtaW5UaW1lIiwiU2NhbGVkRW52ZWxvcGUiLCJGcmVxdWVuY3lFbnZlbG9wZSIsIl9vY3RhdmVzIiwib2N0YXZlcyIsImJhc2VGcmVxdWVuY3kiLCJHcmVhdGVyVGhhblplcm8iLCJfdGhyZXNoIiwiR3JlYXRlclRoYW4iLCJfZ3R6IiwiR2F0ZSIsIl9mb2xsb3dlciIsIl9ndCIsInRocmVzaCIsImF0dGFja1RpbWUiLCJyZWxlYXNlVGltZSIsIl93cmFwU2NoZWR1bGVNZXRob2RzIiwidGlja3NVbnRpbFRpbWUiLCJfZ2V0VGlja3NVbnRpbEV2ZW50IiwiVGlja1NpZ25hbCIsInByZXZFdmVudCIsInNlZ21lbnRzIiwicmFtcFZhbCIsInNlZ21lbnREdXIiLCJ2YWwwIiwidmFsMSIsInNhbXBsZVRpbWUiLCJnZXRUaWNrc0F0VGltZSIsImdldER1cmF0aW9uT2ZUaWNrcyIsImN1cnJlbnRUaWNrIiwiZ2V0VGltZU9mVGljayIsInRpY2siLCJkZWx0YSIsInNxcnQiLCJzb2wxIiwidGlja3NUb1RpbWUiLCJ3aGVuIiwidGltZVRvVGlja3MiLCJzdGFydFRpY2tzIiwiZW5kVGlja3MiLCJUaW1lbGluZVN0YXRlIiwiaW5pdGlhbCIsIl9pbml0aWFsIiwic2V0U3RhdGVBdFRpbWUiLCJnZXRMYXN0U3RhdGUiLCJnZXROZXh0U3RhdGUiLCJUaWNrU291cmNlIiwiX3N0YXRlIiwiX3RpY2tPZmZzZXQiLCJzZXRUaWNrc0F0VGltZSIsInBhdXNlIiwic3RvcEV2ZW50IiwidG1wRXZlbnQiLCJsYXN0U3RhdGUiLCJlbGFwc2VkVGlja3MiLCJwZXJpb2RTdGFydFRpbWUiLCJvZmZzZXRFdmVudCIsImdldFNlY29uZHNBdFRpbWUiLCJlbGFwc2VkU2Vjb25kcyIsImdldFN0YXRlQXRUaW1lIiwiYWJzb2x1dGVUaWNrcyIsImZvckVhY2hUaWNrQmV0d2VlbiIsImxhc3RTdGF0ZUV2ZW50IiwibmV4dFRpY2tUaW1lIiwiQ2xvY2siLCJfbmV4dFRpY2siLCJfdGlja1NvdXJjZSIsIl9sYXN0VXBkYXRlIiwiX2JvdW5kTG9vcCIsIl9sb29wIiwiSW50ZXJ2YWxUaW1lbGluZSIsIl9yb290IiwiX2xlbmd0aCIsIkludGVydmFsTm9kZSIsImluc2VydCIsInVwZGF0ZUhlaWdodCIsInVwZGF0ZU1heCIsIl9yZWJhbGFuY2UiLCJyZXN1bHRzIiwic2VhcmNoIiwiX3JlbW92ZU5vZGUiLCJfc2V0Um9vdCIsIl9yZXBsYWNlTm9kZUluUGFyZW50IiwicmVwbGFjZW1lbnQiLCJpc0xlZnRDaGlsZCIsImxlZnQiLCJyaWdodCIsInRlbXAiLCJnZXRCYWxhbmNlIiwiX3JvdGF0ZUxlZnQiLCJwaXZvdE5vZGUiLCJfcm90YXRlUmlnaHQiLCJiYWxhbmNlIiwiYWxsTm9kZXMiLCJ0cmF2ZXJzZSIsInNlYXJjaEFmdGVyIiwiX2xlZnQiLCJfcmlnaHQiLCJoZWlnaHQiLCJwb2ludCIsIlRyYW5zcG9ydEV2ZW50IiwiX2V2ZW50SWQiLCJfb25jZSIsImludm9rZSIsImNsZWFyIiwiVHJhbnNwb3J0UmVwZWF0RXZlbnQiLCJfaW50ZXJ2YWwiLCJfY3VycmVudElkIiwiX25leHRJZCIsIl9ib3VuZFJlc3RhcnQiLCJfcmVzdGFydCIsIl9jcmVhdGVFdmVudHMiLCJzY2hlZHVsZU9uY2UiLCJfYm91bmRDcmVhdGVFdmVudHMiLCJfbG9vcFN0YXJ0IiwiX2xvb3BFbmQiLCJfcHBxIiwiVHJhbnNwb3J0Q29uc3RydWN0b3IiLCJfY2xvY2siLCJfcHJvY2Vzc1RpY2siLCJfYmluZENsb2NrRXZlbnRzIiwiX3RpbWVTaWduYXR1cmUiLCJfc2NoZWR1bGVkRXZlbnRzIiwiX3JlcGVhdGVkRXZlbnRzIiwiX3N5bmNlZFNpZ25hbHMiLCJfc3dpbmdUaWNrcyIsIl9zd2luZ0Ftb3VudCIsInN3aW5nIiwic3dpbmdTdWJkaXZpc2lvbiIsImxvb3BTdGFydCIsImxvb3BFbmQiLCJ0aWNrVGltZSIsInByb2dyZXNzIiwiYW1vdW50Iiwic2NoZWR1bGUiLCJfYWRkRXZlbnQiLCJzY2hlZHVsZVJlcGVhdCIsImV2ZW50SWQiLCJpdGVtIiwidGltZWxpbmUiLCJ0b2dnbGUiLCJ0aW1lU2lnIiwic3RhcnRQb3NpdGlvbiIsImVuZFBvc2l0aW9uIiwic2V0TG9vcFBvaW50cyIsInBwcSIsInJlbWFpbmluZ1RpY2tzIiwic3luY1NpZ25hbCIsInJhdGlvU2lnbmFsIiwidW5zeW5jU2lnbmFsIiwic3luY2VkU2lnbmFsIiwiVm9sdW1lIiwidm9sdW1lIiwiX3VubXV0ZWRWb2x1bWUiLCJtdXRlIiwiTWFzdGVyIiwiX3ZvbHVtZSIsInRvTWFzdGVyIiwiTWFzdGVyQ29uc3RydWN0b3IiLCJTb3VyY2UiLCJfc3luY2VkIiwiX3NjaGVkdWxlZCIsIl9zdGFydCIsInJlc3RhcnQiLCJfc3RvcCIsInNjaGVkIiwiX3N5bmNlZFN0YXJ0Iiwic3luYyIsInN0YXRlRXZlbnQiLCJzdGFydE9mZnNldCIsIl9zeW5jZWRTdG9wIiwidW5zeW5jIiwiQXVkaW9CdWZmZXIiLCJjb3B5VG9DaGFubmVsIiwic3JjIiwiY2hhbk51bSIsImNoYW5uZWwiLCJjb3B5RnJvbUNoYW5uZWwiLCJkZXN0IiwiQnVmZmVyIiwiX3JldmVyc2VkIiwiX3hociIsIl9vbmxvYWQiLCJ1cmwiLCJvbmxvYWQiLCJsb2FkZWQiLCJsb2FkIiwiY2F0Y2giLCJvbmVycm9yIiwiYnVmZiIsImVyciIsIl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZSIsImFib3J0IiwibnVtYmVyT2ZDaGFubmVscyIsImZyb21BcnJheSIsImlzTXVsdGlkaW1lbnNpb25hbCIsInRvTW9ubyIsInRvQXJyYXkiLCJvdXRwdXRBcnJheSIsIm51bUNoYW5uZWxzIiwiY2hhbm5lbEFycmF5Iiwic2FtcGxlIiwic3RhcnRTYW1wbGVzIiwiZW5kU2FtcGxlcyIsIl9yZXZlcnNlIiwicmV2IiwiX2Rvd25sb2FkUXVldWUiLCJiYXNlVXJsIiwiZnJvbVVybCIsInJlcXVlc3QiLCJtYXRjaGVzIiwiZXh0ZW5zaW9ucyIsImV4dGVuc2lvbiIsInN1cHBvcnRzVHlwZSIsInJlcGxhY2UiLCJvbkVycm9yIiwib25Qcm9ncmVzcyIsInRvdGFsUHJvZ3Jlc3MiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJyZXNwb25zZVR5cGUiLCJhZGRFdmVudExpc3RlbmVyIiwic3RhdHVzIiwicmVzcG9uc2UiLCJsZW5ndGhDb21wdXRhYmxlIiwic2VuZCIsImNhbmNlbERvd25sb2FkcyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNhblBsYXlUeXBlIiwicmVtb3ZlRXZlbnRzIiwiZmFpbCIsIk9zY2lsbGF0b3JOb2RlIiwib25lbmRlZCIsIl9zdGFydFRpbWUiLCJfc3RvcFRpbWUiLCJfb3NjaWxsYXRvciIsImNyZWF0ZU9zY2lsbGF0b3IiLCJfZ2FpbiIsInNldFBlcmlvZGljV2F2ZSIsInBlcmlvZGljV2F2ZSIsImNhbmNlbFN0b3AiLCJPc2NpbGxhdG9yIiwiX3dhdmUiLCJfcGFydGlhbHMiLCJwYXJ0aWFscyIsIl9waGFzZSIsInBoYXNlIiwiU2luZSIsIlRyaWFuZ2xlIiwiU2F3dG9vdGgiLCJTcXVhcmUiLCJDdXN0b20iLCJzeW5jRnJlcXVlbmN5IiwidW5zeW5jRnJlcXVlbmN5IiwiaXNCYXNpY1R5cGUiLCJjb2VmcyIsIl9nZXRSZWFsSW1hZ2luYXJ5IiwiY3JlYXRlUGVyaW9kaWNXYXZlIiwicGVyaW9kaWNXYXZlU2l6ZSIsInJlYWwiLCJpbWFnIiwicGFydGlhbENvdW50IiwicGFydGlhbCIsImV4ZWMiLCJfaW52ZXJzZUZGVCIsInN1bSIsIl9nZXRJbml0aWFsVmFsdWUiLCJ0d29QaSIsIkF1ZGlvVG9HYWluIiwiX25vcm0iLCJ4IiwiWmVybyIsIkxGTyIsImFtcGxpdHVkZSIsIl9zdG9wcGVkU2lnbmFsIiwiX3plcm9zIiwiX3N0b3BwZWRWYWx1ZSIsIl9hMmciLCJfc2NhbGVyIiwiY3VycmVudE1pbiIsImN1cnJlbnRNYXgiLCJMaW1pdGVyIiwiTG93cGFzc0NvbWJGaWx0ZXIiLCJfbG93cGFzcyIsImRhbXBlbmluZyIsIk1lcmdlIiwiX21lcmdlciIsImNyZWF0ZUNoYW5uZWxNZXJnZXIiLCJNZXRlciIsImdldExldmVsIiwiU3BsaXQiLCJfc3BsaXR0ZXIiLCJjcmVhdGVDaGFubmVsU3BsaXR0ZXIiLCJNaWRTaWRlU3BsaXQiLCJfc3BsaXQiLCJfbWlkQWRkIiwiU1FSVDFfMiIsIl9zaWRlU3VidHJhY3QiLCJzaWRlIiwiTWlkU2lkZU1lcmdlIiwiX3RpbWVzVHdvTGVmdCIsIl90aW1lc1R3b1JpZ2h0IiwiX21lcmdlIiwiTWlkU2lkZUNvbXByZXNzb3IiLCJfbWlkU2lkZVNwbGl0IiwiX21pZFNpZGVNZXJnZSIsIk1vbm8iLCJNdWx0aWJhbmRDb21wcmVzc29yIiwiU3RlcmVvUGFubmVyTm9kZSIsInBhbiIsInJpZ2h0V2F2ZVNoYXBlciIsImxlZnRXYXZlU2hhcGVyIiwibGVmdEdhaW4iLCJyaWdodEdhaW4iLCJtZXJnZSIsImNyZWF0ZVN0ZXJlb1Bhbm5lciIsIlBhbm5lciIsImluaXRpYWxQYW4iLCJfcGFubmVyIiwiUGFubmVyM0QiLCJjcmVhdGVQYW5uZXIiLCJwYW5uaW5nTW9kZWwiLCJtYXhEaXN0YW5jZSIsImRpc3RhbmNlTW9kZWwiLCJjb25lT3V0ZXJHYWluIiwiY29uZU91dGVyQW5nbGUiLCJjb25lSW5uZXJBbmdsZSIsInJlZkRpc3RhbmNlIiwicm9sbG9mZkZhY3RvciIsIl9vcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uWCIsIm9yaWVudGF0aW9uWSIsIm9yaWVudGF0aW9uWiIsIl9wb3NpdGlvbiIsInBvc2l0aW9uWCIsInBvc2l0aW9uWSIsInBvc2l0aW9uWiIsIl9yYW1wVGltZUNvbnN0YW50Iiwic2V0UG9zaXRpb24iLCJ5IiwieiIsInNldE9yaWVudGF0aW9uIiwicG9zIiwiX2FsaWFzUHJvcGVydHkiLCJQYW5Wb2wiLCJTb2xvIiwiX3NvbG9CaW5kIiwiX3NvbG9lZCIsInNvbG8iLCJfaXNTb2xvZWQiLCJfYWRkU29sbyIsIl9yZW1vdmVTb2xvIiwiX2N1cnJlbnRTb2xvIiwiX25vU29sb3MiLCJDdHJsSW50ZXJwb2xhdGUiLCJsb3dlclBvc2l0aW9uIiwibG93ZXIiLCJ1cHBlciIsIl9pbnRlcnBvbGF0ZSIsInJldEFycmF5IiwicmV0T2JqIiwiX3RvTnVtYmVyIiwiQ3RybE1hcmtvdiIsIm5leHQiLCJkaXN0cmlidXRpb24iLCJfZ2V0UHJvYkRpc3RyaWJ1dGlvbiIsInJhbmQiLCJyYW5kb20iLCJkaXN0IiwiY2hvc2VuIiwibmVlZHNOb3JtYWxpemluZyIsIm9wdGlvbiIsInByb2JhYmlsaXR5IiwiQ3RybFBhdHRlcm4iLCJfc2h1ZmZsZWQiLCJfZGlyZWN0aW9uIiwiVXAiLCJEb3duIiwiVXBEb3duIiwiRG93blVwIiwiQWx0ZXJuYXRlVXAiLCJBbHRlcm5hdGVEb3duIiwiUmFuZG9tIiwiUmFuZG9tV2FsayIsIlJhbmRvbU9uY2UiLCJfc2h1ZmZsZVZhbHVlcyIsImNvcHkiLCJyYW5kVmFsIiwiQ3RybFJhbmRvbSIsImludGVnZXIiLCJCdWZmZXJzIiwidXJscyIsIl9idWZmZXJzIiwiX2xvYWRpbmdDb3VudCIsIl9idWZmZXJMb2FkZWQiLCJoYXMiLCJpc0xvYWRlZCIsImJ1ZmZOYW1lIiwiQnVzZXMiLCJjaGFubmVsTmFtZSIsInNlbmRLbm9iIiwicmVjZWl2ZSIsIkRyYXciLCJleHBpcmF0aW9uIiwiYW50aWNpcGF0aW9uIiwiX2JvdW5kRHJhd0xvb3AiLCJfZHJhd0xvb3AiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJMaXN0ZW5lciIsIkxpc3RlbmVyQ29uc3RydWN0b3IiLCJmb3J3YXJkWCIsImZvcndhcmRZIiwiZm9yd2FyZFoiLCJ1cFgiLCJ1cFkiLCJ1cFoiLCJsaXN0ZW5lciIsIm9yaWdpbmFsQ29udGV4dCIsInJlbmRlclJldCIsImF0dGVtcHRSZW5kZXIiLCJ0cmllcyIsIkVmZmVjdCIsIl9kcnlXZXQiLCJ3ZXQiLCJlZmZlY3RTZW5kIiwiZWZmZWN0UmV0dXJuIiwiY29ubmVjdEVmZmVjdCIsImVmZmVjdCIsIkF1dG9GaWx0ZXIiLCJfbGZvIiwiZGVwdGgiLCJkZWxheSIsIm9jdCIsIkF1dG9QYW5uZXIiLCJBdXRvV2FoIiwiZm9sbG93ZXIiLCJfc3dlZXBSYW5nZSIsIl9iYXNlRnJlcXVlbmN5IiwiX2lucHV0Qm9vc3QiLCJfYmFuZHBhc3MiLCJfcGVha2luZyIsIl9zZXRTd2VlcFJhbmdlIiwic2Vuc2l0aXZpdHkiLCJiYXNlRnJlcSIsInNlbnNpdGl2eSIsIk1vZHVsbyIsIm1vZHVsdXMiLCJfc3VidHJhY3QiLCJfbW9kU2lnbmFsIiwiX3NldFdhdmVTaGFwZXIiLCJtb2QiLCJCaXRDcnVzaGVyIiwiaW52U3RlcFNpemUiLCJiaXRzIiwiX21vZHVsbyIsIl9iaXRzIiwiQ2hlYnlzaGV2IiwiX29yZGVyIiwib3JkZXIiLCJfZ2V0Q29lZmZpY2llbnQiLCJkZWdyZWUiLCJtZW1vIiwiU3RlcmVvRWZmZWN0IiwiZWZmZWN0U2VuZEwiLCJlZmZlY3RTZW5kUiIsImVmZmVjdFJldHVybkwiLCJlZmZlY3RSZXR1cm5SIiwiQ2hvcnVzIiwiX2RlcHRoIiwiX2RlbGF5VGltZSIsIl9sZm9MIiwiX2xmb1IiLCJfZGVsYXlOb2RlTCIsIl9kZWxheU5vZGVSIiwic3ByZWFkIiwiZGV2aWF0aW9uIiwiQ29udm9sdmVyIiwiX2NvbnZvbHZlciIsImNyZWF0ZUNvbnZvbHZlciIsIkRpc3RvcnRpb24iLCJfZGlzdG9ydGlvbiIsImRpc3RvcnRpb24iLCJkZWciLCJGZWVkYmFja0VmZmVjdCIsIl9mZWVkYmFja0dhaW4iLCJmZWVkYmFjayIsIkZlZWRiYWNrRGVsYXkiLCJjb21iRmlsdGVyVHVuaW5ncyIsImFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcyIsIkZyZWV2ZXJiIiwicm9vbVNpemUiLCJfY29tYkZpbHRlcnMiLCJfYWxscGFzc0ZpbHRlcnNMIiwiX2FsbHBhc3NGaWx0ZXJzUiIsImFsbHBhc3NMIiwiYWxscGFzc1IiLCJsZnBmIiwiYWwiLCJhciIsImNmIiwiY29tYkZpbHRlckRlbGF5VGltZXMiLCJjb21iRmlsdGVyUmVzb25hbmNlcyIsImFsbHBhc3NGaWx0ZXJGcmVxcyIsIkpDUmV2ZXJiIiwiX3NjYWxlUm9vbVNpemUiLCJfYWxscGFzc0ZpbHRlcnMiLCJfZmVlZGJhY2tDb21iRmlsdGVycyIsImFmIiwiYWxscGFzcyIsImZiY2YiLCJhcGYiLCJNaWRTaWRlRWZmZWN0IiwibWlkU2VuZCIsInNpZGVTZW5kIiwibWlkUmV0dXJuIiwic2lkZVJldHVybiIsIlBoYXNlciIsIl9maWx0ZXJzTCIsIl9tYWtlRmlsdGVycyIsInN0YWdlcyIsIl9maWx0ZXJzUiIsImNvbm5lY3RUb0ZyZXEiLCJmaWx0ZXJzIiwiU3RlcmVvWEZlZWRiYWNrRWZmZWN0IiwiX2ZlZWRiYWNrTFIiLCJfZmVlZGJhY2tSTCIsIlBpbmdQb25nRGVsYXkiLCJfbGVmdERlbGF5IiwibWF4RGVsYXlUaW1lIiwiX3JpZ2h0RGVsYXkiLCJfcmlnaHRQcmVEZWxheSIsIlBpdGNoU2hpZnQiLCJfZnJlcXVlbmN5IiwiX2RlbGF5QSIsIl9sZm9BIiwiX2RlbGF5QiIsIl9sZm9CIiwiX2Nyb3NzRmFkZSIsIl9jcm9zc0ZhZGVMRk8iLCJfZmVlZGJhY2tEZWxheSIsIl9waXRjaCIsIl93aW5kb3dTaXplIiwid2luZG93U2l6ZSIsImZhY3RvciIsIkJ1ZmZlclNvdXJjZSIsIl9zb3VyY2VTdG9wcGVkIiwiX3NvdXJjZSIsIl9vbmVuZGVkIiwicGxheWJhY2tSYXRlIiwiZmFkZUluIiwiZmFkZU91dCIsIl9vbmVuZGVkVGltZW91dCIsImZhZGVJblRpbWUiLCJjb21wdXRlZER1ciIsImZhZGVPdXRUaW1lIiwiaGVsZER1cmF0aW9uIiwic3RhcnRGYWRlIiwiYWRkaXRpb25hbFRhaWwiLCJOb2lzZSIsIl9wbGF5YmFja1JhdGUiLCJfbm9pc2VCdWZmZXJzIiwicmF0ZSIsIl9ub2lzZUFycmF5cyIsInBpbmsiLCJjaGFubmVsTnVtIiwiYjAiLCJiMSIsImIyIiwiYjMiLCJiNCIsImI1IiwiYjYiLCJ3aGl0ZSIsImJyb3duIiwibGFzdE91dCIsImNyZWF0ZUJ1ZmZlcnMiLCJSZXZlcmIiLCJwcmVEZWxheSIsImdlbmVyYXRlIiwibm9pc2VMIiwibm9pc2VSIiwiU3RlcmVvRmVlZGJhY2tFZmZlY3QiLCJfZmVlZGJhY2tMIiwiX2ZlZWRiYWNrUiIsIlN0ZXJlb1dpZGVuZXIiLCJ3aWR0aCIsIl90d29UaW1lc1dpZHRoTWlkIiwiX3R3b1RpbWVzV2lkdGhTaWRlIiwiX21pZE11bHQiLCJfb25lTWludXNXaWR0aCIsIl9zaWRlTXVsdCIsIlRyZW1vbG8iLCJfYW1wbGl0dWRlTCIsIl9hbXBsaXR1ZGVSIiwiVmlicmF0byIsIkV2ZW50IiwiX3N0YXJ0T2Zmc2V0IiwiX3Byb2JhYmlsaXR5IiwiX2h1bWFuaXplIiwiaHVtYW5pemUiLCJfcmVzY2hlZHVsZUV2ZW50cyIsInN0YXJ0VGljayIsIl9nZXRMb29wRHVyYXRpb24iLCJfdGljayIsInByb2IiLCJ2YXJpYXRpb24iLCJyZXNjaGVkdWxUaW1lIiwibGFzdEV2ZW50IiwibG9vcER1cmF0aW9uIiwiTG9vcCIsIl9ldmVudCIsIml0ZXJhdGlvbnMiLCJpdGVycyIsIlBhcnQiLCJfZm9yRWFjaCIsIl9zdGFydE5vdGUiLCJhdCIsIl9yZXN0YXJ0RXZlbnQiLCJyZW1vdmVBbGwiLCJfc2V0QWxsIiwiX3Rlc3RMb29wQm91bmRyaWVzIiwiUGF0dGVybiIsIl9wYXR0ZXJuIiwicGF0dGVybiIsInZhbHMiLCJTZXF1ZW5jZSIsIl9zdWJkaXZpc2lvbiIsIl9pbmRleFRpbWUiLCJzdWJTdWJkaXZpc2lvbiIsIlB1bHNlT3NjaWxsYXRvciIsIl93aWR0aEdhdGUiLCJfc2F3dG9vdGgiLCJQV01Pc2NpbGxhdG9yIiwiX3B1bHNlIiwibW9kdWxhdGlvbkZyZXF1ZW5jeSIsIl9tb2R1bGF0b3IiLCJGTU9zY2lsbGF0b3IiLCJfY2FycmllciIsIm1vZHVsYXRpb25JbmRleCIsIm1vZHVsYXRpb25UeXBlIiwiaGFybW9uaWNpdHkiLCJfbW9kdWxhdGlvbk5vZGUiLCJBTU9zY2lsbGF0b3IiLCJfbW9kdWxhdGlvblNjYWxlIiwiRmF0T3NjaWxsYXRvciIsIl9vc2NpbGxhdG9ycyIsIl9zcHJlYWQiLCJvc2MiLCJpdGVyYXRvciIsIk9tbmlPc2NpbGxhdG9yIiwiX3NvdXJjZVR5cGUiLCJPbW5pT3NjVHlwZSIsInByZWZpeCIsInN1YnN0ciIsIl9jcmVhdGVOZXdPc2NpbGxhdG9yIiwib3NjVHlwZSIsIk9zY2lsbGF0b3JDb25zdHJ1Y3RvciIsIm9sZE9zYyIsIm1UeXBlIiwiSW5zdHJ1bWVudCIsIl9zeW5jTWV0aG9kIiwidGltZVBvc2l0aW9uIiwib3JpZ2luYWxNZXRob2QiLCJfb3JpZ2luYWxfdHJpZ2dlckF0dGFjayIsIl9vcmlnaW5hbF90cmlnZ2VyUmVsZWFzZSIsIk1vbm9waG9uaWMiLCJwb3J0YW1lbnRvIiwiX3RyaWdnZXJFbnZlbG9wZUF0dGFjayIsInNldE5vdGUiLCJfdHJpZ2dlckVudmVsb3BlUmVsZWFzZSIsImdldExldmVsQXRUaW1lIiwiZW52ZWxvcGUiLCJwb3J0VGltZSIsIlN5bnRoIiwib3NjaWxsYXRvciIsIkFNU3ludGgiLCJtb2R1bGF0aW9uIiwibW9kdWxhdGlvbkVudmVsb3BlIiwiTW9ub1N5bnRoIiwiZmlsdGVyRW52ZWxvcGUiLCJEdW9TeW50aCIsInZvaWNlMCIsInZvaWNlMSIsIl92aWJyYXRvIiwidmlicmF0b1JhdGUiLCJfdmlicmF0b0dhaW4iLCJ2aWJyYXRvQW1vdW50IiwiRk1TeW50aCIsImNhcnJpZXIiLCJtb2R1bGF0b3IiLCJNZW1icmFuZVN5bnRoIiwicGl0Y2hEZWNheSIsIm1heE5vdGUiLCJpbmhhcm1SYXRpb3MiLCJNZXRhbFN5bnRoIiwiX2ZyZXFNdWx0aXBsaWVycyIsIl9hbXBsaXR1ZSIsIl9oaWdocGFzcyIsIl9maWx0ZXJGcmVxU2NhbGVyIiwibXVsdCIsInZlbCIsIm9jdHMiLCJOb2lzZVN5bnRoIiwibm9pc2UiLCJQbHVja1N5bnRoIiwiX25vaXNlIiwiYXR0YWNrTm9pc2UiLCJfbGZjZiIsImRlbGF5QW1vdW50IiwiUG9seVN5bnRoIiwicG9seXBob255IiwiTUFYX1BPTFlQSE9OWSIsInZvaWNlcyIsIl90cmlnZ2VycyIsInYiLCJ2b2ljZSIsIm5vdGVzIiwib2xkZXN0IiwiSlNPTiIsInN0cmluZ2lmeSIsInN0cmluZ2lmaWVkIiwiZGVzYyIsInJlbGVhc2VBbGwiLCJTYW1wbGVyIiwidXJsTWFwIiwiaXNOYU4iLCJfYWN0aXZlU291cmNlcyIsIl9maW5kQ2xvc2VzdCIsImRpZmZlcmVuY2UiLCJjbG9zZXN0Tm90ZSIsInNvdXJjZSIsInNvdXJjZXMiLCJzZXRXYXZlVGFibGUiLCJjcmVhdGVXYXZlVGFibGUiLCJHYWluVG9BdWRpbyIsIk5vcm1hbGl6ZSIsImlucHV0TWluIiwiaW5wdXRNYXgiLCJfaW5wdXRNaW4iLCJfaW5wdXRNYXgiLCJfZGl2IiwiVHJhbnNwb3J0VGltZWxpbmVTaWduYWwiLCJfb3V0cHV0U2lnIiwiX2xhc3RWYWwiLCJfb25UaWNrIiwiX2JpbmRBbmNob3JWYWx1ZSIsIl9hbmNob3JWYWx1ZSIsIl9zeW5jZWRDYWxsYmFjayIsIkdyYWluUGxheWVyIiwiZ3JhaW5TaXplIiwiX2dyYWluU2l6ZSIsIl9vdmVybGFwIiwib3ZlcmxhcCIsIl9vbnN0b3AiLCJfb2Zmc2V0Iiwic2VlayIsIlBsYXllciIsImF1dG9zdGFydCIsIl9lbGFwc2VkVGltZSIsInJldHJpZ2dlciIsIl9vblNvdXJjZUVuZCIsImNvbXB1dGVkRHVyYXRpb24iLCJfc3RvcEF0TmV4dEl0ZXJhdGlvbiIsIm5leHRTdG9wIiwicG9zaXRpb24iLCJzdG9wVGltZSIsIlBsYXllcnMiLCJfcGxheWVycyIsIl9mYWRlSW4iLCJfZmFkZU91dCIsInBsYXllciIsInBsYXlpbmciLCJwbGF5ZXJOYW1lIiwic3RvcEFsbCIsIlVzZXJNZWRpYSIsIl9tZWRpYVN0cmVhbSIsIl9zdHJlYW0iLCJfZGV2aWNlIiwibGFiZWxPcklkIiwiZW51bWVyYXRlRGV2aWNlcyIsImRldmljZXMiLCJkZXZpY2UiLCJmaW5kIiwibGFiZWwiLCJkZXZpY2VJZCIsImNvbnN0cmFpbnRzIiwiYXVkaW8iLCJlY2hvQ2FuY2VsbGF0aW9uIiwibWVkaWFEZXZpY2VzIiwiZ2V0VXNlck1lZGlhIiwic3RyZWFtIiwiY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UiLCJnZXRBdWRpb1RyYWNrcyIsInRyYWNrIiwia2luZCIsImFjdGl2ZSIsImdyb3VwSWQiLCJNaWRpIiwiZmFjdG9yeSIsImdsb2JhbCIsInJlcXVpcmUiLCJoIiwiY29kZSIsIjEiLCJjaGFyQ29kZUF0IiwidG9CeXRlQXJyYXkiLCJmcm9tQnl0ZUFycmF5IiwiYmFzZTY0anMiLCIyIiwiMyIsIlRZUEVEX0FSUkFZX1NVUFBPUlQiLCJ3cml0ZSIsImlzQnVmZmVyIiwiWSIsIkFycmF5QnVmZmVyIiwiYnl0ZUxlbmd0aCIsIl9hdWdtZW50IiwiZGF0YSIsIl9fcHJvdG9fXyIsIl9pc0J1ZmZlciIsInBvb2xTaXplIiwiWiIsIlIiLCJVIiwidSIsIk51bWJlciIsIlYiLCJ3IiwiUyIsIlQiLCJBIiwiVyIsIiQiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIlgiLCJOIiwiUCIsImFhIiwiTyIsIlNsb3dCdWZmZXIiLCJJTlNQRUNUX01BWF9CWVRFUyIsImZvbyIsInN1YmFycmF5IiwiY29tcGFyZSIsImlzRW5jb2RpbmciLCJlcXVhbHMiLCJpbnNwZWN0IiwicmVhZFVJbnQ4Iiwid3JpdGVVSW50OCIsInRvSlNPTiIsIl9hcnIiLCJyZWFkVUludExFIiwicmVhZFVJbnRCRSIsInJlYWRVSW50MTZMRSIsInJlYWRVSW50MTZCRSIsInJlYWRVSW50MzJMRSIsInJlYWRVSW50MzJCRSIsInJlYWRJbnRMRSIsInJlYWRJbnRCRSIsInJlYWRJbnQ4IiwicmVhZEludDE2TEUiLCJyZWFkSW50MTZCRSIsInJlYWRJbnQzMkxFIiwicmVhZEludDMyQkUiLCJyZWFkRmxvYXRMRSIsInJlYWQiLCJyZWFkRmxvYXRCRSIsInJlYWREb3VibGVMRSIsInJlYWREb3VibGVCRSIsIndyaXRlVUludExFIiwid3JpdGVVSW50QkUiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVVSW50MTZCRSIsIndyaXRlVUludDMyTEUiLCJ3cml0ZVVJbnQzMkJFIiwid3JpdGVJbnRMRSIsIndyaXRlSW50QkUiLCJ3cml0ZUludDgiLCJ3cml0ZUludDE2TEUiLCJ3cml0ZUludDE2QkUiLCJ3cml0ZUludDMyTEUiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZUZsb2F0TEUiLCJ3cml0ZUZsb2F0QkUiLCJ3cml0ZURvdWJsZUxFIiwid3JpdGVEb3VibGVCRSIsIl9zZXQiLCJmaWxsIiwidG9BcnJheUJ1ZmZlciIsIl8iLCJ0b0xvY2FsZVN0cmluZyIsInNlbGYiLCJiYXNlNjQtanMiLCJpZWVlNzU0IiwiaXNhcnJheSIsIjQiLCJFUzZQcm9taXNlIiwiY2EiLCJlYSIsIl9yZXN1bHQiLCJpYSIsImdhIiwiaGEiLCJfbGFiZWwiLCJfb25lcnJvciIsImZhIiwiX3N1YnNjcmliZXJzIiwiamEiLCJrYSIsIl9pbnN0YW5jZUNvbnN0cnVjdG9yIiwicHJvbWlzZSIsIl9yZW1haW5pbmciLCJfZW51bWVyYXRlIiwiZGEiLCJNdXRhdGlvbk9ic2VydmVyIiwiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIsImJhIiwiVWludDhDbGFtcGVkQXJyYXkiLCJpbXBvcnRTY3JpcHRzIiwiTWVzc2FnZUNoYW5uZWwiLCJuZXh0VGljayIsImNyZWF0ZVRleHROb2RlIiwib2JzZXJ2ZSIsImNoYXJhY3RlckRhdGEiLCJwb3J0MSIsInBvcnQyIiwicnVuT25Mb29wIiwicnVuT25Db250ZXh0Iiwic3Vic3RyaW5nIiwiX2VhY2hFbnRyeSIsIl9zZXR0bGVkQXQiLCJfd2lsbFNldHRsZUF0IiwiYWxsIiwicmFjZSIsInJlamVjdCIsIl9zZXRTY2hlZHVsZXIiLCJfc2V0QXNhcCIsIl9hc2FwIiwicG9seWZpbGwiLCJGdW5jdGlvbiIsImNhc3QiLCJfcHJvY2VzcyIsIjUiLCJmZXRjaEpzb25wIiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInJlbW92ZUNoaWxkIiwianNvbnBDYWxsYmFjayIsImpzb25wQ2FsbGJhY2tGdW5jdGlvbiIsIkRhdGUiLCJvayIsImpzb24iLCJzZXRBdHRyaWJ1dGUiLCJjaGFyc2V0IiwiYXBwZW5kQ2hpbGQiLCI2IiwiY3JlYXRlRWxlbWVudE5TIiwiSFRNTEVsZW1lbnQiLCJzYWZhcmkiLCJzZXRJbW1lZGlhdGUiLCJyZXZva2VPYmplY3RVUkwiLCJyZWFkeVN0YXRlIiwiSU5JVCIsImhyZWYiLCJkb3dubG9hZCIsIk1vdXNlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiRE9ORSIsIkZpbGVSZWFkZXIiLCJvbmxvYWRlbmQiLCJyZXN1bHQiLCJsb2NhdGlvbiIsInJlYWRBc0RhdGFVUkwiLCJtc1NhdmVPck9wZW5CbG9iIiwiV1JJVElORyIsIm9ud3JpdGVzdGFydCIsIm9ucHJvZ3Jlc3MiLCJvbndyaXRlIiwib25hYm9ydCIsIm9ud3JpdGVlbmQiLCJjb250ZW50Iiwic2F2ZUFzIiwiNyIsIk5hTiIsIkxOMiIsIjgiLCI5Iiwib2EiLCJuYSIsIm1hIiwibGEiLCJxYSIsInJhIiwic29ydCIsInBhIiwibGlidGVzcyIsIkdsdVRlc3NlbGF0b3IiLCJ3aW5kaW5nUnVsZSIsIkdMVV9URVNTX1dJTkRJTkdfT0REIiwiR0xVX1RFU1NfV0lORElOR19OT05aRVJPIiwiR0xVX1RFU1NfV0lORElOR19QT1NJVElWRSIsIkdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkUiLCJHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFfVFdPIiwicHJpbWl0aXZlVHlwZSIsIkdMX0xJTkVfTE9PUCIsIkdMX1RSSUFOR0xFUyIsIkdMX1RSSUFOR0xFX1NUUklQIiwiR0xfVFJJQU5HTEVfRkFOIiwiZXJyb3JUeXBlIiwiR0xVX1RFU1NfTUlTU0lOR19CRUdJTl9QT0xZR09OIiwiR0xVX1RFU1NfTUlTU0lOR19FTkRfUE9MWUdPTiIsIkdMVV9URVNTX01JU1NJTkdfQkVHSU5fQ09OVE9VUiIsIkdMVV9URVNTX01JU1NJTkdfRU5EX0NPTlRPVVIiLCJHTFVfVEVTU19DT09SRF9UT09fTEFSR0UiLCJHTFVfVEVTU19ORUVEX0NPTUJJTkVfQ0FMTEJBQ0siLCJnbHVFbnVtIiwiR0xVX1RFU1NfTUVTSCIsIkdMVV9URVNTX1RPTEVSQU5DRSIsIkdMVV9URVNTX1dJTkRJTkdfUlVMRSIsIkdMVV9URVNTX0JPVU5EQVJZX09OTFkiLCJHTFVfSU5WQUxJRF9FTlVNIiwiR0xVX0lOVkFMSURfVkFMVUUiLCJHTFVfVEVTU19CRUdJTiIsIkdMVV9URVNTX1ZFUlRFWCIsIkdMVV9URVNTX0VORCIsIkdMVV9URVNTX0VSUk9SIiwiR0xVX1RFU1NfRURHRV9GTEFHIiwiR0xVX1RFU1NfQ09NQklORSIsIkdMVV9URVNTX0JFR0lOX0RBVEEiLCJHTFVfVEVTU19WRVJURVhfREFUQSIsIkdMVV9URVNTX0VORF9EQVRBIiwiR0xVX1RFU1NfRVJST1JfREFUQSIsIkdMVV9URVNTX0VER0VfRkxBR19EQVRBIiwiR0xVX1RFU1NfQ09NQklORV9EQVRBIiwiZ2x1RGVsZXRlVGVzcyIsImdsdVRlc3NQcm9wZXJ0eSIsImdsdUdldFRlc3NQcm9wZXJ0eSIsImdsdVRlc3NOb3JtYWwiLCJnbHVUZXNzQ2FsbGJhY2siLCJnbHVUZXNzVmVydGV4IiwiZ2x1VGVzc0JlZ2luUG9seWdvbiIsImdsdVRlc3NCZWdpbkNvbnRvdXIiLCJnbHVUZXNzRW5kQ29udG91ciIsImdsdVRlc3NFbmRQb2x5Z29uIiwiMTAiLCJvcGVudHlwZSIsInRhYmxlIiwiVWludDE2QXJyYXkiLCJ0cmFucyIsInNvdXJjZUluZGV4IiwidGFnIiwiYml0Y291bnQiLCJkZXN0TGVuIiwibHRyZWUiLCJkdHJlZSIsInZlIiwidWUiLCJzZSIsInRlIiwia2UiLCJvZSIsInBlIiwicWUiLCJyZSIsImxlIiwieDEiLCJ5MSIsIngyIiwieTIiLCJjb21tYW5kcyIsInN0cm9rZSIsInN0cm9rZVdpZHRoIiwidGFibGVOYW1lIiwiZmllbGRzIiwiZm9ybWF0IiwiZ2x5cGhzIiwieGUiLCJhc3NlcnQiLCJzY3JpcHQiLCJkZWZhdWx0TGFuZ1N5cyIsInJlcUZlYXR1cmVJbmRleCIsImZlYXR1cmVJbmRleGVzIiwibGFuZ1N5c1JlY29yZHMiLCJsYW5nU3lzIiwiZmVhdHVyZSIsImZlYXR1cmVQYXJhbXMiLCJsb29rdXBMaXN0SW5kZXhlcyIsImxvb2t1cFR5cGUiLCJsb29rdXBGbGFnIiwic3VidGFibGVzIiwiZ2V0VWludDgiLCJnZXRVaW50MTYiLCJnZXRVaW50MzIiLCJnZXRJbnQxNiIsInJlbGF0aXZlT2Zmc2V0IiwiZ2x5cGhJbmRleCIsImZvbnQiLCJjbWFwIiwiZW5jb2RpbmciLCJuYW1lcyIsIlFlIiwibnVtYmVyT2ZHbHlwaHMiLCJnbHlwaE5hbWVJbmRleCIsImJpbmRDb25zdHJ1Y3RvclZhbHVlcyIsInBhdGgiLCJjb25maWd1cmFibGUiLCJMZSIsImdldENhcmQxNiIsImdldEJ5dGUiLCJnZXRPZmZzZXQiLCJnZXRCeXRlcyIsIm9iamVjdHMiLCJlbmRPZmZzZXQiLCJwYXJzZUJ5dGUiLCJQYXJzZXIiLCJOZSIsIm9wIiwic2EiLCJUZSIsInRhIiwiVWUiLCJEYXRhVmlldyIsIl9zdWJycyIsIl9zdWJyc0JpYXMiLCJwcml2YXRlIiwiX2RlZmF1bHRXaWR0aFgiLCJkZWZhdWx0V2lkdGhYIiwiX25vbWluYWxXaWR0aFgiLCJub21pbmFsV2lkdGhYIiwic3VicnMiLCJfcHJpdmF0ZURpY3QiLCJ4YSIsImNsb3NlUGF0aCIsIm1vdmVUbyIsImlzQ0lERm9udCIsInRhYmxlcyIsImNmZiIsInRvcERpY3QiLCJfZmRTZWxlY3QiLCJfZmRBcnJheSIsInBvcCIsImxpbmVUbyIsImN1cnZlVG8iLCJnc3VicnNCaWFzIiwiZ3N1YnJzIiwiYWR2YW5jZVdpZHRoIiwiQWEiLCJEYSIsIkVhIiwiSWUiLCJSZWNvcmQiLCJkaWN0IiwiRmEiLCJ0b3BEaWN0cyIsIkphIiwiWGEiLCJZYSIsImRmIiwiZmYiLCJlZiIsIiRhIiwiX2EiLCJtYiIsIm5iIiwib2IiLCJwYiIsIlRhYmxlIiwibnVtVGFibGVzIiwic2VhcmNoUmFuZ2UiLCJlbnRyeVNlbGVjdG9yIiwicmFuZ2VTaGlmdCIsInNpemVPZiIsImFyZ3VtZW50IiwiZW5jb2RlIiwicWIiLCJjaGFyVG9HbHlwaEluZGV4IiwiZ2V0TWV0cmljcyIsInRiIiwidWIiLCJ2YiIsIndiIiwieGIiLCJ5YiIsInpiIiwiQWIiLCJzdWJzdEZvcm1hdCIsIkNiIiwiRGIiLCJFYiIsIkZiIiwicGFyc2VTaG9ydCIsIkdiIiwibnVtYmVyT2ZDb250b3VycyIsIl94TWluIiwiX3lNaW4iLCJfeE1heCIsIl95TWF4IiwiZW5kUG9pbnRJbmRpY2VzIiwicGFyc2VVU2hvcnQiLCJpbnN0cnVjdGlvbkxlbmd0aCIsImluc3RydWN0aW9ucyIsIm9uQ3VydmUiLCJsYXN0UG9pbnRPZkNvbnRvdXIiLCJwb2ludHMiLCJpc0NvbXBvc2l0ZSIsImNvbXBvbmVudHMiLCJ4U2NhbGUiLCJzY2FsZTAxIiwic2NhbGUxMCIsInlTY2FsZSIsImR5IiwibWF0Y2hlZFBvaW50cyIsInBhcnNlQ2hhciIsInBhcnNlRjJEb3QxNCIsIkhiIiwiSmIiLCJJYiIsInF1YWRyYXRpY0N1cnZlVG8iLCJLYiIsImdldFBhdGgiLCJNYiIsImdldENvbW1hbmRzIiwidmYiLCJfZnBnbVN0YXRlIiwiX3ByZXBTdGF0ZSIsIl9lcnJvclN0YXRlIiwiTmIiLCJPYiIsInNpZ24iLCJQYiIsIlFiIiwiUmIiLCJTYiIsIlRiIiwiYXhpcyIsInNsb3BlIiwibm9ybWFsU2xvcGUiLCJmcmVlemUiLCJVYiIsInhmIiwieWYiLCJWYiIsInhvIiwieW8iLCJwcmV2UG9pbnRPbkNvbnRvdXIiLCJuZXh0UG9pbnRPbkNvbnRvdXIiLCJ4VG91Y2hlZCIsInlUb3VjaGVkIiwicHJldmVudEV4dGVuc2lvbnMiLCJXYiIsImVudiIsInN0YWNrIiwicHJvZyIsInpwMCIsInpwMSIsInpwMiIsInJwMCIsInJwMSIsInJwMiIsImZ2IiwicHYiLCJkcHYiLCJYYiIsInRab25lIiwiZ1pvbmUiLCJZYiIsImlwIiwiWmIiLCJERUJVRyIsIiRiIiwiX2IiLCJhYyIsInoyIiwiejEiLCJiYyIsInhjIiwiR2MiLCJ6MCIsImRpc3RhbmNlIiwiemYiLCJzZXRSZWxhdGl2ZSIsInRvdWNoIiwiSGMiLCJ0b3VjaGVkIiwicHJldlRvdWNoZWQiLCJuZXh0VG91Y2hlZCIsImludGVycG9sYXRlIiwiSWMiLCJKYyIsImNvbnRvdXJzIiwiS2MiLCJOYyIsIlFjIiwiY3Z0IiwiY3ZDdXRJbiIsIlhjIiwiWWMiLCJtZCIsInBwZW0iLCJkZWx0YUJhc2UiLCJkZWx0YVNoaWZ0IiwieGQiLCJ6ZCIsIkdkIiwiTmQiLCJPZCIsIlBkIiwibWluRGlzIiwiUWQiLCJlbXB0eSIsImZhbWlseU5hbWUiLCJzdHlsZU5hbWUiLCJ1bml0c1BlckVtIiwiYXNjZW5kZXIiLCJkZXNjZW5kZXIiLCJmb250RmFtaWx5IiwiZW4iLCJmb250U3ViZmFtaWx5IiwiZnVsbE5hbWUiLCJwb3N0U2NyaXB0TmFtZSIsImRlc2lnbmVyIiwiZGVzaWduZXJVUkwiLCJtYW51ZmFjdHVyZXIiLCJtYW51ZmFjdHVyZXJVUkwiLCJsaWNlbnNlIiwibGljZW5zZVVSTCIsImRlc2NyaXB0aW9uIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiY3JlYXRlZFRpbWVzdGFtcCIsIm9zMiIsInVzV2VpZ2h0Q2xhc3MiLCJ3ZWlnaHRDbGFzcyIsInVzV2VpZ2h0Q2xhc3NlcyIsIk1FRElVTSIsInVzV2lkdGhDbGFzcyIsIndpZHRoQ2xhc3MiLCJ1c1dpZHRoQ2xhc3NlcyIsImZzU2VsZWN0aW9uIiwiZnNTZWxlY3Rpb25WYWx1ZXMiLCJSRUdVTEFSIiwiU2UiLCJHbHlwaFNldCIsInN1YnN0aXR1dGlvbiIsIl9oaW50aW5nIiwib3V0bGluZXNGb3JtYXQiLCJSZCIsIlNkIiwiVGQiLCJwYXJzZVRhZyIsInBhcnNlRml4ZWQiLCJza2lwIiwiVWQiLCJjb29yZGluYXRlcyIsIlZkIiwiY2UiLCJyZWFkRmlsZSIsIm1lc3NhZ2UiLCJlZSIsImdldFRhZyIsImdldFVMb25nIiwiY2hlY2tzdW0iLCJjb21wcmVzc2lvbiIsImdlIiwiY29tcHJlc3NlZExlbmd0aCIsIndlIiwiaGUiLCJnZXRVU2hvcnQiLCJmZSIsIk1lIiwicGFyc2UiLCJwYXJzZVNob3J0TGlzdCIsImZwZ20iLCJwYXJzZUJ5dGVMaXN0IiwiaGVhZCIsIldlIiwiaW5kZXhUb0xvY0Zvcm1hdCIsImhoZWEiLCJYZSIsIm51bWJlck9mSE1ldHJpY3MiLCJaZSIsIm1heHAiLCIkZSIsIm51bUdseXBocyIsImpmIiwicG9zdCIsImtmIiwiZ2x5cGhOYW1lcyIsInByZXAiLCJnZiIsIkhmIiwiVmUiLCJZZSIsImdseXBoSW5kZXhNYXAiLCJhZGRVbmljb2RlIiwiY2ZmRW5jb2RpbmciLCJnbHlwaEluZGV4VG9OYW1lIiwia2VybmluZ1BhaXJzIiwiR2YiLCJncG9zIiwiRmYiLCJpbml0IiwiZ3N1YiIsIm9mIiwiZnZhciIsIkNmIiwibWV0YSIsInBmIiwibWV0YXMiLCJjb2RlUG9pbnRBdCIsIm1lIiwibmUiLCJpc0VtcHR5IiwiYWRkUG9pbnQiLCJhZGRYIiwiYWRkWSIsImFkZEJlemllciIsImFkZFF1YWQiLCJiZXppZXJDdXJ2ZVRvIiwicXVhZFRvIiwiZ2V0Qm91bmRpbmdCb3giLCJkcmF3IiwiYmVnaW5QYXRoIiwiZmlsbFN0eWxlIiwic3Ryb2tlU3R5bGUiLCJsaW5lV2lkdGgiLCJ0b1BhdGhEYXRhIiwidG9TVkciLCJ0b0RPTUVsZW1lbnQiLCJ6ZSIsIkFlIiwiQmUiLCJDZSIsIkJZVEUiLCJDSEFSIiwiQ0hBUkFSUkFZIiwiVVNIT1JUIiwiU0hPUlQiLCJVSU5UMjQiLCJVTE9ORyIsIkxPTkciLCJGSVhFRCIsIkZXT1JEIiwiVUZXT1JEIiwiTE9OR0RBVEVUSU1FIiwiVEFHIiwiQ2FyZDgiLCJDYXJkMTYiLCJPZmZTaXplIiwiU0lEIiwiTlVNQkVSIiwiTlVNQkVSMTYiLCJOVU1CRVIzMiIsIlJFQUwiLCJOQU1FIiwiU1RSSU5HIiwiVVRGOCIsIlVURjE2IiwiRGUiLCJ4LW1hYy1jcm9hdGlhbiIsIngtbWFjLWN5cmlsbGljIiwieC1tYWMtZ2FlbGljIiwieC1tYWMtZ3JlZWsiLCJ4LW1hYy1pY2VsYW5kaWMiLCJ4LW1hYy1pbnVpdCIsIngtbWFjLWNlIiwibWFjaW50b3NoIiwieC1tYWMtcm9tYW5pYW4iLCJ4LW1hYy10dXJraXNoIiwiTUFDU1RSSU5HIiwiRWUiLCJGZSIsIldlYWtNYXAiLCJHZSIsIlZBUkRFTFRBUyIsIklOREVYIiwiT0JKRUNUIiwiRElDVCIsIk9QRVJBTkQiLCJPUEVSQVRPUiIsIk9QIiwiSGUiLCJDSEFSU1RSSU5HIiwiVEFCTEUiLCJSRUNPUkQiLCJMSVRFUkFMIiwiQ292ZXJhZ2UiLCJTY3JpcHRMaXN0IiwiRmVhdHVyZUxpc3QiLCJMb29rdXBMaXN0IiwidXNob3J0TGlzdCIsInRhYmxlTGlzdCIsInJlY29yZExpc3QiLCJKZSIsImJ5dGUiLCJ1U2hvcnQiLCJzaG9ydCIsInVMb25nIiwiZml4ZWQiLCJsb25nRGF0ZVRpbWUiLCJnZXRJbnQ4IiwicGFyc2VDYXJkOCIsInBhcnNlQ2FyZDE2IiwicGFyc2VTSUQiLCJwYXJzZU9mZnNldDE2IiwicGFyc2VVTG9uZyIsInBhcnNlT2Zmc2V0MzIiLCJwYXJzZVN0cmluZyIsInBhcnNlTG9uZ0RhdGVUaW1lIiwicGFyc2VWZXJzaW9uIiwicGFyc2VVTG9uZ0xpc3QiLCJwYXJzZU9mZnNldDE2TGlzdCIsInBhcnNlVVNob3J0TGlzdCIsInBhcnNlTGlzdCIsInBhcnNlTGlzdDMyIiwicGFyc2VSZWNvcmRMaXN0IiwicGFyc2VSZWNvcmRMaXN0MzIiLCJwYXJzZVN0cnVjdCIsInBhcnNlVmFsdWVSZWNvcmQiLCJ4UGxhY2VtZW50IiwieVBsYWNlbWVudCIsInhBZHZhbmNlIiwieUFkdmFuY2UiLCJ4UGxhRGV2aWNlIiwieVBsYURldmljZSIsInhBZHZEZXZpY2UiLCJ5QWR2RGV2aWNlIiwicGFyc2VWYWx1ZVJlY29yZExpc3QiLCJwYXJzZVBvaW50ZXIiLCJwYXJzZVBvaW50ZXIzMiIsInBhcnNlTGlzdE9mTGlzdHMiLCJwYXJzZUNvdmVyYWdlIiwicmFuZ2VzIiwicGFyc2VDbGFzc0RlZiIsInN0YXJ0R2x5cGgiLCJjbGFzc2VzIiwiY2xhc3NJZCIsImxpc3QiLCJsaXN0MzIiLCJyZWNvcmRMaXN0MzIiLCJwb2ludGVyIiwicG9pbnRlcjMyIiwib2Zmc2V0MTYiLCJ1U2hvcnRMaXN0Iiwib2Zmc2V0MzIiLCJ1TG9uZ0xpc3QiLCJzdHJ1Y3QiLCJjb3ZlcmFnZSIsImNsYXNzRGVmIiwiS2UiLCJyZXNlcnZlZCIsInBhcnNlU2NyaXB0TGlzdCIsInBhcnNlRmVhdHVyZUxpc3QiLCJwYXJzZUxvb2t1cExpc3QiLCJtYXJrRmlsdGVyaW5nU2V0IiwicGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3QiLCJjb25kaXRpb25TZXRPZmZzZXQiLCJmZWF0dXJlVGFibGVTdWJzdGl0dXRpb25PZmZzZXQiLCJnZXRDYXJkOCIsImdldFNob3J0IiwiZ2V0Rml4ZWQiLCJieXRlc1RvU3RyaW5nIiwibGFuZ3VhZ2UiLCJncm91cENvdW50Iiwic2VnQ291bnQiLCJtYWtlIiwidW5pY29kZSIsInVuaWNvZGVzIiwiZ2x5cGhJZCIsInNlZ0NvdW50WDIiLCJjbWFwNExlbmd0aCIsImNtYXAxMk9mZnNldCIsIk9lIiwiUGUiLCJuYW1lVG9HbHlwaEluZGV4IiwiUmUiLCJsaW5lIiwieE1pbiIsInlNaW4iLCJ4TWF4IiwieU1heCIsImhpbnRpbmciLCJnZXRDb250b3VycyIsImxlZnRTaWRlQmVhcmluZyIsInJpZ2h0U2lkZUJlYXJpbmciLCJkcmF3UG9pbnRzIiwiYXJjIiwiZHJhd01ldHJpY3MiLCJnbHlwaExvYWRlciIsInR0ZkdseXBoTG9hZGVyIiwiY2ZmR2x5cGhMb2FkZXIiLCJmb3JtYXRNYWpvciIsImZvcm1hdE1pbm9yIiwib2Zmc2V0U2l6ZSIsInJvcyIsImZkQXJyYXkiLCJmZFNlbGVjdCIsInlhIiwic3VicnNCaWFzIiwiY2hhclN0cmluZ3MiLCJuR2x5cGhzIiwidmEiLCJ3YSIsIndlaWdodCIsIndlaWdodE5hbWUiLCJmb250QkJveCIsImZvbnRNYXRyaXgiLCJoZWFkZXIiLCJuYW1lSW5kZXgiLCJDYSIsInRvcERpY3RJbmRleCIsImdsb2JhbFN1YnJJbmRleCIsImNoYXJzZXRzIiwiSWEiLCJjaGFyU3RyaW5nc0luZGV4IiwiS2EiLCJwcml2YXRlRGljdCIsIkxhIiwic3RyaW5nSW5kZXgiLCJzdHJpbmdzIiwiR2EiLCJmb250UmV2aXNpb24iLCJjaGVja1N1bUFkanVzdG1lbnQiLCJtYWdpY051bWJlciIsImZsYWdzIiwiY3JlYXRlZCIsIm1vZGlmaWVkIiwibWFjU3R5bGUiLCJsb3dlc3RSZWNQUEVNIiwiZm9udERpcmVjdGlvbkhpbnQiLCJnbHlwaERhdGFGb3JtYXQiLCJnZXRUaW1lIiwibGluZUdhcCIsImFkdmFuY2VXaWR0aE1heCIsIm1pbkxlZnRTaWRlQmVhcmluZyIsIm1pblJpZ2h0U2lkZUJlYXJpbmciLCJ4TWF4RXh0ZW50IiwiY2FyZXRTbG9wZVJpc2UiLCJjYXJldFNsb3BlUnVuIiwiY2FyZXRPZmZzZXQiLCJtZXRyaWNEYXRhRm9ybWF0IiwibWF4UG9pbnRzIiwibWF4Q29udG91cnMiLCJtYXhDb21wb3NpdGVQb2ludHMiLCJtYXhDb21wb3NpdGVDb250b3VycyIsIm1heFpvbmVzIiwibWF4VHdpbGlnaHRQb2ludHMiLCJtYXhTdG9yYWdlIiwibWF4RnVuY3Rpb25EZWZzIiwibWF4SW5zdHJ1Y3Rpb25EZWZzIiwibWF4U3RhY2tFbGVtZW50cyIsIm1heFNpemVPZkluc3RydWN0aW9ucyIsIm1heENvbXBvbmVudEVsZW1lbnRzIiwibWF4Q29tcG9uZW50RGVwdGgiLCJfZSIsIjAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiLCIyMCIsIjIxIiwiMjIiLCIyMyIsIjI0IiwiMjUiLCIyNiIsIjI3IiwiMjgiLCIyOSIsIjMwIiwiMzEiLCIzMiIsIjMzIiwiMzQiLCIzNSIsIjM2IiwiMzciLCIzOCIsIjM5IiwiNDAiLCI0MSIsIjQyIiwiNDMiLCI0NCIsIjQ1IiwiNDYiLCI0NyIsIjQ4IiwiNDkiLCI1MCIsIjUxIiwiNTIiLCI1MyIsIjU0IiwiNTUiLCI1NiIsIjU3IiwiNTgiLCI1OSIsIjYwIiwiNjEiLCI2MiIsIjYzIiwiNjQiLCI2NSIsIjY2IiwiNjciLCI2OCIsIjY5IiwiNzAiLCI3MSIsIjcyIiwiNzMiLCI3NCIsIjc1IiwiNzYiLCI3NyIsIjc4IiwiNzkiLCI4MCIsIjgxIiwiODIiLCI4MyIsIjg0IiwiODUiLCI4NiIsIjg3IiwiODgiLCI4OSIsIjkwIiwiOTEiLCI5MiIsIjkzIiwiOTQiLCIxMjgiLCIxMjkiLCIxMzAiLCIxMzEiLCIxMzIiLCIxMzMiLCIxMzQiLCIxMzUiLCIxMzYiLCIxMzciLCIxMzgiLCIxMzkiLCIxNDAiLCIxNDEiLCIxNDIiLCIxNDMiLCIxNDQiLCIxNDUiLCIxNDYiLCIxNDciLCIxNDgiLCIxNDkiLCIxNTAiLCIxNTEiLCJiZiIsIjEwNzgiLCIxMDUyIiwiMTE1NiIsIjExMTgiLCI1MTIxIiwiMTUzNjEiLCIzMDczIiwiMjA0OSIsIjExMjY1IiwiMTMzMTMiLCIxMjI4OSIsIjQwOTciLCI2MTQ1IiwiODE5MyIsIjE2Mzg1IiwiMTAyNSIsIjEwMjQxIiwiNzE2OSIsIjE0MzM3IiwiOTIxNyIsIjEwNjciLCIxMTAxIiwiMjA5MiIsIjEwNjgiLCIxMTMzIiwiMTA2OSIsIjEwNTkiLCIyMTE3IiwiMTA5MyIsIjgyMTgiLCI1MTQ2IiwiMTE1MCIsIjEwMjYiLCIxMDI3IiwiMzA3NiIsIjUxMjQiLCIyMDUyIiwiNDEwMCIsIjEwMjgiLCIxMTU1IiwiMTA1MCIsIjQxMjIiLCIxMDI5IiwiMTAzMCIsIjExNjQiLCIxMTI1IiwiMjA2NyIsIjEwNDMiLCIzMDgxIiwiMTAyNDkiLCI0MTA1IiwiOTIyNSIsIjE2MzkzIiwiNjE1MyIsIjgyMDEiLCIxNzQxNyIsIjUxMjkiLCIxMzMyMSIsIjE4NDQxIiwiNzE3NyIsIjExMjczIiwiMjA1NyIsIjEwMzMiLCIxMjI5NyIsIjEwNjEiLCIxMDgwIiwiMTEyNCIsIjEwMzUiLCIyMDYwIiwiMzA4NCIsIjEwMzYiLCI1MTMyIiwiNjE1NiIsIjQxMDgiLCIxMTIyIiwiMTExMCIsIjEwNzkiLCIzMDc5IiwiMTAzMSIsIjUxMjciLCI0MTAzIiwiMjA1NSIsIjEwMzIiLCIxMTM1IiwiMTA5NSIsIjExMjgiLCIxMDM3IiwiMTA4MSIsIjEwMzgiLCIxMDM5IiwiMTEzNiIsIjEwNTciLCIxMTE3IiwiMjE0MSIsIjIxMDgiLCIxMDc2IiwiMTA3NyIsIjEwNDAiLCIyMDY0IiwiMTA0MSIsIjEwOTkiLCIxMDg3IiwiMTEwNyIsIjExNTgiLCIxMTU5IiwiMTA4OSIsIjExMTEiLCIxMDQyIiwiMTA4OCIsIjExMDgiLCIxMDYyIiwiMTA2MyIsIjIwOTQiLCIxMTM0IiwiMTA3MSIsIjIxMTAiLCIxMDg2IiwiMTEwMCIsIjEwODIiLCIxMTUzIiwiMTE0NiIsIjExMDIiLCIxMTQ4IiwiMTEwNCIsIjIxMjgiLCIxMTIxIiwiMTA0NCIsIjIwNjgiLCIxMTU0IiwiMTA5NiIsIjExMjMiLCIxMDQ1IiwiMTA0NiIsIjIwNzAiLCIxMDk0IiwiMTEzMSIsIjIxNTUiLCIzMTc5IiwiMTA0OCIsIjEwNDciLCIxMDQ5IiwiOTI3NSIsIjQxNTUiLCI1MTc5IiwiMzEzMSIsIjEwODMiLCIyMTA3IiwiODI1MSIsIjYyMDMiLCI3MjI3IiwiMTEwMyIsIjcxOTQiLCIzMDk4IiwiNjE3MCIsIjIwNzQiLCIxMTMyIiwiMTA3NCIsIjExMTUiLCIxMDUxIiwiMTA2MCIsIjExMjc0IiwiMTYzOTQiLCIxMzMyMiIsIjkyMjYiLCI1MTMwIiwiNzE3OCIsIjEyMjk4IiwiMTc0MTgiLCI0MTA2IiwiMTg0NDIiLCIyMDU4IiwiMTk0NjYiLCI2MTU0IiwiMTUzNzAiLCIxMDI1MCIsIjIwNDkwIiwiMzA4MiIsIjEwMzQiLCIyMTUxNCIsIjE0MzQ2IiwiODIwMiIsIjIwNzciLCIxMDUzIiwiMTExNCIsIjEwNjQiLCIyMTQzIiwiMTA5NyIsIjEwOTIiLCIxMDk4IiwiMTA1NCIsIjExMDUiLCIxMDU1IiwiMTA5MCIsIjExNTIiLCIxMDU4IiwiMTA3MCIsIjEwNTYiLCIyMTE1IiwiMTA5MSIsIjEwNjYiLCIxMTA2IiwiMTE2MCIsIjExNTciLCIxMTQ0IiwiMTEzMCIsInBsYXRmb3JtSUQiLCJlbmNvZGluZ0lEIiwibGFuZ3VhZ2VJRCIsIm5hbWVJRCIsImhmIiwiYmVnaW4iLCJ4QXZnQ2hhcldpZHRoIiwiZnNUeXBlIiwieVN1YnNjcmlwdFhTaXplIiwieVN1YnNjcmlwdFlTaXplIiwieVN1YnNjcmlwdFhPZmZzZXQiLCJ5U3Vic2NyaXB0WU9mZnNldCIsInlTdXBlcnNjcmlwdFhTaXplIiwieVN1cGVyc2NyaXB0WVNpemUiLCJ5U3VwZXJzY3JpcHRYT2Zmc2V0IiwieVN1cGVyc2NyaXB0WU9mZnNldCIsInlTdHJpa2VvdXRTaXplIiwieVN0cmlrZW91dFBvc2l0aW9uIiwic0ZhbWlseUNsYXNzIiwicGFub3NlIiwidWxVbmljb2RlUmFuZ2UxIiwidWxVbmljb2RlUmFuZ2UyIiwidWxVbmljb2RlUmFuZ2UzIiwidWxVbmljb2RlUmFuZ2U0IiwiYWNoVmVuZElEIiwidXNGaXJzdENoYXJJbmRleCIsInVzTGFzdENoYXJJbmRleCIsInNUeXBvQXNjZW5kZXIiLCJzVHlwb0Rlc2NlbmRlciIsInNUeXBvTGluZUdhcCIsInVzV2luQXNjZW50IiwidXNXaW5EZXNjZW50IiwidWxDb2RlUGFnZVJhbmdlMSIsInVsQ29kZVBhZ2VSYW5nZTIiLCJzeEhlaWdodCIsInNDYXBIZWlnaHQiLCJ1c0RlZmF1bHRDaGFyIiwidXNCcmVha0NoYXIiLCJ1c01heENvbnRlbnQiLCJ1bmljb2RlUmFuZ2VzIiwiZ2V0VW5pY29kZVJhbmdlIiwiaXRhbGljQW5nbGUiLCJ1bmRlcmxpbmVQb3NpdGlvbiIsInVuZGVybGluZVRoaWNrbmVzcyIsImlzRml4ZWRQaXRjaCIsIm1pbk1lbVR5cGU0MiIsIm1heE1lbVR5cGU0MiIsIm1pbk1lbVR5cGUxIiwibWF4TWVtVHlwZTEiLCJsZiIsImRlbHRhR2x5cGhJZCIsInN1YnN0aXR1dGUiLCJzZXF1ZW5jZXMiLCJhbHRlcm5hdGVTZXRzIiwibGlnYXR1cmVTZXRzIiwibGlnR2x5cGgiLCJtZiIsInNlcXVlbmNlSW5kZXgiLCJsb29rdXBMaXN0SW5kZXgiLCJydWxlU2V0cyIsImxvb2t1cFJlY29yZHMiLCJjbGFzc1NldHMiLCJjb3ZlcmFnZXMiLCJjaGFpblJ1bGVTZXRzIiwiYmFja3RyYWNrIiwibG9va2FoZWFkIiwiYmFja3RyYWNrQ2xhc3NEZWYiLCJpbnB1dENsYXNzRGVmIiwibG9va2FoZWFkQ2xhc3NEZWYiLCJjaGFpbkNsYXNzU2V0IiwiYmFja3RyYWNrQ292ZXJhZ2UiLCJpbnB1dENvdmVyYWdlIiwibG9va2FoZWFkQ292ZXJhZ2UiLCJzdWJzdGl0dXRlcyIsIm5mIiwic2NyaXB0cyIsImZlYXR1cmVzIiwibG9va3VwcyIsInZhcmlhdGlvbnMiLCJxZiIsImZvbnRUb1RhYmxlIiwiYWR2YW5jZVdpZHRoQXZnIiwicmIiLCJtYXhMZWZ0U2lkZUJlYXJpbmciLCJoYXNDaGFyIiwiZ2V0RW5nbGlzaE5hbWUiLCJ1bmlxdWVJRCIsInByZWZlcnJlZEZhbWlseSIsInByZWZlcnJlZFN1YmZhbWlseSIsImNvbXB1dGVDaGVja1N1bSIsInNlYXJjaFRhZyIsImJpblNlYXJjaCIsImdldFRhYmxlIiwiY3JlYXRlRGVmYXVsdFRhYmxlIiwiZ2V0U2NyaXB0TmFtZXMiLCJnZXREZWZhdWx0U2NyaXB0TmFtZSIsImdldFNjcmlwdFRhYmxlIiwiZ2V0TGFuZ1N5c1RhYmxlIiwiZ2V0RmVhdHVyZVRhYmxlIiwiZ2V0TG9va3VwVGFibGVzIiwiZ2V0R2x5cGhDbGFzcyIsImdldENvdmVyYWdlSW5kZXgiLCJleHBhbmRDb3ZlcmFnZSIsImRlZmF1bHRLZXJuaW5nVGFibGVzIiwiZ2V0S2VybmluZ1RhYmxlcyIsImdldEtlcm5pbmdWYWx1ZSIsInBvc0Zvcm1hdCIsInBhaXJTZXRzIiwic2Vjb25kR2x5cGgiLCJ2YWx1ZTEiLCJjbGFzc0RlZjEiLCJjbGFzc0RlZjIiLCJjbGFzc1JlY29yZHMiLCJnZXRTaW5nbGUiLCJzdWIiLCJieSIsImdldEFsdGVybmF0ZXMiLCJnZXRMaWdhdHVyZXMiLCJhZGRTaW5nbGUiLCJhZGRBbHRlcm5hdGUiLCJhZGRMaWdhdHVyZSIsImdldEZlYXR1cmUiLCJyZiIsInNmIiwidGYiLCJ1ZiIsIndmIiwic3JQZXJpb2QiLCJzclBoYXNlIiwic3JUaHJlc2hvbGQiLCJ0cnVuYyIsIk5FR0FUSVZFX0lORklOSVRZIiwidW50b3VjaCIsIlBPU0lUSVZFX0lORklOSVRZIiwiQWYiLCJhdXRvRmxpcCIsImZ1bmNzIiwiaW5oaWJpdEdyaWRGaXQiLCJzdG9yZSIsImlnbm9yZUN2dCIsIkJmIiwiY2hhclRvR2x5cGgiLCJzdHJpbmdUb0dseXBocyIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibGlnYSIsInJsaWciLCJuYW1lVG9HbHlwaCIsImtlcm5pbmciLCJmb3JFYWNoR2x5cGgiLCJsZXR0ZXJTcGFjaW5nIiwidHJhY2tpbmciLCJnZXRQYXRocyIsImdldEFkdmFuY2VXaWR0aCIsInZhbGlkYXRlIiwidG9UYWJsZXMiLCJ0b0J1ZmZlciIsInJlcXVlc3RGaWxlU3lzdGVtIiwid2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0iLCJURU1QT1JBUlkiLCJyb290IiwiZ2V0RmlsZSIsImNyZWF0ZVdyaXRlciIsInRvVVJMIiwid3JpdGVGaWxlU3luYyIsIklUQUxJQyIsIlVOREVSU0NPUkUiLCJORUdBVElWRSIsIk9VVExJTkVEIiwiU1RSSUtFT1VUIiwiQk9MRCIsIlVTRVJfVFlQT19NRVRSSUNTIiwiV1dTIiwiT0JMSVFVRSIsIlVMVFJBX0NPTkRFTlNFRCIsIkVYVFJBX0NPTkRFTlNFRCIsIkNPTkRFTlNFRCIsIlNFTUlfQ09OREVOU0VEIiwiU0VNSV9FWFBBTkRFRCIsIkVYUEFOREVEIiwiRVhUUkFfRVhQQU5ERUQiLCJVTFRSQV9FWFBBTkRFRCIsIlRISU4iLCJFWFRSQV9MSUdIVCIsIkxJR0hUIiwiTk9STUFMIiwiU0VNSV9CT0xEIiwiRVhUUkFfQk9MRCIsIkJMQUNLIiwiYXhlcyIsImluc3RhbmNlcyIsIm9mZnNldFRvRGF0YSIsIkRmIiwidmFsdWVGb3JtYXQxIiwidmFsdWVGb3JtYXQyIiwidmFsdWUyIiwiY2xhc3MxQ291bnQiLCJjbGFzczJDb3VudCIsIkVmIiwiJGQiLCJfZCIsIkZvbnQiLCJHbHlwaCIsIlBhdGgiLCJCb3VuZGluZ0JveCIsIl9wYXJzZSIsInN0YXR1c1RleHQiLCJsb2FkU3luYyIsInJlYWRGaWxlU3luYyIsImZzIiwicnVuIiwiZnVuIiwidGl0bGUiLCJicm93c2VyIiwiYXJndiIsInZlcnNpb25zIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsInJlbW92ZUFsbExpc3RlbmVycyIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJiaW5kaW5nIiwiY3dkIiwiY2hkaXIiLCJ1bWFzayIsIml0ZXJhYmxlIiwiYXBwZW5kIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImJvZHlVc2VkIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJpc1Byb3RvdHlwZU9mIiwiX2JvZHlCbG9iIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJzZWFyY2hQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJhcnJheUJ1ZmZlciIsIl9ib2R5QXJyYXlCdWZmZXIiLCJoZWFkZXJzIiwidGV4dCIsInJlYWRBc1RleHQiLCJib2R5IiwiY3JlZGVudGlhbHMiLCJ0b1VwcGVyQ2FzZSIsInJlZmVycmVyIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZmV0Y2giLCJpc1ZpZXciLCJkZWxldGUiLCJlbnRyaWVzIiwiY2xvbmUiLCJyZWRpcmVjdCIsIkhlYWRlcnMiLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsIm9udGltZW91dCIsIndpdGhDcmVkZW50aWFscyIsInNldFJlcXVlc3RIZWFkZXIiLCIuL2NvbG9yL2NvbG9yX2NvbnZlcnNpb24iLCIuL2NvbG9yL2NyZWF0aW5nX3JlYWRpbmciLCIuL2NvbG9yL3A1LkNvbG9yIiwiLi9jb2xvci9zZXR0aW5nIiwiLi9jb3JlL2NvbnN0YW50cyIsIi4vY29yZS9lbnZpcm9ubWVudCIsIi4vY29yZS9lcnJvcl9oZWxwZXJzIiwiLi9jb3JlL2hlbHBlcnMiLCIuL2NvcmUvaW5pdCIsIi4vY29yZS9sZWdhY3kiLCIuL2NvcmUvbWFpbiIsIi4vY29yZS9wNS5FbGVtZW50IiwiLi9jb3JlL3A1LkdyYXBoaWNzIiwiLi9jb3JlL3A1LlJlbmRlcmVyIiwiLi9jb3JlL3A1LlJlbmRlcmVyMkQiLCIuL2NvcmUvcmVuZGVyaW5nIiwiLi9jb3JlL3NoYXBlLzJkX3ByaW1pdGl2ZXMiLCIuL2NvcmUvc2hhcGUvYXR0cmlidXRlcyIsIi4vY29yZS9zaGFwZS9jdXJ2ZXMiLCIuL2NvcmUvc2hhcGUvdmVydGV4IiwiLi9jb3JlL3NoaW0iLCIuL2NvcmUvc3RydWN0dXJlIiwiLi9jb3JlL3RyYW5zZm9ybSIsIi4vZGF0YS9wNS5UeXBlZERpY3QiLCIuL2V2ZW50cy9hY2NlbGVyYXRpb24iLCIuL2V2ZW50cy9rZXlib2FyZCIsIi4vZXZlbnRzL21vdXNlIiwiLi9ldmVudHMvdG91Y2giLCIuL2ltYWdlL2ZpbHRlcnMiLCIuL2ltYWdlL2ltYWdlIiwiLi9pbWFnZS9sb2FkaW5nX2Rpc3BsYXlpbmciLCIuL2ltYWdlL3A1LkltYWdlIiwiLi9pbWFnZS9waXhlbHMiLCIuL2lvL2ZpbGVzIiwiLi9pby9wNS5UYWJsZSIsIi4vaW8vcDUuVGFibGVSb3ciLCIuL2lvL3A1LlhNTCIsIi4vbWF0aC9jYWxjdWxhdGlvbiIsIi4vbWF0aC9tYXRoIiwiLi9tYXRoL25vaXNlIiwiLi9tYXRoL3A1LlZlY3RvciIsIi4vbWF0aC9yYW5kb20iLCIuL21hdGgvdHJpZ29ub21ldHJ5IiwiLi90eXBvZ3JhcGh5L2F0dHJpYnV0ZXMiLCIuL3R5cG9ncmFwaHkvbG9hZGluZ19kaXNwbGF5aW5nIiwiLi90eXBvZ3JhcGh5L3A1LkZvbnQiLCIuL3V0aWxpdGllcy9hcnJheV9mdW5jdGlvbnMiLCIuL3V0aWxpdGllcy9jb252ZXJzaW9uIiwiLi91dGlsaXRpZXMvc3RyaW5nX2Z1bmN0aW9ucyIsIi4vdXRpbGl0aWVzL3RpbWVfZGF0ZSIsIi4vd2ViZ2wvM2RfcHJpbWl0aXZlcyIsIi4vd2ViZ2wvaW50ZXJhY3Rpb24iLCIuL3dlYmdsL2xpZ2h0IiwiLi93ZWJnbC9sb2FkaW5nIiwiLi93ZWJnbC9tYXRlcmlhbCIsIi4vd2ViZ2wvcDUuQ2FtZXJhIiwiLi93ZWJnbC9wNS5HZW9tZXRyeSIsIi4vd2ViZ2wvcDUuTWF0cml4IiwiLi93ZWJnbC9wNS5SZW5kZXJlckdMIiwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLkltbWVkaWF0ZSIsIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5SZXRhaW5lZCIsIi4vd2ViZ2wvcDUuU2hhZGVyIiwiLi93ZWJnbC9wNS5UZXh0dXJlIiwiLi93ZWJnbC90ZXh0IiwiQ29sb3JDb252ZXJzaW9uIiwiX2hzYmFUb0hTTEEiLCJfaHNiYVRvUkdCQSIsIl9oc2xhVG9IU0JBIiwiX2hzbGFUb1JHQkEiLCJfcmdiYVRvSFNCQSIsIl9yZ2JhVG9IU0xBIiwiLi4vY29yZS9tYWluIiwiYWxwaGEiLCJfdmFsaWRhdGVQYXJhbWV0ZXJzIiwiY29sb3IiLCJfZ2V0QWxwaGEiLCJibHVlIiwiX2dldEJsdWUiLCJicmlnaHRuZXNzIiwiX2dldEJyaWdodG5lc3MiLCJDb2xvciIsImdyZWVuIiwiX2dldEdyZWVuIiwiaHVlIiwiX2dldEh1ZSIsImxlcnBDb2xvciIsIl9jb2xvck1vZGUiLCJfY29sb3JNYXhlcyIsIlJHQiIsImxldmVscyIsIkhTQiIsImhzYmEiLCJIU0wiLCJfZ2V0TGlnaHRuZXNzIiwiaHNsYSIsImxlcnAiLCJsaWdodG5lc3MiLCJyZWQiLCJfZ2V0UmVkIiwic2F0dXJhdGlvbiIsIl9nZXRTYXR1cmF0aW9uIiwiLi4vY29yZS9jb25zdGFudHMiLCIuLi9jb3JlL2Vycm9yX2hlbHBlcnMiLCIuL3A1LkNvbG9yIiwiX3N0b3JlTW9kZUFuZE1heGVzIiwiX2FycmF5IiwiX3BhcnNlSW5wdXRzIiwiX2NhbGN1bGF0ZUxldmVscyIsInRvUHJlY2lzaW9uIiwibWF4ZXMiLCJzZXRSZWQiLCJzZXRHcmVlbiIsInNldEJsdWUiLCJzZXRBbHBoYSIsIl9nZXRNb2RlIiwiX2dldE1heGVzIiwiYWxpY2VibHVlIiwiYW50aXF1ZXdoaXRlIiwiYXF1YSIsImFxdWFtYXJpbmUiLCJhenVyZSIsImJlaWdlIiwiYmlzcXVlIiwiYmxhY2siLCJibGFuY2hlZGFsbW9uZCIsImJsdWV2aW9sZXQiLCJidXJseXdvb2QiLCJjYWRldGJsdWUiLCJjaGFydHJldXNlIiwiY2hvY29sYXRlIiwiY29yYWwiLCJjb3JuZmxvd2VyYmx1ZSIsImNvcm5zaWxrIiwiY3JpbXNvbiIsImN5YW4iLCJkYXJrYmx1ZSIsImRhcmtjeWFuIiwiZGFya2dvbGRlbnJvZCIsImRhcmtncmF5IiwiZGFya2dyZWVuIiwiZGFya2dyZXkiLCJkYXJra2hha2kiLCJkYXJrbWFnZW50YSIsImRhcmtvbGl2ZWdyZWVuIiwiZGFya29yYW5nZSIsImRhcmtvcmNoaWQiLCJkYXJrcmVkIiwiZGFya3NhbG1vbiIsImRhcmtzZWFncmVlbiIsImRhcmtzbGF0ZWJsdWUiLCJkYXJrc2xhdGVncmF5IiwiZGFya3NsYXRlZ3JleSIsImRhcmt0dXJxdW9pc2UiLCJkYXJrdmlvbGV0IiwiZGVlcHBpbmsiLCJkZWVwc2t5Ymx1ZSIsImRpbWdyYXkiLCJkaW1ncmV5IiwiZG9kZ2VyYmx1ZSIsImZpcmVicmljayIsImZsb3JhbHdoaXRlIiwiZm9yZXN0Z3JlZW4iLCJmdWNoc2lhIiwiZ2FpbnNib3JvIiwiZ2hvc3R3aGl0ZSIsImdvbGQiLCJnb2xkZW5yb2QiLCJncmF5IiwiZ3JlZW55ZWxsb3ciLCJncmV5IiwiaG9uZXlkZXciLCJob3RwaW5rIiwiaW5kaWFucmVkIiwiaW5kaWdvIiwiaXZvcnkiLCJraGFraSIsImxhdmVuZGVyIiwibGF2ZW5kZXJibHVzaCIsImxhd25ncmVlbiIsImxlbW9uY2hpZmZvbiIsImxpZ2h0Ymx1ZSIsImxpZ2h0Y29yYWwiLCJsaWdodGN5YW4iLCJsaWdodGdvbGRlbnJvZHllbGxvdyIsImxpZ2h0Z3JheSIsImxpZ2h0Z3JlZW4iLCJsaWdodGdyZXkiLCJsaWdodHBpbmsiLCJsaWdodHNhbG1vbiIsImxpZ2h0c2VhZ3JlZW4iLCJsaWdodHNreWJsdWUiLCJsaWdodHNsYXRlZ3JheSIsImxpZ2h0c2xhdGVncmV5IiwibGlnaHRzdGVlbGJsdWUiLCJsaWdodHllbGxvdyIsImxpbWUiLCJsaW1lZ3JlZW4iLCJsaW5lbiIsIm1hZ2VudGEiLCJtYXJvb24iLCJtZWRpdW1hcXVhbWFyaW5lIiwibWVkaXVtYmx1ZSIsIm1lZGl1bW9yY2hpZCIsIm1lZGl1bXB1cnBsZSIsIm1lZGl1bXNlYWdyZWVuIiwibWVkaXVtc2xhdGVibHVlIiwibWVkaXVtc3ByaW5nZ3JlZW4iLCJtZWRpdW10dXJxdW9pc2UiLCJtZWRpdW12aW9sZXRyZWQiLCJtaWRuaWdodGJsdWUiLCJtaW50Y3JlYW0iLCJtaXN0eXJvc2UiLCJtb2NjYXNpbiIsIm5hdmFqb3doaXRlIiwibmF2eSIsIm9sZGxhY2UiLCJvbGl2ZSIsIm9saXZlZHJhYiIsIm9yYW5nZSIsIm9yYW5nZXJlZCIsIm9yY2hpZCIsInBhbGVnb2xkZW5yb2QiLCJwYWxlZ3JlZW4iLCJwYWxldHVycXVvaXNlIiwicGFsZXZpb2xldHJlZCIsInBhcGF5YXdoaXAiLCJwZWFjaHB1ZmYiLCJwZXJ1IiwicGx1bSIsInBvd2RlcmJsdWUiLCJwdXJwbGUiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZXNtb2tlIiwieWVsbG93IiwieWVsbG93Z3JlZW4iLCJSZWdFeHAiLCJIRVgzIiwiSEVYNCIsIkhFWDYiLCJIRVg4IiwiUkdCX1BFUkNFTlQiLCJSR0JBIiwiUkdCQV9QRVJDRU5UIiwiSFNMQSIsIkhTQkEiLCIuL2NvbG9yX2NvbnZlcnNpb24iLCJiYWNrZ3JvdW5kIiwiSW1hZ2UiLCJpbWFnZSIsIl9yZW5kZXJlciIsImNvbG9yTW9kZSIsIl9zZXRQcm9wZXJ0eSIsIm5vRmlsbCIsIm5vU3Ryb2tlIiwiUDJEIiwiV0VCR0wiLCJBUlJPVyIsIkNST1NTIiwiSEFORCIsIk1PVkUiLCJURVhUIiwiV0FJVCIsIkhBTEZfUEkiLCJRVUFSVEVSX1BJIiwiVEFVIiwiVFdPX1BJIiwiREVHUkVFUyIsIlJBRElBTlMiLCJERUdfVE9fUkFEIiwiUkFEX1RPX0RFRyIsIkNPUk5FUiIsIkNPUk5FUlMiLCJSQURJVVMiLCJSSUdIVCIsIkxFRlQiLCJDRU5URVIiLCJUT1AiLCJCT1RUT00iLCJCQVNFTElORSIsIlBPSU5UUyIsIkxJTkVTIiwiTElORV9TVFJJUCIsIkxJTkVfTE9PUCIsIlRSSUFOR0xFUyIsIlRSSUFOR0xFX0ZBTiIsIlRSSUFOR0xFX1NUUklQIiwiUVVBRFMiLCJRVUFEX1NUUklQIiwiQ0xPU0UiLCJPUEVOIiwiQ0hPUkQiLCJQSUUiLCJQUk9KRUNUIiwiU1FVQVJFIiwiUk9VTkQiLCJCRVZFTCIsIk1JVEVSIiwiQVVUTyIsIkFMVCIsIkJBQ0tTUEFDRSIsIkNPTlRST0wiLCJERUxFVEUiLCJET1dOX0FSUk9XIiwiRU5URVIiLCJFU0NBUEUiLCJMRUZUX0FSUk9XIiwiT1BUSU9OIiwiUkVUVVJOIiwiUklHSFRfQVJST1ciLCJTSElGVCIsIlRBQiIsIlVQX0FSUk9XIiwiQkxFTkQiLCJBREQiLCJEQVJLRVNUIiwiTElHSFRFU1QiLCJESUZGRVJFTkNFIiwiRVhDTFVTSU9OIiwiTVVMVElQTFkiLCJTQ1JFRU4iLCJSRVBMQUNFIiwiT1ZFUkxBWSIsIkhBUkRfTElHSFQiLCJTT0ZUX0xJR0hUIiwiRE9ER0UiLCJCVVJOIiwiVEhSRVNIT0xEIiwiR1JBWSIsIk9QQVFVRSIsIklOVkVSVCIsIlBPU1RFUklaRSIsIkRJTEFURSIsIkVST0RFIiwiQkxVUiIsIl9ERUZBVUxUX1RFWFRfRklMTCIsIl9ERUZBVUxUX0xFQURNVUxUIiwiX0NUWF9NSURETEUiLCJMSU5FQVIiLCJRVUFEUkFUSUMiLCJCRVpJRVIiLCJDVVJWRSIsIlNUUk9LRSIsIkZJTEwiLCJURVhUVVJFIiwiSU1NRURJQVRFIiwiTkVBUkVTVCIsIlJFUEVBVCIsIkNMQU1QIiwiTUlSUk9SIiwiTEFORFNDQVBFIiwiUE9SVFJBSVQiLCJfREVGQVVMVF9TVFJPS0UiLCJfREVGQVVMVF9GSUxMIiwiR1JJRCIsIkFYRVMiLCJpbm5lcldpZHRoIiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50V2lkdGgiLCJpbm5lckhlaWdodCIsImNsaWVudEhlaWdodCIsIl9mcmFtZVJhdGUiLCJfbGFzdEZyYW1lVGltZSIsInBlcmZvcm1hbmNlIiwiX3RhcmdldEZyYW1lUmF0ZSIsInByaW50IiwiZnJhbWVDb3VudCIsImZvY3VzZWQiLCJoYXNGb2N1cyIsImN1cnNvciIsIl9jdXJFbGVtZW50IiwiZWx0Iiwic3R5bGUiLCJmcmFtZVJhdGUiLCJfcnVuRnJhbWVzIiwiZ2V0RnJhbWVSYXRlIiwic2V0RnJhbWVSYXRlIiwibm9DdXJzb3IiLCJkaXNwbGF5V2lkdGgiLCJzY3JlZW4iLCJkaXNwbGF5SGVpZ2h0Iiwid2luZG93V2lkdGgiLCJ3aW5kb3dIZWlnaHQiLCJfb25yZXNpemUiLCJfaXNHbG9iYWwiLCJ3aW5kb3dSZXNpemVkIiwicHJldmVudERlZmF1bHQiLCJmdWxsc2NyZWVuIiwiZnVsbHNjcmVlbkVsZW1lbnQiLCJ3ZWJraXRGdWxsc2NyZWVuRWxlbWVudCIsIm1vekZ1bGxTY3JlZW5FbGVtZW50IiwibXNGdWxsc2NyZWVuRWxlbWVudCIsImZ1bGxzY3JlZW5FbmFibGVkIiwid2Via2l0RnVsbHNjcmVlbkVuYWJsZWQiLCJtb3pGdWxsU2NyZWVuRW5hYmxlZCIsIm1zRnVsbHNjcmVlbkVuYWJsZWQiLCJyZXF1ZXN0RnVsbHNjcmVlbiIsIm1velJlcXVlc3RGdWxsU2NyZWVuIiwid2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4iLCJtc1JlcXVlc3RGdWxsc2NyZWVuIiwiZXhpdEZ1bGxzY3JlZW4iLCJtb3pDYW5jZWxGdWxsU2NyZWVuIiwid2Via2l0RXhpdEZ1bGxzY3JlZW4iLCJtc0V4aXRGdWxsc2NyZWVuIiwicGl4ZWxEZW5zaXR5IiwiX3BpeGVsRGVuc2l0eSIsIl9waXhlbHNEaXJ0eSIsInJlc2l6ZUNhbnZhcyIsImRpc3BsYXlEZW5zaXR5IiwiZGV2aWNlUGl4ZWxSYXRpbyIsImdldFVSTCIsImdldFVSTFBhdGgiLCJwYXRobmFtZSIsImdldFVSTFBhcmFtcyIsImxhc3RJbmRleCIsIi4vY29uc3RhbnRzIiwiLi9tYWluIiwiX2ZyaWVuZGx5RmlsZUxvYWRFcnJvciIsInNvbWUiLCJfaGVscEZvck1pc3VzZWRBdFRvcExldmVsQ29kZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCIuLi8uLi9kb2NzL3JlZmVyZW5jZS9kYXRhLmpzb24iLCJtb2RlQWRqdXN0IiwibW9jaGEiLCJzZXR1cCIsImluc3RhbmNlIiwiZXhpdCIsInB1c2hTdHlsZSIsInBvcFN0eWxlIiwiX3NldHVwRG9uZSIsIl91c2VyTm9kZSIsIl9lbGVtZW50cyIsIl9yZXF1ZXN0QW5pbUlkIiwiX3ByZWxvYWRDb3VudCIsIl9pbml0aWFsaXplSW5zdGFuY2VWYXJpYWJsZXMiLCJfZGVmYXVsdENhbnZhc1NpemUiLCJtb3VzZW1vdmUiLCJtb3VzZWRvd24iLCJtb3VzZXVwIiwiZHJhZ2VuZCIsImRyYWdvdmVyIiwiY2xpY2siLCJkYmxjbGljayIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0Iiwia2V5ZG93biIsImtleXVwIiwia2V5cHJlc3MiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIiwidG91Y2hlbmQiLCJyZXNpemUiLCJibHVyIiwid2hlZWwiLCJfbG9hZGluZ1NjcmVlbklkIiwiX3JlZ2lzdGVyZWRNZXRob2RzIiwiRGV2aWNlT3JpZW50YXRpb25FdmVudCIsImRldmljZW9yaWVudGF0aW9uIiwiRGV2aWNlTW90aW9uRXZlbnQiLCJfaXNOb2RlV2Via2l0IiwiZGV2aWNlbW90aW9uIiwicHJlbG9hZCIsImlubmVySFRNTCIsIl9wcmVsb2FkTWV0aG9kcyIsIl93cmFwUHJlbG9hZCIsIl9yZWdpc3RlcmVkUHJlbG9hZE1ldGhvZHMiLCJfcnVuSWZQcmVsb2Fkc0FyZURvbmUiLCJfc2V0dXAiLCJfZHJhdyIsInBhcmVudE5vZGUiLCJfZGVjcmVtZW50UHJlbG9hZCIsIl9pbmNyZW1lbnRQcmVsb2FkIiwiY3JlYXRlQ2FudmFzIiwiZGF0YXNldCIsImhpZGRlbiIsInZpc2liaWxpdHkiLCJyZWRyYXciLCJfdXBkYXRlTW91c2VDb29yZHMiLCJjbGVhckludGVydmFsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJfY3JlYXRlRnJpZW5kbHlHbG9iYWxGdW5jdGlvbkJpbmRlciIsInBhc3NpdmUiLCJyZWdpc3Rlck1ldGhvZCIsIl9zdHlsZXMiLCJfYmV6aWVyRGV0YWlsIiwiX2N1cnZlRGV0YWlsIiwicmdiIiwiaHNiIiwiaHNsIiwiZGlzYWJsZUZyaWVuZGx5RXJyb3JzIiwibG9hZEpTT04iLCJsb2FkSW1hZ2UiLCJsb2FkU3RyaW5ncyIsImxvYWRYTUwiLCJsb2FkQnl0ZXMiLCJsb2FkVGFibGUiLCJsb2FkRm9udCIsImxvYWRNb2RlbCIsImxvYWRTaGFkZXIiLCJwcmUiLCJyZWdpc3RlclByZWxvYWRNZXRob2QiLCJnbG9iYWxPYmplY3QiLCIuL3NoaW0iLCJFbGVtZW50IiwiX3BJbnN0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJjbGFzcyIsIm1vdXNlUHJlc3NlZCIsIl9zZXRNb3VzZUJ1dHRvbiIsImRvdWJsZUNsaWNrZWQiLCJtb3VzZVdoZWVsIiwibW91c2VSZWxlYXNlZCIsIm1vdXNlQ2xpY2tlZCIsIm1vdXNlTW92ZWQiLCJtb3VzZU92ZXIiLCJjaGFuZ2VkIiwibW91c2VPdXQiLCJ0b3VjaFN0YXJ0ZWQiLCJ0b3VjaE1vdmVkIiwidG91Y2hFbmRlZCIsImRyYWdPdmVyIiwiZHJhZ0xlYXZlIiwiZHJvcCIsIkZpbGUiLCJ0YXJnZXQiLCJGaWxlTGlzdCIsInN0b3BQcm9wYWdhdGlvbiIsImRhdGFUcmFuc2ZlciIsImZpbGVzIiwiR3JhcGhpY3MiLCJjYW52YXMiLCJSZW5kZXJlckdMIiwiUmVuZGVyZXIyRCIsIl9hcHBseURlZmF1bHRzIiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0TGVmdCIsIm9mZnNldFRvcCIsIlJlbmRlcmVyIiwiX2lzTWFpbkNhbnZhcyIsImRpc3BsYXkiLCJfdGV4dFNpemUiLCJfdGV4dExlYWRpbmciLCJfdGV4dEZvbnQiLCJfdGV4dFN0eWxlIiwiX3RleHRBc2NlbnQiLCJfdGV4dERlc2NlbnQiLCJfdGV4dEFsaWduIiwiX3RleHRCYXNlbGluZSIsIl9yZWN0TW9kZSIsIl9lbGxpcHNlTW9kZSIsIl9jdXJ2ZVRpZ2h0bmVzcyIsIl9pbWFnZU1vZGUiLCJfdGludCIsIl9kb1N0cm9rZSIsIl9kb0ZpbGwiLCJfc3Ryb2tlU2V0IiwiX2ZpbGxTZXQiLCJwcm9wZXJ0aWVzIiwidGV4dExlYWRpbmciLCJ0ZXh0U2l6ZSIsIl9hcHBseVRleHRQcm9wZXJ0aWVzIiwidGV4dFN0eWxlIiwidGV4dEFzY2VudCIsIl91cGRhdGVUZXh0TWV0cmljcyIsInRleHREZXNjZW50IiwidGV4dEFsaWduIiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwiTUFYX1ZBTFVFIiwidGV4dFdpZHRoIiwiX3JlbmRlclRleHQiLCJfaXNPcGVuVHlwZSIsImZvbnRTaXplIiwib3ZlcmZsb3ciLCJ2ZXJ0aWNhbEFsaWduIiwiZHJhd2luZ0NvbnRleHQiLCJfY2FjaGVkRmlsbFN0eWxlIiwiX2NhY2hlZFN0cm9rZVN0eWxlIiwiX3NldEZpbGwiLCJfc2V0U3Ryb2tlIiwibGluZUNhcCIsInNjYWxlIiwic2F2ZSIsInJlc2V0TWF0cml4IiwiX2dldEZpbGwiLCJmaWxsUmVjdCIsInJlc3RvcmUiLCJjbGVhclJlY3QiLCJNZWRpYUVsZW1lbnQiLCJsb2FkUGl4ZWxzIiwiX2dldFRpbnRlZEltYWdlQ2FudmFzIiwiZHJhd0ltYWdlIiwiX3RvUGl4ZWxzIiwiY3JlYXRlSW1hZ2VEYXRhIiwicHV0SW1hZ2VEYXRhIiwiYmxlbmRNb2RlIiwiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIiwiYmxlbmQiLCJfY29weUhlbHBlciIsImdldEltYWdlRGF0YSIsInBpeGVscyIsInNldFRyYW5zZm9ybSIsImltYWdlRGF0YSIsInVwZGF0ZVBpeGVscyIsIl9hY3V0ZUFyY1RvQmV6aWVyIiwiYXkiLCJjeSIsImVsbGlwc2UiLCJfZ2V0U3Ryb2tlIiwidHJhbnNsYXRlIiwicXVhZCIsInJlY3QiLCJhcmNUbyIsInRyaWFuZ2xlIiwiZW5kU2hhcGUiLCJQT0xZR09OIiwiX2RvRmlsbFN0cm9rZUNsb3NlIiwiaXNWZXJ0Iiwibm9TbW9vdGgiLCJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCJzbW9vdGgiLCJzdHJva2VDYXAiLCJzdHJva2VKb2luIiwibGluZUpvaW4iLCJzdHJva2VXZWlnaHQiLCJiZXppZXIiLCJiZWdpblNoYXBlIiwidmVydGV4IiwiYmV6aWVyVmVydGV4IiwiY3VydmVWZXJ0ZXgiLCJhcHBseU1hdHJpeCIsInRyYW5zZm9ybSIsInJvdGF0ZSIsInNoZWFyWCIsInNoZWFyWSIsIlZlY3RvciIsInRleHRCYXNlbGluZSIsIl9yZW5kZXJQYXRoIiwicmVuZGVyZXIiLCJzdHJva2VUZXh0IiwiZmlsbFRleHQiLCJfdGV4dFdpZHRoIiwibWVhc3VyZVRleHQiLCIuLi9pbWFnZS9maWx0ZXJzIiwiLi9wNS5SZW5kZXJlciIsImNsYXNzTGlzdCIsIl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkIiwibm9DYW52YXMiLCJjcmVhdGVHcmFwaGljcyIsIi4uL3dlYmdsL3A1LlJlbmRlcmVyR0wiLCIuL3A1LkdyYXBoaWNzIiwiLi9wNS5SZW5kZXJlcjJEIiwiX3RvUmFkaWFucyIsImF0YW4iLCIuLi9jb25zdGFudHMiLCIuLi9lcnJvcl9oZWxwZXJzIiwiLi4vaGVscGVycyIsIi4uL21haW4iLCJlbGxpcHNlTW9kZSIsInJlY3RNb2RlIiwiYmV6aWVyRGV0YWlsIiwiYmV6aWVyUG9pbnQiLCJiZXppZXJUYW5nZW50IiwiY3VydmVEZXRhaWwiLCJjdXJ2ZVRpZ2h0bmVzcyIsImN1cnZlUG9pbnQiLCJjdXJ2ZVRhbmdlbnQiLCJiZWdpbkNvbnRvdXIiLCJpc1AzRCIsImVuZENvbnRvdXIiLCJxdWFkcmF0aWNWZXJ0ZXgiLCJfY29udG91ckluaXRlZCIsIngzIiwieTMiLCJfY29udG91clZlcnRpY2VzIiwid2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwibW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwib1JlcXVlc3RBbmltYXRpb25GcmFtZSIsIm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJub0xvb3AiLCJwcm9wcyIsIl91cGRhdGUiLCJwb3BNYXRyaXgiLCJwcmludE1hdHJpeCIsInB1c2hNYXRyaXgiLCJyb3RhdGVYIiwiX2Fzc2VydDNkIiwicm90YXRlWSIsInJvdGF0ZVoiLCJjcmVhdGVTdHJpbmdEaWN0IiwiU3RyaW5nRGljdCIsImNyZWF0ZU51bWJlckRpY3QiLCJOdW1iZXJEaWN0IiwiVHlwZWREaWN0IiwiaGFzS2V5IiwiX3ZhbGlkYXRlIiwiX2FkZE9iaiIsInNhdmVUYWJsZSIsImRvd25sb2FkRmlsZSIsInNhdmVKU09OIiwiZGl2IiwiX3ZhbHVlVGVzdCIsIl9rZXlUZXN0IiwibWluS2V5IiwibWF4S2V5IiwiZGV2aWNlT3JpZW50YXRpb24iLCJhY2NlbGVyYXRpb25YIiwiYWNjZWxlcmF0aW9uWSIsImFjY2VsZXJhdGlvbloiLCJwQWNjZWxlcmF0aW9uWCIsInBBY2NlbGVyYXRpb25ZIiwicEFjY2VsZXJhdGlvbloiLCJfdXBkYXRlUEFjY2VsZXJhdGlvbnMiLCJyb3RhdGlvblgiLCJyb3RhdGlvblkiLCJyb3RhdGlvbloiLCJwUm90YXRpb25YIiwicFJvdGF0aW9uWSIsInBSb3RhdGlvbloiLCJfdXBkYXRlUFJvdGF0aW9ucyIsInR1cm5BeGlzIiwic2V0TW92ZVRocmVzaG9sZCIsInNldFNoYWtlVGhyZXNob2xkIiwiX29uZGV2aWNlb3JpZW50YXRpb24iLCJiZXRhIiwiZ2FtbWEiLCJfaGFuZGxlTW90aW9uIiwiX29uZGV2aWNlbW90aW9uIiwiYWNjZWxlcmF0aW9uIiwib3JpZW50YXRpb24iLCJkZXZpY2VNb3ZlZCIsImRldmljZVR1cm5lZCIsImRldmljZVNoYWtlbiIsImlzS2V5UHJlc3NlZCIsImtleUlzUHJlc3NlZCIsImtleUNvZGUiLCJfb25rZXlkb3duIiwid2hpY2giLCJrZXlQcmVzc2VkIiwiY2hhckNvZGUiLCJfb25rZXl1cCIsImtleVJlbGVhc2VkIiwiX29ua2V5cHJlc3MiLCJfbGFzdEtleUNvZGVUeXBlZCIsImtleVR5cGVkIiwiX29uYmx1ciIsImtleUlzRG93biIsIl9oYXNNb3VzZUludGVyYWN0ZWQiLCJtb3VzZVgiLCJtb3VzZVkiLCJwbW91c2VYIiwicG1vdXNlWSIsIndpbk1vdXNlWCIsIndpbk1vdXNlWSIsInB3aW5Nb3VzZVgiLCJwd2luTW91c2VZIiwibW91c2VCdXR0b24iLCJtb3VzZUlzUHJlc3NlZCIsIl91cGRhdGVOZXh0TW91c2VDb29yZHMiLCJ0b3VjaGVzIiwiY2xpZW50WCIsImNoYW5nZWRUb3VjaGVzIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwic2Nyb2xsV2lkdGgiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRZIiwidG9wIiwid2luWCIsIndpblkiLCJpZGVudGlmaWVyIiwiX21vdXNlV2hlZWxEZWx0YVkiLCJidXR0b24iLCJfb25tb3VzZW1vdmUiLCJtb3VzZURyYWdnZWQiLCJfb25tb3VzZWRvd24iLCJfb25tb3VzZXVwIiwiX29uZHJhZ2VuZCIsIl9vbmRyYWdvdmVyIiwiX29uY2xpY2siLCJfb25kYmxjbGljayIsIl9wbW91c2VXaGVlbERlbHRhWSIsIl9vbndoZWVsIiwiZGVsdGFZIiwiX3VwZGF0ZVRvdWNoQ29vcmRzIiwiX29udG91Y2hzdGFydCIsIl9vbnRvdWNobW92ZSIsIl9vbnRvdWNoZW5kIiwiSW50MzJBcnJheSIsIl9nZXRBUkdCIiwiX3NldFBpeGVscyIsIkltYWdlRGF0YSIsIl90b0ltYWdlRGF0YSIsIl9jcmVhdGVJbWFnZURhdGEiLCJfdG1wQ2FudmFzIiwiX3RtcEN0eCIsIm9wYXF1ZSIsImludmVydCIsInBvc3Rlcml6ZSIsImRpbGF0ZSIsImVyb2RlIiwiY3JlYXRlSW1hZ2UiLCJzYXZlQ2FudmFzIiwiSFRNTENhbnZhc0VsZW1lbnQiLCJfY2hlY2tGaWxlRXh0ZW5zaW9uIiwidG9CbG9iIiwic2F2ZUZyYW1lcyIsImNvbnN0cmFpbiIsIl9tYWtlRnJhbWUiLCJzZXRJbnRlcnZhbCIsImZpbGVuYW1lIiwiZXh0IiwidG9EYXRhVVJMIiwiY3Jvc3NPcmlnaW4iLCJ2aWRlb1dpZHRoIiwidmlkZW9IZWlnaHQiLCJ0aW50Iiwibm9UaW50IiwiaW1hZ2VNb2RlIiwiLi4vY29yZS9oZWxwZXJzIiwiLi9maWx0ZXJzIiwiX21vZGlmaWVkIiwic2V0TW9kaWZpZWQiLCJtYXNrIiwiaXNNb2RpZmllZCIsIi4uL2NvbG9yL3A1LkNvbG9yIiwiaHR0cERvIiwibGFzdEluZGV4T2YiLCJjdXJyZW50U3RhdGUiLCJ0b2tlbiIsImVzY2FwZWQiLCJjb2x1bW5zIiwiVGFibGVSb3ciLCJvYmoiLCJhZGRSb3ciLCJieXRlcyIsImh0dHBHZXQiLCJodHRwUG9zdCIsIkNvbnRlbnQtVHlwZSIsIlhNTCIsImNoaWxkTm9kZXMiLCJhZGRDaGlsZCIsInNldE5hbWUiLCJub2RlTmFtZSIsIl9zZXRDb250IiwidGV4dENvbnRlbnQiLCJfc2V0QXR0cmlidXRlcyIsImNoaWxkcmVuIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiX3BXcml0ZXJzIiwiUHJpbnRXcml0ZXIiLCJtaWxsaXMiLCJ3cml0ZUZpbGUiLCJzYXZlU3RyaW5ncyIsIlNvdW5kRmlsZSIsInNhdmVTb3VuZCIsInNhdmVKU09OT2JqZWN0Iiwic2F2ZUpTT05BcnJheSIsInJvd3MiLCJnZXRTdHJpbmciLCJfaXNTYWZhcmkiLCJvbmNsaWNrIiwiYWxlcnQiLCJlczYtcHJvbWlzZSIsImZldGNoLWpzb25wIiwiZmlsZS1zYXZlciIsIndoYXR3Zy1mZXRjaCIsInJlbW92ZVJvdyIsImdldFJvdyIsImdldFJvd3MiLCJmaW5kUm93IiwiZmluZFJvd3MiLCJtYXRjaFJvdyIsIm1hdGNoUm93cyIsImdldENvbHVtbiIsImNsZWFyUm93cyIsImFkZENvbHVtbiIsImdldENvbHVtbkNvdW50IiwiZ2V0Um93Q291bnQiLCJyZW1vdmVUb2tlbnMiLCJyZW1vdmVDb2x1bW4iLCJzZXROdW0iLCJzZXRTdHJpbmciLCJnZXROdW0iLCJnZXRPYmplY3QiLCJnZXRBcnJheSIsImF0dHJpYnV0ZXMiLCJnZXRQYXJlbnQiLCJnZXROYW1lIiwiaGFzQ2hpbGRyZW4iLCJsaXN0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbiIsImdldENoaWxkIiwiZ2V0QXR0cmlidXRlQ291bnQiLCJsaXN0QXR0cmlidXRlcyIsImhhc0F0dHJpYnV0ZSIsImdldENvbnRlbnQiLCJzZXRDb250ZW50Iiwibm9kZVZhbHVlIiwiaHlwb3QiLCJtYWciLCJub3JtIiwic3EiLCJjcmVhdGVWZWN0b3IiLCJub2lzZURldGFpbCIsIm5vaXNlU2VlZCIsInNldFNlZWQiLCJnZXRTZWVkIiwicDUiLCJtYWdTcSIsImNyb3NzIiwibm9ybWFsaXplIiwibGltaXQiLCJzZXRNYWciLCJoZWFkaW5nIiwiYXRhbjIiLCJfZnJvbVJhZGlhbnMiLCJhbmdsZUJldHdlZW4iLCJhY29zIiwiZnJvbUFuZ2xlIiwiZnJvbUFuZ2xlcyIsInJhbmRvbTJEIiwicmFuZG9tM0QiLCJyYW5kb21TZWVkIiwicmFuZG9tR2F1c3NpYW4iLCJfYW5nbGVNb2RlIiwiYXNpbiIsImRlZ3JlZXMiLCJyYWRpYW5zIiwiYW5nbGVNb2RlIiwiX3RvRGVncmVlcyIsInRleHRGb250Iiwib3BlbnR5cGUuanMiLCJzYW1wbGVGYWN0b3IiLCJzaW1wbGlmeVRocmVzaG9sZCIsInRtcFBvaW50MSIsInRtcFBvaW50MiIsInF4IiwicXkiLCJjYWNoZSIsInRleHRCb3VuZHMiLCJhZHZhbmNlIiwiX2hhbmRsZUFsaWdubWVudCIsInRleHRUb1BvaW50cyIsIl9nZXRHbHlwaHMiLCJfZ2V0UGF0aCIsIl9nZXRQYXRoRGF0YSIsImRlY2ltYWxzIiwiX2dldFNWRyIsImFycmF5Q29weSIsInNob3J0ZW4iLCJzaHVmZmxlIiwic3Vic2V0IiwiZmxvYXQiLCJpbnQiLCJzdHIiLCJib29sZWFuIiwiY2hhciIsInVuY2hhciIsImhleCIsInVuaGV4IiwibWF0Y2hBbGwiLCJuZmMiLCJuZnAiLCJuZnMiLCJzcGxpdFRva2VucyIsImRheSIsImdldERhdGUiLCJob3VyIiwiZ2V0SG91cnMiLCJtaW51dGUiLCJnZXRNaW51dGVzIiwibW9udGgiLCJnZXRNb250aCIsInNlY29uZCIsImdldFNlY29uZHMiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJwbGFuZSIsImdlb21ldHJ5SW5IYXNoIiwiR2VvbWV0cnkiLCJkZXRhaWxZIiwiZGV0YWlsWCIsInZlcnRpY2VzIiwidXZzIiwiY29tcHV0ZUZhY2VzIiwiY29tcHV0ZU5vcm1hbHMiLCJfbWFrZVRyaWFuZ2xlRWRnZXMiLCJfZWRnZXNUb1ZlcnRpY2VzIiwiZHJhd0J1ZmZlcnNTY2FsZWQiLCJib3giLCJwZXJQaXhlbExpZ2h0aW5nIiwic3Ryb2tlSW5kaWNlcyIsImZhY2VzIiwic3BoZXJlIiwiZWxsaXBzb2lkIiwidmVydGV4Tm9ybWFscyIsImN5bGluZGVyIiwiY29uZSIsInRvcnVzIiwiX3VzZVBvaW50U2hhZGVyIiwiY3VyUG9pbnRTaGFkZXIiLCJiaW5kU2hhZGVyIiwiX2RyYXdQb2ludHMiLCJfcG9pbnRWZXJ0ZXhCdWZmZXIiLCJ1bmJpbmRTaGFkZXIiLCJ1TVZNYXRyaXgiLCJNYXRyaXgiLCJkcmF3QnVmZmVycyIsImltbWVkaWF0ZU1vZGUiLCJfYmV6aWVyVmVydGV4IiwiX2xvb2tVcFRhYmxlQmV6aWVyIiwiX2x1dEJlemllckRldGFpbCIsIl9iZXppZXJDb2VmZmljaWVudHMiLCJpc0JlemllciIsIl9xdWFkcmF0aWNWZXJ0ZXgiLCJfbG9va1VwVGFibGVRdWFkcmF0aWMiLCJfbHV0UXVhZHJhdGljRGV0YWlsIiwiX3F1YWRyYXRpY0NvZWZmaWNpZW50cyIsImlzUXVhZHJhdGljIiwiX2N1cnZlVmVydGV4IiwiaXNDdXJ2ZSIsIl9iZXppZXJUb0NhdG11bGwiLCIuL3A1Lkdlb21ldHJ5Iiwib3JiaXRDb250cm9sIiwiX2N1ckNhbWVyYSIsImNvbnRleHRNZW51RGlzYWJsZWQiLCJvbmNvbnRleHRtZW51Iiwid2hlZWxEZWZhdWx0RGlzYWJsZWQiLCJvbndoZWVsIiwiX29yYml0IiwiX2dldExvY2FsQXhlcyIsImV5ZVgiLCJleWVZIiwiZXllWiIsImRlYnVnTW9kZSIsIl9ncmlkIiwiX2F4ZXNJY29uIiwibm9EZWJ1Z01vZGUiLCJjdXJTdHJva2VDb2xvciIsImNhbWVyYU1hdHJpeCIsIm1hdDQiLCJhbWJpZW50TGlnaHQiLCJfdXNlTGlnaHRTaGFkZXIiLCJzZXRVbmlmb3JtIiwiY3VyRmlsbENvbG9yIiwiYW1iaWVudExpZ2h0Q29sb3JzIiwiZGlyZWN0aW9uYWxMaWdodCIsImRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25zIiwiZGlyZWN0aW9uYWxMaWdodENvbG9ycyIsInBvaW50TGlnaHQiLCJwb2ludExpZ2h0UG9zaXRpb25zIiwicG9pbnRMaWdodENvbG9ycyIsImdpZCIsInZ0Iiwidm4iLCJtb2RlbCIsIlNoYWRlciIsIl9mcmFnU3JjIiwiX3ZlcnRTcmMiLCJjcmVhdGVTaGFkZXIiLCJzaGFkZXIiLCJpc1N0cm9rZVNoYWRlciIsInNldFN0cm9rZVNoYWRlciIsInNldEZpbGxTaGFkZXIiLCJub3JtYWxNYXRlcmlhbCIsImRyYXdNb2RlIiwiX2dldE5vcm1hbFNoYWRlciIsInRleHR1cmUiLCJhbWJpZW50TWF0ZXJpYWwiLCJzcGVjdWxhck1hdGVyaWFsIiwiX2FwcGx5Q29sb3JCbGVuZCIsIkdMIiwiZGVwdGhNYXNrIiwiZW5hYmxlIiwiYmxlbmRFcXVhdGlvbiIsIkZVTkNfQUREIiwiYmxlbmRGdW5jIiwiU1JDX0FMUEhBIiwiT05FX01JTlVTX1NSQ19BTFBIQSIsImRpc2FibGUiLCIuL3A1LlRleHR1cmUiLCJjYW1lcmEiLCJwZXJzcGVjdGl2ZSIsIm9ydGhvIiwiY3JlYXRlQ2FtZXJhIiwiQ2FtZXJhIiwiX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3MiLCJfc2V0RGVmYXVsdENhbWVyYSIsImNhbWVyYVR5cGUiLCJwcm9qTWF0cml4IiwiZGVmYXVsdENhbWVyYUZPViIsImNhbWVyYUZPViIsImRlZmF1bHRBc3BlY3RSYXRpbyIsImRlZmF1bHRDYW1lcmFOZWFyIiwiZGVmYXVsdENhbWVyYUZhciIsImFzcGVjdFJhdGlvIiwiY2FtZXJhTmVhciIsImNhbWVyYUZhciIsImlkZW50aXR5IiwiX2lzQWN0aXZlIiwidVBNYXRyaXgiLCJfcm90YXRlVmlldyIsImNlbnRlclgiLCJjZW50ZXJZIiwiY2VudGVyWiIsInRpbHQiLCJsb29rQXQiLCJkZWZhdWx0RXllWCIsImRlZmF1bHRFeWVZIiwiZGVmYXVsdEV5ZVoiLCJtb3ZlIiwiZGVmYXVsdENlbnRlclgiLCJkZWZhdWx0Q2VudGVyWSIsImRlZmF1bHRDZW50ZXJaIiwiX3Jlc2l6ZSIsInNldENhbWVyYSIsImxpbmVWZXJ0aWNlcyIsImxpbmVOb3JtYWxzIiwiZWRnZXMiLCJfZ2V0RmFjZU5vcm1hbCIsImF2ZXJhZ2VOb3JtYWxzIiwiYXZlcmFnZVBvbGVOb3JtYWxzIiwibWF0MyIsImludmVydDN4MyIsInRyYW5zcG9zZTN4MyIsImludmVyc2VUcmFuc3Bvc2UiLCJkZXRlcm1pbmFudCIsInNoYXBlTW9kZSIsInZlcnRleENvbG9ycyIsInV2Q29vcmRzIiwidmVydGV4QnVmZmVyIiwiY29sb3JCdWZmZXIiLCJ1dkJ1ZmZlciIsImxpbmVWZXJ0ZXhCdWZmZXIiLCJsaW5lTm9ybWFsQnVmZmVyIiwicG9pbnRWZXJ0ZXhCdWZmZXIiLCJpc0ltbWVkaWF0ZURyYXdpbmciLCJfdXNlSW1tZWRpYXRlTW9kZVNoYWRlciIsIl9kcmF3U3Ryb2tlSW1tZWRpYXRlTW9kZSIsIl92VG9OQXJyYXkiLCJfdHJpYW5ndWxhdGUiLCJfZHJhd0ZpbGxJbW1lZGlhdGVNb2RlIiwiY3VyRmlsbFNoYWRlciIsImFQb3NpdGlvbiIsIl9iaW5kQnVmZmVyIiwiQVJSQVlfQlVGRkVSIiwiRFlOQU1JQ19EUkFXIiwiZW5hYmxlQXR0cmliIiwiRkxPQVQiLCJhVmVydGV4Q29sb3IiLCJhVGV4Q29vcmQiLCJkcmF3QXJyYXlzIiwiY3VyU3Ryb2tlU2hhZGVyIiwiX2ZsYXR0ZW4iLCJTVEFUSUNfRFJBVyIsImFEaXJlY3Rpb24iLCJfaW5pdEJ1ZmZlckRlZmF1bHRzIiwiX2ZyZWVCdWZmZXJzIiwiZ0hhc2giLCJkZWxldGVCdWZmZXIiLCJub3JtYWxCdWZmZXIiLCJpbmRleEJ1ZmZlciIsIm51bWJlck9mSXRlbXMiLCJsaW5lVmVydGV4Q291bnQiLCJfdXNlQ29sb3JTaGFkZXIiLCJFTEVNRU5UX0FSUkFZX0JVRkZFUiIsImFOb3JtYWwiLCJfZHJhd0FycmF5cyIsIl9kcmF3RWxlbWVudHMiLCJkcmF3RWxlbWVudHMiLCJVTlNJR05FRF9TSE9SVCIsIlBvaW50cyIsImltbWVkaWF0ZVZlcnQiLCJ2ZXJ0ZXhDb2xvclZlcnQiLCJ2ZXJ0ZXhDb2xvckZyYWciLCJub3JtYWxWZXJ0Iiwibm9ybWFsRnJhZyIsImJhc2ljRnJhZyIsImxpZ2h0VmVydCIsImxpZ2h0VGV4dHVyZUZyYWciLCJwaG9uZ1ZlcnQiLCJwaG9uZ0ZyYWciLCJmb250VmVydCIsImZvbnRGcmFnIiwibGluZVZlcnQiLCJsaW5lRnJhZyIsInBvaW50VmVydCIsInBvaW50RnJhZyIsInN0ZW5jaWwiLCJhbnRpYWxpYXMiLCJwcmVtdWx0aXBsaWVkQWxwaGEiLCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIiLCJfaW5pdENvbnRleHQiLCJ1Tk1hdHJpeCIsIl9kZWZhdWx0TGlnaHRTaGFkZXIiLCJfZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXIiLCJfZGVmYXVsdE5vcm1hbFNoYWRlciIsIl9kZWZhdWx0Q29sb3JTaGFkZXIiLCJfZGVmYXVsdFBvaW50U2hhZGVyIiwiX2dldExpbmVTaGFkZXIiLCJwb2ludFNpemUiLCJ0ZXh0dXJlcyIsIl90ZXNzeSIsIl9pbml0VGVzc3kiLCJmb250SW5mb3MiLCJERVBUSF9URVNUIiwiZGVwdGhGdW5jIiwiTEVRVUFMIiwidmlld3BvcnQiLCJkcmF3aW5nQnVmZmVyV2lkdGgiLCJkcmF3aW5nQnVmZmVySGVpZ2h0IiwiX3ZpZXdwb3J0IiwiZ2V0UGFyYW1ldGVyIiwiVklFV1BPUlQiLCJfcmVzZXRDb250ZXh0Iiwic2V0QXR0cmlidXRlcyIsImNsZWFyQ29sb3IiLCJDT0xPUl9CVUZGRVJfQklUIiwiREVQVEhfQlVGRkVSX0JJVCIsIl9nZXRJbW1lZGlhdGVNb2RlU2hhZGVyIiwiX2dldENvbG9yU2hhZGVyIiwiY3VyU3Ryb2tlV2VpZ2h0IiwicmVhZFBpeGVscyIsIlVOU0lHTkVEX0JZVEUiLCJzZXRQb2ludFNoYWRlciIsImlzTGlnaHRTaGFkZXIiLCJfZ2V0TGlnaHRTaGFkZXIiLCJfZ2V0UG9pbnRTaGFkZXIiLCJfZGVmYXVsdExpbmVTaGFkZXIiLCJfZ2V0Rm9udFNoYWRlciIsIl9kZWZhdWx0Rm9udFNoYWRlciIsImdldEV4dGVuc2lvbiIsIl9nZXRFbXB0eVRleHR1cmUiLCJfZW1wdHlUZXh0dXJlIiwiVGV4dHVyZSIsImdldFRleHR1cmUiLCJiaW5kQnVmZmVyIiwiYnVmZmVyRGF0YSIsIi4uL2NvcmUvcDUuUmVuZGVyZXIiLCIuL3A1LkNhbWVyYSIsIi4vcDUuTWF0cml4IiwiLi9wNS5TaGFkZXIiLCJfdmVydFNoYWRlciIsIl9mcmFnU2hhZGVyIiwiX2dsUHJvZ3JhbSIsIl9sb2FkZWRBdHRyaWJ1dGVzIiwiX2xvYWRlZFVuaWZvcm1zIiwidW5pZm9ybXMiLCJfYm91bmQiLCJzYW1wbGVycyIsIlZFUlRFWF9TSEFERVIiLCJzaGFkZXJTb3VyY2UiLCJjb21waWxlU2hhZGVyIiwiZ2V0U2hhZGVyUGFyYW1ldGVyIiwiQ09NUElMRV9TVEFUVVMiLCJnZXRTaGFkZXJJbmZvTG9nIiwiRlJBR01FTlRfU0hBREVSIiwiY3JlYXRlUHJvZ3JhbSIsImF0dGFjaFNoYWRlciIsImxpbmtQcm9ncmFtIiwiZ2V0UHJvZ3JhbVBhcmFtZXRlciIsIkxJTktfU1RBVFVTIiwiZ2V0UHJvZ3JhbUluZm9Mb2ciLCJfbG9hZEF0dHJpYnV0ZXMiLCJfbG9hZFVuaWZvcm1zIiwiQUNUSVZFX0FUVFJJQlVURVMiLCJnZXRBY3RpdmVBdHRyaWIiLCJnZXRBdHRyaWJMb2NhdGlvbiIsIkFDVElWRV9VTklGT1JNUyIsImdldEFjdGl2ZVVuaWZvcm0iLCJnZXRVbmlmb3JtTG9jYXRpb24iLCJTQU1QTEVSXzJEIiwic2FtcGxlckluZGV4IiwiY29tcGlsZSIsInVzZVByb2dyYW0iLCJiaW5kVGV4dHVyZXMiLCJfc2V0TWF0cml4VW5pZm9ybXMiLCJfc2V0Vmlld3BvcnRVbmlmb3JtIiwidW5iaW5kVGV4dHVyZXMiLCJhY3RpdmVUZXh0dXJlIiwiVEVYVFVSRTAiLCJiaW5kVGV4dHVyZSIsInVwZGF0ZSIsInVuaWZvcm0xaSIsInVwZGF0ZVRleHR1cmVzIiwiQk9PTCIsIklOVCIsInVuaWZvcm0xaXYiLCJ1bmlmb3JtMWZ2IiwidW5pZm9ybTFmIiwiRkxPQVRfTUFUMyIsInVuaWZvcm1NYXRyaXgzZnYiLCJGTE9BVF9NQVQ0IiwidW5pZm9ybU1hdHJpeDRmdiIsIkZMT0FUX1ZFQzIiLCJ1bmlmb3JtMmZ2IiwidW5pZm9ybTJmIiwiRkxPQVRfVkVDMyIsInVuaWZvcm0zZnYiLCJ1bmlmb3JtM2YiLCJGTE9BVF9WRUM0IiwidW5pZm9ybTRmdiIsInVuaWZvcm00ZiIsIklOVF9WRUMyIiwidW5pZm9ybTJpdiIsInVuaWZvcm0yaSIsIklOVF9WRUMzIiwidW5pZm9ybTNpdiIsInVuaWZvcm0zaSIsIklOVF9WRUM0IiwidW5pZm9ybTRpdiIsInVuaWZvcm00aSIsInVVc2VMaWdodGluZyIsInVBbWJpZW50TGlnaHRDb3VudCIsInVEaXJlY3Rpb25hbExpZ2h0Q291bnQiLCJ1UG9pbnRMaWdodENvdW50IiwidUFtYmllbnRDb2xvciIsInVEaXJlY3Rpb25hbENvbG9yIiwidVBvaW50TGlnaHRMb2NhdGlvbiIsInVQb2ludExpZ2h0Q29sb3IiLCJ1TGlnaHRpbmdEaXJlY3Rpb24iLCJ1U3BlY3VsYXIiLCJpc1RleHR1cmVTaGFkZXIiLCJpc0NvbG9yU2hhZGVyIiwidU1hdGVyaWFsQ29sb3IiLCJpc1RleExpZ2h0U2hhZGVyIiwidVN0cm9rZVdlaWdodCIsImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwidmVydGV4QXR0cmliUG9pbnRlciIsImdsVGV4IiwiZ2xUYXJnZXQiLCJURVhUVVJFXzJEIiwiZ2xGb3JtYXQiLCJtaXBtYXBzIiwiZ2xNaW5GaWx0ZXIiLCJnbE1hZ0ZpbHRlciIsImdsV3JhcFMiLCJDTEFNUF9UT19FREdFIiwiZ2xXcmFwVCIsImlzU3JjTWVkaWFFbGVtZW50IiwiX3ZpZGVvUHJldlVwZGF0ZVRpbWUiLCJpc1NyY0hUTUxFbGVtZW50IiwiaXNTcmNQNUltYWdlIiwiaXNTcmNQNUdyYXBoaWNzIiwiaXNJbWFnZURhdGEiLCJfZ2V0VGV4dHVyZURhdGFGcm9tU291cmNlIiwiY3JlYXRlVGV4dHVyZSIsInRleFBhcmFtZXRlcmkiLCJURVhUVVJFX01BR19GSUxURVIiLCJURVhUVVJFX01JTl9GSUxURVIiLCJURVhUVVJFX1dSQVBfUyIsIlRFWFRVUkVfV1JBUF9UIiwibG9hZGVkbWV0YWRhdGEiLCJ0ZXhJbWFnZTJEIiwiX2RpcnR5IiwidW5iaW5kVGV4dHVyZSIsInNldEludGVycG9sYXRpb24iLCJzZXRXcmFwTW9kZSIsIk1JUlJPUkVEX1JFUEVBVCIsImluZm9zIiwiZmluZEltYWdlIiwic3Ryb2tlSW1hZ2VJbmZvcyIsImNvbERpbUltYWdlSW5mb3MiLCJyb3dEaW1JbWFnZUluZm9zIiwiY29sQ2VsbEltYWdlSW5mb3MiLCJyb3dDZWxsSW1hZ2VJbmZvcyIsImdseXBoSW5mb3MiLCJnZXRHbHlwaEluZm8iLCJwMCIsImMwIiwiYzEiLCJwMSIsInRvUXVhZHJhdGljIiwicXVhZEVycm9yIiwic3BsaXRJbmZsZWN0aW9ucyIsImNlbGxJbWFnZUluZm8iLCJkaW1PZmZzZXQiLCJkaW1JbWFnZUluZm8iLCJnbHlwaCIsInVHbHlwaFJlY3QiLCJzdHJva2VJbWFnZUluZm8iLCJzdHJva2VzIiwiY29sSW5mbyIsInJvd0luZm8iLCJ1R3JpZE9mZnNldCIsIl9mb250SW5mbyIsIl90ZXh0R2VvbSIsIi4vcDUuUmVuZGVyZXJHTCIsInRzbmVqcyIsIlJFVklTSU9OIiwiY29uZGl0aW9uIiwiZ2V0b3B0Iiwib3B0IiwiZmllbGQiLCJkZWZhdWx0dmFsIiwicmV0dXJuX3YiLCJ2X3ZhbCIsImdhdXNzUmFuZG9tIiwicmFuZG4iLCJtdSIsInN0ZCIsInplcm9zIiwiRmxvYXQ2NEFycmF5IiwicmFuZG4yZCIsInVzZXMiLCJ4aGVyZSIsIkwyIiwieDFpIiwieDJpIiwiZDJwIiwicGVycGxleGl0eSIsInRvbCIsIk5mIiwiSHRhcmdldCIsInByb3ciLCJiZXRhbWluIiwiYmV0YW1heCIsIm51bSIsInBzdW0iLCJwaiIsIkhoZXJlIiwiUG91dCIsIk4yIiwidFNORSIsImRpbSIsImVwc2lsb24iLCJpdGVyIiwiaW5pdERhdGFSYXciLCJkaXN0cyIsInh0b2QiLCJpbml0U29sdXRpb24iLCJpbml0RGF0YURpc3QiLCJnYWlucyIsInlzdGVwIiwiZ2V0U29sdXRpb24iLCJjZyIsImNvc3RHcmFkIiwiY29zdCIsImdyYWQiLCJ5bWVhbiIsInNpZCIsImdhaW5pZCIsIm5ld2dhaW4iLCJuZXdzaWQiLCJkZWJ1Z0dyYWQiLCJ5b2xkIiwiY2cwIiwiY2cxIiwiYW5hbHl0aWMiLCJudW1lcmljYWwiLCJwbXVsIiwiUXUiLCJxc3VtIiwiZHN1bSIsImRoZXJlIiwicXUiLCJOTiIsImdzdW0iLCJwcmVtdWx0IiwibGliIiwiX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fIiwiX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyIsIlRhcExpc3RlbmVyIiwiZWxlbWVudCIsIl9kcmFnZ2VkIiwiX2VsZW1lbnQiLCJfYmluZGVkTW92ZSIsIl9tb3ZlZCIsIl9iaW5kZWRFbmQiLCJfZW5kZWQiLCJpc1N0YXJ0ZWQiLCJzdGFydENvbnRleHQiLCJlbGVtZW50cyIsImNoZWNrTG9vcCIsIm9uU3RhcnRlZCIsInRhcExpc3RlbmVycyIsImJpbmRUYXBMaXN0ZW5lciIsIk5vZGVMaXN0IiwicXVlcnlTZWxlY3RvckFsbCIsImpxdWVyeSIsInRhcCIsIl9fd2VicGFja19leHBvcnRzX18iLCJwNV9saWJfcDVfbWluX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18iLCJwNV9saWJfcDVfbWluX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCIsInRvbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyIsInRvbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0IiwidHNuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fIiwidHNuZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQiLCJzdGFydGF1ZGlvY29udGV4dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fIiwic3RhcnRhdWRpb2NvbnRleHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0Iiwic2tldGNoIiwiRGF0YVBvaW50IiwiW29iamVjdCBPYmplY3RdIiwidHJpZyIsImNhblRyaWciLCJybmQiLCJzeW50aHMiLCJ0c25lIiwic3RlcENvdW50IiwicGxheUhlYWR4IiwicGxheUhlYWR5IiwicGFubmVyIiwiZnJlZXZlcmIiLCJmMSIsImYyIiwiZjMiLCJzZXRDb2wiLCJzZXRTaXplIiwienAiLCJ0YXJnZXRYIiwidGFyZ2V0WSIsInNldFBvcyIsImRyYXdQb2ludCIsImV2YWwiXSwibWFwcGluZ3MiOiJhQUNBLElBQUFBLEtBR0EsU0FBQUMsRUFBQUMsR0FHQSxHQUFBRixFQUFBRSxH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QUFDLEdBQUEsVUFBQUMsR0FBQSxVQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLFFBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLFVBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsYUFBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsTUFBdytCQyxJQUFLN0csRUFBQSxFQUFBaDJCLEVBQUEsRUFBQUssRUFBQSxFQUFBQyxFQUFBLEVBQUFrRyxFQUFBLEVBQUErQyxFQUFBLEVBQUFhLEVBQUEsRUFBQTJCLEVBQUEsRUFBQUcsRUFBQSxFQUFBQyxFQUFBLEVBQUEwRCxHQUFBLEVBQUFvbUIsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUM3cCtCQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxHQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxHQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsR0FBa2lCNXZDLElBQUs4dkMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxNQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsTUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFVBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsVUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxTQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsTUFBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxVQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLFNBQUFDLEtBQUEsTUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxNQUFBQyxLQUFBLFNBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLGFBQUFDLEtBQUEsS0FBQUMsS0FBQSxhQUFBQyxLQUFBLFVBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsVUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUF5ekU1eUIsR0FBQSxTQUFBRSxJQUFpQmdmLEVBQUEsWUFBQWgyQixFQUFBLGlCQUFBSyxFQUFBLG9CQUFBQyxFQUFBLGVBQUE4SixFQUFBLGNBQUEyQixFQUFBLGlCQUFBSSxFQUFBLGtCQUFBMEQsR0FBQSxpQkFBQW9tQixHQUFBLGlC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Z1EsS0FBQSxVQUFBdFAsTUFBQWhCLElBQXNDdWdDLElBR3R1WjhtRCxLQUFNQyxNQUFBLEVBQUE3N0UsSUFBQSxNQUFrQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxPQUFxQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxRQUF1QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLFFBQUE3N0UsSUFBQSxVQUE0QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1B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QUFBaDhELFVBQUEsS0FBQWc4RCxHQUFBaDhELFVBQUEsS0FBQWc4RCxHQUFBaDhELFVBQUEsS0FBQWc4RCxHQUFBaDhELFVBQUEsS0FBQWc4RCxHQUFBaDhELFVBQUEsS0FBQWc4RCxHQUFBaDhELFVBQUEsS0FBQWc4RCxHQUFBaDhELFVBQUEsS0FBQWc4RCxHQUFBaDhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4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QUMsWUFBQSxVQUFBQyxlQUFBLFVBQUFDLFdBQUEsVUFBQUMsV0FBQSxVQUFBQyxRQUFBLFVBQUFDLFdBQUEsVUFBQUMsYUFBQSxVQUFBQyxjQUFBLFVBQUFDLGNBQUEsVUFBQUMsY0FBQSxVQUFBQyxjQUFBLFVBQUFDLFdBQUEsVUFBQUMsU0FBQSxVQUFBQyxZQUFBLFVBQUFDLFFBQUEsVUFBQUMsUUFBQSxVQUFBQyxXQUFBLFVBQUFDLFVBQUEsVUFBQUMsWUFBQSxVQUFBQyxZQUFBLFVBQUFDLFFBQUEsVUFBQUMsVUFBQSxVQUFBQyxXQUFBLFVBQUFDLEtBQUEsVUFBQUMsVUFBQSxVQUFBQyxLQUFBLFVBQUF0RixNQUFBLFVBQUF1RixZQUFBLFVBQUFDLEtBQUEsVUFBQUMsU0FBQSxVQUFBQyxRQUFBLFVBQUFDLFVBQUEsVUFBQUMsT0FBQSxVQUFBQyxNQUFBLFVBQUFDLE1BQUEsVUFBQUMsU0FBQSxVQUFBQyxjQUFBLFVBQUFDLFVBQUEsVUFBQUMsYUFBQSxVQUFBQyxVQUFBLFVBQUFDLFdBQUEsVUFBQUMsVUFBQSxVQUFBQyxxQkFBQSxVQUFBQyxVQUFBLFVBQUFDLFdBQUEsVUFBQUMsVUFBQSxVQUFBQyxVQUFBLFVBQUFDLFlBQUEsVUFBQUMsY0FBQSxVQUFBQyxhQUFBLFVBQUFDLGVBQUEsVUFBQUMsZUFBQSxVQUFBQyxlQUFBLFVBQUFDLFlBQUEsVUFBQUMsS0FBQSxVQUFBQyxVQUFBLFVBQUFDLE1BQUEsVUFBQUMsUUFBQSxVQUFBQyxPQUFBLFVBQUFDLGlCQUFBLFVBQUFDLFdBQUEsVUFBQUMsYUFBQSxVQUFBQyxhQUFBLFVBQUFDLGVBQUEsVUFBQUMsZ0JBQUEsVUFBQUMsa0JBQUEsVUFBQUMsZ0JBQUEsVUFBQUMsZ0JBQUEsVUFBQUMsYUFBQSxVQUFBQyxVQUFBLFVBQUFDLFVBQUEsVUFBQUMsU0FBQSxVQUFBQyxZQUFBLFVBQUFDLEtBQUEsVUFBQUMsUUFBQSxVQUFBQyxNQUFBLFVBQUFDLFVBQUEsVUFBQUMsT0FBQSxVQUFBQyxVQUFBLFVBQUFDLE9BQUEsVUFBQUMsY0FBQSxVQUFB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QW0xSCxJQUFBLFNBQ0FuMUgsRUFBQXN4RCxRQUVBMGpGLEVBQ0EsS0FDQUQsRUFBQTV4SCxPQUdBLFFBQUFqbEIsRUFBQSxFQUFnQkEsRUFBQWkrQyxFQUFBcjZDLE9BQWE1RCxJQUM3QnErQyxFQUFBcitDLEdBQUEyM0ksT0FBQTcxSSxFQUFBNHZILGFBQUEsR0FBQXp6RSxFQUFBaitDLEdBQUEsTUFBQWkrQyxFQUFBaitDLEdBQUEsTUFBQWkrQyxFQUFBaitDLEdBQUEsS0FBQTQzSSxZQUNBOTFJLEVBQUFzZ0MsS0FBQWljLEVBQUFyK0MsR0FBQTBnQyxJQUFBeEUsRUFBQW1pQixFQUFBcitDLEdBQUEwZ0MsSUFBQUgsRUFBQSxFQUFBdzJHLEVBQUFDLEVBQUEsT0FDQTM0RixFQUFBcitDLEdBQUF5MkksS0FBQSxJQUVBcDRGLEVBQUFyK0MsR0FBQTAySSxTQUFBLEVBSUE1MEksRUFBQSttRyxTQUNBL21HLEVBQUFndEQsT0FBQSxRQUNBaHRELEVBQUFtMUgsSUFBQSxPQUdBbjFILEVBQUF1bEgsV0FBQSxNQUNBLEtBQUF2bEgsRUFBQVAsS0FDQU8sRUFBQXk3RyxLQUFBbDJELEtBQUF2L0MsTUFBQSxVQUdBaEcsRUFBQTgyRyxhQUFBLE1BQ1F5OUIsSUFBa0JKLEVBQUFoN0gsRUFBSWxULFNBQUF3SCxLQUFBLGlCQUlmc21JLEVBQUEsVUFDZixJQUFJRSxFQUFBOTZILEVBQUVxN0gsa0JDbk9OLElBQUExN0gsRUFHQUEsRUFBQSxXQUNBLE9BQUF0WSxLQURBLEdBSUEsSUFFQXNZLEtBQUErckMsU0FBQSxjQUFBQSxLQUFBLEVBQUFreEYsTUFBQSxRQUNDLE1BQUE1cUksR0FFRCxpQkFBQXZFLFNBQUFrUyxFQUFBbFMsUUFPQTNJLEVBQUFELFFBQUE4YSIsImZpbGUiOiJtYWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDQpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3Rvcnkpe1xuXG5cdC8vVU1EXG5cdGlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdFx0ZGVmaW5lKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGZhY3RvcnkoKTtcblx0XHR9KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gXHR9IGVsc2Uge1xuXHRcdHJvb3QuVG9uZSA9IGZhY3RvcnkoKTtcblx0fVxuXG59KHRoaXMsIGZ1bmN0aW9uKCl7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgVG9uZTtcblx0Ly9jb25zdHJ1Y3RzIHRoZSBtYWluIFRvbmUgb2JqZWN0XG5cdGZ1bmN0aW9uIE1haW4oZnVuYyl7XG5cdFx0VG9uZSA9IGZ1bmMoKTtcblx0fVxuXHQvL2ludm9rZXMgZWFjaCBvZiB0aGUgbW9kdWxlcyB3aXRoIHRoZSBtYWluIFRvbmUgb2JqZWN0IGFzIHRoZSBhcmd1bWVudFxuXHRmdW5jdGlvbiBNb2R1bGUoZnVuYyl7XG5cdFx0ZnVuYyhUb25lKTtcblx0fVx0LyoqXG5cdCAqICBUb25lLmpzXG5cdCAqICBAYXV0aG9yIFlvdGFtIE1hbm5cblx0ICogIEBsaWNlbnNlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQgTUlUIExpY2Vuc2Vcblx0ICogIEBjb3B5cmlnaHQgMjAxNC0yMDE4IFlvdGFtIE1hbm5cblx0ICovXG5cdE1haW4oZnVuY3Rpb24gKCkge1xuXHQgICAgXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUT05FXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIG90aGVyIGNsYXNzZXMuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgdmFyIFRvbmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRvbmUpKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY29uc3RydWN0b3IgbmVlZHMgdG8gYmUgY2FsbGVkIHdpdGggdGhlIFxcJ25ld1xcJyBrZXl3b3JkJyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQHJldHVybnMge1N0cmluZ30gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgYXMgYSBzdHJpbmdcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGNsYXNzTmFtZSBpbiBUb25lKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0xldHRlciA9IGNsYXNzTmFtZVswXS5tYXRjaCgvXltBLVpdJC8pO1xuXHQgICAgICAgICAgICB2YXIgc2FtZUNvbnN0cnVjdG9yID0gVG9uZVtjbGFzc05hbWVdID09PSB0aGlzLmNvbnN0cnVjdG9yO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc0Z1bmN0aW9uKFRvbmVbY2xhc3NOYW1lXSkgJiYgaXNMZXR0ZXIgJiYgc2FtZUNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAnVG9uZSc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBkaXNjb25uZWN0IGFuZCBkaXNwb3NlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEdFVC9TRVRcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgcGFyYW1ldGVycyBhdCBvbmNlLiBFaXRoZXIgcGFzcyBpbiBhblxuXHRcdCAqICBvYmplY3QgbWFwcGluZyBwYXJhbWV0ZXJzIHRvIHZhbHVlcywgb3IgdG8gc2V0IGFcblx0XHQgKiAgc2luZ2xlIHBhcmFtZXRlciwgYnkgcGFzc2luZyBpbiBhIHN0cmluZyBhbmQgdmFsdWUuXG5cdFx0ICogIFRoZSBsYXN0IGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIHJhbXAgdGltZSB3aGljaFxuXHRcdCAqICB3aWxsIHJhbXAgYW55IHNpZ25hbCB2YWx1ZXMgdG8gdGhlaXIgZGVzdGluYXRpb24gdmFsdWVcblx0XHQgKiAgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqICBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHBhcmFtc1xuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJhbXBUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfSB0aGlzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHZhbHVlcyB1c2luZyBhbiBvYmplY3Rcblx0XHQgKiBmaWx0ZXIuc2V0KHtcblx0XHQgKiBcdFwiZnJlcXVlbmN5XCIgOiAzMDAsXG5cdFx0ICogXHRcInR5cGVcIiA6IGhpZ2hwYXNzXG5cdFx0ICogfSk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogZmlsdGVyLnNldChcInR5cGVcIiwgXCJoaWdocGFzc1wiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JhbXAgdG8gdGhlIHZhbHVlIDIyMCBvdmVyIDMgc2Vjb25kcy5cblx0XHQgKiBvc2NpbGxhdG9yLnNldCh7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogMjIwXG5cdFx0ICogfSwgMyk7XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocGFyYW1zLCB2YWx1ZSwgcmFtcFRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc09iamVjdChwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHJhbXBUaW1lID0gdmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgdmFyIHRtcE9iaiA9IHt9O1xuXHQgICAgICAgICAgICB0bXBPYmpbcGFyYW1zXSA9IHZhbHVlO1xuXHQgICAgICAgICAgICBwYXJhbXMgPSB0bXBPYmo7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHBhcmFtTG9vcDpcblx0ICAgICAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBwYXJhbXMpIHtcblx0ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW1zW2F0dHJdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgICAgICBpZiAoYXR0ci5pbmRleE9mKCcuJykgIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJTcGxpdCA9IGF0dHIuc3BsaXQoJy4nKTtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJTcGxpdC5sZW5ndGggLSAxOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50W2F0dHJTcGxpdFtpXV07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBUb25lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyU3BsaXQuc3BsaWNlKDAsIGkgKyAxKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbm5lclBhcmFtID0gYXR0clNwbGl0LmpvaW4oJy4nKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5zZXQoaW5uZXJQYXJhbSwgdmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgcGFyYW1Mb29wO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGF0dHIgPSBhdHRyU3BsaXRbYXR0clNwbGl0Lmxlbmd0aCAtIDFdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdmFyIHBhcmFtID0gcGFyZW50W2F0dHJdO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihwYXJhbSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlNpZ25hbCAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuU2lnbmFsIHx8IFRvbmUuUGFyYW0gJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlBhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnZhbHVlICE9PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHJhbXBUaW1lKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0udmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnJhbXBUbyh2YWx1ZSwgcmFtcFRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0udmFsdWUgIT09IHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLlRpbWVCYXNlICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHBhcmVudFthdHRyXSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIFRvbmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJhbS5zZXQodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSAhPT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJlbnRbYXR0cl0gPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIG9iamVjdCdzIGF0dHJpYnV0ZXMuIEdpdmVuIG5vIGFyZ3VtZW50cyBnZXRcblx0XHQgKiAgd2lsbCByZXR1cm4gYWxsIGF2YWlsYWJsZSBvYmplY3QgcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZ1xuXHRcdCAqICB2YWx1ZXMuIFBhc3MgaW4gYSBzaW5nbGUgYXR0cmlidXRlIHRvIHJldHJpZXZlIG9yIGFuIGFycmF5XG5cdFx0ICogIG9mIGF0dHJpYnV0ZXMuIFRoZSBhdHRyaWJ1dGUgc3RyaW5ncyBjYW4gYWxzbyBpbmNsdWRlIGEgXCIuXCJcblx0XHQgKiAgdG8gYWNjZXNzIGRlZXBlciBwcm9wZXJ0aWVzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBvc2MuZ2V0KCk7XG5cdFx0ICogLy9yZXR1cm5zIHtcInR5cGVcIiA6IFwic2luZVwiLCBcImZyZXF1ZW5jeVwiIDogNDQwLCAuLi5ldGN9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogb3NjLmdldChcInR5cGVcIik7XG5cdFx0ICogLy9yZXR1cm5zIHsgXCJ0eXBlXCIgOiBcInNpbmVcIn1cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vdXNlIGRvdCBub3RhdGlvbiB0byBhY2Nlc3MgZGVlcCBwcm9wZXJ0aWVzXG5cdFx0ICogc3ludGguZ2V0KFtcImVudmVsb3BlLmF0dGFja1wiLCBcImVudmVsb3BlLnJlbGVhc2VcIl0pO1xuXHRcdCAqIC8vcmV0dXJucyB7XCJlbnZlbG9wZVwiIDoge1wiYXR0YWNrXCIgOiAwLjIsIFwicmVsZWFzZVwiIDogMC40fX1cblx0XHQgKiAgQHBhcmFtIHtBcnJheT18c3RyaW5nfHVuZGVmaW5lZH0gcGFyYW1zIHRoZSBwYXJhbWV0ZXJzIHRvIGdldCwgb3RoZXJ3aXNlIHdpbGwgcmV0dXJuXG5cdFx0ICogIFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICBhbGwgYXZhaWxhYmxlLlxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYocGFyYW1zKSkge1xuXHQgICAgICAgICAgICBwYXJhbXMgPSB0aGlzLl9jb2xsZWN0RGVmYXVsdHModGhpcy5jb25zdHJ1Y3Rvcik7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgcGFyYW1zID0gW3BhcmFtc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciByZXQgPSB7fTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgYXR0ciA9IHBhcmFtc1tpXTtcblx0ICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgIHZhciBzdWJSZXQgPSByZXQ7XG5cdCAgICAgICAgICAgIGlmIChhdHRyLmluZGV4T2YoJy4nKSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBhdHRyU3BsaXQgPSBhdHRyLnNwbGl0KCcuJyk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHJTcGxpdC5sZW5ndGggLSAxOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgc3ViQXR0ciA9IGF0dHJTcGxpdFtqXTtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJSZXRbc3ViQXR0cl0gPSBzdWJSZXRbc3ViQXR0cl0gfHwge307XG5cdCAgICAgICAgICAgICAgICAgICAgc3ViUmV0ID0gc3ViUmV0W3N1YkF0dHJdO1xuXHQgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFtzdWJBdHRyXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGF0dHIgPSBhdHRyU3BsaXRbYXR0clNwbGl0Lmxlbmd0aCAtIDFdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBwYXJhbSA9IHBhcmVudFthdHRyXTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QocGFyYW1zW2F0dHJdKSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0uZ2V0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5TaWduYWwgJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0udmFsdWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5QYXJhbSAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLnZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgQXVkaW9QYXJhbSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0udmFsdWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBUb25lKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS5nZXQoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICghVG9uZS5pc0Z1bmN0aW9uKHBhcmFtKSAmJiBUb25lLmlzRGVmaW5lZChwYXJhbSkpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbGxlY3QgYWxsIG9mIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgaW4gb25lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0ciB0aGUgY29uc3RydWN0b3IgdG8gZmluZCB0aGUgZGVmYXVsdHMgZnJvbVxuXHRcdCAqICBAcmV0dXJuIHtBcnJheX0gYWxsIG9mIHRoZSBhdHRyaWJ1dGVzIHdoaWNoIGJlbG9uZyB0byB0aGUgY2xhc3Ncblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLl9jb2xsZWN0RGVmYXVsdHMgPSBmdW5jdGlvbiAoY29uc3RyKSB7XG5cdCAgICAgICAgdmFyIHJldCA9IFtdO1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChjb25zdHIuZGVmYXVsdHMpKSB7XG5cdCAgICAgICAgICAgIHJldCA9IE9iamVjdC5rZXlzKGNvbnN0ci5kZWZhdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChjb25zdHIuX3N1cGVyKSkge1xuXHQgICAgICAgICAgICB2YXIgc3VwZXJEZWZzID0gdGhpcy5fY29sbGVjdERlZmF1bHRzKGNvbnN0ci5fc3VwZXIpO1xuXHQgICAgICAgICAgICAvL2ZpbHRlciBvdXQgcmVwZWF0c1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1cGVyRGVmcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKHJldC5pbmRleE9mKHN1cGVyRGVmc1tpXSkgPT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goc3VwZXJEZWZzW2ldKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdERFRkFVTFRTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIHZhbHVlcyAgVGhlIGFyZ3VtZW50cyBhcnJheVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIGtleXMgICAgVGhlIG5hbWVzIG9mIHRoZSBhcmd1bWVudHNcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R9IGNvbnN0ciBUaGUgY2xhc3MgY29uc3RydWN0b3Jcblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIEFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgIGRlZmF1bHRzIGJldHdlZW4gdGhlIGNsYXNzJyBkZWZhdWx0c1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBwYXNzZWQgaW4gYXJndW1lbnRzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5kZWZhdWx0cyA9IGZ1bmN0aW9uICh2YWx1ZXMsIGtleXMsIGNvbnN0cikge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0ge307XG5cdCAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDEgJiYgVG9uZS5pc09iamVjdCh2YWx1ZXNbMF0pKSB7XG5cdCAgICAgICAgICAgIG9wdGlvbnMgPSB2YWx1ZXNbMF07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBvcHRpb25zW2tleXNbaV1dID0gdmFsdWVzW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChjb25zdHIuZGVmYXVsdHMpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgY29uc3RyLmRlZmF1bHRzKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNPYmplY3QoY29uc3RyKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIGNvbnN0cik7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgYGdpdmVuYCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCB1c2UgdGhlIGBmYWxsYmFja2AuXG5cdFx0ICogIElmIGJvdGggYGdpdmVuYCBhbmQgYGZhbGxiYWNrYCBhcmUgb2JqZWN0IGxpdGVyYWxzLCBpdCB3aWxsXG5cdFx0ICogIHJldHVybiBhIGRlZXAgY29weSB3aGljaCBpbmNsdWRlcyBhbGwgb2YgdGhlIHBhcmFtZXRlcnMgZnJvbSBib3RoXG5cdFx0ICogIG9iamVjdHMuIElmIGEgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBpbiBnaXZlbiwgaXQgd2lsbCByZXR1cm5cblx0XHQgKiAgdGhlIGZhbGxiYWNrIHByb3BlcnR5LlxuXHRcdCAqICA8YnI+PGJyPlxuXHRcdCAqICBXQVJOSU5HOiBpZiBvYmplY3QgaXMgc2VsZiByZWZlcmVudGlhbCwgaXQgd2lsbCBnbyBpbnRvIGFuIGFuXG5cdFx0ICogIGluZmluaXRlIHJlY3Vyc2l2ZSBsb29wLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAcGFyYW0gIHsqfSBnaXZlblxuXHRcdCAqICBAcGFyYW0gIHsqfSBmYWxsYmFja1xuXHRcdCAqICBAcmV0dXJuIHsqfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5kZWZhdWx0QXJnID0gZnVuY3Rpb24gKGdpdmVuLCBmYWxsYmFjaykge1xuXHQgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGdpdmVuKSAmJiBUb25lLmlzT2JqZWN0KGZhbGxiYWNrKSkge1xuXHQgICAgICAgICAgICB2YXIgcmV0ID0ge307XG5cdCAgICAgICAgICAgIC8vbWFrZSBhIGRlZXAgY29weSBvZiB0aGUgZ2l2ZW4gb2JqZWN0XG5cdCAgICAgICAgICAgIGZvciAodmFyIGdpdmVuUHJvcCBpbiBnaXZlbikge1xuXHQgICAgICAgICAgICAgICAgcmV0W2dpdmVuUHJvcF0gPSBUb25lLmRlZmF1bHRBcmcoZmFsbGJhY2tbZ2l2ZW5Qcm9wXSwgZ2l2ZW5bZ2l2ZW5Qcm9wXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZm9yICh2YXIgZmFsbGJhY2tQcm9wIGluIGZhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgICAgICByZXRbZmFsbGJhY2tQcm9wXSA9IFRvbmUuZGVmYXVsdEFyZyhnaXZlbltmYWxsYmFja1Byb3BdLCBmYWxsYmFja1tmYWxsYmFja1Byb3BdKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmlzVW5kZWYoZ2l2ZW4pID8gZmFsbGJhY2sgOiBnaXZlbjtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0Q09OTkVDVElPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdG9nZXRoZXIgYWxsIG9mIHRoZSBhcmd1bWVudHMgaW4gc2VyaWVzXG5cdFx0ICogIEBwYXJhbSB7Li4uQXVkaW9QYXJhbXxUb25lfEF1ZGlvTm9kZX0gbm9kZXNcblx0XHQgKiAgQHJldHVybnMge1RvbmV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuY29ubmVjdFNlcmllcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY3VycmVudFVuaXQgPSBhcmd1bWVudHNbMF07XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHRvVW5pdCA9IGFyZ3VtZW50c1tpXTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQuY29ubmVjdCh0b1VuaXQpO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdCA9IHRvVW5pdDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmU7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBUWVBFIENIRUNLSU5HXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmcgaXMgdW5kZWZpbmVkXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgdW5kZWZpbmVkXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNVbmRlZiA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZyBpcyBub3QgdW5kZWZpbmVkXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgdW5kZWZpbmVkXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNEZWZpbmVkID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIHJldHVybiAhVG9uZS5pc1VuZGVmKHZhbCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZyBpcyBhIGZ1bmN0aW9uXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBmdW5jdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbic7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgbnVtYmVyXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNOdW1iZXIgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBnaXZlbiBhcmd1bWVudCBpcyBhbiBvYmplY3QgbGl0ZXJhbCAoaS5lLiBge31gKTtcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhbiBvYmplY3QgbGl0ZXJhbC5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc09iamVjdCA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmIGFyZy5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIGJvb2xlYW4uXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBib29sZWFuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNCb29sZWFuID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGFuIEFycmF5XG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYW4gYXJyYXlcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc0FycmF5ID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGEgc3RyaW5nLlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgc3RyaW5nXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNTdHJpbmcgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBpbiB0aGUgZm9ybSBvZiBhIG5vdGUgaW4gc2NpZW50aWZpYyBwaXRjaCBub3RhdGlvbi5cblx0XHQgKiAgZS5nLiBcIkM0XCJcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIHN0cmluZ1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzTm90ZSA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5pc1N0cmluZyhhcmcpICYmIC9eKFthLWddezF9KD86YnwjfHh8YmIpPykoLT9bMC05XSspL2kudGVzdChhcmcpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBbiBlbXB0eSBmdW5jdGlvbi5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5ub09wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBNYWtlIHRoZSBwcm9wZXJ0eSBub3Qgd3JpdGFibGUuIEludGVybmFsIHVzZSBvbmx5LlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wZXJ0eSAgdGhlIHByb3BlcnR5IHRvIG1ha2Ugbm90IHdyaXRhYmxlXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5fcmVhZE9ubHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0eS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVhZE9ubHkocHJvcGVydHlbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB7XG5cdCAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG5cdCAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTWFrZSBhbiBhdHRyaWJ1dGUgd3JpdGVhYmxlLiBJbnRlcmFsIHVzZSBvbmx5LlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wZXJ0eSAgdGhlIHByb3BlcnR5IHRvIG1ha2Ugd3JpdGFibGVcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLl93cml0YWJsZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5KSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93cml0YWJsZShwcm9wZXJ0eVtpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHksIHsgd3JpdGFibGU6IHRydWUgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFBvc3NpYmxlIHBsYXkgc3RhdGVzLlxuXHRcdCAqIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0YXRlID0ge1xuXHQgICAgICAgIFN0YXJ0ZWQ6ICdzdGFydGVkJyxcblx0ICAgICAgICBTdG9wcGVkOiAnc3RvcHBlZCcsXG5cdCAgICAgICAgUGF1c2VkOiAncGF1c2VkJ1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEVxdWFsIHBvd2VyIGdhaW4gc2NhbGUuIEdvb2QgZm9yIGNyb3NzLWZhZGluZy5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9IHBlcmNlbnQgKDAtMSlcblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSAgICAgICAgIG91dHB1dCBnYWluICgwLTEpXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZXF1YWxQb3dlclNjYWxlID0gZnVuY3Rpb24gKHBlcmNlbnQpIHtcblx0ICAgICAgICB2YXIgcGlGYWN0b3IgPSAwLjUgKiBNYXRoLlBJO1xuXHQgICAgICAgIHJldHVybiBNYXRoLnNpbihwZXJjZW50ICogcGlGYWN0b3IpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGRlY2liZWxzIGludG8gZ2Fpbi5cblx0XHQgKiAgQHBhcmFtICB7RGVjaWJlbHN9IGRiXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5kYlRvR2FpbiA9IGZ1bmN0aW9uIChkYikge1xuXHQgICAgICAgIHJldHVybiBNYXRoLnBvdygxMCwgZGIgLyAyMCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZ2FpbiB0byBkZWNpYmVscy5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSBnYWluICgwLTEpXG5cdFx0ICogIEByZXR1cm4ge0RlY2liZWxzfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmdhaW5Ub0RiID0gZnVuY3Rpb24gKGdhaW4pIHtcblx0ICAgICAgICByZXR1cm4gMjAgKiAoTWF0aC5sb2coZ2FpbikgLyBNYXRoLkxOMTApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGFuIGludGVydmFsIChpbiBzZW1pdG9uZXMpIHRvIGEgZnJlcXVlbmN5IHJhdGlvLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbH0gaW50ZXJ2YWwgdGhlIG51bWJlciBvZiBzZW1pdG9uZXMgYWJvdmUgdGhlIGJhc2Ugbm90ZVxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgIHRoZSBmcmVxdWVuY3kgcmF0aW9cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKDApOyAvLyAxXG5cdFx0ICogdG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oMTIpOyAvLyAyXG5cdFx0ICogdG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oLTEyKTsgLy8gMC41XG5cdFx0ICovXG5cdCAgICBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyA9IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgIHJldHVybiBNYXRoLnBvdygyLCBpbnRlcnZhbCAvIDEyKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUSU1JTkdcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSBBdWRpb0NvbnRleHQgY2xvY2suXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gdGhlIGN1cnJlbnRUaW1lIGZyb20gdGhlIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5jb250ZXh0Lm5vdygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBvZiB0aGUgQXVkaW9Db250ZXh0IGNsb2NrLlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBjdXJyZW50VGltZSBmcm9tIHRoZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuY29udGV4dC5ub3coKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRJTkhFUklUQU5DRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgaGF2ZSBhIGNoaWxkIGluaGVyaXQgYWxsIG9mIFRvbmUncyAob3IgYSBwYXJlbnQncykgcHJvdG90eXBlXG5cdFx0ICogIHRvIGluaGVyaXQgdGhlIHBhcmVudCdzIHByb3BlcnRpZXMsIG1ha2Ugc3VyZSB0byBjYWxsXG5cdFx0ICogIFBhcmVudC5jYWxsKHRoaXMpIGluIHRoZSBjaGlsZCdzIGNvbnN0cnVjdG9yXG5cdFx0ICpcblx0XHQgKiAgYmFzZWQgb24gY2xvc3VyZSBsaWJyYXJ5J3MgaW5oZXJpdCBmdW5jdGlvblxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259IFx0Y2hpbGRcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSBwYXJlbnQgKG9wdGlvbmFsKSBwYXJlbnQgdG8gaW5oZXJpdCBmcm9tXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vIHBhcmVudCBpcyBzdXBwbGllZCwgdGhlIGNoaWxkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgaW5oZXJpdCBmcm9tIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZXh0ZW5kID0gZnVuY3Rpb24gKGNoaWxkLCBwYXJlbnQpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHBhcmVudCkpIHtcblx0ICAgICAgICAgICAgcGFyZW50ID0gVG9uZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gVGVtcENvbnN0cnVjdG9yKCkge1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUZW1wQ29uc3RydWN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTtcblx0ICAgICAgICBjaGlsZC5wcm90b3R5cGUgPSBuZXcgVGVtcENvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgLyoqIEBvdmVycmlkZSAqL1xuXHQgICAgICAgIGNoaWxkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuXHQgICAgICAgIGNoaWxkLl9zdXBlciA9IHBhcmVudDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRDT05URVhUXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBQcml2YXRlIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAdHlwZSB7QXVkaW9Db250ZXh0fVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIGF1ZGlvQ29udGV4dCA9IG51bGw7XG5cdCAgICAvKipcblx0XHQgKiAgQSBzdGF0aWMgcG9pbnRlciB0byB0aGUgYXVkaW8gY29udGV4dCBhY2Nlc3NpYmxlIGFzIFRvbmUuY29udGV4dC5cblx0XHQgKiAgQHR5cGUge1RvbmUuQ29udGV4dH1cblx0XHQgKiAgQG5hbWUgY29udGV4dFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUsICdjb250ZXh0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYXVkaW9Db250ZXh0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5Db250ZXh0ICYmIGNvbnRleHQgaW5zdGFuY2VvZiBUb25lLkNvbnRleHQpIHtcblx0ICAgICAgICAgICAgICAgIGF1ZGlvQ29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBhdWRpb0NvbnRleHQgPSBuZXcgVG9uZS5Db250ZXh0KGNvbnRleHQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vaW5pdGlhbGl6ZSB0aGUgbmV3IGF1ZGlvIGNvbnRleHRcblx0ICAgICAgICAgICAgVG9uZS5Db250ZXh0LmVtaXQoJ2luaXQnLCBhdWRpb0NvbnRleHQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHR5cGUge1RvbmUuQ29udGV4dH1cblx0XHQgKiAgQG5hbWUgY29udGV4dFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5wcm90b3R5cGUsICdjb250ZXh0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5jb250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRvbmUgYXV0b21hdGljYWxseSBjcmVhdGVzIGEgY29udGV4dCBvbiBpbml0LCBidXQgaWYgeW91IGFyZSB3b3JraW5nXG5cdFx0ICogIHdpdGggb3RoZXIgbGlicmFyaWVzIHdoaWNoIGFsc28gY3JlYXRlIGFuIEF1ZGlvQ29udGV4dCwgaXQgY2FuIGJlXG5cdFx0ICogIHVzZWZ1bCB0byBzZXQgeW91ciBvd24uIElmIHlvdSBhcmUgZ29pbmcgdG8gc2V0IHlvdXIgb3duIGNvbnRleHQsXG5cdFx0ICogIGJlIHN1cmUgdG8gZG8gaXQgYXQgdGhlIHN0YXJ0IG9mIHlvdXIgY29kZSwgYmVmb3JlIGNyZWF0aW5nIGFueSBvYmplY3RzLlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9Db250ZXh0fSBjdHggVGhlIG5ldyBhdWRpbyBjb250ZXh0IHRvIHNldFxuXHRcdCAqL1xuXHQgICAgVG9uZS5zZXRDb250ZXh0ID0gZnVuY3Rpb24gKGN0eCkge1xuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IGN0eDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBVFRSSUJVVEVTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIHNlY29uZHMgb2YgMSBwcm9jZXNzaW5nIGJsb2NrICgxMjggc2FtcGxlcylcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgYmxvY2tUaW1lXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5wcm90b3R5cGUsICdibG9ja1RpbWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxMjggLyB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBvZiBvbmUgc2FtcGxlLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzYW1wbGVUaW1lXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5wcm90b3R5cGUsICdzYW1wbGVUaW1lJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gMSAvIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFdoZXRoZXIgb3Igbm90IGFsbCB0aGUgdGVjaG5vbG9naWVzIHRoYXQgVG9uZS5qcyByZWxpZXMgb24gYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyLlxuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgc3VwcG9ydGVkXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZSwgJ3N1cHBvcnRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGhhc0F1ZGlvQ29udGV4dCA9IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnQXVkaW9Db250ZXh0JykgfHwgd2luZG93Lmhhc093blByb3BlcnR5KCd3ZWJraXRBdWRpb0NvbnRleHQnKTtcblx0ICAgICAgICAgICAgdmFyIGhhc1Byb21pc2VzID0gd2luZG93Lmhhc093blByb3BlcnR5KCdQcm9taXNlJyk7XG5cdCAgICAgICAgICAgIHZhciBoYXNXb3JrZXJzID0gd2luZG93Lmhhc093blByb3BlcnR5KCdXb3JrZXInKTtcblx0ICAgICAgICAgICAgcmV0dXJuIGhhc0F1ZGlvQ29udGV4dCAmJiBoYXNQcm9taXNlcyAmJiBoYXNXb3JrZXJzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEJvb2xlYW4gdmFsdWUgaWYgdGhlIGF1ZGlvIGNvbnRleHQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBuYW1lIGluaXRpYWxpemVkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZSwgJ2luaXRpYWxpemVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYXVkaW9Db250ZXh0ICE9PSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgY29udGV4dCB3aGVuIGl0IGJlY29tZXMgYXZhaWxhYmxlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgcmVzb2x2ZSAgQ2FsbGJhY2sgd2hlbiB0aGUgY29udGV4dCBpcyBpbml0aWFsaXplZFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaW5pdGlhbGl6ZWQpIHtcblx0ICAgICAgICAgICAgcmVzb2x2ZShUb25lLmNvbnRleHQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciByZXNDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJlc29sdmUoVG9uZS5jb250ZXh0KTtcblx0ICAgICAgICAgICAgICAgIFRvbmUuQ29udGV4dC5vZmYoJ2luaXQnLCByZXNDYWxsYmFjayk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIHJlc0NhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHZlcnNpb24gbnVtYmVyXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLnZlcnNpb24gPSAncjEyJztcblx0ICAgIHJldHVybiBUb25lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5FbWl0dGVyIGdpdmVzIGNsYXNzZXMgd2hpY2ggZXh0ZW5kIGl0XG5cdFx0ICogICAgICAgICB0aGUgYWJpbGl0eSB0byBsaXN0ZW4gZm9yIGFuZCBlbWl0IGV2ZW50cy5cblx0XHQgKiAgICAgICAgIEluc3BpcmF0aW9uIGFuZCByZWZlcmVuY2UgZnJvbSBKZXJvbWUgRXRpZW5uZSdzIFtNaWNyb0V2ZW50XShodHRwczovL2dpdGh1Yi5jb20vamVyb21lZXRpZW5uZS9taWNyb2V2ZW50LmpzKS5cblx0XHQgKiAgICAgICAgIE1JVCAoYykgMjAxMSBKZXJvbWUgRXRpZW5uZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQ29udGFpbnMgYWxsIG9mIHRoZSBldmVudHMuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRW1pdHRlcik7XG5cdCAgICAvKipcblx0XHQgKiAgQmluZCBhIGNhbGxiYWNrIHRvIGEgc3BlY2lmaWMgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgZXZlbnQgICAgIFRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBsaXN0ZW4gZm9yLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50IGlzIGVtaXR0ZWRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL3NwbGl0IHRoZSBldmVudFxuXHQgICAgICAgIHZhciBldmVudHMgPSBldmVudC5zcGxpdCgvXFxXKy8pO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudE5hbWUgPSBldmVudHNbaV07XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudE5hbWVdID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0ucHVzaChjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBCaW5kIGEgY2FsbGJhY2sgd2hpY2ggaXMgb25seSBpbnZva2VkIG9uY2Vcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBldmVudCAgICAgVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGxpc3RlbiBmb3IuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgaXMgZW1pdHRlZFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdmFyIGJvdW5kQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vaW52b2tlIHRoZSBjYWxsYmFja1xuXHQgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB0aGlzLm9mZihldmVudCwgYm91bmRDYWxsYmFjayk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIHRoaXMub24oZXZlbnQsIGJvdW5kQ2FsbGJhY2spO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIGV2ZW50ICAgICBUaGUgZXZlbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdG8uXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgd2hpY2ggd2FzIGJvdW5kIHRvXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBldmVudCB3aXRoIFRvbmUuRW1pdHRlci5vbi5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm8gY2FsbGJhY2sgaXMgZ2l2ZW4sIGFsbCBjYWxsYmFja3Ncblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzIGFyZSByZW1vdmVkLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcblx0ICAgICAgICB2YXIgZXZlbnRzID0gZXZlbnQuc3BsaXQoL1xcVysvKTtcblx0ICAgICAgICBmb3IgKHZhciBldiA9IDA7IGV2IDwgZXZlbnRzLmxlbmd0aDsgZXYrKykge1xuXHQgICAgICAgICAgICBldmVudCA9IGV2ZW50c1tldl07XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9ldmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnQpKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKGNhbGxiYWNrKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudF0gPSBbXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGV2ZW50TGlzdCA9IHRoaXMuX2V2ZW50c1tldmVudF07XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudExpc3QubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50TGlzdFtpXSA9PT0gY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TGlzdC5zcGxpY2UoaSwgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludm9rZSBhbGwgb2YgdGhlIGNhbGxiYWNrcyBib3VuZCB0byB0aGUgZXZlbnRcblx0XHQgKiAgd2l0aCBhbnkgYXJndW1lbnRzIHBhc3NlZCBpbi5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgZXZlbnQgIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmdzLi4uIFRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb25zIGxpc3RlbmluZy5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpLnNsaWNlKDEpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ZW50TGlzdCA9IHRoaXMuX2V2ZW50c1tldmVudF0uc2xpY2UoMCk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXZlbnRMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnRMaXN0W2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgRW1pdHRlciBmdW5jdGlvbnMgKG9uL29mZi9lbWl0KSB0byB0aGUgb2JqZWN0XG5cdFx0ICogIEBwYXJhbSAge09iamVjdHxGdW5jdGlvbn0gIG9iamVjdCAgVGhlIG9iamVjdCBvciBjbGFzcyB0byBleHRlbmQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIubWl4aW4gPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdCAgICAgICAgdmFyIGZ1bmN0aW9ucyA9IFtcblx0ICAgICAgICAgICAgJ29uJyxcblx0ICAgICAgICAgICAgJ29uY2UnLFxuXHQgICAgICAgICAgICAnb2ZmJyxcblx0ICAgICAgICAgICAgJ2VtaXQnXG5cdCAgICAgICAgXTtcblx0ICAgICAgICBvYmplY3QuX2V2ZW50cyA9IHt9O1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBmdW5jID0gZnVuY3Rpb25zW2ldO1xuXHQgICAgICAgICAgICB2YXIgZW1pdHRlckZ1bmMgPSBUb25lLkVtaXR0ZXIucHJvdG90eXBlW2Z1bmNdO1xuXHQgICAgICAgICAgICBvYmplY3RbZnVuY10gPSBlbWl0dGVyRnVuYztcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRW1pdHRlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FbWl0dGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBUaW1lbGluZSBjbGFzcyBmb3Igc2NoZWR1bGluZyBhbmQgbWFpbnRhaW5pbmcgc3RhdGVcblx0XHQgKiAgICAgICAgIGFsb25nIGEgdGltZWxpbmUuIEFsbCBldmVudHMgbXVzdCBoYXZlIGEgXCJ0aW1lXCIgcHJvcGVydHkuXG5cdFx0ICogICAgICAgICBJbnRlcm5hbGx5LCBldmVudHMgYXJlIHN0b3JlZCBpbiB0aW1lIG9yZGVyIGZvciBmYXN0XG5cdFx0ICogICAgICAgICByZXRyaWV2YWwuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfSBbbWVtb3J5PUluZmluaXR5XSBUaGUgbnVtYmVyIG9mIHByZXZpb3VzIGV2ZW50cyB0aGF0IGFyZSByZXRhaW5lZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydtZW1vcnknXSwgVG9uZS5UaW1lbGluZSk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiBzY2hlZHVsZWQgdGltZWxpbmUgZXZlbnRzXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWVtb3J5IG9mIHRoZSB0aW1lbGluZSwgaS5lLlxuXHRcdFx0ICogIGhvdyBtYW55IGV2ZW50cyBpbiB0aGUgcGFzdCBpdCB3aWxsIHJldGFpblxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWVtb3J5ID0gb3B0aW9ucy5tZW1vcnk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaW1lbGluZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5kZWZhdWx0cyA9IHsgJ21lbW9yeSc6IEluZmluaXR5IH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpbWVsaW5lI1xuXHRcdCAqICBAbmFtZSBsZW5ndGhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaW1lbGluZS5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZS5sZW5ndGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSW5zZXJ0IGFuIGV2ZW50IG9iamVjdCBvbnRvIHRoZSB0aW1lbGluZS4gRXZlbnRzIG11c3QgaGF2ZSBhIFwidGltZVwiIGF0dHJpYnV0ZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCBvYmplY3QgdG8gaW5zZXJ0IGludG8gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIC8vdGhlIGV2ZW50IG5lZWRzIHRvIGhhdmUgYSB0aW1lIGF0dHJpYnV0ZVxuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYoZXZlbnQudGltZSkpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlRpbWVsaW5lOiBldmVudHMgbXVzdCBoYXZlIGEgdGltZSBhdHRyaWJ1dGUnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZXZlbnQudGltZSA9IGV2ZW50LnRpbWUudmFsdWVPZigpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaChldmVudC50aW1lKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBldmVudCk7XG5cdCAgICAgICAgLy9pZiB0aGUgbGVuZ3RoIGlzIG1vcmUgdGhhbiB0aGUgbWVtb3J5LCByZW1vdmUgdGhlIHByZXZpb3VzIG9uZXNcblx0ICAgICAgICBpZiAodGhpcy5sZW5ndGggPiB0aGlzLm1lbW9yeSkge1xuXHQgICAgICAgICAgICB2YXIgZGlmZiA9IHRoaXMubGVuZ3RoIC0gdGhpcy5tZW1vcnk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNwbGljZSgwLCBkaWZmKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCBvYmplY3QgdG8gcmVtb3ZlIGZyb20gdGhlIGxpc3QuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl90aW1lbGluZS5pbmRleE9mKGV2ZW50KTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIG5lYXJlc3QgZXZlbnQgd2hvc2UgdGltZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBjb21wYXJhdG9yIFdoaWNoIHZhbHVlIGluIHRoZSBvYmplY3QgdG8gY29tcGFyZVxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXZlbnQgb2JqZWN0IHNldCBhZnRlciB0aGF0IHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSwgY29tcGFyYXRvcik7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXhdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBmaXJzdCBldmVudCBpbiB0aGUgdGltZWxpbmUgd2l0aG91dCByZW1vdmluZyBpdFxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZmlyc3QgZXZlbnQgb2JqZWN0XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5wZWVrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVswXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBmaXJzdCBldmVudCBpbiB0aGUgdGltZWxpbmUgYW5kIHJlbW92ZSBpdFxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZmlyc3QgZXZlbnQgb2JqZWN0XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmUuc2hpZnQoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBldmVudCB3aGljaCBpcyBzY2hlZHVsZWQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBjb21wYXJhdG9yIFdoaWNoIHZhbHVlIGluIHRoZSBvYmplY3QgdG8gY29tcGFyZVxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXZlbnQgb2JqZWN0IGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5nZXRBZnRlciA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgY29tcGFyYXRvciA9IFRvbmUuZGVmYXVsdEFyZyhjb21wYXJhdG9yLCAndGltZScpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lLCBjb21wYXJhdG9yKTtcblx0ICAgICAgICBpZiAoaW5kZXggKyAxIDwgdGhpcy5fdGltZWxpbmUubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtpbmRleCArIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBldmVudCBiZWZvcmUgdGhlIGV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGV2ZW50IG9iamVjdCBiZWZvcmUgdGhlIGdpdmVuIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmdldEJlZm9yZSA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgY29tcGFyYXRvciA9IFRvbmUuZGVmYXVsdEFyZyhjb21wYXJhdG9yLCAndGltZScpO1xuXHQgICAgICAgIHZhciBsZW4gPSB0aGlzLl90aW1lbGluZS5sZW5ndGg7XG5cdCAgICAgICAgLy9pZiBpdCdzIGFmdGVyIHRoZSBsYXN0IGl0ZW0sIHJldHVybiB0aGUgbGFzdCBpdGVtXG5cdCAgICAgICAgaWYgKGxlbiA+IDAgJiYgdGhpcy5fdGltZWxpbmVbbGVuIC0gMV1bY29tcGFyYXRvcl0gPCB0aW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtsZW4gLSAxXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUsIGNvbXBhcmF0b3IpO1xuXHQgICAgICAgIGlmIChpbmRleCAtIDEgPj0gMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXggLSAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBldmVudHMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdGltZWxpbmUubGVuZ3RoID4gMSkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2goYWZ0ZXIpO1xuXHQgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW2luZGV4XS50aW1lID09PSBhZnRlcikge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vZ2V0IHRoZSBmaXJzdCBpdGVtIHdpdGggdGhhdCB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4OyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbaV0udGltZSA9PT0gYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gdGhpcy5fdGltZWxpbmUuc2xpY2UoMCwgaW5kZXgpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IHRoaXMuX3RpbWVsaW5lLnNsaWNlKDAsIGluZGV4ICsgMSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90aW1lbGluZS5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICAgICAgLy90aGUgZmlyc3QgaXRlbSdzIHRpbWVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lWzBdLnRpbWUgPj0gYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBldmVudHMgYmVmb3JlIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBjYW5jZWwgYmVmb3JlLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuY2FuY2VsQmVmb3JlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKGluZGV4ID49IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSB0aGlzLl90aW1lbGluZS5zbGljZShpbmRleCArIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBldmVudCBpZiB0aGVyZSBpcyBvbmUuIG51bGwgb3RoZXJ3aXNlXG5cdFx0ICogQHBhcmFtICB7T2JqZWN0fSBldmVudCBUaGUgZXZlbnQgdG8gZmluZCB0aGUgcHJldmlvdXMgb25lIG9mXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSAgICAgICBUaGUgZXZlbnQgcmlnaHQgYmVmb3JlIHRoZSBnaXZlbiBldmVudFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUucHJldmlvdXNFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3RpbWVsaW5lLmluZGV4T2YoZXZlbnQpO1xuXHQgICAgICAgIGlmIChpbmRleCA+IDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4IC0gMV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEb2VzIGEgYmluYXJ5IHNlYXJjaCBvbiB0aGUgdGltZWxpbmUgYXJyYXkgYW5kIHJldHVybnMgdGhlXG5cdFx0ICogIG5lYXJlc3QgZXZlbnQgaW5kZXggd2hvc2UgdGltZSBpcyBhZnRlciBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgSWYgYSB0aW1lIGlzIHNlYXJjaGVkIGJlZm9yZSB0aGUgZmlyc3QgaW5kZXggaW4gdGhlIHRpbWVsaW5lLCAtMSBpcyByZXR1cm5lZC5cblx0XHQgKiAgSWYgdGhlIHRpbWUgaXMgYWZ0ZXIgdGhlIGVuZCwgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGl0ZW0gaXMgcmV0dXJuZWQuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gdGhlIGluZGV4IGluIHRoZSB0aW1lbGluZSBhcnJheVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuX3NlYXJjaCA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gLTE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgYmVnaW5uaW5nID0gMDtcblx0ICAgICAgICB2YXIgbGVuID0gdGhpcy5fdGltZWxpbmUubGVuZ3RoO1xuXHQgICAgICAgIHZhciBlbmQgPSBsZW47XG5cdCAgICAgICAgaWYgKGxlbiA+IDAgJiYgdGhpcy5fdGltZWxpbmVbbGVuIC0gMV1bY29tcGFyYXRvcl0gPD0gdGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbGVuIC0gMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgd2hpbGUgKGJlZ2lubmluZyA8IGVuZCkge1xuXHQgICAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIG1pZHBvaW50IGZvciByb3VnaGx5IGVxdWFsIHBhcnRpdGlvblxuXHQgICAgICAgICAgICB2YXIgbWlkUG9pbnQgPSBNYXRoLmZsb29yKGJlZ2lubmluZyArIChlbmQgLSBiZWdpbm5pbmcpIC8gMik7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3RpbWVsaW5lW21pZFBvaW50XTtcblx0ICAgICAgICAgICAgdmFyIG5leHRFdmVudCA9IHRoaXMuX3RpbWVsaW5lW21pZFBvaW50ICsgMV07XG5cdCAgICAgICAgICAgIGlmIChldmVudFtjb21wYXJhdG9yXSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgLy9jaG9vc2UgdGhlIGxhc3Qgb25lIHRoYXQgaGFzIHRoZSBzYW1lIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBtaWRQb2ludDsgaSA8IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHRlc3RFdmVudCA9IHRoaXMuX3RpbWVsaW5lW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0RXZlbnRbY29tcGFyYXRvcl0gPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbWlkUG9pbnQgPSBpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBtaWRQb2ludDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFtjb21wYXJhdG9yXSA8IHRpbWUgJiYgbmV4dEV2ZW50W2NvbXBhcmF0b3JdID4gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG1pZFBvaW50O1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50W2NvbXBhcmF0b3JdID4gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgLy9zZWFyY2ggbG93ZXJcblx0ICAgICAgICAgICAgICAgIGVuZCA9IG1pZFBvaW50O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy9zZWFyY2ggdXBwZXJcblx0ICAgICAgICAgICAgICAgIGJlZ2lubmluZyA9IG1pZFBvaW50ICsgMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gLTE7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGl0ZXJhdG9yLiBBcHBsaWVzIGV4dHJhIHNhZmV0eSBjaGVja3MgZm9yXG5cdFx0ICogIHJlbW92aW5nIGl0ZW1zIGZyb20gdGhlIGFycmF5LlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrXG5cdFx0ICogIEBwYXJhbSAge051bWJlcj19ICAgIGxvd2VyQm91bmRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gICAgdXBwZXJCb3VuZFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuX2l0ZXJhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGxvd2VyQm91bmQsIHVwcGVyQm91bmQpIHtcblx0ICAgICAgICBsb3dlckJvdW5kID0gVG9uZS5kZWZhdWx0QXJnKGxvd2VyQm91bmQsIDApO1xuXHQgICAgICAgIHVwcGVyQm91bmQgPSBUb25lLmRlZmF1bHRBcmcodXBwZXJCb3VuZCwgdGhpcy5fdGltZWxpbmUubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuc2xpY2UobG93ZXJCb3VuZCwgdXBwZXJCb3VuZCArIDEpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjayk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhdCBvciBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQmVmb3JlID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKHVwcGVyQm91bmQgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIDAsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEFmdGVyID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIGxvd2VyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgbG93ZXJCb3VuZCArIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYmV0d2VlbiB0aGUgc3RhcnRUaW1lIGFuZCBlbmRUaW1lLiBcblx0XHQgKiAgVGhlIHRpbWVyYW5nZSBpcyBpbmNsdXNpdmUgb2YgdGhlIHN0YXJ0VGltZSwgYnV0IGV4Y2x1c2l2ZSBvZiB0aGUgZW5kVGltZS4gXG5cdFx0ICogIHJhbmdlID0gW3N0YXJ0VGltZSwgZW5kVGltZSkuIFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBzdGFydFRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBlbmRUaW1lIFRoZSBlbmQgb2YgdGhlIHRlc3QgaW50ZXJ2YWwuIFxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQmV0d2VlbiA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdmFyIGxvd2VyQm91bmQgPSB0aGlzLl9zZWFyY2goc3RhcnRUaW1lKTtcblx0ICAgICAgICB2YXIgdXBwZXJCb3VuZCA9IHRoaXMuX3NlYXJjaChlbmRUaW1lKTtcblx0ICAgICAgICBpZiAobG93ZXJCb3VuZCAhPT0gLTEgJiYgdXBwZXJCb3VuZCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW2xvd2VyQm91bmRdLnRpbWUgIT09IHN0YXJ0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgbG93ZXJCb3VuZCArPSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vZXhjbHVzaXZlIG9mIHRoZSBlbmQgdGltZVxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbdXBwZXJCb3VuZF0udGltZSA9PT0gZW5kVGltZSkge1xuXHQgICAgICAgICAgICAgICAgdXBwZXJCb3VuZCAtPSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIGxvd2VyQm91bmQsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobG93ZXJCb3VuZCA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgMCwgdXBwZXJCb3VuZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYXQgb3IgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuIFNpbWlsYXIgdG9cblx0XHQgKiAgZm9yRWFjaEFmdGVyLCBidXQgaW5jbHVkZXMgdGhlIGl0ZW0ocykgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoRnJvbSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciBsb3dlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIC8vd29yayBiYWNrd2FyZHMgdW50aWwgdGhlIGV2ZW50IHRpbWUgaXMgbGVzcyB0aGFuIHRpbWVcblx0ICAgICAgICB3aGlsZSAobG93ZXJCb3VuZCA+PSAwICYmIHRoaXMuX3RpbWVsaW5lW2xvd2VyQm91bmRdLnRpbWUgPj0gdGltZSkge1xuXHQgICAgICAgICAgICBsb3dlckJvdW5kLS07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIGxvd2VyQm91bmQgKyAxKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKHVwcGVyQm91bmQgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoZXZlbnQudGltZSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LCAwLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5UaW1lbGluZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaW1lbGluZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCF3aW5kb3cuaGFzT3duUHJvcGVydHkoJ09mZmxpbmVBdWRpb0NvbnRleHQnKSAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3dlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQnKSkge1xuXHQgICAgICAgICAgICB3aW5kb3cuT2ZmbGluZUF1ZGlvQ29udGV4dCA9IHdpbmRvdy53ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JldHVybnMgcHJvbWlzZT9cblx0ICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDEsIDEsIDQ0MTAwKTtcblx0ICAgICAgICB2YXIgcmV0ID0gY29udGV4dC5zdGFydFJlbmRlcmluZygpO1xuXHQgICAgICAgIGlmICghKHJldCBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG5cdCAgICAgICAgICAgIE9mZmxpbmVBdWRpb0NvbnRleHQucHJvdG90eXBlLl9uYXRpdmVfc3RhcnRSZW5kZXJpbmcgPSBPZmZsaW5lQXVkaW9Db250ZXh0LnByb3RvdHlwZS5zdGFydFJlbmRlcmluZztcblx0ICAgICAgICAgICAgT2ZmbGluZUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuc3RhcnRSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGRvbmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUucmVuZGVyZWRCdWZmZXIpO1xuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmF0aXZlX3N0YXJ0UmVuZGVyaW5nKCk7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCF3aW5kb3cuaGFzT3duUHJvcGVydHkoJ0F1ZGlvQ29udGV4dCcpICYmIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnd2Via2l0QXVkaW9Db250ZXh0JykpIHtcblx0ICAgICAgICAgICAgd2luZG93LkF1ZGlvQ29udGV4dCA9IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vbm90IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LCBidXQgb25seSBhbiBBUEkgcGxhY2Vob2xkZXJcblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY2xvc2UpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzRnVuY3Rpb24odGhpcy5zdXNwZW5kKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VzcGVuZCgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL25vdCBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudFxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5yZXN1bWUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY3JlYXRlR2FpblxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluICYmIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2Fpbk5vZGUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluTm9kZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jcmVhdGVEZWxheVxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheSAmJiBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5Tm9kZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5ID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheU5vZGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vdGVzdCBkZWNvZGVBdWRpb0RhdGEgcmV0dXJucyBhIHByb21pc2Vcblx0ICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9oYXlvbmFvL3dlYi1hdWRpby1hcGktc2hpbS9ibG9iL21hc3Rlci9zcmMvQXVkaW9Db250ZXh0LmpzXG5cdCAgICAgICAgLy8gTUlUIExpY2Vuc2UgKGMpIDIwMTUgQG1vaGF5b25hb1xuXHQgICAgICAgIHZhciBkZWNvZGVBdWRpb0RhdGFQcm9taXNlID0gZmFsc2U7XG5cdCAgICAgICAgdmFyIG9mZmxpbmVDb250ZXh0ID0gbmV3IE9mZmxpbmVBdWRpb0NvbnRleHQoMSwgMSwgNDQxMDApO1xuXHQgICAgICAgIHZhciBhdWRpb0RhdGEgPSBuZXcgVWludDMyQXJyYXkoW1xuXHQgICAgICAgICAgICAxMTc5MDExNDEwLFxuXHQgICAgICAgICAgICA0OCxcblx0ICAgICAgICAgICAgMTE2MzI4MDcyNyxcblx0ICAgICAgICAgICAgNTQ0NTAxMDk0LFxuXHQgICAgICAgICAgICAxNixcblx0ICAgICAgICAgICAgMTMxMDczLFxuXHQgICAgICAgICAgICA0NDEwMCxcblx0ICAgICAgICAgICAgMTc2NDAwLFxuXHQgICAgICAgICAgICAxMDQ4NTgwLFxuXHQgICAgICAgICAgICAxNjM1MDE3MDYwLFxuXHQgICAgICAgICAgICA4LFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwXG5cdCAgICAgICAgXSkuYnVmZmVyO1xuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgIHZhciByZXQgPSBvZmZsaW5lQ29udGV4dC5kZWNvZGVBdWRpb0RhdGEoYXVkaW9EYXRhKTtcblx0ICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0ICAgICAgICAgICAgICAgIGRlY29kZUF1ZGlvRGF0YVByb21pc2UgPSB0cnVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICBkZWNvZGVBdWRpb0RhdGFQcm9taXNlID0gZmFsc2U7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLl9uYXRpdmVfZGVjb2RlQXVkaW9EYXRhID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5kZWNvZGVBdWRpb0RhdGE7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuZGVjb2RlQXVkaW9EYXRhID0gZnVuY3Rpb24gKGF1ZGlvRGF0YSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChzdWNjZXNzLCBlcnJvcikge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX25hdGl2ZV9kZWNvZGVBdWRpb0RhdGEoYXVkaW9EYXRhLCBzdWNjZXNzLCBlcnJvcik7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIEF1ZGlvQ29udGV4dC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW1pdHRlcn1cblx0XHQgKiAgQHBhcmFtIHtBdWRpb0NvbnRleHQ9fSBjb250ZXh0IG9wdGlvbmFsbHkgcGFzcyBpbiBhIGNvbnRleHRcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2NvbnRleHQnXSwgVG9uZS5Db250ZXh0KTtcblx0ICAgICAgICBpZiAoIW9wdGlvbnMuY29udGV4dCkge1xuXHQgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQgPSBuZXcgd2luZG93LkF1ZGlvQ29udGV4dCgpO1xuXHQgICAgICAgICAgICBpZiAoIW9wdGlvbnMuY29udGV4dCkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgY3JlYXRlIEF1ZGlvQ29udGV4dC4gUG9zc2libHkgdG9vIG1hbnkgQXVkaW9Db250ZXh0cyBydW5uaW5nIGFscmVhZHkuJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG9wdGlvbnMuY29udGV4dDtcblx0ICAgICAgICAvLyBleHRlbmQgYWxsIG9mIHRoZSBtZXRob2RzXG5cdCAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB0aGlzLl9jb250ZXh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlZmluZVByb3BlcnR5KHRoaXMuX2NvbnRleHQsIHByb3ApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVmYXVsdCBsYXRlbmN5IGhpbnRcblx0XHRcdCAqICBAdHlwZSAge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGF0ZW5jeUhpbnQgPSBvcHRpb25zLmxhdGVuY3lIaW50O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuIG9iamVjdCBjb250YWluaW5nIGFsbCBvZiB0aGUgY29uc3RhbnRzIEF1ZGlvQnVmZmVyU291cmNlTm9kZXNcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRzID0ge307XG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvLyBXT1JLRVJcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSBldmVudHMgYXJlIHNjaGVkdWxlZFxuXHRcdFx0ICogIGludG8gdGhlIGZ1dHVyZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb29rQWhlYWQgPSBvcHRpb25zLmxvb2tBaGVhZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHJlZmVyZW5jZSB0byB0aGUgYWN0dWFsIGNvbXB1dGVkIHVwZGF0ZSBpbnRlcnZhbFxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21wdXRlZFVwZGF0ZUludGVydmFsID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHJlbGlhYmxlIGNhbGxiYWNrIG1ldGhvZFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtUaWNrZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aWNrZXIgPSBuZXcgVGlja2VyKHRoaXMuZW1pdC5iaW5kKHRoaXMsICd0aWNrJyksIG9wdGlvbnMuY2xvY2tTb3VyY2UsIG9wdGlvbnMudXBkYXRlSW50ZXJ2YWwpO1xuXHQgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgLy8gVElNRU9VVFNcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgc2V0VGltZW91dCBldmVudHMuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lb3V0cyA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpbWVvdXQgaWQgY291bnRlclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRJZHMgPSAwO1xuXHQgICAgICAgIHRoaXMub24oJ3RpY2snLCB0aGlzLl90aW1lb3V0TG9vcC5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNvbnRleHQsIFRvbmUuRW1pdHRlcik7XG5cdCAgICBUb25lLkVtaXR0ZXIubWl4aW4oVG9uZS5Db250ZXh0KTtcblx0ICAgIC8qKlxuXHRcdCAqIGRlZmF1bHRzXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Nsb2NrU291cmNlJzogJ3dvcmtlcicsXG5cdCAgICAgICAgJ2xhdGVuY3lIaW50JzogJ2ludGVyYWN0aXZlJyxcblx0ICAgICAgICAnbG9va0FoZWFkJzogMC4xLFxuXHQgICAgICAgICd1cGRhdGVJbnRlcnZhbCc6IDAuMDNcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRGVmaW5lIGEgcHJvcGVydHkgb24gdGhpcyBUb25lLkNvbnRleHQuXG5cdFx0ICogIFRoaXMgaXMgdXNlZCB0byBleHRlbmQgdGhlIG5hdGl2ZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHBhcmFtICB7QXVkaW9Db250ZXh0fSAgY29udGV4dFxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLl9kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChjb250ZXh0LCBwcm9wKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aGlzW3Byb3BdKSkge1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcCwge1xuXHQgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0W3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdLmJpbmQoY29udGV4dCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRbcHJvcF07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbcHJvcF0gPSB2YWw7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgYXVkaW8gY29udGV4dCB0aW1lXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dC5jdXJyZW50VGltZSArIHRoaXMubG9va0FoZWFkO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQcm9taXNlIHdoaWNoIGlzIGludm9rZWQgd2hlbiB0aGUgY29udGV4dCBpcyBydW5uaW5nLlxuXHRcdCAqICBUcmllcyB0byByZXN1bWUgdGhlIGNvbnRleHQgaWYgaXQncyBub3Qgc3RhcnRlZC5cblx0XHQgKiAgQHJldHVybiAge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLnJlYWR5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoZG9uZSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fY29udGV4dC5zdGF0ZSA9PT0gJ3J1bm5pbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBkb25lKCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LnJlc3VtZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUHJvbWlzZSB3aGljaCBpcyBpbnZva2VkIHdoZW4gdGhlIGNvbnRleHQgaXMgcnVubmluZy5cblx0XHQgKiAgVHJpZXMgdG8gcmVzdW1lIHRoZSBjb250ZXh0IGlmIGl0J3Mgbm90IHN0YXJ0ZWQuXG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dC5jbG9zZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBUb25lLkNvbnRleHQuZW1pdCgnY2xvc2UnLCB0aGlzKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZW5lcmF0ZSBhIGxvb3BlZCBidWZmZXIgYXQgc29tZSBjb25zdGFudCB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdmFsXG5cdFx0ICogIEByZXR1cm4gIHtCdWZmZXJTb3VyY2VOb2RlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5nZXRDb25zdGFudCA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAodGhpcy5fY29uc3RhbnRzW3ZhbF0pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN0YW50c1t2YWxdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9jb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCAxMjgsIHRoaXMuX2NvbnRleHQuc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgICAgIHZhciBhcnIgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBhcnJbaV0gPSB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIGNvbnN0YW50ID0gdGhpcy5fY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICAgICAgY29uc3RhbnQuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICAgICAgY29uc3RhbnQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LmJ1ZmZlciA9IGJ1ZmZlcjtcblx0ICAgICAgICAgICAgY29uc3RhbnQubG9vcCA9IHRydWU7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LnN0YXJ0KDApO1xuXHQgICAgICAgICAgICB0aGlzLl9jb25zdGFudHNbdmFsXSA9IGNvbnN0YW50O1xuXHQgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJpdmF0ZSBsb29wIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHRoZSBjb250ZXh0IHNjaGVkdWxlZCB0aW1lb3V0c1xuXHRcdCAqICBJcyBpbnZva2VkIGZyb20gdGhlIGNsb2NrIHNvdXJjZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5fdGltZW91dExvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgd2hpbGUgKHRoaXMuX3RpbWVvdXRzICYmIHRoaXMuX3RpbWVvdXRzLmxlbmd0aCAmJiB0aGlzLl90aW1lb3V0cy5wZWVrKCkudGltZSA8PSBub3cpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dHMuc2hpZnQoKS5jYWxsYmFjaygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQSBzZXRUaW1lb3V0IHdoaWNoIGlzIGdhdXJlbnRlZWQgYnkgdGhlIGNsb2NrIHNvdXJjZS5cblx0XHQgKiAgQWxzbyBydW5zIGluIHRoZSBvZmZsaW5lIGNvbnRleHQuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgZm4gICAgICAgVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdCAqICBAcGFyYW0gIHtTZWNvbmRzfSAgICB0aW1lb3V0ICBUaGUgdGltZW91dCBpbiBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm5zIHtOdW1iZXJ9IElEIHRvIHVzZSB3aGVuIGludm9raW5nIFRvbmUuQ29udGV4dC5jbGVhclRpbWVvdXRcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuc2V0VGltZW91dCA9IGZ1bmN0aW9uIChmbiwgdGltZW91dCkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRJZHMrKztcblx0ICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0cy5hZGQoe1xuXHQgICAgICAgICAgICBjYWxsYmFjazogZm4sXG5cdCAgICAgICAgICAgIHRpbWU6IG5vdyArIHRpbWVvdXQsXG5cdCAgICAgICAgICAgIGlkOiB0aGlzLl90aW1lb3V0SWRzXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVvdXRJZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFycyBhIHByZXZpb3VzbHkgc2NoZWR1bGVkIHRpbWVvdXQgd2l0aCBUb25lLmNvbnRleHQuc2V0VGltZW91dFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBpZCAgVGhlIElEIHJldHVybmVkIGZyb20gc2V0VGltZW91dFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Db250ZXh0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbiAoaWQpIHtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuaWQgPT09IGlkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShldmVudCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSG93IG9mdGVuIHRoZSBXZWIgV29ya2VyIGNhbGxiYWNrIGlzIGludm9rZWQuXG5cdFx0ICogIFRoaXMgbnVtYmVyIGNvcnJlc3BvbmRzIHRvIGhvdyByZXNwb25zaXZlIHRoZSBzY2hlZHVsaW5nXG5cdFx0ICogIGNhbiBiZS4gQ29udGV4dC51cGRhdGVJbnRlcnZhbCArIENvbnRleHQubG9va0FoZWFkIGdpdmVzIHlvdSB0aGVcblx0XHQgKiAgdG90YWwgbGF0ZW5jeSBiZXR3ZWVuIHNjaGVkdWxpbmcgYW4gZXZlbnQgYW5kIGhlYXJpbmcgaXQuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnRleHQjXG5cdFx0ICogIEBuYW1lIHVwZGF0ZUludGVydmFsXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db250ZXh0LnByb3RvdHlwZSwgJ3VwZGF0ZUludGVydmFsJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja2VyLnVwZGF0ZUludGVydmFsO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja2VyLnVwZGF0ZUludGVydmFsID0gaW50ZXJ2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgV2hhdCB0aGUgc291cmNlIG9mIHRoZSBjbG9jayBpcywgZWl0aGVyIFwid29ya2VyXCIgKFdlYiBXb3JrZXIgW2RlZmF1bHRdKSxcblx0XHQgKiAgXCJ0aW1lb3V0XCIgKHNldFRpbWVvdXQpLCBvciBcIm9mZmxpbmVcIiAobm9uZSkuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnRleHQjXG5cdFx0ICogIEBuYW1lIGNsb2NrU291cmNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db250ZXh0LnByb3RvdHlwZSwgJ2Nsb2NrU291cmNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja2VyLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdHlwZSBvZiBwbGF5YmFjaywgd2hpY2ggYWZmZWN0cyB0cmFkZW9mZnMgYmV0d2VlbiBhdWRpb1xuXHRcdCAqICBvdXRwdXQgbGF0ZW5jeSBhbmQgcmVzcG9uc2l2ZW5lc3MuXG5cdFx0ICpcblx0XHQgKiAgSW4gYWRkaXRpb24gdG8gc2V0dGluZyB0aGUgdmFsdWUgaW4gc2Vjb25kcywgdGhlIGxhdGVuY3lIaW50IGFsc29cblx0XHQgKiAgYWNjZXB0cyB0aGUgc3RyaW5ncyBcImludGVyYWN0aXZlXCIgKHByaW9yaXRpemVzIGxvdyBsYXRlbmN5KSxcblx0XHQgKiAgXCJwbGF5YmFja1wiIChwcmlvcml0aXplcyBzdXN0YWluZWQgcGxheWJhY2spLCBcImJhbGFuY2VkXCIgKGJhbGFuY2VzXG5cdFx0ICogIGxhdGVuY3kgYW5kIHBlcmZvcm1hbmNlKSwgYW5kIFwiZmFzdGVzdFwiIChsb3dlc3QgbGF0ZW5jeSwgbWlnaHQgZ2xpdGNoIG1vcmUgb2Z0ZW4pLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfFNlY29uZHN9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnRleHQjXG5cdFx0ICogIEBuYW1lIGxhdGVuY3lIaW50XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdGhlIGxvb2tBaGVhZCB0byAwLjMgc2Vjb25kc1xuXHRcdCAqIFRvbmUuY29udGV4dC5sYXRlbmN5SGludCA9IDAuMztcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNvbnRleHQucHJvdG90eXBlLCAnbGF0ZW5jeUhpbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sYXRlbmN5SGludDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGhpbnQpIHtcblx0ICAgICAgICAgICAgdmFyIGxvb2tBaGVhZCA9IGhpbnQ7XG5cdCAgICAgICAgICAgIHRoaXMuX2xhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNTdHJpbmcoaGludCkpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAoaGludCkge1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnaW50ZXJhY3RpdmUnOlxuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuMTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ3BsYXliYWNrJzpcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjg7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdiYWxhbmNlZCc6XG5cdCAgICAgICAgICAgICAgICAgICAgbG9va0FoZWFkID0gMC4yNTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2Zhc3Rlc3QnOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubGF0ZW5jeUhpbnQgPSAnaW50ZXJhY3RpdmUnO1xuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuMDE7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlSW50ZXJ2YWwgPSBsb29rQWhlYWQgLyAzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFVubGlrZSBvdGhlciBkaXNwb3NlIG1ldGhvZHMsIHRoaXMgcmV0dXJucyBhIFByb21pc2Vcblx0XHQgKiAgd2hpY2ggZXhlY3V0ZXMgd2hlbiB0aGUgY29udGV4dCBpcyBjbG9zZWQgYW5kIGRpc3Bvc2VkXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlciA9IG51bGw7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRzLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dHMgPSBudWxsO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjb24gaW4gdGhpcy5fY29uc3RhbnRzKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jb25zdGFudHNbY29uXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzID0gbnVsbDtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBBIGNsYXNzIHdoaWNoIHByb3ZpZGVzIGEgcmVsaWFibGUgY2FsbGJhY2sgdXNpbmcgZWl0aGVyXG5cdFx0ICogICAgICAgIGEgV2ViIFdvcmtlciwgb3IgaWYgdGhhdCBpc24ndCBzdXBwb3J0ZWQsIGZhbGxzIGJhY2sgdG8gc2V0VGltZW91dC5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIFRpY2tlciA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdHlwZSwgdXBkYXRlSW50ZXJ2YWwpIHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEVpdGhlciBcIndvcmtlclwiIG9yIFwidGltZW91dFwiXG5cdFx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHVwZGF0ZSBpbnRlcnZhbCBvZiB0aGUgd29ya2VyXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3VwZGF0ZUludGVydmFsID0gdXBkYXRlSW50ZXJ2YWw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBUb25lLmRlZmF1bHRBcmcoY2FsbGJhY2ssIFRvbmUubm9PcCk7XG5cdCAgICAgICAgLy9jcmVhdGUgdGhlIGNsb2NrIHNvdXJjZSBmb3IgdGhlIGZpcnN0IHRpbWVcblx0ICAgICAgICB0aGlzLl9jcmVhdGVDbG9jaygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwb3NzaWJsZSB0aWNrZXIgdHlwZXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUaWNrZXIuVHlwZSA9IHtcblx0ICAgICAgICBXb3JrZXI6ICd3b3JrZXInLFxuXHQgICAgICAgIFRpbWVvdXQ6ICd0aW1lb3V0Jyxcblx0ICAgICAgICBPZmZsaW5lOiAnb2ZmbGluZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2VuZXJhdGUgYSB3ZWIgd29ya2VyXG5cdFx0ICogIEByZXR1cm4gIHtXZWJXb3JrZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9VUkwgU2hpbVxuXHQgICAgICAgIHdpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cdCAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbLy90aGUgaW5pdGlhbCB0aW1lb3V0IHRpbWVcblx0ICAgICAgICAgICAgJ3ZhciB0aW1lb3V0VGltZSA9ICcgKyAodGhpcy5fdXBkYXRlSW50ZXJ2YWwgKiAxMDAwKS50b0ZpeGVkKDEpICsgJzsnICsgLy9vbm1lc3NhZ2UgY2FsbGJhY2tcblx0ICAgICAgICAgICAgJ3NlbGYub25tZXNzYWdlID0gZnVuY3Rpb24obXNnKXsnICsgJ1xcdHRpbWVvdXRUaW1lID0gcGFyc2VJbnQobXNnLmRhdGEpOycgKyAnfTsnICsgLy90aGUgdGljayBmdW5jdGlvbiB3aGljaCBwb3N0cyBhIG1lc3NhZ2Vcblx0ICAgICAgICAgICAgLy9hbmQgc2NoZWR1bGVzIGEgbmV3IHRpY2tcblx0ICAgICAgICAgICAgJ2Z1bmN0aW9uIHRpY2soKXsnICsgJ1xcdHNldFRpbWVvdXQodGljaywgdGltZW91dFRpbWUpOycgKyAnXFx0c2VsZi5wb3N0TWVzc2FnZShcXCd0aWNrXFwnKTsnICsgJ30nICsgLy9jYWxsIHRpY2sgaW5pdGlhbGx5XG5cdCAgICAgICAgICAgICd0aWNrKCk7J10pO1xuXHQgICAgICAgIHZhciBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0ICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcihibG9iVXJsKTtcblx0ICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gdGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93b3JrZXIgPSB3b3JrZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ3JlYXRlIGEgdGltZW91dCBsb29wXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuX2NyZWF0ZVRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jcmVhdGVUaW1lb3V0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpLCB0aGlzLl91cGRhdGVJbnRlcnZhbCAqIDEwMDApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENyZWF0ZSB0aGUgY2xvY2sgc291cmNlLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9jcmVhdGVDbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVGlja2VyLlR5cGUuV29ya2VyKSB7XG5cdCAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVXb3JrZXIoKTtcblx0ICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgLy8gd29ya2VycyBub3Qgc3VwcG9ydGVkLCBmYWxsYmFjayB0byB0aW1lb3V0XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90eXBlID0gVGlja2VyLlR5cGUuVGltZW91dDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNsb2NrKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRpY2tlci5UeXBlLlRpbWVvdXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGltZW91dCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAbWVtYmVyT2YgVGlja2VyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdXBkYXRlSW50ZXJ2YWxcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRpY2tlci5wcm90b3R5cGUsICd1cGRhdGVJbnRlcnZhbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZUludGVydmFsO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJ2YWwgPSBNYXRoLm1heChpbnRlcnZhbCwgMTI4IC8gNDQxMDApO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVGlja2VyLlR5cGUuV29ya2VyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93b3JrZXIucG9zdE1lc3NhZ2UoTWF0aC5tYXgoaW50ZXJ2YWwgKiAxMDAwLCAxKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSB0aWNrZXIsIGVpdGhlciBhIHdvcmtlciBvciBhIHRpbWVvdXRcblx0XHQgKiBAbWVtYmVyT2YgVGlja2VyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGlja2VyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9kaXNwb3NlQ2xvY2soKTtcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNsb2NrKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cCB0aGUgY3VycmVudCBjbG9jayBzb3VyY2Vcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fZGlzcG9zZUNsb2NrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl90aW1lb3V0KSB7XG5cdCAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLl93b3JrZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fd29ya2VyLnRlcm1pbmF0ZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl93b3JrZXIub25tZXNzYWdlID0gbnVsbDtcblx0ICAgICAgICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2Rpc3Bvc2VDbG9jaygpO1xuXHQgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2hpbSBhbGwgY29ubmVjdC9kaXNjb25uZWN0IGFuZCBzb21lIGRlcHJlY2F0ZWQgbWV0aG9kcyB3aGljaCBhcmUgc3RpbGwgaW5cblx0XHQgKiAgc29tZSBvbGRlciBpbXBsZW1lbnRhdGlvbnMuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBuYXRpdmVDb25uZWN0ID0gQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0O1xuXHQgICAgICAgIHZhciBuYXRpdmVEaXNjb25uZWN0ID0gQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNjb25uZWN0O1xuXHQgICAgICAgIC8vcmVwbGFjZSB0aGUgb2xkIGNvbm5lY3QgbWV0aG9kXG5cdCAgICAgICAgZnVuY3Rpb24gdG9uZUNvbm5lY3QoQiwgb3V0TnVtLCBpbk51bSkge1xuXHQgICAgICAgICAgICBpZiAoQi5pbnB1dCkge1xuXHQgICAgICAgICAgICAgICAgaW5OdW0gPSBUb25lLmRlZmF1bHRBcmcoaW5OdW0sIDApO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheShCLmlucHV0KSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3QoQi5pbnB1dFtpbk51bV0pO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0KEIuaW5wdXQsIG91dE51bSwgaW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoQiBpbnN0YW5jZW9mIEF1ZGlvTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVDb25uZWN0LmNhbGwodGhpcywgQiwgb3V0TnVtLCBpbk51bSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUNvbm5lY3QuY2FsbCh0aGlzLCBCLCBvdXROdW0pO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQjtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlcnJvciBjb25uZWN0aW5nIHRvIG5vZGU6ICcgKyBCICsgJ1xcbicgKyBlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JlcGxhY2UgdGhlIG9sZCBkaXNjb25uZWN0IG1ldGhvZFxuXHQgICAgICAgIGZ1bmN0aW9uIHRvbmVEaXNjb25uZWN0KEIsIG91dE51bSwgaW5OdW0pIHtcblx0ICAgICAgICAgICAgaWYgKEIgJiYgQi5pbnB1dCAmJiBUb25lLmlzQXJyYXkoQi5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgICAgIGluTnVtID0gVG9uZS5kZWZhdWx0QXJnKGluTnVtLCAwKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdChCLmlucHV0W2luTnVtXSwgb3V0TnVtLCAwKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChCICYmIEIuaW5wdXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdChCLmlucHV0LCBvdXROdW0sIGluTnVtKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGlzY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXJyb3IgZGlzY29ubmVjdGluZyBub2RlOiAnICsgQiArICdcXG4nICsgZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCAhPT0gdG9uZUNvbm5lY3QpIHtcblx0ICAgICAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0ID0gdG9uZUNvbm5lY3Q7XG5cdCAgICAgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IHRvbmVEaXNjb25uZWN0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy8gc2V0IHRoZSBhdWRpbyBjb250ZXh0IGluaXRpYWxseSwgYW5kIGlmIG9uZSBpcyBub3QgYWxyZWFkeSBjcmVhdGVkXG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQgJiYgIVRvbmUuaW5pdGlhbGl6ZWQpIHtcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBuZXcgVG9uZS5Db250ZXh0KCk7XG5cdCAgICAgICAgLy8gbG9nIG9uIGZpcnN0IGluaXRpYWxpemF0aW9uXG5cdCAgICAgICAgLy8gYWxsb3cgb3B0aW9uYWwgc2lsZW5jaW5nIG9mIHRoaXMgbG9nXG5cdCAgICAgICAgaWYgKCF3aW5kb3cuVE9ORV9TSUxFTkNFX1ZFUlNJT05fTE9HR0lORykge1xuXHQgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXHQgICAgICAgICAgICBjb25zb2xlLmxvZygnJWMgKiBUb25lLmpzICcgKyBUb25lLnZlcnNpb24gKyAnICogJywgJ2JhY2tncm91bmQ6ICMwMDA7IGNvbG9yOiAjZmZmJyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSBlbHNlIGlmICghVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXHQgICAgICAgIGNvbnNvbGUud2FybignVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgVG9uZS5qcycpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIFRvbmUuQ29udGV4dDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkF1ZGlvTm9kZSBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY2xhc3NlcyB3aGljaCBwcm9jZXNzIGF1ZGlvLlxuXHRcdCAqICAgICAgICAgQXVkaW9Ob2RlcyBoYXZlIGlucHV0cyBhbmQgb3V0cHV0cy5cblx0XHQgKiAgQHBhcmFtXHR7QXVkaW9Db250ZXh0PX0gY29udGV4dFx0VGhlIGF1ZGlvIGNvbnRleHQgdG8gdXNlIHdpdGggdGhlIGNsYXNzXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8vdXNlIHRoZSBkZWZhdWx0IGNvbnRleHQgaWYgb25lIGlzIG5vdCBwYXNzZWQgaW5cblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2NvbnRleHQnXSwgeyAnY29udGV4dCc6IFRvbmUuY29udGV4dCB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBBdWRpb0NvbnRleHQgb2YgdGhpcyBpbnN0YW5jZVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtBdWRpb0NvbnRleHR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgYXVkaW8gY29udGV4dCBiZWxvbmdpbmcgdG8gdGhpcyBpbnN0YW5jZS5cblx0XHQgKiBAdHlwZSB7VG9uZS5Db250ZXh0fVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiBAbmFtZSBjb250ZXh0XG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnY29udGV4dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ3JlYXRlIGlucHV0IGFuZCBvdXRwdXRzIGZvciB0aGlzIG9iamVjdC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgW2lucHV0PTBdICAgVGhlIG51bWJlciBvZiBpbnB1dHNcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgW291dHB1dHM9MF0gIFRoZSBudW1iZXIgb2Ygb3V0cHV0c1xuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5BdWRpb05vZGV9ICB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY3JlYXRlSW5zT3V0cyA9IGZ1bmN0aW9uIChpbnB1dHMsIG91dHB1dHMpIHtcblx0ICAgICAgICBpZiAoaW5wdXRzID09PSAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRzID4gMSkge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0ID0gbmV3IEFycmF5KGlucHV0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChvdXRwdXRzID09PSAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKG91dHB1dHMgPiAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0ID0gbmV3IEFycmF5KG91dHB1dHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2hhbm5lbENvdW50IGlzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdXNlZCB3aGVuIHVwLW1peGluZyBhbmQgZG93bi1taXhpbmdcblx0XHQgKiAgY29ubmVjdGlvbnMgdG8gYW55IGlucHV0cyB0byB0aGUgbm9kZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMiBleGNlcHQgZm9yXG5cdFx0ICogIHNwZWNpZmljIG5vZGVzIHdoZXJlIGl0cyB2YWx1ZSBpcyBzcGVjaWFsbHkgZGV0ZXJtaW5lZC5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIGNoYW5uZWxDb3VudFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjaGFubmVsQ291bnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnQgPSBjO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYW5uZWxDb3VudE1vZGUgZGV0ZXJtaW5lcyBob3cgY2hhbm5lbHMgd2lsbCBiZSBjb3VudGVkIHdoZW4gdXAtbWl4aW5nIGFuZFxuXHRcdCAqICBkb3duLW1peGluZyBjb25uZWN0aW9ucyB0byBhbnkgaW5wdXRzIHRvIHRoZSBub2RlLlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcIm1heFwiLiBUaGlzIGF0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0IGZvciBub2RlcyB3aXRoIG5vIGlucHV0cy5cblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSBjaGFubmVsQ291bnRNb2RlXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NoYW5uZWxDb3VudE1vZGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnRNb2RlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50TW9kZSA9IG07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2hhbm5lbEludGVycHJldGF0aW9uIGRldGVybWluZXMgaG93IGluZGl2aWR1YWwgY2hhbm5lbHMgd2lsbCBiZSB0cmVhdGVkXG5cdFx0ICogIHdoZW4gdXAtbWl4aW5nIGFuZCBkb3duLW1peGluZyBjb25uZWN0aW9ucyB0byBhbnkgaW5wdXRzIHRvIHRoZSBub2RlLlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcInNwZWFrZXJzXCIuXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgY2hhbm5lbEludGVycHJldGF0aW9uXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NoYW5uZWxJbnRlcnByZXRhdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxJbnRlcnByZXRhdGlvbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxJbnRlcnByZXRhdGlvbiA9IGk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpbnB1dHMgZmVlZGluZyBpbnRvIHRoZSBBdWRpb05vZGUuXG5cdFx0ICogIEZvciBzb3VyY2Ugbm9kZXMsIHRoaXMgd2lsbCBiZSAwLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBudW1iZXJPZklucHV0c1xuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ251bWJlck9mSW5wdXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbnB1dCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLmlucHV0KSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0Lmxlbmd0aDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2Ygb3V0cHV0cyBjb21pbmcgb3V0IG9mIHRoZSBBdWRpb05vZGUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIG51bWJlck9mT3V0cHV0c1xuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ251bWJlck9mT3V0cHV0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5sZW5ndGg7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENhbGxlZCB3aGVuIGFuIGF1ZGlvIHBhcmFtIGNvbm5lY3RzIHRvIHRoaXMgbm9kZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuX29uQ29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0aGUgb3V0cHV0IG9mIGEgVG9uZU5vZGUgdG8gYW4gQXVkaW9QYXJhbSwgQXVkaW9Ob2RlLCBvciBUb25lTm9kZVxuXHRcdCAqICBAcGFyYW0gIHtUb25lIHwgQXVkaW9QYXJhbSB8IEF1ZGlvTm9kZX0gdW5pdFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bT0wXSBvcHRpb25hbGx5IHdoaWNoIG91dHB1dCB0byBjb25uZWN0IGZyb21cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtpbnB1dE51bT0wXSBvcHRpb25hbGx5IHdoaWNoIGlucHV0IHRvIGNvbm5lY3QgdG9cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICh1bml0LCBvdXRwdXROdW0sIGlucHV0TnVtKSB7XG5cdCAgICAgICAgaWYgKHVuaXQuX29uQ29ubmVjdCkge1xuXHQgICAgICAgICAgICB1bml0Ll9vbkNvbm5lY3QodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5vdXRwdXQpKSB7XG5cdCAgICAgICAgICAgIG91dHB1dE51bSA9IFRvbmUuZGVmYXVsdEFyZyhvdXRwdXROdW0sIDApO1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dFtvdXRwdXROdW1dLmNvbm5lY3QodW5pdCwgMCwgaW5wdXROdW0pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmNvbm5lY3QodW5pdCwgb3V0cHV0TnVtLCBpbnB1dE51bSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNjb25uZWN0IHRoZSBvdXRwdXRcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8QXVkaW9Ob2RlfSBvdXRwdXQgRWl0aGVyIHRoZSBvdXRwdXQgaW5kZXggdG8gZGlzY29ubmVjdFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgb3V0cHV0IGlzIGFuIGFycmF5LCBvciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSB0byBkaXNjb25uZWN0IGZyb20uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIG91dHB1dE51bSwgaW5wdXROdW0pIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc051bWJlcihkZXN0aW5hdGlvbikpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0W2Rlc3RpbmF0aW9uXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBvdXRwdXROdW0gPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TnVtLCAwKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0W291dHB1dE51bV0uZGlzY29ubmVjdChkZXN0aW5hdGlvbiwgMCwgaW5wdXROdW0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuZGlzY29ubmVjdC5hcHBseSh0aGlzLm91dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGlzIG5vZGUgdG8gdGhlIHJlc3Qgb2YgdGhlIG5vZGVzIGluIHNlcmllcy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy9jb25uZWN0IGEgbm9kZSB0byBhbiBlZmZlY3QsIHBhblZvbCBhbmQgdGhlbiB0byB0aGUgbWFzdGVyIG91dHB1dFxuXHRcdCAqICBub2RlLmNoYWluKGVmZmVjdCwgcGFuVm9sLCBUb25lLk1hc3Rlcik7XG5cdFx0ICogIEBwYXJhbSB7Li4uQXVkaW9QYXJhbXxUb25lfEF1ZGlvTm9kZX0gbm9kZXNcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY2hhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRVbml0ID0gdGhpcztcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgdG9Vbml0ID0gYXJndW1lbnRzW2ldO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdC5jb25uZWN0KHRvVW5pdCk7XG5cdCAgICAgICAgICAgIGN1cnJlbnRVbml0ID0gdG9Vbml0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0aGUgb3V0cHV0IG9mIHRoaXMgbm9kZSB0byB0aGUgcmVzdCBvZiB0aGUgbm9kZXMgaW4gcGFyYWxsZWwuXG5cdFx0ICogIEBwYXJhbSB7Li4uQXVkaW9QYXJhbXxUb25lfEF1ZGlvTm9kZX0gbm9kZXNcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZmFuID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29ubmVjdChhcmd1bWVudHNbaV0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICBpZiAod2luZG93LkF1ZGlvTm9kZSkge1xuXHQgICAgICAgIC8vZ2l2ZSBuYXRpdmUgbm9kZXMgY2hhaW4gYW5kIGZhbiBtZXRob2RzXG5cdCAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5jaGFpbiA9IFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jaGFpbjtcblx0ICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLmZhbiA9IFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5mYW47XG5cdCAgICB9XG5cdCAgICAvKipcblx0XHQgKiBEaXNwb3NlIGFuZCBkaXNjb25uZWN0XG5cdFx0ICogQHJldHVybiB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh0aGlzLmlucHV0KSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbnB1dCBpbnN0YW5jZW9mIEF1ZGlvTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5pbnB1dCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0IGluc3RhbmNlb2YgQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm91dHB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jb250ZXh0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdWRpb05vZGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQmFzZSBjbGFzcyBmb3IgYWxsIFNpZ25hbHMuIFVzZWQgSW50ZXJuYWxseS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbEJhc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNpZ25hbEJhc2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGVuIHNpZ25hbHMgY29ubmVjdCB0byBvdGhlciBzaWduYWxzIG9yIEF1ZGlvUGFyYW1zLFxuXHRcdCAqICB0aGV5IHRha2Ugb3ZlciB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoYXQgc2lnbmFsIG9yIEF1ZGlvUGFyYW0uXG5cdFx0ICogIEZvciBhbGwgb3RoZXIgbm9kZXMsIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBhIGRlZmF1bHQgPGNvZGU+Y29ubmVjdDwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQG92ZXJyaWRlXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9QYXJhbXxBdWRpb05vZGV8VG9uZS5TaWduYWx8VG9uZX0gbm9kZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bWJlcj0wXSBUaGUgb3V0cHV0IG51bWJlciB0byBjb25uZWN0IGZyb20uXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW1iZXI9MF0gVGhlIGlucHV0IG51bWJlciB0byBjb25uZWN0IHRvLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWxCYXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSwgb3V0cHV0TnVtYmVyLCBpbnB1dE51bWJlcikge1xuXHQgICAgICAgIC8vemVybyBpdCBvdXQgc28gdGhhdCB0aGUgc2lnbmFsIGNhbiBoYXZlIGZ1bGwgY29udHJvbFxuXHQgICAgICAgIGlmIChUb25lLlNpZ25hbCAmJiBUb25lLlNpZ25hbCA9PT0gbm9kZS5jb25zdHJ1Y3RvciB8fCBUb25lLlBhcmFtICYmIFRvbmUuUGFyYW0gPT09IG5vZGUuY29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgLy9jYW5jZWwgY2hhbmdlc1xuXHQgICAgICAgICAgICBub2RlLl9wYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoMCk7XG5cdCAgICAgICAgICAgIC8vcmVzZXQgdGhlIHZhbHVlXG5cdCAgICAgICAgICAgIG5vZGUuX3BhcmFtLnZhbHVlID0gMDtcblx0ICAgICAgICAgICAgLy9tYXJrIHRoZSB2YWx1ZSBhcyBvdmVycmlkZGVuXG5cdCAgICAgICAgICAgIG5vZGUub3ZlcnJpZGRlbiA9IHRydWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQXVkaW9QYXJhbSkge1xuXHQgICAgICAgICAgICBub2RlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcygwKTtcblx0ICAgICAgICAgICAgbm9kZS52YWx1ZSA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0LmNhbGwodGhpcywgbm9kZSwgb3V0cHV0TnVtYmVyLCBpbnB1dE51bWJlcik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2lnbmFsQmFzZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgLy9maXhlcyBzYWZhcmkgb25seSBidWcgd2hpY2ggaXMgc3RpbGwgcHJlc2VudCBpbiAxMVxuXHQgICAgICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcblx0ICAgICAgICB2YXIgaXNTYWZhcmkgPSB1YS5pbmNsdWRlcygnc2FmYXJpJykgJiYgIXVhLmluY2x1ZGVzKCdjaHJvbWUnKTtcblx0ICAgICAgICBpZiAoaXNTYWZhcmkpIHtcblx0ICAgICAgICAgICAgdmFyIFdhdmVTaGFwZXJOb2RlID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTm9kZSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IGNvbnRleHQuX25hdGl2ZV9jcmVhdGVXYXZlU2hhcGVyKCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHRoaXMuX2ludGVybmFsTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmluZVByb3BlcnR5KHRoaXMuX2ludGVybmFsTm9kZSwgcHJvcCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXYXZlU2hhcGVyTm9kZS5wcm90b3R5cGUsICdjdXJ2ZScsIHtcblx0ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJ2ZTtcblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjdXJ2ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gY3VydmU7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShjdXJ2ZS5sZW5ndGggKyAxKTtcblx0ICAgICAgICAgICAgICAgICAgICBhcnJheS5zZXQoY3VydmUsIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgIGFycmF5WzBdID0gY3VydmVbMF07XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxOb2RlLmN1cnZlID0gYXJyYXk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBXYXZlU2hhcGVyTm9kZS5wcm90b3R5cGUuX2RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKGNvbnRleHQsIHByb3ApIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpc1twcm9wXSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcCwge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGV4dFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdLmJpbmQoY29udGV4dCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbcHJvcF0gPSB2YWw7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5fbmF0aXZlX2NyZWF0ZVdhdmVTaGFwZXIgPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVdhdmVTaGFwZXI7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlV2F2ZVNoYXBlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV2F2ZVNoYXBlck5vZGUodGhpcyk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHMgdGhlIG5hdGl2ZSBXZWIgQXVkaW8gQVBJXG5cdFx0ICogICAgICAgICBbV2F2ZVNoYXBlck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLXdhdmVzaGFwZXJub2RlLWludGVyZmFjZSkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb258QXJyYXl8TnVtYmVyfSBtYXBwaW5nIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGRlZmluZSB0aGUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1hcHBpbmcgZnVuY3Rpb24gc2hvdWxkIHRha2UgdHdvIGFyZ3VtZW50czpcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBpcyB0aGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBhcnJheSBwb3NpdGlvbi5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBhbiBhcnJheSwgdGhhdCBhcnJheSB3aWxsIGJlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgYXMgdGhlIHdhdmUgc2hhcGluZyBmdW5jdGlvbi4gVGhlIGlucHV0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwgaXMgYW4gQXVkaW9SYW5nZSBbLTEsIDFdIHZhbHVlIGFuZCB0aGUgb3V0cHV0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwgY2FuIHRha2Ugb24gYW55IG51bWVyaWNhbCB2YWx1ZXMuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IFtidWZmZXJMZW49MTAyNF0gVGhlIGxlbmd0aCBvZiB0aGUgV2F2ZVNoYXBlck5vZGUgYnVmZmVyLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB0aW1lc1R3byA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24odmFsKXtcblx0XHQgKiBcdHJldHVybiB2YWwgKiAyO1xuXHRcdCAqIH0sIDIwNDgpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSB3YXZlc2hhcGVyIGNhbiBhbHNvIGJlIGNvbnN0cnVjdGVkIHdpdGggYW4gYXJyYXkgb2YgdmFsdWVzXG5cdFx0ICogdmFyIGludmVydCA9IG5ldyBUb25lLldhdmVTaGFwZXIoWzEsIC0xXSk7XG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVTaGFwZXIgPSBmdW5jdGlvbiAobWFwcGluZywgYnVmZmVyTGVuKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHdhdmVzaGFwZXJcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVXYXZlU2hhcGVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHdhdmVzaGFwZXJzIGN1cnZlXG5cdFx0XHQgKiAgQHR5cGUge0Zsb2F0MzJBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hcHBpbmcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY3VydmUgPSBtYXBwaW5nO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoaXNGaW5pdGUobWFwcGluZykgfHwgVG9uZS5pc1VuZGVmKG1hcHBpbmcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gbmV3IEZsb2F0MzJBcnJheShUb25lLmRlZmF1bHRBcmcobWFwcGluZywgMTAyNCkpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0Z1bmN0aW9uKG1hcHBpbmcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gbmV3IEZsb2F0MzJBcnJheShUb25lLmRlZmF1bHRBcmcoYnVmZmVyTGVuLCAxMDI0KSk7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0TWFwKG1hcHBpbmcpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLldhdmVTaGFwZXIsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVXNlcyBhIG1hcHBpbmcgZnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgY3VydmUuXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb259IG1hcHBpbmcgVGhlIGZ1bmN0aW9uIHVzZWQgdG8gZGVmaW5lIHRoZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1hcHBpbmcgZnVuY3Rpb24gdGFrZSB0d28gYXJndW1lbnRzOlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBpcyB0aGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBnb2VzIGZyb20gLTEgdG8gMSBvdmVyIHRoZSBudW1iZXIgb2YgZWxlbWVudHNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgY3VydmUgYXJyYXkuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGFycmF5IHBvc2l0aW9uLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5XYXZlU2hhcGVyfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9tYXAgdGhlIGlucHV0IHNpZ25hbCBmcm9tIFstMSwgMV0gdG8gWzAsIDEwXVxuXHRcdCAqIHNoYXBlci5zZXRNYXAoZnVuY3Rpb24odmFsLCBpbmRleCl7XG5cdFx0ICogXHRyZXR1cm4gKHZhbCArIDEpICogNTtcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZS5zZXRNYXAgPSBmdW5jdGlvbiAobWFwcGluZykge1xuXHQgICAgICAgIHZhciBhcnJheSA9IG5ldyBBcnJheSh0aGlzLl9jdXJ2ZS5sZW5ndGgpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLl9jdXJ2ZS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgbm9ybWFsaXplZCA9IGkgLyAobGVuIC0gMSkgKiAyIC0gMTtcblx0ICAgICAgICAgICAgYXJyYXlbaV0gPSBtYXBwaW5nKG5vcm1hbGl6ZWQsIGkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmN1cnZlID0gYXJyYXk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGFycmF5IHRvIHNldCBhcyB0aGUgd2F2ZXNoYXBlciBjdXJ2ZS4gRm9yIGxpbmVhciBjdXJ2ZXNcblx0XHQgKiBhcnJheSBsZW5ndGggZG9lcyBub3QgbWFrZSBtdWNoIGRpZmZlcmVuY2UsIGJ1dCBmb3IgY29tcGxleCBjdXJ2ZXNcblx0XHQgKiBsb25nZXIgYXJyYXlzIHdpbGwgcHJvdmlkZSBzbW9vdGhlciBpbnRlcnBvbGF0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLldhdmVTaGFwZXIjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIGN1cnZlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZSwgJ2N1cnZlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLmN1cnZlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWFwcGluZykge1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG5ldyBGbG9hdDMyQXJyYXkobWFwcGluZyk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5jdXJ2ZSA9IHRoaXMuX2N1cnZlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogU3BlY2lmaWVzIHdoYXQgdHlwZSBvZiBvdmVyc2FtcGxpbmcgKGlmIGFueSkgc2hvdWxkIGJlIHVzZWQgd2hlblxuXHRcdCAqIGFwcGx5aW5nIHRoZSBzaGFwaW5nIGN1cnZlLiBDYW4gZWl0aGVyIGJlIFwibm9uZVwiLCBcIjJ4XCIgb3IgXCI0eFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLldhdmVTaGFwZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSBvdmVyc2FtcGxlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZSwgJ292ZXJzYW1wbGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG92ZXJzYW1wbGluZykge1xuXHQgICAgICAgICAgICBpZiAoW1xuXHQgICAgICAgICAgICAgICAgICAgICdub25lJyxcblx0ICAgICAgICAgICAgICAgICAgICAnMngnLFxuXHQgICAgICAgICAgICAgICAgICAgICc0eCdcblx0ICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMob3ZlcnNhbXBsaW5nKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGUgPSBvdmVyc2FtcGxpbmc7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVG9uZS5XYXZlU2hhcGVyOiBvdmVyc2FtcGxpbmcgbXVzdCBiZSBlaXRoZXIgXFwnbm9uZVxcJywgXFwnMnhcXCcsIG9yIFxcJzR4XFwnJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuV2F2ZVNoYXBlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuV2F2ZVNoYXBlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRpbWVCYXNlIGlzIGEgZmxleGlibGUgZW5jb2Rpbmcgb2YgdGltZVxuXHRcdCAqICAgICAgICAgd2hpY2ggY2FuIGJlIGV2YWx1YXRlZCB0byBhbmQgZnJvbSBhIHN0cmluZy5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUgYXMgYSBudW1iZXIgb3Igc3RyaW5nXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVW5pdCB2YWx1ZXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRpbWVCYXNlKDQsIFwiblwiKVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoMiwgXCJ0XCIpXG5cdFx0ICogVG9uZS5UaW1lQmFzZShcIjJ0XCIpXG5cdFx0ICogVG9uZS5UaW1lQmFzZShcIjJ0XCIpICsgVG9uZS5UaW1lQmFzZShcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgLy9hbGxvd3MgaXQgdG8gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0ICduZXcnXG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHZhbHVlXG5cdFx0XHRcdCAqICBAdHlwZSAge051bWJlcnxTdHJpbmd8VG9uZS5UaW1lQmFzZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWw7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgdW5pdHNcblx0XHRcdFx0ICogQHR5cGUge1N0cmluZz99XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl91bml0cyA9IHVuaXRzO1xuXHQgICAgICAgICAgICAvL3Rlc3QgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbnVtYmVyXG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpcy5fdW5pdHMpICYmIFRvbmUuaXNTdHJpbmcodGhpcy5fdmFsKSAmJiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdCAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMuX3ZhbCkgPT0gdGhpcy5fdmFsICYmIHRoaXMuX3ZhbC5jaGFyQXQoMCkgIT09ICcrJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gcGFyc2VGbG9hdCh0aGlzLl92YWwpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB0aGlzLl9kZWZhdWx0VW5pdHM7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsICYmIHZhbC5jb25zdHJ1Y3RvciA9PT0gdGhpcy5jb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAgICAgLy9pZiB0aGV5J3JlIHRoZSBzYW1lIHR5cGUsIGp1c3QgY29weSB2YWx1ZXMgb3ZlclxuXHQgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLl92YWw7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl91bml0cyA9IHZhbC5fdW5pdHM7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9kZWZhdWx0VW5pdHMpIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b1NlY29uZHMoKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2knOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b1RpY2tzKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdoeic6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdtaWRpJzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9NaWRpKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIGRlZmF1bHQgdW5pdHMgJyArIHRoaXMuX2RlZmF1bHRVbml0cyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZUJhc2UodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZUJhc2UpO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QUJTVFJBQ1QgU1lOVEFYIFRSRUUgUEFSU0VSXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBBbGwgdGhlIHByaW1hcnkgZXhwcmVzc2lvbnMuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zID0ge1xuXHQgICAgICAgICduJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspbihcXC4/KSQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUsIGRvdCkge1xuXHQgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2NhbGFyID0gZG90ID09PSAnLicgPyAxLjUgOiAxO1xuXHQgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyh0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkpICogc2NhbGFyO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmVhdHNUb1VuaXRzKDQgLyB2YWx1ZSkgKiBzY2FsYXI7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICd0Jzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspdCQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyg4IC8gKHBhcnNlSW50KHZhbHVlKSAqIDMpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ20nOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyltJC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUludCh2YWx1ZSkgKiB0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnaSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKWkkL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja3NUb1VuaXRzKHBhcnNlSW50KHZhbHVlKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdoeic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KWh6JC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyZXF1ZW5jeVRvVW5pdHMocGFyc2VGbG9hdCh2YWx1ZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndHInOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPyk6KFxcZCsoPzpcXC5cXGQrKT8pOj8oXFxkKyg/OlxcLlxcZCspPyk/JC8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKG0sIHEsIHMpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IDA7XG5cdCAgICAgICAgICAgICAgICBpZiAobSAmJiBtICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLl9iZWF0c1RvVW5pdHModGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpICogcGFyc2VGbG9hdChtKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAocSAmJiBxICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VGbG9hdChxKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAocyAmJiBzICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VGbG9hdChzKSAvIDQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAncyc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KXMkLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWNvbmRzVG9Vbml0cyhwYXJzZUZsb2F0KHZhbHVlKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdzYW1wbGVzJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspc2FtcGxlcyQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKSAvIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnZGVmYXVsdCc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KSQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cHJlc3Npb25zW3RoaXMuX2RlZmF1bHRVbml0c10ubWV0aG9kLmNhbGwodGhpcywgdmFsdWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB1bml0cyBpZiBub25lIGFyZSBnaXZlbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAncyc7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUUkFOU1BPUlQgRkFMTEJBQ0tTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgYnBtLCBvciAxMjAgaWYgVHJhbnNwb3J0IGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZ2V0QnBtID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxMjA7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgdGltZVNpZ25hdHVyZSBvciA0IGlmIFRyYW5zcG9ydCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2dldFRpbWVTaWduYXR1cmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC50aW1lU2lnbmF0dXJlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiA0O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIFBQUSBvciAxOTIgaWYgVHJhbnNwb3J0IGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZ2V0UFBRID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQuUFBRO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxOTI7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgY3VycmVudCB0aW1lIGluIHdoaWNoZXZlciBjb250ZXh0IGlzIHJlbGV2YW50XG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX25vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5ub3coKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRVTklUIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIGZyZXF1ZW5jeSBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiAxIC8gZnJlcTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIDYwIC8gdGhpcy5fZ2V0QnBtKCkgKiBiZWF0cztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzZWNvbmQgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtTZWNvbmRzfSBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiBzZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiB0aWNrcyAqICh0aGlzLl9iZWF0c1RvVW5pdHMoMSkgLyB0aGlzLl9nZXRQUFEoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiAnbm93J1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX25vQXJnID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9ub3coKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRFWFBSRVNTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgRXZhbHVhdGUgdGhlIHRpbWUgdmFsdWUuIFJldHVybnMgdGhlIHRpbWVcblx0XHQgKiAgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpcy5fdmFsKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9BcmcoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcodGhpcy5fdmFsKSAmJiBUb25lLmlzVW5kZWYodGhpcy5fdW5pdHMpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIHVuaXRzIGluIHRoaXMuX2V4cHJlc3Npb25zKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbnNbdW5pdHNdLnJlZ2V4cC50ZXN0KHRoaXMuX3ZhbC50cmltKCkpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB1bml0cztcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodGhpcy5fdW5pdHMpKSB7XG5cdCAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5fZXhwcmVzc2lvbnNbdGhpcy5fdW5pdHNdO1xuXHQgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSB0aGlzLl92YWwudG9TdHJpbmcoKS50cmltKCkubWF0Y2goZXhwci5yZWdleHApO1xuXHQgICAgICAgICAgICBpZiAobWF0Y2hpbmcpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBleHByLm1ldGhvZC5hcHBseSh0aGlzLCBtYXRjaGluZy5zbGljZSgxKSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXhwci5tZXRob2QuY2FsbCh0aGlzLCBwYXJzZUZsb2F0KHRoaXMuX3ZhbCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBpbiBoZXJ0elxuXHRcdCAqICBAcmV0dXJuIHtGcmVxdWVuY3l9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIHRoaXMudG9TZWNvbmRzKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiBzYW1wbGVzXG5cdFx0ICogIEByZXR1cm4gIHtTYW1wbGVzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9TYW1wbGVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcygpICogdGhpcy5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiBtaWxsaXNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtNaWxsaXNlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b01pbGxpc2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHMoKSAqIDEwMDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuVGltZUJhc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fdmFsID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl91bml0cyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZUJhc2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GcmVxdWVuY3kgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgRnJlcXVlbmN5IHZhbHVlcy5cblx0XHQgKiAgICAgICAgIEV2ZW50dWFsbHkgYWxsIHRpbWUgdmFsdWVzIGFyZSBldmFsdWF0ZWQgdG8gaGVydHpcblx0XHQgKiAgICAgICAgIHVzaW5nIHRoZSBgZXZhbGAgbWV0aG9kLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZUJhc2V9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkMzXCIpIC8vIDI2MVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KDM4LCBcIm1pZGlcIikgLy9cblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkMzXCIpLnRyYW5zcG9zZSg0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5ID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuRnJlcXVlbmN5KSB7XG5cdCAgICAgICAgICAgIFRvbmUuVGltZUJhc2UuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuRnJlcXVlbmN5KHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZyZXF1ZW5jeSwgVG9uZS5UaW1lQmFzZSk7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBVUdNRU5UIEJBU0UgRVhQUkVTU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9leHByZXNzaW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9leHByZXNzaW9ucywge1xuXHQgICAgICAgICdtaWRpJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT9taWRpKS8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVsdFVuaXRzID09PSAnbWlkaScpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5tdG9mKHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ25vdGUnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oW2EtZ117MX0oPzpifCN8eHxiYik/KSgtP1swLTldKykvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAocGl0Y2gsIG9jdGF2ZSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gbm90ZVRvU2NhbGVJbmRleFtwaXRjaC50b0xvd2VyQ2FzZSgpXTtcblx0ICAgICAgICAgICAgICAgIHZhciBub3RlTnVtYmVyID0gaW5kZXggKyAocGFyc2VJbnQob2N0YXZlKSArIDEpICogMTI7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVsdFVuaXRzID09PSAnbWlkaScpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm90ZU51bWJlcjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5Lm10b2Yobm90ZU51bWJlcik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICd0cic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KTooXFxkKyg/OlxcLlxcZCspPyk6PyhcXGQrKD86XFwuXFxkKyk/KT8vLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChtLCBxLCBzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAxO1xuXHQgICAgICAgICAgICAgICAgaWYgKG0gJiYgbSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKj0gdGhpcy5fYmVhdHNUb1VuaXRzKHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSAqIHBhcnNlRmxvYXQobSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHEgJiYgcSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKj0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHMgJiYgcyAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKj0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocykgLyA0KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RVhQUkVTU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFRyYW5zcG9zZXMgdGhlIGZyZXF1ZW5jeSBieSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlbWl0b25lcy5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWx9ICBpbnRlcnZhbFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5GcmVxdWVuY3l9IEEgbmV3IHRyYW5zcG9zZWQgZnJlcXVlbmN5XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJBNFwiKS50cmFuc3Bvc2UoMyk7IC8vXCJDNVwiXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudHJhbnNwb3NlID0gZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMudmFsdWVPZigpICogVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oaW50ZXJ2YWwpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGFrZXMgYW4gYXJyYXkgb2Ygc2VtaXRvbmUgaW50ZXJ2YWxzIGFuZCByZXR1cm5zXG5cdFx0ICogIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzIHRyYW5zcG9zZWQgYnkgdGhvc2UgaW50ZXJ2YWxzLlxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIGludGVydmFsc1xuXHRcdCAqICBAcmV0dXJuICB7QXJyYXk8VG9uZS5GcmVxdWVuY3k+fSBSZXR1cm5zIGFuIGFycmF5IG9mIEZyZXF1ZW5jaWVzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJBNFwiKS5oYXJtb25pemUoWzAsIDMsIDddKTsgLy9bXCJBNFwiLCBcIkM1XCIsIFwiRTVcIl1cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5oYXJtb25pemUgPSBmdW5jdGlvbiAoaW50ZXJ2YWxzKSB7XG5cdCAgICAgICAgcmV0dXJuIGludGVydmFscy5tYXAoZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9zZShpbnRlcnZhbCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRVTklUIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgYXMgYSBNSURJIG5vdGVcblx0XHQgKiAgQHJldHVybiAge01JREl9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJDNFwiKS50b01pZGkoKTsgLy82MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvTWlkaSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbSh0aGlzLnZhbHVlT2YoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBpbiBTY2llbnRpZmljIFBpdGNoIE5vdGF0aW9uXG5cdFx0ICogIEByZXR1cm4gIHtOb3RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KDY5LCBcIm1pZGlcIikudG9Ob3RlKCk7IC8vXCJBNFwiXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9Ob3RlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBmcmVxID0gdGhpcy50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHZhciBsb2cgPSBNYXRoLmxvZzIoZnJlcSAvIFRvbmUuRnJlcXVlbmN5LkE0KTtcblx0ICAgICAgICB2YXIgbm90ZU51bWJlciA9IE1hdGgucm91bmQoMTIgKiBsb2cpICsgNTc7XG5cdCAgICAgICAgdmFyIG9jdGF2ZSA9IE1hdGguZmxvb3Iobm90ZU51bWJlciAvIDEyKTtcblx0ICAgICAgICBpZiAob2N0YXZlIDwgMCkge1xuXHQgICAgICAgICAgICBub3RlTnVtYmVyICs9IC0xMiAqIG9jdGF2ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIG5vdGVOYW1lID0gc2NhbGVJbmRleFRvTm90ZVtub3RlTnVtYmVyICUgMTJdO1xuXHQgICAgICAgIHJldHVybiBub3RlTmFtZSArIG9jdGF2ZS50b1N0cmluZygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGR1cmF0aW9uIG9mIG9uZSBjeWNsZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b1NlY29uZHMuY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBpbiBIZXJ0elxuXHRcdCAqICBAcmV0dXJuICB7RnJlcXVlbmN5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b0ZyZXF1ZW5jeS5jYWxsKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGR1cmF0aW9uIG9mIG9uZSBjeWNsZSBpbiB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcXVhcnRlclRpbWUgPSB0aGlzLl9iZWF0c1RvVW5pdHMoMSk7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJzID0gdGhpcy52YWx1ZU9mKCkgLyBxdWFydGVyVGltZTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihxdWFydGVycyAqIFRvbmUuVHJhbnNwb3J0LlBQUSk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VU5JVCBDT05WRVJTSU9OUyBIRUxQRVJTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBXaXRoIG5vIGFyZ3VtZW50cywgcmV0dXJuIDBcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fbm9BcmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgZnJlcXVlbmN5IGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiBmcmVxO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gMSAvICh0aWNrcyAqIDYwIC8gKFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZSAqIFRvbmUuVHJhbnNwb3J0LlBQUSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBiZWF0cyBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gYmVhdHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzLmNhbGwodGhpcywgYmVhdHMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiAxIC8gc2Vjb25kcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2RlZmF1bHRVbml0cyA9ICdoeic7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRGUkVRVUVOQ1kgQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIE5vdGUgdG8gc2NhbGUgaW5kZXhcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICB2YXIgbm90ZVRvU2NhbGVJbmRleCA9IHtcblx0ICAgICAgICAnY2JiJzogLTIsXG5cdCAgICAgICAgJ2NiJzogLTEsXG5cdCAgICAgICAgJ2MnOiAwLFxuXHQgICAgICAgICdjIyc6IDEsXG5cdCAgICAgICAgJ2N4JzogMixcblx0ICAgICAgICAnZGJiJzogMCxcblx0ICAgICAgICAnZGInOiAxLFxuXHQgICAgICAgICdkJzogMixcblx0ICAgICAgICAnZCMnOiAzLFxuXHQgICAgICAgICdkeCc6IDQsXG5cdCAgICAgICAgJ2ViYic6IDIsXG5cdCAgICAgICAgJ2ViJzogMyxcblx0ICAgICAgICAnZSc6IDQsXG5cdCAgICAgICAgJ2UjJzogNSxcblx0ICAgICAgICAnZXgnOiA2LFxuXHQgICAgICAgICdmYmInOiAzLFxuXHQgICAgICAgICdmYic6IDQsXG5cdCAgICAgICAgJ2YnOiA1LFxuXHQgICAgICAgICdmIyc6IDYsXG5cdCAgICAgICAgJ2Z4JzogNyxcblx0ICAgICAgICAnZ2JiJzogNSxcblx0ICAgICAgICAnZ2InOiA2LFxuXHQgICAgICAgICdnJzogNyxcblx0ICAgICAgICAnZyMnOiA4LFxuXHQgICAgICAgICdneCc6IDksXG5cdCAgICAgICAgJ2FiYic6IDcsXG5cdCAgICAgICAgJ2FiJzogOCxcblx0ICAgICAgICAnYSc6IDksXG5cdCAgICAgICAgJ2EjJzogMTAsXG5cdCAgICAgICAgJ2F4JzogMTEsXG5cdCAgICAgICAgJ2JiYic6IDksXG5cdCAgICAgICAgJ2JiJzogMTAsXG5cdCAgICAgICAgJ2InOiAxMSxcblx0ICAgICAgICAnYiMnOiAxMixcblx0ICAgICAgICAnYngnOiAxM1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzY2FsZSBpbmRleCB0byBub3RlIChzaGFycHMpXG5cdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgc2NhbGVJbmRleFRvTm90ZSA9IFtcblx0ICAgICAgICAnQycsXG5cdCAgICAgICAgJ0MjJyxcblx0ICAgICAgICAnRCcsXG5cdCAgICAgICAgJ0QjJyxcblx0ICAgICAgICAnRScsXG5cdCAgICAgICAgJ0YnLFxuXHQgICAgICAgICdGIycsXG5cdCAgICAgICAgJ0cnLFxuXHQgICAgICAgICdHIycsXG5cdCAgICAgICAgJ0EnLFxuXHQgICAgICAgICdBIycsXG5cdCAgICAgICAgJ0InXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBbY29uY2VydCBwaXRjaF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29uY2VydF9waXRjaClcblx0XHQgKiAgQTQncyB2YWx1ZXMgaW4gSGVydHouXG5cdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LkE0ID0gNDQwO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBNSURJIG5vdGUgdG8gZnJlcXVlbmN5IHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtNSURJfSBtaWRpIFRoZSBtaWRpIG51bWJlciB0byBjb252ZXJ0LlxuXHRcdCAqICBAcmV0dXJuIHtGcmVxdWVuY3l9IHRoZSBjb3JyZXNwb25kaW5nIGZyZXF1ZW5jeSB2YWx1ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3kubXRvZig2OSk7IC8vIHJldHVybnMgNDQwXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5tdG9mID0gZnVuY3Rpb24gKG1pZGkpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuQTQgKiBNYXRoLnBvdygyLCAobWlkaSAtIDY5KSAvIDEyKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIGZyZXF1ZW5jeSB2YWx1ZSB0byBhIE1JREkgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgdmFsdWUgdG8gZnJlcXVlbmN5IHZhbHVlIHRvIGNvbnZlcnQuXG5cdFx0ICogIEByZXR1cm5zICB7TUlESX1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5LmZ0b20oNDQwKTsgLy8gcmV0dXJucyA2OVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kuZnRvbSA9IGZ1bmN0aW9uIChmcmVxdWVuY3kpIHtcblx0ICAgICAgICByZXR1cm4gNjkgKyBNYXRoLnJvdW5kKDEyICogTWF0aC5sb2cyKGZyZXF1ZW5jeSAvIFRvbmUuRnJlcXVlbmN5LkE0KSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVGltZSBpcyBhIHByaW1pdGl2ZSB0eXBlIGZvciBlbmNvZGluZyBUaW1lIHZhbHVlcy5cblx0XHQgKiAgICAgICAgIFRvbmUuVGltZSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0IHRoZSBgbmV3YCBrZXl3b3JkLiBUb25lLlRpbWUgY2FuIGJlIHBhc3NlZFxuXHRcdCAqICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIG9mIGFueSBtZXRob2Qgd2hpY2ggdGFrZXMgdGltZSBhcyBhbiBhcmd1bWVudC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWVCYXNlfVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHQgPSBUb25lLlRpbWUoXCI0blwiKTsvL2EgcXVhcnRlciBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UaW1lKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVGltZUJhc2UuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaW1lLCBUb25lLlRpbWVCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIEV4dGVuZCB0aGUgYmFzZSBleHByZXNzaW9uc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMsIHtcblx0ICAgICAgICAncXVhbnRpemUnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL15AKC4rKS8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKGNhcHR1cmUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBxdWFudFRvID0gbmV3IHRoaXMuY29uc3RydWN0b3IoY2FwdHVyZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0Lm5leHRTdWJkaXZpc2lvbihxdWFudFRvKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdub3cnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL15cXCsoLispLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAoY2FwdHVyZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdygpICsgbmV3IHRoaXMuY29uc3RydWN0b3IoY2FwdHVyZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBRdWFudGl6ZSB0aGUgdGltZSBieSB0aGUgZ2l2ZW4gc3ViZGl2aXNpb24uIE9wdGlvbmFsbHkgYWRkIGFcblx0XHQgKiAgcGVyY2VudGFnZSB3aGljaCB3aWxsIG1vdmUgdGhlIHRpbWUgdmFsdWUgdG93YXJkcyB0aGUgaWRlYWxcblx0XHQgKiAgcXVhbnRpemVkIHZhbHVlIGJ5IHRoYXQgcGVyY2VudGFnZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfFRpbWV9ICB2YWwgICAgVGhlIHN1YmRpdmlzaW9uIHRvIHF1YW50aXplIHRvXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSAgW3BlcmNlbnQ9MV0gIE1vdmUgdGhlIHRpbWUgdmFsdWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG93YXJkcyB0aGUgcXVhbnRpemVkIHZhbHVlIGJ5XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcGVyY2VudGFnZS5cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRpbWUoMjEpLnF1YW50aXplKDIpIC8vcmV0dXJucyAyMlxuXHRcdCAqIFRvbmUuVGltZSgwLjYpLnF1YW50aXplKFwiNG5cIiwgMC41KSAvL3JldHVybnMgMC41NVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS5xdWFudGl6ZSA9IGZ1bmN0aW9uIChzdWJkaXYsIHBlcmNlbnQpIHtcblx0ICAgICAgICBwZXJjZW50ID0gVG9uZS5kZWZhdWx0QXJnKHBlcmNlbnQsIDEpO1xuXHQgICAgICAgIHZhciBzdWJkaXZpc2lvbiA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHN1YmRpdik7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICAgICAgdmFyIG11bHRpcGxlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHN1YmRpdmlzaW9uKTtcblx0ICAgICAgICB2YXIgaWRlYWwgPSBtdWx0aXBsZSAqIHN1YmRpdmlzaW9uO1xuXHQgICAgICAgIHZhciBkaWZmID0gaWRlYWwgLSB2YWx1ZTtcblx0ICAgICAgICByZXR1cm4gdmFsdWUgKyBkaWZmICogcGVyY2VudDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgVGltZSB0byBOb3RhdGlvbi4gVGhlIG5vdGF0aW9uIHZhbHVlcyBhcmUgd2lsbCBiZSB0aGVcblx0XHQgKiAgY2xvc2VzdCByZXByZXNlbnRhdGlvbiBiZXR3ZWVuIDFtIHRvIDEyOHRoIG5vdGUuXG5cdFx0ICogIEByZXR1cm4ge05vdGF0aW9ufVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaWYgdGhlIFRyYW5zcG9ydCBpcyBhdCAxMjBicG06XG5cdFx0ICogVG9uZS5UaW1lKDIpLnRvTm90YXRpb24oKTsvL3JldHVybnMgXCIxbVwiXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvTm90YXRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHRpbWUgPSB0aGlzLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIHZhciB0ZXN0Tm90YXRpb25zID0gWycxbSddO1xuXHQgICAgICAgIGZvciAodmFyIHBvd2VyID0gMTsgcG93ZXIgPCA4OyBwb3dlcisrKSB7XG5cdCAgICAgICAgICAgIHZhciBzdWJkaXYgPSBNYXRoLnBvdygyLCBwb3dlcik7XG5cdCAgICAgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaChzdWJkaXYgKyAnbi4nKTtcblx0ICAgICAgICAgICAgdGVzdE5vdGF0aW9ucy5wdXNoKHN1YmRpdiArICduJyk7XG5cdCAgICAgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaChzdWJkaXYgKyAndCcpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goJzAnKTtcblx0ICAgICAgICAvL2ZpbmQgdGhlIGNsb3NldHMgbm90YXRpb24gcmVwcmVzZW50YXRpb25cblx0ICAgICAgICB2YXIgY2xvc2VzdCA9IHRlc3ROb3RhdGlvbnNbMF07XG5cdCAgICAgICAgdmFyIGNsb3Nlc3RTZWNvbmRzID0gVG9uZS5UaW1lKHRlc3ROb3RhdGlvbnNbMF0pLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIHRlc3ROb3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobm90YXRpb24pIHtcblx0ICAgICAgICAgICAgdmFyIG5vdGF0aW9uU2Vjb25kcyA9IFRvbmUuVGltZShub3RhdGlvbikudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyhub3RhdGlvblNlY29uZHMgLSB0aW1lKSA8IE1hdGguYWJzKGNsb3Nlc3RTZWNvbmRzIC0gdGltZSkpIHtcblx0ICAgICAgICAgICAgICAgIGNsb3Nlc3QgPSBub3RhdGlvbjtcblx0ICAgICAgICAgICAgICAgIGNsb3Nlc3RTZWNvbmRzID0gbm90YXRpb25TZWNvbmRzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIGNsb3Nlc3Q7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBlbmNvZGVkIGFzIEJhcnM6QmVhdHM6U2l4dGVlbnRocy5cblx0XHQgKiAgQHJldHVybiAge0JhcnNCZWF0c1NpeHRlZW50aHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvQmFyc0JlYXRzU2l4dGVlbnRocyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcXVhcnRlclRpbWUgPSB0aGlzLl9iZWF0c1RvVW5pdHMoMSk7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJzID0gdGhpcy52YWx1ZU9mKCkgLyBxdWFydGVyVGltZTtcblx0ICAgICAgICB2YXIgbWVhc3VyZXMgPSBNYXRoLmZsb29yKHF1YXJ0ZXJzIC8gdGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpKTtcblx0ICAgICAgICB2YXIgc2l4dGVlbnRocyA9IHF1YXJ0ZXJzICUgMSAqIDQ7XG5cdCAgICAgICAgcXVhcnRlcnMgPSBNYXRoLmZsb29yKHF1YXJ0ZXJzKSAlIHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKTtcblx0ICAgICAgICBzaXh0ZWVudGhzID0gc2l4dGVlbnRocy50b1N0cmluZygpO1xuXHQgICAgICAgIGlmIChzaXh0ZWVudGhzLmxlbmd0aCA+IDMpIHtcblx0ICAgICAgICAgICAgLy8gdGhlIGFkZGl0aW9uYWwgcGFyc2VGbG9hdCByZW1vdmVzIGluc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb2VzXG5cdCAgICAgICAgICAgIHNpeHRlZW50aHMgPSBwYXJzZUZsb2F0KHBhcnNlRmxvYXQoc2l4dGVlbnRocykudG9GaXhlZCgzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBwcm9ncmVzcyA9IFtcblx0ICAgICAgICAgICAgbWVhc3VyZXMsXG5cdCAgICAgICAgICAgIHF1YXJ0ZXJzLFxuXHQgICAgICAgICAgICBzaXh0ZWVudGhzXG5cdCAgICAgICAgXTtcblx0ICAgICAgICByZXR1cm4gcHJvZ3Jlc3Muam9pbignOicpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gdGlja3MuXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcXVhcnRlclRpbWUgPSB0aGlzLl9iZWF0c1RvVW5pdHMoMSk7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJzID0gdGhpcy52YWx1ZU9mKCkgLyBxdWFydGVyVGltZTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChxdWFydGVycyAqIHRoaXMuX2dldFBQUSgpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIGFzIGEgbWlkaSBub3RlLlxuXHRcdCAqICBAcmV0dXJuICB7TWlkaX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9NaWRpID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKHRoaXMudG9GcmVxdWVuY3koKSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyYW5zcG9ydFRpbWUgaXMgYSB0aGUgdGltZSBhbG9uZyB0aGUgVHJhbnNwb3J0J3Ncblx0XHQgKiAgICAgICAgIHRpbWVsaW5lLiBJdCBpcyBzaW1pbGFyIHRvIFRvbmUuVGltZSwgYnV0IGluc3RlYWQgb2YgZXZhbHVhdGluZ1xuXHRcdCAqICAgICAgICAgYWdhaW5zdCB0aGUgQXVkaW9Db250ZXh0J3MgY2xvY2ssIGl0IGlzIGV2YWx1YXRlZCBhZ2FpbnN0XG5cdFx0ICogICAgICAgICB0aGUgVHJhbnNwb3J0J3MgcG9zaXRpb24uIFNlZSBbVHJhbnNwb3J0VGltZSB3aWtpXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9UcmFuc3BvcnRUaW1lKS5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUgYXMgYSBudW1iZXIgb3Igc3RyaW5nXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVW5pdCB2YWx1ZXNcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRyYW5zcG9ydFRpbWUpIHtcblx0ICAgICAgICAgICAgVG9uZS5UaW1lLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRyYW5zcG9ydFRpbWUodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0VGltZSwgVG9uZS5UaW1lKTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgY3VycmVudCB0aW1lIGluIHdoaWNoZXZlciBjb250ZXh0IGlzIHJlbGV2YW50XG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lLnByb3RvdHlwZS5fbm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC5zZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydFRpbWU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRZUEVTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqIFVuaXRzIHdoaWNoIGEgdmFsdWUgY2FuIHRha2Ugb24uXG5cdFx0ICogQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuVHlwZSA9IHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBEZWZhdWx0IHVuaXRzXG5cdFx0XHQgKiAgQHR5cGVkZWYge0RlZmF1bHR9XG5cdFx0XHQgKi9cblx0ICAgICAgICBEZWZhdWx0OiAnbnVtYmVyJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaW1lIGNhbiBiZSBkZXNjcmliZWQgaW4gYSBudW1iZXIgb2Ygd2F5cy4gUmVhZCBtb3JlIFtUaW1lXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9UaW1lKS5cblx0XHRcdCAqXG5cdFx0XHQgKiAgKiBOdW1iZXJzLCB3aGljaCB3aWxsIGJlIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgdGltZSAoaW4gc2Vjb25kcykuXG5cdFx0XHQgKiAgKiBOb3RhdGlvbiwgKFwiNG5cIiwgXCI4dFwiKSBkZXNjcmliZXMgdGltZSBpbiBCUE0gYW5kIHRpbWUgc2lnbmF0dXJlIHJlbGF0aXZlIHZhbHVlcy5cblx0XHRcdCAqICAqIFRyYW5zcG9ydFRpbWUsIChcIjQ6MzoyXCIpIHdpbGwgYWxzbyBwcm92aWRlIHRlbXBvIGFuZCB0aW1lIHNpZ25hdHVyZSByZWxhdGl2ZSB0aW1lc1xuXHRcdFx0ICogIGluIHRoZSBmb3JtIEJBUlM6UVVBUlRFUlM6U0lYVEVFTlRIUy5cblx0XHRcdCAqICAqIEZyZXF1ZW5jeSwgKFwiOGh6XCIpIGlzIGNvbnZlcnRlZCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjeWNsZSBpbiBzZWNvbmRzLlxuXHRcdFx0ICogICogTm93LVJlbGF0aXZlLCAoXCIrMVwiKSBwcmVmaXggYW55IG9mIHRoZSBhYm92ZSB3aXRoIFwiK1wiIGFuZCBpdCB3aWxsIGJlIGludGVycHJldGVkIGFzXG5cdFx0XHQgKiAgXCJ0aGUgY3VycmVudCB0aW1lIHBsdXMgd2hhdGV2ZXIgZXhwcmVzc2lvbiBmb2xsb3dzXCIuXG5cdFx0XHQgKiAgKiBFeHByZXNzaW9ucywgKFwiMzowICsgMiAtICgxbSAvIDcpXCIpIGFueSBvZiB0aGUgYWJvdmUgY2FuIGFsc28gYmUgY29tYmluZWRcblx0XHRcdCAqICBpbnRvIGEgbWF0aGVtYXRpY2FsIGV4cHJlc3Npb24gd2hpY2ggd2lsbCBiZSBldmFsdWF0ZWQgdG8gY29tcHV0ZSB0aGUgZGVzaXJlZCB0aW1lLlxuXHRcdFx0ICogICogTm8gQXJndW1lbnQsIGZvciBtZXRob2RzIHdoaWNoIGFjY2VwdCB0aW1lLCBubyBhcmd1bWVudCB3aWxsIGJlIGludGVycHJldGVkIGFzXG5cdFx0XHQgKiAgXCJub3dcIiAoaS5lLiB0aGUgY3VycmVudFRpbWUpLlxuXHRcdFx0ICpcblx0XHRcdCAqICBAdHlwZWRlZiB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIFRpbWU6ICd0aW1lJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBGcmVxdWVuY3kgY2FuIGJlIGRlc2NyaWJlZCBzaW1pbGFyIHRvIHRpbWUsIGV4Y2VwdCB1bHRpbWF0ZWx5IHRoZVxuXHRcdFx0ICogIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIGZyZXF1ZW5jeSBpbnN0ZWFkIG9mIHNlY29uZHMuIEEgbnVtYmVyXG5cdFx0XHQgKiAgaXMgdGFrZW4gbGl0ZXJhbGx5IGFzIHRoZSB2YWx1ZSBpbiBoZXJ0ei4gQWRkaXRpb25hbGx5IGFueSBvZiB0aGVcblx0XHRcdCAqICBUaW1lIGVuY29kaW5ncyBjYW4gYmUgdXNlZC4gTm90ZSBuYW1lcyBpbiB0aGUgZm9ybVxuXHRcdFx0ICogIG9mIE5PVEUgT0NUQVZFIChpLmUuIEM0KSBhcmUgYWxzbyBhY2NlcHRlZCBhbmQgY29udmVydGVkIHRvIHRoZWlyXG5cdFx0XHQgKiAgZnJlcXVlbmN5IHZhbHVlLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtGcmVxdWVuY3l9XG5cdFx0XHQgKi9cblx0ICAgICAgICBGcmVxdWVuY3k6ICdmcmVxdWVuY3knLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRyYW5zcG9ydFRpbWUgZGVzY3JpYmVzIGEgcG9zaXRpb24gYWxvbmcgdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lLiBJdCBpc1xuXHRcdFx0ICogIHNpbWlsYXIgdG8gVGltZSBpbiB0aGF0IGl0IHVzZXMgYWxsIHRoZSBzYW1lIGVuY29kaW5ncywgYnV0IFRyYW5zcG9ydFRpbWUgc3BlY2lmaWNhbGx5XG5cdFx0XHQgKiAgcGVydGFpbnMgdG8gdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lLCB3aGljaCBpcyBzdGFydGFibGUsIHN0b3BwYWJsZSwgbG9vcGFibGUsIGFuZCBzZWVrYWJsZS5cblx0XHRcdCAqICBbUmVhZCBtb3JlXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9UcmFuc3BvcnRUaW1lKVxuXHRcdFx0ICogIEB0eXBlZGVmIHtUcmFuc3BvcnRUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgVHJhbnNwb3J0VGltZTogJ3RyYW5zcG9ydFRpbWUnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRpY2tzIGFyZSB0aGUgYmFzaWMgc3VidW5pdCBvZiB0aGUgVHJhbnNwb3J0LiBUaGV5IGFyZVxuXHRcdFx0ICogIHRoZSBzbWFsbGVzdCB1bml0IG9mIHRpbWUgdGhhdCB0aGUgVHJhbnNwb3J0IHN1cHBvcnRzLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtUaWNrc31cblx0XHRcdCAqL1xuXHQgICAgICAgIFRpY2tzOiAndGlja3MnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE5vcm1hbCB2YWx1ZXMgYXJlIHdpdGhpbiB0aGUgcmFuZ2UgWzAsIDFdLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIE5vcm1hbFJhbmdlOiAnbm9ybWFsUmFuZ2UnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEF1ZGlvUmFuZ2UgdmFsdWVzIGFyZSBiZXR3ZWVuIFstMSwgMV0uXG5cdFx0XHQgKiAgQHR5cGVkZWYge0F1ZGlvUmFuZ2V9XG5cdFx0XHQgKi9cblx0ICAgICAgICBBdWRpb1JhbmdlOiAnYXVkaW9SYW5nZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRGVjaWJlbHMgYXJlIGEgbG9nYXJpdGhtaWMgdW5pdCBvZiBtZWFzdXJlbWVudCB3aGljaCBpcyB1c2VmdWwgZm9yIHZvbHVtZVxuXHRcdFx0ICogIGJlY2F1c2Ugb2YgdGhlIGxvZ2FyaXRobWljIHdheSB0aGF0IHdlIHBlcmNlaXZlIGxvdWRuZXNzLiAwIGRlY2liZWxzXG5cdFx0XHQgKiAgbWVhbnMgbm8gY2hhbmdlIGluIHZvbHVtZS4gLTEwZGIgaXMgYXBwcm94aW1hdGVseSBoYWxmIGFzIGxvdWQgYW5kIDEwZGJcblx0XHRcdCAqICBpcyB0d2ljZSBpcyBsb3VkLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtEZWNpYmVsc31cblx0XHRcdCAqL1xuXHQgICAgICAgIERlY2liZWxzOiAnZGInLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhbGYtc3RlcCBub3RlIGluY3JlbWVudHMsIGkuZS4gMTIgaXMgYW4gb2N0YXZlIGFib3ZlIHRoZSByb290LiBhbmQgMSBpcyBhIGhhbGYtc3RlcCB1cC5cblx0XHRcdCAqICBAdHlwZWRlZiB7SW50ZXJ2YWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICBJbnRlcnZhbDogJ2ludGVydmFsJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBCZWF0cyBwZXIgbWludXRlLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtCUE19XG5cdFx0XHQgKi9cblx0ICAgICAgICBCUE06ICdicG0nLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIFBvc2l0aXZlOiAncG9zaXRpdmUnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEdhaW4gaXMgdGhlIHJhdGlvIGJldHdlZW4gaW5wdXQgYW5kIG91dHB1dCBvZiBhIHNpZ25hbC5cblx0XHRcdCAqICBBIGdhaW4gb2YgMCBpcyB0aGUgc2FtZSBhcyBzaWxlbmNpbmcgdGhlIHNpZ25hbC4gQSBnYWluIG9mXG5cdFx0XHQgKiAgMSwgY2F1c2VzIG5vIGNoYW5nZSB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtHYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgR2FpbjogJ2dhaW4nLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgY2VudCBpcyBhIGh1bmRyZWR0aCBvZiBhIHNlbWl0b25lLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtDZW50c31cblx0XHRcdCAqL1xuXHQgICAgICAgIENlbnRzOiAnY2VudHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuZ2xlIGJldHdlZW4gMCBhbmQgMzYwLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtEZWdyZWVzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgRGVncmVlczogJ2RlZ3JlZXMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgbnVtYmVyIHJlcHJlc2VudGluZyBhIG1pZGkgbm90ZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7TUlESX1cblx0XHRcdCAqL1xuXHQgICAgICAgIE1JREk6ICdtaWRpJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGNvbG9uLXNlcGFyYXRlZCByZXByZXNlbnRhdGlvbiBvZiB0aW1lIGluIHRoZSBmb3JtIG9mXG5cdFx0XHQgKiAgQmFyczpCZWF0czpTaXh0ZWVudGhzLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtCYXJzQmVhdHNTaXh0ZWVudGhzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQmFyc0JlYXRzU2l4dGVlbnRoczogJ2JhcnNCZWF0c1NpeHRlZW50aHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNhbXBsaW5nIGlzIHRoZSByZWR1Y3Rpb24gb2YgYSBjb250aW51b3VzIHNpZ25hbCB0byBhIGRpc2NyZXRlIHNpZ25hbC5cblx0XHRcdCAqICBBdWRpbyBpcyB0eXBpY2FsbHkgc2FtcGxlZCA0NDEwMCB0aW1lcyBwZXIgc2Vjb25kLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtTYW1wbGVzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgU2FtcGxlczogJ3NhbXBsZXMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhlcnR6IGFyZSBhIGZyZXF1ZW5jeSByZXByZXNlbnRhdGlvbiBkZWZpbmVkIGFzIG9uZSBjeWNsZSBwZXIgc2Vjb25kLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtIZXJ0en1cblx0XHRcdCAqL1xuXHQgICAgICAgIEhlcnR6OiAnaGVydHonLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgZnJlcXVlbmN5IHJlcHJlc2VudGVkIGJ5IGEgbGV0dGVyIG5hbWUsXG5cdFx0XHQgKiAgYWNjaWRlbnRhbCBhbmQgb2N0YXZlLiBUaGlzIHN5c3RlbSBpcyBrbm93biBhc1xuXHRcdFx0ICogIFtTY2llbnRpZmljIFBpdGNoIE5vdGF0aW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TY2llbnRpZmljX3BpdGNoX25vdGF0aW9uKS5cblx0XHRcdCAqICBAdHlwZWRlZiB7Tm90ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIE5vdGU6ICdub3RlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBPbmUgbWlsbGlzZWNvbmQgaXMgYSB0aG91c2FuZHRoIG9mIGEgc2Vjb25kLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtNaWxsaXNlY29uZHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBNaWxsaXNlY29uZHM6ICdtaWxsaXNlY29uZHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNlY29uZHMgYXJlIHRoZSB0aW1lIHVuaXQgb2YgdGhlIEF1ZGlvQ29udGV4dC4gSW4gdGhlIGVuZCxcblx0XHRcdCAqICBhbGwgdmFsdWVzIG5lZWQgdG8gYmUgZXZhbHVhdGVkIHRvIHNlY29uZHMuXG5cdFx0XHQgKiAgQHR5cGVkZWYge1NlY29uZHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBTZWNvbmRzOiAnc2Vjb25kcycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZHVyYXRpb24gcmVsYXRpdmUgdG8gYSBtZWFzdXJlLlxuXHRcdFx0ICogICogXCI0blwiID0gcXVhcnRlciBub3RlXG5cdFx0XHQgKiAgKiBcIjJtXCIgPSB0d28gbWVhc3VyZXNcblx0XHRcdCAqICAqIFwiOHRcIiA9IGVpZ2h0aC1ub3RlIHRyaXBsZXRcblx0XHRcdCAqICBAdHlwZWRlZiB7Tm90YXRpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICBOb3RhdGlvbjogJ25vdGF0aW9uJ1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gQVVHTUVOVCBUT05FJ3MgUFJPVE9UWVBFXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IFRpbWUgaW50byBzZWNvbmRzLlxuXHRcdCAqXG5cdFx0ICogIFVubGlrZSB0aGUgbWV0aG9kIHdoaWNoIGl0IG92ZXJyaWRlcywgdGhpcyB0YWtlcyBpbnRvIGFjY291bnRcblx0XHQgKiAgdHJhbnNwb3J0dGltZSBhbmQgbXVzaWNhbCBub3RhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBUaW1lIDogMS40MFxuXHRcdCAqICBOb3RhdGlvbjogNG4gb3IgMW0gb3IgMnRcblx0XHQgKiAgTm93IFJlbGF0aXZlOiArM25cblx0XHQgKiAgTWF0aDogM24rMTZuIG9yIGV2ZW4gY29tcGxpY2F0ZWQgZXhwcmVzc2lvbnMgKCgzbioyKS82ICsgMSlcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm4ge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aW1lO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1VuZGVmKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm5vdygpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyh0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZSh0aW1lKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRpbWUgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aW1lLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIGZyZXF1ZW5jeSByZXByZXNlbnRhdGlvbiBpbnRvIGEgbnVtYmVyLlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiB7SGVydHp9ICAgICAgdGhlIGZyZXF1ZW5jeSBpbiBoZXJ0elxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9GcmVxdWVuY3kgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGZyZXEpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmcmVxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhmcmVxKSB8fCBUb25lLmlzVW5kZWYoZnJlcSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLkZyZXF1ZW5jeShmcmVxKS52YWx1ZU9mKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChmcmVxIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gZnJlcS50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIHRpbWUgcmVwcmVzZW50YXRpb24gaW50byB0aWNrcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJuIHtUaWNrc30gIHRoZSB0aW1lIGluIHRpY2tzXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b1RpY2tzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcih0aW1lKSB8fCBUb25lLmlzU3RyaW5nKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpLnRvVGlja3MoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQudGlja3M7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aW1lIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGltZS50b1RpY2tzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYXJhbSB3cmFwcyB0aGUgbmF0aXZlIFdlYiBBdWRpbydzIEF1ZGlvUGFyYW0gdG8gcHJvdmlkZVxuXHRcdCAqICAgICAgICAgYWRkaXRpb25hbCB1bml0IGNvbnZlcnNpb24gZnVuY3Rpb25hbGl0eS4gSXQgYWxzb1xuXHRcdCAqICAgICAgICAgc2VydmVzIGFzIGEgYmFzZS1jbGFzcyBmb3IgY2xhc3NlcyB3aGljaCBoYXZlIGEgc2luZ2xlLFxuXHRcdCAqICAgICAgICAgYXV0b21hdGFibGUgcGFyYW1ldGVyLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvUGFyYW19ICBwYXJhbSAgVGhlIHBhcmFtZXRlciB0byB3cmFwLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlR5cGV9IHVuaXRzIFRoZSB1bml0cyBvZiB0aGUgYXVkaW8gcGFyYW0uXG5cdFx0ICogIEBwYXJhbSAge0Jvb2xlYW59IGNvbnZlcnQgSWYgdGhlIHBhcmFtIHNob3VsZCBiZSBjb252ZXJ0ZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3BhcmFtJyxcblx0ICAgICAgICAgICAgJ3VuaXRzJyxcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnXG5cdCAgICAgICAgXSwgVG9uZS5QYXJhbSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbmF0aXZlIHBhcmFtZXRlciB0byBjb250cm9sXG5cdFx0XHQgKiAgQHR5cGUgIHtBdWRpb1BhcmFtfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXQgPSBvcHRpb25zLnBhcmFtO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB1bml0cyBvZiB0aGUgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVHlwZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudW5pdHMgPSBvcHRpb25zLnVuaXRzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIHRoZSB2YWx1ZSBzaG91bGQgYmUgY29udmVydGVkIG9yIG5vdFxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jb252ZXJ0ID0gb3B0aW9ucy5jb252ZXJ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRydWUgaWYgdGhlIHNpZ25hbCB2YWx1ZSBpcyBiZWluZyBvdmVycmlkZGVuIGJ5XG5cdFx0XHQgKiAgYSBjb25uZWN0ZWQgc2lnbmFsLlxuXHRcdFx0ICogIEByZWFkT25seVxuXHRcdFx0ICogIEB0eXBlICB7Ym9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdmVycmlkZGVuID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdGltZWxpbmUgd2hpY2ggdHJhY2tzIGFsbCBvZiB0aGUgYXV0b21hdGlvbnMuXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBuZXcgVG9uZS5UaW1lbGluZSgxMDAwKTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQob3B0aW9ucy52YWx1ZSkgJiYgdGhpcy5fcGFyYW0pIHtcblx0ICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFyYW0sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWZhdWx0LFxuXHQgICAgICAgICdjb252ZXJ0JzogdHJ1ZSxcblx0ICAgICAgICAncGFyYW0nOiB1bmRlZmluZWRcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhcmFtI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcmFtLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvVW5pdHModGhpcy5nZXRWYWx1ZUF0VGltZShub3cpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2luaXRpYWxWYWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgICAgIHRoaXMuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRoaXMuY29udGV4dC5jdXJyZW50VGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVBdFRpbWUodmFsdWUsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSBvdXRwdXQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhcmFtI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcmFtLnByb3RvdHlwZSwgJ21pblZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLlRpbWUgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkZyZXF1ZW5jeSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuTm9ybWFsUmFuZ2UgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLlBvc2l0aXZlIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5CUE0pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5BdWRpb1JhbmdlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkRlY2liZWxzKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLUluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmFtLm1pblZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhcmFtI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcmFtLnByb3RvdHlwZSwgJ21heFZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLk5vcm1hbFJhbmdlIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5BdWRpb1JhbmdlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJhbS5tYXhWYWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIHR5cGUgc3BlY2lmaWVkIGJ5IFRvbmUuUGFyYW0udW5pdHNcblx0XHQgKiAgaW50byB0aGUgZGVzdGluYXRpb24gdmFsdWUgKHN1Y2ggYXMgR2FpbiBvciBGcmVxdWVuY3kpLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHsqfSB2YWwgdGhlIHZhbHVlIHRvIGNvbnZlcnRcblx0XHQgKiAgQHJldHVybiB7bnVtYmVyfSAgICAgdGhlIG51bWJlciB3aGljaCB0aGUgdmFsdWUgc2hvdWxkIGJlIHNldCB0b1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2Zyb21Vbml0cyA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAoKHRoaXMuY29udmVydCB8fCBUb25lLmlzVW5kZWYodGhpcy5jb252ZXJ0KSkgJiYgIXRoaXMub3ZlcnJpZGRlbikge1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudW5pdHMpIHtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuVGltZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcyh2YWwpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5GcmVxdWVuY3k6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0ZyZXF1ZW5jeSh2YWwpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5EZWNpYmVsczpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmRiVG9HYWluKHZhbCk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLk5vcm1hbFJhbmdlOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbCwgMCksIDEpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5BdWRpb1JhbmdlOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbCwgLTEpLCAxKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuUG9zaXRpdmU6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodmFsLCAwKTtcblx0ICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDb252ZXJ0IHRoZSBwYXJhbWV0ZXJzIHZhbHVlIGludG8gdGhlIHVuaXRzIHNwZWNpZmllZCBieSBUb25lLlBhcmFtLnVuaXRzLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtICB7bnVtYmVyfSB2YWwgdGhlIHZhbHVlIHRvIGNvbnZlcnRcblx0XHQgKiBAcmV0dXJuIHtudW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fdG9Vbml0cyA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAodGhpcy5jb252ZXJ0IHx8IFRvbmUuaXNVbmRlZih0aGlzLmNvbnZlcnQpKSB7XG5cdCAgICAgICAgICAgIHN3aXRjaCAodGhpcy51bml0cykge1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5EZWNpYmVsczpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmdhaW5Ub0RiKHZhbCk7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZVxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX21pbk91dHB1dCA9IDAuMDAwMDE7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGV2ZW50IHR5cGVzXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlID0ge1xuXHQgICAgICAgIExpbmVhcjogJ2xpbmVhclJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICBFeHBvbmVudGlhbDogJ2V4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgIFRhcmdldDogJ3NldFRhcmdldEF0VGltZScsXG5cdCAgICAgICAgU2V0VmFsdWU6ICdzZXRWYWx1ZUF0VGltZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGEgcGFyYW1ldGVyIHZhbHVlIGNoYW5nZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtIHsqfVx0dmFsdWUgVGhlIHZhbHVlIHRvIHNldCB0aGUgc2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9ICB0aW1lIFRoZSB0aW1lIHdoZW4gdGhlIGNoYW5nZSBzaG91bGQgb2NjdXIuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdGhlIGZyZXF1ZW5jeSB0byBcIkc0XCIgaW4gZXhhY3RseSAxIHNlY29uZCBmcm9tIG5vdy5cblx0XHQgKiBmcmVxLnNldFZhbHVlQXRUaW1lKFwiRzRcIiwgXCIrMVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uc2V0VmFsdWVBdFRpbWUodmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNpZ25hbHMgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFN1YnNlcXVlbnQgc2NoZWR1bGluZ1xuXHRcdCAqICBtYXkgaW52YWxpZGF0ZSB0aGUgcmV0dXJuZWQgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBXaGVuIHRvIGdldCB0aGUgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge051bWJlcn0gVGhlIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBhZnRlciA9IHRoaXMuX2V2ZW50cy5nZXRBZnRlcih0aW1lKTtcblx0ICAgICAgICB2YXIgYmVmb3JlID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICB2YXIgaW5pdGlhbFZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKHRoaXMuX2luaXRpYWxWYWx1ZSwgdGhpcy5fcGFyYW0uZGVmYXVsdFZhbHVlKTtcblx0ICAgICAgICB2YXIgdmFsdWUgPSBpbml0aWFsVmFsdWU7XG5cdCAgICAgICAgLy9pZiBpdCB3YXMgc2V0IGJ5XG5cdCAgICAgICAgaWYgKGJlZm9yZSA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZS50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlRhcmdldCkge1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXMgPSB0aGlzLl9ldmVudHMuZ2V0QmVmb3JlKGJlZm9yZS50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzVmFsO1xuXHQgICAgICAgICAgICBpZiAocHJldmlvdXMgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsID0gaW5pdGlhbFZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcHJldmlvdXNWYWwgPSBwcmV2aW91cy52YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2V4cG9uZW50aWFsQXBwcm9hY2goYmVmb3JlLnRpbWUsIHByZXZpb3VzVmFsLCBiZWZvcmUudmFsdWUsIGJlZm9yZS5jb25zdGFudCwgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlciA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGJlZm9yZS52YWx1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fbGluZWFySW50ZXJwb2xhdGUoYmVmb3JlLnRpbWUsIGJlZm9yZS52YWx1ZSwgYWZ0ZXIudGltZSwgYWZ0ZXIudmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5FeHBvbmVudGlhbCkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUoYmVmb3JlLnRpbWUsIGJlZm9yZS52YWx1ZSwgYWZ0ZXIudGltZSwgYWZ0ZXIudmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gYmVmb3JlLnZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENyZWF0ZXMgYSBzY2hlZHVsZSBwb2ludCB3aXRoIHRoZSBjdXJyZW50IHZhbHVlIGF0IHRoZSBjdXJyZW50IHRpbWUuXG5cdFx0ICogIFRoaXMgaXMgdXNlZnVsIGZvciBjcmVhdGluZyBhbiBhdXRvbWF0aW9uIGFuY2hvciBwb2ludCBpbiBvcmRlciB0b1xuXHRcdCAqICBzY2hlZHVsZSBjaGFuZ2VzIGZyb20gdGhlIGN1cnJlbnQgdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSBub3cgKE9wdGlvbmFsbHkpIHBhc3MgdGhlIG5vdyB2YWx1ZSBpbi5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFJhbXBQb2ludCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKGN1cnJlbnRWYWwgPT09IDApIHtcblx0ICAgICAgICAgICAgY3VycmVudFZhbCA9IHRoaXMuX21pbk91dHB1dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5zZXRWYWx1ZUF0VGltZSh0aGlzLl90b1VuaXRzKGN1cnJlbnRWYWwpLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGEgbGluZWFyIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tIHRoZVxuXHRcdCAqICBwcmV2aW91cyBzY2hlZHVsZWQgcGFyYW1ldGVyIHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGVuZFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBlbmRUaW1lKSB7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIGVuZFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhlbmRUaW1lKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcixcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogZW5kVGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBlbmRUaW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGV4cG9uZW50aWFsIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcGFyYW1ldGVyIHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGVuZFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIGVuZFRpbWUpIHtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgdmFsdWUgPSBNYXRoLm1heCh0aGlzLl9taW5PdXRwdXQsIHZhbHVlKTtcblx0ICAgICAgICBlbmRUaW1lID0gdGhpcy50b1NlY29uZHMoZW5kVGltZSk7XG5cdCAgICAgICAgLy9zdG9yZSB0aGUgZXZlbnRcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsLFxuXHQgICAgICAgICAgICAndGltZSc6IGVuZFRpbWUsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgZW5kVGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhbiBleHBvbmVudGlhbCBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgY3VycmVudCB0aW1lIGFuZCBjdXJyZW50IHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZSBvdmVyIHRoZVxuXHRcdCAqICBkdXJhdGlvbiBvZiB0aGUgcmFtcFRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0W3N0YXJ0VGltZT1ub3ddIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9leHBvbmVudGlhbGx5IHJhbXAgdG8gdGhlIHZhbHVlIDIgb3ZlciA0IHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmV4cG9uZW50aWFsUmFtcFRvKDIsIDQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBzdGFydFRpbWUgKyB0aGlzLnRvU2Vjb25kcyhyYW1wVGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gbGluZWFyIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBjdXJyZW50IHRpbWUgYW5kIGN1cnJlbnQgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlIG92ZXIgdGhlXG5cdFx0ICogIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xpbmVhcmx5IHJhbXAgdG8gdGhlIHZhbHVlIDQgb3ZlciAzIHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmxpbmVhclJhbXBUbyg0LCAzKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmxpbmVhclJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBzdGFydFRpbWUgKyB0aGlzLnRvU2Vjb25kcyhyYW1wVGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFNpbmNlIGl0XG5cdFx0ICogIGlzIGFuIGV4cG9uZW50aWFsIGFwcHJvYWNoIGl0IHdpbGwgY29udGludWUgYXBwcm9hY2hpbmcgYWZ0ZXIgdGhlIHJhbXAgZHVyYXRpb24uIFRoZVxuXHRcdCAqICByYW1wVGltZSBpcyB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRvIHJlYWNoIG92ZXIgOTklIG9mIHRoZSB3YXkgdG93YXJkcyB0aGUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWUgICBUaGUgdmFsdWUgdG8gcmFtcCB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vZXhwb25lbnRpYWxseSByYW1wIHRvIHRoZSB2YWx1ZSAyIG92ZXIgNCBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5leHBvbmVudGlhbFJhbXBUbygyLCA0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnRhcmdldFJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lLCByYW1wVGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gU2luY2UgaXRcblx0XHQgKiAgaXMgYW4gZXhwb25lbnRpYWwgYXBwcm9hY2ggaXQgd2lsbCBjb250aW51ZSBhcHByb2FjaGluZyBhZnRlciB0aGUgcmFtcCBkdXJhdGlvbi4gVGhlXG5cdFx0ICogIHJhbXBUaW1lIGlzIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdG8gcmVhY2ggb3ZlciA5OSUgb2YgdGhlIHdheSB0b3dhcmRzIHRoZSB2YWx1ZS4gVGhpcyBtZXRob2RzXG5cdFx0ICogIGlzIHNpbWlsYXIgdG8gc2V0VGFyZ2V0QXRUaW1lIGV4Y2VwdCB0aGUgdGhpcmQgYXJndW1lbnQgaXMgYSB0aW1lIGluc3RlYWQgb2YgYSAndGltZUNvbnN0YW50J1xuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdHRpbWUgXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9leHBvbmVudGlhbGx5IHJhbXAgdG8gdGhlIHZhbHVlIDIgb3ZlciA0IHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmV4cG9uZW50aWFsUmFtcFRvKDIsIDQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lLCByYW1wVGltZSkge1xuXHQgICAgICAgIHZhciB0aW1lQ29uc3RhbnQgPSBNYXRoLmxvZyh0aGlzLnRvU2Vjb25kcyhyYW1wVGltZSkgKyAxKSAvIE1hdGgubG9nKDIwMCk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLnNldFRhcmdldEF0VGltZSh2YWx1ZSwgdGltZSwgdGltZUNvbnN0YW50KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lIHdpdGhcblx0XHQgKiAgYSByYXRlIGhhdmluZyB0aGUgZ2l2ZW4gdGltZSBjb25zdGFudC5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB0aW1lQ29uc3RhbnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFRhcmdldEF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpIHtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgLy8gVGhlIHZhbHVlIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBhcHByb2FjaCB3aXRob3V0IHRpbWVDb25zdGFudCA+IDAuXG5cdCAgICAgICAgaWYgKHRpbWVDb25zdGFudCA8PSAwKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGltZUNvbnN0YW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlRhcmdldCxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogc3RhcnRUaW1lLFxuXHQgICAgICAgICAgICAnY29uc3RhbnQnOiB0aW1lQ29uc3RhbnRcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5zZXRUYXJnZXRBdFRpbWUodmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyBhbiBhcnJheSBvZiBhcmJpdHJhcnkgcGFyYW1ldGVyIHZhbHVlcyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7QXJyYXl9IHZhbHVlc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGR1cmF0aW9uXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzY2FsaW5nPTFdIElmIHRoZSB2YWx1ZXMgaW4gdGhlIGN1cnZlIHNob3VsZCBiZSBzY2FsZWQgYnkgc29tZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuc2V0VmFsdWVDdXJ2ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZXMsIHN0YXJ0VGltZSwgZHVyYXRpb24sIHNjYWxpbmcpIHtcblx0ICAgICAgICBzY2FsaW5nID0gVG9uZS5kZWZhdWx0QXJnKHNjYWxpbmcsIDEpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRWYWx1ZUF0VGltZSh2YWx1ZXNbMF0gKiBzY2FsaW5nLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIHZhciBzZWdUaW1lID0gZHVyYXRpb24gLyAodmFsdWVzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWVzW2ldICogc2NhbGluZywgc3RhcnRUaW1lICsgaSAqIHNlZ1RpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VscyBhbGwgc2NoZWR1bGVkIHBhcmFtZXRlciBjaGFuZ2VzIHdpdGggdGltZXMgZ3JlYXRlciB0aGFuIG9yXG5cdFx0ICogIGVxdWFsIHRvIHN0YXJ0VGltZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhpcyBpcyBzaW1pbGFyIHRvIFtjYW5jZWxTY2hlZHVsZWRWYWx1ZXNdKCNjYW5jZWxTY2hlZHVsZWRWYWx1ZXMpIGV4Y2VwdFxuXHRcdCAqICBpdCBob2xkcyB0aGUgYXV0b21hdGVkIHZhbHVlIGF0IHRpbWUgdW50aWwgdGhlIG5leHQgYXV0b21hdGVkIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5jYW5jZWxBbmRIb2xkQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdmFsdWVBdFRpbWUgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIC8vaWYgdGhlcmUgaXMgYW4gZXZlbnQgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAgICAvL2FuZCB0aGF0IGV2ZW4gaXMgbm90IGEgXCJzZXRcIlxuXHQgICAgICAgIHZhciBiZWZvcmUgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHZhciBhZnRlciA9IHRoaXMuX2V2ZW50cy5nZXRBZnRlcih0aW1lKTtcblx0ICAgICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aW1lID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIGV2ZXJ5dGhpbmcgYWZ0ZXJcblx0ICAgICAgICAgICAgaWYgKGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKGFmdGVyLnRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCh0aW1lICsgMC4wMDAwMDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlcikge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCB0aGUgbmV4dCBldmVudChzKVxuXHQgICAgICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKGFmdGVyLnRpbWUpO1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3BhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAoYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIpIHtcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWVBdFRpbWUsIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcixcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVBdFRpbWUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwpIHtcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZUF0VGltZSwgdGltZSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlQXRUaW1lLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3NldCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZUF0VGltZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSh0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJhbS5zZXRWYWx1ZUF0VGltZSh2YWx1ZUF0VGltZSwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSYW1wcyB0byB0aGUgZ2l2ZW4gdmFsdWUgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqICBBdXRvbWF0aWNhbGx5IHNlbGVjdHMgdGhlIGJlc3QgcmFtcCB0eXBlIChleHBvbmVudGlhbCBvciBsaW5lYXIpXG5cdFx0ICogIGRlcGVuZGluZyBvbiB0aGUgYHVuaXRzYCBvZiB0aGUgc2lnbmFsXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSBcdFRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcmFtcCB0byB0aGUgdmFsdWUgZWl0aGVyIGxpbmVhcmx5IG9yIGV4cG9uZW50aWFsbHlcblx0XHQgKiAvL2RlcGVuZGluZyBvbiB0aGUgXCJ1bml0c1wiIHZhbHVlIG9mIHRoZSBzaWduYWxcblx0XHQgKiBzaWduYWwucmFtcFRvKDAsIDEwKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NjaGVkdWxlIGl0IHRvIHJhbXAgc3RhcnRpbmcgYXQgYSBzcGVjaWZpYyB0aW1lXG5cdFx0ICogc2lnbmFsLnJhbXBUbygwLCAxMCwgNSlcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHJhbXBUaW1lID0gVG9uZS5kZWZhdWx0QXJnKHJhbXBUaW1lLCAwLjEpO1xuXHQgICAgICAgIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuRnJlcXVlbmN5IHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5CUE0gfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkRlY2liZWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZXhwb25lbnRpYWxSYW1wVG8odmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVVUT01BVElPTiBDVVJWRSBDQUxDVUxBVElPTlNcblx0ICAgIC8vXHRNSVQgTGljZW5zZSwgY29weXJpZ2h0IChjKSAyMDE0IEpvcmRhbiBTYW50ZWxsXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHRoZSB2YWx1ZSBhbG9uZyB0aGUgY3VydmUgcHJvZHVjZWQgYnkgc2V0VGFyZ2V0QXRUaW1lXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fZXhwb25lbnRpYWxBcHByb2FjaCA9IGZ1bmN0aW9uICh0MCwgdjAsIHYxLCB0aW1lQ29uc3RhbnQsIHQpIHtcblx0ICAgICAgICByZXR1cm4gdjEgKyAodjAgLSB2MSkgKiBNYXRoLmV4cCgtKHQgLSB0MCkgLyB0aW1lQ29uc3RhbnQpO1xuXHQgICAgfTtcblx0ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHRoZSB2YWx1ZSBhbG9uZyB0aGUgY3VydmUgcHJvZHVjZWQgYnkgbGluZWFyUmFtcFRvVmFsdWVBdFRpbWVcblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9saW5lYXJJbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uICh0MCwgdjAsIHQxLCB2MSwgdCkge1xuXHQgICAgICAgIHJldHVybiB2MCArICh2MSAtIHYwKSAqICgodCAtIHQwKSAvICh0MSAtIHQwKSk7XG5cdCAgICB9O1xuXHQgICAgLy8gQ2FsY3VsYXRlcyB0aGUgdGhlIHZhbHVlIGFsb25nIHRoZSBjdXJ2ZSBwcm9kdWNlZCBieSBleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fZXhwb25lbnRpYWxJbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uICh0MCwgdjAsIHQxLCB2MSwgdCkge1xuXHQgICAgICAgIHJldHVybiB2MCAqIE1hdGgucG93KHYxIC8gdjAsICh0IC0gdDApIC8gKHQxIC0gdDApKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYXJhbTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgT2ZmbGluZUF1ZGlvQ29udGV4dFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Db250ZXh0fVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBjaGFubmVscyAgVGhlIG51bWJlciBvZiBjaGFubmVscyB0byByZW5kZXJcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgZHVyYXRpb24gIFRoZSBkdXJhdGlvbiB0byByZW5kZXIgaW4gc2FtcGxlc1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gc2FtcGxlUmF0ZSB0aGUgc2FtcGxlIHJhdGUgdG8gcmVuZGVyIGF0XG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmVDb250ZXh0ID0gZnVuY3Rpb24gKGNoYW5uZWxzLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSkge1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvZmZsaW5lIGNvbnRleHRcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7T2ZmbGluZUF1ZGlvQ29udGV4dH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHZhciBvZmZsaW5lQ29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KGNoYW5uZWxzLCBkdXJhdGlvbiAqIHNhbXBsZVJhdGUsIHNhbXBsZVJhdGUpO1xuXHQgICAgICAgIC8vd3JhcCB0aGUgbWV0aG9kcy9tZW1iZXJzXG5cdCAgICAgICAgVG9uZS5Db250ZXh0LmNhbGwodGhpcywge1xuXHQgICAgICAgICAgICAnY29udGV4dCc6IG9mZmxpbmVDb250ZXh0LFxuXHQgICAgICAgICAgICAnY2xvY2tTb3VyY2UnOiAnb2ZmbGluZScsXG5cdCAgICAgICAgICAgICdsb29rQWhlYWQnOiAwLFxuXHQgICAgICAgICAgICAndXBkYXRlSW50ZXJ2YWwnOiAxMjggLyBzYW1wbGVSYXRlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBwcml2YXRlIHJlZmVyZW5jZSB0byB0aGUgZHVyYXRpb25cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBhcnRpZmljaWFsIGNsb2NrIHNvdXJjZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5PZmZsaW5lQ29udGV4dCwgVG9uZS5Db250ZXh0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBPdmVycmlkZSB0aGUgbm93IG1ldGhvZCB0byBwb2ludCB0byB0aGUgaW50ZXJuYWwgY2xvY2sgdGltZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUubm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VGltZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVuZGVyIHRoZSBvdXRwdXQgb2YgdGhlIE9mZmxpbmVDb250ZXh0XG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHdoaWxlICh0aGlzLl9kdXJhdGlvbiAtIHRoaXMuX2N1cnJlbnRUaW1lID49IDApIHtcblx0ICAgICAgICAgICAgLy9pbnZva2UgYWxsIHRoZSBjYWxsYmFja3Mgb24gdGhhdCB0aW1lXG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgndGljaycpO1xuXHQgICAgICAgICAgICAvL2luY3JlbWVudCB0aGUgY2xvY2tcblx0ICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gdGhpcy5ibG9ja1RpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsb3NlIHRoZSBjb250ZXh0XG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9mZmxpbmVDb250ZXh0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG5cdCAgICAgICAgdmFyIGlzTW9iaWxlU2FmYXJpID0gdWEuaW5jbHVkZXMoJ3NhZmFyaScpICYmICF1YS5pbmNsdWRlcygnY2hyb21lJykgJiYgdWEuaW5jbHVkZXMoJ21vYmlsZScpO1xuXHQgICAgICAgIGlmIChpc01vYmlsZVNhZmFyaSkge1xuXHQgICAgICAgICAgICAvL21vYmlsZSBzYWZhcmkgaGFzIGEgYml6YXJyZSBidWcgd2l0aCB0aGUgb2ZmbGluZSBjb250ZXh0XG5cdCAgICAgICAgICAgIC8vd2hlbiBhIEJ1ZmZlclNvdXJjZU5vZGUgaXMgc3RhcnRlZCwgaXQgc3RhcnRzIHRoZSBvZmZsaW5lIGNvbnRleHRcblx0ICAgICAgICAgICAgLy9cblx0ICAgICAgICAgICAgLy9kZWZlcnJpbmcgYWxsIEJ1ZmZlclNvdXJjZSBzdGFydHMgdGlsbCB0aGUgbGFzdCBwb3NzaWJsZSBtb21lbnRcblx0ICAgICAgICAgICAgLy9yZWR1Y2VzIHRoZSBsaWtlbGlob29kIG9mIHRoaXMgaGFwcGVuaW5nXG5cdCAgICAgICAgICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLmNyZWF0ZUJ1ZmZlclNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBidWZmZXJTb3VyY2UgPSB0aGlzLl9jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgICAgICAgICAgdmFyIF9uYXRpdmVfc3RhcnQgPSBidWZmZXJTb3VyY2Uuc3RhcnQ7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJTb3VyY2Uuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIF9uYXRpdmVfc3RhcnQuY2FsbChidWZmZXJTb3VyY2UsIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMCk7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyU291cmNlO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgdGhpbiB3cmFwcGVyIGFyb3VuZCB0aGUgTmF0aXZlIFdlYiBBdWRpbyBHYWluTm9kZS5cblx0XHQgKiAgICAgICAgIFRoZSBHYWluTm9kZSBpcyBhIGJhc2ljIGJ1aWxkaW5nIGJsb2NrIG9mIHRoZSBXZWIgQXVkaW9cblx0XHQgKiAgICAgICAgIEFQSSBhbmQgaXMgdXNlZnVsIGZvciByb3V0aW5nIGF1ZGlvIGFuZCBhZGp1c3RpbmcgZ2FpbnMuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSAgZ2FpbiAgVGhlIGluaXRpYWwgZ2FpbiBvZiB0aGUgR2Fpbk5vZGVcblx0XHQgKiAgQHBhcmFtIHtUb25lLlR5cGU9fSB1bml0cyBUaGUgdW5pdHMgb2YgdGhlIGdhaW4gcGFyYW1ldGVyLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAndW5pdHMnXG5cdCAgICAgICAgXSwgVG9uZS5HYWluKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBHYWluTm9kZVxuXHRcdFx0ICogIEB0eXBlICB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuX2dhaW5Ob2RlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBwYXJhbWV0ZXIgb2YgdGhlIGdhaW4gbm9kZS5cblx0XHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmdhaW4gPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2dhaW5Ob2RlLmdhaW4sXG5cdCAgICAgICAgICAgICd1bml0cyc6IG9wdGlvbnMudW5pdHMsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZ2Fpbixcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBvcHRpb25zLmNvbnZlcnRcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZ2FpbicpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR2FpbiwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW4uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2dhaW4nOiAxLFxuXHQgICAgICAgICdjb252ZXJ0JzogdHJ1ZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuR2Fpbn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR2Fpbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2dhaW4nKTtcblx0ICAgICAgICB0aGlzLmdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR2Fpbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkICYmICFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnN0YW50U291cmNlKSB7XG5cdCAgICAgICAgdmFyIENvbnN0YW50U291cmNlTm9kZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCAxMjgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgICAgIHZhciBhcnIgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBhcnJbaV0gPSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5sb29wID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdmFyIGdhaW5Ob2RlID0gdGhpcy5fb3V0cHV0ID0gY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgICAgIHRoaXMub2Zmc2V0ID0gZ2Fpbk5vZGUuZ2Fpbjtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmNvbm5lY3QoZ2Fpbk5vZGUpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5zdGFydCh0aW1lKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2Uuc3RvcCh0aW1lKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dC5jb25uZWN0LmFwcGx5KHRoaXMuX291dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dC5kaXNjb25uZWN0LmFwcGx5KHRoaXMuX291dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnN0YW50U291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50U291cmNlTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlQ29uc3RhbnRTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnRTb3VyY2VOb2RlKHRoaXMpO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBzaWduYWwgaXMgYW4gYXVkaW8tcmF0ZSB2YWx1ZS4gVG9uZS5TaWduYWwgaXMgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGUgbGlicmFyeS5cblx0XHQgKiAgICAgICAgICBVbmxpa2UgYSBudW1iZXIsIFNpZ25hbHMgY2FuIGJlIHNjaGVkdWxlZCB3aXRoIHNhbXBsZS1sZXZlbCBhY2N1cmFjeS4gVG9uZS5TaWduYWxcblx0XHQgKiAgICAgICAgICBoYXMgYWxsIG9mIHRoZSBtZXRob2RzIGF2YWlsYWJsZSB0byBuYXRpdmUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICAgW0F1ZGlvUGFyYW1dKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWF1ZGlvcGFyYW0taW50ZXJmYWNlKVxuXHRcdCAqICAgICAgICAgIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBjb252ZW5pZW5jZXMuIFJlYWQgbW9yZSBhYm91dCB3b3JraW5nIHdpdGggc2lnbmFsc1xuXHRcdCAqICAgICAgICAgIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9TaWduYWxzKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuUGFyYW19XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfEF1ZGlvUGFyYW19IFt2YWx1ZV0gSW5pdGlhbCB2YWx1ZSBvZiB0aGUgc2lnbmFsLiBJZiBhbiBBdWRpb1BhcmFtXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcGFzc2VkIGluLCB0aGF0IHBhcmFtZXRlciB3aWxsIGJlIHdyYXBwZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgY29udHJvbGxlZCBieSB0aGUgU2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPU51bWJlcl0gdW5pdCBUaGUgdW5pdHMgdGhlIHNpZ25hbCBpcyBpbi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDEwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3ZhbHVlJyxcblx0ICAgICAgICAgICAgJ3VuaXRzJ1xuXHQgICAgICAgIF0sIFRvbmUuU2lnbmFsKTtcblx0ICAgICAgICBUb25lLlBhcmFtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQqIFdoZW4gYSBzaWduYWwgaXMgY29ubmVjdGVkIHRvIGFub3RoZXIgc2lnbmFsIG9yIGF1ZGlvIHBhcmFtLFxuXHRcdFx0KiB0aGlzIHNpZ25hbCBiZWNvbWVzIGEgcHJveHkgZm9yIGl0XG5cdFx0XHQqIEB0eXBlIHtBcnJheX1cblx0XHRcdCogQHByaXZhdGVcblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5fcHJveGllcyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiBJbmRpY2F0ZXMgaWYgdGhlIGNvbnN0YW50IHNvdXJjZSB3YXMgc3RhcnRlZCBvciBub3Rcblx0XHRcdCogQHByaXZhdGVcblx0XHRcdCogQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjb25zdGFudCBzb3VyY2Ugbm9kZSB3aGljaCBnZW5lcmF0ZXMgdGhlIHNpZ25hbFxuXHRcdFx0ICogQHR5cGUge0NvbnN0YW50U291cmNlTm9kZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZSA9IHRoaXMuY29udGV4dC5jcmVhdGVDb25zdGFudFNvdXJjZSgpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5fY29uc3RhbnRTb3VyY2Uub2Zmc2V0O1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG5vZGUgd2hlcmUgdGhlIGNvbnN0YW50IHNpZ25hbCB2YWx1ZSBpcyBzY2FsZWQuXG5cdFx0XHQgKiBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLl9jb25zdGFudFNvdXJjZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBub2RlIHdoZXJlIHRoZSB2YWx1ZSBpcyBzZXQuXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5QYXJhbX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5fcGFyYW0gPSB0aGlzLm91dHB1dC5vZmZzZXQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TaWduYWwsIFRvbmUuUGFyYW0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2YWx1ZSc6IDAsXG5cdCAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlZmF1bHQsXG5cdCAgICAgICAgJ2NvbnZlcnQnOiB0cnVlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFdoZW4gc2lnbmFscyBjb25uZWN0IHRvIG90aGVyIHNpZ25hbHMgb3IgQXVkaW9QYXJhbXMsXG5cdFx0ICogIHRoZXkgdGFrZSBvdmVyIHRoZSBvdXRwdXQgdmFsdWUgb2YgdGhhdCBzaWduYWwgb3IgQXVkaW9QYXJhbS5cblx0XHQgKiAgRm9yIGFsbCBvdGhlciBub2RlcywgdGhlIGJlaGF2aW9yIGlzIHRoZSBzYW1lIGFzIGEgZGVmYXVsdCA8Y29kZT5jb25uZWN0PC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAb3ZlcnJpZGVcblx0XHQgKiAgQHBhcmFtIHtBdWRpb1BhcmFtfEF1ZGlvTm9kZXxUb25lLlNpZ25hbHxUb25lfSBub2RlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TnVtYmVyPTBdIFRoZSBvdXRwdXQgbnVtYmVyIHRvIGNvbm5lY3QgZnJvbS5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtpbnB1dE51bWJlcj0wXSBUaGUgaW5wdXQgbnVtYmVyIHRvIGNvbm5lY3QgdG8uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNpZ25hbH0gdGhpc1xuXHRcdCAqICBAbWV0aG9kXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgLy90aGlzIGlzIGFuIG9wdGltaXphdGlvbiB3aGVyZSB0aGlzIG5vZGUgd2lsbCBmb3J3YXJkIGF1dG9tYXRpb25zXG5cdCAgICAgICAgLy90byBjb25uZWN0ZWQgbm9kZXMgd2l0aG91dCBhbnkgc2lnbmFsIGlmIHBvc3NpYmxlLlxuXHQgICAgICAgIGlmICh0aGlzLl9pc1BhcmFtKG5vZGUpICYmICF0aGlzLl9zb3VyY2VTdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMucHVzaChub2RlKTtcblx0ICAgICAgICAgICAgbm9kZS5vdmVycmlkZGVuID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fYXBwbHlBdXRvbWF0aW9ucyhub2RlKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VTdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlLnN0YXJ0KDApO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRha2VzIGEgbm9kZSBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBpZiBpdCBpcyBhIFBhcmFtIG9yIEF1ZGlvUGFyYW1cblx0XHQgKiBAcGFyYW0gIHsqfSBub2RlIFRoZSBub2RlIHRvIHRlc3Rcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX2lzUGFyYW0gPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlBhcmFtICYmIFRvbmUuUGFyYW0gPT09IG5vZGUuY29uc3RydWN0b3IgfHwgbm9kZSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRGlzY2FyZCB0aGUgb3B0aW1pemF0aW9uIGFuZCBjb25uZWN0IGFsbCBvZiB0aGUgcHJveGllc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX2Nvbm5lY3RQcm94aWVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5fc291cmNlU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2Uuc3RhcnQoMCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3Byb3hpZXMuZm9yRWFjaChmdW5jdGlvbiAocHJveHkpIHtcblx0ICAgICAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0LmNhbGwodGhpcywgcHJveHkpO1xuXHQgICAgICAgICAgICBpZiAocHJveHkuX3Byb3hpZXMpIHtcblx0ICAgICAgICAgICAgICAgIHByb3h5Ll9jb25uZWN0UHJveGllcygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2VkIHdoZW4gYSBub2RlIGlzIGNvbm5lY3RlZCB0byB0aGlzXG5cdFx0ICogQHBhcmFtICB7QXVkaW9Ob2RlfSBmcm9tXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5fb25Db25uZWN0ID0gZnVuY3Rpb24gKGZyb20pIHtcblx0ICAgICAgICBpZiAoIXRoaXMuX2lzUGFyYW0oZnJvbSkpIHtcblx0ICAgICAgICAgICAgLy9jb25uZWN0IGFsbCB0aGUgcHJveGllc1xuXHQgICAgICAgICAgICB0aGlzLl9jb25uZWN0UHJveGllcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBBcHBseSBhbGwgdGhlIGN1cnJlbnQgYXV0b21hdGlvbnMgdG8gdGhlIGdpdmVuIHBhcmFtZXRlclxuXHRcdCAqIEBwYXJhbSAge0F1ZGlvUGFyYW19IHBhcmFtXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5fYXBwbHlBdXRvbWF0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbSkge1xuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XG5cdCAgICAgICAgcGFyYW0uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKG5vdyk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWwgPSB0aGlzLmdldFZhbHVlQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgcGFyYW0uc2V0VmFsdWVBdFRpbWUoY3VycmVudFZhbCwgbm93KTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuZm9yRWFjaEZyb20obm93LCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgcGFyYW1bZXZlbnQudHlwZV0oZXZlbnQudmFsdWUsIGV2ZW50LnRpbWUsIGV2ZW50LmNvbnN0YW50KTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBEaXNjb25uZWN0IGZyb20gdGhlIGdpdmVuIG5vZGUgb3IgYWxsIG5vZGVzIGlmIG5vIHBhcmFtIGlzIGdpdmVuLlxuXHRcdCAqIEBwYXJhbSAge0F1ZGlvTm9kZXxBdWRpb1BhcmFtfSBub2RlXG5cdFx0ICogQHJldHVybiB7VG9uZS5TaWduYWx9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9wcm94aWVzLmluY2x1ZGVzKG5vZGUpKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3Byb3hpZXMuaW5kZXhPZihub2RlKTtcblx0ICAgICAgICAgICAgdGhpcy5fcHJveGllcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoIW5vZGUpIHtcblx0ICAgICAgICAgICAgLy9ubyBhcmd1bWVudCwgZGlzY29ubmVjdCBldmVyeXRoaW5nXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBbXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgY3VycmVudCBzaWduYWwgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBXaGVuIHRvIGdldCB0aGUgc2lnbmFsIHZhbHVlXG5cdFx0ICogQHJldHVybiB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fcGFyYW0uZ2V0VmFsdWVBdFRpbWUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmFtLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlBhcmFtLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvL3dyYXAgYWxsIG9mIHRoZSBhdXRvbWF0aW9uIG1ldGhvZHNcblx0ICAgIFtcblx0ICAgICAgICAnc2V0VmFsdWVBdFRpbWUnLFxuXHQgICAgICAgICdsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZScsXG5cdCAgICAgICAgJ2V4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgICdzZXRUYXJnZXRBdFRpbWUnXG5cdCAgICBdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuXHQgICAgICAgIHZhciBwcmV2aW91c01ldGhvZCA9IFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0ICAgICAgICAgICAgcHJldmlvdXNNZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgYXJnc1swXSA9IHRoaXMuX2Zyb21Vbml0cyhhcmdzWzBdKTtcblx0ICAgICAgICAgICAgYXJnc1sxXSA9IHRoaXMudG9TZWNvbmRzKGFyZ3NbMV0pO1xuXHQgICAgICAgICAgICAvL2FwcGx5IGl0IHRvIHRoZSBwcm94aWVzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMuZm9yRWFjaChmdW5jdGlvbiAoc2lnbmFsKSB7XG5cdCAgICAgICAgICAgICAgICBzaWduYWxbbWV0aG9kXS5hcHBseShzaWduYWwsIGFyZ3MpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9O1xuXHQgICAgfSk7XG5cdCAgICBbXG5cdCAgICAgICAgJ2NhbmNlbFNjaGVkdWxlZFZhbHVlcycsXG5cdCAgICAgICAgJ2NhbmNlbEFuZEhvbGRBdFRpbWUnXG5cdCAgICBdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuXHQgICAgICAgIHZhciBwcmV2aW91c01ldGhvZCA9IFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0ICAgICAgICAgICAgcHJldmlvdXNNZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgYXJnc1swXSA9IHRoaXMudG9TZWNvbmRzKGFyZ3NbMF0pO1xuXHQgICAgICAgICAgICAvL2FwcGx5IGl0IHRvIHRoZSBwcm94aWVzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMuZm9yRWFjaChmdW5jdGlvbiAoc2lnbmFsKSB7XG5cdCAgICAgICAgICAgICAgICBzaWduYWxbbWV0aG9kXS5hcHBseShzaWduYWwsIGFyZ3MpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9O1xuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNpZ25hbDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFBvdyBhcHBsaWVzIGFuIGV4cG9uZW50IHRvIHRoZSBpbmNvbWluZyBzaWduYWwuIFRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgICAgICAgIG11c3QgYmUgQXVkaW9SYW5nZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gZXhwIFRoZSBleHBvbmVudCB0byBhcHBseSB0byB0aGUgaW5jb21pbmcgc2lnbmFsLCBtdXN0IGJlIGF0IGxlYXN0IDIuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwb3cgPSBuZXcgVG9uZS5Qb3coMik7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgwLjUpLmNvbm5lY3QocG93KTtcblx0XHQgKiAvL291dHB1dCBvZiBwb3cgaXMgMC4yNS4gXG5cdFx0ICovXG5cdCAgICBUb25lLlBvdyA9IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSBleHBvbmVudFxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHAgPSBUb25lLmRlZmF1bHRBcmcoZXhwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V4cFNjYWxlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIodGhpcy5fZXhwRnVuYyh0aGlzLl9leHApLCA4MTkyKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBvdywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB2YWx1ZSBvZiB0aGUgZXhwb25lbnQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUG93I1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBvdy5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAgPSBleHA7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cFNjYWxlci5zZXRNYXAodGhpcy5fZXhwRnVuYyh0aGlzLl9leHApKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZnVuY3Rpb24gd2hpY2ggbWFwcyB0aGUgd2F2ZXNoYXBlclxuXHRcdCAqICBAcGFyYW0gICB7bnVtYmVyfSBleHBcblx0XHQgKiAgQHJldHVybiB7ZnVuY3Rpb259XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBvdy5wcm90b3R5cGUuX2V4cEZ1bmMgPSBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIE1hdGgucG93KE1hdGguYWJzKHZhbCksIGV4cCk7XG5cdCAgICAgICAgfTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvd30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb3cucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZXhwU2NhbGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9leHBTY2FsZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBvdztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkVudmVsb3BlIGlzIGFuIFtBRFNSXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW50aGVzaXplciNBRFNSX2VudmVsb3BlKVxuXHRcdCAqICAgICAgICAgIGVudmVsb3BlIGdlbmVyYXRvci4gVG9uZS5FbnZlbG9wZSBvdXRwdXRzIGEgc2lnbmFsIHdoaWNoXG5cdFx0ICogICAgICAgICAgY2FuIGJlIGNvbm5lY3RlZCB0byBhbiBBdWRpb1BhcmFtIG9yIFRvbmUuU2lnbmFsLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy9lL2VhL0FEU1JfcGFyYW1ldGVyLnN2Z1wiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2F0dGFja10gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGUgdG8gZ28gZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIDAgdG8gaXQncyBtYXhpbXVtIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdFRoZSBwZXJpb2Qgb2YgdGltZSBhZnRlciB0aGUgYXR0YWNrIHRoYXQgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICBcdHRvIGZhbGwgdG8gdGhlIHN1c3RhaW4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzdXN0YWluXVx0VGhlIHBlcmNlbnQgb2YgdGhlIG1heGltdW0gdmFsdWUgdGhhdCB0aGUgZW52ZWxvcGUgcmVzdHMgYXQgdW50aWxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR0aGUgcmVsZWFzZSBpcyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHRUaGUgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkIGl0IHRha2VzIHRvIHJlYWNoIDAuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hbiBhbXBsaXR1ZGUgZW52ZWxvcGVcblx0XHQgKiB2YXIgZ2Fpbk5vZGUgPSBUb25lLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHRcdCAqIHZhciBlbnYgPSBuZXcgVG9uZS5FbnZlbG9wZSh7XG5cdFx0ICogXHRcImF0dGFja1wiIDogMC4xLFxuXHRcdCAqIFx0XCJkZWNheVwiIDogMC4yLFxuXHRcdCAqIFx0XCJzdXN0YWluXCIgOiAxLFxuXHRcdCAqIFx0XCJyZWxlYXNlXCIgOiAwLjgsXG5cdFx0ICogfSk7XG5cdFx0ICogZW52LmNvbm5lY3QoZ2Fpbk5vZGUuZ2Fpbik7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vZ2V0IGFsbCBvZiB0aGUgZGVmYXVsdHNcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAnZGVjYXknLFxuXHQgICAgICAgICAgICAnc3VzdGFpbicsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlbiB0cmlnZ2VyQXR0YWNrIGlzIGNhbGxlZCwgdGhlIGF0dGFjayB0aW1lIGlzIHRoZSBhbW91bnQgb2Zcblx0XHRcdCAqICB0aW1lIGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGUgdG8gcmVhY2ggaXQncyBtYXhpbXVtIHZhbHVlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBvcHRpb25zLmF0dGFjaztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBZnRlciB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlLCB0aGUgdmFsdWUgd2lsbCBmYWxsXG5cdFx0XHQgKiAgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIGRlY2F5IHRpbWUgdG8gaXQncyBzdXN0YWluIHZhbHVlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWNheSA9IG9wdGlvbnMuZGVjYXk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBcdFRoZSBzdXN0YWluIHZhbHVlIGlzIHRoZSB2YWx1ZVxuXHRcdFx0ICogXHR3aGljaCB0aGUgZW52ZWxvcGUgcmVzdHMgYXQgYWZ0ZXIgdHJpZ2dlckF0dGFjayBpc1xuXHRcdFx0ICogXHRjYWxsZWQsIGJ1dCBiZWZvcmUgdHJpZ2dlclJlbGVhc2UgaXMgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnN1c3RhaW4gPSBvcHRpb25zLnN1c3RhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWZ0ZXIgdHJpZ2dlclJlbGVhc2UgaXMgY2FsbGVkLCB0aGUgZW52ZWxvcGUnc1xuXHRcdFx0ICogIHZhbHVlIHdpbGwgZmFsbCB0byBpdCdzIG1pbWludW0gdmFsdWUgb3ZlciB0aGVcblx0XHRcdCAqICBkdXJhdGlvbiBvZiB0aGUgcmVsZWFzZSB0aW1lLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gb3B0aW9ucy5yZWxlYXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBuZXh0IHRpbWUgdGhlIGVudmVsb3BlIGlzIGF0IHN0YW5kYnlcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9ICdsaW5lYXInO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBuZXh0IHRpbWUgdGhlIGVudmVsb3BlIGlzIGF0IHN0YW5kYnlcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSAnZXhwb25lbnRpYWwnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NpZyA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2lnbmFsKDApO1xuXHQgICAgICAgIC8vc2V0IHRoZSBhdHRhY2tDdXJ2ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLmF0dGFja0N1cnZlID0gb3B0aW9ucy5hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICB0aGlzLnJlbGVhc2VDdXJ2ZSA9IG9wdGlvbnMucmVsZWFzZUN1cnZlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRW52ZWxvcGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAnc3VzdGFpbic6IDAuNSxcblx0ICAgICAgICAncmVsZWFzZSc6IDEsXG5cdCAgICAgICAgJ2F0dGFja0N1cnZlJzogJ2xpbmVhcicsXG5cdCAgICAgICAgJ3JlbGVhc2VDdXJ2ZSc6ICdleHBvbmVudGlhbCdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBlbnZlbG9wZS4gVXNlZnVsIGZvclxuXHRcdCAqIHN5bmNyb25pemluZyB2aXN1YWwgb3V0cHV0IHRvIHRoZSBlbnZlbG9wZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5FbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2hhcGUgb2YgdGhlIGF0dGFjay5cblx0XHQgKiBDYW4gYmUgYW55IG9mIHRoZXNlIHN0cmluZ3M6XG5cdFx0ICogPHVsPlxuXHRcdCAqICAgPGxpPmxpbmVhcjwvbGk+XG5cdFx0ICogICA8bGk+ZXhwb25lbnRpYWw8L2xpPlxuXHRcdCAqICAgPGxpPnNpbmU8L2xpPlxuXHRcdCAqICAgPGxpPmNvc2luZTwvbGk+XG5cdFx0ICogICA8bGk+Ym91bmNlPC9saT5cblx0XHQgKiAgIDxsaT5yaXBwbGU8L2xpPlxuXHRcdCAqICAgPGxpPnN0ZXA8L2xpPlxuXHRcdCAqIDwvdWw+XG5cdFx0ICogQ2FuIGFsc28gYmUgYW4gYXJyYXkgd2hpY2ggZGVzY3JpYmVzIHRoZSBjdXJ2ZS4gVmFsdWVzXG5cdFx0ICogaW4gdGhlIGFycmF5IGFyZSBldmVubHkgc3ViZGl2aWRlZCBhbmQgbGluZWFybHlcblx0XHQgKiBpbnRlcnBvbGF0ZWQgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIGF0dGFjay5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5FbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfEFycmF5fVxuXHRcdCAqIEBuYW1lIGF0dGFja0N1cnZlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBlbnYuYXR0YWNrQ3VydmUgPSBcImxpbmVhclwiO1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gYWxzbyBiZSBhbiBhcnJheVxuXHRcdCAqIGVudi5hdHRhY2tDdXJ2ZSA9IFswLCAwLjIsIDAuMywgMC40LCAxXVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLCAnYXR0YWNrQ3VydmUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzU3RyaW5nKHRoaXMuX2F0dGFja0N1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFja0N1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNBcnJheSh0aGlzLl9hdHRhY2tDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vbG9vayB1cCB0aGUgbmFtZSBpbiB0aGUgY3VydmVzIGFycmF5XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB0eXBlIGluIFRvbmUuRW52ZWxvcGUuVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGVbdHlwZV0uSW4gPT09IHRoaXMuX2F0dGFja0N1cnZlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZSBhcnJheVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFja0N1cnZlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjdXJ2ZSkge1xuXHQgICAgICAgICAgICAvL2NoZWNrIGlmIGl0J3MgYSB2YWxpZCB0eXBlXG5cdCAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGUuaGFzT3duUHJvcGVydHkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY3VydmVEZWYgPSBUb25lLkVudmVsb3BlLlR5cGVbY3VydmVdO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QoY3VydmVEZWYpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBjdXJ2ZURlZi5Jbjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBjdXJ2ZURlZjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkVudmVsb3BlOiBpbnZhbGlkIGN1cnZlOiAnICsgY3VydmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2hhcGUgb2YgdGhlIHJlbGVhc2UuIFNlZSB0aGUgYXR0YWNrIGN1cnZlIHR5cGVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd8QXJyYXl9XG5cdFx0ICogQG5hbWUgcmVsZWFzZUN1cnZlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBlbnYucmVsZWFzZUN1cnZlID0gXCJsaW5lYXJcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkVudmVsb3BlLnByb3RvdHlwZSwgJ3JlbGVhc2VDdXJ2ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNTdHJpbmcodGhpcy5fcmVsZWFzZUN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbGVhc2VDdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkodGhpcy5fcmVsZWFzZUN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgLy9sb29rIHVwIHRoZSBuYW1lIGluIHRoZSBjdXJ2ZXMgYXJyYXlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHR5cGUgaW4gVG9uZS5FbnZlbG9wZS5UeXBlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuRW52ZWxvcGUuVHlwZVt0eXBlXS5PdXQgPT09IHRoaXMuX3JlbGVhc2VDdXJ2ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvL290aGVyd2lzZSBqdXN0IHJldHVybiB0aGUgYXJyYXlcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlQ3VydmU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIC8vY2hlY2sgaWYgaXQncyBhIHZhbGlkIHR5cGVcblx0ICAgICAgICAgICAgaWYgKFRvbmUuRW52ZWxvcGUuVHlwZS5oYXNPd25Qcm9wZXJ0eShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjdXJ2ZURlZiA9IFRvbmUuRW52ZWxvcGUuVHlwZVtjdXJ2ZV07XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChjdXJ2ZURlZikpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBjdXJ2ZURlZi5PdXQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IGN1cnZlRGVmO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNBcnJheShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkVudmVsb3BlOiBpbnZhbGlkIGN1cnZlOiAnICsgY3VydmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrL2RlY2F5IHBvcnRpb24gb2YgdGhlIEFEU1IgZW52ZWxvcGUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgYXR0YWNrIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgZW52ZWxvcGUgc2NhbGVzIHRoZSB2YWxlcy5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgYmV0d2VlbiAwLTFcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy90cmlnZ2VyIHRoZSBhdHRhY2sgMC41IHNlY29uZHMgZnJvbSBub3cgd2l0aCBhIHZlbG9jaXR5IG9mIDAuMlxuXHRcdCAqICBlbnYudHJpZ2dlckF0dGFjayhcIiswLjVcIiwgMC4yKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsQXR0YWNrID0gdGhpcy50b1NlY29uZHModGhpcy5hdHRhY2spO1xuXHQgICAgICAgIHZhciBhdHRhY2sgPSBvcmlnaW5hbEF0dGFjaztcblx0ICAgICAgICB2YXIgZGVjYXkgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLmRlY2F5KTtcblx0ICAgICAgICB2ZWxvY2l0eSA9IFRvbmUuZGVmYXVsdEFyZyh2ZWxvY2l0eSwgMSk7XG5cdCAgICAgICAgLy9jaGVjayBpZiBpdCdzIG5vdCBhIGNvbXBsZXRlIGF0dGFja1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPiAwKSB7XG5cdCAgICAgICAgICAgIC8vc3VidHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgZnJvbSB0aGUgYXR0YWNrIHRpbWVcblx0ICAgICAgICAgICAgdmFyIGF0dGFja1JhdGUgPSAxIC8gYXR0YWNrO1xuXHQgICAgICAgICAgICB2YXIgcmVtYWluaW5nRGlzdGFuY2UgPSAxIC0gY3VycmVudFZhbHVlO1xuXHQgICAgICAgICAgICAvL3RoZSBhdHRhY2sgaXMgbm93IHRoZSByZW1haW5pbmcgdGltZVxuXHQgICAgICAgICAgICBhdHRhY2sgPSByZW1haW5pbmdEaXN0YW5jZSAvIGF0dGFja1JhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYXR0YWNrXG5cdCAgICAgICAgaWYgKHRoaXMuX2F0dGFja0N1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICB0aGlzLl9zaWcubGluZWFyUmFtcFRvKHZlbG9jaXR5LCBhdHRhY2ssIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYXR0YWNrQ3VydmUgPT09ICdleHBvbmVudGlhbCcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLnRhcmdldFJhbXBUbyh2ZWxvY2l0eSwgYXR0YWNrLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGF0dGFjayA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgICAgIHZhciBjdXJ2ZSA9IHRoaXMuX2F0dGFja0N1cnZlO1xuXHQgICAgICAgICAgICAvL3Rha2Ugb25seSBhIHBvcnRpb24gb2YgdGhlIGN1cnZlXG5cdCAgICAgICAgICAgIGlmIChhdHRhY2sgPCBvcmlnaW5hbEF0dGFjaykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnRDb21wbGV0ZSA9IDEgLSBhdHRhY2sgLyBvcmlnaW5hbEF0dGFjaztcblx0ICAgICAgICAgICAgICAgIHZhciBzbGljZUluZGV4ID0gTWF0aC5mbG9vcihwZXJjZW50Q29tcGxldGUgKiB0aGlzLl9hdHRhY2tDdXJ2ZS5sZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgY3VydmUgPSB0aGlzLl9hdHRhY2tDdXJ2ZS5zbGljZShzbGljZUluZGV4KTtcblx0ICAgICAgICAgICAgICAgIC8vdGhlIGZpcnN0IGluZGV4IGlzIHRoZSBjdXJyZW50IHZhbHVlXG5cdCAgICAgICAgICAgICAgICBjdXJ2ZVswXSA9IGN1cnJlbnRWYWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9zaWcuc2V0VmFsdWVDdXJ2ZUF0VGltZShjdXJ2ZSwgdGltZSwgYXR0YWNrLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vZGVjYXlcblx0ICAgICAgICBpZiAoZGVjYXkpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLnRhcmdldFJhbXBUbyh2ZWxvY2l0eSAqIHRoaXMuc3VzdGFpbiwgZGVjYXksIGF0dGFjayArIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlcnMgdGhlIHJlbGVhc2Ugb2YgdGhlIGVudmVsb3BlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICAvL3RyaWdnZXIgcmVsZWFzZSBpbW1lZGlhdGVseVxuXHRcdCAqICBlbnYudHJpZ2dlclJlbGVhc2UoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA+IDApIHtcblx0ICAgICAgICAgICAgdmFyIHJlbGVhc2UgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLnJlbGVhc2UpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fcmVsZWFzZUN1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2lnLmxpbmVhclJhbXBUbygwLCByZWxlYXNlLCB0aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9yZWxlYXNlQ3VydmUgPT09ICdleHBvbmVudGlhbCcpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NpZy50YXJnZXRSYW1wVG8oMCwgcmVsZWFzZSwgdGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY3VydmUgPSB0aGlzLl9yZWxlYXNlQ3VydmU7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZy5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZy5zZXRWYWx1ZUN1cnZlQXRUaW1lKGN1cnZlLCB0aW1lLCByZWxlYXNlLCBjdXJyZW50VmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gVGhpcyB3aWxsXG5cdFx0ICogIHJldHVybiB0aGUgdW5jb252ZXJ0ZWQgKHJhdykgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBUaGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zaWcuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRyaWdnZXJBdHRhY2tSZWxlYXNlIGlzIHNob3J0aGFuZCBmb3IgdHJpZ2dlckF0dGFjaywgdGhlbiB3YWl0aW5nXG5cdFx0ICogIHNvbWUgZHVyYXRpb24sIHRoZW4gdHJpZ2dlclJlbGVhc2UuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gZHVyYXRpb24gVGhlIGR1cmF0aW9uIG9mIHRoZSBzdXN0YWluLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgYXR0YWNrIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgdGhlIGF0dGFjayBhbmQgdGhlbiB0aGUgcmVsZWFzZSBhZnRlciAwLjYgc2Vjb25kcy5cblx0XHQgKiBlbnYudHJpZ2dlckF0dGFja1JlbGVhc2UoMC42KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbHMgYWxsIHNjaGVkdWxlZCBlbnZlbG9wZSBjaGFuZ2VzIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBhZnRlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5fc2lnLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhhZnRlcik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEJvcnJvd3MgdGhlIGNvbm5lY3QgbWV0aG9kIGZyb20gVG9uZS5TaWduYWwuXG5cdFx0ICogIEBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuY29ubmVjdCA9IFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdDtcblx0ICAgIC8qKlxuXHQgXHQgKiAgR2VuZXJhdGUgc29tZSBjb21wbGV4IGVudmVsb3BlIGN1cnZlcy5cblx0IFx0ICovXG5cdCAgICAoZnVuY3Rpb24gX2NyZWF0ZUN1cnZlcygpIHtcblx0ICAgICAgICB2YXIgY3VydmVMZW4gPSAxMjg7XG5cdCAgICAgICAgdmFyIGksIGs7XG5cdCAgICAgICAgLy9jb3NpbmUgY3VydmVcblx0ICAgICAgICB2YXIgY29zaW5lQ3VydmUgPSBbXTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBjb3NpbmVDdXJ2ZVtpXSA9IE1hdGguc2luKGkgLyAoY3VydmVMZW4gLSAxKSAqIChNYXRoLlBJIC8gMikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JpcHBsZSBjdXJ2ZVxuXHQgICAgICAgIHZhciByaXBwbGVDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIHZhciByaXBwbGVDdXJ2ZUZyZXEgPSA2LjQ7XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuIC0gMTsgaSsrKSB7XG5cdCAgICAgICAgICAgIGsgPSBpIC8gKGN1cnZlTGVuIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciBzaW5lV2F2ZSA9IE1hdGguc2luKGsgKiAoTWF0aC5QSSAqIDIpICogcmlwcGxlQ3VydmVGcmVxIC0gTWF0aC5QSSAvIDIpICsgMTtcblx0ICAgICAgICAgICAgcmlwcGxlQ3VydmVbaV0gPSBzaW5lV2F2ZSAvIDEwICsgayAqIDAuODM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJpcHBsZUN1cnZlW2N1cnZlTGVuIC0gMV0gPSAxO1xuXHQgICAgICAgIC8vc3RhaXJzIGN1cnZlXG5cdCAgICAgICAgdmFyIHN0YWlyc0N1cnZlID0gW107XG5cdCAgICAgICAgdmFyIHN0ZXBzID0gNTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBzdGFpcnNDdXJ2ZVtpXSA9IE1hdGguY2VpbChpIC8gKGN1cnZlTGVuIC0gMSkgKiBzdGVwcykgLyBzdGVwcztcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9pbi1vdXQgZWFzaW5nIGN1cnZlXG5cdCAgICAgICAgdmFyIHNpbmVDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGsgPSBpIC8gKGN1cnZlTGVuIC0gMSk7XG5cdCAgICAgICAgICAgIHNpbmVDdXJ2ZVtpXSA9IDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hIGJvdW5jZSBjdXJ2ZVxuXHQgICAgICAgIHZhciBib3VuY2VDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGsgPSBpIC8gKGN1cnZlTGVuIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciBmcmVxID0gTWF0aC5wb3coaywgMykgKiA0ICsgMC4yO1xuXHQgICAgICAgICAgICB2YXIgdmFsID0gTWF0aC5jb3MoZnJlcSAqIE1hdGguUEkgKiAyICogayk7XG5cdCAgICAgICAgICAgIGJvdW5jZUN1cnZlW2ldID0gTWF0aC5hYnModmFsICogKDEgLSBrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEludmVydCBhIHZhbHVlIGN1cnZlIHRvIG1ha2UgaXQgd29yayBmb3IgdGhlIHJlbGVhc2Vcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgZnVuY3Rpb24gaW52ZXJ0Q3VydmUoY3VydmUpIHtcblx0ICAgICAgICAgICAgdmFyIG91dCA9IG5ldyBBcnJheShjdXJ2ZS5sZW5ndGgpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGN1cnZlLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICBvdXRbal0gPSAxIC0gY3VydmVbal07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIG91dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcmV2ZXJzZSB0aGUgY3VydmVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgZnVuY3Rpb24gcmV2ZXJzZUN1cnZlKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBjdXJ2ZS5zbGljZSgwKS5yZXZlcnNlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGF0dGFjayBhbmQgcmVsZWFzZSBjdXJ2ZSBhcnJheXNcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5UeXBlID0ge1xuXHQgICAgICAgICAgICAnbGluZWFyJzogJ2xpbmVhcicsXG5cdCAgICAgICAgICAgICdleHBvbmVudGlhbCc6ICdleHBvbmVudGlhbCcsXG5cdCAgICAgICAgICAgICdib3VuY2UnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogaW52ZXJ0Q3VydmUoYm91bmNlQ3VydmUpLFxuXHQgICAgICAgICAgICAgICAgT3V0OiBib3VuY2VDdXJ2ZVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnY29zaW5lJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IGNvc2luZUN1cnZlLFxuXHQgICAgICAgICAgICAgICAgT3V0OiByZXZlcnNlQ3VydmUoY29zaW5lQ3VydmUpXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdzdGVwJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IHN0YWlyc0N1cnZlLFxuXHQgICAgICAgICAgICAgICAgT3V0OiBpbnZlcnRDdXJ2ZShzdGFpcnNDdXJ2ZSlcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ3JpcHBsZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiByaXBwbGVDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogaW52ZXJ0Q3VydmUocmlwcGxlQ3VydmUpXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdzaW5lJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IHNpbmVDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogaW52ZXJ0Q3VydmUoc2luZUN1cnZlKVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfTtcblx0ICAgIH0oKSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGlzY29ubmVjdCBhbmQgZGlzcG9zZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaWcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NpZyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSBpcyBhIFRvbmUuRW52ZWxvcGUgY29ubmVjdGVkIHRvIGEgZ2FpbiBub2RlLlxuXHRcdCAqICAgICAgICAgIFVubGlrZSBUb25lLkVudmVsb3BlLCB3aGljaCBvdXRwdXRzIHRoZSBlbnZlbG9wZSdzIHZhbHVlLCBUb25lLkFtcGxpdHVkZUVudmVsb3BlIGFjY2VwdHNcblx0XHQgKiAgICAgICAgICBhbiBhdWRpbyBzaWduYWwgYXMgdGhlIGlucHV0IGFuZCB3aWxsIGFwcGx5IHRoZSBlbnZlbG9wZSB0byB0aGUgYW1wbGl0dWRlXG5cdFx0ICogICAgICAgICAgb2YgdGhlIHNpZ25hbC4gUmVhZCBtb3JlIGFib3V0IEFEU1IgRW52ZWxvcGVzIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5bnRoZXNpemVyI0FEU1JfZW52ZWxvcGUpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbnZlbG9wZX1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja10gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGUgdG8gZ28gZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgdG8gaXQncyBtYXhpbXVtIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdFRoZSBwZXJpb2Qgb2YgdGltZSBhZnRlciB0aGUgYXR0YWNrIHRoYXQgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICBcdHRvIGZhbGwgdG8gdGhlIHN1c3RhaW4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzdXN0YWluXVx0VGhlIHBlcmNlbnQgb2YgdGhlIG1heGltdW0gdmFsdWUgdGhhdCB0aGUgZW52ZWxvcGUgcmVzdHMgYXQgdW50aWxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR0aGUgcmVsZWFzZSBpcyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHRUaGUgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkIGl0IHRha2VzIHRvIHJlYWNoIDAuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGFtcEVudiA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKHtcblx0XHQgKiBcdFwiYXR0YWNrXCI6IDAuMSxcblx0XHQgKiBcdFwiZGVjYXlcIjogMC4yLFxuXHRcdCAqIFx0XCJzdXN0YWluXCI6IDEuMCxcblx0XHQgKiBcdFwicmVsZWFzZVwiOiAwLjhcblx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdCAqIC8vY3JlYXRlIGFuIG9zY2lsbGF0b3IgYW5kIGNvbm5lY3QgaXRcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QoYW1wRW52KS5zdGFydCgpO1xuXHRcdCAqIC8vdHJpZ2dlciB0aGUgZW52ZWxvcGVzIGF0dGFjayBhbmQgcmVsZWFzZSBcIjh0XCIgYXBhcnRcblx0XHQgKiBhbXBFbnYudHJpZ2dlckF0dGFja1JlbGVhc2UoXCI4dFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dCBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgdGhpcy5fc2lnLmNvbm5lY3QodGhpcy5vdXRwdXQuZ2Fpbik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFtcGxpdHVkZUVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEFuYWx5c2VyTm9kZS5nZXRGbG9hdFRpbWVEb21haW5EYXRhIHBvbHlmaWxsXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIUFuYWx5c2VyTm9kZS5wcm90b3R5cGUuZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSkge1xuXHQgICAgICAgICAgICAvL3JlZmVyZW5jZWQgaHR0cHM6Ly9naXRodWIuY29tL21vaGF5b25hby9nZXQtZmxvYXQtdGltZS1kb21haW4tZGF0YVxuXHQgICAgICAgICAgICBBbmFseXNlck5vZGUucHJvdG90eXBlLmdldEZsb2F0VGltZURvbWFpbkRhdGEgPSBmdW5jdGlvbiAoYXJyYXkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB1aW50OCA9IG5ldyBVaW50OEFycmF5KGFycmF5Lmxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmdldEJ5dGVUaW1lRG9tYWluRGF0YSh1aW50OCk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVpbnQ4Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSAodWludDhbaV0gLSAxMjgpIC8gMTI4O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIFdlYiBBdWRpbydzXG5cdFx0ICogICAgICAgICAgW0FuYWx5c2VyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyNpZGwtZGVmLUFuYWx5c2VyTm9kZSkuXG5cdFx0ICogICAgICAgICAgRXh0cmFjdHMgRkZUIG9yIFdhdmVmb3JtIGRhdGEgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nPX0gdHlwZSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGFuYWx5c2lzLCBlaXRoZXIgXCJmZnRcIiwgb3IgXCJ3YXZlZm9ybVwiLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHNpemUgVGhlIHNpemUgb2YgdGhlIEZGVC4gVmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnc2l6ZSdcblx0ICAgICAgICBdLCBUb25lLkFuYWx5c2VyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0FuYWx5c2VyTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFuYWx5c2lzIHR5cGVcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBidWZmZXIgdGhhdCB0aGUgRkZUIGRhdGEgaXMgd3JpdHRlbiB0b1xuXHRcdFx0ICogIEB0eXBlIHtUeXBlZEFycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIC8vc2V0IHRoZSB2YWx1ZXMgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5zaXplID0gb3B0aW9ucy5zaXplO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFuYWx5c2VyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3NpemUnOiAxMDI0LFxuXHQgICAgICAgICd0eXBlJzogJ2ZmdCcsXG5cdCAgICAgICAgJ3Ntb290aGluZyc6IDAuOFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQb3NzaWJsZSByZXR1cm4gdHlwZXMgb2YgYW5hbHlzZXIuZ2V0VmFsdWUoKVxuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlci5UeXBlID0ge1xuXHQgICAgICAgIFdhdmVmb3JtOiAnd2F2ZWZvcm0nLFxuXHQgICAgICAgIEZGVDogJ2ZmdCdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUnVuIHRoZSBhbmFseXNpcyBnaXZlbiB0aGUgY3VycmVudCBzZXR0aW5ncyBhbmQgcmV0dXJuIHRoZVxuXHRcdCAqICByZXN1bHQgYXMgYSBUeXBlZEFycmF5LlxuXHRcdCAqICBAcmV0dXJucyB7VHlwZWRBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkFuYWx5c2VyLlR5cGUuRkZUKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLmdldEZsb2F0RnJlcXVlbmN5RGF0YSh0aGlzLl9idWZmZXIpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5BbmFseXNlci5UeXBlLldhdmVmb3JtKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLmdldEZsb2F0VGltZURvbWFpbkRhdGEodGhpcy5fYnVmZmVyKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNpemUgb2YgYW5hbHlzaXMuIFRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkFuYWx5c2VyI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BbmFseXNlci5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291bnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLmZmdFNpemUgPSBzaXplICogMjtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShzaXplKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYW5hbHlzaXMgZnVuY3Rpb24gcmV0dXJuZWQgYnkgYW5hbHlzZXIuZ2V0VmFsdWUoKSwgZWl0aGVyIFwiZmZ0XCIgb3IgXCJ3YXZlZm9ybVwiLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5BbmFseXNlciNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlICE9PSBUb25lLkFuYWx5c2VyLlR5cGUuV2F2ZWZvcm0gJiYgdHlwZSAhPT0gVG9uZS5BbmFseXNlci5UeXBlLkZGVCkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5BbmFseXNlcjogaW52YWxpZCB0eXBlOiAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgMCByZXByZXNlbnRzIG5vIHRpbWUgYXZlcmFnaW5nIHdpdGggdGhlIGxhc3QgYW5hbHlzaXMgZnJhbWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkFuYWx5c2VyI1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHNtb290aGluZ1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLCAnc21vb3RoaW5nJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc21vb3RoaW5nVGltZUNvbnN0YW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudCA9IHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQW5hbHlzZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFuYWx5c2VyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Db21wcmVzc29yIGlzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCB0aGUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICBbRHluYW1pY3NDb21wcmVzc29yTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtZHluYW1pY3Njb21wcmVzc29ybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICAgICAgICAgQ29tcHJlc3Npb24gcmVkdWNlcyB0aGUgdm9sdW1lIG9mIGxvdWQgc291bmRzIG9yIGFtcGxpZmllcyBxdWlldCBzb3VuZHNcblx0XHQgKiAgICAgICAgIGJ5IG5hcnJvd2luZyBvciBcImNvbXByZXNzaW5nXCIgYW4gYXVkaW8gc2lnbmFsJ3MgZHluYW1pYyByYW5nZS5cblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EeW5hbWljX3JhbmdlX2NvbXByZXNzaW9uKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfE9iamVjdH0gW3RocmVzaG9sZF0gVGhlIHZhbHVlIGFib3ZlIHdoaWNoIHRoZSBjb21wcmVzc2lvbiBzdGFydHMgdG8gYmUgYXBwbGllZC5cblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gW3JhdGlvXSBUaGUgZ2FpbiByZWR1Y3Rpb24gcmF0aW8uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNvbXAgPSBuZXcgVG9uZS5Db21wcmVzc29yKC0zMCwgMyk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbXByZXNzb3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndGhyZXNob2xkJyxcblx0ICAgICAgICAgICAgJ3JhdGlvJ1xuXHQgICAgICAgIF0sIFRvbmUuQ29tcHJlc3Nvcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29tcHJlc3NvciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0R5bmFtaWNzQ29tcHJlc3Nvck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHRocmVzaG9sZCB2YXVlXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9jb21wcmVzc29yLnRocmVzaG9sZCxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlY2liZWxzLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGF0dGFjayBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX2NvbXByZXNzb3IuYXR0YWNrLCBUb25lLlR5cGUuVGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJlbGVhc2UgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fY29tcHJlc3Nvci5yZWxlYXNlLCBUb25lLlR5cGUuVGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGtuZWUgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMua25lZSA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fY29tcHJlc3Nvci5rbmVlLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVjaWJlbHMsXG5cdCAgICAgICAgICAgICdjb252ZXJ0JzogZmFsc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmF0aW8gdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmF0aW8gPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2NvbXByZXNzb3IucmF0aW8sXG5cdCAgICAgICAgICAgICdjb252ZXJ0JzogZmFsc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL3NldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdrbmVlJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnLFxuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JhdGlvJyxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnNldChvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNvbXByZXNzb3IsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db21wcmVzc29yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdyYXRpbyc6IDEyLFxuXHQgICAgICAgICd0aHJlc2hvbGQnOiAtMjQsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAwLjI1LFxuXHQgICAgICAgICdhdHRhY2snOiAwLjAwMyxcblx0ICAgICAgICAna25lZSc6IDMwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNvbXByZXNzb3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29tcHJlc3Nvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2tuZWUnLFxuXHQgICAgICAgICAgICAncmVsZWFzZScsXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAncmF0aW8nLFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuYXR0YWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJlbGVhc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yYXRpby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yYXRpbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5rbmVlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmtuZWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNvbXByZXNzb3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBZGQgYSBzaWduYWwgYW5kIGEgbnVtYmVyIG9yIHR3byBzaWduYWxzLiBXaGVuIG5vIHZhbHVlIGlzXG5cdFx0ICogICAgICAgICBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IsIFRvbmUuQWRkIHdpbGwgc3VtIDxjb2RlPmlucHV0WzBdPC9jb2RlPlxuXHRcdCAqICAgICAgICAgYW5kIDxjb2RlPmlucHV0WzFdPC9jb2RlPi4gSWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IsIFxuXHRcdCAqICAgICAgICAgdGhlIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGlucHV0LlxuXHRcdCAqICBcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZSBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgVG9uZS5BZGQgd2lsbCBzdW0gdGhlIGZpcnN0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNlY29uZCBpbnB1dHMuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMik7XG5cdFx0ICogdmFyIGFkZCA9IG5ldyBUb25lLkFkZCgyKTtcblx0XHQgKiBzaWduYWwuY29ubmVjdChhZGQpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBhZGQgZXF1YWxzIDRcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2lmIGNvbnN0cnVjdGVkIHdpdGggbm8gYXJndW1lbnRzXG5cdFx0ICogLy9pdCB3aWxsIGFkZCB0aGUgZmlyc3QgYW5kIHNlY29uZCBpbnB1dHNcblx0XHQgKiB2YXIgYWRkID0gbmV3IFRvbmUuQWRkKCk7XG5cdFx0ICogdmFyIHNpZzAgPSBuZXcgVG9uZS5TaWduYWwoMykuY29ubmVjdChhZGQsIDAsIDApO1xuXHRcdCAqIHZhciBzaWcxID0gbmV3IFRvbmUuU2lnbmFsKDQpLmNvbm5lY3QoYWRkLCAwLCAxKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgYWRkIGVxdWFscyA3LiBcblx0XHQgKi9cblx0ICAgIFRvbmUuQWRkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHN1bW1pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VtID0gdGhpcy5pbnB1dFswXSA9IHRoaXMuaW5wdXRbMV0gPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLlNpZ25hbCh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uY29ubmVjdCh0aGlzLl9zdW0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQWRkLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFkZH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BZGQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdW0uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQWRkO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIE11bHRpcGx5IHR3byBpbmNvbWluZyBzaWduYWxzLiBPciwgaWYgYSBudW1iZXIgaXMgZ2l2ZW4gaW4gdGhlIGNvbnN0cnVjdG9yLFxuXHRcdCAqICAgICAgICAgIG11bHRpcGxpZXMgdGhlIGluY29taW5nIHNpZ25hbCBieSB0aGF0IHZhbHVlLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWUgQ29uc3RhbnQgdmFsdWUgdG8gbXVsdGlwbGUuIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgcmV0dXJuIHRoZSBwcm9kdWN0IG9mIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGlucHV0c1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0XHQgKiB2YXIgc2lnQSA9IG5ldyBUb25lLlNpZ25hbCgzKTtcblx0XHQgKiB2YXIgc2lnQiA9IG5ldyBUb25lLlNpZ25hbCg0KTtcblx0XHQgKiBzaWdBLmNvbm5lY3QobXVsdCwgMCwgMCk7XG5cdFx0ICogc2lnQi5jb25uZWN0KG11bHQsIDAsIDEpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIG11bHQgaXMgMTIuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgxMCk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgyKS5jb25uZWN0KG11bHQpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBtdWx0IGlzIDIwLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aXBseSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dCBub2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvdXRwdXQgbm9kZVxuXHRcdFx0ICogIGl0IGlzIGFsc28gdGhlIEdhaW5Ob2RlIHdoaWNoIGhhbmRsZXMgdGhlIHNjYWxpbmcgb2YgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKlxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdCA9IHRoaXMuaW5wdXRbMF0gPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2NhbGluZyBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9QYXJhbX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0WzFdID0gdGhpcy5vdXRwdXQuZ2Fpbjtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKHZhbHVlLCAwKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk11bHRpcGx5LCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTXVsdGlwbHl9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGlwbHkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9tdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTXVsdGlwbHk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBOZWdhdGUgdGhlIGluY29taW5nIHNpZ25hbC4gaS5lLiBhbiBpbnB1dCBzaWduYWwgb2YgMTAgd2lsbCBvdXRwdXQgLTEwXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG5lZyA9IG5ldyBUb25lLk5lZ2F0ZSgpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoLTIpLmNvbm5lY3QobmVnKTtcblx0XHQgKiAvL291dHB1dCBvZiBuZWcgaXMgcG9zaXRpdmUgMi4gXG5cdFx0ICovXG5cdCAgICBUb25lLk5lZ2F0ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBuZWdhdGlvbiBpcyBkb25lIGJ5IG11bHRpcGx5aW5nIGJ5IC0xXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTXVsdGlwbHkoLTEpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTmVnYXRlLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5lZ2F0ZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5OZWdhdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5OZWdhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTdWJ0cmFjdCB0aGUgc2lnbmFsIGNvbm5lY3RlZCB0byA8Y29kZT5pbnB1dFsxXTwvY29kZT4gZnJvbSB0aGUgc2lnbmFsIGNvbm5lY3RlZCBcblx0XHQgKiAgICAgICAgIHRvIDxjb2RlPmlucHV0WzBdPC9jb2RlPi4gSWYgYW4gYXJndW1lbnQgaXMgcHJvdmlkZWQgaW4gdGhlIGNvbnN0cnVjdG9yLCB0aGUgXG5cdFx0ICogICAgICAgICBzaWduYWxzIDxjb2RlPi52YWx1ZTwvY29kZT4gd2lsbCBiZSBzdWJ0cmFjdGVkIGZyb20gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlIFRoZSB2YWx1ZSB0byBzdWJ0cmFjdCBmcm9tIHRoZSBpbmNvbWluZyBzaWduYWwuIElmIHRoZSB2YWx1ZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG9taXR0ZWQsIGl0IHdpbGwgc3VidHJhY3QgdGhlIHNlY29uZCBzaWduYWwgZnJvbSB0aGUgZmlyc3QuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN1YiA9IG5ldyBUb25lLlN1YnRyYWN0KDEpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoNCkuY29ubmVjdChzdWIpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBzdWIgaXMgMy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN1YiA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdFx0ICogdmFyIHNpZ0EgPSBuZXcgVG9uZS5TaWduYWwoMTApO1xuXHRcdCAqIHZhciBzaWdCID0gbmV3IFRvbmUuU2lnbmFsKDIuNSk7XG5cdFx0ICogc2lnQS5jb25uZWN0KHN1YiwgMCwgMCk7XG5cdFx0ICogc2lnQi5jb25uZWN0KHN1YiwgMCwgMSk7XG5cdFx0ICogLy9vdXRwdXQgb2Ygc3ViIGlzIDcuNVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdWJ0cmFjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzdW1taW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IHRoaXMuaW5wdXRbMF0gPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBuZWdhdGUgdGhlIGlucHV0IG9mIHRoZSBzZWNvbmQgaW5wdXQgYmVmb3JlIGNvbm5lY3RpbmcgaXRcblx0XHRcdCAqICB0byB0aGUgc3VtbWluZyBub2RlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk5lZ2F0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbmVnID0gbmV3IFRvbmUuTmVnYXRlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIHZhbHVlIGlzIHNldFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuU2lnbmFsKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jaGFpbih0aGlzLl9uZWcsIHRoaXMuX3N1bSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdWJ0cmFjdCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWxCYXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN1YnRyYWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbmVnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9uZWcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N1bS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc3VtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdWJ0cmFjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIENvbnZlcnQgYW4gaW5jb21pbmcgc2lnbmFsIGJldHdlZW4gMCwgMSB0byBhbiBlcXVhbCBwb3dlciBnYWluIHNjYWxlLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBlcVBvd0dhaW4gPSBuZXcgVG9uZS5FcXVhbFBvd2VyR2FpbigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FcXVhbFBvd2VyR2FpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lcVBvd2VyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyh2YWwpIDwgMC4wMDEpIHtcblx0ICAgICAgICAgICAgICAgIC8vc2hvdWxkIG91dHB1dCAwIHdoZW4gaW5wdXQgaXMgMFxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5lcXVhbFBvd2VyU2NhbGUodmFsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgNDA5Nik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FcXVhbFBvd2VyR2FpbiwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FcXVhbFBvd2VyR2Fpbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FcXVhbFBvd2VyR2Fpbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9lcVBvd2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lcVBvd2VyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FcXVhbFBvd2VyR2Fpbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgIFRvbmUuQ3Jvc3NmYWRlIHByb3ZpZGVzIGVxdWFsIHBvd2VyIGZhZGluZyBiZXR3ZWVuIHR3byBpbnB1dHMuXG5cdFx0ICogICAgICAgICBNb3JlIG9uIGNyb3NzZmFkaW5nIHRlY2huaXF1ZSBbaGVyZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmFkZV8oYXVkaW9fZW5naW5lZXJpbmcpI0Nyb3NzZmFkaW5nKS5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiBAcGFyYW0ge05vcm1hbFJhbmdlfSBbaW5pdGlhbEZhZGU9MC41XVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIGNyb3NzRmFkZSA9IG5ldyBUb25lLkNyb3NzRmFkZSgwLjUpO1xuXHRcdCAqIC8vY29ubmVjdCBlZmZlY3QgQSB0byBjcm9zc2ZhZGUgZnJvbVxuXHRcdCAqIC8vZWZmZWN0IG91dHB1dCAwIHRvIGNyb3NzZmFkZSBpbnB1dCAwXG5cdFx0ICogZWZmZWN0QS5jb25uZWN0KGNyb3NzRmFkZSwgMCwgMCk7XG5cdFx0ICogLy9jb25uZWN0IGVmZmVjdCBCIHRvIGNyb3NzZmFkZSBmcm9tXG5cdFx0ICogLy9lZmZlY3Qgb3V0cHV0IDAgdG8gY3Jvc3NmYWRlIGlucHV0IDFcblx0XHQgKiBlZmZlY3RCLmNvbm5lY3QoY3Jvc3NGYWRlLCAwLCAxKTtcblx0XHQgKiBjcm9zc0ZhZGUuZmFkZS52YWx1ZSA9IDA7XG5cdFx0ICogLy8gXiBvbmx5IGVmZmVjdEEgaXMgb3V0cHV0XG5cdFx0ICogY3Jvc3NGYWRlLmZhZGUudmFsdWUgPSAxO1xuXHRcdCAqIC8vIF4gb25seSBlZmZlY3RCIGlzIG91dHB1dFxuXHRcdCAqIGNyb3NzRmFkZS5mYWRlLnZhbHVlID0gMC41O1xuXHRcdCAqIC8vIF4gdGhlIHR3byBzaWduYWxzIGFyZSBtaXhlZCBlcXVhbGx5LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Dcm9zc0ZhZGUgPSBmdW5jdGlvbiAoaW5pdGlhbEZhZGUpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+aW5wdXRbMF08L2NvZGU+LlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmEgPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFsxXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYiA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBcdFRoZSBtaXggYmV0d2VlbiB0aGUgdHdvIGlucHV0cy4gQSBmYWRlIHZhbHVlIG9mIDBcblx0XHRcdCAqIFx0d2lsbCBvdXRwdXQgMTAwJSA8Y29kZT5pbnB1dFswXTwvY29kZT4gYW5kXG5cdFx0XHQgKiBcdGEgdmFsdWUgb2YgMSB3aWxsIG91dHB1dCAxMDAlIDxjb2RlPmlucHV0WzFdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlID0gbmV3IFRvbmUuU2lnbmFsKFRvbmUuZGVmYXVsdEFyZyhpbml0aWFsRmFkZSwgMC41KSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBlcXVhbCBwb3dlciBnYWluIGNyb3NzIGZhZGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkVxdWFsUG93ZXJHYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckEgPSBuZXcgVG9uZS5FcXVhbFBvd2VyR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGVxdWFsIHBvd2VyIGdhaW4gY3Jvc3MgZmFkZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRXF1YWxQb3dlckdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQiA9IG5ldyBUb25lLkVxdWFsUG93ZXJHYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaW52ZXJ0IHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25lID0gdGhpcy5jb250ZXh0LmdldENvbnN0YW50KDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGludmVydCB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ludmVydCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuYS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLmIuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5mYWRlLmNoYWluKHRoaXMuX2VxdWFsUG93ZXJCLCB0aGlzLmIuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fb25lLmNvbm5lY3QodGhpcy5faW52ZXJ0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLmZhZGUuY29ubmVjdCh0aGlzLl9pbnZlcnQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2ludmVydC5jaGFpbih0aGlzLl9lcXVhbFBvd2VyQSwgdGhpcy5hLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdmYWRlJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Dcm9zc0ZhZGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Dcm9zc0ZhZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3Jvc3NGYWRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2ZhZGUnKTtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJCLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mYWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZhZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ludmVydC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faW52ZXJ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vbmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuYS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5hID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ3Jvc3NGYWRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRmlsdGVyIGlzIGEgZmlsdGVyIHdoaWNoIGFsbG93cyBmb3IgYWxsIG9mIHRoZSBzYW1lIG5hdGl2ZSBtZXRob2RzXG5cdFx0ICogICAgICAgICAgYXMgdGhlIFtCaXF1YWRGaWx0ZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1iaXF1YWRmaWx0ZXJub2RlLWludGVyZmFjZSkuXG5cdFx0ICogICAgICAgICAgVG9uZS5GaWx0ZXIgaGFzIHRoZSBhZGRlZCBhYmlsaXR5IHRvIHNldCB0aGUgZmlsdGVyIHJvbGxvZmYgYXQgLTEyXG5cdFx0ICogICAgICAgICAgKGRlZmF1bHQpLCAtMjQgYW5kIC00OC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nPX0gdHlwZSBUaGUgdHlwZSBvZiBmaWx0ZXIuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gcm9sbG9mZiBUaGUgZHJvcCBpbiBkZWNpYmVscyBwZXIgb2N0YXZlIGFmdGVyIHRoZSBjdXRvZmYgZnJlcXVlbmN5LlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgY2hvaWNlczogLTEyLCAtMjQsIGFuZCAtNDhcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGZpbHRlciA9IG5ldyBUb25lLkZpbHRlcigyMDAsIFwiaGlnaHBhc3NcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdyb2xsb2ZmJ1xuXHQgICAgICAgIF0sIFRvbmUuRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmlsdGVyKHMpXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbCgwLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIG9mIHRoZSBmaWx0ZXIsIG9ubHkgdXNlZCBpbiBjZXJ0YWluIGZpbHRlciB0eXBlc1xuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5nYWluID0gbmV3IFRvbmUuU2lnbmFsKHtcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5nYWluLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIFEgb3IgUXVhbGl0eSBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLlEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0eXBlIG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7c3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSByb2xsb2ZmIHZhbHVlIG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yb2xsb2ZmID0gb3B0aW9ucy5yb2xsb2ZmO1xuXHQgICAgICAgIC8vc2V0IHRoZSByb2xsb2ZmO1xuXHQgICAgICAgIHRoaXMucm9sbG9mZiA9IG9wdGlvbnMucm9sbG9mZjtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZpbHRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICdsb3dwYXNzJyxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMzUwLFxuXHQgICAgICAgICdyb2xsb2ZmJzogLTEyLFxuXHQgICAgICAgICdRJzogMSxcblx0ICAgICAgICAnZ2Fpbic6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgZmlsdGVyLiBUeXBlczogXCJsb3dwYXNzXCIsIFwiaGlnaHBhc3NcIixcblx0XHQgKiBcImJhbmRwYXNzXCIsIFwibG93c2hlbGZcIiwgXCJoaWdoc2hlbGZcIiwgXCJub3RjaFwiLCBcImFsbHBhc3NcIiwgb3IgXCJwZWFraW5nXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmlsdGVyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB2YXIgdHlwZXMgPSBbXG5cdCAgICAgICAgICAgICAgICAnbG93cGFzcycsXG5cdCAgICAgICAgICAgICAgICAnaGlnaHBhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ2JhbmRwYXNzJyxcblx0ICAgICAgICAgICAgICAgICdsb3dzaGVsZicsXG5cdCAgICAgICAgICAgICAgICAnaGlnaHNoZWxmJyxcblx0ICAgICAgICAgICAgICAgICdub3RjaCcsXG5cdCAgICAgICAgICAgICAgICAnYWxscGFzcycsXG5cdCAgICAgICAgICAgICAgICAncGVha2luZydcblx0ICAgICAgICAgICAgXTtcblx0ICAgICAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLkZpbHRlcjogaW52YWxpZCB0eXBlICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcm9sbG9mZiBvZiB0aGUgZmlsdGVyIHdoaWNoIGlzIHRoZSBkcm9wIGluIGRiXG5cdFx0ICogcGVyIG9jdGF2ZS4gSW1wbGVtZW50ZWQgaW50ZXJuYWxseSBieSBjYXNjYWRpbmcgZmlsdGVycy5cblx0XHQgKiBPbmx5IGFjY2VwdHMgdGhlIHZhbHVlcyAtMTIsIC0yNCwgLTQ4IGFuZCAtOTYuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcm9sbG9mZlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmlsdGVyLnByb3RvdHlwZSwgJ3JvbGxvZmYnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb2xsb2ZmO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocm9sbG9mZikge1xuXHQgICAgICAgICAgICByb2xsb2ZmID0gcGFyc2VJbnQocm9sbG9mZiwgMTApO1xuXHQgICAgICAgICAgICB2YXIgcG9zc2liaWxpdGllcyA9IFtcblx0ICAgICAgICAgICAgICAgIC0xMixcblx0ICAgICAgICAgICAgICAgIC0yNCxcblx0ICAgICAgICAgICAgICAgIC00OCxcblx0ICAgICAgICAgICAgICAgIC05NlxuXHQgICAgICAgICAgICBdO1xuXHQgICAgICAgICAgICB2YXIgY2FzY2FkaW5nQ291bnQgPSBwb3NzaWJpbGl0aWVzLmluZGV4T2Yocm9sbG9mZik7XG5cdCAgICAgICAgICAgIC8vY2hlY2sgdGhlIHJvbGxvZmYgaXMgdmFsaWRcblx0ICAgICAgICAgICAgaWYgKGNhc2NhZGluZ0NvdW50ID09PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RvbmUuRmlsdGVyOiByb2xsb2ZmIGNhbiBvbmx5IGJlIC0xMiwgLTI0LCAtNDggb3IgLTk2Jyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgY2FzY2FkaW5nQ291bnQgKz0gMTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9sbG9mZiA9IHJvbGxvZmY7XG5cdCAgICAgICAgICAgIC8vZmlyc3QgZGlzY29ubmVjdCB0aGUgZmlsdGVycyBhbmQgdGhyb3cgdGhlbSBhd2F5XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXSA9IG51bGw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IG5ldyBBcnJheShjYXNjYWRpbmdDb3VudCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNvdW50ID0gMDsgY291bnQgPCBjYXNjYWRpbmdDb3VudDsgY291bnQrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGZpbHRlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgICAgIGZpbHRlci50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QoZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KGZpbHRlci5kZXR1bmUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5RLmNvbm5lY3QoZmlsdGVyLlEpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5nYWluLmNvbm5lY3QoZmlsdGVyLmdhaW4pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tjb3VudF0gPSBmaWx0ZXI7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9jb25uZWN0IHRoZW0gdXBcblx0ICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb25DaGFpbiA9IFt0aGlzLmlucHV0XS5jb25jYXQodGhpcy5fZmlsdGVycykuY29uY2F0KFt0aGlzLm91dHB1dF0pO1xuXHQgICAgICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgY29ubmVjdGlvbkNoYWluKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuUS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU3BsaXQgdGhlIGluY29taW5nIHNpZ25hbCBpbnRvIHRocmVlIGJhbmRzIChsb3csIG1pZCwgaGlnaClcblx0XHQgKiAgICAgICAgIHdpdGggdHdvIGNyb3Nzb3ZlciBmcmVxdWVuY3kgY29udHJvbHMuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbbG93RnJlcXVlbmN5XSB0aGUgbG93L21pZCBjcm9zc292ZXIgZnJlcXVlbmN5XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbaGlnaEZyZXF1ZW5jeV0gdGhlIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3lcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kU3BsaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5NdWx0aWJhbmRTcGxpdCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvdXRwdXRzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBBcnJheSgzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbG93IGJhbmQuIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3cgPSB0aGlzLm91dHB1dFswXSA9IG5ldyBUb25lLkZpbHRlcigwLCAnbG93cGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsb3dlciBmaWx0ZXIgb2YgdGhlIG1pZCBiYW5kXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb3dNaWRGaWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2hpZ2hwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBiYW5kIG91dHB1dC4gQWxpYXMgZm9yIDxjb2RlPm91dHB1dFsxXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMub3V0cHV0WzFdID0gbmV3IFRvbmUuRmlsdGVyKDAsICdsb3dwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGhpZ2ggYmFuZCBvdXRwdXQuIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMl08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoID0gdGhpcy5vdXRwdXRbMl0gPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2hpZ2hwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMubG93RnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL2hpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmhpZ2hGcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBxdWFsaXR5IG9mIGFsbCB0aGUgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuUSk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5mYW4odGhpcy5sb3csIHRoaXMuaGlnaCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLl9sb3dNaWRGaWx0ZXIsIHRoaXMubWlkKTtcblx0ICAgICAgICAvL3RoZSBmcmVxdWVuY3kgY29udHJvbCBzaWduYWxcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeS5jb25uZWN0KHRoaXMubG93LmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9sb3dNaWRGaWx0ZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kuY29ubmVjdCh0aGlzLm1pZC5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuaGlnaC5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vdGhlIFEgdmFsdWVcblx0ICAgICAgICB0aGlzLlEuY29ubmVjdCh0aGlzLmxvdy5RKTtcblx0ICAgICAgICB0aGlzLlEuY29ubmVjdCh0aGlzLl9sb3dNaWRGaWx0ZXIuUSk7XG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5taWQuUSk7XG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5oaWdoLlEpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk11bHRpYmFuZFNwbGl0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRTcGxpdC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbG93RnJlcXVlbmN5JzogNDAwLFxuXHQgICAgICAgICdoaWdoRnJlcXVlbmN5JzogMjUwMCxcblx0ICAgICAgICAnUSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk11bHRpYmFuZFNwbGl0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZFNwbGl0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubG93LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxvdyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbG93TWlkRmlsdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sb3dNaWRGaWx0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhpZ2ggPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NdWx0aWJhbmRTcGxpdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRVEzIGlzIGEgdGhyZWUgYmFuZCBFUSB3aXRoIGNvbnRyb2wgb3ZlciBsb3csIG1pZCwgYW5kIGhpZ2ggZ2FpbiBhc1xuXHRcdCAqICAgICAgICAgd2VsbCBhcyB0aGUgbG93IGFuZCBoaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY2llcy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN8T2JqZWN0fSBbbG93TGV2ZWxdIFRoZSBnYWluIGFwcGxpZWQgdG8gdGhlIGxvd3MuXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFttaWRMZXZlbF0gVGhlIGdhaW4gYXBwbGllZCB0byB0aGUgbWlkLlxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbaGlnaExldmVsXSBUaGUgZ2FpbiBhcHBsaWVkIHRvIHRoZSBoaWdoLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBlcSA9IG5ldyBUb25lLkVRMygtMTAsIDMsIC0yMCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkVRMyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2hpZ2gnXG5cdCAgICAgICAgXSwgVG9uZS5FUTMpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG91dHB1dCBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbXVsdGliYW5kIHNwbGl0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGliYW5kU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpYmFuZFNwbGl0KHtcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IG9wdGlvbnMubG93RnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IG9wdGlvbnMuaGlnaEZyZXF1ZW5jeVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIGZvciB0aGUgbG93ZXIgc2lnbmFsc1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb3dHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLmxvdywgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBmb3IgdGhlIG1pZCBzaWduYWxzXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZEdhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMubWlkLCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIGhpZ2ggcGFydFxuXHRcdFx0ICogQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9oaWdoR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5oaWdoLCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIGxvdyBwYXJ0XG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvdyA9IHRoaXMuX2xvd0dhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBtaWQgcGFydFxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLl9taWRHYWluLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBpbiBkZWNpYmVscyBvZiB0aGUgaGlnaCBwYXJ0XG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2ggPSB0aGlzLl9oaWdoR2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBRIHZhbHVlIGZvciBhbGwgb2YgdGhlIGZpbHRlcnMuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IHRoaXMuX211bHRpYmFuZFNwbGl0LlE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gdGhpcy5fbXVsdGliYW5kU3BsaXQubG93RnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gdGhpcy5fbXVsdGliYW5kU3BsaXQuaGlnaEZyZXF1ZW5jeTtcblx0ICAgICAgICAvL3RoZSBmcmVxdWVuY3kgYmFuZHNcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdC5sb3cuY2hhaW4odGhpcy5fbG93R2FpbiwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0Lm1pZC5jaGFpbih0aGlzLl9taWRHYWluLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQuaGlnaC5jaGFpbih0aGlzLl9oaWdoR2FpbiwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVRMywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FUTMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2xvdyc6IDAsXG5cdCAgICAgICAgJ21pZCc6IDAsXG5cdCAgICAgICAgJ2hpZ2gnOiAwLFxuXHQgICAgICAgICdsb3dGcmVxdWVuY3knOiA0MDAsXG5cdCAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiAyNTAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVRM30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FUTMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sb3dHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sb3dHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9oaWdoR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faGlnaEdhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVRMztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBQZXJmb3JtcyBhIGxpbmVhciBzY2FsaW5nIG9uIGFuIGlucHV0IHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBTY2FsZXMgYSBOb3JtYWxSYW5nZSBpbnB1dCB0byBiZXR3ZWVuXG5cdFx0ICogICAgICAgICAgb3V0cHV0TWluIGFuZCBvdXRwdXRNYXguXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWluPTBdIFRoZSBvdXRwdXQgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgMC4gXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWF4PTFdXHRUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDEuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzY2FsZSA9IG5ldyBUb25lLlNjYWxlKDUwLCAxMDApO1xuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KHNjYWxlKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2Ygc2NhbGUgZXF1YWxzIDc1XG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlID0gZnVuY3Rpb24gKG91dHB1dE1pbiwgb3V0cHV0TWF4KSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX291dHB1dE1pbiA9IFRvbmUuZGVmYXVsdEFyZyhvdXRwdXRNaW4sIDApO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vdXRwdXRNYXggPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TWF4LCAxKTtcblx0ICAgICAgICAvKiogXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMSk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWRkfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hZGQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkFkZCgwKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5jb25uZWN0KHRoaXMuX2FkZCk7XG5cdCAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNjYWxlLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlbiBcblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMC4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dE1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXRNaW4gPSBtaW47XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgdmFsdWUuIFRoaXMgbnVtYmVyIGlzIG91dHB1dCB3aGVuIFxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAxLiBcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGUucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0TWF4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dE1heCA9IG1heDtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXQgdGhlIHZhbHVlc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZS5wcm90b3R5cGUuX3NldFJhbmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2FkZC52YWx1ZSA9IHRoaXMuX291dHB1dE1pbjtcblx0ICAgICAgICB0aGlzLl9zY2FsZS52YWx1ZSA9IHRoaXMuX291dHB1dE1heCAtIHRoaXMuX291dHB1dE1pbjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNjYWxlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FkZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYWRkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNjYWxlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBQZXJmb3JtcyBhbiBleHBvbmVudGlhbCBzY2FsaW5nIG9uIGFuIGlucHV0IHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBTY2FsZXMgYSBOb3JtYWxSYW5nZSB2YWx1ZSBbMCwxXSBleHBvbmVudGlhbGx5XG5cdFx0ICogICAgICAgICAgdG8gdGhlIG91dHB1dCByYW5nZSBvZiBvdXRwdXRNaW4gdG8gb3V0cHV0TWF4LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1pbj0wXSBUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDAuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWF4PTFdXHRUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDEuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbZXhwb25lbnQ9Ml0gVGhlIGV4cG9uZW50IHdoaWNoIHNjYWxlcyB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzY2FsZUV4cCA9IG5ldyBUb25lLlNjYWxlRXhwKDAsIDEwMCwgMik7XG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgwLjUpLmNvbm5lY3Qoc2NhbGVFeHApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZUV4cCA9IGZ1bmN0aW9uIChvdXRwdXRNaW4sIG91dHB1dE1heCwgZXhwb25lbnQpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgaW5wdXQgdG8gdGhlIG91dHB1dCByYW5nZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNjYWxlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2NhbGUob3V0cHV0TWluLCBvdXRwdXRNYXgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUG93fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHAgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuUG93KFRvbmUuZGVmYXVsdEFyZyhleHBvbmVudCwgMikpO1xuXHQgICAgICAgIHRoaXMuX2V4cC5jb25uZWN0KHRoaXMuX3NjYWxlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNjYWxlRXhwLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogSW5zdGVhZCBvZiBpbnRlcnBvbGF0aW5nIGxpbmVhcmx5IGJldHdlZW4gdGhlIDxjb2RlPm1pbjwvY29kZT4gYW5kXG5cdFx0ICogPGNvZGU+bWF4PC9jb2RlPiB2YWx1ZXMsIHNldHRpbmcgdGhlIGV4cG9uZW50IHdpbGwgaW50ZXJwb2xhdGUgYmV0d2VlblxuXHRcdCAqIHRoZSB0d28gdmFsdWVzIHdpdGggYW4gZXhwb25lbnRpYWwgY3VydmUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVFeHAjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBleHBvbmVudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLCAnZXhwb25lbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHAudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwLnZhbHVlID0gZXhwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlblxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAwLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlRXhwI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWluID0gbWluO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlblxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAxLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlRXhwI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5tYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TY2FsZUV4cH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V4cC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXhwID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TY2FsZUV4cDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIFdlYiBBdWRpbydzIG5hdGl2ZSBbRGVsYXlOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1kZWxheW5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGRlbGF5VGltZSBUaGUgZGVsYXkgYXBwbGllZCB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBtYXhEZWxheSBUaGUgbWF4aW11bSBkZWxheSB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5EZWxheSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnbWF4RGVsYXknXG5cdCAgICAgICAgXSwgVG9uZS5EZWxheSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBtYXhpbXVtIGRlbGF5IHRpbWUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgbm9kZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tYXhEZWxheSA9IE1hdGgubWF4KHRoaXMudG9TZWNvbmRzKG9wdGlvbnMubWF4RGVsYXkpLCB0aGlzLnRvU2Vjb25kcyhvcHRpb25zLmRlbGF5VGltZSkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBuYXRpdmUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVEZWxheSh0aGlzLl9tYXhEZWxheSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBpbmNvbWluZyBzaWduYWwgaXNcblx0XHRcdCAqICBkZWxheWVkLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9kZWxheU5vZGUuZGVsYXlUaW1lLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuVGltZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5kZWxheVRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZGVsYXlUaW1lJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5EZWxheSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkRlbGF5LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtYXhEZWxheSc6IDEsXG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBkZWxheSB0aW1lLiBUaGlzIGNhbm5vdCBiZSBjaGFuZ2VkLiBUaGUgdmFsdWUgaXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLlxuXHRcdCAqIEBtZW1iZXJvZiBUb25lLkRlbGF5I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIG1heERlbGF5XG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5EZWxheS5wcm90b3R5cGUsICdtYXhEZWxheScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heERlbGF5O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5EZWxheX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRGVsYXkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2RlbGF5VGltZScpO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5EZWxheTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIENvbWIgZmlsdGVycyBhcmUgYmFzaWMgYnVpbGRpbmcgYmxvY2tzIGZvciBwaHlzaWNhbCBtb2RlbGluZy4gUmVhZCBtb3JlXG5cdFx0ICogICAgICAgICBhYm91dCBjb21iIGZpbHRlcnMgb24gW0NDUk1BJ3Mgd2Vic2l0ZV0oaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvfmpvcy9wYXNwL0ZlZWRiYWNrX0NvbWJfRmlsdGVycy5odG1sKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgdGltZSBvZiB0aGUgZmlsdGVyLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gcmVzb25hbmNlIFRoZSBhbW91bnQgb2YgZmVlZGJhY2sgdGhlIGZpbHRlciBoYXMuXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5EZWxheShvcHRpb25zLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBkZWxheSBvZiB0aGUgY29tYiBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9kZWxheS5kZWxheVRpbWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZlZWRiYWNrIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnJlc29uYW5jZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIG9mIHRoZSBkZWxheWVkIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSB0aGlzLl9mZWVkYmFjay5nYWluO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmNoYWluKHRoaXMuX2ZlZWRiYWNrLCB0aGlzLl9kZWxheSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZlZWRiYWNrQ29tYkZpbHRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjEsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDAuNVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GZWVkYmFja0NvbWJGaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9kZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEdldCB0aGUgY3VycmVudCB3YXZlZm9ybSBkYXRhIG9mIHRoZSBjb25uZWN0ZWQgYXVkaW8gc291cmNlLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgRkZULiBWYWx1ZSBtdXN0IGJlIGEgcG93ZXIgb2Zcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKi9cblx0ICAgIFRvbmUuRkZUID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnc2l6ZSddLCBUb25lLkZGVCk7XG5cdCAgICAgICAgb3B0aW9ucy50eXBlID0gVG9uZS5BbmFseXNlci5UeXBlLkZGVDtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW5hbHlzZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkFuYWx5c2VyKG9wdGlvbnMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRkZULCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRkZULmRlZmF1bHRzID0geyAnc2l6ZSc6IDEwMjQgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXRzIHRoZSB3YXZlZm9ybSBvZiB0aGUgYXVkaW8gc291cmNlLiBSZXR1cm5zIHRoZSB3YXZlZm9ybSBkYXRhXG5cdFx0ICogIG9mIGxlbmd0aCBbc2l6ZV0oI3NpemUpIGFzIGEgRmxvYXQzMkFycmF5IHdpdGggdmFsdWVzIGJldHdlZW4gLTEgYW5kIDEuXG5cdFx0ICogIEByZXR1cm5zIHtUeXBlZEFycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GRlQucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2l6ZSBvZiBhbmFseXNpcy4gVGhpcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRkZUI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GRlQucHJvdG90eXBlLCAnc2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNpemUgPSBzaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5GRlR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZGVC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRkZUO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgUmV0dXJuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBhbiBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgtMSk7XG5cdFx0ICogdmFyIGFicyA9IG5ldyBUb25lLkFicygpO1xuXHRcdCAqIHNpZ25hbC5jb25uZWN0KGFicyk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGFicyBpcyAxLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5BYnMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTGVzc1RoYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FicyA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnModmFsKSA8IDAuMDAxKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh2YWwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSwgMTAyNCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BYnMsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBtZXRob2Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQWJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFicy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hYnMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FicyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQWJzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRm9sbG93ZXIgaXMgYSAgY3J1ZGUgZW52ZWxvcGUgZm9sbG93ZXIgd2hpY2ggd2lsbCBmb2xsb3dcblx0XHQgKiAgICAgICAgICB0aGUgYW1wbGl0dWRlIG9mIGFuIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBUYWtlIGNhcmUgd2l0aCBzbWFsbCAoPCAwLjAyKSBhdHRhY2sgb3IgZGVjYXkgdmFsdWVzXG5cdFx0ICogICAgICAgICAgYXMgZm9sbG93ZXIgaGFzIHNvbWUgcmlwcGxlIHdoaWNoIGlzIGV4YWdnZXJhdGVkXG5cdFx0ICogICAgICAgICAgYXQgdGhlc2UgdmFsdWVzLiBSZWFkIG1vcmUgYWJvdXQgZW52ZWxvcGUgZm9sbG93ZXJzIChhbHNvIGtub3duXG5cdFx0ICogICAgICAgICAgYXMgZW52ZWxvcGUgZGV0ZWN0b3JzKSBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbnZlbG9wZV9kZXRlY3RvcikuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja10gVGhlIHJhdGUgYXQgd2hpY2ggdGhlIGZvbGxvd2VyIHJpc2VzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByZWxlYXNlIFRoZSByYXRlIGF0IHdoaWNoIHRoZSBmb2xvd2VyIGZhbGxzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBmb2xsb3dlciA9IG5ldyBUb25lLkZvbGxvd2VyKDAuMiwgMC40KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5Gb2xsb3dlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWJzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hYnMgPSBuZXcgVG9uZS5BYnMoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbG93cGFzcyBmaWx0ZXIgd2hpY2ggc21vb3RocyB0aGUgaW5wdXRcblx0XHRcdCAqICBAdHlwZSB7QmlxdWFkRmlsdGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci50eXBlID0gJ2xvd3Bhc3MnO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5mcmVxdWVuY3kudmFsdWUgPSAwO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5RLnZhbHVlID0gLTEwMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcyA9IG5ldyBUb25lLldhdmVTaGFwZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ViID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSBuZXcgVG9uZS5EZWxheSh0aGlzLmJsb2NrVGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhpcyBrZWVwcyBpdCBmYXIgZnJvbSAwLCBldmVuIGZvciB2ZXJ5IHNtYWxsIGRpZmZlcmVuY2VzXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgxMDAwMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYXR0YWNrID0gb3B0aW9ucy5hdHRhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZTtcblx0ICAgICAgICAvL3RoZSBzbW9vdGhlZCBzaWduYWwgdG8gZ2V0IHRoZSB2YWx1ZXNcblx0ICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMuX2FicywgdGhpcy5fZmlsdGVyLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLy90aGUgZGlmZmVyZW5jZSBwYXRoXG5cdCAgICAgICAgdGhpcy5fYWJzLmNvbm5lY3QodGhpcy5fc3ViLCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuY2hhaW4odGhpcy5fZGVsYXksIHRoaXMuX3N1Yik7XG5cdCAgICAgICAgLy90aHJlc2hvbGQgdGhlIGRpZmZlcmVuY2UgYW5kIHVzZSB0aGUgdGhyZXNoIHRvIHNldCB0aGUgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5fc3ViLmNoYWluKHRoaXMuX211bHQsIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcywgdGhpcy5fZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSB2YWx1ZXMgaW4gdGhlIHRhYmxlXG5cdCAgICAgICAgdGhpcy5fc2V0QXR0YWNrUmVsZWFzZSh0aGlzLl9hdHRhY2ssIHRoaXMuX3JlbGVhc2UpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRm9sbG93ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2snOiAwLjA1LFxuXHQgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHNldHMgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSB0aW1lcyBpbiB0aGUgd2F2ZSBzaGFwZXJcblx0XHQgKiAgQHBhcmFtICAge1RpbWV9IGF0dGFja1xuXHRcdCAqICBAcGFyYW0gICB7VGltZX0gcmVsZWFzZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUuX3NldEF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAoYXR0YWNrLCByZWxlYXNlKSB7XG5cdCAgICAgICAgdmFyIG1pblRpbWUgPSB0aGlzLmJsb2NrVGltZTtcblx0ICAgICAgICBhdHRhY2sgPSBUb25lLlRpbWUoYXR0YWNrKS50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHJlbGVhc2UgPSBUb25lLlRpbWUocmVsZWFzZSkudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICBhdHRhY2sgPSBNYXRoLm1heChhdHRhY2ssIG1pblRpbWUpO1xuXHQgICAgICAgIHJlbGVhc2UgPSBNYXRoLm1heChyZWxlYXNlLCBtaW5UaW1lKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMuc2V0TWFwKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKHZhbCA8PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gYXR0YWNrO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2U7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXR0YWNrIHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRm9sbG93ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgYXR0YWNrXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUsICdhdHRhY2snLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2s7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhdHRhY2spIHtcblx0ICAgICAgICAgICAgdGhpcy5fYXR0YWNrID0gYXR0YWNrO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBdHRhY2tSZWxlYXNlKHRoaXMuX2F0dGFjaywgdGhpcy5fcmVsZWFzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcmVsZWFzZSB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZvbGxvd2VyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHJlbGVhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZvbGxvd2VyLnByb3RvdHlwZSwgJ3JlbGVhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmVsZWFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZWxlYXNlID0gcmVsZWFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QXR0YWNrUmVsZWFzZSh0aGlzLl9hdHRhY2ssIHRoaXMuX3JlbGVhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEJvcnJvd3MgdGhlIGNvbm5lY3QgbWV0aG9kIGZyb20gU2lnbmFsIHNvIHRoYXQgdGhlIG91dHB1dCBjYW4gYmUgdXNlZFxuXHRcdCAqICBhcyBhIFRvbmUuU2lnbmFsIGNvbnRyb2wgc2lnbmFsLlxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLmNvbm5lY3QgPSBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3Q7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Gb2xsb3dlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdWIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYWJzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hYnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX211bHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2N1cnZlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Gb2xsb3dlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuU2NhbGVkRW52ZWxvcCBpcyBhbiBlbnZlbG9wZSB3aGljaCBjYW4gYmUgc2NhbGVkXG5cdFx0ICogICAgICAgICB0byBhbnkgcmFuZ2UuIEl0J3MgdXNlZnVsIGZvciBhcHBseWluZyBhbiBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgdG8gYSBmcmVxdWVuY3kgb3IgYW55IG90aGVyIG5vbi1Ob3JtYWxSYW5nZSBzaWduYWxcblx0XHQgKiAgICAgICAgIHBhcmFtZXRlci5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbnZlbG9wZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdXHR0aGUgYXR0YWNrIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdHRoZSBkZWNheSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtzdXN0YWluXSBcdGEgcGVyY2VudGFnZSAoMC0xKSBvZiB0aGUgZnVsbCBhbXBsaXR1ZGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbcmVsZWFzZV1cdHRoZSByZWxlYXNlIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgc2NhbGVkRW52ID0gbmV3IFRvbmUuU2NhbGVkRW52ZWxvcGUoe1xuXHRcdCAqICBcdFwiYXR0YWNrXCIgOiAwLjIsXG5cdFx0ICogIFx0XCJtaW5cIiA6IDIwMCxcblx0XHQgKiAgXHRcIm1heFwiIDogMjAwMFxuXHRcdCAqICB9KTtcblx0XHQgKiAgc2NhbGVkRW52LmNvbm5lY3Qob3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZWRFbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2dldCBhbGwgb2YgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ2RlY2F5Jyxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkVudmVsb3BlKTtcblx0ICAgICAgICBUb25lLkVudmVsb3BlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlNjYWxlZEVudmVsb3BlLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgaW5jb21pbmcgc2lnbmFsIGJ5IGFuIGV4cG9uZW50XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUG93fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHAgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlBvdyhvcHRpb25zLmV4cG9uZW50KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgc2lnbmFsIHRvIHRoZSBkZXNpcmVkIHJhbmdlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TY2FsZShvcHRpb25zLm1pbiwgb3B0aW9ucy5tYXgpO1xuXHQgICAgICAgIHRoaXMuX3NpZy5jaGFpbih0aGlzLl9leHAsIHRoaXMuX3NjYWxlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNjYWxlZEVudmVsb3BlLCBUb25lLkVudmVsb3BlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgJ2V4cG9uZW50JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIG1pbiBvdXRwdXQgdmFsdWUuIFRoaXMgaXMgdGhlIHZhbHVlIHdoaWNoIGl0XG5cdFx0ICogc3RhcnRzIGF0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlZEVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWluID0gbWluO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgbWF4IG91dHB1dCB2YWx1ZS4gSW4gb3RoZXIgd29yZHMsIHRoZSB2YWx1ZVxuXHRcdCAqIGF0IHRoZSBwZWFrIG9mIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVkRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5tYXggPSBtYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBleHBvbmVudCB2YWx1ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZWRFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGV4cG9uZW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUsICdleHBvbmVudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAudmFsdWUgPSBleHA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2NhbGVkRW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXhwLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9leHAgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNjYWxlZEVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSBpcyBhIFRvbmUuU2NhbGVkRW52ZWxvcGUsIGJ1dCBpbnN0ZWFkIG9mIGBtaW5gIGFuZCBgbWF4YFxuXHRcdCAqICAgICAgICAgaXQncyBnb3QgYSBgYmFzZUZyZXF1ZW5jeWAgYW5kIGBvY3RhdmVzYCBwYXJhbWV0ZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW52ZWxvcGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbYXR0YWNrXVx0dGhlIGF0dGFjayB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHR0aGUgZGVjYXkgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbc3VzdGFpbl0gXHRhIHBlcmNlbnRhZ2UgKDAtMSkgb2YgdGhlIGZ1bGwgYW1wbGl0dWRlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHR0aGUgcmVsZWFzZSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGZyZXFFbnYgPSBuZXcgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSh7XG5cdFx0ICogIFx0XCJhdHRhY2tcIiA6IDAuMixcblx0XHQgKiAgXHRcImJhc2VGcmVxdWVuY3lcIiA6IFwiQzJcIixcblx0XHQgKiAgXHRcIm9jdGF2ZXNcIiA6IDRcblx0XHQgKiAgfSk7XG5cdFx0ICogIGZyZXFFbnYuY29ubmVjdChvc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeUVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdkZWNheScsXG5cdCAgICAgICAgICAgICdzdXN0YWluJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAgICAgVG9uZS5TY2FsZWRFbnZlbG9wZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8vbWVyZ2UgaXQgd2l0aCB0aGUgZnJlcXVlbmN5IGVudmVsb3BlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkZyZXF1ZW5jeUVudmVsb3BlLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTdG9yZXMgdGhlIG9jdGF2ZSB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvL3NldHVwXG5cdCAgICAgICAgdGhpcy5iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZyZXF1ZW5jeUVudmVsb3BlLCBUb25lLkVudmVsb3BlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiA0LFxuXHQgICAgICAgICdleHBvbmVudCc6IDJcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBtaW5pbnVtIG91dHB1dCB2YWx1ZS4gVGhpcyBpcyB0aGUgdmFsdWUgd2hpY2ggaXRcblx0XHQgKiBzdGFydHMgYXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAbmFtZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1pbiA9IHRoaXMudG9GcmVxdWVuY3kobWluKTtcblx0ICAgICAgICAgICAgLy9hbHNvIHVwZGF0ZSB0aGUgb2N0YXZlc1xuXHQgICAgICAgICAgICB0aGlzLm9jdGF2ZXMgPSB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBvY3RhdmVzIGFib3ZlIHRoZSBiYXNlRnJlcXVlbmN5IHRoYXQgdGhlXG5cdFx0ICogZW52ZWxvcGUgd2lsbCBzY2FsZSB0by5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3RhdmVzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3RhdmVzO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5tYXggPSB0aGlzLmJhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCBvY3RhdmVzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIGV4cG9uZW50IHZhbHVlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgZXhwb25lbnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZyZXF1ZW5jeUVudmVsb3BlLnByb3RvdHlwZSwgJ2V4cG9uZW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwLnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cC52YWx1ZSA9IGV4cDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GcmVxdWVuY3lFbnZlbG9wZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgR3JlYXRlclRoYW5aZXJvIG91dHB1dHMgMSB3aGVuIHRoZSBpbnB1dCBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4gemVyb1xuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBndDAgPSBuZXcgVG9uZS5HcmVhdGVyVGhhblplcm8oKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDAuMDEpLmNvbm5lY3QoZ3QwKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgZ3QwIGlzIDEuXG5cdFx0ICogc2lnLnZhbHVlID0gMDtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgZ3QwIGlzIDAuXG5cdFx0ICovXG5cdCAgICBUb25lLkdyZWF0ZXJUaGFuWmVybyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAodmFsIDw9IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LCAxMjcpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSBmaXJzdCB0aHJlc2hvbGRlZCBzaWduYWwgYnkgYSBsYXJnZSB2YWx1ZS5cblx0XHRcdCAqICB0aGlzIHdpbGwgaGVscCB3aXRoIHZhbHVlcyB3aGljaCBhcmUgdmVyeSBjbG9zZSB0byAwXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpcGx5KDEwMDAwKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fc2NhbGUuY29ubmVjdCh0aGlzLl90aHJlc2gpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR3JlYXRlclRoYW5aZXJvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgbWV0aG9kXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdyZWF0ZXJUaGFuWmVyb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhblplcm8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aHJlc2guZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR3JlYXRlclRoYW5aZXJvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIE91dHB1dCAxIGlmIHRoZSBzaWduYWwgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSwgb3RoZXJ3aXNlIG91dHB1dHMgMC5cblx0XHQgKiAgICAgICAgICBjYW4gY29tcGFyZSB0d28gc2lnbmFscyBvciBhIHNpZ25hbCBhbmQgYSBudW1iZXIuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0wXSB0aGUgdmFsdWUgdG8gY29tcGFyZSB0byB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGd0ID0gbmV3IFRvbmUuR3JlYXRlclRoYW4oMik7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCg0KS5jb25uZWN0KGd0KTtcblx0XHQgKiAvL291dHB1dCBvZiBndCBpcyBlcXVhbCAxLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHN1YnRyYWN0IHRoZSBhbW91bnQgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFswXSA9IG5ldyBUb25lLlN1YnRyYWN0KHZhbHVlKTtcblx0ICAgICAgICB0aGlzLmlucHV0WzFdID0gdGhpcy5fcGFyYW0uaW5wdXRbMV07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29tcGFyZSB0aGF0IGFtb3VudCB0byB6ZXJvXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR3JlYXRlclRoYW5aZXJvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ndHogPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuWmVybygpO1xuXHQgICAgICAgIC8vY29ubmVjdFxuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNvbm5lY3QodGhpcy5fZ3R6KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdyZWF0ZXJUaGFuLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBtZXRob2Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR3JlYXRlclRoYW59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ndHouZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2d0eiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR3JlYXRlclRoYW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5HYXRlIG9ubHkgcGFzc2VzIGEgc2lnbmFsIHRocm91Z2ggd2hlbiB0aGUgaW5jb21pbmdcblx0XHQgKiAgICAgICAgICBzaWduYWwgZXhjZWVkcyBhIHNwZWNpZmllZCB0aHJlc2hvbGQuIFRvIGRvIHRoaXMsIEdhdGUgdXNlc1xuXHRcdCAqICAgICAgICAgIGEgVG9uZS5Gb2xsb3dlciB0byBmb2xsb3cgdGhlIGFtcGxpdHVkZSBvZiB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgIEEgY29tbW9uIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2xhc3MgaXMgYSBbTm9pc2UgR2F0ZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTm9pc2VfZ2F0ZSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc3xPYmplY3R9IFt0aHJlc2hvbGRdIFRoZSB0aHJlc2hvbGQgYWJvdmUgd2hpY2ggdGhlIGdhdGUgd2lsbCBvcGVuLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBhdHRhY2sgVGhlIGZvbGxvd2VyJ3MgYXR0YWNrIHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmVsZWFzZSBUaGUgZm9sbG93ZXIncyByZWxlYXNlIHRpbWVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZ2F0ZSA9IG5ldyBUb25lLkdhdGUoLTMwLCAwLjIsIDAuMykudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgbWljID0gbmV3IFRvbmUuVXNlck1lZGlhKCkuY29ubmVjdChnYXRlKTtcblx0XHQgKiAvL3RoZSBnYXRlIHdpbGwgb25seSBwYXNzIHRocm91Z2ggdGhlIGluY29taW5nXG5cdFx0ICogLy9zaWduYWwgd2hlbiBpdCdzIGxvdWRlciB0aGFuIC0zMGRiXG5cdFx0ICovXG5cdCAgICBUb25lLkdhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndGhyZXNob2xkJyxcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuR2F0ZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRm9sbG93ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZvbGxvd2VyID0gbmV3IFRvbmUuRm9sbG93ZXIob3B0aW9ucy5hdHRhY2ssIG9wdGlvbnMucmVsZWFzZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR3JlYXRlclRoYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2d0ID0gbmV3IFRvbmUuR3JlYXRlclRoYW4oVG9uZS5kYlRvR2FpbihvcHRpb25zLnRocmVzaG9sZCkpO1xuXHQgICAgICAgIC8vdGhlIGNvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL3RoZSBjb250cm9sIHNpZ25hbFxuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4odGhpcy5fZ3QsIHRoaXMuX2ZvbGxvd2VyLCB0aGlzLm91dHB1dC5nYWluKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdhdGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYXRlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2snOiAwLjEsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAwLjEsXG5cdCAgICAgICAgJ3RocmVzaG9sZCc6IC00MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0aHJlc2hvbGQgb2YgdGhlIGdhdGUgaW4gZGVjaWJlbHNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HYXRlI1xuXHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHQgKiBAbmFtZSB0aHJlc2hvbGRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdhdGUucHJvdG90eXBlLCAndGhyZXNob2xkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5nYWluVG9EYih0aGlzLl9ndC52YWx1ZSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aHJlc2gpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ3QudmFsdWUgPSBUb25lLmRiVG9HYWluKHRocmVzaCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXR0YWNrIHNwZWVkIG9mIHRoZSBnYXRlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR2F0ZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBhdHRhY2tcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdhdGUucHJvdG90eXBlLCAnYXR0YWNrJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9sbG93ZXIuYXR0YWNrO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYXR0YWNrVGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9mb2xsb3dlci5hdHRhY2sgPSBhdHRhY2tUaW1lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJlbGVhc2Ugc3BlZWQgb2YgdGhlIGdhdGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HYXRlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHJlbGVhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdhdGUucHJvdG90eXBlLCAncmVsZWFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbGxvd2VyLnJlbGVhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyZWxlYXNlVGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9mb2xsb3dlci5yZWxlYXNlID0gcmVsZWFzZVRpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdhdGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR2F0ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2ZvbGxvd2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ndC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZm9sbG93ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2d0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HYXRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgVG9uZS5UaWNrU2lnbmFsIGV4dGVuZHMgVG9uZS5TaWduYWwsIGJ1dCBhZGRzIHRoZSBjYXBhYmlsaXR5XG5cdFx0ICogICAgICAgIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGVsYXBzZWQgdGlja3MuIGV4cG9uZW50aWFsIGFuZCB0YXJnZXQgY3VydmVzXG5cdFx0ICogICAgICAgIGFyZSBhcHByb3hpbWF0ZWQgd2l0aCBtdWx0aXBsZSBsaW5lYXIgcmFtcHMuXG5cdFx0ICpcblx0XHQgKiAgICAgICAgVGhhbmsgeW91IEJydW5vIERpYXMsIEguIFNvZmlhIFBpbnRvLCBhbmQgRGF2aWQgTS4gTWF0b3MsIGZvciB5b3VyIFtXQUMgcGFwZXJdKGh0dHBzOi8vc21hcnRlY2guZ2F0ZWNoLmVkdS9iaXRzdHJlYW0vaGFuZGxlLzE4NTMvNTQ1ODgvV0FDMjAxNi00OS5wZGYpXG5cdFx0ICogICAgICAgIGRlc2NyaWJpbmcgaW50ZWdyYXRpbmcgdGltaW5nIGZ1bmN0aW9ucyBmb3IgdGVtcG8gY2FsY3VsYXRpb25zLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBzaWduYWxcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICB2YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyh2YWx1ZSwgMSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzLCB7XG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5UaWNrcyxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL2V4dGVuZCB0aGUgbWVtb3J5XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLm1lbW9yeSA9IEluZmluaXR5O1xuXHQgICAgICAgIC8vY2xlYXIgdGhlIGNsb2NrIGZyb20gdGhlIGJlZ2lubmluZ1xuXHQgICAgICAgIHRoaXMuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKDApO1xuXHQgICAgICAgIC8vc2V0IGFuIGluaXRpYWwgZXZlbnRcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IDAsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaWNrU2lnbmFsLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiBXcmFwcyBUb25lLlNpZ25hbCBtZXRob2RzIHNvIHRoYXQgdGhleSBhbHNvXG5cdFx0ICogcmVjb3JkIHRoZSB0aWNrcy5cblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gbWV0aG9kXG5cdFx0ICogQHJldHVybiB7RnVuY3Rpb259XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIGZ1bmN0aW9uIF93cmFwU2NoZWR1bGVNZXRob2RzKG1ldGhvZCkge1xuXHQgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzRXZlbnQgPSB0aGlzLl9ldmVudHMucHJldmlvdXNFdmVudChldmVudCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrc1VudGlsVGltZSA9IHRoaXMuX2dldFRpY2tzVW50aWxFdmVudChwcmV2aW91c0V2ZW50LCB0aW1lKTtcblx0ICAgICAgICAgICAgZXZlbnQudGlja3MgPSBNYXRoLm1heCh0aWNrc1VudGlsVGltZSwgMCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lID0gX3dyYXBTY2hlZHVsZU1ldGhvZHMoVG9uZS5TaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lKTtcblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUgPSBfd3JhcFNjaGVkdWxlTWV0aG9kcyhUb25lLlNpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoXG5cdFx0ICogIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRpbWUgY29uc3RhbnQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGltZUNvbnN0YW50XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lLCBjb25zdGFudCkge1xuXHQgICAgICAgIC8vYXByb3hpbWF0ZSBpdCB3aXRoIG11bHRpcGxlIGxpbmVhciByYW1wc1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnNldFJhbXBQb2ludCh0aW1lKTtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgLy9zdGFydCBmcm9tIHByZXZpb3VzbHkgc2NoZWR1bGVkIHZhbHVlXG5cdCAgICAgICAgdmFyIHByZXZFdmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgdmFyIHNlZ21lbnRzID0gTWF0aC5yb3VuZChNYXRoLm1heCgxIC8gY29uc3RhbnQsIDEpKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBzZWdtZW50czsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBzZWdUaW1lID0gY29uc3RhbnQgKiBpICsgdGltZTtcblx0ICAgICAgICAgICAgdmFyIHJhbXBWYWwgPSB0aGlzLl9leHBvbmVudGlhbEFwcHJvYWNoKHByZXZFdmVudC50aW1lLCBwcmV2RXZlbnQudmFsdWUsIHZhbHVlLCBjb25zdGFudCwgc2VnVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodGhpcy5fdG9Vbml0cyhyYW1wVmFsKSwgc2VnVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gZXhwb25lbnRpYWwgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb21cblx0XHQgKiAgdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwYXJhbWV0ZXIgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGVuZFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgLy9hcHJveGltYXRlIGl0IHdpdGggbXVsdGlwbGUgbGluZWFyIHJhbXBzXG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICAvL3N0YXJ0IGZyb20gcHJldmlvdXNseSBzY2hlZHVsZWQgdmFsdWVcblx0ICAgICAgICB2YXIgcHJldkV2ZW50ID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICBpZiAocHJldkV2ZW50ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHByZXZFdmVudCA9IHtcblx0ICAgICAgICAgICAgICAgICd2YWx1ZSc6IHRoaXMuX2luaXRpYWxWYWx1ZSxcblx0ICAgICAgICAgICAgICAgICd0aW1lJzogMFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2FwcHJveCAxMCBzZWdtZW50cyBwZXIgc2Vjb25kXG5cdCAgICAgICAgdmFyIHNlZ21lbnRzID0gTWF0aC5yb3VuZChNYXRoLm1heCgodGltZSAtIHByZXZFdmVudC50aW1lKSAqIDEwLCAxKSk7XG5cdCAgICAgICAgdmFyIHNlZ21lbnREdXIgPSAodGltZSAtIHByZXZFdmVudC50aW1lKSAvIHNlZ21lbnRzO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IHNlZ21lbnRzOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHNlZ1RpbWUgPSBzZWdtZW50RHVyICogaSArIHByZXZFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB2YXIgcmFtcFZhbCA9IHRoaXMuX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUocHJldkV2ZW50LnRpbWUsIHByZXZFdmVudC52YWx1ZSwgdGltZSwgdmFsdWUsIHNlZ1RpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMuX3RvVW5pdHMocmFtcFZhbCksIHNlZ1RpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSB0aWNrIHZhbHVlIGF0IHRoZSB0aW1lLiBUYWtlcyBpbnRvIGFjY291bnRcblx0XHQgKiBhbnkgYXV0b21hdGlvbiBjdXJ2ZXMgc2NoZWR1bGVkIG9uIHRoZSBzaWduYWwuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIGdldCB0aGUgdGljayBjb3VudCBhdFxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgIFRoZSBudW1iZXIgb2YgdGlja3Mgd2hpY2ggaGF2ZSBlbGFwc2VkIGF0IHRoZSB0aW1lXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGFueSBhdXRvbWF0aW9ucy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuX2dldFRpY2tzVW50aWxFdmVudCA9IGZ1bmN0aW9uIChldmVudCwgdGltZSkge1xuXHQgICAgICAgIGlmIChldmVudCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICBldmVudCA9IHtcblx0ICAgICAgICAgICAgICAgICd0aWNrcyc6IDAsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IDBcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNVbmRlZihldmVudC50aWNrcykpIHtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzRXZlbnQgPSB0aGlzLl9ldmVudHMucHJldmlvdXNFdmVudChldmVudCk7XG5cdCAgICAgICAgICAgIGV2ZW50LnRpY2tzID0gdGhpcy5fZ2V0VGlja3NVbnRpbEV2ZW50KHByZXZpb3VzRXZlbnQsIGV2ZW50LnRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgdmFsMCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoZXZlbnQudGltZSk7XG5cdCAgICAgICAgdmFyIHZhbDEgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIC8vaWYgaXQncyByaWdodCBvbiB0aGUgbGluZSwgdGFrZSB0aGUgcHJldmlvdXMgdmFsdWVcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmdldCh0aW1lKS50aW1lID09PSB0aW1lICYmIHRoaXMuX2V2ZW50cy5nZXQodGltZSkudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSkge1xuXHQgICAgICAgICAgICB2YWwxID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lIC0gdGhpcy5zYW1wbGVUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIDAuNSAqICh0aW1lIC0gZXZlbnQudGltZSkgKiAodmFsMCArIHZhbDEpICsgZXZlbnQudGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgdGljayB2YWx1ZSBhdCB0aGUgdGltZS4gVGFrZXMgaW50byBhY2NvdW50XG5cdFx0ICogYW55IGF1dG9tYXRpb24gY3VydmVzIHNjaGVkdWxlZCBvbiB0aGUgc2lnbmFsLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gZ2V0IHRoZSB0aWNrIGNvdW50IGF0XG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgVGhlIG51bWJlciBvZiB0aWNrcyB3aGljaCBoYXZlIGVsYXBzZWQgYXQgdGhlIHRpbWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gYW55IGF1dG9tYXRpb25zLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuX2dldFRpY2tzVW50aWxFdmVudChldmVudCwgdGltZSksIDApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBudW1iZXIgb2YgdGlja3MgZnJvbSB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSB7VGlja3N9IHRpY2tzIFRoZSBudW1iZXIgb2YgdGlja3MgdG8gY2FsY3VsYXRlXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBUaGUgdGltZSB0byBnZXQgdGhlIG5leHQgdGljayBmcm9tXG5cdFx0ICogQHJldHVybiB7U2Vjb25kc30gVGhlIGR1cmF0aW9uIG9mIHRoZSBudW1iZXIgb2YgdGlja3MgZnJvbSB0aGUgZ2l2ZW4gdGltZSBpbiBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmdldER1cmF0aW9uT2ZUaWNrcyA9IGZ1bmN0aW9uICh0aWNrcywgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgY3VycmVudFRpY2sgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmdldFRpbWVPZlRpY2soY3VycmVudFRpY2sgKyB0aWNrcykgLSB0aW1lO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdpdmVuIGEgdGljaywgcmV0dXJucyB0aGUgdGltZSB0aGF0IHRpY2sgb2NjdXJzIGF0LlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrXG5cdFx0ICogQHJldHVybiB7VGltZX0gICAgICBUaGUgdGltZSB0aGF0IHRoZSB0aWNrIG9jY3Vycy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZ2V0VGltZU9mVGljayA9IGZ1bmN0aW9uICh0aWNrKSB7XG5cdCAgICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuX2V2ZW50cy5nZXQodGljaywgJ3RpY2tzJyk7XG5cdCAgICAgICAgdmFyIGFmdGVyID0gdGhpcy5fZXZlbnRzLmdldEFmdGVyKHRpY2ssICd0aWNrcycpO1xuXHQgICAgICAgIGlmIChiZWZvcmUgJiYgYmVmb3JlLnRpY2tzID09PSB0aWNrKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBiZWZvcmUudGltZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZSAmJiBhZnRlciAmJiBhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhciAmJiBiZWZvcmUudmFsdWUgIT09IGFmdGVyLnZhbHVlKSB7XG5cdCAgICAgICAgICAgIHZhciB2YWwwID0gdGhpcy5nZXRWYWx1ZUF0VGltZShiZWZvcmUudGltZSk7XG5cdCAgICAgICAgICAgIHZhciB2YWwxID0gdGhpcy5nZXRWYWx1ZUF0VGltZShhZnRlci50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGRlbHRhID0gKHZhbDEgLSB2YWwwKSAvIChhZnRlci50aW1lIC0gYmVmb3JlLnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgayA9IE1hdGguc3FydChNYXRoLnBvdyh2YWwwLCAyKSAtIDIgKiBkZWx0YSAqIChiZWZvcmUudGlja3MgLSB0aWNrKSk7XG5cdCAgICAgICAgICAgIHZhciBzb2wxID0gKC12YWwwICsgaykgLyBkZWx0YTtcblx0ICAgICAgICAgICAgdmFyIHNvbDIgPSAoLXZhbDAgLSBrKSAvIGRlbHRhO1xuXHQgICAgICAgICAgICByZXR1cm4gKHNvbDEgPiAwID8gc29sMSA6IHNvbDIpICsgYmVmb3JlLnRpbWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUpIHtcblx0ICAgICAgICAgICAgaWYgKGJlZm9yZS52YWx1ZSA9PT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGJlZm9yZS50aW1lICsgKHRpY2sgLSBiZWZvcmUudGlja3MpIC8gYmVmb3JlLnZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRpY2sgLyB0aGlzLl9pbml0aWFsVmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENvbnZlcnQgc29tZSBudW1iZXIgb2YgdGlja3MgdGhlaXIgdGhlIGR1cmF0aW9uIGluIHNlY29uZHMgYWNjb3VudGluZ1xuXHRcdCAqIGZvciBhbnkgYXV0b21hdGlvbiBjdXJ2ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSBudW1iZXIgb2YgdGlja3MgdG8gY29udmVydCB0byBzZWNvbmRzLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IFt3aGVuPW5vd10gIFdoZW4gYWxvbmcgdGhlIGF1dG9tYXRpb24gdGltZWxpbmUgdG8gY29udmVydCB0aGUgdGlja3MuXG5cdFx0ICogQHJldHVybiB7VG9uZS5UaW1lfSAgICAgICBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBvZiB0aGUgdGlja3MuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnRpY2tzVG9UaW1lID0gZnVuY3Rpb24gKHRpY2tzLCB3aGVuKSB7XG5cdCAgICAgICAgd2hlbiA9IHRoaXMudG9TZWNvbmRzKHdoZW4pO1xuXHQgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaW1lKHRoaXMuZ2V0RHVyYXRpb25PZlRpY2tzKHRpY2tzLCB3aGVuKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGludmVyc2Ugb2YgW3RpY2tzVG9UaW1lXSgjdGlja3N0b3RpbWUpLiBDb252ZXJ0IGEgZHVyYXRpb24gaW5cblx0XHQgKiBzZWNvbmRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIG51bWJlciBvZiB0aWNrcyBhY2NvdW50aW5nIGZvciBhbnlcblx0XHQgKiBhdXRvbWF0aW9uIGN1cnZlcyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiBUaGUgdGltZSBpbnRlcnZhbCB0byBjb252ZXJ0IHRvIHRpY2tzLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IFt3aGVuPW5vd10gICAgIFdoZW4gYWxvbmcgdGhlIGF1dG9tYXRpb24gdGltZWxpbmUgdG8gY29udmVydCB0aGUgdGlja3MuXG5cdFx0ICogQHJldHVybiB7VG9uZS5UaWNrc30gICAgICAgICAgVGhlIGR1cmF0aW9uIGluIHRpY2tzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS50aW1lVG9UaWNrcyA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgd2hlbikge1xuXHQgICAgICAgIHdoZW4gPSB0aGlzLnRvU2Vjb25kcyh3aGVuKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB2YXIgc3RhcnRUaWNrcyA9IHRoaXMuZ2V0VGlja3NBdFRpbWUod2hlbik7XG5cdCAgICAgICAgdmFyIGVuZFRpY2tzID0gdGhpcy5nZXRUaWNrc0F0VGltZSh3aGVuICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaWNrcyhlbmRUaWNrcyAtIHN0YXJ0VGlja3MpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpY2tTaWduYWw7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBUaW1lbGluZSBTdGF0ZS4gUHJvdmlkZXMgdGhlIG1ldGhvZHM6IDxjb2RlPnNldFN0YXRlQXRUaW1lKFwic3RhdGVcIiwgdGltZSk8L2NvZGU+XG5cdFx0ICogICAgICAgICAgYW5kIDxjb2RlPmdldFZhbHVlQXRUaW1lKHRpbWUpPC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UaW1lbGluZX1cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IGluaXRpYWwgVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIFRpbWVsaW5lU3RhdGUuIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byA8Y29kZT51bmRlZmluZWQ8L2NvZGU+XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUgPSBmdW5jdGlvbiAoaW5pdGlhbCkge1xuXHQgICAgICAgIFRvbmUuVGltZWxpbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgaW5pdGlhbCBzdGF0ZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2luaXRpYWwgPSBpbml0aWFsO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZWxpbmVTdGF0ZSwgVG9uZS5UaW1lbGluZSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgc2NoZWR1bGVkIHN0YXRlIHNjaGVkdWxlZCBiZWZvcmUgb3IgYXRcblx0XHQgKiAgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJuICB7U3RyaW5nfSAgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIGlucHV0IGluIHNldFN0YXRlQXRUaW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5nZXQodGltZSk7XG5cdCAgICAgICAgaWYgKGV2ZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBldmVudC5zdGF0ZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdGlhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIHN0YXRlIHRvIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgc3RhdGUgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIHRvIHNldC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lU3RhdGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuc2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAoc3RhdGUsIHRpbWUpIHtcblx0ICAgICAgICAvL2FsbCBzdGF0ZSBjaGFuZ2VzIG5lZWQgdG8gYmUgPj0gdGhlIHByZXZpb3VzIHN0YXRlIHRpbWVcblx0ICAgICAgICAvL1RPRE8gdGhyb3cgZXJyb3IgaWYgdGltZSA8IHRoZSBwcmV2aW91cyBldmVudCB0aW1lXG5cdCAgICAgICAgdGhpcy5hZGQoe1xuXHQgICAgICAgICAgICAnc3RhdGUnOiBzdGF0ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZXZlbnQgYmVmb3JlIHRoZSB0aW1lIHdpdGggdGhlIGdpdmVuIHN0YXRlXG5cdFx0ICogIEBwYXJhbSB7VG9uZS5TdGF0ZX0gc3RhdGUgVGhlIHN0YXRlIHRvIGxvb2sgZm9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGNoZWNrIGJlZm9yZVx0XHRcdFxuXHRcdCAqICBAcmV0dXJuICB7T2JqZWN0fSAgVGhlIGV2ZW50IHdpdGggdGhlIGdpdmVuIHN0YXRlIGJlZm9yZSB0aGUgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlLnByb3RvdHlwZS5nZXRMYXN0U3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fdGltZWxpbmVbaV07XG5cdCAgICAgICAgICAgIGlmIChldmVudC5zdGF0ZSA9PT0gc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBldmVudCBhZnRlciB0aGUgdGltZSB3aXRoIHRoZSBnaXZlbiBzdGF0ZVxuXHRcdCAqICBAcGFyYW0ge1RvbmUuU3RhdGV9IHN0YXRlIFRoZSBzdGF0ZSB0byBsb29rIGZvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBjaGVjayBmcm9tXG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBUaGUgZXZlbnQgd2l0aCB0aGUgZ2l2ZW4gc3RhdGUgYWZ0ZXIgdGhlIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuZ2V0TmV4dFN0YXRlID0gZnVuY3Rpb24gKHN0YXRlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA8IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl90aW1lbGluZVtpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChldmVudC5zdGF0ZSA9PT0gc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZWxpbmVTdGF0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBVc2VzIFtUb25lLlRpY2tTaWduYWxdKFRpY2tTaWduYWwpIHRvIHRyYWNrIGVsYXBzZWQgdGlja3Mgd2l0aFxuXHRcdCAqICBcdFx0Y29tcGxleCBhdXRvbWF0aW9uIGN1cnZlcy5cblx0XHQgKlxuXHRcdCAqIFx0QGNvbnN0cnVjdG9yXG5cdCAgICAgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgaW5pdGlhbCBmcmVxdWVuY3kgdGhhdCB0aGUgc2lnbmFsIHRpY2tzIGF0XG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZnJlcXVlbmN5J10sIFRvbmUuVGlja1NvdXJjZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gc2hvdWxkIGJlIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5UaWNrU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHN0YXRlIHRpbWVsaW5lXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBvZmZzZXQgdmFsdWVzIG9mIHRoZSB0aWNrc1xuXHRcdFx0ICogQHR5cGUge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldCA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgLy9hZGQgdGhlIGZpcnN0IGV2ZW50XG5cdCAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSgwLCAwKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpY2tTb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UuZGVmYXVsdHMgPSB7ICdmcmVxdWVuY3knOiAxIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiLCBcInN0b3BwZWRcIiBvciBcInBhdXNlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpY2tTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGNsb2NrIGF0IHRoZSBnaXZlbiB0aW1lLiBPcHRpb25hbGx5IHBhc3MgaW4gYW4gb2Zmc2V0XG5cdFx0ICogIG9mIHdoZXJlIHRvIHN0YXJ0IHRoZSB0aWNrIGNvdW50ZXIgZnJvbS5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICB0aW1lICAgIFRoZSB0aW1lIHRoZSBjbG9jayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtUaWNrcz0wfSBvZmZzZXQgVGhlIG51bWJlciBvZiB0aWNrcyB0byBzdGFydCB0aGUgc291cmNlIGF0XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlRpY2tTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQob2Zmc2V0KSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZShvZmZzZXQsIHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBjbG9jay4gU3RvcHBpbmcgdGhlIGNsb2NrIHJlc2V0cyB0aGUgdGljayBjb3VudGVyIHRvIDAuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBjbG9jayBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NvdXJjZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGNsb2NrLnN0b3AoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vY2FuY2VsIHRoZSBwcmV2aW91cyBzdG9wXG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQudGltZSA+IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuY2FuY2VsKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhdXNlIHRoZSBjbG9jay4gUGF1c2luZyBkb2VzIG5vdCByZXNldCB0aGUgdGljayBjb3VudGVyLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlBhdXNlZCwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgc3RhcnQvc3RvcC9wYXVzZSBhbmQgc2V0VGlja0F0VGltZSBldmVudHMgc2NoZWR1bGVkIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0byBjbGVhciB0aGUgZXZlbnRzIGFmdGVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgZWxhcHNlZCB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICBUaGUgbnVtYmVyIG9mIHRpY2tzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIHN0b3BFdmVudCA9IHRoaXMuX3N0YXRlLmdldExhc3RTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIC8vdGhpcyBldmVudCBhbGxvd3MgZm9yRWFjaEJldHdlZW4gdG8gaXRlcmF0ZSB1bnRpbCB0aGUgY3VycmVudCB0aW1lXG5cdCAgICAgICAgdmFyIHRtcEV2ZW50ID0ge1xuXHQgICAgICAgICAgICBzdGF0ZTogVG9uZS5TdGF0ZS5QYXVzZWQsXG5cdCAgICAgICAgICAgIHRpbWU6IHRpbWVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9rZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBvZmZzZXQgZXZlbnRcblx0ICAgICAgICB2YXIgbGFzdFN0YXRlID0gc3RvcEV2ZW50O1xuXHQgICAgICAgIHZhciBlbGFwc2VkVGlja3MgPSAwO1xuXHQgICAgICAgIC8vaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgZXZlbnRzIHNpbmNlIHRoZSBsYXN0IHN0b3Bcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdG9wRXZlbnQudGltZSwgdGltZSArIHRoaXMuc2FtcGxlVGltZSwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgdmFyIHBlcmlvZFN0YXJ0VGltZSA9IGxhc3RTdGF0ZS50aW1lO1xuXHQgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGFuIG9mZnNldCBldmVudCBpbiB0aGlzIHBlcmlvZCB1c2UgdGhhdFxuXHQgICAgICAgICAgICB2YXIgb2Zmc2V0RXZlbnQgPSB0aGlzLl90aWNrT2Zmc2V0LmdldChlLnRpbWUpO1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0RXZlbnQudGltZSA+PSBsYXN0U3RhdGUudGltZSkge1xuXHQgICAgICAgICAgICAgICAgZWxhcHNlZFRpY2tzID0gb2Zmc2V0RXZlbnQudGlja3M7XG5cdCAgICAgICAgICAgICAgICBwZXJpb2RTdGFydFRpbWUgPSBvZmZzZXRFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChsYXN0U3RhdGUuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBlLnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRUaWNrcyArPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShlLnRpbWUpIC0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUocGVyaW9kU3RhcnRUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBsYXN0U3RhdGUgPSBlO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIHRlbXBvcmFyeSBldmVudFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLnJlbW92ZSh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIHRpY2tzXG5cdCAgICAgICAgcmV0dXJuIGVsYXBzZWRUaWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuIFN0YXJ0cyBjb3VudGluZyBhdCAwXG5cdFx0ICogIGFuZCBpbmNyZW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC4gUmV0dXJucyAtMSB3aGVuIHN0b3BwZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpY2tTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHRpY2tzXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLCAndGlja3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRpY2tzQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKHQsIHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHNpbmNlIHRpY2tzPTAgdGhhdCB0aGUgVGlja1NvdXJjZSBoYXMgYmVlbiBydW5uaW5nLiBBY2NvdW50c1xuXHRcdCAqICBmb3IgdGVtcG8gY3VydmVzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpY2tTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHNlY29uZHNcblx0XHQgKiAgQHR5cGUge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZSwgJ3NlY29uZHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNlY29uZHNBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLmZyZXF1ZW5jeS50aW1lVG9UaWNrcyhzLCBub3cpO1xuXHQgICAgICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKHRpY2tzLCBub3cpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZWxhcHNlZCBzZWNvbmRzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBnZXQgdGhlIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc30gIFRoZSBudW1iZXIgb2YgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFNlY29uZHNBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgc3RvcEV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0TGFzdFN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgLy90aGlzIGV2ZW50IGFsbG93cyBmb3JFYWNoQmV0d2VlbiB0byBpdGVyYXRlIHVudGlsIHRoZSBjdXJyZW50IHRpbWVcblx0ICAgICAgICB2YXIgdG1wRXZlbnQgPSB7XG5cdCAgICAgICAgICAgIHN0YXRlOiBUb25lLlN0YXRlLlBhdXNlZCxcblx0ICAgICAgICAgICAgdGltZTogdGltZVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuYWRkKHRtcEV2ZW50KTtcblx0ICAgICAgICAvL2tlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIG9mZnNldCBldmVudFxuXHQgICAgICAgIHZhciBsYXN0U3RhdGUgPSBzdG9wRXZlbnQ7XG5cdCAgICAgICAgdmFyIGVsYXBzZWRTZWNvbmRzID0gMDtcblx0ICAgICAgICAvL2l0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIGV2ZW50cyBzaW5jZSB0aGUgbGFzdCBzdG9wXG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RvcEV2ZW50LnRpbWUsIHRpbWUgKyB0aGlzLnNhbXBsZVRpbWUsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIHZhciBwZXJpb2RTdGFydFRpbWUgPSBsYXN0U3RhdGUudGltZTtcblx0ICAgICAgICAgICAgLy9pZiB0aGVyZSBpcyBhbiBvZmZzZXQgZXZlbnQgaW4gdGhpcyBwZXJpb2QgdXNlIHRoYXRcblx0ICAgICAgICAgICAgdmFyIG9mZnNldEV2ZW50ID0gdGhpcy5fdGlja09mZnNldC5nZXQoZS50aW1lKTtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldEV2ZW50LnRpbWUgPj0gbGFzdFN0YXRlLnRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRTZWNvbmRzID0gb2Zmc2V0RXZlbnQuc2Vjb25kcztcblx0ICAgICAgICAgICAgICAgIHBlcmlvZFN0YXJ0VGltZSA9IG9mZnNldEV2ZW50LnRpbWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKGxhc3RTdGF0ZS5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIGUuc3RhdGUgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgZWxhcHNlZFNlY29uZHMgKz0gZS50aW1lIC0gcGVyaW9kU3RhcnRUaW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGxhc3RTdGF0ZSA9IGU7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgdGVtcG9yYXJ5IGV2ZW50XG5cdCAgICAgICAgdGhpcy5fc3RhdGUucmVtb3ZlKHRtcEV2ZW50KTtcblx0ICAgICAgICAvL3JldHVybiB0aGUgdGlja3Ncblx0ICAgICAgICByZXR1cm4gZWxhcHNlZFNlY29uZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgdGljayB2YWx1ZSB0byBzZXRcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIHNldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVGlja1NvdXJjZX0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5zZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aWNrcywgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmFkZCh7XG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZSxcblx0ICAgICAgICAgICAgJ3RpY2tzJzogdGlja3MsXG5cdCAgICAgICAgICAgICdzZWNvbmRzJzogdGhpcy5mcmVxdWVuY3kuZ2V0RHVyYXRpb25PZlRpY2tzKHRpY2tzLCB0aW1lKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBzY2hlZHVsZWQgc3RhdGUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybiAge1N0cmluZ30gIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBpbnB1dCBpbiBzZXRTdGF0ZUF0VGltZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RhcnQoXCIrMC4xXCIpO1xuXHRcdCAqIHNvdXJjZS5nZXRTdGF0ZUF0VGltZShcIiswLjFcIik7IC8vcmV0dXJucyBcInN0YXJ0ZWRcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIHRpbWUgb2YgdGhlIGdpdmVuIHRpY2suIFRoZSBzZWNvbmQgYXJndW1lbnRcblx0XHQgKiBpcyB3aGVuIHRvIHRlc3QgYmVmb3JlLiBTaW5jZSB0aWNrcyBjYW4gYmUgc2V0ICh3aXRoIHNldFRpY2tzQXRUaW1lKVxuXHRcdCAqIHRoZXJlIG1heSBiZSBtdWx0aXBsZSB0aW1lcyBmb3IgYSBnaXZlbiB0aWNrIHZhbHVlLiBcblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgbnVtYmVyLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSBiZWZvcmUgV2hlbiB0byBtZWFzdXJlIHRoZSB0aWNrIHZhbHVlIGZyb20uIFxuXHRcdCAqIEByZXR1cm4ge1RpbWV9ICAgICAgIFRoZSB0aW1lIG9mIHRoZSB0aWNrXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFRpbWVPZlRpY2sgPSBmdW5jdGlvbiAodGljaywgYmVmb3JlKSB7XG5cdCAgICAgICAgYmVmb3JlID0gVG9uZS5kZWZhdWx0QXJnKGJlZm9yZSwgdGhpcy5ub3coKSk7XG5cdCAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX3RpY2tPZmZzZXQuZ2V0KGJlZm9yZSk7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KGJlZm9yZSk7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGltZSA9IE1hdGgubWF4KG9mZnNldC50aW1lLCBldmVudC50aW1lKTtcblx0ICAgICAgICB2YXIgYWJzb2x1dGVUaWNrcyA9IHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKHN0YXJ0VGltZSkgKyB0aWNrIC0gb2Zmc2V0LnRpY2tzO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZyZXF1ZW5jeS5nZXRUaW1lT2ZUaWNrKGFic29sdXRlVGlja3MpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2UgdGhlIGNhbGxiYWNrIGV2ZW50IGF0IGFsbCBzY2hlZHVsZWQgdGlja3MgYmV0d2VlbiB0aGUgXG5cdFx0ICogIHN0YXJ0IHRpbWUgYW5kIHRoZSBlbmQgdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICBzdGFydFRpbWUgIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlYXJjaCByYW5nZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICBlbmRUaW1lICAgIFRoZSBlbmQgb2YgdGhlIHNlYXJjaCByYW5nZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbjxUaW1lLFRpY2tzPn0gIGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGVhY2ggdGlja1xuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5UaWNrU291cmNlfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmZvckVhY2hUaWNrQmV0d2VlbiA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9vbmx5IGl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VjdGlvbnMgd2hlcmUgaXQgaXMgXCJzdGFydGVkXCJcblx0ICAgICAgICB2YXIgbGFzdFN0YXRlRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdGFydFRpbWUsIGVuZFRpbWUsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBpZiAobGFzdFN0YXRlRXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBldmVudC5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmZvckVhY2hUaWNrQmV0d2VlbihNYXRoLm1heChsYXN0U3RhdGVFdmVudC50aW1lLCBzdGFydFRpbWUpLCBldmVudC50aW1lIC0gdGhpcy5zYW1wbGVUaW1lLCBjYWxsYmFjayk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbGFzdFN0YXRlRXZlbnQgPSBldmVudDtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IE1hdGgubWF4KGxhc3RTdGF0ZUV2ZW50LnRpbWUsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgaWYgKGxhc3RTdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgdGhpcy5fc3RhdGUpIHtcblx0ICAgICAgICAgICAgLy9maWd1cmUgb3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGZyZXF1ZW5jeSB0aWNrcyBhbmQgdGhlIFxuXHQgICAgICAgICAgICB2YXIgc3RhcnRUaWNrcyA9IHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrc0F0U3RhcnQgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShsYXN0U3RhdGVFdmVudC50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGRpZmYgPSBzdGFydFRpY2tzIC0gdGlja3NBdFN0YXJ0O1xuXHQgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gZGlmZiAlIDE7XG5cdCAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgIG9mZnNldCA9IDEgLSBvZmZzZXQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIG5leHRUaWNrVGltZSA9IHRoaXMuZnJlcXVlbmN5LmdldFRpbWVPZlRpY2soc3RhcnRUaWNrcyArIG9mZnNldCk7XG5cdCAgICAgICAgICAgIHZhciBlcnJvciA9IG51bGw7XG5cdCAgICAgICAgICAgIHdoaWxlIChuZXh0VGlja1RpbWUgPCBlbmRUaW1lICYmIHRoaXMuX3N0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5leHRUaWNrVGltZSwgTWF0aC5yb3VuZCh0aGlzLmdldFRpY2tzQXRUaW1lKG5leHRUaWNrVGltZSkpKTtcblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBuZXh0VGlja1RpbWUgKz0gdGhpcy5mcmVxdWVuY3kuZ2V0RHVyYXRpb25PZlRpY2tzKDEsIG5leHRUaWNrVGltZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKGVycm9yKSB7XG5cdCAgICAgICAgICAgIHRocm93IGVycm9yO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmcmVxdWVuY3knKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpY2tTb3VyY2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBzYW1wbGUgYWNjdXJhdGUgY2xvY2sgd2hpY2ggcHJvdmlkZXMgYSBjYWxsYmFjayBhdCB0aGUgZ2l2ZW4gcmF0ZS5cblx0XHQgKiAgICAgICAgICBXaGlsZSB0aGUgY2FsbGJhY2sgaXMgbm90IHNhbXBsZS1hY2N1cmF0ZSAoaXQgaXMgc3RpbGwgc3VzY2VwdGlibGUgdG9cblx0XHQgKiAgICAgICAgICBsb29zZSBKUyB0aW1pbmcpLCB0aGUgdGltZSBwYXNzZWQgaW4gYXMgdGhlIGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFja1xuXHRcdCAqICAgICAgICAgIGlzIHByZWNpc2UuIEZvciBtb3N0IGFwcGxpY2F0aW9ucywgaXQgaXMgYmV0dGVyIHRvIHVzZSBUb25lLlRyYW5zcG9ydFxuXHRcdCAqICAgICAgICAgIGluc3RlYWQgb2YgdGhlIENsb2NrIGJ5IGl0c2VsZiBzaW5jZSB5b3UgY2FuIHN5bmNocm9uaXplIG11bHRpcGxlIGNhbGxiYWNrcy5cblx0XHQgKlxuXHRcdCAqIFx0QGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICogXHRAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aXRoIHRoZSB0aW1lIG9mIHRoZSBhdWRpbyBldmVudFxuXHRcdCAqIFx0QHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgcmF0ZSBvZiB0aGUgY2FsbGJhY2tcblx0XHQgKiBcdEBleGFtcGxlXG5cdFx0ICogLy90aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGFwcHJveGltYXRlbHkgb25jZSBhIHNlY29uZFxuXHRcdCAqIC8vYW5kIHdpbGwgcHJpbnQgdGhlIHRpbWUgZXhhY3RseSBvbmNlIGEgc2Vjb25kIGFwYXJ0LlxuXHRcdCAqIHZhciBjbG9jayA9IG5ldyBUb25lLkNsb2NrKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2codGltZSk7XG5cdFx0ICogfSwgMSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdLCBUb25lLkNsb2NrKTtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gaW52b2tlIGF0IHRoZSBzY2hlZHVsZWQgdGljay5cblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG5leHQgdGltZSB0aGUgY2FsbGJhY2sgaXMgc2NoZWR1bGVkLlxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGljayBjb3VudGVyXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlRpY2tTb3VyY2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UgPSBuZXcgVG9uZS5UaWNrU291cmNlKG9wdGlvbnMuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbGFzdCB0aW1lIHRoZSBsb29wIGNhbGxiYWNrIHdhcyBpbnZva2VkXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJhdGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBiZSBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlICB7QlBNfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fdGlja1NvdXJjZS5mcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzdGF0ZSB0aW1lbGluZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIC8vYWRkIGFuIGluaXRpYWwgc3RhdGVcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb29wIGZ1bmN0aW9uIGJvdW5kIHRvIGl0cyBjb250ZXh0LlxuXHRcdFx0ICogIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHJlbW92ZSB0aGUgZXZlbnQgaW4gdGhlIGVuZC5cblx0XHRcdCAqICBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JvdW5kTG9vcCA9IHRoaXMuX2xvb3AuYmluZCh0aGlzKTtcblx0ICAgICAgICAvL2JpbmQgYSBjYWxsYmFjayB0byB0aGUgd29ya2VyIHRocmVhZFxuXHQgICAgICAgIHRoaXMuY29udGV4dC5vbigndGljaycsIHRoaXMuX2JvdW5kTG9vcCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DbG9jaywgVG9uZS5FbWl0dGVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiLCBcInN0b3BwZWRcIiBvciBcInBhdXNlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNsb2NrI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2xvY2sucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgY2xvY2sgYXQgdGhlIGdpdmVuIHRpbWUuIE9wdGlvbmFsbHkgcGFzcyBpbiBhbiBvZmZzZXRcblx0XHQgKiAgb2Ygd2hlcmUgdG8gc3RhcnQgdGhlIHRpY2sgY291bnRlciBmcm9tLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIHRpbWUgICAgVGhlIHRpbWUgdGhlIGNsb2NrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0gIHtUaWNrcz19ICBvZmZzZXQgIFdoZXJlIHRoZSB0aWNrIGNvdW50ZXIgc3RhcnRzIGNvdW50aW5nIGZyb20uXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkNsb2NrfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RhcnRlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9sYXN0VXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgY2xvY2suIFN0b3BwaW5nIHRoZSBjbG9jayByZXNldHMgdGhlIHRpY2sgY291bnRlciB0byAwLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNsb2NrfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogY2xvY2suc3RvcCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc3RvcCh0aW1lKTtcblx0ICAgICAgICBpZiAodGltZSA8IHRoaXMuX2xhc3RVcGRhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXVzZSB0aGUgY2xvY2suIFBhdXNpbmcgZG9lcyBub3QgcmVzZXQgdGhlIHRpY2sgY291bnRlci5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DbG9ja30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlBhdXNlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UucGF1c2UodGltZSk7XG5cdCAgICAgICAgICAgIGlmICh0aW1lIDwgdGhpcy5fbGFzdFVwZGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdwYXVzZScsIHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC4gU3RhcnRzIGNvdW50aW5nIGF0IDBcblx0XHQgKiAgYW5kIGluY3JlbWVudHMgYWZ0ZXIgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkLlxuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DbG9jay5wcm90b3R5cGUsICd0aWNrcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmdldFRpY2tzQXRUaW1lKHRoaXMubm93KCkpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS50aWNrcyA9IHQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgc2luY2UgdGlja3M9MCB0aGF0IHRoZSBDbG9jayBoYXMgYmVlbiBydW5uaW5nLiBBY2NvdW50c1xuXHRcdCAqICBmb3IgdGVtcG8gY3VydmVzXG5cdFx0ICogIEB0eXBlIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2xvY2sucHJvdG90eXBlLCAnc2Vjb25kcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2Uuc2Vjb25kcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5zZWNvbmRzID0gcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGVsYXBzZWQgc2Vjb25kcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSBlbGFwc2VkIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9ICBUaGUgbnVtYmVyIG9mIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZ2V0U2Vjb25kc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2UuZ2V0U2Vjb25kc0F0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTZXQgdGhlIGNsb2NrJ3MgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIHZhbHVlIHRvIHNldFxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gc2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VG9uZS5DbG9ja30gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuc2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGlja3MsIHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlLnNldFRpY2tzQXRUaW1lKHRpY2tzLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGNsb2NrJ3MgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBnZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgICAgVGhlIHRpY2sgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2UuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSB0aW1lIG9mIHRoZSBuZXh0IHRpY2tcblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgbnVtYmVyLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IGJlZm9yZSBcblx0XHQgKiBAcmV0dXJuIHtUb25lLkNsb2NrfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5uZXh0VGlja1RpbWUgPSBmdW5jdGlvbiAob2Zmc2V0LCB3aGVuKSB7XG5cdCAgICAgICAgd2hlbiA9IHRoaXMudG9TZWNvbmRzKHdoZW4pO1xuXHQgICAgICAgIHZhciBjdXJyZW50VGljayA9IHRoaXMuZ2V0VGlja3NBdFRpbWUod2hlbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2UuZ2V0VGltZU9mVGljayhjdXJyZW50VGljayArIG9mZnNldCwgd2hlbik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzY2hlZHVsaW5nIGxvb3AuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5fbG9vcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgc3RhcnRUaW1lID0gdGhpcy5fbGFzdFVwZGF0ZTtcblx0ICAgICAgICB2YXIgZW5kVGltZSA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IGVuZFRpbWU7XG5cdCAgICAgICAgaWYgKHN0YXJ0VGltZSAhPT0gZW5kVGltZSkge1xuXHQgICAgICAgICAgICAvL3RoZSBzdGF0ZSBjaGFuZ2UgZXZlbnRzXG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hCZXR3ZWVuKHN0YXJ0VGltZSwgZW5kVGltZSwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5zdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgY2FzZSBUb25lLlN0YXRlLlN0YXJ0ZWQ6XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX3RpY2tTb3VyY2UuZ2V0VGlja3NBdFRpbWUoZS50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgZS50aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSBUb25lLlN0YXRlLlN0b3BwZWQ6XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKGUudGltZSAhPT0gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0b3AnLCBlLnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgVG9uZS5TdGF0ZS5QYXVzZWQ6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdwYXVzZScsIGUudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgICAgIC8vdGhlIHRpY2sgY2FsbGJhY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UuZm9yRWFjaFRpY2tCZXR3ZWVuKHN0YXJ0VGltZSwgZW5kVGltZSwgZnVuY3Rpb24gKHRpbWUsIHRpY2tzKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHRpY2tzKTtcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHNjaGVkdWxlZCBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJuICB7U3RyaW5nfSAgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIGlucHV0IGluIHNldFN0YXRlQXRUaW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGNsb2NrLnN0YXJ0KFwiKzAuMVwiKTtcblx0XHQgKiBjbG9jay5nZXRTdGF0ZUF0VGltZShcIiswLjFcIik7IC8vcmV0dXJucyBcInN0YXJ0ZWRcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNsb2NrfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5vZmYoJ3RpY2snLCB0aGlzLl9ib3VuZExvb3ApO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmcmVxdWVuY3knKTtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYm91bmRMb29wID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IEluZmluaXR5O1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ2xvY2s7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTaW1pbGFyIHRvIFRvbmUuVGltZWxpbmUsIGJ1dCBhbGwgZXZlbnRzIHJlcHJlc2VudFxuXHRcdCAqICAgICAgICAgaW50ZXJ2YWxzIHdpdGggYm90aCBcInRpbWVcIiBhbmQgXCJkdXJhdGlvblwiIHRpbWVzLiBUaGVcblx0XHQgKiAgICAgICAgIGV2ZW50cyBhcmUgcGxhY2VkIGluIGEgdHJlZSBzdHJ1Y3R1cmUgb3B0aW1pemVkXG5cdFx0ICogICAgICAgICBmb3IgcXVlcnlpbmcgYW4gaW50ZXJzZWN0aW9uIHBvaW50IHdpdGggdGhlIHRpbWVsaW5lXG5cdFx0ICogICAgICAgICBldmVudHMuIEludGVybmFsbHkgdXNlcyBhbiBbSW50ZXJ2YWwgVHJlZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW50ZXJ2YWxfdHJlZSlcblx0XHQgKiAgICAgICAgIHRvIHJlcHJlc2VudCB0aGUgZGF0YS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByb290IG5vZGUgb2YgdGhlIGludGV2YWwgdHJlZVxuXHRcdFx0ICogIEB0eXBlICB7SW50ZXJ2YWxOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yb290ID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBLZWVwIHRyYWNrIG9mIHRoZSBsZW5ndGggb2YgdGhlIHRpbWVsaW5lLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZW5ndGggPSAwO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuSW50ZXJ2YWxUaW1lbGluZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGV2ZW50IHRvIGFkZCB0byB0aGUgdGltZWxpbmUuIEFsbCBldmVudHMgbXVzdFxuXHRcdCAqICBoYXZlIGEgdGltZSBhbmQgZHVyYXRpb24gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCB0byBhZGQgdG8gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkludGVydmFsVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYoZXZlbnQudGltZSkgfHwgVG9uZS5pc1VuZGVmKGV2ZW50LmR1cmF0aW9uKSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuSW50ZXJ2YWxUaW1lbGluZTogZXZlbnRzIG11c3QgaGF2ZSB0aW1lIGFuZCBkdXJhdGlvbiBwYXJhbWV0ZXJzJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGV2ZW50LnRpbWUgPSBldmVudC50aW1lLnZhbHVlT2YoKTtcblx0ICAgICAgICB2YXIgbm9kZSA9IG5ldyBJbnRlcnZhbE5vZGUoZXZlbnQudGltZSwgZXZlbnQudGltZSArIGV2ZW50LmR1cmF0aW9uLCBldmVudCk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdCA9IG5vZGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5pbnNlcnQobm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2xlbmd0aCsrO1xuXHQgICAgICAgIC8vIFJlc3RydWN0dXJlIHRyZWUgdG8gYmUgYmFsYW5jZWRcblx0ICAgICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBub2RlLnVwZGF0ZUhlaWdodCgpO1xuXHQgICAgICAgICAgICBub2RlLnVwZGF0ZU1heCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWJhbGFuY2Uobm9kZSk7XG5cdCAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCB0byByZW1vdmUgZnJvbSB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHJldHVybiAge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2goZXZlbnQudGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSByZXN1bHRzW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKG5vZGUuZXZlbnQgPT09IGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlTm9kZShub2RlKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZW5ndGgtLTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkludGVydmFsVGltZWxpbmUjXG5cdFx0ICogIEBuYW1lIGxlbmd0aFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBldmVudHMgd2hvc2UgdGltZSB0aW1lIGlzIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIHRoaXMuZm9yRWFjaEZyb20oYWZ0ZXIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICB0aGlzLnJlbW92ZShldmVudCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSByb290IG5vZGUgYXMgdGhlIGdpdmVuIG5vZGVcblx0XHQgKiAgQHBhcmFtIHtJbnRlcnZhbE5vZGV9IG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3NldFJvb3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHRoaXMuX3Jvb3QgPSBub2RlO1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QucGFyZW50ID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlcGxhY2UgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIG5vZGUgaW4gdGhlIG5vZGUncyBwYXJlbnRcblx0XHQgKiAgd2l0aCB0aGUgcmVwbGFjZW1lbnQgbm9kZS5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICByZXBsYWNlbWVudFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcmVwbGFjZU5vZGVJblBhcmVudCA9IGZ1bmN0aW9uIChub2RlLCByZXBsYWNlbWVudCkge1xuXHQgICAgICAgIGlmIChub2RlLnBhcmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBpZiAobm9kZS5pc0xlZnRDaGlsZCgpKSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5sZWZ0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5yaWdodCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYmFsYW5jZShub2RlLnBhcmVudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0Um9vdChyZXBsYWNlbWVudCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgdGhlIG5vZGUgZnJvbSB0aGUgdHJlZSBhbmQgcmVwbGFjZSBpdCB3aXRoXG5cdFx0ICogIGEgc3VjY2Vzc29yIHdoaWNoIGZvbGxvd3MgdGhlIHNjaGVtYS5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcmVtb3ZlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgaWYgKG5vZGUubGVmdCA9PT0gbnVsbCAmJiBub2RlLnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgbnVsbCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlLnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgbm9kZS5sZWZ0KTtcblx0ICAgICAgICB9IGVsc2UgaWYgKG5vZGUubGVmdCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIG5vZGUucmlnaHQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBiYWxhbmNlID0gbm9kZS5nZXRCYWxhbmNlKCk7XG5cdCAgICAgICAgICAgIHZhciByZXBsYWNlbWVudCwgdGVtcDtcblx0ICAgICAgICAgICAgaWYgKGJhbGFuY2UgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLmxlZnQucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlcGxhY2VtZW50LnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnBhcmVudC5yaWdodCA9IHJlcGxhY2VtZW50LmxlZnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHJlcGxhY2VtZW50LnBhcmVudDtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5sZWZ0ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnJpZ2h0ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLnJpZ2h0LmxlZnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LmxlZnQgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IG5vZGUucmlnaHQubGVmdDtcblx0ICAgICAgICAgICAgICAgIHdoaWxlIChyZXBsYWNlbWVudC5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucGFyZW50ID0gcmVwbGFjZW1lbnQucGFyZW50O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucGFyZW50LmxlZnQgPSByZXBsYWNlbWVudC5yaWdodDtcblx0ICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudC5wYXJlbnQ7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5sZWZ0ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChub2RlLnBhcmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKG5vZGUuaXNMZWZ0Q2hpbGQoKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50LmxlZnQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQucmlnaHQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocmVwbGFjZW1lbnQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgcmVwbGFjZW1lbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWJhbGFuY2UodGVtcCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIG5vZGUuZGlzcG9zZSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSb3RhdGUgdGhlIHRyZWUgdG8gdGhlIGxlZnRcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcm90YXRlTGVmdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50O1xuXHQgICAgICAgIHZhciBpc0xlZnRDaGlsZCA9IG5vZGUuaXNMZWZ0Q2hpbGQoKTtcblx0ICAgICAgICAvLyBNYWtlIG5vZGUucmlnaHQgdGhlIG5ldyByb290IG9mIHRoaXMgc3ViIHRyZWUgKGluc3RlYWQgb2Ygbm9kZSlcblx0ICAgICAgICB2YXIgcGl2b3ROb2RlID0gbm9kZS5yaWdodDtcblx0ICAgICAgICBub2RlLnJpZ2h0ID0gcGl2b3ROb2RlLmxlZnQ7XG5cdCAgICAgICAgcGl2b3ROb2RlLmxlZnQgPSBub2RlO1xuXHQgICAgICAgIGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKGlzTGVmdENoaWxkKSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQubGVmdCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHBhcmVudC5yaWdodCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocGl2b3ROb2RlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJvdGF0ZSB0aGUgdHJlZSB0byB0aGUgcmlnaHRcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcm90YXRlUmlnaHQgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcblx0ICAgICAgICB2YXIgaXNMZWZ0Q2hpbGQgPSBub2RlLmlzTGVmdENoaWxkKCk7XG5cdCAgICAgICAgLy8gTWFrZSBub2RlLmxlZnQgdGhlIG5ldyByb290IG9mIHRoaXMgc3ViIHRyZWUgKGluc3RlYWQgb2Ygbm9kZSlcblx0ICAgICAgICB2YXIgcGl2b3ROb2RlID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgIG5vZGUubGVmdCA9IHBpdm90Tm9kZS5yaWdodDtcblx0ICAgICAgICBwaXZvdE5vZGUucmlnaHQgPSBub2RlO1xuXHQgICAgICAgIGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKGlzTGVmdENoaWxkKSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQubGVmdCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHBhcmVudC5yaWdodCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocGl2b3ROb2RlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEJhbGFuY2UgdGhlIEJTVFxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9yZWJhbGFuY2UgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHZhciBiYWxhbmNlID0gbm9kZS5nZXRCYWxhbmNlKCk7XG5cdCAgICAgICAgaWYgKGJhbGFuY2UgPiAxKSB7XG5cdCAgICAgICAgICAgIGlmIChub2RlLmxlZnQuZ2V0QmFsYW5jZSgpIDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlTGVmdChub2RlLmxlZnQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlUmlnaHQobm9kZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKGJhbGFuY2UgPCAtMSkge1xuXHQgICAgICAgICAgICBpZiAobm9kZS5yaWdodC5nZXRCYWxhbmNlKCkgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVSaWdodChub2RlLnJpZ2h0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZUxlZnQobm9kZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCBhbiBldmVudCB3aG9zZSB0aW1lIGFuZCBkdXJhdGlvbiBzcGFuIHRoZSBnaXZlIHRpbWUuIFdpbGxcblx0XHQgKiAgcmV0dXJuIHRoZSBtYXRjaCB3aG9zZSBcInRpbWVcIiB2YWx1ZSBpcyBjbG9zZXN0IHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R9ICBldmVudCAgVGhlIGV2ZW50IHRvIGFkZCB0byB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIFRoZSBldmVudCB3aGljaCBzcGFucyB0aGUgZGVzaXJlZCB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2godGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgICAgIHZhciBtYXggPSByZXN1bHRzWzBdO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdHNbaV0ubG93ID4gbWF4Lmxvdykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBtYXggPSByZXN1bHRzW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBtYXguZXZlbnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgYWxsTm9kZXMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC50cmF2ZXJzZShmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICAgICAgYWxsTm9kZXMucHVzaChub2RlKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldiA9IGFsbE5vZGVzW2ldLmV2ZW50O1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgaW4gd2hpY2ggdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgb3ZlcmxhcHMgd2l0aCB0aGUgdGltZSBhbmQgZHVyYXRpb24gdGltZSBvZiB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIG92ZXJsYXBwaW5nXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2godGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSByZXN1bHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXYgPSByZXN1bHRzW2ldLmV2ZW50O1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgaW4gd2hpY2ggdGhlIHRpbWUgaXMgZ3JlYXRlclxuXHRcdCAqICB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hGcm9tID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2hBZnRlcih0aW1lLCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IHJlc3VsdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldiA9IHJlc3VsdHNbaV0uZXZlbnQ7XG5cdCAgICAgICAgICAgICAgICBjYWxsYmFjayhldik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkludGVydmFsVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGFsbE5vZGVzID0gW107XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC50cmF2ZXJzZShmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICAgICAgYWxsTm9kZXMucHVzaChub2RlKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgYWxsTm9kZXNbaV0uZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBhbGxOb2RlcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcm9vdCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0SU5URVJWQUwgTk9ERSBIRUxQRVJcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJlcHJlc2VudHMgYSBub2RlIGluIHRoZSBiaW5hcnkgc2VhcmNoIHRyZWUsIHdpdGggdGhlIGFkZGl0aW9uXG5cdFx0ICogIG9mIGEgXCJoaWdoXCIgdmFsdWUgd2hpY2gga2VlcHMgdHJhY2sgb2YgdGhlIGhpZ2hlc3QgdmFsdWUgb2Zcblx0XHQgKiAgaXRzIGNoaWxkcmVuLlxuXHRcdCAqICBSZWZlcmVuY2VzOlxuXHRcdCAqICBodHRwczovL2Jyb29rbm92YWsud29yZHByZXNzLmNvbS8yMDEzLzEyLzA3L2F1Z21lbnRlZC1pbnRlcnZhbC10cmVlLWluLWMvXG5cdFx0ICogIGh0dHA6Ly93d3cubWlmLnZ1Lmx0L352YWxkYXMvQUxHT1JJVE1BSS9MSVRFUkFUVVJBL0Nvcm1lbi9Db3JtZW4ucGRmXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBsb3dcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBJbnRlcnZhbE5vZGUgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBldmVudCkge1xuXHQgICAgICAgIC8vdGhlIGV2ZW50IGNvbnRhaW5lclxuXHQgICAgICAgIHRoaXMuZXZlbnQgPSBldmVudDtcblx0ICAgICAgICAvL3RoZSBsb3cgdmFsdWVcblx0ICAgICAgICB0aGlzLmxvdyA9IGxvdztcblx0ICAgICAgICAvL3RoZSBoaWdoIHZhbHVlXG5cdCAgICAgICAgdGhpcy5oaWdoID0gaGlnaDtcblx0ICAgICAgICAvL3RoZSBoaWdoIHZhbHVlIGZvciB0aGlzIGFuZCBhbGwgY2hpbGQgbm9kZXNcblx0ICAgICAgICB0aGlzLm1heCA9IHRoaXMuaGlnaDtcblx0ICAgICAgICAvL3RoZSBub2RlcyB0byB0aGUgbGVmdFxuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBudWxsO1xuXHQgICAgICAgIC8vdGhlIG5vZGVzIHRvIHRoZSByaWdodFxuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICAvL3RoZSBwYXJlbnQgbm9kZVxuXHQgICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblx0ICAgICAgICAvL3RoZSBudW1iZXIgb2YgY2hpbGQgbm9kZXNcblx0ICAgICAgICB0aGlzLmhlaWdodCA9IDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEluc2VydCBhIG5vZGUgaW50byB0aGUgY29ycmVjdCBzcG90IGluIHRoZSB0cmVlXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAobm9kZS5sb3cgPD0gdGhpcy5sb3cpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubGVmdCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbm9kZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGVmdC5pbnNlcnQobm9kZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmlnaHQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodCA9IG5vZGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC5pbnNlcnQobm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZWFyY2ggdGhlIHRyZWUgZm9yIG5vZGVzIHdoaWNoIG92ZXJsYXBcblx0XHQgKiAgd2l0aCB0aGUgZ2l2ZW4gcG9pbnRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgcG9pbnQgIFRoZSBwb2ludCB0byBxdWVyeVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIHJlc3VsdHMgIFRoZSBhcnJheSB0byBwdXQgdGhlIHJlc3VsdHNcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuc2VhcmNoID0gZnVuY3Rpb24gKHBvaW50LCByZXN1bHRzKSB7XG5cdCAgICAgICAgLy8gSWYgcCBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIHJpZ2h0bW9zdCBwb2ludCBvZiBhbnkgaW50ZXJ2YWxcblx0ICAgICAgICAvLyBpbiB0aGlzIG5vZGUgYW5kIGFsbCBjaGlsZHJlbiwgdGhlcmUgd29uJ3QgYmUgYW55IG1hdGNoZXMuXG5cdCAgICAgICAgaWYgKHBvaW50ID4gdGhpcy5tYXgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBTZWFyY2ggbGVmdCBjaGlsZHJlblxuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5sZWZ0LnNlYXJjaChwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIENoZWNrIHRoaXMgbm9kZVxuXHQgICAgICAgIGlmICh0aGlzLmxvdyA8PSBwb2ludCAmJiB0aGlzLmhpZ2ggPiBwb2ludCkge1xuXHQgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIElmIHAgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIHRpbWUgb2YgdGhpcyBpbnRlcnZhbCxcblx0ICAgICAgICAvLyB0aGVuIGl0IGNhbid0IGJlIGluIGFueSBjaGlsZCB0byB0aGUgcmlnaHQuXG5cdCAgICAgICAgaWYgKHRoaXMubG93ID4gcG9pbnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBTZWFyY2ggcmlnaHQgY2hpbGRyZW5cblx0ICAgICAgICBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0LnNlYXJjaChwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZWFyY2ggdGhlIHRyZWUgZm9yIG5vZGVzIHdoaWNoIGFyZSBsZXNzXG5cdFx0ICogIHRoYW4gdGhlIGdpdmVuIHBvaW50XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHBvaW50ICBUaGUgcG9pbnQgdG8gcXVlcnlcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICByZXN1bHRzICBUaGUgYXJyYXkgdG8gcHV0IHRoZSByZXN1bHRzXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnNlYXJjaEFmdGVyID0gZnVuY3Rpb24gKHBvaW50LCByZXN1bHRzKSB7XG5cdCAgICAgICAgLy8gQ2hlY2sgdGhpcyBub2RlXG5cdCAgICAgICAgaWYgKHRoaXMubG93ID49IHBvaW50KSB7XG5cdCAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5sZWZ0LnNlYXJjaEFmdGVyKHBvaW50LCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBzZWFyY2ggdGhlIHJpZ2h0IHNpZGVcblx0ICAgICAgICBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0LnNlYXJjaEFmdGVyKHBvaW50LCByZXN1bHRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludm9rZSB0aGUgY2FsbGJhY2sgb24gdGhpcyBlbGVtZW50IGFuZCBib3RoIGl0J3MgYnJhbmNoZXNcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFja1xuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5sZWZ0LnRyYXZlcnNlKGNhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC50cmF2ZXJzZShjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVcGRhdGUgdGhlIGhlaWdodCBvZiB0aGUgbm9kZVxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS51cGRhdGVIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCAmJiB0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gTWF0aC5tYXgodGhpcy5sZWZ0LmhlaWdodCwgdGhpcy5yaWdodC5oZWlnaHQpICsgMTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJpZ2h0LmhlaWdodCArIDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmxlZnQuaGVpZ2h0ICsgMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmhlaWdodCA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVcGRhdGUgdGhlIGhlaWdodCBvZiB0aGUgbm9kZVxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS51cGRhdGVNYXggPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5tYXggPSB0aGlzLmhpZ2g7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLm1heCA9IE1hdGgubWF4KHRoaXMubWF4LCB0aGlzLmxlZnQubWF4KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5tYXggPSBNYXRoLm1heCh0aGlzLm1heCwgdGhpcy5yaWdodC5tYXgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGJhbGFuY2UgaXMgaG93IHRoZSBsZWFmcyBhcmUgZGlzdHJpYnV0ZWQgb24gdGhlIG5vZGVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIE5lZ2F0aXZlIG51bWJlcnMgYXJlIGJhbGFuY2VkIHRvIHRoZSByaWdodFxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5nZXRCYWxhbmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBiYWxhbmNlID0gMDtcblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsICYmIHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgYmFsYW5jZSA9IHRoaXMubGVmdC5oZWlnaHQgLSB0aGlzLnJpZ2h0LmhlaWdodDtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBiYWxhbmNlID0gdGhpcy5sZWZ0LmhlaWdodCArIDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGJhbGFuY2UgPSAtKHRoaXMucmlnaHQuaGVpZ2h0ICsgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBiYWxhbmNlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGlzIG5vZGUgaXMgdGhlIGxlZnQgY2hpbGRcblx0XHQgKiAgb2YgaXRzIHBhcmVudFxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5pc0xlZnRDaGlsZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgIT09IG51bGwgJiYgdGhpcy5wYXJlbnQubGVmdCA9PT0gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZ2V0L3NldCB0aGUgbGVmdCBub2RlXG5cdFx0ICogIEB0eXBlIHtJbnRlcnZhbE5vZGV9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxOb2RlLnByb3RvdHlwZSwgJ2xlZnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZWZ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZWZ0ID0gbm9kZTtcblx0ICAgICAgICAgICAgaWYgKG5vZGUgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gdGhpcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZUhlaWdodCgpO1xuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZU1heCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGdldC9zZXQgdGhlIHJpZ2h0IG5vZGVcblx0XHQgKiAgQHR5cGUge0ludGVydmFsTm9kZX1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRlcnZhbE5vZGUucHJvdG90eXBlLCAncmlnaHQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yaWdodDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmlnaHQgPSBub2RlO1xuXHQgICAgICAgICAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlSGVpZ2h0KCk7XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlTWF4KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgbnVsbCBvdXQgcmVmZXJlbmNlcy5cblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZXZlbnQgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEVORCBJTlRFUlZBTCBOT0RFIEhFTFBFUlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICByZXR1cm4gVG9uZS5JbnRlcnZhbFRpbWVsaW5lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVGlja3MgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgVGltZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBUb25lLlRpY2tzIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIG9yIHdpdGhvdXQgdGhlIGBuZXdgIGtleXdvcmQuIFRvbmUuVGlja3MgY2FuIGJlIHBhc3NlZFxuXHRcdCAqICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIG9mIGFueSBtZXRob2Qgd2hpY2ggdGFrZXMgdGltZSBhcyBhbiBhcmd1bWVudC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRyYW5zcG9ydFRpbWV9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdCA9IFRvbmUuVGlja3MoXCI0blwiKTsvL2EgcXVhcnRlciBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuVGlja3MpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnRUaW1lLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpY2tzKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpY2tzLCBUb25lLlRyYW5zcG9ydFRpbWUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX2RlZmF1bHRVbml0cyA9ICdpJztcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgY3VycmVudCB0aW1lIGluIHRoZSBnaXZlbiB1bml0c1xuXHRcdCAqIEByZXR1cm4ge1RpY2tzfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fbm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC50aWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2dldFBQUSgpICogYmVhdHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gc2Vjb25kcyAvICg2MCAvIHRoaXMuX2dldEJwbSgpKSAqIHRoaXMuX2dldFBQUSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiB0aWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSAvIHRoaXMuX2dldFBQUSgpICogKDYwIC8gdGhpcy5fZ2V0QnBtKCkpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpY2tzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVHJhbnNwb3J0RXZlbnQgaXMgYW4gaW50ZXJuYWwgY2xhc3MgdXNlZCBieSAoVG9uZS5UcmFuc3BvcnQpW1RyYW5zcG9ydF1cblx0XHQgKiAgICAgICAgIHRvIHNjaGVkdWxlIGV2ZW50cy4gRG8gbm8gaW52b2tlIHRoaXMgY2xhc3MgZGlyZWN0bHksIGl0IGlzXG5cdFx0ICogICAgICAgICBoYW5kbGVkIGZyb20gd2l0aGluIFRvbmUuVHJhbnNwb3J0LlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQgPSBmdW5jdGlvbiAoVHJhbnNwb3J0LCBvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlRyYW5zcG9ydEV2ZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBSZWZlcmVuY2UgdG8gdGhlIFRyYW5zcG9ydCB0aGF0IGNyZWF0ZWQgaXRcblx0XHRcdCAqIEB0eXBlIHtUb25lLlRyYW5zcG9ydH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0ID0gVHJhbnNwb3J0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHVuaXF1ZSBpZCBvZiB0aGUgZXZlbnRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlkID0gVG9uZS5UcmFuc3BvcnRFdmVudC5fZXZlbnRJZCsrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHRpbWUgdGhlIGV2ZW50IHN0YXJ0c1xuXHRcdFx0ICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy50aW1lID0gVG9uZS5UaWNrcyhvcHRpb25zLnRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBJZiB0aGUgZXZlbnQgc2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgYmVpbmcgY3JlYXRlZC5cblx0XHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uY2UgPSBvcHRpb25zLm9uY2U7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRFdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29uY2UnOiBmYWxzZSxcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3Bcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDdXJyZW50IElEIGNvdW50ZXJcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5fZXZlbnRJZCA9IDA7XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2UgdGhlIGV2ZW50IGNhbGxiYWNrLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFRoZSBBdWRpb0NvbnRleHQgdGltZSBpbiBzZWNvbmRzIG9mIHRoZSBldmVudFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5wcm90b3R5cGUuaW52b2tlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5jYWxsYmFjaykge1xuXHQgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fb25jZSAmJiB0aGlzLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5pZCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydEV2ZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy50aW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnRFdmVudDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50IGlzIGFuIGludGVybmFsIGNsYXNzIHVzZWQgYnkgVG9uZS5UcmFuc3BvcnRcblx0XHQgKiAgICAgICAgIHRvIHNjaGVkdWxlIHJlcGVhdCBldmVudHMuIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRyYW5zcG9ydEV2ZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCA9IGZ1bmN0aW9uIChUcmFuc3BvcnQsIG9wdGlvbnMpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydEV2ZW50LmNhbGwodGhpcywgVHJhbnNwb3J0LCBvcHRpb25zKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogV2hlbiB0aGUgZXZlbnQgc2hvdWxkIHN0b3AgcmVwZWF0aW5nXG5cdFx0XHQgKiBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kdXJhdGlvbiA9IFRvbmUuVGlja3Mob3B0aW9ucy5kdXJhdGlvbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgaW50ZXJ2YWwgb2YgdGhlIHJlcGVhdGVkIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBUb25lLlRpY2tzKG9wdGlvbnMuaW50ZXJ2YWwpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIElEIG9mIHRoZSBjdXJyZW50IHRpbWVsaW5lIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2N1cnJlbnRJZCA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIElEIG9mIHRoZSBuZXh0IHRpbWVsaW5lIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25leHRJZCA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICAqIFRoZSB0aW1lIG9mIHRoZSBuZXh0IGV2ZW50XG5cdFx0XHQgICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICAqIEBwcml2YXRlXG5cdFx0XHQgICovXG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSB0aGlzLnRpbWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBhIHJlZmVyZW5jZSB0byB0aGUgYm91bmQgc3RhcnQgbWV0aG9kXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYm91bmRSZXN0YXJ0ID0gdGhpcy5fcmVzdGFydC5iaW5kKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0Lm9uKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9ib3VuZFJlc3RhcnQpO1xuXHQgICAgICAgIHRoaXMuX3Jlc3RhcnQoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LCBUb25lLlRyYW5zcG9ydEV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZHVyYXRpb24nOiBJbmZpbml0eSxcblx0ICAgICAgICAnaW50ZXJ2YWwnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlIHRoZSBjYWxsYmFjay4gUmV0dXJucyB0aGUgdGljayB0aW1lIHdoaWNoXG5cdFx0ICogdGhlIG5leHQgZXZlbnQgc2hvdWxkIGJlIHNjaGVkdWxlZCBhdC5cblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWUgIFRoZSBBdWRpb0NvbnRleHQgdGltZSBpbiBzZWNvbmRzIG9mIHRoZSBldmVudFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuaW52b2tlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL2NyZWF0ZSBtb3JlIGV2ZW50cyBpZiBuZWNlc3Nhcnlcblx0ICAgICAgICB0aGlzLl9jcmVhdGVFdmVudHModGltZSk7XG5cdCAgICAgICAgLy9jYWxsIHRoZSBzdXBlciBjbGFzc1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmludm9rZS5jYWxsKHRoaXMsIHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFB1c2ggbW9yZSBldmVudHMgb250byB0aGUgdGltZWxpbmUgdG8ga2VlcCB1cCB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGltZWxpbmVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuX2NyZWF0ZUV2ZW50cyA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy8gc2NoZWR1bGUgdGhlIG5leHQgZXZlbnRcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLlRyYW5zcG9ydC5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAodGlja3MgPj0gdGhpcy50aW1lICYmIHRpY2tzID49IHRoaXMuX25leHRUaWNrICYmIHRoaXMuX25leHRUaWNrICsgdGhpcy5faW50ZXJ2YWwgPCB0aGlzLnRpbWUgKyB0aGlzLmR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX25leHRUaWNrICs9IHRoaXMuX2ludGVydmFsO1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJyZW50SWQgPSB0aGlzLl9uZXh0SWQ7XG5cdCAgICAgICAgICAgIHRoaXMuX25leHRJZCA9IHRoaXMuVHJhbnNwb3J0LnNjaGVkdWxlT25jZSh0aGlzLmludm9rZS5iaW5kKHRoaXMpLCBUb25lLlRpY2tzKHRoaXMuX25leHRUaWNrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFB1c2ggbW9yZSBldmVudHMgb250byB0aGUgdGltZWxpbmUgdG8ga2VlcCB1cCB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGltZWxpbmVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuX3Jlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX2N1cnJlbnRJZCk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5fbmV4dElkKTtcblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IHRoaXMudGltZTtcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLlRyYW5zcG9ydC5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAodGlja3MgPiB0aGlzLnRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSB0aGlzLnRpbWUgKyBNYXRoLmNlaWwoKHRpY2tzIC0gdGhpcy50aW1lKSAvIHRoaXMuX2ludGVydmFsKSAqIHRoaXMuX2ludGVydmFsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jdXJyZW50SWQgPSB0aGlzLlRyYW5zcG9ydC5zY2hlZHVsZU9uY2UodGhpcy5pbnZva2UuYmluZCh0aGlzKSwgVG9uZS5UaWNrcyh0aGlzLl9uZXh0VGljaykpO1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrICs9IHRoaXMuX2ludGVydmFsO1xuXHQgICAgICAgIHRoaXMuX25leHRJZCA9IHRoaXMuVHJhbnNwb3J0LnNjaGVkdWxlT25jZSh0aGlzLmludm9rZS5iaW5kKHRoaXMpLCBUb25lLlRpY2tzKHRoaXMuX25leHRUaWNrKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX2N1cnJlbnRJZCk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5fbmV4dElkKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5vZmYoJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX2JvdW5kUmVzdGFydCk7XG5cdCAgICAgICAgdGhpcy5fYm91bmRDcmVhdGVFdmVudHMgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmR1cmF0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVHJhbnNwb3J0IGZvciB0aW1pbmcgbXVzaWNhbCBldmVudHMuXG5cdFx0ICogICAgICAgICAgU3VwcG9ydHMgdGVtcG8gY3VydmVzIGFuZCB0aW1lIGNoYW5nZXMuIFVubGlrZSBicm93c2VyLWJhc2VkIHRpbWluZyAoc2V0SW50ZXJ2YWwsIHJlcXVlc3RBbmltYXRpb25GcmFtZSlcblx0XHQgKiAgICAgICAgICBUb25lLlRyYW5zcG9ydCB0aW1pbmcgZXZlbnRzIHBhc3MgaW4gdGhlIGV4YWN0IHRpbWUgb2YgdGhlIHNjaGVkdWxlZCBldmVudFxuXHRcdCAqICAgICAgICAgIGluIHRoZSBhcmd1bWVudCBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uIFBhc3MgdGhhdCB0aW1lIHZhbHVlIHRvIHRoZSBvYmplY3Rcblx0XHQgKiAgICAgICAgICB5b3UncmUgc2NoZWR1bGluZy4gPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBBIHNpbmdsZSB0cmFuc3BvcnQgaXMgY3JlYXRlZCBmb3IgeW91IHdoZW4gdGhlIGxpYnJhcnkgaXMgaW5pdGlhbGl6ZWQuXG5cdFx0ICogICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBUaGUgdHJhbnNwb3J0IGVtaXRzIHRoZSBldmVudHM6IFwic3RhcnRcIiwgXCJzdG9wXCIsIFwicGF1c2VcIiwgYW5kIFwibG9vcFwiIHdoaWNoIGFyZVxuXHRcdCAqICAgICAgICAgIGNhbGxlZCB3aXRoIHRoZSB0aW1lIG9mIHRoYXQgZXZlbnQgYXMgdGhlIGFyZ3VtZW50LlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JlcGVhdGVkIGV2ZW50IGV2ZXJ5IDh0aCBub3RlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSB0aW1lXG5cdFx0ICogfSwgXCI4blwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NjaGVkdWxlIGFuIGV2ZW50IG9uIHRoZSAxNnRoIG1lYXN1cmVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdC8vZG8gc29tZXRoaW5nIHdpdGggdGhlIHRpbWVcblx0XHQgKiB9LCBcIjE2OjA6MFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5jYWxsKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8vXHRMT09QSU5HXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0SWYgdGhlIHRyYW5zcG9ydCBsb29wcyBvciBub3QuXG5cdFx0XHRcdCAqICBAdHlwZSB7Ym9vbGVhbn1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMubG9vcCA9IGZhbHNlO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogXHRUaGUgbG9vcCBzdGFydCBwb3NpdGlvbiBpbiB0aWNrc1xuXHRcdFx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IDA7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdFRoZSBsb29wIGVuZCBwb3NpdGlvbiBpbiB0aWNrc1xuXHRcdFx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSAwO1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0Q0xPQ0svVEVNUE9cblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFB1bHNlcyBwZXIgcXVhcnRlciBpcyB0aGUgbnVtYmVyIG9mIHRpY2tzIHBlciBxdWFydGVyIG5vdGUuXG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9wcHEgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy5QUFE7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgd2F0Y2hlcyB0aGUgbWFpbiBvc2NpbGxhdG9yIGZvciB0aW1pbmcgdGlja3Ncblx0XHRcdFx0ICogIGluaXRpYWxseSBzdGFydHMgYXQgMTIwYnBtXG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKiAgQHR5cGUge1RvbmUuQ2xvY2t9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9jbG9jayA9IG5ldyBUb25lLkNsb2NrKHtcblx0ICAgICAgICAgICAgICAgICdjYWxsYmFjayc6IHRoaXMuX3Byb2Nlc3NUaWNrLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICAgICAnZnJlcXVlbmN5JzogMFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fYmluZENsb2NrRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIEJlYXRzIFBlciBNaW51dGUgb2YgdGhlIFRyYW5zcG9ydC5cblx0XHRcdFx0ICogIEB0eXBlIHtCUE19XG5cdFx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgPSA4MDtcblx0XHRcdFx0ICogLy9yYW1wIHRoZSBicG0gdG8gMTIwIG92ZXIgMTAgc2Vjb25kc1xuXHRcdFx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0ucmFtcFRvKDEyMCwgMTApO1xuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5icG0gPSB0aGlzLl9jbG9jay5mcmVxdWVuY3k7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLl90b1VuaXRzID0gdGhpcy5fdG9Vbml0cy5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLmJwbS5fZnJvbVVuaXRzID0gdGhpcy5fZnJvbVVuaXRzLmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLnVuaXRzID0gVG9uZS5UeXBlLkJQTTtcblx0ICAgICAgICAgICAgdGhpcy5icG0udmFsdWUgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy5icG07XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdicG0nKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgdGltZSBzaWduYXR1cmUsIG9yIG1vcmUgYWNjdXJhdGVseSB0aGUgbnVtZXJhdG9yXG5cdFx0XHRcdCAqICBvZiB0aGUgdGltZSBzaWduYXR1cmUgb3ZlciBhIGRlbm9taW5hdG9yIG9mIDQuXG5cdFx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVTaWduYXR1cmUgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy50aW1lU2lnbmF0dXJlO1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0VElNRUxJTkUgRVZFTlRTXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBBbGwgdGhlIGV2ZW50cyBpbiBhbiBvYmplY3QgdG8ga2VlcCB0cmFjayBieSBJRFxuXHRcdFx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSB7fTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0VGhlIHNjaGVkdWxlZCBldmVudHMuXG5cdFx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgUmVwZWF0ZWQgZXZlbnRzXG5cdFx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMgPSBuZXcgVG9uZS5JbnRlcnZhbFRpbWVsaW5lKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgQWxsIG9mIHRoZSBzeW5jZWQgU2lnbmFsc1xuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3N5bmNlZFNpZ25hbHMgPSBbXTtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdFNXSU5HXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgc3ViZGl2aXNpb24gb2YgdGhlIHN3aW5nXG5cdFx0XHRcdCAqICBAdHlwZSAge1RpY2tzfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nVGlja3MgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy5QUFEgLyAyO1xuXHQgICAgICAgICAgICAvLzhuXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHN3aW5nIGFtb3VudFxuXHRcdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nQW1vdW50ID0gMDtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0LCBUb25lLkVtaXR0ZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2JwbSc6IDEyMCxcblx0ICAgICAgICAnc3dpbmcnOiAwLFxuXHQgICAgICAgICdzd2luZ1N1YmRpdmlzaW9uJzogJzhuJyxcblx0ICAgICAgICAndGltZVNpZ25hdHVyZSc6IDQsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAnNG0nLFxuXHQgICAgICAgICdQUFEnOiAxOTJcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VElDS1Ncblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBjYWxsZWQgb24gZXZlcnkgdGlja1xuXHRcdCAqICBAcGFyYW0gICB7bnVtYmVyfSB0aWNrVGltZSBjbG9jayByZWxhdGl2ZSB0aWNrIHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fcHJvY2Vzc1RpY2sgPSBmdW5jdGlvbiAodGlja1RpbWUsIHRpY2tzKSB7XG5cdCAgICAgICAgLy9oYW5kbGUgc3dpbmdcblx0ICAgICAgICBpZiAodGhpcy5fc3dpbmdBbW91bnQgPiAwICYmIHRpY2tzICUgdGhpcy5fcHBxICE9PSAwICYmIC8vbm90IG9uIGEgZG93bmJlYXRcblx0ICAgICAgICAgICAgdGlja3MgJSAodGhpcy5fc3dpbmdUaWNrcyAqIDIpICE9PSAwKSB7XG5cdCAgICAgICAgICAgIC8vYWRkIHNvbWUgc3dpbmdcblx0ICAgICAgICAgICAgdmFyIHByb2dyZXNzID0gdGlja3MgJSAodGhpcy5fc3dpbmdUaWNrcyAqIDIpIC8gKHRoaXMuX3N3aW5nVGlja3MgKiAyKTtcblx0ICAgICAgICAgICAgdmFyIGFtb3VudCA9IE1hdGguc2luKHByb2dyZXNzICogTWF0aC5QSSkgKiB0aGlzLl9zd2luZ0Ftb3VudDtcblx0ICAgICAgICAgICAgdGlja1RpbWUgKz0gVG9uZS5UaWNrcyh0aGlzLl9zd2luZ1RpY2tzICogMiAvIDMpLnRvU2Vjb25kcygpICogYW1vdW50O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2RvIHRoZSBsb29wIHRlc3Rcblx0ICAgICAgICBpZiAodGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgIGlmICh0aWNrcyA+PSB0aGlzLl9sb29wRW5kKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvb3BFbmQnLCB0aWNrVGltZSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jbG9jay5zZXRUaWNrc0F0VGltZSh0aGlzLl9sb29wU3RhcnQsIHRpY2tUaW1lKTtcblx0ICAgICAgICAgICAgICAgIHRpY2tzID0gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb29wU3RhcnQnLCB0aWNrVGltZSwgdGhpcy5fY2xvY2suZ2V0U2Vjb25kc0F0VGltZSh0aWNrVGltZSkpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb29wJywgdGlja1RpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaW52b2tlIHRoZSB0aW1lbGluZSBldmVudHMgc2NoZWR1bGVkIG9uIHRoaXMgdGlja1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLmZvckVhY2hBdFRpbWUodGlja3MsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5pbnZva2UodGlja1RpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRTQ0hFRFVMQUJMRSBFVkVOVFNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZSBhbiBldmVudCBhbG9uZyB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGF0IHRoZSB0aW1lLlxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9ICB0aW1lIFRoZSB0aW1lIHRvIGludm9rZSB0aGUgY2FsbGJhY2sgYXQuXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gVGhlIGlkIG9mIHRoZSBldmVudCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgY2FuY2VsaW5nIHRoZSBldmVudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgdGhlIGNhbGxiYWNrIHdoZW4gdGhlIFRyYW5zcG9ydCByZWFjaGVzIHRoZSBkZXNpcmVkIHRpbWVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdGVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSk7XG5cdFx0ICogfSwgXCIxMjhpXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aW1lKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFRvbmUuVHJhbnNwb3J0RXZlbnQodGhpcywge1xuXHQgICAgICAgICAgICAndGltZSc6IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKSxcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogY2FsbGJhY2tcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYWRkRXZlbnQoZXZlbnQsIHRoaXMuX3RpbWVsaW5lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYSByZXBlYXRlZCBldmVudCBhbG9uZyB0aGUgdGltZWxpbmUuIFRoZSBldmVudCB3aWxsIGZpcmVcblx0XHQgKiAgYXQgdGhlIGBpbnRlcnZhbGAgc3RhcnRpbmcgYXQgdGhlIGBzdGFydFRpbWVgIGFuZCBmb3IgdGhlIHNwZWNpZmllZFxuXHRcdCAqICBgZHVyYXRpb25gLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRvIGludm9rZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgaW50ZXJ2YWwgICBUaGUgZHVyYXRpb24gYmV0d2VlbiBzdWNjZXNzaXZlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLiBNdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lPX0gICAgc3RhcnRUaW1lICBXaGVuIGFsb25nIHRoZSB0aW1lbGluZSB0aGUgZXZlbnRzIHNob3VsZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IGJlaW5nIGludm9rZWQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2R1cmF0aW9uPUluZmluaXR5XSBIb3cgbG9uZyB0aGUgZXZlbnQgc2hvdWxkIHJlcGVhdC5cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gICAgVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQuIFVzZSB0aGlzIHRvIGNhbmNlbFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGV2ZW50LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBjYWxsYmFjayBpbnZva2VkIGV2ZXJ5IGVpZ2h0aCBub3RlIGFmdGVyIHRoZSBmaXJzdCBtZWFzdXJlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQoY2FsbGJhY2ssIFwiOG5cIiwgXCIxbVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zY2hlZHVsZVJlcGVhdCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgaW50ZXJ2YWwsIHN0YXJ0VGltZSwgZHVyYXRpb24pIHtcblx0ICAgICAgICB2YXIgZXZlbnQgPSBuZXcgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCh0aGlzLCB7XG5cdCAgICAgICAgICAgICdjYWxsYmFjayc6IGNhbGxiYWNrLFxuXHQgICAgICAgICAgICAnaW50ZXJ2YWwnOiBUb25lLlRpbWUoaW50ZXJ2YWwpLFxuXHQgICAgICAgICAgICAndGltZSc6IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpLFxuXHQgICAgICAgICAgICAnZHVyYXRpb24nOiBUb25lLlRpbWUoVG9uZS5kZWZhdWx0QXJnKGR1cmF0aW9uLCBJbmZpbml0eSkpXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9raWNrIGl0IG9mZiBpZiB0aGUgVHJhbnNwb3J0IGlzIHN0YXJ0ZWRcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYWRkRXZlbnQoZXZlbnQsIHRoaXMuX3JlcGVhdGVkRXZlbnRzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYW4gZXZlbnQgdGhhdCB3aWxsIGJlIHJlbW92ZWQgYWZ0ZXIgaXQgaXMgaW52b2tlZC5cblx0XHQgKiAgTm90ZSB0aGF0IGlmIHRoZSBnaXZlbiB0aW1lIGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCB0cmFuc3BvcnQgdGltZSxcblx0XHQgKiAgdGhlIGV2ZW50IHdpbGwgYmUgaW52b2tlZCBpbW1lZGlhdGVseS5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBvbmNlLlxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IHRpbWUgVGhlIHRpbWUgdGhlIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkLlxuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfSBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudC5cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zY2hlZHVsZU9uY2UgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRpbWUpIHtcblx0ICAgICAgICB2YXIgZXZlbnQgPSBuZXcgVG9uZS5UcmFuc3BvcnRFdmVudCh0aGlzLCB7XG5cdCAgICAgICAgICAgICd0aW1lJzogVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpLFxuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiBjYWxsYmFjayxcblx0ICAgICAgICAgICAgJ29uY2UnOiB0cnVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEV2ZW50KGV2ZW50LCB0aGlzLl90aW1lbGluZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFyIHRoZSBwYXNzZWQgaW4gZXZlbnQgaWQgZnJvbSB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGV2ZW50SWQgVGhlIGlkIG9mIHRoZSBldmVudC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZXZlbnRJZCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zY2hlZHVsZWRFdmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnRJZCkpIHtcblx0ICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLl9zY2hlZHVsZWRFdmVudHNbZXZlbnRJZC50b1N0cmluZygpXTtcblx0ICAgICAgICAgICAgaXRlbS50aW1lbGluZS5yZW1vdmUoaXRlbS5ldmVudCk7XG5cdCAgICAgICAgICAgIGl0ZW0uZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICBkZWxldGUgdGhpcy5fc2NoZWR1bGVkRXZlbnRzW2V2ZW50SWQudG9TdHJpbmcoKV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEFkZCBhbiBldmVudCB0byB0aGUgY29ycmVjdCB0aW1lbGluZS4gS2VlcCB0cmFjayBvZiB0aGVcblx0XHQgKiB0aW1lbGluZSBpdCB3YXMgYWRkZWQgdG8uXG5cdFx0ICogQHBhcmFtIHtUb25lLlRyYW5zcG9ydEV2ZW50fVx0ZXZlbnRcblx0XHQgKiBAcGFyYW0ge1RvbmUuVGltZWxpbmV9IHRpbWVsaW5lXG5cdFx0ICogQHJldHVybnMge051bWJlcn0gdGhlIGV2ZW50IGlkIHdoaWNoIHdhcyBqdXN0IGFkZGVkXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fYWRkRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIHRpbWVsaW5lKSB7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzW2V2ZW50LmlkLnRvU3RyaW5nKCldID0ge1xuXHQgICAgICAgICAgICAnZXZlbnQnOiBldmVudCxcblx0ICAgICAgICAgICAgJ3RpbWVsaW5lJzogdGltZWxpbmVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRpbWVsaW5lLmFkZChldmVudCk7XG5cdCAgICAgICAgcmV0dXJuIGV2ZW50LmlkO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgc2NoZWR1bGVkIGV2ZW50cyBmcm9tIHRoZSB0aW1lbGluZSBhZnRlclxuXHRcdCAqICB0aGUgZ2l2ZW4gdGltZS4gUmVwZWF0ZWQgZXZlbnRzIHdpbGwgYmUgcmVtb3ZlZFxuXHRcdCAqICBpZiB0aGVpciBzdGFydFRpbWUgaXMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBbYWZ0ZXI9MF0gQ2xlYXIgYWxsIGV2ZW50cyBhZnRlclxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHRpbWUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIGFmdGVyID0gVG9uZS5kZWZhdWx0QXJnKGFmdGVyLCAwKTtcblx0ICAgICAgICBhZnRlciA9IHRoaXMudG9UaWNrcyhhZnRlcik7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuZm9yRWFjaEZyb20oYWZ0ZXIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICB0aGlzLmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U1RBUlQvU1RPUC9QQVVTRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEJpbmQgc3RhcnQvc3RvcC9wYXVzZSBldmVudHMgZnJvbSB0aGUgY2xvY2sgYW5kIGVtaXQgdGhlbS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fYmluZENsb2NrRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdzdGFydCcsIGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5UaWNrcyhvZmZzZXQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdzdG9wJywgZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgdGltZSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbigncGF1c2UnLCBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3BhdXNlJywgdGltZSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiLCBcInN0b3BwZWRcIiwgb3IgXCJwYXVzZWRcIlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLmdldFN0YXRlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSB0cmFuc3BvcnQgYW5kIGFsbCBzb3VyY2VzIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIHRyYW5zcG9ydCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWU9fSBvZmZzZXQgVGhlIHRpbWVsaW5lIG9mZnNldCB0byBzdGFydCB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgaW4gb25lIHNlY29uZCBzdGFydGluZyBhdCBiZWdpbm5pbmcgb2YgdGhlIDV0aCBtZWFzdXJlLlxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KFwiKzFcIiwgXCI0OjA6MFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBjbG9ja1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChvZmZzZXQpKSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9UaWNrcyhvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jbG9jay5zdGFydCh0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSB0cmFuc3BvcnQgYW5kIGFsbCBzb3VyY2VzIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIHRyYW5zcG9ydCBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RvcCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhdXNlIHRoZSB0cmFuc3BvcnQgYW5kIGFsbCBzb3VyY2VzIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5wYXVzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUb2dnbGUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRyYW5zcG9ydC4gSWYgaXQgaXNcblx0XHQgKiBzdGFydGVkLCBpdCB3aWxsIHN0b3AgaXQsIG90aGVyd2lzZSBpdCB3aWxsIHN0YXJ0IHRoZSBUcmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgVGhlIHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnR9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9jbG9jay5nZXRTdGF0ZUF0VGltZSh0aW1lKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U0VUVEVSUy9HRVRURVJTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgc2lnbmF0dXJlIGFzIGp1c3QgdGhlIG51bWVyYXRvciBvdmVyIDQuXG5cdFx0ICogIEZvciBleGFtcGxlIDQvNCB3b3VsZCBiZSBqdXN0IDQgYW5kIDYvOCB3b3VsZCBiZSAzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ8QXJyYXl9XG5cdFx0ICogIEBuYW1lIHRpbWVTaWduYXR1cmVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NvbW1vbiB0aW1lXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZSA9IDQ7XG5cdFx0ICogLy8gNy84XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZSA9IFs3LCA4XTtcblx0XHQgKiAvL3RoaXMgd2lsbCBiZSByZWR1Y2VkIHRvIGEgc2luZ2xlIG51bWJlclxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmU7IC8vcmV0dXJucyAzLjVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICd0aW1lU2lnbmF0dXJlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZVNpZ25hdHVyZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRpbWVTaWcpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aW1lU2lnKSkge1xuXHQgICAgICAgICAgICAgICAgdGltZVNpZyA9IHRpbWVTaWdbMF0gLyB0aW1lU2lnWzFdICogNDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90aW1lU2lnbmF0dXJlID0gdGltZVNpZztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFdoZW4gdGhlIFRvbmUuVHJhbnNwb3J0Lmxvb3AgPSB0cnVlLCB0aGlzIGlzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbG9vcC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wU3RhcnQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3RhcnRQb3NpdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3Moc3RhcnRQb3NpdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBXaGVuIHRoZSBUb25lLlRyYW5zcG9ydC5sb29wID0gdHJ1ZSwgdGhpcyBpcyB0aGUgZW5kaW5nIHBvc2l0aW9uIG9mIHRoZSBsb29wLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcEVuZCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChlbmRQb3NpdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKGVuZFBvc2l0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGxvb3Agc3RhcnQgYW5kIHN0b3AgYXQgdGhlIHNhbWUgdGltZS5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBzdGFydFBvc2l0aW9uXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gZW5kUG9zaXRpb25cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9sb29wIG92ZXIgdGhlIGZpcnN0IG1lYXN1cmVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zZXRMb29wUG9pbnRzKDAsIFwiMW1cIik7XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQubG9vcCA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2V0TG9vcFBvaW50cyA9IGZ1bmN0aW9uIChzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikge1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gc3RhcnRQb3NpdGlvbjtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBlbmRQb3NpdGlvbjtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN3aW5nIHZhbHVlLiBCZXR3ZWVuIDAtMSB3aGVyZSAxIGVxdWFsIHRvXG5cdFx0ICogIHRoZSBub3RlICsgaGFsZiB0aGUgc3ViZGl2aXNpb24uXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBzd2luZ1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3N3aW5nJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3dpbmdBbW91bnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhbW91bnQpIHtcblx0ICAgICAgICAgICAgLy9zY2FsZSB0aGUgdmFsdWVzIHRvIGEgbm9ybWFsIHJhbmdlXG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nQW1vdW50ID0gYW1vdW50O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgc3ViZGl2aXNpb24gd2hpY2ggdGhlIHN3aW5nIHdpbGwgYmUgYXBwbGllZCB0by5cblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYW4gOHRoIG5vdGUuIFZhbHVlIG11c3QgYmUgbGVzc1xuXHRcdCAqICB0aGFuIGEgcXVhcnRlciBub3RlLlxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIHN3aW5nU3ViZGl2aXNpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzd2luZ1N1YmRpdmlzaW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9zd2luZ1RpY2tzKS50b05vdGF0aW9uKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdWJkaXZpc2lvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ1RpY2tzID0gdGhpcy50b1RpY2tzKHN1YmRpdmlzaW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgVHJhbnNwb3J0J3MgcG9zaXRpb24gaW4gQmFyczpCZWF0czpTaXh0ZWVudGhzLlxuXHRcdCAqICBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIGp1bXAgdG8gdGhhdCBwb3NpdGlvbiByaWdodCBhd2F5LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtCYXJzQmVhdHNTaXh0ZWVudGhzfVxuXHRcdCAqICBAbmFtZSBwb3NpdGlvblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3Bvc2l0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5fY2xvY2suZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGlja3MpLnRvQmFyc0JlYXRzU2l4dGVlbnRocygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvZ3Jlc3MpIHtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy50b1RpY2tzKHByb2dyZXNzKTtcblx0ICAgICAgICAgICAgdGhpcy50aWNrcyA9IHRpY2tzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBUcmFuc3BvcnQncyBwb3NpdGlvbiBpbiBzZWNvbmRzXG5cdFx0ICogIFNldHRpbmcgdGhlIHZhbHVlIHdpbGwganVtcCB0byB0aGF0IHBvc2l0aW9uIHJpZ2h0IGF3YXkuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge1NlY29uZHN9XG5cdFx0ICogIEBuYW1lIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzZWNvbmRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2suc2Vjb25kcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHMpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuYnBtLnRpbWVUb1RpY2tzKHMsIG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMudGlja3MgPSB0aWNrcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgVHJhbnNwb3J0J3MgbG9vcCBwb3NpdGlvbiBhcyBhIG5vcm1hbGl6ZWQgdmFsdWUuIEFsd2F5c1xuXHRcdCAqICByZXR1cm5zIDAgaWYgdGhlIHRyYW5zcG9ydCBpZiBsb29wIGlzIG5vdCB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEBuYW1lIHByb2dyZXNzXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdwcm9ncmVzcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLl9jbG9jay5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuICh0aWNrcyAtIHRoaXMuX2xvb3BTdGFydCkgLyAodGhpcy5fbG9vcEVuZCAtIHRoaXMuX2xvb3BTdGFydCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0cmFuc3BvcnRzIGN1cnJlbnQgdGljayBwb3NpdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKiAgQG5hbWUgdGlja3Ncblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICd0aWNrcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLnRpY2tzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fY2xvY2sudGlja3MgIT09IHQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAgICAgLy9zdG9wIGV2ZXJ5dGhpbmcgc3luY2VkIHRvIHRoZSB0cmFuc3BvcnRcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0b3AnLCBub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb2NrLnNldFRpY2tzQXRUaW1lKHQsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9yZXN0YXJ0IGl0IHdpdGggdGhlIG5ldyB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIG5vdywgdGhpcy5zZWNvbmRzKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvY2suc2V0VGlja3NBdFRpbWUodCwgbm93KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgIFRoZSB0aWNrIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmdldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLl9jbG9jay5nZXRUaWNrc0F0VGltZSh0aW1lKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZWxhcHNlZCBzZWNvbmRzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBnZXQgdGhlIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc30gIFRoZSBudW1iZXIgb2YgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuZ2V0U2Vjb25kc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLmdldFNlY29uZHNBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFB1bHNlcyBQZXIgUXVhcnRlciBub3RlLiBUaGlzIGlzIHRoZSBzbWFsbGVzdCByZXNvbHV0aW9uXG5cdFx0ICogIHRoZSBUcmFuc3BvcnQgdGltaW5nIHN1cHBvcnRzLiBUaGlzIHNob3VsZCBiZSBzZXQgb25jZVxuXHRcdCAqICBvbiBpbml0aWFsaXphdGlvbiBhbmQgbm90IHNldCBhZ2Fpbi4gQ2hhbmdpbmcgdGhpcyB2YWx1ZVxuXHRcdCAqICBhZnRlciBvdGhlciBvYmplY3RzIGhhdmUgYmVlbiBjcmVhdGVkIGNhbiBjYXVzZSBwcm9ibGVtcy5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIFBQUVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ1BQUScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BwcTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBwcSkge1xuXHQgICAgICAgICAgICB2YXIgYnBtID0gdGhpcy5icG0udmFsdWU7XG5cdCAgICAgICAgICAgIHRoaXMuX3BwcSA9IHBwcTtcblx0ICAgICAgICAgICAgdGhpcy5icG0udmFsdWUgPSBicG07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBmcm9tIEJQTSB0byBmcmVxdWVuY3kgKGZhY3RvcmluZyBpbiBQUFEpXG5cdFx0ICogIEBwYXJhbSAge0JQTX0gIGJwbSBUaGUgQlBNIHZhbHVlIHRvIGNvbnZlcnQgdG8gZnJlcXVlbmN5XG5cdFx0ICogIEByZXR1cm4gIHtGcmVxdWVuY3l9ICBUaGUgQlBNIGFzIGEgZnJlcXVlbmN5IHdpdGggUFBRIGZhY3RvcmVkIGluLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLl9mcm9tVW5pdHMgPSBmdW5jdGlvbiAoYnBtKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyAoNjAgLyBicG0gLyB0aGlzLlBQUSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZnJvbSBmcmVxdWVuY3kgKHdpdGggUFBRKSBpbnRvIEJQTVxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9ICBmcmVxIFRoZSBjbG9ja3MgZnJlcXVlbmN5IHRvIGNvbnZlcnQgdG8gQlBNXG5cdFx0ICogIEByZXR1cm4gIHtCUE19ICBUaGUgZnJlcXVlbmN5IHZhbHVlIGFzIEJQTS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fdG9Vbml0cyA9IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgcmV0dXJuIGZyZXEgLyB0aGlzLlBQUSAqIDYwO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRTWU5DSU5HXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdGltZSBhbGlnbmVkIHRvIHRoZSBuZXh0IHN1YmRpdmlzaW9uXG5cdFx0ICogIG9mIHRoZSBUcmFuc3BvcnQuIElmIHRoZSBUcmFuc3BvcnQgaXMgbm90IHN0YXJ0ZWQsXG5cdFx0ICogIGl0IHdpbGwgcmV0dXJuIDAuXG5cdFx0ICogIE5vdGU6IHRoaXMgd2lsbCBub3Qgd29yayBwcmVjaXNlbHkgZHVyaW5nIHRlbXBvIHJhbXBzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgc3ViZGl2aXNpb24gIFRoZSBzdWJkaXZpc2lvbiB0byBxdWFudGl6ZSB0b1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgVGhlIGNvbnRleHQgdGltZSBvZiB0aGUgbmV4dCBzdWJkaXZpc2lvbi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydCgpOyAvL3RoZSB0cmFuc3BvcnQgbXVzdCBiZSBzdGFydGVkXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQubmV4dFN1YmRpdmlzaW9uKFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUubmV4dFN1YmRpdmlzaW9uID0gZnVuY3Rpb24gKHN1YmRpdmlzaW9uKSB7XG5cdCAgICAgICAgc3ViZGl2aXNpb24gPSB0aGlzLnRvVGlja3Moc3ViZGl2aXNpb24pO1xuXHQgICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgLy9pZiB0aGUgdHJhbnNwb3J0J3Mgbm90IHN0YXJ0ZWQsIHJldHVybiAwXG5cdCAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAvL3RoZSByZW1haW5kZXIgb2YgdGhlIGN1cnJlbnQgdGlja3MgYW5kIHRoZSBzdWJkaXZpc2lvblxuXHQgICAgICAgICAgICB2YXIgdHJhbnNwb3J0UG9zID0gdGhpcy5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICB2YXIgcmVtYWluaW5nVGlja3MgPSBzdWJkaXZpc2lvbiAtIHRyYW5zcG9ydFBvcyAlIHN1YmRpdmlzaW9uO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2submV4dFRpY2tUaW1lKHJlbWFpbmluZ1RpY2tzLCBub3cpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQXR0YWNoZXMgdGhlIHNpZ25hbCB0byB0aGUgdGVtcG8gY29udHJvbCBzaWduYWwgc28gdGhhdFxuXHRcdCAqICBhbnkgY2hhbmdlcyBpbiB0aGUgdGVtcG8gd2lsbCBjaGFuZ2UgdGhlIHNpZ25hbCBpbiB0aGUgc2FtZVxuXHRcdCAqICByYXRpby5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlNpZ25hbH0gc2lnbmFsXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gcmF0aW8gT3B0aW9uYWxseSBwYXNzIGluIHRoZSByYXRpbyBiZXR3ZWVuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHR3byBzaWduYWxzLiBPdGhlcndpc2UgaXQgd2lsbCBiZSBjb21wdXRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZWlyIGN1cnJlbnQgdmFsdWVzLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zeW5jU2lnbmFsID0gZnVuY3Rpb24gKHNpZ25hbCwgcmF0aW8pIHtcblx0ICAgICAgICBpZiAoIXJhdGlvKSB7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSBzeW5jIHJhdGlvXG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAoc2lnbmFsLmdldFZhbHVlQXRUaW1lKG5vdykgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgIHJhdGlvID0gc2lnbmFsLmdldFZhbHVlQXRUaW1lKG5vdykgLyB0aGlzLmJwbS5nZXRWYWx1ZUF0VGltZShub3cpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmF0aW8gPSAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciByYXRpb1NpZ25hbCA9IG5ldyBUb25lLkdhaW4ocmF0aW8pO1xuXHQgICAgICAgIHRoaXMuYnBtLmNoYWluKHJhdGlvU2lnbmFsLCBzaWduYWwuX3BhcmFtKTtcblx0ICAgICAgICB0aGlzLl9zeW5jZWRTaWduYWxzLnB1c2goe1xuXHQgICAgICAgICAgICAncmF0aW8nOiByYXRpb1NpZ25hbCxcblx0ICAgICAgICAgICAgJ3NpZ25hbCc6IHNpZ25hbCxcblx0ICAgICAgICAgICAgJ2luaXRpYWwnOiBzaWduYWwudmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBzaWduYWwudmFsdWUgPSAwO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbnN5bmNzIGEgcHJldmlvdXNseSBzeW5jZWQgc2lnbmFsIGZyb20gdGhlIHRyYW5zcG9ydCdzIGNvbnRyb2wuXG5cdFx0ICogIFNlZSBUb25lLlRyYW5zcG9ydC5zeW5jU2lnbmFsLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlNpZ25hbH0gc2lnbmFsXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnVuc3luY1NpZ25hbCA9IGZ1bmN0aW9uIChzaWduYWwpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fc3luY2VkU2lnbmFscy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICB2YXIgc3luY2VkU2lnbmFsID0gdGhpcy5fc3luY2VkU2lnbmFsc1tpXTtcblx0ICAgICAgICAgICAgaWYgKHN5bmNlZFNpZ25hbC5zaWduYWwgPT09IHNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc3luY2VkU2lnbmFsLnJhdGlvLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgICAgIHN5bmNlZFNpZ25hbC5zaWduYWwudmFsdWUgPSBzeW5jZWRTaWduYWwuaW5pdGlhbDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNlZFNpZ25hbHMuc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdicG0nKTtcblx0ICAgICAgICB0aGlzLmJwbSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yZXBlYXRlZEV2ZW50cy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRJTklUSUFMSVpBVElPTlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgdmFyIFRyYW5zcG9ydENvbnN0cnVjdG9yID0gVG9uZS5UcmFuc3BvcnQ7XG5cdCAgICBUb25lLlRyYW5zcG9ydCA9IG5ldyBUcmFuc3BvcnRDb25zdHJ1Y3RvcigpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5UcmFuc3BvcnQgaW5zdGFuY2VvZiBUcmFuc3BvcnRDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydCA9IGNvbnRleHQuVHJhbnNwb3J0O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0ID0gbmV3IFRyYW5zcG9ydENvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc3RvcmUgdGhlIFRyYW5zcG9ydCBvbiB0aGUgY29udGV4dCBzbyBpdCBjYW4gYmUgcmV0cmlldmVkIGxhdGVyXG5cdCAgICAgICAgY29udGV4dC5UcmFuc3BvcnQgPSBUb25lLlRyYW5zcG9ydDtcblx0ICAgIH0pO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdjbG9zZScsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuVHJhbnNwb3J0IGluc3RhbmNlb2YgVHJhbnNwb3J0Q29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgY29udGV4dC5UcmFuc3BvcnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Wb2x1bWUgaXMgYSBzaW1wbGUgdm9sdW1lIG5vZGUsIHVzZWZ1bCBmb3IgY3JlYXRpbmcgYSB2b2x1bWUgZmFkZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc30gW3ZvbHVtZT0wXSB0aGUgaW5pdGlhbCB2b2x1bWVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdm9sID0gbmV3IFRvbmUuVm9sdW1lKC0xMik7XG5cdFx0ICogaW5zdHJ1bWVudC5jaGFpbih2b2wsIFRvbmUuTWFzdGVyKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVm9sdW1lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndm9sdW1lJ10sIFRvbmUuVm9sdW1lKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIG91dHB1dCBub2RlXG5cdFx0XHQgKiBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnZvbHVtZSwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB1bm11dGVkIHZvbHVtZVxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3VubXV0ZWRWb2x1bWUgPSBvcHRpb25zLnZvbHVtZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdm9sdW1lIGNvbnRyb2wgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5vdXRwdXQuZ2Fpbjtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLy9zZXQgdGhlIG11dGUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVm9sdW1lLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlZvbHVtZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlZvbHVtZSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHZvbHVtZS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlZvbHVtZS5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy52b2x1bWUudmFsdWUgPT09IC1JbmZpbml0eTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLm11dGUgJiYgbXV0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdW5tdXRlZFZvbHVtZSA9IHRoaXMudm9sdW1lLnZhbHVlO1xuXHQgICAgICAgICAgICAgICAgLy9tYXliZSBpdCBzaG91bGQgcmFtcCBoZXJlP1xuXHQgICAgICAgICAgICAgICAgdGhpcy52b2x1bWUudmFsdWUgPSAtSW5maW5pdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tdXRlICYmICFtdXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZvbHVtZS52YWx1ZSA9IHRoaXMuX3VubXV0ZWRWb2x1bWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Wb2x1bWV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVm9sdW1lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMudm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVm9sdW1lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc2luZ2xlIG1hc3RlciBvdXRwdXQgd2hpY2ggaXMgY29ubmVjdGVkIHRvIHRoZVxuXHRcdCAqICAgICAgICAgIEF1ZGlvRGVzdGluYXRpb25Ob2RlIChha2EgeW91ciBzcGVha2VycykuXG5cdFx0ICogICAgICAgICAgSXQgcHJvdmlkZXMgdXNlZnVsIGNvbnZlbmllbmNlcyBzdWNoIGFzIHRoZSBhYmlsaXR5XG5cdFx0ICogICAgICAgICAgdG8gc2V0IHRoZSB2b2x1bWUgYW5kIG11dGUgdGhlIGVudGlyZSBhcHBsaWNhdGlvbi5cblx0XHQgKiAgICAgICAgICBJdCBhbHNvIGdpdmVzIHlvdSB0aGUgYWJpbGl0eSB0byBhcHBseSBtYXN0ZXIgZWZmZWN0cyB0byB5b3VyIGFwcGxpY2F0aW9uLlxuXHRcdCAqICAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgTGlrZSBUb25lLlRyYW5zcG9ydCwgQSBzaW5nbGUgVG9uZS5NYXN0ZXIgaXMgY3JlYXRlZFxuXHRcdCAqICAgICAgICAgIG9uIGluaXRpYWxpemF0aW9uIGFuZCB5b3UgZG8gbm90IG5lZWQgdG8gZXhwbGljaXRseSBjb25zdHJ1Y3Qgb25lLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHNpbmdsZXRvblxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdGhlIGF1ZGlvIHdpbGwgZ28gZnJvbSB0aGUgb3NjaWxsYXRvciB0byB0aGUgc3BlYWtlcnNcblx0XHQgKiBvc2NpbGxhdG9yLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHRcdCAqIC8vYSBjb252ZW5pZW5jZSBmb3IgY29ubmVjdGluZyB0byB0aGUgbWFzdGVyIG91dHB1dCBpcyBhbHNvIHByb3ZpZGVkOlxuXHRcdCAqIG9zY2lsbGF0b3IudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3RoZSBhYm92ZSB0d28gZXhhbXBsZXMgYXJlIGVxdWl2YWxlbnQuXG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3RlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAwKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgcHJpdmF0ZSB2b2x1bWUgbm9kZVxuXHRcdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZSgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgbWFzdGVyIG91dHB1dC5cblx0XHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMub3V0cHV0LCB0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NYXN0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuTWFzdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTWFzdGVyI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogVG9uZS5NYXN0ZXIubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NYXN0ZXIucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgbWFzdGVyIGVmZmVjdHMgY2hhaW4uIE5PVEU6IHRoaXMgd2lsbCBkaXNjb25uZWN0IGFueSBub2RlcyB3aGljaCB3ZXJlIHByZXZpb3VzbHlcblx0XHQgKiAgY2hhaW5lZCBpbiB0aGUgbWFzdGVyIGVmZmVjdHMgY2hhaW4uXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9Ob2RlfFRvbmV9IGFyZ3MuLi4gQWxsIGFyZ3VtZW50cyB3aWxsIGJlIGNvbm5lY3RlZCBpbiBhIHJvd1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgTWFzdGVyIHdpbGwgYmUgcm91dGVkIHRocm91Z2ggaXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1hc3Rlcn0gIHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NvbWUgb3ZlcmFsbCBjb21wcmVzc2lvbiB0byBrZWVwIHRoZSBsZXZlbHMgaW4gY2hlY2tcblx0XHQgKiB2YXIgbWFzdGVyQ29tcHJlc3NvciA9IG5ldyBUb25lLkNvbXByZXNzb3Ioe1xuXHRcdCAqIFx0XCJ0aHJlc2hvbGRcIiA6IC02LFxuXHRcdCAqIFx0XCJyYXRpb1wiIDogMyxcblx0XHQgKiBcdFwiYXR0YWNrXCIgOiAwLjUsXG5cdFx0ICogXHRcInJlbGVhc2VcIiA6IDAuMVxuXHRcdCAqIH0pO1xuXHRcdCAqIC8vZ2l2ZSBhIGxpdHRsZSBib29zdCB0byB0aGUgbG93c1xuXHRcdCAqIHZhciBsb3dCdW1wID0gbmV3IFRvbmUuRmlsdGVyKDIwMCwgXCJsb3dzaGVsZlwiKTtcblx0XHQgKiAvL3JvdXRlIGV2ZXJ5dGhpbmcgdGhyb3VnaCB0aGUgZmlsdGVyXG5cdFx0ICogLy9hbmQgY29tcHJlc3NvciBiZWZvcmUgZ29pbmcgdG8gdGhlIHNwZWFrZXJzXG5cdFx0ICogVG9uZS5NYXN0ZXIuY2hhaW4obG93QnVtcCwgbWFzdGVyQ29tcHJlc3Nvcik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3Rlci5wcm90b3R5cGUuY2hhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbi5hcHBseSh0aGlzLmlucHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0uY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1hc3Rlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWFzdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVVHTUVOVCBUT05FJ3MgUFJPVE9UWVBFXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBDb25uZWN0ICd0aGlzJyB0byB0aGUgbWFzdGVyIG91dHB1dC4gU2hvcnRoYW5kIGZvciB0aGlzLmNvbm5lY3QoVG9uZS5NYXN0ZXIpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY29ubmVjdCBhbiBvc2NpbGxhdG9yIHRvIHRoZSBtYXN0ZXIgb3V0cHV0XG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS50b01hc3RlcigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLnRvTWFzdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgaWYgKHdpbmRvdy5BdWRpb05vZGUpIHtcblx0ICAgICAgICAvLyBBbHNvIGF1Z21lbnQgQXVkaW9Ob2RlJ3MgcHJvdG90eXBlIHRvIGluY2x1ZGUgdG9NYXN0ZXIgYXMgYSBjb252ZW5pZW5jZVxuXHQgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUudG9NYXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdCAgICAvKipcblx0XHQgKiAgaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFuZCBsaXN0ZW4gZm9yIG5ldyBhdWRpbyBjb250ZXh0c1xuXHRcdCAqL1xuXHQgICAgdmFyIE1hc3RlckNvbnN0cnVjdG9yID0gVG9uZS5NYXN0ZXI7XG5cdCAgICBUb25lLk1hc3RlciA9IG5ldyBNYXN0ZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAvLyBpZiBpdCBhbHJlYWR5IGV4aXN0cywganVzdCByZXN0b3JlIGl0XG5cdCAgICAgICAgaWYgKGNvbnRleHQuTWFzdGVyIGluc3RhbmNlb2YgTWFzdGVyQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgVG9uZS5NYXN0ZXIgPSBjb250ZXh0Lk1hc3Rlcjtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBUb25lLk1hc3RlciA9IG5ldyBNYXN0ZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb250ZXh0Lk1hc3RlciA9IFRvbmUuTWFzdGVyO1xuXHQgICAgfSk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2Nsb3NlJywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5NYXN0ZXIgaW5zdGFuY2VvZiBNYXN0ZXJDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICBjb250ZXh0Lk1hc3Rlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5NYXN0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQmFzZSBjbGFzcyBmb3Igc291cmNlcy4gU291cmNlcyBoYXZlIHN0YXJ0L3N0b3AgbWV0aG9kc1xuXHRcdCAqICAgICAgICAgIGFuZCB0aGUgYWJpbGl0eSB0byBiZSBzeW5jZWQgdG8gdGhlXG5cdFx0ICogICAgICAgICAgc3RhcnQvc3RvcCBvZiBUb25lLlRyYW5zcG9ydC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vTXVsdGlwbGUgc3RhdGUgY2hhbmdlIGV2ZW50cyBjYW4gYmUgY2hhaW5lZCB0b2dldGhlcixcblx0XHQgKiAvL2J1dCBtdXN0IGJlIHNldCBpbiB0aGUgY29ycmVjdCBvcmRlciBhbmQgd2l0aCBhc2NlbmRpbmcgdGltZXNcblx0XHQgKlxuXHRcdCAqIC8vIE9LXG5cdFx0ICogc3RhdGUuc3RhcnQoKS5zdG9wKFwiKzAuMlwiKTtcblx0XHQgKiAvLyBBTkRcblx0XHQgKiBzdGF0ZS5zdGFydCgpLnN0b3AoXCIrMC4yXCIpLnN0YXJ0KFwiKzAuNFwiKS5zdG9wKFwiKzAuN1wiKVxuXHRcdCAqXG5cdFx0ICogLy8gQkFEXG5cdFx0ICogc3RhdGUuc3RvcChcIiswLjJcIikuc3RhcnQoKTtcblx0XHQgKiAvLyBPUlxuXHRcdCAqIHN0YXRlLnN0YXJ0KFwiKzAuM1wiKS5zdG9wKFwiKzAuMlwiKTtcblx0XHQgKlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Tb3VyY2UuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBzb3VyY2Uudm9sdW1lLnZhbHVlID0gLTY7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogXHRLZWVwIHRyYWNrIG9mIHRoZSBzY2hlZHVsZWQgc3RhdGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUubWVtb3J5ID0gMTAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzeW5jZWQgYHN0YXJ0YCBjYWxsYmFjayBmdW5jdGlvbiBmcm9tIHRoZSB0cmFuc3BvcnRcblx0XHRcdCAqICBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEtlZXAgdHJhY2sgb2YgYWxsIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgaWRzXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gW107XG5cdCAgICAgICAgLy9tYWtlIHRoZSBvdXRwdXQgZXhwbGljaXRseSBzdGVyZW9cblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnQgPSAyO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIC8vbXV0ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Tb3VyY2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Tb3VyY2UucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnNlY29uZHMpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogc291cmNlLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU291cmNlLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy9vdmVyd3JpdGUgdGhlc2UgZnVuY3Rpb25zXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuX3N0YXJ0ID0gVG9uZS5ub09wO1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnJlc3RhcnQgPSBUb25lLm5vT3A7XG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuX3N0b3AgPSBUb25lLm5vT3A7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIHNvdXJjZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuIElmIG5vIHRpbWUgaXMgZ2l2ZW4sXG5cdFx0ICogIHN0YXJ0IHRoZSBzb3VyY2Ugbm93LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHNvdXJjZSBzaG91bGQgYmUgc3RhcnRlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0YXJ0KFwiKzAuNVwiKTsgLy9zdGFydHMgdGhlIHNvdXJjZSAwLjUgc2Vjb25kcyBmcm9tIG5vd1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRpbWUpICYmIHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnQuc2Vjb25kcztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaWYgaXQncyBzdGFydGVkLCBzdG9wIGl0IGFuZCByZXN0YXJ0IGl0XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLnJlc3RhcnQodGltZSwgb2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBvZmZzZXQgdGltZSB0byB0aGUgZXZlbnRcblx0ICAgICAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3N0YXRlLmdldCh0aW1lKTtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Lm9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuZHVyYXRpb24gPSBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgIHZhciBzY2hlZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodCwgb2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkLnB1c2goc2NoZWQpO1xuXHQgICAgICAgICAgICAgICAgLy9pZiBpdCdzIGFscmVhZHkgc3RhcnRlZFxuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jZWRTdGFydCh0aGlzLm5vdygpLCBUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIHNvdXJjZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuIElmIG5vIHRpbWUgaXMgZ2l2ZW4sXG5cdFx0ICogIHN0b3AgdGhlIHNvdXJjZSBub3cuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgc291cmNlIHNob3VsZCBiZSBzdG9wcGVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RvcCgpOyAvLyBzdG9wcyB0aGUgc291cmNlIGltbWVkaWF0ZWx5XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSAmJiB0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0LnNlY29uZHM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIXRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHNjaGVkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUodGhpcy5fc3RvcC5iaW5kKHRoaXMpLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkLnB1c2goc2NoZWQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3luYyB0aGUgc291cmNlIHRvIHRoZSBUcmFuc3BvcnQgc28gdGhhdCBhbGwgc3Vic2VxdWVudFxuXHRcdCAqICBjYWxscyB0byBgc3RhcnRgIGFuZCBgc3RvcGAgYXJlIHN5bmNlZCB0byB0aGUgVHJhbnNwb3J0VGltZVxuXHRcdCAqICBpbnN0ZWFkIG9mIHRoZSBBdWRpb0NvbnRleHQgdGltZS5cblx0XHQgKlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3N5bmMgdGhlIHNvdXJjZSBzbyB0aGF0IGl0IHBsYXlzIGJldHdlZW4gMCBhbmQgMC4zIG9uIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZVxuXHRcdCAqIHNvdXJjZS5zeW5jKCkuc3RhcnQoMCkuc3RvcCgwLjMpO1xuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydCgpO1xuXHRcdCAqXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHdpdGggYW4gb2Zmc2V0IGFuZCB0aGUgc3luYydlZCBzb3VyY2VzXG5cdFx0ICogLy93aWxsIHN0YXJ0IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG5cdFx0ICogc291cmNlLnN5bmMoKS5zdGFydCgwLjEpO1xuXHRcdCAqIC8vdGhlIHNvdXJjZSB3aWxsIGJlIGludm9rZWQgd2l0aCBhbiBvZmZzZXQgb2YgMC40XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoXCIrMC41XCIsIDAuNSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZFN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuXHQgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBwbGF5YmFjayBzdGF0ZSBhdCB0aGF0IHRpbWVcblx0ICAgICAgICAgICAgICAgIHZhciBzdGF0ZUV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KG9mZnNldCk7XG5cdCAgICAgICAgICAgICAgICAvLyBsaXN0ZW4gZm9yIHN0YXJ0IGV2ZW50cyB3aGljaCBtYXkgb2NjdXIgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc3luYydlZCB0aW1lXG5cdCAgICAgICAgICAgICAgICBpZiAoc3RhdGVFdmVudCAmJiBzdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgc3RhdGVFdmVudC50aW1lICE9PSBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIG9mZnNldFxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydE9mZnNldCA9IG9mZnNldCAtIHRoaXMudG9TZWNvbmRzKHN0YXRlRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZUV2ZW50LmR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoc3RhdGVFdmVudC5kdXJhdGlvbikgLSBzdGFydE9mZnNldDtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodGltZSwgdGhpcy50b1NlY29uZHMoc3RhdGVFdmVudC5vZmZzZXQpICsgc3RhcnRPZmZzZXQsIGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zeW5jZWRTdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdmFyIHNlY29uZHMgPSBUb25lLlRyYW5zcG9ydC5nZXRTZWNvbmRzQXRUaW1lKE1hdGgubWF4KHRpbWUgLSB0aGlzLnNhbXBsZVRpbWUsIDApKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHNlY29uZHMpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0b3AodGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub24oJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX3N5bmNlZFN0YXJ0KTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5vbignc3RvcCBwYXVzZSBsb29wRW5kJywgdGhpcy5fc3luY2VkU3RvcCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVuc3luYyB0aGUgc291cmNlIHRvIHRoZSBUcmFuc3BvcnQuIFNlZSBUb25lLlNvdXJjZS5zeW5jXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9mZignc3RvcCBwYXVzZSBsb29wRW5kJywgdGhpcy5fc3luY2VkU3RvcCk7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9mZignc3RhcnQgbG9vcFN0YXJ0JywgdGhpcy5fc3luY2VkU3RhcnQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSBmYWxzZTtcblx0ICAgICAgICAvLyBjbGVhciBhbGwgb2YgdGhlIHNjaGVkdWxlZCBpZHNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NjaGVkdWxlZC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLl9zY2hlZHVsZWRbaV07XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGlkKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gW107XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqXHRDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy51bnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU291cmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQXVkaW9CdWZmZXIuY29weVRvL0Zyb21DaGFubmVsIHBvbHlmaWxsXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIUF1ZGlvQnVmZmVyLnByb3RvdHlwZS5jb3B5VG9DaGFubmVsKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQnVmZmVyLnByb3RvdHlwZS5jb3B5VG9DaGFubmVsID0gZnVuY3Rpb24gKHNyYywgY2hhbk51bSwgc3RhcnQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gdGhpcy5nZXRDaGFubmVsRGF0YShjaGFuTnVtKTtcblx0ICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaSArIHN0YXJ0XSA9IHNyY1tpXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgQXVkaW9CdWZmZXIucHJvdG90eXBlLmNvcHlGcm9tQ2hhbm5lbCA9IGZ1bmN0aW9uIChkZXN0LCBjaGFuTnVtLCBzdGFydCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSB0aGlzLmdldENoYW5uZWxEYXRhKGNoYW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydCB8fCAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXN0Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZGVzdFtpXSA9IGNoYW5uZWxbaSArIHN0YXJ0XTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQnVmZmVyIGxvYWRpbmcgYW5kIHN0b3JhZ2UuIFRvbmUuQnVmZmVyIGlzIHVzZWQgaW50ZXJuYWxseSBieSBhbGxcblx0XHQgKiAgICAgICAgICBjbGFzc2VzIHRoYXQgbWFrZSByZXF1ZXN0cyBmb3IgYXVkaW8gZmlsZXMgc3VjaCBhcyBUb25lLlBsYXllcixcblx0XHQgKiAgICAgICAgICBUb25lLlNhbXBsZXIgYW5kIFRvbmUuQ29udm9sdmVyLlxuXHRcdCAqXG5cdFx0ICogICAgICAgICAgQXNpZGUgZnJvbSBsb2FkIGNhbGxiYWNrcyBmcm9tIGluZGl2aWR1YWwgYnVmZmVycywgVG9uZS5CdWZmZXJcblx0XHQgKiAgXHRcdHByb3ZpZGVzIGV2ZW50cyB3aGljaCBrZWVwIHRyYWNrIG9mIHRoZSBsb2FkaW5nIHByb2dyZXNzXG5cdFx0ICogIFx0XHRvZiBfYWxsXyBvZiB0aGUgYnVmZmVycy4gVGhlc2UgYXJlIFRvbmUuQnVmZmVyLm9uKFwibG9hZFwiIC8gXCJwcm9ncmVzc1wiIC8gXCJlcnJvclwiKVxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtBdWRpb0J1ZmZlcnxTdHJpbmd9IHVybCBUaGUgdXJsIHRvIGxvYWQsIG9yIHRoZSBhdWRpbyBidWZmZXIgdG8gc2V0LlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIEEgY2FsbGJhY2sgd2hpY2ggaXMgaW52b2tlZCBhZnRlciB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBgVG9uZS5CdWZmZXIub24oJ2xvYWQnLCBjYWxsYmFjaylgIGluc3RlYWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5jZSBpdCB3aWxsIGdpdmUgeW91IGEgY2FsbGJhY2sgd2hlbiBfYWxsXyBidWZmZXJzIGFyZSBsb2FkZWQuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb249fSBvbmVycm9yIFRoZSBjYWxsYmFjayB0byBpbnZva2UgaWYgdGhlcmUgaXMgYW4gZXJyb3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKFwicGF0aC90by9zb3VuZC5tcDNcIiwgZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vdGhlIGJ1ZmZlciBpcyBub3cgYXZhaWxhYmxlLlxuXHRcdCAqIFx0dmFyIGJ1ZmYgPSBidWZmZXIuZ2V0KCk7XG5cdFx0ICogfSk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gbG9hZCBwcm92aWRlIGZhbGxiYWNrIGV4dGVuc2lvbiB0eXBlcyBpZiB0aGUgZmlyc3QgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLlxuXHRcdCAqIHZhciBidWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIoXCJwYXRoL3RvL3NvdW5kLlttcDN8b2dnfHdhdl1cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAnb25sb2FkJyxcblx0ICAgICAgICAgICAgJ29uZXJyb3InXG5cdCAgICAgICAgXSwgVG9uZS5CdWZmZXIpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzdG9yZXMgdGhlIGxvYWRlZCBBdWRpb0J1ZmZlclxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb0J1ZmZlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpbmRpY2F0ZXMgaWYgdGhlIGJ1ZmZlciBzaG91bGQgYmUgcmV2ZXJzZWQgb3Igbm90XG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JldmVyc2VkID0gb3B0aW9ucy5yZXZlcnNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBYSFJcblx0XHRcdCAqICBAdHlwZSAge1hNTEh0dHBSZXF1ZXN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogUHJpdmF0ZSBjYWxsYmFjayB3aGVuIHRoZSBidWZmZXIgaXMgbG9hZGVkLlxuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29ubG9hZCA9IFRvbmUubm9PcDtcblx0ICAgICAgICBpZiAob3B0aW9ucy51cmwgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlciB8fCBvcHRpb25zLnVybCBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0KG9wdGlvbnMudXJsKTtcblx0ICAgICAgICAgICAgLy8gaW52b2tlIHRoZSBvbmxvYWQgY2FsbGJhY2tcblx0ICAgICAgICAgICAgaWYgKG9wdGlvbnMub25sb2FkKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25sb2FkID0gb3B0aW9ucy5vbmxvYWQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcob3B0aW9ucy51cmwpKSB7XG5cdCAgICAgICAgICAgIHRoaXMubG9hZChvcHRpb25zLnVybCkudGhlbihvcHRpb25zLm9ubG9hZCkuY2F0Y2gob3B0aW9ucy5vbmVycm9yKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CdWZmZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd1cmwnOiB1bmRlZmluZWQsXG5cdCAgICAgICAgJ3JldmVyc2UnOiBmYWxzZSxcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdvbmVycm9yJzogVG9uZS5ub09wXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhc3MgaW4gYW4gQXVkaW9CdWZmZXIgb3IgVG9uZS5CdWZmZXIgdG8gc2V0IHRoZSB2YWx1ZVxuXHRcdCAqICBvZiB0aGlzIGJ1ZmZlci5cblx0XHQgKiAgQHBhcmFtIHtBdWRpb0J1ZmZlcnxUb25lLkJ1ZmZlcn0gYnVmZmVyIHRoZSBidWZmZXJcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgIGlmIChidWZmZXIgaW5zdGFuY2VvZiBUb25lLkJ1ZmZlcikge1xuXHQgICAgICAgICAgICBpZiAoYnVmZmVyLmxvYWRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyLmdldCgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyLl9vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoYnVmZmVyKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcmV0dXJuIHtBdWRpb0J1ZmZlcn0gVGhlIGF1ZGlvIGJ1ZmZlciBzdG9yZWQgaW4gdGhlIG9iamVjdC5cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTWFrZXMgYW4geGhyIHJlcWVzdCBmb3IgdGhlIHNlbGVjdGVkIHVybCB0aGVuIGRlY29kZXNcblx0XHQgKiAgdGhlIGZpbGUgYXMgYW4gYXVkaW8gYnVmZmVyLiBJbnZva2VzXG5cdFx0ICogIHRoZSBjYWxsYmFjayBvbmNlIHRoZSBhdWRpbyBidWZmZXIgbG9hZHMuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgYnVmZmVyIHRvIGxvYWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgZmlsZXR5cGUgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIuXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfSByZXR1cm5zIGEgUHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIHRoZSBUb25lLkJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBvbmxvYWQsIG9uZXJyb3IpIHtcblx0ICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChsb2FkLCBlcnJvcikge1xuXHQgICAgICAgICAgICB0aGlzLl94aHIgPSBUb25lLkJ1ZmZlci5sb2FkKHVybCwgLy9zdWNjZXNzXG5cdCAgICAgICAgICAgIGZ1bmN0aW9uIChidWZmKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zZXQoYnVmZik7XG5cdCAgICAgICAgICAgICAgICBsb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb25sb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgaWYgKG9ubG9hZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAvL2Vycm9yXG5cdCAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3hociA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICBlcnJvcihlcnIpO1xuXHQgICAgICAgICAgICAgICAgaWYgKG9uZXJyb3IpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbmVycm9yKGVycik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gcHJvbWlzZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIGlmICh0aGlzLl94aHIpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHRoaXMuX3hocik7XG5cdCAgICAgICAgICAgIHRoaXMuX3hoci5hYm9ydCgpO1xuXHQgICAgICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVyIGlzIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPiAwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGR1cmF0aW9uIG9mIHRoZSBidWZmZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgZHVyYXRpb25cblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdkdXJhdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5kdXJhdGlvbjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gc2FtcGxlc1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGxlbmd0aFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBkaXNjcmV0ZSBhdWRpbyBjaGFubmVscy4gUmV0dXJucyAwIGlmIG5vIGJ1ZmZlclxuXHRcdCAqIGlzIGxvYWRlZC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBudW1iZXJPZkNoYW5uZWxzXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnbnVtYmVyT2ZDaGFubmVscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGF1ZGlvIGJ1ZmZlciBmcm9tIHRoZSBhcnJheS4gVG8gY3JlYXRlIGEgbXVsdGljaGFubmVsIEF1ZGlvQnVmZmVyLFxuXHRcdCAqICBwYXNzIGluIGEgbXVsdGlkaW1lbnNpb25hbCBhcnJheS5cblx0XHQgKiAgQHBhcmFtIHtGbG9hdDMyQXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsIHRoZSBhdWRpbyBidWZmZXJcblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHtcblx0ICAgICAgICB2YXIgaXNNdWx0aWRpbWVuc2lvbmFsID0gYXJyYXlbMF0ubGVuZ3RoID4gMDtcblx0ICAgICAgICB2YXIgY2hhbm5lbHMgPSBpc011bHRpZGltZW5zaW9uYWwgPyBhcnJheS5sZW5ndGggOiAxO1xuXHQgICAgICAgIHZhciBsZW4gPSBpc011bHRpZGltZW5zaW9uYWwgPyBhcnJheVswXS5sZW5ndGggOiBhcnJheS5sZW5ndGg7XG5cdCAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXIoY2hhbm5lbHMsIGxlbiwgdGhpcy5jb250ZXh0LnNhbXBsZVJhdGUpO1xuXHQgICAgICAgIGlmICghaXNNdWx0aWRpbWVuc2lvbmFsICYmIGNoYW5uZWxzID09PSAxKSB7XG5cdCAgICAgICAgICAgIGFycmF5ID0gW2FycmF5XTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjaGFubmVsczsgYysrKSB7XG5cdCAgICAgICAgICAgIGJ1ZmZlci5jb3B5VG9DaGFubmVsKGFycmF5W2NdLCBjKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0U3VtcyBtdWxpcGxlIGNoYW5uZWxzIGludG8gMSBjaGFubmVsXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gY2hhbm5lbCBPcHRpb25hbGx5IG9ubHkgY29weSBhIHNpbmdsZSBjaGFubmVsIGZyb20gdGhlIGFycmF5LlxuXHRcdCAqICBAcmV0dXJuIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS50b01vbm8gPSBmdW5jdGlvbiAoY2hhbk51bSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGNoYW5OdW0pKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZnJvbUFycmF5KHRoaXMudG9BcnJheShjaGFuTnVtKSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIG91dHB1dEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmxlbmd0aCk7XG5cdCAgICAgICAgICAgIHZhciBudW1DaGFubmVscyA9IHRoaXMubnVtYmVyT2ZDaGFubmVscztcblx0ICAgICAgICAgICAgZm9yICh2YXIgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBudW1DaGFubmVsczsgY2hhbm5lbCsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbEFycmF5ID0gdGhpcy50b0FycmF5KGNoYW5uZWwpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFubmVsQXJyYXkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBvdXRwdXRBcnJheVtpXSArPSBjaGFubmVsQXJyYXlbaV07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9kaXZpZGUgYnkgdGhlIG51bWJlciBvZiBjaGFubmVsc1xuXHQgICAgICAgICAgICBvdXRwdXRBcnJheSA9IG91dHB1dEFycmF5Lm1hcChmdW5jdGlvbiAoc2FtcGxlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gc2FtcGxlIC8gbnVtQ2hhbm5lbHM7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB0aGlzLmZyb21BcnJheShvdXRwdXRBcnJheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0R2V0IHRoZSBidWZmZXIgYXMgYW4gYXJyYXkuIFNpbmdsZSBjaGFubmVsIGJ1ZmZlcnMgd2lsbCByZXR1cm4gYSAxLWRpbWVuc2lvbmFsXG5cdFx0ICogXHRGbG9hdDMyQXJyYXksIGFuZCBtdWx0aWNoYW5uZWwgYnVmZmVycyB3aWxsIHJldHVybiBtdWx0aWRpbWVuc2lvbmFsIGFycmF5cy5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBjaGFubmVsIE9wdGlvbmFsbHkgb25seSBjb3B5IGEgc2luZ2xlIGNoYW5uZWwgZnJvbSB0aGUgYXJyYXkuXG5cdFx0ICogIEByZXR1cm4ge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoY2hhbm5lbCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGNoYW5uZWwpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENoYW5uZWxEYXRhKGNoYW5uZWwpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5udW1iZXJPZkNoYW5uZWxzID09PSAxKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnRvQXJyYXkoMCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHJldCA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IHRoaXMubnVtYmVyT2ZDaGFubmVsczsgYysrKSB7XG5cdCAgICAgICAgICAgICAgICByZXRbY10gPSB0aGlzLmdldENoYW5uZWxEYXRhKGMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBGbG9hdDMyQXJyYXkgcmVwcmVzZW50aW5nIHRoZSBQQ00gYXVkaW8gZGF0YSBmb3IgdGhlIHNwZWNpZmljIGNoYW5uZWwuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGNoYW5uZWwgIFRoZSBjaGFubmVsIG51bWJlciB0byByZXR1cm5cblx0XHQgKiAgQHJldHVybiAge0Zsb2F0MzJBcnJheX0gIFRoZSBhdWRpbyBhcyBhIFR5cGVkQXJyYXlcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5nZXRDaGFubmVsRGF0YSA9IGZ1bmN0aW9uIChjaGFubmVsKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5nZXRDaGFubmVsRGF0YShjaGFubmVsKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ3V0IGEgc3Vic2VjdGlvbiBvZiB0aGUgYXJyYXkgYW5kIHJldHVybiBhIGJ1ZmZlciBvZiB0aGVcblx0XHQgKiAgc3Vic2VjdGlvbi4gRG9lcyBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBidWZmZXJcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydCBUaGUgdGltZSB0byBzdGFydCB0aGUgc2xpY2Vcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gZW5kIFRoZSBlbmQgdGltZSB0byBzbGljZS4gSWYgbm9uZSBpcyBnaXZlblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgd2lsbCBkZWZhdWx0IHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gKHN0YXJ0LCBlbmQpIHtcblx0ICAgICAgICBlbmQgPSBUb25lLmRlZmF1bHRBcmcoZW5kLCB0aGlzLmR1cmF0aW9uKTtcblx0ICAgICAgICB2YXIgc3RhcnRTYW1wbGVzID0gTWF0aC5mbG9vcih0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSAqIHRoaXMudG9TZWNvbmRzKHN0YXJ0KSk7XG5cdCAgICAgICAgdmFyIGVuZFNhbXBsZXMgPSBNYXRoLmZsb29yKHRoaXMuY29udGV4dC5zYW1wbGVSYXRlICogdGhpcy50b1NlY29uZHMoZW5kKSk7XG5cdCAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm51bWJlck9mQ2hhbm5lbHM7IGkrKykge1xuXHQgICAgICAgICAgICByZXBsYWNlbWVudFtpXSA9IHRoaXMudG9BcnJheShpKS5zbGljZShzdGFydFNhbXBsZXMsIGVuZFNhbXBsZXMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmV0QnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKCkuZnJvbUFycmF5KHJlcGxhY2VtZW50KTtcblx0ICAgICAgICByZXR1cm4gcmV0QnVmZmVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXZlcnNlIHRoZSBidWZmZXIuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuX3JldmVyc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1iZXJPZkNoYW5uZWxzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwodGhpcy5nZXRDaGFubmVsRGF0YShpKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV2ZXJzZSB0aGUgYnVmZmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSByZXZlcnNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAncmV2ZXJzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldmVyc2VkO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmV2KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9yZXZlcnNlZCAhPT0gcmV2KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXZlcnNlZCA9IHJldjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JldmVyc2UoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBTVEFUSUMgTUVUSE9EU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL3N0YXRpY2FsbHkgaW5oZXJpdHMgRW1pdHRlciBtZXRob2RzXG5cdCAgICBUb25lLkVtaXR0ZXIubWl4aW4oVG9uZS5CdWZmZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBzdGF0aWMgcXVldWUgZm9yIGFsbCBvZiB0aGUgeGhyIHJlcXVlc3RzXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlID0gW107XG5cdCAgICAvKipcblx0XHQgKiAgQSBwYXRoIHdoaWNoIGlzIHByZWZpeGVkIGJlZm9yZSBldmVyeSB1cmwuXG5cdFx0ICogIEB0eXBlICB7U3RyaW5nfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5iYXNlVXJsID0gJyc7XG5cdCAgICAvKipcblx0XHQgKiAgQ3JlYXRlIGEgVG9uZS5CdWZmZXIgZnJvbSB0aGUgYXJyYXkuIFRvIGNyZWF0ZSBhIG11bHRpY2hhbm5lbCBBdWRpb0J1ZmZlcixcblx0XHQgKiAgcGFzcyBpbiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkuXG5cdFx0ICogIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbCB0aGUgYXVkaW8gYnVmZmVyXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSBBIFRvbmUuQnVmZmVyIGNyZWF0ZWQgZnJvbSB0aGUgYXJyYXlcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSkge1xuXHQgICAgICAgIHJldHVybiBuZXcgVG9uZS5CdWZmZXIoKS5mcm9tQXJyYXkoYXJyYXkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENyZWF0ZXMgYSBUb25lLkJ1ZmZlciBmcm9tIGEgVVJMLCByZXR1cm5zIGEgcHJvbWlzZVxuXHRcdCAqIHdoaWNoIHJlc29sdmVzIHRvIGEgVG9uZS5CdWZmZXJcblx0XHQgKiBAcGFyYW0gIHtTdHJpbmd9IHVybCBUaGUgdXJsIHRvIGxvYWQuXG5cdFx0ICogQHJldHVybiB7UHJvbWlzZTxUb25lLkJ1ZmZlcj59ICAgICBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gYSBUb25lLkJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuZnJvbVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcblx0ICAgICAgICB2YXIgYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKCk7XG5cdCAgICAgICAgcmV0dXJuIGJ1ZmZlci5sb2FkKHVybCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVtb3ZlIGFuIHhociByZXF1ZXN0IGZyb20gdGhlIGRvd25sb2FkIHF1ZXVlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZSA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUuaW5kZXhPZihyZXF1ZXN0KTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBMb2FkcyBhIHVybCB1c2luZyBYTUxIdHRwUmVxdWVzdC5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHVybFxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBvbmxvYWRcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gb25lcnJvclxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBvbnByb2dyZXNzXG5cdFx0ICogIEByZXR1cm4ge1hNTEh0dHBSZXF1ZXN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIubG9hZCA9IGZ1bmN0aW9uICh1cmwsIG9ubG9hZCwgb25lcnJvcikge1xuXHQgICAgICAgIC8vZGVmYXVsdFxuXHQgICAgICAgIG9ubG9hZCA9IFRvbmUuZGVmYXVsdEFyZyhvbmxvYWQsIFRvbmUubm9PcCk7XG5cdCAgICAgICAgLy8gdGVzdCBpZiB0aGUgdXJsIGNvbnRhaW5zIG11bHRpcGxlIGV4dGVuc2lvbnNcblx0ICAgICAgICB2YXIgbWF0Y2hlcyA9IHVybC5tYXRjaCgvXFxbKC4rXFx8PykrXFxdJC8pO1xuXHQgICAgICAgIGlmIChtYXRjaGVzKSB7XG5cdCAgICAgICAgICAgIHZhciBleHRlbnNpb25zID0gbWF0Y2hlc1sxXS5zcGxpdCgnfCcpO1xuXHQgICAgICAgICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uc1swXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRlbnNpb25zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlKGV4dGVuc2lvbnNbaV0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uc1tpXTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShtYXRjaGVzWzBdLCBleHRlbnNpb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGUpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5lbWl0KCdlcnJvcicsIGUpO1xuXHQgICAgICAgICAgICBpZiAob25lcnJvcikge1xuXHQgICAgICAgICAgICAgICAgb25lcnJvcihlKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gb25Qcm9ncmVzcygpIHtcblx0ICAgICAgICAgICAgLy9jYWxjdWxhdGUgdGhlIHByb2dyZXNzXG5cdCAgICAgICAgICAgIHZhciB0b3RhbFByb2dyZXNzID0gMDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdG90YWxQcm9ncmVzcyArPSBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZVtpXS5wcm9ncmVzcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5lbWl0KCdwcm9ncmVzcycsIHRvdGFsUHJvZ3Jlc3MgLyBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5sZW5ndGgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHQgICAgICAgIHJlcXVlc3Qub3BlbignR0VUJywgVG9uZS5CdWZmZXIuYmFzZVVybCArIHVybCwgdHJ1ZSk7XG5cdCAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xuXHQgICAgICAgIC8vc3RhcnQgb3V0IGFzIDBcblx0ICAgICAgICByZXF1ZXN0LnByb2dyZXNzID0gMDtcblx0ICAgICAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5wdXNoKHJlcXVlc3QpO1xuXHQgICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcblx0ICAgICAgICAgICAgICAgIFRvbmUuY29udGV4dC5kZWNvZGVBdWRpb0RhdGEocmVxdWVzdC5yZXNwb25zZSkudGhlbihmdW5jdGlvbiAoYnVmZikge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucHJvZ3Jlc3MgPSAxO1xuXHQgICAgICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3MoKTtcblx0ICAgICAgICAgICAgICAgICAgICBvbmxvYWQoYnVmZik7XG5cdCAgICAgICAgICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy9lbWl0IHRoZSBldmVudCBhdCB0aGUgZW5kXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIFRvbmUuQnVmZmVyLmVtaXQoJ2xvYWQnKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoJ1RvbmUuQnVmZmVyOiBjb3VsZCBub3QgZGVjb2RlIGF1ZGlvIGRhdGE6ICcgKyB1cmwpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBvbkVycm9yKCdUb25lLkJ1ZmZlcjogY291bGQgbm90IGxvY2F0ZSBmaWxlOiAnICsgdXJsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcblx0ICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG5cdCAgICAgICAgICAgICAgICAvL29ubHkgZ28gdG8gOTUlLCB0aGUgbGFzdCA1JSBpcyB3aGVuIHRoZSBhdWRpbyBpcyBkZWNvZGVkXG5cdCAgICAgICAgICAgICAgICByZXF1ZXN0LnByb2dyZXNzID0gZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwgKiAwLjk1O1xuXHQgICAgICAgICAgICAgICAgb25Qcm9ncmVzcygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmVxdWVzdC5zZW5kKCk7XG5cdCAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgYWxsIG9mIHRoZSBkb3dubG9hZHMgaW4gcHJvZ3Jlc3Ncblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmNhbmNlbERvd25sb2FkcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKHJlcXVlc3QpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuQnVmZmVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDaGVja3MgYSB1cmwncyBleHRlbnNpb24gdG8gc2VlIGlmIHRoZSBjdXJyZW50IGJyb3dzZXIgY2FuIHBsYXkgdGhhdCBmaWxlIHR5cGUuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIHVybC9leHRlbnNpb24gdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJuIHtCb29sZWFufSBJZiB0aGUgZmlsZSBleHRlbnNpb24gY2FuIGJlIHBsYXllZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlKFwid2F2XCIpOyAvL3JldHVybnMgdHJ1ZVxuXHRcdCAqIFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZShcInBhdGgvdG8vZmlsZS53YXZcIik7IC8vcmV0dXJucyB0cnVlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5zdXBwb3J0c1R5cGUgPSBmdW5jdGlvbiAodXJsKSB7XG5cdCAgICAgICAgdmFyIGV4dGVuc2lvbiA9IHVybC5zcGxpdCgnLicpO1xuXHQgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbltleHRlbnNpb24ubGVuZ3RoIC0gMV07XG5cdCAgICAgICAgdmFyIHJlc3BvbnNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXVkaW8nKS5jYW5QbGF5VHlwZSgnYXVkaW8vJyArIGV4dGVuc2lvbik7XG5cdCAgICAgICAgcmV0dXJuIHJlc3BvbnNlICE9PSAnJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyBhIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2hlbiBhbGwgb2YgdGhlIGJ1ZmZlcnMgaGF2ZSBsb2FkZWRcblx0XHQgKiAgQHJldHVybiB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUubG9hZGVkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvbmxvYWQsIG9uZXJyb3I7XG5cdCAgICAgICAgZnVuY3Rpb24gcmVtb3ZlRXZlbnRzKCkge1xuXHQgICAgICAgICAgICAvL3JlbW92ZSB0aGUgZXZlbnRzIHdoZW4gaXQncyByZXNvbHZlZFxuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vZmYoJ2xvYWQnLCBvbmxvYWQpO1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vZmYoJ2Vycm9yJywgb25lcnJvcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoc3VjY2VzcywgZmFpbCkge1xuXHQgICAgICAgICAgICBvbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICBzdWNjZXNzKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIG9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICBmYWlsKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIC8vYWRkIHRoZSBldmVudCBsaXN0ZW5lcnNcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub24oJ2xvYWQnLCBvbmxvYWQpO1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vbignZXJyb3InLCBvbmVycm9yKTtcblx0ICAgICAgICB9KS50aGVuKHJlbW92ZUV2ZW50cykuY2F0Y2goZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgcmVtb3ZlRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CdWZmZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBmaXJlLWFuZC1mb3JnZXQgT3NjaWxsYXRvck5vZGUuIEFkZHMgdGhlXG5cdFx0ICogICAgIGFiaWxpdHkgdG8gcmVzY2hlZHVsZSB0aGUgc3RvcCBtZXRob2QuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtICB7QXVkaW9CdWZmZXJ8VG9uZS5CdWZmZXJ9ICBidWZmZXIgICBUaGUgYnVmZmVyIHRvIHBsYXlcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBvbmxvYWQgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLk9zY2lsbGF0b3JOb2RlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlXG5cdFx0XHQgKiAgYnVmZmVyIHNvdXJjZSBpcyBkb25lIHBsYXlpbmcuXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG9wdGlvbnMub25lbmRlZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvciBzdGFydCB0aW1lXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yIHN0b3AgdGltZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIG5vZGUgd2hpY2ggZW52ZWxvcGVzIHRoZSBPc2NpbGxhdG9yTm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlICB7T3NjaWxsYXRvck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSB0aGlzLmNvbnRleHQuY3JlYXRlT3NjaWxsYXRvcigpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY29ubmVjdCh0aGlzLl9nYWluTm9kZSk7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LnZhbHVlID0gb3B0aW9ucy5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9vc2NpbGxhdG9yLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS52YWx1ZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB0aGF0IHRoZSBidWZmZXIgcmFtcHMgdG9cblx0XHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IDE7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Pc2NpbGxhdG9yTm9kZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ29uZW5kZWQnOiBUb25lLm5vT3Bcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIG9zY2lsbGF0b3IsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yTm9kZSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHBsYXliYWNrIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byB0ZXN0IHRoZSBzdGF0ZSBhdFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5TdGF0ZX0gIFRoZSBwbGF5YmFjayBzdGF0ZS4gXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5nZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xICYmIHRpbWUgPj0gdGhpcy5fc3RhcnRUaW1lICYmICh0aGlzLl9zdG9wVGltZSA9PT0gLTEgfHwgdGltZSA8PSB0aGlzLl9zdG9wVGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RhcnRlZDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0ICAgICAqIFN0YXJ0IHRoZSBvc2NpbGxhdG9yIG5vZGUgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAqIEBwYXJhbSAge1RpbWU9fSB0aW1lIFdoZW4gdG8gc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAqIEByZXR1cm4ge09zY2lsbGF0b3JOb2RlfSAgICAgIHRoaXNcblx0ICAgICAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgPT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRoaXMuX3N0YXJ0VGltZSk7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgbm93KTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCB0aGlzLl9zdGFydFRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGNhbGwgT3NjaWxsYXRvck5vZGUuc3RhcnQgbW9yZSB0aGFuIG9uY2UnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdCAgICAgKiBTZXRzIGFuIGFyYml0cmFyeSBjdXN0b20gcGVyaW9kaWMgd2F2ZWZvcm0gZ2l2ZW4gYSBQZXJpb2RpY1dhdmUuXG5cdCAgICAgKiBAcGFyYW0gIHtQZXJpb2RpY1dhdmV9IHBlcmlvZGljV2F2ZSBQZXJpb2RpY1dhdmUgc2hvdWxkIGJlIGNyZWF0ZWQgd2l0aCBjb250ZXh0LmNyZWF0ZVBlcmlvZGljV2F2ZVxuXHQgICAgICogQHJldHVybiB7T3NjaWxsYXRvck5vZGV9IHRoaXNcblx0ICAgICAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0UGVyaW9kaWNXYXZlID0gZnVuY3Rpb24gKHBlcmlvZGljV2F2ZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc2V0UGVyaW9kaWNXYXZlKHBlcmlvZGljV2F2ZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdCAgICAgKiBTdG9wIHRoZSBvc2NpbGxhdG9yIG5vZGUgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAqIEBwYXJhbSAge1RpbWU9fSB0aW1lIFdoZW4gdG8gc3RvcCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICogQHJldHVybiB7T3NjaWxsYXRvck5vZGV9ICAgICAgdGhpc1xuXHQgICAgICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL2NhbmNlbCB0aGUgcHJldmlvdXMgc3RvcFxuXHQgICAgICAgIHRoaXMuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIC8vcmVzY2hlZHVsZSBpdFxuXHQgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aGlzLl9zdG9wVGltZSk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0ID0gdGhpcy5jb250ZXh0LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGhpcy5ub3coKSk7XG5cdCAgICAgICAgICAgIHRoaXMub25lbmRlZCgpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5fc3RvcFRpbWUgLSB0aGlzLm5vdygpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGEgc2NoZWR1bGVkIHN0b3AgZXZlbnRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuT3NjaWxsYXRvck5vZGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5jYW5jZWxTdG9wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIHRoZSBzdG9wIGVudmVsb3BlXG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRoaXMuX3N0YXJ0VGltZSArIHRoaXMuc2FtcGxlVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgTWF0aC5tYXgodGhpcy5ub3coKSwgdGhpcy5fc3RhcnRUaW1lKSk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gLTE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvc2NpbGxhdG9yIHR5cGUuIEVpdGhlciAnc2luZScsICdzYXd0b290aCcsICdzcXVhcmUnLCBvciAndHJpYW5nbGUnXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvck5vZGUjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuT3NjaWxsYXRvck5vZGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9zY2lsbGF0b3JOb2RlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Pc2NpbGxhdG9yIHN1cHBvcnRzIGEgbnVtYmVyIG9mIGZlYXR1cmVzIGluY2x1ZGluZ1xuXHRcdCAqICAgICAgICAgcGhhc2Ugcm90YXRpb24sIG11bHRpcGxlIG9zY2lsbGF0b3IgdHlwZXMgKHNlZSBUb25lLk9zY2lsbGF0b3IudHlwZSksXG5cdFx0ICogICAgICAgICBhbmQgVHJhbnNwb3J0IHN5bmNpbmcgKHNlZSBUb25lLk9zY2lsbGF0b3Iuc3luY0ZyZXF1ZW5jeSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtmcmVxdWVuY3ldIFN0YXJ0aW5nIGZyZXF1ZW5jeVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gW3R5cGVdIFRoZSBvc2NpbGxhdG9yIHR5cGUuIFJlYWQgbW9yZSBhYm91dCB0eXBlIGJlbG93LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbWFrZSBhbmQgc3RhcnQgYSA0NDBoeiBzaW5lIHRvbmVcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcig0NDAsIFwic2luZVwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtYWluIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7T3NjaWxsYXRvck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcGVyaW9kaWMgd2F2ZVxuXHRcdFx0ICogIEB0eXBlIHtQZXJpb2RpY1dhdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3dhdmUgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYXJ0aWFscyBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucy5wYXJ0aWFscywgWzFdKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBiZXR3ZWVuIDAgLSAzNjBcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7c3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gbnVsbDtcblx0ICAgICAgICAvL3NldHVwXG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLl9waGFzZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ3BhcnRpYWxzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIE9zY2lsbGF0b3IgdHlwZXNcblx0XHQgKiAgQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlID0ge1xuXHQgICAgICAgIFNpbmU6ICdzaW5lJyxcblx0ICAgICAgICBUcmlhbmdsZTogJ3RyaWFuZ2xlJyxcblx0ICAgICAgICBTYXd0b290aDogJ3Nhd3Rvb3RoJyxcblx0ICAgICAgICBTcXVhcmU6ICdzcXVhcmUnLFxuXHQgICAgICAgIEN1c3RvbTogJ2N1c3RvbSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vbmV3IG9zY2lsbGF0b3Igd2l0aCBwcmV2aW91cyB2YWx1ZXNcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvck5vZGUoKTtcblx0ICAgICAgICBpZiAodGhpcy5fd2F2ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNldFBlcmlvZGljV2F2ZSh0aGlzLl93YXZlKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGNvbnRyb2wgc2lnbmFsIHRvIHRoZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSAmIGRldHVuZVxuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXN0YXJ0IHRoZSBvc2NpbGxhdG9yLiBEb2VzIG5vdCBzdG9wIHRoZSBvc2NpbGxhdG9yLCBidXQgaW5zdGVhZFxuXHRcdCAqIGp1c3QgY2FuY2VscyBhbnkgc2NoZWR1bGVkICdzdG9wJyBmcm9tIGJlaW5nIGludm9rZWQuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLk9zY2lsbGF0b3J9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGhpcy50b1NlY29uZHModGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTeW5jIHRoZSBzaWduYWwgdG8gdGhlIFRyYW5zcG9ydCdzIGJwbS4gQW55IGNoYW5nZXMgdG8gdGhlIHRyYW5zcG9ydHMgYnBtLFxuXHRcdCAqICB3aWxsIGFsc28gYWZmZWN0IHRoZSBvc2NpbGxhdG9ycyBmcmVxdWVuY3kuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgPSAxMjA7XG5cdFx0ICogb3NjLmZyZXF1ZW5jeS52YWx1ZSA9IDQ0MDtcblx0XHQgKiAvL3RoZSByYXRpb24gYmV0d2VlbiB0aGUgYnBtIGFuZCB0aGUgZnJlcXVlbmN5IHdpbGwgYmUgbWFpbnRhaW5lZFxuXHRcdCAqIG9zYy5zeW5jRnJlcXVlbmN5KCk7XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gMjQwO1xuXHRcdCAqIC8vIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IgaXMgZG91YmxlZCB0byA4ODBcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuc3luY0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVW5zeW5jIHRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5IGZyb20gdGhlIFRyYW5zcG9ydC5cblx0XHQgKiAgU2VlIFRvbmUuT3NjaWxsYXRvci5zeW5jRnJlcXVlbmN5XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUudW5zeW5jRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LnVuc3luY1NpZ25hbCh0aGlzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3I6IGVpdGhlciBzaW5lLCBzcXVhcmUsIHRyaWFuZ2xlLCBvciBzYXd0b290aC4gQWxzbyBjYXBhYmxlIG9mXG5cdFx0ICogc2V0dGluZyB0aGUgZmlyc3QgeCBudW1iZXIgb2YgcGFydGlhbHMgb2YgdGhlIG9zY2lsbGF0b3IuIEZvciBleGFtcGxlOiBcInNpbmU0XCIgd291bGRcblx0XHQgKiBzZXQgYmUgdGhlIGZpcnN0IDQgcGFydGlhbHMgb2YgdGhlIHNpbmUgd2F2ZSBhbmQgXCJ0cmlhbmdsZThcIiB3b3VsZCBzZXQgdGhlIGZpcnN0XG5cdFx0ICogOCBwYXJ0aWFscyBvZiB0aGUgdHJpYW5nbGUgd2F2ZS5cblx0XHQgKiA8YnI+PGJyPlxuXHRcdCAqIFVzZXMgUGVyaW9kaWNXYXZlIGludGVybmFsbHkgZXZlbiBmb3IgbmF0aXZlIHR5cGVzIHNvIHRoYXQgaXQgY2FuIHNldCB0aGUgcGhhc2UuXG5cdFx0ICogUGVyaW9kaWNXYXZlIGVxdWF0aW9ucyBhcmUgZnJvbSB0aGVcblx0XHQgKiBbV2Via2l0IFdlYiBBdWRpbyBpbXBsZW1lbnRhdGlvbl0oaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9jb2Rlc2VhcmNoI2Nocm9taXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvU291cmNlL21vZHVsZXMvd2ViYXVkaW8vUGVyaW9kaWNXYXZlLmNwcCZzcT1wYWNrYWdlOmNocm9taXVtKS5cblx0XHQgKlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL3NldCBpdCB0byBhIHNxdWFyZSB3YXZlXG5cdFx0ICogb3NjLnR5cGUgPSBcInNxdWFyZVwiO1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdGhlIGZpcnN0IDYgcGFydGlhbHMgb2YgYSBzYXd0b290aCB3YXZlXG5cdFx0ICogb3NjLnR5cGUgPSBcInNhd3Rvb3RoNlwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdmFyIGlzQmFzaWNUeXBlID0gW1xuXHQgICAgICAgICAgICAgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2luZSxcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNxdWFyZSxcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlRyaWFuZ2xlLFxuXHQgICAgICAgICAgICAgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2F3dG9vdGhcblx0ICAgICAgICAgICAgXS5pbmNsdWRlcyh0eXBlKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3BoYXNlID09PSAwICYmIGlzQmFzaWNUeXBlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93YXZlID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIC8vanVzdCBnbyB3aXRoIHRoZSBiYXNpYyBhcHByb2FjaFxuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPT09IHR5cGU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29lZnMgPSB0aGlzLl9nZXRSZWFsSW1hZ2luYXJ5KHR5cGUsIHRoaXMuX3BoYXNlKTtcblx0ICAgICAgICAgICAgICAgIHZhciBwZXJpb2RpY1dhdmUgPSB0aGlzLmNvbnRleHQuY3JlYXRlUGVyaW9kaWNXYXZlKGNvZWZzWzBdLCBjb2Vmc1sxXSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93YXZlID0gcGVyaW9kaWNXYXZlO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNldFBlcmlvZGljV2F2ZSh0aGlzLl93YXZlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSByZWFsIGFuZCBpbWFnaW5hcnkgY29tcG9uZW50cyBiYXNlZFxuXHRcdCAqICBvbiB0aGUgb3NjaWxsYXRvciB0eXBlLlxuXHRcdCAqICBAcmV0dXJucyB7QXJyYXl9IFtyZWFsLCBpbWFnaW5hcnldXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9nZXRSZWFsSW1hZ2luYXJ5ID0gZnVuY3Rpb24gKHR5cGUsIHBoYXNlKSB7XG5cdCAgICAgICAgdmFyIGZmdFNpemUgPSA0MDk2O1xuXHQgICAgICAgIHZhciBwZXJpb2RpY1dhdmVTaXplID0gZmZ0U2l6ZSAvIDI7XG5cdCAgICAgICAgdmFyIHJlYWwgPSBuZXcgRmxvYXQzMkFycmF5KHBlcmlvZGljV2F2ZVNpemUpO1xuXHQgICAgICAgIHZhciBpbWFnID0gbmV3IEZsb2F0MzJBcnJheShwZXJpb2RpY1dhdmVTaXplKTtcblx0ICAgICAgICB2YXIgcGFydGlhbENvdW50ID0gMTtcblx0ICAgICAgICBpZiAodHlwZSA9PT0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tKSB7XG5cdCAgICAgICAgICAgIHBhcnRpYWxDb3VudCA9IHRoaXMuX3BhcnRpYWxzLmxlbmd0aCArIDE7XG5cdCAgICAgICAgICAgIHBlcmlvZGljV2F2ZVNpemUgPSBwYXJ0aWFsQ291bnQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHBhcnRpYWwgPSAvXihzaW5lfHRyaWFuZ2xlfHNxdWFyZXxzYXd0b290aCkoXFxkKykkLy5leGVjKHR5cGUpO1xuXHQgICAgICAgICAgICBpZiAocGFydGlhbCkge1xuXHQgICAgICAgICAgICAgICAgcGFydGlhbENvdW50ID0gcGFyc2VJbnQocGFydGlhbFsyXSkgKyAxO1xuXHQgICAgICAgICAgICAgICAgdHlwZSA9IHBhcnRpYWxbMV07XG5cdCAgICAgICAgICAgICAgICBwYXJ0aWFsQ291bnQgPSBNYXRoLm1heChwYXJ0aWFsQ291bnQsIDIpO1xuXHQgICAgICAgICAgICAgICAgcGVyaW9kaWNXYXZlU2l6ZSA9IHBhcnRpYWxDb3VudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBmb3IgKHZhciBuID0gMTsgbiA8IHBlcmlvZGljV2F2ZVNpemU7ICsrbikge1xuXHQgICAgICAgICAgICB2YXIgcGlGYWN0b3IgPSAyIC8gKG4gKiBNYXRoLlBJKTtcblx0ICAgICAgICAgICAgdmFyIGI7XG5cdCAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNpbmU6XG5cdCAgICAgICAgICAgICAgICBiID0gbiA8PSBwYXJ0aWFsQ291bnQgPyAxIDogMDtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNxdWFyZTpcblx0ICAgICAgICAgICAgICAgIGIgPSBuICYgMSA/IDIgKiBwaUZhY3RvciA6IDA7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5TYXd0b290aDpcblx0ICAgICAgICAgICAgICAgIGIgPSBwaUZhY3RvciAqIChuICYgMSA/IDEgOiAtMSk7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5UcmlhbmdsZTpcblx0ICAgICAgICAgICAgICAgIGlmIChuICYgMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGIgPSAyICogKHBpRmFjdG9yICogcGlGYWN0b3IpICogKG4gLSAxID4+IDEgJiAxID8gLTEgOiAxKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYiA9IDA7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b206XG5cdCAgICAgICAgICAgICAgICBiID0gdGhpcy5fcGFydGlhbHNbbiAtIDFdO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLk9zY2lsbGF0b3I6IGludmFsaWQgdHlwZTogJyArIHR5cGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChiICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZWFsW25dID0gLWIgKiBNYXRoLnNpbihwaGFzZSAqIG4pO1xuXHQgICAgICAgICAgICAgICAgaW1hZ1tuXSA9IGIgKiBNYXRoLmNvcyhwaGFzZSAqIG4pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmVhbFtuXSA9IDA7XG5cdCAgICAgICAgICAgICAgICBpbWFnW25dID0gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gW1xuXHQgICAgICAgICAgICByZWFsLFxuXHQgICAgICAgICAgICBpbWFnXG5cdCAgICAgICAgXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29tcHV0ZSB0aGUgaW52ZXJzZSBGRlQgZm9yIGEgZ2l2ZW4gcGhhc2UuXG5cdFx0ICogIEBwYXJhbSAge0Zsb2F0MzJBcnJheX0gIHJlYWxcblx0XHQgKiAgQHBhcmFtICB7RmxvYXQzMkFycmF5fSAgaW1hZ1xuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIHBoYXNlXG5cdFx0ICogIEByZXR1cm4gIHtBdWRpb1JhbmdlfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5faW52ZXJzZUZGVCA9IGZ1bmN0aW9uIChyZWFsLCBpbWFnLCBwaGFzZSkge1xuXHQgICAgICAgIHZhciBzdW0gPSAwO1xuXHQgICAgICAgIHZhciBsZW4gPSByZWFsLmxlbmd0aDtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIHN1bSArPSByZWFsW2ldICogTWF0aC5jb3MoaSAqIHBoYXNlKSArIGltYWdbaV0gKiBNYXRoLnNpbihpICogcGhhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gc3VtO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcmV0dXJuICB7QXVkaW9SYW5nZX1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX2dldEluaXRpYWxWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY29lZnMgPSB0aGlzLl9nZXRSZWFsSW1hZ2luYXJ5KHRoaXMuX3R5cGUsIDApO1xuXHQgICAgICAgIHZhciByZWFsID0gY29lZnNbMF07XG5cdCAgICAgICAgdmFyIGltYWcgPSBjb2Vmc1sxXTtcblx0ICAgICAgICB2YXIgbWF4VmFsdWUgPSAwO1xuXHQgICAgICAgIHZhciB0d29QaSA9IE1hdGguUEkgKiAyO1xuXHQgICAgICAgIC8vY2hlY2sgZm9yIHBlYWtzIGluIDggcGxhY2VzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgbWF4VmFsdWUgPSBNYXRoLm1heCh0aGlzLl9pbnZlcnNlRkZUKHJlYWwsIGltYWcsIGkgLyA4ICogdHdvUGkpLCBtYXhWYWx1ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAtdGhpcy5faW52ZXJzZUZGVChyZWFsLCBpbWFnLCB0aGlzLl9waGFzZSkgLyBtYXhWYWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgIT09IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnRpYWxzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgICAgICB0aGlzLnR5cGUgPSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b207XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGhhc2UgPSAxODA7IC8vZmxpcHMgdGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGhhc2UgKiAoMTgwIC8gTWF0aC5QSSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9waGFzZSA9IHBoYXNlICogTWF0aC5QSSAvIDE4MDtcblx0ICAgICAgICAgICAgLy9yZXNldCB0aGUgdHlwZVxuXHQgICAgICAgICAgICB0aGlzLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3QuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl93YXZlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEF1ZGlvVG9HYWluIGNvbnZlcnRzIGFuIGlucHV0IGluIEF1ZGlvUmFuZ2UgWy0xLDFdIHRvIE5vcm1hbFJhbmdlIFswLDFdLiBcblx0XHQgKiAgICAgICAgIFNlZSBUb25lLkdhaW5Ub0F1ZGlvLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgYTJnID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ub0dhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ub3JtID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAoeCkge1xuXHQgICAgICAgICAgICByZXR1cm4gKHggKyAxKSAvIDI7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdWRpb1RvR2FpbiwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb1RvR2Fpbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb1RvR2Fpbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ub3JtLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ub3JtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdWRpb1RvR2Fpbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlplcm8gb3V0cHV0cyAwJ3MgYXQgYXVkaW8tcmF0ZS4gVGhlIHJlYXNvbiB0aGlzIGhhcyB0byBiZVxuXHRcdCAqICAgICAgICAgaXQncyBvd24gY2xhc3MgaXMgdGhhdCBtYW55IGJyb3dzZXJzIG9wdGltaXplIG91dCBUb25lLlNpZ25hbFxuXHRcdCAqICAgICAgICAgd2l0aCBhIHZhbHVlIG9mIDAgYW5kIHdpbGwgbm90IHByb2Nlc3Mgbm9kZXMgZnVydGhlciBkb3duIHRoZSBncmFwaC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuWmVybyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmdldENvbnN0YW50KDApLmNvbm5lY3QodGhpcy5fZ2Fpbik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5aZXJvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlplcm99ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlplcm8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuWmVybztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBMRk8gc3RhbmRzIGZvciBsb3cgZnJlcXVlbmN5IG9zY2lsbGF0b3IuIFRvbmUuTEZPIHByb2R1Y2VzIGFuIG91dHB1dCBzaWduYWxcblx0XHQgKiAgICAgICAgICB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gQXVkaW9QYXJhbSBvciBUb25lLlNpZ25hbFxuXHRcdCAqICAgICAgICAgIGluIG9yZGVyIHRvIG1vZHVsYXRlIHRoYXQgcGFyYW1ldGVyIHdpdGggYW4gb3NjaWxsYXRvci4gVGhlIExGTyBjYW5cblx0XHQgKiAgICAgICAgICBhbHNvIGJlIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0IHRvIHN0YXJ0L3N0b3AgYW5kIGNoYW5nZSB3aGVuIHRoZSB0ZW1wbyBjaGFuZ2VzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRpb24uIFR5cGljYWxseSwgTEZPcyB3aWxsIGJlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZyZXF1ZW5jeSByYW5nZSBvZiAwLjEgdG8gMTAgaGVydHouXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gbWluIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZSBvZiB0aGUgTEZPLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IG1heCBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgTEZPLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBsZm8gPSBuZXcgVG9uZS5MRk8oXCI0blwiLCA0MDAsIDQwMDApO1xuXHRcdCAqIGxmby5jb25uZWN0KGZpbHRlci5mcmVxdWVuY3kpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ21pbicsXG5cdCAgICAgICAgICAgICdtYXgnXG5cdCAgICAgICAgXSwgVG9uZS5MRk8pO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICd0eXBlJzogb3B0aW9ucy50eXBlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbydzIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbXBsaXR1ZGUgb2YgdGhlIExGTywgd2hpY2ggY29udHJvbHMgdGhlIG91dHB1dCByYW5nZSBiZXR3ZWVuXG5cdFx0XHQgKiB0aGUgbWluIGFuZCBtYXggb3V0cHV0LiBGb3IgZXhhbXBsZSBpZiB0aGUgbWluIGlzIC0xMCBhbmQgdGhlIG1heFxuXHRcdFx0ICogaXMgMTAsIHNldHRpbmcgdGhlIGFtcGxpdHVkZSB0byAwLjUgd291bGQgbWFrZSB0aGUgTEZPIG1vZHVsYXRlXG5cdFx0XHQgKiBiZXR3ZWVuIC01IGFuZCA1LlxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlID0gdGhpcy5fb3NjaWxsYXRvci52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUudW5pdHMgPSBUb25lLlR5cGUuTm9ybWFsUmFuZ2U7XG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUudmFsdWUgPSBvcHRpb25zLmFtcGxpdHVkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lnbmFsIHdoaWNoIGlzIG91dHB1dCB3aGVuIHRoZSBMRk8gaXMgc3RvcHBlZFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMCwgVG9uZS5UeXBlLkF1ZGlvUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEp1c3Qgb3V0cHV0cyB6ZXJvcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5aZXJvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl96ZXJvcyA9IG5ldyBUb25lLlplcm8oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgdGhhdCB0aGUgTEZPIG91dHB1dHMgd2hlbiBpdCdzIHN0b3BwZWRcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFZhbHVlID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BdWRpb1RvR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYTJnID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGVyID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TY2FsZShvcHRpb25zLm1pbiwgb3B0aW9ucy5tYXgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB1bml0cyBvZiB0aGUgTEZPICh1c2VkIGZvciBjb252ZXJ0aW5nKVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlR5cGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3VuaXRzID0gVG9uZS5UeXBlLkRlZmF1bHQ7XG5cdCAgICAgICAgdGhpcy51bml0cyA9IG9wdGlvbnMudW5pdHM7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jaGFpbih0aGlzLl9hMmcsIHRoaXMuX3NjYWxlcik7XG5cdCAgICAgICAgdGhpcy5femVyb3MuY29ubmVjdCh0aGlzLl9hMmcpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuY29ubmVjdCh0aGlzLl9hMmcpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5MRk8sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICpcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6ICc0bicsXG5cdCAgICAgICAgJ2FtcGxpdHVkZSc6IDEsXG5cdCAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlZmF1bHRcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgTEZPIHdpbGwgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnNldFZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgTEZPIHdpbGwgc3RvcFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5zZXRWYWx1ZUF0VGltZSh0aGlzLl9zdG9wcGVkVmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3luYyB0aGUgc3RhcnQvc3RvcC9wYXVzZSB0byB0aGUgdHJhbnNwb3J0XG5cdFx0ICogIGFuZCB0aGUgZnJlcXVlbmN5IHRvIHRoZSBicG0gb2YgdGhlIHRyYW5zcG9ydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgbGZvLmZyZXF1ZW5jeS52YWx1ZSA9IFwiOG5cIjtcblx0XHQgKiAgbGZvLnN5bmMoKS5zdGFydCgwKVxuXHRcdCAqICAvL3RoZSByYXRlIG9mIHRoZSBMRk8gd2lsbCBhbHdheXMgYmUgYW4gZWlnaHRoIG5vdGUsXG5cdFx0ICogIC8vZXZlbiBhcyB0aGUgdGVtcG8gY2hhbmdlc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zeW5jRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHVuc3luYyB0aGUgTEZPIGZyb20gdHJhbnNwb3J0IGNvbnRyb2xcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci51bnN5bmNGcmVxdWVuY3koKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaXVtdW0gb3V0cHV0IG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdG9Vbml0cyh0aGlzLl9zY2FsZXIubWluKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICBtaW4gPSB0aGlzLl9mcm9tVW5pdHMobWluKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGVyLm1pbiA9IG1pbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIG91dHB1dCBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvVW5pdHModGhpcy5fc2NhbGVyLm1heCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgbWF4ID0gdGhpcy5fZnJvbVVuaXRzKG1heCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlci5tYXggPSBtYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvcjogc2luZSwgc3F1YXJlLCBzYXd0b290aCwgdHJpYW5nbGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BwZWRWYWx1ZSA9IHRoaXMuX29zY2lsbGF0b3IuX2dldEluaXRpYWxWYWx1ZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnZhbHVlID0gdGhpcy5fc3RvcHBlZFZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BwZWRWYWx1ZSA9IHRoaXMuX29zY2lsbGF0b3IuX2dldEluaXRpYWxWYWx1ZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnZhbHVlID0gdGhpcy5fc3RvcHBlZFZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG91dHB1dCB1bml0cyBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7VG9uZS5UeXBlfVxuXHRcdCAqIEBuYW1lIHVuaXRzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAndW5pdHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl91bml0cztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB2YXIgY3VycmVudE1pbiA9IHRoaXMubWluO1xuXHQgICAgICAgICAgICB2YXIgY3VycmVudE1heCA9IHRoaXMubWF4O1xuXHQgICAgICAgICAgICAvL2NvbnZlcnQgdGhlIG1pbiBhbmQgdGhlIG1heFxuXHQgICAgICAgICAgICB0aGlzLl91bml0cyA9IHZhbDtcblx0ICAgICAgICAgICAgdGhpcy5taW4gPSBjdXJyZW50TWluO1xuXHQgICAgICAgICAgICB0aGlzLm1heCA9IGN1cnJlbnRNYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnN0YXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGUgTEZPIHRvIGFuIEF1ZGlvUGFyYW0sIEF1ZGlvTm9kZSwgb3IgVG9uZSBOb2RlLlxuXHRcdCAqICBUb25lLkxGTyB3aWxsIGF1dG9tYXRpY2FsbHkgY29udmVydCB0byB0aGUgZGVzdGluYXRpb24gdW5pdHMgb2YgdGhlXG5cdFx0ICogIHdpbGwgZ2V0IHRoZSB1bml0cyBmcm9tIHRoZSBjb25uZWN0ZWQgbm9kZS5cblx0XHQgKiAgQHBhcmFtICB7VG9uZSB8IEF1ZGlvUGFyYW0gfCBBdWRpb05vZGV9IG5vZGVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBvdXRwdXQgdG8gY29ubmVjdCBmcm9tXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBpbnB1dCB0byBjb25uZWN0IHRvXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmIChub2RlLmNvbnN0cnVjdG9yID09PSBUb25lLlNpZ25hbCB8fCBub2RlLmNvbnN0cnVjdG9yID09PSBUb25lLlBhcmFtKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udmVydCA9IG5vZGUuY29udmVydDtcblx0ICAgICAgICAgICAgdGhpcy51bml0cyA9IG5vZGUudW5pdHM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBwcml2YXRlIG1ldGhvZCBib3Jyb3dlZCBmcm9tIFBhcmFtIGNvbnZlcnRzXG5cdFx0ICogIHVuaXRzIGZyb20gdGhlaXIgZGVzdGluYXRpb24gdmFsdWVcblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuX2Zyb21Vbml0cyA9IFRvbmUuUGFyYW0ucHJvdG90eXBlLl9mcm9tVW5pdHM7XG5cdCAgICAvKipcblx0XHQgKiAgcHJpdmF0ZSBtZXRob2QgYm9ycm93ZWQgZnJvbSBQYXJhbSBjb252ZXJ0c1xuXHRcdCAqICB1bml0cyB0byB0aGVpciBkZXN0aW5hdGlvbiB2YWx1ZVxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5fdG9Vbml0cyA9IFRvbmUuUGFyYW0ucHJvdG90eXBlLl90b1VuaXRzO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc2Nvbm5lY3QgYW5kIGRpc3Bvc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5femVyb3MuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3plcm9zID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYTJnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hMmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmFtcGxpdHVkZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTEZPO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5MaW1pdGVyIHdpbGwgbGltaXQgdGhlIGxvdWRuZXNzIG9mIGFuIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgIEl0IGlzIGNvbXBvc2VkIG9mIGEgVG9uZS5Db21wcmVzc29yIHdpdGggYSBmYXN0IGF0dGFja1xuXHRcdCAqICAgICAgICAgYW5kIHJlbGVhc2UuIExpbWl0ZXJzIGFyZSBjb21tb25seSB1c2VkIHRvIHNhZmVndWFyZCBhZ2FpbnN0XG5cdFx0ICogICAgICAgICBzaWduYWwgY2xpcHBpbmcuIFVubGlrZSBhIGNvbXByZXNzb3IsIGxpbWl0ZXJzIGRvIG5vdCBwcm92aWRlXG5cdFx0ICogICAgICAgICBzbW9vdGggZ2FpbiByZWR1Y3Rpb24gYW5kIGFsbW9zdCBjb21wbGV0ZWx5IHByZXZlbnRcblx0XHQgKiAgICAgICAgIGFkZGl0aW9uYWwgZ2FpbiBhYm92ZSB0aGUgdGhyZXNob2xkLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB0aHJlc2hvbGQgVGhlIHRoZXNob2xkIGFib3ZlIHdoaWNoIHRoZSBsaW1pdGluZyBpcyBhcHBsaWVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgbGltaXRlciA9IG5ldyBUb25lLkxpbWl0ZXIoLTYpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaW1pdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndGhyZXNob2xkJ10sIFRvbmUuTGltaXRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29tcHJlc3NvclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Db21wcmVzc29yKHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCc6IG9wdGlvbnMudGhyZXNob2xkXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdGhyZXNob2xkIG9mIG9mIHRoZSBsaW1pdGVyXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbH1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gdGhpcy5fY29tcHJlc3Nvci50aHJlc2hvbGQ7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3RocmVzaG9sZCcpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTGltaXRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkxpbWl0ZXIuZGVmYXVsdHMgPSB7ICd0aHJlc2hvbGQnOiAtMTIgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTGltaXRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaW1pdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3Nvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3NvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3RocmVzaG9sZCcpO1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5MaW1pdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Mb3dwYXNzIGlzIGEgbG93cGFzcyBmZWVkYmFjayBjb21iIGZpbHRlci4gSXQgaXMgc2ltaWxhciB0b1xuXHRcdCAqICAgICAgICAgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIsIGJ1dCBpbmNsdWRlcyBhIGxvd3Bhc3MgZmlsdGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtkZWxheVRpbWVdIFRoZSBkZWxheSB0aW1lIG9mIHRoZSBjb21iIGZpbHRlclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gcmVzb25hbmNlIFRoZSByZXNvbmFuY2UgKGZlZWRiYWNrKSBvZiB0aGUgY29tYiBmaWx0ZXJcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3k9fSBkYW1wZW5pbmcgVGhlIGN1dG9mZiBvZiB0aGUgbG93cGFzcyBmaWx0ZXIgZGFtcGVucyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGFzIGl0IGlzIGZlZGJhY2suXG5cdFx0ICovXG5cdCAgICBUb25lLkxvd3Bhc3NDb21iRmlsdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0sIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheVRpbWUgb2YgdGhlIGNvbWIgZmlsdGVyLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZGVsYXkuZGVsYXlUaW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsb3dwYXNzIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlICB7QmlxdWFkRmlsdGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG93cGFzcyA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MuUS52YWx1ZSA9IC0zLjAxMDI5OTk1NjYzOTgxMjU7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcy50eXBlID0gJ2xvd3Bhc3MnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkYW1wZW5pbmcgY29udHJvbCBvZiB0aGUgZmVlZGJhY2tcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9sb3dwYXNzLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5kYW1wZW5pbmdcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmVlZGJhY2sgZ2FpblxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnJlc29uYW5jZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIG9mIHRoZSBkZWxheWVkIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSB0aGlzLl9mZWVkYmFjay5nYWluO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9kZWxheS5jaGFpbih0aGlzLl9sb3dwYXNzLCB0aGlzLl9mZWVkYmFjaywgdGhpcy5fZGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZycsXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxvd3Bhc3NDb21iRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjEsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDAuNSxcblx0ICAgICAgICAnZGFtcGVuaW5nJzogMzAwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTG93cGFzc0NvbWJGaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcy5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2suZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Mb3dwYXNzQ29tYkZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1lcmdlIGJyaW5ncyB0d28gc2lnbmFscyBpbnRvIHRoZSBsZWZ0IGFuZCByaWdodFxuXHRcdCAqICAgICAgICAgIGNoYW5uZWxzIG9mIGEgc2luZ2xlIHN0ZXJlbyBjaGFubmVsLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG1lcmdlID0gbmV3IFRvbmUuTWVyZ2UoKS50b01hc3RlcigpO1xuXHRcdCAqIC8vcm91dGluZyBhIHNpbmUgdG9uZSBpbiB0aGUgbGVmdCBjaGFubmVsXG5cdFx0ICogLy9hbmQgbm9pc2UgaW4gdGhlIHJpZ2h0IGNoYW5uZWxcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QobWVyZ2UubGVmdCk7XG5cdFx0ICogdmFyIG5vaXNlID0gbmV3IFRvbmUuTm9pc2UoKS5jb25uZWN0KG1lcmdlLnJpZ2h0KTtcblx0XHQgKiAvL3N0YXJ0aW5nIG91ciBvc2NpbGxhdG9yc1xuXHRcdCAqIG5vaXNlLnN0YXJ0KCk7XG5cdFx0ICogb3NjLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1lcmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsZWZ0IGlucHV0IGNoYW5uZWwuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubGVmdCA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJpZ2h0IGlucHV0IGNoYW5uZWwuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzFdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWVyZ2VyIG5vZGUgZm9yIHRoZSB0d28gY2hhbm5lbHNcblx0XHRcdCAqICBAdHlwZSB7Q2hhbm5lbE1lcmdlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlciA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNoYW5uZWxNZXJnZXIoMik7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMubGVmdC5jb25uZWN0KHRoaXMuX21lcmdlciwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5yaWdodC5jb25uZWN0KHRoaXMuX21lcmdlciwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmNoYW5uZWxDb3VudCA9IDE7XG5cdCAgICAgICAgdGhpcy5yaWdodC5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgIHRoaXMubGVmdC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICB0aGlzLnJpZ2h0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWVyZ2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVyZ2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVyZ2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmxlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yaWdodC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yaWdodCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2VyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1lcmdlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTWV0ZXIgZ2V0cyB0aGUgW1JNU10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUm9vdF9tZWFuX3NxdWFyZSlcblx0XHQgKiAgICAgICAgICBvZiBhbiBpbnB1dCBzaWduYWwgd2l0aCBzb21lIGF2ZXJhZ2luZyBhcHBsaWVkLiBJdCBjYW4gYWxzbyBnZXQgdGhlIHJhd1xuXHRcdCAqICAgICAgICAgIHZhbHVlIG9mIHRoZSBpbnB1dCBzaWduYWwuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHNtb290aGluZyBUaGUgYW1vdW50IG9mIHNtb290aGluZyBhcHBsaWVkIGJldHdlZW4gZnJhbWVzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtZXRlciA9IG5ldyBUb25lLk1ldGVyKCk7XG5cdFx0ICogdmFyIG1pYyA9IG5ldyBUb25lLlVzZXJNZWRpYSgpLm9wZW4oKTtcblx0XHQgKiAvL2Nvbm5lY3QgbWljIHRvIHRoZSBtZXRlclxuXHRcdCAqIG1pYy5jb25uZWN0KG1ldGVyKTtcblx0XHQgKiAvL3RoZSBjdXJyZW50IGxldmVsIG9mIHRoZSBtaWMgaW5wdXQgaW4gZGVjaWJlbHNcblx0XHQgKiB2YXIgbGV2ZWwgPSBtZXRlci5nZXRWYWx1ZSgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3Ntb290aGluZyddLCBUb25lLk1ldGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlIHdoaWNoIGNvbXB1dGVzIHRoZSBsZXZlbHMuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQW5hbHlzZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLl9hbmFseXNlciA9IG5ldyBUb25lLkFuYWx5c2VyKCd3YXZlZm9ybScsIDEwMjQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgY2FycnlvdmVyIGJldHdlZW4gdGhlIGN1cnJlbnQgYW5kIGxhc3QgZnJhbWUuXG5cdFx0XHQgKiAgT25seSBhcHBsaWVkIG1ldGVyIGZvciBcImxldmVsXCIgdHlwZS5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc21vb3RoaW5nID0gb3B0aW9ucy5zbW9vdGhpbmc7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NZXRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5kZWZhdWx0cyA9IHsgJ3Ntb290aGluZyc6IDAuOCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgY3VycmVudCBkZWNpYmVsIHZhbHVlIG9mIHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgQHJldHVybnMge0RlY2liZWxzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5wcm90b3R5cGUuZ2V0TGV2ZWwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIudHlwZSA9ICdmZnQnO1xuXHQgICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgICAgIHZhciBvZmZzZXQgPSAyODtcblx0ICAgICAgICAvLyBub3JtYWxpemVzIG1vc3Qgc2lnbmFsIGxldmVsc1xuXHQgICAgICAgIC8vIFRPRE86IGNvbXB1dGUgbG91ZG5lc3MgZnJvbSBGRlRcblx0ICAgICAgICByZXR1cm4gTWF0aC5tYXguYXBwbHkodGhpcywgdmFsdWVzKSArIG9mZnNldDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzaWduYWwgdmFsdWUgb2YgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIudHlwZSA9ICd3YXZlZm9ybSc7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgICAgICByZXR1cm4gdmFsdWVbMF07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQSB2YWx1ZSBmcm9tIDAgLT4gMSB3aGVyZSAwIHJlcHJlc2VudHMgbm8gdGltZSBhdmVyYWdpbmcgd2l0aCB0aGUgbGFzdCBhbmFseXNpcyBmcmFtZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5NZXRlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHNtb290aGluZ1xuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0ZXIucHJvdG90eXBlLCAnc21vb3RoaW5nJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc21vb3RoaW5nO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZyA9IHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWV0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1ldGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqXHRAY2xhc3MgIFRvbmUuU3BsaXQgc3BsaXRzIGFuIGluY29taW5nIHNpZ25hbCBpbnRvIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNwbGl0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0XHQgKiBzdGVyZW9TaWduYWwuY29ubmVjdChzcGxpdCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNwbGl0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDAsIDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtDaGFubmVsU3BsaXR0ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IHRoaXMuaW5wdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKDIpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNoYW5uZWxDb3VudCA9IDI7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTGVmdCBjaGFubmVsIG91dHB1dC5cblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLm91dHB1dFswXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBSaWdodCBjaGFubmVsIG91dHB1dC5cblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzFdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gdGhpcy5vdXRwdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNvbm5lY3QodGhpcy5sZWZ0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jb25uZWN0KHRoaXMucmlnaHQsIDEsIDApO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3BsaXQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3BsaXR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3BsaXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TcGxpdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1pZC9TaWRlIHByb2Nlc3Npbmcgc2VwYXJhdGVzIHRoZSB0aGUgJ21pZCcgc2lnbmFsXG5cdFx0ICogICAgICAgICAod2hpY2ggY29tZXMgb3V0IG9mIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBjaGFubmVsKVxuXHRcdCAqICAgICAgICAgYW5kIHRoZSAnc2lkZScgKHdoaWNoIG9ubHkgY29tZXMgb3V0IG9mIHRoZSB0aGUgc2lkZSBjaGFubmVscykuIDxicj48YnI+XG5cdFx0ICogICAgICAgICA8Y29kZT5cblx0XHQgKiAgICAgICAgIE1pZCA9IChMZWZ0K1JpZ2h0KS9zcXJ0KDIpOyAgIC8vIG9idGFpbiBtaWQtc2lnbmFsIGZyb20gbGVmdCBhbmQgcmlnaHQ8YnI+XG5cdFx0ICogICAgICAgICBTaWRlID0gKExlZnQtUmlnaHQpL3NxcnQoMik7ICAgLy8gb2J0YWluIHNpZGUtc2lnbmFsIGZyb20gbGVmdCBhbmQgcmlnaDxicj5cblx0XHQgKiAgICAgICAgIDwvY29kZT5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlU3BsaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMCwgMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3BsaXQgdGhlIGluY29taW5nIHNpZ25hbCBpbnRvIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgc2VuZC4gQ29ubmVjdCB0byBtaWQgcHJvY2Vzc2luZy4gQWxpYXMgZm9yXG5cdFx0XHQgKiAgPGNvZGU+b3V0cHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZEFkZCA9IG5ldyBUb25lLkFkZCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIF9taWRBZGQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gdGhpcy5vdXRwdXRbMF0gPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIG91dHB1dC4gQ29ubmVjdCB0byBzaWRlIHByb2Nlc3NpbmcuIEFsc28gT3V0cHV0IDFcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgX21pZEFkZCBieSBzcXJ0KDEvMilcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlID0gdGhpcy5vdXRwdXRbMV0gPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fbWlkQWRkLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX21pZEFkZCwgMSwgMSk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuY29ubmVjdCh0aGlzLl9zaWRlU3VidHJhY3QsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fc2lkZVN1YnRyYWN0LCAxLCAxKTtcblx0ICAgICAgICB0aGlzLl9taWRBZGQuY29ubmVjdCh0aGlzLm1pZCk7XG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0LmNvbm5lY3QodGhpcy5zaWRlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVTcGxpdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1pZFNpZGVTcGxpdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlU3BsaXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5zaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRBZGQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZEFkZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaWRlU3VidHJhY3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZVNwbGl0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTWlkL1NpZGUgcHJvY2Vzc2luZyBzZXBhcmF0ZXMgdGhlIHRoZSAnbWlkJyBzaWduYWxcblx0XHQgKiAgICAgICAgICh3aGljaCBjb21lcyBvdXQgb2YgYm90aCB0aGUgbGVmdCBhbmQgdGhlIHJpZ2h0IGNoYW5uZWwpXG5cdFx0ICogICAgICAgICBhbmQgdGhlICdzaWRlJyAod2hpY2ggb25seSBjb21lcyBvdXQgb2YgdGhlIHRoZSBzaWRlIGNoYW5uZWxzKS5cblx0XHQgKiAgICAgICAgIE1pZFNpZGVNZXJnZSBtZXJnZXMgdGhlIG1pZCBhbmQgc2lkZSBzaWduYWwgYWZ0ZXIgdGhleSd2ZSBiZWVuIHNlcGVyYXRlZFxuXHRcdCAqICAgICAgICAgYnkgVG9uZS5NaWRTaWRlU3BsaXQuPGJyPjxicj5cblx0XHQgKiAgICAgICAgIDxjb2RlPlxuXHRcdCAqICAgICAgICAgTGVmdCA9IChNaWQrU2lkZSkvc3FydCgyKTsgICAvLyBvYnRhaW4gbGVmdCBzaWduYWwgZnJvbSBtaWQgYW5kIHNpZGU8YnI+XG5cdFx0ICogICAgICAgICBSaWdodCA9IChNaWQtU2lkZSkvc3FydCgyKTsgICAvLyBvYnRhaW4gcmlnaHQgc2lnbmFsIGZyb20gbWlkIGFuZCBzaWRlPGJyPlxuXHRcdCAqICAgICAgICAgPC9jb2RlPlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVNZXJnZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHNpZ25hbCBpbnB1dC4gQWxpYXMgZm9yXG5cdFx0XHQgKiAgPGNvZGU+aW5wdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcmVjb21iaW5lIHRoZSBtaWQvc2lkZSBpbnRvIExlZnRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBuZXcgVG9uZS5BZGQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIE11bHRpcGx5IHRoZSBsZWZ0IGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQgPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIHNpZ25hbCBpbnB1dC4gQWxpYXMgZm9yXG5cdFx0XHQgKiAgPGNvZGU+aW5wdXRbMV08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGUgPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJlY29tYmluZSB0aGUgbWlkL3NpZGUgaW50byBSaWdodFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yaWdodCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgcmlnaHQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQgPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE1lcmdlIHRoZSBsZWZ0L3JpZ2h0IHNpZ25hbCBiYWNrIGludG8gYSBzdGVyZW8gc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICB0aGlzLm1pZC5jb25uZWN0KHRoaXMuX2xlZnQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuc2lkZS5jb25uZWN0KHRoaXMuX2xlZnQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMubWlkLmNvbm5lY3QodGhpcy5fcmlnaHQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuc2lkZS5jb25uZWN0KHRoaXMuX3JpZ2h0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0LmNvbm5lY3QodGhpcy5fdGltZXNUd29MZWZ0KTtcblx0ICAgICAgICB0aGlzLl9yaWdodC5jb25uZWN0KHRoaXMuX3RpbWVzVHdvUmlnaHQpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0LmNvbm5lY3QodGhpcy5fbWVyZ2UsIDAsIDEpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkU2lkZU1lcmdlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZU1lcmdlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVNZXJnZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnNpZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29MZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yaWdodC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZU1lcmdlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5NaWRTaWRlQ29tcHJlc3NvciBhcHBsaWVzIHR3byBkaWZmZXJlbnQgY29tcHJlc3NvcnMgdG8gdGhlIG1pZFxuXHRcdCAqICAgICAgICAgYW5kIHNpZGUgc2lnbmFsIGNvbXBvbmVudHMuIFNlZSBUb25lLk1pZFNpZGVTcGxpdC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgbWlkIGFuZCBzaWRlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3JzLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1pZFNpZGVDb21wcmVzc29yLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWlkL3NpZGUgc3BsaXRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZVNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTWlkU2lkZVNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1pZC9zaWRlIHJlY29tYmluYXRpb25cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZU1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1pZFNpZGVNZXJnZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIG1pZCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLm1pZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgc2lkZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5zaWRlKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQubWlkLmNoYWluKHRoaXMubWlkLCB0aGlzLl9taWRTaWRlTWVyZ2UubWlkKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQuc2lkZS5jaGFpbih0aGlzLnNpZGUsIHRoaXMuX21pZFNpZGVNZXJnZS5zaWRlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnc2lkZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVDb21wcmVzc29yLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21pZCc6IHtcblx0ICAgICAgICAgICAgJ3JhdGlvJzogMyxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCc6IC0yNCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjAzLFxuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMixcblx0ICAgICAgICAgICAgJ2tuZWUnOiAxNlxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3NpZGUnOiB7XG5cdCAgICAgICAgICAgICdyYXRpbyc6IDYsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnOiAtMzAsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC4yNSxcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDMsXG5cdCAgICAgICAgICAgICdrbmVlJzogMTBcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlQ29tcHJlc3Nvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlQ29tcHJlc3Nvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdzaWRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnNpZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZUNvbXByZXNzb3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk1vbm8gY29lcmNlcyB0aGUgaW5jb21pbmcgbW9ubyBvciBzdGVyZW8gc2lnbmFsIGludG8gYSBtb25vIHNpZ25hbFxuXHRcdCAqICAgICAgICAgd2hlcmUgYm90aCBsZWZ0IGFuZCByaWdodCBjaGFubmVscyBoYXZlIHRoZSBzYW1lIHZhbHVlLiBUaGlzIGNhbiBiZSB1c2VmdWxcblx0XHQgKiAgICAgICAgIGZvciBbc3RlcmVvIGltYWdpbmddKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N0ZXJlb19pbWFnaW5nKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIG1lcmdlIHRoZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fbWVyZ2UsIDAsIDEpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9ubywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9uby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9ubztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgY29tcHJlc3NvciB3aXRoIHNlcGVyYXRlIGNvbnRyb2xzIG92ZXIgbG93L21pZC9oaWdoIGR5bmFtaWNzXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIGxvdy9taWQvaGlnaCBjb21wcmVzc29yIHNldHRpbmdzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgbXVsdGliYW5kID0gbmV3IFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvcih7XG5cdFx0ICogIFx0XCJsb3dGcmVxdWVuY3lcIiA6IDIwMCxcblx0XHQgKiAgXHRcImhpZ2hGcmVxdWVuY3lcIiA6IDEzMDBcblx0XHQgKiAgXHRcImxvd1wiIDoge1xuXHRcdCAqICBcdFx0XCJ0aHJlc2hvbGRcIiA6IC0xMlxuXHRcdCAqICBcdH1cblx0XHQgKiAgfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kQ29tcHJlc3NvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKGFyZ3VtZW50cywgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzcGxpdCB0aGUgaW5jb21pbmcgc2lnbmFsIGludG8gaGlnaC9taWQvbG93XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGliYW5kU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpYmFuZFNwbGl0KHtcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IG9wdGlvbnMubG93RnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IG9wdGlvbnMuaGlnaEZyZXF1ZW5jeVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gdGhpcy5fc3BsaXR0ZXIubG93RnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSB0aGlzLl9zcGxpdHRlci5oaWdoRnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvdXRwdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBsb3cgZnJlcXVlbmNpZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93ID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLmxvdyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgbWlkIGZyZXF1ZW5jaWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5taWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIGhpZ2ggZnJlcXVlbmNpZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5oaWdoKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGNvbXByZXNzb3Jcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5sb3cuY2hhaW4odGhpcy5sb3csIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5taWQuY2hhaW4odGhpcy5taWQsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5oaWdoLmNoYWluKHRoaXMuaGlnaCwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk11bHRpYmFuZENvbXByZXNzb3IsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdsb3cnOiBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMsXG5cdCAgICAgICAgJ21pZCc6IFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyxcblx0ICAgICAgICAnaGlnaCc6IFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyxcblx0ICAgICAgICAnbG93RnJlcXVlbmN5JzogMjUwLFxuXHQgICAgICAgICdoaWdoRnJlcXVlbmN5JzogMjAwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NdWx0aWJhbmRDb21wcmVzc29yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZENvbXByZXNzb3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubG93LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oaWdoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3cgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2ggPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk11bHRpYmFuZENvbXByZXNzb3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCAmJiAhd2luZG93LlN0ZXJlb1Bhbm5lck5vZGUpIHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEBjbGFzcyBTaGltbWVkIFN0ZXJlb1Bhbm5lck5vZGVcblx0XHRcdCAqIEBwYXJhbSAge0F1ZGlvQ29udGV4dH0gY29udGV4dFxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHZhciBTdGVyZW9QYW5uZXJOb2RlID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSBhdWRpbyBjb250ZXh0XG5cdFx0XHRcdCAqIEB0eXBlIHtBdWRpb0NvbnRleHR9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIGxlZnQvcmlnaHQgcGFubmluZy4gWy0xLCAxXVxuXHRcdFx0XHQgKiBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5wYW4gPSBuZXcgVG9uZS5TaWduYWwoMCwgVG9uZS5UeXBlLkF1ZGlvUmFuZ2UpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogRXF1YWwgcG93ZXIgc2NhbGluZyBvZiB0aGUgcmlnaHQgZ2FpblxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHJpZ2h0V2F2ZVNoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZXF1YWxQb3dlclNjYWxlKCh2YWwgKyAxKSAvIDIpO1xuXHQgICAgICAgICAgICB9LCA0MDk2KTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIEVxdWFsIHBvd2VyIHNjYWxpbmcgb2YgdGhlIGxlZnQgZ2FpblxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIGxlZnRXYXZlU2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5lcXVhbFBvd2VyU2NhbGUoMSAtICh2YWwgKyAxKSAvIDIpO1xuXHQgICAgICAgICAgICB9LCA0MDk2KTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSBsZWZ0IGdhaW4gdmFsdWVcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBsZWZ0R2FpbiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSByaWdodCBnYWluIHZhbHVlXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgcmlnaHRHYWluID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogU3BsaXQgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5TcGxpdH1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBzcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogS2VlcHMgdGhlIHdhdmVzaGFwZXJzIGZyb20gb3B0aW1pemluZyAwc1xuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5aZXJvfVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHplcm8gPSBuZXcgVG9uZS5aZXJvKCk7XG5cdCAgICAgICAgICAgIHplcm8uZmFuKHJpZ2h0V2F2ZVNoYXBlciwgbGVmdFdhdmVTaGFwZXIpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogTWVyZ2UgdGhlIG91dGdvaW5nIHNpZ25hbFxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBtZXJnZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgICAgICBzcGxpdC5sZWZ0LmNoYWluKGxlZnRHYWluLCBtZXJnZS5sZWZ0KTtcblx0ICAgICAgICAgICAgc3BsaXQucmlnaHQuY2hhaW4ocmlnaHRHYWluLCBtZXJnZS5yaWdodCk7XG5cdCAgICAgICAgICAgIHRoaXMucGFuLmNoYWluKGxlZnRXYXZlU2hhcGVyLCBsZWZ0R2Fpbi5nYWluKTtcblx0ICAgICAgICAgICAgdGhpcy5wYW4uY2hhaW4ocmlnaHRXYXZlU2hhcGVyLCByaWdodEdhaW4uZ2Fpbik7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBTdGVyZW9QYW5uZXJOb2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dC5kaXNjb25uZWN0LmFwcGx5KHRoaXMub3V0cHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgU3RlcmVvUGFubmVyTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuY29ubmVjdC5hcHBseSh0aGlzLm91dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIC8vYWRkIGl0IHRvIHRoZSBBdWRpb0NvbnRleHRcblx0ICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVN0ZXJlb1Bhbm5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGVyZW9QYW5uZXJOb2RlKHRoaXMpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVTdGVyZW9QYW5uZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgU3RlcmVvUGFubmVyTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGFubmVyIGlzIGFuIGVxdWFsIHBvd2VyIExlZnQvUmlnaHQgUGFubmVyIGFuZCBkb2VzIG5vdFxuXHRcdCAqICAgICAgICAgIHN1cHBvcnQgM0QuIFBhbm5lciB1c2VzIHRoZSBTdGVyZW9QYW5uZXJOb2RlIHdoZW4gYXZhaWxhYmxlLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtpbml0aWFsUGFuPTBdIFRoZSBpbml0YWlsIHBhbm5lciB2YWx1ZSAoY2VudGVyKS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy9wYW4gdGhlIGlucHV0IHNpZ25hbCBoYXJkIHJpZ2h0LlxuXHRcdCAqICB2YXIgcGFubmVyID0gbmV3IFRvbmUuUGFubmVyKDEpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIgPSBmdW5jdGlvbiAoaW5pdGlhbFBhbikge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQqICB0aGUgcGFubmVyIG5vZGVcblx0XHRcdCogIEB0eXBlIHtTdGVyZW9QYW5uZXJOb2RlfVxuXHRcdFx0KiAgQHByaXZhdGVcblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZVN0ZXJlb1Bhbm5lcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiAgVGhlIHBhbiBjb250cm9sLiAtMSA9IGhhcmQgbGVmdCwgMSA9IGhhcmQgcmlnaHQuXG5cdFx0XHQqICBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdCogIEBzaWduYWxcblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5wYW4gPSB0aGlzLl9wYW5uZXIucGFuO1xuXHQgICAgICAgIC8vaW5pdGlhbCB2YWx1ZVxuXHQgICAgICAgIHRoaXMucGFuLnZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKGluaXRpYWxQYW4sIDApO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdwYW4nKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhbm5lciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3BhbicpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnBhbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFubmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc3BhdGlhbGl6ZWQgcGFubmVyIG5vZGUgd2hpY2ggc3VwcG9ydHMgZXF1YWxwb3dlciBvciBIUlRGIHBhbm5pbmcuXG5cdFx0ICogICAgICAgICAgVHJpZXMgdG8gbm9ybWFsaXplIHRoZSBBUEkgYWNyb3NzIHZhcmlvdXMgYnJvd3NlcnMuIFNlZSBUb25lLkxpc3RlbmVyXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHBvc2l0aW9uWCBUaGUgaW5pdGlhbCB4IHBvc2l0aW9uLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gcG9zaXRpb25ZIFRoZSBpbml0aWFsIHkgcG9zaXRpb24uXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBwb3NpdGlvblogVGhlIGluaXRpYWwgeiBwb3NpdGlvbi5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncG9zaXRpb25YJyxcblx0ICAgICAgICAgICAgJ3Bvc2l0aW9uWScsXG5cdCAgICAgICAgICAgICdwb3NpdGlvblonXG5cdCAgICAgICAgXSwgVG9uZS5QYW5uZXIzRCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGFubmVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7UGFubmVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5lcigpO1xuXHQgICAgICAgIC8vc2V0IHNvbWUgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5fcGFubmVyLnBhbm5pbmdNb2RlbCA9IG9wdGlvbnMucGFubmluZ01vZGVsO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5tYXhEaXN0YW5jZSA9IG9wdGlvbnMubWF4RGlzdGFuY2U7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc3RhbmNlTW9kZWwgPSBvcHRpb25zLmRpc3RhbmNlTW9kZWw7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbmVPdXRlckdhaW4gPSBvcHRpb25zLmNvbmVPdXRlckdhaW47XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbmVPdXRlckFuZ2xlID0gb3B0aW9ucy5jb25lT3V0ZXJBbmdsZTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuY29uZUlubmVyQW5nbGUgPSBvcHRpb25zLmNvbmVJbm5lckFuZ2xlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5yZWZEaXN0YW5jZSA9IG9wdGlvbnMucmVmRGlzdGFuY2U7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLnJvbGxvZmZGYWN0b3IgPSBvcHRpb25zLnJvbGxvZmZGYWN0b3I7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgb3JpZW50YXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IFtcblx0ICAgICAgICAgICAgb3B0aW9ucy5vcmllbnRhdGlvblgsXG5cdCAgICAgICAgICAgIG9wdGlvbnMub3JpZW50YXRpb25ZLFxuXHQgICAgICAgICAgICBvcHRpb25zLm9yaWVudGF0aW9uWlxuXHQgICAgICAgIF07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IFtcblx0ICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvblgsXG5cdCAgICAgICAgICAgIG9wdGlvbnMucG9zaXRpb25ZLFxuXHQgICAgICAgICAgICBvcHRpb25zLnBvc2l0aW9uWlxuXHQgICAgICAgIF07XG5cdCAgICAgICAgLy8gc2V0IHRoZSBkZWZhdWx0IHBvc2l0aW9uL29yaWVudGF0aW9uXG5cdCAgICAgICAgdGhpcy5vcmllbnRhdGlvblggPSBvcHRpb25zLm9yaWVudGF0aW9uWDtcblx0ICAgICAgICB0aGlzLm9yaWVudGF0aW9uWSA9IG9wdGlvbnMub3JpZW50YXRpb25ZO1xuXHQgICAgICAgIHRoaXMub3JpZW50YXRpb25aID0gb3B0aW9ucy5vcmllbnRhdGlvblo7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvblggPSBvcHRpb25zLnBvc2l0aW9uWDtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uWSA9IG9wdGlvbnMucG9zaXRpb25ZO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb25aID0gb3B0aW9ucy5wb3NpdGlvblo7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYW5uZXIzRCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncG9zaXRpb25YJzogMCxcblx0ICAgICAgICAncG9zaXRpb25ZJzogMCxcblx0ICAgICAgICAncG9zaXRpb25aJzogMCxcblx0ICAgICAgICAnb3JpZW50YXRpb25YJzogMCxcblx0ICAgICAgICAnb3JpZW50YXRpb25ZJzogMCxcblx0ICAgICAgICAnb3JpZW50YXRpb25aJzogMCxcblx0ICAgICAgICAncGFubmluZ01vZGVsJzogJ2VxdWFscG93ZXInLFxuXHQgICAgICAgICdtYXhEaXN0YW5jZSc6IDEwMDAwLFxuXHQgICAgICAgICdkaXN0YW5jZU1vZGVsJzogJ2ludmVyc2UnLFxuXHQgICAgICAgICdjb25lT3V0ZXJHYWluJzogMCxcblx0ICAgICAgICAnY29uZU91dGVyQW5nbGUnOiAzNjAsXG5cdCAgICAgICAgJ2NvbmVJbm5lckFuZ2xlJzogMzYwLFxuXHQgICAgICAgICdyZWZEaXN0YW5jZSc6IDEsXG5cdCAgICAgICAgJ3JvbGxvZmZGYWN0b3InOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJhbXAgdGltZSB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBzZXRUYXJnZXRBdFRpbWVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELnByb3RvdHlwZS5fcmFtcFRpbWVDb25zdGFudCA9IDAuMDE7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIHNvdXJjZSBpbiAzZCBzcGFjZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB5XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHpcblx0XHQgKiAgQHJldHVybiB7VG9uZS5QYW5uZXIzRH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuc2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeikge1xuXHQgICAgICAgIGlmICh0aGlzLl9wYW5uZXIucG9zaXRpb25YKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIucG9zaXRpb25YLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIucG9zaXRpb25ZLnNldFRhcmdldEF0VGltZSh5LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIucG9zaXRpb25aLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5zZXRQb3NpdGlvbih4LCB5LCB6KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgc291cmNlIGluIDNkIHNwYWNlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBhbm5lcjNEfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELnByb3RvdHlwZS5zZXRPcmllbnRhdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblouc2V0VGFyZ2V0QXRUaW1lKHosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnNldE9yaWVudGF0aW9uKHgsIHksIHopO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25YXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdwb3NpdGlvblgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvbllcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ3Bvc2l0aW9uWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAncG9zaXRpb25aJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblsyXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzJdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IG9yaWVudGF0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgb3JpZW50YXRpb25YXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdvcmllbnRhdGlvblgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgb3JpZW50YXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBvcmllbnRhdGlvbllcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ29yaWVudGF0aW9uWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBvcmllbnRhdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG9yaWVudGF0aW9uWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAnb3JpZW50YXRpb25aJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblsyXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzJdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFByb3h5IGEgcHJvcGVydHkgb24gdGhlIHBhbm5lciB0byBhbiBleHBvc2VkIHB1YmxpYyBwcm9wZXJ5XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHByb3Bcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcCkge1xuXHQgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgcHJvcCwge1xuXHQgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Bhbm5lcltwcm9wXSA9IHZhbDtcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFubmVyW3Byb3BdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwYW5uaW5nIG1vZGVsLiBFaXRoZXIgXCJlcXVhbHBvd2VyXCIgb3IgXCJIUlRGXCIuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwYW5uaW5nTW9kZWxcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ3Bhbm5pbmdNb2RlbCcpO1xuXHQgICAgLyoqXG5cdFx0ICogIEEgcmVmZXJlbmNlIGRpc3RhbmNlIGZvciByZWR1Y2luZyB2b2x1bWUgYXMgc291cmNlIG1vdmUgZnVydGhlciBmcm9tIHRoZSBsaXN0ZW5lclxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcmVmRGlzdGFuY2Vcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ3JlZkRpc3RhbmNlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVzY3JpYmVzIGhvdyBxdWlja2x5IHRoZSB2b2x1bWUgaXMgcmVkdWNlZCBhcyBzb3VyY2UgbW92ZXMgYXdheSBmcm9tIGxpc3RlbmVyLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcm9sbG9mZkZhY3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgncm9sbG9mZkZhY3RvcicpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkaXN0YW5jZSBtb2RlbCB1c2VkIGJ5LCAgXCJsaW5lYXJcIiwgXCJpbnZlcnNlXCIsIG9yIFwiZXhwb25lbnRpYWxcIi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIGRpc3RhbmNlTW9kZWxcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2Rpc3RhbmNlTW9kZWwnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYW5nbGUsIGluIGRlZ3JlZXMsIGluc2lkZSBvZiB3aGljaCB0aGVyZSB3aWxsIGJlIG5vIHZvbHVtZSByZWR1Y3Rpb25cblx0XHQgKiAgQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBjb25lSW5uZXJBbmdsZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnY29uZUlubmVyQW5nbGUnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYW5nbGUsIGluIGRlZ3JlZXMsIG91dHNpZGUgb2Ygd2hpY2ggdGhlIHZvbHVtZSB3aWxsIGJlIHJlZHVjZWRcblx0XHQgKiAgdG8gYSBjb25zdGFudCB2YWx1ZSBvZiBjb25lT3V0ZXJHYWluXG5cdFx0ICogIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgY29uZU91dGVyQW5nbGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2NvbmVPdXRlckFuZ2xlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGdhaW4gb3V0c2lkZSBvZiB0aGUgY29uZU91dGVyQW5nbGVcblx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBjb25lT3V0ZXJHYWluXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdjb25lT3V0ZXJHYWluJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG1heGltdW0gZGlzdGFuY2UgYmV0d2VlbiBzb3VyY2UgYW5kIGxpc3RlbmVyLFxuXHRcdCAqICBhZnRlciB3aGljaCB0aGUgdm9sdW1lIHdpbGwgbm90IGJlIHJlZHVjZWQgYW55IGZ1cnRoZXIuXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG1heERpc3RhbmNlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdtYXhEaXN0YW5jZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYW5uZXIzRH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhbm5lcjNEO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYW5Wb2wgaXMgYSBUb25lLlBhbm5lciBhbmQgVG9uZS5Wb2x1bWUgaW4gb25lLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9SYW5nZX0gcGFuIHRoZSBpbml0aWFsIHBhblxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdm9sdW1lIFRoZSBvdXRwdXQgdm9sdW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcGFuIHRoZSBpbmNvbWluZyBzaWduYWwgbGVmdCBhbmQgZHJvcCB0aGUgdm9sdW1lXG5cdFx0ICogdmFyIHBhblZvbCA9IG5ldyBUb25lLlBhblZvbCgtMC4yNSwgLTEyKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFuVm9sID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3BhbicsXG5cdCAgICAgICAgICAgICd2b2x1bWUnXG5cdCAgICAgICAgXSwgVG9uZS5QYW5Wb2wpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhbm5pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBhbm5lcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLlBhbm5lcihvcHRpb25zLnBhbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIEwvUiBwYW5uaW5nIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wYW4gPSB0aGlzLl9wYW5uZXIucGFuO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2b2x1bWUgY29udHJvbCBpbiBkZWNpYmVscy5cblx0XHRcdCAqICBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuY29ubmVjdCh0aGlzLl92b2x1bWUpO1xuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdwYW4nLFxuXHQgICAgICAgICAgICAndm9sdW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFuVm9sLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5Wb2wuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Bhbic6IDAsXG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUvdW5tdXRlIHRoZSB2b2x1bWVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYW5Wb2wjXG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFuVm9sLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhblZvbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5Wb2wucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdwYW4nLFxuXHQgICAgICAgICAgICAndm9sdW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnBhbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYW5Wb2w7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Tb2xvIGxldHMgeW91IGlzb2xhdGUgYSBzcGVjaWZpYyBhdWRpbyBzdHJlYW0uIFdoZW5cblx0XHQgKiAgICAgICAgIGFuIGluc3RhbmNlIGlzIHNldCB0byBgc29sbz10cnVlYCwgaXQgd2lsbCBtdXRlIGFsbCBvdGhlciBpbnN0YW5jZXMuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc29sb0EgPSBuZXcgVG9uZS5Tb2xvKClcblx0XHQgKiB2YXIgc29sb0IgPSBuZXcgVG9uZS5Tb2xvKClcblx0XHQgKiBzb2xvQS5zb2xvID0gdHJ1ZVxuXHRcdCAqIC8vbm8gYXVkaW8gd2lsbCBwYXNzIHRocm91Z2ggc29sb0Jcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3NvbG8nXSwgVG9uZS5Tb2xvKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBpbnB1dCBhbmQgb3V0cHV0IG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGJvdW5kIF9zb2xvZWQgbWV0aG9kXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc29sb0JpbmQgPSB0aGlzLl9zb2xvZWQuYmluZCh0aGlzKTtcblx0ICAgICAgICAvL2xpc3RlbiBmb3Igc29sbyBldmVudHMgY2xhc3Mtd2lkZS5cblx0ICAgICAgICB0aGlzLmNvbnRleHQub24oJ3NvbG8nLCB0aGlzLl9zb2xvQmluZCk7XG5cdCAgICAgICAgLy9zZXQgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5zb2xvID0gb3B0aW9ucy5zb2xvO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU29sbywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLmRlZmF1bHRzID0geyBzb2xvOiBmYWxzZSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIElzb2xhdGVzIHRoaXMgaW5zdGFuY2UgYW5kIG11dGVzIGFsbCBvdGhlciBpbnN0YW5jZXMgb2YgVG9uZS5Tb2xvLlxuXHRcdCAqICBPbmx5IG9uZSBpbnN0YW5jZSBjYW4gYmUgc29sb2VkIGF0IGEgdGltZS4gQSBzb2xvZWRcblx0XHQgKiAgaW5zdGFuY2Ugd2lsbCByZXBvcnQgYHNvbG89ZmFsc2VgIHdoZW4gYW5vdGhlciBpbnN0YW5jZSBpcyBzb2xvZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNvbG8jXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBzb2xvXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Tb2xvLnByb3RvdHlwZSwgJ3NvbG8nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1NvbG9lZCgpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc29sbykge1xuXHQgICAgICAgICAgICBpZiAoc29sbykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYWRkU29sbygpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU29sbygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5lbWl0KCdzb2xvJywgdGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIGN1cnJlbnQgaW5zdGFuY2UgaXMgbXV0ZWQsIGkuZS4gYW5vdGhlciBpbnN0YW5jZSBpcyBzb2xvZWRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuU29sbyNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBuYW1lIG11dGVkXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU29sby5wcm90b3R5cGUsICdtdXRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQuZ2Fpbi52YWx1ZSA9PT0gMDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEFkZCB0aGlzIHRvIHRoZSBzb2xvZWQgYXJyYXlcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5fYWRkU29sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoIVRvbmUuaXNBcnJheSh0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvKSkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvID0gW107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghdGhpcy5faXNTb2xvZWQoKSkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLnB1c2godGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlbW92ZSB0aGlzIGZyb20gdGhlIHNvbG9lZCBhcnJheVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9yZW1vdmVTb2xvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9pc1NvbG9lZCgpKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8uaW5kZXhPZih0aGlzKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBJcyB0aGlzIG9uIHRoZSBzb2xvZWQgYXJyYXlcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5faXNTb2xvZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5sZW5ndGggIT09IDAgJiYgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5pbmRleE9mKHRoaXMpICE9PSAtMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBubyBvbmUgaXMgc29sb2VkXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX25vU29sb3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuICFUb25lLmlzQXJyYXkodGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbykgfHwgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5sZW5ndGggPT09IDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNvbG8gdGhlIGN1cnJlbnQgaW5zdGFuY2UgYW5kIHVuc29sbyBhbGwgb3RoZXIgaW5zdGFuY2VzLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlNvbG99ICBpbnN0YW5jZSAgVGhlIGluc3RhbmNlIHdoaWNoIGlzIGJlaW5nIHNvbG9lZC91bnNvbG9lZC5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX3NvbG9lZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5faXNTb2xvZWQoKSkge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmdhaW4udmFsdWUgPSAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbm9Tb2xvcygpKSB7XG5cdCAgICAgICAgICAgIC8vbm8gb25lIGlzIHNvbG9lZFxuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmdhaW4udmFsdWUgPSAxO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuZ2Fpbi52YWx1ZSA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Tb2xvfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5vZmYoJ3NvbG8nLCB0aGlzLl9zb2xvQmluZCk7XG5cdCAgICAgICAgdGhpcy5fcmVtb3ZlU29sbygpO1xuXHQgICAgICAgIHRoaXMuX3NvbG9CaW5kID0gbnVsbDtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNvbG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEdldCB0aGUgY3VycmVudCB3YXZlZm9ybSBkYXRhIG9mIHRoZSBjb25uZWN0ZWQgYXVkaW8gc291cmNlLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgRkZULiBWYWx1ZSBtdXN0IGJlIGEgcG93ZXIgb2Zcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzaXplJ10sIFRvbmUuV2F2ZWZvcm0pO1xuXHQgICAgICAgIG9wdGlvbnMudHlwZSA9IFRvbmUuQW5hbHlzZXIuVHlwZS5XYXZlZm9ybTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW5hbHlzZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkFuYWx5c2VyKG9wdGlvbnMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuV2F2ZWZvcm0sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlZm9ybS5kZWZhdWx0cyA9IHsgJ3NpemUnOiAxMDI0IH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0cyB0aGUgd2F2ZWZvcm0gb2YgdGhlIGF1ZGlvIHNvdXJjZS4gUmV0dXJucyB0aGUgd2F2ZWZvcm0gZGF0YVxuXHRcdCAqICBvZiBsZW5ndGggW3NpemVdKCNzaXplKSBhcyBhIEZsb2F0MzJBcnJheSB3aXRoIHZhbHVlcyBiZXR3ZWVuIC0xIGFuZCAxLlxuXHRcdCAqICBAcmV0dXJucyB7VHlwZWRBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0ucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2l6ZSBvZiBhbmFseXNpcy4gVGhpcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuV2F2ZWZvcm0jXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIHNpemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLldhdmVmb3JtLnByb3RvdHlwZSwgJ3NpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5zaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zaXplID0gc2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuV2F2ZWZvcm19ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5XYXZlZm9ybTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ3RybEludGVycG9sYXRlIHdpbGwgaW50ZXJwb2xhdGUgYmV0d2VlbiBnaXZlbiB2YWx1ZXMgYmFzZWRcblx0XHQgKiAgICAgICAgIG9uIHRoZSBcImluZGV4XCIgcHJvcGVydHkuIFBhc3NpbmcgaW4gYW4gYXJyYXkgb3Igb2JqZWN0IGxpdGVyYWxcblx0XHQgKiAgICAgICAgIHdpbGwgaW50ZXJwb2xhdGUgZWFjaCBvZiB0aGUgcGFyYW1ldGVycy4gTm90ZSAoaS5lLiBcIkMzXCIpXG5cdFx0ICogICAgICAgICBhbmQgVGltZSAoaS5lLiBcIjRuICsgMlwiKSBjYW4gYmUgaW50ZXJwb2xhdGVkLiBBbGwgb3RoZXIgdmFsdWVzIGFyZVxuXHRcdCAqICAgICAgICAgYXNzdW1lZCB0byBiZSBudW1iZXJzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgaW50ZXJwID0gbmV3IFRvbmUuQ3RybEludGVycG9sYXRlKFswLCAyLCA5LCA0XSk7XG5cdFx0ICogaW50ZXJwLmluZGV4ID0gMC43NTtcblx0XHQgKiBpbnRlcnAudmFsdWU7IC8vcmV0dXJucyAxLjVcblx0XHQgKlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBpbnRlcnAgPSBuZXcgVG9uZS5DdHJsSW50ZXJwb2xhdGUoW1xuXHRcdCAqIFx0WzIsIDQsIDVdLFxuXHRcdCAqIFx0WzksIDMsIDJdLFxuXHRcdCAqIF0pO1xuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgYXJyYXkgb2YgdmFsdWVzIHRvIGludGVycG9sYXRlIG92ZXJcblx0XHQgKiBAcGFyYW0ge1Bvc2l0aXZlfSBpbmRleCBUaGUgaW5pdGlhbCBpbnRlcnBvbGF0aW9uIGluZGV4LlxuXHRcdCAqIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndmFsdWVzJyxcblx0ICAgICAgICAgICAgJ2luZGV4J1xuXHQgICAgICAgIF0sIFRvbmUuQ3RybEludGVycG9sYXRlKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlcyB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gb3B0aW9ucy52YWx1ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGludGVycG9sYXRlZCBpbmRleCBiZXR3ZWVuIHZhbHVlcy4gRm9yIGV4YW1wbGU6IGEgdmFsdWUgb2YgMS41XG5cdFx0XHQgKiAgd291bGQgaW50ZXJwb2xhdGUgZXF1YWxseSBiZXR3ZWVuIHRoZSB2YWx1ZSBhdCBpbmRleCAxXG5cdFx0XHQgKiAgYW5kIHRoZSB2YWx1ZSBhdCBpbmRleCAyLiBcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogaW50ZXJwLmluZGV4ID0gMDsgXG5cdFx0XHQgKiBpbnRlcnAudmFsdWU7IC8vcmV0dXJucyB0aGUgdmFsdWUgYXQgMFxuXHRcdFx0ICogaW50ZXJwLmluZGV4ID0gMC41O1xuXHRcdFx0ICogaW50ZXJwLnZhbHVlOyAvL3JldHVybnMgdGhlIHZhbHVlIGJldHdlZW4gaW5kaWNlcyAwIGFuZCAxLiBcblx0XHRcdCAqICBAdHlwZSAge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsSW50ZXJwb2xhdGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnaW5kZXgnOiAwLFxuXHQgICAgICAgICd2YWx1ZXMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCBpbnRlcnBvbGF0ZWQgdmFsdWUgYmFzZWQgb24gdGhlIGluZGV4XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsSW50ZXJwb2xhdGUjXG5cdFx0ICogIEB0eXBlIHsqfVxuXHRcdCAqICBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgdmFyIGxvd2VyUG9zaXRpb24gPSBNYXRoLmZsb29yKGluZGV4KTtcblx0ICAgICAgICAgICAgdmFyIGxvd2VyID0gdGhpcy52YWx1ZXNbbG93ZXJQb3NpdGlvbl07XG5cdCAgICAgICAgICAgIHZhciB1cHBlciA9IHRoaXMudmFsdWVzW01hdGguY2VpbChpbmRleCldO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJwb2xhdGUoaW5kZXggLSBsb3dlclBvc2l0aW9uLCBsb3dlciwgdXBwZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGludGVycG9sYXRpb24gcm91dGluZVxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIGluZGV4ICBUaGUgaW5kZXggYmV0d2VlbiB0aGUgbG93ZXIgYW5kIHVwcGVyXG5cdFx0ICogIEBwYXJhbSAgeyp9ICBsb3dlciBcblx0XHQgKiAgQHBhcmFtICB7Kn0gIHVwcGVyIFxuXHRcdCAqICBAcmV0dXJuICB7Kn0gIFRoZSBpbnRlcnBvbGF0ZWQgdmFsdWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZS5faW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAoaW5kZXgsIGxvd2VyLCB1cHBlcikge1xuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkobG93ZXIpKSB7XG5cdCAgICAgICAgICAgIHZhciByZXRBcnJheSA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvd2VyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICByZXRBcnJheVtpXSA9IHRoaXMuX2ludGVycG9sYXRlKGluZGV4LCBsb3dlcltpXSwgdXBwZXJbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXRBcnJheTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNPYmplY3QobG93ZXIpKSB7XG5cdCAgICAgICAgICAgIHZhciByZXRPYmogPSB7fTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBsb3dlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0T2JqW2F0dHJdID0gdGhpcy5faW50ZXJwb2xhdGUoaW5kZXgsIGxvd2VyW2F0dHJdLCB1cHBlclthdHRyXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHJldE9iajtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBsb3dlciA9IHRoaXMuX3RvTnVtYmVyKGxvd2VyKTtcblx0ICAgICAgICAgICAgdXBwZXIgPSB0aGlzLl90b051bWJlcih1cHBlcik7XG5cdCAgICAgICAgICAgIHJldHVybiAoMSAtIGluZGV4KSAqIGxvd2VyICsgaW5kZXggKiB1cHBlcjtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZnJvbSB0aGUgZ2l2ZW4gdHlwZSBpbnRvIGEgbnVtYmVyXG5cdFx0ICogIEBwYXJhbSAge051bWJlcnxTdHJpbmd9ICB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUucHJvdG90eXBlLl90b051bWJlciA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcih2YWwpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9vdGhlcndpc2UgYXNzdW1lIHRoYXQgaXQncyBUaW1lLi4uXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcyh2YWwpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ3RybEludGVycG9sYXRlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxJbnRlcnBvbGF0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ3RybE1hcmtvdiByZXByZXNlbnRzIGEgTWFya292IENoYWluIHdoZXJlIGVhY2ggY2FsbFxuXHRcdCAqICAgICAgICAgdG8gVG9uZS5DdHJsTWFya292Lm5leHQgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlLiBJZiB0aGUgbmV4dFxuXHRcdCAqICAgICAgICAgc3RhdGUgY2hvaWNlIGlzIGFuIGFycmF5LCB0aGUgbmV4dCBzdGF0ZSBpcyBjaG9zZW4gcmFuZG9tbHkgd2l0aFxuXHRcdCAqICAgICAgICAgZXZlbiBwcm9iYWJpbGl0eSBmb3IgYWxsIG9mIHRoZSBjaG9pY2VzLiBGb3IgYSB3ZWlnaHRlZCBwcm9iYWJpbGl0eVxuXHRcdCAqICAgICAgICAgb2YgdGhlIG5leHQgY2hvaWNlcywgcGFzcyBpbiBhbiBvYmplY3Qgd2l0aCBcInN0YXRlXCIgYW5kIFwicHJvYmFiaWxpdHlcIiBhdHRyaWJ1dGVzLiBcblx0XHQgKiAgICAgICAgIFRoZSBwcm9iYWJpbGl0aWVzIHdpbGwgYmUgbm9ybWFsaXplZCBhbmQgdGhlbiBjaG9zZW4uIElmIG5vIG5leHQgb3B0aW9uc1xuXHRcdCAqICAgICAgICAgYXJlIGdpdmVuIGZvciB0aGUgY3VycmVudCBzdGF0ZSwgdGhlIHN0YXRlIHdpbGwgc3RheSB0aGVyZS4gXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjaGFpbiA9IG5ldyBUb25lLkN0cmxNYXJrb3Yoe1xuXHRcdCAqIFx0XCJiZWdpbm5pbmdcIiA6IFtcImVuZFwiLCBcIm1pZGRsZVwiXSxcblx0XHQgKiBcdFwibWlkZGxlXCIgOiBcImVuZFwiXG5cdFx0ICogfSk7XG5cdFx0ICogY2hhaW4udmFsdWUgPSBcImJlZ2lubmluZ1wiO1xuXHRcdCAqIGNoYWluLm5leHQoKTsgLy9yZXR1cm5zIFwiZW5kXCIgb3IgXCJtaWRkbGVcIiB3aXRoIDUwJSBwcm9iYWJpbGl0eVxuXHRcdCAqXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNoYWluID0gbmV3IFRvbmUuQ3RybE1hcmtvdih7XG5cdFx0ICogXHRcImJlZ2lubmluZ1wiIDogW3tcInZhbHVlXCIgOiBcImVuZFwiLCBcInByb2JhYmlsaXR5XCIgOiAwLjh9LCBcblx0XHQgKiBcdFx0XHRcdFx0e1widmFsdWVcIiA6IFwibWlkZGxlXCIsIFwicHJvYmFiaWxpdHlcIiA6IDAuMn1dLFxuXHRcdCAqIFx0XCJtaWRkbGVcIiA6IFwiZW5kXCJcblx0XHQgKiB9KTtcblx0XHQgKiBjaGFpbi52YWx1ZSA9IFwiYmVnaW5uaW5nXCI7XG5cdFx0ICogY2hhaW4ubmV4dCgpOyAvL3JldHVybnMgXCJlbmRcIiB3aXRoIDgwJSBwcm9iYWJpbGl0eSBvciBcIm1pZGRsZVwiIHdpdGggMjAlLlxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gdmFsdWVzIEFuIG9iamVjdCB3aXRoIHRoZSBzdGF0ZSBuYW1lcyBhcyB0aGUga2V5c1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgbmV4dCBzdGF0ZShzKSBhcyB0aGUgdmFsdWVzLiBcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdiA9IGZ1bmN0aW9uICh2YWx1ZXMsIGluaXRpYWwpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIE1hcmtvdiB2YWx1ZXMgd2l0aCBzdGF0ZXMgYXMgdGhlIGtleXNcblx0XHRcdCAqICBhbmQgbmV4dCBzdGF0ZShzKSBhcyB0aGUgdmFsdWVzLiBcblx0XHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBUb25lLmRlZmF1bHRBcmcodmFsdWVzLCB7fSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIE1hcmtvdiB2YWx1ZXMuIFRoZSBuZXh0XG5cdFx0XHQgKiAgc3RhdGUgd2lsbCBiZSBldmFsdWF0ZWQgYW5kIHJldHVybmVkIHdoZW4gVG9uZS5DdHJsTWFya292Lm5leHRcblx0XHRcdCAqICBpcyBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKGluaXRpYWwsIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKVswXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsTWFya292KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBuZXh0IHN0YXRlIG9mIHRoZSBNYXJrb3YgdmFsdWVzLiBcblx0XHQgKiAgQHJldHVybiAge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy52YWx1ZXMuaGFzT3duUHJvcGVydHkodGhpcy52YWx1ZSkpIHtcblx0ICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnZhbHVlc1t0aGlzLnZhbHVlXTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheShuZXh0KSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGRpc3RyaWJ1dGlvbiA9IHRoaXMuX2dldFByb2JEaXN0cmlidXRpb24obmV4dCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgcmFuZCA9IE1hdGgucmFuZG9tKCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXN0cmlidXRpb24ubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZGlzdCA9IGRpc3RyaWJ1dGlvbltpXTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocmFuZCA+IHRvdGFsICYmIHJhbmQgPCB0b3RhbCArIGRpc3QpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNob3NlbiA9IG5leHRbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGNob3NlbikpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjaG9zZW4udmFsdWU7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gY2hvc2VuO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IGRpc3Q7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV4dDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2hvb3NlIHJhbmRvbWx5IGZyb20gYW4gYXJyYXkgd2VpZ2h0ZWQgb3B0aW9ucyBpbiB0aGUgZm9ybSBcblx0XHQgKiAge1wic3RhdGVcIiA6IHN0cmluZywgXCJwcm9iYWJpbGl0eVwiIDogbnVtYmVyfSBvciBhbiBhcnJheSBvZiB2YWx1ZXNcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICBvcHRpb25zIFxuXHRcdCAqICBAcmV0dXJuICB7QXJyYXl9ICBUaGUgcmFuZG9tbHkgc2VsZWN0ZWQgY2hvaWNlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YucHJvdG90eXBlLl9nZXRQcm9iRGlzdHJpYnV0aW9uID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICB2YXIgZGlzdHJpYnV0aW9uID0gW107XG5cdCAgICAgICAgdmFyIHRvdGFsID0gMDtcblx0ICAgICAgICB2YXIgbmVlZHNOb3JtYWxpemluZyA9IGZhbHNlO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgb3B0aW9uID0gb3B0aW9uc1tpXTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3Qob3B0aW9uKSkge1xuXHQgICAgICAgICAgICAgICAgbmVlZHNOb3JtYWxpemluZyA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25baV0gPSBvcHRpb24ucHJvYmFiaWxpdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25baV0gPSAxIC8gb3B0aW9ucy5sZW5ndGg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdG90YWwgKz0gZGlzdHJpYnV0aW9uW2ldO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAobmVlZHNOb3JtYWxpemluZykge1xuXHQgICAgICAgICAgICAvL25vcm1hbGl6ZSB0aGUgdmFsdWVzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGlzdHJpYnV0aW9uLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25bal0gPSBkaXN0cmlidXRpb25bal0gLyB0b3RhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gZGlzdHJpYnV0aW9uO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5DdHJsTWFya292fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsTWFya292LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsTWFya292O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgR2VuZXJhdGUgcGF0dGVybnMgZnJvbSBhbiBhcnJheSBvZiB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBIYXMgYSBudW1iZXIgb2YgYXJwZWdnaWF0aW9uIGFuZCByYW5kb21pemVkXG5cdFx0ICogICAgICAgICBzZWxlY3Rpb24gcGF0dGVybnMuIFxuXHRcdCAqICAgICAgICAgICA8dWw+XG5cdFx0ICogIFx0ICAgICAgICA8bGk+XCJ1cFwiIC0gY3ljbGVzIHVwd2FyZDwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImRvd25cIiAtIGN5Y2xlcyBkb3dud2FyZDwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInVwRG93blwiIC0gdXAgdGhlbiBhbmQgZG93bjwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImRvd25VcFwiIC0gY3ljbGVzIGRvd24gdGhlbiBhbmQgdXA8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJhbHRlcm5hdGVVcFwiIC0ganVtcCB1cCB0d28gYW5kIGRvd24gb25lPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwiYWx0ZXJuYXRlRG93blwiIC0ganVtcCBkb3duIHR3byBhbmQgdXAgb25lPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwicmFuZG9tXCIgLSByYW5kb21seSBzZWxlY3QgYW4gaW5kZXg8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJyYW5kb21XYWxrXCIgLSByYW5kb21seSBtb3ZlcyBvbmUgaW5kZXggYXdheSBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwicmFuZG9tT25jZVwiIC0gcmFuZG9tbHkgc2VsZWN0IGFuIGluZGV4IHdpdGhvdXQgcmVwZWF0aW5nIHVudGlsIGFsbCB2YWx1ZXMgaGF2ZSBiZWVuIGNob3Nlbi48L2xpPlxuXHRcdCAqICAgICBcdFx0PC91bD5cblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICB2YWx1ZXMgICBBbiBhcnJheSBvZiBvcHRpb25zIHRvIGNob29zZSBmcm9tLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkN0cmxQYXR0ZXJuLlR5cGU9fSAgdHlwZSAgVGhlIG5hbWUgb2YgdGhlIHBhdHRlcm4uXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd2YWx1ZXMnLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLkN0cmxQYXR0ZXJuKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIHZhbHVlcyB0byBhcnBlZ2dpYXRlIG92ZXJcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG9wdGlvbnMudmFsdWVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSB2YWx1ZXMgYXJyYXlcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0eXBlIHBsYWNlaG9sZGVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3RybFBhdHRlcm4uVHlwZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2h1ZmZsZWQgdmFsdWVzIGZvciB0aGUgUmFuZG9tT25jZSB0eXBlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRpcmVjdGlvbiBvZiB0aGUgbW92ZW1lbnRcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkN0cmxQYXR0ZXJuKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgQ29udHJvbCBQYXR0ZXJuc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5UeXBlID0ge1xuXHQgICAgICAgIFVwOiAndXAnLFxuXHQgICAgICAgIERvd246ICdkb3duJyxcblx0ICAgICAgICBVcERvd246ICd1cERvd24nLFxuXHQgICAgICAgIERvd25VcDogJ2Rvd25VcCcsXG5cdCAgICAgICAgQWx0ZXJuYXRlVXA6ICdhbHRlcm5hdGVVcCcsXG5cdCAgICAgICAgQWx0ZXJuYXRlRG93bjogJ2FsdGVybmF0ZURvd24nLFxuXHQgICAgICAgIFJhbmRvbTogJ3JhbmRvbScsXG5cdCAgICAgICAgUmFuZG9tV2FsazogJ3JhbmRvbVdhbGsnLFxuXHQgICAgICAgIFJhbmRvbU9uY2U6ICdyYW5kb21PbmNlJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuIFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXAsXG5cdCAgICAgICAgJ3ZhbHVlcyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB2YWx1ZSBhdCB0aGUgY3VycmVudCBpbmRleCBvZiB0aGUgcGF0dGVybi5cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkN0cmxQYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvL3NvbWUgc2FmZWd1YXJkc1xuXHQgICAgICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMF07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5pbmRleCA9IE1hdGgubWluKHRoaXMuaW5kZXgsIHRoaXMudmFsdWVzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZXNbdGhpcy5pbmRleF07XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoICE9PSB0aGlzLl9zaHVmZmxlZC5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaHVmZmxlVmFsdWVzKCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB2YWwgPSB0aGlzLnZhbHVlc1t0aGlzLl9zaHVmZmxlZFt0aGlzLmluZGV4XV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGF0dGVybiB1c2VkIHRvIHNlbGVjdCB0aGUgbmV4dFxuXHRcdCAqICBpdGVtIGZyb20gdGhlIHZhbHVlcyBhcnJheVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge1RvbmUuQ3RybFBhdHRlcm4uVHlwZX1cblx0XHQgKiAgQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IG51bGw7XG5cdCAgICAgICAgICAgIC8vdGhlIGZpcnN0IGluZGV4XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXAgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwRG93biB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duVXAgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZURvd24pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnZhbHVlcy5sZW5ndGggLSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vdGhlIGRpcmVjdGlvblxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwRG93biB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93blVwIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVEb3duKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL3JhbmRvbXNcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaHVmZmxlVmFsdWVzKCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5SYW5kb20pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnZhbHVlcy5sZW5ndGgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBuZXh0IHZhbHVlIGdpdmVuIHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0ICogIGFuZCBwYXR0ZXJuLlxuXHRcdCAqICBAcmV0dXJuIHsqfSBUaGUgbmV4dCB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0ICAgICAgICAvL2Nob29zZSB0aGUgbmV4dCBpbmRleFxuXHQgICAgICAgIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bikge1xuXHQgICAgICAgICAgICB0aGlzLmluZGV4LS07XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcERvd24gfHwgdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd25VcCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgtLTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnZhbHVlcy5sZW5ndGgpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbVdhbGspIHtcblx0ICAgICAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPCAwLjUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgtLTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLm1heCh0aGlzLmluZGV4LCAwKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLm1pbih0aGlzLmluZGV4LCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbU9uY2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICAgICAgLy9yZXNodWZmbGUgdGhlIHZhbHVlcyBmb3IgbmV4dCB0aW1lXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaHVmZmxlVmFsdWVzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVVcCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCAtPSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID49IHRoaXMudmFsdWVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVEb3duKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kaXJlY3Rpb24gPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4IC09IDI7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTaHVmZmxlcyB0aGUgdmFsdWVzIGFuZCBwbGFjZXMgdGhlIHJlc3VsdHMgaW50byB0aGUgX3NodWZmbGVkXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZS5fc2h1ZmZsZVZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY29weSA9IFtdO1xuXHQgICAgICAgIHRoaXMuX3NodWZmbGVkID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBjb3B5W2ldID0gaTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgd2hpbGUgKGNvcHkubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICB2YXIgcmFuZFZhbCA9IGNvcHkuc3BsaWNlKE1hdGguZmxvb3IoY29weS5sZW5ndGggKiBNYXRoLnJhbmRvbSgpKSwgMSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NodWZmbGVkLnB1c2gocmFuZFZhbFswXSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DdHJsUGF0dGVybn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxQYXR0ZXJuO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIENob29zZSBhIHJhbmRvbSB2YWx1ZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHJhbmRvbVdhbGsgPSBuZXcgVG9uZS5DdHJsUmFuZG9tKHtcblx0XHQgKiBcdFwibWluXCIgOiAwLFxuXHRcdCAqIFx0XCJtYXhcIiA6IDEwLFxuXHRcdCAqIFx0XCJpbnRlZ2VyXCIgOiB0cnVlXG5cdFx0ICogfSk7XG5cdFx0ICogcmFuZG9tV2Fsay5ldmFsKCk7XG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8VGltZT19IG1pbiBUaGUgbWluaW11bSByZXR1cm4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfFRpbWU9fSBtYXggVGhlIG1heGltdW0gcmV0dXJuIHZhbHVlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUmFuZG9tID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ21pbicsXG5cdCAgICAgICAgICAgICdtYXgnXG5cdCAgICAgICAgXSwgVG9uZS5DdHJsUmFuZG9tKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pbmltdW0gcmV0dXJuIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ8VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWluID0gb3B0aW9ucy5taW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1heGltdW0gcmV0dXJuIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ8VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWF4ID0gb3B0aW9ucy5tYXg7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSWYgdGhlIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgYW4gaW50ZWdlclxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW50ZWdlciA9IG9wdGlvbnMuaW50ZWdlcjtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkN0cmxSYW5kb20pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxSYW5kb20uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgJ2ludGVnZXInOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gYSByYW5kb20gdmFsdWUgYmV0d2VlbiBtaW4gYW5kIG1heC4gXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsUmFuZG9tI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxSYW5kb20ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLnRvU2Vjb25kcyh0aGlzLm1pbik7XG5cdCAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLnRvU2Vjb25kcyh0aGlzLm1heCk7XG5cdCAgICAgICAgICAgIHZhciByYW5kID0gTWF0aC5yYW5kb20oKTtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IHJhbmQgKiBtaW4gKyAoMSAtIHJhbmQpICogbWF4O1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbnRlZ2VyKSB7XG5cdCAgICAgICAgICAgICAgICB2YWwgPSBNYXRoLmZsb29yKHZhbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxSYW5kb207XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBkYXRhIHN0cnVjdHVyZSBmb3IgaG9sZGluZyBtdWx0aXBsZSBidWZmZXJzLlxuXHRcdCAqICBcblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fEFycmF5fSAgICB1cmxzICAgICAgQW4gb2JqZWN0IGxpdGVyYWwgb3IgYXJyYXlcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdXJscyB0byBsb2FkLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVmZmVycyBhcmUgbG9hZGVkLiBcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9sb2FkIGEgd2hvbGUgYmFuayBvZiBwaWFubyBzYW1wbGVzXG5cdFx0ICogdmFyIHBpYW5vU2FtcGxlcyA9IG5ldyBUb25lLkJ1ZmZlcnMoe1xuXHRcdCAqIFx0XCJDNFwiIDogXCJwYXRoL3RvL0M0Lm1wM1wiXG5cdFx0ICogXHRcIkMjNFwiIDogXCJwYXRoL3RvL0MjNC5tcDNcIlxuXHRcdCAqIFx0XCJENFwiIDogXCJwYXRoL3RvL0Q0Lm1wM1wiXG5cdFx0ICogXHRcIkQjNFwiIDogXCJwYXRoL3RvL0QjNC5tcDNcIlxuXHRcdCAqIFx0Li4uXG5cdFx0ICogfSwgZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vcGxheSBvbmUgb2YgdGhlIHNhbXBsZXMgd2hlbiB0aGV5IGFsbCBsb2FkXG5cdFx0ICogXHRwbGF5ZXIuYnVmZmVyID0gcGlhbm9TYW1wbGVzLmdldChcIkM0XCIpO1xuXHRcdCAqIFx0cGxheWVyLnN0YXJ0KCk7XG5cdFx0ICogfSk7XG5cdFx0ICogXHRAZXhhbXBsZVxuXHRcdCAqIC8vVG8gcGFzcyBpbiBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXJcblx0XHQgKiB2YXIgYnVmZmVycyA9IG5ldyBUb25lLkJ1ZmZlcnModXJscywge1xuXHRcdCAqIFx0XCJvbmxvYWRcIiA6IGNhbGxiYWNrLFxuXHRcdCAqIFx0XCJiYXNlVXJsXCIgOiBcIi4uL3BhdGgvdG8vYXVkaW8vXCJcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzID0gZnVuY3Rpb24gKHVybHMpIHtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgdXJscyBmcm9tIHRoZSBvcHRpb25zXG5cdCAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIGFyZ3Muc2hpZnQoKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJncywgW1xuXHQgICAgICAgICAgICAnb25sb2FkJyxcblx0ICAgICAgICAgICAgJ2Jhc2VVcmwnXG5cdCAgICAgICAgXSwgVG9uZS5CdWZmZXJzKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxsIG9mIHRoZSBidWZmZXJzXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSB7fTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHBhdGggd2hpY2ggaXMgcHJlZml4ZWQgYmVmb3JlIGV2ZXJ5IHVybC5cblx0XHRcdCAqICBAdHlwZSAge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcblx0ICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQgPSAwO1xuXHQgICAgICAgIC8vYWRkIGVhY2ggb25lXG5cdCAgICAgICAgZm9yICh2YXIga2V5IGluIHVybHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50Kys7XG5cdCAgICAgICAgICAgIHRoaXMuYWRkKGtleSwgdXJsc1trZXldLCB0aGlzLl9idWZmZXJMb2FkZWQuYmluZCh0aGlzLCBvcHRpb25zLm9ubG9hZCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJ1ZmZlcnMpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2Jhc2VVcmwnOiAnJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcnVlIGlmIHRoZSBidWZmZXJzIG9iamVjdCBoYXMgYSBidWZmZXIgYnkgdGhhdCBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgbmFtZSAgVGhlIGtleSBvciBpbmRleCBvZiB0aGUgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuXG5cdFx0ICogIEByZXR1cm4gIHtCb29sZWFufVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXJzLmhhc093blByb3BlcnR5KG5hbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgYSBidWZmZXIgYnkgbmFtZS4gSWYgYW4gYXJyYXkgd2FzIGxvYWRlZCwgXG5cdFx0ICogIHRoZW4gdXNlIHRoZSBhcnJheSBpbmRleC5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIG5hbWUgIFRoZSBrZXkgb3IgaW5kZXggb2YgdGhlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuaGFzKG5hbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXJzW25hbWVdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJzOiBubyBidWZmZXIgbmFtZWQgJyArIG5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQSBidWZmZXIgd2FzIGxvYWRlZC4gZGVjcmVtZW50IHRoZSBjb3VudGVyLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5fYnVmZmVyTG9hZGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50LS07XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmdDb3VudCA9PT0gMCAmJiBjYWxsYmFjaykge1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJzI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVycy5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0xvYWRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGJ1ZmZOYW1lIGluIHRoaXMuX2J1ZmZlcnMpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBidWZmID0gdGhpcy5nZXQoYnVmZk5hbWUpO1xuXHQgICAgICAgICAgICAgICAgaXNMb2FkZWQgPSBpc0xvYWRlZCAmJiBidWZmLmxvYWRlZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gaXNMb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgYnVmZmVyIGJ5IG5hbWUgYW5kIHVybCB0byB0aGUgQnVmZmVyc1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIG5hbWUgICAgICBBIHVuaXF1ZSBuYW1lIHRvIGdpdmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8VG9uZS5CdWZmZXJ8QXVkaW9idWZmZXJ9ICB1cmwgIEVpdGhlciB0aGUgdXJsIG9mIHRoZSBidWZlciwgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhZGRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICBjYWxsYmFjayA9IFRvbmUuZGVmYXVsdEFyZyhjYWxsYmFjaywgVG9uZS5ub09wKTtcblx0ICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXSA9IHVybDtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh1cmwgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzW25hbWVdID0gbmV3IFRvbmUuQnVmZmVyKHVybCk7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyh1cmwpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0gPSBuZXcgVG9uZS5CdWZmZXIodGhpcy5iYXNlVXJsICsgdXJsLCBjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyc30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuX2J1ZmZlcnMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkJ1ZmZlcnM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIGJ1c2VzIGFyZSBhbm90aGVyIHdheSBvZiByb3V0aW5nIGF1ZGlvXG5cdFx0ICpcblx0XHQgKiAgYXVnbWVudHMgVG9uZS5wcm90b3R5cGUgdG8gaW5jbHVkZSBzZW5kIGFuZCByZWNpZXZlXG5cdFx0ICovXG5cdCAgICAvKipcblx0XHQgKiAgQWxsIG9mIHRoZSByb3V0ZXNcblx0XHQgKlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgQnVzZXMgPSB7fTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZW5kIHRoaXMgc2lnbmFsIHRvIHRoZSBjaGFubmVsIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gY2hhbm5lbE5hbWUgQSBuYW1lZCBjaGFubmVsIHRvIHNlbmQgdGhlIHNpZ25hbCB0by5cblx0XHQgKiAgQHBhcmFtICB7RGVjaWJlbHN9IGFtb3VudCBUaGUgYW1vdW50IG9mIHRoZSBzb3VyY2UgdG8gc2VuZCB0byB0aGUgYnVzLlxuXHRcdCAqICBAcmV0dXJuIHtHYWluTm9kZX0gVGhlIGdhaW4gbm9kZSB3aGljaCBjb25uZWN0cyB0aGlzIG5vZGUgdG8gdGhlIGRlc2lyZWQgY2hhbm5lbC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIHRvIGFkanVzdCB0aGUgbGV2ZWxzIG9mIHRoZSBzZW5kLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zZW5kKFwicmV2ZXJiXCIsIC0xMik7XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKGNoYW5uZWxOYW1lLCBhbW91bnQpIHtcblx0ICAgICAgICBpZiAoIUJ1c2VzLmhhc093blByb3BlcnR5KGNoYW5uZWxOYW1lKSkge1xuXHQgICAgICAgICAgICBCdXNlc1tjaGFubmVsTmFtZV0gPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBhbW91bnQgPSBUb25lLmRlZmF1bHRBcmcoYW1vdW50LCAwKTtcblx0ICAgICAgICB2YXIgc2VuZEtub2IgPSBuZXcgVG9uZS5HYWluKGFtb3VudCwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICB0aGlzLmNvbm5lY3Qoc2VuZEtub2IpO1xuXHQgICAgICAgIHNlbmRLbm9iLmNvbm5lY3QoQnVzZXNbY2hhbm5lbE5hbWVdKTtcblx0ICAgICAgICByZXR1cm4gc2VuZEtub2I7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlY2lldmUgdGhlIGlucHV0IGZyb20gdGhlIGRlc2lyZWQgY2hhbm5lbE5hbWUgdG8gdGhlIGlucHV0XG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSBjaGFubmVsTmFtZSBBIG5hbWVkIGNoYW5uZWwgdG8gc2VuZCB0aGUgc2lnbmFsIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSBjaGFubmVsTnVtYmVyIFRoZSBjaGFubmVsIHRvIGNvbm5lY3QgdG9cblx0XHQgKiAgQHJldHVybnMge1RvbmV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiByZXZlcmJFZmZlY3QucmVjZWl2ZShcInJldmVyYlwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnJlY2VpdmUgPSBmdW5jdGlvbiAoY2hhbm5lbE5hbWUsIGlucHV0TnVtKSB7XG5cdCAgICAgICAgaWYgKCFCdXNlcy5oYXNPd25Qcm9wZXJ0eShjaGFubmVsTmFtZSkpIHtcblx0ICAgICAgICAgICAgQnVzZXNbY2hhbm5lbE5hbWVdID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgQnVzZXNbY2hhbm5lbE5hbWVdLmNvbm5lY3QodGhpcywgMCwgaW5wdXROdW0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vcmVtb3ZlIGFsbCB0aGUgc2VuZC9yZWNlaXZlcyB3aGVuIGEgbmV3IGF1ZGlvIGNvbnRleHQgaXMgcGFzc2VkIGluXG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0LkJ1c2VzKSB7XG5cdCAgICAgICAgICAgIEJ1c2VzID0gY29udGV4dC5CdXNlcztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBCdXNlcyA9IHt9O1xuXHQgICAgICAgICAgICBjb250ZXh0LkJ1c2VzID0gQnVzZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRHJhdyBpcyB1c2VmdWwgZm9yIHN5bmNocm9uaXppbmcgdmlzdWFscyBhbmQgYXVkaW8gZXZlbnRzLlxuXHRcdCAqICAgICAgICAgQ2FsbGJhY2tzIGZyb20gVG9uZS5UcmFuc3BvcnQgb3IgYW55IG9mIHRoZSBUb25lLkV2ZW50IGNsYXNzZXNcblx0XHQgKiAgICAgICAgIGFsd2F5cyBoYXBwZW4gX2JlZm9yZV8gdGhlIHNjaGVkdWxlZCB0aW1lIGFuZCBhcmUgbm90IHN5bmNocm9uaXplZFxuXHRcdCAqICAgICAgICAgdG8gdGhlIGFuaW1hdGlvbiBmcmFtZSBzbyB0aGV5IGFyZSBub3QgZ29vZCBmb3IgdHJpZ2dlcmluZyB0aWdodGx5XG5cdFx0ICogICAgICAgICBzeW5jaHJvbml6ZWQgdmlzdWFscyBhbmQgc291bmQuIFRvbmUuRHJhdyBtYWtlcyBpdCBlYXN5IHRvIHNjaGVkdWxlXG5cdFx0ICogICAgICAgICBjYWxsYmFja3MgdXNpbmcgdGhlIEF1ZGlvQ29udGV4dCB0aW1lIGFuZCB1c2VzIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cblx0XHQgKiAgICAgICAgIFxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly91c2UgdGhlIHRpbWUgYXJndW1lbnQgdG8gc2NoZWR1bGUgYSBjYWxsYmFjayB3aXRoIFRvbmUuRHJhd1xuXHRcdCAqIFx0VG9uZS5EcmF3LnNjaGVkdWxlKGZ1bmN0aW9uKCl7XG5cdFx0ICogXHRcdC8vZG8gZHJhd2luZyBvciBET00gbWFuaXB1bGF0aW9uIGhlcmVcblx0XHQgKiBcdH0sIHRpbWUpXG5cdFx0ICogfSwgXCIrMC41XCIpXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgZXZlbnRzLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFRvbmUuVGltZWxpbmUoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZHVyYXRpb24gYWZ0ZXIgd2hpY2ggZXZlbnRzIGFyZSBub3QgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAZGVmYXVsdCAwLjI1XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmV4cGlyYXRpb24gPSAwLjI1O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSBiZWZvcmUgdGhlIHNjaGVkdWxlZCB0aW1lIFxuXHRcdFx0ICogIHRoYXQgdGhlIGNhbGxiYWNrIGNhbiBiZSBpbnZva2VkLiBEZWZhdWx0IGlzXG5cdFx0XHQgKiAgaGFsZiB0aGUgdGltZSBvZiBhbiBhbmltYXRpb24gZnJhbWUgKDAuMDA4IHNlY29uZHMpLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBkZWZhdWx0IDAuMDA4XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmFudGljaXBhdGlvbiA9IDAuMDA4O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkcmF3IGxvb3Bcblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ib3VuZERyYXdMb29wID0gdGhpcy5fZHJhd0xvb3AuYmluZCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkRyYXcpO1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGEgZnVuY3Rpb24gYXQgdGhlIGdpdmVuIHRpbWUgdG8gYmUgaW52b2tlZFxuXHRcdCAqICBvbiB0aGUgbmVhcmVzdCBhbmltYXRpb24gZnJhbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIENhbGxiYWNrIGlzIGludm9rZWQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICAgIHRpbWUgICAgICBUaGUgdGltZSByZWxhdGl2ZSB0byB0aGUgQXVkaW9Db250ZXh0IHRpbWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGludm9rZSB0aGUgY2FsbGJhY2suXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkRyYXd9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdy5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuXHQgICAgICAgICAgICB0aW1lOiB0aGlzLnRvU2Vjb25kcyh0aW1lKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGRyYXcgbG9vcCBvbiB0aGUgZmlyc3QgZXZlbnRcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYm91bmREcmF3TG9vcCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgZXZlbnRzIHNjaGVkdWxlZCBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIGFmdGVyICBUaW1lIGFmdGVyIHdoaWNoIHNjaGVkdWxlZCBldmVudHMgd2lsbCBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzY2hlZHVsaW5nIHRpbWVsaW5lLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5EcmF3fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EcmF3LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKHRoaXMudG9TZWNvbmRzKGFmdGVyKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkcmF3IGxvb3Bcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdy5wcm90b3R5cGUuX2RyYXdMb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub3cgPSBUb25lLm5vdygpO1xuXHQgICAgICAgIHdoaWxlICh0aGlzLl9ldmVudHMubGVuZ3RoICYmIHRoaXMuX2V2ZW50cy5wZWVrKCkudGltZSAtIHRoaXMuYW50aWNpcGF0aW9uIDw9IG5vdykge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHMuc2hpZnQoKTtcblx0ICAgICAgICAgICAgaWYgKG5vdyAtIGV2ZW50LnRpbWUgPD0gdGhpcy5leHBpcmF0aW9uKSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5jYWxsYmFjaygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYm91bmREcmF3TG9vcCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8vbWFrZSBhIHNpbmdsZXRvblxuXHQgICAgVG9uZS5EcmF3ID0gbmV3IFRvbmUuRHJhdygpO1xuXHQgICAgcmV0dXJuIFRvbmUuRHJhdztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCb3RoIFRvbmUuUGFubmVyM0QgYW5kIFRvbmUuTGlzdGVuZXIgaGF2ZSBhIHBvc2l0aW9uIGluIDNEIHNwYWNlXG5cdFx0ICogICAgICAgICAgdXNpbmcgYSByaWdodC1oYW5kZWQgY2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtLlxuXHRcdCAqICAgICAgICAgIFRoZSB1bml0cyB1c2VkIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBhcmUgbm90IGRlZmluZWQ7XG5cdFx0ICogICAgICAgICAgdGhlc2UgY29vcmRpbmF0ZXMgYXJlIGluZGVwZW5kZW50L2ludmFyaWFudCBvZiBhbnkgcGFydGljdWxhclxuXHRcdCAqICAgICAgICAgIHVuaXRzIHN1Y2ggYXMgbWV0ZXJzIG9yIGZlZXQuIFRvbmUuUGFubmVyM0Qgb2JqZWN0cyBoYXZlIGFuIGZvcndhcmRcblx0XHQgKiAgICAgICAgICB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBkaXJlY3Rpb24gdGhlIHNvdW5kIGlzIHByb2plY3RpbmcuIEFkZGl0aW9uYWxseSxcblx0XHQgKiAgICAgICAgICB0aGV5IGhhdmUgYSBzb3VuZCBjb25lIHJlcHJlc2VudGluZyBob3cgZGlyZWN0aW9uYWwgdGhlIHNvdW5kIGlzLlxuXHRcdCAqICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgc291bmQgY291bGQgYmUgb21uaWRpcmVjdGlvbmFsLCBpbiB3aGljaCBjYXNlIGl0IHdvdWxkXG5cdFx0ICogICAgICAgICAgYmUgaGVhcmQgYW55d2hlcmUgcmVnYXJkbGVzcyBvZiBpdHMgZm9yd2FyZCwgb3IgaXQgY2FuIGJlIG1vcmUgZGlyZWN0aW9uYWxcblx0XHQgKiAgICAgICAgICBhbmQgaGVhcmQgb25seSBpZiBpdCBpcyBmYWNpbmcgdGhlIGxpc3RlbmVyLiBUb25lLkxpc3RlbmVyIG9iamVjdHNcblx0XHQgKiAgICAgICAgICAocmVwcmVzZW50aW5nIGEgcGVyc29uJ3MgZWFycykgaGF2ZSBhbiBmb3J3YXJkIGFuZCB1cCB2ZWN0b3Jcblx0XHQgKiAgICAgICAgICByZXByZXNlbnRpbmcgaW4gd2hpY2ggZGlyZWN0aW9uIHRoZSBwZXJzb24gaXMgZmFjaW5nLiBCZWNhdXNlIGJvdGggdGhlXG5cdFx0ICogICAgICAgICAgc291cmNlIHN0cmVhbSBhbmQgdGhlIGxpc3RlbmVyIGNhbiBiZSBtb3ZpbmcsIHRoZXkgYm90aCBoYXZlIGEgdmVsb2NpdHlcblx0XHQgKiAgICAgICAgICB2ZWN0b3IgcmVwcmVzZW50aW5nIGJvdGggdGhlIHNwZWVkIGFuZCBkaXJlY3Rpb24gb2YgbW92ZW1lbnQuIFRha2VuIHRvZ2V0aGVyLFxuXHRcdCAqICAgICAgICAgIHRoZXNlIHR3byB2ZWxvY2l0aWVzIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgZG9wcGxlciBzaGlmdCBlZmZlY3Qgd2hpY2ggY2hhbmdlcyB0aGUgcGl0Y2guXG5cdFx0ICogICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBOb3RlOiB0aGUgcG9zaXRpb24gb2YgdGhlIExpc3RlbmVyIHdpbGwgaGF2ZSBubyBlZmZlY3Qgb24gbm9kZXMgbm90IGNvbm5lY3RlZCB0byBhIFRvbmUuUGFubmVyM0Rcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IGZvcndhcmQgb3JpZW50YXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IFtcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMFxuXHQgICAgICAgIF07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IFtcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMFxuXHQgICAgICAgIF07XG5cdCAgICAgICAgVG9uZS5nZXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gc2V0IHRoZSBkZWZhdWx0IHBvc2l0aW9uL2ZvcndhcmRcblx0ICAgICAgICAgICAgdGhpcy5zZXQoTGlzdGVuZXJDb25zdHJ1Y3Rvci5kZWZhdWx0cyk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxpc3RlbmVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0cyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Bvc2l0aW9uWCc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWSc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWic6IDAsXG5cdCAgICAgICAgJ2ZvcndhcmRYJzogMCxcblx0ICAgICAgICAnZm9yd2FyZFknOiAwLFxuXHQgICAgICAgICdmb3J3YXJkWic6IDEsXG5cdCAgICAgICAgJ3VwWCc6IDAsXG5cdCAgICAgICAgJ3VwWSc6IDEsXG5cdCAgICAgICAgJ3VwWic6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcmFtcCB0aW1lIHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIHNldFRhcmdldEF0VGltZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLl9yYW1wVGltZUNvbnN0YW50ID0gMC4wMTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGlzdGVuZXIgaW4gM2Qgc3BhY2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEByZXR1cm4ge1RvbmUuTGlzdGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24gKHgsIHksIHopIHtcblx0ICAgICAgICBpZiAodGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWC5zZXRUYXJnZXRBdFRpbWUoeCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuc2V0UG9zaXRpb24oeCwgeSwgeik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGxpc3RlbmVyIHVzaW5nIHR3byB2ZWN0b3JzLCB0aGUgZm9yd2FyZFxuXHRcdCAqICB2ZWN0b3IgKHdoaWNoIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgZmFjaW5nKSBhbmQgdGhlIHVwIHZlY3RvclxuXHRcdCAqICAod2hpY2ggdGhlIHVwIGRpcmVjdGlvbiBvZiB0aGUgbGlzdGVuZXIpLiBBbiB1cCB2ZWN0b3Jcblx0XHQgKiAgb2YgMCwgMCwgMSBpcyBlcXVpdmFsZW50IHRvIHRoZSBsaXN0ZW5lciBzdGFuZGluZyB1cCBpbiB0aGUgWiBkaXJlY3Rpb24uXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHVwWFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB1cFlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdXBaXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuTGlzdGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLnNldE9yaWVudGF0aW9uID0gZnVuY3Rpb24gKHgsIHksIHosIHVwWCwgdXBZLCB1cFopIHtcblx0ICAgICAgICBpZiAodGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRYKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuZm9yd2FyZFguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRaLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIudXBYLnNldFRhcmdldEF0VGltZSh1cFgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci51cFkuc2V0VGFyZ2V0QXRUaW1lKHVwWSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnVwWi5zZXRUYXJnZXRBdFRpbWUodXBaLCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5zZXRPcmllbnRhdGlvbih4LCB5LCB6LCB1cFgsIHVwWSwgdXBaKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAncG9zaXRpb25YJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25ZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdwb3NpdGlvblknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3Bvc2l0aW9uWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcnMgZnJvbnQgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHdoaWNoIHdheSB0aGV5IGFyZSBmYWNpbmcuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBmb3J3YXJkWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAnZm9yd2FyZFgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXJzIGZyb250IGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB3aGljaCB3YXkgdGhleSBhcmUgZmFjaW5nLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgZm9yd2FyZFlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ2ZvcndhcmRZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblsxXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzFdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVycyBmcm9udCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgd2hpY2ggd2F5IHRoZXkgYXJlIGZhY2luZy5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIGZvcndhcmRaXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdmb3J3YXJkWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcidzIHVwIGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB0aGUgZGlyZWN0aW9uIHRoZSBsaXN0ZW5lciBpcyBzdGFuZGluZyBpbi5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHVwWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAndXBYJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblszXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzNdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVyJ3MgdXAgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHRoZSBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIHN0YW5kaW5nIGluLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgdXBZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICd1cFknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzRdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bNF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXIncyB1cCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgdGhlIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgc3RhbmRpbmcgaW4uXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSB1cFpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3VwWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bNV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvbls1XTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTGlzdGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvL1NJTkdMRVRPTiBTRVRVUFxuXHQgICAgdmFyIExpc3RlbmVyQ29uc3RydWN0b3IgPSBUb25lLkxpc3RlbmVyO1xuXHQgICAgVG9uZS5MaXN0ZW5lciA9IG5ldyBMaXN0ZW5lckNvbnN0cnVjdG9yKCk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0Lkxpc3RlbmVyIGluc3RhbmNlb2YgTGlzdGVuZXJDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAvL2Egc2luZ2xlIGxpc3RlbmVyIG9iamVjdFxuXHQgICAgICAgICAgICBUb25lLkxpc3RlbmVyID0gY29udGV4dC5MaXN0ZW5lcjtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL21ha2UgbmV3IExpc3RlbmVyIGluc2lkZXNcblx0ICAgICAgICAgICAgVG9uZS5MaXN0ZW5lciA9IG5ldyBMaXN0ZW5lckNvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGNvbnRleHQuTGlzdGVuZXIgPSBUb25lLkxpc3RlbmVyO1xuXHQgICAgfSk7XG5cdCAgICAvL0VORCBTSU5HTEVUT04gU0VUVVBcblx0ICAgIHJldHVybiBUb25lLkxpc3RlbmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBCZWNhdXNlIG9mIGEgYnVnIGluIGlPUyBjYXVzaW5nIHRoZSBjdXJyZW50VGltZSB0byBpbmNyZW1lbnRcblx0XHQgKiBiZWZvcmUgdGhlIHJlbmRlcmluZyBpcyBzdGFydGVkLCBzb21ldGltZXMgaXQgdGFrZXMgbXVsdGlwbGVcblx0XHQgKiBhdHRlbXB0cyB0byByZW5kZXIgdGhlIGF1ZGlvIGNvcnJlY3RseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgZnVuY3Rpb24gYXR0ZW1wdFJlbmRlcihjYWxsYmFjaywgZHVyYXRpb24sIHNhbXBsZVJhdGUsIHRyaWVzKSB7XG5cdCAgICAgICAgdHJpZXMgPSBUb25lLmRlZmF1bHRBcmcodHJpZXMsIDApO1xuXHQgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IFRvbmUuT2ZmbGluZUNvbnRleHQoMiwgZHVyYXRpb24sIHNhbXBsZVJhdGUpO1xuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgLy9pbnZva2UgdGhlIGNhbGxiYWNrL3NjaGVkdWxpbmdcblx0ICAgICAgICB2YXIgcmVzcG9uc2UgPSBjYWxsYmFjayhUb25lLlRyYW5zcG9ydCk7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuY3VycmVudFRpbWUgPiAwICYmIHRyaWVzIDwgMTAwMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFJlbmRlcihjYWxsYmFjaywgZHVyYXRpb24sIHNhbXBsZVJhdGUsICsrdHJpZXMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgICAgICAncmVzcG9uc2UnOiByZXNwb25zZSxcblx0ICAgICAgICAgICAgICAgICdjb250ZXh0JzogY29udGV4dFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0ICAgIC8qKlxuXHRcdCAqICBHZW5lcmF0ZSBhIGJ1ZmZlciBieSByZW5kZXJpbmcgYWxsIG9mIHRoZSBUb25lLmpzIGNvZGUgd2l0aGluIHRoZSBjYWxsYmFjayB1c2luZyB0aGUgT2ZmbGluZUF1ZGlvQ29udGV4dC5cblx0XHQgKiAgVGhlIE9mZmxpbmVBdWRpb0NvbnRleHQgaXMgY2FwYWJsZSBvZiByZW5kZXJpbmcgbXVjaCBmYXN0ZXIgdGhhbiByZWFsIHRpbWUgaW4gbWFueSBjYXNlcy5cblx0XHQgKiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFsc28gcGFzc2VzIGluIGFuIG9mZmxpbmUgaW5zdGFuY2Ugb2YgVG9uZS5UcmFuc3BvcnQgd2hpY2ggY2FuIGJlIHVzZWRcblx0XHQgKiAgdG8gc2NoZWR1bGUgZXZlbnRzIGFsb25nIHRoZSBUcmFuc3BvcnQuICoqTk9URSoqIE9mZmxpbmVBdWRpb0NvbnRleHQgaGFzIHRoZSBzYW1lIHJlc3RyaWN0aW9uc1xuXHRcdCAqICBhcyB0aGUgQXVkaW9Db250ZXh0IGluIHRoYXQgb24gY2VydGFpbiBwbGF0Zm9ybXMgKGxpa2UgaU9TKSBpdCBtdXN0IGJlIGludm9rZWQgYnkgYW4gZXhwbGljaXRcblx0XHQgKiAgdXNlciBhY3Rpb24gbGlrZSBhIGNsaWNrIG9yIHRhcC4gXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIEFsbCBUb25lLmpzIG5vZGVzIHdoaWNoIGFyZSBjcmVhdGVkIGFuZCBzY2hlZHVsZWQgd2l0aGluIHRoaXMgY2FsbGJhY2sgYXJlIHJlY29yZGVkIGludG8gdGhlIG91dHB1dCBCdWZmZXIuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICBkdXJhdGlvbiAgICAgdGhlIGFtb3VudCBvZiB0aW1lIHRvIHJlY29yZCBmb3IuXG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfSAgVGhlIHByb21pc2Ugd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBUb25lLkJ1ZmZlciBvZiB0aGUgcmVjb3JkZWQgb3V0cHV0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcmVuZGVyIDIgc2Vjb25kcyBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqIFRvbmUuT2ZmbGluZShmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly9vbmx5IG5vZGVzIGNyZWF0ZWQgaW4gdGhpcyBjYWxsYmFjayB3aWxsIGJlIHJlY29yZGVkXG5cdFx0ICogXHR2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS50b01hc3RlcigpLnN0YXJ0KDApXG5cdFx0ICogXHQvL3NjaGVkdWxlIHRoZWlyIGV2ZW50c1xuXHRcdCAqIH0sIDIpLnRoZW4oZnVuY3Rpb24oYnVmZmVyKXtcblx0XHQgKiBcdC8vZG8gc29tZXRoaW5nIHdpdGggdGhlIG91dHB1dCBidWZmZXJcblx0XHQgKiB9KVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gYWxzbyBzY2hlZHVsZSBldmVudHMgYWxvbmcgdGhlIFRyYW5zcG9ydFxuXHRcdCAqIC8vdXNpbmcgdGhlIHBhc3NlZCBpbiBPZmZsaW5lIFRyYW5zcG9ydFxuXHRcdCAqIFRvbmUuT2ZmbGluZShmdW5jdGlvbihUcmFuc3BvcnQpe1xuXHRcdCAqIFx0dmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS50b01hc3RlcigpXG5cdFx0ICogXHRUcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHRcdG9zYy5zdGFydCh0aW1lKS5zdG9wKHRpbWUgKyAwLjEpXG5cdFx0ICogXHR9LCAxKVxuXHRcdCAqIFx0VHJhbnNwb3J0LnN0YXJ0KDAuMilcblx0XHQgKiB9LCA0KS50aGVuKGZ1bmN0aW9uKGJ1ZmZlcil7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSBvdXRwdXQgYnVmZmVyXG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgZHVyYXRpb24pIHtcblx0ICAgICAgICAvL3NldCB0aGUgT2ZmbGluZUF1ZGlvQ29udGV4dFxuXHQgICAgICAgIHZhciBzYW1wbGVSYXRlID0gVG9uZS5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsQ29udGV4dCA9IFRvbmUuY29udGV4dDtcblx0ICAgICAgICB2YXIgcmVuZGVyUmV0ID0gYXR0ZW1wdFJlbmRlcihjYWxsYmFjaywgZHVyYXRpb24sIHNhbXBsZVJhdGUpO1xuXHQgICAgICAgIHZhciByZXNwb25zZSA9IHJlbmRlclJldC5yZXNwb25zZTtcblx0ICAgICAgICB2YXIgY29udGV4dCA9IHJlbmRlclJldC5jb250ZXh0O1xuXHQgICAgICAgIHZhciByZXQ7XG5cdCAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHQgICAgICAgICAgICAvL3dhaXQgZm9yIHRoZSBwcm9taXNlIHRvIHJlc29sdmVcblx0ICAgICAgICAgICAgcmV0ID0gcmVzcG9uc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAvL3RoZW4gcmVuZGVyIHRoZSBhdWRpb1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQucmVuZGVyKCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vcHJvY2VzcyB0aGUgYXVkaW9cblx0ICAgICAgICAgICAgcmV0ID0gY29udGV4dC5yZW5kZXIoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIG9yaWdpbmFsIEF1ZGlvQ29udGV4dFxuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IG9yaWdpbmFsQ29udGV4dDtcblx0ICAgICAgICAvL3JldHVybiB0aGUgYXVkaW9cblx0ICAgICAgICByZXR1cm4gcmV0LnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICAvL3dyYXAgaXQgaW4gYSBUb25lLkJ1ZmZlclxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuQnVmZmVyKGJ1ZmZlcik7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT2ZmbGluZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiBcdEBjbGFzcyAgVG9uZS5FZmZlY3QgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGVmZmVjdHMuIENvbm5lY3QgdGhlIGVmZmVjdCBiZXR3ZWVuXG5cdFx0ICogXHQgICAgICAgIHRoZSBlZmZlY3RTZW5kIGFuZCBlZmZlY3RSZXR1cm4gR2Fpbk5vZGVzLCB0aGVuIGNvbnRyb2wgdGhlIGFtb3VudCBvZlxuXHRcdCAqIFx0ICAgICAgICBlZmZlY3Qgd2hpY2ggZ29lcyB0byB0aGUgb3V0cHV0IHVzaW5nIHRoZSB3ZXQgY29udHJvbC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3dldF0gVGhlIHN0YXJ0aW5nIHdldCB2YWx1ZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnd2V0J10sIFRvbmUuRWZmZWN0KTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZHJ5d2V0IGtub2IgdG8gY29udHJvbCB0aGUgYW1vdW50IG9mIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNyb3NzRmFkZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0ID0gbmV3IFRvbmUuQ3Jvc3NGYWRlKG9wdGlvbnMud2V0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgd2V0IGNvbnRyb2wgaXMgaG93IG11Y2ggb2YgdGhlIGVmZmVjdGVkXG5cdFx0XHQgKiAgd2lsbCBwYXNzIHRocm91Z2ggdG8gdGhlIG91dHB1dC4gMSA9IDEwMCUgZWZmZWN0ZWRcblx0XHRcdCAqICBzaWduYWwsIDAgPSAxMDAlIGRyeSBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2V0ID0gdGhpcy5fZHJ5V2V0LmZhZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29ubmVjdCB0aGUgZWZmZWN0U2VuZCB0byB0aGUgaW5wdXQgb2YgaHRlIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhlIGVmZmVjdCB0byB0aGUgZWZmZWN0UmV0dXJuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9kcnlXZXQuYSk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuZWZmZWN0U2VuZCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4uY29ubmVjdCh0aGlzLl9kcnlXZXQuYik7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnd2V0J10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRWZmZWN0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FZmZlY3QuZGVmYXVsdHMgPSB7ICd3ZXQnOiAxIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2hhaW5zIHRoZSBlZmZlY3QgaW4gYmV0d2VlbiB0aGUgZWZmZWN0U2VuZCBhbmQgZWZmZWN0UmV0dXJuXG5cdFx0ICogIEBwYXJhbSAge1RvbmV9IGVmZmVjdFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5jb25uZWN0RWZmZWN0ID0gZnVuY3Rpb24gKGVmZmVjdCkge1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbihlZmZlY3QsIHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd3ZXQnXSk7XG5cdCAgICAgICAgdGhpcy53ZXQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQXV0b0ZpbHRlciBpcyBhIFRvbmUuRmlsdGVyIHdpdGggYSBUb25lLkxGTyBjb25uZWN0ZWQgdG8gdGhlIGZpbHRlciBjdXRvZmYgZnJlcXVlbmN5LlxuXHRcdCAqICAgICAgICAgU2V0dGluZyB0aGUgTEZPIHJhdGUgYW5kIGRlcHRoIGFsbG93cyBmb3IgY29udHJvbCBvdmVyIHRoZSBmaWx0ZXIgbW9kdWxhdGlvbiByYXRlIFxuXHRcdCAqICAgICAgICAgYW5kIGRlcHRoLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSByYXRlIG9mIHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5PX0gYmFzZUZyZXF1ZW5jeSBUaGUgbG93ZXIgdmFsdWUgb2YgdGhlIExGT3Mgb3NjaWxsYXRpb25cblx0IFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5PX0gb2N0YXZlcyBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIGJhc2VGcmVxdWVuY3lcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhbiBhdXRvZmlsdGVyIGFuZCBzdGFydCBpdCdzIExGT1xuXHRcdCAqIHZhciBhdXRvRmlsdGVyID0gbmV3IFRvbmUuQXV0b0ZpbHRlcihcIjRuXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKiAvL3JvdXRlIGFuIG9zY2lsbGF0b3IgdGhyb3VnaCB0aGUgZmlsdGVyIGFuZCBzdGFydCBpdFxuXHRcdCAqIHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QoYXV0b0ZpbHRlcikuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJ1xuXHQgICAgICAgIF0sIFRvbmUuQXV0b0ZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGRyaXZlcyB0aGUgZmlsdGVyIGN1dG9mZlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnYW1wbGl0dWRlJzogb3B0aW9ucy5kZXB0aFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHJhbmdlIG9mIHRoZSBmaWx0ZXIgbW9kdWxhdGluZyBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCBmcmVxdWVuY3kuIFxuXHRcdFx0ICogMCA9IG5vIG1vZHVsYXRpb24uIDEgPSBmdWxsIG1vZHVsYXRpb24uXG5cdFx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fbGZvLmFtcGxpdHVkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEhvdyBmYXN0IHRoZSBmaWx0ZXIgbW9kdWxhdGVzIGJldHdlZW4gbWluIGFuZCBtYXguIFxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlsdGVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG5ldyBUb25lLkZpbHRlcihvcHRpb25zLmZpbHRlcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9jdGF2ZXMgcGxhY2Vob2xkZXJcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSAwO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5maWx0ZXIpO1xuXHQgICAgICAgIHRoaXMuX2xmby5jb25uZWN0KHRoaXMuZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgdGhpcy5iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgfTtcblx0ICAgIC8vZXh0ZW5kIEVmZmVjdFxuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdXRvRmlsdGVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdHNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdkZXB0aCc6IDEsXG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAyLjYsXG5cdCAgICAgICAgJ2ZpbHRlcic6IHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnbG93cGFzcycsXG5cdCAgICAgICAgICAgICdyb2xsb2ZmJzogLTEyLFxuXHQgICAgICAgICAgICAnUSc6IDFcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RhcnQgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RhcnQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0b3AuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgZmlsdGVyIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbZGVsYXk9MF0gRGVsYXkgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIGVmZmVjdCBhZnRlciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgaGFzIHN0YXJ0ZWQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uIChkZWxheSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zeW5jKGRlbGF5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIGZpbHRlciBmcm9tIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnVuc3luYygpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFR5cGUgb2Ygb3NjaWxsYXRvciBhdHRhY2hlZCB0byB0aGUgQXV0b0ZpbHRlci4gXG5cdFx0ICogUG9zc2libGUgdmFsdWVzOiBcInNpbmVcIiwgXCJzcXVhcmVcIiwgXCJ0cmlhbmdsZVwiLCBcInNhd3Rvb3RoXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmby50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8udHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgZmlsdGVyJ3MgY3V0b2ZmIGZyZXF1ZW5jeS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8ubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8ubWluID0gdGhpcy50b0ZyZXF1ZW5jeShmcmVxKTtcblx0ICAgICAgICAgICAgLy9hbmQgc2V0IHRoZSBtYXhcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBmaWx0ZXIncyBjdXRvZmYgZnJlcXVlbmN5LiBcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3Q7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby5tYXggPSB0aGlzLmJhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCBvY3QpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGZvLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdXRvRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BdXRvUGFubmVyIGlzIGEgVG9uZS5QYW5uZXIgd2l0aCBhbiBMRk8gY29ubmVjdGVkIHRvIHRoZSBwYW4gYW1vdW50LiBcblx0XHQgKiAgICAgICAgIE1vcmUgb24gdXNpbmcgYXV0b3Bhbm5lcnMgW2hlcmVdKGh0dHBzOi8vd3d3LmFibGV0b24uY29tL2VuL2Jsb2cvYXV0b3Bhbi1jaG9wcGVyLWVmZmVjdC1hbmQtbW9yZS1saXZlc2Nob29sLykuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBSYXRlIG9mIGxlZnQtcmlnaHQgb3NjaWxsYXRpb24uIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY3JlYXRlIGFuIGF1dG9wYW5uZXIgYW5kIHN0YXJ0IGl0J3MgTEZPXG5cdFx0ICogdmFyIGF1dG9QYW5uZXIgPSBuZXcgVG9uZS5BdXRvUGFubmVyKFwiNG5cIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqIC8vcm91dGUgYW4gb3NjaWxsYXRvciB0aHJvdWdoIHRoZSBwYW5uZXIgYW5kIHN0YXJ0IGl0XG5cdFx0ICogdmFyIG9zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkuY29ubmVjdChhdXRvUGFubmVyKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZnJlcXVlbmN5J10sIFRvbmUuQXV0b1Bhbm5lcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGRyaXZlcyB0aGUgcGFubmluZ1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnYW1wbGl0dWRlJzogb3B0aW9ucy5kZXB0aCxcblx0ICAgICAgICAgICAgJ21pbic6IC0xLFxuXHQgICAgICAgICAgICAnbWF4JzogMVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtb3VudCBvZiBwYW5uaW5nIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQuIFxuXHRcdFx0ICogMCA9IGFsd2F5cyBjZW50ZXIuIDEgPSBmdWxsIHJhbmdlIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQuIFxuXHRcdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2xmby5hbXBsaXR1ZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBhbm5lciBub2RlIHdoaWNoIGRvZXMgdGhlIHBhbm5pbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5QYW5uZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG5ldyBUb25lLlBhbm5lcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogSG93IGZhc3QgdGhlIHBhbm5lciBtb2R1bGF0ZXMgYmV0d2VlbiBsZWZ0IGFuZCByaWdodC4gXG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fcGFubmVyKTtcblx0ICAgICAgICB0aGlzLl9sZm8uY29ubmVjdCh0aGlzLl9wYW5uZXIucGFuKTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZGVwdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIC8vZXh0ZW5kIEVmZmVjdFxuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdXRvUGFubmVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdHNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdkZXB0aCc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdGFydCB0aGUgZWZmZWN0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBMRk8gd2lsbCBzdGFydC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RvcC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBwYW5uZXIgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFtkZWxheT0wXSBEZWxheSB0aW1lIGJlZm9yZSBzdGFydGluZyB0aGUgZWZmZWN0IGFmdGVyIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zcG9ydCBoYXMgc3RhcnRlZC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKGRlbGF5KSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN5bmMoZGVsYXkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgcGFubmVyIGZyb20gdGhlIHRyYW5zcG9ydFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2xmby51bnN5bmMoKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUeXBlIG9mIG9zY2lsbGF0b3IgYXR0YWNoZWQgdG8gdGhlIEF1dG9GaWx0ZXIuIFxuXHRcdCAqIFBvc3NpYmxlIHZhbHVlczogXCJzaW5lXCIsIFwic3F1YXJlXCIsIFwidHJpYW5nbGVcIiwgXCJzYXd0b290aFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9GaWx0ZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xmby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZGVwdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdXRvUGFubmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuQXV0b1dhaCBjb25uZWN0cyBhIFRvbmUuRm9sbG93ZXIgdG8gYSBiYW5kcGFzcyBmaWx0ZXIgKFRvbmUuRmlsdGVyKS5cblx0XHQgKiAgICAgICAgICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIgaXMgYWRqdXN0ZWQgcHJvcG9ydGlvbmFsbHkgdG8gdGhlXG5cdFx0ICogICAgICAgICAgaW5jb21pbmcgc2lnbmFsJ3MgYW1wbGl0dWRlLiBJbnNwaXJhdGlvbiBmcm9tIFtUdW5hLmpzXShodHRwczovL2dpdGh1Yi5jb20vRGluYWhtb2UvdHVuYSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbYmFzZUZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSB0aGUgZmlsdGVyIGlzIHNldFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhdCB0aGUgbG93IHBvaW50IG9mIHRoZSB3YWhcblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gW29jdGF2ZXNdIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlsdGVyIHdpbGwgc3dlZXAgdG8gd2hlbiBmdWxseSBvcGVuXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFtzZW5zaXRpdml0eV0gVGhlIGRlY2liZWwgdGhyZXNob2xkIHNlbnNpdGl2aXR5IGZvclxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5jb21pbmcgc2lnbmFsLiBOb3JtYWwgcmFuZ2Ugb2YgLTQwIHRvIDAuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGF1dG9XYWggPSBuZXcgVG9uZS5BdXRvV2FoKDUwLCA2LCAtMzApLnRvTWFzdGVyKCk7XG5cdFx0ICogLy9pbml0aWFsaXplIHRoZSBzeW50aCBhbmQgY29ubmVjdCB0byBhdXRvd2FoXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFN5bnRoLmNvbm5lY3QoYXV0b1dhaCk7XG5cdFx0ICogLy9RIHZhbHVlIGluZmx1ZW5jZXMgdGhlIGVmZmVjdCBvZiB0aGUgd2FoIC0gZGVmYXVsdCBpcyAyXG5cdFx0ICogYXV0b1dhaC5RLnZhbHVlID0gNjtcblx0XHQgKiAvL21vcmUgYXVkaWJsZSBvbiBoaWdoZXIgbm90ZXNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiOG5cIilcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdiYXNlRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnLFxuXHQgICAgICAgICAgICAnc2Vuc2l0aXZpdHknXG5cdCAgICAgICAgXSwgVG9uZS5BdXRvV2FoKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBlbnZlbG9wZSBmb2xsb3dlci4gU2V0IHRoZSBhdHRhY2svcmVsZWFzZVxuXHRcdFx0ICogIHRpbWluZyB0byBhZGp1c3QgaG93IHRoZSBlbnZlbG9wZSBpcyBmb2xsb3dlZC5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Gb2xsb3dlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mb2xsb3dlciA9IG5ldyBUb25lLkZvbGxvd2VyKG9wdGlvbnMuZm9sbG93ZXIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlcyB0aGUgZm9sbG93ZXIgdmFsdWUgdG8gdGhlIGZyZXF1ZW5jeSBkb21haW5cblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZSA9IG5ldyBUb25lLlNjYWxlRXhwKDAsIDEsIDAuNSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dCBnYWluIHRvIGFkanVzdCB0aGUgc2Vuc2l0aXZpdHlcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnB1dEJvb3N0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtCaXF1YWRGaWx0ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iYW5kcGFzcyA9IG5ldyBUb25lLkZpbHRlcih7XG5cdCAgICAgICAgICAgICdyb2xsb2ZmJzogLTQ4LFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5JzogMCxcblx0ICAgICAgICAgICAgJ1EnOiBvcHRpb25zLlFcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcgPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ3BlYWtpbmcnKTtcblx0ICAgICAgICB0aGlzLl9wZWFraW5nLmdhaW4udmFsdWUgPSBvcHRpb25zLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBvZiB0aGUgZmlsdGVyLlxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IHRoaXMuX3BlYWtpbmcuZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBxdWFsaXR5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSB0aGlzLl9iYW5kcGFzcy5RO1xuXHQgICAgICAgIC8vdGhlIGNvbnRyb2wgc2lnbmFsIHBhdGhcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4odGhpcy5faW5wdXRCb29zdCwgdGhpcy5mb2xsb3dlciwgdGhpcy5fc3dlZXBSYW5nZSk7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5jb25uZWN0KHRoaXMuX2JhbmRwYXNzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5jb25uZWN0KHRoaXMuX3BlYWtpbmcuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3RoZSBmaWx0ZXJlZCBwYXRoXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNoYWluKHRoaXMuX2JhbmRwYXNzLCB0aGlzLl9wZWFraW5nLCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVcblx0ICAgICAgICB0aGlzLl9zZXRTd2VlcFJhbmdlKCk7XG5cdCAgICAgICAgdGhpcy5zZW5zaXRpdml0eSA9IG9wdGlvbnMuc2Vuc2l0aXZpdHk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXV0b1dhaCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDEwMCxcblx0ICAgICAgICAnb2N0YXZlcyc6IDYsXG5cdCAgICAgICAgJ3NlbnNpdGl2aXR5JzogMCxcblx0ICAgICAgICAnUSc6IDIsXG5cdCAgICAgICAgJ2dhaW4nOiAyLFxuXHQgICAgICAgICdmb2xsb3dlcic6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoYXQgdGhlIGZpbHRlciB3aWxsIHN3ZWVwIGFib3ZlIHRoZVxuXHRcdCAqIGJhc2VGcmVxdWVuY3kuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b1dhaCNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9XYWgucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3RhdmVzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3RhdmVzO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRTd2VlcFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYmFzZSBmcmVxdWVuY3kgZnJvbSB3aGljaCB0aGUgc3dlZXAgd2lsbCBzdGFydCBmcm9tLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9XYWgjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAbmFtZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvV2FoLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYmFzZUZyZXEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IGJhc2VGcmVxO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRTd2VlcFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2Vuc2l0aXZpdHkgdG8gY29udHJvbCBob3cgcmVzcG9uc2l2ZSB0byB0aGUgaW5wdXQgc2lnbmFsIHRoZSBmaWx0ZXIgaXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b1dhaCNcblx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0ICogQG5hbWUgc2Vuc2l0aXZpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9XYWgucHJvdG90eXBlLCAnc2Vuc2l0aXZpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmdhaW5Ub0RiKDEgLyB0aGlzLl9pbnB1dEJvb3N0LmdhaW4udmFsdWUpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2Vuc2l0aXZ5KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QuZ2Fpbi52YWx1ZSA9IDEgLyBUb25lLmRiVG9HYWluKHNlbnNpdGl2eSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgc2V0cyB0aGUgc3dlZXAgcmFuZ2Ugb2YgdGhlIHNjYWxlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvV2FoLnByb3RvdHlwZS5fc2V0U3dlZXBSYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLm1pbiA9IHRoaXMuX2Jhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5tYXggPSBNYXRoLm1pbih0aGlzLl9iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgdGhpcy5fb2N0YXZlcyksIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlIC8gMik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdXRvV2FofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmZvbGxvd2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZvbGxvd2VyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9iYW5kcGFzcy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYmFuZHBhc3MgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmdhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXV0b1dhaDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFNpZ25hbC1yYXRlIG1vZHVsbyBvcGVyYXRvci4gT25seSB3b3JrcyBpbiBBdWRpb1JhbmdlIFstMSwgMV0gYW5kIGZvciBtb2R1bHVzXG5cdFx0ICogICAgICAgICB2YWx1ZXMgaW4gdGhlIE5vcm1hbFJhbmdlLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBtb2R1bHVzIFRoZSBtb2R1bHVzIHRvIGFwcGx5LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtb2QgPSBuZXcgVG9uZS5Nb2R1bG8oMC4yKVxuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KG1vZCk7XG5cdFx0ICogLy9tb2Qgb3V0cHV0cyAwLjFcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9kdWxvID0gZnVuY3Rpb24gKG1vZHVsdXMpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSB3YXZlc2hhcGVyIGdldHMgdGhlIGludGVnZXIgbXVsdGlwbGUgb2Zcblx0XHRcdCAqICB0aGUgaW5wdXQgc2lnbmFsIGFuZCB0aGUgbW9kdWx1cy5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKE1hdGgucG93KDIsIDE2KSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGludGVnZXIgbXVsdGlwbGUgaXMgbXVsdGlwbGllZCBieSB0aGUgbW9kdWx1c1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGFuZCBzdWJ0cmFjdGVkIGZyb20gdGhlIGlucHV0IHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1vZHVsdXMgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKG1vZHVsdXMpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmZhbih0aGlzLl9zaGFwZXIsIHRoaXMuX3N1YnRyYWN0KTtcblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwuY29ubmVjdCh0aGlzLl9tdWx0aXBseSwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmNvbm5lY3QodGhpcy5fbXVsdGlwbHksIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5LmNvbm5lY3QodGhpcy5fc3VidHJhY3QsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX3NldFdhdmVTaGFwZXIobW9kdWx1cyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb2R1bG8sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSAgbW9kICB0aGUgbW9kdWx1cyB0byBhcHBseVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb2R1bG8ucHJvdG90eXBlLl9zZXRXYXZlU2hhcGVyID0gZnVuY3Rpb24gKG1vZCkge1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5zZXRNYXAoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB2YXIgbXVsdGlwbGUgPSBNYXRoLmZsb29yKCh2YWwgKyAwLjAwMDEpIC8gbW9kKTtcblx0ICAgICAgICAgICAgcmV0dXJuIG11bHRpcGxlO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtb2R1bHVzIHZhbHVlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk1vZHVsbyNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1vZHVsby5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZFNpZ25hbC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1vZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2RTaWduYWwudmFsdWUgPSBtb2Q7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFdhdmVTaGFwZXIobW9kKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vZHVsb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb2R1bG8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZFNpZ25hbCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9kdWxvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5CaXRjcnVzaGVyIGRvd25zYW1wbGVzIHRoZSBpbmNvbWluZyBzaWduYWwgdG8gYSBkaWZmZXJlbnQgYml0ZGVwdGguXG5cdFx0ICogICAgICAgICBMb3dlcmluZyB0aGUgYml0ZGVwdGggb2YgdGhlIHNpZ25hbCBjcmVhdGVzIGRpc3RvcnRpb24uIFJlYWQgbW9yZSBhYm91dCBCaXRjcnVzaGluZ1xuXHRcdCAqICAgICAgICAgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQml0Y3J1c2hlcikuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJpdHMgVGhlIG51bWJlciBvZiBiaXRzIHRvIGRvd25zYW1wbGUgdGhlIHNpZ25hbC4gTm9taW5hbCByYW5nZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICBvZiAxIHRvIDguXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pbml0aWFsaXplIGNydXNoZXIgYW5kIHJvdXRlIGEgc3ludGggdGhyb3VnaCBpdFxuXHRcdCAqIHZhciBjcnVzaGVyID0gbmV3IFRvbmUuQml0Q3J1c2hlcig0KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLk1vbm9TeW50aCgpLmNvbm5lY3QoY3J1c2hlcik7XG5cdFx0ICovXG5cdCAgICBUb25lLkJpdENydXNoZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydiaXRzJ10sIFRvbmUuQml0Q3J1c2hlcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICB2YXIgaW52U3RlcFNpemUgPSAxIC8gTWF0aC5wb3coMiwgb3B0aW9ucy5iaXRzIC0gMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU3VidHJhY3QgdGhlIGlucHV0IHNpZ25hbCBhbmQgdGhlIG1vZHVsdXMgb2YgdGhlIGlucHV0IHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZCBmdW5jdGlvblxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Nb2R1bG99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsbyA9IG5ldyBUb25lLk1vZHVsbyhpbnZTdGVwU2l6ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAga2VlcHMgdHJhY2sgb2YgdGhlIGJpdHNcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iaXRzID0gb3B0aW9ucy5iaXRzO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5mYW4odGhpcy5fc3VidHJhY3QsIHRoaXMuX21vZHVsbyk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxvLmNvbm5lY3QodGhpcy5fc3VidHJhY3QsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0LmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQml0Q3J1c2hlciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJpdENydXNoZXIuZGVmYXVsdHMgPSB7ICdiaXRzJzogNCB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGJpdCBkZXB0aCBvZiB0aGUgZWZmZWN0LiBOb21pbmFsIHJhbmdlIG9mIDEtOC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CaXRDcnVzaGVyI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgYml0c1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQml0Q3J1c2hlci5wcm90b3R5cGUsICdiaXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYml0cztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJpdHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYml0cyA9IGJpdHM7XG5cdCAgICAgICAgICAgIHZhciBpbnZTdGVwU2l6ZSA9IDEgLyBNYXRoLnBvdygyLCBiaXRzIC0gMSk7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsby52YWx1ZSA9IGludlN0ZXBTaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5CaXRDcnVzaGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJpdENydXNoZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxvID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CaXRDcnVzaGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5DaGVieVNoZXYgaXMgYSBDaGVieXNoZXYgd2F2ZXNoYXBlciwgYW4gZWZmZWN0IHdoaWNoIGlzIGdvb2QgXG5cdFx0ICogICAgICAgICBmb3IgbWFraW5nIGRpZmZlcmVudCB0eXBlcyBvZiBkaXN0b3J0aW9uIHNvdW5kcy5cblx0XHQgKiAgICAgICAgIE5vdGUgdGhhdCBvZGQgb3JkZXJzIHNvdW5kIHZlcnkgZGlmZmVyZW50IGZyb20gZXZlbiBvbmVzLCBcblx0XHQgKiAgICAgICAgIGFuZCBvcmRlciA9IDEgaXMgbm8gY2hhbmdlLiBcblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBhdCBbbXVzaWMuY29sdW1iaWEuZWR1XShodHRwOi8vbXVzaWMuY29sdW1iaWEuZWR1L2NtYy9tdXNpY2FuZGNvbXB1dGVycy9jaGFwdGVyNC8wNF8wNi5waHApLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV8T2JqZWN0fSBbb3JkZXJdIFRoZSBvcmRlciBvZiB0aGUgY2hlYnlzaGV2IHBvbHlub21pYWwuIE5vcm1hbCByYW5nZSBiZXR3ZWVuIDEtMTAwLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhIG5ldyBjaGVieVxuXHRcdCAqIHZhciBjaGVieSA9IG5ldyBUb25lLkNoZWJ5c2hldig1MCk7XG5cdFx0ICogLy9jcmVhdGUgYSBtb25vc3ludGggY29ubmVjdGVkIHRvIG91ciBjaGVieVxuXHRcdCAqIHN5bnRoID0gbmV3IFRvbmUuTW9ub1N5bnRoKCkuY29ubmVjdChjaGVieSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ29yZGVyJ10sIFRvbmUuQ2hlYnlzaGV2KTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcig0MDk2KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIGhvbGRzIG9udG8gdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3JkZXIgPSBvcHRpb25zLm9yZGVyO1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9zaGFwZXIpO1xuXHQgICAgICAgIHRoaXMub3JkZXIgPSBvcHRpb25zLm9yZGVyO1xuXHQgICAgICAgIHRoaXMub3ZlcnNhbXBsZSA9IG9wdGlvbnMub3ZlcnNhbXBsZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNoZWJ5c2hldiwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb3JkZXInOiAxLFxuXHQgICAgICAgICdvdmVyc2FtcGxlJzogJ25vbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGdldCB0aGUgY29lZmZpY2llbnQgZm9yIHRoYXQgZGVncmVlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB4IHRoZSB4IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAgIHtudW1iZXJ9IGRlZ3JlZSBcblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG1lbW8gbWVtb2l6ZSB0aGUgY29tcHV0ZWQgdmFsdWUuIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHNwZWVkcyB1cCBjb21wdXRhdGlvbiBncmVhdGx5LiBcblx0XHQgKiAgQHJldHVybiAge251bWJlcn0gICAgICAgdGhlIGNvZWZmaWNpZW50IFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLl9nZXRDb2VmZmljaWVudCA9IGZ1bmN0aW9uICh4LCBkZWdyZWUsIG1lbW8pIHtcblx0ICAgICAgICBpZiAobWVtby5oYXNPd25Qcm9wZXJ0eShkZWdyZWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBtZW1vW2RlZ3JlZV07XG5cdCAgICAgICAgfSBlbHNlIGlmIChkZWdyZWUgPT09IDApIHtcblx0ICAgICAgICAgICAgbWVtb1tkZWdyZWVdID0gMDtcblx0ICAgICAgICB9IGVsc2UgaWYgKGRlZ3JlZSA9PT0gMSkge1xuXHQgICAgICAgICAgICBtZW1vW2RlZ3JlZV0gPSB4O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIG1lbW9bZGVncmVlXSA9IDIgKiB4ICogdGhpcy5fZ2V0Q29lZmZpY2llbnQoeCwgZGVncmVlIC0gMSwgbWVtbykgLSB0aGlzLl9nZXRDb2VmZmljaWVudCh4LCBkZWdyZWUgLSAyLCBtZW1vKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG1lbW9bZGVncmVlXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3JkZXIgb2YgdGhlIENoZWJ5c2hldiBwb2x5bm9taWFsIHdoaWNoIGNyZWF0ZXNcblx0XHQgKiB0aGUgZXF1YXRpb24gd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgaW5jb21pbmcgXG5cdFx0ICogc2lnbmFsIHRocm91Z2ggYSBUb25lLldhdmVTaGFwZXIuIFRoZSBlcXVhdGlvbnNcblx0XHQgKiBhcmUgaW4gdGhlIGZvcm06PGJyPlxuXHRcdCAqIG9yZGVyIDI6IDJ4XjIgKyAxPGJyPlxuXHRcdCAqIG9yZGVyIDM6IDR4XjMgKyAzeCA8YnI+XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hlYnlzaGV2I1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBvcmRlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZSwgJ29yZGVyJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JkZXI7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvcmRlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmRlciA9IG9yZGVyO1xuXHQgICAgICAgICAgICB2YXIgY3VydmUgPSBuZXcgQXJyYXkoNDA5Nik7XG5cdCAgICAgICAgICAgIHZhciBsZW4gPSBjdXJ2ZS5sZW5ndGg7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB4ID0gaSAqIDIgLyBsZW4gLSAxO1xuXHQgICAgICAgICAgICAgICAgaWYgKHggPT09IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL3Nob3VsZCBvdXRwdXQgMCB3aGVuIGlucHV0IGlzIDBcblx0ICAgICAgICAgICAgICAgICAgICBjdXJ2ZVtpXSA9IDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGN1cnZlW2ldID0gdGhpcy5fZ2V0Q29lZmZpY2llbnQoeCwgb3JkZXIsIHt9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIuY3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvdmVyc2FtcGxpbmcgb2YgdGhlIGVmZmVjdC4gQ2FuIGVpdGhlciBiZSBcIm5vbmVcIiwgXCIyeFwiIG9yIFwiNHhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaGVieXNoZXYjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSBvdmVyc2FtcGxlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLCAnb3ZlcnNhbXBsZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3ZlcnNhbXBsaW5nKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlID0gb3ZlcnNhbXBsaW5nO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2hlYnlzaGV2fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DaGVieXNoZXY7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBCYXNlIGNsYXNzIGZvciBTdGVyZW8gZWZmZWN0cy4gUHJvdmlkZXMgZWZmZWN0U2VuZEwvUiBhbmQgZWZmZWN0UmV0dXJuTC9SLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnd2V0J10sIFRvbmUuRWZmZWN0KTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRyeXdldCBrbm9iIHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Dcm9zc0ZhZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG5ldyBUb25lLkNyb3NzRmFkZShvcHRpb25zLndldCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdldCBjb250cm9sLCBpLmUuIGhvdyBtdWNoIG9mIHRoZSBlZmZlY3RlZFxuXHRcdFx0ICogIHdpbGwgcGFzcyB0aHJvdWdoIHRvIHRoZSBvdXRwdXQuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2V0ID0gdGhpcy5fZHJ5V2V0LmZhZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlbiBzcGxpdCBpdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IG5ldyBUb25lLlNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdHMgc2VuZCBMRUZUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMID0gdGhpcy5fc3BsaXQubGVmdDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0cyBzZW5kIFJJR0hUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSID0gdGhpcy5fc3BsaXQucmlnaHQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHN0ZXJlbyBlZmZlY3QgbWVyZ2VyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0IHJldHVybiBMRUZUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwgPSB0aGlzLl9tZXJnZS5sZWZ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBlZmZlY3QgcmV0dXJuIFJJR0hUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIgPSB0aGlzLl9tZXJnZS5yaWdodDtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX3NwbGl0KTtcblx0ICAgICAgICAvL2RyeSB3ZXQgY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fZHJ5V2V0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5jb25uZWN0KHRoaXMuX2RyeVdldCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnd2V0J10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3RlcmVvRWZmZWN0LCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb0VmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3dldCddKTtcblx0ICAgICAgICB0aGlzLndldCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5DaG9ydXMgaXMgYSBzdGVyZW8gY2hvcnVzIGVmZmVjdCBjb21wb3NlZCBvZlxuXHRcdCAqICAgICAgICAgYSBsZWZ0IGFuZCByaWdodCBkZWxheSB3aXRoIGEgVG9uZS5MRk8gYXBwbGllZCB0byB0aGUgZGVsYXlUaW1lIG9mIGVhY2ggY2hhbm5lbC5cblx0XHQgKiAgICAgICAgIEluc3BpcmF0aW9uIGZyb20gW1R1bmEuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9EaW5haG1vZS90dW5hL2Jsb2IvbWFzdGVyL3R1bmEuanMpLlxuXHRcdCAqICAgICAgICAgUmVhZCBtb3JlIG9uIHRoZSBjaG9ydXMgZWZmZWN0IG9uIFtTb3VuZE9uU291bmRdKGh0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvanVuMDQvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmh0bSkuXG5cdFx0ICpcblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKlx0QHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgZnJlcXVlbmN5IG9mIHRoZSBMRk8uXG5cdFx0ICpcdEBwYXJhbSB7TWlsbGlzZWNvbmRzfSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgb2YgdGhlIGNob3J1cyBlZmZlY3QgaW4gbXMuXG5cdFx0ICpcdEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtkZXB0aF0gVGhlIGRlcHRoIG9mIHRoZSBjaG9ydXMuXG5cdFx0ICpcdEBleGFtcGxlXG5cdFx0ICogdmFyIGNob3J1cyA9IG5ldyBUb25lLkNob3J1cyg0LCAyLjUsIDAuNSk7XG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuUG9seVN5bnRoKDQsIFRvbmUuTW9ub1N5bnRoKS5jb25uZWN0KGNob3J1cyk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoW1wiQzNcIixcIkUzXCIsXCJHM1wiXSwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hvcnVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSwgVG9uZS5DaG9ydXMpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlcHRoIG9mIHRoZSBjaG9ydXNcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZXB0aCA9IG9wdGlvbnMuZGVwdGg7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5VGltZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5VGltZSA9IG9wdGlvbnMuZGVsYXlUaW1lIC8gMTAwMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGNvbnRyb2xzIHRoZSBkZWxheVRpbWVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGFub3RoZXIgTEZPIGZvciB0aGUgcmlnaHQgc2lkZSB3aXRoIGEgMTgwIGRlZ3JlZSBwaGFzZSBkaWZmXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9SID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgICAgICdwaGFzZSc6IDE4MFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGRlbGF5IGZvciBsZWZ0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZUwgPSBuZXcgVG9uZS5EZWxheSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGRlbGF5IGZvciByaWdodFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVSID0gbmV3IFRvbmUuRGVsYXkoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBmcmVxdWVuY3kgb2YgdGhlIExGTyB3aGljaCBtb2R1bGF0ZXMgdGhlIGRlbGF5VGltZS5cblx0XHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmb0wuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNoYWluKHRoaXMuX2RlbGF5Tm9kZUwsIHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbih0aGlzLl9kZWxheU5vZGVSLCB0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIC8vYW5kIHBhc3MgdGhyb3VnaCB0byBtYWtlIHRoZSBkZXR1bmUgYXBwYXJlbnRcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAvL2xmbyBzZXR1cFxuXHQgICAgICAgIHRoaXMuX2xmb0wuY29ubmVjdCh0aGlzLl9kZWxheU5vZGVMLmRlbGF5VGltZSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5jb25uZWN0KHRoaXMuX2RlbGF5Tm9kZVIuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBsZm9cblx0ICAgICAgICB0aGlzLl9sZm9MLnN0YXJ0KCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdGFydCgpO1xuXHQgICAgICAgIC8vaGF2ZSBvbmUgTEZPIGZyZXF1ZW5jeSBjb250cm9sIHRoZSBvdGhlclxuXHQgICAgICAgIHRoaXMuX2xmb0wuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fbGZvUi5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9kZXB0aDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS52YWx1ZSA9IG9wdGlvbnMuZnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZyZXF1ZW5jeSddKTtcblx0ICAgICAgICB0aGlzLnNwcmVhZCA9IG9wdGlvbnMuc3ByZWFkO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ2hvcnVzLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DaG9ydXMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDEuNSxcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMy41LFxuXHQgICAgICAgICdkZXB0aCc6IDAuNyxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnc3ByZWFkJzogMTgwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlcHRoIG9mIHRoZSBlZmZlY3QuIEEgZGVwdGggb2YgMSBtYWtlcyB0aGUgZGVsYXlUaW1lXG5cdFx0ICogbW9kdWxhdGUgYmV0d2VlbiAwIGFuZCAyKmRlbGF5VGltZSAoY2VudGVyZWQgYXJvdW5kIHRoZSBkZWxheVRpbWUpLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNob3J1cyNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQG5hbWUgZGVwdGhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICdkZXB0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlcHRoO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGVwdGgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGVwdGggPSBkZXB0aDtcblx0ICAgICAgICAgICAgdmFyIGRldmlhdGlvbiA9IHRoaXMuX2RlbGF5VGltZSAqIGRlcHRoO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1pbiA9IE1hdGgubWF4KHRoaXMuX2RlbGF5VGltZSAtIGRldmlhdGlvbiwgMCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wubWF4ID0gdGhpcy5fZGVsYXlUaW1lICsgZGV2aWF0aW9uO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1pbiA9IE1hdGgubWF4KHRoaXMuX2RlbGF5VGltZSAtIGRldmlhdGlvbiwgMCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWF4ID0gdGhpcy5fZGVsYXlUaW1lICsgZGV2aWF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlbGF5VGltZSBpbiBtaWxsaXNlY29uZHMgb2YgdGhlIGNob3J1cy4gQSBsYXJnZXIgZGVsYXlUaW1lXG5cdFx0ICogd2lsbCBnaXZlIGEgbW9yZSBwcm9ub3VuY2VkIGVmZmVjdC4gTm9taW5hbCByYW5nZSBhIGRlbGF5VGltZVxuXHRcdCAqIGlzIGJldHdlZW4gMiBhbmQgMjBtcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge01pbGxpc2Vjb25kc31cblx0XHQgKiBAbmFtZSBkZWxheVRpbWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICdkZWxheVRpbWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWxheVRpbWUgKiAxMDAwO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGVsYXlUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlbGF5VGltZSA9IGRlbGF5VGltZSAvIDEwMDA7XG5cdCAgICAgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9kZXB0aDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvc2NpbGxhdG9yIHR5cGUgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmb0wudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEFtb3VudCBvZiBzdGVyZW8gc3ByZWFkLiBXaGVuIHNldCB0byAwLCBib3RoIExGTydzIHdpbGwgYmUgcGFubmVkIGNlbnRyYWxseS5cblx0XHQgKiBXaGVuIHNldCB0byAxODAsIExGTydzIHdpbGwgYmUgcGFubmVkIGhhcmQgbGVmdCBhbmQgcmlnaHQgcmVzcGVjdGl2ZWx5LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNob3J1cyNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9SLnBoYXNlIC0gdGhpcy5fbGZvTC5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnBoYXNlID0gOTAgLSBzcHJlYWQgLyAyO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnBoYXNlID0gc3ByZWFkIC8gMiArIDkwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DaG9ydXN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hvcnVzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DaG9ydXM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Db252b2x2ZXIgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgTmF0aXZlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgIFtDb252b2x2ZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1jb252b2x2ZXJub2RlLWludGVyZmFjZSkuXG5cdFx0ICogICAgICAgICAgQ29udm9sdXRpb24gaXMgdXNlZnVsIGZvciByZXZlcmIgYW5kIGZpbHRlciBlbXVsYXRpb24uIFJlYWQgbW9yZSBhYm91dCBjb252b2x1dGlvbiByZXZlcmIgb25cblx0XHQgKiAgICAgICAgICBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db252b2x1dGlvbl9yZXZlcmIpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfFRvbmUuQnVmZmVyfE9iamVjdH0gW3VybF0gVGhlIFVSTCBvZiB0aGUgaW1wdWxzZSByZXNwb25zZSBvciB0aGUgVG9uZS5CdWZmZXJcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aWFuaW5nIHRoZSBpbXB1bHNlIHJlc3BvbnNlLlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2luaXRpYWxpemluZyB0aGUgY29udm9sdmVyIHdpdGggYW4gaW1wdWxzZSByZXNwb25zZVxuXHRcdCAqIHZhciBjb252b2x2ZXIgPSBuZXcgVG9uZS5Db252b2x2ZXIoXCIuL3BhdGgvdG8vaXIud2F2XCIpLnRvTWFzdGVyKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgIF0sIFRvbmUuQ29udm9sdmVyKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnZvbHZlciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0NvbnZvbHZlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVDb252b2x2ZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29udm9sdXRpb24gYnVmZmVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIob3B0aW9ucy51cmwsIGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY29udm9sdmVyLmJ1ZmZlciA9IGJ1ZmZlci5nZXQoKTtcblx0ICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQoKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9jb252b2x2ZXIpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ29udm9sdmVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlci5kZWZhdWx0cyA9IHsgJ29ubG9hZCc6IFRvbmUubm9PcCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjb252b2x2ZXIncyBidWZmZXJcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ29udm9sdmVyI1xuXHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJ9XG5cdFx0ICogIEBuYW1lIGJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udm9sdmVyLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5nZXQoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnZvbHZlci5idWZmZXIgPSB0aGlzLl9idWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgTG9hZCBhbiBpbXB1bHNlIHJlc3BvbnNlIHVybCBhcyBhbiBhdWRpbyBidWZmZXIuXG5cdFx0ICogIERlY29kZXMgdGhlIGF1ZGlvIGFzeW5jaHJvbm91c2x5IGFuZCBpbnZva2VzXG5cdFx0ICogIHRoZSBjYWxsYmFjayBvbmNlIHRoZSBhdWRpbyBidWZmZXIgbG9hZHMuXG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgYnVmZmVyIHRvIGxvYWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgZmlsZXR5cGUgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIuXG5cdFx0ICogIEBwYXJhbSAge2Z1bmN0aW9uPX0gY2FsbGJhY2tcblx0XHQgKiAgQHJldHVybnMge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sb2FkKHVybCwgZnVuY3Rpb24gKGJ1ZmYpIHtcblx0ICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBidWZmO1xuXHQgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ29udm9sdmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ29udm9sdmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5EaXN0b3J0aW9uIGlzIGEgc2ltcGxlIGRpc3RvcnRpb24gZWZmZWN0IHVzaW5nIFRvbmUuV2F2ZVNoYXBlci5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmcm9tIFthIHN0YWNrb3ZlcmZsb3cgYW5zd2VyXShodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjMxMzQwOCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8T2JqZWN0fSBbZGlzdG9ydGlvbl0gVGhlIGFtb3VudCBvZiBkaXN0b3J0aW9uIChub21pbmFsIHJhbmdlIG9mIDAtMSlcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZGlzdCA9IG5ldyBUb25lLkRpc3RvcnRpb24oMC44KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBmbSA9IG5ldyBUb25lLlNpbXBsZUZNKCkuY29ubmVjdChkaXN0KTtcblx0XHQgKiAvL3RoaXMgc291bmRzIGdvb2Qgb24gYmFzcyBub3Rlc1xuXHRcdCAqIGZtLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQTFcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRGlzdG9ydGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2Rpc3RvcnRpb24nXSwgVG9uZS5EaXN0b3J0aW9uKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoNDA5Nik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBob2xkcyB0aGUgZGlzdG9ydGlvbiBhbW91bnRcblx0XHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGlzdG9ydGlvbiA9IG9wdGlvbnMuZGlzdG9ydGlvbjtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fc2hhcGVyKTtcblx0ICAgICAgICB0aGlzLmRpc3RvcnRpb24gPSBvcHRpb25zLmRpc3RvcnRpb247XG5cdCAgICAgICAgdGhpcy5vdmVyc2FtcGxlID0gb3B0aW9ucy5vdmVyc2FtcGxlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRGlzdG9ydGlvbiwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkRpc3RvcnRpb24uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Rpc3RvcnRpb24nOiAwLjQsXG5cdCAgICAgICAgJ292ZXJzYW1wbGUnOiAnbm9uZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYW1vdW50IG9mIGRpc3RvcnRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRGlzdG9ydGlvbiNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQG5hbWUgZGlzdG9ydGlvblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRGlzdG9ydGlvbi5wcm90b3R5cGUsICdkaXN0b3J0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzdG9ydGlvbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGFtb3VudCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kaXN0b3J0aW9uID0gYW1vdW50O1xuXHQgICAgICAgICAgICB2YXIgayA9IGFtb3VudCAqIDEwMDtcblx0ICAgICAgICAgICAgdmFyIGRlZyA9IE1hdGguUEkgLyAxODA7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5zZXRNYXAoZnVuY3Rpb24gKHgpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyh4KSA8IDAuMDAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9zaG91bGQgb3V0cHV0IDAgd2hlbiBpbnB1dCBpcyAwXG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMyArIGspICogeCAqIDIwICogZGVnIC8gKE1hdGguUEkgKyBrICogTWF0aC5hYnMoeCkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvdmVyc2FtcGxpbmcgb2YgdGhlIGVmZmVjdC4gQ2FuIGVpdGhlciBiZSBcIm5vbmVcIiwgXCIyeFwiIG9yIFwiNHhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5EaXN0b3J0aW9uI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgb3ZlcnNhbXBsZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRGlzdG9ydGlvbi5wcm90b3R5cGUsICdvdmVyc2FtcGxlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvdmVyc2FtcGxpbmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGUgPSBvdmVyc2FtcGxpbmc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EaXN0b3J0aW9ufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRpc3RvcnRpb24ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRGlzdG9ydGlvbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiBcdEBjbGFzcyAgVG9uZS5GZWVkYmFja0VmZmVjdCBwcm92aWRlcyBhIGxvb3AgYmV0d2VlbiBhbiBcblx0XHQgKiBcdCAgICAgICAgYXVkaW8gc291cmNlIGFuZCBpdHMgb3duIG91dHB1dC4gVGhpcyBpcyBhIGJhc2UtY2xhc3Ncblx0XHQgKiBcdCAgICAgICAgZm9yIGZlZWRiYWNrIGVmZmVjdHMuIFxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbZmVlZGJhY2tdIFRoZSBpbml0aWFsIGZlZWRiYWNrIHZhbHVlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZlZWRiYWNrJ10sIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGdhaW4gd2hpY2ggY29udHJvbHMgdGhlIGZlZWRiYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLmZlZWRiYWNrLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2Ygc2lnbmFsIHdoaWNoIGlzIGZlZCBiYWNrIGludG8gdGhlIGVmZmVjdCBpbnB1dC4gXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSB0aGlzLl9mZWVkYmFja0dhaW4uZ2Fpbjtcblx0ICAgICAgICAvL3RoZSBmZWVkYmFjayBsb29wXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4uY2hhaW4odGhpcy5fZmVlZGJhY2tHYWluLCB0aGlzLmVmZmVjdFNlbmQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZmVlZGJhY2snXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GZWVkYmFja0VmZmVjdCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QuZGVmYXVsdHMgPSB7ICdmZWVkYmFjayc6IDAuMTI1IH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GZWVkYmFja0VmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZmVlZGJhY2snXSk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0dhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZlZWRiYWNrRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRmVlZGJhY2tEZWxheSBpcyBhIERlbGF5Tm9kZSBpbiB3aGljaCBwYXJ0IG9mIG91dHB1dFxuXHRcdCAqICAgICAgICAgIHNpZ25hbCBpcyBmZWQgYmFjayBpbnRvIHRoZSBkZWxheS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRmVlZGJhY2tFZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtkZWxheVRpbWVdIFRoZSBkZWxheSBhcHBsaWVkIHRvIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2U9fSBmZWVkYmFjayBUaGUgYW1vdW50IG9mIHRoZSBlZmZlY3RlZCBzaWduYWwgd2hpY2hcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmZWQgYmFjayB0aHJvdWdoIHRoZSBkZWxheS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZmVlZGJhY2tEZWxheSA9IG5ldyBUb25lLkZlZWRiYWNrRGVsYXkoXCI4blwiLCAwLjUpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIHRvbSA9IG5ldyBUb25lLkRydW1TeW50aCh7XG5cdFx0ICogXHRcIm9jdGF2ZXNcIiA6IDQsXG5cdFx0ICogXHRcInBpdGNoRGVjYXlcIiA6IDAuMVxuXHRcdCAqIH0pLmNvbm5lY3QoZmVlZGJhY2tEZWxheSk7XG5cdFx0ICogdG9tLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQTJcIixcIjMyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tEZWxheSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnZmVlZGJhY2snXG5cdCAgICAgICAgXSwgVG9uZS5GZWVkYmFja0RlbGF5KTtcblx0ICAgICAgICBUb25lLkZlZWRiYWNrRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUsIG9wdGlvbnMubWF4RGVsYXkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheVRpbWUgb2YgdGhlIERlbGF5Tm9kZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IHRoaXMuX2RlbGF5Tm9kZS5kZWxheVRpbWU7XG5cdCAgICAgICAgLy8gY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9kZWxheU5vZGUpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmVlZGJhY2tEZWxheSwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0RlbGF5LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjI1LFxuXHQgICAgICAgICdtYXhEZWxheSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRmVlZGJhY2tEZWxheX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0RlbGF5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydkZWxheVRpbWUnXSk7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZlZWRiYWNrRGVsYXk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIGFuIGFycmF5IG9mIGNvbWIgZmlsdGVyIGRlbGF5IHZhbHVlcyBmcm9tIEZyZWV2ZXJiIGltcGxlbWVudGF0aW9uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGNvbWJGaWx0ZXJUdW5pbmdzID0gW1xuXHQgICAgICAgIDE1NTcgLyA0NDEwMCxcblx0ICAgICAgICAxNjE3IC8gNDQxMDAsXG5cdCAgICAgICAgMTQ5MSAvIDQ0MTAwLFxuXHQgICAgICAgIDE0MjIgLyA0NDEwMCxcblx0ICAgICAgICAxMjc3IC8gNDQxMDAsXG5cdCAgICAgICAgMTM1NiAvIDQ0MTAwLFxuXHQgICAgICAgIDExODggLyA0NDEwMCxcblx0ICAgICAgICAxMTE2IC8gNDQxMDBcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgYW4gYXJyYXkgb2YgYWxscGFzcyBmaWx0ZXIgZnJlcXVlbmN5IHZhbHVlcyBmcm9tIEZyZWV2ZXJiIGltcGxlbWVudGF0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcyA9IFtcblx0ICAgICAgICAyMjUsXG5cdCAgICAgICAgNTU2LFxuXHQgICAgICAgIDQ0MSxcblx0ICAgICAgICAzNDFcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRnJlZXZlcmIgaXMgYSByZXZlcmIgYmFzZWQgb24gW0ZyZWV2ZXJiXShodHRwczovL2Njcm1hLnN0YW5mb3JkLmVkdS9+am9zL3Bhc3AvRnJlZXZlcmIuaHRtbCkuXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgb24gcmV2ZXJiIG9uIFtTb3VuZCBPbiBTb3VuZF0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDA0MDgzOTAyL2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbTo4MC9zb3MvZmViMDEvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmFzcCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFtyb29tU2l6ZV0gQ29ycmVsYXRlZCB0byB0aGUgZGVjYXkgdGltZS5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtkYW1wZW5pbmddIFRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIGEgbG93cGFzcyBmaWx0ZXIgYXMgcGFydFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJldmVyYi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZnJlZXZlcmIgPSBuZXcgVG9uZS5GcmVldmVyYigpLnRvTWFzdGVyKCk7XG5cdFx0ICogZnJlZXZlcmIuZGFtcGVuaW5nLnZhbHVlID0gMTAwMDtcblx0XHQgKiAvL3JvdXRpbmcgc3ludGggdGhyb3VnaCB0aGUgcmV2ZXJiXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuQU1TeW50aCgpLmNvbm5lY3QoZnJlZXZlcmIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVldmVyYiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdyb29tU2l6ZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSwgVG9uZS5GcmVldmVyYik7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcm9vbVNpemUgdmFsdWUgYmV0d2Vlbi4gQSBsYXJnZXIgcm9vbVNpemVcblx0XHRcdCAqICB3aWxsIHJlc3VsdCBpbiBhIGxvbmdlciBkZWNheS5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLnJvb21TaXplLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZGFtcGVuaW5nIG9mIHRoZSByZXZlcmJlcmFudCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRhbXBlbmluZywgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbWIgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29tYkZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSBsZWZ0XG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0wgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSByaWdodFxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSID0gW107XG5cdCAgICAgICAgLy9tYWtlIHRoZSBhbGxwYXNzIGZpbHRlcnMgb24gdGhlIHJpZ2h0XG5cdCAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMubGVuZ3RoOyBsKyspIHtcblx0ICAgICAgICAgICAgdmFyIGFsbHBhc3NMID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBhbGxwYXNzTC50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBhbGxwYXNzTC5mcmVxdWVuY3kudmFsdWUgPSBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXNbbF07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTC5wdXNoKGFsbHBhc3NMKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9tYWtlIHRoZSBhbGxwYXNzIGZpbHRlcnMgb24gdGhlIGxlZnRcblx0ICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcy5sZW5ndGg7IHIrKykge1xuXHQgICAgICAgICAgICB2YXIgYWxscGFzc1IgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgIGFsbHBhc3NSLnR5cGUgPSAnYWxscGFzcyc7XG5cdCAgICAgICAgICAgIGFsbHBhc3NSLmZyZXF1ZW5jeS52YWx1ZSA9IGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llc1tyXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSLnB1c2goYWxscGFzc1IpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL21ha2UgdGhlIGNvbWIgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29tYkZpbHRlclR1bmluZ3MubGVuZ3RoOyBjKyspIHtcblx0ICAgICAgICAgICAgdmFyIGxmcGYgPSBuZXcgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlcihjb21iRmlsdGVyVHVuaW5nc1tjXSk7XG5cdCAgICAgICAgICAgIGlmIChjIDwgY29tYkZpbHRlclR1bmluZ3MubGVuZ3RoIC8gMikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbihsZnBmLCB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbMF0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbihsZnBmLCB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbMF0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMucm9vbVNpemUuY29ubmVjdChsZnBmLnJlc29uYW5jZSk7XG5cdCAgICAgICAgICAgIHRoaXMuZGFtcGVuaW5nLmNvbm5lY3QobGZwZi5kYW1wZW5pbmcpO1xuXHQgICAgICAgICAgICB0aGlzLl9jb21iRmlsdGVycy5wdXNoKGxmcGYpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NoYWluIHRoZSBhbGxwYXNzIGZpbHRlcnMgdG9nZXRlaHJcblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgdGhpcy5fYWxscGFzc0ZpbHRlcnNMKTtcblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgdGhpcy5fYWxscGFzc0ZpbHRlcnNSKTtcblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbdGhpcy5fYWxscGFzc0ZpbHRlcnNMLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbdGhpcy5fYWxscGFzc0ZpbHRlcnNSLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdyb29tU2l6ZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GcmVldmVyYiwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlZXZlcmIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Jvb21TaXplJzogMC43LFxuXHQgICAgICAgICdkYW1wZW5pbmcnOiAzMDAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GcmVldmVyYn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVldmVyYi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGFsID0gMDsgYWwgPCB0aGlzLl9hbGxwYXNzRmlsdGVyc0wubGVuZ3RoOyBhbCsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTFthbF0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbYWxdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBhciA9IDA7IGFyIDwgdGhpcy5fYWxscGFzc0ZpbHRlcnNSLmxlbmd0aDsgYXIrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbYXJdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSW2FyXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUiA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgY2YgPSAwOyBjZiA8IHRoaXMuX2NvbWJGaWx0ZXJzLmxlbmd0aDsgY2YrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9jb21iRmlsdGVyc1tjZl0uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9jb21iRmlsdGVyc1tjZl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jb21iRmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncm9vbVNpemUnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRnJlZXZlcmI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIGFuIGFycmF5IG9mIHRoZSBjb21iIGZpbHRlciBkZWxheSB0aW1lIHZhbHVlc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBjb21iRmlsdGVyRGVsYXlUaW1lcyA9IFtcblx0ICAgICAgICAxNjg3IC8gMjUwMDAsXG5cdCAgICAgICAgMTYwMSAvIDI1MDAwLFxuXHQgICAgICAgIDIwNTMgLyAyNTAwMCxcblx0ICAgICAgICAyMjUxIC8gMjUwMDBcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIHJlc29uYW5jZXMgb2YgZWFjaCBvZiB0aGUgY29tYiBmaWx0ZXJzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGNvbWJGaWx0ZXJSZXNvbmFuY2VzID0gW1xuXHQgICAgICAgIDAuNzczLFxuXHQgICAgICAgIDAuODAyLFxuXHQgICAgICAgIDAuNzUzLFxuXHQgICAgICAgIDAuNzMzXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBhbGxwYXNzIGZpbHRlciBmcmVxdWVuY2llc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBhbGxwYXNzRmlsdGVyRnJlcXMgPSBbXG5cdCAgICAgICAgMzQ3LFxuXHQgICAgICAgIDExMyxcblx0ICAgICAgICAzN1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5KQ1JldmVyYiBpcyBhIHNpbXBsZSBbU2Nocm9lZGVyIFJldmVyYmVyYXRvcl0oaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvfmpvcy9wYXNwL1NjaHJvZWRlcl9SZXZlcmJlcmF0b3JzLmh0bWwpXG5cdFx0ICogICAgICAgICB0dW5lZCBieSBKb2huIENob3duaW5nIGluIDE5NzAuXG5cdFx0ICogICAgICAgICBJdCBpcyBtYWRlIHVwIG9mIHRocmVlIGFsbHBhc3MgZmlsdGVycyBhbmQgZm91ciBUb25lLkZlZWRiYWNrQ29tYkZpbHRlci5cblx0XHQgKlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbcm9vbVNpemVdIENvb3JlbGF0ZXMgdG8gdGhlIGRlY2F5IHRpbWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHJldmVyYiA9IG5ldyBUb25lLkpDUmV2ZXJiKDAuNCkuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdFx0ICogdmFyIGRlbGF5ID0gbmV3IFRvbmUuRmVlZGJhY2tEZWxheSgwLjUpO1xuXHRcdCAqIC8vY29ubmVjdGluZyB0aGUgc3ludGggdG8gcmV2ZXJiIHRocm91Z2ggZGVsYXlcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5EdW9TeW50aCgpLmNoYWluKGRlbGF5LCByZXZlcmIpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQTRcIixcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5KQ1JldmVyYiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3Jvb21TaXplJ10sIFRvbmUuSkNSZXZlcmIpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcm9vbSBzaXplIGNvbnRyb2wgdmFsdWVzIGJldHdlZW4gWzAsMV1cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLnJvb21TaXplLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSByb29tIHNpemVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZSA9IG5ldyBUb25lLlNjYWxlKC0wLjczMywgMC4xOTcpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGEgc2VyaWVzIG9mIGFsbHBhc3MgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBwYXJhbGxlbCBmZWVkYmFjayBjb21iIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvL21ha2UgdGhlIGFsbHBhc3MgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGFmID0gMDsgYWYgPCBhbGxwYXNzRmlsdGVyRnJlcXMubGVuZ3RoOyBhZisrKSB7XG5cdCAgICAgICAgICAgIHZhciBhbGxwYXNzID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBhbGxwYXNzLnR5cGUgPSAnYWxscGFzcyc7XG5cdCAgICAgICAgICAgIGFsbHBhc3MuZnJlcXVlbmN5LnZhbHVlID0gYWxscGFzc0ZpbHRlckZyZXFzW2FmXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnMucHVzaChhbGxwYXNzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hbmQgdGhlIGNvbWIgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGNmID0gMDsgY2YgPCBjb21iRmlsdGVyRGVsYXlUaW1lcy5sZW5ndGg7IGNmKyspIHtcblx0ICAgICAgICAgICAgdmFyIGZiY2YgPSBuZXcgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIoY29tYkZpbHRlckRlbGF5VGltZXNbY2ZdLCAwLjEpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplLmNvbm5lY3QoZmJjZi5yZXNvbmFuY2UpO1xuXHQgICAgICAgICAgICBmYmNmLnJlc29uYW5jZS52YWx1ZSA9IGNvbWJGaWx0ZXJSZXNvbmFuY2VzW2NmXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNbdGhpcy5fYWxscGFzc0ZpbHRlcnMubGVuZ3RoIC0gMV0uY29ubmVjdChmYmNmKTtcblx0ICAgICAgICAgICAgaWYgKGNmIDwgY29tYkZpbHRlckRlbGF5VGltZXMubGVuZ3RoIC8gMikge1xuXHQgICAgICAgICAgICAgICAgZmJjZi5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBmYmNmLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzLnB1c2goZmJjZik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY2hhaW4gdGhlIGFsbHBhc3MgZmlsdGVycyB0b2dldGhlclxuXHQgICAgICAgIHRoaXMucm9vbVNpemUuY29ubmVjdCh0aGlzLl9zY2FsZVJvb21TaXplKTtcblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgdGhpcy5fYWxscGFzc0ZpbHRlcnMpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY29ubmVjdCh0aGlzLl9hbGxwYXNzRmlsdGVyc1swXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jb25uZWN0KHRoaXMuX2FsbHBhc3NGaWx0ZXJzWzBdKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3Jvb21TaXplJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuSkNSZXZlcmIsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuSkNSZXZlcmIuZGVmYXVsdHMgPSB7ICdyb29tU2l6ZSc6IDAuNSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5KQ1JldmVyYn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5KQ1JldmVyYi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGFwZiA9IDA7IGFwZiA8IHRoaXMuX2FsbHBhc3NGaWx0ZXJzLmxlbmd0aDsgYXBmKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNbYXBmXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzW2FwZl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgZmJjZiA9IDA7IGZiY2YgPCB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzLmxlbmd0aDsgZmJjZisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnNbZmJjZl0uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzW2ZiY2ZdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydyb29tU2l6ZSddKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5KQ1JldmVyYjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1pZC9TaWRlIHByb2Nlc3Npbmcgc2VwYXJhdGVzIHRoZSB0aGUgJ21pZCcgc2lnbmFsXG5cdFx0ICogICAgICAgICAod2hpY2ggY29tZXMgb3V0IG9mIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBjaGFubmVsKVxuXHRcdCAqICAgICAgICAgYW5kIHRoZSAnc2lkZScgKHdoaWNoIG9ubHkgY29tZXMgb3V0IG9mIHRoZSB0aGUgc2lkZSBjaGFubmVscylcblx0XHQgKiAgICAgICAgIGFuZCBlZmZlY3RzIHRoZW0gc2VwYXJhdGVseSBiZWZvcmUgYmVpbmcgcmVjb21iaW5lZC5cblx0XHQgKiAgICAgICAgIEFwcGxpZXMgYSBNaWQvU2lkZSBzZXBlcmF0aW9uIGFuZCByZWNvbWJpbmF0aW9uLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZvdW5kIGluIFtrdnJhdWRpbyBmb3J1bXNdKGh0dHA6Ly93d3cua3ZyYXVkaW8uY29tL2ZvcnVtL3ZpZXd0b3BpYy5waHA/dD0yMTI1ODcpLlxuXHRcdCAqICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgIFRoaXMgaXMgYSBiYXNlLWNsYXNzIGZvciBNaWQvU2lkZSBFZmZlY3RzLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL3NpZGUgc3BsaXRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZVNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSBuZXcgVG9uZS5NaWRTaWRlU3BsaXQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL3NpZGUgbWVyZ2Vcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZU1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSBuZXcgVG9uZS5NaWRTaWRlTWVyZ2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHNlbmQuIENvbm5lY3QgdG8gbWlkIHByb2Nlc3Npbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWRTZW5kID0gdGhpcy5fbWlkU2lkZVNwbGl0Lm1pZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSBzZW5kLiBDb25uZWN0IHRvIHNpZGUgcHJvY2Vzc2luZ1xuXHRcdFx0ICogIEB0eXBlIHtUb25lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGVTZW5kID0gdGhpcy5fbWlkU2lkZVNwbGl0LnNpZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCByZXR1cm4gY29ubmVjdGlvblxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWRSZXR1cm4gPSB0aGlzLl9taWRTaWRlTWVyZ2UubWlkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIHJldHVybiBjb25uZWN0aW9uXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGVSZXR1cm4gPSB0aGlzLl9taWRTaWRlTWVyZ2Uuc2lkZTtcblx0ICAgICAgICAvL3RoZSBjb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jb25uZWN0KHRoaXMuX21pZFNpZGVTcGxpdCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkU2lkZUVmZmVjdCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkU2VuZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlU2VuZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWRSZXR1cm4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZVJldHVybiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZUVmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGhhc2VyIGlzIGEgcGhhc2VyIGVmZmVjdC4gUGhhc2VycyB3b3JrIGJ5IGNoYW5naW5nIHRoZSBwaGFzZVxuXHRcdCAqICAgICAgICAgb2YgZGlmZmVyZW50IGZyZXF1ZW5jeSBjb21wb25lbnRzIG9mIGFuIGluY29taW5nIHNpZ25hbC4gUmVhZCBtb3JlIG9uXG5cdFx0ICogICAgICAgICBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QaGFzZXJfKGVmZmVjdCkpLlxuXHRcdCAqICAgICAgICAgSW5zcGlyYXRpb24gZm9yIHRoaXMgcGhhc2VyIGNvbWVzIGZyb20gW1R1bmEuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9EaW5haG1vZS90dW5hLykuXG5cdFx0ICpcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgc3BlZWQgb2YgdGhlIHBoYXNpbmcuXG5cdFx0ICpcdEBwYXJhbSB7bnVtYmVyfSBbb2N0YXZlc10gVGhlIG9jdGF2ZXMgb2YgdGhlIGVmZmVjdC5cblx0XHQgKlx0QHBhcmFtIHtGcmVxdWVuY3l9IFtiYXNlRnJlcXVlbmN5XSBUaGUgYmFzZSBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlcnMuXG5cdFx0ICpcdEBleGFtcGxlXG5cdFx0ICogdmFyIHBoYXNlciA9IG5ldyBUb25lLlBoYXNlcih7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogMTUsXG5cdFx0ICogXHRcIm9jdGF2ZXNcIiA6IDUsXG5cdFx0ICogXHRcImJhc2VGcmVxdWVuY3lcIiA6IDEwMDBcblx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkZNU3ludGgoKS5jb25uZWN0KHBoYXNlcik7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJFM1wiLCBcIjJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaGFzZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9zZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnLFxuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeSdcblx0ICAgICAgICBdLCBUb25lLlBoYXNlcik7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGNvbnRyb2xzIHRoZSBmcmVxdWVuY3kgb24gdGhlIGxlZnQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG5ldyBUb25lLkxGTyhvcHRpb25zLmZyZXF1ZW5jeSwgMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBjb250cm9scyB0aGUgZnJlcXVlbmN5IG9uIHRoZSByaWdodCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9SID0gbmV3IFRvbmUuTEZPKG9wdGlvbnMuZnJlcXVlbmN5LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnBoYXNlID0gMTgwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBiYXNlIG1vZHVsYXRpb24gZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb2N0YXZlcyBvZiB0aGUgcGhhc2luZ1xuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHF1YWxpdHkgZmFjdG9yIG9mIHRoZSBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLlEsIFRvbmUuVHlwZS5Qb3NpdGl2ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFycmF5IG9mIGZpbHRlcnMgZm9yIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNMID0gdGhpcy5fbWFrZUZpbHRlcnMob3B0aW9ucy5zdGFnZXMsIHRoaXMuX2xmb0wsIHRoaXMuUSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFycmF5IG9mIGZpbHRlcnMgZm9yIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNSID0gdGhpcy5fbWFrZUZpbHRlcnMob3B0aW9ucy5zdGFnZXMsIHRoaXMuX2xmb1IsIHRoaXMuUSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiB0aGUgZnJlcXVlbmN5IG9mIHRoZSBlZmZlY3Rcblx0XHRcdCAqIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvTC5mcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kudmFsdWUgPSBvcHRpb25zLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlbSB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY29ubmVjdCh0aGlzLl9maWx0ZXJzTFswXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jb25uZWN0KHRoaXMuX2ZpbHRlcnNSWzBdKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJzTFtvcHRpb25zLnN0YWdlcyAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJzUltvcHRpb25zLnN0YWdlcyAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIGZyZXF1ZW5jeSB3aXRoIG9uZSBMRk9cblx0ICAgICAgICB0aGlzLl9sZm9MLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2xmb1IuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3NldCB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHRoaXMuYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgbGZvXG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdGFydCgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RhcnQoKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBoYXNlciwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHRzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge29iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAwLjUsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAzLFxuXHQgICAgICAgICdzdGFnZXMnOiAxMCxcblx0ICAgICAgICAnUSc6IDEwLFxuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMzUwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBzdGFnZXNcblx0XHQgKiAgQHJldHVybnMge0FycmF5fSB0aGUgbnVtYmVyIG9mIGZpbHRlcnMgYWxsIGNvbm5lY3RlZCB0b2dldGhlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaGFzZXIucHJvdG90eXBlLl9tYWtlRmlsdGVycyA9IGZ1bmN0aW9uIChzdGFnZXMsIGNvbm5lY3RUb0ZyZXEsIFEpIHtcblx0ICAgICAgICB2YXIgZmlsdGVycyA9IG5ldyBBcnJheShzdGFnZXMpO1xuXHQgICAgICAgIC8vbWFrZSBhbGwgdGhlIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWdlczsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBmaWx0ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgIGZpbHRlci50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBRLmNvbm5lY3QoZmlsdGVyLlEpO1xuXHQgICAgICAgICAgICBjb25uZWN0VG9GcmVxLmNvbm5lY3QoZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgIGZpbHRlcnNbaV0gPSBmaWx0ZXI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuY29ubmVjdFNlcmllcy5hcHBseShUb25lLCBmaWx0ZXJzKTtcblx0ICAgICAgICByZXR1cm4gZmlsdGVycztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhlIHBoYXNlIGdvZXMgYWJvdmVcblx0XHQgKiB0aGUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBoYXNlciNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGhhc2VyLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0YXZlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0YXZlcztcblx0ICAgICAgICAgICAgdmFyIG1heCA9IHRoaXMuX2Jhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCBvY3RhdmVzKTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5tYXggPSBtYXg7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHRoZSBiYXNlIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVycy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaGFzZXIjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QaGFzZXIucHJvdG90eXBlLCAnYmFzZUZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBmcmVxO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1pbiA9IGZyZXE7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWluID0gZnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QaGFzZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5RLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVyc0wubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc0xbaV0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzTFtpXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNMID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX2ZpbHRlcnNSLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNSW2pdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1Jbal0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBoYXNlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEp1c3QgbGlrZSBhIHN0ZXJlbyBmZWVkYmFjayBlZmZlY3QsIGJ1dCB0aGUgZmVlZGJhY2sgaXMgcm91dGVkIGZyb20gbGVmdCB0byByaWdodFxuXHRcdCAqICAgICAgICAgYW5kIHJpZ2h0IHRvIGxlZnQgaW5zdGVhZCBvZiBvbiB0aGUgc2FtZSBjaGFubmVsLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZlZWRiYWNrJ10sIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBmZWVkYmFjayBmcm9tIHRoZSBvdXRwdXRcblx0XHRcdCAqICBiYWNrIGludG8gdGhlIGlucHV0IG9mIHRoZSBlZmZlY3QgKHJvdXRlZFxuXHRcdFx0ICogIGFjcm9zcyBsZWZ0IGFuZCByaWdodCBjaGFubmVscykuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mZWVkYmFjaywgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGVmdCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSByaWdodCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1JMID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTC5jaGFpbih0aGlzLl9mZWVkYmFja0xSLCB0aGlzLmVmZmVjdFNlbmRSKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIuY2hhaW4odGhpcy5fZmVlZGJhY2tSTCwgdGhpcy5lZmZlY3RTZW5kTCk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjay5mYW4odGhpcy5fZmVlZGJhY2tMUi5nYWluLCB0aGlzLl9mZWVkYmFja1JMLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZmVlZGJhY2snXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydmZWVkYmFjayddKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1JMLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1JMID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5QaW5nUG9uZ0RlbGF5IGlzIGEgZmVlZGJhY2sgZGVsYXkgZWZmZWN0IHdoZXJlIHRoZSBlY2hvIGlzIGhlYXJkXG5cdFx0ICogICAgICAgICAgZmlyc3QgaW4gb25lIGNoYW5uZWwgYW5kIG5leHQgaW4gdGhlIG9wcG9zaXRlIGNoYW5uZWwuIEluIGEgc3RlcmVvXG5cdFx0ICogICAgICAgICAgc3lzdGVtIHRoZXNlIGFyZSB0aGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMuXG5cdFx0ICogICAgICAgICAgUGluZ1BvbmdEZWxheSBpbiBtb3JlIHNpbXBsaWZpZWQgdGVybXMgaXMgdHdvIFRvbmUuRmVlZGJhY2tEZWxheXNcblx0XHQgKiAgICAgICAgICB3aXRoIGluZGVwZW5kZW50IGRlbGF5IHZhbHVlcy4gRWFjaCBkZWxheSBpcyByb3V0ZWQgdG8gb25lIGNoYW5uZWxcblx0XHQgKiAgICAgICAgICAobGVmdCBvciByaWdodCksIGFuZCB0aGUgY2hhbm5lbCB0cmlnZ2VyZWQgc2Vjb25kIHdpbGwgYWx3YXlzXG5cdFx0ICogICAgICAgICAgdHJpZ2dlciBhdCB0aGUgc2FtZSBpbnRlcnZhbCBhZnRlciB0aGUgZmlyc3QuXG5cdFx0ICpcblx0XHQgKiBcdEBjb25zdHJ1Y3RvclxuXHRcdCAqIFx0QGV4dGVuZHMge1RvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXlUaW1lIGJldHdlZW4gY29uc2VjdXRpdmUgZWNob3MuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2U9fSBmZWVkYmFjayBUaGUgYW1vdW50IG9mIHRoZSBlZmZlY3RlZCBzaWduYWwgd2hpY2hcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZlZCBiYWNrIHRocm91Z2ggdGhlIGRlbGF5LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwaW5nUG9uZyA9IG5ldyBUb25lLlBpbmdQb25nRGVsYXkoXCI0blwiLCAwLjIpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIGRydW0gPSBuZXcgVG9uZS5EcnVtU3ludGgoKS5jb25uZWN0KHBpbmdQb25nKTtcblx0XHQgKiBkcnVtLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCIzMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBpbmdQb25nRGVsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ2ZlZWRiYWNrJ1xuXHQgICAgICAgIF0sIFRvbmUuUGluZ1BvbmdEZWxheSk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZSBvbiB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xlZnREZWxheSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZSBvbiB0aGUgcmlnaHQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yaWdodERlbGF5ID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwcmVkZWxheSBvbiB0aGUgcmlnaHQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yaWdodFByZURlbGF5ID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSB0aW1lIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGVsYXlUaW1lLCBUb25lLlR5cGUuVGltZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbih0aGlzLl9sZWZ0RGVsYXksIHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbih0aGlzLl9yaWdodFByZURlbGF5LCB0aGlzLl9yaWdodERlbGF5LCB0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lLmZhbih0aGlzLl9sZWZ0RGVsYXkuZGVsYXlUaW1lLCB0aGlzLl9yaWdodERlbGF5LmRlbGF5VGltZSwgdGhpcy5fcmlnaHRQcmVEZWxheS5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8vcmVhcnJhbmdlZCB0aGUgZmVlZGJhY2sgdG8gYmUgYWZ0ZXIgdGhlIHJpZ2h0UHJlRGVsYXlcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSLmNvbm5lY3QodGhpcy5fcmlnaHREZWxheSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydkZWxheVRpbWUnXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QaW5nUG9uZ0RlbGF5LCBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaW5nUG9uZ0RlbGF5LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjI1LFxuXHQgICAgICAgICdtYXhEZWxheVRpbWUnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QaW5nUG9uZ0RlbGF5fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBpbmdQb25nRGVsYXkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0RGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xlZnREZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHREZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHREZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHRQcmVEZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHRQcmVEZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydkZWxheVRpbWUnXSk7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QaW5nUG9uZ0RlbGF5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QaXRjaFNoaWZ0IGRvZXMgbmVhci1yZWFsdGltZSBwaXRjaCBzaGlmdGluZyB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgVGhlIGVmZmVjdCBpcyBhY2hpZXZlZCBieSBzcGVlZGluZyB1cCBvciBzbG93aW5nIGRvd24gdGhlIGRlbGF5VGltZVxuXHRcdCAqICAgICAgICAgb2YgYSBEZWxheU5vZGUgdXNpbmcgYSBzYXd0b290aCB3YXZlLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZvdW5kIGluIFt0aGlzIHBkZl0oaHR0cDovL2RzcC1ib29rLm5hcm9kLnJ1L3NvdW5kcHJvYy5wZGYpLlxuXHRcdCAqICAgICAgICAgQWRkaXRpb25hbCByZWZlcmVuY2UgYnkgW01pbGxlciBQdWNrZXRdKGh0dHA6Ly9tc3AudWNzZC5lZHUvdGVjaG5pcXVlcy92MC4xMS9ib29rLWh0bWwvbm9kZTExNS5odG1sKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5GZWVkYmFja0VmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtJbnRlcnZhbD19IHBpdGNoIFRoZSBpbnRlcnZhbCB0byB0cmFuc3Bvc2UgdGhlIGluY29taW5nIHNpZ25hbCBieS5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGl0Y2hTaGlmdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3BpdGNoJ10sIFRvbmUuUGl0Y2hTaGlmdCk7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwaXRjaCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVXNlcyB0d28gRGVsYXlOb2RlcyB0byBjb3ZlciB1cCB0aGUganVtcCBpblxuXHRcdFx0ICogIHRoZSBzYXd0b290aCB3YXZlLlxuXHRcdFx0ICogIEB0eXBlICB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheUEgPSBuZXcgVG9uZS5EZWxheSgwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlyc3QgTEZPLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0EgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDAuMSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnc2F3dG9vdGgnXG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9kZWxheUEuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2Vjb25kIERlbGF5Tm9kZVxuXHRcdFx0ICogIEB0eXBlICB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheUIgPSBuZXcgVG9uZS5EZWxheSgwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlyc3QgTEZPLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0IgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDAuMSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnc2F3dG9vdGgnLFxuXHQgICAgICAgICAgICAncGhhc2UnOiAxODBcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2RlbGF5Qi5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENyb3NzZmFkZSBxdWlja2x5IGJldHdlZW4gdGhlIHR3byBkZWxheSBsaW5lc1xuXHRcdFx0ICogIHRvIGNvdmVyIHVwIHRoZSBqdW1wIGluIHRoZSBzYXd0b290aCB3YXZlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNyb3NzRmFkZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlID0gbmV3IFRvbmUuQ3Jvc3NGYWRlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTEZPIHdoaWNoIGFsdGVybmF0ZXMgYmV0d2VlbiB0aGUgdHdvXG5cdFx0XHQgKiAgZGVsYXkgbGluZXMgdG8gY292ZXIgdXAgdGhlIGRpc3Bhcml0eSBpbiB0aGVcblx0XHRcdCAqICBzYXd0b290aCB3YXZlLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZUxGTyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiAndHJpYW5nbGUnLFxuXHQgICAgICAgICAgICAncGhhc2UnOiA5MFxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5fY3Jvc3NGYWRlLmZhZGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrRGVsYXkgPSBuZXcgVG9uZS5EZWxheShvcHRpb25zLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBkZWxheSBvbiB0aGUgaW5wdXQgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9mZWVkYmFja0RlbGF5LmRlbGF5VGltZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZGVsYXlUaW1lJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZCB0aGUgY3VycmVudCBwaXRjaFxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BpdGNoID0gb3B0aW9ucy5waXRjaDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkIHRoZSBjdXJyZW50IHdpbmRvd1NpemVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl93aW5kb3dTaXplID0gb3B0aW9ucy53aW5kb3dTaXplO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgdHdvIGRlbGF5IGxpbmVzIHVwXG5cdCAgICAgICAgdGhpcy5fZGVsYXlBLmNvbm5lY3QodGhpcy5fY3Jvc3NGYWRlLmEpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Qi5jb25uZWN0KHRoaXMuX2Nyb3NzRmFkZS5iKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeS5mYW4odGhpcy5fbGZvQS5mcmVxdWVuY3ksIHRoaXMuX2xmb0IuZnJlcXVlbmN5LCB0aGlzLl9jcm9zc0ZhZGVMRk8uZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3JvdXRlIHRoZSBpbnB1dFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5mYW4odGhpcy5fZGVsYXlBLCB0aGlzLl9kZWxheUIpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZS5jaGFpbih0aGlzLl9mZWVkYmFja0RlbGF5LCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgTEZPcyBhdCB0aGUgc2FtZSB0aW1lXG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgdGhpcy5fbGZvQS5zdGFydChub3cpO1xuXHQgICAgICAgIHRoaXMuX2xmb0Iuc3RhcnQobm93KTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8uc3RhcnQobm93KTtcblx0ICAgICAgICAvL3NldCB0aGUgaW5pdGlhbCB2YWx1ZVxuXHQgICAgICAgIHRoaXMud2luZG93U2l6ZSA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QaXRjaFNoaWZ0LCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaXRjaFNoaWZ0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwaXRjaCc6IDAsXG5cdCAgICAgICAgJ3dpbmRvd1NpemUnOiAwLjEsXG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDAsXG5cdCAgICAgICAgJ2ZlZWRiYWNrJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlcGl0Y2ggdGhlIGluY29taW5nIHNpZ25hbCBieSBzb21lIGludGVydmFsIChtZWFzdXJlZFxuXHRcdCAqIGluIHNlbWktdG9uZXMpLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBpdGNoU2hpZnQjXG5cdFx0ICogQHR5cGUge0ludGVydmFsfVxuXHRcdCAqIEBuYW1lIHBpdGNoXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBwaXRjaFNoaWZ0LnBpdGNoID0gLTEyOyAvL2Rvd24gb25lIG9jdGF2ZVxuXHRcdCAqIHBpdGNoU2hpZnQucGl0Y2ggPSA3OyAvL3VwIGEgZmlmdGhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBpdGNoU2hpZnQucHJvdG90eXBlLCAncGl0Y2gnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9waXRjaDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BpdGNoID0gaW50ZXJ2YWw7XG5cdCAgICAgICAgICAgIHZhciBmYWN0b3IgPSAwO1xuXHQgICAgICAgICAgICBpZiAoaW50ZXJ2YWwgPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1pbiA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1heCA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1pbiA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1heCA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICBmYWN0b3IgPSBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhpbnRlcnZhbCAtIDEpICsgMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0EubWluID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0EubWF4ID0gMDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0IubWluID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0IubWF4ID0gMDtcblx0ICAgICAgICAgICAgICAgIGZhY3RvciA9IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGludGVydmFsKSAtIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZnJlcXVlbmN5LnZhbHVlID0gZmFjdG9yICogKDEuMiAvIHRoaXMuX3dpbmRvd1NpemUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHdpbmRvdyBzaXplIGNvcnJlc3BvbmRzIHJvdWdobHkgdG8gdGhlIHNhbXBsZSBsZW5ndGggaW4gYSBsb29waW5nIHNhbXBsZXIuXG5cdFx0ICogU21hbGxlciB2YWx1ZXMgYXJlIGRlc2lyYWJsZSBmb3IgYSBsZXNzIG5vdGljZWFibGUgZGVsYXkgdGltZSBvZiB0aGUgcGl0Y2ggc2hpZnRlZFxuXHRcdCAqIHNpZ25hbCwgYnV0IGxhcmdlciB2YWx1ZXMgd2lsbCByZXN1bHQgaW4gc21vb3RoZXIgcGl0Y2ggc2hpZnRpbmcgZm9yIGxhcmdlciBpbnRlcnZhbHMuXG5cdFx0ICogQSBub21pbmFsIHJhbmdlIG9mIDAuMDMgdG8gMC4xIGlzIHJlY29tbWVuZGVkLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBpdGNoU2hpZnQjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgd2luZG93U2l6ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogcGl0Y2hTaGlmdC53aW5kb3dTaXplID0gMC4xO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGl0Y2hTaGlmdC5wcm90b3R5cGUsICd3aW5kb3dTaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fd2luZG93U2l6ZSA9IHRoaXMudG9TZWNvbmRzKHNpemUpO1xuXHQgICAgICAgICAgICB0aGlzLnBpdGNoID0gdGhpcy5fcGl0Y2g7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBpdGNoU2hpZnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBpdGNoU2hpZnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kZWxheUEuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5QSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlCLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheUIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb0EuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0EgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb0IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZUxGTyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2RlbGF5VGltZScpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrRGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrRGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QaXRjaFNoaWZ0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgQnVmZmVyU291cmNlTm9kZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0gIHtBdWRpb0J1ZmZlcnxUb25lLkJ1ZmZlcn0gIGJ1ZmZlciAgIFRoZSBidWZmZXIgdG8gcGxheVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIG9ubG9hZCAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBpcyBkb25lIHBsYXlpbmcuXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdidWZmZXInLFxuXHQgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgIF0sIFRvbmUuQnVmZmVyU291cmNlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlXG5cdFx0XHQgKiAgYnVmZmVyIHNvdXJjZSBpcyBkb25lIHBsYXlpbmcuXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG9wdGlvbnMub25lbmRlZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGltZSB0aGF0IHRoZSBidWZmZXIgd2FzIHN0YXJ0ZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuIGFkZGl0aW9uYWwgZmxhZyBpZiB0aGUgYWN0dWFsIEJ1ZmZlclNvdXJjZU5vZGVcblx0XHRcdCAqICBoYXMgYmVlbiBzdGFydGVkLiBiL2Mgc3RvcHBpbmcgYW4gdW5zdGFydGVkIGJ1ZmZlclxuXHRcdFx0ICogIHdpbGwgdGhyb3cgaXQgaW50byBhbiBpbnZhbGlkIHN0YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtCb29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRmxhZyBpZiB0aGUgc291cmNlIGhhcyBhbHJlYWR5IGJlZW4gc3RvcHBlZFxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlU3RvcHBlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0aW1lIHRoYXQgdGhlIGJ1ZmZlciBpcyBzY2hlZHVsZWQgdG8gc3RvcC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBub2RlIHdoaWNoIGVudmVsb3BlcyB0aGUgQnVmZmVyU291cmNlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGJ1ZmZlciBzb3VyY2Vcblx0XHRcdCAqICBAdHlwZSAge0F1ZGlvQnVmZmVyU291cmNlTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5jb25uZWN0KHRoaXMuX2dhaW5Ob2RlKTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2Uub25lbmRlZCA9IHRoaXMuX29uZW5kZWQuYmluZCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBwcml2YXRlIGJ1ZmZlciBpbnN0YW5jZVxuXHRcdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihvcHRpb25zLmJ1ZmZlciwgb3B0aW9ucy5vbmxvYWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwbGF5YmFja1JhdGUgb2YgdGhlIGJ1ZmZlclxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX3NvdXJjZS5wbGF5YmFja1JhdGUsIFRvbmUuVHlwZS5Qb3NpdGl2ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZhZGVJbiB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVJbiA9IG9wdGlvbnMuZmFkZUluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlT3V0IHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZU91dCA9IG9wdGlvbnMuZmFkZU91dDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjdXJ2ZSBhcHBsaWVkIHRvIHRoZSBmYWRlcywgZWl0aGVyIFwibGluZWFyXCIgb3IgXCJleHBvbmVudGlhbFwiXG5cdFx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jdXJ2ZSA9IG9wdGlvbnMuY3VydmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHRoYXQgdGhlIGJ1ZmZlciByYW1wcyB0b1xuXHRcdFx0ICogIEB0eXBlIHtHYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluID0gMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBvbmVuZGVkIHRpbWVvdXRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25lbmRlZFRpbWVvdXQgPSAtMTtcblx0ICAgICAgICAvL3NldCBzb21lIHZhbHVlcyBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLmxvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBvcHRpb25zLmxvb3BTdGFydDtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBvcHRpb25zLmxvb3BFbmQ7XG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUudmFsdWUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJ1ZmZlclNvdXJjZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25lbmRlZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAwLFxuXHQgICAgICAgICdmYWRlSW4nOiAwLFxuXHQgICAgICAgICdmYWRlT3V0JzogMCxcblx0ICAgICAgICAnY3VydmUnOiAnbGluZWFyJyxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHBsYXliYWNrIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byB0ZXN0IHRoZSBzdGF0ZSBhdFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5TdGF0ZX0gIFRoZSBwbGF5YmFjayBzdGF0ZS4gXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSAmJiB0aW1lID49IHRoaXMuX3N0YXJ0VGltZSAmJiAhdGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdGFydGVkO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgYnVmZmVyXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHBhcmFtICB7R2Fpbn0gIFtnYWluPTFdICBUaGUgZ2FpbiB0byBwbGF5IHRoZSBidWZmZXIgYmFjayBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBmYWRlSW5UaW1lICBUaGUgb3B0aW9uYWwgZmFkZUluIHJhbXAgdGltZS5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24sIGdhaW4sIGZhZGVJblRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyU291cmNlIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgb25jZS4nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCF0aGlzLmJ1ZmZlci5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkJ1ZmZlclNvdXJjZTogYnVmZmVyIGlzIGVpdGhlciBub3Qgc2V0IG9yIG5vdCBsb2FkZWQuJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL2lmIGl0J3MgYSBsb29wIHRoZSBkZWZhdWx0IG9mZnNldCBpcyB0aGUgbG9vcHN0YXJ0IHBvaW50XG5cdCAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCB0aGlzLmxvb3BTdGFydCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9vdGhlcndpc2UgdGhlIGRlZmF1bHQgb2Zmc2V0IGlzIDBcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgZ2FpbiA9IFRvbmUuZGVmYXVsdEFyZyhnYWluLCAxKTtcblx0ICAgICAgICB0aGlzLl9nYWluID0gZ2Fpbjtcblx0ICAgICAgICBmYWRlSW5UaW1lID0gdGhpcy50b1NlY29uZHMoVG9uZS5kZWZhdWx0QXJnKGZhZGVJblRpbWUsIHRoaXMuZmFkZUluKSk7XG5cdCAgICAgICAgdGhpcy5mYWRlSW4gPSBmYWRlSW5UaW1lO1xuXHQgICAgICAgIGlmIChmYWRlSW5UaW1lID4gMCkge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5jdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodGhpcy5fZ2FpbiwgdGltZSArIGZhZGVJblRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUodGhpcy5fZ2FpbiwgdGltZSwgZmFkZUluVGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKGdhaW4sIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lO1xuXHQgICAgICAgIHZhciBjb21wdXRlZER1ciA9IHRoaXMudG9TZWNvbmRzKFRvbmUuZGVmYXVsdEFyZyhkdXJhdGlvbiwgdGhpcy5idWZmZXIuZHVyYXRpb24gLSBvZmZzZXQgJSB0aGlzLmJ1ZmZlci5kdXJhdGlvbikpO1xuXHQgICAgICAgIGNvbXB1dGVkRHVyID0gTWF0aC5tYXgoY29tcHV0ZWREdXIsIDApO1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChkdXJhdGlvbikpIHtcblx0ICAgICAgICAgICAgLy9jbGlwIHRoZSBkdXJhdGlvbiB3aGVuIG5vdCBsb29waW5nXG5cdCAgICAgICAgICAgIGlmICghdGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgICAgICBjb21wdXRlZER1ciA9IE1hdGgubWluKGNvbXB1dGVkRHVyLCB0aGlzLmJ1ZmZlci5kdXJhdGlvbiAtIG9mZnNldCAlIHRoaXMuYnVmZmVyLmR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnN0b3AodGltZSArIGNvbXB1dGVkRHVyLCB0aGlzLmZhZGVPdXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3N0YXJ0IHRoZSBidWZmZXIgc291cmNlXG5cdCAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAvL21vZGlmeSB0aGUgb2Zmc2V0IGlmIGl0J3MgZ3JlYXRlciB0aGFuIHRoZSBsb29wIHRpbWVcblx0ICAgICAgICAgICAgdmFyIGxvb3BFbmQgPSB0aGlzLmxvb3BFbmQgfHwgdGhpcy5idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgICAgIHZhciBsb29wU3RhcnQgPSB0aGlzLmxvb3BTdGFydDtcblx0ICAgICAgICAgICAgdmFyIGxvb3BEdXJhdGlvbiA9IGxvb3BFbmQgLSBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIC8vbW92ZSB0aGUgb2Zmc2V0IGJhY2tcblx0ICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBsb29wRW5kKSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSAob2Zmc2V0IC0gbG9vcFN0YXJ0KSAlIGxvb3BEdXJhdGlvbiArIGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zb3VyY2UuYnVmZmVyID0gdGhpcy5idWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmxvb3BFbmQgPSB0aGlzLmxvb3BFbmQgfHwgdGhpcy5idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgaWYgKG9mZnNldCA8IHRoaXMuYnVmZmVyLmR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2Uuc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGJ1ZmZlci4gT3B0aW9uYWxseSBhZGQgYSByYW1wIHRpbWUgdG8gZmFkZSB0aGVcblx0XHQgKiAgYnVmZmVyIG91dC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICB0aW1lICAgICAgICAgVGhlIHRpbWUgdGhlIGJ1ZmZlciBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBmYWRlT3V0VGltZSAgSG93IGxvbmcgdGhlIGdhaW4gc2hvdWxkIGZhZGUgb3V0IGZvclxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lLCBmYWRlT3V0VGltZSkge1xuXHQgICAgICAgIGlmICghdGhpcy5idWZmZXIubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJTb3VyY2U6IGJ1ZmZlciBpcyBlaXRoZXIgbm90IHNldCBvciBub3QgbG9hZGVkLicpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL2lmIHRoZSBldmVudCBoYXMgYWxyZWFkeSBiZWVuIHNjaGVkdWxlZCwgY2xlYXIgaXRcblx0ICAgICAgICBpZiAodGhpcy5fc3RvcFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3N0b3AgaWYgaXQncyBzY2hlZHVsZSBiZWZvcmUgdGhlIHN0YXJ0IHRpbWVcblx0ICAgICAgICBpZiAodGltZSA8PSB0aGlzLl9zdGFydFRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4udmFsdWUgPSAwO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IE1hdGgubWF4KHRoaXMuX3N0YXJ0VGltZSArIHRoaXMuZmFkZUluICsgdGhpcy5zYW1wbGVUaW1lLCB0aW1lKTtcblx0ICAgICAgICAvL2NhbmNlbCB0aGUgcHJldmlvdXMgY3VydmVcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IHRpbWU7XG5cdCAgICAgICAgLy90aGUgZmFkZU91dCB0aW1lXG5cdCAgICAgICAgZmFkZU91dFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhUb25lLmRlZmF1bHRBcmcoZmFkZU91dFRpbWUsIHRoaXMuZmFkZU91dCkpO1xuXHQgICAgICAgIHZhciBoZWxkRHVyYXRpb24gPSB0aW1lIC0gdGhpcy5fc3RhcnRUaW1lIC0gdGhpcy5mYWRlSW4gLSB0aGlzLnNhbXBsZVRpbWU7XG5cdCAgICAgICAgaWYgKCF0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgLy9tYWtlIHN1cmUgdGhlIGZhZGUgZG9lcyBub3QgZ28gYmV5b25kIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlclxuXHQgICAgICAgICAgICBoZWxkRHVyYXRpb24gPSBNYXRoLm1pbihoZWxkRHVyYXRpb24sIHRoaXMuYnVmZmVyLmR1cmF0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZmFkZU91dFRpbWUgPSBNYXRoLm1pbihoZWxkRHVyYXRpb24sIGZhZGVPdXRUaW1lKTtcblx0ICAgICAgICB2YXIgc3RhcnRGYWRlID0gdGltZSAtIGZhZGVPdXRUaW1lO1xuXHQgICAgICAgIGlmIChmYWRlT3V0VGltZSA+IHRoaXMuc2FtcGxlVGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKHRoaXMuX2dhaW4sIHN0YXJ0RmFkZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmN1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKDAsIHN0YXJ0RmFkZSwgZmFkZU91dFRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl9vbmVuZGVkVGltZW91dCk7XG5cdCAgICAgICAgdGhpcy5fb25lbmRlZFRpbWVvdXQgPSBUb25lLmNvbnRleHQuc2V0VGltZW91dCh0aGlzLl9vbmVuZGVkLmJpbmQodGhpcyksIHRoaXMuX3N0b3BUaW1lIC0gdGhpcy5ub3coKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBhIHNjaGVkdWxlZCBzdG9wIGV2ZW50XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlclNvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5jYW5jZWxTdG9wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xICYmICF0aGlzLl9zb3VyY2VTdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIHRoZSBzdG9wIGVudmVsb3BlXG5cdCAgICAgICAgICAgIHZhciBmYWRlSW5UaW1lID0gdGhpcy50b1NlY29uZHModGhpcy5mYWRlSW4pO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aGlzLl9zdGFydFRpbWUgKyBmYWRlSW5UaW1lICsgdGhpcy5zYW1wbGVUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCBNYXRoLm1heCh0aGlzLm5vdygpLCB0aGlzLl9zdGFydFRpbWUgKyBmYWRlSW5UaW1lICsgdGhpcy5zYW1wbGVUaW1lKSk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fb25lbmRlZFRpbWVvdXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGVuZGVkLlxuXHRcdCAqICBJbnZva2VzIGBvbmVuZGVkYCBhbmQgZGlzcG9zZXMgdGhlIG5vZGUuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuX29uZW5kZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VTdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN0b3BwZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICAvL2FsbG93IGFkZGl0aW9uYWwgdGltZSBmb3IgdGhlIGV4cG9uZW50aWFsIGN1cnZlIHRvIGZ1bGx5IGRlY2F5XG5cdCAgICAgICAgICAgIHZhciBhZGRpdGlvbmFsVGFpbCA9IHRoaXMuY3VydmUgPT09ICdleHBvbmVudGlhbCcgPyB0aGlzLmZhZGVPdXQgKiAyIDogMDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVN0YXJ0ZWQgJiYgdGhpcy5fc3RvcFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2Uuc3RvcCh0aGlzLl9zdG9wVGltZSArIGFkZGl0aW9uYWxUYWlsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLm9uZW5kZWQodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBzdGFydCBhdCB0aGlzIHBvc2l0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UubG9vcFN0YXJ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wU3RhcnQgPSB0aGlzLnRvU2Vjb25kcyhsb29wU3RhcnQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgbG9vcCBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIGVuZCBhdCB0aGlzIHBvc2l0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UubG9vcEVuZCA9IHRoaXMudG9TZWNvbmRzKGxvb3BFbmQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF1ZGlvIGJ1ZmZlciBiZWxvbmdpbmcgdG8gdGhlIHBsYXllci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdCAqIEBuYW1lIGJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVyIHNob3VsZCBsb29wIG9uY2UgaXQncyBvdmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb29wXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UubG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHRoaXMuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLm9uZW5kZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTtcblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG51bGw7XG5cdCAgICAgICAgVG9uZS5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl9vbmVuZGVkVGltZW91dCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQnVmZmVyU291cmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTm9pc2UgaXMgYSBub2lzZSBnZW5lcmF0b3IuIEl0IHVzZXMgbG9vcGVkIG5vaXNlIGJ1ZmZlcnMgdG8gc2F2ZSBvbiBwZXJmb3JtYW5jZS5cblx0XHQgKiAgICAgICAgICBUb25lLk5vaXNlIHN1cHBvcnRzIHRoZSBub2lzZSB0eXBlczogXCJwaW5rXCIsIFwid2hpdGVcIiwgYW5kIFwiYnJvd25cIi4gUmVhZCBtb3JlIGFib3V0XG5cdFx0ICogICAgICAgICAgY29sb3JzIG9mIG5vaXNlIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbG9yc19vZl9ub2lzZSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IHR5cGUgdGhlIG5vaXNlIHR5cGUgKHdoaXRlfHBpbmt8YnJvd24pXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pbml0aWFsaXplIHRoZSBub2lzZSBhbmQgc3RhcnRcblx0XHQgKiB2YXIgbm9pc2UgPSBuZXcgVG9uZS5Ob2lzZShcInBpbmtcIikuc3RhcnQoKTtcblx0XHQgKlxuXHRcdCAqIC8vbWFrZSBhbiBhdXRvZmlsdGVyIHRvIHNoYXBlIHRoZSBub2lzZVxuXHRcdCAqIHZhciBhdXRvRmlsdGVyID0gbmV3IFRvbmUuQXV0b0ZpbHRlcih7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogXCI4bVwiLFxuXHRcdCAqIFx0XCJtaW5cIiA6IDgwMCxcblx0XHQgKiBcdFwibWF4XCIgOiAxNTAwMFxuXHRcdCAqIH0pLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHRcdCAqXG5cdFx0ICogLy9jb25uZWN0IHRoZSBub2lzZVxuXHRcdCAqIG5vaXNlLmNvbm5lY3QoYXV0b0ZpbHRlcik7XG5cdFx0ICogLy9zdGFydCB0aGUgYXV0b2ZpbHRlciBMRk9cblx0XHQgKiBhdXRvRmlsdGVyLnN0YXJ0KClcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd0eXBlJ10sIFRvbmUuTm9pc2UpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJTb3VyY2VOb2RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYnVmZmVyXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBub2lzZS4gQWZmZWN0c1xuXHRcdFx0ICogIHRoZSBcImZyZXF1ZW5jeVwiIG9mIHRoZSBub2lzZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Ob2lzZSwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICd3aGl0ZScsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgbm9pc2UuIENhbiBiZSBcIndoaXRlXCIsIFwiYnJvd25cIiwgb3IgXCJwaW5rXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTm9pc2UjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBub2lzZS50eXBlID0gXCJ3aGl0ZVwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTm9pc2UucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlICE9PSB0eXBlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodHlwZSBpbiBfbm9pc2VCdWZmZXJzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9pZiBpdCdzIHBsYXlpbmcsIHN0b3AgYW5kIHJlc3RhcnQgaXRcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9wKG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLk5vaXNlOiBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBub2lzZS4gQWZmZWN0c1xuXHRcdCAqICB0aGUgXCJmcmVxdWVuY3lcIiBvZiB0aGUgbm9pc2UuXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQHNpZ25hbFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTm9pc2UucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2UucGxheWJhY2tSYXRlLnZhbHVlID0gcmF0ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgYnVmZmVyID0gX25vaXNlQnVmZmVyc1t0aGlzLl90eXBlXTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2UoYnVmZmVyKS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UubG9vcCA9IHRydWU7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZSA9IHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2Uuc3RhcnQodGhpcy50b1NlY29uZHModGltZSksIE1hdGgucmFuZG9tKCkgKiAoYnVmZmVyLmR1cmF0aW9uIC0gMC4wMDEpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgaW50ZXJuYWwgc3RvcCBtZXRob2Rcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5zdG9wKHRoaXMudG9TZWNvbmRzKHRpbWUpKTtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVzdGFydHMgdGhlIG5vaXNlLlxuXHRcdCAqIEBwYXJhbSAge1t0eXBlXX0gdGltZSBbZGVzY3JpcHRpb25dXG5cdFx0ICogQHJldHVybiB7W3R5cGVdfSAgICAgIFtkZXNjcmlwdGlvbl1cblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vVE9ETyBjb3VsZCBiZSBvcHRpbWl6ZWQgYnkgY2FuY2VsbGluZyB0aGUgYnVmZmVyIHNvdXJjZSAnc3RvcCdcblx0ICAgICAgICAvL3N0b3AgYW5kIHJlc3RhcnRcblx0ICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5fc291cmNlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBUSEUgQlVGRkVSU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL05vaXNlIGJ1ZmZlciBzdGF0c1xuXHQgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IDQ0MTAwICogNTtcblx0ICAgIHZhciBjaGFubmVscyA9IDI7XG5cdCAgICAvKipcblx0XHQgKlx0VGhlIG5vaXNlIGFycmF5cy4gR2VuZXJhdGVkIG9uIGluaXRpYWxpemF0aW9uLlxuXHRcdCAqICBib3Jyb3dlZCBoZWF2aWx5IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3phY2hhcnlkZW50b24vbm9pc2UuanNcblx0XHQgKiAgKGMpIDIwMTMgWmFjaCBEZW50b24gKE1JVClcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgX25vaXNlQXJyYXlzID0ge1xuXHQgICAgICAgICdwaW5rJzogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWxOdW0gPSAwOyBjaGFubmVsTnVtIDwgY2hhbm5lbHM7IGNoYW5uZWxOdW0rKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJbY2hhbm5lbE51bV0gPSBjaGFubmVsO1xuXHQgICAgICAgICAgICAgICAgdmFyIGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2O1xuXHQgICAgICAgICAgICAgICAgYjAgPSBiMSA9IGIyID0gYjMgPSBiNCA9IGI1ID0gYjYgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB3aGl0ZSA9IE1hdGgucmFuZG9tKCkgKiAyIC0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBiMCA9IDAuOTk4ODYgKiBiMCArIHdoaXRlICogMC4wNTU1MTc5O1xuXHQgICAgICAgICAgICAgICAgICAgIGIxID0gMC45OTMzMiAqIGIxICsgd2hpdGUgKiAwLjA3NTA3NTk7XG5cdCAgICAgICAgICAgICAgICAgICAgYjIgPSAwLjk2OSAqIGIyICsgd2hpdGUgKiAwLjE1Mzg1Mjtcblx0ICAgICAgICAgICAgICAgICAgICBiMyA9IDAuODY2NSAqIGIzICsgd2hpdGUgKiAwLjMxMDQ4NTY7XG5cdCAgICAgICAgICAgICAgICAgICAgYjQgPSAwLjU1ICogYjQgKyB3aGl0ZSAqIDAuNTMyOTUyMjtcblx0ICAgICAgICAgICAgICAgICAgICBiNSA9IC0wLjc2MTYgKiBiNSAtIHdoaXRlICogMC4wMTY4OTg7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSA9IGIwICsgYjEgKyBiMiArIGIzICsgYjQgKyBiNSArIGI2ICsgd2hpdGUgKiAwLjUzNjI7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSAqPSAwLjExO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIChyb3VnaGx5KSBjb21wZW5zYXRlIGZvciBnYWluXG5cdCAgICAgICAgICAgICAgICAgICAgYjYgPSB3aGl0ZSAqIDAuMTE1OTI2O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSgpLFxuXHQgICAgICAgICdicm93bic6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsTnVtID0gMDsgY2hhbm5lbE51bSA8IGNoYW5uZWxzOyBjaGFubmVsTnVtKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJMZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyW2NoYW5uZWxOdW1dID0gY2hhbm5lbDtcblx0ICAgICAgICAgICAgICAgIHZhciBsYXN0T3V0ID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgd2hpdGUgPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSA9IChsYXN0T3V0ICsgMC4wMiAqIHdoaXRlKSAvIDEuMDI7XG5cdCAgICAgICAgICAgICAgICAgICAgbGFzdE91dCA9IGNoYW5uZWxbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSAqPSAzLjU7ICAgIC8vIChyb3VnaGx5KSBjb21wZW5zYXRlIGZvciBnYWluXG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcblx0ICAgICAgICB9KCksXG5cdCAgICAgICAgJ3doaXRlJzogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWxOdW0gPSAwOyBjaGFubmVsTnVtIDwgY2hhbm5lbHM7IGNoYW5uZWxOdW0rKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJbY2hhbm5lbE51bV0gPSBjaGFubmVsO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcblx0ICAgICAgICB9KClcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKlx0c3RhdGljIG5vaXNlIGJ1ZmZlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSB7VG9uZS5CdWZmZXJ9XG5cdFx0ICovXG5cdCAgICB2YXIgX25vaXNlQnVmZmVycyA9IHt9O1xuXHQgICAgLy9jcmVhdGUgdGhlIFRvbmUuQnVmZmVyc1xuXHQgICAgZnVuY3Rpb24gY3JlYXRlQnVmZmVycygpIHtcblx0ICAgICAgICBmb3IgKHZhciB0eXBlIGluIF9ub2lzZUFycmF5cykge1xuXHQgICAgICAgICAgICBfbm9pc2VCdWZmZXJzW3R5cGVdID0gbmV3IFRvbmUuQnVmZmVyKCkuZnJvbUFycmF5KF9ub2lzZUFycmF5c1t0eXBlXSk7XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHQgICAgLy9jcmVhdGUgdGhlIG5vaXNlIGJ1ZmZlcnNcblx0ICAgIFRvbmUuZ2V0Q29udGV4dChjcmVhdGVCdWZmZXJzKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGNyZWF0ZUJ1ZmZlcnMpO1xuXHQgICAgcmV0dXJuIFRvbmUuTm9pc2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTaW1wbGUgY29udm9sdXRpb24gY3JlYXRlZCB3aXRoIGRlY2F5aW5nIG5vaXNlLlxuXHRcdCAqICBcdFx0R2VuZXJhdGVzIGFuIEltcHVsc2UgUmVzcG9uc2UgQnVmZmVyXG5cdFx0ICogXHRcdFx0d2l0aCBUb25lLk9mZmxpbmUgdGhlbiBmZWVkcyB0aGUgSVIgaW50byBDb252b2x2ZXJOb2RlLlxuXHRcdCAqIFx0XHRcdE5vdGU6IHRoZSBSZXZlcmIgd2lsbCBub3QgbWFrZSBhbnkgc291bmQgdW50aWwgW2dlbmVyYXRlXSgjZ2VuZXJhdGUpXG5cdFx0ICogXHRcdFx0aGFzIGJlZW4gaW52b2tlZCBhbmQgcmVzb2x2ZWQuXG5cdFx0ICpcblx0XHQgKiBcdFx0XHRJbnNwaXJhdGlvbiBmcm9tIFtSZXZlcmJHZW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9hZGVsZXNwaW5hc3NlL3JldmVyYkdlbikuXG5cdFx0ICogXHRcdFx0Q29weXJpZ2h0IChjKSAyMDE0IEFsYW4gZGVMZXNwaW5hc3NlIEFwYWNoZSAyLjAgTGljZW5zZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Db252b2x2ZXJ9XG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGRlY2F5IFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHJldmVyYmVyYXRlIGZvci5cblx0XHQgKi9cblx0ICAgIFRvbmUuUmV2ZXJiID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZGVjYXknXSwgVG9uZS5SZXZlcmIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQ29udm9sdmVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7Q29udm9sdmVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNvbnZvbHZlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGR1cmF0aW9uIG9mIHRoZSByZXZlcmJcblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWNheSA9IG9wdGlvbnMuZGVjYXk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgYW1vdW50IG9mIHRpbWUgYmVmb3JlIHRoZSByZXZlcmIgaXMgZnVsbHlcblx0XHRcdCAqIHJhbXBlZCBpbi5cblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wcmVEZWxheSA9IG9wdGlvbnMucHJlRGVsYXk7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX2NvbnZvbHZlcik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5SZXZlcmIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2RlY2F5JzogMS41LFxuXHQgICAgICAgICdwcmVEZWxheSc6IDAuMDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZW5lcmF0ZSB0aGUgSW1wdWxzZSBSZXNwb25zZS4gUmV0dXJucyBhIHByb21pc2Ugd2hpbGUgdGhlIElSIGlzIGJlaW5nXG5cdFx0ICogZ2VuZXJhdGVkLlxuXHRcdCAqIEByZXR1cm4ge1Byb21pc2U8VG9uZS5SZXZlcmI+fSBQcm9taXNlIHdoaWNoIHJldHVybnMgdGhpcyBvYmplY3QuXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYi5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuT2ZmbGluZShmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vY3JlYXRlIGEgbm9pc2UgYnVyc3Qgd2hpY2ggZGVjYXlzIG92ZXIgdGhlIGR1cmF0aW9uXG5cdCAgICAgICAgICAgIHZhciBub2lzZUwgPSBuZXcgVG9uZS5Ob2lzZSgpO1xuXHQgICAgICAgICAgICB2YXIgbm9pc2VSID0gbmV3IFRvbmUuTm9pc2UoKTtcblx0ICAgICAgICAgICAgdmFyIG1lcmdlID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICAgICAgbm9pc2VMLmNvbm5lY3QobWVyZ2UubGVmdCk7XG5cdCAgICAgICAgICAgIG5vaXNlUi5jb25uZWN0KG1lcmdlLnJpZ2h0KTtcblx0ICAgICAgICAgICAgdmFyIGdhaW5Ob2RlID0gbmV3IFRvbmUuR2FpbigpLnRvTWFzdGVyKCk7XG5cdCAgICAgICAgICAgIG1lcmdlLmNvbm5lY3QoZ2Fpbk5vZGUpO1xuXHQgICAgICAgICAgICBub2lzZUwuc3RhcnQoMCk7XG5cdCAgICAgICAgICAgIG5vaXNlUi5zdGFydCgwKTtcblx0ICAgICAgICAgICAgLy9zaG9ydCBmYWRlIGluXG5cdCAgICAgICAgICAgIGdhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgMCk7XG5cdCAgICAgICAgICAgIGdhaW5Ob2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMSwgdGhpcy5wcmVEZWxheSk7XG5cdCAgICAgICAgICAgIC8vZGVjYXlcblx0ICAgICAgICAgICAgZ2Fpbk5vZGUuZ2Fpbi5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUoMCwgdGhpcy5wcmVEZWxheSwgdGhpcy5kZWNheSAtIHRoaXMucHJlRGVsYXkpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5kZWNheSkudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnZvbHZlci5idWZmZXIgPSBidWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5SZXZlcmJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5SZXZlcmI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBCYXNlIGNsYXNzIGZvciBzdGVyZW8gZmVlZGJhY2sgZWZmZWN0cyB3aGVyZSB0aGUgZWZmZWN0UmV0dXJuXG5cdFx0ICogICAgICAgICBpcyBmZWQgYmFjayBpbnRvIHRoZSBzYW1lIGNoYW5uZWwuXG5cdFx0ICpcblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmZWVkYmFjayddLCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgZmVlZGJhY2tcblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZlZWRiYWNrLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZWZ0IHNpZGUgZmVlYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcmlnaHQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTC5jaGFpbih0aGlzLl9mZWVkYmFja0wsIHRoaXMuZWZmZWN0U2VuZEwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuUi5jaGFpbih0aGlzLl9mZWVkYmFja1IsIHRoaXMuZWZmZWN0U2VuZFIpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZmFuKHRoaXMuX2ZlZWRiYWNrTC5nYWluLCB0aGlzLl9mZWVkYmFja1IuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydmZWVkYmFjayddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0LCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBcHBsaWVzIGEgd2lkdGggZmFjdG9yIHRvIHRoZSBtaWQvc2lkZSBzZXBlcmF0aW9uLlxuXHRcdCAqICAgICAgICAgMCBpcyBhbGwgbWlkIGFuZCAxIGlzIGFsbCBzaWRlLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZvdW5kIGluIFtrdnJhdWRpbyBmb3J1bXNdKGh0dHA6Ly93d3cua3ZyYXVkaW8uY29tL2ZvcnVtL3ZpZXd0b3BpYy5waHA/dD0yMTI1ODcpLlxuXHRcdCAqICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgIDxjb2RlPlxuXHRcdCAqICAgICAgICAgTWlkICo9IDIqKDEtd2lkdGgpPGJyPlxuXHRcdCAqICAgICAgICAgU2lkZSAqPSAyKndpZHRoXG5cdFx0ICogICAgICAgICA8L2NvZGU+XG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTWlkU2lkZUVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbd2lkdGhdIFRoZSBzdGVyZW8gd2lkdGguIEEgd2lkdGggb2YgMCBpcyBtb25vIGFuZCAxIGlzIHN0ZXJlby4gMC41IGlzIG5vIGNoYW5nZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvV2lkZW5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3dpZHRoJ10sIFRvbmUuU3RlcmVvV2lkZW5lcik7XG5cdCAgICAgICAgVG9uZS5NaWRTaWRlRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdpZHRoIGNvbnRyb2wuIDAgPSAxMDAlIG1pZC4gMSA9IDEwMCUgc2lkZS4gMC41ID0gbm8gY2hhbmdlLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndpZHRoID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMud2lkdGgsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWyd3aWR0aCddKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFR3byB0aW1lcyB0aGUgKDEtd2lkdGgpIGZvciB0aGUgbWlkIGNoYW5uZWxcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQgPSBuZXcgVG9uZS5NdWx0aXBseSgyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFR3byB0aW1lcyB0aGUgd2lkdGggZm9yIHRoZSBzaWRlIGNoYW5uZWxcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlID0gbmV3IFRvbmUuTXVsdGlwbHkoMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTWlkIG11bHRpcGxpZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkTXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KCk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZC5jb25uZWN0KHRoaXMuX21pZE11bHQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMubWlkU2VuZC5jaGFpbih0aGlzLl9taWRNdWx0LCB0aGlzLm1pZFJldHVybik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAxIC0gd2lkdGhcblx0XHRcdCAqIEB0eXBlIHtUb25lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aC5jb25uZWN0KHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5nZXRDb25zdGFudCgxKS5jb25uZWN0KHRoaXMuX29uZU1pbnVzV2lkdGgsIDAsIDApO1xuXHQgICAgICAgIHRoaXMud2lkdGguY29ubmVjdCh0aGlzLl9vbmVNaW51c1dpZHRoLCAwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTaWRlIG11bHRpcGxpZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2lkZU11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHQgICAgICAgIHRoaXMud2lkdGguY29ubmVjdCh0aGlzLl90d29UaW1lc1dpZHRoU2lkZSk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aFNpZGUuY29ubmVjdCh0aGlzLl9zaWRlTXVsdCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5zaWRlU2VuZC5jaGFpbih0aGlzLl9zaWRlTXVsdCwgdGhpcy5zaWRlUmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb1dpZGVuZXIsIFRvbmUuTWlkU2lkZUVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvV2lkZW5lci5kZWZhdWx0cyA9IHsgJ3dpZHRoJzogMC41IH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb1dpZGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvV2lkZW5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1pZFNpZGVFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3dpZHRoJ10pO1xuXHQgICAgICAgIHRoaXMud2lkdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZE11bHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZE11bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NpZGVNdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaWRlTXVsdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aFNpZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vbmVNaW51c1dpZHRoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vbmVNaW51c1dpZHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdGVyZW9XaWRlbmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmVtb2xvIG1vZHVsYXRlcyB0aGUgYW1wbGl0dWRlIG9mIGFuIGluY29taW5nIHNpZ25hbCB1c2luZyBhIFRvbmUuTEZPLlxuXHRcdCAqICAgICAgICAgVGhlIHR5cGUsIGZyZXF1ZW5jeSwgYW5kIGRlcHRoIG9mIHRoZSBMRk8gaXMgY29udHJvbGxhYmxlLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZnJlcXVlbmN5XSBUaGUgcmF0ZSBvZiB0aGUgZWZmZWN0LlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbZGVwdGhdIFRoZSBkZXB0aCBvZiB0aGUgZWZmZWN0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY3JlYXRlIGEgdHJlbW9sbyBhbmQgc3RhcnQgaXQncyBMRk9cblx0XHQgKiB2YXIgdHJlbW9sbyA9IG5ldyBUb25lLlRyZW1vbG8oOSwgMC43NSkudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqIC8vcm91dGUgYW4gb3NjaWxsYXRvciB0aHJvdWdoIHRoZSB0cmVtb2xvIGFuZCBzdGFydCBpdFxuXHRcdCAqIHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QodHJlbW9sbykuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSwgVG9uZS5UcmVtb2xvKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0cmVtZWxvIExGTyBpbiB0aGUgbGVmdCBjaGFubmVsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdwaGFzZSc6IG9wdGlvbnMuc3ByZWFkLFxuXHQgICAgICAgICAgICAnbWluJzogMSxcblx0ICAgICAgICAgICAgJ21heCc6IDBcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHJlbWVsbyBMRk8gaW4gdGhlIGxlZnQgY2hhbm5lbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAncGhhc2UnOiBvcHRpb25zLnNwcmVhZCxcblx0ICAgICAgICAgICAgJ21pbic6IDEsXG5cdCAgICAgICAgICAgICdtYXgnOiAwXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlcmUgdGhlIGdhaW4gaXMgbXVsdGlwbGllZFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVMID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZXJlIHRoZSBnYWluIGlzIG11bHRpcGxpZWRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlUiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSB0cmVtb2xvLlxuXHRcdFx0ICogIEB0eXBlICB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVwdGggb2YgdGhlIGVmZmVjdC4gQSBkZXB0aCBvZiAwLCBoYXMgbm8gZWZmZWN0XG5cdFx0XHQgKiAgb24gdGhlIGFtcGxpdHVkZSwgYW5kIGEgZGVwdGggb2YgMSBtYWtlcyB0aGUgYW1wbGl0dWRlXG5cdFx0XHQgKiAgbW9kdWxhdGUgZnVsbHkgYmV0d2VlbiAwIGFuZCAxLlxuXHRcdFx0ICogIEB0eXBlICB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRlcHRoLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNoYWluKHRoaXMuX2FtcGxpdHVkZUwsIHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbih0aGlzLl9hbXBsaXR1ZGVSLCB0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZGVMLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZGVSLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmZhbih0aGlzLl9sZm9MLmZyZXF1ZW5jeSwgdGhpcy5fbGZvUi5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGVwdGguZmFuKHRoaXMuX2xmb1IuYW1wbGl0dWRlLCB0aGlzLl9sZm9MLmFtcGxpdHVkZSk7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuc3ByZWFkID0gb3B0aW9ucy5zcHJlYWQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmVtb2xvLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMTAsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ2RlcHRoJzogMC41LFxuXHQgICAgICAgICdzcHJlYWQnOiAxODBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdGFydCB0aGUgdHJlbW9sby5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgdHJlbW9sbyBiZWdpbnMuXG5cdFx0ICogQHJldHVybnMge1RvbmUuVHJlbW9sb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgdGhlIHRyZW1vbG8uXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHRyZW1vbG8gc3RvcHMuXG5cdFx0ICogQHJldHVybnMge1RvbmUuVHJlbW9sb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm9MLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGVmZmVjdCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW2RlbGF5PTBdIERlbGF5IHRpbWUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBlZmZlY3QgYWZ0ZXIgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgaGFzIHN0YXJ0ZWQuXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKGRlbGF5KSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5zeW5jKGRlbGF5KTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN5bmMoZGVsYXkpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgZmlsdGVyIGZyb20gdGhlIHRyYW5zcG9ydFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi51bnN5bmMoKTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC51bnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBUcmVtb2xvJ3Mgb3NjaWxsYXRvciB0eXBlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlRyZW1vbG8jXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmVtb2xvLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9MLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBBbW91bnQgb2Ygc3RlcmVvIHNwcmVhZC4gV2hlbiBzZXQgdG8gMCwgYm90aCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBjZW50cmFsbHkuXG5cdFx0ICogV2hlbiBzZXQgdG8gMTgwLCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBoYXJkIGxlZnQgYW5kIHJpZ2h0IHJlc3BlY3RpdmVseS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmVtb2xvI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHNwcmVhZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJlbW9sby5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9SLnBoYXNlIC0gdGhpcy5fbGZvTC5waGFzZTsgICAgLy8xODBcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnBoYXNlID0gOTAgLSBzcHJlYWQgLyAyO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnBoYXNlID0gc3ByZWFkIC8gMiArIDkwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9sZm9MLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9MID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9SLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVMLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJlbW9sbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgVmlicmF0byBlZmZlY3QgY29tcG9zZWQgb2YgYSBUb25lLkRlbGF5IGFuZCBhIFRvbmUuTEZPLiBUaGUgTEZPXG5cdFx0ICogICAgICAgICBtb2R1bGF0ZXMgdGhlIGRlbGF5VGltZSBvZiB0aGUgZGVsYXksIGNhdXNpbmcgdGhlIHBpdGNoIHRvIHJpc2Vcblx0XHQgKiAgICAgICAgIGFuZCBmYWxsLiBcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBmcmVxdWVuY3kgb2YgdGhlIHZpYnJhdG8uXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IGRlcHRoIFRoZSBhbW91bnQgdGhlIHBpdGNoIGlzIG1vZHVsYXRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuVmlicmF0byA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSwgVG9uZS5WaWJyYXRvKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheSBub2RlIHVzZWQgZm9yIHRoZSB2aWJyYXRvIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBuZXcgVG9uZS5EZWxheSgwLCBvcHRpb25zLm1heERlbGF5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgTEZPIHVzZWQgdG8gY29udHJvbCB0aGUgdmlicmF0b1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBvcHRpb25zLnR5cGUsXG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4Jzogb3B0aW9ucy5tYXhEZWxheSxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAncGhhc2UnOiAtOTAgICAgLy9vZmZzZSB0aGUgcGhhc2Ugc28gdGhlIHJlc3RpbmcgcG9zaXRpb24gaXMgaW4gdGhlIGNlbnRlclxuXHQgICAgICAgIH0pLnN0YXJ0KCkuY29ubmVjdCh0aGlzLl9kZWxheU5vZGUuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSB2aWJyYXRvXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmby5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlcHRoIG9mIHRoZSB2aWJyYXRvLiBcblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2xmby5hbXBsaXR1ZGU7XG5cdCAgICAgICAgdGhpcy5kZXB0aC52YWx1ZSA9IG9wdGlvbnMuZGVwdGg7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbih0aGlzLl9kZWxheU5vZGUsIHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlZpYnJhdG8sIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5WaWJyYXRvLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtYXhEZWxheSc6IDAuMDA1LFxuXHQgICAgICAgICdmcmVxdWVuY3knOiA1LFxuXHQgICAgICAgICdkZXB0aCc6IDAuMSxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFR5cGUgb2Ygb3NjaWxsYXRvciBhdHRhY2hlZCB0byB0aGUgVmlicmF0by5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5WaWJyYXRvI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVmlicmF0by5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVmlicmF0b30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5WaWJyYXRvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlZpYnJhdG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5FdmVudCBhYnN0cmFjdHMgYXdheSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZSBhbmQgcHJvdmlkZXMgYSBzY2hlZHVsYWJsZVxuXHRcdCAqICAgICAgICAgIGNhbGxiYWNrIGZvciBhIHNpbmdsZSBvciByZXBlYXRhYmxlIGV2ZW50cyBhbG9uZyB0aGUgdGltZWxpbmUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYXQgdGhlIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIG9yIHZhbHVlcyB3aGljaCBzaG91bGQgYmUgcGFzc2VkIHRvXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIGludm9jYXRpb24uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNob3JkID0gbmV3IFRvbmUuRXZlbnQoZnVuY3Rpb24odGltZSwgY2hvcmQpe1xuXHRcdCAqIFx0Ly90aGUgY2hvcmQgYXMgd2VsbCBhcyB0aGUgZXhhY3QgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiBcdC8vYXJlIHBhc3NlZCBpbiBhcyBhcmd1bWVudHMgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG5cdFx0ICogfSwgW1wiRDRcIiwgXCJFNFwiLCBcIkY0XCJdKTtcblx0XHQgKiAvL3N0YXJ0IHRoZSBjaG9yZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cmFuc3BvcnQgdGltZWxpbmVcblx0XHQgKiBjaG9yZC5zdGFydCgpO1xuXHRcdCAqIC8vbG9vcCBpdCBldmVyeSBtZWFzdXJlIGZvciA4IG1lYXN1cmVzXG5cdFx0ICogY2hvcmQubG9vcCA9IDg7XG5cdFx0ICogY2hvcmQubG9vcEVuZCA9IFwiMW1cIjtcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAndmFsdWUnXG5cdCAgICAgICAgXSwgVG9uZS5FdmVudCk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIExvb3AgdmFsdWVcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW58UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIHRvIGludm9rZS5cblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHdoaWNoIGlzIHBhc3NlZCB0byB0aGVcblx0XHRcdCAqICBjYWxsYmFjayBmdW5jdGlvbi5cblx0XHRcdCAqICBAdHlwZSAgeyp9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZW4gdGhlIG5vdGUgaXMgc2NoZWR1bGVkIHRvIHN0YXJ0LlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3Mob3B0aW9ucy5sb29wU3RhcnQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZW4gdGhlIG5vdGUgaXMgc2NoZWR1bGVkIHRvIHN0YXJ0LlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKG9wdGlvbnMubG9vcEVuZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVHJhY2tzIHRoZSBzY2hlZHVsZWQgZXZlbnRzXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBsYXliYWNrIHNwZWVkIG9mIHRoZSBub3RlLiBBIHNwZWVkIG9mIDFcblx0XHRcdCAqICBpcyBubyBjaGFuZ2UuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSAxO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgZGVsYXkgdGltZSBmcm9tIHdoZW4gdGhlIGV2ZW50IGlzIHNjaGVkdWxlZCB0byBzdGFydFxuXHRcdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHByaXZhdGUgaG9sZGVyIG9mIHByb2JhYmlsaXR5IHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wcm9iYWJpbGl0eSA9IG9wdGlvbnMucHJvYmFiaWxpdHk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFtb3VudCBvZiB2YXJpYXRpb24gZnJvbSB0aGVcblx0XHRcdCAqICBnaXZlbiB0aW1lLlxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2h1bWFuaXplID0gb3B0aW9ucy5odW1hbml6ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiBtdXRlIGlzIHRydWUsIHRoZSBjYWxsYmFjayB3b24ndCBiZVxuXHRcdFx0ICogIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcEVuZCc6ICcxbScsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ3ZhbHVlJzogbnVsbCxcblx0ICAgICAgICAncHJvYmFiaWxpdHknOiAxLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2UsXG5cdCAgICAgICAgJ2h1bWFuaXplJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVzY2hlZHVsZSBhbGwgb2YgdGhlIGV2ZW50cyBhbG9uZyB0aGUgdGltZWxpbmVcblx0XHQgKiAgd2l0aCB0aGUgdXBkYXRlZCB2YWx1ZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gYWZ0ZXIgT25seSByZXNjaGVkdWxlcyBldmVudHMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuX3Jlc2NoZWR1bGVFdmVudHMgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICAvL2lmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCBzY2hlZHVsZXMgYWxsIG9mIHRoZSBldmVudHNcblx0ICAgICAgICBhZnRlciA9IFRvbmUuZGVmYXVsdEFyZyhhZnRlciwgLTEpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdmFyIGR1cmF0aW9uO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGV2ZW50LmlkKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHZhciBzdGFydFRpY2sgPSBldmVudC50aW1lICsgTWF0aC5yb3VuZCh0aGlzLnN0YXJ0T2Zmc2V0IC8gdGhpcy5fcGxheWJhY2tSYXRlKTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBJbmZpbml0eTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc051bWJlcih0aGlzLl9sb29wKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHRoaXMuX2xvb3AgKiB0aGlzLl9nZXRMb29wRHVyYXRpb24oKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRFdmVudCA9IHRoaXMuX3N0YXRlLmdldEFmdGVyKHN0YXJ0VGljayk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRFdmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IE1hdGgubWluKGR1cmF0aW9uLCBuZXh0RXZlbnQudGltZSAtIHN0YXJ0VGljayk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChkdXJhdGlvbiAhPT0gSW5maW5pdHkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy9zY2hlZHVsZSBhIHN0b3Agc2luY2UgaXQncyBmaW5pdGUgZHVyYXRpb25cblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBzdGFydFRpY2sgKyBkdXJhdGlvbiArIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IFRvbmUuVGlja3MoZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJ2YWwgPSBUb25lLlRpY2tzKHRoaXMuX2dldExvb3BEdXJhdGlvbigpKTtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5pZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KHRoaXMuX3RpY2suYmluZCh0aGlzKSwgaW50ZXJ2YWwsIFRvbmUuVGlja3Moc3RhcnRUaWNrKSwgZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5pZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKHRoaXMuX3RpY2suYmluZCh0aGlzKSwgVG9uZS5UaWNrcyhzdGFydFRpY2spKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBub3RlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUoVG9uZS5UcmFuc3BvcnQudGlja3MpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdGFydCBmcm9tIHRoZSBzY2hlZHVsZWQgc3RhcnQgdGltZVxuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAbmFtZSBzdGFydE9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnc3RhcnRPZmZzZXQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydE9mZnNldDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGFydE9mZnNldCA9IG9mZnNldDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJvYmFiaWxpdHkgb2YgdGhlIG5vdGVzIGJlaW5nIHRyaWdnZXJlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvYmFiaWxpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3Byb2JhYmlsaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvYmFiaWxpdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9iKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2JhYmlsaXR5ID0gcHJvYjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiBzZXQgdG8gdHJ1ZSwgd2lsbCBhcHBseSBzbWFsbCByYW5kb20gdmFyaWF0aW9uXG5cdFx0ICogIHRvIHRoZSBjYWxsYmFjayB0aW1lLiBJZiB0aGUgdmFsdWUgaXMgZ2l2ZW4gYXMgYSB0aW1lLCBpdCB3aWxsIHJhbmRvbWl6ZVxuXHRcdCAqICBieSB0aGF0IGFtb3VudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBldmVudC5odW1hbml6ZSA9IHRydWU7XG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0ICogIEBuYW1lIGh1bWFuaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdodW1hbml6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2h1bWFuaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFyaWF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2h1bWFuaXplID0gdmFyaWF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBub3RlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgdGltZSAgV2hlbiB0aGUgbm90ZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuYWRkKHtcblx0ICAgICAgICAgICAgICAgICdzdGF0ZSc6IFRvbmUuU3RhdGUuU3RhcnRlZCxcblx0ICAgICAgICAgICAgICAgICd0aW1lJzogdGltZSxcblx0ICAgICAgICAgICAgICAgICdpZCc6IHVuZGVmaW5lZFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIEV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgdGltZSAgV2hlbiB0aGUgbm90ZSBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0QmVmb3JlKHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgcmVzY2hlZHVsVGltZSA9IHRpbWU7XG5cdCAgICAgICAgICAgIGlmIChwcmV2aW91c0V2ZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICByZXNjaGVkdWxUaW1lID0gcHJldmlvdXNFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMocmVzY2hlZHVsVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYWxsIHNjaGVkdWxlZCBldmVudHMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICBbdGltZT0wXSAgVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggZXZlbnRzIHdpbGwgYmUgY2FuY2VsLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuZGVmYXVsdEFyZyh0aW1lLCAtSW5maW5pdHkpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEZyb20odGltZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VyLiBBbHNvXG5cdFx0ICogIGNoZWNrcyBpZiB0aGUgRXZlbnQgaXMgZG9uZSBwbGF5aW5nXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIG9mIHRoZSBldmVudCBpbiBzZWNvbmRzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gVG9uZS5UcmFuc3BvcnQuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKCF0aGlzLm11dGUgJiYgdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGlja3MpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMucHJvYmFiaWxpdHkgPCAxICYmIE1hdGgucmFuZG9tKCkgPiB0aGlzLnByb2JhYmlsaXR5KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaHVtYW5pemUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB2YXJpYXRpb24gPSAwLjAyO1xuXHQgICAgICAgICAgICAgICAgaWYgKCFUb25lLmlzQm9vbGVhbih0aGlzLmh1bWFuaXplKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbiA9IHRoaXMudG9TZWNvbmRzKHRoaXMuaHVtYW5pemUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdGltZSArPSAoTWF0aC5yYW5kb20oKSAqIDIgLSAxKSAqIHZhcmlhdGlvbjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHRoaXMudmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBkdXJhdGlvbiBvZiB0aGUgbG9vcC5cblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuX2dldExvb3BEdXJhdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgodGhpcy5fbG9vcEVuZCAtIHRoaXMuX2xvb3BTdGFydCkgLyB0aGlzLl9wbGF5YmFja1JhdGUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgbm90ZSBzaG91bGQgbG9vcCBvciBub3Rcblx0XHQgKiAgYmV0d2VlbiBUb25lLkV2ZW50Lmxvb3BTdGFydCBhbmRcblx0XHQgKiAgVG9uZS5FdmVudC5sb29wRW5kLiBBbiBpbnRlZ2VyXG5cdFx0ICogIHZhbHVlIGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2Zcblx0XHQgKiAgbG9vcHMgdGhlIEV2ZW50IGRvZXMgYWZ0ZXIgaXQgc3RhcnRzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGxvb3Bcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbm90ZS4gRGVmYXVsdHMgdG8gMS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogbm90ZS5sb29wID0gdHJ1ZTtcblx0XHQgKiAvL3JlcGVhdCB0aGUgbm90ZSB0d2ljZSBhcyBmYXN0XG5cdFx0ICogbm90ZS5wbGF5YmFja1JhdGUgPSAyO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGxvb3BFbmQgcG9pbnQgaXMgdGhlIHRpbWUgdGhlIGV2ZW50IHdpbGwgbG9vcFxuXHRcdCAqICBpZiBUb25lLkV2ZW50Lmxvb3AgaXMgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wRW5kKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhsb29wRW5kKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHdoZW4gdGhlIGxvb3Agc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wU3RhcnQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9UaWNrcyhsb29wU3RhcnQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGxvb3AgaW50ZXJ2YWwuXG5cdFx0ICogIFJldHVybnMgMCBpZiB0aGUgZXZlbnQgaXMgbm90IHN0YXJ0ZWQgeWV0IG9yXG5cdFx0ICogIGl0IGlzIG5vdCBzZXQgdG8gbG9vcC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvZ3Jlc3Ncblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdwcm9ncmVzcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHZhciB0aWNrcyA9IFRvbmUuVHJhbnNwb3J0LnRpY2tzO1xuXHQgICAgICAgICAgICAgICAgdmFyIGxhc3RFdmVudCA9IHRoaXMuX3N0YXRlLmdldCh0aWNrcyk7XG5cdCAgICAgICAgICAgICAgICBpZiAobGFzdEV2ZW50ICE9PSBudWxsICYmIGxhc3RFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGxvb3BEdXJhdGlvbiA9IHRoaXMuX2dldExvb3BEdXJhdGlvbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9ICh0aWNrcyAtIGxhc3RFdmVudC50aW1lKSAlIGxvb3BEdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgLyBsb29wRHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5jYW5jZWwoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkV2ZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTG9vcCBjcmVhdGVzIGEgbG9vcGVkIGNhbGxiYWNrIGF0IHRoZSBcblx0XHQgKiAgICAgICAgIHNwZWNpZmllZCBpbnRlcnZhbC4gVGhlIGNhbGxiYWNrIGNhbiBiZSBcblx0XHQgKiAgICAgICAgIHN0YXJ0ZWQsIHN0b3BwZWQgYW5kIHNjaGVkdWxlZCBhbG9uZ1xuXHRcdCAqICAgICAgICAgdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbG9vcCA9IG5ldyBUb25lLkxvb3AoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL3RyaWdnZXJlZCBldmVyeSBlaWdodGggbm90ZS4gXG5cdFx0ICogXHRjb25zb2xlLmxvZyh0aW1lKTtcblx0XHQgKiB9LCBcIjhuXCIpLnN0YXJ0KDApO1xuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KCk7XG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggdGhlIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGludGVydmFsIFRoZSB0aW1lIGJldHdlZW4gc3VjY2Vzc2l2ZSBjYWxsYmFjayBjYWxscy4gXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAnaW50ZXJ2YWwnXG5cdCAgICAgICAgXSwgVG9uZS5Mb29wKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGV2ZW50IHdoaWNoIHByb2R1Y2VzIHRoZSBjYWxsYmFja3Ncblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50ID0gbmV3IFRvbmUuRXZlbnQoe1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiB0aGlzLl90aWNrLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICdsb29wJzogdHJ1ZSxcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiBvcHRpb25zLmludGVydmFsLFxuXHQgICAgICAgICAgICAncGxheWJhY2tSYXRlJzogb3B0aW9ucy5wbGF5YmFja1JhdGUsXG5cdCAgICAgICAgICAgICdwcm9iYWJpbGl0eSc6IG9wdGlvbnMucHJvYmFiaWxpdHlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggdGhlIG5leHQgZXZlbnQgaW4gdGhlIHBhdHRlcm5cblx0XHRcdCAqICBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcblx0ICAgICAgICAvL3NldCB0aGUgaXRlcmF0aW9uc1xuXHQgICAgICAgIHRoaXMuaXRlcmF0aW9ucyA9IG9wdGlvbnMuaXRlcmF0aW9ucztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxvb3ApO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ludGVydmFsJzogJzRuJyxcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ2l0ZXJhdGlvbnMnOiBJbmZpbml0eSxcblx0ICAgICAgICAncHJvYmFiaWxpdHknOiB0cnVlLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGxvb3AgYXQgdGhlIHNwZWNpZmllZCB0aW1lIGFsb25nIHRoZSBUcmFuc3BvcnQnc1xuXHRcdCAqICB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbj19ICB0aW1lICBXaGVuIHRvIHN0YXJ0IHRoZSBMb29wLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGxvb3AgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb249fSAgdGltZSAgV2hlbiB0byBzdG9wIHRoZSBBcnBlZ2dpb1xuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYWxsIHNjaGVkdWxlZCBldmVudHMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICBbdGltZT0wXSAgVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggZXZlbnRzIHdpbGwgYmUgY2FuY2VsLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIG5vdGVzIHNob3VsZCBiZSBjYWxsZWRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdGhlIGV2ZW50IG9jY3Vyc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN0YXRlIG9mIHRoZSBMb29wLCBlaXRoZXIgc3RhcnRlZCBvciBzdG9wcGVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5zdGF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJvZ3Jlc3Mgb2YgdGhlIGxvb3AgYXMgYSB2YWx1ZSBiZXR3ZWVuIDAtMS4gMCwgd2hlblxuXHRcdCAqICB0aGUgbG9vcCBpcyBzdG9wcGVkIG9yIGRvbmUgaXRlcmF0aW5nLiBcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9ncmVzc1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAncHJvZ3Jlc3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5wcm9ncmVzcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbGJhY2tzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBsb29wLmludGVydmFsID0gXCI4blwiOyAvL2xvb3AgZXZlcnkgOG5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGludGVydmFsXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ2ludGVydmFsJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQubG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmxvb3BFbmQgPSBpbnRlcnZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbG9vcC4gVGhlIG5vcm1hbCBwbGF5YmFjayByYXRlIGlzIDEgKG5vIGNoYW5nZSkuIFxuXHRcdCAqICBBIGBwbGF5YmFja1JhdGVgIG9mIDIgd291bGQgYmUgdHdpY2UgYXMgZmFzdC4gXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQucGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJhbmRvbSB2YXJpYXRpb24gKy8tMC4wMXMgdG8gdGhlIHNjaGVkdWxlZCB0aW1lLiBcblx0XHQgKiAgT3IgZ2l2ZSBpdCBhIHRpbWUgdmFsdWUgd2hpY2ggaXQgd2lsbCByYW5kb21pemUgYnkuXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEBuYW1lIGh1bWFuaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ2h1bWFuaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQuaHVtYW5pemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YXJpYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQuaHVtYW5pemUgPSB2YXJpYXRpb247XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2JhYmx5IG9mIHRoZSBjYWxsYmFjayBiZWluZyBpbnZva2VkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2JhYmlsaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3Byb2JhYmlsaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQucHJvYmFiaWxpdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9iKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50LnByb2JhYmlsaXR5ID0gcHJvYjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBNdXRpbmcgdGhlIExvb3AgbWVhbnMgdGhhdCBubyBjYWxsYmFja3MgYXJlIGludm9rZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBtdXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgdGhlIGxvb3AuIFRoZSBkZWZhdWx0XG5cdFx0ICogIHZhbHVlIGlzIEluZmluaXR5IChsb29wIGZvcmV2ZXIpLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGl0ZXJhdGlvbnNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnaXRlcmF0aW9ucycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2V2ZW50Lmxvb3AgPT09IHRydWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5sb29wO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpdGVycykge1xuXHQgICAgICAgICAgICBpZiAoaXRlcnMgPT09IEluZmluaXR5KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudC5sb29wID0gdHJ1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmxvb3AgPSBpdGVycztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkxvb3B9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Mb29wO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYXJ0IGlzIGEgY29sbGVjdGlvbiBUb25lLkV2ZW50cyB3aGljaCBjYW4gYmVcblx0XHQgKiAgICAgICAgIHN0YXJ0ZWQvc3RvcHBlZCBhbmQgbG9vcGVkIGFzIGEgc2luZ2xlIHVuaXQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRXZlbnR9XG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugb24gZWFjaCBldmVudFxuXHRcdCAqICBAcGFyYW0ge0FycmF5fSBldmVudHMgdGhlIGFycmF5IG9mIGV2ZW50c1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwYXJ0ID0gbmV3IFRvbmUuUGFydChmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiBcdC8vdGhlIG5vdGVzIGdpdmVuIGFzIHRoZSBzZWNvbmQgZWxlbWVudCBpbiB0aGUgYXJyYXlcblx0XHQgKiBcdC8vd2lsbCBiZSBwYXNzZWQgaW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudFxuXHRcdCAqIFx0c3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2Uobm90ZSwgXCI4blwiLCB0aW1lKTtcblx0XHQgKiB9LCBbWzAsIFwiQzJcIl0sIFtcIjA6MlwiLCBcIkMzXCJdLCBbXCIwOjM6MlwiLCBcIkcyXCJdXSk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy91c2UgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhcyBsb25nIGFzIHRoZSBvYmplY3QgaGFzIGEgXCJ0aW1lXCIgYXR0cmlidXRlXG5cdFx0ICogdmFyIHBhcnQgPSBuZXcgVG9uZS5QYXJ0KGZ1bmN0aW9uKHRpbWUsIHZhbHVlKXtcblx0XHQgKiBcdC8vdGhlIHZhbHVlIGlzIGFuIG9iamVjdCB3aGljaCBjb250YWlucyBib3RoIHRoZSBub3RlIGFuZCB0aGUgdmVsb2NpdHlcblx0XHQgKiBcdHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKHZhbHVlLm5vdGUsIFwiOG5cIiwgdGltZSwgdmFsdWUudmVsb2NpdHkpO1xuXHRcdCAqIH0sIFt7XCJ0aW1lXCIgOiAwLCBcIm5vdGVcIiA6IFwiQzNcIiwgXCJ2ZWxvY2l0eVwiOiAwLjl9LFxuXHRcdCAqIFx0ICAge1widGltZVwiIDogXCIwOjJcIiwgXCJub3RlXCIgOiBcIkM0XCIsIFwidmVsb2NpdHlcIjogMC41fVxuXHRcdCAqIF0pLnN0YXJ0KDApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2V2ZW50cydcblx0ICAgICAgICBdLCBUb25lLlBhcnQpO1xuXHQgICAgICAgIFRvbmUuRXZlbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBhcnJheSBvZiBPYmplY3RzLlxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IFtdO1xuXHQgICAgICAgIC8vYWRkIHRoZSBldmVudHNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMuZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuZXZlbnRzW2ldKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5hZGQob3B0aW9ucy5ldmVudHNbaV1bMF0sIG9wdGlvbnMuZXZlbnRzW2ldWzFdKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYWRkKG9wdGlvbnMuZXZlbnRzW2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhcnQsIFRvbmUuRXZlbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAnMW0nLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdwcm9iYWJpbGl0eSc6IDEsXG5cdCAgICAgICAgJ2h1bWFuaXplJzogZmFsc2UsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZSxcblx0ICAgICAgICAnZXZlbnRzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIHBhcnQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9ICB0aW1lICAgIFdoZW4gdG8gc3RhcnQgdGhlIHBhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgb2Zmc2V0ICBUaGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZWdpbiBwbGF5aW5nIGF0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpY2tzKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCB0aGlzLl9sb29wU3RhcnQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1RpY2tzKG9mZnNldCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAnc3RhdGUnOiBUb25lLlN0YXRlLlN0YXJ0ZWQsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IHRpY2tzLFxuXHQgICAgICAgICAgICAgICAgJ29mZnNldCc6IG9mZnNldFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0Tm90ZShldmVudCwgdGlja3MsIG9mZnNldCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGV2ZW50IGluIHRoZSBnaXZlbiBldmVudCBhdCB0aGUgY29ycmVjdCB0aW1lIGdpdmVuXG5cdFx0ICogIHRoZSB0aWNrcyBhbmQgb2Zmc2V0IGFuZCBsb29waW5nLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fSAgZXZlbnRcblx0XHQgKiAgQHBhcmFtICB7VGlja3N9ICB0aWNrc1xuXHRcdCAqICBAcGFyYW0gIHtUaWNrc30gIG9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fc3RhcnROb3RlID0gZnVuY3Rpb24gKGV2ZW50LCB0aWNrcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgdGlja3MgLT0gb2Zmc2V0O1xuXHQgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgIGlmIChldmVudC5zdGFydE9mZnNldCA+PSB0aGlzLl9sb29wU3RhcnQgJiYgZXZlbnQuc3RhcnRPZmZzZXQgPCB0aGlzLl9sb29wRW5kKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL3N0YXJ0IGl0IG9uIHRoZSBuZXh0IGxvb3Bcblx0ICAgICAgICAgICAgICAgICAgICB0aWNrcyArPSB0aGlzLl9nZXRMb29wRHVyYXRpb24oKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0KFRvbmUuVGlja3ModGlja3MpKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGFydE9mZnNldCA8IHRoaXMuX2xvb3BTdGFydCAmJiBldmVudC5zdGFydE9mZnNldCA+PSBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3AgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0KFRvbmUuVGlja3ModGlja3MpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPj0gb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LnN0YXJ0KFRvbmUuVGlja3ModGlja3MpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdGFydCBmcm9tIHRoZSBzY2hlZHVsZWQgc3RhcnQgdGltZVxuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEBuYW1lIHN0YXJ0T2Zmc2V0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ3N0YXJ0T2Zmc2V0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5zdGFydE9mZnNldCArPSB0aGlzLl9zdGFydE9mZnNldDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgcGFydCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIHRpbWUgIFdoZW4gdG8gc3RvcCB0aGUgcGFydC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aWNrcyk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aWNrcyk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0L1NldCBhbiBFdmVudCdzIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBJZiBhIHZhbHVlIGlzIHBhc3NlZCBpbiBhbmQgbm8gZXZlbnQgZXhpc3RzIGF0XG5cdFx0ICogIHRoZSBnaXZlbiB0aW1lLCBvbmUgd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhhdCB2YWx1ZS5cblx0XHQgKiAgSWYgdHdvIGV2ZW50cyBhcmUgYXQgdGhlIHNhbWUgdGltZSwgdGhlIGZpcnN0IG9uZSB3aWxsXG5cdFx0ICogIGJlIHJldHVybmVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHBhcnQuYXQoXCIxbVwiKTsgLy9yZXR1cm5zIHRoZSBwYXJ0IGF0IHRoZSBmaXJzdCBtZWFzdXJlXG5cdFx0ICpcblx0XHQgKiBwYXJ0LmF0KFwiMm1cIiwgXCJDMlwiKTsgLy9zZXQgdGhlIHZhbHVlIGF0IFwiMm1cIiB0byBDMi5cblx0XHQgKiAvL2lmIGFuIGV2ZW50IGRpZG4ndCBleGlzdCBhdCB0aGF0IHRpbWUsIGl0IHdpbGwgYmUgY3JlYXRlZC5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudCB0byBnZXQgb3Igc2V0LlxuXHRcdCAqICBAcGFyYW0geyo9fSB2YWx1ZSBJZiBhIHZhbHVlIGlzIHBhc3NlZCBpbiwgdGhlIHZhbHVlIG9mIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICBldmVudCBhdCB0aGUgZ2l2ZW4gdGltZSB3aWxsIGJlIHNldCB0byBpdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5FdmVudH0gdGhlIGV2ZW50IGF0IHRoZSB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICB2YXIgdGlja1RpbWUgPSBUb25lLlRpY2tzKDEpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50c1tpXTtcblx0ICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRpbWUudG9UaWNrcygpIC0gZXZlbnQuc3RhcnRPZmZzZXQpIDwgdGlja1RpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh2YWx1ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaWYgdGhlcmUgd2FzIG5vIGV2ZW50IGF0IHRoYXQgdGltZSwgY3JlYXRlIG9uZVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh2YWx1ZSkpIHtcblx0ICAgICAgICAgICAgdGhpcy5hZGQodGltZSwgdmFsdWUpO1xuXHQgICAgICAgICAgICAvL3JldHVybiB0aGUgbmV3IGV2ZW50XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudHNbdGhpcy5fZXZlbnRzLmxlbmd0aCAtIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgYW4gZXZlbnQgdG8gdGhlIHBhcnQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0aGUgbm90ZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYW4gb2JqZWN0IGlzIHBhc3NlZCBpbiwgaXQgc2hvdWxkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBhICd0aW1lJyBhdHRyaWJ1dGUgYW5kIHRoZSByZXN0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIG9iamVjdCB3aWxsIGJlIHVzZWQgYXMgdGhlICd2YWx1ZScuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuRXZlbnR8Kn0gIHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwYXJ0LmFkZChcIjFtXCIsIFwiQyMrMTFcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIC8vZXh0cmFjdCB0aGUgcGFyYW1ldGVyc1xuXHQgICAgICAgIGlmICh0aW1lLmhhc093blByb3BlcnR5KCd0aW1lJykpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aW1lO1xuXHQgICAgICAgICAgICB0aW1lID0gdmFsdWUudGltZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICB2YXIgZXZlbnQ7XG5cdCAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVG9uZS5FdmVudCkge1xuXHQgICAgICAgICAgICBldmVudCA9IHZhbHVlO1xuXHQgICAgICAgICAgICBldmVudC5jYWxsYmFjayA9IHRoaXMuX3RpY2suYmluZCh0aGlzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBldmVudCA9IG5ldyBUb25lLkV2ZW50KHtcblx0ICAgICAgICAgICAgICAgICdjYWxsYmFjayc6IHRoaXMuX3RpY2suYmluZCh0aGlzKSxcblx0ICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3RoZSBzdGFydCBvZmZzZXRcblx0ICAgICAgICBldmVudC5zdGFydE9mZnNldCA9IHRpbWU7XG5cdCAgICAgICAgLy9pbml0aWFsaXplIHRoZSB2YWx1ZXNcblx0ICAgICAgICBldmVudC5zZXQoe1xuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IHRoaXMubG9vcEVuZCxcblx0ICAgICAgICAgICAgJ2xvb3BTdGFydCc6IHRoaXMubG9vcFN0YXJ0LFxuXHQgICAgICAgICAgICAnbG9vcCc6IHRoaXMubG9vcCxcblx0ICAgICAgICAgICAgJ2h1bWFuaXplJzogdGhpcy5odW1hbml6ZSxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IHRoaXMucGxheWJhY2tSYXRlLFxuXHQgICAgICAgICAgICAncHJvYmFiaWxpdHknOiB0aGlzLnByb2JhYmlsaXR5XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLnB1c2goZXZlbnQpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIG5vdGUgaWYgaXQgc2hvdWxkIGJlIHBsYXllZCByaWdodCBub3dcblx0ICAgICAgICB0aGlzLl9yZXN0YXJ0RXZlbnQoZXZlbnQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXN0YXJ0IHRoZSBnaXZlbiBldmVudFxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fSAgZXZlbnRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3Jlc3RhcnRFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2goZnVuY3Rpb24gKHN0YXRlRXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKHN0YXRlRXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnROb3RlKGV2ZW50LCBzdGF0ZUV2ZW50LnRpbWUsIHN0YXRlRXZlbnQub2Zmc2V0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vc3RvcCB0aGUgbm90ZVxuXHQgICAgICAgICAgICAgICAgZXZlbnQuc3RvcChUb25lLlRpY2tzKHN0YXRlRXZlbnQudGltZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGFuIGV2ZW50IGZyb20gdGhlIHBhcnQuIFdpbGwgcmVjdXJzaXZlbHkgaXRlcmF0ZVxuXHRcdCAqICBpbnRvIG5lc3RlZCBwYXJ0cyB0byBmaW5kIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudFxuXHRcdCAqICBAcGFyYW0geyp9IHZhbHVlIE9wdGlvbmFsbHkgc2VsZWN0IG9ubHkgYSBzcGVjaWZpYyBldmVudCB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGltZSwgdmFsdWUpIHtcblx0ICAgICAgICAvL2V4dHJhY3QgdGhlIHBhcmFtZXRlcnNcblx0ICAgICAgICBpZiAodGltZS5oYXNPd25Qcm9wZXJ0eSgndGltZScpKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGltZTtcblx0ICAgICAgICAgICAgdGltZSA9IHZhbHVlLnRpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2V2ZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHNbaV07XG5cdCAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIFRvbmUuUGFydCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQucmVtb3ZlKHRpbWUsIHZhbHVlKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGFydE9mZnNldCA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih2YWx1ZSkgfHwgVG9uZS5pc0RlZmluZWQodmFsdWUpICYmIGV2ZW50LnZhbHVlID09PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5zcGxpY2UoaSwgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYWxsIG9mIHRoZSBub3RlcyBmcm9tIHRoZSBncm91cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBbXTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIHNjaGVkdWxlZCBzdGF0ZSBjaGFuZ2UgZXZlbnRzOiBpLmUuIFwic3RhcnRcIiBhbmQgXCJzdG9wXCIuXG5cdFx0ICogIEBwYXJhbSB7VGltZWxpbmVQb3NpdGlvbn0gYWZ0ZXIgVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggdG8gY2FuY2VsIHRoZSBzY2hlZHVsZWQgZXZlbnRzLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5jYW5jZWwoYWZ0ZXIpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aGlzLnRvVGlja3MoYWZ0ZXIpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgZXZlbnRzXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBjdHggVGhlIGNvbnRleHRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX2ZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGN0eCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMpIHtcblx0ICAgICAgICAgICAgY3R4ID0gVG9uZS5kZWZhdWx0QXJnKGN0eCwgdGhpcyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9ldmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIHZhciBlID0gdGhpcy5fZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBUb25lLlBhcnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBlLl9mb3JFYWNoKGNhbGxiYWNrLCBjdHgpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGN0eCwgZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgYXR0cmlidXRlIG9mIGFsbCBvZiB0aGUgZXZlbnRzXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGF0dHIgIHRoZSBhdHRyaWJ1dGUgdG8gc2V0XG5cdFx0ICogIEBwYXJhbSAgeyp9ICB2YWx1ZSAgICAgIFRoZSB2YWx1ZSB0byBzZXQgaXQgdG9cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3NldEFsbCA9IGZ1bmN0aW9uIChhdHRyLCB2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50W2F0dHJdID0gdmFsdWU7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHRpY2sgbWV0aG9kXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIG9mIHRoZSBldmVudCBpbiBzZWNvbmRzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLm11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB2YWx1ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZXRlcm1pbmUgaWYgdGhlIGV2ZW50IHNob3VsZCBiZSBjdXJyZW50bHkgbG9vcGluZ1xuXHRcdCAqICBnaXZlbiB0aGUgbG9vcCBib3VuZHJpZXMgb2YgdGhpcyBQYXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fSAgZXZlbnQgIFRoZSBldmVudCB0byB0ZXN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl90ZXN0TG9vcEJvdW5kcmllcyA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmIChldmVudC5zdGFydE9mZnNldCA8IHRoaXMuX2xvb3BTdGFydCB8fCBldmVudC5zdGFydE9mZnNldCA+PSB0aGlzLl9sb29wRW5kKSB7XG5cdCAgICAgICAgICAgIGV2ZW50LmNhbmNlbCgwKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgLy9yZXNjaGVkdWxlIGl0IGlmIGl0J3Mgc3RvcHBlZFxuXHQgICAgICAgICAgICB0aGlzLl9yZXN0YXJ0RXZlbnQoZXZlbnQpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2JhYmlsaXR5IG9mIHRoZSBub3RlcyBiZWluZyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvYmFiaWxpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAncHJvYmFiaWxpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9iYWJpbGl0eTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2IpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcHJvYmFiaWxpdHkgPSBwcm9iO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBbGwoJ3Byb2JhYmlsaXR5JywgcHJvYik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgc2V0IHRvIHRydWUsIHdpbGwgYXBwbHkgc21hbGwgcmFuZG9tIHZhcmlhdGlvblxuXHRcdCAqICB0byB0aGUgY2FsbGJhY2sgdGltZS4gSWYgdGhlIHZhbHVlIGlzIGdpdmVuIGFzIGEgdGltZSwgaXQgd2lsbCByYW5kb21pemVcblx0XHQgKiAgYnkgdGhhdCBhbW91bnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogZXZlbnQuaHVtYW5pemUgPSB0cnVlO1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdCAqICBAbmFtZSBodW1hbml6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdodW1hbml6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2h1bWFuaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFyaWF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2h1bWFuaXplID0gdmFyaWF0aW9uO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBbGwoJ2h1bWFuaXplJywgdmFyaWF0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgcGFydCBzaG91bGQgbG9vcCBvciBub3Rcblx0XHQgKiAgYmV0d2VlbiBUb25lLlBhcnQubG9vcFN0YXJ0IGFuZFxuXHRcdCAqICBUb25lLlBhcnQubG9vcEVuZC4gQW4gaW50ZWdlclxuXHRcdCAqICB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mXG5cdFx0ICogIGxvb3BzIHRoZSBQYXJ0IGRvZXMgYWZ0ZXIgaXQgc3RhcnRzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgbG9vcFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9vcCB0aGUgcGFydCA4IHRpbWVzXG5cdFx0ICogcGFydC5sb29wID0gODtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3A7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuX2xvb3BTdGFydCA9IHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Ll9sb29wRW5kID0gdGhpcy5fbG9vcEVuZDtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdGVzdExvb3BCb3VuZHJpZXMoZXZlbnQpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbG9vcEVuZCBwb2ludCBkZXRlcm1pbmVzIHdoZW4gaXQgd2lsbFxuXHRcdCAqICBsb29wIGlmIFRvbmUuUGFydC5sb29wIGlzIHRydWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BFbmQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKGxvb3BFbmQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXN0TG9vcEJvdW5kcmllcyhldmVudCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBsb29wU3RhcnQgcG9pbnQgZGV0ZXJtaW5lcyB3aGVuIGl0IHdpbGxcblx0XHQgKiAgbG9vcCBpZiBUb25lLlBhcnQubG9vcCBpcyB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcFN0YXJ0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3MobG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQubG9vcFN0YXJ0ID0gdGhpcy5sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGVzdExvb3BCb3VuZHJpZXMoZXZlbnQpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0VGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIHBhcnRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBbGwoJ3BsYXliYWNrUmF0ZScsIHJhdGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRUaGUgbnVtYmVyIG9mIHNjaGVkdWxlZCBub3RlcyBpbiB0aGUgcGFydC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBsZW5ndGhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50cy5sZW5ndGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnJlbW92ZUFsbCgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYXJ0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGF0dGVybiBhcnBlZ2dpYXRlcyBiZXR3ZWVuIHRoZSBnaXZlbiBub3Rlc1xuXHRcdCAqICAgICAgICAgaW4gYSBudW1iZXIgb2YgcGF0dGVybnMuIFNlZSBUb25lLkN0cmxQYXR0ZXJuIGZvclxuXHRcdCAqICAgICAgICAgYSBmdWxsIGxpc3Qgb2YgcGF0dGVybnMuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBhdHRlcm4gPSBuZXcgVG9uZS5QYXR0ZXJuKGZ1bmN0aW9uKHRpbWUsIG5vdGUpe1xuXHRcdCAqICAgLy90aGUgb3JkZXIgb2YgdGhlIG5vdGVzIHBhc3NlZCBpbiBkZXBlbmRzIG9uIHRoZSBwYXR0ZXJuXG5cdFx0ICogfSwgW1wiQzJcIiwgXCJENFwiLCBcIkU1XCIsIFwiQTZcIl0sIFwidXBEb3duXCIpO1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Mb29wfVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcnBlZ2dpYXRlIG92ZXIuXG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAndmFsdWVzJyxcblx0ICAgICAgICAgICAgJ3BhdHRlcm4nXG5cdCAgICAgICAgXSwgVG9uZS5QYXR0ZXJuKTtcblx0ICAgICAgICBUb25lLkxvb3AuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGF0dGVybiBtYW5hZ2VyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3RybFBhdHRlcm59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4gPSBuZXcgVG9uZS5DdHJsUGF0dGVybih7XG5cdCAgICAgICAgICAgICd2YWx1ZXMnOiBvcHRpb25zLnZhbHVlcyxcblx0ICAgICAgICAgICAgJ3R5cGUnOiBvcHRpb25zLnBhdHRlcm4sXG5cdCAgICAgICAgICAgICdpbmRleCc6IG9wdGlvbnMuaW5kZXhcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhdHRlcm4sIFRvbmUuTG9vcCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGF0dGVybi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGF0dGVybic6IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCxcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ3ZhbHVlcyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBub3RlcyBzaG91bGQgYmUgY2FsbGVkXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRoZSBldmVudCBvY2N1cnNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGF0dGVybi5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgdGhpcy5fcGF0dGVybi52YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fcGF0dGVybi5uZXh0KCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IGluZGV4IGluIHRoZSB2YWx1ZXMgYXJyYXkuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgaW5kZXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAnaW5kZXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuLmluZGV4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXR0ZXJuLmluZGV4ID0gaTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYXJyYXkgb2YgZXZlbnRzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICogIEBuYW1lIHZhbHVlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICd2YWx1ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuLnZhbHVlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGF0dGVybi52YWx1ZXMgPSB2YWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwYXR0ZXJuLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXR0ZXJuLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi52YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGF0dGVybiB0eXBlLiBTZWUgVG9uZS5DdHJsUGF0dGVybiBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBwYXR0ZXJucy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgcGF0dGVyblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICdwYXR0ZXJuJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGF0dGVybikge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXR0ZXJuLnR5cGUgPSBwYXR0ZXJuO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhdHRlcm59ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcGF0dGVybi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcGF0dGVybiA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGF0dGVybjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgc2VxdWVuY2UgaXMgYW4gYWx0ZXJuYXRlIG5vdGF0aW9uIG9mIGEgcGFydC4gSW5zdGVhZFxuXHRcdCAqICAgICAgICAgb2YgcGFzc2luZyBpbiBhbiBhcnJheSBvZiBbdGltZSwgZXZlbnRdIHBhaXJzLCBwYXNzXG5cdFx0ICogICAgICAgICBpbiBhbiBhcnJheSBvZiBldmVudHMgd2hpY2ggd2lsbCBiZSBzcGFjZWQgYXQgdGhlXG5cdFx0ICogICAgICAgICBnaXZlbiBzdWJkaXZpc2lvbi4gU3ViLWFycmF5cyB3aWxsIHN1YmRpdmlkZSB0aGF0IGJlYXRcblx0XHQgKiAgICAgICAgIGJ5IHRoZSBudW1iZXIgb2YgaXRlbXMgYXJlIGluIHRoZSBhcnJheS5cblx0XHQgKiAgICAgICAgIFNlcXVlbmNlIG5vdGF0aW9uIGluc3BpcmF0aW9uIGZyb20gW1RpZGFsXShodHRwOi8veWF4dS5vcmcvdGlkYWwvKVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gICAgZXZlbnRzICBUaGUgc2VxdWVuY2Vcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gc3ViZGl2aXNpb24gIFRoZSBzdWJkaXZpc2lvbiBiZXR3ZWVuIHdoaWNoIGV2ZW50cyBhcmUgcGxhY2VkLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5QYXJ0fVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzZXEgPSBuZXcgVG9uZS5TZXF1ZW5jZShmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKG5vdGUpO1xuXHRcdCAqIC8vc3RyYWlnaHQgcXVhdGVyIG5vdGVzXG5cdFx0ICogfSwgW1wiQzRcIiwgXCJFNFwiLCBcIkc0XCIsIFwiQTRcIl0sIFwiNG5cIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNlcSA9IG5ldyBUb25lLlNlcXVlbmNlKGZ1bmN0aW9uKHRpbWUsIG5vdGUpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2cobm90ZSk7XG5cdFx0ICogLy9zdWJkaXZpc2lvbnMgYXJlIGdpdmVuIGFzIHN1YmFycmF5c1xuXHRcdCAqIH0sIFtcIkM0XCIsIFtcIkU0XCIsIFwiRDRcIiwgXCJFNFwiXSwgXCJHNFwiLCBbXCJBNFwiLCBcIkc0XCJdXSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2V2ZW50cycsXG5cdCAgICAgICAgICAgICdzdWJkaXZpc2lvbidcblx0ICAgICAgICBdLCBUb25lLlNlcXVlbmNlKTtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgZXZlbnRzXG5cdCAgICAgICAgdmFyIGV2ZW50cyA9IG9wdGlvbnMuZXZlbnRzO1xuXHQgICAgICAgIGRlbGV0ZSBvcHRpb25zLmV2ZW50cztcblx0ICAgICAgICBUb25lLlBhcnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3ViZGl2aXNvbiBvZiBlYWNoIG5vdGVcblx0XHRcdCAqICBAdHlwZSAge1RpY2tzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWJkaXZpc2lvbiA9IHRoaXMudG9UaWNrcyhvcHRpb25zLnN1YmRpdmlzaW9uKTtcblx0ICAgICAgICAvL2lmIG5vIHRpbWUgd2FzIHBhc3NlZCBpbiwgdGhlIGxvb3AgZW5kIGlzIHRoZSBlbmQgb2YgdGhlIGN5Y2xlXG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihvcHRpb25zLmxvb3BFbmQpICYmIFRvbmUuaXNEZWZpbmVkKGV2ZW50cykpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IGV2ZW50cy5sZW5ndGggKiB0aGlzLl9zdWJkaXZpc2lvbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9kZWZhdWx0cyB0byBsb29waW5nXG5cdCAgICAgICAgdGhpcy5fbG9vcCA9IHRydWU7XG5cdCAgICAgICAgLy9hZGQgYWxsIG9mIHRoZSBldmVudHNcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoZXZlbnRzKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5hZGQoaSwgZXZlbnRzW2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNlcXVlbmNlLCBUb25lLlBhcnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLmRlZmF1bHRzID0geyAnc3ViZGl2aXNpb24nOiAnNG4nIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN1YmRpdmlzaW9uIG9mIHRoZSBzZXF1ZW5jZS4gVGhpcyBjYW4gb25seSBiZVxuXHRcdCAqICBzZXQgaW4gdGhlIGNvbnN0cnVjdG9yLiBUaGUgc3ViZGl2aXNpb24gaXMgdGhlXG5cdFx0ICogIGludGVydmFsIGJldHdlZW4gc3VjY2Vzc2l2ZSBzdGVwcy5cblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNlcXVlbmNlI1xuXHRcdCAqICBAbmFtZSBzdWJkaXZpc2lvblxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNlcXVlbmNlLnByb3RvdHlwZSwgJ3N1YmRpdmlzaW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9zdWJkaXZpc2lvbikudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0L1NldCBhbiBpbmRleCBvZiB0aGUgc2VxdWVuY2UuIElmIHRoZSBpbmRleCBjb250YWlucyBhIHN1YmFycmF5LFxuXHRcdCAqICBhIFRvbmUuU2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoYXQgc3ViLWFycmF5IHdpbGwgYmUgcmV0dXJuZWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNlcXVlbmNlID0gbmV3IFRvbmUuU2VxdWVuY2UocGxheU5vdGUsIFtcIkU0XCIsIFwiQzRcIiwgXCJGIzRcIiwgW1wiQTRcIiwgXCJCYjNcIl1dKVxuXHRcdCAqIHNlcXVlbmNlLmF0KDApLy8gPT4gcmV0dXJucyBcIkU0XCJcblx0XHQgKiAvL3NldCBhIHZhbHVlXG5cdFx0ICogc2VxdWVuY2UuYXQoMCwgXCJHM1wiKTtcblx0XHQgKiAvL2dldCBhIG5lc3RlZCBzZXF1ZW5jZVxuXHRcdCAqIHNlcXVlbmNlLmF0KDMpLmF0KDEpLy8gPT4gcmV0dXJucyBcIkJiM1wiXG5cdFx0ICogQHBhcmFtIHtQb3NpdGl2ZX0gaW5kZXggVGhlIGluZGV4IHRvIGdldCBvciBzZXRcblx0XHQgKiBAcGFyYW0geyp9IHZhbHVlIE9wdGlvbmFsbHkgcGFzcyBpbiB0aGUgdmFsdWUgdG8gc2V0IGF0IHRoZSBnaXZlbiBpbmRleC5cblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuXHQgICAgICAgIC8vaWYgdGhlIHZhbHVlIGlzIGFuIGFycmF5LFxuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBjdXJyZW50IGV2ZW50IGF0IHRoYXQgaW5kZXhcblx0ICAgICAgICAgICAgdGhpcy5yZW1vdmUoaW5kZXgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NhbGwgdGhlIHBhcmVudCdzIG1ldGhvZFxuXHQgICAgICAgIHJldHVybiBUb25lLlBhcnQucHJvdG90eXBlLmF0LmNhbGwodGhpcywgdGhpcy5faW5kZXhUaW1lKGluZGV4KSwgdmFsdWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYW4gZXZlbnQgYXQgYW4gaW5kZXgsIGlmIHRoZXJlJ3MgYWxyZWFkeSBzb21ldGhpbmdcblx0XHQgKiAgYXQgdGhhdCBpbmRleCwgb3ZlcndyaXRlIGl0LiBJZiBgdmFsdWVgIGlzIGFuIGFycmF5LFxuXHRcdCAqICBpdCB3aWxsIGJlIHBhcnNlZCBhcyBhIHN1YnNlcXVlbmNlLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gaW5kZXggVGhlIGluZGV4IHRvIGFkZCB0aGUgZXZlbnQgdG9cblx0XHQgKiAgQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYWRkIGF0IHRoYXQgaW5kZXhcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2VxdWVuY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcblx0ICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIC8vbWFrZSBhIHN1YnNlcXVlbmNlIGFuZCBhZGQgdGhhdCB0byB0aGUgc2VxdWVuY2Vcblx0ICAgICAgICAgICAgdmFyIHN1YlN1YmRpdmlzaW9uID0gTWF0aC5yb3VuZCh0aGlzLl9zdWJkaXZpc2lvbiAvIHZhbHVlLmxlbmd0aCk7XG5cdCAgICAgICAgICAgIHZhbHVlID0gbmV3IFRvbmUuU2VxdWVuY2UodGhpcy5fdGljay5iaW5kKHRoaXMpLCB2YWx1ZSwgVG9uZS5UaWNrcyhzdWJTdWJkaXZpc2lvbikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLlBhcnQucHJvdG90eXBlLmFkZC5jYWxsKHRoaXMsIHRoaXMuX2luZGV4VGltZShpbmRleCksIHZhbHVlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGEgdmFsdWUgZnJvbSB0aGUgc2VxdWVuY2UgYnkgaW5kZXhcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZXZlbnQgdG8gcmVtb3ZlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNlcXVlbmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5yZW1vdmUuY2FsbCh0aGlzLCB0aGlzLl9pbmRleFRpbWUoaW5kZXgpLCB2YWx1ZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgdGltZSBvZiB0aGUgaW5kZXggZ2l2ZW4gdGhlIFNlcXVlbmNlJ3Mgc3ViZGl2aXNpb25cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgaW5kZXhcblx0XHQgKiAgQHJldHVybiAge1RpbWV9ICBUaGUgdGltZSBvZiB0aGF0IGluZGV4XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5faW5kZXhUaW1lID0gZnVuY3Rpb24gKGluZGV4KSB7XG5cdCAgICAgICAgaWYgKGluZGV4IGluc3RhbmNlb2YgVG9uZS5UcmFuc3BvcnRUaW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBpbmRleDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyhpbmRleCAqIHRoaXMuX3N1YmRpdmlzaW9uICsgdGhpcy5zdGFydE9mZnNldCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5TZXF1ZW5jZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlBhcnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TZXF1ZW5jZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUHVsc2VPc2NpbGxhdG9yIGlzIGEgcHVsc2Ugb3NjaWxsYXRvciB3aXRoIGNvbnRyb2wgb3ZlciBwdWxzZSB3aWR0aCxcblx0XHQgKiAgICAgICAgIGFsc28ga25vd24gYXMgdGhlIGR1dHkgY3ljbGUuIEF0IDUwJSBkdXR5IGN5Y2xlICh3aWR0aCA9IDAuNSkgdGhlIHdhdmUgaXNcblx0XHQgKiAgICAgICAgIGEgc3F1YXJlIGFuZCBvbmx5IG9kZC1udW1iZXJlZCBoYXJtb25pY3MgYXJlIHByZXNlbnQuIEF0IGFsbCBvdGhlciB3aWR0aHNcblx0XHQgKiAgICAgICAgIGV2ZW4tbnVtYmVyZWQgaGFybW9uaWNzIGFyZSBwcmVzZW50LiBSZWFkIG1vcmVcblx0XHQgKiAgICAgICAgIFtoZXJlXShodHRwczovL3dpZ2dsZXdhdmUud29yZHByZXNzLmNvbS8yMDE0LzA4LzE2L3B1bHNlLXdhdmVmb3Jtcy1hbmQtaGFybW9uaWNzLykuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtmcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3dpZHRoXSBUaGUgd2lkdGggb2YgdGhlIHB1bHNlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHB1bHNlID0gbmV3IFRvbmUuUHVsc2VPc2NpbGxhdG9yKFwiRTVcIiwgMC40KS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnd2lkdGgnXG5cdCAgICAgICAgXSwgVG9uZS5Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3aWR0aCBvZiB0aGUgcHVsc2UuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy53aWR0aCwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBnYXRlIHRoZSB3aWR0aCBhbW91bnRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHNhd3Rvb3RoIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zYXd0b290aCA9IG5ldyBUb25lLk9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICBmcmVxdWVuY3k6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICBkZXR1bmU6IG9wdGlvbnMuZGV0dW5lLFxuXHQgICAgICAgICAgICB0eXBlOiAnc2F3dG9vdGgnLFxuXHQgICAgICAgICAgICBwaGFzZTogb3B0aW9ucy5waGFzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fc2F3dG9vdGguZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHMuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fc2F3dG9vdGguZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRocmVzaG9sZCB0aGUgc2lnbmFsIHRvIHR1cm4gaXQgaW50byBhIHNxdWFyZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAodmFsIDwgMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguY2hhaW4odGhpcy5fdGhyZXNoLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5jaGFpbih0aGlzLl93aWR0aEdhdGUsIHRoaXMuX3RocmVzaCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnd2lkdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlB1bHNlT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHBhcmFtZXRlcnMuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ3dpZHRoJzogMC4yXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIC8vdGhlIHdpZHRoIGlzIHN0aWxsIGNvbm5lY3RlZCB0byB0aGUgb3V0cHV0LlxuXHQgICAgICAgIC8vdGhhdCBuZWVkcyB0byBiZSBzdG9wcGVkIGFsc29cblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUHVsc2VPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zYXd0b290aC5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvci4gQWx3YXlzIHJldHVybnMgXCJwdWxzZVwiLlxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlB1bHNlT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gJ3B1bHNlJztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgd2F2ZWZvcm0uIENhbm5vdCBzZXQgcGFydGlhbHMgZm9yIHRoaXMgd2F2ZWZvcm0gdHlwZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlB1bHNlT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gW107XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAgbWV0aG9kLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlB1bHNlT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3dpZHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy53aWR0aCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGhyZXNoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlB1bHNlT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUFdNT3NjaWxsYXRvciBtb2R1bGF0ZXMgdGhlIHdpZHRoIG9mIGEgVG9uZS5QdWxzZU9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgIGF0IHRoZSBtb2R1bGF0aW9uRnJlcXVlbmN5LiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIGNvbnRpbnVvdXNseVxuXHRcdCAqICAgICAgICAgY2hhbmdpbmcgdGhlIHRpbWJyZSBvZiB0aGUgb3NjaWxsYXRvciBieSBhbHRlcmluZyB0aGUgaGFybW9uaWNzXG5cdFx0ICogICAgICAgICBnZW5lcmF0ZWQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gbW9kdWxhdGlvbkZyZXF1ZW5jeSBUaGUgbW9kdWxhdGlvbiBmcmVxdWVuY3kgb2YgdGhlIHdpZHRoIG9mIHRoZSBwdWxzZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIHB3bSA9IG5ldyBUb25lLlBXTU9zY2lsbGF0b3IoXCJBYjNcIiwgMC4zKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25GcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5QV01Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwdWxzZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUHVsc2VPc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wdWxzZSA9IG5ldyBUb25lLlB1bHNlT3NjaWxsYXRvcihvcHRpb25zLm1vZHVsYXRpb25GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vY2hhbmdlIHRoZSBwdWxzZSBvc2NpbGxhdG9yIHR5cGVcblx0ICAgICAgICB0aGlzLl9wdWxzZS5fc2F3dG9vdGgudHlwZSA9ICdzaW5lJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbW9kdWxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcih7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2RldHVuZSc6IG9wdGlvbnMuZGV0dW5lLFxuXHQgICAgICAgICAgICAncGhhc2UnOiBvcHRpb25zLnBoYXNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2NhbGUgdGhlIG9zY2lsbGF0b3Igc28gaXQgZG9lc24ndCBnbyBzaWxlbnRcblx0XHRcdCAqICBhdCB0aGUgZXh0cmVtZSB2YWx1ZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbmV3IFRvbmUuTXVsdGlwbHkoMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fbW9kdWxhdG9yLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGlvbiByYXRlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRnJlcXVlbmN5ID0gdGhpcy5fcHVsc2UuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY2hhaW4odGhpcy5fc2NhbGUsIHRoaXMuX3B1bHNlLndpZHRoKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QV01Pc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ21vZHVsYXRpb25GcmVxdWVuY3knOiAwLjRcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2Uuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuIEFsd2F5cyByZXR1cm5zIFwicHdtXCIuXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUFdNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICdwd20nO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQ2Fubm90IHNldCBwYXJ0aWFscyBmb3IgdGhpcyB3YXZlZm9ybSB0eXBlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUFdNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUFdNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9kdWxhdG9yLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUFdNT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25GcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBXTU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZNT3NjaWxsYXRvclxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IG1vZHVsYXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egc2luZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeS1tb2R1bGF0ZWQgYnkgYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIHZhciBmbU9zYyA9IG5ldyBUb25lLkZNT3NjaWxsYXRvcihcIkFiM1wiLCBcInNpbmVcIiwgXCJzcXVhcmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvblR5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5GTU9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKG9wdGlvbnMuZnJlcXVlbmN5LCBvcHRpb25zLnR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLl9jYXJyaWVyLmRldHVuZTtcblx0ICAgICAgICB0aGlzLmRldHVuZS52YWx1ZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW9uIGluZGV4IHdoaWNoIGlzIGluIGVzc2VuY2UgdGhlIGRlcHRoIG9yIGFtb3VudCBvZiB0aGUgbW9kdWxhdGlvbi4gSW4gb3RoZXIgdGVybXMgaXQgaXMgdGhlXG5cdFx0XHQgKiAgcmF0aW8gb2YgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxhdGluZyBzaWduYWwgKG1mKSB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZVxuXHRcdFx0ICogIG1vZHVsYXRpbmcgc2lnbmFsIChtYSkgLS0gYXMgaW4gbWEvbWYuXG5cdFx0XHQgKlx0QHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICpcdEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5tb2R1bGF0aW9uSW5kZXgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW5nIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy5tb2R1bGF0aW9uVHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSBjYXJyaWVyIGFuZCB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3JzLlxuXHRcdFx0ICogIEEgaGFybW9uaWNpdHkgb2YgMSBnaXZlcyBib3RoIG9zY2lsbGF0b3JzIHRoZSBzYW1lIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdGhlIG1vZHVsYXRvciBhbiBvY3RhdmUgYmVsb3cgY2FycmllclxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKDApO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLm1vZHVsYXRpb25JbmRleCwgdGhpcy5fbW9kdWxhdGlvbk5vZGUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jb25uZWN0KHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZNT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IDIsXG5cdCAgICAgICAgJ21vZHVsYXRpb25UeXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvblR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uVHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIGNhcnJpZXIgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRk1Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRk1Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BTU9zY2lsbGF0b3Jcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gbW9kdWxhdGlvblR5cGUgVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBzaW5lIG9zY2lsbGF0b3IgZnJlcXVlbmN5LW1vZHVsYXRlZCBieSBhIHNxdWFyZSB3YXZlXG5cdFx0ICogdmFyIGZtT3NjID0gbmV3IFRvbmUuQU1Pc2NpbGxhdG9yKFwiQWIzXCIsIFwic2luZVwiLCBcInNxdWFyZVwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uVHlwZSdcblx0ICAgICAgICBdLCBUb25lLkFNT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMudHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fY2Fycmllci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLl9jYXJyaWVyLmRldHVuZTtcblx0ICAgICAgICB0aGlzLmRldHVuZS52YWx1ZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW5nIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy5tb2R1bGF0aW9uVHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29udmVydCB0aGUgLTEsMSBvdXRwdXQgdG8gMCwxXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQXVkaW9Ub0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSBjYXJyaWVyIGFuZCB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3JzLlxuXHRcdFx0ICogIEEgaGFybW9uaWNpdHkgb2YgMSBnaXZlcyBib3RoIG9zY2lsbGF0b3JzIHRoZSBzYW1lIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdGhlIG1vZHVsYXRvciBhbiBvY3RhdmUgYmVsb3cgY2FycmllclxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKDApO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHRoaXMuX21vZHVsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jaGFpbih0aGlzLl9tb2R1bGF0aW9uU2NhbGUsIHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY2hhaW4odGhpcy5fbW9kdWxhdGlvbk5vZGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQU1Pc2NpbGxhdG9yLCBUb25lLk9zY2lsbGF0b3IpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ21vZHVsYXRpb25UeXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHJlc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkFNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvblR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uVHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIGNhcnJpZXIgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQU1Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQU1Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GYXRPc2NpbGxhdG9yXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gbW9kdWxhdGlvblR5cGUgVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBzaW5lIG9zY2lsbGF0b3IgZnJlcXVlbmN5LW1vZHVsYXRlZCBieSBhIHNxdWFyZSB3YXZlXG5cdFx0ICogdmFyIGZtT3NjID0gbmV3IFRvbmUuRmF0T3NjaWxsYXRvcihcIkFiM1wiLCBcInNpbmVcIiwgXCJzcXVhcmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ3NwcmVhZCdcblx0ICAgICAgICBdLCBUb25lLkZhdE9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXJyYXkgb2Ygb3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRvdGFsIHNwcmVhZCBvZiB0aGUgb3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSAge0NlbnRzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcHJlYWQgPSBvcHRpb25zLnNwcmVhZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yc1xuXHRcdFx0ICogIEB0eXBlIHtEZWdyZWVzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhcnRpYWxzIGFycmF5XG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLnBhcnRpYWxzLCBbXSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGNvdW50IGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuY291bnQgPSBvcHRpb25zLmNvdW50O1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GYXRPc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ3NwcmVhZCc6IDIwLFxuXHQgICAgICAgICdjb3VudCc6IDMsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2F3dG9vdGgnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdGFydCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIG9zY2lsbGF0b3JzXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgaXRlcmF0b3IgIFRoZSBpdGVyYXRvciBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5fZm9yRWFjaCA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgaXRlcmF0b3IuY2FsbCh0aGlzLCB0aGlzLl9vc2NpbGxhdG9yc1tpXSwgaSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZXR1bmUgc3ByZWFkIGJldHdlZW4gdGhlIG9zY2lsbGF0b3JzLiBJZiBcImNvdW50XCIgaXNcblx0XHQgKiBzZXQgdG8gMyBvc2NpbGxhdG9ycyBhbmQgdGhlIFwic3ByZWFkXCIgaXMgc2V0IHRvIDQwLFxuXHRcdCAqIHRoZSB0aHJlZSBvc2NpbGxhdG9ycyB3b3VsZCBiZSBkZXR1bmVkIGxpa2UgdGhpczogWy0yMCwgMCwgMjBdXG5cdFx0ICogZm9yIGEgdG90YWwgZGV0dW5lIHNwcmVhZCBvZiA0MCBjZW50cy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtDZW50c31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3ByZWFkO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ByZWFkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NwcmVhZCA9IHNwcmVhZDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aCA+IDEpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IC1zcHJlYWQgLyAyO1xuXHQgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSBzcHJlYWQgLyAodGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MsIGkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvc2MuZGV0dW5lLnZhbHVlID0gc3RhcnQgKyBzdGVwICogaTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIGRldHVuZWQgb3NjaWxsYXRvcnNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgY291bnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAnY291bnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjb3VudCkge1xuXHQgICAgICAgICAgICBjb3VudCA9IE1hdGgubWF4KGNvdW50LCAxKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aCAhPT0gY291bnQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBwYXJ0aWFscyA9IHRoaXMucGFydGlhbHM7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0ICAgICAgICAgICAgICAgIC8vZGlzcG9zZSB0aGUgcHJldmlvdXMgb3NjaWxsYXRvcnNcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgICAgIG9zYy5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gW107XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBvc2MucGFydGlhbHMgPSB0aGlzLl9wYXJ0aWFscztcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBvc2MudHlwZSA9IHRoaXMuX3R5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIG9zYy5waGFzZSA9IHRoaXMuX3BoYXNlO1xuXHQgICAgICAgICAgICAgICAgICAgIG9zYy52b2x1bWUudmFsdWUgPSAtNiAtIGNvdW50ICogMS4xO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3Qob3NjLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdChvc2MuZGV0dW5lKTtcblx0ICAgICAgICAgICAgICAgICAgICBvc2MuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0gPSBvc2M7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvL3NldCB0aGUgc3ByZWFkXG5cdCAgICAgICAgICAgICAgICB0aGlzLnNwcmVhZCA9IHRoaXMuX3NwcmVhZDtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3NjLnN0YXJ0KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZhdE9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICBvc2MucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIGNhcnJpZXIgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5GYXRPc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZhdE9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk9tbmlPc2NpbGxhdG9yIGFnZ3JlZ2F0ZXMgVG9uZS5Pc2NpbGxhdG9yLCBUb25lLlB1bHNlT3NjaWxsYXRvcixcblx0XHQgKiAgICAgICAgIFRvbmUuUFdNT3NjaWxsYXRvciwgVG9uZS5GTU9zY2lsbGF0b3IsIFRvbmUuQU1Pc2NpbGxhdG9yLCBhbmQgVG9uZS5GYXRPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICBpbnRvIG9uZSBjbGFzcy4gVGhlIG9zY2lsbGF0b3IgY2xhc3MgY2FuIGJlIGNoYW5nZWQgYnkgc2V0dGluZyB0aGUgYHR5cGVgLlxuXHRcdCAqICAgICAgICAgYG9tbmlPc2MudHlwZSA9IFwicHdtXCJgIHdpbGwgc2V0IGl0IHRvIHRoZSBUb25lLlBXTU9zY2lsbGF0b3IuIFByZWZpeGluZ1xuXHRcdCAqICAgICAgICAgYW55IG9mIHRoZSBiYXNpYyB0eXBlcyAoXCJzaW5lXCIsIFwic3F1YXJlNFwiLCBldGMuKSB3aXRoIFwiZm1cIiwgXCJhbVwiLCBvciBcImZhdFwiXG5cdFx0ICogICAgICAgICB3aWxsIHVzZSB0aGUgRk1Pc2NpbGxhdG9yLCBBTU9zY2lsbGF0b3Igb3IgRmF0T3NjaWxsYXRvciByZXNwZWN0aXZlbHkuXG5cdFx0ICogICAgICAgICBGb3IgZXhhbXBsZTogYG9tbmlPc2MudHlwZSA9IFwiZmF0c2F3dG9vdGhcImAgd2lsbCBjcmVhdGUgc2V0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICB0byBhIEZhdE9zY2lsbGF0b3Igb2YgdHlwZSBcInNhd3Rvb3RoXCIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgaW5pdGlhbCBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgb21uaU9zYyA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKFwiQyM0XCIsIFwicHdtXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLk9tbmlPc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2xcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3Igc291cmNlXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlVHlwZSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIC8vc2V0IHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIG9wdGlvbnNcblx0ICAgICAgICB0aGlzLnNldChvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk9tbmlPc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAncGhhc2UnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgT21uaU9zY1R5cGUgPSB7XG5cdCAgICAgICAgUHVsc2U6ICdQdWxzZU9zY2lsbGF0b3InLFxuXHQgICAgICAgIFBXTTogJ1BXTU9zY2lsbGF0b3InLFxuXHQgICAgICAgIE9zYzogJ09zY2lsbGF0b3InLFxuXHQgICAgICAgIEZNOiAnRk1Pc2NpbGxhdG9yJyxcblx0ICAgICAgICBBTTogJ0FNT3NjaWxsYXRvcicsXG5cdCAgICAgICAgRmF0OiAnRmF0T3NjaWxsYXRvcidcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRvIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0byBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuIENhbiBiZSBhbnkgb2YgdGhlIGJhc2ljIHR5cGVzOiBzaW5lLCBzcXVhcmUsIHRyaWFuZ2xlLCBzYXd0b290aC4gT3Jcblx0XHQgKiBwcmVmaXggdGhlIGJhc2ljIHR5cGVzIHdpdGggXCJmbVwiLCBcImFtXCIsIG9yIFwiZmF0XCIgdG8gdXNlIHRoZSBGTU9zY2lsbGF0b3IsIEFNT3NjaWxsYXRvciBvciBGYXRPc2NpbGxhdG9yXG5cdFx0ICogdHlwZXMuIFRoZSBvc2NpbGxhdG9yIGNvdWxkIGFsc28gYmUgc2V0IHRvIFwicHdtXCIgb3IgXCJwdWxzZVwiLiBBbGwgb2YgdGhlIHBhcmFtZXRlcnMgb2YgdGhlXG5cdFx0ICogb3NjaWxsYXRvcidzIGNsYXNzIGFyZSBhY2Nlc3NpYmxlIHdoZW4gdGhlIG9zY2lsbGF0b3IgaXMgc2V0IHRvIHRoYXQgdHlwZSwgYnV0IHRocm93cyBhbiBlcnJvclxuXHRcdCAqIHdoZW4gaXQncyBub3QuXG5cdFx0ICpcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9tbmlPc2MudHlwZSA9IFwicHdtXCI7XG5cdFx0ICogLy9tb2R1bGF0aW9uRnJlcXVlbmN5IGlzIHBhcmFtZXRlciB3aGljaCBpcyBhdmFpbGFibGVcblx0XHQgKiAvL29ubHkgd2hlbiB0aGUgdHlwZSBpcyBcInB3bVwiLlxuXHRcdCAqIG9tbmlPc2MubW9kdWxhdGlvbkZyZXF1ZW5jeS52YWx1ZSA9IDAuNTtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vYW4gc3F1YXJlIHdhdmUgZnJlcXVlbmN5IG1vZHVsYXRlZCBieSBhIHNhd3Rvb3RoXG5cdFx0ICogb21uaU9zYy50eXBlID0gXCJmbXNxdWFyZVwiO1xuXHRcdCAqIG9tbmlPc2MubW9kdWxhdGlvblR5cGUgPSBcInNhd3Rvb3RoXCI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgcHJlZml4ID0gJyc7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSkge1xuXHQgICAgICAgICAgICAgICAgcHJlZml4ID0gJ2ZtJztcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgcHJlZml4ID0gJ2FtJztcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHByZWZpeCA9ICdmYXQnO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyB0aGlzLl9vc2NpbGxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlLnN1YnN0cigwLCAyKSA9PT0gJ2ZtJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5GTSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlLnN1YnN0cigyKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLnN1YnN0cigwLCAyKSA9PT0gJ2FtJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5BTSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlLnN1YnN0cigyKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLnN1YnN0cigwLCAzKSA9PT0gJ2ZhdCcpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuRmF0KTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGUuc3Vic3RyKDMpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwd20nKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLlBXTSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3B1bHNlJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5QdWxzZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLk9zYyk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogVGhpcyBpcyBub3QgYXZhaWxhYmxlIG9uIFwicHdtXCIgYW5kIFwicHVsc2VcIiBvc2NpbGxhdG9yIHR5cGVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IucGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IGEgbWVtYmVyL2F0dHJpYnV0ZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBwYXJhbXNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByYW1wVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5PbW5pT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgdmFsdWUpIHtcblx0ICAgICAgICAvL21ha2Ugc3VyZSB0aGUgdHlwZSBpcyBzZXQgZmlyc3Rcblx0ICAgICAgICBpZiAocGFyYW1zID09PSAndHlwZScpIHtcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gdmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzT2JqZWN0KHBhcmFtcykgJiYgcGFyYW1zLmhhc093blByb3BlcnR5KCd0eXBlJykpIHtcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gcGFyYW1zLnR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vdGhlbiBzZXQgdGhlIHJlc3Rcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5zZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0aGUgb3NjaWxsYXRvciB0byB0aGUgZnJlcXVlbmN5IGFuZCBkZXR1bmUgc2lnbmFsc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuX2NyZWF0ZU5ld09zY2lsbGF0b3IgPSBmdW5jdGlvbiAob3NjVHlwZSkge1xuXHQgICAgICAgIGlmIChvc2NUeXBlICE9PSB0aGlzLl9zb3VyY2VUeXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVR5cGUgPSBvc2NUeXBlO1xuXHQgICAgICAgICAgICB2YXIgT3NjaWxsYXRvckNvbnN0cnVjdG9yID0gVG9uZVtvc2NUeXBlXTtcblx0ICAgICAgICAgICAgLy9zaG9ydCBkZWxheSB0byBhdm9pZCBjbGlja3Mgb24gdGhlIGNoYW5nZVxuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBvbGRPc2MgPSB0aGlzLl9vc2NpbGxhdG9yO1xuXHQgICAgICAgICAgICAgICAgb2xkT3NjLnN0b3Aobm93KTtcblx0ICAgICAgICAgICAgICAgIC8vZGlzcG9zZSB0aGUgb2xkIG9uZVxuXHQgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9sZE9zYy5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgb2xkT3NjID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIH0sIHRoaXMuYmxvY2tUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbmV3IE9zY2lsbGF0b3JDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX29zY2lsbGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQobm93KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHdpZHRoIG9mIHRoZSBvc2NpbGxhdG9yIChvbmx5IGlmIHRoZSBvc2NpbGxhdG9yIGlzIHNldCB0byBcInB1bHNlXCIpXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBzaWduYWxcblx0XHQgKiBAbmFtZSB3aWR0aFxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIG9tbmlPc2MgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcig0NDAsIFwicHVsc2VcIik7XG5cdFx0ICogLy9jYW4gYWNjZXNzIHRoZSB3aWR0aCBhdHRyaWJ1dGUgb25seSBpZiB0eXBlID09PSBcInB1bHNlXCJcblx0XHQgKiBvbW5pT3NjLndpZHRoLnZhbHVlID0gMC4yO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnd2lkdGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5QdWxzZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3Iud2lkdGg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2YgZGV0dW5lZCBvc2NpbGxhdG9yc1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgY291bnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ2NvdW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5jb3VudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY291bnQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jb3VudCA9IGNvdW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGV0dW5lIHNwcmVhZCBiZXR3ZWVuIHRoZSBvc2NpbGxhdG9ycy4gSWYgXCJjb3VudFwiIGlzXG5cdFx0ICogc2V0IHRvIDMgb3NjaWxsYXRvcnMgYW5kIHRoZSBcInNwcmVhZFwiIGlzIHNldCB0byA0MCxcblx0XHQgKiB0aGUgdGhyZWUgb3NjaWxsYXRvcnMgd291bGQgYmUgZGV0dW5lZCBsaWtlIHRoaXM6IFstMjAsIDAsIDIwXVxuXHRcdCAqIGZvciBhIHRvdGFsIGRldHVuZSBzcHJlYWQgb2YgNDAgY2VudHMuIFNlZSBUb25lLkZhdE9zY2lsbGF0b3Jcblx0XHQgKiBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtDZW50c31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3NwcmVhZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3Iuc3ByZWFkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zcHJlYWQgPSBzcHJlYWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci4gT25seSBpZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqIGlzIHNldCB0byBcImFtXCIgb3IgXCJmbVwiIHR5cGVzLiBzZWUuIFRvbmUuQU1Pc2NpbGxhdG9yIG9yIFRvbmUuRk1Pc2NpbGxhdG9yXG5cdFx0ICogZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25UeXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uVHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNIHx8IHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uVHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobVR5cGUpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNIHx8IHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLm1vZHVsYXRpb25UeXBlID0gbVR5cGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtb2R1bGF0aW9uIGluZGV4IHdoaWNoIGlzIGluIGVzc2VuY2UgdGhlIGRlcHRoIG9yIGFtb3VudCBvZiB0aGUgbW9kdWxhdGlvbi4gSW4gb3RoZXIgdGVybXMgaXQgaXMgdGhlXG5cdFx0ICogcmF0aW8gb2YgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxhdGluZyBzaWduYWwgKG1mKSB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZVxuXHRcdCAqIG1vZHVsYXRpbmcgc2lnbmFsIChtYSkgLS0gYXMgaW4gbWEvbWYuXG5cdFx0ICogU2VlIFRvbmUuRk1Pc2NpbGxhdG9yIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBzaWduYWxcblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uSW5kZXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ21vZHVsYXRpb25JbmRleCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uSW5kZXg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgZnJlcXVlbmN5IHJhdGlvIGJldHdlZW4gdGhlIGNhcnJpZXIgYW5kIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvcnMuXG5cdFx0ICogIEEgaGFybW9uaWNpdHkgb2YgMSBnaXZlcyBib3RoIG9zY2lsbGF0b3JzIHRoZSBzYW1lIGZyZXF1ZW5jeS5cblx0XHQgKiAgSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS4gU2VlIFRvbmUuQU1Pc2NpbGxhdG9yIG9yIFRvbmUuRk1Pc2NpbGxhdG9yXG5cdFx0ICogIGZvciBtb3JlIGluZm8uXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqICBAc2lnbmFsXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgaGFybW9uaWNpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ2hhcm1vbmljaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0gfHwgdGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuQU0pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLmhhcm1vbmljaXR5O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbW9kdWxhdGlvbkZyZXF1ZW5jeSBTaWduYWwgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAob25seSBpZiB0aGUgb3NjaWxsYXRvciB0eXBlIGlzIHNldCB0byBwd20pLiBTZWVcblx0XHQgKiBUb25lLlBXTU9zY2lsbGF0b3IgZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqIEBzaWduYWxcblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uRnJlcXVlbmN5XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgb21uaU9zYyA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKDQ0MCwgXCJwd21cIik7XG5cdFx0ICogLy9jYW4gYWNjZXNzIHRoZSBtb2R1bGF0aW9uRnJlcXVlbmN5IGF0dHJpYnV0ZSBvbmx5IGlmIHR5cGUgPT09IFwicHdtXCJcblx0XHQgKiBvbW5pT3NjLm1vZHVsYXRpb25GcmVxdWVuY3kudmFsdWUgPSAwLjI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuUFdNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uRnJlcXVlbmN5O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuT21uaU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zb3VyY2VUeXBlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5PbW5pT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCYXNlLWNsYXNzIGZvciBhbGwgaW5zdHJ1bWVudHNcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuSW5zdHJ1bWVudC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IGFuZCB2b2x1bWUgdHJpbWluZyBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIHNvdXJjZS52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBLZWVwIHRyYWNrIG9mIGFsbCBldmVudHMgc2NoZWR1bGVkIHRvIHRoZSB0cmFuc3BvcnRcblx0XHRcdCAqIHdoZW4gdGhlIGluc3RydW1lbnQgaXMgJ3N5bmNlZCdcblx0XHRcdCAqIEB0eXBlIHtBcnJheTxOdW1iZXI+fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cyA9IFtdO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuSW5zdHJ1bWVudCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXNcblx0XHQgKiAgQHR5cGUge29iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAvKiogdGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzICovXG5cdCAgICAgICAgJ3ZvbHVtZSc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbm90ZSB0aGUgbm90ZSB0byB0cmlnZ2VyXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0byB0cmlnZ2VyIHRoZSBudG9lXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IHRvIHRyaWdnZXIgdGhlIG5vdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IFRvbmUubm9PcDtcblx0ICAgIC8qKlxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHdoZW4gdG8gdHJpZ2dlciB0aGUgcmVsZWFzZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IFRvbmUubm9PcDtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogaW5zdHJ1bWVudC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIGluc3RydW1lbnQudHJpZ2dlckF0dGFja1JlbGVhc2UoJ0M0JywgJzhuJywgMClcblx0XHQgKiBpbnN0cnVtZW50LnRyaWdnZXJBdHRhY2tSZWxlYXNlKCdFNCcsICc4bicsICc4bicpXG5cdFx0ICogaW5zdHJ1bWVudC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnRzQnLCAnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAxKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFdyYXAgdGhlIGdpdmVuIG1ldGhvZCBzbyB0aGF0IGl0IGNhbiBiZSBzeW5jaHJvbml6ZWRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kIFdoaWNoIG1ldGhvZCB0byB3cmFwIGFuZCBzeW5jXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lUG9zaXRpb24gV2hhdCBwb3NpdGlvbiB0aGUgdGltZSBhcmd1bWVudCBhcHBlYXJzIGluXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuX3N5bmNNZXRob2QgPSBmdW5jdGlvbiAobWV0aG9kLCB0aW1lUG9zaXRpb24pIHtcblx0ICAgICAgICB2YXIgb3JpZ2luYWxNZXRob2QgPSB0aGlzWydfb3JpZ2luYWxfJyArIG1ldGhvZF0gPSB0aGlzW21ldGhvZF07XG5cdCAgICAgICAgdGhpc1ttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHZhciB0aW1lID0gYXJnc1t0aW1lUG9zaXRpb25dO1xuXHQgICAgICAgICAgICB2YXIgaWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICAgICAgYXJnc1t0aW1lUG9zaXRpb25dID0gdDtcblx0ICAgICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHQgICAgICAgICAgICB9LmJpbmQodGhpcyksIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMucHVzaChpZCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgaW5zdHJ1bWVudCBmcm9tIHRoZSBUcmFuc3BvcnRcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQuY2xlYXIoaWQpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cyA9IFtdO1xuXHQgICAgICAgIGlmICh0aGlzLl9vcmlnaW5hbF90cmlnZ2VyQXR0YWNrKSB7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayA9IHRoaXMuX29yaWdpbmFsX3RyaWdnZXJBdHRhY2s7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UgPSB0aGlzLl9vcmlnaW5hbF90cmlnZ2VyUmVsZWFzZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgdGhlbiB0aGUgcmVsZWFzZSBhZnRlciB0aGUgZHVyYXRpb24uXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gdHJpZ2dlci5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIG5vdGUgc2hvdWxkIGJlIGhlbGQgZm9yIGJlZm9yZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyaW5nIHRoZSByZWxlYXNlLiBUaGlzIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSAgV2hlbiB0aGUgbm90ZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSB0aGUgbm90ZSBzaG91bGQgYmUgdHJpZ2dlcmVkIGF0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIFwiQzRcIiBmb3IgdGhlIGR1cmF0aW9uIG9mIGFuIDh0aCBub3RlXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlLCBkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKG5vdGUsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3ZvbHVtZSddKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy51bnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkluc3RydW1lbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVGhpcyBpcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBvdGhlciBtb25vcGhvbmljIGluc3RydW1lbnRzIHRvIFxuXHRcdCAqICAgICAgICAgIGV4dGVuZC4gSU1QT1JUQU5UOiBJdCBkb2VzIG5vdCBtYWtlIGFueSBzb3VuZCBvbiBpdHMgb3duIGFuZFxuXHRcdCAqICAgICAgICAgIHNob3VsZG4ndCBiZSBkaXJlY3RseSBpbnN0YW50aWF0ZWQuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTW9ub3Bob25pYy5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdsaWRlIHRpbWUgYmV0d2VlbiBub3Rlcy4gXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBvcnRhbWVudG8gPSBvcHRpb25zLnBvcnRhbWVudG87XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb25vcGhvbmljLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMuZGVmYXVsdHMgPSB7ICdwb3J0YW1lbnRvJzogMCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBvZiB0aGUgbm90ZSBvcHRpb25hbGx5IHdpdGggYSBnaXZlbiB2ZWxvY2l0eS4gXG5cdFx0ICogIFxuXHRcdCAqICBcblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byB0cmlnZ2VyLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICAgICBXaGVuIHRoZSBub3RlIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdmVsb2NpdHkgVGhlIHZlbG9jaXR5IHNjYWxlciBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lcyBob3cgXCJsb3VkXCIgdGhlIG5vdGUgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vcGhvbmljfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFjayhcIkM0XCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciB0aGUgbm90ZSBhIGhhbGYgc2Vjb25kIGZyb20gbm93IGF0IGhhbGYgdmVsb2NpdHlcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrKFwiQzRcIiwgXCIrMC41XCIsIDAuNSk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnNldE5vdGUobm90ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBJZiBubyB0aW1lIGlzIGdpdmVuLCB0aGUgcmVsZWFzZSBoYXBwZW5zIGltbWVkaWF0bHlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub3Bob25pY30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJSZWxlYXNlKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCB0aGUgYWN0dWFsIG1ldGhvZFxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCB0aGUgYWN0dWFsIG1ldGhvZFxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgbGV2ZWwgb2YgdGhlIG91dHB1dCBhdCB0aGUgZ2l2ZW4gdGltZS4gTWVhc3VyZXNcblx0XHQgKiAgdGhlIGVudmVsb3BlKHMpIHZhbHVlIGF0IHRoZSB0aW1lLiBcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIHF1ZXJ5IHRoZSBlbnZlbG9wZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuIHtOb3JtYWxSYW5nZX0gVGhlIG91dHB1dCBsZXZlbCBiZXR3ZWVuIDAtMVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5nZXRMZXZlbEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmVudmVsb3BlLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHRpbWUuIElmIG5vIHRpbWUgaXMgZ2l2ZW4sIHRoZSBub3RlXG5cdFx0ICogIHdpbGwgc2V0IGltbWVkaWF0ZWx5LiBcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IG5vdGUgVGhlIG5vdGUgdG8gY2hhbmdlIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIG5vdGUgc2hvdWxkIGJlIHNldC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9waG9uaWN9IHRoaXNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2hhbmdlIHRvIEYjNiBpbiBvbmUgcXVhcnRlciBub3RlIGZyb20gbm93LlxuXHRcdCAqIHN5bnRoLnNldE5vdGUoXCJGIzZcIiwgXCIrNG5cIik7XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2NoYW5nZSB0byBCYjQgcmlnaHQgbm93XG5cdFx0ICogc3ludGguc2V0Tm90ZShcIkJiNFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuc2V0Tm90ZSA9IGZ1bmN0aW9uIChub3RlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLnBvcnRhbWVudG8gPiAwICYmIHRoaXMuZ2V0TGV2ZWxBdFRpbWUodGltZSkgPiAwLjA1KSB7XG5cdCAgICAgICAgICAgIHZhciBwb3J0VGltZSA9IHRoaXMudG9TZWNvbmRzKHRoaXMucG9ydGFtZW50byk7XG5cdCAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmV4cG9uZW50aWFsUmFtcFRvKG5vdGUsIHBvcnRUaW1lLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZShub3RlLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9ub3Bob25pYztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlN5bnRoIGlzIGNvbXBvc2VkIHNpbXBseSBvZiBhIFRvbmUuT21uaU9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgICByb3V0ZWQgdGhyb3VnaCBhIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzEtMV8wWVcyWjFKMkVQSTM2UDhmTkNNY1pHN04xdzFHWmx1UHM0b2c0ZXZvL3B1Yj93PTExNjMmaD0yMzFcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5PbW5pT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKG9wdGlvbnMub3NjaWxsYXRvcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLm9zY2lsbGF0b3IuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBvc2NpbGxhdG9ycyB0byB0aGUgb3V0cHV0XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmNoYWluKHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAndHJpYW5nbGUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjMsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICAvL2lmIHRoZXJlIGlzIG5vIHJlbGVhc2UgcG9ydGlvbiwgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICAgIGlmICh0aGlzLmVudmVsb3BlLnN1c3RhaW4gPT09IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBTVN5bnRoIHVzZXMgdGhlIG91dHB1dCBvZiBvbmUgVG9uZS5TeW50aCB0byBtb2R1bGF0ZSB0aGVcblx0XHQgKiAgICAgICAgICBhbXBsaXR1ZGUgb2YgYW5vdGhlciBUb25lLlN5bnRoLiBUaGUgaGFybW9uaWNpdHkgKHRoZSByYXRpbyBiZXR3ZWVuXG5cdFx0ICogICAgICAgICAgdGhlIHR3byBzaWduYWxzKSBhZmZlY3RzIHRoZSB0aW1icmUgb2YgdGhlIG91dHB1dCBzaWduYWwgZ3JlYXRseS5cblx0XHQgKiAgICAgICAgICBSZWFkIG1vcmUgYWJvdXQgQW1wbGl0dWRlIE1vZHVsYXRpb24gU3ludGhlc2lzIG9uXG5cdFx0ICogICAgICAgICAgW1NvdW5kT25Tb3VuZF0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDA0MTAzNjUzL2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbTo4MC9zb3MvbWFyMDAvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmh0bSkuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFUUXU4RWQ0aUZyMVlUTEtwQjNVMV9odXItVXdCcmg1Z2RCWGM4QnhmR0t3L3B1Yj93PTEwMDkmaD00NTdcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkFNU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkFNU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuU3ludGgoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gdGhpcy5fY2Fycmllci5vc2NpbGxhdG9yO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSB0aGlzLl9jYXJyaWVyLmVudmVsb3BlLnNldChvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5TeW50aCgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvcidzIG9zY2lsbGF0b3Igd2hpY2ggaXMgYXBwbGllZFxuXHRcdFx0ICogIHRvIHRoZSBhbXBsaXR1ZGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uID0gdGhpcy5fbW9kdWxhdG9yLm9zY2lsbGF0b3Iuc2V0KG9wdGlvbnMubW9kdWxhdGlvbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25FbnZlbG9wZSA9IHRoaXMuX21vZHVsYXRvci5lbnZlbG9wZS5zZXQob3B0aW9ucy5tb2R1bGF0aW9uRW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbCg0NDAsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHNcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMuIEEgaGFybW9uaWNpdHkgb2Zcblx0XHRcdCAqICAxIGlzIG5vIGNoYW5nZS4gSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHZvaWNlMSBhbiBvY3RhdmUgYmVsb3cgdm9pY2UwXG5cdFx0XHQgKiBzeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnZlcnQgdGhlIC0xLDEgb3V0cHV0IHRvIDAsMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkF1ZGlvVG9HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBuZXcgVG9uZS5BdWRpb1RvR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSBtb2R1bGF0aW9uIGhhcHBlbnNcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIHR3byB2b2ljZXMgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZmFuKHRoaXMuX2NhcnJpZXIuZGV0dW5lLCB0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY2hhaW4odGhpcy5fbW9kdWxhdGlvblNjYWxlLCB0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNoYWluKHRoaXMuX21vZHVsYXRpb25Ob2RlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbicsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQU1TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMyxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjAxLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbic6IHsgJ3R5cGUnOiAnc3F1YXJlJyB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRyaWdnZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIG9jY3VyXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQU1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgLy90aGUgcG9ydCBnbGlkZVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgcmVsZWFzZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BTVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQU1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQU1TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1vbm9TeW50aCBpcyBjb21wb3NlZCBvZiBvbmUgb3NjaWxsYXRvciwgb25lIGZpbHRlciwgYW5kIHR3byBlbnZlbG9wZXMuXG5cdFx0ICogICAgICAgICAgVGhlIGFtcGxpdHVkZSBvZiB0aGUgVG9uZS5Pc2NpbGxhdG9yIGFuZCB0aGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiB0aGVcblx0XHQgKiAgICAgICAgICBUb25lLkZpbHRlciBhcmUgY29udHJvbGxlZCBieSBUb25lLkVudmVsb3Blcy5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMWdhWTFERjlfSHprb2RxZjhKSTFDZzJWWmZ3U0VscEZRZkk5NElRd2FkMzgvcHViP3c9OTI0Jmg9MjQwXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuTW9ub1N5bnRoKHtcblx0XHQgKiBcdFwib3NjaWxsYXRvclwiIDoge1xuXHRcdCAqIFx0XHRcInR5cGVcIiA6IFwic3F1YXJlXCJcblx0XHQgKiAgfSxcblx0XHQgKiAgXCJlbnZlbG9wZVwiIDoge1xuXHRcdCAqICBcdFwiYXR0YWNrXCIgOiAwLjFcblx0XHQgKiAgfVxuXHRcdCAqIH0pLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Nb25vU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9tbmlPc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3Iob3B0aW9ucy5vc2NpbGxhdG9yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMub3NjaWxsYXRvci5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG5ldyBUb25lLkZpbHRlcihvcHRpb25zLmZpbHRlcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpbHRlciBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GcmVxdWVuY3lFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUgPSBuZXcgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZShvcHRpb25zLmZpbHRlckVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgb3NjaWxsYXRvcnMgdG8gdGhlIG91dHB1dFxuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5jaGFpbih0aGlzLmZpbHRlciwgdGhpcy5lbnZlbG9wZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgZmlsdGVyIGVudmVsb3BlXG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS5jb25uZWN0KHRoaXMuZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZpbHRlcicsXG5cdCAgICAgICAgICAgICdmaWx0ZXJFbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1vbm9TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6ICdDNCcsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NxdWFyZScgfSxcblx0ICAgICAgICAnZmlsdGVyJzoge1xuXHQgICAgICAgICAgICAnUSc6IDYsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ2xvd3Bhc3MnLFxuXHQgICAgICAgICAgICAncm9sbG9mZic6IC0yNFxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjksXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2ZpbHRlckVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wNixcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4yLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAuNSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAyLFxuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDIwMCxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnOiA3LFxuXHQgICAgICAgICAgICAnZXhwb25lbnQnOiAyXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLmVudmVsb3BlLnN1c3RhaW4gPT09IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZpbHRlcicsXG5cdCAgICAgICAgICAgICdmaWx0ZXJFbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5maWx0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vbm9TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkR1b1N5bnRoIGlzIGEgbW9ub3Bob25pYyBzeW50aCBjb21wb3NlZCBvZiB0d29cblx0XHQgKiAgICAgICAgICBNb25vU3ludGhzIHJ1biBpbiBwYXJhbGxlbCB3aXRoIGNvbnRyb2wgb3ZlciB0aGVcblx0XHQgKiAgICAgICAgICBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcyBhbmQgdmlicmF0byBlZmZlY3QuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFiTDRHWHZmUk1NbHFTN1h5Qm05Q2pMOUtKUFNVS2JjZEJOcHFPbGtGTHhrL3B1Yj93PTEwMTImaD00NDhcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZHVvU3ludGggPSBuZXcgVG9uZS5EdW9TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogZHVvU3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkR1b1N5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmlyc3Qgdm9pY2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Nb25vU3ludGh9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvaWNlMCA9IG5ldyBUb25lLk1vbm9TeW50aChvcHRpb25zLnZvaWNlMCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzZWNvbmQgdm9pY2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Nb25vU3ludGh9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvaWNlMSA9IG5ldyBUb25lLk1vbm9TeW50aChvcHRpb25zLnZvaWNlMSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2aWJyYXRvIExGTy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8gPSBuZXcgVG9uZS5MRk8ob3B0aW9ucy52aWJyYXRvUmF0ZSwgLTUwLCA1MCk7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0by5zdGFydCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIHZpYnJhdG8gZnJlcXVlbmN5XG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52aWJyYXRvUmF0ZSA9IHRoaXMuX3ZpYnJhdG8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB2aWJyYXRvIGdhaW5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy52aWJyYXRvQW1vdW50LCBUb25lLlR5cGUuUG9zaXRpdmUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtb3VudCBvZiB2aWJyYXRvXG5cdFx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZpYnJhdG9BbW91bnQgPSB0aGlzLl92aWJyYXRvR2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmcmVxdWVuY3kgY29udHJvbFxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoNDQwLCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcy4gQSBoYXJtb25pY2l0eSBvZlxuXHRcdFx0ICogIDEgaXMgbm8gY2hhbmdlLiBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdm9pY2UxIGFuIG9jdGF2ZSBiZWxvdyB2b2ljZTBcblx0XHRcdCAqIGR1b1N5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSB0d28gdm9pY2VzIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy52b2ljZTAuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLnZvaWNlMS5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8uY29ubmVjdCh0aGlzLl92aWJyYXRvR2Fpbik7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4uZmFuKHRoaXMudm9pY2UwLmRldHVuZSwgdGhpcy52b2ljZTEuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLnZvaWNlMS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICd2b2ljZTAnLFxuXHQgICAgICAgICAgICAndm9pY2UxJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd2aWJyYXRvQW1vdW50Jyxcblx0ICAgICAgICAgICAgJ3ZpYnJhdG9SYXRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRHVvU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndmlicmF0b0Ftb3VudCc6IDAuNSxcblx0ICAgICAgICAndmlicmF0b1JhdGUnOiA1LFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDEuNSxcblx0ICAgICAgICAndm9pY2UwJzoge1xuXHQgICAgICAgICAgICAndm9sdW1lJzogLTEwLFxuXHQgICAgICAgICAgICAncG9ydGFtZW50byc6IDAsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndm9pY2UxJzoge1xuXHQgICAgICAgICAgICAndm9sdW1lJzogLTEwLFxuXHQgICAgICAgICAgICAncG9ydGFtZW50byc6IDAsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3Blc1xuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkR1b1N5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXNcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkR1b1N5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy52b2ljZTAuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgbGV2ZWwgb2YgdGhlIG91dHB1dCBhdCB0aGUgZ2l2ZW4gdGltZS4gTWVhc3VyZXNcblx0XHQgKiAgdGhlIGVudmVsb3BlKHMpIHZhbHVlIGF0IHRoZSB0aW1lLiBcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIHF1ZXJ5IHRoZSBlbnZlbG9wZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuIHtOb3JtYWxSYW5nZX0gVGhlIG91dHB1dCBsZXZlbCBiZXR3ZWVuIDAtMVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuZ2V0TGV2ZWxBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiAodGhpcy52b2ljZTAuZ2V0TGV2ZWxBdFRpbWUodGltZSkgKyB0aGlzLnZvaWNlMS5nZXRMZXZlbEF0VGltZSh0aW1lKSkgLyAyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EdW9TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICd2b2ljZTAnLFxuXHQgICAgICAgICAgICAndm9pY2UxJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd2aWJyYXRvQW1vdW50Jyxcblx0ICAgICAgICAgICAgJ3ZpYnJhdG9SYXRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG9HYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0byA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52aWJyYXRvQW1vdW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZpYnJhdG9BbW91bnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmlicmF0b1JhdGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkR1b1N5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEZNU3ludGggaXMgY29tcG9zZWQgb2YgdHdvIFRvbmUuU3ludGhzIHdoZXJlIG9uZSBUb25lLlN5bnRoIG1vZHVsYXRlc1xuXHRcdCAqICAgICAgICAgIHRoZSBmcmVxdWVuY3kgb2YgYSBzZWNvbmQgVG9uZS5TeW50aC4gQSBsb3Qgb2Ygc3BlY3RyYWwgY29udGVudFxuXHRcdCAqICAgICAgICAgIGNhbiBiZSBleHBsb3JlZCB1c2luZyB0aGUgbW9kdWxhdGlvbkluZGV4IHBhcmFtZXRlci4gUmVhZCBtb3JlIGFib3V0XG5cdFx0ICogICAgICAgICAgZnJlcXVlbmN5IG1vZHVsYXRpb24gc3ludGhlc2lzIG9uIFNvdW5kIE9uIFNvdW5kOiBbUGFydCAxXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA0MDMxMjM3MDQvaHR0cDovL3d3dy5zb3VuZG9uc291bmQuY29tL3Nvcy9hcHIwMC9hcnRpY2xlcy9zeW50aHNlY3JldHMuaHRtKSwgW1BhcnQgMl0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDAzMTE1ODM1L2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvbWF5MDAvYXJ0aWNsZXMvc3ludGguaHRtKS5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMWgwUFVEWlhQZ2k0SWt4NmJWVDZvbmNyWVBMbHVGS3k3bGo1M3B1eGotRE0vcHViP3c9OTAyJmg9NDYyXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZtU3ludGggPSBuZXcgVG9uZS5GTVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBmbVN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzVcIiwgXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkZNU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuU3ludGgob3B0aW9ucy5jYXJyaWVyKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gdGhpcy5fY2Fycmllci5vc2NpbGxhdG9yO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IHRoaXMuX2NhcnJpZXIuZW52ZWxvcGUuc2V0KG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3Igdm9pY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3ludGh9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLlN5bnRoKG9wdGlvbnMubW9kdWxhdG9yKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBvc2NpbGxhdG9yIHdoaWNoIGlzIGFwcGxpZWRcblx0XHRcdCAqICB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IHRoaXMuX21vZHVsYXRvci5vc2NpbGxhdG9yLnNldChvcHRpb25zLm1vZHVsYXRpb24pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBlbnZlbG9wZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25FbnZlbG9wZSA9IHRoaXMuX21vZHVsYXRvci5lbnZlbG9wZS5zZXQob3B0aW9ucy5tb2R1bGF0aW9uRW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDQ0MCwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBpbiBjZW50c1xuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcy4gQSBoYXJtb25pY2l0eSBvZlxuXHRcdFx0ICogIDEgaXMgbm8gY2hhbmdlLiBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdm9pY2UxIGFuIG9jdGF2ZSBiZWxvdyB2b2ljZTBcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpb24gaW5kZXggd2hpY2ggZXNzZW50aWFsbHkgdGhlIGRlcHRoIG9yIGFtb3VudCBvZiB0aGUgbW9kdWxhdGlvbi4gSXQgaXMgdGhlXG5cdFx0XHQgKiAgcmF0aW8gb2YgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxhdGluZyBzaWduYWwgKG1mKSB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZVxuXHRcdFx0ICogIG1vZHVsYXRpbmcgc2lnbmFsIChtYSkgLS0gYXMgaW4gbWEvbWYuXG5cdFx0XHQgKlx0QHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICpcdEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5tb2R1bGF0aW9uSW5kZXgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSBtb2R1bGF0aW9uIGhhcHBlbnNcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigwKTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIHR3byB2b2ljZXMgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5tb2R1bGF0aW9uSW5kZXgsIHRoaXMuX21vZHVsYXRpb25Ob2RlKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5mYW4odGhpcy5fY2Fycmllci5kZXR1bmUsIHRoaXMuX21vZHVsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jb25uZWN0KHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZNU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDMsXG5cdCAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IDEwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMDEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uJzogeyAndHlwZSc6ICdzcXVhcmUnIH0sXG5cdCAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMCxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBcdHRyaWdnZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIG9jY3VyXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZNU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgcmVsZWFzZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GTVN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jyxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbicsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRk1TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1lbWJyYW5lU3ludGggbWFrZXMga2ljayBhbmQgdG9tIHNvdW5kcyB1c2luZyBhIHNpbmdsZSBvc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICAgd2l0aCBhbiBhbXBsaXR1ZGUgZW52ZWxvcGUgYW5kIGZyZXF1ZW5jeSByYW1wLiBBIFRvbmUuT21uaU9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgICBpcyByb3V0ZWQgdGhyb3VnaCBhIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgdG8gdGhlIG91dHB1dC4gVGhlIGRydW1cblx0XHQgKiAgICAgICAgICBxdWFsaXR5IG9mIHRoZSBzb3VuZCBjb21lcyBmcm9tIHRoZSBmcmVxdWVuY3kgZW52ZWxvcGUgYXBwbGllZFxuXHRcdCAqICAgICAgICAgIGR1cmluZyBUb25lLk1lbWJyYW5lU3ludGgudHJpZ2dlckF0dGFjayhub3RlKS4gVGhlIGZyZXF1ZW5jeSBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgIHN0YXJ0cyBhdCA8Y29kZT5ub3RlICogLm9jdGF2ZXM8L2NvZGU+IGFuZCByYW1wcyB0byA8Y29kZT5ub3RlPC9jb2RlPlxuXHRcdCAqICAgICAgICAgIG92ZXIgdGhlIGR1cmF0aW9uIG9mIDxjb2RlPi5waXRjaERlY2F5PC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5NZW1icmFuZVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkMyXCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5NZW1icmFuZVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5PbW5pT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKG9wdGlvbnMub3NjaWxsYXRvcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhlIHBpdGNoIGVudmVsb3BlIHJhbXBzLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIGZyZXF1ZW5jeSBlbnZlbG9wZSB0YWtlcy5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucGl0Y2hEZWNheSA9IG9wdGlvbnMucGl0Y2hEZWNheTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuY2hhaW4odGhpcy5lbnZlbG9wZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NZW1icmFuZVN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGl0Y2hEZWNheSc6IDAuMDUsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAxMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC40LFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAuMDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMS40LFxuXHQgICAgICAgICAgICAnYXR0YWNrQ3VydmUnOiAnZXhwb25lbnRpYWwnXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBub3RlIGF0IHRoZSBnaXZlbiB0aW1lIHdpdGggdGhlIGdpdmVuIHZlbG9jaXR5LlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgdGhlIG5vdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgdGhlIHRpbWUsIGlmIG5vdCBnaXZlbiBpcyBub3dcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdmVsb2NpdHkgZGVmYXVsdHMgdG8gMVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZW1icmFuZVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIGtpY2sudHJpZ2dlckF0dGFjayg2MCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgbm90ZSA9IHRoaXMudG9GcmVxdWVuY3kobm90ZSk7XG5cdCAgICAgICAgdmFyIG1heE5vdGUgPSBub3RlICogdGhpcy5vY3RhdmVzO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUobWF4Tm90ZSwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmZyZXF1ZW5jeS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKG5vdGUsIHRpbWUgKyB0aGlzLnRvU2Vjb25kcyh0aGlzLnBpdGNoRGVjYXkpKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBub3RlLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCByZWxlYXNlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lbWJyYW5lU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVtYnJhbmVTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1lbWJyYW5lU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBJbmhhcm1vbmljIHJhdGlvIG9mIGZyZXF1ZW5jaWVzIGJhc2VkIG9uIHRoZSBSb2xhbmQgVFItODA4XG5cdFx0ICogIFRha2VuIGZyb20gaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvcGFwZXJzL3RyLTgwOC1jeW1iYWwtcGh5c2ljYWxseS1pbmZvcm1lZC1jaXJjdWl0LWJlbmRhYmxlLWRpZ2l0YWwtbW9kZWxcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgaW5oYXJtUmF0aW9zID0gW1xuXHQgICAgICAgIDEsXG5cdCAgICAgICAgMS40ODMsXG5cdCAgICAgICAgMS45MzIsXG5cdCAgICAgICAgMi41NDYsXG5cdCAgICAgICAgMi42Myxcblx0ICAgICAgICAzLjg5N1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgaGlnaGx5IGluaGFybW9uaWMgYW5kIHNwZWN0cmFsbHkgY29tcGxleCBzb3VyY2Ugd2l0aCBhIGhpZ2hwYXNzIGZpbHRlclxuXHRcdCAqICAgICAgICAgIGFuZCBhbXBsaXR1ZGUgZW52ZWxvcGUgd2hpY2ggaXMgZ29vZCBmb3IgbWFraW5nIG1ldGFsb3Bob25lIHNvdW5kcy4gQmFzZWRcblx0XHQgKiAgICAgICAgICBvbiBDeW1iYWxTeW50aCBieSBbQHBvbHlyaHl0aG1hdGljXShodHRwczovL2dpdGh1Yi5jb20vcG9seXJoeXRobWF0aWMpLlxuXHRcdCAqICAgICAgICAgIEluc3BpcmF0aW9uIGZyb20gW1NvdW5kIG9uIFNvdW5kXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA2MTAxNDM5MjQvaHR0cHM6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvanVsMDIvYXJ0aWNsZXMvc3ludGhzZWNyZXRzMDcwMi5hc3ApLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFRoZSBvcHRpb25zIGF2YWlsYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5NZXRhbFN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBjeW1iYWxcblx0XHRcdCAqICBAdHlwZSAge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIEZNT3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgbXVsdGlwbGllcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZm9yIHRoZSBib2R5XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWUgPSBuZXcgVG9uZS5HYWluKDApLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGhpZ2hwYXNzIHRoZSBvdXRwdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2hpZ2hwYXNzID0gbmV3IFRvbmUuRmlsdGVyKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnaGlnaHBhc3MnLFxuXHQgICAgICAgICAgICAnUSc6IC0zLjAxMDI5OTk1NjYzOTgxMjVcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2FtcGxpdHVlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhlIGhpZ2hwYXNzXG5cdFx0XHQgKiAgZmlsdGVyIGZyZXF1ZW5jeSByYW1wc1xuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2NhbGUgdGhlIGJvZHkgZW52ZWxvcGVcblx0XHRcdCAqICBmb3IgdGhlIGJhbmRwYXNzXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIgPSBuZXcgVG9uZS5TY2FsZShvcHRpb25zLnJlc29uYW5jZSwgNzAwMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGVudmVsb3BlIHdoaWNoIGlzIGNvbm5lY3RlZCBib3RoIHRvIHRoZVxuXHRcdFx0ICogIGFtcGxpdHVkZSBhbmQgaGlnaHBhc3MgZmlsdGVyJ3MgY3V0b2ZmIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5FbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5FbnZlbG9wZSh7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiBvcHRpb25zLmVudmVsb3BlLmF0dGFjayxcblx0ICAgICAgICAgICAgJ2F0dGFja0N1cnZlJzogJ2xpbmVhcicsXG5cdCAgICAgICAgICAgICdkZWNheSc6IG9wdGlvbnMuZW52ZWxvcGUuZGVjYXksXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiBvcHRpb25zLmVudmVsb3BlLnJlbGVhc2Vcblx0ICAgICAgICB9KS5jaGFpbih0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLCB0aGlzLl9oaWdocGFzcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZS5nYWluKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaGFybVJhdGlvcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgb3NjID0gbmV3IFRvbmUuRk1Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgICAgICd0eXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgICAgICAgICAnbW9kdWxhdGlvblR5cGUnOiAnc3F1YXJlJyxcblx0ICAgICAgICAgICAgICAgICdoYXJtb25pY2l0eSc6IG9wdGlvbnMuaGFybW9uaWNpdHksXG5cdCAgICAgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jzogb3B0aW9ucy5tb2R1bGF0aW9uSW5kZXhcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIG9zYy5jb25uZWN0KHRoaXMuX2hpZ2hwYXNzKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0gPSBvc2M7XG5cdCAgICAgICAgICAgIHZhciBtdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoaW5oYXJtUmF0aW9zW2ldKTtcblx0ICAgICAgICAgICAgdGhpcy5fZnJlcU11bHRpcGxpZXJzW2ldID0gbXVsdDtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4obXVsdCwgb3NjLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc2V0IHRoZSBvY3RhdmVzXG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWV0YWxTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDEuNCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjJcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDUuMSxcblx0ICAgICAgICAnbW9kdWxhdGlvbkluZGV4JzogMzIsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDQwMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAxLjVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgICAgIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIFt2ZWxvY2l0eT0xXSAgVGhlIHZlbG9jaXR5IHRoYXQgdGhlIGVudmVsb3BlIHNob3VsZCBiZSB0cmlnZ2VyZWQgYXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1ldGFsU3ludGh9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZlbCA9IFRvbmUuZGVmYXVsdEFyZyh2ZWwsIDEpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWwpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzLmZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9pZiB0aGUgc3VzdGFpbiBpcyAwLCBzdG9wIHRoZSBvc2NpbGxhdG9yIGFzIHdlbGxcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzLmZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgICAgICBXaGVuIHRoZSByZWxlYXNlIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1ldGFsU3ludGh9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDApO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSBvZiB0aGUgZW52ZWxvcGUgYWZ0ZXIgdGhlIGdpdmVuXG5cdFx0ICogIGR1cmF0aW9uLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgZHVyYXRpb24gIFRoZSBkdXJhdGlvbiBiZWZvcmUgdHJpZ2dlcmluZyB0aGUgcmVsZWFzZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgICAgIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIFt2ZWxvY2l0eT0xXSAgVGhlIHZlbG9jaXR5IHRoYXQgdGhlIGVudmVsb3BlIHNob3VsZCBiZSB0cmlnZ2VyZWQgYXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1ldGFsU3ludGh9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG1vZHVsYXRpb25JbmRleCBvZiB0aGUgb3NjaWxsYXRvcnMgd2hpY2ggbWFrZSB1cCB0aGUgc291cmNlLlxuXHRcdCAqICBzZWUgVG9uZS5GTU9zY2lsbGF0b3IubW9kdWxhdGlvbkluZGV4XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk1ldGFsU3ludGgjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgIG1vZHVsYXRpb25JbmRleFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdtb2R1bGF0aW9uSW5kZXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yc1swXS5tb2R1bGF0aW9uSW5kZXgudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0ubW9kdWxhdGlvbkluZGV4LnZhbHVlID0gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGhhcm1vbmljaXR5IG9mIHRoZSBvc2NpbGxhdG9ycyB3aGljaCBtYWtlIHVwIHRoZSBzb3VyY2UuXG5cdFx0ICogIHNlZSBUb25lLkZNT3NjaWxsYXRvci5oYXJtb25pY2l0eVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lICBoYXJtb25pY2l0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdoYXJtb25pY2l0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3JzWzBdLmhhcm1vbmljaXR5LnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldLmhhcm1vbmljaXR5LnZhbHVlID0gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgaGlnaHBhc3MgZmlsdGVyIGF0dGFjaGVkIHRvIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqICBAbmFtZSAgcmVzb25hbmNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZSwgJ3Jlc29uYW5jZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWluID0gdmFsO1xuXHQgICAgICAgICAgICB0aGlzLm9jdGF2ZXMgPSB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgXCJyZXNvbmFuY2VcIiBmcmVxdWVuY3lcblx0XHQgKiAgdGhhdCB0aGUgZmlsdGVyIHJhbXBzIGR1cmluZyB0aGUgYXR0YWNrL2RlY2F5IGVudmVsb3BlXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk1ldGFsU3ludGgjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lICBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0cykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0cztcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5tYXggPSB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1pbiAqIE1hdGgucG93KDIsIG9jdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1ldGFsU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZnJlcU11bHRpcGxpZXJzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2hpZ2hwYXNzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9oaWdocGFzcyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWV0YWxTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk5vaXNlU3ludGggaXMgY29tcG9zZWQgb2YgYSBub2lzZSBnZW5lcmF0b3IgKFRvbmUuTm9pc2UpLCBvbmUgZmlsdGVyIChUb25lLkZpbHRlciksXG5cdFx0ICogICAgICAgICAgYW5kIHR3byBlbnZlbG9wZXMgKFRvbmUuRW52ZWxvcCkuIE9uZSBlbnZlbG9wZSBjb250cm9scyB0aGUgYW1wbGl0dWRlXG5cdFx0ICogICAgICAgICAgb2YgdGhlIG5vaXNlIGFuZCB0aGUgb3RoZXIgaXMgY29udHJvbHMgdGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlci5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMXJxenVYOXJCbGhUNTBNUnZEMlRLbWw5Ym5aaGNabXpYRjFyZl9vN3ZkbkUvcHViP3c9OTE4Jmg9MjQyXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgbm9pc2VTeW50aCA9IG5ldyBUb25lLk5vaXNlU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIG5vaXNlU3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk5vaXNlU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBub2lzZSBzb3VyY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTm9pc2V9XG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIG5vaXNlU3ludGguc2V0KFwibm9pc2UudHlwZVwiLCBcImJyb3duXCIpO1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5ub2lzZSA9IG5ldyBUb25lLk5vaXNlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIG5vaXNlIHRvIHRoZSBvdXRwdXRcblx0ICAgICAgICB0aGlzLm5vaXNlLmNoYWluKHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdub2lzZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5vaXNlU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbm9pc2UnOiB7ICd0eXBlJzogJ3doaXRlJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDA1LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMFxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXMuIFVubGlrZSBvdGhlclxuXHRcdCAqICBpbnN0cnVtZW50cywgVG9uZS5Ob2lzZVN5bnRoIGRvZXNuJ3QgaGF2ZSBhIG5vdGUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogbm9pc2VTeW50aC50cmlnZ2VyQXR0YWNrKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIG5vaXNlXG5cdCAgICAgICAgdGhpcy5ub2lzZS5zdGFydCh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMubm9pc2Uuc3RvcCh0aW1lID0gdGhpcy5lbnZlbG9wZS5hdHRhY2sgKyB0aGlzLmVudmVsb3BlLmRlY2F5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3Blcy5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMubm9pc2Uuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDApO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgdGhlbiB0aGUgcmVsZWFzZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZHVyYXRpb24gdGhlIGR1cmF0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIHRoZSB0aW1lIG9mIHRoZSBhdHRhY2tcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAoZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSh0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ25vaXNlJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubm9pc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubm9pc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk5vaXNlU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBLYXJwbHVzLVN0cmluZyBzdHJpbmcgc3ludGhlc2lzLiBPZnRlbiBvdXQgb2YgdHVuZS5cblx0XHQgKiAgICAgICAgIFdpbGwgY2hhbmdlIHdoZW4gdGhlIEF1ZGlvV29ya2VyTm9kZSBpcyBhdmFpbGFibGUgYWNyb3NzXG5cdFx0ICogICAgICAgICBicm93c2Vycy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBzZWUgdGhlIGRlZmF1bHRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBsdWNreSA9IG5ldyBUb25lLlBsdWNrU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHBsdWNreS50cmlnZ2VyQXR0YWNrKFwiQzRcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5QbHVja1N5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Ob2lzZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbm9pc2UgPSBuZXcgVG9uZS5Ob2lzZSgncGluaycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2Ygbm9pc2UgYXQgdGhlIGF0dGFjay5cblx0XHRcdCAqICBOb21pbmFsIHJhbmdlIG9mIFswLjEsIDIwXVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFja05vaXNlID0gb3B0aW9ucy5hdHRhY2tOb2lzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgTEZDRlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxvd3Bhc3NDb21iRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZmNmID0gbmV3IFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIoe1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJzogb3B0aW9ucy5yZXNvbmFuY2UsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnOiBvcHRpb25zLmRhbXBlbmluZ1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByZXNvbmFuY2UgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSB0aGlzLl9sZmNmLnJlc29uYW5jZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGFtcGVuaW5nIGNvbnRyb2wuIGkuZS4gdGhlIGxvd3Bhc3MgZmlsdGVyIGZyZXF1ZW5jeSBvZiB0aGUgY29tYiBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gdGhpcy5fbGZjZi5kYW1wZW5pbmc7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX25vaXNlLmNvbm5lY3QodGhpcy5fbGZjZik7XG5cdCAgICAgICAgdGhpcy5fbGZjZi5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGx1Y2tTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2tOb2lzZSc6IDEsXG5cdCAgICAgICAgJ2RhbXBlbmluZyc6IDQwMDAsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDAuN1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gbm90ZSBUaGUgbm90ZSB0byB0cmlnZ2VyLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgbm90ZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbHVja1N5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSkge1xuXHQgICAgICAgIG5vdGUgPSB0aGlzLnRvRnJlcXVlbmN5KG5vdGUpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgZGVsYXlBbW91bnQgPSAxIC8gbm90ZTtcblx0ICAgICAgICB0aGlzLl9sZmNmLmRlbGF5VGltZS5zZXRWYWx1ZUF0VGltZShkZWxheUFtb3VudCwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2Uuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2Uuc3RvcCh0aW1lICsgZGVsYXlBbW91bnQgKiB0aGlzLmF0dGFja05vaXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsdWNrU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGx1Y2tTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ub2lzZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZjZi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmY2YgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QbHVja1N5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUG9seVN5bnRoIGhhbmRsZXMgdm9pY2UgY3JlYXRpb24gYW5kIGFsbG9jYXRpb24gZm9yIGFueVxuXHRcdCAqICAgICAgICAgIGluc3RydW1lbnRzIHBhc3NlZCBpbiBhcyB0aGUgc2Vjb25kIHBhcmFtdGVyLiBQb2x5U3ludGggaXNcblx0XHQgKiAgICAgICAgICBub3QgYSBzeW50aGVzaXplciBieSBpdHNlbGYsIGl0IG1lcmVseSBtYW5hZ2VzIHZvaWNlcyBvZlxuXHRcdCAqICAgICAgICAgIG9uZSBvZiB0aGUgb3RoZXIgdHlwZXMgb2Ygc3ludGhzLCBhbGxvd2luZyBhbnkgb2YgdGhlXG5cdFx0ICogICAgICAgICAgbW9ub3Bob25pYyBzeW50aGVzaXplcnMgdG8gYmUgcG9seXBob25pYy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ8T2JqZWN0fSBbcG9seXBob255PTRdIFRoZSBudW1iZXIgb2Ygdm9pY2VzIHRvIGNyZWF0ZVxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufSBbdm9pY2U9VG9uZS5TeW50aF0gVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSB2b2ljZXNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBUb25lLlN5bnRoIGJ5IGRlZmF1bHQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHBvbHlzeW50aCBjb21wb3NlZCBvZiA2IFZvaWNlcyBvZiBTeW50aFxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLlBvbHlTeW50aCg2LCBUb25lLlN5bnRoKS50b01hc3RlcigpO1xuXHRcdCAqIC8vc2V0IHRoZSBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBzZXQgaW50ZXJmYWNlXG5cdFx0ICogc3ludGguc2V0KFwiZGV0dW5lXCIsIC0xMjAwKTtcblx0XHQgKiAvL3BsYXkgYSBjaG9yZFxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkM0XCIsIFwiRTRcIiwgXCJBNFwiXSwgXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3BvbHlwaG9ueScsXG5cdCAgICAgICAgICAgICd2b2ljZSdcblx0ICAgICAgICBdLCBUb25lLlBvbHlTeW50aCk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkluc3RydW1lbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8vbWF4IHBvbHlwaG9ueVxuXHQgICAgICAgIG9wdGlvbnMucG9seXBob255ID0gTWF0aC5taW4oVG9uZS5Qb2x5U3ludGguTUFYX1BPTFlQSE9OWSwgb3B0aW9ucy5wb2x5cGhvbnkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhcnJheSBvZiB2b2ljZXNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvaWNlcyA9IG5ldyBBcnJheShvcHRpb25zLnBvbHlwaG9ueSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHF1ZXVlIG9mIHZvaWNlcyB3aXRoIGRhdGEgYWJvdXQgbGFzdCB0cmlnZ2VyXG5cdFx0XHQgKiAgYW5kIHRoZSB0cmlnZ2VyZWQgbm90ZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlcnMgPSBuZXcgQXJyYXkob3B0aW9ucy5wb2x5cGhvbnkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHNcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2RldHVuZScpO1xuXHQgICAgICAgIC8vY3JlYXRlIHRoZSB2b2ljZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMucG9seXBob255OyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHYgPSBuZXcgb3B0aW9ucy52b2ljZShhcmd1bWVudHNbMl0sIGFyZ3VtZW50c1szXSk7XG5cdCAgICAgICAgICAgIGlmICghKHYgaW5zdGFuY2VvZiBUb25lLk1vbm9waG9uaWMpKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5bnRoIGNvbnN0cnVjdG9yIG11c3QgYmUgaW5zdGFuY2Ugb2YgVG9uZS5Nb25vcGhvbmljJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy52b2ljZXNbaV0gPSB2O1xuXHQgICAgICAgICAgICB2LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICBpZiAodi5oYXNPd25Qcm9wZXJ0eSgnZGV0dW5lJykpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3Qodi5kZXR1bmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJzW2ldID0ge1xuXHQgICAgICAgICAgICAgICAgcmVsZWFzZTogLTEsXG5cdCAgICAgICAgICAgICAgICBub3RlOiBudWxsLFxuXHQgICAgICAgICAgICAgICAgdm9pY2U6IHZcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Qb2x5U3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncG9seXBob255JzogNCxcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAndm9pY2UnOiBUb25lLlN5bnRoXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeXxBcnJheX0gbm90ZXMgVGhlIG5vdGVzIHRvIHBsYXkuIEFjY2VwdHMgYSBzaW5nbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVxdWVuY3kgb3IgYW4gYXJyYXkgb2YgZnJlcXVlbmNpZXMuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gIFRoZSBzdGFydCB0aW1lIG9mIHRoZSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIGEgY2hvcmQgaW1tZWRpYXRlbHkgd2l0aCBhIHZlbG9jaXR5IG9mIDAuMlxuXHRcdCAqIHBvbHkudHJpZ2dlckF0dGFjayhbXCJBYjNcIiwgXCJDNFwiLCBcIkY1XCJdLCB1bmRlZmluZWQsIDAuMik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlcywgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobm90ZXMpKSB7XG5cdCAgICAgICAgICAgIG5vdGVzID0gW25vdGVzXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IG5vdGVzW2ldO1xuXHQgICAgICAgICAgICAvL3RyaWdnZXIgdGhlIG9sZGVzdCB2b2ljZVxuXHQgICAgICAgICAgICB2YXIgb2xkZXN0ID0gdGhpcy5fdHJpZ2dlcnNbMF07XG5cdCAgICAgICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgdGhpcy5fdHJpZ2dlcnMubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl90cmlnZ2Vyc1tqXS5yZWxlYXNlIDwgb2xkZXN0LnJlbGVhc2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbGRlc3QgPSB0aGlzLl90cmlnZ2Vyc1tqXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBvbGRlc3QucmVsZWFzZSA9IEluZmluaXR5O1xuXHQgICAgICAgICAgICBvbGRlc3Qubm90ZSA9IEpTT04uc3RyaW5naWZ5KHZhbCk7XG5cdCAgICAgICAgICAgIG9sZGVzdC52b2ljZS50cmlnZ2VyQXR0YWNrKHZhbCwgdGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIGFmdGVyIHRoZSBzcGVjaWZpZWQgZHVyYXRpb25cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l8QXJyYXl9IG5vdGVzIFRoZSBub3RlcyB0byBwbGF5LiBBY2NlcHRzIGEgc2luZ2xlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlcXVlbmN5IG9yIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiB0aGUgZHVyYXRpb24gb2YgdGhlIG5vdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgaWYgbm8gdGltZSBpcyBnaXZlbiwgZGVmYXVsdHMgdG8gbm93XG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgYXR0YWNrICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciBhIGNob3JkIGZvciBhIGR1cmF0aW9uIG9mIGEgaGFsZiBub3RlXG5cdFx0ICogcG9seS50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJFYjNcIiwgXCJHNFwiLCBcIkM1XCJdLCBcIjJuXCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIHBhc3MgaW4gYW4gYXJyYXkgb2YgZHVyYXRpb25zIGFzIHdlbGxcblx0XHQgKiBwb2x5LnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkViM1wiLCBcIkc0XCIsIFwiQzVcIl0sIFtcIjJuXCIsIFwiNG5cIiwgXCI0blwiXSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAobm90ZXMsIGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sobm90ZXMsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KGR1cmF0aW9uKSAmJiBUb25lLmlzQXJyYXkobm90ZXMpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkID0gZHVyYXRpb25bTWF0aC5taW4oaSwgZHVyYXRpb24ubGVuZ3RoIC0gMSldO1xuXHQgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZShub3Rlc1tpXSwgdGltZSArIHRoaXMudG9TZWNvbmRzKGQpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2Uobm90ZXMsIHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBvZiB0aGUgbm90ZS4gVW5saWtlIG1vbm9waG9uaWMgaW5zdHJ1bWVudHMsXG5cdFx0ICogIGEgbm90ZSAob3IgYXJyYXkgb2Ygbm90ZXMpIG5lZWRzIHRvIGJlIHBhc3NlZCBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeXxBcnJheX0gbm90ZXMgVGhlIG5vdGVzIHRvIHBsYXkuIEFjY2VwdHMgYSBzaW5nbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVxdWVuY3kgb3IgYW4gYXJyYXkgb2YgZnJlcXVlbmNpZXMuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gIFdoZW4gdGhlIHJlbGVhc2Ugd2lsbCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHBvbHkudHJpZ2dlclJlbGVhc2UoW1wiQWIzXCIsIFwiQzRcIiwgXCJGNVwiXSwgXCIrMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAobm90ZXMsIHRpbWUpIHtcblx0ICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobm90ZXMpKSB7XG5cdCAgICAgICAgICAgIG5vdGVzID0gW25vdGVzXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIHZvaWNlXG5cdCAgICAgICAgICAgIHZhciBzdHJpbmdpZmllZCA9IEpTT04uc3RyaW5naWZ5KG5vdGVzW2ldKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgdiA9IDA7IHYgPCB0aGlzLl90cmlnZ2Vycy5sZW5ndGg7IHYrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSB0aGlzLl90cmlnZ2Vyc1t2XTtcblx0ICAgICAgICAgICAgICAgIGlmIChkZXNjLm5vdGUgPT09IHN0cmluZ2lmaWVkICYmIGRlc2MucmVsZWFzZSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBkZXNjLnZvaWNlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIGRlc2MucmVsZWFzZSA9IHRpbWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCBhIG1lbWJlci9hdHRyaWJ1dGUgb2YgdGhlIHZvaWNlcy5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R8c3RyaW5nfSBwYXJhbXNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByYW1wVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwb2x5LnNldCh7XG5cdFx0ICogXHRcImZpbHRlclwiIDoge1xuXHRcdCAqIFx0XHRcInR5cGVcIiA6IFwiaGlnaHBhc3NcIlxuXHRcdCAqIFx0fSxcblx0XHQgKiBcdFwiZW52ZWxvcGVcIiA6IHtcblx0XHQgKiBcdFx0XCJhdHRhY2tcIiA6IDAuMjVcblx0XHQgKiBcdH1cblx0XHQgKiB9KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocGFyYW1zLCB2YWx1ZSwgcmFtcFRpbWUpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudm9pY2VzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldLnNldChwYXJhbXMsIHZhbHVlLCByYW1wVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHN5bnRoJ3MgYXR0cmlidXRlcy4gR2l2ZW4gbm8gYXJndW1lbnRzIGdldFxuXHRcdCAqICB3aWxsIHJldHVybiBhbGwgYXZhaWxhYmxlIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nXG5cdFx0ICogIHZhbHVlcy4gUGFzcyBpbiBhIHNpbmdsZSBhdHRyaWJ1dGUgdG8gcmV0cmlldmUgb3IgYW4gYXJyYXlcblx0XHQgKiAgb2YgYXR0cmlidXRlcy4gVGhlIGF0dHJpYnV0ZSBzdHJpbmdzIGNhbiBhbHNvIGluY2x1ZGUgYSBcIi5cIlxuXHRcdCAqICB0byBhY2Nlc3MgZGVlcGVyIHByb3BlcnRpZXMuXG5cdFx0ICogIEBwYXJhbSB7QXJyYXk9fSBwYXJhbXMgdGhlIHBhcmFtZXRlcnMgdG8gZ2V0LCBvdGhlcndpc2Ugd2lsbCByZXR1cm5cblx0XHQgKiAgXHRcdFx0XHRcdCAgIGFsbCBhdmFpbGFibGUuXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZvaWNlc1swXS5nZXQocGFyYW1zKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIGFsbCB0aGUgY3VycmVudGx5IGFjdGl2ZSB2b2ljZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBub3RlcyBzaG91bGQgYmUgcmVsZWFzZWQuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUucmVsZWFzZUFsbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdHJpZ2dlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGRlc2MgPSB0aGlzLl90cmlnZ2Vyc1tpXTtcblx0ICAgICAgICAgICAgaWYgKGRlc2MucmVsZWFzZSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGRlc2MucmVsZWFzZSA9IHRpbWU7XG5cdCAgICAgICAgICAgICAgICBkZXNjLnZvaWNlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudm9pY2VzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy52b2ljZXNbaV0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZGV0dW5lJyk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvaWNlcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlcnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbWF4aW11bSBudW1iZXIgb2Ygbm90ZXMgdGhhdCBjYW4gYmUgYWxsb2NhdGVkXG5cdFx0ICogIHRvIGEgcG9seXN5bnRoLlxuXHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGguTUFYX1BPTFlQSE9OWSA9IDIwO1xuXHQgICAgcmV0dXJuIFRvbmUuUG9seVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgQXV0b21hdGljYWxseSBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIHNldCBvZiBwaXRjaGVkIHNhbXBsZXMuIFBhc3MgaW4gYW4gb2JqZWN0IHdoaWNoIG1hcHMgdGhlIG5vdGUncyBwaXRjaCBvciBtaWRpIHZhbHVlIHRvIHRoZSB1cmwsIHRoZW4geW91IGNhbiB0cmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2Ugb2YgdGhhdCBub3RlIGxpa2Ugb3RoZXIgaW5zdHJ1bWVudHMuIEJ5IGF1dG9tYXRpY2FsbHkgcmVwaXRjaGluZyB0aGUgc2FtcGxlcywgaXQgaXMgcG9zc2libGUgdG8gcGxheSBwaXRjaGVzIHdoaWNoIHdlcmUgbm90IGV4cGxpY2l0bHkgaW5jbHVkZWQgd2hpY2ggY2FuIHNhdmUgbG9hZGluZyB0aW1lLlxuXHRcdCAqICAgICAgICBGb3Igc2FtcGxlIG9yIGJ1ZmZlciBwbGF5YmFjayB3aGVyZSByZXBpdGNoaW5nIGlzIG5vdCBuZWNlc3NhcnksIHVzZSBbVG9uZS5QbGF5ZXJdKGh0dHBzOi8vdG9uZWpzLmdpdGh1Yi5pby9kb2NzL1BsYXllcikuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNhbXBsZXMgQW4gb2JqZWN0IG9mIHNhbXBsZXMgbWFwcGluZyBlaXRoZXIgTWlkaVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgTnVtYmVycyBvciBTY2llbnRpZmljIFBpdGNoIE5vdGF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHVybCBvZiB0aGF0IHNhbXBsZS5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhbGwgb2YgdGhlIHNhbXBsZXMgYXJlIGxvYWRlZC5cblx0XHQgKiBAcGFyYW0ge1N0cmluZz19IGJhc2VVcmwgVGhlIHJvb3QgVVJMIG9mIGFsbCBvZiB0aGUgc2FtcGxlcywgd2hpY2ggaXMgcHJlcGVuZGVkIHRvIGFsbCB0aGUgVVJMcy5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBzYW1wbGVyID0gbmV3IFRvbmUuU2FtcGxlcih7XG5cdFx0ICogXHRcIkMzXCIgOiBcInBhdGgvdG8vQzMubXAzXCIsXG5cdFx0ICogXHRcIkQjM1wiIDogXCJwYXRoL3RvL0RzaGFycDMubXAzXCIsXG5cdFx0ICogXHRcIkYjM1wiIDogXCJwYXRoL3RvL0ZzaGFycDMubXAzXCIsXG5cdFx0ICogXHRcIkEzXCIgOiBcInBhdGgvdG8vQTMubXAzXCIsXG5cdFx0ICogfSwgZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vc2FtcGxlciB3aWxsIHJlcGl0Y2ggdGhlIGNsb3Nlc3Qgc2FtcGxlXG5cdFx0ICogXHRzYW1wbGVyLnRyaWdnZXJBdHRhY2soXCJEM1wiKVxuXHRcdCAqIH0pXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlciA9IGZ1bmN0aW9uICh1cmxzKSB7XG5cdCAgICAgICAgLy8gc2hpZnQgYXJndW1lbnRzIG92ZXIgb25lLiBUaG9zZSBhcmUgdGhlIHJlbWFpbmRlciBvZiB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3MsIFtcblx0ICAgICAgICAgICAgJ29ubG9hZCcsXG5cdCAgICAgICAgICAgICdiYXNlVXJsJ1xuXHQgICAgICAgIF0sIFRvbmUuU2FtcGxlcik7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgdmFyIHVybE1hcCA9IHt9O1xuXHQgICAgICAgIGZvciAodmFyIG5vdGUgaW4gdXJscykge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc05vdGUobm90ZSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vY29udmVydCB0aGUgbm90ZSBuYW1lIHRvIE1JRElcblx0ICAgICAgICAgICAgICAgIHZhciBtaWQgPSBUb25lLkZyZXF1ZW5jeShub3RlKS50b01pZGkoKTtcblx0ICAgICAgICAgICAgICAgIHVybE1hcFttaWRdID0gdXJsc1tub3RlXTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICghaXNOYU4ocGFyc2VGbG9hdChub3RlKSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGlmIGl0J3MgbnVtYmVycyBhc3N1bWUgaXQncyBtaWRpXG5cdCAgICAgICAgICAgICAgICB1cmxNYXBbbm90ZV0gPSB1cmxzW25vdGVdO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlNhbXBsZXI6IHVybCBrZXlzIG11c3QgYmUgdGhlIG5vdGVcXCdzIHBpdGNoJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgc3RvcmVkIGFuZCBsb2FkZWQgYnVmZmVyc1xuXHRcdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyc31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0gbmV3IFRvbmUuQnVmZmVycyh1cmxNYXAsIG9wdGlvbnMub25sb2FkLCBvcHRpb25zLmJhc2VVcmwpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG9iamVjdCBvZiBhbGwgY3VycmVudGx5IHBsYXlpbmcgQnVmZmVyU291cmNlc1xuXHRcdFx0ICogQHR5cGUge09iamVjdH1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0ge307XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZW52ZWxvcGUgYXBwbGllZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGUuXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXR0YWNrID0gb3B0aW9ucy5hdHRhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZW52ZWxvcGUgYXBwbGllZCB0byB0aGUgZW5kIG9mIHRoZSBlbnZlbG9wZS5cblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gb3B0aW9ucy5yZWxlYXNlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2FtcGxlciwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEBjb25zdFxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgYXR0YWNrOiAwLFxuXHQgICAgICAgIHJlbGVhc2U6IDAuMSxcblx0ICAgICAgICBvbmxvYWQ6IFRvbmUubm9PcCxcblx0ICAgICAgICBiYXNlVXJsOiAnJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2UgaW4gc3RlcHMgYmV0d2VlbiB0aGUgZ2l2ZW4gbWlkaSBub3RlIGF0IHRoZSBjbG9zZXRzIHNhbXBsZS5cblx0XHQgKiBAcGFyYW0gIHtNaWRpfSBtaWRpXG5cdFx0ICogQHJldHVybiB7SW50ZXJ2YWx9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUuX2ZpbmRDbG9zZXN0ID0gZnVuY3Rpb24gKG1pZGkpIHtcblx0ICAgICAgICAvL3NlYXJjaGVzIHdpdGhpbiA4IG9jdGF2ZXMgb2YgdGhlIGdpdmVuIG1pZGkgbm90ZVxuXHQgICAgICAgIHZhciBNQVhfSU5URVJWQUwgPSA5Njtcblx0ICAgICAgICB2YXIgaW50ZXJ2YWwgPSAwO1xuXHQgICAgICAgIHdoaWxlIChpbnRlcnZhbCA8IE1BWF9JTlRFUlZBTCkge1xuXHQgICAgICAgICAgICAvLyBjaGVjayBhYm92ZSBhbmQgYmVsb3dcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcnMuaGFzKG1pZGkgKyBpbnRlcnZhbCkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAtaW50ZXJ2YWw7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYnVmZmVycy5oYXMobWlkaSAtIGludGVydmFsKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGludGVydmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGludGVydmFsKys7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gcGxheVxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBXaGVuIHRvIHBsYXkgdGhlIG5vdGVcblx0XHQgKiBAcGFyYW0gIHtOb3JtYWxSYW5nZT19IHZlbG9jaXR5IFRoZSB2ZWxvY2l0eSB0byBwbGF5IHRoZSBzYW1wbGUgYmFjay5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9ICAgICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHZhciBtaWRpID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgLy8gZmluZCB0aGUgY2xvc2VzdCBub3RlIHBpdGNoXG5cdCAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSB0aGlzLl9maW5kQ2xvc2VzdChtaWRpKTtcblx0ICAgICAgICBpZiAoZGlmZmVyZW5jZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvc2VzdE5vdGUgPSBtaWRpIC0gZGlmZmVyZW5jZTtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuX2J1ZmZlcnMuZ2V0KGNsb3Nlc3ROb3RlKTtcblx0ICAgICAgICAgICAgLy8gcGxheSB0aGF0IG5vdGVcblx0ICAgICAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBUb25lLkJ1ZmZlclNvdXJjZSh7XG5cdCAgICAgICAgICAgICAgICAnYnVmZmVyJzogYnVmZmVyLFxuXHQgICAgICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGRpZmZlcmVuY2UpLFxuXHQgICAgICAgICAgICAgICAgJ2ZhZGVJbic6IHRoaXMuYXR0YWNrLFxuXHQgICAgICAgICAgICAgICAgJ2ZhZGVPdXQnOiB0aGlzLnJlbGVhc2UsXG5cdCAgICAgICAgICAgICAgICAnY3VydmUnOiAnZXhwb25lbnRpYWwnXG5cdCAgICAgICAgICAgIH0pLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RhcnQodGltZSwgMCwgYnVmZmVyLmR1cmF0aW9uLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgYWN0aXZlIHNvdXJjZXNcblx0ICAgICAgICAgICAgaWYgKCFUb25lLmlzQXJyYXkodGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0gPSBbXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLnB1c2goe1xuXHQgICAgICAgICAgICAgICAgbm90ZTogbWlkaSxcblx0ICAgICAgICAgICAgICAgIHNvdXJjZTogc291cmNlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHJlbGVhc2UuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFx0V2hlbiB0byByZWxlYXNlIHRoZSBub3RlLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn1cdHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAobm90ZSwgdGltZSkge1xuXHQgICAgICAgIHZhciBtaWRpID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgLy8gZmluZCB0aGUgbm90ZVxuXHQgICAgICAgIGlmICh0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldICYmIHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0ubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLnNoaWZ0KCkuc291cmNlO1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUgKyB0aGlzLnJlbGVhc2UsIHRoaXMucmVsZWFzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlbGVhc2UgYWxsIGN1cnJlbnRseSBhY3RpdmUgbm90ZXMuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFx0V2hlbiB0byByZWxlYXNlIHRoZSBub3Rlcy5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9XHR0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnJlbGVhc2VBbGwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBub3RlIGluIHRoaXMuX2FjdGl2ZVNvdXJjZXMpIHtcblx0ICAgICAgICAgICAgdmFyIHNvdXJjZXMgPSB0aGlzLl9hY3RpdmVTb3VyY2VzW25vdGVdO1xuXHQgICAgICAgICAgICB3aGlsZSAoc291cmNlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzLnNoaWZ0KCkuc291cmNlO1xuXHQgICAgICAgICAgICAgICAgc291cmNlLnN0b3AodGltZSArIHRoaXMucmVsZWFzZSwgdGhpcy5yZWxlYXNlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlIHRoZSBhdHRhY2sgcGhhc2UsIHRoZW4gYWZ0ZXIgdGhlIGR1cmF0aW9uLCBpbnZva2UgdGhlIHJlbGVhc2UuXG5cdFx0ICogQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byBwbGF5XG5cdFx0ICogQHBhcmFtICB7VGltZX0gZHVyYXRpb24gVGhlIHRpbWUgdGhlIG5vdGUgc2hvdWxkIGJlIGhlbGRcblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSAgICAgV2hlbiB0byBzdGFydCB0aGUgYXR0YWNrXG5cdFx0ICogQHBhcmFtICB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIGF0dGFja1xuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn0gICAgICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlLCBkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKG5vdGUsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKG5vdGUsIHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIG5vdGUgdG8gdGhlIHNhbXBsZXIuXG5cdFx0ICogIEBwYXJhbSAge05vdGV8TWlkaX0gICBub3RlICAgICAgVGhlIGJ1ZmZlcidzIHBpdGNoLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8VG9uZS5CdWZmZXJ8QXVkaW9idWZmZXJ9ICB1cmwgIEVpdGhlciB0aGUgdXJsIG9mIHRoZSBidWZlcixcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGFkZGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChub3RlLCB1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOb3RlKG5vdGUpKSB7XG5cdCAgICAgICAgICAgIC8vY29udmVydCB0aGUgbm90ZSBuYW1lIHRvIE1JRElcblx0ICAgICAgICAgICAgdmFyIG1pZCA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzLmFkZChtaWQsIHVybCwgY2FsbGJhY2spO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKHBhcnNlRmxvYXQobm90ZSkpKSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGlmIGl0J3MgbnVtYmVycyBhc3N1bWUgaXQncyBtaWRpXG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnMuYWRkKG5vdGUsIHVybCwgY2FsbGJhY2spO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5TYW1wbGVyOiBub3RlIG11c3QgYmUgdGhlIG5vdGVcXCdzIHBpdGNoLiBJbnN0ZWFkIGdvdCAnICsgbm90ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2FtcGxlciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNhbXBsZXIucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVycy5sb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIG1pZGkgaW4gdGhpcy5fYWN0aXZlU291cmNlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5zb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2FtcGxlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCFPc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0UGVyaW9kaWNXYXZlKSB7XG5cdCAgICAgICAgICAgIE9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zZXRQZXJpb2RpY1dhdmUgPSBPc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0V2F2ZVRhYmxlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlUGVyaW9kaWNXYXZlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlUGVyaW9kaWNXYXZlID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVXYXZlVGFibGU7XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTWFwcyBhIE5vcm1hbFJhbmdlIFswLCAxXSB0byBhbiBBdWRpb1JhbmdlIFstMSwgMV0uIFxuXHRcdCAqICAgICAgICAgU2VlIGFsc28gVG9uZS5BdWRpb1RvR2Fpbi4gXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGcyYSA9IG5ldyBUb25lLkdhaW5Ub0F1ZGlvKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW5Ub0F1ZGlvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHgpICogMiAtIDE7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HYWluVG9BdWRpbywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HYWluVG9BdWRpb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluVG9BdWRpby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ub3JtLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ub3JtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HYWluVG9BdWRpbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE5vcm1hbGl6ZSB0YWtlcyBhbiBpbnB1dCBtaW4gYW5kIG1heCBhbmQgbWFwcyBpdCBsaW5lYXJseSB0byBOb3JtYWxSYW5nZSBbMCwxXVxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gaW5wdXRNaW4gdGhlIG1pbiBpbnB1dCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gaW5wdXRNYXggdGhlIG1heCBpbnB1dCB2YWx1ZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBub3JtID0gbmV3IFRvbmUuTm9ybWFsaXplKDIsIDQpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMykuY29ubmVjdChub3JtKTtcblx0XHQgKiAvL291dHB1dCBvZiBub3JtIGlzIDAuNS4gXG5cdFx0ICovXG5cdCAgICBUb25lLk5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChpbnB1dE1pbiwgaW5wdXRNYXgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWluIGlucHV0IHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5wdXRNaW4gPSBUb25lLmRlZmF1bHRBcmcoaW5wdXRNaW4sIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtYXggaW5wdXQgdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnB1dE1heCA9IFRvbmUuZGVmYXVsdEFyZyhpbnB1dE1heCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3VidHJhY3QgdGhlIG1pbiBmcm9tIHRoZSBpbnB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ViID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLkFkZCgwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBkaXZpZGUgYnkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgaW5wdXQgYW5kIG91dHB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kaXYgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk11bHRpcGx5KDEpO1xuXHQgICAgICAgIHRoaXMuX3N1Yi5jb25uZWN0KHRoaXMuX2Rpdik7XG5cdCAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5vcm1hbGl6ZSwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIHZhbHVlIHRoZSBpbnB1dCBzaWduYWwgd2lsbCByZWFjaC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Ob3JtYWxpemUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dE1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9pbnB1dE1pbiA9IG1pbjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIHZhbHVlIHRoZSBpbnB1dCBzaWduYWwgd2lsbCByZWFjaC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Ob3JtYWxpemUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dE1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9pbnB1dE1heCA9IG1heDtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXQgdGhlIHZhbHVlc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLl9zZXRSYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zdWIudmFsdWUgPSAtdGhpcy5faW5wdXRNaW47XG5cdCAgICAgICAgdGhpcy5fZGl2LnZhbHVlID0gMSAvICh0aGlzLl9pbnB1dE1heCAtIHRoaXMuX2lucHV0TWluKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9ybWFsaXplfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdWIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGl2LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kaXYgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk5vcm1hbGl6ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwgZXh0ZW5kcyBUb25lLlNpZ25hbCwgYnV0IGFkZHMgdGhlIGFiaWxpdHkgdG8gc3luY2hyb25pemUgdGhlIHNpZ25hbCB0byB0aGUgc2lnbmFsIHRvIHRoZSBUb25lLlRyYW5zcG9ydFxuXHRcdCAqIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSByZWFsIHNpZ25hbCBvdXRwdXRcblx0XHRcdCAqIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IHRoaXMuX291dHB1dFNpZyA9IG5ldyBUb25lLlNpZ25hbCh0aGlzLl9pbml0aWFsVmFsdWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogS2VlcCB0cmFjayBvZiB0aGUgbGFzdCB2YWx1ZS4gKHNtYWxsIG9wdGltaXphdGlvbilcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGFzdFZhbCA9IHRoaXMudmFsdWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZXZlbnQgaWQgb2YgdGhlIHRpY2sgdXBkYXRlIGxvb3Bcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQodGhpcy5fb25UaWNrLmJpbmQodGhpcyksICcxaScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogQSBib3VuZCB2ZXJzaW9uIG9mIHRoZSBhbmNob3IgdmFsdWUgbWV0aG9kc1xuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JpbmRBbmNob3JWYWx1ZSA9IHRoaXMuX2FuY2hvclZhbHVlLmJpbmQodGhpcyk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub24oJ3N0YXJ0IHN0b3AgcGF1c2UnLCB0aGlzLl9iaW5kQW5jaG9yVmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5tZW1vcnkgPSBJbmZpbml0eTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiBDYWxsYmFjayB3aGljaCBpcyBpbnZva2VkIGV2ZXJ5IHRpY2suXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLl9vblRpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB2YWwgPSB0aGlzLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnNlY29uZHMpO1xuXHQgICAgICAgIGlmICh0aGlzLl9sYXN0VmFsICE9PSB2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGFzdFZhbCA9IHZhbDtcblx0ICAgICAgICAgICAgLy9hcHByb3hpbWF0ZSByYW1wIGN1cnZlcyB3aXRoIGxpbmVhciByYW1wc1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXRTaWcubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQW5jaG9yIHRoZSB2YWx1ZSBhdCB0aGUgc3RhcnQgYW5kIHN0b3Agb2YgdGhlIFRyYW5zcG9ydFxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgIHRoaXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuX2FuY2hvclZhbHVlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICB0aGlzLl9sYXN0VmFsID0gdmFsO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZy5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3V0cHV0U2lnLnNldFZhbHVlQXRUaW1lKHZhbCwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBUaGlzIHdpbGxcblx0XHQgKiAgcmV0dXJuIHRoZSB1bmNvbnZlcnRlZCAocmF3KSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gIHRpbWUgIFRoZSB0aW1lIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBUaGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFNldCB0aGUgb3V0cHV0IG9mIHRoZSBzaWduYWwgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGFuZ2UgdG8gYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSB0aW1lICBUaGUgdGltZSB0byBjaGFuZ2UgdGhlIHNpZ25hbFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTGluZWFyIHJhbXAgdG8gdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwb2ludCB0byB0aGUgZ2l2ZW4gdmFsdWVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGFuZ2UgdG8gYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSB0aW1lICBUaGUgdGltZSB0byBjaGFuZ2UgdGhlIHNpZ25hbFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRXhwb25lbnRpYWwgcmFtcCB0byB0aGUgZ2l2ZW4gdmFsdWUgZnJvbSB0aGUgcHJldmlvdXMgc2NoZWR1bGVkIHBvaW50IHRvIHRoZSBnaXZlbiB2YWx1ZVxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoYW5nZSB0byBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9IHRpbWUgIFRoZSB0aW1lIHRvIGNoYW5nZSB0aGUgc2lnbmFsXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoXG5cdFx0ICogIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRpbWUgY29uc3RhbnQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGltZUNvbnN0YW50XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25zdGFudCkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRUYXJnZXRBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWxzIGFsbCBzY2hlZHVsZWQgcGFyYW1ldGVyIGNoYW5nZXMgd2l0aCB0aW1lcyBncmVhdGVyIHRoYW4gb3Jcblx0XHQgKiAgZXF1YWwgdG8gc3RhcnRUaW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyA9IGZ1bmN0aW9uIChzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVkVmFsdWVzLmNhbGwodGhpcywgc3RhcnRUaW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IGFuIGFycmF5IG9mIGFyYml0cmFyeSB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWUgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKiAgQHBhcmFtIHtGbG9hdDMyQXJyYXl9IHZhbHVlc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGR1cmF0aW9uXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzY2FsaW5nPTFdIElmIHRoZSB2YWx1ZXMgaW4gdGhlIGN1cnZlIHNob3VsZCBiZSBzY2FsZWQgYnkgc29tZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLnNldFZhbHVlQ3VydmVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWVzLCBzdGFydFRpbWUsIGR1cmF0aW9uLCBzY2FsaW5nKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSBUb25lLlRyYW5zcG9ydFRpbWUoZHVyYXRpb24pO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUN1cnZlQXRUaW1lLmNhbGwodGhpcywgdmFsdWVzLCBzdGFydFRpbWUsIGR1cmF0aW9uLCBzY2FsaW5nKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhpcyBpcyBzaW1pbGFyIHRvIFtjYW5jZWxTY2hlZHVsZWRWYWx1ZXNdKCNjYW5jZWxTY2hlZHVsZWRWYWx1ZXMpIGV4Y2VwdFxuXHRcdCAqICBpdCBob2xkcyB0aGUgYXV0b21hdGVkIHZhbHVlIGF0IHRpbWUgdW50aWwgdGhlIG5leHQgYXV0b21hdGVkIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxBbmRIb2xkQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5TaWduYWwucHJvdG90eXBlLmNhbmNlbEFuZEhvbGRBdFRpbWUuY2FsbCh0aGlzLCBUb25lLlRyYW5zcG9ydFRpbWUodGltZSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX3N5bmNlZCk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub2ZmKCdzdGFydCBzdG9wIHBhdXNlJywgdGhpcy5fc3luY2VkQ2FsbGJhY2spO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwoMCk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWw7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBUb25lLkdyYWluUGxheWVyIGltcGxlbWVudHMgW2dyYW51bGFyIHN5bnRoZXNpc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JhbnVsYXJfc3ludGhlc2lzKS5cblx0XHQgKiAgICAgICAgR3JhbnVsYXIgU3ludGhlc2lzIGVuYWJsZXMgeW91IHRvIGFkanVzdCBwaXRjaCBhbmQgcGxheWJhY2sgcmF0ZSBpbmRlcGVuZGVudGx5LiBUaGUgZ3JhaW5TaXplIGlzIHRoZVxuXHRcdCAqICAgICAgICBhbW91bnQgb2YgdGltZSBlYWNoIHNtYWxsIGNodW5rIG9mIGF1ZGlvIGlzIHBsYXllZCBmb3IgYW5kIHRoZSBvdmVybGFwIGlzIHRoZVxuXHRcdCAqICAgICAgICBhbW91bnQgb2YgY3Jvc3NmYWRpbmcgdHJhbnNpdGlvbiB0aW1lIGJldHdlZW4gc3VjY2Vzc2l2ZSBncmFpbnMuXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfFRvbmUuQnVmZmVyfSB1cmxcdFRoZSB1cmwgdG8gbG9hZCwgb3IgdGhlIFRvbmUuQnVmZmVyIHRvIHBsYXkuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3VybCcsXG5cdCAgICAgICAgICAgICdvbmxvYWQnXG5cdCAgICAgICAgXSwgVG9uZS5HcmFpblBsYXllcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXVkaW8gYnVmZmVyIGJlbG9uZ2luZyB0byB0aGUgcGxheWVyLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5CdWZmZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihvcHRpb25zLnVybCwgb3B0aW9ucy5vbmxvYWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENyZWF0ZSBhIHJlcGVhdGluZyB0aWNrIHRvIHNjaGVkdWxlXG5cdFx0XHQgKiAgdGhlIGdyYWlucy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ2xvY2t9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrID0gbmV3IFRvbmUuQ2xvY2sodGhpcy5fdGljay5iaW5kKHRoaXMpLCBvcHRpb25zLmdyYWluU2l6ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BFbmQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogQWxsIG9mIHRoZSBjdXJyZW50bHkgcGxheWluZyBCdWZmZXJTb3VyY2VzXG5cdFx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ3JhaW5TaXplID0gb3B0aW9ucy5ncmFpblNpemU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3ZlcmxhcCA9IG9wdGlvbnMub3ZlcmxhcDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBZGp1c3QgdGhlIHBpdGNoIGluZGVwZW5kZW50bHkgb2YgdGhlIHBsYXliYWNrUmF0ZS5cblx0XHRcdCAqICBAdHlwZSAge0NlbnRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvL3NldHVwXG5cdCAgICAgICAgdGhpcy5vdmVybGFwID0gb3B0aW9ucy5vdmVybGFwO1xuXHQgICAgICAgIHRoaXMubG9vcCA9IG9wdGlvbnMubG9vcDtcblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgICAgIHRoaXMuZ3JhaW5TaXplID0gb3B0aW9ucy5ncmFpblNpemU7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBvcHRpb25zLmxvb3BTdGFydDtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBvcHRpb25zLmxvb3BFbmQ7XG5cdCAgICAgICAgdGhpcy5yZXZlcnNlID0gb3B0aW9ucy5yZXZlcnNlO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdzdG9wJywgdGhpcy5fb25zdG9wLmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR3JhaW5QbGF5ZXIsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ292ZXJsYXAnOiAwLjEsXG5cdCAgICAgICAgJ2dyYWluU2l6ZSc6IDAuMixcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogMCxcblx0ICAgICAgICAncmV2ZXJzZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBsYXkgdGhlIGJ1ZmZlciBhdCB0aGUgZ2l2ZW4gc3RhcnRUaW1lLiBPcHRpb25hbGx5IGFkZCBhbiBvZmZzZXRcblx0XHQgKiAgYW5kL29yIGR1cmF0aW9uIHdoaWNoIHdpbGwgcGxheSB0aGUgYnVmZmVyIGZyb20gYSBwb3NpdGlvblxuXHRcdCAqICB3aXRoaW4gdGhlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR3JhaW5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogIEBtZXRob2Qgc3RhcnRcblx0XHQgKiAgQG5hbWUgc3RhcnRcblx0XHQgKi9cblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBzdGFydCBtZXRob2Rcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gb2Zmc2V0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0LCBkdXJhdGlvbikge1xuXHQgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29mZnNldCA9IG9mZnNldDtcblx0ICAgICAgICB0aGlzLl9jbG9jay5zdGFydCh0aW1lKTtcblx0ICAgICAgICBpZiAoZHVyYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbikpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlZCB3aGVuIHRoZSBjbG9jayBpcyBzdG9wcGVkXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl9vbnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vc3RvcCB0aGUgcGxheWVyc1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUsIDApO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2VkIG9uIGVhY2ggY2xvY2sgdGljay4gc2NoZWR1bGVkIGEgbmV3XG5cdFx0ICogIGdyYWluIGF0IHRoaXMgdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgZmFkZUluID0gdGhpcy5fb2Zmc2V0IDwgdGhpcy5fb3ZlcmxhcCA/IDAgOiB0aGlzLl9vdmVybGFwO1xuXHQgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2Uoe1xuXHQgICAgICAgICAgICAnYnVmZmVyJzogdGhpcy5idWZmZXIsXG5cdCAgICAgICAgICAgICdmYWRlSW4nOiBmYWRlSW4sXG5cdCAgICAgICAgICAgICdmYWRlT3V0JzogdGhpcy5fb3ZlcmxhcCxcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0aGlzLmxvb3AsXG5cdCAgICAgICAgICAgICdsb29wU3RhcnQnOiB0aGlzLl9sb29wU3RhcnQsXG5cdCAgICAgICAgICAgICdsb29wRW5kJzogdGhpcy5fbG9vcEVuZCxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKHRoaXMuZGV0dW5lIC8gMTAwKVxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHNvdXJjZS5zdGFydCh0aW1lLCB0aGlzLl9vZmZzZXQpO1xuXHQgICAgICAgIHRoaXMuX29mZnNldCArPSB0aGlzLmdyYWluU2l6ZTtcblx0ICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lICsgdGhpcy5ncmFpblNpemUpO1xuXHQgICAgICAgIC8vYWRkIGl0IHRvIHRoZSBhY3RpdmUgc291cmNlc1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMucHVzaChzb3VyY2UpO1xuXHQgICAgICAgIC8vcmVtb3ZlIGl0IHdoZW4gaXQncyBkb25lXG5cdCAgICAgICAgc291cmNlLm9uZW5kZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2FjdGl2ZVNvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXHQgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEp1bXAgdG8gYSBzcGVjaWZpYyB0aW1lIGFuZCBwbGF5IGl0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgb2Zmc2V0ICBUaGUgb2Zmc2V0IHRvIGp1bXAgdG8uXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHRpbWUgV2hlbiB0byBtYWtlIHRoZSBqdW1wLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5HcmFpblBsYXllcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLnNlZWsgPSBmdW5jdGlvbiAob2Zmc2V0LCB0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLl90aWNrKHRoaXMudG9TZWNvbmRzKHRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgc2FtcGxlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB0aGlzLmdyYWluU2l6ZSA9IHRoaXMuX2dyYWluU2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBsb29wIHN0YXJ0IHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wU3RhcnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGxvb3AgZW5kIHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3BFbmQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkaXJlY3Rpb24gdGhlIGJ1ZmZlciBzaG91bGQgcGxheSBpblxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIHJldmVyc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ3JldmVyc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlci5yZXZlcnNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmV2KSB7XG5cdCAgICAgICAgICAgIHRoaXMuYnVmZmVyLnJldmVyc2UgPSByZXY7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2l6ZSBvZiBlYWNoIGNodW5rIG9mIGF1ZGlvIHRoYXQgdGhlXG5cdFx0ICogYnVmZmVyIGlzIGNob3BwZWQgaW50byBhbmQgcGxheWVkIGJhY2sgYXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgZ3JhaW5TaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdncmFpblNpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ncmFpblNpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dyYWluU2l6ZSA9IHRoaXMudG9TZWNvbmRzKHNpemUpO1xuXHQgICAgICAgICAgICB0aGlzLl9jbG9jay5mcmVxdWVuY3kudmFsdWUgPSB0aGlzLl9wbGF5YmFja1JhdGUgLyB0aGlzLl9ncmFpblNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGlzIGlzIHRoZSBkdXJhdGlvbiBvZiB0aGUgY3Jvc3MtZmFkZSBiZXR3ZWVuXG5cdFx0ICogc3VjZXNzaXZlIGdyYWlucy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBvdmVybGFwXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdvdmVybGFwJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxhcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3ZlcmxhcCA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLkdyYWluUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jbG9jay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR3JhaW5QbGF5ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5QbGF5ZXIgaXMgYW4gYXVkaW8gZmlsZSBwbGF5ZXIgd2l0aCBzdGFydCwgbG9vcCwgYW5kIHN0b3AgZnVuY3Rpb25zLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfEF1ZGlvQnVmZmVyfSB1cmwgRWl0aGVyIHRoZSBBdWRpb0J1ZmZlciBvciB0aGUgdXJsIGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0byBsb2FkIHRoZSBBdWRpb0J1ZmZlclxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIFRoZSBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWNvbW1lbmRlZCB0byB1c2UgVG9uZS5CdWZmZXIub24oJ2xvYWQnKSBpbnN0ZWFkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwbGF5ZXIgPSBuZXcgVG9uZS5QbGF5ZXIoXCIuL3BhdGgvdG8vc2FtcGxlLm1wM1wiKS50b01hc3RlcigpO1xuXHRcdCAqIC8vcGxheSBhcyBzb29uIGFzIHRoZSBidWZmZXIgaXMgbG9hZGVkXG5cdFx0ICogcGxheWVyLmF1dG9zdGFydCA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllciA9IGZ1bmN0aW9uICh1cmwpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucztcblx0ICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIgJiYgdXJsLmxvYWRlZCkge1xuXHQgICAgICAgICAgICB1cmwgPSB1cmwuZ2V0KCk7XG5cdCAgICAgICAgICAgIG9wdGlvbnMgPSBUb25lLlBsYXllci5kZWZhdWx0cztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICAgICAgXSwgVG9uZS5QbGF5ZXIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIHRoZSBmaWxlIHNob3VsZCBwbGF5IGFzIHNvb25cblx0XHRcdCAqICBhcyB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy93aWxsIHBsYXkgYXMgc29vbiBhcyBpdCdzIGxvYWRlZFxuXHRcdFx0ICogdmFyIHBsYXllciA9IG5ldyBUb25lLlBsYXllcih7XG5cdFx0XHQgKiBcdFwidXJsXCIgOiBcIi4vcGF0aC90by9zYW1wbGUubXAzXCIsXG5cdFx0XHQgKiBcdFwiYXV0b3N0YXJ0XCIgOiB0cnVlLFxuXHRcdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXV0b3N0YXJ0ID0gb3B0aW9ucy5hdXRvc3RhcnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGJ1ZmZlclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKHtcblx0ICAgICAgICAgICAgJ3VybCc6IG9wdGlvbnMudXJsLFxuXHQgICAgICAgICAgICAnb25sb2FkJzogdGhpcy5fb25sb2FkLmJpbmQodGhpcywgb3B0aW9ucy5vbmxvYWQpLFxuXHQgICAgICAgICAgICAncmV2ZXJzZSc6IG9wdGlvbnMucmV2ZXJzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmICh1cmwgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KHVybCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGlmIHRoZSBidWZmZXIgc2hvdWxkIGxvb3Agb25jZSBpdCdzIG92ZXJcblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcCA9IG9wdGlvbnMubG9vcDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpZiAnbG9vcCcgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBzdGFydCBhdCB0aGlzIHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IG9wdGlvbnMubG9vcFN0YXJ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGlmICdsb29wJyBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIGVuZCBhdCB0aGlzIHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BFbmQgPSBvcHRpb25zLmxvb3BFbmQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBsYXliYWNrIHJhdGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIGFjdGl2ZSBidWZmZXIgc291cmNlIG5vZGVzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5PFRvbmUuQnVmZmVyU291cmNlPn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBlbGFwc2VkIHRpbWUgY291bnRlci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaWNrU291cmNlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IG5ldyBUb25lLlRpY2tTb3VyY2Uob3B0aW9ucy5wbGF5YmFja1JhdGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlSW4gdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlSW4gPSBvcHRpb25zLmZhZGVJbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZU91dCB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVPdXQgPSBvcHRpb25zLmZhZGVPdXQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QbGF5ZXIsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2F1dG9zdGFydCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogMCxcblx0ICAgICAgICAncmV0cmlnZ2VyJzogZmFsc2UsXG5cdCAgICAgICAgJ3JldmVyc2UnOiBmYWxzZSxcblx0ICAgICAgICAnZmFkZUluJzogMCxcblx0ICAgICAgICAnZmFkZU91dCc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTG9hZCB0aGUgYXVkaW8gZmlsZSBhcyBhbiBhdWRpbyBidWZmZXIuXG5cdFx0ICogIERlY29kZXMgdGhlIGF1ZGlvIGFzeW5jaHJvbm91c2x5IGFuZCBpbnZva2VzXG5cdFx0ICogIHRoZSBjYWxsYmFjayBvbmNlIHRoZSBhdWRpbyBidWZmZXIgbG9hZHMuXG5cdFx0ICogIE5vdGU6IHRoaXMgZG9lcyBub3QgbmVlZCB0byBiZSBjYWxsZWQgaWYgYSB1cmxcblx0XHQgKiAgd2FzIHBhc3NlZCBpbiB0byB0aGUgY29uc3RydWN0b3IuIE9ubHkgdXNlIHRoaXNcblx0XHQgKiAgaWYgeW91IHdhbnQgdG8gbWFudWFsbHkgbG9hZCBhIG5ldyB1cmwuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgdXJsIG9mIHRoZSBidWZmZXIgdG8gbG9hZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIEZpbGV0eXBlIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGludm9rZSBvbmNlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNhbXBsZSBpcyBsb2FkZWQuXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubG9hZCh1cmwsIHRoaXMuX29ubG9hZC5iaW5kKHRoaXMsIGNhbGxiYWNrKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW50ZXJuYWwgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9vbmxvYWQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBjYWxsYmFjayA9IFRvbmUuZGVmYXVsdEFyZyhjYWxsYmFjaywgVG9uZS5ub09wKTtcblx0ICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5hdXRvc3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5zdGFydCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnRlcm5hbCBjYWxsYmFjayB3aGVuIHRoZSBidWZmZXIgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX29uU291cmNlRW5kID0gZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2FjdGl2ZVNvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGxheSB0aGUgYnVmZmVyIGF0IHRoZSBnaXZlbiBzdGFydFRpbWUuIE9wdGlvbmFsbHkgYWRkIGFuIG9mZnNldFxuXHRcdCAqICBhbmQvb3IgZHVyYXRpb24gd2hpY2ggd2lsbCBwbGF5IHRoZSBidWZmZXIgZnJvbSBhIHBvc2l0aW9uXG5cdFx0ICogIHdpdGhpbiB0aGUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb24uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3N0YXJ0VGltZT1ub3ddIFdoZW4gdGhlIHBsYXllciBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtvZmZzZXQ9MF0gVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgc2FtcGxlIHNob3VsZCBwbGF5LiBJZiBubyBkdXJhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnaXZlbiwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmdWxsIGxlbmd0aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2FtcGxlIChtaW51cyBhbnkgb2Zmc2V0KVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqICBAbWV0aG9kIHN0YXJ0XG5cdFx0ICogIEBuYW1lIHN0YXJ0XG5cdFx0ICovXG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgb2Zmc2V0LCBkdXJhdGlvbikge1xuXHQgICAgICAgIC8vaWYgaXQncyBhIGxvb3AgdGhlIGRlZmF1bHQgb2Zmc2V0IGlzIHRoZSBsb29wc3RhcnQgcG9pbnRcblx0ICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCB0aGlzLl9sb29wU3RhcnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IG9mZnNldCBpcyAwXG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NvbXB1dGUgdGhlIHZhbHVlcyBpbiBzZWNvbmRzXG5cdCAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICB2YXIgY29tcHV0ZWREdXJhdGlvbiA9IFRvbmUuZGVmYXVsdEFyZyhkdXJhdGlvbiwgTWF0aC5tYXgodGhpcy5fYnVmZmVyLmR1cmF0aW9uIC0gb2Zmc2V0LCAwKSk7XG5cdCAgICAgICAgY29tcHV0ZWREdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGNvbXB1dGVkRHVyYXRpb24pO1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgZWxhcHNlZCB0aW1lIGNvdW50ZXJcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5zdGFydChzdGFydFRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgLy9tYWtlIHRoZSBzb3VyY2Vcblx0ICAgICAgICB2YXIgc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKHtcblx0ICAgICAgICAgICAgJ2J1ZmZlcic6IHRoaXMuX2J1ZmZlcixcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0aGlzLl9sb29wLFxuXHQgICAgICAgICAgICAnbG9vcFN0YXJ0JzogdGhpcy5fbG9vcFN0YXJ0LFxuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IHRoaXMuX2xvb3BFbmQsXG5cdCAgICAgICAgICAgICdvbmVuZGVkJzogdGhpcy5fb25Tb3VyY2VFbmQuYmluZCh0aGlzKSxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IHRoaXMuX3BsYXliYWNrUmF0ZSxcblx0ICAgICAgICAgICAgJ2ZhZGVJbic6IHRoaXMuZmFkZUluLFxuXHQgICAgICAgICAgICAnZmFkZU91dCc6IHRoaXMuZmFkZU91dFxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBsb29waW5nIHByb3BlcnRpZXNcblx0ICAgICAgICBpZiAoIXRoaXMuX2xvb3AgJiYgIXRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICAvL2lmIGl0J3Mgbm90IGxvb3BpbmcsIHNldCB0aGUgc3RhdGUgY2hhbmdlIGF0IHRoZSBlbmQgb2YgdGhlIHNhbXBsZVxuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHN0YXJ0VGltZSArIGNvbXB1dGVkRHVyYXRpb24gLyB0aGlzLl9wbGF5YmFja1JhdGUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2FkZCBpdCB0byB0aGUgYXJyYXkgb2YgYWN0aXZlIHNvdXJjZXNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnB1c2goc291cmNlKTtcblx0ICAgICAgICAvL3N0YXJ0IGl0XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvb3AgJiYgVG9uZS5pc1VuZGVmKGR1cmF0aW9uKSkge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RhcnQoc3RhcnRUaW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdGFydChzdGFydFRpbWUsIG9mZnNldCwgY29tcHV0ZWREdXJhdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHBsYXliYWNrLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIGFuZCB0aGVuIHJlc3RhcnQgdGhlIHBsYXllciBmcm9tIHRoZSBiZWdpbm5pbmcgKG9yIG9mZnNldClcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3N0YXJ0VGltZT1ub3ddIFdoZW4gdGhlIHBsYXllciBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtvZmZzZXQ9MF0gVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgc2FtcGxlIHNob3VsZCBwbGF5LiBJZiBubyBkdXJhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnaXZlbiwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmdWxsIGxlbmd0aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2FtcGxlIChtaW51cyBhbnkgb2Zmc2V0KVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUsIG9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZWVrIHRvIGEgc3BlY2lmaWMgdGltZSBpbiB0aGUgcGxheWVyJ3MgYnVmZmVyLiBJZiB0aGVcblx0XHQgKiAgc291cmNlIGlzIG5vIGxvbmdlciBwbGF5aW5nIGF0IHRoYXQgdGltZSwgaXQgd2lsbCBzdG9wLlxuXHRcdCAqICBJZiB5b3Ugc2VlayB0byBhIHRpbWUgdGhhdFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IG9mZnNldCBUaGUgdGltZSB0byBzZWVrIHRvLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSB0aW1lIFRoZSB0aW1lIGZvciB0aGUgc2VlayBldmVudCB0byBvY2N1ci5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RhcnQoMC4yKTtcblx0XHQgKiBzb3VyY2Uuc3RvcCgwLjQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLnNlZWsgPSBmdW5jdGlvbiAob2Zmc2V0LCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgICAgIC8vIGlmIGl0J3MgY3VycmVudGx5IHBsYXlpbmcsIHN0b3AgaXRcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICAgICAgLy9yZXN0YXJ0IGl0IGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGxvb3Agc3RhcnQgYW5kIGVuZC4gV2lsbCBvbmx5IGxvb3AgaWYgbG9vcCBpc1xuXHRcdCAqICBzZXQgdG8gdHJ1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBsb29wU3RhcnQgVGhlIGxvb3AgZW5kIHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBsb29wRW5kIFRoZSBsb29wIGVuZCB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9vcCAwLjEgc2Vjb25kcyBvZiB0aGUgZmlsZS5cblx0XHQgKiBwbGF5ZXIuc2V0TG9vcFBvaW50cygwLjIsIDAuMyk7XG5cdFx0ICogcGxheWVyLmxvb3AgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLnNldExvb3BQb2ludHMgPSBmdW5jdGlvbiAobG9vcFN0YXJ0LCBsb29wRW5kKSB7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBsb29wU3RhcnQ7XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgc3RhcnQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIGN1cnJlbnQgc291cmNlXG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2UubG9vcFN0YXJ0ID0gbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBlbmQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIGN1cnJlbnQgc291cmNlXG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2UubG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF1ZGlvIGJ1ZmZlciBiZWxvbmdpbmcgdG8gdGhlIHBsYXllci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdCAqIEBuYW1lIGJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVyIHNob3VsZCBsb29wIG9uY2UgaXQncyBvdmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb29wXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3A7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wKSB7XG5cdCAgICAgICAgICAgIC8vaWYgbm8gY2hhbmdlLCBkbyBub3RoaW5nXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wID09PSBsb29wKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fbG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAoIWxvb3ApIHtcblx0ICAgICAgICAgICAgICAgIC8vc3RvcCB0aGUgcGxheWJhY2sgb24gdGhlIG5leHQgY3ljbGVcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BBdE5leHRJdGVyYXRpb24obm93KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBuZXh0IHN0b3BFdmVudFxuXHQgICAgICAgICAgICAgICAgdmFyIHN0b3BFdmVudCA9IHRoaXMuX3N0YXRlLmdldE5leHRTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICBpZiAoc3RvcEV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmxvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbChzdG9wRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuY2FuY2VsKHN0b3BFdmVudC50aW1lKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhIHN0b3AgZXZlbnQgYXQgdGhlIG5leHQgZnVsbCBpdGVyYXRpb24uIFVzZWRcblx0XHQgKiAgZm9yIHNjaGVkdWxpbmcgc3RvcCB3aGVuIHRoZSBsb29wIHN0YXRlIG9yIHBsYXliYWNrUmF0ZSBjaGFuZ2VzXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIG5vdyAgVGhlIGN1cnJlbnQgdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9zdG9wQXROZXh0SXRlcmF0aW9uID0gZnVuY3Rpb24gKG5vdykge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShub3cpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdmFyIG5leHRTdG9wID0gdGhpcy5fc3RhdGUuZ2V0TmV4dFN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCwgbm93KTtcblx0ICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fZWxhcHNlZFRpbWUuZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbnMgPSBNYXRoLm1heChNYXRoLmNlaWwocG9zaXRpb24gLyB0aGlzLmJ1ZmZlci5kdXJhdGlvbiksIDEpO1xuXHQgICAgICAgICAgICB2YXIgc3RvcFRpbWUgPSB0aGlzLl9lbGFwc2VkVGltZS5nZXRUaW1lT2ZUaWNrKGl0ZXJhdGlvbnMgKiB0aGlzLmJ1ZmZlci5kdXJhdGlvbiwgbmV4dFN0b3AgPyBuZXh0U3RvcC50aW1lIC0gdGhpcy5zYW1wbGVUaW1lIDogSW5maW5pdHkpO1xuXHQgICAgICAgICAgICB0aGlzLnN0b3Aoc3RvcFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGxheWJhY2sgc3BlZWQuIDEgaXMgbm9ybWFsIHNwZWVkLiBUaGlzIGlzIG5vdCBhIHNpZ25hbCBiZWNhdXNlXG5cdFx0ICogU2FmYXJpIGFuZCBpT1MgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgcGxheWJhY2tSYXRlIGFzIGEgc2lnbmFsLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZShyYXRlLCBub3cpO1xuXHQgICAgICAgICAgICAvL2lmIGl0J3Mgbm90IGxvb3Bpbmdcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdG9wQXROZXh0SXRlcmF0aW9uKG5vdyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9zZXQgYWxsIHRoZSBzb3VyY2VzXG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2UucGxheWJhY2tSYXRlLnNldFZhbHVlQXRUaW1lKHJhdGUsIG5vdyk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gb2YgdGhlIGJ1ZmZlci4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgcG9zaXRpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdwb3NpdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShub3cpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgdGhpcy5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IHRoaXMuYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fZWxhcHNlZFRpbWUuZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiAlIGR1cmF0aW9uO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkaXJlY3Rpb24gdGhlIGJ1ZmZlciBzaG91bGQgcGxheSBpblxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSByZXZlcnNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAncmV2ZXJzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5yZXZlcnNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmV2KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlci5yZXZlcnNlID0gcmV2O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgYWxsIHRoZSBidWZmZXIgaXMgbG9hZGVkXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGlzcG9zZSBhbmQgZGlzY29ubmVjdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vZGlzY29ubmVjdCBhbGwgb2YgdGhlIHBsYXllcnNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGxheWVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGxheWVycyBjb21iaW5lcyBtdWx0aXBsZSBbVG9uZS5QbGF5ZXJdKFBsYXllcikgb2JqZWN0cy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gdXJscyBBbiBvYmplY3QgbWFwcGluZyBhIG5hbWUgdG8gYSB1cmwuXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb249fSBvbmxvYWQgVGhlIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIGFsbCBidWZmZXJzIGFyZSBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMgPSBmdW5jdGlvbiAodXJscykge1xuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3MsIFsnb25sb2FkJ10sIFRvbmUuUGxheWVycyk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvdXRwdXQgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogc291cmNlLnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAvL21ha2UgdGhlIG91dHB1dCBleHBsaWNpdGx5IHN0ZXJlb1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudCA9IDI7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLm91dHB1dC5vdXRwdXQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgLy9tdXRlIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjb250YWluZXIgb2YgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdFx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnMgPSB7fTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBsb2FkaW5nIGNvdW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBwcml2YXRlIGhvbGRlciBvZiB0aGUgZmFkZUluIHRpbWVcblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZhZGVJbiA9IG9wdGlvbnMuZmFkZUluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogcHJpdmF0ZSBob2xkZXIgb2YgdGhlIGZhZGVPdXQgdGltZVxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmFkZU91dCA9IG9wdGlvbnMuZmFkZU91dDtcblx0ICAgICAgICAvL2FkZCBhbGwgb2YgdGhlIHBsYXllcnNcblx0ICAgICAgICBmb3IgKHZhciBuYW1lIGluIHVybHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50Kys7XG5cdCAgICAgICAgICAgIHRoaXMuYWRkKG5hbWUsIHVybHNbbmFtZV0sIHRoaXMuX2J1ZmZlckxvYWRlZC5iaW5kKHRoaXMsIG9wdGlvbnMub25sb2FkKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGxheWVycywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlLFxuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2ZhZGVJbic6IDAsXG5cdCAgICAgICAgJ2ZhZGVPdXQnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEEgYnVmZmVyIHdhcyBsb2FkZWQuIGRlY3JlbWVudCB0aGUgY291bnRlci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFja1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5fYnVmZmVyTG9hZGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50LS07XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmdDb3VudCA9PT0gMCAmJiBjYWxsYmFjaykge1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHNvdXJjZS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZmFkZUluIHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgZmFkZUluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ2ZhZGVJbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZhZGVJbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGZhZGVJbikge1xuXHQgICAgICAgICAgICB0aGlzLl9mYWRlSW4gPSBmYWRlSW47XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgcGxheWVyLmZhZGVJbiA9IGZhZGVJbjtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZmFkZU91dCB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGZhZGVPdXRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnZmFkZU91dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZhZGVPdXQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmYWRlT3V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZhZGVPdXQgPSBmYWRlT3V0O1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHBsYXllci5mYWRlT3V0ID0gZmFkZU91dDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc3RhdGUgb2YgdGhlIHBsYXllcnMgb2JqZWN0LiBSZXR1cm5zIFwic3RhcnRlZFwiIGlmIGFueSBvZiB0aGUgcGxheWVycyBhcmUgcGxheWluZy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXJzI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQG5hbWUgc3RhdGVcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBwbGF5aW5nID0gZmFsc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgcGxheWluZyA9IHBsYXlpbmcgfHwgcGxheWVyLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICByZXR1cm4gcGxheWluZyA/IFRvbmUuU3RhdGUuU3RhcnRlZCA6IFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcnVlIGlmIHRoZSBidWZmZXJzIG9iamVjdCBoYXMgYSBidWZmZXIgYnkgdGhhdCBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgbmFtZSAgVGhlIGtleSBvciBpbmRleCBvZiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5cblx0XHQgKiAgQHJldHVybiAge0Jvb2xlYW59XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcnMuaGFzT3duUHJvcGVydHkobmFtZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCBhIHBsYXllciBieSBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBuYW1lICBUaGUgcGxheWVycyBuYW1lIGFzIGRlZmluZWQgaW5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnN0cnVjdG9yIG9iamVjdCBvciBgYWRkYCBtZXRob2QuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBsYXllcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5oYXMobmFtZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcnNbbmFtZV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlBsYXllcnM6IG5vIHBsYXllciBuYW1lZCAnICsgbmFtZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIHBsYXllcnNcblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcblx0XHQgKiBAcmV0dXJuIHtUb25lLlBsYXllcnN9ICAgICAgICAgICAgdGhpc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLl9mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgZm9yICh2YXIgcGxheWVyTmFtZSBpbiB0aGlzLl9wbGF5ZXJzKSB7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX3BsYXllcnNbcGxheWVyTmFtZV0sIHBsYXllck5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiBhbGwgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXJzI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0xvYWRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgaXNMb2FkZWQgPSBpc0xvYWRlZCAmJiBwbGF5ZXIubG9hZGVkO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIHBsYXllciBieSBuYW1lIGFuZCB1cmwgdG8gdGhlIFBsYXllcnNcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBuYW1lICAgICAgQSB1bmlxdWUgbmFtZSB0byBnaXZlIHRoZSBwbGF5ZXJcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfFRvbmUuQnVmZmVyfEF1ZGlvYnVmZmVyfSAgdXJsICBFaXRoZXIgdGhlIHVybCBvZiB0aGUgYnVmZXIsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhZGRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobmFtZSwgdXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnNbbmFtZV0gPSBuZXcgVG9uZS5QbGF5ZXIodXJsLCBjYWxsYmFjaykuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcGxheWVyc1tuYW1lXS5mYWRlSW4gPSB0aGlzLl9mYWRlSW47XG5cdCAgICAgICAgdGhpcy5fcGxheWVyc1tuYW1lXS5mYWRlT3V0ID0gdGhpcy5fZmFkZU91dDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIGFsbCBvZiB0aGUgcGxheWVycyBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0byBzdG9wIGFsbCBvZiB0aGUgcGxheWVycy5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlBsYXllcnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuc3RvcEFsbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgIHBsYXllci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEaXNwb3NlIGFuZCBkaXNjb25uZWN0LlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBsYXllcnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgcGxheWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QbGF5ZXJzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuVXNlck1lZGlhIHVzZXMgTWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSB0byBvcGVuIHVwXG5cdFx0ICogICAgICAgICAgYW5kIGV4dGVybmFsIG1pY3JvcGhvbmUgb3IgYXVkaW8gaW5wdXQuIENoZWNrXG5cdFx0ICogICAgICAgICAgW01lZGlhRGV2aWNlcyBBUEkgU3VwcG9ydF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL01lZGlhRGV2aWNlcy9nZXRVc2VyTWVkaWEpXG5cdFx0ICogICAgICAgICAgdG8gc2VlIHdoaWNoIGJyb3dzZXJzIGFyZSBzdXBwb3J0ZWQuIEFjY2VzcyB0byBhbiBleHRlcm5hbCBpbnB1dFxuXHRcdCAqICAgICAgICAgIGlzIGxpbWl0ZWQgdG8gc2VjdXJlIChIVFRQUykgY29ubmVjdGlvbnMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVscz19IHZvbHVtZSBUaGUgbGV2ZWwgb2YgdGhlIGlucHV0XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9saXN0IHRoZSBpbnB1dHMgYW5kIG9wZW4gdGhlIHRoaXJkIG9uZVxuXHRcdCAqIHZhciBtb3R1ID0gbmV3IFRvbmUuVXNlck1lZGlhKCk7XG5cdFx0ICpcblx0XHQgKiAvL29wZW5pbmcgdGhlIGlucHV0IGFza3MgdGhlIHVzZXIgdG8gYWN0aXZhdGUgdGhlaXIgbWljXG5cdFx0ICogbW90dS5vcGVuKCkudGhlbihmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly9wcm9taXNlIHJlc29sdmVzIHdoZW4gaW5wdXQgaXMgYXZhaWxhYmxlXG5cdFx0ICogfSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3ZvbHVtZSddLCBUb25lLlVzZXJNZWRpYSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgTWVkaWFTdHJlYW1Ob2RlXG5cdFx0XHQgKiAgQHR5cGUge01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1lZGlhIHN0cmVhbSBjcmVhdGVkIGJ5IGdldFVzZXJNZWRpYS5cblx0XHRcdCAqICBAdHlwZSB7TG9jYWxNZWRpYVN0cmVhbX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RyZWFtID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3BlbiBkZXZpY2Vcblx0XHRcdCAqICBAdHlwZSAge01lZGlhRGV2aWNlSW5mb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGV2aWNlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IHZvbHVtZSBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIGlucHV0LnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Vc2VyTWVkaWEsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBPcGVuIHRoZSBtZWRpYSBzdHJlYW0uIElmIGEgc3RyaW5nIGlzIHBhc3NlZCBpbiwgaXQgaXMgYXNzdW1lZFxuXHRcdCAqICB0byBiZSB0aGUgbGFiZWwgb3IgaWQgb2YgdGhlIHN0cmVhbSwgaWYgYSBudW1iZXIgaXMgcGFzc2VkIGluLFxuXHRcdCAqICBpdCBpcyB0aGUgaW5wdXQgbnVtYmVyIG9mIHRoZSBzdHJlYW0uXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9IFtsYWJlbE9ySWQ9XCJkZWZhdWx0XCJdIFRoZSBsYWJlbCBvciBpZCBvZiB0aGUgYXVkaW8gaW5wdXQgbWVkaWEgZGV2aWNlLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2l0aCBubyBhcmd1bWVudCwgdGhlIGRlZmF1bHQgc3RyZWFtIGlzIG9wZW5lZC5cblx0XHQgKiAgQHJldHVybiB7UHJvbWlzZX0gVGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgc3RyZWFtIGlzIG9wZW4uXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uIChsYWJlbE9ySWQpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5Vc2VyTWVkaWEuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oZnVuY3Rpb24gKGRldmljZXMpIHtcblx0ICAgICAgICAgICAgdmFyIGRldmljZTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIobGFiZWxPcklkKSkge1xuXHQgICAgICAgICAgICAgICAgZGV2aWNlID0gZGV2aWNlc1tsYWJlbE9ySWRdO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZGV2aWNlID0gZGV2aWNlcy5maW5kKGZ1bmN0aW9uIChkZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlLmxhYmVsID09PSBsYWJlbE9ySWQgfHwgZGV2aWNlLmRldmljZUlkID09PSBsYWJlbE9ySWQ7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIC8vZGlkbid0IGZpbmQgYSBtYXRjaGluZyBkZXZpY2Vcblx0ICAgICAgICAgICAgICAgIGlmICghZGV2aWNlICYmIGRldmljZXMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZXNbMF07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFkZXZpY2UgJiYgVG9uZS5pc0RlZmluZWQobGFiZWxPcklkKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5Vc2VyTWVkaWE6IG5vIG1hdGNoaW5nIGRldmljZTogJyArIGxhYmVsT3JJZCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZGV2aWNlID0gZGV2aWNlO1xuXHQgICAgICAgICAgICAvL2RvIGdldFVzZXJNZWRpYVxuXHQgICAgICAgICAgICB2YXIgY29uc3RyYWludHMgPSB7XG5cdCAgICAgICAgICAgICAgICBhdWRpbzoge1xuXHQgICAgICAgICAgICAgICAgICAgICdlY2hvQ2FuY2VsbGF0aW9uJzogZmFsc2UsXG5cdCAgICAgICAgICAgICAgICAgICAgJ3NhbXBsZVJhdGUnOiB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICBjb25zdHJhaW50cy5hdWRpby5kZXZpY2VJZCA9IGRldmljZS5kZXZpY2VJZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoY29uc3RyYWludHMpLnRoZW4oZnVuY3Rpb24gKHN0cmVhbSkge1xuXHQgICAgICAgICAgICAgICAgLy9zdGFydCBhIG5ldyBzb3VyY2Ugb25seSBpZiB0aGUgcHJldmlvdXMgb25lIGlzIGNsb3NlZFxuXHQgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9zdHJlYW0pIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG5cdCAgICAgICAgICAgICAgICAgICAgLy9XcmFwIGEgTWVkaWFTdHJlYW1Tb3VyY2VOb2RlIGFyb3VuZCB0aGUgbGl2ZSBpbnB1dCBzdHJlYW0uXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0gPSB0aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2Uoc3RyZWFtKTtcblx0ICAgICAgICAgICAgICAgICAgICAvL0Nvbm5lY3QgdGhlIE1lZGlhU3RyZWFtU291cmNlTm9kZSB0byBhIGdhdGUgZ2FpbiBub2RlXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0uY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbG9zZSB0aGUgbWVkaWEgc3RyZWFtXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuVXNlck1lZGlhfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0cmVhbSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdHJlYW0uZ2V0QXVkaW9UcmFja3MoKS5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuXHQgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RyZWFtID0gbnVsbDtcblx0ICAgICAgICAgICAgLy9yZW1vdmUgdGhlIG9sZCBtZWRpYSBzdHJlYW1cblx0ICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2RldmljZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggdGhlIGxpc3Qgb2YgYXVkaW8gaW5wdXQgZGV2aWNlcyBhdmFpbGFibGUuXG5cdFx0ICogIEByZXR1cm4ge1Byb21pc2V9IFRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgZGV2aWNlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5Vc2VyTWVkaWEuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oZnVuY3Rpb24oZGV2aWNlcyl7XG5cdFx0ICogXHRjb25zb2xlLmxvZyhkZXZpY2VzKVxuXHRcdCAqIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5lbnVtZXJhdGVEZXZpY2VzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uIChkZXZpY2VzKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBkZXZpY2VzLmZpbHRlcihmdW5jdGlvbiAoZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlLmtpbmQgPT09ICdhdWRpb2lucHV0Jztcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIFwic3RhcnRlZFwiIHdoZW4gdGhlIG1pY3JvcGhvbmUgaXMgb3BlblxuXHRcdCAqICBhbmQgXCJzdG9wcGVkXCIgd2hlbiB0aGUgbWljIGlzIGNsb3NlZC5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW0gJiYgdGhpcy5fc3RyZWFtLmFjdGl2ZSA/IFRvbmUuU3RhdGUuU3RhcnRlZCA6IFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0UmV0dXJucyBhbiBpZGVudGlmaWVyIGZvciB0aGUgcmVwcmVzZW50ZWQgZGV2aWNlIHRoYXQgaXNcblx0XHQgKiBcdHBlcnNpc3RlZCBhY3Jvc3Mgc2Vzc2lvbnMuIEl0IGlzIHVuLWd1ZXNzYWJsZSBieSBvdGhlciBhcHBsaWNhdGlvbnMgYW5kXG5cdFx0ICogXHR1bmlxdWUgdG8gdGhlIG9yaWdpbiBvZiB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4gSXQgaXMgcmVzZXQgd2hlbiB0aGVcblx0XHQgKiBcdHVzZXIgY2xlYXJzIGNvb2tpZXMgKGZvciBQcml2YXRlIEJyb3dzaW5nLCBhIGRpZmZlcmVudCBpZGVudGlmaWVyIGlzXG5cdFx0ICogXHR1c2VkIHRoYXQgaXMgbm90IHBlcnNpc3RlZCBhY3Jvc3Mgc2Vzc2lvbnMpLiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZVxuXHRcdCAqIFx0ZGV2aWNlIGlzIG5vdCBvcGVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBkZXZpY2VJZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ2RldmljZUlkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlLmRldmljZUlkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFJldHVybnMgYSBncm91cCBpZGVudGlmaWVyLiBUd28gZGV2aWNlcyBoYXZlIHRoZVxuXHRcdCAqIFx0c2FtZSBncm91cCBpZGVudGlmaWVyIGlmIHRoZXkgYmVsb25nIHRvIHRoZSBzYW1lIHBoeXNpY2FsIGRldmljZS5cblx0XHQgKiBcdFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlIGRldmljZSBpcyBub3Qgb3Blbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgZ3JvdXBJZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ2dyb3VwSWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2UuZ3JvdXBJZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRSZXR1cm5zIGEgbGFiZWwgZGVzY3JpYmluZyB0aGlzIGRldmljZSAoZm9yIGV4YW1wbGUgXCJCdWlsdC1pbiBNaWNyb3Bob25lXCIpLlxuXHRcdCAqIFx0UmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgZGV2aWNlIGlzIG5vdCBvcGVuIG9yIGxhYmVsIGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBcdGJlY2F1c2Ugb2YgcGVybWlzc2lvbnMuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIGdyb3VwSWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdsYWJlbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZS5sYWJlbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHVzZXJNZWRpYS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVXNlck1lZGlhfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY2xvc2UoKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSWYgZ2V0VXNlck1lZGlhIGlzIHN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci5cblx0XHQgKiAgQHR5cGUgIHtCb29sZWFufVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIHN1cHBvcnRlZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLCAnc3VwcG9ydGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5pc0RlZmluZWQobmF2aWdhdG9yLm1lZGlhRGV2aWNlcykgJiYgVG9uZS5pc0Z1bmN0aW9uKG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLlVzZXJNZWRpYTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk1pZGkgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgVGltZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBUb25lLk1pZGkgY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCB0aGUgYG5ld2Aga2V5d29yZC4gVG9uZS5NaWRpIGNhbiBiZSBwYXNzZWRcblx0XHQgKiAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBvZiBhbnkgbWV0aG9kIHdoaWNoIHRha2VzIHRpbWUgYXMgYW4gYXJndW1lbnQuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5GcmVxdWVuY3l9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdCA9IFRvbmUuTWlkaShcIjRuXCIpOy8vYSBxdWFydGVyIG5vdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLk1pZGkpIHtcblx0ICAgICAgICAgICAgVG9uZS5GcmVxdWVuY3kuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuTWlkaSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRpLCBUb25lLkZyZXF1ZW5jeSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAnbWlkaSc7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBmcmVxdWVuY3kgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fZnJlcXVlbmN5VG9Vbml0cy5jYWxsKHRoaXMsIGZyZXEpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fdGlja3NUb1VuaXRzLmNhbGwodGhpcywgdGlja3MpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMgPSBmdW5jdGlvbiAoYmVhdHMpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cy5jYWxsKHRoaXMsIGJlYXRzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMuY2FsbCh0aGlzLCBzZWNvbmRzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBhcyBhIE1JREkgbm90ZVxuXHRcdCAqICBAcmV0dXJuICB7TUlESX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLk1pZGkoNjApLnRvTWlkaSgpOyAvLzYwXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLnRvTWlkaSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBhcyBhIE1JREkgbm90ZVxuXHRcdCAqICBAcmV0dXJuICB7TUlESX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLk1pZGkoNjApLnRvTWlkaSgpOyAvLzYwXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5tdG9mKHRoaXMudG9NaWRpKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmFuc3Bvc2VzIHRoZSBmcmVxdWVuY3kgYnkgdGhlIGdpdmVuIG51bWJlciBvZiBzZW1pdG9uZXMuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsfSAgaW50ZXJ2YWxcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRnJlcXVlbmN5fSBBIG5ldyB0cmFuc3Bvc2VkIGZyZXF1ZW5jeVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQTRcIikudHJhbnNwb3NlKDMpOyAvL1wiQzVcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS50cmFuc3Bvc2UgPSBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy50b01pZGkoKSArIGludGVydmFsKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NaWRpO1xuXHR9KTtcblx0XG5cdHJldHVybiBUb25lO1xufSkpOyIsIi8qISBwNS5qcyB2MC43LjIgU2VwdGVtYmVyIDAyLCAyMDE4ICovICFmdW5jdGlvbihhKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1hKCk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLGEpO2Vsc2V7dmFyIGI7Yj1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMsYi5wNT1hKCl9fShmdW5jdGlvbigpe3ZhciBhO3JldHVybiBmdW5jdGlvbiBhKGIsYyxkKXtmdW5jdGlvbiBlKGcsaCl7aWYoIWNbZ10pe2lmKCFiW2ddKXt2YXIgaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dmFyIGo9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitnK1wiJ1wiKTt0aHJvdyBqLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsan12YXIgaz1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoay5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoY3x8YSl9LGssay5leHBvcnRzLGEsYixjLGQpfXJldHVybiBjW2ddLmV4cG9ydHN9Zm9yKHZhciBmPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsZz0wO2c8ZC5sZW5ndGg7ZysrKWUoZFtnXSk7cmV0dXJuIGV9KHsxOltmdW5jdGlvbihhLGIsYyl7IWZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYSl7dmFyIGI9YS5jaGFyQ29kZUF0KDApO3JldHVybiBiPT09Znx8Yj09PWs/NjI6Yj09PWd8fGI9PT1sPzYzOmI8aD8tMTpiPGgrMTA/Yi1oKzI2KzI2OmI8aisyNj9iLWo6YjxpKzI2P2ItaSsyNjp2b2lkIDB9ZnVuY3Rpb24gYyhhKXtmdW5jdGlvbiBjKGEpe2pbbCsrXT1hfXZhciBkLGYsZyxoLGksajtpZihhLmxlbmd0aCU0PjApdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNFwiKTt2YXIgaz1hLmxlbmd0aDtpPVwiPVwiPT09YS5jaGFyQXQoay0yKT8yOlwiPVwiPT09YS5jaGFyQXQoay0xKT8xOjAsaj1uZXcgZSgzKmEubGVuZ3RoLzQtaSksZz1pPjA/YS5sZW5ndGgtNDphLmxlbmd0aDt2YXIgbD0wO2ZvcihkPTAsZj0wO2Q8ZztkKz00LGYrPTMpaD1iKGEuY2hhckF0KGQpKTw8MTh8YihhLmNoYXJBdChkKzEpKTw8MTJ8YihhLmNoYXJBdChkKzIpKTw8NnxiKGEuY2hhckF0KGQrMykpLGMoKDE2NzExNjgwJmgpPj4xNiksYygoNjUyODAmaCk+PjgpLGMoMjU1JmgpO3JldHVybiAyPT09aT8oaD1iKGEuY2hhckF0KGQpKTw8MnxiKGEuY2hhckF0KGQrMSkpPj40LGMoMjU1JmgpKToxPT09aSYmKGg9YihhLmNoYXJBdChkKSk8PDEwfGIoYS5jaGFyQXQoZCsxKSk8PDR8YihhLmNoYXJBdChkKzIpKT4+MixjKGg+PjgmMjU1KSxjKDI1NSZoKSksan1mdW5jdGlvbiBkKGEpe2Z1bmN0aW9uIGIoYSl7cmV0dXJuXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIuY2hhckF0KGEpfWZ1bmN0aW9uIGMoYSl7cmV0dXJuIGIoYT4+MTgmNjMpK2IoYT4+MTImNjMpK2IoYT4+NiY2MykrYig2MyZhKX12YXIgZCxlLGYsZz1hLmxlbmd0aCUzLGg9XCJcIjtmb3IoZD0wLGY9YS5sZW5ndGgtZztkPGY7ZCs9MyllPShhW2RdPDwxNikrKGFbZCsxXTw8OCkrYVtkKzJdLGgrPWMoZSk7c3dpdGNoKGcpe2Nhc2UgMTplPWFbYS5sZW5ndGgtMV0saCs9YihlPj4yKSxoKz1iKGU8PDQmNjMpLGgrPVwiPT1cIjticmVhaztjYXNlIDI6ZT0oYVthLmxlbmd0aC0yXTw8OCkrYVthLmxlbmd0aC0xXSxoKz1iKGU+PjEwKSxoKz1iKGU+PjQmNjMpLGgrPWIoZTw8MiY2MyksaCs9XCI9XCJ9cmV0dXJuIGh9dmFyIGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxmPVwiK1wiLmNoYXJDb2RlQXQoMCksZz1cIi9cIi5jaGFyQ29kZUF0KDApLGg9XCIwXCIuY2hhckNvZGVBdCgwKSxpPVwiYVwiLmNoYXJDb2RlQXQoMCksaj1cIkFcIi5jaGFyQ29kZUF0KDApLGs9XCItXCIuY2hhckNvZGVBdCgwKSxsPVwiX1wiLmNoYXJDb2RlQXQoMCk7YS50b0J5dGVBcnJheT1jLGEuZnJvbUJ5dGVBcnJheT1kfSh2b2lkIDA9PT1jP3RoaXMuYmFzZTY0anM9e306Yyl9LHt9XSwyOltmdW5jdGlvbihhLGIsYyl7fSx7fV0sMzpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihiKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKCl7ZnVuY3Rpb24gYSgpe310cnl7dmFyIGI9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIGIuZm9vPWZ1bmN0aW9uKCl7cmV0dXJuIDQyfSxiLmNvbnN0cnVjdG9yPWEsNDI9PT1iLmZvbygpJiZiLmNvbnN0cnVjdG9yPT09YSYmXCJmdW5jdGlvblwiPT10eXBlb2YgYi5zdWJhcnJheSYmMD09PWIuc3ViYXJyYXkoMSwxKS5ieXRlTGVuZ3RofWNhdGNoKGEpe3JldHVybiExfX1mdW5jdGlvbiBlKCl7cmV0dXJuIGYuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gZihhKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGY/KGYuVFlQRURfQVJSQVlfU1VQUE9SVHx8KHRoaXMubGVuZ3RoPTAsdGhpcy5wYXJlbnQ9dm9pZCAwKSxcIm51bWJlclwiPT10eXBlb2YgYT9nKHRoaXMsYSk6XCJzdHJpbmdcIj09dHlwZW9mIGE/aCh0aGlzLGEsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTpcInV0ZjhcIik6aSh0aGlzLGEpKTphcmd1bWVudHMubGVuZ3RoPjE/bmV3IGYoYSxhcmd1bWVudHNbMV0pOm5ldyBmKGEpfWZ1bmN0aW9uIGcoYSxiKXtpZihhPXAoYSxiPDA/MDowfHEoYikpLCFmLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciBjPTA7YzxiO2MrKylhW2NdPTA7cmV0dXJuIGF9ZnVuY3Rpb24gaChhLGIsYyl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGMmJlwiXCIhPT1jfHwoYz1cInV0ZjhcIiksYT1wKGEsMHxzKGIsYykpLGEud3JpdGUoYixjKSxhfWZ1bmN0aW9uIGkoYSxiKXtpZihmLmlzQnVmZmVyKGIpKXJldHVybiBqKGEsYik7aWYoWShiKSlyZXR1cm4gayhhLGIpO2lmKG51bGw9PWIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm11c3Qgc3RhcnQgd2l0aCBudW1iZXIsIGJ1ZmZlciwgYXJyYXkgb3Igc3RyaW5nXCIpO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlcil7aWYoYi5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gbChhLGIpO2lmKGIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gbShhLGIpfXJldHVybiBiLmxlbmd0aD9uKGEsYik6byhhLGIpfWZ1bmN0aW9uIGooYSxiKXt2YXIgYz0wfHEoYi5sZW5ndGgpO3JldHVybiBhPXAoYSxjKSxiLmNvcHkoYSwwLDAsYyksYX1mdW5jdGlvbiBrKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTthPXAoYSxjKTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlhW2RdPTI1NSZiW2RdO3JldHVybiBhfWZ1bmN0aW9uIGwoYSxiKXt2YXIgYz0wfHEoYi5sZW5ndGgpO2E9cChhLGMpO2Zvcih2YXIgZD0wO2Q8YztkKz0xKWFbZF09MjU1JmJbZF07cmV0dXJuIGF9ZnVuY3Rpb24gbShhLGIpe3JldHVybiBmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGIuYnl0ZUxlbmd0aCxhPWYuX2F1Z21lbnQobmV3IFVpbnQ4QXJyYXkoYikpKTphPWwoYSxuZXcgVWludDhBcnJheShiKSksYX1mdW5jdGlvbiBuKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTthPXAoYSxjKTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlhW2RdPTI1NSZiW2RdO3JldHVybiBhfWZ1bmN0aW9uIG8oYSxiKXt2YXIgYyxkPTA7XCJCdWZmZXJcIj09PWIudHlwZSYmWShiLmRhdGEpJiYoYz1iLmRhdGEsZD0wfHEoYy5sZW5ndGgpKSxhPXAoYSxkKTtmb3IodmFyIGU9MDtlPGQ7ZSs9MSlhW2VdPTI1NSZjW2VdO3JldHVybiBhfWZ1bmN0aW9uIHAoYSxiKXtyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyhhPWYuX2F1Z21lbnQobmV3IFVpbnQ4QXJyYXkoYikpLGEuX19wcm90b19fPWYucHJvdG90eXBlKTooYS5sZW5ndGg9YixhLl9pc0J1ZmZlcj0hMCksMCE9PWImJmI8PWYucG9vbFNpemU+Pj4xJiYoYS5wYXJlbnQ9WiksYX1mdW5jdGlvbiBxKGEpe2lmKGE+PWUoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHhcIitlKCkudG9TdHJpbmcoMTYpK1wiIGJ5dGVzXCIpO3JldHVybiAwfGF9ZnVuY3Rpb24gcihhLGIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcihhLGIpO3ZhciBjPW5ldyBmKGEsYik7cmV0dXJuIGRlbGV0ZSBjLnBhcmVudCxjfWZ1bmN0aW9uIHMoYSxiKXtcInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9XCJcIithKTt2YXIgYz1hLmxlbmd0aDtpZigwPT09YylyZXR1cm4gMDtmb3IodmFyIGQ9ITE7Oylzd2l0Y2goYil7Y2FzZVwiYXNjaWlcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJyYXdcIjpjYXNlXCJyYXdzXCI6cmV0dXJuIGM7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIFIoYSkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAyKmM7Y2FzZVwiaGV4XCI6cmV0dXJuIGM+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBVKGEpLmxlbmd0aDtkZWZhdWx0OmlmKGQpcmV0dXJuIFIoYSkubGVuZ3RoO2I9KFwiXCIrYikudG9Mb3dlckNhc2UoKSxkPSEwfX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD0hMTtpZihifD0wLGM9dm9pZCAwPT09Y3x8Yz09PTEvMD90aGlzLmxlbmd0aDowfGMsYXx8KGE9XCJ1dGY4XCIpLGI8MCYmKGI9MCksYz50aGlzLmxlbmd0aCYmKGM9dGhpcy5sZW5ndGgpLGM8PWIpcmV0dXJuXCJcIjtmb3IoOzspc3dpdGNoKGEpe2Nhc2VcImhleFwiOnJldHVybiBGKHRoaXMsYixjKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gQih0aGlzLGIsYyk7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gRCh0aGlzLGIsYyk7Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIEUodGhpcyxiLGMpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBBKHRoaXMsYixjKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gRyh0aGlzLGIsYyk7ZGVmYXVsdDppZihkKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIithKTthPShhK1wiXCIpLnRvTG93ZXJDYXNlKCksZD0hMH19ZnVuY3Rpb24gdShhLGIsYyxkKXtjPU51bWJlcihjKXx8MDt2YXIgZT1hLmxlbmd0aC1jO2Q/KGQ9TnVtYmVyKGQpKT5lJiYoZD1lKTpkPWU7dmFyIGY9Yi5sZW5ndGg7aWYoZiUyIT0wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGV4IHN0cmluZ1wiKTtkPmYvMiYmKGQ9Zi8yKTtmb3IodmFyIGc9MDtnPGQ7ZysrKXt2YXIgaD1wYXJzZUludChiLnN1YnN0cigyKmcsMiksMTYpO2lmKGlzTmFOKGgpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGV4IHN0cmluZ1wiKTthW2MrZ109aH1yZXR1cm4gZ31mdW5jdGlvbiB2KGEsYixjLGQpe3JldHVybiBWKFIoYixhLmxlbmd0aC1jKSxhLGMsZCl9ZnVuY3Rpb24gdyhhLGIsYyxkKXtyZXR1cm4gVihTKGIpLGEsYyxkKX1mdW5jdGlvbiB4KGEsYixjLGQpe3JldHVybiB3KGEsYixjLGQpfWZ1bmN0aW9uIHkoYSxiLGMsZCl7cmV0dXJuIFYoVShiKSxhLGMsZCl9ZnVuY3Rpb24geihhLGIsYyxkKXtyZXR1cm4gVihUKGIsYS5sZW5ndGgtYyksYSxjLGQpfWZ1bmN0aW9uIEEoYSxiLGMpe3JldHVybiAwPT09YiYmYz09PWEubGVuZ3RoP1cuZnJvbUJ5dGVBcnJheShhKTpXLmZyb21CeXRlQXJyYXkoYS5zbGljZShiLGMpKX1mdW5jdGlvbiBCKGEsYixjKXtjPU1hdGgubWluKGEubGVuZ3RoLGMpO2Zvcih2YXIgZD1bXSxlPWI7ZTxjOyl7dmFyIGY9YVtlXSxnPW51bGwsaD1mPjIzOT80OmY+MjIzPzM6Zj4xOTE/MjoxO2lmKGUraDw9Yyl7dmFyIGksaixrLGw7c3dpdGNoKGgpe2Nhc2UgMTpmPDEyOCYmKGc9Zik7YnJlYWs7Y2FzZSAyOmk9YVtlKzFdLDEyOD09KDE5MiZpKSYmKGw9KDMxJmYpPDw2fDYzJmkpPjEyNyYmKGc9bCk7YnJlYWs7Y2FzZSAzOmk9YVtlKzFdLGo9YVtlKzJdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJmopJiYobD0oMTUmZik8PDEyfCg2MyZpKTw8Nnw2MyZqKT4yMDQ3JiYobDw1NTI5Nnx8bD41NzM0MykmJihnPWwpO2JyZWFrO2Nhc2UgNDppPWFbZSsxXSxqPWFbZSsyXSxrPWFbZSszXSwxMjg9PSgxOTImaSkmJjEyOD09KDE5MiZqKSYmMTI4PT0oMTkyJmspJiYobD0oMTUmZik8PDE4fCg2MyZpKTw8MTJ8KDYzJmopPDw2fDYzJmspPjY1NTM1JiZsPDExMTQxMTImJihnPWwpfX1udWxsPT09Zz8oZz02NTUzMyxoPTEpOmc+NjU1MzUmJihnLT02NTUzNixkLnB1c2goZz4+PjEwJjEwMjN8NTUyOTYpLGc9NTYzMjB8MTAyMyZnKSxkLnB1c2goZyksZSs9aH1yZXR1cm4gQyhkKX1mdW5jdGlvbiBDKGEpe3ZhciBiPWEubGVuZ3RoO2lmKGI8PSQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGEpO2Zvcih2YXIgYz1cIlwiLGQ9MDtkPGI7KWMrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGEuc2xpY2UoZCxkKz0kKSk7cmV0dXJuIGN9ZnVuY3Rpb24gRChhLGIsYyl7dmFyIGQ9XCJcIjtjPU1hdGgubWluKGEubGVuZ3RoLGMpO2Zvcih2YXIgZT1iO2U8YztlKyspZCs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmYVtlXSk7cmV0dXJuIGR9ZnVuY3Rpb24gRShhLGIsYyl7dmFyIGQ9XCJcIjtjPU1hdGgubWluKGEubGVuZ3RoLGMpO2Zvcih2YXIgZT1iO2U8YztlKyspZCs9U3RyaW5nLmZyb21DaGFyQ29kZShhW2VdKTtyZXR1cm4gZH1mdW5jdGlvbiBGKGEsYixjKXt2YXIgZD1hLmxlbmd0aDsoIWJ8fGI8MCkmJihiPTApLCghY3x8YzwwfHxjPmQpJiYoYz1kKTtmb3IodmFyIGU9XCJcIixmPWI7ZjxjO2YrKyllKz1RKGFbZl0pO3JldHVybiBlfWZ1bmN0aW9uIEcoYSxiLGMpe2Zvcih2YXIgZD1hLnNsaWNlKGIsYyksZT1cIlwiLGY9MDtmPGQubGVuZ3RoO2YrPTIpZSs9U3RyaW5nLmZyb21DaGFyQ29kZShkW2ZdKzI1NipkW2YrMV0pO3JldHVybiBlfWZ1bmN0aW9uIEgoYSxiLGMpe2lmKGElMSE9MHx8YTwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwib2Zmc2V0IGlzIG5vdCB1aW50XCIpO2lmKGErYj5jKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aFwiKX1mdW5jdGlvbiBJKGEsYixjLGQsZSxnKXtpZighZi5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYnVmZmVyIG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2VcIik7aWYoYj5lfHxiPGcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ2YWx1ZSBpcyBvdXQgb2YgYm91bmRzXCIpO2lmKGMrZD5hLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBKKGEsYixjLGQpe2I8MCYmKGI9NjU1MzUrYisxKTtmb3IodmFyIGU9MCxmPU1hdGgubWluKGEubGVuZ3RoLWMsMik7ZTxmO2UrKylhW2MrZV09KGImMjU1PDw4KihkP2U6MS1lKSk+Pj44KihkP2U6MS1lKX1mdW5jdGlvbiBLKGEsYixjLGQpe2I8MCYmKGI9NDI5NDk2NzI5NStiKzEpO2Zvcih2YXIgZT0wLGY9TWF0aC5taW4oYS5sZW5ndGgtYyw0KTtlPGY7ZSsrKWFbYytlXT1iPj4+OCooZD9lOjMtZSkmMjU1fWZ1bmN0aW9uIEwoYSxiLGMsZCxlLGYpe2lmKGI+ZXx8YjxmKXRocm93IG5ldyBSYW5nZUVycm9yKFwidmFsdWUgaXMgb3V0IG9mIGJvdW5kc1wiKTtpZihjK2Q+YS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYoYzwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwiaW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIE0oYSxiLGMsZCxlKXtyZXR1cm4gZXx8TChhLGIsYyw0LDMuNDAyODIzNDY2Mzg1Mjg4NmUzOCwtMy40MDI4MjM0NjYzODUyODg2ZTM4KSxYLndyaXRlKGEsYixjLGQsMjMsNCksYys0fWZ1bmN0aW9uIE4oYSxiLGMsZCxlKXtyZXR1cm4gZXx8TChhLGIsYyw4LDEuNzk3NjkzMTM0ODYyMzE1N2UzMDgsLTEuNzk3NjkzMTM0ODYyMzE1N2UzMDgpLFgud3JpdGUoYSxiLGMsZCw1Miw4KSxjKzh9ZnVuY3Rpb24gTyhhKXtpZihhPVAoYSkucmVwbGFjZShhYSxcIlwiKSxhLmxlbmd0aDwyKXJldHVyblwiXCI7Zm9yKDthLmxlbmd0aCU0IT0wOylhKz1cIj1cIjtyZXR1cm4gYX1mdW5jdGlvbiBQKGEpe3JldHVybiBhLnRyaW0/YS50cmltKCk6YS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLFwiXCIpfWZ1bmN0aW9uIFEoYSl7cmV0dXJuIGE8MTY/XCIwXCIrYS50b1N0cmluZygxNik6YS50b1N0cmluZygxNil9ZnVuY3Rpb24gUihhLGIpe2I9Ynx8MS8wO2Zvcih2YXIgYyxkPWEubGVuZ3RoLGU9bnVsbCxmPVtdLGc9MDtnPGQ7ZysrKXtpZigoYz1hLmNoYXJDb2RlQXQoZykpPjU1Mjk1JiZjPDU3MzQ0KXtpZighZSl7aWYoYz41NjMxOSl7KGItPTMpPi0xJiZmLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKGcrMT09PWQpeyhiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1lPWM7Y29udGludWV9aWYoYzw1NjMyMCl7KGItPTMpPi0xJiZmLnB1c2goMjM5LDE5MSwxODkpLGU9Yztjb250aW51ZX1jPTY1NTM2KyhlLTU1Mjk2PDwxMHxjLTU2MzIwKX1lbHNlIGUmJihiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtpZihlPW51bGwsYzwxMjgpe2lmKChiLT0xKTwwKWJyZWFrO2YucHVzaChjKX1lbHNlIGlmKGM8MjA0OCl7aWYoKGItPTIpPDApYnJlYWs7Zi5wdXNoKGM+PjZ8MTkyLDYzJmN8MTI4KX1lbHNlIGlmKGM8NjU1MzYpe2lmKChiLT0zKTwwKWJyZWFrO2YucHVzaChjPj4xMnwyMjQsYz4+NiY2M3wxMjgsNjMmY3wxMjgpfWVsc2V7aWYoIShjPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29kZSBwb2ludFwiKTtpZigoYi09NCk8MClicmVhaztmLnB1c2goYz4+MTh8MjQwLGM+PjEyJjYzfDEyOCxjPj42JjYzfDEyOCw2MyZjfDEyOCl9fXJldHVybiBmfWZ1bmN0aW9uIFMoYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyliLnB1c2goMjU1JmEuY2hhckNvZGVBdChjKSk7cmV0dXJuIGJ9ZnVuY3Rpb24gVChhLGIpe2Zvcih2YXIgYyxkLGUsZj1bXSxnPTA7ZzxhLmxlbmd0aCYmISgoYi09Mik8MCk7ZysrKWM9YS5jaGFyQ29kZUF0KGcpLGQ9Yz4+OCxlPWMlMjU2LGYucHVzaChlKSxmLnB1c2goZCk7cmV0dXJuIGZ9ZnVuY3Rpb24gVShhKXtyZXR1cm4gVy50b0J5dGVBcnJheShPKGEpKX1mdW5jdGlvbiBWKGEsYixjLGQpe2Zvcih2YXIgZT0wO2U8ZCYmIShlK2M+PWIubGVuZ3RofHxlPj1hLmxlbmd0aCk7ZSsrKWJbZStjXT1hW2VdO3JldHVybiBlfXZhciBXPWEoXCJiYXNlNjQtanNcIiksWD1hKFwiaWVlZTc1NFwiKSxZPWEoXCJpc2FycmF5XCIpO2MuQnVmZmVyPWYsYy5TbG93QnVmZmVyPXIsYy5JTlNQRUNUX01BWF9CWVRFUz01MCxmLnBvb2xTaXplPTgxOTI7dmFyIFo9e307Zi5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMCE9PWIuVFlQRURfQVJSQVlfU1VQUE9SVD9iLlRZUEVEX0FSUkFZX1NVUFBPUlQ6ZCgpLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8oZi5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGYuX19wcm90b19fPVVpbnQ4QXJyYXkpOihmLnByb3RvdHlwZS5sZW5ndGg9dm9pZCAwLGYucHJvdG90eXBlLnBhcmVudD12b2lkIDApLGYuaXNCdWZmZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIShudWxsPT1hfHwhYS5faXNCdWZmZXIpfSxmLmNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtpZighZi5pc0J1ZmZlcihhKXx8IWYuaXNCdWZmZXIoYikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnNcIik7aWYoYT09PWIpcmV0dXJuIDA7Zm9yKHZhciBjPWEubGVuZ3RoLGQ9Yi5sZW5ndGgsZT0wLGc9TWF0aC5taW4oYyxkKTtlPGcmJmFbZV09PT1iW2VdOykrK2U7cmV0dXJuIGUhPT1nJiYoYz1hW2VdLGQ9YltlXSksYzxkPy0xOmQ8Yz8xOjB9LGYuaXNFbmNvZGluZz1mdW5jdGlvbihhKXtzd2l0Y2goU3RyaW5nKGEpLnRvTG93ZXJDYXNlKCkpe2Nhc2VcImhleFwiOmNhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOmNhc2VcImFzY2lpXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwiYmFzZTY0XCI6Y2FzZVwicmF3XCI6Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LGYuY29uY2F0PWZ1bmN0aW9uKGEsYil7aWYoIVkoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImxpc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzLlwiKTtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG5ldyBmKDApO3ZhciBjO2lmKHZvaWQgMD09PWIpZm9yKGI9MCxjPTA7YzxhLmxlbmd0aDtjKyspYis9YVtjXS5sZW5ndGg7dmFyIGQ9bmV3IGYoYiksZT0wO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBnPWFbY107Zy5jb3B5KGQsZSksZSs9Zy5sZW5ndGh9cmV0dXJuIGR9LGYuYnl0ZUxlbmd0aD1zLGYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PWE/XCJcIjowPT09YXJndW1lbnRzLmxlbmd0aD9CKHRoaXMsMCxhKTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGEpe2lmKCFmLmlzQnVmZmVyKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09YXx8MD09PWYuY29tcGFyZSh0aGlzLGEpfSxmLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGE9XCJcIixiPWMuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihhPXRoaXMudG9TdHJpbmcoXCJoZXhcIiwwLGIpLm1hdGNoKC8uezJ9L2cpLmpvaW4oXCIgXCIpLHRoaXMubGVuZ3RoPmImJihhKz1cIiAuLi4gXCIpKSxcIjxCdWZmZXIgXCIrYStcIj5cIn0sZi5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihhKXtpZighZi5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PWE/MDpmLmNvbXBhcmUodGhpcyxhKX0sZi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGMpe2Zvcih2YXIgZD0tMSxlPTA7YytlPGEubGVuZ3RoO2UrKylpZihhW2MrZV09PT1iWy0xPT09ZD8wOmUtZF0pe2lmKC0xPT09ZCYmKGQ9ZSksZS1kKzE9PT1iLmxlbmd0aClyZXR1cm4gYytkfWVsc2UgZD0tMTtyZXR1cm4tMX1pZihiPjIxNDc0ODM2NDc/Yj0yMTQ3NDgzNjQ3OmI8LTIxNDc0ODM2NDgmJihiPS0yMTQ3NDgzNjQ4KSxiPj49MCwwPT09dGhpcy5sZW5ndGgpcmV0dXJuLTE7aWYoYj49dGhpcy5sZW5ndGgpcmV0dXJuLTE7aWYoYjwwJiYoYj1NYXRoLm1heCh0aGlzLmxlbmd0aCtiLDApKSxcInN0cmluZ1wiPT10eXBlb2YgYSlyZXR1cm4gMD09PWEubGVuZ3RoPy0xOlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsYSxiKTtpZihmLmlzQnVmZmVyKGEpKXJldHVybiBjKHRoaXMsYSxiKTtpZihcIm51bWJlclwiPT10eXBlb2YgYSlyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUJiZcImZ1bmN0aW9uXCI9PT1VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLGEsYik6Yyh0aGlzLFthXSxiKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfSxmLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGNvbnNvbGUubG9nKFwiLmdldCgpIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB1c2luZyBhcnJheSBpbmRleGVzIGluc3RlYWQuXCIpLHRoaXMucmVhZFVJbnQ4KGEpfSxmLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gY29uc29sZS5sb2coXCIuc2V0KCkgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHVzaW5nIGFycmF5IGluZGV4ZXMgaW5zdGVhZC5cIiksdGhpcy53cml0ZVVJbnQ4KGEsYil9LGYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGEsYixjLGQpe2lmKHZvaWQgMD09PWIpZD1cInV0ZjhcIixjPXRoaXMubGVuZ3RoLGI9MDtlbHNlIGlmKHZvaWQgMD09PWMmJlwic3RyaW5nXCI9PXR5cGVvZiBiKWQ9YixjPXRoaXMubGVuZ3RoLGI9MDtlbHNlIGlmKGlzRmluaXRlKGIpKWJ8PTAsaXNGaW5pdGUoYyk/KGN8PTAsdm9pZCAwPT09ZCYmKGQ9XCJ1dGY4XCIpKTooZD1jLGM9dm9pZCAwKTtlbHNle3ZhciBlPWQ7ZD1iLGI9MHxjLGM9ZX12YXIgZj10aGlzLmxlbmd0aC1iO2lmKCh2b2lkIDA9PT1jfHxjPmYpJiYoYz1mKSxhLmxlbmd0aD4wJiYoYzwwfHxiPDApfHxiPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiYXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIik7ZHx8KGQ9XCJ1dGY4XCIpO2Zvcih2YXIgZz0hMTs7KXN3aXRjaChkKXtjYXNlXCJoZXhcIjpyZXR1cm4gdSh0aGlzLGEsYixjKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gdih0aGlzLGEsYixjKTtjYXNlXCJhc2NpaVwiOnJldHVybiB3KHRoaXMsYSxiLGMpO2Nhc2VcImJpbmFyeVwiOnJldHVybiB4KHRoaXMsYSxiLGMpO2Nhc2VcImJhc2U2NFwiOnJldHVybiB5KHRoaXMsYSxiLGMpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiB6KHRoaXMsYSxiLGMpO2RlZmF1bHQ6aWYoZyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrZCk7ZD0oXCJcIitkKS50b0xvd2VyQ2FzZSgpLGc9ITB9fSxmLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcIkJ1ZmZlclwiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyICQ9NDA5NjtmLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMubGVuZ3RoO2E9fn5hLGI9dm9pZCAwPT09Yj9jOn5+YixhPDA/KGErPWMpPDAmJihhPTApOmE+YyYmKGE9YyksYjwwPyhiKz1jKTwwJiYoYj0wKTpiPmMmJihiPWMpLGI8YSYmKGI9YSk7dmFyIGQ7aWYoZi5UWVBFRF9BUlJBWV9TVVBQT1JUKWQ9Zi5fYXVnbWVudCh0aGlzLnN1YmFycmF5KGEsYikpO2Vsc2V7dmFyIGU9Yi1hO2Q9bmV3IGYoZSx2b2lkIDApO2Zvcih2YXIgZz0wO2c8ZTtnKyspZFtnXT10aGlzW2crYV19cmV0dXJuIGQubGVuZ3RoJiYoZC5wYXJlbnQ9dGhpcy5wYXJlbnR8fHRoaXMpLGR9LGYucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oYSxiLGMpe2F8PTAsYnw9MCxjfHxIKGEsYix0aGlzLmxlbmd0aCk7Zm9yKHZhciBkPXRoaXNbYV0sZT0xLGY9MDsrK2Y8YiYmKGUqPTI1Nik7KWQrPXRoaXNbYStmXSplO3JldHVybiBkfSxmLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGEsYixjKXthfD0wLGJ8PTAsY3x8SChhLGIsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZD10aGlzW2ErLS1iXSxlPTE7Yj4wJiYoZSo9MjU2KTspZCs9dGhpc1thKy0tYl0qZTtyZXR1cm4gZH0sZi5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwxLHRoaXMubGVuZ3RoKSx0aGlzW2FdfSxmLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDIsdGhpcy5sZW5ndGgpLHRoaXNbYV18dGhpc1thKzFdPDw4fSxmLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDIsdGhpcy5sZW5ndGgpLHRoaXNbYV08PDh8dGhpc1thKzFdfSxmLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2FdfHRoaXNbYSsxXTw8OHx0aGlzW2ErMl08PDE2KSsxNjc3NzIxNip0aGlzW2ErM119LGYucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1thXSsodGhpc1thKzFdPDwxNnx0aGlzW2ErMl08PDh8dGhpc1thKzNdKX0sZi5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGEsYixjKXthfD0wLGJ8PTAsY3x8SChhLGIsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZD10aGlzW2FdLGU9MSxmPTA7KytmPGImJihlKj0yNTYpOylkKz10aGlzW2ErZl0qZTtyZXR1cm4gZSo9MTI4LGQ+PWUmJihkLT1NYXRoLnBvdygyLDgqYikpLGR9LGYucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihhLGIsYyl7YXw9MCxifD0wLGN8fEgoYSxiLHRoaXMubGVuZ3RoKTtmb3IodmFyIGQ9YixlPTEsZj10aGlzW2ErLS1kXTtkPjAmJihlKj0yNTYpOylmKz10aGlzW2ErLS1kXSplO3JldHVybiBlKj0xMjgsZj49ZSYmKGYtPU1hdGgucG93KDIsOCpiKSksZn0sZi5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2FdPy0xKigyNTUtdGhpc1thXSsxKTp0aGlzW2FdfSxmLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihhLGIpe2J8fEgoYSwyLHRoaXMubGVuZ3RoKTt2YXIgYz10aGlzW2FdfHRoaXNbYSsxXTw8ODtyZXR1cm4gMzI3NjgmYz80Mjk0OTAxNzYwfGM6Y30sZi5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oYSxiKXtifHxIKGEsMix0aGlzLmxlbmd0aCk7dmFyIGM9dGhpc1thKzFdfHRoaXNbYV08PDg7cmV0dXJuIDMyNzY4JmM/NDI5NDkwMTc2MHxjOmN9LGYucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSx0aGlzW2FdfHRoaXNbYSsxXTw8OHx0aGlzW2ErMl08PDE2fHRoaXNbYSszXTw8MjR9LGYucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSx0aGlzW2FdPDwyNHx0aGlzW2ErMV08PDE2fHRoaXNbYSsyXTw8OHx0aGlzW2ErM119LGYucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSxYLnJlYWQodGhpcyxhLCEwLDIzLDQpfSxmLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksWC5yZWFkKHRoaXMsYSwhMSwyMyw0KX0sZi5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw4LHRoaXMubGVuZ3RoKSxYLnJlYWQodGhpcyxhLCEwLDUyLDgpfSxmLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDgsdGhpcy5sZW5ndGgpLFgucmVhZCh0aGlzLGEsITEsNTIsOCl9LGYucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGEsYixjLGQpe2E9K2EsYnw9MCxjfD0wLGR8fEkodGhpcyxhLGIsYyxNYXRoLnBvdygyLDgqYyksMCk7dmFyIGU9MSxmPTA7Zm9yKHRoaXNbYl09MjU1JmE7KytmPGMmJihlKj0yNTYpOyl0aGlzW2IrZl09YS9lJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihhLGIsYyxkKXthPSthLGJ8PTAsY3w9MCxkfHxJKHRoaXMsYSxiLGMsTWF0aC5wb3coMiw4KmMpLDApO3ZhciBlPWMtMSxmPTE7Zm9yKHRoaXNbYitlXT0yNTUmYTstLWU+PTAmJihmKj0yNTYpOyl0aGlzW2IrZV09YS9mJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMSwyNTUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoYT1NYXRoLmZsb29yKGEpKSx0aGlzW2JdPTI1NSZhLGIrMX0sZi5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsNjU1MzUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPTI1NSZhLHRoaXNbYisxXT1hPj4+OCk6Sih0aGlzLGEsYiwhMCksYisyfSxmLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMiw2NTUzNSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjgsdGhpc1tiKzFdPTI1NSZhKTpKKHRoaXMsYSxiLCExKSxiKzJ9LGYucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiw0LDQyOTQ5NjcyOTUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2IrM109YT4+PjI0LHRoaXNbYisyXT1hPj4+MTYsdGhpc1tiKzFdPWE+Pj44LHRoaXNbYl09MjU1JmEpOksodGhpcyxhLGIsITApLGIrNH0sZi5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDQsNDI5NDk2NzI5NSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjI0LHRoaXNbYisxXT1hPj4+MTYsdGhpc1tiKzJdPWE+Pj44LHRoaXNbYiszXT0yNTUmYSk6Syh0aGlzLGEsYiwhMSksYis0fSxmLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGEsYixjLGQpe2lmKGE9K2EsYnw9MCwhZCl7dmFyIGU9TWF0aC5wb3coMiw4KmMtMSk7SSh0aGlzLGEsYixjLGUtMSwtZSl9dmFyIGY9MCxnPTEsaD1hPDA/MTowO2Zvcih0aGlzW2JdPTI1NSZhOysrZjxjJiYoZyo9MjU2KTspdGhpc1tiK2ZdPShhL2c+PjApLWgmMjU1O3JldHVybiBiK2N9LGYucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYT0rYSxifD0wLCFkKXt2YXIgZT1NYXRoLnBvdygyLDgqYy0xKTtJKHRoaXMsYSxiLGMsZS0xLC1lKX12YXIgZj1jLTEsZz0xLGg9YTwwPzE6MDtmb3IodGhpc1tiK2ZdPTI1NSZhOy0tZj49MCYmKGcqPTI1Nik7KXRoaXNbYitmXT0oYS9nPj4wKS1oJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwxLDEyNywtMTI4KSxmLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChhPU1hdGguZmxvb3IoYSkpLGE8MCYmKGE9MjU1K2ErMSksdGhpc1tiXT0yNTUmYSxiKzF9LGYucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsMzI3NjcsLTMyNzY4KSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09MjU1JmEsdGhpc1tiKzFdPWE+Pj44KTpKKHRoaXMsYSxiLCEwKSxiKzJ9LGYucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsMzI3NjcsLTMyNzY4KSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjgsdGhpc1tiKzFdPTI1NSZhKTpKKHRoaXMsYSxiLCExKSxiKzJ9LGYucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPTI1NSZhLHRoaXNbYisxXT1hPj4+OCx0aGlzW2IrMl09YT4+PjE2LHRoaXNbYiszXT1hPj4+MjQpOksodGhpcyxhLGIsITApLGIrNH0sZi5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxhPDAmJihhPTQyOTQ5NjcyOTUrYSsxKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjI0LHRoaXNbYisxXT1hPj4+MTYsdGhpc1tiKzJdPWE+Pj44LHRoaXNbYiszXT0yNTUmYSk6Syh0aGlzLGEsYiwhMSksYis0fSxmLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBNKHRoaXMsYSxiLCEwLGMpfSxmLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBNKHRoaXMsYSxiLCExLGMpfSxmLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTih0aGlzLGEsYiwhMCxjKX0sZi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIE4odGhpcyxhLGIsITEsYyl9LGYucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoY3x8KGM9MCksZHx8MD09PWR8fChkPXRoaXMubGVuZ3RoKSxiPj1hLmxlbmd0aCYmKGI9YS5sZW5ndGgpLGJ8fChiPTApLGQ+MCYmZDxjJiYoZD1jKSxkPT09YylyZXR1cm4gMDtpZigwPT09YS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihiPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKGM8MHx8Yz49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKGQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzXCIpO2Q+dGhpcy5sZW5ndGgmJihkPXRoaXMubGVuZ3RoKSxhLmxlbmd0aC1iPGQtYyYmKGQ9YS5sZW5ndGgtYitjKTt2YXIgZSxnPWQtYztpZih0aGlzPT09YSYmYzxiJiZiPGQpZm9yKGU9Zy0xO2U+PTA7ZS0tKWFbZStiXT10aGlzW2UrY107ZWxzZSBpZihnPDFlM3x8IWYuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoZT0wO2U8ZztlKyspYVtlK2JdPXRoaXNbZStjXTtlbHNlIGEuX3NldCh0aGlzLnN1YmFycmF5KGMsYytnKSxiKTtyZXR1cm4gZ30sZi5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihhLGIsYyl7aWYoYXx8KGE9MCksYnx8KGI9MCksY3x8KGM9dGhpcy5sZW5ndGgpLGM8Yil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImVuZCA8IHN0YXJ0XCIpO2lmKGMhPT1iJiYwIT09dGhpcy5sZW5ndGgpe2lmKGI8MHx8Yj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKGM8MHx8Yz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImVuZCBvdXQgb2YgYm91bmRzXCIpO3ZhciBkO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBhKWZvcihkPWI7ZDxjO2QrKyl0aGlzW2RdPWE7ZWxzZXt2YXIgZT1SKGEudG9TdHJpbmcoKSksZj1lLmxlbmd0aDtmb3IoZD1iO2Q8YztkKyspdGhpc1tkXT1lW2QlZl19cmV0dXJuIHRoaXN9fSxmLnByb3RvdHlwZS50b0FycmF5QnVmZmVyPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXkpe2lmKGYuVFlQRURfQVJSQVlfU1VQUE9SVClyZXR1cm4gbmV3IGYodGhpcykuYnVmZmVyO2Zvcih2YXIgYT1uZXcgVWludDhBcnJheSh0aGlzLmxlbmd0aCksYj0wLGM9YS5sZW5ndGg7YjxjO2IrPTEpYVtiXT10aGlzW2JdO3JldHVybiBhLmJ1ZmZlcn10aHJvdyBuZXcgVHlwZUVycm9yKFwiQnVmZmVyLnRvQXJyYXlCdWZmZXIgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIil9O3ZhciBfPWYucHJvdG90eXBlO2YuX2F1Z21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY29uc3RydWN0b3I9ZixhLl9pc0J1ZmZlcj0hMCxhLl9zZXQ9YS5zZXQsYS5nZXQ9Xy5nZXQsYS5zZXQ9Xy5zZXQsYS53cml0ZT1fLndyaXRlLGEudG9TdHJpbmc9Xy50b1N0cmluZyxhLnRvTG9jYWxlU3RyaW5nPV8udG9TdHJpbmcsYS50b0pTT049Xy50b0pTT04sYS5lcXVhbHM9Xy5lcXVhbHMsYS5jb21wYXJlPV8uY29tcGFyZSxhLmluZGV4T2Y9Xy5pbmRleE9mLGEuY29weT1fLmNvcHksYS5zbGljZT1fLnNsaWNlLGEucmVhZFVJbnRMRT1fLnJlYWRVSW50TEUsYS5yZWFkVUludEJFPV8ucmVhZFVJbnRCRSxhLnJlYWRVSW50OD1fLnJlYWRVSW50OCxhLnJlYWRVSW50MTZMRT1fLnJlYWRVSW50MTZMRSxhLnJlYWRVSW50MTZCRT1fLnJlYWRVSW50MTZCRSxhLnJlYWRVSW50MzJMRT1fLnJlYWRVSW50MzJMRSxhLnJlYWRVSW50MzJCRT1fLnJlYWRVSW50MzJCRSxhLnJlYWRJbnRMRT1fLnJlYWRJbnRMRSxhLnJlYWRJbnRCRT1fLnJlYWRJbnRCRSxhLnJlYWRJbnQ4PV8ucmVhZEludDgsYS5yZWFkSW50MTZMRT1fLnJlYWRJbnQxNkxFLGEucmVhZEludDE2QkU9Xy5yZWFkSW50MTZCRSxhLnJlYWRJbnQzMkxFPV8ucmVhZEludDMyTEUsYS5yZWFkSW50MzJCRT1fLnJlYWRJbnQzMkJFLGEucmVhZEZsb2F0TEU9Xy5yZWFkRmxvYXRMRSxhLnJlYWRGbG9hdEJFPV8ucmVhZEZsb2F0QkUsYS5yZWFkRG91YmxlTEU9Xy5yZWFkRG91YmxlTEUsYS5yZWFkRG91YmxlQkU9Xy5yZWFkRG91YmxlQkUsYS53cml0ZVVJbnQ4PV8ud3JpdGVVSW50OCxhLndyaXRlVUludExFPV8ud3JpdGVVSW50TEUsYS53cml0ZVVJbnRCRT1fLndyaXRlVUludEJFLGEud3JpdGVVSW50MTZMRT1fLndyaXRlVUludDE2TEUsYS53cml0ZVVJbnQxNkJFPV8ud3JpdGVVSW50MTZCRSxhLndyaXRlVUludDMyTEU9Xy53cml0ZVVJbnQzMkxFLGEud3JpdGVVSW50MzJCRT1fLndyaXRlVUludDMyQkUsYS53cml0ZUludExFPV8ud3JpdGVJbnRMRSxhLndyaXRlSW50QkU9Xy53cml0ZUludEJFLGEud3JpdGVJbnQ4PV8ud3JpdGVJbnQ4LGEud3JpdGVJbnQxNkxFPV8ud3JpdGVJbnQxNkxFLGEud3JpdGVJbnQxNkJFPV8ud3JpdGVJbnQxNkJFLGEud3JpdGVJbnQzMkxFPV8ud3JpdGVJbnQzMkxFLGEud3JpdGVJbnQzMkJFPV8ud3JpdGVJbnQzMkJFLGEud3JpdGVGbG9hdExFPV8ud3JpdGVGbG9hdExFLGEud3JpdGVGbG9hdEJFPV8ud3JpdGVGbG9hdEJFLGEud3JpdGVEb3VibGVMRT1fLndyaXRlRG91YmxlTEUsYS53cml0ZURvdWJsZUJFPV8ud3JpdGVEb3VibGVCRSxhLmZpbGw9Xy5maWxsLGEuaW5zcGVjdD1fLmluc3BlY3QsYS50b0FycmF5QnVmZmVyPV8udG9BcnJheUJ1ZmZlcixhfTt2YXIgYWE9L1teK1xcLzAtOUEtWmEtei1fXS9nfSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7XCJiYXNlNjQtanNcIjoxLGllZWU3NTQ6Nyxpc2FycmF5Ojh9XSw0OltmdW5jdGlvbihiLGMsZCl7KGZ1bmN0aW9uKGUsZil7IWZ1bmN0aW9uKGIsZSl7XCJvYmplY3RcIj09dHlwZW9mIGQmJnZvaWQgMCE9PWM/Yy5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiZhLmFtZD9hKGUpOmIuRVM2UHJvbWlzZT1lKCl9KHRoaXMsZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBhKGEpe3ZhciBiPXR5cGVvZiBhO3JldHVybiBudWxsIT09YSYmKFwib2JqZWN0XCI9PT1ifHxcImZ1bmN0aW9uXCI9PT1iKX1mdW5jdGlvbiBjKGEpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGF9ZnVuY3Rpb24gZChhKXtYPWF9ZnVuY3Rpb24gZyhhKXtZPWF9ZnVuY3Rpb24gaCgpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLm5leHRUaWNrKG0pfX1mdW5jdGlvbiBpKCl7cmV0dXJuIHZvaWQgMCE9PVc/ZnVuY3Rpb24oKXtXKG0pfTpsKCl9ZnVuY3Rpb24gaigpe3ZhciBhPTAsYj1uZXcgXyhtKSxjPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO3JldHVybiBiLm9ic2VydmUoYyx7Y2hhcmFjdGVyRGF0YTohMH0pLGZ1bmN0aW9uKCl7Yy5kYXRhPWE9KythJTJ9fWZ1bmN0aW9uIGsoKXt2YXIgYT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGEucG9ydDEub25tZXNzYWdlPW0sZnVuY3Rpb24oKXtyZXR1cm4gYS5wb3J0Mi5wb3N0TWVzc2FnZSgwKX19ZnVuY3Rpb24gbCgpe3ZhciBhPXNldFRpbWVvdXQ7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEobSwxKX19ZnVuY3Rpb24gbSgpe2Zvcih2YXIgYT0wO2E8VjthKz0yKXsoMCxjYVthXSkoY2FbYSsxXSksY2FbYV09dm9pZCAwLGNhW2ErMV09dm9pZCAwfVY9MH1mdW5jdGlvbiBuKCl7dHJ5e3ZhciBhPWIsYz1hKFwidmVydHhcIik7cmV0dXJuIFc9Yy5ydW5Pbkxvb3B8fGMucnVuT25Db250ZXh0LGkoKX1jYXRjaChhKXtyZXR1cm4gbCgpfX1mdW5jdGlvbiBvKGEsYil7dmFyIGM9YXJndW1lbnRzLGQ9dGhpcyxlPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHEpO3ZvaWQgMD09PWVbZWFdJiZKKGUpO3ZhciBmPWQuX3N0YXRlO3JldHVybiBmP2Z1bmN0aW9uKCl7dmFyIGE9Y1tmLTFdO1koZnVuY3Rpb24oKXtyZXR1cm4gRyhmLGUsYSxkLl9yZXN1bHQpfSl9KCk6QyhkLGUsYSxiKSxlfWZ1bmN0aW9uIHAoYSl7dmFyIGI9dGhpcztpZihhJiZcIm9iamVjdFwiPT10eXBlb2YgYSYmYS5jb25zdHJ1Y3Rvcj09PWIpcmV0dXJuIGE7dmFyIGM9bmV3IGIocSk7cmV0dXJuIHkoYyxhKSxjfWZ1bmN0aW9uIHEoKXt9ZnVuY3Rpb24gcigpe3JldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZlwiKX1mdW5jdGlvbiBzKCl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJBIHByb21pc2VzIGNhbGxiYWNrIGNhbm5vdCByZXR1cm4gdGhhdCBzYW1lIHByb21pc2UuXCIpfWZ1bmN0aW9uIHQoYSl7dHJ5e3JldHVybiBhLnRoZW59Y2F0Y2goYSl7cmV0dXJuIGlhLmVycm9yPWEsaWF9fWZ1bmN0aW9uIHUoYSxiLGMsZCl7dHJ5e2EuY2FsbChiLGMsZCl9Y2F0Y2goYSl7cmV0dXJuIGF9fWZ1bmN0aW9uIHYoYSxiLGMpe1koZnVuY3Rpb24oYSl7dmFyIGQ9ITEsZT11KGMsYixmdW5jdGlvbihjKXtkfHwoZD0hMCxiIT09Yz95KGEsYyk6QShhLGMpKX0sZnVuY3Rpb24oYil7ZHx8KGQ9ITAsQihhLGIpKX0sXCJTZXR0bGU6IFwiKyhhLl9sYWJlbHx8XCIgdW5rbm93biBwcm9taXNlXCIpKTshZCYmZSYmKGQ9ITAsQihhLGUpKX0sYSl9ZnVuY3Rpb24gdyhhLGIpe2IuX3N0YXRlPT09Z2E/QShhLGIuX3Jlc3VsdCk6Yi5fc3RhdGU9PT1oYT9CKGEsYi5fcmVzdWx0KTpDKGIsdm9pZCAwLGZ1bmN0aW9uKGIpe3JldHVybiB5KGEsYil9LGZ1bmN0aW9uKGIpe3JldHVybiBCKGEsYil9KX1mdW5jdGlvbiB4KGEsYixkKXtiLmNvbnN0cnVjdG9yPT09YS5jb25zdHJ1Y3RvciYmZD09PW8mJmIuY29uc3RydWN0b3IucmVzb2x2ZT09PXA/dyhhLGIpOmQ9PT1pYT8oQihhLGlhLmVycm9yKSxpYS5lcnJvcj1udWxsKTp2b2lkIDA9PT1kP0EoYSxiKTpjKGQpP3YoYSxiLGQpOkEoYSxiKX1mdW5jdGlvbiB5KGIsYyl7Yj09PWM/QihiLHIoKSk6YShjKT94KGIsYyx0KGMpKTpBKGIsYyl9ZnVuY3Rpb24geihhKXthLl9vbmVycm9yJiZhLl9vbmVycm9yKGEuX3Jlc3VsdCksRChhKX1mdW5jdGlvbiBBKGEsYil7YS5fc3RhdGU9PT1mYSYmKGEuX3Jlc3VsdD1iLGEuX3N0YXRlPWdhLDAhPT1hLl9zdWJzY3JpYmVycy5sZW5ndGgmJlkoRCxhKSl9ZnVuY3Rpb24gQihhLGIpe2EuX3N0YXRlPT09ZmEmJihhLl9zdGF0ZT1oYSxhLl9yZXN1bHQ9YixZKHosYSkpfWZ1bmN0aW9uIEMoYSxiLGMsZCl7dmFyIGU9YS5fc3Vic2NyaWJlcnMsZj1lLmxlbmd0aDthLl9vbmVycm9yPW51bGwsZVtmXT1iLGVbZitnYV09YyxlW2YraGFdPWQsMD09PWYmJmEuX3N0YXRlJiZZKEQsYSl9ZnVuY3Rpb24gRChhKXt2YXIgYj1hLl9zdWJzY3JpYmVycyxjPWEuX3N0YXRlO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBkPXZvaWQgMCxlPXZvaWQgMCxmPWEuX3Jlc3VsdCxnPTA7ZzxiLmxlbmd0aDtnKz0zKWQ9YltnXSxlPWJbZytjXSxkP0coYyxkLGUsZik6ZShmKTthLl9zdWJzY3JpYmVycy5sZW5ndGg9MH19ZnVuY3Rpb24gRSgpe3RoaXMuZXJyb3I9bnVsbH1mdW5jdGlvbiBGKGEsYil7dHJ5e3JldHVybiBhKGIpfWNhdGNoKGEpe3JldHVybiBqYS5lcnJvcj1hLGphfX1mdW5jdGlvbiBHKGEsYixkLGUpe3ZhciBmPWMoZCksZz12b2lkIDAsaD12b2lkIDAsaT12b2lkIDAsaj12b2lkIDA7aWYoZil7aWYoZz1GKGQsZSksZz09PWphPyhqPSEwLGg9Zy5lcnJvcixnLmVycm9yPW51bGwpOmk9ITAsYj09PWcpcmV0dXJuIHZvaWQgQihiLHMoKSl9ZWxzZSBnPWUsaT0hMDtiLl9zdGF0ZSE9PWZhfHwoZiYmaT95KGIsZyk6aj9CKGIsaCk6YT09PWdhP0EoYixnKTphPT09aGEmJkIoYixnKSl9ZnVuY3Rpb24gSChhLGIpe3RyeXtiKGZ1bmN0aW9uKGIpe3koYSxiKX0sZnVuY3Rpb24oYil7QihhLGIpfSl9Y2F0Y2goYil7QihhLGIpfX1mdW5jdGlvbiBJKCl7cmV0dXJuIGthKyt9ZnVuY3Rpb24gSihhKXthW2VhXT1rYSsrLGEuX3N0YXRlPXZvaWQgMCxhLl9yZXN1bHQ9dm9pZCAwLGEuX3N1YnNjcmliZXJzPVtdfWZ1bmN0aW9uIEsoYSxiKXt0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yPWEsdGhpcy5wcm9taXNlPW5ldyBhKHEpLHRoaXMucHJvbWlzZVtlYV18fEoodGhpcy5wcm9taXNlKSxVKGIpPyh0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLl9yZW1haW5pbmc9Yi5sZW5ndGgsdGhpcy5fcmVzdWx0PW5ldyBBcnJheSh0aGlzLmxlbmd0aCksMD09PXRoaXMubGVuZ3RoP0EodGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCk6KHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RofHwwLHRoaXMuX2VudW1lcmF0ZShiKSwwPT09dGhpcy5fcmVtYWluaW5nJiZBKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpKSk6Qih0aGlzLnByb21pc2UsTCgpKX1mdW5jdGlvbiBMKCl7cmV0dXJuIG5ldyBFcnJvcihcIkFycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheVwiKX1mdW5jdGlvbiBNKGEpe3JldHVybiBuZXcgSyh0aGlzLGEpLnByb21pc2V9ZnVuY3Rpb24gTihhKXt2YXIgYj10aGlzO3JldHVybiBuZXcgYihVKGEpP2Z1bmN0aW9uKGMsZCl7Zm9yKHZhciBlPWEubGVuZ3RoLGY9MDtmPGU7ZisrKWIucmVzb2x2ZShhW2ZdKS50aGVuKGMsZCl9OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIobmV3IFR5cGVFcnJvcihcIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS5cIikpfSl9ZnVuY3Rpb24gTyhhKXt2YXIgYj10aGlzLGM9bmV3IGIocSk7cmV0dXJuIEIoYyxhKSxjfWZ1bmN0aW9uIFAoKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvclwiKX1mdW5jdGlvbiBRKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKX1mdW5jdGlvbiBSKGEpe3RoaXNbZWFdPUkoKSx0aGlzLl9yZXN1bHQ9dGhpcy5fc3RhdGU9dm9pZCAwLHRoaXMuX3N1YnNjcmliZXJzPVtdLHEhPT1hJiYoXCJmdW5jdGlvblwiIT10eXBlb2YgYSYmUCgpLHRoaXMgaW5zdGFuY2VvZiBSP0godGhpcyxhKTpRKCkpfWZ1bmN0aW9uIFMoKXt2YXIgYT12b2lkIDA7aWYodm9pZCAwIT09ZilhPWY7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZilhPXNlbGY7ZWxzZSB0cnl7YT1GdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goYSl7dGhyb3cgbmV3IEVycm9yKFwicG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50XCIpfXZhciBiPWEuUHJvbWlzZTtpZihiKXt2YXIgYz1udWxsO3RyeXtjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChiLnJlc29sdmUoKSl9Y2F0Y2goYSl7fWlmKFwiW29iamVjdCBQcm9taXNlXVwiPT09YyYmIWIuY2FzdClyZXR1cm59YS5Qcm9taXNlPVJ9dmFyIFQ9dm9pZCAwO1Q9QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5OmZ1bmN0aW9uKGEpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKX07dmFyIFU9VCxWPTAsVz12b2lkIDAsWD12b2lkIDAsWT1mdW5jdGlvbihhLGIpe2NhW1ZdPWEsY2FbVisxXT1iLDI9PT0oVis9MikmJihYP1gobSk6ZGEoKSl9LFo9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwLCQ9Wnx8e30sXz0kLk11dGF0aW9uT2JzZXJ2ZXJ8fCQuV2ViS2l0TXV0YXRpb25PYnNlcnZlcixhYT1cInVuZGVmaW5lZFwiPT10eXBlb2Ygc2VsZiYmdm9pZCAwIT09ZSYmXCJbb2JqZWN0IHByb2Nlc3NdXCI9PT17fS50b1N0cmluZy5jYWxsKGUpLGJhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGltcG9ydFNjcmlwdHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCxjYT1uZXcgQXJyYXkoMWUzKSxkYT12b2lkIDA7ZGE9YWE/aCgpOl8/aigpOmJhP2soKTp2b2lkIDA9PT1aJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBiP24oKTpsKCk7dmFyIGVhPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygxNiksZmE9dm9pZCAwLGdhPTEsaGE9MixpYT1uZXcgRSxqYT1uZXcgRSxrYT0wO3JldHVybiBLLnByb3RvdHlwZS5fZW51bWVyYXRlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wO3RoaXMuX3N0YXRlPT09ZmEmJmI8YS5sZW5ndGg7YisrKXRoaXMuX2VhY2hFbnRyeShhW2JdLGIpfSxLLnByb3RvdHlwZS5fZWFjaEVudHJ5PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcixkPWMucmVzb2x2ZTtpZihkPT09cCl7dmFyIGU9dChhKTtpZihlPT09byYmYS5fc3RhdGUhPT1mYSl0aGlzLl9zZXR0bGVkQXQoYS5fc3RhdGUsYixhLl9yZXN1bHQpO2Vsc2UgaWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aGlzLl9yZW1haW5pbmctLSx0aGlzLl9yZXN1bHRbYl09YTtlbHNlIGlmKGM9PT1SKXt2YXIgZj1uZXcgYyhxKTt4KGYsYSxlKSx0aGlzLl93aWxsU2V0dGxlQXQoZixiKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgYyhmdW5jdGlvbihiKXtyZXR1cm4gYihhKX0pLGIpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KGQoYSksYil9LEsucHJvdG90eXBlLl9zZXR0bGVkQXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMucHJvbWlzZTtkLl9zdGF0ZT09PWZhJiYodGhpcy5fcmVtYWluaW5nLS0sYT09PWhhP0IoZCxjKTp0aGlzLl9yZXN1bHRbYl09YyksMD09PXRoaXMuX3JlbWFpbmluZyYmQShkLHRoaXMuX3Jlc3VsdCl9LEsucHJvdG90eXBlLl93aWxsU2V0dGxlQXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO0MoYSx2b2lkIDAsZnVuY3Rpb24oYSl7cmV0dXJuIGMuX3NldHRsZWRBdChnYSxiLGEpfSxmdW5jdGlvbihhKXtyZXR1cm4gYy5fc2V0dGxlZEF0KGhhLGIsYSl9KX0sUi5hbGw9TSxSLnJhY2U9TixSLnJlc29sdmU9cCxSLnJlamVjdD1PLFIuX3NldFNjaGVkdWxlcj1kLFIuX3NldEFzYXA9ZyxSLl9hc2FwPVksUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlIsdGhlbjpvLGNhdGNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnRoZW4obnVsbCxhKX19LFIucG9seWZpbGw9UyxSLlByb21pc2U9UixSfSl9KS5jYWxsKHRoaXMsYihcIl9wcm9jZXNzXCIpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7X3Byb2Nlc3M6MTF9XSw1OltmdW5jdGlvbihiLGMsZCl7IWZ1bmN0aW9uKGIsZSl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSYmYS5hbWQpYShbXCJleHBvcnRzXCIsXCJtb2R1bGVcIl0sZSk7ZWxzZSBpZih2b2lkIDAhPT1kJiZ2b2lkIDAhPT1jKWUoZCxjKTtlbHNle3ZhciBmPXtleHBvcnRzOnt9fTtlKGYuZXhwb3J0cyxmKSxiLmZldGNoSnNvbnA9Zi5leHBvcnRzfX0odGhpcyxmdW5jdGlvbihhLGIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGMoKXtyZXR1cm5cImpzb25wX1wiK0RhdGUubm93KCkrXCJfXCIrTWF0aC5jZWlsKDFlNSpNYXRoLnJhbmRvbSgpKX1mdW5jdGlvbiBkKGEpe3RyeXtkZWxldGUgd2luZG93W2FdfWNhdGNoKGIpe3dpbmRvd1thXT12b2lkIDB9fWZ1bmN0aW9uIGUoYSl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSk7YiYmZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLnJlbW92ZUNoaWxkKGIpfWZ1bmN0aW9uIGYoYSl7dmFyIGI9YXJndW1lbnRzLmxlbmd0aDw9MXx8dm9pZCAwPT09YXJndW1lbnRzWzFdP3t9OmFyZ3VtZW50c1sxXSxmPWEsaD1iLnRpbWVvdXR8fGcudGltZW91dCxpPWIuanNvbnBDYWxsYmFja3x8Zy5qc29ucENhbGxiYWNrLGo9dm9pZCAwO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihnLGspe3ZhciBsPWIuanNvbnBDYWxsYmFja0Z1bmN0aW9ufHxjKCksbT1pK1wiX1wiK2w7d2luZG93W2xdPWZ1bmN0aW9uKGEpe2coe29rOiEwLGpzb246ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGEpfX0pLGomJmNsZWFyVGltZW91dChqKSxlKG0pLGQobCl9LGYrPS0xPT09Zi5pbmRleE9mKFwiP1wiKT9cIj9cIjpcIiZcIjt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO24uc2V0QXR0cmlidXRlKFwic3JjXCIsXCJcIitmK2krXCI9XCIrbCksYi5jaGFyc2V0JiZuLnNldEF0dHJpYnV0ZShcImNoYXJzZXRcIixiLmNoYXJzZXQpLG4uaWQ9bSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQobiksaj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ayhuZXcgRXJyb3IoXCJKU09OUCByZXF1ZXN0IHRvIFwiK2ErXCIgdGltZWQgb3V0XCIpKSxkKGwpLGUobSksd2luZG93W2xdPWZ1bmN0aW9uKCl7ZChsKX19LGgpLG4ub25lcnJvcj1mdW5jdGlvbigpe2sobmV3IEVycm9yKFwiSlNPTlAgcmVxdWVzdCB0byBcIithK1wiIGZhaWxlZFwiKSksZChsKSxlKG0pLGomJmNsZWFyVGltZW91dChqKX19KX12YXIgZz17dGltZW91dDo1ZTMsanNvbnBDYWxsYmFjazpcImNhbGxiYWNrXCIsanNvbnBDYWxsYmFja0Z1bmN0aW9uOm51bGx9O2IuZXhwb3J0cz1mfSl9LHt9XSw2OltmdW5jdGlvbihiLGMsZCl7dmFyIGU9ZXx8ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7aWYoISh2b2lkIDA9PT1hfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiYvTVNJRSBbMS05XVxcLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkpe3ZhciBiPWEuZG9jdW1lbnQsYz1mdW5jdGlvbigpe3JldHVybiBhLlVSTHx8YS53ZWJraXRVUkx8fGF9LGQ9Yi5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXCJhXCIpLGU9XCJkb3dubG9hZFwiaW4gZCxmPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIik7YS5kaXNwYXRjaEV2ZW50KGIpfSxnPS9jb25zdHJ1Y3Rvci9pLnRlc3QoYS5IVE1MRWxlbWVudCl8fGEuc2FmYXJpLGg9L0NyaU9TXFwvW1xcZF0rLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGk9ZnVuY3Rpb24oYil7KGEuc2V0SW1tZWRpYXRlfHxhLnNldFRpbWVvdXQpKGZ1bmN0aW9uKCl7dGhyb3cgYn0sMCl9LGo9XCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixrPTRlNCxsPWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKCl7XCJzdHJpbmdcIj09dHlwZW9mIGE/YygpLnJldm9rZU9iamVjdFVSTChhKTphLnJlbW92ZSgpfTtzZXRUaW1lb3V0KGIsayl9LG09ZnVuY3Rpb24oYSxiLGMpe2I9W10uY29uY2F0KGIpO2Zvcih2YXIgZD1iLmxlbmd0aDtkLS07KXt2YXIgZT1hW1wib25cIitiW2RdXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKXRyeXtlLmNhbGwoYSxjfHxhKX1jYXRjaChhKXtpKGEpfX19LG49ZnVuY3Rpb24oYSl7cmV0dXJuL15cXHMqKD86dGV4dFxcL1xcUyp8YXBwbGljYXRpb25cXC94bWx8XFxTKlxcL1xcUypcXCt4bWwpXFxzKjsuKmNoYXJzZXRcXHMqPVxccyp1dGYtOC9pLnRlc3QoYS50eXBlKT9uZXcgQmxvYihbU3RyaW5nLmZyb21DaGFyQ29kZSg2NTI3OSksYV0se3R5cGU6YS50eXBlfSk6YX0sbz1mdW5jdGlvbihiLGksayl7a3x8KGI9bihiKSk7dmFyIG8scD10aGlzLHE9Yi50eXBlLHI9cT09PWoscz1mdW5jdGlvbigpe20ocCxcIndyaXRlc3RhcnQgcHJvZ3Jlc3Mgd3JpdGUgd3JpdGVlbmRcIi5zcGxpdChcIiBcIikpfSx0PWZ1bmN0aW9uKCl7aWYoKGh8fHImJmcpJiZhLkZpbGVSZWFkZXIpe3ZhciBkPW5ldyBGaWxlUmVhZGVyO3JldHVybiBkLm9ubG9hZGVuZD1mdW5jdGlvbigpe3ZhciBiPWg/ZC5yZXN1bHQ6ZC5yZXN1bHQucmVwbGFjZSgvXmRhdGE6W147XSo7LyxcImRhdGE6YXR0YWNobWVudC9maWxlO1wiKTthLm9wZW4oYixcIl9ibGFua1wiKXx8KGEubG9jYXRpb24uaHJlZj1iKSxiPXZvaWQgMCxwLnJlYWR5U3RhdGU9cC5ET05FLHMoKX0sZC5yZWFkQXNEYXRhVVJMKGIpLHZvaWQocC5yZWFkeVN0YXRlPXAuSU5JVCl9aWYob3x8KG89YygpLmNyZWF0ZU9iamVjdFVSTChiKSkscilhLmxvY2F0aW9uLmhyZWY9bztlbHNle2Eub3BlbihvLFwiX2JsYW5rXCIpfHwoYS5sb2NhdGlvbi5ocmVmPW8pfXAucmVhZHlTdGF0ZT1wLkRPTkUscygpLGwobyl9O2lmKHAucmVhZHlTdGF0ZT1wLklOSVQsZSlyZXR1cm4gbz1jKCkuY3JlYXRlT2JqZWN0VVJMKGIpLHZvaWQgc2V0VGltZW91dChmdW5jdGlvbigpe2QuaHJlZj1vLGQuZG93bmxvYWQ9aSxmKGQpLHMoKSxsKG8pLHAucmVhZHlTdGF0ZT1wLkRPTkV9KTt0KCl9LHA9by5wcm90b3R5cGUscT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG5ldyBvKGEsYnx8YS5uYW1lfHxcImRvd25sb2FkXCIsYyl9O3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iP2Z1bmN0aW9uKGEsYixjKXtyZXR1cm4gYj1ifHxhLm5hbWV8fFwiZG93bmxvYWRcIixjfHwoYT1uKGEpKSxuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihhLGIpfToocC5hYm9ydD1mdW5jdGlvbigpe30scC5yZWFkeVN0YXRlPXAuSU5JVD0wLHAuV1JJVElORz0xLHAuRE9ORT0yLHAuZXJyb3I9cC5vbndyaXRlc3RhcnQ9cC5vbnByb2dyZXNzPXAub253cml0ZT1wLm9uYWJvcnQ9cC5vbmVycm9yPXAub253cml0ZWVuZD1udWxsLHEpfX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGZ8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd3x8dGhpcy5jb250ZW50KTt2b2lkIDAhPT1jJiZjLmV4cG9ydHM/Yy5leHBvcnRzLnNhdmVBcz1lOnZvaWQgMCE9PWEmJm51bGwhPT1hJiZudWxsIT09YS5hbWQmJmEoXCJGaWxlU2F2ZXIuanNcIixmdW5jdGlvbigpe3JldHVybiBlfSl9LHt9XSw3OltmdW5jdGlvbihhLGIsYyl7Yy5yZWFkPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoPTgqZS1kLTEsaT0oMTw8aCktMSxqPWk+PjEsaz0tNyxsPWM/ZS0xOjAsbT1jPy0xOjEsbj1hW2IrbF07Zm9yKGwrPW0sZj1uJigxPDwtayktMSxuPj49LWssays9aDtrPjA7Zj0yNTYqZithW2IrbF0sbCs9bSxrLT04KTtmb3IoZz1mJigxPDwtayktMSxmPj49LWssays9ZDtrPjA7Zz0yNTYqZythW2IrbF0sbCs9bSxrLT04KTtpZigwPT09ZilmPTEtajtlbHNle2lmKGY9PT1pKXJldHVybiBnP05hTjoxLzAqKG4/LTE6MSk7Zys9TWF0aC5wb3coMixkKSxmLT1qfXJldHVybihuPy0xOjEpKmcqTWF0aC5wb3coMixmLWQpfSxjLndyaXRlPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZyxoLGksaj04KmYtZS0xLGs9KDE8PGopLTEsbD1rPj4xLG09MjM9PT1lP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxuPWQ/MDpmLTEsbz1kPzE6LTEscD1iPDB8fDA9PT1iJiYxL2I8MD8xOjA7Zm9yKGI9TWF0aC5hYnMoYiksaXNOYU4oYil8fGI9PT0xLzA/KGg9aXNOYU4oYik/MTowLGc9ayk6KGc9TWF0aC5mbG9vcihNYXRoLmxvZyhiKS9NYXRoLkxOMiksYiooaT1NYXRoLnBvdygyLC1nKSk8MSYmKGctLSxpKj0yKSxiKz1nK2w+PTE/bS9pOm0qTWF0aC5wb3coMiwxLWwpLGIqaT49MiYmKGcrKyxpLz0yKSxnK2w+PWs/KGg9MCxnPWspOmcrbD49MT8oaD0oYippLTEpKk1hdGgucG93KDIsZSksZys9bCk6KGg9YipNYXRoLnBvdygyLGwtMSkqTWF0aC5wb3coMixlKSxnPTApKTtlPj04O2FbYytuXT0yNTUmaCxuKz1vLGgvPTI1NixlLT04KTtmb3IoZz1nPDxlfGgsais9ZTtqPjA7YVtjK25dPTI1NSZnLG4rPW8sZy89MjU2LGotPTgpO2FbYytuLW9dfD0xMjgqcH19LHt9XSw4OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9e30udG9TdHJpbmc7Yi5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09ZC5jYWxsKGEpfX0se31dLDk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7cmV0dXJuIGEuYj09PWIuYiYmYS5hPT09Yi5hfWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gYS5iPGIuYnx8YS5iPT09Yi5iJiZhLmE8PWIuYX1mdW5jdGlvbiBmKGEsYixjKXt2YXIgZD1iLmItYS5iLGU9Yy5iLWIuYlxuO3JldHVybiAwPGQrZT9kPGU/Yi5hLWEuYStkLyhkK2UpKihhLmEtYy5hKTpiLmEtYy5hK2UvKGQrZSkqKGMuYS1hLmEpOjB9ZnVuY3Rpb24gZyhhLGIsYyl7dmFyIGQ9Yi5iLWEuYixlPWMuYi1iLmI7cmV0dXJuIDA8ZCtlPyhiLmEtYy5hKSpkKyhiLmEtYS5hKSplOjB9ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhLmE8Yi5hfHxhLmE9PT1iLmEmJmEuYjw9Yi5ifWZ1bmN0aW9uIGkoYSxiLGMpe3ZhciBkPWIuYS1hLmEsZT1jLmEtYi5hO3JldHVybiAwPGQrZT9kPGU/Yi5iLWEuYitkLyhkK2UpKihhLmItYy5iKTpiLmItYy5iK2UvKGQrZSkqKGMuYi1hLmIpOjB9ZnVuY3Rpb24gaihhLGIsYyl7dmFyIGQ9Yi5hLWEuYSxlPWMuYS1iLmE7cmV0dXJuIDA8ZCtlPyhiLmItYy5iKSpkKyhiLmItYS5iKSplOjB9ZnVuY3Rpb24gayhhKXtyZXR1cm4gZShhLmIuYSxhLmEpfWZ1bmN0aW9uIGwoYSl7cmV0dXJuIGUoYS5hLGEuYi5hKX1mdW5jdGlvbiBtKGEsYixjLGQpe3JldHVybiBhPTA+YT8wOmEsYz0wPmM/MDpjLGE8PWM/MD09PWM/KGIrZCkvMjpiK2EvKGErYykqKGQtYik6ZCtjLyhhK2MpKihiLWQpfWZ1bmN0aW9uIG4oYSl7dmFyIGI9cyhhLmIpO3JldHVybiB1KGIsYS5jKSx1KGIuYixhLmMpLHYoYixhLmEpLGJ9ZnVuY3Rpb24gbyhhLGIpe3ZhciBjPSExLGQ9ITE7YSE9PWImJihiLmEhPT1hLmEmJihkPSEwLHgoYi5hLGEuYSkpLGIuZCE9PWEuZCYmKGM9ITAseShiLmQsYS5kKSksdChiLGEpLGR8fCh1KGIsYS5hKSxhLmEuYz1hKSxjfHwodihiLGEuZCksYS5kLmE9YSkpfWZ1bmN0aW9uIHAoYSl7dmFyIGI9YS5iLGM9ITE7YS5kIT09YS5iLmQmJihjPSEwLHkoYS5kLGEuYi5kKSksYS5jPT09YT94KGEuYSxudWxsKTooYS5iLmQuYT0kKGEpLGEuYS5jPWEuYyx0KGEsJChhKSksY3x8dihhLGEuZCkpLGIuYz09PWI/KHgoYi5hLG51bGwpLHkoYi5kLG51bGwpKTooYS5kLmE9JChiKSxiLmEuYz1iLmMsdChiLCQoYikpKSx3KGEpfWZ1bmN0aW9uIHEoYSl7dmFyIGI9cyhhKSxjPWIuYjtyZXR1cm4gdChiLGEuZSksYi5hPWEuYi5hLHUoYyxiLmEpLGIuZD1jLmQ9YS5kLGI9Yi5iLHQoYS5iLCQoYS5iKSksdChhLmIsYiksYS5iLmE9Yi5hLGIuYi5hLmM9Yi5iLGIuYi5kPWEuYi5kLGIuZj1hLmYsYi5iLmY9YS5iLmYsYn1mdW5jdGlvbiByKGEsYil7dmFyIGM9ITEsZD1zKGEpLGU9ZC5iO3JldHVybiBiLmQhPT1hLmQmJihjPSEwLHkoYi5kLGEuZCkpLHQoZCxhLmUpLHQoZSxiKSxkLmE9YS5iLmEsZS5hPWIuYSxkLmQ9ZS5kPWEuZCxhLmQuYT1lLGN8fHYoZCxhLmQpLGR9ZnVuY3Rpb24gcyhhKXt2YXIgYj1uZXcgWixjPW5ldyBaLGQ9YS5iLmg7cmV0dXJuIGMuaD1kLGQuYi5oPWIsYi5oPWEsYS5iLmg9YyxiLmI9YyxiLmM9YixiLmU9YyxjLmI9YixjLmM9YyxjLmU9Yn1mdW5jdGlvbiB0KGEsYil7dmFyIGM9YS5jLGQ9Yi5jO2MuYi5lPWIsZC5iLmU9YSxhLmM9ZCxiLmM9Y31mdW5jdGlvbiB1KGEsYil7dmFyIGM9Yi5mLGQ9bmV3IGFhKGIsYyk7Yy5lPWQsYi5mPWQsYz1kLmM9YTtkb3tjLmE9ZCxjPWMuY313aGlsZShjIT09YSl9ZnVuY3Rpb24gdihhLGIpe3ZhciBjPWIuZCxkPW5ldyBZKGIsYyk7Yy5iPWQsYi5kPWQsZC5hPWEsZC5jPWIuYyxjPWE7ZG97Yy5kPWQsYz1jLmV9d2hpbGUoYyE9PWEpfWZ1bmN0aW9uIHcoYSl7dmFyIGI9YS5oO2E9YS5iLmgsYi5iLmg9YSxhLmIuaD1ifWZ1bmN0aW9uIHgoYSxiKXt2YXIgYz1hLmMsZD1jO2Rve2QuYT1iLGQ9ZC5jfXdoaWxlKGQhPT1jKTtjPWEuZixkPWEuZSxkLmY9YyxjLmU9ZH1mdW5jdGlvbiB5KGEsYil7dmFyIGM9YS5hLGQ9Yztkb3tkLmQ9YixkPWQuZX13aGlsZShkIT09Yyk7Yz1hLmQsZD1hLmIsZC5kPWMsYy5iPWR9ZnVuY3Rpb24geihhKXt2YXIgYj0wO3JldHVybiBNYXRoLmFicyhhWzFdKT5NYXRoLmFicyhhWzBdKSYmKGI9MSksTWF0aC5hYnMoYVsyXSk+TWF0aC5hYnMoYVtiXSkmJihiPTIpLGJ9ZnVuY3Rpb24gQShhLGIpe2EuZis9Yi5mLGEuYi5mKz1iLmIuZn1mdW5jdGlvbiBCKGEsYixjKXtyZXR1cm4gYT1hLmEsYj1iLmEsYz1jLmEsYi5iLmE9PT1hP2MuYi5hPT09YT9lKGIuYSxjLmEpPzA+PWcoYy5iLmEsYi5hLGMuYSk6MDw9ZyhiLmIuYSxjLmEsYi5hKTowPj1nKGMuYi5hLGEsYy5hKTpjLmIuYT09PWE/MDw9ZyhiLmIuYSxhLGIuYSk6KGI9ZihiLmIuYSxhLGIuYSksYT1mKGMuYi5hLGEsYy5hKSxiPj1hKX1mdW5jdGlvbiBDKGEpe2EuYS5pPW51bGw7dmFyIGI9YS5lO2IuYS5jPWIuYyxiLmMuYT1iLmEsYS5lPW51bGx9ZnVuY3Rpb24gRChhLGIpe3AoYS5hKSxhLmM9ITEsYS5hPWIsYi5pPWF9ZnVuY3Rpb24gRShhKXt2YXIgYj1hLmEuYTtkb3thPW9hKGEpfXdoaWxlKGEuYS5hPT09Yik7cmV0dXJuIGEuYyYmKGI9cihuYShhKS5hLmIsYS5hLmUpLEQoYSxiKSxhPW9hKGEpKSxhfWZ1bmN0aW9uIEYoYSxiLGMpe3ZhciBkPW5ldyBtYTtyZXR1cm4gZC5hPWMsZC5lPVQoYS5mLGIuZSxkKSxjLmk9ZH1mdW5jdGlvbiBHKGEsYil7c3dpdGNoKGEucyl7Y2FzZSAxMDAxMzA6cmV0dXJuIDAhPSgxJmIpO2Nhc2UgMTAwMTMxOnJldHVybiAwIT09YjtjYXNlIDEwMDEzMjpyZXR1cm4gMDxiO2Nhc2UgMTAwMTMzOnJldHVybiAwPmI7Y2FzZSAxMDAxMzQ6cmV0dXJuIDI8PWJ8fC0yPj1ifXJldHVybiExfWZ1bmN0aW9uIEgoYSl7dmFyIGI9YS5hLGM9Yi5kO2MuYz1hLmQsYy5hPWIsQyhhKX1mdW5jdGlvbiBJKGEsYixjKXtmb3IoYT1iLGI9Yi5hO2EhPT1jOyl7YS5jPSExO3ZhciBkPW5hKGEpLGU9ZC5hO2lmKGUuYSE9PWIuYSl7aWYoIWQuYyl7SChhKTticmVha31lPXIoYi5jLmIsZS5iKSxEKGQsZSl9Yi5jIT09ZSYmKG8oJChlKSxlKSxvKGIsZSkpLEgoYSksYj1kLmEsYT1kfXJldHVybiBifWZ1bmN0aW9uIEooYSxiLGMsZCxlLGYpe3ZhciBnPSEwO2Rve0YoYSxiLGMuYiksYz1jLmN9d2hpbGUoYyE9PWQpO2ZvcihudWxsPT09ZSYmKGU9bmEoYikuYS5iLmMpO2Q9bmEoYiksYz1kLmEuYixjLmE9PT1lLmE7KWMuYyE9PWUmJihvKCQoYyksYyksbygkKGUpLGMpKSxkLmY9Yi5mLWMuZixkLmQ9RyhhLGQuZiksYi5iPSEwLCFnJiZOKGEsYikmJihBKGMsZSksQyhiKSxwKGUpKSxnPSExLGI9ZCxlPWM7Yi5iPSEwLGYmJlAoYSxiKX1mdW5jdGlvbiBLKGEsYixjLGQsZSl7dmFyIGY9W2IuZ1swXSxiLmdbMV0sYi5nWzJdXTtiLmQ9bnVsbCxiLmQ9YS5vP2EubyhmLGMsZCxhLmMpfHxudWxsOm51bGwsbnVsbD09PWIuZCYmKGU/YS5ufHwoWChhLDEwMDE1NiksYS5uPSEwKTpiLmQ9Y1swXSl9ZnVuY3Rpb24gTChhLGIsYyl7dmFyIGQ9W251bGwsbnVsbCxudWxsLG51bGxdO2RbMF09Yi5hLmQsZFsxXT1jLmEuZCxLKGEsYi5hLGQsWy41LC41LDAsMF0sITEpLG8oYixjKX1mdW5jdGlvbiBNKGEsYixjLGQsZSl7dmFyIGY9TWF0aC5hYnMoYi5iLWEuYikrTWF0aC5hYnMoYi5hLWEuYSksZz1NYXRoLmFicyhjLmItYS5iKStNYXRoLmFicyhjLmEtYS5hKSxoPWUrMTtkW2VdPS41KmcvKGYrZyksZFtoXT0uNSpmLyhmK2cpLGEuZ1swXSs9ZFtlXSpiLmdbMF0rZFtoXSpjLmdbMF0sYS5nWzFdKz1kW2VdKmIuZ1sxXStkW2hdKmMuZ1sxXSxhLmdbMl0rPWRbZV0qYi5nWzJdK2RbaF0qYy5nWzJdfWZ1bmN0aW9uIE4oYSxiKXt2YXIgYz1uYShiKSxmPWIuYSxoPWMuYTtpZihlKGYuYSxoLmEpKXtpZigwPGcoaC5iLmEsZi5hLGguYSkpcmV0dXJuITE7aWYoZChmLmEsaC5hKSl7aWYoZi5hIT09aC5hKXt2YXIgYz1hLmUsaT1mLmEuaDtpZigwPD1pKXt2YXIgYz1jLmIsaj1jLmQsaz1jLmUsbD1jLmMsbT1sW2ldO2pbbV09altjLmFdLGxbalttXV09bSxtPD0tLWMuYSYmKDE+PW0/a2EoYyxtKTplKGtbalttPj4xXV0sa1tqW21dXSk/a2EoYyxtKTpsYShjLG0pKSxrW2ldPW51bGwsbFtpXT1jLmIsYy5iPWl9ZWxzZSBmb3IoYy5jWy0oaSsxKV09bnVsbDswPGMuYSYmbnVsbD09PWMuY1tjLmRbYy5hLTFdXTspLS1jLmE7TChhLCQoaCksZil9fWVsc2UgcShoLmIpLG8oZiwkKGgpKSxiLmI9Yy5iPSEwfWVsc2V7aWYoMD5nKGYuYi5hLGguYSxmLmEpKXJldHVybiExO29hKGIpLmI9Yi5iPSEwLHEoZi5iKSxvKCQoaCksZil9cmV0dXJuITB9ZnVuY3Rpb24gTyhhLGIpe3ZhciBjPW5hKGIpLGs9Yi5hLGw9Yy5hLG49ay5hLHA9bC5hLHI9ay5iLmEscz1sLmIuYSx0PW5ldyBhYTtpZihnKHIsYS5hLG4pLGcocyxhLmEscCksbj09PXB8fE1hdGgubWluKG4uYSxyLmEpPk1hdGgubWF4KHAuYSxzLmEpKXJldHVybiExO2lmKGUobixwKSl7aWYoMDxnKHMsbixwKSlyZXR1cm4hMX1lbHNlIGlmKDA+ZyhyLHAsbikpcmV0dXJuITE7dmFyIHUsdix3PXIseD1uLHk9cyx6PXA7aWYoZSh3LHgpfHwodT13LHc9eCx4PXUpLGUoeSx6KXx8KHU9eSx5PXosej11KSxlKHcseSl8fCh1PXcsdz15LHk9dSx1PXgseD16LHo9dSksZSh5LHgpP2UoeCx6KT8odT1mKHcseSx4KSx2PWYoeSx4LHopLDA+dSt2JiYodT0tdSx2PS12KSx0LmI9bSh1LHkuYix2LHguYikpOih1PWcodyx5LHgpLHY9LWcodyx6LHgpLDA+dSt2JiYodT0tdSx2PS12KSx0LmI9bSh1LHkuYix2LHouYikpOnQuYj0oeS5iK3guYikvMixoKHcseCl8fCh1PXcsdz14LHg9dSksaCh5LHopfHwodT15LHk9eix6PXUpLGgodyx5KXx8KHU9dyx3PXkseT11LHU9eCx4PXosej11KSxoKHkseCk/aCh4LHopPyh1PWkodyx5LHgpLHY9aSh5LHgseiksMD51K3YmJih1PS11LHY9LXYpLHQuYT1tKHUseS5hLHYseC5hKSk6KHU9aih3LHkseCksdj0taih3LHoseCksMD51K3YmJih1PS11LHY9LXYpLHQuYT1tKHUseS5hLHYsei5hKSk6dC5hPSh5LmEreC5hKS8yLGUodCxhLmEpJiYodC5iPWEuYS5iLHQuYT1hLmEuYSksdz1lKG4scCk/bjpwLGUodyx0KSYmKHQuYj13LmIsdC5hPXcuYSksZCh0LG4pfHxkKHQscCkpcmV0dXJuIE4oYSxiKSwhMTtpZighZChyLGEuYSkmJjA8PWcocixhLmEsdCl8fCFkKHMsYS5hKSYmMD49ZyhzLGEuYSx0KSl7aWYocz09PWEuYSlyZXR1cm4gcShrLmIpLG8obC5iLGspLGI9RShiKSxrPW5hKGIpLmEsSShhLG5hKGIpLGMpLEooYSxiLCQoayksayxrLCEwKSwhMDtpZihyPT09YS5hKXtxKGwuYiksbyhrLmUsJChsKSksbj1jPWIscD1uLmEuYi5hO2Rve249b2Eobil9d2hpbGUobi5hLmIuYT09PXApO3JldHVybiBiPW4sbj1uYShiKS5hLmIuYyxjLmE9JChsKSxsPUkoYSxjLG51bGwpLEooYSxiLGwuYyxrLmIuYyxuLCEwKSwhMH1yZXR1cm4gMDw9ZyhyLGEuYSx0KSYmKG9hKGIpLmI9Yi5iPSEwLHEoay5iKSxrLmEuYj1hLmEuYixrLmEuYT1hLmEuYSksMD49ZyhzLGEuYSx0KSYmKGIuYj1jLmI9ITAscShsLmIpLGwuYS5iPWEuYS5iLGwuYS5hPWEuYS5hKSwhMX1yZXR1cm4gcShrLmIpLHEobC5iKSxvKCQobCksayksay5hLmI9dC5iLGsuYS5hPXQuYSxrLmEuaD1kYShhLmUsay5hKSxrPWsuYSxsPVswLDAsMCwwXSx0PVtuLmQsci5kLHAuZCxzLmRdLGsuZ1swXT1rLmdbMV09ay5nWzJdPTAsTShrLG4scixsLDApLE0oayxwLHMsbCwyKSxLKGEsayx0LGwsITApLG9hKGIpLmI9Yi5iPWMuYj0hMCwhMX1mdW5jdGlvbiBQKGEsYil7Zm9yKHZhciBjPW5hKGIpOzspe2Zvcig7Yy5iOyliPWMsYz1uYShjKTtpZighYi5iJiYoYz1iLG51bGw9PT0oYj1vYShiKSl8fCFiLmIpKWJyZWFrO2IuYj0hMTt2YXIgZCxmPWIuYSxoPWMuYTtpZihkPWYuYi5hIT09aC5iLmEpYTp7ZD1iO3ZhciBpPW5hKGQpLGo9ZC5hLGs9aS5hLGw9dm9pZCAwO2lmKGUoai5iLmEsay5iLmEpKXtpZigwPmcoai5iLmEsay5iLmEsai5hKSl7ZD0hMTticmVhayBhfW9hKGQpLmI9ZC5iPSEwLGw9cShqKSxvKGsuYixsKSxsLmQuYz1kLmR9ZWxzZXtpZigwPGcoay5iLmEsai5iLmEsay5hKSl7ZD0hMTticmVhayBhfWQuYj1pLmI9ITAsbD1xKGspLG8oai5lLGsuYiksbC5iLmQuYz1kLmR9ZD0hMH1pZihkJiYoYy5jPyhDKGMpLHAoaCksYz1uYShiKSxoPWMuYSk6Yi5jJiYoQyhiKSxwKGYpLGI9b2EoYyksZj1iLmEpKSxmLmEhPT1oLmEpaWYoZi5iLmE9PT1oLmIuYXx8Yi5jfHxjLmN8fGYuYi5hIT09YS5hJiZoLmIuYSE9PWEuYSlOKGEsYik7ZWxzZSBpZihPKGEsYikpYnJlYWs7Zi5hPT09aC5hJiZmLmIuYT09PWguYi5hJiYoQShoLGYpLEMoYikscChmKSxiPW9hKGMpKX19ZnVuY3Rpb24gUShhLGIpe2EuYT1iO2Zvcih2YXIgYz1iLmM7bnVsbD09PWMuaTspaWYoKGM9Yy5jKT09PWIuYyl7dmFyIGM9YSxmPWIsaD1uZXcgbWE7aC5hPWYuYy5iO3ZhciBpPWMuZixqPWkuYTtkb3tqPWouYX13aGlsZShudWxsIT09ai5iJiYhaS5jKGkuYixoLGouYikpO3ZhciBpPWouYixrPW5hKGkpLGg9aS5hLGo9ay5hO2lmKDA9PT1nKGguYi5hLGYsaC5hKSloPWkuYSxkKGguYSxmKXx8ZChoLmIuYSxmKXx8KHEoaC5iKSxpLmMmJihwKGguYyksaS5jPSExKSxvKGYuYyxoKSxRKGMsZikpO2Vsc2V7dmFyIGw9ZShqLmIuYSxoLmIuYSk/aTprLGs9dm9pZCAwO2kuZHx8bC5jPyhrPWw9PT1pP3IoZi5jLmIsaC5lKTpyKGouYi5jLmIsZi5jKS5iLGwuYz9EKGwsayk6KGg9YyxpPUYoYyxpLGspLGkuZj1vYShpKS5mK2kuYS5mLGkuZD1HKGgsaS5mKSksUShjLGYpKTpKKGMsaSxmLmMsZi5jLG51bGwsITApfXJldHVybn1pZihjPUUoYy5pKSxoPW5hKGMpLGk9aC5hLGg9SShhLGgsbnVsbCksaC5jPT09aSl7dmFyIGk9aCxoPWkuYyxqPW5hKGMpLGs9Yy5hLGw9ai5hLG09ITE7ay5iLmEhPT1sLmIuYSYmTyhhLGMpLGQoay5hLGEuYSkmJihvKCQoaCksayksYz1FKGMpLGg9bmEoYykuYSxJKGEsbmEoYyksaiksbT0hMCksZChsLmEsYS5hKSYmKG8oaSwkKGwpKSxpPUkoYSxqLG51bGwpLG09ITApLG0/SihhLGMsaS5jLGgsaCwhMCk6KGY9ZShsLmEsay5hKT8kKGwpOmssZj1yKGkuYy5iLGYpLEooYSxjLGYsZi5jLGYuYywhMSksZi5iLmkuYz0hMCxQKGEsYykpfWVsc2UgSihhLGMsaC5jLGksaSwhMCl9ZnVuY3Rpb24gUihhLGIpe3ZhciBjPW5ldyBtYSxkPW4oYS5iKTtkLmEuYj1xYSxkLmEuYT1iLGQuYi5hLmI9LXFhLGQuYi5hLmE9YixhLmE9ZC5iLmEsYy5hPWQsYy5mPTAsYy5kPSExLGMuYz0hMSxjLmg9ITAsYy5iPSExLGQ9YS5mLGQ9VChkLGQuYSxjKSxjLmU9ZH1mdW5jdGlvbiBTKGEpe3RoaXMuYT1uZXcgVSx0aGlzLmI9YSx0aGlzLmM9Qn1mdW5jdGlvbiBUKGEsYixjKXtkb3tiPWIuY313aGlsZShudWxsIT09Yi5iJiYhYS5jKGEuYixiLmIsYykpO3JldHVybiBhPW5ldyBVKGMsYi5hLGIpLGIuYS5jPWEsYi5hPWF9ZnVuY3Rpb24gVShhLGIsYyl7dGhpcy5iPWF8fG51bGwsdGhpcy5hPWJ8fHRoaXMsdGhpcy5jPWN8fHRoaXN9ZnVuY3Rpb24gVigpe3RoaXMuZD1yYSx0aGlzLnA9dGhpcy5iPXRoaXMucT1udWxsLHRoaXMuaj1bMCwwLDBdLHRoaXMucz0xMDAxMzAsdGhpcy5uPSExLHRoaXMubz10aGlzLmE9dGhpcy5lPXRoaXMuZj1udWxsLHRoaXMubT0hMSx0aGlzLmM9dGhpcy5yPXRoaXMuaT10aGlzLms9dGhpcy5sPXRoaXMuaD1udWxsfWZ1bmN0aW9uIFcoYSxiKXtpZihhLmQhPT1iKWZvcig7YS5kIT09YjspaWYoYS5kPGIpc3dpdGNoKGEuZCl7Y2FzZSByYTpYKGEsMTAwMTUxKSxhLnUobnVsbCk7YnJlYWs7Y2FzZSAxOlgoYSwxMDAxNTIpLGEudCgpfWVsc2Ugc3dpdGNoKGEuZCl7Y2FzZSAyOlgoYSwxMDAxNTQpLGEudigpO2JyZWFrO2Nhc2UgMTpYKGEsMTAwMTUzKSxhLncoKX19ZnVuY3Rpb24gWChhLGIpe2EucCYmYS5wKGIsYS5jKX1mdW5jdGlvbiBZKGEsYil7dGhpcy5iPWF8fHRoaXMsdGhpcy5kPWJ8fHRoaXMsdGhpcy5hPW51bGwsdGhpcy5jPSExfWZ1bmN0aW9uIFooKXt0aGlzLmg9dGhpcyx0aGlzLmk9dGhpcy5kPXRoaXMuYT10aGlzLmU9dGhpcy5jPXRoaXMuYj1udWxsLHRoaXMuZj0wfWZ1bmN0aW9uICQoYSl7cmV0dXJuIGEuYi5lfWZ1bmN0aW9uIF8oKXt0aGlzLmM9bmV3IGFhLHRoaXMuYT1uZXcgWSx0aGlzLmI9bmV3IFosdGhpcy5kPW5ldyBaLHRoaXMuYi5iPXRoaXMuZCx0aGlzLmQuYj10aGlzLmJ9ZnVuY3Rpb24gYWEoYSxiKXt0aGlzLmU9YXx8dGhpcyx0aGlzLmY9Ynx8dGhpcyx0aGlzLmQ9dGhpcy5jPW51bGwsdGhpcy5nPVswLDAsMF0sdGhpcy5oPXRoaXMuYT10aGlzLmI9MH1mdW5jdGlvbiBiYSgpe3RoaXMuYz1bXSx0aGlzLmQ9bnVsbCx0aGlzLmE9MCx0aGlzLmU9ITEsdGhpcy5iPW5ldyBmYX1mdW5jdGlvbiBjYShhKXthLmQ9W107Zm9yKHZhciBiPTA7YjxhLmE7YisrKWEuZFtiXT1iO2EuZC5zb3J0KGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3JldHVybiBlKGFbYl0sYVtjXSk/MTotMX19KGEuYykpLGEuZT0hMCxoYShhLmIpfWZ1bmN0aW9uIGRhKGEsYil7aWYoYS5lKXt2YXIgYz1hLmIsZD0rK2MuYTsyKmQ+Yy5mJiYoYy5mKj0yLGMuYz1nYShjLmMsYy5mKzEpKTt2YXIgZTtyZXR1cm4gMD09PWMuYj9lPWQ6KGU9Yy5iLGMuYj1jLmNbYy5iXSksYy5lW2VdPWIsYy5jW2VdPWQsYy5kW2RdPWUsYy5oJiZsYShjLGQpLGV9cmV0dXJuIGM9YS5hKyssYS5jW2NdPWIsLShjKzEpfWZ1bmN0aW9uIGVhKGEpe2lmKDA9PT1hLmEpcmV0dXJuIGphKGEuYik7dmFyIGI9YS5jW2EuZFthLmEtMV1dO2lmKDAhPT1hLmIuYSYmZShpYShhLmIpLGIpKXJldHVybiBqYShhLmIpO2Rvey0tYS5hfXdoaWxlKDA8YS5hJiZudWxsPT09YS5jW2EuZFthLmEtMV1dKTtyZXR1cm4gYn1mdW5jdGlvbiBmYSgpe3RoaXMuZD1nYShbMF0sMzMpLHRoaXMuZT1bbnVsbCxudWxsXSx0aGlzLmM9WzAsMF0sdGhpcy5hPTAsdGhpcy5mPTMyLHRoaXMuYj0wLHRoaXMuaD0hMSx0aGlzLmRbMV09MX1mdW5jdGlvbiBnYShhLGIpe2Zvcih2YXIgYz1BcnJheShiKSxkPTA7ZDxhLmxlbmd0aDtkKyspY1tkXT1hW2RdO2Zvcig7ZDxiO2QrKyljW2RdPTA7cmV0dXJuIGN9ZnVuY3Rpb24gaGEoYSl7Zm9yKHZhciBiPWEuYTsxPD1iOy0tYilrYShhLGIpO2EuaD0hMH1mdW5jdGlvbiBpYShhKXtyZXR1cm4gYS5lW2EuZFsxXV19ZnVuY3Rpb24gamEoYSl7dmFyIGI9YS5kLGM9YS5lLGQ9YS5jLGU9YlsxXSxmPWNbZV07cmV0dXJuIDA8YS5hJiYoYlsxXT1iW2EuYV0sZFtiWzFdXT0xLGNbZV09bnVsbCxkW2VdPWEuYixhLmI9ZSwwPC0tYS5hJiZrYShhLDEpKSxmfWZ1bmN0aW9uIGthKGEsYil7Zm9yKHZhciBjPWEuZCxkPWEuZSxmPWEuYyxnPWIsaD1jW2ddOzspe3ZhciBpPWc8PDE7aTxhLmEmJmUoZFtjW2krMV1dLGRbY1tpXV0pJiYoaSs9MSk7dmFyIGo9Y1tpXTtpZihpPmEuYXx8ZShkW2hdLGRbal0pKXtjW2ddPWgsZltoXT1nO2JyZWFrfWNbZ109aixmW2pdPWcsZz1pfX1mdW5jdGlvbiBsYShhLGIpe2Zvcih2YXIgYz1hLmQsZD1hLmUsZj1hLmMsZz1iLGg9Y1tnXTs7KXt2YXIgaT1nPj4xLGo9Y1tpXTtpZigwPT09aXx8ZShkW2pdLGRbaF0pKXtjW2ddPWgsZltoXT1nO2JyZWFrfWNbZ109aixmW2pdPWcsZz1pfX1mdW5jdGlvbiBtYSgpe3RoaXMuZT10aGlzLmE9bnVsbCx0aGlzLmY9MCx0aGlzLmM9dGhpcy5iPXRoaXMuaD10aGlzLmQ9ITF9ZnVuY3Rpb24gbmEoYSl7cmV0dXJuIGEuZS5jLmJ9ZnVuY3Rpb24gb2EoYSl7cmV0dXJuIGEuZS5hLmJ9dmFyIHBhLHFhPTRlMTUwLHJhPTA7cGE9Vi5wcm90b3R5cGUscGEueD1mdW5jdGlvbigpe1codGhpcyxyYSl9LHBhLkI9ZnVuY3Rpb24oYSxiKXtzd2l0Y2goYSl7Y2FzZSAxMDAxNDI6cmV0dXJuO2Nhc2UgMTAwMTQwOnN3aXRjaChiKXtjYXNlIDEwMDEzMDpjYXNlIDEwMDEzMTpjYXNlIDEwMDEzMjpjYXNlIDEwMDEzMzpjYXNlIDEwMDEzNDpyZXR1cm4gdm9pZCh0aGlzLnM9Yil9YnJlYWs7Y2FzZSAxMDAxNDE6cmV0dXJuIHZvaWQodGhpcy5tPSEhYik7ZGVmYXVsdDpyZXR1cm4gdm9pZCBYKHRoaXMsMTAwOTAwKX1YKHRoaXMsMTAwOTAxKX0scGEueT1mdW5jdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAxMDAxNDI6cmV0dXJuIDA7Y2FzZSAxMDAxNDA6cmV0dXJuIHRoaXMucztjYXNlIDEwMDE0MTpyZXR1cm4gdGhpcy5tO2RlZmF1bHQ6WCh0aGlzLDEwMDkwMCl9cmV0dXJuITF9LHBhLkE9ZnVuY3Rpb24oYSxiLGMpe3RoaXMualswXT1hLHRoaXMualsxXT1iLHRoaXMualsyXT1jfSxwYS56PWZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8bnVsbDtzd2l0Y2goYSl7Y2FzZSAxMDAxMDA6Y2FzZSAxMDAxMDY6dGhpcy5oPWM7YnJlYWs7Y2FzZSAxMDAxMDQ6Y2FzZSAxMDAxMTA6dGhpcy5sPWM7YnJlYWs7Y2FzZSAxMDAxMDE6Y2FzZSAxMDAxMDc6dGhpcy5rPWM7YnJlYWs7Y2FzZSAxMDAxMDI6Y2FzZSAxMDAxMDg6dGhpcy5pPWM7YnJlYWs7Y2FzZSAxMDAxMDM6Y2FzZSAxMDAxMDk6dGhpcy5wPWM7YnJlYWs7Y2FzZSAxMDAxMDU6Y2FzZSAxMDAxMTE6dGhpcy5vPWM7YnJlYWs7Y2FzZSAxMDAxMTI6dGhpcy5yPWM7YnJlYWs7ZGVmYXVsdDpYKHRoaXMsMTAwOTAwKX19LHBhLkM9ZnVuY3Rpb24oYSxiKXt2YXIgYz0hMSxkPVswLDAsMF07Vyh0aGlzLDIpO2Zvcih2YXIgZT0wOzM+ZTsrK2Upe3ZhciBmPWFbZV07LTFlMTUwPmYmJihmPS0xZTE1MCxjPSEwKSwxZTE1MDxmJiYoZj0xZTE1MCxjPSEwKSxkW2VdPWZ9YyYmWCh0aGlzLDEwMDE1NSksYz10aGlzLnEsbnVsbD09PWM/KGM9bih0aGlzLmIpLG8oYyxjLmIpKToocShjKSxjPWMuZSksYy5hLmQ9YixjLmEuZ1swXT1kWzBdLGMuYS5nWzFdPWRbMV0sYy5hLmdbMl09ZFsyXSxjLmY9MSxjLmIuZj0tMSx0aGlzLnE9Y30scGEudT1mdW5jdGlvbihhKXtXKHRoaXMscmEpLHRoaXMuZD0xLHRoaXMuYj1uZXcgXyx0aGlzLmM9YX0scGEudD1mdW5jdGlvbigpe1codGhpcywxKSx0aGlzLmQ9Mix0aGlzLnE9bnVsbH0scGEudj1mdW5jdGlvbigpe1codGhpcywyKSx0aGlzLmQ9MX0scGEudz1mdW5jdGlvbigpe1codGhpcywxKSx0aGlzLmQ9cmE7dmFyIGE9dGhpcy5qWzBdLGI9dGhpcy5qWzFdLGM9dGhpcy5qWzJdLGY9ITEsaD1bYSxiLGNdO2lmKDA9PT1hJiYwPT09YiYmMD09PWMpe2Zvcih2YXIgYj1bLTJlMTUwLC0yZTE1MCwtMmUxNTBdLGk9WzJlMTUwLDJlMTUwLDJlMTUwXSxjPVtdLGo9W10sZj10aGlzLmIuYyxhPWYuZTthIT09ZjthPWEuZSlmb3IodmFyIG09MDszPm07KyttKXt2YXIgbj1hLmdbbV07bjxpW21dJiYoaVttXT1uLGpbbV09YSksbj5iW21dJiYoYlttXT1uLGNbbV09YSl9aWYoYT0wLGJbMV0taVsxXT5iWzBdLWlbMF0mJihhPTEpLGJbMl0taVsyXT5iW2FdLWlbYV0mJihhPTIpLGlbYV0+PWJbYV0paFswXT0wLGhbMV09MCxoWzJdPTE7ZWxzZXtmb3IoYj0wLGk9althXSxjPWNbYV0saj1bMCwwLDBdLGk9W2kuZ1swXS1jLmdbMF0saS5nWzFdLWMuZ1sxXSxpLmdbMl0tYy5nWzJdXSxtPVswLDAsMF0sYT1mLmU7YSE9PWY7YT1hLmUpbVswXT1hLmdbMF0tYy5nWzBdLG1bMV09YS5nWzFdLWMuZ1sxXSxtWzJdPWEuZ1syXS1jLmdbMl0salswXT1pWzFdKm1bMl0taVsyXSptWzFdLGpbMV09aVsyXSptWzBdLWlbMF0qbVsyXSxqWzJdPWlbMF0qbVsxXS1pWzFdKm1bMF0sKG49alswXSpqWzBdK2pbMV0qalsxXStqWzJdKmpbMl0pPmImJihiPW4saFswXT1qWzBdLGhbMV09alsxXSxoWzJdPWpbMl0pOzA+PWImJihoWzBdPWhbMV09aFsyXT0wLGhbeihpKV09MSl9Zj0hMH1mb3Ioaj16KGgpLGE9dGhpcy5iLmMsYj0oaisxKSUzLGM9KGorMiklMyxqPTA8aFtqXT8xOi0xLGg9YS5lO2ghPT1hO2g9aC5lKWguYj1oLmdbYl0saC5hPWoqaC5nW2NdO2lmKGYpe2ZvcihoPTAsZj10aGlzLmIuYSxhPWYuYjthIT09ZjthPWEuYilpZihiPWEuYSwhKDA+PWIuZikpZG97aCs9KGIuYS5iLWIuYi5hLmIpKihiLmEuYStiLmIuYS5hKSxiPWIuZX13aGlsZShiIT09YS5hKTtpZigwPmgpZm9yKGg9dGhpcy5iLmMsZj1oLmU7ZiE9PWg7Zj1mLmUpZi5hPS1mLmF9Zm9yKHRoaXMubj0hMSxoPXRoaXMuYi5iLGE9aC5oO2EhPT1oO2E9ZilmPWEuaCxiPWEuZSxkKGEuYSxhLmIuYSkmJmEuZS5lIT09YSYmKEwodGhpcyxiLGEpLHAoYSksYT1iLGI9YS5lKSxiLmU9PT1hJiYoYiE9PWEmJihiIT09ZiYmYiE9PWYuYnx8KGY9Zi5oKSxwKGIpKSxhIT09ZiYmYSE9PWYuYnx8KGY9Zi5oKSxwKGEpKTtmb3IodGhpcy5lPWg9bmV3IGJhLGY9dGhpcy5iLmMsYT1mLmU7YSE9PWY7YT1hLmUpYS5oPWRhKGgsYSk7Zm9yKGNhKGgpLHRoaXMuZj1uZXcgUyh0aGlzKSxSKHRoaXMsLXFhKSxSKHRoaXMscWEpO251bGwhPT0oaD1lYSh0aGlzLmUpKTspe2Zvcig7Oyl7YTppZihhPXRoaXMuZSwwPT09YS5hKWY9aWEoYS5iKTtlbHNlIGlmKGY9YS5jW2EuZFthLmEtMV1dLDAhPT1hLmIuYSYmKGE9aWEoYS5iKSxlKGEsZikpKXtmPWE7YnJlYWsgYX1pZihudWxsPT09Znx8IWQoZixoKSlicmVhaztmPWVhKHRoaXMuZSksTCh0aGlzLGguYyxmLmMpfVEodGhpcyxoKX1mb3IodGhpcy5hPXRoaXMuZi5hLmEuYi5hLmEsaD0wO251bGwhPT0oZj10aGlzLmYuYS5hLmIpOylmLmh8fCsraCxDKGYpO2Zvcih0aGlzLmY9bnVsbCxoPXRoaXMuZSxoLmI9bnVsbCxoLmQ9bnVsbCx0aGlzLmU9aC5jPW51bGwsaD10aGlzLmIsYT1oLmEuYjthIT09aC5hO2E9ZilmPWEuYixhPWEuYSxhLmUuZT09PWEmJihBKGEuYyxhKSxwKGEpKTtpZighdGhpcy5uKXtpZihoPXRoaXMuYix0aGlzLm0pZm9yKGE9aC5iLmg7YSE9PWguYjthPWYpZj1hLmgsYS5iLmQuYyE9PWEuZC5jP2EuZj1hLmQuYz8xOi0xOnAoYSk7ZWxzZSBmb3IoYT1oLmEuYjthIT09aC5hO2E9ZilpZihmPWEuYixhLmMpe2ZvcihhPWEuYTtlKGEuYi5hLGEuYSk7YT1hLmMuYik7Zm9yKDtlKGEuYSxhLmIuYSk7YT1hLmUpO2ZvcihiPWEuYy5iLGM9dm9pZCAwO2EuZSE9PWI7KWlmKGUoYS5iLmEsYi5hKSl7Zm9yKDtiLmUhPT1hJiYoayhiLmUpfHwwPj1nKGIuYSxiLmIuYSxiLmUuYi5hKSk7KWM9cihiLmUsYiksYj1jLmI7Yj1iLmMuYn1lbHNle2Zvcig7Yi5lIT09YSYmKGwoYS5jLmIpfHwwPD1nKGEuYi5hLGEuYSxhLmMuYi5hKSk7KWM9cihhLGEuYy5iKSxhPWMuYjthPWEuZX1mb3IoO2IuZS5lIT09YTspYz1yKGIuZSxiKSxiPWMuYn1pZih0aGlzLmh8fHRoaXMuaXx8dGhpcy5rfHx0aGlzLmwpaWYodGhpcy5tKXtmb3IoaD10aGlzLmIsZj1oLmEuYjtmIT09aC5hO2Y9Zi5iKWlmKGYuYyl7dGhpcy5oJiZ0aGlzLmgoMix0aGlzLmMpLGE9Zi5hO2Rve3RoaXMuayYmdGhpcy5rKGEuYS5kLHRoaXMuYyksYT1hLmV9d2hpbGUoYSE9PWYuYSk7dGhpcy5pJiZ0aGlzLmkodGhpcy5jKX19ZWxzZXtmb3IoaD10aGlzLmIsZj0hIXRoaXMubCxhPSExLGI9LTEsYz1oLmEuZDtjIT09aC5hO2M9Yy5kKWlmKGMuYyl7YXx8KHRoaXMuaCYmdGhpcy5oKDQsdGhpcy5jKSxhPSEwKSxqPWMuYTtkb3tmJiYoaT1qLmIuZC5jPzA6MSxiIT09aSYmKGI9aSx0aGlzLmwmJnRoaXMubCghIWIsdGhpcy5jKSkpLHRoaXMuayYmdGhpcy5rKGouYS5kLHRoaXMuYyksaj1qLmV9d2hpbGUoaiE9PWMuYSl9YSYmdGhpcy5pJiZ0aGlzLmkodGhpcy5jKX1pZih0aGlzLnIpe2ZvcihoPXRoaXMuYixhPWguYS5iO2EhPT1oLmE7YT1mKWlmKGY9YS5iLCFhLmMpe2I9YS5hLGM9Yi5lLGo9dm9pZCAwO2Rve2o9YyxjPWouZSxqLmQ9bnVsbCxudWxsPT09ai5iLmQmJihqLmM9PT1qP3goai5hLG51bGwpOihqLmEuYz1qLmMsdChqLCQoaikpKSxpPWouYixpLmM9PT1pP3goaS5hLG51bGwpOihpLmEuYz1pLmMsdChpLCQoaSkpKSx3KGopKX13aGlsZShqIT09Yik7Yj1hLmQsYT1hLmIsYS5kPWIsYi5iPWF9cmV0dXJuIHRoaXMucih0aGlzLmIpLHZvaWQodGhpcy5jPXRoaXMuYj1udWxsKX19dGhpcy5iPXRoaXMuYz1udWxsfSx0aGlzLmxpYnRlc3M9e0dsdVRlc3NlbGF0b3I6Vix3aW5kaW5nUnVsZTp7R0xVX1RFU1NfV0lORElOR19PREQ6MTAwMTMwLEdMVV9URVNTX1dJTkRJTkdfTk9OWkVSTzoxMDAxMzEsR0xVX1RFU1NfV0lORElOR19QT1NJVElWRToxMDAxMzIsR0xVX1RFU1NfV0lORElOR19ORUdBVElWRToxMDAxMzMsR0xVX1RFU1NfV0lORElOR19BQlNfR0VRX1RXTzoxMDAxMzR9LHByaW1pdGl2ZVR5cGU6e0dMX0xJTkVfTE9PUDoyLEdMX1RSSUFOR0xFUzo0LEdMX1RSSUFOR0xFX1NUUklQOjUsR0xfVFJJQU5HTEVfRkFOOjZ9LGVycm9yVHlwZTp7R0xVX1RFU1NfTUlTU0lOR19CRUdJTl9QT0xZR09OOjEwMDE1MSxHTFVfVEVTU19NSVNTSU5HX0VORF9QT0xZR09OOjEwMDE1MyxHTFVfVEVTU19NSVNTSU5HX0JFR0lOX0NPTlRPVVI6MTAwMTUyLEdMVV9URVNTX01JU1NJTkdfRU5EX0NPTlRPVVI6MTAwMTU0LEdMVV9URVNTX0NPT1JEX1RPT19MQVJHRToxMDAxNTUsR0xVX1RFU1NfTkVFRF9DT01CSU5FX0NBTExCQUNLOjEwMDE1Nn0sZ2x1RW51bTp7R0xVX1RFU1NfTUVTSDoxMDAxMTIsR0xVX1RFU1NfVE9MRVJBTkNFOjEwMDE0MixHTFVfVEVTU19XSU5ESU5HX1JVTEU6MTAwMTQwLEdMVV9URVNTX0JPVU5EQVJZX09OTFk6MTAwMTQxLEdMVV9JTlZBTElEX0VOVU06MTAwOTAwLEdMVV9JTlZBTElEX1ZBTFVFOjEwMDkwMSxHTFVfVEVTU19CRUdJTjoxMDAxMDAsR0xVX1RFU1NfVkVSVEVYOjEwMDEwMSxHTFVfVEVTU19FTkQ6MTAwMTAyLEdMVV9URVNTX0VSUk9SOjEwMDEwMyxHTFVfVEVTU19FREdFX0ZMQUc6MTAwMTA0LEdMVV9URVNTX0NPTUJJTkU6MTAwMTA1LEdMVV9URVNTX0JFR0lOX0RBVEE6MTAwMTA2LEdMVV9URVNTX1ZFUlRFWF9EQVRBOjEwMDEwNyxHTFVfVEVTU19FTkRfREFUQToxMDAxMDgsR0xVX1RFU1NfRVJST1JfREFUQToxMDAxMDksR0xVX1RFU1NfRURHRV9GTEFHX0RBVEE6MTAwMTEwLEdMVV9URVNTX0NPTUJJTkVfREFUQToxMDAxMTF9fSxWLnByb3RvdHlwZS5nbHVEZWxldGVUZXNzPVYucHJvdG90eXBlLngsVi5wcm90b3R5cGUuZ2x1VGVzc1Byb3BlcnR5PVYucHJvdG90eXBlLkIsVi5wcm90b3R5cGUuZ2x1R2V0VGVzc1Byb3BlcnR5PVYucHJvdG90eXBlLnksVi5wcm90b3R5cGUuZ2x1VGVzc05vcm1hbD1WLnByb3RvdHlwZS5BLFYucHJvdG90eXBlLmdsdVRlc3NDYWxsYmFjaz1WLnByb3RvdHlwZS56LFYucHJvdG90eXBlLmdsdVRlc3NWZXJ0ZXg9Vi5wcm90b3R5cGUuQyxWLnByb3RvdHlwZS5nbHVUZXNzQmVnaW5Qb2x5Z29uPVYucHJvdG90eXBlLnUsVi5wcm90b3R5cGUuZ2x1VGVzc0JlZ2luQ29udG91cj1WLnByb3RvdHlwZS50LFYucHJvdG90eXBlLmdsdVRlc3NFbmRDb250b3VyPVYucHJvdG90eXBlLnYsVi5wcm90b3R5cGUuZ2x1VGVzc0VuZFBvbHlnb249Vi5wcm90b3R5cGUudyx2b2lkIDAhPT1iJiYoYi5leHBvcnRzPXRoaXMubGlidGVzcyl9LHt9XSwxMDpbZnVuY3Rpb24oYixjLGQpeyhmdW5jdGlvbihlKXshZnVuY3Rpb24oYixlKXtcIm9iamVjdFwiPT10eXBlb2YgZCYmdm9pZCAwIT09Yz9lKGQpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJmEuYW1kP2EoW1wiZXhwb3J0c1wiXSxlKTplKGIub3BlbnR5cGU9e30pfSh0aGlzLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGMoKXt0aGlzLnRhYmxlPW5ldyBVaW50MTZBcnJheSgxNiksdGhpcy50cmFucz1uZXcgVWludDE2QXJyYXkoMjg4KX1mdW5jdGlvbiBkKGEsYil7dGhpcy5zb3VyY2U9YSx0aGlzLnNvdXJjZUluZGV4PTAsdGhpcy50YWc9MCx0aGlzLmJpdGNvdW50PTAsdGhpcy5kZXN0PWIsdGhpcy5kZXN0TGVuPTAsdGhpcy5sdHJlZT1uZXcgYyx0aGlzLmR0cmVlPW5ldyBjfWZ1bmN0aW9uIGYoYSxiLGMsZCl7dmFyIGUsZjtmb3IoZT0wO2U8YzsrK2UpYVtlXT0wO2ZvcihlPTA7ZTwzMC1jOysrZSlhW2UrY109ZS9jfDA7Zm9yKGY9ZCxlPTA7ZTwzMDsrK2UpYltlXT1mLGYrPTE8PGFbZV19ZnVuY3Rpb24gZyhhLGIpe3ZhciBjO2ZvcihjPTA7Yzw3OysrYylhLnRhYmxlW2NdPTA7Zm9yKGEudGFibGVbN109MjQsYS50YWJsZVs4XT0xNTIsYS50YWJsZVs5XT0xMTIsYz0wO2M8MjQ7KytjKWEudHJhbnNbY109MjU2K2M7Zm9yKGM9MDtjPDE0NDsrK2MpYS50cmFuc1syNCtjXT1jO2ZvcihjPTA7Yzw4OysrYylhLnRyYW5zWzE2OCtjXT0yODArYztmb3IoYz0wO2M8MTEyOysrYylhLnRyYW5zWzE3NitjXT0xNDQrYztmb3IoYz0wO2M8NTsrK2MpYi50YWJsZVtjXT0wO2ZvcihiLnRhYmxlWzVdPTMyLGM9MDtjPDMyOysrYyliLnRyYW5zW2NdPWN9ZnVuY3Rpb24gaChhLGIsYyxkKXt2YXIgZSxmO2ZvcihlPTA7ZTwxNjsrK2UpYS50YWJsZVtlXT0wO2ZvcihlPTA7ZTxkOysrZSlhLnRhYmxlW2JbYytlXV0rKztmb3IoYS50YWJsZVswXT0wLGY9MCxlPTA7ZTwxNjsrK2UpdmVbZV09ZixmKz1hLnRhYmxlW2VdO2ZvcihlPTA7ZTxkOysrZSliW2MrZV0mJihhLnRyYW5zW3ZlW2JbYytlXV0rK109ZSl9ZnVuY3Rpb24gaShhKXthLmJpdGNvdW50LS18fChhLnRhZz1hLnNvdXJjZVthLnNvdXJjZUluZGV4KytdLGEuYml0Y291bnQ9Nyk7dmFyIGI9MSZhLnRhZztyZXR1cm4gYS50YWc+Pj49MSxifWZ1bmN0aW9uIGooYSxiLGMpe2lmKCFiKXJldHVybiBjO2Zvcig7YS5iaXRjb3VudDwyNDspYS50YWd8PWEuc291cmNlW2Euc291cmNlSW5kZXgrK108PGEuYml0Y291bnQsYS5iaXRjb3VudCs9ODt2YXIgZD1hLnRhZyY2NTUzNT4+PjE2LWI7cmV0dXJuIGEudGFnPj4+PWIsYS5iaXRjb3VudC09YixkK2N9ZnVuY3Rpb24gayhhLGIpe2Zvcig7YS5iaXRjb3VudDwyNDspYS50YWd8PWEuc291cmNlW2Euc291cmNlSW5kZXgrK108PGEuYml0Y291bnQsYS5iaXRjb3VudCs9ODt2YXIgYz0wLGQ9MCxlPTAsZj1hLnRhZztkb3tkPTIqZCsoMSZmKSxmPj4+PTEsKytlLGMrPWIudGFibGVbZV0sZC09Yi50YWJsZVtlXX13aGlsZShkPj0wKTtyZXR1cm4gYS50YWc9ZixhLmJpdGNvdW50LT1lLGIudHJhbnNbYytkXX1mdW5jdGlvbiBsKGEsYixjKXt2YXIgZCxlLGYsZyxpLGw7Zm9yKGQ9aihhLDUsMjU3KSxlPWooYSw1LDEpLGY9aihhLDQsNCksZz0wO2c8MTk7KytnKXVlW2ddPTA7Zm9yKGc9MDtnPGY7KytnKXt2YXIgbT1qKGEsMywwKTt1ZVtzZVtnXV09bX1mb3IoaCh0ZSx1ZSwwLDE5KSxpPTA7aTxkK2U7KXt2YXIgbj1rKGEsdGUpO3N3aXRjaChuKXtjYXNlIDE2OnZhciBvPXVlW2ktMV07Zm9yKGw9aihhLDIsMyk7bDstLWwpdWVbaSsrXT1vO2JyZWFrO2Nhc2UgMTc6Zm9yKGw9aihhLDMsMyk7bDstLWwpdWVbaSsrXT0wO2JyZWFrO2Nhc2UgMTg6Zm9yKGw9aihhLDcsMTEpO2w7LS1sKXVlW2krK109MDticmVhaztkZWZhdWx0OnVlW2krK109bn19aChiLHVlLDAsZCksaChjLHVlLGQsZSl9ZnVuY3Rpb24gbShhLGIsYyl7Zm9yKDs7KXt2YXIgZD1rKGEsYik7aWYoMjU2PT09ZClyZXR1cm4ga2U7aWYoZDwyNTYpYS5kZXN0W2EuZGVzdExlbisrXT1kO2Vsc2V7dmFyIGUsZixnLGg7Zm9yKGQtPTI1NyxlPWooYSxvZVtkXSxwZVtkXSksZj1rKGEsYyksZz1hLmRlc3RMZW4taihhLHFlW2ZdLHJlW2ZdKSxoPWc7aDxnK2U7KytoKWEuZGVzdFthLmRlc3RMZW4rK109YS5kZXN0W2hdfX19ZnVuY3Rpb24gbihhKXtmb3IodmFyIGIsYyxkO2EuYml0Y291bnQ+ODspYS5zb3VyY2VJbmRleC0tLGEuYml0Y291bnQtPTg7aWYoYj1hLnNvdXJjZVthLnNvdXJjZUluZGV4KzFdLGI9MjU2KmIrYS5zb3VyY2VbYS5zb3VyY2VJbmRleF0sYz1hLnNvdXJjZVthLnNvdXJjZUluZGV4KzNdLGM9MjU2KmMrYS5zb3VyY2VbYS5zb3VyY2VJbmRleCsyXSxiIT09KDY1NTM1Jn5jKSlyZXR1cm4gbGU7Zm9yKGEuc291cmNlSW5kZXgrPTQsZD1iO2Q7LS1kKWEuZGVzdFthLmRlc3RMZW4rK109YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsrXTtyZXR1cm4gYS5iaXRjb3VudD0wLGtlfWZ1bmN0aW9uIG8oYSxiKXt2YXIgYyxlLGY9bmV3IGQoYSxiKTtkb3tzd2l0Y2goYz1pKGYpLGooZiwyLDApKXtjYXNlIDA6ZT1uKGYpO2JyZWFrO2Nhc2UgMTplPW0oZixtZSxuZSk7YnJlYWs7Y2FzZSAyOmwoZixmLmx0cmVlLGYuZHRyZWUpLGU9bShmLGYubHRyZWUsZi5kdHJlZSk7YnJlYWs7ZGVmYXVsdDplPWxlfWlmKGUhPT1rZSl0aHJvdyBuZXcgRXJyb3IoXCJEYXRhIGVycm9yXCIpfXdoaWxlKCFjKTtyZXR1cm4gZi5kZXN0TGVuPGYuZGVzdC5sZW5ndGg/XCJmdW5jdGlvblwiPT10eXBlb2YgZi5kZXN0LnNsaWNlP2YuZGVzdC5zbGljZSgwLGYuZGVzdExlbik6Zi5kZXN0LnN1YmFycmF5KDAsZi5kZXN0TGVuKTpmLmRlc3R9ZnVuY3Rpb24gcChhLGIsYyxkLGUpe3JldHVybiBNYXRoLnBvdygxLWUsMykqYSszKk1hdGgucG93KDEtZSwyKSplKmIrMyooMS1lKSpNYXRoLnBvdyhlLDIpKmMrTWF0aC5wb3coZSwzKSpkfWZ1bmN0aW9uIHEoKXt0aGlzLngxPU51bWJlci5OYU4sdGhpcy55MT1OdW1iZXIuTmFOLHRoaXMueDI9TnVtYmVyLk5hTix0aGlzLnkyPU51bWJlci5OYU59ZnVuY3Rpb24gcigpe3RoaXMuY29tbWFuZHM9W10sdGhpcy5maWxsPVwiYmxhY2tcIix0aGlzLnN0cm9rZT1udWxsLHRoaXMuc3Ryb2tlV2lkdGg9MX1mdW5jdGlvbiBzKGEpe3Rocm93IG5ldyBFcnJvcihhKX1mdW5jdGlvbiB0KGEsYil7YXx8cyhiKX1mdW5jdGlvbiB1KGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhfX1mdW5jdGlvbiB2KGEpe3JldHVybiBhPj0tMTI4JiZhPD0xMjd9ZnVuY3Rpb24gdyhhLGIsYyl7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aDtiPGUmJmQ8NjQmJjA9PT1hW2JdOykrK2IsKytkO3JldHVybiBjLnB1c2goMTI4fGQtMSksYn1mdW5jdGlvbiB4KGEsYixjKXtmb3IodmFyIGQ9MCxlPWEubGVuZ3RoLGY9YjtmPGUmJmQ8NjQ7KXt2YXIgZz1hW2ZdO2lmKCF2KGcpKWJyZWFrO2lmKDA9PT1nJiZmKzE8ZSYmMD09PWFbZisxXSlicmVhazsrK2YsKytkfWMucHVzaChkLTEpO2Zvcih2YXIgaD1iO2g8ZjsrK2gpYy5wdXNoKGFbaF0rMjU2JjI1NSk7cmV0dXJuIGZ9ZnVuY3Rpb24geShhLGIsYyl7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aCxmPWI7ZjxlJiZkPDY0Oyl7dmFyIGc9YVtmXTtpZigwPT09ZylicmVhaztpZih2KGcpJiZmKzE8ZSYmdihhW2YrMV0pKWJyZWFrOysrZiwrK2R9Yy5wdXNoKDY0fGQtMSk7Zm9yKHZhciBoPWI7aDxmOysraCl7dmFyIGk9YVtoXTtjLnB1c2goaSs2NTUzNj4+OCYyNTUsaSsyNTYmMjU1KX1yZXR1cm4gZn1mdW5jdGlvbiB6KGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPTA7ZTxiLmxlbmd0aDtlKz0xKXt2YXIgZj1iW2VdO2RbZi5uYW1lXT1mLnZhbHVlfWlmKHRoaXMudGFibGVOYW1lPWEsdGhpcy5maWVsZHM9YixjKWZvcih2YXIgZz1PYmplY3Qua2V5cyhjKSxoPTA7aDxnLmxlbmd0aDtoKz0xKXt2YXIgaT1nW2hdLGo9Y1tpXTt2b2lkIDAhPT1kW2ldJiYoZFtpXT1qKX19ZnVuY3Rpb24gQShhLGIsYyl7dm9pZCAwPT09YyYmKGM9Yi5sZW5ndGgpO3ZhciBkPW5ldyBBcnJheShiLmxlbmd0aCsxKTtkWzBdPXtuYW1lOmErXCJDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjfTtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKylkW2UrMV09e25hbWU6YStlLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpiW2VdfTtyZXR1cm4gZH1mdW5jdGlvbiBCKGEsYixjKXt2YXIgZD1iLmxlbmd0aCxlPW5ldyBBcnJheShkKzEpO2VbMF09e25hbWU6YStcIkNvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmR9O2Zvcih2YXIgZj0wO2Y8ZDtmKyspZVtmKzFdPXtuYW1lOmErZix0eXBlOlwiVEFCTEVcIix2YWx1ZTpjKGJbZl0sZil9O3JldHVybiBlfWZ1bmN0aW9uIEMoYSxiLGMpe3ZhciBkPWIubGVuZ3RoLGU9W107ZVswXT17bmFtZTphK1wiQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZH07Zm9yKHZhciBmPTA7ZjxkO2YrKyllPWUuY29uY2F0KGMoYltmXSxmKSk7cmV0dXJuIGV9ZnVuY3Rpb24gRChhKXsxPT09YS5mb3JtYXQ/ei5jYWxsKHRoaXMsXCJjb3ZlcmFnZVRhYmxlXCIsW3tuYW1lOlwiY292ZXJhZ2VGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX1dLmNvbmNhdChBKFwiZ2x5cGhcIixhLmdseXBocykpKTp4ZS5hc3NlcnQoITEsXCJDYW4ndCBjcmVhdGUgY292ZXJhZ2UgdGFibGUgZm9ybWF0IDIgeWV0LlwiKX1mdW5jdGlvbiBFKGEpe3ouY2FsbCh0aGlzLFwic2NyaXB0TGlzdFRhYmxlXCIsQyhcInNjcmlwdFJlY29yZFwiLGEsZnVuY3Rpb24oYSxiKXt2YXIgYz1hLnNjcmlwdCxkPWMuZGVmYXVsdExhbmdTeXM7cmV0dXJuIHhlLmFzc2VydCghIWQsXCJVbmFibGUgdG8gd3JpdGUgR1NVQjogc2NyaXB0IFwiK2EudGFnK1wiIGhhcyBubyBkZWZhdWx0IGxhbmd1YWdlIHN5c3RlbS5cIiksW3tuYW1lOlwic2NyaXB0VGFnXCIrYix0eXBlOlwiVEFHXCIsdmFsdWU6YS50YWd9LHtuYW1lOlwic2NyaXB0XCIrYix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcInNjcmlwdFRhYmxlXCIsW3tuYW1lOlwiZGVmYXVsdExhbmdTeXNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcImRlZmF1bHRMYW5nU3lzXCIsW3tuYW1lOlwibG9va3VwT3JkZXJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXFGZWF0dXJlSW5kZXhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZC5yZXFGZWF0dXJlSW5kZXh9XS5jb25jYXQoQShcImZlYXR1cmVJbmRleFwiLGQuZmVhdHVyZUluZGV4ZXMpKSl9XS5jb25jYXQoQyhcImxhbmdTeXNcIixjLmxhbmdTeXNSZWNvcmRzLGZ1bmN0aW9uKGEsYil7dmFyIGM9YS5sYW5nU3lzO3JldHVyblt7bmFtZTpcImxhbmdTeXNUYWdcIitiLHR5cGU6XCJUQUdcIix2YWx1ZTphLnRhZ30se25hbWU6XCJsYW5nU3lzXCIrYix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcImxhbmdTeXNcIixbe25hbWU6XCJsb29rdXBPcmRlclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlcUZlYXR1cmVJbmRleFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjLnJlcUZlYXR1cmVJbmRleH1dLmNvbmNhdChBKFwiZmVhdHVyZUluZGV4XCIsYy5mZWF0dXJlSW5kZXhlcykpKX1dfSkpKX1dfSkpfWZ1bmN0aW9uIEYoYSl7ei5jYWxsKHRoaXMsXCJmZWF0dXJlTGlzdFRhYmxlXCIsQyhcImZlYXR1cmVSZWNvcmRcIixhLGZ1bmN0aW9uKGEsYil7dmFyIGM9YS5mZWF0dXJlO3JldHVyblt7bmFtZTpcImZlYXR1cmVUYWdcIitiLHR5cGU6XCJUQUdcIix2YWx1ZTphLnRhZ30se25hbWU6XCJmZWF0dXJlXCIrYix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcImZlYXR1cmVUYWJsZVwiLFt7bmFtZTpcImZlYXR1cmVQYXJhbXNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Yy5mZWF0dXJlUGFyYW1zfV0uY29uY2F0KEEoXCJsb29rdXBMaXN0SW5kZXhcIixjLmxvb2t1cExpc3RJbmRleGVzKSkpfV19KSl9ZnVuY3Rpb24gRyhhLGIpe3ouY2FsbCh0aGlzLFwibG9va3VwTGlzdFRhYmxlXCIsQihcImxvb2t1cFwiLGEsZnVuY3Rpb24oYSl7dmFyIGM9YlthLmxvb2t1cFR5cGVdO3JldHVybiB4ZS5hc3NlcnQoISFjLFwiVW5hYmxlIHRvIHdyaXRlIEdTVUIgbG9va3VwIHR5cGUgXCIrYS5sb29rdXBUeXBlK1wiIHRhYmxlcy5cIiksbmV3IHooXCJsb29rdXBUYWJsZVwiLFt7bmFtZTpcImxvb2t1cFR5cGVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5sb29rdXBUeXBlfSx7bmFtZTpcImxvb2t1cEZsYWdcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5sb29rdXBGbGFnfV0uY29uY2F0KEIoXCJzdWJ0YWJsZVwiLGEuc3VidGFibGVzLGMpKSl9KSl9ZnVuY3Rpb24gSChhLGIpe3JldHVybiBhLmdldFVpbnQ4KGIpfWZ1bmN0aW9uIEkoYSxiKXtyZXR1cm4gYS5nZXRVaW50MTYoYiwhMSl9ZnVuY3Rpb24gSihhLGIpe3JldHVybiBhLmdldEludDE2KGIsITEpfWZ1bmN0aW9uIEsoYSxiKXtyZXR1cm4gYS5nZXRVaW50MzIoYiwhMSl9ZnVuY3Rpb24gTChhLGIpe3JldHVybiBhLmdldEludDE2KGIsITEpK2EuZ2V0VWludDE2KGIrMiwhMSkvNjU1MzV9ZnVuY3Rpb24gTShhLGIpe2Zvcih2YXIgYz1cIlwiLGQ9YjtkPGIrNDtkKz0xKWMrPVN0cmluZy5mcm9tQ2hhckNvZGUoYS5nZXRJbnQ4KGQpKTtyZXR1cm4gY31mdW5jdGlvbiBOKGEsYixjKXtmb3IodmFyIGQ9MCxlPTA7ZTxjO2UrPTEpZDw8PTgsZCs9YS5nZXRVaW50OChiK2UpO3JldHVybiBkfWZ1bmN0aW9uIE8oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPWI7ZTxjO2UrPTEpZC5wdXNoKGEuZ2V0VWludDgoZSkpO3JldHVybiBkfWZ1bmN0aW9uIFAoYSl7Zm9yKHZhciBiPVwiXCIsYz0wO2M8YS5sZW5ndGg7Yys9MSliKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGFbY10pO3JldHVybiBifWZ1bmN0aW9uIFEoYSxiKXt0aGlzLmRhdGE9YSx0aGlzLm9mZnNldD1iLHRoaXMucmVsYXRpdmVPZmZzZXQ9MH1mdW5jdGlvbiBSKGEsYil7Yi5wYXJzZVVTaG9ydCgpLGEubGVuZ3RoPWIucGFyc2VVTG9uZygpLGEubGFuZ3VhZ2U9Yi5wYXJzZVVMb25nKCk7dmFyIGM7YS5ncm91cENvdW50PWM9Yi5wYXJzZVVMb25nKCksYS5nbHlwaEluZGV4TWFwPXt9O2Zvcih2YXIgZD0wO2Q8YztkKz0xKWZvcih2YXIgZT1iLnBhcnNlVUxvbmcoKSxmPWIucGFyc2VVTG9uZygpLGc9Yi5wYXJzZVVMb25nKCksaD1lO2g8PWY7aCs9MSlhLmdseXBoSW5kZXhNYXBbaF09ZyxnKyt9ZnVuY3Rpb24gUyhhLGIsYyxkLGUpe2EubGVuZ3RoPWIucGFyc2VVU2hvcnQoKSxhLmxhbmd1YWdlPWIucGFyc2VVU2hvcnQoKTt2YXIgZjthLnNlZ0NvdW50PWY9Yi5wYXJzZVVTaG9ydCgpPj4xLGIuc2tpcChcInVTaG9ydFwiLDMpLGEuZ2x5cGhJbmRleE1hcD17fTtmb3IodmFyIGc9bmV3IExlLlBhcnNlcihjLGQrZSsxNCksaD1uZXcgTGUuUGFyc2VyKGMsZCtlKzE2KzIqZiksaT1uZXcgTGUuUGFyc2VyKGMsZCtlKzE2KzQqZiksaj1uZXcgTGUuUGFyc2VyKGMsZCtlKzE2KzYqZiksaz1kK2UrMTYrOCpmLGw9MDtsPGYtMTtsKz0xKWZvcih2YXIgbT12b2lkIDAsbj1nLnBhcnNlVVNob3J0KCksbz1oLnBhcnNlVVNob3J0KCkscD1pLnBhcnNlU2hvcnQoKSxxPWoucGFyc2VVU2hvcnQoKSxyPW87cjw9bjtyKz0xKTAhPT1xPyhrPWoub2Zmc2V0K2oucmVsYXRpdmVPZmZzZXQtMixrKz1xLGsrPTIqKHItbyksMCE9PShtPUxlLmdldFVTaG9ydChjLGspKSYmKG09bStwJjY1NTM1KSk6bT1yK3AmNjU1MzUsYS5nbHlwaEluZGV4TWFwW3JdPW19ZnVuY3Rpb24gVChhLGIpe3ZhciBjPXt9O2MudmVyc2lvbj1MZS5nZXRVU2hvcnQoYSxiKSx4ZS5hcmd1bWVudCgwPT09Yy52ZXJzaW9uLFwiY21hcCB0YWJsZSB2ZXJzaW9uIHNob3VsZCBiZSAwLlwiKSxjLm51bVRhYmxlcz1MZS5nZXRVU2hvcnQoYSxiKzIpO2Zvcih2YXIgZD0tMSxlPWMubnVtVGFibGVzLTE7ZT49MDtlLT0xKXt2YXIgZj1MZS5nZXRVU2hvcnQoYSxiKzQrOCplKSxnPUxlLmdldFVTaG9ydChhLGIrNCs4KmUrMik7aWYoMz09PWYmJigwPT09Z3x8MT09PWd8fDEwPT09Zyl8fDA9PT1mJiYoMD09PWd8fDE9PT1nfHwyPT09Z3x8Mz09PWd8fDQ9PT1nKSl7ZD1MZS5nZXRVTG9uZyhhLGIrNCs4KmUrNCk7YnJlYWt9fWlmKC0xPT09ZCl0aHJvdyBuZXcgRXJyb3IoXCJObyB2YWxpZCBjbWFwIHN1Yi10YWJsZXMgZm91bmQuXCIpO3ZhciBoPW5ldyBMZS5QYXJzZXIoYSxiK2QpO2lmKGMuZm9ybWF0PWgucGFyc2VVU2hvcnQoKSwxMj09PWMuZm9ybWF0KVIoYyxoKTtlbHNle2lmKDQhPT1jLmZvcm1hdCl0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IGZvcm1hdCA0IGFuZCAxMiBjbWFwIHRhYmxlcyBhcmUgc3VwcG9ydGVkIChmb3VuZCBmb3JtYXQgXCIrYy5mb3JtYXQrXCIpLlwiKTtTKGMsaCxhLGIsZCl9cmV0dXJuIGN9ZnVuY3Rpb24gVShhLGIsYyl7YS5zZWdtZW50cy5wdXNoKHtlbmQ6YixzdGFydDpiLGRlbHRhOi0oYi1jKSxvZmZzZXQ6MCxnbHlwaEluZGV4OmN9KX1mdW5jdGlvbiBWKGEpe2Euc2VnbWVudHMucHVzaCh7ZW5kOjY1NTM1LHN0YXJ0OjY1NTM1LGRlbHRhOjEsb2Zmc2V0OjB9KX1mdW5jdGlvbiBXKGEpe3ZhciBiLGM9ITA7Zm9yKGI9YS5sZW5ndGgtMTtiPjA7Yi09MSl7aWYoYS5nZXQoYikudW5pY29kZT42NTUzNSl7Y29uc29sZS5sb2coXCJBZGRpbmcgQ01BUCBmb3JtYXQgMTIgKG5lZWRlZCEpXCIpLGM9ITE7YnJlYWt9fXZhciBkPVt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJudW1UYWJsZXNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Yz8xOjJ9LHtuYW1lOlwicGxhdGZvcm1JRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTozfSx7bmFtZTpcImVuY29kaW5nSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJvZmZzZXRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTpjPzEyOjIwfV07Y3x8KGQ9ZC5jb25jYXQoW3tuYW1lOlwiY21hcDEyUGxhdGZvcm1JRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTozfSx7bmFtZTpcImNtYXAxMkVuY29kaW5nSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MTB9LHtuYW1lOlwiY21hcDEyT2Zmc2V0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH1dKSksZD1kLmNvbmNhdChbe25hbWU6XCJmb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6NH0se25hbWU6XCJjbWFwNExlbmd0aFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImxhbmd1YWdlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic2VnQ291bnRYMlwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNlYXJjaFJhbmdlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZW50cnlTZWxlY3RvclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJhbmdlU2hpZnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dKTt2YXIgZT1uZXcgSWUuVGFibGUoXCJjbWFwXCIsZCk7Zm9yKGUuc2VnbWVudHM9W10sYj0wO2I8YS5sZW5ndGg7Yis9MSl7Zm9yKHZhciBmPWEuZ2V0KGIpLGc9MDtnPGYudW5pY29kZXMubGVuZ3RoO2crPTEpVShlLGYudW5pY29kZXNbZ10sYik7ZS5zZWdtZW50cz1lLnNlZ21lbnRzLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdGFydC1iLnN0YXJ0fSl9VihlKTt2YXIgaD1lLnNlZ21lbnRzLmxlbmd0aCxpPTAsaj1bXSxrPVtdLGw9W10sbT1bXSxuPVtdLG89W107Zm9yKGI9MDtiPGg7Yis9MSl7dmFyIHA9ZS5zZWdtZW50c1tiXTtwLmVuZDw9NjU1MzUmJnAuc3RhcnQ8PTY1NTM1PyhqPWouY29uY2F0KHtuYW1lOlwiZW5kX1wiK2IsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOnAuZW5kfSksaz1rLmNvbmNhdCh7bmFtZTpcInN0YXJ0X1wiK2IsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOnAuc3RhcnR9KSxsPWwuY29uY2F0KHtuYW1lOlwiaWREZWx0YV9cIitiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOnAuZGVsdGF9KSxtPW0uY29uY2F0KHtuYW1lOlwiaWRSYW5nZU9mZnNldF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLm9mZnNldH0pLHZvaWQgMCE9PXAuZ2x5cGhJZCYmKG49bi5jb25jYXQoe25hbWU6XCJnbHlwaF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLmdseXBoSWR9KSkpOmkrPTEsY3x8dm9pZCAwPT09cC5nbHlwaEluZGV4fHwobz1vLmNvbmNhdCh7bmFtZTpcImNtYXAxMlN0YXJ0X1wiK2IsdHlwZTpcIlVMT05HXCIsdmFsdWU6cC5zdGFydH0pLG89by5jb25jYXQoe25hbWU6XCJjbWFwMTJFbmRfXCIrYix0eXBlOlwiVUxPTkdcIix2YWx1ZTpwLmVuZH0pLG89by5jb25jYXQoe25hbWU6XCJjbWFwMTJHbHlwaF9cIitiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnAuZ2x5cGhJbmRleH0pKX1pZihlLnNlZ0NvdW50WDI9MiooaC1pKSxlLnNlYXJjaFJhbmdlPTIqTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKGgtaSkvTWF0aC5sb2coMikpKSxlLmVudHJ5U2VsZWN0b3I9TWF0aC5sb2coZS5zZWFyY2hSYW5nZS8yKS9NYXRoLmxvZygyKSxlLnJhbmdlU2hpZnQ9ZS5zZWdDb3VudFgyLWUuc2VhcmNoUmFuZ2UsZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KGopLGUuZmllbGRzLnB1c2goe25hbWU6XCJyZXNlcnZlZFBhZFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KGspLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChsKSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQobSksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KG4pLGUuY21hcDRMZW5ndGg9MTQrMipqLmxlbmd0aCsyKzIqay5sZW5ndGgrMipsLmxlbmd0aCsyKm0ubGVuZ3RoKzIqbi5sZW5ndGgsIWMpe3ZhciBxPTE2KzQqby5sZW5ndGg7ZS5jbWFwMTJPZmZzZXQ9MjArZS5jbWFwNExlbmd0aCxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQoW3tuYW1lOlwiY21hcDEyRm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjEyfSx7bmFtZTpcImNtYXAxMlJlc2VydmVkXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiY21hcDEyTGVuZ3RoXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6cX0se25hbWU6XCJjbWFwMTJMYW5ndWFnZVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwiY21hcDEybkdyb3Vwc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOm8ubGVuZ3RoLzN9XSksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KG8pfXJldHVybiBlfWZ1bmN0aW9uIFgoYSl7dGhpcy5mb250PWF9ZnVuY3Rpb24gWShhKXt0aGlzLmNtYXA9YX1mdW5jdGlvbiBaKGEsYil7dGhpcy5lbmNvZGluZz1hLHRoaXMuY2hhcnNldD1ifWZ1bmN0aW9uICQoYSl7dmFyIGI9dGhpcztzd2l0Y2goYS52ZXJzaW9uKXtjYXNlIDE6dGhpcy5uYW1lcz1RZS5zbGljZSgpO2JyZWFrO2Nhc2UgMjp0aGlzLm5hbWVzPW5ldyBBcnJheShhLm51bWJlck9mR2x5cGhzKTtmb3IodmFyIGM9MDtjPGEubnVtYmVyT2ZHbHlwaHM7YysrKWEuZ2x5cGhOYW1lSW5kZXhbY108UWUubGVuZ3RoP2IubmFtZXNbY109UWVbYS5nbHlwaE5hbWVJbmRleFtjXV06Yi5uYW1lc1tjXT1hLm5hbWVzW2EuZ2x5cGhOYW1lSW5kZXhbY10tUWUubGVuZ3RoXTticmVhaztjYXNlIDIuNTp0aGlzLm5hbWVzPW5ldyBBcnJheShhLm51bWJlck9mR2x5cGhzKTtmb3IodmFyIGQ9MDtkPGEubnVtYmVyT2ZHbHlwaHM7ZCsrKWIubmFtZXNbZF09UWVbZCthLmdseXBoTmFtZUluZGV4W2RdXTticmVhaztjYXNlIDM6ZGVmYXVsdDp0aGlzLm5hbWVzPVtdfX1mdW5jdGlvbiBfKGEpe2Zvcih2YXIgYixjPWEudGFibGVzLmNtYXAuZ2x5cGhJbmRleE1hcCxkPU9iamVjdC5rZXlzKGMpLGU9MDtlPGQubGVuZ3RoO2UrPTEpe3ZhciBmPWRbZV0sZz1jW2ZdO2I9YS5nbHlwaHMuZ2V0KGcpLGIuYWRkVW5pY29kZShwYXJzZUludChmKSl9Zm9yKHZhciBoPTA7aDxhLmdseXBocy5sZW5ndGg7aCs9MSliPWEuZ2x5cGhzLmdldChoKSxhLmNmZkVuY29kaW5nP2EuaXNDSURGb250P2IubmFtZT1cImdpZFwiK2g6Yi5uYW1lPWEuY2ZmRW5jb2RpbmcuY2hhcnNldFtoXTphLmdseXBoTmFtZXMubmFtZXMmJihiLm5hbWU9YS5nbHlwaE5hbWVzLmdseXBoSW5kZXhUb05hbWUoaCkpfWZ1bmN0aW9uIGFhKGEsYixjLGQsZSl7YS5iZWdpblBhdGgoKSxhLm1vdmVUbyhiLGMpLGEubGluZVRvKGQsZSksYS5zdHJva2UoKX1mdW5jdGlvbiBiYShhLGIpe3ZhciBjPWJ8fG5ldyByO3JldHVybntjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmKGM9YygpKSxjfSxzZXQ6ZnVuY3Rpb24oYSl7Yz1hfX19ZnVuY3Rpb24gY2EoYSl7dGhpcy5iaW5kQ29uc3RydWN0b3JWYWx1ZXMoYSl9ZnVuY3Rpb24gZGEoYSxiLGMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse2dldDpmdW5jdGlvbigpe3JldHVybiBhLnBhdGgsYVtjXX0sc2V0OmZ1bmN0aW9uKGIpe2FbY109Yn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBlYShhLGIpe3ZhciBjPXRoaXM7aWYodGhpcy5mb250PWEsdGhpcy5nbHlwaHM9e30sQXJyYXkuaXNBcnJheShiKSlmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrKyljLmdseXBoc1tkXT1iW2RdO3RoaXMubGVuZ3RoPWImJmIubGVuZ3RofHwwfWZ1bmN0aW9uIGZhKGEsYil7cmV0dXJuIG5ldyBjYSh7aW5kZXg6Yixmb250OmF9KX1mdW5jdGlvbiBnYShhLGIsYyxkLGUsZil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGc9bmV3IGNhKHtpbmRleDpiLGZvbnQ6YX0pO3JldHVybiBnLnBhdGg9ZnVuY3Rpb24oKXtjKGcsZCxlKTt2YXIgYj1mKGEuZ2x5cGhzLGcpO3JldHVybiBiLnVuaXRzUGVyRW09YS51bml0c1BlckVtLGJ9LGRhKGcsXCJ4TWluXCIsXCJfeE1pblwiKSxkYShnLFwieE1heFwiLFwiX3hNYXhcIiksZGEoZyxcInlNaW5cIixcIl95TWluXCIpLGRhKGcsXCJ5TWF4XCIsXCJfeU1heFwiKSxnfX1mdW5jdGlvbiBoYShhLGIsYyxkKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uZXcgY2Eoe2luZGV4OmIsZm9udDphfSk7cmV0dXJuIGUucGF0aD1mdW5jdGlvbigpe3ZhciBiPWMoYSxlLGQpO3JldHVybiBiLnVuaXRzUGVyRW09YS51bml0c1BlckVtLGJ9LGV9fWZ1bmN0aW9uIGlhKGEsYil7aWYoYT09PWIpcmV0dXJuITA7aWYoQXJyYXkuaXNBcnJheShhKSYmQXJyYXkuaXNBcnJheShiKSl7aWYoYS5sZW5ndGghPT1iLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrPTEpaWYoIWlhKGFbY10sYltjXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gamEoYSl7cmV0dXJuIGEubGVuZ3RoPDEyNDA/MTA3OmEubGVuZ3RoPDMzOTAwPzExMzE6MzI3Njh9ZnVuY3Rpb24ga2EoYSxiLGMpe3ZhciBkLGUsZj1bXSxnPVtdLGg9TGUuZ2V0Q2FyZDE2KGEsYik7aWYoMCE9PWgpe3ZhciBpPUxlLmdldEJ5dGUoYSxiKzIpO2Q9YisoaCsxKSppKzI7Zm9yKHZhciBqPWIrMyxrPTA7azxoKzE7ays9MSlmLnB1c2goTGUuZ2V0T2Zmc2V0KGEsaixpKSksais9aTtlPWQrZltoXX1lbHNlIGU9YisyO2Zvcih2YXIgbD0wO2w8Zi5sZW5ndGgtMTtsKz0xKXt2YXIgbT1MZS5nZXRCeXRlcyhhLGQrZltsXSxkK2ZbbCsxXSk7YyYmKG09YyhtKSksZy5wdXNoKG0pfXJldHVybntvYmplY3RzOmcsc3RhcnRPZmZzZXQ6YixlbmRPZmZzZXQ6ZX19ZnVuY3Rpb24gbGEoYSl7Zm9yKHZhciBiPVwiXCIsYz0xNSxkPVtcIjBcIixcIjFcIixcIjJcIixcIjNcIixcIjRcIixcIjVcIixcIjZcIixcIjdcIixcIjhcIixcIjlcIixcIi5cIixcIkVcIixcIkUtXCIsbnVsbCxcIi1cIl07Oyl7dmFyIGU9YS5wYXJzZUJ5dGUoKSxmPWU+PjQsZz0xNSZlO2lmKGY9PT1jKWJyZWFrO2lmKGIrPWRbZl0sZz09PWMpYnJlYWs7Yis9ZFtnXX1yZXR1cm4gcGFyc2VGbG9hdChiKX1mdW5jdGlvbiBtYShhLGIpe3ZhciBjLGQsZSxmO2lmKDI4PT09YilyZXR1cm4gYz1hLnBhcnNlQnl0ZSgpLGQ9YS5wYXJzZUJ5dGUoKSxjPDw4fGQ7aWYoMjk9PT1iKXJldHVybiBjPWEucGFyc2VCeXRlKCksZD1hLnBhcnNlQnl0ZSgpLGU9YS5wYXJzZUJ5dGUoKSxmPWEucGFyc2VCeXRlKCksYzw8MjR8ZDw8MTZ8ZTw8OHxmO2lmKDMwPT09YilyZXR1cm4gbGEoYSk7aWYoYj49MzImJmI8PTI0NilyZXR1cm4gYi0xMzk7aWYoYj49MjQ3JiZiPD0yNTApcmV0dXJuIGM9YS5wYXJzZUJ5dGUoKSwyNTYqKGItMjQ3KStjKzEwODtpZihiPj0yNTEmJmI8PTI1NClyZXR1cm4gYz1hLnBhcnNlQnl0ZSgpLDI1NiotKGItMjUxKS1jLTEwODt0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGIwIFwiK2IpfWZ1bmN0aW9uIG5hKGEpe2Zvcih2YXIgYj17fSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hW2NdWzBdLGU9YVtjXVsxXSxmPXZvaWQgMDtpZihmPTE9PT1lLmxlbmd0aD9lWzBdOmUsYi5oYXNPd25Qcm9wZXJ0eShkKSYmIWlzTmFOKGJbZF0pKXRocm93IG5ldyBFcnJvcihcIk9iamVjdCBcIitiK1wiIGFscmVhZHkgaGFzIGtleSBcIitkKTtiW2RdPWZ9cmV0dXJuIGJ9ZnVuY3Rpb24gb2EoYSxiLGMpe2I9dm9pZCAwIT09Yj9iOjA7dmFyIGQ9bmV3IExlLlBhcnNlcihhLGIpLGU9W10sZj1bXTtmb3IoYz12b2lkIDAhPT1jP2M6YS5sZW5ndGg7ZC5yZWxhdGl2ZU9mZnNldDxjOyl7dmFyIGc9ZC5wYXJzZUJ5dGUoKTtnPD0yMT8oMTI9PT1nJiYoZz0xMjAwK2QucGFyc2VCeXRlKCkpLGUucHVzaChbZyxmXSksZj1bXSk6Zi5wdXNoKG1hKGQsZykpfXJldHVybiBuYShlKX1mdW5jdGlvbiBwYShhLGIpe3JldHVybiBiPWI8PTM5MD9OZVtiXTphW2ItMzkxXX1mdW5jdGlvbiBxYShhLGIsYyl7Zm9yKHZhciBkLGU9e30sZj0wO2Y8Yi5sZW5ndGg7Zis9MSl7dmFyIGc9YltmXTtpZihBcnJheS5pc0FycmF5KGcudHlwZSkpe3ZhciBoPVtdO2gubGVuZ3RoPWcudHlwZS5sZW5ndGg7Zm9yKHZhciBpPTA7aTxnLnR5cGUubGVuZ3RoO2krKylkPXZvaWQgMCE9PWFbZy5vcF0/YVtnLm9wXVtpXTp2b2lkIDAsdm9pZCAwPT09ZCYmKGQ9dm9pZCAwIT09Zy52YWx1ZSYmdm9pZCAwIT09Zy52YWx1ZVtpXT9nLnZhbHVlW2ldOm51bGwpLFwiU0lEXCI9PT1nLnR5cGVbaV0mJihkPXBhKGMsZCkpLGhbaV09ZDtlW2cubmFtZV09aH1lbHNlIGQ9YVtnLm9wXSx2b2lkIDA9PT1kJiYoZD12b2lkIDAhPT1nLnZhbHVlP2cudmFsdWU6bnVsbCksXCJTSURcIj09PWcudHlwZSYmKGQ9cGEoYyxkKSksZVtnLm5hbWVdPWR9cmV0dXJuIGV9ZnVuY3Rpb24gcmEoYSxiKXt2YXIgYz17fTtyZXR1cm4gYy5mb3JtYXRNYWpvcj1MZS5nZXRDYXJkOChhLGIpLGMuZm9ybWF0TWlub3I9TGUuZ2V0Q2FyZDgoYSxiKzEpLGMuc2l6ZT1MZS5nZXRDYXJkOChhLGIrMiksYy5vZmZzZXRTaXplPUxlLmdldENhcmQ4KGEsYiszKSxjLnN0YXJ0T2Zmc2V0PWIsYy5lbmRPZmZzZXQ9Yis0LGN9ZnVuY3Rpb24gc2EoYSxiKXtyZXR1cm4gcWEob2EoYSwwLGEuYnl0ZUxlbmd0aCksVGUsYil9ZnVuY3Rpb24gdGEoYSxiLGMsZCl7cmV0dXJuIHFhKG9hKGEsYixjKSxVZSxkKX1mdW5jdGlvbiB1YShhLGIsYyxkKXtmb3IodmFyIGU9W10sZj0wO2Y8Yy5sZW5ndGg7Zis9MSl7dmFyIGc9bmV3IERhdGFWaWV3KG5ldyBVaW50OEFycmF5KGNbZl0pLmJ1ZmZlciksaD1zYShnLGQpO2guX3N1YnJzPVtdLGguX3N1YnJzQmlhcz0wO3ZhciBpPWgucHJpdmF0ZVswXSxqPWgucHJpdmF0ZVsxXTtpZigwIT09aSYmMCE9PWope3ZhciBrPXRhKGEsaitiLGksZCk7aWYoaC5fZGVmYXVsdFdpZHRoWD1rLmRlZmF1bHRXaWR0aFgsaC5fbm9taW5hbFdpZHRoWD1rLm5vbWluYWxXaWR0aFgsMCE9PWsuc3VicnMpe3ZhciBsPWoray5zdWJycyxtPWthKGEsbCtiKTtoLl9zdWJycz1tLm9iamVjdHMsaC5fc3VicnNCaWFzPWphKGguX3N1YnJzKX1oLl9wcml2YXRlRGljdD1rfWUucHVzaChoKX1yZXR1cm4gZX1mdW5jdGlvbiB2YShhLGIsYyxkKXt2YXIgZSxmLGc9bmV3IExlLlBhcnNlcihhLGIpO2MtPTE7dmFyIGg9W1wiLm5vdGRlZlwiXSxpPWcucGFyc2VDYXJkOCgpO2lmKDA9PT1pKWZvcih2YXIgaj0wO2o8YztqKz0xKWU9Zy5wYXJzZVNJRCgpLGgucHVzaChwYShkLGUpKTtlbHNlIGlmKDE9PT1pKWZvcig7aC5sZW5ndGg8PWM7KXtlPWcucGFyc2VTSUQoKSxmPWcucGFyc2VDYXJkOCgpO2Zvcih2YXIgaz0wO2s8PWY7ays9MSloLnB1c2gocGEoZCxlKSksZSs9MX1lbHNle2lmKDIhPT1pKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gY2hhcnNldCBmb3JtYXQgXCIraSk7Zm9yKDtoLmxlbmd0aDw9Yzspe2U9Zy5wYXJzZVNJRCgpLGY9Zy5wYXJzZUNhcmQxNigpO2Zvcih2YXIgbD0wO2w8PWY7bCs9MSloLnB1c2gocGEoZCxlKSksZSs9MX19cmV0dXJuIGh9ZnVuY3Rpb24gd2EoYSxiLGMpe3ZhciBkLGU9e30sZj1uZXcgTGUuUGFyc2VyKGEsYiksZz1mLnBhcnNlQ2FyZDgoKTtpZigwPT09Zylmb3IodmFyIGg9Zi5wYXJzZUNhcmQ4KCksaT0wO2k8aDtpKz0xKWQ9Zi5wYXJzZUNhcmQ4KCksZVtkXT1pO2Vsc2V7aWYoMSE9PWcpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBlbmNvZGluZyBmb3JtYXQgXCIrZyk7dmFyIGo9Zi5wYXJzZUNhcmQ4KCk7ZD0xO2Zvcih2YXIgaz0wO2s8ajtrKz0xKWZvcih2YXIgbD1mLnBhcnNlQ2FyZDgoKSxtPWYucGFyc2VDYXJkOCgpLG49bDtuPD1sK207bis9MSllW25dPWQsZCs9MX1yZXR1cm4gbmV3IFooZSxjKX1mdW5jdGlvbiB4YShhLGIsYyl7ZnVuY3Rpb24gZChhLGIpe3QmJm8uY2xvc2VQYXRoKCksby5tb3ZlVG8oYSxiKSx0PSEwfWZ1bmN0aW9uIGUoKXt2YXIgYTthPXAubGVuZ3RoJTIhPTAsYSYmIXMmJih5PXAuc2hpZnQoKStuKSxxKz1wLmxlbmd0aD4+MSxwLmxlbmd0aD0wLHM9ITB9ZnVuY3Rpb24gZihjKXtmb3IodmFyIG0scix3LHgseixBLEIsQyxELEUsRixHLEg9MDtIPGMubGVuZ3RoOyl7dmFyIEk9Y1tIXTtzd2l0Y2goSCs9MSxJKXtjYXNlIDE6Y2FzZSAzOmUoKTticmVhaztjYXNlIDQ6cC5sZW5ndGg+MSYmIXMmJih5PXAuc2hpZnQoKStuLHM9ITApLHYrPXAucG9wKCksZCh1LHYpO2JyZWFrO2Nhc2UgNTpmb3IoO3AubGVuZ3RoPjA7KXUrPXAuc2hpZnQoKSx2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTticmVhaztjYXNlIDY6Zm9yKDtwLmxlbmd0aD4wJiYodSs9cC5zaGlmdCgpLG8ubGluZVRvKHUsdiksMCE9PXAubGVuZ3RoKTspdis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7YnJlYWs7Y2FzZSA3OmZvcig7cC5sZW5ndGg+MCYmKHYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpLDAhPT1wLmxlbmd0aCk7KXUrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2JyZWFrO2Nhc2UgODpmb3IoO3AubGVuZ3RoPjA7KWc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksXG51PWkrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztjYXNlIDEwOno9cC5wb3AoKStsLEE9a1t6XSxBJiZmKEEpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuO2Nhc2UgMTI6c3dpdGNoKEk9Y1tIXSxIKz0xLEkpe2Nhc2UgMzU6Zz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxCPWkrcC5zaGlmdCgpLEM9aitwLnNoaWZ0KCksRD1CK3Auc2hpZnQoKSxFPUMrcC5zaGlmdCgpLEY9RCtwLnNoaWZ0KCksRz1FK3Auc2hpZnQoKSx1PUYrcC5zaGlmdCgpLHY9RytwLnNoaWZ0KCkscC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztjYXNlIDM0Omc9dStwLnNoaWZ0KCksaD12LGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxCPWkrcC5zaGlmdCgpLEM9aixEPUIrcC5zaGlmdCgpLEU9aixGPUQrcC5zaGlmdCgpLEc9dix1PUYrcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztjYXNlIDM2Omc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWosRD1CK3Auc2hpZnQoKSxFPWosRj1EK3Auc2hpZnQoKSxHPUUrcC5zaGlmdCgpLHU9RitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosQixDKSxvLmN1cnZlVG8oRCxFLEYsRyx1LHYpO2JyZWFrO2Nhc2UgMzc6Zz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxCPWkrcC5zaGlmdCgpLEM9aitwLnNoaWZ0KCksRD1CK3Auc2hpZnQoKSxFPUMrcC5zaGlmdCgpLEY9RCtwLnNoaWZ0KCksRz1FK3Auc2hpZnQoKSxNYXRoLmFicyhGLXUpPk1hdGguYWJzKEctdik/dT1GK3Auc2hpZnQoKTp2PUcrcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztkZWZhdWx0OmNvbnNvbGUubG9nKFwiR2x5cGggXCIrYi5pbmRleCtcIjogdW5rbm93biBvcGVyYXRvciAxMjAwXCIrSSkscC5sZW5ndGg9MH1icmVhaztjYXNlIDE0OnAubGVuZ3RoPjAmJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx0JiYoby5jbG9zZVBhdGgoKSx0PSExKTticmVhaztjYXNlIDE4OmUoKTticmVhaztjYXNlIDE5OmNhc2UgMjA6ZSgpLEgrPXErNz4+MzticmVhaztjYXNlIDIxOnAubGVuZ3RoPjImJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx2Kz1wLnBvcCgpLHUrPXAucG9wKCksZCh1LHYpO2JyZWFrO2Nhc2UgMjI6cC5sZW5ndGg+MSYmIXMmJih5PXAuc2hpZnQoKStuLHM9ITApLHUrPXAucG9wKCksZCh1LHYpO2JyZWFrO2Nhc2UgMjM6ZSgpO2JyZWFrO2Nhc2UgMjQ6Zm9yKDtwLmxlbmd0aD4yOylnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO3UrPXAuc2hpZnQoKSx2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTticmVhaztjYXNlIDI1OmZvcig7cC5sZW5ndGg+NjspdSs9cC5zaGlmdCgpLHYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2c9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAyNjpmb3IocC5sZW5ndGglMiYmKHUrPXAuc2hpZnQoKSk7cC5sZW5ndGg+MDspZz11LGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aSx2PWorcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAyNzpmb3IocC5sZW5ndGglMiYmKHYrPXAuc2hpZnQoKSk7cC5sZW5ndGg+MDspZz11K3Auc2hpZnQoKSxoPXYsaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAyODptPWNbSF0scj1jW0grMV0scC5wdXNoKChtPDwyNHxyPDwxNik+PjE2KSxIKz0yO2JyZWFrO2Nhc2UgMjk6ej1wLnBvcCgpK2EuZ3N1YnJzQmlhcyxBPWEuZ3N1YnJzW3pdLEEmJmYoQSk7YnJlYWs7Y2FzZSAzMDpmb3IoO3AubGVuZ3RoPjAmJihnPXUsaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWorKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KSwwIT09cC5sZW5ndGgpOylnPXUrcC5zaGlmdCgpLGg9dixpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSx1PWkrKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztjYXNlIDMxOmZvcig7cC5sZW5ndGg+MCYmKGc9dStwLnNoaWZ0KCksaD12LGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLHU9aSsoMT09PXAubGVuZ3RoP3Auc2hpZnQoKTowKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpLDAhPT1wLmxlbmd0aCk7KWc9dSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aisoMT09PXAubGVuZ3RoP3Auc2hpZnQoKTowKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2RlZmF1bHQ6STwzMj9jb25zb2xlLmxvZyhcIkdseXBoIFwiK2IuaW5kZXgrXCI6IHVua25vd24gb3BlcmF0b3IgXCIrSSk6STwyNDc/cC5wdXNoKEktMTM5KTpJPDI1MT8obT1jW0hdLEgrPTEscC5wdXNoKDI1NiooSS0yNDcpK20rMTA4KSk6STwyNTU/KG09Y1tIXSxIKz0xLHAucHVzaCgyNTYqLShJLTI1MSktbS0xMDgpKToobT1jW0hdLHI9Y1tIKzFdLHc9Y1tIKzJdLHg9Y1tIKzNdLEgrPTQscC5wdXNoKChtPDwyNHxyPDwxNnx3PDw4fHgpLzY1NTM2KSl9fX12YXIgZyxoLGksaixrLGwsbSxuLG89bmV3IHIscD1bXSxxPTAscz0hMSx0PSExLHU9MCx2PTA7aWYoYS5pc0NJREZvbnQpe3ZhciB3PWEudGFibGVzLmNmZi50b3BEaWN0Ll9mZFNlbGVjdFtiLmluZGV4XSx4PWEudGFibGVzLmNmZi50b3BEaWN0Ll9mZEFycmF5W3ddO2s9eC5fc3VicnMsbD14Ll9zdWJyc0JpYXMsbT14Ll9kZWZhdWx0V2lkdGhYLG49eC5fbm9taW5hbFdpZHRoWH1lbHNlIGs9YS50YWJsZXMuY2ZmLnRvcERpY3QuX3N1YnJzLGw9YS50YWJsZXMuY2ZmLnRvcERpY3QuX3N1YnJzQmlhcyxtPWEudGFibGVzLmNmZi50b3BEaWN0Ll9kZWZhdWx0V2lkdGhYLG49YS50YWJsZXMuY2ZmLnRvcERpY3QuX25vbWluYWxXaWR0aFg7dmFyIHk9bTtyZXR1cm4gZihjKSxiLmFkdmFuY2VXaWR0aD15LG99ZnVuY3Rpb24geWEoYSxiLGMsZCl7dmFyIGUsZj1bXSxnPW5ldyBMZS5QYXJzZXIoYSxiKSxoPWcucGFyc2VDYXJkOCgpO2lmKDA9PT1oKWZvcih2YXIgaT0wO2k8YztpKyspe2lmKChlPWcucGFyc2VDYXJkOCgpKT49ZCl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgdGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgaGFzIGJhZCBGRCBpbmRleCB2YWx1ZSBcIitlK1wiIChGRCBjb3VudCBcIitkK1wiKVwiKTtmLnB1c2goZSl9ZWxzZXtpZigzIT09aCl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgVGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgdGFibGUgaGFzIHVuc3VwcG9ydGVkIGZvcm1hdCBcIitoKTt2YXIgaj1nLnBhcnNlQ2FyZDE2KCksaz1nLnBhcnNlQ2FyZDE2KCk7aWYoMCE9PWspdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIFRhYmxlIENJRCBGb250IEZEU2VsZWN0IGZvcm1hdCAzIHJhbmdlIGhhcyBiYWQgaW5pdGlhbCBHSUQgXCIrayk7Zm9yKHZhciBsLG09MDttPGo7bSsrKXtpZihlPWcucGFyc2VDYXJkOCgpLGw9Zy5wYXJzZUNhcmQxNigpLGU+PWQpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIHRhYmxlIENJRCBGb250IEZEU2VsZWN0IGhhcyBiYWQgRkQgaW5kZXggdmFsdWUgXCIrZStcIiAoRkQgY291bnQgXCIrZCtcIilcIik7aWYobD5jKXRocm93IG5ldyBFcnJvcihcIkNGRiBUYWJsZSBDSUQgRm9udCBGRFNlbGVjdCBmb3JtYXQgMyByYW5nZSBoYXMgYmFkIEdJRCBcIitsKTtmb3IoO2s8bDtrKyspZi5wdXNoKGUpO2s9bH1pZihsIT09Yyl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgVGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgZm9ybWF0IDMgcmFuZ2UgaGFzIGJhZCBmaW5hbCBHSUQgXCIrbCl9cmV0dXJuIGZ9ZnVuY3Rpb24gemEoYSxiLGMpe2MudGFibGVzLmNmZj17fTt2YXIgZD1yYShhLGIpLGU9a2EoYSxkLmVuZE9mZnNldCxMZS5ieXRlc1RvU3RyaW5nKSxmPWthKGEsZS5lbmRPZmZzZXQpLGc9a2EoYSxmLmVuZE9mZnNldCxMZS5ieXRlc1RvU3RyaW5nKSxoPWthKGEsZy5lbmRPZmZzZXQpO2MuZ3N1YnJzPWgub2JqZWN0cyxjLmdzdWJyc0JpYXM9amEoYy5nc3VicnMpO3ZhciBpPXVhKGEsYixmLm9iamVjdHMsZy5vYmplY3RzKTtpZigxIT09aS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIHRhYmxlIGhhcyB0b28gbWFueSBmb250cyBpbiAnRm9udFNldCcgLSBjb3VudCBvZiBmb250cyBOYW1lSW5kZXgubGVuZ3RoID0gXCIraS5sZW5ndGgpO3ZhciBqPWlbMF07aWYoYy50YWJsZXMuY2ZmLnRvcERpY3Q9aixqLl9wcml2YXRlRGljdCYmKGMuZGVmYXVsdFdpZHRoWD1qLl9wcml2YXRlRGljdC5kZWZhdWx0V2lkdGhYLGMubm9taW5hbFdpZHRoWD1qLl9wcml2YXRlRGljdC5ub21pbmFsV2lkdGhYKSx2b2lkIDAhPT1qLnJvc1swXSYmdm9pZCAwIT09ai5yb3NbMV0mJihjLmlzQ0lERm9udD0hMCksYy5pc0NJREZvbnQpe3ZhciBrPWouZmRBcnJheSxsPWouZmRTZWxlY3Q7aWYoMD09PWt8fDA9PT1sKXRocm93IG5ldyBFcnJvcihcIkZvbnQgaXMgbWFya2VkIGFzIGEgQ0lEIGZvbnQsIGJ1dCBGREFycmF5IGFuZC9vciBGRFNlbGVjdCBpbmZvcm1hdGlvbiBpcyBtaXNzaW5nXCIpO2srPWI7dmFyIG09a2EoYSxrKSxuPXVhKGEsYixtLm9iamVjdHMsZy5vYmplY3RzKTtqLl9mZEFycmF5PW4sbCs9YixqLl9mZFNlbGVjdD15YShhLGwsYy5udW1HbHlwaHMsbi5sZW5ndGgpfXZhciBvPWIrai5wcml2YXRlWzFdLHA9dGEoYSxvLGoucHJpdmF0ZVswXSxnLm9iamVjdHMpO2lmKGMuZGVmYXVsdFdpZHRoWD1wLmRlZmF1bHRXaWR0aFgsYy5ub21pbmFsV2lkdGhYPXAubm9taW5hbFdpZHRoWCwwIT09cC5zdWJycyl7dmFyIHE9bytwLnN1YnJzLHI9a2EoYSxxKTtjLnN1YnJzPXIub2JqZWN0cyxjLnN1YnJzQmlhcz1qYShjLnN1YnJzKX1lbHNlIGMuc3VicnM9W10sYy5zdWJyc0JpYXM9MDt2YXIgcz1rYShhLGIrai5jaGFyU3RyaW5ncyk7Yy5uR2x5cGhzPXMub2JqZWN0cy5sZW5ndGg7dmFyIHQ9dmEoYSxiK2ouY2hhcnNldCxjLm5HbHlwaHMsZy5vYmplY3RzKTswPT09ai5lbmNvZGluZz9jLmNmZkVuY29kaW5nPW5ldyBaKE9lLHQpOjE9PT1qLmVuY29kaW5nP2MuY2ZmRW5jb2Rpbmc9bmV3IFooUGUsdCk6Yy5jZmZFbmNvZGluZz13YShhLGIrai5lbmNvZGluZyx0KSxjLmVuY29kaW5nPWMuZW5jb2Rpbmd8fGMuY2ZmRW5jb2RpbmcsYy5nbHlwaHM9bmV3IFNlLkdseXBoU2V0KGMpO2Zvcih2YXIgdT0wO3U8Yy5uR2x5cGhzO3UrPTEpe3ZhciB2PXMub2JqZWN0c1t1XTtjLmdseXBocy5wdXNoKHUsU2UuY2ZmR2x5cGhMb2FkZXIoYyx1LHhhLHYpKX19ZnVuY3Rpb24gQWEoYSxiKXt2YXIgYyxkPU5lLmluZGV4T2YoYSk7cmV0dXJuIGQ+PTAmJihjPWQpLGQ9Yi5pbmRleE9mKGEpLGQ+PTA/Yz1kK05lLmxlbmd0aDooYz1OZS5sZW5ndGgrYi5sZW5ndGgsYi5wdXNoKGEpKSxjfWZ1bmN0aW9uIEJhKCl7cmV0dXJuIG5ldyBJZS5SZWNvcmQoXCJIZWFkZXJcIixbe25hbWU6XCJtYWpvclwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjF9LHtuYW1lOlwibWlub3JcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZTowfSx7bmFtZTpcImhkclNpemVcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZTo0fSx7bmFtZTpcIm1ham9yXCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6MX1dKX1mdW5jdGlvbiBDYShhKXt2YXIgYj1uZXcgSWUuUmVjb3JkKFwiTmFtZSBJTkRFWFwiLFt7bmFtZTpcIm5hbWVzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSk7Yi5uYW1lcz1bXTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrPTEpYi5uYW1lcy5wdXNoKHtuYW1lOlwibmFtZV9cIitjLHR5cGU6XCJOQU1FXCIsdmFsdWU6YVtjXX0pO3JldHVybiBifWZ1bmN0aW9uIERhKGEsYixjKXtmb3IodmFyIGQ9e30sZT0wO2U8YS5sZW5ndGg7ZSs9MSl7dmFyIGY9YVtlXSxnPWJbZi5uYW1lXTt2b2lkIDA9PT1nfHxpYShnLGYudmFsdWUpfHwoXCJTSURcIj09PWYudHlwZSYmKGc9QWEoZyxjKSksZFtmLm9wXT17bmFtZTpmLm5hbWUsdHlwZTpmLnR5cGUsdmFsdWU6Z30pfXJldHVybiBkfWZ1bmN0aW9uIEVhKGEsYil7dmFyIGM9bmV3IEllLlJlY29yZChcIlRvcCBESUNUXCIsW3tuYW1lOlwiZGljdFwiLHR5cGU6XCJESUNUXCIsdmFsdWU6e319XSk7cmV0dXJuIGMuZGljdD1EYShUZSxhLGIpLGN9ZnVuY3Rpb24gRmEoYSl7dmFyIGI9bmV3IEllLlJlY29yZChcIlRvcCBESUNUIElOREVYXCIsW3tuYW1lOlwidG9wRGljdHNcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKTtyZXR1cm4gYi50b3BEaWN0cz1be25hbWU6XCJ0b3BEaWN0XzBcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTphfV0sYn1mdW5jdGlvbiBHYShhKXt2YXIgYj1uZXcgSWUuUmVjb3JkKFwiU3RyaW5nIElOREVYXCIsW3tuYW1lOlwic3RyaW5nc1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pO2Iuc3RyaW5ncz1bXTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrPTEpYi5zdHJpbmdzLnB1c2goe25hbWU6XCJzdHJpbmdfXCIrYyx0eXBlOlwiU1RSSU5HXCIsdmFsdWU6YVtjXX0pO3JldHVybiBifWZ1bmN0aW9uIEhhKCl7cmV0dXJuIG5ldyBJZS5SZWNvcmQoXCJHbG9iYWwgU3ViciBJTkRFWFwiLFt7bmFtZTpcInN1YnJzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSl9ZnVuY3Rpb24gSWEoYSxiKXtmb3IodmFyIGM9bmV3IEllLlJlY29yZChcIkNoYXJzZXRzXCIsW3tuYW1lOlwiZm9ybWF0XCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6MH1dKSxkPTA7ZDxhLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdLGY9QWEoZSxiKTtjLmZpZWxkcy5wdXNoKHtuYW1lOlwiZ2x5cGhfXCIrZCx0eXBlOlwiU0lEXCIsdmFsdWU6Zn0pfXJldHVybiBjfWZ1bmN0aW9uIEphKGEpe3ZhciBiPVtdLGM9YS5wYXRoO2IucHVzaCh7bmFtZTpcIndpZHRoXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmEuYWR2YW5jZVdpZHRofSk7Zm9yKHZhciBkPTAsZT0wLGY9MDtmPGMuY29tbWFuZHMubGVuZ3RoO2YrPTEpe3ZhciBnPXZvaWQgMCxoPXZvaWQgMCxpPWMuY29tbWFuZHNbZl07aWYoXCJRXCI9PT1pLnR5cGUpe3ZhciBqPTEvMyxrPTIvMztpPXt0eXBlOlwiQ1wiLHg6aS54LHk6aS55LHgxOmoqZCtrKmkueDEseTE6aiplK2sqaS55MSx4MjpqKmkueCtrKmkueDEseTI6aippLnkrayppLnkxfX1pZihcIk1cIj09PWkudHlwZSlnPU1hdGgucm91bmQoaS54LWQpLGg9TWF0aC5yb3VuZChpLnktZSksYi5wdXNoKHtuYW1lOlwiZHhcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6Z30pLGIucHVzaCh7bmFtZTpcImR5XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmh9KSxiLnB1c2goe25hbWU6XCJybW92ZXRvXCIsdHlwZTpcIk9QXCIsdmFsdWU6MjF9KSxkPU1hdGgucm91bmQoaS54KSxlPU1hdGgucm91bmQoaS55KTtlbHNlIGlmKFwiTFwiPT09aS50eXBlKWc9TWF0aC5yb3VuZChpLngtZCksaD1NYXRoLnJvdW5kKGkueS1lKSxiLnB1c2goe25hbWU6XCJkeFwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpnfSksYi5wdXNoKHtuYW1lOlwiZHlcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6aH0pLGIucHVzaCh7bmFtZTpcInJsaW5ldG9cIix0eXBlOlwiT1BcIix2YWx1ZTo1fSksZD1NYXRoLnJvdW5kKGkueCksZT1NYXRoLnJvdW5kKGkueSk7ZWxzZSBpZihcIkNcIj09PWkudHlwZSl7dmFyIGw9TWF0aC5yb3VuZChpLngxLWQpLG09TWF0aC5yb3VuZChpLnkxLWUpLG49TWF0aC5yb3VuZChpLngyLWkueDEpLG89TWF0aC5yb3VuZChpLnkyLWkueTEpO2c9TWF0aC5yb3VuZChpLngtaS54MiksaD1NYXRoLnJvdW5kKGkueS1pLnkyKSxiLnB1c2goe25hbWU6XCJkeDFcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6bH0pLGIucHVzaCh7bmFtZTpcImR5MVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTptfSksYi5wdXNoKHtuYW1lOlwiZHgyXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOm59KSxiLnB1c2goe25hbWU6XCJkeTJcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6b30pLGIucHVzaCh7bmFtZTpcImR4XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmd9KSxiLnB1c2goe25hbWU6XCJkeVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpofSksYi5wdXNoKHtuYW1lOlwicnJjdXJ2ZXRvXCIsdHlwZTpcIk9QXCIsdmFsdWU6OH0pLGQ9TWF0aC5yb3VuZChpLngpLGU9TWF0aC5yb3VuZChpLnkpfX1yZXR1cm4gYi5wdXNoKHtuYW1lOlwiZW5kY2hhclwiLHR5cGU6XCJPUFwiLHZhbHVlOjE0fSksYn1mdW5jdGlvbiBLYShhKXtmb3IodmFyIGI9bmV3IEllLlJlY29yZChcIkNoYXJTdHJpbmdzIElOREVYXCIsW3tuYW1lOlwiY2hhclN0cmluZ3NcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hLmdldChjKSxlPUphKGQpO2IuY2hhclN0cmluZ3MucHVzaCh7bmFtZTpkLm5hbWUsdHlwZTpcIkNIQVJTVFJJTkdcIix2YWx1ZTplfSl9cmV0dXJuIGJ9ZnVuY3Rpb24gTGEoYSxiKXt2YXIgYz1uZXcgSWUuUmVjb3JkKFwiUHJpdmF0ZSBESUNUXCIsW3tuYW1lOlwiZGljdFwiLHR5cGU6XCJESUNUXCIsdmFsdWU6e319XSk7cmV0dXJuIGMuZGljdD1EYShVZSxhLGIpLGN9ZnVuY3Rpb24gTWEoYSxiKXtmb3IodmFyIGMsZD1uZXcgSWUuVGFibGUoXCJDRkYgXCIsW3tuYW1lOlwiaGVhZGVyXCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcIm5hbWVJbmRleFwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJ0b3BEaWN0SW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwic3RyaW5nSW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwiZ2xvYmFsU3VickluZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcImNoYXJzZXRzXCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcImNoYXJTdHJpbmdzSW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwicHJpdmF0ZURpY3RcIix0eXBlOlwiUkVDT1JEXCJ9XSksZT0xL2IudW5pdHNQZXJFbSxmPXt2ZXJzaW9uOmIudmVyc2lvbixmdWxsTmFtZTpiLmZ1bGxOYW1lLGZhbWlseU5hbWU6Yi5mYW1pbHlOYW1lLHdlaWdodDpiLndlaWdodE5hbWUsZm9udEJCb3g6Yi5mb250QkJveHx8WzAsMCwwLDBdLGZvbnRNYXRyaXg6W2UsMCwwLGUsMCwwXSxjaGFyc2V0Ojk5OSxlbmNvZGluZzowLGNoYXJTdHJpbmdzOjk5OSxwcml2YXRlOlswLDk5OV19LGc9e30saD1bXSxpPTE7aTxhLmxlbmd0aDtpKz0xKWM9YS5nZXQoaSksaC5wdXNoKGMubmFtZSk7dmFyIGo9W107ZC5oZWFkZXI9QmEoKSxkLm5hbWVJbmRleD1DYShbYi5wb3N0U2NyaXB0TmFtZV0pO3ZhciBrPUVhKGYsaik7ZC50b3BEaWN0SW5kZXg9RmEoayksZC5nbG9iYWxTdWJySW5kZXg9SGEoKSxkLmNoYXJzZXRzPUlhKGgsaiksZC5jaGFyU3RyaW5nc0luZGV4PUthKGEpLGQucHJpdmF0ZURpY3Q9TGEoZyxqKSxkLnN0cmluZ0luZGV4PUdhKGopO3ZhciBsPWQuaGVhZGVyLnNpemVPZigpK2QubmFtZUluZGV4LnNpemVPZigpK2QudG9wRGljdEluZGV4LnNpemVPZigpK2Quc3RyaW5nSW5kZXguc2l6ZU9mKCkrZC5nbG9iYWxTdWJySW5kZXguc2l6ZU9mKCk7cmV0dXJuIGYuY2hhcnNldD1sLGYuZW5jb2Rpbmc9MCxmLmNoYXJTdHJpbmdzPWYuY2hhcnNldCtkLmNoYXJzZXRzLnNpemVPZigpLGYucHJpdmF0ZVsxXT1mLmNoYXJTdHJpbmdzK2QuY2hhclN0cmluZ3NJbmRleC5zaXplT2YoKSxrPUVhKGYsaiksZC50b3BEaWN0SW5kZXg9RmEoayksZH1mdW5jdGlvbiBOYShhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3JldHVybiBjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLmZvbnRSZXZpc2lvbj1NYXRoLnJvdW5kKDFlMypkLnBhcnNlRml4ZWQoKSkvMWUzLGMuY2hlY2tTdW1BZGp1c3RtZW50PWQucGFyc2VVTG9uZygpLGMubWFnaWNOdW1iZXI9ZC5wYXJzZVVMb25nKCkseGUuYXJndW1lbnQoMTU5NDgzNDE2NT09PWMubWFnaWNOdW1iZXIsXCJGb250IGhlYWRlciBoYXMgd3JvbmcgbWFnaWMgbnVtYmVyLlwiKSxjLmZsYWdzPWQucGFyc2VVU2hvcnQoKSxjLnVuaXRzUGVyRW09ZC5wYXJzZVVTaG9ydCgpLGMuY3JlYXRlZD1kLnBhcnNlTG9uZ0RhdGVUaW1lKCksYy5tb2RpZmllZD1kLnBhcnNlTG9uZ0RhdGVUaW1lKCksYy54TWluPWQucGFyc2VTaG9ydCgpLGMueU1pbj1kLnBhcnNlU2hvcnQoKSxjLnhNYXg9ZC5wYXJzZVNob3J0KCksYy55TWF4PWQucGFyc2VTaG9ydCgpLGMubWFjU3R5bGU9ZC5wYXJzZVVTaG9ydCgpLGMubG93ZXN0UmVjUFBFTT1kLnBhcnNlVVNob3J0KCksYy5mb250RGlyZWN0aW9uSGludD1kLnBhcnNlU2hvcnQoKSxjLmluZGV4VG9Mb2NGb3JtYXQ9ZC5wYXJzZVNob3J0KCksYy5nbHlwaERhdGFGb3JtYXQ9ZC5wYXJzZVNob3J0KCksY31mdW5jdGlvbiBPYShhKXt2YXIgYj1NYXRoLnJvdW5kKChuZXcgRGF0ZSkuZ2V0VGltZSgpLzFlMykrMjA4Mjg0NDgwMCxjPWI7cmV0dXJuIGEuY3JlYXRlZFRpbWVzdGFtcCYmKGM9YS5jcmVhdGVkVGltZXN0YW1wKzIwODI4NDQ4MDApLG5ldyBJZS5UYWJsZShcImhlYWRcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwiZm9udFJldmlzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwiY2hlY2tTdW1BZGp1c3RtZW50XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtYWdpY051bWJlclwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjE1OTQ4MzQxNjV9LHtuYW1lOlwiZmxhZ3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1bml0c1BlckVtXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjFlM30se25hbWU6XCJjcmVhdGVkXCIsdHlwZTpcIkxPTkdEQVRFVElNRVwiLHZhbHVlOmN9LHtuYW1lOlwibW9kaWZpZWRcIix0eXBlOlwiTE9OR0RBVEVUSU1FXCIsdmFsdWU6Yn0se25hbWU6XCJ4TWluXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5TWluXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ4TWF4XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5TWF4XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJtYWNTdHlsZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImxvd2VzdFJlY1BQRU1cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJmb250RGlyZWN0aW9uSGludFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjJ9LHtuYW1lOlwiaW5kZXhUb0xvY0Zvcm1hdFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZ2x5cGhEYXRhRm9ybWF0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH1dLGEpfWZ1bmN0aW9uIFBhKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7cmV0dXJuIGMudmVyc2lvbj1kLnBhcnNlVmVyc2lvbigpLGMuYXNjZW5kZXI9ZC5wYXJzZVNob3J0KCksYy5kZXNjZW5kZXI9ZC5wYXJzZVNob3J0KCksYy5saW5lR2FwPWQucGFyc2VTaG9ydCgpLGMuYWR2YW5jZVdpZHRoTWF4PWQucGFyc2VVU2hvcnQoKSxjLm1pbkxlZnRTaWRlQmVhcmluZz1kLnBhcnNlU2hvcnQoKSxjLm1pblJpZ2h0U2lkZUJlYXJpbmc9ZC5wYXJzZVNob3J0KCksYy54TWF4RXh0ZW50PWQucGFyc2VTaG9ydCgpLGMuY2FyZXRTbG9wZVJpc2U9ZC5wYXJzZVNob3J0KCksYy5jYXJldFNsb3BlUnVuPWQucGFyc2VTaG9ydCgpLGMuY2FyZXRPZmZzZXQ9ZC5wYXJzZVNob3J0KCksZC5yZWxhdGl2ZU9mZnNldCs9OCxjLm1ldHJpY0RhdGFGb3JtYXQ9ZC5wYXJzZVNob3J0KCksYy5udW1iZXJPZkhNZXRyaWNzPWQucGFyc2VVU2hvcnQoKSxjfWZ1bmN0aW9uIFFhKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJoaGVhXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjY1NTM2fSx7bmFtZTpcImFzY2VuZGVyXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJkZXNjZW5kZXJcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImxpbmVHYXBcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImFkdmFuY2VXaWR0aE1heFwiLHR5cGU6XCJVRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcIm1pbkxlZnRTaWRlQmVhcmluZ1wiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwibWluUmlnaHRTaWRlQmVhcmluZ1wiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwieE1heEV4dGVudFwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwiY2FyZXRTbG9wZVJpc2VcIix0eXBlOlwiU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcImNhcmV0U2xvcGVSdW5cIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImNhcmV0T2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXNlcnZlZDFcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlc2VydmVkMlwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVzZXJ2ZWQzXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXNlcnZlZDRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcIm1ldHJpY0RhdGFGb3JtYXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcIm51bWJlck9mSE1ldHJpY3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dLGEpfWZ1bmN0aW9uIFJhKGEsYixjLGQsZSl7Zm9yKHZhciBmLGcsaD1uZXcgTGUuUGFyc2VyKGEsYiksaT0wO2k8ZDtpKz0xKXtpPGMmJihmPWgucGFyc2VVU2hvcnQoKSxnPWgucGFyc2VTaG9ydCgpKTt2YXIgaj1lLmdldChpKTtqLmFkdmFuY2VXaWR0aD1mLGoubGVmdFNpZGVCZWFyaW5nPWd9fWZ1bmN0aW9uIFNhKGEpe2Zvcih2YXIgYj1uZXcgSWUuVGFibGUoXCJobXR4XCIsW10pLGM9MDtjPGEubGVuZ3RoO2MrPTEpe3ZhciBkPWEuZ2V0KGMpLGU9ZC5hZHZhbmNlV2lkdGh8fDAsZj1kLmxlZnRTaWRlQmVhcmluZ3x8MDtiLmZpZWxkcy5wdXNoKHtuYW1lOlwiYWR2YW5jZVdpZHRoX1wiK2MsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmV9KSxiLmZpZWxkcy5wdXNoKHtuYW1lOlwibGVmdFNpZGVCZWFyaW5nX1wiK2MsdHlwZTpcIlNIT1JUXCIsdmFsdWU6Zn0pfXJldHVybiBifWZ1bmN0aW9uIFRhKGEpe2Zvcih2YXIgYj1uZXcgSWUuVGFibGUoXCJsdGFnXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjF9LHtuYW1lOlwiZmxhZ3NcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm51bVRhZ3NcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTphLmxlbmd0aH1dKSxjPVwiXCIsZD0xMis0KmEubGVuZ3RoLGU9MDtlPGEubGVuZ3RoOysrZSl7dmFyIGY9Yy5pbmRleE9mKGFbZV0pO2Y8MCYmKGY9Yy5sZW5ndGgsYys9YVtlXSksYi5maWVsZHMucHVzaCh7bmFtZTpcIm9mZnNldCBcIitlLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkK2Z9KSxiLmZpZWxkcy5wdXNoKHtuYW1lOlwibGVuZ3RoIFwiK2UsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmFbZV0ubGVuZ3RofSl9cmV0dXJuIGIuZmllbGRzLnB1c2goe25hbWU6XCJzdHJpbmdQb29sXCIsdHlwZTpcIkNIQVJBUlJBWVwiLHZhbHVlOmN9KSxifWZ1bmN0aW9uIFVhKGEsYil7dmFyIGM9bmV3IExlLlBhcnNlcihhLGIpLGQ9Yy5wYXJzZVVMb25nKCk7eGUuYXJndW1lbnQoMT09PWQsXCJVbnN1cHBvcnRlZCBsdGFnIHRhYmxlIHZlcnNpb24uXCIpLGMuc2tpcChcInVMb25nXCIsMSk7Zm9yKHZhciBlPWMucGFyc2VVTG9uZygpLGY9W10sZz0wO2c8ZTtnKyspe2Zvcih2YXIgaD1cIlwiLGk9YitjLnBhcnNlVVNob3J0KCksaj1jLnBhcnNlVVNob3J0KCksaz1pO2s8aStqOysrayloKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEuZ2V0SW50OChrKSk7Zi5wdXNoKGgpfXJldHVybiBmfWZ1bmN0aW9uIFZhKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7cmV0dXJuIGMudmVyc2lvbj1kLnBhcnNlVmVyc2lvbigpLGMubnVtR2x5cGhzPWQucGFyc2VVU2hvcnQoKSwxPT09Yy52ZXJzaW9uJiYoYy5tYXhQb2ludHM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29udG91cnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29tcG9zaXRlUG9pbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbXBvc2l0ZUNvbnRvdXJzPWQucGFyc2VVU2hvcnQoKSxjLm1heFpvbmVzPWQucGFyc2VVU2hvcnQoKSxjLm1heFR3aWxpZ2h0UG9pbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heFN0b3JhZ2U9ZC5wYXJzZVVTaG9ydCgpLGMubWF4RnVuY3Rpb25EZWZzPWQucGFyc2VVU2hvcnQoKSxjLm1heEluc3RydWN0aW9uRGVmcz1kLnBhcnNlVVNob3J0KCksYy5tYXhTdGFja0VsZW1lbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heFNpemVPZkluc3RydWN0aW9ucz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb21wb25lbnRFbGVtZW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb21wb25lbnREZXB0aD1kLnBhcnNlVVNob3J0KCkpLGN9ZnVuY3Rpb24gV2EoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcIm1heHBcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6MjA0ODB9LHtuYW1lOlwibnVtR2x5cGhzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmF9XSl9ZnVuY3Rpb24gWGEoYSxiLGMpe3N3aXRjaChhKXtjYXNlIDA6aWYoNjU1MzU9PT1iKXJldHVyblwidW5kXCI7aWYoYylyZXR1cm4gY1tiXTticmVhaztjYXNlIDE6cmV0dXJuIGFmW2JdO2Nhc2UgMzpyZXR1cm4gY2ZbYl19fWZ1bmN0aW9uIFlhKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiBkZjtjYXNlIDE6cmV0dXJuIGZmW2NdfHxlZltiXTtjYXNlIDM6aWYoMT09PWJ8fDEwPT09YilyZXR1cm4gZGZ9fWZ1bmN0aW9uIFphKGEsYixjKXtmb3IodmFyIGQ9e30sZT1uZXcgTGUuUGFyc2VyKGEsYiksZj1lLnBhcnNlVVNob3J0KCksZz1lLnBhcnNlVVNob3J0KCksaD1lLm9mZnNldCtlLnBhcnNlVVNob3J0KCksaT0wO2k8ZztpKyspe3ZhciBqPWUucGFyc2VVU2hvcnQoKSxrPWUucGFyc2VVU2hvcnQoKSxsPWUucGFyc2VVU2hvcnQoKSxtPWUucGFyc2VVU2hvcnQoKSxuPV9lW21dfHxtLG89ZS5wYXJzZVVTaG9ydCgpLHA9ZS5wYXJzZVVTaG9ydCgpLHE9WGEoaixsLGMpLHI9WWEoaixrLGwpO2lmKHZvaWQgMCE9PXImJnZvaWQgMCE9PXEpe3ZhciBzPXZvaWQgMDtpZihzPXI9PT1kZj9BZS5VVEYxNihhLGgrcCxvKTpBZS5NQUNTVFJJTkcoYSxoK3AsbyxyKSl7dmFyIHQ9ZFtuXTt2b2lkIDA9PT10JiYodD1kW25dPXt9KSx0W3FdPXN9fX1yZXR1cm4gMT09PWYmJmUucGFyc2VVU2hvcnQoKSxkfWZ1bmN0aW9uICRhKGEpe3ZhciBiPXt9O2Zvcih2YXIgYyBpbiBhKWJbYVtjXV09cGFyc2VJbnQoYyk7cmV0dXJuIGJ9ZnVuY3Rpb24gX2EoYSxiLGMsZCxlLGYpe3JldHVybiBuZXcgSWUuUmVjb3JkKFwiTmFtZVJlY29yZFwiLFt7bmFtZTpcInBsYXRmb3JtSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YX0se25hbWU6XCJlbmNvZGluZ0lEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmJ9LHtuYW1lOlwibGFuZ3VhZ2VJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjfSx7bmFtZTpcIm5hbWVJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkfSx7bmFtZTpcImxlbmd0aFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTplfSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpmfV0pfWZ1bmN0aW9uIGFiKGEsYil7dmFyIGM9YS5sZW5ndGgsZD1iLmxlbmd0aC1jKzE7YTpmb3IodmFyIGU9MDtlPGQ7ZSsrKWZvcig7ZTxkO2UrKyl7Zm9yKHZhciBmPTA7ZjxjO2YrKylpZihiW2UrZl0hPT1hW2ZdKWNvbnRpbnVlIGE7cmV0dXJuIGV9cmV0dXJuLTF9ZnVuY3Rpb24gYmIoYSxiKXt2YXIgYz1hYihhLGIpO2lmKGM8MCl7Yz1iLmxlbmd0aDtmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2Q8ZTsrK2QpYi5wdXNoKGFbZF0pfXJldHVybiBjfWZ1bmN0aW9uIGNiKGEsYil7dmFyIGMsZD1bXSxlPXt9LGY9JGEoX2UpO2Zvcih2YXIgZyBpbiBhKXt2YXIgaD1mW2ddO2lmKHZvaWQgMD09PWgmJihoPWcpLGM9cGFyc2VJbnQoaCksaXNOYU4oYykpdGhyb3cgbmV3IEVycm9yKCdOYW1lIHRhYmxlIGVudHJ5IFwiJytnKydcIiBkb2VzIG5vdCBleGlzdCwgc2VlIG5hbWVUYWJsZU5hbWVzIGZvciBjb21wbGV0ZSBsaXN0LicpO2VbY109YVtnXSxkLnB1c2goYyl9Zm9yKHZhciBpPSRhKGFmKSxqPSRhKGNmKSxrPVtdLGw9W10sbT0wO208ZC5sZW5ndGg7bSsrKXtjPWRbbV07dmFyIG49ZVtjXTtmb3IodmFyIG8gaW4gbil7dmFyIHA9bltvXSxxPTEscj1pW29dLHM9YmZbcl0sdD1ZYShxLHMsciksdT1CZS5NQUNTVFJJTkcocCx0KTt2b2lkIDA9PT11JiYocT0wLHI9Yi5pbmRleE9mKG8pLHI8MCYmKHI9Yi5sZW5ndGgsYi5wdXNoKG8pKSxzPTQsdT1CZS5VVEYxNihwKSk7dmFyIHY9YmIodSxsKTtrLnB1c2goX2EocSxzLHIsYyx1Lmxlbmd0aCx2KSk7dmFyIHc9altvXTtpZih2b2lkIDAhPT13KXt2YXIgeD1CZS5VVEYxNihwKSx5PWJiKHgsbCk7ay5wdXNoKF9hKDMsMSx3LGMseC5sZW5ndGgseSkpfX19ay5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEucGxhdGZvcm1JRC1iLnBsYXRmb3JtSUR8fGEuZW5jb2RpbmdJRC1iLmVuY29kaW5nSUR8fGEubGFuZ3VhZ2VJRC1iLmxhbmd1YWdlSUR8fGEubmFtZUlELWIubmFtZUlEfSk7Zm9yKHZhciB6PW5ldyBJZS5UYWJsZShcIm5hbWVcIixbe25hbWU6XCJmb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJjb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTprLmxlbmd0aH0se25hbWU6XCJzdHJpbmdPZmZzZXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6NisxMiprLmxlbmd0aH1dKSxBPTA7QTxrLmxlbmd0aDtBKyspei5maWVsZHMucHVzaCh7bmFtZTpcInJlY29yZF9cIitBLHR5cGU6XCJSRUNPUkRcIix2YWx1ZTprW0FdfSk7cmV0dXJuIHouZmllbGRzLnB1c2goe25hbWU6XCJzdHJpbmdzXCIsdHlwZTpcIkxJVEVSQUxcIix2YWx1ZTpsfSksen1mdW5jdGlvbiBkYihhKXtmb3IodmFyIGI9MDtiPGhmLmxlbmd0aDtiKz0xKXt2YXIgYz1oZltiXTtpZihhPj1jLmJlZ2luJiZhPGMuZW5kKXJldHVybiBifXJldHVybi0xfWZ1bmN0aW9uIGViKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7Yy52ZXJzaW9uPWQucGFyc2VVU2hvcnQoKSxjLnhBdmdDaGFyV2lkdGg9ZC5wYXJzZVNob3J0KCksYy51c1dlaWdodENsYXNzPWQucGFyc2VVU2hvcnQoKSxjLnVzV2lkdGhDbGFzcz1kLnBhcnNlVVNob3J0KCksYy5mc1R5cGU9ZC5wYXJzZVVTaG9ydCgpLGMueVN1YnNjcmlwdFhTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1YnNjcmlwdFlTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1YnNjcmlwdFhPZmZzZXQ9ZC5wYXJzZVNob3J0KCksYy55U3Vic2NyaXB0WU9mZnNldD1kLnBhcnNlU2hvcnQoKSxjLnlTdXBlcnNjcmlwdFhTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1cGVyc2NyaXB0WVNpemU9ZC5wYXJzZVNob3J0KCksYy55U3VwZXJzY3JpcHRYT2Zmc2V0PWQucGFyc2VTaG9ydCgpLGMueVN1cGVyc2NyaXB0WU9mZnNldD1kLnBhcnNlU2hvcnQoKSxjLnlTdHJpa2VvdXRTaXplPWQucGFyc2VTaG9ydCgpLGMueVN0cmlrZW91dFBvc2l0aW9uPWQucGFyc2VTaG9ydCgpLGMuc0ZhbWlseUNsYXNzPWQucGFyc2VTaG9ydCgpLGMucGFub3NlPVtdO2Zvcih2YXIgZT0wO2U8MTA7ZSsrKWMucGFub3NlW2VdPWQucGFyc2VCeXRlKCk7cmV0dXJuIGMudWxVbmljb2RlUmFuZ2UxPWQucGFyc2VVTG9uZygpLGMudWxVbmljb2RlUmFuZ2UyPWQucGFyc2VVTG9uZygpLGMudWxVbmljb2RlUmFuZ2UzPWQucGFyc2VVTG9uZygpLGMudWxVbmljb2RlUmFuZ2U0PWQucGFyc2VVTG9uZygpLGMuYWNoVmVuZElEPVN0cmluZy5mcm9tQ2hhckNvZGUoZC5wYXJzZUJ5dGUoKSxkLnBhcnNlQnl0ZSgpLGQucGFyc2VCeXRlKCksZC5wYXJzZUJ5dGUoKSksYy5mc1NlbGVjdGlvbj1kLnBhcnNlVVNob3J0KCksYy51c0ZpcnN0Q2hhckluZGV4PWQucGFyc2VVU2hvcnQoKSxjLnVzTGFzdENoYXJJbmRleD1kLnBhcnNlVVNob3J0KCksYy5zVHlwb0FzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMuc1R5cG9EZXNjZW5kZXI9ZC5wYXJzZVNob3J0KCksYy5zVHlwb0xpbmVHYXA9ZC5wYXJzZVNob3J0KCksYy51c1dpbkFzY2VudD1kLnBhcnNlVVNob3J0KCksYy51c1dpbkRlc2NlbnQ9ZC5wYXJzZVVTaG9ydCgpLGMudmVyc2lvbj49MSYmKGMudWxDb2RlUGFnZVJhbmdlMT1kLnBhcnNlVUxvbmcoKSxjLnVsQ29kZVBhZ2VSYW5nZTI9ZC5wYXJzZVVMb25nKCkpLGMudmVyc2lvbj49MiYmKGMuc3hIZWlnaHQ9ZC5wYXJzZVNob3J0KCksYy5zQ2FwSGVpZ2h0PWQucGFyc2VTaG9ydCgpLGMudXNEZWZhdWx0Q2hhcj1kLnBhcnNlVVNob3J0KCksYy51c0JyZWFrQ2hhcj1kLnBhcnNlVVNob3J0KCksYy51c01heENvbnRlbnQ9ZC5wYXJzZVVTaG9ydCgpKSxjfWZ1bmN0aW9uIGZiKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJPUy8yXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTozfSx7bmFtZTpcInhBdmdDaGFyV2lkdGhcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzV2VpZ2h0Q2xhc3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c1dpZHRoQ2xhc3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJmc1R5cGVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5U3Vic2NyaXB0WFNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo2NTB9LHtuYW1lOlwieVN1YnNjcmlwdFlTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6Njk5fSx7bmFtZTpcInlTdWJzY3JpcHRYT2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5U3Vic2NyaXB0WU9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjE0MH0se25hbWU6XCJ5U3VwZXJzY3JpcHRYU2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjY1MH0se25hbWU6XCJ5U3VwZXJzY3JpcHRZU2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjY5OX0se25hbWU6XCJ5U3VwZXJzY3JpcHRYT2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5U3VwZXJzY3JpcHRZT2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6NDc5fSx7bmFtZTpcInlTdHJpa2VvdXRTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6NDl9LHtuYW1lOlwieVN0cmlrZW91dFBvc2l0aW9uXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MjU4fSx7bmFtZTpcInNGYW1pbHlDbGFzc1wiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiYkZhbWlseVR5cGVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlNlcmlmU3R5bGVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYldlaWdodFwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiUHJvcG9ydGlvblwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiQ29udHJhc3RcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlN0cm9rZVZhcmlhdGlvblwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiQXJtU3R5bGVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYkxldHRlcmZvcm1cIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYk1pZGxpbmVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlhIZWlnaHRcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwidWxVbmljb2RlUmFuZ2UxXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJ1bFVuaWNvZGVSYW5nZTJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcInVsVW5pY29kZVJhbmdlM1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwidWxVbmljb2RlUmFuZ2U0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJhY2hWZW5kSURcIix0eXBlOlwiQ0hBUkFSUkFZXCIsdmFsdWU6XCJYWFhYXCJ9LHtuYW1lOlwiZnNTZWxlY3Rpb25cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c0ZpcnN0Q2hhckluZGV4XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNMYXN0Q2hhckluZGV4XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic1R5cG9Bc2NlbmRlclwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic1R5cG9EZXNjZW5kZXJcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNUeXBvTGluZUdhcFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNXaW5Bc2NlbnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c1dpbkRlc2NlbnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1bENvZGVQYWdlUmFuZ2UxXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJ1bENvZGVQYWdlUmFuZ2UyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJzeEhlaWdodFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic0NhcEhlaWdodFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNEZWZhdWx0Q2hhclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzQnJlYWtDaGFyXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNNYXhDb250ZXh0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSxhKX1mdW5jdGlvbiBnYihhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3N3aXRjaChjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLml0YWxpY0FuZ2xlPWQucGFyc2VGaXhlZCgpLGMudW5kZXJsaW5lUG9zaXRpb249ZC5wYXJzZVNob3J0KCksYy51bmRlcmxpbmVUaGlja25lc3M9ZC5wYXJzZVNob3J0KCksYy5pc0ZpeGVkUGl0Y2g9ZC5wYXJzZVVMb25nKCksYy5taW5NZW1UeXBlNDI9ZC5wYXJzZVVMb25nKCksYy5tYXhNZW1UeXBlNDI9ZC5wYXJzZVVMb25nKCksYy5taW5NZW1UeXBlMT1kLnBhcnNlVUxvbmcoKSxjLm1heE1lbVR5cGUxPWQucGFyc2VVTG9uZygpLGMudmVyc2lvbil7Y2FzZSAxOmMubmFtZXM9UWUuc2xpY2UoKTticmVhaztjYXNlIDI6Yy5udW1iZXJPZkdseXBocz1kLnBhcnNlVVNob3J0KCksYy5nbHlwaE5hbWVJbmRleD1uZXcgQXJyYXkoYy5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBlPTA7ZTxjLm51bWJlck9mR2x5cGhzO2UrKyljLmdseXBoTmFtZUluZGV4W2VdPWQucGFyc2VVU2hvcnQoKTtjLm5hbWVzPVtdO2Zvcih2YXIgZj0wO2Y8Yy5udW1iZXJPZkdseXBocztmKyspaWYoYy5nbHlwaE5hbWVJbmRleFtmXT49UWUubGVuZ3RoKXt2YXIgZz1kLnBhcnNlQ2hhcigpO2MubmFtZXMucHVzaChkLnBhcnNlU3RyaW5nKGcpKX1icmVhaztjYXNlIDIuNTpjLm51bWJlck9mR2x5cGhzPWQucGFyc2VVU2hvcnQoKSxjLm9mZnNldD1uZXcgQXJyYXkoYy5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBoPTA7aDxjLm51bWJlck9mR2x5cGhzO2grKyljLm9mZnNldFtoXT1kLnBhcnNlQ2hhcigpfXJldHVybiBjfWZ1bmN0aW9uIGhiKCl7cmV0dXJuIG5ldyBJZS5UYWJsZShcInBvc3RcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6MTk2NjA4fSx7bmFtZTpcIml0YWxpY0FuZ2xlXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6MH0se25hbWU6XCJ1bmRlcmxpbmVQb3NpdGlvblwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwidW5kZXJsaW5lVGhpY2tuZXNzXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJpc0ZpeGVkUGl0Y2hcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1pbk1lbVR5cGU0MlwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWF4TWVtVHlwZTQyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtaW5NZW1UeXBlMVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWF4TWVtVHlwZTFcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfV0pfWZ1bmN0aW9uIGliKGEsYil7Yj1ifHwwO3ZhciBjPW5ldyBRKGEsYiksZD1jLnBhcnNlVmVyc2lvbigxKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWR8fDEuMT09PWQsXCJVbnN1cHBvcnRlZCBHU1VCIHRhYmxlIHZlcnNpb24uXCIpLDE9PT1kP3t2ZXJzaW9uOmQsc2NyaXB0czpjLnBhcnNlU2NyaXB0TGlzdCgpLGZlYXR1cmVzOmMucGFyc2VGZWF0dXJlTGlzdCgpLGxvb2t1cHM6Yy5wYXJzZUxvb2t1cExpc3QobGYpfTp7dmVyc2lvbjpkLHNjcmlwdHM6Yy5wYXJzZVNjcmlwdExpc3QoKSxmZWF0dXJlczpjLnBhcnNlRmVhdHVyZUxpc3QoKSxsb29rdXBzOmMucGFyc2VMb29rdXBMaXN0KGxmKSx2YXJpYXRpb25zOmMucGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3QoKX19ZnVuY3Rpb24gamIoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcIkdTVUJcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwic2NyaXB0c1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5TY3JpcHRMaXN0KGEuc2NyaXB0cyl9LHtuYW1lOlwiZmVhdHVyZXNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuRmVhdHVyZUxpc3QoYS5mZWF0dXJlcyl9LHtuYW1lOlwibG9va3Vwc1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Mb29rdXBMaXN0KGEubG9va3VwcyxuZil9XSl9ZnVuY3Rpb24ga2IoYSxiKXt2YXIgYz1uZXcgTGUuUGFyc2VyKGEsYiksZD1jLnBhcnNlVUxvbmcoKTt4ZS5hcmd1bWVudCgxPT09ZCxcIlVuc3VwcG9ydGVkIE1FVEEgdGFibGUgdmVyc2lvbi5cIiksYy5wYXJzZVVMb25nKCksYy5wYXJzZVVMb25nKCk7Zm9yKHZhciBlPWMucGFyc2VVTG9uZygpLGY9e30sZz0wO2c8ZTtnKyspe3ZhciBoPWMucGFyc2VUYWcoKSxpPWMucGFyc2VVTG9uZygpLGo9Yy5wYXJzZVVMb25nKCksaz1BZS5VVEY4KGEsYitpLGopO2ZbaF09a31yZXR1cm4gZn1mdW5jdGlvbiBsYihhKXt2YXIgYj1PYmplY3Qua2V5cyhhKS5sZW5ndGgsYz1cIlwiLGQ9MTYrMTIqYixlPW5ldyBJZS5UYWJsZShcIm1ldGFcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MX0se25hbWU6XCJmbGFnc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwib2Zmc2V0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6ZH0se25hbWU6XCJudW1UYWdzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6Yn1dKTtmb3IodmFyIGYgaW4gYSl7dmFyIGc9Yy5sZW5ndGg7Yys9YVtmXSxlLmZpZWxkcy5wdXNoKHtuYW1lOlwidGFnIFwiK2YsdHlwZTpcIlRBR1wiLHZhbHVlOmZ9KSxlLmZpZWxkcy5wdXNoKHtuYW1lOlwib2Zmc2V0IFwiK2YsdHlwZTpcIlVMT05HXCIsdmFsdWU6ZCtnfSksZS5maWVsZHMucHVzaCh7bmFtZTpcImxlbmd0aCBcIitmLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmFbZl0ubGVuZ3RofSl9cmV0dXJuIGUuZmllbGRzLnB1c2goe25hbWU6XCJzdHJpbmdQb29sXCIsdHlwZTpcIkNIQVJBUlJBWVwiLHZhbHVlOmN9KSxlfWZ1bmN0aW9uIG1iKGEpe3JldHVybiBNYXRoLmxvZyhhKS9NYXRoLmxvZygyKXwwfWZ1bmN0aW9uIG5iKGEpe2Zvcig7YS5sZW5ndGglNCE9MDspYS5wdXNoKDApO2Zvcih2YXIgYj0wLGM9MDtjPGEubGVuZ3RoO2MrPTQpYis9KGFbY108PDI0KSsoYVtjKzFdPDwxNikrKGFbYysyXTw8OCkrYVtjKzNdO3JldHVybiBiJT1NYXRoLnBvdygyLDMyKX1mdW5jdGlvbiBvYihhLGIsYyxkKXtyZXR1cm4gbmV3IEllLlJlY29yZChcIlRhYmxlIFJlY29yZFwiLFt7bmFtZTpcInRhZ1wiLHR5cGU6XCJUQUdcIix2YWx1ZTp2b2lkIDAhPT1hP2E6XCJcIn0se25hbWU6XCJjaGVja1N1bVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnZvaWQgMCE9PWI/YjowfSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnZvaWQgMCE9PWM/YzowfSx7bmFtZTpcImxlbmd0aFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnZvaWQgMCE9PWQ/ZDowfV0pfWZ1bmN0aW9uIHBiKGEpe3ZhciBiPW5ldyBJZS5UYWJsZShcInNmbnRcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlRBR1wiLHZhbHVlOlwiT1RUT1wifSx7bmFtZTpcIm51bVRhYmxlc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNlYXJjaFJhbmdlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZW50cnlTZWxlY3RvclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJhbmdlU2hpZnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dKTtiLnRhYmxlcz1hLGIubnVtVGFibGVzPWEubGVuZ3RoO3ZhciBjPU1hdGgucG93KDIsbWIoYi5udW1UYWJsZXMpKTtiLnNlYXJjaFJhbmdlPTE2KmMsYi5lbnRyeVNlbGVjdG9yPW1iKGMpLGIucmFuZ2VTaGlmdD0xNipiLm51bVRhYmxlcy1iLnNlYXJjaFJhbmdlO2Zvcih2YXIgZD1bXSxlPVtdLGY9Yi5zaXplT2YoKStvYigpLnNpemVPZigpKmIubnVtVGFibGVzO2YlNCE9MDspZis9MSxlLnB1c2goe25hbWU6XCJwYWRkaW5nXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSk7Zm9yKHZhciBnPTA7ZzxhLmxlbmd0aDtnKz0xKXt2YXIgaD1hW2ddO3hlLmFyZ3VtZW50KDQ9PT1oLnRhYmxlTmFtZS5sZW5ndGgsXCJUYWJsZSBuYW1lXCIraC50YWJsZU5hbWUrXCIgaXMgaW52YWxpZC5cIik7dmFyIGk9aC5zaXplT2YoKSxqPW9iKGgudGFibGVOYW1lLG5iKGguZW5jb2RlKCkpLGYsaSk7Zm9yKGQucHVzaCh7bmFtZTpqLnRhZytcIiBUYWJsZSBSZWNvcmRcIix0eXBlOlwiUkVDT1JEXCIsdmFsdWU6an0pLGUucHVzaCh7bmFtZTpoLnRhYmxlTmFtZStcIiB0YWJsZVwiLHR5cGU6XCJSRUNPUkRcIix2YWx1ZTpofSksZis9aSx4ZS5hcmd1bWVudCghaXNOYU4oZiksXCJTb21ldGhpbmcgd2VudCB3cm9uZyBjYWxjdWxhdGluZyB0aGUgb2Zmc2V0LlwiKTtmJTQhPTA7KWYrPTEsZS5wdXNoKHtuYW1lOlwicGFkZGluZ1wiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0pfXJldHVybiBkLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS52YWx1ZS50YWc+Yi52YWx1ZS50YWc/MTotMX0pLGIuZmllbGRzPWIuZmllbGRzLmNvbmNhdChkKSxiLmZpZWxkcz1iLmZpZWxkcy5jb25jYXQoZSksYn1mdW5jdGlvbiBxYihhLGIsYyl7Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKz0xKXt2YXIgZT1hLmNoYXJUb0dseXBoSW5kZXgoYltkXSk7aWYoZT4wKXtyZXR1cm4gYS5nbHlwaHMuZ2V0KGUpLmdldE1ldHJpY3MoKX19cmV0dXJuIGN9ZnVuY3Rpb24gcmIoYSl7Zm9yKHZhciBiPTAsYz0wO2M8YS5sZW5ndGg7Yys9MSliKz1hW2NdO3JldHVybiBiL2EubGVuZ3RofWZ1bmN0aW9uIHNiKGEpe2Zvcih2YXIgYixjPVtdLGQ9W10sZT1bXSxmPVtdLGc9W10saD1bXSxpPVtdLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wO288YS5nbHlwaHMubGVuZ3RoO28rPTEpe3ZhciBwPWEuZ2x5cGhzLmdldChvKSxxPTB8cC51bmljb2RlO2lmKGlzTmFOKHAuYWR2YW5jZVdpZHRoKSl0aHJvdyBuZXcgRXJyb3IoXCJHbHlwaCBcIitwLm5hbWUrXCIgKFwiK28rXCIpOiBhZHZhbmNlV2lkdGggaXMgbm90IGEgbnVtYmVyLlwiKTsoYj5xfHx2b2lkIDA9PT1iKSYmcT4wJiYoYj1xKSxqPHEmJihqPXEpO3ZhciByPWpmLmdldFVuaWNvZGVSYW5nZShxKTtpZihyPDMyKWt8PTE8PHI7ZWxzZSBpZihyPDY0KWx8PTE8PHItMzI7ZWxzZSBpZihyPDk2KW18PTE8PHItNjQ7ZWxzZXtpZighKHI8MTIzKSl0aHJvdyBuZXcgRXJyb3IoXCJVbmljb2RlIHJhbmdlcyBiaXRzID4gMTIzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2VcIik7bnw9MTw8ci05Nn1pZihcIi5ub3RkZWZcIiE9PXAubmFtZSl7dmFyIHM9cC5nZXRNZXRyaWNzKCk7Yy5wdXNoKHMueE1pbiksZC5wdXNoKHMueU1pbiksZS5wdXNoKHMueE1heCksZi5wdXNoKHMueU1heCksaC5wdXNoKHMubGVmdFNpZGVCZWFyaW5nKSxpLnB1c2gocy5yaWdodFNpZGVCZWFyaW5nKSxnLnB1c2gocC5hZHZhbmNlV2lkdGgpfX12YXIgdD17eE1pbjpNYXRoLm1pbi5hcHBseShudWxsLGMpLHlNaW46TWF0aC5taW4uYXBwbHkobnVsbCxkKSx4TWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsZSkseU1heDpNYXRoLm1heC5hcHBseShudWxsLGYpLGFkdmFuY2VXaWR0aE1heDpNYXRoLm1heC5hcHBseShudWxsLGcpLGFkdmFuY2VXaWR0aEF2ZzpyYihnKSxtaW5MZWZ0U2lkZUJlYXJpbmc6TWF0aC5taW4uYXBwbHkobnVsbCxoKSxtYXhMZWZ0U2lkZUJlYXJpbmc6TWF0aC5tYXguYXBwbHkobnVsbCxoKSxtaW5SaWdodFNpZGVCZWFyaW5nOk1hdGgubWluLmFwcGx5KG51bGwsaSl9O3QuYXNjZW5kZXI9YS5hc2NlbmRlcix0LmRlc2NlbmRlcj1hLmRlc2NlbmRlcjt2YXIgdT1XZS5tYWtlKHtmbGFnczozLHVuaXRzUGVyRW06YS51bml0c1BlckVtLHhNaW46dC54TWluLHlNaW46dC55TWluLHhNYXg6dC54TWF4LHlNYXg6dC55TWF4LGxvd2VzdFJlY1BQRU06MyxjcmVhdGVkVGltZXN0YW1wOmEuY3JlYXRlZFRpbWVzdGFtcH0pLHY9WGUubWFrZSh7YXNjZW5kZXI6dC5hc2NlbmRlcixkZXNjZW5kZXI6dC5kZXNjZW5kZXIsYWR2YW5jZVdpZHRoTWF4OnQuYWR2YW5jZVdpZHRoTWF4LG1pbkxlZnRTaWRlQmVhcmluZzp0Lm1pbkxlZnRTaWRlQmVhcmluZyxtaW5SaWdodFNpZGVCZWFyaW5nOnQubWluUmlnaHRTaWRlQmVhcmluZyx4TWF4RXh0ZW50OnQubWF4TGVmdFNpZGVCZWFyaW5nKyh0LnhNYXgtdC54TWluKSxudW1iZXJPZkhNZXRyaWNzOmEuZ2x5cGhzLmxlbmd0aH0pLHc9JGUubWFrZShhLmdseXBocy5sZW5ndGgpLHg9amYubWFrZSh7eEF2Z0NoYXJXaWR0aDpNYXRoLnJvdW5kKHQuYWR2YW5jZVdpZHRoQXZnKSx1c1dlaWdodENsYXNzOmEudGFibGVzLm9zMi51c1dlaWdodENsYXNzLHVzV2lkdGhDbGFzczphLnRhYmxlcy5vczIudXNXaWR0aENsYXNzLHVzRmlyc3RDaGFySW5kZXg6Yix1c0xhc3RDaGFySW5kZXg6aix1bFVuaWNvZGVSYW5nZTE6ayx1bFVuaWNvZGVSYW5nZTI6bCx1bFVuaWNvZGVSYW5nZTM6bSx1bFVuaWNvZGVSYW5nZTQ6bixmc1NlbGVjdGlvbjphLnRhYmxlcy5vczIuZnNTZWxlY3Rpb24sc1R5cG9Bc2NlbmRlcjp0LmFzY2VuZGVyLHNUeXBvRGVzY2VuZGVyOnQuZGVzY2VuZGVyLHNUeXBvTGluZUdhcDowLHVzV2luQXNjZW50OnQueU1heCx1c1dpbkRlc2NlbnQ6TWF0aC5hYnModC55TWluKSx1bENvZGVQYWdlUmFuZ2UxOjEsc3hIZWlnaHQ6cWIoYSxcInh5dndcIix7eU1heDpNYXRoLnJvdW5kKHQuYXNjZW5kZXIvMil9KS55TWF4LHNDYXBIZWlnaHQ6cWIoYSxcIkhJS0xFRkpNTlRaQkRQUkFHT1FTVVZXWFlcIix0KS55TWF4LHVzRGVmYXVsdENoYXI6YS5oYXNDaGFyKFwiIFwiKT8zMjowLHVzQnJlYWtDaGFyOmEuaGFzQ2hhcihcIiBcIik/MzI6MH0pLHk9WWUubWFrZShhLmdseXBocyksej1NZS5tYWtlKGEuZ2x5cGhzKSxBPWEuZ2V0RW5nbGlzaE5hbWUoXCJmb250RmFtaWx5XCIpLEI9YS5nZXRFbmdsaXNoTmFtZShcImZvbnRTdWJmYW1pbHlcIiksQz1BK1wiIFwiK0IsRD1hLmdldEVuZ2xpc2hOYW1lKFwicG9zdFNjcmlwdE5hbWVcIik7RHx8KEQ9QS5yZXBsYWNlKC9cXHMvZyxcIlwiKStcIi1cIitCKTt2YXIgRT17fTtmb3IodmFyIEYgaW4gYS5uYW1lcylFW0ZdPWEubmFtZXNbRl07RS51bmlxdWVJRHx8KEUudW5pcXVlSUQ9e2VuOmEuZ2V0RW5nbGlzaE5hbWUoXCJtYW51ZmFjdHVyZXJcIikrXCI6XCIrQ30pLEUucG9zdFNjcmlwdE5hbWV8fChFLnBvc3RTY3JpcHROYW1lPXtlbjpEfSksRS5wcmVmZXJyZWRGYW1pbHl8fChFLnByZWZlcnJlZEZhbWlseT1hLm5hbWVzLmZvbnRGYW1pbHkpLEUucHJlZmVycmVkU3ViZmFtaWx5fHwoRS5wcmVmZXJyZWRTdWJmYW1pbHk9YS5uYW1lcy5mb250U3ViZmFtaWx5KTt2YXIgRz1bXSxIPWdmLm1ha2UoRSxHKSxJPUcubGVuZ3RoPjA/WmUubWFrZShHKTp2b2lkIDAsSj1rZi5tYWtlKCksSz1WZS5tYWtlKGEuZ2x5cGhzLHt2ZXJzaW9uOmEuZ2V0RW5nbGlzaE5hbWUoXCJ2ZXJzaW9uXCIpLGZ1bGxOYW1lOkMsZmFtaWx5TmFtZTpBLHdlaWdodE5hbWU6Qixwb3N0U2NyaXB0TmFtZTpELHVuaXRzUGVyRW06YS51bml0c1BlckVtLGZvbnRCQm94OlswLHQueU1pbix0LmFzY2VuZGVyLHQuYWR2YW5jZVdpZHRoTWF4XX0pLEw9YS5tZXRhcyYmT2JqZWN0LmtleXMoYS5tZXRhcykubGVuZ3RoPjA/cGYubWFrZShhLm1ldGFzKTp2b2lkIDAsTT1bdSx2LHcseCxILHosSixLLHldO0kmJk0ucHVzaChJKSxhLnRhYmxlcy5nc3ViJiZNLnB1c2gob2YubWFrZShhLnRhYmxlcy5nc3ViKSksTCYmTS5wdXNoKEwpO2Zvcih2YXIgTj1wYihNKSxPPU4uZW5jb2RlKCksUD1uYihPKSxRPU4uZmllbGRzLFI9ITEsUz0wO1M8US5sZW5ndGg7Uys9MSlpZihcImhlYWQgdGFibGVcIj09PVFbU10ubmFtZSl7UVtTXS52YWx1ZS5jaGVja1N1bUFkanVzdG1lbnQ9Mjk4MTE0NjU1NC1QLFI9ITA7YnJlYWt9aWYoIVIpdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgaGVhZCB0YWJsZSB3aXRoIGNoZWNrU3VtIHRvIGFkanVzdC5cIik7cmV0dXJuIE59ZnVuY3Rpb24gdGIoYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoLTE7Yzw9ZDspe3ZhciBlPWMrZD4+PjEsZj1hW2VdLnRhZztpZihmPT09YilyZXR1cm4gZTtmPGI/Yz1lKzE6ZD1lLTF9cmV0dXJuLWMtMX1mdW5jdGlvbiB1YihhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGgtMTtjPD1kOyl7dmFyIGU9YytkPj4+MSxmPWFbZV07aWYoZj09PWIpcmV0dXJuIGU7ZjxiP2M9ZSsxOmQ9ZS0xfXJldHVybi1jLTF9ZnVuY3Rpb24gdmIoYSxiKXtmb3IodmFyIGMsZD0wLGU9YS5sZW5ndGgtMTtkPD1lOyl7dmFyIGY9ZCtlPj4+MTtjPWFbZl07dmFyIGc9Yy5zdGFydDtpZihnPT09YilyZXR1cm4gYztnPGI/ZD1mKzE6ZT1mLTF9aWYoZD4wKXJldHVybiBjPWFbZC0xXSxiPmMuZW5kPzA6Y31mdW5jdGlvbiB3YihhLGIpe3RoaXMuZm9udD1hLHRoaXMudGFibGVOYW1lPWJ9ZnVuY3Rpb24geGIoYSl7d2IuY2FsbCh0aGlzLGEsXCJncG9zXCIpfWZ1bmN0aW9uIHliKGEpe3diLmNhbGwodGhpcyxhLFwiZ3N1YlwiKX1mdW5jdGlvbiB6YihhLGIpe3ZhciBjPWEubGVuZ3RoO2lmKGMhPT1iLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGQ9MDtkPGM7ZCsrKWlmKGFbZF0hPT1iW2RdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEFiKGEsYixjKXtmb3IodmFyIGQ9YS5zdWJ0YWJsZXMsZT0wO2U8ZC5sZW5ndGg7ZSsrKXt2YXIgZj1kW2VdO2lmKGYuc3Vic3RGb3JtYXQ9PT1iKXJldHVybiBmfWlmKGMpcmV0dXJuIGQucHVzaChjKSxjfWZ1bmN0aW9uIEJiKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvd31mdW5jdGlvbiBDYihhKXtmb3IodmFyIGI9bmV3IEFycmF5QnVmZmVyKGEubGVuZ3RoKSxjPW5ldyBVaW50OEFycmF5KGIpLGQ9MDtkPGEubGVuZ3RoOysrZCljW2RdPWFbZF07cmV0dXJuIGJ9ZnVuY3Rpb24gRGIoYSl7Zm9yKHZhciBiPW5ldyBlKGEuYnl0ZUxlbmd0aCksYz1uZXcgVWludDhBcnJheShhKSxkPTA7ZDxiLmxlbmd0aDsrK2QpYltkXT1jW2RdO3JldHVybiBifWZ1bmN0aW9uIEViKGEsYil7aWYoIWEpdGhyb3cgYn1mdW5jdGlvbiBGYihhLGIsYyxkLGUpe3ZhciBmO3JldHVybihiJmQpPjA/KGY9YS5wYXJzZUJ5dGUoKSwwPT0oYiZlKSYmKGY9LWYpLGY9YytmKTpmPShiJmUpPjA/YzpjK2EucGFyc2VTaG9ydCgpLGZ9ZnVuY3Rpb24gR2IoYSxiLGMpe3ZhciBkPW5ldyBMZS5QYXJzZXIoYixjKTthLm51bWJlck9mQ29udG91cnM9ZC5wYXJzZVNob3J0KCksYS5feE1pbj1kLnBhcnNlU2hvcnQoKSxhLl95TWluPWQucGFyc2VTaG9ydCgpLGEuX3hNYXg9ZC5wYXJzZVNob3J0KCksYS5feU1heD1kLnBhcnNlU2hvcnQoKTt2YXIgZSxmO2lmKGEubnVtYmVyT2ZDb250b3Vycz4wKXtmb3IodmFyIGc9YS5lbmRQb2ludEluZGljZXM9W10saD0wO2g8YS5udW1iZXJPZkNvbnRvdXJzO2grPTEpZy5wdXNoKGQucGFyc2VVU2hvcnQoKSk7YS5pbnN0cnVjdGlvbkxlbmd0aD1kLnBhcnNlVVNob3J0KCksYS5pbnN0cnVjdGlvbnM9W107Zm9yKHZhciBpPTA7aTxhLmluc3RydWN0aW9uTGVuZ3RoO2krPTEpYS5pbnN0cnVjdGlvbnMucHVzaChkLnBhcnNlQnl0ZSgpKTt2YXIgaj1nW2cubGVuZ3RoLTFdKzE7ZT1bXTtmb3IodmFyIGs9MDtrPGo7ays9MSlpZihmPWQucGFyc2VCeXRlKCksZS5wdXNoKGYpLCg4JmYpPjApZm9yKHZhciBsPWQucGFyc2VCeXRlKCksbT0wO208bDttKz0xKWUucHVzaChmKSxrKz0xO2lmKHhlLmFyZ3VtZW50KGUubGVuZ3RoPT09aixcIkJhZCBmbGFncy5cIiksZy5sZW5ndGg+MCl7dmFyIG4sbz1bXTtpZihqPjApe2Zvcih2YXIgcD0wO3A8ajtwKz0xKWY9ZVtwXSxuPXt9LG4ub25DdXJ2ZT0hISgxJmYpLG4ubGFzdFBvaW50T2ZDb250b3VyPWcuaW5kZXhPZihwKT49MCxvLnB1c2gobik7Zm9yKHZhciBxPTAscj0wO3I8ajtyKz0xKWY9ZVtyXSxuPW9bcl0sbi54PUZiKGQsZixxLDIsMTYpLHE9bi54O2Zvcih2YXIgcz0wLHQ9MDt0PGo7dCs9MSlmPWVbdF0sbj1vW3RdLG4ueT1GYihkLGYscyw0LDMyKSxzPW4ueX1hLnBvaW50cz1vfWVsc2UgYS5wb2ludHM9W119ZWxzZSBpZigwPT09YS5udW1iZXJPZkNvbnRvdXJzKWEucG9pbnRzPVtdO2Vsc2V7YS5pc0NvbXBvc2l0ZT0hMCxhLnBvaW50cz1bXSxhLmNvbXBvbmVudHM9W107Zm9yKHZhciB1PSEwO3U7KXtlPWQucGFyc2VVU2hvcnQoKTt2YXIgdj17Z2x5cGhJbmRleDpkLnBhcnNlVVNob3J0KCkseFNjYWxlOjEsc2NhbGUwMTowLHNjYWxlMTA6MCx5U2NhbGU6MSxkeDowLGR5OjB9OygxJmUpPjA/KDImZSk+MD8odi5keD1kLnBhcnNlU2hvcnQoKSx2LmR5PWQucGFyc2VTaG9ydCgpKTp2Lm1hdGNoZWRQb2ludHM9W2QucGFyc2VVU2hvcnQoKSxkLnBhcnNlVVNob3J0KCldOigyJmUpPjA/KHYuZHg9ZC5wYXJzZUNoYXIoKSx2LmR5PWQucGFyc2VDaGFyKCkpOnYubWF0Y2hlZFBvaW50cz1bZC5wYXJzZUJ5dGUoKSxkLnBhcnNlQnl0ZSgpXSwoOCZlKT4wP3YueFNjYWxlPXYueVNjYWxlPWQucGFyc2VGMkRvdDE0KCk6KDY0JmUpPjA/KHYueFNjYWxlPWQucGFyc2VGMkRvdDE0KCksdi55U2NhbGU9ZC5wYXJzZUYyRG90MTQoKSk6KDEyOCZlKT4wJiYodi54U2NhbGU9ZC5wYXJzZUYyRG90MTQoKSx2LnNjYWxlMDE9ZC5wYXJzZUYyRG90MTQoKSx2LnNjYWxlMTA9ZC5wYXJzZUYyRG90MTQoKSx2LnlTY2FsZT1kLnBhcnNlRjJEb3QxNCgpKSxhLmNvbXBvbmVudHMucHVzaCh2KSx1PSEhKDMyJmUpfWlmKDI1NiZlKXthLmluc3RydWN0aW9uTGVuZ3RoPWQucGFyc2VVU2hvcnQoKSxhLmluc3RydWN0aW9ucz1bXTtmb3IodmFyIHc9MDt3PGEuaW5zdHJ1Y3Rpb25MZW5ndGg7dys9MSlhLmluc3RydWN0aW9ucy5wdXNoKGQucGFyc2VCeXRlKCkpfX19ZnVuY3Rpb24gSGIoYSxiKXtmb3IodmFyIGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXSxmPXt4OmIueFNjYWxlKmUueCtiLnNjYWxlMDEqZS55K2IuZHgseTpiLnNjYWxlMTAqZS54K2IueVNjYWxlKmUueStiLmR5LG9uQ3VydmU6ZS5vbkN1cnZlLGxhc3RQb2ludE9mQ29udG91cjplLmxhc3RQb2ludE9mQ29udG91cn07Yy5wdXNoKGYpfXJldHVybiBjfWZ1bmN0aW9uIEliKGEpe2Zvcih2YXIgYj1bXSxjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF07Yy5wdXNoKGUpLGUubGFzdFBvaW50T2ZDb250b3VyJiYoYi5wdXNoKGMpLGM9W10pfXJldHVybiB4ZS5hcmd1bWVudCgwPT09Yy5sZW5ndGgsXCJUaGVyZSBhcmUgc3RpbGwgcG9pbnRzIGxlZnQgaW4gdGhlIGN1cnJlbnQgY29udG91ci5cIiksYn1mdW5jdGlvbiBKYihhKXt2YXIgYj1uZXcgcjtpZighYSlyZXR1cm4gYjtmb3IodmFyIGM9SWIoYSksZD0wO2Q8Yy5sZW5ndGg7KytkKXt2YXIgZT1jW2RdLGY9bnVsbCxnPWVbZS5sZW5ndGgtMV0saD1lWzBdO2lmKGcub25DdXJ2ZSliLm1vdmVUbyhnLngsZy55KTtlbHNlIGlmKGgub25DdXJ2ZSliLm1vdmVUbyhoLngsaC55KTtlbHNle3ZhciBpPXt4Oi41KihnLngraC54KSx5Oi41KihnLnkraC55KX07Yi5tb3ZlVG8oaS54LGkueSl9Zm9yKHZhciBqPTA7ajxlLmxlbmd0aDsrK2opaWYoZj1nLGc9aCxoPWVbKGorMSklZS5sZW5ndGhdLGcub25DdXJ2ZSliLmxpbmVUbyhnLngsZy55KTtlbHNle3ZhciBrPWg7Zi5vbkN1cnZlfHx7eDouNSooZy54K2YueCkseTouNSooZy55K2YueSl9LGgub25DdXJ2ZXx8KGs9e3g6LjUqKGcueCtoLngpLHk6LjUqKGcueStoLnkpfSksYi5xdWFkcmF0aWNDdXJ2ZVRvKGcueCxnLnksay54LGsueSl9Yi5jbG9zZVBhdGgoKX1yZXR1cm4gYn1mdW5jdGlvbiBLYihhLGIpe2lmKGIuaXNDb21wb3NpdGUpZm9yKHZhciBjPTA7YzxiLmNvbXBvbmVudHMubGVuZ3RoO2MrPTEpe3ZhciBkPWIuY29tcG9uZW50c1tjXSxlPWEuZ2V0KGQuZ2x5cGhJbmRleCk7aWYoZS5nZXRQYXRoKCksZS5wb2ludHMpe3ZhciBmPXZvaWQgMDtpZih2b2lkIDA9PT1kLm1hdGNoZWRQb2ludHMpZj1IYihlLnBvaW50cyxkKTtlbHNle1xuaWYoZC5tYXRjaGVkUG9pbnRzWzBdPmIucG9pbnRzLmxlbmd0aC0xfHxkLm1hdGNoZWRQb2ludHNbMV0+ZS5wb2ludHMubGVuZ3RoLTEpdGhyb3cgRXJyb3IoXCJNYXRjaGVkIHBvaW50cyBvdXQgb2YgcmFuZ2UgaW4gXCIrYi5uYW1lKTt2YXIgZz1iLnBvaW50c1tkLm1hdGNoZWRQb2ludHNbMF1dLGg9ZS5wb2ludHNbZC5tYXRjaGVkUG9pbnRzWzFdXSxpPXt4U2NhbGU6ZC54U2NhbGUsc2NhbGUwMTpkLnNjYWxlMDEsc2NhbGUxMDpkLnNjYWxlMTAseVNjYWxlOmQueVNjYWxlLGR4OjAsZHk6MH07aD1IYihbaF0saSlbMF0saS5keD1nLngtaC54LGkuZHk9Zy55LWgueSxmPUhiKGUucG9pbnRzLGkpfWIucG9pbnRzPWIucG9pbnRzLmNvbmNhdChmKX19cmV0dXJuIEpiKGIucG9pbnRzKX1mdW5jdGlvbiBMYihhLGIsYyxkKXtmb3IodmFyIGU9bmV3IFNlLkdseXBoU2V0KGQpLGY9MDtmPGMubGVuZ3RoLTE7Zis9MSl7dmFyIGc9Y1tmXTtnIT09Y1tmKzFdP2UucHVzaChmLFNlLnR0ZkdseXBoTG9hZGVyKGQsZixHYixhLGIrZyxLYikpOmUucHVzaChmLFNlLmdseXBoTG9hZGVyKGQsZikpfXJldHVybiBlfWZ1bmN0aW9uIE1iKGEpe3RoaXMuZm9udD1hLHRoaXMuZ2V0Q29tbWFuZHM9ZnVuY3Rpb24oYSl7cmV0dXJuIHZmLmdldFBhdGgoYSkuY29tbWFuZHN9LHRoaXMuX2ZwZ21TdGF0ZT10aGlzLl9wcmVwU3RhdGU9dm9pZCAwLHRoaXMuX2Vycm9yU3RhdGU9MH1mdW5jdGlvbiBOYihhKXtyZXR1cm4gYX1mdW5jdGlvbiBPYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKk1hdGgucm91bmQoTWF0aC5hYnMoYSkpfWZ1bmN0aW9uIFBiKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqTWF0aC5yb3VuZChNYXRoLmFicygyKmEpKS8yfWZ1bmN0aW9uIFFiKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqKE1hdGgucm91bmQoTWF0aC5hYnMoYSkrLjUpLS41KX1mdW5jdGlvbiBSYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKk1hdGguY2VpbChNYXRoLmFicyhhKSl9ZnVuY3Rpb24gU2IoYSl7cmV0dXJuIE1hdGguc2lnbihhKSpNYXRoLmZsb29yKE1hdGguYWJzKGEpKX1mdW5jdGlvbiBUYihhLGIpe3RoaXMueD1hLHRoaXMueT1iLHRoaXMuYXhpcz12b2lkIDAsdGhpcy5zbG9wZT1iL2EsdGhpcy5ub3JtYWxTbG9wZT0tYS9iLE9iamVjdC5mcmVlemUodGhpcyl9ZnVuY3Rpb24gVWIoYSxiKXt2YXIgYz1NYXRoLnNxcnQoYSphK2IqYik7cmV0dXJuIGEvPWMsYi89YywxPT09YSYmMD09PWI/eGY6MD09PWEmJjE9PT1iP3lmOm5ldyBUYihhLGIpfWZ1bmN0aW9uIFZiKGEsYixjLGQpe3RoaXMueD10aGlzLnhvPU1hdGgucm91bmQoNjQqYSkvNjQsdGhpcy55PXRoaXMueW89TWF0aC5yb3VuZCg2NCpiKS82NCx0aGlzLmxhc3RQb2ludE9mQ29udG91cj1jLHRoaXMub25DdXJ2ZT1kLHRoaXMucHJldlBvaW50T25Db250b3VyPXZvaWQgMCx0aGlzLm5leHRQb2ludE9uQ29udG91cj12b2lkIDAsdGhpcy54VG91Y2hlZD0hMSx0aGlzLnlUb3VjaGVkPSExLE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzKX1mdW5jdGlvbiBXYihhLGIpe3N3aXRjaCh0aGlzLmVudj1hLHRoaXMuc3RhY2s9W10sdGhpcy5wcm9nPWIsYSl7Y2FzZVwiZ2x5ZlwiOnRoaXMuenAwPXRoaXMuenAxPXRoaXMuenAyPTEsdGhpcy5ycDA9dGhpcy5ycDE9dGhpcy5ycDI9MDtjYXNlXCJwcmVwXCI6dGhpcy5mdj10aGlzLnB2PXRoaXMuZHB2PXhmLHRoaXMucm91bmQ9T2J9fWZ1bmN0aW9uIFhiKGEpe2Zvcih2YXIgYj1hLnRab25lPW5ldyBBcnJheShhLmdab25lLmxlbmd0aCksYz0wO2M8Yi5sZW5ndGg7YysrKWJbY109bmV3IFZiKDAsMCl9ZnVuY3Rpb24gWWIoYSxiKXt2YXIgYyxkPWEucHJvZyxlPWEuaXAsZj0xO2Rve2lmKDg4PT09KGM9ZFsrK2VdKSlmKys7ZWxzZSBpZig4OT09PWMpZi0tO2Vsc2UgaWYoNjQ9PT1jKWUrPWRbZSsxXSsxO2Vsc2UgaWYoNjU9PT1jKWUrPTIqZFtlKzFdKzE7ZWxzZSBpZihjPj0xNzYmJmM8PTE4MyllKz1jLTE3NisxO2Vsc2UgaWYoYz49MTg0JiZjPD0xOTEpZSs9MiooYy0xODQrMSk7ZWxzZSBpZihiJiYxPT09ZiYmMjc9PT1jKWJyZWFrfXdoaWxlKGY+MCk7YS5pcD1lfWZ1bmN0aW9uIFpiKGIsYyl7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU1ZUQ0FbXCIrYi5heGlzK1wiXVwiKSxjLmZ2PWMucHY9Yy5kcHY9Yn1mdW5jdGlvbiAkYihiLGMpe2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNQVlRDQVtcIitiLmF4aXMrXCJdXCIpLGMucHY9Yy5kcHY9Yn1mdW5jdGlvbiBfYihiLGMpe2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNGVlRDQVtcIitiLmF4aXMrXCJdXCIpLGMuZnY9Yn1mdW5jdGlvbiBhYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejJbZV0saD1jLnoxW2ZdO2EuREVCVUcmJmNvbnNvbGUubG9nKFwiU1BWVExbXCIrYitcIl1cIixlLGYpO3ZhciBpLGo7Yj8oaT1nLnktaC55LGo9aC54LWcueCk6KGk9aC54LWcueCxqPWgueS1nLnkpLGMucHY9Yy5kcHY9VWIoaSxqKX1mdW5jdGlvbiBiYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejJbZV0saD1jLnoxW2ZdO2EuREVCVUcmJmNvbnNvbGUubG9nKFwiU0ZWVExbXCIrYitcIl1cIixlLGYpO3ZhciBpLGo7Yj8oaT1nLnktaC55LGo9aC54LWcueCk6KGk9aC54LWcueCxqPWgueS1nLnkpLGMuZnY9VWIoaSxqKX1mdW5jdGlvbiBjYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1BWRlNbXVwiLGQsZSksYi5wdj1iLmRwdj1VYihlLGQpfWZ1bmN0aW9uIGRjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUFZGU1tdXCIsZCxlKSxiLmZ2PVViKGUsZCl9ZnVuY3Rpb24gZWMoYil7dmFyIGM9Yi5zdGFjayxkPWIucHY7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR1BWW11cIiksYy5wdXNoKDE2Mzg0KmQueCksYy5wdXNoKDE2Mzg0KmQueSl9ZnVuY3Rpb24gZmMoYil7dmFyIGM9Yi5zdGFjayxkPWIuZnY7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR0ZWW11cIiksYy5wdXNoKDE2Mzg0KmQueCksYy5wdXNoKDE2Mzg0KmQueSl9ZnVuY3Rpb24gZ2MoYil7Yi5mdj1iLnB2LGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNGVlRQVltdXCIpfWZ1bmN0aW9uIGhjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKSxmPWMucG9wKCksZz1jLnBvcCgpLGg9Yy5wb3AoKSxpPWIuejAsaj1iLnoxLGs9aVtkXSxsPWlbZV0sbT1qW2ZdLG49altnXSxvPWIuejJbaF07YS5ERUJVRyYmY29uc29sZS5sb2coXCJJU0VDVFtdLCBcIixkLGUsZixnLGgpO3ZhciBwPWsueCxxPWsueSxyPWwueCxzPWwueSx0PW0ueCx1PW0ueSx2PW4ueCx3PW4ueSx4PShwLXIpKih1LXcpLShxLXMpKih0LXYpLHk9cCpzLXEqcix6PXQqdy11KnY7by54PSh5Kih0LXYpLXoqKHAtcikpL3gsby55PSh5Kih1LXcpLXoqKHEtcykpL3h9ZnVuY3Rpb24gaWMoYil7Yi5ycDA9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUlAwW11cIixiLnJwMCl9ZnVuY3Rpb24gamMoYil7Yi5ycDE9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUlAxW11cIixiLnJwMSl9ZnVuY3Rpb24ga2MoYil7Yi5ycDI9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUlAyW11cIixiLnJwMil9ZnVuY3Rpb24gbGMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQMFtdXCIsYyksYi56cDA9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56MD1iLnRab25lO2JyZWFrO2Nhc2UgMTpiLnowPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gbWMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQMVtdXCIsYyksYi56cDE9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56MT1iLnRab25lO2JyZWFrO2Nhc2UgMTpiLnoxPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gbmMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQMltdXCIsYyksYi56cDI9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56Mj1iLnRab25lO2JyZWFrO2Nhc2UgMTpiLnoyPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gb2MoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQU1tdXCIsYyksYi56cDA9Yi56cDE9Yi56cDI9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56MD1iLnoxPWIuejI9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56MD1iLnoxPWIuejI9Yi5nWm9uZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgem9uZSBwb2ludGVyXCIpfX1mdW5jdGlvbiBwYyhiKXtiLmxvb3A9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTTE9PUFtdXCIsYi5sb29wKX1mdW5jdGlvbiBxYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSVEdbXVwiKSxiLnJvdW5kPU9ifWZ1bmN0aW9uIHJjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJUSEdbXVwiKSxiLnJvdW5kPVFifWZ1bmN0aW9uIHNjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU01EW11cIixjKSxiLm1pbkRpcz1jLzY0fWZ1bmN0aW9uIHRjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVMU0VbXVwiKSxZYihiLCExKX1mdW5jdGlvbiB1YyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkpNUFJbXVwiLGMpLGIuaXArPWMtMX1mdW5jdGlvbiB2YyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNDVlRDSVtdXCIsYyksYi5jdkN1dEluPWMvNjR9ZnVuY3Rpb24gd2MoYil7dmFyIGM9Yi5zdGFjazthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJEVVBbXVwiKSxjLnB1c2goY1tjLmxlbmd0aC0xXSl9ZnVuY3Rpb24geGMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUE9QW11cIiksYi5zdGFjay5wb3AoKX1mdW5jdGlvbiB5YyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJDTEVBUltdXCIpLGIuc3RhY2subGVuZ3RoPTB9ZnVuY3Rpb24gemMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNXQVBbXVwiKSxjLnB1c2goZCksYy5wdXNoKGUpfWZ1bmN0aW9uIEFjKGIpe3ZhciBjPWIuc3RhY2s7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiREVQVEhbXVwiKSxjLnB1c2goYy5sZW5ndGgpfWZ1bmN0aW9uIEJjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJMT09QQ0FMTFtdXCIsZCxlKTt2YXIgZj1iLmlwLGc9Yi5wcm9nO2IucHJvZz1iLmZ1bmNzW2RdO2Zvcih2YXIgaD0wO2g8ZTtoKyspc2YoYiksYS5ERUJVRyYmY29uc29sZS5sb2coKytiLnN0ZXAsaCsxPGU/XCJuZXh0IGxvb3BjYWxsXCI6XCJkb25lIGxvb3BjYWxsXCIsaCk7Yi5pcD1mLGIucHJvZz1nfWZ1bmN0aW9uIENjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQ0FMTFtdXCIsYyk7dmFyIGQ9Yi5pcCxlPWIucHJvZztiLnByb2c9Yi5mdW5jc1tjXSxzZihiKSxiLmlwPWQsYi5wcm9nPWUsYS5ERUJVRyYmY29uc29sZS5sb2coKytiLnN0ZXAsXCJyZXR1cm5pbmcgZnJvbVwiLGMpfWZ1bmN0aW9uIERjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkNJTkRFWFtdXCIsZCksYy5wdXNoKGNbYy5sZW5ndGgtZF0pfWZ1bmN0aW9uIEVjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk1JTkRFWFtdXCIsZCksYy5wdXNoKGMuc3BsaWNlKGMubGVuZ3RoLWQsMSlbMF0pfWZ1bmN0aW9uIEZjKGIpe2lmKFwiZnBnbVwiIT09Yi5lbnYpdGhyb3cgbmV3IEVycm9yKFwiRkRFRiBub3QgYWxsb3dlZCBoZXJlXCIpO3ZhciBjPWIuc3RhY2ssZD1iLnByb2csZT1iLmlwLGY9Yy5wb3AoKSxnPWU7Zm9yKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkZERUZbXVwiLGYpOzQ1IT09ZFsrK2VdOyk7Yi5pcD1lLGIuZnVuY3NbZl09ZC5zbGljZShnKzEsZSl9ZnVuY3Rpb24gR2MoYixjKXt2YXIgZD1jLnN0YWNrLnBvcCgpLGU9Yy56MFtkXSxmPWMuZnYsZz1jLnB2O2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIk1EQVBbXCIrYitcIl1cIixkKTt2YXIgaD1nLmRpc3RhbmNlKGUsemYpO2ImJihoPWMucm91bmQoaCkpLGYuc2V0UmVsYXRpdmUoZSx6ZixoLGcpLGYudG91Y2goZSksYy5ycDA9Yy5ycDE9ZH1mdW5jdGlvbiBIYyhiLGMpe3ZhciBkLGUsZixnPWMuejIsaD1nLmxlbmd0aC0yO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIklVUFtcIitiLmF4aXMrXCJdXCIpO2Zvcih2YXIgaT0wO2k8aDtpKyspZD1nW2ldLGIudG91Y2hlZChkKXx8KGU9ZC5wcmV2VG91Y2hlZChiKSkhPT1kJiYoZj1kLm5leHRUb3VjaGVkKGIpLGU9PT1mJiZiLnNldFJlbGF0aXZlKGQsZCxiLmRpc3RhbmNlKGUsZSwhMSwhMCksYiwhMCksYi5pbnRlcnBvbGF0ZShkLGUsZixiKSl9ZnVuY3Rpb24gSWMoYixjKXtmb3IodmFyIGQ9Yy5zdGFjayxlPWI/Yy5ycDE6Yy5ycDIsZj0oYj9jLnowOmMuejEpW2VdLGc9Yy5mdixoPWMucHYsaT1jLmxvb3Asaj1jLnoyO2ktLTspe3ZhciBrPWQucG9wKCksbD1qW2tdLG09aC5kaXN0YW5jZShmLGYsITEsITApO2cuc2V0UmVsYXRpdmUobCxsLG0saCksZy50b3VjaChsKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsKGMubG9vcD4xP1wibG9vcCBcIisoYy5sb29wLWkpK1wiOiBcIjpcIlwiKStcIlNIUFtcIisoYj9cInJwMVwiOlwicnAyXCIpK1wiXVwiLGspfWMubG9vcD0xfWZ1bmN0aW9uIEpjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWI/Yy5ycDE6Yy5ycDIsZj0oYj9jLnowOmMuejEpW2VdLGc9Yy5mdixoPWMucHYsaT1kLnBvcCgpLGo9Yy56MltjLmNvbnRvdXJzW2ldXSxrPWo7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU0hDW1wiK2IrXCJdXCIsaSk7dmFyIGw9aC5kaXN0YW5jZShmLGYsITEsITApO2Rve2shPT1mJiZnLnNldFJlbGF0aXZlKGssayxsLGgpLGs9ay5uZXh0UG9pbnRPbkNvbnRvdXJ9d2hpbGUoayE9PWopfWZ1bmN0aW9uIEtjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWI/Yy5ycDE6Yy5ycDIsZj0oYj9jLnowOmMuejEpW2VdLGc9Yy5mdixoPWMucHYsaT1kLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNIWltcIitiK1wiXVwiLGkpO3ZhciBqO3N3aXRjaChpKXtjYXNlIDA6aj1jLnRab25lO2JyZWFrO2Nhc2UgMTpqPWMuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmVcIil9Zm9yKHZhciBrLGw9aC5kaXN0YW5jZShmLGYsITEsITApLG09ai5sZW5ndGgtMixuPTA7bjxtO24rKylrPWpbbl0sZy5zZXRSZWxhdGl2ZShrLGssbCxoKX1mdW5jdGlvbiBMYyhiKXtmb3IodmFyIGM9Yi5zdGFjayxkPWIubG9vcCxlPWIuZnYsZj1jLnBvcCgpLzY0LGc9Yi56MjtkLS07KXt2YXIgaD1jLnBvcCgpLGk9Z1toXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsKGIubG9vcD4xP1wibG9vcCBcIisoYi5sb29wLWQpK1wiOiBcIjpcIlwiKStcIlNIUElYW11cIixoLGYpLGUuc2V0UmVsYXRpdmUoaSxpLGYpLGUudG91Y2goaSl9Yi5sb29wPTF9ZnVuY3Rpb24gTWMoYil7Zm9yKHZhciBjPWIuc3RhY2ssZD1iLnJwMSxlPWIucnAyLGY9Yi5sb29wLGc9Yi56MFtkXSxoPWIuejFbZV0saT1iLmZ2LGo9Yi5kcHYsaz1iLnoyO2YtLTspe3ZhciBsPWMucG9wKCksbT1rW2xdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCwoYi5sb29wPjE/XCJsb29wIFwiKyhiLmxvb3AtZikrXCI6IFwiOlwiXCIpK1wiSVBbXVwiLGwsZCxcIjwtPlwiLGUpLGkuaW50ZXJwb2xhdGUobSxnLGgsaiksaS50b3VjaChtKX1iLmxvb3A9MX1mdW5jdGlvbiBOYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLzY0LGY9ZC5wb3AoKSxnPWMuejFbZl0saD1jLnowW2MucnAwXSxpPWMuZnYsaj1jLnB2O2kuc2V0UmVsYXRpdmUoZyxoLGUsaiksaS50b3VjaChnKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNU0lSUFtcIitiK1wiXVwiLGUsZiksYy5ycDE9Yy5ycDAsYy5ycDI9ZixiJiYoYy5ycDA9Zil9ZnVuY3Rpb24gT2MoYil7Zm9yKHZhciBjPWIuc3RhY2ssZD1iLnJwMCxlPWIuejBbZF0sZj1iLmxvb3AsZz1iLmZ2LGg9Yi5wdixpPWIuejE7Zi0tOyl7dmFyIGo9Yy5wb3AoKSxrPWlbal07YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLChiLmxvb3A+MT9cImxvb3AgXCIrKGIubG9vcC1mKStcIjogXCI6XCJcIikrXCJBTElHTlJQW11cIixqKSxnLnNldFJlbGF0aXZlKGssZSwwLGgpLGcudG91Y2goayl9Yi5sb29wPTF9ZnVuY3Rpb24gUGMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlRER1tdXCIpLGIucm91bmQ9UGJ9ZnVuY3Rpb24gUWMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnowW2ZdLGg9Yy5mdixpPWMucHYsaj1jLmN2dFtlXTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNSUFQW1wiK2IrXCJdXCIsZSxcIihcIixqLFwiKVwiLGYpO3ZhciBrPWkuZGlzdGFuY2UoZyx6Zik7YiYmKE1hdGguYWJzKGstaik8Yy5jdkN1dEluJiYoaz1qKSxrPWMucm91bmQoaykpLGguc2V0UmVsYXRpdmUoZyx6ZixrLGkpLDA9PT1jLnpwMCYmKGcueG89Zy54LGcueW89Zy55KSxoLnRvdWNoKGcpLGMucnAwPWMucnAxPWZ9ZnVuY3Rpb24gUmMoYil7dmFyIGM9Yi5wcm9nLGQ9Yi5pcCxlPWIuc3RhY2ssZj1jWysrZF07YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTlBVU0hCW11cIixmKTtmb3IodmFyIGc9MDtnPGY7ZysrKWUucHVzaChjWysrZF0pO2IuaXA9ZH1mdW5jdGlvbiBTYyhiKXt2YXIgYz1iLmlwLGQ9Yi5wcm9nLGU9Yi5zdGFjayxmPWRbKytjXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJOUFVTSFdbXVwiLGYpO2Zvcih2YXIgZz0wO2c8ZjtnKyspe3ZhciBoPWRbKytjXTw8OHxkWysrY107MzI3NjgmaCYmKGg9LSgxKyg2NTUzNV5oKSkpLGUucHVzaChoKX1iLmlwPWN9ZnVuY3Rpb24gVGMoYil7dmFyIGM9Yi5zdGFjayxkPWIuc3RvcmU7ZHx8KGQ9Yi5zdG9yZT1bXSk7dmFyIGU9Yy5wb3AoKSxmPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiV1NcIixlLGYpLGRbZl09ZX1mdW5jdGlvbiBVYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yi5zdG9yZSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlNcIixlKTt2YXIgZj1kJiZkW2VdfHwwO2MucHVzaChmKX1mdW5jdGlvbiBWYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiV0NWVFBcIixkLGUpLGIuY3Z0W2VdPWQvNjR9ZnVuY3Rpb24gV2MoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUkNWVFwiLGQpLGMucHVzaCg2NCpiLmN2dFtkXSl9ZnVuY3Rpb24gWGMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWMuejJbZV07YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiR0NbXCIrYitcIl1cIixlKSxkLnB1c2goNjQqYy5kcHYuZGlzdGFuY2UoZix6ZixiLCExKSl9ZnVuY3Rpb24gWWMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnoxW2VdLGg9Yy56MFtmXSxpPWMuZHB2LmRpc3RhbmNlKGgsZyxiLGIpO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIk1EW1wiK2IrXCJdXCIsZSxmLFwiLT5cIixpKSxjLnN0YWNrLnB1c2goTWF0aC5yb3VuZCg2NCppKSl9ZnVuY3Rpb24gWmMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTVBQRU1bXVwiKSxiLnN0YWNrLnB1c2goYi5wcGVtKX1mdW5jdGlvbiAkYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJGTElQT05bXVwiKSxiLmF1dG9GbGlwPSEwfWZ1bmN0aW9uIF9jKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJMVFtdXCIsZCxlKSxjLnB1c2goZTxkPzE6MCl9ZnVuY3Rpb24gYWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkxURVFbXVwiLGQsZSksYy5wdXNoKGU8PWQ/MTowKX1mdW5jdGlvbiBiZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR1RbXVwiLGQsZSksYy5wdXNoKGU+ZD8xOjApfWZ1bmN0aW9uIGNkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJHVEVRW11cIixkLGUpLGMucHVzaChlPj1kPzE6MCl9ZnVuY3Rpb24gZGQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVRW11cIixkLGUpLGMucHVzaChkPT09ZT8xOjApfWZ1bmN0aW9uIGVkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJORVFbXVwiLGQsZSksYy5wdXNoKGQhPT1lPzE6MCl9ZnVuY3Rpb24gZmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiT0REW11cIixkKSxjLnB1c2goTWF0aC50cnVuYyhkKSUyPzE6MCl9ZnVuY3Rpb24gZ2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRVZFTltdXCIsZCksYy5wdXNoKE1hdGgudHJ1bmMoZCklMj8wOjEpfWZ1bmN0aW9uIGhkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiSUZbXVwiLGMpLGN8fChZYihiLCEwKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFSUZbXVwiKSl9ZnVuY3Rpb24gaWQoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRUlGW11cIil9ZnVuY3Rpb24gamQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkFORFtdXCIsZCxlKSxjLnB1c2goZCYmZT8xOjApfWZ1bmN0aW9uIGtkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJPUltdXCIsZCxlKSxjLnB1c2goZHx8ZT8xOjApfWZ1bmN0aW9uIGxkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5PVFtdXCIsZCksYy5wdXNoKGQ/MDoxKX1mdW5jdGlvbiBtZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9Yy5mdixnPWMucHYsaD1jLnBwZW0saT1jLmRlbHRhQmFzZSsxNiooYi0xKSxqPWMuZGVsdGFTaGlmdCxrPWMuejA7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFQW1wiK2IrXCJdXCIsZSxkKTtmb3IodmFyIGw9MDtsPGU7bCsrKXt2YXIgbT1kLnBvcCgpLG49ZC5wb3AoKTtpZihpKygoMjQwJm4pPj40KT09PWgpe3ZhciBvPSgxNSZuKS04O28+PTAmJm8rKyxhLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJERUxUQVBGSVhcIixtLFwiYnlcIixvKmopO3ZhciBwPWtbbV07Zi5zZXRSZWxhdGl2ZShwLHAsbypqLGcpfX19ZnVuY3Rpb24gbmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0RCW11cIixkKSxiLmRlbHRhQmFzZT1kfWZ1bmN0aW9uIG9kKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNEU1tdXCIsZCksYi5kZWx0YVNoaWZ0PU1hdGgucG93KC41LGQpfWZ1bmN0aW9uIHBkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJBRERbXVwiLGQsZSksYy5wdXNoKGUrZCl9ZnVuY3Rpb24gcWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNVQltdXCIsZCxlKSxjLnB1c2goZS1kKX1mdW5jdGlvbiByZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRElWW11cIixkLGUpLGMucHVzaCg2NCplL2QpfWZ1bmN0aW9uIHNkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNVUxbXVwiLGQsZSksYy5wdXNoKGUqZC82NCl9ZnVuY3Rpb24gdGQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQUJTW11cIixkKSxjLnB1c2goTWF0aC5hYnMoZCkpfWZ1bmN0aW9uIHVkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5FR1tdXCIsZCksYy5wdXNoKC1kKX1mdW5jdGlvbiB2ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJGTE9PUltdXCIsZCksYy5wdXNoKDY0Kk1hdGguZmxvb3IoZC82NCkpfWZ1bmN0aW9uIHdkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkNFSUxJTkdbXVwiLGQpLGMucHVzaCg2NCpNYXRoLmNlaWwoZC82NCkpfWZ1bmN0aW9uIHhkKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiUk9VTkRbXVwiKSxkLnB1c2goNjQqYy5yb3VuZChlLzY0KSl9ZnVuY3Rpb24geWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIldDVlRGW11cIixkLGUpLGIuY3Z0W2VdPWQqYi5wcGVtL2IuZm9udC51bml0c1BlckVtfWZ1bmN0aW9uIHpkKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1jLnBwZW0sZz1jLmRlbHRhQmFzZSsxNiooYi0xKSxoPWMuZGVsdGFTaGlmdDthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJERUxUQUNbXCIrYitcIl1cIixlLGQpO2Zvcih2YXIgaT0wO2k8ZTtpKyspe3ZhciBqPWQucG9wKCksaz1kLnBvcCgpO2lmKGcrKCgyNDAmayk+PjQpPT09Zil7dmFyIGw9KDE1JmspLTg7bD49MCYmbCsrO3ZhciBtPWwqaDthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJERUxUQUNGSVhcIixqLFwiYnlcIixtKSxjLmN2dFtqXSs9bX19fWZ1bmN0aW9uIEFkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JPVU5EW11cIixjKSxiLnJvdW5kPXdmO3ZhciBkO3N3aXRjaCgxOTImYyl7Y2FzZSAwOmQ9LjU7YnJlYWs7Y2FzZSA2NDpkPTE7YnJlYWs7Y2FzZSAxMjg6ZD0yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBTUk9VTkQgdmFsdWVcIil9c3dpdGNoKGIuc3JQZXJpb2Q9ZCw0OCZjKXtjYXNlIDA6Yi5zclBoYXNlPTA7YnJlYWs7Y2FzZSAxNjpiLnNyUGhhc2U9LjI1KmQ7YnJlYWs7Y2FzZSAzMjpiLnNyUGhhc2U9LjUqZDticmVhaztjYXNlIDQ4OmIuc3JQaGFzZT0uNzUqZDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgU1JPVU5EIHZhbHVlXCIpfWMmPTE1LGIuc3JUaHJlc2hvbGQ9MD09PWM/MDooYy84LS41KSpkfWZ1bmN0aW9uIEJkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUzQ1Uk9VTkRbXVwiLGMpLGIucm91bmQ9d2Y7dmFyIGQ7c3dpdGNoKDE5MiZjKXtjYXNlIDA6ZD1NYXRoLnNxcnQoMikvMjticmVhaztjYXNlIDY0OmQ9TWF0aC5zcXJ0KDIpO2JyZWFrO2Nhc2UgMTI4OmQ9MipNYXRoLnNxcnQoMik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFM0NVJPVU5EIHZhbHVlXCIpfXN3aXRjaChiLnNyUGVyaW9kPWQsNDgmYyl7Y2FzZSAwOmIuc3JQaGFzZT0wO2JyZWFrO2Nhc2UgMTY6Yi5zclBoYXNlPS4yNSpkO2JyZWFrO2Nhc2UgMzI6Yi5zclBoYXNlPS41KmQ7YnJlYWs7Y2FzZSA0ODpiLnNyUGhhc2U9Ljc1KmQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFM0NVJPVU5EIHZhbHVlXCIpfWMmPTE1LGIuc3JUaHJlc2hvbGQ9MD09PWM/MDooYy84LS41KSpkfWZ1bmN0aW9uIENkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJPRkZbXVwiKSxiLnJvdW5kPU5ifWZ1bmN0aW9uIERkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJVVEdbXVwiKSxiLnJvdW5kPVJifWZ1bmN0aW9uIEVkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJEVEdbXVwiKSxiLnJvdW5kPVNifWZ1bmN0aW9uIEZkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0NBTkNUUkxbXVwiLGMpfWZ1bmN0aW9uIEdkKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MltlXSxoPWMuejFbZl07YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU0RQVlRMW1wiK2IrXCJdXCIsZSxmKTt2YXIgaSxqO2I/KGk9Zy55LWgueSxqPWgueC1nLngpOihpPWgueC1nLngsaj1oLnktZy55KSxjLmRwdj1VYihpLGopfWZ1bmN0aW9uIEhkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9MDthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJHRVRJTkZPW11cIixkKSwxJmQmJihlPTM1KSwzMiZkJiYoZXw9NDA5NiksYy5wdXNoKGUpfWZ1bmN0aW9uIElkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKSxmPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUk9MTFtdXCIpLGMucHVzaChlKSxjLnB1c2goZCksYy5wdXNoKGYpfWZ1bmN0aW9uIEpkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNQVhbXVwiLGQsZSksYy5wdXNoKE1hdGgubWF4KGUsZCkpfWZ1bmN0aW9uIEtkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNSU5bXVwiLGQsZSksYy5wdXNoKE1hdGgubWluKGUsZCkpfWZ1bmN0aW9uIExkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0NBTlRZUEVbXVwiLGMpfWZ1bmN0aW9uIE1kKGIpe3ZhciBjPWIuc3RhY2sucG9wKCksZD1iLnN0YWNrLnBvcCgpO3N3aXRjaChhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJJTlNUQ1RSTFtdXCIsYyxkKSxjKXtjYXNlIDE6cmV0dXJuIHZvaWQoYi5pbmhpYml0R3JpZEZpdD0hIWQpO2Nhc2UgMjpyZXR1cm4gdm9pZChiLmlnbm9yZUN2dD0hIWQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBJTlNUQ1RSTFtdIHNlbGVjdG9yXCIpfX1mdW5jdGlvbiBOZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1jLnByb2csZj1jLmlwO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlBVU0hCW1wiK2IrXCJdXCIpO2Zvcih2YXIgZz0wO2c8YjtnKyspZC5wdXNoKGVbKytmXSk7Yy5pcD1mfWZ1bmN0aW9uIE9kKGIsYyl7dmFyIGQ9Yy5pcCxlPWMucHJvZyxmPWMuc3RhY2s7YS5ERUJVRyYmY29uc29sZS5sb2coYy5pcCxcIlBVU0hXW1wiK2IrXCJdXCIpO2Zvcih2YXIgZz0wO2c8YjtnKyspe3ZhciBoPWVbKytkXTw8OHxlWysrZF07MzI3NjgmaCYmKGg9LSgxKyg2NTUzNV5oKSkpLGYucHVzaChoKX1jLmlwPWR9ZnVuY3Rpb24gUGQoYixjLGQsZSxmLGcpe3ZhciBoLGksaixrLGw9Zy5zdGFjayxtPWImJmwucG9wKCksbj1sLnBvcCgpLG89Zy5ycDAscD1nLnowW29dLHE9Zy56MVtuXSxyPWcubWluRGlzLHM9Zy5mdix0PWcuZHB2O2k9aD10LmRpc3RhbmNlKHEscCwhMCwhMCksaj1pPj0wPzE6LTEsaT1NYXRoLmFicyhpKSxiJiYoaz1nLmN2dFttXSxlJiZNYXRoLmFicyhpLWspPGcuY3ZDdXRJbiYmKGk9aykpLGQmJmk8ciYmKGk9ciksZSYmKGk9Zy5yb3VuZChpKSkscy5zZXRSZWxhdGl2ZShxLHAsaippLHQpLHMudG91Y2gocSksYS5ERUJVRyYmY29uc29sZS5sb2coZy5zdGVwLChiP1wiTUlSUFtcIjpcIk1EUlBbXCIpKyhjP1wiTVwiOlwibVwiKSsoZD9cIj5cIjpcIl9cIikrKGU/XCJSXCI6XCJfXCIpKygwPT09Zj9cIkdyXCI6MT09PWY/XCJCbFwiOjI9PT1mP1wiV2hcIjpcIlwiKStcIl1cIixiP20rXCIoXCIrZy5jdnRbbV0rXCIsXCIraytcIilcIjpcIlwiLG4sXCIoZCA9XCIsaCxcIi0+XCIsaippLFwiKVwiKSxnLnJwMT1nLnJwMCxnLnJwMj1uLGMmJihnLnJwMD1uKX1mdW5jdGlvbiBRZChhKXthPWF8fHt9LGEuZW1wdHl8fChFYihhLmZhbWlseU5hbWUsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBmYW1pbHlOYW1lIGlzIHJlcXVpcmVkLlwiKSxFYihhLnN0eWxlTmFtZSxcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIHN0eWxlTmFtZSBpcyByZXF1aXJlZC5cIiksRWIoYS51bml0c1BlckVtLFwiV2hlbiBjcmVhdGluZyBhIG5ldyBGb250IG9iamVjdCwgdW5pdHNQZXJFbSBpcyByZXF1aXJlZC5cIiksRWIoYS5hc2NlbmRlcixcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIGFzY2VuZGVyIGlzIHJlcXVpcmVkLlwiKSxFYihhLmRlc2NlbmRlcixcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIGRlc2NlbmRlciBpcyByZXF1aXJlZC5cIiksRWIoYS5kZXNjZW5kZXI8MCxcIkRlc2NlbmRlciBzaG91bGQgYmUgbmVnYXRpdmUgKGUuZy4gLTUxMikuXCIpLHRoaXMubmFtZXM9e2ZvbnRGYW1pbHk6e2VuOmEuZmFtaWx5TmFtZXx8XCIgXCJ9LGZvbnRTdWJmYW1pbHk6e2VuOmEuc3R5bGVOYW1lfHxcIiBcIn0sZnVsbE5hbWU6e2VuOmEuZnVsbE5hbWV8fGEuZmFtaWx5TmFtZStcIiBcIithLnN0eWxlTmFtZX0scG9zdFNjcmlwdE5hbWU6e2VuOmEucG9zdFNjcmlwdE5hbWV8fChhLmZhbWlseU5hbWUrYS5zdHlsZU5hbWUpLnJlcGxhY2UoL1xccy9nLFwiXCIpfSxkZXNpZ25lcjp7ZW46YS5kZXNpZ25lcnx8XCIgXCJ9LGRlc2lnbmVyVVJMOntlbjphLmRlc2lnbmVyVVJMfHxcIiBcIn0sbWFudWZhY3R1cmVyOntlbjphLm1hbnVmYWN0dXJlcnx8XCIgXCJ9LG1hbnVmYWN0dXJlclVSTDp7ZW46YS5tYW51ZmFjdHVyZXJVUkx8fFwiIFwifSxsaWNlbnNlOntlbjphLmxpY2Vuc2V8fFwiIFwifSxsaWNlbnNlVVJMOntlbjphLmxpY2Vuc2VVUkx8fFwiIFwifSx2ZXJzaW9uOntlbjphLnZlcnNpb258fFwiVmVyc2lvbiAwLjFcIn0sZGVzY3JpcHRpb246e2VuOmEuZGVzY3JpcHRpb258fFwiIFwifSxjb3B5cmlnaHQ6e2VuOmEuY29weXJpZ2h0fHxcIiBcIn0sdHJhZGVtYXJrOntlbjphLnRyYWRlbWFya3x8XCIgXCJ9fSx0aGlzLnVuaXRzUGVyRW09YS51bml0c1BlckVtfHwxZTMsdGhpcy5hc2NlbmRlcj1hLmFzY2VuZGVyLHRoaXMuZGVzY2VuZGVyPWEuZGVzY2VuZGVyLHRoaXMuY3JlYXRlZFRpbWVzdGFtcD1hLmNyZWF0ZWRUaW1lc3RhbXAsdGhpcy50YWJsZXM9e29zMjp7dXNXZWlnaHRDbGFzczphLndlaWdodENsYXNzfHx0aGlzLnVzV2VpZ2h0Q2xhc3Nlcy5NRURJVU0sdXNXaWR0aENsYXNzOmEud2lkdGhDbGFzc3x8dGhpcy51c1dpZHRoQ2xhc3Nlcy5NRURJVU0sZnNTZWxlY3Rpb246YS5mc1NlbGVjdGlvbnx8dGhpcy5mc1NlbGVjdGlvblZhbHVlcy5SRUdVTEFSfX0pLHRoaXMuc3VwcG9ydGVkPSEwLHRoaXMuZ2x5cGhzPW5ldyBTZS5HbHlwaFNldCh0aGlzLGEuZ2x5cGhzfHxbXSksdGhpcy5lbmNvZGluZz1uZXcgWCh0aGlzKSx0aGlzLnBvc2l0aW9uPW5ldyB4Yih0aGlzKSx0aGlzLnN1YnN0aXR1dGlvbj1uZXcgeWIodGhpcyksdGhpcy50YWJsZXM9dGhpcy50YWJsZXN8fHt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiaGludGluZ1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGludGluZz90aGlzLl9oaW50aW5nOlwidHJ1ZXR5cGVcIj09PXRoaXMub3V0bGluZXNGb3JtYXQ/dGhpcy5faGludGluZz1uZXcgTWIodGhpcyk6dm9pZCAwfX0pfWZ1bmN0aW9uIFJkKGEsYil7dmFyIGM9SlNPTi5zdHJpbmdpZnkoYSksZD0yNTY7Zm9yKHZhciBlIGluIGIpe3ZhciBmPXBhcnNlSW50KGUpO2lmKGYmJiEoZjwyNTYpKXtpZihKU09OLnN0cmluZ2lmeShiW2VdKT09PWMpcmV0dXJuIGY7ZDw9ZiYmKGQ9ZisxKX19cmV0dXJuIGJbZF09YSxkfWZ1bmN0aW9uIFNkKGEsYixjKXt2YXIgZD1SZChiLm5hbWUsYyk7cmV0dXJuW3tuYW1lOlwidGFnX1wiK2EsdHlwZTpcIlRBR1wiLHZhbHVlOmIudGFnfSx7bmFtZTpcIm1pblZhbHVlX1wiK2EsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5taW5WYWx1ZTw8MTZ9LHtuYW1lOlwiZGVmYXVsdFZhbHVlX1wiK2EsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5kZWZhdWx0VmFsdWU8PDE2fSx7bmFtZTpcIm1heFZhbHVlX1wiK2EsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5tYXhWYWx1ZTw8MTZ9LHtuYW1lOlwiZmxhZ3NfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJuYW1lSURfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZH1dfWZ1bmN0aW9uIFRkKGEsYixjKXt2YXIgZD17fSxlPW5ldyBMZS5QYXJzZXIoYSxiKTtyZXR1cm4gZC50YWc9ZS5wYXJzZVRhZygpLGQubWluVmFsdWU9ZS5wYXJzZUZpeGVkKCksZC5kZWZhdWx0VmFsdWU9ZS5wYXJzZUZpeGVkKCksZC5tYXhWYWx1ZT1lLnBhcnNlRml4ZWQoKSxlLnNraXAoXCJ1U2hvcnRcIiwxKSxkLm5hbWU9Y1tlLnBhcnNlVVNob3J0KCldfHx7fSxkfWZ1bmN0aW9uIFVkKGEsYixjLGQpe2Zvcih2YXIgZT1SZChiLm5hbWUsZCksZj1be25hbWU6XCJuYW1lSURfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZX0se25hbWU6XCJmbGFnc19cIithLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfV0sZz0wO2c8Yy5sZW5ndGg7KytnKXt2YXIgaD1jW2ddLnRhZztmLnB1c2goe25hbWU6XCJheGlzX1wiK2ErXCIgXCIraCx0eXBlOlwiRklYRURcIix2YWx1ZTpiLmNvb3JkaW5hdGVzW2hdPDwxNn0pfXJldHVybiBmfWZ1bmN0aW9uIFZkKGEsYixjLGQpe3ZhciBlPXt9LGY9bmV3IExlLlBhcnNlcihhLGIpO2UubmFtZT1kW2YucGFyc2VVU2hvcnQoKV18fHt9LGYuc2tpcChcInVTaG9ydFwiLDEpLGUuY29vcmRpbmF0ZXM9e307Zm9yKHZhciBnPTA7ZzxjLmxlbmd0aDsrK2cpZS5jb29yZGluYXRlc1tjW2ddLnRhZ109Zi5wYXJzZUZpeGVkKCk7cmV0dXJuIGV9ZnVuY3Rpb24gV2QoYSxiKXt2YXIgYz1uZXcgSWUuVGFibGUoXCJmdmFyXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjY1NTM2fSx7bmFtZTpcIm9mZnNldFRvRGF0YVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImNvdW50U2l6ZVBhaXJzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjJ9LHtuYW1lOlwiYXhpc0NvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEuYXhlcy5sZW5ndGh9LHtuYW1lOlwiYXhpc1NpemVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MjB9LHtuYW1lOlwiaW5zdGFuY2VDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmluc3RhbmNlcy5sZW5ndGh9LHtuYW1lOlwiaW5zdGFuY2VTaXplXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjQrNCphLmF4ZXMubGVuZ3RofV0pO2Mub2Zmc2V0VG9EYXRhPWMuc2l6ZU9mKCk7Zm9yKHZhciBkPTA7ZDxhLmF4ZXMubGVuZ3RoO2QrKyljLmZpZWxkcz1jLmZpZWxkcy5jb25jYXQoU2QoZCxhLmF4ZXNbZF0sYikpO2Zvcih2YXIgZT0wO2U8YS5pbnN0YW5jZXMubGVuZ3RoO2UrKyljLmZpZWxkcz1jLmZpZWxkcy5jb25jYXQoVWQoZSxhLmluc3RhbmNlc1tlXSxhLmF4ZXMsYikpO3JldHVybiBjfWZ1bmN0aW9uIFhkKGEsYixjKXt2YXIgZD1uZXcgTGUuUGFyc2VyKGEsYiksZT1kLnBhcnNlVUxvbmcoKTt4ZS5hcmd1bWVudCg2NTUzNj09PWUsXCJVbnN1cHBvcnRlZCBmdmFyIHRhYmxlIHZlcnNpb24uXCIpO3ZhciBmPWQucGFyc2VPZmZzZXQxNigpO2Quc2tpcChcInVTaG9ydFwiLDEpO2Zvcih2YXIgZz1kLnBhcnNlVVNob3J0KCksaD1kLnBhcnNlVVNob3J0KCksaT1kLnBhcnNlVVNob3J0KCksaj1kLnBhcnNlVVNob3J0KCksaz1bXSxsPTA7bDxnO2wrKylrLnB1c2goVGQoYSxiK2YrbCpoLGMpKTtmb3IodmFyIG09W10sbj1iK2YrZypoLG89MDtvPGk7bysrKW0ucHVzaChWZChhLG4rbypqLGssYykpO3JldHVybntheGVzOmssaW5zdGFuY2VzOm19fWZ1bmN0aW9uIFlkKGEsYil7Yj1ifHwwO3ZhciBjPW5ldyBRKGEsYiksZD1jLnBhcnNlVmVyc2lvbigxKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWR8fDEuMT09PWQsXCJVbnN1cHBvcnRlZCBHUE9TIHRhYmxlIHZlcnNpb24gXCIrZCksMT09PWQ/e3ZlcnNpb246ZCxzY3JpcHRzOmMucGFyc2VTY3JpcHRMaXN0KCksZmVhdHVyZXM6Yy5wYXJzZUZlYXR1cmVMaXN0KCksbG9va3VwczpjLnBhcnNlTG9va3VwTGlzdChEZil9Ont2ZXJzaW9uOmQsc2NyaXB0czpjLnBhcnNlU2NyaXB0TGlzdCgpLGZlYXR1cmVzOmMucGFyc2VGZWF0dXJlTGlzdCgpLGxvb2t1cHM6Yy5wYXJzZUxvb2t1cExpc3QoRGYpLHZhcmlhdGlvbnM6Yy5wYXJzZUZlYXR1cmVWYXJpYXRpb25zTGlzdCgpfX1mdW5jdGlvbiBaZChhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiR1BPU1wiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJzY3JpcHRzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLlNjcmlwdExpc3QoYS5zY3JpcHRzKX0se25hbWU6XCJmZWF0dXJlc1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5GZWF0dXJlTGlzdChhLmZlYXR1cmVzKX0se25hbWU6XCJsb29rdXBzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkxvb2t1cExpc3QoYS5sb29rdXBzLEVmKX1dKX1mdW5jdGlvbiAkZChhKXt2YXIgYj17fTthLnNraXAoXCJ1U2hvcnRcIik7dmFyIGM9YS5wYXJzZVVTaG9ydCgpO3hlLmFyZ3VtZW50KDA9PT1jLFwiVW5zdXBwb3J0ZWQga2VybiBzdWItdGFibGUgdmVyc2lvbi5cIiksYS5za2lwKFwidVNob3J0XCIsMik7dmFyIGQ9YS5wYXJzZVVTaG9ydCgpO2Euc2tpcChcInVTaG9ydFwiLDMpO2Zvcih2YXIgZT0wO2U8ZDtlKz0xKXt2YXIgZj1hLnBhcnNlVVNob3J0KCksZz1hLnBhcnNlVVNob3J0KCksaD1hLnBhcnNlU2hvcnQoKTtiW2YrXCIsXCIrZ109aH1yZXR1cm4gYn1mdW5jdGlvbiBfZChhKXt2YXIgYj17fTthLnNraXAoXCJ1U2hvcnRcIiksYS5wYXJzZVVMb25nKCk+MSYmY29uc29sZS53YXJuKFwiT25seSB0aGUgZmlyc3Qga2VybiBzdWJ0YWJsZSBpcyBzdXBwb3J0ZWQuXCIpLGEuc2tpcChcInVMb25nXCIpO3ZhciBjPWEucGFyc2VVU2hvcnQoKSxkPTI1NSZjO2lmKGEuc2tpcChcInVTaG9ydFwiKSwwPT09ZCl7dmFyIGU9YS5wYXJzZVVTaG9ydCgpO2Euc2tpcChcInVTaG9ydFwiLDMpO2Zvcih2YXIgZj0wO2Y8ZTtmKz0xKXt2YXIgZz1hLnBhcnNlVVNob3J0KCksaD1hLnBhcnNlVVNob3J0KCksaT1hLnBhcnNlU2hvcnQoKTtiW2crXCIsXCIraF09aX19cmV0dXJuIGJ9ZnVuY3Rpb24gYWUoYSxiKXt2YXIgYz1uZXcgTGUuUGFyc2VyKGEsYiksZD1jLnBhcnNlVVNob3J0KCk7aWYoMD09PWQpcmV0dXJuICRkKGMpO2lmKDE9PT1kKXJldHVybiBfZChjKTt0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBrZXJuIHRhYmxlIHZlcnNpb24gKFwiK2QrXCIpLlwiKX1mdW5jdGlvbiBiZShhLGIsYyxkKXtmb3IodmFyIGU9bmV3IExlLlBhcnNlcihhLGIpLGY9ZD9lLnBhcnNlVVNob3J0OmUucGFyc2VVTG9uZyxnPVtdLGg9MDtoPGMrMTtoKz0xKXt2YXIgaT1mLmNhbGwoZSk7ZCYmKGkqPTIpLGcucHVzaChpKX1yZXR1cm4gZ31mdW5jdGlvbiBjZShhLGMpe2IoXCJmc1wiKS5yZWFkRmlsZShhLGZ1bmN0aW9uKGEsYil7aWYoYSlyZXR1cm4gYyhhLm1lc3NhZ2UpO2MobnVsbCxDYihiKSl9KX1mdW5jdGlvbiBkZShhLGIpe3ZhciBjPW5ldyBYTUxIdHRwUmVxdWVzdDtjLm9wZW4oXCJnZXRcIixhLCEwKSxjLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCIsYy5vbmxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gYy5yZXNwb25zZT9iKG51bGwsYy5yZXNwb25zZSk6YihcIkZvbnQgY291bGQgbm90IGJlIGxvYWRlZDogXCIrYy5zdGF0dXNUZXh0KX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7YihcIkZvbnQgY291bGQgbm90IGJlIGxvYWRlZFwiKX0sYy5zZW5kKCl9ZnVuY3Rpb24gZWUoYSxiKXtmb3IodmFyIGM9W10sZD0xMixlPTA7ZTxiO2UrPTEpe3ZhciBmPUxlLmdldFRhZyhhLGQpLGc9TGUuZ2V0VUxvbmcoYSxkKzQpLGg9TGUuZ2V0VUxvbmcoYSxkKzgpLGk9TGUuZ2V0VUxvbmcoYSxkKzEyKTtjLnB1c2goe3RhZzpmLGNoZWNrc3VtOmcsb2Zmc2V0OmgsbGVuZ3RoOmksY29tcHJlc3Npb246ITF9KSxkKz0xNn1yZXR1cm4gY31mdW5jdGlvbiBmZShhLGIpe2Zvcih2YXIgYz1bXSxkPTQ0LGU9MDtlPGI7ZSs9MSl7dmFyIGY9TGUuZ2V0VGFnKGEsZCksZz1MZS5nZXRVTG9uZyhhLGQrNCksaD1MZS5nZXRVTG9uZyhhLGQrOCksaT1MZS5nZXRVTG9uZyhhLGQrMTIpLGo9dm9pZCAwO2o9aDxpJiZcIldPRkZcIixjLnB1c2goe3RhZzpmLG9mZnNldDpnLGNvbXByZXNzaW9uOmosY29tcHJlc3NlZExlbmd0aDpoLGxlbmd0aDppfSksZCs9MjB9cmV0dXJuIGN9ZnVuY3Rpb24gZ2UoYSxiKXtpZihcIldPRkZcIj09PWIuY29tcHJlc3Npb24pe3ZhciBjPW5ldyBVaW50OEFycmF5KGEuYnVmZmVyLGIub2Zmc2V0KzIsYi5jb21wcmVzc2VkTGVuZ3RoLTIpLGQ9bmV3IFVpbnQ4QXJyYXkoYi5sZW5ndGgpO2lmKHdlKGMsZCksZC5ieXRlTGVuZ3RoIT09Yi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiRGVjb21wcmVzc2lvbiBlcnJvcjogXCIrYi50YWcrXCIgZGVjb21wcmVzc2VkIGxlbmd0aCBkb2Vzbid0IG1hdGNoIHJlY29yZGVkIGxlbmd0aFwiKTtyZXR1cm57ZGF0YTpuZXcgRGF0YVZpZXcoZC5idWZmZXIsMCksb2Zmc2V0OjB9fXJldHVybntkYXRhOmEsb2Zmc2V0OmIub2Zmc2V0fX1mdW5jdGlvbiBoZShhKXt2YXIgYixjLGQsZT1uZXcgUWQoe2VtcHR5OiEwfSksZj1uZXcgRGF0YVZpZXcoYSwwKSxnPVtdLGg9TGUuZ2V0VGFnKGYsMCk7aWYoaD09PVN0cmluZy5mcm9tQ2hhckNvZGUoMCwxLDAsMCl8fFwidHJ1ZVwiPT09aHx8XCJ0eXAxXCI9PT1oKWUub3V0bGluZXNGb3JtYXQ9XCJ0cnVldHlwZVwiLGQ9TGUuZ2V0VVNob3J0KGYsNCksZz1lZShmLGQpO2Vsc2UgaWYoXCJPVFRPXCI9PT1oKWUub3V0bGluZXNGb3JtYXQ9XCJjZmZcIixkPUxlLmdldFVTaG9ydChmLDQpLGc9ZWUoZixkKTtlbHNle2lmKFwid09GRlwiIT09aCl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBPcGVuVHlwZSBzaWduYXR1cmUgXCIraCk7dmFyIGk9TGUuZ2V0VGFnKGYsNCk7aWYoaT09PVN0cmluZy5mcm9tQ2hhckNvZGUoMCwxLDAsMCkpZS5vdXRsaW5lc0Zvcm1hdD1cInRydWV0eXBlXCI7ZWxzZXtpZihcIk9UVE9cIiE9PWkpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgT3BlblR5cGUgZmxhdm9yIFwiK2gpO2Uub3V0bGluZXNGb3JtYXQ9XCJjZmZcIn1kPUxlLmdldFVTaG9ydChmLDEyKSxnPWZlKGYsZCl9Zm9yKHZhciBqLGssbCxtLG4sbyxwLHEscixzLHQsdT0wO3U8ZDt1Kz0xKXt2YXIgdj1nW3VdLHc9dm9pZCAwO3N3aXRjaCh2LnRhZyl7Y2FzZVwiY21hcFwiOnc9Z2UoZix2KSxlLnRhYmxlcy5jbWFwPU1lLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS5lbmNvZGluZz1uZXcgWShlLnRhYmxlcy5jbWFwKTticmVhaztjYXNlXCJjdnQgXCI6dz1nZShmLHYpLHQ9bmV3IExlLlBhcnNlcih3LmRhdGEsdy5vZmZzZXQpLGUudGFibGVzLmN2dD10LnBhcnNlU2hvcnRMaXN0KHYubGVuZ3RoLzIpO2JyZWFrO2Nhc2VcImZ2YXJcIjprPXY7YnJlYWs7Y2FzZVwiZnBnbVwiOnc9Z2UoZix2KSx0PW5ldyBMZS5QYXJzZXIody5kYXRhLHcub2Zmc2V0KSxlLnRhYmxlcy5mcGdtPXQucGFyc2VCeXRlTGlzdCh2Lmxlbmd0aCk7YnJlYWs7Y2FzZVwiaGVhZFwiOnc9Z2UoZix2KSxlLnRhYmxlcy5oZWFkPVdlLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS51bml0c1BlckVtPWUudGFibGVzLmhlYWQudW5pdHNQZXJFbSxiPWUudGFibGVzLmhlYWQuaW5kZXhUb0xvY0Zvcm1hdDticmVhaztjYXNlXCJoaGVhXCI6dz1nZShmLHYpLGUudGFibGVzLmhoZWE9WGUucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLmFzY2VuZGVyPWUudGFibGVzLmhoZWEuYXNjZW5kZXIsZS5kZXNjZW5kZXI9ZS50YWJsZXMuaGhlYS5kZXNjZW5kZXIsZS5udW1iZXJPZkhNZXRyaWNzPWUudGFibGVzLmhoZWEubnVtYmVyT2ZITWV0cmljczticmVhaztjYXNlXCJobXR4XCI6bz12O2JyZWFrO2Nhc2VcImx0YWdcIjp3PWdlKGYsdiksYz1aZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpO2JyZWFrO2Nhc2VcIm1heHBcIjp3PWdlKGYsdiksZS50YWJsZXMubWF4cD0kZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUubnVtR2x5cGhzPWUudGFibGVzLm1heHAubnVtR2x5cGhzO2JyZWFrO2Nhc2VcIm5hbWVcIjpyPXY7YnJlYWs7Y2FzZVwiT1MvMlwiOnc9Z2UoZix2KSxlLnRhYmxlcy5vczI9amYucGFyc2Uody5kYXRhLHcub2Zmc2V0KTticmVhaztjYXNlXCJwb3N0XCI6dz1nZShmLHYpLGUudGFibGVzLnBvc3Q9a2YucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLmdseXBoTmFtZXM9bmV3ICQoZS50YWJsZXMucG9zdCk7YnJlYWs7Y2FzZVwicHJlcFwiOnc9Z2UoZix2KSx0PW5ldyBMZS5QYXJzZXIody5kYXRhLHcub2Zmc2V0KSxlLnRhYmxlcy5wcmVwPXQucGFyc2VCeXRlTGlzdCh2Lmxlbmd0aCk7YnJlYWs7Y2FzZVwiZ2x5ZlwiOmw9djticmVhaztjYXNlXCJsb2NhXCI6cT12O2JyZWFrO2Nhc2VcIkNGRiBcIjpqPXY7YnJlYWs7Y2FzZVwia2VyblwiOnA9djticmVhaztjYXNlXCJHUE9TXCI6bT12O2JyZWFrO2Nhc2VcIkdTVUJcIjpuPXY7YnJlYWs7Y2FzZVwibWV0YVwiOnM9dn19dmFyIHg9Z2UoZixyKTtpZihlLnRhYmxlcy5uYW1lPWdmLnBhcnNlKHguZGF0YSx4Lm9mZnNldCxjKSxlLm5hbWVzPWUudGFibGVzLm5hbWUsbCYmcSl7dmFyIHk9MD09PWIsej1nZShmLHEpLEE9SGYucGFyc2Uoei5kYXRhLHoub2Zmc2V0LGUubnVtR2x5cGhzLHkpLEI9Z2UoZixsKTtlLmdseXBocz12Zi5wYXJzZShCLmRhdGEsQi5vZmZzZXQsQSxlKX1lbHNle2lmKCFqKXRocm93IG5ldyBFcnJvcihcIkZvbnQgZG9lc24ndCBjb250YWluIFRydWVUeXBlIG9yIENGRiBvdXRsaW5lcy5cIik7dmFyIEM9Z2UoZixqKTtWZS5wYXJzZShDLmRhdGEsQy5vZmZzZXQsZSl9dmFyIEQ9Z2UoZixvKTtpZihZZS5wYXJzZShELmRhdGEsRC5vZmZzZXQsZS5udW1iZXJPZkhNZXRyaWNzLGUubnVtR2x5cGhzLGUuZ2x5cGhzKSxfKGUpLHApe3ZhciBFPWdlKGYscCk7ZS5rZXJuaW5nUGFpcnM9R2YucGFyc2UoRS5kYXRhLEUub2Zmc2V0KX1lbHNlIGUua2VybmluZ1BhaXJzPXt9O2lmKG0pe3ZhciBGPWdlKGYsbSk7ZS50YWJsZXMuZ3Bvcz1GZi5wYXJzZShGLmRhdGEsRi5vZmZzZXQpLGUucG9zaXRpb24uaW5pdCgpfWlmKG4pe3ZhciBHPWdlKGYsbik7ZS50YWJsZXMuZ3N1Yj1vZi5wYXJzZShHLmRhdGEsRy5vZmZzZXQpfWlmKGspe3ZhciBIPWdlKGYsayk7ZS50YWJsZXMuZnZhcj1DZi5wYXJzZShILmRhdGEsSC5vZmZzZXQsZS5uYW1lcyl9aWYocyl7dmFyIEk9Z2UoZixzKTtlLnRhYmxlcy5tZXRhPXBmLnBhcnNlKEkuZGF0YSxJLm9mZnNldCksZS5tZXRhcz1lLnRhYmxlcy5tZXRhfXJldHVybiBlfWZ1bmN0aW9uIGllKGEsYil7KFwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3c/Y2U6ZGUpKGEsZnVuY3Rpb24oYSxjKXtpZihhKXJldHVybiBiKGEpO3ZhciBkO3RyeXtkPWhlKGMpfWNhdGNoKGEpe3JldHVybiBiKGEsbnVsbCl9cmV0dXJuIGIobnVsbCxkKX0pfWZ1bmN0aW9uIGplKGEpe3JldHVybiBoZShDYihiKFwiZnNcIikucmVhZEZpbGVTeW5jKGEpKSl9U3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdHx8ZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbigpe3RyeXt2YXIgYT17fSxiPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxjPWIoYSxhLGEpJiZifWNhdGNoKGEpe31yZXR1cm4gY30oKSxiPWZ1bmN0aW9uKGEpe2lmKG51bGw9PXRoaXMpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGI9U3RyaW5nKHRoaXMpLGM9Yi5sZW5ndGgsZD1hP051bWJlcihhKTowO2lmKGQhPWQmJihkPTApLCEoZDwwfHxkPj1jKSl7dmFyIGUsZj1iLmNoYXJDb2RlQXQoZCk7cmV0dXJuIGY+PTU1Mjk2JiZmPD01NjMxOSYmYz5kKzEmJihlPWIuY2hhckNvZGVBdChkKzEpKT49NTYzMjAmJmU8PTU3MzQzPzEwMjQqKGYtNTUyOTYpK2UtNTYzMjArNjU1MzY6Zn19O2E/YShTdHJpbmcucHJvdG90eXBlLFwiY29kZVBvaW50QXRcIix7dmFsdWU6Yixjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0PWJ9KCk7dmFyIGtlPTAsbGU9LTMsbWU9bmV3IGMsbmU9bmV3IGMsb2U9bmV3IFVpbnQ4QXJyYXkoMzApLHBlPW5ldyBVaW50MTZBcnJheSgzMCkscWU9bmV3IFVpbnQ4QXJyYXkoMzApLHJlPW5ldyBVaW50MTZBcnJheSgzMCksc2U9bmV3IFVpbnQ4QXJyYXkoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSx0ZT1uZXcgYyx1ZT1uZXcgVWludDhBcnJheSgzMjApLHZlPW5ldyBVaW50MTZBcnJheSgxNik7ZyhtZSxuZSksZihvZSxwZSw0LDMpLGYocWUscmUsMiwxKSxvZVsyOF09MCxwZVsyOF09MjU4O3ZhciB3ZT1vO3EucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gaXNOYU4odGhpcy54MSl8fGlzTmFOKHRoaXMueTEpfHxpc05hTih0aGlzLngyKXx8aXNOYU4odGhpcy55Mil9LHEucHJvdG90eXBlLmFkZFBvaW50PWZ1bmN0aW9uKGEsYil7XCJudW1iZXJcIj09dHlwZW9mIGEmJigoaXNOYU4odGhpcy54MSl8fGlzTmFOKHRoaXMueDIpKSYmKHRoaXMueDE9YSx0aGlzLngyPWEpLGE8dGhpcy54MSYmKHRoaXMueDE9YSksYT50aGlzLngyJiYodGhpcy54Mj1hKSksXCJudW1iZXJcIj09dHlwZW9mIGImJigoaXNOYU4odGhpcy55MSl8fGlzTmFOKHRoaXMueTIpKSYmKHRoaXMueTE9Yix0aGlzLnkyPWIpLGI8dGhpcy55MSYmKHRoaXMueTE9YiksYj50aGlzLnkyJiYodGhpcy55Mj1iKSl9LHEucHJvdG90eXBlLmFkZFg9ZnVuY3Rpb24oYSl7dGhpcy5hZGRQb2ludChhLG51bGwpfSxxLnByb3RvdHlwZS5hZGRZPWZ1bmN0aW9uKGEpe3RoaXMuYWRkUG9pbnQobnVsbCxhKX0scS5wcm90b3R5cGUuYWRkQmV6aWVyPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCl7dmFyIGk9dGhpcyxqPVthLGJdLGs9W2MsZF0sbD1bZSxmXSxtPVtnLGhdO3RoaXMuYWRkUG9pbnQoYSxiKSx0aGlzLmFkZFBvaW50KGcsaCk7Zm9yKHZhciBuPTA7bjw9MTtuKyspe3ZhciBvPTYqaltuXS0xMiprW25dKzYqbFtuXSxxPS0zKmpbbl0rOSprW25dLTkqbFtuXSszKm1bbl0scj0zKmtbbl0tMypqW25dO2lmKDAhPT1xKXt2YXIgcz1NYXRoLnBvdyhvLDIpLTQqcipxO2lmKCEoczwwKSl7dmFyIHQ9KC1vK01hdGguc3FydChzKSkvKDIqcSk7MDx0JiZ0PDEmJigwPT09biYmaS5hZGRYKHAoaltuXSxrW25dLGxbbl0sbVtuXSx0KSksMT09PW4mJmkuYWRkWShwKGpbbl0sa1tuXSxsW25dLG1bbl0sdCkpKTt2YXIgdT0oLW8tTWF0aC5zcXJ0KHMpKS8oMipxKTswPHUmJnU8MSYmKDA9PT1uJiZpLmFkZFgocChqW25dLGtbbl0sbFtuXSxtW25dLHUpKSwxPT09biYmaS5hZGRZKHAoaltuXSxrW25dLGxbbl0sbVtuXSx1KSkpfX1lbHNle2lmKDA9PT1vKWNvbnRpbnVlO3ZhciB2PS1yL287MDx2JiZ2PDEmJigwPT09biYmaS5hZGRYKHAoaltuXSxrW25dLGxbbl0sbVtuXSx2KSksMT09PW4mJmkuYWRkWShwKGpbbl0sa1tuXSxsW25dLG1bbl0sdikpKX19fSxxLnByb3RvdHlwZS5hZGRRdWFkPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1hKzIvMyooYy1hKSxoPWIrMi8zKihkLWIpLGk9ZysxLzMqKGUtYSksaj1oKzEvMyooZi1iKTt0aGlzLmFkZEJlemllcihhLGIsZyxoLGksaixlLGYpfSxyLnByb3RvdHlwZS5tb3ZlVG89ZnVuY3Rpb24oYSxiKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJNXCIseDphLHk6Yn0pfSxyLnByb3RvdHlwZS5saW5lVG89ZnVuY3Rpb24oYSxiKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJMXCIseDphLHk6Yn0pfSxyLnByb3RvdHlwZS5jdXJ2ZVRvPXIucHJvdG90eXBlLmJlemllckN1cnZlVG89ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIkNcIix4MTphLHkxOmIseDI6Yyx5MjpkLHg6ZSx5OmZ9KX0sci5wcm90b3R5cGUucXVhZFRvPXIucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG89ZnVuY3Rpb24oYSxiLGMsZCl7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiUVwiLHgxOmEseTE6Yix4OmMseTpkfSl9LHIucHJvdG90eXBlLmNsb3NlPXIucHJvdG90eXBlLmNsb3NlUGF0aD1mdW5jdGlvbigpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIlpcIn0pfSxyLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24oYSl7aWYoYS5jb21tYW5kcylhPWEuY29tbWFuZHM7ZWxzZSBpZihhIGluc3RhbmNlb2YgcSl7dmFyIGI9YTtyZXR1cm4gdGhpcy5tb3ZlVG8oYi54MSxiLnkxKSx0aGlzLmxpbmVUbyhiLngyLGIueTEpLHRoaXMubGluZVRvKGIueDIsYi55MiksdGhpcy5saW5lVG8oYi54MSxiLnkyKSx2b2lkIHRoaXMuY2xvc2UoKX1BcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLmNvbW1hbmRzLGEpfSxyLnByb3RvdHlwZS5nZXRCb3VuZGluZ0JveD1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLGI9bmV3IHEsYz0wLGQ9MCxlPTAsZj0wLGc9MDtnPHRoaXMuY29tbWFuZHMubGVuZ3RoO2crKyl7dmFyIGg9YS5jb21tYW5kc1tnXTtzd2l0Y2goaC50eXBlKXtjYXNlXCJNXCI6Yi5hZGRQb2ludChoLngsaC55KSxjPWU9aC54LGQ9Zj1oLnk7YnJlYWs7Y2FzZVwiTFwiOmIuYWRkUG9pbnQoaC54LGgueSksZT1oLngsZj1oLnk7YnJlYWs7Y2FzZVwiUVwiOmIuYWRkUXVhZChlLGYsaC54MSxoLnkxLGgueCxoLnkpLGU9aC54LGY9aC55O2JyZWFrO2Nhc2VcIkNcIjpiLmFkZEJlemllcihlLGYsaC54MSxoLnkxLGgueDIsaC55MixoLngsaC55KSxlPWgueCxmPWgueTticmVhaztjYXNlXCJaXCI6ZT1jLGY9ZDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgcGF0aCBjb21tYW5kIFwiK2gudHlwZSl9fXJldHVybiBiLmlzRW1wdHkoKSYmYi5hZGRQb2ludCgwLDApLGJ9LHIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpczthLmJlZ2luUGF0aCgpO2Zvcih2YXIgYz0wO2M8dGhpcy5jb21tYW5kcy5sZW5ndGg7Yys9MSl7dmFyIGQ9Yi5jb21tYW5kc1tjXTtcIk1cIj09PWQudHlwZT9hLm1vdmVUbyhkLngsZC55KTpcIkxcIj09PWQudHlwZT9hLmxpbmVUbyhkLngsZC55KTpcIkNcIj09PWQudHlwZT9hLmJlemllckN1cnZlVG8oZC54MSxkLnkxLGQueDIsZC55MixkLngsZC55KTpcIlFcIj09PWQudHlwZT9hLnF1YWRyYXRpY0N1cnZlVG8oZC54MSxkLnkxLGQueCxkLnkpOlwiWlwiPT09ZC50eXBlJiZhLmNsb3NlUGF0aCgpfXRoaXMuZmlsbCYmKGEuZmlsbFN0eWxlPXRoaXMuZmlsbCxhLmZpbGwoKSksdGhpcy5zdHJva2UmJihhLnN0cm9rZVN0eWxlPXRoaXMuc3Ryb2tlLGEubGluZVdpZHRoPXRoaXMuc3Ryb2tlV2lkdGgsYS5zdHJva2UoKSl9LHIucHJvdG90eXBlLnRvUGF0aERhdGE9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtyZXR1cm4gTWF0aC5yb3VuZChiKT09PWI/XCJcIitNYXRoLnJvdW5kKGIpOmIudG9GaXhlZChhKX1mdW5jdGlvbiBjKCl7Zm9yKHZhciBhPWFyZ3VtZW50cyxjPVwiXCIsZD0wO2Q8YXJndW1lbnRzLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdO2U+PTAmJmQ+MCYmKGMrPVwiIFwiKSxjKz1iKGUpfXJldHVybiBjfXZhciBkPXRoaXM7YT12b2lkIDAhPT1hP2E6Mjtmb3IodmFyIGU9XCJcIixmPTA7Zjx0aGlzLmNvbW1hbmRzLmxlbmd0aDtmKz0xKXt2YXIgZz1kLmNvbW1hbmRzW2ZdO1wiTVwiPT09Zy50eXBlP2UrPVwiTVwiK2MoZy54LGcueSk6XCJMXCI9PT1nLnR5cGU/ZSs9XCJMXCIrYyhnLngsZy55KTpcIkNcIj09PWcudHlwZT9lKz1cIkNcIitjKGcueDEsZy55MSxnLngyLGcueTIsZy54LGcueSk6XCJRXCI9PT1nLnR5cGU/ZSs9XCJRXCIrYyhnLngxLGcueTEsZy54LGcueSk6XCJaXCI9PT1nLnR5cGUmJihlKz1cIlpcIil9cmV0dXJuIGV9LHIucHJvdG90eXBlLnRvU1ZHPWZ1bmN0aW9uKGEpe3ZhciBiPSc8cGF0aCBkPVwiJztyZXR1cm4gYis9dGhpcy50b1BhdGhEYXRhKGEpLGIrPSdcIicsdGhpcy5maWxsJiZcImJsYWNrXCIhPT10aGlzLmZpbGwmJihudWxsPT09dGhpcy5maWxsP2IrPScgZmlsbD1cIm5vbmVcIic6Yis9JyBmaWxsPVwiJyt0aGlzLmZpbGwrJ1wiJyksdGhpcy5zdHJva2UmJihiKz0nIHN0cm9rZT1cIicrdGhpcy5zdHJva2UrJ1wiIHN0cm9rZS13aWR0aD1cIicrdGhpcy5zdHJva2VXaWR0aCsnXCInKSxiKz1cIi8+XCJ9LHIucHJvdG90eXBlLnRvRE9NRWxlbWVudD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnRvUGF0aERhdGEoYSksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwicGF0aFwiKTtyZXR1cm4gYy5zZXRBdHRyaWJ1dGUoXCJkXCIsYiksY307dmFyIHhlPXtmYWlsOnMsYXJndW1lbnQ6dCxhc3NlcnQ6dH0seWU9MzI3NjgsemU9MjE0NzQ4MzY0OCxBZT17fSxCZT17fSxDZT17fTtCZS5CWVRFPWZ1bmN0aW9uKGEpe3JldHVybiB4ZS5hcmd1bWVudChhPj0wJiZhPD0yNTUsXCJCeXRlIHZhbHVlIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDI1NS5cIiksW2FdfSxDZS5CWVRFPXUoMSksQmUuQ0hBUj1mdW5jdGlvbihhKXtyZXR1cm5bYS5jaGFyQ29kZUF0KDApXX0sQ2UuQ0hBUj11KDEpLEJlLkNIQVJBUlJBWT1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YS5sZW5ndGg7Yys9MSliW2NdPWEuY2hhckNvZGVBdChjKTtyZXR1cm4gYn0sQ2UuQ0hBUkFSUkFZPWZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0sQmUuVVNIT1JUPWZ1bmN0aW9uKGEpe3JldHVyblthPj44JjI1NSwyNTUmYV19LENlLlVTSE9SVD11KDIpLEJlLlNIT1JUPWZ1bmN0aW9uKGEpe3JldHVybiBhPj15ZSYmKGE9LSgyKnllLWEpKSxbYT4+OCYyNTUsMjU1JmFdfSxDZS5TSE9SVD11KDIpLEJlLlVJTlQyND1mdW5jdGlvbihhKXtyZXR1cm5bYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuVUlOVDI0PXUoMyksQmUuVUxPTkc9ZnVuY3Rpb24oYSl7cmV0dXJuW2E+PjI0JjI1NSxhPj4xNiYyNTUsYT4+OCYyNTUsMjU1JmFdfSxDZS5VTE9ORz11KDQpLEJlLkxPTkc9ZnVuY3Rpb24oYSl7cmV0dXJuIGE+PXplJiYoYT0tKDIqemUtYSkpLFthPj4yNCYyNTUsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuTE9ORz11KDQpLEJlLkZJWEVEPUJlLlVMT05HLENlLkZJWEVEPUNlLlVMT05HLEJlLkZXT1JEPUJlLlNIT1JULENlLkZXT1JEPUNlLlNIT1JULEJlLlVGV09SRD1CZS5VU0hPUlQsQ2UuVUZXT1JEPUNlLlVTSE9SVCxCZS5MT05HREFURVRJTUU9ZnVuY3Rpb24oYSl7cmV0dXJuWzAsMCwwLDAsYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLkxPTkdEQVRFVElNRT11KDgpLEJlLlRBRz1mdW5jdGlvbihhKXtyZXR1cm4geGUuYXJndW1lbnQoND09PWEubGVuZ3RoLFwiVGFnIHNob3VsZCBiZSBleGFjdGx5IDQgQVNDSUkgY2hhcmFjdGVycy5cIiksW2EuY2hhckNvZGVBdCgwKSxhLmNoYXJDb2RlQXQoMSksYS5jaGFyQ29kZUF0KDIpLGEuY2hhckNvZGVBdCgzKV19LENlLlRBRz11KDQpLEJlLkNhcmQ4PUJlLkJZVEUsQ2UuQ2FyZDg9Q2UuQllURSxCZS5DYXJkMTY9QmUuVVNIT1JULENlLkNhcmQxNj1DZS5VU0hPUlQsQmUuT2ZmU2l6ZT1CZS5CWVRFLENlLk9mZlNpemU9Q2UuQllURSxCZS5TSUQ9QmUuVVNIT1JULENlLlNJRD1DZS5VU0hPUlQsQmUuTlVNQkVSPWZ1bmN0aW9uKGEpe3JldHVybiBhPj0tMTA3JiZhPD0xMDc/W2ErMTM5XTphPj0xMDgmJmE8PTExMzE/KGEtPTEwOCxbMjQ3KyhhPj44KSwyNTUmYV0pOmE+PS0xMTMxJiZhPD0tMTA4PyhhPS1hLTEwOCxbMjUxKyhhPj44KSwyNTUmYV0pOmE+PS0zMjc2OCYmYTw9MzI3Njc/QmUuTlVNQkVSMTYoYSk6QmUuTlVNQkVSMzIoYSlcbn0sQ2UuTlVNQkVSPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5OVU1CRVIoYSkubGVuZ3RofSxCZS5OVU1CRVIxNj1mdW5jdGlvbihhKXtyZXR1cm5bMjgsYT4+OCYyNTUsMjU1JmFdfSxDZS5OVU1CRVIxNj11KDMpLEJlLk5VTUJFUjMyPWZ1bmN0aW9uKGEpe3JldHVyblsyOSxhPj4yNCYyNTUsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuTlVNQkVSMzI9dSg1KSxCZS5SRUFMPWZ1bmN0aW9uKGEpe3ZhciBiPWEudG9TdHJpbmcoKSxjPS9cXC4oXFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxcZHswLDJ9KD86ZSguKyl8JCkvLmV4ZWMoYik7aWYoYyl7dmFyIGQ9cGFyc2VGbG9hdChcIjFlXCIrKChjWzJdPytjWzJdOjApK2NbMV0ubGVuZ3RoKSk7Yj0oTWF0aC5yb3VuZChhKmQpL2QpLnRvU3RyaW5nKCl9Zm9yKHZhciBlPVwiXCIsZj0wLGc9Yi5sZW5ndGg7ZjxnO2YrPTEpe3ZhciBoPWJbZl07ZSs9XCJlXCI9PT1oP1wiLVwiPT09YlsrK2ZdP1wiY1wiOlwiYlwiOlwiLlwiPT09aD9cImFcIjpcIi1cIj09PWg/XCJlXCI6aH1lKz0xJmUubGVuZ3RoP1wiZlwiOlwiZmZcIjtmb3IodmFyIGk9WzMwXSxqPTAsaz1lLmxlbmd0aDtqPGs7ais9MilpLnB1c2gocGFyc2VJbnQoZS5zdWJzdHIoaiwyKSwxNikpO3JldHVybiBpfSxDZS5SRUFMPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5SRUFMKGEpLmxlbmd0aH0sQmUuTkFNRT1CZS5DSEFSQVJSQVksQ2UuTkFNRT1DZS5DSEFSQVJSQVksQmUuU1RSSU5HPUJlLkNIQVJBUlJBWSxDZS5TVFJJTkc9Q2UuQ0hBUkFSUkFZLEFlLlVURjg9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPWMsZj0wO2Y8ZTtmKyssYis9MSlkW2ZdPWEuZ2V0VWludDgoYik7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxkKX0sQWUuVVRGMTY9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPWMvMixmPTA7ZjxlO2YrKyxiKz0yKWRbZl09YS5nZXRVaW50MTYoYik7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxkKX0sQmUuVVRGMTY9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrPTEpe3ZhciBkPWEuY2hhckNvZGVBdChjKTtiW2IubGVuZ3RoXT1kPj44JjI1NSxiW2IubGVuZ3RoXT0yNTUmZH1yZXR1cm4gYn0sQ2UuVVRGMTY9ZnVuY3Rpb24oYSl7cmV0dXJuIDIqYS5sZW5ndGh9O3ZhciBEZT17XCJ4LW1hYy1jcm9hdGlhblwiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuxaDihKLCtMKo4omgxb3DmOKInsKx4omk4oml4oiGwrXiiILiiJHiiI/FoeKIq8KqwrrOqcW+w7jCv8KhwqziiJrGkuKJiMSGwqvEjOKApsKgw4DDg8OVxZLFk8SQ4oCU4oCc4oCd4oCY4oCZw7fil4rvo7/CqeKBhOKCrOKAueKAusOGwrvigJPCt+KAmuKAnuKAsMOCxIfDgcSNw4jDjcOOw4/DjMOTw5TEkcOSw5rDm8OZxLHLhsucwq/PgMOLy5rCuMOKw6bLh1wiLFwieC1tYWMtY3lyaWxsaWNcIjpcItCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/igKDCsNKQwqPCp+KAosK20IbCrsKp4oSi0ILRkuKJoNCD0ZPiiJ7CseKJpOKJpdGWwrXSkdCI0ITRlNCH0ZfQidGZ0IrRmtGY0IXCrOKImsaS4omI4oiGwqvCu+KApsKg0IvRm9CM0ZzRleKAk+KAlOKAnOKAneKAmOKAmcO34oCe0I7RntCP0Z/ihJbQgdGR0Y/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjlwiLFwieC1tYWMtZ2FlbGljXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4biCwrHiiaTiiaXhuIPEisSL4biK4biL4bie4bifxKDEoeG5gMOmw7jhuYHhuZbhuZfJvMaSxb/huaDCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZ4bmh4bqbw7/FuOG5quKCrOKAueKAusW2xbfhuavCt+G7suG7s+KBisOCw4rDgcOLw4jDjcOOw4/DjMOTw5TimaPDksOaw5vDmcSxw53DvcW0xbXhuoThuoXhuoDhuoHhuoLhuoNcIixcIngtbWFjLWdyZWVrXCI6XCLDhMK5wrLDicKzw5bDnM6Fw6DDosOkzoTCqMOnw6nDqMOqw6vCo+KEosOuw6/igKLCveKAsMO0w7bCpuKCrMO5w7vDvOKAoM6TzpTOmM6bzp7OoMOfwq7Cqc6jzqrCp+KJoMKwwrfOkcKx4omk4omlwqXOks6VzpbOl86ZzprOnM6mzqvOqM6pzqzOncKszp/OoeKJiM6kwqvCu+KApsKgzqXOp86GzojFk+KAk+KAleKAnOKAneKAmOKAmcO3zonOis6Mzo7Orc6uzq/PjM6Pz43Osc6yz4jOtM61z4bOs863zrnOvs66zrvOvM69zr/PgM+Oz4HPg8+EzrjPic+Cz4fPhc62z4rPi86QzrDCrVwiLFwieC1tYWMtaWNlbGFuZGljXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O8w53CsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrOqcOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTigqzDkMOww57DvsO9wrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU76O/w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCIsXCJ4LW1hYy1pbnVpdFwiOlwi4ZCD4ZCE4ZCF4ZCG4ZCK4ZCL4ZCx4ZCy4ZCz4ZC04ZC44ZC54ZGJ4ZGO4ZGP4ZGQ4ZGR4ZGV4ZGW4ZGm4ZGt4ZGu4ZGv4ZGw4ZGy4ZGz4ZKD4ZKL4ZKM4ZKN4ZKO4ZKQ4ZKRwrDhkqHhkqXhkqbigKLCtuGSp8KuwqnihKLhkqjhkqrhkqvhkrvhk4Lhk4Phk4Thk4Xhk4fhk4jhk5Dhk6/hk7Dhk7Hhk7Lhk7Thk7XhlIXhk5Xhk5bhk5fhk5jhk5rhk5vhk6rhlKjhlKnhlKrhlKvhlK3igKbCoOGUruGUvuGVleGVluGVl+KAk+KAlOKAnOKAneKAmOKAmeGVmOGVmeGVmuGVneGVhuGVh+GViOGVieGVi+GVjOGVkOGVv+GWgOGWgeGWguGWg+GWhOGWheGWj+GWkOGWkeGWkuGWk+GWlOGWleGZseGZsuGZs+GZtOGZteGZtuGWluGWoOGWoeGWouGWo+GWpOGWpeGWpuGVvMWBxYJcIixcIngtbWFjLWNlXCI6XCLDhMSAxIHDicSEw5bDnMOhxIXEjMOkxI3EhsSHw6nFucW6xI7DrcSPxJLEk8SWw7PEl8O0w7bDtcO6xJrEm8O84oCgwrDEmMKjwqfigKLCtsOfwq7CqeKEosSZwqjiiaDEo8SuxK/EquKJpOKJpcSrxLbiiILiiJHFgsS7xLzEvcS+xLnEusWFxYbFg8Ks4oiaxYTFh+KIhsKrwrvigKbCoMWIxZDDlcWRxYzigJPigJTigJzigJ3igJjigJnDt+KXisWNxZTFlcWY4oC54oC6xZnFlsWXxaDigJrigJ7FocWaxZvDgcWkxaXDjcW9xb7FqsOTw5TFq8Wuw5rFr8WwxbHFssWzw53DvcS3xbvFgcW8xKLLh1wiLG1hY2ludG9zaDpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrOqcOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTigqzigLnigLrvrIHvrILigKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvo7/DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIixcIngtbWFjLXJvbWFuaWFuXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDEgsiY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK6zqnEg8iZwr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGE4oKs4oC54oC6yJrIm+KAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+jv8OSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiLFwieC1tYWMtdHVya2lzaFwiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCus6pw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuMSexJ/EsMSxxZ7Fn+KAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+jv8OSw5rDm8OZ76Kgy4bLnMKvy5jLmcuawrjLncuby4dcIn07QWUuTUFDU1RSSU5HPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPURlW2RdO2lmKHZvaWQgMCE9PWUpe2Zvcih2YXIgZj1cIlwiLGc9MDtnPGM7ZysrKXt2YXIgaD1hLmdldFVpbnQ4KGIrZyk7Zis9aDw9MTI3P1N0cmluZy5mcm9tQ2hhckNvZGUoaCk6ZVsxMjcmaF19cmV0dXJuIGZ9fTt2YXIgRWUsRmU9XCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha01hcCYmbmV3IFdlYWtNYXAsR2U9ZnVuY3Rpb24oYSl7aWYoIUVlKXtFZT17fTtmb3IodmFyIGIgaW4gRGUpRWVbYl09bmV3IFN0cmluZyhiKX12YXIgYz1FZVthXTtpZih2b2lkIDAhPT1jKXtpZihGZSl7dmFyIGQ9RmUuZ2V0KGMpO2lmKHZvaWQgMCE9PWQpcmV0dXJuIGR9dmFyIGU9RGVbYV07aWYodm9pZCAwIT09ZSl7Zm9yKHZhciBmPXt9LGc9MDtnPGUubGVuZ3RoO2crKylmW2UuY2hhckNvZGVBdChnKV09ZysxMjg7cmV0dXJuIEZlJiZGZS5zZXQoYyxmKSxmfX19O0JlLk1BQ1NUUklORz1mdW5jdGlvbihhLGIpe3ZhciBjPUdlKGIpO2lmKHZvaWQgMCE9PWMpe2Zvcih2YXIgZD1bXSxlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBmPWEuY2hhckNvZGVBdChlKTtpZihmPj0xMjgmJnZvaWQgMD09PShmPWNbZl0pKXJldHVybjtkW2VdPWZ9cmV0dXJuIGR9fSxDZS5NQUNTVFJJTkc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1CZS5NQUNTVFJJTkcoYSxiKTtyZXR1cm4gdm9pZCAwIT09Yz9jLmxlbmd0aDowfSxCZS5WQVJERUxUQVM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz1bXTtiPGEubGVuZ3RoOyl7dmFyIGQ9YVtiXTtiPTA9PT1kP3coYSxiLGMpOmQ+PS0xMjgmJmQ8PTEyNz94KGEsYixjKTp5KGEsYixjKX1yZXR1cm4gY30sQmUuSU5ERVg9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTEsYz1bYl0sZD1bXSxlPTA7ZTxhLmxlbmd0aDtlKz0xKXt2YXIgZj1CZS5PQkpFQ1QoYVtlXSk7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZCxmKSxiKz1mLmxlbmd0aCxjLnB1c2goYil9aWYoMD09PWQubGVuZ3RoKXJldHVyblswLDBdO2Zvcih2YXIgZz1bXSxoPTErTWF0aC5mbG9vcihNYXRoLmxvZyhiKS9NYXRoLmxvZygyKSkvOHwwLGk9W3ZvaWQgMCxCZS5CWVRFLEJlLlVTSE9SVCxCZS5VSU5UMjQsQmUuVUxPTkddW2hdLGo9MDtqPGMubGVuZ3RoO2orPTEpe3ZhciBrPWkoY1tqXSk7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZyxrKX1yZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdChCZS5DYXJkMTYoYS5sZW5ndGgpLEJlLk9mZlNpemUoaCksZyxkKX0sQ2UuSU5ERVg9ZnVuY3Rpb24oYSl7cmV0dXJuIEJlLklOREVYKGEpLmxlbmd0aH0sQmUuRElDVD1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz1PYmplY3Qua2V5cyhhKSxkPWMubGVuZ3RoLGU9MDtlPGQ7ZSs9MSl7dmFyIGY9cGFyc2VJbnQoY1tlXSwwKSxnPWFbZl07Yj1iLmNvbmNhdChCZS5PUEVSQU5EKGcudmFsdWUsZy50eXBlKSksYj1iLmNvbmNhdChCZS5PUEVSQVRPUihmKSl9cmV0dXJuIGJ9LENlLkRJQ1Q9ZnVuY3Rpb24oYSl7cmV0dXJuIEJlLkRJQ1QoYSkubGVuZ3RofSxCZS5PUEVSQVRPUj1mdW5jdGlvbihhKXtyZXR1cm4gYTwxMjAwP1thXTpbMTIsYS0xMjAwXX0sQmUuT1BFUkFORD1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2lmKEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKz0xKXhlLmFyZ3VtZW50KGEubGVuZ3RoPT09Yi5sZW5ndGgsXCJOb3QgZW5vdWdoIGFyZ3VtZW50cyBnaXZlbiBmb3IgdHlwZVwiK2IpLGM9Yy5jb25jYXQoQmUuT1BFUkFORChhW2RdLGJbZF0pKTtlbHNlIGlmKFwiU0lEXCI9PT1iKWM9Yy5jb25jYXQoQmUuTlVNQkVSKGEpKTtlbHNlIGlmKFwib2Zmc2V0XCI9PT1iKWM9Yy5jb25jYXQoQmUuTlVNQkVSMzIoYSkpO2Vsc2UgaWYoXCJudW1iZXJcIj09PWIpYz1jLmNvbmNhdChCZS5OVU1CRVIoYSkpO2Vsc2V7aWYoXCJyZWFsXCIhPT1iKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3BlcmFuZCB0eXBlIFwiK2IpO2M9Yy5jb25jYXQoQmUuUkVBTChhKSl9cmV0dXJuIGN9LEJlLk9QPUJlLkJZVEUsQ2UuT1A9Q2UuQllURTt2YXIgSGU9XCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha01hcCYmbmV3IFdlYWtNYXA7QmUuQ0hBUlNUUklORz1mdW5jdGlvbihhKXtpZihIZSl7dmFyIGI9SGUuZ2V0KGEpO2lmKHZvaWQgMCE9PWIpcmV0dXJuIGJ9Zm9yKHZhciBjPVtdLGQ9YS5sZW5ndGgsZT0wO2U8ZDtlKz0xKXt2YXIgZj1hW2VdO2M9Yy5jb25jYXQoQmVbZi50eXBlXShmLnZhbHVlKSl9cmV0dXJuIEhlJiZIZS5zZXQoYSxjKSxjfSxDZS5DSEFSU1RSSU5HPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5DSEFSU1RSSU5HKGEpLmxlbmd0aH0sQmUuT0JKRUNUPWZ1bmN0aW9uKGEpe3ZhciBiPUJlW2EudHlwZV07cmV0dXJuIHhlLmFyZ3VtZW50KHZvaWQgMCE9PWIsXCJObyBlbmNvZGluZyBmdW5jdGlvbiBmb3IgdHlwZSBcIithLnR5cGUpLGIoYS52YWx1ZSl9LENlLk9CSkVDVD1mdW5jdGlvbihhKXt2YXIgYj1DZVthLnR5cGVdO3JldHVybiB4ZS5hcmd1bWVudCh2b2lkIDAhPT1iLFwiTm8gc2l6ZU9mIGZ1bmN0aW9uIGZvciB0eXBlIFwiK2EudHlwZSksYihhLnZhbHVlKX0sQmUuVEFCTEU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9YS5maWVsZHMubGVuZ3RoLGQ9W10sZT1bXSxmPTA7ZjxjO2YrPTEpe3ZhciBnPWEuZmllbGRzW2ZdLGg9QmVbZy50eXBlXTt4ZS5hcmd1bWVudCh2b2lkIDAhPT1oLFwiTm8gZW5jb2RpbmcgZnVuY3Rpb24gZm9yIGZpZWxkIHR5cGUgXCIrZy50eXBlK1wiIChcIitnLm5hbWUrXCIpXCIpO3ZhciBpPWFbZy5uYW1lXTt2b2lkIDA9PT1pJiYoaT1nLnZhbHVlKTt2YXIgaj1oKGkpO1wiVEFCTEVcIj09PWcudHlwZT8oZS5wdXNoKGIubGVuZ3RoKSxiPWIuY29uY2F0KFswLDBdKSxkLnB1c2goaikpOmI9Yi5jb25jYXQoail9Zm9yKHZhciBrPTA7azxkLmxlbmd0aDtrKz0xKXt2YXIgbD1lW2tdLG09Yi5sZW5ndGg7eGUuYXJndW1lbnQobTw2NTUzNixcIlRhYmxlIFwiK2EudGFibGVOYW1lK1wiIHRvbyBiaWcuXCIpLGJbbF09bT4+OCxiW2wrMV09MjU1Jm0sYj1iLmNvbmNhdChkW2tdKX1yZXR1cm4gYn0sQ2UuVEFCTEU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz1hLmZpZWxkcy5sZW5ndGgsZD0wO2Q8YztkKz0xKXt2YXIgZT1hLmZpZWxkc1tkXSxmPUNlW2UudHlwZV07eGUuYXJndW1lbnQodm9pZCAwIT09ZixcIk5vIHNpemVPZiBmdW5jdGlvbiBmb3IgZmllbGQgdHlwZSBcIitlLnR5cGUrXCIgKFwiK2UubmFtZStcIilcIik7dmFyIGc9YVtlLm5hbWVdO3ZvaWQgMD09PWcmJihnPWUudmFsdWUpLGIrPWYoZyksXCJUQUJMRVwiPT09ZS50eXBlJiYoYis9Mil9cmV0dXJuIGJ9LEJlLlJFQ09SRD1CZS5UQUJMRSxDZS5SRUNPUkQ9Q2UuVEFCTEUsQmUuTElURVJBTD1mdW5jdGlvbihhKXtyZXR1cm4gYX0sQ2UuTElURVJBTD1mdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LHoucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbigpe3JldHVybiBCZS5UQUJMRSh0aGlzKX0sei5wcm90b3R5cGUuc2l6ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIENlLlRBQkxFKHRoaXMpfSxELnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHoucHJvdG90eXBlKSxELnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ELEUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoei5wcm90b3R5cGUpLEUucHJvdG90eXBlLmNvbnN0cnVjdG9yPUUsRi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6LnByb3RvdHlwZSksRi5wcm90b3R5cGUuY29uc3RydWN0b3I9RixHLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHoucHJvdG90eXBlKSxHLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HO3ZhciBJZT17VGFibGU6eixSZWNvcmQ6eixDb3ZlcmFnZTpELFNjcmlwdExpc3Q6RSxGZWF0dXJlTGlzdDpGLExvb2t1cExpc3Q6Ryx1c2hvcnRMaXN0OkEsdGFibGVMaXN0OkIscmVjb3JkTGlzdDpDfSxKZT17Ynl0ZToxLHVTaG9ydDoyLHNob3J0OjIsdUxvbmc6NCxmaXhlZDo0LGxvbmdEYXRlVGltZTo4LHRhZzo0fTtRLnByb3RvdHlwZS5wYXJzZUJ5dGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0VWludDgodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTEsYX0sUS5wcm90b3R5cGUucGFyc2VDaGFyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldEludDgodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTEsYX0sUS5wcm90b3R5cGUucGFyc2VDYXJkOD1RLnByb3RvdHlwZS5wYXJzZUJ5dGUsUS5wcm90b3R5cGUucGFyc2VVU2hvcnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0VWludDE2KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yLGF9LFEucHJvdG90eXBlLnBhcnNlQ2FyZDE2PVEucHJvdG90eXBlLnBhcnNlVVNob3J0LFEucHJvdG90eXBlLnBhcnNlU0lEPVEucHJvdG90eXBlLnBhcnNlVVNob3J0LFEucHJvdG90eXBlLnBhcnNlT2Zmc2V0MTY9US5wcm90b3R5cGUucGFyc2VVU2hvcnQsUS5wcm90b3R5cGUucGFyc2VTaG9ydD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YS5nZXRJbnQxNih0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MixhfSxRLnByb3RvdHlwZS5wYXJzZUYyRG90MTQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0SW50MTYodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCkvMTYzODQ7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIsYX0sUS5wcm90b3R5cGUucGFyc2VVTG9uZz1mdW5jdGlvbigpe3ZhciBhPUsodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz00LGF9LFEucHJvdG90eXBlLnBhcnNlT2Zmc2V0MzI9US5wcm90b3R5cGUucGFyc2VVTG9uZyxRLnByb3RvdHlwZS5wYXJzZUZpeGVkPWZ1bmN0aW9uKCl7dmFyIGE9TCh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTQsYX0sUS5wcm90b3R5cGUucGFyc2VTdHJpbmc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kYXRhLGM9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxkPVwiXCI7dGhpcy5yZWxhdGl2ZU9mZnNldCs9YTtmb3IodmFyIGU9MDtlPGE7ZSsrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYi5nZXRVaW50OChjK2UpKTtyZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VUYWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVN0cmluZyg0KX0sUS5wcm90b3R5cGUucGFyc2VMb25nRGF0ZVRpbWU9ZnVuY3Rpb24oKXt2YXIgYT1LKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KzQpO3JldHVybiBhLT0yMDgyODQ0ODAwLHRoaXMucmVsYXRpdmVPZmZzZXQrPTgsYX0sUS5wcm90b3R5cGUucGFyc2VWZXJzaW9uPWZ1bmN0aW9uKGEpe3ZhciBiPUkodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpLGM9SSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCsyKTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9NCx2b2lkIDA9PT1hJiYoYT00MDk2KSxiK2MvYS8xMH0sUS5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTEpLHRoaXMucmVsYXRpdmVPZmZzZXQrPUplW2FdKmJ9LFEucHJvdG90eXBlLnBhcnNlVUxvbmdMaXN0PWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMucGFyc2VVTG9uZygpKTtmb3IodmFyIGI9bmV3IEFycmF5KGEpLGM9dGhpcy5kYXRhLGQ9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxlPTA7ZTxhO2UrKyliW2VdPWMuZ2V0VWludDMyKGQpLGQrPTQ7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTQqYSxifSxRLnByb3RvdHlwZS5wYXJzZU9mZnNldDE2TGlzdD1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydExpc3Q9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9dGhpcy5wYXJzZVVTaG9ydCgpKTtmb3IodmFyIGI9bmV3IEFycmF5KGEpLGM9dGhpcy5kYXRhLGQ9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxlPTA7ZTxhO2UrKyliW2VdPWMuZ2V0VWludDE2KGQpLGQrPTI7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIqYSxifSxRLnByb3RvdHlwZS5wYXJzZVNob3J0TGlzdD1mdW5jdGlvbihhKXtmb3IodmFyIGI9bmV3IEFycmF5KGEpLGM9dGhpcy5kYXRhLGQ9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxlPTA7ZTxhO2UrKyliW2VdPWMuZ2V0SW50MTYoZCksZCs9MjtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MiphLGJ9LFEucHJvdG90eXBlLnBhcnNlQnl0ZUxpc3Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldFVpbnQ4KGQrKyk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPWEsYn0sUS5wcm90b3R5cGUucGFyc2VMaXN0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztifHwoYj1hLGE9dGhpcy5wYXJzZVVTaG9ydCgpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9MDtlPGE7ZSsrKWRbZV09Yi5jYWxsKGMpO3JldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZUxpc3QzMj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Ynx8KGI9YSxhPXRoaXMucGFyc2VVTG9uZygpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9MDtlPGE7ZSsrKWRbZV09Yi5jYWxsKGMpO3JldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVJlY29yZExpc3Q9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2J8fChiPWEsYT10aGlzLnBhcnNlVVNob3J0KCkpO2Zvcih2YXIgZD1uZXcgQXJyYXkoYSksZT1PYmplY3Qua2V5cyhiKSxmPTA7ZjxhO2YrKyl7Zm9yKHZhciBnPXt9LGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGk9ZVtoXSxqPWJbaV07Z1tpXT1qLmNhbGwoYyl9ZFtmXT1nfXJldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVJlY29yZExpc3QzMj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Ynx8KGI9YSxhPXRoaXMucGFyc2VVTG9uZygpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9T2JqZWN0LmtleXMoYiksZj0wO2Y8YTtmKyspe2Zvcih2YXIgZz17fSxoPTA7aDxlLmxlbmd0aDtoKyspe3ZhciBpPWVbaF0saj1iW2ldO2dbaV09ai5jYWxsKGMpfWRbZl09Z31yZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VTdHJ1Y3Q9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhKXJldHVybiBhLmNhbGwodGhpcyk7Zm9yKHZhciBjPU9iamVjdC5rZXlzKGEpLGQ9e30sZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZj1jW2VdLGc9YVtmXTtkW2ZdPWcuY2FsbChiKX1yZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VWYWx1ZVJlY29yZD1mdW5jdGlvbihhKXtpZih2b2lkIDA9PT1hJiYoYT10aGlzLnBhcnNlVVNob3J0KCkpLDAhPT1hKXt2YXIgYj17fTtyZXR1cm4gMSZhJiYoYi54UGxhY2VtZW50PXRoaXMucGFyc2VTaG9ydCgpKSwyJmEmJihiLnlQbGFjZW1lbnQ9dGhpcy5wYXJzZVNob3J0KCkpLDQmYSYmKGIueEFkdmFuY2U9dGhpcy5wYXJzZVNob3J0KCkpLDgmYSYmKGIueUFkdmFuY2U9dGhpcy5wYXJzZVNob3J0KCkpLDE2JmEmJihiLnhQbGFEZXZpY2U9dm9pZCAwLHRoaXMucGFyc2VTaG9ydCgpKSwzMiZhJiYoYi55UGxhRGV2aWNlPXZvaWQgMCx0aGlzLnBhcnNlU2hvcnQoKSksNjQmYSYmKGIueEFkdkRldmljZT12b2lkIDAsdGhpcy5wYXJzZVNob3J0KCkpLDEyOCZhJiYoYi55QWR2RGV2aWNlPXZvaWQgMCx0aGlzLnBhcnNlU2hvcnQoKSksYn19LFEucHJvdG90eXBlLnBhcnNlVmFsdWVSZWNvcmRMaXN0PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMsYj10aGlzLnBhcnNlVVNob3J0KCksYz10aGlzLnBhcnNlVVNob3J0KCksZD1uZXcgQXJyYXkoYyksZT0wO2U8YztlKyspZFtlXT1hLnBhcnNlVmFsdWVSZWNvcmQoYik7cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlUG9pbnRlcj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnBhcnNlT2Zmc2V0MTYoKTtpZihiPjApcmV0dXJuIG5ldyBRKHRoaXMuZGF0YSx0aGlzLm9mZnNldCtiKS5wYXJzZVN0cnVjdChhKX0sUS5wcm90b3R5cGUucGFyc2VQb2ludGVyMzI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wYXJzZU9mZnNldDMyKCk7aWYoYj4wKXJldHVybiBuZXcgUSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrYikucGFyc2VTdHJ1Y3QoYSl9LFEucHJvdG90eXBlLnBhcnNlTGlzdE9mTGlzdHM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMsYz10aGlzLnBhcnNlT2Zmc2V0MTZMaXN0KCksZD1jLmxlbmd0aCxlPXRoaXMucmVsYXRpdmVPZmZzZXQsZj1uZXcgQXJyYXkoZCksZz0wO2c8ZDtnKyspe3ZhciBoPWNbZ107aWYoMCE9PWgpaWYoYi5yZWxhdGl2ZU9mZnNldD1oLGEpe2Zvcih2YXIgaT1iLnBhcnNlT2Zmc2V0MTZMaXN0KCksaj1uZXcgQXJyYXkoaS5sZW5ndGgpLGs9MDtrPGkubGVuZ3RoO2srKyliLnJlbGF0aXZlT2Zmc2V0PWgraVtrXSxqW2tdPWEuY2FsbChiKTtmW2ddPWp9ZWxzZSBmW2ddPWIucGFyc2VVU2hvcnRMaXN0KCk7ZWxzZSBmW2ddPXZvaWQgMH1yZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldD1lLGZ9LFEucHJvdG90eXBlLnBhcnNlQ292ZXJhZ2U9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxjPXRoaXMucGFyc2VVU2hvcnQoKSxkPXRoaXMucGFyc2VVU2hvcnQoKTtpZigxPT09YylyZXR1cm57Zm9ybWF0OjEsZ2x5cGhzOnRoaXMucGFyc2VVU2hvcnRMaXN0KGQpfTtpZigyPT09Yyl7Zm9yKHZhciBlPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyllW2ZdPXtzdGFydDphLnBhcnNlVVNob3J0KCksZW5kOmEucGFyc2VVU2hvcnQoKSxpbmRleDphLnBhcnNlVVNob3J0KCl9O3JldHVybntmb3JtYXQ6MixyYW5nZXM6ZX19dGhyb3cgbmV3IEVycm9yKFwiMHhcIitiLnRvU3RyaW5nKDE2KStcIjogQ292ZXJhZ2UgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKX0sUS5wcm90b3R5cGUucGFyc2VDbGFzc0RlZj1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWIpcmV0dXJue2Zvcm1hdDoxLHN0YXJ0R2x5cGg6dGhpcy5wYXJzZVVTaG9ydCgpLGNsYXNzZXM6dGhpcy5wYXJzZVVTaG9ydExpc3QoKX07aWYoMj09PWIpcmV0dXJue2Zvcm1hdDoyLHJhbmdlczp0aGlzLnBhcnNlUmVjb3JkTGlzdCh7c3RhcnQ6US51U2hvcnQsZW5kOlEudVNob3J0LGNsYXNzSWQ6US51U2hvcnR9KX07dGhyb3cgbmV3IEVycm9yKFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogQ2xhc3NEZWYgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKX0sUS5saXN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VMaXN0KGEsYil9fSxRLmxpc3QzMj1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlTGlzdDMyKGEsYil9fSxRLnJlY29yZExpc3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVJlY29yZExpc3QoYSxiKX19LFEucmVjb3JkTGlzdDMyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VSZWNvcmRMaXN0MzIoYSxiKX19LFEucG9pbnRlcj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoYSl9fSxRLnBvaW50ZXIzMj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIzMihhKX19LFEudGFnPVEucHJvdG90eXBlLnBhcnNlVGFnLFEuYnl0ZT1RLnByb3RvdHlwZS5wYXJzZUJ5dGUsUS51U2hvcnQ9US5vZmZzZXQxNj1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydCxRLnVTaG9ydExpc3Q9US5wcm90b3R5cGUucGFyc2VVU2hvcnRMaXN0LFEudUxvbmc9US5vZmZzZXQzMj1RLnByb3RvdHlwZS5wYXJzZVVMb25nLFEudUxvbmdMaXN0PVEucHJvdG90eXBlLnBhcnNlVUxvbmdMaXN0LFEuc3RydWN0PVEucHJvdG90eXBlLnBhcnNlU3RydWN0LFEuY292ZXJhZ2U9US5wcm90b3R5cGUucGFyc2VDb3ZlcmFnZSxRLmNsYXNzRGVmPVEucHJvdG90eXBlLnBhcnNlQ2xhc3NEZWY7dmFyIEtlPXtyZXNlcnZlZDpRLnVTaG9ydCxyZXFGZWF0dXJlSW5kZXg6US51U2hvcnQsZmVhdHVyZUluZGV4ZXM6US51U2hvcnRMaXN0fTtRLnByb3RvdHlwZS5wYXJzZVNjcmlwdExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoUS5yZWNvcmRMaXN0KHt0YWc6US50YWcsc2NyaXB0OlEucG9pbnRlcih7ZGVmYXVsdExhbmdTeXM6US5wb2ludGVyKEtlKSxsYW5nU3lzUmVjb3JkczpRLnJlY29yZExpc3Qoe3RhZzpRLnRhZyxsYW5nU3lzOlEucG9pbnRlcihLZSl9KX0pfSkpfHxbXX0sUS5wcm90b3R5cGUucGFyc2VGZWF0dXJlTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcihRLnJlY29yZExpc3Qoe3RhZzpRLnRhZyxmZWF0dXJlOlEucG9pbnRlcih7ZmVhdHVyZVBhcmFtczpRLm9mZnNldDE2LGxvb2t1cExpc3RJbmRleGVzOlEudVNob3J0TGlzdH0pfSkpfHxbXX0sUS5wcm90b3R5cGUucGFyc2VMb29rdXBMaXN0PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcihRLmxpc3QoUS5wb2ludGVyKGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wYXJzZVVTaG9ydCgpO3hlLmFyZ3VtZW50KDE8PWImJmI8PTksXCJHUE9TL0dTVUIgbG9va3VwIHR5cGUgXCIrYitcIiB1bmtub3duLlwiKTt2YXIgYz10aGlzLnBhcnNlVVNob3J0KCksZD0xNiZjO3JldHVybntsb29rdXBUeXBlOmIsbG9va3VwRmxhZzpjLHN1YnRhYmxlczp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoYVtiXSkpLG1hcmtGaWx0ZXJpbmdTZXQ6ZD90aGlzLnBhcnNlVVNob3J0KCk6dm9pZCAwfX0pKSl8fFtdfSxRLnByb3RvdHlwZS5wYXJzZUZlYXR1cmVWYXJpYXRpb25zTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcjMyKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpLGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSYmYjwxLFwiR1BPUy9HU1VCIGZlYXR1cmUgdmFyaWF0aW9ucyB0YWJsZSB1bmtub3duLlwiKSx0aGlzLnBhcnNlUmVjb3JkTGlzdDMyKHtjb25kaXRpb25TZXRPZmZzZXQ6US5vZmZzZXQzMixmZWF0dXJlVGFibGVTdWJzdGl0dXRpb25PZmZzZXQ6US5vZmZzZXQzMn0pfSl8fFtdfTt2YXIgTGU9e2dldEJ5dGU6SCxnZXRDYXJkODpILGdldFVTaG9ydDpJLGdldENhcmQxNjpJLGdldFNob3J0OkosZ2V0VUxvbmc6SyxnZXRGaXhlZDpMLGdldFRhZzpNLGdldE9mZnNldDpOLGdldEJ5dGVzOk8sYnl0ZXNUb1N0cmluZzpQLFBhcnNlcjpRfSxNZT17cGFyc2U6VCxtYWtlOld9LE5lPVtcIi5ub3RkZWZcIixcInNwYWNlXCIsXCJleGNsYW1cIixcInF1b3RlZGJsXCIsXCJudW1iZXJzaWduXCIsXCJkb2xsYXJcIixcInBlcmNlbnRcIixcImFtcGVyc2FuZFwiLFwicXVvdGVyaWdodFwiLFwicGFyZW5sZWZ0XCIsXCJwYXJlbnJpZ2h0XCIsXCJhc3Rlcmlza1wiLFwicGx1c1wiLFwiY29tbWFcIixcImh5cGhlblwiLFwicGVyaW9kXCIsXCJzbGFzaFwiLFwiemVyb1wiLFwib25lXCIsXCJ0d29cIixcInRocmVlXCIsXCJmb3VyXCIsXCJmaXZlXCIsXCJzaXhcIixcInNldmVuXCIsXCJlaWdodFwiLFwibmluZVwiLFwiY29sb25cIixcInNlbWljb2xvblwiLFwibGVzc1wiLFwiZXF1YWxcIixcImdyZWF0ZXJcIixcInF1ZXN0aW9uXCIsXCJhdFwiLFwiQVwiLFwiQlwiLFwiQ1wiLFwiRFwiLFwiRVwiLFwiRlwiLFwiR1wiLFwiSFwiLFwiSVwiLFwiSlwiLFwiS1wiLFwiTFwiLFwiTVwiLFwiTlwiLFwiT1wiLFwiUFwiLFwiUVwiLFwiUlwiLFwiU1wiLFwiVFwiLFwiVVwiLFwiVlwiLFwiV1wiLFwiWFwiLFwiWVwiLFwiWlwiLFwiYnJhY2tldGxlZnRcIixcImJhY2tzbGFzaFwiLFwiYnJhY2tldHJpZ2h0XCIsXCJhc2NpaWNpcmN1bVwiLFwidW5kZXJzY29yZVwiLFwicXVvdGVsZWZ0XCIsXCJhXCIsXCJiXCIsXCJjXCIsXCJkXCIsXCJlXCIsXCJmXCIsXCJnXCIsXCJoXCIsXCJpXCIsXCJqXCIsXCJrXCIsXCJsXCIsXCJtXCIsXCJuXCIsXCJvXCIsXCJwXCIsXCJxXCIsXCJyXCIsXCJzXCIsXCJ0XCIsXCJ1XCIsXCJ2XCIsXCJ3XCIsXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJicmFjZWxlZnRcIixcImJhclwiLFwiYnJhY2VyaWdodFwiLFwiYXNjaWl0aWxkZVwiLFwiZXhjbGFtZG93blwiLFwiY2VudFwiLFwic3RlcmxpbmdcIixcImZyYWN0aW9uXCIsXCJ5ZW5cIixcImZsb3JpblwiLFwic2VjdGlvblwiLFwiY3VycmVuY3lcIixcInF1b3Rlc2luZ2xlXCIsXCJxdW90ZWRibGxlZnRcIixcImd1aWxsZW1vdGxlZnRcIixcImd1aWxzaW5nbGxlZnRcIixcImd1aWxzaW5nbHJpZ2h0XCIsXCJmaVwiLFwiZmxcIixcImVuZGFzaFwiLFwiZGFnZ2VyXCIsXCJkYWdnZXJkYmxcIixcInBlcmlvZGNlbnRlcmVkXCIsXCJwYXJhZ3JhcGhcIixcImJ1bGxldFwiLFwicXVvdGVzaW5nbGJhc2VcIixcInF1b3RlZGJsYmFzZVwiLFwicXVvdGVkYmxyaWdodFwiLFwiZ3VpbGxlbW90cmlnaHRcIixcImVsbGlwc2lzXCIsXCJwZXJ0aG91c2FuZFwiLFwicXVlc3Rpb25kb3duXCIsXCJncmF2ZVwiLFwiYWN1dGVcIixcImNpcmN1bWZsZXhcIixcInRpbGRlXCIsXCJtYWNyb25cIixcImJyZXZlXCIsXCJkb3RhY2NlbnRcIixcImRpZXJlc2lzXCIsXCJyaW5nXCIsXCJjZWRpbGxhXCIsXCJodW5nYXJ1bWxhdXRcIixcIm9nb25la1wiLFwiY2Fyb25cIixcImVtZGFzaFwiLFwiQUVcIixcIm9yZGZlbWluaW5lXCIsXCJMc2xhc2hcIixcIk9zbGFzaFwiLFwiT0VcIixcIm9yZG1hc2N1bGluZVwiLFwiYWVcIixcImRvdGxlc3NpXCIsXCJsc2xhc2hcIixcIm9zbGFzaFwiLFwib2VcIixcImdlcm1hbmRibHNcIixcIm9uZXN1cGVyaW9yXCIsXCJsb2dpY2Fsbm90XCIsXCJtdVwiLFwidHJhZGVtYXJrXCIsXCJFdGhcIixcIm9uZWhhbGZcIixcInBsdXNtaW51c1wiLFwiVGhvcm5cIixcIm9uZXF1YXJ0ZXJcIixcImRpdmlkZVwiLFwiYnJva2VuYmFyXCIsXCJkZWdyZWVcIixcInRob3JuXCIsXCJ0aHJlZXF1YXJ0ZXJzXCIsXCJ0d29zdXBlcmlvclwiLFwicmVnaXN0ZXJlZFwiLFwibWludXNcIixcImV0aFwiLFwibXVsdGlwbHlcIixcInRocmVlc3VwZXJpb3JcIixcImNvcHlyaWdodFwiLFwiQWFjdXRlXCIsXCJBY2lyY3VtZmxleFwiLFwiQWRpZXJlc2lzXCIsXCJBZ3JhdmVcIixcIkFyaW5nXCIsXCJBdGlsZGVcIixcIkNjZWRpbGxhXCIsXCJFYWN1dGVcIixcIkVjaXJjdW1mbGV4XCIsXCJFZGllcmVzaXNcIixcIkVncmF2ZVwiLFwiSWFjdXRlXCIsXCJJY2lyY3VtZmxleFwiLFwiSWRpZXJlc2lzXCIsXCJJZ3JhdmVcIixcIk50aWxkZVwiLFwiT2FjdXRlXCIsXCJPY2lyY3VtZmxleFwiLFwiT2RpZXJlc2lzXCIsXCJPZ3JhdmVcIixcIk90aWxkZVwiLFwiU2Nhcm9uXCIsXCJVYWN1dGVcIixcIlVjaXJjdW1mbGV4XCIsXCJVZGllcmVzaXNcIixcIlVncmF2ZVwiLFwiWWFjdXRlXCIsXCJZZGllcmVzaXNcIixcIlpjYXJvblwiLFwiYWFjdXRlXCIsXCJhY2lyY3VtZmxleFwiLFwiYWRpZXJlc2lzXCIsXCJhZ3JhdmVcIixcImFyaW5nXCIsXCJhdGlsZGVcIixcImNjZWRpbGxhXCIsXCJlYWN1dGVcIixcImVjaXJjdW1mbGV4XCIsXCJlZGllcmVzaXNcIixcImVncmF2ZVwiLFwiaWFjdXRlXCIsXCJpY2lyY3VtZmxleFwiLFwiaWRpZXJlc2lzXCIsXCJpZ3JhdmVcIixcIm50aWxkZVwiLFwib2FjdXRlXCIsXCJvY2lyY3VtZmxleFwiLFwib2RpZXJlc2lzXCIsXCJvZ3JhdmVcIixcIm90aWxkZVwiLFwic2Nhcm9uXCIsXCJ1YWN1dGVcIixcInVjaXJjdW1mbGV4XCIsXCJ1ZGllcmVzaXNcIixcInVncmF2ZVwiLFwieWFjdXRlXCIsXCJ5ZGllcmVzaXNcIixcInpjYXJvblwiLFwiZXhjbGFtc21hbGxcIixcIkh1bmdhcnVtbGF1dHNtYWxsXCIsXCJkb2xsYXJvbGRzdHlsZVwiLFwiZG9sbGFyc3VwZXJpb3JcIixcImFtcGVyc2FuZHNtYWxsXCIsXCJBY3V0ZXNtYWxsXCIsXCJwYXJlbmxlZnRzdXBlcmlvclwiLFwicGFyZW5yaWdodHN1cGVyaW9yXCIsXCIyNjYgZmZcIixcIm9uZWRvdGVubGVhZGVyXCIsXCJ6ZXJvb2xkc3R5bGVcIixcIm9uZW9sZHN0eWxlXCIsXCJ0d29vbGRzdHlsZVwiLFwidGhyZWVvbGRzdHlsZVwiLFwiZm91cm9sZHN0eWxlXCIsXCJmaXZlb2xkc3R5bGVcIixcInNpeG9sZHN0eWxlXCIsXCJzZXZlbm9sZHN0eWxlXCIsXCJlaWdodG9sZHN0eWxlXCIsXCJuaW5lb2xkc3R5bGVcIixcImNvbW1hc3VwZXJpb3JcIixcInRocmVlcXVhcnRlcnNlbWRhc2hcIixcInBlcmlvZHN1cGVyaW9yXCIsXCJxdWVzdGlvbnNtYWxsXCIsXCJhc3VwZXJpb3JcIixcImJzdXBlcmlvclwiLFwiY2VudHN1cGVyaW9yXCIsXCJkc3VwZXJpb3JcIixcImVzdXBlcmlvclwiLFwiaXN1cGVyaW9yXCIsXCJsc3VwZXJpb3JcIixcIm1zdXBlcmlvclwiLFwibnN1cGVyaW9yXCIsXCJvc3VwZXJpb3JcIixcInJzdXBlcmlvclwiLFwic3N1cGVyaW9yXCIsXCJ0c3VwZXJpb3JcIixcImZmXCIsXCJmZmlcIixcImZmbFwiLFwicGFyZW5sZWZ0aW5mZXJpb3JcIixcInBhcmVucmlnaHRpbmZlcmlvclwiLFwiQ2lyY3VtZmxleHNtYWxsXCIsXCJoeXBoZW5zdXBlcmlvclwiLFwiR3JhdmVzbWFsbFwiLFwiQXNtYWxsXCIsXCJCc21hbGxcIixcIkNzbWFsbFwiLFwiRHNtYWxsXCIsXCJFc21hbGxcIixcIkZzbWFsbFwiLFwiR3NtYWxsXCIsXCJIc21hbGxcIixcIklzbWFsbFwiLFwiSnNtYWxsXCIsXCJLc21hbGxcIixcIkxzbWFsbFwiLFwiTXNtYWxsXCIsXCJOc21hbGxcIixcIk9zbWFsbFwiLFwiUHNtYWxsXCIsXCJRc21hbGxcIixcIlJzbWFsbFwiLFwiU3NtYWxsXCIsXCJUc21hbGxcIixcIlVzbWFsbFwiLFwiVnNtYWxsXCIsXCJXc21hbGxcIixcIlhzbWFsbFwiLFwiWXNtYWxsXCIsXCJac21hbGxcIixcImNvbG9ubW9uZXRhcnlcIixcIm9uZWZpdHRlZFwiLFwicnVwaWFoXCIsXCJUaWxkZXNtYWxsXCIsXCJleGNsYW1kb3duc21hbGxcIixcImNlbnRvbGRzdHlsZVwiLFwiTHNsYXNoc21hbGxcIixcIlNjYXJvbnNtYWxsXCIsXCJaY2Fyb25zbWFsbFwiLFwiRGllcmVzaXNzbWFsbFwiLFwiQnJldmVzbWFsbFwiLFwiQ2Fyb25zbWFsbFwiLFwiRG90YWNjZW50c21hbGxcIixcIk1hY3JvbnNtYWxsXCIsXCJmaWd1cmVkYXNoXCIsXCJoeXBoZW5pbmZlcmlvclwiLFwiT2dvbmVrc21hbGxcIixcIlJpbmdzbWFsbFwiLFwiQ2VkaWxsYXNtYWxsXCIsXCJxdWVzdGlvbmRvd25zbWFsbFwiLFwib25lZWlnaHRoXCIsXCJ0aHJlZWVpZ2h0aHNcIixcImZpdmVlaWdodGhzXCIsXCJzZXZlbmVpZ2h0aHNcIixcIm9uZXRoaXJkXCIsXCJ0d290aGlyZHNcIixcInplcm9zdXBlcmlvclwiLFwiZm91cnN1cGVyaW9yXCIsXCJmaXZlc3VwZXJpb3JcIixcInNpeHN1cGVyaW9yXCIsXCJzZXZlbnN1cGVyaW9yXCIsXCJlaWdodHN1cGVyaW9yXCIsXCJuaW5lc3VwZXJpb3JcIixcInplcm9pbmZlcmlvclwiLFwib25laW5mZXJpb3JcIixcInR3b2luZmVyaW9yXCIsXCJ0aHJlZWluZmVyaW9yXCIsXCJmb3VyaW5mZXJpb3JcIixcImZpdmVpbmZlcmlvclwiLFwic2l4aW5mZXJpb3JcIixcInNldmVuaW5mZXJpb3JcIixcImVpZ2h0aW5mZXJpb3JcIixcIm5pbmVpbmZlcmlvclwiLFwiY2VudGluZmVyaW9yXCIsXCJkb2xsYXJpbmZlcmlvclwiLFwicGVyaW9kaW5mZXJpb3JcIixcImNvbW1haW5mZXJpb3JcIixcIkFncmF2ZXNtYWxsXCIsXCJBYWN1dGVzbWFsbFwiLFwiQWNpcmN1bWZsZXhzbWFsbFwiLFwiQXRpbGRlc21hbGxcIixcIkFkaWVyZXNpc3NtYWxsXCIsXCJBcmluZ3NtYWxsXCIsXCJBRXNtYWxsXCIsXCJDY2VkaWxsYXNtYWxsXCIsXCJFZ3JhdmVzbWFsbFwiLFwiRWFjdXRlc21hbGxcIixcIkVjaXJjdW1mbGV4c21hbGxcIixcIkVkaWVyZXNpc3NtYWxsXCIsXCJJZ3JhdmVzbWFsbFwiLFwiSWFjdXRlc21hbGxcIixcIkljaXJjdW1mbGV4c21hbGxcIixcIklkaWVyZXNpc3NtYWxsXCIsXCJFdGhzbWFsbFwiLFwiTnRpbGRlc21hbGxcIixcIk9ncmF2ZXNtYWxsXCIsXCJPYWN1dGVzbWFsbFwiLFwiT2NpcmN1bWZsZXhzbWFsbFwiLFwiT3RpbGRlc21hbGxcIixcIk9kaWVyZXNpc3NtYWxsXCIsXCJPRXNtYWxsXCIsXCJPc2xhc2hzbWFsbFwiLFwiVWdyYXZlc21hbGxcIixcIlVhY3V0ZXNtYWxsXCIsXCJVY2lyY3VtZmxleHNtYWxsXCIsXCJVZGllcmVzaXNzbWFsbFwiLFwiWWFjdXRlc21hbGxcIixcIlRob3Juc21hbGxcIixcIllkaWVyZXNpc3NtYWxsXCIsXCIwMDEuMDAwXCIsXCIwMDEuMDAxXCIsXCIwMDEuMDAyXCIsXCIwMDEuMDAzXCIsXCJCbGFja1wiLFwiQm9sZFwiLFwiQm9va1wiLFwiTGlnaHRcIixcIk1lZGl1bVwiLFwiUmVndWxhclwiLFwiUm9tYW5cIixcIlNlbWlib2xkXCJdLE9lPVtcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJzcGFjZVwiLFwiZXhjbGFtXCIsXCJxdW90ZWRibFwiLFwibnVtYmVyc2lnblwiLFwiZG9sbGFyXCIsXCJwZXJjZW50XCIsXCJhbXBlcnNhbmRcIixcInF1b3RlcmlnaHRcIixcInBhcmVubGVmdFwiLFwicGFyZW5yaWdodFwiLFwiYXN0ZXJpc2tcIixcInBsdXNcIixcImNvbW1hXCIsXCJoeXBoZW5cIixcInBlcmlvZFwiLFwic2xhc2hcIixcInplcm9cIixcIm9uZVwiLFwidHdvXCIsXCJ0aHJlZVwiLFwiZm91clwiLFwiZml2ZVwiLFwic2l4XCIsXCJzZXZlblwiLFwiZWlnaHRcIixcIm5pbmVcIixcImNvbG9uXCIsXCJzZW1pY29sb25cIixcImxlc3NcIixcImVxdWFsXCIsXCJncmVhdGVyXCIsXCJxdWVzdGlvblwiLFwiYXRcIixcIkFcIixcIkJcIixcIkNcIixcIkRcIixcIkVcIixcIkZcIixcIkdcIixcIkhcIixcIklcIixcIkpcIixcIktcIixcIkxcIixcIk1cIixcIk5cIixcIk9cIixcIlBcIixcIlFcIixcIlJcIixcIlNcIixcIlRcIixcIlVcIixcIlZcIixcIldcIixcIlhcIixcIllcIixcIlpcIixcImJyYWNrZXRsZWZ0XCIsXCJiYWNrc2xhc2hcIixcImJyYWNrZXRyaWdodFwiLFwiYXNjaWljaXJjdW1cIixcInVuZGVyc2NvcmVcIixcInF1b3RlbGVmdFwiLFwiYVwiLFwiYlwiLFwiY1wiLFwiZFwiLFwiZVwiLFwiZlwiLFwiZ1wiLFwiaFwiLFwiaVwiLFwialwiLFwia1wiLFwibFwiLFwibVwiLFwiblwiLFwib1wiLFwicFwiLFwicVwiLFwiclwiLFwic1wiLFwidFwiLFwidVwiLFwidlwiLFwid1wiLFwieFwiLFwieVwiLFwielwiLFwiYnJhY2VsZWZ0XCIsXCJiYXJcIixcImJyYWNlcmlnaHRcIixcImFzY2lpdGlsZGVcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiZXhjbGFtZG93blwiLFwiY2VudFwiLFwic3RlcmxpbmdcIixcImZyYWN0aW9uXCIsXCJ5ZW5cIixcImZsb3JpblwiLFwic2VjdGlvblwiLFwiY3VycmVuY3lcIixcInF1b3Rlc2luZ2xlXCIsXCJxdW90ZWRibGxlZnRcIixcImd1aWxsZW1vdGxlZnRcIixcImd1aWxzaW5nbGxlZnRcIixcImd1aWxzaW5nbHJpZ2h0XCIsXCJmaVwiLFwiZmxcIixcIlwiLFwiZW5kYXNoXCIsXCJkYWdnZXJcIixcImRhZ2dlcmRibFwiLFwicGVyaW9kY2VudGVyZWRcIixcIlwiLFwicGFyYWdyYXBoXCIsXCJidWxsZXRcIixcInF1b3Rlc2luZ2xiYXNlXCIsXCJxdW90ZWRibGJhc2VcIixcInF1b3RlZGJscmlnaHRcIixcImd1aWxsZW1vdHJpZ2h0XCIsXCJlbGxpcHNpc1wiLFwicGVydGhvdXNhbmRcIixcIlwiLFwicXVlc3Rpb25kb3duXCIsXCJcIixcImdyYXZlXCIsXCJhY3V0ZVwiLFwiY2lyY3VtZmxleFwiLFwidGlsZGVcIixcIm1hY3JvblwiLFwiYnJldmVcIixcImRvdGFjY2VudFwiLFwiZGllcmVzaXNcIixcIlwiLFwicmluZ1wiLFwiY2VkaWxsYVwiLFwiXCIsXCJodW5nYXJ1bWxhdXRcIixcIm9nb25la1wiLFwiY2Fyb25cIixcImVtZGFzaFwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJBRVwiLFwiXCIsXCJvcmRmZW1pbmluZVwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJMc2xhc2hcIixcIk9zbGFzaFwiLFwiT0VcIixcIm9yZG1hc2N1bGluZVwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcImFlXCIsXCJcIixcIlwiLFwiXCIsXCJkb3RsZXNzaVwiLFwiXCIsXCJcIixcImxzbGFzaFwiLFwib3NsYXNoXCIsXCJvZVwiLFwiZ2VybWFuZGJsc1wiXSxQZT1bXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwic3BhY2VcIixcImV4Y2xhbXNtYWxsXCIsXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLFwiXCIsXCJkb2xsYXJvbGRzdHlsZVwiLFwiZG9sbGFyc3VwZXJpb3JcIixcImFtcGVyc2FuZHNtYWxsXCIsXCJBY3V0ZXNtYWxsXCIsXCJwYXJlbmxlZnRzdXBlcmlvclwiLFwicGFyZW5yaWdodHN1cGVyaW9yXCIsXCJ0d29kb3RlbmxlYWRlclwiLFwib25lZG90ZW5sZWFkZXJcIixcImNvbW1hXCIsXCJoeXBoZW5cIixcInBlcmlvZFwiLFwiZnJhY3Rpb25cIixcInplcm9vbGRzdHlsZVwiLFwib25lb2xkc3R5bGVcIixcInR3b29sZHN0eWxlXCIsXCJ0aHJlZW9sZHN0eWxlXCIsXCJmb3Vyb2xkc3R5bGVcIixcImZpdmVvbGRzdHlsZVwiLFwic2l4b2xkc3R5bGVcIixcInNldmVub2xkc3R5bGVcIixcImVpZ2h0b2xkc3R5bGVcIixcIm5pbmVvbGRzdHlsZVwiLFwiY29sb25cIixcInNlbWljb2xvblwiLFwiY29tbWFzdXBlcmlvclwiLFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLFwicGVyaW9kc3VwZXJpb3JcIixcInF1ZXN0aW9uc21hbGxcIixcIlwiLFwiYXN1cGVyaW9yXCIsXCJic3VwZXJpb3JcIixcImNlbnRzdXBlcmlvclwiLFwiZHN1cGVyaW9yXCIsXCJlc3VwZXJpb3JcIixcIlwiLFwiXCIsXCJpc3VwZXJpb3JcIixcIlwiLFwiXCIsXCJsc3VwZXJpb3JcIixcIm1zdXBlcmlvclwiLFwibnN1cGVyaW9yXCIsXCJvc3VwZXJpb3JcIixcIlwiLFwiXCIsXCJyc3VwZXJpb3JcIixcInNzdXBlcmlvclwiLFwidHN1cGVyaW9yXCIsXCJcIixcImZmXCIsXCJmaVwiLFwiZmxcIixcImZmaVwiLFwiZmZsXCIsXCJwYXJlbmxlZnRpbmZlcmlvclwiLFwiXCIsXCJwYXJlbnJpZ2h0aW5mZXJpb3JcIixcIkNpcmN1bWZsZXhzbWFsbFwiLFwiaHlwaGVuc3VwZXJpb3JcIixcIkdyYXZlc21hbGxcIixcIkFzbWFsbFwiLFwiQnNtYWxsXCIsXCJDc21hbGxcIixcIkRzbWFsbFwiLFwiRXNtYWxsXCIsXCJGc21hbGxcIixcIkdzbWFsbFwiLFwiSHNtYWxsXCIsXCJJc21hbGxcIixcIkpzbWFsbFwiLFwiS3NtYWxsXCIsXCJMc21hbGxcIixcIk1zbWFsbFwiLFwiTnNtYWxsXCIsXCJPc21hbGxcIixcIlBzbWFsbFwiLFwiUXNtYWxsXCIsXCJSc21hbGxcIixcIlNzbWFsbFwiLFwiVHNtYWxsXCIsXCJVc21hbGxcIixcIlZzbWFsbFwiLFwiV3NtYWxsXCIsXCJYc21hbGxcIixcIllzbWFsbFwiLFwiWnNtYWxsXCIsXCJjb2xvbm1vbmV0YXJ5XCIsXCJvbmVmaXR0ZWRcIixcInJ1cGlhaFwiLFwiVGlsZGVzbWFsbFwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJleGNsYW1kb3duc21hbGxcIixcImNlbnRvbGRzdHlsZVwiLFwiTHNsYXNoc21hbGxcIixcIlwiLFwiXCIsXCJTY2Fyb25zbWFsbFwiLFwiWmNhcm9uc21hbGxcIixcIkRpZXJlc2lzc21hbGxcIixcIkJyZXZlc21hbGxcIixcIkNhcm9uc21hbGxcIixcIlwiLFwiRG90YWNjZW50c21hbGxcIixcIlwiLFwiXCIsXCJNYWNyb25zbWFsbFwiLFwiXCIsXCJcIixcImZpZ3VyZWRhc2hcIixcImh5cGhlbmluZmVyaW9yXCIsXCJcIixcIlwiLFwiT2dvbmVrc21hbGxcIixcIlJpbmdzbWFsbFwiLFwiQ2VkaWxsYXNtYWxsXCIsXCJcIixcIlwiLFwiXCIsXCJvbmVxdWFydGVyXCIsXCJvbmVoYWxmXCIsXCJ0aHJlZXF1YXJ0ZXJzXCIsXCJxdWVzdGlvbmRvd25zbWFsbFwiLFwib25lZWlnaHRoXCIsXCJ0aHJlZWVpZ2h0aHNcIixcImZpdmVlaWdodGhzXCIsXCJzZXZlbmVpZ2h0aHNcIixcIm9uZXRoaXJkXCIsXCJ0d290aGlyZHNcIixcIlwiLFwiXCIsXCJ6ZXJvc3VwZXJpb3JcIixcIm9uZXN1cGVyaW9yXCIsXCJ0d29zdXBlcmlvclwiLFwidGhyZWVzdXBlcmlvclwiLFwiZm91cnN1cGVyaW9yXCIsXCJmaXZlc3VwZXJpb3JcIixcInNpeHN1cGVyaW9yXCIsXCJzZXZlbnN1cGVyaW9yXCIsXCJlaWdodHN1cGVyaW9yXCIsXCJuaW5lc3VwZXJpb3JcIixcInplcm9pbmZlcmlvclwiLFwib25laW5mZXJpb3JcIixcInR3b2luZmVyaW9yXCIsXCJ0aHJlZWluZmVyaW9yXCIsXCJmb3VyaW5mZXJpb3JcIixcImZpdmVpbmZlcmlvclwiLFwic2l4aW5mZXJpb3JcIixcInNldmVuaW5mZXJpb3JcIixcImVpZ2h0aW5mZXJpb3JcIixcIm5pbmVpbmZlcmlvclwiLFwiY2VudGluZmVyaW9yXCIsXCJkb2xsYXJpbmZlcmlvclwiLFwicGVyaW9kaW5mZXJpb3JcIixcImNvbW1haW5mZXJpb3JcIixcIkFncmF2ZXNtYWxsXCIsXCJBYWN1dGVzbWFsbFwiLFwiQWNpcmN1bWZsZXhzbWFsbFwiLFwiQXRpbGRlc21hbGxcIixcIkFkaWVyZXNpc3NtYWxsXCIsXCJBcmluZ3NtYWxsXCIsXCJBRXNtYWxsXCIsXCJDY2VkaWxsYXNtYWxsXCIsXCJFZ3JhdmVzbWFsbFwiLFwiRWFjdXRlc21hbGxcIixcIkVjaXJjdW1mbGV4c21hbGxcIixcIkVkaWVyZXNpc3NtYWxsXCIsXCJJZ3JhdmVzbWFsbFwiLFwiSWFjdXRlc21hbGxcIixcIkljaXJjdW1mbGV4c21hbGxcIixcIklkaWVyZXNpc3NtYWxsXCIsXCJFdGhzbWFsbFwiLFwiTnRpbGRlc21hbGxcIixcIk9ncmF2ZXNtYWxsXCIsXCJPYWN1dGVzbWFsbFwiLFwiT2NpcmN1bWZsZXhzbWFsbFwiLFwiT3RpbGRlc21hbGxcIixcIk9kaWVyZXNpc3NtYWxsXCIsXCJPRXNtYWxsXCIsXCJPc2xhc2hzbWFsbFwiLFwiVWdyYXZlc21hbGxcIixcIlVhY3V0ZXNtYWxsXCIsXCJVY2lyY3VtZmxleHNtYWxsXCIsXCJVZGllcmVzaXNzbWFsbFwiLFwiWWFjdXRlc21hbGxcIixcIlRob3Juc21hbGxcIixcIllkaWVyZXNpc3NtYWxsXCJdLFFlPVtcIi5ub3RkZWZcIixcIi5udWxsXCIsXCJub25tYXJraW5ncmV0dXJuXCIsXCJzcGFjZVwiLFwiZXhjbGFtXCIsXCJxdW90ZWRibFwiLFwibnVtYmVyc2lnblwiLFwiZG9sbGFyXCIsXCJwZXJjZW50XCIsXCJhbXBlcnNhbmRcIixcInF1b3Rlc2luZ2xlXCIsXCJwYXJlbmxlZnRcIixcInBhcmVucmlnaHRcIixcImFzdGVyaXNrXCIsXCJwbHVzXCIsXCJjb21tYVwiLFwiaHlwaGVuXCIsXCJwZXJpb2RcIixcInNsYXNoXCIsXCJ6ZXJvXCIsXCJvbmVcIixcInR3b1wiLFwidGhyZWVcIixcImZvdXJcIixcImZpdmVcIixcInNpeFwiLFwic2V2ZW5cIixcImVpZ2h0XCIsXCJuaW5lXCIsXCJjb2xvblwiLFwic2VtaWNvbG9uXCIsXCJsZXNzXCIsXCJlcXVhbFwiLFwiZ3JlYXRlclwiLFwicXVlc3Rpb25cIixcImF0XCIsXCJBXCIsXCJCXCIsXCJDXCIsXCJEXCIsXCJFXCIsXCJGXCIsXCJHXCIsXCJIXCIsXCJJXCIsXCJKXCIsXCJLXCIsXCJMXCIsXCJNXCIsXCJOXCIsXCJPXCIsXCJQXCIsXCJRXCIsXCJSXCIsXCJTXCIsXCJUXCIsXCJVXCIsXCJWXCIsXCJXXCIsXCJYXCIsXCJZXCIsXCJaXCIsXCJicmFja2V0bGVmdFwiLFwiYmFja3NsYXNoXCIsXCJicmFja2V0cmlnaHRcIixcImFzY2lpY2lyY3VtXCIsXCJ1bmRlcnNjb3JlXCIsXCJncmF2ZVwiLFwiYVwiLFwiYlwiLFwiY1wiLFwiZFwiLFwiZVwiLFwiZlwiLFwiZ1wiLFwiaFwiLFwiaVwiLFwialwiLFwia1wiLFwibFwiLFwibVwiLFwiblwiLFwib1wiLFwicFwiLFwicVwiLFwiclwiLFwic1wiLFwidFwiLFwidVwiLFwidlwiLFwid1wiLFwieFwiLFwieVwiLFwielwiLFwiYnJhY2VsZWZ0XCIsXCJiYXJcIixcImJyYWNlcmlnaHRcIixcImFzY2lpdGlsZGVcIixcIkFkaWVyZXNpc1wiLFwiQXJpbmdcIixcIkNjZWRpbGxhXCIsXCJFYWN1dGVcIixcIk50aWxkZVwiLFwiT2RpZXJlc2lzXCIsXCJVZGllcmVzaXNcIixcImFhY3V0ZVwiLFwiYWdyYXZlXCIsXCJhY2lyY3VtZmxleFwiLFwiYWRpZXJlc2lzXCIsXCJhdGlsZGVcIixcImFyaW5nXCIsXCJjY2VkaWxsYVwiLFwiZWFjdXRlXCIsXCJlZ3JhdmVcIixcImVjaXJjdW1mbGV4XCIsXCJlZGllcmVzaXNcIixcImlhY3V0ZVwiLFwiaWdyYXZlXCIsXCJpY2lyY3VtZmxleFwiLFwiaWRpZXJlc2lzXCIsXCJudGlsZGVcIixcIm9hY3V0ZVwiLFwib2dyYXZlXCIsXCJvY2lyY3VtZmxleFwiLFwib2RpZXJlc2lzXCIsXCJvdGlsZGVcIixcInVhY3V0ZVwiLFwidWdyYXZlXCIsXCJ1Y2lyY3VtZmxleFwiLFwidWRpZXJlc2lzXCIsXCJkYWdnZXJcIixcImRlZ3JlZVwiLFwiY2VudFwiLFwic3RlcmxpbmdcIixcInNlY3Rpb25cIixcImJ1bGxldFwiLFwicGFyYWdyYXBoXCIsXCJnZXJtYW5kYmxzXCIsXCJyZWdpc3RlcmVkXCIsXCJjb3B5cmlnaHRcIixcInRyYWRlbWFya1wiLFwiYWN1dGVcIixcImRpZXJlc2lzXCIsXCJub3RlcXVhbFwiLFwiQUVcIixcIk9zbGFzaFwiLFwiaW5maW5pdHlcIixcInBsdXNtaW51c1wiLFwibGVzc2VxdWFsXCIsXCJncmVhdGVyZXF1YWxcIixcInllblwiLFwibXVcIixcInBhcnRpYWxkaWZmXCIsXCJzdW1tYXRpb25cIixcInByb2R1Y3RcIixcInBpXCIsXCJpbnRlZ3JhbFwiLFwib3JkZmVtaW5pbmVcIixcIm9yZG1hc2N1bGluZVwiLFwiT21lZ2FcIixcImFlXCIsXCJvc2xhc2hcIixcInF1ZXN0aW9uZG93blwiLFwiZXhjbGFtZG93blwiLFwibG9naWNhbG5vdFwiLFwicmFkaWNhbFwiLFwiZmxvcmluXCIsXCJhcHByb3hlcXVhbFwiLFwiRGVsdGFcIixcImd1aWxsZW1vdGxlZnRcIixcImd1aWxsZW1vdHJpZ2h0XCIsXCJlbGxpcHNpc1wiLFwibm9uYnJlYWtpbmdzcGFjZVwiLFwiQWdyYXZlXCIsXCJBdGlsZGVcIixcIk90aWxkZVwiLFwiT0VcIixcIm9lXCIsXCJlbmRhc2hcIixcImVtZGFzaFwiLFwicXVvdGVkYmxsZWZ0XCIsXCJxdW90ZWRibHJpZ2h0XCIsXCJxdW90ZWxlZnRcIixcInF1b3RlcmlnaHRcIixcImRpdmlkZVwiLFwibG96ZW5nZVwiLFwieWRpZXJlc2lzXCIsXCJZZGllcmVzaXNcIixcImZyYWN0aW9uXCIsXCJjdXJyZW5jeVwiLFwiZ3VpbHNpbmdsbGVmdFwiLFwiZ3VpbHNpbmdscmlnaHRcIixcImZpXCIsXCJmbFwiLFwiZGFnZ2VyZGJsXCIsXCJwZXJpb2RjZW50ZXJlZFwiLFwicXVvdGVzaW5nbGJhc2VcIixcInF1b3RlZGJsYmFzZVwiLFwicGVydGhvdXNhbmRcIixcIkFjaXJjdW1mbGV4XCIsXCJFY2lyY3VtZmxleFwiLFwiQWFjdXRlXCIsXCJFZGllcmVzaXNcIixcIkVncmF2ZVwiLFwiSWFjdXRlXCIsXCJJY2lyY3VtZmxleFwiLFwiSWRpZXJlc2lzXCIsXCJJZ3JhdmVcIixcIk9hY3V0ZVwiLFwiT2NpcmN1bWZsZXhcIixcImFwcGxlXCIsXCJPZ3JhdmVcIixcIlVhY3V0ZVwiLFwiVWNpcmN1bWZsZXhcIixcIlVncmF2ZVwiLFwiZG90bGVzc2lcIixcImNpcmN1bWZsZXhcIixcInRpbGRlXCIsXCJtYWNyb25cIixcImJyZXZlXCIsXCJkb3RhY2NlbnRcIixcInJpbmdcIixcImNlZGlsbGFcIixcImh1bmdhcnVtbGF1dFwiLFwib2dvbmVrXCIsXCJjYXJvblwiLFwiTHNsYXNoXCIsXCJsc2xhc2hcIixcIlNjYXJvblwiLFwic2Nhcm9uXCIsXCJaY2Fyb25cIixcInpjYXJvblwiLFwiYnJva2VuYmFyXCIsXCJFdGhcIixcImV0aFwiLFwiWWFjdXRlXCIsXCJ5YWN1dGVcIixcIlRob3JuXCIsXCJ0aG9yblwiLFwibWludXNcIixcIm11bHRpcGx5XCIsXCJvbmVzdXBlcmlvclwiLFwidHdvc3VwZXJpb3JcIixcInRocmVlc3VwZXJpb3JcIixcIm9uZWhhbGZcIixcIm9uZXF1YXJ0ZXJcIixcInRocmVlcXVhcnRlcnNcIixcImZyYW5jXCIsXCJHYnJldmVcIixcImdicmV2ZVwiLFwiSWRvdGFjY2VudFwiLFwiU2NlZGlsbGFcIixcInNjZWRpbGxhXCIsXCJDYWN1dGVcIixcImNhY3V0ZVwiLFwiQ2Nhcm9uXCIsXCJjY2Fyb25cIixcImRjcm9hdFwiXTtYLnByb3RvdHlwZS5jaGFyVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3ZhciBiPWEuY29kZVBvaW50QXQoMCksYz10aGlzLmZvbnQuZ2x5cGhzO2lmKGMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKz0xKWZvcih2YXIgZT1jLmdldChkKSxmPTA7ZjxlLnVuaWNvZGVzLmxlbmd0aDtmKz0xKWlmKGUudW5pY29kZXNbZl09PT1iKXJldHVybiBkO3JldHVybiBudWxsfSxZLnByb3RvdHlwZS5jaGFyVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNtYXAuZ2x5cGhJbmRleE1hcFthLmNvZGVQb2ludEF0KDApXXx8MH0sWi5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXt2YXIgYj1hLmNvZGVQb2ludEF0KDApLGM9dGhpcy5lbmNvZGluZ1tiXTtyZXR1cm4gdGhpcy5jaGFyc2V0LmluZGV4T2YoYyl9LCQucHJvdG90eXBlLm5hbWVUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubmFtZXMuaW5kZXhPZihhKX0sJC5wcm90b3R5cGUuZ2x5cGhJbmRleFRvTmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5uYW1lc1thXX07dmFyIFJlPXtsaW5lOmFhfTtjYS5wcm90b3R5cGUuYmluZENvbnN0cnVjdG9yVmFsdWVzPWZ1bmN0aW9uKGEpe3RoaXMuaW5kZXg9YS5pbmRleHx8MCx0aGlzLm5hbWU9YS5uYW1lfHxudWxsLHRoaXMudW5pY29kZT1hLnVuaWNvZGV8fHZvaWQgMCx0aGlzLnVuaWNvZGVzPWEudW5pY29kZXN8fHZvaWQgMCE9PWEudW5pY29kZT9bYS51bmljb2RlXTpbXSxhLnhNaW4mJih0aGlzLnhNaW49YS54TWluKSxhLnlNaW4mJih0aGlzLnlNaW49YS55TWluKSxhLnhNYXgmJih0aGlzLnhNYXg9YS54TWF4KSxhLnlNYXgmJih0aGlzLnlNYXg9YS55TWF4KSxhLmFkdmFuY2VXaWR0aCYmKHRoaXMuYWR2YW5jZVdpZHRoPWEuYWR2YW5jZVdpZHRoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInBhdGhcIixiYSh0aGlzLGEucGF0aCkpfSxjYS5wcm90b3R5cGUuYWRkVW5pY29kZT1mdW5jdGlvbihhKXswPT09dGhpcy51bmljb2Rlcy5sZW5ndGgmJih0aGlzLnVuaWNvZGU9YSksdGhpcy51bmljb2Rlcy5wdXNoKGEpfSxjYS5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoLmdldEJvdW5kaW5nQm94KCl9LGNhLnByb3RvdHlwZS5nZXRQYXRoPWZ1bmN0aW9uKGEsYixjLGQsZSl7YT12b2lkIDAhPT1hP2E6MCxiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjcyO3ZhciBmLGc7ZHx8KGQ9e30pO3ZhciBoPWQueFNjYWxlLGk9ZC55U2NhbGU7aWYoZC5oaW50aW5nJiZlJiZlLmhpbnRpbmcmJihnPXRoaXMucGF0aCYmZS5oaW50aW5nLmV4ZWModGhpcyxjKSksZylmPWUuaGludGluZy5nZXRDb21tYW5kcyhnKSxhPU1hdGgucm91bmQoYSksYj1NYXRoLnJvdW5kKGIpLGg9aT0xO2Vsc2V7Zj10aGlzLnBhdGguY29tbWFuZHM7dmFyIGo9MS90aGlzLnBhdGgudW5pdHNQZXJFbSpjO3ZvaWQgMD09PWgmJihoPWopLHZvaWQgMD09PWkmJihpPWopfWZvcih2YXIgaz1uZXcgcixsPTA7bDxmLmxlbmd0aDtsKz0xKXt2YXIgbT1mW2xdO1wiTVwiPT09bS50eXBlP2subW92ZVRvKGErbS54KmgsYistbS55KmkpOlwiTFwiPT09bS50eXBlP2subGluZVRvKGErbS54KmgsYistbS55KmkpOlwiUVwiPT09bS50eXBlP2sucXVhZHJhdGljQ3VydmVUbyhhK20ueDEqaCxiKy1tLnkxKmksYSttLngqaCxiKy1tLnkqaSk6XCJDXCI9PT1tLnR5cGU/ay5jdXJ2ZVRvKGErbS54MSpoLGIrLW0ueTEqaSxhK20ueDIqaCxiKy1tLnkyKmksYSttLngqaCxiKy1tLnkqaSk6XCJaXCI9PT1tLnR5cGUmJmsuY2xvc2VQYXRoKCl9cmV0dXJuIGt9LGNhLnByb3RvdHlwZS5nZXRDb250b3Vycz1mdW5jdGlvbigpe3ZhciBhPXRoaXM7aWYodm9pZCAwPT09dGhpcy5wb2ludHMpcmV0dXJuW107Zm9yKHZhciBiPVtdLGM9W10sZD0wO2Q8dGhpcy5wb2ludHMubGVuZ3RoO2QrPTEpe3ZhciBlPWEucG9pbnRzW2RdO2MucHVzaChlKSxlLmxhc3RQb2ludE9mQ29udG91ciYmKGIucHVzaChjKSxjPVtdKX1yZXR1cm4geGUuYXJndW1lbnQoMD09PWMubGVuZ3RoLFwiVGhlcmUgYXJlIHN0aWxsIHBvaW50cyBsZWZ0IGluIHRoZSBjdXJyZW50IGNvbnRvdXIuXCIpLGJ9LGNhLnByb3RvdHlwZS5nZXRNZXRyaWNzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMucGF0aC5jb21tYW5kcyxiPVtdLGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXTtcIlpcIiE9PWUudHlwZSYmKGIucHVzaChlLngpLGMucHVzaChlLnkpKSxcIlFcIiE9PWUudHlwZSYmXCJDXCIhPT1lLnR5cGV8fChiLnB1c2goZS54MSksYy5wdXNoKGUueTEpKSxcIkNcIj09PWUudHlwZSYmKGIucHVzaChlLngyKSxjLnB1c2goZS55MikpfXZhciBmPXt4TWluOk1hdGgubWluLmFwcGx5KG51bGwsYikseU1pbjpNYXRoLm1pbi5hcHBseShudWxsLGMpLHhNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxiKSx5TWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsYyksbGVmdFNpZGVCZWFyaW5nOnRoaXMubGVmdFNpZGVCZWFyaW5nfTtyZXR1cm4gaXNGaW5pdGUoZi54TWluKXx8KGYueE1pbj0wKSxpc0Zpbml0ZShmLnhNYXgpfHwoZi54TWF4PXRoaXMuYWR2YW5jZVdpZHRoKSxpc0Zpbml0ZShmLnlNaW4pfHwoZi55TWluPTApLGlzRmluaXRlKGYueU1heCl8fChmLnlNYXg9MCksZi5yaWdodFNpZGVCZWFyaW5nPXRoaXMuYWR2YW5jZVdpZHRoLWYubGVmdFNpZGVCZWFyaW5nLShmLnhNYXgtZi54TWluKSxmfSxjYS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihhLGIsYyxkLGUpe3RoaXMuZ2V0UGF0aChiLGMsZCxlKS5kcmF3KGEpfSxjYS5wcm90b3R5cGUuZHJhd1BvaW50cz1mdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBlKGIsYyxkLGUpe3ZhciBmPTIqTWF0aC5QSTthLmJlZ2luUGF0aCgpO2Zvcih2YXIgZz0wO2c8Yi5sZW5ndGg7Zys9MSlhLm1vdmVUbyhjK2JbZ10ueCplLGQrYltnXS55KmUpLGEuYXJjKGMrYltnXS54KmUsZCtiW2ddLnkqZSwyLDAsZiwhMSk7YS5jbG9zZVBhdGgoKSxhLmZpbGwoKX1iPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD12b2lkIDAhPT1kP2Q6MjQ7Zm9yKHZhciBmPTEvdGhpcy5wYXRoLnVuaXRzUGVyRW0qZCxnPVtdLGg9W10saT10aGlzLnBhdGgsaj0wO2o8aS5jb21tYW5kcy5sZW5ndGg7ais9MSl7dmFyIGs9aS5jb21tYW5kc1tqXTt2b2lkIDAhPT1rLngmJmcucHVzaCh7eDprLngseTotay55fSksdm9pZCAwIT09ay54MSYmaC5wdXNoKHt4OmsueDEseTotay55MX0pLHZvaWQgMCE9PWsueDImJmgucHVzaCh7eDprLngyLHk6LWsueTJ9KX1hLmZpbGxTdHlsZT1cImJsdWVcIixlKGcsYixjLGYpLGEuZmlsbFN0eWxlPVwicmVkXCIsZShoLGIsYyxmKX0sY2EucHJvdG90eXBlLmRyYXdNZXRyaWNzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlO2I9dm9pZCAwIT09Yj9iOjAsYz12b2lkIDAhPT1jP2M6MCxkPXZvaWQgMCE9PWQ/ZDoyNCxlPTEvdGhpcy5wYXRoLnVuaXRzUGVyRW0qZCxhLmxpbmVXaWR0aD0xLGEuc3Ryb2tlU3R5bGU9XCJibGFja1wiLFJlLmxpbmUoYSxiLC0xZTQsYiwxZTQpLFJlLmxpbmUoYSwtMWU0LGMsMWU0LGMpO3ZhciBmPXRoaXMueE1pbnx8MCxnPXRoaXMueU1pbnx8MCxoPXRoaXMueE1heHx8MCxpPXRoaXMueU1heHx8MCxqPXRoaXMuYWR2YW5jZVdpZHRofHwwO2Euc3Ryb2tlU3R5bGU9XCJibHVlXCIsUmUubGluZShhLGIrZiplLC0xZTQsYitmKmUsMWU0KSxSZS5saW5lKGEsYitoKmUsLTFlNCxiK2gqZSwxZTQpLFJlLmxpbmUoYSwtMWU0LGMrLWcqZSwxZTQsYystZyplKSxSZS5saW5lKGEsLTFlNCxjKy1pKmUsMWU0LGMrLWkqZSksYS5zdHJva2VTdHlsZT1cImdyZWVuXCIsUmUubGluZShhLGIraiplLC0xZTQsYitqKmUsMWU0KX0sZWEucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmdseXBoc1thXSYmKHRoaXMuZ2x5cGhzW2FdPXRoaXMuZ2x5cGhzW2FdKCkpLHRoaXMuZ2x5cGhzW2FdfSxlYS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihhLGIpe3RoaXMuZ2x5cGhzW2FdPWIsdGhpcy5sZW5ndGgrK307dmFyIFNlPXtHbHlwaFNldDplYSxnbHlwaExvYWRlcjpmYSx0dGZHbHlwaExvYWRlcjpnYSxjZmZHbHlwaExvYWRlcjpoYX0sVGU9W3tuYW1lOlwidmVyc2lvblwiLG9wOjAsdHlwZTpcIlNJRFwifSx7bmFtZTpcIm5vdGljZVwiLG9wOjEsdHlwZTpcIlNJRFwifSx7bmFtZTpcImNvcHlyaWdodFwiLG9wOjEyMDAsdHlwZTpcIlNJRFwifSx7bmFtZTpcImZ1bGxOYW1lXCIsb3A6Mix0eXBlOlwiU0lEXCJ9LHtuYW1lOlwiZmFtaWx5TmFtZVwiLG9wOjMsdHlwZTpcIlNJRFwifSx7bmFtZTpcIndlaWdodFwiLG9wOjQsdHlwZTpcIlNJRFwifSx7bmFtZTpcImlzRml4ZWRQaXRjaFwiLG9wOjEyMDEsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwiaXRhbGljQW5nbGVcIixvcDoxMjAyLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcInVuZGVybGluZVBvc2l0aW9uXCIsb3A6MTIwMyx0eXBlOlwibnVtYmVyXCIsdmFsdWU6LTEwMH0se25hbWU6XCJ1bmRlcmxpbmVUaGlja25lc3NcIixvcDoxMjA0LHR5cGU6XCJudW1iZXJcIix2YWx1ZTo1MH0se25hbWU6XCJwYWludFR5cGVcIixvcDoxMjA1LHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNoYXJzdHJpbmdUeXBlXCIsb3A6MTIwNix0eXBlOlwibnVtYmVyXCIsdmFsdWU6Mn0se25hbWU6XCJmb250TWF0cml4XCIsb3A6MTIwNyx0eXBlOltcInJlYWxcIixcInJlYWxcIixcInJlYWxcIixcInJlYWxcIixcInJlYWxcIixcInJlYWxcIl0sdmFsdWU6Wy4wMDEsMCwwLC4wMDEsMCwwXX0se25hbWU6XCJ1bmlxdWVJZFwiLG9wOjEzLHR5cGU6XCJudW1iZXJcIn0se25hbWU6XCJmb250QkJveFwiLG9wOjUsdHlwZTpbXCJudW1iZXJcIixcIm51bWJlclwiLFwibnVtYmVyXCIsXCJudW1iZXJcIl0sdmFsdWU6WzAsMCwwLDBdfSx7bmFtZTpcInN0cm9rZVdpZHRoXCIsb3A6MTIwOCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJ4dWlkXCIsb3A6MTQsdHlwZTpbXSx2YWx1ZTpudWxsfSx7bmFtZTpcImNoYXJzZXRcIixvcDoxNSx0eXBlOlwib2Zmc2V0XCIsdmFsdWU6MH0se25hbWU6XCJlbmNvZGluZ1wiLG9wOjE2LHR5cGU6XCJvZmZzZXRcIix2YWx1ZTowfSx7bmFtZTpcImNoYXJTdHJpbmdzXCIsb3A6MTcsdHlwZTpcIm9mZnNldFwiLHZhbHVlOjB9LHtuYW1lOlwicHJpdmF0ZVwiLG9wOjE4LHR5cGU6W1wibnVtYmVyXCIsXCJvZmZzZXRcIl0sdmFsdWU6WzAsMF19LHtuYW1lOlwicm9zXCIsb3A6MTIzMCx0eXBlOltcIlNJRFwiLFwiU0lEXCIsXCJudW1iZXJcIl19LHtuYW1lOlwiY2lkRm9udFZlcnNpb25cIixvcDoxMjMxLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNpZEZvbnRSZXZpc2lvblwiLG9wOjEyMzIsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwiY2lkRm9udFR5cGVcIixvcDoxMjMzLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNpZENvdW50XCIsb3A6MTIzNCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6ODcyMH0se25hbWU6XCJ1aWRCYXNlXCIsb3A6MTIzNSx0eXBlOlwibnVtYmVyXCJ9LHtuYW1lOlwiZmRBcnJheVwiLG9wOjEyMzYsdHlwZTpcIm9mZnNldFwifSx7bmFtZTpcImZkU2VsZWN0XCIsb3A6MTIzNyx0eXBlOlwib2Zmc2V0XCJ9LHtuYW1lOlwiZm9udE5hbWVcIixvcDoxMjM4LHR5cGU6XCJTSURcIn1dLFVlPVt7bmFtZTpcInN1YnJzXCIsb3A6MTksdHlwZTpcIm9mZnNldFwiLHZhbHVlOjB9LHtuYW1lOlwiZGVmYXVsdFdpZHRoWFwiLG9wOjIwLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcIm5vbWluYWxXaWR0aFhcIixvcDoyMSx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH1dLFZlPXtwYXJzZTp6YSxtYWtlOk1hfSxXZT17cGFyc2U6TmEsbWFrZTpPYX0sWGU9e3BhcnNlOlBhLG1ha2U6UWF9LFllPXtwYXJzZTpSYSxtYWtlOlNhfSxaZT17bWFrZTpUYSxwYXJzZTpVYX0sJGU9e3BhcnNlOlZhLG1ha2U6V2F9LF9lPVtcImNvcHlyaWdodFwiLFwiZm9udEZhbWlseVwiLFwiZm9udFN1YmZhbWlseVwiLFwidW5pcXVlSURcIixcImZ1bGxOYW1lXCIsXCJ2ZXJzaW9uXCIsXCJwb3N0U2NyaXB0TmFtZVwiLFwidHJhZGVtYXJrXCIsXCJtYW51ZmFjdHVyZXJcIixcImRlc2lnbmVyXCIsXCJkZXNjcmlwdGlvblwiLFwibWFudWZhY3R1cmVyVVJMXCIsXCJkZXNpZ25lclVSTFwiLFwibGljZW5zZVwiLFwibGljZW5zZVVSTFwiLFwicmVzZXJ2ZWRcIixcInByZWZlcnJlZEZhbWlseVwiLFwicHJlZmVycmVkU3ViZmFtaWx5XCIsXCJjb21wYXRpYmxlRnVsbE5hbWVcIixcInNhbXBsZVRleHRcIixcInBvc3RTY3JpcHRGaW5kRm9udE5hbWVcIixcInd3c0ZhbWlseVwiLFwid3dzU3ViZmFtaWx5XCJdLGFmPXswOlwiZW5cIiwxOlwiZnJcIiwyOlwiZGVcIiwzOlwiaXRcIiw0OlwibmxcIiw1Olwic3ZcIiw2OlwiZXNcIiw3OlwiZGFcIiw4OlwicHRcIiw5Olwibm9cIiwxMDpcImhlXCIsMTE6XCJqYVwiLDEyOlwiYXJcIiwxMzpcImZpXCIsMTQ6XCJlbFwiLDE1OlwiaXNcIiwxNjpcIm10XCIsMTc6XCJ0clwiLDE4OlwiaHJcIiwxOTpcInpoLUhhbnRcIiwyMDpcInVyXCIsMjE6XCJoaVwiLDIyOlwidGhcIiwyMzpcImtvXCIsMjQ6XCJsdFwiLDI1OlwicGxcIiwyNjpcImh1XCIsMjc6XCJlc1wiLDI4OlwibHZcIiwyOTpcInNlXCIsMzA6XCJmb1wiLDMxOlwiZmFcIiwzMjpcInJ1XCIsMzM6XCJ6aFwiLDM0OlwibmwtQkVcIiwzNTpcImdhXCIsMzY6XCJzcVwiLDM3Olwicm9cIiwzODpcImN6XCIsMzk6XCJza1wiLDQwOlwic2lcIiw0MTpcInlpXCIsNDI6XCJzclwiLDQzOlwibWtcIiw0NDpcImJnXCIsNDU6XCJ1a1wiLDQ2OlwiYmVcIiw0NzpcInV6XCIsNDg6XCJra1wiLDQ5OlwiYXotQ3lybFwiLDUwOlwiYXotQXJhYlwiLDUxOlwiaHlcIiw1MjpcImthXCIsNTM6XCJtb1wiLDU0Olwia3lcIiw1NTpcInRnXCIsNTY6XCJ0a1wiLDU3OlwibW4tQ05cIiw1ODpcIm1uXCIsNTk6XCJwc1wiLDYwOlwia3NcIiw2MTpcImt1XCIsNjI6XCJzZFwiLDYzOlwiYm9cIiw2NDpcIm5lXCIsNjU6XCJzYVwiLDY2OlwibXJcIiw2NzpcImJuXCIsNjg6XCJhc1wiLDY5OlwiZ3VcIiw3MDpcInBhXCIsNzE6XCJvclwiLDcyOlwibWxcIiw3MzpcImtuXCIsNzQ6XCJ0YVwiLDc1OlwidGVcIiw3NjpcInNpXCIsNzc6XCJteVwiLDc4Olwia21cIiw3OTpcImxvXCIsODA6XCJ2aVwiLDgxOlwiaWRcIiw4MjpcInRsXCIsODM6XCJtc1wiLDg0OlwibXMtQXJhYlwiLDg1OlwiYW1cIiw4NjpcInRpXCIsODc6XCJvbVwiLDg4Olwic29cIiw4OTpcInN3XCIsOTA6XCJyd1wiLDkxOlwicm5cIiw5MjpcIm55XCIsOTM6XCJtZ1wiLDk0OlwiZW9cIiwxMjg6XCJjeVwiLDEyOTpcImV1XCIsMTMwOlwiY2FcIiwxMzE6XCJsYVwiLDEzMjpcInF1XCIsMTMzOlwiZ25cIiwxMzQ6XCJheVwiLDEzNTpcInR0XCIsMTM2OlwidWdcIiwxMzc6XCJkelwiLDEzODpcImp2XCIsMTM5Olwic3VcIiwxNDA6XCJnbFwiLDE0MTpcImFmXCIsMTQyOlwiYnJcIiwxNDM6XCJpdVwiLDE0NDpcImdkXCIsMTQ1OlwiZ3ZcIiwxNDY6XCJnYVwiLDE0NzpcInRvXCIsMTQ4OlwiZWwtcG9seXRvblwiLDE0OTpcImtsXCIsMTUwOlwiYXpcIiwxNTE6XCJublwifSxiZj17MDowLDE6MCwyOjAsMzowLDQ6MCw1OjAsNjowLDc6MCw4OjAsOTowLDEwOjUsMTE6MSwxMjo0LDEzOjAsMTQ6NiwxNTowLDE2OjAsMTc6MCwxODowLDE5OjIsMjA6NCxcbjIxOjksMjI6MjEsMjM6MywyNDoyOSwyNToyOSwyNjoyOSwyNzoyOSwyODoyOSwyOTowLDMwOjAsMzE6NCwzMjo3LDMzOjI1LDM0OjAsMzU6MCwzNjowLDM3OjAsMzg6MjksMzk6MjksNDA6MCw0MTo1LDQyOjcsNDM6Nyw0NDo3LDQ1OjcsNDY6Nyw0Nzo3LDQ4OjcsNDk6Nyw1MDo0LDUxOjI0LDUyOjIzLDUzOjcsNTQ6Nyw1NTo3LDU2OjcsNTc6MjcsNTg6Nyw1OTo0LDYwOjQsNjE6NCw2Mjo0LDYzOjI2LDY0OjksNjU6OSw2Njo5LDY3OjEzLDY4OjEzLDY5OjExLDcwOjEwLDcxOjEyLDcyOjE3LDczOjE2LDc0OjE0LDc1OjE1LDc2OjE4LDc3OjE5LDc4OjIwLDc5OjIyLDgwOjMwLDgxOjAsODI6MCw4MzowLDg0OjQsODU6MjgsODY6MjgsODc6MjgsODg6MCw4OTowLDkwOjAsOTE6MCw5MjowLDkzOjAsOTQ6MCwxMjg6MCwxMjk6MCwxMzA6MCwxMzE6MCwxMzI6MCwxMzM6MCwxMzQ6MCwxMzU6NywxMzY6NCwxMzc6MjYsMTM4OjAsMTM5OjAsMTQwOjAsMTQxOjAsMTQyOjAsMTQzOjI4LDE0NDowLDE0NTowLDE0NjowLDE0NzowLDE0ODo2LDE0OTowLDE1MDowLDE1MTowfSxjZj17MTA3ODpcImFmXCIsMTA1MjpcInNxXCIsMTE1NjpcImdzd1wiLDExMTg6XCJhbVwiLDUxMjE6XCJhci1EWlwiLDE1MzYxOlwiYXItQkhcIiwzMDczOlwiYXJcIiwyMDQ5OlwiYXItSVFcIiwxMTI2NTpcImFyLUpPXCIsMTMzMTM6XCJhci1LV1wiLDEyMjg5OlwiYXItTEJcIiw0MDk3OlwiYXItTFlcIiw2MTQ1OlwiYXJ5XCIsODE5MzpcImFyLU9NXCIsMTYzODU6XCJhci1RQVwiLDEwMjU6XCJhci1TQVwiLDEwMjQxOlwiYXItU1lcIiw3MTY5OlwiYWViXCIsMTQzMzc6XCJhci1BRVwiLDkyMTc6XCJhci1ZRVwiLDEwNjc6XCJoeVwiLDExMDE6XCJhc1wiLDIwOTI6XCJhei1DeXJsXCIsMTA2ODpcImF6XCIsMTEzMzpcImJhXCIsMTA2OTpcImV1XCIsMTA1OTpcImJlXCIsMjExNzpcImJuXCIsMTA5MzpcImJuLUlOXCIsODIxODpcImJzLUN5cmxcIiw1MTQ2OlwiYnNcIiwxMTUwOlwiYnJcIiwxMDI2OlwiYmdcIiwxMDI3OlwiY2FcIiwzMDc2OlwiemgtSEtcIiw1MTI0OlwiemgtTU9cIiwyMDUyOlwiemhcIiw0MTAwOlwiemgtU0dcIiwxMDI4OlwiemgtVFdcIiwxMTU1OlwiY29cIiwxMDUwOlwiaHJcIiw0MTIyOlwiaHItQkFcIiwxMDI5OlwiY3NcIiwxMDMwOlwiZGFcIiwxMTY0OlwicHJzXCIsMTEyNTpcImR2XCIsMjA2NzpcIm5sLUJFXCIsMTA0MzpcIm5sXCIsMzA4MTpcImVuLUFVXCIsMTAyNDk6XCJlbi1CWlwiLDQxMDU6XCJlbi1DQVwiLDkyMjU6XCJlbi0wMjlcIiwxNjM5MzpcImVuLUlOXCIsNjE1MzpcImVuLUlFXCIsODIwMTpcImVuLUpNXCIsMTc0MTc6XCJlbi1NWVwiLDUxMjk6XCJlbi1OWlwiLDEzMzIxOlwiZW4tUEhcIiwxODQ0MTpcImVuLVNHXCIsNzE3NzpcImVuLVpBXCIsMTEyNzM6XCJlbi1UVFwiLDIwNTc6XCJlbi1HQlwiLDEwMzM6XCJlblwiLDEyMjk3OlwiZW4tWldcIiwxMDYxOlwiZXRcIiwxMDgwOlwiZm9cIiwxMTI0OlwiZmlsXCIsMTAzNTpcImZpXCIsMjA2MDpcImZyLUJFXCIsMzA4NDpcImZyLUNBXCIsMTAzNjpcImZyXCIsNTEzMjpcImZyLUxVXCIsNjE1NjpcImZyLU1DXCIsNDEwODpcImZyLUNIXCIsMTEyMjpcImZ5XCIsMTExMDpcImdsXCIsMTA3OTpcImthXCIsMzA3OTpcImRlLUFUXCIsMTAzMTpcImRlXCIsNTEyNzpcImRlLUxJXCIsNDEwMzpcImRlLUxVXCIsMjA1NTpcImRlLUNIXCIsMTAzMjpcImVsXCIsMTEzNTpcImtsXCIsMTA5NTpcImd1XCIsMTEyODpcImhhXCIsMTAzNzpcImhlXCIsMTA4MTpcImhpXCIsMTAzODpcImh1XCIsMTAzOTpcImlzXCIsMTEzNjpcImlnXCIsMTA1NzpcImlkXCIsMTExNzpcIml1XCIsMjE0MTpcIml1LUxhdG5cIiwyMTA4OlwiZ2FcIiwxMDc2OlwieGhcIiwxMDc3OlwienVcIiwxMDQwOlwiaXRcIiwyMDY0OlwiaXQtQ0hcIiwxMDQxOlwiamFcIiwxMDk5Olwia25cIiwxMDg3Olwia2tcIiwxMTA3Olwia21cIiwxMTU4OlwicXVjXCIsMTE1OTpcInJ3XCIsMTA4OTpcInN3XCIsMTExMTpcImtva1wiLDEwNDI6XCJrb1wiLDEwODg6XCJreVwiLDExMDg6XCJsb1wiLDEwNjI6XCJsdlwiLDEwNjM6XCJsdFwiLDIwOTQ6XCJkc2JcIiwxMTM0OlwibGJcIiwxMDcxOlwibWtcIiwyMTEwOlwibXMtQk5cIiwxMDg2OlwibXNcIiwxMTAwOlwibWxcIiwxMDgyOlwibXRcIiwxMTUzOlwibWlcIiwxMTQ2OlwiYXJuXCIsMTEwMjpcIm1yXCIsMTE0ODpcIm1vaFwiLDExMDQ6XCJtblwiLDIxMjg6XCJtbi1DTlwiLDExMjE6XCJuZVwiLDEwNDQ6XCJuYlwiLDIwNjg6XCJublwiLDExNTQ6XCJvY1wiLDEwOTY6XCJvclwiLDExMjM6XCJwc1wiLDEwNDU6XCJwbFwiLDEwNDY6XCJwdFwiLDIwNzA6XCJwdC1QVFwiLDEwOTQ6XCJwYVwiLDExMzE6XCJxdS1CT1wiLDIxNTU6XCJxdS1FQ1wiLDMxNzk6XCJxdVwiLDEwNDg6XCJyb1wiLDEwNDc6XCJybVwiLDEwNDk6XCJydVwiLDkyNzU6XCJzbW5cIiw0MTU1Olwic21qLU5PXCIsNTE3OTpcInNtalwiLDMxMzE6XCJzZS1GSVwiLDEwODM6XCJzZVwiLDIxMDc6XCJzZS1TRVwiLDgyNTE6XCJzbXNcIiw2MjAzOlwic21hLU5PXCIsNzIyNzpcInNtc1wiLDExMDM6XCJzYVwiLDcxOTQ6XCJzci1DeXJsLUJBXCIsMzA5ODpcInNyXCIsNjE3MDpcInNyLUxhdG4tQkFcIiwyMDc0Olwic3ItTGF0blwiLDExMzI6XCJuc29cIiwxMDc0OlwidG5cIiwxMTE1Olwic2lcIiwxMDUxOlwic2tcIiwxMDYwOlwic2xcIiwxMTI3NDpcImVzLUFSXCIsMTYzOTQ6XCJlcy1CT1wiLDEzMzIyOlwiZXMtQ0xcIiw5MjI2OlwiZXMtQ09cIiw1MTMwOlwiZXMtQ1JcIiw3MTc4OlwiZXMtRE9cIiwxMjI5ODpcImVzLUVDXCIsMTc0MTg6XCJlcy1TVlwiLDQxMDY6XCJlcy1HVFwiLDE4NDQyOlwiZXMtSE5cIiwyMDU4OlwiZXMtTVhcIiwxOTQ2NjpcImVzLU5JXCIsNjE1NDpcImVzLVBBXCIsMTUzNzA6XCJlcy1QWVwiLDEwMjUwOlwiZXMtUEVcIiwyMDQ5MDpcImVzLVBSXCIsMzA4MjpcImVzXCIsMTAzNDpcImVzXCIsMjE1MTQ6XCJlcy1VU1wiLDE0MzQ2OlwiZXMtVVlcIiw4MjAyOlwiZXMtVkVcIiwyMDc3Olwic3YtRklcIiwxMDUzOlwic3ZcIiwxMTE0Olwic3lyXCIsMTA2NDpcInRnXCIsMjE0MzpcInR6bVwiLDEwOTc6XCJ0YVwiLDEwOTI6XCJ0dFwiLDEwOTg6XCJ0ZVwiLDEwNTQ6XCJ0aFwiLDExMDU6XCJib1wiLDEwNTU6XCJ0clwiLDEwOTA6XCJ0a1wiLDExNTI6XCJ1Z1wiLDEwNTg6XCJ1a1wiLDEwNzA6XCJoc2JcIiwxMDU2OlwidXJcIiwyMTE1OlwidXotQ3lybFwiLDEwOTE6XCJ1elwiLDEwNjY6XCJ2aVwiLDExMDY6XCJjeVwiLDExNjA6XCJ3b1wiLDExNTc6XCJzYWhcIiwxMTQ0OlwiaWlcIiwxMTMwOlwieW9cIn0sZGY9XCJ1dGYtMTZcIixlZj17MDpcIm1hY2ludG9zaFwiLDE6XCJ4LW1hYy1qYXBhbmVzZVwiLDI6XCJ4LW1hYy1jaGluZXNldHJhZFwiLDM6XCJ4LW1hYy1rb3JlYW5cIiw2OlwieC1tYWMtZ3JlZWtcIiw3OlwieC1tYWMtY3lyaWxsaWNcIiw5OlwieC1tYWMtZGV2YW5hZ2FpXCIsMTA6XCJ4LW1hYy1ndXJtdWtoaVwiLDExOlwieC1tYWMtZ3VqYXJhdGlcIiwxMjpcIngtbWFjLW9yaXlhXCIsMTM6XCJ4LW1hYy1iZW5nYWxpXCIsMTQ6XCJ4LW1hYy10YW1pbFwiLDE1OlwieC1tYWMtdGVsdWd1XCIsMTY6XCJ4LW1hYy1rYW5uYWRhXCIsMTc6XCJ4LW1hYy1tYWxheWFsYW1cIiwxODpcIngtbWFjLXNpbmhhbGVzZVwiLDE5OlwieC1tYWMtYnVybWVzZVwiLDIwOlwieC1tYWMta2htZXJcIiwyMTpcIngtbWFjLXRoYWlcIiwyMjpcIngtbWFjLWxhb1wiLDIzOlwieC1tYWMtZ2VvcmdpYW5cIiwyNDpcIngtbWFjLWFybWVuaWFuXCIsMjU6XCJ4LW1hYy1jaGluZXNlc2ltcFwiLDI2OlwieC1tYWMtdGliZXRhblwiLDI3OlwieC1tYWMtbW9uZ29saWFuXCIsMjg6XCJ4LW1hYy1ldGhpb3BpY1wiLDI5OlwieC1tYWMtY2VcIiwzMDpcIngtbWFjLXZpZXRuYW1lc2VcIiwzMTpcIngtbWFjLWV4dGFyYWJpY1wifSxmZj17MTU6XCJ4LW1hYy1pY2VsYW5kaWNcIiwxNzpcIngtbWFjLXR1cmtpc2hcIiwxODpcIngtbWFjLWNyb2F0aWFuXCIsMjQ6XCJ4LW1hYy1jZVwiLDI1OlwieC1tYWMtY2VcIiwyNjpcIngtbWFjLWNlXCIsMjc6XCJ4LW1hYy1jZVwiLDI4OlwieC1tYWMtY2VcIiwzMDpcIngtbWFjLWljZWxhbmRpY1wiLDM3OlwieC1tYWMtcm9tYW5pYW5cIiwzODpcIngtbWFjLWNlXCIsMzk6XCJ4LW1hYy1jZVwiLDQwOlwieC1tYWMtY2VcIiwxNDM6XCJ4LW1hYy1pbnVpdFwiLDE0NjpcIngtbWFjLWdhZWxpY1wifSxnZj17cGFyc2U6WmEsbWFrZTpjYn0saGY9W3tiZWdpbjowLGVuZDoxMjd9LHtiZWdpbjoxMjgsZW5kOjI1NX0se2JlZ2luOjI1NixlbmQ6MzgzfSx7YmVnaW46Mzg0LGVuZDo1OTF9LHtiZWdpbjo1OTIsZW5kOjY4N30se2JlZ2luOjY4OCxlbmQ6NzY3fSx7YmVnaW46NzY4LGVuZDo4Nzl9LHtiZWdpbjo4ODAsZW5kOjEwMjN9LHtiZWdpbjoxMTM5MixlbmQ6MTE1MTl9LHtiZWdpbjoxMDI0LGVuZDoxMjc5fSx7YmVnaW46MTMyOCxlbmQ6MTQyM30se2JlZ2luOjE0MjQsZW5kOjE1MzV9LHtiZWdpbjo0MjI0MCxlbmQ6NDI1NTl9LHtiZWdpbjoxNTM2LGVuZDoxNzkxfSx7YmVnaW46MTk4NCxlbmQ6MjA0N30se2JlZ2luOjIzMDQsZW5kOjI0MzF9LHtiZWdpbjoyNDMyLGVuZDoyNTU5fSx7YmVnaW46MjU2MCxlbmQ6MjY4N30se2JlZ2luOjI2ODgsZW5kOjI4MTV9LHtiZWdpbjoyODE2LGVuZDoyOTQzfSx7YmVnaW46Mjk0NCxlbmQ6MzA3MX0se2JlZ2luOjMwNzIsZW5kOjMxOTl9LHtiZWdpbjozMjAwLGVuZDozMzI3fSx7YmVnaW46MzMyOCxlbmQ6MzQ1NX0se2JlZ2luOjM1ODQsZW5kOjM3MTF9LHtiZWdpbjozNzEyLGVuZDozODM5fSx7YmVnaW46NDI1NixlbmQ6NDM1MX0se2JlZ2luOjY5MTIsZW5kOjcwMzl9LHtiZWdpbjo0MzUyLGVuZDo0NjA3fSx7YmVnaW46NzY4MCxlbmQ6NzkzNX0se2JlZ2luOjc5MzYsZW5kOjgxOTF9LHtiZWdpbjo4MTkyLGVuZDo4MzAzfSx7YmVnaW46ODMwNCxlbmQ6ODM1MX0se2JlZ2luOjgzNTIsZW5kOjgzOTl9LHtiZWdpbjo4NDAwLGVuZDo4NDQ3fSx7YmVnaW46ODQ0OCxlbmQ6ODUyN30se2JlZ2luOjg1MjgsZW5kOjg1OTF9LHtiZWdpbjo4NTkyLGVuZDo4NzAzfSx7YmVnaW46ODcwNCxlbmQ6ODk1OX0se2JlZ2luOjg5NjAsZW5kOjkyMTV9LHtiZWdpbjo5MjE2LGVuZDo5Mjc5fSx7YmVnaW46OTI4MCxlbmQ6OTMxMX0se2JlZ2luOjkzMTIsZW5kOjk0NzF9LHtiZWdpbjo5NDcyLGVuZDo5NTk5fSx7YmVnaW46OTYwMCxlbmQ6OTYzMX0se2JlZ2luOjk2MzIsZW5kOjk3Mjd9LHtiZWdpbjo5NzI4LGVuZDo5OTgzfSx7YmVnaW46OTk4NCxlbmQ6MTAxNzV9LHtiZWdpbjoxMjI4OCxlbmQ6MTIzNTF9LHtiZWdpbjoxMjM1MixlbmQ6MTI0NDd9LHtiZWdpbjoxMjQ0OCxlbmQ6MTI1NDN9LHtiZWdpbjoxMjU0NCxlbmQ6MTI1OTF9LHtiZWdpbjoxMjU5MixlbmQ6MTI2ODd9LHtiZWdpbjo0MzA3MixlbmQ6NDMxMzV9LHtiZWdpbjoxMjgwMCxlbmQ6MTMwNTV9LHtiZWdpbjoxMzA1NixlbmQ6MTMzMTF9LHtiZWdpbjo0NDAzMixlbmQ6NTUyMTV9LHtiZWdpbjo1NTI5NixlbmQ6NTczNDN9LHtiZWdpbjo2Nzg0MCxlbmQ6Njc4NzF9LHtiZWdpbjoxOTk2OCxlbmQ6NDA5NTl9LHtiZWdpbjo1NzM0NCxlbmQ6NjM3NDN9LHtiZWdpbjoxMjczNixlbmQ6MTI3ODN9LHtiZWdpbjo2NDI1NixlbmQ6NjQzMzV9LHtiZWdpbjo2NDMzNixlbmQ6NjUwMjN9LHtiZWdpbjo2NTA1NixlbmQ6NjUwNzF9LHtiZWdpbjo2NTA0MCxlbmQ6NjUwNTV9LHtiZWdpbjo2NTEwNCxlbmQ6NjUxMzV9LHtiZWdpbjo2NTEzNixlbmQ6NjUyNzl9LHtiZWdpbjo2NTI4MCxlbmQ6NjU1MTl9LHtiZWdpbjo2NTUyMCxlbmQ6NjU1MzV9LHtiZWdpbjozODQwLGVuZDo0MDk1fSx7YmVnaW46MTc5MixlbmQ6MTg3MX0se2JlZ2luOjE5MjAsZW5kOjE5ODN9LHtiZWdpbjozNDU2LGVuZDozNTgzfSx7YmVnaW46NDA5NixlbmQ6NDI1NX0se2JlZ2luOjQ2MDgsZW5kOjQ5OTF9LHtiZWdpbjo1MDI0LGVuZDo1MTE5fSx7YmVnaW46NTEyMCxlbmQ6NTc1OX0se2JlZ2luOjU3NjAsZW5kOjU3OTF9LHtiZWdpbjo1NzkyLGVuZDo1ODg3fSx7YmVnaW46NjAxNixlbmQ6NjE0M30se2JlZ2luOjYxNDQsZW5kOjYzMTl9LHtiZWdpbjoxMDI0MCxlbmQ6MTA0OTV9LHtiZWdpbjo0MDk2MCxlbmQ6NDIxMjd9LHtiZWdpbjo1ODg4LGVuZDo1OTE5fSx7YmVnaW46NjYzMDQsZW5kOjY2MzUxfSx7YmVnaW46NjYzNTIsZW5kOjY2MzgzfSx7YmVnaW46NjY1NjAsZW5kOjY2NjM5fSx7YmVnaW46MTE4Nzg0LGVuZDoxMTkwMzl9LHtiZWdpbjoxMTk4MDgsZW5kOjEyMDgzMX0se2JlZ2luOjEwNDQ0ODAsZW5kOjEwNDg1NzN9LHtiZWdpbjo2NTAyNCxlbmQ6NjUwMzl9LHtiZWdpbjo5MTc1MDQsZW5kOjkxNzYzMX0se2JlZ2luOjY0MDAsZW5kOjY0Nzl9LHtiZWdpbjo2NDgwLGVuZDo2NTI3fSx7YmVnaW46NjUyOCxlbmQ6NjYyM30se2JlZ2luOjY2NTYsZW5kOjY2ODd9LHtiZWdpbjoxMTI2NCxlbmQ6MTEzNTl9LHtiZWdpbjoxMTU2OCxlbmQ6MTE2NDd9LHtiZWdpbjoxOTkwNCxlbmQ6MTk5Njd9LHtiZWdpbjo0MzAwOCxlbmQ6NDMwNTV9LHtiZWdpbjo2NTUzNixlbmQ6NjU2NjN9LHtiZWdpbjo2NTg1NixlbmQ6NjU5MzV9LHtiZWdpbjo2NjQzMixlbmQ6NjY0NjN9LHtiZWdpbjo2NjQ2NCxlbmQ6NjY1Mjd9LHtiZWdpbjo2NjY0MCxlbmQ6NjY2ODd9LHtiZWdpbjo2NjY4OCxlbmQ6NjY3MzV9LHtiZWdpbjo2NzU4NCxlbmQ6Njc2NDd9LHtiZWdpbjo2ODA5NixlbmQ6NjgxOTF9LHtiZWdpbjoxMTk1NTIsZW5kOjExOTY0N30se2JlZ2luOjczNzI4LGVuZDo3NDc1MX0se2JlZ2luOjExOTY0OCxlbmQ6MTE5Njc5fSx7YmVnaW46NzA0MCxlbmQ6NzEwM30se2JlZ2luOjcxNjgsZW5kOjcyNDd9LHtiZWdpbjo3MjQ4LGVuZDo3Mjk1fSx7YmVnaW46NDMxMzYsZW5kOjQzMjMxfSx7YmVnaW46NDMyNjQsZW5kOjQzMzExfSx7YmVnaW46NDMzMTIsZW5kOjQzMzU5fSx7YmVnaW46NDM1MjAsZW5kOjQzNjE1fSx7YmVnaW46NjU5MzYsZW5kOjY1OTk5fSx7YmVnaW46NjZlMyxlbmQ6NjYwNDd9LHtiZWdpbjo2NjIwOCxlbmQ6NjYyNzF9LHtiZWdpbjoxMjcwMjQsZW5kOjEyNzEzNX1dLGpmPXtwYXJzZTplYixtYWtlOmZiLHVuaWNvZGVSYW5nZXM6aGYsZ2V0VW5pY29kZVJhbmdlOmRifSxrZj17cGFyc2U6Z2IsbWFrZTpoYn0sbGY9bmV3IEFycmF5KDkpO2xmWzFdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4gMT09PWI/e3N1YnN0Rm9ybWF0OjEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksZGVsdGFHbHlwaElkOnRoaXMucGFyc2VVU2hvcnQoKX06Mj09PWI/e3N1YnN0Rm9ybWF0OjIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksc3Vic3RpdHV0ZTp0aGlzLnBhcnNlT2Zmc2V0MTZMaXN0KCl9OnZvaWQgeGUuYXNzZXJ0KCExLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogbG9va3VwIHR5cGUgMSBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpfSxsZlsyXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWEsXCJHU1VCIE11bHRpcGxlIFN1YnN0aXR1dGlvbiBTdWJ0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksc2VxdWVuY2VzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cygpfX0sbGZbM109ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBBbHRlcm5hdGUgU3Vic3RpdHV0aW9uIFN1YnRhYmxlIGlkZW50aWZpZXItZm9ybWF0IG11c3QgYmUgMVwiKSx7c3Vic3RGb3JtYXQ6YSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxhbHRlcm5hdGVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cygpfX0sbGZbNF09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBsaWdhdHVyZSB0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksbGlnYXR1cmVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3JldHVybntsaWdHbHlwaDp0aGlzLnBhcnNlVVNob3J0KCksY29tcG9uZW50czp0aGlzLnBhcnNlVVNob3J0TGlzdCh0aGlzLnBhcnNlVVNob3J0KCktMSl9fSl9fTt2YXIgbWY9e3NlcXVlbmNlSW5kZXg6US51U2hvcnQsbG9va3VwTGlzdEluZGV4OlEudVNob3J0fTtsZls1XT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWIpcmV0dXJue3N1YnN0Rm9ybWF0OmIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSkscnVsZVNldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpLGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntpbnB1dDp0aGlzLnBhcnNlVVNob3J0TGlzdChhLTEpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QoYixtZil9fSl9O2lmKDI9PT1iKXJldHVybntzdWJzdEZvcm1hdDpiLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGNsYXNzRGVmOnRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGNsYXNzU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCksYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJue2NsYXNzZXM6dGhpcy5wYXJzZVVTaG9ydExpc3QoYS0xKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KGIsbWYpfX0pfTtpZigzPT09Yil7dmFyIGM9dGhpcy5wYXJzZVVTaG9ydCgpLGQ9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntzdWJzdEZvcm1hdDpiLGNvdmVyYWdlczp0aGlzLnBhcnNlTGlzdChjLFEucG9pbnRlcihRLmNvdmVyYWdlKSksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChkLG1mKX19eGUuYXNzZXJ0KCExLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogbG9va3VwIHR5cGUgNSBmb3JtYXQgbXVzdCBiZSAxLCAyIG9yIDMuXCIpfSxsZls2XT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIDE9PT1iP3tzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGNoYWluUnVsZVNldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7cmV0dXJue2JhY2t0cmFjazp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGlucHV0OnRoaXMucGFyc2VVU2hvcnRMaXN0KHRoaXMucGFyc2VTaG9ydCgpLTEpLGxvb2thaGVhZDp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QobWYpfX0pfToyPT09Yj97c3Vic3RGb3JtYXQ6Mixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxiYWNrdHJhY2tDbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxpbnB1dENsYXNzRGVmOnRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGxvb2thaGVhZENsYXNzRGVmOnRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGNoYWluQ2xhc3NTZXQ6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7cmV0dXJue2JhY2t0cmFjazp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGlucHV0OnRoaXMucGFyc2VVU2hvcnRMaXN0KHRoaXMucGFyc2VTaG9ydCgpLTEpLGxvb2thaGVhZDp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QobWYpfX0pfTozPT09Yj97c3Vic3RGb3JtYXQ6MyxiYWNrdHJhY2tDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGlucHV0Q292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxsb29rYWhlYWRDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QobWYpfTp2b2lkIHhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IGxvb2t1cCB0eXBlIDYgZm9ybWF0IG11c3QgYmUgMSwgMiBvciAzLlwiKX0sbGZbN109ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7eGUuYXJndW1lbnQoMT09PWEsXCJHU1VCIEV4dGVuc2lvbiBTdWJzdGl0dXRpb24gc3VidGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpO3ZhciBiPXRoaXMucGFyc2VVU2hvcnQoKSxjPW5ldyBRKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnBhcnNlVUxvbmcoKSk7cmV0dXJue3N1YnN0Rm9ybWF0OjEsbG9va3VwVHlwZTpiLGV4dGVuc2lvbjpsZltiXS5jYWxsKGMpfX0sbGZbOF09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBSZXZlcnNlIENoYWluaW5nIENvbnRleHR1YWwgU2luZ2xlIFN1YnN0aXR1dGlvbiBTdWJ0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksYmFja3RyYWNrQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxsb29rYWhlYWRDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLHN1YnN0aXR1dGVzOnRoaXMucGFyc2VVU2hvcnRMaXN0KCl9fTt2YXIgbmY9bmV3IEFycmF5KDkpO25mWzFdPWZ1bmN0aW9uKGEpe3JldHVybiAxPT09YS5zdWJzdEZvcm1hdD9uZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9LHtuYW1lOlwiZGVsdGFHbHlwaElEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEuZGVsdGFHbHlwaElkfV0pOm5ldyBJZS5UYWJsZShcInN1YnN0aXR1dGlvblRhYmxlXCIsW3tuYW1lOlwic3Vic3RGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Mn0se25hbWU6XCJjb3ZlcmFnZVwiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Db3ZlcmFnZShhLmNvdmVyYWdlKX1dLmNvbmNhdChJZS51c2hvcnRMaXN0KFwic3Vic3RpdHV0ZVwiLGEuc3Vic3RpdHV0ZSkpKX0sbmZbM109ZnVuY3Rpb24oYSl7cmV0dXJuIHhlLmFzc2VydCgxPT09YS5zdWJzdEZvcm1hdCxcIkxvb2t1cCB0eXBlIDMgc3Vic3RGb3JtYXQgbXVzdCBiZSAxLlwiKSxuZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9XS5jb25jYXQoSWUudGFibGVMaXN0KFwiYWx0U2V0XCIsYS5hbHRlcm5hdGVTZXRzLGZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJhbHRlcm5hdGVTZXRUYWJsZVwiLEllLnVzaG9ydExpc3QoXCJhbHRlcm5hdGVcIixhKSl9KSkpfSxuZls0XT1mdW5jdGlvbihhKXtyZXR1cm4geGUuYXNzZXJ0KDE9PT1hLnN1YnN0Rm9ybWF0LFwiTG9va3VwIHR5cGUgNCBzdWJzdEZvcm1hdCBtdXN0IGJlIDEuXCIpLG5ldyBJZS5UYWJsZShcInN1YnN0aXR1dGlvblRhYmxlXCIsW3tuYW1lOlwic3Vic3RGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJjb3ZlcmFnZVwiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Db3ZlcmFnZShhLmNvdmVyYWdlKX1dLmNvbmNhdChJZS50YWJsZUxpc3QoXCJsaWdTZXRcIixhLmxpZ2F0dXJlU2V0cyxmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwibGlnYXR1cmVTZXRUYWJsZVwiLEllLnRhYmxlTGlzdChcImxpZ2F0dXJlXCIsYSxmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwibGlnYXR1cmVUYWJsZVwiLFt7bmFtZTpcImxpZ0dseXBoXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEubGlnR2x5cGh9XS5jb25jYXQoSWUudXNob3J0TGlzdChcImNvbXBvbmVudFwiLGEuY29tcG9uZW50cyxhLmNvbXBvbmVudHMubGVuZ3RoKzEpKSl9KSl9KSkpfTt2YXIgb2Y9e3BhcnNlOmliLG1ha2U6amJ9LHBmPXtwYXJzZTprYixtYWtlOmxifSxxZj17bWFrZTpwYixmb250VG9UYWJsZTpzYixjb21wdXRlQ2hlY2tTdW06bmJ9O3diLnByb3RvdHlwZT17c2VhcmNoVGFnOnRiLGJpblNlYXJjaDp1YixnZXRUYWJsZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmZvbnQudGFibGVzW3RoaXMudGFibGVOYW1lXTtyZXR1cm4hYiYmYSYmKGI9dGhpcy5mb250LnRhYmxlc1t0aGlzLnRhYmxlTmFtZV09dGhpcy5jcmVhdGVEZWZhdWx0VGFibGUoKSksYn0sZ2V0U2NyaXB0TmFtZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFRhYmxlKCk7cmV0dXJuIGE/YS5zY3JpcHRzLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS50YWd9KTpbXX0sZ2V0RGVmYXVsdFNjcmlwdE5hbWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFRhYmxlKCk7aWYoYSl7Zm9yKHZhciBiPSExLGM9MDtjPGEuc2NyaXB0cy5sZW5ndGg7YysrKXt2YXIgZD1hLnNjcmlwdHNbY10udGFnO2lmKFwiREZMVFwiPT09ZClyZXR1cm4gZDtcImxhdG5cIj09PWQmJihiPSEwKX1yZXR1cm4gYj9cImxhdG5cIjp2b2lkIDB9fSxnZXRTY3JpcHRUYWJsZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0VGFibGUoYik7aWYoYyl7YT1hfHxcIkRGTFRcIjt2YXIgZD1jLnNjcmlwdHMsZT10YihjLnNjcmlwdHMsYSk7aWYoZT49MClyZXR1cm4gZFtlXS5zY3JpcHQ7aWYoYil7dmFyIGY9e3RhZzphLHNjcmlwdDp7ZGVmYXVsdExhbmdTeXM6e3Jlc2VydmVkOjAscmVxRmVhdHVyZUluZGV4OjY1NTM1LGZlYXR1cmVJbmRleGVzOltdfSxsYW5nU3lzUmVjb3JkczpbXX19O3JldHVybiBkLnNwbGljZSgtMS1lLDAsZiksZi5zY3JpcHR9fX0sZ2V0TGFuZ1N5c1RhYmxlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmdldFNjcmlwdFRhYmxlKGEsYyk7aWYoZCl7aWYoIWJ8fFwiZGZsdFwiPT09Ynx8XCJERkxUXCI9PT1iKXJldHVybiBkLmRlZmF1bHRMYW5nU3lzO3ZhciBlPXRiKGQubGFuZ1N5c1JlY29yZHMsYik7aWYoZT49MClyZXR1cm4gZC5sYW5nU3lzUmVjb3Jkc1tlXS5sYW5nU3lzO2lmKGMpe3ZhciBmPXt0YWc6YixsYW5nU3lzOntyZXNlcnZlZDowLHJlcUZlYXR1cmVJbmRleDo2NTUzNSxmZWF0dXJlSW5kZXhlczpbXX19O3JldHVybiBkLmxhbmdTeXNSZWNvcmRzLnNwbGljZSgtMS1lLDAsZiksZi5sYW5nU3lzfX19LGdldEZlYXR1cmVUYWJsZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldExhbmdTeXNUYWJsZShhLGIsZCk7aWYoZSl7Zm9yKHZhciBmLGc9ZS5mZWF0dXJlSW5kZXhlcyxoPXRoaXMuZm9udC50YWJsZXNbdGhpcy50YWJsZU5hbWVdLmZlYXR1cmVzLGk9MDtpPGcubGVuZ3RoO2krKylpZihmPWhbZ1tpXV0sZi50YWc9PT1jKXJldHVybiBmLmZlYXR1cmU7aWYoZCl7dmFyIGo9aC5sZW5ndGg7cmV0dXJuIHhlLmFzc2VydCgwPT09anx8Yz49aFtqLTFdLnRhZyxcIkZlYXR1cmVzIG11c3QgYmUgYWRkZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLlwiKSxmPXt0YWc6YyxmZWF0dXJlOntwYXJhbXM6MCxsb29rdXBMaXN0SW5kZXhlczpbXX19LGgucHVzaChmKSxnLnB1c2goaiksZi5mZWF0dXJlfX19LGdldExvb2t1cFRhYmxlczpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPXRoaXMuZ2V0RmVhdHVyZVRhYmxlKGEsYixjLGUpLGc9W107aWYoZil7Zm9yKHZhciBoLGk9Zi5sb29rdXBMaXN0SW5kZXhlcyxqPXRoaXMuZm9udC50YWJsZXNbdGhpcy50YWJsZU5hbWVdLmxvb2t1cHMsaz0wO2s8aS5sZW5ndGg7aysrKWg9altpW2tdXSxoLmxvb2t1cFR5cGU9PT1kJiZnLnB1c2goaCk7aWYoMD09PWcubGVuZ3RoJiZlKXtoPXtsb29rdXBUeXBlOmQsbG9va3VwRmxhZzowLHN1YnRhYmxlczpbXSxtYXJrRmlsdGVyaW5nU2V0OnZvaWQgMH07dmFyIGw9ai5sZW5ndGg7cmV0dXJuIGoucHVzaChoKSxpLnB1c2gobCksW2hdfX1yZXR1cm4gZ30sZ2V0R2x5cGhDbGFzczpmdW5jdGlvbihhLGIpe3N3aXRjaChhLmZvcm1hdCl7Y2FzZSAxOnJldHVybiBhLnN0YXJ0R2x5cGg8PWImJmI8YS5zdGFydEdseXBoK2EuY2xhc3Nlcy5sZW5ndGg/YS5jbGFzc2VzW2ItYS5zdGFydEdseXBoXTowO2Nhc2UgMjp2YXIgYz12YihhLnJhbmdlcyxiKTtyZXR1cm4gYz9jLmNsYXNzSWQ6MH19LGdldENvdmVyYWdlSW5kZXg6ZnVuY3Rpb24oYSxiKXtzd2l0Y2goYS5mb3JtYXQpe2Nhc2UgMTp2YXIgYz11YihhLmdseXBocyxiKTtyZXR1cm4gYz49MD9jOi0xO2Nhc2UgMjp2YXIgZD12YihhLnJhbmdlcyxiKTtyZXR1cm4gZD9kLmluZGV4K2ItZC5zdGFydDotMX19LGV4cGFuZENvdmVyYWdlOmZ1bmN0aW9uKGEpe2lmKDE9PT1hLmZvcm1hdClyZXR1cm4gYS5nbHlwaHM7Zm9yKHZhciBiPVtdLGM9YS5yYW5nZXMsZD0wO2Q8Yy5sZW5ndGg7ZCsrKWZvcih2YXIgZT1jW2RdLGY9ZS5zdGFydCxnPWUuZW5kLGg9ZjtoPD1nO2grKyliLnB1c2goaCk7cmV0dXJuIGJ9fSx4Yi5wcm90b3R5cGU9d2IucHJvdG90eXBlLHhiLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXREZWZhdWx0U2NyaXB0TmFtZSgpO3RoaXMuZGVmYXVsdEtlcm5pbmdUYWJsZXM9dGhpcy5nZXRLZXJuaW5nVGFibGVzKGEpfSx4Yi5wcm90b3R5cGUuZ2V0S2VybmluZ1ZhbHVlPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPTA7ZTxhLmxlbmd0aDtlKyspZm9yKHZhciBmPWFbZV0uc3VidGFibGVzLGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGg9ZltnXSxpPWQuZ2V0Q292ZXJhZ2VJbmRleChoLmNvdmVyYWdlLGIpO2lmKCEoaTwwKSlzd2l0Y2goaC5wb3NGb3JtYXQpe2Nhc2UgMTpmb3IodmFyIGo9aC5wYWlyU2V0c1tpXSxrPTA7azxqLmxlbmd0aDtrKyspe3ZhciBsPWpba107aWYobC5zZWNvbmRHbHlwaD09PWMpcmV0dXJuIGwudmFsdWUxJiZsLnZhbHVlMS54QWR2YW5jZXx8MH1icmVhaztjYXNlIDI6dmFyIG09ZC5nZXRHbHlwaENsYXNzKGguY2xhc3NEZWYxLGIpLG49ZC5nZXRHbHlwaENsYXNzKGguY2xhc3NEZWYyLGMpLG89aC5jbGFzc1JlY29yZHNbbV1bbl07cmV0dXJuIG8udmFsdWUxJiZvLnZhbHVlMS54QWR2YW5jZXx8MH19cmV0dXJuIDB9LHhiLnByb3RvdHlwZS5nZXRLZXJuaW5nVGFibGVzPWZ1bmN0aW9uKGEsYil7aWYodGhpcy5mb250LnRhYmxlcy5ncG9zKXJldHVybiB0aGlzLmdldExvb2t1cFRhYmxlcyhhLGIsXCJrZXJuXCIsMil9LHliLnByb3RvdHlwZT13Yi5wcm90b3R5cGUseWIucHJvdG90eXBlLmNyZWF0ZURlZmF1bHRUYWJsZT1mdW5jdGlvbigpe3JldHVybnt2ZXJzaW9uOjEsc2NyaXB0czpbe3RhZzpcIkRGTFRcIixzY3JpcHQ6e2RlZmF1bHRMYW5nU3lzOntyZXNlcnZlZDowLHJlcUZlYXR1cmVJbmRleDo2NTUzNSxmZWF0dXJlSW5kZXhlczpbXX0sbGFuZ1N5c1JlY29yZHM6W119fV0sZmVhdHVyZXM6W10sbG9va3VwczpbXX19LHliLnByb3RvdHlwZS5nZXRTaW5nbGU9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD10aGlzLGU9W10sZj10aGlzLmdldExvb2t1cFRhYmxlcyhiLGMsYSwxKSxnPTA7ZzxmLmxlbmd0aDtnKyspZm9yKHZhciBoPWZbZ10uc3VidGFibGVzLGk9MDtpPGgubGVuZ3RoO2krKyl7dmFyIGo9aFtpXSxrPWQuZXhwYW5kQ292ZXJhZ2Uoai5jb3ZlcmFnZSksbD12b2lkIDA7aWYoMT09PWouc3Vic3RGb3JtYXQpe3ZhciBtPWouZGVsdGFHbHlwaElkO2ZvcihsPTA7bDxrLmxlbmd0aDtsKyspe3ZhciBuPWtbbF07ZS5wdXNoKHtzdWI6bixieTpuK219KX19ZWxzZXt2YXIgbz1qLnN1YnN0aXR1dGU7Zm9yKGw9MDtsPGsubGVuZ3RoO2wrKyllLnB1c2goe3N1YjprW2xdLGJ5Om9bbF19KX19cmV0dXJuIGV9LHliLnByb3RvdHlwZS5nZXRBbHRlcm5hdGVzPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPVtdLGY9dGhpcy5nZXRMb29rdXBUYWJsZXMoYixjLGEsMyksZz0wO2c8Zi5sZW5ndGg7ZysrKWZvcih2YXIgaD1mW2ddLnN1YnRhYmxlcyxpPTA7aTxoLmxlbmd0aDtpKyspZm9yKHZhciBqPWhbaV0saz1kLmV4cGFuZENvdmVyYWdlKGouY292ZXJhZ2UpLGw9ai5hbHRlcm5hdGVTZXRzLG09MDttPGsubGVuZ3RoO20rKyllLnB1c2goe3N1YjprW21dLGJ5OmxbbV19KTtyZXR1cm4gZX0seWIucHJvdG90eXBlLmdldExpZ2F0dXJlcz1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT1bXSxmPXRoaXMuZ2V0TG9va3VwVGFibGVzKGIsYyxhLDQpLGc9MDtnPGYubGVuZ3RoO2crKylmb3IodmFyIGg9ZltnXS5zdWJ0YWJsZXMsaT0wO2k8aC5sZW5ndGg7aSsrKWZvcih2YXIgaj1oW2ldLGs9ZC5leHBhbmRDb3ZlcmFnZShqLmNvdmVyYWdlKSxsPWoubGlnYXR1cmVTZXRzLG09MDttPGsubGVuZ3RoO20rKylmb3IodmFyIG49a1ttXSxvPWxbbV0scD0wO3A8by5sZW5ndGg7cCsrKXt2YXIgcT1vW3BdO2UucHVzaCh7c3ViOltuXS5jb25jYXQocS5jb21wb25lbnRzKSxieTpxLmxpZ0dseXBofSl9cmV0dXJuIGV9LHliLnByb3RvdHlwZS5hZGRTaW5nbGU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5nZXRMb29rdXBUYWJsZXMoYyxkLGEsMSwhMClbMF0sZj1BYihlLDIse3N1YnN0Rm9ybWF0OjIsY292ZXJhZ2U6e2Zvcm1hdDoxLGdseXBoczpbXX0sc3Vic3RpdHV0ZTpbXX0pO3hlLmFzc2VydCgxPT09Zi5jb3ZlcmFnZS5mb3JtYXQsXCJMaWdhdHVyZTogdW5hYmxlIHRvIG1vZGlmeSBjb3ZlcmFnZSB0YWJsZSBmb3JtYXQgXCIrZi5jb3ZlcmFnZS5mb3JtYXQpO3ZhciBnPWIuc3ViLGg9dGhpcy5iaW5TZWFyY2goZi5jb3ZlcmFnZS5nbHlwaHMsZyk7aDwwJiYoaD0tMS1oLGYuY292ZXJhZ2UuZ2x5cGhzLnNwbGljZShoLDAsZyksZi5zdWJzdGl0dXRlLnNwbGljZShoLDAsMCkpLGYuc3Vic3RpdHV0ZVtoXT1iLmJ5fSx5Yi5wcm90b3R5cGUuYWRkQWx0ZXJuYXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZ2V0TG9va3VwVGFibGVzKGMsZCxhLDMsITApWzBdLGY9QWIoZSwxLHtzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOntmb3JtYXQ6MSxnbHlwaHM6W119LGFsdGVybmF0ZVNldHM6W119KTt4ZS5hc3NlcnQoMT09PWYuY292ZXJhZ2UuZm9ybWF0LFwiTGlnYXR1cmU6IHVuYWJsZSB0byBtb2RpZnkgY292ZXJhZ2UgdGFibGUgZm9ybWF0IFwiK2YuY292ZXJhZ2UuZm9ybWF0KTt2YXIgZz1iLnN1YixoPXRoaXMuYmluU2VhcmNoKGYuY292ZXJhZ2UuZ2x5cGhzLGcpO2g8MCYmKGg9LTEtaCxmLmNvdmVyYWdlLmdseXBocy5zcGxpY2UoaCwwLGcpLGYuYWx0ZXJuYXRlU2V0cy5zcGxpY2UoaCwwLDApKSxmLmFsdGVybmF0ZVNldHNbaF09Yi5ieX0seWIucHJvdG90eXBlLmFkZExpZ2F0dXJlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZ2V0TG9va3VwVGFibGVzKGMsZCxhLDQsITApWzBdLGY9ZS5zdWJ0YWJsZXNbMF07Znx8KGY9e3N1YnN0Rm9ybWF0OjEsY292ZXJhZ2U6e2Zvcm1hdDoxLGdseXBoczpbXX0sbGlnYXR1cmVTZXRzOltdfSxlLnN1YnRhYmxlc1swXT1mKSx4ZS5hc3NlcnQoMT09PWYuY292ZXJhZ2UuZm9ybWF0LFwiTGlnYXR1cmU6IHVuYWJsZSB0byBtb2RpZnkgY292ZXJhZ2UgdGFibGUgZm9ybWF0IFwiK2YuY292ZXJhZ2UuZm9ybWF0KTt2YXIgZz1iLnN1YlswXSxoPWIuc3ViLnNsaWNlKDEpLGk9e2xpZ0dseXBoOmIuYnksY29tcG9uZW50czpofSxqPXRoaXMuYmluU2VhcmNoKGYuY292ZXJhZ2UuZ2x5cGhzLGcpO2lmKGo+PTApe2Zvcih2YXIgaz1mLmxpZ2F0dXJlU2V0c1tqXSxsPTA7bDxrLmxlbmd0aDtsKyspaWYoemIoa1tsXS5jb21wb25lbnRzLGgpKXJldHVybjtrLnB1c2goaSl9ZWxzZSBqPS0xLWosZi5jb3ZlcmFnZS5nbHlwaHMuc3BsaWNlKGosMCxnKSxmLmxpZ2F0dXJlU2V0cy5zcGxpY2UoaiwwLFtpXSl9LHliLnByb3RvdHlwZS5nZXRGZWF0dXJlPWZ1bmN0aW9uKGEsYixjKXtpZigvc3NcXGRcXGQvLnRlc3QoYSkpcmV0dXJuIHRoaXMuZ2V0U2luZ2xlKGEsYixjKTtzd2l0Y2goYSl7Y2FzZVwiYWFsdFwiOmNhc2VcInNhbHRcIjpyZXR1cm4gdGhpcy5nZXRTaW5nbGUoYSxiLGMpLmNvbmNhdCh0aGlzLmdldEFsdGVybmF0ZXMoYSxiLGMpKTtjYXNlXCJkbGlnXCI6Y2FzZVwibGlnYVwiOmNhc2VcInJsaWdcIjpyZXR1cm4gdGhpcy5nZXRMaWdhdHVyZXMoYSxiLGMpfX0seWIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhLGIsYyxkKXtpZigvc3NcXGRcXGQvLnRlc3QoYSkpcmV0dXJuIHRoaXMuYWRkU2luZ2xlKGEsYixjLGQpO3N3aXRjaChhKXtjYXNlXCJhYWx0XCI6Y2FzZVwic2FsdFwiOnJldHVyblwibnVtYmVyXCI9PXR5cGVvZiBiLmJ5P3RoaXMuYWRkU2luZ2xlKGEsYixjLGQpOnRoaXMuYWRkQWx0ZXJuYXRlKGEsYixjLGQpO2Nhc2VcImRsaWdcIjpjYXNlXCJsaWdhXCI6Y2FzZVwicmxpZ1wiOnJldHVybiB0aGlzLmFkZExpZ2F0dXJlKGEsYixjLGQpfX07dmFyIHJmLHNmLHRmLHVmLHZmPXtnZXRQYXRoOkpiLHBhcnNlOkxifSx3Zj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnNyUGVyaW9kLGM9dGhpcy5zclBoYXNlLGQ9dGhpcy5zclRocmVzaG9sZCxlPTE7cmV0dXJuIGE8MCYmKGE9LWEsZT0tMSksYSs9ZC1jLGE9TWF0aC50cnVuYyhhL2IpKmIsYSs9YyxhPDA/YyplOmEqZX0seGY9e3g6MSx5OjAsYXhpczpcInhcIixkaXN0YW5jZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYz9hLnhvOmEueCktKGQ/Yi54bzpiLngpfSxpbnRlcnBvbGF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztyZXR1cm4gZCYmZCE9PXRoaXM/KGU9ZC5kaXN0YW5jZShhLGIsITAsITApLGY9ZC5kaXN0YW5jZShhLGMsITAsITApLGk9ZC5kaXN0YW5jZShiLGIsITEsITApLGo9ZC5kaXN0YW5jZShjLGMsITEsITApLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkIHhmLnNldFJlbGF0aXZlKGEsYSwoaStqKS8yLGQsITApOnZvaWQgeGYuc2V0UmVsYXRpdmUoYSxhLChpKmgraipnKS9rLGQsITApKTooZT1hLnhvLWIueG8sZj1hLnhvLWMueG8saT1iLngtYi54byxqPWMueC1jLnhvLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkKGEueD1hLnhvKyhpK2opLzIpOnZvaWQoYS54PWEueG8rKGkqaCtqKmcpL2spKX0sbm9ybWFsU2xvcGU6TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHNldFJlbGF0aXZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoIWR8fGQ9PT10aGlzKXJldHVybiB2b2lkKGEueD0oZT9iLnhvOmIueCkrYyk7dmFyIGY9ZT9iLnhvOmIueCxnPWU/Yi55bzpiLnksaD1mK2MqZC54LGk9ZytjKmQueTthLng9aCsoYS55LWkpL2Qubm9ybWFsU2xvcGV9LHNsb3BlOjAsdG91Y2g6ZnVuY3Rpb24oYSl7YS54VG91Y2hlZD0hMH0sdG91Y2hlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS54VG91Y2hlZH0sdW50b3VjaDpmdW5jdGlvbihhKXthLnhUb3VjaGVkPSExfX0seWY9e3g6MCx5OjEsYXhpczpcInlcIixkaXN0YW5jZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYz9hLnlvOmEueSktKGQ/Yi55bzpiLnkpfSxpbnRlcnBvbGF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztyZXR1cm4gZCYmZCE9PXRoaXM/KGU9ZC5kaXN0YW5jZShhLGIsITAsITApLGY9ZC5kaXN0YW5jZShhLGMsITAsITApLGk9ZC5kaXN0YW5jZShiLGIsITEsITApLGo9ZC5kaXN0YW5jZShjLGMsITEsITApLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkIHlmLnNldFJlbGF0aXZlKGEsYSwoaStqKS8yLGQsITApOnZvaWQgeWYuc2V0UmVsYXRpdmUoYSxhLChpKmgraipnKS9rLGQsITApKTooZT1hLnlvLWIueW8sZj1hLnlvLWMueW8saT1iLnktYi55byxqPWMueS1jLnlvLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkKGEueT1hLnlvKyhpK2opLzIpOnZvaWQoYS55PWEueW8rKGkqaCtqKmcpL2spKX0sbm9ybWFsU2xvcGU6MCxzZXRSZWxhdGl2ZTpmdW5jdGlvbihhLGIsYyxkLGUpe2lmKCFkfHxkPT09dGhpcylyZXR1cm4gdm9pZChhLnk9KGU/Yi55bzpiLnkpK2MpO3ZhciBmPWU/Yi54bzpiLngsZz1lP2IueW86Yi55LGg9ZitjKmQueCxpPWcrYypkLnk7YS55PWkrZC5ub3JtYWxTbG9wZSooYS54LWgpfSxzbG9wZTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdG91Y2g6ZnVuY3Rpb24oYSl7YS55VG91Y2hlZD0hMH0sdG91Y2hlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS55VG91Y2hlZH0sdW50b3VjaDpmdW5jdGlvbihhKXthLnlUb3VjaGVkPSExfX07T2JqZWN0LmZyZWV6ZSh4ZiksT2JqZWN0LmZyZWV6ZSh5ZiksVGIucHJvdG90eXBlLmRpc3RhbmNlPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLngqeGYuZGlzdGFuY2UoYSxiLGMsZCkrdGhpcy55KnlmLmRpc3RhbmNlKGEsYixjLGQpfSxUYi5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7aWYoZz1kLmRpc3RhbmNlKGEsYiwhMCwhMCksaD1kLmRpc3RhbmNlKGEsYywhMCwhMCksZT1kLmRpc3RhbmNlKGIsYiwhMSwhMCksZj1kLmRpc3RhbmNlKGMsYywhMSwhMCksaT1NYXRoLmFicyhnKSxqPU1hdGguYWJzKGgpLDA9PT0oaz1pK2opKXJldHVybiB2b2lkIHRoaXMuc2V0UmVsYXRpdmUoYSxhLChlK2YpLzIsZCwhMCk7dGhpcy5zZXRSZWxhdGl2ZShhLGEsKGUqaitmKmkpL2ssZCwhMCl9LFRiLnByb3RvdHlwZS5zZXRSZWxhdGl2ZT1mdW5jdGlvbihhLGIsYyxkLGUpe2Q9ZHx8dGhpczt2YXIgZj1lP2IueG86Yi54LGc9ZT9iLnlvOmIueSxoPWYrYypkLngsaT1nK2MqZC55LGo9ZC5ub3JtYWxTbG9wZSxrPXRoaXMuc2xvcGUsbD1hLngsbT1hLnk7YS54PShrKmwtaipoK2ktbSkvKGstaiksYS55PWsqKGEueC1sKSttfSxUYi5wcm90b3R5cGUudG91Y2g9ZnVuY3Rpb24oYSl7YS54VG91Y2hlZD0hMCxhLnlUb3VjaGVkPSEwfSxWYi5wcm90b3R5cGUubmV4dFRvdWNoZWQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMubmV4dFBvaW50T25Db250b3VyOyFhLnRvdWNoZWQoYikmJmIhPT10aGlzOyliPWIubmV4dFBvaW50T25Db250b3VyO3JldHVybiBifSxWYi5wcm90b3R5cGUucHJldlRvdWNoZWQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMucHJldlBvaW50T25Db250b3VyOyFhLnRvdWNoZWQoYikmJmIhPT10aGlzOyliPWIucHJldlBvaW50T25Db250b3VyO3JldHVybiBifTt2YXIgemY9T2JqZWN0LmZyZWV6ZShuZXcgVmIoMCwwKSksQWY9e2N2Q3V0SW46MTcvMTYsZGVsdGFCYXNlOjksZGVsdGFTaGlmdDouMTI1LGxvb3A6MSxtaW5EaXM6MSxhdXRvRmxpcDohMH07TWIucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oYixjKXtpZihcIm51bWJlclwiIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3IoXCJQb2ludCBzaXplIGlzIG5vdCBhIG51bWJlciFcIik7aWYoISh0aGlzLl9lcnJvclN0YXRlPjIpKXt2YXIgZD10aGlzLmZvbnQsZT10aGlzLl9wcmVwU3RhdGU7aWYoIWV8fGUucHBlbSE9PWMpe3ZhciBmPXRoaXMuX2ZwZ21TdGF0ZTtpZighZil7V2IucHJvdG90eXBlPUFmLGY9dGhpcy5fZnBnbVN0YXRlPW5ldyBXYihcImZwZ21cIixkLnRhYmxlcy5mcGdtKSxmLmZ1bmNzPVtdLGYuZm9udD1kLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgRlBHTS0tLVwiKSxmLnN0ZXA9LTEpO3RyeXtzZihmKX1jYXRjaChhKXtyZXR1cm4gY29uc29sZS5sb2coXCJIaW50aW5nIGVycm9yIGluIEZQR006XCIrYSksdm9pZCh0aGlzLl9lcnJvclN0YXRlPTMpfX1XYi5wcm90b3R5cGU9ZixlPXRoaXMuX3ByZXBTdGF0ZT1uZXcgV2IoXCJwcmVwXCIsZC50YWJsZXMucHJlcCksZS5wcGVtPWM7dmFyIGc9ZC50YWJsZXMuY3Z0O2lmKGcpZm9yKHZhciBoPWUuY3Z0PW5ldyBBcnJheShnLmxlbmd0aCksaT1jL2QudW5pdHNQZXJFbSxqPTA7ajxnLmxlbmd0aDtqKyspaFtqXT1nW2pdKmk7ZWxzZSBlLmN2dD1bXTthLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIFBSRVAtLS1cIiksZS5zdGVwPS0xKTt0cnl7c2YoZSl9Y2F0Y2goYSl7dGhpcy5fZXJyb3JTdGF0ZTwyJiZjb25zb2xlLmxvZyhcIkhpbnRpbmcgZXJyb3IgaW4gUFJFUDpcIithKSx0aGlzLl9lcnJvclN0YXRlPTJ9fWlmKCEodGhpcy5fZXJyb3JTdGF0ZT4xKSl0cnl7cmV0dXJuIHRmKGIsZSl9Y2F0Y2goYSl7cmV0dXJuIHRoaXMuX2Vycm9yU3RhdGU8MSYmKGNvbnNvbGUubG9nKFwiSGludGluZyBlcnJvcjpcIithKSxjb25zb2xlLmxvZyhcIk5vdGU6IGZ1cnRoZXIgaGludGluZyBlcnJvcnMgYXJlIHNpbGVuY2VkXCIpKSx2b2lkKHRoaXMuX2Vycm9yU3RhdGU9MSl9fX0sdGY9ZnVuY3Rpb24oYixjKXt2YXIgZCxlLGYsZz1jLnBwZW0vYy5mb250LnVuaXRzUGVyRW0saD1nLGk9Yi5jb21wb25lbnRzO2lmKFdiLnByb3RvdHlwZT1jLGkpe3ZhciBqPWMuZm9udDtlPVtdLGQ9W107Zm9yKHZhciBrPTA7azxpLmxlbmd0aDtrKyspe3ZhciBsPWlba10sbT1qLmdseXBocy5nZXQobC5nbHlwaEluZGV4KTtmPW5ldyBXYihcImdseWZcIixtLmluc3RydWN0aW9ucyksYS5ERUJVRyYmKGNvbnNvbGUubG9nKFwiLS0tRVhFQyBDT01QIFwiK2srXCItLS1cIiksZi5zdGVwPS0xKSx1ZihtLGYsZyxoKTtmb3IodmFyIG49TWF0aC5yb3VuZChsLmR4KmcpLG89TWF0aC5yb3VuZChsLmR5KmgpLHA9Zi5nWm9uZSxxPWYuY29udG91cnMscj0wO3I8cC5sZW5ndGg7cisrKXt2YXIgcz1wW3JdO3MueFRvdWNoZWQ9cy55VG91Y2hlZD0hMSxzLnhvPXMueD1zLngrbixzLnlvPXMueT1zLnkrb312YXIgdD1lLmxlbmd0aDtlLnB1c2guYXBwbHkoZSxwKTtmb3IodmFyIHU9MDt1PHEubGVuZ3RoO3UrKylkLnB1c2gocVt1XSt0KX1iLmluc3RydWN0aW9ucyYmIWYuaW5oaWJpdEdyaWRGaXQmJihmPW5ldyBXYihcImdseWZcIixiLmluc3RydWN0aW9ucyksZi5nWm9uZT1mLnowPWYuejE9Zi56Mj1lLGYuY29udG91cnM9ZCxlLnB1c2gobmV3IFZiKDAsMCksbmV3IFZiKE1hdGgucm91bmQoYi5hZHZhbmNlV2lkdGgqZyksMCkpLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgQ09NUE9TSVRFLS0tXCIpLGYuc3RlcD0tMSksc2YoZiksZS5sZW5ndGgtPTIpfWVsc2UgZj1uZXcgV2IoXCJnbHlmXCIsYi5pbnN0cnVjdGlvbnMpLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgR0xZUEgtLS1cIiksZi5zdGVwPS0xKSx1ZihiLGYsZyxoKSxlPWYuZ1pvbmU7cmV0dXJuIGV9LHVmPWZ1bmN0aW9uKGIsYyxkLGUpe2Zvcih2YXIgZixnPWIucG9pbnRzfHxbXSxoPWcubGVuZ3RoLGk9Yy5nWm9uZT1jLnowPWMuejE9Yy56Mj1bXSxqPWMuY29udG91cnM9W10saz0wO2s8aDtrKyspZj1nW2tdLGlba109bmV3IFZiKGYueCpkLGYueSplLGYubGFzdFBvaW50T2ZDb250b3VyLGYub25DdXJ2ZSk7Zm9yKHZhciBsLG0sbj0wO248aDtuKyspZj1pW25dLGx8fChsPWYsai5wdXNoKG4pKSxmLmxhc3RQb2ludE9mQ29udG91cj8oZi5uZXh0UG9pbnRPbkNvbnRvdXI9bCxsLnByZXZQb2ludE9uQ29udG91cj1mLGw9dm9pZCAwKToobT1pW24rMV0sZi5uZXh0UG9pbnRPbkNvbnRvdXI9bSxtLnByZXZQb2ludE9uQ29udG91cj1mKTtpZighYy5pbmhpYml0R3JpZEZpdCl7aWYoYS5ERUJVRyl7Y29uc29sZS5sb2coXCJQUk9DRVNTSU5HIEdMWVBIXCIsYy5zdGFjayk7Zm9yKHZhciBvPTA7bzxoO28rKyljb25zb2xlLmxvZyhvLGlbb10ueCxpW29dLnkpfWlmKGkucHVzaChuZXcgVmIoMCwwKSxuZXcgVmIoTWF0aC5yb3VuZChiLmFkdmFuY2VXaWR0aCpkKSwwKSksc2YoYyksaS5sZW5ndGgtPTIsYS5ERUJVRyl7Y29uc29sZS5sb2coXCJGSU5JU0hFRCBHTFlQSFwiLGMuc3RhY2spO2Zvcih2YXIgcD0wO3A8aDtwKyspY29uc29sZS5sb2cocCxpW3BdLngsaVtwXS55KX19fSxzZj1mdW5jdGlvbihiKXt2YXIgYz1iLnByb2c7aWYoYyl7dmFyIGQsZT1jLmxlbmd0aDtmb3IoYi5pcD0wO2IuaXA8ZTtiLmlwKyspe2lmKGEuREVCVUcmJmIuc3RlcCsrLCEoZD1yZltjW2IuaXBdXSkpdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBpbnN0cnVjdGlvbjogMHhcIitOdW1iZXIoY1tiLmlwXSkudG9TdHJpbmcoMTYpKTtkKGIpfX19LHJmPVtaYi5iaW5kKHZvaWQgMCx5ZiksWmIuYmluZCh2b2lkIDAseGYpLCRiLmJpbmQodm9pZCAwLHlmKSwkYi5iaW5kKHZvaWQgMCx4ZiksX2IuYmluZCh2b2lkIDAseWYpLF9iLmJpbmQodm9pZCAwLHhmKSxhYy5iaW5kKHZvaWQgMCwwKSxhYy5iaW5kKHZvaWQgMCwxKSxiYy5iaW5kKHZvaWQgMCwwKSxiYy5iaW5kKHZvaWQgMCwxKSxjYyxkYyxlYyxmYyxnYyxoYyxpYyxqYyxrYyxsYyxtYyxuYyxvYyxwYyxxYyxyYyxzYyx0Yyx1Yyx2Yyx2b2lkIDAsdm9pZCAwLHdjLHhjLHljLHpjLEFjLERjLEVjLHZvaWQgMCx2b2lkIDAsdm9pZCAwLEJjLENjLEZjLHZvaWQgMCxHYy5iaW5kKHZvaWQgMCwwKSxHYy5iaW5kKHZvaWQgMCwxKSxIYy5iaW5kKHZvaWQgMCx5ZiksSGMuYmluZCh2b2lkIDAseGYpLEljLmJpbmQodm9pZCAwLDApLEljLmJpbmQodm9pZCAwLDEpLEpjLmJpbmQodm9pZCAwLDApLEpjLmJpbmQodm9pZCAwLDEpLEtjLmJpbmQodm9pZCAwLDApLEtjLmJpbmQodm9pZCAwLDEpLExjLE1jLE5jLmJpbmQodm9pZCAwLDApLE5jLmJpbmQodm9pZCAwLDEpLE9jLFBjLFFjLmJpbmQodm9pZCAwLDApLFFjLmJpbmQodm9pZCAwLDEpLFJjLFNjLFRjLFVjLFZjLFdjLFhjLmJpbmQodm9pZCAwLDApLFhjLmJpbmQodm9pZCAwLDEpLHZvaWQgMCxZYy5iaW5kKHZvaWQgMCwwKSxZYy5iaW5kKHZvaWQgMCwxKSxaYyx2b2lkIDAsJGMsdm9pZCAwLHZvaWQgMCxfYyxhZCxiZCxjZCxkZCxlZCxmZCxnZCxoZCxpZCxqZCxrZCxsZCxtZC5iaW5kKHZvaWQgMCwxKSxuZCxvZCxwZCxxZCxyZCxzZCx0ZCx1ZCx2ZCx3ZCx4ZC5iaW5kKHZvaWQgMCwwKSx4ZC5iaW5kKHZvaWQgMCwxKSx4ZC5iaW5kKHZvaWQgMCwyKSx4ZC5iaW5kKHZvaWQgMCwzKSx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAseWQsbWQuYmluZCh2b2lkIDAsMiksbWQuYmluZCh2b2lkIDAsMyksemQuYmluZCh2b2lkIDAsMSksemQuYmluZCh2b2lkIDAsMiksemQuYmluZCh2b2lkIDAsMyksQWQsQmQsdm9pZCAwLHZvaWQgMCxDZCx2b2lkIDAsRGQsRWQseGMseGMsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxGZCxHZC5iaW5kKHZvaWQgMCwwKSxHZC5iaW5kKHZvaWQgMCwxKSxIZCx2b2lkIDAsSWQsSmQsS2QsTGQsTWQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsTmQuYmluZCh2b2lkIDAsMSksTmQuYmluZCh2b2lkIDAsMiksTmQuYmluZCh2b2lkIDAsMyksTmQuYmluZCh2b2lkIDAsNCksTmQuYmluZCh2b2lkIDAsNSksTmQuYmluZCh2b2lkIDAsNiksTmQuYmluZCh2b2lkIDAsNyksTmQuYmluZCh2b2lkIDAsOCksT2QuYmluZCh2b2lkIDAsMSksT2QuYmluZCh2b2lkIDAsMiksT2QuYmluZCh2b2lkIDAsMyksT2QuYmluZCh2b2lkIDAsNCksT2QuYmluZCh2b2lkIDAsNSksT2QuYmluZCh2b2lkIDAsNiksT2QuYmluZCh2b2lkIDAsNyksT2QuYmluZCh2b2lkIDAsOCksUGQuYmluZCh2b2lkIDAsMCwwLDAsMCwwKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwwLDEpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDAsMiksUGQuYmluZCh2b2lkIDAsMCwwLDAsMCwzKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwxLDApLFBkLmJpbmQodm9pZCAwLDAsMCwwLDEsMSksUGQuYmluZCh2b2lkIDAsMCwwLDAsMSwyKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwxLDMpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDAsMCksUGQuYmluZCh2b2lkIDAsMCwwLDEsMCwxKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwwLDIpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDAsMyksUGQuYmluZCh2b2lkIDAsMCwwLDEsMSwwKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwxLDEpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDEsMiksUGQuYmluZCh2b2lkIDAsMCwwLDEsMSwzKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwwLDApLFBkLmJpbmQodm9pZCAwLDAsMSwwLDAsMSksUGQuYmluZCh2b2lkIDAsMCwxLDAsMCwyKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwwLDMpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDEsMCksUGQuYmluZCh2b2lkIDAsMCwxLDAsMSwxKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwxLDIpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDEsMyksUGQuYmluZCh2b2lkIDAsMCwxLDEsMCwwKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwwLDEpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDAsMiksUGQuYmluZCh2b2lkIDAsMCwxLDEsMCwzKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwxLDApLFBkLmJpbmQodm9pZCAwLDAsMSwxLDEsMSksUGQuYmluZCh2b2lkIDAsMCwxLDEsMSwyKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwxLDMpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDAsMCksUGQuYmluZCh2b2lkIDAsMSwwLDAsMCwxKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwwLDIpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDAsMyksUGQuYmluZCh2b2lkIDAsMSwwLDAsMSwwKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwxLDEpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDEsMiksUGQuYmluZCh2b2lkIDAsMSwwLDAsMSwzKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwwLDApLFBkLmJpbmQodm9pZCAwLDEsMCwxLDAsMSksUGQuYmluZCh2b2lkIDAsMSwwLDEsMCwyKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwwLDMpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDEsMCksUGQuYmluZCh2b2lkIDAsMSwwLDEsMSwxKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwxLDIpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDEsMyksUGQuYmluZCh2b2lkIDAsMSwxLDAsMCwwKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwwLDEpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDAsMiksUGQuYmluZCh2b2lkIDAsMSwxLDAsMCwzKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwxLDApLFBkLmJpbmQodm9pZCAwLDEsMSwwLDEsMSksUGQuYmluZCh2b2lkIDAsMSwxLDAsMSwyKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwxLDMpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDAsMCksUGQuYmluZCh2b2lkIDAsMSwxLDEsMCwxKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwwLDIpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDAsMyksUGQuYmluZCh2b2lkIDAsMSwxLDEsMSwwKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwxLDEpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDEsMiksUGQuYmluZCh2b2lkIDAsMSwxLDEsMSwzKV07dmFyIEJmPUFycmF5LmZyb218fGZ1bmN0aW9uKGEpe3JldHVybiBhLm1hdGNoKC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdP3xbXlxcdUQ4MDAtXFx1REZGRl18Li9nKXx8W119O1FkLnByb3RvdHlwZS5oYXNDaGFyPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09dGhpcy5lbmNvZGluZy5jaGFyVG9HbHlwaEluZGV4KGEpfSxRZC5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lbmNvZGluZy5jaGFyVG9HbHlwaEluZGV4KGEpfSxRZC5wcm90b3R5cGUuY2hhclRvR2x5cGg9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jaGFyVG9HbHlwaEluZGV4KGEpLGM9dGhpcy5nbHlwaHMuZ2V0KGIpO3JldHVybiBjfHwoYz10aGlzLmdseXBocy5nZXQoMCkpLGN9LFFkLnByb3RvdHlwZS5zdHJpbmdUb0dseXBocz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Yj1ifHx0aGlzLmRlZmF1bHRSZW5kZXJPcHRpb25zO2Zvcih2YXIgZD1CZihhKSxlPVtdLGY9MDtmPGQubGVuZ3RoO2YrPTEpe3ZhciBnPWRbZl07ZS5wdXNoKGMuY2hhclRvR2x5cGhJbmRleChnKSl9dmFyIGg9ZS5sZW5ndGg7aWYoYi5mZWF0dXJlcyl7dmFyIGk9Yi5zY3JpcHR8fHRoaXMuc3Vic3RpdHV0aW9uLmdldERlZmF1bHRTY3JpcHROYW1lKCksaj1bXTtiLmZlYXR1cmVzLmxpZ2EmJihqPWouY29uY2F0KHRoaXMuc3Vic3RpdHV0aW9uLmdldEZlYXR1cmUoXCJsaWdhXCIsaSxiLmxhbmd1YWdlKSkpLGIuZmVhdHVyZXMucmxpZyYmKGo9ai5jb25jYXQodGhpcy5zdWJzdGl0dXRpb24uZ2V0RmVhdHVyZShcInJsaWdcIixpLGIubGFuZ3VhZ2UpKSk7Zm9yKHZhciBrPTA7azxoO2srPTEpZm9yKHZhciBsPTA7bDxqLmxlbmd0aDtsKyspe2Zvcih2YXIgbT1qW2xdLG49bS5zdWIsbz1uLmxlbmd0aCxwPTA7cDxvJiZuW3BdPT09ZVtrK3BdOylwKys7cD09PW8mJihlLnNwbGljZShrLG8sbS5ieSksaD1oLW8rMSl9fWZvcih2YXIgcT1uZXcgQXJyYXkoaCkscj10aGlzLmdseXBocy5nZXQoMCkscz0wO3M8aDtzKz0xKXFbc109Yy5nbHlwaHMuZ2V0KGVbc10pfHxyO3JldHVybiBxfSxRZC5wcm90b3R5cGUubmFtZVRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nbHlwaE5hbWVzLm5hbWVUb0dseXBoSW5kZXgoYSl9LFFkLnByb3RvdHlwZS5uYW1lVG9HbHlwaD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm5hbWVUb0dseXBoSW5kZXgoYSksYz10aGlzLmdseXBocy5nZXQoYik7cmV0dXJuIGN8fChjPXRoaXMuZ2x5cGhzLmdldCgwKSksY30sUWQucHJvdG90eXBlLmdseXBoSW5kZXhUb05hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ2x5cGhOYW1lcy5nbHlwaEluZGV4VG9OYW1lP3RoaXMuZ2x5cGhOYW1lcy5nbHlwaEluZGV4VG9OYW1lKGEpOlwiXCJ9LFFkLnByb3RvdHlwZS5nZXRLZXJuaW5nVmFsdWU9ZnVuY3Rpb24oYSxiKXthPWEuaW5kZXh8fGEsYj1iLmluZGV4fHxiO3ZhciBjPXRoaXMucG9zaXRpb24uZGVmYXVsdEtlcm5pbmdUYWJsZXM7cmV0dXJuIGM/dGhpcy5wb3NpdGlvbi5nZXRLZXJuaW5nVmFsdWUoYyxhLGIpOnRoaXMua2VybmluZ1BhaXJzW2ErXCIsXCIrYl18fDB9LFFkLnByb3RvdHlwZS5kZWZhdWx0UmVuZGVyT3B0aW9ucz17a2VybmluZzohMCxmZWF0dXJlczp7bGlnYTohMCxybGlnOiEwfX0sUWQucHJvdG90eXBlLmZvckVhY2hHbHlwaD1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9dGhpcztiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD12b2lkIDAhPT1kP2Q6NzIsZT1lfHx0aGlzLmRlZmF1bHRSZW5kZXJPcHRpb25zO3ZhciBoLGk9MS90aGlzLnVuaXRzUGVyRW0qZCxqPXRoaXMuc3RyaW5nVG9HbHlwaHMoYSxlKTtpZihlLmtlcm5pbmcpe3ZhciBrPWUuc2NyaXB0fHx0aGlzLnBvc2l0aW9uLmdldERlZmF1bHRTY3JpcHROYW1lKCk7aD10aGlzLnBvc2l0aW9uLmdldEtlcm5pbmdUYWJsZXMoayxlLmxhbmd1YWdlKX1mb3IodmFyIGw9MDtsPGoubGVuZ3RoO2wrPTEpe3ZhciBtPWpbbF07aWYoZi5jYWxsKGcsbSxiLGMsZCxlKSxtLmFkdmFuY2VXaWR0aCYmKGIrPW0uYWR2YW5jZVdpZHRoKmkpLGUua2VybmluZyYmbDxqLmxlbmd0aC0xKXtiKz0oaD9nLnBvc2l0aW9uLmdldEtlcm5pbmdWYWx1ZShoLG0uaW5kZXgsaltsKzFdLmluZGV4KTpnLmdldEtlcm5pbmdWYWx1ZShtLGpbbCsxXSkpKml9ZS5sZXR0ZXJTcGFjaW5nP2IrPWUubGV0dGVyU3BhY2luZypkOmUudHJhY2tpbmcmJihiKz1lLnRyYWNraW5nLzFlMypkKX1yZXR1cm4gYn0sUWQucHJvdG90eXBlLmdldFBhdGg9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1uZXcgcjtyZXR1cm4gdGhpcy5mb3JFYWNoR2x5cGgoYSxiLGMsZCxlLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBnPWEuZ2V0UGF0aChiLGMsZCxlLHRoaXMpO2YuZXh0ZW5kKGcpfSksZn0sUWQucHJvdG90eXBlLmdldFBhdGhzPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9W107cmV0dXJuIHRoaXMuZm9yRWFjaEdseXBoKGEsYixjLGQsZSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZz1hLmdldFBhdGgoYixjLGQsZSx0aGlzKTtmLnB1c2goZyl9KSxmfSxRZC5wcm90b3R5cGUuZ2V0QWR2YW5jZVdpZHRoPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5mb3JFYWNoR2x5cGgoYSwwLDAsYixjLGZ1bmN0aW9uKCl7fSl9LFFkLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmdldFBhdGgoYixjLGQsZSxmKS5kcmF3KGEpfSxRZC5wcm90b3R5cGUuZHJhd1BvaW50cz1mdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5mb3JFYWNoR2x5cGgoYixjLGQsZSxmLGZ1bmN0aW9uKGIsYyxkLGUpe2IuZHJhd1BvaW50cyhhLGMsZCxlKX0pfSxRZC5wcm90b3R5cGUuZHJhd01ldHJpY3M9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZm9yRWFjaEdseXBoKGIsYyxkLGUsZixmdW5jdGlvbihiLGMsZCxlKXtiLmRyYXdNZXRyaWNzKGEsYyxkLGUpfSl9LFFkLnByb3RvdHlwZS5nZXRFbmdsaXNoTmFtZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm5hbWVzW2FdO2lmKGIpcmV0dXJuIGIuZW59LFFkLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXt9ZnVuY3Rpb24gYihiKXt2YXIgZD1jLmdldEVuZ2xpc2hOYW1lKGIpO2EoZCYmZC50cmltKCkubGVuZ3RoPjAsXCJObyBFbmdsaXNoIFwiK2IrXCIgc3BlY2lmaWVkLlwiKX12YXIgYz10aGlzO2IoXCJmb250RmFtaWx5XCIpLGIoXCJ3ZWlnaHROYW1lXCIpLGIoXCJtYW51ZmFjdHVyZXJcIiksYihcImNvcHlyaWdodFwiKSxiKFwidmVyc2lvblwiKSxhKHRoaXMudW5pdHNQZXJFbT4wLFwiTm8gdW5pdHNQZXJFbSBzcGVjaWZpZWQuXCIpfSxRZC5wcm90b3R5cGUudG9UYWJsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gcWYuZm9udFRvVGFibGUodGhpcyl9LFFkLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oXCJGb250LnRvQnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBGb250LnRvQXJyYXlCdWZmZXIgaW5zdGVhZC5cIiksdGhpcy50b0FycmF5QnVmZmVyKCl9LFFkLnByb3RvdHlwZS50b0FycmF5QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMudG9UYWJsZXMoKSxiPWEuZW5jb2RlKCksYz1uZXcgQXJyYXlCdWZmZXIoYi5sZW5ndGgpLGQ9bmV3IFVpbnQ4QXJyYXkoYyksZT0wO2U8Yi5sZW5ndGg7ZSsrKWRbZV09YltlXTtyZXR1cm4gY30sUWQucHJvdG90eXBlLmRvd25sb2FkPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuZ2V0RW5nbGlzaE5hbWUoXCJmb250RmFtaWx5XCIpLGQ9dGhpcy5nZXRFbmdsaXNoTmFtZShcImZvbnRTdWJmYW1pbHlcIik7YT1hfHxjLnJlcGxhY2UoL1xccy9nLFwiXCIpK1wiLVwiK2QrXCIub3RmXCI7dmFyIGU9dGhpcy50b0FycmF5QnVmZmVyKCk7aWYoQmIoKSl3aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW09d2luZG93LnJlcXVlc3RGaWxlU3lzdGVtfHx3aW5kb3cud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0sd2luZG93LnJlcXVlc3RGaWxlU3lzdGVtKHdpbmRvdy5URU1QT1JBUlksZS5ieXRlTGVuZ3RoLGZ1bmN0aW9uKGIpe2Iucm9vdC5nZXRGaWxlKGEse2NyZWF0ZTohMH0sZnVuY3Rpb24oYSl7YS5jcmVhdGVXcml0ZXIoZnVuY3Rpb24oYil7dmFyIGM9bmV3IERhdGFWaWV3KGUpLGQ9bmV3IEJsb2IoW2NdLHt0eXBlOlwiZm9udC9vcGVudHlwZVwifSk7Yi53cml0ZShkKSxiLmFkZEV2ZW50TGlzdGVuZXIoXCJ3cml0ZWVuZFwiLGZ1bmN0aW9uKCl7bG9jYXRpb24uaHJlZj1hLnRvVVJMKCl9LCExKX0pfSl9LGZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihhLm5hbWUrXCI6IFwiK2EubWVzc2FnZSl9KTtlbHNle3ZhciBmPWIoXCJmc1wiKSxnPURiKGUpO2Yud3JpdGVGaWxlU3luYyhhLGcpfX0sUWQucHJvdG90eXBlLmZzU2VsZWN0aW9uVmFsdWVzPXtJVEFMSUM6MSxVTkRFUlNDT1JFOjIsTkVHQVRJVkU6NCxPVVRMSU5FRDo4LFNUUklLRU9VVDoxNixCT0xEOjMyLFJFR1VMQVI6NjQsVVNFUl9UWVBPX01FVFJJQ1M6MTI4LFdXUzoyNTYsT0JMSVFVRTo1MTJ9LFFkLnByb3RvdHlwZS51c1dpZHRoQ2xhc3Nlcz17VUxUUkFfQ09OREVOU0VEOjEsRVhUUkFfQ09OREVOU0VEOjIsQ09OREVOU0VEOjMsU0VNSV9DT05ERU5TRUQ6NCxNRURJVU06NSxTRU1JX0VYUEFOREVEOjYsRVhQQU5ERUQ6NyxFWFRSQV9FWFBBTkRFRDo4LFVMVFJBX0VYUEFOREVEOjl9LFFkLnByb3RvdHlwZS51c1dlaWdodENsYXNzZXM9e1RISU46MTAwLEVYVFJBX0xJR0hUOjIwMCxMSUdIVDozMDAsTk9STUFMOjQwMCxNRURJVU06NTAwLFNFTUlfQk9MRDo2MDAsQk9MRDo3MDAsRVhUUkFfQk9MRDo4MDAsQkxBQ0s6OTAwfTt2YXIgQ2Y9e21ha2U6V2QscGFyc2U6WGR9LERmPW5ldyBBcnJheSgxMCk7RGZbMV09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiAxPT09Yj97cG9zRm9ybWF0OjEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksdmFsdWU6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKCl9OjI9PT1iP3tcbnBvc0Zvcm1hdDoyLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHZhbHVlczp0aGlzLnBhcnNlVmFsdWVSZWNvcmRMaXN0KCl9OnZvaWQgeGUuYXNzZXJ0KCExLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogR1BPUyBsb29rdXAgdHlwZSAxIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIil9LERmWzJdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTt4ZS5hc3NlcnQoMT09PWJ8fDI9PT1iLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogR1BPUyBsb29rdXAgdHlwZSAyIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIik7dmFyIGM9dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksZD10aGlzLnBhcnNlVVNob3J0KCksZT10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWIpcmV0dXJue3Bvc0Zvcm1hdDpiLGNvdmVyYWdlOmMsdmFsdWVGb3JtYXQxOmQsdmFsdWVGb3JtYXQyOmUscGFpclNldHM6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEubGlzdChmdW5jdGlvbigpe3JldHVybntzZWNvbmRHbHlwaDp0aGlzLnBhcnNlVVNob3J0KCksdmFsdWUxOnRoaXMucGFyc2VWYWx1ZVJlY29yZChkKSx2YWx1ZTI6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKGUpfX0pKSl9O2lmKDI9PT1iKXt2YXIgZj10aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxnPXRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGg9dGhpcy5wYXJzZVVTaG9ydCgpLGk9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntwb3NGb3JtYXQ6Yixjb3ZlcmFnZTpjLHZhbHVlRm9ybWF0MTpkLHZhbHVlRm9ybWF0MjplLGNsYXNzRGVmMTpmLGNsYXNzRGVmMjpnLGNsYXNzMUNvdW50OmgsY2xhc3MyQ291bnQ6aSxjbGFzc1JlY29yZHM6dGhpcy5wYXJzZUxpc3QoaCxRLmxpc3QoaSxmdW5jdGlvbigpe3JldHVybnt2YWx1ZTE6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKGQpLHZhbHVlMjp0aGlzLnBhcnNlVmFsdWVSZWNvcmQoZSl9fSkpfX19LERmWzNdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgMyBub3Qgc3VwcG9ydGVkXCJ9fSxEZls0XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDQgbm90IHN1cHBvcnRlZFwifX0sRGZbNV09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA1IG5vdCBzdXBwb3J0ZWRcIn19LERmWzZdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgNiBub3Qgc3VwcG9ydGVkXCJ9fSxEZls3XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDcgbm90IHN1cHBvcnRlZFwifX0sRGZbOF09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA4IG5vdCBzdXBwb3J0ZWRcIn19LERmWzldPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgOSBub3Qgc3VwcG9ydGVkXCJ9fTt2YXIgRWY9bmV3IEFycmF5KDEwKSxGZj17cGFyc2U6WWQsbWFrZTpaZH0sR2Y9e3BhcnNlOmFlfSxIZj17cGFyc2U6YmV9O2EuRm9udD1RZCxhLkdseXBoPWNhLGEuUGF0aD1yLGEuQm91bmRpbmdCb3g9cSxhLl9wYXJzZT1MZSxhLnBhcnNlPWhlLGEubG9hZD1pZSxhLmxvYWRTeW5jPWplLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSl9KS5jYWxsKHRoaXMsYihcImJ1ZmZlclwiKS5CdWZmZXIpfSx7YnVmZmVyOjMsZnM6Mn1dLDExOltmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZCgpe3Rocm93IG5ldyBFcnJvcihcInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gZSgpe3Rocm93IG5ldyBFcnJvcihcImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBmKGEpe2lmKGw9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGEsMCk7aWYoKGw9PT1kfHwhbCkmJnNldFRpbWVvdXQpcmV0dXJuIGw9c2V0VGltZW91dCxzZXRUaW1lb3V0KGEsMCk7dHJ5e3JldHVybiBsKGEsMCl9Y2F0Y2goYil7dHJ5e3JldHVybiBsLmNhbGwobnVsbCxhLDApfWNhdGNoKGIpe3JldHVybiBsLmNhbGwodGhpcyxhLDApfX19ZnVuY3Rpb24gZyhhKXtpZihtPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoYSk7aWYoKG09PT1lfHwhbSkmJmNsZWFyVGltZW91dClyZXR1cm4gbT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGEpO3RyeXtyZXR1cm4gbShhKX1jYXRjaChiKXt0cnl7cmV0dXJuIG0uY2FsbChudWxsLGEpfWNhdGNoKGIpe3JldHVybiBtLmNhbGwodGhpcyxhKX19fWZ1bmN0aW9uIGgoKXtxJiZvJiYocT0hMSxvLmxlbmd0aD9wPW8uY29uY2F0KHApOnI9LTEscC5sZW5ndGgmJmkoKSl9ZnVuY3Rpb24gaSgpe2lmKCFxKXt2YXIgYT1mKGgpO3E9ITA7Zm9yKHZhciBiPXAubGVuZ3RoO2I7KXtmb3Iobz1wLHA9W107KytyPGI7KW8mJm9bcl0ucnVuKCk7cj0tMSxiPXAubGVuZ3RofW89bnVsbCxxPSExLGcoYSl9fWZ1bmN0aW9uIGooYSxiKXt0aGlzLmZ1bj1hLHRoaXMuYXJyYXk9Yn1mdW5jdGlvbiBrKCl7fXZhciBsLG0sbj1iLmV4cG9ydHM9e307IWZ1bmN0aW9uKCl7dHJ5e2w9XCJmdW5jdGlvblwiPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OmR9Y2F0Y2goYSl7bD1kfXRyeXttPVwiZnVuY3Rpb25cIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6ZX1jYXRjaChhKXttPWV9fSgpO3ZhciBvLHA9W10scT0hMSxyPS0xO24ubmV4dFRpY2s9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYltjLTFdPWFyZ3VtZW50c1tjXTtwLnB1c2gobmV3IGooYSxiKSksMSE9PXAubGVuZ3RofHxxfHxmKGkpfSxqLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxuLnRpdGxlPVwiYnJvd3NlclwiLG4uYnJvd3Nlcj0hMCxuLmVudj17fSxuLmFyZ3Y9W10sbi52ZXJzaW9uPVwiXCIsbi52ZXJzaW9ucz17fSxuLm9uPWssbi5hZGRMaXN0ZW5lcj1rLG4ub25jZT1rLG4ub2ZmPWssbi5yZW1vdmVMaXN0ZW5lcj1rLG4ucmVtb3ZlQWxsTGlzdGVuZXJzPWssbi5lbWl0PWssbi5wcmVwZW5kTGlzdGVuZXI9ayxuLnByZXBlbmRPbmNlTGlzdGVuZXI9ayxuLmxpc3RlbmVycz1mdW5jdGlvbihhKXtyZXR1cm5bXX0sbi5iaW5kaW5nPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpfSxuLmN3ZD1mdW5jdGlvbigpe3JldHVyblwiL1wifSxuLmNoZGlyPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZFwiKX0sbi51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0se31dLDEyOltmdW5jdGlvbihhLGIsYyl7IWZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPVN0cmluZyhhKSksL1teYS16MC05XFwtIyQlJicqKy5cXF5fYHx+XS9pLnRlc3QoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lXCIpO3JldHVybiBhLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gYyhhKXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9U3RyaW5nKGEpKSxhfWZ1bmN0aW9uIGQoYSl7dmFyIGI9e25leHQ6ZnVuY3Rpb24oKXt2YXIgYj1hLnNoaWZ0KCk7cmV0dXJue2RvbmU6dm9pZCAwPT09Yix2YWx1ZTpifX19O3JldHVybiByLml0ZXJhYmxlJiYoYltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxifWZ1bmN0aW9uIGUoYSl7dGhpcy5tYXA9e30sYSBpbnN0YW5jZW9mIGU/YS5mb3JFYWNoKGZ1bmN0aW9uKGEsYil7dGhpcy5hcHBlbmQoYixhKX0sdGhpcyk6QXJyYXkuaXNBcnJheShhKT9hLmZvckVhY2goZnVuY3Rpb24oYSl7dGhpcy5hcHBlbmQoYVswXSxhWzFdKX0sdGhpcyk6YSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZm9yRWFjaChmdW5jdGlvbihiKXt0aGlzLmFwcGVuZChiLGFbYl0pfSx0aGlzKX1mdW5jdGlvbiBmKGEpe2lmKGEuYm9keVVzZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoXCJBbHJlYWR5IHJlYWRcIikpO2EuYm9keVVzZWQ9ITB9ZnVuY3Rpb24gZyhhKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYixjKXthLm9ubG9hZD1mdW5jdGlvbigpe2IoYS5yZXN1bHQpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXtjKGEuZXJyb3IpfX0pfWZ1bmN0aW9uIGgoYSl7dmFyIGI9bmV3IEZpbGVSZWFkZXIsYz1nKGIpO3JldHVybiBiLnJlYWRBc0FycmF5QnVmZmVyKGEpLGN9ZnVuY3Rpb24gaShhKXt2YXIgYj1uZXcgRmlsZVJlYWRlcixjPWcoYik7cmV0dXJuIGIucmVhZEFzVGV4dChhKSxjfWZ1bmN0aW9uIGooYSl7Zm9yKHZhciBiPW5ldyBVaW50OEFycmF5KGEpLGM9bmV3IEFycmF5KGIubGVuZ3RoKSxkPTA7ZDxiLmxlbmd0aDtkKyspY1tkXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGJbZF0pO3JldHVybiBjLmpvaW4oXCJcIil9ZnVuY3Rpb24gayhhKXtpZihhLnNsaWNlKXJldHVybiBhLnNsaWNlKDApO3ZhciBiPW5ldyBVaW50OEFycmF5KGEuYnl0ZUxlbmd0aCk7cmV0dXJuIGIuc2V0KG5ldyBVaW50OEFycmF5KGEpKSxiLmJ1ZmZlcn1mdW5jdGlvbiBsKCl7cmV0dXJuIHRoaXMuYm9keVVzZWQ9ITEsdGhpcy5faW5pdEJvZHk9ZnVuY3Rpb24oYSl7aWYodGhpcy5fYm9keUluaXQ9YSxhKWlmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXRoaXMuX2JvZHlUZXh0PWE7ZWxzZSBpZihyLmJsb2ImJkJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkpdGhpcy5fYm9keUJsb2I9YTtlbHNlIGlmKHIuZm9ybURhdGEmJkZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpKXRoaXMuX2JvZHlGb3JtRGF0YT1hO2Vsc2UgaWYoci5zZWFyY2hQYXJhbXMmJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSl0aGlzLl9ib2R5VGV4dD1hLnRvU3RyaW5nKCk7ZWxzZSBpZihyLmFycmF5QnVmZmVyJiZyLmJsb2ImJnQoYSkpdGhpcy5fYm9keUFycmF5QnVmZmVyPWsoYS5idWZmZXIpLHRoaXMuX2JvZHlJbml0PW5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKTtlbHNle2lmKCFyLmFycmF5QnVmZmVyfHwhQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkmJiF1KGEpKXRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIEJvZHlJbml0IHR5cGVcIik7dGhpcy5fYm9keUFycmF5QnVmZmVyPWsoYSl9ZWxzZSB0aGlzLl9ib2R5VGV4dD1cIlwiO3RoaXMuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIil8fChcInN0cmluZ1wiPT10eXBlb2YgYT90aGlzLmhlYWRlcnMuc2V0KFwiY29udGVudC10eXBlXCIsXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLThcIik6dGhpcy5fYm9keUJsb2ImJnRoaXMuX2JvZHlCbG9iLnR5cGU/dGhpcy5oZWFkZXJzLnNldChcImNvbnRlbnQtdHlwZVwiLHRoaXMuX2JvZHlCbG9iLnR5cGUpOnIuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkmJnRoaXMuaGVhZGVycy5zZXQoXCJjb250ZW50LXR5cGVcIixcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04XCIpKX0sci5ibG9iJiYodGhpcy5ibG9iPWZ1bmN0aW9uKCl7dmFyIGE9Zih0aGlzKTtpZihhKXJldHVybiBhO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcihcImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYlwiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKX0sdGhpcy5hcnJheUJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib2R5QXJyYXlCdWZmZXI/Zih0aGlzKXx8UHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcik6dGhpcy5ibG9iKCkudGhlbihoKX0pLHRoaXMudGV4dD1mdW5jdGlvbigpe3ZhciBhPWYodGhpcyk7aWYoYSlyZXR1cm4gYTtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gaSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUoaih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKFwiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0XCIpO3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpfSxyLmZvcm1EYXRhJiYodGhpcy5mb3JtRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKG8pfSksdGhpcy5qc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSl9LHRoaXN9ZnVuY3Rpb24gbShhKXt2YXIgYj1hLnRvVXBwZXJDYXNlKCk7cmV0dXJuIHYuaW5kZXhPZihiKT4tMT9iOmF9ZnVuY3Rpb24gbihhLGIpe2I9Ynx8e307dmFyIGM9Yi5ib2R5O2lmKGEgaW5zdGFuY2VvZiBuKXtpZihhLmJvZHlVc2VkKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBbHJlYWR5IHJlYWRcIik7dGhpcy51cmw9YS51cmwsdGhpcy5jcmVkZW50aWFscz1hLmNyZWRlbnRpYWxzLGIuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgZShhLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1hLm1ldGhvZCx0aGlzLm1vZGU9YS5tb2RlLGN8fG51bGw9PWEuX2JvZHlJbml0fHwoYz1hLl9ib2R5SW5pdCxhLmJvZHlVc2VkPSEwKX1lbHNlIHRoaXMudXJsPVN0cmluZyhhKTtpZih0aGlzLmNyZWRlbnRpYWxzPWIuY3JlZGVudGlhbHN8fHRoaXMuY3JlZGVudGlhbHN8fFwib21pdFwiLCFiLmhlYWRlcnMmJnRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgZShiLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1tKGIubWV0aG9kfHx0aGlzLm1ldGhvZHx8XCJHRVRcIiksdGhpcy5tb2RlPWIubW9kZXx8dGhpcy5tb2RlfHxudWxsLHRoaXMucmVmZXJyZXI9bnVsbCwoXCJHRVRcIj09PXRoaXMubWV0aG9kfHxcIkhFQURcIj09PXRoaXMubWV0aG9kKSYmYyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHNcIik7dGhpcy5faW5pdEJvZHkoYyl9ZnVuY3Rpb24gbyhhKXt2YXIgYj1uZXcgRm9ybURhdGE7cmV0dXJuIGEudHJpbSgpLnNwbGl0KFwiJlwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBjPWEuc3BsaXQoXCI9XCIpLGQ9Yy5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSxlPWMuam9pbihcIj1cIikucmVwbGFjZSgvXFwrL2csXCIgXCIpO2IuYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChkKSxkZWNvZGVVUklDb21wb25lbnQoZSkpfX0pLGJ9ZnVuY3Rpb24gcChhKXt2YXIgYj1uZXcgZTtyZXR1cm4gYS5zcGxpdCgvXFxyP1xcbi8pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGM9YS5zcGxpdChcIjpcIiksZD1jLnNoaWZ0KCkudHJpbSgpO2lmKGQpe3ZhciBlPWMuam9pbihcIjpcIikudHJpbSgpO2IuYXBwZW5kKGQsZSl9fSksYn1mdW5jdGlvbiBxKGEsYil7Ynx8KGI9e30pLHRoaXMudHlwZT1cImRlZmF1bHRcIix0aGlzLnN0YXR1cz1cInN0YXR1c1wiaW4gYj9iLnN0YXR1czoyMDAsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNUZXh0PVwic3RhdHVzVGV4dFwiaW4gYj9iLnN0YXR1c1RleHQ6XCJPS1wiLHRoaXMuaGVhZGVycz1uZXcgZShiLmhlYWRlcnMpLHRoaXMudXJsPWIudXJsfHxcIlwiLHRoaXMuX2luaXRCb2R5KGEpfWlmKCFhLmZldGNoKXt2YXIgcj17c2VhcmNoUGFyYW1zOlwiVVJMU2VhcmNoUGFyYW1zXCJpbiBhLGl0ZXJhYmxlOlwiU3ltYm9sXCJpbiBhJiZcIml0ZXJhdG9yXCJpbiBTeW1ib2wsYmxvYjpcIkZpbGVSZWFkZXJcImluIGEmJlwiQmxvYlwiaW4gYSYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBCbG9iLCEwfWNhdGNoKGEpe3JldHVybiExfX0oKSxmb3JtRGF0YTpcIkZvcm1EYXRhXCJpbiBhLGFycmF5QnVmZmVyOlwiQXJyYXlCdWZmZXJcImluIGF9O2lmKHIuYXJyYXlCdWZmZXIpdmFyIHM9W1wiW29iamVjdCBJbnQ4QXJyYXldXCIsXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCIsXCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiLFwiW29iamVjdCBJbnQxNkFycmF5XVwiLFwiW29iamVjdCBVaW50MTZBcnJheV1cIixcIltvYmplY3QgSW50MzJBcnJheV1cIixcIltvYmplY3QgVWludDMyQXJyYXldXCIsXCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIixcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiXSx0PWZ1bmN0aW9uKGEpe3JldHVybiBhJiZEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKX0sdT1BcnJheUJ1ZmZlci5pc1ZpZXd8fGZ1bmN0aW9uKGEpe3JldHVybiBhJiZzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpKT4tMX07ZS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGEsZCl7YT1iKGEpLGQ9YyhkKTt2YXIgZT10aGlzLm1hcFthXTt0aGlzLm1hcFthXT1lP2UrXCIsXCIrZDpkfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMubWFwW2IoYSldfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YihhKSx0aGlzLmhhcyhhKT90aGlzLm1hcFthXTpudWxsfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KGIoYSkpfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxkKXt0aGlzLm1hcFtiKGEpXT1jKGQpfSxlLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjIGluIHRoaXMubWFwKXRoaXMubWFwLmhhc093blByb3BlcnR5KGMpJiZhLmNhbGwoYix0aGlzLm1hcFtjXSxjLHRoaXMpfSxlLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihiLGMpe2EucHVzaChjKX0pLGQoYSl9LGUucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oYil7YS5wdXNoKGIpfSksZChhKX0sZS5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oYixjKXthLnB1c2goW2MsYl0pfSksZChhKX0sci5pdGVyYWJsZSYmKGUucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09ZS5wcm90b3R5cGUuZW50cmllcyk7dmFyIHY9W1wiREVMRVRFXCIsXCJHRVRcIixcIkhFQURcIixcIk9QVElPTlNcIixcIlBPU1RcIixcIlBVVFwiXTtuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHtib2R5OnRoaXMuX2JvZHlJbml0fSl9LGwuY2FsbChuLnByb3RvdHlwZSksbC5jYWxsKHEucHJvdG90eXBlKSxxLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcSh0aGlzLl9ib2R5SW5pdCx7c3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dGhpcy5zdGF0dXNUZXh0LGhlYWRlcnM6bmV3IGUodGhpcy5oZWFkZXJzKSx1cmw6dGhpcy51cmx9KX0scS5lcnJvcj1mdW5jdGlvbigpe3ZhciBhPW5ldyBxKG51bGwse3N0YXR1czowLHN0YXR1c1RleHQ6XCJcIn0pO3JldHVybiBhLnR5cGU9XCJlcnJvclwiLGF9O3ZhciB3PVszMDEsMzAyLDMwMywzMDcsMzA4XTtxLnJlZGlyZWN0PWZ1bmN0aW9uKGEsYil7aWYoLTE9PT13LmluZGV4T2YoYikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHN0YXR1cyBjb2RlXCIpO3JldHVybiBuZXcgcShudWxsLHtzdGF0dXM6YixoZWFkZXJzOntsb2NhdGlvbjphfX0pfSxhLkhlYWRlcnM9ZSxhLlJlcXVlc3Q9bixhLlJlc3BvbnNlPXEsYS5mZXRjaD1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLGQpe3ZhciBlPW5ldyBuKGEsYiksZj1uZXcgWE1MSHR0cFJlcXVlc3Q7Zi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgYT17c3RhdHVzOmYuc3RhdHVzLHN0YXR1c1RleHQ6Zi5zdGF0dXNUZXh0LGhlYWRlcnM6cChmLmdldEFsbFJlc3BvbnNlSGVhZGVycygpfHxcIlwiKX07YS51cmw9XCJyZXNwb25zZVVSTFwiaW4gZj9mLnJlc3BvbnNlVVJMOmEuaGVhZGVycy5nZXQoXCJYLVJlcXVlc3QtVVJMXCIpO3ZhciBiPVwicmVzcG9uc2VcImluIGY/Zi5yZXNwb25zZTpmLnJlc3BvbnNlVGV4dDtjKG5ldyBxKGIsYSkpfSxmLm9uZXJyb3I9ZnVuY3Rpb24oKXtkKG5ldyBUeXBlRXJyb3IoXCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkXCIpKX0sZi5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtkKG5ldyBUeXBlRXJyb3IoXCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkXCIpKX0sZi5vcGVuKGUubWV0aG9kLGUudXJsLCEwKSxcImluY2x1ZGVcIj09PWUuY3JlZGVudGlhbHMmJihmLndpdGhDcmVkZW50aWFscz0hMCksXCJyZXNwb25zZVR5cGVcImluIGYmJnIuYmxvYiYmKGYucmVzcG9uc2VUeXBlPVwiYmxvYlwiKSxlLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihhLGIpe2Yuc2V0UmVxdWVzdEhlYWRlcihiLGEpfSksZi5zZW5kKHZvaWQgMD09PWUuX2JvZHlJbml0P251bGw6ZS5fYm9keUluaXQpfSl9LGEuZmV0Y2gucG9seWZpbGw9ITB9fShcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpfSx7fV0sMTM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9jb3JlL21haW5cIik7YShcIi4vY29yZS9jb25zdGFudHNcIiksYShcIi4vY29yZS9lbnZpcm9ubWVudFwiKSxhKFwiLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksYShcIi4vY29yZS9oZWxwZXJzXCIpLGEoXCIuL2NvcmUvbGVnYWN5XCIpLGEoXCIuL2NvcmUvcDUuRWxlbWVudFwiKSxhKFwiLi9jb3JlL3A1LkdyYXBoaWNzXCIpLGEoXCIuL2NvcmUvcDUuUmVuZGVyZXJcIiksYShcIi4vY29yZS9wNS5SZW5kZXJlcjJEXCIpLGEoXCIuL2NvcmUvcmVuZGVyaW5nXCIpLGEoXCIuL2NvcmUvc2hpbVwiKSxhKFwiLi9jb3JlL3N0cnVjdHVyZVwiKSxhKFwiLi9jb3JlL3RyYW5zZm9ybVwiKSxhKFwiLi9jb3JlL3NoYXBlLzJkX3ByaW1pdGl2ZXNcIiksYShcIi4vY29yZS9zaGFwZS9hdHRyaWJ1dGVzXCIpLGEoXCIuL2NvcmUvc2hhcGUvY3VydmVzXCIpLGEoXCIuL2NvcmUvc2hhcGUvdmVydGV4XCIpLGEoXCIuL2NvbG9yL2NvbG9yX2NvbnZlcnNpb25cIiksYShcIi4vY29sb3IvY3JlYXRpbmdfcmVhZGluZ1wiKSxhKFwiLi9jb2xvci9wNS5Db2xvclwiKSxhKFwiLi9jb2xvci9zZXR0aW5nXCIpLGEoXCIuL2RhdGEvcDUuVHlwZWREaWN0XCIpLGEoXCIuL2V2ZW50cy9hY2NlbGVyYXRpb25cIiksYShcIi4vZXZlbnRzL2tleWJvYXJkXCIpLGEoXCIuL2V2ZW50cy9tb3VzZVwiKSxhKFwiLi9ldmVudHMvdG91Y2hcIiksYShcIi4vaW1hZ2UvZmlsdGVyc1wiKSxhKFwiLi9pbWFnZS9pbWFnZVwiKSxhKFwiLi9pbWFnZS9sb2FkaW5nX2Rpc3BsYXlpbmdcIiksYShcIi4vaW1hZ2UvcDUuSW1hZ2VcIiksYShcIi4vaW1hZ2UvcGl4ZWxzXCIpLGEoXCIuL2lvL2ZpbGVzXCIpLGEoXCIuL2lvL3A1LlRhYmxlXCIpLGEoXCIuL2lvL3A1LlRhYmxlUm93XCIpLGEoXCIuL2lvL3A1LlhNTFwiKSxhKFwiLi9tYXRoL2NhbGN1bGF0aW9uXCIpLGEoXCIuL21hdGgvbWF0aFwiKSxhKFwiLi9tYXRoL25vaXNlXCIpLGEoXCIuL21hdGgvcDUuVmVjdG9yXCIpLGEoXCIuL21hdGgvcmFuZG9tXCIpLGEoXCIuL21hdGgvdHJpZ29ub21ldHJ5XCIpLGEoXCIuL3R5cG9ncmFwaHkvYXR0cmlidXRlc1wiKSxhKFwiLi90eXBvZ3JhcGh5L2xvYWRpbmdfZGlzcGxheWluZ1wiKSxhKFwiLi90eXBvZ3JhcGh5L3A1LkZvbnRcIiksYShcIi4vdXRpbGl0aWVzL2FycmF5X2Z1bmN0aW9uc1wiKSxhKFwiLi91dGlsaXRpZXMvY29udmVyc2lvblwiKSxhKFwiLi91dGlsaXRpZXMvc3RyaW5nX2Z1bmN0aW9uc1wiKSxhKFwiLi91dGlsaXRpZXMvdGltZV9kYXRlXCIpLGEoXCIuL3dlYmdsLzNkX3ByaW1pdGl2ZXNcIiksYShcIi4vd2ViZ2wvaW50ZXJhY3Rpb25cIiksYShcIi4vd2ViZ2wvbGlnaHRcIiksYShcIi4vd2ViZ2wvbG9hZGluZ1wiKSxhKFwiLi93ZWJnbC9tYXRlcmlhbFwiKSxhKFwiLi93ZWJnbC9wNS5DYW1lcmFcIiksYShcIi4vd2ViZ2wvcDUuR2VvbWV0cnlcIiksYShcIi4vd2ViZ2wvcDUuTWF0cml4XCIpLGEoXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuSW1tZWRpYXRlXCIpLGEoXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0xcIiksYShcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5SZXRhaW5lZFwiKSxhKFwiLi93ZWJnbC9wNS5TaGFkZXJcIiksYShcIi4vd2ViZ2wvcDUuVGV4dHVyZVwiKSxhKFwiLi93ZWJnbC90ZXh0XCIpLGEoXCIuL2NvcmUvaW5pdFwiKSxiLmV4cG9ydHM9ZH0se1wiLi9jb2xvci9jb2xvcl9jb252ZXJzaW9uXCI6MTQsXCIuL2NvbG9yL2NyZWF0aW5nX3JlYWRpbmdcIjoxNSxcIi4vY29sb3IvcDUuQ29sb3JcIjoxNixcIi4vY29sb3Ivc2V0dGluZ1wiOjE3LFwiLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi9jb3JlL2Vudmlyb25tZW50XCI6MTksXCIuL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi9jb3JlL2hlbHBlcnNcIjoyMSxcIi4vY29yZS9pbml0XCI6MjIsXCIuL2NvcmUvbGVnYWN5XCI6MjMsXCIuL2NvcmUvbWFpblwiOjI0LFwiLi9jb3JlL3A1LkVsZW1lbnRcIjoyNSxcIi4vY29yZS9wNS5HcmFwaGljc1wiOjI2LFwiLi9jb3JlL3A1LlJlbmRlcmVyXCI6MjcsXCIuL2NvcmUvcDUuUmVuZGVyZXIyRFwiOjI4LFwiLi9jb3JlL3JlbmRlcmluZ1wiOjI5LFwiLi9jb3JlL3NoYXBlLzJkX3ByaW1pdGl2ZXNcIjozMCxcIi4vY29yZS9zaGFwZS9hdHRyaWJ1dGVzXCI6MzEsXCIuL2NvcmUvc2hhcGUvY3VydmVzXCI6MzIsXCIuL2NvcmUvc2hhcGUvdmVydGV4XCI6MzMsXCIuL2NvcmUvc2hpbVwiOjM0LFwiLi9jb3JlL3N0cnVjdHVyZVwiOjM1LFwiLi9jb3JlL3RyYW5zZm9ybVwiOjM2LFwiLi9kYXRhL3A1LlR5cGVkRGljdFwiOjM3LFwiLi9ldmVudHMvYWNjZWxlcmF0aW9uXCI6MzgsXCIuL2V2ZW50cy9rZXlib2FyZFwiOjM5LFwiLi9ldmVudHMvbW91c2VcIjo0MCxcIi4vZXZlbnRzL3RvdWNoXCI6NDEsXCIuL2ltYWdlL2ZpbHRlcnNcIjo0MixcIi4vaW1hZ2UvaW1hZ2VcIjo0MyxcIi4vaW1hZ2UvbG9hZGluZ19kaXNwbGF5aW5nXCI6NDQsXCIuL2ltYWdlL3A1LkltYWdlXCI6NDUsXCIuL2ltYWdlL3BpeGVsc1wiOjQ2LFwiLi9pby9maWxlc1wiOjQ3LFwiLi9pby9wNS5UYWJsZVwiOjQ4LFwiLi9pby9wNS5UYWJsZVJvd1wiOjQ5LFwiLi9pby9wNS5YTUxcIjo1MCxcIi4vbWF0aC9jYWxjdWxhdGlvblwiOjUxLFwiLi9tYXRoL21hdGhcIjo1MixcIi4vbWF0aC9ub2lzZVwiOjUzLFwiLi9tYXRoL3A1LlZlY3RvclwiOjU0LFwiLi9tYXRoL3JhbmRvbVwiOjU1LFwiLi9tYXRoL3RyaWdvbm9tZXRyeVwiOjU2LFwiLi90eXBvZ3JhcGh5L2F0dHJpYnV0ZXNcIjo1NyxcIi4vdHlwb2dyYXBoeS9sb2FkaW5nX2Rpc3BsYXlpbmdcIjo1OCxcIi4vdHlwb2dyYXBoeS9wNS5Gb250XCI6NTksXCIuL3V0aWxpdGllcy9hcnJheV9mdW5jdGlvbnNcIjo2MCxcIi4vdXRpbGl0aWVzL2NvbnZlcnNpb25cIjo2MSxcIi4vdXRpbGl0aWVzL3N0cmluZ19mdW5jdGlvbnNcIjo2MixcIi4vdXRpbGl0aWVzL3RpbWVfZGF0ZVwiOjYzLFwiLi93ZWJnbC8zZF9wcmltaXRpdmVzXCI6NjQsXCIuL3dlYmdsL2ludGVyYWN0aW9uXCI6NjUsXCIuL3dlYmdsL2xpZ2h0XCI6NjYsXCIuL3dlYmdsL2xvYWRpbmdcIjo2NyxcIi4vd2ViZ2wvbWF0ZXJpYWxcIjo2OCxcIi4vd2ViZ2wvcDUuQ2FtZXJhXCI6NjksXCIuL3dlYmdsL3A1Lkdlb21ldHJ5XCI6NzAsXCIuL3dlYmdsL3A1Lk1hdHJpeFwiOjcxLFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMXCI6NzQsXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuSW1tZWRpYXRlXCI6NzIsXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuUmV0YWluZWRcIjo3MyxcIi4vd2ViZ2wvcDUuU2hhZGVyXCI6NzUsXCIuL3dlYmdsL3A1LlRleHR1cmVcIjo3NixcIi4vd2ViZ2wvdGV4dFwiOjc3fV0sMTQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuQ29sb3JDb252ZXJzaW9uPXt9LGQuQ29sb3JDb252ZXJzaW9uLl9oc2JhVG9IU0xBPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGQ9YVsyXSxlPSgyLWMpKmQvMjtyZXR1cm4gMCE9PWUmJigxPT09ZT9jPTA6ZTwuNT9jLz0yLWM6Yz1jKmQvKDItMiplKSksW2IsYyxlLGFbM11dfSxkLkNvbG9yQ29udmVyc2lvbi5faHNiYVRvUkdCQT1mdW5jdGlvbihhKXt2YXIgYj02KmFbMF0sYz1hWzFdLGQ9YVsyXSxlPVtdO2lmKDA9PT1jKWU9W2QsZCxkLGFbM11dO2Vsc2V7dmFyIGYsZyxoLGk9TWF0aC5mbG9vcihiKSxqPWQqKDEtYyksaz1kKigxLWMqKGItaSkpLGw9ZCooMS1jKigxK2ktYikpOzE9PT1pPyhmPWssZz1kLGg9aik6Mj09PWk/KGY9aixnPWQsaD1sKTozPT09aT8oZj1qLGc9ayxoPWQpOjQ9PT1pPyhmPWwsZz1qLGg9ZCk6NT09PWk/KGY9ZCxnPWosaD1rKTooZj1kLGc9bCxoPWopLGU9W2YsZyxoLGFbM11dfXJldHVybiBlfSxkLkNvbG9yQ29udmVyc2lvbi5faHNsYVRvSFNCQT1mdW5jdGlvbihhKXt2YXIgYixjPWFbMF0sZD1hWzFdLGU9YVsyXTtyZXR1cm4gYj1lPC41PygxK2QpKmU6ZStkLWUqZCxkPTIqKGItZSkvYixbYyxkLGIsYVszXV19LGQuQ29sb3JDb252ZXJzaW9uLl9oc2xhVG9SR0JBPWZ1bmN0aW9uKGEpe3ZhciBiPTYqYVswXSxjPWFbMV0sZD1hWzJdLGU9W107aWYoMD09PWMpZT1bZCxkLGQsYVszXV07ZWxzZXt2YXIgZjtmPWQ8LjU/KDErYykqZDpkK2MtZCpjO3ZhciBnPTIqZC1mLGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPDA/YSs9NjphPj02JiYoYS09NiksYTwxP2IrKGMtYikqYTphPDM/YzphPDQ/YisoYy1iKSooNC1hKTpifTtlPVtoKGIrMixnLGYpLGgoYixnLGYpLGgoYi0yLGcsZiksYVszXV19cmV0dXJuIGV9LGQuQ29sb3JDb252ZXJzaW9uLl9yZ2JhVG9IU0JBPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hWzBdLGU9YVsxXSxmPWFbMl0sZz1NYXRoLm1heChkLGUsZiksaD1nLU1hdGgubWluKGQsZSxmKTtyZXR1cm4gMD09PWg/KGI9MCxjPTApOihjPWgvZyxkPT09Zz9iPShlLWYpL2g6ZT09PWc/Yj0yKyhmLWQpL2g6Zj09PWcmJihiPTQrKGQtZSkvaCksYjwwP2IrPTY6Yj49NiYmKGItPTYpKSxbYi82LGMsZyxhWzNdXX0sZC5Db2xvckNvbnZlcnNpb24uX3JnYmFUb0hTTEE9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPWFbMF0sZT1hWzFdLGY9YVsyXSxnPU1hdGgubWF4KGQsZSxmKSxoPU1hdGgubWluKGQsZSxmKSxpPWcraCxqPWctaDtyZXR1cm4gMD09PWo/KGI9MCxjPTApOihjPWk8MT9qL2k6ai8oMi1pKSxkPT09Zz9iPShlLWYpL2o6ZT09PWc/Yj0yKyhmLWQpL2o6Zj09PWcmJihiPTQrKGQtZSkvaiksYjwwP2IrPTY6Yj49NiYmKGItPTYpKSxbYi82LGMsaS8yLGFbM11dfSxiLmV4cG9ydHM9ZC5Db2xvckNvbnZlcnNpb259LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMTU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuL3A1LkNvbG9yXCIpLGEoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUuYWxwaGE9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImFscGhhXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRBbHBoYSgpfSxkLnByb3RvdHlwZS5ibHVlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJibHVlXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRCbHVlKCl9LGQucHJvdG90eXBlLmJyaWdodG5lc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJyaWdodG5lc3NcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldEJyaWdodG5lc3MoKX0sZC5wcm90b3R5cGUuY29sb3I9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjb2xvclwiLGFyZ3VtZW50cyksYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkLkNvbG9yKXJldHVybiBhcmd1bWVudHNbMF07dmFyIGE9YXJndW1lbnRzWzBdaW5zdGFuY2VvZiBBcnJheT9hcmd1bWVudHNbMF06YXJndW1lbnRzO3JldHVybiBuZXcgZC5Db2xvcih0aGlzLGEpfSxkLnByb3RvdHlwZS5ncmVlbj1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZ3JlZW5cIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldEdyZWVuKCl9LGQucHJvdG90eXBlLmh1ZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaHVlXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRIdWUoKX0sZC5wcm90b3R5cGUubGVycENvbG9yPWZ1bmN0aW9uKGEsYixjKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsZXJwQ29sb3JcIixhcmd1bWVudHMpO3ZhciBmLGcsaCxpLGosayxsPXRoaXMuX2NvbG9yTW9kZSxtPXRoaXMuX2NvbG9yTWF4ZXM7aWYobD09PWUuUkdCKWo9YS5sZXZlbHMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLzI1NX0pLGs9Yi5sZXZlbHMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLzI1NX0pO2Vsc2UgaWYobD09PWUuSFNCKWEuX2dldEJyaWdodG5lc3MoKSxiLl9nZXRCcmlnaHRuZXNzKCksaj1hLmhzYmEsaz1iLmhzYmE7ZWxzZXtpZihsIT09ZS5IU0wpdGhyb3cgbmV3IEVycm9yKGwrXCJjYW5ub3QgYmUgdXNlZCBmb3IgaW50ZXJwb2xhdGlvbi5cIik7YS5fZ2V0TGlnaHRuZXNzKCksYi5fZ2V0TGlnaHRuZXNzKCksaj1hLmhzbGEsaz1iLmhzbGF9cmV0dXJuIGM9TWF0aC5tYXgoTWF0aC5taW4oYywxKSwwKSx2b2lkIDA9PT10aGlzLmxlcnAmJih0aGlzLmxlcnA9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjKihiLWEpK2F9KSxmPXRoaXMubGVycChqWzBdLGtbMF0sYyksZz10aGlzLmxlcnAoalsxXSxrWzFdLGMpLGg9dGhpcy5sZXJwKGpbMl0sa1syXSxjKSxpPXRoaXMubGVycChqWzNdLGtbM10sYyksZio9bVtsXVswXSxnKj1tW2xdWzFdLGgqPW1bbF1bMl0saSo9bVtsXVszXSx0aGlzLmNvbG9yKGYsZyxoLGkpfSxkLnByb3RvdHlwZS5saWdodG5lc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxpZ2h0bmVzc1wiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0TGlnaHRuZXNzKCl9LGQucHJvdG90eXBlLnJlZD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicmVkXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRSZWQoKX0sZC5wcm90b3R5cGUuc2F0dXJhdGlvbj1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F0dXJhdGlvblwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0U2F0dXJhdGlvbigpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LkNvbG9yXCI6MTZ9XSwxNjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIiksZj1hKFwiLi9jb2xvcl9jb252ZXJzaW9uXCIpO2QuQ29sb3I9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLl9zdG9yZU1vZGVBbmRNYXhlcyhhLl9jb2xvck1vZGUsYS5fY29sb3JNYXhlcyksdGhpcy5tb2RlIT09ZS5SR0ImJnRoaXMubW9kZSE9PWUuSFNMJiZ0aGlzLm1vZGUhPT1lLkhTQil0aHJvdyBuZXcgRXJyb3IodGhpcy5tb2RlK1wiIGlzIGFuIGludmFsaWQgY29sb3JNb2RlLlwiKTtyZXR1cm4gdGhpcy5fYXJyYXk9ZC5Db2xvci5fcGFyc2VJbnB1dHMuYXBwbHkodGhpcyxiKSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKSx0aGlzfSxkLkNvbG9yLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihhKXt0aGlzLmhzYmF8fCh0aGlzLmhzYmE9Zi5fcmdiYVRvSFNCQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNsYXx8KHRoaXMuaHNsYT1mLl9yZ2JhVG9IU0xBKHRoaXMuX2FycmF5KSk7dmFyIGI9dGhpcy5sZXZlbHMsYz10aGlzLl9hcnJheSxkPWNbM107c3dpdGNoKGEpe2Nhc2VcIiNycmdnYmJcIjpyZXR1cm5cIiNcIi5jb25jYXQoYlswXTwxNj9cIjBcIi5jb25jYXQoYlswXS50b1N0cmluZygxNikpOmJbMF0udG9TdHJpbmcoMTYpLGJbMV08MTY/XCIwXCIuY29uY2F0KGJbMV0udG9TdHJpbmcoMTYpKTpiWzFdLnRvU3RyaW5nKDE2KSxiWzJdPDE2P1wiMFwiLmNvbmNhdChiWzJdLnRvU3RyaW5nKDE2KSk6YlsyXS50b1N0cmluZygxNikpO2Nhc2VcIiNycmdnYmJhYVwiOnJldHVyblwiI1wiLmNvbmNhdChiWzBdPDE2P1wiMFwiLmNvbmNhdChiWzBdLnRvU3RyaW5nKDE2KSk6YlswXS50b1N0cmluZygxNiksYlsxXTwxNj9cIjBcIi5jb25jYXQoYlsxXS50b1N0cmluZygxNikpOmJbMV0udG9TdHJpbmcoMTYpLGJbMl08MTY/XCIwXCIuY29uY2F0KGJbMl0udG9TdHJpbmcoMTYpKTpiWzJdLnRvU3RyaW5nKDE2KSxiWzNdPDE2P1wiMFwiLmNvbmNhdChiWzJdLnRvU3RyaW5nKDE2KSk6YlszXS50b1N0cmluZygxNikpO2Nhc2VcIiNyZ2JcIjpyZXR1cm5cIiNcIi5jb25jYXQoTWF0aC5yb3VuZCgxNSpjWzBdKS50b1N0cmluZygxNiksTWF0aC5yb3VuZCgxNSpjWzFdKS50b1N0cmluZygxNiksTWF0aC5yb3VuZCgxNSpjWzJdKS50b1N0cmluZygxNikpO2Nhc2VcIiNyZ2JhXCI6cmV0dXJuXCIjXCIuY29uY2F0KE1hdGgucm91bmQoMTUqY1swXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1sxXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1syXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1szXSkudG9TdHJpbmcoMTYpKTtjYXNlXCJyZ2JcIjpyZXR1cm5cInJnYihcIi5jb25jYXQoYlswXSxcIiwgXCIsYlsxXSxcIiwgXCIsYlsyXSxcIilcIik7Y2FzZVwicmdiJVwiOnJldHVyblwicmdiKFwiLmNvbmNhdCgoMTAwKmNbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1syXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJyZ2JhJVwiOnJldHVyblwicmdiYShcIi5jb25jYXQoKDEwMCpjWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1sxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzNdKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcImhzYlwiOmNhc2VcImhzdlwiOnJldHVyblwiaHNiKFwiLmNvbmNhdCh0aGlzLmhzYmFbMF0qdGhpcy5tYXhlc1tlLkhTQl1bMF0sXCIsIFwiLHRoaXMuaHNiYVsxXSp0aGlzLm1heGVzW2UuSFNCXVsxXSxcIiwgXCIsdGhpcy5oc2JhWzJdKnRoaXMubWF4ZXNbZS5IU0JdWzJdLFwiKVwiKTtjYXNlXCJoc2IlXCI6Y2FzZVwiaHN2JVwiOnJldHVyblwiaHNiKFwiLmNvbmNhdCgoMTAwKnRoaXMuaHNiYVswXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNiYVsxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNiYVsyXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2JhXCI6Y2FzZVwiaHN2YVwiOnJldHVyblwiaHNiYShcIi5jb25jYXQodGhpcy5oc2JhWzBdKnRoaXMubWF4ZXNbZS5IU0JdWzBdLFwiLCBcIix0aGlzLmhzYmFbMV0qdGhpcy5tYXhlc1tlLkhTQl1bMV0sXCIsIFwiLHRoaXMuaHNiYVsyXSp0aGlzLm1heGVzW2UuSFNCXVsyXSxcIiwgXCIsZCxcIilcIik7Y2FzZVwiaHNiYSVcIjpjYXNlXCJoc3ZhJVwiOnJldHVyblwiaHNiYShcIi5jb25jYXQoKDEwMCp0aGlzLmhzYmFbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpkKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcImhzbFwiOnJldHVyblwiaHNsKFwiLmNvbmNhdCh0aGlzLmhzbGFbMF0qdGhpcy5tYXhlc1tlLkhTTF1bMF0sXCIsIFwiLHRoaXMuaHNsYVsxXSp0aGlzLm1heGVzW2UuSFNMXVsxXSxcIiwgXCIsdGhpcy5oc2xhWzJdKnRoaXMubWF4ZXNbZS5IU0xdWzJdLFwiKVwiKTtjYXNlXCJoc2wlXCI6cmV0dXJuXCJoc2woXCIuY29uY2F0KCgxMDAqdGhpcy5oc2xhWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzJdKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcImhzbGFcIjpyZXR1cm5cImhzbGEoXCIuY29uY2F0KHRoaXMuaHNsYVswXSp0aGlzLm1heGVzW2UuSFNMXVswXSxcIiwgXCIsdGhpcy5oc2xhWzFdKnRoaXMubWF4ZXNbZS5IU0xdWzFdLFwiLCBcIix0aGlzLmhzbGFbMl0qdGhpcy5tYXhlc1tlLkhTTF1bMl0sXCIsIFwiLGQsXCIpXCIpO2Nhc2VcImhzbGElXCI6cmV0dXJuXCJoc2woXCIuY29uY2F0KCgxMDAqdGhpcy5oc2xhWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzJdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqZCkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJyZ2JhXCI6ZGVmYXVsdDpyZXR1cm5cInJnYmEoXCIrYlswXStcIixcIitiWzFdK1wiLFwiK2JbMl0rXCIsXCIrZCtcIilcIn19LGQuQ29sb3IucHJvdG90eXBlLnNldFJlZD1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVswXT1hL3RoaXMubWF4ZXNbZS5SR0JdWzBdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5zZXRHcmVlbj1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVsxXT1hL3RoaXMubWF4ZXNbZS5SR0JdWzFdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5zZXRCbHVlPWZ1bmN0aW9uKGEpe3RoaXMuX2FycmF5WzJdPWEvdGhpcy5tYXhlc1tlLlJHQl1bMl0sdGhpcy5fY2FsY3VsYXRlTGV2ZWxzKCl9LGQuQ29sb3IucHJvdG90eXBlLnNldEFscGhhPWZ1bmN0aW9uKGEpe3RoaXMuX2FycmF5WzNdPWEvdGhpcy5tYXhlc1t0aGlzLm1vZGVdWzNdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5fY2FsY3VsYXRlTGV2ZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuX2FycmF5LGI9dGhpcy5sZXZlbHM9bmV3IEFycmF5KGEubGVuZ3RoKSxjPWEubGVuZ3RoLTE7Yz49MDstLWMpYltjXT1NYXRoLnJvdW5kKDI1NSphW2NdKX0sZC5Db2xvci5wcm90b3R5cGUuX2dldEFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5WzNdKnRoaXMubWF4ZXNbdGhpcy5tb2RlXVszXX0sZC5Db2xvci5wcm90b3R5cGUuX3N0b3JlTW9kZUFuZE1heGVzPWZ1bmN0aW9uKGEsYil7dGhpcy5tb2RlPWEsdGhpcy5tYXhlcz1ifSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0TW9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGV9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRNYXhlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1heGVzfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0Qmx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheVsyXSp0aGlzLm1heGVzW2UuUkdCXVsyXX0sZC5Db2xvci5wcm90b3R5cGUuX2dldEJyaWdodG5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzYmFbMl0qdGhpcy5tYXhlc1tlLkhTQl1bMl19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRHcmVlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheVsxXSp0aGlzLm1heGVzW2UuUkdCXVsxXX0sZC5Db2xvci5wcm90b3R5cGUuX2dldEh1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGU9PT1lLkhTQj8odGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzYmFbMF0qdGhpcy5tYXhlc1tlLkhTQl1bMF0pOih0aGlzLmhzbGF8fCh0aGlzLmhzbGE9Zi5fcmdiYVRvSFNMQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNsYVswXSp0aGlzLm1heGVzW2UuSFNMXVswXSl9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRMaWdodG5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oc2xhfHwodGhpcy5oc2xhPWYuX3JnYmFUb0hTTEEodGhpcy5fYXJyYXkpKSx0aGlzLmhzbGFbMl0qdGhpcy5tYXhlc1tlLkhTTF1bMl19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRSZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXlbMF0qdGhpcy5tYXhlc1tlLlJHQl1bMF19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRTYXR1cmF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZT09PWUuSFNCPyh0aGlzLmhzYmF8fCh0aGlzLmhzYmE9Zi5fcmdiYVRvSFNCQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNiYVsxXSp0aGlzLm1heGVzW2UuSFNCXVsxXSk6KHRoaXMuaHNsYXx8KHRoaXMuaHNsYT1mLl9yZ2JhVG9IU0xBKHRoaXMuX2FycmF5KSksdGhpcy5oc2xhWzFdKnRoaXMubWF4ZXNbZS5IU0xdWzFdKX07dmFyIGc9e2FsaWNlYmx1ZTpcIiNmMGY4ZmZcIixhbnRpcXVld2hpdGU6XCIjZmFlYmQ3XCIsYXF1YTpcIiMwMGZmZmZcIixhcXVhbWFyaW5lOlwiIzdmZmZkNFwiLGF6dXJlOlwiI2YwZmZmZlwiLGJlaWdlOlwiI2Y1ZjVkY1wiLGJpc3F1ZTpcIiNmZmU0YzRcIixibGFjazpcIiMwMDAwMDBcIixibGFuY2hlZGFsbW9uZDpcIiNmZmViY2RcIixibHVlOlwiIzAwMDBmZlwiLGJsdWV2aW9sZXQ6XCIjOGEyYmUyXCIsYnJvd246XCIjYTUyYTJhXCIsYnVybHl3b29kOlwiI2RlYjg4N1wiLGNhZGV0Ymx1ZTpcIiM1ZjllYTBcIixjaGFydHJldXNlOlwiIzdmZmYwMFwiLGNob2NvbGF0ZTpcIiNkMjY5MWVcIixjb3JhbDpcIiNmZjdmNTBcIixjb3JuZmxvd2VyYmx1ZTpcIiM2NDk1ZWRcIixjb3Juc2lsazpcIiNmZmY4ZGNcIixjcmltc29uOlwiI2RjMTQzY1wiLGN5YW46XCIjMDBmZmZmXCIsZGFya2JsdWU6XCIjMDAwMDhiXCIsZGFya2N5YW46XCIjMDA4YjhiXCIsZGFya2dvbGRlbnJvZDpcIiNiODg2MGJcIixkYXJrZ3JheTpcIiNhOWE5YTlcIixkYXJrZ3JlZW46XCIjMDA2NDAwXCIsZGFya2dyZXk6XCIjYTlhOWE5XCIsZGFya2toYWtpOlwiI2JkYjc2YlwiLGRhcmttYWdlbnRhOlwiIzhiMDA4YlwiLGRhcmtvbGl2ZWdyZWVuOlwiIzU1NmIyZlwiLGRhcmtvcmFuZ2U6XCIjZmY4YzAwXCIsZGFya29yY2hpZDpcIiM5OTMyY2NcIixkYXJrcmVkOlwiIzhiMDAwMFwiLGRhcmtzYWxtb246XCIjZTk5NjdhXCIsZGFya3NlYWdyZWVuOlwiIzhmYmM4ZlwiLGRhcmtzbGF0ZWJsdWU6XCIjNDgzZDhiXCIsZGFya3NsYXRlZ3JheTpcIiMyZjRmNGZcIixkYXJrc2xhdGVncmV5OlwiIzJmNGY0ZlwiLGRhcmt0dXJxdW9pc2U6XCIjMDBjZWQxXCIsZGFya3Zpb2xldDpcIiM5NDAwZDNcIixkZWVwcGluazpcIiNmZjE0OTNcIixkZWVwc2t5Ymx1ZTpcIiMwMGJmZmZcIixkaW1ncmF5OlwiIzY5Njk2OVwiLGRpbWdyZXk6XCIjNjk2OTY5XCIsZG9kZ2VyYmx1ZTpcIiMxZTkwZmZcIixmaXJlYnJpY2s6XCIjYjIyMjIyXCIsZmxvcmFsd2hpdGU6XCIjZmZmYWYwXCIsZm9yZXN0Z3JlZW46XCIjMjI4YjIyXCIsZnVjaHNpYTpcIiNmZjAwZmZcIixnYWluc2Jvcm86XCIjZGNkY2RjXCIsZ2hvc3R3aGl0ZTpcIiNmOGY4ZmZcIixnb2xkOlwiI2ZmZDcwMFwiLGdvbGRlbnJvZDpcIiNkYWE1MjBcIixncmF5OlwiIzgwODA4MFwiLGdyZWVuOlwiIzAwODAwMFwiLGdyZWVueWVsbG93OlwiI2FkZmYyZlwiLGdyZXk6XCIjODA4MDgwXCIsaG9uZXlkZXc6XCIjZjBmZmYwXCIsaG90cGluazpcIiNmZjY5YjRcIixpbmRpYW5yZWQ6XCIjY2Q1YzVjXCIsaW5kaWdvOlwiIzRiMDA4MlwiLGl2b3J5OlwiI2ZmZmZmMFwiLGtoYWtpOlwiI2YwZTY4Y1wiLGxhdmVuZGVyOlwiI2U2ZTZmYVwiLGxhdmVuZGVyYmx1c2g6XCIjZmZmMGY1XCIsbGF3bmdyZWVuOlwiIzdjZmMwMFwiLGxlbW9uY2hpZmZvbjpcIiNmZmZhY2RcIixsaWdodGJsdWU6XCIjYWRkOGU2XCIsbGlnaHRjb3JhbDpcIiNmMDgwODBcIixsaWdodGN5YW46XCIjZTBmZmZmXCIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6XCIjZmFmYWQyXCIsbGlnaHRncmF5OlwiI2QzZDNkM1wiLGxpZ2h0Z3JlZW46XCIjOTBlZTkwXCIsbGlnaHRncmV5OlwiI2QzZDNkM1wiLGxpZ2h0cGluazpcIiNmZmI2YzFcIixsaWdodHNhbG1vbjpcIiNmZmEwN2FcIixsaWdodHNlYWdyZWVuOlwiIzIwYjJhYVwiLGxpZ2h0c2t5Ymx1ZTpcIiM4N2NlZmFcIixsaWdodHNsYXRlZ3JheTpcIiM3Nzg4OTlcIixsaWdodHNsYXRlZ3JleTpcIiM3Nzg4OTlcIixsaWdodHN0ZWVsYmx1ZTpcIiNiMGM0ZGVcIixsaWdodHllbGxvdzpcIiNmZmZmZTBcIixsaW1lOlwiIzAwZmYwMFwiLGxpbWVncmVlbjpcIiMzMmNkMzJcIixsaW5lbjpcIiNmYWYwZTZcIixtYWdlbnRhOlwiI2ZmMDBmZlwiLG1hcm9vbjpcIiM4MDAwMDBcIixtZWRpdW1hcXVhbWFyaW5lOlwiIzY2Y2RhYVwiLG1lZGl1bWJsdWU6XCIjMDAwMGNkXCIsbWVkaXVtb3JjaGlkOlwiI2JhNTVkM1wiLG1lZGl1bXB1cnBsZTpcIiM5MzcwZGJcIixtZWRpdW1zZWFncmVlbjpcIiMzY2IzNzFcIixtZWRpdW1zbGF0ZWJsdWU6XCIjN2I2OGVlXCIsbWVkaXVtc3ByaW5nZ3JlZW46XCIjMDBmYTlhXCIsbWVkaXVtdHVycXVvaXNlOlwiIzQ4ZDFjY1wiLG1lZGl1bXZpb2xldHJlZDpcIiNjNzE1ODVcIixtaWRuaWdodGJsdWU6XCIjMTkxOTcwXCIsbWludGNyZWFtOlwiI2Y1ZmZmYVwiLG1pc3R5cm9zZTpcIiNmZmU0ZTFcIixtb2NjYXNpbjpcIiNmZmU0YjVcIixuYXZham93aGl0ZTpcIiNmZmRlYWRcIixuYXZ5OlwiIzAwMDA4MFwiLG9sZGxhY2U6XCIjZmRmNWU2XCIsb2xpdmU6XCIjODA4MDAwXCIsb2xpdmVkcmFiOlwiIzZiOGUyM1wiLG9yYW5nZTpcIiNmZmE1MDBcIixvcmFuZ2VyZWQ6XCIjZmY0NTAwXCIsb3JjaGlkOlwiI2RhNzBkNlwiLHBhbGVnb2xkZW5yb2Q6XCIjZWVlOGFhXCIscGFsZWdyZWVuOlwiIzk4ZmI5OFwiLHBhbGV0dXJxdW9pc2U6XCIjYWZlZWVlXCIscGFsZXZpb2xldHJlZDpcIiNkYjcwOTNcIixwYXBheWF3aGlwOlwiI2ZmZWZkNVwiLHBlYWNocHVmZjpcIiNmZmRhYjlcIixwZXJ1OlwiI2NkODUzZlwiLHBpbms6XCIjZmZjMGNiXCIscGx1bTpcIiNkZGEwZGRcIixwb3dkZXJibHVlOlwiI2IwZTBlNlwiLHB1cnBsZTpcIiM4MDAwODBcIixyZWQ6XCIjZmYwMDAwXCIscm9zeWJyb3duOlwiI2JjOGY4ZlwiLHJveWFsYmx1ZTpcIiM0MTY5ZTFcIixzYWRkbGVicm93bjpcIiM4YjQ1MTNcIixzYWxtb246XCIjZmE4MDcyXCIsc2FuZHlicm93bjpcIiNmNGE0NjBcIixzZWFncmVlbjpcIiMyZThiNTdcIixzZWFzaGVsbDpcIiNmZmY1ZWVcIixzaWVubmE6XCIjYTA1MjJkXCIsc2lsdmVyOlwiI2MwYzBjMFwiLHNreWJsdWU6XCIjODdjZWViXCIsc2xhdGVibHVlOlwiIzZhNWFjZFwiLHNsYXRlZ3JheTpcIiM3MDgwOTBcIixzbGF0ZWdyZXk6XCIjNzA4MDkwXCIsc25vdzpcIiNmZmZhZmFcIixzcHJpbmdncmVlbjpcIiMwMGZmN2ZcIixzdGVlbGJsdWU6XCIjNDY4MmI0XCIsdGFuOlwiI2QyYjQ4Y1wiLHRlYWw6XCIjMDA4MDgwXCIsdGhpc3RsZTpcIiNkOGJmZDhcIix0b21hdG86XCIjZmY2MzQ3XCIsdHVycXVvaXNlOlwiIzQwZTBkMFwiLHZpb2xldDpcIiNlZTgyZWVcIix3aGVhdDpcIiNmNWRlYjNcIix3aGl0ZTpcIiNmZmZmZmZcIix3aGl0ZXNtb2tlOlwiI2Y1ZjVmNVwiLHllbGxvdzpcIiNmZmZmMDBcIix5ZWxsb3dncmVlbjpcIiM5YWNkMzJcIn0saD0vXFxzKi8saT0vKFxcZHsxLDN9KS8saj0vKCg/OlxcZCsoPzpcXC5cXGQrKT8pfCg/OlxcLlxcZCspKS8saz1uZXcgUmVnRXhwKGouc291cmNlK1wiJVwiKSxsPXtIRVgzOi9eIyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKSQvaSxIRVg0Oi9eIyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkkL2ksSEVYNjovXiMoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkkL2ksSEVYODovXiMoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pJC9pLFJHQjpuZXcgUmVnRXhwKFtcIl5yZ2JcXFxcKFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxSR0JfUEVSQ0VOVDpuZXcgUmVnRXhwKFtcIl5yZ2JcXFxcKFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxSR0JBOm5ldyBSZWdFeHAoW1wiXnJnYmFcXFxcKFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiLFwiLGouc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxSR0JBX1BFUkNFTlQ6bmV3IFJlZ0V4cChbXCJecmdiYVxcXFwoXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsai5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLEhTTDpuZXcgUmVnRXhwKFtcIl5oc2xcXFxcKFwiLGkuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxIU0xBOm5ldyBSZWdFeHAoW1wiXmhzbGFcXFxcKFwiLGkuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGouc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxIU0I6bmV3IFJlZ0V4cChbXCJeaHNiXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksSFNCQTpuZXcgUmVnRXhwKFtcIl5oc2JhXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixqLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIil9O2QuQ29sb3IuX3BhcnNlSW5wdXRzPWZ1bmN0aW9uKGEsYixjLGgpe3ZhciBpLGo9YXJndW1lbnRzLmxlbmd0aCxrPXRoaXMubW9kZSxtPXRoaXMubWF4ZXNba10sbj1bXTtpZihqPj0zKXtmb3IoblswXT1hL21bMF0sblsxXT1iL21bMV0sblsyXT1jL21bMl0sblszXT1cIm51bWJlclwiPT10eXBlb2YgaD9oL21bM106MSxpPW4ubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBvPW5baV07bzwwP25baV09MDpvPjEmJihuW2ldPTEpfXJldHVybiBrPT09ZS5IU0w/Zi5faHNsYVRvUkdCQShuKTprPT09ZS5IU0I/Zi5faHNiYVRvUkdCQShuKTpufWlmKDE9PT1qJiZcInN0cmluZ1wiPT10eXBlb2YgYSl7dmFyIHA9YS50cmltKCkudG9Mb3dlckNhc2UoKTtpZihnW3BdKXJldHVybiBkLkNvbG9yLl9wYXJzZUlucHV0cy5jYWxsKHRoaXMsZ1twXSk7aWYobC5IRVgzLnRlc3QocCkpcmV0dXJuIG49bC5IRVgzLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUludChhK2EsMTYpLzI1NX0pLG5bM109MSxuO2lmKGwuSEVYNi50ZXN0KHApKXJldHVybiBuPWwuSEVYNi5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSwxNikvMjU1fSksblszXT0xLG47aWYobC5IRVg0LnRlc3QocCkpcmV0dXJuIG49bC5IRVg0LmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUludChhK2EsMTYpLzI1NX0pO2lmKGwuSEVYOC50ZXN0KHApKXJldHVybiBuPWwuSEVYOC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSwxNikvMjU1fSk7aWYobC5SR0IudGVzdChwKSlyZXR1cm4gbj1sLlJHQi5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS8yNTV9KSxuWzNdPTEsbjtpZihsLlJHQl9QRVJDRU5ULnRlc3QocCkpcmV0dXJuIG49bC5SR0JfUEVSQ0VOVC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VGbG9hdChhKS8xMDB9KSxuWzNdPTEsbjtpZihsLlJHQkEudGVzdChwKSlyZXR1cm4gbj1sLlJHQkEuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMz09PWI/cGFyc2VGbG9hdChhKTphLzI1NX0pO2lmKGwuUkdCQV9QRVJDRU5ULnRlc3QocCkpcmV0dXJuIG49bC5SR0JBX1BFUkNFTlQuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMz09PWI/cGFyc2VGbG9hdChhKTpwYXJzZUZsb2F0KGEpLzEwMH0pO2lmKGwuSFNMLnRlc3QocCk/KG49bC5IU0wuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOnBhcnNlSW50KGEsMTApLzEwMH0pLG5bM109MSk6bC5IU0xBLnRlc3QocCkmJihuPWwuSFNMQS5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAwPT09Yj9wYXJzZUludChhLDEwKS8zNjA6Mz09PWI/cGFyc2VGbG9hdChhKTpwYXJzZUludChhLDEwKS8xMDB9KSksbj1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oYSwxKSwwKX0pLG4ubGVuZ3RoKXJldHVybiBmLl9oc2xhVG9SR0JBKG4pO2lmKGwuSFNCLnRlc3QocCk/KG49bC5IU0IuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOnBhcnNlSW50KGEsMTApLzEwMH0pLG5bM109MSk6bC5IU0JBLnRlc3QocCkmJihuPWwuSFNCQS5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAwPT09Yj9wYXJzZUludChhLDEwKS8zNjA6Mz09PWI/cGFyc2VGbG9hdChhKTpwYXJzZUludChhLDEwKS8xMDB9KSksbi5sZW5ndGgpe2ZvcihpPW4ubGVuZ3RoLTE7aT49MDstLWkpbltpXT1NYXRoLm1heChNYXRoLm1pbihuW2ldLDEpLDApO3JldHVybiBmLl9oc2JhVG9SR0JBKG4pfW49WzEsMSwxLDFdfWVsc2V7aWYoMSE9PWomJjIhPT1qfHxcIm51bWJlclwiIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoYXJndW1lbnRzK1wiaXMgbm90IGEgdmFsaWQgY29sb3IgcmVwcmVzZW50YXRpb24uXCIpO25bMF09YS9tWzJdLG5bMV09YS9tWzJdLG5bMl09YS9tWzJdLG5bM109XCJudW1iZXJcIj09dHlwZW9mIGI/Yi9tWzNdOjEsbj1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oYSwxKSwwKX0pfXJldHVybiBufSxiLmV4cG9ydHM9ZC5Db2xvcn0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9jb2xvcl9jb252ZXJzaW9uXCI6MTR9XSwxNzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4vcDUuQ29sb3JcIiksZC5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQuSW1hZ2U/dGhpcy5pbWFnZShhcmd1bWVudHNbMF0sMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpOnRoaXMuX3JlbmRlcmVyLmJhY2tncm91bmQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5jbGVhcigpLHRoaXN9LGQucHJvdG90eXBlLmNvbG9yTW9kZT1mdW5jdGlvbihhLGIsYyxmLGcpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvbG9yTW9kZVwiLGFyZ3VtZW50cyksYT09PWUuUkdCfHxhPT09ZS5IU0J8fGE9PT1lLkhTTCl7dGhpcy5fY29sb3JNb2RlPWE7dmFyIGg9dGhpcy5fY29sb3JNYXhlc1thXTsyPT09YXJndW1lbnRzLmxlbmd0aD8oaFswXT1iLGhbMV09YixoWzJdPWIsaFszXT1iKTo0PT09YXJndW1lbnRzLmxlbmd0aD8oaFswXT1iLGhbMV09YyxoWzJdPWYpOjU9PT1hcmd1bWVudHMubGVuZ3RoJiYoaFswXT1iLGhbMV09YyxoWzJdPWYsaFszXT1nKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZmlsbFNldFwiLCEwKSx0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZG9GaWxsXCIsITApLHRoaXMuX3JlbmRlcmVyLmZpbGwuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5ub0ZpbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvRmlsbFwiLCExKSx0aGlzfSxkLnByb3RvdHlwZS5ub1N0cm9rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZG9TdHJva2VcIiwhMSksdGhpc30sZC5wcm90b3R5cGUuc3Ryb2tlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9zdHJva2VTZXRcIiwhMCksdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvU3Ryb2tlXCIsITApLHRoaXMuX3JlbmRlcmVyLnN0cm9rZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LkNvbG9yXCI6MTZ9XSwxODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPU1hdGguUEk7Yi5leHBvcnRzPXtQMkQ6XCJwMmRcIixXRUJHTDpcIndlYmdsXCIsQVJST1c6XCJkZWZhdWx0XCIsQ1JPU1M6XCJjcm9zc2hhaXJcIixIQU5EOlwicG9pbnRlclwiLE1PVkU6XCJtb3ZlXCIsVEVYVDpcInRleHRcIixXQUlUOlwid2FpdFwiLEhBTEZfUEk6ZC8yLFBJOmQsUVVBUlRFUl9QSTpkLzQsVEFVOjIqZCxUV09fUEk6MipkLERFR1JFRVM6XCJkZWdyZWVzXCIsUkFESUFOUzpcInJhZGlhbnNcIixERUdfVE9fUkFEOmQvMTgwLFJBRF9UT19ERUc6MTgwL2QsQ09STkVSOlwiY29ybmVyXCIsQ09STkVSUzpcImNvcm5lcnNcIixSQURJVVM6XCJyYWRpdXNcIixSSUdIVDpcInJpZ2h0XCIsTEVGVDpcImxlZnRcIixDRU5URVI6XCJjZW50ZXJcIixUT1A6XCJ0b3BcIixCT1RUT006XCJib3R0b21cIixCQVNFTElORTpcImFscGhhYmV0aWNcIixQT0lOVFM6MCxMSU5FUzoxLExJTkVfU1RSSVA6MyxMSU5FX0xPT1A6MixUUklBTkdMRVM6NCxUUklBTkdMRV9GQU46NixUUklBTkdMRV9TVFJJUDo1LFFVQURTOlwicXVhZHNcIixRVUFEX1NUUklQOlwicXVhZF9zdHJpcFwiLENMT1NFOlwiY2xvc2VcIixPUEVOOlwib3BlblwiLENIT1JEOlwiY2hvcmRcIixQSUU6XCJwaWVcIixQUk9KRUNUOlwic3F1YXJlXCIsU1FVQVJFOlwiYnV0dFwiLFJPVU5EOlwicm91bmRcIixCRVZFTDpcImJldmVsXCIsTUlURVI6XCJtaXRlclwiLFJHQjpcInJnYlwiLEhTQjpcImhzYlwiLEhTTDpcImhzbFwiLEFVVE86XCJhdXRvXCIsQUxUOjE4LEJBQ0tTUEFDRTo4LENPTlRST0w6MTcsREVMRVRFOjQ2LERPV05fQVJST1c6NDAsRU5URVI6MTMsRVNDQVBFOjI3LExFRlRfQVJST1c6MzcsT1BUSU9OOjE4LFJFVFVSTjoxMyxSSUdIVF9BUlJPVzozOSxTSElGVDoxNixUQUI6OSxVUF9BUlJPVzozOCxCTEVORDpcInNvdXJjZS1vdmVyXCIsQUREOlwibGlnaHRlclwiLERBUktFU1Q6XCJkYXJrZW5cIixMSUdIVEVTVDpcImxpZ2h0ZW5cIixESUZGRVJFTkNFOlwiZGlmZmVyZW5jZVwiLEVYQ0xVU0lPTjpcImV4Y2x1c2lvblwiLE1VTFRJUExZOlwibXVsdGlwbHlcIixTQ1JFRU46XCJzY3JlZW5cIixSRVBMQUNFOlwiY29weVwiLE9WRVJMQVk6XCJvdmVybGF5XCIsSEFSRF9MSUdIVDpcImhhcmQtbGlnaHRcIixTT0ZUX0xJR0hUOlwic29mdC1saWdodFwiLERPREdFOlwiY29sb3ItZG9kZ2VcIixCVVJOOlwiY29sb3ItYnVyblwiLFRIUkVTSE9MRDpcInRocmVzaG9sZFwiLEdSQVk6XCJncmF5XCIsT1BBUVVFOlwib3BhcXVlXCIsSU5WRVJUOlwiaW52ZXJ0XCIsUE9TVEVSSVpFOlwicG9zdGVyaXplXCIsRElMQVRFOlwiZGlsYXRlXCIsRVJPREU6XCJlcm9kZVwiLEJMVVI6XCJibHVyXCIsTk9STUFMOlwibm9ybWFsXCIsSVRBTElDOlwiaXRhbGljXCIsQk9MRDpcImJvbGRcIixfREVGQVVMVF9URVhUX0ZJTEw6XCIjMDAwMDAwXCIsX0RFRkFVTFRfTEVBRE1VTFQ6MS4yNSxfQ1RYX01JRERMRTpcIm1pZGRsZVwiLExJTkVBUjpcImxpbmVhclwiLFFVQURSQVRJQzpcInF1YWRyYXRpY1wiLEJFWklFUjpcImJlemllclwiLENVUlZFOlwiY3VydmVcIixTVFJPS0U6XCJzdHJva2VcIixGSUxMOlwiZmlsbFwiLFRFWFRVUkU6XCJ0ZXh0dXJlXCIsSU1NRURJQVRFOlwiaW1tZWRpYXRlXCIsTkVBUkVTVDpcIm5lYXJlc3RcIixSRVBFQVQ6XCJyZXBlYXRcIixDTEFNUDpcImNsYW1wXCIsTUlSUk9SOlwibWlycm9yXCIsTEFORFNDQVBFOlwibGFuZHNjYXBlXCIsUE9SVFJBSVQ6XCJwb3J0cmFpdFwiLF9ERUZBVUxUX1NUUk9LRTpcIiMwMDAwMDBcIixfREVGQVVMVF9GSUxMOlwiI0ZGRkZGRlwiLEdSSUQ6XCJncmlkXCIsQVhFUzpcImF4ZXNcIn19LHt9XSwxOTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoKXtyZXR1cm4gd2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRofHxkb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRofHwwfWZ1bmN0aW9uIGUoKXtyZXR1cm4gd2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHR8fGRvY3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0fHwwfWZ1bmN0aW9uIGYoYSl7aWYoIShkb2N1bWVudC5mdWxsc2NyZWVuRW5hYmxlZHx8ZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVuYWJsZWR8fGRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbmFibGVkfHxkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbmFibGVkKSl0aHJvdyBuZXcgRXJyb3IoXCJGdWxsc2NyZWVuIG5vdCBlbmFibGVkIGluIHRoaXMgYnJvd3Nlci5cIilcbjthLnJlcXVlc3RGdWxsc2NyZWVuP2EucmVxdWVzdEZ1bGxzY3JlZW4oKTphLm1velJlcXVlc3RGdWxsU2NyZWVuP2EubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTphLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuP2Eud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTphLm1zUmVxdWVzdEZ1bGxzY3JlZW4mJmEubXNSZXF1ZXN0RnVsbHNjcmVlbigpfWZ1bmN0aW9uIGcoKXtkb2N1bWVudC5leGl0RnVsbHNjcmVlbj9kb2N1bWVudC5leGl0RnVsbHNjcmVlbigpOmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4/ZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpOmRvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuP2RvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuKCk6ZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbiYmZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpfXZhciBoPWEoXCIuL21haW5cIiksaT1hKFwiLi9jb25zdGFudHNcIiksaj1baS5BUlJPVyxpLkNST1NTLGkuSEFORCxpLk1PVkUsaS5URVhULGkuV0FJVF07aC5wcm90b3R5cGUuX2ZyYW1lUmF0ZT0wLGgucHJvdG90eXBlLl9sYXN0RnJhbWVUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSxoLnByb3RvdHlwZS5fdGFyZ2V0RnJhbWVSYXRlPTYwO3ZhciBrPXdpbmRvdy5wcmludDtoLnByb3RvdHlwZS5wcmludD1mdW5jdGlvbigpe2FyZ3VtZW50cy5sZW5ndGg/Y29uc29sZS5sb2cuYXBwbHkoY29uc29sZSxhcmd1bWVudHMpOmsoKX0saC5wcm90b3R5cGUuZnJhbWVDb3VudD0wLGgucHJvdG90eXBlLmZvY3VzZWQ9ZG9jdW1lbnQuaGFzRm9jdXMoKSxoLnByb3RvdHlwZS5jdXJzb3I9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVwiYXV0b1wiLGU9dGhpcy5fY3VyRWxlbWVudC5lbHQ7aWYoai5pbmRleE9mKGEpPi0xKWQ9YTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXt2YXIgZj1cIlwiO2ImJmMmJlwibnVtYmVyXCI9PXR5cGVvZiBiJiZcIm51bWJlclwiPT10eXBlb2YgYyYmKGY9YitcIiBcIitjKSxkPVwiaHR0cDovL1wiPT09YS5zdWJzdHJpbmcoMCw3KXx8XCJodHRwczovL1wiPT09YS5zdWJzdHJpbmcoMCw4KT9cInVybChcIithK1wiKSBcIitmK1wiLCBhdXRvXCI6L1xcLihjdXJ8anBnfGpwZWd8Z2lmfHBuZ3xDVVJ8SlBHfEpQRUd8R0lGfFBORykkLy50ZXN0KGEpP1widXJsKFwiK2ErXCIpIFwiK2YrXCIsIGF1dG9cIjphfWUuc3R5bGUuY3Vyc29yPWR9LGgucHJvdG90eXBlLmZyYW1lUmF0ZT1mdW5jdGlvbihhKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZnJhbWVSYXRlXCIsYXJndW1lbnRzKSxcIm51bWJlclwiIT10eXBlb2YgYXx8YTwwP3RoaXMuX2ZyYW1lUmF0ZToodGhpcy5fc2V0UHJvcGVydHkoXCJfdGFyZ2V0RnJhbWVSYXRlXCIsYSksdGhpcy5fcnVuRnJhbWVzKCksdGhpcyl9LGgucHJvdG90eXBlLmdldEZyYW1lUmF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZyYW1lUmF0ZSgpfSxoLnByb3RvdHlwZS5zZXRGcmFtZVJhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZnJhbWVSYXRlKGEpfSxoLnByb3RvdHlwZS5ub0N1cnNvcj1mdW5jdGlvbigpe3RoaXMuX2N1ckVsZW1lbnQuZWx0LnN0eWxlLmN1cnNvcj1cIm5vbmVcIn0saC5wcm90b3R5cGUuZGlzcGxheVdpZHRoPXNjcmVlbi53aWR0aCxoLnByb3RvdHlwZS5kaXNwbGF5SGVpZ2h0PXNjcmVlbi5oZWlnaHQsaC5wcm90b3R5cGUud2luZG93V2lkdGg9ZCgpLGgucHJvdG90eXBlLndpbmRvd0hlaWdodD1lKCksaC5wcm90b3R5cGUuX29ucmVzaXplPWZ1bmN0aW9uKGEpe3RoaXMuX3NldFByb3BlcnR5KFwid2luZG93V2lkdGhcIixkKCkpLHRoaXMuX3NldFByb3BlcnR5KFwid2luZG93SGVpZ2h0XCIsZSgpKTt2YXIgYixjPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO1wiZnVuY3Rpb25cIj09dHlwZW9mIGMud2luZG93UmVzaXplZCYmKHZvaWQgMD09PShiPWMud2luZG93UmVzaXplZChhKSl8fGJ8fGEucHJldmVudERlZmF1bHQoKSl9LGgucHJvdG90eXBlLndpZHRoPTAsaC5wcm90b3R5cGUuaGVpZ2h0PTAsaC5wcm90b3R5cGUuZnVsbHNjcmVlbj1mdW5jdGlvbihhKXtpZihoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJmdWxsc2NyZWVuXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hKXJldHVybiBkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fGRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50O2E/Zihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOmcoKX0saC5wcm90b3R5cGUucGl4ZWxEZW5zaXR5PWZ1bmN0aW9uKGEpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBpeGVsRGVuc2l0eVwiLGFyZ3VtZW50cyk7dmFyIGI7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGE/KGEhPT10aGlzLl9waXhlbERlbnNpdHkmJih0aGlzLl9waXhlbERlbnNpdHk9YSx0aGlzLl9waXhlbHNEaXJ0eT0hMCksYj10aGlzLHRoaXMucmVzaXplQ2FudmFzKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsITApKTpiPXRoaXMuX3BpeGVsRGVuc2l0eSxifSxoLnByb3RvdHlwZS5kaXNwbGF5RGVuc2l0eT1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb30saC5wcm90b3R5cGUuZ2V0VVJMPWZ1bmN0aW9uKCl7cmV0dXJuIGxvY2F0aW9uLmhyZWZ9LGgucHJvdG90eXBlLmdldFVSTFBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gbG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm5cIlwiIT09YX0pfSxoLnByb3RvdHlwZS5nZXRVUkxQYXJhbXM9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0vWz8mXShbXiY9XSspKD86WyY9XSkoW14mPV0rKS9naW0sYz17fTtudWxsIT0oYT1iLmV4ZWMobG9jYXRpb24uc2VhcmNoKSk7KWEuaW5kZXg9PT1iLmxhc3RJbmRleCYmYi5sYXN0SW5kZXgrKyxjW2FbMV1dPWFbMl07cmV0dXJuIGN9LGIuZXhwb3J0cz1ofSx7XCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjR9XSwyMDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIik7YShcIi4vY29uc3RhbnRzXCIpO2QuX3ZhbGlkYXRlUGFyYW1ldGVycz1kLl9mcmllbmRseUZpbGVMb2FkRXJyb3I9ZnVuY3Rpb24oKXt9O3ZhciBlPW51bGwsZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9wcm9jZXNzaW5nL3A1LmpzL3dpa2kvcDUuanMtb3ZlcnZpZXcjd2h5LWNhbnQtaS1hc3NpZ24tdmFyaWFibGVzLXVzaW5nLXA1LWZ1bmN0aW9ucy1hbmQtdmFyaWFibGVzLWJlZm9yZS1zZXR1cFwiLGc9ZnVuY3Rpb24oKXt2YXIgYj17fSxjPWZ1bmN0aW9uKGEpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuXCJfXCIhPT1hWzBdJiYoIShhIGluIGIpJiYoYlthXT0hMCwhMCkpfSkubWFwKGZ1bmN0aW9uKGIpe3ZhciBjO3JldHVybiBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIGFbYl0/XCJmdW5jdGlvblwiOmI9PT1iLnRvVXBwZXJDYXNlKCk/XCJjb25zdGFudFwiOlwidmFyaWFibGVcIix7bmFtZTpiLHR5cGU6Y319KX07ZT1bXS5jb25jYXQoYyhkLnByb3RvdHlwZSksYyhhKFwiLi9jb25zdGFudHNcIikpKSxlLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5uYW1lLmxlbmd0aC1hLm5hbWUubGVuZ3RofSl9LGg9ZnVuY3Rpb24oYSxiKXtifHwoYj1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpKSxlfHxnKCksZS5zb21lKGZ1bmN0aW9uKGMpe2lmKGEubWVzc2FnZSYmbnVsbCE9PWEubWVzc2FnZS5tYXRjaChcIlxcXFxXP1wiK2MubmFtZStcIlxcXFxXXCIpKXJldHVybiBiKFwiRGlkIHlvdSBqdXN0IHRyeSB0byB1c2UgcDUuanMncyBcIitjLm5hbWUrKFwiZnVuY3Rpb25cIj09PWMudHlwZT9cIigpIFwiOlwiIFwiKStjLnR5cGUrXCI/IElmIHNvLCB5b3UgbWF5IHdhbnQgdG8gbW92ZSBpdCBpbnRvIHlvdXIgc2tldGNoJ3Mgc2V0dXAoKSBmdW5jdGlvbi5cXG5cXG5Gb3IgbW9yZSBkZXRhaWxzLCBzZWU6IFwiK2YpLCEwfSl9O2QucHJvdG90eXBlLl9oZWxwRm9yTWlzdXNlZEF0VG9wTGV2ZWxDb2RlPWgsXCJjb21wbGV0ZVwiIT09ZG9jdW1lbnQucmVhZHlTdGF0ZSYmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIixoLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIixoLCExKX0pKSxiLmV4cG9ydHM9ZH0se1wiLi4vLi4vZG9jcy9yZWZlcmVuY2UvZGF0YS5qc29uXCI6dm9pZCAwLFwiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0fV0sMjE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9jb25zdGFudHNcIik7Yi5leHBvcnRzPXttb2RlQWRqdXN0OmZ1bmN0aW9uKGEsYixjLGUsZil7cmV0dXJuIGY9PT1kLkNPUk5FUj97eDphLHk6Yix3OmMsaDplfTpmPT09ZC5DT1JORVJTP3t4OmEseTpiLHc6Yy1hLGg6ZS1ifTpmPT09ZC5SQURJVVM/e3g6YS1jLHk6Yi1lLHc6MipjLGg6MiplfTpmPT09ZC5DRU5URVI/e3g6YS0uNSpjLHk6Yi0uNSplLHc6YyxoOmV9OnZvaWQgMH19fSx7XCIuL2NvbnN0YW50c1wiOjE4fV0sMjI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9ZnVuY3Rpb24oKXt3aW5kb3cubW9jaGF8fCh3aW5kb3cuc2V0dXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHdpbmRvdy5zZXR1cHx8d2luZG93LmRyYXcmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHdpbmRvdy5kcmF3KSYmIWQuaW5zdGFuY2UmJm5ldyBkfTtcImNvbXBsZXRlXCI9PT1kb2N1bWVudC5yZWFkeVN0YXRlP2UoKTp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixlLCExKX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSwyMzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIik7ZC5wcm90b3R5cGUuZXhpdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcImV4aXQoKSBub3QgaW1wbGVtZW50ZWQsIHNlZSByZW1vdmUoKVwiKX0sZC5wcm90b3R5cGUucHVzaFN0eWxlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicHVzaFN0eWxlKCkgbm90IHVzZWQsIHNlZSBwdXNoKClcIil9LGQucHJvdG90eXBlLnBvcFN0eWxlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicG9wU3R5bGUoKSBub3QgdXNlZCwgc2VlIHBvcCgpXCIpfSxkLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7dmFyIGE9XCJzaXplKCkgaXMgbm90IGEgdmFsaWQgcDUgZnVuY3Rpb24sIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgXCI7dGhyb3cgYSs9XCJkcmF3aW5nIGNhbnZhcywgcGxlYXNlIHVzZSBjcmVhdGVDYW52YXMoKSBpbnN0ZWFkXCIsbmV3IEVycm9yKGEpfSxiLmV4cG9ydHM9ZH0se1wiLi9tYWluXCI6MjR9XSwyNDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2EoXCIuL3NoaW1cIik7dmFyIGQ9YShcIi4vY29uc3RhbnRzXCIpLGU9ZnVuY3Rpb24oYSxiLGMpe1wiYm9vbGVhblwiPT10eXBlb2YgYiYmdm9pZCAwPT09YyYmKGM9YixiPXZvaWQgMCksdGhpcy5fc2V0dXBEb25lPSExLHRoaXMuX3BpeGVsRGVuc2l0eT1NYXRoLmNlaWwod2luZG93LmRldmljZVBpeGVsUmF0aW8pfHwxLHRoaXMuX3VzZXJOb2RlPWIsdGhpcy5fY3VyRWxlbWVudD1udWxsLHRoaXMuX2VsZW1lbnRzPVtdLHRoaXMuX3JlcXVlc3RBbmltSWQ9MCx0aGlzLl9wcmVsb2FkQ291bnQ9MCx0aGlzLl9pc0dsb2JhbD0hMSx0aGlzLl9sb29wPSEwLHRoaXMuX2luaXRpYWxpemVJbnN0YW5jZVZhcmlhYmxlcygpLHRoaXMuX2RlZmF1bHRDYW52YXNTaXplPXt3aWR0aDoxMDAsaGVpZ2h0OjEwMH0sdGhpcy5fZXZlbnRzPXttb3VzZW1vdmU6bnVsbCxtb3VzZWRvd246bnVsbCxtb3VzZXVwOm51bGwsZHJhZ2VuZDpudWxsLGRyYWdvdmVyOm51bGwsY2xpY2s6bnVsbCxkYmxjbGljazpudWxsLG1vdXNlb3ZlcjpudWxsLG1vdXNlb3V0Om51bGwsa2V5ZG93bjpudWxsLGtleXVwOm51bGwsa2V5cHJlc3M6bnVsbCx0b3VjaHN0YXJ0Om51bGwsdG91Y2htb3ZlOm51bGwsdG91Y2hlbmQ6bnVsbCxyZXNpemU6bnVsbCxibHVyOm51bGx9LHRoaXMuX2V2ZW50cy53aGVlbD1udWxsLHRoaXMuX2xvYWRpbmdTY3JlZW5JZD1cInA1X2xvYWRpbmdcIix0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcz17fTtmb3IodmFyIGQ9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRNZXRob2RzKSxmPTA7ZjxkLmxlbmd0aDtmKyspe3ZhciBnPWRbZl07dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHNbZ109ZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRNZXRob2RzW2ddLnNsaWNlKCl9d2luZG93LkRldmljZU9yaWVudGF0aW9uRXZlbnQmJih0aGlzLl9ldmVudHMuZGV2aWNlb3JpZW50YXRpb249bnVsbCksd2luZG93LkRldmljZU1vdGlvbkV2ZW50JiYhd2luZG93Ll9pc05vZGVXZWJraXQmJih0aGlzLl9ldmVudHMuZGV2aWNlbW90aW9uPW51bGwpLHRoaXMuX3N0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fdXNlck5vZGUmJlwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLl91c2VyTm9kZSYmKHRoaXMuX3VzZXJOb2RlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX3VzZXJOb2RlKSk7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXMsYj1hLnByZWxvYWQ7aWYoYil7dmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fbG9hZGluZ1NjcmVlbklkKTtpZighYyl7Yz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGMuaW5uZXJIVE1MPVwiTG9hZGluZy4uLlwiLGMuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLGMuaWQ9dGhpcy5fbG9hZGluZ1NjcmVlbklkOyh0aGlzLl91c2VyTm9kZXx8ZG9jdW1lbnQuYm9keSkuYXBwZW5kQ2hpbGQoYyl9dmFyIGQ9dGhpcy5fcHJlbG9hZE1ldGhvZHM7Zm9yKHZhciBmIGluIGQpe2RbZl09ZFtmXXx8ZTt2YXIgZz1kW2ZdO2chPT1lLnByb3RvdHlwZSYmZyE9PWV8fCh0aGlzLl9pc0dsb2JhbCYmKHdpbmRvd1tmXT10aGlzLl93cmFwUHJlbG9hZCh0aGlzLGYpKSxnPXRoaXMpLHRoaXMuX3JlZ2lzdGVyZWRQcmVsb2FkTWV0aG9kc1tmXT1nW2ZdLGdbZl09dGhpcy5fd3JhcFByZWxvYWQoZyxmKX1iKCksdGhpcy5fcnVuSWZQcmVsb2Fkc0FyZURvbmUoKX1lbHNlIHRoaXMuX3NldHVwKCksdGhpcy5fcnVuRnJhbWVzKCksdGhpcy5fZHJhdygpfS5iaW5kKHRoaXMpLHRoaXMuX3J1bklmUHJlbG9hZHNBcmVEb25lPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoMD09PWEuX3ByZWxvYWRDb3VudCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYS5fbG9hZGluZ1NjcmVlbklkKTtiJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksYS5fc2V0dXAoKSxhLl9ydW5GcmFtZXMoKSxhLl9kcmF3KCl9fSx0aGlzLl9kZWNyZW1lbnRQcmVsb2FkPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7XCJmdW5jdGlvblwiPT10eXBlb2YgYS5wcmVsb2FkJiYoYS5fc2V0UHJvcGVydHkoXCJfcHJlbG9hZENvdW50XCIsYS5fcHJlbG9hZENvdW50LTEpLGEuX3J1bklmUHJlbG9hZHNBcmVEb25lKCkpfSx0aGlzLl93cmFwUHJlbG9hZD1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbmNyZW1lbnRQcmVsb2FkKCksdGhpcy5fcmVnaXN0ZXJlZFByZWxvYWRNZXRob2RzW2JdLmFwcGx5KGEsYXJndW1lbnRzKX0uYmluZCh0aGlzKX0sdGhpcy5faW5jcmVtZW50UHJlbG9hZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2EuX3NldFByb3BlcnR5KFwiX3ByZWxvYWRDb3VudFwiLGEuX3ByZWxvYWRDb3VudCsxKX0sdGhpcy5fc2V0dXA9ZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZUNhbnZhcyh0aGlzLl9kZWZhdWx0Q2FudmFzU2l6ZS53aWR0aCx0aGlzLl9kZWZhdWx0Q2FudmFzU2l6ZS5oZWlnaHQsXCJwMmRcIik7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYS5wcmVsb2FkKWZvcih2YXIgYiBpbiB0aGlzLl9wcmVsb2FkTWV0aG9kcylhW2JdPXRoaXMuX3ByZWxvYWRNZXRob2RzW2JdW2JdLGFbYl0mJnRoaXMmJihhW2JdPWFbYl0uYmluZCh0aGlzKSk7XCJmdW5jdGlvblwiPT10eXBlb2YgYS5zZXR1cCYmYS5zZXR1cCgpO2Zvcih2YXIgYz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNhbnZhc1wiKSxkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07XCJ0cnVlXCI9PT1lLmRhdGFzZXQuaGlkZGVuJiYoZS5zdHlsZS52aXNpYmlsaXR5PVwiXCIsZGVsZXRlIGUuZGF0YXNldC5oaWRkZW4pfXRoaXMuX3NldHVwRG9uZT0hMH0uYmluZCh0aGlzKSx0aGlzLl9kcmF3PWZ1bmN0aW9uKCl7dmFyIGE9d2luZG93LnBlcmZvcm1hbmNlLm5vdygpLGI9YS10aGlzLl9sYXN0RnJhbWVUaW1lLGM9MWUzL3RoaXMuX3RhcmdldEZyYW1lUmF0ZTsoIXRoaXMuX2xvb3B8fGI+PWMtNSkmJih0aGlzLnJlZHJhdygpLHRoaXMuX2ZyYW1lUmF0ZT0xZTMvKGEtdGhpcy5fbGFzdEZyYW1lVGltZSksdGhpcy5fbGFzdEZyYW1lVGltZT1hLHZvaWQgMCE9PXRoaXMuX3VwZGF0ZU1vdXNlQ29vcmRzJiZ0aGlzLl91cGRhdGVNb3VzZUNvb3JkcygpKSx0aGlzLl9sb29wJiYodGhpcy5fcmVxdWVzdEFuaW1JZD13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2RyYXcpKX0uYmluZCh0aGlzKSx0aGlzLl9ydW5GcmFtZXM9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVJbnRlcnZhbCYmY2xlYXJJbnRlcnZhbCh0aGlzLl91cGRhdGVJbnRlcnZhbCl9LmJpbmQodGhpcyksdGhpcy5fc2V0UHJvcGVydHk9ZnVuY3Rpb24oYSxiKXt0aGlzW2FdPWIsdGhpcy5faXNHbG9iYWwmJih3aW5kb3dbYV09Yil9LmJpbmQodGhpcyksdGhpcy5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9sb2FkaW5nU2NyZWVuSWQpO2lmKGEmJihhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSksdGhpcy5faW5jcmVtZW50UHJlbG9hZCgpKSx0aGlzLl9jdXJFbGVtZW50KXt0aGlzLl9sb29wPSExLHRoaXMuX3JlcXVlc3RBbmltSWQmJndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0QW5pbUlkKTtmb3IodmFyIGIgaW4gdGhpcy5fZXZlbnRzKXdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGIsdGhpcy5fZXZlbnRzW2JdKTtmb3IodmFyIGM9MDtjPHRoaXMuX2VsZW1lbnRzLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuX2VsZW1lbnRzW2NdO2QuZWx0LnBhcmVudE5vZGUmJmQuZWx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZC5lbHQpO2Zvcih2YXIgZiBpbiBkLl9ldmVudHMpZC5lbHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihmLGQuX2V2ZW50c1tmXSl9dmFyIGc9dGhpczt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5yZW1vdmUuZm9yRWFjaChmdW5jdGlvbihhKXt2b2lkIDAhPT1hJiZhLmNhbGwoZyl9KX1pZih0aGlzLl9pc0dsb2JhbCl7Zm9yKHZhciBoIGluIGUucHJvdG90eXBlKXRyeXtkZWxldGUgd2luZG93W2hdfWNhdGNoKGEpe3dpbmRvd1toXT12b2lkIDB9Zm9yKHZhciBpIGluIHRoaXMpaWYodGhpcy5oYXNPd25Qcm9wZXJ0eShpKSl0cnl7ZGVsZXRlIHdpbmRvd1tpXX1jYXRjaChhKXt3aW5kb3dbaV09dm9pZCAwfWUuaW5zdGFuY2U9bnVsbH19LmJpbmQodGhpcyksdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaW5pdC5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEmJmEuY2FsbCh0aGlzKX0sdGhpcyk7dmFyIGg9dGhpcy5fY3JlYXRlRnJpZW5kbHlHbG9iYWxGdW5jdGlvbkJpbmRlcigpO2lmKGEpYSh0aGlzKTtlbHNle3RoaXMuX2lzR2xvYmFsPSEwLGUuaW5zdGFuY2U9dGhpcztmb3IodmFyIGkgaW4gZS5wcm90b3R5cGUpaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5wcm90b3R5cGVbaV0pe3ZhciBqPWkuc3Vic3RyaW5nKDIpO3RoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShqKXx8KE1hdGguaGFzT3duUHJvcGVydHkoaSkmJk1hdGhbaV09PT1lLnByb3RvdHlwZVtpXT9oKGksZS5wcm90b3R5cGVbaV0pOmgoaSxlLnByb3RvdHlwZVtpXS5iaW5kKHRoaXMpKSl9ZWxzZSBoKGksZS5wcm90b3R5cGVbaV0pO2Zvcih2YXIgayBpbiB0aGlzKXRoaXMuaGFzT3duUHJvcGVydHkoaykmJmgoayx0aGlzW2tdKX1mb3IodmFyIGwgaW4gdGhpcy5fZXZlbnRzKXt2YXIgbT10aGlzW1wiX29uXCIrbF07aWYobSl7dmFyIG49bS5iaW5kKHRoaXMpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKGwsbix7cGFzc2l2ZTohMX0pLHRoaXMuX2V2ZW50c1tsXT1ufX12YXIgbz1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwiZm9jdXNlZFwiLCEwKX0uYmluZCh0aGlzKSxwPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJmb2N1c2VkXCIsITEpfS5iaW5kKHRoaXMpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIixvKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIixwKSx0aGlzLnJlZ2lzdGVyTWV0aG9kKFwicmVtb3ZlXCIsZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsbyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIscCl9KSxjP3RoaXMuX3N0YXJ0KCk6XCJjb21wbGV0ZVwiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZT90aGlzLl9zdGFydCgpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLHRoaXMuX3N0YXJ0LmJpbmQodGhpcyksITEpfTtlLnByb3RvdHlwZS5faW5pdGlhbGl6ZUluc3RhbmNlVmFyaWFibGVzPWZ1bmN0aW9uKCl7dGhpcy5fc3R5bGVzPVtdLHRoaXMuX2JlemllckRldGFpbD0yMCx0aGlzLl9jdXJ2ZURldGFpbD0yMCx0aGlzLl9jb2xvck1vZGU9ZC5SR0IsdGhpcy5fY29sb3JNYXhlcz17cmdiOlsyNTUsMjU1LDI1NSwyNTVdLGhzYjpbMzYwLDEwMCwxMDAsMV0saHNsOlszNjAsMTAwLDEwMCwxXX0sdGhpcy5fcGl4ZWxzRGlydHk9ITB9LGUuaW5zdGFuY2U9bnVsbCxlLmRpc2FibGVGcmllbmRseUVycm9ycz0hMTtmb3IodmFyIGYgaW4gZCllLnByb3RvdHlwZVtmXT1kW2ZdO2UucHJvdG90eXBlLl9wcmVsb2FkTWV0aG9kcz17bG9hZEpTT046ZS5wcm90b3R5cGUsbG9hZEltYWdlOmUucHJvdG90eXBlLGxvYWRTdHJpbmdzOmUucHJvdG90eXBlLGxvYWRYTUw6ZS5wcm90b3R5cGUsbG9hZEJ5dGVzOmUucHJvdG90eXBlLGxvYWRUYWJsZTplLnByb3RvdHlwZSxsb2FkRm9udDplLnByb3RvdHlwZSxsb2FkTW9kZWw6ZS5wcm90b3R5cGUsbG9hZFNoYWRlcjplLnByb3RvdHlwZX0sZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRNZXRob2RzPXtpbml0OltdLHByZTpbXSxwb3N0OltdLHJlbW92ZTpbXX0sZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRQcmVsb2FkTWV0aG9kcz17fSxlLnByb3RvdHlwZS5yZWdpc3RlclByZWxvYWRNZXRob2Q9ZnVuY3Rpb24oYSxiKXtlLnByb3RvdHlwZS5fcHJlbG9hZE1ldGhvZHMuaGFzT3duUHJvcGVydHkoYSl8fChlLnByb3RvdHlwZS5fcHJlbG9hZE1ldGhvZHNbYV09Yil9LGUucHJvdG90eXBlLnJlZ2lzdGVyTWV0aG9kPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpc3x8ZS5wcm90b3R5cGU7Yy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzT3duUHJvcGVydHkoYSl8fChjLl9yZWdpc3RlcmVkTWV0aG9kc1thXT1bXSksYy5fcmVnaXN0ZXJlZE1ldGhvZHNbYV0ucHVzaChiKX0sZS5wcm90b3R5cGUuX2NyZWF0ZUZyaWVuZGx5R2xvYmFsRnVuY3Rpb25CaW5kZXI9ZnVuY3Rpb24oYSl7YT1hfHx7fTt2YXIgYj1hLmdsb2JhbE9iamVjdHx8d2luZG93LGM9YS5sb2d8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksZD17cHJpbnQ6ITB9O3JldHVybiBmdW5jdGlvbihhLGYpe2lmKGUuZGlzYWJsZUZyaWVuZGx5RXJyb3JzLDEpYlthXT1mO2Vsc2UgdHJ5e2lmKGEgaW4gYiYmIShhIGluIGQpKXRocm93IG5ldyBFcnJvcignZ2xvYmFsIFwiJythKydcIiBhbHJlYWR5IGV4aXN0cycpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmfSxzZXQ6ZnVuY3Rpb24oZCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsYSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZCx3cml0YWJsZTohMH0pLGMoJ1lvdSBqdXN0IGNoYW5nZWQgdGhlIHZhbHVlIG9mIFwiJythK1wiXFxcIiwgd2hpY2ggd2FzIGEgcDUgZnVuY3Rpb24uIFRoaXMgY291bGQgY2F1c2UgcHJvYmxlbXMgbGF0ZXIgaWYgeW91J3JlIG5vdCBjYXJlZnVsLlwiKX19KX1jYXRjaChkKXtjKCdwNSBoYWQgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIGdsb2JhbCBmdW5jdGlvbiBcIicrYSsnXCIsIHBvc3NpYmx5IGJlY2F1c2UgeW91ciBjb2RlIGlzIGFscmVhZHkgdXNpbmcgdGhhdCBuYW1lIGFzIGEgdmFyaWFibGUuIFlvdSBtYXkgd2FudCB0byByZW5hbWUgeW91ciB2YXJpYWJsZSB0byBzb21ldGhpbmcgZWxzZS4nKSxiW2FdPWZ9fX0sYi5leHBvcnRzPWV9LHtcIi4vY29uc3RhbnRzXCI6MTgsXCIuL3NoaW1cIjozNH1dLDI1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyl7cmV0dXJuITE9PT1iP2YoYSxjKTplKGEsYixjKSx0aGlzfWZ1bmN0aW9uIGUoYSxiLGMpe2MuX2V2ZW50c1thXSYmZihhLGMpO3ZhciBkPWIuYmluZChjKTtjLmVsdC5hZGRFdmVudExpc3RlbmVyKGEsZCwhMSksYy5fZXZlbnRzW2FdPWR9ZnVuY3Rpb24gZihhLGIpe3ZhciBjPWIuX2V2ZW50c1thXTtiLmVsdC5yZW1vdmVFdmVudExpc3RlbmVyKGEsYywhMSksYi5fZXZlbnRzW2FdPW51bGx9dmFyIGc9YShcIi4vbWFpblwiKTtnLkVsZW1lbnQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmVsdD1hLHRoaXMuX3BJbnN0PWIsdGhpcy5fZXZlbnRzPXt9LHRoaXMud2lkdGg9dGhpcy5lbHQub2Zmc2V0V2lkdGgsdGhpcy5oZWlnaHQ9dGhpcy5lbHQub2Zmc2V0SGVpZ2h0fSxnLkVsZW1lbnQucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT90aGlzLmVsdC5wYXJlbnROb2RlOihcInN0cmluZ1wiPT10eXBlb2YgYT8oXCIjXCI9PT1hWzBdJiYoYT1hLnN1YnN0cmluZygxKSksYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSk6YSBpbnN0YW5jZW9mIGcuRWxlbWVudCYmKGE9YS5lbHQpLGEuYXBwZW5kQ2hpbGQodGhpcy5lbHQpLHRoaXMpfSxnLkVsZW1lbnQucHJvdG90eXBlLmlkPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hP3RoaXMuZWx0LmlkOih0aGlzLmVsdC5pZD1hLHRoaXMud2lkdGg9dGhpcy5lbHQub2Zmc2V0V2lkdGgsdGhpcy5oZWlnaHQ9dGhpcy5lbHQub2Zmc2V0SGVpZ2h0LHRoaXMpfSxnLkVsZW1lbnQucHJvdG90eXBlLmNsYXNzPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hP3RoaXMuZWx0LmNsYXNzTmFtZToodGhpcy5lbHQuY2xhc3NOYW1lPWEsdGhpcyl9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VQcmVzc2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2Vkb3duXCIsZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIm1vdXNlSXNQcmVzc2VkXCIsITApLHRoaXMuX3BJbnN0Ll9zZXRNb3VzZUJ1dHRvbihiKSxhKCl9LHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuZG91YmxlQ2xpY2tlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcImRibGNsaWNrXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlV2hlZWw9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ3aGVlbFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZVJlbGVhc2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2V1cFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZUNsaWNrZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJjbGlja1wiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZU1vdmVkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2Vtb3ZlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlT3Zlcj1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNlb3ZlclwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5jaGFuZ2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiY2hhbmdlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmlucHV0PWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiaW5wdXRcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VPdXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJtb3VzZW91dFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS50b3VjaFN0YXJ0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ0b3VjaHN0YXJ0XCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLnRvdWNoTW92ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ0b3VjaG1vdmVcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUudG91Y2hFbmRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcInRvdWNoZW5kXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRyYWdPdmVyPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiZHJhZ292ZXJcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuZHJhZ0xlYXZlPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiZHJhZ2xlYXZlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRyb3A9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPW5ldyBnLkZpbGUoYik7cmV0dXJuIGZ1bmN0aW9uKGIpe2MuZGF0YT1iLnRhcmdldC5yZXN1bHQsYShjKX19cmV0dXJuIHdpbmRvdy5GaWxlJiZ3aW5kb3cuRmlsZVJlYWRlciYmd2luZG93LkZpbGVMaXN0JiZ3aW5kb3cuQmxvYj8oZShcImRyYWdvdmVyXCIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKSxhLnByZXZlbnREZWZhdWx0KCl9LHRoaXMpLGUoXCJkcmFnbGVhdmVcIixmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpLGEucHJldmVudERlZmF1bHQoKX0sdGhpcyksdm9pZCAwIT09YiYmZShcImRyb3BcIixiLHRoaXMpLGUoXCJkcm9wXCIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKSxhLnByZXZlbnREZWZhdWx0KCk7Zm9yKHZhciBiPWEuZGF0YVRyYW5zZmVyLmZpbGVzLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGU9YltkXSxmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPWMoZSksZS50eXBlLmluZGV4T2YoXCJ0ZXh0XCIpPi0xP2YucmVhZEFzVGV4dChlKTpmLnJlYWRBc0RhdGFVUkwoZSl9fSx0aGlzKSk6Y29uc29sZS5sb2coXCJUaGUgRmlsZSBBUElzIGFyZSBub3QgZnVsbHkgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci5cIiksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5fc2V0UHJvcGVydHk9ZnVuY3Rpb24oYSxiKXt0aGlzW2FdPWJ9LGIuZXhwb3J0cz1nLkVsZW1lbnR9LHtcIi4vbWFpblwiOjI0fV0sMjY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpLGU9YShcIi4vY29uc3RhbnRzXCIpO2QuR3JhcGhpY3M9ZnVuY3Rpb24oYSxiLGMsZil7dmFyIGc9Y3x8ZS5QMkQ7dGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSwoZi5fdXNlck5vZGV8fGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzKSxkLkVsZW1lbnQuY2FsbCh0aGlzLHRoaXMuY2FudmFzLGYsITEpO2Zvcih2YXIgaCBpbiBkLnByb3RvdHlwZSl0aGlzW2hdfHwoXCJmdW5jdGlvblwiPT10eXBlb2YgZC5wcm90b3R5cGVbaF0/dGhpc1toXT1kLnByb3RvdHlwZVtoXS5iaW5kKHRoaXMpOnRoaXNbaF09ZC5wcm90b3R5cGVbaF0pO3JldHVybiBkLnByb3RvdHlwZS5faW5pdGlhbGl6ZUluc3RhbmNlVmFyaWFibGVzLmFwcGx5KHRoaXMpLHRoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iLHRoaXMuX3BpeGVsRGVuc2l0eT1mLl9waXhlbERlbnNpdHksZz09PWUuV0VCR0w/dGhpcy5fcmVuZGVyZXI9bmV3IGQuUmVuZGVyZXJHTCh0aGlzLmNhbnZhcyx0aGlzLCExKTp0aGlzLl9yZW5kZXJlcj1uZXcgZC5SZW5kZXJlcjJEKHRoaXMuY2FudmFzLHRoaXMsITEpLGYuX2VsZW1lbnRzLnB1c2godGhpcyksdGhpcy5fcmVuZGVyZXIucmVzaXplKGEsYiksdGhpcy5fcmVuZGVyZXIuX2FwcGx5RGVmYXVsdHMoKSx0aGlzfSxkLkdyYXBoaWNzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQuRWxlbWVudC5wcm90b3R5cGUpLGQuR3JhcGhpY3MucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuZWx0LnBhcmVudE5vZGUmJnRoaXMuZWx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbHQpO3ZhciBhPXRoaXMuX3BJbnN0Ll9lbGVtZW50cy5pbmRleE9mKHRoaXMpOy0xIT09YSYmdGhpcy5fcEluc3QuX2VsZW1lbnRzLnNwbGljZShhLDEpO2Zvcih2YXIgYiBpbiB0aGlzLl9ldmVudHMpdGhpcy5lbHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLHRoaXMuX2V2ZW50c1tiXSl9LGIuZXhwb3J0cz1kLkdyYXBoaWNzfSx7XCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjR9XSwyNzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSl7dmFyIGI9MCxjPTA7aWYoYS5vZmZzZXRQYXJlbnQpZG97Yis9YS5vZmZzZXRMZWZ0LGMrPWEub2Zmc2V0VG9wfXdoaWxlKGE9YS5vZmZzZXRQYXJlbnQpO2Vsc2UgYis9YS5vZmZzZXRMZWZ0LGMrPWEub2Zmc2V0VG9wO3JldHVybltiLGNdfXZhciBlPWEoXCIuL21haW5cIiksZj1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZS5SZW5kZXJlcj1mdW5jdGlvbihhLGIsYyl7ZS5FbGVtZW50LmNhbGwodGhpcyxhLGIpLHRoaXMuY2FudmFzPWEsYz8odGhpcy5faXNNYWluQ2FudmFzPSEwLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIl9jdXJFbGVtZW50XCIsdGhpcyksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiY2FudmFzXCIsdGhpcy5jYW52YXMpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIndpZHRoXCIsdGhpcy53aWR0aCksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiaGVpZ2h0XCIsdGhpcy5oZWlnaHQpKToodGhpcy5jYW52YXMuc3R5bGUuZGlzcGxheT1cIm5vbmVcIix0aGlzLl9zdHlsZXM9W10pLHRoaXMuX3RleHRTaXplPTEyLHRoaXMuX3RleHRMZWFkaW5nPTE1LHRoaXMuX3RleHRGb250PVwic2Fucy1zZXJpZlwiLHRoaXMuX3RleHRTdHlsZT1mLk5PUk1BTCx0aGlzLl90ZXh0QXNjZW50PW51bGwsdGhpcy5fdGV4dERlc2NlbnQ9bnVsbCx0aGlzLl90ZXh0QWxpZ249Zi5MRUZULHRoaXMuX3RleHRCYXNlbGluZT1mLkJBU0VMSU5FLHRoaXMuX3JlY3RNb2RlPWYuQ09STkVSLHRoaXMuX2VsbGlwc2VNb2RlPWYuQ0VOVEVSLHRoaXMuX2N1cnZlVGlnaHRuZXNzPTAsdGhpcy5faW1hZ2VNb2RlPWYuQ09STkVSLHRoaXMuX3RpbnQ9bnVsbCx0aGlzLl9kb1N0cm9rZT0hMCx0aGlzLl9kb0ZpbGw9ITAsdGhpcy5fc3Ryb2tlU2V0PSExLHRoaXMuX2ZpbGxTZXQ9ITF9LGUuUmVuZGVyZXIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5FbGVtZW50LnByb3RvdHlwZSksZS5SZW5kZXJlci5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3JldHVybntwcm9wZXJ0aWVzOntfZG9TdHJva2U6dGhpcy5fZG9TdHJva2UsX3N0cm9rZVNldDp0aGlzLl9zdHJva2VTZXQsX2RvRmlsbDp0aGlzLl9kb0ZpbGwsX2ZpbGxTZXQ6dGhpcy5fZmlsbFNldCxfdGludDp0aGlzLl90aW50LF9pbWFnZU1vZGU6dGhpcy5faW1hZ2VNb2RlLF9yZWN0TW9kZTp0aGlzLl9yZWN0TW9kZSxfZWxsaXBzZU1vZGU6dGhpcy5fZWxsaXBzZU1vZGUsX3RleHRGb250OnRoaXMuX3RleHRGb250LF90ZXh0TGVhZGluZzp0aGlzLl90ZXh0TGVhZGluZyxfdGV4dFNpemU6dGhpcy5fdGV4dFNpemUsX3RleHRBbGlnbjp0aGlzLl90ZXh0QWxpZ24sX3RleHRCYXNlbGluZTp0aGlzLl90ZXh0QmFzZWxpbmUsX3RleHRTdHlsZTp0aGlzLl90ZXh0U3R5bGV9fX0sZS5SZW5kZXJlci5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKGEpe2EucHJvcGVydGllcyYmT2JqZWN0LmFzc2lnbih0aGlzLGEucHJvcGVydGllcyl9LGUuUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihhLGIpe3RoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iLHRoaXMuZWx0LndpZHRoPWEqdGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSx0aGlzLmVsdC5oZWlnaHQ9Yip0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LHRoaXMuZWx0LnN0eWxlLndpZHRoPWErXCJweFwiLHRoaXMuZWx0LnN0eWxlLmhlaWdodD1iK1wicHhcIix0aGlzLl9pc01haW5DYW52YXMmJih0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJ3aWR0aFwiLHRoaXMud2lkdGgpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcImhlaWdodFwiLHRoaXMuaGVpZ2h0KSl9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRMZWFkaW5nPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPyh0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0TGVhZGluZ1wiLGEpLHRoaXMuX3BJbnN0KTp0aGlzLl90ZXh0TGVhZGluZ30sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dFNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGE/KHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRTaXplXCIsYSksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dExlYWRpbmdcIixhKmYuX0RFRkFVTFRfTEVBRE1VTFQpLHRoaXMuX2FwcGx5VGV4dFByb3BlcnRpZXMoKSk6dGhpcy5fdGV4dFNpemV9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRTdHlsZT1mdW5jdGlvbihhKXtyZXR1cm4gYT8oYSE9PWYuTk9STUFMJiZhIT09Zi5JVEFMSUMmJmEhPT1mLkJPTER8fHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRTdHlsZVwiLGEpLHRoaXMuX2FwcGx5VGV4dFByb3BlcnRpZXMoKSk6dGhpcy5fdGV4dFN0eWxlfSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0QXNjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl90ZXh0QXNjZW50JiZ0aGlzLl91cGRhdGVUZXh0TWV0cmljcygpLHRoaXMuX3RleHRBc2NlbnR9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHREZXNjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl90ZXh0RGVzY2VudCYmdGhpcy5fdXBkYXRlVGV4dE1ldHJpY3MoKSx0aGlzLl90ZXh0RGVzY2VudH0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dEFsaWduPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMCE9PWE/KHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRBbGlnblwiLGEpLHZvaWQgMCE9PWImJnRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRCYXNlbGluZVwiLGIpLHRoaXMuX2FwcGx5VGV4dFByb3BlcnRpZXMoKSk6e2hvcml6b250YWw6dGhpcy5fdGV4dEFsaWduLHZlcnRpY2FsOnRoaXMuX3RleHRCYXNlbGluZX19LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZyxoLGksaixrLGwsbSxuLG8scD10aGlzLl9wSW5zdCxxPU51bWJlci5NQVhfVkFMVUU7aWYoKHRoaXMuX2RvRmlsbHx8dGhpcy5fZG9TdHJva2UpJiZ2b2lkIDAhPT1hKXtpZihcInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSxhPWEucmVwbGFjZSgvKFxcdCkvZyxcIiAgXCIpLGc9YS5zcGxpdChcIlxcblwiKSx2b2lkIDAhPT1kKXtmb3Iobz0wLGk9MDtpPGcubGVuZ3RoO2krKylmb3Ioaz1cIlwiLG49Z1tpXS5zcGxpdChcIiBcIiksaD0wO2g8bi5sZW5ndGg7aCsrKWw9aytuW2hdK1wiIFwiLG09dGhpcy50ZXh0V2lkdGgobCksbT5kPyhrPW5baF0rXCIgXCIsbys9cC50ZXh0TGVhZGluZygpKTprPWw7c3dpdGNoKHRoaXMuX3JlY3RNb2RlPT09Zi5DRU5URVImJihiLT1kLzIsYy09ZS8yKSx0aGlzLl90ZXh0QWxpZ24pe2Nhc2UgZi5DRU5URVI6Yis9ZC8yO2JyZWFrO2Nhc2UgZi5SSUdIVDpiKz1kfXZhciByPSExO2lmKHZvaWQgMCE9PWUpe3N3aXRjaCh0aGlzLl90ZXh0QmFzZWxpbmUpe2Nhc2UgZi5CT1RUT006Yys9ZS1vO2JyZWFrO2Nhc2UgZi5DRU5URVI6Yys9KGUtbykvMjticmVhaztjYXNlIGYuQkFTRUxJTkU6cj0hMCx0aGlzLl90ZXh0QmFzZWxpbmU9Zi5UT1B9cT1jK2UtcC50ZXh0QXNjZW50KCl9Zm9yKGk9MDtpPGcubGVuZ3RoO2krKyl7Zm9yKGs9XCJcIixuPWdbaV0uc3BsaXQoXCIgXCIpLGg9MDtoPG4ubGVuZ3RoO2grKylsPWsrbltoXStcIiBcIixtPXRoaXMudGV4dFdpZHRoKGwpLG0+ZCYmay5sZW5ndGg+MD8odGhpcy5fcmVuZGVyVGV4dChwLGssYixjLHEpLGs9bltoXStcIiBcIixjKz1wLnRleHRMZWFkaW5nKCkpOms9bDt0aGlzLl9yZW5kZXJUZXh0KHAsayxiLGMscSksYys9cC50ZXh0TGVhZGluZygpLHImJih0aGlzLl90ZXh0QmFzZWxpbmU9Zi5CQVNFTElORSl9fWVsc2V7dmFyIHM9MCx0PXAudGV4dEFsaWduKCkudmVydGljYWw7Zm9yKHQ9PT1mLkNFTlRFUj9zPShnLmxlbmd0aC0xKSpwLnRleHRMZWFkaW5nKCkvMjp0PT09Zi5CT1RUT00mJihzPShnLmxlbmd0aC0xKSpwLnRleHRMZWFkaW5nKCkpLGo9MDtqPGcubGVuZ3RoO2orKyl0aGlzLl9yZW5kZXJUZXh0KHAsZ1tqXSxiLGMtcyxxKSxjKz1wLnRleHRMZWFkaW5nKCl9cmV0dXJuIHB9fSxlLlJlbmRlcmVyLnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLlJlbmRlcmVyLnByb3RvdHlwZS5faXNPcGVuVHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YoYT1hfHx0aGlzLl90ZXh0Rm9udCkmJmEuZm9udCYmYS5mb250LnN1cHBvcnRlZH0sZS5SZW5kZXJlci5wcm90b3R5cGUuX3VwZGF0ZVRleHRNZXRyaWNzPWZ1bmN0aW9uKCl7aWYodGhpcy5faXNPcGVuVHlwZSgpKXJldHVybiB0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QXNjZW50XCIsdGhpcy5fdGV4dEZvbnQuX3RleHRBc2NlbnQoKSksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dERlc2NlbnRcIix0aGlzLl90ZXh0Rm9udC5fdGV4dERlc2NlbnQoKSksdGhpczt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTthLnN0eWxlLmZvbnRGYW1pbHk9dGhpcy5fdGV4dEZvbnQsYS5zdHlsZS5mb250U2l6ZT10aGlzLl90ZXh0U2l6ZStcInB4XCIsYS5pbm5lckhUTUw9XCJBQkNqZ3F8XCI7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtiLnN0eWxlLmRpc3BsYXk9XCJpbmxpbmUtYmxvY2tcIixiLnN0eWxlLndpZHRoPVwiMXB4XCIsYi5zdHlsZS5oZWlnaHQ9XCIwcHhcIjt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2MuYXBwZW5kQ2hpbGQoYSksYy5hcHBlbmRDaGlsZChiKSxjLnN0eWxlLmhlaWdodD1cIjBweFwiLGMuc3R5bGUub3ZlcmZsb3c9XCJoaWRkZW5cIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpLGIuc3R5bGUudmVydGljYWxBbGlnbj1cImJhc2VsaW5lXCI7dmFyIGU9ZChiKSxmPWQoYSksZz1lWzFdLWZbMV07Yi5zdHlsZS52ZXJ0aWNhbEFsaWduPVwiYm90dG9tXCIsZT1kKGIpLGY9ZChhKTt2YXIgaD1lWzFdLWZbMV0saT1oLWc7cmV0dXJuIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYyksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEFzY2VudFwiLGcpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHREZXNjZW50XCIsaSksdGhpc30sYi5leHBvcnRzPWUuUmVuZGVyZXJ9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNH1dLDI4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKSxlPWEoXCIuL2NvbnN0YW50c1wiKSxmPWEoXCIuLi9pbWFnZS9maWx0ZXJzXCIpO2EoXCIuL3A1LlJlbmRlcmVyXCIpO3ZhciBnPVwicmdiYSgwLDAsMCwwKVwiO2QuUmVuZGVyZXIyRD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGQuUmVuZGVyZXIuY2FsbCh0aGlzLGEsYixjKSx0aGlzLmRyYXdpbmdDb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJkcmF3aW5nQ29udGV4dFwiLHRoaXMuZHJhd2luZ0NvbnRleHQpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlJlbmRlcmVyLnByb3RvdHlwZSksZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0cz1mdW5jdGlvbigpe3RoaXMuX2NhY2hlZEZpbGxTdHlsZT10aGlzLl9jYWNoZWRTdHJva2VTdHlsZT12b2lkIDAsdGhpcy5fc2V0RmlsbChlLl9ERUZBVUxUX0ZJTEwpLHRoaXMuX3NldFN0cm9rZShlLl9ERUZBVUxUX1NUUk9LRSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lQ2FwPWUuUk9VTkQsdGhpcy5kcmF3aW5nQ29udGV4dC5mb250PVwibm9ybWFsIDEycHggc2Fucy1zZXJpZlwifSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihhLGIpe2QuUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsYSxiKSx0aGlzLmRyYXdpbmdDb250ZXh0LnNjYWxlKHRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksdGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe2lmKHRoaXMuZHJhd2luZ0NvbnRleHQuc2F2ZSgpLHRoaXMucmVzZXRNYXRyaXgoKSxhcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQuSW1hZ2UpdGhpcy5fcEluc3QuaW1hZ2UoYXJndW1lbnRzWzBdLDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTtlbHNle3ZhciBhPXRoaXMuX2dldEZpbGwoKSxiPXRoaXMuX3BJbnN0LmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyksYz1iLnRvU3RyaW5nKCk7dGhpcy5fc2V0RmlsbChjKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGxSZWN0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLl9zZXRGaWxsKGEpfXRoaXMuZHJhd2luZ0NvbnRleHQucmVzdG9yZSgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZHJhd2luZ0NvbnRleHQuc2F2ZSgpLHRoaXMucmVzZXRNYXRyaXgoKSx0aGlzLmRyYXdpbmdDb250ZXh0LmNsZWFyUmVjdCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5kcmF3aW5nQ29udGV4dC5yZXN0b3JlKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpO3RoaXMuX3NldEZpbGwoYS50b1N0cmluZygpKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zdHJva2U9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpO3RoaXMuX3NldFN0cm9rZShhLnRvU3RyaW5nKCkpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmltYWdlPWZ1bmN0aW9uKGEsYixjLGUsZixnLGgsaSxqKXt2YXIgazt0cnl7dGhpcy5fdGludCYmKGQuTWVkaWFFbGVtZW50JiZhIGluc3RhbmNlb2YgZC5NZWRpYUVsZW1lbnQmJmEubG9hZFBpeGVscygpLGEuY2FudmFzJiYoaz10aGlzLl9nZXRUaW50ZWRJbWFnZUNhbnZhcyhhKSkpLGt8fChrPWEuY2FudmFzfHxhLmVsdCk7dmFyIGw9MTthLndpZHRoJiZhLndpZHRoPjAmJihsPWsud2lkdGgvYS53aWR0aCksdGhpcy5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoayxsKmIsbCpjLGwqZSxsKmYsZyxoLGksail9Y2F0Y2goYSl7aWYoXCJOU19FUlJPUl9OT1RfQVZBSUxBQkxFXCIhPT1hLm5hbWUpdGhyb3cgYX10aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2dldFRpbnRlZEltYWdlQ2FudmFzPWZ1bmN0aW9uKGEpe2lmKCFhLmNhbnZhcylyZXR1cm4gYTt2YXIgYj1mLl90b1BpeGVscyhhLmNhbnZhcyksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Mud2lkdGg9YS5jYW52YXMud2lkdGgsYy5oZWlnaHQ9YS5jYW52YXMuaGVpZ2h0O2Zvcih2YXIgZD1jLmdldENvbnRleHQoXCIyZFwiKSxlPWQuY3JlYXRlSW1hZ2VEYXRhKGEuY2FudmFzLndpZHRoLGEuY2FudmFzLmhlaWdodCksZz1lLmRhdGEsaD0wO2g8Yi5sZW5ndGg7aCs9NCl7dmFyIGk9YltoXSxqPWJbaCsxXSxrPWJbaCsyXSxsPWJbaCszXTtnW2hdPWkqdGhpcy5fdGludFswXS8yNTUsZ1toKzFdPWoqdGhpcy5fdGludFsxXS8yNTUsZ1toKzJdPWsqdGhpcy5fdGludFsyXS8yNTUsZ1toKzNdPWwqdGhpcy5fdGludFszXS8yNTV9cmV0dXJuIGQucHV0SW1hZ2VEYXRhKGUsMCwwKSxjfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJsZW5kTW9kZT1mdW5jdGlvbihhKXt0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1hfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJsZW5kPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24sYj1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSxjPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwLGFyZ3VtZW50cy5sZW5ndGgtMSk7dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249Yix0aGlzLl9wSW5zdD90aGlzLl9wSW5zdC5jb3B5LmFwcGx5KHRoaXMuX3BJbnN0LGMpOnRoaXMuY29weS5hcHBseSh0aGlzLGMpLHRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWF9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhLGIsYyxlLGYsZyxoLGksajtpZig5PT09YXJndW1lbnRzLmxlbmd0aClhPWFyZ3VtZW50c1swXSxiPWFyZ3VtZW50c1sxXSxjPWFyZ3VtZW50c1syXSxlPWFyZ3VtZW50c1szXSxmPWFyZ3VtZW50c1s0XSxnPWFyZ3VtZW50c1s1XSxoPWFyZ3VtZW50c1s2XSxpPWFyZ3VtZW50c1s3XSxqPWFyZ3VtZW50c1s4XTtlbHNle2lmKDghPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlNpZ25hdHVyZSBub3Qgc3VwcG9ydGVkXCIpO2E9dGhpcy5fcEluc3QsYj1hcmd1bWVudHNbMF0sYz1hcmd1bWVudHNbMV0sZT1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10sZz1hcmd1bWVudHNbNF0saD1hcmd1bWVudHNbNV0saT1hcmd1bWVudHNbNl0saj1hcmd1bWVudHNbN119ZC5SZW5kZXJlcjJELl9jb3B5SGVscGVyKHRoaXMsYSxiLGMsZSxmLGcsaCxpLGopLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELl9jb3B5SGVscGVyPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpLGope2IubG9hZFBpeGVscygpO3ZhciBrPWIuY2FudmFzLndpZHRoL2Iud2lkdGg7YS5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoYi5jYW52YXMsaypjLGsqZCxrKmUsaypmLGcsaCxpLGopfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxlKXtpZih2b2lkIDA9PT1jJiZ2b2lkIDA9PT1lJiYodm9pZCAwPT09YSYmdm9pZCAwPT09Yj8oYT1iPTAsYz10aGlzLndpZHRoLGU9dGhpcy5oZWlnaHQpOmM9ZT0xKSxhK2M8MHx8YitlPDB8fGE+PXRoaXMud2lkdGh8fGI+PXRoaXMuaGVpZ2h0KXJldHVyblswLDAsMCwyNTVdO3ZhciBmPXRoaXMuX3BJbnN0fHx0aGlzLGc9Zi5fcGl4ZWxEZW5zaXR5O2E9TWF0aC5mbG9vcihhKSxiPU1hdGguZmxvb3IoYiksYz1NYXRoLmZsb29yKGMpLGU9TWF0aC5mbG9vcihlKTt2YXIgaD1hKmcsaT1iKmc7aWYoMSE9PWN8fDEhPT1lfHx0aGlzIGluc3RhbmNlb2YgZC5SZW5kZXJlckdMKXt2YXIgaj1NYXRoLm1pbihjLGYud2lkdGgpLGs9TWF0aC5taW4oZSxmLmhlaWdodCksbD1qKmcsbT1rKmcsbj1uZXcgZC5JbWFnZShqLGspO3JldHVybiBuLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIikuZHJhd0ltYWdlKHRoaXMuY2FudmFzLGgsaSxsLG0sMCwwLGosayksbn12YXIgbyxwO3JldHVybiBmLl9waXhlbHNEaXJ0eT8obz10aGlzLmRyYXdpbmdDb250ZXh0LmdldEltYWdlRGF0YShoLGksMSwxKS5kYXRhLHA9MCk6KG89Zi5waXhlbHMscD00KihoK2kqdGhpcy53aWR0aCpnKSksW29bcCswXSxvW3ArMV0sb1twKzJdLG9bcCszXV19LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUubG9hZFBpeGVscz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX3BJbnN0fHx0aGlzO2lmKGEuX3BpeGVsc0RpcnR5KXthLl9waXhlbHNEaXJ0eT0hMTt2YXIgYj1hLl9waXhlbERlbnNpdHksYz10aGlzLndpZHRoKmIsZD10aGlzLmhlaWdodCpiLGU9dGhpcy5kcmF3aW5nQ29udGV4dC5nZXRJbWFnZURhdGEoMCwwLGMsZCk7YS5fc2V0UHJvcGVydHkoXCJpbWFnZURhdGFcIixlKSxhLl9zZXRQcm9wZXJ0eShcInBpeGVsc1wiLGUuZGF0YSl9fSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7YT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihiKTt2YXIgZT10aGlzLl9wSW5zdHx8dGhpcztpZihjIGluc3RhbmNlb2YgZC5JbWFnZSl0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSx0aGlzLmRyYXdpbmdDb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5kcmF3aW5nQ29udGV4dC5zY2FsZShlLl9waXhlbERlbnNpdHksZS5fcGl4ZWxEZW5zaXR5KSx0aGlzLmRyYXdpbmdDb250ZXh0LmRyYXdJbWFnZShjLmNhbnZhcyxhLGIpLHRoaXMuZHJhd2luZ0NvbnRleHQucmVzdG9yZSgpLGUuX3BpeGVsc0RpcnR5PSEwO2Vsc2V7dmFyIGY9MCxnPTAsaD0wLGk9MCxqPTQqKGIqZS5fcGl4ZWxEZW5zaXR5Kih0aGlzLndpZHRoKmUuX3BpeGVsRGVuc2l0eSkrYSplLl9waXhlbERlbnNpdHkpO2lmKGUuaW1hZ2VEYXRhJiYhZS5fcGl4ZWxzRGlydHl8fGUubG9hZFBpeGVscy5jYWxsKGUpLFwibnVtYmVyXCI9PXR5cGVvZiBjKWo8ZS5waXhlbHMubGVuZ3RoJiYoZj1jLGc9YyxoPWMsaT0yNTUpO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIEFycmF5KXtpZihjLmxlbmd0aDw0KXRocm93IG5ldyBFcnJvcihcInBpeGVsIGFycmF5IG11c3QgYmUgb2YgdGhlIGZvcm0gW1IsIEcsIEIsIEFdXCIpO2o8ZS5waXhlbHMubGVuZ3RoJiYoZj1jWzBdLGc9Y1sxXSxoPWNbMl0saT1jWzNdKX1lbHNlIGMgaW5zdGFuY2VvZiBkLkNvbG9yJiZqPGUucGl4ZWxzLmxlbmd0aCYmKGY9Yy5sZXZlbHNbMF0sZz1jLmxldmVsc1sxXSxoPWMubGV2ZWxzWzJdLGk9Yy5sZXZlbHNbM10pO2Zvcih2YXIgaz0wO2s8ZS5fcGl4ZWxEZW5zaXR5O2srKylmb3IodmFyIGw9MDtsPGUuX3BpeGVsRGVuc2l0eTtsKyspaj00KigoYiplLl9waXhlbERlbnNpdHkrbCkqdGhpcy53aWR0aCplLl9waXhlbERlbnNpdHkrKGEqZS5fcGl4ZWxEZW5zaXR5K2spKSxlLnBpeGVsc1tqXT1mLGUucGl4ZWxzW2orMV09ZyxlLnBpeGVsc1tqKzJdPWgsZS5waXhlbHNbaiszXT1pfX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS51cGRhdGVQaXhlbHM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5fcEluc3R8fHRoaXMsZj1lLl9waXhlbERlbnNpdHk7dm9pZCAwPT09YSYmdm9pZCAwPT09YiYmdm9pZCAwPT09YyYmdm9pZCAwPT09ZCYmKGE9MCxiPTAsYz10aGlzLndpZHRoLGQ9dGhpcy5oZWlnaHQpLGMqPWYsZCo9Zix0aGlzLmRyYXdpbmdDb250ZXh0LnB1dEltYWdlRGF0YShlLmltYWdlRGF0YSxhLGIsMCwwLGMsZCksMD09PWEmJjA9PT1iJiZjPT09dGhpcy53aWR0aCYmZD09PXRoaXMuaGVpZ2h0fHwoZS5fcGl4ZWxzRGlydHk9ITApfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9hY3V0ZUFyY1RvQmV6aWVyPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi8yLGQ9TWF0aC5jb3MoYyksZT1NYXRoLnNpbihjKSxmPTEvTWF0aC50YW4oYyksZz1hK2MsaD1NYXRoLmNvcyhnKSxpPU1hdGguc2luKGcpLGo9KDQtZCkvMyxrPWUrKGQtaikqZjtyZXR1cm57YXg6TWF0aC5jb3MoYSksYXk6TWF0aC5zaW4oYSksYng6aipoK2sqaSxieTpqKmktaypoLGN4OmoqaC1rKmksY3k6aippK2sqaCxkeDpNYXRoLmNvcyhhK2IpLGR5Ok1hdGguc2luKGErYil9fSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmFyYz1mdW5jdGlvbihhLGIsYyxkLGYsZyxoKXt2YXIgaT10aGlzLmRyYXdpbmdDb250ZXh0LGo9Yy8yLGs9ZC8yLGw9MWUtNSxtPTAsbj1bXTtmb3IoYSs9aixiKz1rO2ctZj5sOyltPU1hdGgubWluKGctZixlLkhBTEZfUEkpLG4ucHVzaCh0aGlzLl9hY3V0ZUFyY1RvQmV6aWVyKGYsbSkpLGYrPW07cmV0dXJuIHRoaXMuX2RvRmlsbCYmKGkuYmVnaW5QYXRoKCksbi5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7MD09PWQmJmkubW92ZVRvKGErYy5heCpqLGIrYy5heSprKSxpLmJlemllckN1cnZlVG8oYStjLmJ4KmosYitjLmJ5KmssYStjLmN4KmosYitjLmN5KmssYStjLmR4KmosYitjLmR5KmspfSksaCE9PWUuUElFJiZudWxsIT1ofHxpLmxpbmVUbyhhLGIpLGkuY2xvc2VQYXRoKCksaS5maWxsKCkpLHRoaXMuX2RvU3Ryb2tlJiYoaS5iZWdpblBhdGgoKSxuLmZvckVhY2goZnVuY3Rpb24oYyxkKXswPT09ZCYmaS5tb3ZlVG8oYStjLmF4KmosYitjLmF5KmspLGkuYmV6aWVyQ3VydmVUbyhhK2MuYngqaixiK2MuYnkqayxhK2MuY3gqaixiK2MuY3kqayxhK2MuZHgqaixiK2MuZHkqayl9KSxoPT09ZS5QSUU/KGkubGluZVRvKGEsYiksaS5jbG9zZVBhdGgoKSk6aD09PWUuQ0hPUkQmJmkuY2xvc2VQYXRoKCksaS5zdHJva2UoKSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5lbGxpcHNlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZHJhd2luZ0NvbnRleHQsYz10aGlzLl9kb0ZpbGwsZD10aGlzLl9kb1N0cm9rZSxlPWFbMF0sZj1hWzFdLGg9YVsyXSxpPWFbM107aWYoYyYmIWQpe2lmKHRoaXMuX2dldEZpbGwoKT09PWcpcmV0dXJuIHRoaXN9ZWxzZSBpZighYyYmZCYmdGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO3ZhciBqPS41NTIyODQ3NDk4LGs9aC8yKmosbD1pLzIqaixtPWUraCxuPWYraSxvPWUraC8yLHA9ZitpLzI7Yi5iZWdpblBhdGgoKSxiLm1vdmVUbyhlLHApLGIuYmV6aWVyQ3VydmVUbyhlLHAtbCxvLWssZixvLGYpLGIuYmV6aWVyQ3VydmVUbyhvK2ssZixtLHAtbCxtLHApLGIuYmV6aWVyQ3VydmVUbyhtLHArbCxvK2ssbixvLG4pLGIuYmV6aWVyQ3VydmVUbyhvLWssbixlLHArbCxlLHApLGIuY2xvc2VQYXRoKCksYyYmYi5maWxsKCksZCYmYi5zdHJva2UoKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5saW5lPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZHJhd2luZ0NvbnRleHQ7cmV0dXJuIHRoaXMuX2RvU3Ryb2tlP3RoaXMuX2dldFN0cm9rZSgpPT09Zz90aGlzOihlLmxpbmVXaWR0aCUyPT0xJiZlLnRyYW5zbGF0ZSguNSwuNSksZS5iZWdpblBhdGgoKSxlLm1vdmVUbyhhLGIpLGUubGluZVRvKGMsZCksZS5zdHJva2UoKSxlLmxpbmVXaWR0aCUyPT0xJiZlLnRyYW5zbGF0ZSgtLjUsLS41KSx0aGlzKTp0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5kcmF3aW5nQ29udGV4dDtpZighdGhpcy5fZG9TdHJva2UpcmV0dXJuIHRoaXM7aWYodGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO3ZhciBkPXRoaXMuX2dldFN0cm9rZSgpLGY9dGhpcy5fZ2V0RmlsbCgpO2E9TWF0aC5yb3VuZChhKSxiPU1hdGgucm91bmQoYiksdGhpcy5fc2V0RmlsbChkKSxjLmxpbmVXaWR0aD4xPyhjLmJlZ2luUGF0aCgpLGMuYXJjKGEsYixjLmxpbmVXaWR0aC8yLDAsZS5UV09fUEksITEpLGMuZmlsbCgpKTpjLmZpbGxSZWN0KGEsYiwxLDEpLHRoaXMuX3NldEZpbGwoZil9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucXVhZD1mdW5jdGlvbihhLGIsYyxkLGUsZixoLGkpe3ZhciBqPXRoaXMuZHJhd2luZ0NvbnRleHQsaz10aGlzLl9kb0ZpbGwsbD10aGlzLl9kb1N0cm9rZTtpZihrJiYhbCl7aWYodGhpcy5fZ2V0RmlsbCgpPT09ZylyZXR1cm4gdGhpc31lbHNlIGlmKCFrJiZsJiZ0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7cmV0dXJuIGouYmVnaW5QYXRoKCksai5tb3ZlVG8oYSxiKSxqLmxpbmVUbyhjLGQpLGoubGluZVRvKGUsZiksai5saW5lVG8oaCxpKSxqLmNsb3NlUGF0aCgpLGsmJmouZmlsbCgpLGwmJmouc3Ryb2tlKCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5yZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGQ9YVsyXSxlPWFbM10sZj1hWzRdLGg9YVs1XSxpPWFbNl0saj1hWzddLGs9dGhpcy5kcmF3aW5nQ29udGV4dCxsPXRoaXMuX2RvRmlsbCxtPXRoaXMuX2RvU3Ryb2tlO2lmKGwmJiFtKXtpZih0aGlzLl9nZXRGaWxsKCk9PT1nKXJldHVybiB0aGlzfWVsc2UgaWYoIWwmJm0mJnRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpcztpZih0aGlzLl9kb1N0cm9rZSYmay5saW5lV2lkdGglMj09MSYmay50cmFuc2xhdGUoLjUsLjUpLGsuYmVnaW5QYXRoKCksdm9pZCAwPT09ZilrLnJlY3QoYixjLGQsZSk7ZWxzZXt2b2lkIDA9PT1oJiYoaD1mKSx2b2lkIDA9PT1pJiYoaT1oKSx2b2lkIDA9PT1qJiYoaj1pKTt2YXIgbj1kLzIsbz1lLzI7ZDwyKmYmJihmPW4pLGU8MipmJiYoZj1vKSxkPDIqaCYmKGg9biksZTwyKmgmJihoPW8pLGQ8MippJiYoaT1uKSxlPDIqaSYmKGk9byksZDwyKmomJihqPW4pLGU8MipqJiYoaj1vKSxrLmJlZ2luUGF0aCgpLGsubW92ZVRvKGIrZixjKSxrLmFyY1RvKGIrZCxjLGIrZCxjK2UsaCksay5hcmNUbyhiK2QsYytlLGIsYytlLGkpLGsuYXJjVG8oYixjK2UsYixjLGopLGsuYXJjVG8oYixjLGIrZCxjLGYpLGsuY2xvc2VQYXRoKCl9cmV0dXJuIHRoaXMuX2RvRmlsbCYmay5maWxsKCksdGhpcy5fZG9TdHJva2UmJmsuc3Ryb2tlKCksdGhpcy5fZG9TdHJva2UmJmsubGluZVdpZHRoJTI9PTEmJmsudHJhbnNsYXRlKC0uNSwtLjUpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudHJpYW5nbGU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kcmF3aW5nQ29udGV4dCxjPXRoaXMuX2RvRmlsbCxkPXRoaXMuX2RvU3Ryb2tlLGU9YVswXSxmPWFbMV0saD1hWzJdLGk9YVszXSxqPWFbNF0saz1hWzVdO2lmKGMmJiFkKXtpZih0aGlzLl9nZXRGaWxsKCk9PT1nKXJldHVybiB0aGlzfWVsc2UgaWYoIWMmJmQmJnRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpcztiLmJlZ2luUGF0aCgpLGIubW92ZVRvKGUsZiksYi5saW5lVG8oaCxpKSxiLmxpbmVUbyhqLGspLGIuY2xvc2VQYXRoKCksYyYmYi5maWxsKCksZCYmYi5zdHJva2UoKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5lbmRTaGFwZT1mdW5jdGlvbihhLGIsYyxkLGYsZyxoKXtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIHRoaXM7aWYoIXRoaXMuX2RvU3Ryb2tlJiYhdGhpcy5fZG9GaWxsKXJldHVybiB0aGlzO3ZhciBpLGo9YT09PWUuQ0xPU0U7aiYmIWcmJmIucHVzaChiWzBdKTt2YXIgayxsLG09Yi5sZW5ndGg7aWYoIWN8fGghPT1lLlBPTFlHT04mJm51bGwhPT1oKWlmKCFkfHxoIT09ZS5QT0xZR09OJiZudWxsIT09aClpZighZnx8aCE9PWUuUE9MWUdPTiYmbnVsbCE9PWgpaWYoaD09PWUuUE9JTlRTKWZvcihrPTA7azxtO2srKylpPWJba10sdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShpWzZdKSx0aGlzLl9wSW5zdC5wb2ludChpWzBdLGlbMV0pO2Vsc2UgaWYoaD09PWUuTElORVMpZm9yKGs9MDtrKzE8bTtrKz0yKWk9YltrXSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbaysxXVs2XSksdGhpcy5fcEluc3QubGluZShpWzBdLGlbMV0sYltrKzFdWzBdLGJbaysxXVsxXSk7ZWxzZSBpZihoPT09ZS5UUklBTkdMRVMpZm9yKGs9MDtrKzI8bTtrKz0zKWk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGlbMF0saVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzFdWzBdLGJbaysxXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzJdWzBdLGJbaysyXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9kb0ZpbGwmJih0aGlzLl9wSW5zdC5maWxsKGJbaysyXVs1XSksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsKCkpLHRoaXMuX2RvU3Ryb2tlJiYodGhpcy5fcEluc3Quc3Ryb2tlKGJbaysyXVs2XSksdGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2UoKSk7ZWxzZSBpZihoPT09ZS5UUklBTkdMRV9TVFJJUClmb3Ioaz0wO2srMTxtO2srKylpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiW2srMV1bMF0sYltrKzFdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzFdWzZdKSxcbnRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srMV1bNV0pLGsrMjxtJiYodGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzJdWzBdLGJbaysyXVsxXSksdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srMl1bNl0pLHRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srMl1bNV0pKSx0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpO2Vsc2UgaWYoaD09PWUuVFJJQU5HTEVfRkFOKXtpZihtPjIpe2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGs9MjtrPG07aysrKWk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiWzBdWzBdLGJbMF1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbay0xXVswXSxiW2stMV1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYlswXVswXSxiWzBdWzFdKSxrPG0tMSYmKHRoaXMuX2RvRmlsbCYmaVs1XSE9PWJbaysxXVs1XXx8dGhpcy5fZG9TdHJva2UmJmlbNl0hPT1iW2srMV1bNl0pJiYodGhpcy5fZG9GaWxsJiYodGhpcy5fcEluc3QuZmlsbChpWzVdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGwoKSx0aGlzLl9wSW5zdC5maWxsKGJbaysxXVs1XSkpLHRoaXMuX2RvU3Ryb2tlJiYodGhpcy5fcEluc3Quc3Ryb2tlKGlbNl0pLHRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlKCksdGhpcy5fcEluc3Quc3Ryb2tlKGJbaysxXVs2XSkpLHRoaXMuZHJhd2luZ0NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX19ZWxzZSBpZihoPT09ZS5RVUFEUylmb3Ioaz0wO2srMzxtO2srPTQpe2ZvcihpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pLGw9MTtsPDQ7bCsrKXRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaytsXVswXSxiW2srbF1bMV0pO3RoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSksdGhpcy5fZG9GaWxsJiZ0aGlzLl9wSW5zdC5maWxsKGJbayszXVs1XSksdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srM11bNl0pLHRoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZSBpZihoPT09ZS5RVUFEX1NUUklQKXtpZihtPjMpZm9yKGs9MDtrKzE8bTtrKz0yKWk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGsrMzxtPyh0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiW2srMl1bMF0sYltrKzJdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbayszXVswXSxiW2srM11bMV0pLHRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srM11bNV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzNdWzZdKSk6KHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGlbMF0saVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzFdWzBdLGJbaysxXVsxXSkpLHRoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZXtmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiWzBdWzBdLGJbMF1bMV0pLGs9MTtrPG07aysrKWk9YltrXSxpLmlzVmVydCYmKGkubW92ZVRvP3RoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGlbMF0saVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNle2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGs9MDtrPG07aysrKWJba10uaXNWZXJ0P2Jba10ubW92ZVRvP3RoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKFswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2tdWzBdLGJba11bMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQucXVhZHJhdGljQ3VydmVUbyhiW2tdWzBdLGJba11bMV0sYltrXVsyXSxiW2tdWzNdKTt0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2V7Zm9yKHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksaz0wO2s8bTtrKyspYltrXS5pc1ZlcnQ/YltrXS5tb3ZlVG8/dGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYltrXVswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2tdWzBdLGJba11bMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQuYmV6aWVyQ3VydmVUbyhiW2tdWzBdLGJba11bMV0sYltrXVsyXSxiW2tdWzNdLGJba11bNF0sYltrXVs1XSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNlIGlmKG0+Myl7dmFyIG49W10sbz0xLXRoaXMuX2N1cnZlVGlnaHRuZXNzO2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJbMV1bMF0sYlsxXVsxXSksaz0xO2srMjxtO2srKylpPWJba10sblswXT1baVswXSxpWzFdXSxuWzFdPVtpWzBdKyhvKmJbaysxXVswXS1vKmJbay0xXVswXSkvNixpWzFdKyhvKmJbaysxXVsxXS1vKmJbay0xXVsxXSkvNl0sblsyXT1bYltrKzFdWzBdKyhvKmJba11bMF0tbypiW2srMl1bMF0pLzYsYltrKzFdWzFdKyhvKmJba11bMV0tbypiW2srMl1bMV0pLzZdLG5bM109W2JbaysxXVswXSxiW2srMV1bMV1dLHRoaXMuZHJhd2luZ0NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzFdWzBdLG5bMV1bMV0sblsyXVswXSxuWzJdWzFdLG5bM11bMF0sblszXVsxXSk7aiYmdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzFdWzBdLGJbaysxXVsxXSksdGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1yZXR1cm4gYz0hMSxkPSExLGY9ITEsZz0hMSxqJiZiLnBvcCgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLm5vU21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuXCJpbWFnZVNtb290aGluZ0VuYWJsZWRcImluIHRoaXMuZHJhd2luZ0NvbnRleHQmJih0aGlzLmRyYXdpbmdDb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zbW9vdGg9ZnVuY3Rpb24oKXtyZXR1cm5cImltYWdlU21vb3RoaW5nRW5hYmxlZFwiaW4gdGhpcy5kcmF3aW5nQ29udGV4dCYmKHRoaXMuZHJhd2luZ0NvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSEwKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnN0cm9rZUNhcD1mdW5jdGlvbihhKXtyZXR1cm4gYSE9PWUuUk9VTkQmJmEhPT1lLlNRVUFSRSYmYSE9PWUuUFJPSkVDVHx8KHRoaXMuZHJhd2luZ0NvbnRleHQubGluZUNhcD1hKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnN0cm9rZUpvaW49ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1lLlJPVU5EJiZhIT09ZS5CRVZFTCYmYSE9PWUuTUlURVJ8fCh0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVKb2luPWEpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc3Ryb2tlV2VpZ2h0PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVXaWR0aD12b2lkIDA9PT1hfHwwPT09YT8xZS00OmEsdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fZ2V0RmlsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRGaWxsU3R5bGV8fCh0aGlzLl9jYWNoZWRGaWxsU3R5bGU9dGhpcy5kcmF3aW5nQ29udGV4dC5maWxsU3R5bGUpLHRoaXMuX2NhY2hlZEZpbGxTdHlsZX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fc2V0RmlsbD1mdW5jdGlvbihhKXthIT09dGhpcy5fY2FjaGVkRmlsbFN0eWxlJiYodGhpcy5kcmF3aW5nQ29udGV4dC5maWxsU3R5bGU9YSx0aGlzLl9jYWNoZWRGaWxsU3R5bGU9YSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2dldFN0cm9rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRTdHJva2VTdHlsZXx8KHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlU3R5bGUpLHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9zZXRTdHJva2U9ZnVuY3Rpb24oYSl7YSE9PXRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlJiYodGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2VTdHlsZT1hLHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlPWEpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJlemllcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3JldHVybiB0aGlzLl9wSW5zdC5iZWdpblNoYXBlKCksdGhpcy5fcEluc3QudmVydGV4KGEsYiksdGhpcy5fcEluc3QuYmV6aWVyVmVydGV4KGMsZCxlLGYsZyxoKSx0aGlzLl9wSW5zdC5lbmRTaGFwZSgpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY3VydmU9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXtyZXR1cm4gdGhpcy5fcEluc3QuYmVnaW5TaGFwZSgpLHRoaXMuX3BJbnN0LmN1cnZlVmVydGV4KGEsYiksdGhpcy5fcEluc3QuY3VydmVWZXJ0ZXgoYyxkKSx0aGlzLl9wSW5zdC5jdXJ2ZVZlcnRleChlLGYpLHRoaXMuX3BJbnN0LmN1cnZlVmVydGV4KGcsaCksdGhpcy5fcEluc3QuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9kb0ZpbGxTdHJva2VDbG9zZT1mdW5jdGlvbigpe3RoaXMuX2RvRmlsbCYmdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsKCksdGhpcy5fZG9TdHJva2UmJnRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlKCksdGhpcy5kcmF3aW5nQ29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNmb3JtKGEsYixjLGQsZSxmKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5yZXNldE1hdHJpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5kcmF3aW5nQ29udGV4dC5zY2FsZSh0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LHRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHkpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEpe3RoaXMuZHJhd2luZ0NvbnRleHQucm90YXRlKGEpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQuc2NhbGUoYSxiKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNoZWFyWD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC50cmFuc2Zvcm0oMSwwLE1hdGgudGFuKGEpLDEsMCwwKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNoZWFyWT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC50cmFuc2Zvcm0oMSxNYXRoLnRhbihhKSwwLDEsMCwwKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihhLGIpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3ImJihiPWEueSxhPWEueCksdGhpcy5kcmF3aW5nQ29udGV4dC50cmFuc2xhdGUoYSxiKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oYSxiLGMsZixnKXt2YXIgaDt2b2lkIDAhPT1mJiZ2b2lkIDAhPT1nJiZ0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT09PWUuQkFTRUxJTkUmJihoPSEwLHRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPWUuVE9QKTt2YXIgaT1kLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaCYmKHRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPWUuQkFTRUxJTkUpLGl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX3JlbmRlclRleHQ9ZnVuY3Rpb24oYSxiLGMsZCxmKXtpZighKGQ+PWYpKXJldHVybiBhLnB1c2goKSx0aGlzLl9pc09wZW5UeXBlKCk/dGhpcy5fdGV4dEZvbnQuX3JlbmRlclBhdGgoYixjLGQse3JlbmRlcmVyOnRoaXN9KToodGhpcy5fZG9TdHJva2UmJnRoaXMuX3N0cm9rZVNldCYmdGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2VUZXh0KGIsYyxkKSx0aGlzLl9kb0ZpbGwmJih0aGlzLl9maWxsU2V0fHx0aGlzLl9zZXRGaWxsKGUuX0RFRkFVTFRfVEVYVF9GSUxMKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGxUZXh0KGIsYyxkKSkpLGEucG9wKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLGF9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudGV4dFdpZHRoPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9pc09wZW5UeXBlKCk/dGhpcy5fdGV4dEZvbnQuX3RleHRXaWR0aChhLHRoaXMuX3RleHRTaXplKTp0aGlzLmRyYXdpbmdDb250ZXh0Lm1lYXN1cmVUZXh0KGEpLndpZHRofSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9hcHBseVRleHRQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLl9wSW5zdDtyZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEFzY2VudFwiLG51bGwpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHREZXNjZW50XCIsbnVsbCksYT10aGlzLl90ZXh0Rm9udCx0aGlzLl9pc09wZW5UeXBlKCkmJihhPXRoaXMuX3RleHRGb250LmZvbnQuZmFtaWx5TmFtZSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0U3R5bGVcIix0aGlzLl90ZXh0Rm9udC5mb250LnN0eWxlTmFtZSkpLHRoaXMuZHJhd2luZ0NvbnRleHQuZm9udD0odGhpcy5fdGV4dFN0eWxlfHxcIm5vcm1hbFwiKStcIiBcIisodGhpcy5fdGV4dFNpemV8fDEyKStcInB4IFwiKyhhfHxcInNhbnMtc2VyaWZcIiksdGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QWxpZ249dGhpcy5fdGV4dEFsaWduLHRoaXMuX3RleHRCYXNlbGluZT09PWUuQ0VOVEVSP3RoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPWUuX0NUWF9NSURETEU6dGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QmFzZWxpbmU9dGhpcy5fdGV4dEJhc2VsaW5lLGJ9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSxkLlJlbmRlcmVyLnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnBvcD1mdW5jdGlvbihhKXt0aGlzLmRyYXdpbmdDb250ZXh0LnJlc3RvcmUoKSx0aGlzLl9jYWNoZWRGaWxsU3R5bGU9dGhpcy5kcmF3aW5nQ29udGV4dC5maWxsU3R5bGUsdGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGU9dGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2VTdHlsZSxkLlJlbmRlcmVyLnByb3RvdHlwZS5wb3AuY2FsbCh0aGlzLGEpfSxiLmV4cG9ydHM9ZC5SZW5kZXJlcjJEfSx7XCIuLi9pbWFnZS9maWx0ZXJzXCI6NDIsXCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjQsXCIuL3A1LlJlbmRlcmVyXCI6Mjd9XSwyOTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIiksZT1hKFwiLi9jb25zdGFudHNcIik7YShcIi4vcDUuR3JhcGhpY3NcIiksYShcIi4vcDUuUmVuZGVyZXIyRFwiKSxhKFwiLi4vd2ViZ2wvcDUuUmVuZGVyZXJHTFwiKTt2YXIgZj1cImRlZmF1bHRDYW52YXMwXCIsZz1cInA1Q2FudmFzXCI7ZC5wcm90b3R5cGUuY3JlYXRlQ2FudmFzPWZ1bmN0aW9uKGEsYixjKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVDYW52YXNcIixhcmd1bWVudHMpO3ZhciBoLGk9Y3x8ZS5QMkQ7aWYoaT09PWUuV0VCR0wpe2lmKGg9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZikpe2gucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKTt2YXIgaj10aGlzLl9yZW5kZXJlcjt0aGlzLl9lbGVtZW50cz10aGlzLl9lbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1qfSl9aD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGguaWQ9ZixoLmNsYXNzTGlzdC5hZGQoZyl9ZWxzZSBpZih0aGlzLl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkKWg9dGhpcy5jYW52YXM7ZWxzZXtoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7Zm9yKHZhciBrPTA7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkZWZhdWx0Q2FudmFzXCIrayk7KWsrKztmPVwiZGVmYXVsdENhbnZhc1wiK2ssaC5pZD1mLGguY2xhc3NMaXN0LmFkZChnKX1yZXR1cm4gdGhpcy5fc2V0dXBEb25lfHwoaC5kYXRhc2V0LmhpZGRlbj0hMCxoLnN0eWxlLnZpc2liaWxpdHk9XCJoaWRkZW5cIiksdGhpcy5fdXNlck5vZGU/dGhpcy5fdXNlck5vZGUuYXBwZW5kQ2hpbGQoaCk6ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSxpPT09ZS5XRUJHTD8odGhpcy5fc2V0UHJvcGVydHkoXCJfcmVuZGVyZXJcIixuZXcgZC5SZW5kZXJlckdMKGgsdGhpcywhMCkpLHRoaXMuX2VsZW1lbnRzLnB1c2godGhpcy5fcmVuZGVyZXIpKTp0aGlzLl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkfHwodGhpcy5fc2V0UHJvcGVydHkoXCJfcmVuZGVyZXJcIixuZXcgZC5SZW5kZXJlcjJEKGgsdGhpcywhMCkpLHRoaXMuX2RlZmF1bHRHcmFwaGljc0NyZWF0ZWQ9ITAsdGhpcy5fZWxlbWVudHMucHVzaCh0aGlzLl9yZW5kZXJlcikpLHRoaXMuX3JlbmRlcmVyLnJlc2l6ZShhLGIpLHRoaXMuX3JlbmRlcmVyLl9hcHBseURlZmF1bHRzKCksdGhpcy5fcmVuZGVyZXJ9LGQucHJvdG90eXBlLnJlc2l6ZUNhbnZhcz1mdW5jdGlvbihhLGIsYyl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicmVzaXplQ2FudmFzXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlcil7dmFyIGU9e307Zm9yKHZhciBmIGluIHRoaXMuZHJhd2luZ0NvbnRleHQpe3ZhciBnPXRoaXMuZHJhd2luZ0NvbnRleHRbZl07XCJvYmplY3RcIiE9dHlwZW9mIGcmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGcmJihlW2ZdPWcpfXRoaXMuX3JlbmRlcmVyLnJlc2l6ZShhLGIpLHRoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iO2Zvcih2YXIgaCBpbiBlKXRyeXt0aGlzLmRyYXdpbmdDb250ZXh0W2hdPWVbaF19Y2F0Y2goYSl7fWN8fHRoaXMucmVkcmF3KCl9fSxkLnByb3RvdHlwZS5ub0NhbnZhcz1mdW5jdGlvbigpe3RoaXMuY2FudmFzJiZ0aGlzLmNhbnZhcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY2FudmFzKX0sZC5wcm90b3R5cGUuY3JlYXRlR3JhcGhpY3M9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVHcmFwaGljc1wiLGFyZ3VtZW50cyksbmV3IGQuR3JhcGhpY3MoYSxiLGMsdGhpcyl9LGQucHJvdG90eXBlLmJsZW5kTW9kZT1mdW5jdGlvbihhKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJibGVuZE1vZGVcIixhcmd1bWVudHMpLGEhPT1lLkJMRU5EJiZhIT09ZS5EQVJLRVNUJiZhIT09ZS5MSUdIVEVTVCYmYSE9PWUuRElGRkVSRU5DRSYmYSE9PWUuTVVMVElQTFkmJmEhPT1lLkVYQ0xVU0lPTiYmYSE9PWUuU0NSRUVOJiZhIT09ZS5SRVBMQUNFJiZhIT09ZS5PVkVSTEFZJiZhIT09ZS5IQVJEX0xJR0hUJiZhIT09ZS5TT0ZUX0xJR0hUJiZhIT09ZS5ET0RHRSYmYSE9PWUuQlVSTiYmYSE9PWUuQUREJiZhIT09ZS5OT1JNQUwpdGhyb3cgbmV3IEVycm9yKFwiTW9kZSBcIithK1wiIG5vdCByZWNvZ25pemVkLlwiKTt0aGlzLl9yZW5kZXJlci5ibGVuZE1vZGUoYSl9LGIuZXhwb3J0cz1kfSx7XCIuLi93ZWJnbC9wNS5SZW5kZXJlckdMXCI6NzQsXCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjQsXCIuL3A1LkdyYXBoaWNzXCI6MjYsXCIuL3A1LlJlbmRlcmVyMkRcIjoyOH1dLDMwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL21haW5cIiksZT1hKFwiLi4vY29uc3RhbnRzXCIpLGY9YShcIi4uL2hlbHBlcnNcIik7YShcIi4uL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUuYXJjPWZ1bmN0aW9uKGEsYixjLGcsaCxpLGosayl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYXJjXCIsYXJndW1lbnRzKSwhdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiYhdGhpcy5fcmVuZGVyZXIuX2RvRmlsbClyZXR1cm4gdGhpcztmb3IoaD10aGlzLl90b1JhZGlhbnMoaCksaT10aGlzLl90b1JhZGlhbnMoaSk7aDwwOyloKz1lLlRXT19QSTtmb3IoO2k8MDspaSs9ZS5UV09fUEk7dm9pZCAwIT09aCYmdm9pZCAwIT09aSYmKGkudG9GaXhlZCgxMCk9PT1oLnRvRml4ZWQoMTApfHxNYXRoLmFicyhpLWgpPT09ZS5UV09fUEk/KGglPWUuVFdPX1BJLGklPWUuVFdPX1BJLGgrPWUuVFdPX1BJKTpNYXRoLmFicyhpLWgpPmUuVFdPX1BJJiYoaCU9ZS5UV09fUEksaSU9ZS5UV09fUEksaSs9ZS5UV09fUEkpKSxoPD1lLkhBTEZfUEk/aD1NYXRoLmF0YW4oYy9nKk1hdGgudGFuKGgpKTpoPmUuSEFMRl9QSSYmaDw9MyplLkhBTEZfUEkmJihoPU1hdGguYXRhbihjL2cqTWF0aC50YW4oaCkpK2UuUEkpLGk8PWUuSEFMRl9QST9pPU1hdGguYXRhbihjL2cqTWF0aC50YW4oaSkpOmk+ZS5IQUxGX1BJJiZpPD0zKmUuSEFMRl9QSSYmKGk9TWF0aC5hdGFuKGMvZypNYXRoLnRhbihpKSkrZS5QSSksaD5pJiYoaSs9ZS5UV09fUEkpLGM9TWF0aC5hYnMoYyksZz1NYXRoLmFicyhnKTt2YXIgbD1mLm1vZGVBZGp1c3QoYSxiLGMsZyx0aGlzLl9yZW5kZXJlci5fZWxsaXBzZU1vZGUpO3JldHVybiB0aGlzLl9yZW5kZXJlci5hcmMobC54LGwueSxsLncsbC5oLGgsaSxqLGspLHRoaXN9LGQucHJvdG90eXBlLmVsbGlwc2U9ZnVuY3Rpb24oYSxiLGMsZSxnKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJlbGxpcHNlXCIsYXJndW1lbnRzKSwhdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiYhdGhpcy5fcmVuZGVyZXIuX2RvRmlsbClyZXR1cm4gdGhpcztjPDAmJihjPU1hdGguYWJzKGMpKSx2b2lkIDA9PT1lP2U9YzplPDAmJihlPU1hdGguYWJzKGUpKTt2YXIgaD1mLm1vZGVBZGp1c3QoYSxiLGMsZSx0aGlzLl9yZW5kZXJlci5fZWxsaXBzZU1vZGUpO3JldHVybiB0aGlzLl9yZW5kZXJlci5lbGxpcHNlKFtoLngsaC55LGgudyxoLmgsZ10pLHRoaXN9LGQucHJvdG90eXBlLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibGluZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiZ0aGlzLl9yZW5kZXJlci5saW5lLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicG9pbnRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmdGhpcy5fcmVuZGVyZXIucG9pbnQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5xdWFkPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInF1YWRcIixhcmd1bWVudHMpLCh0aGlzLl9yZW5kZXJlci5fZG9TdHJva2V8fHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpJiZ0aGlzLl9yZW5kZXJlci5xdWFkLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucmVjdD1mdW5jdGlvbigpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlY3RcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZXx8dGhpcy5fcmVuZGVyZXIuX2RvRmlsbCl7Zm9yKHZhciBhPWYubW9kZUFkanVzdChhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10sdGhpcy5fcmVuZGVyZXIuX3JlY3RNb2RlKSxiPVthLngsYS55LGEudyxhLmhdLGM9NDtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbY109YXJndW1lbnRzW2NdO3RoaXMuX3JlbmRlcmVyLnJlY3QoYil9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLnRyaWFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRyaWFuZ2xlXCIsYXJndW1lbnRzKSwodGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlfHx0aGlzLl9yZW5kZXJlci5fZG9GaWxsKSYmdGhpcy5fcmVuZGVyZXIudHJpYW5nbGUoYXJndW1lbnRzKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29uc3RhbnRzXCI6MTgsXCIuLi9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9oZWxwZXJzXCI6MjEsXCIuLi9tYWluXCI6MjR9XSwzMTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9tYWluXCIpLGU9YShcIi4uL2NvbnN0YW50c1wiKTtkLnByb3RvdHlwZS5lbGxpcHNlTW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZWxsaXBzZU1vZGVcIixhcmd1bWVudHMpLGEhPT1lLkNPUk5FUiYmYSE9PWUuQ09STkVSUyYmYSE9PWUuUkFESVVTJiZhIT09ZS5DRU5URVJ8fCh0aGlzLl9yZW5kZXJlci5fZWxsaXBzZU1vZGU9YSksdGhpc30sZC5wcm90b3R5cGUubm9TbW9vdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIubm9TbW9vdGgoKSx0aGlzfSxkLnByb3RvdHlwZS5yZWN0TW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicmVjdE1vZGVcIixhcmd1bWVudHMpLGEhPT1lLkNPUk5FUiYmYSE9PWUuQ09STkVSUyYmYSE9PWUuUkFESVVTJiZhIT09ZS5DRU5URVJ8fCh0aGlzLl9yZW5kZXJlci5fcmVjdE1vZGU9YSksdGhpc30sZC5wcm90b3R5cGUuc21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLnNtb290aCgpLHRoaXN9LGQucHJvdG90eXBlLnN0cm9rZUNhcD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3Ryb2tlQ2FwXCIsYXJndW1lbnRzKSxhIT09ZS5ST1VORCYmYSE9PWUuU1FVQVJFJiZhIT09ZS5QUk9KRUNUfHx0aGlzLl9yZW5kZXJlci5zdHJva2VDYXAoYSksdGhpc30sZC5wcm90b3R5cGUuc3Ryb2tlSm9pbj1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3Ryb2tlSm9pblwiLGFyZ3VtZW50cyksYSE9PWUuUk9VTkQmJmEhPT1lLkJFVkVMJiZhIT09ZS5NSVRFUnx8dGhpcy5fcmVuZGVyZXIuc3Ryb2tlSm9pbihhKSx0aGlzfSxkLnByb3RvdHlwZS5zdHJva2VXZWlnaHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInN0cm9rZVdlaWdodFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuc3Ryb2tlV2VpZ2h0KGEpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb25zdGFudHNcIjoxOCxcIi4uL21haW5cIjoyNH1dLDMyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL21haW5cIik7YShcIi4uL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUuYmV6aWVyPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllclwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlfHx0aGlzLl9yZW5kZXJlci5fZG9GaWxsPyh0aGlzLl9yZW5kZXJlci5iZXppZXIuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzKTp0aGlzfSxkLnByb3RvdHlwZS5iZXppZXJEZXRhaWw9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllckRldGFpbFwiLGFyZ3VtZW50cyksdGhpcy5fYmV6aWVyRGV0YWlsPWEsdGhpc30sZC5wcm90b3R5cGUuYmV6aWVyUG9pbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJQb2ludFwiLGFyZ3VtZW50cyk7dmFyIGc9MS1mO3JldHVybiBNYXRoLnBvdyhnLDMpKmErMypNYXRoLnBvdyhnLDIpKmYqYiszKmcqTWF0aC5wb3coZiwyKSpjK01hdGgucG93KGYsMykqZX0sZC5wcm90b3R5cGUuYmV6aWVyVGFuZ2VudD1mdW5jdGlvbihhLGIsYyxlLGYpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllclRhbmdlbnRcIixhcmd1bWVudHMpO3ZhciBnPTEtZjtyZXR1cm4gMyplKk1hdGgucG93KGYsMiktMypjKk1hdGgucG93KGYsMikrNipjKmcqZi02KmIqZypmKzMqYipNYXRoLnBvdyhnLDIpLTMqYSpNYXRoLnBvdyhnLDIpfSxkLnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiZ0aGlzLl9yZW5kZXJlci5jdXJ2ZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLmN1cnZlRGV0YWlsPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZURldGFpbFwiLGFyZ3VtZW50cyksdGhpcy5fY3VydmVEZXRhaWw9YTwzPzM6YSx0aGlzfSxkLnByb3RvdHlwZS5jdXJ2ZVRpZ2h0bmVzcz1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVUaWdodG5lc3NcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9jdXJ2ZVRpZ2h0bmVzcz1hLHRoaXN9LGQucHJvdG90eXBlLmN1cnZlUG9pbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVBvaW50XCIsYXJndW1lbnRzKTt2YXIgZz1mKmYqZixoPWYqZjtyZXR1cm4gYSooLS41KmcraC0uNSpmKStiKigxLjUqZy0yLjUqaCsxKStjKigtMS41KmcrMipoKy41KmYpK2UqKC41KmctLjUqaCl9LGQucHJvdG90eXBlLmN1cnZlVGFuZ2VudD1mdW5jdGlvbihhLGIsYyxlLGYpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlVGFuZ2VudFwiLGFyZ3VtZW50cyk7dmFyIGc9ZipmO3JldHVybiBhKigtMypnLzIrMipmLS41KStiKig5KmcvMi01KmYpK2MqKC05KmcvMis0KmYrLjUpK2UqKDMqZy8yLWYpfSxiLmV4cG9ydHM9ZH0se1wiLi4vZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vbWFpblwiOjI0fV0sMzM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vbWFpblwiKSxlPWEoXCIuLi9jb25zdGFudHNcIiksZj1udWxsLGc9W10saD1bXSxpPSExLGo9ITEsaz0hMSxsPSExLG09ITA7ZC5wcm90b3R5cGUuYmVnaW5Db250b3VyPWZ1bmN0aW9uKCl7cmV0dXJuIGg9W10sbD0hMCx0aGlzfSxkLnByb3RvdHlwZS5iZWdpblNoYXBlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZWdpblNoYXBlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRD90aGlzLl9yZW5kZXJlci5iZWdpblNoYXBlLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk6KGY9YT09PWUuUE9JTlRTfHxhPT09ZS5MSU5FU3x8YT09PWUuVFJJQU5HTEVTfHxhPT09ZS5UUklBTkdMRV9GQU58fGE9PT1lLlRSSUFOR0xFX1NUUklQfHxhPT09ZS5RVUFEU3x8YT09PWUuUVVBRF9TVFJJUD9hOm51bGwsZz1bXSxoPVtdKSx0aGlzfSxkLnByb3RvdHlwZS5iZXppZXJWZXJ0ZXg9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJWZXJ0ZXhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEKXRoaXMuX3JlbmRlcmVyLmJlemllclZlcnRleC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpO2Vsc2V7aWYoMD09PWcubGVuZ3RoKXRocm93XCJ2ZXJ0ZXgoKSBtdXN0IGJlIHVzZWQgb25jZSBiZWZvcmUgY2FsbGluZyBiZXppZXJWZXJ0ZXgoKVwiO2k9ITA7Zm9yKHZhciBhPVtdLGI9MDtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKWFbYl09YXJndW1lbnRzW2JdO2EuaXNWZXJ0PSExLGw/aC5wdXNoKGEpOmcucHVzaChhKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUuY3VydmVWZXJ0ZXg9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVWZXJ0ZXhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEP3RoaXMuX3JlbmRlcmVyLmN1cnZlVmVydGV4LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk6KGo9ITAsdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSkpLHRoaXN9LGQucHJvdG90eXBlLmVuZENvbnRvdXI9ZnVuY3Rpb24oKXt2YXIgYT1oWzBdLnNsaWNlKCk7YS5pc1ZlcnQ9aFswXS5pc1ZlcnQsYS5tb3ZlVG89ITEsaC5wdXNoKGEpLG0mJihnLnB1c2goZ1swXSksbT0hMSk7Zm9yKHZhciBiPTA7YjxoLmxlbmd0aDtiKyspZy5wdXNoKGhbYl0pO3JldHVybiB0aGlzfSxkLnByb3RvdHlwZS5lbmRTaGFwZT1mdW5jdGlvbihhKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJlbmRTaGFwZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhpcy5fcmVuZGVyZXIuZW5kU2hhcGUoYSxqLGksayxsLGYpO2Vsc2V7aWYoMD09PWcubGVuZ3RoKXJldHVybiB0aGlzO2lmKCF0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJiF0aGlzLl9yZW5kZXJlci5fZG9GaWxsKXJldHVybiB0aGlzO3ZhciBiPWE9PT1lLkNMT1NFO2ImJiFsJiZnLnB1c2goZ1swXSksdGhpcy5fcmVuZGVyZXIuZW5kU2hhcGUoYSxnLGosaSxrLGwsZiksaj0hMSxpPSExLGs9ITEsbD0hMSxtPSEwLGImJmcucG9wKCl9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLnF1YWRyYXRpY1ZlcnRleD1mdW5jdGlvbigpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInF1YWRyYXRpY1ZlcnRleFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhpcy5fcmVuZGVyZXIucXVhZHJhdGljVmVydGV4LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk7ZWxzZXtpZih0aGlzLl9jb250b3VySW5pdGVkKXt2YXIgYT17fTtyZXR1cm4gYS54PWFyZ3VtZW50c1swXSxhLnk9YXJndW1lbnRzWzFdLGEueDM9YXJndW1lbnRzWzJdLGEueTM9YXJndW1lbnRzWzNdLGEudHlwZT1lLlFVQURSQVRJQyx0aGlzLl9jb250b3VyVmVydGljZXMucHVzaChhKSx0aGlzfWlmKCEoZy5sZW5ndGg+MCkpdGhyb3cgbmV3IEVycm9yKFwidmVydGV4KCkgbXVzdCBiZSB1c2VkIG9uY2UgYmVmb3JlIGNhbGxpbmcgcXVhZHJhdGljVmVydGV4KClcIik7az0hMDtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYltjXT1hcmd1bWVudHNbY107Yi5pc1ZlcnQ9ITEsbD9oLnB1c2goYik6Zy5wdXNoKGIpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS52ZXJ0ZXg9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZih0aGlzLl9yZW5kZXJlci5pc1AzRCl0aGlzLl9yZW5kZXJlci52ZXJ0ZXguYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTtlbHNle3ZhciBmPVtdO2YuaXNWZXJ0PSEwLGZbMF09YSxmWzFdPWIsZlsyXT0wLGZbM109MCxmWzRdPTAsZls1XT10aGlzLl9yZW5kZXJlci5fZ2V0RmlsbCgpLGZbNl09dGhpcy5fcmVuZGVyZXIuX2dldFN0cm9rZSgpLGMmJihmLm1vdmVUbz1jKSxsPygwPT09aC5sZW5ndGgmJihmLm1vdmVUbz0hMCksaC5wdXNoKGYpKTpnLnB1c2goZil9cmV0dXJuIHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb25zdGFudHNcIjoxOCxcIi4uL21haW5cIjoyNH1dLDM0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cub1JlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxmdW5jdGlvbihhLGIpe3dpbmRvdy5zZXRUaW1lb3V0KGEsMWUzLzYwKX19KCksZnVuY3Rpb24oKXtcInVuZGVmaW5lZFwiPT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXl8fFVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZS5zbGljZXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KFVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZSxcInNsaWNlXCIse3ZhbHVlOkFycmF5LnByb3RvdHlwZS5zbGljZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMX0pfSgpLGZ1bmN0aW9uKCl7aWYoIU9iamVjdC5hc3NpZ24pe3ZhciBhPU9iamVjdC5rZXlzLGI9T2JqZWN0LmRlZmluZVByb3BlcnR5LGM9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMCE9PWEmJm51bGwhPT1hfSxkPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbCgpLGU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxmPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZS5jYWxsKGEsYil9fSxnPWZ1bmN0aW9uKGIsZSl7aWYoIWMoYikpdGhyb3cgbmV3IFR5cGVFcnJvcihcInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdFwiKTt2YXIgZyxoLGksaixrPU9iamVjdChiKTtmb3IoZz0xO2c8YXJndW1lbnRzLmxlbmd0aDsrK2cpZm9yKGg9T2JqZWN0KGFyZ3VtZW50c1tnXSksaj1hKGgpLGQmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJmoucHVzaC5hcHBseShqLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaCkuZmlsdGVyKGYoaCkpKSxpPTA7aTxqLmxlbmd0aDsrK2kpa1tqW2ldXT1oW2pbaV1dO3JldHVybiBrfTtiKE9iamVjdCxcImFzc2lnblwiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwfSl9fSgpfSx7fV0sMzU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2QucHJvdG90eXBlLm5vTG9vcD1mdW5jdGlvbigpe3RoaXMuX2xvb3A9ITF9LGQucHJvdG90eXBlLmxvb3A9ZnVuY3Rpb24oKXt0aGlzLl9sb29wPSEwLHRoaXMuX2RyYXcoKX0sZC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3RoaXMuX3N0eWxlcy5wdXNoKHtwcm9wczp7X2NvbG9yTW9kZTp0aGlzLl9jb2xvck1vZGV9LHJlbmRlcmVyOnRoaXMuX3JlbmRlcmVyLnB1c2goKX0pfSxkLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9zdHlsZXMucG9wKCk7YT8odGhpcy5fcmVuZGVyZXIucG9wKGEucmVuZGVyZXIpLE9iamVjdC5hc3NpZ24odGhpcyxhLnByb3BzKSk6Y29uc29sZS53YXJuKFwicG9wKCkgd2FzIGNhbGxlZCB3aXRob3V0IG1hdGNoaW5nIHB1c2goKVwiKX0sZC5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKGEpe3ZhciBiPXBhcnNlSW50KGEpOyhpc05hTihiKXx8YjwxKSYmKGI9MSk7dmFyIGM9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXMsZD1jLnNldHVwLGU9Yy5kcmF3O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpe3ZvaWQgMD09PWQmJmMuc2NhbGUoYy5fcGl4ZWxEZW5zaXR5LGMuX3BpeGVsRGVuc2l0eSk7Zm9yKHZhciBmPWZ1bmN0aW9uKGEpe2EuY2FsbChjKX0sZz0wO2c8YjtnKyspYy5yZXNldE1hdHJpeCgpLGMuX3JlbmRlcmVyLmlzUDNEJiZjLl9yZW5kZXJlci5fdXBkYXRlKCksYy5fc2V0UHJvcGVydHkoXCJmcmFtZUNvdW50XCIsYy5mcmFtZUNvdW50KzEpLGMuX3JlZ2lzdGVyZWRNZXRob2RzLnByZS5mb3JFYWNoKGYpLGUoKSxjLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0LmZvckVhY2goZil9fSxiLmV4cG9ydHM9ZH0se1wiLi9tYWluXCI6MjR9XSwzNjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIik7ZC5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3JldHVybiB0aGlzLl9yZW5kZXJlci5hcHBseU1hdHJpeChhLGIsYyxkLGUsZiksdGhpc30sZC5wcm90b3R5cGUucG9wTWF0cml4PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicG9wTWF0cml4KCkgbm90IHVzZWQsIHNlZSBwb3AoKVwiKX0sZC5wcm90b3R5cGUucHJpbnRNYXRyaXg9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJwcmludE1hdHJpeCgpIG5vdCBpbXBsZW1lbnRlZFwiKX0sZC5wcm90b3R5cGUucHVzaE1hdHJpeD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInB1c2hNYXRyaXgoKSBub3QgdXNlZCwgc2VlIHB1c2goKVwiKX0sZC5wcm90b3R5cGUucmVzZXRNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIucmVzZXRNYXRyaXgoKSx0aGlzfSxkLnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicm90YXRlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5yb3RhdGUodGhpcy5fdG9SYWRpYW5zKGEpLGIpLHRoaXN9LGQucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwicm90YXRlWFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyb3RhdGVYXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5yb3RhdGVYKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJyb3RhdGVZXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJvdGF0ZVlcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnJvdGF0ZVkodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInJvdGF0ZVpcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicm90YXRlWlwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIucm90YXRlWih0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYixjKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzY2FsZVwiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIGQuVmVjdG9yKXt2YXIgZT1hO2E9ZS54LGI9ZS55LGM9ZS56fWVsc2UgaWYoYSBpbnN0YW5jZW9mIEFycmF5KXt2YXIgZj1hO2E9ZlswXSxiPWZbMV0sYz1mWzJdfHwxfXJldHVybiBpc05hTihiKT9iPWM9YTppc05hTihjKSYmKGM9MSksdGhpcy5fcmVuZGVyZXIuc2NhbGUuY2FsbCh0aGlzLl9yZW5kZXJlcixhLGIsYyksdGhpc30sZC5wcm90b3R5cGUuc2hlYXJYPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzaGVhclhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnNoZWFyWCh0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnNoZWFyWT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2hlYXJZXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5zaGVhclkodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0cmFuc2xhdGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEP3RoaXMuX3JlbmRlcmVyLnRyYW5zbGF0ZShhLGIsYyk6dGhpcy5fcmVuZGVyZXIudHJhbnNsYXRlKGEsYiksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4vbWFpblwiOjI0fV0sMzc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmNyZWF0ZVN0cmluZ0RpY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlU3RyaW5nRGljdFwiLGFyZ3VtZW50cyksbmV3IGQuU3RyaW5nRGljdChhLGIpfSxkLnByb3RvdHlwZS5jcmVhdGVOdW1iZXJEaWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZU51bWJlckRpY3RcIixhcmd1bWVudHMpLG5ldyBkLk51bWJlckRpY3QoYSxiKX0sZC5UeXBlZERpY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSBpbnN0YW5jZW9mIE9iamVjdD90aGlzLmRhdGE9YToodGhpcy5kYXRhPXt9LHRoaXMuZGF0YVthXT1iKSx0aGlzfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aH0sZC5UeXBlZERpY3QucHJvdG90eXBlLmhhc0tleT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe2lmKHRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKSlyZXR1cm4gdGhpcy5kYXRhW2FdO2NvbnNvbGUubG9nKGErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBEaWN0aW9uYXJ5XCIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5fdmFsaWRhdGUoYik/dGhpcy5kYXRhW2FdPWI6Y29uc29sZS5sb2coXCJUaG9zZSB2YWx1ZXMgZG9udCB3b3JrIGZvciB0aGlzIGRpY3Rpb25hcnkgdHlwZS5cIil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5fYWRkT2JqPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXRoaXMuc2V0KGIsYVtiXSl9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24oYSxiKXthIGluc3RhbmNlb2YgT2JqZWN0JiZ2b2lkIDA9PT1iP3RoaXMuX2FkZE9iaihhKTp2b2lkIDAhPT1hP3RoaXMuc2V0KGEsYik6Y29uc29sZS5sb2coXCJJbiBvcmRlciB0byBjcmVhdGUgYSBuZXcgRGljdGlvbmFyeSBlbnRyeSB5b3UgbXVzdCBwYXNzIGFuIG9iamVjdCBvciBhIGtleSwgdmFsdWUgcGFpclwiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5kYXRhPXt9fSxkLlR5cGVkRGljdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGEpe2lmKCF0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSkpdGhyb3cgbmV3IEVycm9yKGErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBEaWN0aW9uYXJ5XCIpO2RlbGV0ZSB0aGlzLmRhdGFbYV19LGQuVHlwZWREaWN0LnByb3RvdHlwZS5wcmludD1mdW5jdGlvbigpe2Zvcih2YXIgYSBpbiB0aGlzLmRhdGEpY29uc29sZS5sb2coXCJrZXk6XCIrYStcIiB2YWx1ZTpcIit0aGlzLmRhdGFbYV0pfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2F2ZVRhYmxlPWZ1bmN0aW9uKGEpe3ZhciBiPVwiXCI7Zm9yKHZhciBjIGluIHRoaXMuZGF0YSliKz1jK1wiLFwiK3RoaXMuZGF0YVtjXStcIlxcblwiO3ZhciBlPW5ldyBCbG9iKFtiXSx7dHlwZTpcInRleHQvY3N2XCJ9KTtkLnByb3RvdHlwZS5kb3dubG9hZEZpbGUoZSxhfHxcIm15Y3N2XCIsXCJjc3ZcIil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5zYXZlSlNPTj1mdW5jdGlvbihhLGIpe2QucHJvdG90eXBlLnNhdmVKU09OKHRoaXMuZGF0YSxhLGIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGEpe3JldHVybiEwfSxkLlN0cmluZ0RpY3Q9ZnVuY3Rpb24oKXtkLlR5cGVkRGljdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGQuU3RyaW5nRGljdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlR5cGVkRGljdC5wcm90b3R5cGUpLGQuU3RyaW5nRGljdC5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhfSxkLk51bWJlckRpY3Q9ZnVuY3Rpb24oKXtkLlR5cGVkRGljdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlR5cGVkRGljdC5wcm90b3R5cGUpLGQuTnVtYmVyRGljdC5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhfSxkLk51bWJlckRpY3QucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhLGIpe3RoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKT90aGlzLmRhdGFbYV0rPWI6Y29uc29sZS5sb2coXCJUaGUga2V5IC0gXCIrYStcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGRpY3Rpb25hcnkuXCIpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihhLGIpe3RoaXMuYWRkKGEsLWIpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLm11bHQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSk/dGhpcy5kYXRhW2FdKj1iOmNvbnNvbGUubG9nKFwiVGhlIGtleSAtIFwiK2ErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkaWN0aW9uYXJ5LlwiKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSk/dGhpcy5kYXRhW2FdLz1iOmNvbnNvbGUubG9nKFwiVGhlIGtleSAtIFwiK2ErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkaWN0aW9uYXJ5LlwiKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5fdmFsdWVUZXN0PWZ1bmN0aW9uKGEpe2lmKDA9PT1PYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gc2VhcmNoIGZvciBhIG1pbmltdW0gb3IgbWF4aW11bSB2YWx1ZSBvbiBhbiBlbXB0eSBOdW1iZXJEaWN0XCIpO2lmKDE9PT1PYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aClyZXR1cm4gdGhpcy5kYXRhW09iamVjdC5rZXlzKHRoaXMuZGF0YSlbMF1dO3ZhciBiPXRoaXMuZGF0YVtPYmplY3Qua2V5cyh0aGlzLmRhdGEpWzBdXTtmb3IodmFyIGMgaW4gdGhpcy5kYXRhKXRoaXMuZGF0YVtjXSphPGIqYSYmKGI9dGhpcy5kYXRhW2NdKTtyZXR1cm4gYn0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5taW5WYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZVRlc3QoMSl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWF4VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWVUZXN0KC0xKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5fa2V5VGVzdD1mdW5jdGlvbihhKXtpZigwPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHVzZSBtaW5WYWx1ZSBvbiBhbiBlbXB0eSBOdW1iZXJEaWN0XCIpO2lmKDE9PT1PYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aClyZXR1cm4gT2JqZWN0LmtleXModGhpcy5kYXRhKVswXTtmb3IodmFyIGI9T2JqZWN0LmtleXModGhpcy5kYXRhKVswXSxjPTE7YzxPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aDtjKyspT2JqZWN0LmtleXModGhpcy5kYXRhKVtjXSphPGIqYSYmKGI9T2JqZWN0LmtleXModGhpcy5kYXRhKVtjXSk7cmV0dXJuIGJ9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWluS2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleVRlc3QoMSl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWF4S2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleVRlc3QoLTEpfSxiLmV4cG9ydHM9ZC5UeXBlZERpY3R9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMzg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmRldmljZU9yaWVudGF0aW9uPXZvaWQgMCxkLnByb3RvdHlwZS5hY2NlbGVyYXRpb25YPTAsZC5wcm90b3R5cGUuYWNjZWxlcmF0aW9uWT0wLGQucHJvdG90eXBlLmFjY2VsZXJhdGlvblo9MCxkLnByb3RvdHlwZS5wQWNjZWxlcmF0aW9uWD0wLGQucHJvdG90eXBlLnBBY2NlbGVyYXRpb25ZPTAsZC5wcm90b3R5cGUucEFjY2VsZXJhdGlvblo9MCxkLnByb3RvdHlwZS5fdXBkYXRlUEFjY2VsZXJhdGlvbnM9ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcInBBY2NlbGVyYXRpb25YXCIsdGhpcy5hY2NlbGVyYXRpb25YKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBBY2NlbGVyYXRpb25ZXCIsdGhpcy5hY2NlbGVyYXRpb25ZKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBBY2NlbGVyYXRpb25aXCIsdGhpcy5hY2NlbGVyYXRpb25aKX0sZC5wcm90b3R5cGUucm90YXRpb25YPTAsZC5wcm90b3R5cGUucm90YXRpb25ZPTAsZC5wcm90b3R5cGUucm90YXRpb25aPTAsZC5wcm90b3R5cGUucFJvdGF0aW9uWD0wLGQucHJvdG90eXBlLnBSb3RhdGlvblk9MCxkLnByb3RvdHlwZS5wUm90YXRpb25aPTA7dmFyIGUsZixnLGg9MCxpPTAsaj0wLGs9XCJjbG9ja3dpc2VcIixsPVwiY2xvY2t3aXNlXCIsbT1cImNsb2Nrd2lzZVwiO2QucHJvdG90eXBlLl91cGRhdGVQUm90YXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJwUm90YXRpb25YXCIsdGhpcy5yb3RhdGlvblgpLHRoaXMuX3NldFByb3BlcnR5KFwicFJvdGF0aW9uWVwiLHRoaXMucm90YXRpb25ZKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBSb3RhdGlvblpcIix0aGlzLnJvdGF0aW9uWil9LGQucHJvdG90eXBlLnR1cm5BeGlzPXZvaWQgMDt2YXIgbj0uNSxvPTMwO2QucHJvdG90eXBlLnNldE1vdmVUaHJlc2hvbGQ9ZnVuY3Rpb24oYSl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2V0TW92ZVRocmVzaG9sZFwiLGFyZ3VtZW50cyksbj1hfSxkLnByb3RvdHlwZS5zZXRTaGFrZVRocmVzaG9sZD1mdW5jdGlvbihhKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzZXRTaGFrZVRocmVzaG9sZFwiLGFyZ3VtZW50cyksbz1hfSxkLnByb3RvdHlwZS5fb25kZXZpY2VvcmllbnRhdGlvbj1mdW5jdGlvbihhKXt0aGlzLl91cGRhdGVQUm90YXRpb25zKCksdGhpcy5fc2V0UHJvcGVydHkoXCJyb3RhdGlvblhcIixhLmJldGEpLHRoaXMuX3NldFByb3BlcnR5KFwicm90YXRpb25ZXCIsYS5nYW1tYSksdGhpcy5fc2V0UHJvcGVydHkoXCJyb3RhdGlvblpcIixhLmFscGhhKSx0aGlzLl9oYW5kbGVNb3Rpb24oKX0sZC5wcm90b3R5cGUuX29uZGV2aWNlbW90aW9uPWZ1bmN0aW9uKGEpe3RoaXMuX3VwZGF0ZVBBY2NlbGVyYXRpb25zKCksdGhpcy5fc2V0UHJvcGVydHkoXCJhY2NlbGVyYXRpb25YXCIsMiphLmFjY2VsZXJhdGlvbi54KSx0aGlzLl9zZXRQcm9wZXJ0eShcImFjY2VsZXJhdGlvbllcIiwyKmEuYWNjZWxlcmF0aW9uLnkpLHRoaXMuX3NldFByb3BlcnR5KFwiYWNjZWxlcmF0aW9uWlwiLDIqYS5hY2NlbGVyYXRpb24ueiksdGhpcy5faGFuZGxlTW90aW9uKCl9LGQucHJvdG90eXBlLl9oYW5kbGVNb3Rpb249ZnVuY3Rpb24oKXs5MD09PXdpbmRvdy5vcmllbnRhdGlvbnx8LTkwPT09d2luZG93Lm9yaWVudGF0aW9uP3RoaXMuX3NldFByb3BlcnR5KFwiZGV2aWNlT3JpZW50YXRpb25cIixcImxhbmRzY2FwZVwiKTowPT09d2luZG93Lm9yaWVudGF0aW9uP3RoaXMuX3NldFByb3BlcnR5KFwiZGV2aWNlT3JpZW50YXRpb25cIixcInBvcnRyYWl0XCIpOnZvaWQgMD09PXdpbmRvdy5vcmllbnRhdGlvbiYmdGhpcy5fc2V0UHJvcGVydHkoXCJkZXZpY2VPcmllbnRhdGlvblwiLFwidW5kZWZpbmVkXCIpO3ZhciBhPXRoaXMuZGV2aWNlTW92ZWR8fHdpbmRvdy5kZXZpY2VNb3ZlZDtcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiYoTWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25YLXRoaXMucEFjY2VsZXJhdGlvblgpPm58fE1hdGguYWJzKHRoaXMuYWNjZWxlcmF0aW9uWS10aGlzLnBBY2NlbGVyYXRpb25ZKT5ufHxNYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblotdGhpcy5wQWNjZWxlcmF0aW9uWik+bikmJmEoKTt2YXIgYj10aGlzLmRldmljZVR1cm5lZHx8d2luZG93LmRldmljZVR1cm5lZDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiKXt2YXIgYz10aGlzLnJvdGF0aW9uWCsxODAsZD10aGlzLnBSb3RhdGlvblgrMTgwLHA9aCsxODA7Yy1kPjAmJmMtZDwyNzB8fGMtZDwtMjcwP2s9XCJjbG9ja3dpc2VcIjooYy1kPDB8fGMtZD4yNzApJiYoaz1cImNvdW50ZXItY2xvY2t3aXNlXCIpLGshPT1lJiYocD1jKSxNYXRoLmFicyhjLXApPjkwJiZNYXRoLmFicyhjLXApPDI3MCYmKHA9Yyx0aGlzLl9zZXRQcm9wZXJ0eShcInR1cm5BeGlzXCIsXCJYXCIpLGIoKSksZT1rLGg9cC0xODA7dmFyIHE9dGhpcy5yb3RhdGlvblkrMTgwLHI9dGhpcy5wUm90YXRpb25ZKzE4MCxzPWkrMTgwO3Etcj4wJiZxLXI8MjcwfHxxLXI8LTI3MD9sPVwiY2xvY2t3aXNlXCI6KHEtcjwwfHxxLXRoaXMucFJvdGF0aW9uWT4yNzApJiYobD1cImNvdW50ZXItY2xvY2t3aXNlXCIpLGwhPT1mJiYocz1xKSxNYXRoLmFicyhxLXMpPjkwJiZNYXRoLmFicyhxLXMpPDI3MCYmKHM9cSx0aGlzLl9zZXRQcm9wZXJ0eShcInR1cm5BeGlzXCIsXCJZXCIpLGIoKSksZj1sLGk9cy0xODAsdGhpcy5yb3RhdGlvblotdGhpcy5wUm90YXRpb25aPjAmJnRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWjwyNzB8fHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWjwtMjcwP209XCJjbG9ja3dpc2VcIjoodGhpcy5yb3RhdGlvblotdGhpcy5wUm90YXRpb25aPDB8fHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWj4yNzApJiYobT1cImNvdW50ZXItY2xvY2t3aXNlXCIpLG0hPT1nJiYoaj10aGlzLnJvdGF0aW9uWiksTWF0aC5hYnModGhpcy5yb3RhdGlvblotaik+OTAmJk1hdGguYWJzKHRoaXMucm90YXRpb25aLWopPDI3MCYmKGo9dGhpcy5yb3RhdGlvblosdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLFwiWlwiKSxiKCkpLGc9bSx0aGlzLl9zZXRQcm9wZXJ0eShcInR1cm5BeGlzXCIsdm9pZCAwKX12YXIgdD10aGlzLmRldmljZVNoYWtlbnx8d2luZG93LmRldmljZVNoYWtlbjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXt2YXIgdSx2O251bGwhPT10aGlzLnBBY2NlbGVyYXRpb25YJiYodT1NYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblgtdGhpcy5wQWNjZWxlcmF0aW9uWCksdj1NYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblktdGhpcy5wQWNjZWxlcmF0aW9uWSkpLHUrdj5vJiZ0KCl9fSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSwzOTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoKXtmb3IodmFyIGEgaW4gZilpZihmLmhhc093blByb3BlcnR5KGEpJiYhMD09PWZbYV0pcmV0dXJuITA7cmV0dXJuITF9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKSxmPXt9O2UucHJvdG90eXBlLmlzS2V5UHJlc3NlZD0hMSxlLnByb3RvdHlwZS5rZXlJc1ByZXNzZWQ9ITEsZS5wcm90b3R5cGUua2V5PVwiXCIsZS5wcm90b3R5cGUua2V5Q29kZT0wLGUucHJvdG90eXBlLl9vbmtleWRvd249ZnVuY3Rpb24oYSl7aWYoIWZbYS53aGljaF0pe3RoaXMuX3NldFByb3BlcnR5KFwiaXNLZXlQcmVzc2VkXCIsITApLHRoaXMuX3NldFByb3BlcnR5KFwia2V5SXNQcmVzc2VkXCIsITApLHRoaXMuX3NldFByb3BlcnR5KFwia2V5Q29kZVwiLGEud2hpY2gpLGZbYS53aGljaF09ITAsdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlcIixhLmtleXx8U3RyaW5nLmZyb21DaGFyQ29kZShhLndoaWNoKXx8YS53aGljaCk7dmFyIGI9dGhpcy5rZXlQcmVzc2VkfHx3aW5kb3cua2V5UHJlc3NlZDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiJiYhYS5jaGFyQ29kZSl7ITE9PT1iKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fX0sZS5wcm90b3R5cGUuX29ua2V5dXA9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5rZXlSZWxlYXNlZHx8d2luZG93LmtleVJlbGVhc2VkO2lmKGZbYS53aGljaF09ITEsZCgpfHwodGhpcy5fc2V0UHJvcGVydHkoXCJpc0tleVByZXNzZWRcIiwhMSksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlJc1ByZXNzZWRcIiwhMSkpLHRoaXMuX3NldFByb3BlcnR5KFwiX2xhc3RLZXlDb2RlVHlwZWRcIixudWxsKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleVwiLGEua2V5fHxTdHJpbmcuZnJvbUNoYXJDb2RlKGEud2hpY2gpfHxhLndoaWNoKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleUNvZGVcIixhLndoaWNoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiKXshMT09PWIoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGUucHJvdG90eXBlLl9vbmtleXByZXNzPWZ1bmN0aW9uKGEpe2lmKGEud2hpY2ghPT10aGlzLl9sYXN0S2V5Q29kZVR5cGVkKXt0aGlzLl9zZXRQcm9wZXJ0eShcImtleUNvZGVcIixhLndoaWNoKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9sYXN0S2V5Q29kZVR5cGVkXCIsYS53aGljaCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlcIixTdHJpbmcuZnJvbUNoYXJDb2RlKGEud2hpY2gpKTt2YXIgYj10aGlzLmtleVR5cGVkfHx3aW5kb3cua2V5VHlwZWQ7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYil7ITE9PT1iKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fX0sZS5wcm90b3R5cGUuX29uYmx1cj1mdW5jdGlvbihhKXtmPXt9fSxlLnByb3RvdHlwZS5rZXlJc0Rvd249ZnVuY3Rpb24oYSl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImtleUlzRG93blwiLGFyZ3VtZW50cyksZlthXX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNDA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjLGQpe2QmJiFkLmNsaWVudFgmJihkLnRvdWNoZXM/ZD1kLnRvdWNoZXNbMF06ZC5jaGFuZ2VkVG91Y2hlcyYmKGQ9ZC5jaGFuZ2VkVG91Y2hlc1swXSkpO3ZhciBlPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZj1hLnNjcm9sbFdpZHRoL2IsZz1hLnNjcm9sbEhlaWdodC9jO3JldHVybnt4OihkLmNsaWVudFgtZS5sZWZ0KS9mLHk6KGQuY2xpZW50WS1lLnRvcCkvZyx3aW5YOmQuY2xpZW50WCx3aW5ZOmQuY2xpZW50WSxpZDpkLmlkZW50aWZpZXJ9fXZhciBlPWEoXCIuLi9jb3JlL21haW5cIiksZj1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZS5wcm90b3R5cGUuX2hhc01vdXNlSW50ZXJhY3RlZD0hMSxlLnByb3RvdHlwZS5tb3VzZVg9MCxlLnByb3RvdHlwZS5tb3VzZVk9MCxlLnByb3RvdHlwZS5wbW91c2VYPTAsZS5wcm90b3R5cGUucG1vdXNlWT0wLGUucHJvdG90eXBlLndpbk1vdXNlWD0wLGUucHJvdG90eXBlLndpbk1vdXNlWT0wLGUucHJvdG90eXBlLnB3aW5Nb3VzZVg9MCxlLnByb3RvdHlwZS5wd2luTW91c2VZPTAsZS5wcm90b3R5cGUubW91c2VCdXR0b249MCxlLnByb3RvdHlwZS5tb3VzZUlzUHJlc3NlZD0hMSxlLnByb3RvdHlwZS5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzPWZ1bmN0aW9uKGEpe2lmKG51bGwhPT10aGlzLl9jdXJFbGVtZW50JiYoIWEudG91Y2hlc3x8YS50b3VjaGVzLmxlbmd0aD4wKSl7dmFyIGI9ZCh0aGlzLl9jdXJFbGVtZW50LmVsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LGEpO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VYXCIsYi54KSx0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlWVwiLGIueSksdGhpcy5fc2V0UHJvcGVydHkoXCJ3aW5Nb3VzZVhcIixiLndpblgpLHRoaXMuX3NldFByb3BlcnR5KFwid2luTW91c2VZXCIsYi53aW5ZKX10aGlzLl9oYXNNb3VzZUludGVyYWN0ZWR8fCh0aGlzLl91cGRhdGVNb3VzZUNvb3JkcygpLHRoaXMuX3NldFByb3BlcnR5KFwiX2hhc01vdXNlSW50ZXJhY3RlZFwiLCEwKSl9LGUucHJvdG90eXBlLl91cGRhdGVNb3VzZUNvb3Jkcz1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwicG1vdXNlWFwiLHRoaXMubW91c2VYKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBtb3VzZVlcIix0aGlzLm1vdXNlWSksdGhpcy5fc2V0UHJvcGVydHkoXCJwd2luTW91c2VYXCIsdGhpcy53aW5Nb3VzZVgpLHRoaXMuX3NldFByb3BlcnR5KFwicHdpbk1vdXNlWVwiLHRoaXMud2luTW91c2VZKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9wbW91c2VXaGVlbERlbHRhWVwiLHRoaXMuX21vdXNlV2hlZWxEZWx0YVkpfSxlLnByb3RvdHlwZS5fc2V0TW91c2VCdXR0b249ZnVuY3Rpb24oYSl7MT09PWEuYnV0dG9uP3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VCdXR0b25cIixmLkNFTlRFUik6Mj09PWEuYnV0dG9uP3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VCdXR0b25cIixmLlJJR0hUKTp0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlQnV0dG9uXCIsZi5MRUZUKX0sZS5wcm90b3R5cGUuX29ubW91c2Vtb3ZlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKSx0aGlzLm1vdXNlSXNQcmVzc2VkP1wiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VEcmFnZ2VkPyExPT09Yi5tb3VzZURyYWdnZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoTW92ZWQmJiExPT09Yi50b3VjaE1vdmVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZU1vdmVkJiYhMT09PWIubW91c2VNb3ZlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb25tb3VzZWRvd249ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCEwKSx0aGlzLl9zZXRNb3VzZUJ1dHRvbihhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksXCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVByZXNzZWQ/ITE9PT1iLm1vdXNlUHJlc3NlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hTdGFydGVkJiYhMT09PWIudG91Y2hTdGFydGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbm1vdXNldXA9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCExKSxcblwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VSZWxlYXNlZD8hMT09PWIubW91c2VSZWxlYXNlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hFbmRlZCYmITE9PT1iLnRvdWNoRW5kZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29uZHJhZ2VuZD1lLnByb3RvdHlwZS5fb25tb3VzZXVwLGUucHJvdG90eXBlLl9vbmRyYWdvdmVyPWUucHJvdG90eXBlLl9vbm1vdXNlbW92ZSxlLnByb3RvdHlwZS5fb25jbGljaz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlQ2xpY2tlZCl7ITE9PT1iLm1vdXNlQ2xpY2tlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX0sZS5wcm90b3R5cGUuX29uZGJsY2xpY2s9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYi5kb3VibGVDbGlja2VkKXshMT09PWIuZG91YmxlQ2xpY2tlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX0sZS5wcm90b3R5cGUuX21vdXNlV2hlZWxEZWx0YVk9MCxlLnByb3RvdHlwZS5fcG1vdXNlV2hlZWxEZWx0YVk9MCxlLnByb3RvdHlwZS5fb253aGVlbD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztpZih0aGlzLl9zZXRQcm9wZXJ0eShcIl9tb3VzZVdoZWVsRGVsdGFZXCIsYS5kZWx0YVkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VXaGVlbCl7YS5kZWx0YT1hLmRlbHRhWTshMT09PWIubW91c2VXaGVlbChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDQxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyxkLGUpe2U9ZXx8MDt2YXIgZj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGc9YS5zY3JvbGxXaWR0aC9iLGg9YS5zY3JvbGxIZWlnaHQvYyxpPWQudG91Y2hlc1tlXXx8ZC5jaGFuZ2VkVG91Y2hlc1tlXTtyZXR1cm57eDooaS5jbGllbnRYLWYubGVmdCkvZyx5OihpLmNsaWVudFktZi50b3ApL2gsd2luWDppLmNsaWVudFgsd2luWTppLmNsaWVudFksaWQ6aS5pZGVudGlmaWVyfX12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpO2UucHJvdG90eXBlLnRvdWNoZXM9W10sZS5wcm90b3R5cGUuX3VwZGF0ZVRvdWNoQ29vcmRzPWZ1bmN0aW9uKGEpe2lmKG51bGwhPT10aGlzLl9jdXJFbGVtZW50KXtmb3IodmFyIGI9W10sYz0wO2M8YS50b3VjaGVzLmxlbmd0aDtjKyspYltjXT1kKHRoaXMuX2N1ckVsZW1lbnQuZWx0LHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsYSxjKTt0aGlzLl9zZXRQcm9wZXJ0eShcInRvdWNoZXNcIixiKX19LGUucHJvdG90eXBlLl9vbnRvdWNoc3RhcnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCEwKSx0aGlzLl91cGRhdGVUb3VjaENvb3JkcyhhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksdGhpcy5fdXBkYXRlTW91c2VDb29yZHMoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoU3RhcnRlZD8hMT09PWIudG91Y2hTdGFydGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVByZXNzZWQmJiExPT09Yi5tb3VzZVByZXNzZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29udG91Y2htb3ZlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3VwZGF0ZVRvdWNoQ29vcmRzKGEpLHRoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoTW92ZWQ/ITE9PT1iLnRvdWNoTW92ZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlRHJhZ2dlZCYmITE9PT1iLm1vdXNlRHJhZ2dlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb250b3VjaGVuZD1mdW5jdGlvbihhKXt0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlSXNQcmVzc2VkXCIsITEpLHRoaXMuX3VwZGF0ZVRvdWNoQ29vcmRzKGEpLHRoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKTt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoRW5kZWQ/ITE9PT1iLnRvdWNoRW5kZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlUmVsZWFzZWQmJiExPT09Yi5tb3VzZVJlbGVhc2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhKXt2YXIgYj0zLjUqYXwwO2lmKGI9YjwxPzE6YjwyNDg/YjoyNDgsZyE9PWIpe2c9YixoPTErZzw8MSxpPW5ldyBJbnQzMkFycmF5KGgpLGo9bmV3IEFycmF5KGgpO2Zvcih2YXIgYz0wO2M8aDtjKyspaltjXT1uZXcgSW50MzJBcnJheSgyNTYpO2Zvcih2YXIgZCxlLGYsayxsPTEsbT1iLTE7bDxiO2wrKyl7aVtiK2xdPWlbbV09ZT1tKm0sZj1qW2IrbF0saz1qW20tLV07Zm9yKHZhciBuPTA7bjwyNTY7bisrKWZbbl09a1tuXT1lKm59ZD1pW2JdPWIqYixmPWpbYl07Zm9yKHZhciBvPTA7bzwyNTY7bysrKWZbb109ZCpvfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPWYuX3RvUGl4ZWxzKGEpLGU9YS53aWR0aCxrPWEuaGVpZ2h0LGw9ZSprLG09bmV3IEludDMyQXJyYXkobCksbj0wO248bDtuKyspbVtuXT1mLl9nZXRBUkdCKGMsbik7dmFyIG8scCxxLHIscyx0LHUsdix3LHgseT1uZXcgSW50MzJBcnJheShsKSx6PW5ldyBJbnQzMkFycmF5KGwpLEE9bmV3IEludDMyQXJyYXkobCksQj1uZXcgSW50MzJBcnJheShsKSxDPTA7ZChiKTt2YXIgRCxFLEYsRztmb3IoRT0wO0U8aztFKyspe2ZvcihEPTA7RDxlO0QrKyl7aWYocj1xPXA9cz1vPTAsKHQ9RC1nKTwwKXg9LXQsdD0wO2Vsc2V7aWYodD49ZSlicmVhazt4PTB9Zm9yKEY9eDtGPGgmJiEodD49ZSk7RisrKXt2YXIgSD1tW3QrQ107Rz1qW0ZdLHMrPUdbKC0xNjc3NzIxNiZIKT4+PjI0XSxwKz1HWygxNjcxMTY4MCZIKT4+MTZdLHErPUdbKDY1MjgwJkgpPj44XSxyKz1HWzI1NSZIXSxvKz1pW0ZdLHQrK311PUMrRCx5W3VdPXMvbyx6W3VdPXAvbyxBW3VdPXEvbyxCW3VdPXIvb31DKz1lfWZvcihDPTAsdj0tZyx3PXYqZSxFPTA7RTxrO0UrKyl7Zm9yKEQ9MDtEPGU7RCsrKXtpZihyPXE9cD1zPW89MCx2PDApeD11PS12LHQ9RDtlbHNle2lmKHY+PWspYnJlYWs7eD0wLHU9dix0PUQrd31mb3IoRj14O0Y8aCYmISh1Pj1rKTtGKyspRz1qW0ZdLHMrPUdbeVt0XV0scCs9R1t6W3RdXSxxKz1HW0FbdF1dLHIrPUdbQlt0XV0sbys9aVtGXSx1KyssdCs9ZTttW0QrQ109cy9vPDwyNHxwL288PDE2fHEvbzw8OHxyL299Qys9ZSx3Kz1lLHYrK31mLl9zZXRQaXhlbHMoYyxtKX12YXIgZj17fTtmLl90b1BpeGVscz1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEltYWdlRGF0YT9hLmRhdGE6YS5nZXRDb250ZXh0KFwiMmRcIikuZ2V0SW1hZ2VEYXRhKDAsMCxhLndpZHRoLGEuaGVpZ2h0KS5kYXRhfSxmLl9nZXRBUkdCPWZ1bmN0aW9uKGEsYil7dmFyIGM9NCpiO3JldHVybiBhW2MrM108PDI0JjQyNzgxOTAwODB8YVtjXTw8MTYmMTY3MTE2ODB8YVtjKzFdPDw4JjY1MjgwfDI1NSZhW2MrMl19LGYuX3NldFBpeGVscz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspYz00KmQsYVtjKzBdPSgxNjcxMTY4MCZiW2RdKT4+PjE2LGFbYysxXT0oNjUyODAmYltkXSk+Pj44LGFbYysyXT0yNTUmYltkXSxhW2MrM109KDQyNzgxOTAwODAmYltkXSk+Pj4yNH0sZi5fdG9JbWFnZURhdGE9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBJbWFnZURhdGE/YTphLmdldENvbnRleHQoXCIyZFwiKS5nZXRJbWFnZURhdGEoMCwwLGEud2lkdGgsYS5oZWlnaHQpfSxmLl9jcmVhdGVJbWFnZURhdGE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5fdG1wQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksZi5fdG1wQ3R4PWYuX3RtcENhbnZhcy5nZXRDb250ZXh0KFwiMmRcIiksdGhpcy5fdG1wQ3R4LmNyZWF0ZUltYWdlRGF0YShhLGIpfSxmLmFwcGx5PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldENvbnRleHQoXCIyZFwiKSxlPWQuZ2V0SW1hZ2VEYXRhKDAsMCxhLndpZHRoLGEuaGVpZ2h0KSxmPWIoZSxjKTtmIGluc3RhbmNlb2YgSW1hZ2VEYXRhP2QucHV0SW1hZ2VEYXRhKGYsMCwwLDAsMCxhLndpZHRoLGEuaGVpZ2h0KTpkLnB1dEltYWdlRGF0YShlLDAsMCwwLDAsYS53aWR0aCxhLmhlaWdodCl9LGYudGhyZXNob2xkPWZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5fdG9QaXhlbHMoYSk7dm9pZCAwPT09YiYmKGI9LjUpO2Zvcih2YXIgZD1NYXRoLmZsb29yKDI1NSpiKSxlPTA7ZTxjLmxlbmd0aDtlKz00KXt2YXIgZyxoPWNbZV0saT1jW2UrMV0saj1jW2UrMl0saz0uMjEyNipoKy43MTUyKmkrLjA3MjIqajtnPWs+PWQ/MjU1OjAsY1tlXT1jW2UrMV09Y1tlKzJdPWd9fSxmLmdyYXk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWYuX3RvUGl4ZWxzKGEpLGM9MDtjPGIubGVuZ3RoO2MrPTQpe3ZhciBkPWJbY10sZT1iW2MrMV0sZz1iW2MrMl0saD0uMjEyNipkKy43MTUyKmUrLjA3MjIqZztiW2NdPWJbYysxXT1iW2MrMl09aH19LGYub3BhcXVlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1mLl90b1BpeGVscyhhKSxjPTA7YzxiLmxlbmd0aDtjKz00KWJbYyszXT0yNTU7cmV0dXJuIGJ9LGYuaW52ZXJ0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1mLl90b1BpeGVscyhhKSxjPTA7YzxiLmxlbmd0aDtjKz00KWJbY109MjU1LWJbY10sYltjKzFdPTI1NS1iW2MrMV0sYltjKzJdPTI1NS1iW2MrMl19LGYucG9zdGVyaXplPWZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5fdG9QaXhlbHMoYSk7aWYoYjwyfHxiPjI1NSl0aHJvdyBuZXcgRXJyb3IoXCJMZXZlbCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAyIGFuZCBsZXNzIHRoYW4gMjU1IGZvciBwb3N0ZXJpemVcIik7Zm9yKHZhciBkPWItMSxlPTA7ZTxjLmxlbmd0aDtlKz00KXt2YXIgZz1jW2VdLGg9Y1tlKzFdLGk9Y1tlKzJdO2NbZV09MjU1KihnKmI+PjgpL2QsY1tlKzFdPTI1NSooaCpiPj44KS9kLGNbZSsyXT0yNTUqKGkqYj4+OCkvZH19LGYuZGlsYXRlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQsZSxnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ9Zi5fdG9QaXhlbHMoYSksdT0wLHY9dC5sZW5ndGg/dC5sZW5ndGgvNDowLHc9bmV3IEludDMyQXJyYXkodik7dTx2Oylmb3IoYj11LGM9dSthLndpZHRoO3U8YzspZD1lPWYuX2dldEFSR0IodCx1KSxpPXUtMSxoPXUrMSxqPXUtYS53aWR0aCxrPXUrYS53aWR0aCxpPGImJihpPXUpLGg+PWMmJihoPXUpLGo8MCYmKGo9MCksaz49diYmKGs9dSksbj1mLl9nZXRBUkdCKHQsaiksbT1mLl9nZXRBUkdCKHQsaSksbz1mLl9nZXRBUkdCKHQsayksbD1mLl9nZXRBUkdCKHQsaCksZz03NyooZD4+MTYmMjU1KSsxNTEqKGQ+PjgmMjU1KSsyOCooMjU1JmQpLHE9NzcqKG0+PjE2JjI1NSkrMTUxKihtPj44JjI1NSkrMjgqKDI1NSZtKSxwPTc3KihsPj4xNiYyNTUpKzE1MSoobD4+OCYyNTUpKzI4KigyNTUmbCkscj03Nyoobj4+MTYmMjU1KSsxNTEqKG4+PjgmMjU1KSsyOCooMjU1Jm4pLHM9NzcqKG8+PjE2JjI1NSkrMTUxKihvPj44JjI1NSkrMjgqKDI1NSZvKSxxPmcmJihlPW0sZz1xKSxwPmcmJihlPWwsZz1wKSxyPmcmJihlPW4sZz1yKSxzPmcmJihlPW8sZz1zKSx3W3UrK109ZTtmLl9zZXRQaXhlbHModCx3KX0sZi5lcm9kZT1mdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0PWYuX3RvUGl4ZWxzKGEpLHU9MCx2PXQubGVuZ3RoP3QubGVuZ3RoLzQ6MCx3PW5ldyBJbnQzMkFycmF5KHYpO3U8djspZm9yKGI9dSxjPXUrYS53aWR0aDt1PGM7KWQ9ZT1mLl9nZXRBUkdCKHQsdSksaT11LTEsaD11KzEsaj11LWEud2lkdGgsaz11K2Eud2lkdGgsaTxiJiYoaT11KSxoPj1jJiYoaD11KSxqPDAmJihqPTApLGs+PXYmJihrPXUpLG49Zi5fZ2V0QVJHQih0LGopLG09Zi5fZ2V0QVJHQih0LGkpLG89Zi5fZ2V0QVJHQih0LGspLGw9Zi5fZ2V0QVJHQih0LGgpLGc9NzcqKGQ+PjE2JjI1NSkrMTUxKihkPj44JjI1NSkrMjgqKDI1NSZkKSxxPTc3KihtPj4xNiYyNTUpKzE1MSoobT4+OCYyNTUpKzI4KigyNTUmbSkscD03NyoobD4+MTYmMjU1KSsxNTEqKGw+PjgmMjU1KSsyOCooMjU1JmwpLHI9NzcqKG4+PjE2JjI1NSkrMTUxKihuPj44JjI1NSkrMjgqKDI1NSZuKSxzPTc3KihvPj4xNiYyNTUpKzE1MSoobz4+OCYyNTUpKzI4KigyNTUmbykscTxnJiYoZT1tLGc9cSkscDxnJiYoZT1sLGc9cCkscjxnJiYoZT1uLGc9ciksczxnJiYoZT1vLGc9cyksd1t1KytdPWU7Zi5fc2V0UGl4ZWxzKHQsdyl9O3ZhciBnLGgsaSxqO2YuYmx1cj1mdW5jdGlvbihhLGIpe2UoYSxiKX0sYi5leHBvcnRzPWZ9LHt9XSw0MzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1bXTtkLnByb3RvdHlwZS5jcmVhdGVJbWFnZT1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVJbWFnZVwiLGFyZ3VtZW50cyksbmV3IGQuSW1hZ2UoYSxiKX0sZC5wcm90b3R5cGUuc2F2ZUNhbnZhcz1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVDYW52YXNcIixhcmd1bWVudHMpO3ZhciBhLGIsYyxlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTthcmd1bWVudHNbMF1pbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50PyhhPWFyZ3VtZW50c1swXSxlLnNoaWZ0KCkpOmFyZ3VtZW50c1swXWluc3RhbmNlb2YgZC5FbGVtZW50PyhhPWFyZ3VtZW50c1swXS5lbHQsZS5zaGlmdCgpKTphPXRoaXMuX2N1ckVsZW1lbnQmJnRoaXMuX2N1ckVsZW1lbnQuZWx0LGUubGVuZ3RoPj0xJiYoYj1lWzBdKSxlLmxlbmd0aD49MiYmKGM9ZVsxXSksYz1jfHxkLnByb3RvdHlwZS5fY2hlY2tGaWxlRXh0ZW5zaW9uKGIsYylbMV18fFwicG5nXCI7dmFyIGY7c3dpdGNoKGMpe2RlZmF1bHQ6Zj1cImltYWdlL3BuZ1wiO2JyZWFrO2Nhc2VcImpwZWdcIjpjYXNlXCJqcGdcIjpmPVwiaW1hZ2UvanBlZ1wifWEudG9CbG9iKGZ1bmN0aW9uKGEpe2QucHJvdG90eXBlLmRvd25sb2FkRmlsZShhLGIsYyl9LGYpfSxkLnByb3RvdHlwZS5zYXZlRnJhbWVzPWZ1bmN0aW9uKGEsYixjLGYsZyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZUZyYW1lc1wiLGFyZ3VtZW50cyk7dmFyIGg9Y3x8MztoPWQucHJvdG90eXBlLmNvbnN0cmFpbihoLDAsMTUpLGgqPTFlMzt2YXIgaT1mfHwxNTtpPWQucHJvdG90eXBlLmNvbnN0cmFpbihpLDAsMjIpO3ZhciBqPTAsaz1kLnByb3RvdHlwZS5fbWFrZUZyYW1lLGw9dGhpcy5fY3VyRWxlbWVudC5lbHQsbT1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2soYStqLGIsbCksaisrfSwxZTMvaSk7c2V0VGltZW91dChmdW5jdGlvbigpe2lmKGNsZWFySW50ZXJ2YWwobSksZylnKGUpO2Vsc2UgZm9yKHZhciBhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBiPWVbYV07ZC5wcm90b3R5cGUuZG93bmxvYWRGaWxlKGIuaW1hZ2VEYXRhLGIuZmlsZW5hbWUsYi5leHQpfWU9W119LGgrLjAxKX0sZC5wcm90b3R5cGUuX21ha2VGcmFtZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7ZD10aGlzP3RoaXMuX2N1ckVsZW1lbnQuZWx0OmM7dmFyIGY7aWYoYilzd2l0Y2goYi50b0xvd2VyQ2FzZSgpKXtjYXNlXCJwbmdcIjpmPVwiaW1hZ2UvcG5nXCI7YnJlYWs7Y2FzZVwianBlZ1wiOmNhc2VcImpwZ1wiOmY9XCJpbWFnZS9qcGVnXCI7YnJlYWs7ZGVmYXVsdDpmPVwiaW1hZ2UvcG5nXCJ9ZWxzZSBiPVwicG5nXCIsZj1cImltYWdlL3BuZ1wiO3ZhciBnPWQudG9EYXRhVVJMKGYpO2c9Zy5yZXBsYWNlKGYsXCJpbWFnZS9vY3RldC1zdHJlYW1cIik7dmFyIGg9e307aC5pbWFnZURhdGE9ZyxoLmZpbGVuYW1lPWEsaC5leHQ9YixlLnB1c2goaCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQ0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhPjAmJmE8Yj9hOmJ9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKSxmPWEoXCIuL2ZpbHRlcnNcIiksZz1hKFwiLi4vY29yZS9oZWxwZXJzXCIpLGg9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksZS5wcm90b3R5cGUubG9hZEltYWdlPWZ1bmN0aW9uKGEsYixjKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkSW1hZ2VcIixhcmd1bWVudHMpO3ZhciBkPW5ldyBJbWFnZSxmPW5ldyBlLkltYWdlKDEsMSx0aGlzKSxnPXRoaXM7cmV0dXJuIGQub25sb2FkPWZ1bmN0aW9uKCl7Zi53aWR0aD1mLmNhbnZhcy53aWR0aD1kLndpZHRoLGYuaGVpZ2h0PWYuY2FudmFzLmhlaWdodD1kLmhlaWdodCxmLmRyYXdpbmdDb250ZXh0LmRyYXdJbWFnZShkLDAsMCksZi5tb2RpZmllZD0hMCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiJiZiKGYpLGcuX2RlY3JlbWVudFByZWxvYWQoKX0sZC5vbmVycm9yPWZ1bmN0aW9uKGEpe2UuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcigwLGQuc3JjKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiZjKGEpfSwwIT09YS5pbmRleE9mKFwiZGF0YTppbWFnZS9cIikmJihkLmNyb3NzT3JpZ2luPVwiQW5vbnltb3VzXCIpLGQuc3JjPWEsZn0sZS5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oYSxiLGMsZixoLGksaixrLGwpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImltYWdlXCIsYXJndW1lbnRzKTt2YXIgbT1hLndpZHRoLG49YS5oZWlnaHQ7YS5lbHQmJmEuZWx0LnZpZGVvV2lkdGgmJiFhLmNhbnZhcyYmKG09YS5lbHQudmlkZW9XaWR0aCxuPWEuZWx0LnZpZGVvSGVpZ2h0KTt2YXIgbz1iLHA9YyxxPWZ8fG0scj1ofHxuLHM9aXx8MCx0PWp8fDAsdT1rfHxtLHY9bHx8bjt1PWQodSxtKSx2PWQodixuKTt2YXIgdz0xO2EuZWx0JiYhYS5jYW52YXMmJmEuZWx0LnN0eWxlLndpZHRoJiYodz1hLmVsdC52aWRlb1dpZHRoJiYhZj9hLmVsdC52aWRlb1dpZHRoOmEuZWx0LndpZHRoLHcvPXBhcnNlSW50KGEuZWx0LnN0eWxlLndpZHRoLDEwKSkscyo9dyx0Kj13LHYqPXcsdSo9dzt2YXIgeD1nLm1vZGVBZGp1c3QobyxwLHEscix0aGlzLl9yZW5kZXJlci5faW1hZ2VNb2RlKTt0aGlzLl9yZW5kZXJlci5pbWFnZShhLHMsdCx1LHYseC54LHgueSx4LncseC5oKX0sZS5wcm90b3R5cGUudGludD1mdW5jdGlvbigpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRpbnRcIixhcmd1bWVudHMpO3ZhciBhPXRoaXMuY29sb3IuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX3JlbmRlcmVyLl90aW50PWEubGV2ZWxzfSxlLnByb3RvdHlwZS5ub1RpbnQ9ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdGludD1udWxsfSxlLnByb3RvdHlwZS5fZ2V0VGludGVkSW1hZ2VDYW52YXM9ZnVuY3Rpb24oYSl7aWYoIWEuY2FudmFzKXJldHVybiBhO3ZhciBiPWYuX3RvUGl4ZWxzKGEuY2FudmFzKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7Yy53aWR0aD1hLmNhbnZhcy53aWR0aCxjLmhlaWdodD1hLmNhbnZhcy5oZWlnaHQ7Zm9yKHZhciBkPWMuZ2V0Q29udGV4dChcIjJkXCIpLGU9ZC5jcmVhdGVJbWFnZURhdGEoYS5jYW52YXMud2lkdGgsYS5jYW52YXMuaGVpZ2h0KSxnPWUuZGF0YSxoPTA7aDxiLmxlbmd0aDtoKz00KXt2YXIgaT1iW2hdLGo9YltoKzFdLGs9YltoKzJdLGw9YltoKzNdO2dbaF09aSp0aGlzLl9yZW5kZXJlci5fdGludFswXS8yNTUsZ1toKzFdPWoqdGhpcy5fcmVuZGVyZXIuX3RpbnRbMV0vMjU1LGdbaCsyXT1rKnRoaXMuX3JlbmRlcmVyLl90aW50WzJdLzI1NSxnW2grM109bCp0aGlzLl9yZW5kZXJlci5fdGludFszXS8yNTV9cmV0dXJuIGQucHV0SW1hZ2VEYXRhKGUsMCwwKSxjfSxlLnByb3RvdHlwZS5pbWFnZU1vZGU9ZnVuY3Rpb24oYSl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaW1hZ2VNb2RlXCIsYXJndW1lbnRzKSxhIT09aC5DT1JORVImJmEhPT1oLkNPUk5FUlMmJmEhPT1oLkNFTlRFUnx8KHRoaXMuX3JlbmRlcmVyLl9pbWFnZU1vZGU9YSl9LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9jb3JlL2hlbHBlcnNcIjoyMSxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9maWx0ZXJzXCI6NDJ9XSw0NTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi9maWx0ZXJzXCIpO2QuSW1hZ2U9ZnVuY3Rpb24oYSxiKXt0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yix0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaGVpZ2h0LHRoaXMuZHJhd2luZ0NvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLHRoaXMuX3BpeGVsRGVuc2l0eT0xLHRoaXMuX21vZGlmaWVkPSExLHRoaXMuX3BpeGVsc0RpcnR5PSEwLHRoaXMucGl4ZWxzPVtdfSxkLkltYWdlLnByb3RvdHlwZS5fc2V0UHJvcGVydHk9ZnVuY3Rpb24oYSxiKXt0aGlzW2FdPWIsdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmxvYWRQaXhlbHM9ZnVuY3Rpb24oKXtkLlJlbmRlcmVyMkQucHJvdG90eXBlLmxvYWRQaXhlbHMuY2FsbCh0aGlzKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUudXBkYXRlUGl4ZWxzPWZ1bmN0aW9uKGEsYixjLGUpe2QuUmVuZGVyZXIyRC5wcm90b3R5cGUudXBkYXRlUGl4ZWxzLmNhbGwodGhpcyxhLGIsYyxlKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEsYixjLGUpe3JldHVybiBkLlJlbmRlcmVyMkQucHJvdG90eXBlLmdldC5jYWxsKHRoaXMsYSxiLGMsZSl9LGQuSW1hZ2UucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7ZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zZXQuY2FsbCh0aGlzLGEsYixjKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGEsYil7MD09PWEmJjA9PT1iPyhhPXRoaXMuY2FudmFzLndpZHRoLGI9dGhpcy5jYW52YXMuaGVpZ2h0KTowPT09YT9hPXRoaXMuY2FudmFzLndpZHRoKmIvdGhpcy5jYW52YXMuaGVpZ2h0OjA9PT1iJiYoYj10aGlzLmNhbnZhcy5oZWlnaHQqYS90aGlzLmNhbnZhcy53aWR0aCksYT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihiKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Mud2lkdGg9YSxjLmhlaWdodD1iLGMuZ2V0Q29udGV4dChcIjJkXCIpLmRyYXdJbWFnZSh0aGlzLmNhbnZhcywwLDAsdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0LDAsMCxjLndpZHRoLGMuaGVpZ2h0KSx0aGlzLmNhbnZhcy53aWR0aD10aGlzLndpZHRoPWEsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaGVpZ2h0PWIsdGhpcy5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoYywwLDAsYSxiLDAsMCxhLGIpLHRoaXMucGl4ZWxzLmxlbmd0aD4wJiZ0aGlzLmxvYWRQaXhlbHMoKSx0aGlzLnNldE1vZGlmaWVkKCEwKSx0aGlzLl9waXhlbHNEaXJ0eT0hMH0sZC5JbWFnZS5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhLGIsYyxlLGYsZyxoLGksajtpZig5PT09YXJndW1lbnRzLmxlbmd0aClhPWFyZ3VtZW50c1swXSxiPWFyZ3VtZW50c1sxXSxjPWFyZ3VtZW50c1syXSxlPWFyZ3VtZW50c1szXSxmPWFyZ3VtZW50c1s0XSxnPWFyZ3VtZW50c1s1XSxoPWFyZ3VtZW50c1s2XSxpPWFyZ3VtZW50c1s3XSxqPWFyZ3VtZW50c1s4XTtlbHNle2lmKDghPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlNpZ25hdHVyZSBub3Qgc3VwcG9ydGVkXCIpO2E9dGhpcyxiPWFyZ3VtZW50c1swXSxjPWFyZ3VtZW50c1sxXSxlPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXSxnPWFyZ3VtZW50c1s0XSxoPWFyZ3VtZW50c1s1XSxpPWFyZ3VtZW50c1s2XSxqPWFyZ3VtZW50c1s3XX1kLlJlbmRlcmVyMkQuX2NvcHlIZWxwZXIodGhpcyxhLGIsYyxlLGYsZyxoLGksaiksdGhpcy5fcGl4ZWxzRGlydHk9ITB9LGQuSW1hZ2UucHJvdG90eXBlLm1hc2s9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9dGhpcyk7dmFyIGI9dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24sYz0xO2EgaW5zdGFuY2VvZiBkLlJlbmRlcmVyJiYoYz1hLl9wSW5zdC5fcGl4ZWxEZW5zaXR5KTt2YXIgZT1bYSwwLDAsYyphLndpZHRoLGMqYS5oZWlnaHQsMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHRdO3RoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVwiZGVzdGluYXRpb24taW5cIixkLkltYWdlLnByb3RvdHlwZS5jb3B5LmFwcGx5KHRoaXMsZSksdGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249Yix0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKGEsYil7ZS5hcHBseSh0aGlzLmNhbnZhcyxlW2EudG9Mb3dlckNhc2UoKV0sYiksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmJsZW5kPWZ1bmN0aW9uKCl7ZC5wcm90b3R5cGUuYmxlbmQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5zZXRNb2RpZmllZD1mdW5jdGlvbihhKXt0aGlzLl9tb2RpZmllZD1hfSxkLkltYWdlLnByb3RvdHlwZS5pc01vZGlmaWVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGlmaWVkfSxkLkltYWdlLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKGEsYil7ZC5wcm90b3R5cGUuc2F2ZUNhbnZhcyh0aGlzLmNhbnZhcyxhLGIpfSxiLmV4cG9ydHM9ZC5JbWFnZX0se1wiLi4vY29yZS9tYWluXCI6MjQsXCIuL2ZpbHRlcnNcIjo0Mn1dLDQ2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuL2ZpbHRlcnNcIik7YShcIi4uL2NvbG9yL3A1LkNvbG9yXCIpLGQucHJvdG90eXBlLnBpeGVscz1bXSxkLnByb3RvdHlwZS5ibGVuZD1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJsZW5kXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlcj90aGlzLl9yZW5kZXJlci5ibGVuZC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpOmQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYmxlbmQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29weVwiLGFyZ3VtZW50cyksZC5SZW5kZXJlcjJELnByb3RvdHlwZS5jb3B5LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbihhLGIpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImZpbHRlclwiLGFyZ3VtZW50cyksdm9pZCAwIT09dGhpcy5jYW52YXM/ZS5hcHBseSh0aGlzLmNhbnZhcyxlW2EudG9Mb3dlckNhc2UoKV0sYik6ZS5hcHBseSh0aGlzLmVsdCxlW2EudG9Mb3dlckNhc2UoKV0sYil9LGQucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZ2V0KGEsYixjLGQpfSxkLnByb3RvdHlwZS5sb2FkUGl4ZWxzPWZ1bmN0aW9uKCl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZFBpeGVsc1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIubG9hZFBpeGVscygpfSxkLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3JlbmRlcmVyLnNldChhLGIsYyl9LGQucHJvdG90eXBlLnVwZGF0ZVBpeGVscz1mdW5jdGlvbihhLGIsYyxlKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ1cGRhdGVQaXhlbHNcIixhcmd1bWVudHMpLDAhPT10aGlzLnBpeGVscy5sZW5ndGgmJnRoaXMuX3JlbmRlcmVyLnVwZGF0ZVBpeGVscyhhLGIsYyxlKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvbG9yL3A1LkNvbG9yXCI6MTYsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vZmlsdGVyc1wiOjQyfV0sNDc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7dmFyIGM9e307aWYodm9pZCAwPT09KGI9Ynx8W10pKWZvcih2YXIgZD0wO2Q8YS5sZW5ndGg7ZCsrKWJbZC50b1N0cmluZygpXT1kO2Zvcih2YXIgZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1iW2VdLGc9YVtlXTtjW2ZdPWd9cmV0dXJuIGN9ZnVuY3Rpb24gZShhKXt2YXIgYj1uZXcgaS5YTUwsYz1hLmNoaWxkTm9kZXM7aWYoYyYmYy5sZW5ndGgpe2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZj1lKGNbZF0pO2IuYWRkQ2hpbGQoZil9Yi5zZXROYW1lKGEubm9kZU5hbWUpLGIuX3NldENvbnQoYS50ZXh0Q29udGVudCksYi5fc2V0QXR0cmlidXRlcyhhKTtmb3IodmFyIGc9MDtnPGIuY2hpbGRyZW4ubGVuZ3RoO2crKyliLmNoaWxkcmVuW2ddLnBhcmVudD1iO3JldHVybiBifXJldHVybiBiLnNldE5hbWUoYS5ub2RlTmFtZSksYi5fc2V0Q29udChhLnRleHRDb250ZW50KSxiLl9zZXRBdHRyaWJ1dGVzKGEpLGJ9ZnVuY3Rpb24gZihhKXtyZXR1cm4gYS5yZXBsYWNlKC8mL2csXCImYW1wO1wiKS5yZXBsYWNlKC88L2csXCImbHQ7XCIpLnJlcGxhY2UoLz4vZyxcIiZndDtcIikucmVwbGFjZSgvXCIvZyxcIiZxdW90O1wiKS5yZXBsYWNlKC8nL2csXCImIzAzOTtcIil9ZnVuY3Rpb24gZyhhLGIpe2ImJiEwIT09YiYmXCJ0cnVlXCIhPT1ifHwoYj1cIlwiKSxhfHwoYT1cInVudGl0bGVkXCIpO3ZhciBjPVwiXCI7cmV0dXJuIGEmJmEuaW5kZXhPZihcIi5cIik+LTEmJihjPWEuc3BsaXQoXCIuXCIpLnBvcCgpKSxiJiZjIT09YiYmKGM9YixhPWErXCIuXCIrYyksW2EsY119ZnVuY3Rpb24gaChhKXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEudGFyZ2V0KX12YXIgaT1hKFwiLi4vY29yZS9tYWluXCIpO2EoXCJ3aGF0d2ctZmV0Y2hcIiksYShcImVzNi1wcm9taXNlXCIpLnBvbHlmaWxsKCk7dmFyIGo9YShcImZldGNoLWpzb25wXCIpO2EoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksaS5wcm90b3R5cGUubG9hZEpTT049ZnVuY3Rpb24oKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkSlNPTlwiLGFyZ3VtZW50cyk7Zm9yKHZhciBhLGIsYyxkPWFyZ3VtZW50c1swXSxlPXt9LGY9XCJqc29uXCIsZz0xO2c8YXJndW1lbnRzLmxlbmd0aDtnKyspe3ZhciBoPWFyZ3VtZW50c1tnXTtcInN0cmluZ1wiPT10eXBlb2YgaD9cImpzb25wXCIhPT1oJiZcImpzb25cIiE9PWh8fChmPWgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGg/YT9iPWg6YT1oOlwib2JqZWN0XCI9PXR5cGVvZiBoJiZoLmhhc093blByb3BlcnR5KFwianNvbnBDYWxsYmFja1wiKSYmKGY9XCJqc29ucFwiLGM9aCl9dmFyIGo9dGhpcztyZXR1cm4gdGhpcy5odHRwRG8oZCxcIkdFVFwiLGMsZixmdW5jdGlvbihiKXtmb3IodmFyIGMgaW4gYillW2NdPWJbY107dm9pZCAwIT09YSYmYShiKSxqLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGEpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig1LGQpLCFiKXRocm93IGE7YihhKX0pLGV9LGkucHJvdG90eXBlLmxvYWRTdHJpbmdzPWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZFN0cmluZ3NcIixhcmd1bWVudHMpO2Zvcih2YXIgYSxiLGM9W10sZD0xO2Q8YXJndW1lbnRzLmxlbmd0aDtkKyspe3ZhciBlPWFyZ3VtZW50c1tkXTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYodm9pZCAwPT09YT9hPWU6dm9pZCAwPT09YiYmKGI9ZSkpfXZhciBmPXRoaXM7cmV0dXJuIGkucHJvdG90eXBlLmh0dHBEby5jYWxsKHRoaXMsYXJndW1lbnRzWzBdLFwiR0VUXCIsXCJ0ZXh0XCIsZnVuY3Rpb24oYil7dmFyIGQ9Yi5yZXBsYWNlKC9cXHJcXG4vZyxcIlxcclwiKS5yZXBsYWNlKC9cXG4vZyxcIlxcclwiKS5zcGxpdCgvXFxyLyk7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYyxkKSx2b2lkIDAhPT1hJiZhKGMpLGYuX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYSl7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDMsYXJndW1lbnRzWzBdKSwhYil0aHJvdyBhO2IoYSl9KSxjfSxpLnByb3RvdHlwZS5sb2FkVGFibGU9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlPVtdLGY9ITEsZz1hLnN1YnN0cmluZyhhLmxhc3RJbmRleE9mKFwiLlwiKSsxLGEubGVuZ3RoKSxoPVwiLFwiLGo9ITE7XCJ0c3ZcIj09PWcmJihoPVwiXFx0XCIpO2Zvcih2YXIgaz0xO2s8YXJndW1lbnRzLmxlbmd0aDtrKyspaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYXJndW1lbnRzW2tdKXZvaWQgMD09PWI/Yj1hcmd1bWVudHNba106dm9pZCAwPT09YyYmKGM9YXJndW1lbnRzW2tdKTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBhcmd1bWVudHNba10paWYoZS5wdXNoKGFyZ3VtZW50c1trXSksXCJoZWFkZXJcIj09PWFyZ3VtZW50c1trXSYmKGY9ITApLFwiY3N2XCI9PT1hcmd1bWVudHNba10pe2lmKGopdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNldCBtdWx0aXBsZSBzZXBhcmF0b3IgdHlwZXMuXCIpO2g9XCIsXCIsaj0hMH1lbHNlIGlmKFwidHN2XCI9PT1hcmd1bWVudHNba10pe2lmKGopdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNldCBtdWx0aXBsZSBzZXBhcmF0b3IgdHlwZXMuXCIpO2g9XCJcXHRcIixqPSEwfXZhciBsPW5ldyBpLlRhYmxlLG09dGhpcztyZXR1cm4gdGhpcy5odHRwRG8oYSxcIkdFVFwiLFwidGFibGVcIixmdW5jdGlvbihhKXtmb3IodmFyIGMsZT17fSxnPTAsaj0xLG49MixvPTQscD0nXCInLHE9XCJcXHJcIixyPVwiXFxuXCIscz1bXSx0PTAsdT1udWxsLHY9ZnVuY3Rpb24oKXtlLmN1cnJlbnRTdGF0ZT1nLGUudG9rZW49XCJcIn0sdz1mdW5jdGlvbigpe3UucHVzaChlLnRva2VuKSx2KCl9LHg9ZnVuY3Rpb24oKXtlLmVzY2FwZWQ9ITEsdT1bXSx2KCl9LHk9ZnVuY3Rpb24oKXtlLmN1cnJlbnRTdGF0ZT1vLHMucHVzaCh1KSx1PW51bGx9Ozspe2lmKG51bGw9PShjPWFbdCsrXSkpe2lmKGUuZXNjYXBlZCl0aHJvdyBuZXcgRXJyb3IoXCJVbmNsb3NlZCBxdW90ZSBpbiBmaWxlLlwiKTtpZih1KXt3KCkseSgpO2JyZWFrfX1pZihudWxsPT09dSYmeCgpLGUuY3VycmVudFN0YXRlPT09Zyl7aWYoYz09PXApe2UuZXNjYXBlZD0hMCxlLmN1cnJlbnRTdGF0ZT1qO2NvbnRpbnVlfWUuY3VycmVudFN0YXRlPWp9aWYoZS5jdXJyZW50U3RhdGU9PT1qJiZlLmVzY2FwZWQpaWYoYz09PXApYVt0XT09PXA/KGUudG9rZW4rPXAsdCsrKTooZS5lc2NhcGVkPSExLGUuY3VycmVudFN0YXRlPW4pO2Vsc2V7aWYoYz09PXEpY29udGludWU7ZS50b2tlbis9Y31lbHNlIGM9PT1xPyhhW3RdPT09ciYmdCsrLHcoKSx5KCkpOmM9PT1yPyh3KCkseSgpKTpjPT09aD93KCk6ZS5jdXJyZW50U3RhdGU9PT1qJiYoZS50b2tlbis9Yyl9aWYoZilsLmNvbHVtbnM9cy5zaGlmdCgpO2Vsc2UgZm9yKGs9MDtrPHNbMF0ubGVuZ3RoO2srKylsLmNvbHVtbnNba109XCJudWxsXCI7dmFyIHo7Zm9yKGs9MDtrPHMubGVuZ3RoO2srKykoMSE9PXNba10ubGVuZ3RofHxcInVuZGVmaW5lZFwiIT09c1trXVswXSYmXCJcIiE9PXNba11bMF0pJiYoej1uZXcgaS5UYWJsZVJvdyx6LmFycj1zW2tdLHoub2JqPWQoc1trXSxsLmNvbHVtbnMpLGwuYWRkUm93KHopKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBiJiZiKGwpLG0uX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYil7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDIsYSksIWMpdGhyb3cgYjtjKGIpfSksbH0saS5wcm90b3R5cGUubG9hZFhNTD1mdW5jdGlvbigpe2Zvcih2YXIgYSxiLGM9e30sZD0xO2Q8YXJndW1lbnRzLmxlbmd0aDtkKyspe3ZhciBlPWFyZ3VtZW50c1tkXTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYodm9pZCAwPT09YT9hPWU6dm9pZCAwPT09YiYmKGI9ZSkpfXZhciBmPXRoaXM7cmV0dXJuIHRoaXMuaHR0cERvKGFyZ3VtZW50c1swXSxcIkdFVFwiLFwieG1sXCIsZnVuY3Rpb24oYil7Zm9yKHZhciBkIGluIGIpY1tkXT1iW2RdO3ZvaWQgMCE9PWEmJmEoYyksZi5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihhKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoMSxhcmd1bWVudHNbMF0pLCFiKXRocm93IGE7YihhKX0pLGN9LGkucHJvdG90eXBlLmxvYWRCeXRlcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9e30sZT10aGlzO3JldHVybiB0aGlzLmh0dHBEbyhhLFwiR0VUXCIsXCJhcnJheUJ1ZmZlclwiLGZ1bmN0aW9uKGEpe2QuYnl0ZXM9bmV3IFVpbnQ4QXJyYXkoYSksXCJmdW5jdGlvblwiPT10eXBlb2YgYiYmYihkKSxlLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGIpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig2LGEpLCFjKXRocm93IGI7YyhiKX0pLGR9LGkucHJvdG90eXBlLmh0dHBHZXQ9ZnVuY3Rpb24oKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJodHRwR2V0XCIsYXJndW1lbnRzKTt2YXIgYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBhLnNwbGljZSgxLDAsXCJHRVRcIiksaS5wcm90b3R5cGUuaHR0cERvLmFwcGx5KHRoaXMsYSl9LGkucHJvdG90eXBlLmh0dHBQb3N0PWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaHR0cFBvc3RcIixhcmd1bWVudHMpO3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGEuc3BsaWNlKDEsMCxcIlBPU1RcIiksaS5wcm90b3R5cGUuaHR0cERvLmFwcGx5KHRoaXMsYSl9LGkucHJvdG90eXBlLmh0dHBEbz1mdW5jdGlvbigpe2Zvcih2YXIgYSxiLGMsZCxmLGc9e30saD0wLGs9XCJ0ZXh0L3BsYWluXCIsbD1hcmd1bWVudHMubGVuZ3RoLTE7bD4wJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhcmd1bWVudHNbbF07bC0tKWgrKzt2YXIgbT1hcmd1bWVudHMubGVuZ3RoLWgsbj1hcmd1bWVudHNbMF07aWYoMj09PW0mJlwic3RyaW5nXCI9PXR5cGVvZiBuJiZcIm9iamVjdFwiPT10eXBlb2YgYXJndW1lbnRzWzFdKWQ9bmV3IFJlcXVlc3Qobixhcmd1bWVudHNbMV0pLGI9YXJndW1lbnRzWzJdLGM9YXJndW1lbnRzWzNdO2Vsc2V7Zm9yKHZhciBvLHA9XCJHRVRcIixxPTE7cTxhcmd1bWVudHMubGVuZ3RoO3ErKyl7dmFyIHI9YXJndW1lbnRzW3FdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiByKVwiR0VUXCI9PT1yfHxcIlBPU1RcIj09PXJ8fFwiUFVUXCI9PT1yfHxcIkRFTEVURVwiPT09cj9wPXI6XCJqc29uXCI9PT1yfHxcImpzb25wXCI9PT1yfHxcImJpbmFyeVwiPT09cnx8XCJhcnJheUJ1ZmZlclwiPT09cnx8XCJ4bWxcIj09PXJ8fFwidGV4dFwiPT09cnx8XCJ0YWJsZVwiPT09cj9hPXI6bz1yO2Vsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIHIpbz1yLnRvU3RyaW5nKCk7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgcilpZihyLmhhc093blByb3BlcnR5KFwianNvbnBDYWxsYmFja1wiKSlmb3IodmFyIHMgaW4gcilnW3NdPXJbc107ZWxzZSBvPUpTT04uc3RyaW5naWZ5KHIpLGs9XCJhcHBsaWNhdGlvbi9qc29uXCI7ZWxzZVwiZnVuY3Rpb25cIj09dHlwZW9mIHImJihiP2M9cjpiPXIpfWQ9bmV3IFJlcXVlc3Qobix7bWV0aG9kOnAsbW9kZTpcImNvcnNcIixib2R5Om8saGVhZGVyczpuZXcgSGVhZGVycyh7XCJDb250ZW50LVR5cGVcIjprfSl9KX1yZXR1cm4gYXx8KGE9LTEhPT1uLmluZGV4T2YoXCJqc29uXCIpP1wianNvblwiOi0xIT09bi5pbmRleE9mKFwieG1sXCIpP1wieG1sXCI6XCJ0ZXh0XCIpLGY9XCJqc29ucFwiPT09YT9qKG4sZyk6ZmV0Y2goZCksZj1mLnRoZW4oZnVuY3Rpb24oYil7aWYoIWIub2spe3ZhciBjPW5ldyBFcnJvcihiLmJvZHkpO3Rocm93IGMuc3RhdHVzPWIuc3RhdHVzLGMub2s9ITEsY312YXIgZD1iLmhlYWRlcnMuZ2V0KFwiY29udGVudC1sZW5ndGhcIik7c3dpdGNoKGQmJmQ+NjRlNiYmaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDcsbiksYSl7Y2FzZVwianNvblwiOmNhc2VcImpzb25wXCI6cmV0dXJuIGIuanNvbigpO2Nhc2VcImJpbmFyeVwiOnJldHVybiBiLmJsb2IoKTtjYXNlXCJhcnJheUJ1ZmZlclwiOnJldHVybiBiLmFycmF5QnVmZmVyKCk7Y2FzZVwieG1sXCI6cmV0dXJuIGIudGV4dCgpLnRoZW4oZnVuY3Rpb24oYSl7cmV0dXJuIGUoKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhhLFwidGV4dC94bWxcIikuZG9jdW1lbnRFbGVtZW50KX0pO2RlZmF1bHQ6cmV0dXJuIGIudGV4dCgpfX0pLGYudGhlbihifHxmdW5jdGlvbigpe30pLGYuY2F0Y2goY3x8Y29uc29sZS5lcnJvciksZn0sd2luZG93LlVSTD13aW5kb3cuVVJMfHx3aW5kb3cud2Via2l0VVJMLGkucHJvdG90eXBlLl9wV3JpdGVycz1bXSxpLnByb3RvdHlwZS5jcmVhdGVXcml0ZXI9ZnVuY3Rpb24oYSxiKXt2YXIgYztmb3IodmFyIGQgaW4gaS5wcm90b3R5cGUuX3BXcml0ZXJzKWlmKGkucHJvdG90eXBlLl9wV3JpdGVyc1tkXS5uYW1lPT09YSlyZXR1cm4gYz1uZXcgaS5QcmludFdyaXRlcihhK3RoaXMubWlsbGlzKCksYiksaS5wcm90b3R5cGUuX3BXcml0ZXJzLnB1c2goYyksYztyZXR1cm4gYz1uZXcgaS5QcmludFdyaXRlcihhLGIpLGkucHJvdG90eXBlLl9wV3JpdGVycy5wdXNoKGMpLGN9LGkuUHJpbnRXcml0ZXI9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO3RoaXMubmFtZT1hLHRoaXMuY29udGVudD1cIlwiLHRoaXMud3JpdGU9ZnVuY3Rpb24oYSl7dGhpcy5jb250ZW50Kz1hfSx0aGlzLnByaW50PWZ1bmN0aW9uKGEpe3RoaXMuY29udGVudCs9YStcIlxcblwifSx0aGlzLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5jb250ZW50PVwiXCJ9LHRoaXMuY2xvc2U9ZnVuY3Rpb24oKXt2YXIgZD1bXTtkLnB1c2godGhpcy5jb250ZW50KSxpLnByb3RvdHlwZS53cml0ZUZpbGUoZCxhLGIpO2Zvcih2YXIgZSBpbiBpLnByb3RvdHlwZS5fcFdyaXRlcnMpaS5wcm90b3R5cGUuX3BXcml0ZXJzW2VdLm5hbWU9PT10aGlzLm5hbWUmJmkucHJvdG90eXBlLl9wV3JpdGVycy5zcGxpY2UoZSwxKTtjLmNsZWFyKCksYz17fX19LGkucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWFyZ3VtZW50cyxlPXRoaXMuX2N1ckVsZW1lbnQuZWx0O2lmKDA9PT1kLmxlbmd0aClyZXR1cm4gdm9pZCBpLnByb3RvdHlwZS5zYXZlQ2FudmFzKGUpO2lmKGRbMF1pbnN0YW5jZW9mIGkuUmVuZGVyZXJ8fGRbMF1pbnN0YW5jZW9mIGkuR3JhcGhpY3MpcmV0dXJuIHZvaWQgaS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhkWzBdLmVsdCxkWzFdLGRbMl0pO2lmKDE9PT1kLmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIGRbMF0paS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhlLGRbMF0pO2Vsc2V7c3dpdGNoKGcoZFsxXSxkWzJdKVsxXSl7Y2FzZVwianNvblwiOnJldHVybiB2b2lkIGkucHJvdG90eXBlLnNhdmVKU09OKGRbMF0sZFsxXSxkWzJdKTtjYXNlXCJ0eHRcIjpyZXR1cm4gdm9pZCBpLnByb3RvdHlwZS5zYXZlU3RyaW5ncyhkWzBdLGRbMV0sZFsyXSk7ZGVmYXVsdDpkWzBdaW5zdGFuY2VvZiBBcnJheT9pLnByb3RvdHlwZS5zYXZlU3RyaW5ncyhkWzBdLGRbMV0sZFsyXSk6ZFswXWluc3RhbmNlb2YgaS5UYWJsZT9pLnByb3RvdHlwZS5zYXZlVGFibGUoZFswXSxkWzFdLGRbMl0pOmRbMF1pbnN0YW5jZW9mIGkuSW1hZ2U/aS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhkWzBdLmNhbnZhcyxkWzFdKTpkWzBdaW5zdGFuY2VvZiBpLlNvdW5kRmlsZSYmaS5wcm90b3R5cGUuc2F2ZVNvdW5kKGRbMF0sZFsxXSxkWzJdLGRbM10pfX19LGkucHJvdG90eXBlLnNhdmVKU09OPWZ1bmN0aW9uKGEsYixjKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlSlNPTlwiLGFyZ3VtZW50cyk7dmFyIGQ7ZD1jP0pTT04uc3RyaW5naWZ5KGEpOkpTT04uc3RyaW5naWZ5KGEsdm9pZCAwLDIpLHRoaXMuc2F2ZVN0cmluZ3MoZC5zcGxpdChcIlxcblwiKSxiLFwianNvblwiKX0saS5wcm90b3R5cGUuc2F2ZUpTT05PYmplY3Q9aS5wcm90b3R5cGUuc2F2ZUpTT04saS5wcm90b3R5cGUuc2F2ZUpTT05BcnJheT1pLnByb3RvdHlwZS5zYXZlSlNPTixpLnByb3RvdHlwZS5zYXZlU3RyaW5ncz1mdW5jdGlvbihhLGIsYyl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZVN0cmluZ3NcIixhcmd1bWVudHMpO2Zvcih2YXIgZD1jfHxcInR4dFwiLGU9dGhpcy5jcmVhdGVXcml0ZXIoYixkKSxmPTA7ZjxhLmxlbmd0aDtmKyspYS5sZW5ndGgsZS5wcmludChhW2ZdKTtlLmNsb3NlKCksZS5jbGVhcigpfSxpLnByb3RvdHlwZS5zYXZlVGFibGU9ZnVuY3Rpb24oYSxiLGMpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVUYWJsZVwiLGFyZ3VtZW50cyk7dmFyIGQ7ZD12b2lkIDA9PT1jP2Iuc3Vic3RyaW5nKGIubGFzdEluZGV4T2YoXCIuXCIpKzEsYi5sZW5ndGgpOmM7dmFyIGU9dGhpcy5jcmVhdGVXcml0ZXIoYixkKSxnPWEuY29sdW1ucyxoPVwiLFwiO2lmKFwidHN2XCI9PT1kJiYoaD1cIlxcdFwiKSxcImh0bWxcIiE9PWQpe2lmKFwiMFwiIT09Z1swXSl7Zm9yKHZhciBqPTA7ajxnLmxlbmd0aDtqKyspajxnLmxlbmd0aC0xP2Uud3JpdGUoZ1tqXStoKTplLndyaXRlKGdbal0pO2Uud3JpdGUoXCJcXG5cIil9Zm9yKHZhciBrPTA7azxhLnJvd3MubGVuZ3RoO2srKyl7dmFyIGw7Zm9yKGw9MDtsPGEucm93c1trXS5hcnIubGVuZ3RoO2wrKylsPGEucm93c1trXS5hcnIubGVuZ3RoLTE/ZS53cml0ZShhLnJvd3Nba10uYXJyW2xdK2gpOihhLnJvd3MubGVuZ3RoLGUud3JpdGUoYS5yb3dzW2tdLmFycltsXSkpO2Uud3JpdGUoXCJcXG5cIil9fWVsc2V7ZS5wcmludChcIjxodG1sPlwiKSxlLnByaW50KFwiPGhlYWQ+XCIpO3ZhciBtPScgIDxtZXRhIGh0dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50JztpZihtKz0nPVwidGV4dC9odG1sO2NoYXJzZXQ9dXRmLThcIiAvPicsZS5wcmludChtKSxlLnByaW50KFwiPC9oZWFkPlwiKSxlLnByaW50KFwiPGJvZHk+XCIpLGUucHJpbnQoXCIgIDx0YWJsZT5cIiksXCIwXCIhPT1nWzBdKXtlLnByaW50KFwiICAgIDx0cj5cIik7Zm9yKHZhciBuPTA7bjxnLmxlbmd0aDtuKyspe3ZhciBvPWYoZ1tuXSk7ZS5wcmludChcIiAgICAgIDx0ZD5cIitvKSxlLnByaW50KFwiICAgICAgPC90ZD5cIil9ZS5wcmludChcIiAgICA8L3RyPlwiKX1mb3IodmFyIHA9MDtwPGEucm93cy5sZW5ndGg7cCsrKXtlLnByaW50KFwiICAgIDx0cj5cIik7Zm9yKHZhciBxPTA7cTxhLmNvbHVtbnMubGVuZ3RoO3ErKyl7dmFyIHI9YS5yb3dzW3BdLmdldFN0cmluZyhxKSxzPWYocik7ZS5wcmludChcIiAgICAgIDx0ZD5cIitzKSxlLnByaW50KFwiICAgICAgPC90ZD5cIil9ZS5wcmludChcIiAgICA8L3RyPlwiKX1lLnByaW50KFwiICA8L3RhYmxlPlwiKSxlLnByaW50KFwiPC9ib2R5PlwiKSxlLnByaW50KFwiPC9odG1sPlwiKX1lLmNsb3NlKCksZS5jbGVhcigpfSxpLnByb3RvdHlwZS53cml0ZUZpbGU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7aS5wcm90b3R5cGUuX2lzU2FmYXJpKCkmJihkPVwidGV4dC9wbGFpblwiKTt2YXIgZT1uZXcgQmxvYihhLHt0eXBlOmR9KTtpLnByb3RvdHlwZS5kb3dubG9hZEZpbGUoZSxiLGMpfSxpLnByb3RvdHlwZS5kb3dubG9hZEZpbGU9ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWcoYyxkKSxmPWVbMF07aWYoYiBpbnN0YW5jZW9mIEJsb2Ipe3JldHVybiB2b2lkIGEoXCJmaWxlLXNhdmVyXCIpLnNhdmVBcyhiLGYpfXZhciBqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO2lmKGouaHJlZj1iLGouZG93bmxvYWQ9ZixqLm9uY2xpY2s9ZnVuY3Rpb24oYSl7aChhKSxhLnN0b3BQcm9wYWdhdGlvbigpfSxqLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChqKSxpLnByb3RvdHlwZS5faXNTYWZhcmkoKSl7dmFyIGs9XCJIZWxsbywgU2FmYXJpIHVzZXIhIFRvIGRvd25sb2FkIHRoaXMgZmlsZS4uLlxcblwiO2srPVwiMS4gR28gdG8gRmlsZSAtLVxceDNlIFNhdmUgQXMuXFxuXCIsays9JzIuIENob29zZSBcIlBhZ2UgU291cmNlXCIgYXMgdGhlIEZvcm1hdC5cXG4nLGsrPSczLiBOYW1lIGl0IHdpdGggdGhpcyBleHRlbnNpb246IC5cIicrZVsxXSsnXCInLGFsZXJ0KGspfWouY2xpY2soKX0saS5wcm90b3R5cGUuX2NoZWNrRmlsZUV4dGVuc2lvbj1nLGkucHJvdG90eXBlLl9pc1NhZmFyaT1mdW5jdGlvbigpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2luZG93LkhUTUxFbGVtZW50KS5pbmRleE9mKFwiQ29uc3RydWN0b3JcIik+MH0sYi5leHBvcnRzPWl9LHtcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjQsXCJlczYtcHJvbWlzZVwiOjQsXCJmZXRjaC1qc29ucFwiOjUsXCJmaWxlLXNhdmVyXCI6NixcIndoYXR3Zy1mZXRjaFwiOjEyfV0sNDg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuVGFibGU9ZnVuY3Rpb24oYSl7dGhpcy5jb2x1bW5zPVtdLHRoaXMucm93cz1bXX0sZC5UYWJsZS5wcm90b3R5cGUuYWRkUm93PWZ1bmN0aW9uKGEpe3ZhciBiPWF8fG5ldyBkLlRhYmxlUm93O2lmKHZvaWQgMD09PWIuYXJyfHx2b2lkIDA9PT1iLm9iail0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFRhYmxlUm93OiBcIitiKTtyZXR1cm4gYi50YWJsZT10aGlzLHRoaXMucm93cy5wdXNoKGIpLGJ9LGQuVGFibGUucHJvdG90eXBlLnJlbW92ZVJvdz1mdW5jdGlvbihhKXt0aGlzLnJvd3NbYV0udGFibGU9bnVsbDt2YXIgYj10aGlzLnJvd3Muc3BsaWNlKGErMSx0aGlzLnJvd3MubGVuZ3RoKTt0aGlzLnJvd3MucG9wKCksdGhpcy5yb3dzPXRoaXMucm93cy5jb25jYXQoYil9LGQuVGFibGUucHJvdG90eXBlLmdldFJvdz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3dzW2FdfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm93c30sZC5UYWJsZS5wcm90b3R5cGUuZmluZFJvdz1mdW5jdGlvbihhLGIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiKXtmb3IodmFyIGM9MDtjPHRoaXMucm93cy5sZW5ndGg7YysrKWlmKHRoaXMucm93c1tjXS5vYmpbYl09PT1hKXJldHVybiB0aGlzLnJvd3NbY119ZWxzZSBmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKWlmKHRoaXMucm93c1tkXS5hcnJbYl09PT1hKXJldHVybiB0aGlzLnJvd3NbZF07cmV0dXJuIG51bGx9LGQuVGFibGUucHJvdG90eXBlLmZpbmRSb3dzPWZ1bmN0aW9uKGEsYil7dmFyIGM9W107aWYoXCJzdHJpbmdcIj09dHlwZW9mIGIpZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKyl0aGlzLnJvd3NbZF0ub2JqW2JdPT09YSYmYy5wdXNoKHRoaXMucm93c1tkXSk7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMucm93cy5sZW5ndGg7ZSsrKXRoaXMucm93c1tlXS5hcnJbYl09PT1hJiZjLnB1c2godGhpcy5yb3dzW2VdKTtyZXR1cm4gY30sZC5UYWJsZS5wcm90b3R5cGUubWF0Y2hSb3c9ZnVuY3Rpb24oYSxiKXtpZihcIm51bWJlclwiPT10eXBlb2YgYil7Zm9yKHZhciBjPTA7Yzx0aGlzLnJvd3MubGVuZ3RoO2MrKylpZih0aGlzLnJvd3NbY10uYXJyW2JdLm1hdGNoKGEpKXJldHVybiB0aGlzLnJvd3NbY119ZWxzZSBmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKWlmKHRoaXMucm93c1tkXS5vYmpbYl0ubWF0Y2goYSkpcmV0dXJuIHRoaXMucm93c1tkXTtyZXR1cm4gbnVsbH0sZC5UYWJsZS5wcm90b3R5cGUubWF0Y2hSb3dzPWZ1bmN0aW9uKGEsYil7dmFyIGM9W107aWYoXCJudW1iZXJcIj09dHlwZW9mIGIpZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKyl0aGlzLnJvd3NbZF0uYXJyW2JdLm1hdGNoKGEpJiZjLnB1c2godGhpcy5yb3dzW2RdKTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5yb3dzLmxlbmd0aDtlKyspdGhpcy5yb3dzW2VdLm9ialtiXS5tYXRjaChhKSYmYy5wdXNoKHRoaXMucm93c1tlXSk7cmV0dXJuIGN9LGQuVGFibGUucHJvdG90eXBlLmdldENvbHVtbj1mdW5jdGlvbihhKXt2YXIgYj1bXTtpZihcInN0cmluZ1wiPT10eXBlb2YgYSlmb3IodmFyIGM9MDtjPHRoaXMucm93cy5sZW5ndGg7YysrKWIucHVzaCh0aGlzLnJvd3NbY10ub2JqW2FdKTtlbHNlIGZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspYi5wdXNoKHRoaXMucm93c1tkXS5hcnJbYV0pO3JldHVybiBifSxkLlRhYmxlLnByb3RvdHlwZS5jbGVhclJvd3M9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5yb3dzLHRoaXMucm93cz1bXX0sZC5UYWJsZS5wcm90b3R5cGUuYWRkQ29sdW1uPWZ1bmN0aW9uKGEpe3ZhciBiPWF8fG51bGw7dGhpcy5jb2x1bW5zLnB1c2goYil9LGQuVGFibGUucHJvdG90eXBlLmdldENvbHVtbkNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5sZW5ndGh9LGQuVGFibGUucHJvdG90eXBlLmdldFJvd0NvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm93cy5sZW5ndGh9LGQuVGFibGUucHJvdG90eXBlLnJlbW92ZVRva2Vucz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csXCJcXFxcJCZcIil9LGQ9W10sZT0wO2U8YS5sZW5ndGg7ZSsrKWQucHVzaChjKGEuY2hhckF0KGUpKSk7dmFyIGY9bmV3IFJlZ0V4cChkLmpvaW4oXCJ8XCIpLFwiZ1wiKTtpZih2b2lkIDA9PT1iKWZvcih2YXIgZz0wO2c8dGhpcy5jb2x1bW5zLmxlbmd0aDtnKyspZm9yKHZhciBoPTA7aDx0aGlzLnJvd3MubGVuZ3RoO2grKyl7dmFyIGk9dGhpcy5yb3dzW2hdLmFycltnXTtpPWkucmVwbGFjZShmLFwiXCIpLHRoaXMucm93c1toXS5hcnJbZ109aSx0aGlzLnJvd3NbaF0ub2JqW3RoaXMuY29sdW1uc1tnXV09aX1lbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBiKWZvcih2YXIgaj0wO2o8dGhpcy5yb3dzLmxlbmd0aDtqKyspe3ZhciBrPXRoaXMucm93c1tqXS5vYmpbYl07az1rLnJlcGxhY2UoZixcIlwiKSx0aGlzLnJvd3Nbal0ub2JqW2JdPWs7dmFyIGw9dGhpcy5jb2x1bW5zLmluZGV4T2YoYik7dGhpcy5yb3dzW2pdLmFycltsXT1rfWVsc2UgZm9yKHZhciBtPTA7bTx0aGlzLnJvd3MubGVuZ3RoO20rKyl7dmFyIG49dGhpcy5yb3dzW21dLmFycltiXTtuPW4ucmVwbGFjZShmLFwiXCIpLHRoaXMucm93c1ttXS5hcnJbYl09bix0aGlzLnJvd3NbbV0ub2JqW3RoaXMuY29sdW1uc1tiXV09bn19LGQuVGFibGUucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IFJlZ0V4cChcIiBcIixcImdcIik7aWYodm9pZCAwPT09YSlmb3IodmFyIGM9MDtjPHRoaXMuY29sdW1ucy5sZW5ndGg7YysrKWZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspe3ZhciBlPXRoaXMucm93c1tkXS5hcnJbY107ZT1lLnJlcGxhY2UoYixcIlwiKSx0aGlzLnJvd3NbZF0uYXJyW2NdPWUsdGhpcy5yb3dzW2RdLm9ialt0aGlzLmNvbHVtbnNbY11dPWV9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYSlmb3IodmFyIGY9MDtmPHRoaXMucm93cy5sZW5ndGg7ZisrKXt2YXIgZz10aGlzLnJvd3NbZl0ub2JqW2FdO2c9Zy5yZXBsYWNlKGIsXCJcIiksdGhpcy5yb3dzW2ZdLm9ialthXT1nO3ZhciBoPXRoaXMuY29sdW1ucy5pbmRleE9mKGEpO3RoaXMucm93c1tmXS5hcnJbaF09Z31lbHNlIGZvcih2YXIgaT0wO2k8dGhpcy5yb3dzLmxlbmd0aDtpKyspe3ZhciBqPXRoaXMucm93c1tpXS5hcnJbYV07aj1qLnJlcGxhY2UoYixcIlwiKSx0aGlzLnJvd3NbaV0uYXJyW2FdPWosdGhpcy5yb3dzW2ldLm9ialt0aGlzLmNvbHVtbnNbYV1dPWp9fSxkLlRhYmxlLnByb3RvdHlwZS5yZW1vdmVDb2x1bW49ZnVuY3Rpb24oYSl7dmFyIGIsYztcInN0cmluZ1wiPT10eXBlb2YgYT8oYj1hLGM9dGhpcy5jb2x1bW5zLmluZGV4T2YoYSkpOihjPWEsYj10aGlzLmNvbHVtbnNbYV0pO3ZhciBkPXRoaXMuY29sdW1ucy5zcGxpY2UoYysxLHRoaXMuY29sdW1ucy5sZW5ndGgpO3RoaXMuY29sdW1ucy5wb3AoKSx0aGlzLmNvbHVtbnM9dGhpcy5jb2x1bW5zLmNvbmNhdChkKTtmb3IodmFyIGU9MDtlPHRoaXMucm93cy5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLnJvd3NbZV0uYXJyLGc9Zi5zcGxpY2UoYysxLGYubGVuZ3RoKTtmLnBvcCgpLHRoaXMucm93c1tlXS5hcnI9Zi5jb25jYXQoZyksZGVsZXRlIHRoaXMucm93c1tlXS5vYmpbYl19fSxkLlRhYmxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMucm93c1thXS5zZXQoYixjKX0sZC5UYWJsZS5wcm90b3R5cGUuc2V0TnVtPWZ1bmN0aW9uKGEsYixjKXt0aGlzLnJvd3NbYV0uc2V0TnVtKGIsYyl9LGQuVGFibGUucHJvdG90eXBlLnNldFN0cmluZz1mdW5jdGlvbihhLGIsYyl7dGhpcy5yb3dzW2FdLnNldFN0cmluZyhiLGMpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5yb3dzW2FdLmdldChiKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0TnVtPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucm93c1thXS5nZXROdW0oYil9LGQuVGFibGUucHJvdG90eXBlLmdldFN0cmluZz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnJvd3NbYV0uZ2V0U3RyaW5nKGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRPYmplY3Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZD17fSxlPTA7ZTx0aGlzLnJvd3MubGVuZ3RoO2UrKylpZihiPXRoaXMucm93c1tlXS5vYmosXCJzdHJpbmdcIj09dHlwZW9mIGEpe2lmKCEodGhpcy5jb2x1bW5zLmluZGV4T2YoYSk+PTApKXRocm93IG5ldyBFcnJvcignVGhpcyB0YWJsZSBoYXMgbm8gY29sdW1uIG5hbWVkIFwiJythKydcIicpO2M9YlthXSxkW2NdPWJ9ZWxzZSBkW2VdPXRoaXMucm93c1tlXS5vYmo7cmV0dXJuIGR9LGQuVGFibGUucHJvdG90eXBlLmdldEFycmF5PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPVtdLGI9MDtiPHRoaXMucm93cy5sZW5ndGg7YisrKWEucHVzaCh0aGlzLnJvd3NbYl0uYXJyKTtyZXR1cm4gYX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNDk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuVGFibGVSb3c9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkPXt9O2EmJihiPWJ8fFwiLFwiLGM9YS5zcGxpdChiKSk7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWUsZz1jW2VdO2RbZl09Z310aGlzLmFycj1jLHRoaXMub2JqPWQsdGhpcy50YWJsZT1udWxsfSxkLlRhYmxlUm93LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXtpZihcInN0cmluZ1wiPT10eXBlb2YgYSl7dmFyIGM9dGhpcy50YWJsZS5jb2x1bW5zLmluZGV4T2YoYSk7aWYoIShjPj0wKSl0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgdGFibGUgaGFzIG5vIGNvbHVtbiBuYW1lZCBcIicrYSsnXCInKTt0aGlzLm9ialthXT1iLHRoaXMuYXJyW2NdPWJ9ZWxzZXtpZighKGE8dGhpcy50YWJsZS5jb2x1bW5zLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKFwiQ29sdW1uICNcIithK1wiIGlzIG91dCBvZiB0aGUgcmFuZ2Ugb2YgdGhpcyB0YWJsZVwiKTt0aGlzLmFyclthXT1iO3ZhciBkPXRoaXMudGFibGUuY29sdW1uc1thXTt0aGlzLm9ialtkXT1ifX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuc2V0TnVtPWZ1bmN0aW9uKGEsYil7dmFyIGM9cGFyc2VGbG9hdChiKTt0aGlzLnNldChhLGMpfSxkLlRhYmxlUm93LnByb3RvdHlwZS5zZXRTdHJpbmc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLnRvU3RyaW5nKCk7dGhpcy5zZXQoYSxjKX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhP3RoaXMub2JqW2FdOnRoaXMuYXJyW2FdfSxkLlRhYmxlUm93LnByb3RvdHlwZS5nZXROdW09ZnVuY3Rpb24oYSl7dmFyIGI7aWYoYj1cInN0cmluZ1wiPT10eXBlb2YgYT9wYXJzZUZsb2F0KHRoaXMub2JqW2FdKTpwYXJzZUZsb2F0KHRoaXMuYXJyW2FdKSxcIk5hTlwiPT09Yi50b1N0cmluZygpKXRocm93XCJFcnJvcjogXCIrdGhpcy5vYmpbYV0rXCIgaXMgTmFOIChOb3QgYSBOdW1iZXIpXCI7cmV0dXJuIGJ9LGQuVGFibGVSb3cucHJvdG90eXBlLmdldFN0cmluZz1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYT90aGlzLm9ialthXS50b1N0cmluZygpOnRoaXMuYXJyW2FdLnRvU3RyaW5nKCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDUwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlhNTD1mdW5jdGlvbigpe3RoaXMubmFtZT1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLmNoaWxkcmVuPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy5jb250ZW50PW51bGx9LGQuWE1MLnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnR9LGQuWE1MLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZX0sZC5YTUwucHJvdG90eXBlLnNldE5hbWU9ZnVuY3Rpb24oYSl7dGhpcy5uYW1lPWF9LGQuWE1MLnByb3RvdHlwZS5oYXNDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD4wfSxkLlhNTC5wcm90b3R5cGUubGlzdENoaWxkcmVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLm5hbWV9KX0sZC5YTUwucHJvdG90eXBlLmdldENoaWxkcmVuPWZ1bmN0aW9uKGEpe3JldHVybiBhP3RoaXMuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBiLm5hbWU9PT1hfSk6dGhpcy5jaGlsZHJlbn0sZC5YTUwucHJvdG90eXBlLmdldENoaWxkPWZ1bmN0aW9uKGEpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBhKXJldHVybiB0aGlzLmNoaWxkcmVuW2FdO2Zvcih2YXIgYj0wO2I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YisrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2JdO2lmKGMubmFtZT09PWEpcmV0dXJuIGN9fSxkLlhNTC5wcm90b3R5cGUuYWRkQ2hpbGQ9ZnVuY3Rpb24oYSl7YSBpbnN0YW5jZW9mIGQuWE1MJiZ0aGlzLmNoaWxkcmVuLnB1c2goYSl9LGQuWE1MLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbihhKXt2YXIgYj0tMTtpZihcInN0cmluZ1wiPT10eXBlb2YgYSl7Zm9yKHZhciBjPTA7Yzx0aGlzLmNoaWxkcmVuLmxlbmd0aDtjKyspaWYodGhpcy5jaGlsZHJlbltjXS5uYW1lPT09YSl7Yj1jO2JyZWFrfX1lbHNlIGI9YTstMSE9PWImJnRoaXMuY2hpbGRyZW4uc3BsaWNlKGIsMSl9LGQuWE1MLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVDb3VudD1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpLmxlbmd0aH0sZC5YTUwucHJvdG90eXBlLmxpc3RBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcyl9LGQuWE1MLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGU9ZnVuY3Rpb24oYSl7cmV0dXJuISF0aGlzLmF0dHJpYnV0ZXNbYV19LGQuWE1MLnByb3RvdHlwZS5nZXROdW09ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTnVtYmVyKHRoaXMuYXR0cmlidXRlc1thXSl8fGJ8fDB9LGQuWE1MLnByb3RvdHlwZS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gU3RyaW5nKHRoaXMuYXR0cmlidXRlc1thXSl8fGJ8fG51bGx9LGQuWE1MLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXt0aGlzLmF0dHJpYnV0ZXNbYV0mJih0aGlzLmF0dHJpYnV0ZXNbYV09Yil9LGQuWE1MLnByb3RvdHlwZS5nZXRDb250ZW50PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNvbnRlbnR8fGF8fG51bGx9LGQuWE1MLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKGEpe3RoaXMuY2hpbGRyZW4ubGVuZ3RofHwodGhpcy5jb250ZW50PWEpfSxkLlhNTC5wcm90b3R5cGUuX3NldENvbnQ9ZnVuY3Rpb24oYSl7dmFyIGI7Yj1hLGI9Yi5yZXBsYWNlKC9cXHNcXHMrL2csXCIsXCIpLHRoaXMuY29udGVudD1ifSxkLlhNTC5wcm90b3R5cGUuX3NldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oYSl7dmFyIGI9e30sYz1hLmF0dHJpYnV0ZXM7aWYoYylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXTtiW2Uubm9kZU5hbWVdPWUubm9kZVZhbHVlfXRoaXMuYXR0cmlidXRlcz1ifSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1MTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIE1hdGguaHlwb3QpcmV0dXJuIE1hdGguaHlwb3QuYXBwbHkobnVsbCxhcmd1bWVudHMpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGU9W10sZj0wLGc9MDtnPGQ7ZysrKXt2YXIgaD1hcmd1bWVudHNbZ11cbjtpZigoaD0raCk9PT0xLzB8fGg9PT0tMS8wKXJldHVybiAxLzA7aD1NYXRoLmFicyhoKSxoPmYmJihmPWgpLGVbZ109aH0wPT09ZiYmKGY9MSk7Zm9yKHZhciBpPTAsaj0wLGs9MDtrPGQ7aysrKXt2YXIgbD1lW2tdL2YsbT1sKmwtaixuPWkrbTtqPW4taS1tLGk9bn1yZXR1cm4gTWF0aC5zcXJ0KGkpKmZ9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKTtlLnByb3RvdHlwZS5hYnM9TWF0aC5hYnMsZS5wcm90b3R5cGUuY2VpbD1NYXRoLmNlaWwsZS5wcm90b3R5cGUuY29uc3RyYWluPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29uc3RyYWluXCIsYXJndW1lbnRzKSxNYXRoLm1heChNYXRoLm1pbihhLGMpLGIpfSxlLnByb3RvdHlwZS5kaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImRpc3RcIixhcmd1bWVudHMpLDQ9PT1hcmd1bWVudHMubGVuZ3RoP2QoYXJndW1lbnRzWzJdLWFyZ3VtZW50c1swXSxhcmd1bWVudHNbM10tYXJndW1lbnRzWzFdKTo2PT09YXJndW1lbnRzLmxlbmd0aD9kKGFyZ3VtZW50c1szXS1hcmd1bWVudHNbMF0sYXJndW1lbnRzWzRdLWFyZ3VtZW50c1sxXSxhcmd1bWVudHNbNV0tYXJndW1lbnRzWzJdKTp2b2lkIDB9LGUucHJvdG90eXBlLmV4cD1NYXRoLmV4cCxlLnByb3RvdHlwZS5mbG9vcj1NYXRoLmZsb29yLGUucHJvdG90eXBlLmxlcnA9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsZXJwXCIsYXJndW1lbnRzKSxjKihiLWEpK2F9LGUucHJvdG90eXBlLmxvZz1NYXRoLmxvZyxlLnByb3RvdHlwZS5tYWc9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWFnXCIsYXJndW1lbnRzKSxkKGEsYil9LGUucHJvdG90eXBlLm1hcD1mdW5jdGlvbihhLGIsYyxkLGYsZyl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWFwXCIsYXJndW1lbnRzKTt2YXIgaD0oYS1iKS8oYy1iKSooZi1kKStkO3JldHVybiBnP2Q8Zj90aGlzLmNvbnN0cmFpbihoLGQsZik6dGhpcy5jb25zdHJhaW4oaCxmLGQpOmh9LGUucHJvdG90eXBlLm1heD1mdW5jdGlvbigpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYXhcIixhcmd1bWVudHMpLGFyZ3VtZW50c1swXWluc3RhbmNlb2YgQXJyYXk/TWF0aC5tYXguYXBwbHkobnVsbCxhcmd1bWVudHNbMF0pOk1hdGgubWF4LmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZS5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1pblwiLGFyZ3VtZW50cyksYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBBcnJheT9NYXRoLm1pbi5hcHBseShudWxsLGFyZ3VtZW50c1swXSk6TWF0aC5taW4uYXBwbHkobnVsbCxhcmd1bWVudHMpfSxlLnByb3RvdHlwZS5ub3JtPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibm9ybVwiLGFyZ3VtZW50cyksdGhpcy5tYXAoYSxiLGMsMCwxKX0sZS5wcm90b3R5cGUucG93PU1hdGgucG93LGUucHJvdG90eXBlLnJvdW5kPU1hdGgucm91bmQsZS5wcm90b3R5cGUuc3E9ZnVuY3Rpb24oYSl7cmV0dXJuIGEqYX0sZS5wcm90b3R5cGUuc3FydD1NYXRoLnNxcnQsYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmNyZWF0ZVZlY3Rvcj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBkP25ldyBkLlZlY3Rvcih0aGlzLGFyZ3VtZW50cyk6bmV3IGQuVmVjdG9yKGEsYixjKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZCxlPWEoXCIuLi9jb3JlL21haW5cIiksZj00LGc9MTw8ZixoPTgsaT0xPDxoLGo9NDA5NSxrPTQsbD0uNSxtPWZ1bmN0aW9uKGEpe3JldHVybi41KigxLU1hdGguY29zKGEqTWF0aC5QSSkpfTtlLnByb3RvdHlwZS5ub2lzZT1mdW5jdGlvbihhLGIsYyl7aWYoYj1ifHwwLGM9Y3x8MCxudWxsPT1kKXtkPW5ldyBBcnJheShqKzEpO2Zvcih2YXIgZT0wO2U8aisxO2UrKylkW2VdPU1hdGgucmFuZG9tKCl9YTwwJiYoYT0tYSksYjwwJiYoYj0tYiksYzwwJiYoYz0tYyk7Zm9yKHZhciBuLG8scCxxLHIscz1NYXRoLmZsb29yKGEpLHQ9TWF0aC5mbG9vcihiKSx1PU1hdGguZmxvb3IoYyksdj1hLXMsdz1iLXQseD1jLXUseT0wLHo9LjUsQT0wO0E8aztBKyspe3ZhciBCPXMrKHQ8PGYpKyh1PDxoKTtuPW0odiksbz1tKHcpLHA9ZFtCJmpdLHArPW4qKGRbQisxJmpdLXApLHE9ZFtCK2cmal0scSs9biooZFtCK2crMSZqXS1xKSxwKz1vKihxLXApLEIrPWkscT1kW0Imal0scSs9biooZFtCKzEmal0tcSkscj1kW0IrZyZqXSxyKz1uKihkW0IrZysxJmpdLXIpLHErPW8qKHItcSkscCs9bSh4KSoocS1wKSx5Kz1wKnoseio9bCxzPDw9MSx2Kj0yLHQ8PD0xLHcqPTIsdTw8PTEseCo9Mix2Pj0xJiYocysrLHYtLSksdz49MSYmKHQrKyx3LS0pLHg+PTEmJih1KysseC0tKX1yZXR1cm4geX0sZS5wcm90b3R5cGUubm9pc2VEZXRhaWw9ZnVuY3Rpb24oYSxiKXthPjAmJihrPWEpLGI+MCYmKGw9Yil9LGUucHJvdG90eXBlLm5vaXNlU2VlZD1mdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbigpe3ZhciBhLGIsYz00Mjk0OTY3Mjk2LGQ9MTY2NDUyNSxlPTEwMTM5MDQyMjM7cmV0dXJue3NldFNlZWQ6ZnVuY3Rpb24oZCl7Yj1hPShudWxsPT1kP01hdGgucmFuZG9tKCkqYzpkKT4+PjB9LGdldFNlZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0scmFuZDpmdW5jdGlvbigpe3JldHVybihiPShkKmIrZSklYykvY319fSgpO2Iuc2V0U2VlZChhKSxkPW5ldyBBcnJheShqKzEpO2Zvcih2YXIgYz0wO2M8aisxO2MrKylkW2NdPWIucmFuZCgpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1NDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5WZWN0b3I9ZnVuY3Rpb24oKXt2YXIgYSxiLGM7YXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkPyh0aGlzLnA1PWFyZ3VtZW50c1swXSxhPWFyZ3VtZW50c1sxXVswXXx8MCxiPWFyZ3VtZW50c1sxXVsxXXx8MCxjPWFyZ3VtZW50c1sxXVsyXXx8MCk6KGE9YXJndW1lbnRzWzBdfHwwLGI9YXJndW1lbnRzWzFdfHwwLGM9YXJndW1lbnRzWzJdfHwwKSx0aGlzLng9YSx0aGlzLnk9Yix0aGlzLno9Y30sZC5WZWN0b3IucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJwNS5WZWN0b3IgT2JqZWN0IDogW1wiK3RoaXMueCtcIiwgXCIrdGhpcy55K1wiLCBcIit0aGlzLnorXCJdXCJ9LGQuVmVjdG9yLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KHRoaXMueD1hLnh8fDAsdGhpcy55PWEueXx8MCx0aGlzLno9YS56fHwwLHRoaXMpOmEgaW5zdGFuY2VvZiBBcnJheT8odGhpcy54PWFbMF18fDAsdGhpcy55PWFbMV18fDAsdGhpcy56PWFbMl18fDAsdGhpcyk6KHRoaXMueD1hfHwwLHRoaXMueT1ifHwwLHRoaXMuej1jfHwwLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnA1P25ldyBkLlZlY3Rvcih0aGlzLnA1LFt0aGlzLngsdGhpcy55LHRoaXMuel0pOm5ldyBkLlZlY3Rvcih0aGlzLngsdGhpcy55LHRoaXMueil9LGQuVmVjdG9yLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KHRoaXMueCs9YS54fHwwLHRoaXMueSs9YS55fHwwLHRoaXMueis9YS56fHwwLHRoaXMpOmEgaW5zdGFuY2VvZiBBcnJheT8odGhpcy54Kz1hWzBdfHwwLHRoaXMueSs9YVsxXXx8MCx0aGlzLnorPWFbMl18fDAsdGhpcyk6KHRoaXMueCs9YXx8MCx0aGlzLnkrPWJ8fDAsdGhpcy56Kz1jfHwwLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyh0aGlzLngtPWEueHx8MCx0aGlzLnktPWEueXx8MCx0aGlzLnotPWEuenx8MCx0aGlzKTphIGluc3RhbmNlb2YgQXJyYXk/KHRoaXMueC09YVswXXx8MCx0aGlzLnktPWFbMV18fDAsdGhpcy56LT1hWzJdfHwwLHRoaXMpOih0aGlzLngtPWF8fDAsdGhpcy55LT1ifHwwLHRoaXMuei09Y3x8MCx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLm11bHQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGEmJmlzRmluaXRlKGEpPyh0aGlzLngqPWEsdGhpcy55Kj1hLHRoaXMueio9YSx0aGlzKTooY29uc29sZS53YXJuKFwicDUuVmVjdG9yLnByb3RvdHlwZS5tdWx0OlwiLFwibiBpcyB1bmRlZmluZWQgb3Igbm90IGEgZmluaXRlIG51bWJlclwiKSx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLmRpdj1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYSYmaXNGaW5pdGUoYSk/MD09PWE/KGNvbnNvbGUud2FybihcInA1LlZlY3Rvci5wcm90b3R5cGUuZGl2OlwiLFwiZGl2aWRlIGJ5IDBcIiksdGhpcyk6KHRoaXMueC89YSx0aGlzLnkvPWEsdGhpcy56Lz1hLHRoaXMpOihjb25zb2xlLndhcm4oXCJwNS5WZWN0b3IucHJvdG90eXBlLmRpdjpcIixcIm4gaXMgdW5kZWZpbmVkIG9yIG5vdCBhIGZpbml0ZSBudW1iZXJcIiksdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5tYWc9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMubWFnU3EoKSl9LGQuVmVjdG9yLnByb3RvdHlwZS5tYWdTcT1mdW5jdGlvbigpe3ZhciBhPXRoaXMueCxiPXRoaXMueSxjPXRoaXMuejtyZXR1cm4gYSphK2IqYitjKmN9LGQuVmVjdG9yLnByb3RvdHlwZS5kb3Q9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/dGhpcy5kb3QoYS54LGEueSxhLnopOnRoaXMueCooYXx8MCkrdGhpcy55KihifHwwKSt0aGlzLnoqKGN8fDApfSxkLlZlY3Rvci5wcm90b3R5cGUuY3Jvc3M9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy55KmEuei10aGlzLnoqYS55LGM9dGhpcy56KmEueC10aGlzLngqYS56LGU9dGhpcy54KmEueS10aGlzLnkqYS54O3JldHVybiB0aGlzLnA1P25ldyBkLlZlY3Rvcih0aGlzLnA1LFtiLGMsZV0pOm5ldyBkLlZlY3RvcihiLGMsZSl9LGQuVmVjdG9yLnByb3RvdHlwZS5kaXN0PWZ1bmN0aW9uKGEpe3JldHVybiBhLmNvcHkoKS5zdWIodGhpcykubWFnKCl9LGQuVmVjdG9yLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1hZygpO3JldHVybiAwIT09YSYmdGhpcy5tdWx0KDEvYSksdGhpc30sZC5WZWN0b3IucHJvdG90eXBlLmxpbWl0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubWFnU3EoKTtyZXR1cm4gYj5hKmEmJnRoaXMuZGl2KE1hdGguc3FydChiKSkubXVsdChhKSx0aGlzfSxkLlZlY3Rvci5wcm90b3R5cGUuc2V0TWFnPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHQoYSl9LGQuVmVjdG9yLnByb3RvdHlwZS5oZWFkaW5nPWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5hdGFuMih0aGlzLnksdGhpcy54KTtyZXR1cm4gdGhpcy5wNT90aGlzLnA1Ll9mcm9tUmFkaWFucyhhKTphfSxkLlZlY3Rvci5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaGVhZGluZygpK2E7dGhpcy5wNSYmKGI9dGhpcy5wNS5fdG9SYWRpYW5zKGIpKTt2YXIgYz10aGlzLm1hZygpO3JldHVybiB0aGlzLng9TWF0aC5jb3MoYikqYyx0aGlzLnk9TWF0aC5zaW4oYikqYyx0aGlzfSxkLlZlY3Rvci5wcm90b3R5cGUuYW5nbGVCZXR3ZWVuPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZG90KGEpLyh0aGlzLm1hZygpKmEubWFnKCkpLGM9TWF0aC5hY29zKE1hdGgubWluKDEsTWF0aC5tYXgoLTEsYikpKTtyZXR1cm4gdGhpcy5wNT90aGlzLnA1Ll9mcm9tUmFkaWFucyhjKTpjfSxkLlZlY3Rvci5wcm90b3R5cGUubGVycD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yP3RoaXMubGVycChhLngsYS55LGEueixiKToodGhpcy54Kz0oYS10aGlzLngpKmV8fDAsdGhpcy55Kz0oYi10aGlzLnkpKmV8fDAsdGhpcy56Kz0oYy10aGlzLnopKmV8fDAsdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5hcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLnh8fDAsdGhpcy55fHwwLHRoaXMuenx8MF19LGQuVmVjdG9yLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlLGYsZztyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyhlPWEueHx8MCxmPWEueXx8MCxnPWEuenx8MCk6YSBpbnN0YW5jZW9mIEFycmF5PyhlPWFbMF18fDAsZj1hWzFdfHwwLGc9YVsyXXx8MCk6KGU9YXx8MCxmPWJ8fDAsZz1jfHwwKSx0aGlzLng9PT1lJiZ0aGlzLnk9PT1mJiZ0aGlzLno9PT1nfSxkLlZlY3Rvci5mcm9tQW5nbGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9MSksbmV3IGQuVmVjdG9yKGIqTWF0aC5jb3MoYSksYipNYXRoLnNpbihhKSwwKX0sZC5WZWN0b3IuZnJvbUFuZ2xlcz1mdW5jdGlvbihhLGIsYyl7dm9pZCAwPT09YyYmKGM9MSk7dmFyIGU9TWF0aC5jb3MoYiksZj1NYXRoLnNpbihiKSxnPU1hdGguY29zKGEpLGg9TWF0aC5zaW4oYSk7cmV0dXJuIG5ldyBkLlZlY3RvcihjKmgqZiwtYypnLGMqaCplKX0sZC5WZWN0b3IucmFuZG9tMkQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tQW5nbGUoTWF0aC5yYW5kb20oKSplLlRXT19QSSl9LGQuVmVjdG9yLnJhbmRvbTNEPWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5yYW5kb20oKSplLlRXT19QSSxiPTIqTWF0aC5yYW5kb20oKS0xLGM9TWF0aC5zcXJ0KDEtYipiKSxmPWMqTWF0aC5jb3MoYSksZz1jKk1hdGguc2luKGEpO3JldHVybiBuZXcgZC5WZWN0b3IoZixnLGIpfSxkLlZlY3Rvci5hZGQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP2Muc2V0KGEpOmM9YS5jb3B5KCksYy5hZGQoYiksY30sZC5WZWN0b3Iuc3ViPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz9jLnNldChhKTpjPWEuY29weSgpLGMuc3ViKGIpLGN9LGQuVmVjdG9yLm11bHQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP2Muc2V0KGEpOmM9YS5jb3B5KCksYy5tdWx0KGIpLGN9LGQuVmVjdG9yLmRpdj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/Yy5zZXQoYSk6Yz1hLmNvcHkoKSxjLmRpdihiKSxjfSxkLlZlY3Rvci5kb3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5kb3QoYil9LGQuVmVjdG9yLmNyb3NzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuY3Jvc3MoYil9LGQuVmVjdG9yLmRpc3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5kaXN0KGIpfSxkLlZlY3Rvci5sZXJwPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBkP2Quc2V0KGEpOmQ9YS5jb3B5KCksZC5sZXJwKGIsYyksZH0sZC5WZWN0b3IubWFnPWZ1bmN0aW9uKGEpe3ZhciBiPWEueCxjPWEueSxkPWEueixlPWIqYitjKmMrZCpkO3JldHVybiBNYXRoLnNxcnQoZSl9LGIuZXhwb3J0cz1kLlZlY3Rvcn0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9ITEsZj0hMSxnPTAsaD1mdW5jdGlvbigpe3ZhciBhLGIsYz00Mjk0OTY3Mjk2LGQ9MTY2NDUyNSxlPTEwMTM5MDQyMjM7cmV0dXJue3NldFNlZWQ6ZnVuY3Rpb24oZCl7Yj1hPShudWxsPT1kP01hdGgucmFuZG9tKCkqYzpkKT4+PjB9LGdldFNlZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0scmFuZDpmdW5jdGlvbigpe3JldHVybihiPShkKmIrZSklYykvY319fSgpO2QucHJvdG90eXBlLnJhbmRvbVNlZWQ9ZnVuY3Rpb24oYSl7aC5zZXRTZWVkKGEpLGU9ITAsZj0hMX0sZC5wcm90b3R5cGUucmFuZG9tPWZ1bmN0aW9uKGEsYil7dmFyIGM7aWYoYz1lP2gucmFuZCgpOk1hdGgucmFuZG9tKCksdm9pZCAwPT09YSlyZXR1cm4gYztpZih2b2lkIDA9PT1iKXJldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YVtNYXRoLmZsb29yKGMqYS5sZW5ndGgpXTpjKmE7aWYoYT5iKXt2YXIgZD1hO2E9YixiPWR9cmV0dXJuIGMqKGItYSkrYX0sZC5wcm90b3R5cGUucmFuZG9tR2F1c3NpYW49ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsaDtpZihmKWM9ZyxmPSExO2Vsc2V7ZG97ZD10aGlzLnJhbmRvbSgyKS0xLGU9dGhpcy5yYW5kb20oMiktMSxoPWQqZCtlKmV9d2hpbGUoaD49MSk7aD1NYXRoLnNxcnQoLTIqTWF0aC5sb2coaCkvaCksYz1kKmgsZz1lKmgsZj0hMH12YXIgaT1hfHwwO3JldHVybiBjKihifHwxKStpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5wcm90b3R5cGUuX2FuZ2xlTW9kZT1lLlJBRElBTlMsZC5wcm90b3R5cGUuYWNvcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hY29zKGEpKX0sZC5wcm90b3R5cGUuYXNpbj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hc2luKGEpKX0sZC5wcm90b3R5cGUuYXRhbj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hdGFuKGEpKX0sZC5wcm90b3R5cGUuYXRhbjI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hdGFuMihhLGIpKX0sZC5wcm90b3R5cGUuY29zPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLmNvcyh0aGlzLl90b1JhZGlhbnMoYSkpfSxkLnByb3RvdHlwZS5zaW49ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguc2luKHRoaXMuX3RvUmFkaWFucyhhKSl9LGQucHJvdG90eXBlLnRhbj1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC50YW4odGhpcy5fdG9SYWRpYW5zKGEpKX0sZC5wcm90b3R5cGUuZGVncmVlcz1mdW5jdGlvbihhKXtyZXR1cm4gYSplLlJBRF9UT19ERUd9LGQucHJvdG90eXBlLnJhZGlhbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEqZS5ERUdfVE9fUkFEfSxkLnByb3RvdHlwZS5hbmdsZU1vZGU9ZnVuY3Rpb24oYSl7YSE9PWUuREVHUkVFUyYmYSE9PWUuUkFESUFOU3x8KHRoaXMuX2FuZ2xlTW9kZT1hKX0sZC5wcm90b3R5cGUuX3RvUmFkaWFucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYW5nbGVNb2RlPT09ZS5ERUdSRUVTP2EqZS5ERUdfVE9fUkFEOmF9LGQucHJvdG90eXBlLl90b0RlZ3JlZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2FuZ2xlTW9kZT09PWUuUkFESUFOUz9hKmUuUkFEX1RPX0RFRzphfSxkLnByb3RvdHlwZS5fZnJvbVJhZGlhbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2FuZ2xlTW9kZT09PWUuREVHUkVFUz9hKmUuUkFEX1RPX0RFRzphfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLnRleHRBbGlnbj1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0QWxpZ25cIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRBbGlnbi5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0TGVhZGluZz1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dExlYWRpbmdcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRMZWFkaW5nLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRTaXplPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0U2l6ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dFNpemUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dFN0eWxlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0U3R5bGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRTdHlsZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0V2lkdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRXaWR0aFwiLGFyZ3VtZW50cyksMD09PWEubGVuZ3RoPzA6dGhpcy5fcmVuZGVyZXIudGV4dFdpZHRoLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRBc2NlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dEFzY2VudFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dEFzY2VudCgpfSxkLnByb3RvdHlwZS50ZXh0RGVzY2VudD1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0RGVzY2VudFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dERlc2NlbnQoKX0sZC5wcm90b3R5cGUuX3VwZGF0ZVRleHRNZXRyaWNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl91cGRhdGVUZXh0TWV0cmljcygpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1ODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIiksZj1hKFwib3BlbnR5cGUuanNcIik7YShcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxkLnByb3RvdHlwZS5sb2FkRm9udD1mdW5jdGlvbihhLGIsYyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZEZvbnRcIixhcmd1bWVudHMpO3ZhciBlPW5ldyBkLkZvbnQodGhpcyksZz10aGlzO3JldHVybiBmLmxvYWQoYSxmdW5jdGlvbihmLGgpe2lmKGYpcmV0dXJuIHZvaWQgMCE9PWM/YyhmKTooZC5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDQsYSksdm9pZCBjb25zb2xlLmVycm9yKGYsYSkpO2UuZm9udD1oLHZvaWQgMCE9PWImJmIoZSksZy5fZGVjcmVtZW50UHJlbG9hZCgpO3ZhciBpLGosaz1bXCJ0dGZcIixcIm90ZlwiLFwid29mZlwiLFwid29mZjJcIl0sbD1hLnNwbGl0KFwiXFxcXFwiKS5wb3AoKS5zcGxpdChcIi9cIikucG9wKCksbT1sLmxhc3RJbmRleE9mKFwiLlwiKSxuPW08MT9udWxsOmwuc3Vic3RyKG0rMSk7ay5pbmRleE9mKG4pPi0xJiYoaT1sLnN1YnN0cigwLG0pLGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpLGouYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcXG5AZm9udC1mYWNlIHtcXG5mb250LWZhbWlseTogXCIraStcIjtcXG5zcmM6IHVybChcIithK1wiKTtcXG59XFxuXCIpKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGopKX0pLGV9LGQucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvRmlsbHx8dGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlP3RoaXMuX3JlbmRlcmVyLnRleHQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTp0aGlzfSxkLnByb3RvdHlwZS50ZXh0Rm9udD1mdW5jdGlvbihhLGIpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRGb250XCIsYXJndW1lbnRzKSxhcmd1bWVudHMubGVuZ3RoKXtpZighYSl0aHJvdyBuZXcgRXJyb3IoXCJudWxsIGZvbnQgcGFzc2VkIHRvIHRleHRGb250XCIpO3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfdGV4dEZvbnRcIixhKSxiJiYodGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX3RleHRTaXplXCIsYiksdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX3RleHRMZWFkaW5nXCIsYiplLl9ERUZBVUxUX0xFQURNVUxUKSksdGhpcy5fcmVuZGVyZXIuX2FwcGx5VGV4dFByb3BlcnRpZXMoKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3RleHRGb250fSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjQsXCJvcGVudHlwZS5qc1wiOjEwfV0sNTk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7Zm9yKHZhciBjPWgoYix7c2FtcGxlRmFjdG9yOi4xLHNpbXBsaWZ5VGhyZXNob2xkOjB9KSxkPW4oYSwwLDEpLGY9ZC8oZCpjLnNhbXBsZUZhY3RvciksZz1bXSxpPTA7aTxkO2krPWYpZy5wdXNoKG4oYSxpKSk7cmV0dXJuIGMuc2ltcGxpZnlUaHJlc2hvbGQmJmUoZyxjLnNpbXBsaWZ5VGhyZXNob2xkKSxnfWZ1bmN0aW9uIGUoYSxiKXtiPXZvaWQgMD09PWI/MDpiO2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGgtMTthLmxlbmd0aD4zJiZkPj0wOy0tZClqKGkoYSxkLTEpLGkoYSxkKSxpKGEsZCsxKSxiKSYmKGEuc3BsaWNlKGQlYS5sZW5ndGgsMSksYysrKTtyZXR1cm4gY31mdW5jdGlvbiBmKGEpe2Zvcih2YXIgYixjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrKylcIk1cIj09PWFbZF0udHlwZSYmKGImJmMucHVzaChiKSxiPVtdKSxiLnB1c2goZyhhW2RdKSk7cmV0dXJuIGMucHVzaChiKSxjfWZ1bmN0aW9uIGcoYSl7dmFyIGI9W2EudHlwZV07cmV0dXJuXCJNXCI9PT1hLnR5cGV8fFwiTFwiPT09YS50eXBlP2IucHVzaChhLngsYS55KTpcIkNcIj09PWEudHlwZT9iLnB1c2goYS54MSxhLnkxLGEueDIsYS55MixhLngsYS55KTpcIlFcIj09PWEudHlwZSYmYi5wdXNoKGEueDEsYS55MSxhLngsYS55KSxifWZ1bmN0aW9uIGgoYSxiKXtpZihcIm9iamVjdFwiIT10eXBlb2YgYSlhPWI7ZWxzZSBmb3IodmFyIGMgaW4gYil2b2lkIDA9PT1hW2NdJiYoYVtjXT1iW2NdKTtyZXR1cm4gYX1mdW5jdGlvbiBpKGEsYil7dmFyIGM9YS5sZW5ndGg7cmV0dXJuIGFbYjwwP2IlYytjOmIlY119ZnVuY3Rpb24gaihhLGIsYyxkKXtpZighZClyZXR1cm4gMD09PWsoYSxiLGMpO3ZvaWQgMD09PWoudG1wUG9pbnQxJiYoai50bXBQb2ludDE9W10sai50bXBQb2ludDI9W10pO3ZhciBlPWoudG1wUG9pbnQxLGY9ai50bXBQb2ludDI7ZS54PWIueC1hLngsZS55PWIueS1hLnksZi54PWMueC1iLngsZi55PWMueS1iLnk7dmFyIGc9ZS54KmYueCtlLnkqZi55LGg9TWF0aC5zcXJ0KGUueCplLngrZS55KmUueSksaT1NYXRoLnNxcnQoZi54KmYueCtmLnkqZi55KTtyZXR1cm4gTWF0aC5hY29zKGcvKGgqaSkpPGR9ZnVuY3Rpb24gayhhLGIsYyl7cmV0dXJuKGJbMF0tYVswXSkqKGNbMV0tYVsxXSktKGNbMF0tYVswXSkqKGJbMV0tYVsxXSl9ZnVuY3Rpb24gbChhLGIsYyxkLGUsZixnLGgsaSl7dmFyIGo9MS1pLGs9TWF0aC5wb3coaiwzKSxsPU1hdGgucG93KGosMiksbT1pKmksbj1tKmksbz1rKmErMypsKmkqYyszKmoqaSppKmUrbipnLHA9aypiKzMqbCppKmQrMypqKmkqaSpmK24qaCxxPWErMippKihjLWEpK20qKGUtMipjK2EpLHI9YisyKmkqKGQtYikrbSooZi0yKmQrYikscz1jKzIqaSooZS1jKSttKihnLTIqZStjKSx0PWQrMippKihmLWQpK20qKGgtMipmK2QpLHU9aiphK2kqYyx2PWoqYitpKmQsdz1qKmUraSpnLHg9aipmK2kqaCx5PTkwLTE4MCpNYXRoLmF0YW4yKHEtcyxyLXQpL01hdGguUEk7cmV0dXJuKHE+c3x8cjx0KSYmKHkrPTE4MCkse3g6byx5OnAsbTp7eDpxLHk6cn0sbjp7eDpzLHk6dH0sc3RhcnQ6e3g6dSx5OnZ9LGVuZDp7eDp3LHk6eH0sYWxwaGE6eX19ZnVuY3Rpb24gbShhLGIsYyxkLGUsZixnLGgsaSl7cmV0dXJuIG51bGw9PWk/dShhLGIsYyxkLGUsZixnLGgpOmwoYSxiLGMsZCxlLGYsZyxoLHYoYSxiLGMsZCxlLGYsZyxoLGkpKX1mdW5jdGlvbiBuKGEsYixjKXthPXAoYSk7Zm9yKHZhciBkLGUsZixnLGgsaT1cIlwiLGo9e30saz0wLG49MCxvPWEubGVuZ3RoO248bztuKyspe2lmKGY9YVtuXSxcIk1cIj09PWZbMF0pZD0rZlsxXSxlPStmWzJdO2Vsc2V7aWYoZz1tKGQsZSxmWzFdLGZbMl0sZlszXSxmWzRdLGZbNV0sZls2XSksaytnPmImJiFjKXJldHVybiBoPW0oZCxlLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSxmWzZdLGItaykse3g6aC54LHk6aC55LGFscGhhOmguYWxwaGF9O2srPWcsZD0rZls1XSxlPStmWzZdfWkrPWYuc2hpZnQoKStmfXJldHVybiBqLmVuZD1pLGg9Yz9rOmwoZCxlLGZbMF0sZlsxXSxmWzJdLGZbM10sZls0XSxmWzVdLDEpLGguYWxwaGEmJihoPXt4OmgueCx5OmgueSxhbHBoYTpoLmFscGhhfSksaH1mdW5jdGlvbiBvKGEpe3ZhciBiPVtdLGM9MCxkPTAsZT0wLGY9MCxnPTA7aWYoIWEpcmV0dXJuIGI7XCJNXCI9PT1hWzBdWzBdJiYoYz0rYVswXVsxXSxkPSthWzBdWzJdLGU9YyxmPWQsZysrLGJbMF09W1wiTVwiLGMsZF0pO2Zvcih2YXIgaCxpLGosaz0zPT09YS5sZW5ndGgmJlwiTVwiPT09YVswXVswXSYmXCJSXCI9PT1hWzFdWzBdLnRvVXBwZXJDYXNlKCkmJlwiWlwiPT09YVsyXVswXS50b1VwcGVyQ2FzZSgpLGw9ZyxtPWEubGVuZ3RoO2w8bTtsKyspe2lmKGIucHVzaChpPVtdKSxqPWFbbF0salswXSE9PVN0cmluZy5wcm90b3R5cGUudG9VcHBlckNhc2UuY2FsbChqWzBdKSlzd2l0Y2goaVswXT1TdHJpbmcucHJvdG90eXBlLnRvVXBwZXJDYXNlLmNhbGwoalswXSksaVswXSl7Y2FzZVwiQVwiOmlbMV09alsxXSxpWzJdPWpbMl0saVszXT1qWzNdLGlbNF09als0XSxpWzVdPWpbNV0saVs2XT0rKGpbNl0rYyksaVs3XT0rKGpbN10rZCk7YnJlYWs7Y2FzZVwiVlwiOmlbMV09K2pbMV0rZDticmVhaztjYXNlXCJIXCI6aVsxXT0ralsxXStjO2JyZWFrO2Nhc2VcIlJcIjpoPVtjLGRdLmNvbmNhdChqLnNsaWNlKDEpKTtmb3IodmFyIG49MixvPWgubGVuZ3RoO248bztuKyspaFtuXT0raFtuXStjLGhbKytuXT0raFtuXStkO2IucG9wKCksYj1iLmNvbmNhdChyKGgsaykpO2JyZWFrO2Nhc2VcIk1cIjplPStqWzFdK2MsZj0ralsyXStkO2JyZWFrO2RlZmF1bHQ6Zm9yKG49MSxvPWoubGVuZ3RoO248bztuKyspaVtuXT0raltuXSsobiUyP2M6ZCl9ZWxzZSBpZihcIlJcIj09PWpbMF0paD1bYyxkXS5jb25jYXQoai5zbGljZSgxKSksYi5wb3AoKSxiPWIuY29uY2F0KHIoaCxrKSksaT1bXCJSXCJdLmNvbmNhdChqLnNsaWNlKC0yKSk7ZWxzZSBmb3IodmFyIHA9MCxxPWoubGVuZ3RoO3A8cTtwKyspaVtwXT1qW3BdO3N3aXRjaChpWzBdKXtjYXNlXCJaXCI6Yz1lLGQ9ZjticmVhaztjYXNlXCJIXCI6Yz1pWzFdO2JyZWFrO2Nhc2VcIlZcIjpkPWlbMV07YnJlYWs7Y2FzZVwiTVwiOmU9aVtpLmxlbmd0aC0yXSxmPWlbaS5sZW5ndGgtMV07YnJlYWs7ZGVmYXVsdDpjPWlbaS5sZW5ndGgtMl0sZD1pW2kubGVuZ3RoLTFdfX1yZXR1cm4gYn1mdW5jdGlvbiBwKGEsYil7dmFyIGMsZD1vKGEpLGU9YiYmbyhiKSxmPXt4OjAseTowLGJ4OjAsYnk6MCxYOjAsWTowLHF4Om51bGwscXk6bnVsbH0sZz17eDowLHk6MCxieDowLGJ5OjAsWDowLFk6MCxxeDpudWxsLHF5Om51bGx9LGg9W10saT1bXSxqPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9e1Q6MSxROjF9O2lmKCFhKXJldHVybltcIkNcIixiLngsYi55LGIueCxiLnksYi54LGIueV07c3dpdGNoKGFbMF1pbiBmfHwoYi5xeD1iLnF5PW51bGwpLGFbMF0pe2Nhc2VcIk1cIjpiLlg9YVsxXSxiLlk9YVsyXTticmVhaztjYXNlXCJBXCI6YT1bXCJDXCJdLmNvbmNhdChxLmFwcGx5KDAsW2IueCxiLnldLmNvbmNhdChhLnNsaWNlKDEpKSkpO2JyZWFrO2Nhc2VcIlNcIjpcIkNcIj09PWN8fFwiU1wiPT09Yz8oZD0yKmIueC1iLmJ4LGU9MipiLnktYi5ieSk6KGQ9Yi54LGU9Yi55KSxhPVtcIkNcIixkLGVdLmNvbmNhdChhLnNsaWNlKDEpKTticmVhaztjYXNlXCJUXCI6XCJRXCI9PT1jfHxcIlRcIj09PWM/KGIucXg9MipiLngtYi5xeCxiLnF5PTIqYi55LWIucXkpOihiLnF4PWIueCxiLnF5PWIueSksYT1bXCJDXCJdLmNvbmNhdCh0KGIueCxiLnksYi5xeCxiLnF5LGFbMV0sYVsyXSkpO2JyZWFrO2Nhc2VcIlFcIjpiLnF4PWFbMV0sYi5xeT1hWzJdLGE9W1wiQ1wiXS5jb25jYXQodChiLngsYi55LGFbMV0sYVsyXSxhWzNdLGFbNF0pKTticmVhaztjYXNlXCJMXCI6YT1bXCJDXCJdLmNvbmNhdChzKGIueCxiLnksYVsxXSxhWzJdKSk7YnJlYWs7Y2FzZVwiSFwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGFbMV0sYi55KSk7YnJlYWs7Y2FzZVwiVlwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGIueCxhWzFdKSk7YnJlYWs7Y2FzZVwiWlwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGIuWCxiLlkpKX1yZXR1cm4gYX0saz1mdW5jdGlvbihhLGIpe2lmKGFbYl0ubGVuZ3RoPjcpe2FbYl0uc2hpZnQoKTtmb3IodmFyIGY9YVtiXTtmLmxlbmd0aDspaFtiXT1cIkFcIixlJiYoaVtiXT1cIkFcIiksYS5zcGxpY2UoYisrLDAsW1wiQ1wiXS5jb25jYXQoZi5zcGxpY2UoMCw2KSkpO2Euc3BsaWNlKGIsMSksYz1NYXRoLm1heChkLmxlbmd0aCxlJiZlLmxlbmd0aHx8MCl9fSxsPWZ1bmN0aW9uKGEsYixmLGcsaCl7YSYmYiYmXCJNXCI9PT1hW2hdWzBdJiZcIk1cIiE9PWJbaF1bMF0mJihiLnNwbGljZShoLDAsW1wiTVwiLGcueCxnLnldKSxmLmJ4PTAsZi5ieT0wLGYueD1hW2hdWzFdLGYueT1hW2hdWzJdLGM9TWF0aC5tYXgoZC5sZW5ndGgsZSYmZS5sZW5ndGh8fDApKX0sbT1cIlwiLG49XCJcIjtjPU1hdGgubWF4KGQubGVuZ3RoLGUmJmUubGVuZ3RofHwwKTtmb3IodmFyIHA9MDtwPGM7cCsrKXtkW3BdJiYobT1kW3BdWzBdKSxcIkNcIiE9PW0mJihoW3BdPW0scCYmKG49aFtwLTFdKSksZFtwXT1qKGRbcF0sZixuKSxcIkFcIiE9PWhbcF0mJlwiQ1wiPT09bSYmKGhbcF09XCJDXCIpLGsoZCxwKSxlJiYoZVtwXSYmKG09ZVtwXVswXSksXCJDXCIhPT1tJiYoaVtwXT1tLHAmJihuPWlbcC0xXSkpLGVbcF09aihlW3BdLGcsbiksXCJBXCIhPT1pW3BdJiZcIkNcIj09PW0mJihpW3BdPVwiQ1wiKSxrKGUscCkpLGwoZCxlLGYsZyxwKSxsKGUsZCxnLGYscCk7dmFyIHI9ZFtwXSx1PWUmJmVbcF0sdj1yLmxlbmd0aCx3PWUmJnUubGVuZ3RoO2YueD1yW3YtMl0sZi55PXJbdi0xXSxmLmJ4PXBhcnNlRmxvYXQoclt2LTRdKXx8Zi54LGYuYnk9cGFyc2VGbG9hdChyW3YtM10pfHxmLnksZy5ieD1lJiYocGFyc2VGbG9hdCh1W3ctNF0pfHxnLngpLGcuYnk9ZSYmKHBhcnNlRmxvYXQodVt3LTNdKXx8Zy55KSxnLng9ZSYmdVt3LTJdLGcueT1lJiZ1W3ctMV19cmV0dXJuIGU/W2QsZV06ZH1mdW5jdGlvbiBxKGEsYixjLGQsZSxmLGcsaCxpLGope3ZhciBrLGwsbSxuLG8scD1NYXRoLlBJLHI9MTIwKnAvMTgwLHM9cC8xODAqKCtlfHwwKSx0PVtdLHU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybnt4OmEqTWF0aC5jb3MoYyktYipNYXRoLnNpbihjKSx5OmEqTWF0aC5zaW4oYykrYipNYXRoLmNvcyhjKX19O2lmKGopaz1qWzBdLGw9alsxXSxtPWpbMl0sbj1qWzNdO2Vsc2V7bz11KGEsYiwtcyksYT1vLngsYj1vLnksbz11KGgsaSwtcyksaD1vLngsaT1vLnk7dmFyIHY9KGEtaCkvMix3PShiLWkpLzIseD12KnYvKGMqYykrdyp3LyhkKmQpO3g+MSYmKHg9TWF0aC5zcXJ0KHgpLGMqPXgsZCo9eCk7dmFyIHk9YypjLHo9ZCpkLEE9KGY9PT1nPy0xOjEpKk1hdGguc3FydChNYXRoLmFicygoeSp6LXkqdyp3LXoqdip2KS8oeSp3Kncreip2KnYpKSk7bT1BKmMqdy9kKyhhK2gpLzIsbj1BKi1kKnYvYysoYitpKS8yLGs9TWF0aC5hc2luKCgoYi1uKS9kKS50b0ZpeGVkKDkpKSxsPU1hdGguYXNpbigoKGktbikvZCkudG9GaXhlZCg5KSksaz1hPG0/cC1rOmssbD1oPG0/cC1sOmwsazwwJiYoaz0yKnArayksbDwwJiYobD0yKnArbCksZyYmaz5sJiYoay09MipwKSwhZyYmbD5rJiYobC09MipwKX12YXIgQj1sLWs7aWYoTWF0aC5hYnMoQik+cil7dmFyIEM9bCxEPWgsRT1pO2w9aytyKihnJiZsPms/MTotMSksaD1tK2MqTWF0aC5jb3MobCksaT1uK2QqTWF0aC5zaW4obCksdD1xKGgsaSxjLGQsZSwwLGcsRCxFLFtsLEMsbSxuXSl9Qj1sLWs7dmFyIEY9TWF0aC5jb3MoayksRz1NYXRoLnNpbihrKSxIPU1hdGguY29zKGwpLEk9TWF0aC5zaW4obCksSj1NYXRoLnRhbihCLzQpLEs9NC8zKmMqSixMPTQvMypkKkosTT1bYSxiXSxOPVthK0sqRyxiLUwqRl0sTz1baCtLKkksaS1MKkhdLFA9W2gsaV07aWYoTlswXT0yKk1bMF0tTlswXSxOWzFdPTIqTVsxXS1OWzFdLGopcmV0dXJuW04sTyxQXS5jb25jYXQodCk7dD1bTixPLFBdLmNvbmNhdCh0KS5qb2luKCkuc3BsaXQoXCIsXCIpO2Zvcih2YXIgUT1bXSxSPTAsUz10Lmxlbmd0aDtSPFM7UisrKVFbUl09UiUyP3UodFtSLTFdLHRbUl0scykueTp1KHRbUl0sdFtSKzFdLHMpLng7cmV0dXJuIFF9ZnVuY3Rpb24gcihhLGIpe2Zvcih2YXIgYz1bXSxkPTAsZT1hLmxlbmd0aDtlLTIqIWI+ZDtkKz0yKXt2YXIgZj1be3g6K2FbZC0yXSx5OithW2QtMV19LHt4OithW2RdLHk6K2FbZCsxXX0se3g6K2FbZCsyXSx5OithW2QrM119LHt4OithW2QrNF0seTorYVtkKzVdfV07Yj9kP2UtND09PWQ/ZlszXT17eDorYVswXSx5OithWzFdfTplLTI9PT1kJiYoZlsyXT17eDorYVswXSx5OithWzFdfSxmWzNdPXt4OithWzJdLHk6K2FbM119KTpmWzBdPXt4OithW2UtMl0seTorYVtlLTFdfTplLTQ9PT1kP2ZbM109ZlsyXTpkfHwoZlswXT17eDorYVtkXSx5OithW2QrMV19KSxjLnB1c2goW1wiQ1wiLCgtZlswXS54KzYqZlsxXS54K2ZbMl0ueCkvNiwoLWZbMF0ueSs2KmZbMV0ueStmWzJdLnkpLzYsKGZbMV0ueCs2KmZbMl0ueC1mWzNdLngpLzYsKGZbMV0ueSs2KmZbMl0ueS1mWzNdLnkpLzYsZlsyXS54LGZbMl0ueV0pfXJldHVybiBjfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuW2EsYixjLGQsYyxkXX1mdW5jdGlvbiB0KGEsYixjLGQsZSxmKXt2YXIgZz0xLzMsaD0yLzM7cmV0dXJuW2cqYStoKmMsZypiK2gqZCxnKmUraCpjLGcqZitoKmQsZSxmXX1mdW5jdGlvbiB1KGEsYixjLGQsZSxmLGcsaCxpKXtudWxsPT1pJiYoaT0xKSxpPWk+MT8xOmk8MD8wOmk7Zm9yKHZhciBqPWkvMixrPTEyLGw9Wy0uMTI1MiwuMTI1MiwtLjM2NzgsLjM2NzgsLS41ODczLC41ODczLC0uNzY5OSwuNzY5OSwtLjkwNDEsLjkwNDEsLS45ODE2LC45ODE2XSxtPTAsbj1bLjI0OTEsLjI0OTEsLjIzMzUsLjIzMzUsLjIwMzIsLjIwMzIsLjE2MDEsLjE2MDEsLjEwNjksLjEwNjksLjA0NzIsLjA0NzJdLG89MDtvPGs7bysrKXt2YXIgcD1qKmxbb10raixxPXcocCxhLGMsZSxnKSxyPXcocCxiLGQsZixoKSxzPXEqcStyKnI7bSs9bltvXSpNYXRoLnNxcnQocyl9cmV0dXJuIGoqbX1mdW5jdGlvbiB2KGEsYixjLGQsZSxmLGcsaCxpKXtpZighKGk8MHx8dShhLGIsYyxkLGUsZixnLGgpPGkpKXt2YXIgaixrPTEsbD1rLzIsbT1rLWwsbj0uMDE7Zm9yKGo9dShhLGIsYyxkLGUsZixnLGgsbSk7TWF0aC5hYnMoai1pKT5uOylsLz0yLG0rPShqPGk/MTotMSkqbCxqPXUoYSxiLGMsZCxlLGYsZyxoLG0pO3JldHVybiBtfX1mdW5jdGlvbiB3KGEsYixjLGQsZSl7cmV0dXJuIGEqKGEqKC0zKmIrOSpjLTkqZCszKmUpKzYqYi0xMipjKzYqZCktMypiKzMqY31mdW5jdGlvbiB4KCl7Zm9yKHZhciBhPVwiXCIsYj1hcmd1bWVudHMubGVuZ3RoLTE7Yj49MDstLWIpe3ZhciBjPWFyZ3VtZW50c1tiXTthKz1jPT09T2JqZWN0KGMpP0pTT04uc3RyaW5naWZ5KGMpOmN9cmV0dXJuIGF9dmFyIHk9YShcIi4uL2NvcmUvbWFpblwiKSx6PWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTt5LkZvbnQ9ZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnQ9YSx0aGlzLmNhY2hlPXt9LHRoaXMuZm9udD12b2lkIDB9LHkuRm9udC5wcm90b3R5cGUubGlzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIm5vdCB5ZXQgaW1wbGVtZW50ZWRcIil9LHkuRm9udC5wcm90b3R5cGUudGV4dEJvdW5kcz1mdW5jdGlvbihhLGIsYyxkLGUpe2I9dm9pZCAwIT09Yj9iOjAsYz12b2lkIDAhPT1jP2M6MCxkPWR8fHRoaXMucGFyZW50Ll9yZW5kZXJlci5fdGV4dFNpemU7dmFyIGY9ZSYmZS5yZW5kZXJlciYmZS5yZW5kZXJlci5fcEluc3R8fHRoaXMucGFyZW50LGc9Zi5fcmVuZGVyZXIsaD1nLl90ZXh0QWxpZ258fHouTEVGVCxpPWcuX3RleHRCYXNlbGluZXx8ei5CQVNFTElORSxqPXgoXCJ0ZXh0Qm91bmRzXCIsYSxiLGMsZCxoLGkpLGs9dGhpcy5jYWNoZVtqXTtpZighayl7dmFyIGwsbSxuLG8scCxxPVtdLHI9W10scz10aGlzLl9zY2FsZShkKTt0aGlzLmZvbnQuZm9yRWFjaEdseXBoKGEsYixjLGQsZSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1hLmdldE1ldHJpY3MoKTtxLnB1c2goYitlLnhNaW4qcykscS5wdXNoKGIrZS54TWF4KnMpLHIucHVzaChjKy1lLnlNaW4qcyksci5wdXNoKGMrLWUueU1heCpzKX0pLGw9TWF0aC5taW4uYXBwbHkobnVsbCxxKSxtPU1hdGgubWluLmFwcGx5KG51bGwsciksbj1NYXRoLm1heC5hcHBseShudWxsLHEpLG89TWF0aC5tYXguYXBwbHkobnVsbCxyKSxrPXt4OmwseTptLGg6by1tLHc6bi1sLGFkdmFuY2U6bC1ifSxwPXRoaXMuX2hhbmRsZUFsaWdubWVudChnLGEsay54LGsueSxrLncray5hZHZhbmNlKSxrLng9cC54LGsueT1wLnksdGhpcy5jYWNoZVt4KFwidGV4dEJvdW5kc1wiLGEsYixjLGQsaCxpKV09a31yZXR1cm4ga30seS5Gb250LnByb3RvdHlwZS50ZXh0VG9Qb2ludHM9ZnVuY3Rpb24oYSxiLGMsZSxnKXtmdW5jdGlvbiBoKGIpe3JldHVybiBrW2JdLm5hbWUmJlwic3BhY2VcIj09PWtbYl0ubmFtZXx8YS5sZW5ndGg9PT1rLmxlbmd0aCYmXCIgXCI9PT1hW2JdfHxrW2JdLmluZGV4JiYzPT09a1tiXS5pbmRleH12YXIgaT0wLGo9W10saz10aGlzLl9nZXRHbHlwaHMoYSk7ZT1lfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIuX3RleHRTaXplO2Zvcih2YXIgbD0wO2w8ay5sZW5ndGg7bCsrKXtpZighaChsKSlmb3IodmFyIG09a1tsXS5nZXRQYXRoKGIsYyxlKSxuPWYobS5jb21tYW5kcyksbz0wO288bi5sZW5ndGg7bysrKWZvcih2YXIgcD1kKG5bb10sZykscT0wO3E8cC5sZW5ndGg7cSsrKXBbcV0ueCs9aSxqLnB1c2gocFtxXSk7aSs9a1tsXS5hZHZhbmNlV2lkdGgqdGhpcy5fc2NhbGUoZSl9cmV0dXJuIGp9LHkuRm9udC5wcm90b3R5cGUuX2dldEdseXBocz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5mb250LnN0cmluZ1RvR2x5cGhzKGEpfSx5LkZvbnQucHJvdG90eXBlLl9nZXRQYXRoPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWQmJmQucmVuZGVyZXImJmQucmVuZGVyZXIuX3BJbnN0fHx0aGlzLnBhcmVudCxmPWUuX3JlbmRlcmVyLGc9dGhpcy5faGFuZGxlQWxpZ25tZW50KGYsYSxiLGMpO3JldHVybiB0aGlzLmZvbnQuZ2V0UGF0aChhLGcueCxnLnksZi5fdGV4dFNpemUsZCl9LHkuRm9udC5wcm90b3R5cGUuX2dldFBhdGhEYXRhPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPTM7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGEmJmFyZ3VtZW50cy5sZW5ndGg+Mj9hPXRoaXMuX2dldFBhdGgoYSxiLGMsZCk6XCJvYmplY3RcIj09dHlwZW9mIGImJihkPWIpLGQmJlwibnVtYmVyXCI9PXR5cGVvZiBkLmRlY2ltYWxzJiYoZT1kLmRlY2ltYWxzKSxhLnRvUGF0aERhdGEoZSl9LHkuRm9udC5wcm90b3R5cGUuX2dldFNWRz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0zO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhJiZhcmd1bWVudHMubGVuZ3RoPjI/YT10aGlzLl9nZXRQYXRoKGEsYixjLGQpOlwib2JqZWN0XCI9PXR5cGVvZiBiJiYoZD1iKSxkJiYoXCJudW1iZXJcIj09dHlwZW9mIGQuZGVjaW1hbHMmJihlPWQuZGVjaW1hbHMpLFwibnVtYmVyXCI9PXR5cGVvZiBkLnN0cm9rZVdpZHRoJiYoYS5zdHJva2VXaWR0aD1kLnN0cm9rZVdpZHRoKSx2b2lkIDAhPT1kLmZpbGwmJihhLmZpbGw9ZC5maWxsKSx2b2lkIDAhPT1kLnN0cm9rZSYmKGEuc3Ryb2tlPWQuc3Ryb2tlKSksYS50b1NWRyhlKX0seS5Gb250LnByb3RvdHlwZS5fcmVuZGVyUGF0aD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmPWQmJmQucmVuZGVyZXJ8fHRoaXMucGFyZW50Ll9yZW5kZXJlcixnPWYuZHJhd2luZ0NvbnRleHQ7ZT1cIm9iamVjdFwiPT10eXBlb2YgYSYmYS5jb21tYW5kcz9hLmNvbW1hbmRzOnRoaXMuX2dldFBhdGgoYSxiLGMsZCkuY29tbWFuZHMsZy5iZWdpblBhdGgoKTtmb3IodmFyIGg9MDtoPGUubGVuZ3RoO2grPTEpe3ZhciBpPWVbaF07XCJNXCI9PT1pLnR5cGU/Zy5tb3ZlVG8oaS54LGkueSk6XCJMXCI9PT1pLnR5cGU/Zy5saW5lVG8oaS54LGkueSk6XCJDXCI9PT1pLnR5cGU/Zy5iZXppZXJDdXJ2ZVRvKGkueDEsaS55MSxpLngyLGkueTIsaS54LGkueSk6XCJRXCI9PT1pLnR5cGU/Zy5xdWFkcmF0aWNDdXJ2ZVRvKGkueDEsaS55MSxpLngsaS55KTpcIlpcIj09PWkudHlwZSYmZy5jbG9zZVBhdGgoKX1yZXR1cm4gZi5fZG9TdHJva2UmJmYuX3N0cm9rZVNldCYmZy5zdHJva2UoKSxmLl9kb0ZpbGwmJihmLl9maWxsU2V0fHxmLl9zZXRGaWxsKHouX0RFRkFVTFRfVEVYVF9GSUxMKSxnLmZpbGwoKSksdGhpc30seS5Gb250LnByb3RvdHlwZS5fdGV4dFdpZHRoPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZm9udC5nZXRBZHZhbmNlV2lkdGgoYSxiKX0seS5Gb250LnByb3RvdHlwZS5fdGV4dEFzY2VudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5mb250LmFzY2VuZGVyKnRoaXMuX3NjYWxlKGEpfSx5LkZvbnQucHJvdG90eXBlLl90ZXh0RGVzY2VudD1mdW5jdGlvbihhKXtyZXR1cm4tdGhpcy5mb250LmRlc2NlbmRlcip0aGlzLl9zY2FsZShhKX0seS5Gb250LnByb3RvdHlwZS5fc2NhbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIDEvdGhpcy5mb250LnVuaXRzUGVyRW0qKGF8fHRoaXMucGFyZW50Ll9yZW5kZXJlci5fdGV4dFNpemUpfSx5LkZvbnQucHJvdG90eXBlLl9oYW5kbGVBbGlnbm1lbnQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1hLl90ZXh0U2l6ZTtzd2l0Y2godm9pZCAwPT09ZSYmKGU9dGhpcy5fdGV4dFdpZHRoKGIsZikpLGEuX3RleHRBbGlnbil7Y2FzZSB6LkNFTlRFUjpjLT1lLzI7YnJlYWs7Y2FzZSB6LlJJR0hUOmMtPWV9c3dpdGNoKGEuX3RleHRCYXNlbGluZSl7Y2FzZSB6LlRPUDpkKz10aGlzLl90ZXh0QXNjZW50KGYpO2JyZWFrO2Nhc2Ugei5DRU5URVI6ZCs9dGhpcy5fdGV4dEFzY2VudChmKS8yO2JyZWFrO2Nhc2Ugei5CT1RUT006ZC09dGhpcy5fdGV4dERlc2NlbnQoZil9cmV0dXJue3g6Yyx5OmR9fSxiLmV4cG9ydHM9eX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihhLGIpe3JldHVybiBhLnB1c2goYiksYX0sZC5wcm90b3R5cGUuYXJyYXlDb3B5PWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZzt2b2lkIDAhPT1lPyhnPU1hdGgubWluKGUsYS5sZW5ndGgpLGY9ZCxhPWEuc2xpY2UoYixnK2IpKToodm9pZCAwIT09Yz8oZz1jLGc9TWF0aC5taW4oZyxhLmxlbmd0aCkpOmc9YS5sZW5ndGgsZj0wLGM9YixhPWEuc2xpY2UoMCxnKSksQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShjLFtmLGddLmNvbmNhdChhKSl9LGQucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihhLGIpe3JldHVybiBhLmNvbmNhdChiKX0sZC5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXZlcnNlKCl9LGQucHJvdG90eXBlLnNob3J0ZW49ZnVuY3Rpb24oYSl7cmV0dXJuIGEucG9wKCksYX0sZC5wcm90b3R5cGUuc2h1ZmZsZT1mdW5jdGlvbihhLGIpe3ZhciBjPUFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJkFycmF5QnVmZmVyLmlzVmlldyhhKTthPWJ8fGM/YTphLnNsaWNlKCk7Zm9yKHZhciBkLGUsZj1hLmxlbmd0aDtmPjE7KWQ9TWF0aC5yYW5kb20oKSpmfDAsZT1hWy0tZl0sYVtmXT1hW2RdLGFbZF09ZTtyZXR1cm4gYX0sZC5wcm90b3R5cGUuc29ydD1mdW5jdGlvbihhLGIpe3ZhciBjPWI/YS5zbGljZSgwLE1hdGgubWluKGIsYS5sZW5ndGgpKTphLGQ9Yj9hLnNsaWNlKE1hdGgubWluKGIsYS5sZW5ndGgpKTpbXTtyZXR1cm4gYz1cInN0cmluZ1wiPT10eXBlb2YgY1swXT9jLnNvcnQoKTpjLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS1ifSksYy5jb25jYXQoZCl9LGQucHJvdG90eXBlLnNwbGljZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoYSxbYywwXS5jb25jYXQoYikpLGF9LGQucHJvdG90eXBlLnN1YnNldD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHZvaWQgMCE9PWM/YS5zbGljZShiLGIrYyk6YS5zbGljZShiLGEubGVuZ3RoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmZsb2F0PWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAocGFyc2VGbG9hdCk6cGFyc2VGbG9hdChhKX0sZC5wcm90b3R5cGUuaW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9Ynx8MTAsXCJzdHJpbmdcIj09dHlwZW9mIGE/cGFyc2VJbnQoYSxiKTpcIm51bWJlclwiPT10eXBlb2YgYT8wfGE6XCJib29sZWFuXCI9PXR5cGVvZiBhP2E/MTowOmEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gZC5wcm90b3R5cGUuaW50KGEsYil9KTp2b2lkIDB9LGQucHJvdG90eXBlLnN0cj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLnN0cik6U3RyaW5nKGEpfSxkLnByb3RvdHlwZS5ib29sZWFuPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPzAhPT1hOlwic3RyaW5nXCI9PXR5cGVvZiBhP1widHJ1ZVwiPT09YS50b0xvd2VyQ2FzZSgpOlwiYm9vbGVhblwiPT10eXBlb2YgYT9hOmEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChkLnByb3RvdHlwZS5ib29sZWFuKTp2b2lkIDB9LGQucHJvdG90eXBlLmJ5dGU9ZnVuY3Rpb24oYSl7dmFyIGI9ZC5wcm90b3R5cGUuaW50KGEsMTApO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBiPyhiKzEyOCklMjU2LTEyODpiIGluc3RhbmNlb2YgQXJyYXk/Yi5tYXAoZC5wcm90b3R5cGUuYnl0ZSk6dm9pZCAwfSxkLnByb3RvdHlwZS5jaGFyPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiBhfHxpc05hTihhKT9hIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUuY2hhcik6XCJzdHJpbmdcIj09dHlwZW9mIGE/ZC5wcm90b3R5cGUuY2hhcihwYXJzZUludChhLDEwKSk6dm9pZCAwOlN0cmluZy5mcm9tQ2hhckNvZGUoYSl9LGQucHJvdG90eXBlLnVuY2hhcj1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYSYmMT09PWEubGVuZ3RoP2EuY2hhckNvZGVBdCgwKTphIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUudW5jaGFyKTp2b2lkIDB9LGQucHJvdG90eXBlLmhleD1mdW5jdGlvbihhLGIpe2lmKGI9dm9pZCAwPT09Ynx8bnVsbD09PWI/Yj04OmIsYSBpbnN0YW5jZW9mIEFycmF5KXJldHVybiBhLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gZC5wcm90b3R5cGUuaGV4KGEsYil9KTtpZihcIm51bWJlclwiPT10eXBlb2YgYSl7YTwwJiYoYT00Mjk0OTY3Mjk1K2ErMSk7Zm9yKHZhciBjPU51bWJlcihhKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtjLmxlbmd0aDxiOyljPVwiMFwiK2M7cmV0dXJuIGMubGVuZ3RoPj1iJiYoYz1jLnN1YnN0cmluZyhjLmxlbmd0aC1iLGMubGVuZ3RoKSksY319LGQucHJvdG90eXBlLnVuaGV4PWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUudW5oZXgpOnBhcnNlSW50KFwiMHhcIithLDE2KX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjKXt2YXIgZD1hPDAsZT1kP2EudG9TdHJpbmcoKS5zdWJzdHJpbmcoMSk6YS50b1N0cmluZygpLGY9ZS5pbmRleE9mKFwiLlwiKSxnPS0xIT09Zj9lLnN1YnN0cmluZygwLGYpOmUsaD0tMSE9PWY/ZS5zdWJzdHJpbmcoZisxKTpcIlwiLGk9ZD9cIi1cIjpcIlwiO2lmKHZvaWQgMCE9PWMpe3ZhciBqPVwiXCI7KC0xIT09Znx8Yy1oLmxlbmd0aD4wKSYmKGo9XCIuXCIpLGgubGVuZ3RoPmMmJihoPWguc3Vic3RyaW5nKDAsYykpO2Zvcih2YXIgaz0wO2s8Yi1nLmxlbmd0aDtrKyspaSs9XCIwXCI7aSs9ZyxpKz1qLGkrPWg7Zm9yKHZhciBsPTA7bDxjLWgubGVuZ3RoO2wrKylpKz1cIjBcIjtyZXR1cm4gaX1mb3IodmFyIG09MDttPE1hdGgubWF4KGItZy5sZW5ndGgsMCk7bSsrKWkrPVwiMFwiO3JldHVybiBpKz1lfWZ1bmN0aW9uIGUoYSxiKXthPWEudG9TdHJpbmcoKTt2YXIgYz1hLmluZGV4T2YoXCIuXCIpLGQ9LTEhPT1jP2Euc3Vic3RyaW5nKGMpOlwiXCIsZT0tMSE9PWM/YS5zdWJzdHJpbmcoMCxjKTphO2lmKGU9ZS50b1N0cmluZygpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csXCIsXCIpLDA9PT1iKWQ9XCJcIjtlbHNlIGlmKHZvaWQgMCE9PWIpaWYoYj5kLmxlbmd0aCl7ZCs9LTE9PT1jP1wiLlwiOlwiXCI7Zm9yKHZhciBmPWItZC5sZW5ndGgrMSxnPTA7ZzxmO2crKylkKz1cIjBcIn1lbHNlIGQ9ZC5zdWJzdHJpbmcoMCxiKzEpO3JldHVybiBlK2R9ZnVuY3Rpb24gZihhKXtyZXR1cm4gcGFyc2VGbG9hdChhKT4wP1wiK1wiK2EudG9TdHJpbmcoKTphLnRvU3RyaW5nKCl9ZnVuY3Rpb24gZyhhKXtyZXR1cm4gcGFyc2VGbG9hdChhKT4wP1wiIFwiK2EudG9TdHJpbmcoKTphLnRvU3RyaW5nKCl9dmFyIGg9YShcIi4uL2NvcmUvbWFpblwiKTthKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGgucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiam9pblwiLGFyZ3VtZW50cyksYS5qb2luKGIpfSxoLnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbihhLGIpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYXRjaFwiLGFyZ3VtZW50cyksYS5tYXRjaChiKX0saC5wcm90b3R5cGUubWF0Y2hBbGw9ZnVuY3Rpb24oYSxiKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYXRjaEFsbFwiLGFyZ3VtZW50cyk7Zm9yKHZhciBjPW5ldyBSZWdFeHAoYixcImdcIiksZD1jLmV4ZWMoYSksZT1bXTtudWxsIT09ZDspZS5wdXNoKGQpLGQ9Yy5leGVjKGEpO3JldHVybiBlfSxoLnByb3RvdHlwZS5uZj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5mXCIsYXJndW1lbnRzKSxhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGQoYSxiLGMpfSk6XCJbb2JqZWN0IEFyZ3VtZW50c11cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKT8zPT09YS5sZW5ndGg/dGhpcy5uZihhWzBdLGFbMV0sYVsyXSk6Mj09PWEubGVuZ3RoP3RoaXMubmYoYVswXSxhWzFdKTp0aGlzLm5mKGFbMF0pOmQoYSxiLGMpfSxoLnByb3RvdHlwZS5uZmM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibmZjXCIsYXJndW1lbnRzKSxhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSxiKX0pOmUoYSxiKX0saC5wcm90b3R5cGUubmZwPWZ1bmN0aW9uKCl7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibmZwXCIsYXJndW1lbnRzKTt2YXIgYT1oLnByb3RvdHlwZS5uZi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChmKTpmKGEpfSxoLnByb3RvdHlwZS5uZnM9ZnVuY3Rpb24oKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJuZnNcIixhcmd1bWVudHMpO3ZhciBhPWgucHJvdG90eXBlLm5mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGcpOmcoYSl9LGgucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwbGl0XCIsYXJndW1lbnRzKSxhLnNwbGl0KGIpfSxoLnByb3RvdHlwZS5zcGxpdFRva2Vucz1mdW5jdGlvbihhLGIpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwbGl0VG9rZW5zXCIsYXJndW1lbnRzKTt2YXIgYztpZih2b2lkIDAhPT1iKXt2YXIgZD1iLGU9L1xcXS9nLmV4ZWMoZCksZj0vXFxbL2cuZXhlYyhkKTtmJiZlPyhkPWQuc2xpY2UoMCxlLmluZGV4KStkLnNsaWNlKGUuaW5kZXgrMSksZj0vXFxbL2cuZXhlYyhkKSxkPWQuc2xpY2UoMCxmLmluZGV4KStkLnNsaWNlKGYuaW5kZXgrMSksYz1uZXcgUmVnRXhwKFwiW1xcXFxbXCIrZCtcIlxcXFxdXVwiLFwiZ1wiKSk6ZT8oZD1kLnNsaWNlKDAsZS5pbmRleCkrZC5zbGljZShlLmluZGV4KzEpLGM9bmV3IFJlZ0V4cChcIltcIitkK1wiXFxcXF1dXCIsXCJnXCIpKTpmPyhkPWQuc2xpY2UoMCxmLmluZGV4KStkLnNsaWNlKGYuaW5kZXgrMSksYz1uZXcgUmVnRXhwKFwiW1wiK2QrXCJcXFxcW11cIixcImdcIikpOmM9bmV3IFJlZ0V4cChcIltcIitkK1wiXVwiLFwiZ1wiKX1lbHNlIGM9L1xccy9nO3JldHVybiBhLnNwbGl0KGMpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYX0pfSxoLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKGEpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0cmltXCIsYXJndW1lbnRzKSxhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAodGhpcy50cmltKTphLnRyaW0oKX0sYi5leHBvcnRzPWh9LHtcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjR9XSw2MzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuZGF5PWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXREYXRlKCl9LGQucHJvdG90eXBlLmhvdXI9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldEhvdXJzKCl9LGQucHJvdG90eXBlLm1pbnV0ZT1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0TWludXRlcygpfSxkLnByb3RvdHlwZS5taWxsaXM9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpfSxkLnByb3RvdHlwZS5tb250aD1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0TW9udGgoKSsxfSxkLnByb3RvdHlwZS5zZWNvbmQ9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFNlY29uZHMoKX0sZC5wcm90b3R5cGUueWVhcj1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2EoXCIuL3A1Lkdlb21ldHJ5XCIpO3ZhciBlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLnByb3RvdHlwZS5wbGFuZT1mdW5jdGlvbihhLGIsYyxlKXt0aGlzLl9hc3NlcnQzZChcInBsYW5lXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBsYW5lXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9MSksdm9pZCAwPT09ZSYmKGU9MSk7dmFyIGY9XCJwbGFuZXxcIitjK1wifFwiK2U7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGYpKXt2YXIgZz1mdW5jdGlvbigpe2Zvcih2YXIgYSxiLGMsZT0wO2U8PXRoaXMuZGV0YWlsWTtlKyspe2I9ZS90aGlzLmRldGFpbFk7Zm9yKHZhciBmPTA7Zjw9dGhpcy5kZXRhaWxYO2YrKylhPWYvdGhpcy5kZXRhaWxYLGM9bmV3IGQuVmVjdG9yKGEtLjUsYi0uNSwwKSx0aGlzLnZlcnRpY2VzLnB1c2goYyksdGhpcy51dnMucHVzaChhLGIpfX0saD1uZXcgZC5HZW9tZXRyeShjLGUsZyk7aC5jb21wdXRlRmFjZXMoKS5jb21wdXRlTm9ybWFscygpLGM8PTEmJmU8PTE/aC5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gcGxhbmUgb2JqZWN0cyB3aXRoIG1vcmUgdGhhbiAxIGRldGFpbFggb3IgMSBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoZixoKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoZixhLGIsMSksdGhpc30sZC5wcm90b3R5cGUuYm94PWZ1bmN0aW9uKGEsYixjLGUsZil7dGhpcy5fYXNzZXJ0M2QoXCJib3hcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYm94XCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9Yik7dmFyIGc9dGhpcy5fcmVuZGVyZXIuYXR0cmlidXRlcyYmdGhpcy5fcmVuZGVyZXIuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nO3ZvaWQgMD09PWUmJihlPWc/MTo0KSx2b2lkIDA9PT1mJiYoZj1nPzE6NCk7dmFyIGg9XCJib3h8XCIrZStcInxcIitmO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChoKSl7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgYT1bWzAsNCwyLDZdLFsxLDMsNSw3XSxbMCwxLDQsNV0sWzIsNiwzLDddLFswLDIsMSwzXSxbNCw1LDYsN11dO3RoaXMuc3Ryb2tlSW5kaWNlcz1bWzAsMV0sWzEsM10sWzMsMl0sWzYsN10sWzgsOV0sWzksMTFdLFsxNCwxNV0sWzE2LDE3XSxbMTcsMTldLFsxOCwxOV0sWzIwLDIxXSxbMjIsMjNdXTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl7Zm9yKHZhciBjPWFbYl0sZT00KmIsZj0wO2Y8NDtmKyspe3ZhciBnPWNbZl0saD1uZXcgZC5WZWN0b3IoKDIqKDEmZyktMSkvMiwoKDImZyktMSkvMiwoKDQmZykvMi0xKS8yKTt0aGlzLnZlcnRpY2VzLnB1c2goaCksdGhpcy51dnMucHVzaCgxJmYsKDImZikvMil9dGhpcy5mYWNlcy5wdXNoKFtlLGUrMSxlKzJdKSx0aGlzLmZhY2VzLnB1c2goW2UrMixlKzEsZSszXSl9fSxqPW5ldyBkLkdlb21ldHJ5KGUsZixpKTtqLmNvbXB1dGVOb3JtYWxzKCksZTw9NCYmZjw9ND9qLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBib3ggb2JqZWN0cyB3aXRoIG1vcmUgdGhhbiA0IGRldGFpbFggb3IgNCBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoaCxqKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoaCxhLGIsYyksdGhpc30sZC5wcm90b3R5cGUuc3BoZXJlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJzcGhlcmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3BoZXJlXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9MjQpLHZvaWQgMD09PWMmJihjPTE2KSx0aGlzLmVsbGlwc29pZChhLGEsYSxiLGMpLHRoaXN9O3ZhciBmPWZ1bmN0aW9uKGEsYixjLGUsZixnLGgpe2E9YTw9MD8xOmEsYj1iPDA/MDpiLGM9Yzw9MD9hOmMsZT1lPDM/MzplLGY9ZjwxPzE6ZixnPXZvaWQgMD09PWd8fGcsaD12b2lkIDA9PT1oPzAhPT1iOmg7dmFyIGksaixrLGwsbSxuPWc/LTI6MCxvPWYrKGg/MjowKSxwPXt9LHE9TWF0aC5hdGFuMihhLWIsYyk7Zm9yKGk9bjtpPD1vOysraSl7dmFyIHIscz1pL2YsdD1jKnM7Zm9yKGk8MD8odD0wLHM9MCxyPWEpOmk+Zj8odD1jLHM9MSxyPWIpOnI9YSsoYi1hKSpzLC0yIT09aSYmaSE9PWYrMnx8KHI9MCksdC09Yy8yLHBbaV09MD09PXI/MTplLGo9MDtqPHBbaV07KytqKXt2YXIgdT1qL2U7dGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihNYXRoLnNpbigyKnUqTWF0aC5QSSkqcix0LE1hdGguY29zKDIqdSpNYXRoLlBJKSpyKSksdGhpcy52ZXJ0ZXhOb3JtYWxzLnB1c2gobmV3IGQuVmVjdG9yKGk8MHx8aT5mPzA6TWF0aC5zaW4oMip1Kk1hdGguUEkpKk1hdGguY29zKHEpLGk8MD8tMTppPmY/MTpNYXRoLnNpbihxKSxpPDB8fGk+Zj8wOk1hdGguY29zKDIqdSpNYXRoLlBJKSpNYXRoLmNvcyhxKSkpLHRoaXMudXZzLnB1c2godSxzKX19dmFyIHY9MDtpZihnKXtmb3Ioaz0wO2s8cFstMV07KytrKW09KGsrMSklcFstMV0sdGhpcy5mYWNlcy5wdXNoKFt2LHYrMSttLHYrMStrXSk7dis9cFstMl0rcFstMV19Zm9yKGk9MDtpPGY7KytpKXtmb3Ioaj0wO2o8cFtpXTsrK2opMT09PXBbaSsxXT8obD0oaisxKSVwW2ldLHRoaXMuZmFjZXMucHVzaChbditqLHYrbCx2K3BbaV1dKSk6KGw9KGorMSklcFtpXSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K2wsditwW2ldK2xdKSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K3BbaV0rbCx2K3BbaV0ral0pKTt2Kz1wW2ldfWlmKGgpZm9yKHYrPXBbZl0saj0wO2o8cFtmKzFdOysrailsPShqKzEpJXBbZisxXSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K2wsditwW2YrMV1dKX07ZC5wcm90b3R5cGUuY3lsaW5kZXI9ZnVuY3Rpb24oYSxiLGMsZSxnLGgpe3RoaXMuX2Fzc2VydDNkKFwiY3lsaW5kZXJcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3lsaW5kZXJcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj1hKSx2b2lkIDA9PT1jJiYoYz0yNCksdm9pZCAwPT09ZSYmKGU9MSksdm9pZCAwPT09aCYmKGg9ITApLFxudm9pZCAwPT09ZyYmKGc9ITApO3ZhciBpPVwiY3lsaW5kZXJ8XCIrYytcInxcIitlK1wifFwiK2crXCJ8XCIraDtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goaSkpe3ZhciBqPW5ldyBkLkdlb21ldHJ5KGMsZSk7Zi5jYWxsKGosMSwxLDEsYyxlLGcsaCksai5jb21wdXRlTm9ybWFscygpLGM8PTI0JiZlPD0xNj9qLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBjeWxpbmRlciBvYmplY3RzIHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMTYgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGksail9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGksYSxiLGEpLHRoaXN9LGQucHJvdG90eXBlLmNvbmU9ZnVuY3Rpb24oYSxiLGMsZSxnKXt0aGlzLl9hc3NlcnQzZChcImNvbmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29uZVwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPTI0KSx2b2lkIDA9PT1lJiYoZT0xKSx2b2lkIDA9PT1nJiYoZz0hMCk7dmFyIGg9XCJjb25lfFwiK2MrXCJ8XCIrZStcInxcIitnO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChoKSl7dmFyIGk9bmV3IGQuR2VvbWV0cnkoYyxlKTtmLmNhbGwoaSwxLDAsMSxjLGUsZywhMSksaS5jb21wdXRlTm9ybWFscygpLGM8PTI0JiZlPD0xNj9pLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBjb25lIG9iamVjdHMgd2l0aCBtb3JlIHRoYW4gMjQgZGV0YWlsWCBvciAxNiBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoaCxpKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoaCxhLGIsYSksdGhpc30sZC5wcm90b3R5cGUuZWxsaXBzb2lkPWZ1bmN0aW9uKGEsYixjLGUsZil7dGhpcy5fYXNzZXJ0M2QoXCJlbGxpcHNvaWRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZWxsaXBzb2lkXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9YSksdm9pZCAwPT09ZSYmKGU9MjQpLHZvaWQgMD09PWYmJihmPTE2KTt2YXIgZz1cImVsbGlwc29pZHxcIitlK1wifFwiK2Y7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGcpKXt2YXIgaD1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspZm9yKHZhciBiPWEvdGhpcy5kZXRhaWxZLGM9TWF0aC5QSSpiLU1hdGguUEkvMixlPU1hdGguY29zKGMpLGY9TWF0aC5zaW4oYyksZz0wO2c8PXRoaXMuZGV0YWlsWDtnKyspe3ZhciBoPWcvdGhpcy5kZXRhaWxYLGk9MipNYXRoLlBJKmgsaj1NYXRoLmNvcyhpKSxrPU1hdGguc2luKGkpLGw9bmV3IGQuVmVjdG9yKGUqayxmLGUqaik7dGhpcy52ZXJ0aWNlcy5wdXNoKGwpLHRoaXMudmVydGV4Tm9ybWFscy5wdXNoKGwpLHRoaXMudXZzLnB1c2goaCxiKX19LGk9bmV3IGQuR2VvbWV0cnkoZSxmLGgpO2kuY29tcHV0ZUZhY2VzKCksZTw9MjQmJmY8PTI0P2kuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlIG9uIGVsbGlwc29pZHMgd2l0aCBtb3JlIHRoYW4gMjQgZGV0YWlsWCBvciAyNCBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoZyxpKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoZyxhLGIsYyksdGhpc30sZC5wcm90b3R5cGUudG9ydXM9ZnVuY3Rpb24oYSxiLGMsZSl7aWYodGhpcy5fYXNzZXJ0M2QoXCJ0b3J1c1wiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0b3J1c1wiLGFyZ3VtZW50cyksdm9pZCAwPT09YSlhPTUwO2Vsc2UgaWYoIWEpcmV0dXJuO2lmKHZvaWQgMD09PWIpYj0xMDtlbHNlIGlmKCFiKXJldHVybjt2b2lkIDA9PT1jJiYoYz0yNCksdm9pZCAwPT09ZSYmKGU9MTYpO3ZhciBmPShiL2EpLnRvUHJlY2lzaW9uKDQpLGc9XCJ0b3J1c3xcIitmK1wifFwiK2MrXCJ8XCIrZTtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goZykpe3ZhciBoPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTw9dGhpcy5kZXRhaWxZO2ErKylmb3IodmFyIGI9YS90aGlzLmRldGFpbFksYz0yKk1hdGguUEkqYixlPU1hdGguY29zKGMpLGc9TWF0aC5zaW4oYyksaD0xK2YqZSxpPTA7aTw9dGhpcy5kZXRhaWxYO2krKyl7dmFyIGo9aS90aGlzLmRldGFpbFgsaz0yKk1hdGguUEkqaixsPU1hdGguY29zKGspLG09TWF0aC5zaW4oayksbj1uZXcgZC5WZWN0b3IoaCpsLGgqbSxmKmcpLG89bmV3IGQuVmVjdG9yKGUqbCxlKm0sZyk7dGhpcy52ZXJ0aWNlcy5wdXNoKG4pLHRoaXMudmVydGV4Tm9ybWFscy5wdXNoKG8pLHRoaXMudXZzLnB1c2goaixiKX19LGk9bmV3IGQuR2VvbWV0cnkoYyxlLGgpO2kuY29tcHV0ZUZhY2VzKCksYzw9MjQmJmU8PTE2P2kuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlcyBvbiB0b3J1cyBvYmplY3Qgd2l0aCBtb3JlIHRoYW4gMjQgZGV0YWlsWCBvciAxNiBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoZyxpKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoZyxhLGEsYSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihhLGIsYyl7dGhpcy5fdXNlUG9pbnRTaGFkZXIoKSx0aGlzLmN1clBvaW50U2hhZGVyLmJpbmRTaGFkZXIoKSx2b2lkIDA9PT1jJiYoYz0wKTt2YXIgZT1bXTtyZXR1cm4gZS5wdXNoKG5ldyBkLlZlY3RvcihhLGIsYykpLHRoaXMuX2RyYXdQb2ludHMoZSx0aGlzLl9wb2ludFZlcnRleEJ1ZmZlciksdGhpcy5jdXJQb2ludFNoYWRlci51bmJpbmRTaGFkZXIoKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnRyaWFuZ2xlPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGU9YVsyXSxmPWFbM10sZz1hWzRdLGg9YVs1XSxpPVwidHJpXCI7aWYoIXRoaXMuZ2VvbWV0cnlJbkhhc2goaSkpe3ZhciBqPWZ1bmN0aW9uKCl7dmFyIGE9W107YS5wdXNoKG5ldyBkLlZlY3RvcigwLDAsMCkpLGEucHVzaChuZXcgZC5WZWN0b3IoMCwxLDApKSxhLnB1c2gobmV3IGQuVmVjdG9yKDEsMCwwKSksdGhpcy5zdHJva2VJbmRpY2VzPVtbMCwxXSxbMSwyXSxbMiwwXV0sdGhpcy52ZXJ0aWNlcz1hLHRoaXMuZmFjZXM9W1swLDEsMl1dLHRoaXMudXZzPVswLDAsMCwxLDEsMV19LGs9bmV3IGQuR2VvbWV0cnkoMSwxLGopO2suX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpLGsuY29tcHV0ZU5vcm1hbHMoKSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoaSxrKX12YXIgbD10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3ZhciBtPW5ldyBkLk1hdHJpeChbZS1iLGYtYywwLDAsZy1iLGgtYywwLDAsMCwwLDEsMCxiLGMsMCwxXSkubXVsdCh0aGlzLnVNVk1hdHJpeCk7dGhpcy51TVZNYXRyaXg9bSx0aGlzLmRyYXdCdWZmZXJzKGkpfWZpbmFsbHl7dGhpcy51TVZNYXRyaXg9bH1yZXR1cm4gdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5lbGxpcHNlPWZ1bmN0aW9uKGEpe3RoaXMuYXJjKGFbMF0sYVsxXSxhWzJdLGFbM10sMCxlLlRXT19QSSxlLk9QRU4sYVs0XSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuYXJjPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZj1hcmd1bWVudHNbMF0sZz1hcmd1bWVudHNbMV0saD1hcmd1bWVudHNbMl0saT1hcmd1bWVudHNbM10saj1hcmd1bWVudHNbNF0saz1hcmd1bWVudHNbNV0sbD1hcmd1bWVudHNbNl0sbT1hcmd1bWVudHNbN118fDI1O2lmKE1hdGguYWJzKGstaik+PWUuVFdPX1BJPyhiPVwiZWxsaXBzZVwiLGM9YitcInxcIittK1wifFwiKTooYj1cImFyY1wiLGM9YitcInxcIitqK1wifFwiK2srXCJ8XCIrbCtcInxcIittK1wifFwiKSwhdGhpcy5nZW9tZXRyeUluSGFzaChjKSl7dmFyIG49ZnVuY3Rpb24oKXtpZih0aGlzLnN0cm9rZUluZGljZXM9W10sai50b0ZpeGVkKDEwKSE9PWsudG9GaXhlZCgxMCkpe2whPT1lLlBJRSYmdm9pZCAwIT09bHx8KHRoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoLjUsLjUsMCkpLHRoaXMudXZzLnB1c2goWy41LC41XSkpO2Zvcih2YXIgYT0wO2E8PW07YSsrKXt2YXIgYj1hL20sYz0oay1qKSpiK2osZj0uNStNYXRoLmNvcyhjKS8yLGc9LjUrTWF0aC5zaW4oYykvMjt0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGYsZywwKSksdGhpcy51dnMucHVzaChbZixnXSksYTxtLTEmJih0aGlzLmZhY2VzLnB1c2goWzAsYSsxLGErMl0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFthKzEsYSsyXSkpfXN3aXRjaChsKXtjYXNlIGUuUElFOnRoaXMuZmFjZXMucHVzaChbMCx0aGlzLnZlcnRpY2VzLmxlbmd0aC0yLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCwxXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goW3RoaXMudmVydGljZXMubGVuZ3RoLTIsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKTticmVhaztjYXNlIGUuQ0hPUkQ6dGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKTticmVhaztjYXNlIGUuT1BFTjp0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCwxXSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmZhY2VzLnB1c2goWzAsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMix0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goW3RoaXMudmVydGljZXMubGVuZ3RoLTIsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pfX19LG89bmV3IGQuR2VvbWV0cnkobSwxLG4pO28uY29tcHV0ZU5vcm1hbHMoKSxtPD01MD9vLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMobyk6Y29uc29sZS5sb2coXCJDYW5ub3Qgc3Ryb2tlIFwiK2IrXCIgd2l0aCBtb3JlIHRoYW4gNTAgZGV0YWlsXCIpLHRoaXMuY3JlYXRlQnVmZmVycyhjLG8pfXZhciBwPXRoaXMudU1WTWF0cml4LmNvcHkoKTt0cnl7dGhpcy51TVZNYXRyaXgudHJhbnNsYXRlKFtmLGcsMF0pLHRoaXMudU1WTWF0cml4LnNjYWxlKGgsaSwxKSx0aGlzLmRyYXdCdWZmZXJzKGMpfWZpbmFsbHl7dGhpcy51TVZNYXRyaXg9cH1yZXR1cm4gdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nLGM9YVswXSxlPWFbMV0sZj1hWzJdLGc9YVszXSxoPWFbNF18fChiPzE6MjQpLGk9YVs1XXx8KGI/MToxNiksaj1cInJlY3R8XCIraCtcInxcIitpO2lmKCF0aGlzLmdlb21ldHJ5SW5IYXNoKGopKXt2YXIgaz1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspZm9yKHZhciBiPWEvdGhpcy5kZXRhaWxZLGM9MDtjPD10aGlzLmRldGFpbFg7YysrKXt2YXIgZT1jL3RoaXMuZGV0YWlsWCxmPW5ldyBkLlZlY3RvcihlLGIsMCk7dGhpcy52ZXJ0aWNlcy5wdXNoKGYpLHRoaXMudXZzLnB1c2goZSxiKX1oPjAmJmk+MCYmKHRoaXMuc3Ryb2tlSW5kaWNlcz1bWzAsaF0sW2gsKGgrMSkqKGkrMSktMV0sWyhoKzEpKihpKzEpLTEsKGgrMSkqaV0sWyhoKzEpKmksMF1dKX0sbD1uZXcgZC5HZW9tZXRyeShoLGksayk7bC5jb21wdXRlRmFjZXMoKS5jb21wdXRlTm9ybWFscygpLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoaixsKX12YXIgbT10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3RoaXMudU1WTWF0cml4LnRyYW5zbGF0ZShbYyxlLDBdKSx0aGlzLnVNVk1hdHJpeC5zY2FsZShmLGcsMSksdGhpcy5kcmF3QnVmZmVycyhqKX1maW5hbGx5e3RoaXMudU1WTWF0cml4PW19cmV0dXJuIHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucXVhZD1mdW5jdGlvbihhLGIsYyxlLGYsZyxoLGkpe3ZhciBqPVwicXVhZHxcIithK1wifFwiK2IrXCJ8XCIrYytcInxcIitlK1wifFwiK2YrXCJ8XCIrZytcInxcIitoK1wifFwiK2k7aWYoIXRoaXMuZ2VvbWV0cnlJbkhhc2goaikpe3ZhciBrPWZ1bmN0aW9uKCl7dGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihhLGIsMCkpLHRoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoYyxlLDApKSx0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGYsZywwKSksdGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihoLGksMCkpLHRoaXMudXZzLnB1c2goMCwwLDEsMCwxLDEsMCwxKSx0aGlzLnN0cm9rZUluZGljZXM9W1swLDFdLFsxLDJdLFsyLDNdLFszLDBdXX0sbD1uZXcgZC5HZW9tZXRyeSgyLDIsayk7bC5jb21wdXRlTm9ybWFscygpLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSxsLmZhY2VzPVtbMCwxLDJdLFsyLDMsMF1dLHRoaXMuY3JlYXRlQnVmZmVycyhqLGwpfXJldHVybiB0aGlzLmRyYXdCdWZmZXJzKGopLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuYmV6aWVyPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpLGosayxsKXs4PT09YXJndW1lbnRzLmxlbmd0aCYmKGo9ZyxrPWgsZz1lLGg9ZCxkPWMsZT1kLGM9Zj1pPWw9MCk7dmFyIG09dGhpcy5fcEluc3QuX2JlemllckRldGFpbHx8MjA7dGhpcy5iZWdpblNoYXBlKCk7Zm9yKHZhciBuPTA7bjw9bTtuKyspe3ZhciBvPU1hdGgucG93KDEtbi9tLDMpLHA9bi9tKjMqTWF0aC5wb3coMS1uL20sMikscT0zKk1hdGgucG93KG4vbSwyKSooMS1uL20pLHI9TWF0aC5wb3cobi9tLDMpO3RoaXMudmVydGV4KGEqbytkKnArZypxK2oqcixiKm8rZSpwK2gqcStrKnIsYypvK2YqcCtpKnErbCpyKX1yZXR1cm4gdGhpcy5lbmRTaGFwZSgpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuY3VydmU9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGksaixrLGwpezg9PT1hcmd1bWVudHMubGVuZ3RoJiYoaj1nLGs9aCxnPWUsaD1kLGQ9YyxlPWQsYz1mPWk9bD0wKTt2YXIgbT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7dGhpcy5iZWdpblNoYXBlKCk7Zm9yKHZhciBuPTA7bjw9bTtuKyspe3ZhciBvPS41Kk1hdGgucG93KG4vbSwzKSxwPS41Kk1hdGgucG93KG4vbSwyKSxxPW4vbSouNSxyPS41LHM9byooMypkLWEtMypnK2opK3AqKDIqYS01KmQrNCpnLWopK3EqKC1hK2cpK3IqKDIqZCksdD1vKigzKmUtYi0zKmgraykrcCooMipiLTUqZSs0KmgtaykrcSooLWIraCkrciooMiplKSx1PW8qKDMqZi1jLTMqaStsKStwKigyKmMtNSpmKzQqaS1sKStxKigtYytpKStyKigyKmYpO3RoaXMudmVydGV4KHMsdCx1KX1yZXR1cm4gdGhpcy5lbmRTaGFwZSgpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUubGluZT1mdW5jdGlvbigpe3JldHVybiA2PT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5iZWdpblNoYXBlKCksdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pLHRoaXMudmVydGV4KGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNF0sYXJndW1lbnRzWzVdKSx0aGlzLmVuZFNoYXBlKCkpOjQ9PT1hcmd1bWVudHMubGVuZ3RoJiYodGhpcy5iZWdpblNoYXBlKCksdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSwwKSx0aGlzLnZlcnRleChhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLDApLHRoaXMuZW5kU2hhcGUoKSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5iZXppZXJWZXJ0ZXg9ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXgubGVuZ3RoKXRocm93IEVycm9yKFwidmVydGV4KCkgbXVzdCBiZSB1c2VkIG9uY2UgYmVmb3JlIGNhbGxpbmcgYmV6aWVyVmVydGV4KClcIik7dmFyIGEsYixjLGQsZSxmPVtdLGc9W10saD1bXSxpPWFyZ3VtZW50cy5sZW5ndGg7aWYoYT0wLDA9PT10aGlzLl9sb29rVXBUYWJsZUJlemllci5sZW5ndGh8fHRoaXMuX2x1dEJlemllckRldGFpbCE9PXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbCl7dGhpcy5fbG9va1VwVGFibGVCZXppZXI9W10sdGhpcy5fbHV0QmV6aWVyRGV0YWlsPXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbDtmb3IodmFyIGo9MS90aGlzLl9sdXRCZXppZXJEZXRhaWwsaz0wLGw9MSxtPTA7azwxOyl7aWYoYT1wYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksdGhpcy5fbG9va1VwVGFibGVCZXppZXJbbV09dGhpcy5fYmV6aWVyQ29lZmZpY2llbnRzKGEpLGwudG9GaXhlZCg2KT09PWoudG9GaXhlZCg2KSl7YT1wYXJzZUZsb2F0KGwudG9GaXhlZCg2KSkrcGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLCsrbSx0aGlzLl9sb29rVXBUYWJsZUJlemllclttXT10aGlzLl9iZXppZXJDb2VmZmljaWVudHMoYSk7YnJlYWt9ays9aixsLT1qLCsrbX19dmFyIG49dGhpcy5fbG9va1VwVGFibGVCZXppZXIubGVuZ3RoO2lmKDY9PT1pKXtmb3IodGhpcy5pc0Jlemllcj0hMCxmPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXSxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1s0XV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNV1dLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZlszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2dbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sdGhpcy52ZXJ0ZXgoYixjKTt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXT1hcmd1bWVudHNbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV09YXJndW1lbnRzWzVdfWVsc2UgaWYoOT09PWkpe2Zvcih0aGlzLmlzQmV6aWVyPSEwLGY9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzBdLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzZdXSxnPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsxXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzRdLGFyZ3VtZW50c1s3XV0saD1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMl0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1s1XSxhcmd1bWVudHNbOF1dLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZlszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2dbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sZD1oWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2hbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0raFsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStoWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyxkKTt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXT1hcmd1bWVudHNbNl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV09YXJndW1lbnRzWzddLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzJdPWFyZ3VtZW50c1s4XX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucXVhZHJhdGljVmVydGV4PWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4Lmxlbmd0aCl0aHJvdyBFcnJvcihcInZlcnRleCgpIG11c3QgYmUgdXNlZCBvbmNlIGJlZm9yZSBjYWxsaW5nIHF1YWRyYXRpY1ZlcnRleCgpXCIpO3ZhciBhLGIsYyxkLGUsZj1bXSxnPVtdLGg9W10saT1hcmd1bWVudHMubGVuZ3RoO2lmKGE9MCwwPT09dGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWMubGVuZ3RofHx0aGlzLl9sdXRRdWFkcmF0aWNEZXRhaWwhPT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWwpe3RoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljPVtdLHRoaXMuX2x1dFF1YWRyYXRpY0RldGFpbD10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7Zm9yKHZhciBqPTEvdGhpcy5fbHV0UXVhZHJhdGljRGV0YWlsLGs9MCxsPTEsbT0wO2s8MTspe2lmKGE9cGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLHRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW21dPXRoaXMuX3F1YWRyYXRpY0NvZWZmaWNpZW50cyhhKSxsLnRvRml4ZWQoNik9PT1qLnRvRml4ZWQoNikpe2E9cGFyc2VGbG9hdChsLnRvRml4ZWQoNikpK3BhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSwrK20sdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbbV09dGhpcy5fcXVhZHJhdGljQ29lZmZpY2llbnRzKGEpO2JyZWFrfWsrPWosbC09aiwrK219fXZhciBuPXRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljLmxlbmd0aDtpZig0PT09aSl7Zm9yKHRoaXMuaXNRdWFkcmF0aWM9ITAsZj1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF0sYXJndW1lbnRzWzBdLGFyZ3VtZW50c1syXV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1szXV0sZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLHRoaXMudmVydGV4KGIsYyk7dGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF09YXJndW1lbnRzWzJdLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdPWFyZ3VtZW50c1szXX1lbHNlIGlmKDY9PT1pKXtmb3IodGhpcy5pc1F1YWRyYXRpYz0hMCxmPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFswXSxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzNdXSxnPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzRdXSxoPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsyXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzVdXSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sZD1oWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2hbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0raFsyXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSx0aGlzLnZlcnRleChiLGMsZCk7dGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF09YXJndW1lbnRzWzNdLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdPWFyZ3VtZW50c1s0XSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsyXT1hcmd1bWVudHNbNV19fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmN1cnZlVmVydGV4PWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmPVtdLGc9W10saD1bXTthPTA7dmFyIGk9YXJndW1lbnRzLmxlbmd0aDtpZigwPT09dGhpcy5fbG9va1VwVGFibGVCZXppZXIubGVuZ3RofHx0aGlzLl9sdXRCZXppZXJEZXRhaWwhPT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWwpe3RoaXMuX2xvb2tVcFRhYmxlQmV6aWVyPVtdLHRoaXMuX2x1dEJlemllckRldGFpbD10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7Zm9yKHZhciBqPTEvdGhpcy5fbHV0QmV6aWVyRGV0YWlsLGs9MCxsPTEsbT0wO2s8MTspe2lmKGE9cGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW21dPXRoaXMuX2JlemllckNvZWZmaWNpZW50cyhhKSxsLnRvRml4ZWQoNik9PT1qLnRvRml4ZWQoNikpe2E9cGFyc2VGbG9hdChsLnRvRml4ZWQoNikpK3BhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSwrK20sdGhpcy5fbG9va1VwVGFibGVCZXppZXJbbV09dGhpcy5fYmV6aWVyQ29lZmZpY2llbnRzKGEpO2JyZWFrfWsrPWosbC09aiwrK219fXZhciBuPXRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyLmxlbmd0aDtpZigyPT09aSl7aWYodGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5wdXNoKGFyZ3VtZW50c1swXSksdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5wdXNoKGFyZ3VtZW50c1sxXSksOD09PXRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgubGVuZ3RoKXtmb3IodGhpcy5pc0N1cnZlPSEwLGY9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzBdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs0XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzZdXSksZz10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMV0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFszXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzVdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbN11dKSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2ZbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStnWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyk7Zm9yKGU9MDtlPGk7ZSsrKXRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXguc2hpZnQoKX19ZWxzZSBpZigzPT09aSYmKHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMF0pLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMV0pLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMl0pLDEyPT09dGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5sZW5ndGgpKXtmb3IodGhpcy5pc0N1cnZlPSEwLGY9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzBdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbM10sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs2XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzldXSksZz10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMV0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs0XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzddLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMTBdXSksaD10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs1XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzhdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMTFdXSksZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStmWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZ1szXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxkPWhbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0raFsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStoWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2hbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sdGhpcy52ZXJ0ZXgoYixjLGQpO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnNoaWZ0KCl9fSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5HZW9tZXRyeVwiOjcwfV0sNjU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QucHJvdG90eXBlLm9yYml0Q29udHJvbD1mdW5jdGlvbihhLGIpe2lmKHRoaXMuX2Fzc2VydDNkKFwib3JiaXRDb250cm9sXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm9yYml0Q29udHJvbFwiLGFyZ3VtZW50cyksdGhpcy5tb3VzZVg8dGhpcy53aWR0aCYmdGhpcy5tb3VzZVg+MCYmdGhpcy5tb3VzZVk8dGhpcy5oZWlnaHQmJnRoaXMubW91c2VZPjApe3ZhciBjPXRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmE7dm9pZCAwPT09YSYmKGE9MSksdm9pZCAwPT09YiYmKGI9YSksITAhPT10aGlzLmNvbnRleHRNZW51RGlzYWJsZWQmJih0aGlzLmNhbnZhcy5vbmNvbnRleHRtZW51PWZ1bmN0aW9uKCl7cmV0dXJuITF9LHRoaXMuX3NldFByb3BlcnR5KFwiY29udGV4dE1lbnVEaXNhYmxlZFwiLCEwKSksITAhPT10aGlzLndoZWVsRGVmYXVsdERpc2FibGVkJiYodGhpcy5jYW52YXMub253aGVlbD1mdW5jdGlvbigpe3JldHVybiExfSx0aGlzLl9zZXRQcm9wZXJ0eShcIndoZWVsRGVmYXVsdERpc2FibGVkXCIsITApKTt2YXIgZT10aGlzLmhlaWdodDx0aGlzLndpZHRoP3RoaXMuaGVpZ2h0OnRoaXMud2lkdGg7aWYodGhpcy5fbW91c2VXaGVlbERlbHRhWSE9PXRoaXMuX3Btb3VzZVdoZWVsRGVsdGFZJiYodGhpcy5fbW91c2VXaGVlbERlbHRhWT4wP3RoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuX29yYml0KDAsMCwuNSplKTp0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLl9vcmJpdCgwLDAsLS41KmUpKSx0aGlzLm1vdXNlSXNQcmVzc2VkKWlmKHRoaXMubW91c2VCdXR0b249PT10aGlzLkxFRlQpe3ZhciBmPS1hKih0aGlzLm1vdXNlWC10aGlzLnBtb3VzZVgpL2UsZz1iKih0aGlzLm1vdXNlWS10aGlzLnBtb3VzZVkpL2U7dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5fb3JiaXQoZixnLDApfWVsc2UgaWYodGhpcy5tb3VzZUJ1dHRvbj09PXRoaXMuUklHSFQpe3ZhciBoPWMuX2dldExvY2FsQXhlcygpLGk9TWF0aC5zcXJ0KGgueFswXSpoLnhbMF0raC54WzJdKmgueFsyXSk7MCE9PWkmJihoLnhbMF0vPWksaC54WzJdLz1pKTt2YXIgaj1NYXRoLnNxcnQoaC55WzBdKmgueVswXStoLnlbMl0qaC55WzJdKTswIT09aiYmKGgueVswXS89aixoLnlbMl0vPWopO3ZhciBrPS0xKmEqKHRoaXMubW91c2VYLXRoaXMucG1vdXNlWCksbD0tMSpiKih0aGlzLm1vdXNlWS10aGlzLnBtb3VzZVkpO2Muc2V0UG9zaXRpb24oYy5leWVYK2sqaC54WzBdK2wqaC56WzBdLGMuZXllWSxjLmV5ZVoraypoLnhbMl0rbCpoLnpbMl0pfXJldHVybiB0aGlzfX0sZC5wcm90b3R5cGUuZGVidWdNb2RlPWZ1bmN0aW9uKCl7dGhpcy5fYXNzZXJ0M2QoXCJkZWJ1Z01vZGVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZGVidWdNb2RlXCIsYXJndW1lbnRzKTtmb3IodmFyIGE9dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5sZW5ndGgtMTthPj0wO2EtLSl0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0W2FdLnRvU3RyaW5nKCkhPT10aGlzLl9ncmlkKCkudG9TdHJpbmcoKSYmdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdFthXS50b1N0cmluZygpIT09dGhpcy5fYXhlc0ljb24oKS50b1N0cmluZygpfHx0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0LnNwbGljZShhLDEpO2FyZ3VtZW50c1swXT09PWUuR1JJRD90aGlzLnJlZ2lzdGVyTWV0aG9kKFwicG9zdFwiLHRoaXMuX2dyaWQuY2FsbCh0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSxhcmd1bWVudHNbNV0pKTphcmd1bWVudHNbMF09PT1lLkFYRVM/dGhpcy5yZWdpc3Rlck1ldGhvZChcInBvc3RcIix0aGlzLl9heGVzSWNvbi5jYWxsKHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzRdKSk6KHRoaXMucmVnaXN0ZXJNZXRob2QoXCJwb3N0XCIsdGhpcy5fZ3JpZC5jYWxsKHRoaXMsYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSkpLHRoaXMucmVnaXN0ZXJNZXRob2QoXCJwb3N0XCIsdGhpcy5fYXhlc0ljb24uY2FsbCh0aGlzLGFyZ3VtZW50c1s1XSxhcmd1bWVudHNbNl0sYXJndW1lbnRzWzddLGFyZ3VtZW50c1s4XSkpKX0sZC5wcm90b3R5cGUubm9EZWJ1Z01vZGU9ZnVuY3Rpb24oKXt0aGlzLl9hc3NlcnQzZChcIm5vRGVidWdNb2RlXCIpO2Zvcih2YXIgYT10aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0Lmxlbmd0aC0xO2E+PTA7YS0tKXRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3RbYV0udG9TdHJpbmcoKSE9PXRoaXMuX2dyaWQoKS50b1N0cmluZygpJiZ0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0W2FdLnRvU3RyaW5nKCkhPT10aGlzLl9heGVzSWNvbigpLnRvU3RyaW5nKCl8fHRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3Quc3BsaWNlKGEsMSl9LGQucHJvdG90eXBlLl9ncmlkPWZ1bmN0aW9uKGEsYixjLGQsZSl7dm9pZCAwPT09YSYmKGE9dGhpcy53aWR0aC8yKSx2b2lkIDA9PT1iJiYoYj1NYXRoLnJvdW5kKGEvMzApPDQ/NDpNYXRoLnJvdW5kKGEvMzApKSx2b2lkIDA9PT1jJiYoYz0wKSx2b2lkIDA9PT1kJiYoZD0wKSx2b2lkIDA9PT1lJiYoZT0wKTt2YXIgZj1hL2IsZz1hLzI7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5wdXNoKCksdGhpcy5zdHJva2UoMjU1KnRoaXMuX3JlbmRlcmVyLmN1clN0cm9rZUNvbG9yWzBdLDI1NSp0aGlzLl9yZW5kZXJlci5jdXJTdHJva2VDb2xvclsxXSwyNTUqdGhpcy5fcmVuZGVyZXIuY3VyU3Ryb2tlQ29sb3JbMl0pLHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5zZXQodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzFdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzRdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzddLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEwXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEzXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSk7Zm9yKHZhciBhPTA7YTw9YjthKyspdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KC1nK2MsZCxhKmYtZytlKSx0aGlzLnZlcnRleCgrZytjLGQsYSpmLWcrZSksdGhpcy5lbmRTaGFwZSgpO2Zvcih2YXIgaD0wO2g8PWI7aCsrKXRoaXMuYmVnaW5TaGFwZSh0aGlzLkxJTkVTKSx0aGlzLnZlcnRleChoKmYtZytjLGQsLWcrZSksdGhpcy52ZXJ0ZXgoaCpmLWcrYyxkLCtnK2UpLHRoaXMuZW5kU2hhcGUoKTt0aGlzLnBvcCgpfX0sZC5wcm90b3R5cGUuX2F4ZXNJY29uPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB2b2lkIDA9PT1hJiYoYT10aGlzLndpZHRoLzIwPjQwP3RoaXMud2lkdGgvMjA6NDApLHZvaWQgMD09PWImJihiPS10aGlzLndpZHRoLzQpLHZvaWQgMD09PWMmJihjPWIpLHZvaWQgMD09PWQmJihkPWIpLGZ1bmN0aW9uKCl7dGhpcy5wdXNoKCksdGhpcy5fcmVuZGVyZXIudU1WTWF0cml4LnNldCh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzBdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsyXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzNdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs1XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzZdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbN10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs4XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzldLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTBdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTFdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTJdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTNdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTRdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTVdKSx0aGlzLnN0cm9rZVdlaWdodCgyKSx0aGlzLnN0cm9rZSgyNTUsMCwwKSx0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoYixjLGQpLHRoaXMudmVydGV4KGIrYSxjLGQpLHRoaXMuZW5kU2hhcGUoKSx0aGlzLnN0cm9rZSgwLDI1NSwwKSx0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoYixjLGQpLHRoaXMudmVydGV4KGIsYythLGQpLHRoaXMuZW5kU2hhcGUoKSx0aGlzLnN0cm9rZSgwLDAsMjU1KSx0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoYixjLGQpLHRoaXMudmVydGV4KGIsYyxkK2EpLHRoaXMuZW5kU2hhcGUoKSx0aGlzLnBvcCgpfX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDY2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5hbWJpZW50TGlnaHQ9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJhbWJpZW50TGlnaHRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYW1iaWVudExpZ2h0XCIsYXJndW1lbnRzKTt2YXIgZj10aGlzLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxnPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBnLnNldFVuaWZvcm0oXCJ1VXNlTGlnaHRpbmdcIiwhMCksZy5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3IpLHRoaXMuX3JlbmRlcmVyLmFtYmllbnRMaWdodENvbG9ycy5wdXNoKGYuX2FycmF5WzBdLGYuX2FycmF5WzFdLGYuX2FycmF5WzJdKSxnLnNldFVuaWZvcm0oXCJ1QW1iaWVudENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuYW1iaWVudExpZ2h0Q29sb3JzKSxnLnNldFVuaWZvcm0oXCJ1QW1iaWVudExpZ2h0Q291bnRcIix0aGlzLl9yZW5kZXJlci5hbWJpZW50TGlnaHRDb2xvcnMubGVuZ3RoLzMpLHRoaXN9LGQucHJvdG90eXBlLmRpcmVjdGlvbmFsTGlnaHQ9ZnVuY3Rpb24oYSxiLGMsZSxmLGcpe3RoaXMuX2Fzc2VydDNkKFwiZGlyZWN0aW9uYWxMaWdodFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJkaXJlY3Rpb25hbExpZ2h0XCIsYXJndW1lbnRzKTt2YXIgaCxpPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO2g9YSBpbnN0YW5jZW9mIGQuQ29sb3I/YTp0aGlzLmNvbG9yKGEsYixjKTt2YXIgaixrLGwsbT1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtcIm51bWJlclwiPT10eXBlb2YgbT8oaj1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0zXSxrPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTJdLGw9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pOihqPW0ueCxrPW0ueSxsPW0ueiksaS5zZXRVbmlmb3JtKFwidVVzZUxpZ2h0aW5nXCIsITApLGkuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKTt2YXIgbj1NYXRoLnNxcnQoaipqK2sqaytsKmwpO3JldHVybiB0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucy5wdXNoKGovbixrL24sbC9uKSxpLnNldFVuaWZvcm0oXCJ1TGlnaHRpbmdEaXJlY3Rpb25cIix0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucyksdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodENvbG9ycy5wdXNoKGguX2FycmF5WzBdLGguX2FycmF5WzFdLGguX2FycmF5WzJdKSxpLnNldFVuaWZvcm0oXCJ1RGlyZWN0aW9uYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnMpLGkuc2V0VW5pZm9ybShcInVEaXJlY3Rpb25hbExpZ2h0Q291bnRcIix0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzLmxlbmd0aC8zKSx0aGlzfSxkLnByb3RvdHlwZS5wb2ludExpZ2h0PWZ1bmN0aW9uKGEsYixjLGUsZixnKXt0aGlzLl9hc3NlcnQzZChcInBvaW50TGlnaHRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicG9pbnRMaWdodFwiLGFyZ3VtZW50cyk7dmFyIGg7aD1hIGluc3RhbmNlb2YgZC5Db2xvcj9hOnRoaXMuY29sb3IoYSxiLGMpO3ZhciBpLGosayxsPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdO1wibnVtYmVyXCI9PXR5cGVvZiBsPyhpPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTNdLGo9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMl0saz1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSk6KGk9bC54LGo9bC55LGs9bC56KTt2YXIgbT10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gbS5zZXRVbmlmb3JtKFwidVVzZUxpZ2h0aW5nXCIsITApLG0uc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSx0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0UG9zaXRpb25zLnB1c2goaSxqLGspLG0uc2V0VW5pZm9ybShcInVQb2ludExpZ2h0TG9jYXRpb25cIix0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0UG9zaXRpb25zKSx0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0Q29sb3JzLnB1c2goaC5fYXJyYXlbMF0saC5fYXJyYXlbMV0saC5fYXJyYXlbMl0pLG0uc2V0VW5pZm9ybShcInVQb2ludExpZ2h0Q29sb3JcIix0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0Q29sb3JzKSxtLnNldFVuaWZvcm0oXCJ1UG9pbnRMaWdodENvdW50XCIsdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodENvbG9ycy5sZW5ndGgvMyksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7Zm9yKHZhciBjPXt2OltdLHZ0OltdLHZuOltdfSxkPXt9LGY9MDtmPGIubGVuZ3RoOysrZil7dmFyIGc9YltmXS50cmltKCkuc3BsaXQoL1xcYlxccysvKTtpZihnLmxlbmd0aD4wKWlmKFwidlwiPT09Z1swXXx8XCJ2blwiPT09Z1swXSl7dmFyIGg9bmV3IGUuVmVjdG9yKHBhcnNlRmxvYXQoZ1sxXSkscGFyc2VGbG9hdChnWzJdKSxwYXJzZUZsb2F0KGdbM10pKTtjW2dbMF1dLnB1c2goaCl9ZWxzZSBpZihcInZ0XCI9PT1nWzBdKXt2YXIgaT1bcGFyc2VGbG9hdChnWzFdKSxwYXJzZUZsb2F0KGdbMl0pXTtjW2dbMF1dLnB1c2goaSl9ZWxzZSBpZihcImZcIj09PWdbMF0pZm9yKHZhciBqPTM7ajxnLmxlbmd0aDsrK2ope2Zvcih2YXIgaz1bXSxsPVsxLGotMSxqXSxtPTA7bTxsLmxlbmd0aDsrK20pe3ZhciBuPWdbbFttXV0sbz0wO2lmKHZvaWQgMCE9PWRbbl0pbz1kW25dO2Vsc2V7Zm9yKHZhciBwPW4uc3BsaXQoXCIvXCIpLHE9MDtxPHAubGVuZ3RoO3ErKylwW3FdPXBhcnNlSW50KHBbcV0pLTE7bz1kW25dPWEudmVydGljZXMubGVuZ3RoLGEudmVydGljZXMucHVzaChjLnZbcFswXV0uY29weSgpKSxjLnZ0W3BbMV1dP2EudXZzLnB1c2goYy52dFtwWzFdXS5zbGljZSgpKTphLnV2cy5wdXNoKFswLDBdKSxjLnZuW3BbMl1dJiZhLnZlcnRleE5vcm1hbHMucHVzaChjLnZuW3BbMl1dLmNvcHkoKSl9ay5wdXNoKG8pfWtbMF0hPT1rWzFdJiZrWzBdIT09a1syXSYma1sxXSE9PWtbMl0mJmEuZmFjZXMucHVzaChrKX19cmV0dXJuIDA9PT1hLnZlcnRleE5vcm1hbHMubGVuZ3RoJiZhLmNvbXB1dGVOb3JtYWxzKCksYX12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpO2EoXCIuL3A1Lkdlb21ldHJ5XCIpLGUucHJvdG90eXBlLmxvYWRNb2RlbD1mdW5jdGlvbihhKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkTW9kZWxcIixhcmd1bWVudHMpO3ZhciBiLGMsZjtcImJvb2xlYW5cIj09dHlwZW9mIGFyZ3VtZW50c1sxXT8oYj1hcmd1bWVudHNbMV0sYz1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10pOihiPSExLGM9YXJndW1lbnRzWzFdLGY9YXJndW1lbnRzWzJdKTt2YXIgZz1uZXcgZS5HZW9tZXRyeTtnLmdpZD1hK1wifFwiK2I7dmFyIGg9dGhpcztyZXR1cm4gdGhpcy5sb2FkU3RyaW5ncyhhLGZ1bmN0aW9uKGEpe2QoZyxhKSxiJiZnLm5vcm1hbGl6ZSgpLGguX2RlY3JlbWVudFByZWxvYWQoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiZjKGcpfS5iaW5kKHRoaXMpLGYpLGd9LGUucHJvdG90eXBlLm1vZGVsPWZ1bmN0aW9uKGEpe3RoaXMuX2Fzc2VydDNkKFwibW9kZWxcIiksZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibW9kZWxcIixhcmd1bWVudHMpLGEudmVydGljZXMubGVuZ3RoPjAmJih0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChhLmdpZCl8fChhLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGEuZ2lkLGEpKSx0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVycyhhLmdpZCkpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1Lkdlb21ldHJ5XCI6NzB9XSw2ODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4vcDUuVGV4dHVyZVwiKSxkLnByb3RvdHlwZS5sb2FkU2hhZGVyPWZ1bmN0aW9uKGEsYil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZFNoYWRlclwiLGFyZ3VtZW50cyk7dmFyIGM9bmV3IGQuU2hhZGVyLGU9dGhpcyxmPSExLGc9ITE7cmV0dXJuIHRoaXMubG9hZFN0cmluZ3MoYixmdW5jdGlvbihhKXtjLl9mcmFnU3JjPWEuam9pbihcIlxcblwiKSxmPSEwLGcmJmUuX2RlY3JlbWVudFByZWxvYWQoKX0pLHRoaXMubG9hZFN0cmluZ3MoYSxmdW5jdGlvbihhKXtjLl92ZXJ0U3JjPWEuam9pbihcIlxcblwiKSxnPSEwLGYmJmUuX2RlY3JlbWVudFByZWxvYWQoKX0pLGN9LGQucHJvdG90eXBlLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcImNyZWF0ZVNoYWRlclwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVTaGFkZXJcIixhcmd1bWVudHMpLG5ldyBkLlNoYWRlcih0aGlzLl9yZW5kZXJlcixhLGIpfSxkLnByb3RvdHlwZS5zaGFkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwic2hhZGVyXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNoYWRlclwiLGFyZ3VtZW50cyksdm9pZCAwPT09YS5fcmVuZGVyZXImJihhLl9yZW5kZXJlcj10aGlzLl9yZW5kZXJlciksYS5pc1N0cm9rZVNoYWRlcigpP3RoaXMuX3JlbmRlcmVyLnNldFN0cm9rZVNoYWRlcihhKTp0aGlzLl9yZW5kZXJlci5zZXRGaWxsU2hhZGVyKGEpLHRoaXN9LGQucHJvdG90eXBlLm5vcm1hbE1hdGVyaWFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwibm9ybWFsTWF0ZXJpYWxcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibm9ybWFsTWF0ZXJpYWxcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmRyYXdNb2RlPWUuRklMTCx0aGlzLl9yZW5kZXJlci5zZXRGaWxsU2hhZGVyKHRoaXMuX3JlbmRlcmVyLl9nZXROb3JtYWxTaGFkZXIoKSksdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yPVsxLDEsMSwxXSx0aGlzLm5vU3Ryb2tlKCksdGhpc30sZC5wcm90b3R5cGUudGV4dHVyZT1mdW5jdGlvbihhKXt0aGlzLl9hc3NlcnQzZChcInRleHR1cmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dHVyZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuZHJhd01vZGU9ZS5URVhUVVJFO3ZhciBiPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBiLnNldFVuaWZvcm0oXCJ1U3BlY3VsYXJcIiwhMSksYi5zZXRVbmlmb3JtKFwiaXNUZXh0dXJlXCIsITApLGIuc2V0VW5pZm9ybShcInVTYW1wbGVyXCIsYSksdGhpcy5ub1N0cm9rZSgpLHRoaXN9LGQucHJvdG90eXBlLmFtYmllbnRNYXRlcmlhbD1mdW5jdGlvbihhLGIsYyxlKXt0aGlzLl9hc3NlcnQzZChcImFtYmllbnRNYXRlcmlhbFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJhbWJpZW50TWF0ZXJpYWxcIixhcmd1bWVudHMpO3ZhciBmPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3I9Zi5fYXJyYXk7dmFyIGc9dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIGcuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSxnLnNldFVuaWZvcm0oXCJ1U3BlY3VsYXJcIiwhMSksZy5zZXRVbmlmb3JtKFwiaXNUZXh0dXJlXCIsITEpLHRoaXN9LGQucHJvdG90eXBlLnNwZWN1bGFyTWF0ZXJpYWw9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJzcGVjdWxhck1hdGVyaWFsXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwZWN1bGFyTWF0ZXJpYWxcIixhcmd1bWVudHMpO3ZhciBmPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3I9Zi5fYXJyYXk7dmFyIGc9dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIGcuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSxnLnNldFVuaWZvcm0oXCJ1U3BlY3VsYXJcIiwhMCksZy5zZXRVbmlmb3JtKFwiaXNUZXh0dXJlXCIsITEpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2FwcGx5Q29sb3JCbGVuZD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLkdMLGM9dGhpcy5kcmF3TW9kZT09PWUuVEVYVFVSRTtyZXR1cm4gY3x8YVthLmxlbmd0aC0xXTwxPyhiLmRlcHRoTWFzayhjKSxiLmVuYWJsZShiLkJMRU5EKSxiLmJsZW5kRXF1YXRpb24oYi5GVU5DX0FERCksYi5ibGVuZEZ1bmMoYi5TUkNfQUxQSEEsYi5PTkVfTUlOVVNfU1JDX0FMUEhBKSk6KGIuZGVwdGhNYXNrKCEwKSxiLmRpc2FibGUoYi5CTEVORCkpLGF9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LlRleHR1cmVcIjo3Nn1dLDY5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5jYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJjYW1lcmFcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY2FtZXJhXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYS5hcHBseSh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucGVyc3BlY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJwZXJzcGVjdGl2ZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwZXJzcGVjdGl2ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5wZXJzcGVjdGl2ZS5hcHBseSh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUub3J0aG89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJvcnRob1wiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJvcnRob1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5vcnRoby5hcHBseSh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUuY3JlYXRlQ2FtZXJhPWZ1bmN0aW9uKCl7dGhpcy5fYXNzZXJ0M2QoXCJjcmVhdGVDYW1lcmFcIik7dmFyIGE9bmV3IGQuQ2FtZXJhKHRoaXMuX3JlbmRlcmVyKTtyZXR1cm4gYS5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncygpLGEuX3NldERlZmF1bHRDYW1lcmEoKSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhPWEsYX0sZC5DYW1lcmE9ZnVuY3Rpb24oYSl7dGhpcy5fcmVuZGVyZXI9YSx0aGlzLmNhbWVyYVR5cGU9XCJkZWZhdWx0XCIsdGhpcy5jYW1lcmFNYXRyaXg9bmV3IGQuTWF0cml4LHRoaXMucHJvak1hdHJpeD1uZXcgZC5NYXRyaXh9LGQuQ2FtZXJhLnByb3RvdHlwZS5wZXJzcGVjdGl2ZT1mdW5jdGlvbihhLGIsYyxlKXt2b2lkIDA9PT1hPyhhPXRoaXMuZGVmYXVsdENhbWVyYUZPVix0aGlzLmNhbWVyYUZPVj1hKTp0aGlzLmNhbWVyYUZPVj10aGlzLl9yZW5kZXJlci5fcEluc3QuX3RvUmFkaWFucyhhKSx2b2lkIDA9PT1iJiYoYj10aGlzLmRlZmF1bHRBc3BlY3RSYXRpbyksdm9pZCAwPT09YyYmKGM9dGhpcy5kZWZhdWx0Q2FtZXJhTmVhciksdm9pZCAwPT09ZSYmKGU9dGhpcy5kZWZhdWx0Q2FtZXJhRmFyKSxjPD0xZS00JiYoYz0uMDEsY29uc29sZS5sb2coXCJBdm9pZCBwZXJzcGVjdGl2ZSBuZWFyIHBsYW5lIHZhbHVlcyBjbG9zZSB0byBvciBiZWxvdyAwLiBTZXR0aW5nIHZhbHVlIHRvIDAuMDEuXCIpKSxlPGMmJmNvbnNvbGUubG9nKFwiUGVyc3BlY3RpdmUgZmFyIHBsYW5lIHZhbHVlIGlzIGxlc3MgdGhhbiBuZWFyIHBsYW5lIHZhbHVlLiBOb3RoaW5nIHdpbGwgYmUgc2hvd24uXCIpLHRoaXMuY2FtZXJhRk9WPXRoaXMuX3JlbmRlcmVyLl9wSW5zdC5fdG9SYWRpYW5zKGEpLHRoaXMuYXNwZWN0UmF0aW89Yix0aGlzLmNhbWVyYU5lYXI9Yyx0aGlzLmNhbWVyYUZhcj1lLHRoaXMucHJvak1hdHJpeD1kLk1hdHJpeC5pZGVudGl0eSgpO3ZhciBmPTEvTWF0aC50YW4odGhpcy5jYW1lcmFGT1YvMiksZz0xLyh0aGlzLmNhbWVyYU5lYXItdGhpcy5jYW1lcmFGYXIpO3RoaXMucHJvak1hdHJpeC5zZXQoZi9iLDAsMCwwLDAsLWYsMCwwLDAsMCwoZStjKSpnLC0xLDAsMCwyKmUqYypnLDApLHRoaXMuX2lzQWN0aXZlKCkmJnRoaXMuX3JlbmRlcmVyLnVQTWF0cml4LnNldCh0aGlzLnByb2pNYXRyaXgubWF0NFswXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxXSx0aGlzLnByb2pNYXRyaXgubWF0NFsyXSx0aGlzLnByb2pNYXRyaXgubWF0NFszXSx0aGlzLnByb2pNYXRyaXgubWF0NFs0XSx0aGlzLnByb2pNYXRyaXgubWF0NFs1XSx0aGlzLnByb2pNYXRyaXgubWF0NFs2XSx0aGlzLnByb2pNYXRyaXgubWF0NFs3XSx0aGlzLnByb2pNYXRyaXgubWF0NFs4XSx0aGlzLnByb2pNYXRyaXgubWF0NFs5XSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTFdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEyXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxM10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTRdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzE1XSksdGhpcy5jYW1lcmFUeXBlPVwiY3VzdG9tXCJ9LGQuQ2FtZXJhLnByb3RvdHlwZS5vcnRobz1mdW5jdGlvbihhLGIsYyxlLGYsZyl7dm9pZCAwPT09YSYmKGE9LXRoaXMuX3JlbmRlcmVyLndpZHRoLzIpLHZvaWQgMD09PWImJihiPSt0aGlzLl9yZW5kZXJlci53aWR0aC8yKSx2b2lkIDA9PT1jJiYoYz0tdGhpcy5fcmVuZGVyZXIuaGVpZ2h0LzIpLHZvaWQgMD09PWUmJihlPSt0aGlzLl9yZW5kZXJlci5oZWlnaHQvMiksdm9pZCAwPT09ZiYmKGY9MCksdm9pZCAwPT09ZyYmKGc9TWF0aC5tYXgodGhpcy5fcmVuZGVyZXIud2lkdGgsdGhpcy5fcmVuZGVyZXIuaGVpZ2h0KSk7dmFyIGg9Yi1hLGk9ZS1jLGo9Zy1mLGs9Mi9oLGw9Mi9pLG09LTIvaixuPS0oYithKS9oLG89LShlK2MpL2kscD0tKGcrZikvajt0aGlzLnByb2pNYXRyaXg9ZC5NYXRyaXguaWRlbnRpdHkoKSx0aGlzLnByb2pNYXRyaXguc2V0KGssMCwwLDAsMCwtbCwwLDAsMCwwLG0sMCxuLG8scCwxKSx0aGlzLl9pc0FjdGl2ZSgpJiZ0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5zZXQodGhpcy5wcm9qTWF0cml4Lm1hdDRbMF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbM10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbN10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTBdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzExXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTNdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzE0XSx0aGlzLnByb2pNYXRyaXgubWF0NFsxNV0pLHRoaXMuY2FtZXJhVHlwZT1cImN1c3RvbVwifSxkLkNhbWVyYS5wcm90b3R5cGUuX3JvdGF0ZVZpZXc9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9dGhpcy5jZW50ZXJYLGc9dGhpcy5jZW50ZXJZLGg9dGhpcy5jZW50ZXJaO2YtPXRoaXMuZXllWCxnLT10aGlzLmV5ZVksaC09dGhpcy5leWVaO3ZhciBpPWQuTWF0cml4LmlkZW50aXR5KHRoaXMuX3JlbmRlcmVyLl9wSW5zdCk7aS5yb3RhdGUoYSxiLGMsZSk7dmFyIGo9W2YqaS5tYXQ0WzBdK2cqaS5tYXQ0WzRdK2gqaS5tYXQ0WzhdLGYqaS5tYXQ0WzFdK2cqaS5tYXQ0WzVdK2gqaS5tYXQ0WzldLGYqaS5tYXQ0WzJdK2cqaS5tYXQ0WzZdK2gqaS5tYXQ0WzEwXV07alswXSs9dGhpcy5leWVYLGpbMV0rPXRoaXMuZXllWSxqWzJdKz10aGlzLmV5ZVosdGhpcy5jYW1lcmEodGhpcy5leWVYLHRoaXMuZXllWSx0aGlzLmV5ZVosalswXSxqWzFdLGpbMl0sdGhpcy51cFgsdGhpcy51cFksdGhpcy51cFopfSxkLkNhbWVyYS5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldExvY2FsQXhlcygpO3RoaXMuX3JvdGF0ZVZpZXcoYSxiLnlbMF0sYi55WzFdLGIueVsyXSl9LGQuQ2FtZXJhLnByb3RvdHlwZS50aWx0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldExvY2FsQXhlcygpO3RoaXMuX3JvdGF0ZVZpZXcoYSxiLnhbMF0sYi54WzFdLGIueFsyXSl9LGQuQ2FtZXJhLnByb3RvdHlwZS5sb29rQXQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuY2FtZXJhKHRoaXMuZXllWCx0aGlzLmV5ZVksdGhpcy5leWVaLGEsYixjLHRoaXMudXBYLHRoaXMudXBZLHRoaXMudXBaKX0sZC5DYW1lcmEucHJvdG90eXBlLmNhbWVyYT1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSl7dm9pZCAwPT09YSYmKGE9dGhpcy5kZWZhdWx0RXllWCxiPXRoaXMuZGVmYXVsdEV5ZVksYz10aGlzLmRlZmF1bHRFeWVaLGQ9YSxlPWIsZj0wLGc9MCxoPTEsaT0wKSx0aGlzLmV5ZVg9YSx0aGlzLmV5ZVk9Yix0aGlzLmV5ZVo9Yyx0aGlzLmNlbnRlclg9ZCx0aGlzLmNlbnRlclk9ZSx0aGlzLmNlbnRlclo9Zix0aGlzLnVwWD1nLHRoaXMudXBZPWgsdGhpcy51cFo9aTt2YXIgaj10aGlzLl9nZXRMb2NhbEF4ZXMoKTt0aGlzLmNhbWVyYU1hdHJpeC5zZXQoai54WzBdLGoueVswXSxqLnpbMF0sMCxqLnhbMV0sai55WzFdLGouelsxXSwwLGoueFsyXSxqLnlbMl0sai56WzJdLDAsMCwwLDAsMSk7dmFyIGs9LWEsbD0tYixtPS1jO3JldHVybiB0aGlzLmNhbWVyYU1hdHJpeC50cmFuc2xhdGUoW2ssbCxtXSksdGhpcy5faXNBY3RpdmUoKSYmdGhpcy5fcmVuZGVyZXIudU1WTWF0cml4LnNldCh0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzBdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMV0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsyXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzNdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbNF0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs1XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzZdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbN10sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs4XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzldLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTBdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTFdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTJdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTNdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTRdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTVdKSx0aGlzfSxkLkNhbWVyYS5wcm90b3R5cGUubW92ZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fZ2V0TG9jYWxBeGVzKCksZT1bZC54WzBdKmEsZC54WzFdKmEsZC54WzJdKmFdLGY9W2QueVswXSpiLGQueVsxXSpiLGQueVsyXSpiXSxnPVtkLnpbMF0qYyxkLnpbMV0qYyxkLnpbMl0qY107dGhpcy5jYW1lcmEodGhpcy5leWVYK2VbMF0rZlswXStnWzBdLHRoaXMuZXllWStlWzFdK2ZbMV0rZ1sxXSx0aGlzLmV5ZVorZVsyXStmWzJdK2dbMl0sdGhpcy5jZW50ZXJYK2VbMF0rZlswXStnWzBdLHRoaXMuY2VudGVyWStlWzFdK2ZbMV0rZ1sxXSx0aGlzLmNlbnRlclorZVsyXStmWzJdK2dbMl0sMCwxLDApfSxkLkNhbWVyYS5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEtdGhpcy5leWVYLGU9Yi10aGlzLmV5ZVksZj1jLXRoaXMuZXllWjt0aGlzLmNhbWVyYShhLGIsYyx0aGlzLmNlbnRlclgrZCx0aGlzLmNlbnRlclkrZSx0aGlzLmNlbnRlclorZiwwLDEsMCl9LGQuQ2FtZXJhLnByb3RvdHlwZS5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncz1mdW5jdGlvbigpe3RoaXMuZGVmYXVsdENhbWVyYUZPVj02MC8xODAqTWF0aC5QSSxcbnRoaXMuZGVmYXVsdEFzcGVjdFJhdGlvPXRoaXMuX3JlbmRlcmVyLndpZHRoL3RoaXMuX3JlbmRlcmVyLmhlaWdodCx0aGlzLmRlZmF1bHRFeWVYPTAsdGhpcy5kZWZhdWx0RXllWT0wLHRoaXMuZGVmYXVsdEV5ZVo9dGhpcy5fcmVuZGVyZXIuaGVpZ2h0LzIvTWF0aC50YW4odGhpcy5kZWZhdWx0Q2FtZXJhRk9WLzIpLHRoaXMuZGVmYXVsdENlbnRlclg9MCx0aGlzLmRlZmF1bHRDZW50ZXJZPTAsdGhpcy5kZWZhdWx0Q2VudGVyWj0wLHRoaXMuZGVmYXVsdENhbWVyYU5lYXI9LjEqdGhpcy5kZWZhdWx0RXllWix0aGlzLmRlZmF1bHRDYW1lcmFGYXI9MTAqdGhpcy5kZWZhdWx0RXllWn0sZC5DYW1lcmEucHJvdG90eXBlLl9zZXREZWZhdWx0Q2FtZXJhPWZ1bmN0aW9uKCl7dGhpcy5jYW1lcmFGT1Y9dGhpcy5kZWZhdWx0Q2FtZXJhRk9WLHRoaXMuYXNwZWN0UmF0aW89dGhpcy5kZWZhdWx0QXNwZWN0UmF0aW8sdGhpcy5leWVYPXRoaXMuZGVmYXVsdEV5ZVgsdGhpcy5leWVZPXRoaXMuZGVmYXVsdEV5ZVksdGhpcy5leWVaPXRoaXMuZGVmYXVsdEV5ZVosdGhpcy5jZW50ZXJYPXRoaXMuZGVmYXVsdENlbnRlclgsdGhpcy5jZW50ZXJZPXRoaXMuZGVmYXVsdENlbnRlclksdGhpcy5jZW50ZXJaPXRoaXMuZGVmYXVsdENlbnRlclosdGhpcy51cFg9MCx0aGlzLnVwWT0xLHRoaXMudXBaPTAsdGhpcy5jYW1lcmFOZWFyPXRoaXMuZGVmYXVsdENhbWVyYU5lYXIsdGhpcy5jYW1lcmFGYXI9dGhpcy5kZWZhdWx0Q2FtZXJhRmFyLHRoaXMucGVyc3BlY3RpdmUoKSx0aGlzLmNhbWVyYSgpLHRoaXMuY2FtZXJhVHlwZT1cImRlZmF1bHRcIn0sZC5DYW1lcmEucHJvdG90eXBlLl9yZXNpemU9ZnVuY3Rpb24oKXtcImRlZmF1bHRcIj09PXRoaXMuY2FtZXJhVHlwZT8odGhpcy5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncygpLHRoaXMuX3NldERlZmF1bHRDYW1lcmEoKSk6dGhpcy5wZXJzcGVjdGl2ZSh0aGlzLmNhbWVyYUZPVix0aGlzLl9yZW5kZXJlci53aWR0aC90aGlzLl9yZW5kZXJlci5oZWlnaHQpfSxkLkNhbWVyYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkLkNhbWVyYSh0aGlzLl9yZW5kZXJlcik7cmV0dXJuIGEuY2FtZXJhRk9WPXRoaXMuY2FtZXJhRk9WLGEuYXNwZWN0UmF0aW89dGhpcy5hc3BlY3RSYXRpbyxhLmV5ZVg9dGhpcy5leWVYLGEuZXllWT10aGlzLmV5ZVksYS5leWVaPXRoaXMuZXllWixhLmNlbnRlclg9dGhpcy5jZW50ZXJYLGEuY2VudGVyWT10aGlzLmNlbnRlclksYS5jZW50ZXJaPXRoaXMuY2VudGVyWixhLmNhbWVyYU5lYXI9dGhpcy5jYW1lcmFOZWFyLGEuY2FtZXJhRmFyPXRoaXMuY2FtZXJhRmFyLGEuY2FtZXJhVHlwZT10aGlzLmNhbWVyYVR5cGUsYS5jYW1lcmFNYXRyaXg9dGhpcy5jYW1lcmFNYXRyaXguY29weSgpLGEucHJvak1hdHJpeD10aGlzLnByb2pNYXRyaXguY29weSgpLGF9LGQuQ2FtZXJhLnByb3RvdHlwZS5fZ2V0TG9jYWxBeGVzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5leWVYLXRoaXMuY2VudGVyWCxiPXRoaXMuZXllWS10aGlzLmNlbnRlclksYz10aGlzLmV5ZVotdGhpcy5jZW50ZXJaLGQ9TWF0aC5zcXJ0KGEqYStiKmIrYypjKTswIT09ZCYmKGEvPWQsYi89ZCxjLz1kKTt2YXIgZT10aGlzLnVwWCxmPXRoaXMudXBZLGc9dGhpcy51cFosaD1mKmMtZypiLGk9LWUqYytnKmEsaj1lKmItZiphO2U9YipqLWMqaSxmPS1hKmorYypoLGc9YSppLWIqaDt2YXIgaz1NYXRoLnNxcnQoaCpoK2kqaStqKmopOzAhPT1rJiYoaC89ayxpLz1rLGovPWspO3ZhciBsPU1hdGguc3FydChlKmUrZipmK2cqZyk7cmV0dXJuIDAhPT1sJiYoZS89bCxmLz1sLGcvPWwpLHt4OltoLGksal0seTpbZSxmLGddLHo6W2EsYixjXX19LGQuQ2FtZXJhLnByb3RvdHlwZS5fb3JiaXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuZXllWC10aGlzLmNlbnRlclgsZT10aGlzLmV5ZVktdGhpcy5jZW50ZXJZLGY9dGhpcy5leWVaLXRoaXMuY2VudGVyWixnPU1hdGguc3FydChkKmQrZSplK2YqZiksaD1NYXRoLmF0YW4yKGQsZiksaT1NYXRoLmFjb3MoTWF0aC5tYXgoLTEsTWF0aC5taW4oMSxlL2cpKSk7aCs9YSxpKz1iLGcrPWMsZzwwJiYoZz0uMSksaT5NYXRoLlBJP2k9TWF0aC5QSTppPD0wJiYoaT0uMDAxKTt2YXIgaj1NYXRoLnNpbihpKSpnKk1hdGguc2luKGgpLGs9TWF0aC5jb3MoaSkqZyxsPU1hdGguc2luKGkpKmcqTWF0aC5jb3MoaCk7dGhpcy5jYW1lcmEoait0aGlzLmNlbnRlclgsayt0aGlzLmNlbnRlclksbCt0aGlzLmNlbnRlclosdGhpcy5jZW50ZXJYLHRoaXMuY2VudGVyWSx0aGlzLmNlbnRlclosMCwxLDApfSxkLkNhbWVyYS5wcm90b3R5cGUuX2lzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT10aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhfSxkLnByb3RvdHlwZS5zZXRDYW1lcmE9ZnVuY3Rpb24oYSl7dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYT1hLHRoaXMuX3JlbmRlcmVyLnVQTWF0cml4LnNldChhLnByb2pNYXRyaXgubWF0NFswXSxhLnByb2pNYXRyaXgubWF0NFsxXSxhLnByb2pNYXRyaXgubWF0NFsyXSxhLnByb2pNYXRyaXgubWF0NFszXSxhLnByb2pNYXRyaXgubWF0NFs0XSxhLnByb2pNYXRyaXgubWF0NFs1XSxhLnByb2pNYXRyaXgubWF0NFs2XSxhLnByb2pNYXRyaXgubWF0NFs3XSxhLnByb2pNYXRyaXgubWF0NFs4XSxhLnByb2pNYXRyaXgubWF0NFs5XSxhLnByb2pNYXRyaXgubWF0NFsxMF0sYS5wcm9qTWF0cml4Lm1hdDRbMTFdLGEucHJvak1hdHJpeC5tYXQ0WzEyXSxhLnByb2pNYXRyaXgubWF0NFsxM10sYS5wcm9qTWF0cml4Lm1hdDRbMTRdLGEucHJvak1hdHJpeC5tYXQ0WzE1XSl9LGIuZXhwb3J0cz1kLkNhbWVyYX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3MDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5HZW9tZXRyeT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMudmVydGljZXM9W10sdGhpcy5saW5lVmVydGljZXM9W10sdGhpcy5saW5lTm9ybWFscz1bXSx0aGlzLnZlcnRleE5vcm1hbHM9W10sdGhpcy5mYWNlcz1bXSx0aGlzLnV2cz1bXSx0aGlzLmVkZ2VzPVtdLHRoaXMuZGV0YWlsWD12b2lkIDAhPT1hP2E6MSx0aGlzLmRldGFpbFk9dm9pZCAwIT09Yj9iOjEsYyBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZjLmNhbGwodGhpcyksdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuY29tcHV0ZUZhY2VzPWZ1bmN0aW9uKCl7dGhpcy5mYWNlcy5sZW5ndGg9MDtmb3IodmFyIGEsYixjLGQsZT10aGlzLmRldGFpbFgrMSxmPTA7Zjx0aGlzLmRldGFpbFk7ZisrKWZvcih2YXIgZz0wO2c8dGhpcy5kZXRhaWxYO2crKylhPWYqZStnLGI9ZiplK2crMSxjPShmKzEpKmUrZysxLGQ9KGYrMSkqZStnLHRoaXMuZmFjZXMucHVzaChbYSxiLGRdKSx0aGlzLmZhY2VzLnB1c2goW2QsYixjXSk7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLl9nZXRGYWNlTm9ybWFsPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZmFjZXNbYV0sYz10aGlzLnZlcnRpY2VzW2JbMF1dLGU9dGhpcy52ZXJ0aWNlc1tiWzFdXSxmPXRoaXMudmVydGljZXNbYlsyXV0sZz1kLlZlY3Rvci5zdWIoZSxjKSxoPWQuVmVjdG9yLnN1YihmLGMpLGk9ZC5WZWN0b3IuY3Jvc3MoZyxoKSxqPWQuVmVjdG9yLm1hZyhpKSxrPWovKGQuVmVjdG9yLm1hZyhnKSpkLlZlY3Rvci5tYWcoaCkpO3JldHVybiAwPT09a3x8aXNOYU4oayk/KGNvbnNvbGUud2FybihcInA1Lkdlb21ldHJ5LnByb3RvdHlwZS5fZ2V0RmFjZU5vcm1hbDpcIixcImZhY2UgaGFzIGNvbGluZWFyIHNpZGVzIG9yIGEgcmVwZWF0ZWQgdmVydGV4XCIpLGkpOihrPjEmJihrPTEpLGkubXVsdChNYXRoLmFzaW4oaykvaikpfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5jb21wdXRlTm9ybWFscz1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy52ZXJ0ZXhOb3JtYWxzLGM9dGhpcy52ZXJ0aWNlcyxlPXRoaXMuZmFjZXM7Zm9yKGIubGVuZ3RoPTAsYT0wO2E8Yy5sZW5ndGg7KythKWIucHVzaChuZXcgZC5WZWN0b3IpO2Zvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7KytmKWZvcih2YXIgZz1lW2ZdLGg9dGhpcy5fZ2V0RmFjZU5vcm1hbChmKSxpPTA7aTwzOysraSl7dmFyIGo9Z1tpXTtiW2pdLmFkZChoKX1mb3IoYT0wO2E8Yy5sZW5ndGg7KythKWJbYV0ubm9ybWFsaXplKCk7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLmF2ZXJhZ2VOb3JtYWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTw9dGhpcy5kZXRhaWxZO2ErKyl7dmFyIGI9dGhpcy5kZXRhaWxYKzEsYz1kLlZlY3Rvci5hZGQodGhpcy52ZXJ0ZXhOb3JtYWxzW2EqYl0sdGhpcy52ZXJ0ZXhOb3JtYWxzW2EqYit0aGlzLmRldGFpbFhdKTtjPWQuVmVjdG9yLmRpdihjLDIpLHRoaXMudmVydGV4Tm9ybWFsc1thKmJdPWMsdGhpcy52ZXJ0ZXhOb3JtYWxzW2EqYit0aGlzLmRldGFpbFhdPWN9cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLmF2ZXJhZ2VQb2xlTm9ybWFscz1mdW5jdGlvbigpe2Zvcih2YXIgYT1uZXcgZC5WZWN0b3IoMCwwLDApLGI9MDtiPHRoaXMuZGV0YWlsWDtiKyspYS5hZGQodGhpcy52ZXJ0ZXhOb3JtYWxzW2JdKTtmb3IoYT1kLlZlY3Rvci5kaXYoYSx0aGlzLmRldGFpbFgpLGI9MDtiPHRoaXMuZGV0YWlsWDtiKyspdGhpcy52ZXJ0ZXhOb3JtYWxzW2JdPWE7Zm9yKGE9bmV3IGQuVmVjdG9yKDAsMCwwKSxiPXRoaXMudmVydGljZXMubGVuZ3RoLTE7Yj50aGlzLnZlcnRpY2VzLmxlbmd0aC0xLXRoaXMuZGV0YWlsWDtiLS0pYS5hZGQodGhpcy52ZXJ0ZXhOb3JtYWxzW2JdKTtmb3IoYT1kLlZlY3Rvci5kaXYoYSx0aGlzLmRldGFpbFgpLGI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMTtiPnRoaXMudmVydGljZXMubGVuZ3RoLTEtdGhpcy5kZXRhaWxYO2ItLSl0aGlzLnZlcnRleE5vcm1hbHNbYl09YTtyZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuX21ha2VUcmlhbmdsZUVkZ2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5lZGdlcy5sZW5ndGg9MCxBcnJheS5pc0FycmF5KHRoaXMuc3Ryb2tlSW5kaWNlcykpZm9yKHZhciBhPTAsYj10aGlzLnN0cm9rZUluZGljZXMubGVuZ3RoO2E8YjthKyspdGhpcy5lZGdlcy5wdXNoKHRoaXMuc3Ryb2tlSW5kaWNlc1thXSk7ZWxzZSBmb3IodmFyIGM9MDtjPHRoaXMuZmFjZXMubGVuZ3RoO2MrKyl0aGlzLmVkZ2VzLnB1c2goW3RoaXMuZmFjZXNbY11bMF0sdGhpcy5mYWNlc1tjXVsxXV0pLHRoaXMuZWRnZXMucHVzaChbdGhpcy5mYWNlc1tjXVsxXSx0aGlzLmZhY2VzW2NdWzJdXSksdGhpcy5lZGdlcy5wdXNoKFt0aGlzLmZhY2VzW2NdWzJdLHRoaXMuZmFjZXNbY11bMF1dKTtyZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuX2VkZ2VzVG9WZXJ0aWNlcz1mdW5jdGlvbigpe3RoaXMubGluZVZlcnRpY2VzLmxlbmd0aD0wLHRoaXMubGluZU5vcm1hbHMubGVuZ3RoPTA7Zm9yKHZhciBhPTA7YTx0aGlzLmVkZ2VzLmxlbmd0aDthKyspe3ZhciBiPXRoaXMudmVydGljZXNbdGhpcy5lZGdlc1thXVswXV0sYz10aGlzLnZlcnRpY2VzW3RoaXMuZWRnZXNbYV1bMV1dLGQ9Yy5jb3B5KCkuc3ViKGIpLm5vcm1hbGl6ZSgpLGU9Yi5hcnJheSgpLGY9Yi5hcnJheSgpLGc9Yy5hcnJheSgpLGg9Yy5hcnJheSgpLGk9ZC5hcnJheSgpLGo9ZC5hcnJheSgpO2kucHVzaCgxKSxqLnB1c2goLTEpLHRoaXMubGluZU5vcm1hbHMucHVzaChpLGosaSxpLGosaiksdGhpcy5saW5lVmVydGljZXMucHVzaChlLGYsZyxnLGYsaCl9cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMudmVydGljZXMubGVuZ3RoPjApe2Zvcih2YXIgYT10aGlzLnZlcnRpY2VzWzBdLmNvcHkoKSxiPXRoaXMudmVydGljZXNbMF0uY29weSgpLGM9MDtjPHRoaXMudmVydGljZXMubGVuZ3RoO2MrKylhLng9TWF0aC5tYXgoYS54LHRoaXMudmVydGljZXNbY10ueCksYi54PU1hdGgubWluKGIueCx0aGlzLnZlcnRpY2VzW2NdLngpLGEueT1NYXRoLm1heChhLnksdGhpcy52ZXJ0aWNlc1tjXS55KSxiLnk9TWF0aC5taW4oYi55LHRoaXMudmVydGljZXNbY10ueSksYS56PU1hdGgubWF4KGEueix0aGlzLnZlcnRpY2VzW2NdLnopLGIuej1NYXRoLm1pbihiLnosdGhpcy52ZXJ0aWNlc1tjXS56KTt2YXIgZT1kLlZlY3Rvci5sZXJwKGEsYiwuNSksZj1kLlZlY3Rvci5zdWIoYSxiKSxnPU1hdGgubWF4KE1hdGgubWF4KGYueCxmLnkpLGYueiksaD0yMDAvZztmb3IoYz0wO2M8dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YysrKXRoaXMudmVydGljZXNbY10uc3ViKGUpLHRoaXMudmVydGljZXNbY10ubXVsdChoKX1yZXR1cm4gdGhpc30sYi5leHBvcnRzPWQuR2VvbWV0cnl9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9QXJyYXksZj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5fTtcInVuZGVmaW5lZFwiIT10eXBlb2YgRmxvYXQzMkFycmF5JiYoZT1GbG9hdDMyQXJyYXksZj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5fHxhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fSksZC5NYXRyaXg9ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGI9MDtiPGEubGVuZ3RoOysrYilhW2JdPWFyZ3VtZW50c1tiXTtyZXR1cm4gYS5sZW5ndGgmJmFbYS5sZW5ndGgtMV1pbnN0YW5jZW9mIGQmJih0aGlzLnA1PWFbYS5sZW5ndGgtMV0pLFwibWF0M1wiPT09YVswXT90aGlzLm1hdDM9QXJyYXkuaXNBcnJheShhWzFdKT9hWzFdOm5ldyBlKFsxLDAsMCwwLDEsMCwwLDAsMV0pOnRoaXMubWF0ND1BcnJheS5pc0FycmF5KGFbMF0pP2FbMF06bmV3IGUoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKSx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgZC5NYXRyaXg/KHRoaXMubWF0ND1hLm1hdDQsdGhpcyk6ZihhKT8odGhpcy5tYXQ0PWEsdGhpcyk6KDE2PT09YXJndW1lbnRzLmxlbmd0aCYmKHRoaXMubWF0NFswXT1hcmd1bWVudHNbMF0sdGhpcy5tYXQ0WzFdPWFyZ3VtZW50c1sxXSx0aGlzLm1hdDRbMl09YXJndW1lbnRzWzJdLHRoaXMubWF0NFszXT1hcmd1bWVudHNbM10sdGhpcy5tYXQ0WzRdPWFyZ3VtZW50c1s0XSx0aGlzLm1hdDRbNV09YXJndW1lbnRzWzVdLHRoaXMubWF0NFs2XT1hcmd1bWVudHNbNl0sdGhpcy5tYXQ0WzddPWFyZ3VtZW50c1s3XSx0aGlzLm1hdDRbOF09YXJndW1lbnRzWzhdLHRoaXMubWF0NFs5XT1hcmd1bWVudHNbOV0sdGhpcy5tYXQ0WzEwXT1hcmd1bWVudHNbMTBdLHRoaXMubWF0NFsxMV09YXJndW1lbnRzWzExXSx0aGlzLm1hdDRbMTJdPWFyZ3VtZW50c1sxMl0sdGhpcy5tYXQ0WzEzXT1hcmd1bWVudHNbMTNdLHRoaXMubWF0NFsxNF09YXJndW1lbnRzWzE0XSx0aGlzLm1hdDRbMTVdPWFyZ3VtZW50c1sxNV0pLHRoaXMpfSxkLk1hdHJpeC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkLk1hdHJpeCh0aGlzLm1hdDQsdGhpcy5wNSl9LGQuTWF0cml4LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGQuTWF0cml4KHRoaXMucDUpO3JldHVybiBhLm1hdDRbMF09dGhpcy5tYXQ0WzBdLGEubWF0NFsxXT10aGlzLm1hdDRbMV0sYS5tYXQ0WzJdPXRoaXMubWF0NFsyXSxhLm1hdDRbM109dGhpcy5tYXQ0WzNdLGEubWF0NFs0XT10aGlzLm1hdDRbNF0sYS5tYXQ0WzVdPXRoaXMubWF0NFs1XSxhLm1hdDRbNl09dGhpcy5tYXQ0WzZdLGEubWF0NFs3XT10aGlzLm1hdDRbN10sYS5tYXQ0WzhdPXRoaXMubWF0NFs4XSxhLm1hdDRbOV09dGhpcy5tYXQ0WzldLGEubWF0NFsxMF09dGhpcy5tYXQ0WzEwXSxhLm1hdDRbMTFdPXRoaXMubWF0NFsxMV0sYS5tYXQ0WzEyXT10aGlzLm1hdDRbMTJdLGEubWF0NFsxM109dGhpcy5tYXQ0WzEzXSxhLm1hdDRbMTRdPXRoaXMubWF0NFsxNF0sYS5tYXQ0WzE1XT10aGlzLm1hdDRbMTVdLGF9LGQuTWF0cml4LmlkZW50aXR5PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgZC5NYXRyaXgoYSl9LGQuTWF0cml4LnByb3RvdHlwZS50cmFuc3Bvc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGcsaCxpO3JldHVybiBhIGluc3RhbmNlb2YgZC5NYXRyaXg/KGI9YS5tYXQ0WzFdLGM9YS5tYXQ0WzJdLGU9YS5tYXQ0WzNdLGc9YS5tYXQ0WzZdLGg9YS5tYXQ0WzddLGk9YS5tYXQ0WzExXSx0aGlzLm1hdDRbMF09YS5tYXQ0WzBdLHRoaXMubWF0NFsxXT1hLm1hdDRbNF0sdGhpcy5tYXQ0WzJdPWEubWF0NFs4XSx0aGlzLm1hdDRbM109YS5tYXQ0WzEyXSx0aGlzLm1hdDRbNF09Yix0aGlzLm1hdDRbNV09YS5tYXQ0WzVdLHRoaXMubWF0NFs2XT1hLm1hdDRbOV0sdGhpcy5tYXQ0WzddPWEubWF0NFsxM10sdGhpcy5tYXQ0WzhdPWMsdGhpcy5tYXQ0WzldPWcsdGhpcy5tYXQ0WzEwXT1hLm1hdDRbMTBdLHRoaXMubWF0NFsxMV09YS5tYXQ0WzE0XSx0aGlzLm1hdDRbMTJdPWUsdGhpcy5tYXQ0WzEzXT1oLHRoaXMubWF0NFsxNF09aSx0aGlzLm1hdDRbMTVdPWEubWF0NFsxNV0pOmYoYSkmJihiPWFbMV0sYz1hWzJdLGU9YVszXSxnPWFbNl0saD1hWzddLGk9YVsxMV0sdGhpcy5tYXQ0WzBdPWFbMF0sdGhpcy5tYXQ0WzFdPWFbNF0sdGhpcy5tYXQ0WzJdPWFbOF0sdGhpcy5tYXQ0WzNdPWFbMTJdLHRoaXMubWF0NFs0XT1iLHRoaXMubWF0NFs1XT1hWzVdLHRoaXMubWF0NFs2XT1hWzldLHRoaXMubWF0NFs3XT1hWzEzXSx0aGlzLm1hdDRbOF09Yyx0aGlzLm1hdDRbOV09Zyx0aGlzLm1hdDRbMTBdPWFbMTBdLHRoaXMubWF0NFsxMV09YVsxNF0sdGhpcy5tYXQ0WzEyXT1lLHRoaXMubWF0NFsxM109aCx0aGlzLm1hdDRbMTRdPWksdGhpcy5tYXQ0WzE1XT1hWzE1XSksdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihhKXt2YXIgYixjLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIsczthIGluc3RhbmNlb2YgZC5NYXRyaXg/KGI9YS5tYXQ0WzBdLGM9YS5tYXQ0WzFdLGU9YS5tYXQ0WzJdLGc9YS5tYXQ0WzNdLGg9YS5tYXQ0WzRdLGk9YS5tYXQ0WzVdLGo9YS5tYXQ0WzZdLGs9YS5tYXQ0WzddLGw9YS5tYXQ0WzhdLG09YS5tYXQ0WzldLG49YS5tYXQ0WzEwXSxvPWEubWF0NFsxMV0scD1hLm1hdDRbMTJdLHE9YS5tYXQ0WzEzXSxyPWEubWF0NFsxNF0scz1hLm1hdDRbMTVdKTpmKGEpJiYoYj1hWzBdLGM9YVsxXSxlPWFbMl0sZz1hWzNdLGg9YVs0XSxpPWFbNV0saj1hWzZdLGs9YVs3XSxsPWFbOF0sbT1hWzldLG49YVsxMF0sbz1hWzExXSxwPWFbMTJdLHE9YVsxM10scj1hWzE0XSxzPWFbMTVdKTt2YXIgdD1iKmktYypoLHU9YipqLWUqaCx2PWIqay1nKmgsdz1jKmotZSppLHg9YyprLWcqaSx5PWUqay1nKmosej1sKnEtbSpwLEE9bCpyLW4qcCxCPWwqcy1vKnAsQz1tKnItbipxLEQ9bSpzLW8qcSxFPW4qcy1vKnIsRj10KkUtdSpEK3YqQyt3KkIteCpBK3kqejtyZXR1cm4gRj8oRj0xL0YsdGhpcy5tYXQ0WzBdPShpKkUtaipEK2sqQykqRix0aGlzLm1hdDRbMV09KGUqRC1jKkUtZypDKSpGLHRoaXMubWF0NFsyXT0ocSp5LXIqeCtzKncpKkYsdGhpcy5tYXQ0WzNdPShuKngtbSp5LW8qdykqRix0aGlzLm1hdDRbNF09KGoqQi1oKkUtaypBKSpGLHRoaXMubWF0NFs1XT0oYipFLWUqQitnKkEpKkYsdGhpcy5tYXQ0WzZdPShyKnYtcCp5LXMqdSkqRix0aGlzLm1hdDRbN109KGwqeS1uKnYrbyp1KSpGLHRoaXMubWF0NFs4XT0oaCpELWkqQitrKnopKkYsdGhpcy5tYXQ0WzldPShjKkItYipELWcqeikqRix0aGlzLm1hdDRbMTBdPShwKngtcSp2K3MqdCkqRix0aGlzLm1hdDRbMTFdPShtKnYtbCp4LW8qdCkqRix0aGlzLm1hdDRbMTJdPShpKkEtaCpDLWoqeikqRix0aGlzLm1hdDRbMTNdPShiKkMtYypBK2UqeikqRix0aGlzLm1hdDRbMTRdPShxKnUtcCp3LXIqdCkqRix0aGlzLm1hdDRbMTVdPShsKnctbSp1K24qdCkqRix0aGlzKTpudWxsfSxkLk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0M3gzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5tYXQzWzBdLGI9dGhpcy5tYXQzWzFdLGM9dGhpcy5tYXQzWzJdLGQ9dGhpcy5tYXQzWzNdLGU9dGhpcy5tYXQzWzRdLGY9dGhpcy5tYXQzWzVdLGc9dGhpcy5tYXQzWzZdLGg9dGhpcy5tYXQzWzddLGk9dGhpcy5tYXQzWzhdLGo9aSplLWYqaCxrPS1pKmQrZipnLGw9aCpkLWUqZyxtPWEqaitiKmsrYypsO3JldHVybiBtPyhtPTEvbSx0aGlzLm1hdDNbMF09aiptLHRoaXMubWF0M1sxXT0oLWkqYitjKmgpKm0sdGhpcy5tYXQzWzJdPShmKmItYyplKSptLHRoaXMubWF0M1szXT1rKm0sdGhpcy5tYXQzWzRdPShpKmEtYypnKSptLHRoaXMubWF0M1s1XT0oLWYqYStjKmQpKm0sdGhpcy5tYXQzWzZdPWwqbSx0aGlzLm1hdDNbN109KC1oKmErYipnKSptLHRoaXMubWF0M1s4XT0oZSphLWIqZCkqbSx0aGlzKTpudWxsfSxkLk1hdHJpeC5wcm90b3R5cGUudHJhbnNwb3NlM3gzPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMV0sYz1hWzJdLGQ9YVs1XTtyZXR1cm4gdGhpcy5tYXQzWzFdPWFbM10sdGhpcy5tYXQzWzJdPWFbNl0sdGhpcy5tYXQzWzNdPWIsdGhpcy5tYXQzWzVdPWFbN10sdGhpcy5tYXQzWzZdPWMsdGhpcy5tYXQzWzddPWQsdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLmludmVyc2VUcmFuc3Bvc2U9ZnVuY3Rpb24oYSl7dm9pZCAwPT09dGhpcy5tYXQzP2NvbnNvbGUuZXJyb3IoXCJzb3JyeSwgdGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIHdpdGggbWF0M1wiKToodGhpcy5tYXQzWzBdPWEubWF0NFswXSx0aGlzLm1hdDNbMV09YS5tYXQ0WzFdLHRoaXMubWF0M1syXT1hLm1hdDRbMl0sdGhpcy5tYXQzWzNdPWEubWF0NFs0XSx0aGlzLm1hdDNbNF09YS5tYXQ0WzVdLHRoaXMubWF0M1s1XT1hLm1hdDRbNl0sdGhpcy5tYXQzWzZdPWEubWF0NFs4XSx0aGlzLm1hdDNbN109YS5tYXQ0WzldLHRoaXMubWF0M1s4XT1hLm1hdDRbMTBdKTt2YXIgYj10aGlzLmludmVydDN4MygpO2lmKGIpYi50cmFuc3Bvc2UzeDModGhpcy5tYXQzKTtlbHNlIGZvcih2YXIgYz0wO2M8OTtjKyspdGhpcy5tYXQzW2NdPTA7cmV0dXJuIHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5kZXRlcm1pbmFudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMubWF0NFswXSp0aGlzLm1hdDRbNV0tdGhpcy5tYXQ0WzFdKnRoaXMubWF0NFs0XSxiPXRoaXMubWF0NFswXSp0aGlzLm1hdDRbNl0tdGhpcy5tYXQ0WzJdKnRoaXMubWF0NFs0XSxjPXRoaXMubWF0NFswXSp0aGlzLm1hdDRbN10tdGhpcy5tYXQ0WzNdKnRoaXMubWF0NFs0XSxkPXRoaXMubWF0NFsxXSp0aGlzLm1hdDRbNl0tdGhpcy5tYXQ0WzJdKnRoaXMubWF0NFs1XSxlPXRoaXMubWF0NFsxXSp0aGlzLm1hdDRbN10tdGhpcy5tYXQ0WzNdKnRoaXMubWF0NFs1XSxmPXRoaXMubWF0NFsyXSp0aGlzLm1hdDRbN10tdGhpcy5tYXQ0WzNdKnRoaXMubWF0NFs2XSxnPXRoaXMubWF0NFs4XSp0aGlzLm1hdDRbMTNdLXRoaXMubWF0NFs5XSp0aGlzLm1hdDRbMTJdLGg9dGhpcy5tYXQ0WzhdKnRoaXMubWF0NFsxNF0tdGhpcy5tYXQ0WzEwXSp0aGlzLm1hdDRbMTJdLGk9dGhpcy5tYXQ0WzhdKnRoaXMubWF0NFsxNV0tdGhpcy5tYXQ0WzExXSp0aGlzLm1hdDRbMTJdLGo9dGhpcy5tYXQ0WzldKnRoaXMubWF0NFsxNF0tdGhpcy5tYXQ0WzEwXSp0aGlzLm1hdDRbMTNdLGs9dGhpcy5tYXQ0WzldKnRoaXMubWF0NFsxNV0tdGhpcy5tYXQ0WzExXSp0aGlzLm1hdDRbMTNdO3JldHVybiBhKih0aGlzLm1hdDRbMTBdKnRoaXMubWF0NFsxNV0tdGhpcy5tYXQ0WzExXSp0aGlzLm1hdDRbMTRdKS1iKmsrYypqK2QqaS1lKmgrZipnfSxkLk1hdHJpeC5wcm90b3R5cGUubXVsdD1mdW5jdGlvbihhKXt2YXIgYjtpZihhPT09dGhpc3x8YT09PXRoaXMubWF0NCliPXRoaXMuY29weSgpLm1hdDQ7ZWxzZSBpZihhIGluc3RhbmNlb2YgZC5NYXRyaXgpYj1hLm1hdDQ7ZWxzZXtpZighZihhKSlyZXR1cm47Yj1hfXZhciBjPXRoaXMubWF0NFswXSxlPXRoaXMubWF0NFsxXSxnPXRoaXMubWF0NFsyXSxoPXRoaXMubWF0NFszXTtyZXR1cm4gdGhpcy5tYXQ0WzBdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzFdPWMqYlsxXStlKmJbNV0rZypiWzldK2gqYlsxM10sdGhpcy5tYXQ0WzJdPWMqYlsyXStlKmJbNl0rZypiWzEwXStoKmJbMTRdLHRoaXMubWF0NFszXT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSxjPXRoaXMubWF0NFs0XSxlPXRoaXMubWF0NFs1XSxnPXRoaXMubWF0NFs2XSxoPXRoaXMubWF0NFs3XSx0aGlzLm1hdDRbNF09YypiWzBdK2UqYls0XStnKmJbOF0raCpiWzEyXSx0aGlzLm1hdDRbNV09YypiWzFdK2UqYls1XStnKmJbOV0raCpiWzEzXSx0aGlzLm1hdDRbNl09YypiWzJdK2UqYls2XStnKmJbMTBdK2gqYlsxNF0sdGhpcy5tYXQ0WzddPWMqYlszXStlKmJbN10rZypiWzExXStoKmJbMTVdLGM9dGhpcy5tYXQ0WzhdLGU9dGhpcy5tYXQ0WzldLGc9dGhpcy5tYXQ0WzEwXSxoPXRoaXMubWF0NFsxMV0sdGhpcy5tYXQ0WzhdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzldPWMqYlsxXStlKmJbNV0rZypiWzldK2gqYlsxM10sdGhpcy5tYXQ0WzEwXT1jKmJbMl0rZSpiWzZdK2cqYlsxMF0raCpiWzE0XSx0aGlzLm1hdDRbMTFdPWMqYlszXStlKmJbN10rZypiWzExXStoKmJbMTVdLGM9dGhpcy5tYXQ0WzEyXSxlPXRoaXMubWF0NFsxM10sZz10aGlzLm1hdDRbMTRdLGg9dGhpcy5tYXQ0WzE1XSx0aGlzLm1hdDRbMTJdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzEzXT1jKmJbMV0rZSpiWzVdK2cqYls5XStoKmJbMTNdLHRoaXMubWF0NFsxNF09YypiWzJdK2UqYls2XStnKmJbMTBdK2gqYlsxNF0sdGhpcy5tYXQ0WzE1XT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KGI9YS55LGM9YS56LGE9YS54KTphIGluc3RhbmNlb2YgQXJyYXkmJihiPWFbMV0sYz1hWzJdLGE9YVswXSksdGhpcy5tYXQ0WzBdKj1hLHRoaXMubWF0NFsxXSo9YSx0aGlzLm1hdDRbMl0qPWEsdGhpcy5tYXQ0WzNdKj1hLHRoaXMubWF0NFs0XSo9Yix0aGlzLm1hdDRbNV0qPWIsdGhpcy5tYXQ0WzZdKj1iLHRoaXMubWF0NFs3XSo9Yix0aGlzLm1hdDRbOF0qPWMsdGhpcy5tYXQ0WzldKj1jLHRoaXMubWF0NFsxMF0qPWMsdGhpcy5tYXQ0WzExXSo9Yyx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXRoaXMucDU/dGhpcy5wNS5fdG9SYWRpYW5zKGEpOmE7YiBpbnN0YW5jZW9mIGQuVmVjdG9yPyhjPWIueSxlPWIueixiPWIueCk6YiBpbnN0YW5jZW9mIEFycmF5JiYoYz1iWzFdLGU9YlsyXSxiPWJbMF0pO3ZhciBnPU1hdGguc3FydChiKmIrYypjK2UqZSk7Yio9MS9nLGMqPTEvZyxlKj0xL2c7dmFyIGg9dGhpcy5tYXQ0WzBdLGk9dGhpcy5tYXQ0WzFdLGo9dGhpcy5tYXQ0WzJdLGs9dGhpcy5tYXQ0WzNdLGw9dGhpcy5tYXQ0WzRdLG09dGhpcy5tYXQ0WzVdLG49dGhpcy5tYXQ0WzZdLG89dGhpcy5tYXQ0WzddLHA9dGhpcy5tYXQ0WzhdLHE9dGhpcy5tYXQ0WzldLHI9dGhpcy5tYXQ0WzEwXSxzPXRoaXMubWF0NFsxMV0sdD1NYXRoLnNpbihmKSx1PU1hdGguY29zKGYpLHY9MS11LHc9YipiKnYrdSx4PWMqYip2K2UqdCx5PWUqYip2LWMqdCx6PWIqYyp2LWUqdCxBPWMqYyp2K3UsQj1lKmMqditiKnQsQz1iKmUqditjKnQsRD1jKmUqdi1iKnQsRT1lKmUqdit1O3JldHVybiB0aGlzLm1hdDRbMF09aCp3K2wqeCtwKnksdGhpcy5tYXQ0WzFdPWkqdyttKngrcSp5LHRoaXMubWF0NFsyXT1qKncrbip4K3IqeSx0aGlzLm1hdDRbM109ayp3K28qeCtzKnksdGhpcy5tYXQ0WzRdPWgqeitsKkErcCpCLHRoaXMubWF0NFs1XT1pKnorbSpBK3EqQix0aGlzLm1hdDRbNl09aip6K24qQStyKkIsdGhpcy5tYXQ0WzddPWsqeitvKkErcypCLHRoaXMubWF0NFs4XT1oKkMrbCpEK3AqRSx0aGlzLm1hdDRbOV09aSpDK20qRCtxKkUsdGhpcy5tYXQ0WzEwXT1qKkMrbipEK3IqRSx0aGlzLm1hdDRbMTFdPWsqQytvKkQrcypFLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSl7dmFyIGI9YVswXSxjPWFbMV0sZD1hWzJdfHwwO3RoaXMubWF0NFsxMl0rPXRoaXMubWF0NFswXSpiK3RoaXMubWF0NFs0XSpjK3RoaXMubWF0NFs4XSpkLHRoaXMubWF0NFsxM10rPXRoaXMubWF0NFsxXSpiK3RoaXMubWF0NFs1XSpjK3RoaXMubWF0NFs5XSpkLHRoaXMubWF0NFsxNF0rPXRoaXMubWF0NFsyXSpiK3RoaXMubWF0NFs2XSpjK3RoaXMubWF0NFsxMF0qZCx0aGlzLm1hdDRbMTVdKz10aGlzLm1hdDRbM10qYit0aGlzLm1hdDRbN10qYyt0aGlzLm1hdDRbMTFdKmR9LGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKGEpe3RoaXMucm90YXRlKGEsMSwwLDApfSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbihhKXt0aGlzLnJvdGF0ZShhLDAsMSwwKX0sZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oYSl7dGhpcy5yb3RhdGUoYSwwLDAsMSl9LGQuTWF0cml4LnByb3RvdHlwZS5wZXJzcGVjdGl2ZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0xL01hdGgudGFuKGEvMiksZj0xLyhjLWQpO3JldHVybiB0aGlzLm1hdDRbMF09ZS9iLHRoaXMubWF0NFsxXT0wLHRoaXMubWF0NFsyXT0wLHRoaXMubWF0NFszXT0wLHRoaXMubWF0NFs0XT0wLHRoaXMubWF0NFs1XT1lLHRoaXMubWF0NFs2XT0wLHRoaXMubWF0NFs3XT0wLHRoaXMubWF0NFs4XT0wLHRoaXMubWF0NFs5XT0wLHRoaXMubWF0NFsxMF09KGQrYykqZix0aGlzLm1hdDRbMTFdPS0xLHRoaXMubWF0NFsxMl09MCx0aGlzLm1hdDRbMTNdPTAsdGhpcy5tYXQ0WzE0XT0yKmQqYypmLHRoaXMubWF0NFsxNV09MCx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUub3J0aG89ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPTEvKGEtYiksaD0xLyhjLWQpLGk9MS8oZS1mKTtyZXR1cm4gdGhpcy5tYXQ0WzBdPS0yKmcsdGhpcy5tYXQ0WzFdPTAsdGhpcy5tYXQ0WzJdPTAsdGhpcy5tYXQ0WzNdPTAsdGhpcy5tYXQ0WzRdPTAsdGhpcy5tYXQ0WzVdPS0yKmgsdGhpcy5tYXQ0WzZdPTAsdGhpcy5tYXQ0WzddPTAsdGhpcy5tYXQ0WzhdPTAsdGhpcy5tYXQ0WzldPTAsdGhpcy5tYXQ0WzEwXT0yKmksdGhpcy5tYXQ0WzExXT0wLHRoaXMubWF0NFsxMl09KGErYikqZyx0aGlzLm1hdDRbMTNdPShkK2MpKmgsdGhpcy5tYXQ0WzE0XT0oZitlKSppLHRoaXMubWF0NFsxNV09MSx0aGlzfSxiLmV4cG9ydHM9ZC5NYXRyaXh9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QuUmVuZGVyZXJHTC5wcm90b3R5cGUuYmVnaW5TaGFwZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT12b2lkIDAhPT1hP2E6ZS5MSU5FX1NUUklQLHZvaWQgMD09PXRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcz8odGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5lZGdlcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLmNvbG9yQnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLnV2QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0ZXhCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUubGluZU5vcm1hbEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5wb2ludFZlcnRleEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4PVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4PVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXg9W10pOih0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLmVkZ2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGljZXMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLmxlbmd0aD0wKSx0aGlzLmlzSW1tZWRpYXRlRHJhd2luZz0hMCx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnZlcnRleD1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZjtjPWU9Zj0wLDM9PT1hcmd1bWVudHMubGVuZ3RoP2M9YXJndW1lbnRzWzJdOjQ9PT1hcmd1bWVudHMubGVuZ3RoPyhlPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXSk6NT09PWFyZ3VtZW50cy5sZW5ndGgmJihjPWFyZ3VtZW50c1syXSxlPWFyZ3VtZW50c1szXSxmPWFyZ3VtZW50c1s0XSk7dmFyIGc9bmV3IGQuVmVjdG9yKGEsYixjKTt0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMucHVzaChnKTt2YXIgaD10aGlzLmN1ckZpbGxDb2xvcnx8Wy41LC41LC41LDFdO3JldHVybiB0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzLnB1c2goaFswXSxoWzFdLGhbMl0saFszXSksdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLnB1c2goZSxmKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXT1hLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdPWIsdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMl09Yyx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFswXT1hLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdPWIsdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMl09Yyx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmVuZFNoYXBlPWZ1bmN0aW9uKGEsYixjLGYsZyxoKXtpZih0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPT09ZS5QT0lOVFMpdGhpcy5fdXNlUG9pbnRTaGFkZXIoKSx0aGlzLmN1clBvaW50U2hhZGVyLmJpbmRTaGFkZXIoKSx0aGlzLl9kcmF3UG9pbnRzKHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcyx0aGlzLmltbWVkaWF0ZU1vZGUucG9pbnRWZXJ0ZXhCdWZmZXIpLHRoaXMuY3VyUG9pbnRTaGFkZXIudW5iaW5kU2hhZGVyKCk7ZWxzZSBpZih0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoPjEpe2lmKHRoaXMuX3VzZUltbWVkaWF0ZU1vZGVTaGFkZXIoKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5kcmF3TW9kZSE9PWUuVEVYVFVSRSl7Zm9yKHZhciBpPTA7aTx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoLTE7aSsrKXRoaXMuaW1tZWRpYXRlTW9kZS5lZGdlcy5wdXNoKFtpLGkrMV0pO2E9PT1lLkNMT1NFJiZ0aGlzLmltbWVkaWF0ZU1vZGUuZWRnZXMucHVzaChbdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aC0xLDBdKSxkLkdlb21ldHJ5LnByb3RvdHlwZS5fZWRnZXNUb1ZlcnRpY2VzLmNhbGwodGhpcy5pbW1lZGlhdGVNb2RlKSx0aGlzLl9kcmF3U3Ryb2tlSW1tZWRpYXRlTW9kZSgpfWlmKHRoaXMuX2RvRmlsbCl7aWYodGhpcy5pc0Jlemllcnx8dGhpcy5pc1F1YWRyYXRpY3x8dGhpcy5pc0N1cnZlKXt2YXIgaj1bbmV3IEZsb2F0MzJBcnJheSh0aGlzLl92VG9OQXJyYXkodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzKSldLGs9dGhpcy5fdHJpYW5ndWxhdGUoaik7dGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzPVtdO2Zvcih2YXIgbD0wLG09ay5sZW5ndGg7bDxtO2wrPTMpdGhpcy52ZXJ0ZXgoa1tsXSxrW2wrMV0sa1tsKzJdKX10aGlzLl9kcmF3RmlsbEltbWVkaWF0ZU1vZGUoYSxiLGMsZixnLGgpfX1yZXR1cm4gdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLmxlbmd0aD0wLHRoaXMuaXNJbW1lZGlhdGVEcmF3aW5nPSExLHRoaXMuaXNCZXppZXI9ITEsdGhpcy5pc1F1YWRyYXRpYz0hMSx0aGlzLmlzQ3VydmU9ITEsdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXgubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXgubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5sZW5ndGg9MCx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9kcmF3RmlsbEltbWVkaWF0ZU1vZGU9ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe3ZhciBoPXRoaXMuR0w7aWYodGhpcy5jdXJGaWxsU2hhZGVyLmJpbmRTaGFkZXIoKSx0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhCdWZmZXIsaC5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcyksRmxvYXQzMkFycmF5LGguRFlOQU1JQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGguRkxPQVQsITEsMCwwKSksdGhpcy5kcmF3TW9kZT09PWUuRklMTCYmdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleENvbG9yJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUuY29sb3JCdWZmZXIsaC5BUlJBWV9CVUZGRVIsdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleENvbG9ycyxGbG9hdDMyQXJyYXksaC5EWU5BTUlDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleENvbG9yLmxvY2F0aW9uLDQsaC5GTE9BVCwhMSwwLDApKSx0aGlzLmRyYXdNb2RlPT09ZS5URVhUVVJFJiZ0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQmJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS51dkJ1ZmZlcixoLkFSUkFZX0JVRkZFUix0aGlzLmltbWVkaWF0ZU1vZGUudXZDb29yZHMsRmxvYXQzMkFycmF5LGguRFlOQU1JQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLGguRkxPQVQsITEsMCwwKSksdGhpcy5kcmF3TW9kZT09PWUuRklMTHx8dGhpcy5kcmF3TW9kZT09PWUuVEVYVFVSRSlzd2l0Y2godGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZSl7Y2FzZSBlLkxJTkVfU1RSSVA6Y2FzZSBlLkxJTkVTOmNhc2UgZS5UUklBTkdMRVM6dGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT10aGlzLmlzQmV6aWVyfHx0aGlzLmlzUXVhZHJhdGljfHx0aGlzLmlzQ3VydmU/ZS5UUklBTkdMRVM6ZS5UUklBTkdMRV9GQU59ZWxzZSBzd2l0Y2godGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZSl7Y2FzZSBlLkxJTkVfU1RSSVA6Y2FzZSBlLkxJTkVTOnRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9ZS5MSU5FX0xPT1B9aWYodGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT09PWUuUVVBRFN8fHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9PT1lLlFVQURfU1RSSVApdGhyb3cgbmV3IEVycm9yKFwic29ycnksIFwiK3RoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGUrXCIgbm90IHlldCBpbXBsZW1lbnRlZCBpbiB3ZWJnbCBtb2RlLlwiKTt0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJGaWxsQ29sb3IpLGguZW5hYmxlKGguQkxFTkQpLGguZHJhd0FycmF5cyh0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlLDAsdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLHRoaXMuY3VyRmlsbFNoYWRlci51bmJpbmRTaGFkZXIoKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd1N0cm9rZUltbWVkaWF0ZU1vZGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLkdMO3RoaXMuY3VyU3Ryb2tlU2hhZGVyLmJpbmRTaGFkZXIoKSx0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbiYmKHRoaXMuX2JpbmRCdWZmZXIodGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0ZXhCdWZmZXIsYS5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbih0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzKSxGbG9hdDMyQXJyYXksYS5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYS5GTE9BVCwhMSwwLDApKSx0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24mJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFsQnVmZmVyLGEuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4odGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxzKSxGbG9hdDMyQXJyYXksYS5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYURpcmVjdGlvbi5sb2NhdGlvbiw0LGEuRkxPQVQsITEsMCwwKSksdGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyU3Ryb2tlQ29sb3IpLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUywwLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGljZXMubGVuZ3RoKSx0aGlzLmN1clN0cm9rZVNoYWRlci51bmJpbmRTaGFkZXIoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGIuZXhwb3J0cz1kLlJlbmRlcmVyR0x9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDczOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPTA7ZC5SZW5kZXJlckdMLnByb3RvdHlwZS5faW5pdEJ1ZmZlckRlZmF1bHRzPWZ1bmN0aW9uKGEpe2lmKHRoaXMuX2ZyZWVCdWZmZXJzKGEpLCsrZT4xZTMpe3ZhciBiPU9iamVjdC5rZXlzKHRoaXMuZ0hhc2gpWzBdO2RlbGV0ZSB0aGlzLmdIYXNoW2JdLGUtLX10aGlzLmdIYXNoW2FdPXt9fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9mcmVlQnVmZmVycz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmdIYXNoW2FdO2lmKGIpe2RlbGV0ZSB0aGlzLmdIYXNoW2FdLGUtLTt2YXIgYz10aGlzLkdMO2IudmVydGV4QnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLnZlcnRleEJ1ZmZlciksYi5ub3JtYWxCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIubm9ybWFsQnVmZmVyKSxiLmxpbmVOb3JtYWxCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIubGluZU5vcm1hbEJ1ZmZlciksYi51dkJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi51dkJ1ZmZlciksYi5pbmRleEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi5pbmRleEJ1ZmZlciksYi5saW5lVmVydGV4QnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLmxpbmVWZXJ0ZXhCdWZmZXIpfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5jcmVhdGVCdWZmZXJzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5HTDt0aGlzLl9pbml0QnVmZmVyRGVmYXVsdHMoYSk7dmFyIGQ9dGhpcy5nSGFzaFthXTtyZXR1cm4gZC5udW1iZXJPZkl0ZW1zPTMqYi5mYWNlcy5sZW5ndGgsZC5saW5lVmVydGV4Q291bnQ9Yi5saW5lVmVydGljZXMubGVuZ3RoLHRoaXMuX3VzZUNvbG9yU2hhZGVyKCksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJihkLmxpbmVWZXJ0ZXhCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQubGluZVZlcnRleEJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIubGluZVZlcnRpY2VzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYy5GTE9BVCwhMSwwLDApKSx0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24mJihkLmxpbmVOb3JtYWxCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQubGluZU5vcm1hbEJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIubGluZU5vcm1hbHMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uLmxvY2F0aW9uLDQsYy5GTE9BVCwhMSwwLDApKSx0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJihkLnZlcnRleEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC52ZXJ0ZXhCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KGIudmVydGljZXMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGMuRkxPQVQsITEsMCwwKSksZC5pbmRleEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC5pbmRleEJ1ZmZlcixjLkVMRU1FTlRfQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4oYi5mYWNlcyksVWludDE2QXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYU5vcm1hbCYmKGQubm9ybWFsQnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLm5vcm1hbEJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl92VG9OQXJyYXkoYi52ZXJ0ZXhOb3JtYWxzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hTm9ybWFsLmxvY2F0aW9uLDMsYy5GTE9BVCwhMSwwLDApKSx0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQmJihkLnV2QnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLnV2QnVmZmVyLGMuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4oYi51dnMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLGMuRkxPQVQsITEsMCwwKSksZH0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5kcmF3QnVmZmVycz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLkdMO3RoaXMuX3VzZUNvbG9yU2hhZGVyKCk7dmFyIGM9dGhpcy5nSGFzaFthXTtyZXR1cm4gdGhpcy5fZG9TdHJva2UmJmMubGluZVZlcnRleENvdW50PjAmJih0aGlzLmN1clN0cm9rZVNoYWRlci5iaW5kU2hhZGVyKCksYy5saW5lVmVydGV4QnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLmxpbmVWZXJ0ZXhCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGIuRkxPQVQsITEsMCwwKSksYy5saW5lTm9ybWFsQnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLmxpbmVOb3JtYWxCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24ubG9jYXRpb24sNCxiLkZMT0FULCExLDAsMCkpLHRoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1clN0cm9rZUNvbG9yKSx0aGlzLl9kcmF3QXJyYXlzKGIuVFJJQU5HTEVTLGEpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLnVuYmluZFNoYWRlcigpKSwhMSE9PXRoaXMuX2RvRmlsbCYmKHRoaXMuY3VyRmlsbFNoYWRlci5iaW5kU2hhZGVyKCksYy52ZXJ0ZXhCdWZmZXImJih0aGlzLl9iaW5kQnVmZmVyKGMudmVydGV4QnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGIuRkxPQVQsITEsMCwwKSksYy5pbmRleEJ1ZmZlciYmdGhpcy5fYmluZEJ1ZmZlcihjLmluZGV4QnVmZmVyLGIuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLGMubm9ybWFsQnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLm5vcm1hbEJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hTm9ybWFsLmxvY2F0aW9uLDMsYi5GTE9BVCwhMSwwLDApKSxjLnV2QnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLnV2QnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLGIuRkxPQVQsITEsMCwwKSksdGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyRmlsbENvbG9yKSx0aGlzLl9kcmF3RWxlbWVudHMoYi5UUklBTkdMRVMsYSksdGhpcy5jdXJGaWxsU2hhZGVyLnVuYmluZFNoYWRlcigpKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmRyYXdCdWZmZXJzU2NhbGVkPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMudU1WTWF0cml4LmNvcHkoKTt0cnl7dGhpcy51TVZNYXRyaXguc2NhbGUoYixjLGQpLHRoaXMuZHJhd0J1ZmZlcnMoYSl9ZmluYWxseXt0aGlzLnVNVk1hdHJpeD1lfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd0FycmF5cz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLkdMLmRyYXdBcnJheXMoYSwwLHRoaXMuZ0hhc2hbYl0ubGluZVZlcnRleENvdW50KSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd0VsZW1lbnRzPWZ1bmN0aW9uKGEsYil7dGhpcy5HTC5kcmF3RWxlbWVudHMoYSx0aGlzLmdIYXNoW2JdLm51bWJlck9mSXRlbXMsdGhpcy5HTC5VTlNJR05FRF9TSE9SVCwwKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdQb2ludHM9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLkdMO3RoaXMuX2JpbmRCdWZmZXIoYixjLkFSUkFZX0JVRkZFUix0aGlzLl92VG9OQXJyYXkoYSksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyUG9pbnRTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyUG9pbnRTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxjLkZMT0FULCExLDAsMCksYy5kcmF3QXJyYXlzKGMuUG9pbnRzLDAsYS5sZW5ndGgpfSxiLmV4cG9ydHM9ZC5SZW5kZXJlckdMfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDc0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKSxmPWEoXCJsaWJ0ZXNzXCIpO2EoXCIuL3A1LlNoYWRlclwiKSxhKFwiLi9wNS5DYW1lcmFcIiksYShcIi4uL2NvcmUvcDUuUmVuZGVyZXJcIiksYShcIi4vcDUuTWF0cml4XCIpO3ZhciBnPXtpbW1lZGlhdGVWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGFWZXJ0ZXhDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBmbG9hdCB1UmVzb2x1dGlvbjtcXG51bmlmb3JtIGZsb2F0IHVQb2ludFNpemU7XFxuXFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdkNvbG9yID0gYVZlcnRleENvbG9yO1xcbiAgZ2xfUG9pbnRTaXplID0gdVBvaW50U2l6ZTtcXG59XFxuXCIsdmVydGV4Q29sb3JWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGFWZXJ0ZXhDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdkNvbG9yID0gYVZlcnRleENvbG9yO1xcbn1cXG5cIix2ZXJ0ZXhDb2xvckZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZvaWQgbWFpbih2b2lkKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7XFxufVwiLG5vcm1hbFZlcnQ6XCJhdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzMgYU5vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyB1Tm9ybWFsTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMyB2VmVydGV4Tm9ybWFsO1xcbnZhcnlpbmcgaGlnaHAgdmVjMiB2VmVydFRleENvb3JkO1xcblxcbnZvaWQgbWFpbih2b2lkKSB7XFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuICB2VmVydGV4Tm9ybWFsID0gbm9ybWFsaXplKHZlYzMoIHVOb3JtYWxNYXRyaXggKiBhTm9ybWFsICkpO1xcbiAgdlZlcnRUZXhDb29yZCA9IGFUZXhDb29yZDtcXG59XFxuXCIsbm9ybWFsRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnZhcnlpbmcgdmVjMyB2VmVydGV4Tm9ybWFsO1xcbnZvaWQgbWFpbih2b2lkKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZWZXJ0ZXhOb3JtYWwsIDEuMCk7XFxufVwiLGJhc2ljRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnZhcnlpbmcgdmVjMyB2VmVydGV4Tm9ybWFsO1xcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdU1hdGVyaWFsQ29sb3I7XFxufVwiLGxpZ2h0VmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMyBhTm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXhDb29yZDtcXG5cXG51bmlmb3JtIG1hdDQgdVZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyB1Tm9ybWFsTWF0cml4O1xcbnVuaWZvcm0gaW50IHVBbWJpZW50TGlnaHRDb3VudDtcXG51bmlmb3JtIGludCB1RGlyZWN0aW9uYWxMaWdodENvdW50O1xcbnVuaWZvcm0gaW50IHVQb2ludExpZ2h0Q291bnQ7XFxuXFxudW5pZm9ybSB2ZWMzIHVBbWJpZW50Q29sb3JbOF07XFxudW5pZm9ybSB2ZWMzIHVMaWdodGluZ0RpcmVjdGlvbls4XTtcXG51bmlmb3JtIHZlYzMgdURpcmVjdGlvbmFsQ29sb3JbOF07XFxudW5pZm9ybSB2ZWMzIHVQb2ludExpZ2h0TG9jYXRpb25bOF07XFxudW5pZm9ybSB2ZWMzIHVQb2ludExpZ2h0Q29sb3JbOF07XFxudW5pZm9ybSBib29sIHVTcGVjdWxhcjtcXG5cXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdlZlcnRUZXhDb29yZDtcXG52YXJ5aW5nIHZlYzMgdkxpZ2h0V2VpZ2h0aW5nO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG5cXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG5cXG4gIHZlYzMgdmVydGV4Tm9ybWFsID0gbm9ybWFsaXplKHZlYzMoIHVOb3JtYWxNYXRyaXggKiBhTm9ybWFsICkpO1xcbiAgdlZlcnRleE5vcm1hbCA9IHZlcnRleE5vcm1hbDtcXG4gIHZWZXJ0VGV4Q29vcmQgPSBhVGV4Q29vcmQ7XFxuXFxuICB2ZWM0IG12UG9zaXRpb24gPSB1TW9kZWxWaWV3TWF0cml4ICogdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICB2ZWMzIGV5ZURpcmVjdGlvbiA9IG5vcm1hbGl6ZSgtbXZQb3NpdGlvbi54eXopO1xcblxcbiAgZmxvYXQgc2hpbmluZXNzID0gMzIuMDtcXG4gIGZsb2F0IHNwZWN1bGFyRmFjdG9yID0gMi4wO1xcbiAgZmxvYXQgZGlmZnVzZUZhY3RvciA9IDAuMztcXG5cXG4gIHZlYzMgYW1iaWVudExpZ2h0RmFjdG9yID0gdmVjMygwLjApO1xcblxcbiAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHtcXG4gICAgaWYgKHVBbWJpZW50TGlnaHRDb3VudCA9PSBpKSBicmVhaztcXG4gICAgYW1iaWVudExpZ2h0RmFjdG9yICs9IHVBbWJpZW50Q29sb3JbaV07XFxuICB9XFxuXFxuXFxuICB2ZWMzIGRpcmVjdGlvbmFsTGlnaHRGYWN0b3IgPSB2ZWMzKDAuMCk7XFxuXFxuICBmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykge1xcbiAgICBpZiAodURpcmVjdGlvbmFsTGlnaHRDb3VudCA9PSBqKSBicmVhaztcXG4gICAgdmVjMyBkaXIgPSB1TGlnaHRpbmdEaXJlY3Rpb25bal07XFxuICAgIGZsb2F0IGRpcmVjdGlvbmFsTGlnaHRXZWlnaHRpbmcgPSBtYXgoZG90KHZlcnRleE5vcm1hbCwgLWRpciksIDAuMCk7XFxuICAgIGRpcmVjdGlvbmFsTGlnaHRGYWN0b3IgKz0gdURpcmVjdGlvbmFsQ29sb3Jbal0gKiBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nO1xcbiAgfVxcblxcblxcbiAgdmVjMyBwb2ludExpZ2h0RmFjdG9yID0gdmVjMygwLjApO1xcblxcbiAgZm9yIChpbnQgayA9IDA7IGsgPCA4OyBrKyspIHtcXG4gICAgaWYgKHVQb2ludExpZ2h0Q291bnQgPT0gaykgYnJlYWs7XFxuICAgIHZlYzMgbG9jID0gKHVWaWV3TWF0cml4ICogdmVjNCh1UG9pbnRMaWdodExvY2F0aW9uW2tdLCAxLjApKS54eXo7XFxuICAgIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBub3JtYWxpemUobG9jIC0gbXZQb3NpdGlvbi54eXopO1xcblxcbiAgICBmbG9hdCBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nID0gbWF4KGRvdCh2ZXJ0ZXhOb3JtYWwsIGxpZ2h0RGlyZWN0aW9uKSwgMC4wKTtcXG5cXG4gICAgZmxvYXQgc3BlY3VsYXJMaWdodFdlaWdodGluZyA9IDAuMDtcXG4gICAgaWYgKHVTcGVjdWxhciApe1xcbiAgICAgIHZlYzMgcmVmbGVjdGlvbkRpcmVjdGlvbiA9IHJlZmxlY3QoLWxpZ2h0RGlyZWN0aW9uLCB2ZXJ0ZXhOb3JtYWwpO1xcbiAgICAgIHNwZWN1bGFyTGlnaHRXZWlnaHRpbmcgPSBwb3cobWF4KGRvdChyZWZsZWN0aW9uRGlyZWN0aW9uLCBleWVEaXJlY3Rpb24pLCAwLjApLCBzaGluaW5lc3MpO1xcbiAgICB9XFxuXFxuICAgIHBvaW50TGlnaHRGYWN0b3IgKz0gdVBvaW50TGlnaHRDb2xvcltrXSAqIChzcGVjdWxhckZhY3RvciAqIHNwZWN1bGFyTGlnaHRXZWlnaHRpbmdcXG4gICAgICArIGRpcmVjdGlvbmFsTGlnaHRXZWlnaHRpbmcgKiBkaWZmdXNlRmFjdG9yKTtcXG4gIH1cXG5cXG4gIHZMaWdodFdlaWdodGluZyA9ICBhbWJpZW50TGlnaHRGYWN0b3IgKyBkaXJlY3Rpb25hbExpZ2h0RmFjdG9yICsgcG9pbnRMaWdodEZhY3RvcjtcXG59XFxuXCIsbGlnaHRUZXh0dXJlRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGJvb2wgaXNUZXh0dXJlO1xcbnVuaWZvcm0gYm9vbCB1VXNlTGlnaHRpbmc7XFxuXFxudmFyeWluZyB2ZWMzIHZMaWdodFdlaWdodGluZztcXG52YXJ5aW5nIGhpZ2hwIHZlYzIgdlZlcnRUZXhDb29yZDtcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gaXNUZXh0dXJlID8gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VmVydFRleENvb3JkKSA6IHVNYXRlcmlhbENvbG9yO1xcbiAgaWYgKHVVc2VMaWdodGluZylcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAqPSB2TGlnaHRXZWlnaHRpbmc7XFxufVwiLHBob25nVmVydDpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbmF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMyBhTm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXhDb29yZDtcXG5cXG51bmlmb3JtIHZlYzMgdUFtYmllbnRDb2xvcls4XTtcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIHVOb3JtYWxNYXRyaXg7XFxudW5pZm9ybSBpbnQgdUFtYmllbnRMaWdodENvdW50O1xcblxcbnZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZBbWJpZW50Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgdmVjNCB2aWV3TW9kZWxQb3NpdGlvbiA9IHVNb2RlbFZpZXdNYXRyaXggKiB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG5cXG4gIC8vIFBhc3MgdmFyeWluZ3MgdG8gZnJhZ21lbnQgc2hhZGVyXFxuICB2Vmlld1Bvc2l0aW9uID0gdmlld01vZGVsUG9zaXRpb24ueHl6O1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHZpZXdNb2RlbFBvc2l0aW9uOyAgXFxuXFxuICB2Tm9ybWFsID0gbm9ybWFsaXplKHVOb3JtYWxNYXRyaXggKiBub3JtYWxpemUoYU5vcm1hbCkpO1xcbiAgdlRleENvb3JkID0gYVRleENvb3JkO1xcblxcbiAgdkFtYmllbnRDb2xvciA9IHZlYzMoMC4wKTtcXG4gIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7XFxuICAgIGlmICh1QW1iaWVudExpZ2h0Q291bnQgPT0gaSkgYnJlYWs7XFxuICAgIHZBbWJpZW50Q29sb3IgKz0gdUFtYmllbnRDb2xvcltpXTtcXG4gIH1cXG59XFxuXCIsXG5waG9uZ0ZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG4vL3VuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1Vmlld01hdHJpeDtcXG5cXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBib29sIGlzVGV4dHVyZTtcXG51bmlmb3JtIGJvb2wgdVVzZUxpZ2h0aW5nO1xcblxcbnVuaWZvcm0gdmVjMyB1TGlnaHRpbmdEaXJlY3Rpb25bOF07XFxudW5pZm9ybSB2ZWMzIHVEaXJlY3Rpb25hbENvbG9yWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodExvY2F0aW9uWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodENvbG9yWzhdO1xcbnVuaWZvcm0gYm9vbCB1U3BlY3VsYXI7XFxuXFxudW5pZm9ybSBpbnQgdURpcmVjdGlvbmFsTGlnaHRDb3VudDtcXG51bmlmb3JtIGludCB1UG9pbnRMaWdodENvdW50O1xcblxcbnZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZBbWJpZW50Q29sb3I7XFxuXFxudmVjMyBWO1xcbnZlYzMgTjtcXG5cXG5jb25zdCBmbG9hdCBzaGluaW5lc3MgPSAzMi4wO1xcbmNvbnN0IGZsb2F0IHNwZWN1bGFyRmFjdG9yID0gMi4wO1xcbmNvbnN0IGZsb2F0IGRpZmZ1c2VGYWN0b3IgPSAwLjczO1xcblxcbnN0cnVjdCBMaWdodFJlc3VsdCB7XFxuXFx0ZmxvYXQgc3BlY3VsYXI7XFxuXFx0ZmxvYXQgZGlmZnVzZTtcXG59O1xcblxcbmZsb2F0IHBob25nU3BlY3VsYXIoXFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxcbiAgZmxvYXQgc2hpbmluZXNzKSB7XFxuXFxuICB2ZWMzIFIgPSBub3JtYWxpemUocmVmbGVjdCgtbGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpKTsgIFxcbiAgcmV0dXJuIHBvdyhtYXgoMC4wLCBkb3QoUiwgdmlld0RpcmVjdGlvbikpLCBzaGluaW5lc3MpO1xcbn1cXG5cXG5mbG9hdCBsYW1iZXJ0RGlmZnVzZShcXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwpIHtcXG4gIHJldHVybiBtYXgoMC4wLCBkb3QoLWxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSk7XFxufVxcblxcbkxpZ2h0UmVzdWx0IGxpZ2h0KHZlYzMgbGlnaHRWZWN0b3IpIHtcXG5cXG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShsaWdodFZlY3Rvcik7XFxuXFxuICAvL2NvbXB1dGUgb3VyIGRpZmZ1c2UgJiBzcGVjdWxhciB0ZXJtc1xcbiAgTGlnaHRSZXN1bHQgbHI7XFxuICBpZiAodVNwZWN1bGFyKVxcbiAgICBsci5zcGVjdWxhciA9IHBob25nU3BlY3VsYXIoTCwgViwgTiwgc2hpbmluZXNzKTtcXG4gIGxyLmRpZmZ1c2UgPSBsYW1iZXJ0RGlmZnVzZShMLCBOKTtcXG4gIHJldHVybiBscjtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG5cXG4gIFYgPSBub3JtYWxpemUodlZpZXdQb3NpdGlvbik7XFxuICBOID0gdk5vcm1hbDtcXG5cXG4gIHZlYzMgZGlmZnVzZSA9IHZlYzMoMC4wKTtcXG4gIGZsb2F0IHNwZWN1bGFyID0gMC4wO1xcblxcbiAgZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHtcXG4gICAgaWYgKHVEaXJlY3Rpb25hbExpZ2h0Q291bnQgPT0gaikgYnJlYWs7XFxuXFxuICAgIExpZ2h0UmVzdWx0IHJlc3VsdCA9IGxpZ2h0KHVMaWdodGluZ0RpcmVjdGlvbltqXSk7XFxuICAgIGRpZmZ1c2UgKz0gcmVzdWx0LmRpZmZ1c2UgKiB1RGlyZWN0aW9uYWxDb2xvcltqXTtcXG4gICAgc3BlY3VsYXIgKz0gcmVzdWx0LnNwZWN1bGFyO1xcbiAgfVxcblxcbiAgZm9yIChpbnQgayA9IDA7IGsgPCA4OyBrKyspIHtcXG4gICAgaWYgKHVQb2ludExpZ2h0Q291bnQgPT0gaykgYnJlYWs7XFxuXFxuICAgIHZlYzMgbGlnaHRQb3NpdGlvbiA9ICh1Vmlld01hdHJpeCAqIHZlYzQodVBvaW50TGlnaHRMb2NhdGlvbltrXSwgMS4wKSkueHl6O1xcbiAgICB2ZWMzIGxpZ2h0VmVjdG9yID0gdlZpZXdQb3NpdGlvbiAtIGxpZ2h0UG9zaXRpb247XFxuXFx0XFxuICAgIC8vY2FsY3VsYXRlIGF0dGVudWF0aW9uXFxuICAgIGZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgobGlnaHRWZWN0b3IpO1xcbiAgICBmbG9hdCBmYWxsb2ZmID0gNTAwLjAgLyAobGlnaHREaXN0YW5jZSArIDUwMC4wKTtcXG5cXG4gICAgTGlnaHRSZXN1bHQgcmVzdWx0ID0gbGlnaHQobGlnaHRWZWN0b3IpO1xcbiAgICBkaWZmdXNlICs9IHJlc3VsdC5kaWZmdXNlICogZmFsbG9mZiAqIHVQb2ludExpZ2h0Q29sb3Jba107XFxuICAgIHNwZWN1bGFyICs9IHJlc3VsdC5zcGVjdWxhciAqIGZhbGxvZmY7XFxuICB9XFxuXFxuICBnbF9GcmFnQ29sb3IgPSBpc1RleHR1cmUgPyB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXhDb29yZCkgOiB1TWF0ZXJpYWxDb2xvcjtcXG4gIGdsX0ZyYWdDb2xvci5yZ2IgPSBnbF9GcmFnQ29sb3IucmdiICogKGRpZmZ1c2UgKiBkaWZmdXNlRmFjdG9yICsgdkFtYmllbnRDb2xvcikgKyBzcGVjdWxhciAqIHNwZWN1bGFyRmFjdG9yO1xcbn1cIixmb250VmVydDpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbmF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcblxcbnVuaWZvcm0gdmVjNCB1R2x5cGhSZWN0O1xcbnVuaWZvcm0gZmxvYXQgdUdseXBoT2Zmc2V0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxudmFyeWluZyBmbG9hdCB3O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuXFxuICAvLyBzY2FsZSBieSB0aGUgc2l6ZSBvZiB0aGUgZ2x5cGgncyByZWN0YW5nbGVcXG4gIHBvc2l0aW9uVmVjNC54eSAqPSB1R2x5cGhSZWN0Lnp3IC0gdUdseXBoUmVjdC54eTtcXG5cXG4gIC8vIG1vdmUgdG8gdGhlIGNvcm5lciBvZiB0aGUgZ2x5cGhcXG4gIHBvc2l0aW9uVmVjNC54eSArPSB1R2x5cGhSZWN0Lnh5O1xcblxcbiAgLy8gbW92ZSB0byB0aGUgbGV0dGVyJ3MgbGluZSBvZmZzZXRcXG4gIHBvc2l0aW9uVmVjNC54ICs9IHVHbHlwaE9mZnNldDtcXG4gIFxcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuICB2VGV4Q29vcmQgPSBhVGV4Q29vcmQ7XFxuICB3ID0gZ2xfUG9zaXRpb24udztcXG59XFxuXCIsZm9udEZyYWc6XCIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbiNpZiAwXFxuICAvLyBzaW11bGF0ZSBpbnRlZ2VyIG1hdGggdXNpbmcgZmxvYXRzXFxuXFx0I2RlZmluZSBpbnQgZmxvYXRcXG5cXHQjZGVmaW5lIGl2ZWMyIHZlYzJcXG5cXHQjZGVmaW5lIElOVCh4KSBmbG9hdCh4KVxcblxcblxcdGludCBpZmxvb3IoZmxvYXQgdikgeyByZXR1cm4gZmxvb3Iodik7IH1cXG5cXHRpdmVjMiBpZmxvb3IodmVjMiB2KSB7IHJldHVybiBmbG9vcih2KTsgfVxcblxcbiNlbHNlXFxuICAvLyB1c2UgbmF0aXZlIGludGVnZXIgbWF0aFxcblxcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcXG5cXHQjZGVmaW5lIElOVCh4KSB4XFxuXFxuXFx0aW50IGlmbG9vcihmbG9hdCB2KSB7IHJldHVybiBpbnQodik7IH1cXG5cXHRpbnQgaWZsb29yKGludCB2KSB7IHJldHVybiB2OyB9XFxuXFx0aXZlYzIgaWZsb29yKHZlYzIgdikgeyByZXR1cm4gaXZlYzIodik7IH1cXG5cXG4jZW5kaWZcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlclN0cm9rZXM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJSb3dTdHJva2VzO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyUm93cztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlckNvbFN0cm9rZXM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJDb2xzO1xcblxcbnVuaWZvcm0gaXZlYzIgdVN0cm9rZUltYWdlU2l6ZTtcXG51bmlmb3JtIGl2ZWMyIHVDZWxsc0ltYWdlU2l6ZTtcXG51bmlmb3JtIGl2ZWMyIHVHcmlkSW1hZ2VTaXplO1xcblxcbnVuaWZvcm0gaXZlYzIgdUdyaWRPZmZzZXQ7XFxudW5pZm9ybSBpdmVjMiB1R3JpZFNpemU7XFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxuXFxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zXFxuaW50IHJvdW5kKGZsb2F0IHYpIHsgcmV0dXJuIGlmbG9vcih2ICsgMC41KTsgfVxcbml2ZWMyIHJvdW5kKHZlYzIgdikgeyByZXR1cm4gaWZsb29yKHYgKyAwLjUpOyB9XFxuZmxvYXQgc2F0dXJhdGUoZmxvYXQgdikgeyByZXR1cm4gY2xhbXAodiwgMC4wLCAxLjApOyB9XFxudmVjMiBzYXR1cmF0ZSh2ZWMyIHYpIHsgcmV0dXJuIGNsYW1wKHYsIDAuMCwgMS4wKTsgfVxcblxcbmludCBtdWwoZmxvYXQgdjEsIGludCB2Mikge1xcbiAgcmV0dXJuIGlmbG9vcih2MSAqIGZsb2F0KHYyKSk7XFxufVxcblxcbml2ZWMyIG11bCh2ZWMyIHYxLCBpdmVjMiB2Mikge1xcbiAgcmV0dXJuIGlmbG9vcih2MSAqIHZlYzIodjIpICsgMC41KTtcXG59XFxuXFxuLy8gdW5wYWNrIGEgMTYtYml0IGludGVnZXIgZnJvbSBhIGZsb2F0IHZlYzJcXG5pbnQgZ2V0SW50MTYodmVjMiB2KSB7XFxuICBpdmVjMiBpdiA9IHJvdW5kKHYgKiAyNTUuMCk7XFxuICByZXR1cm4gaXYueCAqIElOVCgxMjgpICsgaXYueTtcXG59XFxuXFxudmVjMiBwaXhlbFNjYWxlO1xcbnZlYzIgY292ZXJhZ2UgPSB2ZWMyKDAuMCk7XFxudmVjMiB3ZWlnaHQgPSB2ZWMyKDAuNSk7XFxuY29uc3QgZmxvYXQgbWluRGlzdGFuY2UgPSAxLjAvODE5Mi4wO1xcbmNvbnN0IGZsb2F0IGhhcmRuZXNzID0gMS4wNTsgLy8gYW1vdW50IG9mIGFudGlhbGlhc1xcblxcbi8vIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjdXJ2ZXMgaW4gYSBnbHlwaFxcbmNvbnN0IGludCBOID0gSU5UKDI1MCk7XFxuXFxuLy8gcmV0cmlldmVzIGFuIGluZGV4ZWQgcGl4ZWwgZnJvbSBhIHNhbXBsZXJcXG52ZWM0IGdldFRleGVsKHNhbXBsZXIyRCBzYW1wbGVyLCBpbnQgcG9zLCBpdmVjMiBzaXplKSB7XFxuICBpbnQgd2lkdGggPSBzaXplLng7XFxuICBpbnQgeSA9IGlmbG9vcihwb3MgLyB3aWR0aCk7XFxuICBpbnQgeCA9IHBvcyAtIHkgKiB3aWR0aDsgIC8vIHBvcyAlIHdpZHRoXFxuXFxuICByZXR1cm4gdGV4dHVyZTJEKHNhbXBsZXIsICh2ZWMyKHgsIHkpICsgMC41KSAvIHZlYzIoc2l6ZSkpO1xcbn1cXG5cXG52b2lkIGNhbHVsYXRlQ3Jvc3NpbmdzKHZlYzIgcDAsIHZlYzIgcDEsIHZlYzIgcDIsIG91dCB2ZWMyIEMxLCBvdXQgdmVjMiBDMikge1xcblxcbiAgLy8gZ2V0IHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIHF1YWRyYXRpYyBpbiB0XFxuICB2ZWMyIGEgPSBwMCAtIHAxICogMi4wICsgcDI7XFxuICB2ZWMyIGIgPSBwMCAtIHAxO1xcbiAgdmVjMiBjID0gcDAgLSB2VGV4Q29vcmQ7XFxuXFxuICAvLyBmb3VuZCBvdXQgd2hpY2ggdmFsdWVzIG9mICd0JyBpdCBjcm9zc2VzIHRoZSBheGVzXFxuICB2ZWMyIHN1cmQgPSBzcXJ0KG1heCh2ZWMyKDAuMCksIGIgKiBiIC0gYSAqIGMpKTtcXG4gIHZlYzIgdDEgPSAoKGIgLSBzdXJkKSAvIGEpLnl4O1xcbiAgdmVjMiB0MiA9ICgoYiArIHN1cmQpIC8gYSkueXg7XFxuXFxuICAvLyBhcHByb3hpbWF0ZSBzdHJhaWdodCBsaW5lcyB0byBhdm9pZCByb3VuZGluZyBlcnJvcnNcXG4gIGlmIChhYnMoYS55KSA8IDAuMDAxKVxcbiAgICB0MS54ID0gdDIueCA9IGMueSAvICgyLjAgKiBiLnkpO1xcblxcbiAgaWYgKGFicyhhLngpIDwgMC4wMDEpXFxuICAgIHQxLnkgPSB0Mi55ID0gYy54IC8gKDIuMCAqIGIueCk7XFxuXFxuICAvLyBwbHVnIGludG8gcXVhZHJhdGljIGZvcm11bGEgdG8gZmluZCB0aGUgY29ycmRpbmF0ZXMgb2YgdGhlIGNyb3NzaW5nc1xcbiAgQzEgPSAoKGEgKiB0MSAtIGIgKiAyLjApICogdDEgKyBjKSAqIHBpeGVsU2NhbGU7XFxuICBDMiA9ICgoYSAqIHQyIC0gYiAqIDIuMCkgKiB0MiArIGMpICogcGl4ZWxTY2FsZTtcXG59XFxuXFxudm9pZCBjb3ZlcmFnZVgodmVjMiBwMCwgdmVjMiBwMSwgdmVjMiBwMikge1xcblxcbiAgdmVjMiBDMSwgQzI7XFxuICBjYWx1bGF0ZUNyb3NzaW5ncyhwMCwgcDEsIHAyLCBDMSwgQzIpO1xcblxcbiAgLy8gZGV0ZXJtaW5lIG9uIHdoaWNoIHNpZGUgb2YgdGhlIHgtYXhpcyB0aGUgcG9pbnRzIGxpZVxcbiAgYm9vbCB5MCA9IHAwLnkgPiB2VGV4Q29vcmQueTtcXG4gIGJvb2wgeTEgPSBwMS55ID4gdlRleENvb3JkLnk7XFxuICBib29sIHkyID0gcDIueSA+IHZUZXhDb29yZC55O1xcblxcbiAgLy8gY291bGQgd2ViIGJlIHVuZGVyIHRoZSBjdXJ2ZSAoYWZ0ZXIgdDEpP1xcbiAgaWYgKHkxID8gIXkyIDogeTApIHtcXG4gICAgLy8gYWRkIHRoZSBjb3ZlcmFnZSBmb3IgdDFcXG4gICAgY292ZXJhZ2UueCArPSBzYXR1cmF0ZShDMS54ICsgMC41KTtcXG4gICAgLy8gY2FsY3VsYXRlIHRoZSBhbnRpLWFsaWFzaW5nIGZvciB0MVxcbiAgICB3ZWlnaHQueCA9IG1pbih3ZWlnaHQueCwgYWJzKEMxLngpKTtcXG4gIH1cXG5cXG4gIC8vIGFyZSB3ZSBvdXRzaWRlIHRoZSBjdXJ2ZSAoYWZ0ZXIgdDIpP1xcbiAgaWYgKHkxID8gIXkwIDogeTIpIHtcXG4gICAgLy8gc3VidHJhY3QgdGhlIGNvdmVyYWdlIGZvciB0MlxcbiAgICBjb3ZlcmFnZS54IC09IHNhdHVyYXRlKEMyLnggKyAwLjUpO1xcbiAgICAvLyBjYWxjdWxhdGUgdGhlIGFudGktYWxpYXNpbmcgZm9yIHQyXFxuICAgIHdlaWdodC54ID0gbWluKHdlaWdodC54LCBhYnMoQzIueCkpO1xcbiAgfVxcbn1cXG5cXG4vLyB0aGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIGNvdmVyYWdlWCwgYnV0IHdpdGggdGhlIGF4ZXMgc3dhcHBlZFxcbnZvaWQgY292ZXJhZ2VZKHZlYzIgcDAsIHZlYzIgcDEsIHZlYzIgcDIpIHtcXG5cXG4gIHZlYzIgQzEsIEMyO1xcbiAgY2FsdWxhdGVDcm9zc2luZ3MocDAsIHAxLCBwMiwgQzEsIEMyKTtcXG5cXG4gIGJvb2wgeDAgPSBwMC54ID4gdlRleENvb3JkLng7XFxuICBib29sIHgxID0gcDEueCA+IHZUZXhDb29yZC54O1xcbiAgYm9vbCB4MiA9IHAyLnggPiB2VGV4Q29vcmQueDtcXG5cXG4gIGlmICh4MSA/ICF4MiA6IHgwKSB7XFxuICAgIGNvdmVyYWdlLnkgLT0gc2F0dXJhdGUoQzEueSArIDAuNSk7XFxuICAgIHdlaWdodC55ID0gbWluKHdlaWdodC55LCBhYnMoQzEueSkpO1xcbiAgfVxcblxcbiAgaWYgKHgxID8gIXgwIDogeDIpIHtcXG4gICAgY292ZXJhZ2UueSArPSBzYXR1cmF0ZShDMi55ICsgMC41KTtcXG4gICAgd2VpZ2h0LnkgPSBtaW4od2VpZ2h0LnksIGFicyhDMi55KSk7XFxuICB9XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG5cXG4gIC8vIGNhbGN1bGF0ZSB0aGUgcGl4ZWwgc2NhbGUgYmFzZWQgb24gc2NyZWVuLWNvb3JkaW5hdGVzXFxuICBwaXhlbFNjYWxlID0gaGFyZG5lc3MgLyBmd2lkdGgodlRleENvb3JkKTtcXG5cXG4gIC8vIHdoaWNoIGdyaWQgY2VsbCBpcyB0aGlzIHBpeGVsIGluP1xcbiAgaXZlYzIgZ3JpZENvb3JkID0gaWZsb29yKHZUZXhDb29yZCAqIHZlYzIodUdyaWRTaXplKSk7XFxuXFxuICAvLyBpbnRlcnNlY3QgY3VydmVzIGluIHRoaXMgcm93XFxuICB7XFxuICAgIC8vIHRoZSBpbmRleCBpbnRvIHRoZSByb3cgaW5mbyBiaXRtYXBcXG4gICAgaW50IHJvd0luZGV4ID0gZ3JpZENvb3JkLnkgKyB1R3JpZE9mZnNldC55O1xcbiAgICAvLyBmZXRjaCB0aGUgaW5mbyB0ZXhlbFxcbiAgICB2ZWM0IHJvd0luZm8gPSBnZXRUZXhlbCh1U2FtcGxlclJvd3MsIHJvd0luZGV4LCB1R3JpZEltYWdlU2l6ZSk7XFxuICAgIC8vIHVucGFjayB0aGUgcm93SW5mb1xcbiAgICBpbnQgcm93U3Ryb2tlSW5kZXggPSBnZXRJbnQxNihyb3dJbmZvLnh5KTtcXG4gICAgaW50IHJvd1N0cm9rZUNvdW50ID0gZ2V0SW50MTYocm93SW5mby56dyk7XFxuXFxuICAgIGZvciAoaW50IGlSb3dTdHJva2UgPSBJTlQoMCk7IGlSb3dTdHJva2UgPCBOOyBpUm93U3Ryb2tlKyspIHtcXG4gICAgICBpZiAoaVJvd1N0cm9rZSA+PSByb3dTdHJva2VDb3VudClcXG4gICAgICAgIGJyZWFrO1xcblxcbiAgICAgIC8vIGVhY2ggc3Ryb2tlIGlzIG1hZGUgdXAgb2YgMyBwb2ludHM6IHRoZSBzdGFydCBhbmQgY29udHJvbCBwb2ludFxcbiAgICAgIC8vIGFuZCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY3VydmUuXFxuICAgICAgLy8gZmV0Y2ggdGhlIGluZGljZXMgb2YgdGhpcyBwYWlyIG9mIHN0cm9rZXM6XFxuICAgICAgdmVjNCBzdHJva2VJbmRpY2VzID0gZ2V0VGV4ZWwodVNhbXBsZXJSb3dTdHJva2VzLCByb3dTdHJva2VJbmRleCsrLCB1Q2VsbHNJbWFnZVNpemUpO1xcblxcbiAgICAgIC8vIHVucGFjayB0aGUgc3Ryb2tlIGluZGV4XFxuICAgICAgaW50IHN0cm9rZVBvcyA9IGdldEludDE2KHN0cm9rZUluZGljZXMueHkpO1xcblxcbiAgICAgIC8vIGZldGNoIHRoZSB0d28gc3Ryb2tlc1xcbiAgICAgIHZlYzQgc3Ryb2tlMCA9IGdldFRleGVsKHVTYW1wbGVyU3Ryb2tlcywgc3Ryb2tlUG9zICsgSU5UKDApLCB1U3Ryb2tlSW1hZ2VTaXplKTtcXG4gICAgICB2ZWM0IHN0cm9rZTEgPSBnZXRUZXhlbCh1U2FtcGxlclN0cm9rZXMsIHN0cm9rZVBvcyArIElOVCgxKSwgdVN0cm9rZUltYWdlU2l6ZSk7XFxuXFxuICAgICAgLy8gY2FsY3VsYXRlIHRoZSBjb3ZlcmFnZVxcbiAgICAgIGNvdmVyYWdlWChzdHJva2UwLnh5LCBzdHJva2UwLnp3LCBzdHJva2UxLnh5KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLy8gaW50ZXJzZWN0IGN1cnZlcyBpbiB0aGlzIGNvbHVtblxcbiAge1xcbiAgICBpbnQgY29sSW5kZXggPSBncmlkQ29vcmQueCArIHVHcmlkT2Zmc2V0Lng7XFxuICAgIHZlYzQgY29sSW5mbyA9IGdldFRleGVsKHVTYW1wbGVyQ29scywgY29sSW5kZXgsIHVHcmlkSW1hZ2VTaXplKTtcXG4gICAgaW50IGNvbFN0cm9rZUluZGV4ID0gZ2V0SW50MTYoY29sSW5mby54eSk7XFxuICAgIGludCBjb2xTdHJva2VDb3VudCA9IGdldEludDE2KGNvbEluZm8uencpO1xcbiAgICBcXG4gICAgZm9yIChpbnQgaUNvbFN0cm9rZSA9IElOVCgwKTsgaUNvbFN0cm9rZSA8IE47IGlDb2xTdHJva2UrKykge1xcbiAgICAgIGlmIChpQ29sU3Ryb2tlID49IGNvbFN0cm9rZUNvdW50KVxcbiAgICAgICAgYnJlYWs7XFxuXFxuICAgICAgdmVjNCBzdHJva2VJbmRpY2VzID0gZ2V0VGV4ZWwodVNhbXBsZXJDb2xTdHJva2VzLCBjb2xTdHJva2VJbmRleCsrLCB1Q2VsbHNJbWFnZVNpemUpO1xcblxcbiAgICAgIGludCBzdHJva2VQb3MgPSBnZXRJbnQxNihzdHJva2VJbmRpY2VzLnh5KTtcXG4gICAgICB2ZWM0IHN0cm9rZTAgPSBnZXRUZXhlbCh1U2FtcGxlclN0cm9rZXMsIHN0cm9rZVBvcyArIElOVCgwKSwgdVN0cm9rZUltYWdlU2l6ZSk7XFxuICAgICAgdmVjNCBzdHJva2UxID0gZ2V0VGV4ZWwodVNhbXBsZXJTdHJva2VzLCBzdHJva2VQb3MgKyBJTlQoMSksIHVTdHJva2VJbWFnZVNpemUpO1xcbiAgICAgIGNvdmVyYWdlWShzdHJva2UwLnh5LCBzdHJva2UwLnp3LCBzdHJva2UxLnh5KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgd2VpZ2h0ID0gc2F0dXJhdGUoMS4wIC0gd2VpZ2h0ICogMi4wKTtcXG4gIGZsb2F0IGRpc3RhbmNlID0gbWF4KHdlaWdodC54ICsgd2VpZ2h0LnksIG1pbkRpc3RhbmNlKTsgLy8gbWFuaGF0dGFuIGFwcHJveC5cXG4gIGZsb2F0IGFudGlhbGlhcyA9IGFicyhkb3QoY292ZXJhZ2UsIHdlaWdodCkgLyBkaXN0YW5jZSk7XFxuICBmbG9hdCBjb3ZlciA9IG1pbihhYnMoY292ZXJhZ2UueCksIGFicyhjb3ZlcmFnZS55KSk7XFxuICBnbF9GcmFnQ29sb3IgPSB1TWF0ZXJpYWxDb2xvcjtcXG4gIGdsX0ZyYWdDb2xvci5hICo9IHNhdHVyYXRlKG1heChhbnRpYWxpYXMsIGNvdmVyKSk7XFxufVwiLGxpbmVWZXJ0OlwiLypcXG4gIFBhcnQgb2YgdGhlIFByb2Nlc3NpbmcgcHJvamVjdCAtIGh0dHA6Ly9wcm9jZXNzaW5nLm9yZ1xcbiAgQ29weXJpZ2h0IChjKSAyMDEyLTE1IFRoZSBQcm9jZXNzaW5nIEZvdW5kYXRpb25cXG4gIENvcHlyaWdodCAoYykgMjAwNC0xMiBCZW4gRnJ5IGFuZCBDYXNleSBSZWFzXFxuICBDb3B5cmlnaHQgKGMpIDIwMDEtMDQgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neVxcbiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxcbiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xcbiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLjEuXFxuICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcXG4gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXFxuICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxcbiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cXG4gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbFxcbiAgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlXFxuICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLFxcbiAgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBXFxuKi9cXG5cXG4jZGVmaW5lIFBST0NFU1NJTkdfTElORV9TSEFERVJcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBmbG9hdCB1U3Ryb2tlV2VpZ2h0O1xcblxcbnVuaWZvcm0gdmVjNCB1Vmlld3BvcnQ7XFxuXFxuLy8gdXNpbmcgYSBzY2FsZSA8MSBtb3ZlcyB0aGUgbGluZXMgdG93YXJkcyB0aGUgY2FtZXJhXFxuLy8gaW4gb3JkZXIgdG8gcHJldmVudCBwb3BwaW5nIGVmZmVjdHMgZHVlIHRvIGhhbGYgb2ZcXG4vLyB0aGUgbGluZSBkaXNhcHBlYXJpbmcgYmVoaW5kIHRoZSBnZW9tZXRyeSBmYWNlcy5cXG52ZWMzIHNjYWxlID0gdmVjMygwLjk5OTUpO1xcblxcbmF0dHJpYnV0ZSB2ZWM0IGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBhRGlyZWN0aW9uO1xcbiAgXFxudm9pZCBtYWluKCkge1xcbiAgdmVjNCBwb3NwID0gdU1vZGVsVmlld01hdHJpeCAqIGFQb3NpdGlvbjtcXG4gIHZlYzQgcG9zcSA9IHVNb2RlbFZpZXdNYXRyaXggKiAoYVBvc2l0aW9uICsgdmVjNChhRGlyZWN0aW9uLnh5eiwgMCkpO1xcblxcbiAgLy8gTW92aW5nIHZlcnRpY2VzIHNsaWdodGx5IHRvd2FyZCB0aGUgY2FtZXJhXFxuICAvLyB0byBhdm9pZCBkZXB0aC1maWdodGluZyB3aXRoIHRoZSBmaWxsIHRyaWFuZ2xlcy5cXG4gIC8vIERpc2N1c3NlZCBoZXJlOlxcbiAgLy8gaHR0cDovL3d3dy5vcGVuZ2wub3JnL2Rpc2N1c3Npb25fYm9hcmRzL3ViYnRocmVhZHMucGhwP3ViYj1zaG93ZmxhdCZOdW1iZXI9MjUyODQ4ICBcXG4gIHBvc3AueHl6ID0gcG9zcC54eXogKiBzY2FsZTtcXG4gIHBvc3EueHl6ID0gcG9zcS54eXogKiBzY2FsZTtcXG5cXG4gIHZlYzQgcCA9IHVQcm9qZWN0aW9uTWF0cml4ICogcG9zcDtcXG4gIHZlYzQgcSA9IHVQcm9qZWN0aW9uTWF0cml4ICogcG9zcTtcXG5cXG4gIC8vIGZvcm11bGEgdG8gY29udmVydCBmcm9tIGNsaXAgc3BhY2UgKHJhbmdlIC0xLi4xKSB0byBzY3JlZW4gc3BhY2UgKHJhbmdlIDAuLlt3aWR0aCBvciBoZWlnaHRdKVxcbiAgLy8gc2NyZWVuX3AgPSAocC54eS9wLncgKyA8MSwxPikgKiAwLjUgKiB1Vmlld3BvcnQuendcXG5cXG4gIC8vIHByZXZlbnQgZGl2aXNpb24gYnkgVyBieSB0cmFuc2Zvcm1pbmcgdGhlIHRhbmdlbnQgZm9ybXVsYSAoZGl2IGJ5IDAgY2F1c2VzXFxuICAvLyB0aGUgbGluZSB0byBkaXNhcHBlYXIsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvY2Vzc2luZy9wcm9jZXNzaW5nL2lzc3Vlcy81MTgzKVxcbiAgLy8gdCA9IHNjcmVlbl9xIC0gc2NyZWVuX3BcXG4gIC8vXFxuICAvLyB0YW5nZW50IGlzIG5vcm1hbGl6ZWQgYW5kIHdlIGRvbid0IGNhcmUgd2hpY2ggYURpcmVjdGlvbiBpdCBwb2ludHMgdG8gKCstKVxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggc2NyZWVuX3EgLSBzY3JlZW5fcCApXFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCAocS54eS9xLncrPDEsMT4pKjAuNSp1Vmlld3BvcnQuencgLSAocC54eS9wLncrPDEsMT4pKjAuNSp1Vmlld3BvcnQuencgKVxcbiAgLy9cXG4gIC8vIGV4dHJhY3QgY29tbW9uIGZhY3RvciwgPDEsMT4gLSA8MSwxPiBjYW5jZWxzIG91dFxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKHEueHkvcS53IC0gcC54eS9wLncpICogMC41ICogdVZpZXdwb3J0Lnp3IClcXG4gIC8vXFxuICAvLyBjb252ZXJ0IHRvIGNvbW1vbiBkaXZpc29yXFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCAoKHEueHkqcC53IC0gcC54eSpxLncpIC8gKHAudypxLncpKSAqIDAuNSAqIHVWaWV3cG9ydC56dyApXFxuICAvL1xcbiAgLy8gcmVtb3ZlIHRoZSBjb21tb24gc2NhbGFyIGRpdmlzb3IvZmFjdG9yLCBub3QgbmVlZGVkIGR1ZSB0byBub3JtYWxpemUgYW5kICstXFxuICAvLyAoa2VlcCB1Vmlld3BvcnQgLSBjYW4ndCByZW1vdmUgYmVjYXVzZSBpdCBoYXMgZGlmZmVyZW50IGNvbXBvbmVudHMgZm9yIHggYW5kIHlcXG4gIC8vICBhbmQgY29ycmVjdHMgZm9yIGFzcGVjdCByYXRpbywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9jZXNzaW5nL3Byb2Nlc3NpbmcvaXNzdWVzLzUxODEpXFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCAocS54eSpwLncgLSBwLnh5KnEudykgKiB1Vmlld3BvcnQuencgKVxcblxcbiAgdmVjMiB0YW5nZW50ID0gbm9ybWFsaXplKChxLnh5KnAudyAtIHAueHkqcS53KSAqIHVWaWV3cG9ydC56dyk7XFxuXFxuICAvLyBmbGlwIHRhbmdlbnQgdG8gbm9ybWFsIChpdCdzIGFscmVhZHkgbm9ybWFsaXplZClcXG4gIHZlYzIgbm9ybWFsID0gdmVjMigtdGFuZ2VudC55LCB0YW5nZW50LngpO1xcblxcbiAgZmxvYXQgdGhpY2tuZXNzID0gYURpcmVjdGlvbi53ICogdVN0cm9rZVdlaWdodDtcXG4gIHZlYzIgb2Zmc2V0ID0gbm9ybWFsICogdGhpY2tuZXNzIC8gMi4wO1xcblxcbiAgLy8gUGVyc3BlY3RpdmUgLS0tXFxuICAvLyBjb252ZXJ0IGZyb20gd29ybGQgdG8gY2xpcCBieSBtdWx0aXBseWluZyB3aXRoIHByb2plY3Rpb24gc2NhbGluZyBmYWN0b3JcXG4gIC8vIHRvIGdldCB0aGUgcmlnaHQgdGhpY2tuZXNzIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb2Nlc3NpbmcvcHJvY2Vzc2luZy9pc3N1ZXMvNTE4MilcXG4gIC8vIGludmVydCBZLCBwcm9qZWN0aW9ucyBpbiBQcm9jZXNzaW5nIGludmVydCBZXFxuICB2ZWMyIHBlcnNwU2NhbGUgPSAodVByb2plY3Rpb25NYXRyaXggKiB2ZWM0KDEsIC0xLCAwLCAwKSkueHk7XFxuXFxuICAvLyBObyBQZXJzcGVjdGl2ZSAtLS1cXG4gIC8vIG11bHRpcGx5IGJ5IFcgKHRvIGNhbmNlbCBvdXQgZGl2aXNpb24gYnkgVyBsYXRlciBpbiB0aGUgcGlwZWxpbmUpIGFuZFxcbiAgLy8gY29udmVydCBmcm9tIHNjcmVlbiB0byBjbGlwIChkZXJpdmVkIGZyb20gY2xpcCB0byBzY3JlZW4gYWJvdmUpXFxuICB2ZWMyIG5vUGVyc3BTY2FsZSA9IHAudyAvICgwLjUgKiB1Vmlld3BvcnQuencpO1xcblxcbiAgLy9nbF9Qb3NpdGlvbi54eSA9IHAueHkgKyBvZmZzZXQueHkgKiBtaXgobm9QZXJzcFNjYWxlLCBwZXJzcFNjYWxlLCBmbG9hdChwZXJzcGVjdGl2ZSA+IDApKTtcXG4gIGdsX1Bvc2l0aW9uLnh5ID0gcC54eSArIG9mZnNldC54eSAqIHBlcnNwU2NhbGU7XFxuICBnbF9Qb3NpdGlvbi56dyA9IHAuenc7XFxufVxcblwiLGxpbmVGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxucHJlY2lzaW9uIG1lZGl1bXAgaW50O1xcblxcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB1TWF0ZXJpYWxDb2xvcjtcXG59XCIscG9pbnRWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbnVuaWZvcm0gZmxvYXQgdVBvaW50U2l6ZTtcXG52YXJ5aW5nIGZsb2F0IHZTdHJva2VXZWlnaHQ7XFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnZvaWQgbWFpbigpIHtcXG5cXHR2ZWM0IHBvc2l0aW9uVmVjNCA9ICB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG5cXHRnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG5cXHRnbF9Qb2ludFNpemUgPSB1UG9pbnRTaXplO1xcblxcdHZTdHJva2VXZWlnaHQgPSB1UG9pbnRTaXplO1xcbn1cIixwb2ludEZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5wcmVjaXNpb24gbWVkaXVtcCBpbnQ7XFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcbnZhcnlpbmcgZmxvYXQgdlN0cm9rZVdlaWdodDtcXG5cXG52b2lkIG1haW4oKXtcXG5cXHRmbG9hdCBtYXNrID0gMC4wO1xcblxcblxcdC8vIG1ha2UgYSBjaXJjdWxhciBtYXNrIHVzaW5nIHRoZSBnbF9Qb2ludENvb3JkIChnb2VzIGZyb20gMCAtIDEgb24gYSBwb2ludClcXG4gICAgLy8gbWlnaHQgYmUgYWJsZSB0byBnZXQgYSBuaWNlciBlZGdlIG9uIGJpZyBzdHJva2V3ZWlnaHRzIHdpdGggc21vb3Roc3RlcCBidXQgc2xpZ2h0bHkgbGVzcyBwZXJmb3JtYW50XFxuXFxuXFx0bWFzayA9IHN0ZXAoMC45OCwgbGVuZ3RoKGdsX1BvaW50Q29vcmQgKiAyLjAgLSAxLjApKTtcXG5cXG5cXHQvLyBpZiBzdHJva2VXZWlnaHQgaXMgMSBvciBsZXNzIGxldHMganVzdCBkcmF3IGEgc3F1YXJlXFxuXFx0Ly8gdGhpcyBwcmV2ZW50cyB3ZWlyZCBhcnRpZmFjdGluZyBmcm9tIGNhcnZpbmcgY2lyY2xlcyB3aGVuIG91ciBwb2ludHMgYXJlIHJlYWxseSBzbWFsbFxcblxcdC8vIGlmIHN0cm9rZVdlaWdodCBpcyBsYXJnZXIgdGhhbiAxLCB3ZSBqdXN0IHVzZSBpdCBhcyBpc1xcblxcblxcdG1hc2sgPSBtaXgoMC4wLCBtYXNrLCBjbGFtcChmbG9vcih2U3Ryb2tlV2VpZ2h0IC0gMC41KSwwLjAsMS4wKSk7XFxuXFxuXFx0Ly8gdGhyb3cgYXdheSB0aGUgYm9yZGVycyBvZiB0aGUgbWFza1xcbiAgICAvLyBvdGhlcndpc2Ugd2UgZ2V0IHdlaXJkIGFscGhhIGJsZW5kaW5nIGlzc3Vlc1xcblxcblxcdGlmKG1hc2sgPiAwLjk4KXtcXG4gICAgICBkaXNjYXJkO1xcbiAgXFx0fVxcblxcbiAgXFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCh1TWF0ZXJpYWxDb2xvci5yZ2IgKiAoMS4wIC0gbWFzayksIHVNYXRlcmlhbENvbG9yLmEpIDtcXG59XCJ9O2QuUmVuZGVyZXJHTD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gZC5SZW5kZXJlci5jYWxsKHRoaXMsYSxiLGMpLHRoaXMuYXR0cmlidXRlcz17fSxlPWV8fHt9LHRoaXMuYXR0cmlidXRlcy5hbHBoYT12b2lkIDA9PT1lLmFscGhhfHxlLmFscGhhLHRoaXMuYXR0cmlidXRlcy5kZXB0aD12b2lkIDA9PT1lLmRlcHRofHxlLmRlcHRoLHRoaXMuYXR0cmlidXRlcy5zdGVuY2lsPXZvaWQgMD09PWUuc3RlbmNpbHx8ZS5zdGVuY2lsLHRoaXMuYXR0cmlidXRlcy5hbnRpYWxpYXM9dm9pZCAwIT09ZS5hbnRpYWxpYXMmJmUuYW50aWFsaWFzLHRoaXMuYXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGE9dm9pZCAwIT09ZS5wcmVtdWx0aXBsaWVkQWxwaGEmJmUucHJlbXVsdGlwbGllZEFscGhhLHRoaXMuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9dm9pZCAwPT09ZS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJ8fGUucHJlc2VydmVEcmF3aW5nQnVmZmVyLHRoaXMuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nPXZvaWQgMCE9PWUucGVyUGl4ZWxMaWdodGluZyYmZS5wZXJQaXhlbExpZ2h0aW5nLHRoaXMuX2luaXRDb250ZXh0KCksdGhpcy5pc1AzRD0hMCx0aGlzLkdMPXRoaXMuZHJhd2luZ0NvbnRleHQsdGhpcy5hbWJpZW50TGlnaHRDb2xvcnM9W10sdGhpcy5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucz1bXSx0aGlzLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnM9W10sdGhpcy5wb2ludExpZ2h0UG9zaXRpb25zPVtdLHRoaXMucG9pbnRMaWdodENvbG9ycz1bXSx0aGlzLnVNVk1hdHJpeD1uZXcgZC5NYXRyaXgsdGhpcy51UE1hdHJpeD1uZXcgZC5NYXRyaXgsdGhpcy51Tk1hdHJpeD1uZXcgZC5NYXRyaXgoXCJtYXQzXCIpLHRoaXMuX2N1ckNhbWVyYT1uZXcgZC5DYW1lcmEodGhpcyksdGhpcy5fY3VyQ2FtZXJhLl9jb21wdXRlQ2FtZXJhRGVmYXVsdFNldHRpbmdzKCksdGhpcy5fY3VyQ2FtZXJhLl9zZXREZWZhdWx0Q2FtZXJhKCksdGhpcy5nSGFzaD17fSx0aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXI9dm9pZCAwLHRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9ybWFsU2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXI9dm9pZCAwLHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcj12b2lkIDAsdGhpcy5jdXJGaWxsU2hhZGVyPXZvaWQgMCx0aGlzLmN1clN0cm9rZVNoYWRlcj12b2lkIDAsdGhpcy5jdXJQb2ludFNoYWRlcj12b2lkIDAsdGhpcy5fdXNlQ29sb3JTaGFkZXIoKSx0aGlzLnNldFN0cm9rZVNoYWRlcih0aGlzLl9nZXRMaW5lU2hhZGVyKCkpLHRoaXMuX3VzZVBvaW50U2hhZGVyKCksdGhpcy5fcG9pbnRWZXJ0ZXhCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmlzSW1tZWRpYXRlRHJhd2luZz0hMSx0aGlzLmltbWVkaWF0ZU1vZGU9e30sdGhpcy5maWxsKDI1NSwyNTUsMjU1LDI1NSksdGhpcy5wb2ludFNpemU9NSx0aGlzLnN0cm9rZVdlaWdodCgxKSx0aGlzLnN0cm9rZSgwLDAsMCksdGhpcy50ZXh0dXJlcz1bXSx0aGlzLl9jdXJ2ZVRpZ2h0bmVzcz02LHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyPVtdLHRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljPVtdLHRoaXMuX2x1dEJlemllckRldGFpbD0wLHRoaXMuX2x1dFF1YWRyYXRpY0RldGFpbD0wLHRoaXMuX3Rlc3N5PXRoaXMuX2luaXRUZXNzeSgpLHRoaXMuZm9udEluZm9zPXt9LHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlJlbmRlcmVyLnByb3RvdHlwZSksZC5SZW5kZXJlckdMLnByb3RvdHlwZS5faW5pdENvbnRleHQ9ZnVuY3Rpb24oKXt0cnl7aWYodGhpcy5kcmF3aW5nQ29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwid2ViZ2xcIix0aGlzLmF0dHJpYnV0ZXMpfHx0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiZXhwZXJpbWVudGFsLXdlYmdsXCIsdGhpcy5hdHRyaWJ1dGVzKSxudWxsPT09dGhpcy5kcmF3aW5nQ29udGV4dCl0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciBjcmVhdGluZyB3ZWJnbCBjb250ZXh0XCIpO2NvbnNvbGUubG9nKFwicDUuUmVuZGVyZXJHTDogZW5hYmxlZCB3ZWJnbCBjb250ZXh0XCIpO3ZhciBhPXRoaXMuZHJhd2luZ0NvbnRleHQ7YS5lbmFibGUoYS5ERVBUSF9URVNUKSxhLmRlcHRoRnVuYyhhLkxFUVVBTCksYS52aWV3cG9ydCgwLDAsYS5kcmF3aW5nQnVmZmVyV2lkdGgsYS5kcmF3aW5nQnVmZmVySGVpZ2h0KSx0aGlzLl92aWV3cG9ydD10aGlzLmRyYXdpbmdDb250ZXh0LmdldFBhcmFtZXRlcih0aGlzLmRyYXdpbmdDb250ZXh0LlZJRVdQT1JUKX1jYXRjaChhKXt0aHJvdyBhfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fcmVzZXRDb250ZXh0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZT10aGlzLndpZHRoLGY9dGhpcy5oZWlnaHQsZz10aGlzLmNhbnZhcy5pZCxoPXRoaXMuY2FudmFzO2gmJmgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKSxoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksaC5pZD1nLHRoaXMuX3BJbnN0Ll91c2VyTm9kZT90aGlzLl9wSW5zdC5fdXNlck5vZGUuYXBwZW5kQ2hpbGQoaCk6ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSx0aGlzLl9wSW5zdC5jYW52YXM9aDt2YXIgaT1uZXcgZC5SZW5kZXJlckdMKHRoaXMuX3BJbnN0LmNhbnZhcyx0aGlzLl9wSW5zdCwhMCxhKTt0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJfcmVuZGVyZXJcIixpKSxpLnJlc2l6ZShlLGYpLGkuX2FwcGx5RGVmYXVsdHMoKSx0aGlzLl9wSW5zdC5fZWxlbWVudHMucHVzaChpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5hcHBseSh3aW5kb3cuX3JlbmRlcmVyLGIpfSwwKX0sZC5wcm90b3R5cGUuc2V0QXR0cmlidXRlcz1mdW5jdGlvbihhLGIpe3RoaXMuX2Fzc2VydDNkKFwic2V0QXR0cmlidXRlc1wiKTt2YXIgYzt2b2lkIDAhPT1iPyhjPXt9LGNbYV09Yik6YSBpbnN0YW5jZW9mIE9iamVjdCYmKGM9YSksdGhpcy5wdXNoKCksdGhpcy5fcmVuZGVyZXIuX3Jlc2V0Q29udGV4dChjKSx0aGlzLnBvcCgpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLnVNVk1hdHJpeC5zZXQodGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzBdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzNdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs0XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzZdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs3XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzldLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTJdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxM10sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTVdKSx0aGlzLmFtYmllbnRMaWdodENvbG9ycy5sZW5ndGg9MCx0aGlzLmRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25zLmxlbmd0aD0wLHRoaXMuZGlyZWN0aW9uYWxMaWdodENvbG9ycy5sZW5ndGg9MCx0aGlzLnBvaW50TGlnaHRQb3NpdGlvbnMubGVuZ3RoPTAsdGhpcy5wb2ludExpZ2h0Q29sb3JzLmxlbmd0aD0wfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmJhY2tncm91bmQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpLGI9YS5sZXZlbHNbMF0vMjU1LGM9YS5sZXZlbHNbMV0vMjU1LGQ9YS5sZXZlbHNbMl0vMjU1LGU9YS5sZXZlbHNbM10vMjU1O3RoaXMuR0wuY2xlYXJDb2xvcihiLGMsZCxlKSx0aGlzLkdMLmRlcHRoTWFzayghMCksdGhpcy5HTC5jbGVhcih0aGlzLkdMLkNPTE9SX0JVRkZFUl9CSVR8dGhpcy5HTC5ERVBUSF9CVUZGRVJfQklUKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGEsYixjLGYpe3ZhciBnPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyk7dGhpcy5jdXJGaWxsQ29sb3I9Zy5fYXJyYXksdGhpcy5pc0ltbWVkaWF0ZURyYXdpbmc/dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldEltbWVkaWF0ZU1vZGVTaGFkZXIoKSk6dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldENvbG9yU2hhZGVyKCkpLHRoaXMuZHJhd01vZGU9ZS5GSUxMLHRoaXMuY3VyRmlsbFNoYWRlci5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLmN1ckZpbGxDb2xvcil9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc3Ryb2tlPWZ1bmN0aW9uKGEsYixjLGUpe2FyZ3VtZW50c1szXT0yNTU7dmFyIGY9ZC5wcm90b3R5cGUuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKTt0aGlzLmN1clN0cm9rZUNvbG9yPWYuX2FycmF5LHRoaXMuY3VyU3Ryb2tlU2hhZGVyLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuY3VyU3Ryb2tlQ29sb3IpLHRoaXMuY3VyUG9pbnRTaGFkZXIuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsZi5fYXJyYXkpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnN0cm9rZVdlaWdodD1mdW5jdGlvbihhKXt0aGlzLmN1clN0cm9rZVdlaWdodCE9PWEmJih0aGlzLnBvaW50U2l6ZT1hLHRoaXMuY3VyU3Ryb2tlV2VpZ2h0PWEsdGhpcy5jdXJTdHJva2VTaGFkZXIuc2V0VW5pZm9ybShcInVTdHJva2VXZWlnaHRcIixhKSx0aGlzLmN1clBvaW50U2hhZGVyLnNldFVuaWZvcm0oXCJ1UG9pbnRTaXplXCIsYSkpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gZC5SZW5kZXJlcjJELnByb3RvdHlwZS5nZXQuYXBwbHkodGhpcyxbYSxiLGMsZV0pfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmxvYWRQaXhlbHM9ZnVuY3Rpb24oKXtpZighMCE9PXRoaXMuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpcmV0dXJuIHZvaWQgY29uc29sZS5sb2coXCJsb2FkUGl4ZWxzIG9ubHkgd29ya3MgaW4gV2ViR0wgd2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgaXMgdHJ1ZS5cIik7dmFyIGE9dGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSxiPXRoaXMud2lkdGgsYz10aGlzLmhlaWdodDtiKj1hLGMqPWEsdm9pZCAwPT09dGhpcy5waXhlbHMmJih0aGlzLnBpeGVscz1uZXcgVWludDhBcnJheSh0aGlzLkdMLmRyYXdpbmdCdWZmZXJXaWR0aCp0aGlzLkdMLmRyYXdpbmdCdWZmZXJIZWlnaHQqNCkpLHRoaXMuR0wucmVhZFBpeGVscygwLDAsYixjLHRoaXMuR0wuUkdCQSx0aGlzLkdMLlVOU0lHTkVEX0JZVEUsdGhpcy5waXhlbHMpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcInBpeGVsc1wiLHRoaXMucGl4ZWxzKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5nZW9tZXRyeUluSGFzaD1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5nSGFzaFthXX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oYSxiKXtkLlJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLGEsYiksdGhpcy5HTC52aWV3cG9ydCgwLDAsdGhpcy5HTC5kcmF3aW5nQnVmZmVyV2lkdGgsdGhpcy5HTC5kcmF3aW5nQnVmZmVySGVpZ2h0KSx0aGlzLl92aWV3cG9ydD10aGlzLkdMLmdldFBhcmFtZXRlcih0aGlzLkdMLlZJRVdQT1JUKSx0aGlzLl9jdXJDYW1lcmEuX3Jlc2l6ZSgpLHZvaWQgMCE9PXRoaXMucGl4ZWxzJiYodGhpcy5waXhlbHM9bmV3IFVpbnQ4QXJyYXkodGhpcy5HTC5kcmF3aW5nQnVmZmVyV2lkdGgqdGhpcy5HTC5kcmF3aW5nQnVmZmVySGVpZ2h0KjQpKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50c1swXXx8MCxiPWFyZ3VtZW50c1sxXXx8MCxjPWFyZ3VtZW50c1syXXx8MCxkPWFyZ3VtZW50c1szXXx8MDt0aGlzLkdMLmNsZWFyQ29sb3IoYSxiLGMsZCksdGhpcy5HTC5jbGVhcih0aGlzLkdMLkNPTE9SX0JVRkZFUl9CSVR8dGhpcy5HTC5ERVBUSF9CVUZGRVJfQklUKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3ImJihjPWEueixiPWEueSxhPWEueCksdGhpcy51TVZNYXRyaXgudHJhbnNsYXRlKFthLGIsY10pLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLnVNVk1hdHJpeC5zY2FsZShhLGIsYyksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwPT09Yj90aGlzLnJvdGF0ZVooYSk6KGFyZ3VtZW50c1swXT10aGlzLl9wSW5zdC5fZnJvbVJhZGlhbnMoYSksZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZS5hcHBseSh0aGlzLnVNVk1hdHJpeCxhcmd1bWVudHMpLHRoaXMpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm90YXRlKGEsMSwwLDApLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3RhdGUoYSwwLDEsMCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvdGF0ZShhLDAsMCwxKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXt2YXIgYT1kLlJlbmRlcmVyLnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMpLGI9YS5wcm9wZXJ0aWVzO3JldHVybiBiLnVNVk1hdHJpeD10aGlzLnVNVk1hdHJpeC5jb3B5KCksYi51UE1hdHJpeD10aGlzLnVQTWF0cml4LmNvcHkoKSxiLl9jdXJDYW1lcmE9dGhpcy5fY3VyQ2FtZXJhLHRoaXMuX2N1ckNhbWVyYT10aGlzLl9jdXJDYW1lcmEuY29weSgpLGF9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucmVzZXRNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51TVZNYXRyaXg9ZC5NYXRyaXguaWRlbnRpdHkodGhpcy5fcEluc3QpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2V0RmlsbFNoYWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jdXJGaWxsU2hhZGVyIT09YSYmKHRoaXMuY3VyRmlsbFNoYWRlcj1hLHRoaXMuY3VyRmlsbFNoYWRlci5pbml0KCkpLHRoaXMuY3VyRmlsbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zZXRQb2ludFNoYWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jdXJQb2ludFNoYWRlciE9PWEmJih0aGlzLmN1clBvaW50U2hhZGVyPWEsdGhpcy5jdXJQb2ludFNoYWRlci5pbml0KCkpLHRoaXMuY3VyUG9pbnRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2V0U3Ryb2tlU2hhZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmN1clN0cm9rZVNoYWRlciE9PWEmJih0aGlzLmN1clN0cm9rZVNoYWRlcj1hLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmluaXQoKSksdGhpcy5jdXJTdHJva2VTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VzZUxpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciYmdGhpcy5jdXJGaWxsU2hhZGVyLmlzTGlnaHRTaGFkZXIoKXx8dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldExpZ2h0U2hhZGVyKCkpLHRoaXMuY3VyRmlsbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXNlQ29sb3JTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJGaWxsU2hhZGVyJiZ0aGlzLmN1ckZpbGxTaGFkZXIhPT10aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcnx8dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldENvbG9yU2hhZGVyKCkpLHRoaXMuY3VyRmlsbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXNlUG9pbnRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJQb2ludFNoYWRlcnx8dGhpcy5zZXRQb2ludFNoYWRlcih0aGlzLl9nZXRQb2ludFNoYWRlcigpKSx0aGlzLmN1clBvaW50U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91c2VJbW1lZGlhdGVNb2RlU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciYmdGhpcy5jdXJGaWxsU2hhZGVyIT09dGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyfHx0aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0SW1tZWRpYXRlTW9kZVNoYWRlcigpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldExpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRMaWdodFNoYWRlcnx8KHRoaXMuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nP3RoaXMuX2RlZmF1bHRMaWdodFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLnBob25nVmVydCxnLnBob25nRnJhZyk6dGhpcy5fZGVmYXVsdExpZ2h0U2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcubGlnaHRWZXJ0LGcubGlnaHRUZXh0dXJlRnJhZykpLHRoaXMuX2RlZmF1bHRMaWdodFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0SW1tZWRpYXRlTW9kZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcnx8KHRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcuaW1tZWRpYXRlVmVydCxnLnZlcnRleENvbG9yRnJhZykpLHRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXROb3JtYWxTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdE5vcm1hbFNoYWRlcnx8KHRoaXMuX2RlZmF1bHROb3JtYWxTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5ub3JtYWxWZXJ0LGcubm9ybWFsRnJhZykpLHRoaXMuX2RlZmF1bHROb3JtYWxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldENvbG9yU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcnx8KHRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLm5vcm1hbFZlcnQsZy5iYXNpY0ZyYWcpKSx0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldFBvaW50U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcnx8KHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLnBvaW50VmVydCxnLnBvaW50RnJhZykpLHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0TGluZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0TGluZVNoYWRlcnx8KHRoaXMuX2RlZmF1bHRMaW5lU2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcubGluZVZlcnQsZy5saW5lRnJhZykpLHRoaXMuX2RlZmF1bHRMaW5lU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRGb250U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2hhZGVyfHwodGhpcy5HTC5nZXRFeHRlbnNpb24oXCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXNcIiksdGhpcy5fZGVmYXVsdEZvbnRTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5mb250VmVydCxnLmZvbnRGcmFnKSksdGhpcy5fZGVmYXVsdEZvbnRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldEVtcHR5VGV4dHVyZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9lbXB0eVRleHR1cmUpe3ZhciBhPW5ldyBkLkltYWdlKDEsMSk7YS5zZXQoMCwwLDI1NSksdGhpcy5fZW1wdHlUZXh0dXJlPW5ldyBkLlRleHR1cmUodGhpcyxhKX1yZXR1cm4gdGhpcy5fZW1wdHlUZXh0dXJlfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmdldFRleHR1cmU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMudGV4dHVyZXMsYz0wO2M8Yi5sZW5ndGg7KytjKXt2YXIgZT1iW2NdO2lmKGUuc3JjPT09YSlyZXR1cm4gZX12YXIgZj1uZXcgZC5UZXh0dXJlKHRoaXMsYSk7cmV0dXJuIHRoaXMudGV4dHVyZXMucHVzaChmKSxmfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9iaW5kQnVmZmVyPWZ1bmN0aW9uKGEsYixjLGQsZSl7aWYodGhpcy5HTC5iaW5kQnVmZmVyKGIsYSksdm9pZCAwIT09Yyl7dmFyIGY9bmV3IGQoYyk7dGhpcy5HTC5idWZmZXJEYXRhKGIsZixlKX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc21vb3RoPWZ1bmN0aW9uKCl7ITE9PT10aGlzLmF0dHJpYnV0ZXMuYW50aWFsaWFzJiZ0aGlzLl9wSW5zdC5zZXRBdHRyaWJ1dGVzKFwiYW50aWFsaWFzXCIsITApfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLm5vU21vb3RoPWZ1bmN0aW9uKCl7ITA9PT10aGlzLmF0dHJpYnV0ZXMuYW50aWFsaWFzJiZ0aGlzLl9wSW5zdC5zZXRBdHRyaWJ1dGVzKFwiYW50aWFsaWFzXCIsITEpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9mbGF0dGVuPWZ1bmN0aW9uKGEpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm5bXTtpZihhLmxlbmd0aD4yZTQpe3ZhciBiLGM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxkPVwiW29iamVjdCBBcnJheV1cIixlPVtdLGY9YS5zbGljZSgpO2I9Zi5wb3AoKTtkb3tjLmNhbGwoYik9PT1kP2YucHVzaC5hcHBseShmLGIpOmUucHVzaChiKX13aGlsZShmLmxlbmd0aCYmdm9pZCAwIT09KGI9Zi5wb3AoKSkpO3JldHVybiBlLnJldmVyc2UoKSxlfXJldHVybltdLmNvbmNhdC5hcHBseShbXSxhKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdlRvTkFycmF5PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9mbGF0dGVuKGEubWFwKGZ1bmN0aW9uKGEpe3JldHVyblthLngsYS55LGEuel19KSl9LGQucHJvdG90eXBlLl9hc3NlcnQzZD1mdW5jdGlvbihhKXtpZighdGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhyb3cgbmV3IEVycm9yKGErXCIoKSBpcyBvbmx5IHN1cHBvcnRlZCBpbiBXRUJHTCBtb2RlLiBJZiB5b3UnZCBsaWtlIHRvIHVzZSAzRCBncmFwaGljcyBhbmQgV2ViR0wsIHNlZSAgaHR0cHM6Ly9wNWpzLm9yZy9leGFtcGxlcy9mb3JtLTNkLXByaW1pdGl2ZXMuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIil9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2luaXRUZXNzeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtiW2IubGVuZ3RoXT1hWzBdLGJbYi5sZW5ndGhdPWFbMV0sYltiLmxlbmd0aF09YVsyXX1mdW5jdGlvbiBiKGEpe2EhPT1mLnByaW1pdGl2ZVR5cGUuR0xfVFJJQU5HTEVTJiZjb25zb2xlLmxvZyhcImV4cGVjdGVkIFRSSUFOR0xFUyBidXQgZ290IHR5cGU6IFwiK2EpfWZ1bmN0aW9uIGMoYSl7Y29uc29sZS5sb2coXCJlcnJvciBjYWxsYmFja1wiKSxjb25zb2xlLmxvZyhcImVycm9yIG51bWJlcjogXCIrYSl9ZnVuY3Rpb24gZChhLGIsYyl7cmV0dXJuW2FbMF0sYVsxXSxhWzJdXX1mdW5jdGlvbiBlKGEpe312YXIgZz1uZXcgZi5HbHVUZXNzZWxhdG9yO3JldHVybiBnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfVkVSVEVYX0RBVEEsYSksZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX0JFR0lOLGIpLGcuZ2x1VGVzc0NhbGxiYWNrKGYuZ2x1RW51bS5HTFVfVEVTU19FUlJPUixjKSxnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfQ09NQklORSxkKSxnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfRURHRV9GTEFHLGUpLGd9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3RyaWFuZ3VsYXRlPWZ1bmN0aW9uKGEpe3RoaXMuX3Rlc3N5LmdsdVRlc3NOb3JtYWwoMCwwLDEpO3ZhciBiPVtdO3RoaXMuX3Rlc3N5LmdsdVRlc3NCZWdpblBvbHlnb24oYik7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3RoaXMuX3Rlc3N5LmdsdVRlc3NCZWdpbkNvbnRvdXIoKTtmb3IodmFyIGQ9YVtjXSxlPTA7ZTxkLmxlbmd0aDtlKz0zKXt2YXIgZj1bZFtlXSxkW2UrMV0sZFtlKzJdXTt0aGlzLl90ZXNzeS5nbHVUZXNzVmVydGV4KGYsZil9dGhpcy5fdGVzc3kuZ2x1VGVzc0VuZENvbnRvdXIoKX1yZXR1cm4gdGhpcy5fdGVzc3kuZ2x1VGVzc0VuZFBvbHlnb24oKSxifSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9iZXppZXJDb2VmZmljaWVudHM9ZnVuY3Rpb24oYSl7dmFyIGI9YSphLGM9YiphLGQ9MS1hLGU9ZCpkO3JldHVybltlKmQsMyplKmEsMypkKmIsY119LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3F1YWRyYXRpY0NvZWZmaWNpZW50cz1mdW5jdGlvbihhKXt2YXIgYj1hKmEsYz0xLWE7cmV0dXJuW2MqYywyKmMqYSxiXX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fYmV6aWVyVG9DYXRtdWxsPWZ1bmN0aW9uKGEpe3JldHVyblthWzFdLGFbMV0rKGFbMl0tYVswXSkvdGhpcy5fY3VydmVUaWdodG5lc3MsYVsyXS0oYVszXS1hWzFdKS90aGlzLl9jdXJ2ZVRpZ2h0bmVzcyxhWzJdXX0sYi5leHBvcnRzPWQuUmVuZGVyZXJHTH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi4vY29yZS9wNS5SZW5kZXJlclwiOjI3LFwiLi9wNS5DYW1lcmFcIjo2OSxcIi4vcDUuTWF0cml4XCI6NzEsXCIuL3A1LlNoYWRlclwiOjc1LGxpYnRlc3M6OX1dLDc1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlNoYWRlcj1mdW5jdGlvbihhLGIsYyl7dGhpcy5fcmVuZGVyZXI9YSx0aGlzLl92ZXJ0U3JjPWIsdGhpcy5fZnJhZ1NyYz1jLHRoaXMuX3ZlcnRTaGFkZXI9LTEsdGhpcy5fZnJhZ1NoYWRlcj0tMSx0aGlzLl9nbFByb2dyYW09MCx0aGlzLl9sb2FkZWRBdHRyaWJ1dGVzPSExLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLl9sb2FkZWRVbmlmb3Jtcz0hMSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMuX2JvdW5kPSExLHRoaXMuc2FtcGxlcnM9W119LGQuU2hhZGVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuX2dsUHJvZ3JhbSl7dmFyIGE9dGhpcy5fcmVuZGVyZXIuR0w7aWYodGhpcy5fdmVydFNoYWRlcj1hLmNyZWF0ZVNoYWRlcihhLlZFUlRFWF9TSEFERVIpLGEuc2hhZGVyU291cmNlKHRoaXMuX3ZlcnRTaGFkZXIsdGhpcy5fdmVydFNyYyksYS5jb21waWxlU2hhZGVyKHRoaXMuX3ZlcnRTaGFkZXIpLCFhLmdldFNoYWRlclBhcmFtZXRlcih0aGlzLl92ZXJ0U2hhZGVyLGEuQ09NUElMRV9TVEFUVVMpKXJldHVybiBjb25zb2xlLmVycm9yKFwiWWlrZXMhIEFuIGVycm9yIG9jY3VycmVkIGNvbXBpbGluZyB0aGUgdmVydGV4IHNoYWRlcjpcIithLmdldFNoYWRlckluZm9Mb2codGhpcy5fdmVydFNoYWRlcikpLG51bGw7aWYodGhpcy5fZnJhZ1NoYWRlcj1hLmNyZWF0ZVNoYWRlcihhLkZSQUdNRU5UX1NIQURFUiksYS5zaGFkZXJTb3VyY2UodGhpcy5fZnJhZ1NoYWRlcix0aGlzLl9mcmFnU3JjKSxhLmNvbXBpbGVTaGFkZXIodGhpcy5fZnJhZ1NoYWRlciksIWEuZ2V0U2hhZGVyUGFyYW1ldGVyKHRoaXMuX2ZyYWdTaGFkZXIsYS5DT01QSUxFX1NUQVRVUykpcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJEYXJuISBBbiBlcnJvciBvY2N1cnJlZCBjb21waWxpbmcgdGhlIGZyYWdtZW50IHNoYWRlcjpcIithLmdldFNoYWRlckluZm9Mb2codGhpcy5fZnJhZ1NoYWRlcikpLG51bGw7dGhpcy5fZ2xQcm9ncmFtPWEuY3JlYXRlUHJvZ3JhbSgpLGEuYXR0YWNoU2hhZGVyKHRoaXMuX2dsUHJvZ3JhbSx0aGlzLl92ZXJ0U2hhZGVyKSxhLmF0dGFjaFNoYWRlcih0aGlzLl9nbFByb2dyYW0sdGhpcy5fZnJhZ1NoYWRlciksYS5saW5rUHJvZ3JhbSh0aGlzLl9nbFByb2dyYW0pLGEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLl9nbFByb2dyYW0sYS5MSU5LX1NUQVRVUyl8fGNvbnNvbGUuZXJyb3IoXCJTbmFwISBFcnJvciBsaW5raW5nIHNoYWRlciBwcm9ncmFtOiBcIithLmdldFByb2dyYW1JbmZvTG9nKHRoaXMuX2dsUHJvZ3JhbSkpLHRoaXMuX2xvYWRBdHRyaWJ1dGVzKCksdGhpcy5fbG9hZFVuaWZvcm1zKCl9cmV0dXJuIHRoaXN9LGQuU2hhZGVyLnByb3RvdHlwZS5fbG9hZEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkQXR0cmlidXRlcyl7dGhpcy5hdHRyaWJ1dGVzPXt9O2Zvcih2YXIgYT10aGlzLl9yZW5kZXJlci5HTCxiPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLl9nbFByb2dyYW0sYS5BQ1RJVkVfQVRUUklCVVRFUyksYz0wO2M8YjsrK2Mpe3ZhciBkPWEuZ2V0QWN0aXZlQXR0cmliKHRoaXMuX2dsUHJvZ3JhbSxjKSxlPWQubmFtZSxmPWEuZ2V0QXR0cmliTG9jYXRpb24odGhpcy5fZ2xQcm9ncmFtLGUpLGc9e307Zy5uYW1lPWUsZy5sb2NhdGlvbj1mLGcudHlwZT1kLnR5cGUsZy5zaXplPWQuc2l6ZSx0aGlzLmF0dHJpYnV0ZXNbZV09Z310aGlzLl9sb2FkZWRBdHRyaWJ1dGVzPSEwfX0sZC5TaGFkZXIucHJvdG90eXBlLl9sb2FkVW5pZm9ybXM9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkVW5pZm9ybXMpe2Zvcih2YXIgYT10aGlzLl9yZW5kZXJlci5HTCxiPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLl9nbFByb2dyYW0sYS5BQ1RJVkVfVU5JRk9STVMpLGM9MCxkPTA7ZDxiOysrZCl7dmFyIGU9YS5nZXRBY3RpdmVVbmlmb3JtKHRoaXMuX2dsUHJvZ3JhbSxkKSxmPXt9O2YubG9jYXRpb249YS5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5fZ2xQcm9ncmFtLGUubmFtZSksZi5zaXplPWUuc2l6ZTt2YXIgZz1lLm5hbWU7ZS5zaXplPjEmJihnPWcuc3Vic3RyaW5nKDAsZy5pbmRleE9mKFwiWzBdXCIpKSksZi5uYW1lPWcsZi50eXBlPWUudHlwZSxmLnR5cGU9PT1hLlNBTVBMRVJfMkQmJihmLnNhbXBsZXJJbmRleD1jLGMrKyx0aGlzLnNhbXBsZXJzLnB1c2goZikpLHRoaXMudW5pZm9ybXNbZ109Zn10aGlzLl9sb2FkZWRVbmlmb3Jtcz0hMH19LGQuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlPWZ1bmN0aW9uKCl7fSxkLlNoYWRlci5wcm90b3R5cGUuYmluZFNoYWRlcj1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuX2JvdW5kfHwodGhpcy51c2VQcm9ncmFtKCksdGhpcy5fYm91bmQ9ITAsdGhpcy5iaW5kVGV4dHVyZXMoKSx0aGlzLl9zZXRNYXRyaXhVbmlmb3JtcygpLHRoaXM9PT10aGlzLl9yZW5kZXJlci5jdXJTdHJva2VTaGFkZXImJnRoaXMuX3NldFZpZXdwb3J0VW5pZm9ybSgpKX0sZC5TaGFkZXIucHJvdG90eXBlLnVuYmluZFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib3VuZCYmKHRoaXMudW5iaW5kVGV4dHVyZXMoKSx0aGlzLl9ib3VuZD0hMSksdGhpc30sZC5TaGFkZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlcz1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9yZW5kZXJlci5HTCxiPTA7Yjx0aGlzLnNhbXBsZXJzLmxlbmd0aDtiKyspe3ZhciBjPXRoaXMuc2FtcGxlcnNbYl0sZD1jLnRleHR1cmU7dm9pZCAwPT09ZCYmKGQ9dGhpcy5fcmVuZGVyZXIuX2dldEVtcHR5VGV4dHVyZSgpKSxhLmFjdGl2ZVRleHR1cmUoYS5URVhUVVJFMCtjLnNhbXBsZXJJbmRleCksZC5iaW5kVGV4dHVyZSgpLGQudXBkYXRlKCksYS51bmlmb3JtMWkoYy5sb2NhdGlvbixjLnNhbXBsZXJJbmRleCl9fSxkLlNoYWRlci5wcm90b3R5cGUudXBkYXRlVGV4dHVyZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPHRoaXMuc2FtcGxlcnMubGVuZ3RoO2ErKyl7dmFyIGI9dGhpcy5zYW1wbGVyc1thXSxjPWIudGV4dHVyZTtjJiZjLnVwZGF0ZSgpfX0sZC5TaGFkZXIucHJvdG90eXBlLnVuYmluZFRleHR1cmVzPWZ1bmN0aW9uKCl7fSxkLlNoYWRlci5wcm90b3R5cGUuX3NldE1hdHJpeFVuaWZvcm1zPWZ1bmN0aW9uKCl7dGhpcy5zZXRVbmlmb3JtKFwidVByb2plY3Rpb25NYXRyaXhcIix0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5tYXQ0KSx0aGlzLnNldFVuaWZvcm0oXCJ1TW9kZWxWaWV3TWF0cml4XCIsdGhpcy5fcmVuZGVyZXIudU1WTWF0cml4Lm1hdDQpLHRoaXMuc2V0VW5pZm9ybShcInVWaWV3TWF0cml4XCIsdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NCksdGhpcz09PXRoaXMuX3JlbmRlcmVyLmN1ckZpbGxTaGFkZXImJih0aGlzLl9yZW5kZXJlci51Tk1hdHJpeC5pbnZlcnNlVHJhbnNwb3NlKHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeCksdGhpcy5zZXRVbmlmb3JtKFwidU5vcm1hbE1hdHJpeFwiLHRoaXMuX3JlbmRlcmVyLnVOTWF0cml4Lm1hdDMpKX0sZC5TaGFkZXIucHJvdG90eXBlLl9zZXRWaWV3cG9ydFVuaWZvcm09ZnVuY3Rpb24oKXt0aGlzLnNldFVuaWZvcm0oXCJ1Vmlld3BvcnRcIix0aGlzLl9yZW5kZXJlci5fdmlld3BvcnQpfSxkLlNoYWRlci5wcm90b3R5cGUudXNlUHJvZ3JhbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5HTC51c2VQcm9ncmFtKHRoaXMuX2dsUHJvZ3JhbSksdGhpc30sZC5TaGFkZXIucHJvdG90eXBlLnNldFVuaWZvcm09ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLnVuaWZvcm1zW2FdO2lmKGMpe3ZhciBkPWMubG9jYXRpb24sZT10aGlzLl9yZW5kZXJlci5HTDtzd2l0Y2godGhpcy51c2VQcm9ncmFtKCksYy50eXBlKXtjYXNlIGUuQk9PTDohMD09PWI/ZS51bmlmb3JtMWkoZCwxKTplLnVuaWZvcm0xaShkLDApO2JyZWFrO2Nhc2UgZS5JTlQ6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTFpdihkLGIpOmUudW5pZm9ybTFpKGQsYik7YnJlYWs7Y2FzZSBlLkZMT0FUOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0xZnYoZCxiKTplLnVuaWZvcm0xZihkLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVF9NQVQzOmUudW5pZm9ybU1hdHJpeDNmdihkLCExLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVF9NQVQ0OmUudW5pZm9ybU1hdHJpeDRmdihkLCExLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVF9WRUMyOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0yZnYoZCxiKTplLnVuaWZvcm0yZihkLGJbMF0sYlsxXSk7YnJlYWs7Y2FzZSBlLkZMT0FUX1ZFQzM6XG5jLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtM2Z2KGQsYik6ZS51bmlmb3JtM2YoZCxiWzBdLGJbMV0sYlsyXSk7YnJlYWs7Y2FzZSBlLkZMT0FUX1ZFQzQ6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTRmdihkLGIpOmUudW5pZm9ybTRmKGQsYlswXSxiWzFdLGJbMl0sYlszXSk7YnJlYWs7Y2FzZSBlLklOVF9WRUMyOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0yaXYoZCxiKTplLnVuaWZvcm0yaShkLGJbMF0sYlsxXSk7YnJlYWs7Y2FzZSBlLklOVF9WRUMzOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0zaXYoZCxiKTplLnVuaWZvcm0zaShkLGJbMF0sYlsxXSxiWzJdKTticmVhaztjYXNlIGUuSU5UX1ZFQzQ6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTRpdihkLGIpOmUudW5pZm9ybTRpKGQsYlswXSxiWzFdLGJbMl0sYlszXSk7YnJlYWs7Y2FzZSBlLlNBTVBMRVJfMkQ6ZS5hY3RpdmVUZXh0dXJlKGUuVEVYVFVSRTArYy5zYW1wbGVySW5kZXgpLGMudGV4dHVyZT10aGlzLl9yZW5kZXJlci5nZXRUZXh0dXJlKGIpLGUudW5pZm9ybTFpKGMubG9jYXRpb24sYy5zYW1wbGVySW5kZXgpfXJldHVybiB0aGlzfX0sZC5TaGFkZXIucHJvdG90eXBlLmlzTGlnaHRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy51bmlmb3Jtcy51VXNlTGlnaHRpbmd8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudUFtYmllbnRMaWdodENvdW50fHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVEaXJlY3Rpb25hbExpZ2h0Q291bnR8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVBvaW50TGlnaHRDb3VudHx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51QW1iaWVudENvbG9yfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVEaXJlY3Rpb25hbENvbG9yfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVQb2ludExpZ2h0TG9jYXRpb258fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVBvaW50TGlnaHRDb2xvcnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51TGlnaHRpbmdEaXJlY3Rpb258fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVNwZWN1bGFyfSxkLlNoYWRlci5wcm90b3R5cGUuaXNUZXh0dXJlU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2FtcGxlckluZGV4PjB9LGQuU2hhZGVyLnByb3RvdHlwZS5pc0NvbG9yU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuYXR0cmlidXRlcy5hVmVydGV4Q29sb3J8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudU1hdGVyaWFsQ29sb3J9LGQuU2hhZGVyLnByb3RvdHlwZS5pc1RleExpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNMaWdodFNoYWRlcigpJiZ0aGlzLmlzVGV4dHVyZVNoYWRlcigpfSxkLlNoYWRlci5wcm90b3R5cGUuaXNTdHJva2VTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy51bmlmb3Jtcy51U3Ryb2tlV2VpZ2h0fSxkLlNoYWRlci5wcm90b3R5cGUuZW5hYmxlQXR0cmliPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz10aGlzLl9yZW5kZXJlci5HTDtyZXR1cm4tMSE9PWEmJihnLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGEpLGcudmVydGV4QXR0cmliUG9pbnRlcihhLGIsYyxkLGUsZikpLHRoaXN9LGIuZXhwb3J0cz1kLlNoYWRlcn0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5UZXh0dXJlPWZ1bmN0aW9uKGEsYil7dGhpcy5fcmVuZGVyZXI9YTt2YXIgYz10aGlzLl9yZW5kZXJlci5HTDt0aGlzLnNyYz1iLHRoaXMuZ2xUZXg9dm9pZCAwLHRoaXMuZ2xUYXJnZXQ9Yy5URVhUVVJFXzJELHRoaXMuZ2xGb3JtYXQ9Yy5SR0JBLHRoaXMubWlwbWFwcz0hMSx0aGlzLmdsTWluRmlsdGVyPWMuTElORUFSLHRoaXMuZ2xNYWdGaWx0ZXI9Yy5MSU5FQVIsdGhpcy5nbFdyYXBTPWMuQ0xBTVBfVE9fRURHRSx0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFLHRoaXMuaXNTcmNNZWRpYUVsZW1lbnQ9dm9pZCAwIT09ZC5NZWRpYUVsZW1lbnQmJmIgaW5zdGFuY2VvZiBkLk1lZGlhRWxlbWVudCx0aGlzLl92aWRlb1ByZXZVcGRhdGVUaW1lPTAsdGhpcy5pc1NyY0hUTUxFbGVtZW50PXZvaWQgMCE9PWQuRWxlbWVudCYmYiBpbnN0YW5jZW9mIGQuRWxlbWVudCYmIShiIGluc3RhbmNlb2YgZC5HcmFwaGljcyksdGhpcy5pc1NyY1A1SW1hZ2U9YiBpbnN0YW5jZW9mIGQuSW1hZ2UsdGhpcy5pc1NyY1A1R3JhcGhpY3M9YiBpbnN0YW5jZW9mIGQuR3JhcGhpY3MsdGhpcy5pc0ltYWdlRGF0YT1cInVuZGVmaW5lZFwiIT10eXBlb2YgSW1hZ2VEYXRhJiZiIGluc3RhbmNlb2YgSW1hZ2VEYXRhO3ZhciBlPXRoaXMuX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZSgpO3JldHVybiB0aGlzLndpZHRoPWUud2lkdGgsdGhpcy5oZWlnaHQ9ZS5oZWlnaHQsdGhpcy5pbml0KGUpLHRoaXN9LGQuVGV4dHVyZS5wcm90b3R5cGUuX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZT1mdW5jdGlvbigpe3ZhciBhO3JldHVybiB0aGlzLmlzU3JjUDVJbWFnZT9hPXRoaXMuc3JjLmNhbnZhczp0aGlzLmlzU3JjTWVkaWFFbGVtZW50fHx0aGlzLmlzU3JjUDVHcmFwaGljc3x8dGhpcy5pc1NyY0hUTUxFbGVtZW50P2E9dGhpcy5zcmMuZWx0OnRoaXMuaXNJbWFnZURhdGEmJihhPXRoaXMuc3JjKSxhfSxkLlRleHR1cmUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fcmVuZGVyZXIuR0w7aWYodGhpcy5nbFRleD1iLmNyZWF0ZVRleHR1cmUoKSx0aGlzLmJpbmRUZXh0dXJlKCksYi50ZXhQYXJhbWV0ZXJpKGIuVEVYVFVSRV8yRCxiLlRFWFRVUkVfTUFHX0ZJTFRFUix0aGlzLmdsTWFnRmlsdGVyKSxiLnRleFBhcmFtZXRlcmkoYi5URVhUVVJFXzJELGIuVEVYVFVSRV9NSU5fRklMVEVSLHRoaXMuZ2xNaW5GaWx0ZXIpLGIudGV4UGFyYW1ldGVyaShiLlRFWFRVUkVfMkQsYi5URVhUVVJFX1dSQVBfUyx0aGlzLmdsV3JhcFMpLGIudGV4UGFyYW1ldGVyaShiLlRFWFRVUkVfMkQsYi5URVhUVVJFX1dSQVBfVCx0aGlzLmdsV3JhcFQpLDA9PT10aGlzLndpZHRofHwwPT09dGhpcy5oZWlnaHR8fHRoaXMuaXNTcmNNZWRpYUVsZW1lbnQmJiF0aGlzLnNyYy5sb2FkZWRtZXRhZGF0YSl7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoWzEsMSwxLDFdKTtiLnRleEltYWdlMkQodGhpcy5nbFRhcmdldCwwLGIuUkdCQSwxLDEsMCx0aGlzLmdsRm9ybWF0LGIuVU5TSUdORURfQllURSxjKX1lbHNlIGIudGV4SW1hZ2UyRCh0aGlzLmdsVGFyZ2V0LDAsdGhpcy5nbEZvcm1hdCx0aGlzLmdsRm9ybWF0LGIuVU5TSUdORURfQllURSxhKX0sZC5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNyYztpZigwPT09YS53aWR0aHx8MD09PWEuaGVpZ2h0KXJldHVybiExO3ZhciBiPXRoaXMuX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZSgpLGM9ITEsZD10aGlzLl9yZW5kZXJlci5HTDtyZXR1cm4gYi53aWR0aCE9PXRoaXMud2lkdGh8fGIuaGVpZ2h0IT09dGhpcy5oZWlnaHQ/KGM9ITAsdGhpcy53aWR0aD1iLndpZHRoLHRoaXMuaGVpZ2h0PWIuaGVpZ2h0LHRoaXMuaXNTcmNQNUltYWdlP2Euc2V0TW9kaWZpZWQoITEpOih0aGlzLmlzU3JjTWVkaWFFbGVtZW50fHx0aGlzLmlzU3JjSFRNTEVsZW1lbnQpJiZhLnNldE1vZGlmaWVkKCEwKSk6dGhpcy5pc1NyY1A1SW1hZ2U/YS5pc01vZGlmaWVkKCkmJihjPSEwLGEuc2V0TW9kaWZpZWQoITEpKTp0aGlzLmlzU3JjTWVkaWFFbGVtZW50P2EuaXNNb2RpZmllZCgpPyhjPSEwLGEuc2V0TW9kaWZpZWQoITEpKTphLmxvYWRlZG1ldGFkYXRhJiZ0aGlzLl92aWRlb1ByZXZVcGRhdGVUaW1lIT09YS50aW1lKCkmJih0aGlzLl92aWRlb1ByZXZVcGRhdGVUaW1lPWEudGltZSgpLGM9ITApOnRoaXMuaXNJbWFnZURhdGE/YS5fZGlydHkmJihhLl9kaXJ0eT0hMSxjPSEwKTpjPSEwLGMmJih0aGlzLmJpbmRUZXh0dXJlKCksZC50ZXhJbWFnZTJEKHRoaXMuZ2xUYXJnZXQsMCx0aGlzLmdsRm9ybWF0LHRoaXMuZ2xGb3JtYXQsZC5VTlNJR05FRF9CWVRFLGIpKSxjfSxkLlRleHR1cmUucHJvdG90eXBlLmJpbmRUZXh0dXJlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLkdMLmJpbmRUZXh0dXJlKHRoaXMuZ2xUYXJnZXQsdGhpcy5nbFRleCksdGhpc30sZC5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmRUZXh0dXJlPWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuR0wuYmluZFRleHR1cmUodGhpcy5nbFRhcmdldCxudWxsKX0sZC5UZXh0dXJlLnByb3RvdHlwZS5zZXRJbnRlcnBvbGF0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fcmVuZGVyZXIuR0w7YT09PWUuTkVBUkVTVD90aGlzLmdsTWluRmlsdGVyPWMuTkVBUkVTVDp0aGlzLmdsTWluRmlsdGVyPWMuTElORUFSLGI9PT1lLk5FQVJFU1Q/dGhpcy5nbE1hZ0ZpbHRlcj1jLk5FQVJFU1Q6dGhpcy5nbE1hZ0ZpbHRlcj1jLkxJTkVBUix0aGlzLmJpbmRUZXh0dXJlKCksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfTUlOX0ZJTFRFUix0aGlzLmdsTWluRmlsdGVyKSxjLnRleFBhcmFtZXRlcmkoYy5URVhUVVJFXzJELGMuVEVYVFVSRV9NQUdfRklMVEVSLHRoaXMuZ2xNYWdGaWx0ZXIpLHRoaXMudW5iaW5kVGV4dHVyZSgpfSxkLlRleHR1cmUucHJvdG90eXBlLnNldFdyYXBNb2RlPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fcmVuZGVyZXIuR0wsZD1mdW5jdGlvbihhKXtyZXR1cm4gMD09KGEmYS0xKX0sZj1kKHRoaXMud2lkdGgpLGc9ZCh0aGlzLndpZHRoKTthPT09ZS5SRVBFQVQ/ZiYmZz90aGlzLmdsV3JhcFM9Yy5SRVBFQVQ6KGNvbnNvbGUud2FybihcIllvdSB0cmllZCB0byBzZXQgdGhlIHdyYXAgbW9kZSB0byBSRVBFQVQgYnV0IHRoZSB0ZXh0dXJlIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgdHdvLiBTZXR0aW5nIHRvIENMQU1QIGluc3RlYWRcIiksdGhpcy5nbFdyYXBTPWMuQ0xBTVBfVE9fRURHRSk6YT09PWUuTUlSUk9SP2YmJmc/dGhpcy5nbFdyYXBTPWMuTUlSUk9SRURfUkVQRUFUOihjb25zb2xlLndhcm4oXCJZb3UgdHJpZWQgdG8gc2V0IHRoZSB3cmFwIG1vZGUgdG8gTUlSUk9SIGJ1dCB0aGUgdGV4dHVyZSBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIHR3by4gU2V0dGluZyB0byBDTEFNUCBpbnN0ZWFkXCIpLHRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UpOnRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UsYj09PWUuUkVQRUFUP2YmJmc/dGhpcy5nbFdyYXBUPWMuUkVQRUFUOihjb25zb2xlLndhcm4oXCJZb3UgdHJpZWQgdG8gc2V0IHRoZSB3cmFwIG1vZGUgdG8gUkVQRUFUIGJ1dCB0aGUgdGV4dHVyZSBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIHR3by4gU2V0dGluZyB0byBDTEFNUCBpbnN0ZWFkXCIpLHRoaXMuZ2xXcmFwVD1jLkNMQU1QX1RPX0VER0UpOmI9PT1lLk1JUlJPUj9mJiZnP3RoaXMuZ2xXcmFwVD1jLk1JUlJPUkVEX1JFUEVBVDooY29uc29sZS53YXJuKFwiWW91IHRyaWVkIHRvIHNldCB0aGUgd3JhcCBtb2RlIHRvIE1JUlJPUiBidXQgdGhlIHRleHR1cmUgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uIFNldHRpbmcgdG8gQ0xBTVAgaW5zdGVhZFwiKSx0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFKTp0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFLHRoaXMuYmluZFRleHR1cmUoKSxjLnRleFBhcmFtZXRlcmkoYy5URVhUVVJFXzJELGMuVEVYVFVSRV9XUkFQX1MsdGhpcy5nbFdyYXBTKSxjLnRleFBhcmFtZXRlcmkoYy5URVhUVVJFXzJELGMuVEVYVFVSRV9XUkFQX1QsdGhpcy5nbFdyYXBUKSx0aGlzLnVuYmluZFRleHR1cmUoKX0sYi5leHBvcnRzPWQuVGV4dHVyZX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7dGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5pbmZvcz1bXSx0aGlzLmZpbmRJbWFnZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLndpZHRoKnRoaXMuaGVpZ2h0O2lmKGE+Yil0aHJvdyBuZXcgRXJyb3IoXCJmb250IGlzIHRvbyBjb21wbGV4IHRvIHJlbmRlciBpbiAzRFwiKTtmb3IodmFyIGMsZCxlPXRoaXMuaW5mb3MubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBmPXRoaXMuaW5mb3NbZV07aWYoZi5pbmRleCthPGIpe2M9ZixkPWYuaW1hZ2VEYXRhO2JyZWFrfX1pZighYyl7dHJ5e2Q9bmV3IEltYWdlRGF0YSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX1jYXRjaChhKXt2YXIgZz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNhbnZhc1wiKVswXSxoPSFnO2d8fChnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksZy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZykpO3ZhciBpPWcuZ2V0Q29udGV4dChcIjJkXCIpO2kmJihkPWkuY3JlYXRlSW1hZ2VEYXRhKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKSxoJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGcpfWM9e2luZGV4OjAsaW1hZ2VEYXRhOmR9LHRoaXMuaW5mb3MucHVzaChjKX12YXIgaj1jLmluZGV4O3JldHVybiBjLmluZGV4Kz1hLGQuX2RpcnR5PSEwLHtpbWFnZURhdGE6ZCxpbmRleDpqfX19ZnVuY3Rpb24gZShhLGIsYyxkLGUpe3ZhciBmPWEuaW1hZ2VEYXRhLGc9Zi5kYXRhLGg9NCphLmluZGV4Kys7Z1toKytdPWIsZ1toKytdPWMsZ1toKytdPWQsZ1toKytdPWV9dmFyIGY9YShcIi4uL2NvcmUvbWFpblwiKSxnPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi9wNS5TaGFkZXJcIiksYShcIi4vcDUuUmVuZGVyZXJHTFwiKSxmLlJlbmRlcmVyR0wucHJvdG90eXBlLl9hcHBseVRleHRQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7fSxmLlJlbmRlcmVyR0wucHJvdG90eXBlLnRleHRXaWR0aD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5faXNPcGVuVHlwZSgpP3RoaXMuX3RleHRGb250Ll90ZXh0V2lkdGgoYSx0aGlzLl90ZXh0U2l6ZSk6MH07dmFyIGg9OSxpPWgsaj02NCxrPTY0LGw9NjQsbT02NCxuPTY0LG89NjQscD1NYXRoLnNxcnQoMykscT1mdW5jdGlvbihhKXt0aGlzLmZvbnQ9YSx0aGlzLnN0cm9rZUltYWdlSW5mb3M9bmV3IGQoaixrKSx0aGlzLmNvbERpbUltYWdlSW5mb3M9bmV3IGQobCxtKSx0aGlzLnJvd0RpbUltYWdlSW5mb3M9bmV3IGQobCxtKSx0aGlzLmNvbENlbGxJbWFnZUluZm9zPW5ldyBkKG4sbyksdGhpcy5yb3dDZWxsSW1hZ2VJbmZvcz1uZXcgZChuLG8pLHRoaXMuZ2x5cGhJbmZvcz17fSx0aGlzLmdldEdseXBoSW5mbz1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYixjKXtmdW5jdGlvbiBkKGEsYixjKXtmb3IodmFyIGQ9YS5sZW5ndGg7ZC0tID4wOyl7dmFyIGU9YVtkXTtiPmUmJihiPWUpLGM8ZSYmKGM9ZSl9cmV0dXJue21pbjpiLG1heDpjfX12YXIgZT13Lmxlbmd0aDt3LnB1c2goYyk7Zm9yKHZhciBmPWQoYSwxLDApLGc9TWF0aC5tYXgoTWF0aC5mbG9vcihmLm1pbipoKSwwKSxqPU1hdGgubWluKE1hdGguY2VpbChmLm1heCpoKSxoKSxrPWc7azxqOysrayl5W2tdLnB1c2goZSk7Zm9yKHZhciBsPWQoYiwxLDApLG09TWF0aC5tYXgoTWF0aC5mbG9vcihsLm1pbippKSwwKSxuPU1hdGgubWluKE1hdGguY2VpbChsLm1heCppKSxpKSxvPW07bzxuOysrbyl4W29dLnB1c2goZSl9ZnVuY3Rpb24gYyhhLGIsYyl7cmV0dXJuIGE8Yj9iOmE+Yz9jOmF9ZnVuY3Rpb24gZChhKXtyZXR1cm4gYygyNTUqYSwwLDI1NSl9ZnVuY3Rpb24gZyhhLGIsYyxkKXt0aGlzLnAwPWEsdGhpcy5jMD1iLHRoaXMuYzE9Yyx0aGlzLnAxPWQsdGhpcy50b1F1YWRyYXRpYz1mdW5jdGlvbigpe3JldHVybnt4OnRoaXMucDAueCx5OnRoaXMucDAueSx4MTp0aGlzLnAxLngseTE6dGhpcy5wMS55LGN4OigzKih0aGlzLmMwLngrdGhpcy5jMS54KS0odGhpcy5wMC54K3RoaXMucDEueCkpLzQsY3k6KDMqKHRoaXMuYzAueSt0aGlzLmMxLnkpLSh0aGlzLnAwLnkrdGhpcy5wMS55KSkvNH19LHRoaXMucXVhZEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIGYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIodGhpcy5wMSx0aGlzLnAwKSxmLlZlY3Rvci5tdWx0KGYuVmVjdG9yLnN1Yih0aGlzLmMxLHRoaXMuYzApLDMpKS5tYWcoKS8yfSx0aGlzLnNwbGl0PWZ1bmN0aW9uKGEpe3ZhciBiPWYuVmVjdG9yLmxlcnAodGhpcy5wMCx0aGlzLmMwLGEpLGM9Zi5WZWN0b3IubGVycCh0aGlzLmMwLHRoaXMuYzEsYSksZD1mLlZlY3Rvci5sZXJwKGIsYyxhKTt0aGlzLmMxPWYuVmVjdG9yLmxlcnAodGhpcy5jMSx0aGlzLnAxLGEpLHRoaXMuYzA9Zi5WZWN0b3IubGVycChjLHRoaXMuYzEsYSk7dmFyIGU9Zi5WZWN0b3IubGVycChkLHRoaXMuYzAsYSksaD1uZXcgZyh0aGlzLnAwLGIsZCxlKTtyZXR1cm4gdGhpcy5wMD1lLGh9LHRoaXMuc3BsaXRJbmZsZWN0aW9ucz1mdW5jdGlvbigpe3ZhciBhPWYuVmVjdG9yLnN1Yih0aGlzLmMwLHRoaXMucDApLGI9Zi5WZWN0b3Iuc3ViKGYuVmVjdG9yLnN1Yih0aGlzLmMxLHRoaXMuYzApLGEpLGM9Zi5WZWN0b3Iuc3ViKGYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIodGhpcy5wMSx0aGlzLmMxKSxhKSxmLlZlY3Rvci5tdWx0KGIsMikpLGQ9W10sZT1iLngqYy55LWIueSpjLng7aWYoMCE9PWUpe3ZhciBnPWEueCpjLnktYS55KmMueCxoPWEueCpiLnktYS55KmIueCxpPWcqZy00KmUqaDtpZihpPj0wKXtlPDAmJihlPS1lLGc9LWcsaD0taCk7dmFyIGo9TWF0aC5zcXJ0KGkpLGs9KC1nLWopLygyKmUpLGw9KC1nK2opLygyKmUpO2s+MCYmazwxJiYoZC5wdXNoKHRoaXMuc3BsaXQoaykpLGw9MS0oMS1sKS8oMS1rKSksbD4wJiZsPDEmJmQucHVzaCh0aGlzLnNwbGl0KGwpKX19cmV0dXJuIGQucHVzaCh0aGlzKSxkfX1mdW5jdGlvbiBqKGEsYixjLGQsZSxoLGksail7Zm9yKHZhciBrPW5ldyBnKG5ldyBmLlZlY3RvcihhLGIpLG5ldyBmLlZlY3RvcihjLGQpLG5ldyBmLlZlY3RvcihlLGgpLG5ldyBmLlZlY3RvcihpLGopKS5zcGxpdEluZmxlY3Rpb25zKCksbD1bXSxtPTMwL3Asbj0wO248ay5sZW5ndGg7bisrKXtmb3IodmFyIG8scT1rW25dLHI9W107ISgobz1tL3EucXVhZEVycm9yKCkpPj0uMTI1KTspe3ZhciBzPU1hdGgucG93KG8sMS8zKSx0PXEuc3BsaXQocyksdT1xLnNwbGl0KDEtcy8oMS1zKSk7bC5wdXNoKHQpLHIucHVzaChxKSxxPXV9bzwxJiZsLnB1c2gocS5zcGxpdCguNSkpLGwucHVzaChxKSxBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsLHIucmV2ZXJzZSgpKX1yZXR1cm4gbH1mdW5jdGlvbiBrKGEsYyxkLGUpe2IoW2EsZF0sW2MsZV0se3g6YSx5OmMsY3g6KGErZCkvMixjeTooYytlKS8yfSl9ZnVuY3Rpb24gbChhLGIsYyxkKXtyZXR1cm4gTWF0aC5hYnMoYy1hKTwxZS01JiZNYXRoLmFicyhkLWIpPDFlLTV9ZnVuY3Rpb24gbShhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoLGY9Yi5maW5kSW1hZ2UoZCksZz1mLmluZGV4LGg9MCxpPTA7aTxkOysraSloKz1hW2ldLmxlbmd0aDtmb3IodmFyIGo9Yy5maW5kSW1hZ2UoaCksaz0wO2s8ZDsrK2spe3ZhciBsPWFba10sbT1sLmxlbmd0aCxuPWouaW5kZXg7ZShmLG4+PjcsMTI3Jm4sbT4+NywxMjcmbSk7Zm9yKHZhciBvPTA7bzxtOysrbyl7dmFyIHA9bFtvXStTO2UoaixwPj43LDEyNyZwLDAsMCl9fXJldHVybntjZWxsSW1hZ2VJbmZvOmosZGltT2Zmc2V0OmcsZGltSW1hZ2VJbmZvOmZ9fXZhciBuPXRoaXMuZ2x5cGhJbmZvc1thLmluZGV4XTtpZihuKXJldHVybiBuO3ZhciBvPWEuZ2V0Qm91bmRpbmdCb3goKSxxPW8ueDEscj1vLnkxLHM9by54Mi1xLHQ9by55Mi1yLHU9YS5wYXRoLmNvbW1hbmRzO2lmKDA9PT1zfHwwPT09dHx8IXUubGVuZ3RoKXJldHVybiB0aGlzLmdseXBoSW5mb3NbYS5pbmRleF09e307dmFyIHYsdz1bXSx4PVtdLHk9W107Zm9yKHY9aC0xO3Y+PTA7LS12KXkucHVzaChbXSk7Zm9yKHY9aS0xO3Y+PTA7LS12KXgucHVzaChbXSk7Zm9yKHZhciB6LEEsQixDLEQ9MDtEPHUubGVuZ3RoOysrRCl7dmFyIEU9dVtEXSxGPShFLngtcSkvcyxHPShFLnktcikvdDtpZighbCh6LEEsRixHKSl7c3dpdGNoKEUudHlwZSl7Y2FzZVwiTVwiOkI9RixDPUc7YnJlYWs7Y2FzZVwiTFwiOmsoeixBLEYsRyk7YnJlYWs7Y2FzZVwiUVwiOnZhciBIPShFLngxLXEpL3MsST0oRS55MS1yKS90O2IoW3osRixIXSxbQSxHLEldLHt4OnoseTpBLGN4OkgsY3k6SX0pO2JyZWFrO2Nhc2VcIlpcIjpsKHosQSxCLEMpP3cucHVzaCh7eDp6LHk6QX0pOihrKHosQSxCLEMpLHcucHVzaCh7eDpCLHk6Q30pKTticmVhaztjYXNlXCJDXCI6Zm9yKHZhciBKPShFLngxLXEpL3MsSz0oRS55MS1yKS90LEw9KEUueDItcSkvcyxNPShFLnkyLXIpL3QsTj1qKHosQSxKLEssTCxNLEYsRyksTz0wO088Ti5sZW5ndGg7TysrKXt2YXIgUD1OW09dLnRvUXVhZHJhdGljKCk7YihbUC54LFAueDEsUC5jeF0sW1AueSxQLnkxLFAuY3ldLFApfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBjb21tYW5kIHR5cGU6IFwiK0UudHlwZSl9ej1GLEE9R319Zm9yKHZhciBRPXcubGVuZ3RoLFI9dGhpcy5zdHJva2VJbWFnZUluZm9zLmZpbmRJbWFnZShRKSxTPVIuaW5kZXgsVD0wO1Q8UTsrK1Qpe3ZhciBVPXdbVF07ZShSLGQoVS54KSxkKFUueSksZChVLmN4KSxkKFUuY3kpKX1yZXR1cm4gbj10aGlzLmdseXBoSW5mb3NbYS5pbmRleF09e2dseXBoOmEsdUdseXBoUmVjdDpbby54MSwtby55MSxvLngyLC1vLnkyXSxzdHJva2VJbWFnZUluZm86UixzdHJva2VzOncsY29sSW5mbzptKHksdGhpcy5jb2xEaW1JbWFnZUluZm9zLHRoaXMuY29sQ2VsbEltYWdlSW5mb3MpLHJvd0luZm86bSh4LHRoaXMucm93RGltSW1hZ2VJbmZvcyx0aGlzLnJvd0NlbGxJbWFnZUluZm9zKX0sbi51R3JpZE9mZnNldD1bbi5jb2xJbmZvLmRpbU9mZnNldCxuLnJvd0luZm8uZGltT2Zmc2V0XSxufX07Zi5SZW5kZXJlckdMLnByb3RvdHlwZS5fcmVuZGVyVGV4dD1mdW5jdGlvbihhLGIsYyxkLGUpe2lmKCEoZD49ZSkmJnRoaXMuX2RvRmlsbCl7aWYoIXRoaXMuX2lzT3BlblR5cGUoKSlyZXR1cm4gY29uc29sZS5sb2coXCJXRUJHTDogb25seSBvcGVudHlwZSBmb250cyBhcmUgc3VwcG9ydGVkXCIpLGE7YS5wdXNoKCk7dmFyIHA9dGhpcy5jdXJGaWxsU2hhZGVyLHI9dGhpcy5fZG9TdHJva2Uscz10aGlzLmRyYXdNb2RlO3RoaXMuY3VyRmlsbFNoYWRlcj1udWxsLHRoaXMuX2RvU3Ryb2tlPSExLHRoaXMuZHJhd01vZGU9Zy5URVhUVVJFO3ZhciB0PXRoaXMuX3RleHRGb250LmZvbnQsdT10aGlzLl90ZXh0Rm9udC5fZm9udEluZm87dXx8KHU9dGhpcy5fdGV4dEZvbnQuX2ZvbnRJbmZvPW5ldyBxKHQpKTt2YXIgdj10aGlzLl90ZXh0Rm9udC5faGFuZGxlQWxpZ25tZW50KHRoaXMsYixjLGQpLHc9dGhpcy5fdGV4dFNpemUseD13L3QudW5pdHNQZXJFbTt0aGlzLnRyYW5zbGF0ZSh2Lngsdi55LDApLHRoaXMuc2NhbGUoeCx4LDEpO3ZhciB5PXRoaXMuR0wsej0hdGhpcy5fZGVmYXVsdEZvbnRTaGFkZXIsQT10aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0Rm9udFNoYWRlcigpKTt6JiYoQS5zZXRVbmlmb3JtKFwidUdyaWRJbWFnZVNpemVcIixbbCxtXSksQS5zZXRVbmlmb3JtKFwidUNlbGxzSW1hZ2VTaXplXCIsW24sb10pLEEuc2V0VW5pZm9ybShcInVTdHJva2VJbWFnZVNpemVcIixbaixrXSksQS5zZXRVbmlmb3JtKFwidUdyaWRTaXplXCIsW2gsaV0pKSx0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJGaWxsQ29sb3IpO3ZhciBCPXRoaXMuZ0hhc2guZ2x5cGg7aWYoIUIpe3ZhciBDPXRoaXMuX3RleHRHZW9tPW5ldyBmLkdlb21ldHJ5KDEsMSxmdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PTE7YSsrKWZvcih2YXIgYj0wO2I8PTE7YisrKXRoaXMudmVydGljZXMucHVzaChuZXcgZi5WZWN0b3IoYixhLDApKSx0aGlzLnV2cy5wdXNoKGIsYSl9KTtDLmNvbXB1dGVGYWNlcygpLmNvbXB1dGVOb3JtYWxzKCksQj10aGlzLmNyZWF0ZUJ1ZmZlcnMoXCJnbHlwaFwiLEMpfXRoaXMuX2JpbmRCdWZmZXIoQi52ZXJ0ZXhCdWZmZXIseS5BUlJBWV9CVUZGRVIpLEEuZW5hYmxlQXR0cmliKEEuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyx5LkZMT0FULCExLDAsMCksdGhpcy5fYmluZEJ1ZmZlcihCLmluZGV4QnVmZmVyLHkuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLHRoaXMuX2JpbmRCdWZmZXIoQi51dkJ1ZmZlcix5LkFSUkFZX0JVRkZFUiksQS5lbmFibGVBdHRyaWIoQS5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLHkuRkxPQVQsITEsMCwwKSxBLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuY3VyRmlsbENvbG9yKTt0cnl7Zm9yKHZhciBEPTAsRT1udWxsLEY9ITEsRz10LnN0cmluZ1RvR2x5cGhzKGIpLEg9MDtIPEcubGVuZ3RoOysrSCl7dmFyIEk9R1tIXTtFJiYoRCs9dC5nZXRLZXJuaW5nVmFsdWUoRSxJKSk7dmFyIEo9dS5nZXRHbHlwaEluZm8oSSk7aWYoSi51R2x5cGhSZWN0KXt2YXIgSz1KLnJvd0luZm8sTD1KLmNvbEluZm87QS5zZXRVbmlmb3JtKFwidVNhbXBsZXJTdHJva2VzXCIsSi5zdHJva2VJbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlclJvd1N0cm9rZXNcIixLLmNlbGxJbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlclJvd3NcIixLLmRpbUltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVTYW1wbGVyQ29sU3Ryb2tlc1wiLEwuY2VsbEltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVTYW1wbGVyQ29sc1wiLEwuZGltSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidUdyaWRPZmZzZXRcIixKLnVHcmlkT2Zmc2V0KSxBLnNldFVuaWZvcm0oXCJ1R2x5cGhSZWN0XCIsSi51R2x5cGhSZWN0KSxBLnNldFVuaWZvcm0oXCJ1R2x5cGhPZmZzZXRcIixEKSxGP0EuYmluZFRleHR1cmVzKCk6KEY9ITAsQS5iaW5kU2hhZGVyKCkpLHkuZHJhd0VsZW1lbnRzKHkuVFJJQU5HTEVTLDYsdGhpcy5HTC5VTlNJR05FRF9TSE9SVCwwKX1EKz1JLmFkdmFuY2VXaWR0aCxFPUl9fWZpbmFsbHl7QS51bmJpbmRTaGFkZXIoKSx0aGlzLmN1ckZpbGxTaGFkZXI9cCx0aGlzLl9kb1N0cm9rZT1yLHRoaXMuZHJhd01vZGU9cyxhLnBvcCgpfXJldHVybiB0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsYX19fSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LlJlbmRlcmVyR0xcIjo3NCxcIi4vcDUuU2hhZGVyXCI6NzV9XX0se30sWzEzXSkoMTMpfSk7IiwiLy8gY3JlYXRlIG1haW4gZ2xvYmFsIG9iamVjdFxudmFyIHRzbmVqcyA9IHRzbmVqcyB8fCB7IFJFVklTSU9OOiAnQUxQSEEnIH07XG5cbihmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgLy8gdXRpbGl0eSBmdW5jdGlvblxuICB2YXIgYXNzZXJ0ID0gZnVuY3Rpb24oY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gICAgaWYgKCFjb25kaXRpb24pIHsgdGhyb3cgbWVzc2FnZSB8fCBcIkFzc2VydGlvbiBmYWlsZWRcIjsgfVxuICB9XG5cbiAgLy8gc3ludGF4IHN1Z2FyXG4gIHZhciBnZXRvcHQgPSBmdW5jdGlvbihvcHQsIGZpZWxkLCBkZWZhdWx0dmFsKSB7XG4gICAgaWYob3B0Lmhhc093blByb3BlcnR5KGZpZWxkKSkge1xuICAgICAgcmV0dXJuIG9wdFtmaWVsZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWZhdWx0dmFsO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJldHVybiAwIG1lYW4gdW5pdCBzdGFuZGFyZCBkZXZpYXRpb24gcmFuZG9tIG51bWJlclxuICB2YXIgcmV0dXJuX3YgPSBmYWxzZTtcbiAgdmFyIHZfdmFsID0gMC4wO1xuICB2YXIgZ2F1c3NSYW5kb20gPSBmdW5jdGlvbigpIHtcbiAgICBpZihyZXR1cm5fdikgeyBcbiAgICAgIHJldHVybl92ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdl92YWw7IFxuICAgIH1cbiAgICB2YXIgdSA9IDIqTWF0aC5yYW5kb20oKS0xO1xuICAgIHZhciB2ID0gMipNYXRoLnJhbmRvbSgpLTE7XG4gICAgdmFyIHIgPSB1KnUgKyB2KnY7XG4gICAgaWYociA9PSAwIHx8IHIgPiAxKSByZXR1cm4gZ2F1c3NSYW5kb20oKTtcbiAgICB2YXIgYyA9IE1hdGguc3FydCgtMipNYXRoLmxvZyhyKS9yKTtcbiAgICB2X3ZhbCA9IHYqYzsgLy8gY2FjaGUgdGhpcyBmb3IgbmV4dCBmdW5jdGlvbiBjYWxsIGZvciBlZmZpY2llbmN5XG4gICAgcmV0dXJuX3YgPSB0cnVlO1xuICAgIHJldHVybiB1KmM7XG4gIH1cblxuICAvLyByZXR1cm4gcmFuZG9tIG5vcm1hbCBudW1iZXJcbiAgdmFyIHJhbmRuID0gZnVuY3Rpb24obXUsIHN0ZCl7IHJldHVybiBtdStnYXVzc1JhbmRvbSgpKnN0ZDsgfVxuXG4gIC8vIHV0aWxpdGl0eSB0aGF0IGNyZWF0ZXMgY29udGlndW91cyB2ZWN0b3Igb2YgemVyb3Mgb2Ygc2l6ZSBuXG4gIHZhciB6ZXJvcyA9IGZ1bmN0aW9uKG4pIHtcbiAgICBpZih0eXBlb2Yobik9PT0ndW5kZWZpbmVkJyB8fCBpc05hTihuKSkgeyByZXR1cm4gW107IH1cbiAgICBpZih0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBsYWNraW5nIGJyb3dzZXIgc3VwcG9ydFxuICAgICAgdmFyIGFyciA9IG5ldyBBcnJheShuKTtcbiAgICAgIGZvcih2YXIgaT0wO2k8bjtpKyspIHsgYXJyW2ldPSAwOyB9XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IEZsb2F0NjRBcnJheShuKTsgLy8gdHlwZWQgYXJyYXlzIGFyZSBmYXN0ZXJcbiAgICB9XG4gIH1cblxuICAvLyB1dGlsaXR5IHRoYXQgcmV0dXJucyAyZCBhcnJheSBmaWxsZWQgd2l0aCByYW5kb20gbnVtYmVyc1xuICAvLyBvciB3aXRoIHZhbHVlIHMsIGlmIHByb3ZpZGVkXG4gIHZhciByYW5kbjJkID0gZnVuY3Rpb24obixkLHMpIHtcbiAgICB2YXIgdXNlcyA9IHR5cGVvZiBzICE9PSAndW5kZWZpbmVkJztcbiAgICB2YXIgeCA9IFtdO1xuICAgIGZvcih2YXIgaT0wO2k8bjtpKyspIHtcbiAgICAgIHZhciB4aGVyZSA9IFtdO1xuICAgICAgZm9yKHZhciBqPTA7ajxkO2orKykgeyBcbiAgICAgICAgaWYodXNlcykge1xuICAgICAgICAgIHhoZXJlLnB1c2gocyk7IFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHhoZXJlLnB1c2gocmFuZG4oMC4wLCAxZS00KSk7IFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB4LnB1c2goeGhlcmUpO1xuICAgIH1cbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIC8vIGNvbXB1dGUgTDIgZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjdG9yc1xuICB2YXIgTDIgPSBmdW5jdGlvbih4MSwgeDIpIHtcbiAgICB2YXIgRCA9IHgxLmxlbmd0aDtcbiAgICB2YXIgZCA9IDA7XG4gICAgZm9yKHZhciBpPTA7aTxEO2krKykgeyBcbiAgICAgIHZhciB4MWkgPSB4MVtpXTtcbiAgICAgIHZhciB4MmkgPSB4MltpXTtcbiAgICAgIGQgKz0gKHgxaS14MmkpKih4MWkteDJpKTtcbiAgICB9XG4gICAgcmV0dXJuIGQ7XG4gIH1cblxuICAvLyBjb21wdXRlIHBhaXJ3aXNlIGRpc3RhbmNlIGluIGFsbCB2ZWN0b3JzIGluIFhcbiAgdmFyIHh0b2QgPSBmdW5jdGlvbihYKSB7XG4gICAgdmFyIE4gPSBYLmxlbmd0aDtcbiAgICB2YXIgZGlzdCA9IHplcm9zKE4gKiBOKTsgLy8gYWxsb2NhdGUgY29udGlndW91cyBhcnJheVxuICAgIGZvcih2YXIgaT0wO2k8TjtpKyspIHtcbiAgICAgIGZvcih2YXIgaj1pKzE7ajxOO2orKykge1xuICAgICAgICB2YXIgZCA9IEwyKFhbaV0sIFhbal0pO1xuICAgICAgICBkaXN0W2kqTitqXSA9IGQ7XG4gICAgICAgIGRpc3RbaipOK2ldID0gZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRpc3Q7XG4gIH1cblxuICAvLyBjb21wdXRlIChwX3tpfGp9ICsgcF97anxpfSkvKDJuKVxuICB2YXIgZDJwID0gZnVuY3Rpb24oRCwgcGVycGxleGl0eSwgdG9sKSB7XG4gICAgdmFyIE5mID0gTWF0aC5zcXJ0KEQubGVuZ3RoKTsgLy8gdGhpcyBiZXR0ZXIgYmUgYW4gaW50ZWdlclxuICAgIHZhciBOID0gTWF0aC5mbG9vcihOZik7XG4gICAgYXNzZXJ0KE4gPT09IE5mLCBcIkQgc2hvdWxkIGhhdmUgc3F1YXJlIG51bWJlciBvZiBlbGVtZW50cy5cIik7XG4gICAgdmFyIEh0YXJnZXQgPSBNYXRoLmxvZyhwZXJwbGV4aXR5KTsgLy8gdGFyZ2V0IGVudHJvcHkgb2YgZGlzdHJpYnV0aW9uXG4gICAgdmFyIFAgPSB6ZXJvcyhOICogTik7IC8vIHRlbXBvcmFyeSBwcm9iYWJpbGl0eSBtYXRyaXhcblxuICAgIHZhciBwcm93ID0gemVyb3MoTik7IC8vIGEgdGVtcG9yYXJ5IHN0b3JhZ2UgY29tcGFydG1lbnRcbiAgICBmb3IodmFyIGk9MDtpPE47aSsrKSB7XG4gICAgICB2YXIgYmV0YW1pbiA9IC1JbmZpbml0eTtcbiAgICAgIHZhciBiZXRhbWF4ID0gSW5maW5pdHk7XG4gICAgICB2YXIgYmV0YSA9IDE7IC8vIGluaXRpYWwgdmFsdWUgb2YgcHJlY2lzaW9uXG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgdmFyIG1heHRyaWVzID0gNTA7XG5cbiAgICAgIC8vIHBlcmZvcm0gYmluYXJ5IHNlYXJjaCB0byBmaW5kIGEgc3VpdGFibGUgcHJlY2lzaW9uIGJldGFcbiAgICAgIC8vIHNvIHRoYXQgdGhlIGVudHJvcHkgb2YgdGhlIGRpc3RyaWJ1dGlvbiBpcyBhcHByb3ByaWF0ZVxuICAgICAgdmFyIG51bSA9IDA7XG4gICAgICB3aGlsZSghZG9uZSkge1xuICAgICAgICAvL2RlYnVnZ2VyO1xuXG4gICAgICAgIC8vIGNvbXB1dGUgZW50cm9weSBhbmQga2VybmVsIHJvdyB3aXRoIGJldGEgcHJlY2lzaW9uXG4gICAgICAgIHZhciBwc3VtID0gMC4wO1xuICAgICAgICBmb3IodmFyIGo9MDtqPE47aisrKSB7XG4gICAgICAgICAgdmFyIHBqID0gTWF0aC5leHAoLSBEW2kqTitqXSAqIGJldGEpO1xuICAgICAgICAgIGlmKGk9PT1qKSB7IHBqID0gMDsgfSAvLyB3ZSBkb250IGNhcmUgYWJvdXQgZGlhZ29uYWxzXG4gICAgICAgICAgcHJvd1tqXSA9IHBqO1xuICAgICAgICAgIHBzdW0gKz0gcGo7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm9ybWFsaXplIHAgYW5kIGNvbXB1dGUgZW50cm9weVxuICAgICAgICB2YXIgSGhlcmUgPSAwLjA7XG4gICAgICAgIGZvcih2YXIgaj0wO2o8TjtqKyspIHtcbiAgICAgICAgICB2YXIgcGogPSBwcm93W2pdIC8gcHN1bTtcbiAgICAgICAgICBwcm93W2pdID0gcGo7XG4gICAgICAgICAgaWYocGogPiAxZS03KSBIaGVyZSAtPSBwaiAqIE1hdGgubG9nKHBqKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkanVzdCBiZXRhIGJhc2VkIG9uIHJlc3VsdFxuICAgICAgICBpZihIaGVyZSA+IEh0YXJnZXQpIHtcbiAgICAgICAgICAvLyBlbnRyb3B5IHdhcyB0b28gaGlnaCAoZGlzdHJpYnV0aW9uIHRvbyBkaWZmdXNlKVxuICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gaW5jcmVhc2UgdGhlIHByZWNpc2lvbiBmb3IgbW9yZSBwZWFreSBkaXN0cmlidXRpb25cbiAgICAgICAgICBiZXRhbWluID0gYmV0YTsgLy8gbW92ZSB1cCB0aGUgYm91bmRzXG4gICAgICAgICAgaWYoYmV0YW1heCA9PT0gSW5maW5pdHkpIHsgYmV0YSA9IGJldGEgKiAyOyB9XG4gICAgICAgICAgZWxzZSB7IGJldGEgPSAoYmV0YSArIGJldGFtYXgpIC8gMjsgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY29udmVyc2UgY2FzZS4gbWFrZSBkaXN0cnVidGlvbiBsZXNzIHBlYWt5XG4gICAgICAgICAgYmV0YW1heCA9IGJldGE7XG4gICAgICAgICAgaWYoYmV0YW1pbiA9PT0gLUluZmluaXR5KSB7IGJldGEgPSBiZXRhIC8gMjsgfVxuICAgICAgICAgIGVsc2UgeyBiZXRhID0gKGJldGEgKyBiZXRhbWluKSAvIDI7IH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHN0b3BwaW5nIGNvbmRpdGlvbnM6IHRvbyBtYW55IHRyaWVzIG9yIGdvdCBhIGdvb2QgcHJlY2lzaW9uXG4gICAgICAgIG51bSsrO1xuICAgICAgICBpZihNYXRoLmFicyhIaGVyZSAtIEh0YXJnZXQpIDwgdG9sKSB7IGRvbmUgPSB0cnVlOyB9XG4gICAgICAgIGlmKG51bSA+PSBtYXh0cmllcykgeyBkb25lID0gdHJ1ZTsgfVxuICAgICAgfVxuXG4gICAgICAvLyBjb25zb2xlLmxvZygnZGF0YSBwb2ludCAnICsgaSArICcgZ2V0cyBwcmVjaXNpb24gJyArIGJldGEgKyAnIGFmdGVyICcgKyBudW0gKyAnIGJpbmFyeSBzZWFyY2ggc3RlcHMuJyk7XG4gICAgICAvLyBjb3B5IG92ZXIgdGhlIGZpbmFsIHByb3cgdG8gUCBhdCByb3cgaVxuICAgICAgZm9yKHZhciBqPTA7ajxOO2orKykgeyBQW2kqTitqXSA9IHByb3dbal07IH1cblxuICAgIH0gLy8gZW5kIGxvb3Agb3ZlciBleGFtcGxlcyBpXG5cbiAgICAvLyBzeW1tZXRyaXplIFAgYW5kIG5vcm1hbGl6ZSBpdCB0byBzdW0gdG8gMSBvdmVyIGFsbCBpalxuICAgIHZhciBQb3V0ID0gemVyb3MoTiAqIE4pO1xuICAgIHZhciBOMiA9IE4qMjtcbiAgICBmb3IodmFyIGk9MDtpPE47aSsrKSB7XG4gICAgICBmb3IodmFyIGo9MDtqPE47aisrKSB7XG4gICAgICAgIFBvdXRbaSpOK2pdID0gTWF0aC5tYXgoKFBbaSpOK2pdICsgUFtqKk4raV0pL04yLCAxZS0xMDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQb3V0O1xuICB9XG5cbiAgLy8gaGVscGVyIGZ1bmN0aW9uXG4gIGZ1bmN0aW9uIHNpZ24oeCkgeyByZXR1cm4geCA+IDAgPyAxIDogeCA8IDAgPyAtMSA6IDA7IH1cblxuICB2YXIgdFNORSA9IGZ1bmN0aW9uKG9wdCkge1xuICAgIHZhciBvcHQgPSBvcHQgfHwge307XG4gICAgdGhpcy5wZXJwbGV4aXR5ID0gZ2V0b3B0KG9wdCwgXCJwZXJwbGV4aXR5XCIsIDMwKTsgLy8gZWZmZWN0aXZlIG51bWJlciBvZiBuZWFyZXN0IG5laWdoYm9yc1xuICAgIHRoaXMuZGltID0gZ2V0b3B0KG9wdCwgXCJkaW1cIiwgMik7IC8vIGJ5IGRlZmF1bHQgMi1EIHRTTkVcbiAgICB0aGlzLmVwc2lsb24gPSBnZXRvcHQob3B0LCBcImVwc2lsb25cIiwgMTApOyAvLyBsZWFybmluZyByYXRlXG5cbiAgICB0aGlzLml0ZXIgPSAwO1xuICB9XG5cbiAgdFNORS5wcm90b3R5cGUgPSB7XG5cbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRha2VzIGEgc2V0IG9mIGhpZ2gtZGltZW5zaW9uYWwgcG9pbnRzXG4gICAgLy8gYW5kIGNyZWF0ZXMgbWF0cml4IFAgZnJvbSB0aGVtIHVzaW5nIGdhdXNzaWFuIGtlcm5lbFxuICAgIGluaXREYXRhUmF3OiBmdW5jdGlvbihYKSB7XG4gICAgICB2YXIgTiA9IFgubGVuZ3RoO1xuICAgICAgdmFyIEQgPSBYWzBdLmxlbmd0aDtcbiAgICAgIGFzc2VydChOID4gMCwgXCIgWCBpcyBlbXB0eT8gWW91IG11c3QgaGF2ZSBzb21lIGRhdGEhXCIpO1xuICAgICAgYXNzZXJ0KEQgPiAwLCBcIiBYWzBdIGlzIGVtcHR5PyBXaGVyZSBpcyB0aGUgZGF0YT9cIik7XG4gICAgICB2YXIgZGlzdHMgPSB4dG9kKFgpOyAvLyBjb252ZXJ0IFggdG8gZGlzdGFuY2VzIHVzaW5nIGdhdXNzaWFuIGtlcm5lbFxuICAgICAgdGhpcy5QID0gZDJwKGRpc3RzLCB0aGlzLnBlcnBsZXhpdHksIDFlLTQpOyAvLyBhdHRhY2ggdG8gb2JqZWN0XG4gICAgICB0aGlzLk4gPSBOOyAvLyBiYWNrIHVwIHRoZSBzaXplIG9mIHRoZSBkYXRhc2V0XG4gICAgICB0aGlzLmluaXRTb2x1dGlvbigpOyAvLyByZWZyZXNoIHRoaXNcbiAgICB9LFxuXG4gICAgLy8gdGhpcyBmdW5jdGlvbiB0YWtlcyBhIGdpdmVuIGRpc3RhbmNlIG1hdHJpeCBhbmQgY3JlYXRlc1xuICAgIC8vIG1hdHJpeCBQIGZyb20gdGhlbS5cbiAgICAvLyBEIGlzIGFzc3VtZWQgdG8gYmUgcHJvdmlkZWQgYXMgYSBsaXN0IG9mIGxpc3RzLCBhbmQgc2hvdWxkIGJlIHN5bW1ldHJpY1xuICAgIGluaXREYXRhRGlzdDogZnVuY3Rpb24oRCkge1xuICAgICAgdmFyIE4gPSBELmxlbmd0aDtcbiAgICAgIGFzc2VydChOID4gMCwgXCIgWCBpcyBlbXB0eT8gWW91IG11c3QgaGF2ZSBzb21lIGRhdGEhXCIpO1xuICAgICAgLy8gY29udmVydCBEIHRvIGEgKGZhc3QpIHR5cGVkIGFycmF5IHZlcnNpb25cbiAgICAgIHZhciBkaXN0cyA9IHplcm9zKE4gKiBOKTsgLy8gYWxsb2NhdGUgY29udGlndW91cyBhcnJheVxuICAgICAgZm9yKHZhciBpPTA7aTxOO2krKykge1xuICAgICAgICBmb3IodmFyIGo9aSsxO2o8TjtqKyspIHtcbiAgICAgICAgICB2YXIgZCA9IERbaV1bal07XG4gICAgICAgICAgZGlzdHNbaSpOK2pdID0gZDtcbiAgICAgICAgICBkaXN0c1tqKk4raV0gPSBkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLlAgPSBkMnAoZGlzdHMsIHRoaXMucGVycGxleGl0eSwgMWUtNCk7XG4gICAgICB0aGlzLk4gPSBOO1xuICAgICAgdGhpcy5pbml0U29sdXRpb24oKTsgLy8gcmVmcmVzaCB0aGlzXG4gICAgfSxcblxuICAgIC8vIChyZSlpbml0aWFsaXplcyB0aGUgc29sdXRpb24gdG8gcmFuZG9tXG4gICAgaW5pdFNvbHV0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgIC8vIGdlbmVyYXRlIHJhbmRvbSBzb2x1dGlvbiB0byB0LVNORVxuICAgICAgdGhpcy5ZID0gcmFuZG4yZCh0aGlzLk4sIHRoaXMuZGltKTsgLy8gdGhlIHNvbHV0aW9uXG4gICAgICB0aGlzLmdhaW5zID0gcmFuZG4yZCh0aGlzLk4sIHRoaXMuZGltLCAxLjApOyAvLyBzdGVwIGdhaW5zIHRvIGFjY2VsZXJhdGUgcHJvZ3Jlc3MgaW4gdW5jaGFuZ2luZyBkaXJlY3Rpb25zXG4gICAgICB0aGlzLnlzdGVwID0gcmFuZG4yZCh0aGlzLk4sIHRoaXMuZGltLCAwLjApOyAvLyBtb21lbnR1bSBhY2N1bXVsYXRvclxuICAgICAgdGhpcy5pdGVyID0gMDtcbiAgICB9LFxuXG4gICAgLy8gcmV0dXJuIHBvaW50ZXIgdG8gY3VycmVudCBzb2x1dGlvblxuICAgIGdldFNvbHV0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLlk7XG4gICAgfSxcblxuICAgIC8vIHBlcmZvcm0gYSBzaW5nbGUgc3RlcCBvZiBvcHRpbWl6YXRpb24gdG8gaW1wcm92ZSB0aGUgZW1iZWRkaW5nXG4gICAgc3RlcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLml0ZXIgKz0gMTtcbiAgICAgIHZhciBOID0gdGhpcy5OO1xuXG4gICAgICB2YXIgY2cgPSB0aGlzLmNvc3RHcmFkKHRoaXMuWSk7IC8vIGV2YWx1YXRlIGdyYWRpZW50XG4gICAgICB2YXIgY29zdCA9IGNnLmNvc3Q7XG4gICAgICB2YXIgZ3JhZCA9IGNnLmdyYWQ7XG5cbiAgICAgIC8vIHBlcmZvcm0gZ3JhZGllbnQgc3RlcFxuICAgICAgdmFyIHltZWFuID0gemVyb3ModGhpcy5kaW0pO1xuICAgICAgZm9yKHZhciBpPTA7aTxOO2krKykge1xuICAgICAgICBmb3IodmFyIGQ9MDtkPHRoaXMuZGltO2QrKykge1xuICAgICAgICAgIHZhciBnaWQgPSBncmFkW2ldW2RdO1xuICAgICAgICAgIHZhciBzaWQgPSB0aGlzLnlzdGVwW2ldW2RdO1xuICAgICAgICAgIHZhciBnYWluaWQgPSB0aGlzLmdhaW5zW2ldW2RdO1xuXG4gICAgICAgICAgLy8gY29tcHV0ZSBnYWluIHVwZGF0ZVxuICAgICAgICAgIHZhciBuZXdnYWluID0gc2lnbihnaWQpID09PSBzaWduKHNpZCkgPyBnYWluaWQgKiAwLjggOiBnYWluaWQgKyAwLjI7XG4gICAgICAgICAgaWYoZ2FpbmlkIDwgMC4wMSkgZ2FpbmlkID0gMC4wMTsgLy8gY2xhbXBcbiAgICAgICAgICB0aGlzLmdhaW5zW2ldW2RdID0gbmV3Z2FpbjsgLy8gc3RvcmUgZm9yIG5leHQgdHVyblxuXG4gICAgICAgICAgLy8gY29tcHV0ZSBtb21lbnR1bSBzdGVwIGRpcmVjdGlvblxuICAgICAgICAgIHZhciBtb212YWwgPSB0aGlzLml0ZXIgPCAyNTAgPyAwLjUgOiAwLjg7XG4gICAgICAgICAgdmFyIG5ld3NpZCA9IG1vbXZhbCAqIHNpZCAtIHRoaXMuZXBzaWxvbiAqIG5ld2dhaW4gKiBncmFkW2ldW2RdO1xuICAgICAgICAgIHRoaXMueXN0ZXBbaV1bZF0gPSBuZXdzaWQ7IC8vIHJlbWVtYmVyIHRoZSBzdGVwIHdlIHRvb2tcblxuICAgICAgICAgIC8vIHN0ZXAhXG4gICAgICAgICAgdGhpcy5ZW2ldW2RdICs9IG5ld3NpZDsgXG5cbiAgICAgICAgICB5bWVhbltkXSArPSB0aGlzLllbaV1bZF07IC8vIGFjY3VtdWxhdGUgbWVhbiBzbyB0aGF0IHdlIGNhbiBjZW50ZXIgbGF0ZXJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyByZXByb2plY3QgWSB0byBiZSB6ZXJvIG1lYW5cbiAgICAgIGZvcih2YXIgaT0wO2k8TjtpKyspIHtcbiAgICAgICAgZm9yKHZhciBkPTA7ZDx0aGlzLmRpbTtkKyspIHtcbiAgICAgICAgICB0aGlzLllbaV1bZF0gLT0geW1lYW5bZF0vTjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvL2lmKHRoaXMuaXRlciUxMDA9PT0wKSBjb25zb2xlLmxvZygnaXRlciAnICsgdGhpcy5pdGVyICsgJywgY29zdDogJyArIGNvc3QpO1xuICAgICAgcmV0dXJuIGNvc3Q7IC8vIHJldHVybiBjdXJyZW50IGNvc3RcbiAgICB9LFxuXG4gICAgLy8gZm9yIGRlYnVnZ2luZzogZ3JhZGllbnQgY2hlY2tcbiAgICBkZWJ1Z0dyYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIE4gPSB0aGlzLk47XG5cbiAgICAgIHZhciBjZyA9IHRoaXMuY29zdEdyYWQodGhpcy5ZKTsgLy8gZXZhbHVhdGUgZ3JhZGllbnRcbiAgICAgIHZhciBjb3N0ID0gY2cuY29zdDtcbiAgICAgIHZhciBncmFkID0gY2cuZ3JhZDtcblxuICAgICAgdmFyIGUgPSAxZS01O1xuICAgICAgZm9yKHZhciBpPTA7aTxOO2krKykge1xuICAgICAgICBmb3IodmFyIGQ9MDtkPHRoaXMuZGltO2QrKykge1xuICAgICAgICAgIHZhciB5b2xkID0gdGhpcy5ZW2ldW2RdO1xuXG4gICAgICAgICAgdGhpcy5ZW2ldW2RdID0geW9sZCArIGU7XG4gICAgICAgICAgdmFyIGNnMCA9IHRoaXMuY29zdEdyYWQodGhpcy5ZKTtcblxuICAgICAgICAgIHRoaXMuWVtpXVtkXSA9IHlvbGQgLSBlO1xuICAgICAgICAgIHZhciBjZzEgPSB0aGlzLmNvc3RHcmFkKHRoaXMuWSk7XG4gICAgICAgICAgXG4gICAgICAgICAgdmFyIGFuYWx5dGljID0gZ3JhZFtpXVtkXTtcbiAgICAgICAgICB2YXIgbnVtZXJpY2FsID0gKGNnMC5jb3N0IC0gY2cxLmNvc3QpIC8gKCAyICogZSApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGkgKyAnLCcgKyBkICsgJzogZ3JhZGNoZWNrIGFuYWx5dGljOiAnICsgYW5hbHl0aWMgKyAnIHZzLiBudW1lcmljYWw6ICcgKyBudW1lcmljYWwpO1xuXG4gICAgICAgICAgdGhpcy5ZW2ldW2RdID0geW9sZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyByZXR1cm4gY29zdCBhbmQgZ3JhZGllbnQsIGdpdmVuIGFuIGFycmFuZ2VtZW50XG4gICAgY29zdEdyYWQ6IGZ1bmN0aW9uKFkpIHtcbiAgICAgIHZhciBOID0gdGhpcy5OO1xuICAgICAgdmFyIGRpbSA9IHRoaXMuZGltOyAvLyBkaW0gb2Ygb3V0cHV0IHNwYWNlXG4gICAgICB2YXIgUCA9IHRoaXMuUDtcblxuICAgICAgdmFyIHBtdWwgPSB0aGlzLml0ZXIgPCAxMDAgPyA0IDogMTsgLy8gdHJpY2sgdGhhdCBoZWxwcyB3aXRoIGxvY2FsIG9wdGltYVxuXG4gICAgICAvLyBjb21wdXRlIGN1cnJlbnQgUSBkaXN0cmlidXRpb24sIHVubm9ybWFsaXplZCBmaXJzdFxuICAgICAgdmFyIFF1ID0gemVyb3MoTiAqIE4pO1xuICAgICAgdmFyIHFzdW0gPSAwLjA7XG4gICAgICBmb3IodmFyIGk9MDtpPE47aSsrKSB7XG4gICAgICAgIGZvcih2YXIgaj1pKzE7ajxOO2orKykge1xuICAgICAgICAgIHZhciBkc3VtID0gMC4wO1xuICAgICAgICAgIGZvcih2YXIgZD0wO2Q8ZGltO2QrKykge1xuICAgICAgICAgICAgdmFyIGRoZXJlID0gWVtpXVtkXSAtIFlbal1bZF07XG4gICAgICAgICAgICBkc3VtICs9IGRoZXJlICogZGhlcmU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBxdSA9IDEuMCAvICgxLjAgKyBkc3VtKTsgLy8gU3R1ZGVudCB0LWRpc3RyaWJ1dGlvblxuICAgICAgICAgIFF1W2kqTitqXSA9IHF1O1xuICAgICAgICAgIFF1W2oqTitpXSA9IHF1O1xuICAgICAgICAgIHFzdW0gKz0gMiAqIHF1O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBub3JtYWxpemUgUSBkaXN0cmlidXRpb24gdG8gc3VtIHRvIDFcbiAgICAgIHZhciBOTiA9IE4qTjtcbiAgICAgIHZhciBRID0gemVyb3MoTk4pO1xuICAgICAgZm9yKHZhciBxPTA7cTxOTjtxKyspIHsgUVtxXSA9IE1hdGgubWF4KFF1W3FdIC8gcXN1bSwgMWUtMTAwKTsgfVxuXG4gICAgICB2YXIgY29zdCA9IDAuMDtcbiAgICAgIHZhciBncmFkID0gW107XG4gICAgICBmb3IodmFyIGk9MDtpPE47aSsrKSB7XG4gICAgICAgIHZhciBnc3VtID0gbmV3IEFycmF5KGRpbSk7IC8vIGluaXQgZ3JhZCBmb3IgcG9pbnQgaVxuICAgICAgICBmb3IodmFyIGQ9MDtkPGRpbTtkKyspIHsgZ3N1bVtkXSA9IDAuMDsgfVxuICAgICAgICBmb3IodmFyIGo9MDtqPE47aisrKSB7XG4gICAgICAgICAgY29zdCArPSAtIFBbaSpOK2pdICogTWF0aC5sb2coUVtpKk4ral0pOyAvLyBhY2N1bXVsYXRlIGNvc3QgKHRoZSBub24tY29uc3RhbnQgcG9ydGlvbiBhdCBsZWFzdC4uLilcbiAgICAgICAgICB2YXIgcHJlbXVsdCA9IDQgKiAocG11bCAqIFBbaSpOK2pdIC0gUVtpKk4ral0pICogUXVbaSpOK2pdO1xuICAgICAgICAgIGZvcih2YXIgZD0wO2Q8ZGltO2QrKykge1xuICAgICAgICAgICAgZ3N1bVtkXSArPSBwcmVtdWx0ICogKFlbaV1bZF0gLSBZW2pdW2RdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ3JhZC5wdXNoKGdzdW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge2Nvc3Q6IGNvc3QsIGdyYWQ6IGdyYWR9O1xuICAgIH1cbiAgfVxuXG4gIGdsb2JhbC50U05FID0gdFNORTsgLy8gZXhwb3J0IHRTTkUgY2xhc3Ncbn0pKHRzbmVqcyk7XG5cblxuLy8gZXhwb3J0IHRoZSBsaWJyYXJ5IHRvIHdpbmRvdywgb3IgdG8gbW9kdWxlIGluIG5vZGVqc1xuKGZ1bmN0aW9uKGxpYikge1xuICBcInVzZSBzdHJpY3RcIjtcbiAgaWYgKHR5cGVvZiBtb2R1bGUgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgd2luZG93LnRzbmVqcyA9IGxpYjsgLy8gaW4gb3JkaW5hcnkgYnJvd3NlciBhdHRhY2ggbGlicmFyeSB0byB3aW5kb3dcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGxpYjsgLy8gaW4gbm9kZWpzXG4gIH1cbn0pKHRzbmVqcyk7XG4iLCIvKipcbiAqICBTdGFydEF1ZGlvQ29udGV4dC5qc1xuICogIEBhdXRob3IgWW90YW0gTWFublxuICogIEBsaWNlbnNlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQgTUlUIExpY2Vuc2VcbiAqICBAY29weXJpZ2h0IDIwMTYgWW90YW0gTWFublxuICovXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KVxuXHQgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpXG5cdH0gZWxzZSB7XG5cdFx0cm9vdC5TdGFydEF1ZGlvQ29udGV4dCA9IGZhY3RvcnkoKVxuICB9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuXHQvL1RBUCBMSVNURU5FUi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXHQvKipcblx0ICogQGNsYXNzICBMaXN0ZW5zIGZvciBub24tZHJhZ2dpbmcgdGFwIGVuZHMgb24gdGhlIGdpdmVuIGVsZW1lbnRcblx0ICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0dmFyIFRhcExpc3RlbmVyID0gZnVuY3Rpb24oZWxlbWVudCwgY29udGV4dCl7XG5cblx0XHR0aGlzLl9kcmFnZ2VkID0gZmFsc2VcblxuXHRcdHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50XG5cblx0XHR0aGlzLl9iaW5kZWRNb3ZlID0gdGhpcy5fbW92ZWQuYmluZCh0aGlzKVxuXHRcdHRoaXMuX2JpbmRlZEVuZCA9IHRoaXMuX2VuZGVkLmJpbmQodGhpcywgY29udGV4dClcblxuXHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIiwgdGhpcy5fYmluZGVkRW5kKVxuXHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLCB0aGlzLl9iaW5kZWRNb3ZlKVxuXHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIHRoaXMuX2JpbmRlZEVuZClcblx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMuX2JpbmRlZEVuZClcblx0fVxuXG5cdC8qKlxuXHQgKiBkcmFnIG1vdmUgZXZlbnRcblx0ICovXG5cdFRhcExpc3RlbmVyLnByb3RvdHlwZS5fbW92ZWQgPSBmdW5jdGlvbihlKXtcblx0XHR0aGlzLl9kcmFnZ2VkID0gdHJ1ZVxuXHR9O1xuXG5cdC8qKlxuXHQgKiB0YXAgZW5kZWQgbGlzdGVuZXJcblx0ICovXG5cdFRhcExpc3RlbmVyLnByb3RvdHlwZS5fZW5kZWQgPSBmdW5jdGlvbihjb250ZXh0KXtcblx0XHRpZiAoIXRoaXMuX2RyYWdnZWQpe1xuXHRcdFx0c3RhcnRDb250ZXh0KGNvbnRleHQpXG5cdFx0fVxuXHRcdHRoaXMuX2RyYWdnZWQgPSBmYWxzZVxuXHR9O1xuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIHRoZSBib3VuZCBldmVudHNcblx0ICovXG5cdFRhcExpc3RlbmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24oKXtcblx0XHR0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIHRoaXMuX2JpbmRlZEVuZClcblx0XHR0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgdGhpcy5fYmluZGVkTW92ZSlcblx0XHR0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCB0aGlzLl9iaW5kZWRFbmQpXG5cdFx0dGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCB0aGlzLl9iaW5kZWRFbmQpXG5cdFx0dGhpcy5fYmluZGVkTW92ZSA9IG51bGxcblx0XHR0aGlzLl9iaW5kZWRFbmQgPSBudWxsXG5cdFx0dGhpcy5fZWxlbWVudCA9IG51bGxcblx0fTtcblxuXHQvL0VORCBUQVAgTElTVEVORVIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXHQvKipcblx0ICogUGxheXMgYSBzaWxlbnQgc291bmQgYW5kIGFsc28gaW52b2tlIHRoZSBcInJlc3VtZVwiIG1ldGhvZFxuXHQgKiBAcGFyYW0ge0F1ZGlvQ29udGV4dH0gY29udGV4dFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gc3RhcnRDb250ZXh0KGNvbnRleHQpe1xuXHRcdC8vIHRoaXMgYWNjb21wbGlzaGVzIHRoZSBpT1Mgc3BlY2lmaWMgcmVxdWlyZW1lbnRcblx0XHR2YXIgYnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgMSwgY29udGV4dC5zYW1wbGVSYXRlKVxuXHRcdHZhciBzb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpXG5cdFx0c291cmNlLmJ1ZmZlciA9IGJ1ZmZlclxuXHRcdHNvdXJjZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pXG5cdFx0c291cmNlLnN0YXJ0KDApXG5cblx0XHQvLyByZXN1bWUgdGhlIGF1ZGlvIGNvbnRleHRcblx0XHRpZiAoY29udGV4dC5yZXN1bWUpe1xuXHRcdFx0Y29udGV4dC5yZXN1bWUoKVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF1ZGlvIGNvbnRleHQgaXMgc3RhcnRlZFxuXHQgKiBAcGFyYW0gIHtBdWRpb0NvbnRleHR9ICBjb250ZXh0XG5cdCAqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBpc1N0YXJ0ZWQoY29udGV4dCl7XG5cdFx0IHJldHVybiBjb250ZXh0LnN0YXRlID09PSBcInJ1bm5pbmdcIlxuXHR9XG5cblx0LyoqXG5cdCAqIEludm9rZXMgdGhlIGNhbGxiYWNrIGFzIHNvb24gYXMgdGhlIEF1ZGlvQ29udGV4dFxuXHQgKiBpcyBzdGFydGVkXG5cdCAqIEBwYXJhbSAge0F1ZGlvQ29udGV4dH0gICBjb250ZXh0XG5cdCAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKi9cblx0ZnVuY3Rpb24gb25TdGFydGVkKGNvbnRleHQsIGNhbGxiYWNrKXtcblxuXHRcdGZ1bmN0aW9uIGNoZWNrTG9vcCgpe1xuXHRcdFx0aWYgKGlzU3RhcnRlZChjb250ZXh0KSl7XG5cdFx0XHRcdGNhbGxiYWNrKClcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShjaGVja0xvb3ApXG5cdFx0XHRcdGlmIChjb250ZXh0LnJlc3VtZSl7XG5cdFx0XHRcdFx0Y29udGV4dC5yZXN1bWUoKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzU3RhcnRlZChjb250ZXh0KSl7XG5cdFx0XHRjYWxsYmFjaygpXG5cdFx0fSBlbHNlIHtcblx0XHRcdGNoZWNrTG9vcCgpXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIHRhcCBsaXN0ZW5lciB0byB0aGUgYXVkaW8gY29udGV4dFxuXHQgKiBAcGFyYW0gIHtBcnJheXxFbGVtZW50fFN0cmluZ3xqUXVlcnl9IGVsZW1lbnRcblx0ICogQHBhcmFtIHtBcnJheX0gdGFwTGlzdGVuZXJzXG5cdCAqL1xuXHRmdW5jdGlvbiBiaW5kVGFwTGlzdGVuZXIoZWxlbWVudCwgdGFwTGlzdGVuZXJzLCBjb250ZXh0KXtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50KSB8fCAoTm9kZUxpc3QgJiYgZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0KSl7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnQubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRiaW5kVGFwTGlzdGVuZXIoZWxlbWVudFtpXSwgdGFwTGlzdGVuZXJzLCBjb250ZXh0KVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT09IFwic3RyaW5nXCIpe1xuXHRcdFx0YmluZFRhcExpc3RlbmVyKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZWxlbWVudCksIHRhcExpc3RlbmVycywgY29udGV4dClcblx0XHR9IGVsc2UgaWYgKGVsZW1lbnQuanF1ZXJ5ICYmIHR5cGVvZiBlbGVtZW50LnRvQXJyYXkgPT09IFwiZnVuY3Rpb25cIil7XG5cdFx0XHRiaW5kVGFwTGlzdGVuZXIoZWxlbWVudC50b0FycmF5KCksIHRhcExpc3RlbmVycywgY29udGV4dClcblx0XHR9IGVsc2UgaWYgKEVsZW1lbnQgJiYgZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpe1xuXHRcdFx0Ly9pZiBpdCdzIGFuIGVsZW1lbnQsIGNyZWF0ZSBhIFRhcExpc3RlbmVyXG5cdFx0XHR2YXIgdGFwID0gbmV3IFRhcExpc3RlbmVyKGVsZW1lbnQsIGNvbnRleHQpXG5cdFx0XHR0YXBMaXN0ZW5lcnMucHVzaCh0YXApXG5cdFx0fSBcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0F1ZGlvQ29udGV4dH0gY29udGV4dCBUaGUgQXVkaW9Db250ZXh0IHRvIHN0YXJ0LlxuXHQgKiBAcGFyYW0ge0FycmF5fFN0cmluZ3xFbGVtZW50fGpRdWVyeT19IGVsZW1lbnRzIEZvciBpT1MsIHRoZSBsaXN0IG9mIGVsZW1lbnRzXG5cdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiaW5kIHRhcCBldmVudCBsaXN0ZW5lcnNcblx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHdpbGwgc3RhcnQgdGhlIEF1ZGlvQ29udGV4dC4gSWZcblx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vIGVsZW1lbnRzIGFyZSBnaXZlbiwgaXQgd2lsbCBiaW5kXG5cdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZG9jdW1lbnQuYm9keS5cblx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgQXVkaW9Db250ZXh0IGlzIHN0YXJ0ZWQuXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9IFRoZSBwcm9taXNlIGlzIGludm9rZWQgd2hlbiB0aGUgQXVkaW9Db250ZXh0XG5cdCAqICAgICAgICAgICAgICAgICAgICAgICBpcyBzdGFydGVkLlxuXHQgKi9cblx0ZnVuY3Rpb24gU3RhcnRBdWRpb0NvbnRleHQoY29udGV4dCwgZWxlbWVudHMsIGNhbGxiYWNrKXtcblxuXHRcdC8vdGhlIHByb21pc2UgaXMgaW52b2tlZCB3aGVuIHRoZSBBdWRpb0NvbnRleHQgaXMgc3RhcnRlZFxuXHRcdHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24oc3VjY2Vzcykge1xuXHRcdFx0b25TdGFydGVkKGNvbnRleHQsIHN1Y2Nlc3MpXG5cdFx0fSlcblxuXHRcdC8vIFRoZSBUYXBMaXN0ZW5lcnMgYm91bmQgdG8gdGhlIGVsZW1lbnRzXG5cdFx0dmFyIHRhcExpc3RlbmVycyA9IFtdXG5cblx0XHQvLyBhZGQgYWxsIHRoZSB0YXAgbGlzdGVuZXJzXG5cdFx0aWYgKCFlbGVtZW50cyl7XG5cdFx0XHRlbGVtZW50cyA9IGRvY3VtZW50LmJvZHlcblx0XHR9XG5cdFx0YmluZFRhcExpc3RlbmVyKGVsZW1lbnRzLCB0YXBMaXN0ZW5lcnMsIGNvbnRleHQpXG5cblx0XHQvL2Rpc3Bvc2UgYWxsIHRoZXNlIHRhcCBsaXN0ZW5lcnMgd2hlbiB0aGUgY29udGV4dCBpcyBzdGFydGVkXG5cdFx0cHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRhcExpc3RlbmVycy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdHRhcExpc3RlbmVyc1tpXS5kaXNwb3NlKClcblx0XHRcdH1cblx0XHRcdHRhcExpc3RlbmVycyA9IG51bGxcblxuXHRcdFx0aWYgKGNhbGxiYWNrKXtcblx0XHRcdFx0Y2FsbGJhY2soKVxuXHRcdFx0fVxuXHRcdH0pXG5cblx0XHRyZXR1cm4gcHJvbWlzZVxuXHR9XG5cblx0cmV0dXJuIFN0YXJ0QXVkaW9Db250ZXh0XG59KSkiLCJpbXBvcnQgcDUgZnJvbSAncDUvbGliL3A1Lm1pbic7XG5pbXBvcnQgVG9uZSBmcm9tICd0b25lJztcbmltcG9ydCB0c25lanMgZnJvbSAndHNuZSc7XG5pbXBvcnQgU3RhcnRBdWRpb0NvbnRleHQgZnJvbSAnc3RhcnRhdWRpb2NvbnRleHQnO1xuXG5jb25zdCBza2V0Y2ggPSAocCkgPT4ge1xuXHRjbGFzcyBEYXRhUG9pbnQge1xuXHRcdGNvbnN0cnVjdG9yKCkge1xuICBcdFx0XHR0aGlzLnBvcyA9IHAuY3JlYXRlVmVjdG9yKDAsMCwwKTtcbiAgXHRcdFx0dGhpcy5sYWJlbCA9IFwiXCI7XG4gIFx0XHRcdHRoaXMuY29sb3IgPSBwLmNvbG9yKDI1NSk7XG4gIFx0XHRcdHRoaXMuc2l6ZSA9IDE7XG4gIFx0XHRcdHRoaXMudHJpZyA9IDA7XG4gIFx0XHRcdHRoaXMuY2FuVHJpZyA9IHRydWU7XG5cdFx0fVxuXG4gIFx0XHRkcmF3UG9pbnQoKXtcbiAgXHRcdCAgcC5ub1N0cm9rZSgpO1xuICBcdFx0ICBwLmZpbGwodGhpcy5jb2xvcik7XG4gIFx0XHQgIHAuYW1iaWVudE1hdGVyaWFsKHRoaXMuciwgdGhpcy5yLHRoaXMucik7XG4gIFx0XHQgIHAucHVzaCgpO1xuICBcdFx0ICBwLnRyYW5zbGF0ZSh0aGlzLnBvcy54LCB0aGlzLnBvcy55LCB0aGlzLnBvcy56KTtcbiAgXHRcdCAgLy9wLnJvdGF0ZVgodGhpcy5zaXplLDAsMCk7XG4gIFx0XHQgIHAuYm94KHRoaXMuc2l6ZSk7XG5cbiAgXHRcdCAgcC5maWxsKDI1NSwwLDAsdGhpcy50cmlnKTtcbiAgXHRcdCAgcC5ib3godGhpcy5zaXplICogMS41KTtcbiAgXHRcdCAgXG4gIFx0XHQgIGlmKHRoaXMudHJpZyA9PSAyNTUpIHtcbiAgXHRcdCAgXHRpZih0aGlzLmNhblRyaWcpIHtcbiAgXHRcdCAgXHRcdGxldCBybmQgPSBwLmZsb29yKHAucmFuZG9tKDEwKSk7XG4gIFx0XHQgIFx0XHRzeW50aHNbIHJuZCBdLmVudmVsb3BlLmF0dGFjayA9IHRoaXMuci8xMDAwO1xuICBcdFx0ICBcdFx0c3ludGhzWyBybmQgXS50cmlnZ2VyQXR0YWNrUmVsZWFzZSggVG9uZS5NaWRpKCAoKDI1NS8yMCArIDIpIC0gdGhpcy5zaXplICsgMikgKiAxMCApLnRvRnJlcXVlbmN5KCksIHRoaXMuc2l6ZS81MDApO1xuICBcdFx0ICBcdFx0dGhpcy5jYW5UcmlnID0gZmFsc2U7XG4gIFx0XHQgIFx0fVxuICBcdFx0ICB9XG5cblxuICBcdFx0ICB0aGlzLnRyaWctPTEwMDtcblxuICBcdFx0ICBwLnBvcCgpO1xuXG5cbiAgXHRcdH1cblx0XHRcbiAgXHRcdHNldFBvcyhwKSB7XG4gIFx0XHRcdHRoaXMucG9zID0gcDtcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XG4gIFx0XHR9XG5cdFx0XG4gIFx0XHRzZXRDb2wocixnLGIsYSkge1xuICBcdFx0XHR0aGlzLmNvbG9yID0gcC5jb2xvcihyLGcsYixhKTtcbiAgXHRcdFx0dGhpcy5yID0gcjtcbiAgXHRcdFx0dGhpcy5nID0gZztcbiAgXHRcdFx0dGhpcy5iID0gYjtcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XG4gIFx0XHR9XG5cdFx0XG4gIFx0XHRzZXRTaXplKHMpIHtcbiAgXHRcdFx0dGhpcy5zaXplID0gcztcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XG4gIFx0XHR9XG5cdH1cblxuXHRsZXQgbnVtID0gNTAwO1xuXHRsZXQgdHNuZTtcblx0bGV0IFk7XG5cdGxldCBzdGVwQ291bnQgPSAwO1xuXHRsZXQgZGF0YSA9IFtdO1xuXHRsZXQgZmVhdHVyZXMgPSBbXTtcblxuXHRsZXQgcGxheUhlYWR4ID0gLTI1MDtcblx0bGV0IHBsYXlIZWFkeSA9IC0yNTA7XG5cdFxuXHRsZXQgeCA9IDA7XG5cdGxldCB5ID0gMDtcblx0bGV0ICBlYXNpbmcgPSAwLjk7XG5cdGxldCBzeW50aHMgPSBbXTtcblxuXG5cdHZhciBwYW5uZXIgPSBuZXcgVG9uZS5QYW5uZXIoLTEpLnRvTWFzdGVyKCk7XG5cdHZhciBmcmVldmVyYiA9IG5ldyBUb25lLkZyZWV2ZXJiKCkuY29ubmVjdChwYW5uZXIpO1xuICAgICAgICBmcmVldmVyYi5kYW1wZW5pbmcudmFsdWUgPSAzNTAwO1xuICAgICAgICBmcmVldmVyYi5yb29tU2l6ZS52YWx1ZSA9IDAuNzk7XG5cdFxuXHRmb3IobGV0IGk9MDsgaTwxMDsgaSsrKSB7XG5cdFx0c3ludGhzLnB1c2gobmV3IFRvbmUuRk1TeW50aCh7XG4gICAgICAgICAgICAgICAgXCJoYXJtb25pY2l0eVwiICA6IDEwICxcbiAgICAgICAgICAgICAgICBcIm1vZHVsYXRpb25JbmRleFwiICA6IDgwICxcbiAgICAgICAgICAgICAgICBcImRldHVuZVwiICA6IDAgLFxuICAgICAgICAgICAgICAgIFwib3NjaWxsYXRvclwiICA6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCIgIDogXCJzaW5lXCJcbiAgICAgICAgICAgICAgICB9ICAsXG4gICAgICAgICAgICAgICAgXCJlbnZlbG9wZVwiICA6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJhdHRhY2tcIiAgOiAwLjAwMSAsXG4gICAgICAgICAgICAgICAgICAgIFwiZGVjYXlcIiAgOiAwLjAwMyAsXG4gICAgICAgICAgICAgICAgICAgIFwic3VzdGFpblwiICA6IDAuMDYgLFxuICAgICAgICAgICAgICAgICAgICBcInJlbGVhc2VcIiAgOiAwLjNcbiAgICAgICAgICAgICAgICB9ICAsXG4gICAgICAgICAgICAgICAgXCJtb2R1bGF0aW9uXCIgIDoge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIiAgOiBcInNxdWFyZVwiXG4gICAgICAgICAgICAgICAgfSAgLFxuICAgICAgICAgICAgICAgIFwibW9kdWxhdGlvbkVudmVsb3BlXCIgIDoge1xuICAgICAgICAgICAgICAgICAgICBcImF0dGFja1wiICA6IDAuMDEgLFxuICAgICAgICAgICAgICAgICAgICBcImRlY2F5XCIgIDogMC4wMiAsXG4gICAgICAgICAgICAgICAgICAgIFwic3VzdGFpblwiICA6IDAuMDMgLFxuICAgICAgICAgICAgICAgICAgICBcInJlbGVhc2VcIiAgOiAwLjAzM1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJwb3J0YW1lbnRvXCIgOiAwLjAxIFxuICAgICAgICAgICAgfSkuY29ubmVjdChmcmVldmVyYikpO1xuXHR9XG5cdHAuc2V0dXAgPSAoKSA9PiB7XG5cdFx0bGV0IGNhbnZhcyA9IHAuY3JlYXRlQ2FudmFzKDgwMCw4MDAsIHAuV0VCR0wpO1xuXHRcdHAuc21vb3RoKCk7XG5cblx0XHRsZXQgb3B0ID0ge31cbiAgXHRcdG9wdC5lcHNpbG9uID0gMzA7IC8vIGVwc2lsb24gaXMgbGVhcm5pbmcgcmF0ZSAoMTAgPSBkZWZhdWx0KVxuICBcdFx0b3B0LnBlcnBsZXhpdHkgPSAzMDsgLy8gcm91Z2hseSBob3cgbWFueSBuZWlnaGJvcnMgZWFjaCBwb2ludCBpbmZsdWVuY2VzICgzMCA9IGRlZmF1bHQpXG4gIFx0XHRvcHQuZGltID0gMzsgLy8gZGltZW5zaW9uYWxpdHkgb2YgdGhlIGVtYmVkZGluZyAoMiA9IGRlZmF1bHQpXG5cdFx0XG4gIFx0XHR0c25lID0gbmV3IHRzbmVqcy50U05FKG9wdCk7IC8vIGNyZWF0ZSBhIHRTTkUgaW5zdGFuY2VcbiAgXHRcdFxuICBcdFx0Zm9yKGxldCBpPTA7IGk8bnVtOyBpKyspIHtcbiAgXHRcdCAgXG4gIFx0XHQgIC8vIGdlbmVyYXRpbmcgcmFuZG9tIGRhdGFcbiAgXHRcdCAgbGV0IGYxID0gcC5yYW5kb20oMjU1KTtcbiAgXHRcdCAgbGV0IGYyID0gcC5yYW5kb20oMjU1KTtcbiAgXHRcdCAgbGV0IGYzID0gcC5yYW5kb20oMjU1KTtcblx0XHRcbiAgXHRcdCAgLy8gYWRkIGdlbmVyYXRlZCBkYXRhIHRvIGFuIGFycmF5IG9mIGZlYXR1cmUgdmVjdG9yc1xuICBcdFx0ICBmZWF0dXJlcy5wdXNoKCBbZjEsIGYyLCBmM10gKTsgLy8gZmVhdHVyZSB2ZWN0b3IncyBsZW5ndGggKGNvbXBvbmVudHMpIGNhbiBiZSBzZWxlY3RlZCBmcmVlbHlcblx0XHRcbiAgXHRcdCAgbGV0IGQgPSBuZXcgRGF0YVBvaW50KCk7XG4gIFx0XHQgIC8vIHVzZSBkYXRhIGFzIGNvbG9yIGNvbXBvbmVudHMgZm9yIHRoZSBkYXRhcG9pbnRzXG4gIFx0XHQgIGQuc2V0Q29sKCBmMSwgZjIsIGYzLCAyNTUgKS5zZXRTaXplKGYyLzIwICsgMik7XG4gIFx0XHRcdGRhdGEucHVzaChkKTtcbiAgXHRcdH1cbiAgXHRcdFxuICBcdFx0dHNuZS5pbml0RGF0YVJhdyhmZWF0dXJlcyk7XG4gIFx0XHRZID0gdHNuZS5nZXRTb2x1dGlvbigpOyAvLyBZIGlzIGFuIGFycmF5IG9mIDItRCBwb2ludHMgdGhhdCB5b3UgY2FuIHBsb3Rcblx0fVxuXG5cdGxldCB6cCA9IDA7XG5cdHAuZHJhdyA9ICgpID0+IHtcblx0XHRwLmNhbWVyYShwLnNpbihwLmZyYW1lQ291bnQvMzAwKSAqIDEwMCwgcC5jb3MocC5mcmFtZUNvdW50LzMwMCkgKiAxMDAsIDgwMCwgMCwgMCwgMCwgMCwgMSwgMCk7XG5cdFx0cC5iYWNrZ3JvdW5kKDApO1xuXHRcdHAuZnJhbWVSYXRlKDYwKTtcblxuXHRcdGxldCB0YXJnZXRYID0gcC5jb25zdHJhaW4ocC5tb3VzZVggKyBwLnNpbigtcC5mcmFtZUNvdW50LzIwKSAqIDgwLDAscC53aWR0aCk7XG4gIFx0XHRsZXQgZHggPSB0YXJnZXRYIC0geDtcbiAgXHRcdHggKz0gZHggKiBlYXNpbmc7XG5cbiAgXHRcdGxldCB0YXJnZXRZID0gcC5jb25zdHJhaW4ocC5tb3VzZVkgKyBwLmNvcygtcC5mcmFtZUNvdW50LzIwKSAqIDgwLDAscC5oZWlnaHQpO1xuICBcdFx0bGV0IGR5ID0gdGFyZ2V0WSAtIHk7XG4gIFx0XHR5ICs9IGR5ICogZWFzaW5nO1xuXHRcdFxuXHRcdHBsYXlIZWFkeCA9IHAubWFwKHgsMCxwLndpZHRoLC0yNTAsMjUwKTtcblx0XHRwbGF5SGVhZHkgPSBwLm1hcCh5LDAscC5oZWlnaHQsLTI1MCwyNTApO1xuXHRcdFxuXHRcdC8qaWYocGxheUhlYWR4ID4gMjUwKSB7XG5cdFx0XHRwbGF5SGVhZHggPSAtMjUwO1xuXHRcdFx0Zm9yKGxldCBpPTA7IGk8IFkubGVuZ3RoOyBpKyspIHtcbiAgICBcdFx0XHRkYXRhW2ldLmNhblRyaWcgPSB0cnVlO1xuICAgIFx0XHR9XG5cdFx0fSovXG5cblx0XHRwYW5uZXIucGFuLnZhbHVlID0gcGxheUhlYWR4IC8gMjUwO1xuXG5cdFx0cC5wb2ludExpZ2h0KDE1MCwgMTUwLCAxNTAsIDUwMCwgMCwgMjAwKTtcblx0XHQvL3AuZGlyZWN0aW9uYWxMaWdodCgyNTUsMjU1LDI1NSwgLTEsIDAsIC0xKTtcblx0XHRwLmFtYmllbnRMaWdodCgyNTUpO1xuXG5cdFx0Ly9wLnJvdGF0ZVkocC5zaW4ocC5mcmFtZUNvdW50LzEwMDApICogcC5QSS80KTtcblx0XHQvL3Aucm90YXRlWCgtcC5mcmFtZUNvdW50LzEwMDApO1xuXG5cdFx0enAgPSBwLnNpbihwLmZyYW1lQ291bnQvMTAwKSAqIDI1MDtcblx0XHRwLnB1c2goKTtcblx0XHRwLnRyYW5zbGF0ZShwbGF5SGVhZHgsMCwwKTtcblx0XHRwLmZpbGwoMjU1LDEyMCk7XG5cdFx0cC5ub1N0cm9rZSgpO1xuXHRcdHAuYm94KDUsNTAwLDApO1xuXHRcdHAucG9wKCk7XG5cblx0XHRwLnB1c2goKTtcblx0XHRwLnRyYW5zbGF0ZSgwLHBsYXlIZWFkeSwwKTtcblx0XHRwLmZpbGwoMjU1LDEyMCk7XG5cdFx0cC5ub1N0cm9rZSgpO1xuXHRcdHAuYm94KDUwMCw1LDApO1xuXHRcdHAucG9wKCk7XG5cblx0XHRwLnB1c2goKTtcblx0XHRwLnRyYW5zbGF0ZShwbGF5SGVhZHgscGxheUhlYWR5LDApO1xuXHRcdHAuZmlsbCgyNTUsMCwwLDQwKTtcblx0XHRwLm5vU3Ryb2tlKCk7XG5cdFx0cC5ib3goNSw1LDUwMCk7XG5cdFx0cC5wb3AoKTtcblxuXHRcdHN0ZXBDb3VudCsrO1xuICBcdFx0aWYoc3RlcENvdW50PDYwMCkge1xuICAgIFx0XHR0c25lLnN0ZXAoKTtcbiAgXHRcdH1cblxuICBcdFx0Zm9yKGxldCBpPTA7IGk8IFkubGVuZ3RoOyBpKyspIHtcbiAgICBcdFx0ZGF0YVtpXS5zZXRQb3MoIHAuY3JlYXRlVmVjdG9yKFlbaV1bMF0gKiAxMCwgWVtpXVsxXSAqIDEwLCBZW2ldWzJdICogMTApICkuZHJhd1BvaW50KCk7XG4gICAgXHRcdGlmKHAuZGlzdChkYXRhW2ldLnBvcy54LGRhdGFbaV0ucG9zLnksMCwgcGxheUhlYWR4LHBsYXlIZWFkeSwgMCkgPD0gMTApIHtcbiAgICBcdFx0XHRkYXRhW2ldLnRyaWcgPSAyNTU7XG4gICAgXHRcdH0gZWxzZSB7XG4gICAgXHRcdFx0ZGF0YVtpXS5jYW5UcmlnID0gdHJ1ZTtcbiAgICBcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHRwLm5vRmlsbCgpO1xuICBcdFx0cC5zdHJva2UoMjU1LCA1MCk7XG4gIFx0XHRwLmJveCg1MDApO1xuXHR9XG5cbiAgcC5rZXlQcmVzc2VkID0gKCkgPT4ge1xuICAgICAgICBpZihwLmtleSA9PSAnbScpIHtcbiAgICAgICAgICAgIHAuc2F2ZShEYXRlLm5vdygpICsgXCIuanBnXCIpO1xuICAgICAgICB9XG4gIH1cbiAgcC5tb3VzZVByZXNzZWQgPSAoKSA9PiB7XG4gICAgICAgIFN0YXJ0QXVkaW9Db250ZXh0KFRvbmUuY29udGV4dCkudGhlbihmdW5jdGlvbigpe30pO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc2tldGNoO1xubmV3IHA1KHNrZXRjaCk7XG5cblxuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsIGV2YWwpKFwidGhpc1wiKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/Day-21-Dimension-Reduction/package-lock.json b/Day-21-Dimension-Reduction/package-lock.json index b67f6c0..f6535f6 100644 --- a/Day-21-Dimension-Reduction/package-lock.json +++ b/Day-21-Dimension-Reduction/package-lock.json @@ -29,8 +29,8 @@ "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", "requires": { - "@protobufjs/aspromise": "1.1.2", - "@protobufjs/inquire": "1.1.0" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, "@protobufjs/float": { @@ -73,8 +73,8 @@ "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-0.6.6.tgz", "integrity": "sha512-zDpDY6hyoXw6yEHd8CZrs7VL1Kl/kFhW5JcJWC7h2xqsMxk09v7OSNa4YQfJWJQeCXVStjK9VOqLSkwTETwPrw==", "requires": { - "@types/long": "3.0.32", - "protobufjs": "6.8.8" + "@types/long": "~3.0.32", + "protobufjs": "~6.8.6" } }, "@tensorflow/tfjs-core": { @@ -192,7 +192,7 @@ "integrity": "sha512-HRcWcY+YWt4+s/CvQn+vnSPfRaD4KkuzQFt5MNaELXXHSjelHlSEA8ZcqT69q0GTIuLWZ6JaoKar4yWHVpZHsQ==", "dev": true, "requires": { - "@xtuc/ieee754": "1.2.0" + "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { @@ -308,7 +308,7 @@ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "2.1.21", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -324,7 +324,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "5.7.3" + "acorn": "^5.0.0" } }, "ajv": { @@ -333,10 +333,10 @@ "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", "dev": true, "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-errors": { @@ -375,7 +375,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.3" + "color-convert": "^1.9.0" } }, "anymatch": { @@ -384,8 +384,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "aproba": { @@ -424,7 +424,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -445,9 +445,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -512,13 +512,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -527,7 +527,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -536,7 +536,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -545,7 +545,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -554,9 +554,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -604,15 +604,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", + "depd": "~1.1.2", + "http-errors": "~1.6.3", "iconv-lite": "0.4.23", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.2", "raw-body": "2.3.3", - "type-is": "1.6.16" + "type-is": "~1.6.16" } }, "bonjour": { @@ -621,12 +621,12 @@ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "array-flatten": "2.1.1", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, "brace-expansion": { @@ -635,7 +635,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -645,16 +645,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -663,7 +663,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -680,12 +680,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -694,9 +694,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -705,10 +705,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -717,8 +717,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -727,13 +727,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.1", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -742,7 +742,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "buffer": { @@ -751,9 +751,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-from": { @@ -792,19 +792,19 @@ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { - "bluebird": "3.5.2", - "chownr": "1.1.1", - "glob": "7.1.3", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.3", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.3.0", - "unique-filename": "1.1.1", - "y18n": "4.0.0" + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" } }, "cache-base": { @@ -813,15 +813,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "camelcase": { @@ -836,9 +836,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chokidar": { @@ -847,19 +847,19 @@ "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.4", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "lodash.debounce": "4.0.8", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.1.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, "chownr": { @@ -874,7 +874,7 @@ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", "dev": true, "requires": { - "tslib": "1.9.3" + "tslib": "^1.9.0" } }, "cipher-base": { @@ -883,8 +883,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "class-utils": { @@ -893,10 +893,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -905,7 +905,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -916,9 +916,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "code-point-at": { @@ -933,8 +933,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { @@ -976,7 +976,7 @@ "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", "dev": true, "requires": { - "mime-db": "1.37.0" + "mime-db": ">= 1.36.0 < 2" } }, "compression": { @@ -985,13 +985,13 @@ "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "2.0.15", + "compressible": "~2.0.14", "debug": "2.6.9", - "on-headers": "1.0.1", + "on-headers": "~1.0.1", "safe-buffer": "5.1.2", - "vary": "1.1.2" + "vary": "~1.1.2" } }, "concat-map": { @@ -1006,10 +1006,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "connect-history-api-fallback": { @@ -1024,7 +1024,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -1063,12 +1063,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -1089,8 +1089,8 @@ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -1099,11 +1099,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -1112,12 +1112,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -1126,11 +1126,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { @@ -1139,17 +1139,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.17", - "public-encrypt": "4.0.3", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "cyclist": { @@ -1200,8 +1200,8 @@ "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", "dev": true, "requires": { - "execa": "0.10.0", - "ip-regex": "2.1.0" + "execa": "^0.10.0", + "ip-regex": "^2.1.0" } }, "define-property": { @@ -1210,8 +1210,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -1220,7 +1220,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1229,7 +1229,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1238,9 +1238,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1251,12 +1251,12 @@ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" } }, "depd": { @@ -1271,8 +1271,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "destroy": { @@ -1293,9 +1293,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "dns-equal": { @@ -1310,8 +1310,8 @@ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "dev": true, "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.2" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, "dns-txt": { @@ -1320,7 +1320,7 @@ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { - "buffer-indexof": "1.1.1" + "buffer-indexof": "^1.0.0" } }, "domain-browser": { @@ -1335,10 +1335,10 @@ "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "ee-first": { @@ -1353,13 +1353,13 @@ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.5", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -1380,7 +1380,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "enhanced-resolve": { @@ -1389,9 +1389,9 @@ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.1.0" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "errno": { @@ -1400,7 +1400,7 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "escape-html": { @@ -1421,8 +1421,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "esrecurse": { @@ -1431,7 +1431,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -1464,7 +1464,7 @@ "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "original": "1.0.2" + "original": "^1.0.0" } }, "evp_bytestokey": { @@ -1473,8 +1473,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -1483,13 +1483,13 @@ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "6.0.5", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "expand-brackets": { @@ -1498,13 +1498,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1513,7 +1513,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -1522,7 +1522,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1533,36 +1533,36 @@ "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.3", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", + "proxy-addr": "~2.0.4", "qs": "6.5.2", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.2", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "array-flatten": { @@ -1579,8 +1579,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -1589,7 +1589,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -1600,14 +1600,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1616,7 +1616,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -1625,7 +1625,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -1634,7 +1634,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1643,7 +1643,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1652,9 +1652,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1677,7 +1677,7 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "fill-range": { @@ -1686,10 +1686,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -1698,7 +1698,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1710,12 +1710,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" } }, "find-cache-dir": { @@ -1724,9 +1724,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { @@ -1735,7 +1735,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "flush-write-stream": { @@ -1744,8 +1744,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "follow-redirects": { @@ -1754,7 +1754,7 @@ "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==", "dev": true, "requires": { - "debug": "3.1.0" + "debug": "=3.1.0" }, "dependencies": { "debug": { @@ -1786,7 +1786,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -1801,8 +1801,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-write-stream-atomic": { @@ -1811,10 +1811,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -1830,8 +1830,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.11.1", - "node-pre-gyp": "0.10.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -1857,8 +1857,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -1871,7 +1871,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1935,7 +1935,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -1950,14 +1950,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -1966,12 +1966,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -1986,7 +1986,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { @@ -1995,7 +1995,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -2004,8 +2004,8 @@ "dev": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2024,7 +2024,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -2038,7 +2038,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -2051,8 +2051,8 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, "minizlib": { @@ -2061,7 +2061,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -2084,9 +2084,9 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -2095,16 +2095,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -2113,8 +2113,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -2129,8 +2129,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -2139,10 +2139,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -2161,7 +2161,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -2182,8 +2182,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -2204,10 +2204,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -2224,13 +2224,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -2239,7 +2239,7 @@ "dev": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -2282,9 +2282,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -2293,7 +2293,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -2301,7 +2301,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -2316,13 +2316,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -2337,7 +2337,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -2376,12 +2376,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { @@ -2390,8 +2390,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -2400,7 +2400,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -2417,11 +2417,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.3", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "pify": { @@ -2461,9 +2461,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -2472,8 +2472,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -2482,7 +2482,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2493,8 +2493,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { @@ -2503,8 +2503,8 @@ "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "hmac-drbg": { @@ -2513,9 +2513,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.5", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hpack.js": { @@ -2524,10 +2524,10 @@ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { - "inherits": "2.0.3", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "wbuf": "1.7.3" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, "html-entities": { @@ -2548,10 +2548,10 @@ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.4.0" + "statuses": ">= 1.4.0 < 2" } }, "http-parser-js": { @@ -2566,9 +2566,9 @@ "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "dev": true, "requires": { - "eventemitter3": "3.1.0", - "follow-redirects": "1.5.9", - "requires-port": "1.0.0" + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, "http-proxy-middleware": { @@ -2577,10 +2577,10 @@ "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", "dev": true, "requires": { - "http-proxy": "1.17.0", - "is-glob": "4.0.0", - "lodash": "4.17.11", - "micromatch": "3.1.10" + "http-proxy": "^1.16.2", + "is-glob": "^4.0.0", + "lodash": "^4.17.5", + "micromatch": "^3.1.9" } }, "https-browserify": { @@ -2595,7 +2595,7 @@ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { @@ -2616,8 +2616,8 @@ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "3.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" }, "dependencies": { "find-up": { @@ -2626,7 +2626,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -2635,8 +2635,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -2645,7 +2645,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -2654,7 +2654,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.0.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -2669,7 +2669,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "3.0.0" + "find-up": "^3.0.0" } } } @@ -2692,8 +2692,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2708,8 +2708,8 @@ "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", "dev": true, "requires": { - "default-gateway": "2.7.2", - "ipaddr.js": "1.8.0" + "default-gateway": "^2.6.0", + "ipaddr.js": "^1.5.2" } }, "interpret": { @@ -2748,7 +2748,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2757,7 +2757,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2768,7 +2768,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.12.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -2783,7 +2783,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2792,7 +2792,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2803,9 +2803,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -2840,7 +2840,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -2849,7 +2849,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2858,7 +2858,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2875,7 +2875,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -2884,7 +2884,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-object": { @@ -2893,7 +2893,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-stream": { @@ -2974,7 +2974,7 @@ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "2.0.0" + "invert-kv": "^2.0.0" } }, "loader-runner": { @@ -2989,9 +2989,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -3000,8 +3000,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -3032,8 +3032,8 @@ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "make-dir": { @@ -3042,7 +3042,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "map-age-cleaner": { @@ -3051,7 +3051,7 @@ "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", "dev": true, "requires": { - "p-defer": "1.0.0" + "p-defer": "^1.0.0" } }, "map-cache": { @@ -3066,7 +3066,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "md5.js": { @@ -3075,9 +3075,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "media-typer": { @@ -3092,9 +3092,9 @@ "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "dev": true, "requires": { - "map-age-cleaner": "0.1.2", - "mimic-fn": "1.2.0", - "p-is-promise": "1.1.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" } }, "memory-fs": { @@ -3103,8 +3103,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "merge-descriptors": { @@ -3125,19 +3125,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "miller-rabin": { @@ -3146,8 +3146,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { @@ -3168,7 +3168,7 @@ "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "dev": true, "requires": { - "mime-db": "1.37.0" + "mime-db": "~1.37.0" } }, "mimic-fn": { @@ -3195,7 +3195,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3210,16 +3210,16 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.1", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.3" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -3228,8 +3228,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -3238,7 +3238,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -3258,12 +3258,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -3278,8 +3278,8 @@ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "dns-packet": "1.3.1", - "thunky": "1.0.3" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, "multicast-dns-service-types": { @@ -3301,17 +3301,17 @@ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "negotiator": { @@ -3344,28 +3344,28 @@ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.4", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" }, "dependencies": { @@ -3383,7 +3383,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "npm-run-path": { @@ -3392,7 +3392,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { @@ -3413,9 +3413,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -3424,7 +3424,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -3433,7 +3433,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3444,7 +3444,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.pick": { @@ -3453,7 +3453,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "obuf": { @@ -3483,7 +3483,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "opn": { @@ -3492,7 +3492,7 @@ "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", "dev": true, "requires": { - "is-wsl": "1.1.0" + "is-wsl": "^1.1.0" } }, "original": { @@ -3501,7 +3501,7 @@ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "requires": { - "url-parse": "1.4.3" + "url-parse": "^1.4.3" } }, "os-browserify": { @@ -3516,9 +3516,9 @@ "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", "dev": true, "requires": { - "execa": "0.10.0", - "lcid": "2.0.0", - "mem": "4.0.0" + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "p-defer": { @@ -3545,7 +3545,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -3554,7 +3554,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.3.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -3586,9 +3586,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "parse-asn1": { @@ -3597,11 +3597,11 @@ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.17" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parseurl": { @@ -3664,11 +3664,11 @@ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "pify": { @@ -3689,7 +3689,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -3698,7 +3698,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "portfinder": { @@ -3707,9 +3707,9 @@ "integrity": "sha512-23aeQKW9KgHe6citUrG3r9HjeX6vls0h713TAa+CwTKZwNIr/pD2ApaxYF4Um3ZZyq4ar+Siv3+fhoHaIwSOSw==", "dev": true, "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" } }, "posix-character-classes": { @@ -3741,19 +3741,19 @@ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", "requires": { - "@protobufjs/aspromise": "1.1.2", - "@protobufjs/base64": "1.1.2", - "@protobufjs/codegen": "2.0.4", - "@protobufjs/eventemitter": "1.1.0", - "@protobufjs/fetch": "1.1.0", - "@protobufjs/float": "1.0.2", - "@protobufjs/inquire": "1.1.0", - "@protobufjs/path": "1.1.2", - "@protobufjs/pool": "1.1.0", - "@protobufjs/utf8": "1.1.0", - "@types/long": "4.0.0", - "@types/node": "10.12.6", - "long": "4.0.0" + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" }, "dependencies": { "@types/long": { @@ -3769,7 +3769,7 @@ "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "dev": true, "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.8.0" } }, @@ -3791,12 +3791,12 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pump": { @@ -3805,8 +3805,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -3815,9 +3815,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "3.6.1", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, "punycode": { @@ -3856,7 +3856,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -3865,8 +3865,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -3893,13 +3893,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -3908,9 +3908,9 @@ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "micromatch": "3.1.10", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "regex-not": { @@ -3919,8 +3919,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "remove-trailing-separator": { @@ -3965,7 +3965,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "resolve-from": { @@ -3992,7 +3992,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.3" + "glob": "^7.0.5" } }, "ripemd160": { @@ -4001,8 +4001,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-queue": { @@ -4011,7 +4011,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "safe-buffer": { @@ -4026,7 +4026,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "safer-buffer": { @@ -4041,8 +4041,8 @@ "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "dev": true, "requires": { - "ajv": "6.5.4", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, "seedrandom": { @@ -4078,18 +4078,18 @@ "dev": true, "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" } }, "serialize-javascript": { @@ -4104,13 +4104,13 @@ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.21", - "parseurl": "1.3.2" + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" } }, "serve-static": { @@ -4119,9 +4119,9 @@ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.2" } }, @@ -4137,10 +4137,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -4149,7 +4149,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -4172,8 +4172,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shebang-command": { @@ -4182,7 +4182,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -4203,14 +4203,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -4219,7 +4219,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -4228,7 +4228,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -4239,9 +4239,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -4250,7 +4250,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -4259,7 +4259,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -4268,7 +4268,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -4277,9 +4277,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -4290,7 +4290,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -4299,7 +4299,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4310,8 +4310,8 @@ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", "dev": true, "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.3.2" + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" } }, "sockjs-client": { @@ -4320,12 +4320,12 @@ "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "dev": true, "requires": { - "debug": "3.2.6", - "eventsource": "1.0.7", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.4.3" + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" }, "dependencies": { "debug": { @@ -4334,7 +4334,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "faye-websocket": { @@ -4343,7 +4343,7 @@ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "ms": { @@ -4372,11 +4372,11 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { @@ -4391,12 +4391,12 @@ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", "dev": true, "requires": { - "debug": "2.6.9", - "handle-thing": "1.2.5", - "http-deceiver": "1.2.7", - "safe-buffer": "5.1.2", - "select-hose": "2.0.0", - "spdy-transport": "2.1.0" + "debug": "^2.6.8", + "handle-thing": "^1.2.5", + "http-deceiver": "^1.2.7", + "safe-buffer": "^5.0.1", + "select-hose": "^2.0.0", + "spdy-transport": "^2.0.18" } }, "spdy-transport": { @@ -4405,13 +4405,13 @@ "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", "dev": true, "requires": { - "debug": "2.6.9", - "detect-node": "2.0.4", - "hpack.js": "2.1.6", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2", - "wbuf": "1.7.3" + "debug": "^2.6.8", + "detect-node": "^2.0.3", + "hpack.js": "^2.1.6", + "obuf": "^1.1.1", + "readable-stream": "^2.2.9", + "safe-buffer": "^5.0.1", + "wbuf": "^1.7.2" } }, "split-string": { @@ -4420,7 +4420,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "ssri": { @@ -4429,17 +4429,22 @@ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.1" } }, + "startaudiocontext": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/startaudiocontext/-/startaudiocontext-1.2.1.tgz", + "integrity": "sha1-RtLKtUYseRGArMciPju7wycshZU=" + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -4448,7 +4453,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -4465,8 +4470,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-each": { @@ -4475,8 +4480,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { @@ -4485,11 +4490,11 @@ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -4504,8 +4509,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string_decoder": { @@ -4514,7 +4519,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -4523,7 +4528,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "strip-eof": { @@ -4538,7 +4543,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "tapable": { @@ -4552,8 +4557,8 @@ "resolved": "https://registry.npmjs.org/tensorjs/-/tensorjs-0.2.0.tgz", "integrity": "sha1-zjSJN6Cj+j6M6IW7S0ErUFT5abs=", "requires": { - "google-protobuf": "3.6.1", - "lodash": "4.17.11" + "google-protobuf": "^3.2.0-rc.2", + "lodash": "^4.17.4" } }, "tfjs": { @@ -4561,7 +4566,7 @@ "resolved": "https://registry.npmjs.org/tfjs/-/tfjs-0.6.0.tgz", "integrity": "sha1-Nw7l0hEvVz5ju7cM01C5BnfhGcw=", "requires": { - "tensorjs": "0.2.0" + "tensorjs": "^0.2.0" } }, "through2": { @@ -4570,8 +4575,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "thunky": { @@ -4586,7 +4591,7 @@ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "to-arraybuffer": { @@ -4601,7 +4606,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4610,7 +4615,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4621,10 +4626,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -4633,8 +4638,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "tone": { @@ -4666,7 +4671,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.21" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -4681,8 +4686,8 @@ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "dev": true, "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" + "commander": "~2.13.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -4699,14 +4704,14 @@ "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", "dev": true, "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.7", - "serialize-javascript": "1.5.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.3.0", - "worker-farm": "1.6.0" + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { "source-map": { @@ -4723,10 +4728,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -4735,7 +4740,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -4744,10 +4749,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -4758,7 +4763,7 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "2.0.1" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -4767,7 +4772,7 @@ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "unpipe": { @@ -4782,8 +4787,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -4792,9 +4797,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -4828,7 +4833,7 @@ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "urix": { @@ -4861,8 +4866,8 @@ "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==", "dev": true, "requires": { - "querystringify": "2.1.0", - "requires-port": "1.0.0" + "querystringify": "^2.0.0", + "requires-port": "^1.0.0" } }, "use": { @@ -4925,9 +4930,9 @@ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "dev": true, "requires": { - "chokidar": "2.0.4", - "graceful-fs": "4.1.11", - "neo-async": "2.6.0" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" } }, "wbuf": { @@ -4936,7 +4941,7 @@ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { - "minimalistic-assert": "1.0.1" + "minimalistic-assert": "^1.0.0" } }, "webpack": { @@ -4949,26 +4954,26 @@ "@webassemblyjs/helper-module-context": "1.7.10", "@webassemblyjs/wasm-edit": "1.7.10", "@webassemblyjs/wasm-parser": "1.7.10", - "acorn": "5.7.3", - "acorn-dynamic-import": "3.0.0", - "ajv": "6.5.4", - "ajv-keywords": "3.2.0", - "chrome-trace-event": "1.0.0", - "enhanced-resolve": "4.1.0", - "eslint-scope": "4.0.0", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.3.1", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "neo-async": "2.6.0", - "node-libs-browser": "2.1.0", - "schema-utils": "0.4.7", - "tapable": "1.1.0", - "uglifyjs-webpack-plugin": "1.3.0", - "watchpack": "1.6.0", - "webpack-sources": "1.3.0" + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.1.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" } }, "webpack-cli": { @@ -4977,16 +4982,16 @@ "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", "dev": true, "requires": { - "chalk": "2.4.1", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "global-modules-path": "2.3.0", - "import-local": "2.0.0", - "interpret": "1.1.0", - "loader-utils": "1.1.0", - "supports-color": "5.5.0", - "v8-compile-cache": "2.0.2", - "yargs": "12.0.2" + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.0", + "global-modules-path": "^2.3.0", + "import-local": "^2.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.2" } }, "webpack-dev-middleware": { @@ -4995,10 +5000,10 @@ "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", "dev": true, "requires": { - "memory-fs": "0.4.1", - "mime": "2.3.1", - "range-parser": "1.2.0", - "webpack-log": "2.0.0" + "memory-fs": "~0.4.1", + "mime": "^2.3.1", + "range-parser": "^1.0.3", + "webpack-log": "^2.0.0" }, "dependencies": { "mime": { @@ -5016,32 +5021,32 @@ "dev": true, "requires": { "ansi-html": "0.0.7", - "bonjour": "3.5.0", - "chokidar": "2.0.4", - "compression": "1.7.3", - "connect-history-api-fallback": "1.5.0", - "debug": "3.2.6", - "del": "3.0.0", - "express": "4.16.4", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.18.0", - "import-local": "2.0.0", - "internal-ip": "3.0.1", - "ip": "1.1.5", - "killable": "1.0.1", - "loglevel": "1.6.1", - "opn": "5.4.0", - "portfinder": "1.0.19", - "schema-utils": "1.0.0", - "selfsigned": "1.10.4", - "serve-index": "1.9.1", + "bonjour": "^3.5.0", + "chokidar": "^2.0.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "~0.18.0", + "import-local": "^2.0.0", + "internal-ip": "^3.0.1", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "schema-utils": "^1.0.0", + "selfsigned": "^1.9.1", + "serve-index": "^1.7.2", "sockjs": "0.3.19", "sockjs-client": "1.3.0", - "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "5.5.0", + "spdy": "^3.4.1", + "strip-ansi": "^3.0.0", + "supports-color": "^5.1.0", "webpack-dev-middleware": "3.4.0", - "webpack-log": "2.0.0", + "webpack-log": "^2.0.0", "yargs": "12.0.2" }, "dependencies": { @@ -5057,7 +5062,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "ms": { @@ -5072,9 +5077,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.5.4", - "ajv-errors": "1.0.0", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, "strip-ansi": { @@ -5083,7 +5088,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -5094,8 +5099,8 @@ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "ansi-colors": "3.2.1", - "uuid": "3.3.2" + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" } }, "webpack-sources": { @@ -5104,8 +5109,8 @@ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { - "source-list-map": "2.0.1", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -5122,8 +5127,8 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": "0.5.0", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -5138,7 +5143,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -5153,7 +5158,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -5162,8 +5167,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -5178,7 +5183,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -5187,9 +5192,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -5198,7 +5203,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -5239,18 +5244,18 @@ "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "2.0.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "10.1.0" + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" }, "dependencies": { "find-up": { @@ -5259,7 +5264,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -5268,8 +5273,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -5278,7 +5283,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -5287,7 +5292,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.0.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -5304,7 +5309,7 @@ "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } diff --git a/Day-21-Dimension-Reduction/package.json b/Day-21-Dimension-Reduction/package.json index b95a951..773e7ae 100644 --- a/Day-21-Dimension-Reduction/package.json +++ b/Day-21-Dimension-Reduction/package.json @@ -19,6 +19,7 @@ "dependencies": { "@tensorflow/tfjs": "^0.13.4", "p5": "^0.7.2", + "startaudiocontext": "^1.2.1", "tfjs": "^0.6.0", "tone": "^0.12.80", "tsne": "^1.0.1" diff --git a/Day-21-Dimension-Reduction/src/index.js b/Day-21-Dimension-Reduction/src/index.js index a6984f9..ba95154 100644 --- a/Day-21-Dimension-Reduction/src/index.js +++ b/Day-21-Dimension-Reduction/src/index.js @@ -1,6 +1,7 @@ import p5 from 'p5/lib/p5.min'; import Tone from 'tone'; import tsnejs from 'tsne'; +import StartAudioContext from 'startaudiocontext'; const sketch = (p) => { class DataPoint { @@ -217,7 +218,10 @@ const sketch = (p) => { if(p.key == 'm') { p.save(Date.now() + ".jpg"); } - } + } + p.mousePressed = () => { + StartAudioContext(Tone.context).then(function(){}); + } } export default sketch; diff --git a/Day-22-Hexagon-Tiling/dist/main.js b/Day-22-Hexagon-Tiling/dist/main.js index 93e3bc1..3120ac2 100644 --- a/Day-22-Hexagon-Tiling/dist/main.js +++ b/Day-22-Hexagon-Tiling/dist/main.js @@ -1,8 +1,14 @@ -!function(t){var e={};function i(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=t,i.c=e,i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)i.d(r,n,function(e){return t[e]}.bind(null,n));return r},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=2)}([function(t,e,i){var r;void 0===(r=function(){return function(){"use strict";var t;function e(e){e(t)} +!function(t){var e={};function i(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=t,i.c=e,i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)i.d(r,n,function(e){return t[e]}.bind(null,n));return r},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=3)}([function(t,e,i){var r;void 0===(r=function(){return function(){"use strict";var t;function e(e){e(t)} /** * Tone.js * @author Yotam Mann * @license http://opensource.org/licenses/MIT MIT License * @copyright 2014-2018 Yotam Mann - */return function(e){t=e()}(function(){var t=function(){if(!(this instanceof t))throw new Error("constructor needs to be called with the 'new' keyword")};t.prototype.toString=function(){for(var e in t){var i=e[0].match(/^[A-Z]$/),r=t[e]===this.constructor;if(t.isFunction(t[e])&&i&&r)return e}return"Tone"},t.prototype.dispose=function(){return this},t.prototype.set=function(e,i,r){if(t.isObject(e))r=i;else if(t.isString(e)){var n={};n[e]=i,e=n}t:for(var o in e){i=e[o];var s=this;if(-1!==o.indexOf(".")){for(var a=o.split("."),h=0;hthis.memory){var r=this.length-this.memory;this._timeline.splice(0,r)}return this},t.Timeline.prototype.remove=function(t){var e=this._timeline.indexOf(t);return-1!==e&&this._timeline.splice(e,1),this},t.Timeline.prototype.get=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return-1!==r?this._timeline[r]:null},t.Timeline.prototype.peek=function(){return this._timeline[0]},t.Timeline.prototype.shift=function(){return this._timeline.shift()},t.Timeline.prototype.getAfter=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return r+10&&this._timeline[r-1][i]=0?this._timeline[n-1]:null},t.Timeline.prototype.cancel=function(t){if(this._timeline.length>1){var e=this._search(t);if(e>=0)if(this._timeline[e].time===t){for(var i=e;i>=0&&this._timeline[i].time===t;i--)e=i;this._timeline=this._timeline.slice(0,e)}else this._timeline=this._timeline.slice(0,e+1);else this._timeline=[]}else 1===this._timeline.length&&this._timeline[0].time>=t&&(this._timeline=[]);return this},t.Timeline.prototype.cancelBefore=function(t){var e=this._search(t);return e>=0&&(this._timeline=this._timeline.slice(e+1)),this},t.Timeline.prototype.previousEvent=function(t){var e=this._timeline.indexOf(t);return e>0?this._timeline[e-1]:null},t.Timeline.prototype._search=function(e,i){if(0===this._timeline.length)return-1;i=t.defaultArg(i,"time");var r=0,n=this._timeline.length,o=n;if(n>0&&this._timeline[n-1][i]<=e)return n-1;for(;re)return s;a[i]>e?o=s:r=s+1}return-1},t.Timeline.prototype._iterate=function(e,i,r){i=t.defaultArg(i,0),r=t.defaultArg(r,this._timeline.length-1),this._timeline.slice(i,r+1).forEach(function(t){e.call(this,t)}.bind(this))},t.Timeline.prototype.forEach=function(t){return this._iterate(t),this},t.Timeline.prototype.forEachBefore=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(e,0,i),this},t.Timeline.prototype.forEachAfter=function(t,e){var i=this._search(t);return this._iterate(e,i+1),this},t.Timeline.prototype.forEachBetween=function(t,e,i){var r=this._search(t),n=this._search(e);return-1!==r&&-1!==n?(this._timeline[r].time!==t&&(r+=1),this._timeline[n].time===e&&(n-=1),this._iterate(i,r,n)):-1===r&&this._iterate(i,0,n),this},t.Timeline.prototype.forEachFrom=function(t,e){for(var i=this._search(t);i>=0&&this._timeline[i].time>=t;)i--;return this._iterate(e,i+1),this},t.Timeline.prototype.forEachAtTime=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(function(i){i.time===t&&e.call(this,i)},0,i),this},t.Timeline.prototype.dispose=function(){return t.prototype.dispose.call(this),this._timeline=null,this},t.Timeline}),e(function(t){t.supported&&(!window.hasOwnProperty("OfflineAudioContext")&&window.hasOwnProperty("webkitOfflineAudioContext")&&(window.OfflineAudioContext=window.webkitOfflineAudioContext),new OfflineAudioContext(1,1,44100).startRendering()instanceof Promise||(OfflineAudioContext.prototype._native_startRendering=OfflineAudioContext.prototype.startRendering,OfflineAudioContext.prototype.startRendering=function(){return new Promise(function(t){this.oncomplete=function(e){t(e.renderedBuffer)},this._native_startRendering()}.bind(this))}))}),e(function(t){if(t.supported){!window.hasOwnProperty("AudioContext")&&window.hasOwnProperty("webkitAudioContext")&&(window.AudioContext=window.webkitAudioContext),AudioContext.prototype.close||(AudioContext.prototype.close=function(){return t.isFunction(this.suspend)&&this.suspend(),Promise.resolve()}),AudioContext.prototype.resume||(AudioContext.prototype.resume=function(){return Promise.resolve()}),!AudioContext.prototype.createGain&&AudioContext.prototype.createGainNode&&(AudioContext.prototype.createGain=AudioContext.prototype.createGainNode),!AudioContext.prototype.createDelay&&AudioContext.prototype.createDelayNode&&(AudioContext.prototype.createDelay=AudioContext.prototype.createDelayNode);var e=!1,i=new OfflineAudioContext(1,1,44100),r=new Uint32Array([1179011410,48,1163280727,544501094,16,131073,44100,176400,1048580,1635017060,8,0,0,0,0]).buffer;try{i.decodeAudioData(r)instanceof Promise&&(e=!0)}catch(t){e=!1}e||(AudioContext.prototype._native_decodeAudioData=AudioContext.prototype.decodeAudioData,AudioContext.prototype.decodeAudioData=function(t){return new Promise(function(e,i){this._native_decodeAudioData(t,e,i)}.bind(this))})}}),e(function(t){t.Context=function(){t.Emitter.call(this);var i=t.defaults(arguments,["context"],t.Context);if(!i.context&&(i.context=new window.AudioContext,!i.context))throw new Error("could not create AudioContext. Possibly too many AudioContexts running already.");for(var r in this._context=i.context,this._context)this._defineProperty(this._context,r);this._latencyHint=i.latencyHint,this._constants={},this.lookAhead=i.lookAhead,this._computedUpdateInterval=0,this._ticker=new e(this.emit.bind(this,"tick"),i.clockSource,i.updateInterval),this._timeouts=new t.Timeline,this._timeoutIds=0,this.on("tick",this._timeoutLoop.bind(this))},t.extend(t.Context,t.Emitter),t.Emitter.mixin(t.Context),t.Context.defaults={clockSource:"worker",latencyHint:"interactive",lookAhead:.1,updateInterval:.03},t.Context.prototype._defineProperty=function(e,i){t.isUndef(this[i])&&Object.defineProperty(this,i,{get:function(){return"function"==typeof e[i]?e[i].bind(e):e[i]},set:function(t){e[i]=t}})},t.Context.prototype.now=function(){return this._context.currentTime+this.lookAhead},t.Context.prototype.ready=function(){return new Promise(function(t){"running"===this._context.state?t():this._context.resume().then(function(){t()})}.bind(this))},t.Context.prototype.close=function(){return this._context.close().then(function(){t.Context.emit("close",this)}.bind(this))},t.Context.prototype.getConstant=function(t){if(this._constants[t])return this._constants[t];for(var e=this._context.createBuffer(1,128,this._context.sampleRate),i=e.getChannelData(0),r=0;r1&&(this.input=new Array(t)),1===e?this.output=this.context.createGain():e>1&&(this.output=new Array(e))},Object.defineProperty(t.AudioNode.prototype,"channelCount",{get:function(){return this.output.channelCount},set:function(t){return this.output.channelCount=t}}),Object.defineProperty(t.AudioNode.prototype,"channelCountMode",{get:function(){return this.output.channelCountMode},set:function(t){return this.output.channelCountMode=t}}),Object.defineProperty(t.AudioNode.prototype,"channelInterpretation",{get:function(){return this.output.channelInterpretation},set:function(t){return this.output.channelInterpretation=t}}),Object.defineProperty(t.AudioNode.prototype,"numberOfInputs",{get:function(){return this.input?t.isArray(this.input)?this.input.length:1:0}}),Object.defineProperty(t.AudioNode.prototype,"numberOfOutputs",{get:function(){return this.output?t.isArray(this.output)?this.output.length:1:0}}),t.AudioNode.prototype._onConnect=function(){},t.AudioNode.prototype.connect=function(e,i,r){return e._onConnect&&e._onConnect(this),t.isArray(this.output)?(i=t.defaultArg(i,0),this.output[i].connect(e,0,r)):this.output.connect(e,i,r),this},t.AudioNode.prototype.disconnect=function(e,i,r){t.isArray(this.output)?t.isNumber(e)?this.output[e].disconnect():(i=t.defaultArg(i,0),this.output[i].disconnect(e,0,r)):this.output.disconnect.apply(this.output,arguments)},t.AudioNode.prototype.chain=function(){for(var t=this,e=0;e3&&(r=parseFloat(parseFloat(r).toFixed(3))),[i,e,r].join(":")},t.Time.prototype.toTicks=function(){var t=this._beatsToUnits(1),e=this.valueOf()/t;return Math.round(e*this._getPPQ())},t.Time.prototype.toSeconds=function(){return this.valueOf()},t.Time.prototype.toMidi=function(){return t.Frequency.ftom(this.toFrequency())},t.Time}),e(function(t){return t.TransportTime=function(e,i){if(!(this instanceof t.TransportTime))return new t.TransportTime(e,i);t.Time.call(this,e,i)},t.extend(t.TransportTime,t.Time),t.TransportTime.prototype._now=function(){return t.Transport.seconds},t.TransportTime}),e(function(t){return t.Type={Default:"number",Time:"time",Frequency:"frequency",TransportTime:"transportTime",Ticks:"ticks",NormalRange:"normalRange",AudioRange:"audioRange",Decibels:"db",Interval:"interval",BPM:"bpm",Positive:"positive",Gain:"gain",Cents:"cents",Degrees:"degrees",MIDI:"midi",BarsBeatsSixteenths:"barsBeatsSixteenths",Samples:"samples",Hertz:"hertz",Note:"note",Milliseconds:"milliseconds",Seconds:"seconds",Notation:"notation"},t.prototype.toSeconds=function(e){return t.isNumber(e)?e:t.isUndef(e)?this.now():t.isString(e)?new t.Time(e).toSeconds():e instanceof t.TimeBase?e.toSeconds():void 0},t.prototype.toFrequency=function(e){return t.isNumber(e)?e:t.isString(e)||t.isUndef(e)?new t.Frequency(e).valueOf():e instanceof t.TimeBase?e.toFrequency():void 0},t.prototype.toTicks=function(e){return t.isNumber(e)||t.isString(e)?new t.TransportTime(e).toTicks():t.isUndef(e)?t.Transport.ticks:e instanceof t.TimeBase?e.toTicks():void 0},t}),e(function(t){return t.Param=function(){var e=t.defaults(arguments,["param","units","convert"],t.Param);t.AudioNode.call(this),this._param=this.input=e.param,this.units=e.units,this.convert=e.convert,this.overridden=!1,this._events=new t.Timeline(1e3),t.isDefined(e.value)&&this._param&&(this.value=e.value)},t.extend(t.Param,t.AudioNode),t.Param.defaults={units:t.Type.Default,convert:!0,param:void 0},Object.defineProperty(t.Param.prototype,"value",{get:function(){var t=this.now();return this._toUnits(this.getValueAtTime(t))},set:function(t){this._initialValue=this._fromUnits(t),this.cancelScheduledValues(this.context.currentTime),this.setValueAtTime(t,this.context.currentTime)}}),Object.defineProperty(t.Param.prototype,"minValue",{get:function(){return this.units===t.Type.Time||this.units===t.Type.Frequency||this.units===t.Type.NormalRange||this.units===t.Type.Positive||this.units===t.Type.BPM?0:this.units===t.Type.AudioRange?-1:this.units===t.Type.Decibels?-1/0:this._param.minValue}}),Object.defineProperty(t.Param.prototype,"maxValue",{get:function(){return this.units===t.Type.NormalRange||this.units===t.Type.AudioRange?1:this._param.maxValue}}),t.Param.prototype._fromUnits=function(e){if(!this.convert&&!t.isUndef(this.convert)||this.overridden)return e;switch(this.units){case t.Type.Time:return this.toSeconds(e);case t.Type.Frequency:return this.toFrequency(e);case t.Type.Decibels:return t.dbToGain(e);case t.Type.NormalRange:return Math.min(Math.max(e,0),1);case t.Type.AudioRange:return Math.min(Math.max(e,-1),1);case t.Type.Positive:return Math.max(e,0);default:return e}},t.Param.prototype._toUnits=function(e){if(!this.convert&&!t.isUndef(this.convert))return e;switch(this.units){case t.Type.Decibels:return t.gainToDb(e);default:return e}},t.Param.prototype._minOutput=1e-5,t.Param.AutomationType={Linear:"linearRampToValueAtTime",Exponential:"exponentialRampToValueAtTime",Target:"setTargetAtTime",SetValue:"setValueAtTime"},t.Param.prototype.setValueAtTime=function(e,i){return i=this.toSeconds(i),e=this._fromUnits(e),this._events.add({type:t.Param.AutomationType.SetValue,value:e,time:i}),this._param.setValueAtTime(e,i),this},t.Param.prototype.getValueAtTime=function(e){e=this.toSeconds(e);var i=this._events.getAfter(e),r=this._events.get(e),n=t.defaultArg(this._initialValue,this._param.defaultValue),o=n;if(null===r)o=n;else if(r.type===t.Param.AutomationType.Target){var s,a=this._events.getBefore(r.time);s=null===a?n:a.value,o=this._exponentialApproach(r.time,s,r.value,r.constant,e)}else o=null===i?r.value:i.type===t.Param.AutomationType.Linear?this._linearInterpolate(r.time,r.value,i.time,i.value,e):i.type===t.Param.AutomationType.Exponential?this._exponentialInterpolate(r.time,r.value,i.time,i.value,e):r.value;return o},t.Param.prototype.setRampPoint=function(t){t=this.toSeconds(t);var e=this.getValueAtTime(t);return this.cancelAndHoldAtTime(t),0===e&&(e=this._minOutput),this.setValueAtTime(this._toUnits(e),t),this},t.Param.prototype.linearRampToValueAtTime=function(e,i){return e=this._fromUnits(e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Linear,value:e,time:i}),this._param.linearRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampToValueAtTime=function(e,i){return e=this._fromUnits(e),e=Math.max(this._minOutput,e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Exponential,time:i,value:e}),this._param.exponentialRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.linearRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.linearRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.targetRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialApproachValueAtTime(t,i,e),this},t.Param.prototype.exponentialApproachValueAtTime=function(t,e,i){var r=Math.log(this.toSeconds(i)+1)/Math.log(200);return e=this.toSeconds(e),this.setTargetAtTime(t,e,r)},t.Param.prototype.setTargetAtTime=function(e,i,r){if(e=this._fromUnits(e),r<=0)throw new Error("timeConstant must be greater than 0");return i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Target,value:e,time:i,constant:r}),this._param.setTargetAtTime(e,i,r),this},t.Param.prototype.setValueCurveAtTime=function(e,i,r,n){n=t.defaultArg(n,1),r=this.toSeconds(r),i=this.toSeconds(i),this.setValueAtTime(e[0]*n,i);for(var o=r/(e.length-1),s=1;s=0;)this.emit("tick"),this._currentTime+=this.blockTime;return this._context.startRendering()},t.OfflineContext.prototype.close=function(){return this._context=null,Promise.resolve()},t.OfflineContext}),e(function(t){if(t.supported){var e=navigator.userAgent.toLowerCase();e.includes("safari")&&!e.includes("chrome")&&e.includes("mobile")&&(t.OfflineContext.prototype.createBufferSource=function(){var t=this._context.createBufferSource(),e=t.start;return t.start=function(i){this.setTimeout(function(){e.call(t,i)}.bind(this),0)}.bind(this),t})}}),e(function(t){return t.Gain=function(){var e=t.defaults(arguments,["gain","units"],t.Gain);t.AudioNode.call(this),this.input=this.output=this._gainNode=this.context.createGain(),this.gain=new t.Param({param:this._gainNode.gain,units:e.units,value:e.gain,convert:e.convert}),this._readOnly("gain")},t.extend(t.Gain,t.AudioNode),t.Gain.defaults={gain:1,convert:!0},t.Gain.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._gainNode.disconnect(),this._gainNode=null,this._writable("gain"),this.gain.dispose(),this.gain=null},t.Gain}),e(function(t){if(t.supported&&!AudioContext.prototype.createConstantSource){var e=function(t){this.context=t;for(var e=t.createBuffer(1,128,t.sampleRate),i=e.getChannelData(0),r=0;r0&&(n=(1-s)/(1/n)),"linear"===this._attackCurve)this._sig.linearRampTo(i,n,e);else if("exponential"===this._attackCurve)this._sig.targetRampTo(i,n,e);else if(n>0){this._sig.cancelAndHoldAtTime(e);var a=this._attackCurve;if(n0){var r=this.toSeconds(this.release);if("linear"===this._releaseCurve)this._sig.linearRampTo(0,r,e);else if("exponential"===this._releaseCurve)this._sig.targetRampTo(0,r,e);else{var n=this._releaseCurve;t.isArray(n)&&(this._sig.cancelAndHoldAtTime(e),this._sig.setValueCurveAtTime(n,e,r,i))}}return this},t.Envelope.prototype.getValueAtTime=function(t){return this._sig.getValueAtTime(t)},t.Envelope.prototype.triggerAttackRelease=function(t,e,i){return e=this.toSeconds(e),this.triggerAttack(e,i),this.triggerRelease(e+this.toSeconds(t)),this},t.Envelope.prototype.cancel=function(t){return this._sig.cancelScheduledValues(t),this},t.Envelope.prototype.connect=t.SignalBase.prototype.connect,function(){var e,i,r=[];for(e=0;e<128;e++)r[e]=Math.sin(e/127*(Math.PI/2));var n=[];for(e=0;e<127;e++){i=e/127;var o=Math.sin(i*(2*Math.PI)*6.4-Math.PI/2)+1;n[e]=o/10+.83*i}n[127]=1;var s=[];for(e=0;e<128;e++)s[e]=Math.ceil(e/127*5)/5;var a=[];for(e=0;e<128;e++)i=e/127,a[e]=.5*(1-Math.cos(Math.PI*i));var h=[];for(e=0;e<128;e++){i=e/127;var l=4*Math.pow(i,3)+.2,u=Math.cos(l*Math.PI*2*i);h[e]=Math.abs(u*(1-i))}function c(t){for(var e=new Array(t.length),i=0;i0?a:(-n-s)/o)+i.time}return i?0===i.value?1/0:i.time+(e-i.ticks)/i.value:e/this._initialValue},t.TickSignal.prototype.ticksToTime=function(e,i){return i=this.toSeconds(i),new t.Time(this.getDurationOfTicks(e,i))},t.TickSignal.prototype.timeToTicks=function(e,i){i=this.toSeconds(i),e=this.toSeconds(e);var r=this.getTicksAtTime(i),n=this.getTicksAtTime(i+e);return new t.Ticks(n-r)},t.TickSignal}),e(function(t){return t.TimelineState=function(e){t.Timeline.call(this),this._initial=e},t.extend(t.TimelineState,t.Timeline),t.TimelineState.prototype.getValueAtTime=function(t){var e=this.get(t);return null!==e?e.state:this._initial},t.TimelineState.prototype.setStateAtTime=function(t,e){return this.add({state:t,time:e}),this},t.TimelineState.prototype.getLastState=function(t,e){e=this.toSeconds(e);for(var i=this._search(e);i>=0;i--){var r=this._timeline[i];if(r.state===t)return r}},t.TimelineState.prototype.getNextState=function(t,e){e=this.toSeconds(e);var i=this._search(e);if(-1!==i)for(var r=i;r0&&(this._tickOffset.cancel(i.time),this._state.cancel(i.time))}return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this.setTicksAtTime(0,e),this},t.TickSource.prototype.pause=function(e){return e=this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started&&this._state.setStateAtTime(t.State.Paused,e),this},t.TickSource.prototype.cancel=function(t){return t=this.toSeconds(t),this._state.cancel(t),this._tickOffset.cancel(t),this},t.TickSource.prototype.getTicksAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.ticks,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=this.frequency.getTicksAtTime(e.time)-this.frequency.getTicksAtTime(i)),n=e}.bind(this)),this._state.remove(r),o},Object.defineProperty(t.TickSource.prototype,"ticks",{get:function(){return this.getTicksAtTime(this.now())},set:function(t){this.setTicksAtTime(t,this.now())}}),Object.defineProperty(t.TickSource.prototype,"seconds",{get:function(){return this.getSecondsAtTime(this.now())},set:function(t){var e=this.now(),i=this.frequency.timeToTicks(t,e);this.setTicksAtTime(i,e)}}),t.TickSource.prototype.getSecondsAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.seconds,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=e.time-i),n=e}.bind(this)),this._state.remove(r),o},t.TickSource.prototype.setTicksAtTime=function(t,e){return e=this.toSeconds(e),this._tickOffset.cancel(e),this._tickOffset.add({time:e,ticks:t,seconds:this.frequency.getDurationOfTicks(t,e)}),this},t.TickSource.prototype.getStateAtTime=function(t){return t=this.toSeconds(t),this._state.getValueAtTime(t)},t.TickSource.prototype.getTimeOfTick=function(e,i){i=t.defaultArg(i,this.now());var r=this._tickOffset.get(i),n=this._state.get(i),o=Math.max(r.time,n.time),s=this.frequency.getTicksAtTime(o)+e-r.ticks;return this.frequency.getTimeOfTick(s)},t.TickSource.prototype.forEachTickBetween=function(e,i,r){var n=this._state.get(e);if(this._state.forEachBetween(e,i,function(i){n.state===t.State.Started&&i.state!==t.State.Started&&this.forEachTickBetween(Math.max(n.time,e),i.time-this.sampleTime,r),n=i}.bind(this)),e=Math.max(n.time,e),n.state===t.State.Started&&this._state){var o=this.frequency.getTicksAtTime(e),s=(o-this.frequency.getTicksAtTime(n.time))%1;0!==s&&(s=1-s);for(var a=this.frequency.getTimeOfTick(o+s),h=null;a0)if(null===t.left.right)(e=t.left).right=t.right,i=e;else{for(e=t.left.right;null!==e.right;)e=e.right;e.parent.right=e.left,i=e.parent,e.left=t.left,e.right=t.right}else if(null===t.right.left)(e=t.right).left=t.left,i=e;else{for(e=t.right.left;null!==e.left;)e=e.left;e.parent=e.parent,e.parent.left=e.right,i=e.parent,e.left=t.left,e.right=t.right}null!==t.parent?t.isLeftChild()?t.parent.left=e:t.parent.right=e:this._setRoot(e),this._rebalance(i)}t.dispose()},t.IntervalTimeline.prototype._rotateLeft=function(t){var e=t.parent,i=t.isLeftChild(),r=t.right;t.right=r.left,r.left=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rotateRight=function(t){var e=t.parent,i=t.isLeftChild(),r=t.left;t.left=r.right,r.right=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rebalance=function(t){var e=t.getBalance();e>1?t.left.getBalance()<0?this._rotateLeft(t.left):this._rotateRight(t):e<-1&&(t.right.getBalance()>0?this._rotateRight(t.right):this._rotateLeft(t))},t.IntervalTimeline.prototype.get=function(t){if(null!==this._root){var e=[];if(this._root.search(t,e),e.length>0){for(var i=e[0],r=1;ri.low&&(i=e[r]);return i.event}}return null},t.IntervalTimeline.prototype.forEach=function(t){if(null!==this._root){var e=[];this._root.traverse(function(t){e.push(t)});for(var i=0;i=0;r--){var n=i[r].event;n&&e(n)}}return this},t.IntervalTimeline.prototype.forEachFrom=function(t,e){if(null!==this._root){var i=[];this._root.searchAfter(t,i);for(var r=i.length-1;r>=0;r--)e(i[r].event)}return this},t.IntervalTimeline.prototype.dispose=function(){var t=[];null!==this._root&&this._root.traverse(function(e){t.push(e)});for(var e=0;ethis.max||(null!==this.left&&this.left.search(t,e),this.low<=t&&this.high>t&&e.push(this),this.low>t||null!==this.right&&this.right.search(t,e))},e.prototype.searchAfter=function(t,e){this.low>=t&&(e.push(this),null!==this.left&&this.left.searchAfter(t,e)),null!==this.right&&this.right.searchAfter(t,e)},e.prototype.traverse=function(t){t(this),null!==this.left&&this.left.traverse(t),null!==this.right&&this.right.traverse(t)},e.prototype.updateHeight=function(){null!==this.left&&null!==this.right?this.height=Math.max(this.left.height,this.right.height)+1:null!==this.right?this.height=this.right.height+1:null!==this.left?this.height=this.left.height+1:this.height=0},e.prototype.updateMax=function(){this.max=this.high,null!==this.left&&(this.max=Math.max(this.max,this.left.max)),null!==this.right&&(this.max=Math.max(this.max,this.right.max))},e.prototype.getBalance=function(){var t=0;return null!==this.left&&null!==this.right?t=this.left.height-this.right.height:null!==this.left?t=this.left.height+1:null!==this.right&&(t=-(this.right.height+1)),t},e.prototype.isLeftChild=function(){return null!==this.parent&&this.parent.left===this},Object.defineProperty(e.prototype,"left",{get:function(){return this._left},set:function(t){this._left=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),Object.defineProperty(e.prototype,"right",{get:function(){return this._right},set:function(t){this._right=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),e.prototype.dispose=function(){this.parent=null,this._left=null,this._right=null,this.event=null},t.IntervalTimeline}),e(function(t){return t.Ticks=function(e,i){if(!(this instanceof t.Ticks))return new t.Ticks(e,i);t.TransportTime.call(this,e,i)},t.extend(t.Ticks,t.TransportTime),t.Ticks.prototype._defaultUnits="i",t.Ticks.prototype._now=function(){return t.Transport.ticks},t.Ticks.prototype._beatsToUnits=function(t){return this._getPPQ()*t},t.Ticks.prototype._secondsToUnits=function(t){return t/(60/this._getBpm())*this._getPPQ()},t.Ticks.prototype._ticksToUnits=function(t){return t},t.Ticks.prototype.toTicks=function(){return this.valueOf()},t.Ticks.prototype.toSeconds=function(){return this.valueOf()/this._getPPQ()*(60/this._getBpm())},t.Ticks}),e(function(t){return t.TransportEvent=function(e,i){i=t.defaultArg(i,t.TransportEvent.defaults),t.call(this),this.Transport=e,this.id=t.TransportEvent._eventId++,this.time=t.Ticks(i.time),this.callback=i.callback,this._once=i.once},t.extend(t.TransportEvent),t.TransportEvent.defaults={once:!1,callback:t.noOp},t.TransportEvent._eventId=0,t.TransportEvent.prototype.invoke=function(t){this.callback&&(this.callback(t),this._once&&this.Transport&&this.Transport.clear(this.id))},t.TransportEvent.prototype.dispose=function(){return t.prototype.dispose.call(this),this.Transport=null,this.callback=null,this.time=null,this},t.TransportEvent}),e(function(t){return t.TransportRepeatEvent=function(e,i){t.TransportEvent.call(this,e,i),i=t.defaultArg(i,t.TransportRepeatEvent.defaults),this.duration=t.Ticks(i.duration),this._interval=t.Ticks(i.interval),this._currentId=-1,this._nextId=-1,this._nextTick=this.time,this._boundRestart=this._restart.bind(this),this.Transport.on("start loopStart",this._boundRestart),this._restart()},t.extend(t.TransportRepeatEvent,t.TransportEvent),t.TransportRepeatEvent.defaults={duration:1/0,interval:1},t.TransportRepeatEvent.prototype.invoke=function(e){this._createEvents(e),t.TransportEvent.prototype.invoke.call(this,e)},t.TransportRepeatEvent.prototype._createEvents=function(e){var i=this.Transport.getTicksAtTime(e);i>=this.time&&i>=this._nextTick&&this._nextTick+this._intervalthis.time&&(this._nextTick=this.time+Math.ceil((i-this.time)/this._interval)*this._interval),this._currentId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick)),this._nextTick+=this._interval,this._nextId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick))},t.TransportRepeatEvent.prototype.dispose=function(){return this.Transport.clear(this._currentId),this.Transport.clear(this._nextId),this.Transport.off("start loopStart",this._boundRestart),this._boundCreateEvents=null,t.TransportEvent.prototype.dispose.call(this),this.duration=null,this._interval=null,this},t.TransportRepeatEvent}),e(function(t){t.Transport=function(){t.Emitter.call(this),t.getContext(function(){this.loop=!1,this._loopStart=0,this._loopEnd=0,this._ppq=e.defaults.PPQ,this._clock=new t.Clock({callback:this._processTick.bind(this),frequency:0}),this._bindClockEvents(),this.bpm=this._clock.frequency,this.bpm._toUnits=this._toUnits.bind(this),this.bpm._fromUnits=this._fromUnits.bind(this),this.bpm.units=t.Type.BPM,this.bpm.value=e.defaults.bpm,this._readOnly("bpm"),this._timeSignature=e.defaults.timeSignature,this._scheduledEvents={},this._timeline=new t.Timeline,this._repeatedEvents=new t.IntervalTimeline,this._syncedSignals=[],this._swingTicks=e.defaults.PPQ/2,this._swingAmount=0}.bind(this))},t.extend(t.Transport,t.Emitter),t.Transport.defaults={bpm:120,swing:0,swingSubdivision:"8n",timeSignature:4,loopStart:0,loopEnd:"4m",PPQ:192},t.Transport.prototype._processTick=function(e,i){if(this._swingAmount>0&&i%this._ppq!=0&&i%(2*this._swingTicks)!=0){var r=i%(2*this._swingTicks)/(2*this._swingTicks),n=Math.sin(r*Math.PI)*this._swingAmount;e+=t.Ticks(2*this._swingTicks/3).toSeconds()*n}this.loop&&i>=this._loopEnd&&(this.emit("loopEnd",e),this._clock.setTicksAtTime(this._loopStart,e),i=this._loopStart,this.emit("loopStart",e,this._clock.getSecondsAtTime(e)),this.emit("loop",e)),this._timeline.forEachAtTime(i,function(t){t.invoke(e)})},t.Transport.prototype.schedule=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e});return this._addEvent(r,this._timeline)},t.Transport.prototype.scheduleRepeat=function(e,i,r,n){var o=new t.TransportRepeatEvent(this,{callback:e,interval:t.Time(i),time:t.TransportTime(r),duration:t.Time(t.defaultArg(n,1/0))});return this._addEvent(o,this._repeatedEvents)},t.Transport.prototype.scheduleOnce=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e,once:!0});return this._addEvent(r,this._timeline)},t.Transport.prototype.clear=function(t){if(this._scheduledEvents.hasOwnProperty(t)){var e=this._scheduledEvents[t.toString()];e.timeline.remove(e.event),e.event.dispose(),delete this._scheduledEvents[t.toString()]}return this},t.Transport.prototype._addEvent=function(t,e){return this._scheduledEvents[t.id.toString()]={event:t,timeline:e},e.add(t),t.id},t.Transport.prototype.cancel=function(e){return e=t.defaultArg(e,0),e=this.toTicks(e),this._timeline.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this._repeatedEvents.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this},t.Transport.prototype._bindClockEvents=function(){this._clock.on("start",function(e,i){i=t.Ticks(i).toSeconds(),this.emit("start",e,i)}.bind(this)),this._clock.on("stop",function(t){this.emit("stop",t)}.bind(this)),this._clock.on("pause",function(t){this.emit("pause",t)}.bind(this))},Object.defineProperty(t.Transport.prototype,"state",{get:function(){return this._clock.getStateAtTime(this.now())}}),t.Transport.prototype.start=function(e,i){return t.isDefined(i)&&(i=this.toTicks(i)),this._clock.start(e,i),this},t.Transport.prototype.stop=function(t){return this._clock.stop(t),this},t.Transport.prototype.pause=function(t){return this._clock.pause(t),this},t.Transport.prototype.toggle=function(e){return e=this.toSeconds(e),this._clock.getStateAtTime(e)!==t.State.Started?this.start(e):this.stop(e),this},Object.defineProperty(t.Transport.prototype,"timeSignature",{get:function(){return this._timeSignature},set:function(e){t.isArray(e)&&(e=e[0]/e[1]*4),this._timeSignature=e}}),Object.defineProperty(t.Transport.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t)}}),t.Transport.prototype.setLoopPoints=function(t,e){return this.loopStart=t,this.loopEnd=e,this},Object.defineProperty(t.Transport.prototype,"swing",{get:function(){return this._swingAmount},set:function(t){this._swingAmount=t}}),Object.defineProperty(t.Transport.prototype,"swingSubdivision",{get:function(){return t.Ticks(this._swingTicks).toNotation()},set:function(t){this._swingTicks=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"position",{get:function(){var e=this.now(),i=this._clock.getTicksAtTime(e);return t.Ticks(i).toBarsBeatsSixteenths()},set:function(t){var e=this.toTicks(t);this.ticks=e}}),Object.defineProperty(t.Transport.prototype,"seconds",{get:function(){return this._clock.seconds},set:function(t){var e=this.now(),i=this.bpm.timeToTicks(t,e);this.ticks=i}}),Object.defineProperty(t.Transport.prototype,"progress",{get:function(){if(this.loop){var t=this.now();return(this._clock.getTicksAtTime(t)-this._loopStart)/(this._loopEnd-this._loopStart)}return 0}}),Object.defineProperty(t.Transport.prototype,"ticks",{get:function(){return this._clock.ticks},set:function(e){if(this._clock.ticks!==e){var i=this.now();this.state===t.State.Started?(this.emit("stop",i),this._clock.setTicksAtTime(e,i),this.emit("start",i,this.seconds)):this._clock.setTicksAtTime(e,i)}}}),t.Transport.prototype.getTicksAtTime=function(t){return Math.round(this._clock.getTicksAtTime(t))},t.Transport.prototype.getSecondsAtTime=function(t){return this._clock.getSecondsAtTime(t)},Object.defineProperty(t.Transport.prototype,"PPQ",{get:function(){return this._ppq},set:function(t){var e=this.bpm.value;this._ppq=t,this.bpm.value=e}}),t.Transport.prototype._fromUnits=function(t){return 1/(60/t/this.PPQ)},t.Transport.prototype._toUnits=function(t){return t/this.PPQ*60},t.Transport.prototype.nextSubdivision=function(e){if(e=this.toTicks(e),this.state!==t.State.Started)return 0;var i=this.now(),r=e-this.getTicksAtTime(i)%e;return this._clock.nextTickTime(r,i)},t.Transport.prototype.syncSignal=function(e,i){if(!i){var r=this.now();i=0!==e.getValueAtTime(r)?e.getValueAtTime(r)/this.bpm.getValueAtTime(r):0}var n=new t.Gain(i);return this.bpm.chain(n,e._param),this._syncedSignals.push({ratio:n,signal:e,initial:e.value}),e.value=0,this},t.Transport.prototype.unsyncSignal=function(t){for(var e=this._syncedSignals.length-1;e>=0;e--){var i=this._syncedSignals[e];i.signal===t&&(i.ratio.dispose(),i.signal.value=i.initial,this._syncedSignals.splice(e,1))}return this},t.Transport.prototype.dispose=function(){return t.Emitter.prototype.dispose.call(this),this._clock.dispose(),this._clock=null,this._writable("bpm"),this.bpm=null,this._timeline.dispose(),this._timeline=null,this._repeatedEvents.dispose(),this._repeatedEvents=null,this};var e=t.Transport;return t.Transport=new e,t.Context.on("init",function(i){i.Transport instanceof e?t.Transport=i.Transport:t.Transport=new e,i.Transport=t.Transport}),t.Context.on("close",function(t){t.Transport instanceof e&&t.Transport.dispose()}),t.Transport}),e(function(t){return t.Volume=function(){var e=t.defaults(arguments,["volume"],t.Volume);t.AudioNode.call(this),this.output=this.input=new t.Gain(e.volume,t.Type.Decibels),this._unmutedVolume=e.volume,this.volume=this.output.gain,this._readOnly("volume"),this.mute=e.mute},t.extend(t.Volume,t.AudioNode),t.Volume.defaults={volume:0,mute:!1},Object.defineProperty(t.Volume.prototype,"mute",{get:function(){return this.volume.value===-1/0},set:function(t){!this.mute&&t?(this._unmutedVolume=this.volume.value,this.volume.value=-1/0):this.mute&&!t&&(this.volume.value=this._unmutedVolume)}}),t.Volume.prototype.dispose=function(){return this.input.dispose(),t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this.volume.dispose(),this.volume=null,this},t.Volume}),e(function(t){t.Master=function(){t.AudioNode.call(this),t.getContext(function(){this.createInsOuts(1,0),this._volume=this.output=new t.Volume,this.volume=this._volume.volume,this._readOnly("volume"),this.input.chain(this.output,this.context.destination)}.bind(this))},t.extend(t.Master,t.AudioNode),t.Master.defaults={volume:0,mute:!1},Object.defineProperty(t.Master.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Master.prototype.chain=function(){this.input.disconnect(),this.input.chain.apply(this.input,arguments),arguments[arguments.length-1].connect(this.output)},t.Master.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null},t.AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this},window.AudioNode&&(AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this});var e=t.Master;return t.Master=new e,t.Context.on("init",function(i){i.Master instanceof e?t.Master=i.Master:t.Master=new e,i.Master=t.Master}),t.Context.on("close",function(t){t.Master instanceof e&&t.Master.dispose()}),t.Master}),e(function(t){return t.Source=function(e){e=t.defaultArg(e,t.Source.defaults),t.AudioNode.call(this),this._volume=this.output=new t.Volume(e.volume),this.volume=this._volume.volume,this._readOnly("volume"),this._state=new t.TimelineState(t.State.Stopped),this._state.memory=100,this._synced=!1,this._scheduled=[],this._volume.output.output.channelCount=2,this._volume.output.output.channelCountMode="explicit",this.mute=e.mute},t.extend(t.Source,t.AudioNode),t.Source.defaults={volume:0,mute:!1},Object.defineProperty(t.Source.prototype,"state",{get:function(){return this._synced?t.Transport.state===t.State.Started?this._state.getValueAtTime(t.Transport.seconds):t.State.Stopped:this._state.getValueAtTime(this.now())}}),Object.defineProperty(t.Source.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Source.prototype._start=t.noOp,t.Source.prototype.restart=t.noOp,t.Source.prototype._stop=t.noOp,t.Source.prototype.start=function(e,i,r){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started)this._state.cancel(e),this._state.setStateAtTime(t.State.Started,e),this.restart(e,i,r);else if(this._state.setStateAtTime(t.State.Started,e),this._synced){var n=this._state.get(e);n.offset=t.defaultArg(i,0),n.duration=r;var o=t.Transport.schedule(function(t){this._start(t,i,r)}.bind(this),e);this._scheduled.push(o),t.Transport.state===t.State.Started&&this._syncedStart(this.now(),t.Transport.seconds)}else this._start.apply(this,arguments);return this},t.Source.prototype.stop=function(e){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._synced){var i=t.Transport.schedule(this._stop.bind(this),e);this._scheduled.push(i)}else this._stop.apply(this,arguments);return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this},t.Source.prototype.sync=function(){return this._synced=!0,this._syncedStart=function(e,i){if(i>0){var r=this._state.get(i);if(r&&r.state===t.State.Started&&r.time!==i){var n,o=i-this.toSeconds(r.time);r.duration&&(n=this.toSeconds(r.duration)-o),this._start(e,this.toSeconds(r.offset)+o,n)}}}.bind(this),this._syncedStop=function(e){var i=t.Transport.getSecondsAtTime(Math.max(e-this.sampleTime,0));this._state.getValueAtTime(i)===t.State.Started&&this._stop(e)}.bind(this),t.Transport.on("start loopStart",this._syncedStart),t.Transport.on("stop pause loopEnd",this._syncedStop),this},t.Source.prototype.unsync=function(){this._synced&&(t.Transport.off("stop pause loopEnd",this._syncedStop),t.Transport.off("start loopStart",this._syncedStart)),this._synced=!1;for(var e=0;e0}}),Object.defineProperty(t.Buffer.prototype,"duration",{get:function(){return this._buffer?this._buffer.duration:0}}),Object.defineProperty(t.Buffer.prototype,"length",{get:function(){return this._buffer?this._buffer.length:0}}),Object.defineProperty(t.Buffer.prototype,"numberOfChannels",{get:function(){return this._buffer?this._buffer.numberOfChannels:0}}),t.Buffer.prototype.fromArray=function(t){var e=t[0].length>0,i=e?t.length:1,r=e?t[0].length:t.length,n=this.context.createBuffer(i,r,this.context.sampleRate);e||1!==i||(t=[t]);for(var o=0;o=this._startTime&&(-1===this._stopTime||e<=this._stopTime)?t.State.Started:t.State.Stopped},t.OscillatorNode.prototype.start=function(t){if(-1!==this._startTime)throw new Error("cannot call OscillatorNode.start more than once");this._startTime=this.toSeconds(t),this._oscillator.start(this._startTime);var e=this.context.currentTime;return this._gainNode.gain.cancelScheduledValues(e),this._gainNode.gain.setValueAtTime(0,e),this._gainNode.gain.setValueAtTime(1,this._startTime),this},t.OscillatorNode.prototype.setPeriodicWave=function(t){return this._oscillator.setPeriodicWave(t),this},t.OscillatorNode.prototype.stop=function(t){return this.cancelStop(),this._stopTime=this.toSeconds(t),this._gainNode.gain.setValueAtTime(0,this._stopTime),this.context.clearTimeout(this._timeout),this._timeout=this.context.setTimeout(function(){this._oscillator.stop(this.now()),this.onended()}.bind(this),this._stopTime-this.now()),this},t.OscillatorNode.prototype.cancelStop=function(){return-1!==this._startTime&&(this._gainNode.gain.cancelScheduledValues(this._startTime+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime)),this.context.clearTimeout(this._timeout),this._stopTime=-1),this},Object.defineProperty(t.OscillatorNode.prototype,"type",{get:function(){return this._oscillator.type},set:function(t){this._oscillator.type=t}}),t.OscillatorNode.prototype.dispose=function(){return this.context.clearTimeout(this._timeout),t.AudioNode.prototype.dispose.call(this),this.onended=null,this._oscillator.disconnect(),this._oscillator=null,this._gainNode.dispose(),this._gainNode=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this},t.OscillatorNode}),e(function(t){return t.Oscillator=function(){var e=t.defaults(arguments,["frequency","type"],t.Oscillator);t.Source.call(this,e),this._oscillator=null,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this._wave=null,this._partials=t.defaultArg(e.partials,[1]),this._phase=e.phase,this._type=null,this.type=e.type,this.phase=this._phase,this._readOnly(["frequency","detune"])},t.extend(t.Oscillator,t.Source),t.Oscillator.defaults={type:"sine",frequency:440,detune:0,phase:0,partials:[]},t.Oscillator.Type={Sine:"sine",Triangle:"triangle",Sawtooth:"sawtooth",Square:"square",Custom:"custom"},t.Oscillator.prototype._start=function(e){this._oscillator=new t.OscillatorNode,this._wave?this._oscillator.setPeriodicWave(this._wave):this._oscillator.type=this._type,this._oscillator.connect(this.output),this.frequency.connect(this._oscillator.frequency),this.detune.connect(this._oscillator.detune),e=this.toSeconds(e),this._oscillator.start(e)},t.Oscillator.prototype._stop=function(t){return this._oscillator&&(t=this.toSeconds(t),this._oscillator.stop(t)),this},t.Oscillator.prototype.restart=function(t){return this._oscillator.cancelStop(),this._state.cancel(this.toSeconds(t)),this},t.Oscillator.prototype.syncFrequency=function(){return t.Transport.syncSignal(this.frequency),this},t.Oscillator.prototype.unsyncFrequency=function(){return t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Oscillator.prototype,"type",{get:function(){return this._type},set:function(e){var i=[t.Oscillator.Type.Sine,t.Oscillator.Type.Square,t.Oscillator.Type.Triangle,t.Oscillator.Type.Sawtooth].includes(e);if(0===this._phase&&i)this._wave=null,null!==this._oscillator&&this._oscillator.type;else{var r=this._getRealImaginary(e,this._phase),n=this.context.createPeriodicWave(r[0],r[1]);this._wave=n,null!==this._oscillator&&this._oscillator.setPeriodicWave(this._wave)}this._type=e}}),t.Oscillator.prototype._getRealImaginary=function(e,i){var r=2048,n=new Float32Array(r),o=new Float32Array(r),s=1;if(e===t.Oscillator.Type.Custom)r=s=this._partials.length+1;else{var a=/^(sine|triangle|square|sawtooth)(\d+)$/.exec(e);a&&(s=parseInt(a[2])+1,e=a[1],r=s=Math.max(s,2))}for(var h=1;h>1&1?-1:1):0;break;case t.Oscillator.Type.Custom:l=this._partials[h-1];break;default:throw new TypeError("Tone.Oscillator: invalid type: "+e)}0!==l?(n[h]=-l*Math.sin(i*h),o[h]=l*Math.cos(i*h)):(n[h]=0,o[h]=0)}return[n,o]},t.Oscillator.prototype._inverseFFT=function(t,e,i){for(var r=0,n=t.length,o=0;on&&r=this.values.length&&(this.index=0)):e===t.CtrlPattern.Type.Down?(this.index--,this.index<0&&(this.index=this.values.length-1)):e===t.CtrlPattern.Type.UpDown||e===t.CtrlPattern.Type.DownUp?(this._direction===t.CtrlPattern.Type.Up?this.index++:this.index--,this.index<0?(this.index=1,this._direction=t.CtrlPattern.Type.Up):this.index>=this.values.length&&(this.index=this.values.length-2,this._direction=t.CtrlPattern.Type.Down)):e===t.CtrlPattern.Type.Random?this.index=Math.floor(Math.random()*this.values.length):e===t.CtrlPattern.Type.RandomWalk?Math.random()<.5?(this.index--,this.index=Math.max(this.index,0)):(this.index++,this.index=Math.min(this.index,this.values.length-1)):e===t.CtrlPattern.Type.RandomOnce?(this.index++,this.index>=this.values.length&&(this.index=0,this._shuffleValues())):e===t.CtrlPattern.Type.AlternateUp?(this._direction===t.CtrlPattern.Type.Up?(this.index+=2,this._direction=t.CtrlPattern.Type.Down):(this.index-=1,this._direction=t.CtrlPattern.Type.Up),this.index>=this.values.length&&(this.index=0,this._direction=t.CtrlPattern.Type.Up)):e===t.CtrlPattern.Type.AlternateDown&&(this._direction===t.CtrlPattern.Type.Up?(this.index+=1,this._direction=t.CtrlPattern.Type.Down):(this.index-=2,this._direction=t.CtrlPattern.Type.Up),this.index<0&&(this.index=this.values.length-1,this._direction=t.CtrlPattern.Type.Down)),this.value},t.CtrlPattern.prototype._shuffleValues=function(){var t=[];this._shuffled=[];for(var e=0;e0;){var i=t.splice(Math.floor(t.length*Math.random()),1);this._shuffled.push(i[0])}},t.CtrlPattern.prototype.dispose=function(){this._shuffled=null,this.values=null},t.CtrlPattern}),e(function(t){return t.CtrlRandom=function(){var e=t.defaults(arguments,["min","max"],t.CtrlRandom);t.call(this),this.min=e.min,this.max=e.max,this.integer=e.integer},t.extend(t.CtrlRandom),t.CtrlRandom.defaults={min:0,max:1,integer:!1},Object.defineProperty(t.CtrlRandom.prototype,"value",{get:function(){var t=this.toSeconds(this.min),e=this.toSeconds(this.max),i=Math.random(),r=i*t+(1-i)*e;return this.integer&&(r=Math.floor(r)),r}}),t.CtrlRandom}),e(function(t){return t.Buffers=function(e){var i=Array.prototype.slice.call(arguments);i.shift();var r=t.defaults(i,["onload","baseUrl"],t.Buffers);for(var n in t.call(this),this._buffers={},this.baseUrl=r.baseUrl,this._loadingCount=0,e)this._loadingCount++,this.add(n,e[n],this._bufferLoaded.bind(this,r.onload))},t.extend(t.Buffers),t.Buffers.defaults={onload:t.noOp,baseUrl:""},t.Buffers.prototype.has=function(t){return this._buffers.hasOwnProperty(t)},t.Buffers.prototype.get=function(t){if(this.has(t))return this._buffers[t];throw new Error("Tone.Buffers: no buffer named "+t)},t.Buffers.prototype._bufferLoaded=function(t){this._loadingCount--,0===this._loadingCount&&t&&t(this)},Object.defineProperty(t.Buffers.prototype,"loaded",{get:function(){var t=!0;for(var e in this._buffers){var i=this.get(e);t=t&&i.loaded}return t}}),t.Buffers.prototype.add=function(e,i,r){return r=t.defaultArg(r,t.noOp),i instanceof t.Buffer?(this._buffers[e]=i,r(this)):i instanceof AudioBuffer?(this._buffers[e]=new t.Buffer(i),r(this)):t.isString(i)&&(this._buffers[e]=new t.Buffer(this.baseUrl+i,r)),this},t.Buffers.prototype.dispose=function(){for(var e in t.prototype.dispose.call(this),this._buffers)this._buffers[e].dispose();return this._buffers=null,this},t.Buffers}),e(function(t){var e={};return t.prototype.send=function(i,r){e.hasOwnProperty(i)||(e[i]=this.context.createGain()),r=t.defaultArg(r,0);var n=new t.Gain(r,t.Type.Decibels);return this.connect(n),n.connect(e[i]),n},t.prototype.receive=function(t,i){return e.hasOwnProperty(t)||(e[t]=this.context.createGain()),e[t].connect(this,0,i),this},t.Context.on("init",function(t){t.Buses?e=t.Buses:(e={},t.Buses=e)}),t}),e(function(t){return t.Draw=function(){t.call(this),this._events=new t.Timeline,this.expiration=.25,this.anticipation=.008,this._boundDrawLoop=this._drawLoop.bind(this)},t.extend(t.Draw),t.Draw.prototype.schedule=function(t,e){return this._events.add({callback:t,time:this.toSeconds(e)}),1===this._events.length&&requestAnimationFrame(this._boundDrawLoop),this},t.Draw.prototype.cancel=function(t){return this._events.cancel(this.toSeconds(t)),this},t.Draw.prototype._drawLoop=function(){for(var e=t.now();this._events.length&&this._events.peek().time-this.anticipation<=e;){var i=this._events.shift();e-i.time<=this.expiration&&i.callback()}this._events.length>0&&requestAnimationFrame(this._boundDrawLoop)},t.Draw=new t.Draw,t.Draw}),e(function(t){t.Listener=function(){t.call(this),this._orientation=[0,0,0,0,0,0],this._position=[0,0,0],t.getContext(function(){this.set(e.defaults)}.bind(this))},t.extend(t.Listener),t.Listener.defaults={positionX:0,positionY:0,positionZ:0,forwardX:0,forwardY:0,forwardZ:1,upX:0,upY:1,upZ:0},t.Listener.prototype._rampTimeConstant=.01,t.Listener.prototype.setPosition=function(t,e,i){if(this.context.listener.positionX){var r=this.now();this.context.listener.positionX.setTargetAtTime(t,r,this._rampTimeConstant),this.context.listener.positionY.setTargetAtTime(e,r,this._rampTimeConstant),this.context.listener.positionZ.setTargetAtTime(i,r,this._rampTimeConstant)}else this.context.listener.setPosition(t,e,i);return this._position=Array.prototype.slice.call(arguments),this},t.Listener.prototype.setOrientation=function(t,e,i,r,n,o){if(this.context.listener.forwardX){var s=this.now();this.context.listener.forwardX.setTargetAtTime(t,s,this._rampTimeConstant),this.context.listener.forwardY.setTargetAtTime(e,s,this._rampTimeConstant),this.context.listener.forwardZ.setTargetAtTime(i,s,this._rampTimeConstant),this.context.listener.upX.setTargetAtTime(r,s,this._rampTimeConstant),this.context.listener.upY.setTargetAtTime(n,s,this._rampTimeConstant),this.context.listener.upZ.setTargetAtTime(o,s,this._rampTimeConstant)}else this.context.listener.setOrientation(t,e,i,r,n,o);return this._orientation=Array.prototype.slice.call(arguments),this},Object.defineProperty(t.Listener.prototype,"positionX",{set:function(t){this._position[0]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[0]}}),Object.defineProperty(t.Listener.prototype,"positionY",{set:function(t){this._position[1]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[1]}}),Object.defineProperty(t.Listener.prototype,"positionZ",{set:function(t){this._position[2]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[2]}}),Object.defineProperty(t.Listener.prototype,"forwardX",{set:function(t){this._orientation[0]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[0]}}),Object.defineProperty(t.Listener.prototype,"forwardY",{set:function(t){this._orientation[1]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[1]}}),Object.defineProperty(t.Listener.prototype,"forwardZ",{set:function(t){this._orientation[2]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[2]}}),Object.defineProperty(t.Listener.prototype,"upX",{set:function(t){this._orientation[3]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[3]}}),Object.defineProperty(t.Listener.prototype,"upY",{set:function(t){this._orientation[4]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[4]}}),Object.defineProperty(t.Listener.prototype,"upZ",{set:function(t){this._orientation[5]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[5]}}),t.Listener.prototype.dispose=function(){return this._orientation=null,this._position=null,this};var e=t.Listener;return t.Listener=new e,t.Context.on("init",function(i){i.Listener instanceof e?t.Listener=i.Listener:t.Listener=new e,i.Listener=t.Listener}),t.Listener}),e(function(t){return t.Offline=function(e,i){var r,n=t.context.sampleRate,o=t.context,s=function e(i,r,n,o){o=t.defaultArg(o,0);var s=new t.OfflineContext(2,r,n);t.context=s;var a=i(t.Transport);return s.currentTime>0&&o<1e3?e(i,r,n,++o):{response:a,context:s}}(e,i,n),a=s.response,h=s.context;return r=a instanceof Promise?a.then(function(){return h.render()}):h.render(),t.context=o,r.then(function(e){return new t.Buffer(e)})},t.Offline}),e(function(t){return t.Effect=function(){var e=t.defaults(arguments,["wet"],t.Effect);t.AudioNode.call(this),this.createInsOuts(1,1),this._dryWet=new t.CrossFade(e.wet),this.wet=this._dryWet.fade,this.effectSend=new t.Gain,this.effectReturn=new t.Gain,this.input.connect(this._dryWet.a),this.input.connect(this.effectSend),this.effectReturn.connect(this._dryWet.b),this._dryWet.connect(this.output),this._readOnly(["wet"])},t.extend(t.Effect,t.AudioNode),t.Effect.defaults={wet:1},t.Effect.prototype.connectEffect=function(t){return this.effectSend.chain(t,this.effectReturn),this},t.Effect.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this._dryWet.dispose(),this._dryWet=null,this.effectSend.dispose(),this.effectSend=null,this.effectReturn.dispose(),this.effectReturn=null,this._writable(["wet"]),this.wet=null,this},t.Effect}),e(function(t){return t.AutoFilter=function(){var e=t.defaults(arguments,["frequency","baseFrequency","octaves"],t.AutoFilter);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth}),this.depth=this._lfo.amplitude,this.frequency=this._lfo.frequency,this.filter=new t.Filter(e.filter),this._octaves=0,this.connectEffect(this.filter),this._lfo.connect(this.filter.frequency),this.type=e.type,this._readOnly(["frequency","depth"]),this.octaves=e.octaves,this.baseFrequency=e.baseFrequency},t.extend(t.AutoFilter,t.Effect),t.AutoFilter.defaults={frequency:1,type:"sine",depth:1,baseFrequency:200,octaves:2.6,filter:{type:"lowpass",rolloff:-12,Q:1}},t.AutoFilter.prototype.start=function(t){return this._lfo.start(t),this},t.AutoFilter.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoFilter.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoFilter.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoFilter.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),Object.defineProperty(t.AutoFilter.prototype,"baseFrequency",{get:function(){return this._lfo.min},set:function(t){this._lfo.min=this.toFrequency(t),this.octaves=this._octaves}}),Object.defineProperty(t.AutoFilter.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._lfo.max=this.baseFrequency*Math.pow(2,t)}}),t.AutoFilter.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this.filter.dispose(),this.filter=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null,this},t.AutoFilter}),e(function(t){return t.AutoPanner=function(){var e=t.defaults(arguments,["frequency"],t.AutoPanner);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth,min:-1,max:1}),this.depth=this._lfo.amplitude,this._panner=new t.Panner,this.frequency=this._lfo.frequency,this.connectEffect(this._panner),this._lfo.connect(this._panner.pan),this.type=e.type,this._readOnly(["depth","frequency"])},t.extend(t.AutoPanner,t.Effect),t.AutoPanner.defaults={frequency:1,type:"sine",depth:1},t.AutoPanner.prototype.start=function(t){return this._lfo.start(t),this},t.AutoPanner.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoPanner.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoPanner.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoPanner.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.AutoPanner.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this._panner.dispose(),this._panner=null,this._writable(["depth","frequency"]),this.frequency=null,this.depth=null,this},t.AutoPanner}),e(function(t){return t.AutoWah=function(){var e=t.defaults(arguments,["baseFrequency","octaves","sensitivity"],t.AutoWah);t.Effect.call(this,e),this.follower=new t.Follower(e.follower),this._sweepRange=new t.ScaleExp(0,1,.5),this._baseFrequency=e.baseFrequency,this._octaves=e.octaves,this._inputBoost=new t.Gain,this._bandpass=new t.Filter({rolloff:-48,frequency:0,Q:e.Q}),this._peaking=new t.Filter(0,"peaking"),this._peaking.gain.value=e.gain,this.gain=this._peaking.gain,this.Q=this._bandpass.Q,this.effectSend.chain(this._inputBoost,this.follower,this._sweepRange),this._sweepRange.connect(this._bandpass.frequency),this._sweepRange.connect(this._peaking.frequency),this.effectSend.chain(this._bandpass,this._peaking,this.effectReturn),this._setSweepRange(),this.sensitivity=e.sensitivity,this._readOnly(["gain","Q"])},t.extend(t.AutoWah,t.Effect),t.AutoWah.defaults={baseFrequency:100,octaves:6,sensitivity:0,Q:2,gain:2,follower:{attack:.3,release:.5}},Object.defineProperty(t.AutoWah.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"baseFrequency",{get:function(){return this._baseFrequency},set:function(t){this._baseFrequency=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"sensitivity",{get:function(){return t.gainToDb(1/this._inputBoost.gain.value)},set:function(e){this._inputBoost.gain.value=1/t.dbToGain(e)}}),t.AutoWah.prototype._setSweepRange=function(){this._sweepRange.min=this._baseFrequency,this._sweepRange.max=Math.min(this._baseFrequency*Math.pow(2,this._octaves),this.context.sampleRate/2)},t.AutoWah.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this.follower.dispose(),this.follower=null,this._sweepRange.dispose(),this._sweepRange=null,this._bandpass.dispose(),this._bandpass=null,this._peaking.dispose(),this._peaking=null,this._inputBoost.dispose(),this._inputBoost=null,this._writable(["gain","Q"]),this.gain=null,this.Q=null,this},t.AutoWah}),e(function(t){return t.Modulo=function(e){t.SignalBase.call(this),this.createInsOuts(1,0),this._shaper=new t.WaveShaper(Math.pow(2,16)),this._multiply=new t.Multiply,this._subtract=this.output=new t.Subtract,this._modSignal=new t.Signal(e),this.input.fan(this._shaper,this._subtract),this._modSignal.connect(this._multiply,0,0),this._shaper.connect(this._multiply,0,1),this._multiply.connect(this._subtract,0,1),this._setWaveShaper(e)},t.extend(t.Modulo,t.SignalBase),t.Modulo.prototype._setWaveShaper=function(t){this._shaper.setMap(function(e){return Math.floor((e+1e-4)/t)})},Object.defineProperty(t.Modulo.prototype,"value",{get:function(){return this._modSignal.value},set:function(t){this._modSignal.value=t,this._setWaveShaper(t)}}),t.Modulo.prototype.dispose=function(){return t.SignalBase.prototype.dispose.call(this),this._shaper.dispose(),this._shaper=null,this._multiply.dispose(),this._multiply=null,this._subtract.dispose(),this._subtract=null,this._modSignal.dispose(),this._modSignal=null,this},t.Modulo}),e(function(t){return t.BitCrusher=function(){var e=t.defaults(arguments,["bits"],t.BitCrusher);t.Effect.call(this,e);var i=1/Math.pow(2,e.bits-1);this._subtract=new t.Subtract,this._modulo=new t.Modulo(i),this._bits=e.bits,this.effectSend.fan(this._subtract,this._modulo),this._modulo.connect(this._subtract,0,1),this._subtract.connect(this.effectReturn)},t.extend(t.BitCrusher,t.Effect),t.BitCrusher.defaults={bits:4},Object.defineProperty(t.BitCrusher.prototype,"bits",{get:function(){return this._bits},set:function(t){this._bits=t;var e=1/Math.pow(2,t-1);this._modulo.value=e}}),t.BitCrusher.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._subtract.dispose(),this._subtract=null,this._modulo.dispose(),this._modulo=null,this},t.BitCrusher}),e(function(t){return t.Chebyshev=function(){var e=t.defaults(arguments,["order"],t.Chebyshev);t.Effect.call(this,e),this._shaper=new t.WaveShaper(4096),this._order=e.order,this.connectEffect(this._shaper),this.order=e.order,this.oversample=e.oversample},t.extend(t.Chebyshev,t.Effect),t.Chebyshev.defaults={order:1,oversample:"none"},t.Chebyshev.prototype._getCoefficient=function(t,e,i){return i.hasOwnProperty(e)?i[e]:(i[e]=0===e?0:1===e?t:2*t*this._getCoefficient(t,e-1,i)-this._getCoefficient(t,e-2,i),i[e])},Object.defineProperty(t.Chebyshev.prototype,"order",{get:function(){return this._order},set:function(t){this._order=t;for(var e=new Array(4096),i=e.length,r=0;r=this._startTime&&!this._sourceStopped?t.State.Started:t.State.Stopped},t.BufferSource.prototype.start=function(e,i,r,n,o){if(-1!==this._startTime)throw new Error("Tone.BufferSource can only be started once.");if(!this.buffer.loaded)throw new Error("Tone.BufferSource: buffer is either not set or not loaded.");e=this.toSeconds(e),i=this.loop?t.defaultArg(i,this.loopStart):t.defaultArg(i,0),i=this.toSeconds(i),n=t.defaultArg(n,1),this._gain=n,o=this.toSeconds(t.defaultArg(o,this.fadeIn)),this.fadeIn=o,o>0?(this._gainNode.gain.setValueAtTime(0,e),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(this._gain,e+o):this._gainNode.gain.exponentialApproachValueAtTime(this._gain,e,o)):this._gainNode.gain.setValueAtTime(n,e),this._startTime=e;var s=this.toSeconds(t.defaultArg(r,this.buffer.duration-i%this.buffer.duration));if(s=Math.max(s,0),t.isDefined(r)&&(this.loop||(s=Math.min(s,this.buffer.duration-i%this.buffer.duration)),this.stop(e+s,this.fadeOut)),this.loop){var a=this.loopEnd||this.buffer.duration,h=this.loopStart;i>=a&&(i=(i-h)%(a-h)+h)}return this._source.buffer=this.buffer.get(),this._source.loopEnd=this.loopEnd||this.buffer.duration,ithis.sampleTime?(this._gainNode.gain.setValueAtTime(this._gain,n),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(0,e):this._gainNode.gain.exponentialApproachValueAtTime(0,n,i)):this._gainNode.gain.setValueAtTime(0,e),t.context.clearTimeout(this._onendedTimeout),this._onendedTimeout=t.context.setTimeout(this._onended.bind(this),this._stopTime-this.now()),this}},t.BufferSource.prototype.cancelStop=function(){if(-1!==this._startTime&&!this._sourceStopped){var t=this.toSeconds(this.fadeIn);this._gainNode.gain.cancelScheduledValues(this._startTime+t+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime+t+this.sampleTime)),this.context.clearTimeout(this._onendedTimeout),this._stopTime=-1}return this},t.BufferSource.prototype._onended=function(){if(!this._sourceStopped){this._sourceStopped=!0;var t="exponential"===this.curve?2*this.fadeOut:0;this._sourceStarted&&-1!==this._stopTime&&this._source.stop(this._stopTime+t),this.onended(this)}},Object.defineProperty(t.BufferSource.prototype,"loopStart",{get:function(){return this._source.loopStart},set:function(t){this._source.loopStart=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"loopEnd",{get:function(){return this._source.loopEnd},set:function(t){this._source.loopEnd=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"buffer",{get:function(){return this._buffer},set:function(t){this._buffer.set(t)}}),Object.defineProperty(t.BufferSource.prototype,"loop",{get:function(){return this._source.loop},set:function(t){this._source.loop=t,this.cancelStop()}}),t.BufferSource.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.onended=null,this._source.onended=null,this._source.disconnect(),this._source=null,this._gainNode.dispose(),this._gainNode=null,this._buffer.dispose(),this._buffer=null,this._startTime=-1,this.playbackRate=null,t.context.clearTimeout(this._onendedTimeout),this},t.BufferSource}),e(function(t){t.Noise=function(){var e=t.defaults(arguments,["type"],t.Noise);t.Source.call(this,e),this._source=null,this._type=e.type,this._playbackRate=e.playbackRate},t.extend(t.Noise,t.Source),t.Noise.defaults={type:"white",playbackRate:1},Object.defineProperty(t.Noise.prototype,"type",{get:function(){return this._type},set:function(e){if(this._type!==e){if(!(e in i))throw new TypeError("Tone.Noise: invalid type: "+e);if(this._type=e,this.state===t.State.Started){var r=this.now();this._stop(r),this._start(r)}}}}),Object.defineProperty(t.Noise.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._source&&(this._source.playbackRate.value=t)}}),t.Noise.prototype._start=function(e){var r=i[this._type];this._source=new t.BufferSource(r).connect(this.output),this._source.loop=!0,this._source.playbackRate.value=this._playbackRate,this._source.start(this.toSeconds(e),Math.random()*(r.duration-.001))},t.Noise.prototype._stop=function(t){this._source&&(this._source.stop(this.toSeconds(t)),this._source=null)},t.Noise.prototype.restart=function(t){this._stop(t),this._start(t)},t.Noise.prototype.dispose=function(){return t.Source.prototype.dispose.call(this),null!==this._source&&(this._source.disconnect(),this._source=null),this._buffer=null,this};var e={pink:function(){for(var t=[],e=0;e<2;e++){var i,r,n,o,s,a,h,l=new Float32Array(220500);t[e]=l,i=r=n=o=s=a=h=0;for(var u=0;u<220500;u++){var c=2*Math.random()-1;i=.99886*i+.0555179*c,r=.99332*r+.0750759*c,n=.969*n+.153852*c,o=.8665*o+.3104856*c,s=.55*s+.5329522*c,a=-.7616*a-.016898*c,l[u]=i+r+n+o+s+a+h+.5362*c,l[u]*=.11,h=.115926*c}}return t}(),brown:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0,n=0;n<220500;n++){var o=2*Math.random()-1;i[n]=(r+.02*o)/1.02,r=i[n],i[n]*=3.5}}return t}(),white:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0;r<220500;r++)i[r]=2*Math.random()-1}return t}()},i={};function r(){for(var r in e)i[r]=(new t.Buffer).fromArray(e[r])}return t.getContext(r),t.Context.on("init",r),t.Noise}),e(function(t){return t.Reverb=function(){var e=t.defaults(arguments,["decay"],t.Reverb);t.Effect.call(this,e),this._convolver=this.context.createConvolver(),this.decay=e.decay,this.preDelay=e.preDelay,this.connectEffect(this._convolver)},t.extend(t.Reverb,t.Effect),t.Reverb.defaults={decay:1.5,preDelay:.01},t.Reverb.prototype.generate=function(){return t.Offline(function(){var e=new t.Noise,i=new t.Noise,r=new t.Merge;e.connect(r.left),i.connect(r.right);var n=(new t.Gain).toMaster();r.connect(n),e.start(0),i.start(0),n.gain.setValueAtTime(0,0),n.gain.linearRampToValueAtTime(1,this.preDelay),n.gain.exponentialApproachValueAtTime(0,this.preDelay,this.decay-this.preDelay)}.bind(this),this.decay).then(function(t){return this._convolver.buffer=t.get(),this}.bind(this))},t.Reverb.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._convolver.disconnect(),this._convolver=null,this},t.Reverb}),e(function(t){return t.StereoFeedbackEffect=function(){var e=t.defaults(arguments,["feedback"],t.FeedbackEffect);t.StereoEffect.call(this,e),this.feedback=new t.Signal(e.feedback,t.Type.NormalRange),this._feedbackL=new t.Gain,this._feedbackR=new t.Gain,this.effectReturnL.chain(this._feedbackL,this.effectSendL),this.effectReturnR.chain(this._feedbackR,this.effectSendR),this.feedback.fan(this._feedbackL.gain,this._feedbackR.gain),this._readOnly(["feedback"])},t.extend(t.StereoFeedbackEffect,t.StereoEffect),t.StereoFeedbackEffect.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["feedback"]),this.feedback.dispose(),this.feedback=null,this._feedbackL.dispose(),this._feedbackL=null,this._feedbackR.dispose(),this._feedbackR=null,this},t.StereoFeedbackEffect}),e(function(t){return t.StereoWidener=function(){var e=t.defaults(arguments,["width"],t.StereoWidener);t.MidSideEffect.call(this,e),this.width=new t.Signal(e.width,t.Type.NormalRange),this._readOnly(["width"]),this._twoTimesWidthMid=new t.Multiply(2),this._twoTimesWidthSide=new t.Multiply(2),this._midMult=new t.Multiply,this._twoTimesWidthMid.connect(this._midMult,0,1),this.midSend.chain(this._midMult,this.midReturn),this._oneMinusWidth=new t.Subtract,this._oneMinusWidth.connect(this._twoTimesWidthMid),this.context.getConstant(1).connect(this._oneMinusWidth,0,0),this.width.connect(this._oneMinusWidth,0,1),this._sideMult=new t.Multiply,this.width.connect(this._twoTimesWidthSide),this._twoTimesWidthSide.connect(this._sideMult,0,1),this.sideSend.chain(this._sideMult,this.sideReturn)},t.extend(t.StereoWidener,t.MidSideEffect),t.StereoWidener.defaults={width:.5},t.StereoWidener.prototype.dispose=function(){return t.MidSideEffect.prototype.dispose.call(this),this._writable(["width"]),this.width.dispose(),this.width=null,this._midMult.dispose(),this._midMult=null,this._sideMult.dispose(),this._sideMult=null,this._twoTimesWidthMid.dispose(),this._twoTimesWidthMid=null,this._twoTimesWidthSide.dispose(),this._twoTimesWidthSide=null,this._oneMinusWidth.dispose(),this._oneMinusWidth=null,this},t.StereoWidener}),e(function(t){return t.Tremolo=function(){var e=t.defaults(arguments,["frequency","depth"],t.Tremolo);t.StereoEffect.call(this,e),this._lfoL=new t.LFO({phase:e.spread,min:1,max:0}),this._lfoR=new t.LFO({phase:e.spread,min:1,max:0}),this._amplitudeL=new t.Gain,this._amplitudeR=new t.Gain,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.depth=new t.Signal(e.depth,t.Type.NormalRange),this._readOnly(["frequency","depth"]),this.effectSendL.chain(this._amplitudeL,this.effectReturnL),this.effectSendR.chain(this._amplitudeR,this.effectReturnR),this._lfoL.connect(this._amplitudeL.gain),this._lfoR.connect(this._amplitudeR.gain),this.frequency.fan(this._lfoL.frequency,this._lfoR.frequency),this.depth.fan(this._lfoR.amplitude,this._lfoL.amplitude),this.type=e.type,this.spread=e.spread},t.extend(t.Tremolo,t.StereoEffect),t.Tremolo.defaults={frequency:10,type:"sine",depth:.5,spread:180},t.Tremolo.prototype.start=function(t){return this._lfoL.start(t),this._lfoR.start(t),this},t.Tremolo.prototype.stop=function(t){return this._lfoL.stop(t),this._lfoR.stop(t),this},t.Tremolo.prototype.sync=function(e){return this._lfoL.sync(e),this._lfoR.sync(e),t.Transport.syncSignal(this.frequency),this},t.Tremolo.prototype.unsync=function(){return this._lfoL.unsync(),this._lfoR.unsync(),t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Tremolo.prototype,"type",{get:function(){return this._lfoL.type},set:function(t){this._lfoL.type=t,this._lfoR.type=t}}),Object.defineProperty(t.Tremolo.prototype,"spread",{get:function(){return this._lfoR.phase-this._lfoL.phase},set:function(t){this._lfoL.phase=90-t/2,this._lfoR.phase=t/2+90}}),t.Tremolo.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["frequency","depth"]),this._lfoL.dispose(),this._lfoL=null,this._lfoR.dispose(),this._lfoR=null,this._amplitudeL.dispose(),this._amplitudeL=null,this._amplitudeR.dispose(),this._amplitudeR=null,this.frequency=null,this.depth=null,this},t.Tremolo}),e(function(t){return t.Vibrato=function(){var e=t.defaults(arguments,["frequency","depth"],t.Vibrato);t.Effect.call(this,e),this._delayNode=new t.Delay(0,e.maxDelay),this._lfo=new t.LFO({type:e.type,min:0,max:e.maxDelay,frequency:e.frequency,phase:-90}).start().connect(this._delayNode.delayTime),this.frequency=this._lfo.frequency,this.depth=this._lfo.amplitude,this.depth.value=e.depth,this._readOnly(["frequency","depth"]),this.effectSend.chain(this._delayNode,this.effectReturn)},t.extend(t.Vibrato,t.Effect),t.Vibrato.defaults={maxDelay:.005,frequency:5,depth:.1,type:"sine"},Object.defineProperty(t.Vibrato.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.Vibrato.prototype.dispose=function(){t.Effect.prototype.dispose.call(this),this._delayNode.dispose(),this._delayNode=null,this._lfo.dispose(),this._lfo=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null},t.Vibrato}),e(function(t){return t.Event=function(){var e=t.defaults(arguments,["callback","value"],t.Event);t.call(this),this._loop=e.loop,this.callback=e.callback,this.value=e.value,this._loopStart=this.toTicks(e.loopStart),this._loopEnd=this.toTicks(e.loopEnd),this._state=new t.TimelineState(t.State.Stopped),this._playbackRate=1,this._startOffset=0,this._probability=e.probability,this._humanize=e.humanize,this.mute=e.mute,this.playbackRate=e.playbackRate},t.extend(t.Event),t.Event.defaults={callback:t.noOp,loop:!1,loopEnd:"1m",loopStart:0,playbackRate:1,value:null,probability:1,mute:!1,humanize:!1},t.Event.prototype._rescheduleEvents=function(e){return e=t.defaultArg(e,-1),this._state.forEachFrom(e,function(e){var i;if(e.state===t.State.Started){t.isDefined(e.id)&&t.Transport.clear(e.id);var r=e.time+Math.round(this.startOffset/this._playbackRate);if(this._loop){i=1/0,t.isNumber(this._loop)&&(i=this._loop*this._getLoopDuration());var n=this._state.getAfter(r);null!==n&&(i=Math.min(i,n.time-r)),i!==1/0&&(this._state.setStateAtTime(t.State.Stopped,r+i+1),i=t.Ticks(i));var o=t.Ticks(this._getLoopDuration());e.id=t.Transport.scheduleRepeat(this._tick.bind(this),o,t.Ticks(r),i)}else e.id=t.Transport.schedule(this._tick.bind(this),t.Ticks(r))}}.bind(this)),this},Object.defineProperty(t.Event.prototype,"state",{get:function(){return this._state.getValueAtTime(t.Transport.ticks)}}),Object.defineProperty(t.Event.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t}}),Object.defineProperty(t.Event.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t}}),Object.defineProperty(t.Event.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t}}),t.Event.prototype.start=function(e){return e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Stopped&&(this._state.add({state:t.State.Started,time:e,id:void 0}),this._rescheduleEvents(e)),this},t.Event.prototype.stop=function(e){if(this.cancel(e),e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Started){this._state.setStateAtTime(t.State.Stopped,e);var i=this._state.getBefore(e),r=e;null!==i&&(r=i.time),this._rescheduleEvents(r)}return this},t.Event.prototype.cancel=function(e){return e=t.defaultArg(e,-1/0),e=this.toTicks(e),this._state.forEachFrom(e,function(e){t.Transport.clear(e.id)}),this._state.cancel(e),this},t.Event.prototype._tick=function(e){var i=t.Transport.getTicksAtTime(e);if(!this.mute&&this._state.getValueAtTime(i)===t.State.Started){if(this.probability<1&&Math.random()>this.probability)return;if(this.humanize){var r=.02;t.isBoolean(this.humanize)||(r=this.toSeconds(this.humanize)),e+=(2*Math.random()-1)*r}this.callback(e,this.value)}},t.Event.prototype._getLoopDuration=function(){return Math.round((this._loopEnd-this._loopStart)/this._playbackRate)},Object.defineProperty(t.Event.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"progress",{get:function(){if(this._loop){var e=t.Transport.ticks,i=this._state.get(e);if(null!==i&&i.state===t.State.Started){var r=this._getLoopDuration();return(e-i.time)%r/r}return 0}return 0}}),t.Event.prototype.dispose=function(){this.cancel(),this._state.dispose(),this._state=null,this.callback=null,this.value=null},t.Event}),e(function(t){return t.Loop=function(){var e=t.defaults(arguments,["callback","interval"],t.Loop);t.call(this),this._event=new t.Event({callback:this._tick.bind(this),loop:!0,loopEnd:e.interval,playbackRate:e.playbackRate,probability:e.probability}),this.callback=e.callback,this.iterations=e.iterations},t.extend(t.Loop),t.Loop.defaults={interval:"4n",callback:t.noOp,playbackRate:1,iterations:1/0,probability:!0,mute:!1},t.Loop.prototype.start=function(t){return this._event.start(t),this},t.Loop.prototype.stop=function(t){return this._event.stop(t),this},t.Loop.prototype.cancel=function(t){return this._event.cancel(t),this},t.Loop.prototype._tick=function(t){this.callback(t)},Object.defineProperty(t.Loop.prototype,"state",{get:function(){return this._event.state}}),Object.defineProperty(t.Loop.prototype,"progress",{get:function(){return this._event.progress}}),Object.defineProperty(t.Loop.prototype,"interval",{get:function(){return this._event.loopEnd},set:function(t){this._event.loopEnd=t}}),Object.defineProperty(t.Loop.prototype,"playbackRate",{get:function(){return this._event.playbackRate},set:function(t){this._event.playbackRate=t}}),Object.defineProperty(t.Loop.prototype,"humanize",{get:function(){return this._event.humanize},set:function(t){this._event.humanize=t}}),Object.defineProperty(t.Loop.prototype,"probability",{get:function(){return this._event.probability},set:function(t){this._event.probability=t}}),Object.defineProperty(t.Loop.prototype,"mute",{get:function(){return this._event.mute},set:function(t){this._event.mute=t}}),Object.defineProperty(t.Loop.prototype,"iterations",{get:function(){return!0===this._event.loop?1/0:this._event.loop},set:function(t){this._event.loop=t===1/0||t}}),t.Loop.prototype.dispose=function(){this._event.dispose(),this._event=null,this.callback=null},t.Loop}),e(function(t){return t.Part=function(){var e=t.defaults(arguments,["callback","events"],t.Part);t.Event.call(this,e),this._events=[];for(var i=0;i=this._loopStart&&e.startOffset=r&&(e.loop=!1,e.start(t.Ticks(i))):e.startOffset>=r&&e.start(t.Ticks(i))},Object.defineProperty(t.Part.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t,this._forEach(function(t){t.startOffset+=this._startOffset})}}),t.Part.prototype.stop=function(e){var i=this.toTicks(e);return this._state.cancel(i),this._state.setStateAtTime(t.State.Stopped,i),this._forEach(function(t){t.stop(e)}),this},t.Part.prototype.at=function(e,i){e=t.TransportTime(e);for(var r=t.Ticks(1).toSeconds(),n=0;n=0;r--){var n=this._events[r];n instanceof t.Part?n.remove(e,i):n.startOffset===e&&(t.isUndef(i)||t.isDefined(i)&&n.value===i)&&(this._events.splice(r,1),n.dispose())}return this},t.Part.prototype.removeAll=function(){return this._forEach(function(t){t.dispose()}),this._events=[],this},t.Part.prototype.cancel=function(t){return this._forEach(function(e){e.cancel(t)}),this._state.cancel(this.toTicks(t)),this},t.Part.prototype._forEach=function(e,i){if(this._events){i=t.defaultArg(i,this);for(var r=this._events.length-1;r>=0;r--){var n=this._events[r];n instanceof t.Part?n._forEach(e,i):e.call(i,n)}}return this},t.Part.prototype._setAll=function(t,e){this._forEach(function(i){i[t]=e})},t.Part.prototype._tick=function(t,e){this.mute||this.callback(t,e)},t.Part.prototype._testLoopBoundries=function(e){e.startOffset=this._loopEnd?e.cancel(0):e.state===t.State.Stopped&&this._restartEvent(e)},Object.defineProperty(t.Part.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t,this._setAll("probability",t)}}),Object.defineProperty(t.Part.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t,this._setAll("humanize",t)}}),Object.defineProperty(t.Part.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._forEach(function(e){e._loopStart=this._loopStart,e._loopEnd=this._loopEnd,e.loop=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._forEach(function(e){e.loopEnd=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._forEach(function(t){t.loopStart=this.loopStart,this._testLoopBoundries(t)})}}),Object.defineProperty(t.Part.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._setAll("playbackRate",t)}}),Object.defineProperty(t.Part.prototype,"length",{get:function(){return this._events.length}}),t.Part.prototype.dispose=function(){return this.removeAll(),this._state.dispose(),this._state=null,this.callback=null,this._events=null,this},t.Part}),e(function(t){return t.Pattern=function(){var e=t.defaults(arguments,["callback","values","pattern"],t.Pattern);t.Loop.call(this,e),this._pattern=new t.CtrlPattern({values:e.values,type:e.pattern,index:e.index})},t.extend(t.Pattern,t.Loop),t.Pattern.defaults={pattern:t.CtrlPattern.Type.Up,callback:t.noOp,values:[]},t.Pattern.prototype._tick=function(t){this.callback(t,this._pattern.value),this._pattern.next()},Object.defineProperty(t.Pattern.prototype,"index",{get:function(){return this._pattern.index},set:function(t){this._pattern.index=t}}),Object.defineProperty(t.Pattern.prototype,"values",{get:function(){return this._pattern.values},set:function(t){this._pattern.values=t}}),Object.defineProperty(t.Pattern.prototype,"value",{get:function(){return this._pattern.value}}),Object.defineProperty(t.Pattern.prototype,"pattern",{get:function(){return this._pattern.type},set:function(t){this._pattern.type=t}}),t.Pattern.prototype.dispose=function(){t.Loop.prototype.dispose.call(this),this._pattern.dispose(),this._pattern=null},t.Pattern}),e(function(t){return t.Sequence=function(){var e=t.defaults(arguments,["callback","events","subdivision"],t.Sequence),i=e.events;if(delete e.events,t.Part.call(this,e),this._subdivision=this.toTicks(e.subdivision),t.isUndef(e.loopEnd)&&t.isDefined(i)&&(this._loopEnd=i.length*this._subdivision),this._loop=!0,t.isDefined(i))for(var r=0;r1){var e=-t/2,i=t/(this._oscillators.length-1);this._forEach(function(t,r){t.detune.value=e+i*r})}}}),Object.defineProperty(t.FatOscillator.prototype,"count",{get:function(){return this._oscillators.length},set:function(e){if(e=Math.max(e,1),this._oscillators.length!==e){this._forEach(function(t){t.dispose()}),this._oscillators=[];for(var i=0;i0&&this.getLevelAtTime(e)>.05){var i=this.toSeconds(this.portamento);this.frequency.exponentialRampTo(t,i,e)}else this.frequency.setValueAtTime(t,e);return this},t.Monophonic}),e(function(t){return t.Synth=function(e){e=t.defaultArg(e,t.Synth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","frequency","detune","envelope"])},t.extend(t.Synth,t.Monophonic),t.Synth.defaults={oscillator:{type:"triangle"},envelope:{attack:.005,decay:.1,sustain:.3,release:1}},t.Synth.prototype._triggerEnvelopeAttack=function(t,e){return this.envelope.triggerAttack(t,e),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.Synth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.Synth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.frequency=null,this.detune=null,this},t.Synth}),e(function(t){return t.AMSynth=function(e){e=t.defaultArg(e,t.AMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth,this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth,this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this._modulationScale=new t.AudioToGain,this._modulationNode=new t.Gain,this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.chain(this._modulationScale,this._modulationNode.gain),this._carrier.chain(this._modulationNode,this.output),this._readOnly(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.AMSynth,t.Monophonic),t.AMSynth.defaults={harmonicity:3,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.AMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.AMSynth.prototype._triggerEnvelopeRelease=function(t){return this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.AMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationScale.dispose(),this._modulationScale=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.AMSynth}),e(function(t){return t.MonoSynth=function(e){e=t.defaultArg(e,t.MonoSynth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.filter=new t.Filter(e.filter),this.filterEnvelope=new t.FrequencyEnvelope(e.filterEnvelope),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.filter,this.envelope,this.output),this.filterEnvelope.connect(this.filter.frequency),this._readOnly(["oscillator","frequency","detune","filter","filterEnvelope","envelope"])},t.extend(t.MonoSynth,t.Monophonic),t.MonoSynth.defaults={frequency:"C4",detune:0,oscillator:{type:"square"},filter:{Q:6,type:"lowpass",rolloff:-24},envelope:{attack:.005,decay:.1,sustain:.9,release:1},filterEnvelope:{attack:.06,decay:.2,sustain:.5,release:2,baseFrequency:200,octaves:7,exponent:2}},t.MonoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.envelope.triggerAttack(t,e),this.filterEnvelope.triggerAttack(t),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.MonoSynth.prototype._triggerEnvelopeRelease=function(t){return this.envelope.triggerRelease(t),this.filterEnvelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MonoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","filter","filterEnvelope","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.filterEnvelope.dispose(),this.filterEnvelope=null,this.filter.dispose(),this.filter=null,this.frequency=null,this.detune=null,this},t.MonoSynth}),e(function(t){return t.DuoSynth=function(e){e=t.defaultArg(e,t.DuoSynth.defaults),t.Monophonic.call(this,e),this.voice0=new t.MonoSynth(e.voice0),this.voice0.volume.value=-10,this.voice1=new t.MonoSynth(e.voice1),this.voice1.volume.value=-10,this._vibrato=new t.LFO(e.vibratoRate,-50,50),this._vibrato.start(),this.vibratoRate=this._vibrato.frequency,this._vibratoGain=new t.Gain(e.vibratoAmount,t.Type.Positive),this.vibratoAmount=this._vibratoGain.gain,this.frequency=new t.Signal(440,t.Type.Frequency),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.frequency.connect(this.voice0.frequency),this.frequency.chain(this.harmonicity,this.voice1.frequency),this._vibrato.connect(this._vibratoGain),this._vibratoGain.fan(this.voice0.detune,this.voice1.detune),this.voice0.connect(this.output),this.voice1.connect(this.output),this._readOnly(["voice0","voice1","frequency","vibratoAmount","vibratoRate"])},t.extend(t.DuoSynth,t.Monophonic),t.DuoSynth.defaults={vibratoAmount:.5,vibratoRate:5,harmonicity:1.5,voice0:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}},voice1:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}}},t.DuoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.voice0._triggerEnvelopeAttack(t,e),this.voice1._triggerEnvelopeAttack(t,e),this},t.DuoSynth.prototype._triggerEnvelopeRelease=function(t){return this.voice0._triggerEnvelopeRelease(t),this.voice1._triggerEnvelopeRelease(t),this},t.DuoSynth.prototype.getLevelAtTime=function(t){return(this.voice0.getLevelAtTime(t)+this.voice1.getLevelAtTime(t))/2},t.DuoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["voice0","voice1","frequency","vibratoAmount","vibratoRate"]),this.voice0.dispose(),this.voice0=null,this.voice1.dispose(),this.voice1=null,this.frequency.dispose(),this.frequency=null,this._vibratoGain.dispose(),this._vibratoGain=null,this._vibrato=null,this.harmonicity.dispose(),this.harmonicity=null,this.vibratoAmount.dispose(),this.vibratoAmount=null,this.vibratoRate=null,this},t.DuoSynth}),e(function(t){return t.FMSynth=function(e){e=t.defaultArg(e,t.FMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth(e.carrier),this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth(e.modulator),this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.modulationIndex=new t.Multiply(e.modulationIndex),this.modulationIndex.units=t.Type.Positive,this._modulationNode=new t.Gain(0),this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.frequency.chain(this.modulationIndex,this._modulationNode),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.connect(this._modulationNode.gain),this._modulationNode.connect(this._carrier.frequency),this._carrier.connect(this.output),this._readOnly(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.FMSynth,t.Monophonic),t.FMSynth.defaults={harmonicity:3,modulationIndex:10,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.FMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.FMSynth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.FMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.modulationIndex.dispose(),this.modulationIndex=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.FMSynth}),e(function(t){return t.MembraneSynth=function(e){e=t.defaultArg(e,t.MembraneSynth.defaults),t.Instrument.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.octaves=e.octaves,this.pitchDecay=e.pitchDecay,this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","envelope"])},t.extend(t.MembraneSynth,t.Instrument),t.MembraneSynth.defaults={pitchDecay:.05,octaves:10,oscillator:{type:"sine"},envelope:{attack:.001,decay:.4,sustain:.01,release:1.4,attackCurve:"exponential"}},t.MembraneSynth.prototype.triggerAttack=function(t,e,i){e=this.toSeconds(e);var r=(t=this.toFrequency(t))*this.octaves;return this.oscillator.frequency.setValueAtTime(r,e),this.oscillator.frequency.exponentialRampToValueAtTime(t,e+this.toSeconds(this.pitchDecay)),this.envelope.triggerAttack(e,i),this.oscillator.start(e),this},t.MembraneSynth.prototype.triggerRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MembraneSynth.prototype.dispose=function(){return t.Instrument.prototype.dispose.call(this),this._writable(["oscillator","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this},t.MembraneSynth}),e(function(t){var e=[1,1.483,1.932,2.546,2.63,3.897];return t.MetalSynth=function(i){i=t.defaultArg(i,t.MetalSynth.defaults),t.Instrument.call(this,i),this.frequency=new t.Signal(i.frequency,t.Type.Frequency),this._oscillators=[],this._freqMultipliers=[],this._amplitue=new t.Gain(0).connect(this.output),this._highpass=new t.Filter({type:"highpass",Q:-3.0102999566398125}).connect(this._amplitue),this._octaves=i.octaves,this._filterFreqScaler=new t.Scale(i.resonance,7e3),this.envelope=new t.Envelope({attack:i.envelope.attack,attackCurve:"linear",decay:i.envelope.decay,sustain:0,release:i.envelope.release}).chain(this._filterFreqScaler,this._highpass.frequency),this.envelope.connect(this._amplitue.gain);for(var r=0;re&&(o.voice.triggerRelease(e),o.release=e)}return this},t.PolySynth.prototype.sync=function(){return this._syncMethod("triggerAttack",1),this._syncMethod("triggerRelease",1),this},t.PolySynth.prototype.set=function(t,e,i){for(var r=0;rt&&(i.release=t,i.voice.triggerRelease(t))}return this},t.PolySynth.prototype.dispose=function(){t.Instrument.prototype.dispose.call(this);for(var e=0;e0)r=i[0];else if(!r&&t.isDefined(e))throw new Error("Tone.UserMedia: no matching device: "+e);this._device=r;var n={audio:{echoCancellation:!1,sampleRate:this.context.sampleRate}};return r&&(n.audio.deviceId=r.deviceId),navigator.mediaDevices.getUserMedia(n).then(function(t){return this._stream||(this._stream=t,this._mediaStream=this.context.createMediaStreamSource(t),this._mediaStream.connect(this.output)),this}.bind(this))}.bind(this))},t.UserMedia.prototype.close=function(){return this._stream&&(this._stream.getAudioTracks().forEach(function(t){t.stop()}),this._stream=null,this._mediaStream.disconnect(),this._mediaStream=null),this._device=null,this},t.UserMedia.enumerateDevices=function(){return navigator.mediaDevices.enumerateDevices().then(function(t){return t.filter(function(t){return"audioinput"===t.kind})})},Object.defineProperty(t.UserMedia.prototype,"state",{get:function(){return this._stream&&this._stream.active?t.State.Started:t.State.Stopped}}),Object.defineProperty(t.UserMedia.prototype,"deviceId",{get:function(){if(this._device)return this._device.deviceId}}),Object.defineProperty(t.UserMedia.prototype,"groupId",{get:function(){if(this._device)return this._device.groupId}}),Object.defineProperty(t.UserMedia.prototype,"label",{get:function(){if(this._device)return this._device.label}}),Object.defineProperty(t.UserMedia.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.UserMedia.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.close(),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null,this},Object.defineProperty(t.UserMedia,"supported",{get:function(){return t.isDefined(navigator.mediaDevices)&&t.isFunction(navigator.mediaDevices.getUserMedia)}}),t.UserMedia}),e(function(t){return t.Midi=function(e,i){if(!(this instanceof t.Midi))return new t.Midi(e,i);t.Frequency.call(this,e,i)},t.extend(t.Midi,t.Frequency),t.Midi.prototype._defaultUnits="midi",t.Midi.prototype._frequencyToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._frequencyToUnits.call(this,e))},t.Midi.prototype._ticksToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._ticksToUnits.call(this,e))},t.Midi.prototype._beatsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._beatsToUnits.call(this,e))},t.Midi.prototype._secondsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._secondsToUnits.call(this,e))},t.Midi.prototype.toMidi=function(){return this.valueOf()},t.Midi.prototype.toFrequency=function(){return t.Frequency.mtof(this.toMidi())},t.Midi.prototype.transpose=function(t){return new this.constructor(this.toMidi()+t)},t.Midi}),t}()}.call(e,i,e,t))||(t.exports=r)},function(t,e,i){(function(e){var i;t.exports=function t(e,r,n){function o(a,h){if(!r[a]){if(!e[a]){var l="function"==typeof i&&i;if(!h&&l)return i(a,!0);if(s)return s(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var c=r[a]={exports:{}};e[a][0].call(c.exports,function(t){var i=e[a][1][t];return o(i||t)},c,c.exports,t,e,r,n)}return r[a].exports}for(var s="function"==typeof i&&i,a=0;a0)throw new Error("Invalid string. Length must be a multiple of 4");var u=t.length;h="="===t.charAt(u-2)?2:"="===t.charAt(u-1)?1:0,l=new i(3*t.length/4-h),s=h>0?t.length-4:t.length;var c=0;for(n=0,o=0;n>16),r((65280&a)>>8),r(255&a);return 2===h?r(255&(a=e(t.charAt(n))<<2|e(t.charAt(n+1))>>4)):1===h&&(r((a=e(t.charAt(n))<<10|e(t.charAt(n+1))<<4|e(t.charAt(n+2))>>2)>>8&255),r(255&a)),l},t.fromByteArray=function(t){function e(t){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t)}function i(t){return e(t>>18&63)+e(t>>12&63)+e(t>>6&63)+e(63&t)}var r,n,o,s=t.length%3,a="";for(r=0,o=t.length-s;r>2),a+=e(n<<4&63),a+="==";break;case 2:n=(t[t.length-2]<<8)+t[t.length-1],a+=e(n>>10),a+=e(n>>4&63),a+=e(n<<2&63),a+="="}return a}}(void 0===i?this.base64js={}:i)},{}],2:[function(t,e,i){},{}],3:[function(t,i,r){(function(e){"use strict";function i(){return n.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function n(t){return this instanceof n?(n.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof t?function(t,e){if(t=s(t,e<0?0:0|a(e)),!n.TYPED_ARRAY_SUPPORT)for(var i=0;i1?arguments[1]:"utf8"):function(t,e){if(n.isBuffer(e))return function(t,e){var i=0|a(e.length);return t=s(t,i),e.copy(t,0,0,i),t}(t,e);if(F(e))return function(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r1?new n(t,arguments[1]):new n(t)}function o(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r>>1&&(t.parent=I),t}function a(t){if(t>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|t}function h(t,e){"string"!=typeof t&&(t=""+t);var i=t.length;if(0===i)return 0;for(var r=!1;;)switch(e){case"ascii":case"binary":case"raw":case"raws":return i;case"utf8":case"utf-8":return k(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return C(t).length;default:if(r)return k(t).length;e=(""+e).toLowerCase(),r=!0}}function l(t,e,i,r){i=Number(i)||0;var n=t.length-i;r?(r=Number(r))>n&&(r=n):r=n;var o=e.length;if(o%2!=0)throw new Error("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,n=i%256,o.push(n),o.push(r);return o}(e,t.length-i),t,i,r)}function m(t,e,i){return 0===e&&i===t.length?O.fromByteArray(t):O.fromByteArray(t.slice(e,i))}function y(t,e,i){i=Math.min(t.length,i);for(var r=[],n=e;n239?4:l>223?3:l>191?2:1;if(n+c<=i)switch(c){case 1:l<128&&(u=l);break;case 2:128==(192&(o=t[n+1]))&&(h=(31&l)<<6|63&o)>127&&(u=h);break;case 3:o=t[n+1],s=t[n+2],128==(192&o)&&128==(192&s)&&(h=(15&l)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(u=h);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&l)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(u=h)}null===u?(u=65533,c=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),n+=c}return function(t){var e=t.length;if(e<=D)return String.fromCharCode.apply(String,t);for(var i="",r=0;rr)&&(i=r);for(var n="",o=e;oi)throw new RangeError("Trying to access beyond buffer length")}function x(t,e,i,r,o,s){if(!n.isBuffer(t))throw new TypeError("buffer must be a Buffer instance");if(e>o||et.length)throw new RangeError("index out of range")}function w(t,e,i,r){e<0&&(e=65535+e+1);for(var n=0,o=Math.min(t.length-i,2);n>>8*(r?n:1-n)}function T(t,e,i,r){e<0&&(e=4294967295+e+1);for(var n=0,o=Math.min(t.length-i,4);n>>8*(r?n:3-n)&255}function P(t,e,i,r,n,o){if(e>n||et.length)throw new RangeError("index out of range");if(i<0)throw new RangeError("index out of range")}function A(t,e,i,r,n){return n||P(t,e,i,4,3.4028234663852886e38,-3.4028234663852886e38),L.write(t,e,i,r,23,4),i+4}function M(t,e,i,r,n){return n||P(t,e,i,8,1.7976931348623157e308,-1.7976931348623157e308),L.write(t,e,i,r,52,8),i+8}function E(t){return t<16?"0"+t.toString(16):t.toString(16)}function k(t,e){e=e||1/0;for(var i,r=t.length,n=null,o=[],s=0;s55295&&i<57344){if(!n){if(i>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}n=i;continue}if(i<56320){(e-=3)>-1&&o.push(239,191,189),n=i;continue}i=65536+(n-55296<<10|i-56320)}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,i<128){if((e-=1)<0)break;o.push(i)}else if(i<2048){if((e-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((e-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function C(t){return O.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(B,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function R(t,e,i,r){for(var n=0;n=e.length||n>=t.length);n++)e[n+i]=t[n];return n}var O=t("base64-js"),L=t("ieee754"),F=t("isarray");r.Buffer=n,r.SlowBuffer=function t(e,i){if(!(this instanceof t))return new t(e,i);var r=new n(e,i);return delete r.parent,r},r.INSPECT_MAX_BYTES=50,n.poolSize=8192;var I={};n.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){function t(){}try{var e=new Uint8Array(1);return e.foo=function(){return 42},e.constructor=t,42===e.foo()&&e.constructor===t&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}(),n.TYPED_ARRAY_SUPPORT?(n.prototype.__proto__=Uint8Array.prototype,n.__proto__=Uint8Array):(n.prototype.length=void 0,n.prototype.parent=void 0),n.isBuffer=function(t){return!(null==t||!t._isBuffer)},n.compare=function(t,e){if(!n.isBuffer(t)||!n.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var i=t.length,r=e.length,o=0,s=Math.min(i,r);othis.length&&(i=this.length),i<=e)return"";for(;;)switch(t){case"hex":return _(this,e,i);case"utf8":case"utf-8":return y(this,e,i);case"ascii":return v(this,e,i);case"binary":return g(this,e,i);case"base64":return m(this,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return b(this,e,i);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}.apply(this,arguments)},n.prototype.equals=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===n.compare(this,t)},n.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},n.prototype.compare=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?0:n.compare(this,t)},n.prototype.indexOf=function(t,e){function i(t,e,i){for(var r=-1,n=0;i+n2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e>>=0,0===this.length)return-1;if(e>=this.length)return-1;if(e<0&&(e=Math.max(this.length+e,0)),"string"==typeof t)return 0===t.length?-1:String.prototype.indexOf.call(this,t,e);if(n.isBuffer(t))return i(this,t,e);if("number"==typeof t)return n.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,t,e):i(this,[t],e);throw new TypeError("val must be string, number or Buffer")},n.prototype.get=function(t){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(t)},n.prototype.set=function(t,e){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(t,e)},n.prototype.write=function(t,e,i,r){if(void 0===e)r="utf8",i=this.length,e=0;else if(void 0===i&&"string"==typeof e)r=e,i=this.length,e=0;else if(isFinite(e))e|=0,isFinite(i)?(i|=0,void 0===r&&(r="utf8")):(r=i,i=void 0);else{var n=r;r=e,e=0|i,i=n}var o=this.length-e;if((void 0===i||i>o)&&(i=o),t.length>0&&(i<0||e<0)||e>this.length)throw new RangeError("attempt to write outside buffer bounds");r||(r="utf8");for(var s=!1;;)switch(r){case"hex":return l(this,t,e,i);case"utf8":case"utf-8":return u(this,t,e,i);case"ascii":return c(this,t,e,i);case"binary":return p(this,t,e,i);case"base64":return d(this,t,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return f(this,t,e,i);default:if(s)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),s=!0}},n.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var D=4096;n.prototype.slice=function(t,e){var i,r=this.length;if(t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(n*=256);)r+=this[t+--e]*n;return r},n.prototype.readUInt8=function(t,e){return e||S(t,1,this.length),this[t]},n.prototype.readUInt16LE=function(t,e){return e||S(t,2,this.length),this[t]|this[t+1]<<8},n.prototype.readUInt16BE=function(t,e){return e||S(t,2,this.length),this[t]<<8|this[t+1]},n.prototype.readUInt32LE=function(t,e){return e||S(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},n.prototype.readUInt32BE=function(t,e){return e||S(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},n.prototype.readIntLE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=this[t],n=1,o=0;++o=(n*=128)&&(r-=Math.pow(2,8*e)),r},n.prototype.readIntBE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=e,n=1,o=this[t+--r];r>0&&(n*=256);)o+=this[t+--r]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},n.prototype.readInt8=function(t,e){return e||S(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},n.prototype.readInt16LE=function(t,e){e||S(t,2,this.length);var i=this[t]|this[t+1]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt16BE=function(t,e){e||S(t,2,this.length);var i=this[t+1]|this[t]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt32LE=function(t,e){return e||S(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},n.prototype.readInt32BE=function(t,e){return e||S(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},n.prototype.readFloatLE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!0,23,4)},n.prototype.readFloatBE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!1,23,4)},n.prototype.readDoubleLE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!0,52,8)},n.prototype.readDoubleBE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!1,52,8)},n.prototype.writeUIntLE=function(t,e,i,r){t=+t,e|=0,i|=0,r||x(this,t,e,i,Math.pow(2,8*i),0);var n=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+n]=t/o&255;return e+i},n.prototype.writeUInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,255,0),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},n.prototype.writeUInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeUInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeUInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):T(this,t,e,!0),e+4},n.prototype.writeUInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeIntLE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=0,s=1,a=t<0?1:0;for(this[e]=255&t;++o>0)-a&255;return e+i},n.prototype.writeIntBE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=i-1,s=1,a=t<0?1:0;for(this[e+o]=255&t;--o>=0&&(s*=256);)this[e+o]=(t/s>>0)-a&255;return e+i},n.prototype.writeInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,127,-128),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},n.prototype.writeInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):T(this,t,e,!0),e+4},n.prototype.writeInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeFloatLE=function(t,e,i){return A(this,t,e,!0,i)},n.prototype.writeFloatBE=function(t,e,i){return A(this,t,e,!1,i)},n.prototype.writeDoubleLE=function(t,e,i){return M(this,t,e,!0,i)},n.prototype.writeDoubleBE=function(t,e,i){return M(this,t,e,!1,i)},n.prototype.copy=function(t,e,i,r){if(i||(i=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;o--)t[o+e]=this[o+i];else if(s<1e3||!n.TYPED_ARRAY_SUPPORT)for(o=0;o=this.length)throw new RangeError("start out of bounds");if(i<0||i>this.length)throw new RangeError("end out of bounds");var r;if("number"==typeof t)for(r=e;r>1,u=-7,c=i?n-1:0,p=i?-1:1,d=t[e+c];for(c+=p,o=d&(1<<-u)-1,d>>=-u,u+=a;u>0;o=256*o+t[e+c],c+=p,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=r;u>0;s=256*s+t[e+c],c+=p,u-=8);if(0===o)o=1-l;else{if(o===h)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,r),o-=l}return(d?-1:1)*s*Math.pow(2,o-r)},i.write=function(t,e,i,r,n,o){var s,a,h,l=8*o-n-1,u=(1<>1,p=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,f=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+c>=1?p/h:p*Math.pow(2,1-c))*h>=2&&(s++,h/=2),s+c>=u?(a=0,s=u):s+c>=1?(a=(e*h-1)*Math.pow(2,n),s+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,n),s=0));n>=8;t[i+d]=255&a,d+=f,a/=256,n-=8);for(s=s<0;t[i+d]=255&s,d+=f,s/=256,l-=8);t[i+d-f]|=128*m}},{}],8:[function(t,e,i){var r={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},{}],9:[function(t,e,i){"use strict";function r(t,e){return t.b===e.b&&t.a===e.a}function n(t,e){return t.bt?0:t)<=(i=0>i?0:i)?0===i?(e+r)/2:e+t/(t+i)*(r-e):r+i/(t+i)*(e-r)}function d(t){var e=g(t.b);return b(e,t.c),b(e.b,t.c),S(e,t.a),e}function f(t,e){var i=!1,r=!1;t!==e&&(e.a!==t.a&&(r=!0,w(e.a,t.a)),e.d!==t.d&&(i=!0,T(e.d,t.d)),_(e,t),r||(b(e,t.a),t.a.c=t),i||(S(e,t.d),t.d.a=t))}function m(t){var e=t.b,i=!1;t.d!==t.b.d&&(i=!0,T(t.d,t.b.d)),t.c===t?w(t.a,null):(t.b.d.a=J(t),t.a.c=t.c,_(t,J(t)),i||S(t,t.d)),e.c===e?(w(e.a,null),T(e.d,null)):(t.d.a=J(e),e.a.c=e.c,_(e,J(e))),x(t)}function y(t){var e=g(t),i=e.b;return _(e,t.e),e.a=t.b.a,b(i,e.a),e.d=i.d=t.d,e=e.b,_(t.b,J(t.b)),_(t.b,e),t.b.a=e.a,e.b.a.c=e.b,e.b.d=t.b.d,e.f=t.f,e.b.f=t.b.f,e}function v(t,e){var i=!1,r=g(t),n=r.b;return e.d!==t.d&&(i=!0,T(e.d,t.d)),_(r,t.e),_(n,e),r.a=t.b.a,n.a=e.a,r.d=n.d=t.d,t.d.a=n,i||S(r,t.d),r}function g(t){var e=new Z,i=new Z,r=t.b.h;return i.h=r,r.b.h=e,e.h=t,t.b.h=i,e.b=i,e.c=e,e.e=i,i.b=e,i.c=i,i.e=e}function _(t,e){var i=t.c,r=e.c;i.b.e=e,r.b.e=t,t.c=r,e.c=i}function b(t,e){var i=e.f,r=new K(e,i);i.e=r,e.f=r,i=r.c=t;do{i.a=r,i=i.c}while(i!==t)}function S(t,e){var i=e.d,r=new Q(e,i);i.b=r,e.d=r,r.a=t,r.c=e.c,i=t;do{i.d=r,i=i.e}while(i!==t)}function x(t){var e=t.h;t=t.b.h,e.b.h=t,t.b.h=e}function w(t,e){var i=t.c,r=i;do{r.a=e,r=r.c}while(r!==i);i=t.f,(r=t.e).f=i,i.e=r}function T(t,e){var i=t.a,r=i;do{r.d=e,r=r.e}while(r!==i);i=t.d,(r=t.b).d=i,i.b=r}function P(t){var e=0;return Math.abs(t[1])>Math.abs(t[0])&&(e=1),Math.abs(t[2])>Math.abs(t[e])&&(e=2),e}function A(t,e){t.f+=e.f,t.b.f+=e.b.f}function M(t,e,i){return t=t.a,e=e.a,i=i.a,e.b.a===t?i.b.a===t?n(e.a,i.a)?0>=s(i.b.a,e.a,i.a):0<=s(e.b.a,i.a,e.a):0>=s(i.b.a,t,i.a):i.b.a===t?0<=s(e.b.a,t,e.a):(e=o(e.b.a,t,e.a),t=o(i.b.a,t,i.a),e>=t)}function E(t){t.a.i=null;var e=t.e;e.a.c=e.c,e.c.a=e.a,t.e=null}function k(t,e){m(t.a),t.c=!1,t.a=e,e.i=t}function C(t){var e=t.a.a;do{t=ut(t)}while(t.a.a===e);return t.c&&(e=v(lt(t).a.b,t.a.e),k(t,e),t=ut(t)),t}function R(t,e,i){var r=new ht;return r.a=i,r.e=z(t.f,e.e,r),i.i=r}function O(t,e){switch(t.s){case 100130:return 0!=(1&e);case 100131:return 0!==e;case 100132:return 0e;case 100134:return 2<=e||-2>=e}return!1}function L(t){var e=t.a,i=e.d;i.c=t.d,i.a=e,E(t)}function F(t,e,i){for(t=e,e=e.a;t!==i;){t.c=!1;var r=lt(t),n=r.a;if(n.a!==e.a){if(!r.c){L(t);break}n=v(e.c.b,n.b),k(r,n)}e.c!==n&&(f(J(n),n),f(e,n)),L(t),e=r.a,t=r}return e}function I(t,e,i,r,n,o){var s=!0;do{R(t,e,i.b),i=i.c}while(i!==r);for(null===n&&(n=lt(e).a.b.c);r=lt(e),(i=r.a.b).a===n.a;)i.c!==n&&(f(J(i),i),f(J(n),i)),r.f=e.f-i.f,r.d=O(t,r.f),e.b=!0,!s&&N(t,e)&&(A(i,n),E(e),m(n)),s=!1,e=r,n=i;e.b=!0,o&&q(t,e)}function D(t,e,i,r,n){var o=[e.g[0],e.g[1],e.g[2]];e.d=null,e.d=t.o&&t.o(o,i,r,t.c)||null,null===e.d&&(n?t.n||(Y(t,100156),t.n=!0):e.d=i[0])}function U(t,e,i){var r=[null,null,null,null];r[0]=e.a.d,r[1]=i.a.d,D(t,e.a,r,[.5,.5,0,0],!1),f(e,i)}function B(t,e,i,r,n){var o=Math.abs(e.b-t.b)+Math.abs(e.a-t.a),s=Math.abs(i.b-t.b)+Math.abs(i.a-t.a),a=n+1;r[n]=.5*s/(o+s),r[a]=.5*o/(o+s),t.g[0]+=r[n]*e.g[0]+r[a]*i.g[0],t.g[1]+=r[n]*e.g[1]+r[a]*i.g[1],t.g[2]+=r[n]*e.g[2]+r[a]*i.g[2]}function N(t,e){var i=lt(e),o=e.a,a=i.a;if(n(o.a,a.a)){if(0=p?st(i,p):n(u[l[p>>1]],u[l[p]])?st(i,p):at(i,p)),u[h]=null,c[h]=i.b,i.b=h}else for(i.c[-(h+1)]=null;0s(o.b.a,a.a,o.a))return!1;ut(e).b=e.b=!0,y(o.b),f(J(a),o)}return!0}function G(t,e){var i=lt(e),u=e.a,c=i.a,d=u.a,m=c.a,v=u.b.a,g=c.b.a,_=new K;if(s(v,t.a,d),s(g,t.a,m),d===m||Math.min(d.a,v.a)>Math.max(m.a,g.a))return!1;if(n(d,m)){if(0s(v,m,d))return!1;var b,S,x=v,w=d,T=g,P=m;if(n(x,w)||(b=x,x=w,w=b),n(T,P)||(b=T,T=P,P=b),n(x,T)||(b=x,x=T,T=b,b=w,w=P,P=b),n(T,w)?n(w,P)?(b=o(x,T,w),S=o(T,w,P),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,w.b)):(b=s(x,T,w),S=-s(x,P,w),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,P.b)):_.b=(T.b+w.b)/2,a(x,w)||(b=x,x=w,w=b),a(T,P)||(b=T,T=P,P=b),a(x,T)||(b=x,x=T,T=b,b=w,w=P,P=b),a(T,w)?a(w,P)?(b=h(x,T,w),S=h(T,w,P),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,w.a)):(b=l(x,T,w),S=-l(x,P,w),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,P.a)):_.a=(T.a+w.a)/2,n(_,t.a)&&(_.b=t.a.b,_.a=t.a.a),n(x=n(d,m)?d:m,_)&&(_.b=x.b,_.a=x.a),r(_,d)||r(_,m))return N(t,e),!1;if(!r(v,t.a)&&0<=s(v,t.a,_)||!r(g,t.a)&&0>=s(g,t.a,_)){if(g===t.a)return y(u.b),f(c.b,u),e=C(e),u=lt(e).a,F(t,lt(e),i),I(t,e,J(u),u,u,!0),!0;if(v===t.a){y(c.b),f(u.e,J(c)),d=i=e,m=d.a.b.a;do{d=ut(d)}while(d.a.b.a===m);return d=lt(e=d).a.b.c,i.a=J(c),c=F(t,i,null),I(t,e,c.c,u.b.c,d,!0),!0}return 0<=s(v,t.a,_)&&(ut(e).b=e.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=s(g,t.a,_)&&(e.b=i.b=!0,y(c.b),c.a.b=t.a.b,c.a.a=t.a.a),!1}return y(u.b),y(c.b),f(J(c),u),u.a.b=_.b,u.a.a=_.a,u.a.h=et(t.e,u.a),u=u.a,c=[0,0,0,0],_=[d.d,v.d,m.d,g.d],u.g[0]=u.g[1]=u.g[2]=0,B(u,d,v,c,0),B(u,m,g,c,2),D(t,u,_,c,!0),ut(e).b=e.b=i.b=!0,!1}function q(t,e){for(var i=lt(e);;){for(;i.b;)e=i,i=lt(i);if(!e.b&&(i=e,null===(e=ut(e))||!e.b))break;e.b=!1;var r,o=e.a,a=i.a;if(r=o.b.a!==a.b.a)t:{var h=lt(r=e),l=r.a,u=h.a,c=void 0;if(n(l.b.a,u.b.a)){if(0>s(l.b.a,u.b.a,l.a)){r=!1;break t}ut(r).b=r.b=!0,c=y(l),f(u.b,c),c.d.c=r.d}else{if(0r.f&&(r.f*=2,r.c=rt(r.c,r.f+1)),0===r.b?i=n:(i=r.b,r.b=r.c[r.b]),r.e[i]=e,r.c[i]=n,r.d[n]=i,r.h&&at(r,n),i}return r=t.a++,t.c[r]=e,-(r+1)}function it(t){if(0===t.a)return ot(t.b);var e=t.c[t.d[t.a-1]];if(0!==t.b.a&&n(nt(t.b),e))return ot(t.b);do{--t.a}while(0t.a||n(r[a],r[l])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function at(t,e){for(var i=t.d,r=t.e,o=t.c,s=e,a=i[s];;){var h=s>>1,l=i[h];if(0===h||n(r[l],r[a])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function ht(){this.e=this.a=null,this.f=0,this.c=this.b=this.h=this.d=!1}function lt(t){return t.e.c.b}function ut(t){return t.e.a.b}var ct,pt=4e150,dt=0;(ct=H.prototype).x=function(){X(this,dt)},ct.B=function(t,e){switch(t){case 100142:return;case 100140:switch(e){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=e)}break;case 100141:return void(this.m=!!e);default:return void Y(this,100900)}Y(this,100901)},ct.y=function(t){switch(t){case 100142:return 0;case 100140:return this.s;case 100141:return this.m;default:Y(this,100900)}return!1},ct.A=function(t,e,i){this.j[0]=t,this.j[1]=e,this.j[2]=i},ct.z=function(t,e){var i=e||null;switch(t){case 100100:case 100106:this.h=i;break;case 100104:case 100110:this.l=i;break;case 100101:case 100107:this.k=i;break;case 100102:case 100108:this.i=i;break;case 100103:case 100109:this.p=i;break;case 100105:case 100111:this.o=i;break;case 100112:this.r=i;break;default:Y(this,100900)}},ct.C=function(t,e){var i=!1,r=[0,0,0];X(this,2);for(var n=0;3>n;++n){var o=t[n];-1e150>o&&(o=-1e150,i=!0),1e150p;++p){var d=t.g[p];de[p]&&(e[p]=d,i[p]=t)}if(t=0,e[1]-h[1]>e[0]-h[0]&&(t=1),e[2]-h[2]>e[t]-h[t]&&(t=2),h[t]>=e[t])a[0]=0,a[1]=0,a[2]=1;else{for(e=0,h=l[t],i=i[t],l=[0,0,0],h=[h.g[0]-i.g[0],h.g[1]-i.g[1],h.g[2]-i.g[2]],p=[0,0,0],t=o.e;t!==o;t=t.e)p[0]=t.g[0]-i.g[0],p[1]=t.g[1]-i.g[1],p[2]=t.g[2]-i.g[2],l[0]=h[1]*p[2]-h[2]*p[1],l[1]=h[2]*p[0]-h[0]*p[2],l[2]=h[0]*p[1]-h[1]*p[0],(d=l[0]*l[0]+l[1]*l[1]+l[2]*l[2])>e&&(e=d,a[0]=l[0],a[1]=l[1],a[2]=l[2]);0>=e&&(a[0]=a[1]=a[2]=0,a[P(h)]=1)}o=!0}for(l=P(a),t=this.b.c,e=(l+1)%3,i=(l+2)%3,l=0=(e=t.a).f))do{a+=(e.a.b-e.b.a.b)*(e.a.a+e.b.a.a),e=e.e}while(e!==t.a);if(0>a)for(a=this.b.c,o=a.e;o!==a;o=o.e)o.a=-o.a}for(this.n=!1,a=this.b.b,t=a.h;t!==a;t=o)o=t.h,e=t.e,r(t.a,t.b.a)&&t.e.e!==t&&(U(this,e,t),m(t),e=(t=e).e),e.e===t&&(e!==t&&(e!==o&&e!==o.b||(o=o.h),m(e)),t!==o&&t!==o.b||(o=o.h),m(t));for(this.e=a=new $,o=this.b.c,t=o.e;t!==o;t=t.e)t.h=et(a,t);for(tt(a),this.f=new function(t){this.a=new W,this.b=t,this.c=M}(this),j(this,-pt),j(this,pt);null!==(a=it(this.e));){for(;;){t:if(t=this.e,0===t.a)o=nt(t.b);else if(o=t.c[t.d[t.a-1]],0!==t.b.a&&(t=nt(t.b),n(t,o))){o=t;break t}if(null===o||!r(o,a))break;o=it(this.e),U(this,a.c,o.c)}V(this,a)}for(this.a=this.f.a.a.b.a.a,a=0;null!==(o=this.f.a.a.b);)o.h||++a,E(o);for(this.f=null,(a=this.e).b=null,a.d=null,this.e=a.c=null,a=this.b,t=a.a.b;t!==a.a;t=o)o=t.b,(t=t.a).e.e===t&&(A(t.c,t),m(t));if(!this.n){if(a=this.b,this.m)for(t=a.b.h;t!==a.b;t=o)o=t.h,t.b.d.c!==t.d.c?t.f=t.d.c?1:-1:m(t);else for(t=a.a.b;t!==a.a;t=o)if(o=t.b,t.c){for(t=t.a;n(t.b.a,t.a);t=t.c.b);for(;n(t.a,t.b.a);t=t.e);for(e=t.c.b,i=void 0;t.e!==e;)if(n(t.b.a,e.a)){for(;e.e!==t&&(u(e.e)||0>=s(e.a,e.b.a,e.e.b.a));)i=v(e.e,e),e=i.b;e=e.c.b}else{for(;e.e!==t&&(c(t.c.b)||0<=s(t.b.a,t.a,t.c.b.a));)i=v(t,t.c.b),t=i.b;t=t.e}for(;e.e.e!==t;)i=v(e.e,e),e=i.b}if(this.h||this.i||this.k||this.l)if(this.m){for(a=this.b,o=a.a.b;o!==a.a;o=o.b)if(o.c){this.h&&this.h(2,this.c),t=o.a;do{this.k&&this.k(t.a.d,this.c),t=t.e}while(t!==o.a);this.i&&this.i(this.c)}}else{for(a=this.b,o=!!this.l,t=!1,e=-1,i=a.a.d;i!==a.a;i=i.d)if(i.c){t||(this.h&&this.h(4,this.c),t=!0),l=i.a;do{o&&(h=l.b.d.c?0:1,e!==h&&(e=h,this.l&&this.l(!!e,this.c))),this.k&&this.k(l.a.d,this.c),l=l.e}while(l!==i.a)}t&&this.i&&this.i(this.c)}if(this.r){for(a=this.b,t=a.a.b;t!==a.a;t=o)if(o=t.b,!t.c){e=t.a,i=e.e,l=void 0;do{i=(l=i).e,l.d=null,null===l.b.d&&(l.c===l?w(l.a,null):(l.a.c=l.c,_(l,J(l))),(h=l.b).c===h?w(h.a,null):(h.a.c=h.c,_(h,J(h))),x(l))}while(l!==e);e=t.d,(t=t.b).d=e,e.b=t}return this.r(this.b),void(this.c=this.b=null)}}this.b=this.c=null},this.libtess={GluTesselator:H,windingRule:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},errorType:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156},gluEnum:{GLU_TESS_MESH:100112,GLU_TESS_TOLERANCE:100142,GLU_TESS_WINDING_RULE:100140,GLU_TESS_BOUNDARY_ONLY:100141,GLU_INVALID_ENUM:100900,GLU_INVALID_VALUE:100901,GLU_TESS_BEGIN:100100,GLU_TESS_VERTEX:100101,GLU_TESS_END:100102,GLU_TESS_ERROR:100103,GLU_TESS_EDGE_FLAG:100104,GLU_TESS_COMBINE:100105,GLU_TESS_BEGIN_DATA:100106,GLU_TESS_VERTEX_DATA:100107,GLU_TESS_END_DATA:100108,GLU_TESS_ERROR_DATA:100109,GLU_TESS_EDGE_FLAG_DATA:100110,GLU_TESS_COMBINE_DATA:100111}},H.prototype.gluDeleteTess=H.prototype.x,H.prototype.gluTessProperty=H.prototype.B,H.prototype.gluGetTessProperty=H.prototype.y,H.prototype.gluTessNormal=H.prototype.A,H.prototype.gluTessCallback=H.prototype.z,H.prototype.gluTessVertex=H.prototype.C,H.prototype.gluTessBeginPolygon=H.prototype.u,H.prototype.gluTessBeginContour=H.prototype.t,H.prototype.gluTessEndContour=H.prototype.v,H.prototype.gluTessEndPolygon=H.prototype.w,void 0!==e&&(e.exports=this.libtess)},{}],10:[function(t,e,i){(function(r){!function(t,r){r("object"==typeof i&&void 0!==e?i:t.opentype={})}(this,function(e){"use strict";function i(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function n(t,e){this.source=t,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=e,this.destLen=0,this.ltree=new i,this.dtree=new i}function o(t,e,i,r){var n,o;for(n=0;n>>=1,e}function h(t,e,i){if(!e)return i;for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>16-e;return t.tag>>>=e,t.bitcount-=e,r+i}function l(t,e){for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>=1,++n,i+=e.table[n],r-=e.table[n]}while(r>=0);return t.tag=o,t.bitcount-=n,e.trans[i+r]}function u(t,e,i){var r,n,o,a,u,c;for(r=h(t,5,257),n=h(t,5,1),o=h(t,4,4),a=0;a<19;++a)Le[a]=0;for(a=0;a8;)t.sourceIndex--,t.bitcount-=8;if(e=256*(e=t.source[t.sourceIndex+1])+t.source[t.sourceIndex],i=256*(i=t.source[t.sourceIndex+3])+t.source[t.sourceIndex+2],e!==(65535&~i))return Te;for(t.sourceIndex+=4,r=e;r;--r)t.dest[t.destLen++]=t.source[t.sourceIndex++];return t.bitcount=0,we}function d(t,e,i,r,n){return Math.pow(1-n,3)*t+3*Math.pow(1-n,2)*n*e+3*(1-n)*Math.pow(n,2)*i+Math.pow(n,3)*r}function f(){this.x1=Number.NaN,this.y1=Number.NaN,this.x2=Number.NaN,this.y2=Number.NaN}function m(){this.commands=[],this.fill="black",this.stroke=null,this.strokeWidth=1}function y(t){throw new Error(t)}function v(t,e){t||y(e)}function g(t){return function(){return t}}function _(t){return t>=-128&&t<=127}function b(t,e,i){for(var r=0,n=t.length;e>8&255,h+256&255)}return o}function w(t,e,i){for(var r=this,n=0;n>4,o=15&r;if(15===n)break;if(e+=i[n],15===o)break;e+=i[o]}return parseFloat(e)}(t);if(e>=32&&e<=246)return e-139;if(e>=247&&e<=250)return i=t.parseByte(),256*(e-247)+i+108;if(e>=251&&e<=254)return i=t.parseByte(),256*-(e-251)-i-108;throw new Error("Invalid b0 "+e)}function Y(t,e,i){e=void 0!==e?e:0;var r=new Ye.Parser(t,e),n=[],o=[];for(i=void 0!==i?i:t.length;r.relativeOffset>1,f.length=0,v=!0}var o,s,a,h,l,u,c,p,d=new m,f=[],y=0,v=!1,g=!1,_=0,b=0;if(t.isCIDFont){var S=t.tables.cff.topDict._fdSelect[e.index],x=t.tables.cff.topDict._fdArray[S];l=x._subrs,u=x._subrsBias,c=x._defaultWidthX,p=x._nominalWidthX}else l=t.tables.cff.topDict._subrs,u=t.tables.cff.topDict._subrsBias,c=t.tables.cff.topDict._defaultWidthX,p=t.tables.cff.topDict._nominalWidthX;var w=c;return function i(c){for(var m,S,x,T,P,A,M,E,k,C,R,O,L=0;L1&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_,b);break;case 5:for(;f.length>0;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 6:for(;f.length>0&&(_+=f.shift(),d.lineTo(_,b),0!==f.length);)b+=f.shift(),d.lineTo(_,b);break;case 7:for(;f.length>0&&(b+=f.shift(),d.lineTo(_,b),0!==f.length);)_+=f.shift(),d.lineTo(_,b);break;case 8:for(;f.length>0;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 10:P=f.pop()+u,(A=l[P])&&i(A);break;case 11:return;case 12:switch(F=c[L],L+=1,F){case 35:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h+f.shift(),k=M+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),b=O+f.shift(),f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;case 34:o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h,k=M+f.shift(),C=h,R=k+f.shift(),O=b,_=R+f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;case 36:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h,k=M+f.shift(),C=h,R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;case 37:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h+f.shift(),k=M+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),Math.abs(R-_)>Math.abs(O-b)?_=R+f.shift():b=O+f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;default:console.log("Glyph "+e.index+": unknown operator 1200"+F),f.length=0}break;case 14:f.length>0&&!v&&(w=f.shift()+p,v=!0),g&&(d.closePath(),g=!1);break;case 18:n();break;case 19:case 20:n(),L+=y+7>>3;break;case 21:f.length>2&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_+=f.pop(),b);break;case 22:f.length>1&&!v&&(w=f.shift()+p,v=!0),r(_+=f.pop(),b);break;case 23:n();break;case 24:for(;f.length>2;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 25:for(;f.length>6;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 26:for(f.length%2&&(_+=f.shift());f.length>0;)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a,b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 27:for(f.length%2&&(b+=f.shift());f.length>0;)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h,d.curveTo(o,s,a,h,_,b);break;case 28:m=c[L],S=c[L+1],f.push((m<<24|S<<16)>>16),L+=2;break;case 29:P=f.pop()+t.gsubrsBias,(A=t.gsubrs[P])&&i(A);break;case 30:for(;f.length>0&&(o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;case 31:for(;f.length>0&&(o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;default:F<32?console.log("Glyph "+e.index+": unknown operator "+F):F<247?f.push(F-139):F<251?(m=c[L],L+=1,f.push(256*(F-247)+m+108)):F<255?(m=c[L],L+=1,f.push(256*-(F-251)-m-108)):(m=c[L],S=c[L+1],x=c[L+2],T=c[L+3],L+=4,f.push((m<<24|S<<16|x<<8|T)/65536))}}}(i),e.advanceWidth=w,d}function et(t,e){var i,r=Ze.indexOf(t);return r>=0&&(i=r),(r=e.indexOf(t))>=0?i=r+Ze.length:(i=Ze.length+e.length,e.push(t)),i}function it(t,e,i){for(var r={},n=0;ne.value.tag?1:-1}),e.fields=e.fields.concat(r),e.fields=e.fields.concat(n),e}function mt(t,e,i){for(var r=0;r0)return t.glyphs.get(n).getMetrics()}return i}function yt(t,e){for(var i=0,r=t.length-1;i<=r;){var n=i+r>>>1,o=t[n].tag;if(o===e)return n;o>>1,o=t[n];if(o===e)return n;o>>1,s=(i=t[o]).start;if(s===e)return i;s0)return i=t[r-1],e>i.end?0:i}function _t(t,e){this.font=t,this.tableName=e}function bt(t){_t.call(this,t,"gpos")}function St(t){_t.call(this,t,"gsub")}function xt(t,e){var i=t.length;if(i!==e.length)return!1;for(var r=0;r0?(o=t.parseByte(),0==(e&n)&&(o=-o),o=i+o):o=(e&n)>0?i:i+t.parseShort(),o}function Et(t,e,i){var r,n,o=new Ye.Parser(e,i);if(t.numberOfContours=o.parseShort(),t._xMin=o.parseShort(),t._yMin=o.parseShort(),t._xMax=o.parseShort(),t._yMax=o.parseShort(),t.numberOfContours>0){for(var s=t.endPointIndices=[],a=0;a0)for(var c=o.parseByte(),p=0;p0){var d,f=[];if(l>0){for(var m=0;m=0,f.push(d);for(var y=0,v=0;v0?(2&r)>0?(S.dx=o.parseShort(),S.dy=o.parseShort()):S.matchedPoints=[o.parseUShort(),o.parseUShort()]:(2&r)>0?(S.dx=o.parseChar(),S.dy=o.parseChar()):S.matchedPoints=[o.parseByte(),o.parseByte()],(8&r)>0?S.xScale=S.yScale=o.parseF2Dot14():(64&r)>0?(S.xScale=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()):(128&r)>0&&(S.xScale=o.parseF2Dot14(),S.scale01=o.parseF2Dot14(),S.scale10=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()),t.components.push(S),b=!!(32&r)}if(256&r){t.instructionLength=o.parseUShort(),t.instructions=[];for(var x=0;xe.points.length-1||r.matchedPoints[1]>n.points.length-1)throw Error("Matched points out of range in "+e.name);var s=e.points[r.matchedPoints[0]],a=n.points[r.matchedPoints[1]],h={xScale:r.xScale,scale01:r.scale01,scale10:r.scale10,yScale:r.yScale,dx:0,dy:0};a=kt([a],h)[0],h.dx=s.x-a.x,h.dy=s.y-a.y,o=kt(n.points,h)}e.points=e.points.concat(o)}}return Ct(e.points)}function Ot(t){this.font=t,this.getCommands=function(t){return Ri.getPath(t).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function Lt(t){return t}function Ft(t){return Math.sign(t)*Math.round(Math.abs(t))}function It(t){return Math.sign(t)*Math.round(Math.abs(2*t))/2}function Dt(t){return Math.sign(t)*(Math.round(Math.abs(t)+.5)-.5)}function Ut(t){return Math.sign(t)*Math.ceil(Math.abs(t))}function Bt(t){return Math.sign(t)*Math.floor(Math.abs(t))}function Nt(t,e){this.x=t,this.y=e,this.axis=void 0,this.slope=e/t,this.normalSlope=-t/e,Object.freeze(this)}function Gt(t,e){var i=Math.sqrt(t*t+e*e);return e/=i,1==(t/=i)&&0===e?Li:0===t&&1===e?Fi:new Nt(t,e)}function qt(t,e,i,r){this.x=this.xo=Math.round(64*t)/64,this.y=this.yo=Math.round(64*e)/64,this.lastPointOfContour=i,this.onCurve=r,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}function Vt(t,e){switch(this.env=t,this.stack=[],this.prog=e,t){case"glyf":this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=Li,this.round=Ft}}function jt(t){for(var e=t.tZone=new Array(t.gZone.length),i=0;i=176&&i<=183)n+=i-176+1;else if(i>=184&&i<=191)n+=2*(i-184+1);else if(e&&1===o&&27===i)break}while(o>0);t.ip=n}function Wt(t,i){e.DEBUG&&console.log(i.step,"SVTCA["+t.axis+"]"),i.fv=i.pv=i.dpv=t}function Ht(t,i){e.DEBUG&&console.log(i.step,"SPVTCA["+t.axis+"]"),i.pv=i.dpv=t}function Xt(t,i){e.DEBUG&&console.log(i.step,"SFVTCA["+t.axis+"]"),i.fv=t}function Yt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.pv=i.dpv=Gt(r,n)}function Qt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SFVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.fv=Gt(r,n)}function Zt(t){e.DEBUG&&console.log(t.step,"POP[]"),t.stack.pop()}function Jt(t,i){var r=i.stack.pop(),n=i.z0[r],o=i.fv,s=i.pv;e.DEBUG&&console.log(i.step,"MDAP["+t+"]",r);var a=s.distance(n,Ii);t&&(a=i.round(a)),o.setRelative(n,Ii,a,s),o.touch(n),i.rp0=i.rp1=r}function Kt(t,i){var r,n,o,s=i.z2,a=s.length-2;e.DEBUG&&console.log(i.step,"IUP["+t.axis+"]");for(var h=0;h1?"loop "+(i.loop-h)+": ":"")+"SHP["+(t?"rp1":"rp2")+"]",u)}i.loop=1}function te(t,i){var r=i.stack,n=t?i.rp1:i.rp2,o=(t?i.z0:i.z1)[n],s=i.fv,a=i.pv,h=r.pop(),l=i.z2[i.contours[h]],u=l;e.DEBUG&&console.log(i.step,"SHC["+t+"]",h);var c=a.distance(o,o,!1,!0);do{u!==o&&s.setRelative(u,u,c,a),u=u.nextPointOnContour}while(u!==l)}function ee(t,i){var r,n=i.stack,o=t?i.rp1:i.rp2,s=(t?i.z0:i.z1)[o],a=i.fv,h=i.pv,l=n.pop();switch(e.DEBUG&&console.log(i.step,"SHZ["+t+"]",l),l){case 0:r=i.tZone;break;case 1:r=i.gZone;break;default:throw new Error("Invalid zone")}for(var u,c=h.distance(s,s,!1,!0),p=r.length-2,d=0;d",h),i.stack.push(Math.round(64*h))}function se(t,i){var r=i.stack,n=r.pop(),o=i.fv,s=i.pv,a=i.ppem,h=i.deltaBase+16*(t-1),l=i.deltaShift,u=i.z0;e.DEBUG&&console.log(i.step,"DELTAP["+t+"]",n,r);for(var c=0;c>4)===a){var f=(15&d)-8;f>=0&&f++,e.DEBUG&&console.log(i.step,"DELTAPFIX",p,"by",f*l);var m=u[p];o.setRelative(m,m,f*l,s)}}}function ae(t,i){var r=i.stack,n=r.pop();e.DEBUG&&console.log(i.step,"ROUND[]"),r.push(64*i.round(n/64))}function he(t,i){var r=i.stack,n=r.pop(),o=i.ppem,s=i.deltaBase+16*(t-1),a=i.deltaShift;e.DEBUG&&console.log(i.step,"DELTAC["+t+"]",n,r);for(var h=0;h>4)===o){var c=(15&u)-8;c>=0&&c++;var p=c*a;e.DEBUG&&console.log(i.step,"DELTACFIX",l,"by",p),i.cvt[l]+=p}}}function le(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log(i.step,"SDPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.dpv=Gt(r,n)}function ue(t,i){var r=i.stack,n=i.prog,o=i.ip;e.DEBUG&&console.log(i.step,"PUSHB["+t+"]");for(var s=0;s=0?1:-1,h=Math.abs(h),t&&(u=s.cvt[p],n&&Math.abs(h-u)":"_")+(n?"R":"_")+(0===o?"Gr":1===o?"Bl":2===o?"Wh":"")+"]",t?p+"("+s.cvt[p]+","+u+")":"",d,"(d =",a,"->",l*h,")"),s.rp1=s.rp0,s.rp2=d,i&&(s.rp0=d)}function de(t){(t=t||{}).empty||(At(t.familyName,"When creating a new Font object, familyName is required."),At(t.styleName,"When creating a new Font object, styleName is required."),At(t.unitsPerEm,"When creating a new Font object, unitsPerEm is required."),At(t.ascender,"When creating a new Font object, ascender is required."),At(t.descender,"When creating a new Font object, descender is required."),At(t.descender<0,"Descender should be negative (e.g. -512)."),this.names={fontFamily:{en:t.familyName||" "},fontSubfamily:{en:t.styleName||" "},fullName:{en:t.fullName||t.familyName+" "+t.styleName},postScriptName:{en:t.postScriptName||(t.familyName+t.styleName).replace(/\s/g,"")},designer:{en:t.designer||" "},designerURL:{en:t.designerURL||" "},manufacturer:{en:t.manufacturer||" "},manufacturerURL:{en:t.manufacturerURL||" "},license:{en:t.license||" "},licenseURL:{en:t.licenseURL||" "},version:{en:t.version||"Version 0.1"},description:{en:t.description||" "},copyright:{en:t.copyright||" "},trademark:{en:t.trademark||" "}},this.unitsPerEm=t.unitsPerEm||1e3,this.ascender=t.ascender,this.descender=t.descender,this.createdTimestamp=t.createdTimestamp,this.tables={os2:{usWeightClass:t.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:t.widthClass||this.usWidthClasses.MEDIUM,fsSelection:t.fsSelection||this.fsSelectionValues.REGULAR}}),this.supported=!0,this.glyphs=new ei.GlyphSet(this,t.glyphs||[]),this.encoding=new U(this),this.position=new bt(this),this.substitution=new St(this),this.tables=this.tables||{},Object.defineProperty(this,"hinting",{get:function(){return this._hinting?this._hinting:"truetype"===this.outlinesFormat?this._hinting=new Ot(this):void 0}})}function fe(t,e){var i=JSON.stringify(t),r=256;for(var n in e){var o=parseInt(n);if(o&&!(o<256)){if(JSON.stringify(e[n])===i)return o;r<=o&&(r=o+1)}}return e[r]=t,r}function me(t,e,i){var r=fe(e.name,i);return[{name:"tag_"+t,type:"TAG",value:e.tag},{name:"minValue_"+t,type:"FIXED",value:e.minValue<<16},{name:"defaultValue_"+t,type:"FIXED",value:e.defaultValue<<16},{name:"maxValue_"+t,type:"FIXED",value:e.maxValue<<16},{name:"flags_"+t,type:"USHORT",value:0},{name:"nameID_"+t,type:"USHORT",value:r}]}function ye(t,e,i){var r={},n=new Ye.Parser(t,e);return r.tag=n.parseTag(),r.minValue=n.parseFixed(),r.defaultValue=n.parseFixed(),r.maxValue=n.parseFixed(),n.skip("uShort",1),r.name=i[n.parseUShort()]||{},r}function ve(t,e,i,r){for(var n=fe(e.name,r),o=[{name:"nameID_"+t,type:"USHORT",value:n},{name:"flags_"+t,type:"USHORT",value:0}],s=0;s=i)){var n,o=e.charCodeAt(r);return o>=55296&&o<=56319&&i>r+1&&(n=e.charCodeAt(r+1))>=56320&&n<=57343?1024*(o-55296)+n-56320+65536:o}};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}();var we=0,Te=-3,Pe=new i,Ae=new i,Me=new Uint8Array(30),Ee=new Uint16Array(30),ke=new Uint8Array(30),Ce=new Uint16Array(30),Re=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Oe=new i,Le=new Uint8Array(320),Fe=new Uint16Array(16);(function(t,e){var i;for(i=0;i<7;++i)t.table[i]=0;for(t.table[7]=24,t.table[8]=152,t.table[9]=112,i=0;i<24;++i)t.trans[i]=256+i;for(i=0;i<144;++i)t.trans[24+i]=i;for(i=0;i<8;++i)t.trans[168+i]=280+i;for(i=0;i<112;++i)t.trans[176+i]=144+i;for(i=0;i<5;++i)e.table[i]=0;for(e.table[5]=32,i=0;i<32;++i)e.trans[i]=i})(Pe,Ae),o(Me,Ee,4,3),o(ke,Ce,2,1),Me[28]=0,Ee[28]=258;var Ie=function(t,e){var i,r,o=new n(t,e);do{switch(i=a(o),h(o,2,0)){case 0:r=p(o);break;case 1:r=c(o,Pe,Ae);break;case 2:u(o,o.ltree,o.dtree),r=c(o,o.ltree,o.dtree);break;default:r=Te}if(r!==we)throw new Error("Data error")}while(!i);return o.destLenthis.x2&&(this.x2=t)),"number"==typeof e&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),ethis.y2&&(this.y2=e))},f.prototype.addX=function(t){this.addPoint(t,null)},f.prototype.addY=function(t){this.addPoint(null,t)},f.prototype.addBezier=function(t,e,i,r,n,o,s,a){var h=this,l=[t,e],u=[i,r],c=[n,o],p=[s,a];this.addPoint(t,e),this.addPoint(s,a);for(var f=0;f<=1;f++){var m=6*l[f]-12*u[f]+6*c[f],y=-3*l[f]+9*u[f]-9*c[f]+3*p[f],v=3*u[f]-3*l[f];if(0!==y){var g=Math.pow(m,2)-4*v*y;if(!(g<0)){var _=(-m+Math.sqrt(g))/(2*y);0<_&&_<1&&(0===f&&h.addX(d(l[f],u[f],c[f],p[f],_)),1===f&&h.addY(d(l[f],u[f],c[f],p[f],_)));var b=(-m-Math.sqrt(g))/(2*y);0=0&&r>0&&(i+=" "),i+=e(n)}return i}t=void 0!==t?t:2;for(var r="",n=0;n=0&&t<=255,"Byte value should be between 0 and 255."),[t]},Ge.BYTE=g(1),Ne.CHAR=function(t){return[t.charCodeAt(0)]},Ge.CHAR=g(1),Ne.CHARARRAY=function(t){for(var e=[],i=0;i>8&255,255&t]},Ge.USHORT=g(2),Ne.SHORT=function(t){return t>=32768&&(t=-(65536-t)),[t>>8&255,255&t]},Ge.SHORT=g(2),Ne.UINT24=function(t){return[t>>16&255,t>>8&255,255&t]},Ge.UINT24=g(3),Ne.ULONG=function(t){return[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.ULONG=g(4),Ne.LONG=function(t){return t>=Ue&&(t=-(2*Ue-t)),[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONG=g(4),Ne.FIXED=Ne.ULONG,Ge.FIXED=Ge.ULONG,Ne.FWORD=Ne.SHORT,Ge.FWORD=Ge.SHORT,Ne.UFWORD=Ne.USHORT,Ge.UFWORD=Ge.USHORT,Ne.LONGDATETIME=function(t){return[0,0,0,0,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONGDATETIME=g(8),Ne.TAG=function(t){return De.argument(4===t.length,"Tag should be exactly 4 ASCII characters."),[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]},Ge.TAG=g(4),Ne.Card8=Ne.BYTE,Ge.Card8=Ge.BYTE,Ne.Card16=Ne.USHORT,Ge.Card16=Ge.USHORT,Ne.OffSize=Ne.BYTE,Ge.OffSize=Ge.BYTE,Ne.SID=Ne.USHORT,Ge.SID=Ge.USHORT,Ne.NUMBER=function(t){return t>=-107&&t<=107?[t+139]:t>=108&&t<=1131?[247+((t-=108)>>8),255&t]:t>=-1131&&t<=-108?[251+((t=-t-108)>>8),255&t]:t>=-32768&&t<=32767?Ne.NUMBER16(t):Ne.NUMBER32(t)},Ge.NUMBER=function(t){return Ne.NUMBER(t).length},Ne.NUMBER16=function(t){return[28,t>>8&255,255&t]},Ge.NUMBER16=g(3),Ne.NUMBER32=function(t){return[29,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.NUMBER32=g(5),Ne.REAL=function(t){var e=t.toString(),i=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(e);if(i){var r=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));e=(Math.round(t*r)/r).toString()}for(var n="",o=0,s=e.length;o>8&255,e[e.length]=255&r}return e},Ge.UTF16=function(t){return 2*t.length};var qe={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};Be.MACSTRING=function(t,e,i,r){var n=qe[r];if(void 0!==n){for(var o="",s=0;s=128&&void 0===(o=i[o]))return;r[n]=o}return r}},Ge.MACSTRING=function(t,e){var i=Ne.MACSTRING(t,e);return void 0!==i?i.length:0},Ne.VARDELTAS=function(t){for(var e=0,i=[];e=-128&&r<=127?S(t,e,i):x(t,e,i)}return i},Ne.INDEX=function(t){for(var e=1,i=[e],r=[],n=0;n>8,e[c+1]=255&p,e=e.concat(r[u])}return e},Ge.TABLE=function(t){for(var e=0,i=t.fields.length,r=0;r0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parsePointer32=function(t){var e=this.parseOffset32();if(e>0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parseListOfLists=function(t){for(var e=this,i=this.parseOffset16List(),r=i.length,n=this.relativeOffset,o=new Array(r),s=0;s=0;n-=1){var o=Ye.getUShort(t,e+4+8*n),s=Ye.getUShort(t,e+4+8*n+2);if(3===o&&(0===s||1===s||10===s)||0===o&&(0===s||1===s||2===s||3===s||4===s)){r=Ye.getULong(t,e+4+8*n+4);break}}if(-1===r)throw new Error("No valid cmap sub-tables found.");var a=new Ye.Parser(t,e+r);if(i.format=a.parseUShort(),12===i.format)!function(t,e){var i;e.parseUShort(),t.length=e.parseULong(),t.language=e.parseULong(),t.groupCount=i=e.parseULong(),t.glyphIndexMap={};for(var r=0;r>1,e.skip("uShort",3),t.glyphIndexMap={};for(var s=new Ye.Parser(i,r+n+14),a=new Ye.Parser(i,r+n+16+2*o),h=new Ye.Parser(i,r+n+16+4*o),l=new Ye.Parser(i,r+n+16+6*o),u=r+n+16+8*o,c=0;c0;e-=1)if(t.get(e).unicode>65535){console.log("Adding CMAP format 12 (needed!)"),i=!1;break}var r=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:i?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:i?12:20}];i||(r=r.concat([{name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}])),r=r.concat([{name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);var n=new We.Table("cmap",r);for(n.segments=[],e=0;e=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");o.push(n)}else{if(3!==a)throw new Error("CFF Table CID Font FDSelect table has unsupported format "+a);var l=s.parseCard16(),u=s.parseCard16();if(0!==u)throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+u);for(var c,p=0;p=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");if(c>i)throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+c);for(;u=1&&(i.ulCodePageRange1=r.parseULong(),i.ulCodePageRange2=r.parseULong()),i.version>=2&&(i.sxHeight=r.parseShort(),i.sCapHeight=r.parseShort(),i.usDefaultChar=r.parseUShort(),i.usBreakChar=r.parseUShort(),i.usMaxContent=r.parseUShort()),i},make:function(t){return new We.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],t)},unicodeRanges:gi,getUnicodeRange:function(t){for(var e=0;e=i.begin&&t=$e.length){var s=r.parseChar();i.names.push(r.parseString(s))}break;case 2.5:i.numberOfGlyphs=r.parseUShort(),i.offset=new Array(i.numberOfGlyphs);for(var a=0;ay||void 0===e)&&y>0&&(e=y),l 123 are reserved for internal usage");d|=1<0?hi.make(O):void 0,I=bi.make(),D=ni.make(t.glyphs,{version:t.getEnglishName("version"),fullName:E,familyName:A,weightName:M,postScriptName:k,unitsPerEm:t.unitsPerEm,fontBBox:[0,_.yMin,_.ascender,_.advanceWidthMax]}),U=t.metas&&Object.keys(t.metas).length>0?Pi.make(t.metas):void 0,B=[b,S,x,w,L,P,I,D,T];F&&B.push(F),t.tables.gsub&&B.push(Ti.make(t.tables.gsub)),U&&B.push(U);for(var N=ft(B),G=pt(N.encode()),q=N.fields,V=!1,j=0;j=0)return r[n].script;if(e){var o={tag:t,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return r.splice(-1-n,0,o),o.script}}},getLangSysTable:function(t,e,i){var r=this.getScriptTable(t,i);if(r){if(!e||"dflt"===e||"DFLT"===e)return r.defaultLangSys;var n=yt(r.langSysRecords,e);if(n>=0)return r.langSysRecords[n].langSys;if(i){var o={tag:e,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return r.langSysRecords.splice(-1-n,0,o),o.langSys}}},getFeatureTable:function(t,e,i,r){var n=this.getLangSysTable(t,e,r);if(n){for(var o,s=n.featureIndexes,a=this.font.tables[this.tableName].features,h=0;h=a[l-1].tag,"Features must be added in alphabetical order."),o={tag:i,feature:{params:0,lookupListIndexes:[]}},a.push(o),s.push(l),o.feature}}},getLookupTables:function(t,e,i,r,n){var o=this.getFeatureTable(t,e,i,n),s=[];if(o){for(var a,h=o.lookupListIndexes,l=this.font.tables[this.tableName].lookups,u=0;u=0?i:-1;case 2:var r=gt(t.ranges,e);return r?r.index+e-r.start:-1}},expandCoverage:function(t){if(1===t.format)return t.glyphs;for(var e=[],i=t.ranges,r=0;r=0){for(var u=o.ligatureSets[l],c=0;c2)){var r=this.font,n=this._prepState;if(!n||n.ppem!==i){var o=this._fpgmState;if(!o){Vt.prototype=Di,(o=this._fpgmState=new Vt("fpgm",r.tables.fpgm)).funcs=[],o.font=r,e.DEBUG&&(console.log("---EXEC FPGM---"),o.step=-1);try{Ei(o)}catch(t){return console.log("Hinting error in FPGM:"+t),void(this._errorState=3)}}Vt.prototype=o,(n=this._prepState=new Vt("prep",r.tables.prep)).ppem=i;var s=r.tables.cvt;if(s)for(var a=n.cvt=new Array(s.length),h=i/r.unitsPerEm,l=0;l1))try{return ki(t,n)}catch(t){return this._errorState<1&&(console.log("Hinting error:"+t),console.log("Note: further hinting errors are silenced")),void(this._errorState=1)}}},ki=function(t,i){var r,n,o,s=i.ppem/i.font.unitsPerEm,a=s,h=t.components;if(Vt.prototype=i,h){var l=i.font;n=[],r=[];for(var u=0;u1?"loop "+(t.loop-r)+": ":"")+"SHPIX[]",a,o),n.setRelative(h,h,o),n.touch(h)}t.loop=1},function(t){for(var i=t.stack,r=t.rp1,n=t.rp2,o=t.loop,s=t.z0[r],a=t.z1[n],h=t.fv,l=t.dpv,u=t.z2;o--;){var c=i.pop(),p=u[c];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"IP[]",c,r,"<->",n),h.interpolate(p,s,a,l),h.touch(p)}t.loop=1},ie.bind(void 0,0),ie.bind(void 0,1),function(t){for(var i=t.stack,r=t.rp0,n=t.z0[r],o=t.loop,s=t.fv,a=t.pv,h=t.z1;o--;){var l=i.pop(),u=h[l];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"ALIGNRP[]",l),s.setRelative(u,n,0,a),s.touch(u)}t.loop=1},function(t){e.DEBUG&&console.log(t.step,"RTDG[]"),t.round=It},re.bind(void 0,0),re.bind(void 0,1),function(t){var i=t.prog,r=t.ip,n=t.stack,o=i[++r];e.DEBUG&&console.log(t.step,"NPUSHB[]",o);for(var s=0;sr?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"GTEQ[]",r,n),i.push(n>=r?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"EQ[]",r,n),i.push(r===n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"NEQ[]",r,n),i.push(r!==n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ODD[]",r),i.push(Math.trunc(r)%2?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"EVEN[]",r),i.push(Math.trunc(r)%2?0:1)},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"IF[]",i),i||(zt(t,!0),e.DEBUG&&console.log(t.step,"EIF[]"))},function(t){e.DEBUG&&console.log(t.step,"EIF[]")},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"AND[]",r,n),i.push(r&&n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"OR[]",r,n),i.push(r||n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NOT[]",r),i.push(r?0:1)},se.bind(void 0,1),function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDB[]",i),t.deltaBase=i},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDS[]",i),t.deltaShift=Math.pow(.5,i)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"ADD[]",r,n),i.push(n+r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"SUB[]",r,n),i.push(n-r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"DIV[]",r,n),i.push(64*n/r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MUL[]",r,n),i.push(n*r/64)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ABS[]",r),i.push(Math.abs(r))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NEG[]",r),i.push(-r)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"FLOOR[]",r),i.push(64*Math.floor(r/64))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"CEILING[]",r),i.push(64*Math.ceil(r/64))},ae.bind(void 0,0),ae.bind(void 0,1),ae.bind(void 0,2),ae.bind(void 0,3),void 0,void 0,void 0,void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"WCVTF[]",r,n),t.cvt[n]=r*t.ppem/t.font.unitsPerEm},se.bind(void 0,2),se.bind(void 0,3),he.bind(void 0,1),he.bind(void 0,2),he.bind(void 0,3),function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"SROUND[]",r),t.round=Oi,192&r){case 0:i=.5;break;case 64:i=1;break;case 128:i=2;break;default:throw new Error("invalid SROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid SROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"S45ROUND[]",r),t.round=Oi,192&r){case 0:i=Math.sqrt(2)/2;break;case 64:i=Math.sqrt(2);break;case 128:i=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid S45ROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},void 0,void 0,function(t){e.DEBUG&&console.log(t.step,"ROFF[]"),t.round=Lt},void 0,function(t){e.DEBUG&&console.log(t.step,"RUTG[]"),t.round=Ut},function(t){e.DEBUG&&console.log(t.step,"RDTG[]"),t.round=Bt},Zt,Zt,void 0,void 0,void 0,void 0,void 0,function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANCTRL[]",i)},le.bind(void 0,0),le.bind(void 0,1),function(t){var i=t.stack,r=i.pop(),n=0;e.DEBUG&&console.log(t.step,"GETINFO[]",r),1&r&&(n=35),32&r&&(n|=4096),i.push(n)},void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop(),o=i.pop();e.DEBUG&&console.log(t.step,"ROLL[]"),i.push(n),i.push(r),i.push(o)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MAX[]",r,n),i.push(Math.max(n,r))},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MIN[]",r,n),i.push(Math.min(n,r))},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANTYPE[]",i)},function(t){var i=t.stack.pop(),r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"INSTCTRL[]",i,r),i){case 1:return void(t.inhibitGridFit=!!r);case 2:return void(t.ignoreCvt=!!r);default:throw new Error("invalid INSTCTRL[] selector")}},void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,ue.bind(void 0,1),ue.bind(void 0,2),ue.bind(void 0,3),ue.bind(void 0,4),ue.bind(void 0,5),ue.bind(void 0,6),ue.bind(void 0,7),ue.bind(void 0,8),ce.bind(void 0,1),ce.bind(void 0,2),ce.bind(void 0,3),ce.bind(void 0,4),ce.bind(void 0,5),ce.bind(void 0,6),ce.bind(void 0,7),ce.bind(void 0,8),pe.bind(void 0,0,0,0,0,0),pe.bind(void 0,0,0,0,0,1),pe.bind(void 0,0,0,0,0,2),pe.bind(void 0,0,0,0,0,3),pe.bind(void 0,0,0,0,1,0),pe.bind(void 0,0,0,0,1,1),pe.bind(void 0,0,0,0,1,2),pe.bind(void 0,0,0,0,1,3),pe.bind(void 0,0,0,1,0,0),pe.bind(void 0,0,0,1,0,1),pe.bind(void 0,0,0,1,0,2),pe.bind(void 0,0,0,1,0,3),pe.bind(void 0,0,0,1,1,0),pe.bind(void 0,0,0,1,1,1),pe.bind(void 0,0,0,1,1,2),pe.bind(void 0,0,0,1,1,3),pe.bind(void 0,0,1,0,0,0),pe.bind(void 0,0,1,0,0,1),pe.bind(void 0,0,1,0,0,2),pe.bind(void 0,0,1,0,0,3),pe.bind(void 0,0,1,0,1,0),pe.bind(void 0,0,1,0,1,1),pe.bind(void 0,0,1,0,1,2),pe.bind(void 0,0,1,0,1,3),pe.bind(void 0,0,1,1,0,0),pe.bind(void 0,0,1,1,0,1),pe.bind(void 0,0,1,1,0,2),pe.bind(void 0,0,1,1,0,3),pe.bind(void 0,0,1,1,1,0),pe.bind(void 0,0,1,1,1,1),pe.bind(void 0,0,1,1,1,2),pe.bind(void 0,0,1,1,1,3),pe.bind(void 0,1,0,0,0,0),pe.bind(void 0,1,0,0,0,1),pe.bind(void 0,1,0,0,0,2),pe.bind(void 0,1,0,0,0,3),pe.bind(void 0,1,0,0,1,0),pe.bind(void 0,1,0,0,1,1),pe.bind(void 0,1,0,0,1,2),pe.bind(void 0,1,0,0,1,3),pe.bind(void 0,1,0,1,0,0),pe.bind(void 0,1,0,1,0,1),pe.bind(void 0,1,0,1,0,2),pe.bind(void 0,1,0,1,0,3),pe.bind(void 0,1,0,1,1,0),pe.bind(void 0,1,0,1,1,1),pe.bind(void 0,1,0,1,1,2),pe.bind(void 0,1,0,1,1,3),pe.bind(void 0,1,1,0,0,0),pe.bind(void 0,1,1,0,0,1),pe.bind(void 0,1,1,0,0,2),pe.bind(void 0,1,1,0,0,3),pe.bind(void 0,1,1,0,1,0),pe.bind(void 0,1,1,0,1,1),pe.bind(void 0,1,1,0,1,2),pe.bind(void 0,1,1,0,1,3),pe.bind(void 0,1,1,1,0,0),pe.bind(void 0,1,1,1,0,1),pe.bind(void 0,1,1,1,0,2),pe.bind(void 0,1,1,1,0,3),pe.bind(void 0,1,1,1,1,0),pe.bind(void 0,1,1,1,1,1),pe.bind(void 0,1,1,1,1,2),pe.bind(void 0,1,1,1,1,3)];var Ui=Array.from||function(t){return t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]?|[^\uD800-\uDFFF]|./g)||[]};de.prototype.hasChar=function(t){return null!==this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyphIndex=function(t){return this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyph=function(t){var e=this.charToGlyphIndex(t),i=this.glyphs.get(e);return i||(i=this.glyphs.get(0)),i},de.prototype.stringToGlyphs=function(t,e){e=e||this.defaultRenderOptions;for(var i=Ui(t),r=[],n=0;n1&&console.warn("Only the first kern subtable is supported."),t.skip("uLong");var i=255&t.parseUShort();if(t.skip("uShort"),0===i){var r=t.parseUShort();t.skip("uShort",3);for(var n=0;n1)for(var i=1;i-1?e:t}(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(i)}function c(t){var e=new FormData;return t.trim().split("&").forEach(function(t){if(t){var i=t.split("="),r=i.shift().replace(/\+/g," "),n=i.join("=").replace(/\+/g," ");e.append(decodeURIComponent(r),decodeURIComponent(n))}}),e}function p(t){var e=new n;return t.split(/\r?\n/).forEach(function(t){var i=t.split(":"),r=i.shift().trim();if(r){var n=i.join(":").trim();e.append(r,n)}}),e}function d(t,e){e||(e={}),this.type="default",this.status="status"in e?e.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new n(e.headers),this.url=e.url||"",this._initBody(t)}if(!t.fetch){var f={searchParams:"URLSearchParams"in t,iterable:"Symbol"in t&&"iterator"in Symbol,blob:"FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in t,arrayBuffer:"ArrayBuffer"in t};if(f.arrayBuffer)var m=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],y=function(t){return t&&DataView.prototype.isPrototypeOf(t)},v=ArrayBuffer.isView||function(t){return t&&m.indexOf(Object.prototype.toString.call(t))>-1};n.prototype.append=function(t,r){t=e(t),r=i(r);var n=this.map[t];this.map[t]=n?n+","+r:r},n.prototype.delete=function(t){delete this.map[e(t)]},n.prototype.get=function(t){return t=e(t),this.has(t)?this.map[t]:null},n.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},n.prototype.set=function(t,r){this.map[e(t)]=i(r)},n.prototype.forEach=function(t,e){for(var i in this.map)this.map.hasOwnProperty(i)&&t.call(e,this.map[i],i,this)},n.prototype.keys=function(){var t=[];return this.forEach(function(e,i){t.push(i)}),r(t)},n.prototype.values=function(){var t=[];return this.forEach(function(e){t.push(e)}),r(t)},n.prototype.entries=function(){var t=[];return this.forEach(function(e,i){t.push([i,e])}),r(t)},f.iterable&&(n.prototype[Symbol.iterator]=n.prototype.entries);var g=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];u.prototype.clone=function(){return new u(this,{body:this._bodyInit})},l.call(u.prototype),l.call(d.prototype),d.prototype.clone=function(){return new d(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new n(this.headers),url:this.url})},d.error=function(){var t=new d(null,{status:0,statusText:""});return t.type="error",t};var _=[301,302,303,307,308];d.redirect=function(t,e){if(-1===_.indexOf(e))throw new RangeError("Invalid status code");return new d(null,{status:e,headers:{location:t}})},t.Headers=n,t.Request=u,t.Response=d,t.fetch=function(t,e){return new Promise(function(i,r){var n=new u(t,e),o=new XMLHttpRequest;o.onload=function(){var t={status:o.status,statusText:o.statusText,headers:p(o.getAllResponseHeaders()||"")};t.url="responseURL"in o?o.responseURL:t.headers.get("X-Request-URL");var e="response"in o?o.response:o.responseText;i(new d(e,t))},o.onerror=function(){r(new TypeError("Network request failed"))},o.ontimeout=function(){r(new TypeError("Network request failed"))},o.open(n.method,n.url,!0),"include"===n.credentials&&(o.withCredentials=!0),"responseType"in o&&f.blob&&(o.responseType="blob"),n.headers.forEach(function(t,e){o.setRequestHeader(e,t)}),o.send(void 0===n._bodyInit?null:n._bodyInit)})},t.fetch.polyfill=!0}}("undefined"!=typeof self?self:this)},{}],13:[function(t,e,i){"use strict";var r=t("./core/main");t("./core/constants"),t("./core/environment"),t("./core/error_helpers"),t("./core/helpers"),t("./core/legacy"),t("./core/p5.Element"),t("./core/p5.Graphics"),t("./core/p5.Renderer"),t("./core/p5.Renderer2D"),t("./core/rendering"),t("./core/shim"),t("./core/structure"),t("./core/transform"),t("./core/shape/2d_primitives"),t("./core/shape/attributes"),t("./core/shape/curves"),t("./core/shape/vertex"),t("./color/color_conversion"),t("./color/creating_reading"),t("./color/p5.Color"),t("./color/setting"),t("./data/p5.TypedDict"),t("./events/acceleration"),t("./events/keyboard"),t("./events/mouse"),t("./events/touch"),t("./image/filters"),t("./image/image"),t("./image/loading_displaying"),t("./image/p5.Image"),t("./image/pixels"),t("./io/files"),t("./io/p5.Table"),t("./io/p5.TableRow"),t("./io/p5.XML"),t("./math/calculation"),t("./math/math"),t("./math/noise"),t("./math/p5.Vector"),t("./math/random"),t("./math/trigonometry"),t("./typography/attributes"),t("./typography/loading_displaying"),t("./typography/p5.Font"),t("./utilities/array_functions"),t("./utilities/conversion"),t("./utilities/string_functions"),t("./utilities/time_date"),t("./webgl/3d_primitives"),t("./webgl/interaction"),t("./webgl/light"),t("./webgl/loading"),t("./webgl/material"),t("./webgl/p5.Camera"),t("./webgl/p5.Geometry"),t("./webgl/p5.Matrix"),t("./webgl/p5.RendererGL.Immediate"),t("./webgl/p5.RendererGL"),t("./webgl/p5.RendererGL.Retained"),t("./webgl/p5.Shader"),t("./webgl/p5.Texture"),t("./webgl/text"),t("./core/init"),e.exports=r},{"./color/color_conversion":14,"./color/creating_reading":15,"./color/p5.Color":16,"./color/setting":17,"./core/constants":18,"./core/environment":19,"./core/error_helpers":20,"./core/helpers":21,"./core/init":22,"./core/legacy":23,"./core/main":24,"./core/p5.Element":25,"./core/p5.Graphics":26,"./core/p5.Renderer":27,"./core/p5.Renderer2D":28,"./core/rendering":29,"./core/shape/2d_primitives":30,"./core/shape/attributes":31,"./core/shape/curves":32,"./core/shape/vertex":33,"./core/shim":34,"./core/structure":35,"./core/transform":36,"./data/p5.TypedDict":37,"./events/acceleration":38,"./events/keyboard":39,"./events/mouse":40,"./events/touch":41,"./image/filters":42,"./image/image":43,"./image/loading_displaying":44,"./image/p5.Image":45,"./image/pixels":46,"./io/files":47,"./io/p5.Table":48,"./io/p5.TableRow":49,"./io/p5.XML":50,"./math/calculation":51,"./math/math":52,"./math/noise":53,"./math/p5.Vector":54,"./math/random":55,"./math/trigonometry":56,"./typography/attributes":57,"./typography/loading_displaying":58,"./typography/p5.Font":59,"./utilities/array_functions":60,"./utilities/conversion":61,"./utilities/string_functions":62,"./utilities/time_date":63,"./webgl/3d_primitives":64,"./webgl/interaction":65,"./webgl/light":66,"./webgl/loading":67,"./webgl/material":68,"./webgl/p5.Camera":69,"./webgl/p5.Geometry":70,"./webgl/p5.Matrix":71,"./webgl/p5.RendererGL":74,"./webgl/p5.RendererGL.Immediate":72,"./webgl/p5.RendererGL.Retained":73,"./webgl/p5.Shader":75,"./webgl/p5.Texture":76,"./webgl/text":77}],14:[function(t,e,i){"use strict";var r=t("../core/main");r.ColorConversion={},r.ColorConversion._hsbaToHSLA=function(t){var e=t[0],i=t[1],r=t[2],n=(2-i)*r/2;return 0!==n&&(1===n?i=0:n<.5?i/=2-i:i=i*r/(2-2*n)),[e,i,n,t[3]]},r.ColorConversion._hsbaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s,a,h=Math.floor(e),l=r*(1-i),u=r*(1-i*(e-h)),c=r*(1-i*(1+h-e));1===h?(o=u,s=r,a=l):2===h?(o=l,s=r,a=c):3===h?(o=l,s=u,a=r):4===h?(o=c,s=l,a=r):5===h?(o=r,s=l,a=u):(o=r,s=c,a=l),n=[o,s,a,t[3]]}return n},r.ColorConversion._hslaToHSBA=function(t){var e,i=t[0],r=t[1],n=t[2];return[i,r=2*((e=n<.5?(1+r)*n:n+r-n*r)-n)/e,e,t[3]]},r.ColorConversion._hslaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s=2*r-(o=r<.5?(1+i)*r:r+i-r*i),a=function(t,e,i){return t<0?t+=6:t>=6&&(t-=6),t<1?e+(i-e)*t:t<3?i:t<4?e+(i-e)*(4-t):e};n=[a(e+2,s,o),a(e,s,o),a(e-2,s,o),t[3]]}return n},r.ColorConversion._rgbaToHSBA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=s-Math.min(r,n,o);return 0===a?(e=0,i=0):(i=a/s,r===s?e=(n-o)/a:n===s?e=2+(o-r)/a:o===s&&(e=4+(r-n)/a),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,s,t[3]]},r.ColorConversion._rgbaToHSLA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=Math.min(r,n,o),h=s+a,l=s-a;return 0===l?(e=0,i=0):(i=h<1?l/h:l/(2-h),r===s?e=(n-o)/l:n===s?e=2+(o-r)/l:o===s&&(e=4+(r-n)/l),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,h/2,t[3]]},e.exports=r.ColorConversion},{"../core/main":24}],15:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),t("../core/error_helpers"),r.prototype.alpha=function(t){return r._validateParameters("alpha",arguments),this.color(t)._getAlpha()},r.prototype.blue=function(t){return r._validateParameters("blue",arguments),this.color(t)._getBlue()},r.prototype.brightness=function(t){return r._validateParameters("brightness",arguments),this.color(t)._getBrightness()},r.prototype.color=function(){if(r._validateParameters("color",arguments),arguments[0]instanceof r.Color)return arguments[0];var t=arguments[0]instanceof Array?arguments[0]:arguments;return new r.Color(this,t)},r.prototype.green=function(t){return r._validateParameters("green",arguments),this.color(t)._getGreen()},r.prototype.hue=function(t){return r._validateParameters("hue",arguments),this.color(t)._getHue()},r.prototype.lerpColor=function(t,e,i){r._validateParameters("lerpColor",arguments);var o,s,a,h,l,u,c=this._colorMode,p=this._colorMaxes;if(c===n.RGB)l=t.levels.map(function(t){return t/255}),u=e.levels.map(function(t){return t/255});else if(c===n.HSB)t._getBrightness(),e._getBrightness(),l=t.hsba,u=e.hsba;else{if(c!==n.HSL)throw new Error(c+"cannot be used for interpolation.");t._getLightness(),e._getLightness(),l=t.hsla,u=e.hsla}return i=Math.max(Math.min(i,1),0),void 0===this.lerp&&(this.lerp=function(t,e,i){return i*(e-t)+t}),o=this.lerp(l[0],u[0],i),s=this.lerp(l[1],u[1],i),a=this.lerp(l[2],u[2],i),h=this.lerp(l[3],u[3],i),o*=p[c][0],s*=p[c][1],a*=p[c][2],h*=p[c][3],this.color(o,s,a,h)},r.prototype.lightness=function(t){return r._validateParameters("lightness",arguments),this.color(t)._getLightness()},r.prototype.red=function(t){return r._validateParameters("red",arguments),this.color(t)._getRed()},r.prototype.saturation=function(t){return r._validateParameters("saturation",arguments),this.color(t)._getSaturation()},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"./p5.Color":16}],16:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("./color_conversion");r.Color=function(t,e){if(this._storeModeAndMaxes(t._colorMode,t._colorMaxes),this.mode!==n.RGB&&this.mode!==n.HSL&&this.mode!==n.HSB)throw new Error(this.mode+" is an invalid colorMode.");return this._array=r.Color._parseInputs.apply(this,e),this._calculateLevels(),this},r.Color.prototype.toString=function(t){this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsla||(this.hsla=o._rgbaToHSLA(this._array));var e=this.levels,i=this._array,r=i[3];switch(t){case"#rrggbb":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16));case"#rrggbbaa":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16),e[3]<16?"0".concat(e[2].toString(16)):e[3].toString(16));case"#rgb":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16));case"#rgba":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16),Math.round(15*i[3]).toString(16));case"rgb":return"rgb(".concat(e[0],", ",e[1],", ",e[2],")");case"rgb%":return"rgb(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%)");case"rgba%":return"rgba(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%, ",(100*i[3]).toPrecision(3),"%)");case"hsb":case"hsv":return"hsb(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],")");case"hsb%":case"hsv%":return"hsb(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%)");case"hsba":case"hsva":return"hsba(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],", ",r,")");case"hsba%":case"hsva%":return"hsba(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"hsl":return"hsl(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],")");case"hsl%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%)");case"hsla":return"hsla(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],", ",r,")");case"hsla%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"rgba":default:return"rgba("+e[0]+","+e[1]+","+e[2]+","+r+")"}},r.Color.prototype.setRed=function(t){this._array[0]=t/this.maxes[n.RGB][0],this._calculateLevels()},r.Color.prototype.setGreen=function(t){this._array[1]=t/this.maxes[n.RGB][1],this._calculateLevels()},r.Color.prototype.setBlue=function(t){this._array[2]=t/this.maxes[n.RGB][2],this._calculateLevels()},r.Color.prototype.setAlpha=function(t){this._array[3]=t/this.maxes[this.mode][3],this._calculateLevels()},r.Color.prototype._calculateLevels=function(){for(var t=this._array,e=this.levels=new Array(t.length),i=t.length-1;i>=0;--i)e[i]=Math.round(255*t[i])},r.Color.prototype._getAlpha=function(){return this._array[3]*this.maxes[this.mode][3]},r.Color.prototype._storeModeAndMaxes=function(t,e){this.mode=t,this.maxes=e},r.Color.prototype._getMode=function(){return this.mode},r.Color.prototype._getMaxes=function(){return this.maxes},r.Color.prototype._getBlue=function(){return this._array[2]*this.maxes[n.RGB][2]},r.Color.prototype._getBrightness=function(){return this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[2]*this.maxes[n.HSB][2]},r.Color.prototype._getGreen=function(){return this._array[1]*this.maxes[n.RGB][1]},r.Color.prototype._getHue=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[0]*this.maxes[n.HSB][0]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[0]*this.maxes[n.HSL][0])},r.Color.prototype._getLightness=function(){return this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[2]*this.maxes[n.HSL][2]},r.Color.prototype._getRed=function(){return this._array[0]*this.maxes[n.RGB][0]},r.Color.prototype._getSaturation=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[1]*this.maxes[n.HSB][1]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[1]*this.maxes[n.HSL][1])};var s={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},a=/\s*/,h=/(\d{1,3})/,l=/((?:\d+(?:\.\d+)?)|(?:\.\d+))/,u=new RegExp(l.source+"%"),c={HEX3:/^#([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX4:/^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX6:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,HEX8:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,RGB:new RegExp(["^rgb\\(",h.source,",",h.source,",",h.source,"\\)$"].join(a.source),"i"),RGB_PERCENT:new RegExp(["^rgb\\(",u.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),RGBA:new RegExp(["^rgba\\(",h.source,",",h.source,",",h.source,",",l.source,"\\)$"].join(a.source),"i"),RGBA_PERCENT:new RegExp(["^rgba\\(",u.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSL:new RegExp(["^hsl\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSLA:new RegExp(["^hsla\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSB:new RegExp(["^hsb\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSBA:new RegExp(["^hsba\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i")};r.Color._parseInputs=function(t,e,i,a){var h,l=arguments.length,u=this.mode,p=this.maxes[u],d=[];if(l>=3){for(d[0]=t/p[0],d[1]=e/p[1],d[2]=i/p[2],d[3]="number"==typeof a?a/p[3]:1,h=d.length-1;h>=0;--h){var f=d[h];f<0?d[h]=0:f>1&&(d[h]=1)}return u===n.HSL?o._hslaToRGBA(d):u===n.HSB?o._hsbaToRGBA(d):d}if(1===l&&"string"==typeof t){var m=t.trim().toLowerCase();if(s[m])return r.Color._parseInputs.call(this,s[m]);if(c.HEX3.test(m))return(d=c.HEX3.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255}))[3]=1,d;if(c.HEX6.test(m))return(d=c.HEX6.exec(m).slice(1).map(function(t){return parseInt(t,16)/255}))[3]=1,d;if(c.HEX4.test(m))return d=c.HEX4.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255});if(c.HEX8.test(m))return d=c.HEX8.exec(m).slice(1).map(function(t){return parseInt(t,16)/255});if(c.RGB.test(m))return(d=c.RGB.exec(m).slice(1).map(function(t){return t/255}))[3]=1,d;if(c.RGB_PERCENT.test(m))return(d=c.RGB_PERCENT.exec(m).slice(1).map(function(t){return parseFloat(t)/100}))[3]=1,d;if(c.RGBA.test(m))return d=c.RGBA.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):t/255});if(c.RGBA_PERCENT.test(m))return d=c.RGBA_PERCENT.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):parseFloat(t)/100});if(c.HSL.test(m)?(d=c.HSL.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSLA.test(m)&&(d=c.HSLA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),(d=d.map(function(t){return Math.max(Math.min(t,1),0)})).length)return o._hslaToRGBA(d);if(c.HSB.test(m)?(d=c.HSB.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSBA.test(m)&&(d=c.HSBA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),d.length){for(h=d.length-1;h>=0;--h)d[h]=Math.max(Math.min(d[h],1),0);return o._hsbaToRGBA(d)}d=[1,1,1,1]}else{if(1!==l&&2!==l||"number"!=typeof t)throw new Error(arguments+"is not a valid color representation.");d[0]=t/p[2],d[1]=t/p[2],d[2]=t/p[2],d[3]="number"==typeof e?e/p[3]:1,d=d.map(function(t){return Math.max(Math.min(t,1),0)})}return d},e.exports=r.Color},{"../core/constants":18,"../core/main":24,"./color_conversion":14}],17:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),r.prototype.background=function(){return arguments[0]instanceof r.Image?this.image(arguments[0],0,0,this.width,this.height):this._renderer.background.apply(this._renderer,arguments),this},r.prototype.clear=function(){return this._renderer.clear(),this},r.prototype.colorMode=function(t,e,i,o,s){if(r._validateParameters("colorMode",arguments),t===n.RGB||t===n.HSB||t===n.HSL){this._colorMode=t;var a=this._colorMaxes[t];2===arguments.length?(a[0]=e,a[1]=e,a[2]=e,a[3]=e):4===arguments.length?(a[0]=e,a[1]=i,a[2]=o):5===arguments.length&&(a[0]=e,a[1]=i,a[2]=o,a[3]=s)}return this},r.prototype.fill=function(){return this._renderer._setProperty("_fillSet",!0),this._renderer._setProperty("_doFill",!0),this._renderer.fill.apply(this._renderer,arguments),this},r.prototype.noFill=function(){return this._renderer._setProperty("_doFill",!1),this},r.prototype.noStroke=function(){return this._renderer._setProperty("_doStroke",!1),this},r.prototype.stroke=function(){return this._renderer._setProperty("_strokeSet",!0),this._renderer._setProperty("_doStroke",!0),this._renderer.stroke.apply(this._renderer,arguments),this},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Color":16}],18:[function(t,e,i){"use strict";var r=Math.PI;e.exports={P2D:"p2d",WEBGL:"webgl",ARROW:"default",CROSS:"crosshair",HAND:"pointer",MOVE:"move",TEXT:"text",WAIT:"wait",HALF_PI:r/2,PI:r,QUARTER_PI:r/4,TAU:2*r,TWO_PI:2*r,DEGREES:"degrees",RADIANS:"radians",DEG_TO_RAD:r/180,RAD_TO_DEG:180/r,CORNER:"corner",CORNERS:"corners",RADIUS:"radius",RIGHT:"right",LEFT:"left",CENTER:"center",TOP:"top",BOTTOM:"bottom",BASELINE:"alphabetic",POINTS:0,LINES:1,LINE_STRIP:3,LINE_LOOP:2,TRIANGLES:4,TRIANGLE_FAN:6,TRIANGLE_STRIP:5,QUADS:"quads",QUAD_STRIP:"quad_strip",CLOSE:"close",OPEN:"open",CHORD:"chord",PIE:"pie",PROJECT:"square",SQUARE:"butt",ROUND:"round",BEVEL:"bevel",MITER:"miter",RGB:"rgb",HSB:"hsb",HSL:"hsl",AUTO:"auto",ALT:18,BACKSPACE:8,CONTROL:17,DELETE:46,DOWN_ARROW:40,ENTER:13,ESCAPE:27,LEFT_ARROW:37,OPTION:18,RETURN:13,RIGHT_ARROW:39,SHIFT:16,TAB:9,UP_ARROW:38,BLEND:"source-over",ADD:"lighter",DARKEST:"darken",LIGHTEST:"lighten",DIFFERENCE:"difference",EXCLUSION:"exclusion",MULTIPLY:"multiply",SCREEN:"screen",REPLACE:"copy",OVERLAY:"overlay",HARD_LIGHT:"hard-light",SOFT_LIGHT:"soft-light",DODGE:"color-dodge",BURN:"color-burn",THRESHOLD:"threshold",GRAY:"gray",OPAQUE:"opaque",INVERT:"invert",POSTERIZE:"posterize",DILATE:"dilate",ERODE:"erode",BLUR:"blur",NORMAL:"normal",ITALIC:"italic",BOLD:"bold",_DEFAULT_TEXT_FILL:"#000000",_DEFAULT_LEADMULT:1.25,_CTX_MIDDLE:"middle",LINEAR:"linear",QUADRATIC:"quadratic",BEZIER:"bezier",CURVE:"curve",STROKE:"stroke",FILL:"fill",TEXTURE:"texture",IMMEDIATE:"immediate",NEAREST:"nearest",REPEAT:"repeat",CLAMP:"clamp",MIRROR:"mirror",LANDSCAPE:"landscape",PORTRAIT:"portrait",_DEFAULT_STROKE:"#000000",_DEFAULT_FILL:"#FFFFFF",GRID:"grid",AXES:"axes"}},{}],19:[function(t,e,i){"use strict";function r(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth||0}function n(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight||0}var o=t("./main"),s=t("./constants"),a=[s.ARROW,s.CROSS,s.HAND,s.MOVE,s.TEXT,s.WAIT];o.prototype._frameRate=0,o.prototype._lastFrameTime=window.performance.now(),o.prototype._targetFrameRate=60;var h=window.print;o.prototype.print=function(){arguments.length?console.log.apply(console,arguments):h()},o.prototype.frameCount=0,o.prototype.focused=document.hasFocus(),o.prototype.cursor=function(t,e,i){var r="auto",n=this._curElement.elt;if(a.indexOf(t)>-1)r=t;else if("string"==typeof t){var o="";e&&i&&"number"==typeof e&&"number"==typeof i&&(o=e+" "+i),r="http://"===t.substring(0,7)||"https://"===t.substring(0,8)?"url("+t+") "+o+", auto":/\.(cur|jpg|jpeg|gif|png|CUR|JPG|JPEG|GIF|PNG)$/.test(t)?"url("+t+") "+o+", auto":t}n.style.cursor=r},o.prototype.frameRate=function(t){return o._validateParameters("frameRate",arguments),"number"!=typeof t||t<0?this._frameRate:(this._setProperty("_targetFrameRate",t),this._runFrames(),this)},o.prototype.getFrameRate=function(){return this.frameRate()},o.prototype.setFrameRate=function(t){return this.frameRate(t)},o.prototype.noCursor=function(){this._curElement.elt.style.cursor="none"},o.prototype.displayWidth=screen.width,o.prototype.displayHeight=screen.height,o.prototype.windowWidth=r(),o.prototype.windowHeight=n(),o.prototype._onresize=function(t){this._setProperty("windowWidth",r()),this._setProperty("windowHeight",n());var e,i=this._isGlobal?window:this;"function"==typeof i.windowResized&&(void 0===(e=i.windowResized(t))||e||t.preventDefault())},o.prototype.width=0,o.prototype.height=0,o.prototype.fullscreen=function(t){if(o._validateParameters("fullscreen",arguments),void 0===t)return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;t?function(t){if(!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled))throw new Error("Fullscreen not enabled in this browser.");t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.msRequestFullscreen&&t.msRequestFullscreen()}(document.documentElement):document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.msExitFullscreen&&document.msExitFullscreen()},o.prototype.pixelDensity=function(t){var e;return o._validateParameters("pixelDensity",arguments),"number"==typeof t?(t!==this._pixelDensity&&(this._pixelDensity=t,this._pixelsDirty=!0),e=this,this.resizeCanvas(this.width,this.height,!0)):e=this._pixelDensity,e},o.prototype.displayDensity=function(){return window.devicePixelRatio},o.prototype.getURL=function(){return location.href},o.prototype.getURLPath=function(){return location.pathname.split("/").filter(function(t){return""!==t})},o.prototype.getURLParams=function(){for(var t,e=/[?&]([^&=]+)(?:[&=])([^&=]+)/gim,i={};null!=(t=e.exec(location.search));)t.index===e.lastIndex&&e.lastIndex++,i[t[1]]=t[2];return i},e.exports=o},{"./constants":18,"./main":24}],20:[function(t,e,i){"use strict";var r=t("./main");t("./constants"),r._validateParameters=r._friendlyFileLoadError=function(){};var n=null,o=function(){var e={},i=function(t){return Object.getOwnPropertyNames(t).filter(function(t){return!("_"===t[0]||t in e||(e[t]=!0,0))}).map(function(e){var i;return i="function"==typeof t[e]?"function":e===e.toUpperCase()?"constant":"variable",{name:e,type:i}})};(n=[].concat(i(r.prototype),i(t("./constants")))).sort(function(t,e){return e.name.length-t.name.length})},s=function(t,e){e||(e=console.log.bind(console)),n||o(),n.some(function(i){if(t.message&&null!==t.message.match("\\W?"+i.name+"\\W"))return e("Did you just try to use p5.js's "+i.name+("function"===i.type?"() ":" ")+i.type+"? If so, you may want to move it into your sketch's setup() function.\n\nFor more details, see: https://github.com/processing/p5.js/wiki/p5.js-overview#why-cant-i-assign-variables-using-p5-functions-and-variables-before-setup"),!0})};r.prototype._helpForMisusedAtTopLevelCode=s,"complete"!==document.readyState&&(window.addEventListener("error",s,!1),window.addEventListener("load",function(){window.removeEventListener("error",s,!1)})),e.exports=r},{"../../docs/reference/data.json":void 0,"./constants":18,"./main":24}],21:[function(t,e,i){"use strict";var r=t("./constants");e.exports={modeAdjust:function(t,e,i,n,o){return o===r.CORNER?{x:t,y:e,w:i,h:n}:o===r.CORNERS?{x:t,y:e,w:i-t,h:n-e}:o===r.RADIUS?{x:t-i,y:e-n,w:2*i,h:2*n}:o===r.CENTER?{x:t-.5*i,y:e-.5*n,w:i,h:n}:void 0}}},{"./constants":18}],22:[function(t,e,i){"use strict";var r=t("../core/main"),n=function(){window.mocha||(window.setup&&"function"==typeof window.setup||window.draw&&"function"==typeof window.draw)&&!r.instance&&new r};"complete"===document.readyState?n():window.addEventListener("load",n,!1)},{"../core/main":24}],23:[function(t,e,i){"use strict";var r=t("./main");r.prototype.exit=function(){throw new Error("exit() not implemented, see remove()")},r.prototype.pushStyle=function(){throw new Error("pushStyle() not used, see push()")},r.prototype.popStyle=function(){throw new Error("popStyle() not used, see pop()")},r.prototype.size=function(){var t="size() is not a valid p5 function, to set the size of the ";throw new Error(t+="drawing canvas, please use createCanvas() instead")},e.exports=r},{"./main":24}],24:[function(t,e,i){"use strict";t("./shim");var r=t("./constants"),n=function(t,e,i){"boolean"==typeof e&&void 0===i&&(i=e,e=void 0),this._setupDone=!1,this._pixelDensity=Math.ceil(window.devicePixelRatio)||1,this._userNode=e,this._curElement=null,this._elements=[],this._requestAnimId=0,this._preloadCount=0,this._isGlobal=!1,this._loop=!0,this._initializeInstanceVariables(),this._defaultCanvasSize={width:100,height:100},this._events={mousemove:null,mousedown:null,mouseup:null,dragend:null,dragover:null,click:null,dblclick:null,mouseover:null,mouseout:null,keydown:null,keyup:null,keypress:null,touchstart:null,touchmove:null,touchend:null,resize:null,blur:null},this._events.wheel=null,this._loadingScreenId="p5_loading",this._registeredMethods={};for(var r=Object.getOwnPropertyNames(n.prototype._registeredMethods),o=0;o=i-5)&&(this.redraw(),this._frameRate=1e3/(t-this._lastFrameTime),this._lastFrameTime=t,void 0!==this._updateMouseCoords&&this._updateMouseCoords()),this._loop&&(this._requestAnimId=window.requestAnimationFrame(this._draw))}.bind(this),this._runFrames=function(){this._updateInterval&&clearInterval(this._updateInterval)}.bind(this),this._setProperty=function(t,e){this[t]=e,this._isGlobal&&(window[t]=e)}.bind(this),this.remove=function(){var t=document.getElementById(this._loadingScreenId);if(t&&(t.parentNode.removeChild(t),this._incrementPreload()),this._curElement){for(var e in this._loop=!1,this._requestAnimId&&window.cancelAnimationFrame(this._requestAnimId),this._events)window.removeEventListener(e,this._events[e]);for(var i=0;i-1?o.readAsText(n):o.readAsDataURL(n)}},this)):console.log("The File APIs are not fully supported in this browser."),this},s.Element.prototype._setProperty=function(t,e){this[t]=e},e.exports=s.Element},{"./main":24}],26:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");r.Graphics=function(t,e,i,o){var s=i||n.P2D;for(var a in this.canvas=document.createElement("canvas"),(o._userNode||document.body).appendChild(this.canvas),r.Element.call(this,this.canvas,o,!1),r.prototype)this[a]||("function"==typeof r.prototype[a]?this[a]=r.prototype[a].bind(this):this[a]=r.prototype[a]);return r.prototype._initializeInstanceVariables.apply(this),this.width=t,this.height=e,this._pixelDensity=o._pixelDensity,s===n.WEBGL?this._renderer=new r.RendererGL(this.canvas,this,!1):this._renderer=new r.Renderer2D(this.canvas,this,!1),o._elements.push(this),this._renderer.resize(t,e),this._renderer._applyDefaults(),this},r.Graphics.prototype=Object.create(r.Element.prototype),r.Graphics.prototype.remove=function(){this.elt.parentNode&&this.elt.parentNode.removeChild(this.elt);var t=this._pInst._elements.indexOf(this);for(var e in-1!==t&&this._pInst._elements.splice(t,1),this._events)this.elt.removeEventListener(e,this._events[e])},e.exports=r.Graphics},{"./constants":18,"./main":24}],27:[function(t,e,i){"use strict";function r(t){var e=0,i=0;if(t.offsetParent)do{e+=t.offsetLeft,i+=t.offsetTop}while(t=t.offsetParent);else e+=t.offsetLeft,i+=t.offsetTop;return[e,i]}var n=t("./main"),o=t("../core/constants");n.Renderer=function(t,e,i){n.Element.call(this,t,e),this.canvas=t,i?(this._isMainCanvas=!0,this._pInst._setProperty("_curElement",this),this._pInst._setProperty("canvas",this.canvas),this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height)):(this.canvas.style.display="none",this._styles=[]),this._textSize=12,this._textLeading=15,this._textFont="sans-serif",this._textStyle=o.NORMAL,this._textAscent=null,this._textDescent=null,this._textAlign=o.LEFT,this._textBaseline=o.BASELINE,this._rectMode=o.CORNER,this._ellipseMode=o.CENTER,this._curveTightness=0,this._imageMode=o.CORNER,this._tint=null,this._doStroke=!0,this._doFill=!0,this._strokeSet=!1,this._fillSet=!1},n.Renderer.prototype=Object.create(n.Element.prototype),n.Renderer.prototype.push=function(){return{properties:{_doStroke:this._doStroke,_strokeSet:this._strokeSet,_doFill:this._doFill,_fillSet:this._fillSet,_tint:this._tint,_imageMode:this._imageMode,_rectMode:this._rectMode,_ellipseMode:this._ellipseMode,_textFont:this._textFont,_textLeading:this._textLeading,_textSize:this._textSize,_textAlign:this._textAlign,_textBaseline:this._textBaseline,_textStyle:this._textStyle}}},n.Renderer.prototype.pop=function(t){t.properties&&Object.assign(this,t.properties)},n.Renderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.elt.width=t*this._pInst._pixelDensity,this.elt.height=e*this._pInst._pixelDensity,this.elt.style.width=t+"px",this.elt.style.height=e+"px",this._isMainCanvas&&(this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height))},n.Renderer.prototype.textLeading=function(t){return"number"==typeof t?(this._setProperty("_textLeading",t),this._pInst):this._textLeading},n.Renderer.prototype.textSize=function(t){return"number"==typeof t?(this._setProperty("_textSize",t),this._setProperty("_textLeading",t*o._DEFAULT_LEADMULT),this._applyTextProperties()):this._textSize},n.Renderer.prototype.textStyle=function(t){return t?(t!==o.NORMAL&&t!==o.ITALIC&&t!==o.BOLD||this._setProperty("_textStyle",t),this._applyTextProperties()):this._textStyle},n.Renderer.prototype.textAscent=function(){return null===this._textAscent&&this._updateTextMetrics(),this._textAscent},n.Renderer.prototype.textDescent=function(){return null===this._textDescent&&this._updateTextMetrics(),this._textDescent},n.Renderer.prototype.textAlign=function(t,e){return void 0!==t?(this._setProperty("_textAlign",t),void 0!==e&&this._setProperty("_textBaseline",e),this._applyTextProperties()):{horizontal:this._textAlign,vertical:this._textBaseline}},n.Renderer.prototype.text=function(t,e,i,r,n){var s,a,h,l,u,c,p,d,f=this._pInst,m=Number.MAX_VALUE;if((this._doFill||this._doStroke)&&void 0!==t){if("string"!=typeof t&&(t=t.toString()),t=t.replace(/(\t)/g," "),s=t.split("\n"),void 0!==r){for(d=0,h=0;hr?(u=p[a]+" ",d+=f.textLeading()):u=c;switch(this._rectMode===o.CENTER&&(e-=r/2,i-=n/2),this._textAlign){case o.CENTER:e+=r/2;break;case o.RIGHT:e+=r}var y=!1;if(void 0!==n){switch(this._textBaseline){case o.BOTTOM:i+=n-d;break;case o.CENTER:i+=(n-d)/2;break;case o.BASELINE:y=!0,this._textBaseline=o.TOP}m=i+n-f.textAscent()}for(h=0;hr&&u.length>0?(this._renderText(f,u,e,i,m),u=p[a]+" ",i+=f.textLeading()):u=c;this._renderText(f,u,e,i,m),i+=f.textLeading(),y&&(this._textBaseline=o.BASELINE)}}else{var v=0,g=f.textAlign().vertical;for(g===o.CENTER?v=(s.length-1)*f.textLeading()/2:g===o.BOTTOM&&(v=(s.length-1)*f.textLeading()),l=0;l0&&(c=u.width/t.width),this.drawingContext.drawImage(u,c*e,c*i,c*n,c*o,s,a,h,l)}catch(t){if("NS_ERROR_NOT_AVAILABLE"!==t.name)throw t}this._pInst._pixelsDirty=!0},r.Renderer2D.prototype._getTintedImageCanvas=function(t){if(!t.canvas)return t;var e=o._toPixels(t.canvas),i=document.createElement("canvas");i.width=t.canvas.width,i.height=t.canvas.height;for(var r=i.getContext("2d"),n=r.createImageData(t.canvas.width,t.canvas.height),s=n.data,a=0;a=this.width||e>=this.height)return[0,0,0,255];var o=this._pInst||this,s=o._pixelDensity;t=Math.floor(t),e=Math.floor(e),i=Math.floor(i),n=Math.floor(n);var a,h,l=t*s,u=e*s;if(1!==i||1!==n||this instanceof r.RendererGL){var c=Math.min(i,o.width),p=Math.min(n,o.height),d=c*s,f=p*s,m=new r.Image(c,p);return m.canvas.getContext("2d").drawImage(this.canvas,l,u,d,f,0,0,c,p),m}return o._pixelsDirty?(a=this.drawingContext.getImageData(l,u,1,1).data,h=0):(a=o.pixels,h=4*(l+u*this.width*s)),[a[h+0],a[h+1],a[h+2],a[h+3]]},r.Renderer2D.prototype.loadPixels=function(){var t=this._pInst||this;if(t._pixelsDirty){t._pixelsDirty=!1;var e=t._pixelDensity,i=this.width*e,r=this.height*e,n=this.drawingContext.getImageData(0,0,i,r);t._setProperty("imageData",n),t._setProperty("pixels",n.data)}},r.Renderer2D.prototype.set=function(t,e,i){t=Math.floor(t),e=Math.floor(e);var n=this._pInst||this;if(i instanceof r.Image)this.drawingContext.save(),this.drawingContext.setTransform(1,0,0,1,0,0),this.drawingContext.scale(n._pixelDensity,n._pixelDensity),this.drawingContext.drawImage(i.canvas,t,e),this.drawingContext.restore(),n._pixelsDirty=!0;else{var o=0,s=0,a=0,h=0,l=4*(e*n._pixelDensity*(this.width*n._pixelDensity)+t*n._pixelDensity);if(n.imageData&&!n._pixelsDirty||n.loadPixels.call(n),"number"==typeof i)l1e-5;)c=Math.min(s-o,n.HALF_PI),p.push(this._acuteArcToBezier(o,c)),o+=c;return this._doFill&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a!==n.PIE&&null!=a||h.lineTo(t,e),h.closePath(),h.fill()),this._doStroke&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a===n.PIE?(h.lineTo(t,e),h.closePath()):a===n.CHORD&&h.closePath(),h.stroke()),this},r.Renderer2D.prototype.ellipse=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;var l=.5522847498,u=a/2*l,c=h/2*l,p=n+a,d=o+h,f=n+a/2,m=o+h/2;e.beginPath(),e.moveTo(n,m),e.bezierCurveTo(n,m-c,f-u,o,f,o),e.bezierCurveTo(f+u,o,p,m-c,p,m),e.bezierCurveTo(p,m+c,f+u,d,f,d),e.bezierCurveTo(f-u,d,n,m+c,n,m),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.line=function(t,e,i,r){var n=this.drawingContext;return this._doStroke?this._getStroke()===s?this:(n.lineWidth%2==1&&n.translate(.5,.5),n.beginPath(),n.moveTo(t,e),n.lineTo(i,r),n.stroke(),n.lineWidth%2==1&&n.translate(-.5,-.5),this):this},r.Renderer2D.prototype.point=function(t,e){var i=this.drawingContext;if(!this._doStroke)return this;if(this._getStroke()===s)return this;var r=this._getStroke(),o=this._getFill();t=Math.round(t),e=Math.round(e),this._setFill(r),i.lineWidth>1?(i.beginPath(),i.arc(t,e,i.lineWidth/2,0,n.TWO_PI,!1),i.fill()):i.fillRect(t,e,1,1),this._setFill(o)},r.Renderer2D.prototype.quad=function(t,e,i,r,n,o,a,h){var l=this.drawingContext,u=this._doFill,c=this._doStroke;if(u&&!c){if(this._getFill()===s)return this}else if(!u&&c&&this._getStroke()===s)return this;return l.beginPath(),l.moveTo(t,e),l.lineTo(i,r),l.lineTo(n,o),l.lineTo(a,h),l.closePath(),u&&l.fill(),c&&l.stroke(),this},r.Renderer2D.prototype.rect=function(t){var e=t[0],i=t[1],r=t[2],n=t[3],o=t[4],a=t[5],h=t[6],l=t[7],u=this.drawingContext,c=this._doFill,p=this._doStroke;if(c&&!p){if(this._getFill()===s)return this}else if(!c&&p&&this._getStroke()===s)return this;if(this._doStroke&&u.lineWidth%2==1&&u.translate(.5,.5),u.beginPath(),void 0===o)u.rect(e,i,r,n);else{void 0===a&&(a=o),void 0===h&&(h=a),void 0===l&&(l=h);var d=r/2,f=n/2;r<2*o&&(o=d),n<2*o&&(o=f),r<2*a&&(a=d),n<2*a&&(a=f),r<2*h&&(h=d),n<2*h&&(h=f),r<2*l&&(l=d),n<2*l&&(l=f),u.beginPath(),u.moveTo(e+o,i),u.arcTo(e+r,i,e+r,i+n,a),u.arcTo(e+r,i+n,e,i+n,h),u.arcTo(e,i+n,e,i,l),u.arcTo(e,i,e+r,i,o),u.closePath()}return this._doFill&&u.fill(),this._doStroke&&u.stroke(),this._doStroke&&u.lineWidth%2==1&&u.translate(-.5,-.5),this},r.Renderer2D.prototype.triangle=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3],l=t[4],u=t[5];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;e.beginPath(),e.moveTo(n,o),e.lineTo(a,h),e.lineTo(l,u),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.endShape=function(t,e,i,r,o,s,a){if(0===e.length)return this;if(!this._doStroke&&!this._doFill)return this;var h,l=t===n.CLOSE;l&&!s&&e.push(e[0]);var u,c,p=e.length;if(!i||a!==n.POLYGON&&null!==a)if(!r||a!==n.POLYGON&&null!==a)if(!o||a!==n.POLYGON&&null!==a)if(a===n.POINTS)for(u=0;u2){for(this.drawingContext.beginPath(),u=2;u3)for(u=0;u+13){var d=[],f=1-this._curveTightness;for(this.drawingContext.beginPath(),this.drawingContext.moveTo(e[1][0],e[1][1]),u=1;u+2=o))return t.push(),this._isOpenType()?this._textFont._renderPath(e,i,r,{renderer:this}):(this._doStroke&&this._strokeSet&&this.drawingContext.strokeText(e,i,r),this._doFill&&(this._fillSet||this._setFill(n._DEFAULT_TEXT_FILL),this.drawingContext.fillText(e,i,r))),t.pop(),this._pInst._pixelsDirty=!0,t},r.Renderer2D.prototype.textWidth=function(t){return this._isOpenType()?this._textFont._textWidth(t,this._textSize):this.drawingContext.measureText(t).width},r.Renderer2D.prototype._applyTextProperties=function(){var t,e=this._pInst;return this._setProperty("_textAscent",null),this._setProperty("_textDescent",null),t=this._textFont,this._isOpenType()&&(t=this._textFont.font.familyName,this._setProperty("_textStyle",this._textFont.font.styleName)),this.drawingContext.font=(this._textStyle||"normal")+" "+(this._textSize||12)+"px "+(t||"sans-serif"),this.drawingContext.textAlign=this._textAlign,this._textBaseline===n.CENTER?this.drawingContext.textBaseline=n._CTX_MIDDLE:this.drawingContext.textBaseline=this._textBaseline,e},r.Renderer2D.prototype.push=function(){return this.drawingContext.save(),r.Renderer.prototype.push.apply(this)},r.Renderer2D.prototype.pop=function(t){this.drawingContext.restore(),this._cachedFillStyle=this.drawingContext.fillStyle,this._cachedStrokeStyle=this.drawingContext.strokeStyle,r.Renderer.prototype.pop.call(this,t)},e.exports=r.Renderer2D},{"../image/filters":42,"./constants":18,"./main":24,"./p5.Renderer":27}],29:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");t("./p5.Graphics"),t("./p5.Renderer2D"),t("../webgl/p5.RendererGL");var o="defaultCanvas0",s="p5Canvas";r.prototype.createCanvas=function(t,e,i){r._validateParameters("createCanvas",arguments);var a,h=i||n.P2D;if(h===n.WEBGL){if(a=document.getElementById(o)){a.parentNode.removeChild(a);var l=this._renderer;this._elements=this._elements.filter(function(t){return t!==l})}(a=document.createElement("canvas")).id=o,a.classList.add(s)}else if(this._defaultGraphicsCreated)a=this.canvas;else{a=document.createElement("canvas");for(var u=0;document.getElementById("defaultCanvas"+u);)u++;o="defaultCanvas"+u,a.id=o,a.classList.add(s)}return this._setupDone||(a.dataset.hidden=!0,a.style.visibility="hidden"),this._userNode?this._userNode.appendChild(a):document.body.appendChild(a),h===n.WEBGL?(this._setProperty("_renderer",new r.RendererGL(a,this,!0)),this._elements.push(this._renderer)):this._defaultGraphicsCreated||(this._setProperty("_renderer",new r.Renderer2D(a,this,!0)),this._defaultGraphicsCreated=!0,this._elements.push(this._renderer)),this._renderer.resize(t,e),this._renderer._applyDefaults(),this._renderer},r.prototype.resizeCanvas=function(t,e,i){if(r._validateParameters("resizeCanvas",arguments),this._renderer){var n={};for(var o in this.drawingContext){var s=this.drawingContext[o];"object"!=typeof s&&"function"!=typeof s&&(n[o]=s)}for(var a in this._renderer.resize(t,e),this.width=t,this.height=e,n)try{this.drawingContext[a]=n[a]}catch(t){}i||this.redraw()}},r.prototype.noCanvas=function(){this.canvas&&this.canvas.parentNode.removeChild(this.canvas)},r.prototype.createGraphics=function(t,e,i){return r._validateParameters("createGraphics",arguments),new r.Graphics(t,e,i,this)},r.prototype.blendMode=function(t){if(r._validateParameters("blendMode",arguments),t!==n.BLEND&&t!==n.DARKEST&&t!==n.LIGHTEST&&t!==n.DIFFERENCE&&t!==n.MULTIPLY&&t!==n.EXCLUSION&&t!==n.SCREEN&&t!==n.REPLACE&&t!==n.OVERLAY&&t!==n.HARD_LIGHT&&t!==n.SOFT_LIGHT&&t!==n.DODGE&&t!==n.BURN&&t!==n.ADD&&t!==n.NORMAL)throw new Error("Mode "+t+" not recognized.");this._renderer.blendMode(t)},e.exports=r},{"../webgl/p5.RendererGL":74,"./constants":18,"./main":24,"./p5.Graphics":26,"./p5.Renderer2D":28}],30:[function(t,e,i){"use strict";var r=t("../main"),n=t("../constants"),o=t("../helpers");t("../error_helpers"),r.prototype.arc=function(t,e,i,s,a,h,l,u){if(r._validateParameters("arc",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;for(a=this._toRadians(a),h=this._toRadians(h);a<0;)a+=n.TWO_PI;for(;h<0;)h+=n.TWO_PI;void 0!==a&&void 0!==h&&(h.toFixed(10)===a.toFixed(10)||Math.abs(h-a)===n.TWO_PI?(a%=n.TWO_PI,h%=n.TWO_PI,a+=n.TWO_PI):Math.abs(h-a)>n.TWO_PI&&(a%=n.TWO_PI,h%=n.TWO_PI,h+=n.TWO_PI)),a<=n.HALF_PI?a=Math.atan(i/s*Math.tan(a)):a>n.HALF_PI&&a<=3*n.HALF_PI&&(a=Math.atan(i/s*Math.tan(a))+n.PI),h<=n.HALF_PI?h=Math.atan(i/s*Math.tan(h)):h>n.HALF_PI&&h<=3*n.HALF_PI&&(h=Math.atan(i/s*Math.tan(h))+n.PI),a>h&&(h+=n.TWO_PI),i=Math.abs(i),s=Math.abs(s);var c=o.modeAdjust(t,e,i,s,this._renderer._ellipseMode);return this._renderer.arc(c.x,c.y,c.w,c.h,a,h,l,u),this},r.prototype.ellipse=function(t,e,i,n,s){if(r._validateParameters("ellipse",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;i<0&&(i=Math.abs(i)),void 0===n?n=i:n<0&&(n=Math.abs(n));var a=o.modeAdjust(t,e,i,n,this._renderer._ellipseMode);return this._renderer.ellipse([a.x,a.y,a.w,a.h,s]),this},r.prototype.line=function(){return r._validateParameters("line",arguments),this._renderer._doStroke&&this._renderer.line.apply(this._renderer,arguments),this},r.prototype.point=function(){return r._validateParameters("point",arguments),this._renderer._doStroke&&this._renderer.point.apply(this._renderer,arguments),this},r.prototype.quad=function(){return r._validateParameters("quad",arguments),(this._renderer._doStroke||this._renderer._doFill)&&this._renderer.quad.apply(this._renderer,arguments),this},r.prototype.rect=function(){if(r._validateParameters("rect",arguments),this._renderer._doStroke||this._renderer._doFill){for(var t=o.modeAdjust(arguments[0],arguments[1],arguments[2],arguments[3],this._renderer._rectMode),e=[t.x,t.y,t.w,t.h],i=4;i0))throw new Error("vertex() must be used once before calling quadraticVertex()");u=!0;for(var e=[],i=0;id||Math.abs(this.accelerationY-this.pAccelerationY)>d||Math.abs(this.accelerationZ-this.pAccelerationZ)>d)&&t();var e=this.deviceTurned||window.deviceTurned;if("function"==typeof e){var i=this.rotationX+180,r=this.pRotationX+180,m=a+180;i-r>0&&i-r<270||i-r<-270?u="clockwise":(i-r<0||i-r>270)&&(u="counter-clockwise"),u!==n&&(m=i),Math.abs(i-m)>90&&Math.abs(i-m)<270&&(m=i,this._setProperty("turnAxis","X"),e()),n=u,a=m-180;var y=this.rotationY+180,v=this.pRotationY+180,g=h+180;y-v>0&&y-v<270||y-v<-270?c="clockwise":(y-v<0||y-this.pRotationY>270)&&(c="counter-clockwise"),c!==o&&(g=y),Math.abs(y-g)>90&&Math.abs(y-g)<270&&(g=y,this._setProperty("turnAxis","Y"),e()),o=c,h=g-180,this.rotationZ-this.pRotationZ>0&&this.rotationZ-this.pRotationZ<270||this.rotationZ-this.pRotationZ<-270?p="clockwise":(this.rotationZ-this.pRotationZ<0||this.rotationZ-this.pRotationZ>270)&&(p="counter-clockwise"),p!==s&&(l=this.rotationZ),Math.abs(this.rotationZ-l)>90&&Math.abs(this.rotationZ-l)<270&&(l=this.rotationZ,this._setProperty("turnAxis","Z"),e()),s=p,this._setProperty("turnAxis",void 0)}var _,b,S=this.deviceShaken||window.deviceShaken;"function"==typeof S&&(null!==this.pAccelerationX&&(_=Math.abs(this.accelerationX-this.pAccelerationX),b=Math.abs(this.accelerationY-this.pAccelerationY)),_+b>f&&S())},e.exports=r},{"../core/main":24}],39:[function(t,e,i){"use strict";var r=t("../core/main"),n={};r.prototype.isKeyPressed=!1,r.prototype.keyIsPressed=!1,r.prototype.key="",r.prototype.keyCode=0,r.prototype._onkeydown=function(t){if(!n[t.which]){this._setProperty("isKeyPressed",!0),this._setProperty("keyIsPressed",!0),this._setProperty("keyCode",t.which),n[t.which]=!0,this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which);var e=this.keyPressed||window.keyPressed;"function"!=typeof e||t.charCode||!1===e(t)&&t.preventDefault()}},r.prototype._onkeyup=function(t){var e=this.keyReleased||window.keyReleased;n[t.which]=!1,function(){for(var t in n)if(n.hasOwnProperty(t)&&!0===n[t])return!0;return!1}()||(this._setProperty("isKeyPressed",!1),this._setProperty("keyIsPressed",!1)),this._setProperty("_lastKeyCodeTyped",null),this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which),this._setProperty("keyCode",t.which),"function"==typeof e&&!1===e(t)&&t.preventDefault()},r.prototype._onkeypress=function(t){if(t.which!==this._lastKeyCodeTyped){this._setProperty("keyCode",t.which),this._setProperty("_lastKeyCodeTyped",t.which),this._setProperty("key",String.fromCharCode(t.which));var e=this.keyTyped||window.keyTyped;"function"==typeof e&&!1===e(t)&&t.preventDefault()}},r.prototype._onblur=function(t){n={}},r.prototype.keyIsDown=function(t){return r._validateParameters("keyIsDown",arguments),n[t]},e.exports=r},{"../core/main":24}],40:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._hasMouseInteracted=!1,r.prototype.mouseX=0,r.prototype.mouseY=0,r.prototype.pmouseX=0,r.prototype.pmouseY=0,r.prototype.winMouseX=0,r.prototype.winMouseY=0,r.prototype.pwinMouseX=0,r.prototype.pwinMouseY=0,r.prototype.mouseButton=0,r.prototype.mouseIsPressed=!1,r.prototype._updateNextMouseCoords=function(t){if(null!==this._curElement&&(!t.touches||t.touches.length>0)){var e=function(t,e,i,r){r&&!r.clientX&&(r.touches?r=r.touches[0]:r.changedTouches&&(r=r.changedTouches[0]));var n=t.getBoundingClientRect(),o=t.scrollWidth/e,s=t.scrollHeight/i;return{x:(r.clientX-n.left)/o,y:(r.clientY-n.top)/s,winX:r.clientX,winY:r.clientY,id:r.identifier}}(this._curElement.elt,this.width,this.height,t);this._setProperty("mouseX",e.x),this._setProperty("mouseY",e.y),this._setProperty("winMouseX",e.winX),this._setProperty("winMouseY",e.winY)}this._hasMouseInteracted||(this._updateMouseCoords(),this._setProperty("_hasMouseInteracted",!0))},r.prototype._updateMouseCoords=function(){this._setProperty("pmouseX",this.mouseX),this._setProperty("pmouseY",this.mouseY),this._setProperty("pwinMouseX",this.winMouseX),this._setProperty("pwinMouseY",this.winMouseY),this._setProperty("_pmouseWheelDeltaY",this._mouseWheelDeltaY)},r.prototype._setMouseButton=function(t){1===t.button?this._setProperty("mouseButton",n.CENTER):2===t.button?this._setProperty("mouseButton",n.RIGHT):this._setProperty("mouseButton",n.LEFT)},r.prototype._onmousemove=function(t){var e=this._isGlobal?window:this;this._updateNextMouseCoords(t),this.mouseIsPressed?"function"==typeof e.mouseDragged?!1===e.mouseDragged(t)&&t.preventDefault():"function"==typeof e.touchMoved&&!1===e.touchMoved(t)&&t.preventDefault():"function"==typeof e.mouseMoved&&!1===e.mouseMoved(t)&&t.preventDefault()},r.prototype._onmousedown=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!0),this._setMouseButton(t),this._updateNextMouseCoords(t),"function"==typeof e.mousePressed?!1===e.mousePressed(t)&&t.preventDefault():"function"==typeof e.touchStarted&&!1===e.touchStarted(t)&&t.preventDefault()},r.prototype._onmouseup=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!1),"function"==typeof e.mouseReleased?!1===e.mouseReleased(t)&&t.preventDefault():"function"==typeof e.touchEnded&&!1===e.touchEnded(t)&&t.preventDefault()},r.prototype._ondragend=r.prototype._onmouseup,r.prototype._ondragover=r.prototype._onmousemove,r.prototype._onclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.mouseClicked&&!1===e.mouseClicked(t)&&t.preventDefault()},r.prototype._ondblclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.doubleClicked&&!1===e.doubleClicked(t)&&t.preventDefault()},r.prototype._mouseWheelDeltaY=0,r.prototype._pmouseWheelDeltaY=0,r.prototype._onwheel=function(t){var e=this._isGlobal?window:this;this._setProperty("_mouseWheelDeltaY",t.deltaY),"function"==typeof e.mouseWheel&&(t.delta=t.deltaY,!1===e.mouseWheel(t)&&t.preventDefault())},e.exports=r},{"../core/constants":18,"../core/main":24}],41:[function(t,e,i){"use strict";function r(t,e,i,r,n){n=n||0;var o=t.getBoundingClientRect(),s=t.scrollWidth/e,a=t.scrollHeight/i,h=r.touches[n]||r.changedTouches[n];return{x:(h.clientX-o.left)/s,y:(h.clientY-o.top)/a,winX:h.clientX,winY:h.clientY,id:h.identifier}}var n=t("../core/main");n.prototype.touches=[],n.prototype._updateTouchCoords=function(t){if(null!==this._curElement){for(var e=[],i=0;i=r)break;x=0}for(P=x;P=r);P++){var O=c[g+R];A=a[P],v+=A[(-16777216&O)>>>24],f+=A[(16711680&O)>>16],m+=A[(65280&O)>>8],y+=A[255&O],d+=s[P],g++}M[_=R+w]=v/d,E[_]=f/d,k[_]=m/d,C[_]=y/d}R+=r}for(R=0,S=(b=-n)*r,T=0;T=l)break;x=0,_=b,g=w+S}for(P=x;P=l);P++)A=a[P],v+=A[M[g]],f+=A[E[g]],m+=A[k[g]],y+=A[C[g]],d+=s[P],_++,g+=r;c[w+R]=v/d<<24|f/d<<16|m/d<<8|y/d}R+=r,S+=r,b++}h._setPixels(i,c)}var n,o,s,a,h={_toPixels:function(t){return t instanceof ImageData?t.data:t.getContext("2d").getImageData(0,0,t.width,t.height).data},_getARGB:function(t,e){var i=4*e;return t[i+3]<<24&4278190080|t[i]<<16&16711680|t[i+1]<<8&65280|255&t[i+2]},_setPixels:function(t,e){for(var i=0,r=0,n=t.length;r>>16,t[i+1]=(65280&e[r])>>>8,t[i+2]=255&e[r],t[i+3]=(4278190080&e[r])>>>24},_toImageData:function(t){return t instanceof ImageData?t:t.getContext("2d").getImageData(0,0,t.width,t.height)},_createImageData:function(t,e){return h._tmpCanvas=document.createElement("canvas"),h._tmpCtx=h._tmpCanvas.getContext("2d"),this._tmpCtx.createImageData(t,e)},apply:function(t,e,i){var r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),o=e(n,i);o instanceof ImageData?r.putImageData(o,0,0,0,0,t.width,t.height):r.putImageData(n,0,0,0,0,t.width,t.height)},threshold:function(t,e){var i=h._toPixels(t);void 0===e&&(e=.5);for(var r=Math.floor(255*e),n=0;n=r?255:0,i[n]=i[n+1]=i[n+2]=o}},gray:function(t){for(var e=h._toPixels(t),i=0;i255)throw new Error("Level must be greater than 2 and less than 255 for posterize");for(var r=e-1,n=0;n>8)/r,i[n+1]=255*(s*e>>8)/r,i[n+2]=255*(a*e>>8)/r}},dilate:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))>(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m>o&&(n=c,o=m),v>o&&(n=d,o=v),g>o&&(n=f,o=g),x[b++]=n;h._setPixels(_,x)},erode:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))<(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m=1&&(e=o[0]),o.length>=2&&(i=o[1]),i=i||r.prototype._checkFileExtension(e,i)[1]||"png"){default:n="image/png";break;case"jpeg":case"jpg":n="image/jpeg"}t.toBlob(function(t){r.prototype.downloadFile(t,e,i)},n)},r.prototype.saveFrames=function(t,e,i,o,s){r._validateParameters("saveFrames",arguments);var a=i||3;a=r.prototype.constrain(a,0,15),a*=1e3;var h=o||15;h=r.prototype.constrain(h,0,22);var l=0,u=r.prototype._makeFrame,c=this._curElement.elt,p=setInterval(function(){u(t+l,e,c),l++},1e3/h);setTimeout(function(){if(clearInterval(p),s)s(n);else for(var t=0;t0&&t0&&this.loadPixels(),this.setModified(!0),this._pixelsDirty=!0},r.Image.prototype.copy=function(){var t,e,i,n,o,s,a,h,l;if(9===arguments.length)t=arguments[0],e=arguments[1],i=arguments[2],n=arguments[3],o=arguments[4],s=arguments[5],a=arguments[6],h=arguments[7],l=arguments[8];else{if(8!==arguments.length)throw new Error("Signature not supported");t=this,e=arguments[0],i=arguments[1],n=arguments[2],o=arguments[3],s=arguments[4],a=arguments[5],h=arguments[6],l=arguments[7]}r.Renderer2D._copyHelper(this,t,e,i,n,o,s,a,h,l),this._pixelsDirty=!0},r.Image.prototype.mask=function(t){void 0===t&&(t=this);var e=this.drawingContext.globalCompositeOperation,i=1;t instanceof r.Renderer&&(i=t._pInst._pixelDensity);var n=[t,0,0,i*t.width,i*t.height,0,0,this.width,this.height];this.drawingContext.globalCompositeOperation="destination-in",r.Image.prototype.copy.apply(this,n),this.drawingContext.globalCompositeOperation=e,this.setModified(!0)},r.Image.prototype.filter=function(t,e){n.apply(this.canvas,n[t.toLowerCase()],e),this.setModified(!0)},r.Image.prototype.blend=function(){r.prototype.blend.apply(this,arguments),this.setModified(!0)},r.Image.prototype.setModified=function(t){this._modified=t},r.Image.prototype.isModified=function(){return this._modified},r.Image.prototype.save=function(t,e){r.prototype.saveCanvas(this.canvas,t,e)},e.exports=r.Image},{"../core/main":24,"./filters":42}],46:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("./filters");t("../color/p5.Color"),r.prototype.pixels=[],r.prototype.blend=function(){r._validateParameters("blend",arguments),this._renderer?this._renderer.blend.apply(this._renderer,arguments):r.Renderer2D.prototype.blend.apply(this,arguments)},r.prototype.copy=function(){r._validateParameters("copy",arguments),r.Renderer2D.prototype.copy.apply(this._renderer,arguments)},r.prototype.filter=function(t,e){r._validateParameters("filter",arguments),void 0!==this.canvas?n.apply(this.canvas,n[t.toLowerCase()],e):n.apply(this.elt,n[t.toLowerCase()],e)},r.prototype.get=function(t,e,i,r){return this._renderer.get(t,e,i,r)},r.prototype.loadPixels=function(){r._validateParameters("loadPixels",arguments),this._renderer.loadPixels()},r.prototype.set=function(t,e,i){this._renderer.set(t,e,i)},r.prototype.updatePixels=function(t,e,i,n){r._validateParameters("updatePixels",arguments),0!==this.pixels.length&&this._renderer.updatePixels(t,e,i,n)},e.exports=r},{"../color/p5.Color":16,"../core/main":24,"./filters":42}],47:[function(t,e,i){"use strict";function r(t,e){var i={};if(void 0===(e=e||[]))for(var r=0;r/g,">").replace(/"/g,""").replace(/'/g,"'")}function o(t,e){e&&!0!==e&&"true"!==e||(e=""),t||(t="untitled");var i="";return t&&t.indexOf(".")>-1&&(i=t.split(".").pop()),e&&i!==e&&(t=t+"."+(i=e)),[t,i]}var s=t("../core/main");t("whatwg-fetch"),t("es6-promise").polyfill();var a=t("fetch-jsonp");t("../core/error_helpers"),s.prototype.loadJSON=function(){s._validateParameters("loadJSON",arguments);for(var t,e,i,r=arguments[0],n={},o="json",a=1;a0&&"function"==typeof arguments[u];u--)h++;var c=arguments.length-h,p=arguments[0];if(2===c&&"string"==typeof p&&"object"==typeof arguments[1])r=new Request(p,arguments[1]),e=arguments[2],i=arguments[3];else{for(var d,f="GET",m=1;m64e6&&s._friendlyFileLoadError(7,p),t){case"json":case"jsonp":return e.json();case"binary":return e.blob();case"arrayBuffer":return e.arrayBuffer();case"xml":return e.text().then(function(t){return function t(e){var i=new s.XML,r=e.childNodes;if(r&&r.length){for(var n=0;n"),o.print("");var p=' "),o.print(""),o.print(" "),"0"!==a[0]){o.print(" ");for(var d=0;d"+f),o.print(" ")}o.print(" ")}for(var m=0;m");for(var y=0;y"+g),o.print(" ")}o.print(" ")}o.print("
"),o.print(""),o.print("")}o.close(),o.clear()},s.prototype.writeFile=function(t,e,i){var r="application/octet-stream";s.prototype._isSafari()&&(r="text/plain");var n=new Blob(t,{type:r});s.prototype.downloadFile(n,e,i)},s.prototype.downloadFile=function(e,i,r){var n=o(i,r),a=n[0];if(e instanceof Blob)t("file-saver").saveAs(e,a);else{var h=document.createElement("a");if(h.href=e,h.download=a,h.onclick=function(t){(function(t){document.body.removeChild(t.target)})(t),t.stopPropagation()},h.style.display="none",document.body.appendChild(h),s.prototype._isSafari()){var l="Hello, Safari user! To download this file...\n";l+="1. Go to File --\x3e Save As.\n",l+='2. Choose "Page Source" as the Format.\n',l+='3. Name it with this extension: ."'+n[1]+'"',alert(l)}h.click()}},s.prototype._checkFileExtension=o,s.prototype._isSafari=function(){return Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0},e.exports=s},{"../core/error_helpers":20,"../core/main":24,"es6-promise":4,"fetch-jsonp":5,"file-saver":6,"whatwg-fetch":12}],48:[function(t,e,i){"use strict";var r=t("../core/main");r.Table=function(t){this.columns=[],this.rows=[]},r.Table.prototype.addRow=function(t){var e=t||new r.TableRow;if(void 0===e.arr||void 0===e.obj)throw new Error("invalid TableRow: "+e);return e.table=this,this.rows.push(e),e},r.Table.prototype.removeRow=function(t){this.rows[t].table=null;var e=this.rows.splice(t+1,this.rows.length);this.rows.pop(),this.rows=this.rows.concat(e)},r.Table.prototype.getRow=function(t){return this.rows[t]},r.Table.prototype.getRows=function(){return this.rows},r.Table.prototype.findRow=function(t,e){if("string"==typeof e){for(var i=0;i=0))throw new Error('This table has no column named "'+t+'"');i=e[t],r[i]=e}else r[n]=this.rows[n].obj;return r},r.Table.prototype.getArray=function(){for(var t=[],e=0;e=0))throw new Error('This table has no column named "'+t+'"');this.obj[t]=e,this.arr[i]=e}else{if(!(t0},r.XML.prototype.listChildren=function(){return this.children.map(function(t){return t.name})},r.XML.prototype.getChildren=function(t){return t?this.children.filter(function(e){return e.name===t}):this.children},r.XML.prototype.getChild=function(t){if("string"!=typeof t)return this.children[t];for(var e=0;eo&&(o=a),n[s]=a}0===o&&(o=1);for(var h=0,l=0,u=0;u=1&&(f++,v--),g>=1&&(m++,g--),_>=1&&(y++,_--)}return b},n.prototype.noiseDetail=function(t,e){t>0&&(s=t),e>0&&(a=e)},n.prototype.noiseSeed=function(t){var e=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();e.setSeed(t),r=new Array(o+1);for(var i=0;it*t&&this.div(Math.sqrt(e)).mult(t),this},r.Vector.prototype.setMag=function(t){return this.normalize().mult(t)},r.Vector.prototype.heading=function(){var t=Math.atan2(this.y,this.x);return this.p5?this.p5._fromRadians(t):t},r.Vector.prototype.rotate=function(t){var e=this.heading()+t;this.p5&&(e=this.p5._toRadians(e));var i=this.mag();return this.x=Math.cos(e)*i,this.y=Math.sin(e)*i,this},r.Vector.prototype.angleBetween=function(t){var e=this.dot(t)/(this.mag()*t.mag()),i=Math.acos(Math.min(1,Math.max(-1,e)));return this.p5?this.p5._fromRadians(i):i},r.Vector.prototype.lerp=function(t,e,i,n){return t instanceof r.Vector?this.lerp(t.x,t.y,t.z,e):(this.x+=(t-this.x)*n||0,this.y+=(e-this.y)*n||0,this.z+=(i-this.z)*n||0,this)},r.Vector.prototype.array=function(){return[this.x||0,this.y||0,this.z||0]},r.Vector.prototype.equals=function(t,e,i){var n,o,s;return t instanceof r.Vector?(n=t.x||0,o=t.y||0,s=t.z||0):t instanceof Array?(n=t[0]||0,o=t[1]||0,s=t[2]||0):(n=t||0,o=e||0,s=i||0),this.x===n&&this.y===o&&this.z===s},r.Vector.fromAngle=function(t,e){return void 0===e&&(e=1),new r.Vector(e*Math.cos(t),e*Math.sin(t),0)},r.Vector.fromAngles=function(t,e,i){void 0===i&&(i=1);var n=Math.cos(e),o=Math.sin(e),s=Math.cos(t),a=Math.sin(t);return new r.Vector(i*a*o,-i*s,i*a*n)},r.Vector.random2D=function(){return this.fromAngle(Math.random()*n.TWO_PI)},r.Vector.random3D=function(){var t=Math.random()*n.TWO_PI,e=2*Math.random()-1,i=Math.sqrt(1-e*e),o=i*Math.cos(t),s=i*Math.sin(t);return new r.Vector(o,s,e)},r.Vector.add=function(t,e,i){return i?i.set(t):i=t.copy(),i.add(e),i},r.Vector.sub=function(t,e,i){return i?i.set(t):i=t.copy(),i.sub(e),i},r.Vector.mult=function(t,e,i){return i?i.set(t):i=t.copy(),i.mult(e),i},r.Vector.div=function(t,e,i){return i?i.set(t):i=t.copy(),i.div(e),i},r.Vector.dot=function(t,e){return t.dot(e)},r.Vector.cross=function(t,e){return t.cross(e)},r.Vector.dist=function(t,e){return t.dist(e)},r.Vector.lerp=function(t,e,i,r){return r?r.set(t):r=t.copy(),r.lerp(e,i),r},r.Vector.mag=function(t){var e=t.x,i=t.y,r=t.z,n=e*e+i*i+r*r;return Math.sqrt(n)},e.exports=r.Vector},{"../core/constants":18,"../core/main":24}],55:[function(t,e,i){"use strict";var r=t("../core/main"),n=!1,o=!1,s=0,a=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();r.prototype.randomSeed=function(t){a.setSeed(t),n=!0,o=!1},r.prototype.random=function(t,e){var i;if(i=n?a.rand():Math.random(),void 0===t)return i;if(void 0===e)return t instanceof Array?t[Math.floor(i*t.length)]:i*t;if(t>e){var r=t;t=e,e=r}return i*(e-t)+t},r.prototype.randomGaussian=function(t,e){var i,r,n,a;if(o)i=s,o=!1;else{do{r=this.random(2)-1,n=this.random(2)-1,a=r*r+n*n}while(a>=1);a=Math.sqrt(-2*Math.log(a)/a),i=r*a,s=n*a,o=!0}var h=t||0;return i*(e||1)+h},e.exports=r},{"../core/main":24}],56:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._angleMode=n.RADIANS,r.prototype.acos=function(t){return this._fromRadians(Math.acos(t))},r.prototype.asin=function(t){return this._fromRadians(Math.asin(t))},r.prototype.atan=function(t){return this._fromRadians(Math.atan(t))},r.prototype.atan2=function(t,e){return this._fromRadians(Math.atan2(t,e))},r.prototype.cos=function(t){return Math.cos(this._toRadians(t))},r.prototype.sin=function(t){return Math.sin(this._toRadians(t))},r.prototype.tan=function(t){return Math.tan(this._toRadians(t))},r.prototype.degrees=function(t){return t*n.RAD_TO_DEG},r.prototype.radians=function(t){return t*n.DEG_TO_RAD},r.prototype.angleMode=function(t){t!==n.DEGREES&&t!==n.RADIANS||(this._angleMode=t)},r.prototype._toRadians=function(t){return this._angleMode===n.DEGREES?t*n.DEG_TO_RAD:t},r.prototype._toDegrees=function(t){return this._angleMode===n.RADIANS?t*n.RAD_TO_DEG:t},r.prototype._fromRadians=function(t){return this._angleMode===n.DEGREES?t*n.RAD_TO_DEG:t},e.exports=r},{"../core/constants":18,"../core/main":24}],57:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.textAlign=function(t,e){return r._validateParameters("textAlign",arguments),this._renderer.textAlign.apply(this._renderer,arguments)},r.prototype.textLeading=function(t){return r._validateParameters("textLeading",arguments),this._renderer.textLeading.apply(this._renderer,arguments)},r.prototype.textSize=function(t){return r._validateParameters("textSize",arguments),this._renderer.textSize.apply(this._renderer,arguments)},r.prototype.textStyle=function(t){return r._validateParameters("textStyle",arguments),this._renderer.textStyle.apply(this._renderer,arguments)},r.prototype.textWidth=function(t){return r._validateParameters("textWidth",arguments),0===t.length?0:this._renderer.textWidth.apply(this._renderer,arguments)},r.prototype.textAscent=function(){return r._validateParameters("textAscent",arguments),this._renderer.textAscent()},r.prototype.textDescent=function(){return r._validateParameters("textDescent",arguments),this._renderer.textDescent()},r.prototype._updateTextMetrics=function(){return this._renderer._updateTextMetrics()},e.exports=r},{"../core/main":24}],58:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("opentype.js");t("../core/error_helpers"),r.prototype.loadFont=function(t,e,i){r._validateParameters("loadFont",arguments);var n=new r.Font(this),s=this;return o.load(t,function(o,a){if(o)return void 0!==i?i(o):(r._friendlyFileLoadError(4,t),void console.error(o,t));n.font=a,void 0!==e&&e(n),s._decrementPreload();var h,l,u=t.split("\\").pop().split("/").pop(),c=u.lastIndexOf("."),p=c<1?null:u.substr(c+1);["ttf","otf","woff","woff2"].indexOf(p)>-1&&(h=u.substr(0,c),(l=document.createElement("style")).appendChild(document.createTextNode("\n@font-face {\nfont-family: "+h+";\nsrc: url("+t+");\n}\n")),document.head.appendChild(l))}),n},r.prototype.text=function(t,e,i,n,o){return r._validateParameters("text",arguments),this._renderer._doFill||this._renderer._doStroke?this._renderer.text.apply(this._renderer,arguments):this},r.prototype.textFont=function(t,e){if(r._validateParameters("textFont",arguments),arguments.length){if(!t)throw new Error("null font passed to textFont");return this._renderer._setProperty("_textFont",t),e&&(this._renderer._setProperty("_textSize",e),this._renderer._setProperty("_textLeading",e*n._DEFAULT_LEADMULT)),this._renderer._applyTextProperties()}return this._renderer._textFont},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"opentype.js":10}],59:[function(t,e,i){"use strict";function r(t,e){for(var i=function(t,e){if("object"!=typeof t)t=e;else for(var i in e)void 0===t[i]&&(t[i]=e[i]);return t}(e,{sampleFactor:.1,simplifyThreshold:0}),r=c(t,0,1),o=r/(r*i.sampleFactor),s=[],a=0;a3&&r>=0;--r)h(a(t,r-1),a(t,r),a(t,r+1),e)&&(t.splice(r%t.length,1),i++);return i}function o(t){for(var e,i=[],r=0;rg||v<_)&&(T+=180),{x:f,y:m,m:{x:y,y:v},n:{x:g,y:_},start:{x:b,y:S},end:{x:x,y:w},alpha:T}}function u(t,e,i,r,n,o,s,a,h){return null==h?v(t,e,i,r,n,o,s,a):l(t,e,i,r,n,o,s,a,function(t,e,i,r,n,o,s,a,h){if(!(h<0||v(t,e,i,r,n,o,s,a).01;)u/=2,l=v(t,e,i,r,n,o,s,a,c+=(le&&!i)return{x:(a=u(r,n,o[1],o[2],o[3],o[4],o[5],o[6],e-h)).x,y:a.y,alpha:a.alpha};h+=s,r=+o[5],n=+o[6]}o.shift()}return(a=i?h:l(r,n,o[0],o[1],o[2],o[3],o[4],o[5],1)).alpha&&(a={x:a.x,y:a.y,alpha:a.alpha}),a}function p(t){var e=[],i=0,r=0,n=0,o=0,s=0;if(!t)return e;"M"===t[0][0]&&(i=+t[0][1],r=+t[0][2],n=i,o=r,s++,e[0]=["M",i,r]);for(var a,h,l,u=3===t.length&&"M"===t[0][0]&&"R"===t[1][0].toUpperCase()&&"Z"===t[2][0].toUpperCase(),c=s,p=t.length;c1&&(w=Math.sqrt(w),r*=w,n*=w);var T=r*r,P=n*n,A=(s===a?-1:1)*Math.sqrt(Math.abs((T*P-T*x*x-P*S*S)/(T*x*x+P*S*S)));d=A*r*x/n+(e+h)/2,f=A*-n*S/r+(i+l)/2,c=Math.asin(((i-f)/n).toFixed(9)),p=Math.asin(((l-f)/n).toFixed(9)),c=ep&&(c-=2*y),!a&&p>c&&(p-=2*y)}var M=p-c;if(Math.abs(M)>v){var E=p,k=h,C=l;p=c+v*(a&&p>c?1:-1),h=d+r*Math.cos(p),l=f+n*Math.sin(p),_=t(h,l,r,n,o,0,a,k,C,[p,E,d,f])}M=p-c;var R=Math.cos(c),O=Math.sin(c),L=Math.cos(p),F=Math.sin(p),I=Math.tan(M/4),D=4/3*r*I,U=4/3*n*I,B=[e,i],N=[e+D*O,i-U*R],G=[h+D*F,l-U*L],q=[h,l];if(N[0]=2*B[0]-N[0],N[1]=2*B[1]-N[1],u)return[N,G,q].concat(_);for(var V=[],j=0,z=(_=[N,G,q].concat(_).join().split(",")).length;j7){t[e].shift();for(var o=t[e];o.length;)a[e]="A",n&&(h[e]="A"),t.splice(e++,0,["C"].concat(o.splice(0,6)));t.splice(e,1),i=Math.max(r.length,n&&n.length||0)}},c=function(t,e,o,s,a){t&&e&&"M"===t[a][0]&&"M"!==e[a][0]&&(e.splice(a,0,["M",s.x,s.y]),o.bx=0,o.by=0,o.x=t[a][1],o.y=t[a][2],i=Math.max(r.length,n&&n.length||0))},d="",f="";i=Math.max(r.length,n&&n.length||0);for(var v=0;vr;r+=2){var o=[{x:+t[r-2],y:+t[r-1]},{x:+t[r],y:+t[r+1]},{x:+t[r+2],y:+t[r+3]},{x:+t[r+4],y:+t[r+5]}];e?r?n-4===r?o[3]={x:+t[0],y:+t[1]}:n-2===r&&(o[2]={x:+t[0],y:+t[1]},o[3]={x:+t[2],y:+t[3]}):o[0]={x:+t[n-2],y:+t[n-1]}:n-4===r?o[3]=o[2]:r||(o[0]={x:+t[r],y:+t[r+1]}),i.push(["C",(-o[0].x+6*o[1].x+o[2].x)/6,(-o[0].y+6*o[1].y+o[2].y)/6,(o[1].x+6*o[2].x-o[3].x)/6,(o[1].y+6*o[2].y-o[3].y)/6,o[2].x,o[2].y])}return i}function m(t,e,i,r){return[t,e,i,r,i,r]}function y(t,e,i,r,n,o){var s=1/3,a=2/3;return[s*t+a*i,s*e+a*r,s*n+a*i,s*o+a*r,n,o]}function v(t,e,i,r,n,o,s,a,h){null==h&&(h=1);for(var l=(h=h>1?1:h<0?0:h)/2,u=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],c=0,p=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],d=0;d<12;d++){var f=l*u[d]+l,m=g(f,t,i,n,s),y=g(f,e,r,o,a),v=m*m+y*y;c+=p[d]*Math.sqrt(v)}return l*c}function g(t,e,i,r,n){return t*(t*(-3*e+9*i-9*r+3*n)+6*e-12*i+6*r)-3*e+3*i}function _(){for(var t="",e=arguments.length-1;e>=0;--e){var i=arguments[e];t+=i===Object(i)?JSON.stringify(i):i}return t}var b=t("../core/main"),S=t("../core/constants");b.Font=function(t){this.parent=t,this.cache={},this.font=void 0},b.Font.prototype.list=function(){throw new Error("not yet implemented")},b.Font.prototype.textBounds=function(t,e,i,r,n){e=void 0!==e?e:0,i=void 0!==i?i:0,r=r||this.parent._renderer._textSize;var o=n&&n.renderer&&n.renderer._pInst||this.parent,s=o._renderer,a=s._textAlign||S.LEFT,h=s._textBaseline||S.BASELINE,l=_("textBounds",t,e,i,r,a,h),u=this.cache[l];if(!u){var c,p,d,f,m,y=[],v=[],g=this._scale(r);this.font.forEachGlyph(t,e,i,r,n,function(t,e,i,r){var n=t.getMetrics();y.push(e+n.xMin*g),y.push(e+n.xMax*g),v.push(i+-n.yMin*g),v.push(i+-n.yMax*g)}),c=Math.min.apply(null,y),p=Math.min.apply(null,v),d=Math.max.apply(null,y),f=Math.max.apply(null,v),u={x:c,y:p,h:f-p,w:d-c,advance:c-e},m=this._handleAlignment(s,t,u.x,u.y,u.w+u.advance),u.x=m.x,u.y=m.y,this.cache[_("textBounds",t,e,i,r,a,h)]=u}return u},b.Font.prototype.textToPoints=function(t,e,i,n,s){function a(e){return u[e].name&&"space"===u[e].name||t.length===u.length&&" "===t[e]||u[e].index&&3===u[e].index}var h=0,l=[],u=this._getGlyphs(t);n=n||this.parent._renderer._textSize;for(var c=0;c2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&"number"==typeof r.decimals&&(n=r.decimals),t.toPathData(n)},b.Font.prototype._getSVG=function(t,e,i,r){var n=3;return"string"==typeof t&&arguments.length>2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&("number"==typeof r.decimals&&(n=r.decimals),"number"==typeof r.strokeWidth&&(t.strokeWidth=r.strokeWidth),void 0!==r.fill&&(t.fill=r.fill),void 0!==r.stroke&&(t.stroke=r.stroke)),t.toSVG(n)},b.Font.prototype._renderPath=function(t,e,i,r){var n,o=r&&r.renderer||this.parent._renderer,s=o.drawingContext;n="object"==typeof t&&t.commands?t.commands:this._getPath(t,e,i,r).commands,s.beginPath();for(var a=0;a1;)i=Math.random()*o|0,r=t[--o],t[o]=t[i],t[i]=r;return t},r.prototype.sort=function(t,e){var i=e?t.slice(0,Math.min(e,t.length)):t,r=e?t.slice(Math.min(e,t.length)):[];return(i="string"==typeof i[0]?i.sort():i.sort(function(t,e){return t-e})).concat(r)},r.prototype.splice=function(t,e,i){return Array.prototype.splice.apply(t,[i,0].concat(e)),t},r.prototype.subset=function(t,e,i){return void 0!==i?t.slice(e,e+i):t.slice(e,t.length)},e.exports=r},{"../core/main":24}],61:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.float=function(t){return t instanceof Array?t.map(parseFloat):parseFloat(t)},r.prototype.int=function(t,e){return e=e||10,"string"==typeof t?parseInt(t,e):"number"==typeof t?0|t:"boolean"==typeof t?t?1:0:t instanceof Array?t.map(function(t){return r.prototype.int(t,e)}):void 0},r.prototype.str=function(t){return t instanceof Array?t.map(r.prototype.str):String(t)},r.prototype.boolean=function(t){return"number"==typeof t?0!==t:"string"==typeof t?"true"===t.toLowerCase():"boolean"==typeof t?t:t instanceof Array?t.map(r.prototype.boolean):void 0},r.prototype.byte=function(t){var e=r.prototype.int(t,10);return"number"==typeof e?(e+128)%256-128:e instanceof Array?e.map(r.prototype.byte):void 0},r.prototype.char=function(t){return"number"!=typeof t||isNaN(t)?t instanceof Array?t.map(r.prototype.char):"string"==typeof t?r.prototype.char(parseInt(t,10)):void 0:String.fromCharCode(t)},r.prototype.unchar=function(t){return"string"==typeof t&&1===t.length?t.charCodeAt(0):t instanceof Array?t.map(r.prototype.unchar):void 0},r.prototype.hex=function(t,e){if(e=void 0===e||null===e?e=8:e,t instanceof Array)return t.map(function(t){return r.prototype.hex(t,e)});if("number"==typeof t){t<0&&(t=4294967295+t+1);for(var i=Number(t).toString(16).toUpperCase();i.length=e&&(i=i.substring(i.length-e,i.length)),i}},r.prototype.unhex=function(t){return t instanceof Array?t.map(r.prototype.unhex):parseInt("0x"+t,16)},e.exports=r},{"../core/main":24}],62:[function(t,e,i){"use strict";function r(t,e,i){var r=t<0,n=r?t.toString().substring(1):t.toString(),o=n.indexOf("."),s=-1!==o?n.substring(0,o):n,a=-1!==o?n.substring(o+1):"",h=r?"-":"";if(void 0!==i){var l="";(-1!==o||i-a.length>0)&&(l="."),a.length>i&&(a=a.substring(0,i));for(var u=0;ur.length)for(var o=e-(r+=-1===i?".":"").length+1,s=0;s0?"+"+t.toString():t.toString()}function s(t){return parseFloat(t)>0?" "+t.toString():t.toString()}var a=t("../core/main");t("../core/error_helpers"),a.prototype.join=function(t,e){return a._validateParameters("join",arguments),t.join(e)},a.prototype.match=function(t,e){return a._validateParameters("match",arguments),t.match(e)},a.prototype.matchAll=function(t,e){a._validateParameters("matchAll",arguments);for(var i=new RegExp(e,"g"),r=i.exec(t),n=[];null!==r;)n.push(r),r=i.exec(t);return n},a.prototype.nf=function(t,e,i){return a._validateParameters("nf",arguments),t instanceof Array?t.map(function(t){return r(t,e,i)}):"[object Arguments]"===Object.prototype.toString.call(t)?3===t.length?this.nf(t[0],t[1],t[2]):2===t.length?this.nf(t[0],t[1]):this.nf(t[0]):r(t,e,i)},a.prototype.nfc=function(t,e){return a._validateParameters("nfc",arguments),t instanceof Array?t.map(function(t){return n(t,e)}):n(t,e)},a.prototype.nfp=function(){a._validateParameters("nfp",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(o):o(t)},a.prototype.nfs=function(){a._validateParameters("nfs",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(s):s(t)},a.prototype.split=function(t,e){return a._validateParameters("split",arguments),t.split(e)},a.prototype.splitTokens=function(t,e){var i;if(a._validateParameters("splitTokens",arguments),void 0!==e){var r=e,n=/\]/g.exec(r),o=/\[/g.exec(r);o&&n?(r=r.slice(0,n.index)+r.slice(n.index+1),o=/\[/g.exec(r),r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("[\\["+r+"\\]]","g")):n?(r=r.slice(0,n.index)+r.slice(n.index+1),i=new RegExp("["+r+"\\]]","g")):o?(r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("["+r+"\\[]","g")):i=new RegExp("["+r+"]","g")}else i=/\s/g;return t.split(i).filter(function(t){return t})},a.prototype.trim=function(t){return a._validateParameters("trim",arguments),t instanceof Array?t.map(this.trim):t.trim()},e.exports=a},{"../core/error_helpers":20,"../core/main":24}],63:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.day=function(){return(new Date).getDate()},r.prototype.hour=function(){return(new Date).getHours()},r.prototype.minute=function(){return(new Date).getMinutes()},r.prototype.millis=function(){return window.performance.now()},r.prototype.month=function(){return(new Date).getMonth()+1},r.prototype.second=function(){return(new Date).getSeconds()},r.prototype.year=function(){return(new Date).getFullYear()},e.exports=r},{"../core/main":24}],64:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry");var n=t("../core/constants");r.prototype.plane=function(t,e,i,n){this._assert3d("plane"),r._validateParameters("plane",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=1),void 0===n&&(n=1);var o="plane|"+i+"|"+n;if(!this._renderer.geometryInHash(o)){var s=new r.Geometry(i,n,function(){for(var t,e,i,n=0;n<=this.detailY;n++){e=n/this.detailY;for(var o=0;o<=this.detailX;o++)t=o/this.detailX,i=new r.Vector(t-.5,e-.5,0),this.vertices.push(i),this.uvs.push(t,e)}});s.computeFaces().computeNormals(),i<=1&&n<=1?s._makeTriangleEdges()._edgesToVertices():console.log("Cannot draw stroke on plane objects with more than 1 detailX or 1 detailY"),this._renderer.createBuffers(o,s)}return this._renderer.drawBuffersScaled(o,t,e,1),this},r.prototype.box=function(t,e,i,n,o){this._assert3d("box"),r._validateParameters("box",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=e);var s=this._renderer.attributes&&this._renderer.attributes.perPixelLighting;void 0===n&&(n=s?1:4),void 0===o&&(o=s?1:4);var a="box|"+n+"|"+o;if(!this._renderer.geometryInHash(a)){var h=new r.Geometry(n,o,function(){var t=[[0,4,2,6],[1,3,5,7],[0,1,4,5],[2,6,3,7],[0,2,1,3],[4,5,6,7]];this.strokeIndices=[[0,1],[1,3],[3,2],[6,7],[8,9],[9,11],[14,15],[16,17],[17,19],[18,19],[20,21],[22,23]];for(var e=0;eo?(_=i,g=1,v=e):v=t+(e-t)*g,-2!==h&&h!==o+2||(v=0),_-=i/2,m[h]=0===v?1:n,l=0;lo?0:Math.sin(2*b*Math.PI)*Math.cos(y),h<0?-1:h>o?1:Math.sin(y),h<0||h>o?0:Math.cos(2*b*Math.PI)*Math.cos(y))),this.uvs.push(b,g)}}var S=0;if(s){for(u=0;u=n.TWO_PI?(e="ellipse")+"|"+p+"|":(e="arc")+"|"+l+"|"+u+"|"+c+"|"+p+"|",!this.geometryInHash(i)){var d=new r.Geometry(p,1,function(){if(this.strokeIndices=[],l.toFixed(10)!==u.toFixed(10)){c!==n.PIE&&void 0!==c||(this.vertices.push(new r.Vector(.5,.5,0)),this.uvs.push([.5,.5]));for(var t=0;t<=p;t++){var e=t/p,i=(u-l)*e+l,o=.5+Math.cos(i)/2,s=.5+Math.sin(i)/2;this.vertices.push(new r.Vector(o,s,0)),this.uvs.push([o,s]),t0&&h>0&&(this.strokeIndices=[[0,a],[a,(a+1)*(h+1)-1],[(a+1)*(h+1)-1,(a+1)*h],[(a+1)*h,0]])});u.computeFaces().computeNormals()._makeTriangleEdges()._edgesToVertices(),this.createBuffers(l,u)}var c=this.uMVMatrix.copy();try{this.uMVMatrix.translate([i,n,0]),this.uMVMatrix.scale(o,s,1),this.drawBuffers(l)}finally{this.uMVMatrix=c}return this},r.RendererGL.prototype.quad=function(t,e,i,n,o,s,a,h){var l="quad|"+t+"|"+e+"|"+i+"|"+n+"|"+o+"|"+s+"|"+a+"|"+h;if(!this.geometryInHash(l)){var u=new r.Geometry(2,2,function(){this.vertices.push(new r.Vector(t,e,0)),this.vertices.push(new r.Vector(i,n,0)),this.vertices.push(new r.Vector(o,s,0)),this.vertices.push(new r.Vector(a,h,0)),this.uvs.push(0,0,1,0,1,1,0,1),this.strokeIndices=[[0,1],[1,2],[2,3],[3,0]]});u.computeNormals()._makeTriangleEdges()._edgesToVertices(),u.faces=[[0,1,2],[2,3,0]],this.createBuffers(l,u)}return this.drawBuffers(l),this},r.RendererGL.prototype.bezier=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._bezierDetail||20;this.beginShape();for(var d=0;d<=p;d++){var f=Math.pow(1-d/p,3),m=d/p*3*Math.pow(1-d/p,2),y=3*Math.pow(d/p,2)*(1-d/p),v=Math.pow(d/p,3);this.vertex(t*f+r*m+s*y+l*v,e*f+n*m+a*y+u*v,i*f+o*m+h*y+c*v)}return this.endShape(),this},r.RendererGL.prototype.curve=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._curveDetail;this.beginShape();for(var d=0;d<=p;d++){var f=.5*Math.pow(d/p,3),m=.5*Math.pow(d/p,2),y=d/p*.5,v=f*(3*r-t-3*s+l)+m*(2*t-5*r+4*s-l)+y*(-t+s)+2*r*.5,g=f*(3*n-e-3*a+u)+m*(2*e-5*n+4*a-u)+y*(-e+a)+2*n*.5,_=f*(3*o-i-3*h+c)+m*(2*i-5*o+4*h-c)+y*(-i+h)+2*o*.5;this.vertex(v,g,_)}return this.endShape(),this},r.RendererGL.prototype.line=function(){return 6===arguments.length?(this.beginShape(),this.vertex(arguments[0],arguments[1],arguments[2]),this.vertex(arguments[3],arguments[4],arguments[5]),this.endShape()):4===arguments.length&&(this.beginShape(),this.vertex(arguments[0],arguments[1],0),this.vertex(arguments[2],arguments[3],0),this.endShape()),this},r.RendererGL.prototype.bezierVertex=function(){if(0===this.immediateMode._bezierVertex.length)throw Error("vertex() must be used once before calling bezierVertex()");var t,e,i,r,n,o=[],s=[],a=[],h=arguments.length;if(t=0,0===this._lookUpTableBezier.length||this._lutBezierDetail!==this._pInst._curveDetail){this._lookUpTableBezier=[],this._lutBezierDetail=this._pInst._curveDetail;for(var l=1/this._lutBezierDetail,u=0,c=1,p=0;u<1;){if(t=parseFloat(u.toFixed(6)),this._lookUpTableBezier[p]=this._bezierCoefficients(t),c.toFixed(6)===l.toFixed(6)){t=parseFloat(c.toFixed(6))+parseFloat(u.toFixed(6)),++p,this._lookUpTableBezier[p]=this._bezierCoefficients(t);break}u+=l,c-=l,++p}}var d=this._lookUpTableBezier.length;if(6===h){for(this.isBezier=!0,o=[this.immediateMode._bezierVertex[0],arguments[0],arguments[2],arguments[4]],s=[this.immediateMode._bezierVertex[1],arguments[1],arguments[3],arguments[5]],n=0;n0&&this.mouseY0){var i=this._renderer._curCamera;void 0===t&&(t=1),void 0===e&&(e=t),!0!==this.contextMenuDisabled&&(this.canvas.oncontextmenu=function(){return!1},this._setProperty("contextMenuDisabled",!0)),!0!==this.wheelDefaultDisabled&&(this.canvas.onwheel=function(){return!1},this._setProperty("wheelDefaultDisabled",!0));var n=this.height0?this._renderer._curCamera._orbit(0,0,.5*n):this._renderer._curCamera._orbit(0,0,-.5*n)),this.mouseIsPressed)if(this.mouseButton===this.LEFT){var o=-t*(this.mouseX-this.pmouseX)/n,s=e*(this.mouseY-this.pmouseY)/n;this._renderer._curCamera._orbit(o,s,0)}else if(this.mouseButton===this.RIGHT){var a=i._getLocalAxes(),h=Math.sqrt(a.x[0]*a.x[0]+a.x[2]*a.x[2]);0!==h&&(a.x[0]/=h,a.x[2]/=h);var l=Math.sqrt(a.y[0]*a.y[0]+a.y[2]*a.y[2]);0!==l&&(a.y[0]/=l,a.y[2]/=l);var u=-1*t*(this.mouseX-this.pmouseX),c=-1*e*(this.mouseY-this.pmouseY);i.setPosition(i.eyeX+u*a.x[0]+c*a.z[0],i.eyeY,i.eyeZ+u*a.x[2]+c*a.z[2])}return this}},r.prototype.debugMode=function(){this._assert3d("debugMode"),r._validateParameters("debugMode",arguments);for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1);arguments[0]===n.GRID?this.registerMethod("post",this._grid.call(this,arguments[1],arguments[2],arguments[3],arguments[4],arguments[5])):arguments[0]===n.AXES?this.registerMethod("post",this._axesIcon.call(this,arguments[1],arguments[2],arguments[3],arguments[4])):(this.registerMethod("post",this._grid.call(this,arguments[0],arguments[1],arguments[2],arguments[3],arguments[4])),this.registerMethod("post",this._axesIcon.call(this,arguments[5],arguments[6],arguments[7],arguments[8])))},r.prototype.noDebugMode=function(){this._assert3d("noDebugMode");for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1)},r.prototype._grid=function(t,e,i,r,n){void 0===t&&(t=this.width/2),void 0===e&&(e=Math.round(t/30)<4?4:Math.round(t/30)),void 0===i&&(i=0),void 0===r&&(r=0),void 0===n&&(n=0);var o=t/e,s=t/2;return function(){this.push(),this.stroke(255*this._renderer.curStrokeColor[0],255*this._renderer.curStrokeColor[1],255*this._renderer.curStrokeColor[2]),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]);for(var t=0;t<=e;t++)this.beginShape(this.LINES),this.vertex(-s+i,r,t*o-s+n),this.vertex(+s+i,r,t*o-s+n),this.endShape();for(var a=0;a<=e;a++)this.beginShape(this.LINES),this.vertex(a*o-s+i,r,-s+n),this.vertex(a*o-s+i,r,+s+n),this.endShape();this.pop()}},r.prototype._axesIcon=function(t,e,i,r){return void 0===t&&(t=this.width/20>40?this.width/20:40),void 0===e&&(e=-this.width/4),void 0===i&&(i=e),void 0===r&&(r=e),function(){this.push(),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]),this.strokeWeight(2),this.stroke(255,0,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e+t,i,r),this.endShape(),this.stroke(0,255,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i+t,r),this.endShape(),this.stroke(0,0,255),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i,r+t),this.endShape(),this.pop()}},e.exports=r},{"../core/constants":18,"../core/main":24}],66:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.ambientLight=function(t,e,i,n){this._assert3d("ambientLight"),r._validateParameters("ambientLight",arguments);var o=this.color.apply(this,arguments),s=this._renderer._useLightShader();return s.setUniform("uUseLighting",!0),s.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.ambientLightColors.push(o._array[0],o._array[1],o._array[2]),s.setUniform("uAmbientColor",this._renderer.ambientLightColors),s.setUniform("uAmbientLightCount",this._renderer.ambientLightColors.length/3),this},r.prototype.directionalLight=function(t,e,i,n,o,s){this._assert3d("directionalLight"),r._validateParameters("directionalLight",arguments);var a,h=this._renderer._useLightShader();a=t instanceof r.Color?t:this.color(t,e,i);var l,u,c,p=arguments[arguments.length-1];"number"==typeof p?(l=arguments[arguments.length-3],u=arguments[arguments.length-2],c=arguments[arguments.length-1]):(l=p.x,u=p.y,c=p.z),h.setUniform("uUseLighting",!0),h.setUniform("uMaterialColor",this._renderer.curFillColor);var d=Math.sqrt(l*l+u*u+c*c);return this._renderer.directionalLightDirections.push(l/d,u/d,c/d),h.setUniform("uLightingDirection",this._renderer.directionalLightDirections),this._renderer.directionalLightColors.push(a._array[0],a._array[1],a._array[2]),h.setUniform("uDirectionalColor",this._renderer.directionalLightColors),h.setUniform("uDirectionalLightCount",this._renderer.directionalLightColors.length/3),this},r.prototype.pointLight=function(t,e,i,n,o,s){var a;this._assert3d("pointLight"),r._validateParameters("pointLight",arguments),a=t instanceof r.Color?t:this.color(t,e,i);var h,l,u,c=arguments[arguments.length-1];"number"==typeof c?(h=arguments[arguments.length-3],l=arguments[arguments.length-2],u=arguments[arguments.length-1]):(h=c.x,l=c.y,u=c.z);var p=this._renderer._useLightShader();return p.setUniform("uUseLighting",!0),p.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.pointLightPositions.push(h,l,u),p.setUniform("uPointLightLocation",this._renderer.pointLightPositions),this._renderer.pointLightColors.push(a._array[0],a._array[1],a._array[2]),p.setUniform("uPointLightColor",this._renderer.pointLightColors),p.setUniform("uPointLightCount",this._renderer.pointLightColors.length/3),this},e.exports=r},{"../core/main":24}],67:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry"),r.prototype.loadModel=function(t){var e,i,n;r._validateParameters("loadModel",arguments),"boolean"==typeof arguments[1]?(e=arguments[1],i=arguments[2],n=arguments[3]):(e=!1,i=arguments[1],n=arguments[2]);var o=new r.Geometry;o.gid=t+"|"+e;var s=this;return this.loadStrings(t,function(t){(function(t,e){for(var i={v:[],vt:[],vn:[]},n={},o=0;o0)if("v"===s[0]||"vn"===s[0]){var a=new r.Vector(parseFloat(s[1]),parseFloat(s[2]),parseFloat(s[3]));i[s[0]].push(a)}else if("vt"===s[0]){var h=[parseFloat(s[1]),parseFloat(s[2])];i[s[0]].push(h)}else if("f"===s[0])for(var l=3;l0&&(this._renderer.geometryInHash(t.gid)||(t._makeTriangleEdges()._edgesToVertices(),this._renderer.createBuffers(t.gid,t)),this._renderer.drawBuffers(t.gid))},e.exports=r},{"../core/main":24,"./p5.Geometry":70}],68:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Texture"),r.prototype.loadShader=function(t,e){r._validateParameters("loadShader",arguments);var i=new r.Shader,n=this,o=!1,s=!1;return this.loadStrings(e,function(t){i._fragSrc=t.join("\n"),o=!0,s&&n._decrementPreload()}),this.loadStrings(t,function(t){i._vertSrc=t.join("\n"),s=!0,o&&n._decrementPreload()}),i},r.prototype.createShader=function(t,e){return this._assert3d("createShader"),r._validateParameters("createShader",arguments),new r.Shader(this._renderer,t,e)},r.prototype.shader=function(t){return this._assert3d("shader"),r._validateParameters("shader",arguments),void 0===t._renderer&&(t._renderer=this._renderer),t.isStrokeShader()?this._renderer.setStrokeShader(t):this._renderer.setFillShader(t),this},r.prototype.normalMaterial=function(){return this._assert3d("normalMaterial"),r._validateParameters("normalMaterial",arguments),this._renderer.drawMode=n.FILL,this._renderer.setFillShader(this._renderer._getNormalShader()),this._renderer.curFillColor=[1,1,1,1],this.noStroke(),this},r.prototype.texture=function(t){this._assert3d("texture"),r._validateParameters("texture",arguments),this._renderer.drawMode=n.TEXTURE;var e=this._renderer._useLightShader();return e.setUniform("uSpecular",!1),e.setUniform("isTexture",!0),e.setUniform("uSampler",t),this.noStroke(),this},r.prototype.ambientMaterial=function(t,e,i,n){this._assert3d("ambientMaterial"),r._validateParameters("ambientMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!1),s.setUniform("isTexture",!1),this},r.prototype.specularMaterial=function(t,e,i,n){this._assert3d("specularMaterial"),r._validateParameters("specularMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!0),s.setUniform("isTexture",!1),this},r.RendererGL.prototype._applyColorBlend=function(t){var e=this.GL,i=this.drawMode===n.TEXTURE;return i||t[t.length-1]<1?(e.depthMask(i),e.enable(e.BLEND),e.blendEquation(e.FUNC_ADD),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA)):(e.depthMask(!0),e.disable(e.BLEND)),t},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Texture":76}],69:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.camera=function(){return this._assert3d("camera"),r._validateParameters("camera",arguments),this._renderer._curCamera.camera.apply(this._renderer._curCamera,arguments),this},r.prototype.perspective=function(){return this._assert3d("perspective"),r._validateParameters("perspective",arguments),this._renderer._curCamera.perspective.apply(this._renderer._curCamera,arguments),this},r.prototype.ortho=function(){return this._assert3d("ortho"),r._validateParameters("ortho",arguments),this._renderer._curCamera.ortho.apply(this._renderer._curCamera,arguments),this},r.prototype.createCamera=function(){this._assert3d("createCamera");var t=new r.Camera(this._renderer);return t._computeCameraDefaultSettings(),t._setDefaultCamera(),this._renderer._curCamera=t,t},r.Camera=function(t){this._renderer=t,this.cameraType="default",this.cameraMatrix=new r.Matrix,this.projMatrix=new r.Matrix},r.Camera.prototype.perspective=function(t,e,i,n){void 0===t?(t=this.defaultCameraFOV,this.cameraFOV=t):this.cameraFOV=this._renderer._pInst._toRadians(t),void 0===e&&(e=this.defaultAspectRatio),void 0===i&&(i=this.defaultCameraNear),void 0===n&&(n=this.defaultCameraFar),i<=1e-4&&(i=.01,console.log("Avoid perspective near plane values close to or below 0. Setting value to 0.01.")),nMath.PI?h=Math.PI:h<=0&&(h=.001);var l=Math.sin(h)*s*Math.sin(a),u=Math.cos(h)*s,c=Math.sin(h)*s*Math.cos(a);this.camera(l+this.centerX,u+this.centerY,c+this.centerZ,this.centerX,this.centerY,this.centerZ,0,1,0)},r.Camera.prototype._isActive=function(){return this===this._renderer._curCamera},r.prototype.setCamera=function(t){this._renderer._curCamera=t,this._renderer.uPMatrix.set(t.projMatrix.mat4[0],t.projMatrix.mat4[1],t.projMatrix.mat4[2],t.projMatrix.mat4[3],t.projMatrix.mat4[4],t.projMatrix.mat4[5],t.projMatrix.mat4[6],t.projMatrix.mat4[7],t.projMatrix.mat4[8],t.projMatrix.mat4[9],t.projMatrix.mat4[10],t.projMatrix.mat4[11],t.projMatrix.mat4[12],t.projMatrix.mat4[13],t.projMatrix.mat4[14],t.projMatrix.mat4[15])},e.exports=r.Camera},{"../core/main":24}],70:[function(t,e,i){"use strict";var r=t("../core/main");r.Geometry=function(t,e,i){return this.vertices=[],this.lineVertices=[],this.lineNormals=[],this.vertexNormals=[],this.faces=[],this.uvs=[],this.edges=[],this.detailX=void 0!==t?t:1,this.detailY=void 0!==e?e:1,i instanceof Function&&i.call(this),this},r.Geometry.prototype.computeFaces=function(){this.faces.length=0;for(var t,e,i,r,n=this.detailX+1,o=0;o1&&(u=1),h.mult(Math.asin(u)/l))},r.Geometry.prototype.computeNormals=function(){var t,e=this.vertexNormals,i=this.vertices,n=this.faces;for(e.length=0,t=0;tthis.vertices.length-1-this.detailX;e--)t.add(this.vertexNormals[e]);for(t=r.Vector.div(t,this.detailX),e=this.vertices.length-1;e>this.vertices.length-1-this.detailX;e--)this.vertexNormals[e]=t;return this},r.Geometry.prototype._makeTriangleEdges=function(){if(this.edges.length=0,Array.isArray(this.strokeIndices))for(var t=0,e=this.strokeIndices.length;t0){for(var t=this.vertices[0].copy(),e=this.vertices[0].copy(),i=0;i1){if(this._useImmediateModeShader(),this._doStroke&&this.drawMode!==n.TEXTURE){for(var h=0;h1e3){var e=Object.keys(this.gHash)[0];delete this.gHash[e],n--}this.gHash[t]={}},r.RendererGL.prototype._freeBuffers=function(t){var e=this.gHash[t];if(e){delete this.gHash[t],n--;var i=this.GL;e.vertexBuffer&&i.deleteBuffer(e.vertexBuffer),e.normalBuffer&&i.deleteBuffer(e.normalBuffer),e.lineNormalBuffer&&i.deleteBuffer(e.lineNormalBuffer),e.uvBuffer&&i.deleteBuffer(e.uvBuffer),e.indexBuffer&&i.deleteBuffer(e.indexBuffer),e.lineVertexBuffer&&i.deleteBuffer(e.lineVertexBuffer)}},r.RendererGL.prototype.createBuffers=function(t,e){var i=this.GL;this._initBufferDefaults(t);var r=this.gHash[t];return r.numberOfItems=3*e.faces.length,r.lineVertexCount=e.lineVertices.length,this._useColorShader(),this.curStrokeShader.attributes.aPosition&&(r.lineVertexBuffer=i.createBuffer(),this._bindBuffer(r.lineVertexBuffer,i.ARRAY_BUFFER,this._flatten(e.lineVertices),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),this.curStrokeShader.attributes.aDirection&&(r.lineNormalBuffer=i.createBuffer(),this._bindBuffer(r.lineNormalBuffer,i.ARRAY_BUFFER,this._flatten(e.lineNormals),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aPosition&&(r.vertexBuffer=i.createBuffer(),this._bindBuffer(r.vertexBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertices),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),r.indexBuffer=i.createBuffer(),this._bindBuffer(r.indexBuffer,i.ELEMENT_ARRAY_BUFFER,this._flatten(e.faces),Uint16Array,i.STATIC_DRAW),this.curFillShader.attributes.aNormal&&(r.normalBuffer=i.createBuffer(),this._bindBuffer(r.normalBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertexNormals),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aTexCoord&&(r.uvBuffer=i.createBuffer(),this._bindBuffer(r.uvBuffer,i.ARRAY_BUFFER,this._flatten(e.uvs),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,i.FLOAT,!1,0,0)),r},r.RendererGL.prototype.drawBuffers=function(t){var e=this.GL;this._useColorShader();var i=this.gHash[t];return this._doStroke&&i.lineVertexCount>0&&(this.curStrokeShader.bindShader(),i.lineVertexBuffer&&(this._bindBuffer(i.lineVertexBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.lineNormalBuffer&&(this._bindBuffer(i.lineNormalBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curStrokeColor),this._drawArrays(e.TRIANGLES,t),this.curStrokeShader.unbindShader()),!1!==this._doFill&&(this.curFillShader.bindShader(),i.vertexBuffer&&(this._bindBuffer(i.vertexBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.indexBuffer&&this._bindBuffer(i.indexBuffer,e.ELEMENT_ARRAY_BUFFER),i.normalBuffer&&(this._bindBuffer(i.normalBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,e.FLOAT,!1,0,0)),i.uvBuffer&&(this._bindBuffer(i.uvBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curFillColor),this._drawElements(e.TRIANGLES,t),this.curFillShader.unbindShader()),this},r.RendererGL.prototype.drawBuffersScaled=function(t,e,i,r){var n=this.uMVMatrix.copy();try{this.uMVMatrix.scale(e,i,r),this.drawBuffers(t)}finally{this.uMVMatrix=n}},r.RendererGL.prototype._drawArrays=function(t,e){return this.GL.drawArrays(t,0,this.gHash[e].lineVertexCount),this._pInst._pixelsDirty=!0,this},r.RendererGL.prototype._drawElements=function(t,e){this.GL.drawElements(t,this.gHash[e].numberOfItems,this.GL.UNSIGNED_SHORT,0),this._pInst._pixelsDirty=!0},r.RendererGL.prototype._drawPoints=function(t,e){var i=this.GL;this._bindBuffer(e,i.ARRAY_BUFFER,this._vToNArray(t),Float32Array,i.STATIC_DRAW),this.curPointShader.enableAttrib(this.curPointShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0),i.drawArrays(i.Points,0,t.length)},e.exports=r.RendererGL},{"../core/main":24}],74:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("libtess");t("./p5.Shader"),t("./p5.Camera"),t("../core/p5.Renderer"),t("./p5.Matrix");var s={immediateVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uResolution;\nuniform float uPointSize;\n\nvarying vec4 vColor;\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n gl_PointSize = uPointSize;\n}\n",vertexColorVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n}\n",vertexColorFrag:"precision mediump float;\nvarying vec4 vColor;\nvoid main(void) {\n gl_FragColor = vColor;\n}",normalVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\n\nvarying vec3 vVertexNormal;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vVertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertTexCoord = aTexCoord;\n}\n",normalFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nvoid main(void) {\n gl_FragColor = vec4(vVertexNormal, 1.0);\n}",basicFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nuniform vec4 uMaterialColor;\nvoid main(void) {\n gl_FragColor = uMaterialColor;\n}",lightVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uViewMatrix;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nuniform vec3 uAmbientColor[8];\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nvarying vec3 vVertexNormal;\nvarying vec2 vVertTexCoord;\nvarying vec3 vLightWeighting;\n\nvoid main(void){\n\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\n vec3 vertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertexNormal = vertexNormal;\n vVertTexCoord = aTexCoord;\n\n vec4 mvPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n vec3 eyeDirection = normalize(-mvPosition.xyz);\n\n float shininess = 32.0;\n float specularFactor = 2.0;\n float diffuseFactor = 0.3;\n\n vec3 ambientLightFactor = vec3(0.0);\n\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n ambientLightFactor += uAmbientColor[i];\n }\n\n\n vec3 directionalLightFactor = vec3(0.0);\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n vec3 dir = uLightingDirection[j];\n float directionalLightWeighting = max(dot(vertexNormal, -dir), 0.0);\n directionalLightFactor += uDirectionalColor[j] * directionalLightWeighting;\n }\n\n\n vec3 pointLightFactor = vec3(0.0);\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n vec3 loc = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightDirection = normalize(loc - mvPosition.xyz);\n\n float directionalLightWeighting = max(dot(vertexNormal, lightDirection), 0.0);\n\n float specularLightWeighting = 0.0;\n if (uSpecular ){\n vec3 reflectionDirection = reflect(-lightDirection, vertexNormal);\n specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess);\n }\n\n pointLightFactor += uPointLightColor[k] * (specularFactor * specularLightWeighting\n + directionalLightWeighting * diffuseFactor);\n }\n\n vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightFactor;\n}\n",lightTextureFrag:"precision mediump float;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nvarying vec3 vLightWeighting;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n gl_FragColor = isTexture ? texture2D(uSampler, vVertTexCoord) : uMaterialColor;\n if (uUseLighting)\n gl_FragColor.rgb *= vLightWeighting;\n}",phongVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform vec3 uAmbientColor[8];\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvoid main(void){\n\n vec4 viewModelPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n\n // Pass varyings to fragment shader\n vViewPosition = viewModelPosition.xyz;\n gl_Position = uProjectionMatrix * viewModelPosition; \n\n vNormal = normalize(uNormalMatrix * normalize(aNormal));\n vTexCoord = aTexCoord;\n\n vAmbientColor = vec3(0.0);\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n vAmbientColor += uAmbientColor[i];\n }\n}\n",phongFrag:"precision mediump float;\n\n//uniform mat4 uModelViewMatrix;\nuniform mat4 uViewMatrix;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvec3 V;\nvec3 N;\n\nconst float shininess = 32.0;\nconst float specularFactor = 2.0;\nconst float diffuseFactor = 0.73;\n\nstruct LightResult {\n\tfloat specular;\n\tfloat diffuse;\n};\n\nfloat phongSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float shininess) {\n\n vec3 R = normalize(reflect(-lightDirection, surfaceNormal)); \n return pow(max(0.0, dot(R, viewDirection)), shininess);\n}\n\nfloat lambertDiffuse(\n vec3 lightDirection,\n vec3 surfaceNormal) {\n return max(0.0, dot(-lightDirection, surfaceNormal));\n}\n\nLightResult light(vec3 lightVector) {\n\n vec3 L = normalize(lightVector);\n\n //compute our diffuse & specular terms\n LightResult lr;\n if (uSpecular)\n lr.specular = phongSpecular(L, V, N, shininess);\n lr.diffuse = lambertDiffuse(L, N);\n return lr;\n}\n\nvoid main(void) {\n\n V = normalize(vViewPosition);\n N = vNormal;\n\n vec3 diffuse = vec3(0.0);\n float specular = 0.0;\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n\n LightResult result = light(uLightingDirection[j]);\n diffuse += result.diffuse * uDirectionalColor[j];\n specular += result.specular;\n }\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n\n vec3 lightPosition = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightVector = vViewPosition - lightPosition;\n\t\n //calculate attenuation\n float lightDistance = length(lightVector);\n float falloff = 500.0 / (lightDistance + 500.0);\n\n LightResult result = light(lightVector);\n diffuse += result.diffuse * falloff * uPointLightColor[k];\n specular += result.specular * falloff;\n }\n\n gl_FragColor = isTexture ? texture2D(uSampler, vTexCoord) : uMaterialColor;\n gl_FragColor.rgb = gl_FragColor.rgb * (diffuse * diffuseFactor + vAmbientColor) + specular * specularFactor;\n}",fontVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nuniform vec4 uGlyphRect;\nuniform float uGlyphOffset;\n\nvarying vec2 vTexCoord;\nvarying float w;\n\nvoid main() {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n\n // scale by the size of the glyph's rectangle\n positionVec4.xy *= uGlyphRect.zw - uGlyphRect.xy;\n\n // move to the corner of the glyph\n positionVec4.xy += uGlyphRect.xy;\n\n // move to the letter's line offset\n positionVec4.x += uGlyphOffset;\n \n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vTexCoord = aTexCoord;\n w = gl_Position.w;\n}\n",fontFrag:"#extension GL_OES_standard_derivatives : enable\nprecision mediump float;\n\n#if 0\n // simulate integer math using floats\n\t#define int float\n\t#define ivec2 vec2\n\t#define INT(x) float(x)\n\n\tint ifloor(float v) { return floor(v); }\n\tivec2 ifloor(vec2 v) { return floor(v); }\n\n#else\n // use native integer math\n\tprecision mediump int;\n\t#define INT(x) x\n\n\tint ifloor(float v) { return int(v); }\n\tint ifloor(int v) { return v; }\n\tivec2 ifloor(vec2 v) { return ivec2(v); }\n\n#endif\n\nuniform sampler2D uSamplerStrokes;\nuniform sampler2D uSamplerRowStrokes;\nuniform sampler2D uSamplerRows;\nuniform sampler2D uSamplerColStrokes;\nuniform sampler2D uSamplerCols;\n\nuniform ivec2 uStrokeImageSize;\nuniform ivec2 uCellsImageSize;\nuniform ivec2 uGridImageSize;\n\nuniform ivec2 uGridOffset;\nuniform ivec2 uGridSize;\nuniform vec4 uMaterialColor;\n\nvarying vec2 vTexCoord;\n\n// some helper functions\nint round(float v) { return ifloor(v + 0.5); }\nivec2 round(vec2 v) { return ifloor(v + 0.5); }\nfloat saturate(float v) { return clamp(v, 0.0, 1.0); }\nvec2 saturate(vec2 v) { return clamp(v, 0.0, 1.0); }\n\nint mul(float v1, int v2) {\n return ifloor(v1 * float(v2));\n}\n\nivec2 mul(vec2 v1, ivec2 v2) {\n return ifloor(v1 * vec2(v2) + 0.5);\n}\n\n// unpack a 16-bit integer from a float vec2\nint getInt16(vec2 v) {\n ivec2 iv = round(v * 255.0);\n return iv.x * INT(128) + iv.y;\n}\n\nvec2 pixelScale;\nvec2 coverage = vec2(0.0);\nvec2 weight = vec2(0.5);\nconst float minDistance = 1.0/8192.0;\nconst float hardness = 1.05; // amount of antialias\n\n// the maximum number of curves in a glyph\nconst int N = INT(250);\n\n// retrieves an indexed pixel from a sampler\nvec4 getTexel(sampler2D sampler, int pos, ivec2 size) {\n int width = size.x;\n int y = ifloor(pos / width);\n int x = pos - y * width; // pos % width\n\n return texture2D(sampler, (vec2(x, y) + 0.5) / vec2(size));\n}\n\nvoid calulateCrossings(vec2 p0, vec2 p1, vec2 p2, out vec2 C1, out vec2 C2) {\n\n // get the coefficients of the quadratic in t\n vec2 a = p0 - p1 * 2.0 + p2;\n vec2 b = p0 - p1;\n vec2 c = p0 - vTexCoord;\n\n // found out which values of 't' it crosses the axes\n vec2 surd = sqrt(max(vec2(0.0), b * b - a * c));\n vec2 t1 = ((b - surd) / a).yx;\n vec2 t2 = ((b + surd) / a).yx;\n\n // approximate straight lines to avoid rounding errors\n if (abs(a.y) < 0.001)\n t1.x = t2.x = c.y / (2.0 * b.y);\n\n if (abs(a.x) < 0.001)\n t1.y = t2.y = c.x / (2.0 * b.x);\n\n // plug into quadratic formula to find the corrdinates of the crossings\n C1 = ((a * t1 - b * 2.0) * t1 + c) * pixelScale;\n C2 = ((a * t2 - b * 2.0) * t2 + c) * pixelScale;\n}\n\nvoid coverageX(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n // determine on which side of the x-axis the points lie\n bool y0 = p0.y > vTexCoord.y;\n bool y1 = p1.y > vTexCoord.y;\n bool y2 = p2.y > vTexCoord.y;\n\n // could web be under the curve (after t1)?\n if (y1 ? !y2 : y0) {\n // add the coverage for t1\n coverage.x += saturate(C1.x + 0.5);\n // calculate the anti-aliasing for t1\n weight.x = min(weight.x, abs(C1.x));\n }\n\n // are we outside the curve (after t2)?\n if (y1 ? !y0 : y2) {\n // subtract the coverage for t2\n coverage.x -= saturate(C2.x + 0.5);\n // calculate the anti-aliasing for t2\n weight.x = min(weight.x, abs(C2.x));\n }\n}\n\n// this is essentially the same as coverageX, but with the axes swapped\nvoid coverageY(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n bool x0 = p0.x > vTexCoord.x;\n bool x1 = p1.x > vTexCoord.x;\n bool x2 = p2.x > vTexCoord.x;\n\n if (x1 ? !x2 : x0) {\n coverage.y -= saturate(C1.y + 0.5);\n weight.y = min(weight.y, abs(C1.y));\n }\n\n if (x1 ? !x0 : x2) {\n coverage.y += saturate(C2.y + 0.5);\n weight.y = min(weight.y, abs(C2.y));\n }\n}\n\nvoid main() {\n\n // calculate the pixel scale based on screen-coordinates\n pixelScale = hardness / fwidth(vTexCoord);\n\n // which grid cell is this pixel in?\n ivec2 gridCoord = ifloor(vTexCoord * vec2(uGridSize));\n\n // intersect curves in this row\n {\n // the index into the row info bitmap\n int rowIndex = gridCoord.y + uGridOffset.y;\n // fetch the info texel\n vec4 rowInfo = getTexel(uSamplerRows, rowIndex, uGridImageSize);\n // unpack the rowInfo\n int rowStrokeIndex = getInt16(rowInfo.xy);\n int rowStrokeCount = getInt16(rowInfo.zw);\n\n for (int iRowStroke = INT(0); iRowStroke < N; iRowStroke++) {\n if (iRowStroke >= rowStrokeCount)\n break;\n\n // each stroke is made up of 3 points: the start and control point\n // and the start of the next curve.\n // fetch the indices of this pair of strokes:\n vec4 strokeIndices = getTexel(uSamplerRowStrokes, rowStrokeIndex++, uCellsImageSize);\n\n // unpack the stroke index\n int strokePos = getInt16(strokeIndices.xy);\n\n // fetch the two strokes\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n\n // calculate the coverage\n coverageX(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n // intersect curves in this column\n {\n int colIndex = gridCoord.x + uGridOffset.x;\n vec4 colInfo = getTexel(uSamplerCols, colIndex, uGridImageSize);\n int colStrokeIndex = getInt16(colInfo.xy);\n int colStrokeCount = getInt16(colInfo.zw);\n \n for (int iColStroke = INT(0); iColStroke < N; iColStroke++) {\n if (iColStroke >= colStrokeCount)\n break;\n\n vec4 strokeIndices = getTexel(uSamplerColStrokes, colStrokeIndex++, uCellsImageSize);\n\n int strokePos = getInt16(strokeIndices.xy);\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n coverageY(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n weight = saturate(1.0 - weight * 2.0);\n float distance = max(weight.x + weight.y, minDistance); // manhattan approx.\n float antialias = abs(dot(coverage, weight) / distance);\n float cover = min(abs(coverage.x), abs(coverage.y));\n gl_FragColor = uMaterialColor;\n gl_FragColor.a *= saturate(max(antialias, cover));\n}",lineVert:"/*\n Part of the Processing project - http://processing.org\n Copyright (c) 2012-15 The Processing Foundation\n Copyright (c) 2004-12 Ben Fry and Casey Reas\n Copyright (c) 2001-04 Massachusetts Institute of Technology\n This library is free software; you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, version 2.1.\n This library is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General\n Public License along with this library; if not, write to the\n Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n Boston, MA 02111-1307 USA\n*/\n\n#define PROCESSING_LINE_SHADER\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uStrokeWeight;\n\nuniform vec4 uViewport;\n\n// using a scale <1 moves the lines towards the camera\n// in order to prevent popping effects due to half of\n// the line disappearing behind the geometry faces.\nvec3 scale = vec3(0.9995);\n\nattribute vec4 aPosition;\nattribute vec4 aDirection;\n \nvoid main() {\n vec4 posp = uModelViewMatrix * aPosition;\n vec4 posq = uModelViewMatrix * (aPosition + vec4(aDirection.xyz, 0));\n\n // Moving vertices slightly toward the camera\n // to avoid depth-fighting with the fill triangles.\n // Discussed here:\n // http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=252848 \n posp.xyz = posp.xyz * scale;\n posq.xyz = posq.xyz * scale;\n\n vec4 p = uProjectionMatrix * posp;\n vec4 q = uProjectionMatrix * posq;\n\n // formula to convert from clip space (range -1..1) to screen space (range 0..[width or height])\n // screen_p = (p.xy/p.w + <1,1>) * 0.5 * uViewport.zw\n\n // prevent division by W by transforming the tangent formula (div by 0 causes\n // the line to disappear, see https://github.com/processing/processing/issues/5183)\n // t = screen_q - screen_p\n //\n // tangent is normalized and we don't care which aDirection it points to (+-)\n // t = +- normalize( screen_q - screen_p )\n // t = +- normalize( (q.xy/q.w+<1,1>)*0.5*uViewport.zw - (p.xy/p.w+<1,1>)*0.5*uViewport.zw )\n //\n // extract common factor, <1,1> - <1,1> cancels out\n // t = +- normalize( (q.xy/q.w - p.xy/p.w) * 0.5 * uViewport.zw )\n //\n // convert to common divisor\n // t = +- normalize( ((q.xy*p.w - p.xy*q.w) / (p.w*q.w)) * 0.5 * uViewport.zw )\n //\n // remove the common scalar divisor/factor, not needed due to normalize and +-\n // (keep uViewport - can't remove because it has different components for x and y\n // and corrects for aspect ratio, see https://github.com/processing/processing/issues/5181)\n // t = +- normalize( (q.xy*p.w - p.xy*q.w) * uViewport.zw )\n\n vec2 tangent = normalize((q.xy*p.w - p.xy*q.w) * uViewport.zw);\n\n // flip tangent to normal (it's already normalized)\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n float thickness = aDirection.w * uStrokeWeight;\n vec2 offset = normal * thickness / 2.0;\n\n // Perspective ---\n // convert from world to clip by multiplying with projection scaling factor\n // to get the right thickness (see https://github.com/processing/processing/issues/5182)\n // invert Y, projections in Processing invert Y\n vec2 perspScale = (uProjectionMatrix * vec4(1, -1, 0, 0)).xy;\n\n // No Perspective ---\n // multiply by W (to cancel out division by W later in the pipeline) and\n // convert from screen to clip (derived from clip to screen above)\n vec2 noPerspScale = p.w / (0.5 * uViewport.zw);\n\n //gl_Position.xy = p.xy + offset.xy * mix(noPerspScale, perspScale, float(perspective > 0));\n gl_Position.xy = p.xy + offset.xy * perspScale;\n gl_Position.zw = p.zw;\n}\n",lineFrag:"precision mediump float;\nprecision mediump int;\n\nuniform vec4 uMaterialColor;\n\nvoid main() {\n gl_FragColor = uMaterialColor;\n}",pointVert:"attribute vec3 aPosition;\nuniform float uPointSize;\nvarying float vStrokeWeight;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvoid main() {\n\tvec4 positionVec4 = vec4(aPosition, 1.0);\n\tgl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\tgl_PointSize = uPointSize;\n\tvStrokeWeight = uPointSize;\n}",pointFrag:"precision mediump float;\nprecision mediump int;\nuniform vec4 uMaterialColor;\nvarying float vStrokeWeight;\n\nvoid main(){\n\tfloat mask = 0.0;\n\n\t// make a circular mask using the gl_PointCoord (goes from 0 - 1 on a point)\n // might be able to get a nicer edge on big strokeweights with smoothstep but slightly less performant\n\n\tmask = step(0.98, length(gl_PointCoord * 2.0 - 1.0));\n\n\t// if strokeWeight is 1 or less lets just draw a square\n\t// this prevents weird artifacting from carving circles when our points are really small\n\t// if strokeWeight is larger than 1, we just use it as is\n\n\tmask = mix(0.0, mask, clamp(floor(vStrokeWeight - 0.5),0.0,1.0));\n\n\t// throw away the borders of the mask\n // otherwise we get weird alpha blending issues\n\n\tif(mask > 0.98){\n discard;\n \t}\n\n \tgl_FragColor = vec4(uMaterialColor.rgb * (1.0 - mask), uMaterialColor.a) ;\n}"};r.RendererGL=function(t,e,i,n){return r.Renderer.call(this,t,e,i),this.attributes={},n=n||{},this.attributes.alpha=void 0===n.alpha||n.alpha,this.attributes.depth=void 0===n.depth||n.depth,this.attributes.stencil=void 0===n.stencil||n.stencil,this.attributes.antialias=void 0!==n.antialias&&n.antialias,this.attributes.premultipliedAlpha=void 0!==n.premultipliedAlpha&&n.premultipliedAlpha,this.attributes.preserveDrawingBuffer=void 0===n.preserveDrawingBuffer||n.preserveDrawingBuffer,this.attributes.perPixelLighting=void 0!==n.perPixelLighting&&n.perPixelLighting,this._initContext(),this.isP3D=!0,this.GL=this.drawingContext,this.ambientLightColors=[],this.directionalLightDirections=[],this.directionalLightColors=[],this.pointLightPositions=[],this.pointLightColors=[],this.uMVMatrix=new r.Matrix,this.uPMatrix=new r.Matrix,this.uNMatrix=new r.Matrix("mat3"),this._curCamera=new r.Camera(this),this._curCamera._computeCameraDefaultSettings(),this._curCamera._setDefaultCamera(),this.gHash={},this._defaultLightShader=void 0,this._defaultImmediateModeShader=void 0,this._defaultNormalShader=void 0,this._defaultColorShader=void 0,this._defaultPointShader=void 0,this.curFillShader=void 0,this.curStrokeShader=void 0,this.curPointShader=void 0,this._useColorShader(),this.setStrokeShader(this._getLineShader()),this._usePointShader(),this._pointVertexBuffer=this.GL.createBuffer(),this.isImmediateDrawing=!1,this.immediateMode={},this.fill(255,255,255,255),this.pointSize=5,this.strokeWeight(1),this.stroke(0,0,0),this.textures=[],this._curveTightness=6,this._lookUpTableBezier=[],this._lookUpTableQuadratic=[],this._lutBezierDetail=0,this._lutQuadraticDetail=0,this._tessy=this._initTessy(),this.fontInfos={},this},r.RendererGL.prototype=Object.create(r.Renderer.prototype),r.RendererGL.prototype._initContext=function(){try{if(this.drawingContext=this.canvas.getContext("webgl",this.attributes)||this.canvas.getContext("experimental-webgl",this.attributes),null===this.drawingContext)throw new Error("Error creating webgl context");console.log("p5.RendererGL: enabled webgl context");var t=this.drawingContext;t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),this._viewport=this.drawingContext.getParameter(this.drawingContext.VIEWPORT)}catch(t){throw t}},r.RendererGL.prototype._resetContext=function(t,e,i){var n=this.width,o=this.height,s=this.canvas.id,a=this.canvas;a&&a.parentNode.removeChild(a),(a=document.createElement("canvas")).id=s,this._pInst._userNode?this._pInst._userNode.appendChild(a):document.body.appendChild(a),this._pInst.canvas=a;var h=new r.RendererGL(this._pInst.canvas,this._pInst,!0,t);this._pInst._setProperty("_renderer",h),h.resize(n,o),h._applyDefaults(),this._pInst._elements.push(h),"function"==typeof i&&setTimeout(function(){i.apply(window._renderer,e)},0)},r.prototype.setAttributes=function(t,e){var i;this._assert3d("setAttributes"),void 0!==e?(i={})[t]=e:t instanceof Object&&(i=t),this.push(),this._renderer._resetContext(i),this.pop()},r.RendererGL.prototype._update=function(){this.uMVMatrix.set(this._curCamera.cameraMatrix.mat4[0],this._curCamera.cameraMatrix.mat4[1],this._curCamera.cameraMatrix.mat4[2],this._curCamera.cameraMatrix.mat4[3],this._curCamera.cameraMatrix.mat4[4],this._curCamera.cameraMatrix.mat4[5],this._curCamera.cameraMatrix.mat4[6],this._curCamera.cameraMatrix.mat4[7],this._curCamera.cameraMatrix.mat4[8],this._curCamera.cameraMatrix.mat4[9],this._curCamera.cameraMatrix.mat4[10],this._curCamera.cameraMatrix.mat4[11],this._curCamera.cameraMatrix.mat4[12],this._curCamera.cameraMatrix.mat4[13],this._curCamera.cameraMatrix.mat4[14],this._curCamera.cameraMatrix.mat4[15]),this.ambientLightColors.length=0,this.directionalLightDirections.length=0,this.directionalLightColors.length=0,this.pointLightPositions.length=0,this.pointLightColors.length=0},r.RendererGL.prototype.background=function(){var t=this._pInst.color.apply(this._pInst,arguments),e=t.levels[0]/255,i=t.levels[1]/255,r=t.levels[2]/255,n=t.levels[3]/255;this.GL.clearColor(e,i,r,n),this.GL.depthMask(!0),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.fill=function(t,e,i,o){var s=r.prototype.color.apply(this._pInst,arguments);this.curFillColor=s._array,this.isImmediateDrawing?this.setFillShader(this._getImmediateModeShader()):this.setFillShader(this._getColorShader()),this.drawMode=n.FILL,this.curFillShader.setUniform("uMaterialColor",this.curFillColor)},r.RendererGL.prototype.stroke=function(t,e,i,n){arguments[3]=255;var o=r.prototype.color.apply(this._pInst,arguments);this.curStrokeColor=o._array,this.curStrokeShader.setUniform("uMaterialColor",this.curStrokeColor),this.curPointShader.setUniform("uMaterialColor",o._array)},r.RendererGL.prototype.strokeWeight=function(t){this.curStrokeWeight!==t&&(this.pointSize=t,this.curStrokeWeight=t,this.curStrokeShader.setUniform("uStrokeWeight",t),this.curPointShader.setUniform("uPointSize",t))},r.RendererGL.prototype.get=function(t,e,i,n){return r.Renderer2D.prototype.get.apply(this,[t,e,i,n])},r.RendererGL.prototype.loadPixels=function(){if(!0===this.attributes.preserveDrawingBuffer){var t=this._pInst._pixelDensity,e=this.width,i=this.height;e*=t,i*=t,void 0===this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4)),this.GL.readPixels(0,0,e,i,this.GL.RGBA,this.GL.UNSIGNED_BYTE,this.pixels),this._pInst._setProperty("pixels",this.pixels)}else console.log("loadPixels only works in WebGL when preserveDrawingBuffer is true.")},r.RendererGL.prototype.geometryInHash=function(t){return void 0!==this.gHash[t]},r.RendererGL.prototype.resize=function(t,e){r.Renderer.prototype.resize.call(this,t,e),this.GL.viewport(0,0,this.GL.drawingBufferWidth,this.GL.drawingBufferHeight),this._viewport=this.GL.getParameter(this.GL.VIEWPORT),this._curCamera._resize(),void 0!==this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4))},r.RendererGL.prototype.clear=function(){var t=arguments[0]||0,e=arguments[1]||0,i=arguments[2]||0,r=arguments[3]||0;this.GL.clearColor(t,e,i,r),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.translate=function(t,e,i){return t instanceof r.Vector&&(i=t.z,e=t.y,t=t.x),this.uMVMatrix.translate([t,e,i]),this},r.RendererGL.prototype.scale=function(t,e,i){return this.uMVMatrix.scale(t,e,i),this},r.RendererGL.prototype.rotate=function(t,e){return void 0===e?this.rotateZ(t):(arguments[0]=this._pInst._fromRadians(t),r.Matrix.prototype.rotate.apply(this.uMVMatrix,arguments),this)},r.RendererGL.prototype.rotateX=function(t){return this.rotate(t,1,0,0),this},r.RendererGL.prototype.rotateY=function(t){return this.rotate(t,0,1,0),this},r.RendererGL.prototype.rotateZ=function(t){return this.rotate(t,0,0,1),this},r.RendererGL.prototype.push=function(){var t=r.Renderer.prototype.push.apply(this),e=t.properties;return e.uMVMatrix=this.uMVMatrix.copy(),e.uPMatrix=this.uPMatrix.copy(),e._curCamera=this._curCamera,this._curCamera=this._curCamera.copy(),t},r.RendererGL.prototype.resetMatrix=function(){return this.uMVMatrix=r.Matrix.identity(this._pInst),this},r.RendererGL.prototype.setFillShader=function(t){return this.curFillShader!==t&&(this.curFillShader=t,this.curFillShader.init()),this.curFillShader},r.RendererGL.prototype.setPointShader=function(t){return this.curPointShader!==t&&(this.curPointShader=t,this.curPointShader.init()),this.curPointShader},r.RendererGL.prototype.setStrokeShader=function(t){return this.curStrokeShader!==t&&(this.curStrokeShader=t,this.curStrokeShader.init()),this.curStrokeShader},r.RendererGL.prototype._useLightShader=function(){return this.curFillShader&&this.curFillShader.isLightShader()||this.setFillShader(this._getLightShader()),this.curFillShader},r.RendererGL.prototype._useColorShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultImmediateModeShader||this.setFillShader(this._getColorShader()),this.curFillShader},r.RendererGL.prototype._usePointShader=function(){return this.curPointShader||this.setPointShader(this._getPointShader()),this.curPointShader},r.RendererGL.prototype._useImmediateModeShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultColorShader||this.setFillShader(this._getImmediateModeShader()),this.curFillShader},r.RendererGL.prototype._getLightShader=function(){return this._defaultLightShader||(this.attributes.perPixelLighting?this._defaultLightShader=new r.Shader(this,s.phongVert,s.phongFrag):this._defaultLightShader=new r.Shader(this,s.lightVert,s.lightTextureFrag)),this._defaultLightShader},r.RendererGL.prototype._getImmediateModeShader=function(){return this._defaultImmediateModeShader||(this._defaultImmediateModeShader=new r.Shader(this,s.immediateVert,s.vertexColorFrag)),this._defaultImmediateModeShader},r.RendererGL.prototype._getNormalShader=function(){return this._defaultNormalShader||(this._defaultNormalShader=new r.Shader(this,s.normalVert,s.normalFrag)),this._defaultNormalShader},r.RendererGL.prototype._getColorShader=function(){return this._defaultColorShader||(this._defaultColorShader=new r.Shader(this,s.normalVert,s.basicFrag)),this._defaultColorShader},r.RendererGL.prototype._getPointShader=function(){return this._defaultPointShader||(this._defaultPointShader=new r.Shader(this,s.pointVert,s.pointFrag)),this._defaultPointShader},r.RendererGL.prototype._getLineShader=function(){return this._defaultLineShader||(this._defaultLineShader=new r.Shader(this,s.lineVert,s.lineFrag)),this._defaultLineShader},r.RendererGL.prototype._getFontShader=function(){return this._defaultFontShader||(this.GL.getExtension("OES_standard_derivatives"),this._defaultFontShader=new r.Shader(this,s.fontVert,s.fontFrag)),this._defaultFontShader},r.RendererGL.prototype._getEmptyTexture=function(){if(!this._emptyTexture){var t=new r.Image(1,1);t.set(0,0,255),this._emptyTexture=new r.Texture(this,t)}return this._emptyTexture},r.RendererGL.prototype.getTexture=function(t){for(var e=this.textures,i=0;i2e4){var e,i=Object.prototype.toString,r=[],n=t.slice();e=n.pop();do{"[object Array]"===i.call(e)?n.push.apply(n,e):r.push(e)}while(n.length&&void 0!==(e=n.pop()));return r.reverse(),r}return[].concat.apply([],t)},r.RendererGL.prototype._vToNArray=function(t){return this._flatten(t.map(function(t){return[t.x,t.y,t.z]}))},r.prototype._assert3d=function(t){if(!this._renderer.isP3D)throw new Error(t+"() is only supported in WEBGL mode. If you'd like to use 3D graphics and WebGL, see https://p5js.org/examples/form-3d-primitives.html for more information.")},r.RendererGL.prototype._initTessy=function(){var t=new o.GluTesselator;return t.gluTessCallback(o.gluEnum.GLU_TESS_VERTEX_DATA,function(t,e){e[e.length]=t[0],e[e.length]=t[1],e[e.length]=t[2]}),t.gluTessCallback(o.gluEnum.GLU_TESS_BEGIN,function(t){t!==o.primitiveType.GL_TRIANGLES&&console.log("expected TRIANGLES but got type: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_ERROR,function(t){console.log("error callback"),console.log("error number: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_COMBINE,function(t,e,i){return[t[0],t[1],t[2]]}),t.gluTessCallback(o.gluEnum.GLU_TESS_EDGE_FLAG,function(t){}),t},r.RendererGL.prototype._triangulate=function(t){this._tessy.gluTessNormal(0,0,1);var e=[];this._tessy.gluTessBeginPolygon(e);for(var i=0;i1&&(s=s.substring(0,s.indexOf("[0]"))),o.name=s,o.type=n.type,o.type===t.SAMPLER_2D&&(o.samplerIndex=i,i++,this.samplers.push(o)),this.uniforms[s]=o}this._loadedUniforms=!0}},r.Shader.prototype.compile=function(){},r.Shader.prototype.bindShader=function(){this.init(),this._bound||(this.useProgram(),this._bound=!0,this.bindTextures(),this._setMatrixUniforms(),this===this._renderer.curStrokeShader&&this._setViewportUniform())},r.Shader.prototype.unbindShader=function(){return this._bound&&(this.unbindTextures(),this._bound=!1),this},r.Shader.prototype.bindTextures=function(){for(var t=this._renderer.GL,e=0;e1?e.length&&n.uniform1iv(r,e):n.uniform1i(r,e);break;case n.FLOAT:i.size>1?e.length&&n.uniform1fv(r,e):n.uniform1f(r,e);break;case n.FLOAT_MAT3:n.uniformMatrix3fv(r,!1,e);break;case n.FLOAT_MAT4:n.uniformMatrix4fv(r,!1,e);break;case n.FLOAT_VEC2:i.size>1?e.length&&n.uniform2fv(r,e):n.uniform2f(r,e[0],e[1]);break;case n.FLOAT_VEC3:i.size>1?e.length&&n.uniform3fv(r,e):n.uniform3f(r,e[0],e[1],e[2]);break;case n.FLOAT_VEC4:i.size>1?e.length&&n.uniform4fv(r,e):n.uniform4f(r,e[0],e[1],e[2],e[3]);break;case n.INT_VEC2:i.size>1?e.length&&n.uniform2iv(r,e):n.uniform2i(r,e[0],e[1]);break;case n.INT_VEC3:i.size>1?e.length&&n.uniform3iv(r,e):n.uniform3i(r,e[0],e[1],e[2]);break;case n.INT_VEC4:i.size>1?e.length&&n.uniform4iv(r,e):n.uniform4i(r,e[0],e[1],e[2],e[3]);break;case n.SAMPLER_2D:n.activeTexture(n.TEXTURE0+i.samplerIndex),i.texture=this._renderer.getTexture(e),n.uniform1i(i.location,i.samplerIndex)}return this}},r.Shader.prototype.isLightShader=function(){return void 0!==this.uniforms.uUseLighting||void 0!==this.uniforms.uAmbientLightCount||void 0!==this.uniforms.uDirectionalLightCount||void 0!==this.uniforms.uPointLightCount||void 0!==this.uniforms.uAmbientColor||void 0!==this.uniforms.uDirectionalColor||void 0!==this.uniforms.uPointLightLocation||void 0!==this.uniforms.uPointLightColor||void 0!==this.uniforms.uLightingDirection||void 0!==this.uniforms.uSpecular},r.Shader.prototype.isTextureShader=function(){return this.samplerIndex>0},r.Shader.prototype.isColorShader=function(){return void 0!==this.attributes.aVertexColor||void 0!==this.uniforms.uMaterialColor},r.Shader.prototype.isTexLightShader=function(){return this.isLightShader()&&this.isTextureShader()},r.Shader.prototype.isStrokeShader=function(){return void 0!==this.uniforms.uStrokeWeight},r.Shader.prototype.enableAttrib=function(t,e,i,r,n,o){var s=this._renderer.GL;return-1!==t&&(s.enableVertexAttribArray(t),s.vertexAttribPointer(t,e,i,r,n,o)),this},e.exports=r.Shader},{"../core/main":24}],76:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.Texture=function(t,e){this._renderer=t;var i=this._renderer.GL;this.src=e,this.glTex=void 0,this.glTarget=i.TEXTURE_2D,this.glFormat=i.RGBA,this.mipmaps=!1,this.glMinFilter=i.LINEAR,this.glMagFilter=i.LINEAR,this.glWrapS=i.CLAMP_TO_EDGE,this.glWrapT=i.CLAMP_TO_EDGE,this.isSrcMediaElement=void 0!==r.MediaElement&&e instanceof r.MediaElement,this._videoPrevUpdateTime=0,this.isSrcHTMLElement=void 0!==r.Element&&e instanceof r.Element&&!(e instanceof r.Graphics),this.isSrcP5Image=e instanceof r.Image,this.isSrcP5Graphics=e instanceof r.Graphics,this.isImageData="undefined"!=typeof ImageData&&e instanceof ImageData;var n=this._getTextureDataFromSource();return this.width=n.width,this.height=n.height,this.init(n),this},r.Texture.prototype._getTextureDataFromSource=function(){var t;return this.isSrcP5Image?t=this.src.canvas:this.isSrcMediaElement||this.isSrcP5Graphics||this.isSrcHTMLElement?t=this.src.elt:this.isImageData&&(t=this.src),t},r.Texture.prototype.init=function(t){var e=this._renderer.GL;if(this.glTex=e.createTexture(),this.bindTexture(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,this.glMagFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,this.glMinFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,this.glWrapS),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,this.glWrapT),0===this.width||0===this.height||this.isSrcMediaElement&&!this.src.loadedmetadata){var i=new Uint8Array([1,1,1,1]);e.texImage2D(this.glTarget,0,e.RGBA,1,1,0,this.glFormat,e.UNSIGNED_BYTE,i)}else e.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,e.UNSIGNED_BYTE,t)},r.Texture.prototype.update=function(){var t=this.src;if(0===t.width||0===t.height)return!1;var e=this._getTextureDataFromSource(),i=!1,r=this._renderer.GL;return e.width!==this.width||e.height!==this.height?(i=!0,this.width=e.width,this.height=e.height,this.isSrcP5Image?t.setModified(!1):(this.isSrcMediaElement||this.isSrcHTMLElement)&&t.setModified(!0)):this.isSrcP5Image?t.isModified()&&(i=!0,t.setModified(!1)):this.isSrcMediaElement?t.isModified()?(i=!0,t.setModified(!1)):t.loadedmetadata&&this._videoPrevUpdateTime!==t.time()&&(this._videoPrevUpdateTime=t.time(),i=!0):this.isImageData?t._dirty&&(t._dirty=!1,i=!0):i=!0,i&&(this.bindTexture(),r.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,r.UNSIGNED_BYTE,e)),i},r.Texture.prototype.bindTexture=function(){return this._renderer.GL.bindTexture(this.glTarget,this.glTex),this},r.Texture.prototype.unbindTexture=function(){this._renderer.GL.bindTexture(this.glTarget,null)},r.Texture.prototype.setInterpolation=function(t,e){var i=this._renderer.GL;t===n.NEAREST?this.glMinFilter=i.NEAREST:this.glMinFilter=i.LINEAR,e===n.NEAREST?this.glMagFilter=i.NEAREST:this.glMagFilter=i.LINEAR,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,this.glMinFilter),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,this.glMagFilter),this.unbindTexture()},r.Texture.prototype.setWrapMode=function(t,e){var i=this._renderer.GL,r=function(t){return 0==(t&t-1)},o=r(this.width),s=r(this.width);t===n.REPEAT?o&&s?this.glWrapS=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):t===n.MIRROR?o&&s?this.glWrapS=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):this.glWrapS=i.CLAMP_TO_EDGE,e===n.REPEAT?o&&s?this.glWrapT=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):e===n.MIRROR?o&&s?this.glWrapT=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):this.glWrapT=i.CLAMP_TO_EDGE,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,this.glWrapS),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,this.glWrapT),this.unbindTexture()},e.exports=r.Texture},{"../core/constants":18,"../core/main":24}],77:[function(t,e,i){"use strict";function r(t,e){this.width=t,this.height=e,this.infos=[],this.findImage=function(t){var e=this.width*this.height;if(t>e)throw new Error("font is too complex to render in 3D");for(var i,r,n=this.infos.length-1;n>=0;--n){var o=this.infos[n];if(o.index+t0;){var n=t[r];e>n&&(e=n),ii?i:t}(255*t,0,255)}function r(t,e,i,r,n,s,a,h){for(var u=new function t(e,i,r,n){this.p0=e,this.c0=i,this.c1=r,this.p1=n,this.toQuadratic=function(){return{x:this.p0.x,y:this.p0.y,x1:this.p1.x,y1:this.p1.y,cx:(3*(this.c0.x+this.c1.x)-(this.p0.x+this.p1.x))/4,cy:(3*(this.c0.y+this.c1.y)-(this.p0.y+this.p1.y))/4}},this.quadError=function(){return o.Vector.sub(o.Vector.sub(this.p1,this.p0),o.Vector.mult(o.Vector.sub(this.c1,this.c0),3)).mag()/2},this.split=function(e){var i=o.Vector.lerp(this.p0,this.c0,e),r=o.Vector.lerp(this.c0,this.c1,e),n=o.Vector.lerp(i,r,e);this.c1=o.Vector.lerp(this.c1,this.p1,e),this.c0=o.Vector.lerp(r,this.c1,e);var s=o.Vector.lerp(n,this.c0,e),a=new t(this.p0,i,n,s);return this.p0=s,a},this.splitInflections=function(){var t=o.Vector.sub(this.c0,this.p0),e=o.Vector.sub(o.Vector.sub(this.c1,this.c0),t),i=o.Vector.sub(o.Vector.sub(o.Vector.sub(this.p1,this.c1),t),o.Vector.mult(e,2)),r=[],n=e.x*i.y-e.y*i.x;if(0!==n){var s=t.x*i.y-t.y*i.x,a=t.x*e.y-t.y*e.x,h=s*s-4*n*a;if(h>=0){n<0&&(n=-n,s=-s,a=-a);var l=Math.sqrt(h),u=(-s-l)/(2*n),c=(-s+l)/(2*n);u>0&&u<1&&(r.push(this.split(u)),c=1-(1-c)/(1-u)),c>0&&c<1&&r.push(this.split(c))}}return r.push(this),r}}(new o.Vector(t,e),new o.Vector(i,r),new o.Vector(n,s),new o.Vector(a,h)).splitInflections(),c=[],p=30/l,d=0;d=.125);){var v=Math.pow(f,1/3),g=m.split(v),_=m.split(1-v/(1-v));c.push(g),y.push(m),m=_}f<1&&c.push(m.split(.5)),c.push(m),Array.prototype.push.apply(c,y.reverse())}return c}function s(t,i,r,n){e([t,r],[i,n],{x:t,y:i,cx:(t+r)/2,cy:(i+n)/2})}function u(t,e,i,r){return Math.abs(i-t)<1e-5&&Math.abs(r-e)<1e-5}function c(t,e,i){for(var r=t.length,o=e.findImage(r),s=o.index,a=0,h=0;h>7,127&d,p>>7,127&p);for(var f=0;f>7,127&m,0,0)}}return{cellImageInfo:l,dimOffset:s,dimImageInfo:o}}var p=this.glyphInfos[t.index];if(p)return p;var d=t.getBoundingBox(),f=d.x1,m=d.y1,y=d.x2-f,v=d.y2-m,g=t.path.commands;if(0===y||0===v||!g.length)return this.glyphInfos[t.index]={};var _,b=[],S=[],x=[];for(_=a-1;_>=0;--_)x.push([]);for(_=h-1;_>=0;--_)S.push([]);for(var w,T,P,A,M=0;M=n)&&this._doFill){if(!this._isOpenType())return console.log("WEBGL: only opentype fonts are supported"),t;t.push();var l=this.curFillShader,c=this._doStroke,p=this.drawMode;this.curFillShader=null,this._doStroke=!1,this.drawMode=s.TEXTURE;var d=this._textFont.font,f=this._textFont._fontInfo;f||(f=this._textFont._fontInfo=new u(d));var m=this._textFont._handleAlignment(this,e,i,r),y=this._textSize,v=y/d.unitsPerEm;this.translate(m.x,m.y,0),this.scale(v,v,1);var g=this.GL,_=!this._defaultFontShader,b=this.setFillShader(this._getFontShader());_&&(b.setUniform("uGridImageSize",[64,64]),b.setUniform("uCellsImageSize",[64,64]),b.setUniform("uStrokeImageSize",[64,64]),b.setUniform("uGridSize",[a,h])),this._applyColorBlend(this.curFillColor);var S=this.gHash.glyph;if(!S){var x=this._textGeom=new o.Geometry(1,1,function(){for(var t=0;t<=1;t++)for(var e=0;e<=1;e++)this.vertices.push(new o.Vector(e,t,0)),this.uvs.push(e,t)});x.computeFaces().computeNormals(),S=this.createBuffers("glyph",x)}this._bindBuffer(S.vertexBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aPosition.location,3,g.FLOAT,!1,0,0),this._bindBuffer(S.indexBuffer,g.ELEMENT_ARRAY_BUFFER),this._bindBuffer(S.uvBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aTexCoord.location,2,g.FLOAT,!1,0,0),b.setUniform("uMaterialColor",this.curFillColor);try{for(var w=0,T=null,P=!1,A=d.stringToGlyphs(e),M=0;M{var e=new s.a.Phaser({frequency:.5,octaves:.5,baseFrequency:1600}).toMaster(),i=new s.a.Chorus(.8,2.5,.2).toMaster();class r{constructor(t,r,n,o){this.note=t,this.x=r,this.y=n,this.s=o,this.canplay=!0,this.fillColor=0,this.fm=new s.a.PolySynth(8,s.a.Synth,{oscillator:{partials:[100,20,30,4]},envelope:{attack:.3,decay:.6,sustain:4,release:6}}).chain(i,e),this.fm.volume.value=-4}draw(){t.push(),t.noStroke(),t.translate(this.x,this.y,0),"C#4"==this.note?t.ambientMaterial(255/9*5):"G#4"==this.note||"G#3"==this.note?t.ambientMaterial(255/9*4):"D#5"==this.note||"D#4"==this.note||"D#3"==this.note?t.ambientMaterial(170):"A#4"==this.note||"A#3"==this.note?t.ambientMaterial(85):"F5"==this.note||"F4"==this.note||"F3"==this.note?t.ambientMaterial(255/9*7):"C5"==this.note||"C4"==this.note?t.ambientMaterial(255/9*2):"G5"==this.note||"G4"==this.note||"G3"==this.note?t.ambientMaterial(255/9*8):"D5"==this.note||"D4"==this.note?t.ambientMaterial(255/9*1):"A4"==this.note&&t.ambientMaterial(255),t.push(),t.translate(0,0,-this.s/2),t.rotateX(-t.HALF_PI),t.cylinder(1.8*this.s,this.s/2,6),t.fill(255,0,0,this.fillColor),t.cylinder(1.9*this.s,this.s/1.8,6),t.pop(),t.pop(),this.fillColor-=10}}let n=0,o=0,a=0,h=0,l=0,u=0,c=[];t.setup=(()=>{t.createCanvas(800,800,t.WEBGL);c.push(new r("C#4",-200,0,30)),c.push(new r("G#4",-150,-100,30)),c.push(new r("G#3",-150,100,30)),c.push(new r("D#5",-100,-200,30)),c.push(new r("D#4",-100,0,30)),c.push(new r("D#3",-100,200,30)),c.push(new r("A#4",-50,-100,30)),c.push(new r("A#3",-50,100,30)),c.push(new r("F5",0,-200,30)),c.push(new r("F4",0,0,30)),c.push(new r("F3",0,200,30)),c.push(new r("C5",50,-100,30)),c.push(new r("C4",50,100,30)),c.push(new r("G5",100,-200,30)),c.push(new r("G4",100,0,30)),c.push(new r("G3",100,200,30)),c.push(new r("D5",150,-100,30)),c.push(new r("D4",150,100,30)),c.push(new r("A4",200,0,30))});let p=0,d=1e4,f=0,m=0;t.draw=(()=>{t.background(0),t.smooth(),t.pointLight(150,150,150,500,0,100),t.directionalLight(255,255,255,0,1,-1),t.ambientLight(200),f=t.map(t.noise(p),0,1,t.width/2-t.width/6,t.width-t.width/3),m=t.map(t.noise(d),0,1,t.height,t.height/2),n=t.map(f,0,t.width,-t.PI/4,t.PI/4),o=t.map(m,0,t.height,t.PI/4,-t.PI/4),p+=.01,d+=.005,l>-150&&l<150?l+=20*n:(l<=-150&&(l=-149),l>=150&&(l=149)),u>-150&&u<150?u-=32*(o+t.PI/8):(u<=-150&&(u=-149),u>=150&&(u=149)),l+=4*t.sin(t.frameCount/30),u+=4*t.cos(t.frameCount/30),t.push(),t.rotateX(t.radians(80)),t.rotateY(n),t.rotateX(o);for(let e=0;e{"m"==t.key&&t.save(Date.now()+".jpg")})};e.default=a,new n.a(a)},function(t,e){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RvbmUvYnVpbGQvVG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcDUvbGliL3A1Lm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsIl9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fIiwidW5kZWZpbmVkIiwiVG9uZSIsIk1vZHVsZSIsImZ1bmMiLCJNYWluIiwidGhpcyIsIkVycm9yIiwidG9TdHJpbmciLCJjbGFzc05hbWUiLCJpc0xldHRlciIsIm1hdGNoIiwic2FtZUNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiLCJpc0Z1bmN0aW9uIiwiZGlzcG9zZSIsInNldCIsInBhcmFtcyIsInJhbXBUaW1lIiwiaXNPYmplY3QiLCJpc1N0cmluZyIsInRtcE9iaiIsInBhcmFtTG9vcCIsImF0dHIiLCJwYXJlbnQiLCJpbmRleE9mIiwiYXR0clNwbGl0Iiwic3BsaXQiLCJsZW5ndGgiLCJzcGxpY2UiLCJpbm5lclBhcmFtIiwiam9pbiIsInBhcmFtIiwiaXNVbmRlZiIsIlNpZ25hbCIsIlBhcmFtIiwicmFtcFRvIiwiQXVkaW9QYXJhbSIsIlRpbWVCYXNlIiwiX2NvbGxlY3REZWZhdWx0cyIsInJldCIsInN1YlJldCIsImoiLCJzdWJBdHRyIiwiaXNEZWZpbmVkIiwiY29uc3RyIiwiZGVmYXVsdHMiLCJrZXlzIiwiX3N1cGVyIiwic3VwZXJEZWZzIiwicHVzaCIsInZhbHVlcyIsIm9wdGlvbnMiLCJkZWZhdWx0QXJnIiwiZ2l2ZW4iLCJmYWxsYmFjayIsImdpdmVuUHJvcCIsImZhbGxiYWNrUHJvcCIsImNvbm5lY3RTZXJpZXMiLCJjdXJyZW50VW5pdCIsImFyZ3VtZW50cyIsInRvVW5pdCIsImNvbm5lY3QiLCJ2YWwiLCJpc051bWJlciIsImFyZyIsImlzQm9vbGVhbiIsImlzQXJyYXkiLCJBcnJheSIsImlzTm90ZSIsInRlc3QiLCJub09wIiwiX3JlYWRPbmx5Iiwid3JpdGFibGUiLCJfd3JpdGFibGUiLCJTdGF0ZSIsIlN0YXJ0ZWQiLCJTdG9wcGVkIiwiUGF1c2VkIiwiZXF1YWxQb3dlclNjYWxlIiwicGVyY2VudCIsInBpRmFjdG9yIiwiTWF0aCIsIlBJIiwic2luIiwiZGJUb0dhaW4iLCJkYiIsInBvdyIsImdhaW5Ub0RiIiwiZ2FpbiIsImxvZyIsIkxOMTAiLCJpbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8iLCJpbnRlcnZhbCIsIm5vdyIsImNvbnRleHQiLCJleHRlbmQiLCJjaGlsZCIsIlRlbXBDb25zdHJ1Y3RvciIsImF1ZGlvQ29udGV4dCIsIkNvbnRleHQiLCJlbWl0Iiwic2V0Q29udGV4dCIsImN0eCIsInNhbXBsZVJhdGUiLCJoYXNBdWRpb0NvbnRleHQiLCJ3aW5kb3ciLCJoYXNQcm9taXNlcyIsImhhc1dvcmtlcnMiLCJnZXRDb250ZXh0IiwicmVzb2x2ZSIsImluaXRpYWxpemVkIiwicmVzQ2FsbGJhY2siLCJvZmYiLCJvbiIsInZlcnNpb24iLCJFbWl0dGVyIiwiX2V2ZW50cyIsImV2ZW50IiwiY2FsbGJhY2siLCJldmVudHMiLCJldmVudE5hbWUiLCJvbmNlIiwiYm91bmRDYWxsYmFjayIsImFwcGx5IiwiZXYiLCJldmVudExpc3QiLCJhcmdzIiwic2xpY2UiLCJsZW4iLCJtaXhpbiIsImZ1bmN0aW9ucyIsImVtaXR0ZXJGdW5jIiwiVGltZWxpbmUiLCJfdGltZWxpbmUiLCJtZW1vcnkiLCJJbmZpbml0eSIsImFkZCIsInRpbWUiLCJ2YWx1ZU9mIiwiaW5kZXgiLCJfc2VhcmNoIiwiZGlmZiIsInJlbW92ZSIsImNvbXBhcmF0b3IiLCJwZWVrIiwic2hpZnQiLCJnZXRBZnRlciIsImdldEJlZm9yZSIsImNhbmNlbCIsImFmdGVyIiwiY2FuY2VsQmVmb3JlIiwicHJldmlvdXNFdmVudCIsImJlZ2lubmluZyIsImVuZCIsIm1pZFBvaW50IiwiZmxvb3IiLCJuZXh0RXZlbnQiLCJfaXRlcmF0ZSIsImxvd2VyQm91bmQiLCJ1cHBlckJvdW5kIiwiZm9yRWFjaCIsImZvckVhY2hCZWZvcmUiLCJmb3JFYWNoQWZ0ZXIiLCJmb3JFYWNoQmV0d2VlbiIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJmb3JFYWNoRnJvbSIsImZvckVhY2hBdFRpbWUiLCJzdXBwb3J0ZWQiLCJPZmZsaW5lQXVkaW9Db250ZXh0Iiwid2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dCIsInN0YXJ0UmVuZGVyaW5nIiwiUHJvbWlzZSIsIl9uYXRpdmVfc3RhcnRSZW5kZXJpbmciLCJkb25lIiwib25jb21wbGV0ZSIsImUiLCJyZW5kZXJlZEJ1ZmZlciIsIkF1ZGlvQ29udGV4dCIsIndlYmtpdEF1ZGlvQ29udGV4dCIsImNsb3NlIiwic3VzcGVuZCIsInJlc3VtZSIsImNyZWF0ZUdhaW4iLCJjcmVhdGVHYWluTm9kZSIsImNyZWF0ZURlbGF5IiwiY3JlYXRlRGVsYXlOb2RlIiwiZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSIsIm9mZmxpbmVDb250ZXh0IiwiYXVkaW9EYXRhIiwiVWludDMyQXJyYXkiLCJidWZmZXIiLCJkZWNvZGVBdWRpb0RhdGEiLCJfbmF0aXZlX2RlY29kZUF1ZGlvRGF0YSIsInN1Y2Nlc3MiLCJlcnJvciIsInByb3AiLCJfY29udGV4dCIsIl9kZWZpbmVQcm9wZXJ0eSIsIl9sYXRlbmN5SGludCIsImxhdGVuY3lIaW50IiwiX2NvbnN0YW50cyIsImxvb2tBaGVhZCIsIl9jb21wdXRlZFVwZGF0ZUludGVydmFsIiwiX3RpY2tlciIsIlRpY2tlciIsImNsb2NrU291cmNlIiwidXBkYXRlSW50ZXJ2YWwiLCJfdGltZW91dHMiLCJfdGltZW91dElkcyIsIl90aW1lb3V0TG9vcCIsImN1cnJlbnRUaW1lIiwicmVhZHkiLCJzdGF0ZSIsInRoZW4iLCJnZXRDb25zdGFudCIsImNyZWF0ZUJ1ZmZlciIsImFyciIsImdldENoYW5uZWxEYXRhIiwiY29uc3RhbnQiLCJjcmVhdGVCdWZmZXJTb3VyY2UiLCJjaGFubmVsQ291bnQiLCJjaGFubmVsQ291bnRNb2RlIiwibG9vcCIsInN0YXJ0Iiwic2V0VGltZW91dCIsImZuIiwidGltZW91dCIsImlkIiwiY2xlYXJUaW1lb3V0IiwidHlwZSIsImhpbnQiLCJjb24iLCJkaXNjb25uZWN0IiwiX3R5cGUiLCJfdXBkYXRlSW50ZXJ2YWwiLCJfY2FsbGJhY2siLCJfY3JlYXRlQ2xvY2siLCJUeXBlIiwiV29ya2VyIiwiVGltZW91dCIsIk9mZmxpbmUiLCJfY3JlYXRlV29ya2VyIiwiVVJMIiwid2Via2l0VVJMIiwiYmxvYiIsIkJsb2IiLCJ0b0ZpeGVkIiwiYmxvYlVybCIsImNyZWF0ZU9iamVjdFVSTCIsIndvcmtlciIsIm9ubWVzc2FnZSIsIl93b3JrZXIiLCJfY3JlYXRlVGltZW91dCIsIl90aW1lb3V0IiwibWF4IiwicG9zdE1lc3NhZ2UiLCJfZGlzcG9zZUNsb2NrIiwidGVybWluYXRlIiwibmF0aXZlQ29ubmVjdCIsIkF1ZGlvTm9kZSIsIm5hdGl2ZURpc2Nvbm5lY3QiLCJ0b25lQ29ubmVjdCIsIkIiLCJvdXROdW0iLCJpbk51bSIsImlucHV0IiwiVE9ORV9TSUxFTkNFX1ZFUlNJT05fTE9HR0lORyIsImNvbnNvbGUiLCJ3YXJuIiwiY3JlYXRlSW5zT3V0cyIsImlucHV0cyIsIm91dHB1dHMiLCJvdXRwdXQiLCJjaGFubmVsSW50ZXJwcmV0YXRpb24iLCJfb25Db25uZWN0IiwidW5pdCIsIm91dHB1dE51bSIsImlucHV0TnVtIiwiZGVzdGluYXRpb24iLCJjaGFpbiIsImZhbiIsIlNpZ25hbEJhc2UiLCJub2RlIiwib3V0cHV0TnVtYmVyIiwiaW5wdXROdW1iZXIiLCJfcGFyYW0iLCJjYW5jZWxTY2hlZHVsZWRWYWx1ZXMiLCJvdmVycmlkZGVuIiwidWEiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwiV2F2ZVNoYXBlck5vZGUiLCJfaW50ZXJuYWxOb2RlIiwiX25hdGl2ZV9jcmVhdGVXYXZlU2hhcGVyIiwiX2N1cnZlIiwiY3VydmUiLCJhcnJheSIsIkZsb2F0MzJBcnJheSIsImNyZWF0ZVdhdmVTaGFwZXIiLCJXYXZlU2hhcGVyIiwibWFwcGluZyIsImJ1ZmZlckxlbiIsIl9zaGFwZXIiLCJpc0Zpbml0ZSIsInNldE1hcCIsIm5vcm1hbGl6ZWQiLCJvdmVyc2FtcGxlIiwib3ZlcnNhbXBsaW5nIiwiUmFuZ2VFcnJvciIsInVuaXRzIiwiX3ZhbCIsIl91bml0cyIsInBhcnNlRmxvYXQiLCJjaGFyQXQiLCJfZGVmYXVsdFVuaXRzIiwidG9TZWNvbmRzIiwidG9UaWNrcyIsInRvRnJlcXVlbmN5IiwidG9NaWRpIiwiX2V4cHJlc3Npb25zIiwicmVnZXhwIiwibWV0aG9kIiwiZG90IiwicGFyc2VJbnQiLCJzY2FsYXIiLCJfYmVhdHNUb1VuaXRzIiwiX2dldFRpbWVTaWduYXR1cmUiLCJfdGlja3NUb1VuaXRzIiwiaHoiLCJfZnJlcXVlbmN5VG9Vbml0cyIsInRyIiwicSIsInRvdGFsIiwiX3NlY29uZHNUb1VuaXRzIiwic2FtcGxlcyIsImRlZmF1bHQiLCJfZ2V0QnBtIiwiVHJhbnNwb3J0IiwiYnBtIiwidGltZVNpZ25hdHVyZSIsIl9nZXRQUFEiLCJQUFEiLCJfbm93IiwiZnJlcSIsImJlYXRzIiwic2Vjb25kcyIsInRpY2tzIiwiX25vQXJnIiwidHJpbSIsImV4cHIiLCJtYXRjaGluZyIsInRvU2FtcGxlcyIsInRvTWlsbGlzZWNvbmRzIiwiRnJlcXVlbmN5IiwiYXNzaWduIiwibWlkaSIsIm10b2YiLCJub3RlIiwicGl0Y2giLCJvY3RhdmUiLCJub3RlTnVtYmVyIiwibm90ZVRvU2NhbGVJbmRleCIsInRyYW5zcG9zZSIsImhhcm1vbml6ZSIsImludGVydmFscyIsIm1hcCIsImZ0b20iLCJ0b05vdGUiLCJsb2cyIiwiQTQiLCJyb3VuZCIsInNjYWxlSW5kZXhUb05vdGUiLCJxdWFydGVyVGltZSIsInF1YXJ0ZXJzIiwiY2JiIiwiY2IiLCJjIyIsImN4IiwiZGJiIiwiZCMiLCJkeCIsImViYiIsImViIiwiZSMiLCJleCIsImZiYiIsImZiIiwiZiIsImYjIiwiZngiLCJnYmIiLCJnYiIsImciLCJnIyIsImd4IiwiYWJiIiwiYWIiLCJhIiwiYSMiLCJheCIsImJiYiIsImJiIiwiYiIsImIjIiwiYngiLCJmcmVxdWVuY3kiLCJUaW1lIiwicXVhbnRpemUiLCJjYXB0dXJlIiwicXVhbnRUbyIsIm5leHRTdWJkaXZpc2lvbiIsInN1YmRpdiIsInN1YmRpdmlzaW9uIiwidG9Ob3RhdGlvbiIsInRlc3ROb3RhdGlvbnMiLCJwb3dlciIsImNsb3Nlc3QiLCJjbG9zZXN0U2Vjb25kcyIsIm5vdGF0aW9uIiwibm90YXRpb25TZWNvbmRzIiwiYWJzIiwidG9CYXJzQmVhdHNTaXh0ZWVudGhzIiwibWVhc3VyZXMiLCJzaXh0ZWVudGhzIiwiVHJhbnNwb3J0VGltZSIsIkRlZmF1bHQiLCJUaWNrcyIsIk5vcm1hbFJhbmdlIiwiQXVkaW9SYW5nZSIsIkRlY2liZWxzIiwiSW50ZXJ2YWwiLCJCUE0iLCJQb3NpdGl2ZSIsIkdhaW4iLCJDZW50cyIsIkRlZ3JlZXMiLCJNSURJIiwiQmFyc0JlYXRzU2l4dGVlbnRocyIsIlNhbXBsZXMiLCJIZXJ0eiIsIk5vdGUiLCJNaWxsaXNlY29uZHMiLCJTZWNvbmRzIiwiTm90YXRpb24iLCJjb252ZXJ0IiwiX3RvVW5pdHMiLCJnZXRWYWx1ZUF0VGltZSIsIl9pbml0aWFsVmFsdWUiLCJfZnJvbVVuaXRzIiwic2V0VmFsdWVBdFRpbWUiLCJtaW5WYWx1ZSIsIm1heFZhbHVlIiwibWluIiwiX21pbk91dHB1dCIsIkF1dG9tYXRpb25UeXBlIiwiTGluZWFyIiwiRXhwb25lbnRpYWwiLCJUYXJnZXQiLCJTZXRWYWx1ZSIsImJlZm9yZSIsImluaXRpYWxWYWx1ZSIsImRlZmF1bHRWYWx1ZSIsInByZXZpb3VzVmFsIiwicHJldmlvdXMiLCJfZXhwb25lbnRpYWxBcHByb2FjaCIsIl9saW5lYXJJbnRlcnBvbGF0ZSIsIl9leHBvbmVudGlhbEludGVycG9sYXRlIiwic2V0UmFtcFBvaW50IiwiY3VycmVudFZhbCIsImNhbmNlbEFuZEhvbGRBdFRpbWUiLCJsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZSIsImV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUiLCJleHBvbmVudGlhbFJhbXBUbyIsImxpbmVhclJhbXBUbyIsInRhcmdldFJhbXBUbyIsImV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSIsInRpbWVDb25zdGFudCIsInNldFRhcmdldEF0VGltZSIsInNldFZhbHVlQ3VydmVBdFRpbWUiLCJkdXJhdGlvbiIsInNjYWxpbmciLCJzZWdUaW1lIiwidmFsdWVBdFRpbWUiLCJ0MCIsInYwIiwidjEiLCJleHAiLCJ0MSIsIk9mZmxpbmVDb250ZXh0IiwiY2hhbm5lbHMiLCJfZHVyYXRpb24iLCJfY3VycmVudFRpbWUiLCJyZW5kZXIiLCJibG9ja1RpbWUiLCJidWZmZXJTb3VyY2UiLCJfbmF0aXZlX3N0YXJ0IiwiX2dhaW5Ob2RlIiwiY3JlYXRlQ29uc3RhbnRTb3VyY2UiLCJDb25zdGFudFNvdXJjZU5vZGUiLCJfYnVmZmVyU291cmNlIiwiZ2Fpbk5vZGUiLCJfb3V0cHV0Iiwib2Zmc2V0Iiwic3RvcCIsIl9wcm94aWVzIiwiX3NvdXJjZVN0YXJ0ZWQiLCJfY29uc3RhbnRTb3VyY2UiLCJfaXNQYXJhbSIsIl9hcHBseUF1dG9tYXRpb25zIiwiX2Nvbm5lY3RQcm94aWVzIiwicHJveHkiLCJmcm9tIiwicHJldmlvdXNNZXRob2QiLCJzaWduYWwiLCJQb3ciLCJfZXhwIiwiX2V4cFNjYWxlciIsIl9leHBGdW5jIiwiRW52ZWxvcGUiLCJhdHRhY2siLCJkZWNheSIsInN1c3RhaW4iLCJyZWxlYXNlIiwiX2F0dGFja0N1cnZlIiwiX3JlbGVhc2VDdXJ2ZSIsIl9zaWciLCJhdHRhY2tDdXJ2ZSIsInJlbGVhc2VDdXJ2ZSIsIkluIiwiY3VydmVEZWYiLCJPdXQiLCJ0cmlnZ2VyQXR0YWNrIiwidmVsb2NpdHkiLCJvcmlnaW5hbEF0dGFjayIsImN1cnJlbnRWYWx1ZSIsInBlcmNlbnRDb21wbGV0ZSIsInNsaWNlSW5kZXgiLCJ0cmlnZ2VyUmVsZWFzZSIsInRyaWdnZXJBdHRhY2tSZWxlYXNlIiwiayIsImNvc2luZUN1cnZlIiwicmlwcGxlQ3VydmUiLCJjdXJ2ZUxlbiIsInNpbmVXYXZlIiwic3RhaXJzQ3VydmUiLCJjZWlsIiwic2luZUN1cnZlIiwiY29zIiwiYm91bmNlQ3VydmUiLCJpbnZlcnRDdXJ2ZSIsIm91dCIsImxpbmVhciIsImV4cG9uZW50aWFsIiwiYm91bmNlIiwiY29zaW5lIiwicmV2ZXJzZSIsInJldmVyc2VDdXJ2ZSIsInN0ZXAiLCJyaXBwbGUiLCJzaW5lIiwiQW1wbGl0dWRlRW52ZWxvcGUiLCJBbmFseXNlck5vZGUiLCJnZXRGbG9hdFRpbWVEb21haW5EYXRhIiwidWludDgiLCJVaW50OEFycmF5IiwiZ2V0Qnl0ZVRpbWVEb21haW5EYXRhIiwiQW5hbHlzZXIiLCJfYW5hbHlzZXIiLCJjcmVhdGVBbmFseXNlciIsIl9idWZmZXIiLCJzaXplIiwic21vb3RoaW5nIiwiV2F2ZWZvcm0iLCJGRlQiLCJnZXRWYWx1ZSIsImdldEZsb2F0RnJlcXVlbmN5RGF0YSIsImZyZXF1ZW5jeUJpbkNvdW50IiwiZmZ0U2l6ZSIsIlR5cGVFcnJvciIsInNtb290aGluZ1RpbWVDb25zdGFudCIsIkNvbXByZXNzb3IiLCJfY29tcHJlc3NvciIsImNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvciIsInRocmVzaG9sZCIsImtuZWUiLCJyYXRpbyIsIkFkZCIsIl9zdW0iLCJNdWx0aXBseSIsIl9tdWx0IiwiTmVnYXRlIiwiX211bHRpcGx5IiwiU3VidHJhY3QiLCJfbmVnIiwiRXF1YWxQb3dlckdhaW4iLCJfZXFQb3dlciIsIkNyb3NzRmFkZSIsImluaXRpYWxGYWRlIiwiZmFkZSIsIl9lcXVhbFBvd2VyQSIsIl9lcXVhbFBvd2VyQiIsIl9vbmUiLCJfaW52ZXJ0IiwiRmlsdGVyIiwiX2ZpbHRlcnMiLCJkZXR1bmUiLCJRIiwiX3JvbGxvZmYiLCJyb2xsb2ZmIiwiY2FzY2FkaW5nQ291bnQiLCJjb3VudCIsImZpbHRlciIsImNyZWF0ZUJpcXVhZEZpbHRlciIsImNvbm5lY3Rpb25DaGFpbiIsImNvbmNhdCIsIk11bHRpYmFuZFNwbGl0IiwibG93IiwiX2xvd01pZEZpbHRlciIsIm1pZCIsImhpZ2giLCJsb3dGcmVxdWVuY3kiLCJoaWdoRnJlcXVlbmN5IiwiRVEzIiwiX211bHRpYmFuZFNwbGl0IiwiX2xvd0dhaW4iLCJfbWlkR2FpbiIsIl9oaWdoR2FpbiIsIlNjYWxlIiwib3V0cHV0TWluIiwib3V0cHV0TWF4IiwiX291dHB1dE1pbiIsIl9vdXRwdXRNYXgiLCJfc2NhbGUiLCJfYWRkIiwiX3NldFJhbmdlIiwiU2NhbGVFeHAiLCJleHBvbmVudCIsIkRlbGF5IiwiX21heERlbGF5IiwibWF4RGVsYXkiLCJkZWxheVRpbWUiLCJfZGVsYXlOb2RlIiwiRmVlZGJhY2tDb21iRmlsdGVyIiwiX2RlbGF5IiwiX2ZlZWRiYWNrIiwicmVzb25hbmNlIiwiQWJzIiwiX2FicyIsIkZvbGxvd2VyIiwiX2ZpbHRlciIsIl9mcmVxdWVuY3lWYWx1ZXMiLCJfc3ViIiwiX2F0dGFjayIsIl9yZWxlYXNlIiwiX3NldEF0dGFja1JlbGVhc2UiLCJtaW5UaW1lIiwiU2NhbGVkRW52ZWxvcGUiLCJGcmVxdWVuY3lFbnZlbG9wZSIsIl9vY3RhdmVzIiwib2N0YXZlcyIsImJhc2VGcmVxdWVuY3kiLCJHcmVhdGVyVGhhblplcm8iLCJfdGhyZXNoIiwiR3JlYXRlclRoYW4iLCJfZ3R6IiwiR2F0ZSIsIl9mb2xsb3dlciIsIl9ndCIsInRocmVzaCIsImF0dGFja1RpbWUiLCJyZWxlYXNlVGltZSIsIl93cmFwU2NoZWR1bGVNZXRob2RzIiwidGlja3NVbnRpbFRpbWUiLCJfZ2V0VGlja3NVbnRpbEV2ZW50IiwiVGlja1NpZ25hbCIsInByZXZFdmVudCIsInNlZ21lbnRzIiwicmFtcFZhbCIsInNlZ21lbnREdXIiLCJ2YWwwIiwidmFsMSIsInNhbXBsZVRpbWUiLCJnZXRUaWNrc0F0VGltZSIsImdldER1cmF0aW9uT2ZUaWNrcyIsImN1cnJlbnRUaWNrIiwiZ2V0VGltZU9mVGljayIsInRpY2siLCJkZWx0YSIsInNxcnQiLCJzb2wxIiwidGlja3NUb1RpbWUiLCJ3aGVuIiwidGltZVRvVGlja3MiLCJzdGFydFRpY2tzIiwiZW5kVGlja3MiLCJUaW1lbGluZVN0YXRlIiwiaW5pdGlhbCIsIl9pbml0aWFsIiwic2V0U3RhdGVBdFRpbWUiLCJnZXRMYXN0U3RhdGUiLCJnZXROZXh0U3RhdGUiLCJUaWNrU291cmNlIiwiX3N0YXRlIiwiX3RpY2tPZmZzZXQiLCJzZXRUaWNrc0F0VGltZSIsInBhdXNlIiwic3RvcEV2ZW50IiwidG1wRXZlbnQiLCJsYXN0U3RhdGUiLCJlbGFwc2VkVGlja3MiLCJwZXJpb2RTdGFydFRpbWUiLCJvZmZzZXRFdmVudCIsImdldFNlY29uZHNBdFRpbWUiLCJlbGFwc2VkU2Vjb25kcyIsImdldFN0YXRlQXRUaW1lIiwiYWJzb2x1dGVUaWNrcyIsImZvckVhY2hUaWNrQmV0d2VlbiIsImxhc3RTdGF0ZUV2ZW50IiwibmV4dFRpY2tUaW1lIiwiQ2xvY2siLCJfbmV4dFRpY2siLCJfdGlja1NvdXJjZSIsIl9sYXN0VXBkYXRlIiwiX2JvdW5kTG9vcCIsIl9sb29wIiwiSW50ZXJ2YWxUaW1lbGluZSIsIl9yb290IiwiX2xlbmd0aCIsIkludGVydmFsTm9kZSIsImluc2VydCIsInVwZGF0ZUhlaWdodCIsInVwZGF0ZU1heCIsIl9yZWJhbGFuY2UiLCJyZXN1bHRzIiwic2VhcmNoIiwiX3JlbW92ZU5vZGUiLCJfc2V0Um9vdCIsIl9yZXBsYWNlTm9kZUluUGFyZW50IiwicmVwbGFjZW1lbnQiLCJpc0xlZnRDaGlsZCIsImxlZnQiLCJyaWdodCIsInRlbXAiLCJnZXRCYWxhbmNlIiwiX3JvdGF0ZUxlZnQiLCJwaXZvdE5vZGUiLCJfcm90YXRlUmlnaHQiLCJiYWxhbmNlIiwiYWxsTm9kZXMiLCJ0cmF2ZXJzZSIsInNlYXJjaEFmdGVyIiwiX2xlZnQiLCJfcmlnaHQiLCJoZWlnaHQiLCJwb2ludCIsIlRyYW5zcG9ydEV2ZW50IiwiX2V2ZW50SWQiLCJfb25jZSIsImludm9rZSIsImNsZWFyIiwiVHJhbnNwb3J0UmVwZWF0RXZlbnQiLCJfaW50ZXJ2YWwiLCJfY3VycmVudElkIiwiX25leHRJZCIsIl9ib3VuZFJlc3RhcnQiLCJfcmVzdGFydCIsIl9jcmVhdGVFdmVudHMiLCJzY2hlZHVsZU9uY2UiLCJfYm91bmRDcmVhdGVFdmVudHMiLCJfbG9vcFN0YXJ0IiwiX2xvb3BFbmQiLCJfcHBxIiwiVHJhbnNwb3J0Q29uc3RydWN0b3IiLCJfY2xvY2siLCJfcHJvY2Vzc1RpY2siLCJfYmluZENsb2NrRXZlbnRzIiwiX3RpbWVTaWduYXR1cmUiLCJfc2NoZWR1bGVkRXZlbnRzIiwiX3JlcGVhdGVkRXZlbnRzIiwiX3N5bmNlZFNpZ25hbHMiLCJfc3dpbmdUaWNrcyIsIl9zd2luZ0Ftb3VudCIsInN3aW5nIiwic3dpbmdTdWJkaXZpc2lvbiIsImxvb3BTdGFydCIsImxvb3BFbmQiLCJ0aWNrVGltZSIsInByb2dyZXNzIiwiYW1vdW50Iiwic2NoZWR1bGUiLCJfYWRkRXZlbnQiLCJzY2hlZHVsZVJlcGVhdCIsImV2ZW50SWQiLCJpdGVtIiwidGltZWxpbmUiLCJ0b2dnbGUiLCJ0aW1lU2lnIiwic3RhcnRQb3NpdGlvbiIsImVuZFBvc2l0aW9uIiwic2V0TG9vcFBvaW50cyIsInBwcSIsInJlbWFpbmluZ1RpY2tzIiwic3luY1NpZ25hbCIsInJhdGlvU2lnbmFsIiwidW5zeW5jU2lnbmFsIiwic3luY2VkU2lnbmFsIiwiVm9sdW1lIiwidm9sdW1lIiwiX3VubXV0ZWRWb2x1bWUiLCJtdXRlIiwiTWFzdGVyIiwiX3ZvbHVtZSIsInRvTWFzdGVyIiwiTWFzdGVyQ29uc3RydWN0b3IiLCJTb3VyY2UiLCJfc3luY2VkIiwiX3NjaGVkdWxlZCIsIl9zdGFydCIsInJlc3RhcnQiLCJfc3RvcCIsInNjaGVkIiwiX3N5bmNlZFN0YXJ0Iiwic3luYyIsInN0YXRlRXZlbnQiLCJzdGFydE9mZnNldCIsIl9zeW5jZWRTdG9wIiwidW5zeW5jIiwiQXVkaW9CdWZmZXIiLCJjb3B5VG9DaGFubmVsIiwic3JjIiwiY2hhbk51bSIsImNoYW5uZWwiLCJjb3B5RnJvbUNoYW5uZWwiLCJkZXN0IiwiQnVmZmVyIiwiX3JldmVyc2VkIiwiX3hociIsIl9vbmxvYWQiLCJ1cmwiLCJvbmxvYWQiLCJsb2FkZWQiLCJsb2FkIiwiY2F0Y2giLCJvbmVycm9yIiwiYnVmZiIsImVyciIsIl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZSIsImFib3J0IiwibnVtYmVyT2ZDaGFubmVscyIsImZyb21BcnJheSIsImlzTXVsdGlkaW1lbnNpb25hbCIsInRvTW9ubyIsInRvQXJyYXkiLCJvdXRwdXRBcnJheSIsIm51bUNoYW5uZWxzIiwiY2hhbm5lbEFycmF5Iiwic2FtcGxlIiwic3RhcnRTYW1wbGVzIiwiZW5kU2FtcGxlcyIsIl9yZXZlcnNlIiwicmV2IiwiX2Rvd25sb2FkUXVldWUiLCJiYXNlVXJsIiwiZnJvbVVybCIsInJlcXVlc3QiLCJtYXRjaGVzIiwiZXh0ZW5zaW9ucyIsImV4dGVuc2lvbiIsInN1cHBvcnRzVHlwZSIsInJlcGxhY2UiLCJvbkVycm9yIiwib25Qcm9ncmVzcyIsInRvdGFsUHJvZ3Jlc3MiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJyZXNwb25zZVR5cGUiLCJhZGRFdmVudExpc3RlbmVyIiwic3RhdHVzIiwicmVzcG9uc2UiLCJsZW5ndGhDb21wdXRhYmxlIiwic2VuZCIsImNhbmNlbERvd25sb2FkcyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNhblBsYXlUeXBlIiwicmVtb3ZlRXZlbnRzIiwiZmFpbCIsIk9zY2lsbGF0b3JOb2RlIiwib25lbmRlZCIsIl9zdGFydFRpbWUiLCJfc3RvcFRpbWUiLCJfb3NjaWxsYXRvciIsImNyZWF0ZU9zY2lsbGF0b3IiLCJfZ2FpbiIsInNldFBlcmlvZGljV2F2ZSIsInBlcmlvZGljV2F2ZSIsImNhbmNlbFN0b3AiLCJPc2NpbGxhdG9yIiwiX3dhdmUiLCJfcGFydGlhbHMiLCJwYXJ0aWFscyIsIl9waGFzZSIsInBoYXNlIiwiU2luZSIsIlRyaWFuZ2xlIiwiU2F3dG9vdGgiLCJTcXVhcmUiLCJDdXN0b20iLCJzeW5jRnJlcXVlbmN5IiwidW5zeW5jRnJlcXVlbmN5IiwiaXNCYXNpY1R5cGUiLCJjb2VmcyIsIl9nZXRSZWFsSW1hZ2luYXJ5IiwiY3JlYXRlUGVyaW9kaWNXYXZlIiwicGVyaW9kaWNXYXZlU2l6ZSIsInJlYWwiLCJpbWFnIiwicGFydGlhbENvdW50IiwicGFydGlhbCIsImV4ZWMiLCJfaW52ZXJzZUZGVCIsInN1bSIsIl9nZXRJbml0aWFsVmFsdWUiLCJ0d29QaSIsIkF1ZGlvVG9HYWluIiwiX25vcm0iLCJ4IiwiWmVybyIsIkxGTyIsImFtcGxpdHVkZSIsIl9zdG9wcGVkU2lnbmFsIiwiX3plcm9zIiwiX3N0b3BwZWRWYWx1ZSIsIl9hMmciLCJfc2NhbGVyIiwiY3VycmVudE1pbiIsImN1cnJlbnRNYXgiLCJMaW1pdGVyIiwiTG93cGFzc0NvbWJGaWx0ZXIiLCJfbG93cGFzcyIsImRhbXBlbmluZyIsIk1lcmdlIiwiX21lcmdlciIsImNyZWF0ZUNoYW5uZWxNZXJnZXIiLCJNZXRlciIsImdldExldmVsIiwiU3BsaXQiLCJfc3BsaXR0ZXIiLCJjcmVhdGVDaGFubmVsU3BsaXR0ZXIiLCJNaWRTaWRlU3BsaXQiLCJfc3BsaXQiLCJfbWlkQWRkIiwiU1FSVDFfMiIsIl9zaWRlU3VidHJhY3QiLCJzaWRlIiwiTWlkU2lkZU1lcmdlIiwiX3RpbWVzVHdvTGVmdCIsIl90aW1lc1R3b1JpZ2h0IiwiX21lcmdlIiwiTWlkU2lkZUNvbXByZXNzb3IiLCJfbWlkU2lkZVNwbGl0IiwiX21pZFNpZGVNZXJnZSIsIk1vbm8iLCJNdWx0aWJhbmRDb21wcmVzc29yIiwiU3RlcmVvUGFubmVyTm9kZSIsInBhbiIsInJpZ2h0V2F2ZVNoYXBlciIsImxlZnRXYXZlU2hhcGVyIiwibGVmdEdhaW4iLCJyaWdodEdhaW4iLCJtZXJnZSIsImNyZWF0ZVN0ZXJlb1Bhbm5lciIsIlBhbm5lciIsImluaXRpYWxQYW4iLCJfcGFubmVyIiwiUGFubmVyM0QiLCJjcmVhdGVQYW5uZXIiLCJwYW5uaW5nTW9kZWwiLCJtYXhEaXN0YW5jZSIsImRpc3RhbmNlTW9kZWwiLCJjb25lT3V0ZXJHYWluIiwiY29uZU91dGVyQW5nbGUiLCJjb25lSW5uZXJBbmdsZSIsInJlZkRpc3RhbmNlIiwicm9sbG9mZkZhY3RvciIsIl9vcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uWCIsIm9yaWVudGF0aW9uWSIsIm9yaWVudGF0aW9uWiIsIl9wb3NpdGlvbiIsInBvc2l0aW9uWCIsInBvc2l0aW9uWSIsInBvc2l0aW9uWiIsIl9yYW1wVGltZUNvbnN0YW50Iiwic2V0UG9zaXRpb24iLCJ5IiwieiIsInNldE9yaWVudGF0aW9uIiwicG9zIiwiX2FsaWFzUHJvcGVydHkiLCJQYW5Wb2wiLCJTb2xvIiwiX3NvbG9CaW5kIiwiX3NvbG9lZCIsInNvbG8iLCJfaXNTb2xvZWQiLCJfYWRkU29sbyIsIl9yZW1vdmVTb2xvIiwiX2N1cnJlbnRTb2xvIiwiX25vU29sb3MiLCJDdHJsSW50ZXJwb2xhdGUiLCJsb3dlclBvc2l0aW9uIiwibG93ZXIiLCJ1cHBlciIsIl9pbnRlcnBvbGF0ZSIsInJldEFycmF5IiwicmV0T2JqIiwiX3RvTnVtYmVyIiwiQ3RybE1hcmtvdiIsIm5leHQiLCJkaXN0cmlidXRpb24iLCJfZ2V0UHJvYkRpc3RyaWJ1dGlvbiIsInJhbmQiLCJyYW5kb20iLCJkaXN0IiwiY2hvc2VuIiwibmVlZHNOb3JtYWxpemluZyIsIm9wdGlvbiIsInByb2JhYmlsaXR5IiwiQ3RybFBhdHRlcm4iLCJfc2h1ZmZsZWQiLCJfZGlyZWN0aW9uIiwiVXAiLCJEb3duIiwiVXBEb3duIiwiRG93blVwIiwiQWx0ZXJuYXRlVXAiLCJBbHRlcm5hdGVEb3duIiwiUmFuZG9tIiwiUmFuZG9tV2FsayIsIlJhbmRvbU9uY2UiLCJfc2h1ZmZsZVZhbHVlcyIsImNvcHkiLCJyYW5kVmFsIiwiQ3RybFJhbmRvbSIsImludGVnZXIiLCJCdWZmZXJzIiwidXJscyIsIl9idWZmZXJzIiwiX2xvYWRpbmdDb3VudCIsIl9idWZmZXJMb2FkZWQiLCJoYXMiLCJpc0xvYWRlZCIsImJ1ZmZOYW1lIiwiQnVzZXMiLCJjaGFubmVsTmFtZSIsInNlbmRLbm9iIiwicmVjZWl2ZSIsIkRyYXciLCJleHBpcmF0aW9uIiwiYW50aWNpcGF0aW9uIiwiX2JvdW5kRHJhd0xvb3AiLCJfZHJhd0xvb3AiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJMaXN0ZW5lciIsIkxpc3RlbmVyQ29uc3RydWN0b3IiLCJmb3J3YXJkWCIsImZvcndhcmRZIiwiZm9yd2FyZFoiLCJ1cFgiLCJ1cFkiLCJ1cFoiLCJsaXN0ZW5lciIsIm9yaWdpbmFsQ29udGV4dCIsInJlbmRlclJldCIsImF0dGVtcHRSZW5kZXIiLCJ0cmllcyIsIkVmZmVjdCIsIl9kcnlXZXQiLCJ3ZXQiLCJlZmZlY3RTZW5kIiwiZWZmZWN0UmV0dXJuIiwiY29ubmVjdEVmZmVjdCIsImVmZmVjdCIsIkF1dG9GaWx0ZXIiLCJfbGZvIiwiZGVwdGgiLCJkZWxheSIsIm9jdCIsIkF1dG9QYW5uZXIiLCJBdXRvV2FoIiwiZm9sbG93ZXIiLCJfc3dlZXBSYW5nZSIsIl9iYXNlRnJlcXVlbmN5IiwiX2lucHV0Qm9vc3QiLCJfYmFuZHBhc3MiLCJfcGVha2luZyIsIl9zZXRTd2VlcFJhbmdlIiwic2Vuc2l0aXZpdHkiLCJiYXNlRnJlcSIsInNlbnNpdGl2eSIsIk1vZHVsbyIsIm1vZHVsdXMiLCJfc3VidHJhY3QiLCJfbW9kU2lnbmFsIiwiX3NldFdhdmVTaGFwZXIiLCJtb2QiLCJCaXRDcnVzaGVyIiwiaW52U3RlcFNpemUiLCJiaXRzIiwiX21vZHVsbyIsIl9iaXRzIiwiQ2hlYnlzaGV2IiwiX29yZGVyIiwib3JkZXIiLCJfZ2V0Q29lZmZpY2llbnQiLCJkZWdyZWUiLCJtZW1vIiwiU3RlcmVvRWZmZWN0IiwiZWZmZWN0U2VuZEwiLCJlZmZlY3RTZW5kUiIsImVmZmVjdFJldHVybkwiLCJlZmZlY3RSZXR1cm5SIiwiQ2hvcnVzIiwiX2RlcHRoIiwiX2RlbGF5VGltZSIsIl9sZm9MIiwiX2xmb1IiLCJfZGVsYXlOb2RlTCIsIl9kZWxheU5vZGVSIiwic3ByZWFkIiwiZGV2aWF0aW9uIiwiQ29udm9sdmVyIiwiX2NvbnZvbHZlciIsImNyZWF0ZUNvbnZvbHZlciIsIkRpc3RvcnRpb24iLCJfZGlzdG9ydGlvbiIsImRpc3RvcnRpb24iLCJkZWciLCJGZWVkYmFja0VmZmVjdCIsIl9mZWVkYmFja0dhaW4iLCJmZWVkYmFjayIsIkZlZWRiYWNrRGVsYXkiLCJjb21iRmlsdGVyVHVuaW5ncyIsImFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcyIsIkZyZWV2ZXJiIiwicm9vbVNpemUiLCJfY29tYkZpbHRlcnMiLCJfYWxscGFzc0ZpbHRlcnNMIiwiX2FsbHBhc3NGaWx0ZXJzUiIsImFsbHBhc3NMIiwiYWxscGFzc1IiLCJsZnBmIiwiYWwiLCJhciIsImNmIiwiY29tYkZpbHRlckRlbGF5VGltZXMiLCJjb21iRmlsdGVyUmVzb25hbmNlcyIsImFsbHBhc3NGaWx0ZXJGcmVxcyIsIkpDUmV2ZXJiIiwiX3NjYWxlUm9vbVNpemUiLCJfYWxscGFzc0ZpbHRlcnMiLCJfZmVlZGJhY2tDb21iRmlsdGVycyIsImFmIiwiYWxscGFzcyIsImZiY2YiLCJhcGYiLCJNaWRTaWRlRWZmZWN0IiwibWlkU2VuZCIsInNpZGVTZW5kIiwibWlkUmV0dXJuIiwic2lkZVJldHVybiIsIlBoYXNlciIsIl9maWx0ZXJzTCIsIl9tYWtlRmlsdGVycyIsInN0YWdlcyIsIl9maWx0ZXJzUiIsImNvbm5lY3RUb0ZyZXEiLCJmaWx0ZXJzIiwiU3RlcmVvWEZlZWRiYWNrRWZmZWN0IiwiX2ZlZWRiYWNrTFIiLCJfZmVlZGJhY2tSTCIsIlBpbmdQb25nRGVsYXkiLCJfbGVmdERlbGF5IiwibWF4RGVsYXlUaW1lIiwiX3JpZ2h0RGVsYXkiLCJfcmlnaHRQcmVEZWxheSIsIlBpdGNoU2hpZnQiLCJfZnJlcXVlbmN5IiwiX2RlbGF5QSIsIl9sZm9BIiwiX2RlbGF5QiIsIl9sZm9CIiwiX2Nyb3NzRmFkZSIsIl9jcm9zc0ZhZGVMRk8iLCJfZmVlZGJhY2tEZWxheSIsIl9waXRjaCIsIl93aW5kb3dTaXplIiwid2luZG93U2l6ZSIsImZhY3RvciIsIkJ1ZmZlclNvdXJjZSIsIl9zb3VyY2VTdG9wcGVkIiwiX3NvdXJjZSIsIl9vbmVuZGVkIiwicGxheWJhY2tSYXRlIiwiZmFkZUluIiwiZmFkZU91dCIsIl9vbmVuZGVkVGltZW91dCIsImZhZGVJblRpbWUiLCJjb21wdXRlZER1ciIsImZhZGVPdXRUaW1lIiwiaGVsZER1cmF0aW9uIiwic3RhcnRGYWRlIiwiYWRkaXRpb25hbFRhaWwiLCJOb2lzZSIsIl9wbGF5YmFja1JhdGUiLCJfbm9pc2VCdWZmZXJzIiwicmF0ZSIsIl9ub2lzZUFycmF5cyIsInBpbmsiLCJjaGFubmVsTnVtIiwiYjAiLCJiMSIsImIyIiwiYjMiLCJiNCIsImI1IiwiYjYiLCJ3aGl0ZSIsImJyb3duIiwibGFzdE91dCIsImNyZWF0ZUJ1ZmZlcnMiLCJSZXZlcmIiLCJwcmVEZWxheSIsImdlbmVyYXRlIiwibm9pc2VMIiwibm9pc2VSIiwiU3RlcmVvRmVlZGJhY2tFZmZlY3QiLCJfZmVlZGJhY2tMIiwiX2ZlZWRiYWNrUiIsIlN0ZXJlb1dpZGVuZXIiLCJ3aWR0aCIsIl90d29UaW1lc1dpZHRoTWlkIiwiX3R3b1RpbWVzV2lkdGhTaWRlIiwiX21pZE11bHQiLCJfb25lTWludXNXaWR0aCIsIl9zaWRlTXVsdCIsIlRyZW1vbG8iLCJfYW1wbGl0dWRlTCIsIl9hbXBsaXR1ZGVSIiwiVmlicmF0byIsIkV2ZW50IiwiX3N0YXJ0T2Zmc2V0IiwiX3Byb2JhYmlsaXR5IiwiX2h1bWFuaXplIiwiaHVtYW5pemUiLCJfcmVzY2hlZHVsZUV2ZW50cyIsInN0YXJ0VGljayIsIl9nZXRMb29wRHVyYXRpb24iLCJfdGljayIsInByb2IiLCJ2YXJpYXRpb24iLCJyZXNjaGVkdWxUaW1lIiwibGFzdEV2ZW50IiwibG9vcER1cmF0aW9uIiwiTG9vcCIsIl9ldmVudCIsIml0ZXJhdGlvbnMiLCJpdGVycyIsIlBhcnQiLCJfZm9yRWFjaCIsIl9zdGFydE5vdGUiLCJhdCIsIl9yZXN0YXJ0RXZlbnQiLCJyZW1vdmVBbGwiLCJfc2V0QWxsIiwiX3Rlc3RMb29wQm91bmRyaWVzIiwiUGF0dGVybiIsIl9wYXR0ZXJuIiwicGF0dGVybiIsInZhbHMiLCJTZXF1ZW5jZSIsIl9zdWJkaXZpc2lvbiIsIl9pbmRleFRpbWUiLCJzdWJTdWJkaXZpc2lvbiIsIlB1bHNlT3NjaWxsYXRvciIsIl93aWR0aEdhdGUiLCJfc2F3dG9vdGgiLCJQV01Pc2NpbGxhdG9yIiwiX3B1bHNlIiwibW9kdWxhdGlvbkZyZXF1ZW5jeSIsIl9tb2R1bGF0b3IiLCJGTU9zY2lsbGF0b3IiLCJfY2FycmllciIsIm1vZHVsYXRpb25JbmRleCIsIm1vZHVsYXRpb25UeXBlIiwiaGFybW9uaWNpdHkiLCJfbW9kdWxhdGlvbk5vZGUiLCJBTU9zY2lsbGF0b3IiLCJfbW9kdWxhdGlvblNjYWxlIiwiRmF0T3NjaWxsYXRvciIsIl9vc2NpbGxhdG9ycyIsIl9zcHJlYWQiLCJvc2MiLCJpdGVyYXRvciIsIk9tbmlPc2NpbGxhdG9yIiwiX3NvdXJjZVR5cGUiLCJPbW5pT3NjVHlwZSIsInByZWZpeCIsInN1YnN0ciIsIl9jcmVhdGVOZXdPc2NpbGxhdG9yIiwib3NjVHlwZSIsIk9zY2lsbGF0b3JDb25zdHJ1Y3RvciIsIm9sZE9zYyIsIm1UeXBlIiwiSW5zdHJ1bWVudCIsIl9zeW5jTWV0aG9kIiwidGltZVBvc2l0aW9uIiwib3JpZ2luYWxNZXRob2QiLCJfb3JpZ2luYWxfdHJpZ2dlckF0dGFjayIsIl9vcmlnaW5hbF90cmlnZ2VyUmVsZWFzZSIsIk1vbm9waG9uaWMiLCJwb3J0YW1lbnRvIiwiX3RyaWdnZXJFbnZlbG9wZUF0dGFjayIsInNldE5vdGUiLCJfdHJpZ2dlckVudmVsb3BlUmVsZWFzZSIsImdldExldmVsQXRUaW1lIiwiZW52ZWxvcGUiLCJwb3J0VGltZSIsIlN5bnRoIiwib3NjaWxsYXRvciIsIkFNU3ludGgiLCJtb2R1bGF0aW9uIiwibW9kdWxhdGlvbkVudmVsb3BlIiwiTW9ub1N5bnRoIiwiZmlsdGVyRW52ZWxvcGUiLCJEdW9TeW50aCIsInZvaWNlMCIsInZvaWNlMSIsIl92aWJyYXRvIiwidmlicmF0b1JhdGUiLCJfdmlicmF0b0dhaW4iLCJ2aWJyYXRvQW1vdW50IiwiRk1TeW50aCIsImNhcnJpZXIiLCJtb2R1bGF0b3IiLCJNZW1icmFuZVN5bnRoIiwicGl0Y2hEZWNheSIsIm1heE5vdGUiLCJpbmhhcm1SYXRpb3MiLCJNZXRhbFN5bnRoIiwiX2ZyZXFNdWx0aXBsaWVycyIsIl9hbXBsaXR1ZSIsIl9oaWdocGFzcyIsIl9maWx0ZXJGcmVxU2NhbGVyIiwibXVsdCIsInZlbCIsIm9jdHMiLCJOb2lzZVN5bnRoIiwibm9pc2UiLCJQbHVja1N5bnRoIiwiX25vaXNlIiwiYXR0YWNrTm9pc2UiLCJfbGZjZiIsImRlbGF5QW1vdW50IiwiUG9seVN5bnRoIiwicG9seXBob255IiwiTUFYX1BPTFlQSE9OWSIsInZvaWNlcyIsIl90cmlnZ2VycyIsInYiLCJ2b2ljZSIsIm5vdGVzIiwib2xkZXN0IiwiSlNPTiIsInN0cmluZ2lmeSIsInN0cmluZ2lmaWVkIiwiZGVzYyIsInJlbGVhc2VBbGwiLCJTYW1wbGVyIiwidXJsTWFwIiwiaXNOYU4iLCJfYWN0aXZlU291cmNlcyIsIl9maW5kQ2xvc2VzdCIsImRpZmZlcmVuY2UiLCJjbG9zZXN0Tm90ZSIsInNvdXJjZSIsInNvdXJjZXMiLCJzZXRXYXZlVGFibGUiLCJjcmVhdGVXYXZlVGFibGUiLCJHYWluVG9BdWRpbyIsIk5vcm1hbGl6ZSIsImlucHV0TWluIiwiaW5wdXRNYXgiLCJfaW5wdXRNaW4iLCJfaW5wdXRNYXgiLCJfZGl2IiwiVHJhbnNwb3J0VGltZWxpbmVTaWduYWwiLCJfb3V0cHV0U2lnIiwiX2xhc3RWYWwiLCJfb25UaWNrIiwiX2JpbmRBbmNob3JWYWx1ZSIsIl9hbmNob3JWYWx1ZSIsIl9zeW5jZWRDYWxsYmFjayIsIkdyYWluUGxheWVyIiwiZ3JhaW5TaXplIiwiX2dyYWluU2l6ZSIsIl9vdmVybGFwIiwib3ZlcmxhcCIsIl9vbnN0b3AiLCJfb2Zmc2V0Iiwic2VlayIsIlBsYXllciIsImF1dG9zdGFydCIsIl9lbGFwc2VkVGltZSIsInJldHJpZ2dlciIsIl9vblNvdXJjZUVuZCIsImNvbXB1dGVkRHVyYXRpb24iLCJfc3RvcEF0TmV4dEl0ZXJhdGlvbiIsIm5leHRTdG9wIiwicG9zaXRpb24iLCJzdG9wVGltZSIsIlBsYXllcnMiLCJfcGxheWVycyIsIl9mYWRlSW4iLCJfZmFkZU91dCIsInBsYXllciIsInBsYXlpbmciLCJwbGF5ZXJOYW1lIiwic3RvcEFsbCIsIlVzZXJNZWRpYSIsIl9tZWRpYVN0cmVhbSIsIl9zdHJlYW0iLCJfZGV2aWNlIiwibGFiZWxPcklkIiwiZW51bWVyYXRlRGV2aWNlcyIsImRldmljZXMiLCJkZXZpY2UiLCJmaW5kIiwibGFiZWwiLCJkZXZpY2VJZCIsImNvbnN0cmFpbnRzIiwiYXVkaW8iLCJlY2hvQ2FuY2VsbGF0aW9uIiwibWVkaWFEZXZpY2VzIiwiZ2V0VXNlck1lZGlhIiwic3RyZWFtIiwiY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UiLCJnZXRBdWRpb1RyYWNrcyIsInRyYWNrIiwia2luZCIsImFjdGl2ZSIsImdyb3VwSWQiLCJNaWRpIiwiZmFjdG9yeSIsImdsb2JhbCIsInJlcXVpcmUiLCJoIiwiY29kZSIsIjEiLCJjaGFyQ29kZUF0IiwidG9CeXRlQXJyYXkiLCJmcm9tQnl0ZUFycmF5IiwiYmFzZTY0anMiLCIyIiwiMyIsIlRZUEVEX0FSUkFZX1NVUFBPUlQiLCJ3cml0ZSIsImlzQnVmZmVyIiwiWSIsIkFycmF5QnVmZmVyIiwiYnl0ZUxlbmd0aCIsIl9hdWdtZW50IiwiZGF0YSIsIl9fcHJvdG9fXyIsIl9pc0J1ZmZlciIsInBvb2xTaXplIiwiWiIsIlIiLCJVIiwidSIsIk51bWJlciIsIlYiLCJ3IiwiUyIsIlQiLCJBIiwiVyIsIiQiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIlgiLCJOIiwiUCIsImFhIiwiTyIsIlNsb3dCdWZmZXIiLCJJTlNQRUNUX01BWF9CWVRFUyIsImZvbyIsInN1YmFycmF5IiwiY29tcGFyZSIsImlzRW5jb2RpbmciLCJlcXVhbHMiLCJpbnNwZWN0IiwicmVhZFVJbnQ4Iiwid3JpdGVVSW50OCIsInRvSlNPTiIsIl9hcnIiLCJyZWFkVUludExFIiwicmVhZFVJbnRCRSIsInJlYWRVSW50MTZMRSIsInJlYWRVSW50MTZCRSIsInJlYWRVSW50MzJMRSIsInJlYWRVSW50MzJCRSIsInJlYWRJbnRMRSIsInJlYWRJbnRCRSIsInJlYWRJbnQ4IiwicmVhZEludDE2TEUiLCJyZWFkSW50MTZCRSIsInJlYWRJbnQzMkxFIiwicmVhZEludDMyQkUiLCJyZWFkRmxvYXRMRSIsInJlYWQiLCJyZWFkRmxvYXRCRSIsInJlYWREb3VibGVMRSIsInJlYWREb3VibGVCRSIsIndyaXRlVUludExFIiwid3JpdGVVSW50QkUiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVVSW50MTZCRSIsIndyaXRlVUludDMyTEUiLCJ3cml0ZVVJbnQzMkJFIiwid3JpdGVJbnRMRSIsIndyaXRlSW50QkUiLCJ3cml0ZUludDgiLCJ3cml0ZUludDE2TEUiLCJ3cml0ZUludDE2QkUiLCJ3cml0ZUludDMyTEUiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZUZsb2F0TEUiLCJ3cml0ZUZsb2F0QkUiLCJ3cml0ZURvdWJsZUxFIiwid3JpdGVEb3VibGVCRSIsIl9zZXQiLCJmaWxsIiwidG9BcnJheUJ1ZmZlciIsIl8iLCJ0b0xvY2FsZVN0cmluZyIsInNlbGYiLCJiYXNlNjQtanMiLCJpZWVlNzU0IiwiaXNhcnJheSIsIjQiLCJFUzZQcm9taXNlIiwiY2EiLCJlYSIsIl9yZXN1bHQiLCJpYSIsImdhIiwiaGEiLCJfbGFiZWwiLCJfb25lcnJvciIsImZhIiwiX3N1YnNjcmliZXJzIiwiamEiLCJrYSIsIl9pbnN0YW5jZUNvbnN0cnVjdG9yIiwicHJvbWlzZSIsIl9yZW1haW5pbmciLCJfZW51bWVyYXRlIiwiZGEiLCJNdXRhdGlvbk9ic2VydmVyIiwiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIsImJhIiwiVWludDhDbGFtcGVkQXJyYXkiLCJpbXBvcnRTY3JpcHRzIiwiTWVzc2FnZUNoYW5uZWwiLCJuZXh0VGljayIsImNyZWF0ZVRleHROb2RlIiwib2JzZXJ2ZSIsImNoYXJhY3RlckRhdGEiLCJwb3J0MSIsInBvcnQyIiwicnVuT25Mb29wIiwicnVuT25Db250ZXh0Iiwic3Vic3RyaW5nIiwiX2VhY2hFbnRyeSIsIl9zZXR0bGVkQXQiLCJfd2lsbFNldHRsZUF0IiwiYWxsIiwicmFjZSIsInJlamVjdCIsIl9zZXRTY2hlZHVsZXIiLCJfc2V0QXNhcCIsIl9hc2FwIiwicG9seWZpbGwiLCJGdW5jdGlvbiIsImNhc3QiLCJfcHJvY2VzcyIsIjUiLCJmZXRjaEpzb25wIiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInJlbW92ZUNoaWxkIiwianNvbnBDYWxsYmFjayIsImpzb25wQ2FsbGJhY2tGdW5jdGlvbiIsIkRhdGUiLCJvayIsImpzb24iLCJzZXRBdHRyaWJ1dGUiLCJjaGFyc2V0IiwiYXBwZW5kQ2hpbGQiLCI2IiwiY3JlYXRlRWxlbWVudE5TIiwiSFRNTEVsZW1lbnQiLCJzYWZhcmkiLCJzZXRJbW1lZGlhdGUiLCJyZXZva2VPYmplY3RVUkwiLCJyZWFkeVN0YXRlIiwiSU5JVCIsImhyZWYiLCJkb3dubG9hZCIsIk1vdXNlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiRE9ORSIsIkZpbGVSZWFkZXIiLCJvbmxvYWRlbmQiLCJyZXN1bHQiLCJsb2NhdGlvbiIsInJlYWRBc0RhdGFVUkwiLCJtc1NhdmVPck9wZW5CbG9iIiwiV1JJVElORyIsIm9ud3JpdGVzdGFydCIsIm9ucHJvZ3Jlc3MiLCJvbndyaXRlIiwib25hYm9ydCIsIm9ud3JpdGVlbmQiLCJjb250ZW50Iiwic2F2ZUFzIiwiNyIsIk5hTiIsIkxOMiIsIjgiLCI5Iiwib2EiLCJuYSIsIm1hIiwibGEiLCJxYSIsInJhIiwic29ydCIsInBhIiwibGlidGVzcyIsIkdsdVRlc3NlbGF0b3IiLCJ3aW5kaW5nUnVsZSIsIkdMVV9URVNTX1dJTkRJTkdfT0REIiwiR0xVX1RFU1NfV0lORElOR19OT05aRVJPIiwiR0xVX1RFU1NfV0lORElOR19QT1NJVElWRSIsIkdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkUiLCJHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFfVFdPIiwicHJpbWl0aXZlVHlwZSIsIkdMX0xJTkVfTE9PUCIsIkdMX1RSSUFOR0xFUyIsIkdMX1RSSUFOR0xFX1NUUklQIiwiR0xfVFJJQU5HTEVfRkFOIiwiZXJyb3JUeXBlIiwiR0xVX1RFU1NfTUlTU0lOR19CRUdJTl9QT0xZR09OIiwiR0xVX1RFU1NfTUlTU0lOR19FTkRfUE9MWUdPTiIsIkdMVV9URVNTX01JU1NJTkdfQkVHSU5fQ09OVE9VUiIsIkdMVV9URVNTX01JU1NJTkdfRU5EX0NPTlRPVVIiLCJHTFVfVEVTU19DT09SRF9UT09fTEFSR0UiLCJHTFVfVEVTU19ORUVEX0NPTUJJTkVfQ0FMTEJBQ0siLCJnbHVFbnVtIiwiR0xVX1RFU1NfTUVTSCIsIkdMVV9URVNTX1RPTEVSQU5DRSIsIkdMVV9URVNTX1dJTkRJTkdfUlVMRSIsIkdMVV9URVNTX0JPVU5EQVJZX09OTFkiLCJHTFVfSU5WQUxJRF9FTlVNIiwiR0xVX0lOVkFMSURfVkFMVUUiLCJHTFVfVEVTU19CRUdJTiIsIkdMVV9URVNTX1ZFUlRFWCIsIkdMVV9URVNTX0VORCIsIkdMVV9URVNTX0VSUk9SIiwiR0xVX1RFU1NfRURHRV9GTEFHIiwiR0xVX1RFU1NfQ09NQklORSIsIkdMVV9URVNTX0JFR0lOX0RBVEEiLCJHTFVfVEVTU19WRVJURVhfREFUQSIsIkdMVV9URVNTX0VORF9EQVRBIiwiR0xVX1RFU1NfRVJST1JfREFUQSIsIkdMVV9URVNTX0VER0VfRkxBR19EQVRBIiwiR0xVX1RFU1NfQ09NQklORV9EQVRBIiwiZ2x1RGVsZXRlVGVzcyIsImdsdVRlc3NQcm9wZXJ0eSIsImdsdUdldFRlc3NQcm9wZXJ0eSIsImdsdVRlc3NOb3JtYWwiLCJnbHVUZXNzQ2FsbGJhY2siLCJnbHVUZXNzVmVydGV4IiwiZ2x1VGVzc0JlZ2luUG9seWdvbiIsImdsdVRlc3NCZWdpbkNvbnRvdXIiLCJnbHVUZXNzRW5kQ29udG91ciIsImdsdVRlc3NFbmRQb2x5Z29uIiwiMTAiLCJvcGVudHlwZSIsInRhYmxlIiwiVWludDE2QXJyYXkiLCJ0cmFucyIsInNvdXJjZUluZGV4IiwidGFnIiwiYml0Y291bnQiLCJkZXN0TGVuIiwibHRyZWUiLCJkdHJlZSIsInZlIiwidWUiLCJzZSIsInRlIiwia2UiLCJvZSIsInBlIiwicWUiLCJyZSIsImxlIiwieDEiLCJ5MSIsIngyIiwieTIiLCJjb21tYW5kcyIsInN0cm9rZSIsInN0cm9rZVdpZHRoIiwidGFibGVOYW1lIiwiZmllbGRzIiwiZm9ybWF0IiwiZ2x5cGhzIiwieGUiLCJhc3NlcnQiLCJzY3JpcHQiLCJkZWZhdWx0TGFuZ1N5cyIsInJlcUZlYXR1cmVJbmRleCIsImZlYXR1cmVJbmRleGVzIiwibGFuZ1N5c1JlY29yZHMiLCJsYW5nU3lzIiwiZmVhdHVyZSIsImZlYXR1cmVQYXJhbXMiLCJsb29rdXBMaXN0SW5kZXhlcyIsImxvb2t1cFR5cGUiLCJsb29rdXBGbGFnIiwic3VidGFibGVzIiwiZ2V0VWludDgiLCJnZXRVaW50MTYiLCJnZXRVaW50MzIiLCJnZXRJbnQxNiIsInJlbGF0aXZlT2Zmc2V0IiwiZ2x5cGhJbmRleCIsImZvbnQiLCJjbWFwIiwiZW5jb2RpbmciLCJuYW1lcyIsIlFlIiwibnVtYmVyT2ZHbHlwaHMiLCJnbHlwaE5hbWVJbmRleCIsImJpbmRDb25zdHJ1Y3RvclZhbHVlcyIsInBhdGgiLCJjb25maWd1cmFibGUiLCJMZSIsImdldENhcmQxNiIsImdldEJ5dGUiLCJnZXRPZmZzZXQiLCJnZXRCeXRlcyIsIm9iamVjdHMiLCJlbmRPZmZzZXQiLCJwYXJzZUJ5dGUiLCJQYXJzZXIiLCJOZSIsIm9wIiwic2EiLCJUZSIsInRhIiwiVWUiLCJEYXRhVmlldyIsIl9zdWJycyIsIl9zdWJyc0JpYXMiLCJwcml2YXRlIiwiX2RlZmF1bHRXaWR0aFgiLCJkZWZhdWx0V2lkdGhYIiwiX25vbWluYWxXaWR0aFgiLCJub21pbmFsV2lkdGhYIiwic3VicnMiLCJfcHJpdmF0ZURpY3QiLCJ4YSIsImNsb3NlUGF0aCIsIm1vdmVUbyIsImlzQ0lERm9udCIsInRhYmxlcyIsImNmZiIsInRvcERpY3QiLCJfZmRTZWxlY3QiLCJfZmRBcnJheSIsInBvcCIsImxpbmVUbyIsImN1cnZlVG8iLCJnc3VicnNCaWFzIiwiZ3N1YnJzIiwiYWR2YW5jZVdpZHRoIiwiQWEiLCJEYSIsIkVhIiwiSWUiLCJSZWNvcmQiLCJkaWN0IiwiRmEiLCJ0b3BEaWN0cyIsIkphIiwiWGEiLCJZYSIsImRmIiwiZmYiLCJlZiIsIiRhIiwiX2EiLCJtYiIsIm5iIiwib2IiLCJwYiIsIlRhYmxlIiwibnVtVGFibGVzIiwic2VhcmNoUmFuZ2UiLCJlbnRyeVNlbGVjdG9yIiwicmFuZ2VTaGlmdCIsInNpemVPZiIsImFyZ3VtZW50IiwiZW5jb2RlIiwicWIiLCJjaGFyVG9HbHlwaEluZGV4IiwiZ2V0TWV0cmljcyIsInRiIiwidWIiLCJ2YiIsIndiIiwieGIiLCJ5YiIsInpiIiwiQWIiLCJzdWJzdEZvcm1hdCIsIkNiIiwiRGIiLCJFYiIsIkZiIiwicGFyc2VTaG9ydCIsIkdiIiwibnVtYmVyT2ZDb250b3VycyIsIl94TWluIiwiX3lNaW4iLCJfeE1heCIsIl95TWF4IiwiZW5kUG9pbnRJbmRpY2VzIiwicGFyc2VVU2hvcnQiLCJpbnN0cnVjdGlvbkxlbmd0aCIsImluc3RydWN0aW9ucyIsIm9uQ3VydmUiLCJsYXN0UG9pbnRPZkNvbnRvdXIiLCJwb2ludHMiLCJpc0NvbXBvc2l0ZSIsImNvbXBvbmVudHMiLCJ4U2NhbGUiLCJzY2FsZTAxIiwic2NhbGUxMCIsInlTY2FsZSIsImR5IiwibWF0Y2hlZFBvaW50cyIsInBhcnNlQ2hhciIsInBhcnNlRjJEb3QxNCIsIkhiIiwiSmIiLCJJYiIsInF1YWRyYXRpY0N1cnZlVG8iLCJLYiIsImdldFBhdGgiLCJNYiIsImdldENvbW1hbmRzIiwidmYiLCJfZnBnbVN0YXRlIiwiX3ByZXBTdGF0ZSIsIl9lcnJvclN0YXRlIiwiTmIiLCJPYiIsInNpZ24iLCJQYiIsIlFiIiwiUmIiLCJTYiIsIlRiIiwiYXhpcyIsInNsb3BlIiwibm9ybWFsU2xvcGUiLCJmcmVlemUiLCJVYiIsInhmIiwieWYiLCJWYiIsInhvIiwieW8iLCJwcmV2UG9pbnRPbkNvbnRvdXIiLCJuZXh0UG9pbnRPbkNvbnRvdXIiLCJ4VG91Y2hlZCIsInlUb3VjaGVkIiwicHJldmVudEV4dGVuc2lvbnMiLCJXYiIsImVudiIsInN0YWNrIiwicHJvZyIsInpwMCIsInpwMSIsInpwMiIsInJwMCIsInJwMSIsInJwMiIsImZ2IiwicHYiLCJkcHYiLCJYYiIsInRab25lIiwiZ1pvbmUiLCJZYiIsImlwIiwiWmIiLCJERUJVRyIsIiRiIiwiX2IiLCJhYyIsInoyIiwiejEiLCJiYyIsInhjIiwiR2MiLCJ6MCIsImRpc3RhbmNlIiwiemYiLCJzZXRSZWxhdGl2ZSIsInRvdWNoIiwiSGMiLCJ0b3VjaGVkIiwicHJldlRvdWNoZWQiLCJuZXh0VG91Y2hlZCIsImludGVycG9sYXRlIiwiSWMiLCJKYyIsImNvbnRvdXJzIiwiS2MiLCJOYyIsIlFjIiwiY3Z0IiwiY3ZDdXRJbiIsIlhjIiwiWWMiLCJtZCIsInBwZW0iLCJkZWx0YUJhc2UiLCJkZWx0YVNoaWZ0IiwieGQiLCJ6ZCIsIkdkIiwiTmQiLCJPZCIsIlBkIiwibWluRGlzIiwiUWQiLCJlbXB0eSIsImZhbWlseU5hbWUiLCJzdHlsZU5hbWUiLCJ1bml0c1BlckVtIiwiYXNjZW5kZXIiLCJkZXNjZW5kZXIiLCJmb250RmFtaWx5IiwiZW4iLCJmb250U3ViZmFtaWx5IiwiZnVsbE5hbWUiLCJwb3N0U2NyaXB0TmFtZSIsImRlc2lnbmVyIiwiZGVzaWduZXJVUkwiLCJtYW51ZmFjdHVyZXIiLCJtYW51ZmFjdHVyZXJVUkwiLCJsaWNlbnNlIiwibGljZW5zZVVSTCIsImRlc2NyaXB0aW9uIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiY3JlYXRlZFRpbWVzdGFtcCIsIm9zMiIsInVzV2VpZ2h0Q2xhc3MiLCJ3ZWlnaHRDbGFzcyIsInVzV2VpZ2h0Q2xhc3NlcyIsIk1FRElVTSIsInVzV2lkdGhDbGFzcyIsIndpZHRoQ2xhc3MiLCJ1c1dpZHRoQ2xhc3NlcyIsImZzU2VsZWN0aW9uIiwiZnNTZWxlY3Rpb25WYWx1ZXMiLCJSRUdVTEFSIiwiU2UiLCJHbHlwaFNldCIsInN1YnN0aXR1dGlvbiIsIl9oaW50aW5nIiwib3V0bGluZXNGb3JtYXQiLCJSZCIsIlNkIiwiVGQiLCJwYXJzZVRhZyIsInBhcnNlRml4ZWQiLCJza2lwIiwiVWQiLCJjb29yZGluYXRlcyIsIlZkIiwiY2UiLCJyZWFkRmlsZSIsIm1lc3NhZ2UiLCJlZSIsImdldFRhZyIsImdldFVMb25nIiwiY2hlY2tzdW0iLCJjb21wcmVzc2lvbiIsImdlIiwiY29tcHJlc3NlZExlbmd0aCIsIndlIiwiaGUiLCJnZXRVU2hvcnQiLCJmZSIsIk1lIiwicGFyc2UiLCJwYXJzZVNob3J0TGlzdCIsImZwZ20iLCJwYXJzZUJ5dGVMaXN0IiwiaGVhZCIsIldlIiwiaW5kZXhUb0xvY0Zvcm1hdCIsImhoZWEiLCJYZSIsIm51bWJlck9mSE1ldHJpY3MiLCJaZSIsIm1heHAiLCIkZSIsIm51bUdseXBocyIsImpmIiwicG9zdCIsImtmIiwiZ2x5cGhOYW1lcyIsInByZXAiLCJnZiIsIkhmIiwiVmUiLCJZZSIsImdseXBoSW5kZXhNYXAiLCJhZGRVbmljb2RlIiwiY2ZmRW5jb2RpbmciLCJnbHlwaEluZGV4VG9OYW1lIiwia2VybmluZ1BhaXJzIiwiR2YiLCJncG9zIiwiRmYiLCJpbml0IiwiZ3N1YiIsIm9mIiwiZnZhciIsIkNmIiwibWV0YSIsInBmIiwibWV0YXMiLCJjb2RlUG9pbnRBdCIsIm1lIiwibmUiLCJpc0VtcHR5IiwiYWRkUG9pbnQiLCJhZGRYIiwiYWRkWSIsImFkZEJlemllciIsImFkZFF1YWQiLCJiZXppZXJDdXJ2ZVRvIiwicXVhZFRvIiwiZ2V0Qm91bmRpbmdCb3giLCJkcmF3IiwiYmVnaW5QYXRoIiwiZmlsbFN0eWxlIiwic3Ryb2tlU3R5bGUiLCJsaW5lV2lkdGgiLCJ0b1BhdGhEYXRhIiwidG9TVkciLCJ0b0RPTUVsZW1lbnQiLCJ6ZSIsIkFlIiwiQmUiLCJDZSIsIkJZVEUiLCJDSEFSIiwiQ0hBUkFSUkFZIiwiVVNIT1JUIiwiU0hPUlQiLCJVSU5UMjQiLCJVTE9ORyIsIkxPTkciLCJGSVhFRCIsIkZXT1JEIiwiVUZXT1JEIiwiTE9OR0RBVEVUSU1FIiwiVEFHIiwiQ2FyZDgiLCJDYXJkMTYiLCJPZmZTaXplIiwiU0lEIiwiTlVNQkVSIiwiTlVNQkVSMTYiLCJOVU1CRVIzMiIsIlJFQUwiLCJOQU1FIiwiU1RSSU5HIiwiVVRGOCIsIlVURjE2IiwiRGUiLCJ4LW1hYy1jcm9hdGlhbiIsIngtbWFjLWN5cmlsbGljIiwieC1tYWMtZ2FlbGljIiwieC1tYWMtZ3JlZWsiLCJ4LW1hYy1pY2VsYW5kaWMiLCJ4LW1hYy1pbnVpdCIsIngtbWFjLWNlIiwibWFjaW50b3NoIiwieC1tYWMtcm9tYW5pYW4iLCJ4LW1hYy10dXJraXNoIiwiTUFDU1RSSU5HIiwiRWUiLCJGZSIsIldlYWtNYXAiLCJHZSIsIlZBUkRFTFRBUyIsIklOREVYIiwiT0JKRUNUIiwiRElDVCIsIk9QRVJBTkQiLCJPUEVSQVRPUiIsIk9QIiwiSGUiLCJDSEFSU1RSSU5HIiwiVEFCTEUiLCJSRUNPUkQiLCJMSVRFUkFMIiwiQ292ZXJhZ2UiLCJTY3JpcHRMaXN0IiwiRmVhdHVyZUxpc3QiLCJMb29rdXBMaXN0IiwidXNob3J0TGlzdCIsInRhYmxlTGlzdCIsInJlY29yZExpc3QiLCJKZSIsImJ5dGUiLCJ1U2hvcnQiLCJzaG9ydCIsInVMb25nIiwiZml4ZWQiLCJsb25nRGF0ZVRpbWUiLCJnZXRJbnQ4IiwicGFyc2VDYXJkOCIsInBhcnNlQ2FyZDE2IiwicGFyc2VTSUQiLCJwYXJzZU9mZnNldDE2IiwicGFyc2VVTG9uZyIsInBhcnNlT2Zmc2V0MzIiLCJwYXJzZVN0cmluZyIsInBhcnNlTG9uZ0RhdGVUaW1lIiwicGFyc2VWZXJzaW9uIiwicGFyc2VVTG9uZ0xpc3QiLCJwYXJzZU9mZnNldDE2TGlzdCIsInBhcnNlVVNob3J0TGlzdCIsInBhcnNlTGlzdCIsInBhcnNlTGlzdDMyIiwicGFyc2VSZWNvcmRMaXN0IiwicGFyc2VSZWNvcmRMaXN0MzIiLCJwYXJzZVN0cnVjdCIsInBhcnNlVmFsdWVSZWNvcmQiLCJ4UGxhY2VtZW50IiwieVBsYWNlbWVudCIsInhBZHZhbmNlIiwieUFkdmFuY2UiLCJ4UGxhRGV2aWNlIiwieVBsYURldmljZSIsInhBZHZEZXZpY2UiLCJ5QWR2RGV2aWNlIiwicGFyc2VWYWx1ZVJlY29yZExpc3QiLCJwYXJzZVBvaW50ZXIiLCJwYXJzZVBvaW50ZXIzMiIsInBhcnNlTGlzdE9mTGlzdHMiLCJwYXJzZUNvdmVyYWdlIiwicmFuZ2VzIiwicGFyc2VDbGFzc0RlZiIsInN0YXJ0R2x5cGgiLCJjbGFzc2VzIiwiY2xhc3NJZCIsImxpc3QiLCJsaXN0MzIiLCJyZWNvcmRMaXN0MzIiLCJwb2ludGVyIiwicG9pbnRlcjMyIiwib2Zmc2V0MTYiLCJ1U2hvcnRMaXN0Iiwib2Zmc2V0MzIiLCJ1TG9uZ0xpc3QiLCJzdHJ1Y3QiLCJjb3ZlcmFnZSIsImNsYXNzRGVmIiwiS2UiLCJyZXNlcnZlZCIsInBhcnNlU2NyaXB0TGlzdCIsInBhcnNlRmVhdHVyZUxpc3QiLCJwYXJzZUxvb2t1cExpc3QiLCJtYXJrRmlsdGVyaW5nU2V0IiwicGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3QiLCJjb25kaXRpb25TZXRPZmZzZXQiLCJmZWF0dXJlVGFibGVTdWJzdGl0dXRpb25PZmZzZXQiLCJnZXRDYXJkOCIsImdldFNob3J0IiwiZ2V0Rml4ZWQiLCJieXRlc1RvU3RyaW5nIiwibGFuZ3VhZ2UiLCJncm91cENvdW50Iiwic2VnQ291bnQiLCJtYWtlIiwidW5pY29kZSIsInVuaWNvZGVzIiwiZ2x5cGhJZCIsInNlZ0NvdW50WDIiLCJjbWFwNExlbmd0aCIsImNtYXAxMk9mZnNldCIsIk9lIiwiUGUiLCJuYW1lVG9HbHlwaEluZGV4IiwiUmUiLCJsaW5lIiwieE1pbiIsInlNaW4iLCJ4TWF4IiwieU1heCIsImhpbnRpbmciLCJnZXRDb250b3VycyIsImxlZnRTaWRlQmVhcmluZyIsInJpZ2h0U2lkZUJlYXJpbmciLCJkcmF3UG9pbnRzIiwiYXJjIiwiZHJhd01ldHJpY3MiLCJnbHlwaExvYWRlciIsInR0ZkdseXBoTG9hZGVyIiwiY2ZmR2x5cGhMb2FkZXIiLCJmb3JtYXRNYWpvciIsImZvcm1hdE1pbm9yIiwib2Zmc2V0U2l6ZSIsInJvcyIsImZkQXJyYXkiLCJmZFNlbGVjdCIsInlhIiwic3VicnNCaWFzIiwiY2hhclN0cmluZ3MiLCJuR2x5cGhzIiwidmEiLCJ3YSIsIndlaWdodCIsIndlaWdodE5hbWUiLCJmb250QkJveCIsImZvbnRNYXRyaXgiLCJoZWFkZXIiLCJuYW1lSW5kZXgiLCJDYSIsInRvcERpY3RJbmRleCIsImdsb2JhbFN1YnJJbmRleCIsImNoYXJzZXRzIiwiSWEiLCJjaGFyU3RyaW5nc0luZGV4IiwiS2EiLCJwcml2YXRlRGljdCIsIkxhIiwic3RyaW5nSW5kZXgiLCJzdHJpbmdzIiwiR2EiLCJmb250UmV2aXNpb24iLCJjaGVja1N1bUFkanVzdG1lbnQiLCJtYWdpY051bWJlciIsImZsYWdzIiwiY3JlYXRlZCIsIm1vZGlmaWVkIiwibWFjU3R5bGUiLCJsb3dlc3RSZWNQUEVNIiwiZm9udERpcmVjdGlvbkhpbnQiLCJnbHlwaERhdGFGb3JtYXQiLCJnZXRUaW1lIiwibGluZUdhcCIsImFkdmFuY2VXaWR0aE1heCIsIm1pbkxlZnRTaWRlQmVhcmluZyIsIm1pblJpZ2h0U2lkZUJlYXJpbmciLCJ4TWF4RXh0ZW50IiwiY2FyZXRTbG9wZVJpc2UiLCJjYXJldFNsb3BlUnVuIiwiY2FyZXRPZmZzZXQiLCJtZXRyaWNEYXRhRm9ybWF0IiwibWF4UG9pbnRzIiwibWF4Q29udG91cnMiLCJtYXhDb21wb3NpdGVQb2ludHMiLCJtYXhDb21wb3NpdGVDb250b3VycyIsIm1heFpvbmVzIiwibWF4VHdpbGlnaHRQb2ludHMiLCJtYXhTdG9yYWdlIiwibWF4RnVuY3Rpb25EZWZzIiwibWF4SW5zdHJ1Y3Rpb25EZWZzIiwibWF4U3RhY2tFbGVtZW50cyIsIm1heFNpemVPZkluc3RydWN0aW9ucyIsIm1heENvbXBvbmVudEVsZW1lbnRzIiwibWF4Q29tcG9uZW50RGVwdGgiLCJfZSIsIjAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiLCIyMCIsIjIxIiwiMjIiLCIyMyIsIjI0IiwiMjUiLCIyNiIsIjI3IiwiMjgiLCIyOSIsIjMwIiwiMzEiLCIzMiIsIjMzIiwiMzQiLCIzNSIsIjM2IiwiMzciLCIzOCIsIjM5IiwiNDAiLCI0MSIsIjQyIiwiNDMiLCI0NCIsIjQ1IiwiNDYiLCI0NyIsIjQ4IiwiNDkiLCI1MCIsIjUxIiwiNTIiLCI1MyIsIjU0IiwiNTUiLCI1NiIsIjU3IiwiNTgiLCI1OSIsIjYwIiwiNjEiLCI2MiIsIjYzIiwiNjQiLCI2NSIsIjY2IiwiNjciLCI2OCIsIjY5IiwiNzAiLCI3MSIsIjcyIiwiNzMiLCI3NCIsIjc1IiwiNzYiLCI3NyIsIjc4IiwiNzkiLCI4MCIsIjgxIiwiODIiLCI4MyIsIjg0IiwiODUiLCI4NiIsIjg3IiwiODgiLCI4OSIsIjkwIiwiOTEiLCI5MiIsIjkzIiwiOTQiLCIxMjgiLCIxMjkiLCIxMzAiLCIxMzEiLCIxMzIiLCIxMzMiLCIxMzQiLCIxMzUiLCIxMzYiLCIxMzciLCIxMzgiLCIxMzkiLCIxNDAiLCIxNDEiLCIxNDIiLCIxNDMiLCIxNDQiLCIxNDUiLCIxNDYiLCIxNDciLCIxNDgiLCIxNDkiLCIxNTAiLCIxNTEiLCJiZiIsIjEwNzgiLCIxMDUyIiwiMTE1NiIsIjExMTgiLCI1MTIxIiwiMTUzNjEiLCIzMDczIiwiMjA0OSIsIjExMjY1IiwiMTMzMTMiLCIxMjI4OSIsIjQwOTciLCI2MTQ1IiwiODE5MyIsIjE2Mzg1IiwiMTAyNSIsIjEwMjQxIiwiNzE2OSIsIjE0MzM3IiwiOTIxNyIsIjEwNjciLCIxMTAxIiwiMjA5MiIsIjEwNjgiLCIxMTMzIiwiMTA2OSIsIjEwNTkiLCIyMTE3IiwiMTA5MyIsIjgyMTgiLCI1MTQ2IiwiMTE1MCIsIjEwMjYiLCIxMDI3IiwiMzA3NiIsIjUxMjQiLCIyMDUyIiwiNDEwMCIsIjEwMjgiLCIxMTU1IiwiMTA1MCIsIjQxMjIiLCIxMDI5IiwiMTAzMCIsIjExNjQiLCIxMTI1IiwiMjA2NyIsIjEwNDMiLCIzMDgxIiwiMTAyNDkiLCI0MTA1IiwiOTIyNSIsIjE2MzkzIiwiNjE1MyIsIjgyMDEiLCIxNzQxNyIsIjUxMjkiLCIxMzMyMSIsIjE4NDQxIiwiNzE3NyIsIjExMjczIiwiMjA1NyIsIjEwMzMiLCIxMjI5NyIsIjEwNjEiLCIxMDgwIiwiMTEyNCIsIjEwMzUiLCIyMDYwIiwiMzA4NCIsIjEwMzYiLCI1MTMyIiwiNjE1NiIsIjQxMDgiLCIxMTIyIiwiMTExMCIsIjEwNzkiLCIzMDc5IiwiMTAzMSIsIjUxMjciLCI0MTAzIiwiMjA1NSIsIjEwMzIiLCIxMTM1IiwiMTA5NSIsIjExMjgiLCIxMDM3IiwiMTA4MSIsIjEwMzgiLCIxMDM5IiwiMTEzNiIsIjEwNTciLCIxMTE3IiwiMjE0MSIsIjIxMDgiLCIxMDc2IiwiMTA3NyIsIjEwNDAiLCIyMDY0IiwiMTA0MSIsIjEwOTkiLCIxMDg3IiwiMTEwNyIsIjExNTgiLCIxMTU5IiwiMTA4OSIsIjExMTEiLCIxMDQyIiwiMTA4OCIsIjExMDgiLCIxMDYyIiwiMTA2MyIsIjIwOTQiLCIxMTM0IiwiMTA3MSIsIjIxMTAiLCIxMDg2IiwiMTEwMCIsIjEwODIiLCIxMTUzIiwiMTE0NiIsIjExMDIiLCIxMTQ4IiwiMTEwNCIsIjIxMjgiLCIxMTIxIiwiMTA0NCIsIjIwNjgiLCIxMTU0IiwiMTA5NiIsIjExMjMiLCIxMDQ1IiwiMTA0NiIsIjIwNzAiLCIxMDk0IiwiMTEzMSIsIjIxNTUiLCIzMTc5IiwiMTA0OCIsIjEwNDciLCIxMDQ5IiwiOTI3NSIsIjQxNTUiLCI1MTc5IiwiMzEzMSIsIjEwODMiLCIyMTA3IiwiODI1MSIsIjYyMDMiLCI3MjI3IiwiMTEwMyIsIjcxOTQiLCIzMDk4IiwiNjE3MCIsIjIwNzQiLCIxMTMyIiwiMTA3NCIsIjExMTUiLCIxMDUxIiwiMTA2MCIsIjExMjc0IiwiMTYzOTQiLCIxMzMyMiIsIjkyMjYiLCI1MTMwIiwiNzE3OCIsIjEyMjk4IiwiMTc0MTgiLCI0MTA2IiwiMTg0NDIiLCIyMDU4IiwiMTk0NjYiLCI2MTU0IiwiMTUzNzAiLCIxMDI1MCIsIjIwNDkwIiwiMzA4MiIsIjEwMzQiLCIyMTUxNCIsIjE0MzQ2IiwiODIwMiIsIjIwNzciLCIxMDUzIiwiMTExNCIsIjEwNjQiLCIyMTQzIiwiMTA5NyIsIjEwOTIiLCIxMDk4IiwiMTA1NCIsIjExMDUiLCIxMDU1IiwiMTA5MCIsIjExNTIiLCIxMDU4IiwiMTA3MCIsIjEwNTYiLCIyMTE1IiwiMTA5MSIsIjEwNjYiLCIxMTA2IiwiMTE2MCIsIjExNTciLCIxMTQ0IiwiMTEzMCIsInBsYXRmb3JtSUQiLCJlbmNvZGluZ0lEIiwibGFuZ3VhZ2VJRCIsIm5hbWVJRCIsImhmIiwiYmVnaW4iLCJ4QXZnQ2hhcldpZHRoIiwiZnNUeXBlIiwieVN1YnNjcmlwdFhTaXplIiwieVN1YnNjcmlwdFlTaXplIiwieVN1YnNjcmlwdFhPZmZzZXQiLCJ5U3Vic2NyaXB0WU9mZnNldCIsInlTdXBlcnNjcmlwdFhTaXplIiwieVN1cGVyc2NyaXB0WVNpemUiLCJ5U3VwZXJzY3JpcHRYT2Zmc2V0IiwieVN1cGVyc2NyaXB0WU9mZnNldCIsInlTdHJpa2VvdXRTaXplIiwieVN0cmlrZW91dFBvc2l0aW9uIiwic0ZhbWlseUNsYXNzIiwicGFub3NlIiwidWxVbmljb2RlUmFuZ2UxIiwidWxVbmljb2RlUmFuZ2UyIiwidWxVbmljb2RlUmFuZ2UzIiwidWxVbmljb2RlUmFuZ2U0IiwiYWNoVmVuZElEIiwidXNGaXJzdENoYXJJbmRleCIsInVzTGFzdENoYXJJbmRleCIsInNUeXBvQXNjZW5kZXIiLCJzVHlwb0Rlc2NlbmRlciIsInNUeXBvTGluZUdhcCIsInVzV2luQXNjZW50IiwidXNXaW5EZXNjZW50IiwidWxDb2RlUGFnZVJhbmdlMSIsInVsQ29kZVBhZ2VSYW5nZTIiLCJzeEhlaWdodCIsInNDYXBIZWlnaHQiLCJ1c0RlZmF1bHRDaGFyIiwidXNCcmVha0NoYXIiLCJ1c01heENvbnRlbnQiLCJ1bmljb2RlUmFuZ2VzIiwiZ2V0VW5pY29kZVJhbmdlIiwiaXRhbGljQW5nbGUiLCJ1bmRlcmxpbmVQb3NpdGlvbiIsInVuZGVybGluZVRoaWNrbmVzcyIsImlzRml4ZWRQaXRjaCIsIm1pbk1lbVR5cGU0MiIsIm1heE1lbVR5cGU0MiIsIm1pbk1lbVR5cGUxIiwibWF4TWVtVHlwZTEiLCJsZiIsImRlbHRhR2x5cGhJZCIsInN1YnN0aXR1dGUiLCJzZXF1ZW5jZXMiLCJhbHRlcm5hdGVTZXRzIiwibGlnYXR1cmVTZXRzIiwibGlnR2x5cGgiLCJtZiIsInNlcXVlbmNlSW5kZXgiLCJsb29rdXBMaXN0SW5kZXgiLCJydWxlU2V0cyIsImxvb2t1cFJlY29yZHMiLCJjbGFzc1NldHMiLCJjb3ZlcmFnZXMiLCJjaGFpblJ1bGVTZXRzIiwiYmFja3RyYWNrIiwibG9va2FoZWFkIiwiYmFja3RyYWNrQ2xhc3NEZWYiLCJpbnB1dENsYXNzRGVmIiwibG9va2FoZWFkQ2xhc3NEZWYiLCJjaGFpbkNsYXNzU2V0IiwiYmFja3RyYWNrQ292ZXJhZ2UiLCJpbnB1dENvdmVyYWdlIiwibG9va2FoZWFkQ292ZXJhZ2UiLCJzdWJzdGl0dXRlcyIsIm5mIiwic2NyaXB0cyIsImZlYXR1cmVzIiwibG9va3VwcyIsInZhcmlhdGlvbnMiLCJxZiIsImZvbnRUb1RhYmxlIiwiYWR2YW5jZVdpZHRoQXZnIiwicmIiLCJtYXhMZWZ0U2lkZUJlYXJpbmciLCJoYXNDaGFyIiwiZ2V0RW5nbGlzaE5hbWUiLCJ1bmlxdWVJRCIsInByZWZlcnJlZEZhbWlseSIsInByZWZlcnJlZFN1YmZhbWlseSIsImNvbXB1dGVDaGVja1N1bSIsInNlYXJjaFRhZyIsImJpblNlYXJjaCIsImdldFRhYmxlIiwiY3JlYXRlRGVmYXVsdFRhYmxlIiwiZ2V0U2NyaXB0TmFtZXMiLCJnZXREZWZhdWx0U2NyaXB0TmFtZSIsImdldFNjcmlwdFRhYmxlIiwiZ2V0TGFuZ1N5c1RhYmxlIiwiZ2V0RmVhdHVyZVRhYmxlIiwiZ2V0TG9va3VwVGFibGVzIiwiZ2V0R2x5cGhDbGFzcyIsImdldENvdmVyYWdlSW5kZXgiLCJleHBhbmRDb3ZlcmFnZSIsImRlZmF1bHRLZXJuaW5nVGFibGVzIiwiZ2V0S2VybmluZ1RhYmxlcyIsImdldEtlcm5pbmdWYWx1ZSIsInBvc0Zvcm1hdCIsInBhaXJTZXRzIiwic2Vjb25kR2x5cGgiLCJ2YWx1ZTEiLCJjbGFzc0RlZjEiLCJjbGFzc0RlZjIiLCJjbGFzc1JlY29yZHMiLCJnZXRTaW5nbGUiLCJzdWIiLCJieSIsImdldEFsdGVybmF0ZXMiLCJnZXRMaWdhdHVyZXMiLCJhZGRTaW5nbGUiLCJhZGRBbHRlcm5hdGUiLCJhZGRMaWdhdHVyZSIsImdldEZlYXR1cmUiLCJyZiIsInNmIiwidGYiLCJ1ZiIsIndmIiwic3JQZXJpb2QiLCJzclBoYXNlIiwic3JUaHJlc2hvbGQiLCJ0cnVuYyIsIk5FR0FUSVZFX0lORklOSVRZIiwidW50b3VjaCIsIlBPU0lUSVZFX0lORklOSVRZIiwiQWYiLCJhdXRvRmxpcCIsImZ1bmNzIiwiaW5oaWJpdEdyaWRGaXQiLCJzdG9yZSIsImlnbm9yZUN2dCIsIkJmIiwiY2hhclRvR2x5cGgiLCJzdHJpbmdUb0dseXBocyIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibGlnYSIsInJsaWciLCJuYW1lVG9HbHlwaCIsImtlcm5pbmciLCJmb3JFYWNoR2x5cGgiLCJsZXR0ZXJTcGFjaW5nIiwidHJhY2tpbmciLCJnZXRQYXRocyIsImdldEFkdmFuY2VXaWR0aCIsInZhbGlkYXRlIiwidG9UYWJsZXMiLCJ0b0J1ZmZlciIsInJlcXVlc3RGaWxlU3lzdGVtIiwid2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0iLCJURU1QT1JBUlkiLCJyb290IiwiZ2V0RmlsZSIsImNyZWF0ZVdyaXRlciIsInRvVVJMIiwid3JpdGVGaWxlU3luYyIsIklUQUxJQyIsIlVOREVSU0NPUkUiLCJORUdBVElWRSIsIk9VVExJTkVEIiwiU1RSSUtFT1VUIiwiQk9MRCIsIlVTRVJfVFlQT19NRVRSSUNTIiwiV1dTIiwiT0JMSVFVRSIsIlVMVFJBX0NPTkRFTlNFRCIsIkVYVFJBX0NPTkRFTlNFRCIsIkNPTkRFTlNFRCIsIlNFTUlfQ09OREVOU0VEIiwiU0VNSV9FWFBBTkRFRCIsIkVYUEFOREVEIiwiRVhUUkFfRVhQQU5ERUQiLCJVTFRSQV9FWFBBTkRFRCIsIlRISU4iLCJFWFRSQV9MSUdIVCIsIkxJR0hUIiwiTk9STUFMIiwiU0VNSV9CT0xEIiwiRVhUUkFfQk9MRCIsIkJMQUNLIiwiYXhlcyIsImluc3RhbmNlcyIsIm9mZnNldFRvRGF0YSIsIkRmIiwidmFsdWVGb3JtYXQxIiwidmFsdWVGb3JtYXQyIiwidmFsdWUyIiwiY2xhc3MxQ291bnQiLCJjbGFzczJDb3VudCIsIkVmIiwiJGQiLCJfZCIsIkZvbnQiLCJHbHlwaCIsIlBhdGgiLCJCb3VuZGluZ0JveCIsIl9wYXJzZSIsInN0YXR1c1RleHQiLCJsb2FkU3luYyIsInJlYWRGaWxlU3luYyIsImZzIiwicnVuIiwiZnVuIiwidGl0bGUiLCJicm93c2VyIiwiYXJndiIsInZlcnNpb25zIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsInJlbW92ZUFsbExpc3RlbmVycyIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJiaW5kaW5nIiwiY3dkIiwiY2hkaXIiLCJ1bWFzayIsIml0ZXJhYmxlIiwiYXBwZW5kIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImJvZHlVc2VkIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJpc1Byb3RvdHlwZU9mIiwiX2JvZHlCbG9iIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJzZWFyY2hQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJhcnJheUJ1ZmZlciIsIl9ib2R5QXJyYXlCdWZmZXIiLCJoZWFkZXJzIiwidGV4dCIsInJlYWRBc1RleHQiLCJib2R5IiwiY3JlZGVudGlhbHMiLCJ0b1VwcGVyQ2FzZSIsInJlZmVycmVyIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZmV0Y2giLCJpc1ZpZXciLCJkZWxldGUiLCJlbnRyaWVzIiwiY2xvbmUiLCJyZWRpcmVjdCIsIkhlYWRlcnMiLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsIm9udGltZW91dCIsIndpdGhDcmVkZW50aWFscyIsInNldFJlcXVlc3RIZWFkZXIiLCIuL2NvbG9yL2NvbG9yX2NvbnZlcnNpb24iLCIuL2NvbG9yL2NyZWF0aW5nX3JlYWRpbmciLCIuL2NvbG9yL3A1LkNvbG9yIiwiLi9jb2xvci9zZXR0aW5nIiwiLi9jb3JlL2NvbnN0YW50cyIsIi4vY29yZS9lbnZpcm9ubWVudCIsIi4vY29yZS9lcnJvcl9oZWxwZXJzIiwiLi9jb3JlL2hlbHBlcnMiLCIuL2NvcmUvaW5pdCIsIi4vY29yZS9sZWdhY3kiLCIuL2NvcmUvbWFpbiIsIi4vY29yZS9wNS5FbGVtZW50IiwiLi9jb3JlL3A1LkdyYXBoaWNzIiwiLi9jb3JlL3A1LlJlbmRlcmVyIiwiLi9jb3JlL3A1LlJlbmRlcmVyMkQiLCIuL2NvcmUvcmVuZGVyaW5nIiwiLi9jb3JlL3NoYXBlLzJkX3ByaW1pdGl2ZXMiLCIuL2NvcmUvc2hhcGUvYXR0cmlidXRlcyIsIi4vY29yZS9zaGFwZS9jdXJ2ZXMiLCIuL2NvcmUvc2hhcGUvdmVydGV4IiwiLi9jb3JlL3NoaW0iLCIuL2NvcmUvc3RydWN0dXJlIiwiLi9jb3JlL3RyYW5zZm9ybSIsIi4vZGF0YS9wNS5UeXBlZERpY3QiLCIuL2V2ZW50cy9hY2NlbGVyYXRpb24iLCIuL2V2ZW50cy9rZXlib2FyZCIsIi4vZXZlbnRzL21vdXNlIiwiLi9ldmVudHMvdG91Y2giLCIuL2ltYWdlL2ZpbHRlcnMiLCIuL2ltYWdlL2ltYWdlIiwiLi9pbWFnZS9sb2FkaW5nX2Rpc3BsYXlpbmciLCIuL2ltYWdlL3A1LkltYWdlIiwiLi9pbWFnZS9waXhlbHMiLCIuL2lvL2ZpbGVzIiwiLi9pby9wNS5UYWJsZSIsIi4vaW8vcDUuVGFibGVSb3ciLCIuL2lvL3A1LlhNTCIsIi4vbWF0aC9jYWxjdWxhdGlvbiIsIi4vbWF0aC9tYXRoIiwiLi9tYXRoL25vaXNlIiwiLi9tYXRoL3A1LlZlY3RvciIsIi4vbWF0aC9yYW5kb20iLCIuL21hdGgvdHJpZ29ub21ldHJ5IiwiLi90eXBvZ3JhcGh5L2F0dHJpYnV0ZXMiLCIuL3R5cG9ncmFwaHkvbG9hZGluZ19kaXNwbGF5aW5nIiwiLi90eXBvZ3JhcGh5L3A1LkZvbnQiLCIuL3V0aWxpdGllcy9hcnJheV9mdW5jdGlvbnMiLCIuL3V0aWxpdGllcy9jb252ZXJzaW9uIiwiLi91dGlsaXRpZXMvc3RyaW5nX2Z1bmN0aW9ucyIsIi4vdXRpbGl0aWVzL3RpbWVfZGF0ZSIsIi4vd2ViZ2wvM2RfcHJpbWl0aXZlcyIsIi4vd2ViZ2wvaW50ZXJhY3Rpb24iLCIuL3dlYmdsL2xpZ2h0IiwiLi93ZWJnbC9sb2FkaW5nIiwiLi93ZWJnbC9tYXRlcmlhbCIsIi4vd2ViZ2wvcDUuQ2FtZXJhIiwiLi93ZWJnbC9wNS5HZW9tZXRyeSIsIi4vd2ViZ2wvcDUuTWF0cml4IiwiLi93ZWJnbC9wNS5SZW5kZXJlckdMIiwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLkltbWVkaWF0ZSIsIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5SZXRhaW5lZCIsIi4vd2ViZ2wvcDUuU2hhZGVyIiwiLi93ZWJnbC9wNS5UZXh0dXJlIiwiLi93ZWJnbC90ZXh0IiwiQ29sb3JDb252ZXJzaW9uIiwiX2hzYmFUb0hTTEEiLCJfaHNiYVRvUkdCQSIsIl9oc2xhVG9IU0JBIiwiX2hzbGFUb1JHQkEiLCJfcmdiYVRvSFNCQSIsIl9yZ2JhVG9IU0xBIiwiLi4vY29yZS9tYWluIiwiYWxwaGEiLCJfdmFsaWRhdGVQYXJhbWV0ZXJzIiwiY29sb3IiLCJfZ2V0QWxwaGEiLCJibHVlIiwiX2dldEJsdWUiLCJicmlnaHRuZXNzIiwiX2dldEJyaWdodG5lc3MiLCJDb2xvciIsImdyZWVuIiwiX2dldEdyZWVuIiwiaHVlIiwiX2dldEh1ZSIsImxlcnBDb2xvciIsIl9jb2xvck1vZGUiLCJfY29sb3JNYXhlcyIsIlJHQiIsImxldmVscyIsIkhTQiIsImhzYmEiLCJIU0wiLCJfZ2V0TGlnaHRuZXNzIiwiaHNsYSIsImxlcnAiLCJsaWdodG5lc3MiLCJyZWQiLCJfZ2V0UmVkIiwic2F0dXJhdGlvbiIsIl9nZXRTYXR1cmF0aW9uIiwiLi4vY29yZS9jb25zdGFudHMiLCIuLi9jb3JlL2Vycm9yX2hlbHBlcnMiLCIuL3A1LkNvbG9yIiwiX3N0b3JlTW9kZUFuZE1heGVzIiwiX2FycmF5IiwiX3BhcnNlSW5wdXRzIiwiX2NhbGN1bGF0ZUxldmVscyIsInRvUHJlY2lzaW9uIiwibWF4ZXMiLCJzZXRSZWQiLCJzZXRHcmVlbiIsInNldEJsdWUiLCJzZXRBbHBoYSIsIl9nZXRNb2RlIiwiX2dldE1heGVzIiwiYWxpY2VibHVlIiwiYW50aXF1ZXdoaXRlIiwiYXF1YSIsImFxdWFtYXJpbmUiLCJhenVyZSIsImJlaWdlIiwiYmlzcXVlIiwiYmxhY2siLCJibGFuY2hlZGFsbW9uZCIsImJsdWV2aW9sZXQiLCJidXJseXdvb2QiLCJjYWRldGJsdWUiLCJjaGFydHJldXNlIiwiY2hvY29sYXRlIiwiY29yYWwiLCJjb3JuZmxvd2VyYmx1ZSIsImNvcm5zaWxrIiwiY3JpbXNvbiIsImN5YW4iLCJkYXJrYmx1ZSIsImRhcmtjeWFuIiwiZGFya2dvbGRlbnJvZCIsImRhcmtncmF5IiwiZGFya2dyZWVuIiwiZGFya2dyZXkiLCJkYXJra2hha2kiLCJkYXJrbWFnZW50YSIsImRhcmtvbGl2ZWdyZWVuIiwiZGFya29yYW5nZSIsImRhcmtvcmNoaWQiLCJkYXJrcmVkIiwiZGFya3NhbG1vbiIsImRhcmtzZWFncmVlbiIsImRhcmtzbGF0ZWJsdWUiLCJkYXJrc2xhdGVncmF5IiwiZGFya3NsYXRlZ3JleSIsImRhcmt0dXJxdW9pc2UiLCJkYXJrdmlvbGV0IiwiZGVlcHBpbmsiLCJkZWVwc2t5Ymx1ZSIsImRpbWdyYXkiLCJkaW1ncmV5IiwiZG9kZ2VyYmx1ZSIsImZpcmVicmljayIsImZsb3JhbHdoaXRlIiwiZm9yZXN0Z3JlZW4iLCJmdWNoc2lhIiwiZ2FpbnNib3JvIiwiZ2hvc3R3aGl0ZSIsImdvbGQiLCJnb2xkZW5yb2QiLCJncmF5IiwiZ3JlZW55ZWxsb3ciLCJncmV5IiwiaG9uZXlkZXciLCJob3RwaW5rIiwiaW5kaWFucmVkIiwiaW5kaWdvIiwiaXZvcnkiLCJraGFraSIsImxhdmVuZGVyIiwibGF2ZW5kZXJibHVzaCIsImxhd25ncmVlbiIsImxlbW9uY2hpZmZvbiIsImxpZ2h0Ymx1ZSIsImxpZ2h0Y29yYWwiLCJsaWdodGN5YW4iLCJsaWdodGdvbGRlbnJvZHllbGxvdyIsImxpZ2h0Z3JheSIsImxpZ2h0Z3JlZW4iLCJsaWdodGdyZXkiLCJsaWdodHBpbmsiLCJsaWdodHNhbG1vbiIsImxpZ2h0c2VhZ3JlZW4iLCJsaWdodHNreWJsdWUiLCJsaWdodHNsYXRlZ3JheSIsImxpZ2h0c2xhdGVncmV5IiwibGlnaHRzdGVlbGJsdWUiLCJsaWdodHllbGxvdyIsImxpbWUiLCJsaW1lZ3JlZW4iLCJsaW5lbiIsIm1hZ2VudGEiLCJtYXJvb24iLCJtZWRpdW1hcXVhbWFyaW5lIiwibWVkaXVtYmx1ZSIsIm1lZGl1bW9yY2hpZCIsIm1lZGl1bXB1cnBsZSIsIm1lZGl1bXNlYWdyZWVuIiwibWVkaXVtc2xhdGVibHVlIiwibWVkaXVtc3ByaW5nZ3JlZW4iLCJtZWRpdW10dXJxdW9pc2UiLCJtZWRpdW12aW9sZXRyZWQiLCJtaWRuaWdodGJsdWUiLCJtaW50Y3JlYW0iLCJtaXN0eXJvc2UiLCJtb2NjYXNpbiIsIm5hdmFqb3doaXRlIiwibmF2eSIsIm9sZGxhY2UiLCJvbGl2ZSIsIm9saXZlZHJhYiIsIm9yYW5nZSIsIm9yYW5nZXJlZCIsIm9yY2hpZCIsInBhbGVnb2xkZW5yb2QiLCJwYWxlZ3JlZW4iLCJwYWxldHVycXVvaXNlIiwicGFsZXZpb2xldHJlZCIsInBhcGF5YXdoaXAiLCJwZWFjaHB1ZmYiLCJwZXJ1IiwicGx1bSIsInBvd2RlcmJsdWUiLCJwdXJwbGUiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZXNtb2tlIiwieWVsbG93IiwieWVsbG93Z3JlZW4iLCJSZWdFeHAiLCJIRVgzIiwiSEVYNCIsIkhFWDYiLCJIRVg4IiwiUkdCX1BFUkNFTlQiLCJSR0JBIiwiUkdCQV9QRVJDRU5UIiwiSFNMQSIsIkhTQkEiLCIuL2NvbG9yX2NvbnZlcnNpb24iLCJiYWNrZ3JvdW5kIiwiSW1hZ2UiLCJpbWFnZSIsIl9yZW5kZXJlciIsImNvbG9yTW9kZSIsIl9zZXRQcm9wZXJ0eSIsIm5vRmlsbCIsIm5vU3Ryb2tlIiwiUDJEIiwiV0VCR0wiLCJBUlJPVyIsIkNST1NTIiwiSEFORCIsIk1PVkUiLCJURVhUIiwiV0FJVCIsIkhBTEZfUEkiLCJRVUFSVEVSX1BJIiwiVEFVIiwiVFdPX1BJIiwiREVHUkVFUyIsIlJBRElBTlMiLCJERUdfVE9fUkFEIiwiUkFEX1RPX0RFRyIsIkNPUk5FUiIsIkNPUk5FUlMiLCJSQURJVVMiLCJSSUdIVCIsIkxFRlQiLCJDRU5URVIiLCJUT1AiLCJCT1RUT00iLCJCQVNFTElORSIsIlBPSU5UUyIsIkxJTkVTIiwiTElORV9TVFJJUCIsIkxJTkVfTE9PUCIsIlRSSUFOR0xFUyIsIlRSSUFOR0xFX0ZBTiIsIlRSSUFOR0xFX1NUUklQIiwiUVVBRFMiLCJRVUFEX1NUUklQIiwiQ0xPU0UiLCJPUEVOIiwiQ0hPUkQiLCJQSUUiLCJQUk9KRUNUIiwiU1FVQVJFIiwiUk9VTkQiLCJCRVZFTCIsIk1JVEVSIiwiQVVUTyIsIkFMVCIsIkJBQ0tTUEFDRSIsIkNPTlRST0wiLCJERUxFVEUiLCJET1dOX0FSUk9XIiwiRU5URVIiLCJFU0NBUEUiLCJMRUZUX0FSUk9XIiwiT1BUSU9OIiwiUkVUVVJOIiwiUklHSFRfQVJST1ciLCJTSElGVCIsIlRBQiIsIlVQX0FSUk9XIiwiQkxFTkQiLCJBREQiLCJEQVJLRVNUIiwiTElHSFRFU1QiLCJESUZGRVJFTkNFIiwiRVhDTFVTSU9OIiwiTVVMVElQTFkiLCJTQ1JFRU4iLCJSRVBMQUNFIiwiT1ZFUkxBWSIsIkhBUkRfTElHSFQiLCJTT0ZUX0xJR0hUIiwiRE9ER0UiLCJCVVJOIiwiVEhSRVNIT0xEIiwiR1JBWSIsIk9QQVFVRSIsIklOVkVSVCIsIlBPU1RFUklaRSIsIkRJTEFURSIsIkVST0RFIiwiQkxVUiIsIl9ERUZBVUxUX1RFWFRfRklMTCIsIl9ERUZBVUxUX0xFQURNVUxUIiwiX0NUWF9NSURETEUiLCJMSU5FQVIiLCJRVUFEUkFUSUMiLCJCRVpJRVIiLCJDVVJWRSIsIlNUUk9LRSIsIkZJTEwiLCJURVhUVVJFIiwiSU1NRURJQVRFIiwiTkVBUkVTVCIsIlJFUEVBVCIsIkNMQU1QIiwiTUlSUk9SIiwiTEFORFNDQVBFIiwiUE9SVFJBSVQiLCJfREVGQVVMVF9TVFJPS0UiLCJfREVGQVVMVF9GSUxMIiwiR1JJRCIsIkFYRVMiLCJpbm5lcldpZHRoIiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50V2lkdGgiLCJpbm5lckhlaWdodCIsImNsaWVudEhlaWdodCIsIl9mcmFtZVJhdGUiLCJfbGFzdEZyYW1lVGltZSIsInBlcmZvcm1hbmNlIiwiX3RhcmdldEZyYW1lUmF0ZSIsInByaW50IiwiZnJhbWVDb3VudCIsImZvY3VzZWQiLCJoYXNGb2N1cyIsImN1cnNvciIsIl9jdXJFbGVtZW50IiwiZWx0Iiwic3R5bGUiLCJmcmFtZVJhdGUiLCJfcnVuRnJhbWVzIiwiZ2V0RnJhbWVSYXRlIiwic2V0RnJhbWVSYXRlIiwibm9DdXJzb3IiLCJkaXNwbGF5V2lkdGgiLCJzY3JlZW4iLCJkaXNwbGF5SGVpZ2h0Iiwid2luZG93V2lkdGgiLCJ3aW5kb3dIZWlnaHQiLCJfb25yZXNpemUiLCJfaXNHbG9iYWwiLCJ3aW5kb3dSZXNpemVkIiwicHJldmVudERlZmF1bHQiLCJmdWxsc2NyZWVuIiwiZnVsbHNjcmVlbkVsZW1lbnQiLCJ3ZWJraXRGdWxsc2NyZWVuRWxlbWVudCIsIm1vekZ1bGxTY3JlZW5FbGVtZW50IiwibXNGdWxsc2NyZWVuRWxlbWVudCIsImZ1bGxzY3JlZW5FbmFibGVkIiwid2Via2l0RnVsbHNjcmVlbkVuYWJsZWQiLCJtb3pGdWxsU2NyZWVuRW5hYmxlZCIsIm1zRnVsbHNjcmVlbkVuYWJsZWQiLCJyZXF1ZXN0RnVsbHNjcmVlbiIsIm1velJlcXVlc3RGdWxsU2NyZWVuIiwid2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4iLCJtc1JlcXVlc3RGdWxsc2NyZWVuIiwiZXhpdEZ1bGxzY3JlZW4iLCJtb3pDYW5jZWxGdWxsU2NyZWVuIiwid2Via2l0RXhpdEZ1bGxzY3JlZW4iLCJtc0V4aXRGdWxsc2NyZWVuIiwicGl4ZWxEZW5zaXR5IiwiX3BpeGVsRGVuc2l0eSIsIl9waXhlbHNEaXJ0eSIsInJlc2l6ZUNhbnZhcyIsImRpc3BsYXlEZW5zaXR5IiwiZGV2aWNlUGl4ZWxSYXRpbyIsImdldFVSTCIsImdldFVSTFBhdGgiLCJwYXRobmFtZSIsImdldFVSTFBhcmFtcyIsImxhc3RJbmRleCIsIi4vY29uc3RhbnRzIiwiLi9tYWluIiwiX2ZyaWVuZGx5RmlsZUxvYWRFcnJvciIsInNvbWUiLCJfaGVscEZvck1pc3VzZWRBdFRvcExldmVsQ29kZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCIuLi8uLi9kb2NzL3JlZmVyZW5jZS9kYXRhLmpzb24iLCJtb2RlQWRqdXN0IiwibW9jaGEiLCJzZXR1cCIsImluc3RhbmNlIiwiZXhpdCIsInB1c2hTdHlsZSIsInBvcFN0eWxlIiwiX3NldHVwRG9uZSIsIl91c2VyTm9kZSIsIl9lbGVtZW50cyIsIl9yZXF1ZXN0QW5pbUlkIiwiX3ByZWxvYWRDb3VudCIsIl9pbml0aWFsaXplSW5zdGFuY2VWYXJpYWJsZXMiLCJfZGVmYXVsdENhbnZhc1NpemUiLCJtb3VzZW1vdmUiLCJtb3VzZWRvd24iLCJtb3VzZXVwIiwiZHJhZ2VuZCIsImRyYWdvdmVyIiwiY2xpY2siLCJkYmxjbGljayIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0Iiwia2V5ZG93biIsImtleXVwIiwia2V5cHJlc3MiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIiwidG91Y2hlbmQiLCJyZXNpemUiLCJibHVyIiwid2hlZWwiLCJfbG9hZGluZ1NjcmVlbklkIiwiX3JlZ2lzdGVyZWRNZXRob2RzIiwiRGV2aWNlT3JpZW50YXRpb25FdmVudCIsImRldmljZW9yaWVudGF0aW9uIiwiRGV2aWNlTW90aW9uRXZlbnQiLCJfaXNOb2RlV2Via2l0IiwiZGV2aWNlbW90aW9uIiwicHJlbG9hZCIsImlubmVySFRNTCIsIl9wcmVsb2FkTWV0aG9kcyIsIl93cmFwUHJlbG9hZCIsIl9yZWdpc3RlcmVkUHJlbG9hZE1ldGhvZHMiLCJfcnVuSWZQcmVsb2Fkc0FyZURvbmUiLCJfc2V0dXAiLCJfZHJhdyIsInBhcmVudE5vZGUiLCJfZGVjcmVtZW50UHJlbG9hZCIsIl9pbmNyZW1lbnRQcmVsb2FkIiwiY3JlYXRlQ2FudmFzIiwiZGF0YXNldCIsImhpZGRlbiIsInZpc2liaWxpdHkiLCJyZWRyYXciLCJfdXBkYXRlTW91c2VDb29yZHMiLCJjbGVhckludGVydmFsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJfY3JlYXRlRnJpZW5kbHlHbG9iYWxGdW5jdGlvbkJpbmRlciIsInBhc3NpdmUiLCJyZWdpc3Rlck1ldGhvZCIsIl9zdHlsZXMiLCJfYmV6aWVyRGV0YWlsIiwiX2N1cnZlRGV0YWlsIiwicmdiIiwiaHNiIiwiaHNsIiwiZGlzYWJsZUZyaWVuZGx5RXJyb3JzIiwibG9hZEpTT04iLCJsb2FkSW1hZ2UiLCJsb2FkU3RyaW5ncyIsImxvYWRYTUwiLCJsb2FkQnl0ZXMiLCJsb2FkVGFibGUiLCJsb2FkRm9udCIsImxvYWRNb2RlbCIsImxvYWRTaGFkZXIiLCJwcmUiLCJyZWdpc3RlclByZWxvYWRNZXRob2QiLCJnbG9iYWxPYmplY3QiLCIuL3NoaW0iLCJFbGVtZW50IiwiX3BJbnN0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJjbGFzcyIsIm1vdXNlUHJlc3NlZCIsIl9zZXRNb3VzZUJ1dHRvbiIsImRvdWJsZUNsaWNrZWQiLCJtb3VzZVdoZWVsIiwibW91c2VSZWxlYXNlZCIsIm1vdXNlQ2xpY2tlZCIsIm1vdXNlTW92ZWQiLCJtb3VzZU92ZXIiLCJjaGFuZ2VkIiwibW91c2VPdXQiLCJ0b3VjaFN0YXJ0ZWQiLCJ0b3VjaE1vdmVkIiwidG91Y2hFbmRlZCIsImRyYWdPdmVyIiwiZHJhZ0xlYXZlIiwiZHJvcCIsIkZpbGUiLCJ0YXJnZXQiLCJGaWxlTGlzdCIsInN0b3BQcm9wYWdhdGlvbiIsImRhdGFUcmFuc2ZlciIsImZpbGVzIiwiR3JhcGhpY3MiLCJjYW52YXMiLCJSZW5kZXJlckdMIiwiUmVuZGVyZXIyRCIsIl9hcHBseURlZmF1bHRzIiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0TGVmdCIsIm9mZnNldFRvcCIsIlJlbmRlcmVyIiwiX2lzTWFpbkNhbnZhcyIsImRpc3BsYXkiLCJfdGV4dFNpemUiLCJfdGV4dExlYWRpbmciLCJfdGV4dEZvbnQiLCJfdGV4dFN0eWxlIiwiX3RleHRBc2NlbnQiLCJfdGV4dERlc2NlbnQiLCJfdGV4dEFsaWduIiwiX3RleHRCYXNlbGluZSIsIl9yZWN0TW9kZSIsIl9lbGxpcHNlTW9kZSIsIl9jdXJ2ZVRpZ2h0bmVzcyIsIl9pbWFnZU1vZGUiLCJfdGludCIsIl9kb1N0cm9rZSIsIl9kb0ZpbGwiLCJfc3Ryb2tlU2V0IiwiX2ZpbGxTZXQiLCJwcm9wZXJ0aWVzIiwidGV4dExlYWRpbmciLCJ0ZXh0U2l6ZSIsIl9hcHBseVRleHRQcm9wZXJ0aWVzIiwidGV4dFN0eWxlIiwidGV4dEFzY2VudCIsIl91cGRhdGVUZXh0TWV0cmljcyIsInRleHREZXNjZW50IiwidGV4dEFsaWduIiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwiTUFYX1ZBTFVFIiwidGV4dFdpZHRoIiwiX3JlbmRlclRleHQiLCJfaXNPcGVuVHlwZSIsImZvbnRTaXplIiwib3ZlcmZsb3ciLCJ2ZXJ0aWNhbEFsaWduIiwiZHJhd2luZ0NvbnRleHQiLCJfY2FjaGVkRmlsbFN0eWxlIiwiX2NhY2hlZFN0cm9rZVN0eWxlIiwiX3NldEZpbGwiLCJfc2V0U3Ryb2tlIiwibGluZUNhcCIsInNjYWxlIiwic2F2ZSIsInJlc2V0TWF0cml4IiwiX2dldEZpbGwiLCJmaWxsUmVjdCIsInJlc3RvcmUiLCJjbGVhclJlY3QiLCJNZWRpYUVsZW1lbnQiLCJsb2FkUGl4ZWxzIiwiX2dldFRpbnRlZEltYWdlQ2FudmFzIiwiZHJhd0ltYWdlIiwiX3RvUGl4ZWxzIiwiY3JlYXRlSW1hZ2VEYXRhIiwicHV0SW1hZ2VEYXRhIiwiYmxlbmRNb2RlIiwiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIiwiYmxlbmQiLCJfY29weUhlbHBlciIsImdldEltYWdlRGF0YSIsInBpeGVscyIsInNldFRyYW5zZm9ybSIsImltYWdlRGF0YSIsInVwZGF0ZVBpeGVscyIsIl9hY3V0ZUFyY1RvQmV6aWVyIiwiYXkiLCJjeSIsImVsbGlwc2UiLCJfZ2V0U3Ryb2tlIiwidHJhbnNsYXRlIiwicXVhZCIsInJlY3QiLCJhcmNUbyIsInRyaWFuZ2xlIiwiZW5kU2hhcGUiLCJQT0xZR09OIiwiX2RvRmlsbFN0cm9rZUNsb3NlIiwiaXNWZXJ0Iiwibm9TbW9vdGgiLCJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCJzbW9vdGgiLCJzdHJva2VDYXAiLCJzdHJva2VKb2luIiwibGluZUpvaW4iLCJzdHJva2VXZWlnaHQiLCJiZXppZXIiLCJiZWdpblNoYXBlIiwidmVydGV4IiwiYmV6aWVyVmVydGV4IiwiY3VydmVWZXJ0ZXgiLCJhcHBseU1hdHJpeCIsInRyYW5zZm9ybSIsInJvdGF0ZSIsInNoZWFyWCIsInNoZWFyWSIsIlZlY3RvciIsInRleHRCYXNlbGluZSIsIl9yZW5kZXJQYXRoIiwicmVuZGVyZXIiLCJzdHJva2VUZXh0IiwiZmlsbFRleHQiLCJfdGV4dFdpZHRoIiwibWVhc3VyZVRleHQiLCIuLi9pbWFnZS9maWx0ZXJzIiwiLi9wNS5SZW5kZXJlciIsImNsYXNzTGlzdCIsIl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkIiwibm9DYW52YXMiLCJjcmVhdGVHcmFwaGljcyIsIi4uL3dlYmdsL3A1LlJlbmRlcmVyR0wiLCIuL3A1LkdyYXBoaWNzIiwiLi9wNS5SZW5kZXJlcjJEIiwiX3RvUmFkaWFucyIsImF0YW4iLCIuLi9jb25zdGFudHMiLCIuLi9lcnJvcl9oZWxwZXJzIiwiLi4vaGVscGVycyIsIi4uL21haW4iLCJlbGxpcHNlTW9kZSIsInJlY3RNb2RlIiwiYmV6aWVyRGV0YWlsIiwiYmV6aWVyUG9pbnQiLCJiZXppZXJUYW5nZW50IiwiY3VydmVEZXRhaWwiLCJjdXJ2ZVRpZ2h0bmVzcyIsImN1cnZlUG9pbnQiLCJjdXJ2ZVRhbmdlbnQiLCJiZWdpbkNvbnRvdXIiLCJpc1AzRCIsImVuZENvbnRvdXIiLCJxdWFkcmF0aWNWZXJ0ZXgiLCJfY29udG91ckluaXRlZCIsIngzIiwieTMiLCJfY29udG91clZlcnRpY2VzIiwid2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwibW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwib1JlcXVlc3RBbmltYXRpb25GcmFtZSIsIm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJub0xvb3AiLCJwcm9wcyIsIl91cGRhdGUiLCJwb3BNYXRyaXgiLCJwcmludE1hdHJpeCIsInB1c2hNYXRyaXgiLCJyb3RhdGVYIiwiX2Fzc2VydDNkIiwicm90YXRlWSIsInJvdGF0ZVoiLCJjcmVhdGVTdHJpbmdEaWN0IiwiU3RyaW5nRGljdCIsImNyZWF0ZU51bWJlckRpY3QiLCJOdW1iZXJEaWN0IiwiVHlwZWREaWN0IiwiaGFzS2V5IiwiX3ZhbGlkYXRlIiwiX2FkZE9iaiIsInNhdmVUYWJsZSIsImRvd25sb2FkRmlsZSIsInNhdmVKU09OIiwiZGl2IiwiX3ZhbHVlVGVzdCIsIl9rZXlUZXN0IiwibWluS2V5IiwibWF4S2V5IiwiZGV2aWNlT3JpZW50YXRpb24iLCJhY2NlbGVyYXRpb25YIiwiYWNjZWxlcmF0aW9uWSIsImFjY2VsZXJhdGlvbloiLCJwQWNjZWxlcmF0aW9uWCIsInBBY2NlbGVyYXRpb25ZIiwicEFjY2VsZXJhdGlvbloiLCJfdXBkYXRlUEFjY2VsZXJhdGlvbnMiLCJyb3RhdGlvblgiLCJyb3RhdGlvblkiLCJyb3RhdGlvbloiLCJwUm90YXRpb25YIiwicFJvdGF0aW9uWSIsInBSb3RhdGlvbloiLCJfdXBkYXRlUFJvdGF0aW9ucyIsInR1cm5BeGlzIiwic2V0TW92ZVRocmVzaG9sZCIsInNldFNoYWtlVGhyZXNob2xkIiwiX29uZGV2aWNlb3JpZW50YXRpb24iLCJiZXRhIiwiZ2FtbWEiLCJfaGFuZGxlTW90aW9uIiwiX29uZGV2aWNlbW90aW9uIiwiYWNjZWxlcmF0aW9uIiwib3JpZW50YXRpb24iLCJkZXZpY2VNb3ZlZCIsImRldmljZVR1cm5lZCIsImRldmljZVNoYWtlbiIsImlzS2V5UHJlc3NlZCIsImtleUlzUHJlc3NlZCIsImtleUNvZGUiLCJfb25rZXlkb3duIiwid2hpY2giLCJrZXlQcmVzc2VkIiwiY2hhckNvZGUiLCJfb25rZXl1cCIsImtleVJlbGVhc2VkIiwiX29ua2V5cHJlc3MiLCJfbGFzdEtleUNvZGVUeXBlZCIsImtleVR5cGVkIiwiX29uYmx1ciIsImtleUlzRG93biIsIl9oYXNNb3VzZUludGVyYWN0ZWQiLCJtb3VzZVgiLCJtb3VzZVkiLCJwbW91c2VYIiwicG1vdXNlWSIsIndpbk1vdXNlWCIsIndpbk1vdXNlWSIsInB3aW5Nb3VzZVgiLCJwd2luTW91c2VZIiwibW91c2VCdXR0b24iLCJtb3VzZUlzUHJlc3NlZCIsIl91cGRhdGVOZXh0TW91c2VDb29yZHMiLCJ0b3VjaGVzIiwiY2xpZW50WCIsImNoYW5nZWRUb3VjaGVzIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwic2Nyb2xsV2lkdGgiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRZIiwidG9wIiwid2luWCIsIndpblkiLCJpZGVudGlmaWVyIiwiX21vdXNlV2hlZWxEZWx0YVkiLCJidXR0b24iLCJfb25tb3VzZW1vdmUiLCJtb3VzZURyYWdnZWQiLCJfb25tb3VzZWRvd24iLCJfb25tb3VzZXVwIiwiX29uZHJhZ2VuZCIsIl9vbmRyYWdvdmVyIiwiX29uY2xpY2siLCJfb25kYmxjbGljayIsIl9wbW91c2VXaGVlbERlbHRhWSIsIl9vbndoZWVsIiwiZGVsdGFZIiwiX3VwZGF0ZVRvdWNoQ29vcmRzIiwiX29udG91Y2hzdGFydCIsIl9vbnRvdWNobW92ZSIsIl9vbnRvdWNoZW5kIiwiSW50MzJBcnJheSIsIl9nZXRBUkdCIiwiX3NldFBpeGVscyIsIkltYWdlRGF0YSIsIl90b0ltYWdlRGF0YSIsIl9jcmVhdGVJbWFnZURhdGEiLCJfdG1wQ2FudmFzIiwiX3RtcEN0eCIsIm9wYXF1ZSIsImludmVydCIsInBvc3Rlcml6ZSIsImRpbGF0ZSIsImVyb2RlIiwiY3JlYXRlSW1hZ2UiLCJzYXZlQ2FudmFzIiwiSFRNTENhbnZhc0VsZW1lbnQiLCJfY2hlY2tGaWxlRXh0ZW5zaW9uIiwidG9CbG9iIiwic2F2ZUZyYW1lcyIsImNvbnN0cmFpbiIsIl9tYWtlRnJhbWUiLCJzZXRJbnRlcnZhbCIsImZpbGVuYW1lIiwiZXh0IiwidG9EYXRhVVJMIiwiY3Jvc3NPcmlnaW4iLCJ2aWRlb1dpZHRoIiwidmlkZW9IZWlnaHQiLCJ0aW50Iiwibm9UaW50IiwiaW1hZ2VNb2RlIiwiLi4vY29yZS9oZWxwZXJzIiwiLi9maWx0ZXJzIiwiX21vZGlmaWVkIiwic2V0TW9kaWZpZWQiLCJtYXNrIiwiaXNNb2RpZmllZCIsIi4uL2NvbG9yL3A1LkNvbG9yIiwiaHR0cERvIiwibGFzdEluZGV4T2YiLCJjdXJyZW50U3RhdGUiLCJ0b2tlbiIsImVzY2FwZWQiLCJjb2x1bW5zIiwiVGFibGVSb3ciLCJvYmoiLCJhZGRSb3ciLCJieXRlcyIsImh0dHBHZXQiLCJodHRwUG9zdCIsIkNvbnRlbnQtVHlwZSIsIlhNTCIsImNoaWxkTm9kZXMiLCJhZGRDaGlsZCIsInNldE5hbWUiLCJub2RlTmFtZSIsIl9zZXRDb250IiwidGV4dENvbnRlbnQiLCJfc2V0QXR0cmlidXRlcyIsImNoaWxkcmVuIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiX3BXcml0ZXJzIiwiUHJpbnRXcml0ZXIiLCJtaWxsaXMiLCJ3cml0ZUZpbGUiLCJzYXZlU3RyaW5ncyIsIlNvdW5kRmlsZSIsInNhdmVTb3VuZCIsInNhdmVKU09OT2JqZWN0Iiwic2F2ZUpTT05BcnJheSIsInJvd3MiLCJnZXRTdHJpbmciLCJfaXNTYWZhcmkiLCJvbmNsaWNrIiwiYWxlcnQiLCJlczYtcHJvbWlzZSIsImZldGNoLWpzb25wIiwiZmlsZS1zYXZlciIsIndoYXR3Zy1mZXRjaCIsInJlbW92ZVJvdyIsImdldFJvdyIsImdldFJvd3MiLCJmaW5kUm93IiwiZmluZFJvd3MiLCJtYXRjaFJvdyIsIm1hdGNoUm93cyIsImdldENvbHVtbiIsImNsZWFyUm93cyIsImFkZENvbHVtbiIsImdldENvbHVtbkNvdW50IiwiZ2V0Um93Q291bnQiLCJyZW1vdmVUb2tlbnMiLCJyZW1vdmVDb2x1bW4iLCJzZXROdW0iLCJzZXRTdHJpbmciLCJnZXROdW0iLCJnZXRPYmplY3QiLCJnZXRBcnJheSIsImF0dHJpYnV0ZXMiLCJnZXRQYXJlbnQiLCJnZXROYW1lIiwiaGFzQ2hpbGRyZW4iLCJsaXN0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbiIsImdldENoaWxkIiwiZ2V0QXR0cmlidXRlQ291bnQiLCJsaXN0QXR0cmlidXRlcyIsImhhc0F0dHJpYnV0ZSIsImdldENvbnRlbnQiLCJzZXRDb250ZW50Iiwibm9kZVZhbHVlIiwiaHlwb3QiLCJtYWciLCJub3JtIiwic3EiLCJjcmVhdGVWZWN0b3IiLCJub2lzZURldGFpbCIsIm5vaXNlU2VlZCIsInNldFNlZWQiLCJnZXRTZWVkIiwicDUiLCJtYWdTcSIsImNyb3NzIiwibm9ybWFsaXplIiwibGltaXQiLCJzZXRNYWciLCJoZWFkaW5nIiwiYXRhbjIiLCJfZnJvbVJhZGlhbnMiLCJhbmdsZUJldHdlZW4iLCJhY29zIiwiZnJvbUFuZ2xlIiwiZnJvbUFuZ2xlcyIsInJhbmRvbTJEIiwicmFuZG9tM0QiLCJyYW5kb21TZWVkIiwicmFuZG9tR2F1c3NpYW4iLCJfYW5nbGVNb2RlIiwiYXNpbiIsImRlZ3JlZXMiLCJyYWRpYW5zIiwiYW5nbGVNb2RlIiwiX3RvRGVncmVlcyIsInRleHRGb250Iiwib3BlbnR5cGUuanMiLCJzYW1wbGVGYWN0b3IiLCJzaW1wbGlmeVRocmVzaG9sZCIsInRtcFBvaW50MSIsInRtcFBvaW50MiIsInF4IiwicXkiLCJjYWNoZSIsInRleHRCb3VuZHMiLCJhZHZhbmNlIiwiX2hhbmRsZUFsaWdubWVudCIsInRleHRUb1BvaW50cyIsIl9nZXRHbHlwaHMiLCJfZ2V0UGF0aCIsIl9nZXRQYXRoRGF0YSIsImRlY2ltYWxzIiwiX2dldFNWRyIsImFycmF5Q29weSIsInNob3J0ZW4iLCJzaHVmZmxlIiwic3Vic2V0IiwiZmxvYXQiLCJpbnQiLCJzdHIiLCJib29sZWFuIiwiY2hhciIsInVuY2hhciIsImhleCIsInVuaGV4IiwibWF0Y2hBbGwiLCJuZmMiLCJuZnAiLCJuZnMiLCJzcGxpdFRva2VucyIsImRheSIsImdldERhdGUiLCJob3VyIiwiZ2V0SG91cnMiLCJtaW51dGUiLCJnZXRNaW51dGVzIiwibW9udGgiLCJnZXRNb250aCIsInNlY29uZCIsImdldFNlY29uZHMiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJwbGFuZSIsImdlb21ldHJ5SW5IYXNoIiwiR2VvbWV0cnkiLCJkZXRhaWxZIiwiZGV0YWlsWCIsInZlcnRpY2VzIiwidXZzIiwiY29tcHV0ZUZhY2VzIiwiY29tcHV0ZU5vcm1hbHMiLCJfbWFrZVRyaWFuZ2xlRWRnZXMiLCJfZWRnZXNUb1ZlcnRpY2VzIiwiZHJhd0J1ZmZlcnNTY2FsZWQiLCJib3giLCJwZXJQaXhlbExpZ2h0aW5nIiwic3Ryb2tlSW5kaWNlcyIsImZhY2VzIiwic3BoZXJlIiwiZWxsaXBzb2lkIiwidmVydGV4Tm9ybWFscyIsImN5bGluZGVyIiwiY29uZSIsInRvcnVzIiwiX3VzZVBvaW50U2hhZGVyIiwiY3VyUG9pbnRTaGFkZXIiLCJiaW5kU2hhZGVyIiwiX2RyYXdQb2ludHMiLCJfcG9pbnRWZXJ0ZXhCdWZmZXIiLCJ1bmJpbmRTaGFkZXIiLCJ1TVZNYXRyaXgiLCJNYXRyaXgiLCJkcmF3QnVmZmVycyIsImltbWVkaWF0ZU1vZGUiLCJfYmV6aWVyVmVydGV4IiwiX2xvb2tVcFRhYmxlQmV6aWVyIiwiX2x1dEJlemllckRldGFpbCIsIl9iZXppZXJDb2VmZmljaWVudHMiLCJpc0JlemllciIsIl9xdWFkcmF0aWNWZXJ0ZXgiLCJfbG9va1VwVGFibGVRdWFkcmF0aWMiLCJfbHV0UXVhZHJhdGljRGV0YWlsIiwiX3F1YWRyYXRpY0NvZWZmaWNpZW50cyIsImlzUXVhZHJhdGljIiwiX2N1cnZlVmVydGV4IiwiaXNDdXJ2ZSIsIl9iZXppZXJUb0NhdG11bGwiLCIuL3A1Lkdlb21ldHJ5Iiwib3JiaXRDb250cm9sIiwiX2N1ckNhbWVyYSIsImNvbnRleHRNZW51RGlzYWJsZWQiLCJvbmNvbnRleHRtZW51Iiwid2hlZWxEZWZhdWx0RGlzYWJsZWQiLCJvbndoZWVsIiwiX29yYml0IiwiX2dldExvY2FsQXhlcyIsImV5ZVgiLCJleWVZIiwiZXllWiIsImRlYnVnTW9kZSIsIl9ncmlkIiwiX2F4ZXNJY29uIiwibm9EZWJ1Z01vZGUiLCJjdXJTdHJva2VDb2xvciIsImNhbWVyYU1hdHJpeCIsIm1hdDQiLCJhbWJpZW50TGlnaHQiLCJfdXNlTGlnaHRTaGFkZXIiLCJzZXRVbmlmb3JtIiwiY3VyRmlsbENvbG9yIiwiYW1iaWVudExpZ2h0Q29sb3JzIiwiZGlyZWN0aW9uYWxMaWdodCIsImRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25zIiwiZGlyZWN0aW9uYWxMaWdodENvbG9ycyIsInBvaW50TGlnaHQiLCJwb2ludExpZ2h0UG9zaXRpb25zIiwicG9pbnRMaWdodENvbG9ycyIsImdpZCIsInZ0Iiwidm4iLCJtb2RlbCIsIlNoYWRlciIsIl9mcmFnU3JjIiwiX3ZlcnRTcmMiLCJjcmVhdGVTaGFkZXIiLCJzaGFkZXIiLCJpc1N0cm9rZVNoYWRlciIsInNldFN0cm9rZVNoYWRlciIsInNldEZpbGxTaGFkZXIiLCJub3JtYWxNYXRlcmlhbCIsImRyYXdNb2RlIiwiX2dldE5vcm1hbFNoYWRlciIsInRleHR1cmUiLCJhbWJpZW50TWF0ZXJpYWwiLCJzcGVjdWxhck1hdGVyaWFsIiwiX2FwcGx5Q29sb3JCbGVuZCIsIkdMIiwiZGVwdGhNYXNrIiwiZW5hYmxlIiwiYmxlbmRFcXVhdGlvbiIsIkZVTkNfQUREIiwiYmxlbmRGdW5jIiwiU1JDX0FMUEhBIiwiT05FX01JTlVTX1NSQ19BTFBIQSIsImRpc2FibGUiLCIuL3A1LlRleHR1cmUiLCJjYW1lcmEiLCJwZXJzcGVjdGl2ZSIsIm9ydGhvIiwiY3JlYXRlQ2FtZXJhIiwiQ2FtZXJhIiwiX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3MiLCJfc2V0RGVmYXVsdENhbWVyYSIsImNhbWVyYVR5cGUiLCJwcm9qTWF0cml4IiwiZGVmYXVsdENhbWVyYUZPViIsImNhbWVyYUZPViIsImRlZmF1bHRBc3BlY3RSYXRpbyIsImRlZmF1bHRDYW1lcmFOZWFyIiwiZGVmYXVsdENhbWVyYUZhciIsImFzcGVjdFJhdGlvIiwiY2FtZXJhTmVhciIsImNhbWVyYUZhciIsImlkZW50aXR5IiwiX2lzQWN0aXZlIiwidVBNYXRyaXgiLCJfcm90YXRlVmlldyIsImNlbnRlclgiLCJjZW50ZXJZIiwiY2VudGVyWiIsInRpbHQiLCJsb29rQXQiLCJkZWZhdWx0RXllWCIsImRlZmF1bHRFeWVZIiwiZGVmYXVsdEV5ZVoiLCJtb3ZlIiwiZGVmYXVsdENlbnRlclgiLCJkZWZhdWx0Q2VudGVyWSIsImRlZmF1bHRDZW50ZXJaIiwiX3Jlc2l6ZSIsInNldENhbWVyYSIsImxpbmVWZXJ0aWNlcyIsImxpbmVOb3JtYWxzIiwiZWRnZXMiLCJfZ2V0RmFjZU5vcm1hbCIsImF2ZXJhZ2VOb3JtYWxzIiwiYXZlcmFnZVBvbGVOb3JtYWxzIiwibWF0MyIsImludmVydDN4MyIsInRyYW5zcG9zZTN4MyIsImludmVyc2VUcmFuc3Bvc2UiLCJkZXRlcm1pbmFudCIsInNoYXBlTW9kZSIsInZlcnRleENvbG9ycyIsInV2Q29vcmRzIiwidmVydGV4QnVmZmVyIiwiY29sb3JCdWZmZXIiLCJ1dkJ1ZmZlciIsImxpbmVWZXJ0ZXhCdWZmZXIiLCJsaW5lTm9ybWFsQnVmZmVyIiwicG9pbnRWZXJ0ZXhCdWZmZXIiLCJpc0ltbWVkaWF0ZURyYXdpbmciLCJfdXNlSW1tZWRpYXRlTW9kZVNoYWRlciIsIl9kcmF3U3Ryb2tlSW1tZWRpYXRlTW9kZSIsIl92VG9OQXJyYXkiLCJfdHJpYW5ndWxhdGUiLCJfZHJhd0ZpbGxJbW1lZGlhdGVNb2RlIiwiY3VyRmlsbFNoYWRlciIsImFQb3NpdGlvbiIsIl9iaW5kQnVmZmVyIiwiQVJSQVlfQlVGRkVSIiwiRFlOQU1JQ19EUkFXIiwiZW5hYmxlQXR0cmliIiwiRkxPQVQiLCJhVmVydGV4Q29sb3IiLCJhVGV4Q29vcmQiLCJkcmF3QXJyYXlzIiwiY3VyU3Ryb2tlU2hhZGVyIiwiX2ZsYXR0ZW4iLCJTVEFUSUNfRFJBVyIsImFEaXJlY3Rpb24iLCJfaW5pdEJ1ZmZlckRlZmF1bHRzIiwiX2ZyZWVCdWZmZXJzIiwiZ0hhc2giLCJkZWxldGVCdWZmZXIiLCJub3JtYWxCdWZmZXIiLCJpbmRleEJ1ZmZlciIsIm51bWJlck9mSXRlbXMiLCJsaW5lVmVydGV4Q291bnQiLCJfdXNlQ29sb3JTaGFkZXIiLCJFTEVNRU5UX0FSUkFZX0JVRkZFUiIsImFOb3JtYWwiLCJfZHJhd0FycmF5cyIsIl9kcmF3RWxlbWVudHMiLCJkcmF3RWxlbWVudHMiLCJVTlNJR05FRF9TSE9SVCIsIlBvaW50cyIsImltbWVkaWF0ZVZlcnQiLCJ2ZXJ0ZXhDb2xvclZlcnQiLCJ2ZXJ0ZXhDb2xvckZyYWciLCJub3JtYWxWZXJ0Iiwibm9ybWFsRnJhZyIsImJhc2ljRnJhZyIsImxpZ2h0VmVydCIsImxpZ2h0VGV4dHVyZUZyYWciLCJwaG9uZ1ZlcnQiLCJwaG9uZ0ZyYWciLCJmb250VmVydCIsImZvbnRGcmFnIiwibGluZVZlcnQiLCJsaW5lRnJhZyIsInBvaW50VmVydCIsInBvaW50RnJhZyIsInN0ZW5jaWwiLCJhbnRpYWxpYXMiLCJwcmVtdWx0aXBsaWVkQWxwaGEiLCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIiLCJfaW5pdENvbnRleHQiLCJ1Tk1hdHJpeCIsIl9kZWZhdWx0TGlnaHRTaGFkZXIiLCJfZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXIiLCJfZGVmYXVsdE5vcm1hbFNoYWRlciIsIl9kZWZhdWx0Q29sb3JTaGFkZXIiLCJfZGVmYXVsdFBvaW50U2hhZGVyIiwiX2dldExpbmVTaGFkZXIiLCJwb2ludFNpemUiLCJ0ZXh0dXJlcyIsIl90ZXNzeSIsIl9pbml0VGVzc3kiLCJmb250SW5mb3MiLCJERVBUSF9URVNUIiwiZGVwdGhGdW5jIiwiTEVRVUFMIiwidmlld3BvcnQiLCJkcmF3aW5nQnVmZmVyV2lkdGgiLCJkcmF3aW5nQnVmZmVySGVpZ2h0IiwiX3ZpZXdwb3J0IiwiZ2V0UGFyYW1ldGVyIiwiVklFV1BPUlQiLCJfcmVzZXRDb250ZXh0Iiwic2V0QXR0cmlidXRlcyIsImNsZWFyQ29sb3IiLCJDT0xPUl9CVUZGRVJfQklUIiwiREVQVEhfQlVGRkVSX0JJVCIsIl9nZXRJbW1lZGlhdGVNb2RlU2hhZGVyIiwiX2dldENvbG9yU2hhZGVyIiwiY3VyU3Ryb2tlV2VpZ2h0IiwicmVhZFBpeGVscyIsIlVOU0lHTkVEX0JZVEUiLCJzZXRQb2ludFNoYWRlciIsImlzTGlnaHRTaGFkZXIiLCJfZ2V0TGlnaHRTaGFkZXIiLCJfZ2V0UG9pbnRTaGFkZXIiLCJfZGVmYXVsdExpbmVTaGFkZXIiLCJfZ2V0Rm9udFNoYWRlciIsIl9kZWZhdWx0Rm9udFNoYWRlciIsImdldEV4dGVuc2lvbiIsIl9nZXRFbXB0eVRleHR1cmUiLCJfZW1wdHlUZXh0dXJlIiwiVGV4dHVyZSIsImdldFRleHR1cmUiLCJiaW5kQnVmZmVyIiwiYnVmZmVyRGF0YSIsIi4uL2NvcmUvcDUuUmVuZGVyZXIiLCIuL3A1LkNhbWVyYSIsIi4vcDUuTWF0cml4IiwiLi9wNS5TaGFkZXIiLCJfdmVydFNoYWRlciIsIl9mcmFnU2hhZGVyIiwiX2dsUHJvZ3JhbSIsIl9sb2FkZWRBdHRyaWJ1dGVzIiwiX2xvYWRlZFVuaWZvcm1zIiwidW5pZm9ybXMiLCJfYm91bmQiLCJzYW1wbGVycyIsIlZFUlRFWF9TSEFERVIiLCJzaGFkZXJTb3VyY2UiLCJjb21waWxlU2hhZGVyIiwiZ2V0U2hhZGVyUGFyYW1ldGVyIiwiQ09NUElMRV9TVEFUVVMiLCJnZXRTaGFkZXJJbmZvTG9nIiwiRlJBR01FTlRfU0hBREVSIiwiY3JlYXRlUHJvZ3JhbSIsImF0dGFjaFNoYWRlciIsImxpbmtQcm9ncmFtIiwiZ2V0UHJvZ3JhbVBhcmFtZXRlciIsIkxJTktfU1RBVFVTIiwiZ2V0UHJvZ3JhbUluZm9Mb2ciLCJfbG9hZEF0dHJpYnV0ZXMiLCJfbG9hZFVuaWZvcm1zIiwiQUNUSVZFX0FUVFJJQlVURVMiLCJnZXRBY3RpdmVBdHRyaWIiLCJnZXRBdHRyaWJMb2NhdGlvbiIsIkFDVElWRV9VTklGT1JNUyIsImdldEFjdGl2ZVVuaWZvcm0iLCJnZXRVbmlmb3JtTG9jYXRpb24iLCJTQU1QTEVSXzJEIiwic2FtcGxlckluZGV4IiwiY29tcGlsZSIsInVzZVByb2dyYW0iLCJiaW5kVGV4dHVyZXMiLCJfc2V0TWF0cml4VW5pZm9ybXMiLCJfc2V0Vmlld3BvcnRVbmlmb3JtIiwidW5iaW5kVGV4dHVyZXMiLCJhY3RpdmVUZXh0dXJlIiwiVEVYVFVSRTAiLCJiaW5kVGV4dHVyZSIsInVwZGF0ZSIsInVuaWZvcm0xaSIsInVwZGF0ZVRleHR1cmVzIiwiQk9PTCIsIklOVCIsInVuaWZvcm0xaXYiLCJ1bmlmb3JtMWZ2IiwidW5pZm9ybTFmIiwiRkxPQVRfTUFUMyIsInVuaWZvcm1NYXRyaXgzZnYiLCJGTE9BVF9NQVQ0IiwidW5pZm9ybU1hdHJpeDRmdiIsIkZMT0FUX1ZFQzIiLCJ1bmlmb3JtMmZ2IiwidW5pZm9ybTJmIiwiRkxPQVRfVkVDMyIsInVuaWZvcm0zZnYiLCJ1bmlmb3JtM2YiLCJGTE9BVF9WRUM0IiwidW5pZm9ybTRmdiIsInVuaWZvcm00ZiIsIklOVF9WRUMyIiwidW5pZm9ybTJpdiIsInVuaWZvcm0yaSIsIklOVF9WRUMzIiwidW5pZm9ybTNpdiIsInVuaWZvcm0zaSIsIklOVF9WRUM0IiwidW5pZm9ybTRpdiIsInVuaWZvcm00aSIsInVVc2VMaWdodGluZyIsInVBbWJpZW50TGlnaHRDb3VudCIsInVEaXJlY3Rpb25hbExpZ2h0Q291bnQiLCJ1UG9pbnRMaWdodENvdW50IiwidUFtYmllbnRDb2xvciIsInVEaXJlY3Rpb25hbENvbG9yIiwidVBvaW50TGlnaHRMb2NhdGlvbiIsInVQb2ludExpZ2h0Q29sb3IiLCJ1TGlnaHRpbmdEaXJlY3Rpb24iLCJ1U3BlY3VsYXIiLCJpc1RleHR1cmVTaGFkZXIiLCJpc0NvbG9yU2hhZGVyIiwidU1hdGVyaWFsQ29sb3IiLCJpc1RleExpZ2h0U2hhZGVyIiwidVN0cm9rZVdlaWdodCIsImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwidmVydGV4QXR0cmliUG9pbnRlciIsImdsVGV4IiwiZ2xUYXJnZXQiLCJURVhUVVJFXzJEIiwiZ2xGb3JtYXQiLCJtaXBtYXBzIiwiZ2xNaW5GaWx0ZXIiLCJnbE1hZ0ZpbHRlciIsImdsV3JhcFMiLCJDTEFNUF9UT19FREdFIiwiZ2xXcmFwVCIsImlzU3JjTWVkaWFFbGVtZW50IiwiX3ZpZGVvUHJldlVwZGF0ZVRpbWUiLCJpc1NyY0hUTUxFbGVtZW50IiwiaXNTcmNQNUltYWdlIiwiaXNTcmNQNUdyYXBoaWNzIiwiaXNJbWFnZURhdGEiLCJfZ2V0VGV4dHVyZURhdGFGcm9tU291cmNlIiwiY3JlYXRlVGV4dHVyZSIsInRleFBhcmFtZXRlcmkiLCJURVhUVVJFX01BR19GSUxURVIiLCJURVhUVVJFX01JTl9GSUxURVIiLCJURVhUVVJFX1dSQVBfUyIsIlRFWFRVUkVfV1JBUF9UIiwibG9hZGVkbWV0YWRhdGEiLCJ0ZXhJbWFnZTJEIiwiX2RpcnR5IiwidW5iaW5kVGV4dHVyZSIsInNldEludGVycG9sYXRpb24iLCJzZXRXcmFwTW9kZSIsIk1JUlJPUkVEX1JFUEVBVCIsImluZm9zIiwiZmluZEltYWdlIiwic3Ryb2tlSW1hZ2VJbmZvcyIsImNvbERpbUltYWdlSW5mb3MiLCJyb3dEaW1JbWFnZUluZm9zIiwiY29sQ2VsbEltYWdlSW5mb3MiLCJyb3dDZWxsSW1hZ2VJbmZvcyIsImdseXBoSW5mb3MiLCJnZXRHbHlwaEluZm8iLCJwMCIsImMwIiwiYzEiLCJwMSIsInRvUXVhZHJhdGljIiwicXVhZEVycm9yIiwic3BsaXRJbmZsZWN0aW9ucyIsImNlbGxJbWFnZUluZm8iLCJkaW1PZmZzZXQiLCJkaW1JbWFnZUluZm8iLCJnbHlwaCIsInVHbHlwaFJlY3QiLCJzdHJva2VJbWFnZUluZm8iLCJzdHJva2VzIiwiY29sSW5mbyIsInJvd0luZm8iLCJ1R3JpZE9mZnNldCIsIl9mb250SW5mbyIsIl90ZXh0R2VvbSIsIi4vcDUuUmVuZGVyZXJHTCIsIl9fd2VicGFja19leHBvcnRzX18iLCJwNV9saWJfcDVfbWluX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18iLCJwNV9saWJfcDVfbWluX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCIsInRvbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyIsInRvbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0Iiwic2tldGNoIiwicGhhc2VyIiwiY2hvcnVzIiwiSGV4YWdvbiIsIltvYmplY3QgT2JqZWN0XSIsImNhbnBsYXkiLCJmaWxsQ29sb3IiLCJmbSIsInhWYWwiLCJ5VmFsIiwicE1vdXNlWCIsInBNb3VzZVkiLCJiYWxsWCIsImJhbGxZIiwidGlsZXMiLCJ0eCIsInR5IiwibngiLCJueSIsImNhblBsYXkiLCJldmFsIl0sIm1hcHBpbmdzIjoiYUFDQSxJQUFBQSxLQUdBLFNBQUFDLEVBQUFDLEdBR0EsR0FBQUYsRUFBQUUsR0FDQSxPQUFBRixFQUFBRSxHQUFBQyxRQUdBLElBQUFDLEVBQUFKLEVBQUFFLElBQ0FHLEVBQUFILEVBQ0FJLEdBQUEsRUFDQUgsWUFVQSxPQU5BSSxFQUFBTCxHQUFBTSxLQUFBSixFQUFBRCxRQUFBQyxJQUFBRCxRQUFBRixHQUdBRyxFQUFBRSxHQUFBLEVBR0FGLEVBQUFELFFBS0FGLEVBQUFRLEVBQUFGLEVBR0FOLEVBQUFTLEVBQUFWLEVBR0FDLEVBQUFVLEVBQUEsU0FBQVIsRUFBQVMsRUFBQUMsR0FDQVosRUFBQWEsRUFBQVgsRUFBQVMsSUFDQUcsT0FBQUMsZUFBQWIsRUFBQVMsR0FBMENLLFlBQUEsRUFBQUMsSUFBQUwsS0FLMUNaLEVBQUFrQixFQUFBLFNBQUFoQixHQUNBLG9CQUFB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QUFBLDhVQUFBdm9DLElBQXVWd29DLEVBQUEsS0FBQWgyQixFQUFBLEtBQUFLLEVBQUEsS0FBQUMsRUFBQSxLQUFBa0csRUFBQSxLQUFBK0MsRUFBQSxLQUFBYSxFQUFBLEtBQUEyQixFQUFBLEtBQUFHLEVBQUEsS0FBQUMsRUFBQSxLQUFBMEQsR0FBQSxLQUFBb21CLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLFVBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLFFBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLFVBQUFDLEdBQUEsVUFBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxRQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxVQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLGFBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLE1BQXcrQkMsSUFBSzdHLEVBQUEsRUFBQWgyQixFQUFBLEVBQUFLLEVBQUEsRUFBQUMsRUFBQSxFQUFBa0csRUFBQSxFQUFBK0MsRUFBQSxFQUFBYSxFQUFBLEVBQUEyQixFQUFBLEVBQUFHLEVBQUEsRUFBQUMsRUFBQSxFQUFBMEQsR0FBQSxFQUFBb21CLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFDN3ArQkMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsR0FBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsR0FBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEdBQWtpQjV2QyxJQUFLOHZDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsTUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLE1BQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxVQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFVBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsU0FBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLE1BQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsVUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxTQUFBQyxLQUFBLE1BQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsTUFBQUMsS0FBQSxTQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxhQUFBQyxLQUFBLEtBQUFDLEtBQUEsYUFBQUMsS0FBQSxVQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEs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T0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsUUFBdUI2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxPQUFBNzdFLElBQUEsU0FBMEI2N0UsTUFBQSxPQUFBNzdFLElBQUEsU0FBMEI2N0UsTUFBQSxRQUFBNzdFLElBQUEsVUFBNEI2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxPQUFBNzdFLElBQUEsU0FBMEI2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxPQUFBNzdFLElBQUEsU0FBMEI2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxPQUFBNzdFLElBQUEsU0FBMEI2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsUUFBdUI2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxPQUFBNzdFLElBQUEsU0FBd0I4MkQsSUFBTWQsTUFIK2pVLFNBQUF6bUQsRUFBQUssR0FBaUIsSUFBQWpiLEtBQVFDLEVBQUEsSUFBQTR3RCxHQUFBUSxPQUFBejJDLEVBQUFLLEdBQXNCamIsRUFBQThJLFFBQUE3SSxFQUFBdzJELGNBQUF6MkQsRUFBQW1uRixjQUFBbG5GLEVBQUFnMkQsYUFBQWoyRCxFQUFBOCtELGNBQUE3K0QsRUFBQXcyRCxjQUFBejJELEVBQUFrL0QsYUFBQWovRCxFQUFBdzJELGNBQUF6MkQsRUFBQW9uRixPQUFBbm5GLEVBQUF3MkQsY0FBQXoyRCxFQUFBcW5GLGdCQUFBcG5GLEVBQUFnMkQsYUFBQWoyRCxFQUFBc25GLGdCQUFBcm5GLEVBQUFnMkQsYUFBQWoyRCxFQUFBdW5GLGtCQUFBdG5GLEVBQUFnMkQsYUFBQWoyRCxFQUFBd25GLGtCQUFBdm5GLEVBQUFnMkQsYUFBQWoyRCxFQUFBeW5GLGtCQUFBeG5GLEVBQUFnMkQsYUFBQWoyRCxFQUFBMG5GLGtCQUFBem5GLEVBQUFnMkQsYUFBQWoyRCxFQUFBMm5GLG9CQUFBMW5GLEVBQUFnMkQsYUFBQWoyRCxFQUFBNG5GLG9CQUFBM25GLEVBQUFnMkQsYUFBQWoyRCxFQUFBNm5GLGVBQUE1bkYsRUFBQWcyRCxhQUFBajJELEVBQUE4bkYsbUJBQUE3bkYsRUFBQWcyRCxhQUFBajJELEVBQUErbkYsYUFBQTluRixFQUFBZzJELGFBQUFqMkQsRUFBQWdvRixVQUF1aEIsUUFBQXA3RSxFQUFBLEVBQVlBLEVBQUEsR0FBS0EsSUFBQTVNLEVBQUFnb0YsT0FBQXA3RSxHQUFBM00sRUFBQW14RCxZQUE4QixPQUFBcHhELEVBQUFpb0YsZ0JBQUFob0YsRUFBQTJwRSxhQUFBNXBFLEVBQUFrb0YsZ0JBQUFqb0YsRUFBQTJwRSxhQUFBNXBFLEVBQUFtb0YsZ0JBQUFsb0YsRUFBQTJwRSxhQUFBNXBFLEVBQUFvb0YsZ0JBQUFub0YsRUFBQTJwRSxhQUFBNXBFLEVBQUFxb0YsVUFBQXJwQyxPQUFBQyxhQUFBaC9DLEVBQUFteEQsWUFBQW54RCxFQUFBbXhELFlBQUFueEQsRUFBQW14RCxZQUFBbnhELEVBQUFteEQsYUFBQXB4RCxFQUFBcS9ELFlBQUFwL0QsRUFBQXcyRCxjQUFBejJELEVBQUFzb0YsaUJBQUFyb0YsRUFBQXcyRCxjQUFBejJELEVBQUF1b0YsZ0JBQUF0b0YsRUFBQXcyRCxjQUFBejJELEVBQUF3b0YsY0FBQXZvRixFQUFBZzJELGFBQUFqMkQsRUFBQXlvRixlQUFBeG9GLEVBQUFnMkQsYUFBQWoyRCxFQUFBMG9GLGFBQUF6b0YsRUFBQWcyRCxhQUFBajJELEVBQUEyb0YsWUFBQTFvRixFQUFBdzJELGNBQUF6MkQsRUFBQTRvRixhQUFBM29GLEVBQUF3MkQsY0FBQXoyRCxFQUFBOEksU0FBQSxJQUFBOUksRUFBQTZvRixpQkFBQTVvRixFQUFBMnBFLGFBQUE1cEUsRUFBQThvRixpQkFBQTdvRixFQUFBMnBFLGNBQUE1cEUsRUFBQThJLFNBQUEsSUFBQTlJLEVBQUErb0YsU0FBQTlvRixFQUFBZzJELGFBQUFqMkQsRUFBQWdwRixXQUFBL29GLEVBQUFnMkQsYUFBQWoyRCxFQUFBaXBGLGNBQUFocEYsRUFBQXcyRCxjQUFBejJELEVBQUFrcEYsWUFBQWpwRixFQUFBdzJELGNBQUF6MkQsRUFBQW1wRixhQUFBbHBGLEVBQUF3MkQsZUFBQXoyRCxHQUdwclZ3dEUsS0FIODRXLFNBQUE1eUQsR0FBZSxXQUFBNDRDLEdBQUFpQixNQUFBLFNBQTZCdjBELEtBQUEsVUFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBdUNWLEtBQUEsZ0JBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQTRDVixLQUFBLGdCQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUE2Q1YsS0FBQSxlQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUE0Q1YsS0FBQSxTQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUFzQ1YsS0FBQSxrQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsTUFBZ0RWLEtBQUEsa0JBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLE1BQWdEVixLQUFBLG9CQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFnRFYsS0FBQSxvQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsTUFBa0RWLEtBQUEsb0JBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLE1BQWtEVixLQUFBLG9CQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxNQUFrRFYsS0FBQSxzQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBa0RWLEtBQUEsc0JBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLE1BQW9EVixLQUFBLGlCQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxLQUE4Q1YsS0FBQSxxQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsTUFBbURWLEtBQUEsZUFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBMkNWLEtBQUEsY0FBQWdRLEtBQUEsT0FBQXRQLE1BQUEsSUFBeUNWLEtBQUEsY0FBQWdRLEtBQUEsT0FBQXRQLE1BQUEsSUFBeUNWLEtBQUEsVUFBQWdRLEtBQUEsT0FBQXRQLE1BQUEsSUFBcUNWLEtBQUEsY0FBQWdRLEtBQUEsT0FBQXRQLE1BQUEsSUFBeUNWLEtBQUEsWUFBQWdRLEtBQUEsT0FBQXRQLE1BQUEsSUFBdUNWLEtBQUEsbUJBQUFnUSxLQUFBLE9BQUF0UCxNQUFBLElBQThDVixLQUFBLFlBQUFnUSxLQUFBLE9BQUF0UCxNQUFBLElBQXVDVixLQUFBLGNBQUFnUSxLQUFBLE9BQUF0UCxNQUFBLElBQXlDVixLQUFBLFdBQUFnUSxLQUFBLE9BQUF0UCxNQUFBLElBQXNDVixLQUFBLFdBQUFnUSxLQUFBLE9BQUF0UCxNQUFBLElBQXNDVixLQUFBLGtCQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUE4Q1YsS0FBQSxrQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBOENWLEtBQUEsa0JBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQThDVixLQUFBLGtCQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUE4Q1YsS0FBQSxZQUFBZ1EsS0FBQSxZQUFBdFAsTUFBQSxTQUFpRFYsS0FBQSxjQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUEyQ1YsS0FBQSxtQkFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBZ0RWLEtBQUEsa0JBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLElBQStDVixLQUFBLGdCQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUE0Q1YsS0FBQSxpQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBNkNWLEtBQUEsZUFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBMkNWLEtBQUEsY0FBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBMkNWLEtBQUEsZUFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBNENWLEtBQUEsbUJBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQStDVixLQUFBLG1CQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUErQ1YsS0FBQSxXQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUF1Q1YsS0FBQSxhQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUF5Q1YsS0FBQSxnQkFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBNkNWLEtBQUEsY0FBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBMkNWLEtBQUEsZUFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBMENnYSxJQUduN2F3dUUsY0FBQW5DLEdBQUFvQyxnQkFINjlULFNBQUF6dUUsR0FBZSxRQUFBSyxFQUFBLEVBQVlBLEVBQUFnc0UsR0FBQTFqRixPQUFZMFgsR0FBQSxHQUFNLElBQUFqYixFQUFBaW5GLEdBQUFoc0UsR0FBWSxHQUFBTCxHQUFBNWEsRUFBQWtuRixPQUFBdHNFLEVBQUE1YSxFQUFBcUwsSUFBQSxPQUFBNFAsRUFBZ0MsV0FHamdVb25ELElBQUtoQixNQUg4M2EsU0FBQXptRCxFQUFBSyxHQUFpQixJQUFBamIsS0FBUUMsRUFBQSxJQUFBNHdELEdBQUFRLE9BQUF6MkMsRUFBQUssR0FBc0IsT0FBQWpiLEVBQUE4SSxRQUFBN0ksRUFBQStwRSxlQUFBaHFFLEVBQUFzcEYsWUFBQXJwRixFQUFBZ2dFLGFBQUFqZ0UsRUFBQXVwRixrQkFBQXRwRixFQUFBZzJELGFBQUFqMkQsRUFBQXdwRixtQkFBQXZwRixFQUFBZzJELGFBQUFqMkQsRUFBQXlwRixhQUFBeHBGLEVBQUEycEUsYUFBQTVwRSxFQUFBMHBGLGFBQUF6cEYsRUFBQTJwRSxhQUFBNXBFLEVBQUEycEYsYUFBQTFwRixFQUFBMnBFLGFBQUE1cEUsRUFBQTRwRixZQUFBM3BGLEVBQUEycEUsYUFBQTVwRSxFQUFBNnBGLFlBQUE1cEYsRUFBQTJwRSxhQUFBNXBFLEVBQUE4SSxTQUFxUyxPQUFBOUksRUFBQXN3RCxNQUFBQyxHQUFBNW1ELFFBQTBCLE1BQU0sT0FBQTNKLEVBQUF3d0QsZUFBQXZ3RCxFQUFBdzJELGNBQUF6MkQsRUFBQXl3RCxlQUFBLElBQUExcUQsTUFBQS9GLEVBQUF3d0QsZ0JBQXFGLFFBQUE1akQsRUFBQSxFQUFZQSxFQUFBNU0sRUFBQXd3RCxlQUFtQjVqRCxJQUFBNU0sRUFBQXl3RCxlQUFBN2pELEdBQUEzTSxFQUFBdzJELGNBQXdDejJELEVBQUFzd0QsU0FBVyxRQUFBcDJDLEVBQUEsRUFBWUEsRUFBQWxhLEVBQUF3d0QsZUFBbUJ0MkMsSUFBQSxHQUFBbGEsRUFBQXl3RCxlQUFBdjJDLElBQUFxMkMsR0FBQWh0RCxPQUFBLENBQXVDLElBQUFnWCxFQUFBdGEsRUFBQXMzRCxZQUFvQnYzRCxFQUFBc3dELE1BQUF6ckQsS0FBQTVFLEVBQUE2cEUsWUFBQXZ2RCxJQUErQixNQUFNLFNBQUF2YSxFQUFBd3dELGVBQUF2d0QsRUFBQXcyRCxjQUFBejJELEVBQUFxaEIsT0FBQSxJQUFBdGIsTUFBQS9GLEVBQUF3d0QsZ0JBQStFLFFBQUF4VCxFQUFBLEVBQVlBLEVBQUFoOUMsRUFBQXd3RCxlQUFtQnhULElBQUFoOUMsRUFBQXFoQixPQUFBMjdCLEdBQUEvOEMsRUFBQXMzRCxZQUE4QixPQUFBdjNELEdBR3BxY3d0RSxLQUg2cWMsV0FBYyxXQUFBaGEsR0FBQWlCLE1BQUEsU0FBNkJ2MEQsS0FBQSxVQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxTQUEyQ1YsS0FBQSxjQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUEwQ1YsS0FBQSxvQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBZ0RWLEtBQUEscUJBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQWlEVixLQUFBLGVBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQTJDVixLQUFBLGVBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQTJDVixLQUFBLGVBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQTJDVixLQUFBLGNBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQTBDVixLQUFBLGNBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLE9BR3hpZGtwRixHQUFBLElBQUEvakYsTUFBQSxHQUFpQitqRixHQUFBLGNBQWlCLElBQUFsdkUsRUFBQTNZLEtBQUFvZixPQUFBcGYsS0FBQWd1RCxlQUFBaDFDLEVBQUFoWixLQUFBdzBELGNBQTJELFdBQUF4N0MsR0FBYzI2QyxZQUFBLEVBQUEwVyxTQUFBcnFFLEtBQUFrcEUsYUFBQXRqRCxFQUFBeWtELFVBQUF5ZCxhQUFBOW5GLEtBQUF3MEQsZUFBcUYsSUFBQXg3QyxHQUFRMjZDLFlBQUEsRUFBQTBXLFNBQUFycUUsS0FBQWtwRSxhQUFBdGpELEVBQUF5a0QsVUFBQTBkLFdBQUEvbkYsS0FBQWlvRSwwQkFBeUZuYixHQUFBQyxRQUFBLE9BQUFwMEMsRUFBQXpZLFNBQUEsK0NBQWlGMm5GLEdBQUEsY0FBa0IsSUFBQWx2RSxFQUFBM1ksS0FBQXcwRCxjQUF5QixPQUFBMUgsR0FBQWdHLFNBQUEsSUFBQW42QyxFQUFBLG9FQUE2Rmc3QyxZQUFBaDdDLEVBQUEweEQsU0FBQXJxRSxLQUFBa3BFLGFBQUF0akQsRUFBQXlrRCxVQUFBMmQsVUFBQWhvRixLQUFBb3BFLHFCQUF3RnllLEdBQUEsY0FBa0IsSUFBQWx2RSxFQUFBM1ksS0FBQXcwRCxjQUF5QixPQUFBMUgsR0FBQWdHLFNBQUEsSUFBQW42QyxFQUFBLHFFQUE4Rmc3QyxZQUFBaDdDLEVBQUEweEQsU0FBQXJxRSxLQUFBa3BFLGFBQUF0akQsRUFBQXlrRCxVQUFBNGQsY0FBQWpvRixLQUFBb3BFLHFCQUE0RnllLEdBQUEsY0FBa0IsSUFBQWx2RSxFQUFBM1ksS0FBQXcwRCxjQUF5QixPQUFBMUgsR0FBQWdHLFNBQUEsSUFBQW42QyxFQUFBLG9EQUE2RWc3QyxZQUFBaDdDLEVBQUEweEQsU0FBQXJxRSxLQUFBa3BFLGFBQUF0akQsRUFBQXlrRCxVQUFBNmQsYUFBQWxvRixLQUFBb3BFLGlCQUFBLFdBQW1HLE9BQU8rZSxTQUFBbm9GLEtBQUF3MEQsY0FBQU8sV0FBQS8wRCxLQUFBa29FLGdCQUFBbG9FLEtBQUF3MEQsY0FBQSxRQUF1RixJQUFBNHpCLElBQVFDLGNBQUF6aUUsRUFBQXFoRCxPQUFBcWhCLGdCQUFBMWlFLEVBQUFxaEQsUUFBaUQ0Z0IsR0FBQSxjQUFpQixJQUFBbHZFLEVBQUEzWSxLQUFBb2YsT0FBQXBmLEtBQUFndUQsZUFBQWgxQyxFQUFBaFosS0FBQXcwRCxjQUEyRCxPQUFBeDdDLEVBQUEsT0FBZ0IyNkMsWUFBQTM2QyxFQUFBcXhELFNBQUFycUUsS0FBQWtwRSxhQUFBdGpELEVBQUF5a0QsVUFBQWtlLFNBQUF2b0YsS0FBQW9wRSxpQkFBQSxXQUErRixJQUFBendELEVBQUEzWSxLQUFBdzBELGNBQUF4N0MsRUFBQWhaLEtBQUF3MEQsY0FBOEMsT0FBT25rRCxNQUFBclEsS0FBQWtvRSxnQkFBQXZ2RCxFQUFBLEdBQUE2dkUsY0FBQXhvRixLQUFBcW9FLGdCQUFBcnZELEVBQUFvdkUsUUFBNkUsT0FBQXB2RSxFQUFBLE9BQWdCMjZDLFlBQUEzNkMsRUFBQXF4RCxTQUFBcnFFLEtBQUFrcEUsYUFBQXRqRCxFQUFBeWtELFVBQUFDLFNBQUF0cUUsS0FBQWtwRSxhQUFBdGpELEVBQUEwa0QsVUFBQW1lLFVBQUF6b0YsS0FBQW9wRSxpQkFBQSxXQUF1SSxJQUFBendELEVBQUEzWSxLQUFBdzBELGNBQUF4N0MsRUFBQWhaLEtBQUF3MEQsY0FBOEMsT0FBT2lWLFFBQUF6cEUsS0FBQWtvRSxnQkFBQXZ2RCxFQUFBLEdBQUE2dkUsY0FBQXhvRixLQUFBcW9FLGdCQUFBcnZELEVBQUFvdkUsUUFBK0UsT0FBQXB2RSxFQUFBLENBQVUsSUFBQWpiLEVBQUFpQyxLQUFBdzBELGNBQUF4MkQsRUFBQWdDLEtBQUF3MEQsY0FBOEMsT0FBT2IsWUFBQTM2QyxFQUFBMHZFLFVBQUExb0YsS0FBQW1vRSxVQUFBcHFFLEVBQUE2bkIsRUFBQWtrRCxRQUFBbGtELEVBQUF5a0QsV0FBQW1lLGNBQUF4b0YsS0FBQXFvRSxnQkFBQXJxRSxFQUFBb3FGLEtBQTBHdDdCLEdBQUFDLFFBQUEsT0FBQXAwQyxFQUFBelksU0FBQSxrREFBOEUybkYsR0FBQSxjQUFrQixJQUFBbHZFLEVBQUEzWSxLQUFBb2YsT0FBQXBmLEtBQUFndUQsZUFBQWgxQyxFQUFBaFosS0FBQXcwRCxjQUEyRCxXQUFBeDdDLEdBQWMyNkMsWUFBQSxFQUFBMFcsU0FBQXJxRSxLQUFBa3BFLGFBQUF0akQsRUFBQXlrRCxVQUFBc2UsY0FBQTNvRixLQUFBb3BFLGlCQUFBLFdBQW9HLE9BQU93ZixVQUFBNW9GLEtBQUFrb0Usa0JBQUE3M0QsTUFBQXJRLEtBQUFrb0UsZ0JBQUFsb0UsS0FBQWcwRCxhQUFBLEdBQUE2MEIsVUFBQTdvRixLQUFBa29FLGtCQUFBc2dCLGNBQUF4b0YsS0FBQXFvRSxnQkFBQStmLFFBQTRKLElBQUFwdkUsR0FBUTI2QyxZQUFBLEVBQUEwVyxTQUFBcnFFLEtBQUFrcEUsYUFBQXRqRCxFQUFBeWtELFVBQUF5ZSxrQkFBQTlvRixLQUFBa3BFLGFBQUF0akQsRUFBQTBrRCxVQUFBeWUsY0FBQS9vRixLQUFBa3BFLGFBQUF0akQsRUFBQTBrRCxVQUFBMGUsa0JBQUFocEYsS0FBQWtwRSxhQUFBdGpELEVBQUEwa0QsVUFBQTJlLGNBQUFqcEYsS0FBQW9wRSxpQkFBQSxXQUFnUCxPQUFPd2YsVUFBQTVvRixLQUFBa29FLGtCQUFBNzNELE1BQUFyUSxLQUFBa29FLGdCQUFBbG9FLEtBQUFnMEQsYUFBQSxHQUFBNjBCLFVBQUE3b0YsS0FBQWtvRSxrQkFBQXNnQixjQUFBeG9GLEtBQUFxb0UsZ0JBQUErZixRQUE0SixJQUFBcHZFLEdBQVEyNkMsWUFBQSxFQUFBdTFCLGtCQUFBbHBGLEtBQUFtb0UsVUFBQXZpRCxFQUFBa2tELFFBQUFsa0QsRUFBQXlrRCxXQUFBOGUsY0FBQW5wRixLQUFBbW9FLFVBQUF2aUQsRUFBQWtrRCxRQUFBbGtELEVBQUF5a0QsV0FBQStlLGtCQUFBcHBGLEtBQUFtb0UsVUFBQXZpRCxFQUFBa2tELFFBQUFsa0QsRUFBQXlrRCxXQUFBbWUsY0FBQXhvRixLQUFBcW9FLGdCQUFBK2YsVUFBeU50N0IsR0FBQUMsUUFBQSxPQUFBcDBDLEVBQUF6WSxTQUFBLGtEQUFvRjJuRixHQUFBLGNBQWtCLElBQUFsdkUsRUFBQTNZLEtBQUF3MEQsY0FBeUIxSCxHQUFBZ0csU0FBQSxJQUFBbjZDLEVBQUEsb0VBQXNGLElBQUFLLEVBQUFoWixLQUFBdzBELGNBQUF6MkQsRUFBQSxJQUFBNm5CLEVBQUE1bEIsS0FBQSs3QyxLQUFBLzdDLEtBQUFvZixPQUFBcGYsS0FBQTJuRSxjQUEwRSxPQUFPaFUsWUFBQSxFQUFBbEcsV0FBQXowQyxFQUFBaWQsVUFBQTR4RCxHQUFBN3VFLEdBQUFuYixLQUFBRSxLQUFvRDhwRixHQUFBLGNBQWtCLElBQUFsdkUsRUFBQTNZLEtBQUF3MEQsY0FBeUIsT0FBQTFILEdBQUFnRyxTQUFBLElBQUFuNkMsRUFBQSw4RkFBdUhnN0MsWUFBQWg3QyxFQUFBMHhELFNBQUFycUUsS0FBQWtwRSxhQUFBdGpELEVBQUF5a0QsVUFBQTZlLGtCQUFBbHBGLEtBQUFtb0UsVUFBQXZpRCxFQUFBa2tELFFBQUFsa0QsRUFBQXlrRCxXQUFBK2Usa0JBQUFwcEYsS0FBQW1vRSxVQUFBdmlELEVBQUFra0QsUUFBQWxrRCxFQUFBeWtELFdBQUFnZixZQUFBcnBGLEtBQUFrb0Usb0JBQTBNLElBQUFvaEIsR0FBQSxJQUFBeGxGLE1BQUEsR0FBb0J3bEYsR0FBQSxZQUFBM3dFLEdBQWtCLFdBQUFBLEVBQUFnN0MsWUFBQSxJQUFBcEMsR0FBQWlCLE1BQUEsc0JBQTREdjBELEtBQUEsY0FBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBMkNWLEtBQUEsV0FBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBQTR5RCxHQUFBaVYsU0FBQTd0RCxFQUFBMHhELFlBQWlFcHNFLEtBQUEsZUFBQWdRLEtBQUEsU0FBQXRQLE1BQUFnYSxFQUFBbXZFLGdCQUF1RCxJQUFBdjJCLEdBQUFpQixNQUFBLHNCQUFzQ3YwRCxLQUFBLGNBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLElBQTJDVixLQUFBLFdBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQUE0eUQsR0FBQWlWLFNBQUE3dEQsRUFBQTB4RCxZQUErRGprRCxPQUFBbXJDLEdBQUFxVixXQUFBLGFBQUFqdUQsRUFBQW92RSxlQUFvRHVCLEdBQUEsWUFBQTN3RSxHQUFtQixPQUFBbTBDLEdBQUFDLE9BQUEsSUFBQXAwQyxFQUFBZzdDLFlBQUEsNENBQUFwQyxHQUFBaUIsTUFBQSxzQkFBOEd2MEQsS0FBQSxjQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUEyQ1YsS0FBQSxXQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFBNHlELEdBQUFpVixTQUFBN3RELEVBQUEweEQsWUFBK0Rqa0QsT0FBQW1yQyxHQUFBc1YsVUFBQSxTQUFBbHVELEVBQUFzdkUsY0FBQSxTQUFBdHZFLEdBQTJELFdBQUE0NEMsR0FBQWlCLE1BQUEsb0JBQUFqQixHQUFBcVYsV0FBQSxZQUFBanVELFNBQTBFMndFLEdBQUEsWUFBQTN3RSxHQUFtQixPQUFBbTBDLEdBQUFDLE9BQUEsSUFBQXAwQyxFQUFBZzdDLFlBQUEsNENBQUFwQyxHQUFBaUIsTUFBQSxzQkFBOEd2MEQsS0FBQSxjQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUEyQ1YsS0FBQSxXQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFBNHlELEdBQUFpVixTQUFBN3RELEVBQUEweEQsWUFBK0Rqa0QsT0FBQW1yQyxHQUFBc1YsVUFBQSxTQUFBbHVELEVBQUF1dkUsYUFBQSxTQUFBdnZFLEdBQTBELFdBQUE0NEMsR0FBQWlCLE1BQUEsbUJBQUFqQixHQUFBc1YsVUFBQSxXQUFBbHVELEVBQUEsU0FBQUEsR0FBNkUsV0FBQTQ0QyxHQUFBaUIsTUFBQSxrQkFBc0N2MEQsS0FBQSxXQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQWdhLEVBQUF3dkUsV0FBK0MvaEUsT0FBQW1yQyxHQUFBcVYsV0FBQSxZQUFBanVELEVBQUFvOEMsV0FBQXA4QyxFQUFBbzhDLFdBQUF6ekQsT0FBQSxhQUFpRixJQUFBKy9ELElBQVFqQyxNQUg4bFQsU0FBQXptRCxFQUFBSyxHQUF3QixJQUFBamIsRUFBQSxJQUFBNm5CLEVBQUFqTixFQUFQSyxLQUFBLEdBQU9oYixFQUFBRCxFQUFBZ3FFLGFBQUEsR0FBcUMsT0FBQWpiLEdBQUFnRyxTQUFBLElBQUE5MEQsR0FBQSxNQUFBQSxFQUFBLHVDQUFBQSxHQUE0RTZJLFFBQUE3SSxFQUFBdXJGLFFBQUF4ckYsRUFBQTBzRSxrQkFBQStlLFNBQUF6ckYsRUFBQTJzRSxtQkFBQStlLFFBQUExckYsRUFBQTRzRSxnQkFBQWtkLE1BQW9HaGhGLFFBQUE3SSxFQUFBdXJGLFFBQUF4ckYsRUFBQTBzRSxrQkFBQStlLFNBQUF6ckYsRUFBQTJzRSxtQkFBQStlLFFBQUExckYsRUFBQTRzRSxnQkFBQWtkLElBQUE2QixXQUFBM3JGLEVBQUE4c0UsK0JBRzMwVFUsS0FIdzlULFNBQUE1eUQsR0FBZSxXQUFBNDRDLEdBQUFpQixNQUFBLFNBQTZCdjBELEtBQUEsVUFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsUUFBMENWLEtBQUEsVUFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBQTR5RCxHQUFBa1YsV0FBQTl0RCxFQUFBNHdFLFdBQWlFdHJGLEtBQUEsV0FBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBQTR5RCxHQUFBbVYsWUFBQS90RCxFQUFBNndFLFlBQW9FdnJGLEtBQUEsVUFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBQTR5RCxHQUFBb1YsV0FBQWh1RCxFQUFBOHdFLFFBQUFILFNBR2xxVTduQixJQUFLckMsTUFIa3VVLFNBQUF6bUQsRUFBQUssR0FBaUIsSUFBQWpiLEVBQUEsSUFBQTZ3RCxHQUFBUSxPQUFBejJDLEVBQUFLLEdBQUFoYixFQUFBRCxFQUFBNHBFLGFBQTBDN2EsR0FBQWdHLFNBQUEsSUFBQTkwRCxFQUFBLG1DQUFBRCxFQUFBNHBFLGFBQUE1cEUsRUFBQTRwRSxhQUFtRixRQUFBaDlELEVBQUE1TSxFQUFBNHBFLGFBQUExdkQsS0FBNkJLLEVBQUEsRUFBS0EsRUFBQTNOLEVBQUkyTixJQUFBLENBQUssSUFBQXlpQyxFQUFBaDlDLEVBQUFnZ0UsV0FBQXJnRSxFQUFBSyxFQUFBNHBFLGFBQUF2bEUsRUFBQXJFLEVBQUE0cEUsYUFBQWxtRCxFQUFBdWhELEdBQUEwQixLQUFBL3JELEVBQUFLLEVBQUF0YixFQUFBMEUsR0FBd0U2VixFQUFBOGlDLEdBQUF0NUIsRUFBTyxPQUFBeEosR0FHMStVc3pELEtBSG0vVSxTQUFBNXlELEdBQWUsSUFBQUssRUFBQTVhLE9BQUFxRSxLQUFBa1csR0FBQXJYLE9BQUF2RCxFQUFBLEdBQUFDLEVBQUEsTUFBQWdiLEVBQUFyTyxFQUFBLElBQUE0bUQsR0FBQWlCLE1BQUEsU0FBbUV2MEQsS0FBQSxVQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFzQ1YsS0FBQSxRQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFvQ1YsS0FBQSxTQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQVgsSUFBcUNDLEtBQUEsVUFBQWdRLEtBQUEsUUFBQXRQLE1BQUFxYSxLQUF1QyxRQUFBZixLQUFBVSxFQUFBLENBQWdCLElBQUFMLEVBQUF2YSxFQUFBdUQsT0FBZXZELEdBQUE0YSxFQUFBVixHQUFBdE4sRUFBQWdpRCxPQUFBL3BELE1BQXVCM0UsS0FBQSxPQUFBZ2EsRUFBQWhLLEtBQUEsTUFBQXRQLE1BQUFzWixJQUFpQ3ROLEVBQUFnaUQsT0FBQS9wRCxNQUFpQjNFLEtBQUEsVUFBQWdhLEVBQUFoSyxLQUFBLFFBQUF0UCxNQUFBWCxFQUFBc2EsSUFBd0MzTixFQUFBZ2lELE9BQUEvcEQsTUFBaUIzRSxLQUFBLFVBQUFnYSxFQUFBaEssS0FBQSxRQUFBdFAsTUFBQWdhLEVBQUFWLEdBQUEzVyxTQUFrRCxPQUFBcUosRUFBQWdpRCxPQUFBL3BELE1BQXNCM0UsS0FBQSxhQUFBZ1EsS0FBQSxZQUFBdFAsTUFBQVosSUFBMkM0TSxJQUc5OVZnL0UsSUFBS3BlLEtBQUFoWixHQUFBcTNCLFlBSDZwWixTQUFBanhFLEdBQWUsUUFBQUssRUFBQWpiLEtBQUFDLEtBQUEyTSxLQUFBc04sS0FBQUssS0FBQXlpQyxLQUFBcjlDLEtBQUEwRSxFQUFBLEVBQUFxZixFQUFBLEVBQUE5akIsRUFBQSxFQUFBRyxFQUFBLEVBQUFxQixFQUFBLEVBQUFoQixFQUFBLEVBQXFFQSxFQUFBd2EsRUFBQWswQyxPQUFBdnJELE9BQWtCbkQsR0FBQSxHQUFNLElBQUFxQixFQUFBbVosRUFBQWswQyxPQUFBdHVELElBQUFKLEdBQUFzVyxFQUFBLEVBQUFqVixFQUFBZ3NFLFFBQW9DLEdBQUFyMUIsTUFBQTMyQyxFQUFBMnhELGNBQUEsVUFBQWx4RCxNQUFBLFNBQUFULEVBQUF2QixLQUFBLEtBQUFFLEVBQUEscUNBQW9HNmEsRUFBQXZFLFFBQUEsSUFBQXVFLElBQUF2RSxFQUFBLElBQUF1RSxFQUFBdkUsR0FBQXJTLEVBQUFxUyxJQUFBclMsRUFBQXFTLEdBQXlDLElBQUFqVyxFQUFBMGhFLEdBQUFrbkIsZ0JBQUEzeUUsR0FBNEIsR0FBQWpXLEVBQUEsR0FBQWlqQixHQUFBLEdBQUFqakIsT0FBZ0IsR0FBQUEsRUFBQSxHQUFBYixHQUFBLEdBQUFhLEVBQUEsUUFBd0IsR0FBQUEsRUFBQSxHQUFBVixHQUFBLEdBQUFVLEVBQUEsT0FBd0IsQ0FBSyxLQUFBQSxFQUFBLGVBQUF5QixNQUFBLDZEQUF5RmQsR0FBQSxHQUFBWCxFQUFBLEdBQVcsZUFBQWdCLEVBQUF2QixLQUFBLENBQXVCLElBQUF3QixFQUFBRCxFQUFBMHpELGFBQXFCbjFELEVBQUE2RSxLQUFBbkQsRUFBQTBzRSxNQUFBbnVFLEVBQUE0RSxLQUFBbkQsRUFBQTJzRSxNQUFBemhFLEVBQUEvSCxLQUFBbkQsRUFBQTRzRSxNQUFBcDBELEVBQUFyVixLQUFBbkQsRUFBQTZzRSxNQUFBdnhCLEVBQUFuNEMsS0FBQW5ELEVBQUFndEUsaUJBQUEvdUUsRUFBQWtGLEtBQUFuRCxFQUFBaXRFLGtCQUFBcDBELEVBQUExVixLQUFBcEQsRUFBQTJ4RCxlQUF5SSxJQUFBdnlELEdBQU91dEUsS0FBQXZuRSxLQUFBc1gsSUFBQTVVLE1BQUEsS0FBQXZKLEdBQUFxdUUsS0FBQXhuRSxLQUFBc1gsSUFBQTVVLE1BQUEsS0FBQXRKLEdBQUFxdUUsS0FBQXpuRSxLQUFBOEssSUFBQXBJLE1BQUEsS0FBQXFELEdBQUEyaEUsS0FBQTFuRSxLQUFBOEssSUFBQXBJLE1BQUEsS0FBQTJRLEdBQUEwM0QsZ0JBQUEvcUUsS0FBQThLLElBQUFwSSxNQUFBLEtBQUFnUixHQUFBdXhFLGdCQUF2dUIsU0FBQWx4RSxHQUFlLFFBQUFLLEVBQUEsRUFBQWpiLEVBQUEsRUFBZ0JBLEVBQUE0YSxFQUFBclgsT0FBV3ZELEdBQUEsRUFBQWliLEdBQUFMLEVBQUE1YSxHQUFhLE9BQUFpYixFQUFBTCxFQUFBclgsT0FBZ3JCd29GLENBQUF4eEUsR0FBQXMzRCxtQkFBQWhyRSxLQUFBc1gsSUFBQTVVLE1BQUEsS0FBQXl6QyxHQUFBZ3ZDLG1CQUFBbmxGLEtBQUE4SyxJQUFBcEksTUFBQSxLQUFBeXpDLEdBQUE4MEIsb0JBQUFqckUsS0FBQXNYLElBQUE1VSxNQUFBLEtBQUE1SixJQUE2U2tCLEVBQUErOEQsU0FBQWhqRCxFQUFBZ2pELFNBQUEvOEQsRUFBQWc5RCxVQUFBampELEVBQUFpakQsVUFBOEMsSUFBQXRmLEVBQUFtakIsR0FBQThMLE1BQWUyRCxNQUFBLEVBQUF4VCxXQUFBL2lELEVBQUEraUQsV0FBQXlRLEtBQUF2dEUsRUFBQXV0RSxLQUFBQyxLQUFBeHRFLEVBQUF3dEUsS0FBQUMsS0FBQXp0RSxFQUFBeXRFLEtBQUFDLEtBQUExdEUsRUFBQTB0RSxLQUFBZ0QsY0FBQSxFQUFBM1MsaUJBQUFoa0QsRUFBQWdrRCxtQkFBb0lubkIsRUFBQW9xQixHQUFBMkwsTUFBYTVQLFNBQUEvOEQsRUFBQSs4RCxTQUFBQyxVQUFBaDlELEVBQUFnOUQsVUFBQStULGdCQUFBL3dFLEVBQUErd0UsZ0JBQUFDLG1CQUFBaHhFLEVBQUFneEUsbUJBQUFDLG9CQUFBanhFLEVBQUFpeEUsb0JBQUFDLFdBQUFseEUsRUFBQW1yRixvQkFBQW5yRixFQUFBeXRFLEtBQUF6dEUsRUFBQXV0RSxNQUFBdE0saUJBQUFsbkQsRUFBQWswQyxPQUFBdnJELFNBQStPbTdDLEVBQUF1akIsR0FBQXVMLEtBQUE1eUQsRUFBQWswQyxPQUFBdnJELFFBQUFzNEIsRUFBQXNtQyxHQUFBcUwsTUFBd0MyWixjQUFBdGdGLEtBQUFvUyxNQUFBcFksRUFBQWlyRixpQkFBQWh0QixjQUFBbGtELEVBQUE4M0MsT0FBQW1NLElBQUFDLGNBQUFJLGFBQUF0a0QsRUFBQTgzQyxPQUFBbU0sSUFBQUssYUFBQW9wQixpQkFBQXJ0RSxFQUFBc3RFLGdCQUFBbGtGLEVBQUE0akYsZ0JBQUF2a0UsRUFBQXdrRSxnQkFBQXRvRixFQUFBdW9GLGdCQUFBcG9GLEVBQUFxb0YsZ0JBQUFobkYsRUFBQWkrRCxZQUFBemtELEVBQUE4M0MsT0FBQW1NLElBQUFRLFlBQUFtcEIsY0FBQTNuRixFQUFBKzhELFNBQUE2cUIsZUFBQTVuRixFQUFBZzlELFVBQUE2cUIsYUFBQSxFQUFBQyxZQUFBOW5GLEVBQUEwdEUsS0FBQXFhLGFBQUEvaEYsS0FBQXNWLElBQUF0YixFQUFBd3RFLE1BQUF3YSxpQkFBQSxFQUFBRSxTQUFBOXpCLEdBQUFyNkMsRUFBQSxRQUEyYTJ6RCxLQUFBMW5FLEtBQUFvUyxNQUFBcFksRUFBQSs4RCxTQUFBLEtBQThCMlEsS0FBQXlhLFdBQUEvekIsR0FBQXI2QyxFQUFBLDRCQUFBL1osR0FBQTB0RSxLQUFBMGEsY0FBQXJ1RSxFQUFBcXhFLFFBQUEsVUFBQS9DLFlBQUF0dUUsRUFBQXF4RSxRQUFBLFlBQTZIL3JELEVBQUF5aUMsR0FBQTZLLEtBQUE1eUQsRUFBQWswQyxRQUFBM3VCLEVBQUFpaEMsR0FBQW9NLEtBQUE1eUQsRUFBQWswQyxRQUFBalEsRUFBQWprQyxFQUFBc3hFLGVBQUEsY0FBQS81RSxFQUFBeUksRUFBQXN4RSxlQUFBLGlCQUFBaHRDLEVBQUFMLEVBQUEsSUFBQTFzQyxFQUFBZ3RDLEVBQUF2a0MsRUFBQXN4RSxlQUFBLGtCQUE4Si9zQyxNQUFBTixFQUFBem1CLFFBQUEsY0FBQWptQixHQUFpQyxJQUFBaXRDLEtBQVMsUUFBQUMsS0FBQXprQyxFQUFBMDFDLE1BQUFsUixFQUFBQyxHQUFBemtDLEVBQUEwMUMsTUFBQWpSLEdBQXFDRCxFQUFBK3NDLFdBQUEvc0MsRUFBQStzQyxVQUF5QnB1QixHQUFBbmpELEVBQUFzeEUsZUFBQSxvQkFBQWh0QyxJQUEwQ0UsRUFBQThlLGlCQUFBOWUsRUFBQThlLGdCQUF1Q0gsR0FBQTVlLElBQUtDLEVBQUFndEMsa0JBQUFodEMsRUFBQWd0QyxnQkFBQXh4RSxFQUFBMDFDLE1BQUF3TixZQUFBMWUsRUFBQWl0QyxxQkFBQWp0QyxFQUFBaXRDLG1CQUFBenhFLEVBQUEwMUMsTUFBQTBOLGVBQStILElBQUExZSxLQUFBQyxFQUFBaWpCLEdBQUFnTCxLQUFBcHVCLEVBQUFFLEdBQUFFLEVBQUFGLEVBQUEvN0MsT0FBQSxFQUFBdytELEdBQUF5TCxLQUFBbHVCLFFBQUEsRUFBQUcsRUFBQTRpQixHQUFBbUwsT0FBQTl0QixFQUFBZ2pCLEdBQUE4SyxLQUFBNXlELEVBQUFrMEMsUUFBdUZobUQsUUFBQThSLEVBQUFzeEUsZUFBQSxXQUFBanVCLFNBQUEvZSxFQUFBdWUsV0FBQTVlLEVBQUFreEIsV0FBQTU5RCxFQUFBK3JELGVBQUEvZSxFQUFBd2UsV0FBQS9pRCxFQUFBK2lELFdBQUFxUyxVQUFBLEVBQUFudkUsRUFBQXd0RSxLQUFBeHRFLEVBQUErOEQsU0FBQS84RCxFQUFBK3dFLG1CQUFtS2p5QixFQUFBL2tDLEVBQUErb0QsT0FBQXRqRSxPQUFBcUUsS0FBQWtXLEVBQUErb0QsT0FBQXBnRSxPQUFBLEVBQUFtZ0UsR0FBQThKLEtBQUE1eUQsRUFBQStvRCxZQUFBLEVBQUEvakIsR0FBQXJCLEVBQUE5RyxFQUFBaUgsRUFBQTdpQixFQUFBMGpCLEVBQUFwZixFQUFBc2YsRUFBQUMsRUFBQXhmLEdBQXlGc2YsR0FBQUksRUFBQS82QyxLQUFBMjZDLEdBQUE1a0MsRUFBQTgzQyxPQUFBMlEsTUFBQXpqQixFQUFBLzZDLEtBQUF5K0QsR0FBQWtLLEtBQUE1eUQsRUFBQTgzQyxPQUFBMlEsT0FBQTFqQixHQUFBQyxFQUFBLzZDLEtBQUE4NkMsR0FBd0UsUUFBQUcsRUFBQTBVLEdBQUE1VSxHQUFBRyxFQUFBdVUsR0FBQXhVLEVBQUFrVixVQUFBbnRDLEVBQUFpNEIsRUFBQThPLE9BQUF2USxHQUFBLEVBQUFNLEVBQUEsRUFBeURBLEVBQUE5MkIsRUFBQXRrQixPQUFXbzdDLEdBQUEsb0JBQUE5MkIsRUFBQTgyQixHQUFBeitDLEtBQUEsQ0FBa0MybkIsRUFBQTgyQixHQUFBLzlDLE1BQUFxd0UsbUJBQUEsV0FBQWx4QixFQUFBMUIsR0FBQSxFQUFnRCxNQUFNLElBQUFBLEVBQUEsVUFBQW44QyxNQUFBLHNEQUE0RSxPQUFBNDlDLEdBR2p2ZndzQyxnQkFBQWg0QixJQUEyQ2lCLEdBQUFoMEQsV0FBY2dyRixVQUFBbjNCLEdBQUFvM0IsVUFBQW4zQixHQUFBbzNCLFNBQUEsU0FBQTd4RSxHQUErQyxJQUFBSyxFQUFBaFosS0FBQWt1RCxLQUFBdUMsT0FBQXp3RCxLQUFBMHNELFdBQXVDLE9BQUExekMsR0FBQUwsSUFBQUssRUFBQWhaLEtBQUFrdUQsS0FBQXVDLE9BQUF6d0QsS0FBQTBzRCxXQUFBMXNELEtBQUF5cUYsc0JBQUF6eEUsR0FBOEUweEUsZUFBQSxXQUEyQixJQUFBL3hFLEVBQUEzWSxLQUFBd3FGLFdBQXNCLE9BQUE3eEUsSUFBQTR3RSxRQUFBNXlFLElBQUEsU0FBQWdDLEdBQW1DLE9BQUFBLEVBQUF5eUMsVUFBa0J1L0IscUJBQUEsV0FBaUMsSUFBQWh5RSxFQUFBM1ksS0FBQXdxRixXQUFzQixHQUFBN3hFLEVBQUEsQ0FBTSxRQUFBSyxHQUFBLEVBQUFqYixFQUFBLEVBQWlCQSxFQUFBNGEsRUFBQTR3RSxRQUFBam9GLE9BQW1CdkQsSUFBQSxDQUFLLElBQUFDLEVBQUEyYSxFQUFBNHdFLFFBQUF4ckYsR0FBQXF0RCxJQUF1QixZQUFBcHRELEVBQUEsT0FBQUEsRUFBdUIsU0FBQUEsSUFBQWdiLEdBQUEsR0FBbUIsT0FBQUEsRUFBQSxnQkFBd0I0eEUsZUFBQSxTQUFBanlFLEVBQUFLLEdBQThCLElBQUFqYixFQUFBaUMsS0FBQXdxRixTQUFBeHhFLEdBQXVCLEdBQUFqYixFQUFBLENBQU00YSxLQUFBLE9BQVksSUFBQTNhLEVBQUFELEVBQUF3ckYsUUFBQTUrRSxFQUFBd29ELEdBQUFwMUQsRUFBQXdyRixRQUFBNXdFLEdBQWtDLEdBQUFoTyxHQUFBLFNBQUEzTSxFQUFBMk0sR0FBQXFpRCxPQUEyQixHQUFBaDBDLEVBQUEsQ0FBTSxJQUFBZixHQUFPbXpDLElBQUF6eUMsRUFBQXEwQyxRQUFjQyxnQkFBZ0J1ZCxTQUFBLEVBQUF0ZCxnQkFBQSxNQUFBQyxtQkFBbURDLG9CQUFxQixPQUFBcHZELEVBQUF1RCxRQUFBLEVBQUFvSixFQUFBLEVBQUFzTixLQUFBKzBDLFVBQXFDNjlCLGdCQUFBLFNBQUFseUUsRUFBQUssRUFBQWpiLEdBQWlDLElBQUFDLEVBQUFnQyxLQUFBNHFGLGVBQUFqeUUsRUFBQTVhLEdBQStCLEdBQUFDLEVBQUEsQ0FBTSxJQUFBZ2IsR0FBQSxTQUFBQSxHQUFBLFNBQUFBLEVBQUEsT0FBQWhiLEVBQUFpdkQsZUFBc0QsSUFBQXRpRCxFQUFBd29ELEdBQUFuMUQsRUFBQW92RCxlQUFBcDBDLEdBQTZCLEdBQUFyTyxHQUFBLFNBQUEzTSxFQUFBb3ZELGVBQUF6aUQsR0FBQTBpRCxRQUEyQyxHQUFBdHZELEVBQUEsQ0FBTSxJQUFBa2EsR0FBT216QyxJQUFBcHlDLEVBQUFxMEMsU0FBZW1kLFNBQUEsRUFBQXRkLGdCQUFBLE1BQUFDLG9CQUFxRCxPQUFBbnZELEVBQUFvdkQsZUFBQTdyRCxRQUFBLEVBQUFvSixFQUFBLEVBQUFzTixLQUFBbzFDLFdBQXFEeTlCLGdCQUFBLFNBQUFueUUsRUFBQUssRUFBQWpiLEVBQUFDLEdBQW1DLElBQUEyTSxFQUFBM0ssS0FBQTZxRixnQkFBQWx5RSxFQUFBSyxFQUFBaGIsR0FBa0MsR0FBQTJNLEVBQUEsQ0FBTSxRQUFBc04sRUFBQUssRUFBQTNOLEVBQUF3aUQsZUFBQXBTLEVBQUEvNkMsS0FBQWt1RCxLQUFBdUMsT0FBQXp3RCxLQUFBMHNELFdBQUE4OEIsU0FBQTlyRixFQUFBLEVBQTZFQSxFQUFBNGEsRUFBQWhYLE9BQVc1RCxJQUFBLElBQUF1YSxFQUFBOGlDLEVBQUF6aUMsRUFBQTVhLEtBQUEwdEQsTUFBQXJ0RCxFQUFBLE9BQUFrYSxFQUFBcTFDLFFBQTRDLEdBQUF0dkQsRUFBQSxDQUFNLElBQUFvRSxFQUFBMjRDLEVBQUF6NUMsT0FBZSxPQUFBd3JELEdBQUFDLE9BQUEsSUFBQTNxRCxHQUFBckUsR0FBQWc5QyxFQUFBMzRDLEVBQUEsR0FBQWdwRCxJQUFBLGlEQUFBbnpDLEdBQTBGbXpDLElBQUFydEQsRUFBQXV2RCxTQUFlM3NELE9BQUEsRUFBQTZzRCx1QkFBK0J6UyxFQUFBbjRDLEtBQUFxVixHQUFBSyxFQUFBMVYsS0FBQVIsR0FBQTZWLEVBQUFxMUMsV0FBaUN5OUIsZ0JBQUEsU0FBQXB5RSxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEdBQXFDLElBQUFzTixFQUFBalksS0FBQThxRixnQkFBQW55RSxFQUFBSyxFQUFBamIsRUFBQTRNLEdBQUEyTixLQUF5QyxHQUFBTCxFQUFBLENBQU0sUUFBQThpQyxFQUFBcjlDLEVBQUF1YSxFQUFBdTFDLGtCQUFBcHJELEVBQUFwQyxLQUFBa3VELEtBQUF1QyxPQUFBendELEtBQUEwc0QsV0FBQSs4QixRQUFBaG9FLEVBQUEsRUFBK0VBLEVBQUEvakIsRUFBQTRELE9BQVdtZ0IsS0FBQXM1QixFQUFBMzRDLEVBQUExRSxFQUFBK2pCLEtBQUFnc0MsYUFBQXp2RCxHQUFBc2EsRUFBQTFWLEtBQUFtNEMsR0FBMEMsT0FBQXppQyxFQUFBaFgsUUFBQXFKLEVBQUEsQ0FBb0Jvd0MsR0FBRzBTLFdBQUF6dkQsRUFBQTB2RCxXQUFBLEVBQUFDLGFBQUFpZCxzQkFBQSxHQUFnRSxJQUFBanRFLEVBQUF5RSxFQUFBZCxPQUFlLE9BQUFjLEVBQUFRLEtBQUFtNEMsR0FBQXI5QyxFQUFBa0YsS0FBQWpGLElBQUFvOUMsSUFBZ0MsT0FBQXppQyxHQUFTMHlFLGNBQUEsU0FBQXJ5RSxFQUFBSyxHQUE2QixPQUFBTCxFQUFBaTBDLFFBQWlCLGNBQUFqMEMsRUFBQTZ3RCxZQUFBeHdELEtBQUFMLEVBQUE2d0QsV0FBQTd3RCxFQUFBOHdELFFBQUFub0UsT0FBQXFYLEVBQUE4d0QsUUFBQXp3RCxFQUFBTCxFQUFBNndELFlBQUEsRUFBMkYsV0FBQXpyRSxFQUFBczFELEdBQUExNkMsRUFBQTJ3RCxPQUFBdHdELEdBQTRCLE9BQUFqYixJQUFBMnJFLFFBQUEsSUFBc0J1aEIsaUJBQUEsU0FBQXR5RSxFQUFBSyxHQUFnQyxPQUFBTCxFQUFBaTBDLFFBQWlCLFdBQUE3dUQsRUFBQXExRCxHQUFBejZDLEVBQUFrMEMsT0FBQTd6QyxHQUE0QixPQUFBamIsR0FBQSxFQUFBQSxHQUFBLEVBQWlCLFdBQUFDLEVBQUFxMUQsR0FBQTE2QyxFQUFBMndELE9BQUF0d0QsR0FBNEIsT0FBQWhiLElBQUFzSyxNQUFBMFEsRUFBQWhiLEVBQUEyUCxPQUFBLElBQStCdTlFLGVBQUEsU0FBQXZ5RSxHQUE0QixPQUFBQSxFQUFBaTBDLE9BQUEsT0FBQWowQyxFQUFBazBDLE9BQWdDLFFBQUE3ekMsS0FBQWpiLEVBQUE0YSxFQUFBMndELE9BQUF0ckUsRUFBQSxFQUE0QkEsRUFBQUQsRUFBQXVELE9BQVd0RCxJQUFBLFFBQUEyTSxFQUFBNU0sRUFBQUMsR0FBQWlhLEVBQUF0TixFQUFBZ0QsTUFBQTJLLEVBQUEzTixFQUFBdkIsSUFBQTJ4QyxFQUFBOWlDLEVBQXlDOGlDLEdBQUF6aUMsRUFBS3lpQyxJQUFBL2hDLEVBQUFwVyxLQUFBbTRDLEdBQWMsT0FBQS9oQyxJQUFVdTZDLEdBQUFqMEQsVUFBQWcwRCxHQUFBaDBELFVBQUFpMEQsR0FBQWowRCxVQUFBNmhFLEtBQUEsV0FBd0QsSUFBQXhvRCxFQUFBM1ksS0FBQTJxRix1QkFBa0MzcUYsS0FBQW1yRixxQkFBQW5yRixLQUFBb3JGLGlCQUFBenlFLElBQW1ENDZDLEdBQUFqMEQsVUFBQStyRixnQkFBQSxTQUFBMXlFLEVBQUFLLEVBQUFqYixHQUE4QyxRQUFBQyxFQUFBZ0MsS0FBQTJLLEVBQUEsRUFBbUJBLEVBQUFnTyxFQUFBclgsT0FBV3FKLElBQUEsUUFBQXNOLEVBQUFVLEVBQUFoTyxHQUFBZ2pELFVBQUFyMUMsRUFBQSxFQUFpQ0EsRUFBQUwsRUFBQTNXLE9BQVdnWCxJQUFBLENBQUssSUFBQXlpQyxFQUFBOWlDLEVBQUFLLEdBQUE1YSxFQUFBTSxFQUFBaXRGLGlCQUFBbHdDLEVBQUFzdkIsU0FBQXJ4RCxHQUE4QyxLQUFBdGIsRUFBQSxVQUFBcTlDLEVBQUF1d0MsV0FBOEIsZUFBQWxwRixFQUFBMjRDLEVBQUF3d0MsU0FBQTd0RixHQUFBK2pCLEVBQUEsRUFBbUNBLEVBQUFyZixFQUFBZCxPQUFXbWdCLElBQUEsQ0FBSyxJQUFBOWpCLEVBQUF5RSxFQUFBcWYsR0FBVyxHQUFBOWpCLEVBQUE2dEYsY0FBQXp0RixFQUFBLE9BQUFKLEVBQUE4dEYsUUFBQTl0RixFQUFBOHRGLE9BQUE5aUIsVUFBQSxFQUEyRCxNQUFNLFdBQUE3cUUsRUFBQUUsRUFBQWd0RixjQUFBandDLEVBQUEyd0MsVUFBQTF5RSxHQUFBN1osRUFBQW5CLEVBQUFndEYsY0FBQWp3QyxFQUFBNHdDLFVBQUE1dEYsR0FBQUksRUFBQTQ4QyxFQUFBNndDLGFBQUE5dEYsR0FBQXFCLEdBQW9HLE9BQUFoQixFQUFBc3RGLFFBQUF0dEYsRUFBQXN0RixPQUFBOWlCLFVBQUEsR0FBdUMsVUFBU3BWLEdBQUFqMEQsVUFBQThyRixpQkFBQSxTQUFBenlFLEVBQUFLLEdBQTZDLEdBQUFoWixLQUFBa3VELEtBQUF1QyxPQUFBd1EsS0FBQSxPQUFBamhFLEtBQUErcUYsZ0JBQUFweUUsRUFBQUssRUFBQSxXQUFtRXc2QyxHQUFBbDBELFVBQUFnMEQsR0FBQWgwRCxVQUFBazBELEdBQUFsMEQsVUFBQW1yRixtQkFBQSxXQUFzRSxPQUFPNWpGLFFBQUEsRUFBQTBpRixVQUFvQm4rQixJQUFBLE9BQUE0QixRQUFtQkMsZ0JBQWdCdWQsU0FBQSxFQUFBdGQsZ0JBQUEsTUFBQUMsbUJBQW1EQyxxQkFBb0JvOEIsWUFBQUMsYUFBMEJqMkIsR0FBQWwwRCxVQUFBdXNGLFVBQUEsU0FBQWx6RSxFQUFBSyxFQUFBamIsR0FBd0MsUUFBQTRNLEtBQUFzTixFQUFBalksS0FBQStxRixnQkFBQS94RSxFQUFBamIsRUFBQTRhLEVBQUEsR0FBQUwsRUFBQSxFQUF3REEsRUFBQUwsRUFBQTNXLE9BQVdnWCxJQUFBLFFBQUF5aUMsRUFBQTlpQyxFQUFBSyxHQUFBcTFDLFVBQUFqd0QsRUFBQSxFQUFpQ0EsRUFBQXE5QyxFQUFBejVDLE9BQVc1RCxJQUFBLENBQUssSUFBQTBFLEVBQUEyNEMsRUFBQXI5QyxHQUFBK2pCLEVBQXBIemhCLEtBQW9Ia3JGLGVBQUE5b0YsRUFBQWlvRSxVQUFBMXNFLE9BQUEsRUFBbUQsT0FBQXlFLEVBQUF1eEQsWUFBQSxDQUFzQixJQUFBNzFELEVBQUFzRSxFQUFBMGxGLGFBQXFCLElBQUFucUYsRUFBQSxFQUFRQSxFQUFBOGpCLEVBQUFuZ0IsT0FBVzNELElBQUEsQ0FBSyxJQUFBd0IsRUFBQXNpQixFQUFBOWpCLEdBQVdnTixFQUFBL0gsTUFBUWtwRixJQUFBM3NGLEVBQUE0c0YsR0FBQTVzRixFQUFBckIsU0FBZ0IsQ0FBSyxJQUFBSyxFQUFBaUUsRUFBQTJsRixXQUFtQixJQUFBcHFGLEVBQUEsRUFBUUEsRUFBQThqQixFQUFBbmdCLE9BQVczRCxJQUFBZ04sRUFBQS9ILE1BQVlrcEYsSUFBQXJxRSxFQUFBOWpCLEdBQUFvdUYsR0FBQTV0RixFQUFBUixNQUFvQixPQUFBZ04sR0FBUzZvRCxHQUFBbDBELFVBQUEwc0YsY0FBQSxTQUFBcnpFLEVBQUFLLEVBQUFqYixHQUE0QyxRQUFBNE0sS0FBQXNOLEVBQUFqWSxLQUFBK3FGLGdCQUFBL3hFLEVBQUFqYixFQUFBNGEsRUFBQSxHQUFBTCxFQUFBLEVBQXdEQSxFQUFBTCxFQUFBM1csT0FBV2dYLElBQUEsUUFBQXlpQyxFQUFBOWlDLEVBQUFLLEdBQUFxMUMsVUFBQWp3RCxFQUFBLEVBQWlDQSxFQUFBcTlDLEVBQUF6NUMsT0FBVzVELElBQUEsUUFBQTBFLEVBQUEyNEMsRUFBQXI5QyxHQUFBK2pCLEVBQS9HemhCLEtBQStHa3JGLGVBQUE5b0YsRUFBQWlvRSxVQUFBMXNFLEVBQUF5RSxFQUFBNmxGLGNBQUFucUYsRUFBQSxFQUF3RUEsRUFBQTJqQixFQUFBbmdCLE9BQVd4RCxJQUFBNk0sRUFBQS9ILE1BQVlrcEYsSUFBQXJxRSxFQUFBM2pCLEdBQUFpdUYsR0FBQXB1RixFQUFBRyxLQUFtQixPQUFBNk0sR0FBUzZvRCxHQUFBbDBELFVBQUEyc0YsYUFBQSxTQUFBdHpFLEVBQUFLLEVBQUFqYixHQUEyQyxRQUFBNE0sS0FBQXNOLEVBQUFqWSxLQUFBK3FGLGdCQUFBL3hFLEVBQUFqYixFQUFBNGEsRUFBQSxHQUFBTCxFQUFBLEVBQXdEQSxFQUFBTCxFQUFBM1csT0FBV2dYLElBQUEsUUFBQXlpQyxFQUFBOWlDLEVBQUFLLEdBQUFxMUMsVUFBQWp3RCxFQUFBLEVBQWlDQSxFQUFBcTlDLEVBQUF6NUMsT0FBVzVELElBQUEsUUFBQTBFLEVBQUEyNEMsRUFBQXI5QyxHQUFBK2pCLEVBQS9HemhCLEtBQStHa3JGLGVBQUE5b0YsRUFBQWlvRSxVQUFBMXNFLEVBQUF5RSxFQUFBOGxGLGFBQUFwcUYsRUFBQSxFQUF1RUEsRUFBQTJqQixFQUFBbmdCLE9BQVd4RCxJQUFBLFFBQUFxQixFQUFBc2lCLEVBQUEzakIsR0FBQUssRUFBQVIsRUFBQUcsR0FBQTBCLEVBQUEsRUFBOEJBLEVBQUFyQixFQUFBbUQsT0FBVzlCLElBQUEsQ0FBSyxJQUFBaVYsRUFBQXRXLEVBQUFxQixHQUFXbUwsRUFBQS9ILE1BQVFrcEYsS0FBQTNzRixHQUFBaW5CLE9BQUEzUixFQUFBc2dELFlBQUFnM0IsR0FBQXQzRSxFQUFBMHpFLFdBQTZDLE9BQUF4OUUsR0FBUzZvRCxHQUFBbDBELFVBQUE0c0YsVUFBQSxTQUFBdnpFLEVBQUFLLEVBQUFqYixFQUFBQyxHQUEwQyxJQUFBMk0sRUFBQTNLLEtBQUErcUYsZ0JBQUFodEYsRUFBQUMsRUFBQTJhLEVBQUEsU0FBQVYsRUFBQXk3QyxHQUFBL29ELEVBQUEsR0FBb0RncEQsWUFBQSxFQUFBMFcsVUFBd0J6ZCxPQUFBLEVBQUFDLFdBQW1CazdCLGdCQUFpQmo3QixHQUFBQyxPQUFBLElBQUE5MEMsRUFBQW95RCxTQUFBemQsT0FBQSxvREFBQTMwQyxFQUFBb3lELFNBQUF6ZCxRQUF1RyxJQUFBdDBDLEVBQUFVLEVBQUE4eUUsSUFBQS93QyxFQUFBLzZDLEtBQUF1cUYsVUFBQXR5RSxFQUFBb3lELFNBQUF4ZCxPQUFBdjBDLEdBQWtEeWlDLEVBQUEsSUFBQUEsR0FBQSxFQUFBQSxFQUFBOWlDLEVBQUFveUQsU0FBQXhkLE9BQUF0ckQsT0FBQXc1QyxFQUFBLEVBQUF6aUMsR0FBQUwsRUFBQTh2RSxXQUFBeG1GLE9BQUF3NUMsRUFBQSxNQUFBOWlDLEVBQUE4dkUsV0FBQWh0QyxHQUFBL2hDLEVBQUEreUUsSUFBOEZ2NEIsR0FBQWwwRCxVQUFBNnNGLGFBQUEsU0FBQXh6RSxFQUFBSyxFQUFBamIsRUFBQUMsR0FBNkMsSUFBQTJNLEVBQUEzSyxLQUFBK3FGLGdCQUFBaHRGLEVBQUFDLEVBQUEyYSxFQUFBLFNBQUFWLEVBQUF5N0MsR0FBQS9vRCxFQUFBLEdBQW9EZ3BELFlBQUEsRUFBQTBXLFVBQXdCemQsT0FBQSxFQUFBQyxXQUFtQm83QixtQkFBb0JuN0IsR0FBQUMsT0FBQSxJQUFBOTBDLEVBQUFveUQsU0FBQXpkLE9BQUEsb0RBQUEzMEMsRUFBQW95RCxTQUFBemQsUUFBdUcsSUFBQXQwQyxFQUFBVSxFQUFBOHlFLElBQUEvd0MsRUFBQS82QyxLQUFBdXFGLFVBQUF0eUUsRUFBQW95RCxTQUFBeGQsT0FBQXYwQyxHQUFrRHlpQyxFQUFBLElBQUFBLEdBQUEsRUFBQUEsRUFBQTlpQyxFQUFBb3lELFNBQUF4ZCxPQUFBdHJELE9BQUF3NUMsRUFBQSxFQUFBemlDLEdBQUFMLEVBQUFnd0UsY0FBQTFtRixPQUFBdzVDLEVBQUEsTUFBQTlpQyxFQUFBZ3dFLGNBQUFsdEMsR0FBQS9oQyxFQUFBK3lFLElBQW9HdjRCLEdBQUFsMEQsVUFBQThzRixZQUFBLFNBQUF6ekUsRUFBQUssRUFBQWpiLEVBQUFDLEdBQTRDLElBQUEyTSxFQUFBM0ssS0FBQStxRixnQkFBQWh0RixFQUFBQyxFQUFBMmEsRUFBQSxTQUFBVixFQUFBdE4sRUFBQWdqRCxVQUFBLEdBQTJEMTFDLE9BQU8wN0MsWUFBQSxFQUFBMFcsVUFBd0J6ZCxPQUFBLEVBQUFDLFdBQW1CcTdCLGlCQUFpQnY5RSxFQUFBZ2pELFVBQUEsR0FBQTExQyxHQUFBNjBDLEdBQUFDLE9BQUEsSUFBQTkwQyxFQUFBb3lELFNBQUF6ZCxPQUFBLG9EQUFBMzBDLEVBQUFveUQsU0FBQXpkLFFBQTBILElBQUF0MEMsRUFBQVUsRUFBQTh5RSxJQUFBLEdBQUEvd0MsRUFBQS9oQyxFQUFBOHlFLElBQUFwa0YsTUFBQSxHQUFBaEssR0FBbUN5cUYsU0FBQW52RSxFQUFBK3lFLEdBQUFoM0IsV0FBQWhhLEdBQTJCMzRDLEVBQUFwQyxLQUFBdXFGLFVBQUF0eUUsRUFBQW95RCxTQUFBeGQsT0FBQXYwQyxHQUF1QyxHQUFBbFcsR0FBQSxHQUFTLFFBQUFxZixFQUFBeEosRUFBQWl3RSxhQUFBOWxGLEdBQUF6RSxFQUFBLEVBQWdDQSxFQUFBOGpCLEVBQUFuZ0IsT0FBVzNELElBQUEsR0FBQTgxRCxHQUFBaHlDLEVBQUE5akIsR0FBQW8zRCxXQUFBaGEsR0FBQSxPQUFvQ3Q1QixFQUFBN2UsS0FBQWxGLFFBQVUwRSxHQUFBLEVBQUFBLEVBQUE2VixFQUFBb3lELFNBQUF4ZCxPQUFBdHJELE9BQUFhLEVBQUEsRUFBQWtXLEdBQUFMLEVBQUFpd0UsYUFBQTNtRixPQUFBYSxFQUFBLEdBQUExRSxLQUEyRTgxRCxHQUFBbDBELFVBQUErc0YsV0FBQSxTQUFBMXpFLEVBQUFLLEVBQUFqYixHQUF5QyxZQUFBaUcsS0FBQTJVLEdBQUEsT0FBQTNZLEtBQUE2ckYsVUFBQWx6RSxFQUFBSyxFQUFBamIsR0FBaUQsT0FBQTRhLEdBQVUsNkJBQUEzWSxLQUFBNnJGLFVBQUFsekUsRUFBQUssRUFBQWpiLEdBQUFxb0IsT0FBQXBtQixLQUFBZ3NGLGNBQUFyekUsRUFBQUssRUFBQWpiLElBQXFGLHdDQUFBaUMsS0FBQWlzRixhQUFBdHpFLEVBQUFLLEVBQUFqYixLQUFrRXkxRCxHQUFBbDBELFVBQUE2SSxJQUFBLFNBQUF3USxFQUFBSyxFQUFBamIsRUFBQUMsR0FBb0MsWUFBQWdHLEtBQUEyVSxHQUFBLE9BQUEzWSxLQUFBa3NGLFVBQUF2ekUsRUFBQUssRUFBQWpiLEVBQUFDLEdBQW1ELE9BQUEyYSxHQUFVLDZDQUFBSyxFQUFBK3lFLEdBQUEvckYsS0FBQWtzRixVQUFBdnpFLEVBQUFLLEVBQUFqYixFQUFBQyxHQUFBZ0MsS0FBQW1zRixhQUFBeHpFLEVBQUFLLEVBQUFqYixFQUFBQyxHQUFxRyx3Q0FBQWdDLEtBQUFvc0YsWUFBQXp6RSxFQUFBSyxFQUFBamIsRUFBQUMsS0FBb0UsSUFBQXN1RixHQUFBQyxHQUFBQyxHQUFBQyxHQUFBejJCLElBQW9CSCxRQUFBSixHQUFBMkosTUFGcHppQixTQUFBem1ELEVBQUFLLEVBQUFqYixFQUFBQyxHQUFxQixRQUFBMk0sRUFBQSxJQUFBNHlELEdBQUFDLFNBQUF4L0QsR0FBQWlhLEVBQUEsRUFBaUNBLEVBQUFsYSxFQUFBdUQsT0FBQSxFQUFhMlcsR0FBQSxHQUFNLElBQUFLLEVBQUF2YSxFQUFBa2EsR0FBV0ssSUFBQXZhLEVBQUFrYSxFQUFBLEdBQUF0TixFQUFBL0gsS0FBQXFWLEVBQUFzbEQsR0FBQXdQLGVBQUEvdUUsRUFBQWlhLEVBQUFnOEMsR0FBQXQ3QyxFQUFBSyxFQUFBVixFQUFBczlDLEtBQUFqckQsRUFBQS9ILEtBQUFxVixFQUFBc2xELEdBQUF1UCxZQUFBOXVFLEVBQUFpYSxJQUFzRixPQUFBdE4sSUFFOHBpQitoRixHQUFBLFNBQUEvekUsR0FBZ0IsSUFBQUssRUFBQWhaLEtBQUEyc0YsU0FBQTV1RixFQUFBaUMsS0FBQTRzRixRQUFBNXVGLEVBQUFnQyxLQUFBNnNGLFlBQUFsaUYsRUFBQSxFQUEwRCxPQUFBZ08sRUFBQSxJQUFBQSxLQUFBaE8sR0FBQSxHQUFBZ08sR0FBQTNhLEVBQUFELEVBQUE0YSxFQUFBL1QsS0FBQWtvRixNQUFBbjBFLEVBQUFLLE1BQUFMLEdBQUE1YSxHQUFBLEVBQUFBLEVBQUE0TSxFQUFBZ08sRUFBQWhPLEdBQW9Fc3NELElBQUtyOUIsRUFBQSxFQUFBcUUsRUFBQSxFQUFBMjRCLEtBQUEsSUFBQTRDLFNBQUEsU0FBQTdnRCxFQUFBSyxFQUFBamIsRUFBQUMsR0FBNEMsT0FBQUQsRUFBQTRhLEVBQUF5K0MsR0FBQXorQyxFQUFBaWhCLElBQUE1N0IsRUFBQWdiLEVBQUFvK0MsR0FBQXArQyxFQUFBNGdCLElBQWdDb2dDLFlBQUEsU0FBQXJoRCxFQUFBSyxFQUFBamIsRUFBQUMsR0FBK0IsSUFBQTJNLEVBQUFzTixFQUFBSyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQUFxZixFQUFrQixPQUFBempCLE9BQUFnQyxNQUFBMkssRUFBQTNNLEVBQUF3N0QsU0FBQTdnRCxFQUFBSyxHQUFBLE1BQUFmLEVBQUFqYSxFQUFBdzdELFNBQUE3Z0QsRUFBQTVhLEdBQUEsTUFBQUwsRUFBQU0sRUFBQXc3RCxTQUFBeGdELEtBQUEsTUFBQTVXLEVBQUFwRSxFQUFBdzdELFNBQUF6N0QsS0FBQSxNQUFBdWEsRUFBQTFULEtBQUFzVixJQUFBdlAsR0FBQW93QyxFQUFBbjJDLEtBQUFzVixJQUFBakMsR0FBQSxLQUFBd0osRUFBQW5KLEVBQUF5aUMsUUFBQWtjLEdBQUF5QyxZQUFBL2dELEtBQUFqYixFQUFBMEUsR0FBQSxFQUFBcEUsR0FBQSxRQUFBaTVELEdBQUF5QyxZQUFBL2dELEtBQUFqYixFQUFBcTlDLEVBQUEzNEMsRUFBQWtXLEdBQUFtSixFQUFBempCLEdBQUEsS0FBQTJNLEVBQUFnTyxFQUFBeStDLEdBQUFwK0MsRUFBQW8rQyxHQUFBbi9DLEVBQUFVLEVBQUF5K0MsR0FBQXI1RCxFQUFBcTVELEdBQUExNUQsRUFBQXNiLEVBQUE0Z0IsRUFBQTVnQixFQUFBbytDLEdBQUFoMUQsRUFBQXJFLEVBQUE2N0IsRUFBQTc3QixFQUFBcTVELEdBQUE5K0MsRUFBQTFULEtBQUFzVixJQUFBdlAsR0FBQW93QyxFQUFBbjJDLEtBQUFzVixJQUFBakMsR0FBQSxLQUFBd0osRUFBQW5KLEVBQUF5aUMsUUFBQXBpQyxFQUFBaWhCLEVBQUFqaEIsRUFBQXkrQyxJQUFBMTVELEVBQUEwRSxHQUFBLFFBQUF1VyxFQUFBaWhCLEVBQUFqaEIsRUFBQXkrQyxJQUFBMTVELEVBQUFxOUMsRUFBQTM0QyxFQUFBa1csR0FBQW1KLEtBQXVYcTFDLFlBQUF2YSxPQUFBd3dDLGtCQUFBcnpCLFlBQUEsU0FBQS9nRCxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEdBQXNFLEdBQUEzTSxPQUFBZ0MsS0FBQSxDQUFnRCxJQUFBaVksRUFBQXROLEVBQUFxTyxFQUFBbytDLEdBQUFwK0MsRUFBQTRnQixFQUFBdGhCLEVBQUEzTixFQUFBcU8sRUFBQXErQyxHQUFBcitDLEVBQUFpbEIsRUFBQThjLEVBQUE5aUMsRUFBQWxhLEVBQUFDLEVBQUE0N0IsRUFBQWw4QixFQUFBNGEsRUFBQXZhLEVBQUFDLEVBQUFpZ0MsRUFBa0R0bEIsRUFBQWloQixFQUFBbWhCLEdBQUFwaUMsRUFBQXNsQixFQUFBdmdDLEdBQUFNLEVBQUE4NEQsaUJBQWxHbitDLEVBQUFpaEIsR0FBQWp2QixFQUFBcU8sRUFBQW8rQyxHQUFBcCtDLEVBQUE0Z0IsR0FBQTc3QixHQUE4SDg0RCxNQUFBLEVBQUE4QyxNQUFBLFNBQUFoaEQsR0FBMkJBLEVBQUE2K0MsVUFBQSxHQUFjcUMsUUFBQSxTQUFBbGhELEdBQXFCLE9BQUFBLEVBQUE2K0MsVUFBa0J3MUIsUUFBQSxTQUFBcjBFLEdBQXFCQSxFQUFBNitDLFVBQUEsSUFBZU4sSUFBS3Q5QixFQUFBLEVBQUFxRSxFQUFBLEVBQUEyNEIsS0FBQSxJQUFBNEMsU0FBQSxTQUFBN2dELEVBQUFLLEVBQUFqYixFQUFBQyxHQUE0QyxPQUFBRCxFQUFBNGEsRUFBQTArQyxHQUFBMStDLEVBQUFzbEIsSUFBQWpnQyxFQUFBZ2IsRUFBQXErQyxHQUFBcitDLEVBQUFpbEIsSUFBZ0MrN0IsWUFBQSxTQUFBcmhELEVBQUFLLEVBQUFqYixFQUFBQyxHQUErQixJQUFBMk0sRUFBQXNOLEVBQUFLLEVBQUF5aUMsRUFBQXI5QyxFQUFBMEUsRUFBQXFmLEVBQWtCLE9BQUF6akIsT0FBQWdDLE1BQUEySyxFQUFBM00sRUFBQXc3RCxTQUFBN2dELEVBQUFLLEdBQUEsTUFBQWYsRUFBQWphLEVBQUF3N0QsU0FBQTdnRCxFQUFBNWEsR0FBQSxNQUFBTCxFQUFBTSxFQUFBdzdELFNBQUF4Z0QsS0FBQSxNQUFBNVcsRUFBQXBFLEVBQUF3N0QsU0FBQXo3RCxLQUFBLE1BQUF1YSxFQUFBMVQsS0FBQXNWLElBQUF2UCxHQUFBb3dDLEVBQUFuMkMsS0FBQXNWLElBQUFqQyxHQUFBLEtBQUF3SixFQUFBbkosRUFBQXlpQyxRQUFBbWMsR0FBQXdDLFlBQUEvZ0QsS0FBQWpiLEVBQUEwRSxHQUFBLEVBQUFwRSxHQUFBLFFBQUFrNUQsR0FBQXdDLFlBQUEvZ0QsS0FBQWpiLEVBQUFxOUMsRUFBQTM0QyxFQUFBa1csR0FBQW1KLEVBQUF6akIsR0FBQSxLQUFBMk0sRUFBQWdPLEVBQUEwK0MsR0FBQXIrQyxFQUFBcStDLEdBQUFwL0MsRUFBQVUsRUFBQTArQyxHQUFBdDVELEVBQUFzNUQsR0FBQTM1RCxFQUFBc2IsRUFBQWlsQixFQUFBamxCLEVBQUFxK0MsR0FBQWoxRCxFQUFBckUsRUFBQWtnQyxFQUFBbGdDLEVBQUFzNUQsR0FBQS8rQyxFQUFBMVQsS0FBQXNWLElBQUF2UCxHQUFBb3dDLEVBQUFuMkMsS0FBQXNWLElBQUFqQyxHQUFBLEtBQUF3SixFQUFBbkosRUFBQXlpQyxRQUFBcGlDLEVBQUFzbEIsRUFBQXRsQixFQUFBMCtDLElBQUEzNUQsRUFBQTBFLEdBQUEsUUFBQXVXLEVBQUFzbEIsRUFBQXRsQixFQUFBMCtDLElBQUEzNUQsRUFBQXE5QyxFQUFBMzRDLEVBQUFrVyxHQUFBbUosS0FBdVhxMUMsWUFBQSxFQUFBNEMsWUFBQSxTQUFBL2dELEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBK0MsR0FBQTNNLE9BQUFnQyxLQUFBLENBQWdELElBQUFpWSxFQUFBdE4sRUFBQXFPLEVBQUFvK0MsR0FBQXArQyxFQUFBNGdCLEVBQUF0aEIsRUFBQTNOLEVBQUFxTyxFQUFBcStDLEdBQUFyK0MsRUFBQWlsQixFQUFBOGMsRUFBQTlpQyxFQUFBbGEsRUFBQUMsRUFBQTQ3QixFQUFBbDhCLEVBQUE0YSxFQUFBdmEsRUFBQUMsRUFBQWlnQyxFQUFrRHRsQixFQUFBc2xCLEVBQUF2Z0MsRUFBQU0sRUFBQTg0RCxhQUFBbitDLEVBQUFpaEIsRUFBQW1oQixRQUFsR3BpQyxFQUFBc2xCLEdBQUF0ekIsRUFBQXFPLEVBQUFxK0MsR0FBQXIrQyxFQUFBaWxCLEdBQUFsZ0MsR0FBOEg4NEQsTUFBQXRhLE9BQUEwd0Msa0JBQUF0ekIsTUFBQSxTQUFBaGhELEdBQWtEQSxFQUFBOCtDLFVBQUEsR0FBY29DLFFBQUEsU0FBQWxoRCxHQUFxQixPQUFBQSxFQUFBOCtDLFVBQWtCdTFCLFFBQUEsU0FBQXIwRSxHQUFxQkEsRUFBQTgrQyxVQUFBLElBQWdCcjVELE9BQUEyNEQsT0FBQUUsSUFBQTc0RCxPQUFBMjRELE9BQUFHLElBQUFQLEdBQUFyM0QsVUFBQWs2RCxTQUFBLFNBQUE3Z0QsRUFBQUssRUFBQWpiLEVBQUFDLEdBQTRFLE9BQUFnQyxLQUFBNDVCLEVBQUFxOUIsR0FBQXVDLFNBQUE3Z0QsRUFBQUssRUFBQWpiLEVBQUFDLEdBQUFnQyxLQUFBaStCLEVBQUFpNUIsR0FBQXNDLFNBQUE3Z0QsRUFBQUssRUFBQWpiLEVBQUFDLElBQStEMjRELEdBQUFyM0QsVUFBQTA2RCxZQUFBLFNBQUFyaEQsRUFBQUssRUFBQWpiLEVBQUFDLEdBQTRDLElBQUEyTSxFQUFBc04sRUFBQUssRUFBQXlpQyxFQUFBcjlDLEVBQUEwRSxFQUFBcWYsRUFBa0JuSixFQUFBdGEsRUFBQXc3RCxTQUFBN2dELEVBQUFLLEdBQUEsTUFBQStoQyxFQUFBLzhDLEVBQUF3N0QsU0FBQTdnRCxFQUFBNWEsR0FBQSxNQUFBNE0sRUFBQTNNLEVBQUF3N0QsU0FBQXhnRCxLQUFBLE1BQUFmLEVBQUFqYSxFQUFBdzdELFNBQUF6N0QsS0FBQSxNQUFBTCxFQUFBa0gsS0FBQXNWLElBQUE1QixHQUFBbFcsRUFBQXdDLEtBQUFzVixJQUFBNmdDLEdBQUEsS0FBQXQ1QixFQUFBL2pCLEVBQUEwRSxHQUEwTHBDLEtBQUEwNUQsWUFBQS9nRCxLQUFBaE8sRUFBQXZJLEVBQUE2VixFQUFBdmEsR0FBQStqQixFQUFBempCLEdBQUEsR0FBMUxnQyxLQUFBMDVELFlBQUEvZ0QsS0FBQWhPLEVBQUFzTixHQUFBLEVBQUFqYSxHQUFBLElBQWlPMjRELEdBQUFyM0QsVUFBQW82RCxZQUFBLFNBQUEvZ0QsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxHQUE4QzNNLEtBQUFnQyxLQUFVLElBQUFpWSxFQUFBdE4sRUFBQXFPLEVBQUFvK0MsR0FBQXArQyxFQUFBNGdCLEVBQUF0aEIsRUFBQTNOLEVBQUFxTyxFQUFBcStDLEdBQUFyK0MsRUFBQWlsQixFQUFBOGMsRUFBQTlpQyxFQUFBbGEsRUFBQUMsRUFBQTQ3QixFQUFBbDhCLEVBQUE0YSxFQUFBdmEsRUFBQUMsRUFBQWlnQyxFQUFBNzdCLEVBQUFwRSxFQUFBODRELFlBQUFyMUMsRUFBQXpoQixLQUFBNjJELE1BQUFsNUQsRUFBQWdiLEVBQUFpaEIsRUFBQTk3QixFQUFBNmEsRUFBQXNsQixFQUEyRnRsQixFQUFBaWhCLEdBQUFuWSxFQUFBOWpCLEVBQUF5RSxFQUFBMjRDLEVBQUFyOUMsRUFBQUksSUFBQTJqQixFQUFBcmYsR0FBQXVXLEVBQUFzbEIsRUFBQXhjLEdBQUE5SSxFQUFBaWhCLEVBQUFqOEIsR0FBQUcsR0FBd0M2NEQsR0FBQXIzRCxVQUFBcTZELE1BQUEsU0FBQWhoRCxHQUFnQ0EsRUFBQTYrQyxVQUFBLEVBQUE3K0MsRUFBQTgrQyxVQUFBLEdBQTRCTixHQUFBNzNELFVBQUF5NkQsWUFBQSxTQUFBcGhELEdBQXNDLFFBQUFLLEVBQUFoWixLQUFBdTNELG9CQUFrQzUrQyxFQUFBa2hELFFBQUE3Z0QsUUFBQWhaLE1BQXdCZ1osSUFBQXUrQyxtQkFBd0IsT0FBQXYrQyxHQUFTbStDLEdBQUE3M0QsVUFBQXc2RCxZQUFBLFNBQUFuaEQsR0FBc0MsUUFBQUssRUFBQWhaLEtBQUFzM0Qsb0JBQWtDMytDLEVBQUFraEQsUUFBQTdnRCxRQUFBaFosTUFBd0JnWixJQUFBcytDLG1CQUF3QixPQUFBdCtDLEdBQVUsSUFBQXlnRCxHQUFBcjdELE9BQUEyNEQsT0FBQSxJQUFBSSxHQUFBLE1BQUErMUIsSUFBc0MxeUIsUUFBQSxNQUFBSyxVQUFBLEVBQUFDLFdBQUEsS0FBQXB0RCxLQUFBLEVBQUEydEQsT0FBQSxFQUFBOHhCLFVBQUEsR0FBdUVyM0IsR0FBQXgyRCxVQUFBKzVCLEtBQUEsU0FBQXJnQixFQUFBamIsR0FBZ0Msb0JBQUFBLEVBQUEsVUFBQWtDLE1BQUEsK0JBQXFFLEtBQUFELEtBQUFtMkQsWUFBQSxJQUEwQixJQUFBbjRELEVBQUFnQyxLQUFBa3VELEtBQUF2akQsRUFBQTNLLEtBQUFrMkQsV0FBa0MsSUFBQXZyRCxLQUFBaXdELE9BQUE3OEQsRUFBQSxDQUFtQixJQUFBa2EsRUFBQWpZLEtBQUFpMkQsV0FBc0IsSUFBQWgrQyxFQUFBLENBQU8wL0MsR0FBQXI0RCxVQUFBNHRGLElBQUFqMUUsRUFBQWpZLEtBQUFpMkQsV0FBQSxJQUFBMEIsR0FBQSxPQUFBMzVELEVBQUF5eUQsT0FBQTZPLE9BQUE4dEIsU0FBQW4xRSxFQUFBaTJDLEtBQUFsd0QsRUFBQTJhLEVBQUFtZ0QsUUFBQXZvRCxRQUFBbkwsSUFBQSxtQkFBQTZTLEVBQUEwSyxNQUFBLEdBQXVJLElBQUk0cEUsR0FBQXQwRSxHQUFNLE1BQUFVLEdBQVMsT0FBQXBJLFFBQUFuTCxJQUFBLHlCQUFBdVQsUUFBQTNZLEtBQUFtMkQsWUFBQSxJQUF5RXdCLEdBQUFyNEQsVUFBQTJZLEdBQUF0TixFQUFBM0ssS0FBQWsyRCxXQUFBLElBQUF5QixHQUFBLE9BQUEzNUQsRUFBQXl5RCxPQUFBNlAsT0FBQTFGLEtBQUE3OEQsRUFBdUUsSUFBQXVhLEVBQUF0YSxFQUFBeXlELE9BQUE4SixJQUFtQixHQUFBamlELEVBQUEsUUFBQXlpQyxFQUFBcHdDLEVBQUE0dkQsSUFBQSxJQUFBejJELE1BQUF3VSxFQUFBaFgsUUFBQTVELEVBQUFLLEVBQUFDLEVBQUEwOUQsV0FBQXQ1RCxFQUFBLEVBQThEQSxFQUFBa1csRUFBQWhYLE9BQVdjLElBQUEyNEMsRUFBQTM0QyxHQUFBa1csRUFBQWxXLEdBQUExRSxPQUFnQmlOLEVBQUE0dkQsT0FBYzVoRCxFQUFBbWdELFFBQUF2b0QsUUFBQW5MLElBQUEsbUJBQUF1RixFQUFBZ1ksTUFBQSxHQUFvRCxJQUFJNHBFLEdBQUE1aEYsR0FBTSxNQUFBZ08sR0FBUzNZLEtBQUFtMkQsWUFBQSxHQUFBNWxELFFBQUFuTCxJQUFBLHlCQUFBdVQsR0FBQTNZLEtBQUFtMkQsWUFBQSxHQUFnRixLQUFBbjJELEtBQUFtMkQsWUFBQSxPQUE2QixPQUFBcTJCLEdBQUF4ekUsRUFBQXJPLEdBQWUsTUFBQWdPLEdBQVMsT0FBQTNZLEtBQUFtMkQsWUFBQSxJQUFBNWxELFFBQUFuTCxJQUFBLGlCQUFBdVQsR0FBQXBJLFFBQUFuTCxJQUFBLG1EQUFBcEYsS0FBQW0yRCxZQUFBLE1BQWlKcTJCLEdBQUEsU0FBQXh6RSxFQUFBamIsR0FBa0IsSUFBQUMsRUFBQTJNLEVBQUFzTixFQUFBSyxFQUFBdmEsRUFBQTY4RCxLQUFBNzhELEVBQUFtd0QsS0FBQXdOLFdBQUEzZ0IsRUFBQXppQyxFQUFBNWEsRUFBQXNiLEVBQUErN0MsV0FBd0QsR0FBQTRDLEdBQUFyNEQsVUFBQXZCLEVBQUFMLEVBQUEsQ0FBcUIsSUFBQTBFLEVBQUFyRSxFQUFBbXdELEtBQWF2akQsS0FBQTNNLEtBQVUsUUFBQXlqQixFQUFBLEVBQVlBLEVBQUEvakIsRUFBQTRELE9BQVdtZ0IsSUFBQSxDQUFLLElBQUE5akIsRUFBQUQsRUFBQStqQixHQUFBM2pCLEVBQUFzRSxFQUFBeXFELE9BQUF0dUQsSUFBQVosRUFBQXN3RCxZQUF3Q2gyQyxFQUFBLElBQUEwL0MsR0FBQSxPQUFBNzVELEVBQUE0MkQsY0FBQS83QyxFQUFBbWdELFFBQUF2b0QsUUFBQW5MLElBQUEsZ0JBQUFxYyxFQUFBLE9BQUF4SixFQUFBMEssTUFBQSxHQUFBOHBFLEdBQUEzdUYsRUFBQW1hLEVBQUFLLEVBQUF5aUMsR0FBc0csUUFBQTU3QyxFQUFBeUYsS0FBQW9TLE1BQUFyWixFQUFBK1osR0FBQVksR0FBQW5hLEVBQUF5RyxLQUFBb1MsTUFBQXJaLEVBQUF5M0QsR0FBQXJhLEdBQUF2N0MsRUFBQXlZLEVBQUF5Z0QsTUFBQWprRCxFQUFBd0QsRUFBQWtpRCxTQUFBMzdELEVBQUEsRUFBNkVBLEVBQUFnQixFQUFBOEIsT0FBVzlDLElBQUEsQ0FBSyxJQUFBaUIsRUFBQUQsRUFBQWhCLEdBQVdpQixFQUFBKzNELFNBQUEvM0QsRUFBQWc0RCxVQUFBLEVBQUFoNEQsRUFBQTIzRCxHQUFBMzNELEVBQUFtNkIsRUFBQW42QixFQUFBbTZCLEVBQUF6NkIsRUFBQU0sRUFBQTQzRCxHQUFBNTNELEVBQUF3K0IsRUFBQXgrQixFQUFBdytCLEVBQUE5L0IsRUFBdUQsSUFBQVMsRUFBQStMLEVBQUFySixPQUFlcUosRUFBQS9ILEtBQUEwRSxNQUFBcUQsRUFBQW5MLEdBQWtCLFFBQUE4OEMsRUFBQSxFQUFZQSxFQUFBN25DLEVBQUFuVCxPQUFXZzdDLElBQUF0K0MsRUFBQTRFLEtBQUE2UixFQUFBNm5DLEdBQUExOUMsR0FBbUJvYSxFQUFBMDdDLGVBQUF6OEMsRUFBQW8xRSxrQkFBQXAxRSxFQUFBLElBQUEwL0MsR0FBQSxPQUFBMytDLEVBQUEwN0MsZUFBQWdFLE1BQUF6Z0QsRUFBQXNoRCxHQUFBdGhELEVBQUFraEQsR0FBQWxoRCxFQUFBaWhELEdBQUF2dUQsRUFBQXNOLEVBQUFraUQsU0FBQW44RCxFQUFBMk0sRUFBQS9ILEtBQUEsSUFBQXUwRCxHQUFBLFNBQUFBLEdBQUF2eUQsS0FBQW9TLE1BQUFnQyxFQUFBbTRDLGFBQUE3NEMsR0FBQSxJQUFBSyxFQUFBbWdELFFBQUF2b0QsUUFBQW5MLElBQUEsd0JBQUE2UyxFQUFBMEssTUFBQSxHQUFBNHBFLEdBQUF0MEUsR0FBQXROLEVBQUFySixRQUFBLFFBQWlQMlcsRUFBQSxJQUFBMC9DLEdBQUEsT0FBQTMrQyxFQUFBMDdDLGNBQUEvN0MsRUFBQW1nRCxRQUFBdm9ELFFBQUFuTCxJQUFBLG9CQUFBNlMsRUFBQTBLLE1BQUEsR0FBQThwRSxHQUFBenpFLEVBQUFmLEVBQUFLLEVBQUF5aUMsR0FBQXB3QyxFQUFBc04sRUFBQXlnRCxNQUFnSCxPQUFBL3RELEdBQVM4aEYsR0FBQSxTQUFBenpFLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBc0IsUUFBQXNOLEVBQUFLLEVBQUFVLEVBQUE2N0MsV0FBQTlaLEVBQUF6aUMsRUFBQWhYLE9BQUE1RCxFQUFBSyxFQUFBMjZELE1BQUEzNkQsRUFBQXc3RCxHQUFBeDdELEVBQUFvN0QsR0FBQXA3RCxFQUFBbTdELE1BQUE5MkQsRUFBQXJFLEVBQUFvOEQsWUFBQTE0QyxFQUFBLEVBQW9GQSxFQUFBczVCLEVBQUl0NUIsSUFBQXhKLEVBQUFLLEVBQUFtSixHQUFBL2pCLEVBQUErakIsR0FBQSxJQUFBMDFDLEdBQUFsL0MsRUFBQTJoQixFQUFBNTdCLEVBQUFpYSxFQUFBZ21CLEVBQUF0ekIsRUFBQXNOLEVBQUEyOEMsbUJBQUEzOEMsRUFBQTA4QyxTQUFtRSxRQUFBaDNELEVBQUFHLEVBQUFxQixFQUFBLEVBQWdCQSxFQUFBNDdDLEVBQUk1N0MsSUFBQThZLEVBQUF2YSxFQUFBeUIsR0FBQXhCLE1BQUFzYSxFQUFBN1YsRUFBQVEsS0FBQXpELElBQUE4WSxFQUFBMjhDLG9CQUFBMzhDLEVBQUFzL0MsbUJBQUE1NUQsSUFBQTI1RCxtQkFBQXIvQyxFQUFBdGEsT0FBQSxJQUFBRyxFQUFBSixFQUFBeUIsRUFBQSxHQUFBOFksRUFBQXMvQyxtQkFBQXo1RCxJQUFBdzVELG1CQUFBci9DLEdBQXFLLElBQUFsYSxFQUFBc3ZGLGVBQUEsQ0FBc0IsR0FBQTEwRSxFQUFBbWdELE1BQUEsQ0FBWXZvRCxRQUFBbkwsSUFBQSxtQkFBQXJILEVBQUE4NUQsT0FBd0MsUUFBQTE1RCxFQUFBLEVBQVlBLEVBQUE0OEMsRUFBSTU4QyxJQUFBb1MsUUFBQW5MLElBQUFqSCxFQUFBVCxFQUFBUyxHQUFBeTdCLEVBQUFsOEIsRUFBQVMsR0FBQTgvQixHQUFpQyxHQUFBdmdDLEVBQUFrRixLQUFBLElBQUF1MEQsR0FBQSxTQUFBQSxHQUFBdnlELEtBQUFvUyxNQUFBZ0MsRUFBQW00QyxhQUFBbnpELEdBQUEsSUFBQXV1RixHQUFBeHVGLEdBQUFMLEVBQUE0RCxRQUFBLEVBQUFxWCxFQUFBbWdELE1BQUEsQ0FBeUZ2b0QsUUFBQW5MLElBQUEsaUJBQUFySCxFQUFBODVELE9BQXNDLFFBQUFyNEQsRUFBQSxFQUFZQSxFQUFBdTdDLEVBQUl2N0MsSUFBQStRLFFBQUFuTCxJQUFBNUYsRUFBQTlCLEVBQUE4QixHQUFBbzZCLEVBQUFsOEIsRUFBQThCLEdBQUF5K0IsTUFBbUNzdUQsR0FBQSxTQUFBdnpFLEdBQWdCLElBQUFqYixFQUFBaWIsRUFBQTgrQyxLQUFhLEdBQUEvNUQsRUFBQSxDQUFNLElBQUFDLEVBQUEyTSxFQUFBNU0sRUFBQXVELE9BQWlCLElBQUEwWCxFQUFBNC9DLEdBQUEsRUFBVzUvQyxFQUFBNC9DLEdBQUFqdUQsRUFBT3FPLEVBQUE0L0MsS0FBQSxDQUFRLEdBQUFqZ0QsRUFBQW1nRCxPQUFBOS9DLEVBQUEySixTQUFBM2tCLEVBQUFzdUYsR0FBQXZ1RixFQUFBaWIsRUFBQTQvQyxNQUFBLFVBQUEzNEQsTUFBQSwwQkFBQXM4QyxPQUFBeCtDLEVBQUFpYixFQUFBNC9DLEtBQUExNEQsU0FBQSxLQUE4R2xDLEVBQUFnYixNQUFPc3pFLElBQUF6ekIsR0FBQTM1RCxVQUFBLEVBQUFnNEQsSUFBQTJCLEdBQUEzNUQsVUFBQSxFQUFBKzNELElBQUE4QixHQUFBNzVELFVBQUEsRUFBQWc0RCxJQUFBNkIsR0FBQTc1RCxVQUFBLEVBQUErM0QsSUFBQStCLEdBQUE5NUQsVUFBQSxFQUFBZzRELElBQUE4QixHQUFBOTVELFVBQUEsRUFBQSszRCxJQUFBZ0MsR0FBQS81RCxVQUFBLEtBQUErNUQsR0FBQS81RCxVQUFBLEtBQUFrNkQsR0FBQWw2RCxVQUFBLEtBQUFrNkQsR0FBQWw2RCxVQUFBLEtBRnhncEIsU0FBQThaLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFVBQUEza0IsRUFBQTJNLEdBQUFxTyxFQUFBcy9DLEdBQUF0L0MsRUFBQXUvQyxJQUFBdkIsR0FBQXJzRCxFQUFBM00sSUFBOEQsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFVBQUEza0IsRUFBQTJNLEdBQUFxTyxFQUFBcS9DLEdBQUFyQixHQUFBcnNELEVBQUEzTSxJQUF3RCxTQUFBZ2IsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBZ2IsRUFBQXMvQyxHQUFxQjMvQyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxTQUFBNWtCLEVBQUE2RSxLQUFBLE1BQUE1RSxFQUFBNDdCLEdBQUE3N0IsRUFBQTZFLEtBQUEsTUFBQTVFLEVBQUFpZ0MsSUFBeUUsU0FBQWpsQixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFnYixFQUFBcS9DLEdBQXFCMS9DLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFNBQUE1a0IsRUFBQTZFLEtBQUEsTUFBQTVFLEVBQUE0N0IsR0FBQTc3QixFQUFBNkUsS0FBQSxNQUFBNUUsRUFBQWlnQyxJQUF5RSxTQUFBamxCLEdBQWVBLEVBQUFxL0MsR0FBQXIvQyxFQUFBcy9DLEdBQUEzL0MsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsYUFBa0QsU0FBQTNKLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQUE3NEMsRUFBQWxhLEVBQUEreUQsTUFBQXg0QyxFQUFBdmEsRUFBQSt5RCxNQUFBL1YsRUFBQWg5QyxFQUFBK3lELE1BQUFwekQsRUFBQXNiLEVBQUF1Z0QsR0FBQW4zRCxFQUFBNFcsRUFBQW1nRCxHQUFBMTNDLEVBQUEvakIsRUFBQU0sR0FBQUwsRUFBQUQsRUFBQWlOLEdBQUE3TSxFQUFBc0UsRUFBQTZWLEdBQUE5WSxFQUFBaUQsRUFBQWtXLEdBQUFuYSxFQUFBNmEsRUFBQWtnRCxHQUFBbmUsR0FBb0hwaUMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBLFlBQUFwSCxFQUFBMk0sRUFBQXNOLEVBQUFLLEVBQUF5aUMsR0FBNEMsSUFBQXY3QyxFQUFBaWlCLEVBQUFtWSxFQUFBbmxCLEVBQUFnTixFQUFBd2MsRUFBQXovQixFQUFBYixFQUFBaThCLEVBQUFuNkIsRUFBQTlCLEVBQUFzZ0MsRUFBQXIvQixFQUFBZCxFQUFBODdCLEVBQUEwaUIsRUFBQXgrQyxFQUFBbWdDLEVBQUF1WCxFQUFBcjJDLEVBQUF5NkIsRUFBQTZpQixFQUFBdDlDLEVBQUE4K0IsRUFBQXJFLEdBQUFwNkIsRUFBQWhCLElBQUE4OUMsRUFBQUcsSUFBQWhvQyxFQUFBaFYsSUFBQWIsRUFBQTQyQyxHQUFBdlgsRUFBQXorQixFQUFBQyxFQUFBZ1YsRUFBQWpXLEVBQUEwL0IsRUFBQXQvQixFQUFBNjlDLEVBQUFILEVBQUE5RyxFQUFrR3IzQyxFQUFBeTdCLEdBQUFxRSxHQUFBci9CLEVBQUE0MkMsR0FBQXRYLEdBQUExK0IsRUFBQWhCLElBQUFvN0IsRUFBQXo3QixFQUFBOC9CLE1BQUFxZSxFQUFBRyxHQUFBdmUsR0FBQXpwQixFQUFBaFYsSUFBQW02QixHQUFnRCxTQUFBNWdCLEdBQWVBLEVBQUFrL0MsSUFBQWwvQyxFQUFBNitDLE1BQUEvRyxNQUFBbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFNBQUEzSixFQUFBay9DLE1BQWdFLFNBQUFsL0MsR0FBZUEsRUFBQW0vQyxJQUFBbi9DLEVBQUE2K0MsTUFBQS9HLE1BQUFuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsU0FBQTNKLEVBQUFtL0MsTUFBZ0UsU0FBQW4vQyxHQUFlQSxFQUFBby9DLElBQUFwL0MsRUFBQTYrQyxNQUFBL0csTUFBQW40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxTQUFBM0osRUFBQW8vQyxNQUFnRSxTQUFBcC9DLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUEvRyxNQUFvQixPQUFBbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFNBQUE1a0IsR0FBQWliLEVBQUErK0MsSUFBQWg2RCxLQUEwRCxPQUFBaWIsRUFBQXkvQyxPQUFBRCxHQUFBeC9DLEtBQUF1Z0QsR0FBQXZnRCxFQUFBeS9DLE1BQW1DLE1BQU0sT0FBQXovQyxFQUFBdWdELEdBQUF2Z0QsRUFBQTAvQyxNQUFvQixNQUFNLGtCQUFBejRELE1BQUEsMEJBQWlELFNBQUErWSxHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBL0csTUFBb0IsT0FBQW40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxTQUFBNWtCLEdBQUFpYixFQUFBZy9DLElBQUFqNkQsS0FBMEQsT0FBQWliLEVBQUF5L0MsT0FBQUQsR0FBQXgvQyxLQUFBbWdELEdBQUFuZ0QsRUFBQXkvQyxNQUFtQyxNQUFNLE9BQUF6L0MsRUFBQW1nRCxHQUFBbmdELEVBQUEwL0MsTUFBb0IsTUFBTSxrQkFBQXo0RCxNQUFBLDBCQUFpRCxTQUFBK1ksR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQS9HLE1BQW9CLE9BQUFuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsU0FBQTVrQixHQUFBaWIsRUFBQWkvQyxJQUFBbDZELEtBQTBELE9BQUFpYixFQUFBeS9DLE9BQUFELEdBQUF4L0MsS0FBQWtnRCxHQUFBbGdELEVBQUF5L0MsTUFBbUMsTUFBTSxPQUFBei9DLEVBQUFrZ0QsR0FBQWxnRCxFQUFBMC9DLE1BQW9CLE1BQU0sa0JBQUF6NEQsTUFBQSwwQkFBaUQsU0FBQStZLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUEvRyxNQUFvQixPQUFBbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFNBQUE1a0IsR0FBQWliLEVBQUErK0MsSUFBQS8rQyxFQUFBZy9DLElBQUFoL0MsRUFBQWkvQyxJQUFBbDZELEtBQXNFLE9BQUFpYixFQUFBeS9DLE9BQUFELEdBQUF4L0MsS0FBQXVnRCxHQUFBdmdELEVBQUFtZ0QsR0FBQW5nRCxFQUFBa2dELEdBQUFsZ0QsRUFBQXkvQyxNQUE2QyxNQUFNLE9BQUF6L0MsRUFBQXVnRCxHQUFBdmdELEVBQUFtZ0QsR0FBQW5nRCxFQUFBa2dELEdBQUFsZ0QsRUFBQTAvQyxNQUE4QixNQUFNLGtCQUFBejRELE1BQUEsMEJBQWlELFNBQUErWSxHQUFlQSxFQUFBdEwsS0FBQXNMLEVBQUE2K0MsTUFBQS9HLE1BQUFuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsVUFBQTNKLEVBQUF0TCxPQUFtRSxTQUFBc0wsR0FBZUwsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsU0FBQTNKLEVBQUFoQyxNQUFBcS9DLElBQWdELFNBQUFyOUMsR0FBZUwsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsVUFBQTNKLEVBQUFoQyxNQUFBdy9DLElBQWlELFNBQUF4OUMsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQS9HLE1BQW9CbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFFBQUE1a0IsR0FBQWliLEVBQUFxaUQsT0FBQXQ5RCxFQUFBLElBQXFELFNBQUFpYixHQUFlTCxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxVQUFBZzJDLEdBQUEzL0MsR0FBQSxJQUErQyxTQUFBQSxHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBL0csTUFBb0JuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsU0FBQTVrQixHQUFBaWIsRUFBQTQvQyxJQUFBNzZELEVBQUEsR0FBa0QsU0FBQWliLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUEvRyxNQUFvQm40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxXQUFBNWtCLEdBQUFpYixFQUFBd2hELFFBQUF6OEQsRUFBQSxTQUVvcWtCLFNBRjNta0IsU0FBQWliLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQWNsL0MsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsU0FBQTVrQixFQUFBNkUsS0FBQTdFLElBQUF1RCxPQUFBLEtBRThra0IrM0QsR0FGajlqQixTQUFBcmdELEdBQWVMLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFdBQUEzSixFQUFBNitDLE1BQUF2MkQsT0FBQSxHQUF3RCxTQUFBMFgsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQUFubUQsRUFBQTVNLEVBQUEreUQsTUFBa0NuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsVUFBQTVrQixFQUFBNkUsS0FBQTVFLEdBQUFELEVBQUE2RSxLQUFBK0gsSUFBMEQsU0FBQXFPLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQWNsL0MsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsV0FBQTVrQixFQUFBNkUsS0FBQTdFLEVBQUF1RCxTQUF1ZSxTQUFBMFgsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQXdCbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFdBQUEza0IsR0FBQUQsRUFBQTZFLEtBQUE3RSxJQUFBdUQsT0FBQXRELEtBQWdFLFNBQUFnYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBd0JuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsV0FBQTNrQixHQUFBRCxFQUFBNkUsS0FBQTdFLEVBQUF3RCxPQUFBeEQsRUFBQXVELE9BQUF0RCxFQUFBLGFBRTZvaUIsZ0JBRjFzakIsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLGFBQUEza0IsRUFBQTJNLEdBQThDLElBQUFzTixFQUFBZSxFQUFBNC9DLEdBQUF0Z0QsRUFBQVUsRUFBQTgrQyxLQUFvQjkrQyxFQUFBOCtDLEtBQUE5K0MsRUFBQW8wRSxNQUFBcHZGLEdBQWtCLFFBQUErOEMsRUFBQSxFQUFZQSxFQUFBcHdDLEVBQUlvd0MsSUFBQXd4QyxHQUFBdnpFLEdBQUFMLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsTUFBQTRULEVBQUEySixLQUFBbzRCLEVBQUEsRUFBQXB3QyxFQUFBLGdDQUFBb3dDLEdBQWlGL2hDLEVBQUE0L0MsR0FBQTNnRCxFQUFBZSxFQUFBOCtDLEtBQUF4L0MsR0FBZ0IsU0FBQVUsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQS9HLE1BQW9CbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFNBQUE1a0IsR0FBd0MsSUFBQUMsRUFBQWdiLEVBQUE0L0MsR0FBQWp1RCxFQUFBcU8sRUFBQTgrQyxLQUFvQjkrQyxFQUFBOCtDLEtBQUE5K0MsRUFBQW8wRSxNQUFBcnZGLEdBQUF3dUYsR0FBQXZ6RSxLQUFBNC9DLEdBQUE1NkQsRUFBQWdiLEVBQUE4K0MsS0FBQW50RCxFQUFBZ08sRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxNQUFBNFQsRUFBQTJKLEtBQUEsaUJBQUE1a0IsSUFBb1QsU0FBQWliLEdBQWUsWUFBQUEsRUFBQTQrQyxJQUFBLFVBQUEzM0QsTUFBQSx5QkFBMkQsSUFBQWxDLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQWdiLEVBQUE4K0MsS0FBQW50RCxFQUFBcU8sRUFBQTQvQyxHQUFBM2dELEVBQUFsYSxFQUFBK3lELE1BQUF4NEMsRUFBQTNOLEVBQTRDLElBQUFnTyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxTQUFBMUssR0FBNEMsS0FBQWphLElBQUEyTSxLQUFjcU8sRUFBQTQvQyxHQUFBanVELEVBQUFxTyxFQUFBbzBFLE1BQUFuMUUsR0FBQWphLEVBQUEwSixNQUFBNFEsRUFBQSxFQUFBM04sU0FFaTVoQixFQUFBMnVELEdBQUFwNkQsVUFBQSxLQUFBbzZELEdBQUFwNkQsVUFBQSxLQUFBMDZELEdBQUExNkQsVUFBQSxFQUFBZzRELElBQUEwQyxHQUFBMTZELFVBQUEsRUFBQSszRCxJQUFBZ0QsR0FBQS82RCxVQUFBLEtBQUErNkQsR0FBQS82RCxVQUFBLEtBQUFnN0QsR0FBQWg3RCxVQUFBLEtBQUFnN0QsR0FBQWg3RCxVQUFBLEtBQUFrN0QsR0FBQWw3RCxVQUFBLEtBQUFrN0QsR0FBQWw3RCxVQUFBLEtBRmxrZixTQUFBOFosR0FBZSxRQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBZ2IsRUFBQXRMLEtBQUEvQyxFQUFBcU8sRUFBQXEvQyxHQUFBcGdELEVBQUFsYSxFQUFBK3lELE1BQUEsR0FBQXg0QyxFQUFBVSxFQUFBa2dELEdBQXNEbDdELEtBQUksQ0FBRSxJQUFBKzhDLEVBQUFoOUMsRUFBQSt5RCxNQUFBcHpELEVBQUE0YSxFQUFBeWlDLEdBQXFCcGlDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixNQUFBM0osRUFBQXRMLEtBQUEsV0FBQXNMLEVBQUF0TCxLQUFBMVAsR0FBQSxtQkFBQSs4QyxFQUFBOWlDLEdBQUF0TixFQUFBK3VELFlBQUFoOEQsSUFBQXVhLEdBQUF0TixFQUFBZ3ZELE1BQUFqOEQsR0FBaUhzYixFQUFBdEwsS0FBQSxHQUFTLFNBQUFzTCxHQUFlLFFBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFnYixFQUFBbS9DLElBQUF4dEQsRUFBQXFPLEVBQUFvL0MsSUFBQW5nRCxFQUFBZSxFQUFBdEwsS0FBQTRLLEVBQUFVLEVBQUF1Z0QsR0FBQXY3RCxHQUFBKzhDLEVBQUEvaEMsRUFBQW1nRCxHQUFBeHVELEdBQUFqTixFQUFBc2IsRUFBQXEvQyxHQUFBajJELEVBQUE0VyxFQUFBdS9DLElBQUE5MkMsRUFBQXpJLEVBQUFrZ0QsR0FBcUZqaEQsS0FBSSxDQUFFLElBQUF0YSxFQUFBSSxFQUFBK3lELE1BQUFoekQsRUFBQTJqQixFQUFBOWpCLEdBQXFCZ2IsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLE1BQUEzSixFQUFBdEwsS0FBQSxXQUFBc0wsRUFBQXRMLEtBQUF1SyxHQUFBLGdCQUFBdGEsRUFBQUssRUFBQSxNQUFBMk0sR0FBQWpOLEVBQUFzOEQsWUFBQWw4RCxFQUFBd2EsRUFBQXlpQyxFQUFBMzRDLEdBQUExRSxFQUFBaThELE1BQUE3N0QsR0FBd0hrYixFQUFBdEwsS0FBQSxHQUVpbmUyc0QsR0FBQW43RCxVQUFBLEtBQUFtN0QsR0FBQW43RCxVQUFBLEtBRno1ZCxTQUFBOFosR0FBZSxRQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBZ2IsRUFBQWsvQyxJQUFBdnRELEVBQUFxTyxFQUFBdWdELEdBQUF2N0QsR0FBQWlhLEVBQUFlLEVBQUF0TCxLQUFBNEssRUFBQVUsRUFBQXEvQyxHQUFBdGQsRUFBQS9oQyxFQUFBcy9DLEdBQUE1NkQsRUFBQXNiLEVBQUFtZ0QsR0FBa0VsaEQsS0FBSSxDQUFFLElBQUE3VixFQUFBckUsRUFBQSt5RCxNQUFBcnZDLEVBQUEvakIsRUFBQTBFLEdBQXFCdVcsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLE1BQUEzSixFQUFBdEwsS0FBQSxXQUFBc0wsRUFBQXRMLEtBQUF1SyxHQUFBLHFCQUFBN1YsR0FBQWtXLEVBQUFvaEQsWUFBQWo0QyxFQUFBOVcsRUFBQSxFQUFBb3dDLEdBQUF6aUMsRUFBQXFoRCxNQUFBbDRDLEdBQW1IekksRUFBQXRMLEtBQUEsR0FBUyxTQUFBc0wsR0FBZUwsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsVUFBQTNKLEVBQUFoQyxNQUFBdS9DLElBRWtxZCtELEdBQUFwN0QsVUFBQSxLQUFBbzdELEdBQUFwN0QsVUFBQSxLQUYxMGMsU0FBQThaLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBOCtDLEtBQUE5NUQsRUFBQWdiLEVBQUE0L0MsR0FBQWp1RCxFQUFBcU8sRUFBQTYrQyxNQUFBNS9DLEVBQUFsYSxJQUFBQyxHQUF1QzJhLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFdBQUExSyxHQUEwQyxRQUFBSyxFQUFBLEVBQVlBLEVBQUFMLEVBQUlLLElBQUEzTixFQUFBL0gsS0FBQTdFLElBQUFDLElBQW1CZ2IsRUFBQTQvQyxHQUFBNTZELEdBQU8sU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNC9DLEdBQUE1NkQsRUFBQWdiLEVBQUE4K0MsS0FBQW50RCxFQUFBcU8sRUFBQTYrQyxNQUFBNS9DLEVBQUFqYSxJQUFBRCxHQUF1QzRhLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFdBQUExSyxHQUEwQyxRQUFBSyxFQUFBLEVBQVlBLEVBQUFMLEVBQUlLLElBQUEsQ0FBSyxJQUFBeWlDLEVBQUEvOEMsSUFBQUQsSUFBQSxFQUFBQyxJQUFBRCxHQUF1QixNQUFBZzlDLFFBQUEsU0FBQUEsS0FBQXB3QyxFQUFBL0gsS0FBQW00QyxHQUFzQy9oQyxFQUFBNC9DLEdBQUE3NkQsR0FBTyxTQUFBaWIsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBZ2IsRUFBQXMwRSxNQUF3QnR2RixNQUFBZ2IsRUFBQXMwRSxVQUFrQixJQUFBM2lGLEVBQUE1TSxFQUFBK3lELE1BQUE3NEMsRUFBQWxhLEVBQUEreUQsTUFBd0JuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsS0FBQWhZLEVBQUFzTixHQUFBamEsRUFBQWlhLEdBQUF0TixHQUE2QyxTQUFBcU8sR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBZ2IsRUFBQXMwRSxNQUFBM2lGLEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLEtBQUFoWSxHQUFvQyxJQUFBc04sRUFBQWphLEtBQUEyTSxJQUFBLEVBQWlCNU0sRUFBQTZFLEtBQUFxVixJQUFVLFNBQUFlLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFFBQUEza0IsRUFBQTJNLEdBQUFxTyxFQUFBdWhELElBQUE1dkQsR0FBQTNNLEVBQUEsSUFBdUQsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUF3Qm40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxPQUFBM2tCLEdBQUFELEVBQUE2RSxLQUFBLEdBQUFvVyxFQUFBdWhELElBQUF2OEQsS0FFMG9ieThELEdBQUF2N0QsVUFBQSxLQUFBdTdELEdBQUF2N0QsVUFBQSxZQUFBdzdELEdBQUF4N0QsVUFBQSxLQUFBdzdELEdBQUF4N0QsVUFBQSxLQUZ6eGEsU0FBQThaLEdBQWVMLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFdBQUEzSixFQUFBNitDLE1BQUFqMUQsS0FBQW9XLEVBQUE0aEQsWUFFMHdhLEVBRjlzYSxTQUFBNWhELEdBQWVMLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFlBQUEzSixFQUFBbTBFLFVBQUEsUUFFK3JhLFNBRnpvYSxTQUFBbjBFLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLE9BQUEza0IsRUFBQTJNLEdBQUE1TSxFQUFBNkUsS0FBQStILEVBQUEzTSxFQUFBLE1BQXdELFNBQUFnYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBNU0sRUFBQSt5RCxNQUFrQ240QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxTQUFBM2tCLEVBQUEyTSxHQUFBNU0sRUFBQTZFLEtBQUErSCxHQUFBM00sRUFBQSxNQUEyRCxTQUFBZ2IsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQUFubUQsRUFBQTVNLEVBQUEreUQsTUFBa0NuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsT0FBQTNrQixFQUFBMk0sR0FBQTVNLEVBQUE2RSxLQUFBK0gsRUFBQTNNLEVBQUEsTUFBd0QsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFNBQUEza0IsRUFBQTJNLEdBQUE1TSxFQUFBNkUsS0FBQStILEdBQUEzTSxFQUFBLE1BQTJELFNBQUFnYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBNU0sRUFBQSt5RCxNQUFrQ240QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxPQUFBM2tCLEVBQUEyTSxHQUFBNU0sRUFBQTZFLEtBQUE1RSxJQUFBMk0sRUFBQSxNQUEwRCxTQUFBcU8sR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQUFubUQsRUFBQTVNLEVBQUEreUQsTUFBa0NuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsUUFBQTNrQixFQUFBMk0sR0FBQTVNLEVBQUE2RSxLQUFBNUUsSUFBQTJNLEVBQUEsTUFBMkQsU0FBQXFPLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUF3Qm40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxRQUFBM2tCLEdBQUFELEVBQUE2RSxLQUFBZ0MsS0FBQWtvRixNQUFBOXVGLEdBQUEsUUFBbUUsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUF3Qm40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxTQUFBM2tCLEdBQUFELEVBQUE2RSxLQUFBZ0MsS0FBQWtvRixNQUFBOXVGLEdBQUEsUUFBb0UsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUEvRyxNQUFvQm40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxPQUFBNWtCLE9BQUE0NkQsR0FBQTMvQyxHQUFBLEdBQUFMLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFdBQXlGLFNBQUEzSixHQUFlTCxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxVQUFxQyxTQUFBM0osR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQUFubUQsRUFBQTVNLEVBQUEreUQsTUFBa0NuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsUUFBQTNrQixFQUFBMk0sR0FBQTVNLEVBQUE2RSxLQUFBNUUsR0FBQTJNLEVBQUEsTUFBMEQsU0FBQXFPLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLE9BQUEza0IsRUFBQTJNLEdBQUE1TSxFQUFBNkUsS0FBQTVFLEdBQUEyTSxFQUFBLE1BQXlELFNBQUFxTyxHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBd0JuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsUUFBQTNrQixHQUFBRCxFQUFBNkUsS0FBQTVFLEVBQUEsTUFFdTRYMjhELEdBQUF6N0QsVUFBQSxLQUY3L1csU0FBQThaLEdBQWUsSUFBQWhiLEVBQUFnYixFQUFBNitDLE1BQUEvRyxNQUF3Qm40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxRQUFBM2tCLEdBQUFnYixFQUFBNmhELFVBQUE3OEQsR0FBcUQsU0FBQWdiLEdBQWUsSUFBQWhiLEVBQUFnYixFQUFBNitDLE1BQUEvRyxNQUF3Qm40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxRQUFBM2tCLEdBQUFnYixFQUFBOGhELFdBQUFsMkQsS0FBQUssSUFBQSxHQUFBakgsSUFBbUUsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFFBQUEza0IsRUFBQTJNLEdBQUE1TSxFQUFBNkUsS0FBQStILEVBQUEzTSxJQUFxRCxTQUFBZ2IsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQUFubUQsRUFBQTVNLEVBQUEreUQsTUFBa0NuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsUUFBQTNrQixFQUFBMk0sR0FBQTVNLEVBQUE2RSxLQUFBK0gsRUFBQTNNLElBQXFELFNBQUFnYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBNU0sRUFBQSt5RCxNQUFrQ240QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxRQUFBM2tCLEVBQUEyTSxHQUFBNU0sRUFBQTZFLEtBQUEsR0FBQStILEVBQUEzTSxJQUF3RCxTQUFBZ2IsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQUFubUQsRUFBQTVNLEVBQUEreUQsTUFBa0NuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsUUFBQTNrQixFQUFBMk0sR0FBQTVNLEVBQUE2RSxLQUFBK0gsRUFBQTNNLEVBQUEsS0FBd0QsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUF3Qm40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxRQUFBM2tCLEdBQUFELEVBQUE2RSxLQUFBZ0MsS0FBQXNWLElBQUFsYyxLQUEyRCxTQUFBZ2IsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQXdCbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFFBQUEza0IsR0FBQUQsRUFBQTZFLE1BQUE1RSxJQUFrRCxTQUFBZ2IsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQXdCbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFVBQUEza0IsR0FBQUQsRUFBQTZFLEtBQUEsR0FBQWdDLEtBQUEwRSxNQUFBdEwsRUFBQSxNQUFxRSxTQUFBZ2IsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQXdCbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFlBQUEza0IsR0FBQUQsRUFBQTZFLEtBQUEsR0FBQWdDLEtBQUFtZCxLQUFBL2pCLEVBQUEsTUFFMmtWKzhELEdBQUE3N0QsVUFBQSxLQUFBNjdELEdBQUE3N0QsVUFBQSxLQUFBNjdELEdBQUE3N0QsVUFBQSxLQUFBNjdELEdBQUE3N0QsVUFBQSxpQ0FGNTVVLFNBQUE4WixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBNU0sRUFBQSt5RCxNQUFrQ240QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxVQUFBM2tCLEVBQUEyTSxHQUFBcU8sRUFBQXVoRCxJQUFBNXZELEdBQUEzTSxFQUFBZ2IsRUFBQTRoRCxLQUFBNWhELEVBQUFrMUMsS0FBQXdOLFlBRTIyVWYsR0FBQXo3RCxVQUFBLEtBQUF5N0QsR0FBQXo3RCxVQUFBLEtBQUE4N0QsR0FBQTk3RCxVQUFBLEtBQUE4N0QsR0FBQTk3RCxVQUFBLEtBQUE4N0QsR0FBQTk3RCxVQUFBLEtBRjUrVCxTQUFBOFosR0FBZSxJQUF5RWhiLEVBQXpFRCxFQUFBaWIsRUFBQTYrQyxNQUFBL0csTUFBK0UsT0FBM0RuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsV0FBQTVrQixHQUFBaWIsRUFBQWhDLE1BQUEwMUUsR0FBMkQsSUFBQTN1RixHQUFjLE9BQUFDLEVBQUEsR0FBWSxNQUFNLFFBQUFBLEVBQUEsRUFBWSxNQUFNLFNBQUFBLEVBQUEsRUFBYSxNQUFNLGtCQUFBaUMsTUFBQSx3QkFBZ0QsT0FBQStZLEVBQUEyekUsU0FBQTN1RixFQUFBLEdBQUFELEdBQTBCLE9BQUFpYixFQUFBNHpFLFFBQUEsRUFBbUIsTUFBTSxRQUFBNXpFLEVBQUE0ekUsUUFBQSxJQUFBNXVGLEVBQXdCLE1BQU0sUUFBQWdiLEVBQUE0ekUsUUFBQSxHQUFBNXVGLEVBQXVCLE1BQU0sUUFBQWdiLEVBQUE0ekUsUUFBQSxJQUFBNXVGLEVBQXdCLE1BQU0sa0JBQUFpQyxNQUFBLHdCQUFnRGxDLEdBQUEsR0FBQWliLEVBQUE2ekUsWUFBQSxJQUFBOXVGLEVBQUEsR0FBQUEsRUFBQSxNQUFBQyxHQUF1QyxTQUFBZ2IsR0FBZSxJQUEyRWhiLEVBQTNFRCxFQUFBaWIsRUFBQTYrQyxNQUFBL0csTUFBaUYsT0FBN0RuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsYUFBQTVrQixHQUFBaWIsRUFBQWhDLE1BQUEwMUUsR0FBNkQsSUFBQTN1RixHQUFjLE9BQUFDLEVBQUE0RyxLQUFBa21CLEtBQUEsS0FBd0IsTUFBTSxRQUFBOXNCLEVBQUE0RyxLQUFBa21CLEtBQUEsR0FBdUIsTUFBTSxTQUFBOXNCLEVBQUEsRUFBQTRHLEtBQUFrbUIsS0FBQSxHQUEwQixNQUFNLGtCQUFBN3FCLE1BQUEsMEJBQWtELE9BQUErWSxFQUFBMnpFLFNBQUEzdUYsRUFBQSxHQUFBRCxHQUEwQixPQUFBaWIsRUFBQTR6RSxRQUFBLEVBQW1CLE1BQU0sUUFBQTV6RSxFQUFBNHpFLFFBQUEsSUFBQTV1RixFQUF3QixNQUFNLFFBQUFnYixFQUFBNHpFLFFBQUEsR0FBQTV1RixFQUF1QixNQUFNLFFBQUFnYixFQUFBNHpFLFFBQUEsSUFBQTV1RixFQUF3QixNQUFNLGtCQUFBaUMsTUFBQSwwQkFBa0RsQyxHQUFBLEdBQUFpYixFQUFBNnpFLFlBQUEsSUFBQTl1RixFQUFBLEdBQUFBLEVBQUEsTUFBQUMsUUFFNm5TLFNBRnRsUyxTQUFBZ2IsR0FBZUwsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsVUFBQTNKLEVBQUFoQyxNQUFBby9DLFNBRXVrUyxFQUZ0aFMsU0FBQXA5QyxHQUFlTCxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxVQUFBM0osRUFBQWhDLE1BQUF5L0MsSUFBaUQsU0FBQXo5QyxHQUFlTCxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxVQUFBM0osRUFBQWhDLE1BQUEwL0MsSUFFdThSMkMsV0FBQSw4QkFGdDVSLFNBQUFyZ0QsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQS9HLE1BQW9CbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLGFBQUE1a0IsSUFFbTNSazlELEdBQUEvN0QsVUFBQSxLQUFBKzdELEdBQUEvN0QsVUFBQSxLQUYzb1IsU0FBQThaLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUEsRUFBNEJnTyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxZQUFBM2tCLEdBQUEsRUFBQUEsSUFBQTJNLEVBQUEsT0FBQTNNLElBQUEyTSxHQUFBLE1BQUE1TSxFQUFBNkUsS0FBQStILFNBRWdtUixFQUYvZ1IsU0FBQXFPLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQUE3NEMsRUFBQWxhLEVBQUEreUQsTUFBNENuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsVUFBQTVrQixFQUFBNkUsS0FBQStILEdBQUE1TSxFQUFBNkUsS0FBQTVFLEdBQUFELEVBQUE2RSxLQUFBcVYsSUFBb0UsU0FBQWUsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQUFubUQsRUFBQTVNLEVBQUEreUQsTUFBa0NuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsUUFBQTNrQixFQUFBMk0sR0FBQTVNLEVBQUE2RSxLQUFBZ0MsS0FBQThLLElBQUEvRSxFQUFBM00sS0FBK0QsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFFBQUEza0IsRUFBQTJNLEdBQUE1TSxFQUFBNkUsS0FBQWdDLEtBQUFzWCxJQUFBdlIsRUFBQTNNLEtBQStELFNBQUFnYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBL0csTUFBb0JuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsYUFBQTVrQixJQUE0QyxTQUFBaWIsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQS9HLE1BQUE5eUQsRUFBQWdiLEVBQUE2K0MsTUFBQS9HLE1BQW9DLE9BQUFuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsYUFBQTVrQixFQUFBQyxHQUFBRCxHQUF3RCxtQkFBQWliLEVBQUFxMEUsaUJBQUFydkYsR0FBeUMsbUJBQUFnYixFQUFBdTBFLFlBQUF2dkYsR0FBb0Msa0JBQUFpQyxNQUFBLHNDQUV5NlAsa09BQUFpN0QsR0FBQWg4RCxVQUFBLEtBQUFnOEQsR0FBQWg4RCxVQUFBLEtBQUFnOEQsR0FBQWg4RCxVQUFBLEtBQUFnOEQsR0FBQWg4RCxVQUFBLEtBQUFnOEQsR0FBQWg4RCxVQUFBLEtBQUFnOEQsR0FBQWg4RCxVQUFBLEtBQUFnOEQsR0FBQWg4RCxVQUFBLEtBQUFnOEQsR0FBQWg4RCxVQUFBLEtBQUFpOEQsR0FBQWo4RCxVQUFBLEtBQUFpOEQsR0FBQWo4RCxVQUFBLEtBQUFpOEQsR0FBQWo4RCxVQUFBLEtBQUFpOEQsR0FBQWo4RCxVQUFBLEtBQUFpOEQsR0FBQWo4RCxVQUFBLEtBQUFpOEQsR0FBQWo4RCxVQUFBLEtBQUFpOEQsR0FBQWo4RCxVQUFBLEtBQUFpOEQsR0FBQWo4RCxVQUFBLEtBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFr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UUFBQSxVQUFBQyxVQUFBLFVBQUFDLE9BQUEsVUFBQUMsTUFBQSxVQUFBQyxNQUFBLFVBQUFDLFNBQUEsVUFBQUMsY0FBQSxVQUFBQyxVQUFBLFVBQUFDLGFBQUEsVUFBQUMsVUFBQSxVQUFBQyxXQUFBLFVBQUFDLFVBQUEsVUFBQUMscUJBQUEsVUFBQUMsVUFBQSxVQUFBQyxXQUFBLFVBQUFDLFVBQUEsVUFBQUMsVUFBQSxVQUFBQyxZQUFBLFVBQUFDLGNBQUEsVUFBQUMsYUFBQSxVQUFBQyxlQUFBLFVBQUFDLGVBQUEsVUFBQUMsZUFBQSxVQUFBQyxZQUFBLFVBQUFDLEtBQUEsVUFBQUMsVUFBQSxVQUFBQyxNQUFBLFVBQUFDLFFBQUEsVUFBQUMsT0FBQSxVQUFBQyxpQkFBQSxVQUFBQyxXQUFBLFVBQUFDLGFBQUEsVUFBQUMsYUFBQSxVQUFBQyxlQUFBLFVBQUFDLGdCQUFBLFVBQUFDLGtCQUFBLFVBQUFDLGdCQUFBLFVBQUFDLGdCQUFBLFVBQUFDLGFBQUEsVUFBQUMsVUFBQSxVQUFBQyxVQUFBLFVBQUFDLFNBQUEsVUFBQUMsWUFBQSxVQUFBQyxLQUFBLFVBQUFDLFFBQUEsVUFBQUMsTUFBQSxVQUFBQyxVQUFBLFVBQUFDLE9BQUEsVUFBQUMsVUFBQSxVQUFBQyxPQUFBLFVBQUFDLGNBQUEsVUFBQUMsVUFBQSxVQUFBQyxjQUFBLFVBQUFDLGNBQUEsVUFBQUMsV0FBQSxVQUFBQyxVQUFBLFVBQUFDLEtBQUEsVUFBQXYzRCxLQUFBLFVBQUF3M0QsS0FBQSxVQUFBQyxXQUFBLFVBQUFDLE9BQUEsVUFBQXJJLElBQUEsVUFBQXNJLFVBQUEsVUFBQUMsVUFBQSxVQUFBQyxZQUFBLFVBQUFDLE9BQUEsVUFBQUMsV0FBQSxVQUFBQyxTQUFBLFVBQUFDLFNBQUEsVUFBQUMsT0FBQSxVQUFBQyxPQUFBLFVBQUFDLFFBQUEsVUFBQUMsVUFBQSxVQUFBQyxVQUFBLFVBQUFDLFVBQUEsVUFBQUMsS0FBQSxVQUFBQyxZQUFBLFVBQUFDLFVBQUEsVUFBQUMsSUFBQSxVQUFBQyxLQUFBLFVBQUFDLFFBQUEsVUFB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LElBQUF6MUgsRUFHQUEsRUFBQSxXQUNBLE9BQUF0WSxLQURBLEdBSUEsSUFFQXNZLEtBQUErckMsU0FBQSxjQUFBQSxLQUFBLEVBQUE4cUYsTUFBQSxRQUNDLE1BQUF4a0ksR0FFRCxpQkFBQXZFLFNBQUFrUyxFQUFBbFMsUUFPQTNJLEVBQUFELFFBQUE4YSIsImZpbGUiOiJtYWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDIpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3Rvcnkpe1xuXG5cdC8vVU1EXG5cdGlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdFx0ZGVmaW5lKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGZhY3RvcnkoKTtcblx0XHR9KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gXHR9IGVsc2Uge1xuXHRcdHJvb3QuVG9uZSA9IGZhY3RvcnkoKTtcblx0fVxuXG59KHRoaXMsIGZ1bmN0aW9uKCl7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgVG9uZTtcblx0Ly9jb25zdHJ1Y3RzIHRoZSBtYWluIFRvbmUgb2JqZWN0XG5cdGZ1bmN0aW9uIE1haW4oZnVuYyl7XG5cdFx0VG9uZSA9IGZ1bmMoKTtcblx0fVxuXHQvL2ludm9rZXMgZWFjaCBvZiB0aGUgbW9kdWxlcyB3aXRoIHRoZSBtYWluIFRvbmUgb2JqZWN0IGFzIHRoZSBhcmd1bWVudFxuXHRmdW5jdGlvbiBNb2R1bGUoZnVuYyl7XG5cdFx0ZnVuYyhUb25lKTtcblx0fVx0LyoqXG5cdCAqICBUb25lLmpzXG5cdCAqICBAYXV0aG9yIFlvdGFtIE1hbm5cblx0ICogIEBsaWNlbnNlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQgTUlUIExpY2Vuc2Vcblx0ICogIEBjb3B5cmlnaHQgMjAxNC0yMDE4IFlvdGFtIE1hbm5cblx0ICovXG5cdE1haW4oZnVuY3Rpb24gKCkge1xuXHQgICAgXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUT05FXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIG90aGVyIGNsYXNzZXMuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgdmFyIFRvbmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRvbmUpKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY29uc3RydWN0b3IgbmVlZHMgdG8gYmUgY2FsbGVkIHdpdGggdGhlIFxcJ25ld1xcJyBrZXl3b3JkJyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQHJldHVybnMge1N0cmluZ30gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgYXMgYSBzdHJpbmdcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGNsYXNzTmFtZSBpbiBUb25lKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0xldHRlciA9IGNsYXNzTmFtZVswXS5tYXRjaCgvXltBLVpdJC8pO1xuXHQgICAgICAgICAgICB2YXIgc2FtZUNvbnN0cnVjdG9yID0gVG9uZVtjbGFzc05hbWVdID09PSB0aGlzLmNvbnN0cnVjdG9yO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc0Z1bmN0aW9uKFRvbmVbY2xhc3NOYW1lXSkgJiYgaXNMZXR0ZXIgJiYgc2FtZUNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAnVG9uZSc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBkaXNjb25uZWN0IGFuZCBkaXNwb3NlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEdFVC9TRVRcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgcGFyYW1ldGVycyBhdCBvbmNlLiBFaXRoZXIgcGFzcyBpbiBhblxuXHRcdCAqICBvYmplY3QgbWFwcGluZyBwYXJhbWV0ZXJzIHRvIHZhbHVlcywgb3IgdG8gc2V0IGFcblx0XHQgKiAgc2luZ2xlIHBhcmFtZXRlciwgYnkgcGFzc2luZyBpbiBhIHN0cmluZyBhbmQgdmFsdWUuXG5cdFx0ICogIFRoZSBsYXN0IGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIHJhbXAgdGltZSB3aGljaFxuXHRcdCAqICB3aWxsIHJhbXAgYW55IHNpZ25hbCB2YWx1ZXMgdG8gdGhlaXIgZGVzdGluYXRpb24gdmFsdWVcblx0XHQgKiAgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqICBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHBhcmFtc1xuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJhbXBUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfSB0aGlzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHZhbHVlcyB1c2luZyBhbiBvYmplY3Rcblx0XHQgKiBmaWx0ZXIuc2V0KHtcblx0XHQgKiBcdFwiZnJlcXVlbmN5XCIgOiAzMDAsXG5cdFx0ICogXHRcInR5cGVcIiA6IGhpZ2hwYXNzXG5cdFx0ICogfSk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogZmlsdGVyLnNldChcInR5cGVcIiwgXCJoaWdocGFzc1wiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JhbXAgdG8gdGhlIHZhbHVlIDIyMCBvdmVyIDMgc2Vjb25kcy5cblx0XHQgKiBvc2NpbGxhdG9yLnNldCh7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogMjIwXG5cdFx0ICogfSwgMyk7XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocGFyYW1zLCB2YWx1ZSwgcmFtcFRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc09iamVjdChwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHJhbXBUaW1lID0gdmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgdmFyIHRtcE9iaiA9IHt9O1xuXHQgICAgICAgICAgICB0bXBPYmpbcGFyYW1zXSA9IHZhbHVlO1xuXHQgICAgICAgICAgICBwYXJhbXMgPSB0bXBPYmo7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHBhcmFtTG9vcDpcblx0ICAgICAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBwYXJhbXMpIHtcblx0ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW1zW2F0dHJdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgICAgICBpZiAoYXR0ci5pbmRleE9mKCcuJykgIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJTcGxpdCA9IGF0dHIuc3BsaXQoJy4nKTtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJTcGxpdC5sZW5ndGggLSAxOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50W2F0dHJTcGxpdFtpXV07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBUb25lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyU3BsaXQuc3BsaWNlKDAsIGkgKyAxKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbm5lclBhcmFtID0gYXR0clNwbGl0LmpvaW4oJy4nKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5zZXQoaW5uZXJQYXJhbSwgdmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgcGFyYW1Mb29wO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGF0dHIgPSBhdHRyU3BsaXRbYXR0clNwbGl0Lmxlbmd0aCAtIDFdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdmFyIHBhcmFtID0gcGFyZW50W2F0dHJdO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihwYXJhbSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlNpZ25hbCAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuU2lnbmFsIHx8IFRvbmUuUGFyYW0gJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlBhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnZhbHVlICE9PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHJhbXBUaW1lKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0udmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnJhbXBUbyh2YWx1ZSwgcmFtcFRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0udmFsdWUgIT09IHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLlRpbWVCYXNlICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHBhcmVudFthdHRyXSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIFRvbmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJhbS5zZXQodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSAhPT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJlbnRbYXR0cl0gPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIG9iamVjdCdzIGF0dHJpYnV0ZXMuIEdpdmVuIG5vIGFyZ3VtZW50cyBnZXRcblx0XHQgKiAgd2lsbCByZXR1cm4gYWxsIGF2YWlsYWJsZSBvYmplY3QgcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZ1xuXHRcdCAqICB2YWx1ZXMuIFBhc3MgaW4gYSBzaW5nbGUgYXR0cmlidXRlIHRvIHJldHJpZXZlIG9yIGFuIGFycmF5XG5cdFx0ICogIG9mIGF0dHJpYnV0ZXMuIFRoZSBhdHRyaWJ1dGUgc3RyaW5ncyBjYW4gYWxzbyBpbmNsdWRlIGEgXCIuXCJcblx0XHQgKiAgdG8gYWNjZXNzIGRlZXBlciBwcm9wZXJ0aWVzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBvc2MuZ2V0KCk7XG5cdFx0ICogLy9yZXR1cm5zIHtcInR5cGVcIiA6IFwic2luZVwiLCBcImZyZXF1ZW5jeVwiIDogNDQwLCAuLi5ldGN9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogb3NjLmdldChcInR5cGVcIik7XG5cdFx0ICogLy9yZXR1cm5zIHsgXCJ0eXBlXCIgOiBcInNpbmVcIn1cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vdXNlIGRvdCBub3RhdGlvbiB0byBhY2Nlc3MgZGVlcCBwcm9wZXJ0aWVzXG5cdFx0ICogc3ludGguZ2V0KFtcImVudmVsb3BlLmF0dGFja1wiLCBcImVudmVsb3BlLnJlbGVhc2VcIl0pO1xuXHRcdCAqIC8vcmV0dXJucyB7XCJlbnZlbG9wZVwiIDoge1wiYXR0YWNrXCIgOiAwLjIsIFwicmVsZWFzZVwiIDogMC40fX1cblx0XHQgKiAgQHBhcmFtIHtBcnJheT18c3RyaW5nfHVuZGVmaW5lZH0gcGFyYW1zIHRoZSBwYXJhbWV0ZXJzIHRvIGdldCwgb3RoZXJ3aXNlIHdpbGwgcmV0dXJuXG5cdFx0ICogIFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICBhbGwgYXZhaWxhYmxlLlxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYocGFyYW1zKSkge1xuXHQgICAgICAgICAgICBwYXJhbXMgPSB0aGlzLl9jb2xsZWN0RGVmYXVsdHModGhpcy5jb25zdHJ1Y3Rvcik7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgcGFyYW1zID0gW3BhcmFtc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciByZXQgPSB7fTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgYXR0ciA9IHBhcmFtc1tpXTtcblx0ICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgIHZhciBzdWJSZXQgPSByZXQ7XG5cdCAgICAgICAgICAgIGlmIChhdHRyLmluZGV4T2YoJy4nKSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBhdHRyU3BsaXQgPSBhdHRyLnNwbGl0KCcuJyk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHJTcGxpdC5sZW5ndGggLSAxOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgc3ViQXR0ciA9IGF0dHJTcGxpdFtqXTtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJSZXRbc3ViQXR0cl0gPSBzdWJSZXRbc3ViQXR0cl0gfHwge307XG5cdCAgICAgICAgICAgICAgICAgICAgc3ViUmV0ID0gc3ViUmV0W3N1YkF0dHJdO1xuXHQgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFtzdWJBdHRyXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGF0dHIgPSBhdHRyU3BsaXRbYXR0clNwbGl0Lmxlbmd0aCAtIDFdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBwYXJhbSA9IHBhcmVudFthdHRyXTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QocGFyYW1zW2F0dHJdKSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0uZ2V0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5TaWduYWwgJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0udmFsdWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5QYXJhbSAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLnZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgQXVkaW9QYXJhbSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0udmFsdWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBUb25lKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS5nZXQoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICghVG9uZS5pc0Z1bmN0aW9uKHBhcmFtKSAmJiBUb25lLmlzRGVmaW5lZChwYXJhbSkpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbGxlY3QgYWxsIG9mIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgaW4gb25lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0ciB0aGUgY29uc3RydWN0b3IgdG8gZmluZCB0aGUgZGVmYXVsdHMgZnJvbVxuXHRcdCAqICBAcmV0dXJuIHtBcnJheX0gYWxsIG9mIHRoZSBhdHRyaWJ1dGVzIHdoaWNoIGJlbG9uZyB0byB0aGUgY2xhc3Ncblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLl9jb2xsZWN0RGVmYXVsdHMgPSBmdW5jdGlvbiAoY29uc3RyKSB7XG5cdCAgICAgICAgdmFyIHJldCA9IFtdO1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChjb25zdHIuZGVmYXVsdHMpKSB7XG5cdCAgICAgICAgICAgIHJldCA9IE9iamVjdC5rZXlzKGNvbnN0ci5kZWZhdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChjb25zdHIuX3N1cGVyKSkge1xuXHQgICAgICAgICAgICB2YXIgc3VwZXJEZWZzID0gdGhpcy5fY29sbGVjdERlZmF1bHRzKGNvbnN0ci5fc3VwZXIpO1xuXHQgICAgICAgICAgICAvL2ZpbHRlciBvdXQgcmVwZWF0c1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1cGVyRGVmcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKHJldC5pbmRleE9mKHN1cGVyRGVmc1tpXSkgPT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goc3VwZXJEZWZzW2ldKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdERFRkFVTFRTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIHZhbHVlcyAgVGhlIGFyZ3VtZW50cyBhcnJheVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIGtleXMgICAgVGhlIG5hbWVzIG9mIHRoZSBhcmd1bWVudHNcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R9IGNvbnN0ciBUaGUgY2xhc3MgY29uc3RydWN0b3Jcblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIEFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgIGRlZmF1bHRzIGJldHdlZW4gdGhlIGNsYXNzJyBkZWZhdWx0c1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBwYXNzZWQgaW4gYXJndW1lbnRzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5kZWZhdWx0cyA9IGZ1bmN0aW9uICh2YWx1ZXMsIGtleXMsIGNvbnN0cikge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0ge307XG5cdCAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDEgJiYgVG9uZS5pc09iamVjdCh2YWx1ZXNbMF0pKSB7XG5cdCAgICAgICAgICAgIG9wdGlvbnMgPSB2YWx1ZXNbMF07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBvcHRpb25zW2tleXNbaV1dID0gdmFsdWVzW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChjb25zdHIuZGVmYXVsdHMpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgY29uc3RyLmRlZmF1bHRzKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNPYmplY3QoY29uc3RyKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIGNvbnN0cik7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgYGdpdmVuYCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCB1c2UgdGhlIGBmYWxsYmFja2AuXG5cdFx0ICogIElmIGJvdGggYGdpdmVuYCBhbmQgYGZhbGxiYWNrYCBhcmUgb2JqZWN0IGxpdGVyYWxzLCBpdCB3aWxsXG5cdFx0ICogIHJldHVybiBhIGRlZXAgY29weSB3aGljaCBpbmNsdWRlcyBhbGwgb2YgdGhlIHBhcmFtZXRlcnMgZnJvbSBib3RoXG5cdFx0ICogIG9iamVjdHMuIElmIGEgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBpbiBnaXZlbiwgaXQgd2lsbCByZXR1cm5cblx0XHQgKiAgdGhlIGZhbGxiYWNrIHByb3BlcnR5LlxuXHRcdCAqICA8YnI+PGJyPlxuXHRcdCAqICBXQVJOSU5HOiBpZiBvYmplY3QgaXMgc2VsZiByZWZlcmVudGlhbCwgaXQgd2lsbCBnbyBpbnRvIGFuIGFuXG5cdFx0ICogIGluZmluaXRlIHJlY3Vyc2l2ZSBsb29wLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAcGFyYW0gIHsqfSBnaXZlblxuXHRcdCAqICBAcGFyYW0gIHsqfSBmYWxsYmFja1xuXHRcdCAqICBAcmV0dXJuIHsqfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5kZWZhdWx0QXJnID0gZnVuY3Rpb24gKGdpdmVuLCBmYWxsYmFjaykge1xuXHQgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGdpdmVuKSAmJiBUb25lLmlzT2JqZWN0KGZhbGxiYWNrKSkge1xuXHQgICAgICAgICAgICB2YXIgcmV0ID0ge307XG5cdCAgICAgICAgICAgIC8vbWFrZSBhIGRlZXAgY29weSBvZiB0aGUgZ2l2ZW4gb2JqZWN0XG5cdCAgICAgICAgICAgIGZvciAodmFyIGdpdmVuUHJvcCBpbiBnaXZlbikge1xuXHQgICAgICAgICAgICAgICAgcmV0W2dpdmVuUHJvcF0gPSBUb25lLmRlZmF1bHRBcmcoZmFsbGJhY2tbZ2l2ZW5Qcm9wXSwgZ2l2ZW5bZ2l2ZW5Qcm9wXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZm9yICh2YXIgZmFsbGJhY2tQcm9wIGluIGZhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgICAgICByZXRbZmFsbGJhY2tQcm9wXSA9IFRvbmUuZGVmYXVsdEFyZyhnaXZlbltmYWxsYmFja1Byb3BdLCBmYWxsYmFja1tmYWxsYmFja1Byb3BdKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmlzVW5kZWYoZ2l2ZW4pID8gZmFsbGJhY2sgOiBnaXZlbjtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0Q09OTkVDVElPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdG9nZXRoZXIgYWxsIG9mIHRoZSBhcmd1bWVudHMgaW4gc2VyaWVzXG5cdFx0ICogIEBwYXJhbSB7Li4uQXVkaW9QYXJhbXxUb25lfEF1ZGlvTm9kZX0gbm9kZXNcblx0XHQgKiAgQHJldHVybnMge1RvbmV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuY29ubmVjdFNlcmllcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY3VycmVudFVuaXQgPSBhcmd1bWVudHNbMF07XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHRvVW5pdCA9IGFyZ3VtZW50c1tpXTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQuY29ubmVjdCh0b1VuaXQpO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdCA9IHRvVW5pdDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmU7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBUWVBFIENIRUNLSU5HXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmcgaXMgdW5kZWZpbmVkXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgdW5kZWZpbmVkXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNVbmRlZiA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZyBpcyBub3QgdW5kZWZpbmVkXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgdW5kZWZpbmVkXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNEZWZpbmVkID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIHJldHVybiAhVG9uZS5pc1VuZGVmKHZhbCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZyBpcyBhIGZ1bmN0aW9uXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBmdW5jdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbic7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgbnVtYmVyXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNOdW1iZXIgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBnaXZlbiBhcmd1bWVudCBpcyBhbiBvYmplY3QgbGl0ZXJhbCAoaS5lLiBge31gKTtcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhbiBvYmplY3QgbGl0ZXJhbC5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc09iamVjdCA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmIGFyZy5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIGJvb2xlYW4uXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBib29sZWFuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNCb29sZWFuID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGFuIEFycmF5XG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYW4gYXJyYXlcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc0FycmF5ID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGEgc3RyaW5nLlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgc3RyaW5nXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNTdHJpbmcgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBpbiB0aGUgZm9ybSBvZiBhIG5vdGUgaW4gc2NpZW50aWZpYyBwaXRjaCBub3RhdGlvbi5cblx0XHQgKiAgZS5nLiBcIkM0XCJcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIHN0cmluZ1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzTm90ZSA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5pc1N0cmluZyhhcmcpICYmIC9eKFthLWddezF9KD86YnwjfHh8YmIpPykoLT9bMC05XSspL2kudGVzdChhcmcpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBbiBlbXB0eSBmdW5jdGlvbi5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5ub09wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBNYWtlIHRoZSBwcm9wZXJ0eSBub3Qgd3JpdGFibGUuIEludGVybmFsIHVzZSBvbmx5LlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wZXJ0eSAgdGhlIHByb3BlcnR5IHRvIG1ha2Ugbm90IHdyaXRhYmxlXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5fcmVhZE9ubHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0eS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVhZE9ubHkocHJvcGVydHlbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB7XG5cdCAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG5cdCAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTWFrZSBhbiBhdHRyaWJ1dGUgd3JpdGVhYmxlLiBJbnRlcmFsIHVzZSBvbmx5LlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wZXJ0eSAgdGhlIHByb3BlcnR5IHRvIG1ha2Ugd3JpdGFibGVcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLl93cml0YWJsZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5KSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93cml0YWJsZShwcm9wZXJ0eVtpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHksIHsgd3JpdGFibGU6IHRydWUgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFBvc3NpYmxlIHBsYXkgc3RhdGVzLlxuXHRcdCAqIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0YXRlID0ge1xuXHQgICAgICAgIFN0YXJ0ZWQ6ICdzdGFydGVkJyxcblx0ICAgICAgICBTdG9wcGVkOiAnc3RvcHBlZCcsXG5cdCAgICAgICAgUGF1c2VkOiAncGF1c2VkJ1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEVxdWFsIHBvd2VyIGdhaW4gc2NhbGUuIEdvb2QgZm9yIGNyb3NzLWZhZGluZy5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9IHBlcmNlbnQgKDAtMSlcblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSAgICAgICAgIG91dHB1dCBnYWluICgwLTEpXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZXF1YWxQb3dlclNjYWxlID0gZnVuY3Rpb24gKHBlcmNlbnQpIHtcblx0ICAgICAgICB2YXIgcGlGYWN0b3IgPSAwLjUgKiBNYXRoLlBJO1xuXHQgICAgICAgIHJldHVybiBNYXRoLnNpbihwZXJjZW50ICogcGlGYWN0b3IpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGRlY2liZWxzIGludG8gZ2Fpbi5cblx0XHQgKiAgQHBhcmFtICB7RGVjaWJlbHN9IGRiXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5kYlRvR2FpbiA9IGZ1bmN0aW9uIChkYikge1xuXHQgICAgICAgIHJldHVybiBNYXRoLnBvdygxMCwgZGIgLyAyMCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZ2FpbiB0byBkZWNpYmVscy5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSBnYWluICgwLTEpXG5cdFx0ICogIEByZXR1cm4ge0RlY2liZWxzfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmdhaW5Ub0RiID0gZnVuY3Rpb24gKGdhaW4pIHtcblx0ICAgICAgICByZXR1cm4gMjAgKiAoTWF0aC5sb2coZ2FpbikgLyBNYXRoLkxOMTApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGFuIGludGVydmFsIChpbiBzZW1pdG9uZXMpIHRvIGEgZnJlcXVlbmN5IHJhdGlvLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbH0gaW50ZXJ2YWwgdGhlIG51bWJlciBvZiBzZW1pdG9uZXMgYWJvdmUgdGhlIGJhc2Ugbm90ZVxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgIHRoZSBmcmVxdWVuY3kgcmF0aW9cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKDApOyAvLyAxXG5cdFx0ICogdG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oMTIpOyAvLyAyXG5cdFx0ICogdG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oLTEyKTsgLy8gMC41XG5cdFx0ICovXG5cdCAgICBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyA9IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgIHJldHVybiBNYXRoLnBvdygyLCBpbnRlcnZhbCAvIDEyKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUSU1JTkdcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSBBdWRpb0NvbnRleHQgY2xvY2suXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gdGhlIGN1cnJlbnRUaW1lIGZyb20gdGhlIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5jb250ZXh0Lm5vdygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBvZiB0aGUgQXVkaW9Db250ZXh0IGNsb2NrLlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBjdXJyZW50VGltZSBmcm9tIHRoZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuY29udGV4dC5ub3coKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRJTkhFUklUQU5DRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgaGF2ZSBhIGNoaWxkIGluaGVyaXQgYWxsIG9mIFRvbmUncyAob3IgYSBwYXJlbnQncykgcHJvdG90eXBlXG5cdFx0ICogIHRvIGluaGVyaXQgdGhlIHBhcmVudCdzIHByb3BlcnRpZXMsIG1ha2Ugc3VyZSB0byBjYWxsXG5cdFx0ICogIFBhcmVudC5jYWxsKHRoaXMpIGluIHRoZSBjaGlsZCdzIGNvbnN0cnVjdG9yXG5cdFx0ICpcblx0XHQgKiAgYmFzZWQgb24gY2xvc3VyZSBsaWJyYXJ5J3MgaW5oZXJpdCBmdW5jdGlvblxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259IFx0Y2hpbGRcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSBwYXJlbnQgKG9wdGlvbmFsKSBwYXJlbnQgdG8gaW5oZXJpdCBmcm9tXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vIHBhcmVudCBpcyBzdXBwbGllZCwgdGhlIGNoaWxkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgaW5oZXJpdCBmcm9tIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZXh0ZW5kID0gZnVuY3Rpb24gKGNoaWxkLCBwYXJlbnQpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHBhcmVudCkpIHtcblx0ICAgICAgICAgICAgcGFyZW50ID0gVG9uZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gVGVtcENvbnN0cnVjdG9yKCkge1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUZW1wQ29uc3RydWN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTtcblx0ICAgICAgICBjaGlsZC5wcm90b3R5cGUgPSBuZXcgVGVtcENvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgLyoqIEBvdmVycmlkZSAqL1xuXHQgICAgICAgIGNoaWxkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuXHQgICAgICAgIGNoaWxkLl9zdXBlciA9IHBhcmVudDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRDT05URVhUXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBQcml2YXRlIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAdHlwZSB7QXVkaW9Db250ZXh0fVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIGF1ZGlvQ29udGV4dCA9IG51bGw7XG5cdCAgICAvKipcblx0XHQgKiAgQSBzdGF0aWMgcG9pbnRlciB0byB0aGUgYXVkaW8gY29udGV4dCBhY2Nlc3NpYmxlIGFzIFRvbmUuY29udGV4dC5cblx0XHQgKiAgQHR5cGUge1RvbmUuQ29udGV4dH1cblx0XHQgKiAgQG5hbWUgY29udGV4dFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUsICdjb250ZXh0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYXVkaW9Db250ZXh0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5Db250ZXh0ICYmIGNvbnRleHQgaW5zdGFuY2VvZiBUb25lLkNvbnRleHQpIHtcblx0ICAgICAgICAgICAgICAgIGF1ZGlvQ29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBhdWRpb0NvbnRleHQgPSBuZXcgVG9uZS5Db250ZXh0KGNvbnRleHQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vaW5pdGlhbGl6ZSB0aGUgbmV3IGF1ZGlvIGNvbnRleHRcblx0ICAgICAgICAgICAgVG9uZS5Db250ZXh0LmVtaXQoJ2luaXQnLCBhdWRpb0NvbnRleHQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHR5cGUge1RvbmUuQ29udGV4dH1cblx0XHQgKiAgQG5hbWUgY29udGV4dFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5wcm90b3R5cGUsICdjb250ZXh0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5jb250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRvbmUgYXV0b21hdGljYWxseSBjcmVhdGVzIGEgY29udGV4dCBvbiBpbml0LCBidXQgaWYgeW91IGFyZSB3b3JraW5nXG5cdFx0ICogIHdpdGggb3RoZXIgbGlicmFyaWVzIHdoaWNoIGFsc28gY3JlYXRlIGFuIEF1ZGlvQ29udGV4dCwgaXQgY2FuIGJlXG5cdFx0ICogIHVzZWZ1bCB0byBzZXQgeW91ciBvd24uIElmIHlvdSBhcmUgZ29pbmcgdG8gc2V0IHlvdXIgb3duIGNvbnRleHQsXG5cdFx0ICogIGJlIHN1cmUgdG8gZG8gaXQgYXQgdGhlIHN0YXJ0IG9mIHlvdXIgY29kZSwgYmVmb3JlIGNyZWF0aW5nIGFueSBvYmplY3RzLlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9Db250ZXh0fSBjdHggVGhlIG5ldyBhdWRpbyBjb250ZXh0IHRvIHNldFxuXHRcdCAqL1xuXHQgICAgVG9uZS5zZXRDb250ZXh0ID0gZnVuY3Rpb24gKGN0eCkge1xuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IGN0eDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBVFRSSUJVVEVTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIHNlY29uZHMgb2YgMSBwcm9jZXNzaW5nIGJsb2NrICgxMjggc2FtcGxlcylcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgYmxvY2tUaW1lXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5wcm90b3R5cGUsICdibG9ja1RpbWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxMjggLyB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBvZiBvbmUgc2FtcGxlLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzYW1wbGVUaW1lXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5wcm90b3R5cGUsICdzYW1wbGVUaW1lJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gMSAvIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFdoZXRoZXIgb3Igbm90IGFsbCB0aGUgdGVjaG5vbG9naWVzIHRoYXQgVG9uZS5qcyByZWxpZXMgb24gYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyLlxuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgc3VwcG9ydGVkXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZSwgJ3N1cHBvcnRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGhhc0F1ZGlvQ29udGV4dCA9IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnQXVkaW9Db250ZXh0JykgfHwgd2luZG93Lmhhc093blByb3BlcnR5KCd3ZWJraXRBdWRpb0NvbnRleHQnKTtcblx0ICAgICAgICAgICAgdmFyIGhhc1Byb21pc2VzID0gd2luZG93Lmhhc093blByb3BlcnR5KCdQcm9taXNlJyk7XG5cdCAgICAgICAgICAgIHZhciBoYXNXb3JrZXJzID0gd2luZG93Lmhhc093blByb3BlcnR5KCdXb3JrZXInKTtcblx0ICAgICAgICAgICAgcmV0dXJuIGhhc0F1ZGlvQ29udGV4dCAmJiBoYXNQcm9taXNlcyAmJiBoYXNXb3JrZXJzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEJvb2xlYW4gdmFsdWUgaWYgdGhlIGF1ZGlvIGNvbnRleHQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBuYW1lIGluaXRpYWxpemVkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZSwgJ2luaXRpYWxpemVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYXVkaW9Db250ZXh0ICE9PSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgY29udGV4dCB3aGVuIGl0IGJlY29tZXMgYXZhaWxhYmxlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgcmVzb2x2ZSAgQ2FsbGJhY2sgd2hlbiB0aGUgY29udGV4dCBpcyBpbml0aWFsaXplZFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaW5pdGlhbGl6ZWQpIHtcblx0ICAgICAgICAgICAgcmVzb2x2ZShUb25lLmNvbnRleHQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciByZXNDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJlc29sdmUoVG9uZS5jb250ZXh0KTtcblx0ICAgICAgICAgICAgICAgIFRvbmUuQ29udGV4dC5vZmYoJ2luaXQnLCByZXNDYWxsYmFjayk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIHJlc0NhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHZlcnNpb24gbnVtYmVyXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLnZlcnNpb24gPSAncjEyJztcblx0ICAgIHJldHVybiBUb25lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5FbWl0dGVyIGdpdmVzIGNsYXNzZXMgd2hpY2ggZXh0ZW5kIGl0XG5cdFx0ICogICAgICAgICB0aGUgYWJpbGl0eSB0byBsaXN0ZW4gZm9yIGFuZCBlbWl0IGV2ZW50cy5cblx0XHQgKiAgICAgICAgIEluc3BpcmF0aW9uIGFuZCByZWZlcmVuY2UgZnJvbSBKZXJvbWUgRXRpZW5uZSdzIFtNaWNyb0V2ZW50XShodHRwczovL2dpdGh1Yi5jb20vamVyb21lZXRpZW5uZS9taWNyb2V2ZW50LmpzKS5cblx0XHQgKiAgICAgICAgIE1JVCAoYykgMjAxMSBKZXJvbWUgRXRpZW5uZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQ29udGFpbnMgYWxsIG9mIHRoZSBldmVudHMuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRW1pdHRlcik7XG5cdCAgICAvKipcblx0XHQgKiAgQmluZCBhIGNhbGxiYWNrIHRvIGEgc3BlY2lmaWMgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgZXZlbnQgICAgIFRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBsaXN0ZW4gZm9yLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50IGlzIGVtaXR0ZWRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL3NwbGl0IHRoZSBldmVudFxuXHQgICAgICAgIHZhciBldmVudHMgPSBldmVudC5zcGxpdCgvXFxXKy8pO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudE5hbWUgPSBldmVudHNbaV07XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudE5hbWVdID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0ucHVzaChjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBCaW5kIGEgY2FsbGJhY2sgd2hpY2ggaXMgb25seSBpbnZva2VkIG9uY2Vcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBldmVudCAgICAgVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGxpc3RlbiBmb3IuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgaXMgZW1pdHRlZFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdmFyIGJvdW5kQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vaW52b2tlIHRoZSBjYWxsYmFja1xuXHQgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB0aGlzLm9mZihldmVudCwgYm91bmRDYWxsYmFjayk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIHRoaXMub24oZXZlbnQsIGJvdW5kQ2FsbGJhY2spO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIGV2ZW50ICAgICBUaGUgZXZlbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdG8uXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgd2hpY2ggd2FzIGJvdW5kIHRvXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBldmVudCB3aXRoIFRvbmUuRW1pdHRlci5vbi5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm8gY2FsbGJhY2sgaXMgZ2l2ZW4sIGFsbCBjYWxsYmFja3Ncblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzIGFyZSByZW1vdmVkLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcblx0ICAgICAgICB2YXIgZXZlbnRzID0gZXZlbnQuc3BsaXQoL1xcVysvKTtcblx0ICAgICAgICBmb3IgKHZhciBldiA9IDA7IGV2IDwgZXZlbnRzLmxlbmd0aDsgZXYrKykge1xuXHQgICAgICAgICAgICBldmVudCA9IGV2ZW50c1tldl07XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9ldmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnQpKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKGNhbGxiYWNrKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudF0gPSBbXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGV2ZW50TGlzdCA9IHRoaXMuX2V2ZW50c1tldmVudF07XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudExpc3QubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50TGlzdFtpXSA9PT0gY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TGlzdC5zcGxpY2UoaSwgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludm9rZSBhbGwgb2YgdGhlIGNhbGxiYWNrcyBib3VuZCB0byB0aGUgZXZlbnRcblx0XHQgKiAgd2l0aCBhbnkgYXJndW1lbnRzIHBhc3NlZCBpbi5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgZXZlbnQgIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmdzLi4uIFRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb25zIGxpc3RlbmluZy5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpLnNsaWNlKDEpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ZW50TGlzdCA9IHRoaXMuX2V2ZW50c1tldmVudF0uc2xpY2UoMCk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXZlbnRMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnRMaXN0W2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgRW1pdHRlciBmdW5jdGlvbnMgKG9uL29mZi9lbWl0KSB0byB0aGUgb2JqZWN0XG5cdFx0ICogIEBwYXJhbSAge09iamVjdHxGdW5jdGlvbn0gIG9iamVjdCAgVGhlIG9iamVjdCBvciBjbGFzcyB0byBleHRlbmQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIubWl4aW4gPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdCAgICAgICAgdmFyIGZ1bmN0aW9ucyA9IFtcblx0ICAgICAgICAgICAgJ29uJyxcblx0ICAgICAgICAgICAgJ29uY2UnLFxuXHQgICAgICAgICAgICAnb2ZmJyxcblx0ICAgICAgICAgICAgJ2VtaXQnXG5cdCAgICAgICAgXTtcblx0ICAgICAgICBvYmplY3QuX2V2ZW50cyA9IHt9O1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBmdW5jID0gZnVuY3Rpb25zW2ldO1xuXHQgICAgICAgICAgICB2YXIgZW1pdHRlckZ1bmMgPSBUb25lLkVtaXR0ZXIucHJvdG90eXBlW2Z1bmNdO1xuXHQgICAgICAgICAgICBvYmplY3RbZnVuY10gPSBlbWl0dGVyRnVuYztcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRW1pdHRlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FbWl0dGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBUaW1lbGluZSBjbGFzcyBmb3Igc2NoZWR1bGluZyBhbmQgbWFpbnRhaW5pbmcgc3RhdGVcblx0XHQgKiAgICAgICAgIGFsb25nIGEgdGltZWxpbmUuIEFsbCBldmVudHMgbXVzdCBoYXZlIGEgXCJ0aW1lXCIgcHJvcGVydHkuXG5cdFx0ICogICAgICAgICBJbnRlcm5hbGx5LCBldmVudHMgYXJlIHN0b3JlZCBpbiB0aW1lIG9yZGVyIGZvciBmYXN0XG5cdFx0ICogICAgICAgICByZXRyaWV2YWwuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfSBbbWVtb3J5PUluZmluaXR5XSBUaGUgbnVtYmVyIG9mIHByZXZpb3VzIGV2ZW50cyB0aGF0IGFyZSByZXRhaW5lZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydtZW1vcnknXSwgVG9uZS5UaW1lbGluZSk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiBzY2hlZHVsZWQgdGltZWxpbmUgZXZlbnRzXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWVtb3J5IG9mIHRoZSB0aW1lbGluZSwgaS5lLlxuXHRcdFx0ICogIGhvdyBtYW55IGV2ZW50cyBpbiB0aGUgcGFzdCBpdCB3aWxsIHJldGFpblxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWVtb3J5ID0gb3B0aW9ucy5tZW1vcnk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaW1lbGluZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5kZWZhdWx0cyA9IHsgJ21lbW9yeSc6IEluZmluaXR5IH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpbWVsaW5lI1xuXHRcdCAqICBAbmFtZSBsZW5ndGhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaW1lbGluZS5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZS5sZW5ndGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSW5zZXJ0IGFuIGV2ZW50IG9iamVjdCBvbnRvIHRoZSB0aW1lbGluZS4gRXZlbnRzIG11c3QgaGF2ZSBhIFwidGltZVwiIGF0dHJpYnV0ZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCBvYmplY3QgdG8gaW5zZXJ0IGludG8gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIC8vdGhlIGV2ZW50IG5lZWRzIHRvIGhhdmUgYSB0aW1lIGF0dHJpYnV0ZVxuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYoZXZlbnQudGltZSkpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlRpbWVsaW5lOiBldmVudHMgbXVzdCBoYXZlIGEgdGltZSBhdHRyaWJ1dGUnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZXZlbnQudGltZSA9IGV2ZW50LnRpbWUudmFsdWVPZigpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaChldmVudC50aW1lKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBldmVudCk7XG5cdCAgICAgICAgLy9pZiB0aGUgbGVuZ3RoIGlzIG1vcmUgdGhhbiB0aGUgbWVtb3J5LCByZW1vdmUgdGhlIHByZXZpb3VzIG9uZXNcblx0ICAgICAgICBpZiAodGhpcy5sZW5ndGggPiB0aGlzLm1lbW9yeSkge1xuXHQgICAgICAgICAgICB2YXIgZGlmZiA9IHRoaXMubGVuZ3RoIC0gdGhpcy5tZW1vcnk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNwbGljZSgwLCBkaWZmKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCBvYmplY3QgdG8gcmVtb3ZlIGZyb20gdGhlIGxpc3QuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl90aW1lbGluZS5pbmRleE9mKGV2ZW50KTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIG5lYXJlc3QgZXZlbnQgd2hvc2UgdGltZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBjb21wYXJhdG9yIFdoaWNoIHZhbHVlIGluIHRoZSBvYmplY3QgdG8gY29tcGFyZVxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXZlbnQgb2JqZWN0IHNldCBhZnRlciB0aGF0IHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSwgY29tcGFyYXRvcik7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXhdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBmaXJzdCBldmVudCBpbiB0aGUgdGltZWxpbmUgd2l0aG91dCByZW1vdmluZyBpdFxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZmlyc3QgZXZlbnQgb2JqZWN0XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5wZWVrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVswXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBmaXJzdCBldmVudCBpbiB0aGUgdGltZWxpbmUgYW5kIHJlbW92ZSBpdFxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZmlyc3QgZXZlbnQgb2JqZWN0XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmUuc2hpZnQoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBldmVudCB3aGljaCBpcyBzY2hlZHVsZWQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBjb21wYXJhdG9yIFdoaWNoIHZhbHVlIGluIHRoZSBvYmplY3QgdG8gY29tcGFyZVxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXZlbnQgb2JqZWN0IGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5nZXRBZnRlciA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgY29tcGFyYXRvciA9IFRvbmUuZGVmYXVsdEFyZyhjb21wYXJhdG9yLCAndGltZScpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lLCBjb21wYXJhdG9yKTtcblx0ICAgICAgICBpZiAoaW5kZXggKyAxIDwgdGhpcy5fdGltZWxpbmUubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtpbmRleCArIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBldmVudCBiZWZvcmUgdGhlIGV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGV2ZW50IG9iamVjdCBiZWZvcmUgdGhlIGdpdmVuIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmdldEJlZm9yZSA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgY29tcGFyYXRvciA9IFRvbmUuZGVmYXVsdEFyZyhjb21wYXJhdG9yLCAndGltZScpO1xuXHQgICAgICAgIHZhciBsZW4gPSB0aGlzLl90aW1lbGluZS5sZW5ndGg7XG5cdCAgICAgICAgLy9pZiBpdCdzIGFmdGVyIHRoZSBsYXN0IGl0ZW0sIHJldHVybiB0aGUgbGFzdCBpdGVtXG5cdCAgICAgICAgaWYgKGxlbiA+IDAgJiYgdGhpcy5fdGltZWxpbmVbbGVuIC0gMV1bY29tcGFyYXRvcl0gPCB0aW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtsZW4gLSAxXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUsIGNvbXBhcmF0b3IpO1xuXHQgICAgICAgIGlmIChpbmRleCAtIDEgPj0gMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXggLSAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBldmVudHMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdGltZWxpbmUubGVuZ3RoID4gMSkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2goYWZ0ZXIpO1xuXHQgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW2luZGV4XS50aW1lID09PSBhZnRlcikge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vZ2V0IHRoZSBmaXJzdCBpdGVtIHdpdGggdGhhdCB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4OyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbaV0udGltZSA9PT0gYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gdGhpcy5fdGltZWxpbmUuc2xpY2UoMCwgaW5kZXgpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IHRoaXMuX3RpbWVsaW5lLnNsaWNlKDAsIGluZGV4ICsgMSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90aW1lbGluZS5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICAgICAgLy90aGUgZmlyc3QgaXRlbSdzIHRpbWVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lWzBdLnRpbWUgPj0gYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBldmVudHMgYmVmb3JlIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBjYW5jZWwgYmVmb3JlLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuY2FuY2VsQmVmb3JlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKGluZGV4ID49IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSB0aGlzLl90aW1lbGluZS5zbGljZShpbmRleCArIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBldmVudCBpZiB0aGVyZSBpcyBvbmUuIG51bGwgb3RoZXJ3aXNlXG5cdFx0ICogQHBhcmFtICB7T2JqZWN0fSBldmVudCBUaGUgZXZlbnQgdG8gZmluZCB0aGUgcHJldmlvdXMgb25lIG9mXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSAgICAgICBUaGUgZXZlbnQgcmlnaHQgYmVmb3JlIHRoZSBnaXZlbiBldmVudFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUucHJldmlvdXNFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3RpbWVsaW5lLmluZGV4T2YoZXZlbnQpO1xuXHQgICAgICAgIGlmIChpbmRleCA+IDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4IC0gMV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEb2VzIGEgYmluYXJ5IHNlYXJjaCBvbiB0aGUgdGltZWxpbmUgYXJyYXkgYW5kIHJldHVybnMgdGhlXG5cdFx0ICogIG5lYXJlc3QgZXZlbnQgaW5kZXggd2hvc2UgdGltZSBpcyBhZnRlciBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgSWYgYSB0aW1lIGlzIHNlYXJjaGVkIGJlZm9yZSB0aGUgZmlyc3QgaW5kZXggaW4gdGhlIHRpbWVsaW5lLCAtMSBpcyByZXR1cm5lZC5cblx0XHQgKiAgSWYgdGhlIHRpbWUgaXMgYWZ0ZXIgdGhlIGVuZCwgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGl0ZW0gaXMgcmV0dXJuZWQuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gdGhlIGluZGV4IGluIHRoZSB0aW1lbGluZSBhcnJheVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuX3NlYXJjaCA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gLTE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgYmVnaW5uaW5nID0gMDtcblx0ICAgICAgICB2YXIgbGVuID0gdGhpcy5fdGltZWxpbmUubGVuZ3RoO1xuXHQgICAgICAgIHZhciBlbmQgPSBsZW47XG5cdCAgICAgICAgaWYgKGxlbiA+IDAgJiYgdGhpcy5fdGltZWxpbmVbbGVuIC0gMV1bY29tcGFyYXRvcl0gPD0gdGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbGVuIC0gMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgd2hpbGUgKGJlZ2lubmluZyA8IGVuZCkge1xuXHQgICAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIG1pZHBvaW50IGZvciByb3VnaGx5IGVxdWFsIHBhcnRpdGlvblxuXHQgICAgICAgICAgICB2YXIgbWlkUG9pbnQgPSBNYXRoLmZsb29yKGJlZ2lubmluZyArIChlbmQgLSBiZWdpbm5pbmcpIC8gMik7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3RpbWVsaW5lW21pZFBvaW50XTtcblx0ICAgICAgICAgICAgdmFyIG5leHRFdmVudCA9IHRoaXMuX3RpbWVsaW5lW21pZFBvaW50ICsgMV07XG5cdCAgICAgICAgICAgIGlmIChldmVudFtjb21wYXJhdG9yXSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgLy9jaG9vc2UgdGhlIGxhc3Qgb25lIHRoYXQgaGFzIHRoZSBzYW1lIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBtaWRQb2ludDsgaSA8IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHRlc3RFdmVudCA9IHRoaXMuX3RpbWVsaW5lW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0RXZlbnRbY29tcGFyYXRvcl0gPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbWlkUG9pbnQgPSBpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBtaWRQb2ludDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFtjb21wYXJhdG9yXSA8IHRpbWUgJiYgbmV4dEV2ZW50W2NvbXBhcmF0b3JdID4gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG1pZFBvaW50O1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50W2NvbXBhcmF0b3JdID4gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgLy9zZWFyY2ggbG93ZXJcblx0ICAgICAgICAgICAgICAgIGVuZCA9IG1pZFBvaW50O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy9zZWFyY2ggdXBwZXJcblx0ICAgICAgICAgICAgICAgIGJlZ2lubmluZyA9IG1pZFBvaW50ICsgMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gLTE7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGl0ZXJhdG9yLiBBcHBsaWVzIGV4dHJhIHNhZmV0eSBjaGVja3MgZm9yXG5cdFx0ICogIHJlbW92aW5nIGl0ZW1zIGZyb20gdGhlIGFycmF5LlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrXG5cdFx0ICogIEBwYXJhbSAge051bWJlcj19ICAgIGxvd2VyQm91bmRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gICAgdXBwZXJCb3VuZFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuX2l0ZXJhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGxvd2VyQm91bmQsIHVwcGVyQm91bmQpIHtcblx0ICAgICAgICBsb3dlckJvdW5kID0gVG9uZS5kZWZhdWx0QXJnKGxvd2VyQm91bmQsIDApO1xuXHQgICAgICAgIHVwcGVyQm91bmQgPSBUb25lLmRlZmF1bHRBcmcodXBwZXJCb3VuZCwgdGhpcy5fdGltZWxpbmUubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuc2xpY2UobG93ZXJCb3VuZCwgdXBwZXJCb3VuZCArIDEpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjayk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhdCBvciBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQmVmb3JlID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKHVwcGVyQm91bmQgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIDAsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEFmdGVyID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIGxvd2VyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgbG93ZXJCb3VuZCArIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYmV0d2VlbiB0aGUgc3RhcnRUaW1lIGFuZCBlbmRUaW1lLiBcblx0XHQgKiAgVGhlIHRpbWVyYW5nZSBpcyBpbmNsdXNpdmUgb2YgdGhlIHN0YXJ0VGltZSwgYnV0IGV4Y2x1c2l2ZSBvZiB0aGUgZW5kVGltZS4gXG5cdFx0ICogIHJhbmdlID0gW3N0YXJ0VGltZSwgZW5kVGltZSkuIFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBzdGFydFRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBlbmRUaW1lIFRoZSBlbmQgb2YgdGhlIHRlc3QgaW50ZXJ2YWwuIFxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQmV0d2VlbiA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdmFyIGxvd2VyQm91bmQgPSB0aGlzLl9zZWFyY2goc3RhcnRUaW1lKTtcblx0ICAgICAgICB2YXIgdXBwZXJCb3VuZCA9IHRoaXMuX3NlYXJjaChlbmRUaW1lKTtcblx0ICAgICAgICBpZiAobG93ZXJCb3VuZCAhPT0gLTEgJiYgdXBwZXJCb3VuZCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW2xvd2VyQm91bmRdLnRpbWUgIT09IHN0YXJ0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgbG93ZXJCb3VuZCArPSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vZXhjbHVzaXZlIG9mIHRoZSBlbmQgdGltZVxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbdXBwZXJCb3VuZF0udGltZSA9PT0gZW5kVGltZSkge1xuXHQgICAgICAgICAgICAgICAgdXBwZXJCb3VuZCAtPSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIGxvd2VyQm91bmQsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobG93ZXJCb3VuZCA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgMCwgdXBwZXJCb3VuZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYXQgb3IgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuIFNpbWlsYXIgdG9cblx0XHQgKiAgZm9yRWFjaEFmdGVyLCBidXQgaW5jbHVkZXMgdGhlIGl0ZW0ocykgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoRnJvbSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciBsb3dlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIC8vd29yayBiYWNrd2FyZHMgdW50aWwgdGhlIGV2ZW50IHRpbWUgaXMgbGVzcyB0aGFuIHRpbWVcblx0ICAgICAgICB3aGlsZSAobG93ZXJCb3VuZCA+PSAwICYmIHRoaXMuX3RpbWVsaW5lW2xvd2VyQm91bmRdLnRpbWUgPj0gdGltZSkge1xuXHQgICAgICAgICAgICBsb3dlckJvdW5kLS07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIGxvd2VyQm91bmQgKyAxKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKHVwcGVyQm91bmQgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoZXZlbnQudGltZSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LCAwLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5UaW1lbGluZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaW1lbGluZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCF3aW5kb3cuaGFzT3duUHJvcGVydHkoJ09mZmxpbmVBdWRpb0NvbnRleHQnKSAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3dlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQnKSkge1xuXHQgICAgICAgICAgICB3aW5kb3cuT2ZmbGluZUF1ZGlvQ29udGV4dCA9IHdpbmRvdy53ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JldHVybnMgcHJvbWlzZT9cblx0ICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDEsIDEsIDQ0MTAwKTtcblx0ICAgICAgICB2YXIgcmV0ID0gY29udGV4dC5zdGFydFJlbmRlcmluZygpO1xuXHQgICAgICAgIGlmICghKHJldCBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG5cdCAgICAgICAgICAgIE9mZmxpbmVBdWRpb0NvbnRleHQucHJvdG90eXBlLl9uYXRpdmVfc3RhcnRSZW5kZXJpbmcgPSBPZmZsaW5lQXVkaW9Db250ZXh0LnByb3RvdHlwZS5zdGFydFJlbmRlcmluZztcblx0ICAgICAgICAgICAgT2ZmbGluZUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuc3RhcnRSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGRvbmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUucmVuZGVyZWRCdWZmZXIpO1xuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmF0aXZlX3N0YXJ0UmVuZGVyaW5nKCk7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCF3aW5kb3cuaGFzT3duUHJvcGVydHkoJ0F1ZGlvQ29udGV4dCcpICYmIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnd2Via2l0QXVkaW9Db250ZXh0JykpIHtcblx0ICAgICAgICAgICAgd2luZG93LkF1ZGlvQ29udGV4dCA9IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vbm90IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LCBidXQgb25seSBhbiBBUEkgcGxhY2Vob2xkZXJcblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY2xvc2UpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzRnVuY3Rpb24odGhpcy5zdXNwZW5kKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VzcGVuZCgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL25vdCBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudFxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5yZXN1bWUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY3JlYXRlR2FpblxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluICYmIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2Fpbk5vZGUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluTm9kZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jcmVhdGVEZWxheVxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheSAmJiBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5Tm9kZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5ID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheU5vZGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vdGVzdCBkZWNvZGVBdWRpb0RhdGEgcmV0dXJucyBhIHByb21pc2Vcblx0ICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9oYXlvbmFvL3dlYi1hdWRpby1hcGktc2hpbS9ibG9iL21hc3Rlci9zcmMvQXVkaW9Db250ZXh0LmpzXG5cdCAgICAgICAgLy8gTUlUIExpY2Vuc2UgKGMpIDIwMTUgQG1vaGF5b25hb1xuXHQgICAgICAgIHZhciBkZWNvZGVBdWRpb0RhdGFQcm9taXNlID0gZmFsc2U7XG5cdCAgICAgICAgdmFyIG9mZmxpbmVDb250ZXh0ID0gbmV3IE9mZmxpbmVBdWRpb0NvbnRleHQoMSwgMSwgNDQxMDApO1xuXHQgICAgICAgIHZhciBhdWRpb0RhdGEgPSBuZXcgVWludDMyQXJyYXkoW1xuXHQgICAgICAgICAgICAxMTc5MDExNDEwLFxuXHQgICAgICAgICAgICA0OCxcblx0ICAgICAgICAgICAgMTE2MzI4MDcyNyxcblx0ICAgICAgICAgICAgNTQ0NTAxMDk0LFxuXHQgICAgICAgICAgICAxNixcblx0ICAgICAgICAgICAgMTMxMDczLFxuXHQgICAgICAgICAgICA0NDEwMCxcblx0ICAgICAgICAgICAgMTc2NDAwLFxuXHQgICAgICAgICAgICAxMDQ4NTgwLFxuXHQgICAgICAgICAgICAxNjM1MDE3MDYwLFxuXHQgICAgICAgICAgICA4LFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwXG5cdCAgICAgICAgXSkuYnVmZmVyO1xuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgIHZhciByZXQgPSBvZmZsaW5lQ29udGV4dC5kZWNvZGVBdWRpb0RhdGEoYXVkaW9EYXRhKTtcblx0ICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0ICAgICAgICAgICAgICAgIGRlY29kZUF1ZGlvRGF0YVByb21pc2UgPSB0cnVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICBkZWNvZGVBdWRpb0RhdGFQcm9taXNlID0gZmFsc2U7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLl9uYXRpdmVfZGVjb2RlQXVkaW9EYXRhID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5kZWNvZGVBdWRpb0RhdGE7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuZGVjb2RlQXVkaW9EYXRhID0gZnVuY3Rpb24gKGF1ZGlvRGF0YSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChzdWNjZXNzLCBlcnJvcikge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX25hdGl2ZV9kZWNvZGVBdWRpb0RhdGEoYXVkaW9EYXRhLCBzdWNjZXNzLCBlcnJvcik7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIEF1ZGlvQ29udGV4dC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW1pdHRlcn1cblx0XHQgKiAgQHBhcmFtIHtBdWRpb0NvbnRleHQ9fSBjb250ZXh0IG9wdGlvbmFsbHkgcGFzcyBpbiBhIGNvbnRleHRcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2NvbnRleHQnXSwgVG9uZS5Db250ZXh0KTtcblx0ICAgICAgICBpZiAoIW9wdGlvbnMuY29udGV4dCkge1xuXHQgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQgPSBuZXcgd2luZG93LkF1ZGlvQ29udGV4dCgpO1xuXHQgICAgICAgICAgICBpZiAoIW9wdGlvbnMuY29udGV4dCkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgY3JlYXRlIEF1ZGlvQ29udGV4dC4gUG9zc2libHkgdG9vIG1hbnkgQXVkaW9Db250ZXh0cyBydW5uaW5nIGFscmVhZHkuJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG9wdGlvbnMuY29udGV4dDtcblx0ICAgICAgICAvLyBleHRlbmQgYWxsIG9mIHRoZSBtZXRob2RzXG5cdCAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB0aGlzLl9jb250ZXh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlZmluZVByb3BlcnR5KHRoaXMuX2NvbnRleHQsIHByb3ApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVmYXVsdCBsYXRlbmN5IGhpbnRcblx0XHRcdCAqICBAdHlwZSAge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGF0ZW5jeUhpbnQgPSBvcHRpb25zLmxhdGVuY3lIaW50O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuIG9iamVjdCBjb250YWluaW5nIGFsbCBvZiB0aGUgY29uc3RhbnRzIEF1ZGlvQnVmZmVyU291cmNlTm9kZXNcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRzID0ge307XG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvLyBXT1JLRVJcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSBldmVudHMgYXJlIHNjaGVkdWxlZFxuXHRcdFx0ICogIGludG8gdGhlIGZ1dHVyZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb29rQWhlYWQgPSBvcHRpb25zLmxvb2tBaGVhZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHJlZmVyZW5jZSB0byB0aGUgYWN0dWFsIGNvbXB1dGVkIHVwZGF0ZSBpbnRlcnZhbFxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21wdXRlZFVwZGF0ZUludGVydmFsID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHJlbGlhYmxlIGNhbGxiYWNrIG1ldGhvZFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtUaWNrZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aWNrZXIgPSBuZXcgVGlja2VyKHRoaXMuZW1pdC5iaW5kKHRoaXMsICd0aWNrJyksIG9wdGlvbnMuY2xvY2tTb3VyY2UsIG9wdGlvbnMudXBkYXRlSW50ZXJ2YWwpO1xuXHQgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgLy8gVElNRU9VVFNcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgc2V0VGltZW91dCBldmVudHMuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lb3V0cyA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpbWVvdXQgaWQgY291bnRlclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRJZHMgPSAwO1xuXHQgICAgICAgIHRoaXMub24oJ3RpY2snLCB0aGlzLl90aW1lb3V0TG9vcC5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNvbnRleHQsIFRvbmUuRW1pdHRlcik7XG5cdCAgICBUb25lLkVtaXR0ZXIubWl4aW4oVG9uZS5Db250ZXh0KTtcblx0ICAgIC8qKlxuXHRcdCAqIGRlZmF1bHRzXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Nsb2NrU291cmNlJzogJ3dvcmtlcicsXG5cdCAgICAgICAgJ2xhdGVuY3lIaW50JzogJ2ludGVyYWN0aXZlJyxcblx0ICAgICAgICAnbG9va0FoZWFkJzogMC4xLFxuXHQgICAgICAgICd1cGRhdGVJbnRlcnZhbCc6IDAuMDNcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRGVmaW5lIGEgcHJvcGVydHkgb24gdGhpcyBUb25lLkNvbnRleHQuXG5cdFx0ICogIFRoaXMgaXMgdXNlZCB0byBleHRlbmQgdGhlIG5hdGl2ZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHBhcmFtICB7QXVkaW9Db250ZXh0fSAgY29udGV4dFxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLl9kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChjb250ZXh0LCBwcm9wKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aGlzW3Byb3BdKSkge1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcCwge1xuXHQgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0W3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdLmJpbmQoY29udGV4dCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRbcHJvcF07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbcHJvcF0gPSB2YWw7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgYXVkaW8gY29udGV4dCB0aW1lXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dC5jdXJyZW50VGltZSArIHRoaXMubG9va0FoZWFkO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQcm9taXNlIHdoaWNoIGlzIGludm9rZWQgd2hlbiB0aGUgY29udGV4dCBpcyBydW5uaW5nLlxuXHRcdCAqICBUcmllcyB0byByZXN1bWUgdGhlIGNvbnRleHQgaWYgaXQncyBub3Qgc3RhcnRlZC5cblx0XHQgKiAgQHJldHVybiAge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLnJlYWR5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoZG9uZSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fY29udGV4dC5zdGF0ZSA9PT0gJ3J1bm5pbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBkb25lKCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LnJlc3VtZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUHJvbWlzZSB3aGljaCBpcyBpbnZva2VkIHdoZW4gdGhlIGNvbnRleHQgaXMgcnVubmluZy5cblx0XHQgKiAgVHJpZXMgdG8gcmVzdW1lIHRoZSBjb250ZXh0IGlmIGl0J3Mgbm90IHN0YXJ0ZWQuXG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dC5jbG9zZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBUb25lLkNvbnRleHQuZW1pdCgnY2xvc2UnLCB0aGlzKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZW5lcmF0ZSBhIGxvb3BlZCBidWZmZXIgYXQgc29tZSBjb25zdGFudCB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdmFsXG5cdFx0ICogIEByZXR1cm4gIHtCdWZmZXJTb3VyY2VOb2RlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5nZXRDb25zdGFudCA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAodGhpcy5fY29uc3RhbnRzW3ZhbF0pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN0YW50c1t2YWxdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9jb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCAxMjgsIHRoaXMuX2NvbnRleHQuc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgICAgIHZhciBhcnIgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBhcnJbaV0gPSB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIGNvbnN0YW50ID0gdGhpcy5fY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICAgICAgY29uc3RhbnQuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICAgICAgY29uc3RhbnQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LmJ1ZmZlciA9IGJ1ZmZlcjtcblx0ICAgICAgICAgICAgY29uc3RhbnQubG9vcCA9IHRydWU7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LnN0YXJ0KDApO1xuXHQgICAgICAgICAgICB0aGlzLl9jb25zdGFudHNbdmFsXSA9IGNvbnN0YW50O1xuXHQgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJpdmF0ZSBsb29wIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHRoZSBjb250ZXh0IHNjaGVkdWxlZCB0aW1lb3V0c1xuXHRcdCAqICBJcyBpbnZva2VkIGZyb20gdGhlIGNsb2NrIHNvdXJjZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5fdGltZW91dExvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgd2hpbGUgKHRoaXMuX3RpbWVvdXRzICYmIHRoaXMuX3RpbWVvdXRzLmxlbmd0aCAmJiB0aGlzLl90aW1lb3V0cy5wZWVrKCkudGltZSA8PSBub3cpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dHMuc2hpZnQoKS5jYWxsYmFjaygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQSBzZXRUaW1lb3V0IHdoaWNoIGlzIGdhdXJlbnRlZWQgYnkgdGhlIGNsb2NrIHNvdXJjZS5cblx0XHQgKiAgQWxzbyBydW5zIGluIHRoZSBvZmZsaW5lIGNvbnRleHQuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgZm4gICAgICAgVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdCAqICBAcGFyYW0gIHtTZWNvbmRzfSAgICB0aW1lb3V0ICBUaGUgdGltZW91dCBpbiBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm5zIHtOdW1iZXJ9IElEIHRvIHVzZSB3aGVuIGludm9raW5nIFRvbmUuQ29udGV4dC5jbGVhclRpbWVvdXRcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuc2V0VGltZW91dCA9IGZ1bmN0aW9uIChmbiwgdGltZW91dCkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRJZHMrKztcblx0ICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0cy5hZGQoe1xuXHQgICAgICAgICAgICBjYWxsYmFjazogZm4sXG5cdCAgICAgICAgICAgIHRpbWU6IG5vdyArIHRpbWVvdXQsXG5cdCAgICAgICAgICAgIGlkOiB0aGlzLl90aW1lb3V0SWRzXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVvdXRJZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFycyBhIHByZXZpb3VzbHkgc2NoZWR1bGVkIHRpbWVvdXQgd2l0aCBUb25lLmNvbnRleHQuc2V0VGltZW91dFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBpZCAgVGhlIElEIHJldHVybmVkIGZyb20gc2V0VGltZW91dFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Db250ZXh0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbiAoaWQpIHtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuaWQgPT09IGlkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShldmVudCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSG93IG9mdGVuIHRoZSBXZWIgV29ya2VyIGNhbGxiYWNrIGlzIGludm9rZWQuXG5cdFx0ICogIFRoaXMgbnVtYmVyIGNvcnJlc3BvbmRzIHRvIGhvdyByZXNwb25zaXZlIHRoZSBzY2hlZHVsaW5nXG5cdFx0ICogIGNhbiBiZS4gQ29udGV4dC51cGRhdGVJbnRlcnZhbCArIENvbnRleHQubG9va0FoZWFkIGdpdmVzIHlvdSB0aGVcblx0XHQgKiAgdG90YWwgbGF0ZW5jeSBiZXR3ZWVuIHNjaGVkdWxpbmcgYW4gZXZlbnQgYW5kIGhlYXJpbmcgaXQuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnRleHQjXG5cdFx0ICogIEBuYW1lIHVwZGF0ZUludGVydmFsXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db250ZXh0LnByb3RvdHlwZSwgJ3VwZGF0ZUludGVydmFsJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja2VyLnVwZGF0ZUludGVydmFsO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja2VyLnVwZGF0ZUludGVydmFsID0gaW50ZXJ2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgV2hhdCB0aGUgc291cmNlIG9mIHRoZSBjbG9jayBpcywgZWl0aGVyIFwid29ya2VyXCIgKFdlYiBXb3JrZXIgW2RlZmF1bHRdKSxcblx0XHQgKiAgXCJ0aW1lb3V0XCIgKHNldFRpbWVvdXQpLCBvciBcIm9mZmxpbmVcIiAobm9uZSkuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnRleHQjXG5cdFx0ICogIEBuYW1lIGNsb2NrU291cmNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db250ZXh0LnByb3RvdHlwZSwgJ2Nsb2NrU291cmNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja2VyLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdHlwZSBvZiBwbGF5YmFjaywgd2hpY2ggYWZmZWN0cyB0cmFkZW9mZnMgYmV0d2VlbiBhdWRpb1xuXHRcdCAqICBvdXRwdXQgbGF0ZW5jeSBhbmQgcmVzcG9uc2l2ZW5lc3MuXG5cdFx0ICpcblx0XHQgKiAgSW4gYWRkaXRpb24gdG8gc2V0dGluZyB0aGUgdmFsdWUgaW4gc2Vjb25kcywgdGhlIGxhdGVuY3lIaW50IGFsc29cblx0XHQgKiAgYWNjZXB0cyB0aGUgc3RyaW5ncyBcImludGVyYWN0aXZlXCIgKHByaW9yaXRpemVzIGxvdyBsYXRlbmN5KSxcblx0XHQgKiAgXCJwbGF5YmFja1wiIChwcmlvcml0aXplcyBzdXN0YWluZWQgcGxheWJhY2spLCBcImJhbGFuY2VkXCIgKGJhbGFuY2VzXG5cdFx0ICogIGxhdGVuY3kgYW5kIHBlcmZvcm1hbmNlKSwgYW5kIFwiZmFzdGVzdFwiIChsb3dlc3QgbGF0ZW5jeSwgbWlnaHQgZ2xpdGNoIG1vcmUgb2Z0ZW4pLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfFNlY29uZHN9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnRleHQjXG5cdFx0ICogIEBuYW1lIGxhdGVuY3lIaW50XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdGhlIGxvb2tBaGVhZCB0byAwLjMgc2Vjb25kc1xuXHRcdCAqIFRvbmUuY29udGV4dC5sYXRlbmN5SGludCA9IDAuMztcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNvbnRleHQucHJvdG90eXBlLCAnbGF0ZW5jeUhpbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sYXRlbmN5SGludDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGhpbnQpIHtcblx0ICAgICAgICAgICAgdmFyIGxvb2tBaGVhZCA9IGhpbnQ7XG5cdCAgICAgICAgICAgIHRoaXMuX2xhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNTdHJpbmcoaGludCkpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAoaGludCkge1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnaW50ZXJhY3RpdmUnOlxuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuMTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ3BsYXliYWNrJzpcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjg7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdiYWxhbmNlZCc6XG5cdCAgICAgICAgICAgICAgICAgICAgbG9va0FoZWFkID0gMC4yNTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2Zhc3Rlc3QnOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubGF0ZW5jeUhpbnQgPSAnaW50ZXJhY3RpdmUnO1xuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuMDE7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlSW50ZXJ2YWwgPSBsb29rQWhlYWQgLyAzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFVubGlrZSBvdGhlciBkaXNwb3NlIG1ldGhvZHMsIHRoaXMgcmV0dXJucyBhIFByb21pc2Vcblx0XHQgKiAgd2hpY2ggZXhlY3V0ZXMgd2hlbiB0aGUgY29udGV4dCBpcyBjbG9zZWQgYW5kIGRpc3Bvc2VkXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlciA9IG51bGw7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRzLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dHMgPSBudWxsO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjb24gaW4gdGhpcy5fY29uc3RhbnRzKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jb25zdGFudHNbY29uXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzID0gbnVsbDtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBBIGNsYXNzIHdoaWNoIHByb3ZpZGVzIGEgcmVsaWFibGUgY2FsbGJhY2sgdXNpbmcgZWl0aGVyXG5cdFx0ICogICAgICAgIGEgV2ViIFdvcmtlciwgb3IgaWYgdGhhdCBpc24ndCBzdXBwb3J0ZWQsIGZhbGxzIGJhY2sgdG8gc2V0VGltZW91dC5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIFRpY2tlciA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdHlwZSwgdXBkYXRlSW50ZXJ2YWwpIHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEVpdGhlciBcIndvcmtlclwiIG9yIFwidGltZW91dFwiXG5cdFx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHVwZGF0ZSBpbnRlcnZhbCBvZiB0aGUgd29ya2VyXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3VwZGF0ZUludGVydmFsID0gdXBkYXRlSW50ZXJ2YWw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBUb25lLmRlZmF1bHRBcmcoY2FsbGJhY2ssIFRvbmUubm9PcCk7XG5cdCAgICAgICAgLy9jcmVhdGUgdGhlIGNsb2NrIHNvdXJjZSBmb3IgdGhlIGZpcnN0IHRpbWVcblx0ICAgICAgICB0aGlzLl9jcmVhdGVDbG9jaygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwb3NzaWJsZSB0aWNrZXIgdHlwZXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUaWNrZXIuVHlwZSA9IHtcblx0ICAgICAgICBXb3JrZXI6ICd3b3JrZXInLFxuXHQgICAgICAgIFRpbWVvdXQ6ICd0aW1lb3V0Jyxcblx0ICAgICAgICBPZmZsaW5lOiAnb2ZmbGluZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2VuZXJhdGUgYSB3ZWIgd29ya2VyXG5cdFx0ICogIEByZXR1cm4gIHtXZWJXb3JrZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9VUkwgU2hpbVxuXHQgICAgICAgIHdpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cdCAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbLy90aGUgaW5pdGlhbCB0aW1lb3V0IHRpbWVcblx0ICAgICAgICAgICAgJ3ZhciB0aW1lb3V0VGltZSA9ICcgKyAodGhpcy5fdXBkYXRlSW50ZXJ2YWwgKiAxMDAwKS50b0ZpeGVkKDEpICsgJzsnICsgLy9vbm1lc3NhZ2UgY2FsbGJhY2tcblx0ICAgICAgICAgICAgJ3NlbGYub25tZXNzYWdlID0gZnVuY3Rpb24obXNnKXsnICsgJ1xcdHRpbWVvdXRUaW1lID0gcGFyc2VJbnQobXNnLmRhdGEpOycgKyAnfTsnICsgLy90aGUgdGljayBmdW5jdGlvbiB3aGljaCBwb3N0cyBhIG1lc3NhZ2Vcblx0ICAgICAgICAgICAgLy9hbmQgc2NoZWR1bGVzIGEgbmV3IHRpY2tcblx0ICAgICAgICAgICAgJ2Z1bmN0aW9uIHRpY2soKXsnICsgJ1xcdHNldFRpbWVvdXQodGljaywgdGltZW91dFRpbWUpOycgKyAnXFx0c2VsZi5wb3N0TWVzc2FnZShcXCd0aWNrXFwnKTsnICsgJ30nICsgLy9jYWxsIHRpY2sgaW5pdGlhbGx5XG5cdCAgICAgICAgICAgICd0aWNrKCk7J10pO1xuXHQgICAgICAgIHZhciBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0ICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcihibG9iVXJsKTtcblx0ICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gdGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93b3JrZXIgPSB3b3JrZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ3JlYXRlIGEgdGltZW91dCBsb29wXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuX2NyZWF0ZVRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jcmVhdGVUaW1lb3V0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpLCB0aGlzLl91cGRhdGVJbnRlcnZhbCAqIDEwMDApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENyZWF0ZSB0aGUgY2xvY2sgc291cmNlLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9jcmVhdGVDbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVGlja2VyLlR5cGUuV29ya2VyKSB7XG5cdCAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVXb3JrZXIoKTtcblx0ICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgLy8gd29ya2VycyBub3Qgc3VwcG9ydGVkLCBmYWxsYmFjayB0byB0aW1lb3V0XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90eXBlID0gVGlja2VyLlR5cGUuVGltZW91dDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNsb2NrKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRpY2tlci5UeXBlLlRpbWVvdXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGltZW91dCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAbWVtYmVyT2YgVGlja2VyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdXBkYXRlSW50ZXJ2YWxcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRpY2tlci5wcm90b3R5cGUsICd1cGRhdGVJbnRlcnZhbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZUludGVydmFsO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJ2YWwgPSBNYXRoLm1heChpbnRlcnZhbCwgMTI4IC8gNDQxMDApO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVGlja2VyLlR5cGUuV29ya2VyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93b3JrZXIucG9zdE1lc3NhZ2UoTWF0aC5tYXgoaW50ZXJ2YWwgKiAxMDAwLCAxKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSB0aWNrZXIsIGVpdGhlciBhIHdvcmtlciBvciBhIHRpbWVvdXRcblx0XHQgKiBAbWVtYmVyT2YgVGlja2VyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGlja2VyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9kaXNwb3NlQ2xvY2soKTtcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNsb2NrKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cCB0aGUgY3VycmVudCBjbG9jayBzb3VyY2Vcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fZGlzcG9zZUNsb2NrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl90aW1lb3V0KSB7XG5cdCAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLl93b3JrZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fd29ya2VyLnRlcm1pbmF0ZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl93b3JrZXIub25tZXNzYWdlID0gbnVsbDtcblx0ICAgICAgICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2Rpc3Bvc2VDbG9jaygpO1xuXHQgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2hpbSBhbGwgY29ubmVjdC9kaXNjb25uZWN0IGFuZCBzb21lIGRlcHJlY2F0ZWQgbWV0aG9kcyB3aGljaCBhcmUgc3RpbGwgaW5cblx0XHQgKiAgc29tZSBvbGRlciBpbXBsZW1lbnRhdGlvbnMuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBuYXRpdmVDb25uZWN0ID0gQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0O1xuXHQgICAgICAgIHZhciBuYXRpdmVEaXNjb25uZWN0ID0gQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNjb25uZWN0O1xuXHQgICAgICAgIC8vcmVwbGFjZSB0aGUgb2xkIGNvbm5lY3QgbWV0aG9kXG5cdCAgICAgICAgZnVuY3Rpb24gdG9uZUNvbm5lY3QoQiwgb3V0TnVtLCBpbk51bSkge1xuXHQgICAgICAgICAgICBpZiAoQi5pbnB1dCkge1xuXHQgICAgICAgICAgICAgICAgaW5OdW0gPSBUb25lLmRlZmF1bHRBcmcoaW5OdW0sIDApO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheShCLmlucHV0KSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3QoQi5pbnB1dFtpbk51bV0pO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0KEIuaW5wdXQsIG91dE51bSwgaW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoQiBpbnN0YW5jZW9mIEF1ZGlvTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVDb25uZWN0LmNhbGwodGhpcywgQiwgb3V0TnVtLCBpbk51bSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUNvbm5lY3QuY2FsbCh0aGlzLCBCLCBvdXROdW0pO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQjtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlcnJvciBjb25uZWN0aW5nIHRvIG5vZGU6ICcgKyBCICsgJ1xcbicgKyBlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JlcGxhY2UgdGhlIG9sZCBkaXNjb25uZWN0IG1ldGhvZFxuXHQgICAgICAgIGZ1bmN0aW9uIHRvbmVEaXNjb25uZWN0KEIsIG91dE51bSwgaW5OdW0pIHtcblx0ICAgICAgICAgICAgaWYgKEIgJiYgQi5pbnB1dCAmJiBUb25lLmlzQXJyYXkoQi5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgICAgIGluTnVtID0gVG9uZS5kZWZhdWx0QXJnKGluTnVtLCAwKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdChCLmlucHV0W2luTnVtXSwgb3V0TnVtLCAwKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChCICYmIEIuaW5wdXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdChCLmlucHV0LCBvdXROdW0sIGluTnVtKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGlzY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXJyb3IgZGlzY29ubmVjdGluZyBub2RlOiAnICsgQiArICdcXG4nICsgZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCAhPT0gdG9uZUNvbm5lY3QpIHtcblx0ICAgICAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0ID0gdG9uZUNvbm5lY3Q7XG5cdCAgICAgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IHRvbmVEaXNjb25uZWN0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy8gc2V0IHRoZSBhdWRpbyBjb250ZXh0IGluaXRpYWxseSwgYW5kIGlmIG9uZSBpcyBub3QgYWxyZWFkeSBjcmVhdGVkXG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQgJiYgIVRvbmUuaW5pdGlhbGl6ZWQpIHtcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBuZXcgVG9uZS5Db250ZXh0KCk7XG5cdCAgICAgICAgLy8gbG9nIG9uIGZpcnN0IGluaXRpYWxpemF0aW9uXG5cdCAgICAgICAgLy8gYWxsb3cgb3B0aW9uYWwgc2lsZW5jaW5nIG9mIHRoaXMgbG9nXG5cdCAgICAgICAgaWYgKCF3aW5kb3cuVE9ORV9TSUxFTkNFX1ZFUlNJT05fTE9HR0lORykge1xuXHQgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXHQgICAgICAgICAgICBjb25zb2xlLmxvZygnJWMgKiBUb25lLmpzICcgKyBUb25lLnZlcnNpb24gKyAnICogJywgJ2JhY2tncm91bmQ6ICMwMDA7IGNvbG9yOiAjZmZmJyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSBlbHNlIGlmICghVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXHQgICAgICAgIGNvbnNvbGUud2FybignVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgVG9uZS5qcycpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIFRvbmUuQ29udGV4dDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkF1ZGlvTm9kZSBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY2xhc3NlcyB3aGljaCBwcm9jZXNzIGF1ZGlvLlxuXHRcdCAqICAgICAgICAgQXVkaW9Ob2RlcyBoYXZlIGlucHV0cyBhbmQgb3V0cHV0cy5cblx0XHQgKiAgQHBhcmFtXHR7QXVkaW9Db250ZXh0PX0gY29udGV4dFx0VGhlIGF1ZGlvIGNvbnRleHQgdG8gdXNlIHdpdGggdGhlIGNsYXNzXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8vdXNlIHRoZSBkZWZhdWx0IGNvbnRleHQgaWYgb25lIGlzIG5vdCBwYXNzZWQgaW5cblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2NvbnRleHQnXSwgeyAnY29udGV4dCc6IFRvbmUuY29udGV4dCB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBBdWRpb0NvbnRleHQgb2YgdGhpcyBpbnN0YW5jZVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtBdWRpb0NvbnRleHR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgYXVkaW8gY29udGV4dCBiZWxvbmdpbmcgdG8gdGhpcyBpbnN0YW5jZS5cblx0XHQgKiBAdHlwZSB7VG9uZS5Db250ZXh0fVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiBAbmFtZSBjb250ZXh0XG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnY29udGV4dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ3JlYXRlIGlucHV0IGFuZCBvdXRwdXRzIGZvciB0aGlzIG9iamVjdC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgW2lucHV0PTBdICAgVGhlIG51bWJlciBvZiBpbnB1dHNcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgW291dHB1dHM9MF0gIFRoZSBudW1iZXIgb2Ygb3V0cHV0c1xuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5BdWRpb05vZGV9ICB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY3JlYXRlSW5zT3V0cyA9IGZ1bmN0aW9uIChpbnB1dHMsIG91dHB1dHMpIHtcblx0ICAgICAgICBpZiAoaW5wdXRzID09PSAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRzID4gMSkge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0ID0gbmV3IEFycmF5KGlucHV0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChvdXRwdXRzID09PSAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKG91dHB1dHMgPiAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0ID0gbmV3IEFycmF5KG91dHB1dHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2hhbm5lbENvdW50IGlzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdXNlZCB3aGVuIHVwLW1peGluZyBhbmQgZG93bi1taXhpbmdcblx0XHQgKiAgY29ubmVjdGlvbnMgdG8gYW55IGlucHV0cyB0byB0aGUgbm9kZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMiBleGNlcHQgZm9yXG5cdFx0ICogIHNwZWNpZmljIG5vZGVzIHdoZXJlIGl0cyB2YWx1ZSBpcyBzcGVjaWFsbHkgZGV0ZXJtaW5lZC5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIGNoYW5uZWxDb3VudFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjaGFubmVsQ291bnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnQgPSBjO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYW5uZWxDb3VudE1vZGUgZGV0ZXJtaW5lcyBob3cgY2hhbm5lbHMgd2lsbCBiZSBjb3VudGVkIHdoZW4gdXAtbWl4aW5nIGFuZFxuXHRcdCAqICBkb3duLW1peGluZyBjb25uZWN0aW9ucyB0byBhbnkgaW5wdXRzIHRvIHRoZSBub2RlLlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcIm1heFwiLiBUaGlzIGF0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0IGZvciBub2RlcyB3aXRoIG5vIGlucHV0cy5cblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSBjaGFubmVsQ291bnRNb2RlXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NoYW5uZWxDb3VudE1vZGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnRNb2RlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50TW9kZSA9IG07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2hhbm5lbEludGVycHJldGF0aW9uIGRldGVybWluZXMgaG93IGluZGl2aWR1YWwgY2hhbm5lbHMgd2lsbCBiZSB0cmVhdGVkXG5cdFx0ICogIHdoZW4gdXAtbWl4aW5nIGFuZCBkb3duLW1peGluZyBjb25uZWN0aW9ucyB0byBhbnkgaW5wdXRzIHRvIHRoZSBub2RlLlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcInNwZWFrZXJzXCIuXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgY2hhbm5lbEludGVycHJldGF0aW9uXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NoYW5uZWxJbnRlcnByZXRhdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxJbnRlcnByZXRhdGlvbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxJbnRlcnByZXRhdGlvbiA9IGk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpbnB1dHMgZmVlZGluZyBpbnRvIHRoZSBBdWRpb05vZGUuXG5cdFx0ICogIEZvciBzb3VyY2Ugbm9kZXMsIHRoaXMgd2lsbCBiZSAwLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBudW1iZXJPZklucHV0c1xuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ251bWJlck9mSW5wdXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbnB1dCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLmlucHV0KSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0Lmxlbmd0aDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2Ygb3V0cHV0cyBjb21pbmcgb3V0IG9mIHRoZSBBdWRpb05vZGUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIG51bWJlck9mT3V0cHV0c1xuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ251bWJlck9mT3V0cHV0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5sZW5ndGg7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENhbGxlZCB3aGVuIGFuIGF1ZGlvIHBhcmFtIGNvbm5lY3RzIHRvIHRoaXMgbm9kZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuX29uQ29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0aGUgb3V0cHV0IG9mIGEgVG9uZU5vZGUgdG8gYW4gQXVkaW9QYXJhbSwgQXVkaW9Ob2RlLCBvciBUb25lTm9kZVxuXHRcdCAqICBAcGFyYW0gIHtUb25lIHwgQXVkaW9QYXJhbSB8IEF1ZGlvTm9kZX0gdW5pdFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bT0wXSBvcHRpb25hbGx5IHdoaWNoIG91dHB1dCB0byBjb25uZWN0IGZyb21cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtpbnB1dE51bT0wXSBvcHRpb25hbGx5IHdoaWNoIGlucHV0IHRvIGNvbm5lY3QgdG9cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICh1bml0LCBvdXRwdXROdW0sIGlucHV0TnVtKSB7XG5cdCAgICAgICAgaWYgKHVuaXQuX29uQ29ubmVjdCkge1xuXHQgICAgICAgICAgICB1bml0Ll9vbkNvbm5lY3QodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5vdXRwdXQpKSB7XG5cdCAgICAgICAgICAgIG91dHB1dE51bSA9IFRvbmUuZGVmYXVsdEFyZyhvdXRwdXROdW0sIDApO1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dFtvdXRwdXROdW1dLmNvbm5lY3QodW5pdCwgMCwgaW5wdXROdW0pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmNvbm5lY3QodW5pdCwgb3V0cHV0TnVtLCBpbnB1dE51bSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNjb25uZWN0IHRoZSBvdXRwdXRcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8QXVkaW9Ob2RlfSBvdXRwdXQgRWl0aGVyIHRoZSBvdXRwdXQgaW5kZXggdG8gZGlzY29ubmVjdFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgb3V0cHV0IGlzIGFuIGFycmF5LCBvciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSB0byBkaXNjb25uZWN0IGZyb20uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIG91dHB1dE51bSwgaW5wdXROdW0pIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc051bWJlcihkZXN0aW5hdGlvbikpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0W2Rlc3RpbmF0aW9uXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBvdXRwdXROdW0gPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TnVtLCAwKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0W291dHB1dE51bV0uZGlzY29ubmVjdChkZXN0aW5hdGlvbiwgMCwgaW5wdXROdW0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuZGlzY29ubmVjdC5hcHBseSh0aGlzLm91dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGlzIG5vZGUgdG8gdGhlIHJlc3Qgb2YgdGhlIG5vZGVzIGluIHNlcmllcy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy9jb25uZWN0IGEgbm9kZSB0byBhbiBlZmZlY3QsIHBhblZvbCBhbmQgdGhlbiB0byB0aGUgbWFzdGVyIG91dHB1dFxuXHRcdCAqICBub2RlLmNoYWluKGVmZmVjdCwgcGFuVm9sLCBUb25lLk1hc3Rlcik7XG5cdFx0ICogIEBwYXJhbSB7Li4uQXVkaW9QYXJhbXxUb25lfEF1ZGlvTm9kZX0gbm9kZXNcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY2hhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRVbml0ID0gdGhpcztcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgdG9Vbml0ID0gYXJndW1lbnRzW2ldO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdC5jb25uZWN0KHRvVW5pdCk7XG5cdCAgICAgICAgICAgIGN1cnJlbnRVbml0ID0gdG9Vbml0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0aGUgb3V0cHV0IG9mIHRoaXMgbm9kZSB0byB0aGUgcmVzdCBvZiB0aGUgbm9kZXMgaW4gcGFyYWxsZWwuXG5cdFx0ICogIEBwYXJhbSB7Li4uQXVkaW9QYXJhbXxUb25lfEF1ZGlvTm9kZX0gbm9kZXNcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZmFuID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29ubmVjdChhcmd1bWVudHNbaV0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICBpZiAod2luZG93LkF1ZGlvTm9kZSkge1xuXHQgICAgICAgIC8vZ2l2ZSBuYXRpdmUgbm9kZXMgY2hhaW4gYW5kIGZhbiBtZXRob2RzXG5cdCAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5jaGFpbiA9IFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jaGFpbjtcblx0ICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLmZhbiA9IFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5mYW47XG5cdCAgICB9XG5cdCAgICAvKipcblx0XHQgKiBEaXNwb3NlIGFuZCBkaXNjb25uZWN0XG5cdFx0ICogQHJldHVybiB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh0aGlzLmlucHV0KSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbnB1dCBpbnN0YW5jZW9mIEF1ZGlvTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5pbnB1dCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0IGluc3RhbmNlb2YgQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm91dHB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jb250ZXh0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdWRpb05vZGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQmFzZSBjbGFzcyBmb3IgYWxsIFNpZ25hbHMuIFVzZWQgSW50ZXJuYWxseS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbEJhc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNpZ25hbEJhc2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGVuIHNpZ25hbHMgY29ubmVjdCB0byBvdGhlciBzaWduYWxzIG9yIEF1ZGlvUGFyYW1zLFxuXHRcdCAqICB0aGV5IHRha2Ugb3ZlciB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoYXQgc2lnbmFsIG9yIEF1ZGlvUGFyYW0uXG5cdFx0ICogIEZvciBhbGwgb3RoZXIgbm9kZXMsIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBhIGRlZmF1bHQgPGNvZGU+Y29ubmVjdDwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQG92ZXJyaWRlXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9QYXJhbXxBdWRpb05vZGV8VG9uZS5TaWduYWx8VG9uZX0gbm9kZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bWJlcj0wXSBUaGUgb3V0cHV0IG51bWJlciB0byBjb25uZWN0IGZyb20uXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW1iZXI9MF0gVGhlIGlucHV0IG51bWJlciB0byBjb25uZWN0IHRvLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWxCYXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSwgb3V0cHV0TnVtYmVyLCBpbnB1dE51bWJlcikge1xuXHQgICAgICAgIC8vemVybyBpdCBvdXQgc28gdGhhdCB0aGUgc2lnbmFsIGNhbiBoYXZlIGZ1bGwgY29udHJvbFxuXHQgICAgICAgIGlmIChUb25lLlNpZ25hbCAmJiBUb25lLlNpZ25hbCA9PT0gbm9kZS5jb25zdHJ1Y3RvciB8fCBUb25lLlBhcmFtICYmIFRvbmUuUGFyYW0gPT09IG5vZGUuY29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgLy9jYW5jZWwgY2hhbmdlc1xuXHQgICAgICAgICAgICBub2RlLl9wYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoMCk7XG5cdCAgICAgICAgICAgIC8vcmVzZXQgdGhlIHZhbHVlXG5cdCAgICAgICAgICAgIG5vZGUuX3BhcmFtLnZhbHVlID0gMDtcblx0ICAgICAgICAgICAgLy9tYXJrIHRoZSB2YWx1ZSBhcyBvdmVycmlkZGVuXG5cdCAgICAgICAgICAgIG5vZGUub3ZlcnJpZGRlbiA9IHRydWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQXVkaW9QYXJhbSkge1xuXHQgICAgICAgICAgICBub2RlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcygwKTtcblx0ICAgICAgICAgICAgbm9kZS52YWx1ZSA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0LmNhbGwodGhpcywgbm9kZSwgb3V0cHV0TnVtYmVyLCBpbnB1dE51bWJlcik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2lnbmFsQmFzZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgLy9maXhlcyBzYWZhcmkgb25seSBidWcgd2hpY2ggaXMgc3RpbGwgcHJlc2VudCBpbiAxMVxuXHQgICAgICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcblx0ICAgICAgICB2YXIgaXNTYWZhcmkgPSB1YS5pbmNsdWRlcygnc2FmYXJpJykgJiYgIXVhLmluY2x1ZGVzKCdjaHJvbWUnKTtcblx0ICAgICAgICBpZiAoaXNTYWZhcmkpIHtcblx0ICAgICAgICAgICAgdmFyIFdhdmVTaGFwZXJOb2RlID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTm9kZSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IGNvbnRleHQuX25hdGl2ZV9jcmVhdGVXYXZlU2hhcGVyKCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHRoaXMuX2ludGVybmFsTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmluZVByb3BlcnR5KHRoaXMuX2ludGVybmFsTm9kZSwgcHJvcCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXYXZlU2hhcGVyTm9kZS5wcm90b3R5cGUsICdjdXJ2ZScsIHtcblx0ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJ2ZTtcblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjdXJ2ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gY3VydmU7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShjdXJ2ZS5sZW5ndGggKyAxKTtcblx0ICAgICAgICAgICAgICAgICAgICBhcnJheS5zZXQoY3VydmUsIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgIGFycmF5WzBdID0gY3VydmVbMF07XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxOb2RlLmN1cnZlID0gYXJyYXk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBXYXZlU2hhcGVyTm9kZS5wcm90b3R5cGUuX2RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKGNvbnRleHQsIHByb3ApIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpc1twcm9wXSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcCwge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGV4dFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdLmJpbmQoY29udGV4dCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbcHJvcF0gPSB2YWw7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5fbmF0aXZlX2NyZWF0ZVdhdmVTaGFwZXIgPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVdhdmVTaGFwZXI7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlV2F2ZVNoYXBlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV2F2ZVNoYXBlck5vZGUodGhpcyk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHMgdGhlIG5hdGl2ZSBXZWIgQXVkaW8gQVBJXG5cdFx0ICogICAgICAgICBbV2F2ZVNoYXBlck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLXdhdmVzaGFwZXJub2RlLWludGVyZmFjZSkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb258QXJyYXl8TnVtYmVyfSBtYXBwaW5nIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGRlZmluZSB0aGUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1hcHBpbmcgZnVuY3Rpb24gc2hvdWxkIHRha2UgdHdvIGFyZ3VtZW50czpcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBpcyB0aGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBhcnJheSBwb3NpdGlvbi5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBhbiBhcnJheSwgdGhhdCBhcnJheSB3aWxsIGJlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgYXMgdGhlIHdhdmUgc2hhcGluZyBmdW5jdGlvbi4gVGhlIGlucHV0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwgaXMgYW4gQXVkaW9SYW5nZSBbLTEsIDFdIHZhbHVlIGFuZCB0aGUgb3V0cHV0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwgY2FuIHRha2Ugb24gYW55IG51bWVyaWNhbCB2YWx1ZXMuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IFtidWZmZXJMZW49MTAyNF0gVGhlIGxlbmd0aCBvZiB0aGUgV2F2ZVNoYXBlck5vZGUgYnVmZmVyLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB0aW1lc1R3byA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24odmFsKXtcblx0XHQgKiBcdHJldHVybiB2YWwgKiAyO1xuXHRcdCAqIH0sIDIwNDgpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSB3YXZlc2hhcGVyIGNhbiBhbHNvIGJlIGNvbnN0cnVjdGVkIHdpdGggYW4gYXJyYXkgb2YgdmFsdWVzXG5cdFx0ICogdmFyIGludmVydCA9IG5ldyBUb25lLldhdmVTaGFwZXIoWzEsIC0xXSk7XG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVTaGFwZXIgPSBmdW5jdGlvbiAobWFwcGluZywgYnVmZmVyTGVuKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHdhdmVzaGFwZXJcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVXYXZlU2hhcGVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHdhdmVzaGFwZXJzIGN1cnZlXG5cdFx0XHQgKiAgQHR5cGUge0Zsb2F0MzJBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hcHBpbmcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY3VydmUgPSBtYXBwaW5nO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoaXNGaW5pdGUobWFwcGluZykgfHwgVG9uZS5pc1VuZGVmKG1hcHBpbmcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gbmV3IEZsb2F0MzJBcnJheShUb25lLmRlZmF1bHRBcmcobWFwcGluZywgMTAyNCkpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0Z1bmN0aW9uKG1hcHBpbmcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gbmV3IEZsb2F0MzJBcnJheShUb25lLmRlZmF1bHRBcmcoYnVmZmVyTGVuLCAxMDI0KSk7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0TWFwKG1hcHBpbmcpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLldhdmVTaGFwZXIsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVXNlcyBhIG1hcHBpbmcgZnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgY3VydmUuXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb259IG1hcHBpbmcgVGhlIGZ1bmN0aW9uIHVzZWQgdG8gZGVmaW5lIHRoZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1hcHBpbmcgZnVuY3Rpb24gdGFrZSB0d28gYXJndW1lbnRzOlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBpcyB0aGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBnb2VzIGZyb20gLTEgdG8gMSBvdmVyIHRoZSBudW1iZXIgb2YgZWxlbWVudHNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgY3VydmUgYXJyYXkuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGFycmF5IHBvc2l0aW9uLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5XYXZlU2hhcGVyfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9tYXAgdGhlIGlucHV0IHNpZ25hbCBmcm9tIFstMSwgMV0gdG8gWzAsIDEwXVxuXHRcdCAqIHNoYXBlci5zZXRNYXAoZnVuY3Rpb24odmFsLCBpbmRleCl7XG5cdFx0ICogXHRyZXR1cm4gKHZhbCArIDEpICogNTtcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZS5zZXRNYXAgPSBmdW5jdGlvbiAobWFwcGluZykge1xuXHQgICAgICAgIHZhciBhcnJheSA9IG5ldyBBcnJheSh0aGlzLl9jdXJ2ZS5sZW5ndGgpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLl9jdXJ2ZS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgbm9ybWFsaXplZCA9IGkgLyAobGVuIC0gMSkgKiAyIC0gMTtcblx0ICAgICAgICAgICAgYXJyYXlbaV0gPSBtYXBwaW5nKG5vcm1hbGl6ZWQsIGkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmN1cnZlID0gYXJyYXk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGFycmF5IHRvIHNldCBhcyB0aGUgd2F2ZXNoYXBlciBjdXJ2ZS4gRm9yIGxpbmVhciBjdXJ2ZXNcblx0XHQgKiBhcnJheSBsZW5ndGggZG9lcyBub3QgbWFrZSBtdWNoIGRpZmZlcmVuY2UsIGJ1dCBmb3IgY29tcGxleCBjdXJ2ZXNcblx0XHQgKiBsb25nZXIgYXJyYXlzIHdpbGwgcHJvdmlkZSBzbW9vdGhlciBpbnRlcnBvbGF0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLldhdmVTaGFwZXIjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIGN1cnZlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZSwgJ2N1cnZlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLmN1cnZlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWFwcGluZykge1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG5ldyBGbG9hdDMyQXJyYXkobWFwcGluZyk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5jdXJ2ZSA9IHRoaXMuX2N1cnZlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogU3BlY2lmaWVzIHdoYXQgdHlwZSBvZiBvdmVyc2FtcGxpbmcgKGlmIGFueSkgc2hvdWxkIGJlIHVzZWQgd2hlblxuXHRcdCAqIGFwcGx5aW5nIHRoZSBzaGFwaW5nIGN1cnZlLiBDYW4gZWl0aGVyIGJlIFwibm9uZVwiLCBcIjJ4XCIgb3IgXCI0eFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLldhdmVTaGFwZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSBvdmVyc2FtcGxlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZSwgJ292ZXJzYW1wbGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG92ZXJzYW1wbGluZykge1xuXHQgICAgICAgICAgICBpZiAoW1xuXHQgICAgICAgICAgICAgICAgICAgICdub25lJyxcblx0ICAgICAgICAgICAgICAgICAgICAnMngnLFxuXHQgICAgICAgICAgICAgICAgICAgICc0eCdcblx0ICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMob3ZlcnNhbXBsaW5nKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGUgPSBvdmVyc2FtcGxpbmc7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVG9uZS5XYXZlU2hhcGVyOiBvdmVyc2FtcGxpbmcgbXVzdCBiZSBlaXRoZXIgXFwnbm9uZVxcJywgXFwnMnhcXCcsIG9yIFxcJzR4XFwnJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuV2F2ZVNoYXBlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuV2F2ZVNoYXBlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRpbWVCYXNlIGlzIGEgZmxleGlibGUgZW5jb2Rpbmcgb2YgdGltZVxuXHRcdCAqICAgICAgICAgd2hpY2ggY2FuIGJlIGV2YWx1YXRlZCB0byBhbmQgZnJvbSBhIHN0cmluZy5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUgYXMgYSBudW1iZXIgb3Igc3RyaW5nXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVW5pdCB2YWx1ZXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRpbWVCYXNlKDQsIFwiblwiKVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoMiwgXCJ0XCIpXG5cdFx0ICogVG9uZS5UaW1lQmFzZShcIjJ0XCIpXG5cdFx0ICogVG9uZS5UaW1lQmFzZShcIjJ0XCIpICsgVG9uZS5UaW1lQmFzZShcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgLy9hbGxvd3MgaXQgdG8gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0ICduZXcnXG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHZhbHVlXG5cdFx0XHRcdCAqICBAdHlwZSAge051bWJlcnxTdHJpbmd8VG9uZS5UaW1lQmFzZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWw7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgdW5pdHNcblx0XHRcdFx0ICogQHR5cGUge1N0cmluZz99XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl91bml0cyA9IHVuaXRzO1xuXHQgICAgICAgICAgICAvL3Rlc3QgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbnVtYmVyXG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpcy5fdW5pdHMpICYmIFRvbmUuaXNTdHJpbmcodGhpcy5fdmFsKSAmJiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdCAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMuX3ZhbCkgPT0gdGhpcy5fdmFsICYmIHRoaXMuX3ZhbC5jaGFyQXQoMCkgIT09ICcrJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gcGFyc2VGbG9hdCh0aGlzLl92YWwpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB0aGlzLl9kZWZhdWx0VW5pdHM7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsICYmIHZhbC5jb25zdHJ1Y3RvciA9PT0gdGhpcy5jb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAgICAgLy9pZiB0aGV5J3JlIHRoZSBzYW1lIHR5cGUsIGp1c3QgY29weSB2YWx1ZXMgb3ZlclxuXHQgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLl92YWw7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl91bml0cyA9IHZhbC5fdW5pdHM7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9kZWZhdWx0VW5pdHMpIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b1NlY29uZHMoKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2knOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b1RpY2tzKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdoeic6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdtaWRpJzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9NaWRpKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIGRlZmF1bHQgdW5pdHMgJyArIHRoaXMuX2RlZmF1bHRVbml0cyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZUJhc2UodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZUJhc2UpO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QUJTVFJBQ1QgU1lOVEFYIFRSRUUgUEFSU0VSXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBBbGwgdGhlIHByaW1hcnkgZXhwcmVzc2lvbnMuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zID0ge1xuXHQgICAgICAgICduJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspbihcXC4/KSQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUsIGRvdCkge1xuXHQgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2NhbGFyID0gZG90ID09PSAnLicgPyAxLjUgOiAxO1xuXHQgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyh0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkpICogc2NhbGFyO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmVhdHNUb1VuaXRzKDQgLyB2YWx1ZSkgKiBzY2FsYXI7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICd0Jzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspdCQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyg4IC8gKHBhcnNlSW50KHZhbHVlKSAqIDMpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ20nOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyltJC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUludCh2YWx1ZSkgKiB0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnaSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKWkkL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja3NUb1VuaXRzKHBhcnNlSW50KHZhbHVlKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdoeic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KWh6JC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyZXF1ZW5jeVRvVW5pdHMocGFyc2VGbG9hdCh2YWx1ZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndHInOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPyk6KFxcZCsoPzpcXC5cXGQrKT8pOj8oXFxkKyg/OlxcLlxcZCspPyk/JC8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKG0sIHEsIHMpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IDA7XG5cdCAgICAgICAgICAgICAgICBpZiAobSAmJiBtICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLl9iZWF0c1RvVW5pdHModGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpICogcGFyc2VGbG9hdChtKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAocSAmJiBxICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VGbG9hdChxKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAocyAmJiBzICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VGbG9hdChzKSAvIDQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAncyc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KXMkLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWNvbmRzVG9Vbml0cyhwYXJzZUZsb2F0KHZhbHVlKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdzYW1wbGVzJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspc2FtcGxlcyQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKSAvIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnZGVmYXVsdCc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KSQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cHJlc3Npb25zW3RoaXMuX2RlZmF1bHRVbml0c10ubWV0aG9kLmNhbGwodGhpcywgdmFsdWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB1bml0cyBpZiBub25lIGFyZSBnaXZlbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAncyc7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUUkFOU1BPUlQgRkFMTEJBQ0tTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgYnBtLCBvciAxMjAgaWYgVHJhbnNwb3J0IGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZ2V0QnBtID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxMjA7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgdGltZVNpZ25hdHVyZSBvciA0IGlmIFRyYW5zcG9ydCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2dldFRpbWVTaWduYXR1cmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC50aW1lU2lnbmF0dXJlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiA0O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIFBQUSBvciAxOTIgaWYgVHJhbnNwb3J0IGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZ2V0UFBRID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQuUFBRO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxOTI7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgY3VycmVudCB0aW1lIGluIHdoaWNoZXZlciBjb250ZXh0IGlzIHJlbGV2YW50XG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX25vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5ub3coKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRVTklUIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIGZyZXF1ZW5jeSBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiAxIC8gZnJlcTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIDYwIC8gdGhpcy5fZ2V0QnBtKCkgKiBiZWF0cztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzZWNvbmQgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtTZWNvbmRzfSBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiBzZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiB0aWNrcyAqICh0aGlzLl9iZWF0c1RvVW5pdHMoMSkgLyB0aGlzLl9nZXRQUFEoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiAnbm93J1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX25vQXJnID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9ub3coKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRFWFBSRVNTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgRXZhbHVhdGUgdGhlIHRpbWUgdmFsdWUuIFJldHVybnMgdGhlIHRpbWVcblx0XHQgKiAgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpcy5fdmFsKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9BcmcoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcodGhpcy5fdmFsKSAmJiBUb25lLmlzVW5kZWYodGhpcy5fdW5pdHMpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIHVuaXRzIGluIHRoaXMuX2V4cHJlc3Npb25zKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbnNbdW5pdHNdLnJlZ2V4cC50ZXN0KHRoaXMuX3ZhbC50cmltKCkpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB1bml0cztcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodGhpcy5fdW5pdHMpKSB7XG5cdCAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5fZXhwcmVzc2lvbnNbdGhpcy5fdW5pdHNdO1xuXHQgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSB0aGlzLl92YWwudG9TdHJpbmcoKS50cmltKCkubWF0Y2goZXhwci5yZWdleHApO1xuXHQgICAgICAgICAgICBpZiAobWF0Y2hpbmcpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBleHByLm1ldGhvZC5hcHBseSh0aGlzLCBtYXRjaGluZy5zbGljZSgxKSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXhwci5tZXRob2QuY2FsbCh0aGlzLCBwYXJzZUZsb2F0KHRoaXMuX3ZhbCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBpbiBoZXJ0elxuXHRcdCAqICBAcmV0dXJuIHtGcmVxdWVuY3l9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIHRoaXMudG9TZWNvbmRzKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiBzYW1wbGVzXG5cdFx0ICogIEByZXR1cm4gIHtTYW1wbGVzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9TYW1wbGVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcygpICogdGhpcy5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiBtaWxsaXNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtNaWxsaXNlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b01pbGxpc2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHMoKSAqIDEwMDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuVGltZUJhc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fdmFsID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl91bml0cyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZUJhc2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GcmVxdWVuY3kgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgRnJlcXVlbmN5IHZhbHVlcy5cblx0XHQgKiAgICAgICAgIEV2ZW50dWFsbHkgYWxsIHRpbWUgdmFsdWVzIGFyZSBldmFsdWF0ZWQgdG8gaGVydHpcblx0XHQgKiAgICAgICAgIHVzaW5nIHRoZSBgZXZhbGAgbWV0aG9kLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZUJhc2V9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkMzXCIpIC8vIDI2MVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KDM4LCBcIm1pZGlcIikgLy9cblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkMzXCIpLnRyYW5zcG9zZSg0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5ID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuRnJlcXVlbmN5KSB7XG5cdCAgICAgICAgICAgIFRvbmUuVGltZUJhc2UuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuRnJlcXVlbmN5KHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZyZXF1ZW5jeSwgVG9uZS5UaW1lQmFzZSk7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBVUdNRU5UIEJBU0UgRVhQUkVTU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9leHByZXNzaW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9leHByZXNzaW9ucywge1xuXHQgICAgICAgICdtaWRpJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT9taWRpKS8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVsdFVuaXRzID09PSAnbWlkaScpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5tdG9mKHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ25vdGUnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oW2EtZ117MX0oPzpifCN8eHxiYik/KSgtP1swLTldKykvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAocGl0Y2gsIG9jdGF2ZSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gbm90ZVRvU2NhbGVJbmRleFtwaXRjaC50b0xvd2VyQ2FzZSgpXTtcblx0ICAgICAgICAgICAgICAgIHZhciBub3RlTnVtYmVyID0gaW5kZXggKyAocGFyc2VJbnQob2N0YXZlKSArIDEpICogMTI7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVsdFVuaXRzID09PSAnbWlkaScpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm90ZU51bWJlcjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5Lm10b2Yobm90ZU51bWJlcik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICd0cic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KTooXFxkKyg/OlxcLlxcZCspPyk6PyhcXGQrKD86XFwuXFxkKyk/KT8vLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChtLCBxLCBzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAxO1xuXHQgICAgICAgICAgICAgICAgaWYgKG0gJiYgbSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKj0gdGhpcy5fYmVhdHNUb1VuaXRzKHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSAqIHBhcnNlRmxvYXQobSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHEgJiYgcSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKj0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHMgJiYgcyAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKj0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocykgLyA0KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RVhQUkVTU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFRyYW5zcG9zZXMgdGhlIGZyZXF1ZW5jeSBieSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlbWl0b25lcy5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWx9ICBpbnRlcnZhbFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5GcmVxdWVuY3l9IEEgbmV3IHRyYW5zcG9zZWQgZnJlcXVlbmN5XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJBNFwiKS50cmFuc3Bvc2UoMyk7IC8vXCJDNVwiXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudHJhbnNwb3NlID0gZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMudmFsdWVPZigpICogVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oaW50ZXJ2YWwpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGFrZXMgYW4gYXJyYXkgb2Ygc2VtaXRvbmUgaW50ZXJ2YWxzIGFuZCByZXR1cm5zXG5cdFx0ICogIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzIHRyYW5zcG9zZWQgYnkgdGhvc2UgaW50ZXJ2YWxzLlxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIGludGVydmFsc1xuXHRcdCAqICBAcmV0dXJuICB7QXJyYXk8VG9uZS5GcmVxdWVuY3k+fSBSZXR1cm5zIGFuIGFycmF5IG9mIEZyZXF1ZW5jaWVzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJBNFwiKS5oYXJtb25pemUoWzAsIDMsIDddKTsgLy9bXCJBNFwiLCBcIkM1XCIsIFwiRTVcIl1cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5oYXJtb25pemUgPSBmdW5jdGlvbiAoaW50ZXJ2YWxzKSB7XG5cdCAgICAgICAgcmV0dXJuIGludGVydmFscy5tYXAoZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9zZShpbnRlcnZhbCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRVTklUIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgYXMgYSBNSURJIG5vdGVcblx0XHQgKiAgQHJldHVybiAge01JREl9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJDNFwiKS50b01pZGkoKTsgLy82MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvTWlkaSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbSh0aGlzLnZhbHVlT2YoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBpbiBTY2llbnRpZmljIFBpdGNoIE5vdGF0aW9uXG5cdFx0ICogIEByZXR1cm4gIHtOb3RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KDY5LCBcIm1pZGlcIikudG9Ob3RlKCk7IC8vXCJBNFwiXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9Ob3RlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBmcmVxID0gdGhpcy50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHZhciBsb2cgPSBNYXRoLmxvZzIoZnJlcSAvIFRvbmUuRnJlcXVlbmN5LkE0KTtcblx0ICAgICAgICB2YXIgbm90ZU51bWJlciA9IE1hdGgucm91bmQoMTIgKiBsb2cpICsgNTc7XG5cdCAgICAgICAgdmFyIG9jdGF2ZSA9IE1hdGguZmxvb3Iobm90ZU51bWJlciAvIDEyKTtcblx0ICAgICAgICBpZiAob2N0YXZlIDwgMCkge1xuXHQgICAgICAgICAgICBub3RlTnVtYmVyICs9IC0xMiAqIG9jdGF2ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIG5vdGVOYW1lID0gc2NhbGVJbmRleFRvTm90ZVtub3RlTnVtYmVyICUgMTJdO1xuXHQgICAgICAgIHJldHVybiBub3RlTmFtZSArIG9jdGF2ZS50b1N0cmluZygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGR1cmF0aW9uIG9mIG9uZSBjeWNsZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b1NlY29uZHMuY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBpbiBIZXJ0elxuXHRcdCAqICBAcmV0dXJuICB7RnJlcXVlbmN5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b0ZyZXF1ZW5jeS5jYWxsKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGR1cmF0aW9uIG9mIG9uZSBjeWNsZSBpbiB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcXVhcnRlclRpbWUgPSB0aGlzLl9iZWF0c1RvVW5pdHMoMSk7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJzID0gdGhpcy52YWx1ZU9mKCkgLyBxdWFydGVyVGltZTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihxdWFydGVycyAqIFRvbmUuVHJhbnNwb3J0LlBQUSk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VU5JVCBDT05WRVJTSU9OUyBIRUxQRVJTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBXaXRoIG5vIGFyZ3VtZW50cywgcmV0dXJuIDBcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fbm9BcmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgZnJlcXVlbmN5IGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiBmcmVxO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gMSAvICh0aWNrcyAqIDYwIC8gKFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZSAqIFRvbmUuVHJhbnNwb3J0LlBQUSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBiZWF0cyBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gYmVhdHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzLmNhbGwodGhpcywgYmVhdHMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiAxIC8gc2Vjb25kcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2RlZmF1bHRVbml0cyA9ICdoeic7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRGUkVRVUVOQ1kgQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIE5vdGUgdG8gc2NhbGUgaW5kZXhcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICB2YXIgbm90ZVRvU2NhbGVJbmRleCA9IHtcblx0ICAgICAgICAnY2JiJzogLTIsXG5cdCAgICAgICAgJ2NiJzogLTEsXG5cdCAgICAgICAgJ2MnOiAwLFxuXHQgICAgICAgICdjIyc6IDEsXG5cdCAgICAgICAgJ2N4JzogMixcblx0ICAgICAgICAnZGJiJzogMCxcblx0ICAgICAgICAnZGInOiAxLFxuXHQgICAgICAgICdkJzogMixcblx0ICAgICAgICAnZCMnOiAzLFxuXHQgICAgICAgICdkeCc6IDQsXG5cdCAgICAgICAgJ2ViYic6IDIsXG5cdCAgICAgICAgJ2ViJzogMyxcblx0ICAgICAgICAnZSc6IDQsXG5cdCAgICAgICAgJ2UjJzogNSxcblx0ICAgICAgICAnZXgnOiA2LFxuXHQgICAgICAgICdmYmInOiAzLFxuXHQgICAgICAgICdmYic6IDQsXG5cdCAgICAgICAgJ2YnOiA1LFxuXHQgICAgICAgICdmIyc6IDYsXG5cdCAgICAgICAgJ2Z4JzogNyxcblx0ICAgICAgICAnZ2JiJzogNSxcblx0ICAgICAgICAnZ2InOiA2LFxuXHQgICAgICAgICdnJzogNyxcblx0ICAgICAgICAnZyMnOiA4LFxuXHQgICAgICAgICdneCc6IDksXG5cdCAgICAgICAgJ2FiYic6IDcsXG5cdCAgICAgICAgJ2FiJzogOCxcblx0ICAgICAgICAnYSc6IDksXG5cdCAgICAgICAgJ2EjJzogMTAsXG5cdCAgICAgICAgJ2F4JzogMTEsXG5cdCAgICAgICAgJ2JiYic6IDksXG5cdCAgICAgICAgJ2JiJzogMTAsXG5cdCAgICAgICAgJ2InOiAxMSxcblx0ICAgICAgICAnYiMnOiAxMixcblx0ICAgICAgICAnYngnOiAxM1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzY2FsZSBpbmRleCB0byBub3RlIChzaGFycHMpXG5cdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgc2NhbGVJbmRleFRvTm90ZSA9IFtcblx0ICAgICAgICAnQycsXG5cdCAgICAgICAgJ0MjJyxcblx0ICAgICAgICAnRCcsXG5cdCAgICAgICAgJ0QjJyxcblx0ICAgICAgICAnRScsXG5cdCAgICAgICAgJ0YnLFxuXHQgICAgICAgICdGIycsXG5cdCAgICAgICAgJ0cnLFxuXHQgICAgICAgICdHIycsXG5cdCAgICAgICAgJ0EnLFxuXHQgICAgICAgICdBIycsXG5cdCAgICAgICAgJ0InXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBbY29uY2VydCBwaXRjaF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29uY2VydF9waXRjaClcblx0XHQgKiAgQTQncyB2YWx1ZXMgaW4gSGVydHouXG5cdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LkE0ID0gNDQwO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBNSURJIG5vdGUgdG8gZnJlcXVlbmN5IHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtNSURJfSBtaWRpIFRoZSBtaWRpIG51bWJlciB0byBjb252ZXJ0LlxuXHRcdCAqICBAcmV0dXJuIHtGcmVxdWVuY3l9IHRoZSBjb3JyZXNwb25kaW5nIGZyZXF1ZW5jeSB2YWx1ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3kubXRvZig2OSk7IC8vIHJldHVybnMgNDQwXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5tdG9mID0gZnVuY3Rpb24gKG1pZGkpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuQTQgKiBNYXRoLnBvdygyLCAobWlkaSAtIDY5KSAvIDEyKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIGZyZXF1ZW5jeSB2YWx1ZSB0byBhIE1JREkgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgdmFsdWUgdG8gZnJlcXVlbmN5IHZhbHVlIHRvIGNvbnZlcnQuXG5cdFx0ICogIEByZXR1cm5zICB7TUlESX1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5LmZ0b20oNDQwKTsgLy8gcmV0dXJucyA2OVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kuZnRvbSA9IGZ1bmN0aW9uIChmcmVxdWVuY3kpIHtcblx0ICAgICAgICByZXR1cm4gNjkgKyBNYXRoLnJvdW5kKDEyICogTWF0aC5sb2cyKGZyZXF1ZW5jeSAvIFRvbmUuRnJlcXVlbmN5LkE0KSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVGltZSBpcyBhIHByaW1pdGl2ZSB0eXBlIGZvciBlbmNvZGluZyBUaW1lIHZhbHVlcy5cblx0XHQgKiAgICAgICAgIFRvbmUuVGltZSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0IHRoZSBgbmV3YCBrZXl3b3JkLiBUb25lLlRpbWUgY2FuIGJlIHBhc3NlZFxuXHRcdCAqICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIG9mIGFueSBtZXRob2Qgd2hpY2ggdGFrZXMgdGltZSBhcyBhbiBhcmd1bWVudC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWVCYXNlfVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHQgPSBUb25lLlRpbWUoXCI0blwiKTsvL2EgcXVhcnRlciBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UaW1lKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVGltZUJhc2UuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaW1lLCBUb25lLlRpbWVCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIEV4dGVuZCB0aGUgYmFzZSBleHByZXNzaW9uc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMsIHtcblx0ICAgICAgICAncXVhbnRpemUnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL15AKC4rKS8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKGNhcHR1cmUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBxdWFudFRvID0gbmV3IHRoaXMuY29uc3RydWN0b3IoY2FwdHVyZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0Lm5leHRTdWJkaXZpc2lvbihxdWFudFRvKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdub3cnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL15cXCsoLispLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAoY2FwdHVyZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdygpICsgbmV3IHRoaXMuY29uc3RydWN0b3IoY2FwdHVyZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBRdWFudGl6ZSB0aGUgdGltZSBieSB0aGUgZ2l2ZW4gc3ViZGl2aXNpb24uIE9wdGlvbmFsbHkgYWRkIGFcblx0XHQgKiAgcGVyY2VudGFnZSB3aGljaCB3aWxsIG1vdmUgdGhlIHRpbWUgdmFsdWUgdG93YXJkcyB0aGUgaWRlYWxcblx0XHQgKiAgcXVhbnRpemVkIHZhbHVlIGJ5IHRoYXQgcGVyY2VudGFnZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfFRpbWV9ICB2YWwgICAgVGhlIHN1YmRpdmlzaW9uIHRvIHF1YW50aXplIHRvXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSAgW3BlcmNlbnQ9MV0gIE1vdmUgdGhlIHRpbWUgdmFsdWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG93YXJkcyB0aGUgcXVhbnRpemVkIHZhbHVlIGJ5XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcGVyY2VudGFnZS5cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRpbWUoMjEpLnF1YW50aXplKDIpIC8vcmV0dXJucyAyMlxuXHRcdCAqIFRvbmUuVGltZSgwLjYpLnF1YW50aXplKFwiNG5cIiwgMC41KSAvL3JldHVybnMgMC41NVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS5xdWFudGl6ZSA9IGZ1bmN0aW9uIChzdWJkaXYsIHBlcmNlbnQpIHtcblx0ICAgICAgICBwZXJjZW50ID0gVG9uZS5kZWZhdWx0QXJnKHBlcmNlbnQsIDEpO1xuXHQgICAgICAgIHZhciBzdWJkaXZpc2lvbiA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHN1YmRpdik7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICAgICAgdmFyIG11bHRpcGxlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHN1YmRpdmlzaW9uKTtcblx0ICAgICAgICB2YXIgaWRlYWwgPSBtdWx0aXBsZSAqIHN1YmRpdmlzaW9uO1xuXHQgICAgICAgIHZhciBkaWZmID0gaWRlYWwgLSB2YWx1ZTtcblx0ICAgICAgICByZXR1cm4gdmFsdWUgKyBkaWZmICogcGVyY2VudDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgVGltZSB0byBOb3RhdGlvbi4gVGhlIG5vdGF0aW9uIHZhbHVlcyBhcmUgd2lsbCBiZSB0aGVcblx0XHQgKiAgY2xvc2VzdCByZXByZXNlbnRhdGlvbiBiZXR3ZWVuIDFtIHRvIDEyOHRoIG5vdGUuXG5cdFx0ICogIEByZXR1cm4ge05vdGF0aW9ufVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaWYgdGhlIFRyYW5zcG9ydCBpcyBhdCAxMjBicG06XG5cdFx0ICogVG9uZS5UaW1lKDIpLnRvTm90YXRpb24oKTsvL3JldHVybnMgXCIxbVwiXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvTm90YXRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHRpbWUgPSB0aGlzLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIHZhciB0ZXN0Tm90YXRpb25zID0gWycxbSddO1xuXHQgICAgICAgIGZvciAodmFyIHBvd2VyID0gMTsgcG93ZXIgPCA4OyBwb3dlcisrKSB7XG5cdCAgICAgICAgICAgIHZhciBzdWJkaXYgPSBNYXRoLnBvdygyLCBwb3dlcik7XG5cdCAgICAgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaChzdWJkaXYgKyAnbi4nKTtcblx0ICAgICAgICAgICAgdGVzdE5vdGF0aW9ucy5wdXNoKHN1YmRpdiArICduJyk7XG5cdCAgICAgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaChzdWJkaXYgKyAndCcpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goJzAnKTtcblx0ICAgICAgICAvL2ZpbmQgdGhlIGNsb3NldHMgbm90YXRpb24gcmVwcmVzZW50YXRpb25cblx0ICAgICAgICB2YXIgY2xvc2VzdCA9IHRlc3ROb3RhdGlvbnNbMF07XG5cdCAgICAgICAgdmFyIGNsb3Nlc3RTZWNvbmRzID0gVG9uZS5UaW1lKHRlc3ROb3RhdGlvbnNbMF0pLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIHRlc3ROb3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobm90YXRpb24pIHtcblx0ICAgICAgICAgICAgdmFyIG5vdGF0aW9uU2Vjb25kcyA9IFRvbmUuVGltZShub3RhdGlvbikudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyhub3RhdGlvblNlY29uZHMgLSB0aW1lKSA8IE1hdGguYWJzKGNsb3Nlc3RTZWNvbmRzIC0gdGltZSkpIHtcblx0ICAgICAgICAgICAgICAgIGNsb3Nlc3QgPSBub3RhdGlvbjtcblx0ICAgICAgICAgICAgICAgIGNsb3Nlc3RTZWNvbmRzID0gbm90YXRpb25TZWNvbmRzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIGNsb3Nlc3Q7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBlbmNvZGVkIGFzIEJhcnM6QmVhdHM6U2l4dGVlbnRocy5cblx0XHQgKiAgQHJldHVybiAge0JhcnNCZWF0c1NpeHRlZW50aHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvQmFyc0JlYXRzU2l4dGVlbnRocyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcXVhcnRlclRpbWUgPSB0aGlzLl9iZWF0c1RvVW5pdHMoMSk7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJzID0gdGhpcy52YWx1ZU9mKCkgLyBxdWFydGVyVGltZTtcblx0ICAgICAgICB2YXIgbWVhc3VyZXMgPSBNYXRoLmZsb29yKHF1YXJ0ZXJzIC8gdGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpKTtcblx0ICAgICAgICB2YXIgc2l4dGVlbnRocyA9IHF1YXJ0ZXJzICUgMSAqIDQ7XG5cdCAgICAgICAgcXVhcnRlcnMgPSBNYXRoLmZsb29yKHF1YXJ0ZXJzKSAlIHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKTtcblx0ICAgICAgICBzaXh0ZWVudGhzID0gc2l4dGVlbnRocy50b1N0cmluZygpO1xuXHQgICAgICAgIGlmIChzaXh0ZWVudGhzLmxlbmd0aCA+IDMpIHtcblx0ICAgICAgICAgICAgLy8gdGhlIGFkZGl0aW9uYWwgcGFyc2VGbG9hdCByZW1vdmVzIGluc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb2VzXG5cdCAgICAgICAgICAgIHNpeHRlZW50aHMgPSBwYXJzZUZsb2F0KHBhcnNlRmxvYXQoc2l4dGVlbnRocykudG9GaXhlZCgzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBwcm9ncmVzcyA9IFtcblx0ICAgICAgICAgICAgbWVhc3VyZXMsXG5cdCAgICAgICAgICAgIHF1YXJ0ZXJzLFxuXHQgICAgICAgICAgICBzaXh0ZWVudGhzXG5cdCAgICAgICAgXTtcblx0ICAgICAgICByZXR1cm4gcHJvZ3Jlc3Muam9pbignOicpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gdGlja3MuXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcXVhcnRlclRpbWUgPSB0aGlzLl9iZWF0c1RvVW5pdHMoMSk7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJzID0gdGhpcy52YWx1ZU9mKCkgLyBxdWFydGVyVGltZTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChxdWFydGVycyAqIHRoaXMuX2dldFBQUSgpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIGFzIGEgbWlkaSBub3RlLlxuXHRcdCAqICBAcmV0dXJuICB7TWlkaX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9NaWRpID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKHRoaXMudG9GcmVxdWVuY3koKSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyYW5zcG9ydFRpbWUgaXMgYSB0aGUgdGltZSBhbG9uZyB0aGUgVHJhbnNwb3J0J3Ncblx0XHQgKiAgICAgICAgIHRpbWVsaW5lLiBJdCBpcyBzaW1pbGFyIHRvIFRvbmUuVGltZSwgYnV0IGluc3RlYWQgb2YgZXZhbHVhdGluZ1xuXHRcdCAqICAgICAgICAgYWdhaW5zdCB0aGUgQXVkaW9Db250ZXh0J3MgY2xvY2ssIGl0IGlzIGV2YWx1YXRlZCBhZ2FpbnN0XG5cdFx0ICogICAgICAgICB0aGUgVHJhbnNwb3J0J3MgcG9zaXRpb24uIFNlZSBbVHJhbnNwb3J0VGltZSB3aWtpXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9UcmFuc3BvcnRUaW1lKS5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUgYXMgYSBudW1iZXIgb3Igc3RyaW5nXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVW5pdCB2YWx1ZXNcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRyYW5zcG9ydFRpbWUpIHtcblx0ICAgICAgICAgICAgVG9uZS5UaW1lLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRyYW5zcG9ydFRpbWUodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0VGltZSwgVG9uZS5UaW1lKTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgY3VycmVudCB0aW1lIGluIHdoaWNoZXZlciBjb250ZXh0IGlzIHJlbGV2YW50XG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lLnByb3RvdHlwZS5fbm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC5zZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydFRpbWU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRZUEVTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqIFVuaXRzIHdoaWNoIGEgdmFsdWUgY2FuIHRha2Ugb24uXG5cdFx0ICogQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuVHlwZSA9IHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBEZWZhdWx0IHVuaXRzXG5cdFx0XHQgKiAgQHR5cGVkZWYge0RlZmF1bHR9XG5cdFx0XHQgKi9cblx0ICAgICAgICBEZWZhdWx0OiAnbnVtYmVyJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaW1lIGNhbiBiZSBkZXNjcmliZWQgaW4gYSBudW1iZXIgb2Ygd2F5cy4gUmVhZCBtb3JlIFtUaW1lXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9UaW1lKS5cblx0XHRcdCAqXG5cdFx0XHQgKiAgKiBOdW1iZXJzLCB3aGljaCB3aWxsIGJlIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgdGltZSAoaW4gc2Vjb25kcykuXG5cdFx0XHQgKiAgKiBOb3RhdGlvbiwgKFwiNG5cIiwgXCI4dFwiKSBkZXNjcmliZXMgdGltZSBpbiBCUE0gYW5kIHRpbWUgc2lnbmF0dXJlIHJlbGF0aXZlIHZhbHVlcy5cblx0XHRcdCAqICAqIFRyYW5zcG9ydFRpbWUsIChcIjQ6MzoyXCIpIHdpbGwgYWxzbyBwcm92aWRlIHRlbXBvIGFuZCB0aW1lIHNpZ25hdHVyZSByZWxhdGl2ZSB0aW1lc1xuXHRcdFx0ICogIGluIHRoZSBmb3JtIEJBUlM6UVVBUlRFUlM6U0lYVEVFTlRIUy5cblx0XHRcdCAqICAqIEZyZXF1ZW5jeSwgKFwiOGh6XCIpIGlzIGNvbnZlcnRlZCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjeWNsZSBpbiBzZWNvbmRzLlxuXHRcdFx0ICogICogTm93LVJlbGF0aXZlLCAoXCIrMVwiKSBwcmVmaXggYW55IG9mIHRoZSBhYm92ZSB3aXRoIFwiK1wiIGFuZCBpdCB3aWxsIGJlIGludGVycHJldGVkIGFzXG5cdFx0XHQgKiAgXCJ0aGUgY3VycmVudCB0aW1lIHBsdXMgd2hhdGV2ZXIgZXhwcmVzc2lvbiBmb2xsb3dzXCIuXG5cdFx0XHQgKiAgKiBFeHByZXNzaW9ucywgKFwiMzowICsgMiAtICgxbSAvIDcpXCIpIGFueSBvZiB0aGUgYWJvdmUgY2FuIGFsc28gYmUgY29tYmluZWRcblx0XHRcdCAqICBpbnRvIGEgbWF0aGVtYXRpY2FsIGV4cHJlc3Npb24gd2hpY2ggd2lsbCBiZSBldmFsdWF0ZWQgdG8gY29tcHV0ZSB0aGUgZGVzaXJlZCB0aW1lLlxuXHRcdFx0ICogICogTm8gQXJndW1lbnQsIGZvciBtZXRob2RzIHdoaWNoIGFjY2VwdCB0aW1lLCBubyBhcmd1bWVudCB3aWxsIGJlIGludGVycHJldGVkIGFzXG5cdFx0XHQgKiAgXCJub3dcIiAoaS5lLiB0aGUgY3VycmVudFRpbWUpLlxuXHRcdFx0ICpcblx0XHRcdCAqICBAdHlwZWRlZiB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIFRpbWU6ICd0aW1lJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBGcmVxdWVuY3kgY2FuIGJlIGRlc2NyaWJlZCBzaW1pbGFyIHRvIHRpbWUsIGV4Y2VwdCB1bHRpbWF0ZWx5IHRoZVxuXHRcdFx0ICogIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIGZyZXF1ZW5jeSBpbnN0ZWFkIG9mIHNlY29uZHMuIEEgbnVtYmVyXG5cdFx0XHQgKiAgaXMgdGFrZW4gbGl0ZXJhbGx5IGFzIHRoZSB2YWx1ZSBpbiBoZXJ0ei4gQWRkaXRpb25hbGx5IGFueSBvZiB0aGVcblx0XHRcdCAqICBUaW1lIGVuY29kaW5ncyBjYW4gYmUgdXNlZC4gTm90ZSBuYW1lcyBpbiB0aGUgZm9ybVxuXHRcdFx0ICogIG9mIE5PVEUgT0NUQVZFIChpLmUuIEM0KSBhcmUgYWxzbyBhY2NlcHRlZCBhbmQgY29udmVydGVkIHRvIHRoZWlyXG5cdFx0XHQgKiAgZnJlcXVlbmN5IHZhbHVlLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtGcmVxdWVuY3l9XG5cdFx0XHQgKi9cblx0ICAgICAgICBGcmVxdWVuY3k6ICdmcmVxdWVuY3knLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRyYW5zcG9ydFRpbWUgZGVzY3JpYmVzIGEgcG9zaXRpb24gYWxvbmcgdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lLiBJdCBpc1xuXHRcdFx0ICogIHNpbWlsYXIgdG8gVGltZSBpbiB0aGF0IGl0IHVzZXMgYWxsIHRoZSBzYW1lIGVuY29kaW5ncywgYnV0IFRyYW5zcG9ydFRpbWUgc3BlY2lmaWNhbGx5XG5cdFx0XHQgKiAgcGVydGFpbnMgdG8gdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lLCB3aGljaCBpcyBzdGFydGFibGUsIHN0b3BwYWJsZSwgbG9vcGFibGUsIGFuZCBzZWVrYWJsZS5cblx0XHRcdCAqICBbUmVhZCBtb3JlXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9UcmFuc3BvcnRUaW1lKVxuXHRcdFx0ICogIEB0eXBlZGVmIHtUcmFuc3BvcnRUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgVHJhbnNwb3J0VGltZTogJ3RyYW5zcG9ydFRpbWUnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRpY2tzIGFyZSB0aGUgYmFzaWMgc3VidW5pdCBvZiB0aGUgVHJhbnNwb3J0LiBUaGV5IGFyZVxuXHRcdFx0ICogIHRoZSBzbWFsbGVzdCB1bml0IG9mIHRpbWUgdGhhdCB0aGUgVHJhbnNwb3J0IHN1cHBvcnRzLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtUaWNrc31cblx0XHRcdCAqL1xuXHQgICAgICAgIFRpY2tzOiAndGlja3MnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE5vcm1hbCB2YWx1ZXMgYXJlIHdpdGhpbiB0aGUgcmFuZ2UgWzAsIDFdLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIE5vcm1hbFJhbmdlOiAnbm9ybWFsUmFuZ2UnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEF1ZGlvUmFuZ2UgdmFsdWVzIGFyZSBiZXR3ZWVuIFstMSwgMV0uXG5cdFx0XHQgKiAgQHR5cGVkZWYge0F1ZGlvUmFuZ2V9XG5cdFx0XHQgKi9cblx0ICAgICAgICBBdWRpb1JhbmdlOiAnYXVkaW9SYW5nZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRGVjaWJlbHMgYXJlIGEgbG9nYXJpdGhtaWMgdW5pdCBvZiBtZWFzdXJlbWVudCB3aGljaCBpcyB1c2VmdWwgZm9yIHZvbHVtZVxuXHRcdFx0ICogIGJlY2F1c2Ugb2YgdGhlIGxvZ2FyaXRobWljIHdheSB0aGF0IHdlIHBlcmNlaXZlIGxvdWRuZXNzLiAwIGRlY2liZWxzXG5cdFx0XHQgKiAgbWVhbnMgbm8gY2hhbmdlIGluIHZvbHVtZS4gLTEwZGIgaXMgYXBwcm94aW1hdGVseSBoYWxmIGFzIGxvdWQgYW5kIDEwZGJcblx0XHRcdCAqICBpcyB0d2ljZSBpcyBsb3VkLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtEZWNpYmVsc31cblx0XHRcdCAqL1xuXHQgICAgICAgIERlY2liZWxzOiAnZGInLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhbGYtc3RlcCBub3RlIGluY3JlbWVudHMsIGkuZS4gMTIgaXMgYW4gb2N0YXZlIGFib3ZlIHRoZSByb290LiBhbmQgMSBpcyBhIGhhbGYtc3RlcCB1cC5cblx0XHRcdCAqICBAdHlwZWRlZiB7SW50ZXJ2YWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICBJbnRlcnZhbDogJ2ludGVydmFsJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBCZWF0cyBwZXIgbWludXRlLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtCUE19XG5cdFx0XHQgKi9cblx0ICAgICAgICBCUE06ICdicG0nLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIFBvc2l0aXZlOiAncG9zaXRpdmUnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEdhaW4gaXMgdGhlIHJhdGlvIGJldHdlZW4gaW5wdXQgYW5kIG91dHB1dCBvZiBhIHNpZ25hbC5cblx0XHRcdCAqICBBIGdhaW4gb2YgMCBpcyB0aGUgc2FtZSBhcyBzaWxlbmNpbmcgdGhlIHNpZ25hbC4gQSBnYWluIG9mXG5cdFx0XHQgKiAgMSwgY2F1c2VzIG5vIGNoYW5nZSB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtHYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgR2FpbjogJ2dhaW4nLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgY2VudCBpcyBhIGh1bmRyZWR0aCBvZiBhIHNlbWl0b25lLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtDZW50c31cblx0XHRcdCAqL1xuXHQgICAgICAgIENlbnRzOiAnY2VudHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuZ2xlIGJldHdlZW4gMCBhbmQgMzYwLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtEZWdyZWVzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgRGVncmVlczogJ2RlZ3JlZXMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgbnVtYmVyIHJlcHJlc2VudGluZyBhIG1pZGkgbm90ZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7TUlESX1cblx0XHRcdCAqL1xuXHQgICAgICAgIE1JREk6ICdtaWRpJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGNvbG9uLXNlcGFyYXRlZCByZXByZXNlbnRhdGlvbiBvZiB0aW1lIGluIHRoZSBmb3JtIG9mXG5cdFx0XHQgKiAgQmFyczpCZWF0czpTaXh0ZWVudGhzLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtCYXJzQmVhdHNTaXh0ZWVudGhzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQmFyc0JlYXRzU2l4dGVlbnRoczogJ2JhcnNCZWF0c1NpeHRlZW50aHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNhbXBsaW5nIGlzIHRoZSByZWR1Y3Rpb24gb2YgYSBjb250aW51b3VzIHNpZ25hbCB0byBhIGRpc2NyZXRlIHNpZ25hbC5cblx0XHRcdCAqICBBdWRpbyBpcyB0eXBpY2FsbHkgc2FtcGxlZCA0NDEwMCB0aW1lcyBwZXIgc2Vjb25kLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtTYW1wbGVzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgU2FtcGxlczogJ3NhbXBsZXMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhlcnR6IGFyZSBhIGZyZXF1ZW5jeSByZXByZXNlbnRhdGlvbiBkZWZpbmVkIGFzIG9uZSBjeWNsZSBwZXIgc2Vjb25kLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtIZXJ0en1cblx0XHRcdCAqL1xuXHQgICAgICAgIEhlcnR6OiAnaGVydHonLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgZnJlcXVlbmN5IHJlcHJlc2VudGVkIGJ5IGEgbGV0dGVyIG5hbWUsXG5cdFx0XHQgKiAgYWNjaWRlbnRhbCBhbmQgb2N0YXZlLiBUaGlzIHN5c3RlbSBpcyBrbm93biBhc1xuXHRcdFx0ICogIFtTY2llbnRpZmljIFBpdGNoIE5vdGF0aW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TY2llbnRpZmljX3BpdGNoX25vdGF0aW9uKS5cblx0XHRcdCAqICBAdHlwZWRlZiB7Tm90ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIE5vdGU6ICdub3RlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBPbmUgbWlsbGlzZWNvbmQgaXMgYSB0aG91c2FuZHRoIG9mIGEgc2Vjb25kLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtNaWxsaXNlY29uZHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBNaWxsaXNlY29uZHM6ICdtaWxsaXNlY29uZHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNlY29uZHMgYXJlIHRoZSB0aW1lIHVuaXQgb2YgdGhlIEF1ZGlvQ29udGV4dC4gSW4gdGhlIGVuZCxcblx0XHRcdCAqICBhbGwgdmFsdWVzIG5lZWQgdG8gYmUgZXZhbHVhdGVkIHRvIHNlY29uZHMuXG5cdFx0XHQgKiAgQHR5cGVkZWYge1NlY29uZHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBTZWNvbmRzOiAnc2Vjb25kcycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZHVyYXRpb24gcmVsYXRpdmUgdG8gYSBtZWFzdXJlLlxuXHRcdFx0ICogICogXCI0blwiID0gcXVhcnRlciBub3RlXG5cdFx0XHQgKiAgKiBcIjJtXCIgPSB0d28gbWVhc3VyZXNcblx0XHRcdCAqICAqIFwiOHRcIiA9IGVpZ2h0aC1ub3RlIHRyaXBsZXRcblx0XHRcdCAqICBAdHlwZWRlZiB7Tm90YXRpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICBOb3RhdGlvbjogJ25vdGF0aW9uJ1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gQVVHTUVOVCBUT05FJ3MgUFJPVE9UWVBFXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IFRpbWUgaW50byBzZWNvbmRzLlxuXHRcdCAqXG5cdFx0ICogIFVubGlrZSB0aGUgbWV0aG9kIHdoaWNoIGl0IG92ZXJyaWRlcywgdGhpcyB0YWtlcyBpbnRvIGFjY291bnRcblx0XHQgKiAgdHJhbnNwb3J0dGltZSBhbmQgbXVzaWNhbCBub3RhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBUaW1lIDogMS40MFxuXHRcdCAqICBOb3RhdGlvbjogNG4gb3IgMW0gb3IgMnRcblx0XHQgKiAgTm93IFJlbGF0aXZlOiArM25cblx0XHQgKiAgTWF0aDogM24rMTZuIG9yIGV2ZW4gY29tcGxpY2F0ZWQgZXhwcmVzc2lvbnMgKCgzbioyKS82ICsgMSlcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm4ge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aW1lO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1VuZGVmKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm5vdygpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyh0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZSh0aW1lKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRpbWUgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aW1lLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIGZyZXF1ZW5jeSByZXByZXNlbnRhdGlvbiBpbnRvIGEgbnVtYmVyLlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiB7SGVydHp9ICAgICAgdGhlIGZyZXF1ZW5jeSBpbiBoZXJ0elxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9GcmVxdWVuY3kgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGZyZXEpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmcmVxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhmcmVxKSB8fCBUb25lLmlzVW5kZWYoZnJlcSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLkZyZXF1ZW5jeShmcmVxKS52YWx1ZU9mKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChmcmVxIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gZnJlcS50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIHRpbWUgcmVwcmVzZW50YXRpb24gaW50byB0aWNrcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJuIHtUaWNrc30gIHRoZSB0aW1lIGluIHRpY2tzXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b1RpY2tzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcih0aW1lKSB8fCBUb25lLmlzU3RyaW5nKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpLnRvVGlja3MoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQudGlja3M7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aW1lIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGltZS50b1RpY2tzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYXJhbSB3cmFwcyB0aGUgbmF0aXZlIFdlYiBBdWRpbydzIEF1ZGlvUGFyYW0gdG8gcHJvdmlkZVxuXHRcdCAqICAgICAgICAgYWRkaXRpb25hbCB1bml0IGNvbnZlcnNpb24gZnVuY3Rpb25hbGl0eS4gSXQgYWxzb1xuXHRcdCAqICAgICAgICAgc2VydmVzIGFzIGEgYmFzZS1jbGFzcyBmb3IgY2xhc3NlcyB3aGljaCBoYXZlIGEgc2luZ2xlLFxuXHRcdCAqICAgICAgICAgYXV0b21hdGFibGUgcGFyYW1ldGVyLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvUGFyYW19ICBwYXJhbSAgVGhlIHBhcmFtZXRlciB0byB3cmFwLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlR5cGV9IHVuaXRzIFRoZSB1bml0cyBvZiB0aGUgYXVkaW8gcGFyYW0uXG5cdFx0ICogIEBwYXJhbSAge0Jvb2xlYW59IGNvbnZlcnQgSWYgdGhlIHBhcmFtIHNob3VsZCBiZSBjb252ZXJ0ZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3BhcmFtJyxcblx0ICAgICAgICAgICAgJ3VuaXRzJyxcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnXG5cdCAgICAgICAgXSwgVG9uZS5QYXJhbSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbmF0aXZlIHBhcmFtZXRlciB0byBjb250cm9sXG5cdFx0XHQgKiAgQHR5cGUgIHtBdWRpb1BhcmFtfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXQgPSBvcHRpb25zLnBhcmFtO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB1bml0cyBvZiB0aGUgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVHlwZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudW5pdHMgPSBvcHRpb25zLnVuaXRzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIHRoZSB2YWx1ZSBzaG91bGQgYmUgY29udmVydGVkIG9yIG5vdFxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jb252ZXJ0ID0gb3B0aW9ucy5jb252ZXJ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRydWUgaWYgdGhlIHNpZ25hbCB2YWx1ZSBpcyBiZWluZyBvdmVycmlkZGVuIGJ5XG5cdFx0XHQgKiAgYSBjb25uZWN0ZWQgc2lnbmFsLlxuXHRcdFx0ICogIEByZWFkT25seVxuXHRcdFx0ICogIEB0eXBlICB7Ym9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdmVycmlkZGVuID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdGltZWxpbmUgd2hpY2ggdHJhY2tzIGFsbCBvZiB0aGUgYXV0b21hdGlvbnMuXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBuZXcgVG9uZS5UaW1lbGluZSgxMDAwKTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQob3B0aW9ucy52YWx1ZSkgJiYgdGhpcy5fcGFyYW0pIHtcblx0ICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFyYW0sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWZhdWx0LFxuXHQgICAgICAgICdjb252ZXJ0JzogdHJ1ZSxcblx0ICAgICAgICAncGFyYW0nOiB1bmRlZmluZWRcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhcmFtI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcmFtLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvVW5pdHModGhpcy5nZXRWYWx1ZUF0VGltZShub3cpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2luaXRpYWxWYWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgICAgIHRoaXMuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRoaXMuY29udGV4dC5jdXJyZW50VGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVBdFRpbWUodmFsdWUsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSBvdXRwdXQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhcmFtI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcmFtLnByb3RvdHlwZSwgJ21pblZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLlRpbWUgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkZyZXF1ZW5jeSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuTm9ybWFsUmFuZ2UgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLlBvc2l0aXZlIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5CUE0pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5BdWRpb1JhbmdlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkRlY2liZWxzKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLUluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmFtLm1pblZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhcmFtI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcmFtLnByb3RvdHlwZSwgJ21heFZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLk5vcm1hbFJhbmdlIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5BdWRpb1JhbmdlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJhbS5tYXhWYWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIHR5cGUgc3BlY2lmaWVkIGJ5IFRvbmUuUGFyYW0udW5pdHNcblx0XHQgKiAgaW50byB0aGUgZGVzdGluYXRpb24gdmFsdWUgKHN1Y2ggYXMgR2FpbiBvciBGcmVxdWVuY3kpLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHsqfSB2YWwgdGhlIHZhbHVlIHRvIGNvbnZlcnRcblx0XHQgKiAgQHJldHVybiB7bnVtYmVyfSAgICAgdGhlIG51bWJlciB3aGljaCB0aGUgdmFsdWUgc2hvdWxkIGJlIHNldCB0b1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2Zyb21Vbml0cyA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAoKHRoaXMuY29udmVydCB8fCBUb25lLmlzVW5kZWYodGhpcy5jb252ZXJ0KSkgJiYgIXRoaXMub3ZlcnJpZGRlbikge1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudW5pdHMpIHtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuVGltZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcyh2YWwpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5GcmVxdWVuY3k6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0ZyZXF1ZW5jeSh2YWwpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5EZWNpYmVsczpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmRiVG9HYWluKHZhbCk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLk5vcm1hbFJhbmdlOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbCwgMCksIDEpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5BdWRpb1JhbmdlOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbCwgLTEpLCAxKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuUG9zaXRpdmU6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodmFsLCAwKTtcblx0ICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDb252ZXJ0IHRoZSBwYXJhbWV0ZXJzIHZhbHVlIGludG8gdGhlIHVuaXRzIHNwZWNpZmllZCBieSBUb25lLlBhcmFtLnVuaXRzLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtICB7bnVtYmVyfSB2YWwgdGhlIHZhbHVlIHRvIGNvbnZlcnRcblx0XHQgKiBAcmV0dXJuIHtudW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fdG9Vbml0cyA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAodGhpcy5jb252ZXJ0IHx8IFRvbmUuaXNVbmRlZih0aGlzLmNvbnZlcnQpKSB7XG5cdCAgICAgICAgICAgIHN3aXRjaCAodGhpcy51bml0cykge1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5EZWNpYmVsczpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmdhaW5Ub0RiKHZhbCk7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZVxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX21pbk91dHB1dCA9IDAuMDAwMDE7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGV2ZW50IHR5cGVzXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlID0ge1xuXHQgICAgICAgIExpbmVhcjogJ2xpbmVhclJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICBFeHBvbmVudGlhbDogJ2V4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgIFRhcmdldDogJ3NldFRhcmdldEF0VGltZScsXG5cdCAgICAgICAgU2V0VmFsdWU6ICdzZXRWYWx1ZUF0VGltZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGEgcGFyYW1ldGVyIHZhbHVlIGNoYW5nZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtIHsqfVx0dmFsdWUgVGhlIHZhbHVlIHRvIHNldCB0aGUgc2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9ICB0aW1lIFRoZSB0aW1lIHdoZW4gdGhlIGNoYW5nZSBzaG91bGQgb2NjdXIuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdGhlIGZyZXF1ZW5jeSB0byBcIkc0XCIgaW4gZXhhY3RseSAxIHNlY29uZCBmcm9tIG5vdy5cblx0XHQgKiBmcmVxLnNldFZhbHVlQXRUaW1lKFwiRzRcIiwgXCIrMVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uc2V0VmFsdWVBdFRpbWUodmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNpZ25hbHMgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFN1YnNlcXVlbnQgc2NoZWR1bGluZ1xuXHRcdCAqICBtYXkgaW52YWxpZGF0ZSB0aGUgcmV0dXJuZWQgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBXaGVuIHRvIGdldCB0aGUgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge051bWJlcn0gVGhlIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBhZnRlciA9IHRoaXMuX2V2ZW50cy5nZXRBZnRlcih0aW1lKTtcblx0ICAgICAgICB2YXIgYmVmb3JlID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICB2YXIgaW5pdGlhbFZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKHRoaXMuX2luaXRpYWxWYWx1ZSwgdGhpcy5fcGFyYW0uZGVmYXVsdFZhbHVlKTtcblx0ICAgICAgICB2YXIgdmFsdWUgPSBpbml0aWFsVmFsdWU7XG5cdCAgICAgICAgLy9pZiBpdCB3YXMgc2V0IGJ5XG5cdCAgICAgICAgaWYgKGJlZm9yZSA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZS50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlRhcmdldCkge1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXMgPSB0aGlzLl9ldmVudHMuZ2V0QmVmb3JlKGJlZm9yZS50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzVmFsO1xuXHQgICAgICAgICAgICBpZiAocHJldmlvdXMgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsID0gaW5pdGlhbFZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcHJldmlvdXNWYWwgPSBwcmV2aW91cy52YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2V4cG9uZW50aWFsQXBwcm9hY2goYmVmb3JlLnRpbWUsIHByZXZpb3VzVmFsLCBiZWZvcmUudmFsdWUsIGJlZm9yZS5jb25zdGFudCwgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlciA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGJlZm9yZS52YWx1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fbGluZWFySW50ZXJwb2xhdGUoYmVmb3JlLnRpbWUsIGJlZm9yZS52YWx1ZSwgYWZ0ZXIudGltZSwgYWZ0ZXIudmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5FeHBvbmVudGlhbCkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUoYmVmb3JlLnRpbWUsIGJlZm9yZS52YWx1ZSwgYWZ0ZXIudGltZSwgYWZ0ZXIudmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gYmVmb3JlLnZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENyZWF0ZXMgYSBzY2hlZHVsZSBwb2ludCB3aXRoIHRoZSBjdXJyZW50IHZhbHVlIGF0IHRoZSBjdXJyZW50IHRpbWUuXG5cdFx0ICogIFRoaXMgaXMgdXNlZnVsIGZvciBjcmVhdGluZyBhbiBhdXRvbWF0aW9uIGFuY2hvciBwb2ludCBpbiBvcmRlciB0b1xuXHRcdCAqICBzY2hlZHVsZSBjaGFuZ2VzIGZyb20gdGhlIGN1cnJlbnQgdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSBub3cgKE9wdGlvbmFsbHkpIHBhc3MgdGhlIG5vdyB2YWx1ZSBpbi5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFJhbXBQb2ludCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKGN1cnJlbnRWYWwgPT09IDApIHtcblx0ICAgICAgICAgICAgY3VycmVudFZhbCA9IHRoaXMuX21pbk91dHB1dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5zZXRWYWx1ZUF0VGltZSh0aGlzLl90b1VuaXRzKGN1cnJlbnRWYWwpLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGEgbGluZWFyIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tIHRoZVxuXHRcdCAqICBwcmV2aW91cyBzY2hlZHVsZWQgcGFyYW1ldGVyIHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGVuZFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBlbmRUaW1lKSB7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIGVuZFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhlbmRUaW1lKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcixcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogZW5kVGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBlbmRUaW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGV4cG9uZW50aWFsIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcGFyYW1ldGVyIHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGVuZFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIGVuZFRpbWUpIHtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgdmFsdWUgPSBNYXRoLm1heCh0aGlzLl9taW5PdXRwdXQsIHZhbHVlKTtcblx0ICAgICAgICBlbmRUaW1lID0gdGhpcy50b1NlY29uZHMoZW5kVGltZSk7XG5cdCAgICAgICAgLy9zdG9yZSB0aGUgZXZlbnRcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsLFxuXHQgICAgICAgICAgICAndGltZSc6IGVuZFRpbWUsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgZW5kVGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhbiBleHBvbmVudGlhbCBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgY3VycmVudCB0aW1lIGFuZCBjdXJyZW50IHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZSBvdmVyIHRoZVxuXHRcdCAqICBkdXJhdGlvbiBvZiB0aGUgcmFtcFRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0W3N0YXJ0VGltZT1ub3ddIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9leHBvbmVudGlhbGx5IHJhbXAgdG8gdGhlIHZhbHVlIDIgb3ZlciA0IHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmV4cG9uZW50aWFsUmFtcFRvKDIsIDQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBzdGFydFRpbWUgKyB0aGlzLnRvU2Vjb25kcyhyYW1wVGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gbGluZWFyIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBjdXJyZW50IHRpbWUgYW5kIGN1cnJlbnQgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlIG92ZXIgdGhlXG5cdFx0ICogIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xpbmVhcmx5IHJhbXAgdG8gdGhlIHZhbHVlIDQgb3ZlciAzIHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmxpbmVhclJhbXBUbyg0LCAzKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmxpbmVhclJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBzdGFydFRpbWUgKyB0aGlzLnRvU2Vjb25kcyhyYW1wVGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFNpbmNlIGl0XG5cdFx0ICogIGlzIGFuIGV4cG9uZW50aWFsIGFwcHJvYWNoIGl0IHdpbGwgY29udGludWUgYXBwcm9hY2hpbmcgYWZ0ZXIgdGhlIHJhbXAgZHVyYXRpb24uIFRoZVxuXHRcdCAqICByYW1wVGltZSBpcyB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRvIHJlYWNoIG92ZXIgOTklIG9mIHRoZSB3YXkgdG93YXJkcyB0aGUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWUgICBUaGUgdmFsdWUgdG8gcmFtcCB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vZXhwb25lbnRpYWxseSByYW1wIHRvIHRoZSB2YWx1ZSAyIG92ZXIgNCBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5leHBvbmVudGlhbFJhbXBUbygyLCA0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnRhcmdldFJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lLCByYW1wVGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gU2luY2UgaXRcblx0XHQgKiAgaXMgYW4gZXhwb25lbnRpYWwgYXBwcm9hY2ggaXQgd2lsbCBjb250aW51ZSBhcHByb2FjaGluZyBhZnRlciB0aGUgcmFtcCBkdXJhdGlvbi4gVGhlXG5cdFx0ICogIHJhbXBUaW1lIGlzIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdG8gcmVhY2ggb3ZlciA5OSUgb2YgdGhlIHdheSB0b3dhcmRzIHRoZSB2YWx1ZS4gVGhpcyBtZXRob2RzXG5cdFx0ICogIGlzIHNpbWlsYXIgdG8gc2V0VGFyZ2V0QXRUaW1lIGV4Y2VwdCB0aGUgdGhpcmQgYXJndW1lbnQgaXMgYSB0aW1lIGluc3RlYWQgb2YgYSAndGltZUNvbnN0YW50J1xuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdHRpbWUgXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9leHBvbmVudGlhbGx5IHJhbXAgdG8gdGhlIHZhbHVlIDIgb3ZlciA0IHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmV4cG9uZW50aWFsUmFtcFRvKDIsIDQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lLCByYW1wVGltZSkge1xuXHQgICAgICAgIHZhciB0aW1lQ29uc3RhbnQgPSBNYXRoLmxvZyh0aGlzLnRvU2Vjb25kcyhyYW1wVGltZSkgKyAxKSAvIE1hdGgubG9nKDIwMCk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLnNldFRhcmdldEF0VGltZSh2YWx1ZSwgdGltZSwgdGltZUNvbnN0YW50KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lIHdpdGhcblx0XHQgKiAgYSByYXRlIGhhdmluZyB0aGUgZ2l2ZW4gdGltZSBjb25zdGFudC5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB0aW1lQ29uc3RhbnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFRhcmdldEF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpIHtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgLy8gVGhlIHZhbHVlIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBhcHByb2FjaCB3aXRob3V0IHRpbWVDb25zdGFudCA+IDAuXG5cdCAgICAgICAgaWYgKHRpbWVDb25zdGFudCA8PSAwKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGltZUNvbnN0YW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlRhcmdldCxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogc3RhcnRUaW1lLFxuXHQgICAgICAgICAgICAnY29uc3RhbnQnOiB0aW1lQ29uc3RhbnRcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5zZXRUYXJnZXRBdFRpbWUodmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyBhbiBhcnJheSBvZiBhcmJpdHJhcnkgcGFyYW1ldGVyIHZhbHVlcyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7QXJyYXl9IHZhbHVlc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGR1cmF0aW9uXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzY2FsaW5nPTFdIElmIHRoZSB2YWx1ZXMgaW4gdGhlIGN1cnZlIHNob3VsZCBiZSBzY2FsZWQgYnkgc29tZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuc2V0VmFsdWVDdXJ2ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZXMsIHN0YXJ0VGltZSwgZHVyYXRpb24sIHNjYWxpbmcpIHtcblx0ICAgICAgICBzY2FsaW5nID0gVG9uZS5kZWZhdWx0QXJnKHNjYWxpbmcsIDEpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRWYWx1ZUF0VGltZSh2YWx1ZXNbMF0gKiBzY2FsaW5nLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIHZhciBzZWdUaW1lID0gZHVyYXRpb24gLyAodmFsdWVzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWVzW2ldICogc2NhbGluZywgc3RhcnRUaW1lICsgaSAqIHNlZ1RpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VscyBhbGwgc2NoZWR1bGVkIHBhcmFtZXRlciBjaGFuZ2VzIHdpdGggdGltZXMgZ3JlYXRlciB0aGFuIG9yXG5cdFx0ICogIGVxdWFsIHRvIHN0YXJ0VGltZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhpcyBpcyBzaW1pbGFyIHRvIFtjYW5jZWxTY2hlZHVsZWRWYWx1ZXNdKCNjYW5jZWxTY2hlZHVsZWRWYWx1ZXMpIGV4Y2VwdFxuXHRcdCAqICBpdCBob2xkcyB0aGUgYXV0b21hdGVkIHZhbHVlIGF0IHRpbWUgdW50aWwgdGhlIG5leHQgYXV0b21hdGVkIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5jYW5jZWxBbmRIb2xkQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdmFsdWVBdFRpbWUgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIC8vaWYgdGhlcmUgaXMgYW4gZXZlbnQgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAgICAvL2FuZCB0aGF0IGV2ZW4gaXMgbm90IGEgXCJzZXRcIlxuXHQgICAgICAgIHZhciBiZWZvcmUgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHZhciBhZnRlciA9IHRoaXMuX2V2ZW50cy5nZXRBZnRlcih0aW1lKTtcblx0ICAgICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aW1lID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIGV2ZXJ5dGhpbmcgYWZ0ZXJcblx0ICAgICAgICAgICAgaWYgKGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKGFmdGVyLnRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCh0aW1lICsgMC4wMDAwMDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlcikge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCB0aGUgbmV4dCBldmVudChzKVxuXHQgICAgICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKGFmdGVyLnRpbWUpO1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3BhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAoYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIpIHtcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWVBdFRpbWUsIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcixcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVBdFRpbWUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwpIHtcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZUF0VGltZSwgdGltZSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlQXRUaW1lLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3NldCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZUF0VGltZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSh0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJhbS5zZXRWYWx1ZUF0VGltZSh2YWx1ZUF0VGltZSwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSYW1wcyB0byB0aGUgZ2l2ZW4gdmFsdWUgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqICBBdXRvbWF0aWNhbGx5IHNlbGVjdHMgdGhlIGJlc3QgcmFtcCB0eXBlIChleHBvbmVudGlhbCBvciBsaW5lYXIpXG5cdFx0ICogIGRlcGVuZGluZyBvbiB0aGUgYHVuaXRzYCBvZiB0aGUgc2lnbmFsXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSBcdFRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcmFtcCB0byB0aGUgdmFsdWUgZWl0aGVyIGxpbmVhcmx5IG9yIGV4cG9uZW50aWFsbHlcblx0XHQgKiAvL2RlcGVuZGluZyBvbiB0aGUgXCJ1bml0c1wiIHZhbHVlIG9mIHRoZSBzaWduYWxcblx0XHQgKiBzaWduYWwucmFtcFRvKDAsIDEwKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NjaGVkdWxlIGl0IHRvIHJhbXAgc3RhcnRpbmcgYXQgYSBzcGVjaWZpYyB0aW1lXG5cdFx0ICogc2lnbmFsLnJhbXBUbygwLCAxMCwgNSlcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHJhbXBUaW1lID0gVG9uZS5kZWZhdWx0QXJnKHJhbXBUaW1lLCAwLjEpO1xuXHQgICAgICAgIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuRnJlcXVlbmN5IHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5CUE0gfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkRlY2liZWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZXhwb25lbnRpYWxSYW1wVG8odmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVVUT01BVElPTiBDVVJWRSBDQUxDVUxBVElPTlNcblx0ICAgIC8vXHRNSVQgTGljZW5zZSwgY29weXJpZ2h0IChjKSAyMDE0IEpvcmRhbiBTYW50ZWxsXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHRoZSB2YWx1ZSBhbG9uZyB0aGUgY3VydmUgcHJvZHVjZWQgYnkgc2V0VGFyZ2V0QXRUaW1lXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fZXhwb25lbnRpYWxBcHByb2FjaCA9IGZ1bmN0aW9uICh0MCwgdjAsIHYxLCB0aW1lQ29uc3RhbnQsIHQpIHtcblx0ICAgICAgICByZXR1cm4gdjEgKyAodjAgLSB2MSkgKiBNYXRoLmV4cCgtKHQgLSB0MCkgLyB0aW1lQ29uc3RhbnQpO1xuXHQgICAgfTtcblx0ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHRoZSB2YWx1ZSBhbG9uZyB0aGUgY3VydmUgcHJvZHVjZWQgYnkgbGluZWFyUmFtcFRvVmFsdWVBdFRpbWVcblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9saW5lYXJJbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uICh0MCwgdjAsIHQxLCB2MSwgdCkge1xuXHQgICAgICAgIHJldHVybiB2MCArICh2MSAtIHYwKSAqICgodCAtIHQwKSAvICh0MSAtIHQwKSk7XG5cdCAgICB9O1xuXHQgICAgLy8gQ2FsY3VsYXRlcyB0aGUgdGhlIHZhbHVlIGFsb25nIHRoZSBjdXJ2ZSBwcm9kdWNlZCBieSBleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fZXhwb25lbnRpYWxJbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uICh0MCwgdjAsIHQxLCB2MSwgdCkge1xuXHQgICAgICAgIHJldHVybiB2MCAqIE1hdGgucG93KHYxIC8gdjAsICh0IC0gdDApIC8gKHQxIC0gdDApKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYXJhbTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgT2ZmbGluZUF1ZGlvQ29udGV4dFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Db250ZXh0fVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBjaGFubmVscyAgVGhlIG51bWJlciBvZiBjaGFubmVscyB0byByZW5kZXJcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgZHVyYXRpb24gIFRoZSBkdXJhdGlvbiB0byByZW5kZXIgaW4gc2FtcGxlc1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gc2FtcGxlUmF0ZSB0aGUgc2FtcGxlIHJhdGUgdG8gcmVuZGVyIGF0XG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmVDb250ZXh0ID0gZnVuY3Rpb24gKGNoYW5uZWxzLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSkge1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvZmZsaW5lIGNvbnRleHRcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7T2ZmbGluZUF1ZGlvQ29udGV4dH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHZhciBvZmZsaW5lQ29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KGNoYW5uZWxzLCBkdXJhdGlvbiAqIHNhbXBsZVJhdGUsIHNhbXBsZVJhdGUpO1xuXHQgICAgICAgIC8vd3JhcCB0aGUgbWV0aG9kcy9tZW1iZXJzXG5cdCAgICAgICAgVG9uZS5Db250ZXh0LmNhbGwodGhpcywge1xuXHQgICAgICAgICAgICAnY29udGV4dCc6IG9mZmxpbmVDb250ZXh0LFxuXHQgICAgICAgICAgICAnY2xvY2tTb3VyY2UnOiAnb2ZmbGluZScsXG5cdCAgICAgICAgICAgICdsb29rQWhlYWQnOiAwLFxuXHQgICAgICAgICAgICAndXBkYXRlSW50ZXJ2YWwnOiAxMjggLyBzYW1wbGVSYXRlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBwcml2YXRlIHJlZmVyZW5jZSB0byB0aGUgZHVyYXRpb25cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBhcnRpZmljaWFsIGNsb2NrIHNvdXJjZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5PZmZsaW5lQ29udGV4dCwgVG9uZS5Db250ZXh0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBPdmVycmlkZSB0aGUgbm93IG1ldGhvZCB0byBwb2ludCB0byB0aGUgaW50ZXJuYWwgY2xvY2sgdGltZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUubm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VGltZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVuZGVyIHRoZSBvdXRwdXQgb2YgdGhlIE9mZmxpbmVDb250ZXh0XG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHdoaWxlICh0aGlzLl9kdXJhdGlvbiAtIHRoaXMuX2N1cnJlbnRUaW1lID49IDApIHtcblx0ICAgICAgICAgICAgLy9pbnZva2UgYWxsIHRoZSBjYWxsYmFja3Mgb24gdGhhdCB0aW1lXG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgndGljaycpO1xuXHQgICAgICAgICAgICAvL2luY3JlbWVudCB0aGUgY2xvY2tcblx0ICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gdGhpcy5ibG9ja1RpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsb3NlIHRoZSBjb250ZXh0XG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9mZmxpbmVDb250ZXh0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG5cdCAgICAgICAgdmFyIGlzTW9iaWxlU2FmYXJpID0gdWEuaW5jbHVkZXMoJ3NhZmFyaScpICYmICF1YS5pbmNsdWRlcygnY2hyb21lJykgJiYgdWEuaW5jbHVkZXMoJ21vYmlsZScpO1xuXHQgICAgICAgIGlmIChpc01vYmlsZVNhZmFyaSkge1xuXHQgICAgICAgICAgICAvL21vYmlsZSBzYWZhcmkgaGFzIGEgYml6YXJyZSBidWcgd2l0aCB0aGUgb2ZmbGluZSBjb250ZXh0XG5cdCAgICAgICAgICAgIC8vd2hlbiBhIEJ1ZmZlclNvdXJjZU5vZGUgaXMgc3RhcnRlZCwgaXQgc3RhcnRzIHRoZSBvZmZsaW5lIGNvbnRleHRcblx0ICAgICAgICAgICAgLy9cblx0ICAgICAgICAgICAgLy9kZWZlcnJpbmcgYWxsIEJ1ZmZlclNvdXJjZSBzdGFydHMgdGlsbCB0aGUgbGFzdCBwb3NzaWJsZSBtb21lbnRcblx0ICAgICAgICAgICAgLy9yZWR1Y2VzIHRoZSBsaWtlbGlob29kIG9mIHRoaXMgaGFwcGVuaW5nXG5cdCAgICAgICAgICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLmNyZWF0ZUJ1ZmZlclNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBidWZmZXJTb3VyY2UgPSB0aGlzLl9jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgICAgICAgICAgdmFyIF9uYXRpdmVfc3RhcnQgPSBidWZmZXJTb3VyY2Uuc3RhcnQ7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJTb3VyY2Uuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIF9uYXRpdmVfc3RhcnQuY2FsbChidWZmZXJTb3VyY2UsIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMCk7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyU291cmNlO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgdGhpbiB3cmFwcGVyIGFyb3VuZCB0aGUgTmF0aXZlIFdlYiBBdWRpbyBHYWluTm9kZS5cblx0XHQgKiAgICAgICAgIFRoZSBHYWluTm9kZSBpcyBhIGJhc2ljIGJ1aWxkaW5nIGJsb2NrIG9mIHRoZSBXZWIgQXVkaW9cblx0XHQgKiAgICAgICAgIEFQSSBhbmQgaXMgdXNlZnVsIGZvciByb3V0aW5nIGF1ZGlvIGFuZCBhZGp1c3RpbmcgZ2FpbnMuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSAgZ2FpbiAgVGhlIGluaXRpYWwgZ2FpbiBvZiB0aGUgR2Fpbk5vZGVcblx0XHQgKiAgQHBhcmFtIHtUb25lLlR5cGU9fSB1bml0cyBUaGUgdW5pdHMgb2YgdGhlIGdhaW4gcGFyYW1ldGVyLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAndW5pdHMnXG5cdCAgICAgICAgXSwgVG9uZS5HYWluKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBHYWluTm9kZVxuXHRcdFx0ICogIEB0eXBlICB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuX2dhaW5Ob2RlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBwYXJhbWV0ZXIgb2YgdGhlIGdhaW4gbm9kZS5cblx0XHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmdhaW4gPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2dhaW5Ob2RlLmdhaW4sXG5cdCAgICAgICAgICAgICd1bml0cyc6IG9wdGlvbnMudW5pdHMsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZ2Fpbixcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBvcHRpb25zLmNvbnZlcnRcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZ2FpbicpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR2FpbiwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW4uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2dhaW4nOiAxLFxuXHQgICAgICAgICdjb252ZXJ0JzogdHJ1ZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuR2Fpbn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR2Fpbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2dhaW4nKTtcblx0ICAgICAgICB0aGlzLmdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR2Fpbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkICYmICFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnN0YW50U291cmNlKSB7XG5cdCAgICAgICAgdmFyIENvbnN0YW50U291cmNlTm9kZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCAxMjgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgICAgIHZhciBhcnIgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBhcnJbaV0gPSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5sb29wID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdmFyIGdhaW5Ob2RlID0gdGhpcy5fb3V0cHV0ID0gY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgICAgIHRoaXMub2Zmc2V0ID0gZ2Fpbk5vZGUuZ2Fpbjtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmNvbm5lY3QoZ2Fpbk5vZGUpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5zdGFydCh0aW1lKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2Uuc3RvcCh0aW1lKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dC5jb25uZWN0LmFwcGx5KHRoaXMuX291dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dC5kaXNjb25uZWN0LmFwcGx5KHRoaXMuX291dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnN0YW50U291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50U291cmNlTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlQ29uc3RhbnRTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnRTb3VyY2VOb2RlKHRoaXMpO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBzaWduYWwgaXMgYW4gYXVkaW8tcmF0ZSB2YWx1ZS4gVG9uZS5TaWduYWwgaXMgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGUgbGlicmFyeS5cblx0XHQgKiAgICAgICAgICBVbmxpa2UgYSBudW1iZXIsIFNpZ25hbHMgY2FuIGJlIHNjaGVkdWxlZCB3aXRoIHNhbXBsZS1sZXZlbCBhY2N1cmFjeS4gVG9uZS5TaWduYWxcblx0XHQgKiAgICAgICAgICBoYXMgYWxsIG9mIHRoZSBtZXRob2RzIGF2YWlsYWJsZSB0byBuYXRpdmUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICAgW0F1ZGlvUGFyYW1dKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWF1ZGlvcGFyYW0taW50ZXJmYWNlKVxuXHRcdCAqICAgICAgICAgIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBjb252ZW5pZW5jZXMuIFJlYWQgbW9yZSBhYm91dCB3b3JraW5nIHdpdGggc2lnbmFsc1xuXHRcdCAqICAgICAgICAgIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9TaWduYWxzKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuUGFyYW19XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfEF1ZGlvUGFyYW19IFt2YWx1ZV0gSW5pdGlhbCB2YWx1ZSBvZiB0aGUgc2lnbmFsLiBJZiBhbiBBdWRpb1BhcmFtXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcGFzc2VkIGluLCB0aGF0IHBhcmFtZXRlciB3aWxsIGJlIHdyYXBwZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgY29udHJvbGxlZCBieSB0aGUgU2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPU51bWJlcl0gdW5pdCBUaGUgdW5pdHMgdGhlIHNpZ25hbCBpcyBpbi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDEwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3ZhbHVlJyxcblx0ICAgICAgICAgICAgJ3VuaXRzJ1xuXHQgICAgICAgIF0sIFRvbmUuU2lnbmFsKTtcblx0ICAgICAgICBUb25lLlBhcmFtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQqIFdoZW4gYSBzaWduYWwgaXMgY29ubmVjdGVkIHRvIGFub3RoZXIgc2lnbmFsIG9yIGF1ZGlvIHBhcmFtLFxuXHRcdFx0KiB0aGlzIHNpZ25hbCBiZWNvbWVzIGEgcHJveHkgZm9yIGl0XG5cdFx0XHQqIEB0eXBlIHtBcnJheX1cblx0XHRcdCogQHByaXZhdGVcblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5fcHJveGllcyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiBJbmRpY2F0ZXMgaWYgdGhlIGNvbnN0YW50IHNvdXJjZSB3YXMgc3RhcnRlZCBvciBub3Rcblx0XHRcdCogQHByaXZhdGVcblx0XHRcdCogQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjb25zdGFudCBzb3VyY2Ugbm9kZSB3aGljaCBnZW5lcmF0ZXMgdGhlIHNpZ25hbFxuXHRcdFx0ICogQHR5cGUge0NvbnN0YW50U291cmNlTm9kZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZSA9IHRoaXMuY29udGV4dC5jcmVhdGVDb25zdGFudFNvdXJjZSgpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5fY29uc3RhbnRTb3VyY2Uub2Zmc2V0O1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG5vZGUgd2hlcmUgdGhlIGNvbnN0YW50IHNpZ25hbCB2YWx1ZSBpcyBzY2FsZWQuXG5cdFx0XHQgKiBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLl9jb25zdGFudFNvdXJjZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBub2RlIHdoZXJlIHRoZSB2YWx1ZSBpcyBzZXQuXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5QYXJhbX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5fcGFyYW0gPSB0aGlzLm91dHB1dC5vZmZzZXQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TaWduYWwsIFRvbmUuUGFyYW0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2YWx1ZSc6IDAsXG5cdCAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlZmF1bHQsXG5cdCAgICAgICAgJ2NvbnZlcnQnOiB0cnVlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFdoZW4gc2lnbmFscyBjb25uZWN0IHRvIG90aGVyIHNpZ25hbHMgb3IgQXVkaW9QYXJhbXMsXG5cdFx0ICogIHRoZXkgdGFrZSBvdmVyIHRoZSBvdXRwdXQgdmFsdWUgb2YgdGhhdCBzaWduYWwgb3IgQXVkaW9QYXJhbS5cblx0XHQgKiAgRm9yIGFsbCBvdGhlciBub2RlcywgdGhlIGJlaGF2aW9yIGlzIHRoZSBzYW1lIGFzIGEgZGVmYXVsdCA8Y29kZT5jb25uZWN0PC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAb3ZlcnJpZGVcblx0XHQgKiAgQHBhcmFtIHtBdWRpb1BhcmFtfEF1ZGlvTm9kZXxUb25lLlNpZ25hbHxUb25lfSBub2RlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TnVtYmVyPTBdIFRoZSBvdXRwdXQgbnVtYmVyIHRvIGNvbm5lY3QgZnJvbS5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtpbnB1dE51bWJlcj0wXSBUaGUgaW5wdXQgbnVtYmVyIHRvIGNvbm5lY3QgdG8uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNpZ25hbH0gdGhpc1xuXHRcdCAqICBAbWV0aG9kXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgLy90aGlzIGlzIGFuIG9wdGltaXphdGlvbiB3aGVyZSB0aGlzIG5vZGUgd2lsbCBmb3J3YXJkIGF1dG9tYXRpb25zXG5cdCAgICAgICAgLy90byBjb25uZWN0ZWQgbm9kZXMgd2l0aG91dCBhbnkgc2lnbmFsIGlmIHBvc3NpYmxlLlxuXHQgICAgICAgIGlmICh0aGlzLl9pc1BhcmFtKG5vZGUpICYmICF0aGlzLl9zb3VyY2VTdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMucHVzaChub2RlKTtcblx0ICAgICAgICAgICAgbm9kZS5vdmVycmlkZGVuID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fYXBwbHlBdXRvbWF0aW9ucyhub2RlKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VTdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlLnN0YXJ0KDApO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRha2VzIGEgbm9kZSBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBpZiBpdCBpcyBhIFBhcmFtIG9yIEF1ZGlvUGFyYW1cblx0XHQgKiBAcGFyYW0gIHsqfSBub2RlIFRoZSBub2RlIHRvIHRlc3Rcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX2lzUGFyYW0gPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlBhcmFtICYmIFRvbmUuUGFyYW0gPT09IG5vZGUuY29uc3RydWN0b3IgfHwgbm9kZSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRGlzY2FyZCB0aGUgb3B0aW1pemF0aW9uIGFuZCBjb25uZWN0IGFsbCBvZiB0aGUgcHJveGllc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX2Nvbm5lY3RQcm94aWVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5fc291cmNlU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2Uuc3RhcnQoMCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3Byb3hpZXMuZm9yRWFjaChmdW5jdGlvbiAocHJveHkpIHtcblx0ICAgICAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0LmNhbGwodGhpcywgcHJveHkpO1xuXHQgICAgICAgICAgICBpZiAocHJveHkuX3Byb3hpZXMpIHtcblx0ICAgICAgICAgICAgICAgIHByb3h5Ll9jb25uZWN0UHJveGllcygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2VkIHdoZW4gYSBub2RlIGlzIGNvbm5lY3RlZCB0byB0aGlzXG5cdFx0ICogQHBhcmFtICB7QXVkaW9Ob2RlfSBmcm9tXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5fb25Db25uZWN0ID0gZnVuY3Rpb24gKGZyb20pIHtcblx0ICAgICAgICBpZiAoIXRoaXMuX2lzUGFyYW0oZnJvbSkpIHtcblx0ICAgICAgICAgICAgLy9jb25uZWN0IGFsbCB0aGUgcHJveGllc1xuXHQgICAgICAgICAgICB0aGlzLl9jb25uZWN0UHJveGllcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBBcHBseSBhbGwgdGhlIGN1cnJlbnQgYXV0b21hdGlvbnMgdG8gdGhlIGdpdmVuIHBhcmFtZXRlclxuXHRcdCAqIEBwYXJhbSAge0F1ZGlvUGFyYW19IHBhcmFtXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5fYXBwbHlBdXRvbWF0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbSkge1xuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XG5cdCAgICAgICAgcGFyYW0uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKG5vdyk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWwgPSB0aGlzLmdldFZhbHVlQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgcGFyYW0uc2V0VmFsdWVBdFRpbWUoY3VycmVudFZhbCwgbm93KTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuZm9yRWFjaEZyb20obm93LCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgcGFyYW1bZXZlbnQudHlwZV0oZXZlbnQudmFsdWUsIGV2ZW50LnRpbWUsIGV2ZW50LmNvbnN0YW50KTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBEaXNjb25uZWN0IGZyb20gdGhlIGdpdmVuIG5vZGUgb3IgYWxsIG5vZGVzIGlmIG5vIHBhcmFtIGlzIGdpdmVuLlxuXHRcdCAqIEBwYXJhbSAge0F1ZGlvTm9kZXxBdWRpb1BhcmFtfSBub2RlXG5cdFx0ICogQHJldHVybiB7VG9uZS5TaWduYWx9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9wcm94aWVzLmluY2x1ZGVzKG5vZGUpKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3Byb3hpZXMuaW5kZXhPZihub2RlKTtcblx0ICAgICAgICAgICAgdGhpcy5fcHJveGllcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoIW5vZGUpIHtcblx0ICAgICAgICAgICAgLy9ubyBhcmd1bWVudCwgZGlzY29ubmVjdCBldmVyeXRoaW5nXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBbXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgY3VycmVudCBzaWduYWwgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBXaGVuIHRvIGdldCB0aGUgc2lnbmFsIHZhbHVlXG5cdFx0ICogQHJldHVybiB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fcGFyYW0uZ2V0VmFsdWVBdFRpbWUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmFtLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlBhcmFtLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvL3dyYXAgYWxsIG9mIHRoZSBhdXRvbWF0aW9uIG1ldGhvZHNcblx0ICAgIFtcblx0ICAgICAgICAnc2V0VmFsdWVBdFRpbWUnLFxuXHQgICAgICAgICdsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZScsXG5cdCAgICAgICAgJ2V4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgICdzZXRUYXJnZXRBdFRpbWUnXG5cdCAgICBdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuXHQgICAgICAgIHZhciBwcmV2aW91c01ldGhvZCA9IFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0ICAgICAgICAgICAgcHJldmlvdXNNZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgYXJnc1swXSA9IHRoaXMuX2Zyb21Vbml0cyhhcmdzWzBdKTtcblx0ICAgICAgICAgICAgYXJnc1sxXSA9IHRoaXMudG9TZWNvbmRzKGFyZ3NbMV0pO1xuXHQgICAgICAgICAgICAvL2FwcGx5IGl0IHRvIHRoZSBwcm94aWVzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMuZm9yRWFjaChmdW5jdGlvbiAoc2lnbmFsKSB7XG5cdCAgICAgICAgICAgICAgICBzaWduYWxbbWV0aG9kXS5hcHBseShzaWduYWwsIGFyZ3MpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9O1xuXHQgICAgfSk7XG5cdCAgICBbXG5cdCAgICAgICAgJ2NhbmNlbFNjaGVkdWxlZFZhbHVlcycsXG5cdCAgICAgICAgJ2NhbmNlbEFuZEhvbGRBdFRpbWUnXG5cdCAgICBdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuXHQgICAgICAgIHZhciBwcmV2aW91c01ldGhvZCA9IFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0ICAgICAgICAgICAgcHJldmlvdXNNZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgYXJnc1swXSA9IHRoaXMudG9TZWNvbmRzKGFyZ3NbMF0pO1xuXHQgICAgICAgICAgICAvL2FwcGx5IGl0IHRvIHRoZSBwcm94aWVzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMuZm9yRWFjaChmdW5jdGlvbiAoc2lnbmFsKSB7XG5cdCAgICAgICAgICAgICAgICBzaWduYWxbbWV0aG9kXS5hcHBseShzaWduYWwsIGFyZ3MpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9O1xuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNpZ25hbDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFBvdyBhcHBsaWVzIGFuIGV4cG9uZW50IHRvIHRoZSBpbmNvbWluZyBzaWduYWwuIFRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgICAgICAgIG11c3QgYmUgQXVkaW9SYW5nZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gZXhwIFRoZSBleHBvbmVudCB0byBhcHBseSB0byB0aGUgaW5jb21pbmcgc2lnbmFsLCBtdXN0IGJlIGF0IGxlYXN0IDIuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwb3cgPSBuZXcgVG9uZS5Qb3coMik7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgwLjUpLmNvbm5lY3QocG93KTtcblx0XHQgKiAvL291dHB1dCBvZiBwb3cgaXMgMC4yNS4gXG5cdFx0ICovXG5cdCAgICBUb25lLlBvdyA9IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSBleHBvbmVudFxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHAgPSBUb25lLmRlZmF1bHRBcmcoZXhwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V4cFNjYWxlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIodGhpcy5fZXhwRnVuYyh0aGlzLl9leHApLCA4MTkyKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBvdywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB2YWx1ZSBvZiB0aGUgZXhwb25lbnQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUG93I1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBvdy5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAgPSBleHA7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cFNjYWxlci5zZXRNYXAodGhpcy5fZXhwRnVuYyh0aGlzLl9leHApKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZnVuY3Rpb24gd2hpY2ggbWFwcyB0aGUgd2F2ZXNoYXBlclxuXHRcdCAqICBAcGFyYW0gICB7bnVtYmVyfSBleHBcblx0XHQgKiAgQHJldHVybiB7ZnVuY3Rpb259XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBvdy5wcm90b3R5cGUuX2V4cEZ1bmMgPSBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIE1hdGgucG93KE1hdGguYWJzKHZhbCksIGV4cCk7XG5cdCAgICAgICAgfTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvd30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb3cucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZXhwU2NhbGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9leHBTY2FsZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBvdztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkVudmVsb3BlIGlzIGFuIFtBRFNSXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW50aGVzaXplciNBRFNSX2VudmVsb3BlKVxuXHRcdCAqICAgICAgICAgIGVudmVsb3BlIGdlbmVyYXRvci4gVG9uZS5FbnZlbG9wZSBvdXRwdXRzIGEgc2lnbmFsIHdoaWNoXG5cdFx0ICogICAgICAgICAgY2FuIGJlIGNvbm5lY3RlZCB0byBhbiBBdWRpb1BhcmFtIG9yIFRvbmUuU2lnbmFsLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy9lL2VhL0FEU1JfcGFyYW1ldGVyLnN2Z1wiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2F0dGFja10gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGUgdG8gZ28gZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIDAgdG8gaXQncyBtYXhpbXVtIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdFRoZSBwZXJpb2Qgb2YgdGltZSBhZnRlciB0aGUgYXR0YWNrIHRoYXQgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICBcdHRvIGZhbGwgdG8gdGhlIHN1c3RhaW4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzdXN0YWluXVx0VGhlIHBlcmNlbnQgb2YgdGhlIG1heGltdW0gdmFsdWUgdGhhdCB0aGUgZW52ZWxvcGUgcmVzdHMgYXQgdW50aWxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR0aGUgcmVsZWFzZSBpcyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHRUaGUgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkIGl0IHRha2VzIHRvIHJlYWNoIDAuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hbiBhbXBsaXR1ZGUgZW52ZWxvcGVcblx0XHQgKiB2YXIgZ2Fpbk5vZGUgPSBUb25lLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHRcdCAqIHZhciBlbnYgPSBuZXcgVG9uZS5FbnZlbG9wZSh7XG5cdFx0ICogXHRcImF0dGFja1wiIDogMC4xLFxuXHRcdCAqIFx0XCJkZWNheVwiIDogMC4yLFxuXHRcdCAqIFx0XCJzdXN0YWluXCIgOiAxLFxuXHRcdCAqIFx0XCJyZWxlYXNlXCIgOiAwLjgsXG5cdFx0ICogfSk7XG5cdFx0ICogZW52LmNvbm5lY3QoZ2Fpbk5vZGUuZ2Fpbik7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vZ2V0IGFsbCBvZiB0aGUgZGVmYXVsdHNcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAnZGVjYXknLFxuXHQgICAgICAgICAgICAnc3VzdGFpbicsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlbiB0cmlnZ2VyQXR0YWNrIGlzIGNhbGxlZCwgdGhlIGF0dGFjayB0aW1lIGlzIHRoZSBhbW91bnQgb2Zcblx0XHRcdCAqICB0aW1lIGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGUgdG8gcmVhY2ggaXQncyBtYXhpbXVtIHZhbHVlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBvcHRpb25zLmF0dGFjaztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBZnRlciB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlLCB0aGUgdmFsdWUgd2lsbCBmYWxsXG5cdFx0XHQgKiAgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIGRlY2F5IHRpbWUgdG8gaXQncyBzdXN0YWluIHZhbHVlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWNheSA9IG9wdGlvbnMuZGVjYXk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBcdFRoZSBzdXN0YWluIHZhbHVlIGlzIHRoZSB2YWx1ZVxuXHRcdFx0ICogXHR3aGljaCB0aGUgZW52ZWxvcGUgcmVzdHMgYXQgYWZ0ZXIgdHJpZ2dlckF0dGFjayBpc1xuXHRcdFx0ICogXHRjYWxsZWQsIGJ1dCBiZWZvcmUgdHJpZ2dlclJlbGVhc2UgaXMgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnN1c3RhaW4gPSBvcHRpb25zLnN1c3RhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWZ0ZXIgdHJpZ2dlclJlbGVhc2UgaXMgY2FsbGVkLCB0aGUgZW52ZWxvcGUnc1xuXHRcdFx0ICogIHZhbHVlIHdpbGwgZmFsbCB0byBpdCdzIG1pbWludW0gdmFsdWUgb3ZlciB0aGVcblx0XHRcdCAqICBkdXJhdGlvbiBvZiB0aGUgcmVsZWFzZSB0aW1lLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gb3B0aW9ucy5yZWxlYXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBuZXh0IHRpbWUgdGhlIGVudmVsb3BlIGlzIGF0IHN0YW5kYnlcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9ICdsaW5lYXInO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBuZXh0IHRpbWUgdGhlIGVudmVsb3BlIGlzIGF0IHN0YW5kYnlcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSAnZXhwb25lbnRpYWwnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NpZyA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2lnbmFsKDApO1xuXHQgICAgICAgIC8vc2V0IHRoZSBhdHRhY2tDdXJ2ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLmF0dGFja0N1cnZlID0gb3B0aW9ucy5hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICB0aGlzLnJlbGVhc2VDdXJ2ZSA9IG9wdGlvbnMucmVsZWFzZUN1cnZlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRW52ZWxvcGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAnc3VzdGFpbic6IDAuNSxcblx0ICAgICAgICAncmVsZWFzZSc6IDEsXG5cdCAgICAgICAgJ2F0dGFja0N1cnZlJzogJ2xpbmVhcicsXG5cdCAgICAgICAgJ3JlbGVhc2VDdXJ2ZSc6ICdleHBvbmVudGlhbCdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBlbnZlbG9wZS4gVXNlZnVsIGZvclxuXHRcdCAqIHN5bmNyb25pemluZyB2aXN1YWwgb3V0cHV0IHRvIHRoZSBlbnZlbG9wZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5FbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2hhcGUgb2YgdGhlIGF0dGFjay5cblx0XHQgKiBDYW4gYmUgYW55IG9mIHRoZXNlIHN0cmluZ3M6XG5cdFx0ICogPHVsPlxuXHRcdCAqICAgPGxpPmxpbmVhcjwvbGk+XG5cdFx0ICogICA8bGk+ZXhwb25lbnRpYWw8L2xpPlxuXHRcdCAqICAgPGxpPnNpbmU8L2xpPlxuXHRcdCAqICAgPGxpPmNvc2luZTwvbGk+XG5cdFx0ICogICA8bGk+Ym91bmNlPC9saT5cblx0XHQgKiAgIDxsaT5yaXBwbGU8L2xpPlxuXHRcdCAqICAgPGxpPnN0ZXA8L2xpPlxuXHRcdCAqIDwvdWw+XG5cdFx0ICogQ2FuIGFsc28gYmUgYW4gYXJyYXkgd2hpY2ggZGVzY3JpYmVzIHRoZSBjdXJ2ZS4gVmFsdWVzXG5cdFx0ICogaW4gdGhlIGFycmF5IGFyZSBldmVubHkgc3ViZGl2aWRlZCBhbmQgbGluZWFybHlcblx0XHQgKiBpbnRlcnBvbGF0ZWQgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIGF0dGFjay5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5FbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfEFycmF5fVxuXHRcdCAqIEBuYW1lIGF0dGFja0N1cnZlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBlbnYuYXR0YWNrQ3VydmUgPSBcImxpbmVhclwiO1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gYWxzbyBiZSBhbiBhcnJheVxuXHRcdCAqIGVudi5hdHRhY2tDdXJ2ZSA9IFswLCAwLjIsIDAuMywgMC40LCAxXVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLCAnYXR0YWNrQ3VydmUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzU3RyaW5nKHRoaXMuX2F0dGFja0N1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFja0N1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNBcnJheSh0aGlzLl9hdHRhY2tDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vbG9vayB1cCB0aGUgbmFtZSBpbiB0aGUgY3VydmVzIGFycmF5XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB0eXBlIGluIFRvbmUuRW52ZWxvcGUuVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGVbdHlwZV0uSW4gPT09IHRoaXMuX2F0dGFja0N1cnZlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZSBhcnJheVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFja0N1cnZlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjdXJ2ZSkge1xuXHQgICAgICAgICAgICAvL2NoZWNrIGlmIGl0J3MgYSB2YWxpZCB0eXBlXG5cdCAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGUuaGFzT3duUHJvcGVydHkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY3VydmVEZWYgPSBUb25lLkVudmVsb3BlLlR5cGVbY3VydmVdO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QoY3VydmVEZWYpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBjdXJ2ZURlZi5Jbjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBjdXJ2ZURlZjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkVudmVsb3BlOiBpbnZhbGlkIGN1cnZlOiAnICsgY3VydmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2hhcGUgb2YgdGhlIHJlbGVhc2UuIFNlZSB0aGUgYXR0YWNrIGN1cnZlIHR5cGVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd8QXJyYXl9XG5cdFx0ICogQG5hbWUgcmVsZWFzZUN1cnZlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBlbnYucmVsZWFzZUN1cnZlID0gXCJsaW5lYXJcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkVudmVsb3BlLnByb3RvdHlwZSwgJ3JlbGVhc2VDdXJ2ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNTdHJpbmcodGhpcy5fcmVsZWFzZUN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbGVhc2VDdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkodGhpcy5fcmVsZWFzZUN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgLy9sb29rIHVwIHRoZSBuYW1lIGluIHRoZSBjdXJ2ZXMgYXJyYXlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHR5cGUgaW4gVG9uZS5FbnZlbG9wZS5UeXBlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuRW52ZWxvcGUuVHlwZVt0eXBlXS5PdXQgPT09IHRoaXMuX3JlbGVhc2VDdXJ2ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvL290aGVyd2lzZSBqdXN0IHJldHVybiB0aGUgYXJyYXlcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlQ3VydmU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIC8vY2hlY2sgaWYgaXQncyBhIHZhbGlkIHR5cGVcblx0ICAgICAgICAgICAgaWYgKFRvbmUuRW52ZWxvcGUuVHlwZS5oYXNPd25Qcm9wZXJ0eShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjdXJ2ZURlZiA9IFRvbmUuRW52ZWxvcGUuVHlwZVtjdXJ2ZV07XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChjdXJ2ZURlZikpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBjdXJ2ZURlZi5PdXQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IGN1cnZlRGVmO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNBcnJheShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkVudmVsb3BlOiBpbnZhbGlkIGN1cnZlOiAnICsgY3VydmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrL2RlY2F5IHBvcnRpb24gb2YgdGhlIEFEU1IgZW52ZWxvcGUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgYXR0YWNrIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgZW52ZWxvcGUgc2NhbGVzIHRoZSB2YWxlcy5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgYmV0d2VlbiAwLTFcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy90cmlnZ2VyIHRoZSBhdHRhY2sgMC41IHNlY29uZHMgZnJvbSBub3cgd2l0aCBhIHZlbG9jaXR5IG9mIDAuMlxuXHRcdCAqICBlbnYudHJpZ2dlckF0dGFjayhcIiswLjVcIiwgMC4yKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsQXR0YWNrID0gdGhpcy50b1NlY29uZHModGhpcy5hdHRhY2spO1xuXHQgICAgICAgIHZhciBhdHRhY2sgPSBvcmlnaW5hbEF0dGFjaztcblx0ICAgICAgICB2YXIgZGVjYXkgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLmRlY2F5KTtcblx0ICAgICAgICB2ZWxvY2l0eSA9IFRvbmUuZGVmYXVsdEFyZyh2ZWxvY2l0eSwgMSk7XG5cdCAgICAgICAgLy9jaGVjayBpZiBpdCdzIG5vdCBhIGNvbXBsZXRlIGF0dGFja1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPiAwKSB7XG5cdCAgICAgICAgICAgIC8vc3VidHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgZnJvbSB0aGUgYXR0YWNrIHRpbWVcblx0ICAgICAgICAgICAgdmFyIGF0dGFja1JhdGUgPSAxIC8gYXR0YWNrO1xuXHQgICAgICAgICAgICB2YXIgcmVtYWluaW5nRGlzdGFuY2UgPSAxIC0gY3VycmVudFZhbHVlO1xuXHQgICAgICAgICAgICAvL3RoZSBhdHRhY2sgaXMgbm93IHRoZSByZW1haW5pbmcgdGltZVxuXHQgICAgICAgICAgICBhdHRhY2sgPSByZW1haW5pbmdEaXN0YW5jZSAvIGF0dGFja1JhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYXR0YWNrXG5cdCAgICAgICAgaWYgKHRoaXMuX2F0dGFja0N1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICB0aGlzLl9zaWcubGluZWFyUmFtcFRvKHZlbG9jaXR5LCBhdHRhY2ssIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYXR0YWNrQ3VydmUgPT09ICdleHBvbmVudGlhbCcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLnRhcmdldFJhbXBUbyh2ZWxvY2l0eSwgYXR0YWNrLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGF0dGFjayA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgICAgIHZhciBjdXJ2ZSA9IHRoaXMuX2F0dGFja0N1cnZlO1xuXHQgICAgICAgICAgICAvL3Rha2Ugb25seSBhIHBvcnRpb24gb2YgdGhlIGN1cnZlXG5cdCAgICAgICAgICAgIGlmIChhdHRhY2sgPCBvcmlnaW5hbEF0dGFjaykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnRDb21wbGV0ZSA9IDEgLSBhdHRhY2sgLyBvcmlnaW5hbEF0dGFjaztcblx0ICAgICAgICAgICAgICAgIHZhciBzbGljZUluZGV4ID0gTWF0aC5mbG9vcihwZXJjZW50Q29tcGxldGUgKiB0aGlzLl9hdHRhY2tDdXJ2ZS5sZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgY3VydmUgPSB0aGlzLl9hdHRhY2tDdXJ2ZS5zbGljZShzbGljZUluZGV4KTtcblx0ICAgICAgICAgICAgICAgIC8vdGhlIGZpcnN0IGluZGV4IGlzIHRoZSBjdXJyZW50IHZhbHVlXG5cdCAgICAgICAgICAgICAgICBjdXJ2ZVswXSA9IGN1cnJlbnRWYWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9zaWcuc2V0VmFsdWVDdXJ2ZUF0VGltZShjdXJ2ZSwgdGltZSwgYXR0YWNrLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vZGVjYXlcblx0ICAgICAgICBpZiAoZGVjYXkpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLnRhcmdldFJhbXBUbyh2ZWxvY2l0eSAqIHRoaXMuc3VzdGFpbiwgZGVjYXksIGF0dGFjayArIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlcnMgdGhlIHJlbGVhc2Ugb2YgdGhlIGVudmVsb3BlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICAvL3RyaWdnZXIgcmVsZWFzZSBpbW1lZGlhdGVseVxuXHRcdCAqICBlbnYudHJpZ2dlclJlbGVhc2UoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA+IDApIHtcblx0ICAgICAgICAgICAgdmFyIHJlbGVhc2UgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLnJlbGVhc2UpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fcmVsZWFzZUN1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2lnLmxpbmVhclJhbXBUbygwLCByZWxlYXNlLCB0aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9yZWxlYXNlQ3VydmUgPT09ICdleHBvbmVudGlhbCcpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NpZy50YXJnZXRSYW1wVG8oMCwgcmVsZWFzZSwgdGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY3VydmUgPSB0aGlzLl9yZWxlYXNlQ3VydmU7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZy5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZy5zZXRWYWx1ZUN1cnZlQXRUaW1lKGN1cnZlLCB0aW1lLCByZWxlYXNlLCBjdXJyZW50VmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gVGhpcyB3aWxsXG5cdFx0ICogIHJldHVybiB0aGUgdW5jb252ZXJ0ZWQgKHJhdykgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBUaGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zaWcuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRyaWdnZXJBdHRhY2tSZWxlYXNlIGlzIHNob3J0aGFuZCBmb3IgdHJpZ2dlckF0dGFjaywgdGhlbiB3YWl0aW5nXG5cdFx0ICogIHNvbWUgZHVyYXRpb24sIHRoZW4gdHJpZ2dlclJlbGVhc2UuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gZHVyYXRpb24gVGhlIGR1cmF0aW9uIG9mIHRoZSBzdXN0YWluLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgYXR0YWNrIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgdGhlIGF0dGFjayBhbmQgdGhlbiB0aGUgcmVsZWFzZSBhZnRlciAwLjYgc2Vjb25kcy5cblx0XHQgKiBlbnYudHJpZ2dlckF0dGFja1JlbGVhc2UoMC42KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbHMgYWxsIHNjaGVkdWxlZCBlbnZlbG9wZSBjaGFuZ2VzIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBhZnRlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5fc2lnLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhhZnRlcik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEJvcnJvd3MgdGhlIGNvbm5lY3QgbWV0aG9kIGZyb20gVG9uZS5TaWduYWwuXG5cdFx0ICogIEBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuY29ubmVjdCA9IFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdDtcblx0ICAgIC8qKlxuXHQgXHQgKiAgR2VuZXJhdGUgc29tZSBjb21wbGV4IGVudmVsb3BlIGN1cnZlcy5cblx0IFx0ICovXG5cdCAgICAoZnVuY3Rpb24gX2NyZWF0ZUN1cnZlcygpIHtcblx0ICAgICAgICB2YXIgY3VydmVMZW4gPSAxMjg7XG5cdCAgICAgICAgdmFyIGksIGs7XG5cdCAgICAgICAgLy9jb3NpbmUgY3VydmVcblx0ICAgICAgICB2YXIgY29zaW5lQ3VydmUgPSBbXTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBjb3NpbmVDdXJ2ZVtpXSA9IE1hdGguc2luKGkgLyAoY3VydmVMZW4gLSAxKSAqIChNYXRoLlBJIC8gMikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JpcHBsZSBjdXJ2ZVxuXHQgICAgICAgIHZhciByaXBwbGVDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIHZhciByaXBwbGVDdXJ2ZUZyZXEgPSA2LjQ7XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuIC0gMTsgaSsrKSB7XG5cdCAgICAgICAgICAgIGsgPSBpIC8gKGN1cnZlTGVuIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciBzaW5lV2F2ZSA9IE1hdGguc2luKGsgKiAoTWF0aC5QSSAqIDIpICogcmlwcGxlQ3VydmVGcmVxIC0gTWF0aC5QSSAvIDIpICsgMTtcblx0ICAgICAgICAgICAgcmlwcGxlQ3VydmVbaV0gPSBzaW5lV2F2ZSAvIDEwICsgayAqIDAuODM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJpcHBsZUN1cnZlW2N1cnZlTGVuIC0gMV0gPSAxO1xuXHQgICAgICAgIC8vc3RhaXJzIGN1cnZlXG5cdCAgICAgICAgdmFyIHN0YWlyc0N1cnZlID0gW107XG5cdCAgICAgICAgdmFyIHN0ZXBzID0gNTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBzdGFpcnNDdXJ2ZVtpXSA9IE1hdGguY2VpbChpIC8gKGN1cnZlTGVuIC0gMSkgKiBzdGVwcykgLyBzdGVwcztcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9pbi1vdXQgZWFzaW5nIGN1cnZlXG5cdCAgICAgICAgdmFyIHNpbmVDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGsgPSBpIC8gKGN1cnZlTGVuIC0gMSk7XG5cdCAgICAgICAgICAgIHNpbmVDdXJ2ZVtpXSA9IDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hIGJvdW5jZSBjdXJ2ZVxuXHQgICAgICAgIHZhciBib3VuY2VDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGsgPSBpIC8gKGN1cnZlTGVuIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciBmcmVxID0gTWF0aC5wb3coaywgMykgKiA0ICsgMC4yO1xuXHQgICAgICAgICAgICB2YXIgdmFsID0gTWF0aC5jb3MoZnJlcSAqIE1hdGguUEkgKiAyICogayk7XG5cdCAgICAgICAgICAgIGJvdW5jZUN1cnZlW2ldID0gTWF0aC5hYnModmFsICogKDEgLSBrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEludmVydCBhIHZhbHVlIGN1cnZlIHRvIG1ha2UgaXQgd29yayBmb3IgdGhlIHJlbGVhc2Vcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgZnVuY3Rpb24gaW52ZXJ0Q3VydmUoY3VydmUpIHtcblx0ICAgICAgICAgICAgdmFyIG91dCA9IG5ldyBBcnJheShjdXJ2ZS5sZW5ndGgpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGN1cnZlLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICBvdXRbal0gPSAxIC0gY3VydmVbal07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIG91dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcmV2ZXJzZSB0aGUgY3VydmVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgZnVuY3Rpb24gcmV2ZXJzZUN1cnZlKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBjdXJ2ZS5zbGljZSgwKS5yZXZlcnNlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGF0dGFjayBhbmQgcmVsZWFzZSBjdXJ2ZSBhcnJheXNcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5UeXBlID0ge1xuXHQgICAgICAgICAgICAnbGluZWFyJzogJ2xpbmVhcicsXG5cdCAgICAgICAgICAgICdleHBvbmVudGlhbCc6ICdleHBvbmVudGlhbCcsXG5cdCAgICAgICAgICAgICdib3VuY2UnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogaW52ZXJ0Q3VydmUoYm91bmNlQ3VydmUpLFxuXHQgICAgICAgICAgICAgICAgT3V0OiBib3VuY2VDdXJ2ZVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnY29zaW5lJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IGNvc2luZUN1cnZlLFxuXHQgICAgICAgICAgICAgICAgT3V0OiByZXZlcnNlQ3VydmUoY29zaW5lQ3VydmUpXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdzdGVwJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IHN0YWlyc0N1cnZlLFxuXHQgICAgICAgICAgICAgICAgT3V0OiBpbnZlcnRDdXJ2ZShzdGFpcnNDdXJ2ZSlcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ3JpcHBsZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiByaXBwbGVDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogaW52ZXJ0Q3VydmUocmlwcGxlQ3VydmUpXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdzaW5lJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IHNpbmVDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogaW52ZXJ0Q3VydmUoc2luZUN1cnZlKVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfTtcblx0ICAgIH0oKSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGlzY29ubmVjdCBhbmQgZGlzcG9zZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaWcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NpZyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSBpcyBhIFRvbmUuRW52ZWxvcGUgY29ubmVjdGVkIHRvIGEgZ2FpbiBub2RlLlxuXHRcdCAqICAgICAgICAgIFVubGlrZSBUb25lLkVudmVsb3BlLCB3aGljaCBvdXRwdXRzIHRoZSBlbnZlbG9wZSdzIHZhbHVlLCBUb25lLkFtcGxpdHVkZUVudmVsb3BlIGFjY2VwdHNcblx0XHQgKiAgICAgICAgICBhbiBhdWRpbyBzaWduYWwgYXMgdGhlIGlucHV0IGFuZCB3aWxsIGFwcGx5IHRoZSBlbnZlbG9wZSB0byB0aGUgYW1wbGl0dWRlXG5cdFx0ICogICAgICAgICAgb2YgdGhlIHNpZ25hbC4gUmVhZCBtb3JlIGFib3V0IEFEU1IgRW52ZWxvcGVzIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5bnRoZXNpemVyI0FEU1JfZW52ZWxvcGUpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbnZlbG9wZX1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja10gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGUgdG8gZ28gZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgdG8gaXQncyBtYXhpbXVtIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdFRoZSBwZXJpb2Qgb2YgdGltZSBhZnRlciB0aGUgYXR0YWNrIHRoYXQgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICBcdHRvIGZhbGwgdG8gdGhlIHN1c3RhaW4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzdXN0YWluXVx0VGhlIHBlcmNlbnQgb2YgdGhlIG1heGltdW0gdmFsdWUgdGhhdCB0aGUgZW52ZWxvcGUgcmVzdHMgYXQgdW50aWxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR0aGUgcmVsZWFzZSBpcyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHRUaGUgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkIGl0IHRha2VzIHRvIHJlYWNoIDAuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGFtcEVudiA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKHtcblx0XHQgKiBcdFwiYXR0YWNrXCI6IDAuMSxcblx0XHQgKiBcdFwiZGVjYXlcIjogMC4yLFxuXHRcdCAqIFx0XCJzdXN0YWluXCI6IDEuMCxcblx0XHQgKiBcdFwicmVsZWFzZVwiOiAwLjhcblx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdCAqIC8vY3JlYXRlIGFuIG9zY2lsbGF0b3IgYW5kIGNvbm5lY3QgaXRcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QoYW1wRW52KS5zdGFydCgpO1xuXHRcdCAqIC8vdHJpZ2dlciB0aGUgZW52ZWxvcGVzIGF0dGFjayBhbmQgcmVsZWFzZSBcIjh0XCIgYXBhcnRcblx0XHQgKiBhbXBFbnYudHJpZ2dlckF0dGFja1JlbGVhc2UoXCI4dFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dCBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgdGhpcy5fc2lnLmNvbm5lY3QodGhpcy5vdXRwdXQuZ2Fpbik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFtcGxpdHVkZUVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEFuYWx5c2VyTm9kZS5nZXRGbG9hdFRpbWVEb21haW5EYXRhIHBvbHlmaWxsXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIUFuYWx5c2VyTm9kZS5wcm90b3R5cGUuZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSkge1xuXHQgICAgICAgICAgICAvL3JlZmVyZW5jZWQgaHR0cHM6Ly9naXRodWIuY29tL21vaGF5b25hby9nZXQtZmxvYXQtdGltZS1kb21haW4tZGF0YVxuXHQgICAgICAgICAgICBBbmFseXNlck5vZGUucHJvdG90eXBlLmdldEZsb2F0VGltZURvbWFpbkRhdGEgPSBmdW5jdGlvbiAoYXJyYXkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB1aW50OCA9IG5ldyBVaW50OEFycmF5KGFycmF5Lmxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmdldEJ5dGVUaW1lRG9tYWluRGF0YSh1aW50OCk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVpbnQ4Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSAodWludDhbaV0gLSAxMjgpIC8gMTI4O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIFdlYiBBdWRpbydzXG5cdFx0ICogICAgICAgICAgW0FuYWx5c2VyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyNpZGwtZGVmLUFuYWx5c2VyTm9kZSkuXG5cdFx0ICogICAgICAgICAgRXh0cmFjdHMgRkZUIG9yIFdhdmVmb3JtIGRhdGEgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nPX0gdHlwZSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGFuYWx5c2lzLCBlaXRoZXIgXCJmZnRcIiwgb3IgXCJ3YXZlZm9ybVwiLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHNpemUgVGhlIHNpemUgb2YgdGhlIEZGVC4gVmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnc2l6ZSdcblx0ICAgICAgICBdLCBUb25lLkFuYWx5c2VyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0FuYWx5c2VyTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFuYWx5c2lzIHR5cGVcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBidWZmZXIgdGhhdCB0aGUgRkZUIGRhdGEgaXMgd3JpdHRlbiB0b1xuXHRcdFx0ICogIEB0eXBlIHtUeXBlZEFycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIC8vc2V0IHRoZSB2YWx1ZXMgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5zaXplID0gb3B0aW9ucy5zaXplO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFuYWx5c2VyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3NpemUnOiAxMDI0LFxuXHQgICAgICAgICd0eXBlJzogJ2ZmdCcsXG5cdCAgICAgICAgJ3Ntb290aGluZyc6IDAuOFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQb3NzaWJsZSByZXR1cm4gdHlwZXMgb2YgYW5hbHlzZXIuZ2V0VmFsdWUoKVxuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlci5UeXBlID0ge1xuXHQgICAgICAgIFdhdmVmb3JtOiAnd2F2ZWZvcm0nLFxuXHQgICAgICAgIEZGVDogJ2ZmdCdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUnVuIHRoZSBhbmFseXNpcyBnaXZlbiB0aGUgY3VycmVudCBzZXR0aW5ncyBhbmQgcmV0dXJuIHRoZVxuXHRcdCAqICByZXN1bHQgYXMgYSBUeXBlZEFycmF5LlxuXHRcdCAqICBAcmV0dXJucyB7VHlwZWRBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkFuYWx5c2VyLlR5cGUuRkZUKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLmdldEZsb2F0RnJlcXVlbmN5RGF0YSh0aGlzLl9idWZmZXIpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5BbmFseXNlci5UeXBlLldhdmVmb3JtKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLmdldEZsb2F0VGltZURvbWFpbkRhdGEodGhpcy5fYnVmZmVyKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNpemUgb2YgYW5hbHlzaXMuIFRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkFuYWx5c2VyI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BbmFseXNlci5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291bnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLmZmdFNpemUgPSBzaXplICogMjtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShzaXplKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYW5hbHlzaXMgZnVuY3Rpb24gcmV0dXJuZWQgYnkgYW5hbHlzZXIuZ2V0VmFsdWUoKSwgZWl0aGVyIFwiZmZ0XCIgb3IgXCJ3YXZlZm9ybVwiLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5BbmFseXNlciNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlICE9PSBUb25lLkFuYWx5c2VyLlR5cGUuV2F2ZWZvcm0gJiYgdHlwZSAhPT0gVG9uZS5BbmFseXNlci5UeXBlLkZGVCkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5BbmFseXNlcjogaW52YWxpZCB0eXBlOiAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgMCByZXByZXNlbnRzIG5vIHRpbWUgYXZlcmFnaW5nIHdpdGggdGhlIGxhc3QgYW5hbHlzaXMgZnJhbWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkFuYWx5c2VyI1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHNtb290aGluZ1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLCAnc21vb3RoaW5nJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc21vb3RoaW5nVGltZUNvbnN0YW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudCA9IHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQW5hbHlzZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFuYWx5c2VyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Db21wcmVzc29yIGlzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCB0aGUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICBbRHluYW1pY3NDb21wcmVzc29yTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtZHluYW1pY3Njb21wcmVzc29ybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICAgICAgICAgQ29tcHJlc3Npb24gcmVkdWNlcyB0aGUgdm9sdW1lIG9mIGxvdWQgc291bmRzIG9yIGFtcGxpZmllcyBxdWlldCBzb3VuZHNcblx0XHQgKiAgICAgICAgIGJ5IG5hcnJvd2luZyBvciBcImNvbXByZXNzaW5nXCIgYW4gYXVkaW8gc2lnbmFsJ3MgZHluYW1pYyByYW5nZS5cblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EeW5hbWljX3JhbmdlX2NvbXByZXNzaW9uKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfE9iamVjdH0gW3RocmVzaG9sZF0gVGhlIHZhbHVlIGFib3ZlIHdoaWNoIHRoZSBjb21wcmVzc2lvbiBzdGFydHMgdG8gYmUgYXBwbGllZC5cblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gW3JhdGlvXSBUaGUgZ2FpbiByZWR1Y3Rpb24gcmF0aW8uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNvbXAgPSBuZXcgVG9uZS5Db21wcmVzc29yKC0zMCwgMyk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbXByZXNzb3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndGhyZXNob2xkJyxcblx0ICAgICAgICAgICAgJ3JhdGlvJ1xuXHQgICAgICAgIF0sIFRvbmUuQ29tcHJlc3Nvcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29tcHJlc3NvciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0R5bmFtaWNzQ29tcHJlc3Nvck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHRocmVzaG9sZCB2YXVlXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9jb21wcmVzc29yLnRocmVzaG9sZCxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlY2liZWxzLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGF0dGFjayBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX2NvbXByZXNzb3IuYXR0YWNrLCBUb25lLlR5cGUuVGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJlbGVhc2UgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fY29tcHJlc3Nvci5yZWxlYXNlLCBUb25lLlR5cGUuVGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGtuZWUgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMua25lZSA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fY29tcHJlc3Nvci5rbmVlLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVjaWJlbHMsXG5cdCAgICAgICAgICAgICdjb252ZXJ0JzogZmFsc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmF0aW8gdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmF0aW8gPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2NvbXByZXNzb3IucmF0aW8sXG5cdCAgICAgICAgICAgICdjb252ZXJ0JzogZmFsc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL3NldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdrbmVlJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnLFxuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JhdGlvJyxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnNldChvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNvbXByZXNzb3IsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db21wcmVzc29yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdyYXRpbyc6IDEyLFxuXHQgICAgICAgICd0aHJlc2hvbGQnOiAtMjQsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAwLjI1LFxuXHQgICAgICAgICdhdHRhY2snOiAwLjAwMyxcblx0ICAgICAgICAna25lZSc6IDMwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNvbXByZXNzb3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29tcHJlc3Nvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2tuZWUnLFxuXHQgICAgICAgICAgICAncmVsZWFzZScsXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAncmF0aW8nLFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuYXR0YWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJlbGVhc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yYXRpby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yYXRpbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5rbmVlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmtuZWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNvbXByZXNzb3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBZGQgYSBzaWduYWwgYW5kIGEgbnVtYmVyIG9yIHR3byBzaWduYWxzLiBXaGVuIG5vIHZhbHVlIGlzXG5cdFx0ICogICAgICAgICBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IsIFRvbmUuQWRkIHdpbGwgc3VtIDxjb2RlPmlucHV0WzBdPC9jb2RlPlxuXHRcdCAqICAgICAgICAgYW5kIDxjb2RlPmlucHV0WzFdPC9jb2RlPi4gSWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IsIFxuXHRcdCAqICAgICAgICAgdGhlIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGlucHV0LlxuXHRcdCAqICBcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZSBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgVG9uZS5BZGQgd2lsbCBzdW0gdGhlIGZpcnN0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNlY29uZCBpbnB1dHMuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMik7XG5cdFx0ICogdmFyIGFkZCA9IG5ldyBUb25lLkFkZCgyKTtcblx0XHQgKiBzaWduYWwuY29ubmVjdChhZGQpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBhZGQgZXF1YWxzIDRcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2lmIGNvbnN0cnVjdGVkIHdpdGggbm8gYXJndW1lbnRzXG5cdFx0ICogLy9pdCB3aWxsIGFkZCB0aGUgZmlyc3QgYW5kIHNlY29uZCBpbnB1dHNcblx0XHQgKiB2YXIgYWRkID0gbmV3IFRvbmUuQWRkKCk7XG5cdFx0ICogdmFyIHNpZzAgPSBuZXcgVG9uZS5TaWduYWwoMykuY29ubmVjdChhZGQsIDAsIDApO1xuXHRcdCAqIHZhciBzaWcxID0gbmV3IFRvbmUuU2lnbmFsKDQpLmNvbm5lY3QoYWRkLCAwLCAxKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgYWRkIGVxdWFscyA3LiBcblx0XHQgKi9cblx0ICAgIFRvbmUuQWRkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHN1bW1pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VtID0gdGhpcy5pbnB1dFswXSA9IHRoaXMuaW5wdXRbMV0gPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLlNpZ25hbCh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uY29ubmVjdCh0aGlzLl9zdW0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQWRkLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFkZH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BZGQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdW0uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQWRkO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIE11bHRpcGx5IHR3byBpbmNvbWluZyBzaWduYWxzLiBPciwgaWYgYSBudW1iZXIgaXMgZ2l2ZW4gaW4gdGhlIGNvbnN0cnVjdG9yLFxuXHRcdCAqICAgICAgICAgIG11bHRpcGxpZXMgdGhlIGluY29taW5nIHNpZ25hbCBieSB0aGF0IHZhbHVlLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWUgQ29uc3RhbnQgdmFsdWUgdG8gbXVsdGlwbGUuIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgcmV0dXJuIHRoZSBwcm9kdWN0IG9mIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGlucHV0c1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0XHQgKiB2YXIgc2lnQSA9IG5ldyBUb25lLlNpZ25hbCgzKTtcblx0XHQgKiB2YXIgc2lnQiA9IG5ldyBUb25lLlNpZ25hbCg0KTtcblx0XHQgKiBzaWdBLmNvbm5lY3QobXVsdCwgMCwgMCk7XG5cdFx0ICogc2lnQi5jb25uZWN0KG11bHQsIDAsIDEpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIG11bHQgaXMgMTIuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgxMCk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgyKS5jb25uZWN0KG11bHQpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBtdWx0IGlzIDIwLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aXBseSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dCBub2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvdXRwdXQgbm9kZVxuXHRcdFx0ICogIGl0IGlzIGFsc28gdGhlIEdhaW5Ob2RlIHdoaWNoIGhhbmRsZXMgdGhlIHNjYWxpbmcgb2YgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKlxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdCA9IHRoaXMuaW5wdXRbMF0gPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2NhbGluZyBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9QYXJhbX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0WzFdID0gdGhpcy5vdXRwdXQuZ2Fpbjtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKHZhbHVlLCAwKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk11bHRpcGx5LCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTXVsdGlwbHl9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGlwbHkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9tdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTXVsdGlwbHk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBOZWdhdGUgdGhlIGluY29taW5nIHNpZ25hbC4gaS5lLiBhbiBpbnB1dCBzaWduYWwgb2YgMTAgd2lsbCBvdXRwdXQgLTEwXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG5lZyA9IG5ldyBUb25lLk5lZ2F0ZSgpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoLTIpLmNvbm5lY3QobmVnKTtcblx0XHQgKiAvL291dHB1dCBvZiBuZWcgaXMgcG9zaXRpdmUgMi4gXG5cdFx0ICovXG5cdCAgICBUb25lLk5lZ2F0ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBuZWdhdGlvbiBpcyBkb25lIGJ5IG11bHRpcGx5aW5nIGJ5IC0xXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTXVsdGlwbHkoLTEpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTmVnYXRlLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5lZ2F0ZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5OZWdhdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5OZWdhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTdWJ0cmFjdCB0aGUgc2lnbmFsIGNvbm5lY3RlZCB0byA8Y29kZT5pbnB1dFsxXTwvY29kZT4gZnJvbSB0aGUgc2lnbmFsIGNvbm5lY3RlZCBcblx0XHQgKiAgICAgICAgIHRvIDxjb2RlPmlucHV0WzBdPC9jb2RlPi4gSWYgYW4gYXJndW1lbnQgaXMgcHJvdmlkZWQgaW4gdGhlIGNvbnN0cnVjdG9yLCB0aGUgXG5cdFx0ICogICAgICAgICBzaWduYWxzIDxjb2RlPi52YWx1ZTwvY29kZT4gd2lsbCBiZSBzdWJ0cmFjdGVkIGZyb20gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlIFRoZSB2YWx1ZSB0byBzdWJ0cmFjdCBmcm9tIHRoZSBpbmNvbWluZyBzaWduYWwuIElmIHRoZSB2YWx1ZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG9taXR0ZWQsIGl0IHdpbGwgc3VidHJhY3QgdGhlIHNlY29uZCBzaWduYWwgZnJvbSB0aGUgZmlyc3QuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN1YiA9IG5ldyBUb25lLlN1YnRyYWN0KDEpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoNCkuY29ubmVjdChzdWIpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBzdWIgaXMgMy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN1YiA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdFx0ICogdmFyIHNpZ0EgPSBuZXcgVG9uZS5TaWduYWwoMTApO1xuXHRcdCAqIHZhciBzaWdCID0gbmV3IFRvbmUuU2lnbmFsKDIuNSk7XG5cdFx0ICogc2lnQS5jb25uZWN0KHN1YiwgMCwgMCk7XG5cdFx0ICogc2lnQi5jb25uZWN0KHN1YiwgMCwgMSk7XG5cdFx0ICogLy9vdXRwdXQgb2Ygc3ViIGlzIDcuNVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdWJ0cmFjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzdW1taW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IHRoaXMuaW5wdXRbMF0gPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBuZWdhdGUgdGhlIGlucHV0IG9mIHRoZSBzZWNvbmQgaW5wdXQgYmVmb3JlIGNvbm5lY3RpbmcgaXRcblx0XHRcdCAqICB0byB0aGUgc3VtbWluZyBub2RlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk5lZ2F0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbmVnID0gbmV3IFRvbmUuTmVnYXRlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIHZhbHVlIGlzIHNldFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuU2lnbmFsKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jaGFpbih0aGlzLl9uZWcsIHRoaXMuX3N1bSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdWJ0cmFjdCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWxCYXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN1YnRyYWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbmVnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9uZWcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N1bS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc3VtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdWJ0cmFjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIENvbnZlcnQgYW4gaW5jb21pbmcgc2lnbmFsIGJldHdlZW4gMCwgMSB0byBhbiBlcXVhbCBwb3dlciBnYWluIHNjYWxlLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBlcVBvd0dhaW4gPSBuZXcgVG9uZS5FcXVhbFBvd2VyR2FpbigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FcXVhbFBvd2VyR2FpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lcVBvd2VyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyh2YWwpIDwgMC4wMDEpIHtcblx0ICAgICAgICAgICAgICAgIC8vc2hvdWxkIG91dHB1dCAwIHdoZW4gaW5wdXQgaXMgMFxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5lcXVhbFBvd2VyU2NhbGUodmFsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgNDA5Nik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FcXVhbFBvd2VyR2FpbiwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FcXVhbFBvd2VyR2Fpbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FcXVhbFBvd2VyR2Fpbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9lcVBvd2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lcVBvd2VyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FcXVhbFBvd2VyR2Fpbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgIFRvbmUuQ3Jvc3NmYWRlIHByb3ZpZGVzIGVxdWFsIHBvd2VyIGZhZGluZyBiZXR3ZWVuIHR3byBpbnB1dHMuXG5cdFx0ICogICAgICAgICBNb3JlIG9uIGNyb3NzZmFkaW5nIHRlY2huaXF1ZSBbaGVyZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmFkZV8oYXVkaW9fZW5naW5lZXJpbmcpI0Nyb3NzZmFkaW5nKS5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiBAcGFyYW0ge05vcm1hbFJhbmdlfSBbaW5pdGlhbEZhZGU9MC41XVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIGNyb3NzRmFkZSA9IG5ldyBUb25lLkNyb3NzRmFkZSgwLjUpO1xuXHRcdCAqIC8vY29ubmVjdCBlZmZlY3QgQSB0byBjcm9zc2ZhZGUgZnJvbVxuXHRcdCAqIC8vZWZmZWN0IG91dHB1dCAwIHRvIGNyb3NzZmFkZSBpbnB1dCAwXG5cdFx0ICogZWZmZWN0QS5jb25uZWN0KGNyb3NzRmFkZSwgMCwgMCk7XG5cdFx0ICogLy9jb25uZWN0IGVmZmVjdCBCIHRvIGNyb3NzZmFkZSBmcm9tXG5cdFx0ICogLy9lZmZlY3Qgb3V0cHV0IDAgdG8gY3Jvc3NmYWRlIGlucHV0IDFcblx0XHQgKiBlZmZlY3RCLmNvbm5lY3QoY3Jvc3NGYWRlLCAwLCAxKTtcblx0XHQgKiBjcm9zc0ZhZGUuZmFkZS52YWx1ZSA9IDA7XG5cdFx0ICogLy8gXiBvbmx5IGVmZmVjdEEgaXMgb3V0cHV0XG5cdFx0ICogY3Jvc3NGYWRlLmZhZGUudmFsdWUgPSAxO1xuXHRcdCAqIC8vIF4gb25seSBlZmZlY3RCIGlzIG91dHB1dFxuXHRcdCAqIGNyb3NzRmFkZS5mYWRlLnZhbHVlID0gMC41O1xuXHRcdCAqIC8vIF4gdGhlIHR3byBzaWduYWxzIGFyZSBtaXhlZCBlcXVhbGx5LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Dcm9zc0ZhZGUgPSBmdW5jdGlvbiAoaW5pdGlhbEZhZGUpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+aW5wdXRbMF08L2NvZGU+LlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmEgPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFsxXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYiA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBcdFRoZSBtaXggYmV0d2VlbiB0aGUgdHdvIGlucHV0cy4gQSBmYWRlIHZhbHVlIG9mIDBcblx0XHRcdCAqIFx0d2lsbCBvdXRwdXQgMTAwJSA8Y29kZT5pbnB1dFswXTwvY29kZT4gYW5kXG5cdFx0XHQgKiBcdGEgdmFsdWUgb2YgMSB3aWxsIG91dHB1dCAxMDAlIDxjb2RlPmlucHV0WzFdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlID0gbmV3IFRvbmUuU2lnbmFsKFRvbmUuZGVmYXVsdEFyZyhpbml0aWFsRmFkZSwgMC41KSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBlcXVhbCBwb3dlciBnYWluIGNyb3NzIGZhZGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkVxdWFsUG93ZXJHYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckEgPSBuZXcgVG9uZS5FcXVhbFBvd2VyR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGVxdWFsIHBvd2VyIGdhaW4gY3Jvc3MgZmFkZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRXF1YWxQb3dlckdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQiA9IG5ldyBUb25lLkVxdWFsUG93ZXJHYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaW52ZXJ0IHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25lID0gdGhpcy5jb250ZXh0LmdldENvbnN0YW50KDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGludmVydCB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ludmVydCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuYS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLmIuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5mYWRlLmNoYWluKHRoaXMuX2VxdWFsUG93ZXJCLCB0aGlzLmIuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fb25lLmNvbm5lY3QodGhpcy5faW52ZXJ0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLmZhZGUuY29ubmVjdCh0aGlzLl9pbnZlcnQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2ludmVydC5jaGFpbih0aGlzLl9lcXVhbFBvd2VyQSwgdGhpcy5hLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdmYWRlJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Dcm9zc0ZhZGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Dcm9zc0ZhZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3Jvc3NGYWRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2ZhZGUnKTtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJCLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mYWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZhZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ludmVydC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faW52ZXJ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vbmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuYS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5hID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ3Jvc3NGYWRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRmlsdGVyIGlzIGEgZmlsdGVyIHdoaWNoIGFsbG93cyBmb3IgYWxsIG9mIHRoZSBzYW1lIG5hdGl2ZSBtZXRob2RzXG5cdFx0ICogICAgICAgICAgYXMgdGhlIFtCaXF1YWRGaWx0ZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1iaXF1YWRmaWx0ZXJub2RlLWludGVyZmFjZSkuXG5cdFx0ICogICAgICAgICAgVG9uZS5GaWx0ZXIgaGFzIHRoZSBhZGRlZCBhYmlsaXR5IHRvIHNldCB0aGUgZmlsdGVyIHJvbGxvZmYgYXQgLTEyXG5cdFx0ICogICAgICAgICAgKGRlZmF1bHQpLCAtMjQgYW5kIC00OC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nPX0gdHlwZSBUaGUgdHlwZSBvZiBmaWx0ZXIuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gcm9sbG9mZiBUaGUgZHJvcCBpbiBkZWNpYmVscyBwZXIgb2N0YXZlIGFmdGVyIHRoZSBjdXRvZmYgZnJlcXVlbmN5LlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgY2hvaWNlczogLTEyLCAtMjQsIGFuZCAtNDhcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGZpbHRlciA9IG5ldyBUb25lLkZpbHRlcigyMDAsIFwiaGlnaHBhc3NcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdyb2xsb2ZmJ1xuXHQgICAgICAgIF0sIFRvbmUuRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmlsdGVyKHMpXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbCgwLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIG9mIHRoZSBmaWx0ZXIsIG9ubHkgdXNlZCBpbiBjZXJ0YWluIGZpbHRlciB0eXBlc1xuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5nYWluID0gbmV3IFRvbmUuU2lnbmFsKHtcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5nYWluLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIFEgb3IgUXVhbGl0eSBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLlEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0eXBlIG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7c3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSByb2xsb2ZmIHZhbHVlIG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yb2xsb2ZmID0gb3B0aW9ucy5yb2xsb2ZmO1xuXHQgICAgICAgIC8vc2V0IHRoZSByb2xsb2ZmO1xuXHQgICAgICAgIHRoaXMucm9sbG9mZiA9IG9wdGlvbnMucm9sbG9mZjtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZpbHRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICdsb3dwYXNzJyxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMzUwLFxuXHQgICAgICAgICdyb2xsb2ZmJzogLTEyLFxuXHQgICAgICAgICdRJzogMSxcblx0ICAgICAgICAnZ2Fpbic6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgZmlsdGVyLiBUeXBlczogXCJsb3dwYXNzXCIsIFwiaGlnaHBhc3NcIixcblx0XHQgKiBcImJhbmRwYXNzXCIsIFwibG93c2hlbGZcIiwgXCJoaWdoc2hlbGZcIiwgXCJub3RjaFwiLCBcImFsbHBhc3NcIiwgb3IgXCJwZWFraW5nXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmlsdGVyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB2YXIgdHlwZXMgPSBbXG5cdCAgICAgICAgICAgICAgICAnbG93cGFzcycsXG5cdCAgICAgICAgICAgICAgICAnaGlnaHBhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ2JhbmRwYXNzJyxcblx0ICAgICAgICAgICAgICAgICdsb3dzaGVsZicsXG5cdCAgICAgICAgICAgICAgICAnaGlnaHNoZWxmJyxcblx0ICAgICAgICAgICAgICAgICdub3RjaCcsXG5cdCAgICAgICAgICAgICAgICAnYWxscGFzcycsXG5cdCAgICAgICAgICAgICAgICAncGVha2luZydcblx0ICAgICAgICAgICAgXTtcblx0ICAgICAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLkZpbHRlcjogaW52YWxpZCB0eXBlICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcm9sbG9mZiBvZiB0aGUgZmlsdGVyIHdoaWNoIGlzIHRoZSBkcm9wIGluIGRiXG5cdFx0ICogcGVyIG9jdGF2ZS4gSW1wbGVtZW50ZWQgaW50ZXJuYWxseSBieSBjYXNjYWRpbmcgZmlsdGVycy5cblx0XHQgKiBPbmx5IGFjY2VwdHMgdGhlIHZhbHVlcyAtMTIsIC0yNCwgLTQ4IGFuZCAtOTYuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcm9sbG9mZlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmlsdGVyLnByb3RvdHlwZSwgJ3JvbGxvZmYnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb2xsb2ZmO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocm9sbG9mZikge1xuXHQgICAgICAgICAgICByb2xsb2ZmID0gcGFyc2VJbnQocm9sbG9mZiwgMTApO1xuXHQgICAgICAgICAgICB2YXIgcG9zc2liaWxpdGllcyA9IFtcblx0ICAgICAgICAgICAgICAgIC0xMixcblx0ICAgICAgICAgICAgICAgIC0yNCxcblx0ICAgICAgICAgICAgICAgIC00OCxcblx0ICAgICAgICAgICAgICAgIC05NlxuXHQgICAgICAgICAgICBdO1xuXHQgICAgICAgICAgICB2YXIgY2FzY2FkaW5nQ291bnQgPSBwb3NzaWJpbGl0aWVzLmluZGV4T2Yocm9sbG9mZik7XG5cdCAgICAgICAgICAgIC8vY2hlY2sgdGhlIHJvbGxvZmYgaXMgdmFsaWRcblx0ICAgICAgICAgICAgaWYgKGNhc2NhZGluZ0NvdW50ID09PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RvbmUuRmlsdGVyOiByb2xsb2ZmIGNhbiBvbmx5IGJlIC0xMiwgLTI0LCAtNDggb3IgLTk2Jyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgY2FzY2FkaW5nQ291bnQgKz0gMTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9sbG9mZiA9IHJvbGxvZmY7XG5cdCAgICAgICAgICAgIC8vZmlyc3QgZGlzY29ubmVjdCB0aGUgZmlsdGVycyBhbmQgdGhyb3cgdGhlbSBhd2F5XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXSA9IG51bGw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IG5ldyBBcnJheShjYXNjYWRpbmdDb3VudCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNvdW50ID0gMDsgY291bnQgPCBjYXNjYWRpbmdDb3VudDsgY291bnQrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGZpbHRlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgICAgIGZpbHRlci50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QoZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KGZpbHRlci5kZXR1bmUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5RLmNvbm5lY3QoZmlsdGVyLlEpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5nYWluLmNvbm5lY3QoZmlsdGVyLmdhaW4pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tjb3VudF0gPSBmaWx0ZXI7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9jb25uZWN0IHRoZW0gdXBcblx0ICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb25DaGFpbiA9IFt0aGlzLmlucHV0XS5jb25jYXQodGhpcy5fZmlsdGVycykuY29uY2F0KFt0aGlzLm91dHB1dF0pO1xuXHQgICAgICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgY29ubmVjdGlvbkNoYWluKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuUS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU3BsaXQgdGhlIGluY29taW5nIHNpZ25hbCBpbnRvIHRocmVlIGJhbmRzIChsb3csIG1pZCwgaGlnaClcblx0XHQgKiAgICAgICAgIHdpdGggdHdvIGNyb3Nzb3ZlciBmcmVxdWVuY3kgY29udHJvbHMuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbbG93RnJlcXVlbmN5XSB0aGUgbG93L21pZCBjcm9zc292ZXIgZnJlcXVlbmN5XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbaGlnaEZyZXF1ZW5jeV0gdGhlIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3lcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kU3BsaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5NdWx0aWJhbmRTcGxpdCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvdXRwdXRzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBBcnJheSgzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbG93IGJhbmQuIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3cgPSB0aGlzLm91dHB1dFswXSA9IG5ldyBUb25lLkZpbHRlcigwLCAnbG93cGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsb3dlciBmaWx0ZXIgb2YgdGhlIG1pZCBiYW5kXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb3dNaWRGaWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2hpZ2hwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBiYW5kIG91dHB1dC4gQWxpYXMgZm9yIDxjb2RlPm91dHB1dFsxXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMub3V0cHV0WzFdID0gbmV3IFRvbmUuRmlsdGVyKDAsICdsb3dwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGhpZ2ggYmFuZCBvdXRwdXQuIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMl08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoID0gdGhpcy5vdXRwdXRbMl0gPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2hpZ2hwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMubG93RnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL2hpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmhpZ2hGcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBxdWFsaXR5IG9mIGFsbCB0aGUgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuUSk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5mYW4odGhpcy5sb3csIHRoaXMuaGlnaCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLl9sb3dNaWRGaWx0ZXIsIHRoaXMubWlkKTtcblx0ICAgICAgICAvL3RoZSBmcmVxdWVuY3kgY29udHJvbCBzaWduYWxcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeS5jb25uZWN0KHRoaXMubG93LmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9sb3dNaWRGaWx0ZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kuY29ubmVjdCh0aGlzLm1pZC5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuaGlnaC5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vdGhlIFEgdmFsdWVcblx0ICAgICAgICB0aGlzLlEuY29ubmVjdCh0aGlzLmxvdy5RKTtcblx0ICAgICAgICB0aGlzLlEuY29ubmVjdCh0aGlzLl9sb3dNaWRGaWx0ZXIuUSk7XG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5taWQuUSk7XG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5oaWdoLlEpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk11bHRpYmFuZFNwbGl0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRTcGxpdC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbG93RnJlcXVlbmN5JzogNDAwLFxuXHQgICAgICAgICdoaWdoRnJlcXVlbmN5JzogMjUwMCxcblx0ICAgICAgICAnUSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk11bHRpYmFuZFNwbGl0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZFNwbGl0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubG93LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxvdyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbG93TWlkRmlsdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sb3dNaWRGaWx0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhpZ2ggPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NdWx0aWJhbmRTcGxpdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRVEzIGlzIGEgdGhyZWUgYmFuZCBFUSB3aXRoIGNvbnRyb2wgb3ZlciBsb3csIG1pZCwgYW5kIGhpZ2ggZ2FpbiBhc1xuXHRcdCAqICAgICAgICAgd2VsbCBhcyB0aGUgbG93IGFuZCBoaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY2llcy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN8T2JqZWN0fSBbbG93TGV2ZWxdIFRoZSBnYWluIGFwcGxpZWQgdG8gdGhlIGxvd3MuXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFttaWRMZXZlbF0gVGhlIGdhaW4gYXBwbGllZCB0byB0aGUgbWlkLlxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbaGlnaExldmVsXSBUaGUgZ2FpbiBhcHBsaWVkIHRvIHRoZSBoaWdoLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBlcSA9IG5ldyBUb25lLkVRMygtMTAsIDMsIC0yMCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkVRMyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2hpZ2gnXG5cdCAgICAgICAgXSwgVG9uZS5FUTMpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG91dHB1dCBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbXVsdGliYW5kIHNwbGl0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGliYW5kU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpYmFuZFNwbGl0KHtcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IG9wdGlvbnMubG93RnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IG9wdGlvbnMuaGlnaEZyZXF1ZW5jeVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIGZvciB0aGUgbG93ZXIgc2lnbmFsc1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb3dHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLmxvdywgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBmb3IgdGhlIG1pZCBzaWduYWxzXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZEdhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMubWlkLCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIGhpZ2ggcGFydFxuXHRcdFx0ICogQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9oaWdoR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5oaWdoLCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIGxvdyBwYXJ0XG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvdyA9IHRoaXMuX2xvd0dhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBtaWQgcGFydFxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLl9taWRHYWluLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBpbiBkZWNpYmVscyBvZiB0aGUgaGlnaCBwYXJ0XG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2ggPSB0aGlzLl9oaWdoR2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBRIHZhbHVlIGZvciBhbGwgb2YgdGhlIGZpbHRlcnMuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IHRoaXMuX211bHRpYmFuZFNwbGl0LlE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gdGhpcy5fbXVsdGliYW5kU3BsaXQubG93RnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gdGhpcy5fbXVsdGliYW5kU3BsaXQuaGlnaEZyZXF1ZW5jeTtcblx0ICAgICAgICAvL3RoZSBmcmVxdWVuY3kgYmFuZHNcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdC5sb3cuY2hhaW4odGhpcy5fbG93R2FpbiwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0Lm1pZC5jaGFpbih0aGlzLl9taWRHYWluLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQuaGlnaC5jaGFpbih0aGlzLl9oaWdoR2FpbiwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVRMywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FUTMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2xvdyc6IDAsXG5cdCAgICAgICAgJ21pZCc6IDAsXG5cdCAgICAgICAgJ2hpZ2gnOiAwLFxuXHQgICAgICAgICdsb3dGcmVxdWVuY3knOiA0MDAsXG5cdCAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiAyNTAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVRM30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FUTMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sb3dHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sb3dHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9oaWdoR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faGlnaEdhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVRMztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBQZXJmb3JtcyBhIGxpbmVhciBzY2FsaW5nIG9uIGFuIGlucHV0IHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBTY2FsZXMgYSBOb3JtYWxSYW5nZSBpbnB1dCB0byBiZXR3ZWVuXG5cdFx0ICogICAgICAgICAgb3V0cHV0TWluIGFuZCBvdXRwdXRNYXguXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWluPTBdIFRoZSBvdXRwdXQgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgMC4gXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWF4PTFdXHRUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDEuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzY2FsZSA9IG5ldyBUb25lLlNjYWxlKDUwLCAxMDApO1xuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KHNjYWxlKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2Ygc2NhbGUgZXF1YWxzIDc1XG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlID0gZnVuY3Rpb24gKG91dHB1dE1pbiwgb3V0cHV0TWF4KSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX291dHB1dE1pbiA9IFRvbmUuZGVmYXVsdEFyZyhvdXRwdXRNaW4sIDApO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vdXRwdXRNYXggPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TWF4LCAxKTtcblx0ICAgICAgICAvKiogXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMSk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWRkfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hZGQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkFkZCgwKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5jb25uZWN0KHRoaXMuX2FkZCk7XG5cdCAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNjYWxlLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlbiBcblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMC4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dE1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXRNaW4gPSBtaW47XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgdmFsdWUuIFRoaXMgbnVtYmVyIGlzIG91dHB1dCB3aGVuIFxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAxLiBcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGUucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0TWF4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dE1heCA9IG1heDtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXQgdGhlIHZhbHVlc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZS5wcm90b3R5cGUuX3NldFJhbmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2FkZC52YWx1ZSA9IHRoaXMuX291dHB1dE1pbjtcblx0ICAgICAgICB0aGlzLl9zY2FsZS52YWx1ZSA9IHRoaXMuX291dHB1dE1heCAtIHRoaXMuX291dHB1dE1pbjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNjYWxlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FkZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYWRkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNjYWxlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBQZXJmb3JtcyBhbiBleHBvbmVudGlhbCBzY2FsaW5nIG9uIGFuIGlucHV0IHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBTY2FsZXMgYSBOb3JtYWxSYW5nZSB2YWx1ZSBbMCwxXSBleHBvbmVudGlhbGx5XG5cdFx0ICogICAgICAgICAgdG8gdGhlIG91dHB1dCByYW5nZSBvZiBvdXRwdXRNaW4gdG8gb3V0cHV0TWF4LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1pbj0wXSBUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDAuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWF4PTFdXHRUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDEuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbZXhwb25lbnQ9Ml0gVGhlIGV4cG9uZW50IHdoaWNoIHNjYWxlcyB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzY2FsZUV4cCA9IG5ldyBUb25lLlNjYWxlRXhwKDAsIDEwMCwgMik7XG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgwLjUpLmNvbm5lY3Qoc2NhbGVFeHApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZUV4cCA9IGZ1bmN0aW9uIChvdXRwdXRNaW4sIG91dHB1dE1heCwgZXhwb25lbnQpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgaW5wdXQgdG8gdGhlIG91dHB1dCByYW5nZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNjYWxlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2NhbGUob3V0cHV0TWluLCBvdXRwdXRNYXgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUG93fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHAgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuUG93KFRvbmUuZGVmYXVsdEFyZyhleHBvbmVudCwgMikpO1xuXHQgICAgICAgIHRoaXMuX2V4cC5jb25uZWN0KHRoaXMuX3NjYWxlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNjYWxlRXhwLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogSW5zdGVhZCBvZiBpbnRlcnBvbGF0aW5nIGxpbmVhcmx5IGJldHdlZW4gdGhlIDxjb2RlPm1pbjwvY29kZT4gYW5kXG5cdFx0ICogPGNvZGU+bWF4PC9jb2RlPiB2YWx1ZXMsIHNldHRpbmcgdGhlIGV4cG9uZW50IHdpbGwgaW50ZXJwb2xhdGUgYmV0d2VlblxuXHRcdCAqIHRoZSB0d28gdmFsdWVzIHdpdGggYW4gZXhwb25lbnRpYWwgY3VydmUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVFeHAjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBleHBvbmVudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLCAnZXhwb25lbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHAudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwLnZhbHVlID0gZXhwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlblxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAwLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlRXhwI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWluID0gbWluO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlblxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAxLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlRXhwI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5tYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TY2FsZUV4cH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V4cC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXhwID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TY2FsZUV4cDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIFdlYiBBdWRpbydzIG5hdGl2ZSBbRGVsYXlOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1kZWxheW5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGRlbGF5VGltZSBUaGUgZGVsYXkgYXBwbGllZCB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBtYXhEZWxheSBUaGUgbWF4aW11bSBkZWxheSB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5EZWxheSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnbWF4RGVsYXknXG5cdCAgICAgICAgXSwgVG9uZS5EZWxheSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBtYXhpbXVtIGRlbGF5IHRpbWUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgbm9kZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tYXhEZWxheSA9IE1hdGgubWF4KHRoaXMudG9TZWNvbmRzKG9wdGlvbnMubWF4RGVsYXkpLCB0aGlzLnRvU2Vjb25kcyhvcHRpb25zLmRlbGF5VGltZSkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBuYXRpdmUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVEZWxheSh0aGlzLl9tYXhEZWxheSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBpbmNvbWluZyBzaWduYWwgaXNcblx0XHRcdCAqICBkZWxheWVkLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9kZWxheU5vZGUuZGVsYXlUaW1lLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuVGltZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5kZWxheVRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZGVsYXlUaW1lJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5EZWxheSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkRlbGF5LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtYXhEZWxheSc6IDEsXG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBkZWxheSB0aW1lLiBUaGlzIGNhbm5vdCBiZSBjaGFuZ2VkLiBUaGUgdmFsdWUgaXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLlxuXHRcdCAqIEBtZW1iZXJvZiBUb25lLkRlbGF5I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIG1heERlbGF5XG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5EZWxheS5wcm90b3R5cGUsICdtYXhEZWxheScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heERlbGF5O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5EZWxheX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRGVsYXkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2RlbGF5VGltZScpO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5EZWxheTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIENvbWIgZmlsdGVycyBhcmUgYmFzaWMgYnVpbGRpbmcgYmxvY2tzIGZvciBwaHlzaWNhbCBtb2RlbGluZy4gUmVhZCBtb3JlXG5cdFx0ICogICAgICAgICBhYm91dCBjb21iIGZpbHRlcnMgb24gW0NDUk1BJ3Mgd2Vic2l0ZV0oaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvfmpvcy9wYXNwL0ZlZWRiYWNrX0NvbWJfRmlsdGVycy5odG1sKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgdGltZSBvZiB0aGUgZmlsdGVyLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gcmVzb25hbmNlIFRoZSBhbW91bnQgb2YgZmVlZGJhY2sgdGhlIGZpbHRlciBoYXMuXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5EZWxheShvcHRpb25zLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBkZWxheSBvZiB0aGUgY29tYiBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9kZWxheS5kZWxheVRpbWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZlZWRiYWNrIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnJlc29uYW5jZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIG9mIHRoZSBkZWxheWVkIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSB0aGlzLl9mZWVkYmFjay5nYWluO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmNoYWluKHRoaXMuX2ZlZWRiYWNrLCB0aGlzLl9kZWxheSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZlZWRiYWNrQ29tYkZpbHRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjEsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDAuNVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GZWVkYmFja0NvbWJGaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9kZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEdldCB0aGUgY3VycmVudCB3YXZlZm9ybSBkYXRhIG9mIHRoZSBjb25uZWN0ZWQgYXVkaW8gc291cmNlLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgRkZULiBWYWx1ZSBtdXN0IGJlIGEgcG93ZXIgb2Zcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKi9cblx0ICAgIFRvbmUuRkZUID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnc2l6ZSddLCBUb25lLkZGVCk7XG5cdCAgICAgICAgb3B0aW9ucy50eXBlID0gVG9uZS5BbmFseXNlci5UeXBlLkZGVDtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW5hbHlzZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkFuYWx5c2VyKG9wdGlvbnMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRkZULCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRkZULmRlZmF1bHRzID0geyAnc2l6ZSc6IDEwMjQgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXRzIHRoZSB3YXZlZm9ybSBvZiB0aGUgYXVkaW8gc291cmNlLiBSZXR1cm5zIHRoZSB3YXZlZm9ybSBkYXRhXG5cdFx0ICogIG9mIGxlbmd0aCBbc2l6ZV0oI3NpemUpIGFzIGEgRmxvYXQzMkFycmF5IHdpdGggdmFsdWVzIGJldHdlZW4gLTEgYW5kIDEuXG5cdFx0ICogIEByZXR1cm5zIHtUeXBlZEFycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GRlQucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2l6ZSBvZiBhbmFseXNpcy4gVGhpcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRkZUI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GRlQucHJvdG90eXBlLCAnc2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNpemUgPSBzaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5GRlR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZGVC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRkZUO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgUmV0dXJuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBhbiBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgtMSk7XG5cdFx0ICogdmFyIGFicyA9IG5ldyBUb25lLkFicygpO1xuXHRcdCAqIHNpZ25hbC5jb25uZWN0KGFicyk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGFicyBpcyAxLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5BYnMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTGVzc1RoYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FicyA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnModmFsKSA8IDAuMDAxKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh2YWwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSwgMTAyNCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BYnMsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBtZXRob2Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQWJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFicy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hYnMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FicyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQWJzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRm9sbG93ZXIgaXMgYSAgY3J1ZGUgZW52ZWxvcGUgZm9sbG93ZXIgd2hpY2ggd2lsbCBmb2xsb3dcblx0XHQgKiAgICAgICAgICB0aGUgYW1wbGl0dWRlIG9mIGFuIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBUYWtlIGNhcmUgd2l0aCBzbWFsbCAoPCAwLjAyKSBhdHRhY2sgb3IgZGVjYXkgdmFsdWVzXG5cdFx0ICogICAgICAgICAgYXMgZm9sbG93ZXIgaGFzIHNvbWUgcmlwcGxlIHdoaWNoIGlzIGV4YWdnZXJhdGVkXG5cdFx0ICogICAgICAgICAgYXQgdGhlc2UgdmFsdWVzLiBSZWFkIG1vcmUgYWJvdXQgZW52ZWxvcGUgZm9sbG93ZXJzIChhbHNvIGtub3duXG5cdFx0ICogICAgICAgICAgYXMgZW52ZWxvcGUgZGV0ZWN0b3JzKSBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbnZlbG9wZV9kZXRlY3RvcikuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja10gVGhlIHJhdGUgYXQgd2hpY2ggdGhlIGZvbGxvd2VyIHJpc2VzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByZWxlYXNlIFRoZSByYXRlIGF0IHdoaWNoIHRoZSBmb2xvd2VyIGZhbGxzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBmb2xsb3dlciA9IG5ldyBUb25lLkZvbGxvd2VyKDAuMiwgMC40KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5Gb2xsb3dlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWJzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hYnMgPSBuZXcgVG9uZS5BYnMoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbG93cGFzcyBmaWx0ZXIgd2hpY2ggc21vb3RocyB0aGUgaW5wdXRcblx0XHRcdCAqICBAdHlwZSB7QmlxdWFkRmlsdGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci50eXBlID0gJ2xvd3Bhc3MnO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5mcmVxdWVuY3kudmFsdWUgPSAwO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5RLnZhbHVlID0gLTEwMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcyA9IG5ldyBUb25lLldhdmVTaGFwZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ViID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSBuZXcgVG9uZS5EZWxheSh0aGlzLmJsb2NrVGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhpcyBrZWVwcyBpdCBmYXIgZnJvbSAwLCBldmVuIGZvciB2ZXJ5IHNtYWxsIGRpZmZlcmVuY2VzXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgxMDAwMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYXR0YWNrID0gb3B0aW9ucy5hdHRhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZTtcblx0ICAgICAgICAvL3RoZSBzbW9vdGhlZCBzaWduYWwgdG8gZ2V0IHRoZSB2YWx1ZXNcblx0ICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMuX2FicywgdGhpcy5fZmlsdGVyLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLy90aGUgZGlmZmVyZW5jZSBwYXRoXG5cdCAgICAgICAgdGhpcy5fYWJzLmNvbm5lY3QodGhpcy5fc3ViLCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuY2hhaW4odGhpcy5fZGVsYXksIHRoaXMuX3N1Yik7XG5cdCAgICAgICAgLy90aHJlc2hvbGQgdGhlIGRpZmZlcmVuY2UgYW5kIHVzZSB0aGUgdGhyZXNoIHRvIHNldCB0aGUgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5fc3ViLmNoYWluKHRoaXMuX211bHQsIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcywgdGhpcy5fZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSB2YWx1ZXMgaW4gdGhlIHRhYmxlXG5cdCAgICAgICAgdGhpcy5fc2V0QXR0YWNrUmVsZWFzZSh0aGlzLl9hdHRhY2ssIHRoaXMuX3JlbGVhc2UpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRm9sbG93ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2snOiAwLjA1LFxuXHQgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHNldHMgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSB0aW1lcyBpbiB0aGUgd2F2ZSBzaGFwZXJcblx0XHQgKiAgQHBhcmFtICAge1RpbWV9IGF0dGFja1xuXHRcdCAqICBAcGFyYW0gICB7VGltZX0gcmVsZWFzZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUuX3NldEF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAoYXR0YWNrLCByZWxlYXNlKSB7XG5cdCAgICAgICAgdmFyIG1pblRpbWUgPSB0aGlzLmJsb2NrVGltZTtcblx0ICAgICAgICBhdHRhY2sgPSBUb25lLlRpbWUoYXR0YWNrKS50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHJlbGVhc2UgPSBUb25lLlRpbWUocmVsZWFzZSkudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICBhdHRhY2sgPSBNYXRoLm1heChhdHRhY2ssIG1pblRpbWUpO1xuXHQgICAgICAgIHJlbGVhc2UgPSBNYXRoLm1heChyZWxlYXNlLCBtaW5UaW1lKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMuc2V0TWFwKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKHZhbCA8PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gYXR0YWNrO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2U7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXR0YWNrIHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRm9sbG93ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgYXR0YWNrXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUsICdhdHRhY2snLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2s7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhdHRhY2spIHtcblx0ICAgICAgICAgICAgdGhpcy5fYXR0YWNrID0gYXR0YWNrO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBdHRhY2tSZWxlYXNlKHRoaXMuX2F0dGFjaywgdGhpcy5fcmVsZWFzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcmVsZWFzZSB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZvbGxvd2VyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHJlbGVhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZvbGxvd2VyLnByb3RvdHlwZSwgJ3JlbGVhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmVsZWFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZWxlYXNlID0gcmVsZWFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QXR0YWNrUmVsZWFzZSh0aGlzLl9hdHRhY2ssIHRoaXMuX3JlbGVhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEJvcnJvd3MgdGhlIGNvbm5lY3QgbWV0aG9kIGZyb20gU2lnbmFsIHNvIHRoYXQgdGhlIG91dHB1dCBjYW4gYmUgdXNlZFxuXHRcdCAqICBhcyBhIFRvbmUuU2lnbmFsIGNvbnRyb2wgc2lnbmFsLlxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLmNvbm5lY3QgPSBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3Q7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Gb2xsb3dlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdWIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYWJzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hYnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX211bHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2N1cnZlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Gb2xsb3dlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuU2NhbGVkRW52ZWxvcCBpcyBhbiBlbnZlbG9wZSB3aGljaCBjYW4gYmUgc2NhbGVkXG5cdFx0ICogICAgICAgICB0byBhbnkgcmFuZ2UuIEl0J3MgdXNlZnVsIGZvciBhcHBseWluZyBhbiBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgdG8gYSBmcmVxdWVuY3kgb3IgYW55IG90aGVyIG5vbi1Ob3JtYWxSYW5nZSBzaWduYWxcblx0XHQgKiAgICAgICAgIHBhcmFtZXRlci5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbnZlbG9wZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdXHR0aGUgYXR0YWNrIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdHRoZSBkZWNheSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtzdXN0YWluXSBcdGEgcGVyY2VudGFnZSAoMC0xKSBvZiB0aGUgZnVsbCBhbXBsaXR1ZGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbcmVsZWFzZV1cdHRoZSByZWxlYXNlIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgc2NhbGVkRW52ID0gbmV3IFRvbmUuU2NhbGVkRW52ZWxvcGUoe1xuXHRcdCAqICBcdFwiYXR0YWNrXCIgOiAwLjIsXG5cdFx0ICogIFx0XCJtaW5cIiA6IDIwMCxcblx0XHQgKiAgXHRcIm1heFwiIDogMjAwMFxuXHRcdCAqICB9KTtcblx0XHQgKiAgc2NhbGVkRW52LmNvbm5lY3Qob3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZWRFbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2dldCBhbGwgb2YgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ2RlY2F5Jyxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkVudmVsb3BlKTtcblx0ICAgICAgICBUb25lLkVudmVsb3BlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlNjYWxlZEVudmVsb3BlLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgaW5jb21pbmcgc2lnbmFsIGJ5IGFuIGV4cG9uZW50XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUG93fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHAgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlBvdyhvcHRpb25zLmV4cG9uZW50KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgc2lnbmFsIHRvIHRoZSBkZXNpcmVkIHJhbmdlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TY2FsZShvcHRpb25zLm1pbiwgb3B0aW9ucy5tYXgpO1xuXHQgICAgICAgIHRoaXMuX3NpZy5jaGFpbih0aGlzLl9leHAsIHRoaXMuX3NjYWxlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNjYWxlZEVudmVsb3BlLCBUb25lLkVudmVsb3BlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgJ2V4cG9uZW50JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIG1pbiBvdXRwdXQgdmFsdWUuIFRoaXMgaXMgdGhlIHZhbHVlIHdoaWNoIGl0XG5cdFx0ICogc3RhcnRzIGF0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlZEVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWluID0gbWluO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgbWF4IG91dHB1dCB2YWx1ZS4gSW4gb3RoZXIgd29yZHMsIHRoZSB2YWx1ZVxuXHRcdCAqIGF0IHRoZSBwZWFrIG9mIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVkRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5tYXggPSBtYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBleHBvbmVudCB2YWx1ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZWRFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGV4cG9uZW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUsICdleHBvbmVudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAudmFsdWUgPSBleHA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2NhbGVkRW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXhwLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9leHAgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNjYWxlZEVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSBpcyBhIFRvbmUuU2NhbGVkRW52ZWxvcGUsIGJ1dCBpbnN0ZWFkIG9mIGBtaW5gIGFuZCBgbWF4YFxuXHRcdCAqICAgICAgICAgaXQncyBnb3QgYSBgYmFzZUZyZXF1ZW5jeWAgYW5kIGBvY3RhdmVzYCBwYXJhbWV0ZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW52ZWxvcGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbYXR0YWNrXVx0dGhlIGF0dGFjayB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHR0aGUgZGVjYXkgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbc3VzdGFpbl0gXHRhIHBlcmNlbnRhZ2UgKDAtMSkgb2YgdGhlIGZ1bGwgYW1wbGl0dWRlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHR0aGUgcmVsZWFzZSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGZyZXFFbnYgPSBuZXcgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSh7XG5cdFx0ICogIFx0XCJhdHRhY2tcIiA6IDAuMixcblx0XHQgKiAgXHRcImJhc2VGcmVxdWVuY3lcIiA6IFwiQzJcIixcblx0XHQgKiAgXHRcIm9jdGF2ZXNcIiA6IDRcblx0XHQgKiAgfSk7XG5cdFx0ICogIGZyZXFFbnYuY29ubmVjdChvc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeUVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdkZWNheScsXG5cdCAgICAgICAgICAgICdzdXN0YWluJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAgICAgVG9uZS5TY2FsZWRFbnZlbG9wZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8vbWVyZ2UgaXQgd2l0aCB0aGUgZnJlcXVlbmN5IGVudmVsb3BlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkZyZXF1ZW5jeUVudmVsb3BlLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTdG9yZXMgdGhlIG9jdGF2ZSB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvL3NldHVwXG5cdCAgICAgICAgdGhpcy5iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZyZXF1ZW5jeUVudmVsb3BlLCBUb25lLkVudmVsb3BlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiA0LFxuXHQgICAgICAgICdleHBvbmVudCc6IDJcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBtaW5pbnVtIG91dHB1dCB2YWx1ZS4gVGhpcyBpcyB0aGUgdmFsdWUgd2hpY2ggaXRcblx0XHQgKiBzdGFydHMgYXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAbmFtZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1pbiA9IHRoaXMudG9GcmVxdWVuY3kobWluKTtcblx0ICAgICAgICAgICAgLy9hbHNvIHVwZGF0ZSB0aGUgb2N0YXZlc1xuXHQgICAgICAgICAgICB0aGlzLm9jdGF2ZXMgPSB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBvY3RhdmVzIGFib3ZlIHRoZSBiYXNlRnJlcXVlbmN5IHRoYXQgdGhlXG5cdFx0ICogZW52ZWxvcGUgd2lsbCBzY2FsZSB0by5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3RhdmVzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3RhdmVzO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5tYXggPSB0aGlzLmJhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCBvY3RhdmVzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIGV4cG9uZW50IHZhbHVlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgZXhwb25lbnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZyZXF1ZW5jeUVudmVsb3BlLnByb3RvdHlwZSwgJ2V4cG9uZW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwLnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cC52YWx1ZSA9IGV4cDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GcmVxdWVuY3lFbnZlbG9wZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgR3JlYXRlclRoYW5aZXJvIG91dHB1dHMgMSB3aGVuIHRoZSBpbnB1dCBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4gemVyb1xuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBndDAgPSBuZXcgVG9uZS5HcmVhdGVyVGhhblplcm8oKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDAuMDEpLmNvbm5lY3QoZ3QwKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgZ3QwIGlzIDEuXG5cdFx0ICogc2lnLnZhbHVlID0gMDtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgZ3QwIGlzIDAuXG5cdFx0ICovXG5cdCAgICBUb25lLkdyZWF0ZXJUaGFuWmVybyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAodmFsIDw9IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LCAxMjcpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSBmaXJzdCB0aHJlc2hvbGRlZCBzaWduYWwgYnkgYSBsYXJnZSB2YWx1ZS5cblx0XHRcdCAqICB0aGlzIHdpbGwgaGVscCB3aXRoIHZhbHVlcyB3aGljaCBhcmUgdmVyeSBjbG9zZSB0byAwXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpcGx5KDEwMDAwKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fc2NhbGUuY29ubmVjdCh0aGlzLl90aHJlc2gpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR3JlYXRlclRoYW5aZXJvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgbWV0aG9kXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdyZWF0ZXJUaGFuWmVyb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhblplcm8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aHJlc2guZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR3JlYXRlclRoYW5aZXJvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIE91dHB1dCAxIGlmIHRoZSBzaWduYWwgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSwgb3RoZXJ3aXNlIG91dHB1dHMgMC5cblx0XHQgKiAgICAgICAgICBjYW4gY29tcGFyZSB0d28gc2lnbmFscyBvciBhIHNpZ25hbCBhbmQgYSBudW1iZXIuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0wXSB0aGUgdmFsdWUgdG8gY29tcGFyZSB0byB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGd0ID0gbmV3IFRvbmUuR3JlYXRlclRoYW4oMik7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCg0KS5jb25uZWN0KGd0KTtcblx0XHQgKiAvL291dHB1dCBvZiBndCBpcyBlcXVhbCAxLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHN1YnRyYWN0IHRoZSBhbW91bnQgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFswXSA9IG5ldyBUb25lLlN1YnRyYWN0KHZhbHVlKTtcblx0ICAgICAgICB0aGlzLmlucHV0WzFdID0gdGhpcy5fcGFyYW0uaW5wdXRbMV07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29tcGFyZSB0aGF0IGFtb3VudCB0byB6ZXJvXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR3JlYXRlclRoYW5aZXJvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ndHogPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuWmVybygpO1xuXHQgICAgICAgIC8vY29ubmVjdFxuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNvbm5lY3QodGhpcy5fZ3R6KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdyZWF0ZXJUaGFuLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBtZXRob2Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR3JlYXRlclRoYW59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ndHouZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2d0eiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR3JlYXRlclRoYW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5HYXRlIG9ubHkgcGFzc2VzIGEgc2lnbmFsIHRocm91Z2ggd2hlbiB0aGUgaW5jb21pbmdcblx0XHQgKiAgICAgICAgICBzaWduYWwgZXhjZWVkcyBhIHNwZWNpZmllZCB0aHJlc2hvbGQuIFRvIGRvIHRoaXMsIEdhdGUgdXNlc1xuXHRcdCAqICAgICAgICAgIGEgVG9uZS5Gb2xsb3dlciB0byBmb2xsb3cgdGhlIGFtcGxpdHVkZSBvZiB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgIEEgY29tbW9uIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2xhc3MgaXMgYSBbTm9pc2UgR2F0ZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTm9pc2VfZ2F0ZSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc3xPYmplY3R9IFt0aHJlc2hvbGRdIFRoZSB0aHJlc2hvbGQgYWJvdmUgd2hpY2ggdGhlIGdhdGUgd2lsbCBvcGVuLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBhdHRhY2sgVGhlIGZvbGxvd2VyJ3MgYXR0YWNrIHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmVsZWFzZSBUaGUgZm9sbG93ZXIncyByZWxlYXNlIHRpbWVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZ2F0ZSA9IG5ldyBUb25lLkdhdGUoLTMwLCAwLjIsIDAuMykudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgbWljID0gbmV3IFRvbmUuVXNlck1lZGlhKCkuY29ubmVjdChnYXRlKTtcblx0XHQgKiAvL3RoZSBnYXRlIHdpbGwgb25seSBwYXNzIHRocm91Z2ggdGhlIGluY29taW5nXG5cdFx0ICogLy9zaWduYWwgd2hlbiBpdCdzIGxvdWRlciB0aGFuIC0zMGRiXG5cdFx0ICovXG5cdCAgICBUb25lLkdhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndGhyZXNob2xkJyxcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuR2F0ZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRm9sbG93ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZvbGxvd2VyID0gbmV3IFRvbmUuRm9sbG93ZXIob3B0aW9ucy5hdHRhY2ssIG9wdGlvbnMucmVsZWFzZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR3JlYXRlclRoYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2d0ID0gbmV3IFRvbmUuR3JlYXRlclRoYW4oVG9uZS5kYlRvR2FpbihvcHRpb25zLnRocmVzaG9sZCkpO1xuXHQgICAgICAgIC8vdGhlIGNvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL3RoZSBjb250cm9sIHNpZ25hbFxuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4odGhpcy5fZ3QsIHRoaXMuX2ZvbGxvd2VyLCB0aGlzLm91dHB1dC5nYWluKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdhdGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYXRlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2snOiAwLjEsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAwLjEsXG5cdCAgICAgICAgJ3RocmVzaG9sZCc6IC00MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0aHJlc2hvbGQgb2YgdGhlIGdhdGUgaW4gZGVjaWJlbHNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HYXRlI1xuXHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHQgKiBAbmFtZSB0aHJlc2hvbGRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdhdGUucHJvdG90eXBlLCAndGhyZXNob2xkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5nYWluVG9EYih0aGlzLl9ndC52YWx1ZSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aHJlc2gpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ3QudmFsdWUgPSBUb25lLmRiVG9HYWluKHRocmVzaCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXR0YWNrIHNwZWVkIG9mIHRoZSBnYXRlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR2F0ZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBhdHRhY2tcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdhdGUucHJvdG90eXBlLCAnYXR0YWNrJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9sbG93ZXIuYXR0YWNrO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYXR0YWNrVGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9mb2xsb3dlci5hdHRhY2sgPSBhdHRhY2tUaW1lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJlbGVhc2Ugc3BlZWQgb2YgdGhlIGdhdGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HYXRlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHJlbGVhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdhdGUucHJvdG90eXBlLCAncmVsZWFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbGxvd2VyLnJlbGVhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyZWxlYXNlVGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9mb2xsb3dlci5yZWxlYXNlID0gcmVsZWFzZVRpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdhdGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR2F0ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2ZvbGxvd2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ndC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZm9sbG93ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2d0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HYXRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgVG9uZS5UaWNrU2lnbmFsIGV4dGVuZHMgVG9uZS5TaWduYWwsIGJ1dCBhZGRzIHRoZSBjYXBhYmlsaXR5XG5cdFx0ICogICAgICAgIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGVsYXBzZWQgdGlja3MuIGV4cG9uZW50aWFsIGFuZCB0YXJnZXQgY3VydmVzXG5cdFx0ICogICAgICAgIGFyZSBhcHByb3hpbWF0ZWQgd2l0aCBtdWx0aXBsZSBsaW5lYXIgcmFtcHMuXG5cdFx0ICpcblx0XHQgKiAgICAgICAgVGhhbmsgeW91IEJydW5vIERpYXMsIEguIFNvZmlhIFBpbnRvLCBhbmQgRGF2aWQgTS4gTWF0b3MsIGZvciB5b3VyIFtXQUMgcGFwZXJdKGh0dHBzOi8vc21hcnRlY2guZ2F0ZWNoLmVkdS9iaXRzdHJlYW0vaGFuZGxlLzE4NTMvNTQ1ODgvV0FDMjAxNi00OS5wZGYpXG5cdFx0ICogICAgICAgIGRlc2NyaWJpbmcgaW50ZWdyYXRpbmcgdGltaW5nIGZ1bmN0aW9ucyBmb3IgdGVtcG8gY2FsY3VsYXRpb25zLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBzaWduYWxcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICB2YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyh2YWx1ZSwgMSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzLCB7XG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5UaWNrcyxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL2V4dGVuZCB0aGUgbWVtb3J5XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLm1lbW9yeSA9IEluZmluaXR5O1xuXHQgICAgICAgIC8vY2xlYXIgdGhlIGNsb2NrIGZyb20gdGhlIGJlZ2lubmluZ1xuXHQgICAgICAgIHRoaXMuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKDApO1xuXHQgICAgICAgIC8vc2V0IGFuIGluaXRpYWwgZXZlbnRcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IDAsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaWNrU2lnbmFsLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiBXcmFwcyBUb25lLlNpZ25hbCBtZXRob2RzIHNvIHRoYXQgdGhleSBhbHNvXG5cdFx0ICogcmVjb3JkIHRoZSB0aWNrcy5cblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gbWV0aG9kXG5cdFx0ICogQHJldHVybiB7RnVuY3Rpb259XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIGZ1bmN0aW9uIF93cmFwU2NoZWR1bGVNZXRob2RzKG1ldGhvZCkge1xuXHQgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzRXZlbnQgPSB0aGlzLl9ldmVudHMucHJldmlvdXNFdmVudChldmVudCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrc1VudGlsVGltZSA9IHRoaXMuX2dldFRpY2tzVW50aWxFdmVudChwcmV2aW91c0V2ZW50LCB0aW1lKTtcblx0ICAgICAgICAgICAgZXZlbnQudGlja3MgPSBNYXRoLm1heCh0aWNrc1VudGlsVGltZSwgMCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lID0gX3dyYXBTY2hlZHVsZU1ldGhvZHMoVG9uZS5TaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lKTtcblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUgPSBfd3JhcFNjaGVkdWxlTWV0aG9kcyhUb25lLlNpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoXG5cdFx0ICogIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRpbWUgY29uc3RhbnQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGltZUNvbnN0YW50XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lLCBjb25zdGFudCkge1xuXHQgICAgICAgIC8vYXByb3hpbWF0ZSBpdCB3aXRoIG11bHRpcGxlIGxpbmVhciByYW1wc1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnNldFJhbXBQb2ludCh0aW1lKTtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgLy9zdGFydCBmcm9tIHByZXZpb3VzbHkgc2NoZWR1bGVkIHZhbHVlXG5cdCAgICAgICAgdmFyIHByZXZFdmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgdmFyIHNlZ21lbnRzID0gTWF0aC5yb3VuZChNYXRoLm1heCgxIC8gY29uc3RhbnQsIDEpKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBzZWdtZW50czsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBzZWdUaW1lID0gY29uc3RhbnQgKiBpICsgdGltZTtcblx0ICAgICAgICAgICAgdmFyIHJhbXBWYWwgPSB0aGlzLl9leHBvbmVudGlhbEFwcHJvYWNoKHByZXZFdmVudC50aW1lLCBwcmV2RXZlbnQudmFsdWUsIHZhbHVlLCBjb25zdGFudCwgc2VnVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodGhpcy5fdG9Vbml0cyhyYW1wVmFsKSwgc2VnVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gZXhwb25lbnRpYWwgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb21cblx0XHQgKiAgdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwYXJhbWV0ZXIgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGVuZFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgLy9hcHJveGltYXRlIGl0IHdpdGggbXVsdGlwbGUgbGluZWFyIHJhbXBzXG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICAvL3N0YXJ0IGZyb20gcHJldmlvdXNseSBzY2hlZHVsZWQgdmFsdWVcblx0ICAgICAgICB2YXIgcHJldkV2ZW50ID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICBpZiAocHJldkV2ZW50ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHByZXZFdmVudCA9IHtcblx0ICAgICAgICAgICAgICAgICd2YWx1ZSc6IHRoaXMuX2luaXRpYWxWYWx1ZSxcblx0ICAgICAgICAgICAgICAgICd0aW1lJzogMFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2FwcHJveCAxMCBzZWdtZW50cyBwZXIgc2Vjb25kXG5cdCAgICAgICAgdmFyIHNlZ21lbnRzID0gTWF0aC5yb3VuZChNYXRoLm1heCgodGltZSAtIHByZXZFdmVudC50aW1lKSAqIDEwLCAxKSk7XG5cdCAgICAgICAgdmFyIHNlZ21lbnREdXIgPSAodGltZSAtIHByZXZFdmVudC50aW1lKSAvIHNlZ21lbnRzO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IHNlZ21lbnRzOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHNlZ1RpbWUgPSBzZWdtZW50RHVyICogaSArIHByZXZFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB2YXIgcmFtcFZhbCA9IHRoaXMuX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUocHJldkV2ZW50LnRpbWUsIHByZXZFdmVudC52YWx1ZSwgdGltZSwgdmFsdWUsIHNlZ1RpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMuX3RvVW5pdHMocmFtcFZhbCksIHNlZ1RpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSB0aWNrIHZhbHVlIGF0IHRoZSB0aW1lLiBUYWtlcyBpbnRvIGFjY291bnRcblx0XHQgKiBhbnkgYXV0b21hdGlvbiBjdXJ2ZXMgc2NoZWR1bGVkIG9uIHRoZSBzaWduYWwuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIGdldCB0aGUgdGljayBjb3VudCBhdFxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgIFRoZSBudW1iZXIgb2YgdGlja3Mgd2hpY2ggaGF2ZSBlbGFwc2VkIGF0IHRoZSB0aW1lXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGFueSBhdXRvbWF0aW9ucy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuX2dldFRpY2tzVW50aWxFdmVudCA9IGZ1bmN0aW9uIChldmVudCwgdGltZSkge1xuXHQgICAgICAgIGlmIChldmVudCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICBldmVudCA9IHtcblx0ICAgICAgICAgICAgICAgICd0aWNrcyc6IDAsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IDBcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNVbmRlZihldmVudC50aWNrcykpIHtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzRXZlbnQgPSB0aGlzLl9ldmVudHMucHJldmlvdXNFdmVudChldmVudCk7XG5cdCAgICAgICAgICAgIGV2ZW50LnRpY2tzID0gdGhpcy5fZ2V0VGlja3NVbnRpbEV2ZW50KHByZXZpb3VzRXZlbnQsIGV2ZW50LnRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgdmFsMCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoZXZlbnQudGltZSk7XG5cdCAgICAgICAgdmFyIHZhbDEgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIC8vaWYgaXQncyByaWdodCBvbiB0aGUgbGluZSwgdGFrZSB0aGUgcHJldmlvdXMgdmFsdWVcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmdldCh0aW1lKS50aW1lID09PSB0aW1lICYmIHRoaXMuX2V2ZW50cy5nZXQodGltZSkudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSkge1xuXHQgICAgICAgICAgICB2YWwxID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lIC0gdGhpcy5zYW1wbGVUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIDAuNSAqICh0aW1lIC0gZXZlbnQudGltZSkgKiAodmFsMCArIHZhbDEpICsgZXZlbnQudGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgdGljayB2YWx1ZSBhdCB0aGUgdGltZS4gVGFrZXMgaW50byBhY2NvdW50XG5cdFx0ICogYW55IGF1dG9tYXRpb24gY3VydmVzIHNjaGVkdWxlZCBvbiB0aGUgc2lnbmFsLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gZ2V0IHRoZSB0aWNrIGNvdW50IGF0XG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgVGhlIG51bWJlciBvZiB0aWNrcyB3aGljaCBoYXZlIGVsYXBzZWQgYXQgdGhlIHRpbWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gYW55IGF1dG9tYXRpb25zLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuX2dldFRpY2tzVW50aWxFdmVudChldmVudCwgdGltZSksIDApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBudW1iZXIgb2YgdGlja3MgZnJvbSB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSB7VGlja3N9IHRpY2tzIFRoZSBudW1iZXIgb2YgdGlja3MgdG8gY2FsY3VsYXRlXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBUaGUgdGltZSB0byBnZXQgdGhlIG5leHQgdGljayBmcm9tXG5cdFx0ICogQHJldHVybiB7U2Vjb25kc30gVGhlIGR1cmF0aW9uIG9mIHRoZSBudW1iZXIgb2YgdGlja3MgZnJvbSB0aGUgZ2l2ZW4gdGltZSBpbiBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmdldER1cmF0aW9uT2ZUaWNrcyA9IGZ1bmN0aW9uICh0aWNrcywgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgY3VycmVudFRpY2sgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmdldFRpbWVPZlRpY2soY3VycmVudFRpY2sgKyB0aWNrcykgLSB0aW1lO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdpdmVuIGEgdGljaywgcmV0dXJucyB0aGUgdGltZSB0aGF0IHRpY2sgb2NjdXJzIGF0LlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrXG5cdFx0ICogQHJldHVybiB7VGltZX0gICAgICBUaGUgdGltZSB0aGF0IHRoZSB0aWNrIG9jY3Vycy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZ2V0VGltZU9mVGljayA9IGZ1bmN0aW9uICh0aWNrKSB7XG5cdCAgICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuX2V2ZW50cy5nZXQodGljaywgJ3RpY2tzJyk7XG5cdCAgICAgICAgdmFyIGFmdGVyID0gdGhpcy5fZXZlbnRzLmdldEFmdGVyKHRpY2ssICd0aWNrcycpO1xuXHQgICAgICAgIGlmIChiZWZvcmUgJiYgYmVmb3JlLnRpY2tzID09PSB0aWNrKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBiZWZvcmUudGltZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZSAmJiBhZnRlciAmJiBhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhciAmJiBiZWZvcmUudmFsdWUgIT09IGFmdGVyLnZhbHVlKSB7XG5cdCAgICAgICAgICAgIHZhciB2YWwwID0gdGhpcy5nZXRWYWx1ZUF0VGltZShiZWZvcmUudGltZSk7XG5cdCAgICAgICAgICAgIHZhciB2YWwxID0gdGhpcy5nZXRWYWx1ZUF0VGltZShhZnRlci50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGRlbHRhID0gKHZhbDEgLSB2YWwwKSAvIChhZnRlci50aW1lIC0gYmVmb3JlLnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgayA9IE1hdGguc3FydChNYXRoLnBvdyh2YWwwLCAyKSAtIDIgKiBkZWx0YSAqIChiZWZvcmUudGlja3MgLSB0aWNrKSk7XG5cdCAgICAgICAgICAgIHZhciBzb2wxID0gKC12YWwwICsgaykgLyBkZWx0YTtcblx0ICAgICAgICAgICAgdmFyIHNvbDIgPSAoLXZhbDAgLSBrKSAvIGRlbHRhO1xuXHQgICAgICAgICAgICByZXR1cm4gKHNvbDEgPiAwID8gc29sMSA6IHNvbDIpICsgYmVmb3JlLnRpbWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUpIHtcblx0ICAgICAgICAgICAgaWYgKGJlZm9yZS52YWx1ZSA9PT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGJlZm9yZS50aW1lICsgKHRpY2sgLSBiZWZvcmUudGlja3MpIC8gYmVmb3JlLnZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRpY2sgLyB0aGlzLl9pbml0aWFsVmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENvbnZlcnQgc29tZSBudW1iZXIgb2YgdGlja3MgdGhlaXIgdGhlIGR1cmF0aW9uIGluIHNlY29uZHMgYWNjb3VudGluZ1xuXHRcdCAqIGZvciBhbnkgYXV0b21hdGlvbiBjdXJ2ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSBudW1iZXIgb2YgdGlja3MgdG8gY29udmVydCB0byBzZWNvbmRzLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IFt3aGVuPW5vd10gIFdoZW4gYWxvbmcgdGhlIGF1dG9tYXRpb24gdGltZWxpbmUgdG8gY29udmVydCB0aGUgdGlja3MuXG5cdFx0ICogQHJldHVybiB7VG9uZS5UaW1lfSAgICAgICBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBvZiB0aGUgdGlja3MuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnRpY2tzVG9UaW1lID0gZnVuY3Rpb24gKHRpY2tzLCB3aGVuKSB7XG5cdCAgICAgICAgd2hlbiA9IHRoaXMudG9TZWNvbmRzKHdoZW4pO1xuXHQgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaW1lKHRoaXMuZ2V0RHVyYXRpb25PZlRpY2tzKHRpY2tzLCB3aGVuKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGludmVyc2Ugb2YgW3RpY2tzVG9UaW1lXSgjdGlja3N0b3RpbWUpLiBDb252ZXJ0IGEgZHVyYXRpb24gaW5cblx0XHQgKiBzZWNvbmRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIG51bWJlciBvZiB0aWNrcyBhY2NvdW50aW5nIGZvciBhbnlcblx0XHQgKiBhdXRvbWF0aW9uIGN1cnZlcyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiBUaGUgdGltZSBpbnRlcnZhbCB0byBjb252ZXJ0IHRvIHRpY2tzLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IFt3aGVuPW5vd10gICAgIFdoZW4gYWxvbmcgdGhlIGF1dG9tYXRpb24gdGltZWxpbmUgdG8gY29udmVydCB0aGUgdGlja3MuXG5cdFx0ICogQHJldHVybiB7VG9uZS5UaWNrc30gICAgICAgICAgVGhlIGR1cmF0aW9uIGluIHRpY2tzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS50aW1lVG9UaWNrcyA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgd2hlbikge1xuXHQgICAgICAgIHdoZW4gPSB0aGlzLnRvU2Vjb25kcyh3aGVuKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB2YXIgc3RhcnRUaWNrcyA9IHRoaXMuZ2V0VGlja3NBdFRpbWUod2hlbik7XG5cdCAgICAgICAgdmFyIGVuZFRpY2tzID0gdGhpcy5nZXRUaWNrc0F0VGltZSh3aGVuICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaWNrcyhlbmRUaWNrcyAtIHN0YXJ0VGlja3MpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpY2tTaWduYWw7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBUaW1lbGluZSBTdGF0ZS4gUHJvdmlkZXMgdGhlIG1ldGhvZHM6IDxjb2RlPnNldFN0YXRlQXRUaW1lKFwic3RhdGVcIiwgdGltZSk8L2NvZGU+XG5cdFx0ICogICAgICAgICAgYW5kIDxjb2RlPmdldFZhbHVlQXRUaW1lKHRpbWUpPC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UaW1lbGluZX1cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IGluaXRpYWwgVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIFRpbWVsaW5lU3RhdGUuIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byA8Y29kZT51bmRlZmluZWQ8L2NvZGU+XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUgPSBmdW5jdGlvbiAoaW5pdGlhbCkge1xuXHQgICAgICAgIFRvbmUuVGltZWxpbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgaW5pdGlhbCBzdGF0ZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2luaXRpYWwgPSBpbml0aWFsO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZWxpbmVTdGF0ZSwgVG9uZS5UaW1lbGluZSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgc2NoZWR1bGVkIHN0YXRlIHNjaGVkdWxlZCBiZWZvcmUgb3IgYXRcblx0XHQgKiAgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJuICB7U3RyaW5nfSAgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIGlucHV0IGluIHNldFN0YXRlQXRUaW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5nZXQodGltZSk7XG5cdCAgICAgICAgaWYgKGV2ZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBldmVudC5zdGF0ZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdGlhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIHN0YXRlIHRvIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgc3RhdGUgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIHRvIHNldC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lU3RhdGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuc2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAoc3RhdGUsIHRpbWUpIHtcblx0ICAgICAgICAvL2FsbCBzdGF0ZSBjaGFuZ2VzIG5lZWQgdG8gYmUgPj0gdGhlIHByZXZpb3VzIHN0YXRlIHRpbWVcblx0ICAgICAgICAvL1RPRE8gdGhyb3cgZXJyb3IgaWYgdGltZSA8IHRoZSBwcmV2aW91cyBldmVudCB0aW1lXG5cdCAgICAgICAgdGhpcy5hZGQoe1xuXHQgICAgICAgICAgICAnc3RhdGUnOiBzdGF0ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZXZlbnQgYmVmb3JlIHRoZSB0aW1lIHdpdGggdGhlIGdpdmVuIHN0YXRlXG5cdFx0ICogIEBwYXJhbSB7VG9uZS5TdGF0ZX0gc3RhdGUgVGhlIHN0YXRlIHRvIGxvb2sgZm9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGNoZWNrIGJlZm9yZVx0XHRcdFxuXHRcdCAqICBAcmV0dXJuICB7T2JqZWN0fSAgVGhlIGV2ZW50IHdpdGggdGhlIGdpdmVuIHN0YXRlIGJlZm9yZSB0aGUgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlLnByb3RvdHlwZS5nZXRMYXN0U3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fdGltZWxpbmVbaV07XG5cdCAgICAgICAgICAgIGlmIChldmVudC5zdGF0ZSA9PT0gc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBldmVudCBhZnRlciB0aGUgdGltZSB3aXRoIHRoZSBnaXZlbiBzdGF0ZVxuXHRcdCAqICBAcGFyYW0ge1RvbmUuU3RhdGV9IHN0YXRlIFRoZSBzdGF0ZSB0byBsb29rIGZvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBjaGVjayBmcm9tXG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBUaGUgZXZlbnQgd2l0aCB0aGUgZ2l2ZW4gc3RhdGUgYWZ0ZXIgdGhlIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuZ2V0TmV4dFN0YXRlID0gZnVuY3Rpb24gKHN0YXRlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA8IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl90aW1lbGluZVtpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChldmVudC5zdGF0ZSA9PT0gc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZWxpbmVTdGF0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBVc2VzIFtUb25lLlRpY2tTaWduYWxdKFRpY2tTaWduYWwpIHRvIHRyYWNrIGVsYXBzZWQgdGlja3Mgd2l0aFxuXHRcdCAqICBcdFx0Y29tcGxleCBhdXRvbWF0aW9uIGN1cnZlcy5cblx0XHQgKlxuXHRcdCAqIFx0QGNvbnN0cnVjdG9yXG5cdCAgICAgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgaW5pdGlhbCBmcmVxdWVuY3kgdGhhdCB0aGUgc2lnbmFsIHRpY2tzIGF0XG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZnJlcXVlbmN5J10sIFRvbmUuVGlja1NvdXJjZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gc2hvdWxkIGJlIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5UaWNrU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHN0YXRlIHRpbWVsaW5lXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBvZmZzZXQgdmFsdWVzIG9mIHRoZSB0aWNrc1xuXHRcdFx0ICogQHR5cGUge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldCA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgLy9hZGQgdGhlIGZpcnN0IGV2ZW50XG5cdCAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSgwLCAwKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpY2tTb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UuZGVmYXVsdHMgPSB7ICdmcmVxdWVuY3knOiAxIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiLCBcInN0b3BwZWRcIiBvciBcInBhdXNlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpY2tTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGNsb2NrIGF0IHRoZSBnaXZlbiB0aW1lLiBPcHRpb25hbGx5IHBhc3MgaW4gYW4gb2Zmc2V0XG5cdFx0ICogIG9mIHdoZXJlIHRvIHN0YXJ0IHRoZSB0aWNrIGNvdW50ZXIgZnJvbS5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICB0aW1lICAgIFRoZSB0aW1lIHRoZSBjbG9jayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtUaWNrcz0wfSBvZmZzZXQgVGhlIG51bWJlciBvZiB0aWNrcyB0byBzdGFydCB0aGUgc291cmNlIGF0XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlRpY2tTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQob2Zmc2V0KSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZShvZmZzZXQsIHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBjbG9jay4gU3RvcHBpbmcgdGhlIGNsb2NrIHJlc2V0cyB0aGUgdGljayBjb3VudGVyIHRvIDAuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBjbG9jayBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NvdXJjZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGNsb2NrLnN0b3AoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vY2FuY2VsIHRoZSBwcmV2aW91cyBzdG9wXG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQudGltZSA+IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuY2FuY2VsKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhdXNlIHRoZSBjbG9jay4gUGF1c2luZyBkb2VzIG5vdCByZXNldCB0aGUgdGljayBjb3VudGVyLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlBhdXNlZCwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgc3RhcnQvc3RvcC9wYXVzZSBhbmQgc2V0VGlja0F0VGltZSBldmVudHMgc2NoZWR1bGVkIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0byBjbGVhciB0aGUgZXZlbnRzIGFmdGVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgZWxhcHNlZCB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICBUaGUgbnVtYmVyIG9mIHRpY2tzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIHN0b3BFdmVudCA9IHRoaXMuX3N0YXRlLmdldExhc3RTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIC8vdGhpcyBldmVudCBhbGxvd3MgZm9yRWFjaEJldHdlZW4gdG8gaXRlcmF0ZSB1bnRpbCB0aGUgY3VycmVudCB0aW1lXG5cdCAgICAgICAgdmFyIHRtcEV2ZW50ID0ge1xuXHQgICAgICAgICAgICBzdGF0ZTogVG9uZS5TdGF0ZS5QYXVzZWQsXG5cdCAgICAgICAgICAgIHRpbWU6IHRpbWVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9rZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBvZmZzZXQgZXZlbnRcblx0ICAgICAgICB2YXIgbGFzdFN0YXRlID0gc3RvcEV2ZW50O1xuXHQgICAgICAgIHZhciBlbGFwc2VkVGlja3MgPSAwO1xuXHQgICAgICAgIC8vaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgZXZlbnRzIHNpbmNlIHRoZSBsYXN0IHN0b3Bcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdG9wRXZlbnQudGltZSwgdGltZSArIHRoaXMuc2FtcGxlVGltZSwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgdmFyIHBlcmlvZFN0YXJ0VGltZSA9IGxhc3RTdGF0ZS50aW1lO1xuXHQgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGFuIG9mZnNldCBldmVudCBpbiB0aGlzIHBlcmlvZCB1c2UgdGhhdFxuXHQgICAgICAgICAgICB2YXIgb2Zmc2V0RXZlbnQgPSB0aGlzLl90aWNrT2Zmc2V0LmdldChlLnRpbWUpO1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0RXZlbnQudGltZSA+PSBsYXN0U3RhdGUudGltZSkge1xuXHQgICAgICAgICAgICAgICAgZWxhcHNlZFRpY2tzID0gb2Zmc2V0RXZlbnQudGlja3M7XG5cdCAgICAgICAgICAgICAgICBwZXJpb2RTdGFydFRpbWUgPSBvZmZzZXRFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChsYXN0U3RhdGUuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBlLnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRUaWNrcyArPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShlLnRpbWUpIC0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUocGVyaW9kU3RhcnRUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBsYXN0U3RhdGUgPSBlO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIHRlbXBvcmFyeSBldmVudFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLnJlbW92ZSh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIHRpY2tzXG5cdCAgICAgICAgcmV0dXJuIGVsYXBzZWRUaWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuIFN0YXJ0cyBjb3VudGluZyBhdCAwXG5cdFx0ICogIGFuZCBpbmNyZW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC4gUmV0dXJucyAtMSB3aGVuIHN0b3BwZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpY2tTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHRpY2tzXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLCAndGlja3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRpY2tzQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKHQsIHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHNpbmNlIHRpY2tzPTAgdGhhdCB0aGUgVGlja1NvdXJjZSBoYXMgYmVlbiBydW5uaW5nLiBBY2NvdW50c1xuXHRcdCAqICBmb3IgdGVtcG8gY3VydmVzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpY2tTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHNlY29uZHNcblx0XHQgKiAgQHR5cGUge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZSwgJ3NlY29uZHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNlY29uZHNBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLmZyZXF1ZW5jeS50aW1lVG9UaWNrcyhzLCBub3cpO1xuXHQgICAgICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKHRpY2tzLCBub3cpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZWxhcHNlZCBzZWNvbmRzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBnZXQgdGhlIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc30gIFRoZSBudW1iZXIgb2YgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFNlY29uZHNBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgc3RvcEV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0TGFzdFN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgLy90aGlzIGV2ZW50IGFsbG93cyBmb3JFYWNoQmV0d2VlbiB0byBpdGVyYXRlIHVudGlsIHRoZSBjdXJyZW50IHRpbWVcblx0ICAgICAgICB2YXIgdG1wRXZlbnQgPSB7XG5cdCAgICAgICAgICAgIHN0YXRlOiBUb25lLlN0YXRlLlBhdXNlZCxcblx0ICAgICAgICAgICAgdGltZTogdGltZVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuYWRkKHRtcEV2ZW50KTtcblx0ICAgICAgICAvL2tlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIG9mZnNldCBldmVudFxuXHQgICAgICAgIHZhciBsYXN0U3RhdGUgPSBzdG9wRXZlbnQ7XG5cdCAgICAgICAgdmFyIGVsYXBzZWRTZWNvbmRzID0gMDtcblx0ICAgICAgICAvL2l0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIGV2ZW50cyBzaW5jZSB0aGUgbGFzdCBzdG9wXG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RvcEV2ZW50LnRpbWUsIHRpbWUgKyB0aGlzLnNhbXBsZVRpbWUsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIHZhciBwZXJpb2RTdGFydFRpbWUgPSBsYXN0U3RhdGUudGltZTtcblx0ICAgICAgICAgICAgLy9pZiB0aGVyZSBpcyBhbiBvZmZzZXQgZXZlbnQgaW4gdGhpcyBwZXJpb2QgdXNlIHRoYXRcblx0ICAgICAgICAgICAgdmFyIG9mZnNldEV2ZW50ID0gdGhpcy5fdGlja09mZnNldC5nZXQoZS50aW1lKTtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldEV2ZW50LnRpbWUgPj0gbGFzdFN0YXRlLnRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRTZWNvbmRzID0gb2Zmc2V0RXZlbnQuc2Vjb25kcztcblx0ICAgICAgICAgICAgICAgIHBlcmlvZFN0YXJ0VGltZSA9IG9mZnNldEV2ZW50LnRpbWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKGxhc3RTdGF0ZS5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIGUuc3RhdGUgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgZWxhcHNlZFNlY29uZHMgKz0gZS50aW1lIC0gcGVyaW9kU3RhcnRUaW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGxhc3RTdGF0ZSA9IGU7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgdGVtcG9yYXJ5IGV2ZW50XG5cdCAgICAgICAgdGhpcy5fc3RhdGUucmVtb3ZlKHRtcEV2ZW50KTtcblx0ICAgICAgICAvL3JldHVybiB0aGUgdGlja3Ncblx0ICAgICAgICByZXR1cm4gZWxhcHNlZFNlY29uZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgdGljayB2YWx1ZSB0byBzZXRcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIHNldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVGlja1NvdXJjZX0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5zZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aWNrcywgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmFkZCh7XG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZSxcblx0ICAgICAgICAgICAgJ3RpY2tzJzogdGlja3MsXG5cdCAgICAgICAgICAgICdzZWNvbmRzJzogdGhpcy5mcmVxdWVuY3kuZ2V0RHVyYXRpb25PZlRpY2tzKHRpY2tzLCB0aW1lKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBzY2hlZHVsZWQgc3RhdGUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybiAge1N0cmluZ30gIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBpbnB1dCBpbiBzZXRTdGF0ZUF0VGltZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RhcnQoXCIrMC4xXCIpO1xuXHRcdCAqIHNvdXJjZS5nZXRTdGF0ZUF0VGltZShcIiswLjFcIik7IC8vcmV0dXJucyBcInN0YXJ0ZWRcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIHRpbWUgb2YgdGhlIGdpdmVuIHRpY2suIFRoZSBzZWNvbmQgYXJndW1lbnRcblx0XHQgKiBpcyB3aGVuIHRvIHRlc3QgYmVmb3JlLiBTaW5jZSB0aWNrcyBjYW4gYmUgc2V0ICh3aXRoIHNldFRpY2tzQXRUaW1lKVxuXHRcdCAqIHRoZXJlIG1heSBiZSBtdWx0aXBsZSB0aW1lcyBmb3IgYSBnaXZlbiB0aWNrIHZhbHVlLiBcblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgbnVtYmVyLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSBiZWZvcmUgV2hlbiB0byBtZWFzdXJlIHRoZSB0aWNrIHZhbHVlIGZyb20uIFxuXHRcdCAqIEByZXR1cm4ge1RpbWV9ICAgICAgIFRoZSB0aW1lIG9mIHRoZSB0aWNrXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFRpbWVPZlRpY2sgPSBmdW5jdGlvbiAodGljaywgYmVmb3JlKSB7XG5cdCAgICAgICAgYmVmb3JlID0gVG9uZS5kZWZhdWx0QXJnKGJlZm9yZSwgdGhpcy5ub3coKSk7XG5cdCAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX3RpY2tPZmZzZXQuZ2V0KGJlZm9yZSk7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KGJlZm9yZSk7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGltZSA9IE1hdGgubWF4KG9mZnNldC50aW1lLCBldmVudC50aW1lKTtcblx0ICAgICAgICB2YXIgYWJzb2x1dGVUaWNrcyA9IHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKHN0YXJ0VGltZSkgKyB0aWNrIC0gb2Zmc2V0LnRpY2tzO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZyZXF1ZW5jeS5nZXRUaW1lT2ZUaWNrKGFic29sdXRlVGlja3MpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2UgdGhlIGNhbGxiYWNrIGV2ZW50IGF0IGFsbCBzY2hlZHVsZWQgdGlja3MgYmV0d2VlbiB0aGUgXG5cdFx0ICogIHN0YXJ0IHRpbWUgYW5kIHRoZSBlbmQgdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICBzdGFydFRpbWUgIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlYXJjaCByYW5nZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICBlbmRUaW1lICAgIFRoZSBlbmQgb2YgdGhlIHNlYXJjaCByYW5nZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbjxUaW1lLFRpY2tzPn0gIGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGVhY2ggdGlja1xuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5UaWNrU291cmNlfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmZvckVhY2hUaWNrQmV0d2VlbiA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9vbmx5IGl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VjdGlvbnMgd2hlcmUgaXQgaXMgXCJzdGFydGVkXCJcblx0ICAgICAgICB2YXIgbGFzdFN0YXRlRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdGFydFRpbWUsIGVuZFRpbWUsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBpZiAobGFzdFN0YXRlRXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBldmVudC5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmZvckVhY2hUaWNrQmV0d2VlbihNYXRoLm1heChsYXN0U3RhdGVFdmVudC50aW1lLCBzdGFydFRpbWUpLCBldmVudC50aW1lIC0gdGhpcy5zYW1wbGVUaW1lLCBjYWxsYmFjayk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbGFzdFN0YXRlRXZlbnQgPSBldmVudDtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IE1hdGgubWF4KGxhc3RTdGF0ZUV2ZW50LnRpbWUsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgaWYgKGxhc3RTdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgdGhpcy5fc3RhdGUpIHtcblx0ICAgICAgICAgICAgLy9maWd1cmUgb3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGZyZXF1ZW5jeSB0aWNrcyBhbmQgdGhlIFxuXHQgICAgICAgICAgICB2YXIgc3RhcnRUaWNrcyA9IHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrc0F0U3RhcnQgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShsYXN0U3RhdGVFdmVudC50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGRpZmYgPSBzdGFydFRpY2tzIC0gdGlja3NBdFN0YXJ0O1xuXHQgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gZGlmZiAlIDE7XG5cdCAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgIG9mZnNldCA9IDEgLSBvZmZzZXQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIG5leHRUaWNrVGltZSA9IHRoaXMuZnJlcXVlbmN5LmdldFRpbWVPZlRpY2soc3RhcnRUaWNrcyArIG9mZnNldCk7XG5cdCAgICAgICAgICAgIHZhciBlcnJvciA9IG51bGw7XG5cdCAgICAgICAgICAgIHdoaWxlIChuZXh0VGlja1RpbWUgPCBlbmRUaW1lICYmIHRoaXMuX3N0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5leHRUaWNrVGltZSwgTWF0aC5yb3VuZCh0aGlzLmdldFRpY2tzQXRUaW1lKG5leHRUaWNrVGltZSkpKTtcblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBuZXh0VGlja1RpbWUgKz0gdGhpcy5mcmVxdWVuY3kuZ2V0RHVyYXRpb25PZlRpY2tzKDEsIG5leHRUaWNrVGltZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKGVycm9yKSB7XG5cdCAgICAgICAgICAgIHRocm93IGVycm9yO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmcmVxdWVuY3knKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpY2tTb3VyY2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBzYW1wbGUgYWNjdXJhdGUgY2xvY2sgd2hpY2ggcHJvdmlkZXMgYSBjYWxsYmFjayBhdCB0aGUgZ2l2ZW4gcmF0ZS5cblx0XHQgKiAgICAgICAgICBXaGlsZSB0aGUgY2FsbGJhY2sgaXMgbm90IHNhbXBsZS1hY2N1cmF0ZSAoaXQgaXMgc3RpbGwgc3VzY2VwdGlibGUgdG9cblx0XHQgKiAgICAgICAgICBsb29zZSBKUyB0aW1pbmcpLCB0aGUgdGltZSBwYXNzZWQgaW4gYXMgdGhlIGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFja1xuXHRcdCAqICAgICAgICAgIGlzIHByZWNpc2UuIEZvciBtb3N0IGFwcGxpY2F0aW9ucywgaXQgaXMgYmV0dGVyIHRvIHVzZSBUb25lLlRyYW5zcG9ydFxuXHRcdCAqICAgICAgICAgIGluc3RlYWQgb2YgdGhlIENsb2NrIGJ5IGl0c2VsZiBzaW5jZSB5b3UgY2FuIHN5bmNocm9uaXplIG11bHRpcGxlIGNhbGxiYWNrcy5cblx0XHQgKlxuXHRcdCAqIFx0QGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICogXHRAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aXRoIHRoZSB0aW1lIG9mIHRoZSBhdWRpbyBldmVudFxuXHRcdCAqIFx0QHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgcmF0ZSBvZiB0aGUgY2FsbGJhY2tcblx0XHQgKiBcdEBleGFtcGxlXG5cdFx0ICogLy90aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGFwcHJveGltYXRlbHkgb25jZSBhIHNlY29uZFxuXHRcdCAqIC8vYW5kIHdpbGwgcHJpbnQgdGhlIHRpbWUgZXhhY3RseSBvbmNlIGEgc2Vjb25kIGFwYXJ0LlxuXHRcdCAqIHZhciBjbG9jayA9IG5ldyBUb25lLkNsb2NrKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2codGltZSk7XG5cdFx0ICogfSwgMSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdLCBUb25lLkNsb2NrKTtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gaW52b2tlIGF0IHRoZSBzY2hlZHVsZWQgdGljay5cblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG5leHQgdGltZSB0aGUgY2FsbGJhY2sgaXMgc2NoZWR1bGVkLlxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGljayBjb3VudGVyXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlRpY2tTb3VyY2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UgPSBuZXcgVG9uZS5UaWNrU291cmNlKG9wdGlvbnMuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbGFzdCB0aW1lIHRoZSBsb29wIGNhbGxiYWNrIHdhcyBpbnZva2VkXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJhdGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBiZSBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlICB7QlBNfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fdGlja1NvdXJjZS5mcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzdGF0ZSB0aW1lbGluZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIC8vYWRkIGFuIGluaXRpYWwgc3RhdGVcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb29wIGZ1bmN0aW9uIGJvdW5kIHRvIGl0cyBjb250ZXh0LlxuXHRcdFx0ICogIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHJlbW92ZSB0aGUgZXZlbnQgaW4gdGhlIGVuZC5cblx0XHRcdCAqICBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JvdW5kTG9vcCA9IHRoaXMuX2xvb3AuYmluZCh0aGlzKTtcblx0ICAgICAgICAvL2JpbmQgYSBjYWxsYmFjayB0byB0aGUgd29ya2VyIHRocmVhZFxuXHQgICAgICAgIHRoaXMuY29udGV4dC5vbigndGljaycsIHRoaXMuX2JvdW5kTG9vcCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DbG9jaywgVG9uZS5FbWl0dGVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiLCBcInN0b3BwZWRcIiBvciBcInBhdXNlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNsb2NrI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2xvY2sucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgY2xvY2sgYXQgdGhlIGdpdmVuIHRpbWUuIE9wdGlvbmFsbHkgcGFzcyBpbiBhbiBvZmZzZXRcblx0XHQgKiAgb2Ygd2hlcmUgdG8gc3RhcnQgdGhlIHRpY2sgY291bnRlciBmcm9tLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIHRpbWUgICAgVGhlIHRpbWUgdGhlIGNsb2NrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0gIHtUaWNrcz19ICBvZmZzZXQgIFdoZXJlIHRoZSB0aWNrIGNvdW50ZXIgc3RhcnRzIGNvdW50aW5nIGZyb20uXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkNsb2NrfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RhcnRlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9sYXN0VXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgY2xvY2suIFN0b3BwaW5nIHRoZSBjbG9jayByZXNldHMgdGhlIHRpY2sgY291bnRlciB0byAwLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNsb2NrfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogY2xvY2suc3RvcCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc3RvcCh0aW1lKTtcblx0ICAgICAgICBpZiAodGltZSA8IHRoaXMuX2xhc3RVcGRhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXVzZSB0aGUgY2xvY2suIFBhdXNpbmcgZG9lcyBub3QgcmVzZXQgdGhlIHRpY2sgY291bnRlci5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DbG9ja30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlBhdXNlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UucGF1c2UodGltZSk7XG5cdCAgICAgICAgICAgIGlmICh0aW1lIDwgdGhpcy5fbGFzdFVwZGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdwYXVzZScsIHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC4gU3RhcnRzIGNvdW50aW5nIGF0IDBcblx0XHQgKiAgYW5kIGluY3JlbWVudHMgYWZ0ZXIgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkLlxuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DbG9jay5wcm90b3R5cGUsICd0aWNrcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmdldFRpY2tzQXRUaW1lKHRoaXMubm93KCkpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS50aWNrcyA9IHQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgc2luY2UgdGlja3M9MCB0aGF0IHRoZSBDbG9jayBoYXMgYmVlbiBydW5uaW5nLiBBY2NvdW50c1xuXHRcdCAqICBmb3IgdGVtcG8gY3VydmVzXG5cdFx0ICogIEB0eXBlIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2xvY2sucHJvdG90eXBlLCAnc2Vjb25kcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2Uuc2Vjb25kcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5zZWNvbmRzID0gcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGVsYXBzZWQgc2Vjb25kcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSBlbGFwc2VkIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9ICBUaGUgbnVtYmVyIG9mIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZ2V0U2Vjb25kc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2UuZ2V0U2Vjb25kc0F0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTZXQgdGhlIGNsb2NrJ3MgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIHZhbHVlIHRvIHNldFxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gc2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VG9uZS5DbG9ja30gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuc2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGlja3MsIHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlLnNldFRpY2tzQXRUaW1lKHRpY2tzLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGNsb2NrJ3MgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBnZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgICAgVGhlIHRpY2sgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2UuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSB0aW1lIG9mIHRoZSBuZXh0IHRpY2tcblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgbnVtYmVyLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IGJlZm9yZSBcblx0XHQgKiBAcmV0dXJuIHtUb25lLkNsb2NrfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5uZXh0VGlja1RpbWUgPSBmdW5jdGlvbiAob2Zmc2V0LCB3aGVuKSB7XG5cdCAgICAgICAgd2hlbiA9IHRoaXMudG9TZWNvbmRzKHdoZW4pO1xuXHQgICAgICAgIHZhciBjdXJyZW50VGljayA9IHRoaXMuZ2V0VGlja3NBdFRpbWUod2hlbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2UuZ2V0VGltZU9mVGljayhjdXJyZW50VGljayArIG9mZnNldCwgd2hlbik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzY2hlZHVsaW5nIGxvb3AuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5fbG9vcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgc3RhcnRUaW1lID0gdGhpcy5fbGFzdFVwZGF0ZTtcblx0ICAgICAgICB2YXIgZW5kVGltZSA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IGVuZFRpbWU7XG5cdCAgICAgICAgaWYgKHN0YXJ0VGltZSAhPT0gZW5kVGltZSkge1xuXHQgICAgICAgICAgICAvL3RoZSBzdGF0ZSBjaGFuZ2UgZXZlbnRzXG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hCZXR3ZWVuKHN0YXJ0VGltZSwgZW5kVGltZSwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5zdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgY2FzZSBUb25lLlN0YXRlLlN0YXJ0ZWQ6XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX3RpY2tTb3VyY2UuZ2V0VGlja3NBdFRpbWUoZS50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgZS50aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSBUb25lLlN0YXRlLlN0b3BwZWQ6XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKGUudGltZSAhPT0gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0b3AnLCBlLnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgVG9uZS5TdGF0ZS5QYXVzZWQ6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdwYXVzZScsIGUudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgICAgIC8vdGhlIHRpY2sgY2FsbGJhY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UuZm9yRWFjaFRpY2tCZXR3ZWVuKHN0YXJ0VGltZSwgZW5kVGltZSwgZnVuY3Rpb24gKHRpbWUsIHRpY2tzKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHRpY2tzKTtcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHNjaGVkdWxlZCBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJuICB7U3RyaW5nfSAgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIGlucHV0IGluIHNldFN0YXRlQXRUaW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGNsb2NrLnN0YXJ0KFwiKzAuMVwiKTtcblx0XHQgKiBjbG9jay5nZXRTdGF0ZUF0VGltZShcIiswLjFcIik7IC8vcmV0dXJucyBcInN0YXJ0ZWRcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNsb2NrfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5vZmYoJ3RpY2snLCB0aGlzLl9ib3VuZExvb3ApO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmcmVxdWVuY3knKTtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYm91bmRMb29wID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IEluZmluaXR5O1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ2xvY2s7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTaW1pbGFyIHRvIFRvbmUuVGltZWxpbmUsIGJ1dCBhbGwgZXZlbnRzIHJlcHJlc2VudFxuXHRcdCAqICAgICAgICAgaW50ZXJ2YWxzIHdpdGggYm90aCBcInRpbWVcIiBhbmQgXCJkdXJhdGlvblwiIHRpbWVzLiBUaGVcblx0XHQgKiAgICAgICAgIGV2ZW50cyBhcmUgcGxhY2VkIGluIGEgdHJlZSBzdHJ1Y3R1cmUgb3B0aW1pemVkXG5cdFx0ICogICAgICAgICBmb3IgcXVlcnlpbmcgYW4gaW50ZXJzZWN0aW9uIHBvaW50IHdpdGggdGhlIHRpbWVsaW5lXG5cdFx0ICogICAgICAgICBldmVudHMuIEludGVybmFsbHkgdXNlcyBhbiBbSW50ZXJ2YWwgVHJlZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW50ZXJ2YWxfdHJlZSlcblx0XHQgKiAgICAgICAgIHRvIHJlcHJlc2VudCB0aGUgZGF0YS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByb290IG5vZGUgb2YgdGhlIGludGV2YWwgdHJlZVxuXHRcdFx0ICogIEB0eXBlICB7SW50ZXJ2YWxOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yb290ID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBLZWVwIHRyYWNrIG9mIHRoZSBsZW5ndGggb2YgdGhlIHRpbWVsaW5lLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZW5ndGggPSAwO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuSW50ZXJ2YWxUaW1lbGluZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGV2ZW50IHRvIGFkZCB0byB0aGUgdGltZWxpbmUuIEFsbCBldmVudHMgbXVzdFxuXHRcdCAqICBoYXZlIGEgdGltZSBhbmQgZHVyYXRpb24gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCB0byBhZGQgdG8gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkludGVydmFsVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYoZXZlbnQudGltZSkgfHwgVG9uZS5pc1VuZGVmKGV2ZW50LmR1cmF0aW9uKSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuSW50ZXJ2YWxUaW1lbGluZTogZXZlbnRzIG11c3QgaGF2ZSB0aW1lIGFuZCBkdXJhdGlvbiBwYXJhbWV0ZXJzJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGV2ZW50LnRpbWUgPSBldmVudC50aW1lLnZhbHVlT2YoKTtcblx0ICAgICAgICB2YXIgbm9kZSA9IG5ldyBJbnRlcnZhbE5vZGUoZXZlbnQudGltZSwgZXZlbnQudGltZSArIGV2ZW50LmR1cmF0aW9uLCBldmVudCk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdCA9IG5vZGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5pbnNlcnQobm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2xlbmd0aCsrO1xuXHQgICAgICAgIC8vIFJlc3RydWN0dXJlIHRyZWUgdG8gYmUgYmFsYW5jZWRcblx0ICAgICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBub2RlLnVwZGF0ZUhlaWdodCgpO1xuXHQgICAgICAgICAgICBub2RlLnVwZGF0ZU1heCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWJhbGFuY2Uobm9kZSk7XG5cdCAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCB0byByZW1vdmUgZnJvbSB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHJldHVybiAge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2goZXZlbnQudGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSByZXN1bHRzW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKG5vZGUuZXZlbnQgPT09IGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlTm9kZShub2RlKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZW5ndGgtLTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkludGVydmFsVGltZWxpbmUjXG5cdFx0ICogIEBuYW1lIGxlbmd0aFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBldmVudHMgd2hvc2UgdGltZSB0aW1lIGlzIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIHRoaXMuZm9yRWFjaEZyb20oYWZ0ZXIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICB0aGlzLnJlbW92ZShldmVudCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSByb290IG5vZGUgYXMgdGhlIGdpdmVuIG5vZGVcblx0XHQgKiAgQHBhcmFtIHtJbnRlcnZhbE5vZGV9IG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3NldFJvb3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHRoaXMuX3Jvb3QgPSBub2RlO1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QucGFyZW50ID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlcGxhY2UgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIG5vZGUgaW4gdGhlIG5vZGUncyBwYXJlbnRcblx0XHQgKiAgd2l0aCB0aGUgcmVwbGFjZW1lbnQgbm9kZS5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICByZXBsYWNlbWVudFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcmVwbGFjZU5vZGVJblBhcmVudCA9IGZ1bmN0aW9uIChub2RlLCByZXBsYWNlbWVudCkge1xuXHQgICAgICAgIGlmIChub2RlLnBhcmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBpZiAobm9kZS5pc0xlZnRDaGlsZCgpKSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5sZWZ0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5yaWdodCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYmFsYW5jZShub2RlLnBhcmVudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0Um9vdChyZXBsYWNlbWVudCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgdGhlIG5vZGUgZnJvbSB0aGUgdHJlZSBhbmQgcmVwbGFjZSBpdCB3aXRoXG5cdFx0ICogIGEgc3VjY2Vzc29yIHdoaWNoIGZvbGxvd3MgdGhlIHNjaGVtYS5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcmVtb3ZlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgaWYgKG5vZGUubGVmdCA9PT0gbnVsbCAmJiBub2RlLnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgbnVsbCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlLnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgbm9kZS5sZWZ0KTtcblx0ICAgICAgICB9IGVsc2UgaWYgKG5vZGUubGVmdCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIG5vZGUucmlnaHQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBiYWxhbmNlID0gbm9kZS5nZXRCYWxhbmNlKCk7XG5cdCAgICAgICAgICAgIHZhciByZXBsYWNlbWVudCwgdGVtcDtcblx0ICAgICAgICAgICAgaWYgKGJhbGFuY2UgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLmxlZnQucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlcGxhY2VtZW50LnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnBhcmVudC5yaWdodCA9IHJlcGxhY2VtZW50LmxlZnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHJlcGxhY2VtZW50LnBhcmVudDtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5sZWZ0ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnJpZ2h0ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLnJpZ2h0LmxlZnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LmxlZnQgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IG5vZGUucmlnaHQubGVmdDtcblx0ICAgICAgICAgICAgICAgIHdoaWxlIChyZXBsYWNlbWVudC5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucGFyZW50ID0gcmVwbGFjZW1lbnQucGFyZW50O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucGFyZW50LmxlZnQgPSByZXBsYWNlbWVudC5yaWdodDtcblx0ICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudC5wYXJlbnQ7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5sZWZ0ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChub2RlLnBhcmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKG5vZGUuaXNMZWZ0Q2hpbGQoKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50LmxlZnQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQucmlnaHQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocmVwbGFjZW1lbnQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgcmVwbGFjZW1lbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWJhbGFuY2UodGVtcCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIG5vZGUuZGlzcG9zZSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSb3RhdGUgdGhlIHRyZWUgdG8gdGhlIGxlZnRcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcm90YXRlTGVmdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50O1xuXHQgICAgICAgIHZhciBpc0xlZnRDaGlsZCA9IG5vZGUuaXNMZWZ0Q2hpbGQoKTtcblx0ICAgICAgICAvLyBNYWtlIG5vZGUucmlnaHQgdGhlIG5ldyByb290IG9mIHRoaXMgc3ViIHRyZWUgKGluc3RlYWQgb2Ygbm9kZSlcblx0ICAgICAgICB2YXIgcGl2b3ROb2RlID0gbm9kZS5yaWdodDtcblx0ICAgICAgICBub2RlLnJpZ2h0ID0gcGl2b3ROb2RlLmxlZnQ7XG5cdCAgICAgICAgcGl2b3ROb2RlLmxlZnQgPSBub2RlO1xuXHQgICAgICAgIGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKGlzTGVmdENoaWxkKSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQubGVmdCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHBhcmVudC5yaWdodCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocGl2b3ROb2RlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJvdGF0ZSB0aGUgdHJlZSB0byB0aGUgcmlnaHRcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcm90YXRlUmlnaHQgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcblx0ICAgICAgICB2YXIgaXNMZWZ0Q2hpbGQgPSBub2RlLmlzTGVmdENoaWxkKCk7XG5cdCAgICAgICAgLy8gTWFrZSBub2RlLmxlZnQgdGhlIG5ldyByb290IG9mIHRoaXMgc3ViIHRyZWUgKGluc3RlYWQgb2Ygbm9kZSlcblx0ICAgICAgICB2YXIgcGl2b3ROb2RlID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgIG5vZGUubGVmdCA9IHBpdm90Tm9kZS5yaWdodDtcblx0ICAgICAgICBwaXZvdE5vZGUucmlnaHQgPSBub2RlO1xuXHQgICAgICAgIGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKGlzTGVmdENoaWxkKSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQubGVmdCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHBhcmVudC5yaWdodCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocGl2b3ROb2RlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEJhbGFuY2UgdGhlIEJTVFxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9yZWJhbGFuY2UgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHZhciBiYWxhbmNlID0gbm9kZS5nZXRCYWxhbmNlKCk7XG5cdCAgICAgICAgaWYgKGJhbGFuY2UgPiAxKSB7XG5cdCAgICAgICAgICAgIGlmIChub2RlLmxlZnQuZ2V0QmFsYW5jZSgpIDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlTGVmdChub2RlLmxlZnQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlUmlnaHQobm9kZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKGJhbGFuY2UgPCAtMSkge1xuXHQgICAgICAgICAgICBpZiAobm9kZS5yaWdodC5nZXRCYWxhbmNlKCkgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVSaWdodChub2RlLnJpZ2h0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZUxlZnQobm9kZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCBhbiBldmVudCB3aG9zZSB0aW1lIGFuZCBkdXJhdGlvbiBzcGFuIHRoZSBnaXZlIHRpbWUuIFdpbGxcblx0XHQgKiAgcmV0dXJuIHRoZSBtYXRjaCB3aG9zZSBcInRpbWVcIiB2YWx1ZSBpcyBjbG9zZXN0IHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R9ICBldmVudCAgVGhlIGV2ZW50IHRvIGFkZCB0byB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIFRoZSBldmVudCB3aGljaCBzcGFucyB0aGUgZGVzaXJlZCB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2godGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgICAgIHZhciBtYXggPSByZXN1bHRzWzBdO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdHNbaV0ubG93ID4gbWF4Lmxvdykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBtYXggPSByZXN1bHRzW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBtYXguZXZlbnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgYWxsTm9kZXMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC50cmF2ZXJzZShmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICAgICAgYWxsTm9kZXMucHVzaChub2RlKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldiA9IGFsbE5vZGVzW2ldLmV2ZW50O1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgaW4gd2hpY2ggdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgb3ZlcmxhcHMgd2l0aCB0aGUgdGltZSBhbmQgZHVyYXRpb24gdGltZSBvZiB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIG92ZXJsYXBwaW5nXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2godGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSByZXN1bHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXYgPSByZXN1bHRzW2ldLmV2ZW50O1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgaW4gd2hpY2ggdGhlIHRpbWUgaXMgZ3JlYXRlclxuXHRcdCAqICB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hGcm9tID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2hBZnRlcih0aW1lLCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IHJlc3VsdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldiA9IHJlc3VsdHNbaV0uZXZlbnQ7XG5cdCAgICAgICAgICAgICAgICBjYWxsYmFjayhldik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkludGVydmFsVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGFsbE5vZGVzID0gW107XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC50cmF2ZXJzZShmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICAgICAgYWxsTm9kZXMucHVzaChub2RlKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgYWxsTm9kZXNbaV0uZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBhbGxOb2RlcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcm9vdCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0SU5URVJWQUwgTk9ERSBIRUxQRVJcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJlcHJlc2VudHMgYSBub2RlIGluIHRoZSBiaW5hcnkgc2VhcmNoIHRyZWUsIHdpdGggdGhlIGFkZGl0aW9uXG5cdFx0ICogIG9mIGEgXCJoaWdoXCIgdmFsdWUgd2hpY2gga2VlcHMgdHJhY2sgb2YgdGhlIGhpZ2hlc3QgdmFsdWUgb2Zcblx0XHQgKiAgaXRzIGNoaWxkcmVuLlxuXHRcdCAqICBSZWZlcmVuY2VzOlxuXHRcdCAqICBodHRwczovL2Jyb29rbm92YWsud29yZHByZXNzLmNvbS8yMDEzLzEyLzA3L2F1Z21lbnRlZC1pbnRlcnZhbC10cmVlLWluLWMvXG5cdFx0ICogIGh0dHA6Ly93d3cubWlmLnZ1Lmx0L352YWxkYXMvQUxHT1JJVE1BSS9MSVRFUkFUVVJBL0Nvcm1lbi9Db3JtZW4ucGRmXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBsb3dcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBJbnRlcnZhbE5vZGUgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBldmVudCkge1xuXHQgICAgICAgIC8vdGhlIGV2ZW50IGNvbnRhaW5lclxuXHQgICAgICAgIHRoaXMuZXZlbnQgPSBldmVudDtcblx0ICAgICAgICAvL3RoZSBsb3cgdmFsdWVcblx0ICAgICAgICB0aGlzLmxvdyA9IGxvdztcblx0ICAgICAgICAvL3RoZSBoaWdoIHZhbHVlXG5cdCAgICAgICAgdGhpcy5oaWdoID0gaGlnaDtcblx0ICAgICAgICAvL3RoZSBoaWdoIHZhbHVlIGZvciB0aGlzIGFuZCBhbGwgY2hpbGQgbm9kZXNcblx0ICAgICAgICB0aGlzLm1heCA9IHRoaXMuaGlnaDtcblx0ICAgICAgICAvL3RoZSBub2RlcyB0byB0aGUgbGVmdFxuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBudWxsO1xuXHQgICAgICAgIC8vdGhlIG5vZGVzIHRvIHRoZSByaWdodFxuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICAvL3RoZSBwYXJlbnQgbm9kZVxuXHQgICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblx0ICAgICAgICAvL3RoZSBudW1iZXIgb2YgY2hpbGQgbm9kZXNcblx0ICAgICAgICB0aGlzLmhlaWdodCA9IDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEluc2VydCBhIG5vZGUgaW50byB0aGUgY29ycmVjdCBzcG90IGluIHRoZSB0cmVlXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAobm9kZS5sb3cgPD0gdGhpcy5sb3cpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubGVmdCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbm9kZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGVmdC5pbnNlcnQobm9kZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmlnaHQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodCA9IG5vZGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC5pbnNlcnQobm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZWFyY2ggdGhlIHRyZWUgZm9yIG5vZGVzIHdoaWNoIG92ZXJsYXBcblx0XHQgKiAgd2l0aCB0aGUgZ2l2ZW4gcG9pbnRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgcG9pbnQgIFRoZSBwb2ludCB0byBxdWVyeVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIHJlc3VsdHMgIFRoZSBhcnJheSB0byBwdXQgdGhlIHJlc3VsdHNcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuc2VhcmNoID0gZnVuY3Rpb24gKHBvaW50LCByZXN1bHRzKSB7XG5cdCAgICAgICAgLy8gSWYgcCBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIHJpZ2h0bW9zdCBwb2ludCBvZiBhbnkgaW50ZXJ2YWxcblx0ICAgICAgICAvLyBpbiB0aGlzIG5vZGUgYW5kIGFsbCBjaGlsZHJlbiwgdGhlcmUgd29uJ3QgYmUgYW55IG1hdGNoZXMuXG5cdCAgICAgICAgaWYgKHBvaW50ID4gdGhpcy5tYXgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBTZWFyY2ggbGVmdCBjaGlsZHJlblxuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5sZWZ0LnNlYXJjaChwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIENoZWNrIHRoaXMgbm9kZVxuXHQgICAgICAgIGlmICh0aGlzLmxvdyA8PSBwb2ludCAmJiB0aGlzLmhpZ2ggPiBwb2ludCkge1xuXHQgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIElmIHAgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIHRpbWUgb2YgdGhpcyBpbnRlcnZhbCxcblx0ICAgICAgICAvLyB0aGVuIGl0IGNhbid0IGJlIGluIGFueSBjaGlsZCB0byB0aGUgcmlnaHQuXG5cdCAgICAgICAgaWYgKHRoaXMubG93ID4gcG9pbnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBTZWFyY2ggcmlnaHQgY2hpbGRyZW5cblx0ICAgICAgICBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0LnNlYXJjaChwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZWFyY2ggdGhlIHRyZWUgZm9yIG5vZGVzIHdoaWNoIGFyZSBsZXNzXG5cdFx0ICogIHRoYW4gdGhlIGdpdmVuIHBvaW50XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHBvaW50ICBUaGUgcG9pbnQgdG8gcXVlcnlcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICByZXN1bHRzICBUaGUgYXJyYXkgdG8gcHV0IHRoZSByZXN1bHRzXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnNlYXJjaEFmdGVyID0gZnVuY3Rpb24gKHBvaW50LCByZXN1bHRzKSB7XG5cdCAgICAgICAgLy8gQ2hlY2sgdGhpcyBub2RlXG5cdCAgICAgICAgaWYgKHRoaXMubG93ID49IHBvaW50KSB7XG5cdCAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5sZWZ0LnNlYXJjaEFmdGVyKHBvaW50LCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBzZWFyY2ggdGhlIHJpZ2h0IHNpZGVcblx0ICAgICAgICBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0LnNlYXJjaEFmdGVyKHBvaW50LCByZXN1bHRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludm9rZSB0aGUgY2FsbGJhY2sgb24gdGhpcyBlbGVtZW50IGFuZCBib3RoIGl0J3MgYnJhbmNoZXNcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFja1xuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5sZWZ0LnRyYXZlcnNlKGNhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC50cmF2ZXJzZShjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVcGRhdGUgdGhlIGhlaWdodCBvZiB0aGUgbm9kZVxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS51cGRhdGVIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCAmJiB0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gTWF0aC5tYXgodGhpcy5sZWZ0LmhlaWdodCwgdGhpcy5yaWdodC5oZWlnaHQpICsgMTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJpZ2h0LmhlaWdodCArIDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmxlZnQuaGVpZ2h0ICsgMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmhlaWdodCA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVcGRhdGUgdGhlIGhlaWdodCBvZiB0aGUgbm9kZVxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS51cGRhdGVNYXggPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5tYXggPSB0aGlzLmhpZ2g7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLm1heCA9IE1hdGgubWF4KHRoaXMubWF4LCB0aGlzLmxlZnQubWF4KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5tYXggPSBNYXRoLm1heCh0aGlzLm1heCwgdGhpcy5yaWdodC5tYXgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGJhbGFuY2UgaXMgaG93IHRoZSBsZWFmcyBhcmUgZGlzdHJpYnV0ZWQgb24gdGhlIG5vZGVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIE5lZ2F0aXZlIG51bWJlcnMgYXJlIGJhbGFuY2VkIHRvIHRoZSByaWdodFxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5nZXRCYWxhbmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBiYWxhbmNlID0gMDtcblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsICYmIHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgYmFsYW5jZSA9IHRoaXMubGVmdC5oZWlnaHQgLSB0aGlzLnJpZ2h0LmhlaWdodDtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBiYWxhbmNlID0gdGhpcy5sZWZ0LmhlaWdodCArIDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGJhbGFuY2UgPSAtKHRoaXMucmlnaHQuaGVpZ2h0ICsgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBiYWxhbmNlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGlzIG5vZGUgaXMgdGhlIGxlZnQgY2hpbGRcblx0XHQgKiAgb2YgaXRzIHBhcmVudFxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5pc0xlZnRDaGlsZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgIT09IG51bGwgJiYgdGhpcy5wYXJlbnQubGVmdCA9PT0gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZ2V0L3NldCB0aGUgbGVmdCBub2RlXG5cdFx0ICogIEB0eXBlIHtJbnRlcnZhbE5vZGV9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxOb2RlLnByb3RvdHlwZSwgJ2xlZnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZWZ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZWZ0ID0gbm9kZTtcblx0ICAgICAgICAgICAgaWYgKG5vZGUgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gdGhpcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZUhlaWdodCgpO1xuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZU1heCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGdldC9zZXQgdGhlIHJpZ2h0IG5vZGVcblx0XHQgKiAgQHR5cGUge0ludGVydmFsTm9kZX1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRlcnZhbE5vZGUucHJvdG90eXBlLCAncmlnaHQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yaWdodDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmlnaHQgPSBub2RlO1xuXHQgICAgICAgICAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlSGVpZ2h0KCk7XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlTWF4KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgbnVsbCBvdXQgcmVmZXJlbmNlcy5cblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZXZlbnQgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEVORCBJTlRFUlZBTCBOT0RFIEhFTFBFUlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICByZXR1cm4gVG9uZS5JbnRlcnZhbFRpbWVsaW5lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVGlja3MgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgVGltZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBUb25lLlRpY2tzIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIG9yIHdpdGhvdXQgdGhlIGBuZXdgIGtleXdvcmQuIFRvbmUuVGlja3MgY2FuIGJlIHBhc3NlZFxuXHRcdCAqICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIG9mIGFueSBtZXRob2Qgd2hpY2ggdGFrZXMgdGltZSBhcyBhbiBhcmd1bWVudC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRyYW5zcG9ydFRpbWV9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdCA9IFRvbmUuVGlja3MoXCI0blwiKTsvL2EgcXVhcnRlciBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuVGlja3MpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnRUaW1lLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpY2tzKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpY2tzLCBUb25lLlRyYW5zcG9ydFRpbWUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX2RlZmF1bHRVbml0cyA9ICdpJztcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgY3VycmVudCB0aW1lIGluIHRoZSBnaXZlbiB1bml0c1xuXHRcdCAqIEByZXR1cm4ge1RpY2tzfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fbm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC50aWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2dldFBQUSgpICogYmVhdHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gc2Vjb25kcyAvICg2MCAvIHRoaXMuX2dldEJwbSgpKSAqIHRoaXMuX2dldFBQUSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiB0aWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSAvIHRoaXMuX2dldFBQUSgpICogKDYwIC8gdGhpcy5fZ2V0QnBtKCkpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpY2tzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVHJhbnNwb3J0RXZlbnQgaXMgYW4gaW50ZXJuYWwgY2xhc3MgdXNlZCBieSAoVG9uZS5UcmFuc3BvcnQpW1RyYW5zcG9ydF1cblx0XHQgKiAgICAgICAgIHRvIHNjaGVkdWxlIGV2ZW50cy4gRG8gbm8gaW52b2tlIHRoaXMgY2xhc3MgZGlyZWN0bHksIGl0IGlzXG5cdFx0ICogICAgICAgICBoYW5kbGVkIGZyb20gd2l0aGluIFRvbmUuVHJhbnNwb3J0LlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQgPSBmdW5jdGlvbiAoVHJhbnNwb3J0LCBvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlRyYW5zcG9ydEV2ZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBSZWZlcmVuY2UgdG8gdGhlIFRyYW5zcG9ydCB0aGF0IGNyZWF0ZWQgaXRcblx0XHRcdCAqIEB0eXBlIHtUb25lLlRyYW5zcG9ydH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0ID0gVHJhbnNwb3J0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHVuaXF1ZSBpZCBvZiB0aGUgZXZlbnRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlkID0gVG9uZS5UcmFuc3BvcnRFdmVudC5fZXZlbnRJZCsrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHRpbWUgdGhlIGV2ZW50IHN0YXJ0c1xuXHRcdFx0ICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy50aW1lID0gVG9uZS5UaWNrcyhvcHRpb25zLnRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBJZiB0aGUgZXZlbnQgc2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgYmVpbmcgY3JlYXRlZC5cblx0XHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uY2UgPSBvcHRpb25zLm9uY2U7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRFdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29uY2UnOiBmYWxzZSxcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3Bcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDdXJyZW50IElEIGNvdW50ZXJcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5fZXZlbnRJZCA9IDA7XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2UgdGhlIGV2ZW50IGNhbGxiYWNrLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFRoZSBBdWRpb0NvbnRleHQgdGltZSBpbiBzZWNvbmRzIG9mIHRoZSBldmVudFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5wcm90b3R5cGUuaW52b2tlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5jYWxsYmFjaykge1xuXHQgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fb25jZSAmJiB0aGlzLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5pZCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydEV2ZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy50aW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnRFdmVudDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50IGlzIGFuIGludGVybmFsIGNsYXNzIHVzZWQgYnkgVG9uZS5UcmFuc3BvcnRcblx0XHQgKiAgICAgICAgIHRvIHNjaGVkdWxlIHJlcGVhdCBldmVudHMuIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRyYW5zcG9ydEV2ZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCA9IGZ1bmN0aW9uIChUcmFuc3BvcnQsIG9wdGlvbnMpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydEV2ZW50LmNhbGwodGhpcywgVHJhbnNwb3J0LCBvcHRpb25zKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogV2hlbiB0aGUgZXZlbnQgc2hvdWxkIHN0b3AgcmVwZWF0aW5nXG5cdFx0XHQgKiBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kdXJhdGlvbiA9IFRvbmUuVGlja3Mob3B0aW9ucy5kdXJhdGlvbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgaW50ZXJ2YWwgb2YgdGhlIHJlcGVhdGVkIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBUb25lLlRpY2tzKG9wdGlvbnMuaW50ZXJ2YWwpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIElEIG9mIHRoZSBjdXJyZW50IHRpbWVsaW5lIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2N1cnJlbnRJZCA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIElEIG9mIHRoZSBuZXh0IHRpbWVsaW5lIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25leHRJZCA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICAqIFRoZSB0aW1lIG9mIHRoZSBuZXh0IGV2ZW50XG5cdFx0XHQgICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICAqIEBwcml2YXRlXG5cdFx0XHQgICovXG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSB0aGlzLnRpbWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBhIHJlZmVyZW5jZSB0byB0aGUgYm91bmQgc3RhcnQgbWV0aG9kXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYm91bmRSZXN0YXJ0ID0gdGhpcy5fcmVzdGFydC5iaW5kKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0Lm9uKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9ib3VuZFJlc3RhcnQpO1xuXHQgICAgICAgIHRoaXMuX3Jlc3RhcnQoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LCBUb25lLlRyYW5zcG9ydEV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZHVyYXRpb24nOiBJbmZpbml0eSxcblx0ICAgICAgICAnaW50ZXJ2YWwnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlIHRoZSBjYWxsYmFjay4gUmV0dXJucyB0aGUgdGljayB0aW1lIHdoaWNoXG5cdFx0ICogdGhlIG5leHQgZXZlbnQgc2hvdWxkIGJlIHNjaGVkdWxlZCBhdC5cblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWUgIFRoZSBBdWRpb0NvbnRleHQgdGltZSBpbiBzZWNvbmRzIG9mIHRoZSBldmVudFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuaW52b2tlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL2NyZWF0ZSBtb3JlIGV2ZW50cyBpZiBuZWNlc3Nhcnlcblx0ICAgICAgICB0aGlzLl9jcmVhdGVFdmVudHModGltZSk7XG5cdCAgICAgICAgLy9jYWxsIHRoZSBzdXBlciBjbGFzc1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmludm9rZS5jYWxsKHRoaXMsIHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFB1c2ggbW9yZSBldmVudHMgb250byB0aGUgdGltZWxpbmUgdG8ga2VlcCB1cCB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGltZWxpbmVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuX2NyZWF0ZUV2ZW50cyA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy8gc2NoZWR1bGUgdGhlIG5leHQgZXZlbnRcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLlRyYW5zcG9ydC5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAodGlja3MgPj0gdGhpcy50aW1lICYmIHRpY2tzID49IHRoaXMuX25leHRUaWNrICYmIHRoaXMuX25leHRUaWNrICsgdGhpcy5faW50ZXJ2YWwgPCB0aGlzLnRpbWUgKyB0aGlzLmR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX25leHRUaWNrICs9IHRoaXMuX2ludGVydmFsO1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJyZW50SWQgPSB0aGlzLl9uZXh0SWQ7XG5cdCAgICAgICAgICAgIHRoaXMuX25leHRJZCA9IHRoaXMuVHJhbnNwb3J0LnNjaGVkdWxlT25jZSh0aGlzLmludm9rZS5iaW5kKHRoaXMpLCBUb25lLlRpY2tzKHRoaXMuX25leHRUaWNrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFB1c2ggbW9yZSBldmVudHMgb250byB0aGUgdGltZWxpbmUgdG8ga2VlcCB1cCB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGltZWxpbmVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuX3Jlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX2N1cnJlbnRJZCk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5fbmV4dElkKTtcblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IHRoaXMudGltZTtcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLlRyYW5zcG9ydC5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAodGlja3MgPiB0aGlzLnRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSB0aGlzLnRpbWUgKyBNYXRoLmNlaWwoKHRpY2tzIC0gdGhpcy50aW1lKSAvIHRoaXMuX2ludGVydmFsKSAqIHRoaXMuX2ludGVydmFsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jdXJyZW50SWQgPSB0aGlzLlRyYW5zcG9ydC5zY2hlZHVsZU9uY2UodGhpcy5pbnZva2UuYmluZCh0aGlzKSwgVG9uZS5UaWNrcyh0aGlzLl9uZXh0VGljaykpO1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrICs9IHRoaXMuX2ludGVydmFsO1xuXHQgICAgICAgIHRoaXMuX25leHRJZCA9IHRoaXMuVHJhbnNwb3J0LnNjaGVkdWxlT25jZSh0aGlzLmludm9rZS5iaW5kKHRoaXMpLCBUb25lLlRpY2tzKHRoaXMuX25leHRUaWNrKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX2N1cnJlbnRJZCk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5fbmV4dElkKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5vZmYoJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX2JvdW5kUmVzdGFydCk7XG5cdCAgICAgICAgdGhpcy5fYm91bmRDcmVhdGVFdmVudHMgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmR1cmF0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVHJhbnNwb3J0IGZvciB0aW1pbmcgbXVzaWNhbCBldmVudHMuXG5cdFx0ICogICAgICAgICAgU3VwcG9ydHMgdGVtcG8gY3VydmVzIGFuZCB0aW1lIGNoYW5nZXMuIFVubGlrZSBicm93c2VyLWJhc2VkIHRpbWluZyAoc2V0SW50ZXJ2YWwsIHJlcXVlc3RBbmltYXRpb25GcmFtZSlcblx0XHQgKiAgICAgICAgICBUb25lLlRyYW5zcG9ydCB0aW1pbmcgZXZlbnRzIHBhc3MgaW4gdGhlIGV4YWN0IHRpbWUgb2YgdGhlIHNjaGVkdWxlZCBldmVudFxuXHRcdCAqICAgICAgICAgIGluIHRoZSBhcmd1bWVudCBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uIFBhc3MgdGhhdCB0aW1lIHZhbHVlIHRvIHRoZSBvYmplY3Rcblx0XHQgKiAgICAgICAgICB5b3UncmUgc2NoZWR1bGluZy4gPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBBIHNpbmdsZSB0cmFuc3BvcnQgaXMgY3JlYXRlZCBmb3IgeW91IHdoZW4gdGhlIGxpYnJhcnkgaXMgaW5pdGlhbGl6ZWQuXG5cdFx0ICogICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBUaGUgdHJhbnNwb3J0IGVtaXRzIHRoZSBldmVudHM6IFwic3RhcnRcIiwgXCJzdG9wXCIsIFwicGF1c2VcIiwgYW5kIFwibG9vcFwiIHdoaWNoIGFyZVxuXHRcdCAqICAgICAgICAgIGNhbGxlZCB3aXRoIHRoZSB0aW1lIG9mIHRoYXQgZXZlbnQgYXMgdGhlIGFyZ3VtZW50LlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JlcGVhdGVkIGV2ZW50IGV2ZXJ5IDh0aCBub3RlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSB0aW1lXG5cdFx0ICogfSwgXCI4blwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NjaGVkdWxlIGFuIGV2ZW50IG9uIHRoZSAxNnRoIG1lYXN1cmVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdC8vZG8gc29tZXRoaW5nIHdpdGggdGhlIHRpbWVcblx0XHQgKiB9LCBcIjE2OjA6MFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5jYWxsKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8vXHRMT09QSU5HXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0SWYgdGhlIHRyYW5zcG9ydCBsb29wcyBvciBub3QuXG5cdFx0XHRcdCAqICBAdHlwZSB7Ym9vbGVhbn1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMubG9vcCA9IGZhbHNlO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogXHRUaGUgbG9vcCBzdGFydCBwb3NpdGlvbiBpbiB0aWNrc1xuXHRcdFx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IDA7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdFRoZSBsb29wIGVuZCBwb3NpdGlvbiBpbiB0aWNrc1xuXHRcdFx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSAwO1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0Q0xPQ0svVEVNUE9cblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFB1bHNlcyBwZXIgcXVhcnRlciBpcyB0aGUgbnVtYmVyIG9mIHRpY2tzIHBlciBxdWFydGVyIG5vdGUuXG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9wcHEgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy5QUFE7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgd2F0Y2hlcyB0aGUgbWFpbiBvc2NpbGxhdG9yIGZvciB0aW1pbmcgdGlja3Ncblx0XHRcdFx0ICogIGluaXRpYWxseSBzdGFydHMgYXQgMTIwYnBtXG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKiAgQHR5cGUge1RvbmUuQ2xvY2t9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9jbG9jayA9IG5ldyBUb25lLkNsb2NrKHtcblx0ICAgICAgICAgICAgICAgICdjYWxsYmFjayc6IHRoaXMuX3Byb2Nlc3NUaWNrLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICAgICAnZnJlcXVlbmN5JzogMFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fYmluZENsb2NrRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIEJlYXRzIFBlciBNaW51dGUgb2YgdGhlIFRyYW5zcG9ydC5cblx0XHRcdFx0ICogIEB0eXBlIHtCUE19XG5cdFx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgPSA4MDtcblx0XHRcdFx0ICogLy9yYW1wIHRoZSBicG0gdG8gMTIwIG92ZXIgMTAgc2Vjb25kc1xuXHRcdFx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0ucmFtcFRvKDEyMCwgMTApO1xuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5icG0gPSB0aGlzLl9jbG9jay5mcmVxdWVuY3k7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLl90b1VuaXRzID0gdGhpcy5fdG9Vbml0cy5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLmJwbS5fZnJvbVVuaXRzID0gdGhpcy5fZnJvbVVuaXRzLmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLnVuaXRzID0gVG9uZS5UeXBlLkJQTTtcblx0ICAgICAgICAgICAgdGhpcy5icG0udmFsdWUgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy5icG07XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdicG0nKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgdGltZSBzaWduYXR1cmUsIG9yIG1vcmUgYWNjdXJhdGVseSB0aGUgbnVtZXJhdG9yXG5cdFx0XHRcdCAqICBvZiB0aGUgdGltZSBzaWduYXR1cmUgb3ZlciBhIGRlbm9taW5hdG9yIG9mIDQuXG5cdFx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVTaWduYXR1cmUgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy50aW1lU2lnbmF0dXJlO1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0VElNRUxJTkUgRVZFTlRTXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBBbGwgdGhlIGV2ZW50cyBpbiBhbiBvYmplY3QgdG8ga2VlcCB0cmFjayBieSBJRFxuXHRcdFx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSB7fTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0VGhlIHNjaGVkdWxlZCBldmVudHMuXG5cdFx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgUmVwZWF0ZWQgZXZlbnRzXG5cdFx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMgPSBuZXcgVG9uZS5JbnRlcnZhbFRpbWVsaW5lKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgQWxsIG9mIHRoZSBzeW5jZWQgU2lnbmFsc1xuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3N5bmNlZFNpZ25hbHMgPSBbXTtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdFNXSU5HXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgc3ViZGl2aXNpb24gb2YgdGhlIHN3aW5nXG5cdFx0XHRcdCAqICBAdHlwZSAge1RpY2tzfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nVGlja3MgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy5QUFEgLyAyO1xuXHQgICAgICAgICAgICAvLzhuXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHN3aW5nIGFtb3VudFxuXHRcdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nQW1vdW50ID0gMDtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0LCBUb25lLkVtaXR0ZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2JwbSc6IDEyMCxcblx0ICAgICAgICAnc3dpbmcnOiAwLFxuXHQgICAgICAgICdzd2luZ1N1YmRpdmlzaW9uJzogJzhuJyxcblx0ICAgICAgICAndGltZVNpZ25hdHVyZSc6IDQsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAnNG0nLFxuXHQgICAgICAgICdQUFEnOiAxOTJcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VElDS1Ncblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBjYWxsZWQgb24gZXZlcnkgdGlja1xuXHRcdCAqICBAcGFyYW0gICB7bnVtYmVyfSB0aWNrVGltZSBjbG9jayByZWxhdGl2ZSB0aWNrIHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fcHJvY2Vzc1RpY2sgPSBmdW5jdGlvbiAodGlja1RpbWUsIHRpY2tzKSB7XG5cdCAgICAgICAgLy9oYW5kbGUgc3dpbmdcblx0ICAgICAgICBpZiAodGhpcy5fc3dpbmdBbW91bnQgPiAwICYmIHRpY2tzICUgdGhpcy5fcHBxICE9PSAwICYmIC8vbm90IG9uIGEgZG93bmJlYXRcblx0ICAgICAgICAgICAgdGlja3MgJSAodGhpcy5fc3dpbmdUaWNrcyAqIDIpICE9PSAwKSB7XG5cdCAgICAgICAgICAgIC8vYWRkIHNvbWUgc3dpbmdcblx0ICAgICAgICAgICAgdmFyIHByb2dyZXNzID0gdGlja3MgJSAodGhpcy5fc3dpbmdUaWNrcyAqIDIpIC8gKHRoaXMuX3N3aW5nVGlja3MgKiAyKTtcblx0ICAgICAgICAgICAgdmFyIGFtb3VudCA9IE1hdGguc2luKHByb2dyZXNzICogTWF0aC5QSSkgKiB0aGlzLl9zd2luZ0Ftb3VudDtcblx0ICAgICAgICAgICAgdGlja1RpbWUgKz0gVG9uZS5UaWNrcyh0aGlzLl9zd2luZ1RpY2tzICogMiAvIDMpLnRvU2Vjb25kcygpICogYW1vdW50O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2RvIHRoZSBsb29wIHRlc3Rcblx0ICAgICAgICBpZiAodGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgIGlmICh0aWNrcyA+PSB0aGlzLl9sb29wRW5kKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvb3BFbmQnLCB0aWNrVGltZSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jbG9jay5zZXRUaWNrc0F0VGltZSh0aGlzLl9sb29wU3RhcnQsIHRpY2tUaW1lKTtcblx0ICAgICAgICAgICAgICAgIHRpY2tzID0gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb29wU3RhcnQnLCB0aWNrVGltZSwgdGhpcy5fY2xvY2suZ2V0U2Vjb25kc0F0VGltZSh0aWNrVGltZSkpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb29wJywgdGlja1RpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaW52b2tlIHRoZSB0aW1lbGluZSBldmVudHMgc2NoZWR1bGVkIG9uIHRoaXMgdGlja1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLmZvckVhY2hBdFRpbWUodGlja3MsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5pbnZva2UodGlja1RpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRTQ0hFRFVMQUJMRSBFVkVOVFNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZSBhbiBldmVudCBhbG9uZyB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGF0IHRoZSB0aW1lLlxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9ICB0aW1lIFRoZSB0aW1lIHRvIGludm9rZSB0aGUgY2FsbGJhY2sgYXQuXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gVGhlIGlkIG9mIHRoZSBldmVudCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgY2FuY2VsaW5nIHRoZSBldmVudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgdGhlIGNhbGxiYWNrIHdoZW4gdGhlIFRyYW5zcG9ydCByZWFjaGVzIHRoZSBkZXNpcmVkIHRpbWVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdGVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSk7XG5cdFx0ICogfSwgXCIxMjhpXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aW1lKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFRvbmUuVHJhbnNwb3J0RXZlbnQodGhpcywge1xuXHQgICAgICAgICAgICAndGltZSc6IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKSxcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogY2FsbGJhY2tcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYWRkRXZlbnQoZXZlbnQsIHRoaXMuX3RpbWVsaW5lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYSByZXBlYXRlZCBldmVudCBhbG9uZyB0aGUgdGltZWxpbmUuIFRoZSBldmVudCB3aWxsIGZpcmVcblx0XHQgKiAgYXQgdGhlIGBpbnRlcnZhbGAgc3RhcnRpbmcgYXQgdGhlIGBzdGFydFRpbWVgIGFuZCBmb3IgdGhlIHNwZWNpZmllZFxuXHRcdCAqICBgZHVyYXRpb25gLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRvIGludm9rZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgaW50ZXJ2YWwgICBUaGUgZHVyYXRpb24gYmV0d2VlbiBzdWNjZXNzaXZlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLiBNdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lPX0gICAgc3RhcnRUaW1lICBXaGVuIGFsb25nIHRoZSB0aW1lbGluZSB0aGUgZXZlbnRzIHNob3VsZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IGJlaW5nIGludm9rZWQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2R1cmF0aW9uPUluZmluaXR5XSBIb3cgbG9uZyB0aGUgZXZlbnQgc2hvdWxkIHJlcGVhdC5cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gICAgVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQuIFVzZSB0aGlzIHRvIGNhbmNlbFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGV2ZW50LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBjYWxsYmFjayBpbnZva2VkIGV2ZXJ5IGVpZ2h0aCBub3RlIGFmdGVyIHRoZSBmaXJzdCBtZWFzdXJlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQoY2FsbGJhY2ssIFwiOG5cIiwgXCIxbVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zY2hlZHVsZVJlcGVhdCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgaW50ZXJ2YWwsIHN0YXJ0VGltZSwgZHVyYXRpb24pIHtcblx0ICAgICAgICB2YXIgZXZlbnQgPSBuZXcgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCh0aGlzLCB7XG5cdCAgICAgICAgICAgICdjYWxsYmFjayc6IGNhbGxiYWNrLFxuXHQgICAgICAgICAgICAnaW50ZXJ2YWwnOiBUb25lLlRpbWUoaW50ZXJ2YWwpLFxuXHQgICAgICAgICAgICAndGltZSc6IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpLFxuXHQgICAgICAgICAgICAnZHVyYXRpb24nOiBUb25lLlRpbWUoVG9uZS5kZWZhdWx0QXJnKGR1cmF0aW9uLCBJbmZpbml0eSkpXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9raWNrIGl0IG9mZiBpZiB0aGUgVHJhbnNwb3J0IGlzIHN0YXJ0ZWRcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYWRkRXZlbnQoZXZlbnQsIHRoaXMuX3JlcGVhdGVkRXZlbnRzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYW4gZXZlbnQgdGhhdCB3aWxsIGJlIHJlbW92ZWQgYWZ0ZXIgaXQgaXMgaW52b2tlZC5cblx0XHQgKiAgTm90ZSB0aGF0IGlmIHRoZSBnaXZlbiB0aW1lIGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCB0cmFuc3BvcnQgdGltZSxcblx0XHQgKiAgdGhlIGV2ZW50IHdpbGwgYmUgaW52b2tlZCBpbW1lZGlhdGVseS5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBvbmNlLlxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IHRpbWUgVGhlIHRpbWUgdGhlIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkLlxuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfSBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudC5cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zY2hlZHVsZU9uY2UgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRpbWUpIHtcblx0ICAgICAgICB2YXIgZXZlbnQgPSBuZXcgVG9uZS5UcmFuc3BvcnRFdmVudCh0aGlzLCB7XG5cdCAgICAgICAgICAgICd0aW1lJzogVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpLFxuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiBjYWxsYmFjayxcblx0ICAgICAgICAgICAgJ29uY2UnOiB0cnVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEV2ZW50KGV2ZW50LCB0aGlzLl90aW1lbGluZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFyIHRoZSBwYXNzZWQgaW4gZXZlbnQgaWQgZnJvbSB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGV2ZW50SWQgVGhlIGlkIG9mIHRoZSBldmVudC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZXZlbnRJZCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zY2hlZHVsZWRFdmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnRJZCkpIHtcblx0ICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLl9zY2hlZHVsZWRFdmVudHNbZXZlbnRJZC50b1N0cmluZygpXTtcblx0ICAgICAgICAgICAgaXRlbS50aW1lbGluZS5yZW1vdmUoaXRlbS5ldmVudCk7XG5cdCAgICAgICAgICAgIGl0ZW0uZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICBkZWxldGUgdGhpcy5fc2NoZWR1bGVkRXZlbnRzW2V2ZW50SWQudG9TdHJpbmcoKV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEFkZCBhbiBldmVudCB0byB0aGUgY29ycmVjdCB0aW1lbGluZS4gS2VlcCB0cmFjayBvZiB0aGVcblx0XHQgKiB0aW1lbGluZSBpdCB3YXMgYWRkZWQgdG8uXG5cdFx0ICogQHBhcmFtIHtUb25lLlRyYW5zcG9ydEV2ZW50fVx0ZXZlbnRcblx0XHQgKiBAcGFyYW0ge1RvbmUuVGltZWxpbmV9IHRpbWVsaW5lXG5cdFx0ICogQHJldHVybnMge051bWJlcn0gdGhlIGV2ZW50IGlkIHdoaWNoIHdhcyBqdXN0IGFkZGVkXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fYWRkRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIHRpbWVsaW5lKSB7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzW2V2ZW50LmlkLnRvU3RyaW5nKCldID0ge1xuXHQgICAgICAgICAgICAnZXZlbnQnOiBldmVudCxcblx0ICAgICAgICAgICAgJ3RpbWVsaW5lJzogdGltZWxpbmVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRpbWVsaW5lLmFkZChldmVudCk7XG5cdCAgICAgICAgcmV0dXJuIGV2ZW50LmlkO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgc2NoZWR1bGVkIGV2ZW50cyBmcm9tIHRoZSB0aW1lbGluZSBhZnRlclxuXHRcdCAqICB0aGUgZ2l2ZW4gdGltZS4gUmVwZWF0ZWQgZXZlbnRzIHdpbGwgYmUgcmVtb3ZlZFxuXHRcdCAqICBpZiB0aGVpciBzdGFydFRpbWUgaXMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBbYWZ0ZXI9MF0gQ2xlYXIgYWxsIGV2ZW50cyBhZnRlclxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHRpbWUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIGFmdGVyID0gVG9uZS5kZWZhdWx0QXJnKGFmdGVyLCAwKTtcblx0ICAgICAgICBhZnRlciA9IHRoaXMudG9UaWNrcyhhZnRlcik7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuZm9yRWFjaEZyb20oYWZ0ZXIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICB0aGlzLmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U1RBUlQvU1RPUC9QQVVTRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEJpbmQgc3RhcnQvc3RvcC9wYXVzZSBldmVudHMgZnJvbSB0aGUgY2xvY2sgYW5kIGVtaXQgdGhlbS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fYmluZENsb2NrRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdzdGFydCcsIGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5UaWNrcyhvZmZzZXQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdzdG9wJywgZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgdGltZSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbigncGF1c2UnLCBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3BhdXNlJywgdGltZSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiLCBcInN0b3BwZWRcIiwgb3IgXCJwYXVzZWRcIlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLmdldFN0YXRlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSB0cmFuc3BvcnQgYW5kIGFsbCBzb3VyY2VzIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIHRyYW5zcG9ydCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWU9fSBvZmZzZXQgVGhlIHRpbWVsaW5lIG9mZnNldCB0byBzdGFydCB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgaW4gb25lIHNlY29uZCBzdGFydGluZyBhdCBiZWdpbm5pbmcgb2YgdGhlIDV0aCBtZWFzdXJlLlxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KFwiKzFcIiwgXCI0OjA6MFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBjbG9ja1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChvZmZzZXQpKSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9UaWNrcyhvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jbG9jay5zdGFydCh0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSB0cmFuc3BvcnQgYW5kIGFsbCBzb3VyY2VzIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIHRyYW5zcG9ydCBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RvcCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhdXNlIHRoZSB0cmFuc3BvcnQgYW5kIGFsbCBzb3VyY2VzIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5wYXVzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUb2dnbGUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRyYW5zcG9ydC4gSWYgaXQgaXNcblx0XHQgKiBzdGFydGVkLCBpdCB3aWxsIHN0b3AgaXQsIG90aGVyd2lzZSBpdCB3aWxsIHN0YXJ0IHRoZSBUcmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgVGhlIHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnR9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9jbG9jay5nZXRTdGF0ZUF0VGltZSh0aW1lKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U0VUVEVSUy9HRVRURVJTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgc2lnbmF0dXJlIGFzIGp1c3QgdGhlIG51bWVyYXRvciBvdmVyIDQuXG5cdFx0ICogIEZvciBleGFtcGxlIDQvNCB3b3VsZCBiZSBqdXN0IDQgYW5kIDYvOCB3b3VsZCBiZSAzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ8QXJyYXl9XG5cdFx0ICogIEBuYW1lIHRpbWVTaWduYXR1cmVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NvbW1vbiB0aW1lXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZSA9IDQ7XG5cdFx0ICogLy8gNy84XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZSA9IFs3LCA4XTtcblx0XHQgKiAvL3RoaXMgd2lsbCBiZSByZWR1Y2VkIHRvIGEgc2luZ2xlIG51bWJlclxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmU7IC8vcmV0dXJucyAzLjVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICd0aW1lU2lnbmF0dXJlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZVNpZ25hdHVyZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRpbWVTaWcpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aW1lU2lnKSkge1xuXHQgICAgICAgICAgICAgICAgdGltZVNpZyA9IHRpbWVTaWdbMF0gLyB0aW1lU2lnWzFdICogNDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90aW1lU2lnbmF0dXJlID0gdGltZVNpZztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFdoZW4gdGhlIFRvbmUuVHJhbnNwb3J0Lmxvb3AgPSB0cnVlLCB0aGlzIGlzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbG9vcC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wU3RhcnQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3RhcnRQb3NpdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3Moc3RhcnRQb3NpdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBXaGVuIHRoZSBUb25lLlRyYW5zcG9ydC5sb29wID0gdHJ1ZSwgdGhpcyBpcyB0aGUgZW5kaW5nIHBvc2l0aW9uIG9mIHRoZSBsb29wLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcEVuZCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChlbmRQb3NpdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKGVuZFBvc2l0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGxvb3Agc3RhcnQgYW5kIHN0b3AgYXQgdGhlIHNhbWUgdGltZS5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBzdGFydFBvc2l0aW9uXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gZW5kUG9zaXRpb25cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9sb29wIG92ZXIgdGhlIGZpcnN0IG1lYXN1cmVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zZXRMb29wUG9pbnRzKDAsIFwiMW1cIik7XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQubG9vcCA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2V0TG9vcFBvaW50cyA9IGZ1bmN0aW9uIChzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikge1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gc3RhcnRQb3NpdGlvbjtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBlbmRQb3NpdGlvbjtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN3aW5nIHZhbHVlLiBCZXR3ZWVuIDAtMSB3aGVyZSAxIGVxdWFsIHRvXG5cdFx0ICogIHRoZSBub3RlICsgaGFsZiB0aGUgc3ViZGl2aXNpb24uXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBzd2luZ1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3N3aW5nJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3dpbmdBbW91bnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhbW91bnQpIHtcblx0ICAgICAgICAgICAgLy9zY2FsZSB0aGUgdmFsdWVzIHRvIGEgbm9ybWFsIHJhbmdlXG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nQW1vdW50ID0gYW1vdW50O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgc3ViZGl2aXNpb24gd2hpY2ggdGhlIHN3aW5nIHdpbGwgYmUgYXBwbGllZCB0by5cblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYW4gOHRoIG5vdGUuIFZhbHVlIG11c3QgYmUgbGVzc1xuXHRcdCAqICB0aGFuIGEgcXVhcnRlciBub3RlLlxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIHN3aW5nU3ViZGl2aXNpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzd2luZ1N1YmRpdmlzaW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9zd2luZ1RpY2tzKS50b05vdGF0aW9uKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdWJkaXZpc2lvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ1RpY2tzID0gdGhpcy50b1RpY2tzKHN1YmRpdmlzaW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgVHJhbnNwb3J0J3MgcG9zaXRpb24gaW4gQmFyczpCZWF0czpTaXh0ZWVudGhzLlxuXHRcdCAqICBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIGp1bXAgdG8gdGhhdCBwb3NpdGlvbiByaWdodCBhd2F5LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtCYXJzQmVhdHNTaXh0ZWVudGhzfVxuXHRcdCAqICBAbmFtZSBwb3NpdGlvblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3Bvc2l0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5fY2xvY2suZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGlja3MpLnRvQmFyc0JlYXRzU2l4dGVlbnRocygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvZ3Jlc3MpIHtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy50b1RpY2tzKHByb2dyZXNzKTtcblx0ICAgICAgICAgICAgdGhpcy50aWNrcyA9IHRpY2tzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBUcmFuc3BvcnQncyBwb3NpdGlvbiBpbiBzZWNvbmRzXG5cdFx0ICogIFNldHRpbmcgdGhlIHZhbHVlIHdpbGwganVtcCB0byB0aGF0IHBvc2l0aW9uIHJpZ2h0IGF3YXkuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge1NlY29uZHN9XG5cdFx0ICogIEBuYW1lIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzZWNvbmRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2suc2Vjb25kcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHMpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuYnBtLnRpbWVUb1RpY2tzKHMsIG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMudGlja3MgPSB0aWNrcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgVHJhbnNwb3J0J3MgbG9vcCBwb3NpdGlvbiBhcyBhIG5vcm1hbGl6ZWQgdmFsdWUuIEFsd2F5c1xuXHRcdCAqICByZXR1cm5zIDAgaWYgdGhlIHRyYW5zcG9ydCBpZiBsb29wIGlzIG5vdCB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEBuYW1lIHByb2dyZXNzXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdwcm9ncmVzcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLl9jbG9jay5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuICh0aWNrcyAtIHRoaXMuX2xvb3BTdGFydCkgLyAodGhpcy5fbG9vcEVuZCAtIHRoaXMuX2xvb3BTdGFydCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0cmFuc3BvcnRzIGN1cnJlbnQgdGljayBwb3NpdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKiAgQG5hbWUgdGlja3Ncblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICd0aWNrcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLnRpY2tzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fY2xvY2sudGlja3MgIT09IHQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAgICAgLy9zdG9wIGV2ZXJ5dGhpbmcgc3luY2VkIHRvIHRoZSB0cmFuc3BvcnRcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0b3AnLCBub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb2NrLnNldFRpY2tzQXRUaW1lKHQsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9yZXN0YXJ0IGl0IHdpdGggdGhlIG5ldyB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIG5vdywgdGhpcy5zZWNvbmRzKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvY2suc2V0VGlja3NBdFRpbWUodCwgbm93KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgIFRoZSB0aWNrIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmdldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLl9jbG9jay5nZXRUaWNrc0F0VGltZSh0aW1lKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZWxhcHNlZCBzZWNvbmRzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBnZXQgdGhlIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc30gIFRoZSBudW1iZXIgb2YgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuZ2V0U2Vjb25kc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLmdldFNlY29uZHNBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFB1bHNlcyBQZXIgUXVhcnRlciBub3RlLiBUaGlzIGlzIHRoZSBzbWFsbGVzdCByZXNvbHV0aW9uXG5cdFx0ICogIHRoZSBUcmFuc3BvcnQgdGltaW5nIHN1cHBvcnRzLiBUaGlzIHNob3VsZCBiZSBzZXQgb25jZVxuXHRcdCAqICBvbiBpbml0aWFsaXphdGlvbiBhbmQgbm90IHNldCBhZ2Fpbi4gQ2hhbmdpbmcgdGhpcyB2YWx1ZVxuXHRcdCAqICBhZnRlciBvdGhlciBvYmplY3RzIGhhdmUgYmVlbiBjcmVhdGVkIGNhbiBjYXVzZSBwcm9ibGVtcy5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIFBQUVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ1BQUScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BwcTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBwcSkge1xuXHQgICAgICAgICAgICB2YXIgYnBtID0gdGhpcy5icG0udmFsdWU7XG5cdCAgICAgICAgICAgIHRoaXMuX3BwcSA9IHBwcTtcblx0ICAgICAgICAgICAgdGhpcy5icG0udmFsdWUgPSBicG07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBmcm9tIEJQTSB0byBmcmVxdWVuY3kgKGZhY3RvcmluZyBpbiBQUFEpXG5cdFx0ICogIEBwYXJhbSAge0JQTX0gIGJwbSBUaGUgQlBNIHZhbHVlIHRvIGNvbnZlcnQgdG8gZnJlcXVlbmN5XG5cdFx0ICogIEByZXR1cm4gIHtGcmVxdWVuY3l9ICBUaGUgQlBNIGFzIGEgZnJlcXVlbmN5IHdpdGggUFBRIGZhY3RvcmVkIGluLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLl9mcm9tVW5pdHMgPSBmdW5jdGlvbiAoYnBtKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyAoNjAgLyBicG0gLyB0aGlzLlBQUSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZnJvbSBmcmVxdWVuY3kgKHdpdGggUFBRKSBpbnRvIEJQTVxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9ICBmcmVxIFRoZSBjbG9ja3MgZnJlcXVlbmN5IHRvIGNvbnZlcnQgdG8gQlBNXG5cdFx0ICogIEByZXR1cm4gIHtCUE19ICBUaGUgZnJlcXVlbmN5IHZhbHVlIGFzIEJQTS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fdG9Vbml0cyA9IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgcmV0dXJuIGZyZXEgLyB0aGlzLlBQUSAqIDYwO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRTWU5DSU5HXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdGltZSBhbGlnbmVkIHRvIHRoZSBuZXh0IHN1YmRpdmlzaW9uXG5cdFx0ICogIG9mIHRoZSBUcmFuc3BvcnQuIElmIHRoZSBUcmFuc3BvcnQgaXMgbm90IHN0YXJ0ZWQsXG5cdFx0ICogIGl0IHdpbGwgcmV0dXJuIDAuXG5cdFx0ICogIE5vdGU6IHRoaXMgd2lsbCBub3Qgd29yayBwcmVjaXNlbHkgZHVyaW5nIHRlbXBvIHJhbXBzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgc3ViZGl2aXNpb24gIFRoZSBzdWJkaXZpc2lvbiB0byBxdWFudGl6ZSB0b1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgVGhlIGNvbnRleHQgdGltZSBvZiB0aGUgbmV4dCBzdWJkaXZpc2lvbi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydCgpOyAvL3RoZSB0cmFuc3BvcnQgbXVzdCBiZSBzdGFydGVkXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQubmV4dFN1YmRpdmlzaW9uKFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUubmV4dFN1YmRpdmlzaW9uID0gZnVuY3Rpb24gKHN1YmRpdmlzaW9uKSB7XG5cdCAgICAgICAgc3ViZGl2aXNpb24gPSB0aGlzLnRvVGlja3Moc3ViZGl2aXNpb24pO1xuXHQgICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgLy9pZiB0aGUgdHJhbnNwb3J0J3Mgbm90IHN0YXJ0ZWQsIHJldHVybiAwXG5cdCAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAvL3RoZSByZW1haW5kZXIgb2YgdGhlIGN1cnJlbnQgdGlja3MgYW5kIHRoZSBzdWJkaXZpc2lvblxuXHQgICAgICAgICAgICB2YXIgdHJhbnNwb3J0UG9zID0gdGhpcy5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICB2YXIgcmVtYWluaW5nVGlja3MgPSBzdWJkaXZpc2lvbiAtIHRyYW5zcG9ydFBvcyAlIHN1YmRpdmlzaW9uO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2submV4dFRpY2tUaW1lKHJlbWFpbmluZ1RpY2tzLCBub3cpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQXR0YWNoZXMgdGhlIHNpZ25hbCB0byB0aGUgdGVtcG8gY29udHJvbCBzaWduYWwgc28gdGhhdFxuXHRcdCAqICBhbnkgY2hhbmdlcyBpbiB0aGUgdGVtcG8gd2lsbCBjaGFuZ2UgdGhlIHNpZ25hbCBpbiB0aGUgc2FtZVxuXHRcdCAqICByYXRpby5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlNpZ25hbH0gc2lnbmFsXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gcmF0aW8gT3B0aW9uYWxseSBwYXNzIGluIHRoZSByYXRpbyBiZXR3ZWVuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHR3byBzaWduYWxzLiBPdGhlcndpc2UgaXQgd2lsbCBiZSBjb21wdXRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZWlyIGN1cnJlbnQgdmFsdWVzLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zeW5jU2lnbmFsID0gZnVuY3Rpb24gKHNpZ25hbCwgcmF0aW8pIHtcblx0ICAgICAgICBpZiAoIXJhdGlvKSB7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSBzeW5jIHJhdGlvXG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAoc2lnbmFsLmdldFZhbHVlQXRUaW1lKG5vdykgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgIHJhdGlvID0gc2lnbmFsLmdldFZhbHVlQXRUaW1lKG5vdykgLyB0aGlzLmJwbS5nZXRWYWx1ZUF0VGltZShub3cpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmF0aW8gPSAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciByYXRpb1NpZ25hbCA9IG5ldyBUb25lLkdhaW4ocmF0aW8pO1xuXHQgICAgICAgIHRoaXMuYnBtLmNoYWluKHJhdGlvU2lnbmFsLCBzaWduYWwuX3BhcmFtKTtcblx0ICAgICAgICB0aGlzLl9zeW5jZWRTaWduYWxzLnB1c2goe1xuXHQgICAgICAgICAgICAncmF0aW8nOiByYXRpb1NpZ25hbCxcblx0ICAgICAgICAgICAgJ3NpZ25hbCc6IHNpZ25hbCxcblx0ICAgICAgICAgICAgJ2luaXRpYWwnOiBzaWduYWwudmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBzaWduYWwudmFsdWUgPSAwO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbnN5bmNzIGEgcHJldmlvdXNseSBzeW5jZWQgc2lnbmFsIGZyb20gdGhlIHRyYW5zcG9ydCdzIGNvbnRyb2wuXG5cdFx0ICogIFNlZSBUb25lLlRyYW5zcG9ydC5zeW5jU2lnbmFsLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlNpZ25hbH0gc2lnbmFsXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnVuc3luY1NpZ25hbCA9IGZ1bmN0aW9uIChzaWduYWwpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fc3luY2VkU2lnbmFscy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICB2YXIgc3luY2VkU2lnbmFsID0gdGhpcy5fc3luY2VkU2lnbmFsc1tpXTtcblx0ICAgICAgICAgICAgaWYgKHN5bmNlZFNpZ25hbC5zaWduYWwgPT09IHNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc3luY2VkU2lnbmFsLnJhdGlvLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgICAgIHN5bmNlZFNpZ25hbC5zaWduYWwudmFsdWUgPSBzeW5jZWRTaWduYWwuaW5pdGlhbDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNlZFNpZ25hbHMuc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdicG0nKTtcblx0ICAgICAgICB0aGlzLmJwbSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yZXBlYXRlZEV2ZW50cy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRJTklUSUFMSVpBVElPTlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgdmFyIFRyYW5zcG9ydENvbnN0cnVjdG9yID0gVG9uZS5UcmFuc3BvcnQ7XG5cdCAgICBUb25lLlRyYW5zcG9ydCA9IG5ldyBUcmFuc3BvcnRDb25zdHJ1Y3RvcigpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5UcmFuc3BvcnQgaW5zdGFuY2VvZiBUcmFuc3BvcnRDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydCA9IGNvbnRleHQuVHJhbnNwb3J0O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0ID0gbmV3IFRyYW5zcG9ydENvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc3RvcmUgdGhlIFRyYW5zcG9ydCBvbiB0aGUgY29udGV4dCBzbyBpdCBjYW4gYmUgcmV0cmlldmVkIGxhdGVyXG5cdCAgICAgICAgY29udGV4dC5UcmFuc3BvcnQgPSBUb25lLlRyYW5zcG9ydDtcblx0ICAgIH0pO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdjbG9zZScsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuVHJhbnNwb3J0IGluc3RhbmNlb2YgVHJhbnNwb3J0Q29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgY29udGV4dC5UcmFuc3BvcnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Wb2x1bWUgaXMgYSBzaW1wbGUgdm9sdW1lIG5vZGUsIHVzZWZ1bCBmb3IgY3JlYXRpbmcgYSB2b2x1bWUgZmFkZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc30gW3ZvbHVtZT0wXSB0aGUgaW5pdGlhbCB2b2x1bWVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdm9sID0gbmV3IFRvbmUuVm9sdW1lKC0xMik7XG5cdFx0ICogaW5zdHJ1bWVudC5jaGFpbih2b2wsIFRvbmUuTWFzdGVyKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVm9sdW1lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndm9sdW1lJ10sIFRvbmUuVm9sdW1lKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIG91dHB1dCBub2RlXG5cdFx0XHQgKiBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnZvbHVtZSwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB1bm11dGVkIHZvbHVtZVxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3VubXV0ZWRWb2x1bWUgPSBvcHRpb25zLnZvbHVtZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdm9sdW1lIGNvbnRyb2wgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5vdXRwdXQuZ2Fpbjtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLy9zZXQgdGhlIG11dGUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVm9sdW1lLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlZvbHVtZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlZvbHVtZSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHZvbHVtZS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlZvbHVtZS5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy52b2x1bWUudmFsdWUgPT09IC1JbmZpbml0eTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLm11dGUgJiYgbXV0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdW5tdXRlZFZvbHVtZSA9IHRoaXMudm9sdW1lLnZhbHVlO1xuXHQgICAgICAgICAgICAgICAgLy9tYXliZSBpdCBzaG91bGQgcmFtcCBoZXJlP1xuXHQgICAgICAgICAgICAgICAgdGhpcy52b2x1bWUudmFsdWUgPSAtSW5maW5pdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tdXRlICYmICFtdXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZvbHVtZS52YWx1ZSA9IHRoaXMuX3VubXV0ZWRWb2x1bWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Wb2x1bWV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVm9sdW1lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMudm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVm9sdW1lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc2luZ2xlIG1hc3RlciBvdXRwdXQgd2hpY2ggaXMgY29ubmVjdGVkIHRvIHRoZVxuXHRcdCAqICAgICAgICAgIEF1ZGlvRGVzdGluYXRpb25Ob2RlIChha2EgeW91ciBzcGVha2VycykuXG5cdFx0ICogICAgICAgICAgSXQgcHJvdmlkZXMgdXNlZnVsIGNvbnZlbmllbmNlcyBzdWNoIGFzIHRoZSBhYmlsaXR5XG5cdFx0ICogICAgICAgICAgdG8gc2V0IHRoZSB2b2x1bWUgYW5kIG11dGUgdGhlIGVudGlyZSBhcHBsaWNhdGlvbi5cblx0XHQgKiAgICAgICAgICBJdCBhbHNvIGdpdmVzIHlvdSB0aGUgYWJpbGl0eSB0byBhcHBseSBtYXN0ZXIgZWZmZWN0cyB0byB5b3VyIGFwcGxpY2F0aW9uLlxuXHRcdCAqICAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgTGlrZSBUb25lLlRyYW5zcG9ydCwgQSBzaW5nbGUgVG9uZS5NYXN0ZXIgaXMgY3JlYXRlZFxuXHRcdCAqICAgICAgICAgIG9uIGluaXRpYWxpemF0aW9uIGFuZCB5b3UgZG8gbm90IG5lZWQgdG8gZXhwbGljaXRseSBjb25zdHJ1Y3Qgb25lLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHNpbmdsZXRvblxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdGhlIGF1ZGlvIHdpbGwgZ28gZnJvbSB0aGUgb3NjaWxsYXRvciB0byB0aGUgc3BlYWtlcnNcblx0XHQgKiBvc2NpbGxhdG9yLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHRcdCAqIC8vYSBjb252ZW5pZW5jZSBmb3IgY29ubmVjdGluZyB0byB0aGUgbWFzdGVyIG91dHB1dCBpcyBhbHNvIHByb3ZpZGVkOlxuXHRcdCAqIG9zY2lsbGF0b3IudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3RoZSBhYm92ZSB0d28gZXhhbXBsZXMgYXJlIGVxdWl2YWxlbnQuXG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3RlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAwKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgcHJpdmF0ZSB2b2x1bWUgbm9kZVxuXHRcdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZSgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgbWFzdGVyIG91dHB1dC5cblx0XHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMub3V0cHV0LCB0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NYXN0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuTWFzdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTWFzdGVyI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogVG9uZS5NYXN0ZXIubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NYXN0ZXIucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgbWFzdGVyIGVmZmVjdHMgY2hhaW4uIE5PVEU6IHRoaXMgd2lsbCBkaXNjb25uZWN0IGFueSBub2RlcyB3aGljaCB3ZXJlIHByZXZpb3VzbHlcblx0XHQgKiAgY2hhaW5lZCBpbiB0aGUgbWFzdGVyIGVmZmVjdHMgY2hhaW4uXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9Ob2RlfFRvbmV9IGFyZ3MuLi4gQWxsIGFyZ3VtZW50cyB3aWxsIGJlIGNvbm5lY3RlZCBpbiBhIHJvd1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgTWFzdGVyIHdpbGwgYmUgcm91dGVkIHRocm91Z2ggaXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1hc3Rlcn0gIHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NvbWUgb3ZlcmFsbCBjb21wcmVzc2lvbiB0byBrZWVwIHRoZSBsZXZlbHMgaW4gY2hlY2tcblx0XHQgKiB2YXIgbWFzdGVyQ29tcHJlc3NvciA9IG5ldyBUb25lLkNvbXByZXNzb3Ioe1xuXHRcdCAqIFx0XCJ0aHJlc2hvbGRcIiA6IC02LFxuXHRcdCAqIFx0XCJyYXRpb1wiIDogMyxcblx0XHQgKiBcdFwiYXR0YWNrXCIgOiAwLjUsXG5cdFx0ICogXHRcInJlbGVhc2VcIiA6IDAuMVxuXHRcdCAqIH0pO1xuXHRcdCAqIC8vZ2l2ZSBhIGxpdHRsZSBib29zdCB0byB0aGUgbG93c1xuXHRcdCAqIHZhciBsb3dCdW1wID0gbmV3IFRvbmUuRmlsdGVyKDIwMCwgXCJsb3dzaGVsZlwiKTtcblx0XHQgKiAvL3JvdXRlIGV2ZXJ5dGhpbmcgdGhyb3VnaCB0aGUgZmlsdGVyXG5cdFx0ICogLy9hbmQgY29tcHJlc3NvciBiZWZvcmUgZ29pbmcgdG8gdGhlIHNwZWFrZXJzXG5cdFx0ICogVG9uZS5NYXN0ZXIuY2hhaW4obG93QnVtcCwgbWFzdGVyQ29tcHJlc3Nvcik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3Rlci5wcm90b3R5cGUuY2hhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbi5hcHBseSh0aGlzLmlucHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0uY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1hc3Rlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWFzdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVVHTUVOVCBUT05FJ3MgUFJPVE9UWVBFXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBDb25uZWN0ICd0aGlzJyB0byB0aGUgbWFzdGVyIG91dHB1dC4gU2hvcnRoYW5kIGZvciB0aGlzLmNvbm5lY3QoVG9uZS5NYXN0ZXIpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY29ubmVjdCBhbiBvc2NpbGxhdG9yIHRvIHRoZSBtYXN0ZXIgb3V0cHV0XG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS50b01hc3RlcigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLnRvTWFzdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgaWYgKHdpbmRvdy5BdWRpb05vZGUpIHtcblx0ICAgICAgICAvLyBBbHNvIGF1Z21lbnQgQXVkaW9Ob2RlJ3MgcHJvdG90eXBlIHRvIGluY2x1ZGUgdG9NYXN0ZXIgYXMgYSBjb252ZW5pZW5jZVxuXHQgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUudG9NYXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdCAgICAvKipcblx0XHQgKiAgaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFuZCBsaXN0ZW4gZm9yIG5ldyBhdWRpbyBjb250ZXh0c1xuXHRcdCAqL1xuXHQgICAgdmFyIE1hc3RlckNvbnN0cnVjdG9yID0gVG9uZS5NYXN0ZXI7XG5cdCAgICBUb25lLk1hc3RlciA9IG5ldyBNYXN0ZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAvLyBpZiBpdCBhbHJlYWR5IGV4aXN0cywganVzdCByZXN0b3JlIGl0XG5cdCAgICAgICAgaWYgKGNvbnRleHQuTWFzdGVyIGluc3RhbmNlb2YgTWFzdGVyQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgVG9uZS5NYXN0ZXIgPSBjb250ZXh0Lk1hc3Rlcjtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBUb25lLk1hc3RlciA9IG5ldyBNYXN0ZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb250ZXh0Lk1hc3RlciA9IFRvbmUuTWFzdGVyO1xuXHQgICAgfSk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2Nsb3NlJywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5NYXN0ZXIgaW5zdGFuY2VvZiBNYXN0ZXJDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICBjb250ZXh0Lk1hc3Rlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5NYXN0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQmFzZSBjbGFzcyBmb3Igc291cmNlcy4gU291cmNlcyBoYXZlIHN0YXJ0L3N0b3AgbWV0aG9kc1xuXHRcdCAqICAgICAgICAgIGFuZCB0aGUgYWJpbGl0eSB0byBiZSBzeW5jZWQgdG8gdGhlXG5cdFx0ICogICAgICAgICAgc3RhcnQvc3RvcCBvZiBUb25lLlRyYW5zcG9ydC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vTXVsdGlwbGUgc3RhdGUgY2hhbmdlIGV2ZW50cyBjYW4gYmUgY2hhaW5lZCB0b2dldGhlcixcblx0XHQgKiAvL2J1dCBtdXN0IGJlIHNldCBpbiB0aGUgY29ycmVjdCBvcmRlciBhbmQgd2l0aCBhc2NlbmRpbmcgdGltZXNcblx0XHQgKlxuXHRcdCAqIC8vIE9LXG5cdFx0ICogc3RhdGUuc3RhcnQoKS5zdG9wKFwiKzAuMlwiKTtcblx0XHQgKiAvLyBBTkRcblx0XHQgKiBzdGF0ZS5zdGFydCgpLnN0b3AoXCIrMC4yXCIpLnN0YXJ0KFwiKzAuNFwiKS5zdG9wKFwiKzAuN1wiKVxuXHRcdCAqXG5cdFx0ICogLy8gQkFEXG5cdFx0ICogc3RhdGUuc3RvcChcIiswLjJcIikuc3RhcnQoKTtcblx0XHQgKiAvLyBPUlxuXHRcdCAqIHN0YXRlLnN0YXJ0KFwiKzAuM1wiKS5zdG9wKFwiKzAuMlwiKTtcblx0XHQgKlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Tb3VyY2UuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBzb3VyY2Uudm9sdW1lLnZhbHVlID0gLTY7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogXHRLZWVwIHRyYWNrIG9mIHRoZSBzY2hlZHVsZWQgc3RhdGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUubWVtb3J5ID0gMTAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzeW5jZWQgYHN0YXJ0YCBjYWxsYmFjayBmdW5jdGlvbiBmcm9tIHRoZSB0cmFuc3BvcnRcblx0XHRcdCAqICBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEtlZXAgdHJhY2sgb2YgYWxsIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgaWRzXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gW107XG5cdCAgICAgICAgLy9tYWtlIHRoZSBvdXRwdXQgZXhwbGljaXRseSBzdGVyZW9cblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnQgPSAyO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIC8vbXV0ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Tb3VyY2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Tb3VyY2UucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnNlY29uZHMpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogc291cmNlLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU291cmNlLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy9vdmVyd3JpdGUgdGhlc2UgZnVuY3Rpb25zXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuX3N0YXJ0ID0gVG9uZS5ub09wO1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnJlc3RhcnQgPSBUb25lLm5vT3A7XG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuX3N0b3AgPSBUb25lLm5vT3A7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIHNvdXJjZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuIElmIG5vIHRpbWUgaXMgZ2l2ZW4sXG5cdFx0ICogIHN0YXJ0IHRoZSBzb3VyY2Ugbm93LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHNvdXJjZSBzaG91bGQgYmUgc3RhcnRlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0YXJ0KFwiKzAuNVwiKTsgLy9zdGFydHMgdGhlIHNvdXJjZSAwLjUgc2Vjb25kcyBmcm9tIG5vd1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRpbWUpICYmIHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnQuc2Vjb25kcztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaWYgaXQncyBzdGFydGVkLCBzdG9wIGl0IGFuZCByZXN0YXJ0IGl0XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLnJlc3RhcnQodGltZSwgb2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBvZmZzZXQgdGltZSB0byB0aGUgZXZlbnRcblx0ICAgICAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3N0YXRlLmdldCh0aW1lKTtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Lm9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuZHVyYXRpb24gPSBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgIHZhciBzY2hlZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodCwgb2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkLnB1c2goc2NoZWQpO1xuXHQgICAgICAgICAgICAgICAgLy9pZiBpdCdzIGFscmVhZHkgc3RhcnRlZFxuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jZWRTdGFydCh0aGlzLm5vdygpLCBUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIHNvdXJjZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuIElmIG5vIHRpbWUgaXMgZ2l2ZW4sXG5cdFx0ICogIHN0b3AgdGhlIHNvdXJjZSBub3cuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgc291cmNlIHNob3VsZCBiZSBzdG9wcGVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RvcCgpOyAvLyBzdG9wcyB0aGUgc291cmNlIGltbWVkaWF0ZWx5XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSAmJiB0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0LnNlY29uZHM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIXRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHNjaGVkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUodGhpcy5fc3RvcC5iaW5kKHRoaXMpLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkLnB1c2goc2NoZWQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3luYyB0aGUgc291cmNlIHRvIHRoZSBUcmFuc3BvcnQgc28gdGhhdCBhbGwgc3Vic2VxdWVudFxuXHRcdCAqICBjYWxscyB0byBgc3RhcnRgIGFuZCBgc3RvcGAgYXJlIHN5bmNlZCB0byB0aGUgVHJhbnNwb3J0VGltZVxuXHRcdCAqICBpbnN0ZWFkIG9mIHRoZSBBdWRpb0NvbnRleHQgdGltZS5cblx0XHQgKlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3N5bmMgdGhlIHNvdXJjZSBzbyB0aGF0IGl0IHBsYXlzIGJldHdlZW4gMCBhbmQgMC4zIG9uIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZVxuXHRcdCAqIHNvdXJjZS5zeW5jKCkuc3RhcnQoMCkuc3RvcCgwLjMpO1xuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydCgpO1xuXHRcdCAqXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHdpdGggYW4gb2Zmc2V0IGFuZCB0aGUgc3luYydlZCBzb3VyY2VzXG5cdFx0ICogLy93aWxsIHN0YXJ0IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG5cdFx0ICogc291cmNlLnN5bmMoKS5zdGFydCgwLjEpO1xuXHRcdCAqIC8vdGhlIHNvdXJjZSB3aWxsIGJlIGludm9rZWQgd2l0aCBhbiBvZmZzZXQgb2YgMC40XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoXCIrMC41XCIsIDAuNSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZFN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuXHQgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBwbGF5YmFjayBzdGF0ZSBhdCB0aGF0IHRpbWVcblx0ICAgICAgICAgICAgICAgIHZhciBzdGF0ZUV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KG9mZnNldCk7XG5cdCAgICAgICAgICAgICAgICAvLyBsaXN0ZW4gZm9yIHN0YXJ0IGV2ZW50cyB3aGljaCBtYXkgb2NjdXIgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc3luYydlZCB0aW1lXG5cdCAgICAgICAgICAgICAgICBpZiAoc3RhdGVFdmVudCAmJiBzdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgc3RhdGVFdmVudC50aW1lICE9PSBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIG9mZnNldFxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydE9mZnNldCA9IG9mZnNldCAtIHRoaXMudG9TZWNvbmRzKHN0YXRlRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZUV2ZW50LmR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoc3RhdGVFdmVudC5kdXJhdGlvbikgLSBzdGFydE9mZnNldDtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodGltZSwgdGhpcy50b1NlY29uZHMoc3RhdGVFdmVudC5vZmZzZXQpICsgc3RhcnRPZmZzZXQsIGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zeW5jZWRTdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdmFyIHNlY29uZHMgPSBUb25lLlRyYW5zcG9ydC5nZXRTZWNvbmRzQXRUaW1lKE1hdGgubWF4KHRpbWUgLSB0aGlzLnNhbXBsZVRpbWUsIDApKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHNlY29uZHMpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0b3AodGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub24oJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX3N5bmNlZFN0YXJ0KTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5vbignc3RvcCBwYXVzZSBsb29wRW5kJywgdGhpcy5fc3luY2VkU3RvcCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVuc3luYyB0aGUgc291cmNlIHRvIHRoZSBUcmFuc3BvcnQuIFNlZSBUb25lLlNvdXJjZS5zeW5jXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9mZignc3RvcCBwYXVzZSBsb29wRW5kJywgdGhpcy5fc3luY2VkU3RvcCk7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9mZignc3RhcnQgbG9vcFN0YXJ0JywgdGhpcy5fc3luY2VkU3RhcnQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSBmYWxzZTtcblx0ICAgICAgICAvLyBjbGVhciBhbGwgb2YgdGhlIHNjaGVkdWxlZCBpZHNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NjaGVkdWxlZC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLl9zY2hlZHVsZWRbaV07XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGlkKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gW107XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqXHRDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy51bnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU291cmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQXVkaW9CdWZmZXIuY29weVRvL0Zyb21DaGFubmVsIHBvbHlmaWxsXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIUF1ZGlvQnVmZmVyLnByb3RvdHlwZS5jb3B5VG9DaGFubmVsKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQnVmZmVyLnByb3RvdHlwZS5jb3B5VG9DaGFubmVsID0gZnVuY3Rpb24gKHNyYywgY2hhbk51bSwgc3RhcnQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gdGhpcy5nZXRDaGFubmVsRGF0YShjaGFuTnVtKTtcblx0ICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaSArIHN0YXJ0XSA9IHNyY1tpXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgQXVkaW9CdWZmZXIucHJvdG90eXBlLmNvcHlGcm9tQ2hhbm5lbCA9IGZ1bmN0aW9uIChkZXN0LCBjaGFuTnVtLCBzdGFydCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSB0aGlzLmdldENoYW5uZWxEYXRhKGNoYW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydCB8fCAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXN0Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZGVzdFtpXSA9IGNoYW5uZWxbaSArIHN0YXJ0XTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQnVmZmVyIGxvYWRpbmcgYW5kIHN0b3JhZ2UuIFRvbmUuQnVmZmVyIGlzIHVzZWQgaW50ZXJuYWxseSBieSBhbGxcblx0XHQgKiAgICAgICAgICBjbGFzc2VzIHRoYXQgbWFrZSByZXF1ZXN0cyBmb3IgYXVkaW8gZmlsZXMgc3VjaCBhcyBUb25lLlBsYXllcixcblx0XHQgKiAgICAgICAgICBUb25lLlNhbXBsZXIgYW5kIFRvbmUuQ29udm9sdmVyLlxuXHRcdCAqXG5cdFx0ICogICAgICAgICAgQXNpZGUgZnJvbSBsb2FkIGNhbGxiYWNrcyBmcm9tIGluZGl2aWR1YWwgYnVmZmVycywgVG9uZS5CdWZmZXJcblx0XHQgKiAgXHRcdHByb3ZpZGVzIGV2ZW50cyB3aGljaCBrZWVwIHRyYWNrIG9mIHRoZSBsb2FkaW5nIHByb2dyZXNzXG5cdFx0ICogIFx0XHRvZiBfYWxsXyBvZiB0aGUgYnVmZmVycy4gVGhlc2UgYXJlIFRvbmUuQnVmZmVyLm9uKFwibG9hZFwiIC8gXCJwcm9ncmVzc1wiIC8gXCJlcnJvclwiKVxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtBdWRpb0J1ZmZlcnxTdHJpbmd9IHVybCBUaGUgdXJsIHRvIGxvYWQsIG9yIHRoZSBhdWRpbyBidWZmZXIgdG8gc2V0LlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIEEgY2FsbGJhY2sgd2hpY2ggaXMgaW52b2tlZCBhZnRlciB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBgVG9uZS5CdWZmZXIub24oJ2xvYWQnLCBjYWxsYmFjaylgIGluc3RlYWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5jZSBpdCB3aWxsIGdpdmUgeW91IGEgY2FsbGJhY2sgd2hlbiBfYWxsXyBidWZmZXJzIGFyZSBsb2FkZWQuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb249fSBvbmVycm9yIFRoZSBjYWxsYmFjayB0byBpbnZva2UgaWYgdGhlcmUgaXMgYW4gZXJyb3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKFwicGF0aC90by9zb3VuZC5tcDNcIiwgZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vdGhlIGJ1ZmZlciBpcyBub3cgYXZhaWxhYmxlLlxuXHRcdCAqIFx0dmFyIGJ1ZmYgPSBidWZmZXIuZ2V0KCk7XG5cdFx0ICogfSk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gbG9hZCBwcm92aWRlIGZhbGxiYWNrIGV4dGVuc2lvbiB0eXBlcyBpZiB0aGUgZmlyc3QgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLlxuXHRcdCAqIHZhciBidWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIoXCJwYXRoL3RvL3NvdW5kLlttcDN8b2dnfHdhdl1cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAnb25sb2FkJyxcblx0ICAgICAgICAgICAgJ29uZXJyb3InXG5cdCAgICAgICAgXSwgVG9uZS5CdWZmZXIpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzdG9yZXMgdGhlIGxvYWRlZCBBdWRpb0J1ZmZlclxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb0J1ZmZlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpbmRpY2F0ZXMgaWYgdGhlIGJ1ZmZlciBzaG91bGQgYmUgcmV2ZXJzZWQgb3Igbm90XG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JldmVyc2VkID0gb3B0aW9ucy5yZXZlcnNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBYSFJcblx0XHRcdCAqICBAdHlwZSAge1hNTEh0dHBSZXF1ZXN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogUHJpdmF0ZSBjYWxsYmFjayB3aGVuIHRoZSBidWZmZXIgaXMgbG9hZGVkLlxuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29ubG9hZCA9IFRvbmUubm9PcDtcblx0ICAgICAgICBpZiAob3B0aW9ucy51cmwgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlciB8fCBvcHRpb25zLnVybCBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0KG9wdGlvbnMudXJsKTtcblx0ICAgICAgICAgICAgLy8gaW52b2tlIHRoZSBvbmxvYWQgY2FsbGJhY2tcblx0ICAgICAgICAgICAgaWYgKG9wdGlvbnMub25sb2FkKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25sb2FkID0gb3B0aW9ucy5vbmxvYWQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcob3B0aW9ucy51cmwpKSB7XG5cdCAgICAgICAgICAgIHRoaXMubG9hZChvcHRpb25zLnVybCkudGhlbihvcHRpb25zLm9ubG9hZCkuY2F0Y2gob3B0aW9ucy5vbmVycm9yKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CdWZmZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd1cmwnOiB1bmRlZmluZWQsXG5cdCAgICAgICAgJ3JldmVyc2UnOiBmYWxzZSxcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdvbmVycm9yJzogVG9uZS5ub09wXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhc3MgaW4gYW4gQXVkaW9CdWZmZXIgb3IgVG9uZS5CdWZmZXIgdG8gc2V0IHRoZSB2YWx1ZVxuXHRcdCAqICBvZiB0aGlzIGJ1ZmZlci5cblx0XHQgKiAgQHBhcmFtIHtBdWRpb0J1ZmZlcnxUb25lLkJ1ZmZlcn0gYnVmZmVyIHRoZSBidWZmZXJcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgIGlmIChidWZmZXIgaW5zdGFuY2VvZiBUb25lLkJ1ZmZlcikge1xuXHQgICAgICAgICAgICBpZiAoYnVmZmVyLmxvYWRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyLmdldCgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyLl9vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoYnVmZmVyKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcmV0dXJuIHtBdWRpb0J1ZmZlcn0gVGhlIGF1ZGlvIGJ1ZmZlciBzdG9yZWQgaW4gdGhlIG9iamVjdC5cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTWFrZXMgYW4geGhyIHJlcWVzdCBmb3IgdGhlIHNlbGVjdGVkIHVybCB0aGVuIGRlY29kZXNcblx0XHQgKiAgdGhlIGZpbGUgYXMgYW4gYXVkaW8gYnVmZmVyLiBJbnZva2VzXG5cdFx0ICogIHRoZSBjYWxsYmFjayBvbmNlIHRoZSBhdWRpbyBidWZmZXIgbG9hZHMuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgYnVmZmVyIHRvIGxvYWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgZmlsZXR5cGUgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIuXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfSByZXR1cm5zIGEgUHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIHRoZSBUb25lLkJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBvbmxvYWQsIG9uZXJyb3IpIHtcblx0ICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChsb2FkLCBlcnJvcikge1xuXHQgICAgICAgICAgICB0aGlzLl94aHIgPSBUb25lLkJ1ZmZlci5sb2FkKHVybCwgLy9zdWNjZXNzXG5cdCAgICAgICAgICAgIGZ1bmN0aW9uIChidWZmKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zZXQoYnVmZik7XG5cdCAgICAgICAgICAgICAgICBsb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb25sb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgaWYgKG9ubG9hZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAvL2Vycm9yXG5cdCAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3hociA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICBlcnJvcihlcnIpO1xuXHQgICAgICAgICAgICAgICAgaWYgKG9uZXJyb3IpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbmVycm9yKGVycik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gcHJvbWlzZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIGlmICh0aGlzLl94aHIpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHRoaXMuX3hocik7XG5cdCAgICAgICAgICAgIHRoaXMuX3hoci5hYm9ydCgpO1xuXHQgICAgICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVyIGlzIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPiAwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGR1cmF0aW9uIG9mIHRoZSBidWZmZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgZHVyYXRpb25cblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdkdXJhdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5kdXJhdGlvbjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gc2FtcGxlc1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGxlbmd0aFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBkaXNjcmV0ZSBhdWRpbyBjaGFubmVscy4gUmV0dXJucyAwIGlmIG5vIGJ1ZmZlclxuXHRcdCAqIGlzIGxvYWRlZC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBudW1iZXJPZkNoYW5uZWxzXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnbnVtYmVyT2ZDaGFubmVscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGF1ZGlvIGJ1ZmZlciBmcm9tIHRoZSBhcnJheS4gVG8gY3JlYXRlIGEgbXVsdGljaGFubmVsIEF1ZGlvQnVmZmVyLFxuXHRcdCAqICBwYXNzIGluIGEgbXVsdGlkaW1lbnNpb25hbCBhcnJheS5cblx0XHQgKiAgQHBhcmFtIHtGbG9hdDMyQXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsIHRoZSBhdWRpbyBidWZmZXJcblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHtcblx0ICAgICAgICB2YXIgaXNNdWx0aWRpbWVuc2lvbmFsID0gYXJyYXlbMF0ubGVuZ3RoID4gMDtcblx0ICAgICAgICB2YXIgY2hhbm5lbHMgPSBpc011bHRpZGltZW5zaW9uYWwgPyBhcnJheS5sZW5ndGggOiAxO1xuXHQgICAgICAgIHZhciBsZW4gPSBpc011bHRpZGltZW5zaW9uYWwgPyBhcnJheVswXS5sZW5ndGggOiBhcnJheS5sZW5ndGg7XG5cdCAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXIoY2hhbm5lbHMsIGxlbiwgdGhpcy5jb250ZXh0LnNhbXBsZVJhdGUpO1xuXHQgICAgICAgIGlmICghaXNNdWx0aWRpbWVuc2lvbmFsICYmIGNoYW5uZWxzID09PSAxKSB7XG5cdCAgICAgICAgICAgIGFycmF5ID0gW2FycmF5XTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjaGFubmVsczsgYysrKSB7XG5cdCAgICAgICAgICAgIGJ1ZmZlci5jb3B5VG9DaGFubmVsKGFycmF5W2NdLCBjKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0U3VtcyBtdWxpcGxlIGNoYW5uZWxzIGludG8gMSBjaGFubmVsXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gY2hhbm5lbCBPcHRpb25hbGx5IG9ubHkgY29weSBhIHNpbmdsZSBjaGFubmVsIGZyb20gdGhlIGFycmF5LlxuXHRcdCAqICBAcmV0dXJuIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS50b01vbm8gPSBmdW5jdGlvbiAoY2hhbk51bSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGNoYW5OdW0pKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZnJvbUFycmF5KHRoaXMudG9BcnJheShjaGFuTnVtKSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIG91dHB1dEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmxlbmd0aCk7XG5cdCAgICAgICAgICAgIHZhciBudW1DaGFubmVscyA9IHRoaXMubnVtYmVyT2ZDaGFubmVscztcblx0ICAgICAgICAgICAgZm9yICh2YXIgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBudW1DaGFubmVsczsgY2hhbm5lbCsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbEFycmF5ID0gdGhpcy50b0FycmF5KGNoYW5uZWwpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFubmVsQXJyYXkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBvdXRwdXRBcnJheVtpXSArPSBjaGFubmVsQXJyYXlbaV07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9kaXZpZGUgYnkgdGhlIG51bWJlciBvZiBjaGFubmVsc1xuXHQgICAgICAgICAgICBvdXRwdXRBcnJheSA9IG91dHB1dEFycmF5Lm1hcChmdW5jdGlvbiAoc2FtcGxlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gc2FtcGxlIC8gbnVtQ2hhbm5lbHM7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB0aGlzLmZyb21BcnJheShvdXRwdXRBcnJheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0R2V0IHRoZSBidWZmZXIgYXMgYW4gYXJyYXkuIFNpbmdsZSBjaGFubmVsIGJ1ZmZlcnMgd2lsbCByZXR1cm4gYSAxLWRpbWVuc2lvbmFsXG5cdFx0ICogXHRGbG9hdDMyQXJyYXksIGFuZCBtdWx0aWNoYW5uZWwgYnVmZmVycyB3aWxsIHJldHVybiBtdWx0aWRpbWVuc2lvbmFsIGFycmF5cy5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBjaGFubmVsIE9wdGlvbmFsbHkgb25seSBjb3B5IGEgc2luZ2xlIGNoYW5uZWwgZnJvbSB0aGUgYXJyYXkuXG5cdFx0ICogIEByZXR1cm4ge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoY2hhbm5lbCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGNoYW5uZWwpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENoYW5uZWxEYXRhKGNoYW5uZWwpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5udW1iZXJPZkNoYW5uZWxzID09PSAxKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnRvQXJyYXkoMCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHJldCA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IHRoaXMubnVtYmVyT2ZDaGFubmVsczsgYysrKSB7XG5cdCAgICAgICAgICAgICAgICByZXRbY10gPSB0aGlzLmdldENoYW5uZWxEYXRhKGMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBGbG9hdDMyQXJyYXkgcmVwcmVzZW50aW5nIHRoZSBQQ00gYXVkaW8gZGF0YSBmb3IgdGhlIHNwZWNpZmljIGNoYW5uZWwuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGNoYW5uZWwgIFRoZSBjaGFubmVsIG51bWJlciB0byByZXR1cm5cblx0XHQgKiAgQHJldHVybiAge0Zsb2F0MzJBcnJheX0gIFRoZSBhdWRpbyBhcyBhIFR5cGVkQXJyYXlcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5nZXRDaGFubmVsRGF0YSA9IGZ1bmN0aW9uIChjaGFubmVsKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5nZXRDaGFubmVsRGF0YShjaGFubmVsKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ3V0IGEgc3Vic2VjdGlvbiBvZiB0aGUgYXJyYXkgYW5kIHJldHVybiBhIGJ1ZmZlciBvZiB0aGVcblx0XHQgKiAgc3Vic2VjdGlvbi4gRG9lcyBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBidWZmZXJcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydCBUaGUgdGltZSB0byBzdGFydCB0aGUgc2xpY2Vcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gZW5kIFRoZSBlbmQgdGltZSB0byBzbGljZS4gSWYgbm9uZSBpcyBnaXZlblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgd2lsbCBkZWZhdWx0IHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gKHN0YXJ0LCBlbmQpIHtcblx0ICAgICAgICBlbmQgPSBUb25lLmRlZmF1bHRBcmcoZW5kLCB0aGlzLmR1cmF0aW9uKTtcblx0ICAgICAgICB2YXIgc3RhcnRTYW1wbGVzID0gTWF0aC5mbG9vcih0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSAqIHRoaXMudG9TZWNvbmRzKHN0YXJ0KSk7XG5cdCAgICAgICAgdmFyIGVuZFNhbXBsZXMgPSBNYXRoLmZsb29yKHRoaXMuY29udGV4dC5zYW1wbGVSYXRlICogdGhpcy50b1NlY29uZHMoZW5kKSk7XG5cdCAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm51bWJlck9mQ2hhbm5lbHM7IGkrKykge1xuXHQgICAgICAgICAgICByZXBsYWNlbWVudFtpXSA9IHRoaXMudG9BcnJheShpKS5zbGljZShzdGFydFNhbXBsZXMsIGVuZFNhbXBsZXMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmV0QnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKCkuZnJvbUFycmF5KHJlcGxhY2VtZW50KTtcblx0ICAgICAgICByZXR1cm4gcmV0QnVmZmVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXZlcnNlIHRoZSBidWZmZXIuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuX3JldmVyc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1iZXJPZkNoYW5uZWxzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwodGhpcy5nZXRDaGFubmVsRGF0YShpKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV2ZXJzZSB0aGUgYnVmZmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSByZXZlcnNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAncmV2ZXJzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldmVyc2VkO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmV2KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9yZXZlcnNlZCAhPT0gcmV2KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXZlcnNlZCA9IHJldjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JldmVyc2UoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBTVEFUSUMgTUVUSE9EU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL3N0YXRpY2FsbHkgaW5oZXJpdHMgRW1pdHRlciBtZXRob2RzXG5cdCAgICBUb25lLkVtaXR0ZXIubWl4aW4oVG9uZS5CdWZmZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBzdGF0aWMgcXVldWUgZm9yIGFsbCBvZiB0aGUgeGhyIHJlcXVlc3RzXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlID0gW107XG5cdCAgICAvKipcblx0XHQgKiAgQSBwYXRoIHdoaWNoIGlzIHByZWZpeGVkIGJlZm9yZSBldmVyeSB1cmwuXG5cdFx0ICogIEB0eXBlICB7U3RyaW5nfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5iYXNlVXJsID0gJyc7XG5cdCAgICAvKipcblx0XHQgKiAgQ3JlYXRlIGEgVG9uZS5CdWZmZXIgZnJvbSB0aGUgYXJyYXkuIFRvIGNyZWF0ZSBhIG11bHRpY2hhbm5lbCBBdWRpb0J1ZmZlcixcblx0XHQgKiAgcGFzcyBpbiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkuXG5cdFx0ICogIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbCB0aGUgYXVkaW8gYnVmZmVyXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSBBIFRvbmUuQnVmZmVyIGNyZWF0ZWQgZnJvbSB0aGUgYXJyYXlcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSkge1xuXHQgICAgICAgIHJldHVybiBuZXcgVG9uZS5CdWZmZXIoKS5mcm9tQXJyYXkoYXJyYXkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENyZWF0ZXMgYSBUb25lLkJ1ZmZlciBmcm9tIGEgVVJMLCByZXR1cm5zIGEgcHJvbWlzZVxuXHRcdCAqIHdoaWNoIHJlc29sdmVzIHRvIGEgVG9uZS5CdWZmZXJcblx0XHQgKiBAcGFyYW0gIHtTdHJpbmd9IHVybCBUaGUgdXJsIHRvIGxvYWQuXG5cdFx0ICogQHJldHVybiB7UHJvbWlzZTxUb25lLkJ1ZmZlcj59ICAgICBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gYSBUb25lLkJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuZnJvbVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcblx0ICAgICAgICB2YXIgYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKCk7XG5cdCAgICAgICAgcmV0dXJuIGJ1ZmZlci5sb2FkKHVybCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVtb3ZlIGFuIHhociByZXF1ZXN0IGZyb20gdGhlIGRvd25sb2FkIHF1ZXVlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZSA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUuaW5kZXhPZihyZXF1ZXN0KTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBMb2FkcyBhIHVybCB1c2luZyBYTUxIdHRwUmVxdWVzdC5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHVybFxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBvbmxvYWRcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gb25lcnJvclxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBvbnByb2dyZXNzXG5cdFx0ICogIEByZXR1cm4ge1hNTEh0dHBSZXF1ZXN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIubG9hZCA9IGZ1bmN0aW9uICh1cmwsIG9ubG9hZCwgb25lcnJvcikge1xuXHQgICAgICAgIC8vZGVmYXVsdFxuXHQgICAgICAgIG9ubG9hZCA9IFRvbmUuZGVmYXVsdEFyZyhvbmxvYWQsIFRvbmUubm9PcCk7XG5cdCAgICAgICAgLy8gdGVzdCBpZiB0aGUgdXJsIGNvbnRhaW5zIG11bHRpcGxlIGV4dGVuc2lvbnNcblx0ICAgICAgICB2YXIgbWF0Y2hlcyA9IHVybC5tYXRjaCgvXFxbKC4rXFx8PykrXFxdJC8pO1xuXHQgICAgICAgIGlmIChtYXRjaGVzKSB7XG5cdCAgICAgICAgICAgIHZhciBleHRlbnNpb25zID0gbWF0Y2hlc1sxXS5zcGxpdCgnfCcpO1xuXHQgICAgICAgICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uc1swXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRlbnNpb25zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlKGV4dGVuc2lvbnNbaV0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uc1tpXTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShtYXRjaGVzWzBdLCBleHRlbnNpb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGUpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5lbWl0KCdlcnJvcicsIGUpO1xuXHQgICAgICAgICAgICBpZiAob25lcnJvcikge1xuXHQgICAgICAgICAgICAgICAgb25lcnJvcihlKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gb25Qcm9ncmVzcygpIHtcblx0ICAgICAgICAgICAgLy9jYWxjdWxhdGUgdGhlIHByb2dyZXNzXG5cdCAgICAgICAgICAgIHZhciB0b3RhbFByb2dyZXNzID0gMDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdG90YWxQcm9ncmVzcyArPSBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZVtpXS5wcm9ncmVzcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5lbWl0KCdwcm9ncmVzcycsIHRvdGFsUHJvZ3Jlc3MgLyBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5sZW5ndGgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHQgICAgICAgIHJlcXVlc3Qub3BlbignR0VUJywgVG9uZS5CdWZmZXIuYmFzZVVybCArIHVybCwgdHJ1ZSk7XG5cdCAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xuXHQgICAgICAgIC8vc3RhcnQgb3V0IGFzIDBcblx0ICAgICAgICByZXF1ZXN0LnByb2dyZXNzID0gMDtcblx0ICAgICAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5wdXNoKHJlcXVlc3QpO1xuXHQgICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcblx0ICAgICAgICAgICAgICAgIFRvbmUuY29udGV4dC5kZWNvZGVBdWRpb0RhdGEocmVxdWVzdC5yZXNwb25zZSkudGhlbihmdW5jdGlvbiAoYnVmZikge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucHJvZ3Jlc3MgPSAxO1xuXHQgICAgICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3MoKTtcblx0ICAgICAgICAgICAgICAgICAgICBvbmxvYWQoYnVmZik7XG5cdCAgICAgICAgICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy9lbWl0IHRoZSBldmVudCBhdCB0aGUgZW5kXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIFRvbmUuQnVmZmVyLmVtaXQoJ2xvYWQnKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoJ1RvbmUuQnVmZmVyOiBjb3VsZCBub3QgZGVjb2RlIGF1ZGlvIGRhdGE6ICcgKyB1cmwpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBvbkVycm9yKCdUb25lLkJ1ZmZlcjogY291bGQgbm90IGxvY2F0ZSBmaWxlOiAnICsgdXJsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcblx0ICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG5cdCAgICAgICAgICAgICAgICAvL29ubHkgZ28gdG8gOTUlLCB0aGUgbGFzdCA1JSBpcyB3aGVuIHRoZSBhdWRpbyBpcyBkZWNvZGVkXG5cdCAgICAgICAgICAgICAgICByZXF1ZXN0LnByb2dyZXNzID0gZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwgKiAwLjk1O1xuXHQgICAgICAgICAgICAgICAgb25Qcm9ncmVzcygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmVxdWVzdC5zZW5kKCk7XG5cdCAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgYWxsIG9mIHRoZSBkb3dubG9hZHMgaW4gcHJvZ3Jlc3Ncblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmNhbmNlbERvd25sb2FkcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKHJlcXVlc3QpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuQnVmZmVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDaGVja3MgYSB1cmwncyBleHRlbnNpb24gdG8gc2VlIGlmIHRoZSBjdXJyZW50IGJyb3dzZXIgY2FuIHBsYXkgdGhhdCBmaWxlIHR5cGUuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIHVybC9leHRlbnNpb24gdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJuIHtCb29sZWFufSBJZiB0aGUgZmlsZSBleHRlbnNpb24gY2FuIGJlIHBsYXllZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlKFwid2F2XCIpOyAvL3JldHVybnMgdHJ1ZVxuXHRcdCAqIFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZShcInBhdGgvdG8vZmlsZS53YXZcIik7IC8vcmV0dXJucyB0cnVlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5zdXBwb3J0c1R5cGUgPSBmdW5jdGlvbiAodXJsKSB7XG5cdCAgICAgICAgdmFyIGV4dGVuc2lvbiA9IHVybC5zcGxpdCgnLicpO1xuXHQgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbltleHRlbnNpb24ubGVuZ3RoIC0gMV07XG5cdCAgICAgICAgdmFyIHJlc3BvbnNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXVkaW8nKS5jYW5QbGF5VHlwZSgnYXVkaW8vJyArIGV4dGVuc2lvbik7XG5cdCAgICAgICAgcmV0dXJuIHJlc3BvbnNlICE9PSAnJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyBhIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2hlbiBhbGwgb2YgdGhlIGJ1ZmZlcnMgaGF2ZSBsb2FkZWRcblx0XHQgKiAgQHJldHVybiB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUubG9hZGVkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvbmxvYWQsIG9uZXJyb3I7XG5cdCAgICAgICAgZnVuY3Rpb24gcmVtb3ZlRXZlbnRzKCkge1xuXHQgICAgICAgICAgICAvL3JlbW92ZSB0aGUgZXZlbnRzIHdoZW4gaXQncyByZXNvbHZlZFxuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vZmYoJ2xvYWQnLCBvbmxvYWQpO1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vZmYoJ2Vycm9yJywgb25lcnJvcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoc3VjY2VzcywgZmFpbCkge1xuXHQgICAgICAgICAgICBvbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICBzdWNjZXNzKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIG9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICBmYWlsKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIC8vYWRkIHRoZSBldmVudCBsaXN0ZW5lcnNcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub24oJ2xvYWQnLCBvbmxvYWQpO1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vbignZXJyb3InLCBvbmVycm9yKTtcblx0ICAgICAgICB9KS50aGVuKHJlbW92ZUV2ZW50cykuY2F0Y2goZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgcmVtb3ZlRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CdWZmZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBmaXJlLWFuZC1mb3JnZXQgT3NjaWxsYXRvck5vZGUuIEFkZHMgdGhlXG5cdFx0ICogICAgIGFiaWxpdHkgdG8gcmVzY2hlZHVsZSB0aGUgc3RvcCBtZXRob2QuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtICB7QXVkaW9CdWZmZXJ8VG9uZS5CdWZmZXJ9ICBidWZmZXIgICBUaGUgYnVmZmVyIHRvIHBsYXlcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBvbmxvYWQgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLk9zY2lsbGF0b3JOb2RlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlXG5cdFx0XHQgKiAgYnVmZmVyIHNvdXJjZSBpcyBkb25lIHBsYXlpbmcuXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG9wdGlvbnMub25lbmRlZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvciBzdGFydCB0aW1lXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yIHN0b3AgdGltZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIG5vZGUgd2hpY2ggZW52ZWxvcGVzIHRoZSBPc2NpbGxhdG9yTm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlICB7T3NjaWxsYXRvck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSB0aGlzLmNvbnRleHQuY3JlYXRlT3NjaWxsYXRvcigpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY29ubmVjdCh0aGlzLl9nYWluTm9kZSk7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LnZhbHVlID0gb3B0aW9ucy5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9vc2NpbGxhdG9yLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS52YWx1ZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB0aGF0IHRoZSBidWZmZXIgcmFtcHMgdG9cblx0XHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IDE7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Pc2NpbGxhdG9yTm9kZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ29uZW5kZWQnOiBUb25lLm5vT3Bcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIG9zY2lsbGF0b3IsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yTm9kZSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHBsYXliYWNrIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byB0ZXN0IHRoZSBzdGF0ZSBhdFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5TdGF0ZX0gIFRoZSBwbGF5YmFjayBzdGF0ZS4gXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5nZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xICYmIHRpbWUgPj0gdGhpcy5fc3RhcnRUaW1lICYmICh0aGlzLl9zdG9wVGltZSA9PT0gLTEgfHwgdGltZSA8PSB0aGlzLl9zdG9wVGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RhcnRlZDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0ICAgICAqIFN0YXJ0IHRoZSBvc2NpbGxhdG9yIG5vZGUgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAqIEBwYXJhbSAge1RpbWU9fSB0aW1lIFdoZW4gdG8gc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAqIEByZXR1cm4ge09zY2lsbGF0b3JOb2RlfSAgICAgIHRoaXNcblx0ICAgICAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgPT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRoaXMuX3N0YXJ0VGltZSk7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgbm93KTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCB0aGlzLl9zdGFydFRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGNhbGwgT3NjaWxsYXRvck5vZGUuc3RhcnQgbW9yZSB0aGFuIG9uY2UnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdCAgICAgKiBTZXRzIGFuIGFyYml0cmFyeSBjdXN0b20gcGVyaW9kaWMgd2F2ZWZvcm0gZ2l2ZW4gYSBQZXJpb2RpY1dhdmUuXG5cdCAgICAgKiBAcGFyYW0gIHtQZXJpb2RpY1dhdmV9IHBlcmlvZGljV2F2ZSBQZXJpb2RpY1dhdmUgc2hvdWxkIGJlIGNyZWF0ZWQgd2l0aCBjb250ZXh0LmNyZWF0ZVBlcmlvZGljV2F2ZVxuXHQgICAgICogQHJldHVybiB7T3NjaWxsYXRvck5vZGV9IHRoaXNcblx0ICAgICAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0UGVyaW9kaWNXYXZlID0gZnVuY3Rpb24gKHBlcmlvZGljV2F2ZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc2V0UGVyaW9kaWNXYXZlKHBlcmlvZGljV2F2ZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdCAgICAgKiBTdG9wIHRoZSBvc2NpbGxhdG9yIG5vZGUgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAqIEBwYXJhbSAge1RpbWU9fSB0aW1lIFdoZW4gdG8gc3RvcCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICogQHJldHVybiB7T3NjaWxsYXRvck5vZGV9ICAgICAgdGhpc1xuXHQgICAgICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL2NhbmNlbCB0aGUgcHJldmlvdXMgc3RvcFxuXHQgICAgICAgIHRoaXMuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIC8vcmVzY2hlZHVsZSBpdFxuXHQgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aGlzLl9zdG9wVGltZSk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0ID0gdGhpcy5jb250ZXh0LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGhpcy5ub3coKSk7XG5cdCAgICAgICAgICAgIHRoaXMub25lbmRlZCgpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5fc3RvcFRpbWUgLSB0aGlzLm5vdygpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGEgc2NoZWR1bGVkIHN0b3AgZXZlbnRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuT3NjaWxsYXRvck5vZGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5jYW5jZWxTdG9wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIHRoZSBzdG9wIGVudmVsb3BlXG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRoaXMuX3N0YXJ0VGltZSArIHRoaXMuc2FtcGxlVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgTWF0aC5tYXgodGhpcy5ub3coKSwgdGhpcy5fc3RhcnRUaW1lKSk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gLTE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvc2NpbGxhdG9yIHR5cGUuIEVpdGhlciAnc2luZScsICdzYXd0b290aCcsICdzcXVhcmUnLCBvciAndHJpYW5nbGUnXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvck5vZGUjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuT3NjaWxsYXRvck5vZGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9zY2lsbGF0b3JOb2RlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Pc2NpbGxhdG9yIHN1cHBvcnRzIGEgbnVtYmVyIG9mIGZlYXR1cmVzIGluY2x1ZGluZ1xuXHRcdCAqICAgICAgICAgcGhhc2Ugcm90YXRpb24sIG11bHRpcGxlIG9zY2lsbGF0b3IgdHlwZXMgKHNlZSBUb25lLk9zY2lsbGF0b3IudHlwZSksXG5cdFx0ICogICAgICAgICBhbmQgVHJhbnNwb3J0IHN5bmNpbmcgKHNlZSBUb25lLk9zY2lsbGF0b3Iuc3luY0ZyZXF1ZW5jeSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtmcmVxdWVuY3ldIFN0YXJ0aW5nIGZyZXF1ZW5jeVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gW3R5cGVdIFRoZSBvc2NpbGxhdG9yIHR5cGUuIFJlYWQgbW9yZSBhYm91dCB0eXBlIGJlbG93LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbWFrZSBhbmQgc3RhcnQgYSA0NDBoeiBzaW5lIHRvbmVcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcig0NDAsIFwic2luZVwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtYWluIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7T3NjaWxsYXRvck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcGVyaW9kaWMgd2F2ZVxuXHRcdFx0ICogIEB0eXBlIHtQZXJpb2RpY1dhdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3dhdmUgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYXJ0aWFscyBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucy5wYXJ0aWFscywgWzFdKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBiZXR3ZWVuIDAgLSAzNjBcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7c3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gbnVsbDtcblx0ICAgICAgICAvL3NldHVwXG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLl9waGFzZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ3BhcnRpYWxzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIE9zY2lsbGF0b3IgdHlwZXNcblx0XHQgKiAgQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlID0ge1xuXHQgICAgICAgIFNpbmU6ICdzaW5lJyxcblx0ICAgICAgICBUcmlhbmdsZTogJ3RyaWFuZ2xlJyxcblx0ICAgICAgICBTYXd0b290aDogJ3Nhd3Rvb3RoJyxcblx0ICAgICAgICBTcXVhcmU6ICdzcXVhcmUnLFxuXHQgICAgICAgIEN1c3RvbTogJ2N1c3RvbSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vbmV3IG9zY2lsbGF0b3Igd2l0aCBwcmV2aW91cyB2YWx1ZXNcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvck5vZGUoKTtcblx0ICAgICAgICBpZiAodGhpcy5fd2F2ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNldFBlcmlvZGljV2F2ZSh0aGlzLl93YXZlKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGNvbnRyb2wgc2lnbmFsIHRvIHRoZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSAmIGRldHVuZVxuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXN0YXJ0IHRoZSBvc2NpbGxhdG9yLiBEb2VzIG5vdCBzdG9wIHRoZSBvc2NpbGxhdG9yLCBidXQgaW5zdGVhZFxuXHRcdCAqIGp1c3QgY2FuY2VscyBhbnkgc2NoZWR1bGVkICdzdG9wJyBmcm9tIGJlaW5nIGludm9rZWQuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLk9zY2lsbGF0b3J9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGhpcy50b1NlY29uZHModGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTeW5jIHRoZSBzaWduYWwgdG8gdGhlIFRyYW5zcG9ydCdzIGJwbS4gQW55IGNoYW5nZXMgdG8gdGhlIHRyYW5zcG9ydHMgYnBtLFxuXHRcdCAqICB3aWxsIGFsc28gYWZmZWN0IHRoZSBvc2NpbGxhdG9ycyBmcmVxdWVuY3kuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgPSAxMjA7XG5cdFx0ICogb3NjLmZyZXF1ZW5jeS52YWx1ZSA9IDQ0MDtcblx0XHQgKiAvL3RoZSByYXRpb24gYmV0d2VlbiB0aGUgYnBtIGFuZCB0aGUgZnJlcXVlbmN5IHdpbGwgYmUgbWFpbnRhaW5lZFxuXHRcdCAqIG9zYy5zeW5jRnJlcXVlbmN5KCk7XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gMjQwO1xuXHRcdCAqIC8vIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IgaXMgZG91YmxlZCB0byA4ODBcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuc3luY0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVW5zeW5jIHRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5IGZyb20gdGhlIFRyYW5zcG9ydC5cblx0XHQgKiAgU2VlIFRvbmUuT3NjaWxsYXRvci5zeW5jRnJlcXVlbmN5XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUudW5zeW5jRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LnVuc3luY1NpZ25hbCh0aGlzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3I6IGVpdGhlciBzaW5lLCBzcXVhcmUsIHRyaWFuZ2xlLCBvciBzYXd0b290aC4gQWxzbyBjYXBhYmxlIG9mXG5cdFx0ICogc2V0dGluZyB0aGUgZmlyc3QgeCBudW1iZXIgb2YgcGFydGlhbHMgb2YgdGhlIG9zY2lsbGF0b3IuIEZvciBleGFtcGxlOiBcInNpbmU0XCIgd291bGRcblx0XHQgKiBzZXQgYmUgdGhlIGZpcnN0IDQgcGFydGlhbHMgb2YgdGhlIHNpbmUgd2F2ZSBhbmQgXCJ0cmlhbmdsZThcIiB3b3VsZCBzZXQgdGhlIGZpcnN0XG5cdFx0ICogOCBwYXJ0aWFscyBvZiB0aGUgdHJpYW5nbGUgd2F2ZS5cblx0XHQgKiA8YnI+PGJyPlxuXHRcdCAqIFVzZXMgUGVyaW9kaWNXYXZlIGludGVybmFsbHkgZXZlbiBmb3IgbmF0aXZlIHR5cGVzIHNvIHRoYXQgaXQgY2FuIHNldCB0aGUgcGhhc2UuXG5cdFx0ICogUGVyaW9kaWNXYXZlIGVxdWF0aW9ucyBhcmUgZnJvbSB0aGVcblx0XHQgKiBbV2Via2l0IFdlYiBBdWRpbyBpbXBsZW1lbnRhdGlvbl0oaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9jb2Rlc2VhcmNoI2Nocm9taXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvU291cmNlL21vZHVsZXMvd2ViYXVkaW8vUGVyaW9kaWNXYXZlLmNwcCZzcT1wYWNrYWdlOmNocm9taXVtKS5cblx0XHQgKlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL3NldCBpdCB0byBhIHNxdWFyZSB3YXZlXG5cdFx0ICogb3NjLnR5cGUgPSBcInNxdWFyZVwiO1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdGhlIGZpcnN0IDYgcGFydGlhbHMgb2YgYSBzYXd0b290aCB3YXZlXG5cdFx0ICogb3NjLnR5cGUgPSBcInNhd3Rvb3RoNlwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdmFyIGlzQmFzaWNUeXBlID0gW1xuXHQgICAgICAgICAgICAgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2luZSxcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNxdWFyZSxcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlRyaWFuZ2xlLFxuXHQgICAgICAgICAgICAgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2F3dG9vdGhcblx0ICAgICAgICAgICAgXS5pbmNsdWRlcyh0eXBlKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3BoYXNlID09PSAwICYmIGlzQmFzaWNUeXBlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93YXZlID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIC8vanVzdCBnbyB3aXRoIHRoZSBiYXNpYyBhcHByb2FjaFxuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPT09IHR5cGU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29lZnMgPSB0aGlzLl9nZXRSZWFsSW1hZ2luYXJ5KHR5cGUsIHRoaXMuX3BoYXNlKTtcblx0ICAgICAgICAgICAgICAgIHZhciBwZXJpb2RpY1dhdmUgPSB0aGlzLmNvbnRleHQuY3JlYXRlUGVyaW9kaWNXYXZlKGNvZWZzWzBdLCBjb2Vmc1sxXSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93YXZlID0gcGVyaW9kaWNXYXZlO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNldFBlcmlvZGljV2F2ZSh0aGlzLl93YXZlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSByZWFsIGFuZCBpbWFnaW5hcnkgY29tcG9uZW50cyBiYXNlZFxuXHRcdCAqICBvbiB0aGUgb3NjaWxsYXRvciB0eXBlLlxuXHRcdCAqICBAcmV0dXJucyB7QXJyYXl9IFtyZWFsLCBpbWFnaW5hcnldXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9nZXRSZWFsSW1hZ2luYXJ5ID0gZnVuY3Rpb24gKHR5cGUsIHBoYXNlKSB7XG5cdCAgICAgICAgdmFyIGZmdFNpemUgPSA0MDk2O1xuXHQgICAgICAgIHZhciBwZXJpb2RpY1dhdmVTaXplID0gZmZ0U2l6ZSAvIDI7XG5cdCAgICAgICAgdmFyIHJlYWwgPSBuZXcgRmxvYXQzMkFycmF5KHBlcmlvZGljV2F2ZVNpemUpO1xuXHQgICAgICAgIHZhciBpbWFnID0gbmV3IEZsb2F0MzJBcnJheShwZXJpb2RpY1dhdmVTaXplKTtcblx0ICAgICAgICB2YXIgcGFydGlhbENvdW50ID0gMTtcblx0ICAgICAgICBpZiAodHlwZSA9PT0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tKSB7XG5cdCAgICAgICAgICAgIHBhcnRpYWxDb3VudCA9IHRoaXMuX3BhcnRpYWxzLmxlbmd0aCArIDE7XG5cdCAgICAgICAgICAgIHBlcmlvZGljV2F2ZVNpemUgPSBwYXJ0aWFsQ291bnQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHBhcnRpYWwgPSAvXihzaW5lfHRyaWFuZ2xlfHNxdWFyZXxzYXd0b290aCkoXFxkKykkLy5leGVjKHR5cGUpO1xuXHQgICAgICAgICAgICBpZiAocGFydGlhbCkge1xuXHQgICAgICAgICAgICAgICAgcGFydGlhbENvdW50ID0gcGFyc2VJbnQocGFydGlhbFsyXSkgKyAxO1xuXHQgICAgICAgICAgICAgICAgdHlwZSA9IHBhcnRpYWxbMV07XG5cdCAgICAgICAgICAgICAgICBwYXJ0aWFsQ291bnQgPSBNYXRoLm1heChwYXJ0aWFsQ291bnQsIDIpO1xuXHQgICAgICAgICAgICAgICAgcGVyaW9kaWNXYXZlU2l6ZSA9IHBhcnRpYWxDb3VudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBmb3IgKHZhciBuID0gMTsgbiA8IHBlcmlvZGljV2F2ZVNpemU7ICsrbikge1xuXHQgICAgICAgICAgICB2YXIgcGlGYWN0b3IgPSAyIC8gKG4gKiBNYXRoLlBJKTtcblx0ICAgICAgICAgICAgdmFyIGI7XG5cdCAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNpbmU6XG5cdCAgICAgICAgICAgICAgICBiID0gbiA8PSBwYXJ0aWFsQ291bnQgPyAxIDogMDtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNxdWFyZTpcblx0ICAgICAgICAgICAgICAgIGIgPSBuICYgMSA/IDIgKiBwaUZhY3RvciA6IDA7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5TYXd0b290aDpcblx0ICAgICAgICAgICAgICAgIGIgPSBwaUZhY3RvciAqIChuICYgMSA/IDEgOiAtMSk7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5UcmlhbmdsZTpcblx0ICAgICAgICAgICAgICAgIGlmIChuICYgMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGIgPSAyICogKHBpRmFjdG9yICogcGlGYWN0b3IpICogKG4gLSAxID4+IDEgJiAxID8gLTEgOiAxKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYiA9IDA7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b206XG5cdCAgICAgICAgICAgICAgICBiID0gdGhpcy5fcGFydGlhbHNbbiAtIDFdO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLk9zY2lsbGF0b3I6IGludmFsaWQgdHlwZTogJyArIHR5cGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChiICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZWFsW25dID0gLWIgKiBNYXRoLnNpbihwaGFzZSAqIG4pO1xuXHQgICAgICAgICAgICAgICAgaW1hZ1tuXSA9IGIgKiBNYXRoLmNvcyhwaGFzZSAqIG4pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmVhbFtuXSA9IDA7XG5cdCAgICAgICAgICAgICAgICBpbWFnW25dID0gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gW1xuXHQgICAgICAgICAgICByZWFsLFxuXHQgICAgICAgICAgICBpbWFnXG5cdCAgICAgICAgXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29tcHV0ZSB0aGUgaW52ZXJzZSBGRlQgZm9yIGEgZ2l2ZW4gcGhhc2UuXG5cdFx0ICogIEBwYXJhbSAge0Zsb2F0MzJBcnJheX0gIHJlYWxcblx0XHQgKiAgQHBhcmFtICB7RmxvYXQzMkFycmF5fSAgaW1hZ1xuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIHBoYXNlXG5cdFx0ICogIEByZXR1cm4gIHtBdWRpb1JhbmdlfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5faW52ZXJzZUZGVCA9IGZ1bmN0aW9uIChyZWFsLCBpbWFnLCBwaGFzZSkge1xuXHQgICAgICAgIHZhciBzdW0gPSAwO1xuXHQgICAgICAgIHZhciBsZW4gPSByZWFsLmxlbmd0aDtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIHN1bSArPSByZWFsW2ldICogTWF0aC5jb3MoaSAqIHBoYXNlKSArIGltYWdbaV0gKiBNYXRoLnNpbihpICogcGhhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gc3VtO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcmV0dXJuICB7QXVkaW9SYW5nZX1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX2dldEluaXRpYWxWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY29lZnMgPSB0aGlzLl9nZXRSZWFsSW1hZ2luYXJ5KHRoaXMuX3R5cGUsIDApO1xuXHQgICAgICAgIHZhciByZWFsID0gY29lZnNbMF07XG5cdCAgICAgICAgdmFyIGltYWcgPSBjb2Vmc1sxXTtcblx0ICAgICAgICB2YXIgbWF4VmFsdWUgPSAwO1xuXHQgICAgICAgIHZhciB0d29QaSA9IE1hdGguUEkgKiAyO1xuXHQgICAgICAgIC8vY2hlY2sgZm9yIHBlYWtzIGluIDggcGxhY2VzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgbWF4VmFsdWUgPSBNYXRoLm1heCh0aGlzLl9pbnZlcnNlRkZUKHJlYWwsIGltYWcsIGkgLyA4ICogdHdvUGkpLCBtYXhWYWx1ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAtdGhpcy5faW52ZXJzZUZGVChyZWFsLCBpbWFnLCB0aGlzLl9waGFzZSkgLyBtYXhWYWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgIT09IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnRpYWxzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgICAgICB0aGlzLnR5cGUgPSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b207XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGhhc2UgPSAxODA7IC8vZmxpcHMgdGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGhhc2UgKiAoMTgwIC8gTWF0aC5QSSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9waGFzZSA9IHBoYXNlICogTWF0aC5QSSAvIDE4MDtcblx0ICAgICAgICAgICAgLy9yZXNldCB0aGUgdHlwZVxuXHQgICAgICAgICAgICB0aGlzLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3QuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl93YXZlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEF1ZGlvVG9HYWluIGNvbnZlcnRzIGFuIGlucHV0IGluIEF1ZGlvUmFuZ2UgWy0xLDFdIHRvIE5vcm1hbFJhbmdlIFswLDFdLiBcblx0XHQgKiAgICAgICAgIFNlZSBUb25lLkdhaW5Ub0F1ZGlvLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgYTJnID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ub0dhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ub3JtID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAoeCkge1xuXHQgICAgICAgICAgICByZXR1cm4gKHggKyAxKSAvIDI7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdWRpb1RvR2FpbiwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb1RvR2Fpbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb1RvR2Fpbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ub3JtLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ub3JtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdWRpb1RvR2Fpbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlplcm8gb3V0cHV0cyAwJ3MgYXQgYXVkaW8tcmF0ZS4gVGhlIHJlYXNvbiB0aGlzIGhhcyB0byBiZVxuXHRcdCAqICAgICAgICAgaXQncyBvd24gY2xhc3MgaXMgdGhhdCBtYW55IGJyb3dzZXJzIG9wdGltaXplIG91dCBUb25lLlNpZ25hbFxuXHRcdCAqICAgICAgICAgd2l0aCBhIHZhbHVlIG9mIDAgYW5kIHdpbGwgbm90IHByb2Nlc3Mgbm9kZXMgZnVydGhlciBkb3duIHRoZSBncmFwaC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuWmVybyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmdldENvbnN0YW50KDApLmNvbm5lY3QodGhpcy5fZ2Fpbik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5aZXJvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlplcm99ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlplcm8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuWmVybztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBMRk8gc3RhbmRzIGZvciBsb3cgZnJlcXVlbmN5IG9zY2lsbGF0b3IuIFRvbmUuTEZPIHByb2R1Y2VzIGFuIG91dHB1dCBzaWduYWxcblx0XHQgKiAgICAgICAgICB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gQXVkaW9QYXJhbSBvciBUb25lLlNpZ25hbFxuXHRcdCAqICAgICAgICAgIGluIG9yZGVyIHRvIG1vZHVsYXRlIHRoYXQgcGFyYW1ldGVyIHdpdGggYW4gb3NjaWxsYXRvci4gVGhlIExGTyBjYW5cblx0XHQgKiAgICAgICAgICBhbHNvIGJlIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0IHRvIHN0YXJ0L3N0b3AgYW5kIGNoYW5nZSB3aGVuIHRoZSB0ZW1wbyBjaGFuZ2VzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRpb24uIFR5cGljYWxseSwgTEZPcyB3aWxsIGJlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZyZXF1ZW5jeSByYW5nZSBvZiAwLjEgdG8gMTAgaGVydHouXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gbWluIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZSBvZiB0aGUgTEZPLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IG1heCBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgTEZPLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBsZm8gPSBuZXcgVG9uZS5MRk8oXCI0blwiLCA0MDAsIDQwMDApO1xuXHRcdCAqIGxmby5jb25uZWN0KGZpbHRlci5mcmVxdWVuY3kpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ21pbicsXG5cdCAgICAgICAgICAgICdtYXgnXG5cdCAgICAgICAgXSwgVG9uZS5MRk8pO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICd0eXBlJzogb3B0aW9ucy50eXBlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbydzIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbXBsaXR1ZGUgb2YgdGhlIExGTywgd2hpY2ggY29udHJvbHMgdGhlIG91dHB1dCByYW5nZSBiZXR3ZWVuXG5cdFx0XHQgKiB0aGUgbWluIGFuZCBtYXggb3V0cHV0LiBGb3IgZXhhbXBsZSBpZiB0aGUgbWluIGlzIC0xMCBhbmQgdGhlIG1heFxuXHRcdFx0ICogaXMgMTAsIHNldHRpbmcgdGhlIGFtcGxpdHVkZSB0byAwLjUgd291bGQgbWFrZSB0aGUgTEZPIG1vZHVsYXRlXG5cdFx0XHQgKiBiZXR3ZWVuIC01IGFuZCA1LlxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlID0gdGhpcy5fb3NjaWxsYXRvci52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUudW5pdHMgPSBUb25lLlR5cGUuTm9ybWFsUmFuZ2U7XG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUudmFsdWUgPSBvcHRpb25zLmFtcGxpdHVkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lnbmFsIHdoaWNoIGlzIG91dHB1dCB3aGVuIHRoZSBMRk8gaXMgc3RvcHBlZFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMCwgVG9uZS5UeXBlLkF1ZGlvUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEp1c3Qgb3V0cHV0cyB6ZXJvcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5aZXJvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl96ZXJvcyA9IG5ldyBUb25lLlplcm8oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgdGhhdCB0aGUgTEZPIG91dHB1dHMgd2hlbiBpdCdzIHN0b3BwZWRcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFZhbHVlID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BdWRpb1RvR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYTJnID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGVyID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TY2FsZShvcHRpb25zLm1pbiwgb3B0aW9ucy5tYXgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB1bml0cyBvZiB0aGUgTEZPICh1c2VkIGZvciBjb252ZXJ0aW5nKVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlR5cGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3VuaXRzID0gVG9uZS5UeXBlLkRlZmF1bHQ7XG5cdCAgICAgICAgdGhpcy51bml0cyA9IG9wdGlvbnMudW5pdHM7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jaGFpbih0aGlzLl9hMmcsIHRoaXMuX3NjYWxlcik7XG5cdCAgICAgICAgdGhpcy5femVyb3MuY29ubmVjdCh0aGlzLl9hMmcpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuY29ubmVjdCh0aGlzLl9hMmcpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5MRk8sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICpcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6ICc0bicsXG5cdCAgICAgICAgJ2FtcGxpdHVkZSc6IDEsXG5cdCAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlZmF1bHRcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgTEZPIHdpbGwgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnNldFZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgTEZPIHdpbGwgc3RvcFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5zZXRWYWx1ZUF0VGltZSh0aGlzLl9zdG9wcGVkVmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3luYyB0aGUgc3RhcnQvc3RvcC9wYXVzZSB0byB0aGUgdHJhbnNwb3J0XG5cdFx0ICogIGFuZCB0aGUgZnJlcXVlbmN5IHRvIHRoZSBicG0gb2YgdGhlIHRyYW5zcG9ydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgbGZvLmZyZXF1ZW5jeS52YWx1ZSA9IFwiOG5cIjtcblx0XHQgKiAgbGZvLnN5bmMoKS5zdGFydCgwKVxuXHRcdCAqICAvL3RoZSByYXRlIG9mIHRoZSBMRk8gd2lsbCBhbHdheXMgYmUgYW4gZWlnaHRoIG5vdGUsXG5cdFx0ICogIC8vZXZlbiBhcyB0aGUgdGVtcG8gY2hhbmdlc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zeW5jRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHVuc3luYyB0aGUgTEZPIGZyb20gdHJhbnNwb3J0IGNvbnRyb2xcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci51bnN5bmNGcmVxdWVuY3koKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaXVtdW0gb3V0cHV0IG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdG9Vbml0cyh0aGlzLl9zY2FsZXIubWluKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICBtaW4gPSB0aGlzLl9mcm9tVW5pdHMobWluKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGVyLm1pbiA9IG1pbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIG91dHB1dCBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvVW5pdHModGhpcy5fc2NhbGVyLm1heCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgbWF4ID0gdGhpcy5fZnJvbVVuaXRzKG1heCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlci5tYXggPSBtYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvcjogc2luZSwgc3F1YXJlLCBzYXd0b290aCwgdHJpYW5nbGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BwZWRWYWx1ZSA9IHRoaXMuX29zY2lsbGF0b3IuX2dldEluaXRpYWxWYWx1ZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnZhbHVlID0gdGhpcy5fc3RvcHBlZFZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BwZWRWYWx1ZSA9IHRoaXMuX29zY2lsbGF0b3IuX2dldEluaXRpYWxWYWx1ZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnZhbHVlID0gdGhpcy5fc3RvcHBlZFZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG91dHB1dCB1bml0cyBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7VG9uZS5UeXBlfVxuXHRcdCAqIEBuYW1lIHVuaXRzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAndW5pdHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl91bml0cztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB2YXIgY3VycmVudE1pbiA9IHRoaXMubWluO1xuXHQgICAgICAgICAgICB2YXIgY3VycmVudE1heCA9IHRoaXMubWF4O1xuXHQgICAgICAgICAgICAvL2NvbnZlcnQgdGhlIG1pbiBhbmQgdGhlIG1heFxuXHQgICAgICAgICAgICB0aGlzLl91bml0cyA9IHZhbDtcblx0ICAgICAgICAgICAgdGhpcy5taW4gPSBjdXJyZW50TWluO1xuXHQgICAgICAgICAgICB0aGlzLm1heCA9IGN1cnJlbnRNYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnN0YXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGUgTEZPIHRvIGFuIEF1ZGlvUGFyYW0sIEF1ZGlvTm9kZSwgb3IgVG9uZSBOb2RlLlxuXHRcdCAqICBUb25lLkxGTyB3aWxsIGF1dG9tYXRpY2FsbHkgY29udmVydCB0byB0aGUgZGVzdGluYXRpb24gdW5pdHMgb2YgdGhlXG5cdFx0ICogIHdpbGwgZ2V0IHRoZSB1bml0cyBmcm9tIHRoZSBjb25uZWN0ZWQgbm9kZS5cblx0XHQgKiAgQHBhcmFtICB7VG9uZSB8IEF1ZGlvUGFyYW0gfCBBdWRpb05vZGV9IG5vZGVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBvdXRwdXQgdG8gY29ubmVjdCBmcm9tXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBpbnB1dCB0byBjb25uZWN0IHRvXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmIChub2RlLmNvbnN0cnVjdG9yID09PSBUb25lLlNpZ25hbCB8fCBub2RlLmNvbnN0cnVjdG9yID09PSBUb25lLlBhcmFtKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udmVydCA9IG5vZGUuY29udmVydDtcblx0ICAgICAgICAgICAgdGhpcy51bml0cyA9IG5vZGUudW5pdHM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBwcml2YXRlIG1ldGhvZCBib3Jyb3dlZCBmcm9tIFBhcmFtIGNvbnZlcnRzXG5cdFx0ICogIHVuaXRzIGZyb20gdGhlaXIgZGVzdGluYXRpb24gdmFsdWVcblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuX2Zyb21Vbml0cyA9IFRvbmUuUGFyYW0ucHJvdG90eXBlLl9mcm9tVW5pdHM7XG5cdCAgICAvKipcblx0XHQgKiAgcHJpdmF0ZSBtZXRob2QgYm9ycm93ZWQgZnJvbSBQYXJhbSBjb252ZXJ0c1xuXHRcdCAqICB1bml0cyB0byB0aGVpciBkZXN0aW5hdGlvbiB2YWx1ZVxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5fdG9Vbml0cyA9IFRvbmUuUGFyYW0ucHJvdG90eXBlLl90b1VuaXRzO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc2Nvbm5lY3QgYW5kIGRpc3Bvc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5femVyb3MuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3plcm9zID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYTJnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hMmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmFtcGxpdHVkZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTEZPO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5MaW1pdGVyIHdpbGwgbGltaXQgdGhlIGxvdWRuZXNzIG9mIGFuIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgIEl0IGlzIGNvbXBvc2VkIG9mIGEgVG9uZS5Db21wcmVzc29yIHdpdGggYSBmYXN0IGF0dGFja1xuXHRcdCAqICAgICAgICAgYW5kIHJlbGVhc2UuIExpbWl0ZXJzIGFyZSBjb21tb25seSB1c2VkIHRvIHNhZmVndWFyZCBhZ2FpbnN0XG5cdFx0ICogICAgICAgICBzaWduYWwgY2xpcHBpbmcuIFVubGlrZSBhIGNvbXByZXNzb3IsIGxpbWl0ZXJzIGRvIG5vdCBwcm92aWRlXG5cdFx0ICogICAgICAgICBzbW9vdGggZ2FpbiByZWR1Y3Rpb24gYW5kIGFsbW9zdCBjb21wbGV0ZWx5IHByZXZlbnRcblx0XHQgKiAgICAgICAgIGFkZGl0aW9uYWwgZ2FpbiBhYm92ZSB0aGUgdGhyZXNob2xkLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB0aHJlc2hvbGQgVGhlIHRoZXNob2xkIGFib3ZlIHdoaWNoIHRoZSBsaW1pdGluZyBpcyBhcHBsaWVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgbGltaXRlciA9IG5ldyBUb25lLkxpbWl0ZXIoLTYpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaW1pdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndGhyZXNob2xkJ10sIFRvbmUuTGltaXRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29tcHJlc3NvclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Db21wcmVzc29yKHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCc6IG9wdGlvbnMudGhyZXNob2xkXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdGhyZXNob2xkIG9mIG9mIHRoZSBsaW1pdGVyXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbH1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gdGhpcy5fY29tcHJlc3Nvci50aHJlc2hvbGQ7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3RocmVzaG9sZCcpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTGltaXRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkxpbWl0ZXIuZGVmYXVsdHMgPSB7ICd0aHJlc2hvbGQnOiAtMTIgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTGltaXRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaW1pdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3Nvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3NvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3RocmVzaG9sZCcpO1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5MaW1pdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Mb3dwYXNzIGlzIGEgbG93cGFzcyBmZWVkYmFjayBjb21iIGZpbHRlci4gSXQgaXMgc2ltaWxhciB0b1xuXHRcdCAqICAgICAgICAgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIsIGJ1dCBpbmNsdWRlcyBhIGxvd3Bhc3MgZmlsdGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtkZWxheVRpbWVdIFRoZSBkZWxheSB0aW1lIG9mIHRoZSBjb21iIGZpbHRlclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gcmVzb25hbmNlIFRoZSByZXNvbmFuY2UgKGZlZWRiYWNrKSBvZiB0aGUgY29tYiBmaWx0ZXJcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3k9fSBkYW1wZW5pbmcgVGhlIGN1dG9mZiBvZiB0aGUgbG93cGFzcyBmaWx0ZXIgZGFtcGVucyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGFzIGl0IGlzIGZlZGJhY2suXG5cdFx0ICovXG5cdCAgICBUb25lLkxvd3Bhc3NDb21iRmlsdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0sIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheVRpbWUgb2YgdGhlIGNvbWIgZmlsdGVyLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZGVsYXkuZGVsYXlUaW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsb3dwYXNzIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlICB7QmlxdWFkRmlsdGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG93cGFzcyA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MuUS52YWx1ZSA9IC0zLjAxMDI5OTk1NjYzOTgxMjU7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcy50eXBlID0gJ2xvd3Bhc3MnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkYW1wZW5pbmcgY29udHJvbCBvZiB0aGUgZmVlZGJhY2tcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9sb3dwYXNzLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5kYW1wZW5pbmdcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmVlZGJhY2sgZ2FpblxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnJlc29uYW5jZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIG9mIHRoZSBkZWxheWVkIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSB0aGlzLl9mZWVkYmFjay5nYWluO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9kZWxheS5jaGFpbih0aGlzLl9sb3dwYXNzLCB0aGlzLl9mZWVkYmFjaywgdGhpcy5fZGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZycsXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxvd3Bhc3NDb21iRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjEsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDAuNSxcblx0ICAgICAgICAnZGFtcGVuaW5nJzogMzAwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTG93cGFzc0NvbWJGaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcy5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2suZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Mb3dwYXNzQ29tYkZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1lcmdlIGJyaW5ncyB0d28gc2lnbmFscyBpbnRvIHRoZSBsZWZ0IGFuZCByaWdodFxuXHRcdCAqICAgICAgICAgIGNoYW5uZWxzIG9mIGEgc2luZ2xlIHN0ZXJlbyBjaGFubmVsLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG1lcmdlID0gbmV3IFRvbmUuTWVyZ2UoKS50b01hc3RlcigpO1xuXHRcdCAqIC8vcm91dGluZyBhIHNpbmUgdG9uZSBpbiB0aGUgbGVmdCBjaGFubmVsXG5cdFx0ICogLy9hbmQgbm9pc2UgaW4gdGhlIHJpZ2h0IGNoYW5uZWxcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QobWVyZ2UubGVmdCk7XG5cdFx0ICogdmFyIG5vaXNlID0gbmV3IFRvbmUuTm9pc2UoKS5jb25uZWN0KG1lcmdlLnJpZ2h0KTtcblx0XHQgKiAvL3N0YXJ0aW5nIG91ciBvc2NpbGxhdG9yc1xuXHRcdCAqIG5vaXNlLnN0YXJ0KCk7XG5cdFx0ICogb3NjLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1lcmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsZWZ0IGlucHV0IGNoYW5uZWwuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubGVmdCA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJpZ2h0IGlucHV0IGNoYW5uZWwuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzFdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWVyZ2VyIG5vZGUgZm9yIHRoZSB0d28gY2hhbm5lbHNcblx0XHRcdCAqICBAdHlwZSB7Q2hhbm5lbE1lcmdlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlciA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNoYW5uZWxNZXJnZXIoMik7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMubGVmdC5jb25uZWN0KHRoaXMuX21lcmdlciwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5yaWdodC5jb25uZWN0KHRoaXMuX21lcmdlciwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmNoYW5uZWxDb3VudCA9IDE7XG5cdCAgICAgICAgdGhpcy5yaWdodC5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgIHRoaXMubGVmdC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICB0aGlzLnJpZ2h0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWVyZ2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVyZ2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVyZ2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmxlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yaWdodC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yaWdodCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2VyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1lcmdlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTWV0ZXIgZ2V0cyB0aGUgW1JNU10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUm9vdF9tZWFuX3NxdWFyZSlcblx0XHQgKiAgICAgICAgICBvZiBhbiBpbnB1dCBzaWduYWwgd2l0aCBzb21lIGF2ZXJhZ2luZyBhcHBsaWVkLiBJdCBjYW4gYWxzbyBnZXQgdGhlIHJhd1xuXHRcdCAqICAgICAgICAgIHZhbHVlIG9mIHRoZSBpbnB1dCBzaWduYWwuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHNtb290aGluZyBUaGUgYW1vdW50IG9mIHNtb290aGluZyBhcHBsaWVkIGJldHdlZW4gZnJhbWVzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtZXRlciA9IG5ldyBUb25lLk1ldGVyKCk7XG5cdFx0ICogdmFyIG1pYyA9IG5ldyBUb25lLlVzZXJNZWRpYSgpLm9wZW4oKTtcblx0XHQgKiAvL2Nvbm5lY3QgbWljIHRvIHRoZSBtZXRlclxuXHRcdCAqIG1pYy5jb25uZWN0KG1ldGVyKTtcblx0XHQgKiAvL3RoZSBjdXJyZW50IGxldmVsIG9mIHRoZSBtaWMgaW5wdXQgaW4gZGVjaWJlbHNcblx0XHQgKiB2YXIgbGV2ZWwgPSBtZXRlci5nZXRWYWx1ZSgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3Ntb290aGluZyddLCBUb25lLk1ldGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlIHdoaWNoIGNvbXB1dGVzIHRoZSBsZXZlbHMuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQW5hbHlzZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLl9hbmFseXNlciA9IG5ldyBUb25lLkFuYWx5c2VyKCd3YXZlZm9ybScsIDEwMjQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgY2FycnlvdmVyIGJldHdlZW4gdGhlIGN1cnJlbnQgYW5kIGxhc3QgZnJhbWUuXG5cdFx0XHQgKiAgT25seSBhcHBsaWVkIG1ldGVyIGZvciBcImxldmVsXCIgdHlwZS5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc21vb3RoaW5nID0gb3B0aW9ucy5zbW9vdGhpbmc7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NZXRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5kZWZhdWx0cyA9IHsgJ3Ntb290aGluZyc6IDAuOCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgY3VycmVudCBkZWNpYmVsIHZhbHVlIG9mIHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgQHJldHVybnMge0RlY2liZWxzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5wcm90b3R5cGUuZ2V0TGV2ZWwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIudHlwZSA9ICdmZnQnO1xuXHQgICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgICAgIHZhciBvZmZzZXQgPSAyODtcblx0ICAgICAgICAvLyBub3JtYWxpemVzIG1vc3Qgc2lnbmFsIGxldmVsc1xuXHQgICAgICAgIC8vIFRPRE86IGNvbXB1dGUgbG91ZG5lc3MgZnJvbSBGRlRcblx0ICAgICAgICByZXR1cm4gTWF0aC5tYXguYXBwbHkodGhpcywgdmFsdWVzKSArIG9mZnNldDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzaWduYWwgdmFsdWUgb2YgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIudHlwZSA9ICd3YXZlZm9ybSc7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgICAgICByZXR1cm4gdmFsdWVbMF07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQSB2YWx1ZSBmcm9tIDAgLT4gMSB3aGVyZSAwIHJlcHJlc2VudHMgbm8gdGltZSBhdmVyYWdpbmcgd2l0aCB0aGUgbGFzdCBhbmFseXNpcyBmcmFtZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5NZXRlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHNtb290aGluZ1xuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0ZXIucHJvdG90eXBlLCAnc21vb3RoaW5nJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc21vb3RoaW5nO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZyA9IHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWV0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1ldGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqXHRAY2xhc3MgIFRvbmUuU3BsaXQgc3BsaXRzIGFuIGluY29taW5nIHNpZ25hbCBpbnRvIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNwbGl0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0XHQgKiBzdGVyZW9TaWduYWwuY29ubmVjdChzcGxpdCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNwbGl0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDAsIDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtDaGFubmVsU3BsaXR0ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IHRoaXMuaW5wdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKDIpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNoYW5uZWxDb3VudCA9IDI7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTGVmdCBjaGFubmVsIG91dHB1dC5cblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLm91dHB1dFswXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBSaWdodCBjaGFubmVsIG91dHB1dC5cblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzFdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gdGhpcy5vdXRwdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNvbm5lY3QodGhpcy5sZWZ0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jb25uZWN0KHRoaXMucmlnaHQsIDEsIDApO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3BsaXQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3BsaXR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3BsaXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TcGxpdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1pZC9TaWRlIHByb2Nlc3Npbmcgc2VwYXJhdGVzIHRoZSB0aGUgJ21pZCcgc2lnbmFsXG5cdFx0ICogICAgICAgICAod2hpY2ggY29tZXMgb3V0IG9mIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBjaGFubmVsKVxuXHRcdCAqICAgICAgICAgYW5kIHRoZSAnc2lkZScgKHdoaWNoIG9ubHkgY29tZXMgb3V0IG9mIHRoZSB0aGUgc2lkZSBjaGFubmVscykuIDxicj48YnI+XG5cdFx0ICogICAgICAgICA8Y29kZT5cblx0XHQgKiAgICAgICAgIE1pZCA9IChMZWZ0K1JpZ2h0KS9zcXJ0KDIpOyAgIC8vIG9idGFpbiBtaWQtc2lnbmFsIGZyb20gbGVmdCBhbmQgcmlnaHQ8YnI+XG5cdFx0ICogICAgICAgICBTaWRlID0gKExlZnQtUmlnaHQpL3NxcnQoMik7ICAgLy8gb2J0YWluIHNpZGUtc2lnbmFsIGZyb20gbGVmdCBhbmQgcmlnaDxicj5cblx0XHQgKiAgICAgICAgIDwvY29kZT5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlU3BsaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMCwgMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3BsaXQgdGhlIGluY29taW5nIHNpZ25hbCBpbnRvIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgc2VuZC4gQ29ubmVjdCB0byBtaWQgcHJvY2Vzc2luZy4gQWxpYXMgZm9yXG5cdFx0XHQgKiAgPGNvZGU+b3V0cHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZEFkZCA9IG5ldyBUb25lLkFkZCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIF9taWRBZGQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gdGhpcy5vdXRwdXRbMF0gPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIG91dHB1dC4gQ29ubmVjdCB0byBzaWRlIHByb2Nlc3NpbmcuIEFsc28gT3V0cHV0IDFcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgX21pZEFkZCBieSBzcXJ0KDEvMilcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlID0gdGhpcy5vdXRwdXRbMV0gPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fbWlkQWRkLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX21pZEFkZCwgMSwgMSk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuY29ubmVjdCh0aGlzLl9zaWRlU3VidHJhY3QsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fc2lkZVN1YnRyYWN0LCAxLCAxKTtcblx0ICAgICAgICB0aGlzLl9taWRBZGQuY29ubmVjdCh0aGlzLm1pZCk7XG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0LmNvbm5lY3QodGhpcy5zaWRlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVTcGxpdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1pZFNpZGVTcGxpdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlU3BsaXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5zaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRBZGQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZEFkZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaWRlU3VidHJhY3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZVNwbGl0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTWlkL1NpZGUgcHJvY2Vzc2luZyBzZXBhcmF0ZXMgdGhlIHRoZSAnbWlkJyBzaWduYWxcblx0XHQgKiAgICAgICAgICh3aGljaCBjb21lcyBvdXQgb2YgYm90aCB0aGUgbGVmdCBhbmQgdGhlIHJpZ2h0IGNoYW5uZWwpXG5cdFx0ICogICAgICAgICBhbmQgdGhlICdzaWRlJyAod2hpY2ggb25seSBjb21lcyBvdXQgb2YgdGhlIHRoZSBzaWRlIGNoYW5uZWxzKS5cblx0XHQgKiAgICAgICAgIE1pZFNpZGVNZXJnZSBtZXJnZXMgdGhlIG1pZCBhbmQgc2lkZSBzaWduYWwgYWZ0ZXIgdGhleSd2ZSBiZWVuIHNlcGVyYXRlZFxuXHRcdCAqICAgICAgICAgYnkgVG9uZS5NaWRTaWRlU3BsaXQuPGJyPjxicj5cblx0XHQgKiAgICAgICAgIDxjb2RlPlxuXHRcdCAqICAgICAgICAgTGVmdCA9IChNaWQrU2lkZSkvc3FydCgyKTsgICAvLyBvYnRhaW4gbGVmdCBzaWduYWwgZnJvbSBtaWQgYW5kIHNpZGU8YnI+XG5cdFx0ICogICAgICAgICBSaWdodCA9IChNaWQtU2lkZSkvc3FydCgyKTsgICAvLyBvYnRhaW4gcmlnaHQgc2lnbmFsIGZyb20gbWlkIGFuZCBzaWRlPGJyPlxuXHRcdCAqICAgICAgICAgPC9jb2RlPlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVNZXJnZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHNpZ25hbCBpbnB1dC4gQWxpYXMgZm9yXG5cdFx0XHQgKiAgPGNvZGU+aW5wdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcmVjb21iaW5lIHRoZSBtaWQvc2lkZSBpbnRvIExlZnRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBuZXcgVG9uZS5BZGQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIE11bHRpcGx5IHRoZSBsZWZ0IGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQgPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIHNpZ25hbCBpbnB1dC4gQWxpYXMgZm9yXG5cdFx0XHQgKiAgPGNvZGU+aW5wdXRbMV08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGUgPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJlY29tYmluZSB0aGUgbWlkL3NpZGUgaW50byBSaWdodFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yaWdodCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgcmlnaHQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQgPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE1lcmdlIHRoZSBsZWZ0L3JpZ2h0IHNpZ25hbCBiYWNrIGludG8gYSBzdGVyZW8gc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICB0aGlzLm1pZC5jb25uZWN0KHRoaXMuX2xlZnQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuc2lkZS5jb25uZWN0KHRoaXMuX2xlZnQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMubWlkLmNvbm5lY3QodGhpcy5fcmlnaHQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuc2lkZS5jb25uZWN0KHRoaXMuX3JpZ2h0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0LmNvbm5lY3QodGhpcy5fdGltZXNUd29MZWZ0KTtcblx0ICAgICAgICB0aGlzLl9yaWdodC5jb25uZWN0KHRoaXMuX3RpbWVzVHdvUmlnaHQpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0LmNvbm5lY3QodGhpcy5fbWVyZ2UsIDAsIDEpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkU2lkZU1lcmdlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZU1lcmdlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVNZXJnZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnNpZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29MZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yaWdodC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZU1lcmdlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5NaWRTaWRlQ29tcHJlc3NvciBhcHBsaWVzIHR3byBkaWZmZXJlbnQgY29tcHJlc3NvcnMgdG8gdGhlIG1pZFxuXHRcdCAqICAgICAgICAgYW5kIHNpZGUgc2lnbmFsIGNvbXBvbmVudHMuIFNlZSBUb25lLk1pZFNpZGVTcGxpdC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgbWlkIGFuZCBzaWRlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3JzLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1pZFNpZGVDb21wcmVzc29yLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWlkL3NpZGUgc3BsaXRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZVNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTWlkU2lkZVNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1pZC9zaWRlIHJlY29tYmluYXRpb25cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZU1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1pZFNpZGVNZXJnZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIG1pZCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLm1pZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgc2lkZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5zaWRlKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQubWlkLmNoYWluKHRoaXMubWlkLCB0aGlzLl9taWRTaWRlTWVyZ2UubWlkKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQuc2lkZS5jaGFpbih0aGlzLnNpZGUsIHRoaXMuX21pZFNpZGVNZXJnZS5zaWRlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnc2lkZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVDb21wcmVzc29yLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21pZCc6IHtcblx0ICAgICAgICAgICAgJ3JhdGlvJzogMyxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCc6IC0yNCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjAzLFxuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMixcblx0ICAgICAgICAgICAgJ2tuZWUnOiAxNlxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3NpZGUnOiB7XG5cdCAgICAgICAgICAgICdyYXRpbyc6IDYsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnOiAtMzAsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC4yNSxcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDMsXG5cdCAgICAgICAgICAgICdrbmVlJzogMTBcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlQ29tcHJlc3Nvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlQ29tcHJlc3Nvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdzaWRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnNpZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZUNvbXByZXNzb3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk1vbm8gY29lcmNlcyB0aGUgaW5jb21pbmcgbW9ubyBvciBzdGVyZW8gc2lnbmFsIGludG8gYSBtb25vIHNpZ25hbFxuXHRcdCAqICAgICAgICAgd2hlcmUgYm90aCBsZWZ0IGFuZCByaWdodCBjaGFubmVscyBoYXZlIHRoZSBzYW1lIHZhbHVlLiBUaGlzIGNhbiBiZSB1c2VmdWxcblx0XHQgKiAgICAgICAgIGZvciBbc3RlcmVvIGltYWdpbmddKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N0ZXJlb19pbWFnaW5nKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIG1lcmdlIHRoZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fbWVyZ2UsIDAsIDEpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9ubywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9uby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9ubztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgY29tcHJlc3NvciB3aXRoIHNlcGVyYXRlIGNvbnRyb2xzIG92ZXIgbG93L21pZC9oaWdoIGR5bmFtaWNzXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIGxvdy9taWQvaGlnaCBjb21wcmVzc29yIHNldHRpbmdzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgbXVsdGliYW5kID0gbmV3IFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvcih7XG5cdFx0ICogIFx0XCJsb3dGcmVxdWVuY3lcIiA6IDIwMCxcblx0XHQgKiAgXHRcImhpZ2hGcmVxdWVuY3lcIiA6IDEzMDBcblx0XHQgKiAgXHRcImxvd1wiIDoge1xuXHRcdCAqICBcdFx0XCJ0aHJlc2hvbGRcIiA6IC0xMlxuXHRcdCAqICBcdH1cblx0XHQgKiAgfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kQ29tcHJlc3NvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKGFyZ3VtZW50cywgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzcGxpdCB0aGUgaW5jb21pbmcgc2lnbmFsIGludG8gaGlnaC9taWQvbG93XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGliYW5kU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpYmFuZFNwbGl0KHtcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IG9wdGlvbnMubG93RnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IG9wdGlvbnMuaGlnaEZyZXF1ZW5jeVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gdGhpcy5fc3BsaXR0ZXIubG93RnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSB0aGlzLl9zcGxpdHRlci5oaWdoRnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvdXRwdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBsb3cgZnJlcXVlbmNpZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93ID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLmxvdyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgbWlkIGZyZXF1ZW5jaWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5taWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIGhpZ2ggZnJlcXVlbmNpZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5oaWdoKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGNvbXByZXNzb3Jcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5sb3cuY2hhaW4odGhpcy5sb3csIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5taWQuY2hhaW4odGhpcy5taWQsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5oaWdoLmNoYWluKHRoaXMuaGlnaCwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk11bHRpYmFuZENvbXByZXNzb3IsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdsb3cnOiBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMsXG5cdCAgICAgICAgJ21pZCc6IFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyxcblx0ICAgICAgICAnaGlnaCc6IFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyxcblx0ICAgICAgICAnbG93RnJlcXVlbmN5JzogMjUwLFxuXHQgICAgICAgICdoaWdoRnJlcXVlbmN5JzogMjAwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NdWx0aWJhbmRDb21wcmVzc29yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZENvbXByZXNzb3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubG93LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oaWdoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3cgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2ggPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk11bHRpYmFuZENvbXByZXNzb3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCAmJiAhd2luZG93LlN0ZXJlb1Bhbm5lck5vZGUpIHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEBjbGFzcyBTaGltbWVkIFN0ZXJlb1Bhbm5lck5vZGVcblx0XHRcdCAqIEBwYXJhbSAge0F1ZGlvQ29udGV4dH0gY29udGV4dFxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHZhciBTdGVyZW9QYW5uZXJOb2RlID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSBhdWRpbyBjb250ZXh0XG5cdFx0XHRcdCAqIEB0eXBlIHtBdWRpb0NvbnRleHR9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIGxlZnQvcmlnaHQgcGFubmluZy4gWy0xLCAxXVxuXHRcdFx0XHQgKiBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5wYW4gPSBuZXcgVG9uZS5TaWduYWwoMCwgVG9uZS5UeXBlLkF1ZGlvUmFuZ2UpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogRXF1YWwgcG93ZXIgc2NhbGluZyBvZiB0aGUgcmlnaHQgZ2FpblxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHJpZ2h0V2F2ZVNoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZXF1YWxQb3dlclNjYWxlKCh2YWwgKyAxKSAvIDIpO1xuXHQgICAgICAgICAgICB9LCA0MDk2KTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIEVxdWFsIHBvd2VyIHNjYWxpbmcgb2YgdGhlIGxlZnQgZ2FpblxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIGxlZnRXYXZlU2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5lcXVhbFBvd2VyU2NhbGUoMSAtICh2YWwgKyAxKSAvIDIpO1xuXHQgICAgICAgICAgICB9LCA0MDk2KTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSBsZWZ0IGdhaW4gdmFsdWVcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBsZWZ0R2FpbiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSByaWdodCBnYWluIHZhbHVlXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgcmlnaHRHYWluID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogU3BsaXQgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5TcGxpdH1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBzcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogS2VlcHMgdGhlIHdhdmVzaGFwZXJzIGZyb20gb3B0aW1pemluZyAwc1xuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5aZXJvfVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHplcm8gPSBuZXcgVG9uZS5aZXJvKCk7XG5cdCAgICAgICAgICAgIHplcm8uZmFuKHJpZ2h0V2F2ZVNoYXBlciwgbGVmdFdhdmVTaGFwZXIpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogTWVyZ2UgdGhlIG91dGdvaW5nIHNpZ25hbFxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBtZXJnZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgICAgICBzcGxpdC5sZWZ0LmNoYWluKGxlZnRHYWluLCBtZXJnZS5sZWZ0KTtcblx0ICAgICAgICAgICAgc3BsaXQucmlnaHQuY2hhaW4ocmlnaHRHYWluLCBtZXJnZS5yaWdodCk7XG5cdCAgICAgICAgICAgIHRoaXMucGFuLmNoYWluKGxlZnRXYXZlU2hhcGVyLCBsZWZ0R2Fpbi5nYWluKTtcblx0ICAgICAgICAgICAgdGhpcy5wYW4uY2hhaW4ocmlnaHRXYXZlU2hhcGVyLCByaWdodEdhaW4uZ2Fpbik7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBTdGVyZW9QYW5uZXJOb2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dC5kaXNjb25uZWN0LmFwcGx5KHRoaXMub3V0cHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgU3RlcmVvUGFubmVyTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuY29ubmVjdC5hcHBseSh0aGlzLm91dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIC8vYWRkIGl0IHRvIHRoZSBBdWRpb0NvbnRleHRcblx0ICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVN0ZXJlb1Bhbm5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGVyZW9QYW5uZXJOb2RlKHRoaXMpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVTdGVyZW9QYW5uZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgU3RlcmVvUGFubmVyTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGFubmVyIGlzIGFuIGVxdWFsIHBvd2VyIExlZnQvUmlnaHQgUGFubmVyIGFuZCBkb2VzIG5vdFxuXHRcdCAqICAgICAgICAgIHN1cHBvcnQgM0QuIFBhbm5lciB1c2VzIHRoZSBTdGVyZW9QYW5uZXJOb2RlIHdoZW4gYXZhaWxhYmxlLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtpbml0aWFsUGFuPTBdIFRoZSBpbml0YWlsIHBhbm5lciB2YWx1ZSAoY2VudGVyKS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy9wYW4gdGhlIGlucHV0IHNpZ25hbCBoYXJkIHJpZ2h0LlxuXHRcdCAqICB2YXIgcGFubmVyID0gbmV3IFRvbmUuUGFubmVyKDEpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIgPSBmdW5jdGlvbiAoaW5pdGlhbFBhbikge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQqICB0aGUgcGFubmVyIG5vZGVcblx0XHRcdCogIEB0eXBlIHtTdGVyZW9QYW5uZXJOb2RlfVxuXHRcdFx0KiAgQHByaXZhdGVcblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZVN0ZXJlb1Bhbm5lcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiAgVGhlIHBhbiBjb250cm9sLiAtMSA9IGhhcmQgbGVmdCwgMSA9IGhhcmQgcmlnaHQuXG5cdFx0XHQqICBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdCogIEBzaWduYWxcblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5wYW4gPSB0aGlzLl9wYW5uZXIucGFuO1xuXHQgICAgICAgIC8vaW5pdGlhbCB2YWx1ZVxuXHQgICAgICAgIHRoaXMucGFuLnZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKGluaXRpYWxQYW4sIDApO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdwYW4nKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhbm5lciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3BhbicpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnBhbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFubmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc3BhdGlhbGl6ZWQgcGFubmVyIG5vZGUgd2hpY2ggc3VwcG9ydHMgZXF1YWxwb3dlciBvciBIUlRGIHBhbm5pbmcuXG5cdFx0ICogICAgICAgICAgVHJpZXMgdG8gbm9ybWFsaXplIHRoZSBBUEkgYWNyb3NzIHZhcmlvdXMgYnJvd3NlcnMuIFNlZSBUb25lLkxpc3RlbmVyXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHBvc2l0aW9uWCBUaGUgaW5pdGlhbCB4IHBvc2l0aW9uLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gcG9zaXRpb25ZIFRoZSBpbml0aWFsIHkgcG9zaXRpb24uXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBwb3NpdGlvblogVGhlIGluaXRpYWwgeiBwb3NpdGlvbi5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncG9zaXRpb25YJyxcblx0ICAgICAgICAgICAgJ3Bvc2l0aW9uWScsXG5cdCAgICAgICAgICAgICdwb3NpdGlvblonXG5cdCAgICAgICAgXSwgVG9uZS5QYW5uZXIzRCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGFubmVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7UGFubmVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5lcigpO1xuXHQgICAgICAgIC8vc2V0IHNvbWUgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5fcGFubmVyLnBhbm5pbmdNb2RlbCA9IG9wdGlvbnMucGFubmluZ01vZGVsO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5tYXhEaXN0YW5jZSA9IG9wdGlvbnMubWF4RGlzdGFuY2U7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc3RhbmNlTW9kZWwgPSBvcHRpb25zLmRpc3RhbmNlTW9kZWw7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbmVPdXRlckdhaW4gPSBvcHRpb25zLmNvbmVPdXRlckdhaW47XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbmVPdXRlckFuZ2xlID0gb3B0aW9ucy5jb25lT3V0ZXJBbmdsZTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuY29uZUlubmVyQW5nbGUgPSBvcHRpb25zLmNvbmVJbm5lckFuZ2xlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5yZWZEaXN0YW5jZSA9IG9wdGlvbnMucmVmRGlzdGFuY2U7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLnJvbGxvZmZGYWN0b3IgPSBvcHRpb25zLnJvbGxvZmZGYWN0b3I7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgb3JpZW50YXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IFtcblx0ICAgICAgICAgICAgb3B0aW9ucy5vcmllbnRhdGlvblgsXG5cdCAgICAgICAgICAgIG9wdGlvbnMub3JpZW50YXRpb25ZLFxuXHQgICAgICAgICAgICBvcHRpb25zLm9yaWVudGF0aW9uWlxuXHQgICAgICAgIF07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IFtcblx0ICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvblgsXG5cdCAgICAgICAgICAgIG9wdGlvbnMucG9zaXRpb25ZLFxuXHQgICAgICAgICAgICBvcHRpb25zLnBvc2l0aW9uWlxuXHQgICAgICAgIF07XG5cdCAgICAgICAgLy8gc2V0IHRoZSBkZWZhdWx0IHBvc2l0aW9uL29yaWVudGF0aW9uXG5cdCAgICAgICAgdGhpcy5vcmllbnRhdGlvblggPSBvcHRpb25zLm9yaWVudGF0aW9uWDtcblx0ICAgICAgICB0aGlzLm9yaWVudGF0aW9uWSA9IG9wdGlvbnMub3JpZW50YXRpb25ZO1xuXHQgICAgICAgIHRoaXMub3JpZW50YXRpb25aID0gb3B0aW9ucy5vcmllbnRhdGlvblo7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvblggPSBvcHRpb25zLnBvc2l0aW9uWDtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uWSA9IG9wdGlvbnMucG9zaXRpb25ZO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb25aID0gb3B0aW9ucy5wb3NpdGlvblo7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYW5uZXIzRCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncG9zaXRpb25YJzogMCxcblx0ICAgICAgICAncG9zaXRpb25ZJzogMCxcblx0ICAgICAgICAncG9zaXRpb25aJzogMCxcblx0ICAgICAgICAnb3JpZW50YXRpb25YJzogMCxcblx0ICAgICAgICAnb3JpZW50YXRpb25ZJzogMCxcblx0ICAgICAgICAnb3JpZW50YXRpb25aJzogMCxcblx0ICAgICAgICAncGFubmluZ01vZGVsJzogJ2VxdWFscG93ZXInLFxuXHQgICAgICAgICdtYXhEaXN0YW5jZSc6IDEwMDAwLFxuXHQgICAgICAgICdkaXN0YW5jZU1vZGVsJzogJ2ludmVyc2UnLFxuXHQgICAgICAgICdjb25lT3V0ZXJHYWluJzogMCxcblx0ICAgICAgICAnY29uZU91dGVyQW5nbGUnOiAzNjAsXG5cdCAgICAgICAgJ2NvbmVJbm5lckFuZ2xlJzogMzYwLFxuXHQgICAgICAgICdyZWZEaXN0YW5jZSc6IDEsXG5cdCAgICAgICAgJ3JvbGxvZmZGYWN0b3InOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJhbXAgdGltZSB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBzZXRUYXJnZXRBdFRpbWVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELnByb3RvdHlwZS5fcmFtcFRpbWVDb25zdGFudCA9IDAuMDE7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIHNvdXJjZSBpbiAzZCBzcGFjZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB5XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHpcblx0XHQgKiAgQHJldHVybiB7VG9uZS5QYW5uZXIzRH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuc2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeikge1xuXHQgICAgICAgIGlmICh0aGlzLl9wYW5uZXIucG9zaXRpb25YKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIucG9zaXRpb25YLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIucG9zaXRpb25ZLnNldFRhcmdldEF0VGltZSh5LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIucG9zaXRpb25aLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5zZXRQb3NpdGlvbih4LCB5LCB6KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgc291cmNlIGluIDNkIHNwYWNlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBhbm5lcjNEfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELnByb3RvdHlwZS5zZXRPcmllbnRhdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblouc2V0VGFyZ2V0QXRUaW1lKHosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnNldE9yaWVudGF0aW9uKHgsIHksIHopO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25YXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdwb3NpdGlvblgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvbllcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ3Bvc2l0aW9uWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAncG9zaXRpb25aJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblsyXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzJdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IG9yaWVudGF0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgb3JpZW50YXRpb25YXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdvcmllbnRhdGlvblgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgb3JpZW50YXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBvcmllbnRhdGlvbllcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ29yaWVudGF0aW9uWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBvcmllbnRhdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG9yaWVudGF0aW9uWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAnb3JpZW50YXRpb25aJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblsyXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzJdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFByb3h5IGEgcHJvcGVydHkgb24gdGhlIHBhbm5lciB0byBhbiBleHBvc2VkIHB1YmxpYyBwcm9wZXJ5XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHByb3Bcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcCkge1xuXHQgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgcHJvcCwge1xuXHQgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Bhbm5lcltwcm9wXSA9IHZhbDtcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFubmVyW3Byb3BdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwYW5uaW5nIG1vZGVsLiBFaXRoZXIgXCJlcXVhbHBvd2VyXCIgb3IgXCJIUlRGXCIuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwYW5uaW5nTW9kZWxcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ3Bhbm5pbmdNb2RlbCcpO1xuXHQgICAgLyoqXG5cdFx0ICogIEEgcmVmZXJlbmNlIGRpc3RhbmNlIGZvciByZWR1Y2luZyB2b2x1bWUgYXMgc291cmNlIG1vdmUgZnVydGhlciBmcm9tIHRoZSBsaXN0ZW5lclxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcmVmRGlzdGFuY2Vcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ3JlZkRpc3RhbmNlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVzY3JpYmVzIGhvdyBxdWlja2x5IHRoZSB2b2x1bWUgaXMgcmVkdWNlZCBhcyBzb3VyY2UgbW92ZXMgYXdheSBmcm9tIGxpc3RlbmVyLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcm9sbG9mZkZhY3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgncm9sbG9mZkZhY3RvcicpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkaXN0YW5jZSBtb2RlbCB1c2VkIGJ5LCAgXCJsaW5lYXJcIiwgXCJpbnZlcnNlXCIsIG9yIFwiZXhwb25lbnRpYWxcIi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIGRpc3RhbmNlTW9kZWxcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2Rpc3RhbmNlTW9kZWwnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYW5nbGUsIGluIGRlZ3JlZXMsIGluc2lkZSBvZiB3aGljaCB0aGVyZSB3aWxsIGJlIG5vIHZvbHVtZSByZWR1Y3Rpb25cblx0XHQgKiAgQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBjb25lSW5uZXJBbmdsZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnY29uZUlubmVyQW5nbGUnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYW5nbGUsIGluIGRlZ3JlZXMsIG91dHNpZGUgb2Ygd2hpY2ggdGhlIHZvbHVtZSB3aWxsIGJlIHJlZHVjZWRcblx0XHQgKiAgdG8gYSBjb25zdGFudCB2YWx1ZSBvZiBjb25lT3V0ZXJHYWluXG5cdFx0ICogIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgY29uZU91dGVyQW5nbGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2NvbmVPdXRlckFuZ2xlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGdhaW4gb3V0c2lkZSBvZiB0aGUgY29uZU91dGVyQW5nbGVcblx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBjb25lT3V0ZXJHYWluXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdjb25lT3V0ZXJHYWluJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG1heGltdW0gZGlzdGFuY2UgYmV0d2VlbiBzb3VyY2UgYW5kIGxpc3RlbmVyLFxuXHRcdCAqICBhZnRlciB3aGljaCB0aGUgdm9sdW1lIHdpbGwgbm90IGJlIHJlZHVjZWQgYW55IGZ1cnRoZXIuXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG1heERpc3RhbmNlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdtYXhEaXN0YW5jZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYW5uZXIzRH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhbm5lcjNEO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYW5Wb2wgaXMgYSBUb25lLlBhbm5lciBhbmQgVG9uZS5Wb2x1bWUgaW4gb25lLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9SYW5nZX0gcGFuIHRoZSBpbml0aWFsIHBhblxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdm9sdW1lIFRoZSBvdXRwdXQgdm9sdW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcGFuIHRoZSBpbmNvbWluZyBzaWduYWwgbGVmdCBhbmQgZHJvcCB0aGUgdm9sdW1lXG5cdFx0ICogdmFyIHBhblZvbCA9IG5ldyBUb25lLlBhblZvbCgtMC4yNSwgLTEyKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFuVm9sID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3BhbicsXG5cdCAgICAgICAgICAgICd2b2x1bWUnXG5cdCAgICAgICAgXSwgVG9uZS5QYW5Wb2wpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhbm5pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBhbm5lcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLlBhbm5lcihvcHRpb25zLnBhbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIEwvUiBwYW5uaW5nIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wYW4gPSB0aGlzLl9wYW5uZXIucGFuO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2b2x1bWUgY29udHJvbCBpbiBkZWNpYmVscy5cblx0XHRcdCAqICBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuY29ubmVjdCh0aGlzLl92b2x1bWUpO1xuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdwYW4nLFxuXHQgICAgICAgICAgICAndm9sdW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFuVm9sLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5Wb2wuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Bhbic6IDAsXG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUvdW5tdXRlIHRoZSB2b2x1bWVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYW5Wb2wjXG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFuVm9sLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhblZvbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5Wb2wucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdwYW4nLFxuXHQgICAgICAgICAgICAndm9sdW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnBhbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYW5Wb2w7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Tb2xvIGxldHMgeW91IGlzb2xhdGUgYSBzcGVjaWZpYyBhdWRpbyBzdHJlYW0uIFdoZW5cblx0XHQgKiAgICAgICAgIGFuIGluc3RhbmNlIGlzIHNldCB0byBgc29sbz10cnVlYCwgaXQgd2lsbCBtdXRlIGFsbCBvdGhlciBpbnN0YW5jZXMuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc29sb0EgPSBuZXcgVG9uZS5Tb2xvKClcblx0XHQgKiB2YXIgc29sb0IgPSBuZXcgVG9uZS5Tb2xvKClcblx0XHQgKiBzb2xvQS5zb2xvID0gdHJ1ZVxuXHRcdCAqIC8vbm8gYXVkaW8gd2lsbCBwYXNzIHRocm91Z2ggc29sb0Jcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3NvbG8nXSwgVG9uZS5Tb2xvKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBpbnB1dCBhbmQgb3V0cHV0IG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGJvdW5kIF9zb2xvZWQgbWV0aG9kXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc29sb0JpbmQgPSB0aGlzLl9zb2xvZWQuYmluZCh0aGlzKTtcblx0ICAgICAgICAvL2xpc3RlbiBmb3Igc29sbyBldmVudHMgY2xhc3Mtd2lkZS5cblx0ICAgICAgICB0aGlzLmNvbnRleHQub24oJ3NvbG8nLCB0aGlzLl9zb2xvQmluZCk7XG5cdCAgICAgICAgLy9zZXQgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5zb2xvID0gb3B0aW9ucy5zb2xvO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU29sbywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLmRlZmF1bHRzID0geyBzb2xvOiBmYWxzZSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIElzb2xhdGVzIHRoaXMgaW5zdGFuY2UgYW5kIG11dGVzIGFsbCBvdGhlciBpbnN0YW5jZXMgb2YgVG9uZS5Tb2xvLlxuXHRcdCAqICBPbmx5IG9uZSBpbnN0YW5jZSBjYW4gYmUgc29sb2VkIGF0IGEgdGltZS4gQSBzb2xvZWRcblx0XHQgKiAgaW5zdGFuY2Ugd2lsbCByZXBvcnQgYHNvbG89ZmFsc2VgIHdoZW4gYW5vdGhlciBpbnN0YW5jZSBpcyBzb2xvZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNvbG8jXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBzb2xvXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Tb2xvLnByb3RvdHlwZSwgJ3NvbG8nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1NvbG9lZCgpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc29sbykge1xuXHQgICAgICAgICAgICBpZiAoc29sbykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYWRkU29sbygpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU29sbygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5lbWl0KCdzb2xvJywgdGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIGN1cnJlbnQgaW5zdGFuY2UgaXMgbXV0ZWQsIGkuZS4gYW5vdGhlciBpbnN0YW5jZSBpcyBzb2xvZWRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuU29sbyNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBuYW1lIG11dGVkXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU29sby5wcm90b3R5cGUsICdtdXRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQuZ2Fpbi52YWx1ZSA9PT0gMDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEFkZCB0aGlzIHRvIHRoZSBzb2xvZWQgYXJyYXlcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5fYWRkU29sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoIVRvbmUuaXNBcnJheSh0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvKSkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvID0gW107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghdGhpcy5faXNTb2xvZWQoKSkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLnB1c2godGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlbW92ZSB0aGlzIGZyb20gdGhlIHNvbG9lZCBhcnJheVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9yZW1vdmVTb2xvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9pc1NvbG9lZCgpKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8uaW5kZXhPZih0aGlzKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBJcyB0aGlzIG9uIHRoZSBzb2xvZWQgYXJyYXlcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5faXNTb2xvZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5sZW5ndGggIT09IDAgJiYgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5pbmRleE9mKHRoaXMpICE9PSAtMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBubyBvbmUgaXMgc29sb2VkXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX25vU29sb3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuICFUb25lLmlzQXJyYXkodGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbykgfHwgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5sZW5ndGggPT09IDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNvbG8gdGhlIGN1cnJlbnQgaW5zdGFuY2UgYW5kIHVuc29sbyBhbGwgb3RoZXIgaW5zdGFuY2VzLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlNvbG99ICBpbnN0YW5jZSAgVGhlIGluc3RhbmNlIHdoaWNoIGlzIGJlaW5nIHNvbG9lZC91bnNvbG9lZC5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX3NvbG9lZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5faXNTb2xvZWQoKSkge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmdhaW4udmFsdWUgPSAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbm9Tb2xvcygpKSB7XG5cdCAgICAgICAgICAgIC8vbm8gb25lIGlzIHNvbG9lZFxuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmdhaW4udmFsdWUgPSAxO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuZ2Fpbi52YWx1ZSA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Tb2xvfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5vZmYoJ3NvbG8nLCB0aGlzLl9zb2xvQmluZCk7XG5cdCAgICAgICAgdGhpcy5fcmVtb3ZlU29sbygpO1xuXHQgICAgICAgIHRoaXMuX3NvbG9CaW5kID0gbnVsbDtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNvbG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEdldCB0aGUgY3VycmVudCB3YXZlZm9ybSBkYXRhIG9mIHRoZSBjb25uZWN0ZWQgYXVkaW8gc291cmNlLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgRkZULiBWYWx1ZSBtdXN0IGJlIGEgcG93ZXIgb2Zcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzaXplJ10sIFRvbmUuV2F2ZWZvcm0pO1xuXHQgICAgICAgIG9wdGlvbnMudHlwZSA9IFRvbmUuQW5hbHlzZXIuVHlwZS5XYXZlZm9ybTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW5hbHlzZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkFuYWx5c2VyKG9wdGlvbnMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuV2F2ZWZvcm0sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlZm9ybS5kZWZhdWx0cyA9IHsgJ3NpemUnOiAxMDI0IH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0cyB0aGUgd2F2ZWZvcm0gb2YgdGhlIGF1ZGlvIHNvdXJjZS4gUmV0dXJucyB0aGUgd2F2ZWZvcm0gZGF0YVxuXHRcdCAqICBvZiBsZW5ndGggW3NpemVdKCNzaXplKSBhcyBhIEZsb2F0MzJBcnJheSB3aXRoIHZhbHVlcyBiZXR3ZWVuIC0xIGFuZCAxLlxuXHRcdCAqICBAcmV0dXJucyB7VHlwZWRBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0ucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2l6ZSBvZiBhbmFseXNpcy4gVGhpcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuV2F2ZWZvcm0jXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIHNpemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLldhdmVmb3JtLnByb3RvdHlwZSwgJ3NpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5zaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zaXplID0gc2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuV2F2ZWZvcm19ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5XYXZlZm9ybTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ3RybEludGVycG9sYXRlIHdpbGwgaW50ZXJwb2xhdGUgYmV0d2VlbiBnaXZlbiB2YWx1ZXMgYmFzZWRcblx0XHQgKiAgICAgICAgIG9uIHRoZSBcImluZGV4XCIgcHJvcGVydHkuIFBhc3NpbmcgaW4gYW4gYXJyYXkgb3Igb2JqZWN0IGxpdGVyYWxcblx0XHQgKiAgICAgICAgIHdpbGwgaW50ZXJwb2xhdGUgZWFjaCBvZiB0aGUgcGFyYW1ldGVycy4gTm90ZSAoaS5lLiBcIkMzXCIpXG5cdFx0ICogICAgICAgICBhbmQgVGltZSAoaS5lLiBcIjRuICsgMlwiKSBjYW4gYmUgaW50ZXJwb2xhdGVkLiBBbGwgb3RoZXIgdmFsdWVzIGFyZVxuXHRcdCAqICAgICAgICAgYXNzdW1lZCB0byBiZSBudW1iZXJzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgaW50ZXJwID0gbmV3IFRvbmUuQ3RybEludGVycG9sYXRlKFswLCAyLCA5LCA0XSk7XG5cdFx0ICogaW50ZXJwLmluZGV4ID0gMC43NTtcblx0XHQgKiBpbnRlcnAudmFsdWU7IC8vcmV0dXJucyAxLjVcblx0XHQgKlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBpbnRlcnAgPSBuZXcgVG9uZS5DdHJsSW50ZXJwb2xhdGUoW1xuXHRcdCAqIFx0WzIsIDQsIDVdLFxuXHRcdCAqIFx0WzksIDMsIDJdLFxuXHRcdCAqIF0pO1xuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgYXJyYXkgb2YgdmFsdWVzIHRvIGludGVycG9sYXRlIG92ZXJcblx0XHQgKiBAcGFyYW0ge1Bvc2l0aXZlfSBpbmRleCBUaGUgaW5pdGlhbCBpbnRlcnBvbGF0aW9uIGluZGV4LlxuXHRcdCAqIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndmFsdWVzJyxcblx0ICAgICAgICAgICAgJ2luZGV4J1xuXHQgICAgICAgIF0sIFRvbmUuQ3RybEludGVycG9sYXRlKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlcyB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gb3B0aW9ucy52YWx1ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGludGVycG9sYXRlZCBpbmRleCBiZXR3ZWVuIHZhbHVlcy4gRm9yIGV4YW1wbGU6IGEgdmFsdWUgb2YgMS41XG5cdFx0XHQgKiAgd291bGQgaW50ZXJwb2xhdGUgZXF1YWxseSBiZXR3ZWVuIHRoZSB2YWx1ZSBhdCBpbmRleCAxXG5cdFx0XHQgKiAgYW5kIHRoZSB2YWx1ZSBhdCBpbmRleCAyLiBcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogaW50ZXJwLmluZGV4ID0gMDsgXG5cdFx0XHQgKiBpbnRlcnAudmFsdWU7IC8vcmV0dXJucyB0aGUgdmFsdWUgYXQgMFxuXHRcdFx0ICogaW50ZXJwLmluZGV4ID0gMC41O1xuXHRcdFx0ICogaW50ZXJwLnZhbHVlOyAvL3JldHVybnMgdGhlIHZhbHVlIGJldHdlZW4gaW5kaWNlcyAwIGFuZCAxLiBcblx0XHRcdCAqICBAdHlwZSAge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsSW50ZXJwb2xhdGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnaW5kZXgnOiAwLFxuXHQgICAgICAgICd2YWx1ZXMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCBpbnRlcnBvbGF0ZWQgdmFsdWUgYmFzZWQgb24gdGhlIGluZGV4XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsSW50ZXJwb2xhdGUjXG5cdFx0ICogIEB0eXBlIHsqfVxuXHRcdCAqICBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgdmFyIGxvd2VyUG9zaXRpb24gPSBNYXRoLmZsb29yKGluZGV4KTtcblx0ICAgICAgICAgICAgdmFyIGxvd2VyID0gdGhpcy52YWx1ZXNbbG93ZXJQb3NpdGlvbl07XG5cdCAgICAgICAgICAgIHZhciB1cHBlciA9IHRoaXMudmFsdWVzW01hdGguY2VpbChpbmRleCldO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJwb2xhdGUoaW5kZXggLSBsb3dlclBvc2l0aW9uLCBsb3dlciwgdXBwZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGludGVycG9sYXRpb24gcm91dGluZVxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIGluZGV4ICBUaGUgaW5kZXggYmV0d2VlbiB0aGUgbG93ZXIgYW5kIHVwcGVyXG5cdFx0ICogIEBwYXJhbSAgeyp9ICBsb3dlciBcblx0XHQgKiAgQHBhcmFtICB7Kn0gIHVwcGVyIFxuXHRcdCAqICBAcmV0dXJuICB7Kn0gIFRoZSBpbnRlcnBvbGF0ZWQgdmFsdWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZS5faW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAoaW5kZXgsIGxvd2VyLCB1cHBlcikge1xuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkobG93ZXIpKSB7XG5cdCAgICAgICAgICAgIHZhciByZXRBcnJheSA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvd2VyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICByZXRBcnJheVtpXSA9IHRoaXMuX2ludGVycG9sYXRlKGluZGV4LCBsb3dlcltpXSwgdXBwZXJbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXRBcnJheTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNPYmplY3QobG93ZXIpKSB7XG5cdCAgICAgICAgICAgIHZhciByZXRPYmogPSB7fTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBsb3dlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0T2JqW2F0dHJdID0gdGhpcy5faW50ZXJwb2xhdGUoaW5kZXgsIGxvd2VyW2F0dHJdLCB1cHBlclthdHRyXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHJldE9iajtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBsb3dlciA9IHRoaXMuX3RvTnVtYmVyKGxvd2VyKTtcblx0ICAgICAgICAgICAgdXBwZXIgPSB0aGlzLl90b051bWJlcih1cHBlcik7XG5cdCAgICAgICAgICAgIHJldHVybiAoMSAtIGluZGV4KSAqIGxvd2VyICsgaW5kZXggKiB1cHBlcjtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZnJvbSB0aGUgZ2l2ZW4gdHlwZSBpbnRvIGEgbnVtYmVyXG5cdFx0ICogIEBwYXJhbSAge051bWJlcnxTdHJpbmd9ICB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUucHJvdG90eXBlLl90b051bWJlciA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcih2YWwpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9vdGhlcndpc2UgYXNzdW1lIHRoYXQgaXQncyBUaW1lLi4uXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcyh2YWwpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ3RybEludGVycG9sYXRlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxJbnRlcnBvbGF0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ3RybE1hcmtvdiByZXByZXNlbnRzIGEgTWFya292IENoYWluIHdoZXJlIGVhY2ggY2FsbFxuXHRcdCAqICAgICAgICAgdG8gVG9uZS5DdHJsTWFya292Lm5leHQgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlLiBJZiB0aGUgbmV4dFxuXHRcdCAqICAgICAgICAgc3RhdGUgY2hvaWNlIGlzIGFuIGFycmF5LCB0aGUgbmV4dCBzdGF0ZSBpcyBjaG9zZW4gcmFuZG9tbHkgd2l0aFxuXHRcdCAqICAgICAgICAgZXZlbiBwcm9iYWJpbGl0eSBmb3IgYWxsIG9mIHRoZSBjaG9pY2VzLiBGb3IgYSB3ZWlnaHRlZCBwcm9iYWJpbGl0eVxuXHRcdCAqICAgICAgICAgb2YgdGhlIG5leHQgY2hvaWNlcywgcGFzcyBpbiBhbiBvYmplY3Qgd2l0aCBcInN0YXRlXCIgYW5kIFwicHJvYmFiaWxpdHlcIiBhdHRyaWJ1dGVzLiBcblx0XHQgKiAgICAgICAgIFRoZSBwcm9iYWJpbGl0aWVzIHdpbGwgYmUgbm9ybWFsaXplZCBhbmQgdGhlbiBjaG9zZW4uIElmIG5vIG5leHQgb3B0aW9uc1xuXHRcdCAqICAgICAgICAgYXJlIGdpdmVuIGZvciB0aGUgY3VycmVudCBzdGF0ZSwgdGhlIHN0YXRlIHdpbGwgc3RheSB0aGVyZS4gXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjaGFpbiA9IG5ldyBUb25lLkN0cmxNYXJrb3Yoe1xuXHRcdCAqIFx0XCJiZWdpbm5pbmdcIiA6IFtcImVuZFwiLCBcIm1pZGRsZVwiXSxcblx0XHQgKiBcdFwibWlkZGxlXCIgOiBcImVuZFwiXG5cdFx0ICogfSk7XG5cdFx0ICogY2hhaW4udmFsdWUgPSBcImJlZ2lubmluZ1wiO1xuXHRcdCAqIGNoYWluLm5leHQoKTsgLy9yZXR1cm5zIFwiZW5kXCIgb3IgXCJtaWRkbGVcIiB3aXRoIDUwJSBwcm9iYWJpbGl0eVxuXHRcdCAqXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNoYWluID0gbmV3IFRvbmUuQ3RybE1hcmtvdih7XG5cdFx0ICogXHRcImJlZ2lubmluZ1wiIDogW3tcInZhbHVlXCIgOiBcImVuZFwiLCBcInByb2JhYmlsaXR5XCIgOiAwLjh9LCBcblx0XHQgKiBcdFx0XHRcdFx0e1widmFsdWVcIiA6IFwibWlkZGxlXCIsIFwicHJvYmFiaWxpdHlcIiA6IDAuMn1dLFxuXHRcdCAqIFx0XCJtaWRkbGVcIiA6IFwiZW5kXCJcblx0XHQgKiB9KTtcblx0XHQgKiBjaGFpbi52YWx1ZSA9IFwiYmVnaW5uaW5nXCI7XG5cdFx0ICogY2hhaW4ubmV4dCgpOyAvL3JldHVybnMgXCJlbmRcIiB3aXRoIDgwJSBwcm9iYWJpbGl0eSBvciBcIm1pZGRsZVwiIHdpdGggMjAlLlxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gdmFsdWVzIEFuIG9iamVjdCB3aXRoIHRoZSBzdGF0ZSBuYW1lcyBhcyB0aGUga2V5c1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgbmV4dCBzdGF0ZShzKSBhcyB0aGUgdmFsdWVzLiBcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdiA9IGZ1bmN0aW9uICh2YWx1ZXMsIGluaXRpYWwpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIE1hcmtvdiB2YWx1ZXMgd2l0aCBzdGF0ZXMgYXMgdGhlIGtleXNcblx0XHRcdCAqICBhbmQgbmV4dCBzdGF0ZShzKSBhcyB0aGUgdmFsdWVzLiBcblx0XHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBUb25lLmRlZmF1bHRBcmcodmFsdWVzLCB7fSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIE1hcmtvdiB2YWx1ZXMuIFRoZSBuZXh0XG5cdFx0XHQgKiAgc3RhdGUgd2lsbCBiZSBldmFsdWF0ZWQgYW5kIHJldHVybmVkIHdoZW4gVG9uZS5DdHJsTWFya292Lm5leHRcblx0XHRcdCAqICBpcyBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKGluaXRpYWwsIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKVswXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsTWFya292KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBuZXh0IHN0YXRlIG9mIHRoZSBNYXJrb3YgdmFsdWVzLiBcblx0XHQgKiAgQHJldHVybiAge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy52YWx1ZXMuaGFzT3duUHJvcGVydHkodGhpcy52YWx1ZSkpIHtcblx0ICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnZhbHVlc1t0aGlzLnZhbHVlXTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheShuZXh0KSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGRpc3RyaWJ1dGlvbiA9IHRoaXMuX2dldFByb2JEaXN0cmlidXRpb24obmV4dCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgcmFuZCA9IE1hdGgucmFuZG9tKCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXN0cmlidXRpb24ubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZGlzdCA9IGRpc3RyaWJ1dGlvbltpXTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocmFuZCA+IHRvdGFsICYmIHJhbmQgPCB0b3RhbCArIGRpc3QpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNob3NlbiA9IG5leHRbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGNob3NlbikpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjaG9zZW4udmFsdWU7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gY2hvc2VuO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IGRpc3Q7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV4dDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2hvb3NlIHJhbmRvbWx5IGZyb20gYW4gYXJyYXkgd2VpZ2h0ZWQgb3B0aW9ucyBpbiB0aGUgZm9ybSBcblx0XHQgKiAge1wic3RhdGVcIiA6IHN0cmluZywgXCJwcm9iYWJpbGl0eVwiIDogbnVtYmVyfSBvciBhbiBhcnJheSBvZiB2YWx1ZXNcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICBvcHRpb25zIFxuXHRcdCAqICBAcmV0dXJuICB7QXJyYXl9ICBUaGUgcmFuZG9tbHkgc2VsZWN0ZWQgY2hvaWNlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YucHJvdG90eXBlLl9nZXRQcm9iRGlzdHJpYnV0aW9uID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICB2YXIgZGlzdHJpYnV0aW9uID0gW107XG5cdCAgICAgICAgdmFyIHRvdGFsID0gMDtcblx0ICAgICAgICB2YXIgbmVlZHNOb3JtYWxpemluZyA9IGZhbHNlO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgb3B0aW9uID0gb3B0aW9uc1tpXTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3Qob3B0aW9uKSkge1xuXHQgICAgICAgICAgICAgICAgbmVlZHNOb3JtYWxpemluZyA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25baV0gPSBvcHRpb24ucHJvYmFiaWxpdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25baV0gPSAxIC8gb3B0aW9ucy5sZW5ndGg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdG90YWwgKz0gZGlzdHJpYnV0aW9uW2ldO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAobmVlZHNOb3JtYWxpemluZykge1xuXHQgICAgICAgICAgICAvL25vcm1hbGl6ZSB0aGUgdmFsdWVzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGlzdHJpYnV0aW9uLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25bal0gPSBkaXN0cmlidXRpb25bal0gLyB0b3RhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gZGlzdHJpYnV0aW9uO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5DdHJsTWFya292fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsTWFya292LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsTWFya292O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgR2VuZXJhdGUgcGF0dGVybnMgZnJvbSBhbiBhcnJheSBvZiB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBIYXMgYSBudW1iZXIgb2YgYXJwZWdnaWF0aW9uIGFuZCByYW5kb21pemVkXG5cdFx0ICogICAgICAgICBzZWxlY3Rpb24gcGF0dGVybnMuIFxuXHRcdCAqICAgICAgICAgICA8dWw+XG5cdFx0ICogIFx0ICAgICAgICA8bGk+XCJ1cFwiIC0gY3ljbGVzIHVwd2FyZDwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImRvd25cIiAtIGN5Y2xlcyBkb3dud2FyZDwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInVwRG93blwiIC0gdXAgdGhlbiBhbmQgZG93bjwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImRvd25VcFwiIC0gY3ljbGVzIGRvd24gdGhlbiBhbmQgdXA8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJhbHRlcm5hdGVVcFwiIC0ganVtcCB1cCB0d28gYW5kIGRvd24gb25lPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwiYWx0ZXJuYXRlRG93blwiIC0ganVtcCBkb3duIHR3byBhbmQgdXAgb25lPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwicmFuZG9tXCIgLSByYW5kb21seSBzZWxlY3QgYW4gaW5kZXg8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJyYW5kb21XYWxrXCIgLSByYW5kb21seSBtb3ZlcyBvbmUgaW5kZXggYXdheSBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwicmFuZG9tT25jZVwiIC0gcmFuZG9tbHkgc2VsZWN0IGFuIGluZGV4IHdpdGhvdXQgcmVwZWF0aW5nIHVudGlsIGFsbCB2YWx1ZXMgaGF2ZSBiZWVuIGNob3Nlbi48L2xpPlxuXHRcdCAqICAgICBcdFx0PC91bD5cblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICB2YWx1ZXMgICBBbiBhcnJheSBvZiBvcHRpb25zIHRvIGNob29zZSBmcm9tLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkN0cmxQYXR0ZXJuLlR5cGU9fSAgdHlwZSAgVGhlIG5hbWUgb2YgdGhlIHBhdHRlcm4uXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd2YWx1ZXMnLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLkN0cmxQYXR0ZXJuKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIHZhbHVlcyB0byBhcnBlZ2dpYXRlIG92ZXJcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG9wdGlvbnMudmFsdWVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSB2YWx1ZXMgYXJyYXlcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0eXBlIHBsYWNlaG9sZGVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3RybFBhdHRlcm4uVHlwZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2h1ZmZsZWQgdmFsdWVzIGZvciB0aGUgUmFuZG9tT25jZSB0eXBlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRpcmVjdGlvbiBvZiB0aGUgbW92ZW1lbnRcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkN0cmxQYXR0ZXJuKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgQ29udHJvbCBQYXR0ZXJuc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5UeXBlID0ge1xuXHQgICAgICAgIFVwOiAndXAnLFxuXHQgICAgICAgIERvd246ICdkb3duJyxcblx0ICAgICAgICBVcERvd246ICd1cERvd24nLFxuXHQgICAgICAgIERvd25VcDogJ2Rvd25VcCcsXG5cdCAgICAgICAgQWx0ZXJuYXRlVXA6ICdhbHRlcm5hdGVVcCcsXG5cdCAgICAgICAgQWx0ZXJuYXRlRG93bjogJ2FsdGVybmF0ZURvd24nLFxuXHQgICAgICAgIFJhbmRvbTogJ3JhbmRvbScsXG5cdCAgICAgICAgUmFuZG9tV2FsazogJ3JhbmRvbVdhbGsnLFxuXHQgICAgICAgIFJhbmRvbU9uY2U6ICdyYW5kb21PbmNlJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuIFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXAsXG5cdCAgICAgICAgJ3ZhbHVlcyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB2YWx1ZSBhdCB0aGUgY3VycmVudCBpbmRleCBvZiB0aGUgcGF0dGVybi5cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkN0cmxQYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvL3NvbWUgc2FmZWd1YXJkc1xuXHQgICAgICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMF07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5pbmRleCA9IE1hdGgubWluKHRoaXMuaW5kZXgsIHRoaXMudmFsdWVzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZXNbdGhpcy5pbmRleF07XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoICE9PSB0aGlzLl9zaHVmZmxlZC5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaHVmZmxlVmFsdWVzKCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB2YWwgPSB0aGlzLnZhbHVlc1t0aGlzLl9zaHVmZmxlZFt0aGlzLmluZGV4XV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGF0dGVybiB1c2VkIHRvIHNlbGVjdCB0aGUgbmV4dFxuXHRcdCAqICBpdGVtIGZyb20gdGhlIHZhbHVlcyBhcnJheVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge1RvbmUuQ3RybFBhdHRlcm4uVHlwZX1cblx0XHQgKiAgQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IG51bGw7XG5cdCAgICAgICAgICAgIC8vdGhlIGZpcnN0IGluZGV4XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXAgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwRG93biB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duVXAgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZURvd24pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnZhbHVlcy5sZW5ndGggLSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vdGhlIGRpcmVjdGlvblxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwRG93biB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93blVwIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVEb3duKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL3JhbmRvbXNcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaHVmZmxlVmFsdWVzKCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5SYW5kb20pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnZhbHVlcy5sZW5ndGgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBuZXh0IHZhbHVlIGdpdmVuIHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0ICogIGFuZCBwYXR0ZXJuLlxuXHRcdCAqICBAcmV0dXJuIHsqfSBUaGUgbmV4dCB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0ICAgICAgICAvL2Nob29zZSB0aGUgbmV4dCBpbmRleFxuXHQgICAgICAgIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bikge1xuXHQgICAgICAgICAgICB0aGlzLmluZGV4LS07XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcERvd24gfHwgdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd25VcCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgtLTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnZhbHVlcy5sZW5ndGgpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbVdhbGspIHtcblx0ICAgICAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPCAwLjUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgtLTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLm1heCh0aGlzLmluZGV4LCAwKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLm1pbih0aGlzLmluZGV4LCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbU9uY2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICAgICAgLy9yZXNodWZmbGUgdGhlIHZhbHVlcyBmb3IgbmV4dCB0aW1lXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaHVmZmxlVmFsdWVzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVVcCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCAtPSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID49IHRoaXMudmFsdWVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVEb3duKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kaXJlY3Rpb24gPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4IC09IDI7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTaHVmZmxlcyB0aGUgdmFsdWVzIGFuZCBwbGFjZXMgdGhlIHJlc3VsdHMgaW50byB0aGUgX3NodWZmbGVkXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZS5fc2h1ZmZsZVZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY29weSA9IFtdO1xuXHQgICAgICAgIHRoaXMuX3NodWZmbGVkID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBjb3B5W2ldID0gaTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgd2hpbGUgKGNvcHkubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICB2YXIgcmFuZFZhbCA9IGNvcHkuc3BsaWNlKE1hdGguZmxvb3IoY29weS5sZW5ndGggKiBNYXRoLnJhbmRvbSgpKSwgMSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NodWZmbGVkLnB1c2gocmFuZFZhbFswXSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DdHJsUGF0dGVybn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxQYXR0ZXJuO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIENob29zZSBhIHJhbmRvbSB2YWx1ZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHJhbmRvbVdhbGsgPSBuZXcgVG9uZS5DdHJsUmFuZG9tKHtcblx0XHQgKiBcdFwibWluXCIgOiAwLFxuXHRcdCAqIFx0XCJtYXhcIiA6IDEwLFxuXHRcdCAqIFx0XCJpbnRlZ2VyXCIgOiB0cnVlXG5cdFx0ICogfSk7XG5cdFx0ICogcmFuZG9tV2Fsay5ldmFsKCk7XG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8VGltZT19IG1pbiBUaGUgbWluaW11bSByZXR1cm4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfFRpbWU9fSBtYXggVGhlIG1heGltdW0gcmV0dXJuIHZhbHVlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUmFuZG9tID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ21pbicsXG5cdCAgICAgICAgICAgICdtYXgnXG5cdCAgICAgICAgXSwgVG9uZS5DdHJsUmFuZG9tKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pbmltdW0gcmV0dXJuIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ8VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWluID0gb3B0aW9ucy5taW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1heGltdW0gcmV0dXJuIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ8VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWF4ID0gb3B0aW9ucy5tYXg7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSWYgdGhlIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgYW4gaW50ZWdlclxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW50ZWdlciA9IG9wdGlvbnMuaW50ZWdlcjtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkN0cmxSYW5kb20pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxSYW5kb20uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgJ2ludGVnZXInOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gYSByYW5kb20gdmFsdWUgYmV0d2VlbiBtaW4gYW5kIG1heC4gXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsUmFuZG9tI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxSYW5kb20ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLnRvU2Vjb25kcyh0aGlzLm1pbik7XG5cdCAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLnRvU2Vjb25kcyh0aGlzLm1heCk7XG5cdCAgICAgICAgICAgIHZhciByYW5kID0gTWF0aC5yYW5kb20oKTtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IHJhbmQgKiBtaW4gKyAoMSAtIHJhbmQpICogbWF4O1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbnRlZ2VyKSB7XG5cdCAgICAgICAgICAgICAgICB2YWwgPSBNYXRoLmZsb29yKHZhbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxSYW5kb207XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBkYXRhIHN0cnVjdHVyZSBmb3IgaG9sZGluZyBtdWx0aXBsZSBidWZmZXJzLlxuXHRcdCAqICBcblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fEFycmF5fSAgICB1cmxzICAgICAgQW4gb2JqZWN0IGxpdGVyYWwgb3IgYXJyYXlcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdXJscyB0byBsb2FkLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVmZmVycyBhcmUgbG9hZGVkLiBcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9sb2FkIGEgd2hvbGUgYmFuayBvZiBwaWFubyBzYW1wbGVzXG5cdFx0ICogdmFyIHBpYW5vU2FtcGxlcyA9IG5ldyBUb25lLkJ1ZmZlcnMoe1xuXHRcdCAqIFx0XCJDNFwiIDogXCJwYXRoL3RvL0M0Lm1wM1wiXG5cdFx0ICogXHRcIkMjNFwiIDogXCJwYXRoL3RvL0MjNC5tcDNcIlxuXHRcdCAqIFx0XCJENFwiIDogXCJwYXRoL3RvL0Q0Lm1wM1wiXG5cdFx0ICogXHRcIkQjNFwiIDogXCJwYXRoL3RvL0QjNC5tcDNcIlxuXHRcdCAqIFx0Li4uXG5cdFx0ICogfSwgZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vcGxheSBvbmUgb2YgdGhlIHNhbXBsZXMgd2hlbiB0aGV5IGFsbCBsb2FkXG5cdFx0ICogXHRwbGF5ZXIuYnVmZmVyID0gcGlhbm9TYW1wbGVzLmdldChcIkM0XCIpO1xuXHRcdCAqIFx0cGxheWVyLnN0YXJ0KCk7XG5cdFx0ICogfSk7XG5cdFx0ICogXHRAZXhhbXBsZVxuXHRcdCAqIC8vVG8gcGFzcyBpbiBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXJcblx0XHQgKiB2YXIgYnVmZmVycyA9IG5ldyBUb25lLkJ1ZmZlcnModXJscywge1xuXHRcdCAqIFx0XCJvbmxvYWRcIiA6IGNhbGxiYWNrLFxuXHRcdCAqIFx0XCJiYXNlVXJsXCIgOiBcIi4uL3BhdGgvdG8vYXVkaW8vXCJcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzID0gZnVuY3Rpb24gKHVybHMpIHtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgdXJscyBmcm9tIHRoZSBvcHRpb25zXG5cdCAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIGFyZ3Muc2hpZnQoKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJncywgW1xuXHQgICAgICAgICAgICAnb25sb2FkJyxcblx0ICAgICAgICAgICAgJ2Jhc2VVcmwnXG5cdCAgICAgICAgXSwgVG9uZS5CdWZmZXJzKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxsIG9mIHRoZSBidWZmZXJzXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSB7fTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHBhdGggd2hpY2ggaXMgcHJlZml4ZWQgYmVmb3JlIGV2ZXJ5IHVybC5cblx0XHRcdCAqICBAdHlwZSAge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcblx0ICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQgPSAwO1xuXHQgICAgICAgIC8vYWRkIGVhY2ggb25lXG5cdCAgICAgICAgZm9yICh2YXIga2V5IGluIHVybHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50Kys7XG5cdCAgICAgICAgICAgIHRoaXMuYWRkKGtleSwgdXJsc1trZXldLCB0aGlzLl9idWZmZXJMb2FkZWQuYmluZCh0aGlzLCBvcHRpb25zLm9ubG9hZCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJ1ZmZlcnMpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2Jhc2VVcmwnOiAnJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcnVlIGlmIHRoZSBidWZmZXJzIG9iamVjdCBoYXMgYSBidWZmZXIgYnkgdGhhdCBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgbmFtZSAgVGhlIGtleSBvciBpbmRleCBvZiB0aGUgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuXG5cdFx0ICogIEByZXR1cm4gIHtCb29sZWFufVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXJzLmhhc093blByb3BlcnR5KG5hbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgYSBidWZmZXIgYnkgbmFtZS4gSWYgYW4gYXJyYXkgd2FzIGxvYWRlZCwgXG5cdFx0ICogIHRoZW4gdXNlIHRoZSBhcnJheSBpbmRleC5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIG5hbWUgIFRoZSBrZXkgb3IgaW5kZXggb2YgdGhlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuaGFzKG5hbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXJzW25hbWVdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJzOiBubyBidWZmZXIgbmFtZWQgJyArIG5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQSBidWZmZXIgd2FzIGxvYWRlZC4gZGVjcmVtZW50IHRoZSBjb3VudGVyLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5fYnVmZmVyTG9hZGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50LS07XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmdDb3VudCA9PT0gMCAmJiBjYWxsYmFjaykge1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJzI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVycy5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0xvYWRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGJ1ZmZOYW1lIGluIHRoaXMuX2J1ZmZlcnMpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBidWZmID0gdGhpcy5nZXQoYnVmZk5hbWUpO1xuXHQgICAgICAgICAgICAgICAgaXNMb2FkZWQgPSBpc0xvYWRlZCAmJiBidWZmLmxvYWRlZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gaXNMb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgYnVmZmVyIGJ5IG5hbWUgYW5kIHVybCB0byB0aGUgQnVmZmVyc1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIG5hbWUgICAgICBBIHVuaXF1ZSBuYW1lIHRvIGdpdmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8VG9uZS5CdWZmZXJ8QXVkaW9idWZmZXJ9ICB1cmwgIEVpdGhlciB0aGUgdXJsIG9mIHRoZSBidWZlciwgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhZGRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICBjYWxsYmFjayA9IFRvbmUuZGVmYXVsdEFyZyhjYWxsYmFjaywgVG9uZS5ub09wKTtcblx0ICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXSA9IHVybDtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh1cmwgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzW25hbWVdID0gbmV3IFRvbmUuQnVmZmVyKHVybCk7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyh1cmwpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0gPSBuZXcgVG9uZS5CdWZmZXIodGhpcy5iYXNlVXJsICsgdXJsLCBjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyc30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuX2J1ZmZlcnMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkJ1ZmZlcnM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIGJ1c2VzIGFyZSBhbm90aGVyIHdheSBvZiByb3V0aW5nIGF1ZGlvXG5cdFx0ICpcblx0XHQgKiAgYXVnbWVudHMgVG9uZS5wcm90b3R5cGUgdG8gaW5jbHVkZSBzZW5kIGFuZCByZWNpZXZlXG5cdFx0ICovXG5cdCAgICAvKipcblx0XHQgKiAgQWxsIG9mIHRoZSByb3V0ZXNcblx0XHQgKlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgQnVzZXMgPSB7fTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZW5kIHRoaXMgc2lnbmFsIHRvIHRoZSBjaGFubmVsIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gY2hhbm5lbE5hbWUgQSBuYW1lZCBjaGFubmVsIHRvIHNlbmQgdGhlIHNpZ25hbCB0by5cblx0XHQgKiAgQHBhcmFtICB7RGVjaWJlbHN9IGFtb3VudCBUaGUgYW1vdW50IG9mIHRoZSBzb3VyY2UgdG8gc2VuZCB0byB0aGUgYnVzLlxuXHRcdCAqICBAcmV0dXJuIHtHYWluTm9kZX0gVGhlIGdhaW4gbm9kZSB3aGljaCBjb25uZWN0cyB0aGlzIG5vZGUgdG8gdGhlIGRlc2lyZWQgY2hhbm5lbC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIHRvIGFkanVzdCB0aGUgbGV2ZWxzIG9mIHRoZSBzZW5kLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zZW5kKFwicmV2ZXJiXCIsIC0xMik7XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKGNoYW5uZWxOYW1lLCBhbW91bnQpIHtcblx0ICAgICAgICBpZiAoIUJ1c2VzLmhhc093blByb3BlcnR5KGNoYW5uZWxOYW1lKSkge1xuXHQgICAgICAgICAgICBCdXNlc1tjaGFubmVsTmFtZV0gPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBhbW91bnQgPSBUb25lLmRlZmF1bHRBcmcoYW1vdW50LCAwKTtcblx0ICAgICAgICB2YXIgc2VuZEtub2IgPSBuZXcgVG9uZS5HYWluKGFtb3VudCwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICB0aGlzLmNvbm5lY3Qoc2VuZEtub2IpO1xuXHQgICAgICAgIHNlbmRLbm9iLmNvbm5lY3QoQnVzZXNbY2hhbm5lbE5hbWVdKTtcblx0ICAgICAgICByZXR1cm4gc2VuZEtub2I7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlY2lldmUgdGhlIGlucHV0IGZyb20gdGhlIGRlc2lyZWQgY2hhbm5lbE5hbWUgdG8gdGhlIGlucHV0XG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSBjaGFubmVsTmFtZSBBIG5hbWVkIGNoYW5uZWwgdG8gc2VuZCB0aGUgc2lnbmFsIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSBjaGFubmVsTnVtYmVyIFRoZSBjaGFubmVsIHRvIGNvbm5lY3QgdG9cblx0XHQgKiAgQHJldHVybnMge1RvbmV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiByZXZlcmJFZmZlY3QucmVjZWl2ZShcInJldmVyYlwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnJlY2VpdmUgPSBmdW5jdGlvbiAoY2hhbm5lbE5hbWUsIGlucHV0TnVtKSB7XG5cdCAgICAgICAgaWYgKCFCdXNlcy5oYXNPd25Qcm9wZXJ0eShjaGFubmVsTmFtZSkpIHtcblx0ICAgICAgICAgICAgQnVzZXNbY2hhbm5lbE5hbWVdID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgQnVzZXNbY2hhbm5lbE5hbWVdLmNvbm5lY3QodGhpcywgMCwgaW5wdXROdW0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vcmVtb3ZlIGFsbCB0aGUgc2VuZC9yZWNlaXZlcyB3aGVuIGEgbmV3IGF1ZGlvIGNvbnRleHQgaXMgcGFzc2VkIGluXG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0LkJ1c2VzKSB7XG5cdCAgICAgICAgICAgIEJ1c2VzID0gY29udGV4dC5CdXNlcztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBCdXNlcyA9IHt9O1xuXHQgICAgICAgICAgICBjb250ZXh0LkJ1c2VzID0gQnVzZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRHJhdyBpcyB1c2VmdWwgZm9yIHN5bmNocm9uaXppbmcgdmlzdWFscyBhbmQgYXVkaW8gZXZlbnRzLlxuXHRcdCAqICAgICAgICAgQ2FsbGJhY2tzIGZyb20gVG9uZS5UcmFuc3BvcnQgb3IgYW55IG9mIHRoZSBUb25lLkV2ZW50IGNsYXNzZXNcblx0XHQgKiAgICAgICAgIGFsd2F5cyBoYXBwZW4gX2JlZm9yZV8gdGhlIHNjaGVkdWxlZCB0aW1lIGFuZCBhcmUgbm90IHN5bmNocm9uaXplZFxuXHRcdCAqICAgICAgICAgdG8gdGhlIGFuaW1hdGlvbiBmcmFtZSBzbyB0aGV5IGFyZSBub3QgZ29vZCBmb3IgdHJpZ2dlcmluZyB0aWdodGx5XG5cdFx0ICogICAgICAgICBzeW5jaHJvbml6ZWQgdmlzdWFscyBhbmQgc291bmQuIFRvbmUuRHJhdyBtYWtlcyBpdCBlYXN5IHRvIHNjaGVkdWxlXG5cdFx0ICogICAgICAgICBjYWxsYmFja3MgdXNpbmcgdGhlIEF1ZGlvQ29udGV4dCB0aW1lIGFuZCB1c2VzIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cblx0XHQgKiAgICAgICAgIFxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly91c2UgdGhlIHRpbWUgYXJndW1lbnQgdG8gc2NoZWR1bGUgYSBjYWxsYmFjayB3aXRoIFRvbmUuRHJhd1xuXHRcdCAqIFx0VG9uZS5EcmF3LnNjaGVkdWxlKGZ1bmN0aW9uKCl7XG5cdFx0ICogXHRcdC8vZG8gZHJhd2luZyBvciBET00gbWFuaXB1bGF0aW9uIGhlcmVcblx0XHQgKiBcdH0sIHRpbWUpXG5cdFx0ICogfSwgXCIrMC41XCIpXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgZXZlbnRzLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFRvbmUuVGltZWxpbmUoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZHVyYXRpb24gYWZ0ZXIgd2hpY2ggZXZlbnRzIGFyZSBub3QgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAZGVmYXVsdCAwLjI1XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmV4cGlyYXRpb24gPSAwLjI1O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSBiZWZvcmUgdGhlIHNjaGVkdWxlZCB0aW1lIFxuXHRcdFx0ICogIHRoYXQgdGhlIGNhbGxiYWNrIGNhbiBiZSBpbnZva2VkLiBEZWZhdWx0IGlzXG5cdFx0XHQgKiAgaGFsZiB0aGUgdGltZSBvZiBhbiBhbmltYXRpb24gZnJhbWUgKDAuMDA4IHNlY29uZHMpLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBkZWZhdWx0IDAuMDA4XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmFudGljaXBhdGlvbiA9IDAuMDA4O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkcmF3IGxvb3Bcblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ib3VuZERyYXdMb29wID0gdGhpcy5fZHJhd0xvb3AuYmluZCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkRyYXcpO1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGEgZnVuY3Rpb24gYXQgdGhlIGdpdmVuIHRpbWUgdG8gYmUgaW52b2tlZFxuXHRcdCAqICBvbiB0aGUgbmVhcmVzdCBhbmltYXRpb24gZnJhbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIENhbGxiYWNrIGlzIGludm9rZWQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICAgIHRpbWUgICAgICBUaGUgdGltZSByZWxhdGl2ZSB0byB0aGUgQXVkaW9Db250ZXh0IHRpbWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGludm9rZSB0aGUgY2FsbGJhY2suXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkRyYXd9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdy5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuXHQgICAgICAgICAgICB0aW1lOiB0aGlzLnRvU2Vjb25kcyh0aW1lKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGRyYXcgbG9vcCBvbiB0aGUgZmlyc3QgZXZlbnRcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYm91bmREcmF3TG9vcCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgZXZlbnRzIHNjaGVkdWxlZCBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIGFmdGVyICBUaW1lIGFmdGVyIHdoaWNoIHNjaGVkdWxlZCBldmVudHMgd2lsbCBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzY2hlZHVsaW5nIHRpbWVsaW5lLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5EcmF3fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EcmF3LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKHRoaXMudG9TZWNvbmRzKGFmdGVyKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkcmF3IGxvb3Bcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdy5wcm90b3R5cGUuX2RyYXdMb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub3cgPSBUb25lLm5vdygpO1xuXHQgICAgICAgIHdoaWxlICh0aGlzLl9ldmVudHMubGVuZ3RoICYmIHRoaXMuX2V2ZW50cy5wZWVrKCkudGltZSAtIHRoaXMuYW50aWNpcGF0aW9uIDw9IG5vdykge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHMuc2hpZnQoKTtcblx0ICAgICAgICAgICAgaWYgKG5vdyAtIGV2ZW50LnRpbWUgPD0gdGhpcy5leHBpcmF0aW9uKSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5jYWxsYmFjaygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYm91bmREcmF3TG9vcCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8vbWFrZSBhIHNpbmdsZXRvblxuXHQgICAgVG9uZS5EcmF3ID0gbmV3IFRvbmUuRHJhdygpO1xuXHQgICAgcmV0dXJuIFRvbmUuRHJhdztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCb3RoIFRvbmUuUGFubmVyM0QgYW5kIFRvbmUuTGlzdGVuZXIgaGF2ZSBhIHBvc2l0aW9uIGluIDNEIHNwYWNlXG5cdFx0ICogICAgICAgICAgdXNpbmcgYSByaWdodC1oYW5kZWQgY2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtLlxuXHRcdCAqICAgICAgICAgIFRoZSB1bml0cyB1c2VkIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBhcmUgbm90IGRlZmluZWQ7XG5cdFx0ICogICAgICAgICAgdGhlc2UgY29vcmRpbmF0ZXMgYXJlIGluZGVwZW5kZW50L2ludmFyaWFudCBvZiBhbnkgcGFydGljdWxhclxuXHRcdCAqICAgICAgICAgIHVuaXRzIHN1Y2ggYXMgbWV0ZXJzIG9yIGZlZXQuIFRvbmUuUGFubmVyM0Qgb2JqZWN0cyBoYXZlIGFuIGZvcndhcmRcblx0XHQgKiAgICAgICAgICB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBkaXJlY3Rpb24gdGhlIHNvdW5kIGlzIHByb2plY3RpbmcuIEFkZGl0aW9uYWxseSxcblx0XHQgKiAgICAgICAgICB0aGV5IGhhdmUgYSBzb3VuZCBjb25lIHJlcHJlc2VudGluZyBob3cgZGlyZWN0aW9uYWwgdGhlIHNvdW5kIGlzLlxuXHRcdCAqICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgc291bmQgY291bGQgYmUgb21uaWRpcmVjdGlvbmFsLCBpbiB3aGljaCBjYXNlIGl0IHdvdWxkXG5cdFx0ICogICAgICAgICAgYmUgaGVhcmQgYW55d2hlcmUgcmVnYXJkbGVzcyBvZiBpdHMgZm9yd2FyZCwgb3IgaXQgY2FuIGJlIG1vcmUgZGlyZWN0aW9uYWxcblx0XHQgKiAgICAgICAgICBhbmQgaGVhcmQgb25seSBpZiBpdCBpcyBmYWNpbmcgdGhlIGxpc3RlbmVyLiBUb25lLkxpc3RlbmVyIG9iamVjdHNcblx0XHQgKiAgICAgICAgICAocmVwcmVzZW50aW5nIGEgcGVyc29uJ3MgZWFycykgaGF2ZSBhbiBmb3J3YXJkIGFuZCB1cCB2ZWN0b3Jcblx0XHQgKiAgICAgICAgICByZXByZXNlbnRpbmcgaW4gd2hpY2ggZGlyZWN0aW9uIHRoZSBwZXJzb24gaXMgZmFjaW5nLiBCZWNhdXNlIGJvdGggdGhlXG5cdFx0ICogICAgICAgICAgc291cmNlIHN0cmVhbSBhbmQgdGhlIGxpc3RlbmVyIGNhbiBiZSBtb3ZpbmcsIHRoZXkgYm90aCBoYXZlIGEgdmVsb2NpdHlcblx0XHQgKiAgICAgICAgICB2ZWN0b3IgcmVwcmVzZW50aW5nIGJvdGggdGhlIHNwZWVkIGFuZCBkaXJlY3Rpb24gb2YgbW92ZW1lbnQuIFRha2VuIHRvZ2V0aGVyLFxuXHRcdCAqICAgICAgICAgIHRoZXNlIHR3byB2ZWxvY2l0aWVzIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgZG9wcGxlciBzaGlmdCBlZmZlY3Qgd2hpY2ggY2hhbmdlcyB0aGUgcGl0Y2guXG5cdFx0ICogICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBOb3RlOiB0aGUgcG9zaXRpb24gb2YgdGhlIExpc3RlbmVyIHdpbGwgaGF2ZSBubyBlZmZlY3Qgb24gbm9kZXMgbm90IGNvbm5lY3RlZCB0byBhIFRvbmUuUGFubmVyM0Rcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IGZvcndhcmQgb3JpZW50YXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IFtcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMFxuXHQgICAgICAgIF07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IFtcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMFxuXHQgICAgICAgIF07XG5cdCAgICAgICAgVG9uZS5nZXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gc2V0IHRoZSBkZWZhdWx0IHBvc2l0aW9uL2ZvcndhcmRcblx0ICAgICAgICAgICAgdGhpcy5zZXQoTGlzdGVuZXJDb25zdHJ1Y3Rvci5kZWZhdWx0cyk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxpc3RlbmVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0cyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Bvc2l0aW9uWCc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWSc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWic6IDAsXG5cdCAgICAgICAgJ2ZvcndhcmRYJzogMCxcblx0ICAgICAgICAnZm9yd2FyZFknOiAwLFxuXHQgICAgICAgICdmb3J3YXJkWic6IDEsXG5cdCAgICAgICAgJ3VwWCc6IDAsXG5cdCAgICAgICAgJ3VwWSc6IDEsXG5cdCAgICAgICAgJ3VwWic6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcmFtcCB0aW1lIHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIHNldFRhcmdldEF0VGltZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLl9yYW1wVGltZUNvbnN0YW50ID0gMC4wMTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGlzdGVuZXIgaW4gM2Qgc3BhY2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEByZXR1cm4ge1RvbmUuTGlzdGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24gKHgsIHksIHopIHtcblx0ICAgICAgICBpZiAodGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWC5zZXRUYXJnZXRBdFRpbWUoeCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuc2V0UG9zaXRpb24oeCwgeSwgeik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGxpc3RlbmVyIHVzaW5nIHR3byB2ZWN0b3JzLCB0aGUgZm9yd2FyZFxuXHRcdCAqICB2ZWN0b3IgKHdoaWNoIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgZmFjaW5nKSBhbmQgdGhlIHVwIHZlY3RvclxuXHRcdCAqICAod2hpY2ggdGhlIHVwIGRpcmVjdGlvbiBvZiB0aGUgbGlzdGVuZXIpLiBBbiB1cCB2ZWN0b3Jcblx0XHQgKiAgb2YgMCwgMCwgMSBpcyBlcXVpdmFsZW50IHRvIHRoZSBsaXN0ZW5lciBzdGFuZGluZyB1cCBpbiB0aGUgWiBkaXJlY3Rpb24uXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHVwWFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB1cFlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdXBaXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuTGlzdGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLnNldE9yaWVudGF0aW9uID0gZnVuY3Rpb24gKHgsIHksIHosIHVwWCwgdXBZLCB1cFopIHtcblx0ICAgICAgICBpZiAodGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRYKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuZm9yd2FyZFguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRaLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIudXBYLnNldFRhcmdldEF0VGltZSh1cFgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci51cFkuc2V0VGFyZ2V0QXRUaW1lKHVwWSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnVwWi5zZXRUYXJnZXRBdFRpbWUodXBaLCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5zZXRPcmllbnRhdGlvbih4LCB5LCB6LCB1cFgsIHVwWSwgdXBaKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAncG9zaXRpb25YJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25ZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdwb3NpdGlvblknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3Bvc2l0aW9uWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcnMgZnJvbnQgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHdoaWNoIHdheSB0aGV5IGFyZSBmYWNpbmcuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBmb3J3YXJkWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAnZm9yd2FyZFgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXJzIGZyb250IGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB3aGljaCB3YXkgdGhleSBhcmUgZmFjaW5nLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgZm9yd2FyZFlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ2ZvcndhcmRZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblsxXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzFdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVycyBmcm9udCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgd2hpY2ggd2F5IHRoZXkgYXJlIGZhY2luZy5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIGZvcndhcmRaXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdmb3J3YXJkWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcidzIHVwIGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB0aGUgZGlyZWN0aW9uIHRoZSBsaXN0ZW5lciBpcyBzdGFuZGluZyBpbi5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHVwWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAndXBYJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblszXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzNdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVyJ3MgdXAgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHRoZSBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIHN0YW5kaW5nIGluLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgdXBZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICd1cFknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzRdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bNF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXIncyB1cCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgdGhlIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgc3RhbmRpbmcgaW4uXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSB1cFpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3VwWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bNV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvbls1XTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTGlzdGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvL1NJTkdMRVRPTiBTRVRVUFxuXHQgICAgdmFyIExpc3RlbmVyQ29uc3RydWN0b3IgPSBUb25lLkxpc3RlbmVyO1xuXHQgICAgVG9uZS5MaXN0ZW5lciA9IG5ldyBMaXN0ZW5lckNvbnN0cnVjdG9yKCk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0Lkxpc3RlbmVyIGluc3RhbmNlb2YgTGlzdGVuZXJDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAvL2Egc2luZ2xlIGxpc3RlbmVyIG9iamVjdFxuXHQgICAgICAgICAgICBUb25lLkxpc3RlbmVyID0gY29udGV4dC5MaXN0ZW5lcjtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL21ha2UgbmV3IExpc3RlbmVyIGluc2lkZXNcblx0ICAgICAgICAgICAgVG9uZS5MaXN0ZW5lciA9IG5ldyBMaXN0ZW5lckNvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGNvbnRleHQuTGlzdGVuZXIgPSBUb25lLkxpc3RlbmVyO1xuXHQgICAgfSk7XG5cdCAgICAvL0VORCBTSU5HTEVUT04gU0VUVVBcblx0ICAgIHJldHVybiBUb25lLkxpc3RlbmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBCZWNhdXNlIG9mIGEgYnVnIGluIGlPUyBjYXVzaW5nIHRoZSBjdXJyZW50VGltZSB0byBpbmNyZW1lbnRcblx0XHQgKiBiZWZvcmUgdGhlIHJlbmRlcmluZyBpcyBzdGFydGVkLCBzb21ldGltZXMgaXQgdGFrZXMgbXVsdGlwbGVcblx0XHQgKiBhdHRlbXB0cyB0byByZW5kZXIgdGhlIGF1ZGlvIGNvcnJlY3RseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgZnVuY3Rpb24gYXR0ZW1wdFJlbmRlcihjYWxsYmFjaywgZHVyYXRpb24sIHNhbXBsZVJhdGUsIHRyaWVzKSB7XG5cdCAgICAgICAgdHJpZXMgPSBUb25lLmRlZmF1bHRBcmcodHJpZXMsIDApO1xuXHQgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IFRvbmUuT2ZmbGluZUNvbnRleHQoMiwgZHVyYXRpb24sIHNhbXBsZVJhdGUpO1xuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgLy9pbnZva2UgdGhlIGNhbGxiYWNrL3NjaGVkdWxpbmdcblx0ICAgICAgICB2YXIgcmVzcG9uc2UgPSBjYWxsYmFjayhUb25lLlRyYW5zcG9ydCk7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuY3VycmVudFRpbWUgPiAwICYmIHRyaWVzIDwgMTAwMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFJlbmRlcihjYWxsYmFjaywgZHVyYXRpb24sIHNhbXBsZVJhdGUsICsrdHJpZXMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgICAgICAncmVzcG9uc2UnOiByZXNwb25zZSxcblx0ICAgICAgICAgICAgICAgICdjb250ZXh0JzogY29udGV4dFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0ICAgIC8qKlxuXHRcdCAqICBHZW5lcmF0ZSBhIGJ1ZmZlciBieSByZW5kZXJpbmcgYWxsIG9mIHRoZSBUb25lLmpzIGNvZGUgd2l0aGluIHRoZSBjYWxsYmFjayB1c2luZyB0aGUgT2ZmbGluZUF1ZGlvQ29udGV4dC5cblx0XHQgKiAgVGhlIE9mZmxpbmVBdWRpb0NvbnRleHQgaXMgY2FwYWJsZSBvZiByZW5kZXJpbmcgbXVjaCBmYXN0ZXIgdGhhbiByZWFsIHRpbWUgaW4gbWFueSBjYXNlcy5cblx0XHQgKiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFsc28gcGFzc2VzIGluIGFuIG9mZmxpbmUgaW5zdGFuY2Ugb2YgVG9uZS5UcmFuc3BvcnQgd2hpY2ggY2FuIGJlIHVzZWRcblx0XHQgKiAgdG8gc2NoZWR1bGUgZXZlbnRzIGFsb25nIHRoZSBUcmFuc3BvcnQuICoqTk9URSoqIE9mZmxpbmVBdWRpb0NvbnRleHQgaGFzIHRoZSBzYW1lIHJlc3RyaWN0aW9uc1xuXHRcdCAqICBhcyB0aGUgQXVkaW9Db250ZXh0IGluIHRoYXQgb24gY2VydGFpbiBwbGF0Zm9ybXMgKGxpa2UgaU9TKSBpdCBtdXN0IGJlIGludm9rZWQgYnkgYW4gZXhwbGljaXRcblx0XHQgKiAgdXNlciBhY3Rpb24gbGlrZSBhIGNsaWNrIG9yIHRhcC4gXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIEFsbCBUb25lLmpzIG5vZGVzIHdoaWNoIGFyZSBjcmVhdGVkIGFuZCBzY2hlZHVsZWQgd2l0aGluIHRoaXMgY2FsbGJhY2sgYXJlIHJlY29yZGVkIGludG8gdGhlIG91dHB1dCBCdWZmZXIuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICBkdXJhdGlvbiAgICAgdGhlIGFtb3VudCBvZiB0aW1lIHRvIHJlY29yZCBmb3IuXG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfSAgVGhlIHByb21pc2Ugd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBUb25lLkJ1ZmZlciBvZiB0aGUgcmVjb3JkZWQgb3V0cHV0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcmVuZGVyIDIgc2Vjb25kcyBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqIFRvbmUuT2ZmbGluZShmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly9vbmx5IG5vZGVzIGNyZWF0ZWQgaW4gdGhpcyBjYWxsYmFjayB3aWxsIGJlIHJlY29yZGVkXG5cdFx0ICogXHR2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS50b01hc3RlcigpLnN0YXJ0KDApXG5cdFx0ICogXHQvL3NjaGVkdWxlIHRoZWlyIGV2ZW50c1xuXHRcdCAqIH0sIDIpLnRoZW4oZnVuY3Rpb24oYnVmZmVyKXtcblx0XHQgKiBcdC8vZG8gc29tZXRoaW5nIHdpdGggdGhlIG91dHB1dCBidWZmZXJcblx0XHQgKiB9KVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gYWxzbyBzY2hlZHVsZSBldmVudHMgYWxvbmcgdGhlIFRyYW5zcG9ydFxuXHRcdCAqIC8vdXNpbmcgdGhlIHBhc3NlZCBpbiBPZmZsaW5lIFRyYW5zcG9ydFxuXHRcdCAqIFRvbmUuT2ZmbGluZShmdW5jdGlvbihUcmFuc3BvcnQpe1xuXHRcdCAqIFx0dmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS50b01hc3RlcigpXG5cdFx0ICogXHRUcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHRcdG9zYy5zdGFydCh0aW1lKS5zdG9wKHRpbWUgKyAwLjEpXG5cdFx0ICogXHR9LCAxKVxuXHRcdCAqIFx0VHJhbnNwb3J0LnN0YXJ0KDAuMilcblx0XHQgKiB9LCA0KS50aGVuKGZ1bmN0aW9uKGJ1ZmZlcil7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSBvdXRwdXQgYnVmZmVyXG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgZHVyYXRpb24pIHtcblx0ICAgICAgICAvL3NldCB0aGUgT2ZmbGluZUF1ZGlvQ29udGV4dFxuXHQgICAgICAgIHZhciBzYW1wbGVSYXRlID0gVG9uZS5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsQ29udGV4dCA9IFRvbmUuY29udGV4dDtcblx0ICAgICAgICB2YXIgcmVuZGVyUmV0ID0gYXR0ZW1wdFJlbmRlcihjYWxsYmFjaywgZHVyYXRpb24sIHNhbXBsZVJhdGUpO1xuXHQgICAgICAgIHZhciByZXNwb25zZSA9IHJlbmRlclJldC5yZXNwb25zZTtcblx0ICAgICAgICB2YXIgY29udGV4dCA9IHJlbmRlclJldC5jb250ZXh0O1xuXHQgICAgICAgIHZhciByZXQ7XG5cdCAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHQgICAgICAgICAgICAvL3dhaXQgZm9yIHRoZSBwcm9taXNlIHRvIHJlc29sdmVcblx0ICAgICAgICAgICAgcmV0ID0gcmVzcG9uc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAvL3RoZW4gcmVuZGVyIHRoZSBhdWRpb1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQucmVuZGVyKCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vcHJvY2VzcyB0aGUgYXVkaW9cblx0ICAgICAgICAgICAgcmV0ID0gY29udGV4dC5yZW5kZXIoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIG9yaWdpbmFsIEF1ZGlvQ29udGV4dFxuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IG9yaWdpbmFsQ29udGV4dDtcblx0ICAgICAgICAvL3JldHVybiB0aGUgYXVkaW9cblx0ICAgICAgICByZXR1cm4gcmV0LnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICAvL3dyYXAgaXQgaW4gYSBUb25lLkJ1ZmZlclxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuQnVmZmVyKGJ1ZmZlcik7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT2ZmbGluZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiBcdEBjbGFzcyAgVG9uZS5FZmZlY3QgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGVmZmVjdHMuIENvbm5lY3QgdGhlIGVmZmVjdCBiZXR3ZWVuXG5cdFx0ICogXHQgICAgICAgIHRoZSBlZmZlY3RTZW5kIGFuZCBlZmZlY3RSZXR1cm4gR2Fpbk5vZGVzLCB0aGVuIGNvbnRyb2wgdGhlIGFtb3VudCBvZlxuXHRcdCAqIFx0ICAgICAgICBlZmZlY3Qgd2hpY2ggZ29lcyB0byB0aGUgb3V0cHV0IHVzaW5nIHRoZSB3ZXQgY29udHJvbC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3dldF0gVGhlIHN0YXJ0aW5nIHdldCB2YWx1ZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnd2V0J10sIFRvbmUuRWZmZWN0KTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZHJ5d2V0IGtub2IgdG8gY29udHJvbCB0aGUgYW1vdW50IG9mIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNyb3NzRmFkZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0ID0gbmV3IFRvbmUuQ3Jvc3NGYWRlKG9wdGlvbnMud2V0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgd2V0IGNvbnRyb2wgaXMgaG93IG11Y2ggb2YgdGhlIGVmZmVjdGVkXG5cdFx0XHQgKiAgd2lsbCBwYXNzIHRocm91Z2ggdG8gdGhlIG91dHB1dC4gMSA9IDEwMCUgZWZmZWN0ZWRcblx0XHRcdCAqICBzaWduYWwsIDAgPSAxMDAlIGRyeSBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2V0ID0gdGhpcy5fZHJ5V2V0LmZhZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29ubmVjdCB0aGUgZWZmZWN0U2VuZCB0byB0aGUgaW5wdXQgb2YgaHRlIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhlIGVmZmVjdCB0byB0aGUgZWZmZWN0UmV0dXJuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9kcnlXZXQuYSk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuZWZmZWN0U2VuZCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4uY29ubmVjdCh0aGlzLl9kcnlXZXQuYik7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnd2V0J10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRWZmZWN0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FZmZlY3QuZGVmYXVsdHMgPSB7ICd3ZXQnOiAxIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2hhaW5zIHRoZSBlZmZlY3QgaW4gYmV0d2VlbiB0aGUgZWZmZWN0U2VuZCBhbmQgZWZmZWN0UmV0dXJuXG5cdFx0ICogIEBwYXJhbSAge1RvbmV9IGVmZmVjdFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5jb25uZWN0RWZmZWN0ID0gZnVuY3Rpb24gKGVmZmVjdCkge1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbihlZmZlY3QsIHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd3ZXQnXSk7XG5cdCAgICAgICAgdGhpcy53ZXQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQXV0b0ZpbHRlciBpcyBhIFRvbmUuRmlsdGVyIHdpdGggYSBUb25lLkxGTyBjb25uZWN0ZWQgdG8gdGhlIGZpbHRlciBjdXRvZmYgZnJlcXVlbmN5LlxuXHRcdCAqICAgICAgICAgU2V0dGluZyB0aGUgTEZPIHJhdGUgYW5kIGRlcHRoIGFsbG93cyBmb3IgY29udHJvbCBvdmVyIHRoZSBmaWx0ZXIgbW9kdWxhdGlvbiByYXRlIFxuXHRcdCAqICAgICAgICAgYW5kIGRlcHRoLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSByYXRlIG9mIHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5PX0gYmFzZUZyZXF1ZW5jeSBUaGUgbG93ZXIgdmFsdWUgb2YgdGhlIExGT3Mgb3NjaWxsYXRpb25cblx0IFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5PX0gb2N0YXZlcyBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIGJhc2VGcmVxdWVuY3lcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhbiBhdXRvZmlsdGVyIGFuZCBzdGFydCBpdCdzIExGT1xuXHRcdCAqIHZhciBhdXRvRmlsdGVyID0gbmV3IFRvbmUuQXV0b0ZpbHRlcihcIjRuXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKiAvL3JvdXRlIGFuIG9zY2lsbGF0b3IgdGhyb3VnaCB0aGUgZmlsdGVyIGFuZCBzdGFydCBpdFxuXHRcdCAqIHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QoYXV0b0ZpbHRlcikuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJ1xuXHQgICAgICAgIF0sIFRvbmUuQXV0b0ZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGRyaXZlcyB0aGUgZmlsdGVyIGN1dG9mZlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnYW1wbGl0dWRlJzogb3B0aW9ucy5kZXB0aFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHJhbmdlIG9mIHRoZSBmaWx0ZXIgbW9kdWxhdGluZyBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCBmcmVxdWVuY3kuIFxuXHRcdFx0ICogMCA9IG5vIG1vZHVsYXRpb24uIDEgPSBmdWxsIG1vZHVsYXRpb24uXG5cdFx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fbGZvLmFtcGxpdHVkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEhvdyBmYXN0IHRoZSBmaWx0ZXIgbW9kdWxhdGVzIGJldHdlZW4gbWluIGFuZCBtYXguIFxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlsdGVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG5ldyBUb25lLkZpbHRlcihvcHRpb25zLmZpbHRlcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9jdGF2ZXMgcGxhY2Vob2xkZXJcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSAwO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5maWx0ZXIpO1xuXHQgICAgICAgIHRoaXMuX2xmby5jb25uZWN0KHRoaXMuZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgdGhpcy5iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgfTtcblx0ICAgIC8vZXh0ZW5kIEVmZmVjdFxuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdXRvRmlsdGVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdHNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdkZXB0aCc6IDEsXG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAyLjYsXG5cdCAgICAgICAgJ2ZpbHRlcic6IHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnbG93cGFzcycsXG5cdCAgICAgICAgICAgICdyb2xsb2ZmJzogLTEyLFxuXHQgICAgICAgICAgICAnUSc6IDFcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RhcnQgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RhcnQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0b3AuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgZmlsdGVyIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbZGVsYXk9MF0gRGVsYXkgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIGVmZmVjdCBhZnRlciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgaGFzIHN0YXJ0ZWQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uIChkZWxheSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zeW5jKGRlbGF5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIGZpbHRlciBmcm9tIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnVuc3luYygpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFR5cGUgb2Ygb3NjaWxsYXRvciBhdHRhY2hlZCB0byB0aGUgQXV0b0ZpbHRlci4gXG5cdFx0ICogUG9zc2libGUgdmFsdWVzOiBcInNpbmVcIiwgXCJzcXVhcmVcIiwgXCJ0cmlhbmdsZVwiLCBcInNhd3Rvb3RoXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmby50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8udHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgZmlsdGVyJ3MgY3V0b2ZmIGZyZXF1ZW5jeS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8ubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8ubWluID0gdGhpcy50b0ZyZXF1ZW5jeShmcmVxKTtcblx0ICAgICAgICAgICAgLy9hbmQgc2V0IHRoZSBtYXhcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBmaWx0ZXIncyBjdXRvZmYgZnJlcXVlbmN5LiBcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3Q7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby5tYXggPSB0aGlzLmJhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCBvY3QpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGZvLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdXRvRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BdXRvUGFubmVyIGlzIGEgVG9uZS5QYW5uZXIgd2l0aCBhbiBMRk8gY29ubmVjdGVkIHRvIHRoZSBwYW4gYW1vdW50LiBcblx0XHQgKiAgICAgICAgIE1vcmUgb24gdXNpbmcgYXV0b3Bhbm5lcnMgW2hlcmVdKGh0dHBzOi8vd3d3LmFibGV0b24uY29tL2VuL2Jsb2cvYXV0b3Bhbi1jaG9wcGVyLWVmZmVjdC1hbmQtbW9yZS1saXZlc2Nob29sLykuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBSYXRlIG9mIGxlZnQtcmlnaHQgb3NjaWxsYXRpb24uIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY3JlYXRlIGFuIGF1dG9wYW5uZXIgYW5kIHN0YXJ0IGl0J3MgTEZPXG5cdFx0ICogdmFyIGF1dG9QYW5uZXIgPSBuZXcgVG9uZS5BdXRvUGFubmVyKFwiNG5cIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqIC8vcm91dGUgYW4gb3NjaWxsYXRvciB0aHJvdWdoIHRoZSBwYW5uZXIgYW5kIHN0YXJ0IGl0XG5cdFx0ICogdmFyIG9zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkuY29ubmVjdChhdXRvUGFubmVyKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZnJlcXVlbmN5J10sIFRvbmUuQXV0b1Bhbm5lcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGRyaXZlcyB0aGUgcGFubmluZ1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnYW1wbGl0dWRlJzogb3B0aW9ucy5kZXB0aCxcblx0ICAgICAgICAgICAgJ21pbic6IC0xLFxuXHQgICAgICAgICAgICAnbWF4JzogMVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtb3VudCBvZiBwYW5uaW5nIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQuIFxuXHRcdFx0ICogMCA9IGFsd2F5cyBjZW50ZXIuIDEgPSBmdWxsIHJhbmdlIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQuIFxuXHRcdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2xmby5hbXBsaXR1ZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBhbm5lciBub2RlIHdoaWNoIGRvZXMgdGhlIHBhbm5pbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5QYW5uZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG5ldyBUb25lLlBhbm5lcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogSG93IGZhc3QgdGhlIHBhbm5lciBtb2R1bGF0ZXMgYmV0d2VlbiBsZWZ0IGFuZCByaWdodC4gXG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fcGFubmVyKTtcblx0ICAgICAgICB0aGlzLl9sZm8uY29ubmVjdCh0aGlzLl9wYW5uZXIucGFuKTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZGVwdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIC8vZXh0ZW5kIEVmZmVjdFxuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdXRvUGFubmVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdHNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdkZXB0aCc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdGFydCB0aGUgZWZmZWN0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBMRk8gd2lsbCBzdGFydC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RvcC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBwYW5uZXIgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFtkZWxheT0wXSBEZWxheSB0aW1lIGJlZm9yZSBzdGFydGluZyB0aGUgZWZmZWN0IGFmdGVyIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zcG9ydCBoYXMgc3RhcnRlZC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKGRlbGF5KSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN5bmMoZGVsYXkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgcGFubmVyIGZyb20gdGhlIHRyYW5zcG9ydFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2xmby51bnN5bmMoKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUeXBlIG9mIG9zY2lsbGF0b3IgYXR0YWNoZWQgdG8gdGhlIEF1dG9GaWx0ZXIuIFxuXHRcdCAqIFBvc3NpYmxlIHZhbHVlczogXCJzaW5lXCIsIFwic3F1YXJlXCIsIFwidHJpYW5nbGVcIiwgXCJzYXd0b290aFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9GaWx0ZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xmby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZGVwdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdXRvUGFubmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuQXV0b1dhaCBjb25uZWN0cyBhIFRvbmUuRm9sbG93ZXIgdG8gYSBiYW5kcGFzcyBmaWx0ZXIgKFRvbmUuRmlsdGVyKS5cblx0XHQgKiAgICAgICAgICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIgaXMgYWRqdXN0ZWQgcHJvcG9ydGlvbmFsbHkgdG8gdGhlXG5cdFx0ICogICAgICAgICAgaW5jb21pbmcgc2lnbmFsJ3MgYW1wbGl0dWRlLiBJbnNwaXJhdGlvbiBmcm9tIFtUdW5hLmpzXShodHRwczovL2dpdGh1Yi5jb20vRGluYWhtb2UvdHVuYSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbYmFzZUZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSB0aGUgZmlsdGVyIGlzIHNldFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhdCB0aGUgbG93IHBvaW50IG9mIHRoZSB3YWhcblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gW29jdGF2ZXNdIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlsdGVyIHdpbGwgc3dlZXAgdG8gd2hlbiBmdWxseSBvcGVuXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFtzZW5zaXRpdml0eV0gVGhlIGRlY2liZWwgdGhyZXNob2xkIHNlbnNpdGl2aXR5IGZvclxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5jb21pbmcgc2lnbmFsLiBOb3JtYWwgcmFuZ2Ugb2YgLTQwIHRvIDAuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGF1dG9XYWggPSBuZXcgVG9uZS5BdXRvV2FoKDUwLCA2LCAtMzApLnRvTWFzdGVyKCk7XG5cdFx0ICogLy9pbml0aWFsaXplIHRoZSBzeW50aCBhbmQgY29ubmVjdCB0byBhdXRvd2FoXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFN5bnRoLmNvbm5lY3QoYXV0b1dhaCk7XG5cdFx0ICogLy9RIHZhbHVlIGluZmx1ZW5jZXMgdGhlIGVmZmVjdCBvZiB0aGUgd2FoIC0gZGVmYXVsdCBpcyAyXG5cdFx0ICogYXV0b1dhaC5RLnZhbHVlID0gNjtcblx0XHQgKiAvL21vcmUgYXVkaWJsZSBvbiBoaWdoZXIgbm90ZXNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiOG5cIilcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdiYXNlRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnLFxuXHQgICAgICAgICAgICAnc2Vuc2l0aXZpdHknXG5cdCAgICAgICAgXSwgVG9uZS5BdXRvV2FoKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBlbnZlbG9wZSBmb2xsb3dlci4gU2V0IHRoZSBhdHRhY2svcmVsZWFzZVxuXHRcdFx0ICogIHRpbWluZyB0byBhZGp1c3QgaG93IHRoZSBlbnZlbG9wZSBpcyBmb2xsb3dlZC5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Gb2xsb3dlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mb2xsb3dlciA9IG5ldyBUb25lLkZvbGxvd2VyKG9wdGlvbnMuZm9sbG93ZXIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlcyB0aGUgZm9sbG93ZXIgdmFsdWUgdG8gdGhlIGZyZXF1ZW5jeSBkb21haW5cblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZSA9IG5ldyBUb25lLlNjYWxlRXhwKDAsIDEsIDAuNSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dCBnYWluIHRvIGFkanVzdCB0aGUgc2Vuc2l0aXZpdHlcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnB1dEJvb3N0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtCaXF1YWRGaWx0ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iYW5kcGFzcyA9IG5ldyBUb25lLkZpbHRlcih7XG5cdCAgICAgICAgICAgICdyb2xsb2ZmJzogLTQ4LFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5JzogMCxcblx0ICAgICAgICAgICAgJ1EnOiBvcHRpb25zLlFcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcgPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ3BlYWtpbmcnKTtcblx0ICAgICAgICB0aGlzLl9wZWFraW5nLmdhaW4udmFsdWUgPSBvcHRpb25zLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBvZiB0aGUgZmlsdGVyLlxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IHRoaXMuX3BlYWtpbmcuZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBxdWFsaXR5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSB0aGlzLl9iYW5kcGFzcy5RO1xuXHQgICAgICAgIC8vdGhlIGNvbnRyb2wgc2lnbmFsIHBhdGhcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4odGhpcy5faW5wdXRCb29zdCwgdGhpcy5mb2xsb3dlciwgdGhpcy5fc3dlZXBSYW5nZSk7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5jb25uZWN0KHRoaXMuX2JhbmRwYXNzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5jb25uZWN0KHRoaXMuX3BlYWtpbmcuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3RoZSBmaWx0ZXJlZCBwYXRoXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNoYWluKHRoaXMuX2JhbmRwYXNzLCB0aGlzLl9wZWFraW5nLCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVcblx0ICAgICAgICB0aGlzLl9zZXRTd2VlcFJhbmdlKCk7XG5cdCAgICAgICAgdGhpcy5zZW5zaXRpdml0eSA9IG9wdGlvbnMuc2Vuc2l0aXZpdHk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXV0b1dhaCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDEwMCxcblx0ICAgICAgICAnb2N0YXZlcyc6IDYsXG5cdCAgICAgICAgJ3NlbnNpdGl2aXR5JzogMCxcblx0ICAgICAgICAnUSc6IDIsXG5cdCAgICAgICAgJ2dhaW4nOiAyLFxuXHQgICAgICAgICdmb2xsb3dlcic6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoYXQgdGhlIGZpbHRlciB3aWxsIHN3ZWVwIGFib3ZlIHRoZVxuXHRcdCAqIGJhc2VGcmVxdWVuY3kuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b1dhaCNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9XYWgucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3RhdmVzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3RhdmVzO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRTd2VlcFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYmFzZSBmcmVxdWVuY3kgZnJvbSB3aGljaCB0aGUgc3dlZXAgd2lsbCBzdGFydCBmcm9tLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9XYWgjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAbmFtZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvV2FoLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYmFzZUZyZXEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IGJhc2VGcmVxO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRTd2VlcFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2Vuc2l0aXZpdHkgdG8gY29udHJvbCBob3cgcmVzcG9uc2l2ZSB0byB0aGUgaW5wdXQgc2lnbmFsIHRoZSBmaWx0ZXIgaXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b1dhaCNcblx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0ICogQG5hbWUgc2Vuc2l0aXZpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9XYWgucHJvdG90eXBlLCAnc2Vuc2l0aXZpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmdhaW5Ub0RiKDEgLyB0aGlzLl9pbnB1dEJvb3N0LmdhaW4udmFsdWUpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2Vuc2l0aXZ5KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QuZ2Fpbi52YWx1ZSA9IDEgLyBUb25lLmRiVG9HYWluKHNlbnNpdGl2eSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgc2V0cyB0aGUgc3dlZXAgcmFuZ2Ugb2YgdGhlIHNjYWxlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvV2FoLnByb3RvdHlwZS5fc2V0U3dlZXBSYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLm1pbiA9IHRoaXMuX2Jhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5tYXggPSBNYXRoLm1pbih0aGlzLl9iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgdGhpcy5fb2N0YXZlcyksIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlIC8gMik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdXRvV2FofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmZvbGxvd2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZvbGxvd2VyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9iYW5kcGFzcy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYmFuZHBhc3MgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmdhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXV0b1dhaDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFNpZ25hbC1yYXRlIG1vZHVsbyBvcGVyYXRvci4gT25seSB3b3JrcyBpbiBBdWRpb1JhbmdlIFstMSwgMV0gYW5kIGZvciBtb2R1bHVzXG5cdFx0ICogICAgICAgICB2YWx1ZXMgaW4gdGhlIE5vcm1hbFJhbmdlLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBtb2R1bHVzIFRoZSBtb2R1bHVzIHRvIGFwcGx5LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtb2QgPSBuZXcgVG9uZS5Nb2R1bG8oMC4yKVxuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KG1vZCk7XG5cdFx0ICogLy9tb2Qgb3V0cHV0cyAwLjFcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9kdWxvID0gZnVuY3Rpb24gKG1vZHVsdXMpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSB3YXZlc2hhcGVyIGdldHMgdGhlIGludGVnZXIgbXVsdGlwbGUgb2Zcblx0XHRcdCAqICB0aGUgaW5wdXQgc2lnbmFsIGFuZCB0aGUgbW9kdWx1cy5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKE1hdGgucG93KDIsIDE2KSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGludGVnZXIgbXVsdGlwbGUgaXMgbXVsdGlwbGllZCBieSB0aGUgbW9kdWx1c1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGFuZCBzdWJ0cmFjdGVkIGZyb20gdGhlIGlucHV0IHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1vZHVsdXMgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKG1vZHVsdXMpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmZhbih0aGlzLl9zaGFwZXIsIHRoaXMuX3N1YnRyYWN0KTtcblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwuY29ubmVjdCh0aGlzLl9tdWx0aXBseSwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmNvbm5lY3QodGhpcy5fbXVsdGlwbHksIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5LmNvbm5lY3QodGhpcy5fc3VidHJhY3QsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX3NldFdhdmVTaGFwZXIobW9kdWx1cyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb2R1bG8sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSAgbW9kICB0aGUgbW9kdWx1cyB0byBhcHBseVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb2R1bG8ucHJvdG90eXBlLl9zZXRXYXZlU2hhcGVyID0gZnVuY3Rpb24gKG1vZCkge1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5zZXRNYXAoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB2YXIgbXVsdGlwbGUgPSBNYXRoLmZsb29yKCh2YWwgKyAwLjAwMDEpIC8gbW9kKTtcblx0ICAgICAgICAgICAgcmV0dXJuIG11bHRpcGxlO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtb2R1bHVzIHZhbHVlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk1vZHVsbyNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1vZHVsby5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZFNpZ25hbC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1vZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2RTaWduYWwudmFsdWUgPSBtb2Q7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFdhdmVTaGFwZXIobW9kKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vZHVsb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb2R1bG8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZFNpZ25hbCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9kdWxvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5CaXRjcnVzaGVyIGRvd25zYW1wbGVzIHRoZSBpbmNvbWluZyBzaWduYWwgdG8gYSBkaWZmZXJlbnQgYml0ZGVwdGguXG5cdFx0ICogICAgICAgICBMb3dlcmluZyB0aGUgYml0ZGVwdGggb2YgdGhlIHNpZ25hbCBjcmVhdGVzIGRpc3RvcnRpb24uIFJlYWQgbW9yZSBhYm91dCBCaXRjcnVzaGluZ1xuXHRcdCAqICAgICAgICAgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQml0Y3J1c2hlcikuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJpdHMgVGhlIG51bWJlciBvZiBiaXRzIHRvIGRvd25zYW1wbGUgdGhlIHNpZ25hbC4gTm9taW5hbCByYW5nZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICBvZiAxIHRvIDguXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pbml0aWFsaXplIGNydXNoZXIgYW5kIHJvdXRlIGEgc3ludGggdGhyb3VnaCBpdFxuXHRcdCAqIHZhciBjcnVzaGVyID0gbmV3IFRvbmUuQml0Q3J1c2hlcig0KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLk1vbm9TeW50aCgpLmNvbm5lY3QoY3J1c2hlcik7XG5cdFx0ICovXG5cdCAgICBUb25lLkJpdENydXNoZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydiaXRzJ10sIFRvbmUuQml0Q3J1c2hlcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICB2YXIgaW52U3RlcFNpemUgPSAxIC8gTWF0aC5wb3coMiwgb3B0aW9ucy5iaXRzIC0gMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU3VidHJhY3QgdGhlIGlucHV0IHNpZ25hbCBhbmQgdGhlIG1vZHVsdXMgb2YgdGhlIGlucHV0IHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZCBmdW5jdGlvblxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Nb2R1bG99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsbyA9IG5ldyBUb25lLk1vZHVsbyhpbnZTdGVwU2l6ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAga2VlcHMgdHJhY2sgb2YgdGhlIGJpdHNcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iaXRzID0gb3B0aW9ucy5iaXRzO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5mYW4odGhpcy5fc3VidHJhY3QsIHRoaXMuX21vZHVsbyk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxvLmNvbm5lY3QodGhpcy5fc3VidHJhY3QsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0LmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQml0Q3J1c2hlciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJpdENydXNoZXIuZGVmYXVsdHMgPSB7ICdiaXRzJzogNCB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGJpdCBkZXB0aCBvZiB0aGUgZWZmZWN0LiBOb21pbmFsIHJhbmdlIG9mIDEtOC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CaXRDcnVzaGVyI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgYml0c1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQml0Q3J1c2hlci5wcm90b3R5cGUsICdiaXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYml0cztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJpdHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYml0cyA9IGJpdHM7XG5cdCAgICAgICAgICAgIHZhciBpbnZTdGVwU2l6ZSA9IDEgLyBNYXRoLnBvdygyLCBiaXRzIC0gMSk7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsby52YWx1ZSA9IGludlN0ZXBTaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5CaXRDcnVzaGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJpdENydXNoZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxvID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CaXRDcnVzaGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5DaGVieVNoZXYgaXMgYSBDaGVieXNoZXYgd2F2ZXNoYXBlciwgYW4gZWZmZWN0IHdoaWNoIGlzIGdvb2QgXG5cdFx0ICogICAgICAgICBmb3IgbWFraW5nIGRpZmZlcmVudCB0eXBlcyBvZiBkaXN0b3J0aW9uIHNvdW5kcy5cblx0XHQgKiAgICAgICAgIE5vdGUgdGhhdCBvZGQgb3JkZXJzIHNvdW5kIHZlcnkgZGlmZmVyZW50IGZyb20gZXZlbiBvbmVzLCBcblx0XHQgKiAgICAgICAgIGFuZCBvcmRlciA9IDEgaXMgbm8gY2hhbmdlLiBcblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBhdCBbbXVzaWMuY29sdW1iaWEuZWR1XShodHRwOi8vbXVzaWMuY29sdW1iaWEuZWR1L2NtYy9tdXNpY2FuZGNvbXB1dGVycy9jaGFwdGVyNC8wNF8wNi5waHApLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV8T2JqZWN0fSBbb3JkZXJdIFRoZSBvcmRlciBvZiB0aGUgY2hlYnlzaGV2IHBvbHlub21pYWwuIE5vcm1hbCByYW5nZSBiZXR3ZWVuIDEtMTAwLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhIG5ldyBjaGVieVxuXHRcdCAqIHZhciBjaGVieSA9IG5ldyBUb25lLkNoZWJ5c2hldig1MCk7XG5cdFx0ICogLy9jcmVhdGUgYSBtb25vc3ludGggY29ubmVjdGVkIHRvIG91ciBjaGVieVxuXHRcdCAqIHN5bnRoID0gbmV3IFRvbmUuTW9ub1N5bnRoKCkuY29ubmVjdChjaGVieSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ29yZGVyJ10sIFRvbmUuQ2hlYnlzaGV2KTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcig0MDk2KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIGhvbGRzIG9udG8gdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3JkZXIgPSBvcHRpb25zLm9yZGVyO1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9zaGFwZXIpO1xuXHQgICAgICAgIHRoaXMub3JkZXIgPSBvcHRpb25zLm9yZGVyO1xuXHQgICAgICAgIHRoaXMub3ZlcnNhbXBsZSA9IG9wdGlvbnMub3ZlcnNhbXBsZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNoZWJ5c2hldiwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb3JkZXInOiAxLFxuXHQgICAgICAgICdvdmVyc2FtcGxlJzogJ25vbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGdldCB0aGUgY29lZmZpY2llbnQgZm9yIHRoYXQgZGVncmVlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB4IHRoZSB4IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAgIHtudW1iZXJ9IGRlZ3JlZSBcblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG1lbW8gbWVtb2l6ZSB0aGUgY29tcHV0ZWQgdmFsdWUuIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHNwZWVkcyB1cCBjb21wdXRhdGlvbiBncmVhdGx5LiBcblx0XHQgKiAgQHJldHVybiAge251bWJlcn0gICAgICAgdGhlIGNvZWZmaWNpZW50IFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLl9nZXRDb2VmZmljaWVudCA9IGZ1bmN0aW9uICh4LCBkZWdyZWUsIG1lbW8pIHtcblx0ICAgICAgICBpZiAobWVtby5oYXNPd25Qcm9wZXJ0eShkZWdyZWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBtZW1vW2RlZ3JlZV07XG5cdCAgICAgICAgfSBlbHNlIGlmIChkZWdyZWUgPT09IDApIHtcblx0ICAgICAgICAgICAgbWVtb1tkZWdyZWVdID0gMDtcblx0ICAgICAgICB9IGVsc2UgaWYgKGRlZ3JlZSA9PT0gMSkge1xuXHQgICAgICAgICAgICBtZW1vW2RlZ3JlZV0gPSB4O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIG1lbW9bZGVncmVlXSA9IDIgKiB4ICogdGhpcy5fZ2V0Q29lZmZpY2llbnQoeCwgZGVncmVlIC0gMSwgbWVtbykgLSB0aGlzLl9nZXRDb2VmZmljaWVudCh4LCBkZWdyZWUgLSAyLCBtZW1vKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG1lbW9bZGVncmVlXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3JkZXIgb2YgdGhlIENoZWJ5c2hldiBwb2x5bm9taWFsIHdoaWNoIGNyZWF0ZXNcblx0XHQgKiB0aGUgZXF1YXRpb24gd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgaW5jb21pbmcgXG5cdFx0ICogc2lnbmFsIHRocm91Z2ggYSBUb25lLldhdmVTaGFwZXIuIFRoZSBlcXVhdGlvbnNcblx0XHQgKiBhcmUgaW4gdGhlIGZvcm06PGJyPlxuXHRcdCAqIG9yZGVyIDI6IDJ4XjIgKyAxPGJyPlxuXHRcdCAqIG9yZGVyIDM6IDR4XjMgKyAzeCA8YnI+XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hlYnlzaGV2I1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBvcmRlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZSwgJ29yZGVyJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JkZXI7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvcmRlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmRlciA9IG9yZGVyO1xuXHQgICAgICAgICAgICB2YXIgY3VydmUgPSBuZXcgQXJyYXkoNDA5Nik7XG5cdCAgICAgICAgICAgIHZhciBsZW4gPSBjdXJ2ZS5sZW5ndGg7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB4ID0gaSAqIDIgLyBsZW4gLSAxO1xuXHQgICAgICAgICAgICAgICAgaWYgKHggPT09IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL3Nob3VsZCBvdXRwdXQgMCB3aGVuIGlucHV0IGlzIDBcblx0ICAgICAgICAgICAgICAgICAgICBjdXJ2ZVtpXSA9IDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGN1cnZlW2ldID0gdGhpcy5fZ2V0Q29lZmZpY2llbnQoeCwgb3JkZXIsIHt9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIuY3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvdmVyc2FtcGxpbmcgb2YgdGhlIGVmZmVjdC4gQ2FuIGVpdGhlciBiZSBcIm5vbmVcIiwgXCIyeFwiIG9yIFwiNHhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaGVieXNoZXYjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSBvdmVyc2FtcGxlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLCAnb3ZlcnNhbXBsZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3ZlcnNhbXBsaW5nKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlID0gb3ZlcnNhbXBsaW5nO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2hlYnlzaGV2fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DaGVieXNoZXY7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBCYXNlIGNsYXNzIGZvciBTdGVyZW8gZWZmZWN0cy4gUHJvdmlkZXMgZWZmZWN0U2VuZEwvUiBhbmQgZWZmZWN0UmV0dXJuTC9SLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnd2V0J10sIFRvbmUuRWZmZWN0KTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRyeXdldCBrbm9iIHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Dcm9zc0ZhZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG5ldyBUb25lLkNyb3NzRmFkZShvcHRpb25zLndldCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdldCBjb250cm9sLCBpLmUuIGhvdyBtdWNoIG9mIHRoZSBlZmZlY3RlZFxuXHRcdFx0ICogIHdpbGwgcGFzcyB0aHJvdWdoIHRvIHRoZSBvdXRwdXQuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2V0ID0gdGhpcy5fZHJ5V2V0LmZhZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlbiBzcGxpdCBpdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IG5ldyBUb25lLlNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdHMgc2VuZCBMRUZUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMID0gdGhpcy5fc3BsaXQubGVmdDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0cyBzZW5kIFJJR0hUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSID0gdGhpcy5fc3BsaXQucmlnaHQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHN0ZXJlbyBlZmZlY3QgbWVyZ2VyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0IHJldHVybiBMRUZUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwgPSB0aGlzLl9tZXJnZS5sZWZ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBlZmZlY3QgcmV0dXJuIFJJR0hUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIgPSB0aGlzLl9tZXJnZS5yaWdodDtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX3NwbGl0KTtcblx0ICAgICAgICAvL2RyeSB3ZXQgY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fZHJ5V2V0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5jb25uZWN0KHRoaXMuX2RyeVdldCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnd2V0J10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3RlcmVvRWZmZWN0LCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb0VmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3dldCddKTtcblx0ICAgICAgICB0aGlzLndldCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5DaG9ydXMgaXMgYSBzdGVyZW8gY2hvcnVzIGVmZmVjdCBjb21wb3NlZCBvZlxuXHRcdCAqICAgICAgICAgYSBsZWZ0IGFuZCByaWdodCBkZWxheSB3aXRoIGEgVG9uZS5MRk8gYXBwbGllZCB0byB0aGUgZGVsYXlUaW1lIG9mIGVhY2ggY2hhbm5lbC5cblx0XHQgKiAgICAgICAgIEluc3BpcmF0aW9uIGZyb20gW1R1bmEuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9EaW5haG1vZS90dW5hL2Jsb2IvbWFzdGVyL3R1bmEuanMpLlxuXHRcdCAqICAgICAgICAgUmVhZCBtb3JlIG9uIHRoZSBjaG9ydXMgZWZmZWN0IG9uIFtTb3VuZE9uU291bmRdKGh0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvanVuMDQvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmh0bSkuXG5cdFx0ICpcblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKlx0QHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgZnJlcXVlbmN5IG9mIHRoZSBMRk8uXG5cdFx0ICpcdEBwYXJhbSB7TWlsbGlzZWNvbmRzfSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgb2YgdGhlIGNob3J1cyBlZmZlY3QgaW4gbXMuXG5cdFx0ICpcdEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtkZXB0aF0gVGhlIGRlcHRoIG9mIHRoZSBjaG9ydXMuXG5cdFx0ICpcdEBleGFtcGxlXG5cdFx0ICogdmFyIGNob3J1cyA9IG5ldyBUb25lLkNob3J1cyg0LCAyLjUsIDAuNSk7XG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuUG9seVN5bnRoKDQsIFRvbmUuTW9ub1N5bnRoKS5jb25uZWN0KGNob3J1cyk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoW1wiQzNcIixcIkUzXCIsXCJHM1wiXSwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hvcnVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSwgVG9uZS5DaG9ydXMpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlcHRoIG9mIHRoZSBjaG9ydXNcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZXB0aCA9IG9wdGlvbnMuZGVwdGg7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5VGltZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5VGltZSA9IG9wdGlvbnMuZGVsYXlUaW1lIC8gMTAwMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGNvbnRyb2xzIHRoZSBkZWxheVRpbWVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGFub3RoZXIgTEZPIGZvciB0aGUgcmlnaHQgc2lkZSB3aXRoIGEgMTgwIGRlZ3JlZSBwaGFzZSBkaWZmXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9SID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgICAgICdwaGFzZSc6IDE4MFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGRlbGF5IGZvciBsZWZ0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZUwgPSBuZXcgVG9uZS5EZWxheSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGRlbGF5IGZvciByaWdodFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVSID0gbmV3IFRvbmUuRGVsYXkoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBmcmVxdWVuY3kgb2YgdGhlIExGTyB3aGljaCBtb2R1bGF0ZXMgdGhlIGRlbGF5VGltZS5cblx0XHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmb0wuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNoYWluKHRoaXMuX2RlbGF5Tm9kZUwsIHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbih0aGlzLl9kZWxheU5vZGVSLCB0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIC8vYW5kIHBhc3MgdGhyb3VnaCB0byBtYWtlIHRoZSBkZXR1bmUgYXBwYXJlbnRcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAvL2xmbyBzZXR1cFxuXHQgICAgICAgIHRoaXMuX2xmb0wuY29ubmVjdCh0aGlzLl9kZWxheU5vZGVMLmRlbGF5VGltZSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5jb25uZWN0KHRoaXMuX2RlbGF5Tm9kZVIuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBsZm9cblx0ICAgICAgICB0aGlzLl9sZm9MLnN0YXJ0KCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdGFydCgpO1xuXHQgICAgICAgIC8vaGF2ZSBvbmUgTEZPIGZyZXF1ZW5jeSBjb250cm9sIHRoZSBvdGhlclxuXHQgICAgICAgIHRoaXMuX2xmb0wuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fbGZvUi5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9kZXB0aDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS52YWx1ZSA9IG9wdGlvbnMuZnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZyZXF1ZW5jeSddKTtcblx0ICAgICAgICB0aGlzLnNwcmVhZCA9IG9wdGlvbnMuc3ByZWFkO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ2hvcnVzLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DaG9ydXMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDEuNSxcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMy41LFxuXHQgICAgICAgICdkZXB0aCc6IDAuNyxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnc3ByZWFkJzogMTgwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlcHRoIG9mIHRoZSBlZmZlY3QuIEEgZGVwdGggb2YgMSBtYWtlcyB0aGUgZGVsYXlUaW1lXG5cdFx0ICogbW9kdWxhdGUgYmV0d2VlbiAwIGFuZCAyKmRlbGF5VGltZSAoY2VudGVyZWQgYXJvdW5kIHRoZSBkZWxheVRpbWUpLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNob3J1cyNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQG5hbWUgZGVwdGhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICdkZXB0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlcHRoO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGVwdGgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGVwdGggPSBkZXB0aDtcblx0ICAgICAgICAgICAgdmFyIGRldmlhdGlvbiA9IHRoaXMuX2RlbGF5VGltZSAqIGRlcHRoO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1pbiA9IE1hdGgubWF4KHRoaXMuX2RlbGF5VGltZSAtIGRldmlhdGlvbiwgMCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wubWF4ID0gdGhpcy5fZGVsYXlUaW1lICsgZGV2aWF0aW9uO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1pbiA9IE1hdGgubWF4KHRoaXMuX2RlbGF5VGltZSAtIGRldmlhdGlvbiwgMCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWF4ID0gdGhpcy5fZGVsYXlUaW1lICsgZGV2aWF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlbGF5VGltZSBpbiBtaWxsaXNlY29uZHMgb2YgdGhlIGNob3J1cy4gQSBsYXJnZXIgZGVsYXlUaW1lXG5cdFx0ICogd2lsbCBnaXZlIGEgbW9yZSBwcm9ub3VuY2VkIGVmZmVjdC4gTm9taW5hbCByYW5nZSBhIGRlbGF5VGltZVxuXHRcdCAqIGlzIGJldHdlZW4gMiBhbmQgMjBtcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge01pbGxpc2Vjb25kc31cblx0XHQgKiBAbmFtZSBkZWxheVRpbWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICdkZWxheVRpbWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWxheVRpbWUgKiAxMDAwO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGVsYXlUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlbGF5VGltZSA9IGRlbGF5VGltZSAvIDEwMDA7XG5cdCAgICAgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9kZXB0aDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvc2NpbGxhdG9yIHR5cGUgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmb0wudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEFtb3VudCBvZiBzdGVyZW8gc3ByZWFkLiBXaGVuIHNldCB0byAwLCBib3RoIExGTydzIHdpbGwgYmUgcGFubmVkIGNlbnRyYWxseS5cblx0XHQgKiBXaGVuIHNldCB0byAxODAsIExGTydzIHdpbGwgYmUgcGFubmVkIGhhcmQgbGVmdCBhbmQgcmlnaHQgcmVzcGVjdGl2ZWx5LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNob3J1cyNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9SLnBoYXNlIC0gdGhpcy5fbGZvTC5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnBoYXNlID0gOTAgLSBzcHJlYWQgLyAyO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnBoYXNlID0gc3ByZWFkIC8gMiArIDkwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DaG9ydXN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hvcnVzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DaG9ydXM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Db252b2x2ZXIgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgTmF0aXZlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgIFtDb252b2x2ZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1jb252b2x2ZXJub2RlLWludGVyZmFjZSkuXG5cdFx0ICogICAgICAgICAgQ29udm9sdXRpb24gaXMgdXNlZnVsIGZvciByZXZlcmIgYW5kIGZpbHRlciBlbXVsYXRpb24uIFJlYWQgbW9yZSBhYm91dCBjb252b2x1dGlvbiByZXZlcmIgb25cblx0XHQgKiAgICAgICAgICBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db252b2x1dGlvbl9yZXZlcmIpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfFRvbmUuQnVmZmVyfE9iamVjdH0gW3VybF0gVGhlIFVSTCBvZiB0aGUgaW1wdWxzZSByZXNwb25zZSBvciB0aGUgVG9uZS5CdWZmZXJcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aWFuaW5nIHRoZSBpbXB1bHNlIHJlc3BvbnNlLlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2luaXRpYWxpemluZyB0aGUgY29udm9sdmVyIHdpdGggYW4gaW1wdWxzZSByZXNwb25zZVxuXHRcdCAqIHZhciBjb252b2x2ZXIgPSBuZXcgVG9uZS5Db252b2x2ZXIoXCIuL3BhdGgvdG8vaXIud2F2XCIpLnRvTWFzdGVyKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgIF0sIFRvbmUuQ29udm9sdmVyKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnZvbHZlciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0NvbnZvbHZlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVDb252b2x2ZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29udm9sdXRpb24gYnVmZmVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIob3B0aW9ucy51cmwsIGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY29udm9sdmVyLmJ1ZmZlciA9IGJ1ZmZlci5nZXQoKTtcblx0ICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQoKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9jb252b2x2ZXIpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ29udm9sdmVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlci5kZWZhdWx0cyA9IHsgJ29ubG9hZCc6IFRvbmUubm9PcCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjb252b2x2ZXIncyBidWZmZXJcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ29udm9sdmVyI1xuXHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJ9XG5cdFx0ICogIEBuYW1lIGJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udm9sdmVyLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5nZXQoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnZvbHZlci5idWZmZXIgPSB0aGlzLl9idWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgTG9hZCBhbiBpbXB1bHNlIHJlc3BvbnNlIHVybCBhcyBhbiBhdWRpbyBidWZmZXIuXG5cdFx0ICogIERlY29kZXMgdGhlIGF1ZGlvIGFzeW5jaHJvbm91c2x5IGFuZCBpbnZva2VzXG5cdFx0ICogIHRoZSBjYWxsYmFjayBvbmNlIHRoZSBhdWRpbyBidWZmZXIgbG9hZHMuXG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgYnVmZmVyIHRvIGxvYWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgZmlsZXR5cGUgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIuXG5cdFx0ICogIEBwYXJhbSAge2Z1bmN0aW9uPX0gY2FsbGJhY2tcblx0XHQgKiAgQHJldHVybnMge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sb2FkKHVybCwgZnVuY3Rpb24gKGJ1ZmYpIHtcblx0ICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBidWZmO1xuXHQgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ29udm9sdmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ29udm9sdmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5EaXN0b3J0aW9uIGlzIGEgc2ltcGxlIGRpc3RvcnRpb24gZWZmZWN0IHVzaW5nIFRvbmUuV2F2ZVNoYXBlci5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmcm9tIFthIHN0YWNrb3ZlcmZsb3cgYW5zd2VyXShodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjMxMzQwOCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8T2JqZWN0fSBbZGlzdG9ydGlvbl0gVGhlIGFtb3VudCBvZiBkaXN0b3J0aW9uIChub21pbmFsIHJhbmdlIG9mIDAtMSlcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZGlzdCA9IG5ldyBUb25lLkRpc3RvcnRpb24oMC44KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBmbSA9IG5ldyBUb25lLlNpbXBsZUZNKCkuY29ubmVjdChkaXN0KTtcblx0XHQgKiAvL3RoaXMgc291bmRzIGdvb2Qgb24gYmFzcyBub3Rlc1xuXHRcdCAqIGZtLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQTFcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRGlzdG9ydGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2Rpc3RvcnRpb24nXSwgVG9uZS5EaXN0b3J0aW9uKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoNDA5Nik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBob2xkcyB0aGUgZGlzdG9ydGlvbiBhbW91bnRcblx0XHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGlzdG9ydGlvbiA9IG9wdGlvbnMuZGlzdG9ydGlvbjtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fc2hhcGVyKTtcblx0ICAgICAgICB0aGlzLmRpc3RvcnRpb24gPSBvcHRpb25zLmRpc3RvcnRpb247XG5cdCAgICAgICAgdGhpcy5vdmVyc2FtcGxlID0gb3B0aW9ucy5vdmVyc2FtcGxlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRGlzdG9ydGlvbiwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkRpc3RvcnRpb24uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Rpc3RvcnRpb24nOiAwLjQsXG5cdCAgICAgICAgJ292ZXJzYW1wbGUnOiAnbm9uZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYW1vdW50IG9mIGRpc3RvcnRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRGlzdG9ydGlvbiNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQG5hbWUgZGlzdG9ydGlvblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRGlzdG9ydGlvbi5wcm90b3R5cGUsICdkaXN0b3J0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzdG9ydGlvbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGFtb3VudCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kaXN0b3J0aW9uID0gYW1vdW50O1xuXHQgICAgICAgICAgICB2YXIgayA9IGFtb3VudCAqIDEwMDtcblx0ICAgICAgICAgICAgdmFyIGRlZyA9IE1hdGguUEkgLyAxODA7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5zZXRNYXAoZnVuY3Rpb24gKHgpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyh4KSA8IDAuMDAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9zaG91bGQgb3V0cHV0IDAgd2hlbiBpbnB1dCBpcyAwXG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMyArIGspICogeCAqIDIwICogZGVnIC8gKE1hdGguUEkgKyBrICogTWF0aC5hYnMoeCkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvdmVyc2FtcGxpbmcgb2YgdGhlIGVmZmVjdC4gQ2FuIGVpdGhlciBiZSBcIm5vbmVcIiwgXCIyeFwiIG9yIFwiNHhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5EaXN0b3J0aW9uI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgb3ZlcnNhbXBsZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRGlzdG9ydGlvbi5wcm90b3R5cGUsICdvdmVyc2FtcGxlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvdmVyc2FtcGxpbmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGUgPSBvdmVyc2FtcGxpbmc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EaXN0b3J0aW9ufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRpc3RvcnRpb24ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRGlzdG9ydGlvbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiBcdEBjbGFzcyAgVG9uZS5GZWVkYmFja0VmZmVjdCBwcm92aWRlcyBhIGxvb3AgYmV0d2VlbiBhbiBcblx0XHQgKiBcdCAgICAgICAgYXVkaW8gc291cmNlIGFuZCBpdHMgb3duIG91dHB1dC4gVGhpcyBpcyBhIGJhc2UtY2xhc3Ncblx0XHQgKiBcdCAgICAgICAgZm9yIGZlZWRiYWNrIGVmZmVjdHMuIFxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbZmVlZGJhY2tdIFRoZSBpbml0aWFsIGZlZWRiYWNrIHZhbHVlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZlZWRiYWNrJ10sIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGdhaW4gd2hpY2ggY29udHJvbHMgdGhlIGZlZWRiYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLmZlZWRiYWNrLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2Ygc2lnbmFsIHdoaWNoIGlzIGZlZCBiYWNrIGludG8gdGhlIGVmZmVjdCBpbnB1dC4gXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSB0aGlzLl9mZWVkYmFja0dhaW4uZ2Fpbjtcblx0ICAgICAgICAvL3RoZSBmZWVkYmFjayBsb29wXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4uY2hhaW4odGhpcy5fZmVlZGJhY2tHYWluLCB0aGlzLmVmZmVjdFNlbmQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZmVlZGJhY2snXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GZWVkYmFja0VmZmVjdCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QuZGVmYXVsdHMgPSB7ICdmZWVkYmFjayc6IDAuMTI1IH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GZWVkYmFja0VmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZmVlZGJhY2snXSk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0dhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZlZWRiYWNrRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRmVlZGJhY2tEZWxheSBpcyBhIERlbGF5Tm9kZSBpbiB3aGljaCBwYXJ0IG9mIG91dHB1dFxuXHRcdCAqICAgICAgICAgIHNpZ25hbCBpcyBmZWQgYmFjayBpbnRvIHRoZSBkZWxheS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRmVlZGJhY2tFZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtkZWxheVRpbWVdIFRoZSBkZWxheSBhcHBsaWVkIHRvIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2U9fSBmZWVkYmFjayBUaGUgYW1vdW50IG9mIHRoZSBlZmZlY3RlZCBzaWduYWwgd2hpY2hcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmZWQgYmFjayB0aHJvdWdoIHRoZSBkZWxheS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZmVlZGJhY2tEZWxheSA9IG5ldyBUb25lLkZlZWRiYWNrRGVsYXkoXCI4blwiLCAwLjUpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIHRvbSA9IG5ldyBUb25lLkRydW1TeW50aCh7XG5cdFx0ICogXHRcIm9jdGF2ZXNcIiA6IDQsXG5cdFx0ICogXHRcInBpdGNoRGVjYXlcIiA6IDAuMVxuXHRcdCAqIH0pLmNvbm5lY3QoZmVlZGJhY2tEZWxheSk7XG5cdFx0ICogdG9tLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQTJcIixcIjMyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tEZWxheSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnZmVlZGJhY2snXG5cdCAgICAgICAgXSwgVG9uZS5GZWVkYmFja0RlbGF5KTtcblx0ICAgICAgICBUb25lLkZlZWRiYWNrRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUsIG9wdGlvbnMubWF4RGVsYXkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheVRpbWUgb2YgdGhlIERlbGF5Tm9kZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IHRoaXMuX2RlbGF5Tm9kZS5kZWxheVRpbWU7XG5cdCAgICAgICAgLy8gY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9kZWxheU5vZGUpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmVlZGJhY2tEZWxheSwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0RlbGF5LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjI1LFxuXHQgICAgICAgICdtYXhEZWxheSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRmVlZGJhY2tEZWxheX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0RlbGF5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydkZWxheVRpbWUnXSk7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZlZWRiYWNrRGVsYXk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIGFuIGFycmF5IG9mIGNvbWIgZmlsdGVyIGRlbGF5IHZhbHVlcyBmcm9tIEZyZWV2ZXJiIGltcGxlbWVudGF0aW9uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGNvbWJGaWx0ZXJUdW5pbmdzID0gW1xuXHQgICAgICAgIDE1NTcgLyA0NDEwMCxcblx0ICAgICAgICAxNjE3IC8gNDQxMDAsXG5cdCAgICAgICAgMTQ5MSAvIDQ0MTAwLFxuXHQgICAgICAgIDE0MjIgLyA0NDEwMCxcblx0ICAgICAgICAxMjc3IC8gNDQxMDAsXG5cdCAgICAgICAgMTM1NiAvIDQ0MTAwLFxuXHQgICAgICAgIDExODggLyA0NDEwMCxcblx0ICAgICAgICAxMTE2IC8gNDQxMDBcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgYW4gYXJyYXkgb2YgYWxscGFzcyBmaWx0ZXIgZnJlcXVlbmN5IHZhbHVlcyBmcm9tIEZyZWV2ZXJiIGltcGxlbWVudGF0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcyA9IFtcblx0ICAgICAgICAyMjUsXG5cdCAgICAgICAgNTU2LFxuXHQgICAgICAgIDQ0MSxcblx0ICAgICAgICAzNDFcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRnJlZXZlcmIgaXMgYSByZXZlcmIgYmFzZWQgb24gW0ZyZWV2ZXJiXShodHRwczovL2Njcm1hLnN0YW5mb3JkLmVkdS9+am9zL3Bhc3AvRnJlZXZlcmIuaHRtbCkuXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgb24gcmV2ZXJiIG9uIFtTb3VuZCBPbiBTb3VuZF0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDA0MDgzOTAyL2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbTo4MC9zb3MvZmViMDEvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmFzcCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFtyb29tU2l6ZV0gQ29ycmVsYXRlZCB0byB0aGUgZGVjYXkgdGltZS5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtkYW1wZW5pbmddIFRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIGEgbG93cGFzcyBmaWx0ZXIgYXMgcGFydFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJldmVyYi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZnJlZXZlcmIgPSBuZXcgVG9uZS5GcmVldmVyYigpLnRvTWFzdGVyKCk7XG5cdFx0ICogZnJlZXZlcmIuZGFtcGVuaW5nLnZhbHVlID0gMTAwMDtcblx0XHQgKiAvL3JvdXRpbmcgc3ludGggdGhyb3VnaCB0aGUgcmV2ZXJiXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuQU1TeW50aCgpLmNvbm5lY3QoZnJlZXZlcmIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVldmVyYiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdyb29tU2l6ZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSwgVG9uZS5GcmVldmVyYik7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcm9vbVNpemUgdmFsdWUgYmV0d2Vlbi4gQSBsYXJnZXIgcm9vbVNpemVcblx0XHRcdCAqICB3aWxsIHJlc3VsdCBpbiBhIGxvbmdlciBkZWNheS5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLnJvb21TaXplLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZGFtcGVuaW5nIG9mIHRoZSByZXZlcmJlcmFudCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRhbXBlbmluZywgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbWIgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29tYkZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSBsZWZ0XG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0wgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSByaWdodFxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSID0gW107XG5cdCAgICAgICAgLy9tYWtlIHRoZSBhbGxwYXNzIGZpbHRlcnMgb24gdGhlIHJpZ2h0XG5cdCAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMubGVuZ3RoOyBsKyspIHtcblx0ICAgICAgICAgICAgdmFyIGFsbHBhc3NMID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBhbGxwYXNzTC50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBhbGxwYXNzTC5mcmVxdWVuY3kudmFsdWUgPSBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXNbbF07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTC5wdXNoKGFsbHBhc3NMKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9tYWtlIHRoZSBhbGxwYXNzIGZpbHRlcnMgb24gdGhlIGxlZnRcblx0ICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcy5sZW5ndGg7IHIrKykge1xuXHQgICAgICAgICAgICB2YXIgYWxscGFzc1IgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgIGFsbHBhc3NSLnR5cGUgPSAnYWxscGFzcyc7XG5cdCAgICAgICAgICAgIGFsbHBhc3NSLmZyZXF1ZW5jeS52YWx1ZSA9IGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llc1tyXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSLnB1c2goYWxscGFzc1IpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL21ha2UgdGhlIGNvbWIgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29tYkZpbHRlclR1bmluZ3MubGVuZ3RoOyBjKyspIHtcblx0ICAgICAgICAgICAgdmFyIGxmcGYgPSBuZXcgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlcihjb21iRmlsdGVyVHVuaW5nc1tjXSk7XG5cdCAgICAgICAgICAgIGlmIChjIDwgY29tYkZpbHRlclR1bmluZ3MubGVuZ3RoIC8gMikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbihsZnBmLCB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbMF0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbihsZnBmLCB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbMF0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMucm9vbVNpemUuY29ubmVjdChsZnBmLnJlc29uYW5jZSk7XG5cdCAgICAgICAgICAgIHRoaXMuZGFtcGVuaW5nLmNvbm5lY3QobGZwZi5kYW1wZW5pbmcpO1xuXHQgICAgICAgICAgICB0aGlzLl9jb21iRmlsdGVycy5wdXNoKGxmcGYpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NoYWluIHRoZSBhbGxwYXNzIGZpbHRlcnMgdG9nZXRlaHJcblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgdGhpcy5fYWxscGFzc0ZpbHRlcnNMKTtcblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgdGhpcy5fYWxscGFzc0ZpbHRlcnNSKTtcblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbdGhpcy5fYWxscGFzc0ZpbHRlcnNMLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbdGhpcy5fYWxscGFzc0ZpbHRlcnNSLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdyb29tU2l6ZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GcmVldmVyYiwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlZXZlcmIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Jvb21TaXplJzogMC43LFxuXHQgICAgICAgICdkYW1wZW5pbmcnOiAzMDAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GcmVldmVyYn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVldmVyYi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGFsID0gMDsgYWwgPCB0aGlzLl9hbGxwYXNzRmlsdGVyc0wubGVuZ3RoOyBhbCsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTFthbF0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbYWxdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBhciA9IDA7IGFyIDwgdGhpcy5fYWxscGFzc0ZpbHRlcnNSLmxlbmd0aDsgYXIrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbYXJdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSW2FyXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUiA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgY2YgPSAwOyBjZiA8IHRoaXMuX2NvbWJGaWx0ZXJzLmxlbmd0aDsgY2YrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9jb21iRmlsdGVyc1tjZl0uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9jb21iRmlsdGVyc1tjZl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jb21iRmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncm9vbVNpemUnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRnJlZXZlcmI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIGFuIGFycmF5IG9mIHRoZSBjb21iIGZpbHRlciBkZWxheSB0aW1lIHZhbHVlc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBjb21iRmlsdGVyRGVsYXlUaW1lcyA9IFtcblx0ICAgICAgICAxNjg3IC8gMjUwMDAsXG5cdCAgICAgICAgMTYwMSAvIDI1MDAwLFxuXHQgICAgICAgIDIwNTMgLyAyNTAwMCxcblx0ICAgICAgICAyMjUxIC8gMjUwMDBcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIHJlc29uYW5jZXMgb2YgZWFjaCBvZiB0aGUgY29tYiBmaWx0ZXJzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGNvbWJGaWx0ZXJSZXNvbmFuY2VzID0gW1xuXHQgICAgICAgIDAuNzczLFxuXHQgICAgICAgIDAuODAyLFxuXHQgICAgICAgIDAuNzUzLFxuXHQgICAgICAgIDAuNzMzXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBhbGxwYXNzIGZpbHRlciBmcmVxdWVuY2llc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBhbGxwYXNzRmlsdGVyRnJlcXMgPSBbXG5cdCAgICAgICAgMzQ3LFxuXHQgICAgICAgIDExMyxcblx0ICAgICAgICAzN1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5KQ1JldmVyYiBpcyBhIHNpbXBsZSBbU2Nocm9lZGVyIFJldmVyYmVyYXRvcl0oaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvfmpvcy9wYXNwL1NjaHJvZWRlcl9SZXZlcmJlcmF0b3JzLmh0bWwpXG5cdFx0ICogICAgICAgICB0dW5lZCBieSBKb2huIENob3duaW5nIGluIDE5NzAuXG5cdFx0ICogICAgICAgICBJdCBpcyBtYWRlIHVwIG9mIHRocmVlIGFsbHBhc3MgZmlsdGVycyBhbmQgZm91ciBUb25lLkZlZWRiYWNrQ29tYkZpbHRlci5cblx0XHQgKlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbcm9vbVNpemVdIENvb3JlbGF0ZXMgdG8gdGhlIGRlY2F5IHRpbWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHJldmVyYiA9IG5ldyBUb25lLkpDUmV2ZXJiKDAuNCkuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdFx0ICogdmFyIGRlbGF5ID0gbmV3IFRvbmUuRmVlZGJhY2tEZWxheSgwLjUpO1xuXHRcdCAqIC8vY29ubmVjdGluZyB0aGUgc3ludGggdG8gcmV2ZXJiIHRocm91Z2ggZGVsYXlcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5EdW9TeW50aCgpLmNoYWluKGRlbGF5LCByZXZlcmIpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQTRcIixcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5KQ1JldmVyYiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3Jvb21TaXplJ10sIFRvbmUuSkNSZXZlcmIpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcm9vbSBzaXplIGNvbnRyb2wgdmFsdWVzIGJldHdlZW4gWzAsMV1cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLnJvb21TaXplLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSByb29tIHNpemVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZSA9IG5ldyBUb25lLlNjYWxlKC0wLjczMywgMC4xOTcpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGEgc2VyaWVzIG9mIGFsbHBhc3MgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBwYXJhbGxlbCBmZWVkYmFjayBjb21iIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvL21ha2UgdGhlIGFsbHBhc3MgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGFmID0gMDsgYWYgPCBhbGxwYXNzRmlsdGVyRnJlcXMubGVuZ3RoOyBhZisrKSB7XG5cdCAgICAgICAgICAgIHZhciBhbGxwYXNzID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBhbGxwYXNzLnR5cGUgPSAnYWxscGFzcyc7XG5cdCAgICAgICAgICAgIGFsbHBhc3MuZnJlcXVlbmN5LnZhbHVlID0gYWxscGFzc0ZpbHRlckZyZXFzW2FmXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnMucHVzaChhbGxwYXNzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hbmQgdGhlIGNvbWIgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGNmID0gMDsgY2YgPCBjb21iRmlsdGVyRGVsYXlUaW1lcy5sZW5ndGg7IGNmKyspIHtcblx0ICAgICAgICAgICAgdmFyIGZiY2YgPSBuZXcgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIoY29tYkZpbHRlckRlbGF5VGltZXNbY2ZdLCAwLjEpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplLmNvbm5lY3QoZmJjZi5yZXNvbmFuY2UpO1xuXHQgICAgICAgICAgICBmYmNmLnJlc29uYW5jZS52YWx1ZSA9IGNvbWJGaWx0ZXJSZXNvbmFuY2VzW2NmXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNbdGhpcy5fYWxscGFzc0ZpbHRlcnMubGVuZ3RoIC0gMV0uY29ubmVjdChmYmNmKTtcblx0ICAgICAgICAgICAgaWYgKGNmIDwgY29tYkZpbHRlckRlbGF5VGltZXMubGVuZ3RoIC8gMikge1xuXHQgICAgICAgICAgICAgICAgZmJjZi5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBmYmNmLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzLnB1c2goZmJjZik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY2hhaW4gdGhlIGFsbHBhc3MgZmlsdGVycyB0b2dldGhlclxuXHQgICAgICAgIHRoaXMucm9vbVNpemUuY29ubmVjdCh0aGlzLl9zY2FsZVJvb21TaXplKTtcblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgdGhpcy5fYWxscGFzc0ZpbHRlcnMpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY29ubmVjdCh0aGlzLl9hbGxwYXNzRmlsdGVyc1swXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jb25uZWN0KHRoaXMuX2FsbHBhc3NGaWx0ZXJzWzBdKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3Jvb21TaXplJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuSkNSZXZlcmIsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuSkNSZXZlcmIuZGVmYXVsdHMgPSB7ICdyb29tU2l6ZSc6IDAuNSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5KQ1JldmVyYn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5KQ1JldmVyYi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGFwZiA9IDA7IGFwZiA8IHRoaXMuX2FsbHBhc3NGaWx0ZXJzLmxlbmd0aDsgYXBmKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNbYXBmXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzW2FwZl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgZmJjZiA9IDA7IGZiY2YgPCB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzLmxlbmd0aDsgZmJjZisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnNbZmJjZl0uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzW2ZiY2ZdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydyb29tU2l6ZSddKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5KQ1JldmVyYjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1pZC9TaWRlIHByb2Nlc3Npbmcgc2VwYXJhdGVzIHRoZSB0aGUgJ21pZCcgc2lnbmFsXG5cdFx0ICogICAgICAgICAod2hpY2ggY29tZXMgb3V0IG9mIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBjaGFubmVsKVxuXHRcdCAqICAgICAgICAgYW5kIHRoZSAnc2lkZScgKHdoaWNoIG9ubHkgY29tZXMgb3V0IG9mIHRoZSB0aGUgc2lkZSBjaGFubmVscylcblx0XHQgKiAgICAgICAgIGFuZCBlZmZlY3RzIHRoZW0gc2VwYXJhdGVseSBiZWZvcmUgYmVpbmcgcmVjb21iaW5lZC5cblx0XHQgKiAgICAgICAgIEFwcGxpZXMgYSBNaWQvU2lkZSBzZXBlcmF0aW9uIGFuZCByZWNvbWJpbmF0aW9uLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZvdW5kIGluIFtrdnJhdWRpbyBmb3J1bXNdKGh0dHA6Ly93d3cua3ZyYXVkaW8uY29tL2ZvcnVtL3ZpZXd0b3BpYy5waHA/dD0yMTI1ODcpLlxuXHRcdCAqICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgIFRoaXMgaXMgYSBiYXNlLWNsYXNzIGZvciBNaWQvU2lkZSBFZmZlY3RzLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL3NpZGUgc3BsaXRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZVNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSBuZXcgVG9uZS5NaWRTaWRlU3BsaXQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL3NpZGUgbWVyZ2Vcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZU1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSBuZXcgVG9uZS5NaWRTaWRlTWVyZ2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHNlbmQuIENvbm5lY3QgdG8gbWlkIHByb2Nlc3Npbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWRTZW5kID0gdGhpcy5fbWlkU2lkZVNwbGl0Lm1pZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSBzZW5kLiBDb25uZWN0IHRvIHNpZGUgcHJvY2Vzc2luZ1xuXHRcdFx0ICogIEB0eXBlIHtUb25lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGVTZW5kID0gdGhpcy5fbWlkU2lkZVNwbGl0LnNpZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCByZXR1cm4gY29ubmVjdGlvblxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWRSZXR1cm4gPSB0aGlzLl9taWRTaWRlTWVyZ2UubWlkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIHJldHVybiBjb25uZWN0aW9uXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGVSZXR1cm4gPSB0aGlzLl9taWRTaWRlTWVyZ2Uuc2lkZTtcblx0ICAgICAgICAvL3RoZSBjb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jb25uZWN0KHRoaXMuX21pZFNpZGVTcGxpdCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkU2lkZUVmZmVjdCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkU2VuZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlU2VuZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWRSZXR1cm4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZVJldHVybiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZUVmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGhhc2VyIGlzIGEgcGhhc2VyIGVmZmVjdC4gUGhhc2VycyB3b3JrIGJ5IGNoYW5naW5nIHRoZSBwaGFzZVxuXHRcdCAqICAgICAgICAgb2YgZGlmZmVyZW50IGZyZXF1ZW5jeSBjb21wb25lbnRzIG9mIGFuIGluY29taW5nIHNpZ25hbC4gUmVhZCBtb3JlIG9uXG5cdFx0ICogICAgICAgICBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QaGFzZXJfKGVmZmVjdCkpLlxuXHRcdCAqICAgICAgICAgSW5zcGlyYXRpb24gZm9yIHRoaXMgcGhhc2VyIGNvbWVzIGZyb20gW1R1bmEuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9EaW5haG1vZS90dW5hLykuXG5cdFx0ICpcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgc3BlZWQgb2YgdGhlIHBoYXNpbmcuXG5cdFx0ICpcdEBwYXJhbSB7bnVtYmVyfSBbb2N0YXZlc10gVGhlIG9jdGF2ZXMgb2YgdGhlIGVmZmVjdC5cblx0XHQgKlx0QHBhcmFtIHtGcmVxdWVuY3l9IFtiYXNlRnJlcXVlbmN5XSBUaGUgYmFzZSBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlcnMuXG5cdFx0ICpcdEBleGFtcGxlXG5cdFx0ICogdmFyIHBoYXNlciA9IG5ldyBUb25lLlBoYXNlcih7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogMTUsXG5cdFx0ICogXHRcIm9jdGF2ZXNcIiA6IDUsXG5cdFx0ICogXHRcImJhc2VGcmVxdWVuY3lcIiA6IDEwMDBcblx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkZNU3ludGgoKS5jb25uZWN0KHBoYXNlcik7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJFM1wiLCBcIjJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaGFzZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9zZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnLFxuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeSdcblx0ICAgICAgICBdLCBUb25lLlBoYXNlcik7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGNvbnRyb2xzIHRoZSBmcmVxdWVuY3kgb24gdGhlIGxlZnQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG5ldyBUb25lLkxGTyhvcHRpb25zLmZyZXF1ZW5jeSwgMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBjb250cm9scyB0aGUgZnJlcXVlbmN5IG9uIHRoZSByaWdodCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9SID0gbmV3IFRvbmUuTEZPKG9wdGlvbnMuZnJlcXVlbmN5LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnBoYXNlID0gMTgwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBiYXNlIG1vZHVsYXRpb24gZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb2N0YXZlcyBvZiB0aGUgcGhhc2luZ1xuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHF1YWxpdHkgZmFjdG9yIG9mIHRoZSBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLlEsIFRvbmUuVHlwZS5Qb3NpdGl2ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFycmF5IG9mIGZpbHRlcnMgZm9yIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNMID0gdGhpcy5fbWFrZUZpbHRlcnMob3B0aW9ucy5zdGFnZXMsIHRoaXMuX2xmb0wsIHRoaXMuUSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFycmF5IG9mIGZpbHRlcnMgZm9yIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNSID0gdGhpcy5fbWFrZUZpbHRlcnMob3B0aW9ucy5zdGFnZXMsIHRoaXMuX2xmb1IsIHRoaXMuUSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiB0aGUgZnJlcXVlbmN5IG9mIHRoZSBlZmZlY3Rcblx0XHRcdCAqIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvTC5mcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kudmFsdWUgPSBvcHRpb25zLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlbSB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY29ubmVjdCh0aGlzLl9maWx0ZXJzTFswXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jb25uZWN0KHRoaXMuX2ZpbHRlcnNSWzBdKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJzTFtvcHRpb25zLnN0YWdlcyAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJzUltvcHRpb25zLnN0YWdlcyAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIGZyZXF1ZW5jeSB3aXRoIG9uZSBMRk9cblx0ICAgICAgICB0aGlzLl9sZm9MLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2xmb1IuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3NldCB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHRoaXMuYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgbGZvXG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdGFydCgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RhcnQoKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBoYXNlciwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHRzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge29iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAwLjUsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAzLFxuXHQgICAgICAgICdzdGFnZXMnOiAxMCxcblx0ICAgICAgICAnUSc6IDEwLFxuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMzUwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBzdGFnZXNcblx0XHQgKiAgQHJldHVybnMge0FycmF5fSB0aGUgbnVtYmVyIG9mIGZpbHRlcnMgYWxsIGNvbm5lY3RlZCB0b2dldGhlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaGFzZXIucHJvdG90eXBlLl9tYWtlRmlsdGVycyA9IGZ1bmN0aW9uIChzdGFnZXMsIGNvbm5lY3RUb0ZyZXEsIFEpIHtcblx0ICAgICAgICB2YXIgZmlsdGVycyA9IG5ldyBBcnJheShzdGFnZXMpO1xuXHQgICAgICAgIC8vbWFrZSBhbGwgdGhlIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWdlczsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBmaWx0ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgIGZpbHRlci50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBRLmNvbm5lY3QoZmlsdGVyLlEpO1xuXHQgICAgICAgICAgICBjb25uZWN0VG9GcmVxLmNvbm5lY3QoZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgIGZpbHRlcnNbaV0gPSBmaWx0ZXI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuY29ubmVjdFNlcmllcy5hcHBseShUb25lLCBmaWx0ZXJzKTtcblx0ICAgICAgICByZXR1cm4gZmlsdGVycztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhlIHBoYXNlIGdvZXMgYWJvdmVcblx0XHQgKiB0aGUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBoYXNlciNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGhhc2VyLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0YXZlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0YXZlcztcblx0ICAgICAgICAgICAgdmFyIG1heCA9IHRoaXMuX2Jhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCBvY3RhdmVzKTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5tYXggPSBtYXg7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHRoZSBiYXNlIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVycy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaGFzZXIjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QaGFzZXIucHJvdG90eXBlLCAnYmFzZUZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBmcmVxO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1pbiA9IGZyZXE7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWluID0gZnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QaGFzZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5RLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVyc0wubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc0xbaV0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzTFtpXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNMID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX2ZpbHRlcnNSLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNSW2pdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1Jbal0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBoYXNlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEp1c3QgbGlrZSBhIHN0ZXJlbyBmZWVkYmFjayBlZmZlY3QsIGJ1dCB0aGUgZmVlZGJhY2sgaXMgcm91dGVkIGZyb20gbGVmdCB0byByaWdodFxuXHRcdCAqICAgICAgICAgYW5kIHJpZ2h0IHRvIGxlZnQgaW5zdGVhZCBvZiBvbiB0aGUgc2FtZSBjaGFubmVsLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZlZWRiYWNrJ10sIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBmZWVkYmFjayBmcm9tIHRoZSBvdXRwdXRcblx0XHRcdCAqICBiYWNrIGludG8gdGhlIGlucHV0IG9mIHRoZSBlZmZlY3QgKHJvdXRlZFxuXHRcdFx0ICogIGFjcm9zcyBsZWZ0IGFuZCByaWdodCBjaGFubmVscykuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mZWVkYmFjaywgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGVmdCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSByaWdodCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1JMID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTC5jaGFpbih0aGlzLl9mZWVkYmFja0xSLCB0aGlzLmVmZmVjdFNlbmRSKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIuY2hhaW4odGhpcy5fZmVlZGJhY2tSTCwgdGhpcy5lZmZlY3RTZW5kTCk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjay5mYW4odGhpcy5fZmVlZGJhY2tMUi5nYWluLCB0aGlzLl9mZWVkYmFja1JMLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZmVlZGJhY2snXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydmZWVkYmFjayddKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1JMLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1JMID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5QaW5nUG9uZ0RlbGF5IGlzIGEgZmVlZGJhY2sgZGVsYXkgZWZmZWN0IHdoZXJlIHRoZSBlY2hvIGlzIGhlYXJkXG5cdFx0ICogICAgICAgICAgZmlyc3QgaW4gb25lIGNoYW5uZWwgYW5kIG5leHQgaW4gdGhlIG9wcG9zaXRlIGNoYW5uZWwuIEluIGEgc3RlcmVvXG5cdFx0ICogICAgICAgICAgc3lzdGVtIHRoZXNlIGFyZSB0aGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMuXG5cdFx0ICogICAgICAgICAgUGluZ1BvbmdEZWxheSBpbiBtb3JlIHNpbXBsaWZpZWQgdGVybXMgaXMgdHdvIFRvbmUuRmVlZGJhY2tEZWxheXNcblx0XHQgKiAgICAgICAgICB3aXRoIGluZGVwZW5kZW50IGRlbGF5IHZhbHVlcy4gRWFjaCBkZWxheSBpcyByb3V0ZWQgdG8gb25lIGNoYW5uZWxcblx0XHQgKiAgICAgICAgICAobGVmdCBvciByaWdodCksIGFuZCB0aGUgY2hhbm5lbCB0cmlnZ2VyZWQgc2Vjb25kIHdpbGwgYWx3YXlzXG5cdFx0ICogICAgICAgICAgdHJpZ2dlciBhdCB0aGUgc2FtZSBpbnRlcnZhbCBhZnRlciB0aGUgZmlyc3QuXG5cdFx0ICpcblx0XHQgKiBcdEBjb25zdHJ1Y3RvclxuXHRcdCAqIFx0QGV4dGVuZHMge1RvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXlUaW1lIGJldHdlZW4gY29uc2VjdXRpdmUgZWNob3MuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2U9fSBmZWVkYmFjayBUaGUgYW1vdW50IG9mIHRoZSBlZmZlY3RlZCBzaWduYWwgd2hpY2hcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZlZCBiYWNrIHRocm91Z2ggdGhlIGRlbGF5LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwaW5nUG9uZyA9IG5ldyBUb25lLlBpbmdQb25nRGVsYXkoXCI0blwiLCAwLjIpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIGRydW0gPSBuZXcgVG9uZS5EcnVtU3ludGgoKS5jb25uZWN0KHBpbmdQb25nKTtcblx0XHQgKiBkcnVtLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCIzMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBpbmdQb25nRGVsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ2ZlZWRiYWNrJ1xuXHQgICAgICAgIF0sIFRvbmUuUGluZ1BvbmdEZWxheSk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZSBvbiB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xlZnREZWxheSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZSBvbiB0aGUgcmlnaHQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yaWdodERlbGF5ID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwcmVkZWxheSBvbiB0aGUgcmlnaHQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yaWdodFByZURlbGF5ID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSB0aW1lIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGVsYXlUaW1lLCBUb25lLlR5cGUuVGltZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbih0aGlzLl9sZWZ0RGVsYXksIHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbih0aGlzLl9yaWdodFByZURlbGF5LCB0aGlzLl9yaWdodERlbGF5LCB0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lLmZhbih0aGlzLl9sZWZ0RGVsYXkuZGVsYXlUaW1lLCB0aGlzLl9yaWdodERlbGF5LmRlbGF5VGltZSwgdGhpcy5fcmlnaHRQcmVEZWxheS5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8vcmVhcnJhbmdlZCB0aGUgZmVlZGJhY2sgdG8gYmUgYWZ0ZXIgdGhlIHJpZ2h0UHJlRGVsYXlcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSLmNvbm5lY3QodGhpcy5fcmlnaHREZWxheSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydkZWxheVRpbWUnXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QaW5nUG9uZ0RlbGF5LCBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaW5nUG9uZ0RlbGF5LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjI1LFxuXHQgICAgICAgICdtYXhEZWxheVRpbWUnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QaW5nUG9uZ0RlbGF5fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBpbmdQb25nRGVsYXkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0RGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xlZnREZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHREZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHREZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHRQcmVEZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHRQcmVEZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydkZWxheVRpbWUnXSk7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QaW5nUG9uZ0RlbGF5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QaXRjaFNoaWZ0IGRvZXMgbmVhci1yZWFsdGltZSBwaXRjaCBzaGlmdGluZyB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgVGhlIGVmZmVjdCBpcyBhY2hpZXZlZCBieSBzcGVlZGluZyB1cCBvciBzbG93aW5nIGRvd24gdGhlIGRlbGF5VGltZVxuXHRcdCAqICAgICAgICAgb2YgYSBEZWxheU5vZGUgdXNpbmcgYSBzYXd0b290aCB3YXZlLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZvdW5kIGluIFt0aGlzIHBkZl0oaHR0cDovL2RzcC1ib29rLm5hcm9kLnJ1L3NvdW5kcHJvYy5wZGYpLlxuXHRcdCAqICAgICAgICAgQWRkaXRpb25hbCByZWZlcmVuY2UgYnkgW01pbGxlciBQdWNrZXRdKGh0dHA6Ly9tc3AudWNzZC5lZHUvdGVjaG5pcXVlcy92MC4xMS9ib29rLWh0bWwvbm9kZTExNS5odG1sKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5GZWVkYmFja0VmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtJbnRlcnZhbD19IHBpdGNoIFRoZSBpbnRlcnZhbCB0byB0cmFuc3Bvc2UgdGhlIGluY29taW5nIHNpZ25hbCBieS5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGl0Y2hTaGlmdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3BpdGNoJ10sIFRvbmUuUGl0Y2hTaGlmdCk7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwaXRjaCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVXNlcyB0d28gRGVsYXlOb2RlcyB0byBjb3ZlciB1cCB0aGUganVtcCBpblxuXHRcdFx0ICogIHRoZSBzYXd0b290aCB3YXZlLlxuXHRcdFx0ICogIEB0eXBlICB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheUEgPSBuZXcgVG9uZS5EZWxheSgwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlyc3QgTEZPLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0EgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDAuMSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnc2F3dG9vdGgnXG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9kZWxheUEuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2Vjb25kIERlbGF5Tm9kZVxuXHRcdFx0ICogIEB0eXBlICB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheUIgPSBuZXcgVG9uZS5EZWxheSgwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlyc3QgTEZPLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0IgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDAuMSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnc2F3dG9vdGgnLFxuXHQgICAgICAgICAgICAncGhhc2UnOiAxODBcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2RlbGF5Qi5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENyb3NzZmFkZSBxdWlja2x5IGJldHdlZW4gdGhlIHR3byBkZWxheSBsaW5lc1xuXHRcdFx0ICogIHRvIGNvdmVyIHVwIHRoZSBqdW1wIGluIHRoZSBzYXd0b290aCB3YXZlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNyb3NzRmFkZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlID0gbmV3IFRvbmUuQ3Jvc3NGYWRlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTEZPIHdoaWNoIGFsdGVybmF0ZXMgYmV0d2VlbiB0aGUgdHdvXG5cdFx0XHQgKiAgZGVsYXkgbGluZXMgdG8gY292ZXIgdXAgdGhlIGRpc3Bhcml0eSBpbiB0aGVcblx0XHRcdCAqICBzYXd0b290aCB3YXZlLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZUxGTyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiAndHJpYW5nbGUnLFxuXHQgICAgICAgICAgICAncGhhc2UnOiA5MFxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5fY3Jvc3NGYWRlLmZhZGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrRGVsYXkgPSBuZXcgVG9uZS5EZWxheShvcHRpb25zLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBkZWxheSBvbiB0aGUgaW5wdXQgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9mZWVkYmFja0RlbGF5LmRlbGF5VGltZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZGVsYXlUaW1lJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZCB0aGUgY3VycmVudCBwaXRjaFxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BpdGNoID0gb3B0aW9ucy5waXRjaDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkIHRoZSBjdXJyZW50IHdpbmRvd1NpemVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl93aW5kb3dTaXplID0gb3B0aW9ucy53aW5kb3dTaXplO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgdHdvIGRlbGF5IGxpbmVzIHVwXG5cdCAgICAgICAgdGhpcy5fZGVsYXlBLmNvbm5lY3QodGhpcy5fY3Jvc3NGYWRlLmEpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Qi5jb25uZWN0KHRoaXMuX2Nyb3NzRmFkZS5iKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeS5mYW4odGhpcy5fbGZvQS5mcmVxdWVuY3ksIHRoaXMuX2xmb0IuZnJlcXVlbmN5LCB0aGlzLl9jcm9zc0ZhZGVMRk8uZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3JvdXRlIHRoZSBpbnB1dFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5mYW4odGhpcy5fZGVsYXlBLCB0aGlzLl9kZWxheUIpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZS5jaGFpbih0aGlzLl9mZWVkYmFja0RlbGF5LCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgTEZPcyBhdCB0aGUgc2FtZSB0aW1lXG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgdGhpcy5fbGZvQS5zdGFydChub3cpO1xuXHQgICAgICAgIHRoaXMuX2xmb0Iuc3RhcnQobm93KTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8uc3RhcnQobm93KTtcblx0ICAgICAgICAvL3NldCB0aGUgaW5pdGlhbCB2YWx1ZVxuXHQgICAgICAgIHRoaXMud2luZG93U2l6ZSA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QaXRjaFNoaWZ0LCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaXRjaFNoaWZ0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwaXRjaCc6IDAsXG5cdCAgICAgICAgJ3dpbmRvd1NpemUnOiAwLjEsXG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDAsXG5cdCAgICAgICAgJ2ZlZWRiYWNrJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlcGl0Y2ggdGhlIGluY29taW5nIHNpZ25hbCBieSBzb21lIGludGVydmFsIChtZWFzdXJlZFxuXHRcdCAqIGluIHNlbWktdG9uZXMpLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBpdGNoU2hpZnQjXG5cdFx0ICogQHR5cGUge0ludGVydmFsfVxuXHRcdCAqIEBuYW1lIHBpdGNoXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBwaXRjaFNoaWZ0LnBpdGNoID0gLTEyOyAvL2Rvd24gb25lIG9jdGF2ZVxuXHRcdCAqIHBpdGNoU2hpZnQucGl0Y2ggPSA3OyAvL3VwIGEgZmlmdGhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBpdGNoU2hpZnQucHJvdG90eXBlLCAncGl0Y2gnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9waXRjaDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BpdGNoID0gaW50ZXJ2YWw7XG5cdCAgICAgICAgICAgIHZhciBmYWN0b3IgPSAwO1xuXHQgICAgICAgICAgICBpZiAoaW50ZXJ2YWwgPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1pbiA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1heCA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1pbiA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1heCA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICBmYWN0b3IgPSBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhpbnRlcnZhbCAtIDEpICsgMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0EubWluID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0EubWF4ID0gMDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0IubWluID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0IubWF4ID0gMDtcblx0ICAgICAgICAgICAgICAgIGZhY3RvciA9IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGludGVydmFsKSAtIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZnJlcXVlbmN5LnZhbHVlID0gZmFjdG9yICogKDEuMiAvIHRoaXMuX3dpbmRvd1NpemUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHdpbmRvdyBzaXplIGNvcnJlc3BvbmRzIHJvdWdobHkgdG8gdGhlIHNhbXBsZSBsZW5ndGggaW4gYSBsb29waW5nIHNhbXBsZXIuXG5cdFx0ICogU21hbGxlciB2YWx1ZXMgYXJlIGRlc2lyYWJsZSBmb3IgYSBsZXNzIG5vdGljZWFibGUgZGVsYXkgdGltZSBvZiB0aGUgcGl0Y2ggc2hpZnRlZFxuXHRcdCAqIHNpZ25hbCwgYnV0IGxhcmdlciB2YWx1ZXMgd2lsbCByZXN1bHQgaW4gc21vb3RoZXIgcGl0Y2ggc2hpZnRpbmcgZm9yIGxhcmdlciBpbnRlcnZhbHMuXG5cdFx0ICogQSBub21pbmFsIHJhbmdlIG9mIDAuMDMgdG8gMC4xIGlzIHJlY29tbWVuZGVkLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBpdGNoU2hpZnQjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgd2luZG93U2l6ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogcGl0Y2hTaGlmdC53aW5kb3dTaXplID0gMC4xO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGl0Y2hTaGlmdC5wcm90b3R5cGUsICd3aW5kb3dTaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fd2luZG93U2l6ZSA9IHRoaXMudG9TZWNvbmRzKHNpemUpO1xuXHQgICAgICAgICAgICB0aGlzLnBpdGNoID0gdGhpcy5fcGl0Y2g7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBpdGNoU2hpZnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBpdGNoU2hpZnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kZWxheUEuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5QSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlCLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheUIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb0EuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0EgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb0IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZUxGTyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2RlbGF5VGltZScpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrRGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrRGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QaXRjaFNoaWZ0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgQnVmZmVyU291cmNlTm9kZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0gIHtBdWRpb0J1ZmZlcnxUb25lLkJ1ZmZlcn0gIGJ1ZmZlciAgIFRoZSBidWZmZXIgdG8gcGxheVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIG9ubG9hZCAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBpcyBkb25lIHBsYXlpbmcuXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdidWZmZXInLFxuXHQgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgIF0sIFRvbmUuQnVmZmVyU291cmNlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlXG5cdFx0XHQgKiAgYnVmZmVyIHNvdXJjZSBpcyBkb25lIHBsYXlpbmcuXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG9wdGlvbnMub25lbmRlZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGltZSB0aGF0IHRoZSBidWZmZXIgd2FzIHN0YXJ0ZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuIGFkZGl0aW9uYWwgZmxhZyBpZiB0aGUgYWN0dWFsIEJ1ZmZlclNvdXJjZU5vZGVcblx0XHRcdCAqICBoYXMgYmVlbiBzdGFydGVkLiBiL2Mgc3RvcHBpbmcgYW4gdW5zdGFydGVkIGJ1ZmZlclxuXHRcdFx0ICogIHdpbGwgdGhyb3cgaXQgaW50byBhbiBpbnZhbGlkIHN0YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtCb29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRmxhZyBpZiB0aGUgc291cmNlIGhhcyBhbHJlYWR5IGJlZW4gc3RvcHBlZFxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlU3RvcHBlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0aW1lIHRoYXQgdGhlIGJ1ZmZlciBpcyBzY2hlZHVsZWQgdG8gc3RvcC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBub2RlIHdoaWNoIGVudmVsb3BlcyB0aGUgQnVmZmVyU291cmNlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGJ1ZmZlciBzb3VyY2Vcblx0XHRcdCAqICBAdHlwZSAge0F1ZGlvQnVmZmVyU291cmNlTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5jb25uZWN0KHRoaXMuX2dhaW5Ob2RlKTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2Uub25lbmRlZCA9IHRoaXMuX29uZW5kZWQuYmluZCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBwcml2YXRlIGJ1ZmZlciBpbnN0YW5jZVxuXHRcdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihvcHRpb25zLmJ1ZmZlciwgb3B0aW9ucy5vbmxvYWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwbGF5YmFja1JhdGUgb2YgdGhlIGJ1ZmZlclxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX3NvdXJjZS5wbGF5YmFja1JhdGUsIFRvbmUuVHlwZS5Qb3NpdGl2ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZhZGVJbiB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVJbiA9IG9wdGlvbnMuZmFkZUluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlT3V0IHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZU91dCA9IG9wdGlvbnMuZmFkZU91dDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjdXJ2ZSBhcHBsaWVkIHRvIHRoZSBmYWRlcywgZWl0aGVyIFwibGluZWFyXCIgb3IgXCJleHBvbmVudGlhbFwiXG5cdFx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jdXJ2ZSA9IG9wdGlvbnMuY3VydmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHRoYXQgdGhlIGJ1ZmZlciByYW1wcyB0b1xuXHRcdFx0ICogIEB0eXBlIHtHYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluID0gMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBvbmVuZGVkIHRpbWVvdXRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25lbmRlZFRpbWVvdXQgPSAtMTtcblx0ICAgICAgICAvL3NldCBzb21lIHZhbHVlcyBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLmxvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBvcHRpb25zLmxvb3BTdGFydDtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBvcHRpb25zLmxvb3BFbmQ7XG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUudmFsdWUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJ1ZmZlclNvdXJjZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25lbmRlZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAwLFxuXHQgICAgICAgICdmYWRlSW4nOiAwLFxuXHQgICAgICAgICdmYWRlT3V0JzogMCxcblx0ICAgICAgICAnY3VydmUnOiAnbGluZWFyJyxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHBsYXliYWNrIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byB0ZXN0IHRoZSBzdGF0ZSBhdFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5TdGF0ZX0gIFRoZSBwbGF5YmFjayBzdGF0ZS4gXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSAmJiB0aW1lID49IHRoaXMuX3N0YXJ0VGltZSAmJiAhdGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdGFydGVkO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgYnVmZmVyXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHBhcmFtICB7R2Fpbn0gIFtnYWluPTFdICBUaGUgZ2FpbiB0byBwbGF5IHRoZSBidWZmZXIgYmFjayBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBmYWRlSW5UaW1lICBUaGUgb3B0aW9uYWwgZmFkZUluIHJhbXAgdGltZS5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24sIGdhaW4sIGZhZGVJblRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyU291cmNlIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgb25jZS4nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCF0aGlzLmJ1ZmZlci5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkJ1ZmZlclNvdXJjZTogYnVmZmVyIGlzIGVpdGhlciBub3Qgc2V0IG9yIG5vdCBsb2FkZWQuJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL2lmIGl0J3MgYSBsb29wIHRoZSBkZWZhdWx0IG9mZnNldCBpcyB0aGUgbG9vcHN0YXJ0IHBvaW50XG5cdCAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCB0aGlzLmxvb3BTdGFydCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9vdGhlcndpc2UgdGhlIGRlZmF1bHQgb2Zmc2V0IGlzIDBcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgZ2FpbiA9IFRvbmUuZGVmYXVsdEFyZyhnYWluLCAxKTtcblx0ICAgICAgICB0aGlzLl9nYWluID0gZ2Fpbjtcblx0ICAgICAgICBmYWRlSW5UaW1lID0gdGhpcy50b1NlY29uZHMoVG9uZS5kZWZhdWx0QXJnKGZhZGVJblRpbWUsIHRoaXMuZmFkZUluKSk7XG5cdCAgICAgICAgdGhpcy5mYWRlSW4gPSBmYWRlSW5UaW1lO1xuXHQgICAgICAgIGlmIChmYWRlSW5UaW1lID4gMCkge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5jdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodGhpcy5fZ2FpbiwgdGltZSArIGZhZGVJblRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUodGhpcy5fZ2FpbiwgdGltZSwgZmFkZUluVGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKGdhaW4sIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lO1xuXHQgICAgICAgIHZhciBjb21wdXRlZER1ciA9IHRoaXMudG9TZWNvbmRzKFRvbmUuZGVmYXVsdEFyZyhkdXJhdGlvbiwgdGhpcy5idWZmZXIuZHVyYXRpb24gLSBvZmZzZXQgJSB0aGlzLmJ1ZmZlci5kdXJhdGlvbikpO1xuXHQgICAgICAgIGNvbXB1dGVkRHVyID0gTWF0aC5tYXgoY29tcHV0ZWREdXIsIDApO1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChkdXJhdGlvbikpIHtcblx0ICAgICAgICAgICAgLy9jbGlwIHRoZSBkdXJhdGlvbiB3aGVuIG5vdCBsb29waW5nXG5cdCAgICAgICAgICAgIGlmICghdGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgICAgICBjb21wdXRlZER1ciA9IE1hdGgubWluKGNvbXB1dGVkRHVyLCB0aGlzLmJ1ZmZlci5kdXJhdGlvbiAtIG9mZnNldCAlIHRoaXMuYnVmZmVyLmR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnN0b3AodGltZSArIGNvbXB1dGVkRHVyLCB0aGlzLmZhZGVPdXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3N0YXJ0IHRoZSBidWZmZXIgc291cmNlXG5cdCAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAvL21vZGlmeSB0aGUgb2Zmc2V0IGlmIGl0J3MgZ3JlYXRlciB0aGFuIHRoZSBsb29wIHRpbWVcblx0ICAgICAgICAgICAgdmFyIGxvb3BFbmQgPSB0aGlzLmxvb3BFbmQgfHwgdGhpcy5idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgICAgIHZhciBsb29wU3RhcnQgPSB0aGlzLmxvb3BTdGFydDtcblx0ICAgICAgICAgICAgdmFyIGxvb3BEdXJhdGlvbiA9IGxvb3BFbmQgLSBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIC8vbW92ZSB0aGUgb2Zmc2V0IGJhY2tcblx0ICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBsb29wRW5kKSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSAob2Zmc2V0IC0gbG9vcFN0YXJ0KSAlIGxvb3BEdXJhdGlvbiArIGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zb3VyY2UuYnVmZmVyID0gdGhpcy5idWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmxvb3BFbmQgPSB0aGlzLmxvb3BFbmQgfHwgdGhpcy5idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgaWYgKG9mZnNldCA8IHRoaXMuYnVmZmVyLmR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2Uuc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGJ1ZmZlci4gT3B0aW9uYWxseSBhZGQgYSByYW1wIHRpbWUgdG8gZmFkZSB0aGVcblx0XHQgKiAgYnVmZmVyIG91dC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICB0aW1lICAgICAgICAgVGhlIHRpbWUgdGhlIGJ1ZmZlciBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBmYWRlT3V0VGltZSAgSG93IGxvbmcgdGhlIGdhaW4gc2hvdWxkIGZhZGUgb3V0IGZvclxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lLCBmYWRlT3V0VGltZSkge1xuXHQgICAgICAgIGlmICghdGhpcy5idWZmZXIubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJTb3VyY2U6IGJ1ZmZlciBpcyBlaXRoZXIgbm90IHNldCBvciBub3QgbG9hZGVkLicpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL2lmIHRoZSBldmVudCBoYXMgYWxyZWFkeSBiZWVuIHNjaGVkdWxlZCwgY2xlYXIgaXRcblx0ICAgICAgICBpZiAodGhpcy5fc3RvcFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3N0b3AgaWYgaXQncyBzY2hlZHVsZSBiZWZvcmUgdGhlIHN0YXJ0IHRpbWVcblx0ICAgICAgICBpZiAodGltZSA8PSB0aGlzLl9zdGFydFRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4udmFsdWUgPSAwO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IE1hdGgubWF4KHRoaXMuX3N0YXJ0VGltZSArIHRoaXMuZmFkZUluICsgdGhpcy5zYW1wbGVUaW1lLCB0aW1lKTtcblx0ICAgICAgICAvL2NhbmNlbCB0aGUgcHJldmlvdXMgY3VydmVcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IHRpbWU7XG5cdCAgICAgICAgLy90aGUgZmFkZU91dCB0aW1lXG5cdCAgICAgICAgZmFkZU91dFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhUb25lLmRlZmF1bHRBcmcoZmFkZU91dFRpbWUsIHRoaXMuZmFkZU91dCkpO1xuXHQgICAgICAgIHZhciBoZWxkRHVyYXRpb24gPSB0aW1lIC0gdGhpcy5fc3RhcnRUaW1lIC0gdGhpcy5mYWRlSW4gLSB0aGlzLnNhbXBsZVRpbWU7XG5cdCAgICAgICAgaWYgKCF0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgLy9tYWtlIHN1cmUgdGhlIGZhZGUgZG9lcyBub3QgZ28gYmV5b25kIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlclxuXHQgICAgICAgICAgICBoZWxkRHVyYXRpb24gPSBNYXRoLm1pbihoZWxkRHVyYXRpb24sIHRoaXMuYnVmZmVyLmR1cmF0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZmFkZU91dFRpbWUgPSBNYXRoLm1pbihoZWxkRHVyYXRpb24sIGZhZGVPdXRUaW1lKTtcblx0ICAgICAgICB2YXIgc3RhcnRGYWRlID0gdGltZSAtIGZhZGVPdXRUaW1lO1xuXHQgICAgICAgIGlmIChmYWRlT3V0VGltZSA+IHRoaXMuc2FtcGxlVGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKHRoaXMuX2dhaW4sIHN0YXJ0RmFkZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmN1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKDAsIHN0YXJ0RmFkZSwgZmFkZU91dFRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl9vbmVuZGVkVGltZW91dCk7XG5cdCAgICAgICAgdGhpcy5fb25lbmRlZFRpbWVvdXQgPSBUb25lLmNvbnRleHQuc2V0VGltZW91dCh0aGlzLl9vbmVuZGVkLmJpbmQodGhpcyksIHRoaXMuX3N0b3BUaW1lIC0gdGhpcy5ub3coKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBhIHNjaGVkdWxlZCBzdG9wIGV2ZW50XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlclNvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5jYW5jZWxTdG9wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xICYmICF0aGlzLl9zb3VyY2VTdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIHRoZSBzdG9wIGVudmVsb3BlXG5cdCAgICAgICAgICAgIHZhciBmYWRlSW5UaW1lID0gdGhpcy50b1NlY29uZHModGhpcy5mYWRlSW4pO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aGlzLl9zdGFydFRpbWUgKyBmYWRlSW5UaW1lICsgdGhpcy5zYW1wbGVUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCBNYXRoLm1heCh0aGlzLm5vdygpLCB0aGlzLl9zdGFydFRpbWUgKyBmYWRlSW5UaW1lICsgdGhpcy5zYW1wbGVUaW1lKSk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fb25lbmRlZFRpbWVvdXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGVuZGVkLlxuXHRcdCAqICBJbnZva2VzIGBvbmVuZGVkYCBhbmQgZGlzcG9zZXMgdGhlIG5vZGUuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuX29uZW5kZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VTdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN0b3BwZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICAvL2FsbG93IGFkZGl0aW9uYWwgdGltZSBmb3IgdGhlIGV4cG9uZW50aWFsIGN1cnZlIHRvIGZ1bGx5IGRlY2F5XG5cdCAgICAgICAgICAgIHZhciBhZGRpdGlvbmFsVGFpbCA9IHRoaXMuY3VydmUgPT09ICdleHBvbmVudGlhbCcgPyB0aGlzLmZhZGVPdXQgKiAyIDogMDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVN0YXJ0ZWQgJiYgdGhpcy5fc3RvcFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2Uuc3RvcCh0aGlzLl9zdG9wVGltZSArIGFkZGl0aW9uYWxUYWlsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLm9uZW5kZWQodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBzdGFydCBhdCB0aGlzIHBvc2l0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UubG9vcFN0YXJ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wU3RhcnQgPSB0aGlzLnRvU2Vjb25kcyhsb29wU3RhcnQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgbG9vcCBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIGVuZCBhdCB0aGlzIHBvc2l0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UubG9vcEVuZCA9IHRoaXMudG9TZWNvbmRzKGxvb3BFbmQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF1ZGlvIGJ1ZmZlciBiZWxvbmdpbmcgdG8gdGhlIHBsYXllci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdCAqIEBuYW1lIGJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVyIHNob3VsZCBsb29wIG9uY2UgaXQncyBvdmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb29wXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UubG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHRoaXMuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLm9uZW5kZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTtcblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG51bGw7XG5cdCAgICAgICAgVG9uZS5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl9vbmVuZGVkVGltZW91dCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQnVmZmVyU291cmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTm9pc2UgaXMgYSBub2lzZSBnZW5lcmF0b3IuIEl0IHVzZXMgbG9vcGVkIG5vaXNlIGJ1ZmZlcnMgdG8gc2F2ZSBvbiBwZXJmb3JtYW5jZS5cblx0XHQgKiAgICAgICAgICBUb25lLk5vaXNlIHN1cHBvcnRzIHRoZSBub2lzZSB0eXBlczogXCJwaW5rXCIsIFwid2hpdGVcIiwgYW5kIFwiYnJvd25cIi4gUmVhZCBtb3JlIGFib3V0XG5cdFx0ICogICAgICAgICAgY29sb3JzIG9mIG5vaXNlIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbG9yc19vZl9ub2lzZSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IHR5cGUgdGhlIG5vaXNlIHR5cGUgKHdoaXRlfHBpbmt8YnJvd24pXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pbml0aWFsaXplIHRoZSBub2lzZSBhbmQgc3RhcnRcblx0XHQgKiB2YXIgbm9pc2UgPSBuZXcgVG9uZS5Ob2lzZShcInBpbmtcIikuc3RhcnQoKTtcblx0XHQgKlxuXHRcdCAqIC8vbWFrZSBhbiBhdXRvZmlsdGVyIHRvIHNoYXBlIHRoZSBub2lzZVxuXHRcdCAqIHZhciBhdXRvRmlsdGVyID0gbmV3IFRvbmUuQXV0b0ZpbHRlcih7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogXCI4bVwiLFxuXHRcdCAqIFx0XCJtaW5cIiA6IDgwMCxcblx0XHQgKiBcdFwibWF4XCIgOiAxNTAwMFxuXHRcdCAqIH0pLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHRcdCAqXG5cdFx0ICogLy9jb25uZWN0IHRoZSBub2lzZVxuXHRcdCAqIG5vaXNlLmNvbm5lY3QoYXV0b0ZpbHRlcik7XG5cdFx0ICogLy9zdGFydCB0aGUgYXV0b2ZpbHRlciBMRk9cblx0XHQgKiBhdXRvRmlsdGVyLnN0YXJ0KClcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd0eXBlJ10sIFRvbmUuTm9pc2UpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJTb3VyY2VOb2RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYnVmZmVyXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBub2lzZS4gQWZmZWN0c1xuXHRcdFx0ICogIHRoZSBcImZyZXF1ZW5jeVwiIG9mIHRoZSBub2lzZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Ob2lzZSwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICd3aGl0ZScsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgbm9pc2UuIENhbiBiZSBcIndoaXRlXCIsIFwiYnJvd25cIiwgb3IgXCJwaW5rXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTm9pc2UjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBub2lzZS50eXBlID0gXCJ3aGl0ZVwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTm9pc2UucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlICE9PSB0eXBlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodHlwZSBpbiBfbm9pc2VCdWZmZXJzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9pZiBpdCdzIHBsYXlpbmcsIHN0b3AgYW5kIHJlc3RhcnQgaXRcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9wKG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLk5vaXNlOiBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBub2lzZS4gQWZmZWN0c1xuXHRcdCAqICB0aGUgXCJmcmVxdWVuY3lcIiBvZiB0aGUgbm9pc2UuXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQHNpZ25hbFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTm9pc2UucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2UucGxheWJhY2tSYXRlLnZhbHVlID0gcmF0ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgYnVmZmVyID0gX25vaXNlQnVmZmVyc1t0aGlzLl90eXBlXTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2UoYnVmZmVyKS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UubG9vcCA9IHRydWU7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZSA9IHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2Uuc3RhcnQodGhpcy50b1NlY29uZHModGltZSksIE1hdGgucmFuZG9tKCkgKiAoYnVmZmVyLmR1cmF0aW9uIC0gMC4wMDEpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgaW50ZXJuYWwgc3RvcCBtZXRob2Rcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5zdG9wKHRoaXMudG9TZWNvbmRzKHRpbWUpKTtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVzdGFydHMgdGhlIG5vaXNlLlxuXHRcdCAqIEBwYXJhbSAge1t0eXBlXX0gdGltZSBbZGVzY3JpcHRpb25dXG5cdFx0ICogQHJldHVybiB7W3R5cGVdfSAgICAgIFtkZXNjcmlwdGlvbl1cblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vVE9ETyBjb3VsZCBiZSBvcHRpbWl6ZWQgYnkgY2FuY2VsbGluZyB0aGUgYnVmZmVyIHNvdXJjZSAnc3RvcCdcblx0ICAgICAgICAvL3N0b3AgYW5kIHJlc3RhcnRcblx0ICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5fc291cmNlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBUSEUgQlVGRkVSU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL05vaXNlIGJ1ZmZlciBzdGF0c1xuXHQgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IDQ0MTAwICogNTtcblx0ICAgIHZhciBjaGFubmVscyA9IDI7XG5cdCAgICAvKipcblx0XHQgKlx0VGhlIG5vaXNlIGFycmF5cy4gR2VuZXJhdGVkIG9uIGluaXRpYWxpemF0aW9uLlxuXHRcdCAqICBib3Jyb3dlZCBoZWF2aWx5IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3phY2hhcnlkZW50b24vbm9pc2UuanNcblx0XHQgKiAgKGMpIDIwMTMgWmFjaCBEZW50b24gKE1JVClcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgX25vaXNlQXJyYXlzID0ge1xuXHQgICAgICAgICdwaW5rJzogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWxOdW0gPSAwOyBjaGFubmVsTnVtIDwgY2hhbm5lbHM7IGNoYW5uZWxOdW0rKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJbY2hhbm5lbE51bV0gPSBjaGFubmVsO1xuXHQgICAgICAgICAgICAgICAgdmFyIGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2O1xuXHQgICAgICAgICAgICAgICAgYjAgPSBiMSA9IGIyID0gYjMgPSBiNCA9IGI1ID0gYjYgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB3aGl0ZSA9IE1hdGgucmFuZG9tKCkgKiAyIC0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBiMCA9IDAuOTk4ODYgKiBiMCArIHdoaXRlICogMC4wNTU1MTc5O1xuXHQgICAgICAgICAgICAgICAgICAgIGIxID0gMC45OTMzMiAqIGIxICsgd2hpdGUgKiAwLjA3NTA3NTk7XG5cdCAgICAgICAgICAgICAgICAgICAgYjIgPSAwLjk2OSAqIGIyICsgd2hpdGUgKiAwLjE1Mzg1Mjtcblx0ICAgICAgICAgICAgICAgICAgICBiMyA9IDAuODY2NSAqIGIzICsgd2hpdGUgKiAwLjMxMDQ4NTY7XG5cdCAgICAgICAgICAgICAgICAgICAgYjQgPSAwLjU1ICogYjQgKyB3aGl0ZSAqIDAuNTMyOTUyMjtcblx0ICAgICAgICAgICAgICAgICAgICBiNSA9IC0wLjc2MTYgKiBiNSAtIHdoaXRlICogMC4wMTY4OTg7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSA9IGIwICsgYjEgKyBiMiArIGIzICsgYjQgKyBiNSArIGI2ICsgd2hpdGUgKiAwLjUzNjI7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSAqPSAwLjExO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIChyb3VnaGx5KSBjb21wZW5zYXRlIGZvciBnYWluXG5cdCAgICAgICAgICAgICAgICAgICAgYjYgPSB3aGl0ZSAqIDAuMTE1OTI2O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSgpLFxuXHQgICAgICAgICdicm93bic6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsTnVtID0gMDsgY2hhbm5lbE51bSA8IGNoYW5uZWxzOyBjaGFubmVsTnVtKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJMZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyW2NoYW5uZWxOdW1dID0gY2hhbm5lbDtcblx0ICAgICAgICAgICAgICAgIHZhciBsYXN0T3V0ID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgd2hpdGUgPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSA9IChsYXN0T3V0ICsgMC4wMiAqIHdoaXRlKSAvIDEuMDI7XG5cdCAgICAgICAgICAgICAgICAgICAgbGFzdE91dCA9IGNoYW5uZWxbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSAqPSAzLjU7ICAgIC8vIChyb3VnaGx5KSBjb21wZW5zYXRlIGZvciBnYWluXG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcblx0ICAgICAgICB9KCksXG5cdCAgICAgICAgJ3doaXRlJzogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWxOdW0gPSAwOyBjaGFubmVsTnVtIDwgY2hhbm5lbHM7IGNoYW5uZWxOdW0rKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJbY2hhbm5lbE51bV0gPSBjaGFubmVsO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcblx0ICAgICAgICB9KClcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKlx0c3RhdGljIG5vaXNlIGJ1ZmZlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSB7VG9uZS5CdWZmZXJ9XG5cdFx0ICovXG5cdCAgICB2YXIgX25vaXNlQnVmZmVycyA9IHt9O1xuXHQgICAgLy9jcmVhdGUgdGhlIFRvbmUuQnVmZmVyc1xuXHQgICAgZnVuY3Rpb24gY3JlYXRlQnVmZmVycygpIHtcblx0ICAgICAgICBmb3IgKHZhciB0eXBlIGluIF9ub2lzZUFycmF5cykge1xuXHQgICAgICAgICAgICBfbm9pc2VCdWZmZXJzW3R5cGVdID0gbmV3IFRvbmUuQnVmZmVyKCkuZnJvbUFycmF5KF9ub2lzZUFycmF5c1t0eXBlXSk7XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHQgICAgLy9jcmVhdGUgdGhlIG5vaXNlIGJ1ZmZlcnNcblx0ICAgIFRvbmUuZ2V0Q29udGV4dChjcmVhdGVCdWZmZXJzKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGNyZWF0ZUJ1ZmZlcnMpO1xuXHQgICAgcmV0dXJuIFRvbmUuTm9pc2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTaW1wbGUgY29udm9sdXRpb24gY3JlYXRlZCB3aXRoIGRlY2F5aW5nIG5vaXNlLlxuXHRcdCAqICBcdFx0R2VuZXJhdGVzIGFuIEltcHVsc2UgUmVzcG9uc2UgQnVmZmVyXG5cdFx0ICogXHRcdFx0d2l0aCBUb25lLk9mZmxpbmUgdGhlbiBmZWVkcyB0aGUgSVIgaW50byBDb252b2x2ZXJOb2RlLlxuXHRcdCAqIFx0XHRcdE5vdGU6IHRoZSBSZXZlcmIgd2lsbCBub3QgbWFrZSBhbnkgc291bmQgdW50aWwgW2dlbmVyYXRlXSgjZ2VuZXJhdGUpXG5cdFx0ICogXHRcdFx0aGFzIGJlZW4gaW52b2tlZCBhbmQgcmVzb2x2ZWQuXG5cdFx0ICpcblx0XHQgKiBcdFx0XHRJbnNwaXJhdGlvbiBmcm9tIFtSZXZlcmJHZW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9hZGVsZXNwaW5hc3NlL3JldmVyYkdlbikuXG5cdFx0ICogXHRcdFx0Q29weXJpZ2h0IChjKSAyMDE0IEFsYW4gZGVMZXNwaW5hc3NlIEFwYWNoZSAyLjAgTGljZW5zZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Db252b2x2ZXJ9XG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGRlY2F5IFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHJldmVyYmVyYXRlIGZvci5cblx0XHQgKi9cblx0ICAgIFRvbmUuUmV2ZXJiID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZGVjYXknXSwgVG9uZS5SZXZlcmIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQ29udm9sdmVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7Q29udm9sdmVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNvbnZvbHZlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGR1cmF0aW9uIG9mIHRoZSByZXZlcmJcblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWNheSA9IG9wdGlvbnMuZGVjYXk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgYW1vdW50IG9mIHRpbWUgYmVmb3JlIHRoZSByZXZlcmIgaXMgZnVsbHlcblx0XHRcdCAqIHJhbXBlZCBpbi5cblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wcmVEZWxheSA9IG9wdGlvbnMucHJlRGVsYXk7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX2NvbnZvbHZlcik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5SZXZlcmIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2RlY2F5JzogMS41LFxuXHQgICAgICAgICdwcmVEZWxheSc6IDAuMDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZW5lcmF0ZSB0aGUgSW1wdWxzZSBSZXNwb25zZS4gUmV0dXJucyBhIHByb21pc2Ugd2hpbGUgdGhlIElSIGlzIGJlaW5nXG5cdFx0ICogZ2VuZXJhdGVkLlxuXHRcdCAqIEByZXR1cm4ge1Byb21pc2U8VG9uZS5SZXZlcmI+fSBQcm9taXNlIHdoaWNoIHJldHVybnMgdGhpcyBvYmplY3QuXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYi5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuT2ZmbGluZShmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vY3JlYXRlIGEgbm9pc2UgYnVyc3Qgd2hpY2ggZGVjYXlzIG92ZXIgdGhlIGR1cmF0aW9uXG5cdCAgICAgICAgICAgIHZhciBub2lzZUwgPSBuZXcgVG9uZS5Ob2lzZSgpO1xuXHQgICAgICAgICAgICB2YXIgbm9pc2VSID0gbmV3IFRvbmUuTm9pc2UoKTtcblx0ICAgICAgICAgICAgdmFyIG1lcmdlID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICAgICAgbm9pc2VMLmNvbm5lY3QobWVyZ2UubGVmdCk7XG5cdCAgICAgICAgICAgIG5vaXNlUi5jb25uZWN0KG1lcmdlLnJpZ2h0KTtcblx0ICAgICAgICAgICAgdmFyIGdhaW5Ob2RlID0gbmV3IFRvbmUuR2FpbigpLnRvTWFzdGVyKCk7XG5cdCAgICAgICAgICAgIG1lcmdlLmNvbm5lY3QoZ2Fpbk5vZGUpO1xuXHQgICAgICAgICAgICBub2lzZUwuc3RhcnQoMCk7XG5cdCAgICAgICAgICAgIG5vaXNlUi5zdGFydCgwKTtcblx0ICAgICAgICAgICAgLy9zaG9ydCBmYWRlIGluXG5cdCAgICAgICAgICAgIGdhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgMCk7XG5cdCAgICAgICAgICAgIGdhaW5Ob2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMSwgdGhpcy5wcmVEZWxheSk7XG5cdCAgICAgICAgICAgIC8vZGVjYXlcblx0ICAgICAgICAgICAgZ2Fpbk5vZGUuZ2Fpbi5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUoMCwgdGhpcy5wcmVEZWxheSwgdGhpcy5kZWNheSAtIHRoaXMucHJlRGVsYXkpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5kZWNheSkudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnZvbHZlci5idWZmZXIgPSBidWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5SZXZlcmJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5SZXZlcmI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBCYXNlIGNsYXNzIGZvciBzdGVyZW8gZmVlZGJhY2sgZWZmZWN0cyB3aGVyZSB0aGUgZWZmZWN0UmV0dXJuXG5cdFx0ICogICAgICAgICBpcyBmZWQgYmFjayBpbnRvIHRoZSBzYW1lIGNoYW5uZWwuXG5cdFx0ICpcblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmZWVkYmFjayddLCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgZmVlZGJhY2tcblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZlZWRiYWNrLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZWZ0IHNpZGUgZmVlYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcmlnaHQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTC5jaGFpbih0aGlzLl9mZWVkYmFja0wsIHRoaXMuZWZmZWN0U2VuZEwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuUi5jaGFpbih0aGlzLl9mZWVkYmFja1IsIHRoaXMuZWZmZWN0U2VuZFIpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZmFuKHRoaXMuX2ZlZWRiYWNrTC5nYWluLCB0aGlzLl9mZWVkYmFja1IuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydmZWVkYmFjayddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0LCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBcHBsaWVzIGEgd2lkdGggZmFjdG9yIHRvIHRoZSBtaWQvc2lkZSBzZXBlcmF0aW9uLlxuXHRcdCAqICAgICAgICAgMCBpcyBhbGwgbWlkIGFuZCAxIGlzIGFsbCBzaWRlLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZvdW5kIGluIFtrdnJhdWRpbyBmb3J1bXNdKGh0dHA6Ly93d3cua3ZyYXVkaW8uY29tL2ZvcnVtL3ZpZXd0b3BpYy5waHA/dD0yMTI1ODcpLlxuXHRcdCAqICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgIDxjb2RlPlxuXHRcdCAqICAgICAgICAgTWlkICo9IDIqKDEtd2lkdGgpPGJyPlxuXHRcdCAqICAgICAgICAgU2lkZSAqPSAyKndpZHRoXG5cdFx0ICogICAgICAgICA8L2NvZGU+XG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTWlkU2lkZUVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbd2lkdGhdIFRoZSBzdGVyZW8gd2lkdGguIEEgd2lkdGggb2YgMCBpcyBtb25vIGFuZCAxIGlzIHN0ZXJlby4gMC41IGlzIG5vIGNoYW5nZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvV2lkZW5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3dpZHRoJ10sIFRvbmUuU3RlcmVvV2lkZW5lcik7XG5cdCAgICAgICAgVG9uZS5NaWRTaWRlRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdpZHRoIGNvbnRyb2wuIDAgPSAxMDAlIG1pZC4gMSA9IDEwMCUgc2lkZS4gMC41ID0gbm8gY2hhbmdlLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndpZHRoID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMud2lkdGgsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWyd3aWR0aCddKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFR3byB0aW1lcyB0aGUgKDEtd2lkdGgpIGZvciB0aGUgbWlkIGNoYW5uZWxcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQgPSBuZXcgVG9uZS5NdWx0aXBseSgyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFR3byB0aW1lcyB0aGUgd2lkdGggZm9yIHRoZSBzaWRlIGNoYW5uZWxcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlID0gbmV3IFRvbmUuTXVsdGlwbHkoMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTWlkIG11bHRpcGxpZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkTXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KCk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZC5jb25uZWN0KHRoaXMuX21pZE11bHQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMubWlkU2VuZC5jaGFpbih0aGlzLl9taWRNdWx0LCB0aGlzLm1pZFJldHVybik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAxIC0gd2lkdGhcblx0XHRcdCAqIEB0eXBlIHtUb25lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aC5jb25uZWN0KHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5nZXRDb25zdGFudCgxKS5jb25uZWN0KHRoaXMuX29uZU1pbnVzV2lkdGgsIDAsIDApO1xuXHQgICAgICAgIHRoaXMud2lkdGguY29ubmVjdCh0aGlzLl9vbmVNaW51c1dpZHRoLCAwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTaWRlIG11bHRpcGxpZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2lkZU11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHQgICAgICAgIHRoaXMud2lkdGguY29ubmVjdCh0aGlzLl90d29UaW1lc1dpZHRoU2lkZSk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aFNpZGUuY29ubmVjdCh0aGlzLl9zaWRlTXVsdCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5zaWRlU2VuZC5jaGFpbih0aGlzLl9zaWRlTXVsdCwgdGhpcy5zaWRlUmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb1dpZGVuZXIsIFRvbmUuTWlkU2lkZUVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvV2lkZW5lci5kZWZhdWx0cyA9IHsgJ3dpZHRoJzogMC41IH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb1dpZGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvV2lkZW5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1pZFNpZGVFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3dpZHRoJ10pO1xuXHQgICAgICAgIHRoaXMud2lkdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZE11bHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZE11bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NpZGVNdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaWRlTXVsdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aFNpZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vbmVNaW51c1dpZHRoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vbmVNaW51c1dpZHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdGVyZW9XaWRlbmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmVtb2xvIG1vZHVsYXRlcyB0aGUgYW1wbGl0dWRlIG9mIGFuIGluY29taW5nIHNpZ25hbCB1c2luZyBhIFRvbmUuTEZPLlxuXHRcdCAqICAgICAgICAgVGhlIHR5cGUsIGZyZXF1ZW5jeSwgYW5kIGRlcHRoIG9mIHRoZSBMRk8gaXMgY29udHJvbGxhYmxlLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZnJlcXVlbmN5XSBUaGUgcmF0ZSBvZiB0aGUgZWZmZWN0LlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbZGVwdGhdIFRoZSBkZXB0aCBvZiB0aGUgZWZmZWN0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY3JlYXRlIGEgdHJlbW9sbyBhbmQgc3RhcnQgaXQncyBMRk9cblx0XHQgKiB2YXIgdHJlbW9sbyA9IG5ldyBUb25lLlRyZW1vbG8oOSwgMC43NSkudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqIC8vcm91dGUgYW4gb3NjaWxsYXRvciB0aHJvdWdoIHRoZSB0cmVtb2xvIGFuZCBzdGFydCBpdFxuXHRcdCAqIHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QodHJlbW9sbykuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSwgVG9uZS5UcmVtb2xvKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0cmVtZWxvIExGTyBpbiB0aGUgbGVmdCBjaGFubmVsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdwaGFzZSc6IG9wdGlvbnMuc3ByZWFkLFxuXHQgICAgICAgICAgICAnbWluJzogMSxcblx0ICAgICAgICAgICAgJ21heCc6IDBcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHJlbWVsbyBMRk8gaW4gdGhlIGxlZnQgY2hhbm5lbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAncGhhc2UnOiBvcHRpb25zLnNwcmVhZCxcblx0ICAgICAgICAgICAgJ21pbic6IDEsXG5cdCAgICAgICAgICAgICdtYXgnOiAwXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlcmUgdGhlIGdhaW4gaXMgbXVsdGlwbGllZFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVMID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZXJlIHRoZSBnYWluIGlzIG11bHRpcGxpZWRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlUiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSB0cmVtb2xvLlxuXHRcdFx0ICogIEB0eXBlICB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVwdGggb2YgdGhlIGVmZmVjdC4gQSBkZXB0aCBvZiAwLCBoYXMgbm8gZWZmZWN0XG5cdFx0XHQgKiAgb24gdGhlIGFtcGxpdHVkZSwgYW5kIGEgZGVwdGggb2YgMSBtYWtlcyB0aGUgYW1wbGl0dWRlXG5cdFx0XHQgKiAgbW9kdWxhdGUgZnVsbHkgYmV0d2VlbiAwIGFuZCAxLlxuXHRcdFx0ICogIEB0eXBlICB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRlcHRoLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNoYWluKHRoaXMuX2FtcGxpdHVkZUwsIHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbih0aGlzLl9hbXBsaXR1ZGVSLCB0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZGVMLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZGVSLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmZhbih0aGlzLl9sZm9MLmZyZXF1ZW5jeSwgdGhpcy5fbGZvUi5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGVwdGguZmFuKHRoaXMuX2xmb1IuYW1wbGl0dWRlLCB0aGlzLl9sZm9MLmFtcGxpdHVkZSk7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuc3ByZWFkID0gb3B0aW9ucy5zcHJlYWQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmVtb2xvLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMTAsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ2RlcHRoJzogMC41LFxuXHQgICAgICAgICdzcHJlYWQnOiAxODBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdGFydCB0aGUgdHJlbW9sby5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgdHJlbW9sbyBiZWdpbnMuXG5cdFx0ICogQHJldHVybnMge1RvbmUuVHJlbW9sb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgdGhlIHRyZW1vbG8uXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHRyZW1vbG8gc3RvcHMuXG5cdFx0ICogQHJldHVybnMge1RvbmUuVHJlbW9sb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm9MLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGVmZmVjdCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW2RlbGF5PTBdIERlbGF5IHRpbWUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBlZmZlY3QgYWZ0ZXIgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgaGFzIHN0YXJ0ZWQuXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKGRlbGF5KSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5zeW5jKGRlbGF5KTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN5bmMoZGVsYXkpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgZmlsdGVyIGZyb20gdGhlIHRyYW5zcG9ydFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi51bnN5bmMoKTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC51bnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBUcmVtb2xvJ3Mgb3NjaWxsYXRvciB0eXBlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlRyZW1vbG8jXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmVtb2xvLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9MLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBBbW91bnQgb2Ygc3RlcmVvIHNwcmVhZC4gV2hlbiBzZXQgdG8gMCwgYm90aCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBjZW50cmFsbHkuXG5cdFx0ICogV2hlbiBzZXQgdG8gMTgwLCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBoYXJkIGxlZnQgYW5kIHJpZ2h0IHJlc3BlY3RpdmVseS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmVtb2xvI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHNwcmVhZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJlbW9sby5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9SLnBoYXNlIC0gdGhpcy5fbGZvTC5waGFzZTsgICAgLy8xODBcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnBoYXNlID0gOTAgLSBzcHJlYWQgLyAyO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnBoYXNlID0gc3ByZWFkIC8gMiArIDkwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9sZm9MLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9MID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9SLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVMLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJlbW9sbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgVmlicmF0byBlZmZlY3QgY29tcG9zZWQgb2YgYSBUb25lLkRlbGF5IGFuZCBhIFRvbmUuTEZPLiBUaGUgTEZPXG5cdFx0ICogICAgICAgICBtb2R1bGF0ZXMgdGhlIGRlbGF5VGltZSBvZiB0aGUgZGVsYXksIGNhdXNpbmcgdGhlIHBpdGNoIHRvIHJpc2Vcblx0XHQgKiAgICAgICAgIGFuZCBmYWxsLiBcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBmcmVxdWVuY3kgb2YgdGhlIHZpYnJhdG8uXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IGRlcHRoIFRoZSBhbW91bnQgdGhlIHBpdGNoIGlzIG1vZHVsYXRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuVmlicmF0byA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSwgVG9uZS5WaWJyYXRvKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheSBub2RlIHVzZWQgZm9yIHRoZSB2aWJyYXRvIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBuZXcgVG9uZS5EZWxheSgwLCBvcHRpb25zLm1heERlbGF5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgTEZPIHVzZWQgdG8gY29udHJvbCB0aGUgdmlicmF0b1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBvcHRpb25zLnR5cGUsXG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4Jzogb3B0aW9ucy5tYXhEZWxheSxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAncGhhc2UnOiAtOTAgICAgLy9vZmZzZSB0aGUgcGhhc2Ugc28gdGhlIHJlc3RpbmcgcG9zaXRpb24gaXMgaW4gdGhlIGNlbnRlclxuXHQgICAgICAgIH0pLnN0YXJ0KCkuY29ubmVjdCh0aGlzLl9kZWxheU5vZGUuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSB2aWJyYXRvXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmby5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlcHRoIG9mIHRoZSB2aWJyYXRvLiBcblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2xmby5hbXBsaXR1ZGU7XG5cdCAgICAgICAgdGhpcy5kZXB0aC52YWx1ZSA9IG9wdGlvbnMuZGVwdGg7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbih0aGlzLl9kZWxheU5vZGUsIHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlZpYnJhdG8sIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5WaWJyYXRvLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtYXhEZWxheSc6IDAuMDA1LFxuXHQgICAgICAgICdmcmVxdWVuY3knOiA1LFxuXHQgICAgICAgICdkZXB0aCc6IDAuMSxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFR5cGUgb2Ygb3NjaWxsYXRvciBhdHRhY2hlZCB0byB0aGUgVmlicmF0by5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5WaWJyYXRvI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVmlicmF0by5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVmlicmF0b30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5WaWJyYXRvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlZpYnJhdG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5FdmVudCBhYnN0cmFjdHMgYXdheSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZSBhbmQgcHJvdmlkZXMgYSBzY2hlZHVsYWJsZVxuXHRcdCAqICAgICAgICAgIGNhbGxiYWNrIGZvciBhIHNpbmdsZSBvciByZXBlYXRhYmxlIGV2ZW50cyBhbG9uZyB0aGUgdGltZWxpbmUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYXQgdGhlIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIG9yIHZhbHVlcyB3aGljaCBzaG91bGQgYmUgcGFzc2VkIHRvXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIGludm9jYXRpb24uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNob3JkID0gbmV3IFRvbmUuRXZlbnQoZnVuY3Rpb24odGltZSwgY2hvcmQpe1xuXHRcdCAqIFx0Ly90aGUgY2hvcmQgYXMgd2VsbCBhcyB0aGUgZXhhY3QgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiBcdC8vYXJlIHBhc3NlZCBpbiBhcyBhcmd1bWVudHMgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG5cdFx0ICogfSwgW1wiRDRcIiwgXCJFNFwiLCBcIkY0XCJdKTtcblx0XHQgKiAvL3N0YXJ0IHRoZSBjaG9yZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cmFuc3BvcnQgdGltZWxpbmVcblx0XHQgKiBjaG9yZC5zdGFydCgpO1xuXHRcdCAqIC8vbG9vcCBpdCBldmVyeSBtZWFzdXJlIGZvciA4IG1lYXN1cmVzXG5cdFx0ICogY2hvcmQubG9vcCA9IDg7XG5cdFx0ICogY2hvcmQubG9vcEVuZCA9IFwiMW1cIjtcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAndmFsdWUnXG5cdCAgICAgICAgXSwgVG9uZS5FdmVudCk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIExvb3AgdmFsdWVcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW58UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIHRvIGludm9rZS5cblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHdoaWNoIGlzIHBhc3NlZCB0byB0aGVcblx0XHRcdCAqICBjYWxsYmFjayBmdW5jdGlvbi5cblx0XHRcdCAqICBAdHlwZSAgeyp9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZW4gdGhlIG5vdGUgaXMgc2NoZWR1bGVkIHRvIHN0YXJ0LlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3Mob3B0aW9ucy5sb29wU3RhcnQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZW4gdGhlIG5vdGUgaXMgc2NoZWR1bGVkIHRvIHN0YXJ0LlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKG9wdGlvbnMubG9vcEVuZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVHJhY2tzIHRoZSBzY2hlZHVsZWQgZXZlbnRzXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBsYXliYWNrIHNwZWVkIG9mIHRoZSBub3RlLiBBIHNwZWVkIG9mIDFcblx0XHRcdCAqICBpcyBubyBjaGFuZ2UuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSAxO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgZGVsYXkgdGltZSBmcm9tIHdoZW4gdGhlIGV2ZW50IGlzIHNjaGVkdWxlZCB0byBzdGFydFxuXHRcdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHByaXZhdGUgaG9sZGVyIG9mIHByb2JhYmlsaXR5IHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wcm9iYWJpbGl0eSA9IG9wdGlvbnMucHJvYmFiaWxpdHk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFtb3VudCBvZiB2YXJpYXRpb24gZnJvbSB0aGVcblx0XHRcdCAqICBnaXZlbiB0aW1lLlxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2h1bWFuaXplID0gb3B0aW9ucy5odW1hbml6ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiBtdXRlIGlzIHRydWUsIHRoZSBjYWxsYmFjayB3b24ndCBiZVxuXHRcdFx0ICogIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcEVuZCc6ICcxbScsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ3ZhbHVlJzogbnVsbCxcblx0ICAgICAgICAncHJvYmFiaWxpdHknOiAxLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2UsXG5cdCAgICAgICAgJ2h1bWFuaXplJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVzY2hlZHVsZSBhbGwgb2YgdGhlIGV2ZW50cyBhbG9uZyB0aGUgdGltZWxpbmVcblx0XHQgKiAgd2l0aCB0aGUgdXBkYXRlZCB2YWx1ZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gYWZ0ZXIgT25seSByZXNjaGVkdWxlcyBldmVudHMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuX3Jlc2NoZWR1bGVFdmVudHMgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICAvL2lmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCBzY2hlZHVsZXMgYWxsIG9mIHRoZSBldmVudHNcblx0ICAgICAgICBhZnRlciA9IFRvbmUuZGVmYXVsdEFyZyhhZnRlciwgLTEpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdmFyIGR1cmF0aW9uO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGV2ZW50LmlkKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHZhciBzdGFydFRpY2sgPSBldmVudC50aW1lICsgTWF0aC5yb3VuZCh0aGlzLnN0YXJ0T2Zmc2V0IC8gdGhpcy5fcGxheWJhY2tSYXRlKTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBJbmZpbml0eTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc051bWJlcih0aGlzLl9sb29wKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHRoaXMuX2xvb3AgKiB0aGlzLl9nZXRMb29wRHVyYXRpb24oKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRFdmVudCA9IHRoaXMuX3N0YXRlLmdldEFmdGVyKHN0YXJ0VGljayk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRFdmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IE1hdGgubWluKGR1cmF0aW9uLCBuZXh0RXZlbnQudGltZSAtIHN0YXJ0VGljayk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChkdXJhdGlvbiAhPT0gSW5maW5pdHkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy9zY2hlZHVsZSBhIHN0b3Agc2luY2UgaXQncyBmaW5pdGUgZHVyYXRpb25cblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBzdGFydFRpY2sgKyBkdXJhdGlvbiArIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IFRvbmUuVGlja3MoZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJ2YWwgPSBUb25lLlRpY2tzKHRoaXMuX2dldExvb3BEdXJhdGlvbigpKTtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5pZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KHRoaXMuX3RpY2suYmluZCh0aGlzKSwgaW50ZXJ2YWwsIFRvbmUuVGlja3Moc3RhcnRUaWNrKSwgZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5pZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKHRoaXMuX3RpY2suYmluZCh0aGlzKSwgVG9uZS5UaWNrcyhzdGFydFRpY2spKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBub3RlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUoVG9uZS5UcmFuc3BvcnQudGlja3MpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdGFydCBmcm9tIHRoZSBzY2hlZHVsZWQgc3RhcnQgdGltZVxuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAbmFtZSBzdGFydE9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnc3RhcnRPZmZzZXQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydE9mZnNldDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGFydE9mZnNldCA9IG9mZnNldDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJvYmFiaWxpdHkgb2YgdGhlIG5vdGVzIGJlaW5nIHRyaWdnZXJlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvYmFiaWxpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3Byb2JhYmlsaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvYmFiaWxpdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9iKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2JhYmlsaXR5ID0gcHJvYjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiBzZXQgdG8gdHJ1ZSwgd2lsbCBhcHBseSBzbWFsbCByYW5kb20gdmFyaWF0aW9uXG5cdFx0ICogIHRvIHRoZSBjYWxsYmFjayB0aW1lLiBJZiB0aGUgdmFsdWUgaXMgZ2l2ZW4gYXMgYSB0aW1lLCBpdCB3aWxsIHJhbmRvbWl6ZVxuXHRcdCAqICBieSB0aGF0IGFtb3VudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBldmVudC5odW1hbml6ZSA9IHRydWU7XG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0ICogIEBuYW1lIGh1bWFuaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdodW1hbml6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2h1bWFuaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFyaWF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2h1bWFuaXplID0gdmFyaWF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBub3RlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgdGltZSAgV2hlbiB0aGUgbm90ZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuYWRkKHtcblx0ICAgICAgICAgICAgICAgICdzdGF0ZSc6IFRvbmUuU3RhdGUuU3RhcnRlZCxcblx0ICAgICAgICAgICAgICAgICd0aW1lJzogdGltZSxcblx0ICAgICAgICAgICAgICAgICdpZCc6IHVuZGVmaW5lZFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIEV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgdGltZSAgV2hlbiB0aGUgbm90ZSBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0QmVmb3JlKHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgcmVzY2hlZHVsVGltZSA9IHRpbWU7XG5cdCAgICAgICAgICAgIGlmIChwcmV2aW91c0V2ZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICByZXNjaGVkdWxUaW1lID0gcHJldmlvdXNFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMocmVzY2hlZHVsVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYWxsIHNjaGVkdWxlZCBldmVudHMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICBbdGltZT0wXSAgVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggZXZlbnRzIHdpbGwgYmUgY2FuY2VsLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuZGVmYXVsdEFyZyh0aW1lLCAtSW5maW5pdHkpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEZyb20odGltZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VyLiBBbHNvXG5cdFx0ICogIGNoZWNrcyBpZiB0aGUgRXZlbnQgaXMgZG9uZSBwbGF5aW5nXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIG9mIHRoZSBldmVudCBpbiBzZWNvbmRzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gVG9uZS5UcmFuc3BvcnQuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKCF0aGlzLm11dGUgJiYgdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGlja3MpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMucHJvYmFiaWxpdHkgPCAxICYmIE1hdGgucmFuZG9tKCkgPiB0aGlzLnByb2JhYmlsaXR5KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaHVtYW5pemUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB2YXJpYXRpb24gPSAwLjAyO1xuXHQgICAgICAgICAgICAgICAgaWYgKCFUb25lLmlzQm9vbGVhbih0aGlzLmh1bWFuaXplKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbiA9IHRoaXMudG9TZWNvbmRzKHRoaXMuaHVtYW5pemUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdGltZSArPSAoTWF0aC5yYW5kb20oKSAqIDIgLSAxKSAqIHZhcmlhdGlvbjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHRoaXMudmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBkdXJhdGlvbiBvZiB0aGUgbG9vcC5cblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuX2dldExvb3BEdXJhdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgodGhpcy5fbG9vcEVuZCAtIHRoaXMuX2xvb3BTdGFydCkgLyB0aGlzLl9wbGF5YmFja1JhdGUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgbm90ZSBzaG91bGQgbG9vcCBvciBub3Rcblx0XHQgKiAgYmV0d2VlbiBUb25lLkV2ZW50Lmxvb3BTdGFydCBhbmRcblx0XHQgKiAgVG9uZS5FdmVudC5sb29wRW5kLiBBbiBpbnRlZ2VyXG5cdFx0ICogIHZhbHVlIGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2Zcblx0XHQgKiAgbG9vcHMgdGhlIEV2ZW50IGRvZXMgYWZ0ZXIgaXQgc3RhcnRzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGxvb3Bcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbm90ZS4gRGVmYXVsdHMgdG8gMS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogbm90ZS5sb29wID0gdHJ1ZTtcblx0XHQgKiAvL3JlcGVhdCB0aGUgbm90ZSB0d2ljZSBhcyBmYXN0XG5cdFx0ICogbm90ZS5wbGF5YmFja1JhdGUgPSAyO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGxvb3BFbmQgcG9pbnQgaXMgdGhlIHRpbWUgdGhlIGV2ZW50IHdpbGwgbG9vcFxuXHRcdCAqICBpZiBUb25lLkV2ZW50Lmxvb3AgaXMgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wRW5kKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhsb29wRW5kKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHdoZW4gdGhlIGxvb3Agc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wU3RhcnQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9UaWNrcyhsb29wU3RhcnQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGxvb3AgaW50ZXJ2YWwuXG5cdFx0ICogIFJldHVybnMgMCBpZiB0aGUgZXZlbnQgaXMgbm90IHN0YXJ0ZWQgeWV0IG9yXG5cdFx0ICogIGl0IGlzIG5vdCBzZXQgdG8gbG9vcC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvZ3Jlc3Ncblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdwcm9ncmVzcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHZhciB0aWNrcyA9IFRvbmUuVHJhbnNwb3J0LnRpY2tzO1xuXHQgICAgICAgICAgICAgICAgdmFyIGxhc3RFdmVudCA9IHRoaXMuX3N0YXRlLmdldCh0aWNrcyk7XG5cdCAgICAgICAgICAgICAgICBpZiAobGFzdEV2ZW50ICE9PSBudWxsICYmIGxhc3RFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGxvb3BEdXJhdGlvbiA9IHRoaXMuX2dldExvb3BEdXJhdGlvbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9ICh0aWNrcyAtIGxhc3RFdmVudC50aW1lKSAlIGxvb3BEdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgLyBsb29wRHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5jYW5jZWwoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkV2ZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTG9vcCBjcmVhdGVzIGEgbG9vcGVkIGNhbGxiYWNrIGF0IHRoZSBcblx0XHQgKiAgICAgICAgIHNwZWNpZmllZCBpbnRlcnZhbC4gVGhlIGNhbGxiYWNrIGNhbiBiZSBcblx0XHQgKiAgICAgICAgIHN0YXJ0ZWQsIHN0b3BwZWQgYW5kIHNjaGVkdWxlZCBhbG9uZ1xuXHRcdCAqICAgICAgICAgdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbG9vcCA9IG5ldyBUb25lLkxvb3AoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL3RyaWdnZXJlZCBldmVyeSBlaWdodGggbm90ZS4gXG5cdFx0ICogXHRjb25zb2xlLmxvZyh0aW1lKTtcblx0XHQgKiB9LCBcIjhuXCIpLnN0YXJ0KDApO1xuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KCk7XG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggdGhlIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGludGVydmFsIFRoZSB0aW1lIGJldHdlZW4gc3VjY2Vzc2l2ZSBjYWxsYmFjayBjYWxscy4gXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAnaW50ZXJ2YWwnXG5cdCAgICAgICAgXSwgVG9uZS5Mb29wKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGV2ZW50IHdoaWNoIHByb2R1Y2VzIHRoZSBjYWxsYmFja3Ncblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50ID0gbmV3IFRvbmUuRXZlbnQoe1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiB0aGlzLl90aWNrLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICdsb29wJzogdHJ1ZSxcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiBvcHRpb25zLmludGVydmFsLFxuXHQgICAgICAgICAgICAncGxheWJhY2tSYXRlJzogb3B0aW9ucy5wbGF5YmFja1JhdGUsXG5cdCAgICAgICAgICAgICdwcm9iYWJpbGl0eSc6IG9wdGlvbnMucHJvYmFiaWxpdHlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggdGhlIG5leHQgZXZlbnQgaW4gdGhlIHBhdHRlcm5cblx0XHRcdCAqICBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcblx0ICAgICAgICAvL3NldCB0aGUgaXRlcmF0aW9uc1xuXHQgICAgICAgIHRoaXMuaXRlcmF0aW9ucyA9IG9wdGlvbnMuaXRlcmF0aW9ucztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxvb3ApO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ludGVydmFsJzogJzRuJyxcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ2l0ZXJhdGlvbnMnOiBJbmZpbml0eSxcblx0ICAgICAgICAncHJvYmFiaWxpdHknOiB0cnVlLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGxvb3AgYXQgdGhlIHNwZWNpZmllZCB0aW1lIGFsb25nIHRoZSBUcmFuc3BvcnQnc1xuXHRcdCAqICB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbj19ICB0aW1lICBXaGVuIHRvIHN0YXJ0IHRoZSBMb29wLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGxvb3AgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb249fSAgdGltZSAgV2hlbiB0byBzdG9wIHRoZSBBcnBlZ2dpb1xuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYWxsIHNjaGVkdWxlZCBldmVudHMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICBbdGltZT0wXSAgVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggZXZlbnRzIHdpbGwgYmUgY2FuY2VsLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIG5vdGVzIHNob3VsZCBiZSBjYWxsZWRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdGhlIGV2ZW50IG9jY3Vyc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN0YXRlIG9mIHRoZSBMb29wLCBlaXRoZXIgc3RhcnRlZCBvciBzdG9wcGVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5zdGF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJvZ3Jlc3Mgb2YgdGhlIGxvb3AgYXMgYSB2YWx1ZSBiZXR3ZWVuIDAtMS4gMCwgd2hlblxuXHRcdCAqICB0aGUgbG9vcCBpcyBzdG9wcGVkIG9yIGRvbmUgaXRlcmF0aW5nLiBcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9ncmVzc1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAncHJvZ3Jlc3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5wcm9ncmVzcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbGJhY2tzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBsb29wLmludGVydmFsID0gXCI4blwiOyAvL2xvb3AgZXZlcnkgOG5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGludGVydmFsXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ2ludGVydmFsJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQubG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmxvb3BFbmQgPSBpbnRlcnZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbG9vcC4gVGhlIG5vcm1hbCBwbGF5YmFjayByYXRlIGlzIDEgKG5vIGNoYW5nZSkuIFxuXHRcdCAqICBBIGBwbGF5YmFja1JhdGVgIG9mIDIgd291bGQgYmUgdHdpY2UgYXMgZmFzdC4gXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQucGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJhbmRvbSB2YXJpYXRpb24gKy8tMC4wMXMgdG8gdGhlIHNjaGVkdWxlZCB0aW1lLiBcblx0XHQgKiAgT3IgZ2l2ZSBpdCBhIHRpbWUgdmFsdWUgd2hpY2ggaXQgd2lsbCByYW5kb21pemUgYnkuXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEBuYW1lIGh1bWFuaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ2h1bWFuaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQuaHVtYW5pemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YXJpYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQuaHVtYW5pemUgPSB2YXJpYXRpb247XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2JhYmx5IG9mIHRoZSBjYWxsYmFjayBiZWluZyBpbnZva2VkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2JhYmlsaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3Byb2JhYmlsaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQucHJvYmFiaWxpdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9iKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50LnByb2JhYmlsaXR5ID0gcHJvYjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBNdXRpbmcgdGhlIExvb3AgbWVhbnMgdGhhdCBubyBjYWxsYmFja3MgYXJlIGludm9rZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBtdXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgdGhlIGxvb3AuIFRoZSBkZWZhdWx0XG5cdFx0ICogIHZhbHVlIGlzIEluZmluaXR5IChsb29wIGZvcmV2ZXIpLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGl0ZXJhdGlvbnNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnaXRlcmF0aW9ucycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2V2ZW50Lmxvb3AgPT09IHRydWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5sb29wO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpdGVycykge1xuXHQgICAgICAgICAgICBpZiAoaXRlcnMgPT09IEluZmluaXR5KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudC5sb29wID0gdHJ1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmxvb3AgPSBpdGVycztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkxvb3B9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Mb29wO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYXJ0IGlzIGEgY29sbGVjdGlvbiBUb25lLkV2ZW50cyB3aGljaCBjYW4gYmVcblx0XHQgKiAgICAgICAgIHN0YXJ0ZWQvc3RvcHBlZCBhbmQgbG9vcGVkIGFzIGEgc2luZ2xlIHVuaXQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRXZlbnR9XG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugb24gZWFjaCBldmVudFxuXHRcdCAqICBAcGFyYW0ge0FycmF5fSBldmVudHMgdGhlIGFycmF5IG9mIGV2ZW50c1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwYXJ0ID0gbmV3IFRvbmUuUGFydChmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiBcdC8vdGhlIG5vdGVzIGdpdmVuIGFzIHRoZSBzZWNvbmQgZWxlbWVudCBpbiB0aGUgYXJyYXlcblx0XHQgKiBcdC8vd2lsbCBiZSBwYXNzZWQgaW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudFxuXHRcdCAqIFx0c3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2Uobm90ZSwgXCI4blwiLCB0aW1lKTtcblx0XHQgKiB9LCBbWzAsIFwiQzJcIl0sIFtcIjA6MlwiLCBcIkMzXCJdLCBbXCIwOjM6MlwiLCBcIkcyXCJdXSk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy91c2UgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhcyBsb25nIGFzIHRoZSBvYmplY3QgaGFzIGEgXCJ0aW1lXCIgYXR0cmlidXRlXG5cdFx0ICogdmFyIHBhcnQgPSBuZXcgVG9uZS5QYXJ0KGZ1bmN0aW9uKHRpbWUsIHZhbHVlKXtcblx0XHQgKiBcdC8vdGhlIHZhbHVlIGlzIGFuIG9iamVjdCB3aGljaCBjb250YWlucyBib3RoIHRoZSBub3RlIGFuZCB0aGUgdmVsb2NpdHlcblx0XHQgKiBcdHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKHZhbHVlLm5vdGUsIFwiOG5cIiwgdGltZSwgdmFsdWUudmVsb2NpdHkpO1xuXHRcdCAqIH0sIFt7XCJ0aW1lXCIgOiAwLCBcIm5vdGVcIiA6IFwiQzNcIiwgXCJ2ZWxvY2l0eVwiOiAwLjl9LFxuXHRcdCAqIFx0ICAge1widGltZVwiIDogXCIwOjJcIiwgXCJub3RlXCIgOiBcIkM0XCIsIFwidmVsb2NpdHlcIjogMC41fVxuXHRcdCAqIF0pLnN0YXJ0KDApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2V2ZW50cydcblx0ICAgICAgICBdLCBUb25lLlBhcnQpO1xuXHQgICAgICAgIFRvbmUuRXZlbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBhcnJheSBvZiBPYmplY3RzLlxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IFtdO1xuXHQgICAgICAgIC8vYWRkIHRoZSBldmVudHNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMuZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuZXZlbnRzW2ldKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5hZGQob3B0aW9ucy5ldmVudHNbaV1bMF0sIG9wdGlvbnMuZXZlbnRzW2ldWzFdKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYWRkKG9wdGlvbnMuZXZlbnRzW2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhcnQsIFRvbmUuRXZlbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAnMW0nLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdwcm9iYWJpbGl0eSc6IDEsXG5cdCAgICAgICAgJ2h1bWFuaXplJzogZmFsc2UsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZSxcblx0ICAgICAgICAnZXZlbnRzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIHBhcnQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9ICB0aW1lICAgIFdoZW4gdG8gc3RhcnQgdGhlIHBhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgb2Zmc2V0ICBUaGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZWdpbiBwbGF5aW5nIGF0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpY2tzKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCB0aGlzLl9sb29wU3RhcnQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1RpY2tzKG9mZnNldCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAnc3RhdGUnOiBUb25lLlN0YXRlLlN0YXJ0ZWQsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IHRpY2tzLFxuXHQgICAgICAgICAgICAgICAgJ29mZnNldCc6IG9mZnNldFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0Tm90ZShldmVudCwgdGlja3MsIG9mZnNldCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGV2ZW50IGluIHRoZSBnaXZlbiBldmVudCBhdCB0aGUgY29ycmVjdCB0aW1lIGdpdmVuXG5cdFx0ICogIHRoZSB0aWNrcyBhbmQgb2Zmc2V0IGFuZCBsb29waW5nLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fSAgZXZlbnRcblx0XHQgKiAgQHBhcmFtICB7VGlja3N9ICB0aWNrc1xuXHRcdCAqICBAcGFyYW0gIHtUaWNrc30gIG9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fc3RhcnROb3RlID0gZnVuY3Rpb24gKGV2ZW50LCB0aWNrcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgdGlja3MgLT0gb2Zmc2V0O1xuXHQgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgIGlmIChldmVudC5zdGFydE9mZnNldCA+PSB0aGlzLl9sb29wU3RhcnQgJiYgZXZlbnQuc3RhcnRPZmZzZXQgPCB0aGlzLl9sb29wRW5kKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL3N0YXJ0IGl0IG9uIHRoZSBuZXh0IGxvb3Bcblx0ICAgICAgICAgICAgICAgICAgICB0aWNrcyArPSB0aGlzLl9nZXRMb29wRHVyYXRpb24oKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0KFRvbmUuVGlja3ModGlja3MpKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGFydE9mZnNldCA8IHRoaXMuX2xvb3BTdGFydCAmJiBldmVudC5zdGFydE9mZnNldCA+PSBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3AgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0KFRvbmUuVGlja3ModGlja3MpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPj0gb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LnN0YXJ0KFRvbmUuVGlja3ModGlja3MpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdGFydCBmcm9tIHRoZSBzY2hlZHVsZWQgc3RhcnQgdGltZVxuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEBuYW1lIHN0YXJ0T2Zmc2V0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ3N0YXJ0T2Zmc2V0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5zdGFydE9mZnNldCArPSB0aGlzLl9zdGFydE9mZnNldDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgcGFydCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIHRpbWUgIFdoZW4gdG8gc3RvcCB0aGUgcGFydC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aWNrcyk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aWNrcyk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0L1NldCBhbiBFdmVudCdzIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBJZiBhIHZhbHVlIGlzIHBhc3NlZCBpbiBhbmQgbm8gZXZlbnQgZXhpc3RzIGF0XG5cdFx0ICogIHRoZSBnaXZlbiB0aW1lLCBvbmUgd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhhdCB2YWx1ZS5cblx0XHQgKiAgSWYgdHdvIGV2ZW50cyBhcmUgYXQgdGhlIHNhbWUgdGltZSwgdGhlIGZpcnN0IG9uZSB3aWxsXG5cdFx0ICogIGJlIHJldHVybmVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHBhcnQuYXQoXCIxbVwiKTsgLy9yZXR1cm5zIHRoZSBwYXJ0IGF0IHRoZSBmaXJzdCBtZWFzdXJlXG5cdFx0ICpcblx0XHQgKiBwYXJ0LmF0KFwiMm1cIiwgXCJDMlwiKTsgLy9zZXQgdGhlIHZhbHVlIGF0IFwiMm1cIiB0byBDMi5cblx0XHQgKiAvL2lmIGFuIGV2ZW50IGRpZG4ndCBleGlzdCBhdCB0aGF0IHRpbWUsIGl0IHdpbGwgYmUgY3JlYXRlZC5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudCB0byBnZXQgb3Igc2V0LlxuXHRcdCAqICBAcGFyYW0geyo9fSB2YWx1ZSBJZiBhIHZhbHVlIGlzIHBhc3NlZCBpbiwgdGhlIHZhbHVlIG9mIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICBldmVudCBhdCB0aGUgZ2l2ZW4gdGltZSB3aWxsIGJlIHNldCB0byBpdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5FdmVudH0gdGhlIGV2ZW50IGF0IHRoZSB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICB2YXIgdGlja1RpbWUgPSBUb25lLlRpY2tzKDEpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50c1tpXTtcblx0ICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRpbWUudG9UaWNrcygpIC0gZXZlbnQuc3RhcnRPZmZzZXQpIDwgdGlja1RpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh2YWx1ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaWYgdGhlcmUgd2FzIG5vIGV2ZW50IGF0IHRoYXQgdGltZSwgY3JlYXRlIG9uZVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh2YWx1ZSkpIHtcblx0ICAgICAgICAgICAgdGhpcy5hZGQodGltZSwgdmFsdWUpO1xuXHQgICAgICAgICAgICAvL3JldHVybiB0aGUgbmV3IGV2ZW50XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudHNbdGhpcy5fZXZlbnRzLmxlbmd0aCAtIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgYW4gZXZlbnQgdG8gdGhlIHBhcnQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0aGUgbm90ZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYW4gb2JqZWN0IGlzIHBhc3NlZCBpbiwgaXQgc2hvdWxkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBhICd0aW1lJyBhdHRyaWJ1dGUgYW5kIHRoZSByZXN0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIG9iamVjdCB3aWxsIGJlIHVzZWQgYXMgdGhlICd2YWx1ZScuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuRXZlbnR8Kn0gIHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwYXJ0LmFkZChcIjFtXCIsIFwiQyMrMTFcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIC8vZXh0cmFjdCB0aGUgcGFyYW1ldGVyc1xuXHQgICAgICAgIGlmICh0aW1lLmhhc093blByb3BlcnR5KCd0aW1lJykpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aW1lO1xuXHQgICAgICAgICAgICB0aW1lID0gdmFsdWUudGltZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICB2YXIgZXZlbnQ7XG5cdCAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVG9uZS5FdmVudCkge1xuXHQgICAgICAgICAgICBldmVudCA9IHZhbHVlO1xuXHQgICAgICAgICAgICBldmVudC5jYWxsYmFjayA9IHRoaXMuX3RpY2suYmluZCh0aGlzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBldmVudCA9IG5ldyBUb25lLkV2ZW50KHtcblx0ICAgICAgICAgICAgICAgICdjYWxsYmFjayc6IHRoaXMuX3RpY2suYmluZCh0aGlzKSxcblx0ICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3RoZSBzdGFydCBvZmZzZXRcblx0ICAgICAgICBldmVudC5zdGFydE9mZnNldCA9IHRpbWU7XG5cdCAgICAgICAgLy9pbml0aWFsaXplIHRoZSB2YWx1ZXNcblx0ICAgICAgICBldmVudC5zZXQoe1xuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IHRoaXMubG9vcEVuZCxcblx0ICAgICAgICAgICAgJ2xvb3BTdGFydCc6IHRoaXMubG9vcFN0YXJ0LFxuXHQgICAgICAgICAgICAnbG9vcCc6IHRoaXMubG9vcCxcblx0ICAgICAgICAgICAgJ2h1bWFuaXplJzogdGhpcy5odW1hbml6ZSxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IHRoaXMucGxheWJhY2tSYXRlLFxuXHQgICAgICAgICAgICAncHJvYmFiaWxpdHknOiB0aGlzLnByb2JhYmlsaXR5XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLnB1c2goZXZlbnQpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIG5vdGUgaWYgaXQgc2hvdWxkIGJlIHBsYXllZCByaWdodCBub3dcblx0ICAgICAgICB0aGlzLl9yZXN0YXJ0RXZlbnQoZXZlbnQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXN0YXJ0IHRoZSBnaXZlbiBldmVudFxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fSAgZXZlbnRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3Jlc3RhcnRFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2goZnVuY3Rpb24gKHN0YXRlRXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKHN0YXRlRXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnROb3RlKGV2ZW50LCBzdGF0ZUV2ZW50LnRpbWUsIHN0YXRlRXZlbnQub2Zmc2V0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vc3RvcCB0aGUgbm90ZVxuXHQgICAgICAgICAgICAgICAgZXZlbnQuc3RvcChUb25lLlRpY2tzKHN0YXRlRXZlbnQudGltZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGFuIGV2ZW50IGZyb20gdGhlIHBhcnQuIFdpbGwgcmVjdXJzaXZlbHkgaXRlcmF0ZVxuXHRcdCAqICBpbnRvIG5lc3RlZCBwYXJ0cyB0byBmaW5kIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudFxuXHRcdCAqICBAcGFyYW0geyp9IHZhbHVlIE9wdGlvbmFsbHkgc2VsZWN0IG9ubHkgYSBzcGVjaWZpYyBldmVudCB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGltZSwgdmFsdWUpIHtcblx0ICAgICAgICAvL2V4dHJhY3QgdGhlIHBhcmFtZXRlcnNcblx0ICAgICAgICBpZiAodGltZS5oYXNPd25Qcm9wZXJ0eSgndGltZScpKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGltZTtcblx0ICAgICAgICAgICAgdGltZSA9IHZhbHVlLnRpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2V2ZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHNbaV07XG5cdCAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIFRvbmUuUGFydCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQucmVtb3ZlKHRpbWUsIHZhbHVlKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGFydE9mZnNldCA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih2YWx1ZSkgfHwgVG9uZS5pc0RlZmluZWQodmFsdWUpICYmIGV2ZW50LnZhbHVlID09PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5zcGxpY2UoaSwgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYWxsIG9mIHRoZSBub3RlcyBmcm9tIHRoZSBncm91cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBbXTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIHNjaGVkdWxlZCBzdGF0ZSBjaGFuZ2UgZXZlbnRzOiBpLmUuIFwic3RhcnRcIiBhbmQgXCJzdG9wXCIuXG5cdFx0ICogIEBwYXJhbSB7VGltZWxpbmVQb3NpdGlvbn0gYWZ0ZXIgVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggdG8gY2FuY2VsIHRoZSBzY2hlZHVsZWQgZXZlbnRzLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5jYW5jZWwoYWZ0ZXIpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aGlzLnRvVGlja3MoYWZ0ZXIpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgZXZlbnRzXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBjdHggVGhlIGNvbnRleHRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX2ZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGN0eCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMpIHtcblx0ICAgICAgICAgICAgY3R4ID0gVG9uZS5kZWZhdWx0QXJnKGN0eCwgdGhpcyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9ldmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIHZhciBlID0gdGhpcy5fZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBUb25lLlBhcnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBlLl9mb3JFYWNoKGNhbGxiYWNrLCBjdHgpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGN0eCwgZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgYXR0cmlidXRlIG9mIGFsbCBvZiB0aGUgZXZlbnRzXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGF0dHIgIHRoZSBhdHRyaWJ1dGUgdG8gc2V0XG5cdFx0ICogIEBwYXJhbSAgeyp9ICB2YWx1ZSAgICAgIFRoZSB2YWx1ZSB0byBzZXQgaXQgdG9cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3NldEFsbCA9IGZ1bmN0aW9uIChhdHRyLCB2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50W2F0dHJdID0gdmFsdWU7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHRpY2sgbWV0aG9kXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIG9mIHRoZSBldmVudCBpbiBzZWNvbmRzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLm11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB2YWx1ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZXRlcm1pbmUgaWYgdGhlIGV2ZW50IHNob3VsZCBiZSBjdXJyZW50bHkgbG9vcGluZ1xuXHRcdCAqICBnaXZlbiB0aGUgbG9vcCBib3VuZHJpZXMgb2YgdGhpcyBQYXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fSAgZXZlbnQgIFRoZSBldmVudCB0byB0ZXN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl90ZXN0TG9vcEJvdW5kcmllcyA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmIChldmVudC5zdGFydE9mZnNldCA8IHRoaXMuX2xvb3BTdGFydCB8fCBldmVudC5zdGFydE9mZnNldCA+PSB0aGlzLl9sb29wRW5kKSB7XG5cdCAgICAgICAgICAgIGV2ZW50LmNhbmNlbCgwKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgLy9yZXNjaGVkdWxlIGl0IGlmIGl0J3Mgc3RvcHBlZFxuXHQgICAgICAgICAgICB0aGlzLl9yZXN0YXJ0RXZlbnQoZXZlbnQpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2JhYmlsaXR5IG9mIHRoZSBub3RlcyBiZWluZyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvYmFiaWxpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAncHJvYmFiaWxpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9iYWJpbGl0eTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2IpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcHJvYmFiaWxpdHkgPSBwcm9iO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBbGwoJ3Byb2JhYmlsaXR5JywgcHJvYik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgc2V0IHRvIHRydWUsIHdpbGwgYXBwbHkgc21hbGwgcmFuZG9tIHZhcmlhdGlvblxuXHRcdCAqICB0byB0aGUgY2FsbGJhY2sgdGltZS4gSWYgdGhlIHZhbHVlIGlzIGdpdmVuIGFzIGEgdGltZSwgaXQgd2lsbCByYW5kb21pemVcblx0XHQgKiAgYnkgdGhhdCBhbW91bnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogZXZlbnQuaHVtYW5pemUgPSB0cnVlO1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdCAqICBAbmFtZSBodW1hbml6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdodW1hbml6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2h1bWFuaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFyaWF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2h1bWFuaXplID0gdmFyaWF0aW9uO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBbGwoJ2h1bWFuaXplJywgdmFyaWF0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgcGFydCBzaG91bGQgbG9vcCBvciBub3Rcblx0XHQgKiAgYmV0d2VlbiBUb25lLlBhcnQubG9vcFN0YXJ0IGFuZFxuXHRcdCAqICBUb25lLlBhcnQubG9vcEVuZC4gQW4gaW50ZWdlclxuXHRcdCAqICB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mXG5cdFx0ICogIGxvb3BzIHRoZSBQYXJ0IGRvZXMgYWZ0ZXIgaXQgc3RhcnRzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgbG9vcFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9vcCB0aGUgcGFydCA4IHRpbWVzXG5cdFx0ICogcGFydC5sb29wID0gODtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3A7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuX2xvb3BTdGFydCA9IHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Ll9sb29wRW5kID0gdGhpcy5fbG9vcEVuZDtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdGVzdExvb3BCb3VuZHJpZXMoZXZlbnQpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbG9vcEVuZCBwb2ludCBkZXRlcm1pbmVzIHdoZW4gaXQgd2lsbFxuXHRcdCAqICBsb29wIGlmIFRvbmUuUGFydC5sb29wIGlzIHRydWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BFbmQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKGxvb3BFbmQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXN0TG9vcEJvdW5kcmllcyhldmVudCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBsb29wU3RhcnQgcG9pbnQgZGV0ZXJtaW5lcyB3aGVuIGl0IHdpbGxcblx0XHQgKiAgbG9vcCBpZiBUb25lLlBhcnQubG9vcCBpcyB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcFN0YXJ0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3MobG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQubG9vcFN0YXJ0ID0gdGhpcy5sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGVzdExvb3BCb3VuZHJpZXMoZXZlbnQpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0VGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIHBhcnRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBbGwoJ3BsYXliYWNrUmF0ZScsIHJhdGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRUaGUgbnVtYmVyIG9mIHNjaGVkdWxlZCBub3RlcyBpbiB0aGUgcGFydC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBsZW5ndGhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50cy5sZW5ndGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnJlbW92ZUFsbCgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYXJ0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGF0dGVybiBhcnBlZ2dpYXRlcyBiZXR3ZWVuIHRoZSBnaXZlbiBub3Rlc1xuXHRcdCAqICAgICAgICAgaW4gYSBudW1iZXIgb2YgcGF0dGVybnMuIFNlZSBUb25lLkN0cmxQYXR0ZXJuIGZvclxuXHRcdCAqICAgICAgICAgYSBmdWxsIGxpc3Qgb2YgcGF0dGVybnMuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBhdHRlcm4gPSBuZXcgVG9uZS5QYXR0ZXJuKGZ1bmN0aW9uKHRpbWUsIG5vdGUpe1xuXHRcdCAqICAgLy90aGUgb3JkZXIgb2YgdGhlIG5vdGVzIHBhc3NlZCBpbiBkZXBlbmRzIG9uIHRoZSBwYXR0ZXJuXG5cdFx0ICogfSwgW1wiQzJcIiwgXCJENFwiLCBcIkU1XCIsIFwiQTZcIl0sIFwidXBEb3duXCIpO1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Mb29wfVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcnBlZ2dpYXRlIG92ZXIuXG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAndmFsdWVzJyxcblx0ICAgICAgICAgICAgJ3BhdHRlcm4nXG5cdCAgICAgICAgXSwgVG9uZS5QYXR0ZXJuKTtcblx0ICAgICAgICBUb25lLkxvb3AuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGF0dGVybiBtYW5hZ2VyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3RybFBhdHRlcm59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4gPSBuZXcgVG9uZS5DdHJsUGF0dGVybih7XG5cdCAgICAgICAgICAgICd2YWx1ZXMnOiBvcHRpb25zLnZhbHVlcyxcblx0ICAgICAgICAgICAgJ3R5cGUnOiBvcHRpb25zLnBhdHRlcm4sXG5cdCAgICAgICAgICAgICdpbmRleCc6IG9wdGlvbnMuaW5kZXhcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhdHRlcm4sIFRvbmUuTG9vcCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGF0dGVybi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGF0dGVybic6IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCxcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ3ZhbHVlcyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBub3RlcyBzaG91bGQgYmUgY2FsbGVkXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRoZSBldmVudCBvY2N1cnNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGF0dGVybi5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgdGhpcy5fcGF0dGVybi52YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fcGF0dGVybi5uZXh0KCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IGluZGV4IGluIHRoZSB2YWx1ZXMgYXJyYXkuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgaW5kZXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAnaW5kZXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuLmluZGV4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXR0ZXJuLmluZGV4ID0gaTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYXJyYXkgb2YgZXZlbnRzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICogIEBuYW1lIHZhbHVlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICd2YWx1ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuLnZhbHVlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGF0dGVybi52YWx1ZXMgPSB2YWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwYXR0ZXJuLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXR0ZXJuLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi52YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGF0dGVybiB0eXBlLiBTZWUgVG9uZS5DdHJsUGF0dGVybiBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBwYXR0ZXJucy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgcGF0dGVyblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICdwYXR0ZXJuJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGF0dGVybikge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXR0ZXJuLnR5cGUgPSBwYXR0ZXJuO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhdHRlcm59ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcGF0dGVybi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcGF0dGVybiA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGF0dGVybjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgc2VxdWVuY2UgaXMgYW4gYWx0ZXJuYXRlIG5vdGF0aW9uIG9mIGEgcGFydC4gSW5zdGVhZFxuXHRcdCAqICAgICAgICAgb2YgcGFzc2luZyBpbiBhbiBhcnJheSBvZiBbdGltZSwgZXZlbnRdIHBhaXJzLCBwYXNzXG5cdFx0ICogICAgICAgICBpbiBhbiBhcnJheSBvZiBldmVudHMgd2hpY2ggd2lsbCBiZSBzcGFjZWQgYXQgdGhlXG5cdFx0ICogICAgICAgICBnaXZlbiBzdWJkaXZpc2lvbi4gU3ViLWFycmF5cyB3aWxsIHN1YmRpdmlkZSB0aGF0IGJlYXRcblx0XHQgKiAgICAgICAgIGJ5IHRoZSBudW1iZXIgb2YgaXRlbXMgYXJlIGluIHRoZSBhcnJheS5cblx0XHQgKiAgICAgICAgIFNlcXVlbmNlIG5vdGF0aW9uIGluc3BpcmF0aW9uIGZyb20gW1RpZGFsXShodHRwOi8veWF4dS5vcmcvdGlkYWwvKVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gICAgZXZlbnRzICBUaGUgc2VxdWVuY2Vcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gc3ViZGl2aXNpb24gIFRoZSBzdWJkaXZpc2lvbiBiZXR3ZWVuIHdoaWNoIGV2ZW50cyBhcmUgcGxhY2VkLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5QYXJ0fVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzZXEgPSBuZXcgVG9uZS5TZXF1ZW5jZShmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKG5vdGUpO1xuXHRcdCAqIC8vc3RyYWlnaHQgcXVhdGVyIG5vdGVzXG5cdFx0ICogfSwgW1wiQzRcIiwgXCJFNFwiLCBcIkc0XCIsIFwiQTRcIl0sIFwiNG5cIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNlcSA9IG5ldyBUb25lLlNlcXVlbmNlKGZ1bmN0aW9uKHRpbWUsIG5vdGUpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2cobm90ZSk7XG5cdFx0ICogLy9zdWJkaXZpc2lvbnMgYXJlIGdpdmVuIGFzIHN1YmFycmF5c1xuXHRcdCAqIH0sIFtcIkM0XCIsIFtcIkU0XCIsIFwiRDRcIiwgXCJFNFwiXSwgXCJHNFwiLCBbXCJBNFwiLCBcIkc0XCJdXSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2V2ZW50cycsXG5cdCAgICAgICAgICAgICdzdWJkaXZpc2lvbidcblx0ICAgICAgICBdLCBUb25lLlNlcXVlbmNlKTtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgZXZlbnRzXG5cdCAgICAgICAgdmFyIGV2ZW50cyA9IG9wdGlvbnMuZXZlbnRzO1xuXHQgICAgICAgIGRlbGV0ZSBvcHRpb25zLmV2ZW50cztcblx0ICAgICAgICBUb25lLlBhcnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3ViZGl2aXNvbiBvZiBlYWNoIG5vdGVcblx0XHRcdCAqICBAdHlwZSAge1RpY2tzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWJkaXZpc2lvbiA9IHRoaXMudG9UaWNrcyhvcHRpb25zLnN1YmRpdmlzaW9uKTtcblx0ICAgICAgICAvL2lmIG5vIHRpbWUgd2FzIHBhc3NlZCBpbiwgdGhlIGxvb3AgZW5kIGlzIHRoZSBlbmQgb2YgdGhlIGN5Y2xlXG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihvcHRpb25zLmxvb3BFbmQpICYmIFRvbmUuaXNEZWZpbmVkKGV2ZW50cykpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IGV2ZW50cy5sZW5ndGggKiB0aGlzLl9zdWJkaXZpc2lvbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9kZWZhdWx0cyB0byBsb29waW5nXG5cdCAgICAgICAgdGhpcy5fbG9vcCA9IHRydWU7XG5cdCAgICAgICAgLy9hZGQgYWxsIG9mIHRoZSBldmVudHNcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoZXZlbnRzKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5hZGQoaSwgZXZlbnRzW2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNlcXVlbmNlLCBUb25lLlBhcnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLmRlZmF1bHRzID0geyAnc3ViZGl2aXNpb24nOiAnNG4nIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN1YmRpdmlzaW9uIG9mIHRoZSBzZXF1ZW5jZS4gVGhpcyBjYW4gb25seSBiZVxuXHRcdCAqICBzZXQgaW4gdGhlIGNvbnN0cnVjdG9yLiBUaGUgc3ViZGl2aXNpb24gaXMgdGhlXG5cdFx0ICogIGludGVydmFsIGJldHdlZW4gc3VjY2Vzc2l2ZSBzdGVwcy5cblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNlcXVlbmNlI1xuXHRcdCAqICBAbmFtZSBzdWJkaXZpc2lvblxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNlcXVlbmNlLnByb3RvdHlwZSwgJ3N1YmRpdmlzaW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9zdWJkaXZpc2lvbikudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0L1NldCBhbiBpbmRleCBvZiB0aGUgc2VxdWVuY2UuIElmIHRoZSBpbmRleCBjb250YWlucyBhIHN1YmFycmF5LFxuXHRcdCAqICBhIFRvbmUuU2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoYXQgc3ViLWFycmF5IHdpbGwgYmUgcmV0dXJuZWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNlcXVlbmNlID0gbmV3IFRvbmUuU2VxdWVuY2UocGxheU5vdGUsIFtcIkU0XCIsIFwiQzRcIiwgXCJGIzRcIiwgW1wiQTRcIiwgXCJCYjNcIl1dKVxuXHRcdCAqIHNlcXVlbmNlLmF0KDApLy8gPT4gcmV0dXJucyBcIkU0XCJcblx0XHQgKiAvL3NldCBhIHZhbHVlXG5cdFx0ICogc2VxdWVuY2UuYXQoMCwgXCJHM1wiKTtcblx0XHQgKiAvL2dldCBhIG5lc3RlZCBzZXF1ZW5jZVxuXHRcdCAqIHNlcXVlbmNlLmF0KDMpLmF0KDEpLy8gPT4gcmV0dXJucyBcIkJiM1wiXG5cdFx0ICogQHBhcmFtIHtQb3NpdGl2ZX0gaW5kZXggVGhlIGluZGV4IHRvIGdldCBvciBzZXRcblx0XHQgKiBAcGFyYW0geyp9IHZhbHVlIE9wdGlvbmFsbHkgcGFzcyBpbiB0aGUgdmFsdWUgdG8gc2V0IGF0IHRoZSBnaXZlbiBpbmRleC5cblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuXHQgICAgICAgIC8vaWYgdGhlIHZhbHVlIGlzIGFuIGFycmF5LFxuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBjdXJyZW50IGV2ZW50IGF0IHRoYXQgaW5kZXhcblx0ICAgICAgICAgICAgdGhpcy5yZW1vdmUoaW5kZXgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NhbGwgdGhlIHBhcmVudCdzIG1ldGhvZFxuXHQgICAgICAgIHJldHVybiBUb25lLlBhcnQucHJvdG90eXBlLmF0LmNhbGwodGhpcywgdGhpcy5faW5kZXhUaW1lKGluZGV4KSwgdmFsdWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYW4gZXZlbnQgYXQgYW4gaW5kZXgsIGlmIHRoZXJlJ3MgYWxyZWFkeSBzb21ldGhpbmdcblx0XHQgKiAgYXQgdGhhdCBpbmRleCwgb3ZlcndyaXRlIGl0LiBJZiBgdmFsdWVgIGlzIGFuIGFycmF5LFxuXHRcdCAqICBpdCB3aWxsIGJlIHBhcnNlZCBhcyBhIHN1YnNlcXVlbmNlLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gaW5kZXggVGhlIGluZGV4IHRvIGFkZCB0aGUgZXZlbnQgdG9cblx0XHQgKiAgQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYWRkIGF0IHRoYXQgaW5kZXhcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2VxdWVuY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcblx0ICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIC8vbWFrZSBhIHN1YnNlcXVlbmNlIGFuZCBhZGQgdGhhdCB0byB0aGUgc2VxdWVuY2Vcblx0ICAgICAgICAgICAgdmFyIHN1YlN1YmRpdmlzaW9uID0gTWF0aC5yb3VuZCh0aGlzLl9zdWJkaXZpc2lvbiAvIHZhbHVlLmxlbmd0aCk7XG5cdCAgICAgICAgICAgIHZhbHVlID0gbmV3IFRvbmUuU2VxdWVuY2UodGhpcy5fdGljay5iaW5kKHRoaXMpLCB2YWx1ZSwgVG9uZS5UaWNrcyhzdWJTdWJkaXZpc2lvbikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLlBhcnQucHJvdG90eXBlLmFkZC5jYWxsKHRoaXMsIHRoaXMuX2luZGV4VGltZShpbmRleCksIHZhbHVlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGEgdmFsdWUgZnJvbSB0aGUgc2VxdWVuY2UgYnkgaW5kZXhcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZXZlbnQgdG8gcmVtb3ZlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNlcXVlbmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5yZW1vdmUuY2FsbCh0aGlzLCB0aGlzLl9pbmRleFRpbWUoaW5kZXgpLCB2YWx1ZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgdGltZSBvZiB0aGUgaW5kZXggZ2l2ZW4gdGhlIFNlcXVlbmNlJ3Mgc3ViZGl2aXNpb25cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgaW5kZXhcblx0XHQgKiAgQHJldHVybiAge1RpbWV9ICBUaGUgdGltZSBvZiB0aGF0IGluZGV4XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5faW5kZXhUaW1lID0gZnVuY3Rpb24gKGluZGV4KSB7XG5cdCAgICAgICAgaWYgKGluZGV4IGluc3RhbmNlb2YgVG9uZS5UcmFuc3BvcnRUaW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBpbmRleDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyhpbmRleCAqIHRoaXMuX3N1YmRpdmlzaW9uICsgdGhpcy5zdGFydE9mZnNldCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5TZXF1ZW5jZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlBhcnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TZXF1ZW5jZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUHVsc2VPc2NpbGxhdG9yIGlzIGEgcHVsc2Ugb3NjaWxsYXRvciB3aXRoIGNvbnRyb2wgb3ZlciBwdWxzZSB3aWR0aCxcblx0XHQgKiAgICAgICAgIGFsc28ga25vd24gYXMgdGhlIGR1dHkgY3ljbGUuIEF0IDUwJSBkdXR5IGN5Y2xlICh3aWR0aCA9IDAuNSkgdGhlIHdhdmUgaXNcblx0XHQgKiAgICAgICAgIGEgc3F1YXJlIGFuZCBvbmx5IG9kZC1udW1iZXJlZCBoYXJtb25pY3MgYXJlIHByZXNlbnQuIEF0IGFsbCBvdGhlciB3aWR0aHNcblx0XHQgKiAgICAgICAgIGV2ZW4tbnVtYmVyZWQgaGFybW9uaWNzIGFyZSBwcmVzZW50LiBSZWFkIG1vcmVcblx0XHQgKiAgICAgICAgIFtoZXJlXShodHRwczovL3dpZ2dsZXdhdmUud29yZHByZXNzLmNvbS8yMDE0LzA4LzE2L3B1bHNlLXdhdmVmb3Jtcy1hbmQtaGFybW9uaWNzLykuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtmcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3dpZHRoXSBUaGUgd2lkdGggb2YgdGhlIHB1bHNlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHB1bHNlID0gbmV3IFRvbmUuUHVsc2VPc2NpbGxhdG9yKFwiRTVcIiwgMC40KS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnd2lkdGgnXG5cdCAgICAgICAgXSwgVG9uZS5Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3aWR0aCBvZiB0aGUgcHVsc2UuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy53aWR0aCwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBnYXRlIHRoZSB3aWR0aCBhbW91bnRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHNhd3Rvb3RoIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zYXd0b290aCA9IG5ldyBUb25lLk9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICBmcmVxdWVuY3k6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICBkZXR1bmU6IG9wdGlvbnMuZGV0dW5lLFxuXHQgICAgICAgICAgICB0eXBlOiAnc2F3dG9vdGgnLFxuXHQgICAgICAgICAgICBwaGFzZTogb3B0aW9ucy5waGFzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fc2F3dG9vdGguZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHMuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fc2F3dG9vdGguZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRocmVzaG9sZCB0aGUgc2lnbmFsIHRvIHR1cm4gaXQgaW50byBhIHNxdWFyZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAodmFsIDwgMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguY2hhaW4odGhpcy5fdGhyZXNoLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5jaGFpbih0aGlzLl93aWR0aEdhdGUsIHRoaXMuX3RocmVzaCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnd2lkdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlB1bHNlT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHBhcmFtZXRlcnMuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ3dpZHRoJzogMC4yXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIC8vdGhlIHdpZHRoIGlzIHN0aWxsIGNvbm5lY3RlZCB0byB0aGUgb3V0cHV0LlxuXHQgICAgICAgIC8vdGhhdCBuZWVkcyB0byBiZSBzdG9wcGVkIGFsc29cblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUHVsc2VPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zYXd0b290aC5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvci4gQWx3YXlzIHJldHVybnMgXCJwdWxzZVwiLlxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlB1bHNlT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gJ3B1bHNlJztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgd2F2ZWZvcm0uIENhbm5vdCBzZXQgcGFydGlhbHMgZm9yIHRoaXMgd2F2ZWZvcm0gdHlwZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlB1bHNlT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gW107XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAgbWV0aG9kLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlB1bHNlT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3dpZHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy53aWR0aCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGhyZXNoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlB1bHNlT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUFdNT3NjaWxsYXRvciBtb2R1bGF0ZXMgdGhlIHdpZHRoIG9mIGEgVG9uZS5QdWxzZU9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgIGF0IHRoZSBtb2R1bGF0aW9uRnJlcXVlbmN5LiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIGNvbnRpbnVvdXNseVxuXHRcdCAqICAgICAgICAgY2hhbmdpbmcgdGhlIHRpbWJyZSBvZiB0aGUgb3NjaWxsYXRvciBieSBhbHRlcmluZyB0aGUgaGFybW9uaWNzXG5cdFx0ICogICAgICAgICBnZW5lcmF0ZWQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gbW9kdWxhdGlvbkZyZXF1ZW5jeSBUaGUgbW9kdWxhdGlvbiBmcmVxdWVuY3kgb2YgdGhlIHdpZHRoIG9mIHRoZSBwdWxzZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIHB3bSA9IG5ldyBUb25lLlBXTU9zY2lsbGF0b3IoXCJBYjNcIiwgMC4zKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25GcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5QV01Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwdWxzZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUHVsc2VPc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wdWxzZSA9IG5ldyBUb25lLlB1bHNlT3NjaWxsYXRvcihvcHRpb25zLm1vZHVsYXRpb25GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vY2hhbmdlIHRoZSBwdWxzZSBvc2NpbGxhdG9yIHR5cGVcblx0ICAgICAgICB0aGlzLl9wdWxzZS5fc2F3dG9vdGgudHlwZSA9ICdzaW5lJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbW9kdWxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcih7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2RldHVuZSc6IG9wdGlvbnMuZGV0dW5lLFxuXHQgICAgICAgICAgICAncGhhc2UnOiBvcHRpb25zLnBoYXNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2NhbGUgdGhlIG9zY2lsbGF0b3Igc28gaXQgZG9lc24ndCBnbyBzaWxlbnRcblx0XHRcdCAqICBhdCB0aGUgZXh0cmVtZSB2YWx1ZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbmV3IFRvbmUuTXVsdGlwbHkoMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fbW9kdWxhdG9yLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGlvbiByYXRlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRnJlcXVlbmN5ID0gdGhpcy5fcHVsc2UuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY2hhaW4odGhpcy5fc2NhbGUsIHRoaXMuX3B1bHNlLndpZHRoKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QV01Pc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ21vZHVsYXRpb25GcmVxdWVuY3knOiAwLjRcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2Uuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuIEFsd2F5cyByZXR1cm5zIFwicHdtXCIuXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUFdNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICdwd20nO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQ2Fubm90IHNldCBwYXJ0aWFscyBmb3IgdGhpcyB3YXZlZm9ybSB0eXBlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUFdNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUFdNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9kdWxhdG9yLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUFdNT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25GcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBXTU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZNT3NjaWxsYXRvclxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IG1vZHVsYXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egc2luZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeS1tb2R1bGF0ZWQgYnkgYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIHZhciBmbU9zYyA9IG5ldyBUb25lLkZNT3NjaWxsYXRvcihcIkFiM1wiLCBcInNpbmVcIiwgXCJzcXVhcmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvblR5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5GTU9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKG9wdGlvbnMuZnJlcXVlbmN5LCBvcHRpb25zLnR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLl9jYXJyaWVyLmRldHVuZTtcblx0ICAgICAgICB0aGlzLmRldHVuZS52YWx1ZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW9uIGluZGV4IHdoaWNoIGlzIGluIGVzc2VuY2UgdGhlIGRlcHRoIG9yIGFtb3VudCBvZiB0aGUgbW9kdWxhdGlvbi4gSW4gb3RoZXIgdGVybXMgaXQgaXMgdGhlXG5cdFx0XHQgKiAgcmF0aW8gb2YgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxhdGluZyBzaWduYWwgKG1mKSB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZVxuXHRcdFx0ICogIG1vZHVsYXRpbmcgc2lnbmFsIChtYSkgLS0gYXMgaW4gbWEvbWYuXG5cdFx0XHQgKlx0QHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICpcdEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5tb2R1bGF0aW9uSW5kZXgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW5nIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy5tb2R1bGF0aW9uVHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSBjYXJyaWVyIGFuZCB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3JzLlxuXHRcdFx0ICogIEEgaGFybW9uaWNpdHkgb2YgMSBnaXZlcyBib3RoIG9zY2lsbGF0b3JzIHRoZSBzYW1lIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdGhlIG1vZHVsYXRvciBhbiBvY3RhdmUgYmVsb3cgY2FycmllclxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKDApO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLm1vZHVsYXRpb25JbmRleCwgdGhpcy5fbW9kdWxhdGlvbk5vZGUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jb25uZWN0KHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZNT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IDIsXG5cdCAgICAgICAgJ21vZHVsYXRpb25UeXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvblR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uVHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIGNhcnJpZXIgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRk1Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRk1Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BTU9zY2lsbGF0b3Jcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gbW9kdWxhdGlvblR5cGUgVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBzaW5lIG9zY2lsbGF0b3IgZnJlcXVlbmN5LW1vZHVsYXRlZCBieSBhIHNxdWFyZSB3YXZlXG5cdFx0ICogdmFyIGZtT3NjID0gbmV3IFRvbmUuQU1Pc2NpbGxhdG9yKFwiQWIzXCIsIFwic2luZVwiLCBcInNxdWFyZVwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uVHlwZSdcblx0ICAgICAgICBdLCBUb25lLkFNT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMudHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fY2Fycmllci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLl9jYXJyaWVyLmRldHVuZTtcblx0ICAgICAgICB0aGlzLmRldHVuZS52YWx1ZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW5nIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy5tb2R1bGF0aW9uVHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29udmVydCB0aGUgLTEsMSBvdXRwdXQgdG8gMCwxXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQXVkaW9Ub0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSBjYXJyaWVyIGFuZCB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3JzLlxuXHRcdFx0ICogIEEgaGFybW9uaWNpdHkgb2YgMSBnaXZlcyBib3RoIG9zY2lsbGF0b3JzIHRoZSBzYW1lIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdGhlIG1vZHVsYXRvciBhbiBvY3RhdmUgYmVsb3cgY2FycmllclxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKDApO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHRoaXMuX21vZHVsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jaGFpbih0aGlzLl9tb2R1bGF0aW9uU2NhbGUsIHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY2hhaW4odGhpcy5fbW9kdWxhdGlvbk5vZGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQU1Pc2NpbGxhdG9yLCBUb25lLk9zY2lsbGF0b3IpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ21vZHVsYXRpb25UeXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHJlc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkFNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvblR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uVHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIGNhcnJpZXIgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQU1Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQU1Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GYXRPc2NpbGxhdG9yXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gbW9kdWxhdGlvblR5cGUgVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBzaW5lIG9zY2lsbGF0b3IgZnJlcXVlbmN5LW1vZHVsYXRlZCBieSBhIHNxdWFyZSB3YXZlXG5cdFx0ICogdmFyIGZtT3NjID0gbmV3IFRvbmUuRmF0T3NjaWxsYXRvcihcIkFiM1wiLCBcInNpbmVcIiwgXCJzcXVhcmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ3NwcmVhZCdcblx0ICAgICAgICBdLCBUb25lLkZhdE9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXJyYXkgb2Ygb3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRvdGFsIHNwcmVhZCBvZiB0aGUgb3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSAge0NlbnRzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcHJlYWQgPSBvcHRpb25zLnNwcmVhZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yc1xuXHRcdFx0ICogIEB0eXBlIHtEZWdyZWVzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhcnRpYWxzIGFycmF5XG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLnBhcnRpYWxzLCBbXSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGNvdW50IGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuY291bnQgPSBvcHRpb25zLmNvdW50O1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GYXRPc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ3NwcmVhZCc6IDIwLFxuXHQgICAgICAgICdjb3VudCc6IDMsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2F3dG9vdGgnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdGFydCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIG9zY2lsbGF0b3JzXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgaXRlcmF0b3IgIFRoZSBpdGVyYXRvciBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5fZm9yRWFjaCA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgaXRlcmF0b3IuY2FsbCh0aGlzLCB0aGlzLl9vc2NpbGxhdG9yc1tpXSwgaSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZXR1bmUgc3ByZWFkIGJldHdlZW4gdGhlIG9zY2lsbGF0b3JzLiBJZiBcImNvdW50XCIgaXNcblx0XHQgKiBzZXQgdG8gMyBvc2NpbGxhdG9ycyBhbmQgdGhlIFwic3ByZWFkXCIgaXMgc2V0IHRvIDQwLFxuXHRcdCAqIHRoZSB0aHJlZSBvc2NpbGxhdG9ycyB3b3VsZCBiZSBkZXR1bmVkIGxpa2UgdGhpczogWy0yMCwgMCwgMjBdXG5cdFx0ICogZm9yIGEgdG90YWwgZGV0dW5lIHNwcmVhZCBvZiA0MCBjZW50cy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtDZW50c31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3ByZWFkO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ByZWFkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NwcmVhZCA9IHNwcmVhZDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aCA+IDEpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IC1zcHJlYWQgLyAyO1xuXHQgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSBzcHJlYWQgLyAodGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MsIGkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvc2MuZGV0dW5lLnZhbHVlID0gc3RhcnQgKyBzdGVwICogaTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIGRldHVuZWQgb3NjaWxsYXRvcnNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgY291bnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAnY291bnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjb3VudCkge1xuXHQgICAgICAgICAgICBjb3VudCA9IE1hdGgubWF4KGNvdW50LCAxKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aCAhPT0gY291bnQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBwYXJ0aWFscyA9IHRoaXMucGFydGlhbHM7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0ICAgICAgICAgICAgICAgIC8vZGlzcG9zZSB0aGUgcHJldmlvdXMgb3NjaWxsYXRvcnNcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgICAgIG9zYy5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gW107XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBvc2MucGFydGlhbHMgPSB0aGlzLl9wYXJ0aWFscztcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBvc2MudHlwZSA9IHRoaXMuX3R5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIG9zYy5waGFzZSA9IHRoaXMuX3BoYXNlO1xuXHQgICAgICAgICAgICAgICAgICAgIG9zYy52b2x1bWUudmFsdWUgPSAtNiAtIGNvdW50ICogMS4xO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3Qob3NjLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdChvc2MuZGV0dW5lKTtcblx0ICAgICAgICAgICAgICAgICAgICBvc2MuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0gPSBvc2M7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvL3NldCB0aGUgc3ByZWFkXG5cdCAgICAgICAgICAgICAgICB0aGlzLnNwcmVhZCA9IHRoaXMuX3NwcmVhZDtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3NjLnN0YXJ0KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZhdE9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICBvc2MucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIGNhcnJpZXIgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5GYXRPc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZhdE9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk9tbmlPc2NpbGxhdG9yIGFnZ3JlZ2F0ZXMgVG9uZS5Pc2NpbGxhdG9yLCBUb25lLlB1bHNlT3NjaWxsYXRvcixcblx0XHQgKiAgICAgICAgIFRvbmUuUFdNT3NjaWxsYXRvciwgVG9uZS5GTU9zY2lsbGF0b3IsIFRvbmUuQU1Pc2NpbGxhdG9yLCBhbmQgVG9uZS5GYXRPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICBpbnRvIG9uZSBjbGFzcy4gVGhlIG9zY2lsbGF0b3IgY2xhc3MgY2FuIGJlIGNoYW5nZWQgYnkgc2V0dGluZyB0aGUgYHR5cGVgLlxuXHRcdCAqICAgICAgICAgYG9tbmlPc2MudHlwZSA9IFwicHdtXCJgIHdpbGwgc2V0IGl0IHRvIHRoZSBUb25lLlBXTU9zY2lsbGF0b3IuIFByZWZpeGluZ1xuXHRcdCAqICAgICAgICAgYW55IG9mIHRoZSBiYXNpYyB0eXBlcyAoXCJzaW5lXCIsIFwic3F1YXJlNFwiLCBldGMuKSB3aXRoIFwiZm1cIiwgXCJhbVwiLCBvciBcImZhdFwiXG5cdFx0ICogICAgICAgICB3aWxsIHVzZSB0aGUgRk1Pc2NpbGxhdG9yLCBBTU9zY2lsbGF0b3Igb3IgRmF0T3NjaWxsYXRvciByZXNwZWN0aXZlbHkuXG5cdFx0ICogICAgICAgICBGb3IgZXhhbXBsZTogYG9tbmlPc2MudHlwZSA9IFwiZmF0c2F3dG9vdGhcImAgd2lsbCBjcmVhdGUgc2V0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICB0byBhIEZhdE9zY2lsbGF0b3Igb2YgdHlwZSBcInNhd3Rvb3RoXCIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgaW5pdGlhbCBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgb21uaU9zYyA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKFwiQyM0XCIsIFwicHdtXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLk9tbmlPc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2xcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3Igc291cmNlXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlVHlwZSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIC8vc2V0IHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIG9wdGlvbnNcblx0ICAgICAgICB0aGlzLnNldChvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk9tbmlPc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAncGhhc2UnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgT21uaU9zY1R5cGUgPSB7XG5cdCAgICAgICAgUHVsc2U6ICdQdWxzZU9zY2lsbGF0b3InLFxuXHQgICAgICAgIFBXTTogJ1BXTU9zY2lsbGF0b3InLFxuXHQgICAgICAgIE9zYzogJ09zY2lsbGF0b3InLFxuXHQgICAgICAgIEZNOiAnRk1Pc2NpbGxhdG9yJyxcblx0ICAgICAgICBBTTogJ0FNT3NjaWxsYXRvcicsXG5cdCAgICAgICAgRmF0OiAnRmF0T3NjaWxsYXRvcidcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRvIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0byBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuIENhbiBiZSBhbnkgb2YgdGhlIGJhc2ljIHR5cGVzOiBzaW5lLCBzcXVhcmUsIHRyaWFuZ2xlLCBzYXd0b290aC4gT3Jcblx0XHQgKiBwcmVmaXggdGhlIGJhc2ljIHR5cGVzIHdpdGggXCJmbVwiLCBcImFtXCIsIG9yIFwiZmF0XCIgdG8gdXNlIHRoZSBGTU9zY2lsbGF0b3IsIEFNT3NjaWxsYXRvciBvciBGYXRPc2NpbGxhdG9yXG5cdFx0ICogdHlwZXMuIFRoZSBvc2NpbGxhdG9yIGNvdWxkIGFsc28gYmUgc2V0IHRvIFwicHdtXCIgb3IgXCJwdWxzZVwiLiBBbGwgb2YgdGhlIHBhcmFtZXRlcnMgb2YgdGhlXG5cdFx0ICogb3NjaWxsYXRvcidzIGNsYXNzIGFyZSBhY2Nlc3NpYmxlIHdoZW4gdGhlIG9zY2lsbGF0b3IgaXMgc2V0IHRvIHRoYXQgdHlwZSwgYnV0IHRocm93cyBhbiBlcnJvclxuXHRcdCAqIHdoZW4gaXQncyBub3QuXG5cdFx0ICpcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9tbmlPc2MudHlwZSA9IFwicHdtXCI7XG5cdFx0ICogLy9tb2R1bGF0aW9uRnJlcXVlbmN5IGlzIHBhcmFtZXRlciB3aGljaCBpcyBhdmFpbGFibGVcblx0XHQgKiAvL29ubHkgd2hlbiB0aGUgdHlwZSBpcyBcInB3bVwiLlxuXHRcdCAqIG9tbmlPc2MubW9kdWxhdGlvbkZyZXF1ZW5jeS52YWx1ZSA9IDAuNTtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vYW4gc3F1YXJlIHdhdmUgZnJlcXVlbmN5IG1vZHVsYXRlZCBieSBhIHNhd3Rvb3RoXG5cdFx0ICogb21uaU9zYy50eXBlID0gXCJmbXNxdWFyZVwiO1xuXHRcdCAqIG9tbmlPc2MubW9kdWxhdGlvblR5cGUgPSBcInNhd3Rvb3RoXCI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgcHJlZml4ID0gJyc7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSkge1xuXHQgICAgICAgICAgICAgICAgcHJlZml4ID0gJ2ZtJztcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgcHJlZml4ID0gJ2FtJztcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHByZWZpeCA9ICdmYXQnO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyB0aGlzLl9vc2NpbGxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlLnN1YnN0cigwLCAyKSA9PT0gJ2ZtJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5GTSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlLnN1YnN0cigyKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLnN1YnN0cigwLCAyKSA9PT0gJ2FtJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5BTSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlLnN1YnN0cigyKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLnN1YnN0cigwLCAzKSA9PT0gJ2ZhdCcpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuRmF0KTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGUuc3Vic3RyKDMpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwd20nKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLlBXTSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3B1bHNlJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5QdWxzZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLk9zYyk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogVGhpcyBpcyBub3QgYXZhaWxhYmxlIG9uIFwicHdtXCIgYW5kIFwicHVsc2VcIiBvc2NpbGxhdG9yIHR5cGVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IucGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IGEgbWVtYmVyL2F0dHJpYnV0ZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBwYXJhbXNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByYW1wVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5PbW5pT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgdmFsdWUpIHtcblx0ICAgICAgICAvL21ha2Ugc3VyZSB0aGUgdHlwZSBpcyBzZXQgZmlyc3Rcblx0ICAgICAgICBpZiAocGFyYW1zID09PSAndHlwZScpIHtcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gdmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzT2JqZWN0KHBhcmFtcykgJiYgcGFyYW1zLmhhc093blByb3BlcnR5KCd0eXBlJykpIHtcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gcGFyYW1zLnR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vdGhlbiBzZXQgdGhlIHJlc3Rcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5zZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0aGUgb3NjaWxsYXRvciB0byB0aGUgZnJlcXVlbmN5IGFuZCBkZXR1bmUgc2lnbmFsc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuX2NyZWF0ZU5ld09zY2lsbGF0b3IgPSBmdW5jdGlvbiAob3NjVHlwZSkge1xuXHQgICAgICAgIGlmIChvc2NUeXBlICE9PSB0aGlzLl9zb3VyY2VUeXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVR5cGUgPSBvc2NUeXBlO1xuXHQgICAgICAgICAgICB2YXIgT3NjaWxsYXRvckNvbnN0cnVjdG9yID0gVG9uZVtvc2NUeXBlXTtcblx0ICAgICAgICAgICAgLy9zaG9ydCBkZWxheSB0byBhdm9pZCBjbGlja3Mgb24gdGhlIGNoYW5nZVxuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBvbGRPc2MgPSB0aGlzLl9vc2NpbGxhdG9yO1xuXHQgICAgICAgICAgICAgICAgb2xkT3NjLnN0b3Aobm93KTtcblx0ICAgICAgICAgICAgICAgIC8vZGlzcG9zZSB0aGUgb2xkIG9uZVxuXHQgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9sZE9zYy5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgb2xkT3NjID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIH0sIHRoaXMuYmxvY2tUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbmV3IE9zY2lsbGF0b3JDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX29zY2lsbGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQobm93KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHdpZHRoIG9mIHRoZSBvc2NpbGxhdG9yIChvbmx5IGlmIHRoZSBvc2NpbGxhdG9yIGlzIHNldCB0byBcInB1bHNlXCIpXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBzaWduYWxcblx0XHQgKiBAbmFtZSB3aWR0aFxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIG9tbmlPc2MgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcig0NDAsIFwicHVsc2VcIik7XG5cdFx0ICogLy9jYW4gYWNjZXNzIHRoZSB3aWR0aCBhdHRyaWJ1dGUgb25seSBpZiB0eXBlID09PSBcInB1bHNlXCJcblx0XHQgKiBvbW5pT3NjLndpZHRoLnZhbHVlID0gMC4yO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnd2lkdGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5QdWxzZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3Iud2lkdGg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2YgZGV0dW5lZCBvc2NpbGxhdG9yc1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgY291bnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ2NvdW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5jb3VudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY291bnQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jb3VudCA9IGNvdW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGV0dW5lIHNwcmVhZCBiZXR3ZWVuIHRoZSBvc2NpbGxhdG9ycy4gSWYgXCJjb3VudFwiIGlzXG5cdFx0ICogc2V0IHRvIDMgb3NjaWxsYXRvcnMgYW5kIHRoZSBcInNwcmVhZFwiIGlzIHNldCB0byA0MCxcblx0XHQgKiB0aGUgdGhyZWUgb3NjaWxsYXRvcnMgd291bGQgYmUgZGV0dW5lZCBsaWtlIHRoaXM6IFstMjAsIDAsIDIwXVxuXHRcdCAqIGZvciBhIHRvdGFsIGRldHVuZSBzcHJlYWQgb2YgNDAgY2VudHMuIFNlZSBUb25lLkZhdE9zY2lsbGF0b3Jcblx0XHQgKiBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtDZW50c31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3NwcmVhZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3Iuc3ByZWFkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zcHJlYWQgPSBzcHJlYWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci4gT25seSBpZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqIGlzIHNldCB0byBcImFtXCIgb3IgXCJmbVwiIHR5cGVzLiBzZWUuIFRvbmUuQU1Pc2NpbGxhdG9yIG9yIFRvbmUuRk1Pc2NpbGxhdG9yXG5cdFx0ICogZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25UeXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uVHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNIHx8IHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uVHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobVR5cGUpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNIHx8IHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLm1vZHVsYXRpb25UeXBlID0gbVR5cGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtb2R1bGF0aW9uIGluZGV4IHdoaWNoIGlzIGluIGVzc2VuY2UgdGhlIGRlcHRoIG9yIGFtb3VudCBvZiB0aGUgbW9kdWxhdGlvbi4gSW4gb3RoZXIgdGVybXMgaXQgaXMgdGhlXG5cdFx0ICogcmF0aW8gb2YgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxhdGluZyBzaWduYWwgKG1mKSB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZVxuXHRcdCAqIG1vZHVsYXRpbmcgc2lnbmFsIChtYSkgLS0gYXMgaW4gbWEvbWYuXG5cdFx0ICogU2VlIFRvbmUuRk1Pc2NpbGxhdG9yIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBzaWduYWxcblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uSW5kZXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ21vZHVsYXRpb25JbmRleCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uSW5kZXg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgZnJlcXVlbmN5IHJhdGlvIGJldHdlZW4gdGhlIGNhcnJpZXIgYW5kIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvcnMuXG5cdFx0ICogIEEgaGFybW9uaWNpdHkgb2YgMSBnaXZlcyBib3RoIG9zY2lsbGF0b3JzIHRoZSBzYW1lIGZyZXF1ZW5jeS5cblx0XHQgKiAgSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS4gU2VlIFRvbmUuQU1Pc2NpbGxhdG9yIG9yIFRvbmUuRk1Pc2NpbGxhdG9yXG5cdFx0ICogIGZvciBtb3JlIGluZm8uXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqICBAc2lnbmFsXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgaGFybW9uaWNpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ2hhcm1vbmljaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0gfHwgdGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuQU0pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLmhhcm1vbmljaXR5O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbW9kdWxhdGlvbkZyZXF1ZW5jeSBTaWduYWwgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAob25seSBpZiB0aGUgb3NjaWxsYXRvciB0eXBlIGlzIHNldCB0byBwd20pLiBTZWVcblx0XHQgKiBUb25lLlBXTU9zY2lsbGF0b3IgZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqIEBzaWduYWxcblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uRnJlcXVlbmN5XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgb21uaU9zYyA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKDQ0MCwgXCJwd21cIik7XG5cdFx0ICogLy9jYW4gYWNjZXNzIHRoZSBtb2R1bGF0aW9uRnJlcXVlbmN5IGF0dHJpYnV0ZSBvbmx5IGlmIHR5cGUgPT09IFwicHdtXCJcblx0XHQgKiBvbW5pT3NjLm1vZHVsYXRpb25GcmVxdWVuY3kudmFsdWUgPSAwLjI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuUFdNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uRnJlcXVlbmN5O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuT21uaU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zb3VyY2VUeXBlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5PbW5pT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCYXNlLWNsYXNzIGZvciBhbGwgaW5zdHJ1bWVudHNcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuSW5zdHJ1bWVudC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IGFuZCB2b2x1bWUgdHJpbWluZyBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIHNvdXJjZS52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBLZWVwIHRyYWNrIG9mIGFsbCBldmVudHMgc2NoZWR1bGVkIHRvIHRoZSB0cmFuc3BvcnRcblx0XHRcdCAqIHdoZW4gdGhlIGluc3RydW1lbnQgaXMgJ3N5bmNlZCdcblx0XHRcdCAqIEB0eXBlIHtBcnJheTxOdW1iZXI+fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cyA9IFtdO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuSW5zdHJ1bWVudCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXNcblx0XHQgKiAgQHR5cGUge29iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAvKiogdGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzICovXG5cdCAgICAgICAgJ3ZvbHVtZSc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbm90ZSB0aGUgbm90ZSB0byB0cmlnZ2VyXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0byB0cmlnZ2VyIHRoZSBudG9lXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IHRvIHRyaWdnZXIgdGhlIG5vdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IFRvbmUubm9PcDtcblx0ICAgIC8qKlxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHdoZW4gdG8gdHJpZ2dlciB0aGUgcmVsZWFzZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IFRvbmUubm9PcDtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogaW5zdHJ1bWVudC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIGluc3RydW1lbnQudHJpZ2dlckF0dGFja1JlbGVhc2UoJ0M0JywgJzhuJywgMClcblx0XHQgKiBpbnN0cnVtZW50LnRyaWdnZXJBdHRhY2tSZWxlYXNlKCdFNCcsICc4bicsICc4bicpXG5cdFx0ICogaW5zdHJ1bWVudC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnRzQnLCAnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAxKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFdyYXAgdGhlIGdpdmVuIG1ldGhvZCBzbyB0aGF0IGl0IGNhbiBiZSBzeW5jaHJvbml6ZWRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kIFdoaWNoIG1ldGhvZCB0byB3cmFwIGFuZCBzeW5jXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lUG9zaXRpb24gV2hhdCBwb3NpdGlvbiB0aGUgdGltZSBhcmd1bWVudCBhcHBlYXJzIGluXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuX3N5bmNNZXRob2QgPSBmdW5jdGlvbiAobWV0aG9kLCB0aW1lUG9zaXRpb24pIHtcblx0ICAgICAgICB2YXIgb3JpZ2luYWxNZXRob2QgPSB0aGlzWydfb3JpZ2luYWxfJyArIG1ldGhvZF0gPSB0aGlzW21ldGhvZF07XG5cdCAgICAgICAgdGhpc1ttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHZhciB0aW1lID0gYXJnc1t0aW1lUG9zaXRpb25dO1xuXHQgICAgICAgICAgICB2YXIgaWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICAgICAgYXJnc1t0aW1lUG9zaXRpb25dID0gdDtcblx0ICAgICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHQgICAgICAgICAgICB9LmJpbmQodGhpcyksIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMucHVzaChpZCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgaW5zdHJ1bWVudCBmcm9tIHRoZSBUcmFuc3BvcnRcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQuY2xlYXIoaWQpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cyA9IFtdO1xuXHQgICAgICAgIGlmICh0aGlzLl9vcmlnaW5hbF90cmlnZ2VyQXR0YWNrKSB7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayA9IHRoaXMuX29yaWdpbmFsX3RyaWdnZXJBdHRhY2s7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UgPSB0aGlzLl9vcmlnaW5hbF90cmlnZ2VyUmVsZWFzZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgdGhlbiB0aGUgcmVsZWFzZSBhZnRlciB0aGUgZHVyYXRpb24uXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gdHJpZ2dlci5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIG5vdGUgc2hvdWxkIGJlIGhlbGQgZm9yIGJlZm9yZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyaW5nIHRoZSByZWxlYXNlLiBUaGlzIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSAgV2hlbiB0aGUgbm90ZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSB0aGUgbm90ZSBzaG91bGQgYmUgdHJpZ2dlcmVkIGF0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIFwiQzRcIiBmb3IgdGhlIGR1cmF0aW9uIG9mIGFuIDh0aCBub3RlXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlLCBkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKG5vdGUsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3ZvbHVtZSddKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy51bnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkluc3RydW1lbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVGhpcyBpcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBvdGhlciBtb25vcGhvbmljIGluc3RydW1lbnRzIHRvIFxuXHRcdCAqICAgICAgICAgIGV4dGVuZC4gSU1QT1JUQU5UOiBJdCBkb2VzIG5vdCBtYWtlIGFueSBzb3VuZCBvbiBpdHMgb3duIGFuZFxuXHRcdCAqICAgICAgICAgIHNob3VsZG4ndCBiZSBkaXJlY3RseSBpbnN0YW50aWF0ZWQuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTW9ub3Bob25pYy5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdsaWRlIHRpbWUgYmV0d2VlbiBub3Rlcy4gXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBvcnRhbWVudG8gPSBvcHRpb25zLnBvcnRhbWVudG87XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb25vcGhvbmljLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMuZGVmYXVsdHMgPSB7ICdwb3J0YW1lbnRvJzogMCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBvZiB0aGUgbm90ZSBvcHRpb25hbGx5IHdpdGggYSBnaXZlbiB2ZWxvY2l0eS4gXG5cdFx0ICogIFxuXHRcdCAqICBcblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byB0cmlnZ2VyLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICAgICBXaGVuIHRoZSBub3RlIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdmVsb2NpdHkgVGhlIHZlbG9jaXR5IHNjYWxlciBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lcyBob3cgXCJsb3VkXCIgdGhlIG5vdGUgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vcGhvbmljfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFjayhcIkM0XCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciB0aGUgbm90ZSBhIGhhbGYgc2Vjb25kIGZyb20gbm93IGF0IGhhbGYgdmVsb2NpdHlcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrKFwiQzRcIiwgXCIrMC41XCIsIDAuNSk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnNldE5vdGUobm90ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBJZiBubyB0aW1lIGlzIGdpdmVuLCB0aGUgcmVsZWFzZSBoYXBwZW5zIGltbWVkaWF0bHlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub3Bob25pY30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJSZWxlYXNlKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCB0aGUgYWN0dWFsIG1ldGhvZFxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCB0aGUgYWN0dWFsIG1ldGhvZFxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgbGV2ZWwgb2YgdGhlIG91dHB1dCBhdCB0aGUgZ2l2ZW4gdGltZS4gTWVhc3VyZXNcblx0XHQgKiAgdGhlIGVudmVsb3BlKHMpIHZhbHVlIGF0IHRoZSB0aW1lLiBcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIHF1ZXJ5IHRoZSBlbnZlbG9wZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuIHtOb3JtYWxSYW5nZX0gVGhlIG91dHB1dCBsZXZlbCBiZXR3ZWVuIDAtMVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5nZXRMZXZlbEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmVudmVsb3BlLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHRpbWUuIElmIG5vIHRpbWUgaXMgZ2l2ZW4sIHRoZSBub3RlXG5cdFx0ICogIHdpbGwgc2V0IGltbWVkaWF0ZWx5LiBcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IG5vdGUgVGhlIG5vdGUgdG8gY2hhbmdlIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIG5vdGUgc2hvdWxkIGJlIHNldC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9waG9uaWN9IHRoaXNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2hhbmdlIHRvIEYjNiBpbiBvbmUgcXVhcnRlciBub3RlIGZyb20gbm93LlxuXHRcdCAqIHN5bnRoLnNldE5vdGUoXCJGIzZcIiwgXCIrNG5cIik7XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2NoYW5nZSB0byBCYjQgcmlnaHQgbm93XG5cdFx0ICogc3ludGguc2V0Tm90ZShcIkJiNFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuc2V0Tm90ZSA9IGZ1bmN0aW9uIChub3RlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLnBvcnRhbWVudG8gPiAwICYmIHRoaXMuZ2V0TGV2ZWxBdFRpbWUodGltZSkgPiAwLjA1KSB7XG5cdCAgICAgICAgICAgIHZhciBwb3J0VGltZSA9IHRoaXMudG9TZWNvbmRzKHRoaXMucG9ydGFtZW50byk7XG5cdCAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmV4cG9uZW50aWFsUmFtcFRvKG5vdGUsIHBvcnRUaW1lLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZShub3RlLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9ub3Bob25pYztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlN5bnRoIGlzIGNvbXBvc2VkIHNpbXBseSBvZiBhIFRvbmUuT21uaU9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgICByb3V0ZWQgdGhyb3VnaCBhIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzEtMV8wWVcyWjFKMkVQSTM2UDhmTkNNY1pHN04xdzFHWmx1UHM0b2c0ZXZvL3B1Yj93PTExNjMmaD0yMzFcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5PbW5pT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKG9wdGlvbnMub3NjaWxsYXRvcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLm9zY2lsbGF0b3IuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBvc2NpbGxhdG9ycyB0byB0aGUgb3V0cHV0XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmNoYWluKHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAndHJpYW5nbGUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjMsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICAvL2lmIHRoZXJlIGlzIG5vIHJlbGVhc2UgcG9ydGlvbiwgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICAgIGlmICh0aGlzLmVudmVsb3BlLnN1c3RhaW4gPT09IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBTVN5bnRoIHVzZXMgdGhlIG91dHB1dCBvZiBvbmUgVG9uZS5TeW50aCB0byBtb2R1bGF0ZSB0aGVcblx0XHQgKiAgICAgICAgICBhbXBsaXR1ZGUgb2YgYW5vdGhlciBUb25lLlN5bnRoLiBUaGUgaGFybW9uaWNpdHkgKHRoZSByYXRpbyBiZXR3ZWVuXG5cdFx0ICogICAgICAgICAgdGhlIHR3byBzaWduYWxzKSBhZmZlY3RzIHRoZSB0aW1icmUgb2YgdGhlIG91dHB1dCBzaWduYWwgZ3JlYXRseS5cblx0XHQgKiAgICAgICAgICBSZWFkIG1vcmUgYWJvdXQgQW1wbGl0dWRlIE1vZHVsYXRpb24gU3ludGhlc2lzIG9uXG5cdFx0ICogICAgICAgICAgW1NvdW5kT25Tb3VuZF0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDA0MTAzNjUzL2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbTo4MC9zb3MvbWFyMDAvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmh0bSkuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFUUXU4RWQ0aUZyMVlUTEtwQjNVMV9odXItVXdCcmg1Z2RCWGM4QnhmR0t3L3B1Yj93PTEwMDkmaD00NTdcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkFNU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkFNU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuU3ludGgoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gdGhpcy5fY2Fycmllci5vc2NpbGxhdG9yO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSB0aGlzLl9jYXJyaWVyLmVudmVsb3BlLnNldChvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5TeW50aCgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvcidzIG9zY2lsbGF0b3Igd2hpY2ggaXMgYXBwbGllZFxuXHRcdFx0ICogIHRvIHRoZSBhbXBsaXR1ZGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uID0gdGhpcy5fbW9kdWxhdG9yLm9zY2lsbGF0b3Iuc2V0KG9wdGlvbnMubW9kdWxhdGlvbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25FbnZlbG9wZSA9IHRoaXMuX21vZHVsYXRvci5lbnZlbG9wZS5zZXQob3B0aW9ucy5tb2R1bGF0aW9uRW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbCg0NDAsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHNcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMuIEEgaGFybW9uaWNpdHkgb2Zcblx0XHRcdCAqICAxIGlzIG5vIGNoYW5nZS4gSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHZvaWNlMSBhbiBvY3RhdmUgYmVsb3cgdm9pY2UwXG5cdFx0XHQgKiBzeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnZlcnQgdGhlIC0xLDEgb3V0cHV0IHRvIDAsMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkF1ZGlvVG9HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBuZXcgVG9uZS5BdWRpb1RvR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSBtb2R1bGF0aW9uIGhhcHBlbnNcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIHR3byB2b2ljZXMgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZmFuKHRoaXMuX2NhcnJpZXIuZGV0dW5lLCB0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY2hhaW4odGhpcy5fbW9kdWxhdGlvblNjYWxlLCB0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNoYWluKHRoaXMuX21vZHVsYXRpb25Ob2RlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbicsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQU1TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMyxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjAxLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbic6IHsgJ3R5cGUnOiAnc3F1YXJlJyB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRyaWdnZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIG9jY3VyXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQU1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgLy90aGUgcG9ydCBnbGlkZVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgcmVsZWFzZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BTVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQU1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQU1TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1vbm9TeW50aCBpcyBjb21wb3NlZCBvZiBvbmUgb3NjaWxsYXRvciwgb25lIGZpbHRlciwgYW5kIHR3byBlbnZlbG9wZXMuXG5cdFx0ICogICAgICAgICAgVGhlIGFtcGxpdHVkZSBvZiB0aGUgVG9uZS5Pc2NpbGxhdG9yIGFuZCB0aGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiB0aGVcblx0XHQgKiAgICAgICAgICBUb25lLkZpbHRlciBhcmUgY29udHJvbGxlZCBieSBUb25lLkVudmVsb3Blcy5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMWdhWTFERjlfSHprb2RxZjhKSTFDZzJWWmZ3U0VscEZRZkk5NElRd2FkMzgvcHViP3c9OTI0Jmg9MjQwXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuTW9ub1N5bnRoKHtcblx0XHQgKiBcdFwib3NjaWxsYXRvclwiIDoge1xuXHRcdCAqIFx0XHRcInR5cGVcIiA6IFwic3F1YXJlXCJcblx0XHQgKiAgfSxcblx0XHQgKiAgXCJlbnZlbG9wZVwiIDoge1xuXHRcdCAqICBcdFwiYXR0YWNrXCIgOiAwLjFcblx0XHQgKiAgfVxuXHRcdCAqIH0pLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Nb25vU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9tbmlPc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3Iob3B0aW9ucy5vc2NpbGxhdG9yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMub3NjaWxsYXRvci5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG5ldyBUb25lLkZpbHRlcihvcHRpb25zLmZpbHRlcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpbHRlciBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GcmVxdWVuY3lFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUgPSBuZXcgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZShvcHRpb25zLmZpbHRlckVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgb3NjaWxsYXRvcnMgdG8gdGhlIG91dHB1dFxuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5jaGFpbih0aGlzLmZpbHRlciwgdGhpcy5lbnZlbG9wZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgZmlsdGVyIGVudmVsb3BlXG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS5jb25uZWN0KHRoaXMuZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZpbHRlcicsXG5cdCAgICAgICAgICAgICdmaWx0ZXJFbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1vbm9TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6ICdDNCcsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NxdWFyZScgfSxcblx0ICAgICAgICAnZmlsdGVyJzoge1xuXHQgICAgICAgICAgICAnUSc6IDYsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ2xvd3Bhc3MnLFxuXHQgICAgICAgICAgICAncm9sbG9mZic6IC0yNFxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjksXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2ZpbHRlckVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wNixcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4yLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAuNSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAyLFxuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDIwMCxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnOiA3LFxuXHQgICAgICAgICAgICAnZXhwb25lbnQnOiAyXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLmVudmVsb3BlLnN1c3RhaW4gPT09IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZpbHRlcicsXG5cdCAgICAgICAgICAgICdmaWx0ZXJFbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5maWx0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vbm9TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkR1b1N5bnRoIGlzIGEgbW9ub3Bob25pYyBzeW50aCBjb21wb3NlZCBvZiB0d29cblx0XHQgKiAgICAgICAgICBNb25vU3ludGhzIHJ1biBpbiBwYXJhbGxlbCB3aXRoIGNvbnRyb2wgb3ZlciB0aGVcblx0XHQgKiAgICAgICAgICBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcyBhbmQgdmlicmF0byBlZmZlY3QuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFiTDRHWHZmUk1NbHFTN1h5Qm05Q2pMOUtKUFNVS2JjZEJOcHFPbGtGTHhrL3B1Yj93PTEwMTImaD00NDhcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZHVvU3ludGggPSBuZXcgVG9uZS5EdW9TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogZHVvU3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkR1b1N5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmlyc3Qgdm9pY2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Nb25vU3ludGh9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvaWNlMCA9IG5ldyBUb25lLk1vbm9TeW50aChvcHRpb25zLnZvaWNlMCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzZWNvbmQgdm9pY2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Nb25vU3ludGh9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvaWNlMSA9IG5ldyBUb25lLk1vbm9TeW50aChvcHRpb25zLnZvaWNlMSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2aWJyYXRvIExGTy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8gPSBuZXcgVG9uZS5MRk8ob3B0aW9ucy52aWJyYXRvUmF0ZSwgLTUwLCA1MCk7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0by5zdGFydCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIHZpYnJhdG8gZnJlcXVlbmN5XG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52aWJyYXRvUmF0ZSA9IHRoaXMuX3ZpYnJhdG8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB2aWJyYXRvIGdhaW5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy52aWJyYXRvQW1vdW50LCBUb25lLlR5cGUuUG9zaXRpdmUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtb3VudCBvZiB2aWJyYXRvXG5cdFx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZpYnJhdG9BbW91bnQgPSB0aGlzLl92aWJyYXRvR2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmcmVxdWVuY3kgY29udHJvbFxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoNDQwLCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcy4gQSBoYXJtb25pY2l0eSBvZlxuXHRcdFx0ICogIDEgaXMgbm8gY2hhbmdlLiBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdm9pY2UxIGFuIG9jdGF2ZSBiZWxvdyB2b2ljZTBcblx0XHRcdCAqIGR1b1N5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSB0d28gdm9pY2VzIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy52b2ljZTAuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLnZvaWNlMS5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8uY29ubmVjdCh0aGlzLl92aWJyYXRvR2Fpbik7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4uZmFuKHRoaXMudm9pY2UwLmRldHVuZSwgdGhpcy52b2ljZTEuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLnZvaWNlMS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICd2b2ljZTAnLFxuXHQgICAgICAgICAgICAndm9pY2UxJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd2aWJyYXRvQW1vdW50Jyxcblx0ICAgICAgICAgICAgJ3ZpYnJhdG9SYXRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRHVvU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndmlicmF0b0Ftb3VudCc6IDAuNSxcblx0ICAgICAgICAndmlicmF0b1JhdGUnOiA1LFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDEuNSxcblx0ICAgICAgICAndm9pY2UwJzoge1xuXHQgICAgICAgICAgICAndm9sdW1lJzogLTEwLFxuXHQgICAgICAgICAgICAncG9ydGFtZW50byc6IDAsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndm9pY2UxJzoge1xuXHQgICAgICAgICAgICAndm9sdW1lJzogLTEwLFxuXHQgICAgICAgICAgICAncG9ydGFtZW50byc6IDAsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3Blc1xuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkR1b1N5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXNcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkR1b1N5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy52b2ljZTAuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgbGV2ZWwgb2YgdGhlIG91dHB1dCBhdCB0aGUgZ2l2ZW4gdGltZS4gTWVhc3VyZXNcblx0XHQgKiAgdGhlIGVudmVsb3BlKHMpIHZhbHVlIGF0IHRoZSB0aW1lLiBcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIHF1ZXJ5IHRoZSBlbnZlbG9wZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuIHtOb3JtYWxSYW5nZX0gVGhlIG91dHB1dCBsZXZlbCBiZXR3ZWVuIDAtMVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuZ2V0TGV2ZWxBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiAodGhpcy52b2ljZTAuZ2V0TGV2ZWxBdFRpbWUodGltZSkgKyB0aGlzLnZvaWNlMS5nZXRMZXZlbEF0VGltZSh0aW1lKSkgLyAyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EdW9TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICd2b2ljZTAnLFxuXHQgICAgICAgICAgICAndm9pY2UxJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd2aWJyYXRvQW1vdW50Jyxcblx0ICAgICAgICAgICAgJ3ZpYnJhdG9SYXRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG9HYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0byA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52aWJyYXRvQW1vdW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZpYnJhdG9BbW91bnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmlicmF0b1JhdGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkR1b1N5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEZNU3ludGggaXMgY29tcG9zZWQgb2YgdHdvIFRvbmUuU3ludGhzIHdoZXJlIG9uZSBUb25lLlN5bnRoIG1vZHVsYXRlc1xuXHRcdCAqICAgICAgICAgIHRoZSBmcmVxdWVuY3kgb2YgYSBzZWNvbmQgVG9uZS5TeW50aC4gQSBsb3Qgb2Ygc3BlY3RyYWwgY29udGVudFxuXHRcdCAqICAgICAgICAgIGNhbiBiZSBleHBsb3JlZCB1c2luZyB0aGUgbW9kdWxhdGlvbkluZGV4IHBhcmFtZXRlci4gUmVhZCBtb3JlIGFib3V0XG5cdFx0ICogICAgICAgICAgZnJlcXVlbmN5IG1vZHVsYXRpb24gc3ludGhlc2lzIG9uIFNvdW5kIE9uIFNvdW5kOiBbUGFydCAxXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA0MDMxMjM3MDQvaHR0cDovL3d3dy5zb3VuZG9uc291bmQuY29tL3Nvcy9hcHIwMC9hcnRpY2xlcy9zeW50aHNlY3JldHMuaHRtKSwgW1BhcnQgMl0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDAzMTE1ODM1L2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvbWF5MDAvYXJ0aWNsZXMvc3ludGguaHRtKS5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMWgwUFVEWlhQZ2k0SWt4NmJWVDZvbmNyWVBMbHVGS3k3bGo1M3B1eGotRE0vcHViP3c9OTAyJmg9NDYyXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZtU3ludGggPSBuZXcgVG9uZS5GTVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBmbVN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzVcIiwgXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkZNU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuU3ludGgob3B0aW9ucy5jYXJyaWVyKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gdGhpcy5fY2Fycmllci5vc2NpbGxhdG9yO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IHRoaXMuX2NhcnJpZXIuZW52ZWxvcGUuc2V0KG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3Igdm9pY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3ludGh9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLlN5bnRoKG9wdGlvbnMubW9kdWxhdG9yKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBvc2NpbGxhdG9yIHdoaWNoIGlzIGFwcGxpZWRcblx0XHRcdCAqICB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IHRoaXMuX21vZHVsYXRvci5vc2NpbGxhdG9yLnNldChvcHRpb25zLm1vZHVsYXRpb24pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBlbnZlbG9wZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25FbnZlbG9wZSA9IHRoaXMuX21vZHVsYXRvci5lbnZlbG9wZS5zZXQob3B0aW9ucy5tb2R1bGF0aW9uRW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDQ0MCwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBpbiBjZW50c1xuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcy4gQSBoYXJtb25pY2l0eSBvZlxuXHRcdFx0ICogIDEgaXMgbm8gY2hhbmdlLiBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdm9pY2UxIGFuIG9jdGF2ZSBiZWxvdyB2b2ljZTBcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpb24gaW5kZXggd2hpY2ggZXNzZW50aWFsbHkgdGhlIGRlcHRoIG9yIGFtb3VudCBvZiB0aGUgbW9kdWxhdGlvbi4gSXQgaXMgdGhlXG5cdFx0XHQgKiAgcmF0aW8gb2YgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxhdGluZyBzaWduYWwgKG1mKSB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZVxuXHRcdFx0ICogIG1vZHVsYXRpbmcgc2lnbmFsIChtYSkgLS0gYXMgaW4gbWEvbWYuXG5cdFx0XHQgKlx0QHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICpcdEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5tb2R1bGF0aW9uSW5kZXgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSBtb2R1bGF0aW9uIGhhcHBlbnNcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigwKTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIHR3byB2b2ljZXMgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5tb2R1bGF0aW9uSW5kZXgsIHRoaXMuX21vZHVsYXRpb25Ob2RlKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5mYW4odGhpcy5fY2Fycmllci5kZXR1bmUsIHRoaXMuX21vZHVsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jb25uZWN0KHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZNU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDMsXG5cdCAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IDEwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMDEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uJzogeyAndHlwZSc6ICdzcXVhcmUnIH0sXG5cdCAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMCxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBcdHRyaWdnZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIG9jY3VyXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZNU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgcmVsZWFzZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GTVN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jyxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbicsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRk1TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1lbWJyYW5lU3ludGggbWFrZXMga2ljayBhbmQgdG9tIHNvdW5kcyB1c2luZyBhIHNpbmdsZSBvc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICAgd2l0aCBhbiBhbXBsaXR1ZGUgZW52ZWxvcGUgYW5kIGZyZXF1ZW5jeSByYW1wLiBBIFRvbmUuT21uaU9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgICBpcyByb3V0ZWQgdGhyb3VnaCBhIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgdG8gdGhlIG91dHB1dC4gVGhlIGRydW1cblx0XHQgKiAgICAgICAgICBxdWFsaXR5IG9mIHRoZSBzb3VuZCBjb21lcyBmcm9tIHRoZSBmcmVxdWVuY3kgZW52ZWxvcGUgYXBwbGllZFxuXHRcdCAqICAgICAgICAgIGR1cmluZyBUb25lLk1lbWJyYW5lU3ludGgudHJpZ2dlckF0dGFjayhub3RlKS4gVGhlIGZyZXF1ZW5jeSBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgIHN0YXJ0cyBhdCA8Y29kZT5ub3RlICogLm9jdGF2ZXM8L2NvZGU+IGFuZCByYW1wcyB0byA8Y29kZT5ub3RlPC9jb2RlPlxuXHRcdCAqICAgICAgICAgIG92ZXIgdGhlIGR1cmF0aW9uIG9mIDxjb2RlPi5waXRjaERlY2F5PC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5NZW1icmFuZVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkMyXCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5NZW1icmFuZVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5PbW5pT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKG9wdGlvbnMub3NjaWxsYXRvcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhlIHBpdGNoIGVudmVsb3BlIHJhbXBzLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIGZyZXF1ZW5jeSBlbnZlbG9wZSB0YWtlcy5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucGl0Y2hEZWNheSA9IG9wdGlvbnMucGl0Y2hEZWNheTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuY2hhaW4odGhpcy5lbnZlbG9wZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NZW1icmFuZVN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGl0Y2hEZWNheSc6IDAuMDUsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAxMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC40LFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAuMDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMS40LFxuXHQgICAgICAgICAgICAnYXR0YWNrQ3VydmUnOiAnZXhwb25lbnRpYWwnXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBub3RlIGF0IHRoZSBnaXZlbiB0aW1lIHdpdGggdGhlIGdpdmVuIHZlbG9jaXR5LlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgdGhlIG5vdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgdGhlIHRpbWUsIGlmIG5vdCBnaXZlbiBpcyBub3dcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdmVsb2NpdHkgZGVmYXVsdHMgdG8gMVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZW1icmFuZVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIGtpY2sudHJpZ2dlckF0dGFjayg2MCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgbm90ZSA9IHRoaXMudG9GcmVxdWVuY3kobm90ZSk7XG5cdCAgICAgICAgdmFyIG1heE5vdGUgPSBub3RlICogdGhpcy5vY3RhdmVzO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUobWF4Tm90ZSwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmZyZXF1ZW5jeS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKG5vdGUsIHRpbWUgKyB0aGlzLnRvU2Vjb25kcyh0aGlzLnBpdGNoRGVjYXkpKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBub3RlLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCByZWxlYXNlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lbWJyYW5lU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVtYnJhbmVTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1lbWJyYW5lU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBJbmhhcm1vbmljIHJhdGlvIG9mIGZyZXF1ZW5jaWVzIGJhc2VkIG9uIHRoZSBSb2xhbmQgVFItODA4XG5cdFx0ICogIFRha2VuIGZyb20gaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvcGFwZXJzL3RyLTgwOC1jeW1iYWwtcGh5c2ljYWxseS1pbmZvcm1lZC1jaXJjdWl0LWJlbmRhYmxlLWRpZ2l0YWwtbW9kZWxcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgaW5oYXJtUmF0aW9zID0gW1xuXHQgICAgICAgIDEsXG5cdCAgICAgICAgMS40ODMsXG5cdCAgICAgICAgMS45MzIsXG5cdCAgICAgICAgMi41NDYsXG5cdCAgICAgICAgMi42Myxcblx0ICAgICAgICAzLjg5N1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgaGlnaGx5IGluaGFybW9uaWMgYW5kIHNwZWN0cmFsbHkgY29tcGxleCBzb3VyY2Ugd2l0aCBhIGhpZ2hwYXNzIGZpbHRlclxuXHRcdCAqICAgICAgICAgIGFuZCBhbXBsaXR1ZGUgZW52ZWxvcGUgd2hpY2ggaXMgZ29vZCBmb3IgbWFraW5nIG1ldGFsb3Bob25lIHNvdW5kcy4gQmFzZWRcblx0XHQgKiAgICAgICAgICBvbiBDeW1iYWxTeW50aCBieSBbQHBvbHlyaHl0aG1hdGljXShodHRwczovL2dpdGh1Yi5jb20vcG9seXJoeXRobWF0aWMpLlxuXHRcdCAqICAgICAgICAgIEluc3BpcmF0aW9uIGZyb20gW1NvdW5kIG9uIFNvdW5kXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA2MTAxNDM5MjQvaHR0cHM6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvanVsMDIvYXJ0aWNsZXMvc3ludGhzZWNyZXRzMDcwMi5hc3ApLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFRoZSBvcHRpb25zIGF2YWlsYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5NZXRhbFN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBjeW1iYWxcblx0XHRcdCAqICBAdHlwZSAge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIEZNT3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgbXVsdGlwbGllcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZm9yIHRoZSBib2R5XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWUgPSBuZXcgVG9uZS5HYWluKDApLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGhpZ2hwYXNzIHRoZSBvdXRwdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2hpZ2hwYXNzID0gbmV3IFRvbmUuRmlsdGVyKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnaGlnaHBhc3MnLFxuXHQgICAgICAgICAgICAnUSc6IC0zLjAxMDI5OTk1NjYzOTgxMjVcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2FtcGxpdHVlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhlIGhpZ2hwYXNzXG5cdFx0XHQgKiAgZmlsdGVyIGZyZXF1ZW5jeSByYW1wc1xuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2NhbGUgdGhlIGJvZHkgZW52ZWxvcGVcblx0XHRcdCAqICBmb3IgdGhlIGJhbmRwYXNzXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIgPSBuZXcgVG9uZS5TY2FsZShvcHRpb25zLnJlc29uYW5jZSwgNzAwMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGVudmVsb3BlIHdoaWNoIGlzIGNvbm5lY3RlZCBib3RoIHRvIHRoZVxuXHRcdFx0ICogIGFtcGxpdHVkZSBhbmQgaGlnaHBhc3MgZmlsdGVyJ3MgY3V0b2ZmIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5FbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5FbnZlbG9wZSh7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiBvcHRpb25zLmVudmVsb3BlLmF0dGFjayxcblx0ICAgICAgICAgICAgJ2F0dGFja0N1cnZlJzogJ2xpbmVhcicsXG5cdCAgICAgICAgICAgICdkZWNheSc6IG9wdGlvbnMuZW52ZWxvcGUuZGVjYXksXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiBvcHRpb25zLmVudmVsb3BlLnJlbGVhc2Vcblx0ICAgICAgICB9KS5jaGFpbih0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLCB0aGlzLl9oaWdocGFzcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZS5nYWluKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaGFybVJhdGlvcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgb3NjID0gbmV3IFRvbmUuRk1Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgICAgICd0eXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgICAgICAgICAnbW9kdWxhdGlvblR5cGUnOiAnc3F1YXJlJyxcblx0ICAgICAgICAgICAgICAgICdoYXJtb25pY2l0eSc6IG9wdGlvbnMuaGFybW9uaWNpdHksXG5cdCAgICAgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jzogb3B0aW9ucy5tb2R1bGF0aW9uSW5kZXhcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIG9zYy5jb25uZWN0KHRoaXMuX2hpZ2hwYXNzKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0gPSBvc2M7XG5cdCAgICAgICAgICAgIHZhciBtdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoaW5oYXJtUmF0aW9zW2ldKTtcblx0ICAgICAgICAgICAgdGhpcy5fZnJlcU11bHRpcGxpZXJzW2ldID0gbXVsdDtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4obXVsdCwgb3NjLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc2V0IHRoZSBvY3RhdmVzXG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWV0YWxTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDEuNCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjJcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDUuMSxcblx0ICAgICAgICAnbW9kdWxhdGlvbkluZGV4JzogMzIsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDQwMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAxLjVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgICAgIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIFt2ZWxvY2l0eT0xXSAgVGhlIHZlbG9jaXR5IHRoYXQgdGhlIGVudmVsb3BlIHNob3VsZCBiZSB0cmlnZ2VyZWQgYXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1ldGFsU3ludGh9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZlbCA9IFRvbmUuZGVmYXVsdEFyZyh2ZWwsIDEpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWwpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzLmZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9pZiB0aGUgc3VzdGFpbiBpcyAwLCBzdG9wIHRoZSBvc2NpbGxhdG9yIGFzIHdlbGxcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzLmZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgICAgICBXaGVuIHRoZSByZWxlYXNlIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1ldGFsU3ludGh9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDApO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSBvZiB0aGUgZW52ZWxvcGUgYWZ0ZXIgdGhlIGdpdmVuXG5cdFx0ICogIGR1cmF0aW9uLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgZHVyYXRpb24gIFRoZSBkdXJhdGlvbiBiZWZvcmUgdHJpZ2dlcmluZyB0aGUgcmVsZWFzZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgICAgIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIFt2ZWxvY2l0eT0xXSAgVGhlIHZlbG9jaXR5IHRoYXQgdGhlIGVudmVsb3BlIHNob3VsZCBiZSB0cmlnZ2VyZWQgYXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1ldGFsU3ludGh9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG1vZHVsYXRpb25JbmRleCBvZiB0aGUgb3NjaWxsYXRvcnMgd2hpY2ggbWFrZSB1cCB0aGUgc291cmNlLlxuXHRcdCAqICBzZWUgVG9uZS5GTU9zY2lsbGF0b3IubW9kdWxhdGlvbkluZGV4XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk1ldGFsU3ludGgjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgIG1vZHVsYXRpb25JbmRleFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdtb2R1bGF0aW9uSW5kZXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yc1swXS5tb2R1bGF0aW9uSW5kZXgudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0ubW9kdWxhdGlvbkluZGV4LnZhbHVlID0gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGhhcm1vbmljaXR5IG9mIHRoZSBvc2NpbGxhdG9ycyB3aGljaCBtYWtlIHVwIHRoZSBzb3VyY2UuXG5cdFx0ICogIHNlZSBUb25lLkZNT3NjaWxsYXRvci5oYXJtb25pY2l0eVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lICBoYXJtb25pY2l0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdoYXJtb25pY2l0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3JzWzBdLmhhcm1vbmljaXR5LnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldLmhhcm1vbmljaXR5LnZhbHVlID0gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgaGlnaHBhc3MgZmlsdGVyIGF0dGFjaGVkIHRvIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqICBAbmFtZSAgcmVzb25hbmNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZSwgJ3Jlc29uYW5jZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWluID0gdmFsO1xuXHQgICAgICAgICAgICB0aGlzLm9jdGF2ZXMgPSB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgXCJyZXNvbmFuY2VcIiBmcmVxdWVuY3lcblx0XHQgKiAgdGhhdCB0aGUgZmlsdGVyIHJhbXBzIGR1cmluZyB0aGUgYXR0YWNrL2RlY2F5IGVudmVsb3BlXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk1ldGFsU3ludGgjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lICBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0cykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0cztcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5tYXggPSB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1pbiAqIE1hdGgucG93KDIsIG9jdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1ldGFsU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZnJlcU11bHRpcGxpZXJzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2hpZ2hwYXNzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9oaWdocGFzcyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWV0YWxTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk5vaXNlU3ludGggaXMgY29tcG9zZWQgb2YgYSBub2lzZSBnZW5lcmF0b3IgKFRvbmUuTm9pc2UpLCBvbmUgZmlsdGVyIChUb25lLkZpbHRlciksXG5cdFx0ICogICAgICAgICAgYW5kIHR3byBlbnZlbG9wZXMgKFRvbmUuRW52ZWxvcCkuIE9uZSBlbnZlbG9wZSBjb250cm9scyB0aGUgYW1wbGl0dWRlXG5cdFx0ICogICAgICAgICAgb2YgdGhlIG5vaXNlIGFuZCB0aGUgb3RoZXIgaXMgY29udHJvbHMgdGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlci5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMXJxenVYOXJCbGhUNTBNUnZEMlRLbWw5Ym5aaGNabXpYRjFyZl9vN3ZkbkUvcHViP3c9OTE4Jmg9MjQyXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgbm9pc2VTeW50aCA9IG5ldyBUb25lLk5vaXNlU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIG5vaXNlU3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk5vaXNlU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBub2lzZSBzb3VyY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTm9pc2V9XG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIG5vaXNlU3ludGguc2V0KFwibm9pc2UudHlwZVwiLCBcImJyb3duXCIpO1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5ub2lzZSA9IG5ldyBUb25lLk5vaXNlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIG5vaXNlIHRvIHRoZSBvdXRwdXRcblx0ICAgICAgICB0aGlzLm5vaXNlLmNoYWluKHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdub2lzZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5vaXNlU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbm9pc2UnOiB7ICd0eXBlJzogJ3doaXRlJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDA1LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMFxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXMuIFVubGlrZSBvdGhlclxuXHRcdCAqICBpbnN0cnVtZW50cywgVG9uZS5Ob2lzZVN5bnRoIGRvZXNuJ3QgaGF2ZSBhIG5vdGUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogbm9pc2VTeW50aC50cmlnZ2VyQXR0YWNrKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIG5vaXNlXG5cdCAgICAgICAgdGhpcy5ub2lzZS5zdGFydCh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMubm9pc2Uuc3RvcCh0aW1lID0gdGhpcy5lbnZlbG9wZS5hdHRhY2sgKyB0aGlzLmVudmVsb3BlLmRlY2F5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3Blcy5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMubm9pc2Uuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDApO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgdGhlbiB0aGUgcmVsZWFzZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZHVyYXRpb24gdGhlIGR1cmF0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIHRoZSB0aW1lIG9mIHRoZSBhdHRhY2tcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAoZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSh0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ25vaXNlJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubm9pc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubm9pc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk5vaXNlU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBLYXJwbHVzLVN0cmluZyBzdHJpbmcgc3ludGhlc2lzLiBPZnRlbiBvdXQgb2YgdHVuZS5cblx0XHQgKiAgICAgICAgIFdpbGwgY2hhbmdlIHdoZW4gdGhlIEF1ZGlvV29ya2VyTm9kZSBpcyBhdmFpbGFibGUgYWNyb3NzXG5cdFx0ICogICAgICAgICBicm93c2Vycy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBzZWUgdGhlIGRlZmF1bHRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBsdWNreSA9IG5ldyBUb25lLlBsdWNrU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHBsdWNreS50cmlnZ2VyQXR0YWNrKFwiQzRcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5QbHVja1N5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Ob2lzZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbm9pc2UgPSBuZXcgVG9uZS5Ob2lzZSgncGluaycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2Ygbm9pc2UgYXQgdGhlIGF0dGFjay5cblx0XHRcdCAqICBOb21pbmFsIHJhbmdlIG9mIFswLjEsIDIwXVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFja05vaXNlID0gb3B0aW9ucy5hdHRhY2tOb2lzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgTEZDRlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxvd3Bhc3NDb21iRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZmNmID0gbmV3IFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIoe1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJzogb3B0aW9ucy5yZXNvbmFuY2UsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnOiBvcHRpb25zLmRhbXBlbmluZ1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByZXNvbmFuY2UgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSB0aGlzLl9sZmNmLnJlc29uYW5jZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGFtcGVuaW5nIGNvbnRyb2wuIGkuZS4gdGhlIGxvd3Bhc3MgZmlsdGVyIGZyZXF1ZW5jeSBvZiB0aGUgY29tYiBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gdGhpcy5fbGZjZi5kYW1wZW5pbmc7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX25vaXNlLmNvbm5lY3QodGhpcy5fbGZjZik7XG5cdCAgICAgICAgdGhpcy5fbGZjZi5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGx1Y2tTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2tOb2lzZSc6IDEsXG5cdCAgICAgICAgJ2RhbXBlbmluZyc6IDQwMDAsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDAuN1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gbm90ZSBUaGUgbm90ZSB0byB0cmlnZ2VyLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgbm90ZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbHVja1N5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSkge1xuXHQgICAgICAgIG5vdGUgPSB0aGlzLnRvRnJlcXVlbmN5KG5vdGUpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgZGVsYXlBbW91bnQgPSAxIC8gbm90ZTtcblx0ICAgICAgICB0aGlzLl9sZmNmLmRlbGF5VGltZS5zZXRWYWx1ZUF0VGltZShkZWxheUFtb3VudCwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2Uuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2Uuc3RvcCh0aW1lICsgZGVsYXlBbW91bnQgKiB0aGlzLmF0dGFja05vaXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsdWNrU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGx1Y2tTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ub2lzZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZjZi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmY2YgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QbHVja1N5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUG9seVN5bnRoIGhhbmRsZXMgdm9pY2UgY3JlYXRpb24gYW5kIGFsbG9jYXRpb24gZm9yIGFueVxuXHRcdCAqICAgICAgICAgIGluc3RydW1lbnRzIHBhc3NlZCBpbiBhcyB0aGUgc2Vjb25kIHBhcmFtdGVyLiBQb2x5U3ludGggaXNcblx0XHQgKiAgICAgICAgICBub3QgYSBzeW50aGVzaXplciBieSBpdHNlbGYsIGl0IG1lcmVseSBtYW5hZ2VzIHZvaWNlcyBvZlxuXHRcdCAqICAgICAgICAgIG9uZSBvZiB0aGUgb3RoZXIgdHlwZXMgb2Ygc3ludGhzLCBhbGxvd2luZyBhbnkgb2YgdGhlXG5cdFx0ICogICAgICAgICAgbW9ub3Bob25pYyBzeW50aGVzaXplcnMgdG8gYmUgcG9seXBob25pYy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ8T2JqZWN0fSBbcG9seXBob255PTRdIFRoZSBudW1iZXIgb2Ygdm9pY2VzIHRvIGNyZWF0ZVxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufSBbdm9pY2U9VG9uZS5TeW50aF0gVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSB2b2ljZXNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBUb25lLlN5bnRoIGJ5IGRlZmF1bHQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHBvbHlzeW50aCBjb21wb3NlZCBvZiA2IFZvaWNlcyBvZiBTeW50aFxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLlBvbHlTeW50aCg2LCBUb25lLlN5bnRoKS50b01hc3RlcigpO1xuXHRcdCAqIC8vc2V0IHRoZSBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBzZXQgaW50ZXJmYWNlXG5cdFx0ICogc3ludGguc2V0KFwiZGV0dW5lXCIsIC0xMjAwKTtcblx0XHQgKiAvL3BsYXkgYSBjaG9yZFxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkM0XCIsIFwiRTRcIiwgXCJBNFwiXSwgXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3BvbHlwaG9ueScsXG5cdCAgICAgICAgICAgICd2b2ljZSdcblx0ICAgICAgICBdLCBUb25lLlBvbHlTeW50aCk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkluc3RydW1lbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8vbWF4IHBvbHlwaG9ueVxuXHQgICAgICAgIG9wdGlvbnMucG9seXBob255ID0gTWF0aC5taW4oVG9uZS5Qb2x5U3ludGguTUFYX1BPTFlQSE9OWSwgb3B0aW9ucy5wb2x5cGhvbnkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhcnJheSBvZiB2b2ljZXNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvaWNlcyA9IG5ldyBBcnJheShvcHRpb25zLnBvbHlwaG9ueSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHF1ZXVlIG9mIHZvaWNlcyB3aXRoIGRhdGEgYWJvdXQgbGFzdCB0cmlnZ2VyXG5cdFx0XHQgKiAgYW5kIHRoZSB0cmlnZ2VyZWQgbm90ZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlcnMgPSBuZXcgQXJyYXkob3B0aW9ucy5wb2x5cGhvbnkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHNcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2RldHVuZScpO1xuXHQgICAgICAgIC8vY3JlYXRlIHRoZSB2b2ljZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMucG9seXBob255OyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHYgPSBuZXcgb3B0aW9ucy52b2ljZShhcmd1bWVudHNbMl0sIGFyZ3VtZW50c1szXSk7XG5cdCAgICAgICAgICAgIGlmICghKHYgaW5zdGFuY2VvZiBUb25lLk1vbm9waG9uaWMpKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5bnRoIGNvbnN0cnVjdG9yIG11c3QgYmUgaW5zdGFuY2Ugb2YgVG9uZS5Nb25vcGhvbmljJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy52b2ljZXNbaV0gPSB2O1xuXHQgICAgICAgICAgICB2LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICBpZiAodi5oYXNPd25Qcm9wZXJ0eSgnZGV0dW5lJykpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3Qodi5kZXR1bmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJzW2ldID0ge1xuXHQgICAgICAgICAgICAgICAgcmVsZWFzZTogLTEsXG5cdCAgICAgICAgICAgICAgICBub3RlOiBudWxsLFxuXHQgICAgICAgICAgICAgICAgdm9pY2U6IHZcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Qb2x5U3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncG9seXBob255JzogNCxcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAndm9pY2UnOiBUb25lLlN5bnRoXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeXxBcnJheX0gbm90ZXMgVGhlIG5vdGVzIHRvIHBsYXkuIEFjY2VwdHMgYSBzaW5nbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVxdWVuY3kgb3IgYW4gYXJyYXkgb2YgZnJlcXVlbmNpZXMuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gIFRoZSBzdGFydCB0aW1lIG9mIHRoZSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIGEgY2hvcmQgaW1tZWRpYXRlbHkgd2l0aCBhIHZlbG9jaXR5IG9mIDAuMlxuXHRcdCAqIHBvbHkudHJpZ2dlckF0dGFjayhbXCJBYjNcIiwgXCJDNFwiLCBcIkY1XCJdLCB1bmRlZmluZWQsIDAuMik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlcywgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobm90ZXMpKSB7XG5cdCAgICAgICAgICAgIG5vdGVzID0gW25vdGVzXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IG5vdGVzW2ldO1xuXHQgICAgICAgICAgICAvL3RyaWdnZXIgdGhlIG9sZGVzdCB2b2ljZVxuXHQgICAgICAgICAgICB2YXIgb2xkZXN0ID0gdGhpcy5fdHJpZ2dlcnNbMF07XG5cdCAgICAgICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgdGhpcy5fdHJpZ2dlcnMubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl90cmlnZ2Vyc1tqXS5yZWxlYXNlIDwgb2xkZXN0LnJlbGVhc2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbGRlc3QgPSB0aGlzLl90cmlnZ2Vyc1tqXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBvbGRlc3QucmVsZWFzZSA9IEluZmluaXR5O1xuXHQgICAgICAgICAgICBvbGRlc3Qubm90ZSA9IEpTT04uc3RyaW5naWZ5KHZhbCk7XG5cdCAgICAgICAgICAgIG9sZGVzdC52b2ljZS50cmlnZ2VyQXR0YWNrKHZhbCwgdGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIGFmdGVyIHRoZSBzcGVjaWZpZWQgZHVyYXRpb25cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l8QXJyYXl9IG5vdGVzIFRoZSBub3RlcyB0byBwbGF5LiBBY2NlcHRzIGEgc2luZ2xlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlcXVlbmN5IG9yIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiB0aGUgZHVyYXRpb24gb2YgdGhlIG5vdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgaWYgbm8gdGltZSBpcyBnaXZlbiwgZGVmYXVsdHMgdG8gbm93XG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgYXR0YWNrICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciBhIGNob3JkIGZvciBhIGR1cmF0aW9uIG9mIGEgaGFsZiBub3RlXG5cdFx0ICogcG9seS50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJFYjNcIiwgXCJHNFwiLCBcIkM1XCJdLCBcIjJuXCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIHBhc3MgaW4gYW4gYXJyYXkgb2YgZHVyYXRpb25zIGFzIHdlbGxcblx0XHQgKiBwb2x5LnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkViM1wiLCBcIkc0XCIsIFwiQzVcIl0sIFtcIjJuXCIsIFwiNG5cIiwgXCI0blwiXSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAobm90ZXMsIGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sobm90ZXMsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KGR1cmF0aW9uKSAmJiBUb25lLmlzQXJyYXkobm90ZXMpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkID0gZHVyYXRpb25bTWF0aC5taW4oaSwgZHVyYXRpb24ubGVuZ3RoIC0gMSldO1xuXHQgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZShub3Rlc1tpXSwgdGltZSArIHRoaXMudG9TZWNvbmRzKGQpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2Uobm90ZXMsIHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBvZiB0aGUgbm90ZS4gVW5saWtlIG1vbm9waG9uaWMgaW5zdHJ1bWVudHMsXG5cdFx0ICogIGEgbm90ZSAob3IgYXJyYXkgb2Ygbm90ZXMpIG5lZWRzIHRvIGJlIHBhc3NlZCBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeXxBcnJheX0gbm90ZXMgVGhlIG5vdGVzIHRvIHBsYXkuIEFjY2VwdHMgYSBzaW5nbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVxdWVuY3kgb3IgYW4gYXJyYXkgb2YgZnJlcXVlbmNpZXMuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gIFdoZW4gdGhlIHJlbGVhc2Ugd2lsbCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHBvbHkudHJpZ2dlclJlbGVhc2UoW1wiQWIzXCIsIFwiQzRcIiwgXCJGNVwiXSwgXCIrMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAobm90ZXMsIHRpbWUpIHtcblx0ICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobm90ZXMpKSB7XG5cdCAgICAgICAgICAgIG5vdGVzID0gW25vdGVzXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIHZvaWNlXG5cdCAgICAgICAgICAgIHZhciBzdHJpbmdpZmllZCA9IEpTT04uc3RyaW5naWZ5KG5vdGVzW2ldKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgdiA9IDA7IHYgPCB0aGlzLl90cmlnZ2Vycy5sZW5ndGg7IHYrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSB0aGlzLl90cmlnZ2Vyc1t2XTtcblx0ICAgICAgICAgICAgICAgIGlmIChkZXNjLm5vdGUgPT09IHN0cmluZ2lmaWVkICYmIGRlc2MucmVsZWFzZSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBkZXNjLnZvaWNlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIGRlc2MucmVsZWFzZSA9IHRpbWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCBhIG1lbWJlci9hdHRyaWJ1dGUgb2YgdGhlIHZvaWNlcy5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R8c3RyaW5nfSBwYXJhbXNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByYW1wVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwb2x5LnNldCh7XG5cdFx0ICogXHRcImZpbHRlclwiIDoge1xuXHRcdCAqIFx0XHRcInR5cGVcIiA6IFwiaGlnaHBhc3NcIlxuXHRcdCAqIFx0fSxcblx0XHQgKiBcdFwiZW52ZWxvcGVcIiA6IHtcblx0XHQgKiBcdFx0XCJhdHRhY2tcIiA6IDAuMjVcblx0XHQgKiBcdH1cblx0XHQgKiB9KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocGFyYW1zLCB2YWx1ZSwgcmFtcFRpbWUpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudm9pY2VzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldLnNldChwYXJhbXMsIHZhbHVlLCByYW1wVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHN5bnRoJ3MgYXR0cmlidXRlcy4gR2l2ZW4gbm8gYXJndW1lbnRzIGdldFxuXHRcdCAqICB3aWxsIHJldHVybiBhbGwgYXZhaWxhYmxlIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nXG5cdFx0ICogIHZhbHVlcy4gUGFzcyBpbiBhIHNpbmdsZSBhdHRyaWJ1dGUgdG8gcmV0cmlldmUgb3IgYW4gYXJyYXlcblx0XHQgKiAgb2YgYXR0cmlidXRlcy4gVGhlIGF0dHJpYnV0ZSBzdHJpbmdzIGNhbiBhbHNvIGluY2x1ZGUgYSBcIi5cIlxuXHRcdCAqICB0byBhY2Nlc3MgZGVlcGVyIHByb3BlcnRpZXMuXG5cdFx0ICogIEBwYXJhbSB7QXJyYXk9fSBwYXJhbXMgdGhlIHBhcmFtZXRlcnMgdG8gZ2V0LCBvdGhlcndpc2Ugd2lsbCByZXR1cm5cblx0XHQgKiAgXHRcdFx0XHRcdCAgIGFsbCBhdmFpbGFibGUuXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZvaWNlc1swXS5nZXQocGFyYW1zKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIGFsbCB0aGUgY3VycmVudGx5IGFjdGl2ZSB2b2ljZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBub3RlcyBzaG91bGQgYmUgcmVsZWFzZWQuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUucmVsZWFzZUFsbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdHJpZ2dlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGRlc2MgPSB0aGlzLl90cmlnZ2Vyc1tpXTtcblx0ICAgICAgICAgICAgaWYgKGRlc2MucmVsZWFzZSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGRlc2MucmVsZWFzZSA9IHRpbWU7XG5cdCAgICAgICAgICAgICAgICBkZXNjLnZvaWNlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudm9pY2VzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy52b2ljZXNbaV0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZGV0dW5lJyk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvaWNlcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlcnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbWF4aW11bSBudW1iZXIgb2Ygbm90ZXMgdGhhdCBjYW4gYmUgYWxsb2NhdGVkXG5cdFx0ICogIHRvIGEgcG9seXN5bnRoLlxuXHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGguTUFYX1BPTFlQSE9OWSA9IDIwO1xuXHQgICAgcmV0dXJuIFRvbmUuUG9seVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgQXV0b21hdGljYWxseSBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIHNldCBvZiBwaXRjaGVkIHNhbXBsZXMuIFBhc3MgaW4gYW4gb2JqZWN0IHdoaWNoIG1hcHMgdGhlIG5vdGUncyBwaXRjaCBvciBtaWRpIHZhbHVlIHRvIHRoZSB1cmwsIHRoZW4geW91IGNhbiB0cmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2Ugb2YgdGhhdCBub3RlIGxpa2Ugb3RoZXIgaW5zdHJ1bWVudHMuIEJ5IGF1dG9tYXRpY2FsbHkgcmVwaXRjaGluZyB0aGUgc2FtcGxlcywgaXQgaXMgcG9zc2libGUgdG8gcGxheSBwaXRjaGVzIHdoaWNoIHdlcmUgbm90IGV4cGxpY2l0bHkgaW5jbHVkZWQgd2hpY2ggY2FuIHNhdmUgbG9hZGluZyB0aW1lLlxuXHRcdCAqICAgICAgICBGb3Igc2FtcGxlIG9yIGJ1ZmZlciBwbGF5YmFjayB3aGVyZSByZXBpdGNoaW5nIGlzIG5vdCBuZWNlc3NhcnksIHVzZSBbVG9uZS5QbGF5ZXJdKGh0dHBzOi8vdG9uZWpzLmdpdGh1Yi5pby9kb2NzL1BsYXllcikuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNhbXBsZXMgQW4gb2JqZWN0IG9mIHNhbXBsZXMgbWFwcGluZyBlaXRoZXIgTWlkaVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgTnVtYmVycyBvciBTY2llbnRpZmljIFBpdGNoIE5vdGF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHVybCBvZiB0aGF0IHNhbXBsZS5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhbGwgb2YgdGhlIHNhbXBsZXMgYXJlIGxvYWRlZC5cblx0XHQgKiBAcGFyYW0ge1N0cmluZz19IGJhc2VVcmwgVGhlIHJvb3QgVVJMIG9mIGFsbCBvZiB0aGUgc2FtcGxlcywgd2hpY2ggaXMgcHJlcGVuZGVkIHRvIGFsbCB0aGUgVVJMcy5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBzYW1wbGVyID0gbmV3IFRvbmUuU2FtcGxlcih7XG5cdFx0ICogXHRcIkMzXCIgOiBcInBhdGgvdG8vQzMubXAzXCIsXG5cdFx0ICogXHRcIkQjM1wiIDogXCJwYXRoL3RvL0RzaGFycDMubXAzXCIsXG5cdFx0ICogXHRcIkYjM1wiIDogXCJwYXRoL3RvL0ZzaGFycDMubXAzXCIsXG5cdFx0ICogXHRcIkEzXCIgOiBcInBhdGgvdG8vQTMubXAzXCIsXG5cdFx0ICogfSwgZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vc2FtcGxlciB3aWxsIHJlcGl0Y2ggdGhlIGNsb3Nlc3Qgc2FtcGxlXG5cdFx0ICogXHRzYW1wbGVyLnRyaWdnZXJBdHRhY2soXCJEM1wiKVxuXHRcdCAqIH0pXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlciA9IGZ1bmN0aW9uICh1cmxzKSB7XG5cdCAgICAgICAgLy8gc2hpZnQgYXJndW1lbnRzIG92ZXIgb25lLiBUaG9zZSBhcmUgdGhlIHJlbWFpbmRlciBvZiB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3MsIFtcblx0ICAgICAgICAgICAgJ29ubG9hZCcsXG5cdCAgICAgICAgICAgICdiYXNlVXJsJ1xuXHQgICAgICAgIF0sIFRvbmUuU2FtcGxlcik7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgdmFyIHVybE1hcCA9IHt9O1xuXHQgICAgICAgIGZvciAodmFyIG5vdGUgaW4gdXJscykge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc05vdGUobm90ZSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vY29udmVydCB0aGUgbm90ZSBuYW1lIHRvIE1JRElcblx0ICAgICAgICAgICAgICAgIHZhciBtaWQgPSBUb25lLkZyZXF1ZW5jeShub3RlKS50b01pZGkoKTtcblx0ICAgICAgICAgICAgICAgIHVybE1hcFttaWRdID0gdXJsc1tub3RlXTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICghaXNOYU4ocGFyc2VGbG9hdChub3RlKSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGlmIGl0J3MgbnVtYmVycyBhc3N1bWUgaXQncyBtaWRpXG5cdCAgICAgICAgICAgICAgICB1cmxNYXBbbm90ZV0gPSB1cmxzW25vdGVdO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlNhbXBsZXI6IHVybCBrZXlzIG11c3QgYmUgdGhlIG5vdGVcXCdzIHBpdGNoJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgc3RvcmVkIGFuZCBsb2FkZWQgYnVmZmVyc1xuXHRcdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyc31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0gbmV3IFRvbmUuQnVmZmVycyh1cmxNYXAsIG9wdGlvbnMub25sb2FkLCBvcHRpb25zLmJhc2VVcmwpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG9iamVjdCBvZiBhbGwgY3VycmVudGx5IHBsYXlpbmcgQnVmZmVyU291cmNlc1xuXHRcdFx0ICogQHR5cGUge09iamVjdH1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0ge307XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZW52ZWxvcGUgYXBwbGllZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGUuXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXR0YWNrID0gb3B0aW9ucy5hdHRhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZW52ZWxvcGUgYXBwbGllZCB0byB0aGUgZW5kIG9mIHRoZSBlbnZlbG9wZS5cblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gb3B0aW9ucy5yZWxlYXNlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2FtcGxlciwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEBjb25zdFxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgYXR0YWNrOiAwLFxuXHQgICAgICAgIHJlbGVhc2U6IDAuMSxcblx0ICAgICAgICBvbmxvYWQ6IFRvbmUubm9PcCxcblx0ICAgICAgICBiYXNlVXJsOiAnJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2UgaW4gc3RlcHMgYmV0d2VlbiB0aGUgZ2l2ZW4gbWlkaSBub3RlIGF0IHRoZSBjbG9zZXRzIHNhbXBsZS5cblx0XHQgKiBAcGFyYW0gIHtNaWRpfSBtaWRpXG5cdFx0ICogQHJldHVybiB7SW50ZXJ2YWx9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUuX2ZpbmRDbG9zZXN0ID0gZnVuY3Rpb24gKG1pZGkpIHtcblx0ICAgICAgICAvL3NlYXJjaGVzIHdpdGhpbiA4IG9jdGF2ZXMgb2YgdGhlIGdpdmVuIG1pZGkgbm90ZVxuXHQgICAgICAgIHZhciBNQVhfSU5URVJWQUwgPSA5Njtcblx0ICAgICAgICB2YXIgaW50ZXJ2YWwgPSAwO1xuXHQgICAgICAgIHdoaWxlIChpbnRlcnZhbCA8IE1BWF9JTlRFUlZBTCkge1xuXHQgICAgICAgICAgICAvLyBjaGVjayBhYm92ZSBhbmQgYmVsb3dcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcnMuaGFzKG1pZGkgKyBpbnRlcnZhbCkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAtaW50ZXJ2YWw7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYnVmZmVycy5oYXMobWlkaSAtIGludGVydmFsKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGludGVydmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGludGVydmFsKys7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gcGxheVxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBXaGVuIHRvIHBsYXkgdGhlIG5vdGVcblx0XHQgKiBAcGFyYW0gIHtOb3JtYWxSYW5nZT19IHZlbG9jaXR5IFRoZSB2ZWxvY2l0eSB0byBwbGF5IHRoZSBzYW1wbGUgYmFjay5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9ICAgICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHZhciBtaWRpID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgLy8gZmluZCB0aGUgY2xvc2VzdCBub3RlIHBpdGNoXG5cdCAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSB0aGlzLl9maW5kQ2xvc2VzdChtaWRpKTtcblx0ICAgICAgICBpZiAoZGlmZmVyZW5jZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvc2VzdE5vdGUgPSBtaWRpIC0gZGlmZmVyZW5jZTtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuX2J1ZmZlcnMuZ2V0KGNsb3Nlc3ROb3RlKTtcblx0ICAgICAgICAgICAgLy8gcGxheSB0aGF0IG5vdGVcblx0ICAgICAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBUb25lLkJ1ZmZlclNvdXJjZSh7XG5cdCAgICAgICAgICAgICAgICAnYnVmZmVyJzogYnVmZmVyLFxuXHQgICAgICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGRpZmZlcmVuY2UpLFxuXHQgICAgICAgICAgICAgICAgJ2ZhZGVJbic6IHRoaXMuYXR0YWNrLFxuXHQgICAgICAgICAgICAgICAgJ2ZhZGVPdXQnOiB0aGlzLnJlbGVhc2UsXG5cdCAgICAgICAgICAgICAgICAnY3VydmUnOiAnZXhwb25lbnRpYWwnXG5cdCAgICAgICAgICAgIH0pLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RhcnQodGltZSwgMCwgYnVmZmVyLmR1cmF0aW9uLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgYWN0aXZlIHNvdXJjZXNcblx0ICAgICAgICAgICAgaWYgKCFUb25lLmlzQXJyYXkodGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0gPSBbXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLnB1c2goe1xuXHQgICAgICAgICAgICAgICAgbm90ZTogbWlkaSxcblx0ICAgICAgICAgICAgICAgIHNvdXJjZTogc291cmNlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHJlbGVhc2UuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFx0V2hlbiB0byByZWxlYXNlIHRoZSBub3RlLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn1cdHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAobm90ZSwgdGltZSkge1xuXHQgICAgICAgIHZhciBtaWRpID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgLy8gZmluZCB0aGUgbm90ZVxuXHQgICAgICAgIGlmICh0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldICYmIHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0ubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLnNoaWZ0KCkuc291cmNlO1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUgKyB0aGlzLnJlbGVhc2UsIHRoaXMucmVsZWFzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlbGVhc2UgYWxsIGN1cnJlbnRseSBhY3RpdmUgbm90ZXMuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFx0V2hlbiB0byByZWxlYXNlIHRoZSBub3Rlcy5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9XHR0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnJlbGVhc2VBbGwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBub3RlIGluIHRoaXMuX2FjdGl2ZVNvdXJjZXMpIHtcblx0ICAgICAgICAgICAgdmFyIHNvdXJjZXMgPSB0aGlzLl9hY3RpdmVTb3VyY2VzW25vdGVdO1xuXHQgICAgICAgICAgICB3aGlsZSAoc291cmNlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzLnNoaWZ0KCkuc291cmNlO1xuXHQgICAgICAgICAgICAgICAgc291cmNlLnN0b3AodGltZSArIHRoaXMucmVsZWFzZSwgdGhpcy5yZWxlYXNlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlIHRoZSBhdHRhY2sgcGhhc2UsIHRoZW4gYWZ0ZXIgdGhlIGR1cmF0aW9uLCBpbnZva2UgdGhlIHJlbGVhc2UuXG5cdFx0ICogQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byBwbGF5XG5cdFx0ICogQHBhcmFtICB7VGltZX0gZHVyYXRpb24gVGhlIHRpbWUgdGhlIG5vdGUgc2hvdWxkIGJlIGhlbGRcblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSAgICAgV2hlbiB0byBzdGFydCB0aGUgYXR0YWNrXG5cdFx0ICogQHBhcmFtICB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIGF0dGFja1xuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn0gICAgICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlLCBkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKG5vdGUsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKG5vdGUsIHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIG5vdGUgdG8gdGhlIHNhbXBsZXIuXG5cdFx0ICogIEBwYXJhbSAge05vdGV8TWlkaX0gICBub3RlICAgICAgVGhlIGJ1ZmZlcidzIHBpdGNoLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8VG9uZS5CdWZmZXJ8QXVkaW9idWZmZXJ9ICB1cmwgIEVpdGhlciB0aGUgdXJsIG9mIHRoZSBidWZlcixcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGFkZGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChub3RlLCB1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOb3RlKG5vdGUpKSB7XG5cdCAgICAgICAgICAgIC8vY29udmVydCB0aGUgbm90ZSBuYW1lIHRvIE1JRElcblx0ICAgICAgICAgICAgdmFyIG1pZCA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzLmFkZChtaWQsIHVybCwgY2FsbGJhY2spO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKHBhcnNlRmxvYXQobm90ZSkpKSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGlmIGl0J3MgbnVtYmVycyBhc3N1bWUgaXQncyBtaWRpXG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnMuYWRkKG5vdGUsIHVybCwgY2FsbGJhY2spO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5TYW1wbGVyOiBub3RlIG11c3QgYmUgdGhlIG5vdGVcXCdzIHBpdGNoLiBJbnN0ZWFkIGdvdCAnICsgbm90ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2FtcGxlciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNhbXBsZXIucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVycy5sb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIG1pZGkgaW4gdGhpcy5fYWN0aXZlU291cmNlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5zb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2FtcGxlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCFPc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0UGVyaW9kaWNXYXZlKSB7XG5cdCAgICAgICAgICAgIE9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zZXRQZXJpb2RpY1dhdmUgPSBPc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0V2F2ZVRhYmxlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlUGVyaW9kaWNXYXZlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlUGVyaW9kaWNXYXZlID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVXYXZlVGFibGU7XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTWFwcyBhIE5vcm1hbFJhbmdlIFswLCAxXSB0byBhbiBBdWRpb1JhbmdlIFstMSwgMV0uIFxuXHRcdCAqICAgICAgICAgU2VlIGFsc28gVG9uZS5BdWRpb1RvR2Fpbi4gXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGcyYSA9IG5ldyBUb25lLkdhaW5Ub0F1ZGlvKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW5Ub0F1ZGlvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHgpICogMiAtIDE7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HYWluVG9BdWRpbywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HYWluVG9BdWRpb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluVG9BdWRpby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ub3JtLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ub3JtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HYWluVG9BdWRpbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE5vcm1hbGl6ZSB0YWtlcyBhbiBpbnB1dCBtaW4gYW5kIG1heCBhbmQgbWFwcyBpdCBsaW5lYXJseSB0byBOb3JtYWxSYW5nZSBbMCwxXVxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gaW5wdXRNaW4gdGhlIG1pbiBpbnB1dCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gaW5wdXRNYXggdGhlIG1heCBpbnB1dCB2YWx1ZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBub3JtID0gbmV3IFRvbmUuTm9ybWFsaXplKDIsIDQpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMykuY29ubmVjdChub3JtKTtcblx0XHQgKiAvL291dHB1dCBvZiBub3JtIGlzIDAuNS4gXG5cdFx0ICovXG5cdCAgICBUb25lLk5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChpbnB1dE1pbiwgaW5wdXRNYXgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWluIGlucHV0IHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5wdXRNaW4gPSBUb25lLmRlZmF1bHRBcmcoaW5wdXRNaW4sIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtYXggaW5wdXQgdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnB1dE1heCA9IFRvbmUuZGVmYXVsdEFyZyhpbnB1dE1heCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3VidHJhY3QgdGhlIG1pbiBmcm9tIHRoZSBpbnB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ViID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLkFkZCgwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBkaXZpZGUgYnkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgaW5wdXQgYW5kIG91dHB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kaXYgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk11bHRpcGx5KDEpO1xuXHQgICAgICAgIHRoaXMuX3N1Yi5jb25uZWN0KHRoaXMuX2Rpdik7XG5cdCAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5vcm1hbGl6ZSwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIHZhbHVlIHRoZSBpbnB1dCBzaWduYWwgd2lsbCByZWFjaC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Ob3JtYWxpemUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dE1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9pbnB1dE1pbiA9IG1pbjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIHZhbHVlIHRoZSBpbnB1dCBzaWduYWwgd2lsbCByZWFjaC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Ob3JtYWxpemUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dE1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9pbnB1dE1heCA9IG1heDtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXQgdGhlIHZhbHVlc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLl9zZXRSYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zdWIudmFsdWUgPSAtdGhpcy5faW5wdXRNaW47XG5cdCAgICAgICAgdGhpcy5fZGl2LnZhbHVlID0gMSAvICh0aGlzLl9pbnB1dE1heCAtIHRoaXMuX2lucHV0TWluKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9ybWFsaXplfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdWIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGl2LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kaXYgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk5vcm1hbGl6ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwgZXh0ZW5kcyBUb25lLlNpZ25hbCwgYnV0IGFkZHMgdGhlIGFiaWxpdHkgdG8gc3luY2hyb25pemUgdGhlIHNpZ25hbCB0byB0aGUgc2lnbmFsIHRvIHRoZSBUb25lLlRyYW5zcG9ydFxuXHRcdCAqIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSByZWFsIHNpZ25hbCBvdXRwdXRcblx0XHRcdCAqIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IHRoaXMuX291dHB1dFNpZyA9IG5ldyBUb25lLlNpZ25hbCh0aGlzLl9pbml0aWFsVmFsdWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogS2VlcCB0cmFjayBvZiB0aGUgbGFzdCB2YWx1ZS4gKHNtYWxsIG9wdGltaXphdGlvbilcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGFzdFZhbCA9IHRoaXMudmFsdWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZXZlbnQgaWQgb2YgdGhlIHRpY2sgdXBkYXRlIGxvb3Bcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQodGhpcy5fb25UaWNrLmJpbmQodGhpcyksICcxaScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogQSBib3VuZCB2ZXJzaW9uIG9mIHRoZSBhbmNob3IgdmFsdWUgbWV0aG9kc1xuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JpbmRBbmNob3JWYWx1ZSA9IHRoaXMuX2FuY2hvclZhbHVlLmJpbmQodGhpcyk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub24oJ3N0YXJ0IHN0b3AgcGF1c2UnLCB0aGlzLl9iaW5kQW5jaG9yVmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5tZW1vcnkgPSBJbmZpbml0eTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiBDYWxsYmFjayB3aGljaCBpcyBpbnZva2VkIGV2ZXJ5IHRpY2suXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLl9vblRpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB2YWwgPSB0aGlzLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnNlY29uZHMpO1xuXHQgICAgICAgIGlmICh0aGlzLl9sYXN0VmFsICE9PSB2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGFzdFZhbCA9IHZhbDtcblx0ICAgICAgICAgICAgLy9hcHByb3hpbWF0ZSByYW1wIGN1cnZlcyB3aXRoIGxpbmVhciByYW1wc1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXRTaWcubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQW5jaG9yIHRoZSB2YWx1ZSBhdCB0aGUgc3RhcnQgYW5kIHN0b3Agb2YgdGhlIFRyYW5zcG9ydFxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgIHRoaXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuX2FuY2hvclZhbHVlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICB0aGlzLl9sYXN0VmFsID0gdmFsO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZy5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3V0cHV0U2lnLnNldFZhbHVlQXRUaW1lKHZhbCwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBUaGlzIHdpbGxcblx0XHQgKiAgcmV0dXJuIHRoZSB1bmNvbnZlcnRlZCAocmF3KSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gIHRpbWUgIFRoZSB0aW1lIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBUaGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFNldCB0aGUgb3V0cHV0IG9mIHRoZSBzaWduYWwgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGFuZ2UgdG8gYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSB0aW1lICBUaGUgdGltZSB0byBjaGFuZ2UgdGhlIHNpZ25hbFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTGluZWFyIHJhbXAgdG8gdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwb2ludCB0byB0aGUgZ2l2ZW4gdmFsdWVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGFuZ2UgdG8gYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSB0aW1lICBUaGUgdGltZSB0byBjaGFuZ2UgdGhlIHNpZ25hbFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRXhwb25lbnRpYWwgcmFtcCB0byB0aGUgZ2l2ZW4gdmFsdWUgZnJvbSB0aGUgcHJldmlvdXMgc2NoZWR1bGVkIHBvaW50IHRvIHRoZSBnaXZlbiB2YWx1ZVxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoYW5nZSB0byBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9IHRpbWUgIFRoZSB0aW1lIHRvIGNoYW5nZSB0aGUgc2lnbmFsXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoXG5cdFx0ICogIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRpbWUgY29uc3RhbnQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGltZUNvbnN0YW50XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25zdGFudCkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRUYXJnZXRBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWxzIGFsbCBzY2hlZHVsZWQgcGFyYW1ldGVyIGNoYW5nZXMgd2l0aCB0aW1lcyBncmVhdGVyIHRoYW4gb3Jcblx0XHQgKiAgZXF1YWwgdG8gc3RhcnRUaW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyA9IGZ1bmN0aW9uIChzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVkVmFsdWVzLmNhbGwodGhpcywgc3RhcnRUaW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IGFuIGFycmF5IG9mIGFyYml0cmFyeSB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWUgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKiAgQHBhcmFtIHtGbG9hdDMyQXJyYXl9IHZhbHVlc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGR1cmF0aW9uXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzY2FsaW5nPTFdIElmIHRoZSB2YWx1ZXMgaW4gdGhlIGN1cnZlIHNob3VsZCBiZSBzY2FsZWQgYnkgc29tZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLnNldFZhbHVlQ3VydmVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWVzLCBzdGFydFRpbWUsIGR1cmF0aW9uLCBzY2FsaW5nKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSBUb25lLlRyYW5zcG9ydFRpbWUoZHVyYXRpb24pO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUN1cnZlQXRUaW1lLmNhbGwodGhpcywgdmFsdWVzLCBzdGFydFRpbWUsIGR1cmF0aW9uLCBzY2FsaW5nKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhpcyBpcyBzaW1pbGFyIHRvIFtjYW5jZWxTY2hlZHVsZWRWYWx1ZXNdKCNjYW5jZWxTY2hlZHVsZWRWYWx1ZXMpIGV4Y2VwdFxuXHRcdCAqICBpdCBob2xkcyB0aGUgYXV0b21hdGVkIHZhbHVlIGF0IHRpbWUgdW50aWwgdGhlIG5leHQgYXV0b21hdGVkIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxBbmRIb2xkQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5TaWduYWwucHJvdG90eXBlLmNhbmNlbEFuZEhvbGRBdFRpbWUuY2FsbCh0aGlzLCBUb25lLlRyYW5zcG9ydFRpbWUodGltZSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX3N5bmNlZCk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub2ZmKCdzdGFydCBzdG9wIHBhdXNlJywgdGhpcy5fc3luY2VkQ2FsbGJhY2spO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwoMCk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWw7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBUb25lLkdyYWluUGxheWVyIGltcGxlbWVudHMgW2dyYW51bGFyIHN5bnRoZXNpc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JhbnVsYXJfc3ludGhlc2lzKS5cblx0XHQgKiAgICAgICAgR3JhbnVsYXIgU3ludGhlc2lzIGVuYWJsZXMgeW91IHRvIGFkanVzdCBwaXRjaCBhbmQgcGxheWJhY2sgcmF0ZSBpbmRlcGVuZGVudGx5LiBUaGUgZ3JhaW5TaXplIGlzIHRoZVxuXHRcdCAqICAgICAgICBhbW91bnQgb2YgdGltZSBlYWNoIHNtYWxsIGNodW5rIG9mIGF1ZGlvIGlzIHBsYXllZCBmb3IgYW5kIHRoZSBvdmVybGFwIGlzIHRoZVxuXHRcdCAqICAgICAgICBhbW91bnQgb2YgY3Jvc3NmYWRpbmcgdHJhbnNpdGlvbiB0aW1lIGJldHdlZW4gc3VjY2Vzc2l2ZSBncmFpbnMuXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfFRvbmUuQnVmZmVyfSB1cmxcdFRoZSB1cmwgdG8gbG9hZCwgb3IgdGhlIFRvbmUuQnVmZmVyIHRvIHBsYXkuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3VybCcsXG5cdCAgICAgICAgICAgICdvbmxvYWQnXG5cdCAgICAgICAgXSwgVG9uZS5HcmFpblBsYXllcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXVkaW8gYnVmZmVyIGJlbG9uZ2luZyB0byB0aGUgcGxheWVyLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5CdWZmZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihvcHRpb25zLnVybCwgb3B0aW9ucy5vbmxvYWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENyZWF0ZSBhIHJlcGVhdGluZyB0aWNrIHRvIHNjaGVkdWxlXG5cdFx0XHQgKiAgdGhlIGdyYWlucy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ2xvY2t9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrID0gbmV3IFRvbmUuQ2xvY2sodGhpcy5fdGljay5iaW5kKHRoaXMpLCBvcHRpb25zLmdyYWluU2l6ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BFbmQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogQWxsIG9mIHRoZSBjdXJyZW50bHkgcGxheWluZyBCdWZmZXJTb3VyY2VzXG5cdFx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ3JhaW5TaXplID0gb3B0aW9ucy5ncmFpblNpemU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3ZlcmxhcCA9IG9wdGlvbnMub3ZlcmxhcDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBZGp1c3QgdGhlIHBpdGNoIGluZGVwZW5kZW50bHkgb2YgdGhlIHBsYXliYWNrUmF0ZS5cblx0XHRcdCAqICBAdHlwZSAge0NlbnRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvL3NldHVwXG5cdCAgICAgICAgdGhpcy5vdmVybGFwID0gb3B0aW9ucy5vdmVybGFwO1xuXHQgICAgICAgIHRoaXMubG9vcCA9IG9wdGlvbnMubG9vcDtcblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgICAgIHRoaXMuZ3JhaW5TaXplID0gb3B0aW9ucy5ncmFpblNpemU7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBvcHRpb25zLmxvb3BTdGFydDtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBvcHRpb25zLmxvb3BFbmQ7XG5cdCAgICAgICAgdGhpcy5yZXZlcnNlID0gb3B0aW9ucy5yZXZlcnNlO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdzdG9wJywgdGhpcy5fb25zdG9wLmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR3JhaW5QbGF5ZXIsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ292ZXJsYXAnOiAwLjEsXG5cdCAgICAgICAgJ2dyYWluU2l6ZSc6IDAuMixcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogMCxcblx0ICAgICAgICAncmV2ZXJzZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBsYXkgdGhlIGJ1ZmZlciBhdCB0aGUgZ2l2ZW4gc3RhcnRUaW1lLiBPcHRpb25hbGx5IGFkZCBhbiBvZmZzZXRcblx0XHQgKiAgYW5kL29yIGR1cmF0aW9uIHdoaWNoIHdpbGwgcGxheSB0aGUgYnVmZmVyIGZyb20gYSBwb3NpdGlvblxuXHRcdCAqICB3aXRoaW4gdGhlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR3JhaW5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogIEBtZXRob2Qgc3RhcnRcblx0XHQgKiAgQG5hbWUgc3RhcnRcblx0XHQgKi9cblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBzdGFydCBtZXRob2Rcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gb2Zmc2V0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0LCBkdXJhdGlvbikge1xuXHQgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29mZnNldCA9IG9mZnNldDtcblx0ICAgICAgICB0aGlzLl9jbG9jay5zdGFydCh0aW1lKTtcblx0ICAgICAgICBpZiAoZHVyYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbikpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlZCB3aGVuIHRoZSBjbG9jayBpcyBzdG9wcGVkXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl9vbnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vc3RvcCB0aGUgcGxheWVyc1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUsIDApO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2VkIG9uIGVhY2ggY2xvY2sgdGljay4gc2NoZWR1bGVkIGEgbmV3XG5cdFx0ICogIGdyYWluIGF0IHRoaXMgdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgZmFkZUluID0gdGhpcy5fb2Zmc2V0IDwgdGhpcy5fb3ZlcmxhcCA/IDAgOiB0aGlzLl9vdmVybGFwO1xuXHQgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2Uoe1xuXHQgICAgICAgICAgICAnYnVmZmVyJzogdGhpcy5idWZmZXIsXG5cdCAgICAgICAgICAgICdmYWRlSW4nOiBmYWRlSW4sXG5cdCAgICAgICAgICAgICdmYWRlT3V0JzogdGhpcy5fb3ZlcmxhcCxcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0aGlzLmxvb3AsXG5cdCAgICAgICAgICAgICdsb29wU3RhcnQnOiB0aGlzLl9sb29wU3RhcnQsXG5cdCAgICAgICAgICAgICdsb29wRW5kJzogdGhpcy5fbG9vcEVuZCxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKHRoaXMuZGV0dW5lIC8gMTAwKVxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHNvdXJjZS5zdGFydCh0aW1lLCB0aGlzLl9vZmZzZXQpO1xuXHQgICAgICAgIHRoaXMuX29mZnNldCArPSB0aGlzLmdyYWluU2l6ZTtcblx0ICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lICsgdGhpcy5ncmFpblNpemUpO1xuXHQgICAgICAgIC8vYWRkIGl0IHRvIHRoZSBhY3RpdmUgc291cmNlc1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMucHVzaChzb3VyY2UpO1xuXHQgICAgICAgIC8vcmVtb3ZlIGl0IHdoZW4gaXQncyBkb25lXG5cdCAgICAgICAgc291cmNlLm9uZW5kZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2FjdGl2ZVNvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXHQgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEp1bXAgdG8gYSBzcGVjaWZpYyB0aW1lIGFuZCBwbGF5IGl0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgb2Zmc2V0ICBUaGUgb2Zmc2V0IHRvIGp1bXAgdG8uXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHRpbWUgV2hlbiB0byBtYWtlIHRoZSBqdW1wLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5HcmFpblBsYXllcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLnNlZWsgPSBmdW5jdGlvbiAob2Zmc2V0LCB0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLl90aWNrKHRoaXMudG9TZWNvbmRzKHRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgc2FtcGxlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB0aGlzLmdyYWluU2l6ZSA9IHRoaXMuX2dyYWluU2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBsb29wIHN0YXJ0IHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wU3RhcnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGxvb3AgZW5kIHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3BFbmQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkaXJlY3Rpb24gdGhlIGJ1ZmZlciBzaG91bGQgcGxheSBpblxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIHJldmVyc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ3JldmVyc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlci5yZXZlcnNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmV2KSB7XG5cdCAgICAgICAgICAgIHRoaXMuYnVmZmVyLnJldmVyc2UgPSByZXY7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2l6ZSBvZiBlYWNoIGNodW5rIG9mIGF1ZGlvIHRoYXQgdGhlXG5cdFx0ICogYnVmZmVyIGlzIGNob3BwZWQgaW50byBhbmQgcGxheWVkIGJhY2sgYXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgZ3JhaW5TaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdncmFpblNpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ncmFpblNpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dyYWluU2l6ZSA9IHRoaXMudG9TZWNvbmRzKHNpemUpO1xuXHQgICAgICAgICAgICB0aGlzLl9jbG9jay5mcmVxdWVuY3kudmFsdWUgPSB0aGlzLl9wbGF5YmFja1JhdGUgLyB0aGlzLl9ncmFpblNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGlzIGlzIHRoZSBkdXJhdGlvbiBvZiB0aGUgY3Jvc3MtZmFkZSBiZXR3ZWVuXG5cdFx0ICogc3VjZXNzaXZlIGdyYWlucy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBvdmVybGFwXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdvdmVybGFwJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxhcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3ZlcmxhcCA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLkdyYWluUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jbG9jay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR3JhaW5QbGF5ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5QbGF5ZXIgaXMgYW4gYXVkaW8gZmlsZSBwbGF5ZXIgd2l0aCBzdGFydCwgbG9vcCwgYW5kIHN0b3AgZnVuY3Rpb25zLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfEF1ZGlvQnVmZmVyfSB1cmwgRWl0aGVyIHRoZSBBdWRpb0J1ZmZlciBvciB0aGUgdXJsIGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0byBsb2FkIHRoZSBBdWRpb0J1ZmZlclxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIFRoZSBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWNvbW1lbmRlZCB0byB1c2UgVG9uZS5CdWZmZXIub24oJ2xvYWQnKSBpbnN0ZWFkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwbGF5ZXIgPSBuZXcgVG9uZS5QbGF5ZXIoXCIuL3BhdGgvdG8vc2FtcGxlLm1wM1wiKS50b01hc3RlcigpO1xuXHRcdCAqIC8vcGxheSBhcyBzb29uIGFzIHRoZSBidWZmZXIgaXMgbG9hZGVkXG5cdFx0ICogcGxheWVyLmF1dG9zdGFydCA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllciA9IGZ1bmN0aW9uICh1cmwpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucztcblx0ICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIgJiYgdXJsLmxvYWRlZCkge1xuXHQgICAgICAgICAgICB1cmwgPSB1cmwuZ2V0KCk7XG5cdCAgICAgICAgICAgIG9wdGlvbnMgPSBUb25lLlBsYXllci5kZWZhdWx0cztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICAgICAgXSwgVG9uZS5QbGF5ZXIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIHRoZSBmaWxlIHNob3VsZCBwbGF5IGFzIHNvb25cblx0XHRcdCAqICBhcyB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy93aWxsIHBsYXkgYXMgc29vbiBhcyBpdCdzIGxvYWRlZFxuXHRcdFx0ICogdmFyIHBsYXllciA9IG5ldyBUb25lLlBsYXllcih7XG5cdFx0XHQgKiBcdFwidXJsXCIgOiBcIi4vcGF0aC90by9zYW1wbGUubXAzXCIsXG5cdFx0XHQgKiBcdFwiYXV0b3N0YXJ0XCIgOiB0cnVlLFxuXHRcdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXV0b3N0YXJ0ID0gb3B0aW9ucy5hdXRvc3RhcnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGJ1ZmZlclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKHtcblx0ICAgICAgICAgICAgJ3VybCc6IG9wdGlvbnMudXJsLFxuXHQgICAgICAgICAgICAnb25sb2FkJzogdGhpcy5fb25sb2FkLmJpbmQodGhpcywgb3B0aW9ucy5vbmxvYWQpLFxuXHQgICAgICAgICAgICAncmV2ZXJzZSc6IG9wdGlvbnMucmV2ZXJzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmICh1cmwgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KHVybCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGlmIHRoZSBidWZmZXIgc2hvdWxkIGxvb3Agb25jZSBpdCdzIG92ZXJcblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcCA9IG9wdGlvbnMubG9vcDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpZiAnbG9vcCcgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBzdGFydCBhdCB0aGlzIHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IG9wdGlvbnMubG9vcFN0YXJ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGlmICdsb29wJyBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIGVuZCBhdCB0aGlzIHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BFbmQgPSBvcHRpb25zLmxvb3BFbmQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBsYXliYWNrIHJhdGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIGFjdGl2ZSBidWZmZXIgc291cmNlIG5vZGVzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5PFRvbmUuQnVmZmVyU291cmNlPn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBlbGFwc2VkIHRpbWUgY291bnRlci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaWNrU291cmNlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IG5ldyBUb25lLlRpY2tTb3VyY2Uob3B0aW9ucy5wbGF5YmFja1JhdGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlSW4gdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlSW4gPSBvcHRpb25zLmZhZGVJbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZU91dCB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVPdXQgPSBvcHRpb25zLmZhZGVPdXQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QbGF5ZXIsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2F1dG9zdGFydCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogMCxcblx0ICAgICAgICAncmV0cmlnZ2VyJzogZmFsc2UsXG5cdCAgICAgICAgJ3JldmVyc2UnOiBmYWxzZSxcblx0ICAgICAgICAnZmFkZUluJzogMCxcblx0ICAgICAgICAnZmFkZU91dCc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTG9hZCB0aGUgYXVkaW8gZmlsZSBhcyBhbiBhdWRpbyBidWZmZXIuXG5cdFx0ICogIERlY29kZXMgdGhlIGF1ZGlvIGFzeW5jaHJvbm91c2x5IGFuZCBpbnZva2VzXG5cdFx0ICogIHRoZSBjYWxsYmFjayBvbmNlIHRoZSBhdWRpbyBidWZmZXIgbG9hZHMuXG5cdFx0ICogIE5vdGU6IHRoaXMgZG9lcyBub3QgbmVlZCB0byBiZSBjYWxsZWQgaWYgYSB1cmxcblx0XHQgKiAgd2FzIHBhc3NlZCBpbiB0byB0aGUgY29uc3RydWN0b3IuIE9ubHkgdXNlIHRoaXNcblx0XHQgKiAgaWYgeW91IHdhbnQgdG8gbWFudWFsbHkgbG9hZCBhIG5ldyB1cmwuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgdXJsIG9mIHRoZSBidWZmZXIgdG8gbG9hZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIEZpbGV0eXBlIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGludm9rZSBvbmNlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNhbXBsZSBpcyBsb2FkZWQuXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubG9hZCh1cmwsIHRoaXMuX29ubG9hZC5iaW5kKHRoaXMsIGNhbGxiYWNrKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW50ZXJuYWwgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9vbmxvYWQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBjYWxsYmFjayA9IFRvbmUuZGVmYXVsdEFyZyhjYWxsYmFjaywgVG9uZS5ub09wKTtcblx0ICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5hdXRvc3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5zdGFydCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnRlcm5hbCBjYWxsYmFjayB3aGVuIHRoZSBidWZmZXIgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX29uU291cmNlRW5kID0gZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2FjdGl2ZVNvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGxheSB0aGUgYnVmZmVyIGF0IHRoZSBnaXZlbiBzdGFydFRpbWUuIE9wdGlvbmFsbHkgYWRkIGFuIG9mZnNldFxuXHRcdCAqICBhbmQvb3IgZHVyYXRpb24gd2hpY2ggd2lsbCBwbGF5IHRoZSBidWZmZXIgZnJvbSBhIHBvc2l0aW9uXG5cdFx0ICogIHdpdGhpbiB0aGUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb24uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3N0YXJ0VGltZT1ub3ddIFdoZW4gdGhlIHBsYXllciBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtvZmZzZXQ9MF0gVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgc2FtcGxlIHNob3VsZCBwbGF5LiBJZiBubyBkdXJhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnaXZlbiwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmdWxsIGxlbmd0aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2FtcGxlIChtaW51cyBhbnkgb2Zmc2V0KVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqICBAbWV0aG9kIHN0YXJ0XG5cdFx0ICogIEBuYW1lIHN0YXJ0XG5cdFx0ICovXG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgb2Zmc2V0LCBkdXJhdGlvbikge1xuXHQgICAgICAgIC8vaWYgaXQncyBhIGxvb3AgdGhlIGRlZmF1bHQgb2Zmc2V0IGlzIHRoZSBsb29wc3RhcnQgcG9pbnRcblx0ICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCB0aGlzLl9sb29wU3RhcnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IG9mZnNldCBpcyAwXG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NvbXB1dGUgdGhlIHZhbHVlcyBpbiBzZWNvbmRzXG5cdCAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICB2YXIgY29tcHV0ZWREdXJhdGlvbiA9IFRvbmUuZGVmYXVsdEFyZyhkdXJhdGlvbiwgTWF0aC5tYXgodGhpcy5fYnVmZmVyLmR1cmF0aW9uIC0gb2Zmc2V0LCAwKSk7XG5cdCAgICAgICAgY29tcHV0ZWREdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGNvbXB1dGVkRHVyYXRpb24pO1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgZWxhcHNlZCB0aW1lIGNvdW50ZXJcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5zdGFydChzdGFydFRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgLy9tYWtlIHRoZSBzb3VyY2Vcblx0ICAgICAgICB2YXIgc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKHtcblx0ICAgICAgICAgICAgJ2J1ZmZlcic6IHRoaXMuX2J1ZmZlcixcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0aGlzLl9sb29wLFxuXHQgICAgICAgICAgICAnbG9vcFN0YXJ0JzogdGhpcy5fbG9vcFN0YXJ0LFxuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IHRoaXMuX2xvb3BFbmQsXG5cdCAgICAgICAgICAgICdvbmVuZGVkJzogdGhpcy5fb25Tb3VyY2VFbmQuYmluZCh0aGlzKSxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IHRoaXMuX3BsYXliYWNrUmF0ZSxcblx0ICAgICAgICAgICAgJ2ZhZGVJbic6IHRoaXMuZmFkZUluLFxuXHQgICAgICAgICAgICAnZmFkZU91dCc6IHRoaXMuZmFkZU91dFxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBsb29waW5nIHByb3BlcnRpZXNcblx0ICAgICAgICBpZiAoIXRoaXMuX2xvb3AgJiYgIXRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICAvL2lmIGl0J3Mgbm90IGxvb3BpbmcsIHNldCB0aGUgc3RhdGUgY2hhbmdlIGF0IHRoZSBlbmQgb2YgdGhlIHNhbXBsZVxuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHN0YXJ0VGltZSArIGNvbXB1dGVkRHVyYXRpb24gLyB0aGlzLl9wbGF5YmFja1JhdGUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2FkZCBpdCB0byB0aGUgYXJyYXkgb2YgYWN0aXZlIHNvdXJjZXNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnB1c2goc291cmNlKTtcblx0ICAgICAgICAvL3N0YXJ0IGl0XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvb3AgJiYgVG9uZS5pc1VuZGVmKGR1cmF0aW9uKSkge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RhcnQoc3RhcnRUaW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdGFydChzdGFydFRpbWUsIG9mZnNldCwgY29tcHV0ZWREdXJhdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHBsYXliYWNrLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIGFuZCB0aGVuIHJlc3RhcnQgdGhlIHBsYXllciBmcm9tIHRoZSBiZWdpbm5pbmcgKG9yIG9mZnNldClcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3N0YXJ0VGltZT1ub3ddIFdoZW4gdGhlIHBsYXllciBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtvZmZzZXQ9MF0gVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgc2FtcGxlIHNob3VsZCBwbGF5LiBJZiBubyBkdXJhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnaXZlbiwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmdWxsIGxlbmd0aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2FtcGxlIChtaW51cyBhbnkgb2Zmc2V0KVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUsIG9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZWVrIHRvIGEgc3BlY2lmaWMgdGltZSBpbiB0aGUgcGxheWVyJ3MgYnVmZmVyLiBJZiB0aGVcblx0XHQgKiAgc291cmNlIGlzIG5vIGxvbmdlciBwbGF5aW5nIGF0IHRoYXQgdGltZSwgaXQgd2lsbCBzdG9wLlxuXHRcdCAqICBJZiB5b3Ugc2VlayB0byBhIHRpbWUgdGhhdFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IG9mZnNldCBUaGUgdGltZSB0byBzZWVrIHRvLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSB0aW1lIFRoZSB0aW1lIGZvciB0aGUgc2VlayBldmVudCB0byBvY2N1ci5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RhcnQoMC4yKTtcblx0XHQgKiBzb3VyY2Uuc3RvcCgwLjQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLnNlZWsgPSBmdW5jdGlvbiAob2Zmc2V0LCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgICAgIC8vIGlmIGl0J3MgY3VycmVudGx5IHBsYXlpbmcsIHN0b3AgaXRcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICAgICAgLy9yZXN0YXJ0IGl0IGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGxvb3Agc3RhcnQgYW5kIGVuZC4gV2lsbCBvbmx5IGxvb3AgaWYgbG9vcCBpc1xuXHRcdCAqICBzZXQgdG8gdHJ1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBsb29wU3RhcnQgVGhlIGxvb3AgZW5kIHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBsb29wRW5kIFRoZSBsb29wIGVuZCB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9vcCAwLjEgc2Vjb25kcyBvZiB0aGUgZmlsZS5cblx0XHQgKiBwbGF5ZXIuc2V0TG9vcFBvaW50cygwLjIsIDAuMyk7XG5cdFx0ICogcGxheWVyLmxvb3AgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLnNldExvb3BQb2ludHMgPSBmdW5jdGlvbiAobG9vcFN0YXJ0LCBsb29wRW5kKSB7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBsb29wU3RhcnQ7XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgc3RhcnQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIGN1cnJlbnQgc291cmNlXG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2UubG9vcFN0YXJ0ID0gbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBlbmQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIGN1cnJlbnQgc291cmNlXG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2UubG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF1ZGlvIGJ1ZmZlciBiZWxvbmdpbmcgdG8gdGhlIHBsYXllci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdCAqIEBuYW1lIGJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVyIHNob3VsZCBsb29wIG9uY2UgaXQncyBvdmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb29wXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3A7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wKSB7XG5cdCAgICAgICAgICAgIC8vaWYgbm8gY2hhbmdlLCBkbyBub3RoaW5nXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wID09PSBsb29wKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fbG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAoIWxvb3ApIHtcblx0ICAgICAgICAgICAgICAgIC8vc3RvcCB0aGUgcGxheWJhY2sgb24gdGhlIG5leHQgY3ljbGVcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BBdE5leHRJdGVyYXRpb24obm93KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBuZXh0IHN0b3BFdmVudFxuXHQgICAgICAgICAgICAgICAgdmFyIHN0b3BFdmVudCA9IHRoaXMuX3N0YXRlLmdldE5leHRTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICBpZiAoc3RvcEV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmxvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbChzdG9wRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuY2FuY2VsKHN0b3BFdmVudC50aW1lKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhIHN0b3AgZXZlbnQgYXQgdGhlIG5leHQgZnVsbCBpdGVyYXRpb24uIFVzZWRcblx0XHQgKiAgZm9yIHNjaGVkdWxpbmcgc3RvcCB3aGVuIHRoZSBsb29wIHN0YXRlIG9yIHBsYXliYWNrUmF0ZSBjaGFuZ2VzXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIG5vdyAgVGhlIGN1cnJlbnQgdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9zdG9wQXROZXh0SXRlcmF0aW9uID0gZnVuY3Rpb24gKG5vdykge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShub3cpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdmFyIG5leHRTdG9wID0gdGhpcy5fc3RhdGUuZ2V0TmV4dFN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCwgbm93KTtcblx0ICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fZWxhcHNlZFRpbWUuZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbnMgPSBNYXRoLm1heChNYXRoLmNlaWwocG9zaXRpb24gLyB0aGlzLmJ1ZmZlci5kdXJhdGlvbiksIDEpO1xuXHQgICAgICAgICAgICB2YXIgc3RvcFRpbWUgPSB0aGlzLl9lbGFwc2VkVGltZS5nZXRUaW1lT2ZUaWNrKGl0ZXJhdGlvbnMgKiB0aGlzLmJ1ZmZlci5kdXJhdGlvbiwgbmV4dFN0b3AgPyBuZXh0U3RvcC50aW1lIC0gdGhpcy5zYW1wbGVUaW1lIDogSW5maW5pdHkpO1xuXHQgICAgICAgICAgICB0aGlzLnN0b3Aoc3RvcFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGxheWJhY2sgc3BlZWQuIDEgaXMgbm9ybWFsIHNwZWVkLiBUaGlzIGlzIG5vdCBhIHNpZ25hbCBiZWNhdXNlXG5cdFx0ICogU2FmYXJpIGFuZCBpT1MgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgcGxheWJhY2tSYXRlIGFzIGEgc2lnbmFsLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZShyYXRlLCBub3cpO1xuXHQgICAgICAgICAgICAvL2lmIGl0J3Mgbm90IGxvb3Bpbmdcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdG9wQXROZXh0SXRlcmF0aW9uKG5vdyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9zZXQgYWxsIHRoZSBzb3VyY2VzXG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2UucGxheWJhY2tSYXRlLnNldFZhbHVlQXRUaW1lKHJhdGUsIG5vdyk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gb2YgdGhlIGJ1ZmZlci4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgcG9zaXRpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdwb3NpdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShub3cpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgdGhpcy5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IHRoaXMuYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fZWxhcHNlZFRpbWUuZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiAlIGR1cmF0aW9uO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkaXJlY3Rpb24gdGhlIGJ1ZmZlciBzaG91bGQgcGxheSBpblxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSByZXZlcnNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAncmV2ZXJzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5yZXZlcnNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmV2KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlci5yZXZlcnNlID0gcmV2O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgYWxsIHRoZSBidWZmZXIgaXMgbG9hZGVkXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGlzcG9zZSBhbmQgZGlzY29ubmVjdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vZGlzY29ubmVjdCBhbGwgb2YgdGhlIHBsYXllcnNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGxheWVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGxheWVycyBjb21iaW5lcyBtdWx0aXBsZSBbVG9uZS5QbGF5ZXJdKFBsYXllcikgb2JqZWN0cy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gdXJscyBBbiBvYmplY3QgbWFwcGluZyBhIG5hbWUgdG8gYSB1cmwuXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb249fSBvbmxvYWQgVGhlIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIGFsbCBidWZmZXJzIGFyZSBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMgPSBmdW5jdGlvbiAodXJscykge1xuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3MsIFsnb25sb2FkJ10sIFRvbmUuUGxheWVycyk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvdXRwdXQgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogc291cmNlLnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAvL21ha2UgdGhlIG91dHB1dCBleHBsaWNpdGx5IHN0ZXJlb1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudCA9IDI7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLm91dHB1dC5vdXRwdXQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgLy9tdXRlIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjb250YWluZXIgb2YgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdFx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnMgPSB7fTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBsb2FkaW5nIGNvdW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBwcml2YXRlIGhvbGRlciBvZiB0aGUgZmFkZUluIHRpbWVcblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZhZGVJbiA9IG9wdGlvbnMuZmFkZUluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogcHJpdmF0ZSBob2xkZXIgb2YgdGhlIGZhZGVPdXQgdGltZVxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmFkZU91dCA9IG9wdGlvbnMuZmFkZU91dDtcblx0ICAgICAgICAvL2FkZCBhbGwgb2YgdGhlIHBsYXllcnNcblx0ICAgICAgICBmb3IgKHZhciBuYW1lIGluIHVybHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50Kys7XG5cdCAgICAgICAgICAgIHRoaXMuYWRkKG5hbWUsIHVybHNbbmFtZV0sIHRoaXMuX2J1ZmZlckxvYWRlZC5iaW5kKHRoaXMsIG9wdGlvbnMub25sb2FkKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGxheWVycywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlLFxuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2ZhZGVJbic6IDAsXG5cdCAgICAgICAgJ2ZhZGVPdXQnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEEgYnVmZmVyIHdhcyBsb2FkZWQuIGRlY3JlbWVudCB0aGUgY291bnRlci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFja1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5fYnVmZmVyTG9hZGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50LS07XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmdDb3VudCA9PT0gMCAmJiBjYWxsYmFjaykge1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHNvdXJjZS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZmFkZUluIHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgZmFkZUluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ2ZhZGVJbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZhZGVJbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGZhZGVJbikge1xuXHQgICAgICAgICAgICB0aGlzLl9mYWRlSW4gPSBmYWRlSW47XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgcGxheWVyLmZhZGVJbiA9IGZhZGVJbjtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZmFkZU91dCB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGZhZGVPdXRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnZmFkZU91dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZhZGVPdXQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmYWRlT3V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZhZGVPdXQgPSBmYWRlT3V0O1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHBsYXllci5mYWRlT3V0ID0gZmFkZU91dDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc3RhdGUgb2YgdGhlIHBsYXllcnMgb2JqZWN0LiBSZXR1cm5zIFwic3RhcnRlZFwiIGlmIGFueSBvZiB0aGUgcGxheWVycyBhcmUgcGxheWluZy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXJzI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQG5hbWUgc3RhdGVcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBwbGF5aW5nID0gZmFsc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgcGxheWluZyA9IHBsYXlpbmcgfHwgcGxheWVyLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICByZXR1cm4gcGxheWluZyA/IFRvbmUuU3RhdGUuU3RhcnRlZCA6IFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcnVlIGlmIHRoZSBidWZmZXJzIG9iamVjdCBoYXMgYSBidWZmZXIgYnkgdGhhdCBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgbmFtZSAgVGhlIGtleSBvciBpbmRleCBvZiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5cblx0XHQgKiAgQHJldHVybiAge0Jvb2xlYW59XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcnMuaGFzT3duUHJvcGVydHkobmFtZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCBhIHBsYXllciBieSBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBuYW1lICBUaGUgcGxheWVycyBuYW1lIGFzIGRlZmluZWQgaW5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnN0cnVjdG9yIG9iamVjdCBvciBgYWRkYCBtZXRob2QuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBsYXllcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5oYXMobmFtZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcnNbbmFtZV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlBsYXllcnM6IG5vIHBsYXllciBuYW1lZCAnICsgbmFtZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIHBsYXllcnNcblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcblx0XHQgKiBAcmV0dXJuIHtUb25lLlBsYXllcnN9ICAgICAgICAgICAgdGhpc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLl9mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgZm9yICh2YXIgcGxheWVyTmFtZSBpbiB0aGlzLl9wbGF5ZXJzKSB7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX3BsYXllcnNbcGxheWVyTmFtZV0sIHBsYXllck5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiBhbGwgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXJzI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0xvYWRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgaXNMb2FkZWQgPSBpc0xvYWRlZCAmJiBwbGF5ZXIubG9hZGVkO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIHBsYXllciBieSBuYW1lIGFuZCB1cmwgdG8gdGhlIFBsYXllcnNcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBuYW1lICAgICAgQSB1bmlxdWUgbmFtZSB0byBnaXZlIHRoZSBwbGF5ZXJcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfFRvbmUuQnVmZmVyfEF1ZGlvYnVmZmVyfSAgdXJsICBFaXRoZXIgdGhlIHVybCBvZiB0aGUgYnVmZXIsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhZGRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobmFtZSwgdXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnNbbmFtZV0gPSBuZXcgVG9uZS5QbGF5ZXIodXJsLCBjYWxsYmFjaykuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcGxheWVyc1tuYW1lXS5mYWRlSW4gPSB0aGlzLl9mYWRlSW47XG5cdCAgICAgICAgdGhpcy5fcGxheWVyc1tuYW1lXS5mYWRlT3V0ID0gdGhpcy5fZmFkZU91dDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIGFsbCBvZiB0aGUgcGxheWVycyBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0byBzdG9wIGFsbCBvZiB0aGUgcGxheWVycy5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlBsYXllcnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuc3RvcEFsbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgIHBsYXllci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEaXNwb3NlIGFuZCBkaXNjb25uZWN0LlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBsYXllcnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgcGxheWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QbGF5ZXJzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuVXNlck1lZGlhIHVzZXMgTWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSB0byBvcGVuIHVwXG5cdFx0ICogICAgICAgICAgYW5kIGV4dGVybmFsIG1pY3JvcGhvbmUgb3IgYXVkaW8gaW5wdXQuIENoZWNrXG5cdFx0ICogICAgICAgICAgW01lZGlhRGV2aWNlcyBBUEkgU3VwcG9ydF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL01lZGlhRGV2aWNlcy9nZXRVc2VyTWVkaWEpXG5cdFx0ICogICAgICAgICAgdG8gc2VlIHdoaWNoIGJyb3dzZXJzIGFyZSBzdXBwb3J0ZWQuIEFjY2VzcyB0byBhbiBleHRlcm5hbCBpbnB1dFxuXHRcdCAqICAgICAgICAgIGlzIGxpbWl0ZWQgdG8gc2VjdXJlIChIVFRQUykgY29ubmVjdGlvbnMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVscz19IHZvbHVtZSBUaGUgbGV2ZWwgb2YgdGhlIGlucHV0XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9saXN0IHRoZSBpbnB1dHMgYW5kIG9wZW4gdGhlIHRoaXJkIG9uZVxuXHRcdCAqIHZhciBtb3R1ID0gbmV3IFRvbmUuVXNlck1lZGlhKCk7XG5cdFx0ICpcblx0XHQgKiAvL29wZW5pbmcgdGhlIGlucHV0IGFza3MgdGhlIHVzZXIgdG8gYWN0aXZhdGUgdGhlaXIgbWljXG5cdFx0ICogbW90dS5vcGVuKCkudGhlbihmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly9wcm9taXNlIHJlc29sdmVzIHdoZW4gaW5wdXQgaXMgYXZhaWxhYmxlXG5cdFx0ICogfSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3ZvbHVtZSddLCBUb25lLlVzZXJNZWRpYSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgTWVkaWFTdHJlYW1Ob2RlXG5cdFx0XHQgKiAgQHR5cGUge01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1lZGlhIHN0cmVhbSBjcmVhdGVkIGJ5IGdldFVzZXJNZWRpYS5cblx0XHRcdCAqICBAdHlwZSB7TG9jYWxNZWRpYVN0cmVhbX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RyZWFtID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3BlbiBkZXZpY2Vcblx0XHRcdCAqICBAdHlwZSAge01lZGlhRGV2aWNlSW5mb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGV2aWNlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IHZvbHVtZSBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIGlucHV0LnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Vc2VyTWVkaWEsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBPcGVuIHRoZSBtZWRpYSBzdHJlYW0uIElmIGEgc3RyaW5nIGlzIHBhc3NlZCBpbiwgaXQgaXMgYXNzdW1lZFxuXHRcdCAqICB0byBiZSB0aGUgbGFiZWwgb3IgaWQgb2YgdGhlIHN0cmVhbSwgaWYgYSBudW1iZXIgaXMgcGFzc2VkIGluLFxuXHRcdCAqICBpdCBpcyB0aGUgaW5wdXQgbnVtYmVyIG9mIHRoZSBzdHJlYW0uXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9IFtsYWJlbE9ySWQ9XCJkZWZhdWx0XCJdIFRoZSBsYWJlbCBvciBpZCBvZiB0aGUgYXVkaW8gaW5wdXQgbWVkaWEgZGV2aWNlLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2l0aCBubyBhcmd1bWVudCwgdGhlIGRlZmF1bHQgc3RyZWFtIGlzIG9wZW5lZC5cblx0XHQgKiAgQHJldHVybiB7UHJvbWlzZX0gVGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgc3RyZWFtIGlzIG9wZW4uXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uIChsYWJlbE9ySWQpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5Vc2VyTWVkaWEuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oZnVuY3Rpb24gKGRldmljZXMpIHtcblx0ICAgICAgICAgICAgdmFyIGRldmljZTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIobGFiZWxPcklkKSkge1xuXHQgICAgICAgICAgICAgICAgZGV2aWNlID0gZGV2aWNlc1tsYWJlbE9ySWRdO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZGV2aWNlID0gZGV2aWNlcy5maW5kKGZ1bmN0aW9uIChkZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlLmxhYmVsID09PSBsYWJlbE9ySWQgfHwgZGV2aWNlLmRldmljZUlkID09PSBsYWJlbE9ySWQ7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIC8vZGlkbid0IGZpbmQgYSBtYXRjaGluZyBkZXZpY2Vcblx0ICAgICAgICAgICAgICAgIGlmICghZGV2aWNlICYmIGRldmljZXMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZXNbMF07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFkZXZpY2UgJiYgVG9uZS5pc0RlZmluZWQobGFiZWxPcklkKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5Vc2VyTWVkaWE6IG5vIG1hdGNoaW5nIGRldmljZTogJyArIGxhYmVsT3JJZCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZGV2aWNlID0gZGV2aWNlO1xuXHQgICAgICAgICAgICAvL2RvIGdldFVzZXJNZWRpYVxuXHQgICAgICAgICAgICB2YXIgY29uc3RyYWludHMgPSB7XG5cdCAgICAgICAgICAgICAgICBhdWRpbzoge1xuXHQgICAgICAgICAgICAgICAgICAgICdlY2hvQ2FuY2VsbGF0aW9uJzogZmFsc2UsXG5cdCAgICAgICAgICAgICAgICAgICAgJ3NhbXBsZVJhdGUnOiB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICBjb25zdHJhaW50cy5hdWRpby5kZXZpY2VJZCA9IGRldmljZS5kZXZpY2VJZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoY29uc3RyYWludHMpLnRoZW4oZnVuY3Rpb24gKHN0cmVhbSkge1xuXHQgICAgICAgICAgICAgICAgLy9zdGFydCBhIG5ldyBzb3VyY2Ugb25seSBpZiB0aGUgcHJldmlvdXMgb25lIGlzIGNsb3NlZFxuXHQgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9zdHJlYW0pIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG5cdCAgICAgICAgICAgICAgICAgICAgLy9XcmFwIGEgTWVkaWFTdHJlYW1Tb3VyY2VOb2RlIGFyb3VuZCB0aGUgbGl2ZSBpbnB1dCBzdHJlYW0uXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0gPSB0aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2Uoc3RyZWFtKTtcblx0ICAgICAgICAgICAgICAgICAgICAvL0Nvbm5lY3QgdGhlIE1lZGlhU3RyZWFtU291cmNlTm9kZSB0byBhIGdhdGUgZ2FpbiBub2RlXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0uY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbG9zZSB0aGUgbWVkaWEgc3RyZWFtXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuVXNlck1lZGlhfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0cmVhbSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdHJlYW0uZ2V0QXVkaW9UcmFja3MoKS5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuXHQgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RyZWFtID0gbnVsbDtcblx0ICAgICAgICAgICAgLy9yZW1vdmUgdGhlIG9sZCBtZWRpYSBzdHJlYW1cblx0ICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2RldmljZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggdGhlIGxpc3Qgb2YgYXVkaW8gaW5wdXQgZGV2aWNlcyBhdmFpbGFibGUuXG5cdFx0ICogIEByZXR1cm4ge1Byb21pc2V9IFRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgZGV2aWNlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5Vc2VyTWVkaWEuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oZnVuY3Rpb24oZGV2aWNlcyl7XG5cdFx0ICogXHRjb25zb2xlLmxvZyhkZXZpY2VzKVxuXHRcdCAqIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5lbnVtZXJhdGVEZXZpY2VzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uIChkZXZpY2VzKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBkZXZpY2VzLmZpbHRlcihmdW5jdGlvbiAoZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlLmtpbmQgPT09ICdhdWRpb2lucHV0Jztcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIFwic3RhcnRlZFwiIHdoZW4gdGhlIG1pY3JvcGhvbmUgaXMgb3BlblxuXHRcdCAqICBhbmQgXCJzdG9wcGVkXCIgd2hlbiB0aGUgbWljIGlzIGNsb3NlZC5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW0gJiYgdGhpcy5fc3RyZWFtLmFjdGl2ZSA/IFRvbmUuU3RhdGUuU3RhcnRlZCA6IFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0UmV0dXJucyBhbiBpZGVudGlmaWVyIGZvciB0aGUgcmVwcmVzZW50ZWQgZGV2aWNlIHRoYXQgaXNcblx0XHQgKiBcdHBlcnNpc3RlZCBhY3Jvc3Mgc2Vzc2lvbnMuIEl0IGlzIHVuLWd1ZXNzYWJsZSBieSBvdGhlciBhcHBsaWNhdGlvbnMgYW5kXG5cdFx0ICogXHR1bmlxdWUgdG8gdGhlIG9yaWdpbiBvZiB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4gSXQgaXMgcmVzZXQgd2hlbiB0aGVcblx0XHQgKiBcdHVzZXIgY2xlYXJzIGNvb2tpZXMgKGZvciBQcml2YXRlIEJyb3dzaW5nLCBhIGRpZmZlcmVudCBpZGVudGlmaWVyIGlzXG5cdFx0ICogXHR1c2VkIHRoYXQgaXMgbm90IHBlcnNpc3RlZCBhY3Jvc3Mgc2Vzc2lvbnMpLiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZVxuXHRcdCAqIFx0ZGV2aWNlIGlzIG5vdCBvcGVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBkZXZpY2VJZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ2RldmljZUlkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlLmRldmljZUlkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFJldHVybnMgYSBncm91cCBpZGVudGlmaWVyLiBUd28gZGV2aWNlcyBoYXZlIHRoZVxuXHRcdCAqIFx0c2FtZSBncm91cCBpZGVudGlmaWVyIGlmIHRoZXkgYmVsb25nIHRvIHRoZSBzYW1lIHBoeXNpY2FsIGRldmljZS5cblx0XHQgKiBcdFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlIGRldmljZSBpcyBub3Qgb3Blbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgZ3JvdXBJZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ2dyb3VwSWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2UuZ3JvdXBJZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRSZXR1cm5zIGEgbGFiZWwgZGVzY3JpYmluZyB0aGlzIGRldmljZSAoZm9yIGV4YW1wbGUgXCJCdWlsdC1pbiBNaWNyb3Bob25lXCIpLlxuXHRcdCAqIFx0UmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgZGV2aWNlIGlzIG5vdCBvcGVuIG9yIGxhYmVsIGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBcdGJlY2F1c2Ugb2YgcGVybWlzc2lvbnMuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIGdyb3VwSWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdsYWJlbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZS5sYWJlbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHVzZXJNZWRpYS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVXNlck1lZGlhfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY2xvc2UoKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSWYgZ2V0VXNlck1lZGlhIGlzIHN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci5cblx0XHQgKiAgQHR5cGUgIHtCb29sZWFufVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIHN1cHBvcnRlZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLCAnc3VwcG9ydGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5pc0RlZmluZWQobmF2aWdhdG9yLm1lZGlhRGV2aWNlcykgJiYgVG9uZS5pc0Z1bmN0aW9uKG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLlVzZXJNZWRpYTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk1pZGkgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgVGltZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBUb25lLk1pZGkgY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCB0aGUgYG5ld2Aga2V5d29yZC4gVG9uZS5NaWRpIGNhbiBiZSBwYXNzZWRcblx0XHQgKiAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBvZiBhbnkgbWV0aG9kIHdoaWNoIHRha2VzIHRpbWUgYXMgYW4gYXJndW1lbnQuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5GcmVxdWVuY3l9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdCA9IFRvbmUuTWlkaShcIjRuXCIpOy8vYSBxdWFydGVyIG5vdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLk1pZGkpIHtcblx0ICAgICAgICAgICAgVG9uZS5GcmVxdWVuY3kuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuTWlkaSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRpLCBUb25lLkZyZXF1ZW5jeSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAnbWlkaSc7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBmcmVxdWVuY3kgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fZnJlcXVlbmN5VG9Vbml0cy5jYWxsKHRoaXMsIGZyZXEpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fdGlja3NUb1VuaXRzLmNhbGwodGhpcywgdGlja3MpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMgPSBmdW5jdGlvbiAoYmVhdHMpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cy5jYWxsKHRoaXMsIGJlYXRzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMuY2FsbCh0aGlzLCBzZWNvbmRzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBhcyBhIE1JREkgbm90ZVxuXHRcdCAqICBAcmV0dXJuICB7TUlESX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLk1pZGkoNjApLnRvTWlkaSgpOyAvLzYwXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLnRvTWlkaSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBhcyBhIE1JREkgbm90ZVxuXHRcdCAqICBAcmV0dXJuICB7TUlESX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLk1pZGkoNjApLnRvTWlkaSgpOyAvLzYwXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5tdG9mKHRoaXMudG9NaWRpKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmFuc3Bvc2VzIHRoZSBmcmVxdWVuY3kgYnkgdGhlIGdpdmVuIG51bWJlciBvZiBzZW1pdG9uZXMuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsfSAgaW50ZXJ2YWxcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRnJlcXVlbmN5fSBBIG5ldyB0cmFuc3Bvc2VkIGZyZXF1ZW5jeVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQTRcIikudHJhbnNwb3NlKDMpOyAvL1wiQzVcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS50cmFuc3Bvc2UgPSBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy50b01pZGkoKSArIGludGVydmFsKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NaWRpO1xuXHR9KTtcblx0XG5cdHJldHVybiBUb25lO1xufSkpOyIsIi8qISBwNS5qcyB2MC43LjIgU2VwdGVtYmVyIDAyLCAyMDE4ICovICFmdW5jdGlvbihhKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1hKCk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLGEpO2Vsc2V7dmFyIGI7Yj1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMsYi5wNT1hKCl9fShmdW5jdGlvbigpe3ZhciBhO3JldHVybiBmdW5jdGlvbiBhKGIsYyxkKXtmdW5jdGlvbiBlKGcsaCl7aWYoIWNbZ10pe2lmKCFiW2ddKXt2YXIgaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dmFyIGo9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitnK1wiJ1wiKTt0aHJvdyBqLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsan12YXIgaz1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoay5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoY3x8YSl9LGssay5leHBvcnRzLGEsYixjLGQpfXJldHVybiBjW2ddLmV4cG9ydHN9Zm9yKHZhciBmPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsZz0wO2c8ZC5sZW5ndGg7ZysrKWUoZFtnXSk7cmV0dXJuIGV9KHsxOltmdW5jdGlvbihhLGIsYyl7IWZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYSl7dmFyIGI9YS5jaGFyQ29kZUF0KDApO3JldHVybiBiPT09Znx8Yj09PWs/NjI6Yj09PWd8fGI9PT1sPzYzOmI8aD8tMTpiPGgrMTA/Yi1oKzI2KzI2OmI8aisyNj9iLWo6YjxpKzI2P2ItaSsyNjp2b2lkIDB9ZnVuY3Rpb24gYyhhKXtmdW5jdGlvbiBjKGEpe2pbbCsrXT1hfXZhciBkLGYsZyxoLGksajtpZihhLmxlbmd0aCU0PjApdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNFwiKTt2YXIgaz1hLmxlbmd0aDtpPVwiPVwiPT09YS5jaGFyQXQoay0yKT8yOlwiPVwiPT09YS5jaGFyQXQoay0xKT8xOjAsaj1uZXcgZSgzKmEubGVuZ3RoLzQtaSksZz1pPjA/YS5sZW5ndGgtNDphLmxlbmd0aDt2YXIgbD0wO2ZvcihkPTAsZj0wO2Q8ZztkKz00LGYrPTMpaD1iKGEuY2hhckF0KGQpKTw8MTh8YihhLmNoYXJBdChkKzEpKTw8MTJ8YihhLmNoYXJBdChkKzIpKTw8NnxiKGEuY2hhckF0KGQrMykpLGMoKDE2NzExNjgwJmgpPj4xNiksYygoNjUyODAmaCk+PjgpLGMoMjU1JmgpO3JldHVybiAyPT09aT8oaD1iKGEuY2hhckF0KGQpKTw8MnxiKGEuY2hhckF0KGQrMSkpPj40LGMoMjU1JmgpKToxPT09aSYmKGg9YihhLmNoYXJBdChkKSk8PDEwfGIoYS5jaGFyQXQoZCsxKSk8PDR8YihhLmNoYXJBdChkKzIpKT4+MixjKGg+PjgmMjU1KSxjKDI1NSZoKSksan1mdW5jdGlvbiBkKGEpe2Z1bmN0aW9uIGIoYSl7cmV0dXJuXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIuY2hhckF0KGEpfWZ1bmN0aW9uIGMoYSl7cmV0dXJuIGIoYT4+MTgmNjMpK2IoYT4+MTImNjMpK2IoYT4+NiY2MykrYig2MyZhKX12YXIgZCxlLGYsZz1hLmxlbmd0aCUzLGg9XCJcIjtmb3IoZD0wLGY9YS5sZW5ndGgtZztkPGY7ZCs9MyllPShhW2RdPDwxNikrKGFbZCsxXTw8OCkrYVtkKzJdLGgrPWMoZSk7c3dpdGNoKGcpe2Nhc2UgMTplPWFbYS5sZW5ndGgtMV0saCs9YihlPj4yKSxoKz1iKGU8PDQmNjMpLGgrPVwiPT1cIjticmVhaztjYXNlIDI6ZT0oYVthLmxlbmd0aC0yXTw8OCkrYVthLmxlbmd0aC0xXSxoKz1iKGU+PjEwKSxoKz1iKGU+PjQmNjMpLGgrPWIoZTw8MiY2MyksaCs9XCI9XCJ9cmV0dXJuIGh9dmFyIGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxmPVwiK1wiLmNoYXJDb2RlQXQoMCksZz1cIi9cIi5jaGFyQ29kZUF0KDApLGg9XCIwXCIuY2hhckNvZGVBdCgwKSxpPVwiYVwiLmNoYXJDb2RlQXQoMCksaj1cIkFcIi5jaGFyQ29kZUF0KDApLGs9XCItXCIuY2hhckNvZGVBdCgwKSxsPVwiX1wiLmNoYXJDb2RlQXQoMCk7YS50b0J5dGVBcnJheT1jLGEuZnJvbUJ5dGVBcnJheT1kfSh2b2lkIDA9PT1jP3RoaXMuYmFzZTY0anM9e306Yyl9LHt9XSwyOltmdW5jdGlvbihhLGIsYyl7fSx7fV0sMzpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihiKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKCl7ZnVuY3Rpb24gYSgpe310cnl7dmFyIGI9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIGIuZm9vPWZ1bmN0aW9uKCl7cmV0dXJuIDQyfSxiLmNvbnN0cnVjdG9yPWEsNDI9PT1iLmZvbygpJiZiLmNvbnN0cnVjdG9yPT09YSYmXCJmdW5jdGlvblwiPT10eXBlb2YgYi5zdWJhcnJheSYmMD09PWIuc3ViYXJyYXkoMSwxKS5ieXRlTGVuZ3RofWNhdGNoKGEpe3JldHVybiExfX1mdW5jdGlvbiBlKCl7cmV0dXJuIGYuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gZihhKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGY/KGYuVFlQRURfQVJSQVlfU1VQUE9SVHx8KHRoaXMubGVuZ3RoPTAsdGhpcy5wYXJlbnQ9dm9pZCAwKSxcIm51bWJlclwiPT10eXBlb2YgYT9nKHRoaXMsYSk6XCJzdHJpbmdcIj09dHlwZW9mIGE/aCh0aGlzLGEsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTpcInV0ZjhcIik6aSh0aGlzLGEpKTphcmd1bWVudHMubGVuZ3RoPjE/bmV3IGYoYSxhcmd1bWVudHNbMV0pOm5ldyBmKGEpfWZ1bmN0aW9uIGcoYSxiKXtpZihhPXAoYSxiPDA/MDowfHEoYikpLCFmLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciBjPTA7YzxiO2MrKylhW2NdPTA7cmV0dXJuIGF9ZnVuY3Rpb24gaChhLGIsYyl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGMmJlwiXCIhPT1jfHwoYz1cInV0ZjhcIiksYT1wKGEsMHxzKGIsYykpLGEud3JpdGUoYixjKSxhfWZ1bmN0aW9uIGkoYSxiKXtpZihmLmlzQnVmZmVyKGIpKXJldHVybiBqKGEsYik7aWYoWShiKSlyZXR1cm4gayhhLGIpO2lmKG51bGw9PWIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm11c3Qgc3RhcnQgd2l0aCBudW1iZXIsIGJ1ZmZlciwgYXJyYXkgb3Igc3RyaW5nXCIpO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlcil7aWYoYi5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gbChhLGIpO2lmKGIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gbShhLGIpfXJldHVybiBiLmxlbmd0aD9uKGEsYik6byhhLGIpfWZ1bmN0aW9uIGooYSxiKXt2YXIgYz0wfHEoYi5sZW5ndGgpO3JldHVybiBhPXAoYSxjKSxiLmNvcHkoYSwwLDAsYyksYX1mdW5jdGlvbiBrKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTthPXAoYSxjKTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlhW2RdPTI1NSZiW2RdO3JldHVybiBhfWZ1bmN0aW9uIGwoYSxiKXt2YXIgYz0wfHEoYi5sZW5ndGgpO2E9cChhLGMpO2Zvcih2YXIgZD0wO2Q8YztkKz0xKWFbZF09MjU1JmJbZF07cmV0dXJuIGF9ZnVuY3Rpb24gbShhLGIpe3JldHVybiBmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGIuYnl0ZUxlbmd0aCxhPWYuX2F1Z21lbnQobmV3IFVpbnQ4QXJyYXkoYikpKTphPWwoYSxuZXcgVWludDhBcnJheShiKSksYX1mdW5jdGlvbiBuKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTthPXAoYSxjKTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlhW2RdPTI1NSZiW2RdO3JldHVybiBhfWZ1bmN0aW9uIG8oYSxiKXt2YXIgYyxkPTA7XCJCdWZmZXJcIj09PWIudHlwZSYmWShiLmRhdGEpJiYoYz1iLmRhdGEsZD0wfHEoYy5sZW5ndGgpKSxhPXAoYSxkKTtmb3IodmFyIGU9MDtlPGQ7ZSs9MSlhW2VdPTI1NSZjW2VdO3JldHVybiBhfWZ1bmN0aW9uIHAoYSxiKXtyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyhhPWYuX2F1Z21lbnQobmV3IFVpbnQ4QXJyYXkoYikpLGEuX19wcm90b19fPWYucHJvdG90eXBlKTooYS5sZW5ndGg9YixhLl9pc0J1ZmZlcj0hMCksMCE9PWImJmI8PWYucG9vbFNpemU+Pj4xJiYoYS5wYXJlbnQ9WiksYX1mdW5jdGlvbiBxKGEpe2lmKGE+PWUoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHhcIitlKCkudG9TdHJpbmcoMTYpK1wiIGJ5dGVzXCIpO3JldHVybiAwfGF9ZnVuY3Rpb24gcihhLGIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcihhLGIpO3ZhciBjPW5ldyBmKGEsYik7cmV0dXJuIGRlbGV0ZSBjLnBhcmVudCxjfWZ1bmN0aW9uIHMoYSxiKXtcInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9XCJcIithKTt2YXIgYz1hLmxlbmd0aDtpZigwPT09YylyZXR1cm4gMDtmb3IodmFyIGQ9ITE7Oylzd2l0Y2goYil7Y2FzZVwiYXNjaWlcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJyYXdcIjpjYXNlXCJyYXdzXCI6cmV0dXJuIGM7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIFIoYSkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAyKmM7Y2FzZVwiaGV4XCI6cmV0dXJuIGM+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBVKGEpLmxlbmd0aDtkZWZhdWx0OmlmKGQpcmV0dXJuIFIoYSkubGVuZ3RoO2I9KFwiXCIrYikudG9Mb3dlckNhc2UoKSxkPSEwfX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD0hMTtpZihifD0wLGM9dm9pZCAwPT09Y3x8Yz09PTEvMD90aGlzLmxlbmd0aDowfGMsYXx8KGE9XCJ1dGY4XCIpLGI8MCYmKGI9MCksYz50aGlzLmxlbmd0aCYmKGM9dGhpcy5sZW5ndGgpLGM8PWIpcmV0dXJuXCJcIjtmb3IoOzspc3dpdGNoKGEpe2Nhc2VcImhleFwiOnJldHVybiBGKHRoaXMsYixjKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gQih0aGlzLGIsYyk7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gRCh0aGlzLGIsYyk7Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIEUodGhpcyxiLGMpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBBKHRoaXMsYixjKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gRyh0aGlzLGIsYyk7ZGVmYXVsdDppZihkKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIithKTthPShhK1wiXCIpLnRvTG93ZXJDYXNlKCksZD0hMH19ZnVuY3Rpb24gdShhLGIsYyxkKXtjPU51bWJlcihjKXx8MDt2YXIgZT1hLmxlbmd0aC1jO2Q/KGQ9TnVtYmVyKGQpKT5lJiYoZD1lKTpkPWU7dmFyIGY9Yi5sZW5ndGg7aWYoZiUyIT0wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGV4IHN0cmluZ1wiKTtkPmYvMiYmKGQ9Zi8yKTtmb3IodmFyIGc9MDtnPGQ7ZysrKXt2YXIgaD1wYXJzZUludChiLnN1YnN0cigyKmcsMiksMTYpO2lmKGlzTmFOKGgpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGV4IHN0cmluZ1wiKTthW2MrZ109aH1yZXR1cm4gZ31mdW5jdGlvbiB2KGEsYixjLGQpe3JldHVybiBWKFIoYixhLmxlbmd0aC1jKSxhLGMsZCl9ZnVuY3Rpb24gdyhhLGIsYyxkKXtyZXR1cm4gVihTKGIpLGEsYyxkKX1mdW5jdGlvbiB4KGEsYixjLGQpe3JldHVybiB3KGEsYixjLGQpfWZ1bmN0aW9uIHkoYSxiLGMsZCl7cmV0dXJuIFYoVShiKSxhLGMsZCl9ZnVuY3Rpb24geihhLGIsYyxkKXtyZXR1cm4gVihUKGIsYS5sZW5ndGgtYyksYSxjLGQpfWZ1bmN0aW9uIEEoYSxiLGMpe3JldHVybiAwPT09YiYmYz09PWEubGVuZ3RoP1cuZnJvbUJ5dGVBcnJheShhKTpXLmZyb21CeXRlQXJyYXkoYS5zbGljZShiLGMpKX1mdW5jdGlvbiBCKGEsYixjKXtjPU1hdGgubWluKGEubGVuZ3RoLGMpO2Zvcih2YXIgZD1bXSxlPWI7ZTxjOyl7dmFyIGY9YVtlXSxnPW51bGwsaD1mPjIzOT80OmY+MjIzPzM6Zj4xOTE/MjoxO2lmKGUraDw9Yyl7dmFyIGksaixrLGw7c3dpdGNoKGgpe2Nhc2UgMTpmPDEyOCYmKGc9Zik7YnJlYWs7Y2FzZSAyOmk9YVtlKzFdLDEyOD09KDE5MiZpKSYmKGw9KDMxJmYpPDw2fDYzJmkpPjEyNyYmKGc9bCk7YnJlYWs7Y2FzZSAzOmk9YVtlKzFdLGo9YVtlKzJdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJmopJiYobD0oMTUmZik8PDEyfCg2MyZpKTw8Nnw2MyZqKT4yMDQ3JiYobDw1NTI5Nnx8bD41NzM0MykmJihnPWwpO2JyZWFrO2Nhc2UgNDppPWFbZSsxXSxqPWFbZSsyXSxrPWFbZSszXSwxMjg9PSgxOTImaSkmJjEyOD09KDE5MiZqKSYmMTI4PT0oMTkyJmspJiYobD0oMTUmZik8PDE4fCg2MyZpKTw8MTJ8KDYzJmopPDw2fDYzJmspPjY1NTM1JiZsPDExMTQxMTImJihnPWwpfX1udWxsPT09Zz8oZz02NTUzMyxoPTEpOmc+NjU1MzUmJihnLT02NTUzNixkLnB1c2goZz4+PjEwJjEwMjN8NTUyOTYpLGc9NTYzMjB8MTAyMyZnKSxkLnB1c2goZyksZSs9aH1yZXR1cm4gQyhkKX1mdW5jdGlvbiBDKGEpe3ZhciBiPWEubGVuZ3RoO2lmKGI8PSQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGEpO2Zvcih2YXIgYz1cIlwiLGQ9MDtkPGI7KWMrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGEuc2xpY2UoZCxkKz0kKSk7cmV0dXJuIGN9ZnVuY3Rpb24gRChhLGIsYyl7dmFyIGQ9XCJcIjtjPU1hdGgubWluKGEubGVuZ3RoLGMpO2Zvcih2YXIgZT1iO2U8YztlKyspZCs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmYVtlXSk7cmV0dXJuIGR9ZnVuY3Rpb24gRShhLGIsYyl7dmFyIGQ9XCJcIjtjPU1hdGgubWluKGEubGVuZ3RoLGMpO2Zvcih2YXIgZT1iO2U8YztlKyspZCs9U3RyaW5nLmZyb21DaGFyQ29kZShhW2VdKTtyZXR1cm4gZH1mdW5jdGlvbiBGKGEsYixjKXt2YXIgZD1hLmxlbmd0aDsoIWJ8fGI8MCkmJihiPTApLCghY3x8YzwwfHxjPmQpJiYoYz1kKTtmb3IodmFyIGU9XCJcIixmPWI7ZjxjO2YrKyllKz1RKGFbZl0pO3JldHVybiBlfWZ1bmN0aW9uIEcoYSxiLGMpe2Zvcih2YXIgZD1hLnNsaWNlKGIsYyksZT1cIlwiLGY9MDtmPGQubGVuZ3RoO2YrPTIpZSs9U3RyaW5nLmZyb21DaGFyQ29kZShkW2ZdKzI1NipkW2YrMV0pO3JldHVybiBlfWZ1bmN0aW9uIEgoYSxiLGMpe2lmKGElMSE9MHx8YTwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwib2Zmc2V0IGlzIG5vdCB1aW50XCIpO2lmKGErYj5jKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aFwiKX1mdW5jdGlvbiBJKGEsYixjLGQsZSxnKXtpZighZi5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYnVmZmVyIG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2VcIik7aWYoYj5lfHxiPGcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ2YWx1ZSBpcyBvdXQgb2YgYm91bmRzXCIpO2lmKGMrZD5hLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBKKGEsYixjLGQpe2I8MCYmKGI9NjU1MzUrYisxKTtmb3IodmFyIGU9MCxmPU1hdGgubWluKGEubGVuZ3RoLWMsMik7ZTxmO2UrKylhW2MrZV09KGImMjU1PDw4KihkP2U6MS1lKSk+Pj44KihkP2U6MS1lKX1mdW5jdGlvbiBLKGEsYixjLGQpe2I8MCYmKGI9NDI5NDk2NzI5NStiKzEpO2Zvcih2YXIgZT0wLGY9TWF0aC5taW4oYS5sZW5ndGgtYyw0KTtlPGY7ZSsrKWFbYytlXT1iPj4+OCooZD9lOjMtZSkmMjU1fWZ1bmN0aW9uIEwoYSxiLGMsZCxlLGYpe2lmKGI+ZXx8YjxmKXRocm93IG5ldyBSYW5nZUVycm9yKFwidmFsdWUgaXMgb3V0IG9mIGJvdW5kc1wiKTtpZihjK2Q+YS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYoYzwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwiaW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIE0oYSxiLGMsZCxlKXtyZXR1cm4gZXx8TChhLGIsYyw0LDMuNDAyODIzNDY2Mzg1Mjg4NmUzOCwtMy40MDI4MjM0NjYzODUyODg2ZTM4KSxYLndyaXRlKGEsYixjLGQsMjMsNCksYys0fWZ1bmN0aW9uIE4oYSxiLGMsZCxlKXtyZXR1cm4gZXx8TChhLGIsYyw4LDEuNzk3NjkzMTM0ODYyMzE1N2UzMDgsLTEuNzk3NjkzMTM0ODYyMzE1N2UzMDgpLFgud3JpdGUoYSxiLGMsZCw1Miw4KSxjKzh9ZnVuY3Rpb24gTyhhKXtpZihhPVAoYSkucmVwbGFjZShhYSxcIlwiKSxhLmxlbmd0aDwyKXJldHVyblwiXCI7Zm9yKDthLmxlbmd0aCU0IT0wOylhKz1cIj1cIjtyZXR1cm4gYX1mdW5jdGlvbiBQKGEpe3JldHVybiBhLnRyaW0/YS50cmltKCk6YS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLFwiXCIpfWZ1bmN0aW9uIFEoYSl7cmV0dXJuIGE8MTY/XCIwXCIrYS50b1N0cmluZygxNik6YS50b1N0cmluZygxNil9ZnVuY3Rpb24gUihhLGIpe2I9Ynx8MS8wO2Zvcih2YXIgYyxkPWEubGVuZ3RoLGU9bnVsbCxmPVtdLGc9MDtnPGQ7ZysrKXtpZigoYz1hLmNoYXJDb2RlQXQoZykpPjU1Mjk1JiZjPDU3MzQ0KXtpZighZSl7aWYoYz41NjMxOSl7KGItPTMpPi0xJiZmLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKGcrMT09PWQpeyhiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1lPWM7Y29udGludWV9aWYoYzw1NjMyMCl7KGItPTMpPi0xJiZmLnB1c2goMjM5LDE5MSwxODkpLGU9Yztjb250aW51ZX1jPTY1NTM2KyhlLTU1Mjk2PDwxMHxjLTU2MzIwKX1lbHNlIGUmJihiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtpZihlPW51bGwsYzwxMjgpe2lmKChiLT0xKTwwKWJyZWFrO2YucHVzaChjKX1lbHNlIGlmKGM8MjA0OCl7aWYoKGItPTIpPDApYnJlYWs7Zi5wdXNoKGM+PjZ8MTkyLDYzJmN8MTI4KX1lbHNlIGlmKGM8NjU1MzYpe2lmKChiLT0zKTwwKWJyZWFrO2YucHVzaChjPj4xMnwyMjQsYz4+NiY2M3wxMjgsNjMmY3wxMjgpfWVsc2V7aWYoIShjPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29kZSBwb2ludFwiKTtpZigoYi09NCk8MClicmVhaztmLnB1c2goYz4+MTh8MjQwLGM+PjEyJjYzfDEyOCxjPj42JjYzfDEyOCw2MyZjfDEyOCl9fXJldHVybiBmfWZ1bmN0aW9uIFMoYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyliLnB1c2goMjU1JmEuY2hhckNvZGVBdChjKSk7cmV0dXJuIGJ9ZnVuY3Rpb24gVChhLGIpe2Zvcih2YXIgYyxkLGUsZj1bXSxnPTA7ZzxhLmxlbmd0aCYmISgoYi09Mik8MCk7ZysrKWM9YS5jaGFyQ29kZUF0KGcpLGQ9Yz4+OCxlPWMlMjU2LGYucHVzaChlKSxmLnB1c2goZCk7cmV0dXJuIGZ9ZnVuY3Rpb24gVShhKXtyZXR1cm4gVy50b0J5dGVBcnJheShPKGEpKX1mdW5jdGlvbiBWKGEsYixjLGQpe2Zvcih2YXIgZT0wO2U8ZCYmIShlK2M+PWIubGVuZ3RofHxlPj1hLmxlbmd0aCk7ZSsrKWJbZStjXT1hW2VdO3JldHVybiBlfXZhciBXPWEoXCJiYXNlNjQtanNcIiksWD1hKFwiaWVlZTc1NFwiKSxZPWEoXCJpc2FycmF5XCIpO2MuQnVmZmVyPWYsYy5TbG93QnVmZmVyPXIsYy5JTlNQRUNUX01BWF9CWVRFUz01MCxmLnBvb2xTaXplPTgxOTI7dmFyIFo9e307Zi5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMCE9PWIuVFlQRURfQVJSQVlfU1VQUE9SVD9iLlRZUEVEX0FSUkFZX1NVUFBPUlQ6ZCgpLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8oZi5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGYuX19wcm90b19fPVVpbnQ4QXJyYXkpOihmLnByb3RvdHlwZS5sZW5ndGg9dm9pZCAwLGYucHJvdG90eXBlLnBhcmVudD12b2lkIDApLGYuaXNCdWZmZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIShudWxsPT1hfHwhYS5faXNCdWZmZXIpfSxmLmNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtpZighZi5pc0J1ZmZlcihhKXx8IWYuaXNCdWZmZXIoYikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnNcIik7aWYoYT09PWIpcmV0dXJuIDA7Zm9yKHZhciBjPWEubGVuZ3RoLGQ9Yi5sZW5ndGgsZT0wLGc9TWF0aC5taW4oYyxkKTtlPGcmJmFbZV09PT1iW2VdOykrK2U7cmV0dXJuIGUhPT1nJiYoYz1hW2VdLGQ9YltlXSksYzxkPy0xOmQ8Yz8xOjB9LGYuaXNFbmNvZGluZz1mdW5jdGlvbihhKXtzd2l0Y2goU3RyaW5nKGEpLnRvTG93ZXJDYXNlKCkpe2Nhc2VcImhleFwiOmNhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOmNhc2VcImFzY2lpXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwiYmFzZTY0XCI6Y2FzZVwicmF3XCI6Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LGYuY29uY2F0PWZ1bmN0aW9uKGEsYil7aWYoIVkoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImxpc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzLlwiKTtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG5ldyBmKDApO3ZhciBjO2lmKHZvaWQgMD09PWIpZm9yKGI9MCxjPTA7YzxhLmxlbmd0aDtjKyspYis9YVtjXS5sZW5ndGg7dmFyIGQ9bmV3IGYoYiksZT0wO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBnPWFbY107Zy5jb3B5KGQsZSksZSs9Zy5sZW5ndGh9cmV0dXJuIGR9LGYuYnl0ZUxlbmd0aD1zLGYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PWE/XCJcIjowPT09YXJndW1lbnRzLmxlbmd0aD9CKHRoaXMsMCxhKTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGEpe2lmKCFmLmlzQnVmZmVyKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09YXx8MD09PWYuY29tcGFyZSh0aGlzLGEpfSxmLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGE9XCJcIixiPWMuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihhPXRoaXMudG9TdHJpbmcoXCJoZXhcIiwwLGIpLm1hdGNoKC8uezJ9L2cpLmpvaW4oXCIgXCIpLHRoaXMubGVuZ3RoPmImJihhKz1cIiAuLi4gXCIpKSxcIjxCdWZmZXIgXCIrYStcIj5cIn0sZi5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihhKXtpZighZi5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PWE/MDpmLmNvbXBhcmUodGhpcyxhKX0sZi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGMpe2Zvcih2YXIgZD0tMSxlPTA7YytlPGEubGVuZ3RoO2UrKylpZihhW2MrZV09PT1iWy0xPT09ZD8wOmUtZF0pe2lmKC0xPT09ZCYmKGQ9ZSksZS1kKzE9PT1iLmxlbmd0aClyZXR1cm4gYytkfWVsc2UgZD0tMTtyZXR1cm4tMX1pZihiPjIxNDc0ODM2NDc/Yj0yMTQ3NDgzNjQ3OmI8LTIxNDc0ODM2NDgmJihiPS0yMTQ3NDgzNjQ4KSxiPj49MCwwPT09dGhpcy5sZW5ndGgpcmV0dXJuLTE7aWYoYj49dGhpcy5sZW5ndGgpcmV0dXJuLTE7aWYoYjwwJiYoYj1NYXRoLm1heCh0aGlzLmxlbmd0aCtiLDApKSxcInN0cmluZ1wiPT10eXBlb2YgYSlyZXR1cm4gMD09PWEubGVuZ3RoPy0xOlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsYSxiKTtpZihmLmlzQnVmZmVyKGEpKXJldHVybiBjKHRoaXMsYSxiKTtpZihcIm51bWJlclwiPT10eXBlb2YgYSlyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUJiZcImZ1bmN0aW9uXCI9PT1VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLGEsYik6Yyh0aGlzLFthXSxiKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfSxmLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGNvbnNvbGUubG9nKFwiLmdldCgpIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB1c2luZyBhcnJheSBpbmRleGVzIGluc3RlYWQuXCIpLHRoaXMucmVhZFVJbnQ4KGEpfSxmLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gY29uc29sZS5sb2coXCIuc2V0KCkgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHVzaW5nIGFycmF5IGluZGV4ZXMgaW5zdGVhZC5cIiksdGhpcy53cml0ZVVJbnQ4KGEsYil9LGYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGEsYixjLGQpe2lmKHZvaWQgMD09PWIpZD1cInV0ZjhcIixjPXRoaXMubGVuZ3RoLGI9MDtlbHNlIGlmKHZvaWQgMD09PWMmJlwic3RyaW5nXCI9PXR5cGVvZiBiKWQ9YixjPXRoaXMubGVuZ3RoLGI9MDtlbHNlIGlmKGlzRmluaXRlKGIpKWJ8PTAsaXNGaW5pdGUoYyk/KGN8PTAsdm9pZCAwPT09ZCYmKGQ9XCJ1dGY4XCIpKTooZD1jLGM9dm9pZCAwKTtlbHNle3ZhciBlPWQ7ZD1iLGI9MHxjLGM9ZX12YXIgZj10aGlzLmxlbmd0aC1iO2lmKCh2b2lkIDA9PT1jfHxjPmYpJiYoYz1mKSxhLmxlbmd0aD4wJiYoYzwwfHxiPDApfHxiPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiYXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIik7ZHx8KGQ9XCJ1dGY4XCIpO2Zvcih2YXIgZz0hMTs7KXN3aXRjaChkKXtjYXNlXCJoZXhcIjpyZXR1cm4gdSh0aGlzLGEsYixjKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gdih0aGlzLGEsYixjKTtjYXNlXCJhc2NpaVwiOnJldHVybiB3KHRoaXMsYSxiLGMpO2Nhc2VcImJpbmFyeVwiOnJldHVybiB4KHRoaXMsYSxiLGMpO2Nhc2VcImJhc2U2NFwiOnJldHVybiB5KHRoaXMsYSxiLGMpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiB6KHRoaXMsYSxiLGMpO2RlZmF1bHQ6aWYoZyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrZCk7ZD0oXCJcIitkKS50b0xvd2VyQ2FzZSgpLGc9ITB9fSxmLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcIkJ1ZmZlclwiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyICQ9NDA5NjtmLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMubGVuZ3RoO2E9fn5hLGI9dm9pZCAwPT09Yj9jOn5+YixhPDA/KGErPWMpPDAmJihhPTApOmE+YyYmKGE9YyksYjwwPyhiKz1jKTwwJiYoYj0wKTpiPmMmJihiPWMpLGI8YSYmKGI9YSk7dmFyIGQ7aWYoZi5UWVBFRF9BUlJBWV9TVVBQT1JUKWQ9Zi5fYXVnbWVudCh0aGlzLnN1YmFycmF5KGEsYikpO2Vsc2V7dmFyIGU9Yi1hO2Q9bmV3IGYoZSx2b2lkIDApO2Zvcih2YXIgZz0wO2c8ZTtnKyspZFtnXT10aGlzW2crYV19cmV0dXJuIGQubGVuZ3RoJiYoZC5wYXJlbnQ9dGhpcy5wYXJlbnR8fHRoaXMpLGR9LGYucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oYSxiLGMpe2F8PTAsYnw9MCxjfHxIKGEsYix0aGlzLmxlbmd0aCk7Zm9yKHZhciBkPXRoaXNbYV0sZT0xLGY9MDsrK2Y8YiYmKGUqPTI1Nik7KWQrPXRoaXNbYStmXSplO3JldHVybiBkfSxmLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGEsYixjKXthfD0wLGJ8PTAsY3x8SChhLGIsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZD10aGlzW2ErLS1iXSxlPTE7Yj4wJiYoZSo9MjU2KTspZCs9dGhpc1thKy0tYl0qZTtyZXR1cm4gZH0sZi5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwxLHRoaXMubGVuZ3RoKSx0aGlzW2FdfSxmLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDIsdGhpcy5sZW5ndGgpLHRoaXNbYV18dGhpc1thKzFdPDw4fSxmLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDIsdGhpcy5sZW5ndGgpLHRoaXNbYV08PDh8dGhpc1thKzFdfSxmLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2FdfHRoaXNbYSsxXTw8OHx0aGlzW2ErMl08PDE2KSsxNjc3NzIxNip0aGlzW2ErM119LGYucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1thXSsodGhpc1thKzFdPDwxNnx0aGlzW2ErMl08PDh8dGhpc1thKzNdKX0sZi5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGEsYixjKXthfD0wLGJ8PTAsY3x8SChhLGIsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZD10aGlzW2FdLGU9MSxmPTA7KytmPGImJihlKj0yNTYpOylkKz10aGlzW2ErZl0qZTtyZXR1cm4gZSo9MTI4LGQ+PWUmJihkLT1NYXRoLnBvdygyLDgqYikpLGR9LGYucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihhLGIsYyl7YXw9MCxifD0wLGN8fEgoYSxiLHRoaXMubGVuZ3RoKTtmb3IodmFyIGQ9YixlPTEsZj10aGlzW2ErLS1kXTtkPjAmJihlKj0yNTYpOylmKz10aGlzW2ErLS1kXSplO3JldHVybiBlKj0xMjgsZj49ZSYmKGYtPU1hdGgucG93KDIsOCpiKSksZn0sZi5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2FdPy0xKigyNTUtdGhpc1thXSsxKTp0aGlzW2FdfSxmLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihhLGIpe2J8fEgoYSwyLHRoaXMubGVuZ3RoKTt2YXIgYz10aGlzW2FdfHRoaXNbYSsxXTw8ODtyZXR1cm4gMzI3NjgmYz80Mjk0OTAxNzYwfGM6Y30sZi5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oYSxiKXtifHxIKGEsMix0aGlzLmxlbmd0aCk7dmFyIGM9dGhpc1thKzFdfHRoaXNbYV08PDg7cmV0dXJuIDMyNzY4JmM/NDI5NDkwMTc2MHxjOmN9LGYucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSx0aGlzW2FdfHRoaXNbYSsxXTw8OHx0aGlzW2ErMl08PDE2fHRoaXNbYSszXTw8MjR9LGYucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSx0aGlzW2FdPDwyNHx0aGlzW2ErMV08PDE2fHRoaXNbYSsyXTw8OHx0aGlzW2ErM119LGYucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSxYLnJlYWQodGhpcyxhLCEwLDIzLDQpfSxmLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksWC5yZWFkKHRoaXMsYSwhMSwyMyw0KX0sZi5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw4LHRoaXMubGVuZ3RoKSxYLnJlYWQodGhpcyxhLCEwLDUyLDgpfSxmLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDgsdGhpcy5sZW5ndGgpLFgucmVhZCh0aGlzLGEsITEsNTIsOCl9LGYucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGEsYixjLGQpe2E9K2EsYnw9MCxjfD0wLGR8fEkodGhpcyxhLGIsYyxNYXRoLnBvdygyLDgqYyksMCk7dmFyIGU9MSxmPTA7Zm9yKHRoaXNbYl09MjU1JmE7KytmPGMmJihlKj0yNTYpOyl0aGlzW2IrZl09YS9lJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihhLGIsYyxkKXthPSthLGJ8PTAsY3w9MCxkfHxJKHRoaXMsYSxiLGMsTWF0aC5wb3coMiw4KmMpLDApO3ZhciBlPWMtMSxmPTE7Zm9yKHRoaXNbYitlXT0yNTUmYTstLWU+PTAmJihmKj0yNTYpOyl0aGlzW2IrZV09YS9mJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMSwyNTUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoYT1NYXRoLmZsb29yKGEpKSx0aGlzW2JdPTI1NSZhLGIrMX0sZi5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsNjU1MzUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPTI1NSZhLHRoaXNbYisxXT1hPj4+OCk6Sih0aGlzLGEsYiwhMCksYisyfSxmLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMiw2NTUzNSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjgsdGhpc1tiKzFdPTI1NSZhKTpKKHRoaXMsYSxiLCExKSxiKzJ9LGYucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiw0LDQyOTQ5NjcyOTUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2IrM109YT4+PjI0LHRoaXNbYisyXT1hPj4+MTYsdGhpc1tiKzFdPWE+Pj44LHRoaXNbYl09MjU1JmEpOksodGhpcyxhLGIsITApLGIrNH0sZi5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDQsNDI5NDk2NzI5NSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjI0LHRoaXNbYisxXT1hPj4+MTYsdGhpc1tiKzJdPWE+Pj44LHRoaXNbYiszXT0yNTUmYSk6Syh0aGlzLGEsYiwhMSksYis0fSxmLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGEsYixjLGQpe2lmKGE9K2EsYnw9MCwhZCl7dmFyIGU9TWF0aC5wb3coMiw4KmMtMSk7SSh0aGlzLGEsYixjLGUtMSwtZSl9dmFyIGY9MCxnPTEsaD1hPDA/MTowO2Zvcih0aGlzW2JdPTI1NSZhOysrZjxjJiYoZyo9MjU2KTspdGhpc1tiK2ZdPShhL2c+PjApLWgmMjU1O3JldHVybiBiK2N9LGYucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYT0rYSxifD0wLCFkKXt2YXIgZT1NYXRoLnBvdygyLDgqYy0xKTtJKHRoaXMsYSxiLGMsZS0xLC1lKX12YXIgZj1jLTEsZz0xLGg9YTwwPzE6MDtmb3IodGhpc1tiK2ZdPTI1NSZhOy0tZj49MCYmKGcqPTI1Nik7KXRoaXNbYitmXT0oYS9nPj4wKS1oJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwxLDEyNywtMTI4KSxmLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChhPU1hdGguZmxvb3IoYSkpLGE8MCYmKGE9MjU1K2ErMSksdGhpc1tiXT0yNTUmYSxiKzF9LGYucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsMzI3NjcsLTMyNzY4KSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09MjU1JmEsdGhpc1tiKzFdPWE+Pj44KTpKKHRoaXMsYSxiLCEwKSxiKzJ9LGYucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsMzI3NjcsLTMyNzY4KSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjgsdGhpc1tiKzFdPTI1NSZhKTpKKHRoaXMsYSxiLCExKSxiKzJ9LGYucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPTI1NSZhLHRoaXNbYisxXT1hPj4+OCx0aGlzW2IrMl09YT4+PjE2LHRoaXNbYiszXT1hPj4+MjQpOksodGhpcyxhLGIsITApLGIrNH0sZi5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxhPDAmJihhPTQyOTQ5NjcyOTUrYSsxKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjI0LHRoaXNbYisxXT1hPj4+MTYsdGhpc1tiKzJdPWE+Pj44LHRoaXNbYiszXT0yNTUmYSk6Syh0aGlzLGEsYiwhMSksYis0fSxmLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBNKHRoaXMsYSxiLCEwLGMpfSxmLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBNKHRoaXMsYSxiLCExLGMpfSxmLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTih0aGlzLGEsYiwhMCxjKX0sZi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIE4odGhpcyxhLGIsITEsYyl9LGYucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoY3x8KGM9MCksZHx8MD09PWR8fChkPXRoaXMubGVuZ3RoKSxiPj1hLmxlbmd0aCYmKGI9YS5sZW5ndGgpLGJ8fChiPTApLGQ+MCYmZDxjJiYoZD1jKSxkPT09YylyZXR1cm4gMDtpZigwPT09YS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihiPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKGM8MHx8Yz49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKGQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzXCIpO2Q+dGhpcy5sZW5ndGgmJihkPXRoaXMubGVuZ3RoKSxhLmxlbmd0aC1iPGQtYyYmKGQ9YS5sZW5ndGgtYitjKTt2YXIgZSxnPWQtYztpZih0aGlzPT09YSYmYzxiJiZiPGQpZm9yKGU9Zy0xO2U+PTA7ZS0tKWFbZStiXT10aGlzW2UrY107ZWxzZSBpZihnPDFlM3x8IWYuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoZT0wO2U8ZztlKyspYVtlK2JdPXRoaXNbZStjXTtlbHNlIGEuX3NldCh0aGlzLnN1YmFycmF5KGMsYytnKSxiKTtyZXR1cm4gZ30sZi5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihhLGIsYyl7aWYoYXx8KGE9MCksYnx8KGI9MCksY3x8KGM9dGhpcy5sZW5ndGgpLGM8Yil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImVuZCA8IHN0YXJ0XCIpO2lmKGMhPT1iJiYwIT09dGhpcy5sZW5ndGgpe2lmKGI8MHx8Yj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKGM8MHx8Yz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImVuZCBvdXQgb2YgYm91bmRzXCIpO3ZhciBkO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBhKWZvcihkPWI7ZDxjO2QrKyl0aGlzW2RdPWE7ZWxzZXt2YXIgZT1SKGEudG9TdHJpbmcoKSksZj1lLmxlbmd0aDtmb3IoZD1iO2Q8YztkKyspdGhpc1tkXT1lW2QlZl19cmV0dXJuIHRoaXN9fSxmLnByb3RvdHlwZS50b0FycmF5QnVmZmVyPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXkpe2lmKGYuVFlQRURfQVJSQVlfU1VQUE9SVClyZXR1cm4gbmV3IGYodGhpcykuYnVmZmVyO2Zvcih2YXIgYT1uZXcgVWludDhBcnJheSh0aGlzLmxlbmd0aCksYj0wLGM9YS5sZW5ndGg7YjxjO2IrPTEpYVtiXT10aGlzW2JdO3JldHVybiBhLmJ1ZmZlcn10aHJvdyBuZXcgVHlwZUVycm9yKFwiQnVmZmVyLnRvQXJyYXlCdWZmZXIgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIil9O3ZhciBfPWYucHJvdG90eXBlO2YuX2F1Z21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY29uc3RydWN0b3I9ZixhLl9pc0J1ZmZlcj0hMCxhLl9zZXQ9YS5zZXQsYS5nZXQ9Xy5nZXQsYS5zZXQ9Xy5zZXQsYS53cml0ZT1fLndyaXRlLGEudG9TdHJpbmc9Xy50b1N0cmluZyxhLnRvTG9jYWxlU3RyaW5nPV8udG9TdHJpbmcsYS50b0pTT049Xy50b0pTT04sYS5lcXVhbHM9Xy5lcXVhbHMsYS5jb21wYXJlPV8uY29tcGFyZSxhLmluZGV4T2Y9Xy5pbmRleE9mLGEuY29weT1fLmNvcHksYS5zbGljZT1fLnNsaWNlLGEucmVhZFVJbnRMRT1fLnJlYWRVSW50TEUsYS5yZWFkVUludEJFPV8ucmVhZFVJbnRCRSxhLnJlYWRVSW50OD1fLnJlYWRVSW50OCxhLnJlYWRVSW50MTZMRT1fLnJlYWRVSW50MTZMRSxhLnJlYWRVSW50MTZCRT1fLnJlYWRVSW50MTZCRSxhLnJlYWRVSW50MzJMRT1fLnJlYWRVSW50MzJMRSxhLnJlYWRVSW50MzJCRT1fLnJlYWRVSW50MzJCRSxhLnJlYWRJbnRMRT1fLnJlYWRJbnRMRSxhLnJlYWRJbnRCRT1fLnJlYWRJbnRCRSxhLnJlYWRJbnQ4PV8ucmVhZEludDgsYS5yZWFkSW50MTZMRT1fLnJlYWRJbnQxNkxFLGEucmVhZEludDE2QkU9Xy5yZWFkSW50MTZCRSxhLnJlYWRJbnQzMkxFPV8ucmVhZEludDMyTEUsYS5yZWFkSW50MzJCRT1fLnJlYWRJbnQzMkJFLGEucmVhZEZsb2F0TEU9Xy5yZWFkRmxvYXRMRSxhLnJlYWRGbG9hdEJFPV8ucmVhZEZsb2F0QkUsYS5yZWFkRG91YmxlTEU9Xy5yZWFkRG91YmxlTEUsYS5yZWFkRG91YmxlQkU9Xy5yZWFkRG91YmxlQkUsYS53cml0ZVVJbnQ4PV8ud3JpdGVVSW50OCxhLndyaXRlVUludExFPV8ud3JpdGVVSW50TEUsYS53cml0ZVVJbnRCRT1fLndyaXRlVUludEJFLGEud3JpdGVVSW50MTZMRT1fLndyaXRlVUludDE2TEUsYS53cml0ZVVJbnQxNkJFPV8ud3JpdGVVSW50MTZCRSxhLndyaXRlVUludDMyTEU9Xy53cml0ZVVJbnQzMkxFLGEud3JpdGVVSW50MzJCRT1fLndyaXRlVUludDMyQkUsYS53cml0ZUludExFPV8ud3JpdGVJbnRMRSxhLndyaXRlSW50QkU9Xy53cml0ZUludEJFLGEud3JpdGVJbnQ4PV8ud3JpdGVJbnQ4LGEud3JpdGVJbnQxNkxFPV8ud3JpdGVJbnQxNkxFLGEud3JpdGVJbnQxNkJFPV8ud3JpdGVJbnQxNkJFLGEud3JpdGVJbnQzMkxFPV8ud3JpdGVJbnQzMkxFLGEud3JpdGVJbnQzMkJFPV8ud3JpdGVJbnQzMkJFLGEud3JpdGVGbG9hdExFPV8ud3JpdGVGbG9hdExFLGEud3JpdGVGbG9hdEJFPV8ud3JpdGVGbG9hdEJFLGEud3JpdGVEb3VibGVMRT1fLndyaXRlRG91YmxlTEUsYS53cml0ZURvdWJsZUJFPV8ud3JpdGVEb3VibGVCRSxhLmZpbGw9Xy5maWxsLGEuaW5zcGVjdD1fLmluc3BlY3QsYS50b0FycmF5QnVmZmVyPV8udG9BcnJheUJ1ZmZlcixhfTt2YXIgYWE9L1teK1xcLzAtOUEtWmEtei1fXS9nfSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7XCJiYXNlNjQtanNcIjoxLGllZWU3NTQ6Nyxpc2FycmF5Ojh9XSw0OltmdW5jdGlvbihiLGMsZCl7KGZ1bmN0aW9uKGUsZil7IWZ1bmN0aW9uKGIsZSl7XCJvYmplY3RcIj09dHlwZW9mIGQmJnZvaWQgMCE9PWM/Yy5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiZhLmFtZD9hKGUpOmIuRVM2UHJvbWlzZT1lKCl9KHRoaXMsZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBhKGEpe3ZhciBiPXR5cGVvZiBhO3JldHVybiBudWxsIT09YSYmKFwib2JqZWN0XCI9PT1ifHxcImZ1bmN0aW9uXCI9PT1iKX1mdW5jdGlvbiBjKGEpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGF9ZnVuY3Rpb24gZChhKXtYPWF9ZnVuY3Rpb24gZyhhKXtZPWF9ZnVuY3Rpb24gaCgpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLm5leHRUaWNrKG0pfX1mdW5jdGlvbiBpKCl7cmV0dXJuIHZvaWQgMCE9PVc/ZnVuY3Rpb24oKXtXKG0pfTpsKCl9ZnVuY3Rpb24gaigpe3ZhciBhPTAsYj1uZXcgXyhtKSxjPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO3JldHVybiBiLm9ic2VydmUoYyx7Y2hhcmFjdGVyRGF0YTohMH0pLGZ1bmN0aW9uKCl7Yy5kYXRhPWE9KythJTJ9fWZ1bmN0aW9uIGsoKXt2YXIgYT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGEucG9ydDEub25tZXNzYWdlPW0sZnVuY3Rpb24oKXtyZXR1cm4gYS5wb3J0Mi5wb3N0TWVzc2FnZSgwKX19ZnVuY3Rpb24gbCgpe3ZhciBhPXNldFRpbWVvdXQ7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEobSwxKX19ZnVuY3Rpb24gbSgpe2Zvcih2YXIgYT0wO2E8VjthKz0yKXsoMCxjYVthXSkoY2FbYSsxXSksY2FbYV09dm9pZCAwLGNhW2ErMV09dm9pZCAwfVY9MH1mdW5jdGlvbiBuKCl7dHJ5e3ZhciBhPWIsYz1hKFwidmVydHhcIik7cmV0dXJuIFc9Yy5ydW5Pbkxvb3B8fGMucnVuT25Db250ZXh0LGkoKX1jYXRjaChhKXtyZXR1cm4gbCgpfX1mdW5jdGlvbiBvKGEsYil7dmFyIGM9YXJndW1lbnRzLGQ9dGhpcyxlPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHEpO3ZvaWQgMD09PWVbZWFdJiZKKGUpO3ZhciBmPWQuX3N0YXRlO3JldHVybiBmP2Z1bmN0aW9uKCl7dmFyIGE9Y1tmLTFdO1koZnVuY3Rpb24oKXtyZXR1cm4gRyhmLGUsYSxkLl9yZXN1bHQpfSl9KCk6QyhkLGUsYSxiKSxlfWZ1bmN0aW9uIHAoYSl7dmFyIGI9dGhpcztpZihhJiZcIm9iamVjdFwiPT10eXBlb2YgYSYmYS5jb25zdHJ1Y3Rvcj09PWIpcmV0dXJuIGE7dmFyIGM9bmV3IGIocSk7cmV0dXJuIHkoYyxhKSxjfWZ1bmN0aW9uIHEoKXt9ZnVuY3Rpb24gcigpe3JldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZlwiKX1mdW5jdGlvbiBzKCl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJBIHByb21pc2VzIGNhbGxiYWNrIGNhbm5vdCByZXR1cm4gdGhhdCBzYW1lIHByb21pc2UuXCIpfWZ1bmN0aW9uIHQoYSl7dHJ5e3JldHVybiBhLnRoZW59Y2F0Y2goYSl7cmV0dXJuIGlhLmVycm9yPWEsaWF9fWZ1bmN0aW9uIHUoYSxiLGMsZCl7dHJ5e2EuY2FsbChiLGMsZCl9Y2F0Y2goYSl7cmV0dXJuIGF9fWZ1bmN0aW9uIHYoYSxiLGMpe1koZnVuY3Rpb24oYSl7dmFyIGQ9ITEsZT11KGMsYixmdW5jdGlvbihjKXtkfHwoZD0hMCxiIT09Yz95KGEsYyk6QShhLGMpKX0sZnVuY3Rpb24oYil7ZHx8KGQ9ITAsQihhLGIpKX0sXCJTZXR0bGU6IFwiKyhhLl9sYWJlbHx8XCIgdW5rbm93biBwcm9taXNlXCIpKTshZCYmZSYmKGQ9ITAsQihhLGUpKX0sYSl9ZnVuY3Rpb24gdyhhLGIpe2IuX3N0YXRlPT09Z2E/QShhLGIuX3Jlc3VsdCk6Yi5fc3RhdGU9PT1oYT9CKGEsYi5fcmVzdWx0KTpDKGIsdm9pZCAwLGZ1bmN0aW9uKGIpe3JldHVybiB5KGEsYil9LGZ1bmN0aW9uKGIpe3JldHVybiBCKGEsYil9KX1mdW5jdGlvbiB4KGEsYixkKXtiLmNvbnN0cnVjdG9yPT09YS5jb25zdHJ1Y3RvciYmZD09PW8mJmIuY29uc3RydWN0b3IucmVzb2x2ZT09PXA/dyhhLGIpOmQ9PT1pYT8oQihhLGlhLmVycm9yKSxpYS5lcnJvcj1udWxsKTp2b2lkIDA9PT1kP0EoYSxiKTpjKGQpP3YoYSxiLGQpOkEoYSxiKX1mdW5jdGlvbiB5KGIsYyl7Yj09PWM/QihiLHIoKSk6YShjKT94KGIsYyx0KGMpKTpBKGIsYyl9ZnVuY3Rpb24geihhKXthLl9vbmVycm9yJiZhLl9vbmVycm9yKGEuX3Jlc3VsdCksRChhKX1mdW5jdGlvbiBBKGEsYil7YS5fc3RhdGU9PT1mYSYmKGEuX3Jlc3VsdD1iLGEuX3N0YXRlPWdhLDAhPT1hLl9zdWJzY3JpYmVycy5sZW5ndGgmJlkoRCxhKSl9ZnVuY3Rpb24gQihhLGIpe2EuX3N0YXRlPT09ZmEmJihhLl9zdGF0ZT1oYSxhLl9yZXN1bHQ9YixZKHosYSkpfWZ1bmN0aW9uIEMoYSxiLGMsZCl7dmFyIGU9YS5fc3Vic2NyaWJlcnMsZj1lLmxlbmd0aDthLl9vbmVycm9yPW51bGwsZVtmXT1iLGVbZitnYV09YyxlW2YraGFdPWQsMD09PWYmJmEuX3N0YXRlJiZZKEQsYSl9ZnVuY3Rpb24gRChhKXt2YXIgYj1hLl9zdWJzY3JpYmVycyxjPWEuX3N0YXRlO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBkPXZvaWQgMCxlPXZvaWQgMCxmPWEuX3Jlc3VsdCxnPTA7ZzxiLmxlbmd0aDtnKz0zKWQ9YltnXSxlPWJbZytjXSxkP0coYyxkLGUsZik6ZShmKTthLl9zdWJzY3JpYmVycy5sZW5ndGg9MH19ZnVuY3Rpb24gRSgpe3RoaXMuZXJyb3I9bnVsbH1mdW5jdGlvbiBGKGEsYil7dHJ5e3JldHVybiBhKGIpfWNhdGNoKGEpe3JldHVybiBqYS5lcnJvcj1hLGphfX1mdW5jdGlvbiBHKGEsYixkLGUpe3ZhciBmPWMoZCksZz12b2lkIDAsaD12b2lkIDAsaT12b2lkIDAsaj12b2lkIDA7aWYoZil7aWYoZz1GKGQsZSksZz09PWphPyhqPSEwLGg9Zy5lcnJvcixnLmVycm9yPW51bGwpOmk9ITAsYj09PWcpcmV0dXJuIHZvaWQgQihiLHMoKSl9ZWxzZSBnPWUsaT0hMDtiLl9zdGF0ZSE9PWZhfHwoZiYmaT95KGIsZyk6aj9CKGIsaCk6YT09PWdhP0EoYixnKTphPT09aGEmJkIoYixnKSl9ZnVuY3Rpb24gSChhLGIpe3RyeXtiKGZ1bmN0aW9uKGIpe3koYSxiKX0sZnVuY3Rpb24oYil7QihhLGIpfSl9Y2F0Y2goYil7QihhLGIpfX1mdW5jdGlvbiBJKCl7cmV0dXJuIGthKyt9ZnVuY3Rpb24gSihhKXthW2VhXT1rYSsrLGEuX3N0YXRlPXZvaWQgMCxhLl9yZXN1bHQ9dm9pZCAwLGEuX3N1YnNjcmliZXJzPVtdfWZ1bmN0aW9uIEsoYSxiKXt0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yPWEsdGhpcy5wcm9taXNlPW5ldyBhKHEpLHRoaXMucHJvbWlzZVtlYV18fEoodGhpcy5wcm9taXNlKSxVKGIpPyh0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLl9yZW1haW5pbmc9Yi5sZW5ndGgsdGhpcy5fcmVzdWx0PW5ldyBBcnJheSh0aGlzLmxlbmd0aCksMD09PXRoaXMubGVuZ3RoP0EodGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCk6KHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RofHwwLHRoaXMuX2VudW1lcmF0ZShiKSwwPT09dGhpcy5fcmVtYWluaW5nJiZBKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpKSk6Qih0aGlzLnByb21pc2UsTCgpKX1mdW5jdGlvbiBMKCl7cmV0dXJuIG5ldyBFcnJvcihcIkFycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheVwiKX1mdW5jdGlvbiBNKGEpe3JldHVybiBuZXcgSyh0aGlzLGEpLnByb21pc2V9ZnVuY3Rpb24gTihhKXt2YXIgYj10aGlzO3JldHVybiBuZXcgYihVKGEpP2Z1bmN0aW9uKGMsZCl7Zm9yKHZhciBlPWEubGVuZ3RoLGY9MDtmPGU7ZisrKWIucmVzb2x2ZShhW2ZdKS50aGVuKGMsZCl9OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIobmV3IFR5cGVFcnJvcihcIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS5cIikpfSl9ZnVuY3Rpb24gTyhhKXt2YXIgYj10aGlzLGM9bmV3IGIocSk7cmV0dXJuIEIoYyxhKSxjfWZ1bmN0aW9uIFAoKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvclwiKX1mdW5jdGlvbiBRKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKX1mdW5jdGlvbiBSKGEpe3RoaXNbZWFdPUkoKSx0aGlzLl9yZXN1bHQ9dGhpcy5fc3RhdGU9dm9pZCAwLHRoaXMuX3N1YnNjcmliZXJzPVtdLHEhPT1hJiYoXCJmdW5jdGlvblwiIT10eXBlb2YgYSYmUCgpLHRoaXMgaW5zdGFuY2VvZiBSP0godGhpcyxhKTpRKCkpfWZ1bmN0aW9uIFMoKXt2YXIgYT12b2lkIDA7aWYodm9pZCAwIT09ZilhPWY7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZilhPXNlbGY7ZWxzZSB0cnl7YT1GdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goYSl7dGhyb3cgbmV3IEVycm9yKFwicG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50XCIpfXZhciBiPWEuUHJvbWlzZTtpZihiKXt2YXIgYz1udWxsO3RyeXtjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChiLnJlc29sdmUoKSl9Y2F0Y2goYSl7fWlmKFwiW29iamVjdCBQcm9taXNlXVwiPT09YyYmIWIuY2FzdClyZXR1cm59YS5Qcm9taXNlPVJ9dmFyIFQ9dm9pZCAwO1Q9QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5OmZ1bmN0aW9uKGEpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKX07dmFyIFU9VCxWPTAsVz12b2lkIDAsWD12b2lkIDAsWT1mdW5jdGlvbihhLGIpe2NhW1ZdPWEsY2FbVisxXT1iLDI9PT0oVis9MikmJihYP1gobSk6ZGEoKSl9LFo9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwLCQ9Wnx8e30sXz0kLk11dGF0aW9uT2JzZXJ2ZXJ8fCQuV2ViS2l0TXV0YXRpb25PYnNlcnZlcixhYT1cInVuZGVmaW5lZFwiPT10eXBlb2Ygc2VsZiYmdm9pZCAwIT09ZSYmXCJbb2JqZWN0IHByb2Nlc3NdXCI9PT17fS50b1N0cmluZy5jYWxsKGUpLGJhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGltcG9ydFNjcmlwdHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCxjYT1uZXcgQXJyYXkoMWUzKSxkYT12b2lkIDA7ZGE9YWE/aCgpOl8/aigpOmJhP2soKTp2b2lkIDA9PT1aJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBiP24oKTpsKCk7dmFyIGVhPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygxNiksZmE9dm9pZCAwLGdhPTEsaGE9MixpYT1uZXcgRSxqYT1uZXcgRSxrYT0wO3JldHVybiBLLnByb3RvdHlwZS5fZW51bWVyYXRlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wO3RoaXMuX3N0YXRlPT09ZmEmJmI8YS5sZW5ndGg7YisrKXRoaXMuX2VhY2hFbnRyeShhW2JdLGIpfSxLLnByb3RvdHlwZS5fZWFjaEVudHJ5PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcixkPWMucmVzb2x2ZTtpZihkPT09cCl7dmFyIGU9dChhKTtpZihlPT09byYmYS5fc3RhdGUhPT1mYSl0aGlzLl9zZXR0bGVkQXQoYS5fc3RhdGUsYixhLl9yZXN1bHQpO2Vsc2UgaWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aGlzLl9yZW1haW5pbmctLSx0aGlzLl9yZXN1bHRbYl09YTtlbHNlIGlmKGM9PT1SKXt2YXIgZj1uZXcgYyhxKTt4KGYsYSxlKSx0aGlzLl93aWxsU2V0dGxlQXQoZixiKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgYyhmdW5jdGlvbihiKXtyZXR1cm4gYihhKX0pLGIpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KGQoYSksYil9LEsucHJvdG90eXBlLl9zZXR0bGVkQXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMucHJvbWlzZTtkLl9zdGF0ZT09PWZhJiYodGhpcy5fcmVtYWluaW5nLS0sYT09PWhhP0IoZCxjKTp0aGlzLl9yZXN1bHRbYl09YyksMD09PXRoaXMuX3JlbWFpbmluZyYmQShkLHRoaXMuX3Jlc3VsdCl9LEsucHJvdG90eXBlLl93aWxsU2V0dGxlQXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO0MoYSx2b2lkIDAsZnVuY3Rpb24oYSl7cmV0dXJuIGMuX3NldHRsZWRBdChnYSxiLGEpfSxmdW5jdGlvbihhKXtyZXR1cm4gYy5fc2V0dGxlZEF0KGhhLGIsYSl9KX0sUi5hbGw9TSxSLnJhY2U9TixSLnJlc29sdmU9cCxSLnJlamVjdD1PLFIuX3NldFNjaGVkdWxlcj1kLFIuX3NldEFzYXA9ZyxSLl9hc2FwPVksUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlIsdGhlbjpvLGNhdGNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnRoZW4obnVsbCxhKX19LFIucG9seWZpbGw9UyxSLlByb21pc2U9UixSfSl9KS5jYWxsKHRoaXMsYihcIl9wcm9jZXNzXCIpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7X3Byb2Nlc3M6MTF9XSw1OltmdW5jdGlvbihiLGMsZCl7IWZ1bmN0aW9uKGIsZSl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSYmYS5hbWQpYShbXCJleHBvcnRzXCIsXCJtb2R1bGVcIl0sZSk7ZWxzZSBpZih2b2lkIDAhPT1kJiZ2b2lkIDAhPT1jKWUoZCxjKTtlbHNle3ZhciBmPXtleHBvcnRzOnt9fTtlKGYuZXhwb3J0cyxmKSxiLmZldGNoSnNvbnA9Zi5leHBvcnRzfX0odGhpcyxmdW5jdGlvbihhLGIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGMoKXtyZXR1cm5cImpzb25wX1wiK0RhdGUubm93KCkrXCJfXCIrTWF0aC5jZWlsKDFlNSpNYXRoLnJhbmRvbSgpKX1mdW5jdGlvbiBkKGEpe3RyeXtkZWxldGUgd2luZG93W2FdfWNhdGNoKGIpe3dpbmRvd1thXT12b2lkIDB9fWZ1bmN0aW9uIGUoYSl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSk7YiYmZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLnJlbW92ZUNoaWxkKGIpfWZ1bmN0aW9uIGYoYSl7dmFyIGI9YXJndW1lbnRzLmxlbmd0aDw9MXx8dm9pZCAwPT09YXJndW1lbnRzWzFdP3t9OmFyZ3VtZW50c1sxXSxmPWEsaD1iLnRpbWVvdXR8fGcudGltZW91dCxpPWIuanNvbnBDYWxsYmFja3x8Zy5qc29ucENhbGxiYWNrLGo9dm9pZCAwO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihnLGspe3ZhciBsPWIuanNvbnBDYWxsYmFja0Z1bmN0aW9ufHxjKCksbT1pK1wiX1wiK2w7d2luZG93W2xdPWZ1bmN0aW9uKGEpe2coe29rOiEwLGpzb246ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGEpfX0pLGomJmNsZWFyVGltZW91dChqKSxlKG0pLGQobCl9LGYrPS0xPT09Zi5pbmRleE9mKFwiP1wiKT9cIj9cIjpcIiZcIjt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO24uc2V0QXR0cmlidXRlKFwic3JjXCIsXCJcIitmK2krXCI9XCIrbCksYi5jaGFyc2V0JiZuLnNldEF0dHJpYnV0ZShcImNoYXJzZXRcIixiLmNoYXJzZXQpLG4uaWQ9bSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQobiksaj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ayhuZXcgRXJyb3IoXCJKU09OUCByZXF1ZXN0IHRvIFwiK2ErXCIgdGltZWQgb3V0XCIpKSxkKGwpLGUobSksd2luZG93W2xdPWZ1bmN0aW9uKCl7ZChsKX19LGgpLG4ub25lcnJvcj1mdW5jdGlvbigpe2sobmV3IEVycm9yKFwiSlNPTlAgcmVxdWVzdCB0byBcIithK1wiIGZhaWxlZFwiKSksZChsKSxlKG0pLGomJmNsZWFyVGltZW91dChqKX19KX12YXIgZz17dGltZW91dDo1ZTMsanNvbnBDYWxsYmFjazpcImNhbGxiYWNrXCIsanNvbnBDYWxsYmFja0Z1bmN0aW9uOm51bGx9O2IuZXhwb3J0cz1mfSl9LHt9XSw2OltmdW5jdGlvbihiLGMsZCl7dmFyIGU9ZXx8ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7aWYoISh2b2lkIDA9PT1hfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiYvTVNJRSBbMS05XVxcLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkpe3ZhciBiPWEuZG9jdW1lbnQsYz1mdW5jdGlvbigpe3JldHVybiBhLlVSTHx8YS53ZWJraXRVUkx8fGF9LGQ9Yi5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXCJhXCIpLGU9XCJkb3dubG9hZFwiaW4gZCxmPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIik7YS5kaXNwYXRjaEV2ZW50KGIpfSxnPS9jb25zdHJ1Y3Rvci9pLnRlc3QoYS5IVE1MRWxlbWVudCl8fGEuc2FmYXJpLGg9L0NyaU9TXFwvW1xcZF0rLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGk9ZnVuY3Rpb24oYil7KGEuc2V0SW1tZWRpYXRlfHxhLnNldFRpbWVvdXQpKGZ1bmN0aW9uKCl7dGhyb3cgYn0sMCl9LGo9XCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixrPTRlNCxsPWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKCl7XCJzdHJpbmdcIj09dHlwZW9mIGE/YygpLnJldm9rZU9iamVjdFVSTChhKTphLnJlbW92ZSgpfTtzZXRUaW1lb3V0KGIsayl9LG09ZnVuY3Rpb24oYSxiLGMpe2I9W10uY29uY2F0KGIpO2Zvcih2YXIgZD1iLmxlbmd0aDtkLS07KXt2YXIgZT1hW1wib25cIitiW2RdXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKXRyeXtlLmNhbGwoYSxjfHxhKX1jYXRjaChhKXtpKGEpfX19LG49ZnVuY3Rpb24oYSl7cmV0dXJuL15cXHMqKD86dGV4dFxcL1xcUyp8YXBwbGljYXRpb25cXC94bWx8XFxTKlxcL1xcUypcXCt4bWwpXFxzKjsuKmNoYXJzZXRcXHMqPVxccyp1dGYtOC9pLnRlc3QoYS50eXBlKT9uZXcgQmxvYihbU3RyaW5nLmZyb21DaGFyQ29kZSg2NTI3OSksYV0se3R5cGU6YS50eXBlfSk6YX0sbz1mdW5jdGlvbihiLGksayl7a3x8KGI9bihiKSk7dmFyIG8scD10aGlzLHE9Yi50eXBlLHI9cT09PWoscz1mdW5jdGlvbigpe20ocCxcIndyaXRlc3RhcnQgcHJvZ3Jlc3Mgd3JpdGUgd3JpdGVlbmRcIi5zcGxpdChcIiBcIikpfSx0PWZ1bmN0aW9uKCl7aWYoKGh8fHImJmcpJiZhLkZpbGVSZWFkZXIpe3ZhciBkPW5ldyBGaWxlUmVhZGVyO3JldHVybiBkLm9ubG9hZGVuZD1mdW5jdGlvbigpe3ZhciBiPWg/ZC5yZXN1bHQ6ZC5yZXN1bHQucmVwbGFjZSgvXmRhdGE6W147XSo7LyxcImRhdGE6YXR0YWNobWVudC9maWxlO1wiKTthLm9wZW4oYixcIl9ibGFua1wiKXx8KGEubG9jYXRpb24uaHJlZj1iKSxiPXZvaWQgMCxwLnJlYWR5U3RhdGU9cC5ET05FLHMoKX0sZC5yZWFkQXNEYXRhVVJMKGIpLHZvaWQocC5yZWFkeVN0YXRlPXAuSU5JVCl9aWYob3x8KG89YygpLmNyZWF0ZU9iamVjdFVSTChiKSkscilhLmxvY2F0aW9uLmhyZWY9bztlbHNle2Eub3BlbihvLFwiX2JsYW5rXCIpfHwoYS5sb2NhdGlvbi5ocmVmPW8pfXAucmVhZHlTdGF0ZT1wLkRPTkUscygpLGwobyl9O2lmKHAucmVhZHlTdGF0ZT1wLklOSVQsZSlyZXR1cm4gbz1jKCkuY3JlYXRlT2JqZWN0VVJMKGIpLHZvaWQgc2V0VGltZW91dChmdW5jdGlvbigpe2QuaHJlZj1vLGQuZG93bmxvYWQ9aSxmKGQpLHMoKSxsKG8pLHAucmVhZHlTdGF0ZT1wLkRPTkV9KTt0KCl9LHA9by5wcm90b3R5cGUscT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG5ldyBvKGEsYnx8YS5uYW1lfHxcImRvd25sb2FkXCIsYyl9O3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iP2Z1bmN0aW9uKGEsYixjKXtyZXR1cm4gYj1ifHxhLm5hbWV8fFwiZG93bmxvYWRcIixjfHwoYT1uKGEpKSxuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihhLGIpfToocC5hYm9ydD1mdW5jdGlvbigpe30scC5yZWFkeVN0YXRlPXAuSU5JVD0wLHAuV1JJVElORz0xLHAuRE9ORT0yLHAuZXJyb3I9cC5vbndyaXRlc3RhcnQ9cC5vbnByb2dyZXNzPXAub253cml0ZT1wLm9uYWJvcnQ9cC5vbmVycm9yPXAub253cml0ZWVuZD1udWxsLHEpfX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGZ8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd3x8dGhpcy5jb250ZW50KTt2b2lkIDAhPT1jJiZjLmV4cG9ydHM/Yy5leHBvcnRzLnNhdmVBcz1lOnZvaWQgMCE9PWEmJm51bGwhPT1hJiZudWxsIT09YS5hbWQmJmEoXCJGaWxlU2F2ZXIuanNcIixmdW5jdGlvbigpe3JldHVybiBlfSl9LHt9XSw3OltmdW5jdGlvbihhLGIsYyl7Yy5yZWFkPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoPTgqZS1kLTEsaT0oMTw8aCktMSxqPWk+PjEsaz0tNyxsPWM/ZS0xOjAsbT1jPy0xOjEsbj1hW2IrbF07Zm9yKGwrPW0sZj1uJigxPDwtayktMSxuPj49LWssays9aDtrPjA7Zj0yNTYqZithW2IrbF0sbCs9bSxrLT04KTtmb3IoZz1mJigxPDwtayktMSxmPj49LWssays9ZDtrPjA7Zz0yNTYqZythW2IrbF0sbCs9bSxrLT04KTtpZigwPT09ZilmPTEtajtlbHNle2lmKGY9PT1pKXJldHVybiBnP05hTjoxLzAqKG4/LTE6MSk7Zys9TWF0aC5wb3coMixkKSxmLT1qfXJldHVybihuPy0xOjEpKmcqTWF0aC5wb3coMixmLWQpfSxjLndyaXRlPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZyxoLGksaj04KmYtZS0xLGs9KDE8PGopLTEsbD1rPj4xLG09MjM9PT1lP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxuPWQ/MDpmLTEsbz1kPzE6LTEscD1iPDB8fDA9PT1iJiYxL2I8MD8xOjA7Zm9yKGI9TWF0aC5hYnMoYiksaXNOYU4oYil8fGI9PT0xLzA/KGg9aXNOYU4oYik/MTowLGc9ayk6KGc9TWF0aC5mbG9vcihNYXRoLmxvZyhiKS9NYXRoLkxOMiksYiooaT1NYXRoLnBvdygyLC1nKSk8MSYmKGctLSxpKj0yKSxiKz1nK2w+PTE/bS9pOm0qTWF0aC5wb3coMiwxLWwpLGIqaT49MiYmKGcrKyxpLz0yKSxnK2w+PWs/KGg9MCxnPWspOmcrbD49MT8oaD0oYippLTEpKk1hdGgucG93KDIsZSksZys9bCk6KGg9YipNYXRoLnBvdygyLGwtMSkqTWF0aC5wb3coMixlKSxnPTApKTtlPj04O2FbYytuXT0yNTUmaCxuKz1vLGgvPTI1NixlLT04KTtmb3IoZz1nPDxlfGgsais9ZTtqPjA7YVtjK25dPTI1NSZnLG4rPW8sZy89MjU2LGotPTgpO2FbYytuLW9dfD0xMjgqcH19LHt9XSw4OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9e30udG9TdHJpbmc7Yi5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09ZC5jYWxsKGEpfX0se31dLDk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7cmV0dXJuIGEuYj09PWIuYiYmYS5hPT09Yi5hfWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gYS5iPGIuYnx8YS5iPT09Yi5iJiZhLmE8PWIuYX1mdW5jdGlvbiBmKGEsYixjKXt2YXIgZD1iLmItYS5iLGU9Yy5iLWIuYlxuO3JldHVybiAwPGQrZT9kPGU/Yi5hLWEuYStkLyhkK2UpKihhLmEtYy5hKTpiLmEtYy5hK2UvKGQrZSkqKGMuYS1hLmEpOjB9ZnVuY3Rpb24gZyhhLGIsYyl7dmFyIGQ9Yi5iLWEuYixlPWMuYi1iLmI7cmV0dXJuIDA8ZCtlPyhiLmEtYy5hKSpkKyhiLmEtYS5hKSplOjB9ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhLmE8Yi5hfHxhLmE9PT1iLmEmJmEuYjw9Yi5ifWZ1bmN0aW9uIGkoYSxiLGMpe3ZhciBkPWIuYS1hLmEsZT1jLmEtYi5hO3JldHVybiAwPGQrZT9kPGU/Yi5iLWEuYitkLyhkK2UpKihhLmItYy5iKTpiLmItYy5iK2UvKGQrZSkqKGMuYi1hLmIpOjB9ZnVuY3Rpb24gaihhLGIsYyl7dmFyIGQ9Yi5hLWEuYSxlPWMuYS1iLmE7cmV0dXJuIDA8ZCtlPyhiLmItYy5iKSpkKyhiLmItYS5iKSplOjB9ZnVuY3Rpb24gayhhKXtyZXR1cm4gZShhLmIuYSxhLmEpfWZ1bmN0aW9uIGwoYSl7cmV0dXJuIGUoYS5hLGEuYi5hKX1mdW5jdGlvbiBtKGEsYixjLGQpe3JldHVybiBhPTA+YT8wOmEsYz0wPmM/MDpjLGE8PWM/MD09PWM/KGIrZCkvMjpiK2EvKGErYykqKGQtYik6ZCtjLyhhK2MpKihiLWQpfWZ1bmN0aW9uIG4oYSl7dmFyIGI9cyhhLmIpO3JldHVybiB1KGIsYS5jKSx1KGIuYixhLmMpLHYoYixhLmEpLGJ9ZnVuY3Rpb24gbyhhLGIpe3ZhciBjPSExLGQ9ITE7YSE9PWImJihiLmEhPT1hLmEmJihkPSEwLHgoYi5hLGEuYSkpLGIuZCE9PWEuZCYmKGM9ITAseShiLmQsYS5kKSksdChiLGEpLGR8fCh1KGIsYS5hKSxhLmEuYz1hKSxjfHwodihiLGEuZCksYS5kLmE9YSkpfWZ1bmN0aW9uIHAoYSl7dmFyIGI9YS5iLGM9ITE7YS5kIT09YS5iLmQmJihjPSEwLHkoYS5kLGEuYi5kKSksYS5jPT09YT94KGEuYSxudWxsKTooYS5iLmQuYT0kKGEpLGEuYS5jPWEuYyx0KGEsJChhKSksY3x8dihhLGEuZCkpLGIuYz09PWI/KHgoYi5hLG51bGwpLHkoYi5kLG51bGwpKTooYS5kLmE9JChiKSxiLmEuYz1iLmMsdChiLCQoYikpKSx3KGEpfWZ1bmN0aW9uIHEoYSl7dmFyIGI9cyhhKSxjPWIuYjtyZXR1cm4gdChiLGEuZSksYi5hPWEuYi5hLHUoYyxiLmEpLGIuZD1jLmQ9YS5kLGI9Yi5iLHQoYS5iLCQoYS5iKSksdChhLmIsYiksYS5iLmE9Yi5hLGIuYi5hLmM9Yi5iLGIuYi5kPWEuYi5kLGIuZj1hLmYsYi5iLmY9YS5iLmYsYn1mdW5jdGlvbiByKGEsYil7dmFyIGM9ITEsZD1zKGEpLGU9ZC5iO3JldHVybiBiLmQhPT1hLmQmJihjPSEwLHkoYi5kLGEuZCkpLHQoZCxhLmUpLHQoZSxiKSxkLmE9YS5iLmEsZS5hPWIuYSxkLmQ9ZS5kPWEuZCxhLmQuYT1lLGN8fHYoZCxhLmQpLGR9ZnVuY3Rpb24gcyhhKXt2YXIgYj1uZXcgWixjPW5ldyBaLGQ9YS5iLmg7cmV0dXJuIGMuaD1kLGQuYi5oPWIsYi5oPWEsYS5iLmg9YyxiLmI9YyxiLmM9YixiLmU9YyxjLmI9YixjLmM9YyxjLmU9Yn1mdW5jdGlvbiB0KGEsYil7dmFyIGM9YS5jLGQ9Yi5jO2MuYi5lPWIsZC5iLmU9YSxhLmM9ZCxiLmM9Y31mdW5jdGlvbiB1KGEsYil7dmFyIGM9Yi5mLGQ9bmV3IGFhKGIsYyk7Yy5lPWQsYi5mPWQsYz1kLmM9YTtkb3tjLmE9ZCxjPWMuY313aGlsZShjIT09YSl9ZnVuY3Rpb24gdihhLGIpe3ZhciBjPWIuZCxkPW5ldyBZKGIsYyk7Yy5iPWQsYi5kPWQsZC5hPWEsZC5jPWIuYyxjPWE7ZG97Yy5kPWQsYz1jLmV9d2hpbGUoYyE9PWEpfWZ1bmN0aW9uIHcoYSl7dmFyIGI9YS5oO2E9YS5iLmgsYi5iLmg9YSxhLmIuaD1ifWZ1bmN0aW9uIHgoYSxiKXt2YXIgYz1hLmMsZD1jO2Rve2QuYT1iLGQ9ZC5jfXdoaWxlKGQhPT1jKTtjPWEuZixkPWEuZSxkLmY9YyxjLmU9ZH1mdW5jdGlvbiB5KGEsYil7dmFyIGM9YS5hLGQ9Yztkb3tkLmQ9YixkPWQuZX13aGlsZShkIT09Yyk7Yz1hLmQsZD1hLmIsZC5kPWMsYy5iPWR9ZnVuY3Rpb24geihhKXt2YXIgYj0wO3JldHVybiBNYXRoLmFicyhhWzFdKT5NYXRoLmFicyhhWzBdKSYmKGI9MSksTWF0aC5hYnMoYVsyXSk+TWF0aC5hYnMoYVtiXSkmJihiPTIpLGJ9ZnVuY3Rpb24gQShhLGIpe2EuZis9Yi5mLGEuYi5mKz1iLmIuZn1mdW5jdGlvbiBCKGEsYixjKXtyZXR1cm4gYT1hLmEsYj1iLmEsYz1jLmEsYi5iLmE9PT1hP2MuYi5hPT09YT9lKGIuYSxjLmEpPzA+PWcoYy5iLmEsYi5hLGMuYSk6MDw9ZyhiLmIuYSxjLmEsYi5hKTowPj1nKGMuYi5hLGEsYy5hKTpjLmIuYT09PWE/MDw9ZyhiLmIuYSxhLGIuYSk6KGI9ZihiLmIuYSxhLGIuYSksYT1mKGMuYi5hLGEsYy5hKSxiPj1hKX1mdW5jdGlvbiBDKGEpe2EuYS5pPW51bGw7dmFyIGI9YS5lO2IuYS5jPWIuYyxiLmMuYT1iLmEsYS5lPW51bGx9ZnVuY3Rpb24gRChhLGIpe3AoYS5hKSxhLmM9ITEsYS5hPWIsYi5pPWF9ZnVuY3Rpb24gRShhKXt2YXIgYj1hLmEuYTtkb3thPW9hKGEpfXdoaWxlKGEuYS5hPT09Yik7cmV0dXJuIGEuYyYmKGI9cihuYShhKS5hLmIsYS5hLmUpLEQoYSxiKSxhPW9hKGEpKSxhfWZ1bmN0aW9uIEYoYSxiLGMpe3ZhciBkPW5ldyBtYTtyZXR1cm4gZC5hPWMsZC5lPVQoYS5mLGIuZSxkKSxjLmk9ZH1mdW5jdGlvbiBHKGEsYil7c3dpdGNoKGEucyl7Y2FzZSAxMDAxMzA6cmV0dXJuIDAhPSgxJmIpO2Nhc2UgMTAwMTMxOnJldHVybiAwIT09YjtjYXNlIDEwMDEzMjpyZXR1cm4gMDxiO2Nhc2UgMTAwMTMzOnJldHVybiAwPmI7Y2FzZSAxMDAxMzQ6cmV0dXJuIDI8PWJ8fC0yPj1ifXJldHVybiExfWZ1bmN0aW9uIEgoYSl7dmFyIGI9YS5hLGM9Yi5kO2MuYz1hLmQsYy5hPWIsQyhhKX1mdW5jdGlvbiBJKGEsYixjKXtmb3IoYT1iLGI9Yi5hO2EhPT1jOyl7YS5jPSExO3ZhciBkPW5hKGEpLGU9ZC5hO2lmKGUuYSE9PWIuYSl7aWYoIWQuYyl7SChhKTticmVha31lPXIoYi5jLmIsZS5iKSxEKGQsZSl9Yi5jIT09ZSYmKG8oJChlKSxlKSxvKGIsZSkpLEgoYSksYj1kLmEsYT1kfXJldHVybiBifWZ1bmN0aW9uIEooYSxiLGMsZCxlLGYpe3ZhciBnPSEwO2Rve0YoYSxiLGMuYiksYz1jLmN9d2hpbGUoYyE9PWQpO2ZvcihudWxsPT09ZSYmKGU9bmEoYikuYS5iLmMpO2Q9bmEoYiksYz1kLmEuYixjLmE9PT1lLmE7KWMuYyE9PWUmJihvKCQoYyksYyksbygkKGUpLGMpKSxkLmY9Yi5mLWMuZixkLmQ9RyhhLGQuZiksYi5iPSEwLCFnJiZOKGEsYikmJihBKGMsZSksQyhiKSxwKGUpKSxnPSExLGI9ZCxlPWM7Yi5iPSEwLGYmJlAoYSxiKX1mdW5jdGlvbiBLKGEsYixjLGQsZSl7dmFyIGY9W2IuZ1swXSxiLmdbMV0sYi5nWzJdXTtiLmQ9bnVsbCxiLmQ9YS5vP2EubyhmLGMsZCxhLmMpfHxudWxsOm51bGwsbnVsbD09PWIuZCYmKGU/YS5ufHwoWChhLDEwMDE1NiksYS5uPSEwKTpiLmQ9Y1swXSl9ZnVuY3Rpb24gTChhLGIsYyl7dmFyIGQ9W251bGwsbnVsbCxudWxsLG51bGxdO2RbMF09Yi5hLmQsZFsxXT1jLmEuZCxLKGEsYi5hLGQsWy41LC41LDAsMF0sITEpLG8oYixjKX1mdW5jdGlvbiBNKGEsYixjLGQsZSl7dmFyIGY9TWF0aC5hYnMoYi5iLWEuYikrTWF0aC5hYnMoYi5hLWEuYSksZz1NYXRoLmFicyhjLmItYS5iKStNYXRoLmFicyhjLmEtYS5hKSxoPWUrMTtkW2VdPS41KmcvKGYrZyksZFtoXT0uNSpmLyhmK2cpLGEuZ1swXSs9ZFtlXSpiLmdbMF0rZFtoXSpjLmdbMF0sYS5nWzFdKz1kW2VdKmIuZ1sxXStkW2hdKmMuZ1sxXSxhLmdbMl0rPWRbZV0qYi5nWzJdK2RbaF0qYy5nWzJdfWZ1bmN0aW9uIE4oYSxiKXt2YXIgYz1uYShiKSxmPWIuYSxoPWMuYTtpZihlKGYuYSxoLmEpKXtpZigwPGcoaC5iLmEsZi5hLGguYSkpcmV0dXJuITE7aWYoZChmLmEsaC5hKSl7aWYoZi5hIT09aC5hKXt2YXIgYz1hLmUsaT1mLmEuaDtpZigwPD1pKXt2YXIgYz1jLmIsaj1jLmQsaz1jLmUsbD1jLmMsbT1sW2ldO2pbbV09altjLmFdLGxbalttXV09bSxtPD0tLWMuYSYmKDE+PW0/a2EoYyxtKTplKGtbalttPj4xXV0sa1tqW21dXSk/a2EoYyxtKTpsYShjLG0pKSxrW2ldPW51bGwsbFtpXT1jLmIsYy5iPWl9ZWxzZSBmb3IoYy5jWy0oaSsxKV09bnVsbDswPGMuYSYmbnVsbD09PWMuY1tjLmRbYy5hLTFdXTspLS1jLmE7TChhLCQoaCksZil9fWVsc2UgcShoLmIpLG8oZiwkKGgpKSxiLmI9Yy5iPSEwfWVsc2V7aWYoMD5nKGYuYi5hLGguYSxmLmEpKXJldHVybiExO29hKGIpLmI9Yi5iPSEwLHEoZi5iKSxvKCQoaCksZil9cmV0dXJuITB9ZnVuY3Rpb24gTyhhLGIpe3ZhciBjPW5hKGIpLGs9Yi5hLGw9Yy5hLG49ay5hLHA9bC5hLHI9ay5iLmEscz1sLmIuYSx0PW5ldyBhYTtpZihnKHIsYS5hLG4pLGcocyxhLmEscCksbj09PXB8fE1hdGgubWluKG4uYSxyLmEpPk1hdGgubWF4KHAuYSxzLmEpKXJldHVybiExO2lmKGUobixwKSl7aWYoMDxnKHMsbixwKSlyZXR1cm4hMX1lbHNlIGlmKDA+ZyhyLHAsbikpcmV0dXJuITE7dmFyIHUsdix3PXIseD1uLHk9cyx6PXA7aWYoZSh3LHgpfHwodT13LHc9eCx4PXUpLGUoeSx6KXx8KHU9eSx5PXosej11KSxlKHcseSl8fCh1PXcsdz15LHk9dSx1PXgseD16LHo9dSksZSh5LHgpP2UoeCx6KT8odT1mKHcseSx4KSx2PWYoeSx4LHopLDA+dSt2JiYodT0tdSx2PS12KSx0LmI9bSh1LHkuYix2LHguYikpOih1PWcodyx5LHgpLHY9LWcodyx6LHgpLDA+dSt2JiYodT0tdSx2PS12KSx0LmI9bSh1LHkuYix2LHouYikpOnQuYj0oeS5iK3guYikvMixoKHcseCl8fCh1PXcsdz14LHg9dSksaCh5LHopfHwodT15LHk9eix6PXUpLGgodyx5KXx8KHU9dyx3PXkseT11LHU9eCx4PXosej11KSxoKHkseCk/aCh4LHopPyh1PWkodyx5LHgpLHY9aSh5LHgseiksMD51K3YmJih1PS11LHY9LXYpLHQuYT1tKHUseS5hLHYseC5hKSk6KHU9aih3LHkseCksdj0taih3LHoseCksMD51K3YmJih1PS11LHY9LXYpLHQuYT1tKHUseS5hLHYsei5hKSk6dC5hPSh5LmEreC5hKS8yLGUodCxhLmEpJiYodC5iPWEuYS5iLHQuYT1hLmEuYSksdz1lKG4scCk/bjpwLGUodyx0KSYmKHQuYj13LmIsdC5hPXcuYSksZCh0LG4pfHxkKHQscCkpcmV0dXJuIE4oYSxiKSwhMTtpZighZChyLGEuYSkmJjA8PWcocixhLmEsdCl8fCFkKHMsYS5hKSYmMD49ZyhzLGEuYSx0KSl7aWYocz09PWEuYSlyZXR1cm4gcShrLmIpLG8obC5iLGspLGI9RShiKSxrPW5hKGIpLmEsSShhLG5hKGIpLGMpLEooYSxiLCQoayksayxrLCEwKSwhMDtpZihyPT09YS5hKXtxKGwuYiksbyhrLmUsJChsKSksbj1jPWIscD1uLmEuYi5hO2Rve249b2Eobil9d2hpbGUobi5hLmIuYT09PXApO3JldHVybiBiPW4sbj1uYShiKS5hLmIuYyxjLmE9JChsKSxsPUkoYSxjLG51bGwpLEooYSxiLGwuYyxrLmIuYyxuLCEwKSwhMH1yZXR1cm4gMDw9ZyhyLGEuYSx0KSYmKG9hKGIpLmI9Yi5iPSEwLHEoay5iKSxrLmEuYj1hLmEuYixrLmEuYT1hLmEuYSksMD49ZyhzLGEuYSx0KSYmKGIuYj1jLmI9ITAscShsLmIpLGwuYS5iPWEuYS5iLGwuYS5hPWEuYS5hKSwhMX1yZXR1cm4gcShrLmIpLHEobC5iKSxvKCQobCksayksay5hLmI9dC5iLGsuYS5hPXQuYSxrLmEuaD1kYShhLmUsay5hKSxrPWsuYSxsPVswLDAsMCwwXSx0PVtuLmQsci5kLHAuZCxzLmRdLGsuZ1swXT1rLmdbMV09ay5nWzJdPTAsTShrLG4scixsLDApLE0oayxwLHMsbCwyKSxLKGEsayx0LGwsITApLG9hKGIpLmI9Yi5iPWMuYj0hMCwhMX1mdW5jdGlvbiBQKGEsYil7Zm9yKHZhciBjPW5hKGIpOzspe2Zvcig7Yy5iOyliPWMsYz1uYShjKTtpZighYi5iJiYoYz1iLG51bGw9PT0oYj1vYShiKSl8fCFiLmIpKWJyZWFrO2IuYj0hMTt2YXIgZCxmPWIuYSxoPWMuYTtpZihkPWYuYi5hIT09aC5iLmEpYTp7ZD1iO3ZhciBpPW5hKGQpLGo9ZC5hLGs9aS5hLGw9dm9pZCAwO2lmKGUoai5iLmEsay5iLmEpKXtpZigwPmcoai5iLmEsay5iLmEsai5hKSl7ZD0hMTticmVhayBhfW9hKGQpLmI9ZC5iPSEwLGw9cShqKSxvKGsuYixsKSxsLmQuYz1kLmR9ZWxzZXtpZigwPGcoay5iLmEsai5iLmEsay5hKSl7ZD0hMTticmVhayBhfWQuYj1pLmI9ITAsbD1xKGspLG8oai5lLGsuYiksbC5iLmQuYz1kLmR9ZD0hMH1pZihkJiYoYy5jPyhDKGMpLHAoaCksYz1uYShiKSxoPWMuYSk6Yi5jJiYoQyhiKSxwKGYpLGI9b2EoYyksZj1iLmEpKSxmLmEhPT1oLmEpaWYoZi5iLmE9PT1oLmIuYXx8Yi5jfHxjLmN8fGYuYi5hIT09YS5hJiZoLmIuYSE9PWEuYSlOKGEsYik7ZWxzZSBpZihPKGEsYikpYnJlYWs7Zi5hPT09aC5hJiZmLmIuYT09PWguYi5hJiYoQShoLGYpLEMoYikscChmKSxiPW9hKGMpKX19ZnVuY3Rpb24gUShhLGIpe2EuYT1iO2Zvcih2YXIgYz1iLmM7bnVsbD09PWMuaTspaWYoKGM9Yy5jKT09PWIuYyl7dmFyIGM9YSxmPWIsaD1uZXcgbWE7aC5hPWYuYy5iO3ZhciBpPWMuZixqPWkuYTtkb3tqPWouYX13aGlsZShudWxsIT09ai5iJiYhaS5jKGkuYixoLGouYikpO3ZhciBpPWouYixrPW5hKGkpLGg9aS5hLGo9ay5hO2lmKDA9PT1nKGguYi5hLGYsaC5hKSloPWkuYSxkKGguYSxmKXx8ZChoLmIuYSxmKXx8KHEoaC5iKSxpLmMmJihwKGguYyksaS5jPSExKSxvKGYuYyxoKSxRKGMsZikpO2Vsc2V7dmFyIGw9ZShqLmIuYSxoLmIuYSk/aTprLGs9dm9pZCAwO2kuZHx8bC5jPyhrPWw9PT1pP3IoZi5jLmIsaC5lKTpyKGouYi5jLmIsZi5jKS5iLGwuYz9EKGwsayk6KGg9YyxpPUYoYyxpLGspLGkuZj1vYShpKS5mK2kuYS5mLGkuZD1HKGgsaS5mKSksUShjLGYpKTpKKGMsaSxmLmMsZi5jLG51bGwsITApfXJldHVybn1pZihjPUUoYy5pKSxoPW5hKGMpLGk9aC5hLGg9SShhLGgsbnVsbCksaC5jPT09aSl7dmFyIGk9aCxoPWkuYyxqPW5hKGMpLGs9Yy5hLGw9ai5hLG09ITE7ay5iLmEhPT1sLmIuYSYmTyhhLGMpLGQoay5hLGEuYSkmJihvKCQoaCksayksYz1FKGMpLGg9bmEoYykuYSxJKGEsbmEoYyksaiksbT0hMCksZChsLmEsYS5hKSYmKG8oaSwkKGwpKSxpPUkoYSxqLG51bGwpLG09ITApLG0/SihhLGMsaS5jLGgsaCwhMCk6KGY9ZShsLmEsay5hKT8kKGwpOmssZj1yKGkuYy5iLGYpLEooYSxjLGYsZi5jLGYuYywhMSksZi5iLmkuYz0hMCxQKGEsYykpfWVsc2UgSihhLGMsaC5jLGksaSwhMCl9ZnVuY3Rpb24gUihhLGIpe3ZhciBjPW5ldyBtYSxkPW4oYS5iKTtkLmEuYj1xYSxkLmEuYT1iLGQuYi5hLmI9LXFhLGQuYi5hLmE9YixhLmE9ZC5iLmEsYy5hPWQsYy5mPTAsYy5kPSExLGMuYz0hMSxjLmg9ITAsYy5iPSExLGQ9YS5mLGQ9VChkLGQuYSxjKSxjLmU9ZH1mdW5jdGlvbiBTKGEpe3RoaXMuYT1uZXcgVSx0aGlzLmI9YSx0aGlzLmM9Qn1mdW5jdGlvbiBUKGEsYixjKXtkb3tiPWIuY313aGlsZShudWxsIT09Yi5iJiYhYS5jKGEuYixiLmIsYykpO3JldHVybiBhPW5ldyBVKGMsYi5hLGIpLGIuYS5jPWEsYi5hPWF9ZnVuY3Rpb24gVShhLGIsYyl7dGhpcy5iPWF8fG51bGwsdGhpcy5hPWJ8fHRoaXMsdGhpcy5jPWN8fHRoaXN9ZnVuY3Rpb24gVigpe3RoaXMuZD1yYSx0aGlzLnA9dGhpcy5iPXRoaXMucT1udWxsLHRoaXMuaj1bMCwwLDBdLHRoaXMucz0xMDAxMzAsdGhpcy5uPSExLHRoaXMubz10aGlzLmE9dGhpcy5lPXRoaXMuZj1udWxsLHRoaXMubT0hMSx0aGlzLmM9dGhpcy5yPXRoaXMuaT10aGlzLms9dGhpcy5sPXRoaXMuaD1udWxsfWZ1bmN0aW9uIFcoYSxiKXtpZihhLmQhPT1iKWZvcig7YS5kIT09YjspaWYoYS5kPGIpc3dpdGNoKGEuZCl7Y2FzZSByYTpYKGEsMTAwMTUxKSxhLnUobnVsbCk7YnJlYWs7Y2FzZSAxOlgoYSwxMDAxNTIpLGEudCgpfWVsc2Ugc3dpdGNoKGEuZCl7Y2FzZSAyOlgoYSwxMDAxNTQpLGEudigpO2JyZWFrO2Nhc2UgMTpYKGEsMTAwMTUzKSxhLncoKX19ZnVuY3Rpb24gWChhLGIpe2EucCYmYS5wKGIsYS5jKX1mdW5jdGlvbiBZKGEsYil7dGhpcy5iPWF8fHRoaXMsdGhpcy5kPWJ8fHRoaXMsdGhpcy5hPW51bGwsdGhpcy5jPSExfWZ1bmN0aW9uIFooKXt0aGlzLmg9dGhpcyx0aGlzLmk9dGhpcy5kPXRoaXMuYT10aGlzLmU9dGhpcy5jPXRoaXMuYj1udWxsLHRoaXMuZj0wfWZ1bmN0aW9uICQoYSl7cmV0dXJuIGEuYi5lfWZ1bmN0aW9uIF8oKXt0aGlzLmM9bmV3IGFhLHRoaXMuYT1uZXcgWSx0aGlzLmI9bmV3IFosdGhpcy5kPW5ldyBaLHRoaXMuYi5iPXRoaXMuZCx0aGlzLmQuYj10aGlzLmJ9ZnVuY3Rpb24gYWEoYSxiKXt0aGlzLmU9YXx8dGhpcyx0aGlzLmY9Ynx8dGhpcyx0aGlzLmQ9dGhpcy5jPW51bGwsdGhpcy5nPVswLDAsMF0sdGhpcy5oPXRoaXMuYT10aGlzLmI9MH1mdW5jdGlvbiBiYSgpe3RoaXMuYz1bXSx0aGlzLmQ9bnVsbCx0aGlzLmE9MCx0aGlzLmU9ITEsdGhpcy5iPW5ldyBmYX1mdW5jdGlvbiBjYShhKXthLmQ9W107Zm9yKHZhciBiPTA7YjxhLmE7YisrKWEuZFtiXT1iO2EuZC5zb3J0KGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3JldHVybiBlKGFbYl0sYVtjXSk/MTotMX19KGEuYykpLGEuZT0hMCxoYShhLmIpfWZ1bmN0aW9uIGRhKGEsYil7aWYoYS5lKXt2YXIgYz1hLmIsZD0rK2MuYTsyKmQ+Yy5mJiYoYy5mKj0yLGMuYz1nYShjLmMsYy5mKzEpKTt2YXIgZTtyZXR1cm4gMD09PWMuYj9lPWQ6KGU9Yy5iLGMuYj1jLmNbYy5iXSksYy5lW2VdPWIsYy5jW2VdPWQsYy5kW2RdPWUsYy5oJiZsYShjLGQpLGV9cmV0dXJuIGM9YS5hKyssYS5jW2NdPWIsLShjKzEpfWZ1bmN0aW9uIGVhKGEpe2lmKDA9PT1hLmEpcmV0dXJuIGphKGEuYik7dmFyIGI9YS5jW2EuZFthLmEtMV1dO2lmKDAhPT1hLmIuYSYmZShpYShhLmIpLGIpKXJldHVybiBqYShhLmIpO2Rvey0tYS5hfXdoaWxlKDA8YS5hJiZudWxsPT09YS5jW2EuZFthLmEtMV1dKTtyZXR1cm4gYn1mdW5jdGlvbiBmYSgpe3RoaXMuZD1nYShbMF0sMzMpLHRoaXMuZT1bbnVsbCxudWxsXSx0aGlzLmM9WzAsMF0sdGhpcy5hPTAsdGhpcy5mPTMyLHRoaXMuYj0wLHRoaXMuaD0hMSx0aGlzLmRbMV09MX1mdW5jdGlvbiBnYShhLGIpe2Zvcih2YXIgYz1BcnJheShiKSxkPTA7ZDxhLmxlbmd0aDtkKyspY1tkXT1hW2RdO2Zvcig7ZDxiO2QrKyljW2RdPTA7cmV0dXJuIGN9ZnVuY3Rpb24gaGEoYSl7Zm9yKHZhciBiPWEuYTsxPD1iOy0tYilrYShhLGIpO2EuaD0hMH1mdW5jdGlvbiBpYShhKXtyZXR1cm4gYS5lW2EuZFsxXV19ZnVuY3Rpb24gamEoYSl7dmFyIGI9YS5kLGM9YS5lLGQ9YS5jLGU9YlsxXSxmPWNbZV07cmV0dXJuIDA8YS5hJiYoYlsxXT1iW2EuYV0sZFtiWzFdXT0xLGNbZV09bnVsbCxkW2VdPWEuYixhLmI9ZSwwPC0tYS5hJiZrYShhLDEpKSxmfWZ1bmN0aW9uIGthKGEsYil7Zm9yKHZhciBjPWEuZCxkPWEuZSxmPWEuYyxnPWIsaD1jW2ddOzspe3ZhciBpPWc8PDE7aTxhLmEmJmUoZFtjW2krMV1dLGRbY1tpXV0pJiYoaSs9MSk7dmFyIGo9Y1tpXTtpZihpPmEuYXx8ZShkW2hdLGRbal0pKXtjW2ddPWgsZltoXT1nO2JyZWFrfWNbZ109aixmW2pdPWcsZz1pfX1mdW5jdGlvbiBsYShhLGIpe2Zvcih2YXIgYz1hLmQsZD1hLmUsZj1hLmMsZz1iLGg9Y1tnXTs7KXt2YXIgaT1nPj4xLGo9Y1tpXTtpZigwPT09aXx8ZShkW2pdLGRbaF0pKXtjW2ddPWgsZltoXT1nO2JyZWFrfWNbZ109aixmW2pdPWcsZz1pfX1mdW5jdGlvbiBtYSgpe3RoaXMuZT10aGlzLmE9bnVsbCx0aGlzLmY9MCx0aGlzLmM9dGhpcy5iPXRoaXMuaD10aGlzLmQ9ITF9ZnVuY3Rpb24gbmEoYSl7cmV0dXJuIGEuZS5jLmJ9ZnVuY3Rpb24gb2EoYSl7cmV0dXJuIGEuZS5hLmJ9dmFyIHBhLHFhPTRlMTUwLHJhPTA7cGE9Vi5wcm90b3R5cGUscGEueD1mdW5jdGlvbigpe1codGhpcyxyYSl9LHBhLkI9ZnVuY3Rpb24oYSxiKXtzd2l0Y2goYSl7Y2FzZSAxMDAxNDI6cmV0dXJuO2Nhc2UgMTAwMTQwOnN3aXRjaChiKXtjYXNlIDEwMDEzMDpjYXNlIDEwMDEzMTpjYXNlIDEwMDEzMjpjYXNlIDEwMDEzMzpjYXNlIDEwMDEzNDpyZXR1cm4gdm9pZCh0aGlzLnM9Yil9YnJlYWs7Y2FzZSAxMDAxNDE6cmV0dXJuIHZvaWQodGhpcy5tPSEhYik7ZGVmYXVsdDpyZXR1cm4gdm9pZCBYKHRoaXMsMTAwOTAwKX1YKHRoaXMsMTAwOTAxKX0scGEueT1mdW5jdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAxMDAxNDI6cmV0dXJuIDA7Y2FzZSAxMDAxNDA6cmV0dXJuIHRoaXMucztjYXNlIDEwMDE0MTpyZXR1cm4gdGhpcy5tO2RlZmF1bHQ6WCh0aGlzLDEwMDkwMCl9cmV0dXJuITF9LHBhLkE9ZnVuY3Rpb24oYSxiLGMpe3RoaXMualswXT1hLHRoaXMualsxXT1iLHRoaXMualsyXT1jfSxwYS56PWZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8bnVsbDtzd2l0Y2goYSl7Y2FzZSAxMDAxMDA6Y2FzZSAxMDAxMDY6dGhpcy5oPWM7YnJlYWs7Y2FzZSAxMDAxMDQ6Y2FzZSAxMDAxMTA6dGhpcy5sPWM7YnJlYWs7Y2FzZSAxMDAxMDE6Y2FzZSAxMDAxMDc6dGhpcy5rPWM7YnJlYWs7Y2FzZSAxMDAxMDI6Y2FzZSAxMDAxMDg6dGhpcy5pPWM7YnJlYWs7Y2FzZSAxMDAxMDM6Y2FzZSAxMDAxMDk6dGhpcy5wPWM7YnJlYWs7Y2FzZSAxMDAxMDU6Y2FzZSAxMDAxMTE6dGhpcy5vPWM7YnJlYWs7Y2FzZSAxMDAxMTI6dGhpcy5yPWM7YnJlYWs7ZGVmYXVsdDpYKHRoaXMsMTAwOTAwKX19LHBhLkM9ZnVuY3Rpb24oYSxiKXt2YXIgYz0hMSxkPVswLDAsMF07Vyh0aGlzLDIpO2Zvcih2YXIgZT0wOzM+ZTsrK2Upe3ZhciBmPWFbZV07LTFlMTUwPmYmJihmPS0xZTE1MCxjPSEwKSwxZTE1MDxmJiYoZj0xZTE1MCxjPSEwKSxkW2VdPWZ9YyYmWCh0aGlzLDEwMDE1NSksYz10aGlzLnEsbnVsbD09PWM/KGM9bih0aGlzLmIpLG8oYyxjLmIpKToocShjKSxjPWMuZSksYy5hLmQ9YixjLmEuZ1swXT1kWzBdLGMuYS5nWzFdPWRbMV0sYy5hLmdbMl09ZFsyXSxjLmY9MSxjLmIuZj0tMSx0aGlzLnE9Y30scGEudT1mdW5jdGlvbihhKXtXKHRoaXMscmEpLHRoaXMuZD0xLHRoaXMuYj1uZXcgXyx0aGlzLmM9YX0scGEudD1mdW5jdGlvbigpe1codGhpcywxKSx0aGlzLmQ9Mix0aGlzLnE9bnVsbH0scGEudj1mdW5jdGlvbigpe1codGhpcywyKSx0aGlzLmQ9MX0scGEudz1mdW5jdGlvbigpe1codGhpcywxKSx0aGlzLmQ9cmE7dmFyIGE9dGhpcy5qWzBdLGI9dGhpcy5qWzFdLGM9dGhpcy5qWzJdLGY9ITEsaD1bYSxiLGNdO2lmKDA9PT1hJiYwPT09YiYmMD09PWMpe2Zvcih2YXIgYj1bLTJlMTUwLC0yZTE1MCwtMmUxNTBdLGk9WzJlMTUwLDJlMTUwLDJlMTUwXSxjPVtdLGo9W10sZj10aGlzLmIuYyxhPWYuZTthIT09ZjthPWEuZSlmb3IodmFyIG09MDszPm07KyttKXt2YXIgbj1hLmdbbV07bjxpW21dJiYoaVttXT1uLGpbbV09YSksbj5iW21dJiYoYlttXT1uLGNbbV09YSl9aWYoYT0wLGJbMV0taVsxXT5iWzBdLWlbMF0mJihhPTEpLGJbMl0taVsyXT5iW2FdLWlbYV0mJihhPTIpLGlbYV0+PWJbYV0paFswXT0wLGhbMV09MCxoWzJdPTE7ZWxzZXtmb3IoYj0wLGk9althXSxjPWNbYV0saj1bMCwwLDBdLGk9W2kuZ1swXS1jLmdbMF0saS5nWzFdLWMuZ1sxXSxpLmdbMl0tYy5nWzJdXSxtPVswLDAsMF0sYT1mLmU7YSE9PWY7YT1hLmUpbVswXT1hLmdbMF0tYy5nWzBdLG1bMV09YS5nWzFdLWMuZ1sxXSxtWzJdPWEuZ1syXS1jLmdbMl0salswXT1pWzFdKm1bMl0taVsyXSptWzFdLGpbMV09aVsyXSptWzBdLWlbMF0qbVsyXSxqWzJdPWlbMF0qbVsxXS1pWzFdKm1bMF0sKG49alswXSpqWzBdK2pbMV0qalsxXStqWzJdKmpbMl0pPmImJihiPW4saFswXT1qWzBdLGhbMV09alsxXSxoWzJdPWpbMl0pOzA+PWImJihoWzBdPWhbMV09aFsyXT0wLGhbeihpKV09MSl9Zj0hMH1mb3Ioaj16KGgpLGE9dGhpcy5iLmMsYj0oaisxKSUzLGM9KGorMiklMyxqPTA8aFtqXT8xOi0xLGg9YS5lO2ghPT1hO2g9aC5lKWguYj1oLmdbYl0saC5hPWoqaC5nW2NdO2lmKGYpe2ZvcihoPTAsZj10aGlzLmIuYSxhPWYuYjthIT09ZjthPWEuYilpZihiPWEuYSwhKDA+PWIuZikpZG97aCs9KGIuYS5iLWIuYi5hLmIpKihiLmEuYStiLmIuYS5hKSxiPWIuZX13aGlsZShiIT09YS5hKTtpZigwPmgpZm9yKGg9dGhpcy5iLmMsZj1oLmU7ZiE9PWg7Zj1mLmUpZi5hPS1mLmF9Zm9yKHRoaXMubj0hMSxoPXRoaXMuYi5iLGE9aC5oO2EhPT1oO2E9ZilmPWEuaCxiPWEuZSxkKGEuYSxhLmIuYSkmJmEuZS5lIT09YSYmKEwodGhpcyxiLGEpLHAoYSksYT1iLGI9YS5lKSxiLmU9PT1hJiYoYiE9PWEmJihiIT09ZiYmYiE9PWYuYnx8KGY9Zi5oKSxwKGIpKSxhIT09ZiYmYSE9PWYuYnx8KGY9Zi5oKSxwKGEpKTtmb3IodGhpcy5lPWg9bmV3IGJhLGY9dGhpcy5iLmMsYT1mLmU7YSE9PWY7YT1hLmUpYS5oPWRhKGgsYSk7Zm9yKGNhKGgpLHRoaXMuZj1uZXcgUyh0aGlzKSxSKHRoaXMsLXFhKSxSKHRoaXMscWEpO251bGwhPT0oaD1lYSh0aGlzLmUpKTspe2Zvcig7Oyl7YTppZihhPXRoaXMuZSwwPT09YS5hKWY9aWEoYS5iKTtlbHNlIGlmKGY9YS5jW2EuZFthLmEtMV1dLDAhPT1hLmIuYSYmKGE9aWEoYS5iKSxlKGEsZikpKXtmPWE7YnJlYWsgYX1pZihudWxsPT09Znx8IWQoZixoKSlicmVhaztmPWVhKHRoaXMuZSksTCh0aGlzLGguYyxmLmMpfVEodGhpcyxoKX1mb3IodGhpcy5hPXRoaXMuZi5hLmEuYi5hLmEsaD0wO251bGwhPT0oZj10aGlzLmYuYS5hLmIpOylmLmh8fCsraCxDKGYpO2Zvcih0aGlzLmY9bnVsbCxoPXRoaXMuZSxoLmI9bnVsbCxoLmQ9bnVsbCx0aGlzLmU9aC5jPW51bGwsaD10aGlzLmIsYT1oLmEuYjthIT09aC5hO2E9ZilmPWEuYixhPWEuYSxhLmUuZT09PWEmJihBKGEuYyxhKSxwKGEpKTtpZighdGhpcy5uKXtpZihoPXRoaXMuYix0aGlzLm0pZm9yKGE9aC5iLmg7YSE9PWguYjthPWYpZj1hLmgsYS5iLmQuYyE9PWEuZC5jP2EuZj1hLmQuYz8xOi0xOnAoYSk7ZWxzZSBmb3IoYT1oLmEuYjthIT09aC5hO2E9ZilpZihmPWEuYixhLmMpe2ZvcihhPWEuYTtlKGEuYi5hLGEuYSk7YT1hLmMuYik7Zm9yKDtlKGEuYSxhLmIuYSk7YT1hLmUpO2ZvcihiPWEuYy5iLGM9dm9pZCAwO2EuZSE9PWI7KWlmKGUoYS5iLmEsYi5hKSl7Zm9yKDtiLmUhPT1hJiYoayhiLmUpfHwwPj1nKGIuYSxiLmIuYSxiLmUuYi5hKSk7KWM9cihiLmUsYiksYj1jLmI7Yj1iLmMuYn1lbHNle2Zvcig7Yi5lIT09YSYmKGwoYS5jLmIpfHwwPD1nKGEuYi5hLGEuYSxhLmMuYi5hKSk7KWM9cihhLGEuYy5iKSxhPWMuYjthPWEuZX1mb3IoO2IuZS5lIT09YTspYz1yKGIuZSxiKSxiPWMuYn1pZih0aGlzLmh8fHRoaXMuaXx8dGhpcy5rfHx0aGlzLmwpaWYodGhpcy5tKXtmb3IoaD10aGlzLmIsZj1oLmEuYjtmIT09aC5hO2Y9Zi5iKWlmKGYuYyl7dGhpcy5oJiZ0aGlzLmgoMix0aGlzLmMpLGE9Zi5hO2Rve3RoaXMuayYmdGhpcy5rKGEuYS5kLHRoaXMuYyksYT1hLmV9d2hpbGUoYSE9PWYuYSk7dGhpcy5pJiZ0aGlzLmkodGhpcy5jKX19ZWxzZXtmb3IoaD10aGlzLmIsZj0hIXRoaXMubCxhPSExLGI9LTEsYz1oLmEuZDtjIT09aC5hO2M9Yy5kKWlmKGMuYyl7YXx8KHRoaXMuaCYmdGhpcy5oKDQsdGhpcy5jKSxhPSEwKSxqPWMuYTtkb3tmJiYoaT1qLmIuZC5jPzA6MSxiIT09aSYmKGI9aSx0aGlzLmwmJnRoaXMubCghIWIsdGhpcy5jKSkpLHRoaXMuayYmdGhpcy5rKGouYS5kLHRoaXMuYyksaj1qLmV9d2hpbGUoaiE9PWMuYSl9YSYmdGhpcy5pJiZ0aGlzLmkodGhpcy5jKX1pZih0aGlzLnIpe2ZvcihoPXRoaXMuYixhPWguYS5iO2EhPT1oLmE7YT1mKWlmKGY9YS5iLCFhLmMpe2I9YS5hLGM9Yi5lLGo9dm9pZCAwO2Rve2o9YyxjPWouZSxqLmQ9bnVsbCxudWxsPT09ai5iLmQmJihqLmM9PT1qP3goai5hLG51bGwpOihqLmEuYz1qLmMsdChqLCQoaikpKSxpPWouYixpLmM9PT1pP3goaS5hLG51bGwpOihpLmEuYz1pLmMsdChpLCQoaSkpKSx3KGopKX13aGlsZShqIT09Yik7Yj1hLmQsYT1hLmIsYS5kPWIsYi5iPWF9cmV0dXJuIHRoaXMucih0aGlzLmIpLHZvaWQodGhpcy5jPXRoaXMuYj1udWxsKX19dGhpcy5iPXRoaXMuYz1udWxsfSx0aGlzLmxpYnRlc3M9e0dsdVRlc3NlbGF0b3I6Vix3aW5kaW5nUnVsZTp7R0xVX1RFU1NfV0lORElOR19PREQ6MTAwMTMwLEdMVV9URVNTX1dJTkRJTkdfTk9OWkVSTzoxMDAxMzEsR0xVX1RFU1NfV0lORElOR19QT1NJVElWRToxMDAxMzIsR0xVX1RFU1NfV0lORElOR19ORUdBVElWRToxMDAxMzMsR0xVX1RFU1NfV0lORElOR19BQlNfR0VRX1RXTzoxMDAxMzR9LHByaW1pdGl2ZVR5cGU6e0dMX0xJTkVfTE9PUDoyLEdMX1RSSUFOR0xFUzo0LEdMX1RSSUFOR0xFX1NUUklQOjUsR0xfVFJJQU5HTEVfRkFOOjZ9LGVycm9yVHlwZTp7R0xVX1RFU1NfTUlTU0lOR19CRUdJTl9QT0xZR09OOjEwMDE1MSxHTFVfVEVTU19NSVNTSU5HX0VORF9QT0xZR09OOjEwMDE1MyxHTFVfVEVTU19NSVNTSU5HX0JFR0lOX0NPTlRPVVI6MTAwMTUyLEdMVV9URVNTX01JU1NJTkdfRU5EX0NPTlRPVVI6MTAwMTU0LEdMVV9URVNTX0NPT1JEX1RPT19MQVJHRToxMDAxNTUsR0xVX1RFU1NfTkVFRF9DT01CSU5FX0NBTExCQUNLOjEwMDE1Nn0sZ2x1RW51bTp7R0xVX1RFU1NfTUVTSDoxMDAxMTIsR0xVX1RFU1NfVE9MRVJBTkNFOjEwMDE0MixHTFVfVEVTU19XSU5ESU5HX1JVTEU6MTAwMTQwLEdMVV9URVNTX0JPVU5EQVJZX09OTFk6MTAwMTQxLEdMVV9JTlZBTElEX0VOVU06MTAwOTAwLEdMVV9JTlZBTElEX1ZBTFVFOjEwMDkwMSxHTFVfVEVTU19CRUdJTjoxMDAxMDAsR0xVX1RFU1NfVkVSVEVYOjEwMDEwMSxHTFVfVEVTU19FTkQ6MTAwMTAyLEdMVV9URVNTX0VSUk9SOjEwMDEwMyxHTFVfVEVTU19FREdFX0ZMQUc6MTAwMTA0LEdMVV9URVNTX0NPTUJJTkU6MTAwMTA1LEdMVV9URVNTX0JFR0lOX0RBVEE6MTAwMTA2LEdMVV9URVNTX1ZFUlRFWF9EQVRBOjEwMDEwNyxHTFVfVEVTU19FTkRfREFUQToxMDAxMDgsR0xVX1RFU1NfRVJST1JfREFUQToxMDAxMDksR0xVX1RFU1NfRURHRV9GTEFHX0RBVEE6MTAwMTEwLEdMVV9URVNTX0NPTUJJTkVfREFUQToxMDAxMTF9fSxWLnByb3RvdHlwZS5nbHVEZWxldGVUZXNzPVYucHJvdG90eXBlLngsVi5wcm90b3R5cGUuZ2x1VGVzc1Byb3BlcnR5PVYucHJvdG90eXBlLkIsVi5wcm90b3R5cGUuZ2x1R2V0VGVzc1Byb3BlcnR5PVYucHJvdG90eXBlLnksVi5wcm90b3R5cGUuZ2x1VGVzc05vcm1hbD1WLnByb3RvdHlwZS5BLFYucHJvdG90eXBlLmdsdVRlc3NDYWxsYmFjaz1WLnByb3RvdHlwZS56LFYucHJvdG90eXBlLmdsdVRlc3NWZXJ0ZXg9Vi5wcm90b3R5cGUuQyxWLnByb3RvdHlwZS5nbHVUZXNzQmVnaW5Qb2x5Z29uPVYucHJvdG90eXBlLnUsVi5wcm90b3R5cGUuZ2x1VGVzc0JlZ2luQ29udG91cj1WLnByb3RvdHlwZS50LFYucHJvdG90eXBlLmdsdVRlc3NFbmRDb250b3VyPVYucHJvdG90eXBlLnYsVi5wcm90b3R5cGUuZ2x1VGVzc0VuZFBvbHlnb249Vi5wcm90b3R5cGUudyx2b2lkIDAhPT1iJiYoYi5leHBvcnRzPXRoaXMubGlidGVzcyl9LHt9XSwxMDpbZnVuY3Rpb24oYixjLGQpeyhmdW5jdGlvbihlKXshZnVuY3Rpb24oYixlKXtcIm9iamVjdFwiPT10eXBlb2YgZCYmdm9pZCAwIT09Yz9lKGQpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJmEuYW1kP2EoW1wiZXhwb3J0c1wiXSxlKTplKGIub3BlbnR5cGU9e30pfSh0aGlzLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGMoKXt0aGlzLnRhYmxlPW5ldyBVaW50MTZBcnJheSgxNiksdGhpcy50cmFucz1uZXcgVWludDE2QXJyYXkoMjg4KX1mdW5jdGlvbiBkKGEsYil7dGhpcy5zb3VyY2U9YSx0aGlzLnNvdXJjZUluZGV4PTAsdGhpcy50YWc9MCx0aGlzLmJpdGNvdW50PTAsdGhpcy5kZXN0PWIsdGhpcy5kZXN0TGVuPTAsdGhpcy5sdHJlZT1uZXcgYyx0aGlzLmR0cmVlPW5ldyBjfWZ1bmN0aW9uIGYoYSxiLGMsZCl7dmFyIGUsZjtmb3IoZT0wO2U8YzsrK2UpYVtlXT0wO2ZvcihlPTA7ZTwzMC1jOysrZSlhW2UrY109ZS9jfDA7Zm9yKGY9ZCxlPTA7ZTwzMDsrK2UpYltlXT1mLGYrPTE8PGFbZV19ZnVuY3Rpb24gZyhhLGIpe3ZhciBjO2ZvcihjPTA7Yzw3OysrYylhLnRhYmxlW2NdPTA7Zm9yKGEudGFibGVbN109MjQsYS50YWJsZVs4XT0xNTIsYS50YWJsZVs5XT0xMTIsYz0wO2M8MjQ7KytjKWEudHJhbnNbY109MjU2K2M7Zm9yKGM9MDtjPDE0NDsrK2MpYS50cmFuc1syNCtjXT1jO2ZvcihjPTA7Yzw4OysrYylhLnRyYW5zWzE2OCtjXT0yODArYztmb3IoYz0wO2M8MTEyOysrYylhLnRyYW5zWzE3NitjXT0xNDQrYztmb3IoYz0wO2M8NTsrK2MpYi50YWJsZVtjXT0wO2ZvcihiLnRhYmxlWzVdPTMyLGM9MDtjPDMyOysrYyliLnRyYW5zW2NdPWN9ZnVuY3Rpb24gaChhLGIsYyxkKXt2YXIgZSxmO2ZvcihlPTA7ZTwxNjsrK2UpYS50YWJsZVtlXT0wO2ZvcihlPTA7ZTxkOysrZSlhLnRhYmxlW2JbYytlXV0rKztmb3IoYS50YWJsZVswXT0wLGY9MCxlPTA7ZTwxNjsrK2UpdmVbZV09ZixmKz1hLnRhYmxlW2VdO2ZvcihlPTA7ZTxkOysrZSliW2MrZV0mJihhLnRyYW5zW3ZlW2JbYytlXV0rK109ZSl9ZnVuY3Rpb24gaShhKXthLmJpdGNvdW50LS18fChhLnRhZz1hLnNvdXJjZVthLnNvdXJjZUluZGV4KytdLGEuYml0Y291bnQ9Nyk7dmFyIGI9MSZhLnRhZztyZXR1cm4gYS50YWc+Pj49MSxifWZ1bmN0aW9uIGooYSxiLGMpe2lmKCFiKXJldHVybiBjO2Zvcig7YS5iaXRjb3VudDwyNDspYS50YWd8PWEuc291cmNlW2Euc291cmNlSW5kZXgrK108PGEuYml0Y291bnQsYS5iaXRjb3VudCs9ODt2YXIgZD1hLnRhZyY2NTUzNT4+PjE2LWI7cmV0dXJuIGEudGFnPj4+PWIsYS5iaXRjb3VudC09YixkK2N9ZnVuY3Rpb24gayhhLGIpe2Zvcig7YS5iaXRjb3VudDwyNDspYS50YWd8PWEuc291cmNlW2Euc291cmNlSW5kZXgrK108PGEuYml0Y291bnQsYS5iaXRjb3VudCs9ODt2YXIgYz0wLGQ9MCxlPTAsZj1hLnRhZztkb3tkPTIqZCsoMSZmKSxmPj4+PTEsKytlLGMrPWIudGFibGVbZV0sZC09Yi50YWJsZVtlXX13aGlsZShkPj0wKTtyZXR1cm4gYS50YWc9ZixhLmJpdGNvdW50LT1lLGIudHJhbnNbYytkXX1mdW5jdGlvbiBsKGEsYixjKXt2YXIgZCxlLGYsZyxpLGw7Zm9yKGQ9aihhLDUsMjU3KSxlPWooYSw1LDEpLGY9aihhLDQsNCksZz0wO2c8MTk7KytnKXVlW2ddPTA7Zm9yKGc9MDtnPGY7KytnKXt2YXIgbT1qKGEsMywwKTt1ZVtzZVtnXV09bX1mb3IoaCh0ZSx1ZSwwLDE5KSxpPTA7aTxkK2U7KXt2YXIgbj1rKGEsdGUpO3N3aXRjaChuKXtjYXNlIDE2OnZhciBvPXVlW2ktMV07Zm9yKGw9aihhLDIsMyk7bDstLWwpdWVbaSsrXT1vO2JyZWFrO2Nhc2UgMTc6Zm9yKGw9aihhLDMsMyk7bDstLWwpdWVbaSsrXT0wO2JyZWFrO2Nhc2UgMTg6Zm9yKGw9aihhLDcsMTEpO2w7LS1sKXVlW2krK109MDticmVhaztkZWZhdWx0OnVlW2krK109bn19aChiLHVlLDAsZCksaChjLHVlLGQsZSl9ZnVuY3Rpb24gbShhLGIsYyl7Zm9yKDs7KXt2YXIgZD1rKGEsYik7aWYoMjU2PT09ZClyZXR1cm4ga2U7aWYoZDwyNTYpYS5kZXN0W2EuZGVzdExlbisrXT1kO2Vsc2V7dmFyIGUsZixnLGg7Zm9yKGQtPTI1NyxlPWooYSxvZVtkXSxwZVtkXSksZj1rKGEsYyksZz1hLmRlc3RMZW4taihhLHFlW2ZdLHJlW2ZdKSxoPWc7aDxnK2U7KytoKWEuZGVzdFthLmRlc3RMZW4rK109YS5kZXN0W2hdfX19ZnVuY3Rpb24gbihhKXtmb3IodmFyIGIsYyxkO2EuYml0Y291bnQ+ODspYS5zb3VyY2VJbmRleC0tLGEuYml0Y291bnQtPTg7aWYoYj1hLnNvdXJjZVthLnNvdXJjZUluZGV4KzFdLGI9MjU2KmIrYS5zb3VyY2VbYS5zb3VyY2VJbmRleF0sYz1hLnNvdXJjZVthLnNvdXJjZUluZGV4KzNdLGM9MjU2KmMrYS5zb3VyY2VbYS5zb3VyY2VJbmRleCsyXSxiIT09KDY1NTM1Jn5jKSlyZXR1cm4gbGU7Zm9yKGEuc291cmNlSW5kZXgrPTQsZD1iO2Q7LS1kKWEuZGVzdFthLmRlc3RMZW4rK109YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsrXTtyZXR1cm4gYS5iaXRjb3VudD0wLGtlfWZ1bmN0aW9uIG8oYSxiKXt2YXIgYyxlLGY9bmV3IGQoYSxiKTtkb3tzd2l0Y2goYz1pKGYpLGooZiwyLDApKXtjYXNlIDA6ZT1uKGYpO2JyZWFrO2Nhc2UgMTplPW0oZixtZSxuZSk7YnJlYWs7Y2FzZSAyOmwoZixmLmx0cmVlLGYuZHRyZWUpLGU9bShmLGYubHRyZWUsZi5kdHJlZSk7YnJlYWs7ZGVmYXVsdDplPWxlfWlmKGUhPT1rZSl0aHJvdyBuZXcgRXJyb3IoXCJEYXRhIGVycm9yXCIpfXdoaWxlKCFjKTtyZXR1cm4gZi5kZXN0TGVuPGYuZGVzdC5sZW5ndGg/XCJmdW5jdGlvblwiPT10eXBlb2YgZi5kZXN0LnNsaWNlP2YuZGVzdC5zbGljZSgwLGYuZGVzdExlbik6Zi5kZXN0LnN1YmFycmF5KDAsZi5kZXN0TGVuKTpmLmRlc3R9ZnVuY3Rpb24gcChhLGIsYyxkLGUpe3JldHVybiBNYXRoLnBvdygxLWUsMykqYSszKk1hdGgucG93KDEtZSwyKSplKmIrMyooMS1lKSpNYXRoLnBvdyhlLDIpKmMrTWF0aC5wb3coZSwzKSpkfWZ1bmN0aW9uIHEoKXt0aGlzLngxPU51bWJlci5OYU4sdGhpcy55MT1OdW1iZXIuTmFOLHRoaXMueDI9TnVtYmVyLk5hTix0aGlzLnkyPU51bWJlci5OYU59ZnVuY3Rpb24gcigpe3RoaXMuY29tbWFuZHM9W10sdGhpcy5maWxsPVwiYmxhY2tcIix0aGlzLnN0cm9rZT1udWxsLHRoaXMuc3Ryb2tlV2lkdGg9MX1mdW5jdGlvbiBzKGEpe3Rocm93IG5ldyBFcnJvcihhKX1mdW5jdGlvbiB0KGEsYil7YXx8cyhiKX1mdW5jdGlvbiB1KGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhfX1mdW5jdGlvbiB2KGEpe3JldHVybiBhPj0tMTI4JiZhPD0xMjd9ZnVuY3Rpb24gdyhhLGIsYyl7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aDtiPGUmJmQ8NjQmJjA9PT1hW2JdOykrK2IsKytkO3JldHVybiBjLnB1c2goMTI4fGQtMSksYn1mdW5jdGlvbiB4KGEsYixjKXtmb3IodmFyIGQ9MCxlPWEubGVuZ3RoLGY9YjtmPGUmJmQ8NjQ7KXt2YXIgZz1hW2ZdO2lmKCF2KGcpKWJyZWFrO2lmKDA9PT1nJiZmKzE8ZSYmMD09PWFbZisxXSlicmVhazsrK2YsKytkfWMucHVzaChkLTEpO2Zvcih2YXIgaD1iO2g8ZjsrK2gpYy5wdXNoKGFbaF0rMjU2JjI1NSk7cmV0dXJuIGZ9ZnVuY3Rpb24geShhLGIsYyl7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aCxmPWI7ZjxlJiZkPDY0Oyl7dmFyIGc9YVtmXTtpZigwPT09ZylicmVhaztpZih2KGcpJiZmKzE8ZSYmdihhW2YrMV0pKWJyZWFrOysrZiwrK2R9Yy5wdXNoKDY0fGQtMSk7Zm9yKHZhciBoPWI7aDxmOysraCl7dmFyIGk9YVtoXTtjLnB1c2goaSs2NTUzNj4+OCYyNTUsaSsyNTYmMjU1KX1yZXR1cm4gZn1mdW5jdGlvbiB6KGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPTA7ZTxiLmxlbmd0aDtlKz0xKXt2YXIgZj1iW2VdO2RbZi5uYW1lXT1mLnZhbHVlfWlmKHRoaXMudGFibGVOYW1lPWEsdGhpcy5maWVsZHM9YixjKWZvcih2YXIgZz1PYmplY3Qua2V5cyhjKSxoPTA7aDxnLmxlbmd0aDtoKz0xKXt2YXIgaT1nW2hdLGo9Y1tpXTt2b2lkIDAhPT1kW2ldJiYoZFtpXT1qKX19ZnVuY3Rpb24gQShhLGIsYyl7dm9pZCAwPT09YyYmKGM9Yi5sZW5ndGgpO3ZhciBkPW5ldyBBcnJheShiLmxlbmd0aCsxKTtkWzBdPXtuYW1lOmErXCJDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjfTtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKylkW2UrMV09e25hbWU6YStlLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpiW2VdfTtyZXR1cm4gZH1mdW5jdGlvbiBCKGEsYixjKXt2YXIgZD1iLmxlbmd0aCxlPW5ldyBBcnJheShkKzEpO2VbMF09e25hbWU6YStcIkNvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmR9O2Zvcih2YXIgZj0wO2Y8ZDtmKyspZVtmKzFdPXtuYW1lOmErZix0eXBlOlwiVEFCTEVcIix2YWx1ZTpjKGJbZl0sZil9O3JldHVybiBlfWZ1bmN0aW9uIEMoYSxiLGMpe3ZhciBkPWIubGVuZ3RoLGU9W107ZVswXT17bmFtZTphK1wiQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZH07Zm9yKHZhciBmPTA7ZjxkO2YrKyllPWUuY29uY2F0KGMoYltmXSxmKSk7cmV0dXJuIGV9ZnVuY3Rpb24gRChhKXsxPT09YS5mb3JtYXQ/ei5jYWxsKHRoaXMsXCJjb3ZlcmFnZVRhYmxlXCIsW3tuYW1lOlwiY292ZXJhZ2VGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX1dLmNvbmNhdChBKFwiZ2x5cGhcIixhLmdseXBocykpKTp4ZS5hc3NlcnQoITEsXCJDYW4ndCBjcmVhdGUgY292ZXJhZ2UgdGFibGUgZm9ybWF0IDIgeWV0LlwiKX1mdW5jdGlvbiBFKGEpe3ouY2FsbCh0aGlzLFwic2NyaXB0TGlzdFRhYmxlXCIsQyhcInNjcmlwdFJlY29yZFwiLGEsZnVuY3Rpb24oYSxiKXt2YXIgYz1hLnNjcmlwdCxkPWMuZGVmYXVsdExhbmdTeXM7cmV0dXJuIHhlLmFzc2VydCghIWQsXCJVbmFibGUgdG8gd3JpdGUgR1NVQjogc2NyaXB0IFwiK2EudGFnK1wiIGhhcyBubyBkZWZhdWx0IGxhbmd1YWdlIHN5c3RlbS5cIiksW3tuYW1lOlwic2NyaXB0VGFnXCIrYix0eXBlOlwiVEFHXCIsdmFsdWU6YS50YWd9LHtuYW1lOlwic2NyaXB0XCIrYix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcInNjcmlwdFRhYmxlXCIsW3tuYW1lOlwiZGVmYXVsdExhbmdTeXNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcImRlZmF1bHRMYW5nU3lzXCIsW3tuYW1lOlwibG9va3VwT3JkZXJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXFGZWF0dXJlSW5kZXhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZC5yZXFGZWF0dXJlSW5kZXh9XS5jb25jYXQoQShcImZlYXR1cmVJbmRleFwiLGQuZmVhdHVyZUluZGV4ZXMpKSl9XS5jb25jYXQoQyhcImxhbmdTeXNcIixjLmxhbmdTeXNSZWNvcmRzLGZ1bmN0aW9uKGEsYil7dmFyIGM9YS5sYW5nU3lzO3JldHVyblt7bmFtZTpcImxhbmdTeXNUYWdcIitiLHR5cGU6XCJUQUdcIix2YWx1ZTphLnRhZ30se25hbWU6XCJsYW5nU3lzXCIrYix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcImxhbmdTeXNcIixbe25hbWU6XCJsb29rdXBPcmRlclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlcUZlYXR1cmVJbmRleFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjLnJlcUZlYXR1cmVJbmRleH1dLmNvbmNhdChBKFwiZmVhdHVyZUluZGV4XCIsYy5mZWF0dXJlSW5kZXhlcykpKX1dfSkpKX1dfSkpfWZ1bmN0aW9uIEYoYSl7ei5jYWxsKHRoaXMsXCJmZWF0dXJlTGlzdFRhYmxlXCIsQyhcImZlYXR1cmVSZWNvcmRcIixhLGZ1bmN0aW9uKGEsYil7dmFyIGM9YS5mZWF0dXJlO3JldHVyblt7bmFtZTpcImZlYXR1cmVUYWdcIitiLHR5cGU6XCJUQUdcIix2YWx1ZTphLnRhZ30se25hbWU6XCJmZWF0dXJlXCIrYix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcImZlYXR1cmVUYWJsZVwiLFt7bmFtZTpcImZlYXR1cmVQYXJhbXNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Yy5mZWF0dXJlUGFyYW1zfV0uY29uY2F0KEEoXCJsb29rdXBMaXN0SW5kZXhcIixjLmxvb2t1cExpc3RJbmRleGVzKSkpfV19KSl9ZnVuY3Rpb24gRyhhLGIpe3ouY2FsbCh0aGlzLFwibG9va3VwTGlzdFRhYmxlXCIsQihcImxvb2t1cFwiLGEsZnVuY3Rpb24oYSl7dmFyIGM9YlthLmxvb2t1cFR5cGVdO3JldHVybiB4ZS5hc3NlcnQoISFjLFwiVW5hYmxlIHRvIHdyaXRlIEdTVUIgbG9va3VwIHR5cGUgXCIrYS5sb29rdXBUeXBlK1wiIHRhYmxlcy5cIiksbmV3IHooXCJsb29rdXBUYWJsZVwiLFt7bmFtZTpcImxvb2t1cFR5cGVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5sb29rdXBUeXBlfSx7bmFtZTpcImxvb2t1cEZsYWdcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5sb29rdXBGbGFnfV0uY29uY2F0KEIoXCJzdWJ0YWJsZVwiLGEuc3VidGFibGVzLGMpKSl9KSl9ZnVuY3Rpb24gSChhLGIpe3JldHVybiBhLmdldFVpbnQ4KGIpfWZ1bmN0aW9uIEkoYSxiKXtyZXR1cm4gYS5nZXRVaW50MTYoYiwhMSl9ZnVuY3Rpb24gSihhLGIpe3JldHVybiBhLmdldEludDE2KGIsITEpfWZ1bmN0aW9uIEsoYSxiKXtyZXR1cm4gYS5nZXRVaW50MzIoYiwhMSl9ZnVuY3Rpb24gTChhLGIpe3JldHVybiBhLmdldEludDE2KGIsITEpK2EuZ2V0VWludDE2KGIrMiwhMSkvNjU1MzV9ZnVuY3Rpb24gTShhLGIpe2Zvcih2YXIgYz1cIlwiLGQ9YjtkPGIrNDtkKz0xKWMrPVN0cmluZy5mcm9tQ2hhckNvZGUoYS5nZXRJbnQ4KGQpKTtyZXR1cm4gY31mdW5jdGlvbiBOKGEsYixjKXtmb3IodmFyIGQ9MCxlPTA7ZTxjO2UrPTEpZDw8PTgsZCs9YS5nZXRVaW50OChiK2UpO3JldHVybiBkfWZ1bmN0aW9uIE8oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPWI7ZTxjO2UrPTEpZC5wdXNoKGEuZ2V0VWludDgoZSkpO3JldHVybiBkfWZ1bmN0aW9uIFAoYSl7Zm9yKHZhciBiPVwiXCIsYz0wO2M8YS5sZW5ndGg7Yys9MSliKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGFbY10pO3JldHVybiBifWZ1bmN0aW9uIFEoYSxiKXt0aGlzLmRhdGE9YSx0aGlzLm9mZnNldD1iLHRoaXMucmVsYXRpdmVPZmZzZXQ9MH1mdW5jdGlvbiBSKGEsYil7Yi5wYXJzZVVTaG9ydCgpLGEubGVuZ3RoPWIucGFyc2VVTG9uZygpLGEubGFuZ3VhZ2U9Yi5wYXJzZVVMb25nKCk7dmFyIGM7YS5ncm91cENvdW50PWM9Yi5wYXJzZVVMb25nKCksYS5nbHlwaEluZGV4TWFwPXt9O2Zvcih2YXIgZD0wO2Q8YztkKz0xKWZvcih2YXIgZT1iLnBhcnNlVUxvbmcoKSxmPWIucGFyc2VVTG9uZygpLGc9Yi5wYXJzZVVMb25nKCksaD1lO2g8PWY7aCs9MSlhLmdseXBoSW5kZXhNYXBbaF09ZyxnKyt9ZnVuY3Rpb24gUyhhLGIsYyxkLGUpe2EubGVuZ3RoPWIucGFyc2VVU2hvcnQoKSxhLmxhbmd1YWdlPWIucGFyc2VVU2hvcnQoKTt2YXIgZjthLnNlZ0NvdW50PWY9Yi5wYXJzZVVTaG9ydCgpPj4xLGIuc2tpcChcInVTaG9ydFwiLDMpLGEuZ2x5cGhJbmRleE1hcD17fTtmb3IodmFyIGc9bmV3IExlLlBhcnNlcihjLGQrZSsxNCksaD1uZXcgTGUuUGFyc2VyKGMsZCtlKzE2KzIqZiksaT1uZXcgTGUuUGFyc2VyKGMsZCtlKzE2KzQqZiksaj1uZXcgTGUuUGFyc2VyKGMsZCtlKzE2KzYqZiksaz1kK2UrMTYrOCpmLGw9MDtsPGYtMTtsKz0xKWZvcih2YXIgbT12b2lkIDAsbj1nLnBhcnNlVVNob3J0KCksbz1oLnBhcnNlVVNob3J0KCkscD1pLnBhcnNlU2hvcnQoKSxxPWoucGFyc2VVU2hvcnQoKSxyPW87cjw9bjtyKz0xKTAhPT1xPyhrPWoub2Zmc2V0K2oucmVsYXRpdmVPZmZzZXQtMixrKz1xLGsrPTIqKHItbyksMCE9PShtPUxlLmdldFVTaG9ydChjLGspKSYmKG09bStwJjY1NTM1KSk6bT1yK3AmNjU1MzUsYS5nbHlwaEluZGV4TWFwW3JdPW19ZnVuY3Rpb24gVChhLGIpe3ZhciBjPXt9O2MudmVyc2lvbj1MZS5nZXRVU2hvcnQoYSxiKSx4ZS5hcmd1bWVudCgwPT09Yy52ZXJzaW9uLFwiY21hcCB0YWJsZSB2ZXJzaW9uIHNob3VsZCBiZSAwLlwiKSxjLm51bVRhYmxlcz1MZS5nZXRVU2hvcnQoYSxiKzIpO2Zvcih2YXIgZD0tMSxlPWMubnVtVGFibGVzLTE7ZT49MDtlLT0xKXt2YXIgZj1MZS5nZXRVU2hvcnQoYSxiKzQrOCplKSxnPUxlLmdldFVTaG9ydChhLGIrNCs4KmUrMik7aWYoMz09PWYmJigwPT09Z3x8MT09PWd8fDEwPT09Zyl8fDA9PT1mJiYoMD09PWd8fDE9PT1nfHwyPT09Z3x8Mz09PWd8fDQ9PT1nKSl7ZD1MZS5nZXRVTG9uZyhhLGIrNCs4KmUrNCk7YnJlYWt9fWlmKC0xPT09ZCl0aHJvdyBuZXcgRXJyb3IoXCJObyB2YWxpZCBjbWFwIHN1Yi10YWJsZXMgZm91bmQuXCIpO3ZhciBoPW5ldyBMZS5QYXJzZXIoYSxiK2QpO2lmKGMuZm9ybWF0PWgucGFyc2VVU2hvcnQoKSwxMj09PWMuZm9ybWF0KVIoYyxoKTtlbHNle2lmKDQhPT1jLmZvcm1hdCl0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IGZvcm1hdCA0IGFuZCAxMiBjbWFwIHRhYmxlcyBhcmUgc3VwcG9ydGVkIChmb3VuZCBmb3JtYXQgXCIrYy5mb3JtYXQrXCIpLlwiKTtTKGMsaCxhLGIsZCl9cmV0dXJuIGN9ZnVuY3Rpb24gVShhLGIsYyl7YS5zZWdtZW50cy5wdXNoKHtlbmQ6YixzdGFydDpiLGRlbHRhOi0oYi1jKSxvZmZzZXQ6MCxnbHlwaEluZGV4OmN9KX1mdW5jdGlvbiBWKGEpe2Euc2VnbWVudHMucHVzaCh7ZW5kOjY1NTM1LHN0YXJ0OjY1NTM1LGRlbHRhOjEsb2Zmc2V0OjB9KX1mdW5jdGlvbiBXKGEpe3ZhciBiLGM9ITA7Zm9yKGI9YS5sZW5ndGgtMTtiPjA7Yi09MSl7aWYoYS5nZXQoYikudW5pY29kZT42NTUzNSl7Y29uc29sZS5sb2coXCJBZGRpbmcgQ01BUCBmb3JtYXQgMTIgKG5lZWRlZCEpXCIpLGM9ITE7YnJlYWt9fXZhciBkPVt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJudW1UYWJsZXNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Yz8xOjJ9LHtuYW1lOlwicGxhdGZvcm1JRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTozfSx7bmFtZTpcImVuY29kaW5nSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJvZmZzZXRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTpjPzEyOjIwfV07Y3x8KGQ9ZC5jb25jYXQoW3tuYW1lOlwiY21hcDEyUGxhdGZvcm1JRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTozfSx7bmFtZTpcImNtYXAxMkVuY29kaW5nSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MTB9LHtuYW1lOlwiY21hcDEyT2Zmc2V0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH1dKSksZD1kLmNvbmNhdChbe25hbWU6XCJmb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6NH0se25hbWU6XCJjbWFwNExlbmd0aFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImxhbmd1YWdlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic2VnQ291bnRYMlwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNlYXJjaFJhbmdlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZW50cnlTZWxlY3RvclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJhbmdlU2hpZnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dKTt2YXIgZT1uZXcgSWUuVGFibGUoXCJjbWFwXCIsZCk7Zm9yKGUuc2VnbWVudHM9W10sYj0wO2I8YS5sZW5ndGg7Yis9MSl7Zm9yKHZhciBmPWEuZ2V0KGIpLGc9MDtnPGYudW5pY29kZXMubGVuZ3RoO2crPTEpVShlLGYudW5pY29kZXNbZ10sYik7ZS5zZWdtZW50cz1lLnNlZ21lbnRzLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdGFydC1iLnN0YXJ0fSl9VihlKTt2YXIgaD1lLnNlZ21lbnRzLmxlbmd0aCxpPTAsaj1bXSxrPVtdLGw9W10sbT1bXSxuPVtdLG89W107Zm9yKGI9MDtiPGg7Yis9MSl7dmFyIHA9ZS5zZWdtZW50c1tiXTtwLmVuZDw9NjU1MzUmJnAuc3RhcnQ8PTY1NTM1PyhqPWouY29uY2F0KHtuYW1lOlwiZW5kX1wiK2IsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOnAuZW5kfSksaz1rLmNvbmNhdCh7bmFtZTpcInN0YXJ0X1wiK2IsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOnAuc3RhcnR9KSxsPWwuY29uY2F0KHtuYW1lOlwiaWREZWx0YV9cIitiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOnAuZGVsdGF9KSxtPW0uY29uY2F0KHtuYW1lOlwiaWRSYW5nZU9mZnNldF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLm9mZnNldH0pLHZvaWQgMCE9PXAuZ2x5cGhJZCYmKG49bi5jb25jYXQoe25hbWU6XCJnbHlwaF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLmdseXBoSWR9KSkpOmkrPTEsY3x8dm9pZCAwPT09cC5nbHlwaEluZGV4fHwobz1vLmNvbmNhdCh7bmFtZTpcImNtYXAxMlN0YXJ0X1wiK2IsdHlwZTpcIlVMT05HXCIsdmFsdWU6cC5zdGFydH0pLG89by5jb25jYXQoe25hbWU6XCJjbWFwMTJFbmRfXCIrYix0eXBlOlwiVUxPTkdcIix2YWx1ZTpwLmVuZH0pLG89by5jb25jYXQoe25hbWU6XCJjbWFwMTJHbHlwaF9cIitiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnAuZ2x5cGhJbmRleH0pKX1pZihlLnNlZ0NvdW50WDI9MiooaC1pKSxlLnNlYXJjaFJhbmdlPTIqTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKGgtaSkvTWF0aC5sb2coMikpKSxlLmVudHJ5U2VsZWN0b3I9TWF0aC5sb2coZS5zZWFyY2hSYW5nZS8yKS9NYXRoLmxvZygyKSxlLnJhbmdlU2hpZnQ9ZS5zZWdDb3VudFgyLWUuc2VhcmNoUmFuZ2UsZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KGopLGUuZmllbGRzLnB1c2goe25hbWU6XCJyZXNlcnZlZFBhZFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KGspLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChsKSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQobSksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KG4pLGUuY21hcDRMZW5ndGg9MTQrMipqLmxlbmd0aCsyKzIqay5sZW5ndGgrMipsLmxlbmd0aCsyKm0ubGVuZ3RoKzIqbi5sZW5ndGgsIWMpe3ZhciBxPTE2KzQqby5sZW5ndGg7ZS5jbWFwMTJPZmZzZXQ9MjArZS5jbWFwNExlbmd0aCxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQoW3tuYW1lOlwiY21hcDEyRm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjEyfSx7bmFtZTpcImNtYXAxMlJlc2VydmVkXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiY21hcDEyTGVuZ3RoXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6cX0se25hbWU6XCJjbWFwMTJMYW5ndWFnZVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwiY21hcDEybkdyb3Vwc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOm8ubGVuZ3RoLzN9XSksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KG8pfXJldHVybiBlfWZ1bmN0aW9uIFgoYSl7dGhpcy5mb250PWF9ZnVuY3Rpb24gWShhKXt0aGlzLmNtYXA9YX1mdW5jdGlvbiBaKGEsYil7dGhpcy5lbmNvZGluZz1hLHRoaXMuY2hhcnNldD1ifWZ1bmN0aW9uICQoYSl7dmFyIGI9dGhpcztzd2l0Y2goYS52ZXJzaW9uKXtjYXNlIDE6dGhpcy5uYW1lcz1RZS5zbGljZSgpO2JyZWFrO2Nhc2UgMjp0aGlzLm5hbWVzPW5ldyBBcnJheShhLm51bWJlck9mR2x5cGhzKTtmb3IodmFyIGM9MDtjPGEubnVtYmVyT2ZHbHlwaHM7YysrKWEuZ2x5cGhOYW1lSW5kZXhbY108UWUubGVuZ3RoP2IubmFtZXNbY109UWVbYS5nbHlwaE5hbWVJbmRleFtjXV06Yi5uYW1lc1tjXT1hLm5hbWVzW2EuZ2x5cGhOYW1lSW5kZXhbY10tUWUubGVuZ3RoXTticmVhaztjYXNlIDIuNTp0aGlzLm5hbWVzPW5ldyBBcnJheShhLm51bWJlck9mR2x5cGhzKTtmb3IodmFyIGQ9MDtkPGEubnVtYmVyT2ZHbHlwaHM7ZCsrKWIubmFtZXNbZF09UWVbZCthLmdseXBoTmFtZUluZGV4W2RdXTticmVhaztjYXNlIDM6ZGVmYXVsdDp0aGlzLm5hbWVzPVtdfX1mdW5jdGlvbiBfKGEpe2Zvcih2YXIgYixjPWEudGFibGVzLmNtYXAuZ2x5cGhJbmRleE1hcCxkPU9iamVjdC5rZXlzKGMpLGU9MDtlPGQubGVuZ3RoO2UrPTEpe3ZhciBmPWRbZV0sZz1jW2ZdO2I9YS5nbHlwaHMuZ2V0KGcpLGIuYWRkVW5pY29kZShwYXJzZUludChmKSl9Zm9yKHZhciBoPTA7aDxhLmdseXBocy5sZW5ndGg7aCs9MSliPWEuZ2x5cGhzLmdldChoKSxhLmNmZkVuY29kaW5nP2EuaXNDSURGb250P2IubmFtZT1cImdpZFwiK2g6Yi5uYW1lPWEuY2ZmRW5jb2RpbmcuY2hhcnNldFtoXTphLmdseXBoTmFtZXMubmFtZXMmJihiLm5hbWU9YS5nbHlwaE5hbWVzLmdseXBoSW5kZXhUb05hbWUoaCkpfWZ1bmN0aW9uIGFhKGEsYixjLGQsZSl7YS5iZWdpblBhdGgoKSxhLm1vdmVUbyhiLGMpLGEubGluZVRvKGQsZSksYS5zdHJva2UoKX1mdW5jdGlvbiBiYShhLGIpe3ZhciBjPWJ8fG5ldyByO3JldHVybntjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmKGM9YygpKSxjfSxzZXQ6ZnVuY3Rpb24oYSl7Yz1hfX19ZnVuY3Rpb24gY2EoYSl7dGhpcy5iaW5kQ29uc3RydWN0b3JWYWx1ZXMoYSl9ZnVuY3Rpb24gZGEoYSxiLGMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse2dldDpmdW5jdGlvbigpe3JldHVybiBhLnBhdGgsYVtjXX0sc2V0OmZ1bmN0aW9uKGIpe2FbY109Yn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBlYShhLGIpe3ZhciBjPXRoaXM7aWYodGhpcy5mb250PWEsdGhpcy5nbHlwaHM9e30sQXJyYXkuaXNBcnJheShiKSlmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrKyljLmdseXBoc1tkXT1iW2RdO3RoaXMubGVuZ3RoPWImJmIubGVuZ3RofHwwfWZ1bmN0aW9uIGZhKGEsYil7cmV0dXJuIG5ldyBjYSh7aW5kZXg6Yixmb250OmF9KX1mdW5jdGlvbiBnYShhLGIsYyxkLGUsZil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGc9bmV3IGNhKHtpbmRleDpiLGZvbnQ6YX0pO3JldHVybiBnLnBhdGg9ZnVuY3Rpb24oKXtjKGcsZCxlKTt2YXIgYj1mKGEuZ2x5cGhzLGcpO3JldHVybiBiLnVuaXRzUGVyRW09YS51bml0c1BlckVtLGJ9LGRhKGcsXCJ4TWluXCIsXCJfeE1pblwiKSxkYShnLFwieE1heFwiLFwiX3hNYXhcIiksZGEoZyxcInlNaW5cIixcIl95TWluXCIpLGRhKGcsXCJ5TWF4XCIsXCJfeU1heFwiKSxnfX1mdW5jdGlvbiBoYShhLGIsYyxkKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uZXcgY2Eoe2luZGV4OmIsZm9udDphfSk7cmV0dXJuIGUucGF0aD1mdW5jdGlvbigpe3ZhciBiPWMoYSxlLGQpO3JldHVybiBiLnVuaXRzUGVyRW09YS51bml0c1BlckVtLGJ9LGV9fWZ1bmN0aW9uIGlhKGEsYil7aWYoYT09PWIpcmV0dXJuITA7aWYoQXJyYXkuaXNBcnJheShhKSYmQXJyYXkuaXNBcnJheShiKSl7aWYoYS5sZW5ndGghPT1iLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrPTEpaWYoIWlhKGFbY10sYltjXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gamEoYSl7cmV0dXJuIGEubGVuZ3RoPDEyNDA/MTA3OmEubGVuZ3RoPDMzOTAwPzExMzE6MzI3Njh9ZnVuY3Rpb24ga2EoYSxiLGMpe3ZhciBkLGUsZj1bXSxnPVtdLGg9TGUuZ2V0Q2FyZDE2KGEsYik7aWYoMCE9PWgpe3ZhciBpPUxlLmdldEJ5dGUoYSxiKzIpO2Q9YisoaCsxKSppKzI7Zm9yKHZhciBqPWIrMyxrPTA7azxoKzE7ays9MSlmLnB1c2goTGUuZ2V0T2Zmc2V0KGEsaixpKSksais9aTtlPWQrZltoXX1lbHNlIGU9YisyO2Zvcih2YXIgbD0wO2w8Zi5sZW5ndGgtMTtsKz0xKXt2YXIgbT1MZS5nZXRCeXRlcyhhLGQrZltsXSxkK2ZbbCsxXSk7YyYmKG09YyhtKSksZy5wdXNoKG0pfXJldHVybntvYmplY3RzOmcsc3RhcnRPZmZzZXQ6YixlbmRPZmZzZXQ6ZX19ZnVuY3Rpb24gbGEoYSl7Zm9yKHZhciBiPVwiXCIsYz0xNSxkPVtcIjBcIixcIjFcIixcIjJcIixcIjNcIixcIjRcIixcIjVcIixcIjZcIixcIjdcIixcIjhcIixcIjlcIixcIi5cIixcIkVcIixcIkUtXCIsbnVsbCxcIi1cIl07Oyl7dmFyIGU9YS5wYXJzZUJ5dGUoKSxmPWU+PjQsZz0xNSZlO2lmKGY9PT1jKWJyZWFrO2lmKGIrPWRbZl0sZz09PWMpYnJlYWs7Yis9ZFtnXX1yZXR1cm4gcGFyc2VGbG9hdChiKX1mdW5jdGlvbiBtYShhLGIpe3ZhciBjLGQsZSxmO2lmKDI4PT09YilyZXR1cm4gYz1hLnBhcnNlQnl0ZSgpLGQ9YS5wYXJzZUJ5dGUoKSxjPDw4fGQ7aWYoMjk9PT1iKXJldHVybiBjPWEucGFyc2VCeXRlKCksZD1hLnBhcnNlQnl0ZSgpLGU9YS5wYXJzZUJ5dGUoKSxmPWEucGFyc2VCeXRlKCksYzw8MjR8ZDw8MTZ8ZTw8OHxmO2lmKDMwPT09YilyZXR1cm4gbGEoYSk7aWYoYj49MzImJmI8PTI0NilyZXR1cm4gYi0xMzk7aWYoYj49MjQ3JiZiPD0yNTApcmV0dXJuIGM9YS5wYXJzZUJ5dGUoKSwyNTYqKGItMjQ3KStjKzEwODtpZihiPj0yNTEmJmI8PTI1NClyZXR1cm4gYz1hLnBhcnNlQnl0ZSgpLDI1NiotKGItMjUxKS1jLTEwODt0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGIwIFwiK2IpfWZ1bmN0aW9uIG5hKGEpe2Zvcih2YXIgYj17fSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hW2NdWzBdLGU9YVtjXVsxXSxmPXZvaWQgMDtpZihmPTE9PT1lLmxlbmd0aD9lWzBdOmUsYi5oYXNPd25Qcm9wZXJ0eShkKSYmIWlzTmFOKGJbZF0pKXRocm93IG5ldyBFcnJvcihcIk9iamVjdCBcIitiK1wiIGFscmVhZHkgaGFzIGtleSBcIitkKTtiW2RdPWZ9cmV0dXJuIGJ9ZnVuY3Rpb24gb2EoYSxiLGMpe2I9dm9pZCAwIT09Yj9iOjA7dmFyIGQ9bmV3IExlLlBhcnNlcihhLGIpLGU9W10sZj1bXTtmb3IoYz12b2lkIDAhPT1jP2M6YS5sZW5ndGg7ZC5yZWxhdGl2ZU9mZnNldDxjOyl7dmFyIGc9ZC5wYXJzZUJ5dGUoKTtnPD0yMT8oMTI9PT1nJiYoZz0xMjAwK2QucGFyc2VCeXRlKCkpLGUucHVzaChbZyxmXSksZj1bXSk6Zi5wdXNoKG1hKGQsZykpfXJldHVybiBuYShlKX1mdW5jdGlvbiBwYShhLGIpe3JldHVybiBiPWI8PTM5MD9OZVtiXTphW2ItMzkxXX1mdW5jdGlvbiBxYShhLGIsYyl7Zm9yKHZhciBkLGU9e30sZj0wO2Y8Yi5sZW5ndGg7Zis9MSl7dmFyIGc9YltmXTtpZihBcnJheS5pc0FycmF5KGcudHlwZSkpe3ZhciBoPVtdO2gubGVuZ3RoPWcudHlwZS5sZW5ndGg7Zm9yKHZhciBpPTA7aTxnLnR5cGUubGVuZ3RoO2krKylkPXZvaWQgMCE9PWFbZy5vcF0/YVtnLm9wXVtpXTp2b2lkIDAsdm9pZCAwPT09ZCYmKGQ9dm9pZCAwIT09Zy52YWx1ZSYmdm9pZCAwIT09Zy52YWx1ZVtpXT9nLnZhbHVlW2ldOm51bGwpLFwiU0lEXCI9PT1nLnR5cGVbaV0mJihkPXBhKGMsZCkpLGhbaV09ZDtlW2cubmFtZV09aH1lbHNlIGQ9YVtnLm9wXSx2b2lkIDA9PT1kJiYoZD12b2lkIDAhPT1nLnZhbHVlP2cudmFsdWU6bnVsbCksXCJTSURcIj09PWcudHlwZSYmKGQ9cGEoYyxkKSksZVtnLm5hbWVdPWR9cmV0dXJuIGV9ZnVuY3Rpb24gcmEoYSxiKXt2YXIgYz17fTtyZXR1cm4gYy5mb3JtYXRNYWpvcj1MZS5nZXRDYXJkOChhLGIpLGMuZm9ybWF0TWlub3I9TGUuZ2V0Q2FyZDgoYSxiKzEpLGMuc2l6ZT1MZS5nZXRDYXJkOChhLGIrMiksYy5vZmZzZXRTaXplPUxlLmdldENhcmQ4KGEsYiszKSxjLnN0YXJ0T2Zmc2V0PWIsYy5lbmRPZmZzZXQ9Yis0LGN9ZnVuY3Rpb24gc2EoYSxiKXtyZXR1cm4gcWEob2EoYSwwLGEuYnl0ZUxlbmd0aCksVGUsYil9ZnVuY3Rpb24gdGEoYSxiLGMsZCl7cmV0dXJuIHFhKG9hKGEsYixjKSxVZSxkKX1mdW5jdGlvbiB1YShhLGIsYyxkKXtmb3IodmFyIGU9W10sZj0wO2Y8Yy5sZW5ndGg7Zis9MSl7dmFyIGc9bmV3IERhdGFWaWV3KG5ldyBVaW50OEFycmF5KGNbZl0pLmJ1ZmZlciksaD1zYShnLGQpO2guX3N1YnJzPVtdLGguX3N1YnJzQmlhcz0wO3ZhciBpPWgucHJpdmF0ZVswXSxqPWgucHJpdmF0ZVsxXTtpZigwIT09aSYmMCE9PWope3ZhciBrPXRhKGEsaitiLGksZCk7aWYoaC5fZGVmYXVsdFdpZHRoWD1rLmRlZmF1bHRXaWR0aFgsaC5fbm9taW5hbFdpZHRoWD1rLm5vbWluYWxXaWR0aFgsMCE9PWsuc3VicnMpe3ZhciBsPWoray5zdWJycyxtPWthKGEsbCtiKTtoLl9zdWJycz1tLm9iamVjdHMsaC5fc3VicnNCaWFzPWphKGguX3N1YnJzKX1oLl9wcml2YXRlRGljdD1rfWUucHVzaChoKX1yZXR1cm4gZX1mdW5jdGlvbiB2YShhLGIsYyxkKXt2YXIgZSxmLGc9bmV3IExlLlBhcnNlcihhLGIpO2MtPTE7dmFyIGg9W1wiLm5vdGRlZlwiXSxpPWcucGFyc2VDYXJkOCgpO2lmKDA9PT1pKWZvcih2YXIgaj0wO2o8YztqKz0xKWU9Zy5wYXJzZVNJRCgpLGgucHVzaChwYShkLGUpKTtlbHNlIGlmKDE9PT1pKWZvcig7aC5sZW5ndGg8PWM7KXtlPWcucGFyc2VTSUQoKSxmPWcucGFyc2VDYXJkOCgpO2Zvcih2YXIgaz0wO2s8PWY7ays9MSloLnB1c2gocGEoZCxlKSksZSs9MX1lbHNle2lmKDIhPT1pKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gY2hhcnNldCBmb3JtYXQgXCIraSk7Zm9yKDtoLmxlbmd0aDw9Yzspe2U9Zy5wYXJzZVNJRCgpLGY9Zy5wYXJzZUNhcmQxNigpO2Zvcih2YXIgbD0wO2w8PWY7bCs9MSloLnB1c2gocGEoZCxlKSksZSs9MX19cmV0dXJuIGh9ZnVuY3Rpb24gd2EoYSxiLGMpe3ZhciBkLGU9e30sZj1uZXcgTGUuUGFyc2VyKGEsYiksZz1mLnBhcnNlQ2FyZDgoKTtpZigwPT09Zylmb3IodmFyIGg9Zi5wYXJzZUNhcmQ4KCksaT0wO2k8aDtpKz0xKWQ9Zi5wYXJzZUNhcmQ4KCksZVtkXT1pO2Vsc2V7aWYoMSE9PWcpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBlbmNvZGluZyBmb3JtYXQgXCIrZyk7dmFyIGo9Zi5wYXJzZUNhcmQ4KCk7ZD0xO2Zvcih2YXIgaz0wO2s8ajtrKz0xKWZvcih2YXIgbD1mLnBhcnNlQ2FyZDgoKSxtPWYucGFyc2VDYXJkOCgpLG49bDtuPD1sK207bis9MSllW25dPWQsZCs9MX1yZXR1cm4gbmV3IFooZSxjKX1mdW5jdGlvbiB4YShhLGIsYyl7ZnVuY3Rpb24gZChhLGIpe3QmJm8uY2xvc2VQYXRoKCksby5tb3ZlVG8oYSxiKSx0PSEwfWZ1bmN0aW9uIGUoKXt2YXIgYTthPXAubGVuZ3RoJTIhPTAsYSYmIXMmJih5PXAuc2hpZnQoKStuKSxxKz1wLmxlbmd0aD4+MSxwLmxlbmd0aD0wLHM9ITB9ZnVuY3Rpb24gZihjKXtmb3IodmFyIG0scix3LHgseixBLEIsQyxELEUsRixHLEg9MDtIPGMubGVuZ3RoOyl7dmFyIEk9Y1tIXTtzd2l0Y2goSCs9MSxJKXtjYXNlIDE6Y2FzZSAzOmUoKTticmVhaztjYXNlIDQ6cC5sZW5ndGg+MSYmIXMmJih5PXAuc2hpZnQoKStuLHM9ITApLHYrPXAucG9wKCksZCh1LHYpO2JyZWFrO2Nhc2UgNTpmb3IoO3AubGVuZ3RoPjA7KXUrPXAuc2hpZnQoKSx2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTticmVhaztjYXNlIDY6Zm9yKDtwLmxlbmd0aD4wJiYodSs9cC5zaGlmdCgpLG8ubGluZVRvKHUsdiksMCE9PXAubGVuZ3RoKTspdis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7YnJlYWs7Y2FzZSA3OmZvcig7cC5sZW5ndGg+MCYmKHYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpLDAhPT1wLmxlbmd0aCk7KXUrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2JyZWFrO2Nhc2UgODpmb3IoO3AubGVuZ3RoPjA7KWc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksXG51PWkrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztjYXNlIDEwOno9cC5wb3AoKStsLEE9a1t6XSxBJiZmKEEpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuO2Nhc2UgMTI6c3dpdGNoKEk9Y1tIXSxIKz0xLEkpe2Nhc2UgMzU6Zz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxCPWkrcC5zaGlmdCgpLEM9aitwLnNoaWZ0KCksRD1CK3Auc2hpZnQoKSxFPUMrcC5zaGlmdCgpLEY9RCtwLnNoaWZ0KCksRz1FK3Auc2hpZnQoKSx1PUYrcC5zaGlmdCgpLHY9RytwLnNoaWZ0KCkscC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztjYXNlIDM0Omc9dStwLnNoaWZ0KCksaD12LGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxCPWkrcC5zaGlmdCgpLEM9aixEPUIrcC5zaGlmdCgpLEU9aixGPUQrcC5zaGlmdCgpLEc9dix1PUYrcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztjYXNlIDM2Omc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWosRD1CK3Auc2hpZnQoKSxFPWosRj1EK3Auc2hpZnQoKSxHPUUrcC5zaGlmdCgpLHU9RitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosQixDKSxvLmN1cnZlVG8oRCxFLEYsRyx1LHYpO2JyZWFrO2Nhc2UgMzc6Zz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxCPWkrcC5zaGlmdCgpLEM9aitwLnNoaWZ0KCksRD1CK3Auc2hpZnQoKSxFPUMrcC5zaGlmdCgpLEY9RCtwLnNoaWZ0KCksRz1FK3Auc2hpZnQoKSxNYXRoLmFicyhGLXUpPk1hdGguYWJzKEctdik/dT1GK3Auc2hpZnQoKTp2PUcrcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztkZWZhdWx0OmNvbnNvbGUubG9nKFwiR2x5cGggXCIrYi5pbmRleCtcIjogdW5rbm93biBvcGVyYXRvciAxMjAwXCIrSSkscC5sZW5ndGg9MH1icmVhaztjYXNlIDE0OnAubGVuZ3RoPjAmJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx0JiYoby5jbG9zZVBhdGgoKSx0PSExKTticmVhaztjYXNlIDE4OmUoKTticmVhaztjYXNlIDE5OmNhc2UgMjA6ZSgpLEgrPXErNz4+MzticmVhaztjYXNlIDIxOnAubGVuZ3RoPjImJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx2Kz1wLnBvcCgpLHUrPXAucG9wKCksZCh1LHYpO2JyZWFrO2Nhc2UgMjI6cC5sZW5ndGg+MSYmIXMmJih5PXAuc2hpZnQoKStuLHM9ITApLHUrPXAucG9wKCksZCh1LHYpO2JyZWFrO2Nhc2UgMjM6ZSgpO2JyZWFrO2Nhc2UgMjQ6Zm9yKDtwLmxlbmd0aD4yOylnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO3UrPXAuc2hpZnQoKSx2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTticmVhaztjYXNlIDI1OmZvcig7cC5sZW5ndGg+NjspdSs9cC5zaGlmdCgpLHYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2c9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAyNjpmb3IocC5sZW5ndGglMiYmKHUrPXAuc2hpZnQoKSk7cC5sZW5ndGg+MDspZz11LGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aSx2PWorcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAyNzpmb3IocC5sZW5ndGglMiYmKHYrPXAuc2hpZnQoKSk7cC5sZW5ndGg+MDspZz11K3Auc2hpZnQoKSxoPXYsaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAyODptPWNbSF0scj1jW0grMV0scC5wdXNoKChtPDwyNHxyPDwxNik+PjE2KSxIKz0yO2JyZWFrO2Nhc2UgMjk6ej1wLnBvcCgpK2EuZ3N1YnJzQmlhcyxBPWEuZ3N1YnJzW3pdLEEmJmYoQSk7YnJlYWs7Y2FzZSAzMDpmb3IoO3AubGVuZ3RoPjAmJihnPXUsaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWorKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KSwwIT09cC5sZW5ndGgpOylnPXUrcC5zaGlmdCgpLGg9dixpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSx1PWkrKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztjYXNlIDMxOmZvcig7cC5sZW5ndGg+MCYmKGc9dStwLnNoaWZ0KCksaD12LGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLHU9aSsoMT09PXAubGVuZ3RoP3Auc2hpZnQoKTowKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpLDAhPT1wLmxlbmd0aCk7KWc9dSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aisoMT09PXAubGVuZ3RoP3Auc2hpZnQoKTowKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2RlZmF1bHQ6STwzMj9jb25zb2xlLmxvZyhcIkdseXBoIFwiK2IuaW5kZXgrXCI6IHVua25vd24gb3BlcmF0b3IgXCIrSSk6STwyNDc/cC5wdXNoKEktMTM5KTpJPDI1MT8obT1jW0hdLEgrPTEscC5wdXNoKDI1NiooSS0yNDcpK20rMTA4KSk6STwyNTU/KG09Y1tIXSxIKz0xLHAucHVzaCgyNTYqLShJLTI1MSktbS0xMDgpKToobT1jW0hdLHI9Y1tIKzFdLHc9Y1tIKzJdLHg9Y1tIKzNdLEgrPTQscC5wdXNoKChtPDwyNHxyPDwxNnx3PDw4fHgpLzY1NTM2KSl9fX12YXIgZyxoLGksaixrLGwsbSxuLG89bmV3IHIscD1bXSxxPTAscz0hMSx0PSExLHU9MCx2PTA7aWYoYS5pc0NJREZvbnQpe3ZhciB3PWEudGFibGVzLmNmZi50b3BEaWN0Ll9mZFNlbGVjdFtiLmluZGV4XSx4PWEudGFibGVzLmNmZi50b3BEaWN0Ll9mZEFycmF5W3ddO2s9eC5fc3VicnMsbD14Ll9zdWJyc0JpYXMsbT14Ll9kZWZhdWx0V2lkdGhYLG49eC5fbm9taW5hbFdpZHRoWH1lbHNlIGs9YS50YWJsZXMuY2ZmLnRvcERpY3QuX3N1YnJzLGw9YS50YWJsZXMuY2ZmLnRvcERpY3QuX3N1YnJzQmlhcyxtPWEudGFibGVzLmNmZi50b3BEaWN0Ll9kZWZhdWx0V2lkdGhYLG49YS50YWJsZXMuY2ZmLnRvcERpY3QuX25vbWluYWxXaWR0aFg7dmFyIHk9bTtyZXR1cm4gZihjKSxiLmFkdmFuY2VXaWR0aD15LG99ZnVuY3Rpb24geWEoYSxiLGMsZCl7dmFyIGUsZj1bXSxnPW5ldyBMZS5QYXJzZXIoYSxiKSxoPWcucGFyc2VDYXJkOCgpO2lmKDA9PT1oKWZvcih2YXIgaT0wO2k8YztpKyspe2lmKChlPWcucGFyc2VDYXJkOCgpKT49ZCl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgdGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgaGFzIGJhZCBGRCBpbmRleCB2YWx1ZSBcIitlK1wiIChGRCBjb3VudCBcIitkK1wiKVwiKTtmLnB1c2goZSl9ZWxzZXtpZigzIT09aCl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgVGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgdGFibGUgaGFzIHVuc3VwcG9ydGVkIGZvcm1hdCBcIitoKTt2YXIgaj1nLnBhcnNlQ2FyZDE2KCksaz1nLnBhcnNlQ2FyZDE2KCk7aWYoMCE9PWspdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIFRhYmxlIENJRCBGb250IEZEU2VsZWN0IGZvcm1hdCAzIHJhbmdlIGhhcyBiYWQgaW5pdGlhbCBHSUQgXCIrayk7Zm9yKHZhciBsLG09MDttPGo7bSsrKXtpZihlPWcucGFyc2VDYXJkOCgpLGw9Zy5wYXJzZUNhcmQxNigpLGU+PWQpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIHRhYmxlIENJRCBGb250IEZEU2VsZWN0IGhhcyBiYWQgRkQgaW5kZXggdmFsdWUgXCIrZStcIiAoRkQgY291bnQgXCIrZCtcIilcIik7aWYobD5jKXRocm93IG5ldyBFcnJvcihcIkNGRiBUYWJsZSBDSUQgRm9udCBGRFNlbGVjdCBmb3JtYXQgMyByYW5nZSBoYXMgYmFkIEdJRCBcIitsKTtmb3IoO2s8bDtrKyspZi5wdXNoKGUpO2s9bH1pZihsIT09Yyl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgVGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgZm9ybWF0IDMgcmFuZ2UgaGFzIGJhZCBmaW5hbCBHSUQgXCIrbCl9cmV0dXJuIGZ9ZnVuY3Rpb24gemEoYSxiLGMpe2MudGFibGVzLmNmZj17fTt2YXIgZD1yYShhLGIpLGU9a2EoYSxkLmVuZE9mZnNldCxMZS5ieXRlc1RvU3RyaW5nKSxmPWthKGEsZS5lbmRPZmZzZXQpLGc9a2EoYSxmLmVuZE9mZnNldCxMZS5ieXRlc1RvU3RyaW5nKSxoPWthKGEsZy5lbmRPZmZzZXQpO2MuZ3N1YnJzPWgub2JqZWN0cyxjLmdzdWJyc0JpYXM9amEoYy5nc3VicnMpO3ZhciBpPXVhKGEsYixmLm9iamVjdHMsZy5vYmplY3RzKTtpZigxIT09aS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIHRhYmxlIGhhcyB0b28gbWFueSBmb250cyBpbiAnRm9udFNldCcgLSBjb3VudCBvZiBmb250cyBOYW1lSW5kZXgubGVuZ3RoID0gXCIraS5sZW5ndGgpO3ZhciBqPWlbMF07aWYoYy50YWJsZXMuY2ZmLnRvcERpY3Q9aixqLl9wcml2YXRlRGljdCYmKGMuZGVmYXVsdFdpZHRoWD1qLl9wcml2YXRlRGljdC5kZWZhdWx0V2lkdGhYLGMubm9taW5hbFdpZHRoWD1qLl9wcml2YXRlRGljdC5ub21pbmFsV2lkdGhYKSx2b2lkIDAhPT1qLnJvc1swXSYmdm9pZCAwIT09ai5yb3NbMV0mJihjLmlzQ0lERm9udD0hMCksYy5pc0NJREZvbnQpe3ZhciBrPWouZmRBcnJheSxsPWouZmRTZWxlY3Q7aWYoMD09PWt8fDA9PT1sKXRocm93IG5ldyBFcnJvcihcIkZvbnQgaXMgbWFya2VkIGFzIGEgQ0lEIGZvbnQsIGJ1dCBGREFycmF5IGFuZC9vciBGRFNlbGVjdCBpbmZvcm1hdGlvbiBpcyBtaXNzaW5nXCIpO2srPWI7dmFyIG09a2EoYSxrKSxuPXVhKGEsYixtLm9iamVjdHMsZy5vYmplY3RzKTtqLl9mZEFycmF5PW4sbCs9YixqLl9mZFNlbGVjdD15YShhLGwsYy5udW1HbHlwaHMsbi5sZW5ndGgpfXZhciBvPWIrai5wcml2YXRlWzFdLHA9dGEoYSxvLGoucHJpdmF0ZVswXSxnLm9iamVjdHMpO2lmKGMuZGVmYXVsdFdpZHRoWD1wLmRlZmF1bHRXaWR0aFgsYy5ub21pbmFsV2lkdGhYPXAubm9taW5hbFdpZHRoWCwwIT09cC5zdWJycyl7dmFyIHE9bytwLnN1YnJzLHI9a2EoYSxxKTtjLnN1YnJzPXIub2JqZWN0cyxjLnN1YnJzQmlhcz1qYShjLnN1YnJzKX1lbHNlIGMuc3VicnM9W10sYy5zdWJyc0JpYXM9MDt2YXIgcz1rYShhLGIrai5jaGFyU3RyaW5ncyk7Yy5uR2x5cGhzPXMub2JqZWN0cy5sZW5ndGg7dmFyIHQ9dmEoYSxiK2ouY2hhcnNldCxjLm5HbHlwaHMsZy5vYmplY3RzKTswPT09ai5lbmNvZGluZz9jLmNmZkVuY29kaW5nPW5ldyBaKE9lLHQpOjE9PT1qLmVuY29kaW5nP2MuY2ZmRW5jb2Rpbmc9bmV3IFooUGUsdCk6Yy5jZmZFbmNvZGluZz13YShhLGIrai5lbmNvZGluZyx0KSxjLmVuY29kaW5nPWMuZW5jb2Rpbmd8fGMuY2ZmRW5jb2RpbmcsYy5nbHlwaHM9bmV3IFNlLkdseXBoU2V0KGMpO2Zvcih2YXIgdT0wO3U8Yy5uR2x5cGhzO3UrPTEpe3ZhciB2PXMub2JqZWN0c1t1XTtjLmdseXBocy5wdXNoKHUsU2UuY2ZmR2x5cGhMb2FkZXIoYyx1LHhhLHYpKX19ZnVuY3Rpb24gQWEoYSxiKXt2YXIgYyxkPU5lLmluZGV4T2YoYSk7cmV0dXJuIGQ+PTAmJihjPWQpLGQ9Yi5pbmRleE9mKGEpLGQ+PTA/Yz1kK05lLmxlbmd0aDooYz1OZS5sZW5ndGgrYi5sZW5ndGgsYi5wdXNoKGEpKSxjfWZ1bmN0aW9uIEJhKCl7cmV0dXJuIG5ldyBJZS5SZWNvcmQoXCJIZWFkZXJcIixbe25hbWU6XCJtYWpvclwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjF9LHtuYW1lOlwibWlub3JcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZTowfSx7bmFtZTpcImhkclNpemVcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZTo0fSx7bmFtZTpcIm1ham9yXCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6MX1dKX1mdW5jdGlvbiBDYShhKXt2YXIgYj1uZXcgSWUuUmVjb3JkKFwiTmFtZSBJTkRFWFwiLFt7bmFtZTpcIm5hbWVzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSk7Yi5uYW1lcz1bXTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrPTEpYi5uYW1lcy5wdXNoKHtuYW1lOlwibmFtZV9cIitjLHR5cGU6XCJOQU1FXCIsdmFsdWU6YVtjXX0pO3JldHVybiBifWZ1bmN0aW9uIERhKGEsYixjKXtmb3IodmFyIGQ9e30sZT0wO2U8YS5sZW5ndGg7ZSs9MSl7dmFyIGY9YVtlXSxnPWJbZi5uYW1lXTt2b2lkIDA9PT1nfHxpYShnLGYudmFsdWUpfHwoXCJTSURcIj09PWYudHlwZSYmKGc9QWEoZyxjKSksZFtmLm9wXT17bmFtZTpmLm5hbWUsdHlwZTpmLnR5cGUsdmFsdWU6Z30pfXJldHVybiBkfWZ1bmN0aW9uIEVhKGEsYil7dmFyIGM9bmV3IEllLlJlY29yZChcIlRvcCBESUNUXCIsW3tuYW1lOlwiZGljdFwiLHR5cGU6XCJESUNUXCIsdmFsdWU6e319XSk7cmV0dXJuIGMuZGljdD1EYShUZSxhLGIpLGN9ZnVuY3Rpb24gRmEoYSl7dmFyIGI9bmV3IEllLlJlY29yZChcIlRvcCBESUNUIElOREVYXCIsW3tuYW1lOlwidG9wRGljdHNcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKTtyZXR1cm4gYi50b3BEaWN0cz1be25hbWU6XCJ0b3BEaWN0XzBcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTphfV0sYn1mdW5jdGlvbiBHYShhKXt2YXIgYj1uZXcgSWUuUmVjb3JkKFwiU3RyaW5nIElOREVYXCIsW3tuYW1lOlwic3RyaW5nc1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pO2Iuc3RyaW5ncz1bXTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrPTEpYi5zdHJpbmdzLnB1c2goe25hbWU6XCJzdHJpbmdfXCIrYyx0eXBlOlwiU1RSSU5HXCIsdmFsdWU6YVtjXX0pO3JldHVybiBifWZ1bmN0aW9uIEhhKCl7cmV0dXJuIG5ldyBJZS5SZWNvcmQoXCJHbG9iYWwgU3ViciBJTkRFWFwiLFt7bmFtZTpcInN1YnJzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSl9ZnVuY3Rpb24gSWEoYSxiKXtmb3IodmFyIGM9bmV3IEllLlJlY29yZChcIkNoYXJzZXRzXCIsW3tuYW1lOlwiZm9ybWF0XCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6MH1dKSxkPTA7ZDxhLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdLGY9QWEoZSxiKTtjLmZpZWxkcy5wdXNoKHtuYW1lOlwiZ2x5cGhfXCIrZCx0eXBlOlwiU0lEXCIsdmFsdWU6Zn0pfXJldHVybiBjfWZ1bmN0aW9uIEphKGEpe3ZhciBiPVtdLGM9YS5wYXRoO2IucHVzaCh7bmFtZTpcIndpZHRoXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmEuYWR2YW5jZVdpZHRofSk7Zm9yKHZhciBkPTAsZT0wLGY9MDtmPGMuY29tbWFuZHMubGVuZ3RoO2YrPTEpe3ZhciBnPXZvaWQgMCxoPXZvaWQgMCxpPWMuY29tbWFuZHNbZl07aWYoXCJRXCI9PT1pLnR5cGUpe3ZhciBqPTEvMyxrPTIvMztpPXt0eXBlOlwiQ1wiLHg6aS54LHk6aS55LHgxOmoqZCtrKmkueDEseTE6aiplK2sqaS55MSx4MjpqKmkueCtrKmkueDEseTI6aippLnkrayppLnkxfX1pZihcIk1cIj09PWkudHlwZSlnPU1hdGgucm91bmQoaS54LWQpLGg9TWF0aC5yb3VuZChpLnktZSksYi5wdXNoKHtuYW1lOlwiZHhcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6Z30pLGIucHVzaCh7bmFtZTpcImR5XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmh9KSxiLnB1c2goe25hbWU6XCJybW92ZXRvXCIsdHlwZTpcIk9QXCIsdmFsdWU6MjF9KSxkPU1hdGgucm91bmQoaS54KSxlPU1hdGgucm91bmQoaS55KTtlbHNlIGlmKFwiTFwiPT09aS50eXBlKWc9TWF0aC5yb3VuZChpLngtZCksaD1NYXRoLnJvdW5kKGkueS1lKSxiLnB1c2goe25hbWU6XCJkeFwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpnfSksYi5wdXNoKHtuYW1lOlwiZHlcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6aH0pLGIucHVzaCh7bmFtZTpcInJsaW5ldG9cIix0eXBlOlwiT1BcIix2YWx1ZTo1fSksZD1NYXRoLnJvdW5kKGkueCksZT1NYXRoLnJvdW5kKGkueSk7ZWxzZSBpZihcIkNcIj09PWkudHlwZSl7dmFyIGw9TWF0aC5yb3VuZChpLngxLWQpLG09TWF0aC5yb3VuZChpLnkxLWUpLG49TWF0aC5yb3VuZChpLngyLWkueDEpLG89TWF0aC5yb3VuZChpLnkyLWkueTEpO2c9TWF0aC5yb3VuZChpLngtaS54MiksaD1NYXRoLnJvdW5kKGkueS1pLnkyKSxiLnB1c2goe25hbWU6XCJkeDFcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6bH0pLGIucHVzaCh7bmFtZTpcImR5MVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTptfSksYi5wdXNoKHtuYW1lOlwiZHgyXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOm59KSxiLnB1c2goe25hbWU6XCJkeTJcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6b30pLGIucHVzaCh7bmFtZTpcImR4XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmd9KSxiLnB1c2goe25hbWU6XCJkeVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpofSksYi5wdXNoKHtuYW1lOlwicnJjdXJ2ZXRvXCIsdHlwZTpcIk9QXCIsdmFsdWU6OH0pLGQ9TWF0aC5yb3VuZChpLngpLGU9TWF0aC5yb3VuZChpLnkpfX1yZXR1cm4gYi5wdXNoKHtuYW1lOlwiZW5kY2hhclwiLHR5cGU6XCJPUFwiLHZhbHVlOjE0fSksYn1mdW5jdGlvbiBLYShhKXtmb3IodmFyIGI9bmV3IEllLlJlY29yZChcIkNoYXJTdHJpbmdzIElOREVYXCIsW3tuYW1lOlwiY2hhclN0cmluZ3NcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hLmdldChjKSxlPUphKGQpO2IuY2hhclN0cmluZ3MucHVzaCh7bmFtZTpkLm5hbWUsdHlwZTpcIkNIQVJTVFJJTkdcIix2YWx1ZTplfSl9cmV0dXJuIGJ9ZnVuY3Rpb24gTGEoYSxiKXt2YXIgYz1uZXcgSWUuUmVjb3JkKFwiUHJpdmF0ZSBESUNUXCIsW3tuYW1lOlwiZGljdFwiLHR5cGU6XCJESUNUXCIsdmFsdWU6e319XSk7cmV0dXJuIGMuZGljdD1EYShVZSxhLGIpLGN9ZnVuY3Rpb24gTWEoYSxiKXtmb3IodmFyIGMsZD1uZXcgSWUuVGFibGUoXCJDRkYgXCIsW3tuYW1lOlwiaGVhZGVyXCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcIm5hbWVJbmRleFwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJ0b3BEaWN0SW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwic3RyaW5nSW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwiZ2xvYmFsU3VickluZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcImNoYXJzZXRzXCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcImNoYXJTdHJpbmdzSW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwicHJpdmF0ZURpY3RcIix0eXBlOlwiUkVDT1JEXCJ9XSksZT0xL2IudW5pdHNQZXJFbSxmPXt2ZXJzaW9uOmIudmVyc2lvbixmdWxsTmFtZTpiLmZ1bGxOYW1lLGZhbWlseU5hbWU6Yi5mYW1pbHlOYW1lLHdlaWdodDpiLndlaWdodE5hbWUsZm9udEJCb3g6Yi5mb250QkJveHx8WzAsMCwwLDBdLGZvbnRNYXRyaXg6W2UsMCwwLGUsMCwwXSxjaGFyc2V0Ojk5OSxlbmNvZGluZzowLGNoYXJTdHJpbmdzOjk5OSxwcml2YXRlOlswLDk5OV19LGc9e30saD1bXSxpPTE7aTxhLmxlbmd0aDtpKz0xKWM9YS5nZXQoaSksaC5wdXNoKGMubmFtZSk7dmFyIGo9W107ZC5oZWFkZXI9QmEoKSxkLm5hbWVJbmRleD1DYShbYi5wb3N0U2NyaXB0TmFtZV0pO3ZhciBrPUVhKGYsaik7ZC50b3BEaWN0SW5kZXg9RmEoayksZC5nbG9iYWxTdWJySW5kZXg9SGEoKSxkLmNoYXJzZXRzPUlhKGgsaiksZC5jaGFyU3RyaW5nc0luZGV4PUthKGEpLGQucHJpdmF0ZURpY3Q9TGEoZyxqKSxkLnN0cmluZ0luZGV4PUdhKGopO3ZhciBsPWQuaGVhZGVyLnNpemVPZigpK2QubmFtZUluZGV4LnNpemVPZigpK2QudG9wRGljdEluZGV4LnNpemVPZigpK2Quc3RyaW5nSW5kZXguc2l6ZU9mKCkrZC5nbG9iYWxTdWJySW5kZXguc2l6ZU9mKCk7cmV0dXJuIGYuY2hhcnNldD1sLGYuZW5jb2Rpbmc9MCxmLmNoYXJTdHJpbmdzPWYuY2hhcnNldCtkLmNoYXJzZXRzLnNpemVPZigpLGYucHJpdmF0ZVsxXT1mLmNoYXJTdHJpbmdzK2QuY2hhclN0cmluZ3NJbmRleC5zaXplT2YoKSxrPUVhKGYsaiksZC50b3BEaWN0SW5kZXg9RmEoayksZH1mdW5jdGlvbiBOYShhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3JldHVybiBjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLmZvbnRSZXZpc2lvbj1NYXRoLnJvdW5kKDFlMypkLnBhcnNlRml4ZWQoKSkvMWUzLGMuY2hlY2tTdW1BZGp1c3RtZW50PWQucGFyc2VVTG9uZygpLGMubWFnaWNOdW1iZXI9ZC5wYXJzZVVMb25nKCkseGUuYXJndW1lbnQoMTU5NDgzNDE2NT09PWMubWFnaWNOdW1iZXIsXCJGb250IGhlYWRlciBoYXMgd3JvbmcgbWFnaWMgbnVtYmVyLlwiKSxjLmZsYWdzPWQucGFyc2VVU2hvcnQoKSxjLnVuaXRzUGVyRW09ZC5wYXJzZVVTaG9ydCgpLGMuY3JlYXRlZD1kLnBhcnNlTG9uZ0RhdGVUaW1lKCksYy5tb2RpZmllZD1kLnBhcnNlTG9uZ0RhdGVUaW1lKCksYy54TWluPWQucGFyc2VTaG9ydCgpLGMueU1pbj1kLnBhcnNlU2hvcnQoKSxjLnhNYXg9ZC5wYXJzZVNob3J0KCksYy55TWF4PWQucGFyc2VTaG9ydCgpLGMubWFjU3R5bGU9ZC5wYXJzZVVTaG9ydCgpLGMubG93ZXN0UmVjUFBFTT1kLnBhcnNlVVNob3J0KCksYy5mb250RGlyZWN0aW9uSGludD1kLnBhcnNlU2hvcnQoKSxjLmluZGV4VG9Mb2NGb3JtYXQ9ZC5wYXJzZVNob3J0KCksYy5nbHlwaERhdGFGb3JtYXQ9ZC5wYXJzZVNob3J0KCksY31mdW5jdGlvbiBPYShhKXt2YXIgYj1NYXRoLnJvdW5kKChuZXcgRGF0ZSkuZ2V0VGltZSgpLzFlMykrMjA4Mjg0NDgwMCxjPWI7cmV0dXJuIGEuY3JlYXRlZFRpbWVzdGFtcCYmKGM9YS5jcmVhdGVkVGltZXN0YW1wKzIwODI4NDQ4MDApLG5ldyBJZS5UYWJsZShcImhlYWRcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwiZm9udFJldmlzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwiY2hlY2tTdW1BZGp1c3RtZW50XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtYWdpY051bWJlclwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjE1OTQ4MzQxNjV9LHtuYW1lOlwiZmxhZ3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1bml0c1BlckVtXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjFlM30se25hbWU6XCJjcmVhdGVkXCIsdHlwZTpcIkxPTkdEQVRFVElNRVwiLHZhbHVlOmN9LHtuYW1lOlwibW9kaWZpZWRcIix0eXBlOlwiTE9OR0RBVEVUSU1FXCIsdmFsdWU6Yn0se25hbWU6XCJ4TWluXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5TWluXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ4TWF4XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5TWF4XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJtYWNTdHlsZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImxvd2VzdFJlY1BQRU1cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJmb250RGlyZWN0aW9uSGludFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjJ9LHtuYW1lOlwiaW5kZXhUb0xvY0Zvcm1hdFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZ2x5cGhEYXRhRm9ybWF0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH1dLGEpfWZ1bmN0aW9uIFBhKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7cmV0dXJuIGMudmVyc2lvbj1kLnBhcnNlVmVyc2lvbigpLGMuYXNjZW5kZXI9ZC5wYXJzZVNob3J0KCksYy5kZXNjZW5kZXI9ZC5wYXJzZVNob3J0KCksYy5saW5lR2FwPWQucGFyc2VTaG9ydCgpLGMuYWR2YW5jZVdpZHRoTWF4PWQucGFyc2VVU2hvcnQoKSxjLm1pbkxlZnRTaWRlQmVhcmluZz1kLnBhcnNlU2hvcnQoKSxjLm1pblJpZ2h0U2lkZUJlYXJpbmc9ZC5wYXJzZVNob3J0KCksYy54TWF4RXh0ZW50PWQucGFyc2VTaG9ydCgpLGMuY2FyZXRTbG9wZVJpc2U9ZC5wYXJzZVNob3J0KCksYy5jYXJldFNsb3BlUnVuPWQucGFyc2VTaG9ydCgpLGMuY2FyZXRPZmZzZXQ9ZC5wYXJzZVNob3J0KCksZC5yZWxhdGl2ZU9mZnNldCs9OCxjLm1ldHJpY0RhdGFGb3JtYXQ9ZC5wYXJzZVNob3J0KCksYy5udW1iZXJPZkhNZXRyaWNzPWQucGFyc2VVU2hvcnQoKSxjfWZ1bmN0aW9uIFFhKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJoaGVhXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjY1NTM2fSx7bmFtZTpcImFzY2VuZGVyXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJkZXNjZW5kZXJcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImxpbmVHYXBcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImFkdmFuY2VXaWR0aE1heFwiLHR5cGU6XCJVRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcIm1pbkxlZnRTaWRlQmVhcmluZ1wiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwibWluUmlnaHRTaWRlQmVhcmluZ1wiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwieE1heEV4dGVudFwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwiY2FyZXRTbG9wZVJpc2VcIix0eXBlOlwiU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcImNhcmV0U2xvcGVSdW5cIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImNhcmV0T2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXNlcnZlZDFcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlc2VydmVkMlwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVzZXJ2ZWQzXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXNlcnZlZDRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcIm1ldHJpY0RhdGFGb3JtYXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcIm51bWJlck9mSE1ldHJpY3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dLGEpfWZ1bmN0aW9uIFJhKGEsYixjLGQsZSl7Zm9yKHZhciBmLGcsaD1uZXcgTGUuUGFyc2VyKGEsYiksaT0wO2k8ZDtpKz0xKXtpPGMmJihmPWgucGFyc2VVU2hvcnQoKSxnPWgucGFyc2VTaG9ydCgpKTt2YXIgaj1lLmdldChpKTtqLmFkdmFuY2VXaWR0aD1mLGoubGVmdFNpZGVCZWFyaW5nPWd9fWZ1bmN0aW9uIFNhKGEpe2Zvcih2YXIgYj1uZXcgSWUuVGFibGUoXCJobXR4XCIsW10pLGM9MDtjPGEubGVuZ3RoO2MrPTEpe3ZhciBkPWEuZ2V0KGMpLGU9ZC5hZHZhbmNlV2lkdGh8fDAsZj1kLmxlZnRTaWRlQmVhcmluZ3x8MDtiLmZpZWxkcy5wdXNoKHtuYW1lOlwiYWR2YW5jZVdpZHRoX1wiK2MsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmV9KSxiLmZpZWxkcy5wdXNoKHtuYW1lOlwibGVmdFNpZGVCZWFyaW5nX1wiK2MsdHlwZTpcIlNIT1JUXCIsdmFsdWU6Zn0pfXJldHVybiBifWZ1bmN0aW9uIFRhKGEpe2Zvcih2YXIgYj1uZXcgSWUuVGFibGUoXCJsdGFnXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjF9LHtuYW1lOlwiZmxhZ3NcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm51bVRhZ3NcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTphLmxlbmd0aH1dKSxjPVwiXCIsZD0xMis0KmEubGVuZ3RoLGU9MDtlPGEubGVuZ3RoOysrZSl7dmFyIGY9Yy5pbmRleE9mKGFbZV0pO2Y8MCYmKGY9Yy5sZW5ndGgsYys9YVtlXSksYi5maWVsZHMucHVzaCh7bmFtZTpcIm9mZnNldCBcIitlLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkK2Z9KSxiLmZpZWxkcy5wdXNoKHtuYW1lOlwibGVuZ3RoIFwiK2UsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmFbZV0ubGVuZ3RofSl9cmV0dXJuIGIuZmllbGRzLnB1c2goe25hbWU6XCJzdHJpbmdQb29sXCIsdHlwZTpcIkNIQVJBUlJBWVwiLHZhbHVlOmN9KSxifWZ1bmN0aW9uIFVhKGEsYil7dmFyIGM9bmV3IExlLlBhcnNlcihhLGIpLGQ9Yy5wYXJzZVVMb25nKCk7eGUuYXJndW1lbnQoMT09PWQsXCJVbnN1cHBvcnRlZCBsdGFnIHRhYmxlIHZlcnNpb24uXCIpLGMuc2tpcChcInVMb25nXCIsMSk7Zm9yKHZhciBlPWMucGFyc2VVTG9uZygpLGY9W10sZz0wO2c8ZTtnKyspe2Zvcih2YXIgaD1cIlwiLGk9YitjLnBhcnNlVVNob3J0KCksaj1jLnBhcnNlVVNob3J0KCksaz1pO2s8aStqOysrayloKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEuZ2V0SW50OChrKSk7Zi5wdXNoKGgpfXJldHVybiBmfWZ1bmN0aW9uIFZhKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7cmV0dXJuIGMudmVyc2lvbj1kLnBhcnNlVmVyc2lvbigpLGMubnVtR2x5cGhzPWQucGFyc2VVU2hvcnQoKSwxPT09Yy52ZXJzaW9uJiYoYy5tYXhQb2ludHM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29udG91cnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29tcG9zaXRlUG9pbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbXBvc2l0ZUNvbnRvdXJzPWQucGFyc2VVU2hvcnQoKSxjLm1heFpvbmVzPWQucGFyc2VVU2hvcnQoKSxjLm1heFR3aWxpZ2h0UG9pbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heFN0b3JhZ2U9ZC5wYXJzZVVTaG9ydCgpLGMubWF4RnVuY3Rpb25EZWZzPWQucGFyc2VVU2hvcnQoKSxjLm1heEluc3RydWN0aW9uRGVmcz1kLnBhcnNlVVNob3J0KCksYy5tYXhTdGFja0VsZW1lbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heFNpemVPZkluc3RydWN0aW9ucz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb21wb25lbnRFbGVtZW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb21wb25lbnREZXB0aD1kLnBhcnNlVVNob3J0KCkpLGN9ZnVuY3Rpb24gV2EoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcIm1heHBcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6MjA0ODB9LHtuYW1lOlwibnVtR2x5cGhzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmF9XSl9ZnVuY3Rpb24gWGEoYSxiLGMpe3N3aXRjaChhKXtjYXNlIDA6aWYoNjU1MzU9PT1iKXJldHVyblwidW5kXCI7aWYoYylyZXR1cm4gY1tiXTticmVhaztjYXNlIDE6cmV0dXJuIGFmW2JdO2Nhc2UgMzpyZXR1cm4gY2ZbYl19fWZ1bmN0aW9uIFlhKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiBkZjtjYXNlIDE6cmV0dXJuIGZmW2NdfHxlZltiXTtjYXNlIDM6aWYoMT09PWJ8fDEwPT09YilyZXR1cm4gZGZ9fWZ1bmN0aW9uIFphKGEsYixjKXtmb3IodmFyIGQ9e30sZT1uZXcgTGUuUGFyc2VyKGEsYiksZj1lLnBhcnNlVVNob3J0KCksZz1lLnBhcnNlVVNob3J0KCksaD1lLm9mZnNldCtlLnBhcnNlVVNob3J0KCksaT0wO2k8ZztpKyspe3ZhciBqPWUucGFyc2VVU2hvcnQoKSxrPWUucGFyc2VVU2hvcnQoKSxsPWUucGFyc2VVU2hvcnQoKSxtPWUucGFyc2VVU2hvcnQoKSxuPV9lW21dfHxtLG89ZS5wYXJzZVVTaG9ydCgpLHA9ZS5wYXJzZVVTaG9ydCgpLHE9WGEoaixsLGMpLHI9WWEoaixrLGwpO2lmKHZvaWQgMCE9PXImJnZvaWQgMCE9PXEpe3ZhciBzPXZvaWQgMDtpZihzPXI9PT1kZj9BZS5VVEYxNihhLGgrcCxvKTpBZS5NQUNTVFJJTkcoYSxoK3AsbyxyKSl7dmFyIHQ9ZFtuXTt2b2lkIDA9PT10JiYodD1kW25dPXt9KSx0W3FdPXN9fX1yZXR1cm4gMT09PWYmJmUucGFyc2VVU2hvcnQoKSxkfWZ1bmN0aW9uICRhKGEpe3ZhciBiPXt9O2Zvcih2YXIgYyBpbiBhKWJbYVtjXV09cGFyc2VJbnQoYyk7cmV0dXJuIGJ9ZnVuY3Rpb24gX2EoYSxiLGMsZCxlLGYpe3JldHVybiBuZXcgSWUuUmVjb3JkKFwiTmFtZVJlY29yZFwiLFt7bmFtZTpcInBsYXRmb3JtSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YX0se25hbWU6XCJlbmNvZGluZ0lEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmJ9LHtuYW1lOlwibGFuZ3VhZ2VJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjfSx7bmFtZTpcIm5hbWVJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkfSx7bmFtZTpcImxlbmd0aFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTplfSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpmfV0pfWZ1bmN0aW9uIGFiKGEsYil7dmFyIGM9YS5sZW5ndGgsZD1iLmxlbmd0aC1jKzE7YTpmb3IodmFyIGU9MDtlPGQ7ZSsrKWZvcig7ZTxkO2UrKyl7Zm9yKHZhciBmPTA7ZjxjO2YrKylpZihiW2UrZl0hPT1hW2ZdKWNvbnRpbnVlIGE7cmV0dXJuIGV9cmV0dXJuLTF9ZnVuY3Rpb24gYmIoYSxiKXt2YXIgYz1hYihhLGIpO2lmKGM8MCl7Yz1iLmxlbmd0aDtmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2Q8ZTsrK2QpYi5wdXNoKGFbZF0pfXJldHVybiBjfWZ1bmN0aW9uIGNiKGEsYil7dmFyIGMsZD1bXSxlPXt9LGY9JGEoX2UpO2Zvcih2YXIgZyBpbiBhKXt2YXIgaD1mW2ddO2lmKHZvaWQgMD09PWgmJihoPWcpLGM9cGFyc2VJbnQoaCksaXNOYU4oYykpdGhyb3cgbmV3IEVycm9yKCdOYW1lIHRhYmxlIGVudHJ5IFwiJytnKydcIiBkb2VzIG5vdCBleGlzdCwgc2VlIG5hbWVUYWJsZU5hbWVzIGZvciBjb21wbGV0ZSBsaXN0LicpO2VbY109YVtnXSxkLnB1c2goYyl9Zm9yKHZhciBpPSRhKGFmKSxqPSRhKGNmKSxrPVtdLGw9W10sbT0wO208ZC5sZW5ndGg7bSsrKXtjPWRbbV07dmFyIG49ZVtjXTtmb3IodmFyIG8gaW4gbil7dmFyIHA9bltvXSxxPTEscj1pW29dLHM9YmZbcl0sdD1ZYShxLHMsciksdT1CZS5NQUNTVFJJTkcocCx0KTt2b2lkIDA9PT11JiYocT0wLHI9Yi5pbmRleE9mKG8pLHI8MCYmKHI9Yi5sZW5ndGgsYi5wdXNoKG8pKSxzPTQsdT1CZS5VVEYxNihwKSk7dmFyIHY9YmIodSxsKTtrLnB1c2goX2EocSxzLHIsYyx1Lmxlbmd0aCx2KSk7dmFyIHc9altvXTtpZih2b2lkIDAhPT13KXt2YXIgeD1CZS5VVEYxNihwKSx5PWJiKHgsbCk7ay5wdXNoKF9hKDMsMSx3LGMseC5sZW5ndGgseSkpfX19ay5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEucGxhdGZvcm1JRC1iLnBsYXRmb3JtSUR8fGEuZW5jb2RpbmdJRC1iLmVuY29kaW5nSUR8fGEubGFuZ3VhZ2VJRC1iLmxhbmd1YWdlSUR8fGEubmFtZUlELWIubmFtZUlEfSk7Zm9yKHZhciB6PW5ldyBJZS5UYWJsZShcIm5hbWVcIixbe25hbWU6XCJmb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJjb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTprLmxlbmd0aH0se25hbWU6XCJzdHJpbmdPZmZzZXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6NisxMiprLmxlbmd0aH1dKSxBPTA7QTxrLmxlbmd0aDtBKyspei5maWVsZHMucHVzaCh7bmFtZTpcInJlY29yZF9cIitBLHR5cGU6XCJSRUNPUkRcIix2YWx1ZTprW0FdfSk7cmV0dXJuIHouZmllbGRzLnB1c2goe25hbWU6XCJzdHJpbmdzXCIsdHlwZTpcIkxJVEVSQUxcIix2YWx1ZTpsfSksen1mdW5jdGlvbiBkYihhKXtmb3IodmFyIGI9MDtiPGhmLmxlbmd0aDtiKz0xKXt2YXIgYz1oZltiXTtpZihhPj1jLmJlZ2luJiZhPGMuZW5kKXJldHVybiBifXJldHVybi0xfWZ1bmN0aW9uIGViKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7Yy52ZXJzaW9uPWQucGFyc2VVU2hvcnQoKSxjLnhBdmdDaGFyV2lkdGg9ZC5wYXJzZVNob3J0KCksYy51c1dlaWdodENsYXNzPWQucGFyc2VVU2hvcnQoKSxjLnVzV2lkdGhDbGFzcz1kLnBhcnNlVVNob3J0KCksYy5mc1R5cGU9ZC5wYXJzZVVTaG9ydCgpLGMueVN1YnNjcmlwdFhTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1YnNjcmlwdFlTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1YnNjcmlwdFhPZmZzZXQ9ZC5wYXJzZVNob3J0KCksYy55U3Vic2NyaXB0WU9mZnNldD1kLnBhcnNlU2hvcnQoKSxjLnlTdXBlcnNjcmlwdFhTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1cGVyc2NyaXB0WVNpemU9ZC5wYXJzZVNob3J0KCksYy55U3VwZXJzY3JpcHRYT2Zmc2V0PWQucGFyc2VTaG9ydCgpLGMueVN1cGVyc2NyaXB0WU9mZnNldD1kLnBhcnNlU2hvcnQoKSxjLnlTdHJpa2VvdXRTaXplPWQucGFyc2VTaG9ydCgpLGMueVN0cmlrZW91dFBvc2l0aW9uPWQucGFyc2VTaG9ydCgpLGMuc0ZhbWlseUNsYXNzPWQucGFyc2VTaG9ydCgpLGMucGFub3NlPVtdO2Zvcih2YXIgZT0wO2U8MTA7ZSsrKWMucGFub3NlW2VdPWQucGFyc2VCeXRlKCk7cmV0dXJuIGMudWxVbmljb2RlUmFuZ2UxPWQucGFyc2VVTG9uZygpLGMudWxVbmljb2RlUmFuZ2UyPWQucGFyc2VVTG9uZygpLGMudWxVbmljb2RlUmFuZ2UzPWQucGFyc2VVTG9uZygpLGMudWxVbmljb2RlUmFuZ2U0PWQucGFyc2VVTG9uZygpLGMuYWNoVmVuZElEPVN0cmluZy5mcm9tQ2hhckNvZGUoZC5wYXJzZUJ5dGUoKSxkLnBhcnNlQnl0ZSgpLGQucGFyc2VCeXRlKCksZC5wYXJzZUJ5dGUoKSksYy5mc1NlbGVjdGlvbj1kLnBhcnNlVVNob3J0KCksYy51c0ZpcnN0Q2hhckluZGV4PWQucGFyc2VVU2hvcnQoKSxjLnVzTGFzdENoYXJJbmRleD1kLnBhcnNlVVNob3J0KCksYy5zVHlwb0FzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMuc1R5cG9EZXNjZW5kZXI9ZC5wYXJzZVNob3J0KCksYy5zVHlwb0xpbmVHYXA9ZC5wYXJzZVNob3J0KCksYy51c1dpbkFzY2VudD1kLnBhcnNlVVNob3J0KCksYy51c1dpbkRlc2NlbnQ9ZC5wYXJzZVVTaG9ydCgpLGMudmVyc2lvbj49MSYmKGMudWxDb2RlUGFnZVJhbmdlMT1kLnBhcnNlVUxvbmcoKSxjLnVsQ29kZVBhZ2VSYW5nZTI9ZC5wYXJzZVVMb25nKCkpLGMudmVyc2lvbj49MiYmKGMuc3hIZWlnaHQ9ZC5wYXJzZVNob3J0KCksYy5zQ2FwSGVpZ2h0PWQucGFyc2VTaG9ydCgpLGMudXNEZWZhdWx0Q2hhcj1kLnBhcnNlVVNob3J0KCksYy51c0JyZWFrQ2hhcj1kLnBhcnNlVVNob3J0KCksYy51c01heENvbnRlbnQ9ZC5wYXJzZVVTaG9ydCgpKSxjfWZ1bmN0aW9uIGZiKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJPUy8yXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTozfSx7bmFtZTpcInhBdmdDaGFyV2lkdGhcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzV2VpZ2h0Q2xhc3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c1dpZHRoQ2xhc3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJmc1R5cGVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5U3Vic2NyaXB0WFNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo2NTB9LHtuYW1lOlwieVN1YnNjcmlwdFlTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6Njk5fSx7bmFtZTpcInlTdWJzY3JpcHRYT2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5U3Vic2NyaXB0WU9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjE0MH0se25hbWU6XCJ5U3VwZXJzY3JpcHRYU2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjY1MH0se25hbWU6XCJ5U3VwZXJzY3JpcHRZU2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjY5OX0se25hbWU6XCJ5U3VwZXJzY3JpcHRYT2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5U3VwZXJzY3JpcHRZT2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6NDc5fSx7bmFtZTpcInlTdHJpa2VvdXRTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6NDl9LHtuYW1lOlwieVN0cmlrZW91dFBvc2l0aW9uXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MjU4fSx7bmFtZTpcInNGYW1pbHlDbGFzc1wiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiYkZhbWlseVR5cGVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlNlcmlmU3R5bGVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYldlaWdodFwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiUHJvcG9ydGlvblwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiQ29udHJhc3RcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlN0cm9rZVZhcmlhdGlvblwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiQXJtU3R5bGVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYkxldHRlcmZvcm1cIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYk1pZGxpbmVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlhIZWlnaHRcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwidWxVbmljb2RlUmFuZ2UxXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJ1bFVuaWNvZGVSYW5nZTJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcInVsVW5pY29kZVJhbmdlM1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwidWxVbmljb2RlUmFuZ2U0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJhY2hWZW5kSURcIix0eXBlOlwiQ0hBUkFSUkFZXCIsdmFsdWU6XCJYWFhYXCJ9LHtuYW1lOlwiZnNTZWxlY3Rpb25cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c0ZpcnN0Q2hhckluZGV4XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNMYXN0Q2hhckluZGV4XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic1R5cG9Bc2NlbmRlclwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic1R5cG9EZXNjZW5kZXJcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNUeXBvTGluZUdhcFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNXaW5Bc2NlbnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c1dpbkRlc2NlbnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1bENvZGVQYWdlUmFuZ2UxXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJ1bENvZGVQYWdlUmFuZ2UyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJzeEhlaWdodFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic0NhcEhlaWdodFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNEZWZhdWx0Q2hhclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzQnJlYWtDaGFyXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNNYXhDb250ZXh0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSxhKX1mdW5jdGlvbiBnYihhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3N3aXRjaChjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLml0YWxpY0FuZ2xlPWQucGFyc2VGaXhlZCgpLGMudW5kZXJsaW5lUG9zaXRpb249ZC5wYXJzZVNob3J0KCksYy51bmRlcmxpbmVUaGlja25lc3M9ZC5wYXJzZVNob3J0KCksYy5pc0ZpeGVkUGl0Y2g9ZC5wYXJzZVVMb25nKCksYy5taW5NZW1UeXBlNDI9ZC5wYXJzZVVMb25nKCksYy5tYXhNZW1UeXBlNDI9ZC5wYXJzZVVMb25nKCksYy5taW5NZW1UeXBlMT1kLnBhcnNlVUxvbmcoKSxjLm1heE1lbVR5cGUxPWQucGFyc2VVTG9uZygpLGMudmVyc2lvbil7Y2FzZSAxOmMubmFtZXM9UWUuc2xpY2UoKTticmVhaztjYXNlIDI6Yy5udW1iZXJPZkdseXBocz1kLnBhcnNlVVNob3J0KCksYy5nbHlwaE5hbWVJbmRleD1uZXcgQXJyYXkoYy5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBlPTA7ZTxjLm51bWJlck9mR2x5cGhzO2UrKyljLmdseXBoTmFtZUluZGV4W2VdPWQucGFyc2VVU2hvcnQoKTtjLm5hbWVzPVtdO2Zvcih2YXIgZj0wO2Y8Yy5udW1iZXJPZkdseXBocztmKyspaWYoYy5nbHlwaE5hbWVJbmRleFtmXT49UWUubGVuZ3RoKXt2YXIgZz1kLnBhcnNlQ2hhcigpO2MubmFtZXMucHVzaChkLnBhcnNlU3RyaW5nKGcpKX1icmVhaztjYXNlIDIuNTpjLm51bWJlck9mR2x5cGhzPWQucGFyc2VVU2hvcnQoKSxjLm9mZnNldD1uZXcgQXJyYXkoYy5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBoPTA7aDxjLm51bWJlck9mR2x5cGhzO2grKyljLm9mZnNldFtoXT1kLnBhcnNlQ2hhcigpfXJldHVybiBjfWZ1bmN0aW9uIGhiKCl7cmV0dXJuIG5ldyBJZS5UYWJsZShcInBvc3RcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6MTk2NjA4fSx7bmFtZTpcIml0YWxpY0FuZ2xlXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6MH0se25hbWU6XCJ1bmRlcmxpbmVQb3NpdGlvblwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwidW5kZXJsaW5lVGhpY2tuZXNzXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJpc0ZpeGVkUGl0Y2hcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1pbk1lbVR5cGU0MlwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWF4TWVtVHlwZTQyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtaW5NZW1UeXBlMVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWF4TWVtVHlwZTFcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfV0pfWZ1bmN0aW9uIGliKGEsYil7Yj1ifHwwO3ZhciBjPW5ldyBRKGEsYiksZD1jLnBhcnNlVmVyc2lvbigxKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWR8fDEuMT09PWQsXCJVbnN1cHBvcnRlZCBHU1VCIHRhYmxlIHZlcnNpb24uXCIpLDE9PT1kP3t2ZXJzaW9uOmQsc2NyaXB0czpjLnBhcnNlU2NyaXB0TGlzdCgpLGZlYXR1cmVzOmMucGFyc2VGZWF0dXJlTGlzdCgpLGxvb2t1cHM6Yy5wYXJzZUxvb2t1cExpc3QobGYpfTp7dmVyc2lvbjpkLHNjcmlwdHM6Yy5wYXJzZVNjcmlwdExpc3QoKSxmZWF0dXJlczpjLnBhcnNlRmVhdHVyZUxpc3QoKSxsb29rdXBzOmMucGFyc2VMb29rdXBMaXN0KGxmKSx2YXJpYXRpb25zOmMucGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3QoKX19ZnVuY3Rpb24gamIoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcIkdTVUJcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwic2NyaXB0c1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5TY3JpcHRMaXN0KGEuc2NyaXB0cyl9LHtuYW1lOlwiZmVhdHVyZXNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuRmVhdHVyZUxpc3QoYS5mZWF0dXJlcyl9LHtuYW1lOlwibG9va3Vwc1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Mb29rdXBMaXN0KGEubG9va3VwcyxuZil9XSl9ZnVuY3Rpb24ga2IoYSxiKXt2YXIgYz1uZXcgTGUuUGFyc2VyKGEsYiksZD1jLnBhcnNlVUxvbmcoKTt4ZS5hcmd1bWVudCgxPT09ZCxcIlVuc3VwcG9ydGVkIE1FVEEgdGFibGUgdmVyc2lvbi5cIiksYy5wYXJzZVVMb25nKCksYy5wYXJzZVVMb25nKCk7Zm9yKHZhciBlPWMucGFyc2VVTG9uZygpLGY9e30sZz0wO2c8ZTtnKyspe3ZhciBoPWMucGFyc2VUYWcoKSxpPWMucGFyc2VVTG9uZygpLGo9Yy5wYXJzZVVMb25nKCksaz1BZS5VVEY4KGEsYitpLGopO2ZbaF09a31yZXR1cm4gZn1mdW5jdGlvbiBsYihhKXt2YXIgYj1PYmplY3Qua2V5cyhhKS5sZW5ndGgsYz1cIlwiLGQ9MTYrMTIqYixlPW5ldyBJZS5UYWJsZShcIm1ldGFcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MX0se25hbWU6XCJmbGFnc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwib2Zmc2V0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6ZH0se25hbWU6XCJudW1UYWdzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6Yn1dKTtmb3IodmFyIGYgaW4gYSl7dmFyIGc9Yy5sZW5ndGg7Yys9YVtmXSxlLmZpZWxkcy5wdXNoKHtuYW1lOlwidGFnIFwiK2YsdHlwZTpcIlRBR1wiLHZhbHVlOmZ9KSxlLmZpZWxkcy5wdXNoKHtuYW1lOlwib2Zmc2V0IFwiK2YsdHlwZTpcIlVMT05HXCIsdmFsdWU6ZCtnfSksZS5maWVsZHMucHVzaCh7bmFtZTpcImxlbmd0aCBcIitmLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmFbZl0ubGVuZ3RofSl9cmV0dXJuIGUuZmllbGRzLnB1c2goe25hbWU6XCJzdHJpbmdQb29sXCIsdHlwZTpcIkNIQVJBUlJBWVwiLHZhbHVlOmN9KSxlfWZ1bmN0aW9uIG1iKGEpe3JldHVybiBNYXRoLmxvZyhhKS9NYXRoLmxvZygyKXwwfWZ1bmN0aW9uIG5iKGEpe2Zvcig7YS5sZW5ndGglNCE9MDspYS5wdXNoKDApO2Zvcih2YXIgYj0wLGM9MDtjPGEubGVuZ3RoO2MrPTQpYis9KGFbY108PDI0KSsoYVtjKzFdPDwxNikrKGFbYysyXTw8OCkrYVtjKzNdO3JldHVybiBiJT1NYXRoLnBvdygyLDMyKX1mdW5jdGlvbiBvYihhLGIsYyxkKXtyZXR1cm4gbmV3IEllLlJlY29yZChcIlRhYmxlIFJlY29yZFwiLFt7bmFtZTpcInRhZ1wiLHR5cGU6XCJUQUdcIix2YWx1ZTp2b2lkIDAhPT1hP2E6XCJcIn0se25hbWU6XCJjaGVja1N1bVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnZvaWQgMCE9PWI/YjowfSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnZvaWQgMCE9PWM/YzowfSx7bmFtZTpcImxlbmd0aFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnZvaWQgMCE9PWQ/ZDowfV0pfWZ1bmN0aW9uIHBiKGEpe3ZhciBiPW5ldyBJZS5UYWJsZShcInNmbnRcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlRBR1wiLHZhbHVlOlwiT1RUT1wifSx7bmFtZTpcIm51bVRhYmxlc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNlYXJjaFJhbmdlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZW50cnlTZWxlY3RvclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJhbmdlU2hpZnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dKTtiLnRhYmxlcz1hLGIubnVtVGFibGVzPWEubGVuZ3RoO3ZhciBjPU1hdGgucG93KDIsbWIoYi5udW1UYWJsZXMpKTtiLnNlYXJjaFJhbmdlPTE2KmMsYi5lbnRyeVNlbGVjdG9yPW1iKGMpLGIucmFuZ2VTaGlmdD0xNipiLm51bVRhYmxlcy1iLnNlYXJjaFJhbmdlO2Zvcih2YXIgZD1bXSxlPVtdLGY9Yi5zaXplT2YoKStvYigpLnNpemVPZigpKmIubnVtVGFibGVzO2YlNCE9MDspZis9MSxlLnB1c2goe25hbWU6XCJwYWRkaW5nXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSk7Zm9yKHZhciBnPTA7ZzxhLmxlbmd0aDtnKz0xKXt2YXIgaD1hW2ddO3hlLmFyZ3VtZW50KDQ9PT1oLnRhYmxlTmFtZS5sZW5ndGgsXCJUYWJsZSBuYW1lXCIraC50YWJsZU5hbWUrXCIgaXMgaW52YWxpZC5cIik7dmFyIGk9aC5zaXplT2YoKSxqPW9iKGgudGFibGVOYW1lLG5iKGguZW5jb2RlKCkpLGYsaSk7Zm9yKGQucHVzaCh7bmFtZTpqLnRhZytcIiBUYWJsZSBSZWNvcmRcIix0eXBlOlwiUkVDT1JEXCIsdmFsdWU6an0pLGUucHVzaCh7bmFtZTpoLnRhYmxlTmFtZStcIiB0YWJsZVwiLHR5cGU6XCJSRUNPUkRcIix2YWx1ZTpofSksZis9aSx4ZS5hcmd1bWVudCghaXNOYU4oZiksXCJTb21ldGhpbmcgd2VudCB3cm9uZyBjYWxjdWxhdGluZyB0aGUgb2Zmc2V0LlwiKTtmJTQhPTA7KWYrPTEsZS5wdXNoKHtuYW1lOlwicGFkZGluZ1wiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0pfXJldHVybiBkLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS52YWx1ZS50YWc+Yi52YWx1ZS50YWc/MTotMX0pLGIuZmllbGRzPWIuZmllbGRzLmNvbmNhdChkKSxiLmZpZWxkcz1iLmZpZWxkcy5jb25jYXQoZSksYn1mdW5jdGlvbiBxYihhLGIsYyl7Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKz0xKXt2YXIgZT1hLmNoYXJUb0dseXBoSW5kZXgoYltkXSk7aWYoZT4wKXtyZXR1cm4gYS5nbHlwaHMuZ2V0KGUpLmdldE1ldHJpY3MoKX19cmV0dXJuIGN9ZnVuY3Rpb24gcmIoYSl7Zm9yKHZhciBiPTAsYz0wO2M8YS5sZW5ndGg7Yys9MSliKz1hW2NdO3JldHVybiBiL2EubGVuZ3RofWZ1bmN0aW9uIHNiKGEpe2Zvcih2YXIgYixjPVtdLGQ9W10sZT1bXSxmPVtdLGc9W10saD1bXSxpPVtdLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wO288YS5nbHlwaHMubGVuZ3RoO28rPTEpe3ZhciBwPWEuZ2x5cGhzLmdldChvKSxxPTB8cC51bmljb2RlO2lmKGlzTmFOKHAuYWR2YW5jZVdpZHRoKSl0aHJvdyBuZXcgRXJyb3IoXCJHbHlwaCBcIitwLm5hbWUrXCIgKFwiK28rXCIpOiBhZHZhbmNlV2lkdGggaXMgbm90IGEgbnVtYmVyLlwiKTsoYj5xfHx2b2lkIDA9PT1iKSYmcT4wJiYoYj1xKSxqPHEmJihqPXEpO3ZhciByPWpmLmdldFVuaWNvZGVSYW5nZShxKTtpZihyPDMyKWt8PTE8PHI7ZWxzZSBpZihyPDY0KWx8PTE8PHItMzI7ZWxzZSBpZihyPDk2KW18PTE8PHItNjQ7ZWxzZXtpZighKHI8MTIzKSl0aHJvdyBuZXcgRXJyb3IoXCJVbmljb2RlIHJhbmdlcyBiaXRzID4gMTIzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2VcIik7bnw9MTw8ci05Nn1pZihcIi5ub3RkZWZcIiE9PXAubmFtZSl7dmFyIHM9cC5nZXRNZXRyaWNzKCk7Yy5wdXNoKHMueE1pbiksZC5wdXNoKHMueU1pbiksZS5wdXNoKHMueE1heCksZi5wdXNoKHMueU1heCksaC5wdXNoKHMubGVmdFNpZGVCZWFyaW5nKSxpLnB1c2gocy5yaWdodFNpZGVCZWFyaW5nKSxnLnB1c2gocC5hZHZhbmNlV2lkdGgpfX12YXIgdD17eE1pbjpNYXRoLm1pbi5hcHBseShudWxsLGMpLHlNaW46TWF0aC5taW4uYXBwbHkobnVsbCxkKSx4TWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsZSkseU1heDpNYXRoLm1heC5hcHBseShudWxsLGYpLGFkdmFuY2VXaWR0aE1heDpNYXRoLm1heC5hcHBseShudWxsLGcpLGFkdmFuY2VXaWR0aEF2ZzpyYihnKSxtaW5MZWZ0U2lkZUJlYXJpbmc6TWF0aC5taW4uYXBwbHkobnVsbCxoKSxtYXhMZWZ0U2lkZUJlYXJpbmc6TWF0aC5tYXguYXBwbHkobnVsbCxoKSxtaW5SaWdodFNpZGVCZWFyaW5nOk1hdGgubWluLmFwcGx5KG51bGwsaSl9O3QuYXNjZW5kZXI9YS5hc2NlbmRlcix0LmRlc2NlbmRlcj1hLmRlc2NlbmRlcjt2YXIgdT1XZS5tYWtlKHtmbGFnczozLHVuaXRzUGVyRW06YS51bml0c1BlckVtLHhNaW46dC54TWluLHlNaW46dC55TWluLHhNYXg6dC54TWF4LHlNYXg6dC55TWF4LGxvd2VzdFJlY1BQRU06MyxjcmVhdGVkVGltZXN0YW1wOmEuY3JlYXRlZFRpbWVzdGFtcH0pLHY9WGUubWFrZSh7YXNjZW5kZXI6dC5hc2NlbmRlcixkZXNjZW5kZXI6dC5kZXNjZW5kZXIsYWR2YW5jZVdpZHRoTWF4OnQuYWR2YW5jZVdpZHRoTWF4LG1pbkxlZnRTaWRlQmVhcmluZzp0Lm1pbkxlZnRTaWRlQmVhcmluZyxtaW5SaWdodFNpZGVCZWFyaW5nOnQubWluUmlnaHRTaWRlQmVhcmluZyx4TWF4RXh0ZW50OnQubWF4TGVmdFNpZGVCZWFyaW5nKyh0LnhNYXgtdC54TWluKSxudW1iZXJPZkhNZXRyaWNzOmEuZ2x5cGhzLmxlbmd0aH0pLHc9JGUubWFrZShhLmdseXBocy5sZW5ndGgpLHg9amYubWFrZSh7eEF2Z0NoYXJXaWR0aDpNYXRoLnJvdW5kKHQuYWR2YW5jZVdpZHRoQXZnKSx1c1dlaWdodENsYXNzOmEudGFibGVzLm9zMi51c1dlaWdodENsYXNzLHVzV2lkdGhDbGFzczphLnRhYmxlcy5vczIudXNXaWR0aENsYXNzLHVzRmlyc3RDaGFySW5kZXg6Yix1c0xhc3RDaGFySW5kZXg6aix1bFVuaWNvZGVSYW5nZTE6ayx1bFVuaWNvZGVSYW5nZTI6bCx1bFVuaWNvZGVSYW5nZTM6bSx1bFVuaWNvZGVSYW5nZTQ6bixmc1NlbGVjdGlvbjphLnRhYmxlcy5vczIuZnNTZWxlY3Rpb24sc1R5cG9Bc2NlbmRlcjp0LmFzY2VuZGVyLHNUeXBvRGVzY2VuZGVyOnQuZGVzY2VuZGVyLHNUeXBvTGluZUdhcDowLHVzV2luQXNjZW50OnQueU1heCx1c1dpbkRlc2NlbnQ6TWF0aC5hYnModC55TWluKSx1bENvZGVQYWdlUmFuZ2UxOjEsc3hIZWlnaHQ6cWIoYSxcInh5dndcIix7eU1heDpNYXRoLnJvdW5kKHQuYXNjZW5kZXIvMil9KS55TWF4LHNDYXBIZWlnaHQ6cWIoYSxcIkhJS0xFRkpNTlRaQkRQUkFHT1FTVVZXWFlcIix0KS55TWF4LHVzRGVmYXVsdENoYXI6YS5oYXNDaGFyKFwiIFwiKT8zMjowLHVzQnJlYWtDaGFyOmEuaGFzQ2hhcihcIiBcIik/MzI6MH0pLHk9WWUubWFrZShhLmdseXBocyksej1NZS5tYWtlKGEuZ2x5cGhzKSxBPWEuZ2V0RW5nbGlzaE5hbWUoXCJmb250RmFtaWx5XCIpLEI9YS5nZXRFbmdsaXNoTmFtZShcImZvbnRTdWJmYW1pbHlcIiksQz1BK1wiIFwiK0IsRD1hLmdldEVuZ2xpc2hOYW1lKFwicG9zdFNjcmlwdE5hbWVcIik7RHx8KEQ9QS5yZXBsYWNlKC9cXHMvZyxcIlwiKStcIi1cIitCKTt2YXIgRT17fTtmb3IodmFyIEYgaW4gYS5uYW1lcylFW0ZdPWEubmFtZXNbRl07RS51bmlxdWVJRHx8KEUudW5pcXVlSUQ9e2VuOmEuZ2V0RW5nbGlzaE5hbWUoXCJtYW51ZmFjdHVyZXJcIikrXCI6XCIrQ30pLEUucG9zdFNjcmlwdE5hbWV8fChFLnBvc3RTY3JpcHROYW1lPXtlbjpEfSksRS5wcmVmZXJyZWRGYW1pbHl8fChFLnByZWZlcnJlZEZhbWlseT1hLm5hbWVzLmZvbnRGYW1pbHkpLEUucHJlZmVycmVkU3ViZmFtaWx5fHwoRS5wcmVmZXJyZWRTdWJmYW1pbHk9YS5uYW1lcy5mb250U3ViZmFtaWx5KTt2YXIgRz1bXSxIPWdmLm1ha2UoRSxHKSxJPUcubGVuZ3RoPjA/WmUubWFrZShHKTp2b2lkIDAsSj1rZi5tYWtlKCksSz1WZS5tYWtlKGEuZ2x5cGhzLHt2ZXJzaW9uOmEuZ2V0RW5nbGlzaE5hbWUoXCJ2ZXJzaW9uXCIpLGZ1bGxOYW1lOkMsZmFtaWx5TmFtZTpBLHdlaWdodE5hbWU6Qixwb3N0U2NyaXB0TmFtZTpELHVuaXRzUGVyRW06YS51bml0c1BlckVtLGZvbnRCQm94OlswLHQueU1pbix0LmFzY2VuZGVyLHQuYWR2YW5jZVdpZHRoTWF4XX0pLEw9YS5tZXRhcyYmT2JqZWN0LmtleXMoYS5tZXRhcykubGVuZ3RoPjA/cGYubWFrZShhLm1ldGFzKTp2b2lkIDAsTT1bdSx2LHcseCxILHosSixLLHldO0kmJk0ucHVzaChJKSxhLnRhYmxlcy5nc3ViJiZNLnB1c2gob2YubWFrZShhLnRhYmxlcy5nc3ViKSksTCYmTS5wdXNoKEwpO2Zvcih2YXIgTj1wYihNKSxPPU4uZW5jb2RlKCksUD1uYihPKSxRPU4uZmllbGRzLFI9ITEsUz0wO1M8US5sZW5ndGg7Uys9MSlpZihcImhlYWQgdGFibGVcIj09PVFbU10ubmFtZSl7UVtTXS52YWx1ZS5jaGVja1N1bUFkanVzdG1lbnQ9Mjk4MTE0NjU1NC1QLFI9ITA7YnJlYWt9aWYoIVIpdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgaGVhZCB0YWJsZSB3aXRoIGNoZWNrU3VtIHRvIGFkanVzdC5cIik7cmV0dXJuIE59ZnVuY3Rpb24gdGIoYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoLTE7Yzw9ZDspe3ZhciBlPWMrZD4+PjEsZj1hW2VdLnRhZztpZihmPT09YilyZXR1cm4gZTtmPGI/Yz1lKzE6ZD1lLTF9cmV0dXJuLWMtMX1mdW5jdGlvbiB1YihhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGgtMTtjPD1kOyl7dmFyIGU9YytkPj4+MSxmPWFbZV07aWYoZj09PWIpcmV0dXJuIGU7ZjxiP2M9ZSsxOmQ9ZS0xfXJldHVybi1jLTF9ZnVuY3Rpb24gdmIoYSxiKXtmb3IodmFyIGMsZD0wLGU9YS5sZW5ndGgtMTtkPD1lOyl7dmFyIGY9ZCtlPj4+MTtjPWFbZl07dmFyIGc9Yy5zdGFydDtpZihnPT09YilyZXR1cm4gYztnPGI/ZD1mKzE6ZT1mLTF9aWYoZD4wKXJldHVybiBjPWFbZC0xXSxiPmMuZW5kPzA6Y31mdW5jdGlvbiB3YihhLGIpe3RoaXMuZm9udD1hLHRoaXMudGFibGVOYW1lPWJ9ZnVuY3Rpb24geGIoYSl7d2IuY2FsbCh0aGlzLGEsXCJncG9zXCIpfWZ1bmN0aW9uIHliKGEpe3diLmNhbGwodGhpcyxhLFwiZ3N1YlwiKX1mdW5jdGlvbiB6YihhLGIpe3ZhciBjPWEubGVuZ3RoO2lmKGMhPT1iLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGQ9MDtkPGM7ZCsrKWlmKGFbZF0hPT1iW2RdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEFiKGEsYixjKXtmb3IodmFyIGQ9YS5zdWJ0YWJsZXMsZT0wO2U8ZC5sZW5ndGg7ZSsrKXt2YXIgZj1kW2VdO2lmKGYuc3Vic3RGb3JtYXQ9PT1iKXJldHVybiBmfWlmKGMpcmV0dXJuIGQucHVzaChjKSxjfWZ1bmN0aW9uIEJiKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvd31mdW5jdGlvbiBDYihhKXtmb3IodmFyIGI9bmV3IEFycmF5QnVmZmVyKGEubGVuZ3RoKSxjPW5ldyBVaW50OEFycmF5KGIpLGQ9MDtkPGEubGVuZ3RoOysrZCljW2RdPWFbZF07cmV0dXJuIGJ9ZnVuY3Rpb24gRGIoYSl7Zm9yKHZhciBiPW5ldyBlKGEuYnl0ZUxlbmd0aCksYz1uZXcgVWludDhBcnJheShhKSxkPTA7ZDxiLmxlbmd0aDsrK2QpYltkXT1jW2RdO3JldHVybiBifWZ1bmN0aW9uIEViKGEsYil7aWYoIWEpdGhyb3cgYn1mdW5jdGlvbiBGYihhLGIsYyxkLGUpe3ZhciBmO3JldHVybihiJmQpPjA/KGY9YS5wYXJzZUJ5dGUoKSwwPT0oYiZlKSYmKGY9LWYpLGY9YytmKTpmPShiJmUpPjA/YzpjK2EucGFyc2VTaG9ydCgpLGZ9ZnVuY3Rpb24gR2IoYSxiLGMpe3ZhciBkPW5ldyBMZS5QYXJzZXIoYixjKTthLm51bWJlck9mQ29udG91cnM9ZC5wYXJzZVNob3J0KCksYS5feE1pbj1kLnBhcnNlU2hvcnQoKSxhLl95TWluPWQucGFyc2VTaG9ydCgpLGEuX3hNYXg9ZC5wYXJzZVNob3J0KCksYS5feU1heD1kLnBhcnNlU2hvcnQoKTt2YXIgZSxmO2lmKGEubnVtYmVyT2ZDb250b3Vycz4wKXtmb3IodmFyIGc9YS5lbmRQb2ludEluZGljZXM9W10saD0wO2g8YS5udW1iZXJPZkNvbnRvdXJzO2grPTEpZy5wdXNoKGQucGFyc2VVU2hvcnQoKSk7YS5pbnN0cnVjdGlvbkxlbmd0aD1kLnBhcnNlVVNob3J0KCksYS5pbnN0cnVjdGlvbnM9W107Zm9yKHZhciBpPTA7aTxhLmluc3RydWN0aW9uTGVuZ3RoO2krPTEpYS5pbnN0cnVjdGlvbnMucHVzaChkLnBhcnNlQnl0ZSgpKTt2YXIgaj1nW2cubGVuZ3RoLTFdKzE7ZT1bXTtmb3IodmFyIGs9MDtrPGo7ays9MSlpZihmPWQucGFyc2VCeXRlKCksZS5wdXNoKGYpLCg4JmYpPjApZm9yKHZhciBsPWQucGFyc2VCeXRlKCksbT0wO208bDttKz0xKWUucHVzaChmKSxrKz0xO2lmKHhlLmFyZ3VtZW50KGUubGVuZ3RoPT09aixcIkJhZCBmbGFncy5cIiksZy5sZW5ndGg+MCl7dmFyIG4sbz1bXTtpZihqPjApe2Zvcih2YXIgcD0wO3A8ajtwKz0xKWY9ZVtwXSxuPXt9LG4ub25DdXJ2ZT0hISgxJmYpLG4ubGFzdFBvaW50T2ZDb250b3VyPWcuaW5kZXhPZihwKT49MCxvLnB1c2gobik7Zm9yKHZhciBxPTAscj0wO3I8ajtyKz0xKWY9ZVtyXSxuPW9bcl0sbi54PUZiKGQsZixxLDIsMTYpLHE9bi54O2Zvcih2YXIgcz0wLHQ9MDt0PGo7dCs9MSlmPWVbdF0sbj1vW3RdLG4ueT1GYihkLGYscyw0LDMyKSxzPW4ueX1hLnBvaW50cz1vfWVsc2UgYS5wb2ludHM9W119ZWxzZSBpZigwPT09YS5udW1iZXJPZkNvbnRvdXJzKWEucG9pbnRzPVtdO2Vsc2V7YS5pc0NvbXBvc2l0ZT0hMCxhLnBvaW50cz1bXSxhLmNvbXBvbmVudHM9W107Zm9yKHZhciB1PSEwO3U7KXtlPWQucGFyc2VVU2hvcnQoKTt2YXIgdj17Z2x5cGhJbmRleDpkLnBhcnNlVVNob3J0KCkseFNjYWxlOjEsc2NhbGUwMTowLHNjYWxlMTA6MCx5U2NhbGU6MSxkeDowLGR5OjB9OygxJmUpPjA/KDImZSk+MD8odi5keD1kLnBhcnNlU2hvcnQoKSx2LmR5PWQucGFyc2VTaG9ydCgpKTp2Lm1hdGNoZWRQb2ludHM9W2QucGFyc2VVU2hvcnQoKSxkLnBhcnNlVVNob3J0KCldOigyJmUpPjA/KHYuZHg9ZC5wYXJzZUNoYXIoKSx2LmR5PWQucGFyc2VDaGFyKCkpOnYubWF0Y2hlZFBvaW50cz1bZC5wYXJzZUJ5dGUoKSxkLnBhcnNlQnl0ZSgpXSwoOCZlKT4wP3YueFNjYWxlPXYueVNjYWxlPWQucGFyc2VGMkRvdDE0KCk6KDY0JmUpPjA/KHYueFNjYWxlPWQucGFyc2VGMkRvdDE0KCksdi55U2NhbGU9ZC5wYXJzZUYyRG90MTQoKSk6KDEyOCZlKT4wJiYodi54U2NhbGU9ZC5wYXJzZUYyRG90MTQoKSx2LnNjYWxlMDE9ZC5wYXJzZUYyRG90MTQoKSx2LnNjYWxlMTA9ZC5wYXJzZUYyRG90MTQoKSx2LnlTY2FsZT1kLnBhcnNlRjJEb3QxNCgpKSxhLmNvbXBvbmVudHMucHVzaCh2KSx1PSEhKDMyJmUpfWlmKDI1NiZlKXthLmluc3RydWN0aW9uTGVuZ3RoPWQucGFyc2VVU2hvcnQoKSxhLmluc3RydWN0aW9ucz1bXTtmb3IodmFyIHc9MDt3PGEuaW5zdHJ1Y3Rpb25MZW5ndGg7dys9MSlhLmluc3RydWN0aW9ucy5wdXNoKGQucGFyc2VCeXRlKCkpfX19ZnVuY3Rpb24gSGIoYSxiKXtmb3IodmFyIGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXSxmPXt4OmIueFNjYWxlKmUueCtiLnNjYWxlMDEqZS55K2IuZHgseTpiLnNjYWxlMTAqZS54K2IueVNjYWxlKmUueStiLmR5LG9uQ3VydmU6ZS5vbkN1cnZlLGxhc3RQb2ludE9mQ29udG91cjplLmxhc3RQb2ludE9mQ29udG91cn07Yy5wdXNoKGYpfXJldHVybiBjfWZ1bmN0aW9uIEliKGEpe2Zvcih2YXIgYj1bXSxjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF07Yy5wdXNoKGUpLGUubGFzdFBvaW50T2ZDb250b3VyJiYoYi5wdXNoKGMpLGM9W10pfXJldHVybiB4ZS5hcmd1bWVudCgwPT09Yy5sZW5ndGgsXCJUaGVyZSBhcmUgc3RpbGwgcG9pbnRzIGxlZnQgaW4gdGhlIGN1cnJlbnQgY29udG91ci5cIiksYn1mdW5jdGlvbiBKYihhKXt2YXIgYj1uZXcgcjtpZighYSlyZXR1cm4gYjtmb3IodmFyIGM9SWIoYSksZD0wO2Q8Yy5sZW5ndGg7KytkKXt2YXIgZT1jW2RdLGY9bnVsbCxnPWVbZS5sZW5ndGgtMV0saD1lWzBdO2lmKGcub25DdXJ2ZSliLm1vdmVUbyhnLngsZy55KTtlbHNlIGlmKGgub25DdXJ2ZSliLm1vdmVUbyhoLngsaC55KTtlbHNle3ZhciBpPXt4Oi41KihnLngraC54KSx5Oi41KihnLnkraC55KX07Yi5tb3ZlVG8oaS54LGkueSl9Zm9yKHZhciBqPTA7ajxlLmxlbmd0aDsrK2opaWYoZj1nLGc9aCxoPWVbKGorMSklZS5sZW5ndGhdLGcub25DdXJ2ZSliLmxpbmVUbyhnLngsZy55KTtlbHNle3ZhciBrPWg7Zi5vbkN1cnZlfHx7eDouNSooZy54K2YueCkseTouNSooZy55K2YueSl9LGgub25DdXJ2ZXx8KGs9e3g6LjUqKGcueCtoLngpLHk6LjUqKGcueStoLnkpfSksYi5xdWFkcmF0aWNDdXJ2ZVRvKGcueCxnLnksay54LGsueSl9Yi5jbG9zZVBhdGgoKX1yZXR1cm4gYn1mdW5jdGlvbiBLYihhLGIpe2lmKGIuaXNDb21wb3NpdGUpZm9yKHZhciBjPTA7YzxiLmNvbXBvbmVudHMubGVuZ3RoO2MrPTEpe3ZhciBkPWIuY29tcG9uZW50c1tjXSxlPWEuZ2V0KGQuZ2x5cGhJbmRleCk7aWYoZS5nZXRQYXRoKCksZS5wb2ludHMpe3ZhciBmPXZvaWQgMDtpZih2b2lkIDA9PT1kLm1hdGNoZWRQb2ludHMpZj1IYihlLnBvaW50cyxkKTtlbHNle1xuaWYoZC5tYXRjaGVkUG9pbnRzWzBdPmIucG9pbnRzLmxlbmd0aC0xfHxkLm1hdGNoZWRQb2ludHNbMV0+ZS5wb2ludHMubGVuZ3RoLTEpdGhyb3cgRXJyb3IoXCJNYXRjaGVkIHBvaW50cyBvdXQgb2YgcmFuZ2UgaW4gXCIrYi5uYW1lKTt2YXIgZz1iLnBvaW50c1tkLm1hdGNoZWRQb2ludHNbMF1dLGg9ZS5wb2ludHNbZC5tYXRjaGVkUG9pbnRzWzFdXSxpPXt4U2NhbGU6ZC54U2NhbGUsc2NhbGUwMTpkLnNjYWxlMDEsc2NhbGUxMDpkLnNjYWxlMTAseVNjYWxlOmQueVNjYWxlLGR4OjAsZHk6MH07aD1IYihbaF0saSlbMF0saS5keD1nLngtaC54LGkuZHk9Zy55LWgueSxmPUhiKGUucG9pbnRzLGkpfWIucG9pbnRzPWIucG9pbnRzLmNvbmNhdChmKX19cmV0dXJuIEpiKGIucG9pbnRzKX1mdW5jdGlvbiBMYihhLGIsYyxkKXtmb3IodmFyIGU9bmV3IFNlLkdseXBoU2V0KGQpLGY9MDtmPGMubGVuZ3RoLTE7Zis9MSl7dmFyIGc9Y1tmXTtnIT09Y1tmKzFdP2UucHVzaChmLFNlLnR0ZkdseXBoTG9hZGVyKGQsZixHYixhLGIrZyxLYikpOmUucHVzaChmLFNlLmdseXBoTG9hZGVyKGQsZikpfXJldHVybiBlfWZ1bmN0aW9uIE1iKGEpe3RoaXMuZm9udD1hLHRoaXMuZ2V0Q29tbWFuZHM9ZnVuY3Rpb24oYSl7cmV0dXJuIHZmLmdldFBhdGgoYSkuY29tbWFuZHN9LHRoaXMuX2ZwZ21TdGF0ZT10aGlzLl9wcmVwU3RhdGU9dm9pZCAwLHRoaXMuX2Vycm9yU3RhdGU9MH1mdW5jdGlvbiBOYihhKXtyZXR1cm4gYX1mdW5jdGlvbiBPYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKk1hdGgucm91bmQoTWF0aC5hYnMoYSkpfWZ1bmN0aW9uIFBiKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqTWF0aC5yb3VuZChNYXRoLmFicygyKmEpKS8yfWZ1bmN0aW9uIFFiKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqKE1hdGgucm91bmQoTWF0aC5hYnMoYSkrLjUpLS41KX1mdW5jdGlvbiBSYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKk1hdGguY2VpbChNYXRoLmFicyhhKSl9ZnVuY3Rpb24gU2IoYSl7cmV0dXJuIE1hdGguc2lnbihhKSpNYXRoLmZsb29yKE1hdGguYWJzKGEpKX1mdW5jdGlvbiBUYihhLGIpe3RoaXMueD1hLHRoaXMueT1iLHRoaXMuYXhpcz12b2lkIDAsdGhpcy5zbG9wZT1iL2EsdGhpcy5ub3JtYWxTbG9wZT0tYS9iLE9iamVjdC5mcmVlemUodGhpcyl9ZnVuY3Rpb24gVWIoYSxiKXt2YXIgYz1NYXRoLnNxcnQoYSphK2IqYik7cmV0dXJuIGEvPWMsYi89YywxPT09YSYmMD09PWI/eGY6MD09PWEmJjE9PT1iP3lmOm5ldyBUYihhLGIpfWZ1bmN0aW9uIFZiKGEsYixjLGQpe3RoaXMueD10aGlzLnhvPU1hdGgucm91bmQoNjQqYSkvNjQsdGhpcy55PXRoaXMueW89TWF0aC5yb3VuZCg2NCpiKS82NCx0aGlzLmxhc3RQb2ludE9mQ29udG91cj1jLHRoaXMub25DdXJ2ZT1kLHRoaXMucHJldlBvaW50T25Db250b3VyPXZvaWQgMCx0aGlzLm5leHRQb2ludE9uQ29udG91cj12b2lkIDAsdGhpcy54VG91Y2hlZD0hMSx0aGlzLnlUb3VjaGVkPSExLE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzKX1mdW5jdGlvbiBXYihhLGIpe3N3aXRjaCh0aGlzLmVudj1hLHRoaXMuc3RhY2s9W10sdGhpcy5wcm9nPWIsYSl7Y2FzZVwiZ2x5ZlwiOnRoaXMuenAwPXRoaXMuenAxPXRoaXMuenAyPTEsdGhpcy5ycDA9dGhpcy5ycDE9dGhpcy5ycDI9MDtjYXNlXCJwcmVwXCI6dGhpcy5mdj10aGlzLnB2PXRoaXMuZHB2PXhmLHRoaXMucm91bmQ9T2J9fWZ1bmN0aW9uIFhiKGEpe2Zvcih2YXIgYj1hLnRab25lPW5ldyBBcnJheShhLmdab25lLmxlbmd0aCksYz0wO2M8Yi5sZW5ndGg7YysrKWJbY109bmV3IFZiKDAsMCl9ZnVuY3Rpb24gWWIoYSxiKXt2YXIgYyxkPWEucHJvZyxlPWEuaXAsZj0xO2Rve2lmKDg4PT09KGM9ZFsrK2VdKSlmKys7ZWxzZSBpZig4OT09PWMpZi0tO2Vsc2UgaWYoNjQ9PT1jKWUrPWRbZSsxXSsxO2Vsc2UgaWYoNjU9PT1jKWUrPTIqZFtlKzFdKzE7ZWxzZSBpZihjPj0xNzYmJmM8PTE4MyllKz1jLTE3NisxO2Vsc2UgaWYoYz49MTg0JiZjPD0xOTEpZSs9MiooYy0xODQrMSk7ZWxzZSBpZihiJiYxPT09ZiYmMjc9PT1jKWJyZWFrfXdoaWxlKGY+MCk7YS5pcD1lfWZ1bmN0aW9uIFpiKGIsYyl7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU1ZUQ0FbXCIrYi5heGlzK1wiXVwiKSxjLmZ2PWMucHY9Yy5kcHY9Yn1mdW5jdGlvbiAkYihiLGMpe2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNQVlRDQVtcIitiLmF4aXMrXCJdXCIpLGMucHY9Yy5kcHY9Yn1mdW5jdGlvbiBfYihiLGMpe2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNGVlRDQVtcIitiLmF4aXMrXCJdXCIpLGMuZnY9Yn1mdW5jdGlvbiBhYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejJbZV0saD1jLnoxW2ZdO2EuREVCVUcmJmNvbnNvbGUubG9nKFwiU1BWVExbXCIrYitcIl1cIixlLGYpO3ZhciBpLGo7Yj8oaT1nLnktaC55LGo9aC54LWcueCk6KGk9aC54LWcueCxqPWgueS1nLnkpLGMucHY9Yy5kcHY9VWIoaSxqKX1mdW5jdGlvbiBiYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejJbZV0saD1jLnoxW2ZdO2EuREVCVUcmJmNvbnNvbGUubG9nKFwiU0ZWVExbXCIrYitcIl1cIixlLGYpO3ZhciBpLGo7Yj8oaT1nLnktaC55LGo9aC54LWcueCk6KGk9aC54LWcueCxqPWgueS1nLnkpLGMuZnY9VWIoaSxqKX1mdW5jdGlvbiBjYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1BWRlNbXVwiLGQsZSksYi5wdj1iLmRwdj1VYihlLGQpfWZ1bmN0aW9uIGRjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUFZGU1tdXCIsZCxlKSxiLmZ2PVViKGUsZCl9ZnVuY3Rpb24gZWMoYil7dmFyIGM9Yi5zdGFjayxkPWIucHY7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR1BWW11cIiksYy5wdXNoKDE2Mzg0KmQueCksYy5wdXNoKDE2Mzg0KmQueSl9ZnVuY3Rpb24gZmMoYil7dmFyIGM9Yi5zdGFjayxkPWIuZnY7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR0ZWW11cIiksYy5wdXNoKDE2Mzg0KmQueCksYy5wdXNoKDE2Mzg0KmQueSl9ZnVuY3Rpb24gZ2MoYil7Yi5mdj1iLnB2LGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNGVlRQVltdXCIpfWZ1bmN0aW9uIGhjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKSxmPWMucG9wKCksZz1jLnBvcCgpLGg9Yy5wb3AoKSxpPWIuejAsaj1iLnoxLGs9aVtkXSxsPWlbZV0sbT1qW2ZdLG49altnXSxvPWIuejJbaF07YS5ERUJVRyYmY29uc29sZS5sb2coXCJJU0VDVFtdLCBcIixkLGUsZixnLGgpO3ZhciBwPWsueCxxPWsueSxyPWwueCxzPWwueSx0PW0ueCx1PW0ueSx2PW4ueCx3PW4ueSx4PShwLXIpKih1LXcpLShxLXMpKih0LXYpLHk9cCpzLXEqcix6PXQqdy11KnY7by54PSh5Kih0LXYpLXoqKHAtcikpL3gsby55PSh5Kih1LXcpLXoqKHEtcykpL3h9ZnVuY3Rpb24gaWMoYil7Yi5ycDA9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUlAwW11cIixiLnJwMCl9ZnVuY3Rpb24gamMoYil7Yi5ycDE9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUlAxW11cIixiLnJwMSl9ZnVuY3Rpb24ga2MoYil7Yi5ycDI9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUlAyW11cIixiLnJwMil9ZnVuY3Rpb24gbGMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQMFtdXCIsYyksYi56cDA9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56MD1iLnRab25lO2JyZWFrO2Nhc2UgMTpiLnowPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gbWMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQMVtdXCIsYyksYi56cDE9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56MT1iLnRab25lO2JyZWFrO2Nhc2UgMTpiLnoxPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gbmMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQMltdXCIsYyksYi56cDI9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56Mj1iLnRab25lO2JyZWFrO2Nhc2UgMTpiLnoyPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gb2MoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQU1tdXCIsYyksYi56cDA9Yi56cDE9Yi56cDI9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56MD1iLnoxPWIuejI9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56MD1iLnoxPWIuejI9Yi5nWm9uZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgem9uZSBwb2ludGVyXCIpfX1mdW5jdGlvbiBwYyhiKXtiLmxvb3A9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTTE9PUFtdXCIsYi5sb29wKX1mdW5jdGlvbiBxYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSVEdbXVwiKSxiLnJvdW5kPU9ifWZ1bmN0aW9uIHJjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJUSEdbXVwiKSxiLnJvdW5kPVFifWZ1bmN0aW9uIHNjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU01EW11cIixjKSxiLm1pbkRpcz1jLzY0fWZ1bmN0aW9uIHRjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVMU0VbXVwiKSxZYihiLCExKX1mdW5jdGlvbiB1YyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkpNUFJbXVwiLGMpLGIuaXArPWMtMX1mdW5jdGlvbiB2YyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNDVlRDSVtdXCIsYyksYi5jdkN1dEluPWMvNjR9ZnVuY3Rpb24gd2MoYil7dmFyIGM9Yi5zdGFjazthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJEVVBbXVwiKSxjLnB1c2goY1tjLmxlbmd0aC0xXSl9ZnVuY3Rpb24geGMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUE9QW11cIiksYi5zdGFjay5wb3AoKX1mdW5jdGlvbiB5YyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJDTEVBUltdXCIpLGIuc3RhY2subGVuZ3RoPTB9ZnVuY3Rpb24gemMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNXQVBbXVwiKSxjLnB1c2goZCksYy5wdXNoKGUpfWZ1bmN0aW9uIEFjKGIpe3ZhciBjPWIuc3RhY2s7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiREVQVEhbXVwiKSxjLnB1c2goYy5sZW5ndGgpfWZ1bmN0aW9uIEJjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJMT09QQ0FMTFtdXCIsZCxlKTt2YXIgZj1iLmlwLGc9Yi5wcm9nO2IucHJvZz1iLmZ1bmNzW2RdO2Zvcih2YXIgaD0wO2g8ZTtoKyspc2YoYiksYS5ERUJVRyYmY29uc29sZS5sb2coKytiLnN0ZXAsaCsxPGU/XCJuZXh0IGxvb3BjYWxsXCI6XCJkb25lIGxvb3BjYWxsXCIsaCk7Yi5pcD1mLGIucHJvZz1nfWZ1bmN0aW9uIENjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQ0FMTFtdXCIsYyk7dmFyIGQ9Yi5pcCxlPWIucHJvZztiLnByb2c9Yi5mdW5jc1tjXSxzZihiKSxiLmlwPWQsYi5wcm9nPWUsYS5ERUJVRyYmY29uc29sZS5sb2coKytiLnN0ZXAsXCJyZXR1cm5pbmcgZnJvbVwiLGMpfWZ1bmN0aW9uIERjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkNJTkRFWFtdXCIsZCksYy5wdXNoKGNbYy5sZW5ndGgtZF0pfWZ1bmN0aW9uIEVjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk1JTkRFWFtdXCIsZCksYy5wdXNoKGMuc3BsaWNlKGMubGVuZ3RoLWQsMSlbMF0pfWZ1bmN0aW9uIEZjKGIpe2lmKFwiZnBnbVwiIT09Yi5lbnYpdGhyb3cgbmV3IEVycm9yKFwiRkRFRiBub3QgYWxsb3dlZCBoZXJlXCIpO3ZhciBjPWIuc3RhY2ssZD1iLnByb2csZT1iLmlwLGY9Yy5wb3AoKSxnPWU7Zm9yKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkZERUZbXVwiLGYpOzQ1IT09ZFsrK2VdOyk7Yi5pcD1lLGIuZnVuY3NbZl09ZC5zbGljZShnKzEsZSl9ZnVuY3Rpb24gR2MoYixjKXt2YXIgZD1jLnN0YWNrLnBvcCgpLGU9Yy56MFtkXSxmPWMuZnYsZz1jLnB2O2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIk1EQVBbXCIrYitcIl1cIixkKTt2YXIgaD1nLmRpc3RhbmNlKGUsemYpO2ImJihoPWMucm91bmQoaCkpLGYuc2V0UmVsYXRpdmUoZSx6ZixoLGcpLGYudG91Y2goZSksYy5ycDA9Yy5ycDE9ZH1mdW5jdGlvbiBIYyhiLGMpe3ZhciBkLGUsZixnPWMuejIsaD1nLmxlbmd0aC0yO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIklVUFtcIitiLmF4aXMrXCJdXCIpO2Zvcih2YXIgaT0wO2k8aDtpKyspZD1nW2ldLGIudG91Y2hlZChkKXx8KGU9ZC5wcmV2VG91Y2hlZChiKSkhPT1kJiYoZj1kLm5leHRUb3VjaGVkKGIpLGU9PT1mJiZiLnNldFJlbGF0aXZlKGQsZCxiLmRpc3RhbmNlKGUsZSwhMSwhMCksYiwhMCksYi5pbnRlcnBvbGF0ZShkLGUsZixiKSl9ZnVuY3Rpb24gSWMoYixjKXtmb3IodmFyIGQ9Yy5zdGFjayxlPWI/Yy5ycDE6Yy5ycDIsZj0oYj9jLnowOmMuejEpW2VdLGc9Yy5mdixoPWMucHYsaT1jLmxvb3Asaj1jLnoyO2ktLTspe3ZhciBrPWQucG9wKCksbD1qW2tdLG09aC5kaXN0YW5jZShmLGYsITEsITApO2cuc2V0UmVsYXRpdmUobCxsLG0saCksZy50b3VjaChsKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsKGMubG9vcD4xP1wibG9vcCBcIisoYy5sb29wLWkpK1wiOiBcIjpcIlwiKStcIlNIUFtcIisoYj9cInJwMVwiOlwicnAyXCIpK1wiXVwiLGspfWMubG9vcD0xfWZ1bmN0aW9uIEpjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWI/Yy5ycDE6Yy5ycDIsZj0oYj9jLnowOmMuejEpW2VdLGc9Yy5mdixoPWMucHYsaT1kLnBvcCgpLGo9Yy56MltjLmNvbnRvdXJzW2ldXSxrPWo7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU0hDW1wiK2IrXCJdXCIsaSk7dmFyIGw9aC5kaXN0YW5jZShmLGYsITEsITApO2Rve2shPT1mJiZnLnNldFJlbGF0aXZlKGssayxsLGgpLGs9ay5uZXh0UG9pbnRPbkNvbnRvdXJ9d2hpbGUoayE9PWopfWZ1bmN0aW9uIEtjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWI/Yy5ycDE6Yy5ycDIsZj0oYj9jLnowOmMuejEpW2VdLGc9Yy5mdixoPWMucHYsaT1kLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNIWltcIitiK1wiXVwiLGkpO3ZhciBqO3N3aXRjaChpKXtjYXNlIDA6aj1jLnRab25lO2JyZWFrO2Nhc2UgMTpqPWMuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmVcIil9Zm9yKHZhciBrLGw9aC5kaXN0YW5jZShmLGYsITEsITApLG09ai5sZW5ndGgtMixuPTA7bjxtO24rKylrPWpbbl0sZy5zZXRSZWxhdGl2ZShrLGssbCxoKX1mdW5jdGlvbiBMYyhiKXtmb3IodmFyIGM9Yi5zdGFjayxkPWIubG9vcCxlPWIuZnYsZj1jLnBvcCgpLzY0LGc9Yi56MjtkLS07KXt2YXIgaD1jLnBvcCgpLGk9Z1toXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsKGIubG9vcD4xP1wibG9vcCBcIisoYi5sb29wLWQpK1wiOiBcIjpcIlwiKStcIlNIUElYW11cIixoLGYpLGUuc2V0UmVsYXRpdmUoaSxpLGYpLGUudG91Y2goaSl9Yi5sb29wPTF9ZnVuY3Rpb24gTWMoYil7Zm9yKHZhciBjPWIuc3RhY2ssZD1iLnJwMSxlPWIucnAyLGY9Yi5sb29wLGc9Yi56MFtkXSxoPWIuejFbZV0saT1iLmZ2LGo9Yi5kcHYsaz1iLnoyO2YtLTspe3ZhciBsPWMucG9wKCksbT1rW2xdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCwoYi5sb29wPjE/XCJsb29wIFwiKyhiLmxvb3AtZikrXCI6IFwiOlwiXCIpK1wiSVBbXVwiLGwsZCxcIjwtPlwiLGUpLGkuaW50ZXJwb2xhdGUobSxnLGgsaiksaS50b3VjaChtKX1iLmxvb3A9MX1mdW5jdGlvbiBOYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLzY0LGY9ZC5wb3AoKSxnPWMuejFbZl0saD1jLnowW2MucnAwXSxpPWMuZnYsaj1jLnB2O2kuc2V0UmVsYXRpdmUoZyxoLGUsaiksaS50b3VjaChnKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNU0lSUFtcIitiK1wiXVwiLGUsZiksYy5ycDE9Yy5ycDAsYy5ycDI9ZixiJiYoYy5ycDA9Zil9ZnVuY3Rpb24gT2MoYil7Zm9yKHZhciBjPWIuc3RhY2ssZD1iLnJwMCxlPWIuejBbZF0sZj1iLmxvb3AsZz1iLmZ2LGg9Yi5wdixpPWIuejE7Zi0tOyl7dmFyIGo9Yy5wb3AoKSxrPWlbal07YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLChiLmxvb3A+MT9cImxvb3AgXCIrKGIubG9vcC1mKStcIjogXCI6XCJcIikrXCJBTElHTlJQW11cIixqKSxnLnNldFJlbGF0aXZlKGssZSwwLGgpLGcudG91Y2goayl9Yi5sb29wPTF9ZnVuY3Rpb24gUGMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlRER1tdXCIpLGIucm91bmQ9UGJ9ZnVuY3Rpb24gUWMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnowW2ZdLGg9Yy5mdixpPWMucHYsaj1jLmN2dFtlXTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNSUFQW1wiK2IrXCJdXCIsZSxcIihcIixqLFwiKVwiLGYpO3ZhciBrPWkuZGlzdGFuY2UoZyx6Zik7YiYmKE1hdGguYWJzKGstaik8Yy5jdkN1dEluJiYoaz1qKSxrPWMucm91bmQoaykpLGguc2V0UmVsYXRpdmUoZyx6ZixrLGkpLDA9PT1jLnpwMCYmKGcueG89Zy54LGcueW89Zy55KSxoLnRvdWNoKGcpLGMucnAwPWMucnAxPWZ9ZnVuY3Rpb24gUmMoYil7dmFyIGM9Yi5wcm9nLGQ9Yi5pcCxlPWIuc3RhY2ssZj1jWysrZF07YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTlBVU0hCW11cIixmKTtmb3IodmFyIGc9MDtnPGY7ZysrKWUucHVzaChjWysrZF0pO2IuaXA9ZH1mdW5jdGlvbiBTYyhiKXt2YXIgYz1iLmlwLGQ9Yi5wcm9nLGU9Yi5zdGFjayxmPWRbKytjXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJOUFVTSFdbXVwiLGYpO2Zvcih2YXIgZz0wO2c8ZjtnKyspe3ZhciBoPWRbKytjXTw8OHxkWysrY107MzI3NjgmaCYmKGg9LSgxKyg2NTUzNV5oKSkpLGUucHVzaChoKX1iLmlwPWN9ZnVuY3Rpb24gVGMoYil7dmFyIGM9Yi5zdGFjayxkPWIuc3RvcmU7ZHx8KGQ9Yi5zdG9yZT1bXSk7dmFyIGU9Yy5wb3AoKSxmPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiV1NcIixlLGYpLGRbZl09ZX1mdW5jdGlvbiBVYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yi5zdG9yZSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlNcIixlKTt2YXIgZj1kJiZkW2VdfHwwO2MucHVzaChmKX1mdW5jdGlvbiBWYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiV0NWVFBcIixkLGUpLGIuY3Z0W2VdPWQvNjR9ZnVuY3Rpb24gV2MoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUkNWVFwiLGQpLGMucHVzaCg2NCpiLmN2dFtkXSl9ZnVuY3Rpb24gWGMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWMuejJbZV07YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiR0NbXCIrYitcIl1cIixlKSxkLnB1c2goNjQqYy5kcHYuZGlzdGFuY2UoZix6ZixiLCExKSl9ZnVuY3Rpb24gWWMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnoxW2VdLGg9Yy56MFtmXSxpPWMuZHB2LmRpc3RhbmNlKGgsZyxiLGIpO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIk1EW1wiK2IrXCJdXCIsZSxmLFwiLT5cIixpKSxjLnN0YWNrLnB1c2goTWF0aC5yb3VuZCg2NCppKSl9ZnVuY3Rpb24gWmMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTVBQRU1bXVwiKSxiLnN0YWNrLnB1c2goYi5wcGVtKX1mdW5jdGlvbiAkYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJGTElQT05bXVwiKSxiLmF1dG9GbGlwPSEwfWZ1bmN0aW9uIF9jKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJMVFtdXCIsZCxlKSxjLnB1c2goZTxkPzE6MCl9ZnVuY3Rpb24gYWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkxURVFbXVwiLGQsZSksYy5wdXNoKGU8PWQ/MTowKX1mdW5jdGlvbiBiZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR1RbXVwiLGQsZSksYy5wdXNoKGU+ZD8xOjApfWZ1bmN0aW9uIGNkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJHVEVRW11cIixkLGUpLGMucHVzaChlPj1kPzE6MCl9ZnVuY3Rpb24gZGQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVRW11cIixkLGUpLGMucHVzaChkPT09ZT8xOjApfWZ1bmN0aW9uIGVkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJORVFbXVwiLGQsZSksYy5wdXNoKGQhPT1lPzE6MCl9ZnVuY3Rpb24gZmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiT0REW11cIixkKSxjLnB1c2goTWF0aC50cnVuYyhkKSUyPzE6MCl9ZnVuY3Rpb24gZ2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRVZFTltdXCIsZCksYy5wdXNoKE1hdGgudHJ1bmMoZCklMj8wOjEpfWZ1bmN0aW9uIGhkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiSUZbXVwiLGMpLGN8fChZYihiLCEwKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFSUZbXVwiKSl9ZnVuY3Rpb24gaWQoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRUlGW11cIil9ZnVuY3Rpb24gamQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkFORFtdXCIsZCxlKSxjLnB1c2goZCYmZT8xOjApfWZ1bmN0aW9uIGtkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJPUltdXCIsZCxlKSxjLnB1c2goZHx8ZT8xOjApfWZ1bmN0aW9uIGxkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5PVFtdXCIsZCksYy5wdXNoKGQ/MDoxKX1mdW5jdGlvbiBtZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9Yy5mdixnPWMucHYsaD1jLnBwZW0saT1jLmRlbHRhQmFzZSsxNiooYi0xKSxqPWMuZGVsdGFTaGlmdCxrPWMuejA7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFQW1wiK2IrXCJdXCIsZSxkKTtmb3IodmFyIGw9MDtsPGU7bCsrKXt2YXIgbT1kLnBvcCgpLG49ZC5wb3AoKTtpZihpKygoMjQwJm4pPj40KT09PWgpe3ZhciBvPSgxNSZuKS04O28+PTAmJm8rKyxhLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJERUxUQVBGSVhcIixtLFwiYnlcIixvKmopO3ZhciBwPWtbbV07Zi5zZXRSZWxhdGl2ZShwLHAsbypqLGcpfX19ZnVuY3Rpb24gbmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0RCW11cIixkKSxiLmRlbHRhQmFzZT1kfWZ1bmN0aW9uIG9kKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNEU1tdXCIsZCksYi5kZWx0YVNoaWZ0PU1hdGgucG93KC41LGQpfWZ1bmN0aW9uIHBkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJBRERbXVwiLGQsZSksYy5wdXNoKGUrZCl9ZnVuY3Rpb24gcWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNVQltdXCIsZCxlKSxjLnB1c2goZS1kKX1mdW5jdGlvbiByZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRElWW11cIixkLGUpLGMucHVzaCg2NCplL2QpfWZ1bmN0aW9uIHNkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNVUxbXVwiLGQsZSksYy5wdXNoKGUqZC82NCl9ZnVuY3Rpb24gdGQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQUJTW11cIixkKSxjLnB1c2goTWF0aC5hYnMoZCkpfWZ1bmN0aW9uIHVkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5FR1tdXCIsZCksYy5wdXNoKC1kKX1mdW5jdGlvbiB2ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJGTE9PUltdXCIsZCksYy5wdXNoKDY0Kk1hdGguZmxvb3IoZC82NCkpfWZ1bmN0aW9uIHdkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkNFSUxJTkdbXVwiLGQpLGMucHVzaCg2NCpNYXRoLmNlaWwoZC82NCkpfWZ1bmN0aW9uIHhkKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiUk9VTkRbXVwiKSxkLnB1c2goNjQqYy5yb3VuZChlLzY0KSl9ZnVuY3Rpb24geWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIldDVlRGW11cIixkLGUpLGIuY3Z0W2VdPWQqYi5wcGVtL2IuZm9udC51bml0c1BlckVtfWZ1bmN0aW9uIHpkKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1jLnBwZW0sZz1jLmRlbHRhQmFzZSsxNiooYi0xKSxoPWMuZGVsdGFTaGlmdDthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJERUxUQUNbXCIrYitcIl1cIixlLGQpO2Zvcih2YXIgaT0wO2k8ZTtpKyspe3ZhciBqPWQucG9wKCksaz1kLnBvcCgpO2lmKGcrKCgyNDAmayk+PjQpPT09Zil7dmFyIGw9KDE1JmspLTg7bD49MCYmbCsrO3ZhciBtPWwqaDthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJERUxUQUNGSVhcIixqLFwiYnlcIixtKSxjLmN2dFtqXSs9bX19fWZ1bmN0aW9uIEFkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JPVU5EW11cIixjKSxiLnJvdW5kPXdmO3ZhciBkO3N3aXRjaCgxOTImYyl7Y2FzZSAwOmQ9LjU7YnJlYWs7Y2FzZSA2NDpkPTE7YnJlYWs7Y2FzZSAxMjg6ZD0yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBTUk9VTkQgdmFsdWVcIil9c3dpdGNoKGIuc3JQZXJpb2Q9ZCw0OCZjKXtjYXNlIDA6Yi5zclBoYXNlPTA7YnJlYWs7Y2FzZSAxNjpiLnNyUGhhc2U9LjI1KmQ7YnJlYWs7Y2FzZSAzMjpiLnNyUGhhc2U9LjUqZDticmVhaztjYXNlIDQ4OmIuc3JQaGFzZT0uNzUqZDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgU1JPVU5EIHZhbHVlXCIpfWMmPTE1LGIuc3JUaHJlc2hvbGQ9MD09PWM/MDooYy84LS41KSpkfWZ1bmN0aW9uIEJkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUzQ1Uk9VTkRbXVwiLGMpLGIucm91bmQ9d2Y7dmFyIGQ7c3dpdGNoKDE5MiZjKXtjYXNlIDA6ZD1NYXRoLnNxcnQoMikvMjticmVhaztjYXNlIDY0OmQ9TWF0aC5zcXJ0KDIpO2JyZWFrO2Nhc2UgMTI4OmQ9MipNYXRoLnNxcnQoMik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFM0NVJPVU5EIHZhbHVlXCIpfXN3aXRjaChiLnNyUGVyaW9kPWQsNDgmYyl7Y2FzZSAwOmIuc3JQaGFzZT0wO2JyZWFrO2Nhc2UgMTY6Yi5zclBoYXNlPS4yNSpkO2JyZWFrO2Nhc2UgMzI6Yi5zclBoYXNlPS41KmQ7YnJlYWs7Y2FzZSA0ODpiLnNyUGhhc2U9Ljc1KmQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFM0NVJPVU5EIHZhbHVlXCIpfWMmPTE1LGIuc3JUaHJlc2hvbGQ9MD09PWM/MDooYy84LS41KSpkfWZ1bmN0aW9uIENkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJPRkZbXVwiKSxiLnJvdW5kPU5ifWZ1bmN0aW9uIERkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJVVEdbXVwiKSxiLnJvdW5kPVJifWZ1bmN0aW9uIEVkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJEVEdbXVwiKSxiLnJvdW5kPVNifWZ1bmN0aW9uIEZkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0NBTkNUUkxbXVwiLGMpfWZ1bmN0aW9uIEdkKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MltlXSxoPWMuejFbZl07YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU0RQVlRMW1wiK2IrXCJdXCIsZSxmKTt2YXIgaSxqO2I/KGk9Zy55LWgueSxqPWgueC1nLngpOihpPWgueC1nLngsaj1oLnktZy55KSxjLmRwdj1VYihpLGopfWZ1bmN0aW9uIEhkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9MDthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJHRVRJTkZPW11cIixkKSwxJmQmJihlPTM1KSwzMiZkJiYoZXw9NDA5NiksYy5wdXNoKGUpfWZ1bmN0aW9uIElkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKSxmPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUk9MTFtdXCIpLGMucHVzaChlKSxjLnB1c2goZCksYy5wdXNoKGYpfWZ1bmN0aW9uIEpkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNQVhbXVwiLGQsZSksYy5wdXNoKE1hdGgubWF4KGUsZCkpfWZ1bmN0aW9uIEtkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNSU5bXVwiLGQsZSksYy5wdXNoKE1hdGgubWluKGUsZCkpfWZ1bmN0aW9uIExkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0NBTlRZUEVbXVwiLGMpfWZ1bmN0aW9uIE1kKGIpe3ZhciBjPWIuc3RhY2sucG9wKCksZD1iLnN0YWNrLnBvcCgpO3N3aXRjaChhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJJTlNUQ1RSTFtdXCIsYyxkKSxjKXtjYXNlIDE6cmV0dXJuIHZvaWQoYi5pbmhpYml0R3JpZEZpdD0hIWQpO2Nhc2UgMjpyZXR1cm4gdm9pZChiLmlnbm9yZUN2dD0hIWQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBJTlNUQ1RSTFtdIHNlbGVjdG9yXCIpfX1mdW5jdGlvbiBOZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1jLnByb2csZj1jLmlwO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlBVU0hCW1wiK2IrXCJdXCIpO2Zvcih2YXIgZz0wO2c8YjtnKyspZC5wdXNoKGVbKytmXSk7Yy5pcD1mfWZ1bmN0aW9uIE9kKGIsYyl7dmFyIGQ9Yy5pcCxlPWMucHJvZyxmPWMuc3RhY2s7YS5ERUJVRyYmY29uc29sZS5sb2coYy5pcCxcIlBVU0hXW1wiK2IrXCJdXCIpO2Zvcih2YXIgZz0wO2c8YjtnKyspe3ZhciBoPWVbKytkXTw8OHxlWysrZF07MzI3NjgmaCYmKGg9LSgxKyg2NTUzNV5oKSkpLGYucHVzaChoKX1jLmlwPWR9ZnVuY3Rpb24gUGQoYixjLGQsZSxmLGcpe3ZhciBoLGksaixrLGw9Zy5zdGFjayxtPWImJmwucG9wKCksbj1sLnBvcCgpLG89Zy5ycDAscD1nLnowW29dLHE9Zy56MVtuXSxyPWcubWluRGlzLHM9Zy5mdix0PWcuZHB2O2k9aD10LmRpc3RhbmNlKHEscCwhMCwhMCksaj1pPj0wPzE6LTEsaT1NYXRoLmFicyhpKSxiJiYoaz1nLmN2dFttXSxlJiZNYXRoLmFicyhpLWspPGcuY3ZDdXRJbiYmKGk9aykpLGQmJmk8ciYmKGk9ciksZSYmKGk9Zy5yb3VuZChpKSkscy5zZXRSZWxhdGl2ZShxLHAsaippLHQpLHMudG91Y2gocSksYS5ERUJVRyYmY29uc29sZS5sb2coZy5zdGVwLChiP1wiTUlSUFtcIjpcIk1EUlBbXCIpKyhjP1wiTVwiOlwibVwiKSsoZD9cIj5cIjpcIl9cIikrKGU/XCJSXCI6XCJfXCIpKygwPT09Zj9cIkdyXCI6MT09PWY/XCJCbFwiOjI9PT1mP1wiV2hcIjpcIlwiKStcIl1cIixiP20rXCIoXCIrZy5jdnRbbV0rXCIsXCIraytcIilcIjpcIlwiLG4sXCIoZCA9XCIsaCxcIi0+XCIsaippLFwiKVwiKSxnLnJwMT1nLnJwMCxnLnJwMj1uLGMmJihnLnJwMD1uKX1mdW5jdGlvbiBRZChhKXthPWF8fHt9LGEuZW1wdHl8fChFYihhLmZhbWlseU5hbWUsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBmYW1pbHlOYW1lIGlzIHJlcXVpcmVkLlwiKSxFYihhLnN0eWxlTmFtZSxcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIHN0eWxlTmFtZSBpcyByZXF1aXJlZC5cIiksRWIoYS51bml0c1BlckVtLFwiV2hlbiBjcmVhdGluZyBhIG5ldyBGb250IG9iamVjdCwgdW5pdHNQZXJFbSBpcyByZXF1aXJlZC5cIiksRWIoYS5hc2NlbmRlcixcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIGFzY2VuZGVyIGlzIHJlcXVpcmVkLlwiKSxFYihhLmRlc2NlbmRlcixcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIGRlc2NlbmRlciBpcyByZXF1aXJlZC5cIiksRWIoYS5kZXNjZW5kZXI8MCxcIkRlc2NlbmRlciBzaG91bGQgYmUgbmVnYXRpdmUgKGUuZy4gLTUxMikuXCIpLHRoaXMubmFtZXM9e2ZvbnRGYW1pbHk6e2VuOmEuZmFtaWx5TmFtZXx8XCIgXCJ9LGZvbnRTdWJmYW1pbHk6e2VuOmEuc3R5bGVOYW1lfHxcIiBcIn0sZnVsbE5hbWU6e2VuOmEuZnVsbE5hbWV8fGEuZmFtaWx5TmFtZStcIiBcIithLnN0eWxlTmFtZX0scG9zdFNjcmlwdE5hbWU6e2VuOmEucG9zdFNjcmlwdE5hbWV8fChhLmZhbWlseU5hbWUrYS5zdHlsZU5hbWUpLnJlcGxhY2UoL1xccy9nLFwiXCIpfSxkZXNpZ25lcjp7ZW46YS5kZXNpZ25lcnx8XCIgXCJ9LGRlc2lnbmVyVVJMOntlbjphLmRlc2lnbmVyVVJMfHxcIiBcIn0sbWFudWZhY3R1cmVyOntlbjphLm1hbnVmYWN0dXJlcnx8XCIgXCJ9LG1hbnVmYWN0dXJlclVSTDp7ZW46YS5tYW51ZmFjdHVyZXJVUkx8fFwiIFwifSxsaWNlbnNlOntlbjphLmxpY2Vuc2V8fFwiIFwifSxsaWNlbnNlVVJMOntlbjphLmxpY2Vuc2VVUkx8fFwiIFwifSx2ZXJzaW9uOntlbjphLnZlcnNpb258fFwiVmVyc2lvbiAwLjFcIn0sZGVzY3JpcHRpb246e2VuOmEuZGVzY3JpcHRpb258fFwiIFwifSxjb3B5cmlnaHQ6e2VuOmEuY29weXJpZ2h0fHxcIiBcIn0sdHJhZGVtYXJrOntlbjphLnRyYWRlbWFya3x8XCIgXCJ9fSx0aGlzLnVuaXRzUGVyRW09YS51bml0c1BlckVtfHwxZTMsdGhpcy5hc2NlbmRlcj1hLmFzY2VuZGVyLHRoaXMuZGVzY2VuZGVyPWEuZGVzY2VuZGVyLHRoaXMuY3JlYXRlZFRpbWVzdGFtcD1hLmNyZWF0ZWRUaW1lc3RhbXAsdGhpcy50YWJsZXM9e29zMjp7dXNXZWlnaHRDbGFzczphLndlaWdodENsYXNzfHx0aGlzLnVzV2VpZ2h0Q2xhc3Nlcy5NRURJVU0sdXNXaWR0aENsYXNzOmEud2lkdGhDbGFzc3x8dGhpcy51c1dpZHRoQ2xhc3Nlcy5NRURJVU0sZnNTZWxlY3Rpb246YS5mc1NlbGVjdGlvbnx8dGhpcy5mc1NlbGVjdGlvblZhbHVlcy5SRUdVTEFSfX0pLHRoaXMuc3VwcG9ydGVkPSEwLHRoaXMuZ2x5cGhzPW5ldyBTZS5HbHlwaFNldCh0aGlzLGEuZ2x5cGhzfHxbXSksdGhpcy5lbmNvZGluZz1uZXcgWCh0aGlzKSx0aGlzLnBvc2l0aW9uPW5ldyB4Yih0aGlzKSx0aGlzLnN1YnN0aXR1dGlvbj1uZXcgeWIodGhpcyksdGhpcy50YWJsZXM9dGhpcy50YWJsZXN8fHt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiaGludGluZ1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGludGluZz90aGlzLl9oaW50aW5nOlwidHJ1ZXR5cGVcIj09PXRoaXMub3V0bGluZXNGb3JtYXQ/dGhpcy5faGludGluZz1uZXcgTWIodGhpcyk6dm9pZCAwfX0pfWZ1bmN0aW9uIFJkKGEsYil7dmFyIGM9SlNPTi5zdHJpbmdpZnkoYSksZD0yNTY7Zm9yKHZhciBlIGluIGIpe3ZhciBmPXBhcnNlSW50KGUpO2lmKGYmJiEoZjwyNTYpKXtpZihKU09OLnN0cmluZ2lmeShiW2VdKT09PWMpcmV0dXJuIGY7ZDw9ZiYmKGQ9ZisxKX19cmV0dXJuIGJbZF09YSxkfWZ1bmN0aW9uIFNkKGEsYixjKXt2YXIgZD1SZChiLm5hbWUsYyk7cmV0dXJuW3tuYW1lOlwidGFnX1wiK2EsdHlwZTpcIlRBR1wiLHZhbHVlOmIudGFnfSx7bmFtZTpcIm1pblZhbHVlX1wiK2EsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5taW5WYWx1ZTw8MTZ9LHtuYW1lOlwiZGVmYXVsdFZhbHVlX1wiK2EsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5kZWZhdWx0VmFsdWU8PDE2fSx7bmFtZTpcIm1heFZhbHVlX1wiK2EsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5tYXhWYWx1ZTw8MTZ9LHtuYW1lOlwiZmxhZ3NfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJuYW1lSURfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZH1dfWZ1bmN0aW9uIFRkKGEsYixjKXt2YXIgZD17fSxlPW5ldyBMZS5QYXJzZXIoYSxiKTtyZXR1cm4gZC50YWc9ZS5wYXJzZVRhZygpLGQubWluVmFsdWU9ZS5wYXJzZUZpeGVkKCksZC5kZWZhdWx0VmFsdWU9ZS5wYXJzZUZpeGVkKCksZC5tYXhWYWx1ZT1lLnBhcnNlRml4ZWQoKSxlLnNraXAoXCJ1U2hvcnRcIiwxKSxkLm5hbWU9Y1tlLnBhcnNlVVNob3J0KCldfHx7fSxkfWZ1bmN0aW9uIFVkKGEsYixjLGQpe2Zvcih2YXIgZT1SZChiLm5hbWUsZCksZj1be25hbWU6XCJuYW1lSURfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZX0se25hbWU6XCJmbGFnc19cIithLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfV0sZz0wO2c8Yy5sZW5ndGg7KytnKXt2YXIgaD1jW2ddLnRhZztmLnB1c2goe25hbWU6XCJheGlzX1wiK2ErXCIgXCIraCx0eXBlOlwiRklYRURcIix2YWx1ZTpiLmNvb3JkaW5hdGVzW2hdPDwxNn0pfXJldHVybiBmfWZ1bmN0aW9uIFZkKGEsYixjLGQpe3ZhciBlPXt9LGY9bmV3IExlLlBhcnNlcihhLGIpO2UubmFtZT1kW2YucGFyc2VVU2hvcnQoKV18fHt9LGYuc2tpcChcInVTaG9ydFwiLDEpLGUuY29vcmRpbmF0ZXM9e307Zm9yKHZhciBnPTA7ZzxjLmxlbmd0aDsrK2cpZS5jb29yZGluYXRlc1tjW2ddLnRhZ109Zi5wYXJzZUZpeGVkKCk7cmV0dXJuIGV9ZnVuY3Rpb24gV2QoYSxiKXt2YXIgYz1uZXcgSWUuVGFibGUoXCJmdmFyXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjY1NTM2fSx7bmFtZTpcIm9mZnNldFRvRGF0YVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImNvdW50U2l6ZVBhaXJzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjJ9LHtuYW1lOlwiYXhpc0NvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEuYXhlcy5sZW5ndGh9LHtuYW1lOlwiYXhpc1NpemVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MjB9LHtuYW1lOlwiaW5zdGFuY2VDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmluc3RhbmNlcy5sZW5ndGh9LHtuYW1lOlwiaW5zdGFuY2VTaXplXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjQrNCphLmF4ZXMubGVuZ3RofV0pO2Mub2Zmc2V0VG9EYXRhPWMuc2l6ZU9mKCk7Zm9yKHZhciBkPTA7ZDxhLmF4ZXMubGVuZ3RoO2QrKyljLmZpZWxkcz1jLmZpZWxkcy5jb25jYXQoU2QoZCxhLmF4ZXNbZF0sYikpO2Zvcih2YXIgZT0wO2U8YS5pbnN0YW5jZXMubGVuZ3RoO2UrKyljLmZpZWxkcz1jLmZpZWxkcy5jb25jYXQoVWQoZSxhLmluc3RhbmNlc1tlXSxhLmF4ZXMsYikpO3JldHVybiBjfWZ1bmN0aW9uIFhkKGEsYixjKXt2YXIgZD1uZXcgTGUuUGFyc2VyKGEsYiksZT1kLnBhcnNlVUxvbmcoKTt4ZS5hcmd1bWVudCg2NTUzNj09PWUsXCJVbnN1cHBvcnRlZCBmdmFyIHRhYmxlIHZlcnNpb24uXCIpO3ZhciBmPWQucGFyc2VPZmZzZXQxNigpO2Quc2tpcChcInVTaG9ydFwiLDEpO2Zvcih2YXIgZz1kLnBhcnNlVVNob3J0KCksaD1kLnBhcnNlVVNob3J0KCksaT1kLnBhcnNlVVNob3J0KCksaj1kLnBhcnNlVVNob3J0KCksaz1bXSxsPTA7bDxnO2wrKylrLnB1c2goVGQoYSxiK2YrbCpoLGMpKTtmb3IodmFyIG09W10sbj1iK2YrZypoLG89MDtvPGk7bysrKW0ucHVzaChWZChhLG4rbypqLGssYykpO3JldHVybntheGVzOmssaW5zdGFuY2VzOm19fWZ1bmN0aW9uIFlkKGEsYil7Yj1ifHwwO3ZhciBjPW5ldyBRKGEsYiksZD1jLnBhcnNlVmVyc2lvbigxKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWR8fDEuMT09PWQsXCJVbnN1cHBvcnRlZCBHUE9TIHRhYmxlIHZlcnNpb24gXCIrZCksMT09PWQ/e3ZlcnNpb246ZCxzY3JpcHRzOmMucGFyc2VTY3JpcHRMaXN0KCksZmVhdHVyZXM6Yy5wYXJzZUZlYXR1cmVMaXN0KCksbG9va3VwczpjLnBhcnNlTG9va3VwTGlzdChEZil9Ont2ZXJzaW9uOmQsc2NyaXB0czpjLnBhcnNlU2NyaXB0TGlzdCgpLGZlYXR1cmVzOmMucGFyc2VGZWF0dXJlTGlzdCgpLGxvb2t1cHM6Yy5wYXJzZUxvb2t1cExpc3QoRGYpLHZhcmlhdGlvbnM6Yy5wYXJzZUZlYXR1cmVWYXJpYXRpb25zTGlzdCgpfX1mdW5jdGlvbiBaZChhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiR1BPU1wiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJzY3JpcHRzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLlNjcmlwdExpc3QoYS5zY3JpcHRzKX0se25hbWU6XCJmZWF0dXJlc1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5GZWF0dXJlTGlzdChhLmZlYXR1cmVzKX0se25hbWU6XCJsb29rdXBzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkxvb2t1cExpc3QoYS5sb29rdXBzLEVmKX1dKX1mdW5jdGlvbiAkZChhKXt2YXIgYj17fTthLnNraXAoXCJ1U2hvcnRcIik7dmFyIGM9YS5wYXJzZVVTaG9ydCgpO3hlLmFyZ3VtZW50KDA9PT1jLFwiVW5zdXBwb3J0ZWQga2VybiBzdWItdGFibGUgdmVyc2lvbi5cIiksYS5za2lwKFwidVNob3J0XCIsMik7dmFyIGQ9YS5wYXJzZVVTaG9ydCgpO2Euc2tpcChcInVTaG9ydFwiLDMpO2Zvcih2YXIgZT0wO2U8ZDtlKz0xKXt2YXIgZj1hLnBhcnNlVVNob3J0KCksZz1hLnBhcnNlVVNob3J0KCksaD1hLnBhcnNlU2hvcnQoKTtiW2YrXCIsXCIrZ109aH1yZXR1cm4gYn1mdW5jdGlvbiBfZChhKXt2YXIgYj17fTthLnNraXAoXCJ1U2hvcnRcIiksYS5wYXJzZVVMb25nKCk+MSYmY29uc29sZS53YXJuKFwiT25seSB0aGUgZmlyc3Qga2VybiBzdWJ0YWJsZSBpcyBzdXBwb3J0ZWQuXCIpLGEuc2tpcChcInVMb25nXCIpO3ZhciBjPWEucGFyc2VVU2hvcnQoKSxkPTI1NSZjO2lmKGEuc2tpcChcInVTaG9ydFwiKSwwPT09ZCl7dmFyIGU9YS5wYXJzZVVTaG9ydCgpO2Euc2tpcChcInVTaG9ydFwiLDMpO2Zvcih2YXIgZj0wO2Y8ZTtmKz0xKXt2YXIgZz1hLnBhcnNlVVNob3J0KCksaD1hLnBhcnNlVVNob3J0KCksaT1hLnBhcnNlU2hvcnQoKTtiW2crXCIsXCIraF09aX19cmV0dXJuIGJ9ZnVuY3Rpb24gYWUoYSxiKXt2YXIgYz1uZXcgTGUuUGFyc2VyKGEsYiksZD1jLnBhcnNlVVNob3J0KCk7aWYoMD09PWQpcmV0dXJuICRkKGMpO2lmKDE9PT1kKXJldHVybiBfZChjKTt0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBrZXJuIHRhYmxlIHZlcnNpb24gKFwiK2QrXCIpLlwiKX1mdW5jdGlvbiBiZShhLGIsYyxkKXtmb3IodmFyIGU9bmV3IExlLlBhcnNlcihhLGIpLGY9ZD9lLnBhcnNlVVNob3J0OmUucGFyc2VVTG9uZyxnPVtdLGg9MDtoPGMrMTtoKz0xKXt2YXIgaT1mLmNhbGwoZSk7ZCYmKGkqPTIpLGcucHVzaChpKX1yZXR1cm4gZ31mdW5jdGlvbiBjZShhLGMpe2IoXCJmc1wiKS5yZWFkRmlsZShhLGZ1bmN0aW9uKGEsYil7aWYoYSlyZXR1cm4gYyhhLm1lc3NhZ2UpO2MobnVsbCxDYihiKSl9KX1mdW5jdGlvbiBkZShhLGIpe3ZhciBjPW5ldyBYTUxIdHRwUmVxdWVzdDtjLm9wZW4oXCJnZXRcIixhLCEwKSxjLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCIsYy5vbmxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gYy5yZXNwb25zZT9iKG51bGwsYy5yZXNwb25zZSk6YihcIkZvbnQgY291bGQgbm90IGJlIGxvYWRlZDogXCIrYy5zdGF0dXNUZXh0KX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7YihcIkZvbnQgY291bGQgbm90IGJlIGxvYWRlZFwiKX0sYy5zZW5kKCl9ZnVuY3Rpb24gZWUoYSxiKXtmb3IodmFyIGM9W10sZD0xMixlPTA7ZTxiO2UrPTEpe3ZhciBmPUxlLmdldFRhZyhhLGQpLGc9TGUuZ2V0VUxvbmcoYSxkKzQpLGg9TGUuZ2V0VUxvbmcoYSxkKzgpLGk9TGUuZ2V0VUxvbmcoYSxkKzEyKTtjLnB1c2goe3RhZzpmLGNoZWNrc3VtOmcsb2Zmc2V0OmgsbGVuZ3RoOmksY29tcHJlc3Npb246ITF9KSxkKz0xNn1yZXR1cm4gY31mdW5jdGlvbiBmZShhLGIpe2Zvcih2YXIgYz1bXSxkPTQ0LGU9MDtlPGI7ZSs9MSl7dmFyIGY9TGUuZ2V0VGFnKGEsZCksZz1MZS5nZXRVTG9uZyhhLGQrNCksaD1MZS5nZXRVTG9uZyhhLGQrOCksaT1MZS5nZXRVTG9uZyhhLGQrMTIpLGo9dm9pZCAwO2o9aDxpJiZcIldPRkZcIixjLnB1c2goe3RhZzpmLG9mZnNldDpnLGNvbXByZXNzaW9uOmosY29tcHJlc3NlZExlbmd0aDpoLGxlbmd0aDppfSksZCs9MjB9cmV0dXJuIGN9ZnVuY3Rpb24gZ2UoYSxiKXtpZihcIldPRkZcIj09PWIuY29tcHJlc3Npb24pe3ZhciBjPW5ldyBVaW50OEFycmF5KGEuYnVmZmVyLGIub2Zmc2V0KzIsYi5jb21wcmVzc2VkTGVuZ3RoLTIpLGQ9bmV3IFVpbnQ4QXJyYXkoYi5sZW5ndGgpO2lmKHdlKGMsZCksZC5ieXRlTGVuZ3RoIT09Yi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiRGVjb21wcmVzc2lvbiBlcnJvcjogXCIrYi50YWcrXCIgZGVjb21wcmVzc2VkIGxlbmd0aCBkb2Vzbid0IG1hdGNoIHJlY29yZGVkIGxlbmd0aFwiKTtyZXR1cm57ZGF0YTpuZXcgRGF0YVZpZXcoZC5idWZmZXIsMCksb2Zmc2V0OjB9fXJldHVybntkYXRhOmEsb2Zmc2V0OmIub2Zmc2V0fX1mdW5jdGlvbiBoZShhKXt2YXIgYixjLGQsZT1uZXcgUWQoe2VtcHR5OiEwfSksZj1uZXcgRGF0YVZpZXcoYSwwKSxnPVtdLGg9TGUuZ2V0VGFnKGYsMCk7aWYoaD09PVN0cmluZy5mcm9tQ2hhckNvZGUoMCwxLDAsMCl8fFwidHJ1ZVwiPT09aHx8XCJ0eXAxXCI9PT1oKWUub3V0bGluZXNGb3JtYXQ9XCJ0cnVldHlwZVwiLGQ9TGUuZ2V0VVNob3J0KGYsNCksZz1lZShmLGQpO2Vsc2UgaWYoXCJPVFRPXCI9PT1oKWUub3V0bGluZXNGb3JtYXQ9XCJjZmZcIixkPUxlLmdldFVTaG9ydChmLDQpLGc9ZWUoZixkKTtlbHNle2lmKFwid09GRlwiIT09aCl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBPcGVuVHlwZSBzaWduYXR1cmUgXCIraCk7dmFyIGk9TGUuZ2V0VGFnKGYsNCk7aWYoaT09PVN0cmluZy5mcm9tQ2hhckNvZGUoMCwxLDAsMCkpZS5vdXRsaW5lc0Zvcm1hdD1cInRydWV0eXBlXCI7ZWxzZXtpZihcIk9UVE9cIiE9PWkpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgT3BlblR5cGUgZmxhdm9yIFwiK2gpO2Uub3V0bGluZXNGb3JtYXQ9XCJjZmZcIn1kPUxlLmdldFVTaG9ydChmLDEyKSxnPWZlKGYsZCl9Zm9yKHZhciBqLGssbCxtLG4sbyxwLHEscixzLHQsdT0wO3U8ZDt1Kz0xKXt2YXIgdj1nW3VdLHc9dm9pZCAwO3N3aXRjaCh2LnRhZyl7Y2FzZVwiY21hcFwiOnc9Z2UoZix2KSxlLnRhYmxlcy5jbWFwPU1lLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS5lbmNvZGluZz1uZXcgWShlLnRhYmxlcy5jbWFwKTticmVhaztjYXNlXCJjdnQgXCI6dz1nZShmLHYpLHQ9bmV3IExlLlBhcnNlcih3LmRhdGEsdy5vZmZzZXQpLGUudGFibGVzLmN2dD10LnBhcnNlU2hvcnRMaXN0KHYubGVuZ3RoLzIpO2JyZWFrO2Nhc2VcImZ2YXJcIjprPXY7YnJlYWs7Y2FzZVwiZnBnbVwiOnc9Z2UoZix2KSx0PW5ldyBMZS5QYXJzZXIody5kYXRhLHcub2Zmc2V0KSxlLnRhYmxlcy5mcGdtPXQucGFyc2VCeXRlTGlzdCh2Lmxlbmd0aCk7YnJlYWs7Y2FzZVwiaGVhZFwiOnc9Z2UoZix2KSxlLnRhYmxlcy5oZWFkPVdlLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS51bml0c1BlckVtPWUudGFibGVzLmhlYWQudW5pdHNQZXJFbSxiPWUudGFibGVzLmhlYWQuaW5kZXhUb0xvY0Zvcm1hdDticmVhaztjYXNlXCJoaGVhXCI6dz1nZShmLHYpLGUudGFibGVzLmhoZWE9WGUucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLmFzY2VuZGVyPWUudGFibGVzLmhoZWEuYXNjZW5kZXIsZS5kZXNjZW5kZXI9ZS50YWJsZXMuaGhlYS5kZXNjZW5kZXIsZS5udW1iZXJPZkhNZXRyaWNzPWUudGFibGVzLmhoZWEubnVtYmVyT2ZITWV0cmljczticmVhaztjYXNlXCJobXR4XCI6bz12O2JyZWFrO2Nhc2VcImx0YWdcIjp3PWdlKGYsdiksYz1aZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpO2JyZWFrO2Nhc2VcIm1heHBcIjp3PWdlKGYsdiksZS50YWJsZXMubWF4cD0kZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUubnVtR2x5cGhzPWUudGFibGVzLm1heHAubnVtR2x5cGhzO2JyZWFrO2Nhc2VcIm5hbWVcIjpyPXY7YnJlYWs7Y2FzZVwiT1MvMlwiOnc9Z2UoZix2KSxlLnRhYmxlcy5vczI9amYucGFyc2Uody5kYXRhLHcub2Zmc2V0KTticmVhaztjYXNlXCJwb3N0XCI6dz1nZShmLHYpLGUudGFibGVzLnBvc3Q9a2YucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLmdseXBoTmFtZXM9bmV3ICQoZS50YWJsZXMucG9zdCk7YnJlYWs7Y2FzZVwicHJlcFwiOnc9Z2UoZix2KSx0PW5ldyBMZS5QYXJzZXIody5kYXRhLHcub2Zmc2V0KSxlLnRhYmxlcy5wcmVwPXQucGFyc2VCeXRlTGlzdCh2Lmxlbmd0aCk7YnJlYWs7Y2FzZVwiZ2x5ZlwiOmw9djticmVhaztjYXNlXCJsb2NhXCI6cT12O2JyZWFrO2Nhc2VcIkNGRiBcIjpqPXY7YnJlYWs7Y2FzZVwia2VyblwiOnA9djticmVhaztjYXNlXCJHUE9TXCI6bT12O2JyZWFrO2Nhc2VcIkdTVUJcIjpuPXY7YnJlYWs7Y2FzZVwibWV0YVwiOnM9dn19dmFyIHg9Z2UoZixyKTtpZihlLnRhYmxlcy5uYW1lPWdmLnBhcnNlKHguZGF0YSx4Lm9mZnNldCxjKSxlLm5hbWVzPWUudGFibGVzLm5hbWUsbCYmcSl7dmFyIHk9MD09PWIsej1nZShmLHEpLEE9SGYucGFyc2Uoei5kYXRhLHoub2Zmc2V0LGUubnVtR2x5cGhzLHkpLEI9Z2UoZixsKTtlLmdseXBocz12Zi5wYXJzZShCLmRhdGEsQi5vZmZzZXQsQSxlKX1lbHNle2lmKCFqKXRocm93IG5ldyBFcnJvcihcIkZvbnQgZG9lc24ndCBjb250YWluIFRydWVUeXBlIG9yIENGRiBvdXRsaW5lcy5cIik7dmFyIEM9Z2UoZixqKTtWZS5wYXJzZShDLmRhdGEsQy5vZmZzZXQsZSl9dmFyIEQ9Z2UoZixvKTtpZihZZS5wYXJzZShELmRhdGEsRC5vZmZzZXQsZS5udW1iZXJPZkhNZXRyaWNzLGUubnVtR2x5cGhzLGUuZ2x5cGhzKSxfKGUpLHApe3ZhciBFPWdlKGYscCk7ZS5rZXJuaW5nUGFpcnM9R2YucGFyc2UoRS5kYXRhLEUub2Zmc2V0KX1lbHNlIGUua2VybmluZ1BhaXJzPXt9O2lmKG0pe3ZhciBGPWdlKGYsbSk7ZS50YWJsZXMuZ3Bvcz1GZi5wYXJzZShGLmRhdGEsRi5vZmZzZXQpLGUucG9zaXRpb24uaW5pdCgpfWlmKG4pe3ZhciBHPWdlKGYsbik7ZS50YWJsZXMuZ3N1Yj1vZi5wYXJzZShHLmRhdGEsRy5vZmZzZXQpfWlmKGspe3ZhciBIPWdlKGYsayk7ZS50YWJsZXMuZnZhcj1DZi5wYXJzZShILmRhdGEsSC5vZmZzZXQsZS5uYW1lcyl9aWYocyl7dmFyIEk9Z2UoZixzKTtlLnRhYmxlcy5tZXRhPXBmLnBhcnNlKEkuZGF0YSxJLm9mZnNldCksZS5tZXRhcz1lLnRhYmxlcy5tZXRhfXJldHVybiBlfWZ1bmN0aW9uIGllKGEsYil7KFwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3c/Y2U6ZGUpKGEsZnVuY3Rpb24oYSxjKXtpZihhKXJldHVybiBiKGEpO3ZhciBkO3RyeXtkPWhlKGMpfWNhdGNoKGEpe3JldHVybiBiKGEsbnVsbCl9cmV0dXJuIGIobnVsbCxkKX0pfWZ1bmN0aW9uIGplKGEpe3JldHVybiBoZShDYihiKFwiZnNcIikucmVhZEZpbGVTeW5jKGEpKSl9U3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdHx8ZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbigpe3RyeXt2YXIgYT17fSxiPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxjPWIoYSxhLGEpJiZifWNhdGNoKGEpe31yZXR1cm4gY30oKSxiPWZ1bmN0aW9uKGEpe2lmKG51bGw9PXRoaXMpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGI9U3RyaW5nKHRoaXMpLGM9Yi5sZW5ndGgsZD1hP051bWJlcihhKTowO2lmKGQhPWQmJihkPTApLCEoZDwwfHxkPj1jKSl7dmFyIGUsZj1iLmNoYXJDb2RlQXQoZCk7cmV0dXJuIGY+PTU1Mjk2JiZmPD01NjMxOSYmYz5kKzEmJihlPWIuY2hhckNvZGVBdChkKzEpKT49NTYzMjAmJmU8PTU3MzQzPzEwMjQqKGYtNTUyOTYpK2UtNTYzMjArNjU1MzY6Zn19O2E/YShTdHJpbmcucHJvdG90eXBlLFwiY29kZVBvaW50QXRcIix7dmFsdWU6Yixjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0PWJ9KCk7dmFyIGtlPTAsbGU9LTMsbWU9bmV3IGMsbmU9bmV3IGMsb2U9bmV3IFVpbnQ4QXJyYXkoMzApLHBlPW5ldyBVaW50MTZBcnJheSgzMCkscWU9bmV3IFVpbnQ4QXJyYXkoMzApLHJlPW5ldyBVaW50MTZBcnJheSgzMCksc2U9bmV3IFVpbnQ4QXJyYXkoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSx0ZT1uZXcgYyx1ZT1uZXcgVWludDhBcnJheSgzMjApLHZlPW5ldyBVaW50MTZBcnJheSgxNik7ZyhtZSxuZSksZihvZSxwZSw0LDMpLGYocWUscmUsMiwxKSxvZVsyOF09MCxwZVsyOF09MjU4O3ZhciB3ZT1vO3EucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gaXNOYU4odGhpcy54MSl8fGlzTmFOKHRoaXMueTEpfHxpc05hTih0aGlzLngyKXx8aXNOYU4odGhpcy55Mil9LHEucHJvdG90eXBlLmFkZFBvaW50PWZ1bmN0aW9uKGEsYil7XCJudW1iZXJcIj09dHlwZW9mIGEmJigoaXNOYU4odGhpcy54MSl8fGlzTmFOKHRoaXMueDIpKSYmKHRoaXMueDE9YSx0aGlzLngyPWEpLGE8dGhpcy54MSYmKHRoaXMueDE9YSksYT50aGlzLngyJiYodGhpcy54Mj1hKSksXCJudW1iZXJcIj09dHlwZW9mIGImJigoaXNOYU4odGhpcy55MSl8fGlzTmFOKHRoaXMueTIpKSYmKHRoaXMueTE9Yix0aGlzLnkyPWIpLGI8dGhpcy55MSYmKHRoaXMueTE9YiksYj50aGlzLnkyJiYodGhpcy55Mj1iKSl9LHEucHJvdG90eXBlLmFkZFg9ZnVuY3Rpb24oYSl7dGhpcy5hZGRQb2ludChhLG51bGwpfSxxLnByb3RvdHlwZS5hZGRZPWZ1bmN0aW9uKGEpe3RoaXMuYWRkUG9pbnQobnVsbCxhKX0scS5wcm90b3R5cGUuYWRkQmV6aWVyPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCl7dmFyIGk9dGhpcyxqPVthLGJdLGs9W2MsZF0sbD1bZSxmXSxtPVtnLGhdO3RoaXMuYWRkUG9pbnQoYSxiKSx0aGlzLmFkZFBvaW50KGcsaCk7Zm9yKHZhciBuPTA7bjw9MTtuKyspe3ZhciBvPTYqaltuXS0xMiprW25dKzYqbFtuXSxxPS0zKmpbbl0rOSprW25dLTkqbFtuXSszKm1bbl0scj0zKmtbbl0tMypqW25dO2lmKDAhPT1xKXt2YXIgcz1NYXRoLnBvdyhvLDIpLTQqcipxO2lmKCEoczwwKSl7dmFyIHQ9KC1vK01hdGguc3FydChzKSkvKDIqcSk7MDx0JiZ0PDEmJigwPT09biYmaS5hZGRYKHAoaltuXSxrW25dLGxbbl0sbVtuXSx0KSksMT09PW4mJmkuYWRkWShwKGpbbl0sa1tuXSxsW25dLG1bbl0sdCkpKTt2YXIgdT0oLW8tTWF0aC5zcXJ0KHMpKS8oMipxKTswPHUmJnU8MSYmKDA9PT1uJiZpLmFkZFgocChqW25dLGtbbl0sbFtuXSxtW25dLHUpKSwxPT09biYmaS5hZGRZKHAoaltuXSxrW25dLGxbbl0sbVtuXSx1KSkpfX1lbHNle2lmKDA9PT1vKWNvbnRpbnVlO3ZhciB2PS1yL287MDx2JiZ2PDEmJigwPT09biYmaS5hZGRYKHAoaltuXSxrW25dLGxbbl0sbVtuXSx2KSksMT09PW4mJmkuYWRkWShwKGpbbl0sa1tuXSxsW25dLG1bbl0sdikpKX19fSxxLnByb3RvdHlwZS5hZGRRdWFkPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1hKzIvMyooYy1hKSxoPWIrMi8zKihkLWIpLGk9ZysxLzMqKGUtYSksaj1oKzEvMyooZi1iKTt0aGlzLmFkZEJlemllcihhLGIsZyxoLGksaixlLGYpfSxyLnByb3RvdHlwZS5tb3ZlVG89ZnVuY3Rpb24oYSxiKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJNXCIseDphLHk6Yn0pfSxyLnByb3RvdHlwZS5saW5lVG89ZnVuY3Rpb24oYSxiKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJMXCIseDphLHk6Yn0pfSxyLnByb3RvdHlwZS5jdXJ2ZVRvPXIucHJvdG90eXBlLmJlemllckN1cnZlVG89ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIkNcIix4MTphLHkxOmIseDI6Yyx5MjpkLHg6ZSx5OmZ9KX0sci5wcm90b3R5cGUucXVhZFRvPXIucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG89ZnVuY3Rpb24oYSxiLGMsZCl7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiUVwiLHgxOmEseTE6Yix4OmMseTpkfSl9LHIucHJvdG90eXBlLmNsb3NlPXIucHJvdG90eXBlLmNsb3NlUGF0aD1mdW5jdGlvbigpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIlpcIn0pfSxyLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24oYSl7aWYoYS5jb21tYW5kcylhPWEuY29tbWFuZHM7ZWxzZSBpZihhIGluc3RhbmNlb2YgcSl7dmFyIGI9YTtyZXR1cm4gdGhpcy5tb3ZlVG8oYi54MSxiLnkxKSx0aGlzLmxpbmVUbyhiLngyLGIueTEpLHRoaXMubGluZVRvKGIueDIsYi55MiksdGhpcy5saW5lVG8oYi54MSxiLnkyKSx2b2lkIHRoaXMuY2xvc2UoKX1BcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLmNvbW1hbmRzLGEpfSxyLnByb3RvdHlwZS5nZXRCb3VuZGluZ0JveD1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLGI9bmV3IHEsYz0wLGQ9MCxlPTAsZj0wLGc9MDtnPHRoaXMuY29tbWFuZHMubGVuZ3RoO2crKyl7dmFyIGg9YS5jb21tYW5kc1tnXTtzd2l0Y2goaC50eXBlKXtjYXNlXCJNXCI6Yi5hZGRQb2ludChoLngsaC55KSxjPWU9aC54LGQ9Zj1oLnk7YnJlYWs7Y2FzZVwiTFwiOmIuYWRkUG9pbnQoaC54LGgueSksZT1oLngsZj1oLnk7YnJlYWs7Y2FzZVwiUVwiOmIuYWRkUXVhZChlLGYsaC54MSxoLnkxLGgueCxoLnkpLGU9aC54LGY9aC55O2JyZWFrO2Nhc2VcIkNcIjpiLmFkZEJlemllcihlLGYsaC54MSxoLnkxLGgueDIsaC55MixoLngsaC55KSxlPWgueCxmPWgueTticmVhaztjYXNlXCJaXCI6ZT1jLGY9ZDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgcGF0aCBjb21tYW5kIFwiK2gudHlwZSl9fXJldHVybiBiLmlzRW1wdHkoKSYmYi5hZGRQb2ludCgwLDApLGJ9LHIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpczthLmJlZ2luUGF0aCgpO2Zvcih2YXIgYz0wO2M8dGhpcy5jb21tYW5kcy5sZW5ndGg7Yys9MSl7dmFyIGQ9Yi5jb21tYW5kc1tjXTtcIk1cIj09PWQudHlwZT9hLm1vdmVUbyhkLngsZC55KTpcIkxcIj09PWQudHlwZT9hLmxpbmVUbyhkLngsZC55KTpcIkNcIj09PWQudHlwZT9hLmJlemllckN1cnZlVG8oZC54MSxkLnkxLGQueDIsZC55MixkLngsZC55KTpcIlFcIj09PWQudHlwZT9hLnF1YWRyYXRpY0N1cnZlVG8oZC54MSxkLnkxLGQueCxkLnkpOlwiWlwiPT09ZC50eXBlJiZhLmNsb3NlUGF0aCgpfXRoaXMuZmlsbCYmKGEuZmlsbFN0eWxlPXRoaXMuZmlsbCxhLmZpbGwoKSksdGhpcy5zdHJva2UmJihhLnN0cm9rZVN0eWxlPXRoaXMuc3Ryb2tlLGEubGluZVdpZHRoPXRoaXMuc3Ryb2tlV2lkdGgsYS5zdHJva2UoKSl9LHIucHJvdG90eXBlLnRvUGF0aERhdGE9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtyZXR1cm4gTWF0aC5yb3VuZChiKT09PWI/XCJcIitNYXRoLnJvdW5kKGIpOmIudG9GaXhlZChhKX1mdW5jdGlvbiBjKCl7Zm9yKHZhciBhPWFyZ3VtZW50cyxjPVwiXCIsZD0wO2Q8YXJndW1lbnRzLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdO2U+PTAmJmQ+MCYmKGMrPVwiIFwiKSxjKz1iKGUpfXJldHVybiBjfXZhciBkPXRoaXM7YT12b2lkIDAhPT1hP2E6Mjtmb3IodmFyIGU9XCJcIixmPTA7Zjx0aGlzLmNvbW1hbmRzLmxlbmd0aDtmKz0xKXt2YXIgZz1kLmNvbW1hbmRzW2ZdO1wiTVwiPT09Zy50eXBlP2UrPVwiTVwiK2MoZy54LGcueSk6XCJMXCI9PT1nLnR5cGU/ZSs9XCJMXCIrYyhnLngsZy55KTpcIkNcIj09PWcudHlwZT9lKz1cIkNcIitjKGcueDEsZy55MSxnLngyLGcueTIsZy54LGcueSk6XCJRXCI9PT1nLnR5cGU/ZSs9XCJRXCIrYyhnLngxLGcueTEsZy54LGcueSk6XCJaXCI9PT1nLnR5cGUmJihlKz1cIlpcIil9cmV0dXJuIGV9LHIucHJvdG90eXBlLnRvU1ZHPWZ1bmN0aW9uKGEpe3ZhciBiPSc8cGF0aCBkPVwiJztyZXR1cm4gYis9dGhpcy50b1BhdGhEYXRhKGEpLGIrPSdcIicsdGhpcy5maWxsJiZcImJsYWNrXCIhPT10aGlzLmZpbGwmJihudWxsPT09dGhpcy5maWxsP2IrPScgZmlsbD1cIm5vbmVcIic6Yis9JyBmaWxsPVwiJyt0aGlzLmZpbGwrJ1wiJyksdGhpcy5zdHJva2UmJihiKz0nIHN0cm9rZT1cIicrdGhpcy5zdHJva2UrJ1wiIHN0cm9rZS13aWR0aD1cIicrdGhpcy5zdHJva2VXaWR0aCsnXCInKSxiKz1cIi8+XCJ9LHIucHJvdG90eXBlLnRvRE9NRWxlbWVudD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnRvUGF0aERhdGEoYSksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwicGF0aFwiKTtyZXR1cm4gYy5zZXRBdHRyaWJ1dGUoXCJkXCIsYiksY307dmFyIHhlPXtmYWlsOnMsYXJndW1lbnQ6dCxhc3NlcnQ6dH0seWU9MzI3NjgsemU9MjE0NzQ4MzY0OCxBZT17fSxCZT17fSxDZT17fTtCZS5CWVRFPWZ1bmN0aW9uKGEpe3JldHVybiB4ZS5hcmd1bWVudChhPj0wJiZhPD0yNTUsXCJCeXRlIHZhbHVlIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDI1NS5cIiksW2FdfSxDZS5CWVRFPXUoMSksQmUuQ0hBUj1mdW5jdGlvbihhKXtyZXR1cm5bYS5jaGFyQ29kZUF0KDApXX0sQ2UuQ0hBUj11KDEpLEJlLkNIQVJBUlJBWT1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YS5sZW5ndGg7Yys9MSliW2NdPWEuY2hhckNvZGVBdChjKTtyZXR1cm4gYn0sQ2UuQ0hBUkFSUkFZPWZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0sQmUuVVNIT1JUPWZ1bmN0aW9uKGEpe3JldHVyblthPj44JjI1NSwyNTUmYV19LENlLlVTSE9SVD11KDIpLEJlLlNIT1JUPWZ1bmN0aW9uKGEpe3JldHVybiBhPj15ZSYmKGE9LSgyKnllLWEpKSxbYT4+OCYyNTUsMjU1JmFdfSxDZS5TSE9SVD11KDIpLEJlLlVJTlQyND1mdW5jdGlvbihhKXtyZXR1cm5bYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuVUlOVDI0PXUoMyksQmUuVUxPTkc9ZnVuY3Rpb24oYSl7cmV0dXJuW2E+PjI0JjI1NSxhPj4xNiYyNTUsYT4+OCYyNTUsMjU1JmFdfSxDZS5VTE9ORz11KDQpLEJlLkxPTkc9ZnVuY3Rpb24oYSl7cmV0dXJuIGE+PXplJiYoYT0tKDIqemUtYSkpLFthPj4yNCYyNTUsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuTE9ORz11KDQpLEJlLkZJWEVEPUJlLlVMT05HLENlLkZJWEVEPUNlLlVMT05HLEJlLkZXT1JEPUJlLlNIT1JULENlLkZXT1JEPUNlLlNIT1JULEJlLlVGV09SRD1CZS5VU0hPUlQsQ2UuVUZXT1JEPUNlLlVTSE9SVCxCZS5MT05HREFURVRJTUU9ZnVuY3Rpb24oYSl7cmV0dXJuWzAsMCwwLDAsYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLkxPTkdEQVRFVElNRT11KDgpLEJlLlRBRz1mdW5jdGlvbihhKXtyZXR1cm4geGUuYXJndW1lbnQoND09PWEubGVuZ3RoLFwiVGFnIHNob3VsZCBiZSBleGFjdGx5IDQgQVNDSUkgY2hhcmFjdGVycy5cIiksW2EuY2hhckNvZGVBdCgwKSxhLmNoYXJDb2RlQXQoMSksYS5jaGFyQ29kZUF0KDIpLGEuY2hhckNvZGVBdCgzKV19LENlLlRBRz11KDQpLEJlLkNhcmQ4PUJlLkJZVEUsQ2UuQ2FyZDg9Q2UuQllURSxCZS5DYXJkMTY9QmUuVVNIT1JULENlLkNhcmQxNj1DZS5VU0hPUlQsQmUuT2ZmU2l6ZT1CZS5CWVRFLENlLk9mZlNpemU9Q2UuQllURSxCZS5TSUQ9QmUuVVNIT1JULENlLlNJRD1DZS5VU0hPUlQsQmUuTlVNQkVSPWZ1bmN0aW9uKGEpe3JldHVybiBhPj0tMTA3JiZhPD0xMDc/W2ErMTM5XTphPj0xMDgmJmE8PTExMzE/KGEtPTEwOCxbMjQ3KyhhPj44KSwyNTUmYV0pOmE+PS0xMTMxJiZhPD0tMTA4PyhhPS1hLTEwOCxbMjUxKyhhPj44KSwyNTUmYV0pOmE+PS0zMjc2OCYmYTw9MzI3Njc/QmUuTlVNQkVSMTYoYSk6QmUuTlVNQkVSMzIoYSlcbn0sQ2UuTlVNQkVSPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5OVU1CRVIoYSkubGVuZ3RofSxCZS5OVU1CRVIxNj1mdW5jdGlvbihhKXtyZXR1cm5bMjgsYT4+OCYyNTUsMjU1JmFdfSxDZS5OVU1CRVIxNj11KDMpLEJlLk5VTUJFUjMyPWZ1bmN0aW9uKGEpe3JldHVyblsyOSxhPj4yNCYyNTUsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuTlVNQkVSMzI9dSg1KSxCZS5SRUFMPWZ1bmN0aW9uKGEpe3ZhciBiPWEudG9TdHJpbmcoKSxjPS9cXC4oXFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxcZHswLDJ9KD86ZSguKyl8JCkvLmV4ZWMoYik7aWYoYyl7dmFyIGQ9cGFyc2VGbG9hdChcIjFlXCIrKChjWzJdPytjWzJdOjApK2NbMV0ubGVuZ3RoKSk7Yj0oTWF0aC5yb3VuZChhKmQpL2QpLnRvU3RyaW5nKCl9Zm9yKHZhciBlPVwiXCIsZj0wLGc9Yi5sZW5ndGg7ZjxnO2YrPTEpe3ZhciBoPWJbZl07ZSs9XCJlXCI9PT1oP1wiLVwiPT09YlsrK2ZdP1wiY1wiOlwiYlwiOlwiLlwiPT09aD9cImFcIjpcIi1cIj09PWg/XCJlXCI6aH1lKz0xJmUubGVuZ3RoP1wiZlwiOlwiZmZcIjtmb3IodmFyIGk9WzMwXSxqPTAsaz1lLmxlbmd0aDtqPGs7ais9MilpLnB1c2gocGFyc2VJbnQoZS5zdWJzdHIoaiwyKSwxNikpO3JldHVybiBpfSxDZS5SRUFMPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5SRUFMKGEpLmxlbmd0aH0sQmUuTkFNRT1CZS5DSEFSQVJSQVksQ2UuTkFNRT1DZS5DSEFSQVJSQVksQmUuU1RSSU5HPUJlLkNIQVJBUlJBWSxDZS5TVFJJTkc9Q2UuQ0hBUkFSUkFZLEFlLlVURjg9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPWMsZj0wO2Y8ZTtmKyssYis9MSlkW2ZdPWEuZ2V0VWludDgoYik7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxkKX0sQWUuVVRGMTY9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPWMvMixmPTA7ZjxlO2YrKyxiKz0yKWRbZl09YS5nZXRVaW50MTYoYik7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxkKX0sQmUuVVRGMTY9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrPTEpe3ZhciBkPWEuY2hhckNvZGVBdChjKTtiW2IubGVuZ3RoXT1kPj44JjI1NSxiW2IubGVuZ3RoXT0yNTUmZH1yZXR1cm4gYn0sQ2UuVVRGMTY9ZnVuY3Rpb24oYSl7cmV0dXJuIDIqYS5sZW5ndGh9O3ZhciBEZT17XCJ4LW1hYy1jcm9hdGlhblwiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuxaDihKLCtMKo4omgxb3DmOKInsKx4omk4oml4oiGwrXiiILiiJHiiI/FoeKIq8KqwrrOqcW+w7jCv8KhwqziiJrGkuKJiMSGwqvEjOKApsKgw4DDg8OVxZLFk8SQ4oCU4oCc4oCd4oCY4oCZw7fil4rvo7/CqeKBhOKCrOKAueKAusOGwrvigJPCt+KAmuKAnuKAsMOCxIfDgcSNw4jDjcOOw4/DjMOTw5TEkcOSw5rDm8OZxLHLhsucwq/PgMOLy5rCuMOKw6bLh1wiLFwieC1tYWMtY3lyaWxsaWNcIjpcItCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/igKDCsNKQwqPCp+KAosK20IbCrsKp4oSi0ILRkuKJoNCD0ZPiiJ7CseKJpOKJpdGWwrXSkdCI0ITRlNCH0ZfQidGZ0IrRmtGY0IXCrOKImsaS4omI4oiGwqvCu+KApsKg0IvRm9CM0ZzRleKAk+KAlOKAnOKAneKAmOKAmcO34oCe0I7RntCP0Z/ihJbQgdGR0Y/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjlwiLFwieC1tYWMtZ2FlbGljXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4biCwrHiiaTiiaXhuIPEisSL4biK4biL4bie4bifxKDEoeG5gMOmw7jhuYHhuZbhuZfJvMaSxb/huaDCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZ4bmh4bqbw7/FuOG5quKCrOKAueKAusW2xbfhuavCt+G7suG7s+KBisOCw4rDgcOLw4jDjcOOw4/DjMOTw5TimaPDksOaw5vDmcSxw53DvcW0xbXhuoThuoXhuoDhuoHhuoLhuoNcIixcIngtbWFjLWdyZWVrXCI6XCLDhMK5wrLDicKzw5bDnM6Fw6DDosOkzoTCqMOnw6nDqMOqw6vCo+KEosOuw6/igKLCveKAsMO0w7bCpuKCrMO5w7vDvOKAoM6TzpTOmM6bzp7OoMOfwq7Cqc6jzqrCp+KJoMKwwrfOkcKx4omk4omlwqXOks6VzpbOl86ZzprOnM6mzqvOqM6pzqzOncKszp/OoeKJiM6kwqvCu+KApsKgzqXOp86GzojFk+KAk+KAleKAnOKAneKAmOKAmcO3zonOis6Mzo7Orc6uzq/PjM6Pz43Osc6yz4jOtM61z4bOs863zrnOvs66zrvOvM69zr/PgM+Oz4HPg8+EzrjPic+Cz4fPhc62z4rPi86QzrDCrVwiLFwieC1tYWMtaWNlbGFuZGljXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O8w53CsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrOqcOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTigqzDkMOww57DvsO9wrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU76O/w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCIsXCJ4LW1hYy1pbnVpdFwiOlwi4ZCD4ZCE4ZCF4ZCG4ZCK4ZCL4ZCx4ZCy4ZCz4ZC04ZC44ZC54ZGJ4ZGO4ZGP4ZGQ4ZGR4ZGV4ZGW4ZGm4ZGt4ZGu4ZGv4ZGw4ZGy4ZGz4ZKD4ZKL4ZKM4ZKN4ZKO4ZKQ4ZKRwrDhkqHhkqXhkqbigKLCtuGSp8KuwqnihKLhkqjhkqrhkqvhkrvhk4Lhk4Phk4Thk4Xhk4fhk4jhk5Dhk6/hk7Dhk7Hhk7Lhk7Thk7XhlIXhk5Xhk5bhk5fhk5jhk5rhk5vhk6rhlKjhlKnhlKrhlKvhlK3igKbCoOGUruGUvuGVleGVluGVl+KAk+KAlOKAnOKAneKAmOKAmeGVmOGVmeGVmuGVneGVhuGVh+GViOGVieGVi+GVjOGVkOGVv+GWgOGWgeGWguGWg+GWhOGWheGWj+GWkOGWkeGWkuGWk+GWlOGWleGZseGZsuGZs+GZtOGZteGZtuGWluGWoOGWoeGWouGWo+GWpOGWpeGWpuGVvMWBxYJcIixcIngtbWFjLWNlXCI6XCLDhMSAxIHDicSEw5bDnMOhxIXEjMOkxI3EhsSHw6nFucW6xI7DrcSPxJLEk8SWw7PEl8O0w7bDtcO6xJrEm8O84oCgwrDEmMKjwqfigKLCtsOfwq7CqeKEosSZwqjiiaDEo8SuxK/EquKJpOKJpcSrxLbiiILiiJHFgsS7xLzEvcS+xLnEusWFxYbFg8Ks4oiaxYTFh+KIhsKrwrvigKbCoMWIxZDDlcWRxYzigJPigJTigJzigJ3igJjigJnDt+KXisWNxZTFlcWY4oC54oC6xZnFlsWXxaDigJrigJ7FocWaxZvDgcWkxaXDjcW9xb7FqsOTw5TFq8Wuw5rFr8WwxbHFssWzw53DvcS3xbvFgcW8xKLLh1wiLG1hY2ludG9zaDpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrOqcOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTigqzigLnigLrvrIHvrILigKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvo7/DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIixcIngtbWFjLXJvbWFuaWFuXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDEgsiY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK6zqnEg8iZwr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGE4oKs4oC54oC6yJrIm+KAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+jv8OSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiLFwieC1tYWMtdHVya2lzaFwiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCus6pw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuMSexJ/EsMSxxZ7Fn+KAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+jv8OSw5rDm8OZ76Kgy4bLnMKvy5jLmcuawrjLncuby4dcIn07QWUuTUFDU1RSSU5HPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPURlW2RdO2lmKHZvaWQgMCE9PWUpe2Zvcih2YXIgZj1cIlwiLGc9MDtnPGM7ZysrKXt2YXIgaD1hLmdldFVpbnQ4KGIrZyk7Zis9aDw9MTI3P1N0cmluZy5mcm9tQ2hhckNvZGUoaCk6ZVsxMjcmaF19cmV0dXJuIGZ9fTt2YXIgRWUsRmU9XCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha01hcCYmbmV3IFdlYWtNYXAsR2U9ZnVuY3Rpb24oYSl7aWYoIUVlKXtFZT17fTtmb3IodmFyIGIgaW4gRGUpRWVbYl09bmV3IFN0cmluZyhiKX12YXIgYz1FZVthXTtpZih2b2lkIDAhPT1jKXtpZihGZSl7dmFyIGQ9RmUuZ2V0KGMpO2lmKHZvaWQgMCE9PWQpcmV0dXJuIGR9dmFyIGU9RGVbYV07aWYodm9pZCAwIT09ZSl7Zm9yKHZhciBmPXt9LGc9MDtnPGUubGVuZ3RoO2crKylmW2UuY2hhckNvZGVBdChnKV09ZysxMjg7cmV0dXJuIEZlJiZGZS5zZXQoYyxmKSxmfX19O0JlLk1BQ1NUUklORz1mdW5jdGlvbihhLGIpe3ZhciBjPUdlKGIpO2lmKHZvaWQgMCE9PWMpe2Zvcih2YXIgZD1bXSxlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBmPWEuY2hhckNvZGVBdChlKTtpZihmPj0xMjgmJnZvaWQgMD09PShmPWNbZl0pKXJldHVybjtkW2VdPWZ9cmV0dXJuIGR9fSxDZS5NQUNTVFJJTkc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1CZS5NQUNTVFJJTkcoYSxiKTtyZXR1cm4gdm9pZCAwIT09Yz9jLmxlbmd0aDowfSxCZS5WQVJERUxUQVM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz1bXTtiPGEubGVuZ3RoOyl7dmFyIGQ9YVtiXTtiPTA9PT1kP3coYSxiLGMpOmQ+PS0xMjgmJmQ8PTEyNz94KGEsYixjKTp5KGEsYixjKX1yZXR1cm4gY30sQmUuSU5ERVg9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTEsYz1bYl0sZD1bXSxlPTA7ZTxhLmxlbmd0aDtlKz0xKXt2YXIgZj1CZS5PQkpFQ1QoYVtlXSk7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZCxmKSxiKz1mLmxlbmd0aCxjLnB1c2goYil9aWYoMD09PWQubGVuZ3RoKXJldHVyblswLDBdO2Zvcih2YXIgZz1bXSxoPTErTWF0aC5mbG9vcihNYXRoLmxvZyhiKS9NYXRoLmxvZygyKSkvOHwwLGk9W3ZvaWQgMCxCZS5CWVRFLEJlLlVTSE9SVCxCZS5VSU5UMjQsQmUuVUxPTkddW2hdLGo9MDtqPGMubGVuZ3RoO2orPTEpe3ZhciBrPWkoY1tqXSk7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZyxrKX1yZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdChCZS5DYXJkMTYoYS5sZW5ndGgpLEJlLk9mZlNpemUoaCksZyxkKX0sQ2UuSU5ERVg9ZnVuY3Rpb24oYSl7cmV0dXJuIEJlLklOREVYKGEpLmxlbmd0aH0sQmUuRElDVD1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz1PYmplY3Qua2V5cyhhKSxkPWMubGVuZ3RoLGU9MDtlPGQ7ZSs9MSl7dmFyIGY9cGFyc2VJbnQoY1tlXSwwKSxnPWFbZl07Yj1iLmNvbmNhdChCZS5PUEVSQU5EKGcudmFsdWUsZy50eXBlKSksYj1iLmNvbmNhdChCZS5PUEVSQVRPUihmKSl9cmV0dXJuIGJ9LENlLkRJQ1Q9ZnVuY3Rpb24oYSl7cmV0dXJuIEJlLkRJQ1QoYSkubGVuZ3RofSxCZS5PUEVSQVRPUj1mdW5jdGlvbihhKXtyZXR1cm4gYTwxMjAwP1thXTpbMTIsYS0xMjAwXX0sQmUuT1BFUkFORD1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2lmKEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKz0xKXhlLmFyZ3VtZW50KGEubGVuZ3RoPT09Yi5sZW5ndGgsXCJOb3QgZW5vdWdoIGFyZ3VtZW50cyBnaXZlbiBmb3IgdHlwZVwiK2IpLGM9Yy5jb25jYXQoQmUuT1BFUkFORChhW2RdLGJbZF0pKTtlbHNlIGlmKFwiU0lEXCI9PT1iKWM9Yy5jb25jYXQoQmUuTlVNQkVSKGEpKTtlbHNlIGlmKFwib2Zmc2V0XCI9PT1iKWM9Yy5jb25jYXQoQmUuTlVNQkVSMzIoYSkpO2Vsc2UgaWYoXCJudW1iZXJcIj09PWIpYz1jLmNvbmNhdChCZS5OVU1CRVIoYSkpO2Vsc2V7aWYoXCJyZWFsXCIhPT1iKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3BlcmFuZCB0eXBlIFwiK2IpO2M9Yy5jb25jYXQoQmUuUkVBTChhKSl9cmV0dXJuIGN9LEJlLk9QPUJlLkJZVEUsQ2UuT1A9Q2UuQllURTt2YXIgSGU9XCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha01hcCYmbmV3IFdlYWtNYXA7QmUuQ0hBUlNUUklORz1mdW5jdGlvbihhKXtpZihIZSl7dmFyIGI9SGUuZ2V0KGEpO2lmKHZvaWQgMCE9PWIpcmV0dXJuIGJ9Zm9yKHZhciBjPVtdLGQ9YS5sZW5ndGgsZT0wO2U8ZDtlKz0xKXt2YXIgZj1hW2VdO2M9Yy5jb25jYXQoQmVbZi50eXBlXShmLnZhbHVlKSl9cmV0dXJuIEhlJiZIZS5zZXQoYSxjKSxjfSxDZS5DSEFSU1RSSU5HPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5DSEFSU1RSSU5HKGEpLmxlbmd0aH0sQmUuT0JKRUNUPWZ1bmN0aW9uKGEpe3ZhciBiPUJlW2EudHlwZV07cmV0dXJuIHhlLmFyZ3VtZW50KHZvaWQgMCE9PWIsXCJObyBlbmNvZGluZyBmdW5jdGlvbiBmb3IgdHlwZSBcIithLnR5cGUpLGIoYS52YWx1ZSl9LENlLk9CSkVDVD1mdW5jdGlvbihhKXt2YXIgYj1DZVthLnR5cGVdO3JldHVybiB4ZS5hcmd1bWVudCh2b2lkIDAhPT1iLFwiTm8gc2l6ZU9mIGZ1bmN0aW9uIGZvciB0eXBlIFwiK2EudHlwZSksYihhLnZhbHVlKX0sQmUuVEFCTEU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9YS5maWVsZHMubGVuZ3RoLGQ9W10sZT1bXSxmPTA7ZjxjO2YrPTEpe3ZhciBnPWEuZmllbGRzW2ZdLGg9QmVbZy50eXBlXTt4ZS5hcmd1bWVudCh2b2lkIDAhPT1oLFwiTm8gZW5jb2RpbmcgZnVuY3Rpb24gZm9yIGZpZWxkIHR5cGUgXCIrZy50eXBlK1wiIChcIitnLm5hbWUrXCIpXCIpO3ZhciBpPWFbZy5uYW1lXTt2b2lkIDA9PT1pJiYoaT1nLnZhbHVlKTt2YXIgaj1oKGkpO1wiVEFCTEVcIj09PWcudHlwZT8oZS5wdXNoKGIubGVuZ3RoKSxiPWIuY29uY2F0KFswLDBdKSxkLnB1c2goaikpOmI9Yi5jb25jYXQoail9Zm9yKHZhciBrPTA7azxkLmxlbmd0aDtrKz0xKXt2YXIgbD1lW2tdLG09Yi5sZW5ndGg7eGUuYXJndW1lbnQobTw2NTUzNixcIlRhYmxlIFwiK2EudGFibGVOYW1lK1wiIHRvbyBiaWcuXCIpLGJbbF09bT4+OCxiW2wrMV09MjU1Jm0sYj1iLmNvbmNhdChkW2tdKX1yZXR1cm4gYn0sQ2UuVEFCTEU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz1hLmZpZWxkcy5sZW5ndGgsZD0wO2Q8YztkKz0xKXt2YXIgZT1hLmZpZWxkc1tkXSxmPUNlW2UudHlwZV07eGUuYXJndW1lbnQodm9pZCAwIT09ZixcIk5vIHNpemVPZiBmdW5jdGlvbiBmb3IgZmllbGQgdHlwZSBcIitlLnR5cGUrXCIgKFwiK2UubmFtZStcIilcIik7dmFyIGc9YVtlLm5hbWVdO3ZvaWQgMD09PWcmJihnPWUudmFsdWUpLGIrPWYoZyksXCJUQUJMRVwiPT09ZS50eXBlJiYoYis9Mil9cmV0dXJuIGJ9LEJlLlJFQ09SRD1CZS5UQUJMRSxDZS5SRUNPUkQ9Q2UuVEFCTEUsQmUuTElURVJBTD1mdW5jdGlvbihhKXtyZXR1cm4gYX0sQ2UuTElURVJBTD1mdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LHoucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbigpe3JldHVybiBCZS5UQUJMRSh0aGlzKX0sei5wcm90b3R5cGUuc2l6ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIENlLlRBQkxFKHRoaXMpfSxELnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHoucHJvdG90eXBlKSxELnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ELEUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoei5wcm90b3R5cGUpLEUucHJvdG90eXBlLmNvbnN0cnVjdG9yPUUsRi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6LnByb3RvdHlwZSksRi5wcm90b3R5cGUuY29uc3RydWN0b3I9RixHLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHoucHJvdG90eXBlKSxHLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HO3ZhciBJZT17VGFibGU6eixSZWNvcmQ6eixDb3ZlcmFnZTpELFNjcmlwdExpc3Q6RSxGZWF0dXJlTGlzdDpGLExvb2t1cExpc3Q6Ryx1c2hvcnRMaXN0OkEsdGFibGVMaXN0OkIscmVjb3JkTGlzdDpDfSxKZT17Ynl0ZToxLHVTaG9ydDoyLHNob3J0OjIsdUxvbmc6NCxmaXhlZDo0LGxvbmdEYXRlVGltZTo4LHRhZzo0fTtRLnByb3RvdHlwZS5wYXJzZUJ5dGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0VWludDgodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTEsYX0sUS5wcm90b3R5cGUucGFyc2VDaGFyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldEludDgodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTEsYX0sUS5wcm90b3R5cGUucGFyc2VDYXJkOD1RLnByb3RvdHlwZS5wYXJzZUJ5dGUsUS5wcm90b3R5cGUucGFyc2VVU2hvcnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0VWludDE2KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yLGF9LFEucHJvdG90eXBlLnBhcnNlQ2FyZDE2PVEucHJvdG90eXBlLnBhcnNlVVNob3J0LFEucHJvdG90eXBlLnBhcnNlU0lEPVEucHJvdG90eXBlLnBhcnNlVVNob3J0LFEucHJvdG90eXBlLnBhcnNlT2Zmc2V0MTY9US5wcm90b3R5cGUucGFyc2VVU2hvcnQsUS5wcm90b3R5cGUucGFyc2VTaG9ydD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YS5nZXRJbnQxNih0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MixhfSxRLnByb3RvdHlwZS5wYXJzZUYyRG90MTQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0SW50MTYodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCkvMTYzODQ7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIsYX0sUS5wcm90b3R5cGUucGFyc2VVTG9uZz1mdW5jdGlvbigpe3ZhciBhPUsodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz00LGF9LFEucHJvdG90eXBlLnBhcnNlT2Zmc2V0MzI9US5wcm90b3R5cGUucGFyc2VVTG9uZyxRLnByb3RvdHlwZS5wYXJzZUZpeGVkPWZ1bmN0aW9uKCl7dmFyIGE9TCh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTQsYX0sUS5wcm90b3R5cGUucGFyc2VTdHJpbmc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kYXRhLGM9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxkPVwiXCI7dGhpcy5yZWxhdGl2ZU9mZnNldCs9YTtmb3IodmFyIGU9MDtlPGE7ZSsrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYi5nZXRVaW50OChjK2UpKTtyZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VUYWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVN0cmluZyg0KX0sUS5wcm90b3R5cGUucGFyc2VMb25nRGF0ZVRpbWU9ZnVuY3Rpb24oKXt2YXIgYT1LKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KzQpO3JldHVybiBhLT0yMDgyODQ0ODAwLHRoaXMucmVsYXRpdmVPZmZzZXQrPTgsYX0sUS5wcm90b3R5cGUucGFyc2VWZXJzaW9uPWZ1bmN0aW9uKGEpe3ZhciBiPUkodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpLGM9SSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCsyKTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9NCx2b2lkIDA9PT1hJiYoYT00MDk2KSxiK2MvYS8xMH0sUS5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTEpLHRoaXMucmVsYXRpdmVPZmZzZXQrPUplW2FdKmJ9LFEucHJvdG90eXBlLnBhcnNlVUxvbmdMaXN0PWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMucGFyc2VVTG9uZygpKTtmb3IodmFyIGI9bmV3IEFycmF5KGEpLGM9dGhpcy5kYXRhLGQ9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxlPTA7ZTxhO2UrKyliW2VdPWMuZ2V0VWludDMyKGQpLGQrPTQ7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTQqYSxifSxRLnByb3RvdHlwZS5wYXJzZU9mZnNldDE2TGlzdD1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydExpc3Q9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9dGhpcy5wYXJzZVVTaG9ydCgpKTtmb3IodmFyIGI9bmV3IEFycmF5KGEpLGM9dGhpcy5kYXRhLGQ9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxlPTA7ZTxhO2UrKyliW2VdPWMuZ2V0VWludDE2KGQpLGQrPTI7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIqYSxifSxRLnByb3RvdHlwZS5wYXJzZVNob3J0TGlzdD1mdW5jdGlvbihhKXtmb3IodmFyIGI9bmV3IEFycmF5KGEpLGM9dGhpcy5kYXRhLGQ9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxlPTA7ZTxhO2UrKyliW2VdPWMuZ2V0SW50MTYoZCksZCs9MjtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MiphLGJ9LFEucHJvdG90eXBlLnBhcnNlQnl0ZUxpc3Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldFVpbnQ4KGQrKyk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPWEsYn0sUS5wcm90b3R5cGUucGFyc2VMaXN0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztifHwoYj1hLGE9dGhpcy5wYXJzZVVTaG9ydCgpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9MDtlPGE7ZSsrKWRbZV09Yi5jYWxsKGMpO3JldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZUxpc3QzMj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Ynx8KGI9YSxhPXRoaXMucGFyc2VVTG9uZygpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9MDtlPGE7ZSsrKWRbZV09Yi5jYWxsKGMpO3JldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVJlY29yZExpc3Q9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2J8fChiPWEsYT10aGlzLnBhcnNlVVNob3J0KCkpO2Zvcih2YXIgZD1uZXcgQXJyYXkoYSksZT1PYmplY3Qua2V5cyhiKSxmPTA7ZjxhO2YrKyl7Zm9yKHZhciBnPXt9LGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGk9ZVtoXSxqPWJbaV07Z1tpXT1qLmNhbGwoYyl9ZFtmXT1nfXJldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVJlY29yZExpc3QzMj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Ynx8KGI9YSxhPXRoaXMucGFyc2VVTG9uZygpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9T2JqZWN0LmtleXMoYiksZj0wO2Y8YTtmKyspe2Zvcih2YXIgZz17fSxoPTA7aDxlLmxlbmd0aDtoKyspe3ZhciBpPWVbaF0saj1iW2ldO2dbaV09ai5jYWxsKGMpfWRbZl09Z31yZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VTdHJ1Y3Q9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhKXJldHVybiBhLmNhbGwodGhpcyk7Zm9yKHZhciBjPU9iamVjdC5rZXlzKGEpLGQ9e30sZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZj1jW2VdLGc9YVtmXTtkW2ZdPWcuY2FsbChiKX1yZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VWYWx1ZVJlY29yZD1mdW5jdGlvbihhKXtpZih2b2lkIDA9PT1hJiYoYT10aGlzLnBhcnNlVVNob3J0KCkpLDAhPT1hKXt2YXIgYj17fTtyZXR1cm4gMSZhJiYoYi54UGxhY2VtZW50PXRoaXMucGFyc2VTaG9ydCgpKSwyJmEmJihiLnlQbGFjZW1lbnQ9dGhpcy5wYXJzZVNob3J0KCkpLDQmYSYmKGIueEFkdmFuY2U9dGhpcy5wYXJzZVNob3J0KCkpLDgmYSYmKGIueUFkdmFuY2U9dGhpcy5wYXJzZVNob3J0KCkpLDE2JmEmJihiLnhQbGFEZXZpY2U9dm9pZCAwLHRoaXMucGFyc2VTaG9ydCgpKSwzMiZhJiYoYi55UGxhRGV2aWNlPXZvaWQgMCx0aGlzLnBhcnNlU2hvcnQoKSksNjQmYSYmKGIueEFkdkRldmljZT12b2lkIDAsdGhpcy5wYXJzZVNob3J0KCkpLDEyOCZhJiYoYi55QWR2RGV2aWNlPXZvaWQgMCx0aGlzLnBhcnNlU2hvcnQoKSksYn19LFEucHJvdG90eXBlLnBhcnNlVmFsdWVSZWNvcmRMaXN0PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMsYj10aGlzLnBhcnNlVVNob3J0KCksYz10aGlzLnBhcnNlVVNob3J0KCksZD1uZXcgQXJyYXkoYyksZT0wO2U8YztlKyspZFtlXT1hLnBhcnNlVmFsdWVSZWNvcmQoYik7cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlUG9pbnRlcj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnBhcnNlT2Zmc2V0MTYoKTtpZihiPjApcmV0dXJuIG5ldyBRKHRoaXMuZGF0YSx0aGlzLm9mZnNldCtiKS5wYXJzZVN0cnVjdChhKX0sUS5wcm90b3R5cGUucGFyc2VQb2ludGVyMzI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wYXJzZU9mZnNldDMyKCk7aWYoYj4wKXJldHVybiBuZXcgUSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrYikucGFyc2VTdHJ1Y3QoYSl9LFEucHJvdG90eXBlLnBhcnNlTGlzdE9mTGlzdHM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMsYz10aGlzLnBhcnNlT2Zmc2V0MTZMaXN0KCksZD1jLmxlbmd0aCxlPXRoaXMucmVsYXRpdmVPZmZzZXQsZj1uZXcgQXJyYXkoZCksZz0wO2c8ZDtnKyspe3ZhciBoPWNbZ107aWYoMCE9PWgpaWYoYi5yZWxhdGl2ZU9mZnNldD1oLGEpe2Zvcih2YXIgaT1iLnBhcnNlT2Zmc2V0MTZMaXN0KCksaj1uZXcgQXJyYXkoaS5sZW5ndGgpLGs9MDtrPGkubGVuZ3RoO2srKyliLnJlbGF0aXZlT2Zmc2V0PWgraVtrXSxqW2tdPWEuY2FsbChiKTtmW2ddPWp9ZWxzZSBmW2ddPWIucGFyc2VVU2hvcnRMaXN0KCk7ZWxzZSBmW2ddPXZvaWQgMH1yZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldD1lLGZ9LFEucHJvdG90eXBlLnBhcnNlQ292ZXJhZ2U9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxjPXRoaXMucGFyc2VVU2hvcnQoKSxkPXRoaXMucGFyc2VVU2hvcnQoKTtpZigxPT09YylyZXR1cm57Zm9ybWF0OjEsZ2x5cGhzOnRoaXMucGFyc2VVU2hvcnRMaXN0KGQpfTtpZigyPT09Yyl7Zm9yKHZhciBlPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyllW2ZdPXtzdGFydDphLnBhcnNlVVNob3J0KCksZW5kOmEucGFyc2VVU2hvcnQoKSxpbmRleDphLnBhcnNlVVNob3J0KCl9O3JldHVybntmb3JtYXQ6MixyYW5nZXM6ZX19dGhyb3cgbmV3IEVycm9yKFwiMHhcIitiLnRvU3RyaW5nKDE2KStcIjogQ292ZXJhZ2UgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKX0sUS5wcm90b3R5cGUucGFyc2VDbGFzc0RlZj1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWIpcmV0dXJue2Zvcm1hdDoxLHN0YXJ0R2x5cGg6dGhpcy5wYXJzZVVTaG9ydCgpLGNsYXNzZXM6dGhpcy5wYXJzZVVTaG9ydExpc3QoKX07aWYoMj09PWIpcmV0dXJue2Zvcm1hdDoyLHJhbmdlczp0aGlzLnBhcnNlUmVjb3JkTGlzdCh7c3RhcnQ6US51U2hvcnQsZW5kOlEudVNob3J0LGNsYXNzSWQ6US51U2hvcnR9KX07dGhyb3cgbmV3IEVycm9yKFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogQ2xhc3NEZWYgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKX0sUS5saXN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VMaXN0KGEsYil9fSxRLmxpc3QzMj1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlTGlzdDMyKGEsYil9fSxRLnJlY29yZExpc3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVJlY29yZExpc3QoYSxiKX19LFEucmVjb3JkTGlzdDMyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VSZWNvcmRMaXN0MzIoYSxiKX19LFEucG9pbnRlcj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoYSl9fSxRLnBvaW50ZXIzMj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIzMihhKX19LFEudGFnPVEucHJvdG90eXBlLnBhcnNlVGFnLFEuYnl0ZT1RLnByb3RvdHlwZS5wYXJzZUJ5dGUsUS51U2hvcnQ9US5vZmZzZXQxNj1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydCxRLnVTaG9ydExpc3Q9US5wcm90b3R5cGUucGFyc2VVU2hvcnRMaXN0LFEudUxvbmc9US5vZmZzZXQzMj1RLnByb3RvdHlwZS5wYXJzZVVMb25nLFEudUxvbmdMaXN0PVEucHJvdG90eXBlLnBhcnNlVUxvbmdMaXN0LFEuc3RydWN0PVEucHJvdG90eXBlLnBhcnNlU3RydWN0LFEuY292ZXJhZ2U9US5wcm90b3R5cGUucGFyc2VDb3ZlcmFnZSxRLmNsYXNzRGVmPVEucHJvdG90eXBlLnBhcnNlQ2xhc3NEZWY7dmFyIEtlPXtyZXNlcnZlZDpRLnVTaG9ydCxyZXFGZWF0dXJlSW5kZXg6US51U2hvcnQsZmVhdHVyZUluZGV4ZXM6US51U2hvcnRMaXN0fTtRLnByb3RvdHlwZS5wYXJzZVNjcmlwdExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoUS5yZWNvcmRMaXN0KHt0YWc6US50YWcsc2NyaXB0OlEucG9pbnRlcih7ZGVmYXVsdExhbmdTeXM6US5wb2ludGVyKEtlKSxsYW5nU3lzUmVjb3JkczpRLnJlY29yZExpc3Qoe3RhZzpRLnRhZyxsYW5nU3lzOlEucG9pbnRlcihLZSl9KX0pfSkpfHxbXX0sUS5wcm90b3R5cGUucGFyc2VGZWF0dXJlTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcihRLnJlY29yZExpc3Qoe3RhZzpRLnRhZyxmZWF0dXJlOlEucG9pbnRlcih7ZmVhdHVyZVBhcmFtczpRLm9mZnNldDE2LGxvb2t1cExpc3RJbmRleGVzOlEudVNob3J0TGlzdH0pfSkpfHxbXX0sUS5wcm90b3R5cGUucGFyc2VMb29rdXBMaXN0PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcihRLmxpc3QoUS5wb2ludGVyKGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wYXJzZVVTaG9ydCgpO3hlLmFyZ3VtZW50KDE8PWImJmI8PTksXCJHUE9TL0dTVUIgbG9va3VwIHR5cGUgXCIrYitcIiB1bmtub3duLlwiKTt2YXIgYz10aGlzLnBhcnNlVVNob3J0KCksZD0xNiZjO3JldHVybntsb29rdXBUeXBlOmIsbG9va3VwRmxhZzpjLHN1YnRhYmxlczp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoYVtiXSkpLG1hcmtGaWx0ZXJpbmdTZXQ6ZD90aGlzLnBhcnNlVVNob3J0KCk6dm9pZCAwfX0pKSl8fFtdfSxRLnByb3RvdHlwZS5wYXJzZUZlYXR1cmVWYXJpYXRpb25zTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcjMyKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpLGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSYmYjwxLFwiR1BPUy9HU1VCIGZlYXR1cmUgdmFyaWF0aW9ucyB0YWJsZSB1bmtub3duLlwiKSx0aGlzLnBhcnNlUmVjb3JkTGlzdDMyKHtjb25kaXRpb25TZXRPZmZzZXQ6US5vZmZzZXQzMixmZWF0dXJlVGFibGVTdWJzdGl0dXRpb25PZmZzZXQ6US5vZmZzZXQzMn0pfSl8fFtdfTt2YXIgTGU9e2dldEJ5dGU6SCxnZXRDYXJkODpILGdldFVTaG9ydDpJLGdldENhcmQxNjpJLGdldFNob3J0OkosZ2V0VUxvbmc6SyxnZXRGaXhlZDpMLGdldFRhZzpNLGdldE9mZnNldDpOLGdldEJ5dGVzOk8sYnl0ZXNUb1N0cmluZzpQLFBhcnNlcjpRfSxNZT17cGFyc2U6VCxtYWtlOld9LE5lPVtcIi5ub3RkZWZcIixcInNwYWNlXCIsXCJleGNsYW1cIixcInF1b3RlZGJsXCIsXCJudW1iZXJzaWduXCIsXCJkb2xsYXJcIixcInBlcmNlbnRcIixcImFtcGVyc2FuZFwiLFwicXVvdGVyaWdodFwiLFwicGFyZW5sZWZ0XCIsXCJwYXJlbnJpZ2h0XCIsXCJhc3Rlcmlza1wiLFwicGx1c1wiLFwiY29tbWFcIixcImh5cGhlblwiLFwicGVyaW9kXCIsXCJzbGFzaFwiLFwiemVyb1wiLFwib25lXCIsXCJ0d29cIixcInRocmVlXCIsXCJmb3VyXCIsXCJmaXZlXCIsXCJzaXhcIixcInNldmVuXCIsXCJlaWdodFwiLFwibmluZVwiLFwiY29sb25cIixcInNlbWljb2xvblwiLFwibGVzc1wiLFwiZXF1YWxcIixcImdyZWF0ZXJcIixcInF1ZXN0aW9uXCIsXCJhdFwiLFwiQVwiLFwiQlwiLFwiQ1wiLFwiRFwiLFwiRVwiLFwiRlwiLFwiR1wiLFwiSFwiLFwiSVwiLFwiSlwiLFwiS1wiLFwiTFwiLFwiTVwiLFwiTlwiLFwiT1wiLFwiUFwiLFwiUVwiLFwiUlwiLFwiU1wiLFwiVFwiLFwiVVwiLFwiVlwiLFwiV1wiLFwiWFwiLFwiWVwiLFwiWlwiLFwiYnJhY2tldGxlZnRcIixcImJhY2tzbGFzaFwiLFwiYnJhY2tldHJpZ2h0XCIsXCJhc2NpaWNpcmN1bVwiLFwidW5kZXJzY29yZVwiLFwicXVvdGVsZWZ0XCIsXCJhXCIsXCJiXCIsXCJjXCIsXCJkXCIsXCJlXCIsXCJmXCIsXCJnXCIsXCJoXCIsXCJpXCIsXCJqXCIsXCJrXCIsXCJsXCIsXCJtXCIsXCJuXCIsXCJvXCIsXCJwXCIsXCJxXCIsXCJyXCIsXCJzXCIsXCJ0XCIsXCJ1XCIsXCJ2XCIsXCJ3XCIsXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJicmFjZWxlZnRcIixcImJhclwiLFwiYnJhY2VyaWdodFwiLFwiYXNjaWl0aWxkZVwiLFwiZXhjbGFtZG93blwiLFwiY2VudFwiLFwic3RlcmxpbmdcIixcImZyYWN0aW9uXCIsXCJ5ZW5cIixcImZsb3JpblwiLFwic2VjdGlvblwiLFwiY3VycmVuY3lcIixcInF1b3Rlc2luZ2xlXCIsXCJxdW90ZWRibGxlZnRcIixcImd1aWxsZW1vdGxlZnRcIixcImd1aWxzaW5nbGxlZnRcIixcImd1aWxzaW5nbHJpZ2h0XCIsXCJmaVwiLFwiZmxcIixcImVuZGFzaFwiLFwiZGFnZ2VyXCIsXCJkYWdnZXJkYmxcIixcInBlcmlvZGNlbnRlcmVkXCIsXCJwYXJhZ3JhcGhcIixcImJ1bGxldFwiLFwicXVvdGVzaW5nbGJhc2VcIixcInF1b3RlZGJsYmFzZVwiLFwicXVvdGVkYmxyaWdodFwiLFwiZ3VpbGxlbW90cmlnaHRcIixcImVsbGlwc2lzXCIsXCJwZXJ0aG91c2FuZFwiLFwicXVlc3Rpb25kb3duXCIsXCJncmF2ZVwiLFwiYWN1dGVcIixcImNpcmN1bWZsZXhcIixcInRpbGRlXCIsXCJtYWNyb25cIixcImJyZXZlXCIsXCJkb3RhY2NlbnRcIixcImRpZXJlc2lzXCIsXCJyaW5nXCIsXCJjZWRpbGxhXCIsXCJodW5nYXJ1bWxhdXRcIixcIm9nb25la1wiLFwiY2Fyb25cIixcImVtZGFzaFwiLFwiQUVcIixcIm9yZGZlbWluaW5lXCIsXCJMc2xhc2hcIixcIk9zbGFzaFwiLFwiT0VcIixcIm9yZG1hc2N1bGluZVwiLFwiYWVcIixcImRvdGxlc3NpXCIsXCJsc2xhc2hcIixcIm9zbGFzaFwiLFwib2VcIixcImdlcm1hbmRibHNcIixcIm9uZXN1cGVyaW9yXCIsXCJsb2dpY2Fsbm90XCIsXCJtdVwiLFwidHJhZGVtYXJrXCIsXCJFdGhcIixcIm9uZWhhbGZcIixcInBsdXNtaW51c1wiLFwiVGhvcm5cIixcIm9uZXF1YXJ0ZXJcIixcImRpdmlkZVwiLFwiYnJva2VuYmFyXCIsXCJkZWdyZWVcIixcInRob3JuXCIsXCJ0aHJlZXF1YXJ0ZXJzXCIsXCJ0d29zdXBlcmlvclwiLFwicmVnaXN0ZXJlZFwiLFwibWludXNcIixcImV0aFwiLFwibXVsdGlwbHlcIixcInRocmVlc3VwZXJpb3JcIixcImNvcHlyaWdodFwiLFwiQWFjdXRlXCIsXCJBY2lyY3VtZmxleFwiLFwiQWRpZXJlc2lzXCIsXCJBZ3JhdmVcIixcIkFyaW5nXCIsXCJBdGlsZGVcIixcIkNjZWRpbGxhXCIsXCJFYWN1dGVcIixcIkVjaXJjdW1mbGV4XCIsXCJFZGllcmVzaXNcIixcIkVncmF2ZVwiLFwiSWFjdXRlXCIsXCJJY2lyY3VtZmxleFwiLFwiSWRpZXJlc2lzXCIsXCJJZ3JhdmVcIixcIk50aWxkZVwiLFwiT2FjdXRlXCIsXCJPY2lyY3VtZmxleFwiLFwiT2RpZXJlc2lzXCIsXCJPZ3JhdmVcIixcIk90aWxkZVwiLFwiU2Nhcm9uXCIsXCJVYWN1dGVcIixcIlVjaXJjdW1mbGV4XCIsXCJVZGllcmVzaXNcIixcIlVncmF2ZVwiLFwiWWFjdXRlXCIsXCJZZGllcmVzaXNcIixcIlpjYXJvblwiLFwiYWFjdXRlXCIsXCJhY2lyY3VtZmxleFwiLFwiYWRpZXJlc2lzXCIsXCJhZ3JhdmVcIixcImFyaW5nXCIsXCJhdGlsZGVcIixcImNjZWRpbGxhXCIsXCJlYWN1dGVcIixcImVjaXJjdW1mbGV4XCIsXCJlZGllcmVzaXNcIixcImVncmF2ZVwiLFwiaWFjdXRlXCIsXCJpY2lyY3VtZmxleFwiLFwiaWRpZXJlc2lzXCIsXCJpZ3JhdmVcIixcIm50aWxkZVwiLFwib2FjdXRlXCIsXCJvY2lyY3VtZmxleFwiLFwib2RpZXJlc2lzXCIsXCJvZ3JhdmVcIixcIm90aWxkZVwiLFwic2Nhcm9uXCIsXCJ1YWN1dGVcIixcInVjaXJjdW1mbGV4XCIsXCJ1ZGllcmVzaXNcIixcInVncmF2ZVwiLFwieWFjdXRlXCIsXCJ5ZGllcmVzaXNcIixcInpjYXJvblwiLFwiZXhjbGFtc21hbGxcIixcIkh1bmdhcnVtbGF1dHNtYWxsXCIsXCJkb2xsYXJvbGRzdHlsZVwiLFwiZG9sbGFyc3VwZXJpb3JcIixcImFtcGVyc2FuZHNtYWxsXCIsXCJBY3V0ZXNtYWxsXCIsXCJwYXJlbmxlZnRzdXBlcmlvclwiLFwicGFyZW5yaWdodHN1cGVyaW9yXCIsXCIyNjYgZmZcIixcIm9uZWRvdGVubGVhZGVyXCIsXCJ6ZXJvb2xkc3R5bGVcIixcIm9uZW9sZHN0eWxlXCIsXCJ0d29vbGRzdHlsZVwiLFwidGhyZWVvbGRzdHlsZVwiLFwiZm91cm9sZHN0eWxlXCIsXCJmaXZlb2xkc3R5bGVcIixcInNpeG9sZHN0eWxlXCIsXCJzZXZlbm9sZHN0eWxlXCIsXCJlaWdodG9sZHN0eWxlXCIsXCJuaW5lb2xkc3R5bGVcIixcImNvbW1hc3VwZXJpb3JcIixcInRocmVlcXVhcnRlcnNlbWRhc2hcIixcInBlcmlvZHN1cGVyaW9yXCIsXCJxdWVzdGlvbnNtYWxsXCIsXCJhc3VwZXJpb3JcIixcImJzdXBlcmlvclwiLFwiY2VudHN1cGVyaW9yXCIsXCJkc3VwZXJpb3JcIixcImVzdXBlcmlvclwiLFwiaXN1cGVyaW9yXCIsXCJsc3VwZXJpb3JcIixcIm1zdXBlcmlvclwiLFwibnN1cGVyaW9yXCIsXCJvc3VwZXJpb3JcIixcInJzdXBlcmlvclwiLFwic3N1cGVyaW9yXCIsXCJ0c3VwZXJpb3JcIixcImZmXCIsXCJmZmlcIixcImZmbFwiLFwicGFyZW5sZWZ0aW5mZXJpb3JcIixcInBhcmVucmlnaHRpbmZlcmlvclwiLFwiQ2lyY3VtZmxleHNtYWxsXCIsXCJoeXBoZW5zdXBlcmlvclwiLFwiR3JhdmVzbWFsbFwiLFwiQXNtYWxsXCIsXCJCc21hbGxcIixcIkNzbWFsbFwiLFwiRHNtYWxsXCIsXCJFc21hbGxcIixcIkZzbWFsbFwiLFwiR3NtYWxsXCIsXCJIc21hbGxcIixcIklzbWFsbFwiLFwiSnNtYWxsXCIsXCJLc21hbGxcIixcIkxzbWFsbFwiLFwiTXNtYWxsXCIsXCJOc21hbGxcIixcIk9zbWFsbFwiLFwiUHNtYWxsXCIsXCJRc21hbGxcIixcIlJzbWFsbFwiLFwiU3NtYWxsXCIsXCJUc21hbGxcIixcIlVzbWFsbFwiLFwiVnNtYWxsXCIsXCJXc21hbGxcIixcIlhzbWFsbFwiLFwiWXNtYWxsXCIsXCJac21hbGxcIixcImNvbG9ubW9uZXRhcnlcIixcIm9uZWZpdHRlZFwiLFwicnVwaWFoXCIsXCJUaWxkZXNtYWxsXCIsXCJleGNsYW1kb3duc21hbGxcIixcImNlbnRvbGRzdHlsZVwiLFwiTHNsYXNoc21hbGxcIixcIlNjYXJvbnNtYWxsXCIsXCJaY2Fyb25zbWFsbFwiLFwiRGllcmVzaXNzbWFsbFwiLFwiQnJldmVzbWFsbFwiLFwiQ2Fyb25zbWFsbFwiLFwiRG90YWNjZW50c21hbGxcIixcIk1hY3JvbnNtYWxsXCIsXCJmaWd1cmVkYXNoXCIsXCJoeXBoZW5pbmZlcmlvclwiLFwiT2dvbmVrc21hbGxcIixcIlJpbmdzbWFsbFwiLFwiQ2VkaWxsYXNtYWxsXCIsXCJxdWVzdGlvbmRvd25zbWFsbFwiLFwib25lZWlnaHRoXCIsXCJ0aHJlZWVpZ2h0aHNcIixcImZpdmVlaWdodGhzXCIsXCJzZXZlbmVpZ2h0aHNcIixcIm9uZXRoaXJkXCIsXCJ0d290aGlyZHNcIixcInplcm9zdXBlcmlvclwiLFwiZm91cnN1cGVyaW9yXCIsXCJmaXZlc3VwZXJpb3JcIixcInNpeHN1cGVyaW9yXCIsXCJzZXZlbnN1cGVyaW9yXCIsXCJlaWdodHN1cGVyaW9yXCIsXCJuaW5lc3VwZXJpb3JcIixcInplcm9pbmZlcmlvclwiLFwib25laW5mZXJpb3JcIixcInR3b2luZmVyaW9yXCIsXCJ0aHJlZWluZmVyaW9yXCIsXCJmb3VyaW5mZXJpb3JcIixcImZpdmVpbmZlcmlvclwiLFwic2l4aW5mZXJpb3JcIixcInNldmVuaW5mZXJpb3JcIixcImVpZ2h0aW5mZXJpb3JcIixcIm5pbmVpbmZlcmlvclwiLFwiY2VudGluZmVyaW9yXCIsXCJkb2xsYXJpbmZlcmlvclwiLFwicGVyaW9kaW5mZXJpb3JcIixcImNvbW1haW5mZXJpb3JcIixcIkFncmF2ZXNtYWxsXCIsXCJBYWN1dGVzbWFsbFwiLFwiQWNpcmN1bWZsZXhzbWFsbFwiLFwiQXRpbGRlc21hbGxcIixcIkFkaWVyZXNpc3NtYWxsXCIsXCJBcmluZ3NtYWxsXCIsXCJBRXNtYWxsXCIsXCJDY2VkaWxsYXNtYWxsXCIsXCJFZ3JhdmVzbWFsbFwiLFwiRWFjdXRlc21hbGxcIixcIkVjaXJjdW1mbGV4c21hbGxcIixcIkVkaWVyZXNpc3NtYWxsXCIsXCJJZ3JhdmVzbWFsbFwiLFwiSWFjdXRlc21hbGxcIixcIkljaXJjdW1mbGV4c21hbGxcIixcIklkaWVyZXNpc3NtYWxsXCIsXCJFdGhzbWFsbFwiLFwiTnRpbGRlc21hbGxcIixcIk9ncmF2ZXNtYWxsXCIsXCJPYWN1dGVzbWFsbFwiLFwiT2NpcmN1bWZsZXhzbWFsbFwiLFwiT3RpbGRlc21hbGxcIixcIk9kaWVyZXNpc3NtYWxsXCIsXCJPRXNtYWxsXCIsXCJPc2xhc2hzbWFsbFwiLFwiVWdyYXZlc21hbGxcIixcIlVhY3V0ZXNtYWxsXCIsXCJVY2lyY3VtZmxleHNtYWxsXCIsXCJVZGllcmVzaXNzbWFsbFwiLFwiWWFjdXRlc21hbGxcIixcIlRob3Juc21hbGxcIixcIllkaWVyZXNpc3NtYWxsXCIsXCIwMDEuMDAwXCIsXCIwMDEuMDAxXCIsXCIwMDEuMDAyXCIsXCIwMDEuMDAzXCIsXCJCbGFja1wiLFwiQm9sZFwiLFwiQm9va1wiLFwiTGlnaHRcIixcIk1lZGl1bVwiLFwiUmVndWxhclwiLFwiUm9tYW5cIixcIlNlbWlib2xkXCJdLE9lPVtcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJzcGFjZVwiLFwiZXhjbGFtXCIsXCJxdW90ZWRibFwiLFwibnVtYmVyc2lnblwiLFwiZG9sbGFyXCIsXCJwZXJjZW50XCIsXCJhbXBlcnNhbmRcIixcInF1b3RlcmlnaHRcIixcInBhcmVubGVmdFwiLFwicGFyZW5yaWdodFwiLFwiYXN0ZXJpc2tcIixcInBsdXNcIixcImNvbW1hXCIsXCJoeXBoZW5cIixcInBlcmlvZFwiLFwic2xhc2hcIixcInplcm9cIixcIm9uZVwiLFwidHdvXCIsXCJ0aHJlZVwiLFwiZm91clwiLFwiZml2ZVwiLFwic2l4XCIsXCJzZXZlblwiLFwiZWlnaHRcIixcIm5pbmVcIixcImNvbG9uXCIsXCJzZW1pY29sb25cIixcImxlc3NcIixcImVxdWFsXCIsXCJncmVhdGVyXCIsXCJxdWVzdGlvblwiLFwiYXRcIixcIkFcIixcIkJcIixcIkNcIixcIkRcIixcIkVcIixcIkZcIixcIkdcIixcIkhcIixcIklcIixcIkpcIixcIktcIixcIkxcIixcIk1cIixcIk5cIixcIk9cIixcIlBcIixcIlFcIixcIlJcIixcIlNcIixcIlRcIixcIlVcIixcIlZcIixcIldcIixcIlhcIixcIllcIixcIlpcIixcImJyYWNrZXRsZWZ0XCIsXCJiYWNrc2xhc2hcIixcImJyYWNrZXRyaWdodFwiLFwiYXNjaWljaXJjdW1cIixcInVuZGVyc2NvcmVcIixcInF1b3RlbGVmdFwiLFwiYVwiLFwiYlwiLFwiY1wiLFwiZFwiLFwiZVwiLFwiZlwiLFwiZ1wiLFwiaFwiLFwiaVwiLFwialwiLFwia1wiLFwibFwiLFwibVwiLFwiblwiLFwib1wiLFwicFwiLFwicVwiLFwiclwiLFwic1wiLFwidFwiLFwidVwiLFwidlwiLFwid1wiLFwieFwiLFwieVwiLFwielwiLFwiYnJhY2VsZWZ0XCIsXCJiYXJcIixcImJyYWNlcmlnaHRcIixcImFzY2lpdGlsZGVcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiZXhjbGFtZG93blwiLFwiY2VudFwiLFwic3RlcmxpbmdcIixcImZyYWN0aW9uXCIsXCJ5ZW5cIixcImZsb3JpblwiLFwic2VjdGlvblwiLFwiY3VycmVuY3lcIixcInF1b3Rlc2luZ2xlXCIsXCJxdW90ZWRibGxlZnRcIixcImd1aWxsZW1vdGxlZnRcIixcImd1aWxzaW5nbGxlZnRcIixcImd1aWxzaW5nbHJpZ2h0XCIsXCJmaVwiLFwiZmxcIixcIlwiLFwiZW5kYXNoXCIsXCJkYWdnZXJcIixcImRhZ2dlcmRibFwiLFwicGVyaW9kY2VudGVyZWRcIixcIlwiLFwicGFyYWdyYXBoXCIsXCJidWxsZXRcIixcInF1b3Rlc2luZ2xiYXNlXCIsXCJxdW90ZWRibGJhc2VcIixcInF1b3RlZGJscmlnaHRcIixcImd1aWxsZW1vdHJpZ2h0XCIsXCJlbGxpcHNpc1wiLFwicGVydGhvdXNhbmRcIixcIlwiLFwicXVlc3Rpb25kb3duXCIsXCJcIixcImdyYXZlXCIsXCJhY3V0ZVwiLFwiY2lyY3VtZmxleFwiLFwidGlsZGVcIixcIm1hY3JvblwiLFwiYnJldmVcIixcImRvdGFjY2VudFwiLFwiZGllcmVzaXNcIixcIlwiLFwicmluZ1wiLFwiY2VkaWxsYVwiLFwiXCIsXCJodW5nYXJ1bWxhdXRcIixcIm9nb25la1wiLFwiY2Fyb25cIixcImVtZGFzaFwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJBRVwiLFwiXCIsXCJvcmRmZW1pbmluZVwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJMc2xhc2hcIixcIk9zbGFzaFwiLFwiT0VcIixcIm9yZG1hc2N1bGluZVwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcImFlXCIsXCJcIixcIlwiLFwiXCIsXCJkb3RsZXNzaVwiLFwiXCIsXCJcIixcImxzbGFzaFwiLFwib3NsYXNoXCIsXCJvZVwiLFwiZ2VybWFuZGJsc1wiXSxQZT1bXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwic3BhY2VcIixcImV4Y2xhbXNtYWxsXCIsXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLFwiXCIsXCJkb2xsYXJvbGRzdHlsZVwiLFwiZG9sbGFyc3VwZXJpb3JcIixcImFtcGVyc2FuZHNtYWxsXCIsXCJBY3V0ZXNtYWxsXCIsXCJwYXJlbmxlZnRzdXBlcmlvclwiLFwicGFyZW5yaWdodHN1cGVyaW9yXCIsXCJ0d29kb3RlbmxlYWRlclwiLFwib25lZG90ZW5sZWFkZXJcIixcImNvbW1hXCIsXCJoeXBoZW5cIixcInBlcmlvZFwiLFwiZnJhY3Rpb25cIixcInplcm9vbGRzdHlsZVwiLFwib25lb2xkc3R5bGVcIixcInR3b29sZHN0eWxlXCIsXCJ0aHJlZW9sZHN0eWxlXCIsXCJmb3Vyb2xkc3R5bGVcIixcImZpdmVvbGRzdHlsZVwiLFwic2l4b2xkc3R5bGVcIixcInNldmVub2xkc3R5bGVcIixcImVpZ2h0b2xkc3R5bGVcIixcIm5pbmVvbGRzdHlsZVwiLFwiY29sb25cIixcInNlbWljb2xvblwiLFwiY29tbWFzdXBlcmlvclwiLFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLFwicGVyaW9kc3VwZXJpb3JcIixcInF1ZXN0aW9uc21hbGxcIixcIlwiLFwiYXN1cGVyaW9yXCIsXCJic3VwZXJpb3JcIixcImNlbnRzdXBlcmlvclwiLFwiZHN1cGVyaW9yXCIsXCJlc3VwZXJpb3JcIixcIlwiLFwiXCIsXCJpc3VwZXJpb3JcIixcIlwiLFwiXCIsXCJsc3VwZXJpb3JcIixcIm1zdXBlcmlvclwiLFwibnN1cGVyaW9yXCIsXCJvc3VwZXJpb3JcIixcIlwiLFwiXCIsXCJyc3VwZXJpb3JcIixcInNzdXBlcmlvclwiLFwidHN1cGVyaW9yXCIsXCJcIixcImZmXCIsXCJmaVwiLFwiZmxcIixcImZmaVwiLFwiZmZsXCIsXCJwYXJlbmxlZnRpbmZlcmlvclwiLFwiXCIsXCJwYXJlbnJpZ2h0aW5mZXJpb3JcIixcIkNpcmN1bWZsZXhzbWFsbFwiLFwiaHlwaGVuc3VwZXJpb3JcIixcIkdyYXZlc21hbGxcIixcIkFzbWFsbFwiLFwiQnNtYWxsXCIsXCJDc21hbGxcIixcIkRzbWFsbFwiLFwiRXNtYWxsXCIsXCJGc21hbGxcIixcIkdzbWFsbFwiLFwiSHNtYWxsXCIsXCJJc21hbGxcIixcIkpzbWFsbFwiLFwiS3NtYWxsXCIsXCJMc21hbGxcIixcIk1zbWFsbFwiLFwiTnNtYWxsXCIsXCJPc21hbGxcIixcIlBzbWFsbFwiLFwiUXNtYWxsXCIsXCJSc21hbGxcIixcIlNzbWFsbFwiLFwiVHNtYWxsXCIsXCJVc21hbGxcIixcIlZzbWFsbFwiLFwiV3NtYWxsXCIsXCJYc21hbGxcIixcIllzbWFsbFwiLFwiWnNtYWxsXCIsXCJjb2xvbm1vbmV0YXJ5XCIsXCJvbmVmaXR0ZWRcIixcInJ1cGlhaFwiLFwiVGlsZGVzbWFsbFwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJleGNsYW1kb3duc21hbGxcIixcImNlbnRvbGRzdHlsZVwiLFwiTHNsYXNoc21hbGxcIixcIlwiLFwiXCIsXCJTY2Fyb25zbWFsbFwiLFwiWmNhcm9uc21hbGxcIixcIkRpZXJlc2lzc21hbGxcIixcIkJyZXZlc21hbGxcIixcIkNhcm9uc21hbGxcIixcIlwiLFwiRG90YWNjZW50c21hbGxcIixcIlwiLFwiXCIsXCJNYWNyb25zbWFsbFwiLFwiXCIsXCJcIixcImZpZ3VyZWRhc2hcIixcImh5cGhlbmluZmVyaW9yXCIsXCJcIixcIlwiLFwiT2dvbmVrc21hbGxcIixcIlJpbmdzbWFsbFwiLFwiQ2VkaWxsYXNtYWxsXCIsXCJcIixcIlwiLFwiXCIsXCJvbmVxdWFydGVyXCIsXCJvbmVoYWxmXCIsXCJ0aHJlZXF1YXJ0ZXJzXCIsXCJxdWVzdGlvbmRvd25zbWFsbFwiLFwib25lZWlnaHRoXCIsXCJ0aHJlZWVpZ2h0aHNcIixcImZpdmVlaWdodGhzXCIsXCJzZXZlbmVpZ2h0aHNcIixcIm9uZXRoaXJkXCIsXCJ0d290aGlyZHNcIixcIlwiLFwiXCIsXCJ6ZXJvc3VwZXJpb3JcIixcIm9uZXN1cGVyaW9yXCIsXCJ0d29zdXBlcmlvclwiLFwidGhyZWVzdXBlcmlvclwiLFwiZm91cnN1cGVyaW9yXCIsXCJmaXZlc3VwZXJpb3JcIixcInNpeHN1cGVyaW9yXCIsXCJzZXZlbnN1cGVyaW9yXCIsXCJlaWdodHN1cGVyaW9yXCIsXCJuaW5lc3VwZXJpb3JcIixcInplcm9pbmZlcmlvclwiLFwib25laW5mZXJpb3JcIixcInR3b2luZmVyaW9yXCIsXCJ0aHJlZWluZmVyaW9yXCIsXCJmb3VyaW5mZXJpb3JcIixcImZpdmVpbmZlcmlvclwiLFwic2l4aW5mZXJpb3JcIixcInNldmVuaW5mZXJpb3JcIixcImVpZ2h0aW5mZXJpb3JcIixcIm5pbmVpbmZlcmlvclwiLFwiY2VudGluZmVyaW9yXCIsXCJkb2xsYXJpbmZlcmlvclwiLFwicGVyaW9kaW5mZXJpb3JcIixcImNvbW1haW5mZXJpb3JcIixcIkFncmF2ZXNtYWxsXCIsXCJBYWN1dGVzbWFsbFwiLFwiQWNpcmN1bWZsZXhzbWFsbFwiLFwiQXRpbGRlc21hbGxcIixcIkFkaWVyZXNpc3NtYWxsXCIsXCJBcmluZ3NtYWxsXCIsXCJBRXNtYWxsXCIsXCJDY2VkaWxsYXNtYWxsXCIsXCJFZ3JhdmVzbWFsbFwiLFwiRWFjdXRlc21hbGxcIixcIkVjaXJjdW1mbGV4c21hbGxcIixcIkVkaWVyZXNpc3NtYWxsXCIsXCJJZ3JhdmVzbWFsbFwiLFwiSWFjdXRlc21hbGxcIixcIkljaXJjdW1mbGV4c21hbGxcIixcIklkaWVyZXNpc3NtYWxsXCIsXCJFdGhzbWFsbFwiLFwiTnRpbGRlc21hbGxcIixcIk9ncmF2ZXNtYWxsXCIsXCJPYWN1dGVzbWFsbFwiLFwiT2NpcmN1bWZsZXhzbWFsbFwiLFwiT3RpbGRlc21hbGxcIixcIk9kaWVyZXNpc3NtYWxsXCIsXCJPRXNtYWxsXCIsXCJPc2xhc2hzbWFsbFwiLFwiVWdyYXZlc21hbGxcIixcIlVhY3V0ZXNtYWxsXCIsXCJVY2lyY3VtZmxleHNtYWxsXCIsXCJVZGllcmVzaXNzbWFsbFwiLFwiWWFjdXRlc21hbGxcIixcIlRob3Juc21hbGxcIixcIllkaWVyZXNpc3NtYWxsXCJdLFFlPVtcIi5ub3RkZWZcIixcIi5udWxsXCIsXCJub25tYXJraW5ncmV0dXJuXCIsXCJzcGFjZVwiLFwiZXhjbGFtXCIsXCJxdW90ZWRibFwiLFwibnVtYmVyc2lnblwiLFwiZG9sbGFyXCIsXCJwZXJjZW50XCIsXCJhbXBlcnNhbmRcIixcInF1b3Rlc2luZ2xlXCIsXCJwYXJlbmxlZnRcIixcInBhcmVucmlnaHRcIixcImFzdGVyaXNrXCIsXCJwbHVzXCIsXCJjb21tYVwiLFwiaHlwaGVuXCIsXCJwZXJpb2RcIixcInNsYXNoXCIsXCJ6ZXJvXCIsXCJvbmVcIixcInR3b1wiLFwidGhyZWVcIixcImZvdXJcIixcImZpdmVcIixcInNpeFwiLFwic2V2ZW5cIixcImVpZ2h0XCIsXCJuaW5lXCIsXCJjb2xvblwiLFwic2VtaWNvbG9uXCIsXCJsZXNzXCIsXCJlcXVhbFwiLFwiZ3JlYXRlclwiLFwicXVlc3Rpb25cIixcImF0XCIsXCJBXCIsXCJCXCIsXCJDXCIsXCJEXCIsXCJFXCIsXCJGXCIsXCJHXCIsXCJIXCIsXCJJXCIsXCJKXCIsXCJLXCIsXCJMXCIsXCJNXCIsXCJOXCIsXCJPXCIsXCJQXCIsXCJRXCIsXCJSXCIsXCJTXCIsXCJUXCIsXCJVXCIsXCJWXCIsXCJXXCIsXCJYXCIsXCJZXCIsXCJaXCIsXCJicmFja2V0bGVmdFwiLFwiYmFja3NsYXNoXCIsXCJicmFja2V0cmlnaHRcIixcImFzY2lpY2lyY3VtXCIsXCJ1bmRlcnNjb3JlXCIsXCJncmF2ZVwiLFwiYVwiLFwiYlwiLFwiY1wiLFwiZFwiLFwiZVwiLFwiZlwiLFwiZ1wiLFwiaFwiLFwiaVwiLFwialwiLFwia1wiLFwibFwiLFwibVwiLFwiblwiLFwib1wiLFwicFwiLFwicVwiLFwiclwiLFwic1wiLFwidFwiLFwidVwiLFwidlwiLFwid1wiLFwieFwiLFwieVwiLFwielwiLFwiYnJhY2VsZWZ0XCIsXCJiYXJcIixcImJyYWNlcmlnaHRcIixcImFzY2lpdGlsZGVcIixcIkFkaWVyZXNpc1wiLFwiQXJpbmdcIixcIkNjZWRpbGxhXCIsXCJFYWN1dGVcIixcIk50aWxkZVwiLFwiT2RpZXJlc2lzXCIsXCJVZGllcmVzaXNcIixcImFhY3V0ZVwiLFwiYWdyYXZlXCIsXCJhY2lyY3VtZmxleFwiLFwiYWRpZXJlc2lzXCIsXCJhdGlsZGVcIixcImFyaW5nXCIsXCJjY2VkaWxsYVwiLFwiZWFjdXRlXCIsXCJlZ3JhdmVcIixcImVjaXJjdW1mbGV4XCIsXCJlZGllcmVzaXNcIixcImlhY3V0ZVwiLFwiaWdyYXZlXCIsXCJpY2lyY3VtZmxleFwiLFwiaWRpZXJlc2lzXCIsXCJudGlsZGVcIixcIm9hY3V0ZVwiLFwib2dyYXZlXCIsXCJvY2lyY3VtZmxleFwiLFwib2RpZXJlc2lzXCIsXCJvdGlsZGVcIixcInVhY3V0ZVwiLFwidWdyYXZlXCIsXCJ1Y2lyY3VtZmxleFwiLFwidWRpZXJlc2lzXCIsXCJkYWdnZXJcIixcImRlZ3JlZVwiLFwiY2VudFwiLFwic3RlcmxpbmdcIixcInNlY3Rpb25cIixcImJ1bGxldFwiLFwicGFyYWdyYXBoXCIsXCJnZXJtYW5kYmxzXCIsXCJyZWdpc3RlcmVkXCIsXCJjb3B5cmlnaHRcIixcInRyYWRlbWFya1wiLFwiYWN1dGVcIixcImRpZXJlc2lzXCIsXCJub3RlcXVhbFwiLFwiQUVcIixcIk9zbGFzaFwiLFwiaW5maW5pdHlcIixcInBsdXNtaW51c1wiLFwibGVzc2VxdWFsXCIsXCJncmVhdGVyZXF1YWxcIixcInllblwiLFwibXVcIixcInBhcnRpYWxkaWZmXCIsXCJzdW1tYXRpb25cIixcInByb2R1Y3RcIixcInBpXCIsXCJpbnRlZ3JhbFwiLFwib3JkZmVtaW5pbmVcIixcIm9yZG1hc2N1bGluZVwiLFwiT21lZ2FcIixcImFlXCIsXCJvc2xhc2hcIixcInF1ZXN0aW9uZG93blwiLFwiZXhjbGFtZG93blwiLFwibG9naWNhbG5vdFwiLFwicmFkaWNhbFwiLFwiZmxvcmluXCIsXCJhcHByb3hlcXVhbFwiLFwiRGVsdGFcIixcImd1aWxsZW1vdGxlZnRcIixcImd1aWxsZW1vdHJpZ2h0XCIsXCJlbGxpcHNpc1wiLFwibm9uYnJlYWtpbmdzcGFjZVwiLFwiQWdyYXZlXCIsXCJBdGlsZGVcIixcIk90aWxkZVwiLFwiT0VcIixcIm9lXCIsXCJlbmRhc2hcIixcImVtZGFzaFwiLFwicXVvdGVkYmxsZWZ0XCIsXCJxdW90ZWRibHJpZ2h0XCIsXCJxdW90ZWxlZnRcIixcInF1b3RlcmlnaHRcIixcImRpdmlkZVwiLFwibG96ZW5nZVwiLFwieWRpZXJlc2lzXCIsXCJZZGllcmVzaXNcIixcImZyYWN0aW9uXCIsXCJjdXJyZW5jeVwiLFwiZ3VpbHNpbmdsbGVmdFwiLFwiZ3VpbHNpbmdscmlnaHRcIixcImZpXCIsXCJmbFwiLFwiZGFnZ2VyZGJsXCIsXCJwZXJpb2RjZW50ZXJlZFwiLFwicXVvdGVzaW5nbGJhc2VcIixcInF1b3RlZGJsYmFzZVwiLFwicGVydGhvdXNhbmRcIixcIkFjaXJjdW1mbGV4XCIsXCJFY2lyY3VtZmxleFwiLFwiQWFjdXRlXCIsXCJFZGllcmVzaXNcIixcIkVncmF2ZVwiLFwiSWFjdXRlXCIsXCJJY2lyY3VtZmxleFwiLFwiSWRpZXJlc2lzXCIsXCJJZ3JhdmVcIixcIk9hY3V0ZVwiLFwiT2NpcmN1bWZsZXhcIixcImFwcGxlXCIsXCJPZ3JhdmVcIixcIlVhY3V0ZVwiLFwiVWNpcmN1bWZsZXhcIixcIlVncmF2ZVwiLFwiZG90bGVzc2lcIixcImNpcmN1bWZsZXhcIixcInRpbGRlXCIsXCJtYWNyb25cIixcImJyZXZlXCIsXCJkb3RhY2NlbnRcIixcInJpbmdcIixcImNlZGlsbGFcIixcImh1bmdhcnVtbGF1dFwiLFwib2dvbmVrXCIsXCJjYXJvblwiLFwiTHNsYXNoXCIsXCJsc2xhc2hcIixcIlNjYXJvblwiLFwic2Nhcm9uXCIsXCJaY2Fyb25cIixcInpjYXJvblwiLFwiYnJva2VuYmFyXCIsXCJFdGhcIixcImV0aFwiLFwiWWFjdXRlXCIsXCJ5YWN1dGVcIixcIlRob3JuXCIsXCJ0aG9yblwiLFwibWludXNcIixcIm11bHRpcGx5XCIsXCJvbmVzdXBlcmlvclwiLFwidHdvc3VwZXJpb3JcIixcInRocmVlc3VwZXJpb3JcIixcIm9uZWhhbGZcIixcIm9uZXF1YXJ0ZXJcIixcInRocmVlcXVhcnRlcnNcIixcImZyYW5jXCIsXCJHYnJldmVcIixcImdicmV2ZVwiLFwiSWRvdGFjY2VudFwiLFwiU2NlZGlsbGFcIixcInNjZWRpbGxhXCIsXCJDYWN1dGVcIixcImNhY3V0ZVwiLFwiQ2Nhcm9uXCIsXCJjY2Fyb25cIixcImRjcm9hdFwiXTtYLnByb3RvdHlwZS5jaGFyVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3ZhciBiPWEuY29kZVBvaW50QXQoMCksYz10aGlzLmZvbnQuZ2x5cGhzO2lmKGMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKz0xKWZvcih2YXIgZT1jLmdldChkKSxmPTA7ZjxlLnVuaWNvZGVzLmxlbmd0aDtmKz0xKWlmKGUudW5pY29kZXNbZl09PT1iKXJldHVybiBkO3JldHVybiBudWxsfSxZLnByb3RvdHlwZS5jaGFyVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNtYXAuZ2x5cGhJbmRleE1hcFthLmNvZGVQb2ludEF0KDApXXx8MH0sWi5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXt2YXIgYj1hLmNvZGVQb2ludEF0KDApLGM9dGhpcy5lbmNvZGluZ1tiXTtyZXR1cm4gdGhpcy5jaGFyc2V0LmluZGV4T2YoYyl9LCQucHJvdG90eXBlLm5hbWVUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubmFtZXMuaW5kZXhPZihhKX0sJC5wcm90b3R5cGUuZ2x5cGhJbmRleFRvTmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5uYW1lc1thXX07dmFyIFJlPXtsaW5lOmFhfTtjYS5wcm90b3R5cGUuYmluZENvbnN0cnVjdG9yVmFsdWVzPWZ1bmN0aW9uKGEpe3RoaXMuaW5kZXg9YS5pbmRleHx8MCx0aGlzLm5hbWU9YS5uYW1lfHxudWxsLHRoaXMudW5pY29kZT1hLnVuaWNvZGV8fHZvaWQgMCx0aGlzLnVuaWNvZGVzPWEudW5pY29kZXN8fHZvaWQgMCE9PWEudW5pY29kZT9bYS51bmljb2RlXTpbXSxhLnhNaW4mJih0aGlzLnhNaW49YS54TWluKSxhLnlNaW4mJih0aGlzLnlNaW49YS55TWluKSxhLnhNYXgmJih0aGlzLnhNYXg9YS54TWF4KSxhLnlNYXgmJih0aGlzLnlNYXg9YS55TWF4KSxhLmFkdmFuY2VXaWR0aCYmKHRoaXMuYWR2YW5jZVdpZHRoPWEuYWR2YW5jZVdpZHRoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInBhdGhcIixiYSh0aGlzLGEucGF0aCkpfSxjYS5wcm90b3R5cGUuYWRkVW5pY29kZT1mdW5jdGlvbihhKXswPT09dGhpcy51bmljb2Rlcy5sZW5ndGgmJih0aGlzLnVuaWNvZGU9YSksdGhpcy51bmljb2Rlcy5wdXNoKGEpfSxjYS5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoLmdldEJvdW5kaW5nQm94KCl9LGNhLnByb3RvdHlwZS5nZXRQYXRoPWZ1bmN0aW9uKGEsYixjLGQsZSl7YT12b2lkIDAhPT1hP2E6MCxiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjcyO3ZhciBmLGc7ZHx8KGQ9e30pO3ZhciBoPWQueFNjYWxlLGk9ZC55U2NhbGU7aWYoZC5oaW50aW5nJiZlJiZlLmhpbnRpbmcmJihnPXRoaXMucGF0aCYmZS5oaW50aW5nLmV4ZWModGhpcyxjKSksZylmPWUuaGludGluZy5nZXRDb21tYW5kcyhnKSxhPU1hdGgucm91bmQoYSksYj1NYXRoLnJvdW5kKGIpLGg9aT0xO2Vsc2V7Zj10aGlzLnBhdGguY29tbWFuZHM7dmFyIGo9MS90aGlzLnBhdGgudW5pdHNQZXJFbSpjO3ZvaWQgMD09PWgmJihoPWopLHZvaWQgMD09PWkmJihpPWopfWZvcih2YXIgaz1uZXcgcixsPTA7bDxmLmxlbmd0aDtsKz0xKXt2YXIgbT1mW2xdO1wiTVwiPT09bS50eXBlP2subW92ZVRvKGErbS54KmgsYistbS55KmkpOlwiTFwiPT09bS50eXBlP2subGluZVRvKGErbS54KmgsYistbS55KmkpOlwiUVwiPT09bS50eXBlP2sucXVhZHJhdGljQ3VydmVUbyhhK20ueDEqaCxiKy1tLnkxKmksYSttLngqaCxiKy1tLnkqaSk6XCJDXCI9PT1tLnR5cGU/ay5jdXJ2ZVRvKGErbS54MSpoLGIrLW0ueTEqaSxhK20ueDIqaCxiKy1tLnkyKmksYSttLngqaCxiKy1tLnkqaSk6XCJaXCI9PT1tLnR5cGUmJmsuY2xvc2VQYXRoKCl9cmV0dXJuIGt9LGNhLnByb3RvdHlwZS5nZXRDb250b3Vycz1mdW5jdGlvbigpe3ZhciBhPXRoaXM7aWYodm9pZCAwPT09dGhpcy5wb2ludHMpcmV0dXJuW107Zm9yKHZhciBiPVtdLGM9W10sZD0wO2Q8dGhpcy5wb2ludHMubGVuZ3RoO2QrPTEpe3ZhciBlPWEucG9pbnRzW2RdO2MucHVzaChlKSxlLmxhc3RQb2ludE9mQ29udG91ciYmKGIucHVzaChjKSxjPVtdKX1yZXR1cm4geGUuYXJndW1lbnQoMD09PWMubGVuZ3RoLFwiVGhlcmUgYXJlIHN0aWxsIHBvaW50cyBsZWZ0IGluIHRoZSBjdXJyZW50IGNvbnRvdXIuXCIpLGJ9LGNhLnByb3RvdHlwZS5nZXRNZXRyaWNzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMucGF0aC5jb21tYW5kcyxiPVtdLGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXTtcIlpcIiE9PWUudHlwZSYmKGIucHVzaChlLngpLGMucHVzaChlLnkpKSxcIlFcIiE9PWUudHlwZSYmXCJDXCIhPT1lLnR5cGV8fChiLnB1c2goZS54MSksYy5wdXNoKGUueTEpKSxcIkNcIj09PWUudHlwZSYmKGIucHVzaChlLngyKSxjLnB1c2goZS55MikpfXZhciBmPXt4TWluOk1hdGgubWluLmFwcGx5KG51bGwsYikseU1pbjpNYXRoLm1pbi5hcHBseShudWxsLGMpLHhNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxiKSx5TWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsYyksbGVmdFNpZGVCZWFyaW5nOnRoaXMubGVmdFNpZGVCZWFyaW5nfTtyZXR1cm4gaXNGaW5pdGUoZi54TWluKXx8KGYueE1pbj0wKSxpc0Zpbml0ZShmLnhNYXgpfHwoZi54TWF4PXRoaXMuYWR2YW5jZVdpZHRoKSxpc0Zpbml0ZShmLnlNaW4pfHwoZi55TWluPTApLGlzRmluaXRlKGYueU1heCl8fChmLnlNYXg9MCksZi5yaWdodFNpZGVCZWFyaW5nPXRoaXMuYWR2YW5jZVdpZHRoLWYubGVmdFNpZGVCZWFyaW5nLShmLnhNYXgtZi54TWluKSxmfSxjYS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihhLGIsYyxkLGUpe3RoaXMuZ2V0UGF0aChiLGMsZCxlKS5kcmF3KGEpfSxjYS5wcm90b3R5cGUuZHJhd1BvaW50cz1mdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBlKGIsYyxkLGUpe3ZhciBmPTIqTWF0aC5QSTthLmJlZ2luUGF0aCgpO2Zvcih2YXIgZz0wO2c8Yi5sZW5ndGg7Zys9MSlhLm1vdmVUbyhjK2JbZ10ueCplLGQrYltnXS55KmUpLGEuYXJjKGMrYltnXS54KmUsZCtiW2ddLnkqZSwyLDAsZiwhMSk7YS5jbG9zZVBhdGgoKSxhLmZpbGwoKX1iPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD12b2lkIDAhPT1kP2Q6MjQ7Zm9yKHZhciBmPTEvdGhpcy5wYXRoLnVuaXRzUGVyRW0qZCxnPVtdLGg9W10saT10aGlzLnBhdGgsaj0wO2o8aS5jb21tYW5kcy5sZW5ndGg7ais9MSl7dmFyIGs9aS5jb21tYW5kc1tqXTt2b2lkIDAhPT1rLngmJmcucHVzaCh7eDprLngseTotay55fSksdm9pZCAwIT09ay54MSYmaC5wdXNoKHt4OmsueDEseTotay55MX0pLHZvaWQgMCE9PWsueDImJmgucHVzaCh7eDprLngyLHk6LWsueTJ9KX1hLmZpbGxTdHlsZT1cImJsdWVcIixlKGcsYixjLGYpLGEuZmlsbFN0eWxlPVwicmVkXCIsZShoLGIsYyxmKX0sY2EucHJvdG90eXBlLmRyYXdNZXRyaWNzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlO2I9dm9pZCAwIT09Yj9iOjAsYz12b2lkIDAhPT1jP2M6MCxkPXZvaWQgMCE9PWQ/ZDoyNCxlPTEvdGhpcy5wYXRoLnVuaXRzUGVyRW0qZCxhLmxpbmVXaWR0aD0xLGEuc3Ryb2tlU3R5bGU9XCJibGFja1wiLFJlLmxpbmUoYSxiLC0xZTQsYiwxZTQpLFJlLmxpbmUoYSwtMWU0LGMsMWU0LGMpO3ZhciBmPXRoaXMueE1pbnx8MCxnPXRoaXMueU1pbnx8MCxoPXRoaXMueE1heHx8MCxpPXRoaXMueU1heHx8MCxqPXRoaXMuYWR2YW5jZVdpZHRofHwwO2Euc3Ryb2tlU3R5bGU9XCJibHVlXCIsUmUubGluZShhLGIrZiplLC0xZTQsYitmKmUsMWU0KSxSZS5saW5lKGEsYitoKmUsLTFlNCxiK2gqZSwxZTQpLFJlLmxpbmUoYSwtMWU0LGMrLWcqZSwxZTQsYystZyplKSxSZS5saW5lKGEsLTFlNCxjKy1pKmUsMWU0LGMrLWkqZSksYS5zdHJva2VTdHlsZT1cImdyZWVuXCIsUmUubGluZShhLGIraiplLC0xZTQsYitqKmUsMWU0KX0sZWEucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmdseXBoc1thXSYmKHRoaXMuZ2x5cGhzW2FdPXRoaXMuZ2x5cGhzW2FdKCkpLHRoaXMuZ2x5cGhzW2FdfSxlYS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihhLGIpe3RoaXMuZ2x5cGhzW2FdPWIsdGhpcy5sZW5ndGgrK307dmFyIFNlPXtHbHlwaFNldDplYSxnbHlwaExvYWRlcjpmYSx0dGZHbHlwaExvYWRlcjpnYSxjZmZHbHlwaExvYWRlcjpoYX0sVGU9W3tuYW1lOlwidmVyc2lvblwiLG9wOjAsdHlwZTpcIlNJRFwifSx7bmFtZTpcIm5vdGljZVwiLG9wOjEsdHlwZTpcIlNJRFwifSx7bmFtZTpcImNvcHlyaWdodFwiLG9wOjEyMDAsdHlwZTpcIlNJRFwifSx7bmFtZTpcImZ1bGxOYW1lXCIsb3A6Mix0eXBlOlwiU0lEXCJ9LHtuYW1lOlwiZmFtaWx5TmFtZVwiLG9wOjMsdHlwZTpcIlNJRFwifSx7bmFtZTpcIndlaWdodFwiLG9wOjQsdHlwZTpcIlNJRFwifSx7bmFtZTpcImlzRml4ZWRQaXRjaFwiLG9wOjEyMDEsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwiaXRhbGljQW5nbGVcIixvcDoxMjAyLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcInVuZGVybGluZVBvc2l0aW9uXCIsb3A6MTIwMyx0eXBlOlwibnVtYmVyXCIsdmFsdWU6LTEwMH0se25hbWU6XCJ1bmRlcmxpbmVUaGlja25lc3NcIixvcDoxMjA0LHR5cGU6XCJudW1iZXJcIix2YWx1ZTo1MH0se25hbWU6XCJwYWludFR5cGVcIixvcDoxMjA1LHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNoYXJzdHJpbmdUeXBlXCIsb3A6MTIwNix0eXBlOlwibnVtYmVyXCIsdmFsdWU6Mn0se25hbWU6XCJmb250TWF0cml4XCIsb3A6MTIwNyx0eXBlOltcInJlYWxcIixcInJlYWxcIixcInJlYWxcIixcInJlYWxcIixcInJlYWxcIixcInJlYWxcIl0sdmFsdWU6Wy4wMDEsMCwwLC4wMDEsMCwwXX0se25hbWU6XCJ1bmlxdWVJZFwiLG9wOjEzLHR5cGU6XCJudW1iZXJcIn0se25hbWU6XCJmb250QkJveFwiLG9wOjUsdHlwZTpbXCJudW1iZXJcIixcIm51bWJlclwiLFwibnVtYmVyXCIsXCJudW1iZXJcIl0sdmFsdWU6WzAsMCwwLDBdfSx7bmFtZTpcInN0cm9rZVdpZHRoXCIsb3A6MTIwOCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJ4dWlkXCIsb3A6MTQsdHlwZTpbXSx2YWx1ZTpudWxsfSx7bmFtZTpcImNoYXJzZXRcIixvcDoxNSx0eXBlOlwib2Zmc2V0XCIsdmFsdWU6MH0se25hbWU6XCJlbmNvZGluZ1wiLG9wOjE2LHR5cGU6XCJvZmZzZXRcIix2YWx1ZTowfSx7bmFtZTpcImNoYXJTdHJpbmdzXCIsb3A6MTcsdHlwZTpcIm9mZnNldFwiLHZhbHVlOjB9LHtuYW1lOlwicHJpdmF0ZVwiLG9wOjE4LHR5cGU6W1wibnVtYmVyXCIsXCJvZmZzZXRcIl0sdmFsdWU6WzAsMF19LHtuYW1lOlwicm9zXCIsb3A6MTIzMCx0eXBlOltcIlNJRFwiLFwiU0lEXCIsXCJudW1iZXJcIl19LHtuYW1lOlwiY2lkRm9udFZlcnNpb25cIixvcDoxMjMxLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNpZEZvbnRSZXZpc2lvblwiLG9wOjEyMzIsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwiY2lkRm9udFR5cGVcIixvcDoxMjMzLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNpZENvdW50XCIsb3A6MTIzNCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6ODcyMH0se25hbWU6XCJ1aWRCYXNlXCIsb3A6MTIzNSx0eXBlOlwibnVtYmVyXCJ9LHtuYW1lOlwiZmRBcnJheVwiLG9wOjEyMzYsdHlwZTpcIm9mZnNldFwifSx7bmFtZTpcImZkU2VsZWN0XCIsb3A6MTIzNyx0eXBlOlwib2Zmc2V0XCJ9LHtuYW1lOlwiZm9udE5hbWVcIixvcDoxMjM4LHR5cGU6XCJTSURcIn1dLFVlPVt7bmFtZTpcInN1YnJzXCIsb3A6MTksdHlwZTpcIm9mZnNldFwiLHZhbHVlOjB9LHtuYW1lOlwiZGVmYXVsdFdpZHRoWFwiLG9wOjIwLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcIm5vbWluYWxXaWR0aFhcIixvcDoyMSx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH1dLFZlPXtwYXJzZTp6YSxtYWtlOk1hfSxXZT17cGFyc2U6TmEsbWFrZTpPYX0sWGU9e3BhcnNlOlBhLG1ha2U6UWF9LFllPXtwYXJzZTpSYSxtYWtlOlNhfSxaZT17bWFrZTpUYSxwYXJzZTpVYX0sJGU9e3BhcnNlOlZhLG1ha2U6V2F9LF9lPVtcImNvcHlyaWdodFwiLFwiZm9udEZhbWlseVwiLFwiZm9udFN1YmZhbWlseVwiLFwidW5pcXVlSURcIixcImZ1bGxOYW1lXCIsXCJ2ZXJzaW9uXCIsXCJwb3N0U2NyaXB0TmFtZVwiLFwidHJhZGVtYXJrXCIsXCJtYW51ZmFjdHVyZXJcIixcImRlc2lnbmVyXCIsXCJkZXNjcmlwdGlvblwiLFwibWFudWZhY3R1cmVyVVJMXCIsXCJkZXNpZ25lclVSTFwiLFwibGljZW5zZVwiLFwibGljZW5zZVVSTFwiLFwicmVzZXJ2ZWRcIixcInByZWZlcnJlZEZhbWlseVwiLFwicHJlZmVycmVkU3ViZmFtaWx5XCIsXCJjb21wYXRpYmxlRnVsbE5hbWVcIixcInNhbXBsZVRleHRcIixcInBvc3RTY3JpcHRGaW5kRm9udE5hbWVcIixcInd3c0ZhbWlseVwiLFwid3dzU3ViZmFtaWx5XCJdLGFmPXswOlwiZW5cIiwxOlwiZnJcIiwyOlwiZGVcIiwzOlwiaXRcIiw0OlwibmxcIiw1Olwic3ZcIiw2OlwiZXNcIiw3OlwiZGFcIiw4OlwicHRcIiw5Olwibm9cIiwxMDpcImhlXCIsMTE6XCJqYVwiLDEyOlwiYXJcIiwxMzpcImZpXCIsMTQ6XCJlbFwiLDE1OlwiaXNcIiwxNjpcIm10XCIsMTc6XCJ0clwiLDE4OlwiaHJcIiwxOTpcInpoLUhhbnRcIiwyMDpcInVyXCIsMjE6XCJoaVwiLDIyOlwidGhcIiwyMzpcImtvXCIsMjQ6XCJsdFwiLDI1OlwicGxcIiwyNjpcImh1XCIsMjc6XCJlc1wiLDI4OlwibHZcIiwyOTpcInNlXCIsMzA6XCJmb1wiLDMxOlwiZmFcIiwzMjpcInJ1XCIsMzM6XCJ6aFwiLDM0OlwibmwtQkVcIiwzNTpcImdhXCIsMzY6XCJzcVwiLDM3Olwicm9cIiwzODpcImN6XCIsMzk6XCJza1wiLDQwOlwic2lcIiw0MTpcInlpXCIsNDI6XCJzclwiLDQzOlwibWtcIiw0NDpcImJnXCIsNDU6XCJ1a1wiLDQ2OlwiYmVcIiw0NzpcInV6XCIsNDg6XCJra1wiLDQ5OlwiYXotQ3lybFwiLDUwOlwiYXotQXJhYlwiLDUxOlwiaHlcIiw1MjpcImthXCIsNTM6XCJtb1wiLDU0Olwia3lcIiw1NTpcInRnXCIsNTY6XCJ0a1wiLDU3OlwibW4tQ05cIiw1ODpcIm1uXCIsNTk6XCJwc1wiLDYwOlwia3NcIiw2MTpcImt1XCIsNjI6XCJzZFwiLDYzOlwiYm9cIiw2NDpcIm5lXCIsNjU6XCJzYVwiLDY2OlwibXJcIiw2NzpcImJuXCIsNjg6XCJhc1wiLDY5OlwiZ3VcIiw3MDpcInBhXCIsNzE6XCJvclwiLDcyOlwibWxcIiw3MzpcImtuXCIsNzQ6XCJ0YVwiLDc1OlwidGVcIiw3NjpcInNpXCIsNzc6XCJteVwiLDc4Olwia21cIiw3OTpcImxvXCIsODA6XCJ2aVwiLDgxOlwiaWRcIiw4MjpcInRsXCIsODM6XCJtc1wiLDg0OlwibXMtQXJhYlwiLDg1OlwiYW1cIiw4NjpcInRpXCIsODc6XCJvbVwiLDg4Olwic29cIiw4OTpcInN3XCIsOTA6XCJyd1wiLDkxOlwicm5cIiw5MjpcIm55XCIsOTM6XCJtZ1wiLDk0OlwiZW9cIiwxMjg6XCJjeVwiLDEyOTpcImV1XCIsMTMwOlwiY2FcIiwxMzE6XCJsYVwiLDEzMjpcInF1XCIsMTMzOlwiZ25cIiwxMzQ6XCJheVwiLDEzNTpcInR0XCIsMTM2OlwidWdcIiwxMzc6XCJkelwiLDEzODpcImp2XCIsMTM5Olwic3VcIiwxNDA6XCJnbFwiLDE0MTpcImFmXCIsMTQyOlwiYnJcIiwxNDM6XCJpdVwiLDE0NDpcImdkXCIsMTQ1OlwiZ3ZcIiwxNDY6XCJnYVwiLDE0NzpcInRvXCIsMTQ4OlwiZWwtcG9seXRvblwiLDE0OTpcImtsXCIsMTUwOlwiYXpcIiwxNTE6XCJublwifSxiZj17MDowLDE6MCwyOjAsMzowLDQ6MCw1OjAsNjowLDc6MCw4OjAsOTowLDEwOjUsMTE6MSwxMjo0LDEzOjAsMTQ6NiwxNTowLDE2OjAsMTc6MCwxODowLDE5OjIsMjA6NCxcbjIxOjksMjI6MjEsMjM6MywyNDoyOSwyNToyOSwyNjoyOSwyNzoyOSwyODoyOSwyOTowLDMwOjAsMzE6NCwzMjo3LDMzOjI1LDM0OjAsMzU6MCwzNjowLDM3OjAsMzg6MjksMzk6MjksNDA6MCw0MTo1LDQyOjcsNDM6Nyw0NDo3LDQ1OjcsNDY6Nyw0Nzo3LDQ4OjcsNDk6Nyw1MDo0LDUxOjI0LDUyOjIzLDUzOjcsNTQ6Nyw1NTo3LDU2OjcsNTc6MjcsNTg6Nyw1OTo0LDYwOjQsNjE6NCw2Mjo0LDYzOjI2LDY0OjksNjU6OSw2Njo5LDY3OjEzLDY4OjEzLDY5OjExLDcwOjEwLDcxOjEyLDcyOjE3LDczOjE2LDc0OjE0LDc1OjE1LDc2OjE4LDc3OjE5LDc4OjIwLDc5OjIyLDgwOjMwLDgxOjAsODI6MCw4MzowLDg0OjQsODU6MjgsODY6MjgsODc6MjgsODg6MCw4OTowLDkwOjAsOTE6MCw5MjowLDkzOjAsOTQ6MCwxMjg6MCwxMjk6MCwxMzA6MCwxMzE6MCwxMzI6MCwxMzM6MCwxMzQ6MCwxMzU6NywxMzY6NCwxMzc6MjYsMTM4OjAsMTM5OjAsMTQwOjAsMTQxOjAsMTQyOjAsMTQzOjI4LDE0NDowLDE0NTowLDE0NjowLDE0NzowLDE0ODo2LDE0OTowLDE1MDowLDE1MTowfSxjZj17MTA3ODpcImFmXCIsMTA1MjpcInNxXCIsMTE1NjpcImdzd1wiLDExMTg6XCJhbVwiLDUxMjE6XCJhci1EWlwiLDE1MzYxOlwiYXItQkhcIiwzMDczOlwiYXJcIiwyMDQ5OlwiYXItSVFcIiwxMTI2NTpcImFyLUpPXCIsMTMzMTM6XCJhci1LV1wiLDEyMjg5OlwiYXItTEJcIiw0MDk3OlwiYXItTFlcIiw2MTQ1OlwiYXJ5XCIsODE5MzpcImFyLU9NXCIsMTYzODU6XCJhci1RQVwiLDEwMjU6XCJhci1TQVwiLDEwMjQxOlwiYXItU1lcIiw3MTY5OlwiYWViXCIsMTQzMzc6XCJhci1BRVwiLDkyMTc6XCJhci1ZRVwiLDEwNjc6XCJoeVwiLDExMDE6XCJhc1wiLDIwOTI6XCJhei1DeXJsXCIsMTA2ODpcImF6XCIsMTEzMzpcImJhXCIsMTA2OTpcImV1XCIsMTA1OTpcImJlXCIsMjExNzpcImJuXCIsMTA5MzpcImJuLUlOXCIsODIxODpcImJzLUN5cmxcIiw1MTQ2OlwiYnNcIiwxMTUwOlwiYnJcIiwxMDI2OlwiYmdcIiwxMDI3OlwiY2FcIiwzMDc2OlwiemgtSEtcIiw1MTI0OlwiemgtTU9cIiwyMDUyOlwiemhcIiw0MTAwOlwiemgtU0dcIiwxMDI4OlwiemgtVFdcIiwxMTU1OlwiY29cIiwxMDUwOlwiaHJcIiw0MTIyOlwiaHItQkFcIiwxMDI5OlwiY3NcIiwxMDMwOlwiZGFcIiwxMTY0OlwicHJzXCIsMTEyNTpcImR2XCIsMjA2NzpcIm5sLUJFXCIsMTA0MzpcIm5sXCIsMzA4MTpcImVuLUFVXCIsMTAyNDk6XCJlbi1CWlwiLDQxMDU6XCJlbi1DQVwiLDkyMjU6XCJlbi0wMjlcIiwxNjM5MzpcImVuLUlOXCIsNjE1MzpcImVuLUlFXCIsODIwMTpcImVuLUpNXCIsMTc0MTc6XCJlbi1NWVwiLDUxMjk6XCJlbi1OWlwiLDEzMzIxOlwiZW4tUEhcIiwxODQ0MTpcImVuLVNHXCIsNzE3NzpcImVuLVpBXCIsMTEyNzM6XCJlbi1UVFwiLDIwNTc6XCJlbi1HQlwiLDEwMzM6XCJlblwiLDEyMjk3OlwiZW4tWldcIiwxMDYxOlwiZXRcIiwxMDgwOlwiZm9cIiwxMTI0OlwiZmlsXCIsMTAzNTpcImZpXCIsMjA2MDpcImZyLUJFXCIsMzA4NDpcImZyLUNBXCIsMTAzNjpcImZyXCIsNTEzMjpcImZyLUxVXCIsNjE1NjpcImZyLU1DXCIsNDEwODpcImZyLUNIXCIsMTEyMjpcImZ5XCIsMTExMDpcImdsXCIsMTA3OTpcImthXCIsMzA3OTpcImRlLUFUXCIsMTAzMTpcImRlXCIsNTEyNzpcImRlLUxJXCIsNDEwMzpcImRlLUxVXCIsMjA1NTpcImRlLUNIXCIsMTAzMjpcImVsXCIsMTEzNTpcImtsXCIsMTA5NTpcImd1XCIsMTEyODpcImhhXCIsMTAzNzpcImhlXCIsMTA4MTpcImhpXCIsMTAzODpcImh1XCIsMTAzOTpcImlzXCIsMTEzNjpcImlnXCIsMTA1NzpcImlkXCIsMTExNzpcIml1XCIsMjE0MTpcIml1LUxhdG5cIiwyMTA4OlwiZ2FcIiwxMDc2OlwieGhcIiwxMDc3OlwienVcIiwxMDQwOlwiaXRcIiwyMDY0OlwiaXQtQ0hcIiwxMDQxOlwiamFcIiwxMDk5Olwia25cIiwxMDg3Olwia2tcIiwxMTA3Olwia21cIiwxMTU4OlwicXVjXCIsMTE1OTpcInJ3XCIsMTA4OTpcInN3XCIsMTExMTpcImtva1wiLDEwNDI6XCJrb1wiLDEwODg6XCJreVwiLDExMDg6XCJsb1wiLDEwNjI6XCJsdlwiLDEwNjM6XCJsdFwiLDIwOTQ6XCJkc2JcIiwxMTM0OlwibGJcIiwxMDcxOlwibWtcIiwyMTEwOlwibXMtQk5cIiwxMDg2OlwibXNcIiwxMTAwOlwibWxcIiwxMDgyOlwibXRcIiwxMTUzOlwibWlcIiwxMTQ2OlwiYXJuXCIsMTEwMjpcIm1yXCIsMTE0ODpcIm1vaFwiLDExMDQ6XCJtblwiLDIxMjg6XCJtbi1DTlwiLDExMjE6XCJuZVwiLDEwNDQ6XCJuYlwiLDIwNjg6XCJublwiLDExNTQ6XCJvY1wiLDEwOTY6XCJvclwiLDExMjM6XCJwc1wiLDEwNDU6XCJwbFwiLDEwNDY6XCJwdFwiLDIwNzA6XCJwdC1QVFwiLDEwOTQ6XCJwYVwiLDExMzE6XCJxdS1CT1wiLDIxNTU6XCJxdS1FQ1wiLDMxNzk6XCJxdVwiLDEwNDg6XCJyb1wiLDEwNDc6XCJybVwiLDEwNDk6XCJydVwiLDkyNzU6XCJzbW5cIiw0MTU1Olwic21qLU5PXCIsNTE3OTpcInNtalwiLDMxMzE6XCJzZS1GSVwiLDEwODM6XCJzZVwiLDIxMDc6XCJzZS1TRVwiLDgyNTE6XCJzbXNcIiw2MjAzOlwic21hLU5PXCIsNzIyNzpcInNtc1wiLDExMDM6XCJzYVwiLDcxOTQ6XCJzci1DeXJsLUJBXCIsMzA5ODpcInNyXCIsNjE3MDpcInNyLUxhdG4tQkFcIiwyMDc0Olwic3ItTGF0blwiLDExMzI6XCJuc29cIiwxMDc0OlwidG5cIiwxMTE1Olwic2lcIiwxMDUxOlwic2tcIiwxMDYwOlwic2xcIiwxMTI3NDpcImVzLUFSXCIsMTYzOTQ6XCJlcy1CT1wiLDEzMzIyOlwiZXMtQ0xcIiw5MjI2OlwiZXMtQ09cIiw1MTMwOlwiZXMtQ1JcIiw3MTc4OlwiZXMtRE9cIiwxMjI5ODpcImVzLUVDXCIsMTc0MTg6XCJlcy1TVlwiLDQxMDY6XCJlcy1HVFwiLDE4NDQyOlwiZXMtSE5cIiwyMDU4OlwiZXMtTVhcIiwxOTQ2NjpcImVzLU5JXCIsNjE1NDpcImVzLVBBXCIsMTUzNzA6XCJlcy1QWVwiLDEwMjUwOlwiZXMtUEVcIiwyMDQ5MDpcImVzLVBSXCIsMzA4MjpcImVzXCIsMTAzNDpcImVzXCIsMjE1MTQ6XCJlcy1VU1wiLDE0MzQ2OlwiZXMtVVlcIiw4MjAyOlwiZXMtVkVcIiwyMDc3Olwic3YtRklcIiwxMDUzOlwic3ZcIiwxMTE0Olwic3lyXCIsMTA2NDpcInRnXCIsMjE0MzpcInR6bVwiLDEwOTc6XCJ0YVwiLDEwOTI6XCJ0dFwiLDEwOTg6XCJ0ZVwiLDEwNTQ6XCJ0aFwiLDExMDU6XCJib1wiLDEwNTU6XCJ0clwiLDEwOTA6XCJ0a1wiLDExNTI6XCJ1Z1wiLDEwNTg6XCJ1a1wiLDEwNzA6XCJoc2JcIiwxMDU2OlwidXJcIiwyMTE1OlwidXotQ3lybFwiLDEwOTE6XCJ1elwiLDEwNjY6XCJ2aVwiLDExMDY6XCJjeVwiLDExNjA6XCJ3b1wiLDExNTc6XCJzYWhcIiwxMTQ0OlwiaWlcIiwxMTMwOlwieW9cIn0sZGY9XCJ1dGYtMTZcIixlZj17MDpcIm1hY2ludG9zaFwiLDE6XCJ4LW1hYy1qYXBhbmVzZVwiLDI6XCJ4LW1hYy1jaGluZXNldHJhZFwiLDM6XCJ4LW1hYy1rb3JlYW5cIiw2OlwieC1tYWMtZ3JlZWtcIiw3OlwieC1tYWMtY3lyaWxsaWNcIiw5OlwieC1tYWMtZGV2YW5hZ2FpXCIsMTA6XCJ4LW1hYy1ndXJtdWtoaVwiLDExOlwieC1tYWMtZ3VqYXJhdGlcIiwxMjpcIngtbWFjLW9yaXlhXCIsMTM6XCJ4LW1hYy1iZW5nYWxpXCIsMTQ6XCJ4LW1hYy10YW1pbFwiLDE1OlwieC1tYWMtdGVsdWd1XCIsMTY6XCJ4LW1hYy1rYW5uYWRhXCIsMTc6XCJ4LW1hYy1tYWxheWFsYW1cIiwxODpcIngtbWFjLXNpbmhhbGVzZVwiLDE5OlwieC1tYWMtYnVybWVzZVwiLDIwOlwieC1tYWMta2htZXJcIiwyMTpcIngtbWFjLXRoYWlcIiwyMjpcIngtbWFjLWxhb1wiLDIzOlwieC1tYWMtZ2VvcmdpYW5cIiwyNDpcIngtbWFjLWFybWVuaWFuXCIsMjU6XCJ4LW1hYy1jaGluZXNlc2ltcFwiLDI2OlwieC1tYWMtdGliZXRhblwiLDI3OlwieC1tYWMtbW9uZ29saWFuXCIsMjg6XCJ4LW1hYy1ldGhpb3BpY1wiLDI5OlwieC1tYWMtY2VcIiwzMDpcIngtbWFjLXZpZXRuYW1lc2VcIiwzMTpcIngtbWFjLWV4dGFyYWJpY1wifSxmZj17MTU6XCJ4LW1hYy1pY2VsYW5kaWNcIiwxNzpcIngtbWFjLXR1cmtpc2hcIiwxODpcIngtbWFjLWNyb2F0aWFuXCIsMjQ6XCJ4LW1hYy1jZVwiLDI1OlwieC1tYWMtY2VcIiwyNjpcIngtbWFjLWNlXCIsMjc6XCJ4LW1hYy1jZVwiLDI4OlwieC1tYWMtY2VcIiwzMDpcIngtbWFjLWljZWxhbmRpY1wiLDM3OlwieC1tYWMtcm9tYW5pYW5cIiwzODpcIngtbWFjLWNlXCIsMzk6XCJ4LW1hYy1jZVwiLDQwOlwieC1tYWMtY2VcIiwxNDM6XCJ4LW1hYy1pbnVpdFwiLDE0NjpcIngtbWFjLWdhZWxpY1wifSxnZj17cGFyc2U6WmEsbWFrZTpjYn0saGY9W3tiZWdpbjowLGVuZDoxMjd9LHtiZWdpbjoxMjgsZW5kOjI1NX0se2JlZ2luOjI1NixlbmQ6MzgzfSx7YmVnaW46Mzg0LGVuZDo1OTF9LHtiZWdpbjo1OTIsZW5kOjY4N30se2JlZ2luOjY4OCxlbmQ6NzY3fSx7YmVnaW46NzY4LGVuZDo4Nzl9LHtiZWdpbjo4ODAsZW5kOjEwMjN9LHtiZWdpbjoxMTM5MixlbmQ6MTE1MTl9LHtiZWdpbjoxMDI0LGVuZDoxMjc5fSx7YmVnaW46MTMyOCxlbmQ6MTQyM30se2JlZ2luOjE0MjQsZW5kOjE1MzV9LHtiZWdpbjo0MjI0MCxlbmQ6NDI1NTl9LHtiZWdpbjoxNTM2LGVuZDoxNzkxfSx7YmVnaW46MTk4NCxlbmQ6MjA0N30se2JlZ2luOjIzMDQsZW5kOjI0MzF9LHtiZWdpbjoyNDMyLGVuZDoyNTU5fSx7YmVnaW46MjU2MCxlbmQ6MjY4N30se2JlZ2luOjI2ODgsZW5kOjI4MTV9LHtiZWdpbjoyODE2LGVuZDoyOTQzfSx7YmVnaW46Mjk0NCxlbmQ6MzA3MX0se2JlZ2luOjMwNzIsZW5kOjMxOTl9LHtiZWdpbjozMjAwLGVuZDozMzI3fSx7YmVnaW46MzMyOCxlbmQ6MzQ1NX0se2JlZ2luOjM1ODQsZW5kOjM3MTF9LHtiZWdpbjozNzEyLGVuZDozODM5fSx7YmVnaW46NDI1NixlbmQ6NDM1MX0se2JlZ2luOjY5MTIsZW5kOjcwMzl9LHtiZWdpbjo0MzUyLGVuZDo0NjA3fSx7YmVnaW46NzY4MCxlbmQ6NzkzNX0se2JlZ2luOjc5MzYsZW5kOjgxOTF9LHtiZWdpbjo4MTkyLGVuZDo4MzAzfSx7YmVnaW46ODMwNCxlbmQ6ODM1MX0se2JlZ2luOjgzNTIsZW5kOjgzOTl9LHtiZWdpbjo4NDAwLGVuZDo4NDQ3fSx7YmVnaW46ODQ0OCxlbmQ6ODUyN30se2JlZ2luOjg1MjgsZW5kOjg1OTF9LHtiZWdpbjo4NTkyLGVuZDo4NzAzfSx7YmVnaW46ODcwNCxlbmQ6ODk1OX0se2JlZ2luOjg5NjAsZW5kOjkyMTV9LHtiZWdpbjo5MjE2LGVuZDo5Mjc5fSx7YmVnaW46OTI4MCxlbmQ6OTMxMX0se2JlZ2luOjkzMTIsZW5kOjk0NzF9LHtiZWdpbjo5NDcyLGVuZDo5NTk5fSx7YmVnaW46OTYwMCxlbmQ6OTYzMX0se2JlZ2luOjk2MzIsZW5kOjk3Mjd9LHtiZWdpbjo5NzI4LGVuZDo5OTgzfSx7YmVnaW46OTk4NCxlbmQ6MTAxNzV9LHtiZWdpbjoxMjI4OCxlbmQ6MTIzNTF9LHtiZWdpbjoxMjM1MixlbmQ6MTI0NDd9LHtiZWdpbjoxMjQ0OCxlbmQ6MTI1NDN9LHtiZWdpbjoxMjU0NCxlbmQ6MTI1OTF9LHtiZWdpbjoxMjU5MixlbmQ6MTI2ODd9LHtiZWdpbjo0MzA3MixlbmQ6NDMxMzV9LHtiZWdpbjoxMjgwMCxlbmQ6MTMwNTV9LHtiZWdpbjoxMzA1NixlbmQ6MTMzMTF9LHtiZWdpbjo0NDAzMixlbmQ6NTUyMTV9LHtiZWdpbjo1NTI5NixlbmQ6NTczNDN9LHtiZWdpbjo2Nzg0MCxlbmQ6Njc4NzF9LHtiZWdpbjoxOTk2OCxlbmQ6NDA5NTl9LHtiZWdpbjo1NzM0NCxlbmQ6NjM3NDN9LHtiZWdpbjoxMjczNixlbmQ6MTI3ODN9LHtiZWdpbjo2NDI1NixlbmQ6NjQzMzV9LHtiZWdpbjo2NDMzNixlbmQ6NjUwMjN9LHtiZWdpbjo2NTA1NixlbmQ6NjUwNzF9LHtiZWdpbjo2NTA0MCxlbmQ6NjUwNTV9LHtiZWdpbjo2NTEwNCxlbmQ6NjUxMzV9LHtiZWdpbjo2NTEzNixlbmQ6NjUyNzl9LHtiZWdpbjo2NTI4MCxlbmQ6NjU1MTl9LHtiZWdpbjo2NTUyMCxlbmQ6NjU1MzV9LHtiZWdpbjozODQwLGVuZDo0MDk1fSx7YmVnaW46MTc5MixlbmQ6MTg3MX0se2JlZ2luOjE5MjAsZW5kOjE5ODN9LHtiZWdpbjozNDU2LGVuZDozNTgzfSx7YmVnaW46NDA5NixlbmQ6NDI1NX0se2JlZ2luOjQ2MDgsZW5kOjQ5OTF9LHtiZWdpbjo1MDI0LGVuZDo1MTE5fSx7YmVnaW46NTEyMCxlbmQ6NTc1OX0se2JlZ2luOjU3NjAsZW5kOjU3OTF9LHtiZWdpbjo1NzkyLGVuZDo1ODg3fSx7YmVnaW46NjAxNixlbmQ6NjE0M30se2JlZ2luOjYxNDQsZW5kOjYzMTl9LHtiZWdpbjoxMDI0MCxlbmQ6MTA0OTV9LHtiZWdpbjo0MDk2MCxlbmQ6NDIxMjd9LHtiZWdpbjo1ODg4LGVuZDo1OTE5fSx7YmVnaW46NjYzMDQsZW5kOjY2MzUxfSx7YmVnaW46NjYzNTIsZW5kOjY2MzgzfSx7YmVnaW46NjY1NjAsZW5kOjY2NjM5fSx7YmVnaW46MTE4Nzg0LGVuZDoxMTkwMzl9LHtiZWdpbjoxMTk4MDgsZW5kOjEyMDgzMX0se2JlZ2luOjEwNDQ0ODAsZW5kOjEwNDg1NzN9LHtiZWdpbjo2NTAyNCxlbmQ6NjUwMzl9LHtiZWdpbjo5MTc1MDQsZW5kOjkxNzYzMX0se2JlZ2luOjY0MDAsZW5kOjY0Nzl9LHtiZWdpbjo2NDgwLGVuZDo2NTI3fSx7YmVnaW46NjUyOCxlbmQ6NjYyM30se2JlZ2luOjY2NTYsZW5kOjY2ODd9LHtiZWdpbjoxMTI2NCxlbmQ6MTEzNTl9LHtiZWdpbjoxMTU2OCxlbmQ6MTE2NDd9LHtiZWdpbjoxOTkwNCxlbmQ6MTk5Njd9LHtiZWdpbjo0MzAwOCxlbmQ6NDMwNTV9LHtiZWdpbjo2NTUzNixlbmQ6NjU2NjN9LHtiZWdpbjo2NTg1NixlbmQ6NjU5MzV9LHtiZWdpbjo2NjQzMixlbmQ6NjY0NjN9LHtiZWdpbjo2NjQ2NCxlbmQ6NjY1Mjd9LHtiZWdpbjo2NjY0MCxlbmQ6NjY2ODd9LHtiZWdpbjo2NjY4OCxlbmQ6NjY3MzV9LHtiZWdpbjo2NzU4NCxlbmQ6Njc2NDd9LHtiZWdpbjo2ODA5NixlbmQ6NjgxOTF9LHtiZWdpbjoxMTk1NTIsZW5kOjExOTY0N30se2JlZ2luOjczNzI4LGVuZDo3NDc1MX0se2JlZ2luOjExOTY0OCxlbmQ6MTE5Njc5fSx7YmVnaW46NzA0MCxlbmQ6NzEwM30se2JlZ2luOjcxNjgsZW5kOjcyNDd9LHtiZWdpbjo3MjQ4LGVuZDo3Mjk1fSx7YmVnaW46NDMxMzYsZW5kOjQzMjMxfSx7YmVnaW46NDMyNjQsZW5kOjQzMzExfSx7YmVnaW46NDMzMTIsZW5kOjQzMzU5fSx7YmVnaW46NDM1MjAsZW5kOjQzNjE1fSx7YmVnaW46NjU5MzYsZW5kOjY1OTk5fSx7YmVnaW46NjZlMyxlbmQ6NjYwNDd9LHtiZWdpbjo2NjIwOCxlbmQ6NjYyNzF9LHtiZWdpbjoxMjcwMjQsZW5kOjEyNzEzNX1dLGpmPXtwYXJzZTplYixtYWtlOmZiLHVuaWNvZGVSYW5nZXM6aGYsZ2V0VW5pY29kZVJhbmdlOmRifSxrZj17cGFyc2U6Z2IsbWFrZTpoYn0sbGY9bmV3IEFycmF5KDkpO2xmWzFdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4gMT09PWI/e3N1YnN0Rm9ybWF0OjEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksZGVsdGFHbHlwaElkOnRoaXMucGFyc2VVU2hvcnQoKX06Mj09PWI/e3N1YnN0Rm9ybWF0OjIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksc3Vic3RpdHV0ZTp0aGlzLnBhcnNlT2Zmc2V0MTZMaXN0KCl9OnZvaWQgeGUuYXNzZXJ0KCExLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogbG9va3VwIHR5cGUgMSBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpfSxsZlsyXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWEsXCJHU1VCIE11bHRpcGxlIFN1YnN0aXR1dGlvbiBTdWJ0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksc2VxdWVuY2VzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cygpfX0sbGZbM109ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBBbHRlcm5hdGUgU3Vic3RpdHV0aW9uIFN1YnRhYmxlIGlkZW50aWZpZXItZm9ybWF0IG11c3QgYmUgMVwiKSx7c3Vic3RGb3JtYXQ6YSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxhbHRlcm5hdGVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cygpfX0sbGZbNF09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBsaWdhdHVyZSB0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksbGlnYXR1cmVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3JldHVybntsaWdHbHlwaDp0aGlzLnBhcnNlVVNob3J0KCksY29tcG9uZW50czp0aGlzLnBhcnNlVVNob3J0TGlzdCh0aGlzLnBhcnNlVVNob3J0KCktMSl9fSl9fTt2YXIgbWY9e3NlcXVlbmNlSW5kZXg6US51U2hvcnQsbG9va3VwTGlzdEluZGV4OlEudVNob3J0fTtsZls1XT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWIpcmV0dXJue3N1YnN0Rm9ybWF0OmIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSkscnVsZVNldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpLGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntpbnB1dDp0aGlzLnBhcnNlVVNob3J0TGlzdChhLTEpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QoYixtZil9fSl9O2lmKDI9PT1iKXJldHVybntzdWJzdEZvcm1hdDpiLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGNsYXNzRGVmOnRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGNsYXNzU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCksYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJue2NsYXNzZXM6dGhpcy5wYXJzZVVTaG9ydExpc3QoYS0xKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KGIsbWYpfX0pfTtpZigzPT09Yil7dmFyIGM9dGhpcy5wYXJzZVVTaG9ydCgpLGQ9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntzdWJzdEZvcm1hdDpiLGNvdmVyYWdlczp0aGlzLnBhcnNlTGlzdChjLFEucG9pbnRlcihRLmNvdmVyYWdlKSksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChkLG1mKX19eGUuYXNzZXJ0KCExLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogbG9va3VwIHR5cGUgNSBmb3JtYXQgbXVzdCBiZSAxLCAyIG9yIDMuXCIpfSxsZls2XT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIDE9PT1iP3tzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGNoYWluUnVsZVNldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7cmV0dXJue2JhY2t0cmFjazp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGlucHV0OnRoaXMucGFyc2VVU2hvcnRMaXN0KHRoaXMucGFyc2VTaG9ydCgpLTEpLGxvb2thaGVhZDp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QobWYpfX0pfToyPT09Yj97c3Vic3RGb3JtYXQ6Mixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxiYWNrdHJhY2tDbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxpbnB1dENsYXNzRGVmOnRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGxvb2thaGVhZENsYXNzRGVmOnRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGNoYWluQ2xhc3NTZXQ6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7cmV0dXJue2JhY2t0cmFjazp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGlucHV0OnRoaXMucGFyc2VVU2hvcnRMaXN0KHRoaXMucGFyc2VTaG9ydCgpLTEpLGxvb2thaGVhZDp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QobWYpfX0pfTozPT09Yj97c3Vic3RGb3JtYXQ6MyxiYWNrdHJhY2tDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGlucHV0Q292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxsb29rYWhlYWRDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QobWYpfTp2b2lkIHhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IGxvb2t1cCB0eXBlIDYgZm9ybWF0IG11c3QgYmUgMSwgMiBvciAzLlwiKX0sbGZbN109ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7eGUuYXJndW1lbnQoMT09PWEsXCJHU1VCIEV4dGVuc2lvbiBTdWJzdGl0dXRpb24gc3VidGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpO3ZhciBiPXRoaXMucGFyc2VVU2hvcnQoKSxjPW5ldyBRKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnBhcnNlVUxvbmcoKSk7cmV0dXJue3N1YnN0Rm9ybWF0OjEsbG9va3VwVHlwZTpiLGV4dGVuc2lvbjpsZltiXS5jYWxsKGMpfX0sbGZbOF09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBSZXZlcnNlIENoYWluaW5nIENvbnRleHR1YWwgU2luZ2xlIFN1YnN0aXR1dGlvbiBTdWJ0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksYmFja3RyYWNrQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxsb29rYWhlYWRDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLHN1YnN0aXR1dGVzOnRoaXMucGFyc2VVU2hvcnRMaXN0KCl9fTt2YXIgbmY9bmV3IEFycmF5KDkpO25mWzFdPWZ1bmN0aW9uKGEpe3JldHVybiAxPT09YS5zdWJzdEZvcm1hdD9uZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9LHtuYW1lOlwiZGVsdGFHbHlwaElEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEuZGVsdGFHbHlwaElkfV0pOm5ldyBJZS5UYWJsZShcInN1YnN0aXR1dGlvblRhYmxlXCIsW3tuYW1lOlwic3Vic3RGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Mn0se25hbWU6XCJjb3ZlcmFnZVwiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Db3ZlcmFnZShhLmNvdmVyYWdlKX1dLmNvbmNhdChJZS51c2hvcnRMaXN0KFwic3Vic3RpdHV0ZVwiLGEuc3Vic3RpdHV0ZSkpKX0sbmZbM109ZnVuY3Rpb24oYSl7cmV0dXJuIHhlLmFzc2VydCgxPT09YS5zdWJzdEZvcm1hdCxcIkxvb2t1cCB0eXBlIDMgc3Vic3RGb3JtYXQgbXVzdCBiZSAxLlwiKSxuZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9XS5jb25jYXQoSWUudGFibGVMaXN0KFwiYWx0U2V0XCIsYS5hbHRlcm5hdGVTZXRzLGZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJhbHRlcm5hdGVTZXRUYWJsZVwiLEllLnVzaG9ydExpc3QoXCJhbHRlcm5hdGVcIixhKSl9KSkpfSxuZls0XT1mdW5jdGlvbihhKXtyZXR1cm4geGUuYXNzZXJ0KDE9PT1hLnN1YnN0Rm9ybWF0LFwiTG9va3VwIHR5cGUgNCBzdWJzdEZvcm1hdCBtdXN0IGJlIDEuXCIpLG5ldyBJZS5UYWJsZShcInN1YnN0aXR1dGlvblRhYmxlXCIsW3tuYW1lOlwic3Vic3RGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJjb3ZlcmFnZVwiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Db3ZlcmFnZShhLmNvdmVyYWdlKX1dLmNvbmNhdChJZS50YWJsZUxpc3QoXCJsaWdTZXRcIixhLmxpZ2F0dXJlU2V0cyxmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwibGlnYXR1cmVTZXRUYWJsZVwiLEllLnRhYmxlTGlzdChcImxpZ2F0dXJlXCIsYSxmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwibGlnYXR1cmVUYWJsZVwiLFt7bmFtZTpcImxpZ0dseXBoXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEubGlnR2x5cGh9XS5jb25jYXQoSWUudXNob3J0TGlzdChcImNvbXBvbmVudFwiLGEuY29tcG9uZW50cyxhLmNvbXBvbmVudHMubGVuZ3RoKzEpKSl9KSl9KSkpfTt2YXIgb2Y9e3BhcnNlOmliLG1ha2U6amJ9LHBmPXtwYXJzZTprYixtYWtlOmxifSxxZj17bWFrZTpwYixmb250VG9UYWJsZTpzYixjb21wdXRlQ2hlY2tTdW06bmJ9O3diLnByb3RvdHlwZT17c2VhcmNoVGFnOnRiLGJpblNlYXJjaDp1YixnZXRUYWJsZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmZvbnQudGFibGVzW3RoaXMudGFibGVOYW1lXTtyZXR1cm4hYiYmYSYmKGI9dGhpcy5mb250LnRhYmxlc1t0aGlzLnRhYmxlTmFtZV09dGhpcy5jcmVhdGVEZWZhdWx0VGFibGUoKSksYn0sZ2V0U2NyaXB0TmFtZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFRhYmxlKCk7cmV0dXJuIGE/YS5zY3JpcHRzLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS50YWd9KTpbXX0sZ2V0RGVmYXVsdFNjcmlwdE5hbWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFRhYmxlKCk7aWYoYSl7Zm9yKHZhciBiPSExLGM9MDtjPGEuc2NyaXB0cy5sZW5ndGg7YysrKXt2YXIgZD1hLnNjcmlwdHNbY10udGFnO2lmKFwiREZMVFwiPT09ZClyZXR1cm4gZDtcImxhdG5cIj09PWQmJihiPSEwKX1yZXR1cm4gYj9cImxhdG5cIjp2b2lkIDB9fSxnZXRTY3JpcHRUYWJsZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0VGFibGUoYik7aWYoYyl7YT1hfHxcIkRGTFRcIjt2YXIgZD1jLnNjcmlwdHMsZT10YihjLnNjcmlwdHMsYSk7aWYoZT49MClyZXR1cm4gZFtlXS5zY3JpcHQ7aWYoYil7dmFyIGY9e3RhZzphLHNjcmlwdDp7ZGVmYXVsdExhbmdTeXM6e3Jlc2VydmVkOjAscmVxRmVhdHVyZUluZGV4OjY1NTM1LGZlYXR1cmVJbmRleGVzOltdfSxsYW5nU3lzUmVjb3JkczpbXX19O3JldHVybiBkLnNwbGljZSgtMS1lLDAsZiksZi5zY3JpcHR9fX0sZ2V0TGFuZ1N5c1RhYmxlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmdldFNjcmlwdFRhYmxlKGEsYyk7aWYoZCl7aWYoIWJ8fFwiZGZsdFwiPT09Ynx8XCJERkxUXCI9PT1iKXJldHVybiBkLmRlZmF1bHRMYW5nU3lzO3ZhciBlPXRiKGQubGFuZ1N5c1JlY29yZHMsYik7aWYoZT49MClyZXR1cm4gZC5sYW5nU3lzUmVjb3Jkc1tlXS5sYW5nU3lzO2lmKGMpe3ZhciBmPXt0YWc6YixsYW5nU3lzOntyZXNlcnZlZDowLHJlcUZlYXR1cmVJbmRleDo2NTUzNSxmZWF0dXJlSW5kZXhlczpbXX19O3JldHVybiBkLmxhbmdTeXNSZWNvcmRzLnNwbGljZSgtMS1lLDAsZiksZi5sYW5nU3lzfX19LGdldEZlYXR1cmVUYWJsZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldExhbmdTeXNUYWJsZShhLGIsZCk7aWYoZSl7Zm9yKHZhciBmLGc9ZS5mZWF0dXJlSW5kZXhlcyxoPXRoaXMuZm9udC50YWJsZXNbdGhpcy50YWJsZU5hbWVdLmZlYXR1cmVzLGk9MDtpPGcubGVuZ3RoO2krKylpZihmPWhbZ1tpXV0sZi50YWc9PT1jKXJldHVybiBmLmZlYXR1cmU7aWYoZCl7dmFyIGo9aC5sZW5ndGg7cmV0dXJuIHhlLmFzc2VydCgwPT09anx8Yz49aFtqLTFdLnRhZyxcIkZlYXR1cmVzIG11c3QgYmUgYWRkZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLlwiKSxmPXt0YWc6YyxmZWF0dXJlOntwYXJhbXM6MCxsb29rdXBMaXN0SW5kZXhlczpbXX19LGgucHVzaChmKSxnLnB1c2goaiksZi5mZWF0dXJlfX19LGdldExvb2t1cFRhYmxlczpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPXRoaXMuZ2V0RmVhdHVyZVRhYmxlKGEsYixjLGUpLGc9W107aWYoZil7Zm9yKHZhciBoLGk9Zi5sb29rdXBMaXN0SW5kZXhlcyxqPXRoaXMuZm9udC50YWJsZXNbdGhpcy50YWJsZU5hbWVdLmxvb2t1cHMsaz0wO2s8aS5sZW5ndGg7aysrKWg9altpW2tdXSxoLmxvb2t1cFR5cGU9PT1kJiZnLnB1c2goaCk7aWYoMD09PWcubGVuZ3RoJiZlKXtoPXtsb29rdXBUeXBlOmQsbG9va3VwRmxhZzowLHN1YnRhYmxlczpbXSxtYXJrRmlsdGVyaW5nU2V0OnZvaWQgMH07dmFyIGw9ai5sZW5ndGg7cmV0dXJuIGoucHVzaChoKSxpLnB1c2gobCksW2hdfX1yZXR1cm4gZ30sZ2V0R2x5cGhDbGFzczpmdW5jdGlvbihhLGIpe3N3aXRjaChhLmZvcm1hdCl7Y2FzZSAxOnJldHVybiBhLnN0YXJ0R2x5cGg8PWImJmI8YS5zdGFydEdseXBoK2EuY2xhc3Nlcy5sZW5ndGg/YS5jbGFzc2VzW2ItYS5zdGFydEdseXBoXTowO2Nhc2UgMjp2YXIgYz12YihhLnJhbmdlcyxiKTtyZXR1cm4gYz9jLmNsYXNzSWQ6MH19LGdldENvdmVyYWdlSW5kZXg6ZnVuY3Rpb24oYSxiKXtzd2l0Y2goYS5mb3JtYXQpe2Nhc2UgMTp2YXIgYz11YihhLmdseXBocyxiKTtyZXR1cm4gYz49MD9jOi0xO2Nhc2UgMjp2YXIgZD12YihhLnJhbmdlcyxiKTtyZXR1cm4gZD9kLmluZGV4K2ItZC5zdGFydDotMX19LGV4cGFuZENvdmVyYWdlOmZ1bmN0aW9uKGEpe2lmKDE9PT1hLmZvcm1hdClyZXR1cm4gYS5nbHlwaHM7Zm9yKHZhciBiPVtdLGM9YS5yYW5nZXMsZD0wO2Q8Yy5sZW5ndGg7ZCsrKWZvcih2YXIgZT1jW2RdLGY9ZS5zdGFydCxnPWUuZW5kLGg9ZjtoPD1nO2grKyliLnB1c2goaCk7cmV0dXJuIGJ9fSx4Yi5wcm90b3R5cGU9d2IucHJvdG90eXBlLHhiLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXREZWZhdWx0U2NyaXB0TmFtZSgpO3RoaXMuZGVmYXVsdEtlcm5pbmdUYWJsZXM9dGhpcy5nZXRLZXJuaW5nVGFibGVzKGEpfSx4Yi5wcm90b3R5cGUuZ2V0S2VybmluZ1ZhbHVlPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPTA7ZTxhLmxlbmd0aDtlKyspZm9yKHZhciBmPWFbZV0uc3VidGFibGVzLGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGg9ZltnXSxpPWQuZ2V0Q292ZXJhZ2VJbmRleChoLmNvdmVyYWdlLGIpO2lmKCEoaTwwKSlzd2l0Y2goaC5wb3NGb3JtYXQpe2Nhc2UgMTpmb3IodmFyIGo9aC5wYWlyU2V0c1tpXSxrPTA7azxqLmxlbmd0aDtrKyspe3ZhciBsPWpba107aWYobC5zZWNvbmRHbHlwaD09PWMpcmV0dXJuIGwudmFsdWUxJiZsLnZhbHVlMS54QWR2YW5jZXx8MH1icmVhaztjYXNlIDI6dmFyIG09ZC5nZXRHbHlwaENsYXNzKGguY2xhc3NEZWYxLGIpLG49ZC5nZXRHbHlwaENsYXNzKGguY2xhc3NEZWYyLGMpLG89aC5jbGFzc1JlY29yZHNbbV1bbl07cmV0dXJuIG8udmFsdWUxJiZvLnZhbHVlMS54QWR2YW5jZXx8MH19cmV0dXJuIDB9LHhiLnByb3RvdHlwZS5nZXRLZXJuaW5nVGFibGVzPWZ1bmN0aW9uKGEsYil7aWYodGhpcy5mb250LnRhYmxlcy5ncG9zKXJldHVybiB0aGlzLmdldExvb2t1cFRhYmxlcyhhLGIsXCJrZXJuXCIsMil9LHliLnByb3RvdHlwZT13Yi5wcm90b3R5cGUseWIucHJvdG90eXBlLmNyZWF0ZURlZmF1bHRUYWJsZT1mdW5jdGlvbigpe3JldHVybnt2ZXJzaW9uOjEsc2NyaXB0czpbe3RhZzpcIkRGTFRcIixzY3JpcHQ6e2RlZmF1bHRMYW5nU3lzOntyZXNlcnZlZDowLHJlcUZlYXR1cmVJbmRleDo2NTUzNSxmZWF0dXJlSW5kZXhlczpbXX0sbGFuZ1N5c1JlY29yZHM6W119fV0sZmVhdHVyZXM6W10sbG9va3VwczpbXX19LHliLnByb3RvdHlwZS5nZXRTaW5nbGU9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD10aGlzLGU9W10sZj10aGlzLmdldExvb2t1cFRhYmxlcyhiLGMsYSwxKSxnPTA7ZzxmLmxlbmd0aDtnKyspZm9yKHZhciBoPWZbZ10uc3VidGFibGVzLGk9MDtpPGgubGVuZ3RoO2krKyl7dmFyIGo9aFtpXSxrPWQuZXhwYW5kQ292ZXJhZ2Uoai5jb3ZlcmFnZSksbD12b2lkIDA7aWYoMT09PWouc3Vic3RGb3JtYXQpe3ZhciBtPWouZGVsdGFHbHlwaElkO2ZvcihsPTA7bDxrLmxlbmd0aDtsKyspe3ZhciBuPWtbbF07ZS5wdXNoKHtzdWI6bixieTpuK219KX19ZWxzZXt2YXIgbz1qLnN1YnN0aXR1dGU7Zm9yKGw9MDtsPGsubGVuZ3RoO2wrKyllLnB1c2goe3N1YjprW2xdLGJ5Om9bbF19KX19cmV0dXJuIGV9LHliLnByb3RvdHlwZS5nZXRBbHRlcm5hdGVzPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPVtdLGY9dGhpcy5nZXRMb29rdXBUYWJsZXMoYixjLGEsMyksZz0wO2c8Zi5sZW5ndGg7ZysrKWZvcih2YXIgaD1mW2ddLnN1YnRhYmxlcyxpPTA7aTxoLmxlbmd0aDtpKyspZm9yKHZhciBqPWhbaV0saz1kLmV4cGFuZENvdmVyYWdlKGouY292ZXJhZ2UpLGw9ai5hbHRlcm5hdGVTZXRzLG09MDttPGsubGVuZ3RoO20rKyllLnB1c2goe3N1YjprW21dLGJ5OmxbbV19KTtyZXR1cm4gZX0seWIucHJvdG90eXBlLmdldExpZ2F0dXJlcz1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT1bXSxmPXRoaXMuZ2V0TG9va3VwVGFibGVzKGIsYyxhLDQpLGc9MDtnPGYubGVuZ3RoO2crKylmb3IodmFyIGg9ZltnXS5zdWJ0YWJsZXMsaT0wO2k8aC5sZW5ndGg7aSsrKWZvcih2YXIgaj1oW2ldLGs9ZC5leHBhbmRDb3ZlcmFnZShqLmNvdmVyYWdlKSxsPWoubGlnYXR1cmVTZXRzLG09MDttPGsubGVuZ3RoO20rKylmb3IodmFyIG49a1ttXSxvPWxbbV0scD0wO3A8by5sZW5ndGg7cCsrKXt2YXIgcT1vW3BdO2UucHVzaCh7c3ViOltuXS5jb25jYXQocS5jb21wb25lbnRzKSxieTpxLmxpZ0dseXBofSl9cmV0dXJuIGV9LHliLnByb3RvdHlwZS5hZGRTaW5nbGU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5nZXRMb29rdXBUYWJsZXMoYyxkLGEsMSwhMClbMF0sZj1BYihlLDIse3N1YnN0Rm9ybWF0OjIsY292ZXJhZ2U6e2Zvcm1hdDoxLGdseXBoczpbXX0sc3Vic3RpdHV0ZTpbXX0pO3hlLmFzc2VydCgxPT09Zi5jb3ZlcmFnZS5mb3JtYXQsXCJMaWdhdHVyZTogdW5hYmxlIHRvIG1vZGlmeSBjb3ZlcmFnZSB0YWJsZSBmb3JtYXQgXCIrZi5jb3ZlcmFnZS5mb3JtYXQpO3ZhciBnPWIuc3ViLGg9dGhpcy5iaW5TZWFyY2goZi5jb3ZlcmFnZS5nbHlwaHMsZyk7aDwwJiYoaD0tMS1oLGYuY292ZXJhZ2UuZ2x5cGhzLnNwbGljZShoLDAsZyksZi5zdWJzdGl0dXRlLnNwbGljZShoLDAsMCkpLGYuc3Vic3RpdHV0ZVtoXT1iLmJ5fSx5Yi5wcm90b3R5cGUuYWRkQWx0ZXJuYXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZ2V0TG9va3VwVGFibGVzKGMsZCxhLDMsITApWzBdLGY9QWIoZSwxLHtzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOntmb3JtYXQ6MSxnbHlwaHM6W119LGFsdGVybmF0ZVNldHM6W119KTt4ZS5hc3NlcnQoMT09PWYuY292ZXJhZ2UuZm9ybWF0LFwiTGlnYXR1cmU6IHVuYWJsZSB0byBtb2RpZnkgY292ZXJhZ2UgdGFibGUgZm9ybWF0IFwiK2YuY292ZXJhZ2UuZm9ybWF0KTt2YXIgZz1iLnN1YixoPXRoaXMuYmluU2VhcmNoKGYuY292ZXJhZ2UuZ2x5cGhzLGcpO2g8MCYmKGg9LTEtaCxmLmNvdmVyYWdlLmdseXBocy5zcGxpY2UoaCwwLGcpLGYuYWx0ZXJuYXRlU2V0cy5zcGxpY2UoaCwwLDApKSxmLmFsdGVybmF0ZVNldHNbaF09Yi5ieX0seWIucHJvdG90eXBlLmFkZExpZ2F0dXJlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZ2V0TG9va3VwVGFibGVzKGMsZCxhLDQsITApWzBdLGY9ZS5zdWJ0YWJsZXNbMF07Znx8KGY9e3N1YnN0Rm9ybWF0OjEsY292ZXJhZ2U6e2Zvcm1hdDoxLGdseXBoczpbXX0sbGlnYXR1cmVTZXRzOltdfSxlLnN1YnRhYmxlc1swXT1mKSx4ZS5hc3NlcnQoMT09PWYuY292ZXJhZ2UuZm9ybWF0LFwiTGlnYXR1cmU6IHVuYWJsZSB0byBtb2RpZnkgY292ZXJhZ2UgdGFibGUgZm9ybWF0IFwiK2YuY292ZXJhZ2UuZm9ybWF0KTt2YXIgZz1iLnN1YlswXSxoPWIuc3ViLnNsaWNlKDEpLGk9e2xpZ0dseXBoOmIuYnksY29tcG9uZW50czpofSxqPXRoaXMuYmluU2VhcmNoKGYuY292ZXJhZ2UuZ2x5cGhzLGcpO2lmKGo+PTApe2Zvcih2YXIgaz1mLmxpZ2F0dXJlU2V0c1tqXSxsPTA7bDxrLmxlbmd0aDtsKyspaWYoemIoa1tsXS5jb21wb25lbnRzLGgpKXJldHVybjtrLnB1c2goaSl9ZWxzZSBqPS0xLWosZi5jb3ZlcmFnZS5nbHlwaHMuc3BsaWNlKGosMCxnKSxmLmxpZ2F0dXJlU2V0cy5zcGxpY2UoaiwwLFtpXSl9LHliLnByb3RvdHlwZS5nZXRGZWF0dXJlPWZ1bmN0aW9uKGEsYixjKXtpZigvc3NcXGRcXGQvLnRlc3QoYSkpcmV0dXJuIHRoaXMuZ2V0U2luZ2xlKGEsYixjKTtzd2l0Y2goYSl7Y2FzZVwiYWFsdFwiOmNhc2VcInNhbHRcIjpyZXR1cm4gdGhpcy5nZXRTaW5nbGUoYSxiLGMpLmNvbmNhdCh0aGlzLmdldEFsdGVybmF0ZXMoYSxiLGMpKTtjYXNlXCJkbGlnXCI6Y2FzZVwibGlnYVwiOmNhc2VcInJsaWdcIjpyZXR1cm4gdGhpcy5nZXRMaWdhdHVyZXMoYSxiLGMpfX0seWIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhLGIsYyxkKXtpZigvc3NcXGRcXGQvLnRlc3QoYSkpcmV0dXJuIHRoaXMuYWRkU2luZ2xlKGEsYixjLGQpO3N3aXRjaChhKXtjYXNlXCJhYWx0XCI6Y2FzZVwic2FsdFwiOnJldHVyblwibnVtYmVyXCI9PXR5cGVvZiBiLmJ5P3RoaXMuYWRkU2luZ2xlKGEsYixjLGQpOnRoaXMuYWRkQWx0ZXJuYXRlKGEsYixjLGQpO2Nhc2VcImRsaWdcIjpjYXNlXCJsaWdhXCI6Y2FzZVwicmxpZ1wiOnJldHVybiB0aGlzLmFkZExpZ2F0dXJlKGEsYixjLGQpfX07dmFyIHJmLHNmLHRmLHVmLHZmPXtnZXRQYXRoOkpiLHBhcnNlOkxifSx3Zj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnNyUGVyaW9kLGM9dGhpcy5zclBoYXNlLGQ9dGhpcy5zclRocmVzaG9sZCxlPTE7cmV0dXJuIGE8MCYmKGE9LWEsZT0tMSksYSs9ZC1jLGE9TWF0aC50cnVuYyhhL2IpKmIsYSs9YyxhPDA/YyplOmEqZX0seGY9e3g6MSx5OjAsYXhpczpcInhcIixkaXN0YW5jZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYz9hLnhvOmEueCktKGQ/Yi54bzpiLngpfSxpbnRlcnBvbGF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztyZXR1cm4gZCYmZCE9PXRoaXM/KGU9ZC5kaXN0YW5jZShhLGIsITAsITApLGY9ZC5kaXN0YW5jZShhLGMsITAsITApLGk9ZC5kaXN0YW5jZShiLGIsITEsITApLGo9ZC5kaXN0YW5jZShjLGMsITEsITApLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkIHhmLnNldFJlbGF0aXZlKGEsYSwoaStqKS8yLGQsITApOnZvaWQgeGYuc2V0UmVsYXRpdmUoYSxhLChpKmgraipnKS9rLGQsITApKTooZT1hLnhvLWIueG8sZj1hLnhvLWMueG8saT1iLngtYi54byxqPWMueC1jLnhvLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkKGEueD1hLnhvKyhpK2opLzIpOnZvaWQoYS54PWEueG8rKGkqaCtqKmcpL2spKX0sbm9ybWFsU2xvcGU6TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHNldFJlbGF0aXZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoIWR8fGQ9PT10aGlzKXJldHVybiB2b2lkKGEueD0oZT9iLnhvOmIueCkrYyk7dmFyIGY9ZT9iLnhvOmIueCxnPWU/Yi55bzpiLnksaD1mK2MqZC54LGk9ZytjKmQueTthLng9aCsoYS55LWkpL2Qubm9ybWFsU2xvcGV9LHNsb3BlOjAsdG91Y2g6ZnVuY3Rpb24oYSl7YS54VG91Y2hlZD0hMH0sdG91Y2hlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS54VG91Y2hlZH0sdW50b3VjaDpmdW5jdGlvbihhKXthLnhUb3VjaGVkPSExfX0seWY9e3g6MCx5OjEsYXhpczpcInlcIixkaXN0YW5jZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYz9hLnlvOmEueSktKGQ/Yi55bzpiLnkpfSxpbnRlcnBvbGF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztyZXR1cm4gZCYmZCE9PXRoaXM/KGU9ZC5kaXN0YW5jZShhLGIsITAsITApLGY9ZC5kaXN0YW5jZShhLGMsITAsITApLGk9ZC5kaXN0YW5jZShiLGIsITEsITApLGo9ZC5kaXN0YW5jZShjLGMsITEsITApLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkIHlmLnNldFJlbGF0aXZlKGEsYSwoaStqKS8yLGQsITApOnZvaWQgeWYuc2V0UmVsYXRpdmUoYSxhLChpKmgraipnKS9rLGQsITApKTooZT1hLnlvLWIueW8sZj1hLnlvLWMueW8saT1iLnktYi55byxqPWMueS1jLnlvLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkKGEueT1hLnlvKyhpK2opLzIpOnZvaWQoYS55PWEueW8rKGkqaCtqKmcpL2spKX0sbm9ybWFsU2xvcGU6MCxzZXRSZWxhdGl2ZTpmdW5jdGlvbihhLGIsYyxkLGUpe2lmKCFkfHxkPT09dGhpcylyZXR1cm4gdm9pZChhLnk9KGU/Yi55bzpiLnkpK2MpO3ZhciBmPWU/Yi54bzpiLngsZz1lP2IueW86Yi55LGg9ZitjKmQueCxpPWcrYypkLnk7YS55PWkrZC5ub3JtYWxTbG9wZSooYS54LWgpfSxzbG9wZTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdG91Y2g6ZnVuY3Rpb24oYSl7YS55VG91Y2hlZD0hMH0sdG91Y2hlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS55VG91Y2hlZH0sdW50b3VjaDpmdW5jdGlvbihhKXthLnlUb3VjaGVkPSExfX07T2JqZWN0LmZyZWV6ZSh4ZiksT2JqZWN0LmZyZWV6ZSh5ZiksVGIucHJvdG90eXBlLmRpc3RhbmNlPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLngqeGYuZGlzdGFuY2UoYSxiLGMsZCkrdGhpcy55KnlmLmRpc3RhbmNlKGEsYixjLGQpfSxUYi5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7aWYoZz1kLmRpc3RhbmNlKGEsYiwhMCwhMCksaD1kLmRpc3RhbmNlKGEsYywhMCwhMCksZT1kLmRpc3RhbmNlKGIsYiwhMSwhMCksZj1kLmRpc3RhbmNlKGMsYywhMSwhMCksaT1NYXRoLmFicyhnKSxqPU1hdGguYWJzKGgpLDA9PT0oaz1pK2opKXJldHVybiB2b2lkIHRoaXMuc2V0UmVsYXRpdmUoYSxhLChlK2YpLzIsZCwhMCk7dGhpcy5zZXRSZWxhdGl2ZShhLGEsKGUqaitmKmkpL2ssZCwhMCl9LFRiLnByb3RvdHlwZS5zZXRSZWxhdGl2ZT1mdW5jdGlvbihhLGIsYyxkLGUpe2Q9ZHx8dGhpczt2YXIgZj1lP2IueG86Yi54LGc9ZT9iLnlvOmIueSxoPWYrYypkLngsaT1nK2MqZC55LGo9ZC5ub3JtYWxTbG9wZSxrPXRoaXMuc2xvcGUsbD1hLngsbT1hLnk7YS54PShrKmwtaipoK2ktbSkvKGstaiksYS55PWsqKGEueC1sKSttfSxUYi5wcm90b3R5cGUudG91Y2g9ZnVuY3Rpb24oYSl7YS54VG91Y2hlZD0hMCxhLnlUb3VjaGVkPSEwfSxWYi5wcm90b3R5cGUubmV4dFRvdWNoZWQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMubmV4dFBvaW50T25Db250b3VyOyFhLnRvdWNoZWQoYikmJmIhPT10aGlzOyliPWIubmV4dFBvaW50T25Db250b3VyO3JldHVybiBifSxWYi5wcm90b3R5cGUucHJldlRvdWNoZWQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMucHJldlBvaW50T25Db250b3VyOyFhLnRvdWNoZWQoYikmJmIhPT10aGlzOyliPWIucHJldlBvaW50T25Db250b3VyO3JldHVybiBifTt2YXIgemY9T2JqZWN0LmZyZWV6ZShuZXcgVmIoMCwwKSksQWY9e2N2Q3V0SW46MTcvMTYsZGVsdGFCYXNlOjksZGVsdGFTaGlmdDouMTI1LGxvb3A6MSxtaW5EaXM6MSxhdXRvRmxpcDohMH07TWIucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oYixjKXtpZihcIm51bWJlclwiIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3IoXCJQb2ludCBzaXplIGlzIG5vdCBhIG51bWJlciFcIik7aWYoISh0aGlzLl9lcnJvclN0YXRlPjIpKXt2YXIgZD10aGlzLmZvbnQsZT10aGlzLl9wcmVwU3RhdGU7aWYoIWV8fGUucHBlbSE9PWMpe3ZhciBmPXRoaXMuX2ZwZ21TdGF0ZTtpZighZil7V2IucHJvdG90eXBlPUFmLGY9dGhpcy5fZnBnbVN0YXRlPW5ldyBXYihcImZwZ21cIixkLnRhYmxlcy5mcGdtKSxmLmZ1bmNzPVtdLGYuZm9udD1kLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgRlBHTS0tLVwiKSxmLnN0ZXA9LTEpO3RyeXtzZihmKX1jYXRjaChhKXtyZXR1cm4gY29uc29sZS5sb2coXCJIaW50aW5nIGVycm9yIGluIEZQR006XCIrYSksdm9pZCh0aGlzLl9lcnJvclN0YXRlPTMpfX1XYi5wcm90b3R5cGU9ZixlPXRoaXMuX3ByZXBTdGF0ZT1uZXcgV2IoXCJwcmVwXCIsZC50YWJsZXMucHJlcCksZS5wcGVtPWM7dmFyIGc9ZC50YWJsZXMuY3Z0O2lmKGcpZm9yKHZhciBoPWUuY3Z0PW5ldyBBcnJheShnLmxlbmd0aCksaT1jL2QudW5pdHNQZXJFbSxqPTA7ajxnLmxlbmd0aDtqKyspaFtqXT1nW2pdKmk7ZWxzZSBlLmN2dD1bXTthLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIFBSRVAtLS1cIiksZS5zdGVwPS0xKTt0cnl7c2YoZSl9Y2F0Y2goYSl7dGhpcy5fZXJyb3JTdGF0ZTwyJiZjb25zb2xlLmxvZyhcIkhpbnRpbmcgZXJyb3IgaW4gUFJFUDpcIithKSx0aGlzLl9lcnJvclN0YXRlPTJ9fWlmKCEodGhpcy5fZXJyb3JTdGF0ZT4xKSl0cnl7cmV0dXJuIHRmKGIsZSl9Y2F0Y2goYSl7cmV0dXJuIHRoaXMuX2Vycm9yU3RhdGU8MSYmKGNvbnNvbGUubG9nKFwiSGludGluZyBlcnJvcjpcIithKSxjb25zb2xlLmxvZyhcIk5vdGU6IGZ1cnRoZXIgaGludGluZyBlcnJvcnMgYXJlIHNpbGVuY2VkXCIpKSx2b2lkKHRoaXMuX2Vycm9yU3RhdGU9MSl9fX0sdGY9ZnVuY3Rpb24oYixjKXt2YXIgZCxlLGYsZz1jLnBwZW0vYy5mb250LnVuaXRzUGVyRW0saD1nLGk9Yi5jb21wb25lbnRzO2lmKFdiLnByb3RvdHlwZT1jLGkpe3ZhciBqPWMuZm9udDtlPVtdLGQ9W107Zm9yKHZhciBrPTA7azxpLmxlbmd0aDtrKyspe3ZhciBsPWlba10sbT1qLmdseXBocy5nZXQobC5nbHlwaEluZGV4KTtmPW5ldyBXYihcImdseWZcIixtLmluc3RydWN0aW9ucyksYS5ERUJVRyYmKGNvbnNvbGUubG9nKFwiLS0tRVhFQyBDT01QIFwiK2srXCItLS1cIiksZi5zdGVwPS0xKSx1ZihtLGYsZyxoKTtmb3IodmFyIG49TWF0aC5yb3VuZChsLmR4KmcpLG89TWF0aC5yb3VuZChsLmR5KmgpLHA9Zi5nWm9uZSxxPWYuY29udG91cnMscj0wO3I8cC5sZW5ndGg7cisrKXt2YXIgcz1wW3JdO3MueFRvdWNoZWQ9cy55VG91Y2hlZD0hMSxzLnhvPXMueD1zLngrbixzLnlvPXMueT1zLnkrb312YXIgdD1lLmxlbmd0aDtlLnB1c2guYXBwbHkoZSxwKTtmb3IodmFyIHU9MDt1PHEubGVuZ3RoO3UrKylkLnB1c2gocVt1XSt0KX1iLmluc3RydWN0aW9ucyYmIWYuaW5oaWJpdEdyaWRGaXQmJihmPW5ldyBXYihcImdseWZcIixiLmluc3RydWN0aW9ucyksZi5nWm9uZT1mLnowPWYuejE9Zi56Mj1lLGYuY29udG91cnM9ZCxlLnB1c2gobmV3IFZiKDAsMCksbmV3IFZiKE1hdGgucm91bmQoYi5hZHZhbmNlV2lkdGgqZyksMCkpLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgQ09NUE9TSVRFLS0tXCIpLGYuc3RlcD0tMSksc2YoZiksZS5sZW5ndGgtPTIpfWVsc2UgZj1uZXcgV2IoXCJnbHlmXCIsYi5pbnN0cnVjdGlvbnMpLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgR0xZUEgtLS1cIiksZi5zdGVwPS0xKSx1ZihiLGYsZyxoKSxlPWYuZ1pvbmU7cmV0dXJuIGV9LHVmPWZ1bmN0aW9uKGIsYyxkLGUpe2Zvcih2YXIgZixnPWIucG9pbnRzfHxbXSxoPWcubGVuZ3RoLGk9Yy5nWm9uZT1jLnowPWMuejE9Yy56Mj1bXSxqPWMuY29udG91cnM9W10saz0wO2s8aDtrKyspZj1nW2tdLGlba109bmV3IFZiKGYueCpkLGYueSplLGYubGFzdFBvaW50T2ZDb250b3VyLGYub25DdXJ2ZSk7Zm9yKHZhciBsLG0sbj0wO248aDtuKyspZj1pW25dLGx8fChsPWYsai5wdXNoKG4pKSxmLmxhc3RQb2ludE9mQ29udG91cj8oZi5uZXh0UG9pbnRPbkNvbnRvdXI9bCxsLnByZXZQb2ludE9uQ29udG91cj1mLGw9dm9pZCAwKToobT1pW24rMV0sZi5uZXh0UG9pbnRPbkNvbnRvdXI9bSxtLnByZXZQb2ludE9uQ29udG91cj1mKTtpZighYy5pbmhpYml0R3JpZEZpdCl7aWYoYS5ERUJVRyl7Y29uc29sZS5sb2coXCJQUk9DRVNTSU5HIEdMWVBIXCIsYy5zdGFjayk7Zm9yKHZhciBvPTA7bzxoO28rKyljb25zb2xlLmxvZyhvLGlbb10ueCxpW29dLnkpfWlmKGkucHVzaChuZXcgVmIoMCwwKSxuZXcgVmIoTWF0aC5yb3VuZChiLmFkdmFuY2VXaWR0aCpkKSwwKSksc2YoYyksaS5sZW5ndGgtPTIsYS5ERUJVRyl7Y29uc29sZS5sb2coXCJGSU5JU0hFRCBHTFlQSFwiLGMuc3RhY2spO2Zvcih2YXIgcD0wO3A8aDtwKyspY29uc29sZS5sb2cocCxpW3BdLngsaVtwXS55KX19fSxzZj1mdW5jdGlvbihiKXt2YXIgYz1iLnByb2c7aWYoYyl7dmFyIGQsZT1jLmxlbmd0aDtmb3IoYi5pcD0wO2IuaXA8ZTtiLmlwKyspe2lmKGEuREVCVUcmJmIuc3RlcCsrLCEoZD1yZltjW2IuaXBdXSkpdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBpbnN0cnVjdGlvbjogMHhcIitOdW1iZXIoY1tiLmlwXSkudG9TdHJpbmcoMTYpKTtkKGIpfX19LHJmPVtaYi5iaW5kKHZvaWQgMCx5ZiksWmIuYmluZCh2b2lkIDAseGYpLCRiLmJpbmQodm9pZCAwLHlmKSwkYi5iaW5kKHZvaWQgMCx4ZiksX2IuYmluZCh2b2lkIDAseWYpLF9iLmJpbmQodm9pZCAwLHhmKSxhYy5iaW5kKHZvaWQgMCwwKSxhYy5iaW5kKHZvaWQgMCwxKSxiYy5iaW5kKHZvaWQgMCwwKSxiYy5iaW5kKHZvaWQgMCwxKSxjYyxkYyxlYyxmYyxnYyxoYyxpYyxqYyxrYyxsYyxtYyxuYyxvYyxwYyxxYyxyYyxzYyx0Yyx1Yyx2Yyx2b2lkIDAsdm9pZCAwLHdjLHhjLHljLHpjLEFjLERjLEVjLHZvaWQgMCx2b2lkIDAsdm9pZCAwLEJjLENjLEZjLHZvaWQgMCxHYy5iaW5kKHZvaWQgMCwwKSxHYy5iaW5kKHZvaWQgMCwxKSxIYy5iaW5kKHZvaWQgMCx5ZiksSGMuYmluZCh2b2lkIDAseGYpLEljLmJpbmQodm9pZCAwLDApLEljLmJpbmQodm9pZCAwLDEpLEpjLmJpbmQodm9pZCAwLDApLEpjLmJpbmQodm9pZCAwLDEpLEtjLmJpbmQodm9pZCAwLDApLEtjLmJpbmQodm9pZCAwLDEpLExjLE1jLE5jLmJpbmQodm9pZCAwLDApLE5jLmJpbmQodm9pZCAwLDEpLE9jLFBjLFFjLmJpbmQodm9pZCAwLDApLFFjLmJpbmQodm9pZCAwLDEpLFJjLFNjLFRjLFVjLFZjLFdjLFhjLmJpbmQodm9pZCAwLDApLFhjLmJpbmQodm9pZCAwLDEpLHZvaWQgMCxZYy5iaW5kKHZvaWQgMCwwKSxZYy5iaW5kKHZvaWQgMCwxKSxaYyx2b2lkIDAsJGMsdm9pZCAwLHZvaWQgMCxfYyxhZCxiZCxjZCxkZCxlZCxmZCxnZCxoZCxpZCxqZCxrZCxsZCxtZC5iaW5kKHZvaWQgMCwxKSxuZCxvZCxwZCxxZCxyZCxzZCx0ZCx1ZCx2ZCx3ZCx4ZC5iaW5kKHZvaWQgMCwwKSx4ZC5iaW5kKHZvaWQgMCwxKSx4ZC5iaW5kKHZvaWQgMCwyKSx4ZC5iaW5kKHZvaWQgMCwzKSx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAseWQsbWQuYmluZCh2b2lkIDAsMiksbWQuYmluZCh2b2lkIDAsMyksemQuYmluZCh2b2lkIDAsMSksemQuYmluZCh2b2lkIDAsMiksemQuYmluZCh2b2lkIDAsMyksQWQsQmQsdm9pZCAwLHZvaWQgMCxDZCx2b2lkIDAsRGQsRWQseGMseGMsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxGZCxHZC5iaW5kKHZvaWQgMCwwKSxHZC5iaW5kKHZvaWQgMCwxKSxIZCx2b2lkIDAsSWQsSmQsS2QsTGQsTWQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsTmQuYmluZCh2b2lkIDAsMSksTmQuYmluZCh2b2lkIDAsMiksTmQuYmluZCh2b2lkIDAsMyksTmQuYmluZCh2b2lkIDAsNCksTmQuYmluZCh2b2lkIDAsNSksTmQuYmluZCh2b2lkIDAsNiksTmQuYmluZCh2b2lkIDAsNyksTmQuYmluZCh2b2lkIDAsOCksT2QuYmluZCh2b2lkIDAsMSksT2QuYmluZCh2b2lkIDAsMiksT2QuYmluZCh2b2lkIDAsMyksT2QuYmluZCh2b2lkIDAsNCksT2QuYmluZCh2b2lkIDAsNSksT2QuYmluZCh2b2lkIDAsNiksT2QuYmluZCh2b2lkIDAsNyksT2QuYmluZCh2b2lkIDAsOCksUGQuYmluZCh2b2lkIDAsMCwwLDAsMCwwKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwwLDEpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDAsMiksUGQuYmluZCh2b2lkIDAsMCwwLDAsMCwzKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwxLDApLFBkLmJpbmQodm9pZCAwLDAsMCwwLDEsMSksUGQuYmluZCh2b2lkIDAsMCwwLDAsMSwyKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwxLDMpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDAsMCksUGQuYmluZCh2b2lkIDAsMCwwLDEsMCwxKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwwLDIpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDAsMyksUGQuYmluZCh2b2lkIDAsMCwwLDEsMSwwKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwxLDEpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDEsMiksUGQuYmluZCh2b2lkIDAsMCwwLDEsMSwzKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwwLDApLFBkLmJpbmQodm9pZCAwLDAsMSwwLDAsMSksUGQuYmluZCh2b2lkIDAsMCwxLDAsMCwyKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwwLDMpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDEsMCksUGQuYmluZCh2b2lkIDAsMCwxLDAsMSwxKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwxLDIpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDEsMyksUGQuYmluZCh2b2lkIDAsMCwxLDEsMCwwKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwwLDEpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDAsMiksUGQuYmluZCh2b2lkIDAsMCwxLDEsMCwzKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwxLDApLFBkLmJpbmQodm9pZCAwLDAsMSwxLDEsMSksUGQuYmluZCh2b2lkIDAsMCwxLDEsMSwyKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwxLDMpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDAsMCksUGQuYmluZCh2b2lkIDAsMSwwLDAsMCwxKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwwLDIpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDAsMyksUGQuYmluZCh2b2lkIDAsMSwwLDAsMSwwKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwxLDEpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDEsMiksUGQuYmluZCh2b2lkIDAsMSwwLDAsMSwzKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwwLDApLFBkLmJpbmQodm9pZCAwLDEsMCwxLDAsMSksUGQuYmluZCh2b2lkIDAsMSwwLDEsMCwyKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwwLDMpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDEsMCksUGQuYmluZCh2b2lkIDAsMSwwLDEsMSwxKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwxLDIpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDEsMyksUGQuYmluZCh2b2lkIDAsMSwxLDAsMCwwKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwwLDEpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDAsMiksUGQuYmluZCh2b2lkIDAsMSwxLDAsMCwzKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwxLDApLFBkLmJpbmQodm9pZCAwLDEsMSwwLDEsMSksUGQuYmluZCh2b2lkIDAsMSwxLDAsMSwyKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwxLDMpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDAsMCksUGQuYmluZCh2b2lkIDAsMSwxLDEsMCwxKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwwLDIpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDAsMyksUGQuYmluZCh2b2lkIDAsMSwxLDEsMSwwKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwxLDEpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDEsMiksUGQuYmluZCh2b2lkIDAsMSwxLDEsMSwzKV07dmFyIEJmPUFycmF5LmZyb218fGZ1bmN0aW9uKGEpe3JldHVybiBhLm1hdGNoKC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdP3xbXlxcdUQ4MDAtXFx1REZGRl18Li9nKXx8W119O1FkLnByb3RvdHlwZS5oYXNDaGFyPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09dGhpcy5lbmNvZGluZy5jaGFyVG9HbHlwaEluZGV4KGEpfSxRZC5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lbmNvZGluZy5jaGFyVG9HbHlwaEluZGV4KGEpfSxRZC5wcm90b3R5cGUuY2hhclRvR2x5cGg9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jaGFyVG9HbHlwaEluZGV4KGEpLGM9dGhpcy5nbHlwaHMuZ2V0KGIpO3JldHVybiBjfHwoYz10aGlzLmdseXBocy5nZXQoMCkpLGN9LFFkLnByb3RvdHlwZS5zdHJpbmdUb0dseXBocz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Yj1ifHx0aGlzLmRlZmF1bHRSZW5kZXJPcHRpb25zO2Zvcih2YXIgZD1CZihhKSxlPVtdLGY9MDtmPGQubGVuZ3RoO2YrPTEpe3ZhciBnPWRbZl07ZS5wdXNoKGMuY2hhclRvR2x5cGhJbmRleChnKSl9dmFyIGg9ZS5sZW5ndGg7aWYoYi5mZWF0dXJlcyl7dmFyIGk9Yi5zY3JpcHR8fHRoaXMuc3Vic3RpdHV0aW9uLmdldERlZmF1bHRTY3JpcHROYW1lKCksaj1bXTtiLmZlYXR1cmVzLmxpZ2EmJihqPWouY29uY2F0KHRoaXMuc3Vic3RpdHV0aW9uLmdldEZlYXR1cmUoXCJsaWdhXCIsaSxiLmxhbmd1YWdlKSkpLGIuZmVhdHVyZXMucmxpZyYmKGo9ai5jb25jYXQodGhpcy5zdWJzdGl0dXRpb24uZ2V0RmVhdHVyZShcInJsaWdcIixpLGIubGFuZ3VhZ2UpKSk7Zm9yKHZhciBrPTA7azxoO2srPTEpZm9yKHZhciBsPTA7bDxqLmxlbmd0aDtsKyspe2Zvcih2YXIgbT1qW2xdLG49bS5zdWIsbz1uLmxlbmd0aCxwPTA7cDxvJiZuW3BdPT09ZVtrK3BdOylwKys7cD09PW8mJihlLnNwbGljZShrLG8sbS5ieSksaD1oLW8rMSl9fWZvcih2YXIgcT1uZXcgQXJyYXkoaCkscj10aGlzLmdseXBocy5nZXQoMCkscz0wO3M8aDtzKz0xKXFbc109Yy5nbHlwaHMuZ2V0KGVbc10pfHxyO3JldHVybiBxfSxRZC5wcm90b3R5cGUubmFtZVRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nbHlwaE5hbWVzLm5hbWVUb0dseXBoSW5kZXgoYSl9LFFkLnByb3RvdHlwZS5uYW1lVG9HbHlwaD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm5hbWVUb0dseXBoSW5kZXgoYSksYz10aGlzLmdseXBocy5nZXQoYik7cmV0dXJuIGN8fChjPXRoaXMuZ2x5cGhzLmdldCgwKSksY30sUWQucHJvdG90eXBlLmdseXBoSW5kZXhUb05hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ2x5cGhOYW1lcy5nbHlwaEluZGV4VG9OYW1lP3RoaXMuZ2x5cGhOYW1lcy5nbHlwaEluZGV4VG9OYW1lKGEpOlwiXCJ9LFFkLnByb3RvdHlwZS5nZXRLZXJuaW5nVmFsdWU9ZnVuY3Rpb24oYSxiKXthPWEuaW5kZXh8fGEsYj1iLmluZGV4fHxiO3ZhciBjPXRoaXMucG9zaXRpb24uZGVmYXVsdEtlcm5pbmdUYWJsZXM7cmV0dXJuIGM/dGhpcy5wb3NpdGlvbi5nZXRLZXJuaW5nVmFsdWUoYyxhLGIpOnRoaXMua2VybmluZ1BhaXJzW2ErXCIsXCIrYl18fDB9LFFkLnByb3RvdHlwZS5kZWZhdWx0UmVuZGVyT3B0aW9ucz17a2VybmluZzohMCxmZWF0dXJlczp7bGlnYTohMCxybGlnOiEwfX0sUWQucHJvdG90eXBlLmZvckVhY2hHbHlwaD1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9dGhpcztiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD12b2lkIDAhPT1kP2Q6NzIsZT1lfHx0aGlzLmRlZmF1bHRSZW5kZXJPcHRpb25zO3ZhciBoLGk9MS90aGlzLnVuaXRzUGVyRW0qZCxqPXRoaXMuc3RyaW5nVG9HbHlwaHMoYSxlKTtpZihlLmtlcm5pbmcpe3ZhciBrPWUuc2NyaXB0fHx0aGlzLnBvc2l0aW9uLmdldERlZmF1bHRTY3JpcHROYW1lKCk7aD10aGlzLnBvc2l0aW9uLmdldEtlcm5pbmdUYWJsZXMoayxlLmxhbmd1YWdlKX1mb3IodmFyIGw9MDtsPGoubGVuZ3RoO2wrPTEpe3ZhciBtPWpbbF07aWYoZi5jYWxsKGcsbSxiLGMsZCxlKSxtLmFkdmFuY2VXaWR0aCYmKGIrPW0uYWR2YW5jZVdpZHRoKmkpLGUua2VybmluZyYmbDxqLmxlbmd0aC0xKXtiKz0oaD9nLnBvc2l0aW9uLmdldEtlcm5pbmdWYWx1ZShoLG0uaW5kZXgsaltsKzFdLmluZGV4KTpnLmdldEtlcm5pbmdWYWx1ZShtLGpbbCsxXSkpKml9ZS5sZXR0ZXJTcGFjaW5nP2IrPWUubGV0dGVyU3BhY2luZypkOmUudHJhY2tpbmcmJihiKz1lLnRyYWNraW5nLzFlMypkKX1yZXR1cm4gYn0sUWQucHJvdG90eXBlLmdldFBhdGg9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1uZXcgcjtyZXR1cm4gdGhpcy5mb3JFYWNoR2x5cGgoYSxiLGMsZCxlLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBnPWEuZ2V0UGF0aChiLGMsZCxlLHRoaXMpO2YuZXh0ZW5kKGcpfSksZn0sUWQucHJvdG90eXBlLmdldFBhdGhzPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9W107cmV0dXJuIHRoaXMuZm9yRWFjaEdseXBoKGEsYixjLGQsZSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZz1hLmdldFBhdGgoYixjLGQsZSx0aGlzKTtmLnB1c2goZyl9KSxmfSxRZC5wcm90b3R5cGUuZ2V0QWR2YW5jZVdpZHRoPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5mb3JFYWNoR2x5cGgoYSwwLDAsYixjLGZ1bmN0aW9uKCl7fSl9LFFkLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmdldFBhdGgoYixjLGQsZSxmKS5kcmF3KGEpfSxRZC5wcm90b3R5cGUuZHJhd1BvaW50cz1mdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5mb3JFYWNoR2x5cGgoYixjLGQsZSxmLGZ1bmN0aW9uKGIsYyxkLGUpe2IuZHJhd1BvaW50cyhhLGMsZCxlKX0pfSxRZC5wcm90b3R5cGUuZHJhd01ldHJpY3M9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZm9yRWFjaEdseXBoKGIsYyxkLGUsZixmdW5jdGlvbihiLGMsZCxlKXtiLmRyYXdNZXRyaWNzKGEsYyxkLGUpfSl9LFFkLnByb3RvdHlwZS5nZXRFbmdsaXNoTmFtZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm5hbWVzW2FdO2lmKGIpcmV0dXJuIGIuZW59LFFkLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXt9ZnVuY3Rpb24gYihiKXt2YXIgZD1jLmdldEVuZ2xpc2hOYW1lKGIpO2EoZCYmZC50cmltKCkubGVuZ3RoPjAsXCJObyBFbmdsaXNoIFwiK2IrXCIgc3BlY2lmaWVkLlwiKX12YXIgYz10aGlzO2IoXCJmb250RmFtaWx5XCIpLGIoXCJ3ZWlnaHROYW1lXCIpLGIoXCJtYW51ZmFjdHVyZXJcIiksYihcImNvcHlyaWdodFwiKSxiKFwidmVyc2lvblwiKSxhKHRoaXMudW5pdHNQZXJFbT4wLFwiTm8gdW5pdHNQZXJFbSBzcGVjaWZpZWQuXCIpfSxRZC5wcm90b3R5cGUudG9UYWJsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gcWYuZm9udFRvVGFibGUodGhpcyl9LFFkLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oXCJGb250LnRvQnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBGb250LnRvQXJyYXlCdWZmZXIgaW5zdGVhZC5cIiksdGhpcy50b0FycmF5QnVmZmVyKCl9LFFkLnByb3RvdHlwZS50b0FycmF5QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMudG9UYWJsZXMoKSxiPWEuZW5jb2RlKCksYz1uZXcgQXJyYXlCdWZmZXIoYi5sZW5ndGgpLGQ9bmV3IFVpbnQ4QXJyYXkoYyksZT0wO2U8Yi5sZW5ndGg7ZSsrKWRbZV09YltlXTtyZXR1cm4gY30sUWQucHJvdG90eXBlLmRvd25sb2FkPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuZ2V0RW5nbGlzaE5hbWUoXCJmb250RmFtaWx5XCIpLGQ9dGhpcy5nZXRFbmdsaXNoTmFtZShcImZvbnRTdWJmYW1pbHlcIik7YT1hfHxjLnJlcGxhY2UoL1xccy9nLFwiXCIpK1wiLVwiK2QrXCIub3RmXCI7dmFyIGU9dGhpcy50b0FycmF5QnVmZmVyKCk7aWYoQmIoKSl3aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW09d2luZG93LnJlcXVlc3RGaWxlU3lzdGVtfHx3aW5kb3cud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0sd2luZG93LnJlcXVlc3RGaWxlU3lzdGVtKHdpbmRvdy5URU1QT1JBUlksZS5ieXRlTGVuZ3RoLGZ1bmN0aW9uKGIpe2Iucm9vdC5nZXRGaWxlKGEse2NyZWF0ZTohMH0sZnVuY3Rpb24oYSl7YS5jcmVhdGVXcml0ZXIoZnVuY3Rpb24oYil7dmFyIGM9bmV3IERhdGFWaWV3KGUpLGQ9bmV3IEJsb2IoW2NdLHt0eXBlOlwiZm9udC9vcGVudHlwZVwifSk7Yi53cml0ZShkKSxiLmFkZEV2ZW50TGlzdGVuZXIoXCJ3cml0ZWVuZFwiLGZ1bmN0aW9uKCl7bG9jYXRpb24uaHJlZj1hLnRvVVJMKCl9LCExKX0pfSl9LGZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihhLm5hbWUrXCI6IFwiK2EubWVzc2FnZSl9KTtlbHNle3ZhciBmPWIoXCJmc1wiKSxnPURiKGUpO2Yud3JpdGVGaWxlU3luYyhhLGcpfX0sUWQucHJvdG90eXBlLmZzU2VsZWN0aW9uVmFsdWVzPXtJVEFMSUM6MSxVTkRFUlNDT1JFOjIsTkVHQVRJVkU6NCxPVVRMSU5FRDo4LFNUUklLRU9VVDoxNixCT0xEOjMyLFJFR1VMQVI6NjQsVVNFUl9UWVBPX01FVFJJQ1M6MTI4LFdXUzoyNTYsT0JMSVFVRTo1MTJ9LFFkLnByb3RvdHlwZS51c1dpZHRoQ2xhc3Nlcz17VUxUUkFfQ09OREVOU0VEOjEsRVhUUkFfQ09OREVOU0VEOjIsQ09OREVOU0VEOjMsU0VNSV9DT05ERU5TRUQ6NCxNRURJVU06NSxTRU1JX0VYUEFOREVEOjYsRVhQQU5ERUQ6NyxFWFRSQV9FWFBBTkRFRDo4LFVMVFJBX0VYUEFOREVEOjl9LFFkLnByb3RvdHlwZS51c1dlaWdodENsYXNzZXM9e1RISU46MTAwLEVYVFJBX0xJR0hUOjIwMCxMSUdIVDozMDAsTk9STUFMOjQwMCxNRURJVU06NTAwLFNFTUlfQk9MRDo2MDAsQk9MRDo3MDAsRVhUUkFfQk9MRDo4MDAsQkxBQ0s6OTAwfTt2YXIgQ2Y9e21ha2U6V2QscGFyc2U6WGR9LERmPW5ldyBBcnJheSgxMCk7RGZbMV09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiAxPT09Yj97cG9zRm9ybWF0OjEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksdmFsdWU6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKCl9OjI9PT1iP3tcbnBvc0Zvcm1hdDoyLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHZhbHVlczp0aGlzLnBhcnNlVmFsdWVSZWNvcmRMaXN0KCl9OnZvaWQgeGUuYXNzZXJ0KCExLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogR1BPUyBsb29rdXAgdHlwZSAxIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIil9LERmWzJdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTt4ZS5hc3NlcnQoMT09PWJ8fDI9PT1iLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogR1BPUyBsb29rdXAgdHlwZSAyIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIik7dmFyIGM9dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksZD10aGlzLnBhcnNlVVNob3J0KCksZT10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWIpcmV0dXJue3Bvc0Zvcm1hdDpiLGNvdmVyYWdlOmMsdmFsdWVGb3JtYXQxOmQsdmFsdWVGb3JtYXQyOmUscGFpclNldHM6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEubGlzdChmdW5jdGlvbigpe3JldHVybntzZWNvbmRHbHlwaDp0aGlzLnBhcnNlVVNob3J0KCksdmFsdWUxOnRoaXMucGFyc2VWYWx1ZVJlY29yZChkKSx2YWx1ZTI6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKGUpfX0pKSl9O2lmKDI9PT1iKXt2YXIgZj10aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxnPXRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGg9dGhpcy5wYXJzZVVTaG9ydCgpLGk9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntwb3NGb3JtYXQ6Yixjb3ZlcmFnZTpjLHZhbHVlRm9ybWF0MTpkLHZhbHVlRm9ybWF0MjplLGNsYXNzRGVmMTpmLGNsYXNzRGVmMjpnLGNsYXNzMUNvdW50OmgsY2xhc3MyQ291bnQ6aSxjbGFzc1JlY29yZHM6dGhpcy5wYXJzZUxpc3QoaCxRLmxpc3QoaSxmdW5jdGlvbigpe3JldHVybnt2YWx1ZTE6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKGQpLHZhbHVlMjp0aGlzLnBhcnNlVmFsdWVSZWNvcmQoZSl9fSkpfX19LERmWzNdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgMyBub3Qgc3VwcG9ydGVkXCJ9fSxEZls0XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDQgbm90IHN1cHBvcnRlZFwifX0sRGZbNV09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA1IG5vdCBzdXBwb3J0ZWRcIn19LERmWzZdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgNiBub3Qgc3VwcG9ydGVkXCJ9fSxEZls3XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDcgbm90IHN1cHBvcnRlZFwifX0sRGZbOF09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA4IG5vdCBzdXBwb3J0ZWRcIn19LERmWzldPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgOSBub3Qgc3VwcG9ydGVkXCJ9fTt2YXIgRWY9bmV3IEFycmF5KDEwKSxGZj17cGFyc2U6WWQsbWFrZTpaZH0sR2Y9e3BhcnNlOmFlfSxIZj17cGFyc2U6YmV9O2EuRm9udD1RZCxhLkdseXBoPWNhLGEuUGF0aD1yLGEuQm91bmRpbmdCb3g9cSxhLl9wYXJzZT1MZSxhLnBhcnNlPWhlLGEubG9hZD1pZSxhLmxvYWRTeW5jPWplLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSl9KS5jYWxsKHRoaXMsYihcImJ1ZmZlclwiKS5CdWZmZXIpfSx7YnVmZmVyOjMsZnM6Mn1dLDExOltmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZCgpe3Rocm93IG5ldyBFcnJvcihcInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gZSgpe3Rocm93IG5ldyBFcnJvcihcImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBmKGEpe2lmKGw9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGEsMCk7aWYoKGw9PT1kfHwhbCkmJnNldFRpbWVvdXQpcmV0dXJuIGw9c2V0VGltZW91dCxzZXRUaW1lb3V0KGEsMCk7dHJ5e3JldHVybiBsKGEsMCl9Y2F0Y2goYil7dHJ5e3JldHVybiBsLmNhbGwobnVsbCxhLDApfWNhdGNoKGIpe3JldHVybiBsLmNhbGwodGhpcyxhLDApfX19ZnVuY3Rpb24gZyhhKXtpZihtPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoYSk7aWYoKG09PT1lfHwhbSkmJmNsZWFyVGltZW91dClyZXR1cm4gbT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGEpO3RyeXtyZXR1cm4gbShhKX1jYXRjaChiKXt0cnl7cmV0dXJuIG0uY2FsbChudWxsLGEpfWNhdGNoKGIpe3JldHVybiBtLmNhbGwodGhpcyxhKX19fWZ1bmN0aW9uIGgoKXtxJiZvJiYocT0hMSxvLmxlbmd0aD9wPW8uY29uY2F0KHApOnI9LTEscC5sZW5ndGgmJmkoKSl9ZnVuY3Rpb24gaSgpe2lmKCFxKXt2YXIgYT1mKGgpO3E9ITA7Zm9yKHZhciBiPXAubGVuZ3RoO2I7KXtmb3Iobz1wLHA9W107KytyPGI7KW8mJm9bcl0ucnVuKCk7cj0tMSxiPXAubGVuZ3RofW89bnVsbCxxPSExLGcoYSl9fWZ1bmN0aW9uIGooYSxiKXt0aGlzLmZ1bj1hLHRoaXMuYXJyYXk9Yn1mdW5jdGlvbiBrKCl7fXZhciBsLG0sbj1iLmV4cG9ydHM9e307IWZ1bmN0aW9uKCl7dHJ5e2w9XCJmdW5jdGlvblwiPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OmR9Y2F0Y2goYSl7bD1kfXRyeXttPVwiZnVuY3Rpb25cIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6ZX1jYXRjaChhKXttPWV9fSgpO3ZhciBvLHA9W10scT0hMSxyPS0xO24ubmV4dFRpY2s9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYltjLTFdPWFyZ3VtZW50c1tjXTtwLnB1c2gobmV3IGooYSxiKSksMSE9PXAubGVuZ3RofHxxfHxmKGkpfSxqLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxuLnRpdGxlPVwiYnJvd3NlclwiLG4uYnJvd3Nlcj0hMCxuLmVudj17fSxuLmFyZ3Y9W10sbi52ZXJzaW9uPVwiXCIsbi52ZXJzaW9ucz17fSxuLm9uPWssbi5hZGRMaXN0ZW5lcj1rLG4ub25jZT1rLG4ub2ZmPWssbi5yZW1vdmVMaXN0ZW5lcj1rLG4ucmVtb3ZlQWxsTGlzdGVuZXJzPWssbi5lbWl0PWssbi5wcmVwZW5kTGlzdGVuZXI9ayxuLnByZXBlbmRPbmNlTGlzdGVuZXI9ayxuLmxpc3RlbmVycz1mdW5jdGlvbihhKXtyZXR1cm5bXX0sbi5iaW5kaW5nPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpfSxuLmN3ZD1mdW5jdGlvbigpe3JldHVyblwiL1wifSxuLmNoZGlyPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZFwiKX0sbi51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0se31dLDEyOltmdW5jdGlvbihhLGIsYyl7IWZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPVN0cmluZyhhKSksL1teYS16MC05XFwtIyQlJicqKy5cXF5fYHx+XS9pLnRlc3QoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lXCIpO3JldHVybiBhLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gYyhhKXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9U3RyaW5nKGEpKSxhfWZ1bmN0aW9uIGQoYSl7dmFyIGI9e25leHQ6ZnVuY3Rpb24oKXt2YXIgYj1hLnNoaWZ0KCk7cmV0dXJue2RvbmU6dm9pZCAwPT09Yix2YWx1ZTpifX19O3JldHVybiByLml0ZXJhYmxlJiYoYltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxifWZ1bmN0aW9uIGUoYSl7dGhpcy5tYXA9e30sYSBpbnN0YW5jZW9mIGU/YS5mb3JFYWNoKGZ1bmN0aW9uKGEsYil7dGhpcy5hcHBlbmQoYixhKX0sdGhpcyk6QXJyYXkuaXNBcnJheShhKT9hLmZvckVhY2goZnVuY3Rpb24oYSl7dGhpcy5hcHBlbmQoYVswXSxhWzFdKX0sdGhpcyk6YSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZm9yRWFjaChmdW5jdGlvbihiKXt0aGlzLmFwcGVuZChiLGFbYl0pfSx0aGlzKX1mdW5jdGlvbiBmKGEpe2lmKGEuYm9keVVzZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoXCJBbHJlYWR5IHJlYWRcIikpO2EuYm9keVVzZWQ9ITB9ZnVuY3Rpb24gZyhhKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYixjKXthLm9ubG9hZD1mdW5jdGlvbigpe2IoYS5yZXN1bHQpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXtjKGEuZXJyb3IpfX0pfWZ1bmN0aW9uIGgoYSl7dmFyIGI9bmV3IEZpbGVSZWFkZXIsYz1nKGIpO3JldHVybiBiLnJlYWRBc0FycmF5QnVmZmVyKGEpLGN9ZnVuY3Rpb24gaShhKXt2YXIgYj1uZXcgRmlsZVJlYWRlcixjPWcoYik7cmV0dXJuIGIucmVhZEFzVGV4dChhKSxjfWZ1bmN0aW9uIGooYSl7Zm9yKHZhciBiPW5ldyBVaW50OEFycmF5KGEpLGM9bmV3IEFycmF5KGIubGVuZ3RoKSxkPTA7ZDxiLmxlbmd0aDtkKyspY1tkXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGJbZF0pO3JldHVybiBjLmpvaW4oXCJcIil9ZnVuY3Rpb24gayhhKXtpZihhLnNsaWNlKXJldHVybiBhLnNsaWNlKDApO3ZhciBiPW5ldyBVaW50OEFycmF5KGEuYnl0ZUxlbmd0aCk7cmV0dXJuIGIuc2V0KG5ldyBVaW50OEFycmF5KGEpKSxiLmJ1ZmZlcn1mdW5jdGlvbiBsKCl7cmV0dXJuIHRoaXMuYm9keVVzZWQ9ITEsdGhpcy5faW5pdEJvZHk9ZnVuY3Rpb24oYSl7aWYodGhpcy5fYm9keUluaXQ9YSxhKWlmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXRoaXMuX2JvZHlUZXh0PWE7ZWxzZSBpZihyLmJsb2ImJkJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkpdGhpcy5fYm9keUJsb2I9YTtlbHNlIGlmKHIuZm9ybURhdGEmJkZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpKXRoaXMuX2JvZHlGb3JtRGF0YT1hO2Vsc2UgaWYoci5zZWFyY2hQYXJhbXMmJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSl0aGlzLl9ib2R5VGV4dD1hLnRvU3RyaW5nKCk7ZWxzZSBpZihyLmFycmF5QnVmZmVyJiZyLmJsb2ImJnQoYSkpdGhpcy5fYm9keUFycmF5QnVmZmVyPWsoYS5idWZmZXIpLHRoaXMuX2JvZHlJbml0PW5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKTtlbHNle2lmKCFyLmFycmF5QnVmZmVyfHwhQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkmJiF1KGEpKXRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIEJvZHlJbml0IHR5cGVcIik7dGhpcy5fYm9keUFycmF5QnVmZmVyPWsoYSl9ZWxzZSB0aGlzLl9ib2R5VGV4dD1cIlwiO3RoaXMuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIil8fChcInN0cmluZ1wiPT10eXBlb2YgYT90aGlzLmhlYWRlcnMuc2V0KFwiY29udGVudC10eXBlXCIsXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLThcIik6dGhpcy5fYm9keUJsb2ImJnRoaXMuX2JvZHlCbG9iLnR5cGU/dGhpcy5oZWFkZXJzLnNldChcImNvbnRlbnQtdHlwZVwiLHRoaXMuX2JvZHlCbG9iLnR5cGUpOnIuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkmJnRoaXMuaGVhZGVycy5zZXQoXCJjb250ZW50LXR5cGVcIixcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04XCIpKX0sci5ibG9iJiYodGhpcy5ibG9iPWZ1bmN0aW9uKCl7dmFyIGE9Zih0aGlzKTtpZihhKXJldHVybiBhO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcihcImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYlwiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKX0sdGhpcy5hcnJheUJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib2R5QXJyYXlCdWZmZXI/Zih0aGlzKXx8UHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcik6dGhpcy5ibG9iKCkudGhlbihoKX0pLHRoaXMudGV4dD1mdW5jdGlvbigpe3ZhciBhPWYodGhpcyk7aWYoYSlyZXR1cm4gYTtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gaSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUoaih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKFwiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0XCIpO3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpfSxyLmZvcm1EYXRhJiYodGhpcy5mb3JtRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKG8pfSksdGhpcy5qc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSl9LHRoaXN9ZnVuY3Rpb24gbShhKXt2YXIgYj1hLnRvVXBwZXJDYXNlKCk7cmV0dXJuIHYuaW5kZXhPZihiKT4tMT9iOmF9ZnVuY3Rpb24gbihhLGIpe2I9Ynx8e307dmFyIGM9Yi5ib2R5O2lmKGEgaW5zdGFuY2VvZiBuKXtpZihhLmJvZHlVc2VkKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBbHJlYWR5IHJlYWRcIik7dGhpcy51cmw9YS51cmwsdGhpcy5jcmVkZW50aWFscz1hLmNyZWRlbnRpYWxzLGIuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgZShhLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1hLm1ldGhvZCx0aGlzLm1vZGU9YS5tb2RlLGN8fG51bGw9PWEuX2JvZHlJbml0fHwoYz1hLl9ib2R5SW5pdCxhLmJvZHlVc2VkPSEwKX1lbHNlIHRoaXMudXJsPVN0cmluZyhhKTtpZih0aGlzLmNyZWRlbnRpYWxzPWIuY3JlZGVudGlhbHN8fHRoaXMuY3JlZGVudGlhbHN8fFwib21pdFwiLCFiLmhlYWRlcnMmJnRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgZShiLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1tKGIubWV0aG9kfHx0aGlzLm1ldGhvZHx8XCJHRVRcIiksdGhpcy5tb2RlPWIubW9kZXx8dGhpcy5tb2RlfHxudWxsLHRoaXMucmVmZXJyZXI9bnVsbCwoXCJHRVRcIj09PXRoaXMubWV0aG9kfHxcIkhFQURcIj09PXRoaXMubWV0aG9kKSYmYyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHNcIik7dGhpcy5faW5pdEJvZHkoYyl9ZnVuY3Rpb24gbyhhKXt2YXIgYj1uZXcgRm9ybURhdGE7cmV0dXJuIGEudHJpbSgpLnNwbGl0KFwiJlwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBjPWEuc3BsaXQoXCI9XCIpLGQ9Yy5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSxlPWMuam9pbihcIj1cIikucmVwbGFjZSgvXFwrL2csXCIgXCIpO2IuYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChkKSxkZWNvZGVVUklDb21wb25lbnQoZSkpfX0pLGJ9ZnVuY3Rpb24gcChhKXt2YXIgYj1uZXcgZTtyZXR1cm4gYS5zcGxpdCgvXFxyP1xcbi8pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGM9YS5zcGxpdChcIjpcIiksZD1jLnNoaWZ0KCkudHJpbSgpO2lmKGQpe3ZhciBlPWMuam9pbihcIjpcIikudHJpbSgpO2IuYXBwZW5kKGQsZSl9fSksYn1mdW5jdGlvbiBxKGEsYil7Ynx8KGI9e30pLHRoaXMudHlwZT1cImRlZmF1bHRcIix0aGlzLnN0YXR1cz1cInN0YXR1c1wiaW4gYj9iLnN0YXR1czoyMDAsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNUZXh0PVwic3RhdHVzVGV4dFwiaW4gYj9iLnN0YXR1c1RleHQ6XCJPS1wiLHRoaXMuaGVhZGVycz1uZXcgZShiLmhlYWRlcnMpLHRoaXMudXJsPWIudXJsfHxcIlwiLHRoaXMuX2luaXRCb2R5KGEpfWlmKCFhLmZldGNoKXt2YXIgcj17c2VhcmNoUGFyYW1zOlwiVVJMU2VhcmNoUGFyYW1zXCJpbiBhLGl0ZXJhYmxlOlwiU3ltYm9sXCJpbiBhJiZcIml0ZXJhdG9yXCJpbiBTeW1ib2wsYmxvYjpcIkZpbGVSZWFkZXJcImluIGEmJlwiQmxvYlwiaW4gYSYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBCbG9iLCEwfWNhdGNoKGEpe3JldHVybiExfX0oKSxmb3JtRGF0YTpcIkZvcm1EYXRhXCJpbiBhLGFycmF5QnVmZmVyOlwiQXJyYXlCdWZmZXJcImluIGF9O2lmKHIuYXJyYXlCdWZmZXIpdmFyIHM9W1wiW29iamVjdCBJbnQ4QXJyYXldXCIsXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCIsXCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiLFwiW29iamVjdCBJbnQxNkFycmF5XVwiLFwiW29iamVjdCBVaW50MTZBcnJheV1cIixcIltvYmplY3QgSW50MzJBcnJheV1cIixcIltvYmplY3QgVWludDMyQXJyYXldXCIsXCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIixcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiXSx0PWZ1bmN0aW9uKGEpe3JldHVybiBhJiZEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKX0sdT1BcnJheUJ1ZmZlci5pc1ZpZXd8fGZ1bmN0aW9uKGEpe3JldHVybiBhJiZzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpKT4tMX07ZS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGEsZCl7YT1iKGEpLGQ9YyhkKTt2YXIgZT10aGlzLm1hcFthXTt0aGlzLm1hcFthXT1lP2UrXCIsXCIrZDpkfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMubWFwW2IoYSldfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YihhKSx0aGlzLmhhcyhhKT90aGlzLm1hcFthXTpudWxsfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KGIoYSkpfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxkKXt0aGlzLm1hcFtiKGEpXT1jKGQpfSxlLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjIGluIHRoaXMubWFwKXRoaXMubWFwLmhhc093blByb3BlcnR5KGMpJiZhLmNhbGwoYix0aGlzLm1hcFtjXSxjLHRoaXMpfSxlLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihiLGMpe2EucHVzaChjKX0pLGQoYSl9LGUucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oYil7YS5wdXNoKGIpfSksZChhKX0sZS5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oYixjKXthLnB1c2goW2MsYl0pfSksZChhKX0sci5pdGVyYWJsZSYmKGUucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09ZS5wcm90b3R5cGUuZW50cmllcyk7dmFyIHY9W1wiREVMRVRFXCIsXCJHRVRcIixcIkhFQURcIixcIk9QVElPTlNcIixcIlBPU1RcIixcIlBVVFwiXTtuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHtib2R5OnRoaXMuX2JvZHlJbml0fSl9LGwuY2FsbChuLnByb3RvdHlwZSksbC5jYWxsKHEucHJvdG90eXBlKSxxLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcSh0aGlzLl9ib2R5SW5pdCx7c3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dGhpcy5zdGF0dXNUZXh0LGhlYWRlcnM6bmV3IGUodGhpcy5oZWFkZXJzKSx1cmw6dGhpcy51cmx9KX0scS5lcnJvcj1mdW5jdGlvbigpe3ZhciBhPW5ldyBxKG51bGwse3N0YXR1czowLHN0YXR1c1RleHQ6XCJcIn0pO3JldHVybiBhLnR5cGU9XCJlcnJvclwiLGF9O3ZhciB3PVszMDEsMzAyLDMwMywzMDcsMzA4XTtxLnJlZGlyZWN0PWZ1bmN0aW9uKGEsYil7aWYoLTE9PT13LmluZGV4T2YoYikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHN0YXR1cyBjb2RlXCIpO3JldHVybiBuZXcgcShudWxsLHtzdGF0dXM6YixoZWFkZXJzOntsb2NhdGlvbjphfX0pfSxhLkhlYWRlcnM9ZSxhLlJlcXVlc3Q9bixhLlJlc3BvbnNlPXEsYS5mZXRjaD1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLGQpe3ZhciBlPW5ldyBuKGEsYiksZj1uZXcgWE1MSHR0cFJlcXVlc3Q7Zi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgYT17c3RhdHVzOmYuc3RhdHVzLHN0YXR1c1RleHQ6Zi5zdGF0dXNUZXh0LGhlYWRlcnM6cChmLmdldEFsbFJlc3BvbnNlSGVhZGVycygpfHxcIlwiKX07YS51cmw9XCJyZXNwb25zZVVSTFwiaW4gZj9mLnJlc3BvbnNlVVJMOmEuaGVhZGVycy5nZXQoXCJYLVJlcXVlc3QtVVJMXCIpO3ZhciBiPVwicmVzcG9uc2VcImluIGY/Zi5yZXNwb25zZTpmLnJlc3BvbnNlVGV4dDtjKG5ldyBxKGIsYSkpfSxmLm9uZXJyb3I9ZnVuY3Rpb24oKXtkKG5ldyBUeXBlRXJyb3IoXCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkXCIpKX0sZi5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtkKG5ldyBUeXBlRXJyb3IoXCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkXCIpKX0sZi5vcGVuKGUubWV0aG9kLGUudXJsLCEwKSxcImluY2x1ZGVcIj09PWUuY3JlZGVudGlhbHMmJihmLndpdGhDcmVkZW50aWFscz0hMCksXCJyZXNwb25zZVR5cGVcImluIGYmJnIuYmxvYiYmKGYucmVzcG9uc2VUeXBlPVwiYmxvYlwiKSxlLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihhLGIpe2Yuc2V0UmVxdWVzdEhlYWRlcihiLGEpfSksZi5zZW5kKHZvaWQgMD09PWUuX2JvZHlJbml0P251bGw6ZS5fYm9keUluaXQpfSl9LGEuZmV0Y2gucG9seWZpbGw9ITB9fShcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpfSx7fV0sMTM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9jb3JlL21haW5cIik7YShcIi4vY29yZS9jb25zdGFudHNcIiksYShcIi4vY29yZS9lbnZpcm9ubWVudFwiKSxhKFwiLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksYShcIi4vY29yZS9oZWxwZXJzXCIpLGEoXCIuL2NvcmUvbGVnYWN5XCIpLGEoXCIuL2NvcmUvcDUuRWxlbWVudFwiKSxhKFwiLi9jb3JlL3A1LkdyYXBoaWNzXCIpLGEoXCIuL2NvcmUvcDUuUmVuZGVyZXJcIiksYShcIi4vY29yZS9wNS5SZW5kZXJlcjJEXCIpLGEoXCIuL2NvcmUvcmVuZGVyaW5nXCIpLGEoXCIuL2NvcmUvc2hpbVwiKSxhKFwiLi9jb3JlL3N0cnVjdHVyZVwiKSxhKFwiLi9jb3JlL3RyYW5zZm9ybVwiKSxhKFwiLi9jb3JlL3NoYXBlLzJkX3ByaW1pdGl2ZXNcIiksYShcIi4vY29yZS9zaGFwZS9hdHRyaWJ1dGVzXCIpLGEoXCIuL2NvcmUvc2hhcGUvY3VydmVzXCIpLGEoXCIuL2NvcmUvc2hhcGUvdmVydGV4XCIpLGEoXCIuL2NvbG9yL2NvbG9yX2NvbnZlcnNpb25cIiksYShcIi4vY29sb3IvY3JlYXRpbmdfcmVhZGluZ1wiKSxhKFwiLi9jb2xvci9wNS5Db2xvclwiKSxhKFwiLi9jb2xvci9zZXR0aW5nXCIpLGEoXCIuL2RhdGEvcDUuVHlwZWREaWN0XCIpLGEoXCIuL2V2ZW50cy9hY2NlbGVyYXRpb25cIiksYShcIi4vZXZlbnRzL2tleWJvYXJkXCIpLGEoXCIuL2V2ZW50cy9tb3VzZVwiKSxhKFwiLi9ldmVudHMvdG91Y2hcIiksYShcIi4vaW1hZ2UvZmlsdGVyc1wiKSxhKFwiLi9pbWFnZS9pbWFnZVwiKSxhKFwiLi9pbWFnZS9sb2FkaW5nX2Rpc3BsYXlpbmdcIiksYShcIi4vaW1hZ2UvcDUuSW1hZ2VcIiksYShcIi4vaW1hZ2UvcGl4ZWxzXCIpLGEoXCIuL2lvL2ZpbGVzXCIpLGEoXCIuL2lvL3A1LlRhYmxlXCIpLGEoXCIuL2lvL3A1LlRhYmxlUm93XCIpLGEoXCIuL2lvL3A1LlhNTFwiKSxhKFwiLi9tYXRoL2NhbGN1bGF0aW9uXCIpLGEoXCIuL21hdGgvbWF0aFwiKSxhKFwiLi9tYXRoL25vaXNlXCIpLGEoXCIuL21hdGgvcDUuVmVjdG9yXCIpLGEoXCIuL21hdGgvcmFuZG9tXCIpLGEoXCIuL21hdGgvdHJpZ29ub21ldHJ5XCIpLGEoXCIuL3R5cG9ncmFwaHkvYXR0cmlidXRlc1wiKSxhKFwiLi90eXBvZ3JhcGh5L2xvYWRpbmdfZGlzcGxheWluZ1wiKSxhKFwiLi90eXBvZ3JhcGh5L3A1LkZvbnRcIiksYShcIi4vdXRpbGl0aWVzL2FycmF5X2Z1bmN0aW9uc1wiKSxhKFwiLi91dGlsaXRpZXMvY29udmVyc2lvblwiKSxhKFwiLi91dGlsaXRpZXMvc3RyaW5nX2Z1bmN0aW9uc1wiKSxhKFwiLi91dGlsaXRpZXMvdGltZV9kYXRlXCIpLGEoXCIuL3dlYmdsLzNkX3ByaW1pdGl2ZXNcIiksYShcIi4vd2ViZ2wvaW50ZXJhY3Rpb25cIiksYShcIi4vd2ViZ2wvbGlnaHRcIiksYShcIi4vd2ViZ2wvbG9hZGluZ1wiKSxhKFwiLi93ZWJnbC9tYXRlcmlhbFwiKSxhKFwiLi93ZWJnbC9wNS5DYW1lcmFcIiksYShcIi4vd2ViZ2wvcDUuR2VvbWV0cnlcIiksYShcIi4vd2ViZ2wvcDUuTWF0cml4XCIpLGEoXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuSW1tZWRpYXRlXCIpLGEoXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0xcIiksYShcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5SZXRhaW5lZFwiKSxhKFwiLi93ZWJnbC9wNS5TaGFkZXJcIiksYShcIi4vd2ViZ2wvcDUuVGV4dHVyZVwiKSxhKFwiLi93ZWJnbC90ZXh0XCIpLGEoXCIuL2NvcmUvaW5pdFwiKSxiLmV4cG9ydHM9ZH0se1wiLi9jb2xvci9jb2xvcl9jb252ZXJzaW9uXCI6MTQsXCIuL2NvbG9yL2NyZWF0aW5nX3JlYWRpbmdcIjoxNSxcIi4vY29sb3IvcDUuQ29sb3JcIjoxNixcIi4vY29sb3Ivc2V0dGluZ1wiOjE3LFwiLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi9jb3JlL2Vudmlyb25tZW50XCI6MTksXCIuL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi9jb3JlL2hlbHBlcnNcIjoyMSxcIi4vY29yZS9pbml0XCI6MjIsXCIuL2NvcmUvbGVnYWN5XCI6MjMsXCIuL2NvcmUvbWFpblwiOjI0LFwiLi9jb3JlL3A1LkVsZW1lbnRcIjoyNSxcIi4vY29yZS9wNS5HcmFwaGljc1wiOjI2LFwiLi9jb3JlL3A1LlJlbmRlcmVyXCI6MjcsXCIuL2NvcmUvcDUuUmVuZGVyZXIyRFwiOjI4LFwiLi9jb3JlL3JlbmRlcmluZ1wiOjI5LFwiLi9jb3JlL3NoYXBlLzJkX3ByaW1pdGl2ZXNcIjozMCxcIi4vY29yZS9zaGFwZS9hdHRyaWJ1dGVzXCI6MzEsXCIuL2NvcmUvc2hhcGUvY3VydmVzXCI6MzIsXCIuL2NvcmUvc2hhcGUvdmVydGV4XCI6MzMsXCIuL2NvcmUvc2hpbVwiOjM0LFwiLi9jb3JlL3N0cnVjdHVyZVwiOjM1LFwiLi9jb3JlL3RyYW5zZm9ybVwiOjM2LFwiLi9kYXRhL3A1LlR5cGVkRGljdFwiOjM3LFwiLi9ldmVudHMvYWNjZWxlcmF0aW9uXCI6MzgsXCIuL2V2ZW50cy9rZXlib2FyZFwiOjM5LFwiLi9ldmVudHMvbW91c2VcIjo0MCxcIi4vZXZlbnRzL3RvdWNoXCI6NDEsXCIuL2ltYWdlL2ZpbHRlcnNcIjo0MixcIi4vaW1hZ2UvaW1hZ2VcIjo0MyxcIi4vaW1hZ2UvbG9hZGluZ19kaXNwbGF5aW5nXCI6NDQsXCIuL2ltYWdlL3A1LkltYWdlXCI6NDUsXCIuL2ltYWdlL3BpeGVsc1wiOjQ2LFwiLi9pby9maWxlc1wiOjQ3LFwiLi9pby9wNS5UYWJsZVwiOjQ4LFwiLi9pby9wNS5UYWJsZVJvd1wiOjQ5LFwiLi9pby9wNS5YTUxcIjo1MCxcIi4vbWF0aC9jYWxjdWxhdGlvblwiOjUxLFwiLi9tYXRoL21hdGhcIjo1MixcIi4vbWF0aC9ub2lzZVwiOjUzLFwiLi9tYXRoL3A1LlZlY3RvclwiOjU0LFwiLi9tYXRoL3JhbmRvbVwiOjU1LFwiLi9tYXRoL3RyaWdvbm9tZXRyeVwiOjU2LFwiLi90eXBvZ3JhcGh5L2F0dHJpYnV0ZXNcIjo1NyxcIi4vdHlwb2dyYXBoeS9sb2FkaW5nX2Rpc3BsYXlpbmdcIjo1OCxcIi4vdHlwb2dyYXBoeS9wNS5Gb250XCI6NTksXCIuL3V0aWxpdGllcy9hcnJheV9mdW5jdGlvbnNcIjo2MCxcIi4vdXRpbGl0aWVzL2NvbnZlcnNpb25cIjo2MSxcIi4vdXRpbGl0aWVzL3N0cmluZ19mdW5jdGlvbnNcIjo2MixcIi4vdXRpbGl0aWVzL3RpbWVfZGF0ZVwiOjYzLFwiLi93ZWJnbC8zZF9wcmltaXRpdmVzXCI6NjQsXCIuL3dlYmdsL2ludGVyYWN0aW9uXCI6NjUsXCIuL3dlYmdsL2xpZ2h0XCI6NjYsXCIuL3dlYmdsL2xvYWRpbmdcIjo2NyxcIi4vd2ViZ2wvbWF0ZXJpYWxcIjo2OCxcIi4vd2ViZ2wvcDUuQ2FtZXJhXCI6NjksXCIuL3dlYmdsL3A1Lkdlb21ldHJ5XCI6NzAsXCIuL3dlYmdsL3A1Lk1hdHJpeFwiOjcxLFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMXCI6NzQsXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuSW1tZWRpYXRlXCI6NzIsXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuUmV0YWluZWRcIjo3MyxcIi4vd2ViZ2wvcDUuU2hhZGVyXCI6NzUsXCIuL3dlYmdsL3A1LlRleHR1cmVcIjo3NixcIi4vd2ViZ2wvdGV4dFwiOjc3fV0sMTQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuQ29sb3JDb252ZXJzaW9uPXt9LGQuQ29sb3JDb252ZXJzaW9uLl9oc2JhVG9IU0xBPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGQ9YVsyXSxlPSgyLWMpKmQvMjtyZXR1cm4gMCE9PWUmJigxPT09ZT9jPTA6ZTwuNT9jLz0yLWM6Yz1jKmQvKDItMiplKSksW2IsYyxlLGFbM11dfSxkLkNvbG9yQ29udmVyc2lvbi5faHNiYVRvUkdCQT1mdW5jdGlvbihhKXt2YXIgYj02KmFbMF0sYz1hWzFdLGQ9YVsyXSxlPVtdO2lmKDA9PT1jKWU9W2QsZCxkLGFbM11dO2Vsc2V7dmFyIGYsZyxoLGk9TWF0aC5mbG9vcihiKSxqPWQqKDEtYyksaz1kKigxLWMqKGItaSkpLGw9ZCooMS1jKigxK2ktYikpOzE9PT1pPyhmPWssZz1kLGg9aik6Mj09PWk/KGY9aixnPWQsaD1sKTozPT09aT8oZj1qLGc9ayxoPWQpOjQ9PT1pPyhmPWwsZz1qLGg9ZCk6NT09PWk/KGY9ZCxnPWosaD1rKTooZj1kLGc9bCxoPWopLGU9W2YsZyxoLGFbM11dfXJldHVybiBlfSxkLkNvbG9yQ29udmVyc2lvbi5faHNsYVRvSFNCQT1mdW5jdGlvbihhKXt2YXIgYixjPWFbMF0sZD1hWzFdLGU9YVsyXTtyZXR1cm4gYj1lPC41PygxK2QpKmU6ZStkLWUqZCxkPTIqKGItZSkvYixbYyxkLGIsYVszXV19LGQuQ29sb3JDb252ZXJzaW9uLl9oc2xhVG9SR0JBPWZ1bmN0aW9uKGEpe3ZhciBiPTYqYVswXSxjPWFbMV0sZD1hWzJdLGU9W107aWYoMD09PWMpZT1bZCxkLGQsYVszXV07ZWxzZXt2YXIgZjtmPWQ8LjU/KDErYykqZDpkK2MtZCpjO3ZhciBnPTIqZC1mLGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPDA/YSs9NjphPj02JiYoYS09NiksYTwxP2IrKGMtYikqYTphPDM/YzphPDQ/YisoYy1iKSooNC1hKTpifTtlPVtoKGIrMixnLGYpLGgoYixnLGYpLGgoYi0yLGcsZiksYVszXV19cmV0dXJuIGV9LGQuQ29sb3JDb252ZXJzaW9uLl9yZ2JhVG9IU0JBPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hWzBdLGU9YVsxXSxmPWFbMl0sZz1NYXRoLm1heChkLGUsZiksaD1nLU1hdGgubWluKGQsZSxmKTtyZXR1cm4gMD09PWg/KGI9MCxjPTApOihjPWgvZyxkPT09Zz9iPShlLWYpL2g6ZT09PWc/Yj0yKyhmLWQpL2g6Zj09PWcmJihiPTQrKGQtZSkvaCksYjwwP2IrPTY6Yj49NiYmKGItPTYpKSxbYi82LGMsZyxhWzNdXX0sZC5Db2xvckNvbnZlcnNpb24uX3JnYmFUb0hTTEE9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPWFbMF0sZT1hWzFdLGY9YVsyXSxnPU1hdGgubWF4KGQsZSxmKSxoPU1hdGgubWluKGQsZSxmKSxpPWcraCxqPWctaDtyZXR1cm4gMD09PWo/KGI9MCxjPTApOihjPWk8MT9qL2k6ai8oMi1pKSxkPT09Zz9iPShlLWYpL2o6ZT09PWc/Yj0yKyhmLWQpL2o6Zj09PWcmJihiPTQrKGQtZSkvaiksYjwwP2IrPTY6Yj49NiYmKGItPTYpKSxbYi82LGMsaS8yLGFbM11dfSxiLmV4cG9ydHM9ZC5Db2xvckNvbnZlcnNpb259LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMTU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuL3A1LkNvbG9yXCIpLGEoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUuYWxwaGE9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImFscGhhXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRBbHBoYSgpfSxkLnByb3RvdHlwZS5ibHVlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJibHVlXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRCbHVlKCl9LGQucHJvdG90eXBlLmJyaWdodG5lc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJyaWdodG5lc3NcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldEJyaWdodG5lc3MoKX0sZC5wcm90b3R5cGUuY29sb3I9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjb2xvclwiLGFyZ3VtZW50cyksYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkLkNvbG9yKXJldHVybiBhcmd1bWVudHNbMF07dmFyIGE9YXJndW1lbnRzWzBdaW5zdGFuY2VvZiBBcnJheT9hcmd1bWVudHNbMF06YXJndW1lbnRzO3JldHVybiBuZXcgZC5Db2xvcih0aGlzLGEpfSxkLnByb3RvdHlwZS5ncmVlbj1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZ3JlZW5cIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldEdyZWVuKCl9LGQucHJvdG90eXBlLmh1ZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaHVlXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRIdWUoKX0sZC5wcm90b3R5cGUubGVycENvbG9yPWZ1bmN0aW9uKGEsYixjKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsZXJwQ29sb3JcIixhcmd1bWVudHMpO3ZhciBmLGcsaCxpLGosayxsPXRoaXMuX2NvbG9yTW9kZSxtPXRoaXMuX2NvbG9yTWF4ZXM7aWYobD09PWUuUkdCKWo9YS5sZXZlbHMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLzI1NX0pLGs9Yi5sZXZlbHMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLzI1NX0pO2Vsc2UgaWYobD09PWUuSFNCKWEuX2dldEJyaWdodG5lc3MoKSxiLl9nZXRCcmlnaHRuZXNzKCksaj1hLmhzYmEsaz1iLmhzYmE7ZWxzZXtpZihsIT09ZS5IU0wpdGhyb3cgbmV3IEVycm9yKGwrXCJjYW5ub3QgYmUgdXNlZCBmb3IgaW50ZXJwb2xhdGlvbi5cIik7YS5fZ2V0TGlnaHRuZXNzKCksYi5fZ2V0TGlnaHRuZXNzKCksaj1hLmhzbGEsaz1iLmhzbGF9cmV0dXJuIGM9TWF0aC5tYXgoTWF0aC5taW4oYywxKSwwKSx2b2lkIDA9PT10aGlzLmxlcnAmJih0aGlzLmxlcnA9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjKihiLWEpK2F9KSxmPXRoaXMubGVycChqWzBdLGtbMF0sYyksZz10aGlzLmxlcnAoalsxXSxrWzFdLGMpLGg9dGhpcy5sZXJwKGpbMl0sa1syXSxjKSxpPXRoaXMubGVycChqWzNdLGtbM10sYyksZio9bVtsXVswXSxnKj1tW2xdWzFdLGgqPW1bbF1bMl0saSo9bVtsXVszXSx0aGlzLmNvbG9yKGYsZyxoLGkpfSxkLnByb3RvdHlwZS5saWdodG5lc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxpZ2h0bmVzc1wiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0TGlnaHRuZXNzKCl9LGQucHJvdG90eXBlLnJlZD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicmVkXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRSZWQoKX0sZC5wcm90b3R5cGUuc2F0dXJhdGlvbj1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F0dXJhdGlvblwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0U2F0dXJhdGlvbigpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LkNvbG9yXCI6MTZ9XSwxNjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIiksZj1hKFwiLi9jb2xvcl9jb252ZXJzaW9uXCIpO2QuQ29sb3I9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLl9zdG9yZU1vZGVBbmRNYXhlcyhhLl9jb2xvck1vZGUsYS5fY29sb3JNYXhlcyksdGhpcy5tb2RlIT09ZS5SR0ImJnRoaXMubW9kZSE9PWUuSFNMJiZ0aGlzLm1vZGUhPT1lLkhTQil0aHJvdyBuZXcgRXJyb3IodGhpcy5tb2RlK1wiIGlzIGFuIGludmFsaWQgY29sb3JNb2RlLlwiKTtyZXR1cm4gdGhpcy5fYXJyYXk9ZC5Db2xvci5fcGFyc2VJbnB1dHMuYXBwbHkodGhpcyxiKSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKSx0aGlzfSxkLkNvbG9yLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihhKXt0aGlzLmhzYmF8fCh0aGlzLmhzYmE9Zi5fcmdiYVRvSFNCQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNsYXx8KHRoaXMuaHNsYT1mLl9yZ2JhVG9IU0xBKHRoaXMuX2FycmF5KSk7dmFyIGI9dGhpcy5sZXZlbHMsYz10aGlzLl9hcnJheSxkPWNbM107c3dpdGNoKGEpe2Nhc2VcIiNycmdnYmJcIjpyZXR1cm5cIiNcIi5jb25jYXQoYlswXTwxNj9cIjBcIi5jb25jYXQoYlswXS50b1N0cmluZygxNikpOmJbMF0udG9TdHJpbmcoMTYpLGJbMV08MTY/XCIwXCIuY29uY2F0KGJbMV0udG9TdHJpbmcoMTYpKTpiWzFdLnRvU3RyaW5nKDE2KSxiWzJdPDE2P1wiMFwiLmNvbmNhdChiWzJdLnRvU3RyaW5nKDE2KSk6YlsyXS50b1N0cmluZygxNikpO2Nhc2VcIiNycmdnYmJhYVwiOnJldHVyblwiI1wiLmNvbmNhdChiWzBdPDE2P1wiMFwiLmNvbmNhdChiWzBdLnRvU3RyaW5nKDE2KSk6YlswXS50b1N0cmluZygxNiksYlsxXTwxNj9cIjBcIi5jb25jYXQoYlsxXS50b1N0cmluZygxNikpOmJbMV0udG9TdHJpbmcoMTYpLGJbMl08MTY/XCIwXCIuY29uY2F0KGJbMl0udG9TdHJpbmcoMTYpKTpiWzJdLnRvU3RyaW5nKDE2KSxiWzNdPDE2P1wiMFwiLmNvbmNhdChiWzJdLnRvU3RyaW5nKDE2KSk6YlszXS50b1N0cmluZygxNikpO2Nhc2VcIiNyZ2JcIjpyZXR1cm5cIiNcIi5jb25jYXQoTWF0aC5yb3VuZCgxNSpjWzBdKS50b1N0cmluZygxNiksTWF0aC5yb3VuZCgxNSpjWzFdKS50b1N0cmluZygxNiksTWF0aC5yb3VuZCgxNSpjWzJdKS50b1N0cmluZygxNikpO2Nhc2VcIiNyZ2JhXCI6cmV0dXJuXCIjXCIuY29uY2F0KE1hdGgucm91bmQoMTUqY1swXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1sxXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1syXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1szXSkudG9TdHJpbmcoMTYpKTtjYXNlXCJyZ2JcIjpyZXR1cm5cInJnYihcIi5jb25jYXQoYlswXSxcIiwgXCIsYlsxXSxcIiwgXCIsYlsyXSxcIilcIik7Y2FzZVwicmdiJVwiOnJldHVyblwicmdiKFwiLmNvbmNhdCgoMTAwKmNbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1syXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJyZ2JhJVwiOnJldHVyblwicmdiYShcIi5jb25jYXQoKDEwMCpjWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1sxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzNdKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcImhzYlwiOmNhc2VcImhzdlwiOnJldHVyblwiaHNiKFwiLmNvbmNhdCh0aGlzLmhzYmFbMF0qdGhpcy5tYXhlc1tlLkhTQl1bMF0sXCIsIFwiLHRoaXMuaHNiYVsxXSp0aGlzLm1heGVzW2UuSFNCXVsxXSxcIiwgXCIsdGhpcy5oc2JhWzJdKnRoaXMubWF4ZXNbZS5IU0JdWzJdLFwiKVwiKTtjYXNlXCJoc2IlXCI6Y2FzZVwiaHN2JVwiOnJldHVyblwiaHNiKFwiLmNvbmNhdCgoMTAwKnRoaXMuaHNiYVswXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNiYVsxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNiYVsyXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2JhXCI6Y2FzZVwiaHN2YVwiOnJldHVyblwiaHNiYShcIi5jb25jYXQodGhpcy5oc2JhWzBdKnRoaXMubWF4ZXNbZS5IU0JdWzBdLFwiLCBcIix0aGlzLmhzYmFbMV0qdGhpcy5tYXhlc1tlLkhTQl1bMV0sXCIsIFwiLHRoaXMuaHNiYVsyXSp0aGlzLm1heGVzW2UuSFNCXVsyXSxcIiwgXCIsZCxcIilcIik7Y2FzZVwiaHNiYSVcIjpjYXNlXCJoc3ZhJVwiOnJldHVyblwiaHNiYShcIi5jb25jYXQoKDEwMCp0aGlzLmhzYmFbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpkKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcImhzbFwiOnJldHVyblwiaHNsKFwiLmNvbmNhdCh0aGlzLmhzbGFbMF0qdGhpcy5tYXhlc1tlLkhTTF1bMF0sXCIsIFwiLHRoaXMuaHNsYVsxXSp0aGlzLm1heGVzW2UuSFNMXVsxXSxcIiwgXCIsdGhpcy5oc2xhWzJdKnRoaXMubWF4ZXNbZS5IU0xdWzJdLFwiKVwiKTtjYXNlXCJoc2wlXCI6cmV0dXJuXCJoc2woXCIuY29uY2F0KCgxMDAqdGhpcy5oc2xhWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzJdKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcImhzbGFcIjpyZXR1cm5cImhzbGEoXCIuY29uY2F0KHRoaXMuaHNsYVswXSp0aGlzLm1heGVzW2UuSFNMXVswXSxcIiwgXCIsdGhpcy5oc2xhWzFdKnRoaXMubWF4ZXNbZS5IU0xdWzFdLFwiLCBcIix0aGlzLmhzbGFbMl0qdGhpcy5tYXhlc1tlLkhTTF1bMl0sXCIsIFwiLGQsXCIpXCIpO2Nhc2VcImhzbGElXCI6cmV0dXJuXCJoc2woXCIuY29uY2F0KCgxMDAqdGhpcy5oc2xhWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzJdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqZCkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJyZ2JhXCI6ZGVmYXVsdDpyZXR1cm5cInJnYmEoXCIrYlswXStcIixcIitiWzFdK1wiLFwiK2JbMl0rXCIsXCIrZCtcIilcIn19LGQuQ29sb3IucHJvdG90eXBlLnNldFJlZD1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVswXT1hL3RoaXMubWF4ZXNbZS5SR0JdWzBdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5zZXRHcmVlbj1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVsxXT1hL3RoaXMubWF4ZXNbZS5SR0JdWzFdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5zZXRCbHVlPWZ1bmN0aW9uKGEpe3RoaXMuX2FycmF5WzJdPWEvdGhpcy5tYXhlc1tlLlJHQl1bMl0sdGhpcy5fY2FsY3VsYXRlTGV2ZWxzKCl9LGQuQ29sb3IucHJvdG90eXBlLnNldEFscGhhPWZ1bmN0aW9uKGEpe3RoaXMuX2FycmF5WzNdPWEvdGhpcy5tYXhlc1t0aGlzLm1vZGVdWzNdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5fY2FsY3VsYXRlTGV2ZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuX2FycmF5LGI9dGhpcy5sZXZlbHM9bmV3IEFycmF5KGEubGVuZ3RoKSxjPWEubGVuZ3RoLTE7Yz49MDstLWMpYltjXT1NYXRoLnJvdW5kKDI1NSphW2NdKX0sZC5Db2xvci5wcm90b3R5cGUuX2dldEFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5WzNdKnRoaXMubWF4ZXNbdGhpcy5tb2RlXVszXX0sZC5Db2xvci5wcm90b3R5cGUuX3N0b3JlTW9kZUFuZE1heGVzPWZ1bmN0aW9uKGEsYil7dGhpcy5tb2RlPWEsdGhpcy5tYXhlcz1ifSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0TW9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGV9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRNYXhlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1heGVzfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0Qmx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheVsyXSp0aGlzLm1heGVzW2UuUkdCXVsyXX0sZC5Db2xvci5wcm90b3R5cGUuX2dldEJyaWdodG5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzYmFbMl0qdGhpcy5tYXhlc1tlLkhTQl1bMl19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRHcmVlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheVsxXSp0aGlzLm1heGVzW2UuUkdCXVsxXX0sZC5Db2xvci5wcm90b3R5cGUuX2dldEh1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGU9PT1lLkhTQj8odGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzYmFbMF0qdGhpcy5tYXhlc1tlLkhTQl1bMF0pOih0aGlzLmhzbGF8fCh0aGlzLmhzbGE9Zi5fcmdiYVRvSFNMQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNsYVswXSp0aGlzLm1heGVzW2UuSFNMXVswXSl9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRMaWdodG5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oc2xhfHwodGhpcy5oc2xhPWYuX3JnYmFUb0hTTEEodGhpcy5fYXJyYXkpKSx0aGlzLmhzbGFbMl0qdGhpcy5tYXhlc1tlLkhTTF1bMl19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRSZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXlbMF0qdGhpcy5tYXhlc1tlLlJHQl1bMF19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRTYXR1cmF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZT09PWUuSFNCPyh0aGlzLmhzYmF8fCh0aGlzLmhzYmE9Zi5fcmdiYVRvSFNCQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNiYVsxXSp0aGlzLm1heGVzW2UuSFNCXVsxXSk6KHRoaXMuaHNsYXx8KHRoaXMuaHNsYT1mLl9yZ2JhVG9IU0xBKHRoaXMuX2FycmF5KSksdGhpcy5oc2xhWzFdKnRoaXMubWF4ZXNbZS5IU0xdWzFdKX07dmFyIGc9e2FsaWNlYmx1ZTpcIiNmMGY4ZmZcIixhbnRpcXVld2hpdGU6XCIjZmFlYmQ3XCIsYXF1YTpcIiMwMGZmZmZcIixhcXVhbWFyaW5lOlwiIzdmZmZkNFwiLGF6dXJlOlwiI2YwZmZmZlwiLGJlaWdlOlwiI2Y1ZjVkY1wiLGJpc3F1ZTpcIiNmZmU0YzRcIixibGFjazpcIiMwMDAwMDBcIixibGFuY2hlZGFsbW9uZDpcIiNmZmViY2RcIixibHVlOlwiIzAwMDBmZlwiLGJsdWV2aW9sZXQ6XCIjOGEyYmUyXCIsYnJvd246XCIjYTUyYTJhXCIsYnVybHl3b29kOlwiI2RlYjg4N1wiLGNhZGV0Ymx1ZTpcIiM1ZjllYTBcIixjaGFydHJldXNlOlwiIzdmZmYwMFwiLGNob2NvbGF0ZTpcIiNkMjY5MWVcIixjb3JhbDpcIiNmZjdmNTBcIixjb3JuZmxvd2VyYmx1ZTpcIiM2NDk1ZWRcIixjb3Juc2lsazpcIiNmZmY4ZGNcIixjcmltc29uOlwiI2RjMTQzY1wiLGN5YW46XCIjMDBmZmZmXCIsZGFya2JsdWU6XCIjMDAwMDhiXCIsZGFya2N5YW46XCIjMDA4YjhiXCIsZGFya2dvbGRlbnJvZDpcIiNiODg2MGJcIixkYXJrZ3JheTpcIiNhOWE5YTlcIixkYXJrZ3JlZW46XCIjMDA2NDAwXCIsZGFya2dyZXk6XCIjYTlhOWE5XCIsZGFya2toYWtpOlwiI2JkYjc2YlwiLGRhcmttYWdlbnRhOlwiIzhiMDA4YlwiLGRhcmtvbGl2ZWdyZWVuOlwiIzU1NmIyZlwiLGRhcmtvcmFuZ2U6XCIjZmY4YzAwXCIsZGFya29yY2hpZDpcIiM5OTMyY2NcIixkYXJrcmVkOlwiIzhiMDAwMFwiLGRhcmtzYWxtb246XCIjZTk5NjdhXCIsZGFya3NlYWdyZWVuOlwiIzhmYmM4ZlwiLGRhcmtzbGF0ZWJsdWU6XCIjNDgzZDhiXCIsZGFya3NsYXRlZ3JheTpcIiMyZjRmNGZcIixkYXJrc2xhdGVncmV5OlwiIzJmNGY0ZlwiLGRhcmt0dXJxdW9pc2U6XCIjMDBjZWQxXCIsZGFya3Zpb2xldDpcIiM5NDAwZDNcIixkZWVwcGluazpcIiNmZjE0OTNcIixkZWVwc2t5Ymx1ZTpcIiMwMGJmZmZcIixkaW1ncmF5OlwiIzY5Njk2OVwiLGRpbWdyZXk6XCIjNjk2OTY5XCIsZG9kZ2VyYmx1ZTpcIiMxZTkwZmZcIixmaXJlYnJpY2s6XCIjYjIyMjIyXCIsZmxvcmFsd2hpdGU6XCIjZmZmYWYwXCIsZm9yZXN0Z3JlZW46XCIjMjI4YjIyXCIsZnVjaHNpYTpcIiNmZjAwZmZcIixnYWluc2Jvcm86XCIjZGNkY2RjXCIsZ2hvc3R3aGl0ZTpcIiNmOGY4ZmZcIixnb2xkOlwiI2ZmZDcwMFwiLGdvbGRlbnJvZDpcIiNkYWE1MjBcIixncmF5OlwiIzgwODA4MFwiLGdyZWVuOlwiIzAwODAwMFwiLGdyZWVueWVsbG93OlwiI2FkZmYyZlwiLGdyZXk6XCIjODA4MDgwXCIsaG9uZXlkZXc6XCIjZjBmZmYwXCIsaG90cGluazpcIiNmZjY5YjRcIixpbmRpYW5yZWQ6XCIjY2Q1YzVjXCIsaW5kaWdvOlwiIzRiMDA4MlwiLGl2b3J5OlwiI2ZmZmZmMFwiLGtoYWtpOlwiI2YwZTY4Y1wiLGxhdmVuZGVyOlwiI2U2ZTZmYVwiLGxhdmVuZGVyYmx1c2g6XCIjZmZmMGY1XCIsbGF3bmdyZWVuOlwiIzdjZmMwMFwiLGxlbW9uY2hpZmZvbjpcIiNmZmZhY2RcIixsaWdodGJsdWU6XCIjYWRkOGU2XCIsbGlnaHRjb3JhbDpcIiNmMDgwODBcIixsaWdodGN5YW46XCIjZTBmZmZmXCIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6XCIjZmFmYWQyXCIsbGlnaHRncmF5OlwiI2QzZDNkM1wiLGxpZ2h0Z3JlZW46XCIjOTBlZTkwXCIsbGlnaHRncmV5OlwiI2QzZDNkM1wiLGxpZ2h0cGluazpcIiNmZmI2YzFcIixsaWdodHNhbG1vbjpcIiNmZmEwN2FcIixsaWdodHNlYWdyZWVuOlwiIzIwYjJhYVwiLGxpZ2h0c2t5Ymx1ZTpcIiM4N2NlZmFcIixsaWdodHNsYXRlZ3JheTpcIiM3Nzg4OTlcIixsaWdodHNsYXRlZ3JleTpcIiM3Nzg4OTlcIixsaWdodHN0ZWVsYmx1ZTpcIiNiMGM0ZGVcIixsaWdodHllbGxvdzpcIiNmZmZmZTBcIixsaW1lOlwiIzAwZmYwMFwiLGxpbWVncmVlbjpcIiMzMmNkMzJcIixsaW5lbjpcIiNmYWYwZTZcIixtYWdlbnRhOlwiI2ZmMDBmZlwiLG1hcm9vbjpcIiM4MDAwMDBcIixtZWRpdW1hcXVhbWFyaW5lOlwiIzY2Y2RhYVwiLG1lZGl1bWJsdWU6XCIjMDAwMGNkXCIsbWVkaXVtb3JjaGlkOlwiI2JhNTVkM1wiLG1lZGl1bXB1cnBsZTpcIiM5MzcwZGJcIixtZWRpdW1zZWFncmVlbjpcIiMzY2IzNzFcIixtZWRpdW1zbGF0ZWJsdWU6XCIjN2I2OGVlXCIsbWVkaXVtc3ByaW5nZ3JlZW46XCIjMDBmYTlhXCIsbWVkaXVtdHVycXVvaXNlOlwiIzQ4ZDFjY1wiLG1lZGl1bXZpb2xldHJlZDpcIiNjNzE1ODVcIixtaWRuaWdodGJsdWU6XCIjMTkxOTcwXCIsbWludGNyZWFtOlwiI2Y1ZmZmYVwiLG1pc3R5cm9zZTpcIiNmZmU0ZTFcIixtb2NjYXNpbjpcIiNmZmU0YjVcIixuYXZham93aGl0ZTpcIiNmZmRlYWRcIixuYXZ5OlwiIzAwMDA4MFwiLG9sZGxhY2U6XCIjZmRmNWU2XCIsb2xpdmU6XCIjODA4MDAwXCIsb2xpdmVkcmFiOlwiIzZiOGUyM1wiLG9yYW5nZTpcIiNmZmE1MDBcIixvcmFuZ2VyZWQ6XCIjZmY0NTAwXCIsb3JjaGlkOlwiI2RhNzBkNlwiLHBhbGVnb2xkZW5yb2Q6XCIjZWVlOGFhXCIscGFsZWdyZWVuOlwiIzk4ZmI5OFwiLHBhbGV0dXJxdW9pc2U6XCIjYWZlZWVlXCIscGFsZXZpb2xldHJlZDpcIiNkYjcwOTNcIixwYXBheWF3aGlwOlwiI2ZmZWZkNVwiLHBlYWNocHVmZjpcIiNmZmRhYjlcIixwZXJ1OlwiI2NkODUzZlwiLHBpbms6XCIjZmZjMGNiXCIscGx1bTpcIiNkZGEwZGRcIixwb3dkZXJibHVlOlwiI2IwZTBlNlwiLHB1cnBsZTpcIiM4MDAwODBcIixyZWQ6XCIjZmYwMDAwXCIscm9zeWJyb3duOlwiI2JjOGY4ZlwiLHJveWFsYmx1ZTpcIiM0MTY5ZTFcIixzYWRkbGVicm93bjpcIiM4YjQ1MTNcIixzYWxtb246XCIjZmE4MDcyXCIsc2FuZHlicm93bjpcIiNmNGE0NjBcIixzZWFncmVlbjpcIiMyZThiNTdcIixzZWFzaGVsbDpcIiNmZmY1ZWVcIixzaWVubmE6XCIjYTA1MjJkXCIsc2lsdmVyOlwiI2MwYzBjMFwiLHNreWJsdWU6XCIjODdjZWViXCIsc2xhdGVibHVlOlwiIzZhNWFjZFwiLHNsYXRlZ3JheTpcIiM3MDgwOTBcIixzbGF0ZWdyZXk6XCIjNzA4MDkwXCIsc25vdzpcIiNmZmZhZmFcIixzcHJpbmdncmVlbjpcIiMwMGZmN2ZcIixzdGVlbGJsdWU6XCIjNDY4MmI0XCIsdGFuOlwiI2QyYjQ4Y1wiLHRlYWw6XCIjMDA4MDgwXCIsdGhpc3RsZTpcIiNkOGJmZDhcIix0b21hdG86XCIjZmY2MzQ3XCIsdHVycXVvaXNlOlwiIzQwZTBkMFwiLHZpb2xldDpcIiNlZTgyZWVcIix3aGVhdDpcIiNmNWRlYjNcIix3aGl0ZTpcIiNmZmZmZmZcIix3aGl0ZXNtb2tlOlwiI2Y1ZjVmNVwiLHllbGxvdzpcIiNmZmZmMDBcIix5ZWxsb3dncmVlbjpcIiM5YWNkMzJcIn0saD0vXFxzKi8saT0vKFxcZHsxLDN9KS8saj0vKCg/OlxcZCsoPzpcXC5cXGQrKT8pfCg/OlxcLlxcZCspKS8saz1uZXcgUmVnRXhwKGouc291cmNlK1wiJVwiKSxsPXtIRVgzOi9eIyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKSQvaSxIRVg0Oi9eIyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkkL2ksSEVYNjovXiMoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkkL2ksSEVYODovXiMoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pJC9pLFJHQjpuZXcgUmVnRXhwKFtcIl5yZ2JcXFxcKFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxSR0JfUEVSQ0VOVDpuZXcgUmVnRXhwKFtcIl5yZ2JcXFxcKFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxSR0JBOm5ldyBSZWdFeHAoW1wiXnJnYmFcXFxcKFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiLFwiLGouc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxSR0JBX1BFUkNFTlQ6bmV3IFJlZ0V4cChbXCJecmdiYVxcXFwoXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsai5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLEhTTDpuZXcgUmVnRXhwKFtcIl5oc2xcXFxcKFwiLGkuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxIU0xBOm5ldyBSZWdFeHAoW1wiXmhzbGFcXFxcKFwiLGkuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGouc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxIU0I6bmV3IFJlZ0V4cChbXCJeaHNiXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksSFNCQTpuZXcgUmVnRXhwKFtcIl5oc2JhXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixqLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIil9O2QuQ29sb3IuX3BhcnNlSW5wdXRzPWZ1bmN0aW9uKGEsYixjLGgpe3ZhciBpLGo9YXJndW1lbnRzLmxlbmd0aCxrPXRoaXMubW9kZSxtPXRoaXMubWF4ZXNba10sbj1bXTtpZihqPj0zKXtmb3IoblswXT1hL21bMF0sblsxXT1iL21bMV0sblsyXT1jL21bMl0sblszXT1cIm51bWJlclwiPT10eXBlb2YgaD9oL21bM106MSxpPW4ubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBvPW5baV07bzwwP25baV09MDpvPjEmJihuW2ldPTEpfXJldHVybiBrPT09ZS5IU0w/Zi5faHNsYVRvUkdCQShuKTprPT09ZS5IU0I/Zi5faHNiYVRvUkdCQShuKTpufWlmKDE9PT1qJiZcInN0cmluZ1wiPT10eXBlb2YgYSl7dmFyIHA9YS50cmltKCkudG9Mb3dlckNhc2UoKTtpZihnW3BdKXJldHVybiBkLkNvbG9yLl9wYXJzZUlucHV0cy5jYWxsKHRoaXMsZ1twXSk7aWYobC5IRVgzLnRlc3QocCkpcmV0dXJuIG49bC5IRVgzLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUludChhK2EsMTYpLzI1NX0pLG5bM109MSxuO2lmKGwuSEVYNi50ZXN0KHApKXJldHVybiBuPWwuSEVYNi5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSwxNikvMjU1fSksblszXT0xLG47aWYobC5IRVg0LnRlc3QocCkpcmV0dXJuIG49bC5IRVg0LmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUludChhK2EsMTYpLzI1NX0pO2lmKGwuSEVYOC50ZXN0KHApKXJldHVybiBuPWwuSEVYOC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSwxNikvMjU1fSk7aWYobC5SR0IudGVzdChwKSlyZXR1cm4gbj1sLlJHQi5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS8yNTV9KSxuWzNdPTEsbjtpZihsLlJHQl9QRVJDRU5ULnRlc3QocCkpcmV0dXJuIG49bC5SR0JfUEVSQ0VOVC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VGbG9hdChhKS8xMDB9KSxuWzNdPTEsbjtpZihsLlJHQkEudGVzdChwKSlyZXR1cm4gbj1sLlJHQkEuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMz09PWI/cGFyc2VGbG9hdChhKTphLzI1NX0pO2lmKGwuUkdCQV9QRVJDRU5ULnRlc3QocCkpcmV0dXJuIG49bC5SR0JBX1BFUkNFTlQuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMz09PWI/cGFyc2VGbG9hdChhKTpwYXJzZUZsb2F0KGEpLzEwMH0pO2lmKGwuSFNMLnRlc3QocCk/KG49bC5IU0wuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOnBhcnNlSW50KGEsMTApLzEwMH0pLG5bM109MSk6bC5IU0xBLnRlc3QocCkmJihuPWwuSFNMQS5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAwPT09Yj9wYXJzZUludChhLDEwKS8zNjA6Mz09PWI/cGFyc2VGbG9hdChhKTpwYXJzZUludChhLDEwKS8xMDB9KSksbj1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oYSwxKSwwKX0pLG4ubGVuZ3RoKXJldHVybiBmLl9oc2xhVG9SR0JBKG4pO2lmKGwuSFNCLnRlc3QocCk/KG49bC5IU0IuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOnBhcnNlSW50KGEsMTApLzEwMH0pLG5bM109MSk6bC5IU0JBLnRlc3QocCkmJihuPWwuSFNCQS5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAwPT09Yj9wYXJzZUludChhLDEwKS8zNjA6Mz09PWI/cGFyc2VGbG9hdChhKTpwYXJzZUludChhLDEwKS8xMDB9KSksbi5sZW5ndGgpe2ZvcihpPW4ubGVuZ3RoLTE7aT49MDstLWkpbltpXT1NYXRoLm1heChNYXRoLm1pbihuW2ldLDEpLDApO3JldHVybiBmLl9oc2JhVG9SR0JBKG4pfW49WzEsMSwxLDFdfWVsc2V7aWYoMSE9PWomJjIhPT1qfHxcIm51bWJlclwiIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoYXJndW1lbnRzK1wiaXMgbm90IGEgdmFsaWQgY29sb3IgcmVwcmVzZW50YXRpb24uXCIpO25bMF09YS9tWzJdLG5bMV09YS9tWzJdLG5bMl09YS9tWzJdLG5bM109XCJudW1iZXJcIj09dHlwZW9mIGI/Yi9tWzNdOjEsbj1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oYSwxKSwwKX0pfXJldHVybiBufSxiLmV4cG9ydHM9ZC5Db2xvcn0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9jb2xvcl9jb252ZXJzaW9uXCI6MTR9XSwxNzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4vcDUuQ29sb3JcIiksZC5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQuSW1hZ2U/dGhpcy5pbWFnZShhcmd1bWVudHNbMF0sMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpOnRoaXMuX3JlbmRlcmVyLmJhY2tncm91bmQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5jbGVhcigpLHRoaXN9LGQucHJvdG90eXBlLmNvbG9yTW9kZT1mdW5jdGlvbihhLGIsYyxmLGcpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvbG9yTW9kZVwiLGFyZ3VtZW50cyksYT09PWUuUkdCfHxhPT09ZS5IU0J8fGE9PT1lLkhTTCl7dGhpcy5fY29sb3JNb2RlPWE7dmFyIGg9dGhpcy5fY29sb3JNYXhlc1thXTsyPT09YXJndW1lbnRzLmxlbmd0aD8oaFswXT1iLGhbMV09YixoWzJdPWIsaFszXT1iKTo0PT09YXJndW1lbnRzLmxlbmd0aD8oaFswXT1iLGhbMV09YyxoWzJdPWYpOjU9PT1hcmd1bWVudHMubGVuZ3RoJiYoaFswXT1iLGhbMV09YyxoWzJdPWYsaFszXT1nKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZmlsbFNldFwiLCEwKSx0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZG9GaWxsXCIsITApLHRoaXMuX3JlbmRlcmVyLmZpbGwuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5ub0ZpbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvRmlsbFwiLCExKSx0aGlzfSxkLnByb3RvdHlwZS5ub1N0cm9rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZG9TdHJva2VcIiwhMSksdGhpc30sZC5wcm90b3R5cGUuc3Ryb2tlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9zdHJva2VTZXRcIiwhMCksdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvU3Ryb2tlXCIsITApLHRoaXMuX3JlbmRlcmVyLnN0cm9rZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LkNvbG9yXCI6MTZ9XSwxODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPU1hdGguUEk7Yi5leHBvcnRzPXtQMkQ6XCJwMmRcIixXRUJHTDpcIndlYmdsXCIsQVJST1c6XCJkZWZhdWx0XCIsQ1JPU1M6XCJjcm9zc2hhaXJcIixIQU5EOlwicG9pbnRlclwiLE1PVkU6XCJtb3ZlXCIsVEVYVDpcInRleHRcIixXQUlUOlwid2FpdFwiLEhBTEZfUEk6ZC8yLFBJOmQsUVVBUlRFUl9QSTpkLzQsVEFVOjIqZCxUV09fUEk6MipkLERFR1JFRVM6XCJkZWdyZWVzXCIsUkFESUFOUzpcInJhZGlhbnNcIixERUdfVE9fUkFEOmQvMTgwLFJBRF9UT19ERUc6MTgwL2QsQ09STkVSOlwiY29ybmVyXCIsQ09STkVSUzpcImNvcm5lcnNcIixSQURJVVM6XCJyYWRpdXNcIixSSUdIVDpcInJpZ2h0XCIsTEVGVDpcImxlZnRcIixDRU5URVI6XCJjZW50ZXJcIixUT1A6XCJ0b3BcIixCT1RUT006XCJib3R0b21cIixCQVNFTElORTpcImFscGhhYmV0aWNcIixQT0lOVFM6MCxMSU5FUzoxLExJTkVfU1RSSVA6MyxMSU5FX0xPT1A6MixUUklBTkdMRVM6NCxUUklBTkdMRV9GQU46NixUUklBTkdMRV9TVFJJUDo1LFFVQURTOlwicXVhZHNcIixRVUFEX1NUUklQOlwicXVhZF9zdHJpcFwiLENMT1NFOlwiY2xvc2VcIixPUEVOOlwib3BlblwiLENIT1JEOlwiY2hvcmRcIixQSUU6XCJwaWVcIixQUk9KRUNUOlwic3F1YXJlXCIsU1FVQVJFOlwiYnV0dFwiLFJPVU5EOlwicm91bmRcIixCRVZFTDpcImJldmVsXCIsTUlURVI6XCJtaXRlclwiLFJHQjpcInJnYlwiLEhTQjpcImhzYlwiLEhTTDpcImhzbFwiLEFVVE86XCJhdXRvXCIsQUxUOjE4LEJBQ0tTUEFDRTo4LENPTlRST0w6MTcsREVMRVRFOjQ2LERPV05fQVJST1c6NDAsRU5URVI6MTMsRVNDQVBFOjI3LExFRlRfQVJST1c6MzcsT1BUSU9OOjE4LFJFVFVSTjoxMyxSSUdIVF9BUlJPVzozOSxTSElGVDoxNixUQUI6OSxVUF9BUlJPVzozOCxCTEVORDpcInNvdXJjZS1vdmVyXCIsQUREOlwibGlnaHRlclwiLERBUktFU1Q6XCJkYXJrZW5cIixMSUdIVEVTVDpcImxpZ2h0ZW5cIixESUZGRVJFTkNFOlwiZGlmZmVyZW5jZVwiLEVYQ0xVU0lPTjpcImV4Y2x1c2lvblwiLE1VTFRJUExZOlwibXVsdGlwbHlcIixTQ1JFRU46XCJzY3JlZW5cIixSRVBMQUNFOlwiY29weVwiLE9WRVJMQVk6XCJvdmVybGF5XCIsSEFSRF9MSUdIVDpcImhhcmQtbGlnaHRcIixTT0ZUX0xJR0hUOlwic29mdC1saWdodFwiLERPREdFOlwiY29sb3ItZG9kZ2VcIixCVVJOOlwiY29sb3ItYnVyblwiLFRIUkVTSE9MRDpcInRocmVzaG9sZFwiLEdSQVk6XCJncmF5XCIsT1BBUVVFOlwib3BhcXVlXCIsSU5WRVJUOlwiaW52ZXJ0XCIsUE9TVEVSSVpFOlwicG9zdGVyaXplXCIsRElMQVRFOlwiZGlsYXRlXCIsRVJPREU6XCJlcm9kZVwiLEJMVVI6XCJibHVyXCIsTk9STUFMOlwibm9ybWFsXCIsSVRBTElDOlwiaXRhbGljXCIsQk9MRDpcImJvbGRcIixfREVGQVVMVF9URVhUX0ZJTEw6XCIjMDAwMDAwXCIsX0RFRkFVTFRfTEVBRE1VTFQ6MS4yNSxfQ1RYX01JRERMRTpcIm1pZGRsZVwiLExJTkVBUjpcImxpbmVhclwiLFFVQURSQVRJQzpcInF1YWRyYXRpY1wiLEJFWklFUjpcImJlemllclwiLENVUlZFOlwiY3VydmVcIixTVFJPS0U6XCJzdHJva2VcIixGSUxMOlwiZmlsbFwiLFRFWFRVUkU6XCJ0ZXh0dXJlXCIsSU1NRURJQVRFOlwiaW1tZWRpYXRlXCIsTkVBUkVTVDpcIm5lYXJlc3RcIixSRVBFQVQ6XCJyZXBlYXRcIixDTEFNUDpcImNsYW1wXCIsTUlSUk9SOlwibWlycm9yXCIsTEFORFNDQVBFOlwibGFuZHNjYXBlXCIsUE9SVFJBSVQ6XCJwb3J0cmFpdFwiLF9ERUZBVUxUX1NUUk9LRTpcIiMwMDAwMDBcIixfREVGQVVMVF9GSUxMOlwiI0ZGRkZGRlwiLEdSSUQ6XCJncmlkXCIsQVhFUzpcImF4ZXNcIn19LHt9XSwxOTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoKXtyZXR1cm4gd2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRofHxkb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRofHwwfWZ1bmN0aW9uIGUoKXtyZXR1cm4gd2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHR8fGRvY3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0fHwwfWZ1bmN0aW9uIGYoYSl7aWYoIShkb2N1bWVudC5mdWxsc2NyZWVuRW5hYmxlZHx8ZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVuYWJsZWR8fGRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbmFibGVkfHxkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbmFibGVkKSl0aHJvdyBuZXcgRXJyb3IoXCJGdWxsc2NyZWVuIG5vdCBlbmFibGVkIGluIHRoaXMgYnJvd3Nlci5cIilcbjthLnJlcXVlc3RGdWxsc2NyZWVuP2EucmVxdWVzdEZ1bGxzY3JlZW4oKTphLm1velJlcXVlc3RGdWxsU2NyZWVuP2EubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTphLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuP2Eud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTphLm1zUmVxdWVzdEZ1bGxzY3JlZW4mJmEubXNSZXF1ZXN0RnVsbHNjcmVlbigpfWZ1bmN0aW9uIGcoKXtkb2N1bWVudC5leGl0RnVsbHNjcmVlbj9kb2N1bWVudC5leGl0RnVsbHNjcmVlbigpOmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4/ZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpOmRvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuP2RvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuKCk6ZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbiYmZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpfXZhciBoPWEoXCIuL21haW5cIiksaT1hKFwiLi9jb25zdGFudHNcIiksaj1baS5BUlJPVyxpLkNST1NTLGkuSEFORCxpLk1PVkUsaS5URVhULGkuV0FJVF07aC5wcm90b3R5cGUuX2ZyYW1lUmF0ZT0wLGgucHJvdG90eXBlLl9sYXN0RnJhbWVUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSxoLnByb3RvdHlwZS5fdGFyZ2V0RnJhbWVSYXRlPTYwO3ZhciBrPXdpbmRvdy5wcmludDtoLnByb3RvdHlwZS5wcmludD1mdW5jdGlvbigpe2FyZ3VtZW50cy5sZW5ndGg/Y29uc29sZS5sb2cuYXBwbHkoY29uc29sZSxhcmd1bWVudHMpOmsoKX0saC5wcm90b3R5cGUuZnJhbWVDb3VudD0wLGgucHJvdG90eXBlLmZvY3VzZWQ9ZG9jdW1lbnQuaGFzRm9jdXMoKSxoLnByb3RvdHlwZS5jdXJzb3I9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVwiYXV0b1wiLGU9dGhpcy5fY3VyRWxlbWVudC5lbHQ7aWYoai5pbmRleE9mKGEpPi0xKWQ9YTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXt2YXIgZj1cIlwiO2ImJmMmJlwibnVtYmVyXCI9PXR5cGVvZiBiJiZcIm51bWJlclwiPT10eXBlb2YgYyYmKGY9YitcIiBcIitjKSxkPVwiaHR0cDovL1wiPT09YS5zdWJzdHJpbmcoMCw3KXx8XCJodHRwczovL1wiPT09YS5zdWJzdHJpbmcoMCw4KT9cInVybChcIithK1wiKSBcIitmK1wiLCBhdXRvXCI6L1xcLihjdXJ8anBnfGpwZWd8Z2lmfHBuZ3xDVVJ8SlBHfEpQRUd8R0lGfFBORykkLy50ZXN0KGEpP1widXJsKFwiK2ErXCIpIFwiK2YrXCIsIGF1dG9cIjphfWUuc3R5bGUuY3Vyc29yPWR9LGgucHJvdG90eXBlLmZyYW1lUmF0ZT1mdW5jdGlvbihhKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZnJhbWVSYXRlXCIsYXJndW1lbnRzKSxcIm51bWJlclwiIT10eXBlb2YgYXx8YTwwP3RoaXMuX2ZyYW1lUmF0ZToodGhpcy5fc2V0UHJvcGVydHkoXCJfdGFyZ2V0RnJhbWVSYXRlXCIsYSksdGhpcy5fcnVuRnJhbWVzKCksdGhpcyl9LGgucHJvdG90eXBlLmdldEZyYW1lUmF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZyYW1lUmF0ZSgpfSxoLnByb3RvdHlwZS5zZXRGcmFtZVJhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZnJhbWVSYXRlKGEpfSxoLnByb3RvdHlwZS5ub0N1cnNvcj1mdW5jdGlvbigpe3RoaXMuX2N1ckVsZW1lbnQuZWx0LnN0eWxlLmN1cnNvcj1cIm5vbmVcIn0saC5wcm90b3R5cGUuZGlzcGxheVdpZHRoPXNjcmVlbi53aWR0aCxoLnByb3RvdHlwZS5kaXNwbGF5SGVpZ2h0PXNjcmVlbi5oZWlnaHQsaC5wcm90b3R5cGUud2luZG93V2lkdGg9ZCgpLGgucHJvdG90eXBlLndpbmRvd0hlaWdodD1lKCksaC5wcm90b3R5cGUuX29ucmVzaXplPWZ1bmN0aW9uKGEpe3RoaXMuX3NldFByb3BlcnR5KFwid2luZG93V2lkdGhcIixkKCkpLHRoaXMuX3NldFByb3BlcnR5KFwid2luZG93SGVpZ2h0XCIsZSgpKTt2YXIgYixjPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO1wiZnVuY3Rpb25cIj09dHlwZW9mIGMud2luZG93UmVzaXplZCYmKHZvaWQgMD09PShiPWMud2luZG93UmVzaXplZChhKSl8fGJ8fGEucHJldmVudERlZmF1bHQoKSl9LGgucHJvdG90eXBlLndpZHRoPTAsaC5wcm90b3R5cGUuaGVpZ2h0PTAsaC5wcm90b3R5cGUuZnVsbHNjcmVlbj1mdW5jdGlvbihhKXtpZihoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJmdWxsc2NyZWVuXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hKXJldHVybiBkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fGRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50O2E/Zihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOmcoKX0saC5wcm90b3R5cGUucGl4ZWxEZW5zaXR5PWZ1bmN0aW9uKGEpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBpeGVsRGVuc2l0eVwiLGFyZ3VtZW50cyk7dmFyIGI7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGE/KGEhPT10aGlzLl9waXhlbERlbnNpdHkmJih0aGlzLl9waXhlbERlbnNpdHk9YSx0aGlzLl9waXhlbHNEaXJ0eT0hMCksYj10aGlzLHRoaXMucmVzaXplQ2FudmFzKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsITApKTpiPXRoaXMuX3BpeGVsRGVuc2l0eSxifSxoLnByb3RvdHlwZS5kaXNwbGF5RGVuc2l0eT1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb30saC5wcm90b3R5cGUuZ2V0VVJMPWZ1bmN0aW9uKCl7cmV0dXJuIGxvY2F0aW9uLmhyZWZ9LGgucHJvdG90eXBlLmdldFVSTFBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gbG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm5cIlwiIT09YX0pfSxoLnByb3RvdHlwZS5nZXRVUkxQYXJhbXM9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0vWz8mXShbXiY9XSspKD86WyY9XSkoW14mPV0rKS9naW0sYz17fTtudWxsIT0oYT1iLmV4ZWMobG9jYXRpb24uc2VhcmNoKSk7KWEuaW5kZXg9PT1iLmxhc3RJbmRleCYmYi5sYXN0SW5kZXgrKyxjW2FbMV1dPWFbMl07cmV0dXJuIGN9LGIuZXhwb3J0cz1ofSx7XCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjR9XSwyMDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIik7YShcIi4vY29uc3RhbnRzXCIpO2QuX3ZhbGlkYXRlUGFyYW1ldGVycz1kLl9mcmllbmRseUZpbGVMb2FkRXJyb3I9ZnVuY3Rpb24oKXt9O3ZhciBlPW51bGwsZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9wcm9jZXNzaW5nL3A1LmpzL3dpa2kvcDUuanMtb3ZlcnZpZXcjd2h5LWNhbnQtaS1hc3NpZ24tdmFyaWFibGVzLXVzaW5nLXA1LWZ1bmN0aW9ucy1hbmQtdmFyaWFibGVzLWJlZm9yZS1zZXR1cFwiLGc9ZnVuY3Rpb24oKXt2YXIgYj17fSxjPWZ1bmN0aW9uKGEpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuXCJfXCIhPT1hWzBdJiYoIShhIGluIGIpJiYoYlthXT0hMCwhMCkpfSkubWFwKGZ1bmN0aW9uKGIpe3ZhciBjO3JldHVybiBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIGFbYl0/XCJmdW5jdGlvblwiOmI9PT1iLnRvVXBwZXJDYXNlKCk/XCJjb25zdGFudFwiOlwidmFyaWFibGVcIix7bmFtZTpiLHR5cGU6Y319KX07ZT1bXS5jb25jYXQoYyhkLnByb3RvdHlwZSksYyhhKFwiLi9jb25zdGFudHNcIikpKSxlLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5uYW1lLmxlbmd0aC1hLm5hbWUubGVuZ3RofSl9LGg9ZnVuY3Rpb24oYSxiKXtifHwoYj1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpKSxlfHxnKCksZS5zb21lKGZ1bmN0aW9uKGMpe2lmKGEubWVzc2FnZSYmbnVsbCE9PWEubWVzc2FnZS5tYXRjaChcIlxcXFxXP1wiK2MubmFtZStcIlxcXFxXXCIpKXJldHVybiBiKFwiRGlkIHlvdSBqdXN0IHRyeSB0byB1c2UgcDUuanMncyBcIitjLm5hbWUrKFwiZnVuY3Rpb25cIj09PWMudHlwZT9cIigpIFwiOlwiIFwiKStjLnR5cGUrXCI/IElmIHNvLCB5b3UgbWF5IHdhbnQgdG8gbW92ZSBpdCBpbnRvIHlvdXIgc2tldGNoJ3Mgc2V0dXAoKSBmdW5jdGlvbi5cXG5cXG5Gb3IgbW9yZSBkZXRhaWxzLCBzZWU6IFwiK2YpLCEwfSl9O2QucHJvdG90eXBlLl9oZWxwRm9yTWlzdXNlZEF0VG9wTGV2ZWxDb2RlPWgsXCJjb21wbGV0ZVwiIT09ZG9jdW1lbnQucmVhZHlTdGF0ZSYmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIixoLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIixoLCExKX0pKSxiLmV4cG9ydHM9ZH0se1wiLi4vLi4vZG9jcy9yZWZlcmVuY2UvZGF0YS5qc29uXCI6dm9pZCAwLFwiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0fV0sMjE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9jb25zdGFudHNcIik7Yi5leHBvcnRzPXttb2RlQWRqdXN0OmZ1bmN0aW9uKGEsYixjLGUsZil7cmV0dXJuIGY9PT1kLkNPUk5FUj97eDphLHk6Yix3OmMsaDplfTpmPT09ZC5DT1JORVJTP3t4OmEseTpiLHc6Yy1hLGg6ZS1ifTpmPT09ZC5SQURJVVM/e3g6YS1jLHk6Yi1lLHc6MipjLGg6MiplfTpmPT09ZC5DRU5URVI/e3g6YS0uNSpjLHk6Yi0uNSplLHc6YyxoOmV9OnZvaWQgMH19fSx7XCIuL2NvbnN0YW50c1wiOjE4fV0sMjI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9ZnVuY3Rpb24oKXt3aW5kb3cubW9jaGF8fCh3aW5kb3cuc2V0dXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHdpbmRvdy5zZXR1cHx8d2luZG93LmRyYXcmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHdpbmRvdy5kcmF3KSYmIWQuaW5zdGFuY2UmJm5ldyBkfTtcImNvbXBsZXRlXCI9PT1kb2N1bWVudC5yZWFkeVN0YXRlP2UoKTp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixlLCExKX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSwyMzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIik7ZC5wcm90b3R5cGUuZXhpdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcImV4aXQoKSBub3QgaW1wbGVtZW50ZWQsIHNlZSByZW1vdmUoKVwiKX0sZC5wcm90b3R5cGUucHVzaFN0eWxlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicHVzaFN0eWxlKCkgbm90IHVzZWQsIHNlZSBwdXNoKClcIil9LGQucHJvdG90eXBlLnBvcFN0eWxlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicG9wU3R5bGUoKSBub3QgdXNlZCwgc2VlIHBvcCgpXCIpfSxkLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7dmFyIGE9XCJzaXplKCkgaXMgbm90IGEgdmFsaWQgcDUgZnVuY3Rpb24sIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgXCI7dGhyb3cgYSs9XCJkcmF3aW5nIGNhbnZhcywgcGxlYXNlIHVzZSBjcmVhdGVDYW52YXMoKSBpbnN0ZWFkXCIsbmV3IEVycm9yKGEpfSxiLmV4cG9ydHM9ZH0se1wiLi9tYWluXCI6MjR9XSwyNDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2EoXCIuL3NoaW1cIik7dmFyIGQ9YShcIi4vY29uc3RhbnRzXCIpLGU9ZnVuY3Rpb24oYSxiLGMpe1wiYm9vbGVhblwiPT10eXBlb2YgYiYmdm9pZCAwPT09YyYmKGM9YixiPXZvaWQgMCksdGhpcy5fc2V0dXBEb25lPSExLHRoaXMuX3BpeGVsRGVuc2l0eT1NYXRoLmNlaWwod2luZG93LmRldmljZVBpeGVsUmF0aW8pfHwxLHRoaXMuX3VzZXJOb2RlPWIsdGhpcy5fY3VyRWxlbWVudD1udWxsLHRoaXMuX2VsZW1lbnRzPVtdLHRoaXMuX3JlcXVlc3RBbmltSWQ9MCx0aGlzLl9wcmVsb2FkQ291bnQ9MCx0aGlzLl9pc0dsb2JhbD0hMSx0aGlzLl9sb29wPSEwLHRoaXMuX2luaXRpYWxpemVJbnN0YW5jZVZhcmlhYmxlcygpLHRoaXMuX2RlZmF1bHRDYW52YXNTaXplPXt3aWR0aDoxMDAsaGVpZ2h0OjEwMH0sdGhpcy5fZXZlbnRzPXttb3VzZW1vdmU6bnVsbCxtb3VzZWRvd246bnVsbCxtb3VzZXVwOm51bGwsZHJhZ2VuZDpudWxsLGRyYWdvdmVyOm51bGwsY2xpY2s6bnVsbCxkYmxjbGljazpudWxsLG1vdXNlb3ZlcjpudWxsLG1vdXNlb3V0Om51bGwsa2V5ZG93bjpudWxsLGtleXVwOm51bGwsa2V5cHJlc3M6bnVsbCx0b3VjaHN0YXJ0Om51bGwsdG91Y2htb3ZlOm51bGwsdG91Y2hlbmQ6bnVsbCxyZXNpemU6bnVsbCxibHVyOm51bGx9LHRoaXMuX2V2ZW50cy53aGVlbD1udWxsLHRoaXMuX2xvYWRpbmdTY3JlZW5JZD1cInA1X2xvYWRpbmdcIix0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcz17fTtmb3IodmFyIGQ9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRNZXRob2RzKSxmPTA7ZjxkLmxlbmd0aDtmKyspe3ZhciBnPWRbZl07dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHNbZ109ZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRNZXRob2RzW2ddLnNsaWNlKCl9d2luZG93LkRldmljZU9yaWVudGF0aW9uRXZlbnQmJih0aGlzLl9ldmVudHMuZGV2aWNlb3JpZW50YXRpb249bnVsbCksd2luZG93LkRldmljZU1vdGlvbkV2ZW50JiYhd2luZG93Ll9pc05vZGVXZWJraXQmJih0aGlzLl9ldmVudHMuZGV2aWNlbW90aW9uPW51bGwpLHRoaXMuX3N0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fdXNlck5vZGUmJlwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLl91c2VyTm9kZSYmKHRoaXMuX3VzZXJOb2RlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX3VzZXJOb2RlKSk7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXMsYj1hLnByZWxvYWQ7aWYoYil7dmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fbG9hZGluZ1NjcmVlbklkKTtpZighYyl7Yz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGMuaW5uZXJIVE1MPVwiTG9hZGluZy4uLlwiLGMuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLGMuaWQ9dGhpcy5fbG9hZGluZ1NjcmVlbklkOyh0aGlzLl91c2VyTm9kZXx8ZG9jdW1lbnQuYm9keSkuYXBwZW5kQ2hpbGQoYyl9dmFyIGQ9dGhpcy5fcHJlbG9hZE1ldGhvZHM7Zm9yKHZhciBmIGluIGQpe2RbZl09ZFtmXXx8ZTt2YXIgZz1kW2ZdO2chPT1lLnByb3RvdHlwZSYmZyE9PWV8fCh0aGlzLl9pc0dsb2JhbCYmKHdpbmRvd1tmXT10aGlzLl93cmFwUHJlbG9hZCh0aGlzLGYpKSxnPXRoaXMpLHRoaXMuX3JlZ2lzdGVyZWRQcmVsb2FkTWV0aG9kc1tmXT1nW2ZdLGdbZl09dGhpcy5fd3JhcFByZWxvYWQoZyxmKX1iKCksdGhpcy5fcnVuSWZQcmVsb2Fkc0FyZURvbmUoKX1lbHNlIHRoaXMuX3NldHVwKCksdGhpcy5fcnVuRnJhbWVzKCksdGhpcy5fZHJhdygpfS5iaW5kKHRoaXMpLHRoaXMuX3J1bklmUHJlbG9hZHNBcmVEb25lPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoMD09PWEuX3ByZWxvYWRDb3VudCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYS5fbG9hZGluZ1NjcmVlbklkKTtiJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksYS5fc2V0dXAoKSxhLl9ydW5GcmFtZXMoKSxhLl9kcmF3KCl9fSx0aGlzLl9kZWNyZW1lbnRQcmVsb2FkPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7XCJmdW5jdGlvblwiPT10eXBlb2YgYS5wcmVsb2FkJiYoYS5fc2V0UHJvcGVydHkoXCJfcHJlbG9hZENvdW50XCIsYS5fcHJlbG9hZENvdW50LTEpLGEuX3J1bklmUHJlbG9hZHNBcmVEb25lKCkpfSx0aGlzLl93cmFwUHJlbG9hZD1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbmNyZW1lbnRQcmVsb2FkKCksdGhpcy5fcmVnaXN0ZXJlZFByZWxvYWRNZXRob2RzW2JdLmFwcGx5KGEsYXJndW1lbnRzKX0uYmluZCh0aGlzKX0sdGhpcy5faW5jcmVtZW50UHJlbG9hZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2EuX3NldFByb3BlcnR5KFwiX3ByZWxvYWRDb3VudFwiLGEuX3ByZWxvYWRDb3VudCsxKX0sdGhpcy5fc2V0dXA9ZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZUNhbnZhcyh0aGlzLl9kZWZhdWx0Q2FudmFzU2l6ZS53aWR0aCx0aGlzLl9kZWZhdWx0Q2FudmFzU2l6ZS5oZWlnaHQsXCJwMmRcIik7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYS5wcmVsb2FkKWZvcih2YXIgYiBpbiB0aGlzLl9wcmVsb2FkTWV0aG9kcylhW2JdPXRoaXMuX3ByZWxvYWRNZXRob2RzW2JdW2JdLGFbYl0mJnRoaXMmJihhW2JdPWFbYl0uYmluZCh0aGlzKSk7XCJmdW5jdGlvblwiPT10eXBlb2YgYS5zZXR1cCYmYS5zZXR1cCgpO2Zvcih2YXIgYz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNhbnZhc1wiKSxkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07XCJ0cnVlXCI9PT1lLmRhdGFzZXQuaGlkZGVuJiYoZS5zdHlsZS52aXNpYmlsaXR5PVwiXCIsZGVsZXRlIGUuZGF0YXNldC5oaWRkZW4pfXRoaXMuX3NldHVwRG9uZT0hMH0uYmluZCh0aGlzKSx0aGlzLl9kcmF3PWZ1bmN0aW9uKCl7dmFyIGE9d2luZG93LnBlcmZvcm1hbmNlLm5vdygpLGI9YS10aGlzLl9sYXN0RnJhbWVUaW1lLGM9MWUzL3RoaXMuX3RhcmdldEZyYW1lUmF0ZTsoIXRoaXMuX2xvb3B8fGI+PWMtNSkmJih0aGlzLnJlZHJhdygpLHRoaXMuX2ZyYW1lUmF0ZT0xZTMvKGEtdGhpcy5fbGFzdEZyYW1lVGltZSksdGhpcy5fbGFzdEZyYW1lVGltZT1hLHZvaWQgMCE9PXRoaXMuX3VwZGF0ZU1vdXNlQ29vcmRzJiZ0aGlzLl91cGRhdGVNb3VzZUNvb3JkcygpKSx0aGlzLl9sb29wJiYodGhpcy5fcmVxdWVzdEFuaW1JZD13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2RyYXcpKX0uYmluZCh0aGlzKSx0aGlzLl9ydW5GcmFtZXM9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVJbnRlcnZhbCYmY2xlYXJJbnRlcnZhbCh0aGlzLl91cGRhdGVJbnRlcnZhbCl9LmJpbmQodGhpcyksdGhpcy5fc2V0UHJvcGVydHk9ZnVuY3Rpb24oYSxiKXt0aGlzW2FdPWIsdGhpcy5faXNHbG9iYWwmJih3aW5kb3dbYV09Yil9LmJpbmQodGhpcyksdGhpcy5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9sb2FkaW5nU2NyZWVuSWQpO2lmKGEmJihhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSksdGhpcy5faW5jcmVtZW50UHJlbG9hZCgpKSx0aGlzLl9jdXJFbGVtZW50KXt0aGlzLl9sb29wPSExLHRoaXMuX3JlcXVlc3RBbmltSWQmJndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0QW5pbUlkKTtmb3IodmFyIGIgaW4gdGhpcy5fZXZlbnRzKXdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGIsdGhpcy5fZXZlbnRzW2JdKTtmb3IodmFyIGM9MDtjPHRoaXMuX2VsZW1lbnRzLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuX2VsZW1lbnRzW2NdO2QuZWx0LnBhcmVudE5vZGUmJmQuZWx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZC5lbHQpO2Zvcih2YXIgZiBpbiBkLl9ldmVudHMpZC5lbHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihmLGQuX2V2ZW50c1tmXSl9dmFyIGc9dGhpczt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5yZW1vdmUuZm9yRWFjaChmdW5jdGlvbihhKXt2b2lkIDAhPT1hJiZhLmNhbGwoZyl9KX1pZih0aGlzLl9pc0dsb2JhbCl7Zm9yKHZhciBoIGluIGUucHJvdG90eXBlKXRyeXtkZWxldGUgd2luZG93W2hdfWNhdGNoKGEpe3dpbmRvd1toXT12b2lkIDB9Zm9yKHZhciBpIGluIHRoaXMpaWYodGhpcy5oYXNPd25Qcm9wZXJ0eShpKSl0cnl7ZGVsZXRlIHdpbmRvd1tpXX1jYXRjaChhKXt3aW5kb3dbaV09dm9pZCAwfWUuaW5zdGFuY2U9bnVsbH19LmJpbmQodGhpcyksdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaW5pdC5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEmJmEuY2FsbCh0aGlzKX0sdGhpcyk7dmFyIGg9dGhpcy5fY3JlYXRlRnJpZW5kbHlHbG9iYWxGdW5jdGlvbkJpbmRlcigpO2lmKGEpYSh0aGlzKTtlbHNle3RoaXMuX2lzR2xvYmFsPSEwLGUuaW5zdGFuY2U9dGhpcztmb3IodmFyIGkgaW4gZS5wcm90b3R5cGUpaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5wcm90b3R5cGVbaV0pe3ZhciBqPWkuc3Vic3RyaW5nKDIpO3RoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShqKXx8KE1hdGguaGFzT3duUHJvcGVydHkoaSkmJk1hdGhbaV09PT1lLnByb3RvdHlwZVtpXT9oKGksZS5wcm90b3R5cGVbaV0pOmgoaSxlLnByb3RvdHlwZVtpXS5iaW5kKHRoaXMpKSl9ZWxzZSBoKGksZS5wcm90b3R5cGVbaV0pO2Zvcih2YXIgayBpbiB0aGlzKXRoaXMuaGFzT3duUHJvcGVydHkoaykmJmgoayx0aGlzW2tdKX1mb3IodmFyIGwgaW4gdGhpcy5fZXZlbnRzKXt2YXIgbT10aGlzW1wiX29uXCIrbF07aWYobSl7dmFyIG49bS5iaW5kKHRoaXMpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKGwsbix7cGFzc2l2ZTohMX0pLHRoaXMuX2V2ZW50c1tsXT1ufX12YXIgbz1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwiZm9jdXNlZFwiLCEwKX0uYmluZCh0aGlzKSxwPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJmb2N1c2VkXCIsITEpfS5iaW5kKHRoaXMpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIixvKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIixwKSx0aGlzLnJlZ2lzdGVyTWV0aG9kKFwicmVtb3ZlXCIsZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsbyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIscCl9KSxjP3RoaXMuX3N0YXJ0KCk6XCJjb21wbGV0ZVwiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZT90aGlzLl9zdGFydCgpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLHRoaXMuX3N0YXJ0LmJpbmQodGhpcyksITEpfTtlLnByb3RvdHlwZS5faW5pdGlhbGl6ZUluc3RhbmNlVmFyaWFibGVzPWZ1bmN0aW9uKCl7dGhpcy5fc3R5bGVzPVtdLHRoaXMuX2JlemllckRldGFpbD0yMCx0aGlzLl9jdXJ2ZURldGFpbD0yMCx0aGlzLl9jb2xvck1vZGU9ZC5SR0IsdGhpcy5fY29sb3JNYXhlcz17cmdiOlsyNTUsMjU1LDI1NSwyNTVdLGhzYjpbMzYwLDEwMCwxMDAsMV0saHNsOlszNjAsMTAwLDEwMCwxXX0sdGhpcy5fcGl4ZWxzRGlydHk9ITB9LGUuaW5zdGFuY2U9bnVsbCxlLmRpc2FibGVGcmllbmRseUVycm9ycz0hMTtmb3IodmFyIGYgaW4gZCllLnByb3RvdHlwZVtmXT1kW2ZdO2UucHJvdG90eXBlLl9wcmVsb2FkTWV0aG9kcz17bG9hZEpTT046ZS5wcm90b3R5cGUsbG9hZEltYWdlOmUucHJvdG90eXBlLGxvYWRTdHJpbmdzOmUucHJvdG90eXBlLGxvYWRYTUw6ZS5wcm90b3R5cGUsbG9hZEJ5dGVzOmUucHJvdG90eXBlLGxvYWRUYWJsZTplLnByb3RvdHlwZSxsb2FkRm9udDplLnByb3RvdHlwZSxsb2FkTW9kZWw6ZS5wcm90b3R5cGUsbG9hZFNoYWRlcjplLnByb3RvdHlwZX0sZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRNZXRob2RzPXtpbml0OltdLHByZTpbXSxwb3N0OltdLHJlbW92ZTpbXX0sZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRQcmVsb2FkTWV0aG9kcz17fSxlLnByb3RvdHlwZS5yZWdpc3RlclByZWxvYWRNZXRob2Q9ZnVuY3Rpb24oYSxiKXtlLnByb3RvdHlwZS5fcHJlbG9hZE1ldGhvZHMuaGFzT3duUHJvcGVydHkoYSl8fChlLnByb3RvdHlwZS5fcHJlbG9hZE1ldGhvZHNbYV09Yil9LGUucHJvdG90eXBlLnJlZ2lzdGVyTWV0aG9kPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpc3x8ZS5wcm90b3R5cGU7Yy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzT3duUHJvcGVydHkoYSl8fChjLl9yZWdpc3RlcmVkTWV0aG9kc1thXT1bXSksYy5fcmVnaXN0ZXJlZE1ldGhvZHNbYV0ucHVzaChiKX0sZS5wcm90b3R5cGUuX2NyZWF0ZUZyaWVuZGx5R2xvYmFsRnVuY3Rpb25CaW5kZXI9ZnVuY3Rpb24oYSl7YT1hfHx7fTt2YXIgYj1hLmdsb2JhbE9iamVjdHx8d2luZG93LGM9YS5sb2d8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksZD17cHJpbnQ6ITB9O3JldHVybiBmdW5jdGlvbihhLGYpe2lmKGUuZGlzYWJsZUZyaWVuZGx5RXJyb3JzLDEpYlthXT1mO2Vsc2UgdHJ5e2lmKGEgaW4gYiYmIShhIGluIGQpKXRocm93IG5ldyBFcnJvcignZ2xvYmFsIFwiJythKydcIiBhbHJlYWR5IGV4aXN0cycpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmfSxzZXQ6ZnVuY3Rpb24oZCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsYSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZCx3cml0YWJsZTohMH0pLGMoJ1lvdSBqdXN0IGNoYW5nZWQgdGhlIHZhbHVlIG9mIFwiJythK1wiXFxcIiwgd2hpY2ggd2FzIGEgcDUgZnVuY3Rpb24uIFRoaXMgY291bGQgY2F1c2UgcHJvYmxlbXMgbGF0ZXIgaWYgeW91J3JlIG5vdCBjYXJlZnVsLlwiKX19KX1jYXRjaChkKXtjKCdwNSBoYWQgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIGdsb2JhbCBmdW5jdGlvbiBcIicrYSsnXCIsIHBvc3NpYmx5IGJlY2F1c2UgeW91ciBjb2RlIGlzIGFscmVhZHkgdXNpbmcgdGhhdCBuYW1lIGFzIGEgdmFyaWFibGUuIFlvdSBtYXkgd2FudCB0byByZW5hbWUgeW91ciB2YXJpYWJsZSB0byBzb21ldGhpbmcgZWxzZS4nKSxiW2FdPWZ9fX0sYi5leHBvcnRzPWV9LHtcIi4vY29uc3RhbnRzXCI6MTgsXCIuL3NoaW1cIjozNH1dLDI1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyl7cmV0dXJuITE9PT1iP2YoYSxjKTplKGEsYixjKSx0aGlzfWZ1bmN0aW9uIGUoYSxiLGMpe2MuX2V2ZW50c1thXSYmZihhLGMpO3ZhciBkPWIuYmluZChjKTtjLmVsdC5hZGRFdmVudExpc3RlbmVyKGEsZCwhMSksYy5fZXZlbnRzW2FdPWR9ZnVuY3Rpb24gZihhLGIpe3ZhciBjPWIuX2V2ZW50c1thXTtiLmVsdC5yZW1vdmVFdmVudExpc3RlbmVyKGEsYywhMSksYi5fZXZlbnRzW2FdPW51bGx9dmFyIGc9YShcIi4vbWFpblwiKTtnLkVsZW1lbnQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmVsdD1hLHRoaXMuX3BJbnN0PWIsdGhpcy5fZXZlbnRzPXt9LHRoaXMud2lkdGg9dGhpcy5lbHQub2Zmc2V0V2lkdGgsdGhpcy5oZWlnaHQ9dGhpcy5lbHQub2Zmc2V0SGVpZ2h0fSxnLkVsZW1lbnQucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT90aGlzLmVsdC5wYXJlbnROb2RlOihcInN0cmluZ1wiPT10eXBlb2YgYT8oXCIjXCI9PT1hWzBdJiYoYT1hLnN1YnN0cmluZygxKSksYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSk6YSBpbnN0YW5jZW9mIGcuRWxlbWVudCYmKGE9YS5lbHQpLGEuYXBwZW5kQ2hpbGQodGhpcy5lbHQpLHRoaXMpfSxnLkVsZW1lbnQucHJvdG90eXBlLmlkPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hP3RoaXMuZWx0LmlkOih0aGlzLmVsdC5pZD1hLHRoaXMud2lkdGg9dGhpcy5lbHQub2Zmc2V0V2lkdGgsdGhpcy5oZWlnaHQ9dGhpcy5lbHQub2Zmc2V0SGVpZ2h0LHRoaXMpfSxnLkVsZW1lbnQucHJvdG90eXBlLmNsYXNzPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hP3RoaXMuZWx0LmNsYXNzTmFtZToodGhpcy5lbHQuY2xhc3NOYW1lPWEsdGhpcyl9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VQcmVzc2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2Vkb3duXCIsZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIm1vdXNlSXNQcmVzc2VkXCIsITApLHRoaXMuX3BJbnN0Ll9zZXRNb3VzZUJ1dHRvbihiKSxhKCl9LHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuZG91YmxlQ2xpY2tlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcImRibGNsaWNrXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlV2hlZWw9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ3aGVlbFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZVJlbGVhc2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2V1cFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZUNsaWNrZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJjbGlja1wiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZU1vdmVkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2Vtb3ZlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlT3Zlcj1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNlb3ZlclwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5jaGFuZ2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiY2hhbmdlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmlucHV0PWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiaW5wdXRcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VPdXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJtb3VzZW91dFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS50b3VjaFN0YXJ0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ0b3VjaHN0YXJ0XCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLnRvdWNoTW92ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ0b3VjaG1vdmVcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUudG91Y2hFbmRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcInRvdWNoZW5kXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRyYWdPdmVyPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiZHJhZ292ZXJcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuZHJhZ0xlYXZlPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiZHJhZ2xlYXZlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRyb3A9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPW5ldyBnLkZpbGUoYik7cmV0dXJuIGZ1bmN0aW9uKGIpe2MuZGF0YT1iLnRhcmdldC5yZXN1bHQsYShjKX19cmV0dXJuIHdpbmRvdy5GaWxlJiZ3aW5kb3cuRmlsZVJlYWRlciYmd2luZG93LkZpbGVMaXN0JiZ3aW5kb3cuQmxvYj8oZShcImRyYWdvdmVyXCIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKSxhLnByZXZlbnREZWZhdWx0KCl9LHRoaXMpLGUoXCJkcmFnbGVhdmVcIixmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpLGEucHJldmVudERlZmF1bHQoKX0sdGhpcyksdm9pZCAwIT09YiYmZShcImRyb3BcIixiLHRoaXMpLGUoXCJkcm9wXCIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKSxhLnByZXZlbnREZWZhdWx0KCk7Zm9yKHZhciBiPWEuZGF0YVRyYW5zZmVyLmZpbGVzLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGU9YltkXSxmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPWMoZSksZS50eXBlLmluZGV4T2YoXCJ0ZXh0XCIpPi0xP2YucmVhZEFzVGV4dChlKTpmLnJlYWRBc0RhdGFVUkwoZSl9fSx0aGlzKSk6Y29uc29sZS5sb2coXCJUaGUgRmlsZSBBUElzIGFyZSBub3QgZnVsbHkgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci5cIiksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5fc2V0UHJvcGVydHk9ZnVuY3Rpb24oYSxiKXt0aGlzW2FdPWJ9LGIuZXhwb3J0cz1nLkVsZW1lbnR9LHtcIi4vbWFpblwiOjI0fV0sMjY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpLGU9YShcIi4vY29uc3RhbnRzXCIpO2QuR3JhcGhpY3M9ZnVuY3Rpb24oYSxiLGMsZil7dmFyIGc9Y3x8ZS5QMkQ7dGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSwoZi5fdXNlck5vZGV8fGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzKSxkLkVsZW1lbnQuY2FsbCh0aGlzLHRoaXMuY2FudmFzLGYsITEpO2Zvcih2YXIgaCBpbiBkLnByb3RvdHlwZSl0aGlzW2hdfHwoXCJmdW5jdGlvblwiPT10eXBlb2YgZC5wcm90b3R5cGVbaF0/dGhpc1toXT1kLnByb3RvdHlwZVtoXS5iaW5kKHRoaXMpOnRoaXNbaF09ZC5wcm90b3R5cGVbaF0pO3JldHVybiBkLnByb3RvdHlwZS5faW5pdGlhbGl6ZUluc3RhbmNlVmFyaWFibGVzLmFwcGx5KHRoaXMpLHRoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iLHRoaXMuX3BpeGVsRGVuc2l0eT1mLl9waXhlbERlbnNpdHksZz09PWUuV0VCR0w/dGhpcy5fcmVuZGVyZXI9bmV3IGQuUmVuZGVyZXJHTCh0aGlzLmNhbnZhcyx0aGlzLCExKTp0aGlzLl9yZW5kZXJlcj1uZXcgZC5SZW5kZXJlcjJEKHRoaXMuY2FudmFzLHRoaXMsITEpLGYuX2VsZW1lbnRzLnB1c2godGhpcyksdGhpcy5fcmVuZGVyZXIucmVzaXplKGEsYiksdGhpcy5fcmVuZGVyZXIuX2FwcGx5RGVmYXVsdHMoKSx0aGlzfSxkLkdyYXBoaWNzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQuRWxlbWVudC5wcm90b3R5cGUpLGQuR3JhcGhpY3MucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuZWx0LnBhcmVudE5vZGUmJnRoaXMuZWx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbHQpO3ZhciBhPXRoaXMuX3BJbnN0Ll9lbGVtZW50cy5pbmRleE9mKHRoaXMpOy0xIT09YSYmdGhpcy5fcEluc3QuX2VsZW1lbnRzLnNwbGljZShhLDEpO2Zvcih2YXIgYiBpbiB0aGlzLl9ldmVudHMpdGhpcy5lbHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLHRoaXMuX2V2ZW50c1tiXSl9LGIuZXhwb3J0cz1kLkdyYXBoaWNzfSx7XCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjR9XSwyNzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSl7dmFyIGI9MCxjPTA7aWYoYS5vZmZzZXRQYXJlbnQpZG97Yis9YS5vZmZzZXRMZWZ0LGMrPWEub2Zmc2V0VG9wfXdoaWxlKGE9YS5vZmZzZXRQYXJlbnQpO2Vsc2UgYis9YS5vZmZzZXRMZWZ0LGMrPWEub2Zmc2V0VG9wO3JldHVybltiLGNdfXZhciBlPWEoXCIuL21haW5cIiksZj1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZS5SZW5kZXJlcj1mdW5jdGlvbihhLGIsYyl7ZS5FbGVtZW50LmNhbGwodGhpcyxhLGIpLHRoaXMuY2FudmFzPWEsYz8odGhpcy5faXNNYWluQ2FudmFzPSEwLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIl9jdXJFbGVtZW50XCIsdGhpcyksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiY2FudmFzXCIsdGhpcy5jYW52YXMpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIndpZHRoXCIsdGhpcy53aWR0aCksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiaGVpZ2h0XCIsdGhpcy5oZWlnaHQpKToodGhpcy5jYW52YXMuc3R5bGUuZGlzcGxheT1cIm5vbmVcIix0aGlzLl9zdHlsZXM9W10pLHRoaXMuX3RleHRTaXplPTEyLHRoaXMuX3RleHRMZWFkaW5nPTE1LHRoaXMuX3RleHRGb250PVwic2Fucy1zZXJpZlwiLHRoaXMuX3RleHRTdHlsZT1mLk5PUk1BTCx0aGlzLl90ZXh0QXNjZW50PW51bGwsdGhpcy5fdGV4dERlc2NlbnQ9bnVsbCx0aGlzLl90ZXh0QWxpZ249Zi5MRUZULHRoaXMuX3RleHRCYXNlbGluZT1mLkJBU0VMSU5FLHRoaXMuX3JlY3RNb2RlPWYuQ09STkVSLHRoaXMuX2VsbGlwc2VNb2RlPWYuQ0VOVEVSLHRoaXMuX2N1cnZlVGlnaHRuZXNzPTAsdGhpcy5faW1hZ2VNb2RlPWYuQ09STkVSLHRoaXMuX3RpbnQ9bnVsbCx0aGlzLl9kb1N0cm9rZT0hMCx0aGlzLl9kb0ZpbGw9ITAsdGhpcy5fc3Ryb2tlU2V0PSExLHRoaXMuX2ZpbGxTZXQ9ITF9LGUuUmVuZGVyZXIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5FbGVtZW50LnByb3RvdHlwZSksZS5SZW5kZXJlci5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3JldHVybntwcm9wZXJ0aWVzOntfZG9TdHJva2U6dGhpcy5fZG9TdHJva2UsX3N0cm9rZVNldDp0aGlzLl9zdHJva2VTZXQsX2RvRmlsbDp0aGlzLl9kb0ZpbGwsX2ZpbGxTZXQ6dGhpcy5fZmlsbFNldCxfdGludDp0aGlzLl90aW50LF9pbWFnZU1vZGU6dGhpcy5faW1hZ2VNb2RlLF9yZWN0TW9kZTp0aGlzLl9yZWN0TW9kZSxfZWxsaXBzZU1vZGU6dGhpcy5fZWxsaXBzZU1vZGUsX3RleHRGb250OnRoaXMuX3RleHRGb250LF90ZXh0TGVhZGluZzp0aGlzLl90ZXh0TGVhZGluZyxfdGV4dFNpemU6dGhpcy5fdGV4dFNpemUsX3RleHRBbGlnbjp0aGlzLl90ZXh0QWxpZ24sX3RleHRCYXNlbGluZTp0aGlzLl90ZXh0QmFzZWxpbmUsX3RleHRTdHlsZTp0aGlzLl90ZXh0U3R5bGV9fX0sZS5SZW5kZXJlci5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKGEpe2EucHJvcGVydGllcyYmT2JqZWN0LmFzc2lnbih0aGlzLGEucHJvcGVydGllcyl9LGUuUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihhLGIpe3RoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iLHRoaXMuZWx0LndpZHRoPWEqdGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSx0aGlzLmVsdC5oZWlnaHQ9Yip0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LHRoaXMuZWx0LnN0eWxlLndpZHRoPWErXCJweFwiLHRoaXMuZWx0LnN0eWxlLmhlaWdodD1iK1wicHhcIix0aGlzLl9pc01haW5DYW52YXMmJih0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJ3aWR0aFwiLHRoaXMud2lkdGgpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcImhlaWdodFwiLHRoaXMuaGVpZ2h0KSl9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRMZWFkaW5nPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPyh0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0TGVhZGluZ1wiLGEpLHRoaXMuX3BJbnN0KTp0aGlzLl90ZXh0TGVhZGluZ30sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dFNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGE/KHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRTaXplXCIsYSksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dExlYWRpbmdcIixhKmYuX0RFRkFVTFRfTEVBRE1VTFQpLHRoaXMuX2FwcGx5VGV4dFByb3BlcnRpZXMoKSk6dGhpcy5fdGV4dFNpemV9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRTdHlsZT1mdW5jdGlvbihhKXtyZXR1cm4gYT8oYSE9PWYuTk9STUFMJiZhIT09Zi5JVEFMSUMmJmEhPT1mLkJPTER8fHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRTdHlsZVwiLGEpLHRoaXMuX2FwcGx5VGV4dFByb3BlcnRpZXMoKSk6dGhpcy5fdGV4dFN0eWxlfSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0QXNjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl90ZXh0QXNjZW50JiZ0aGlzLl91cGRhdGVUZXh0TWV0cmljcygpLHRoaXMuX3RleHRBc2NlbnR9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHREZXNjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl90ZXh0RGVzY2VudCYmdGhpcy5fdXBkYXRlVGV4dE1ldHJpY3MoKSx0aGlzLl90ZXh0RGVzY2VudH0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dEFsaWduPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMCE9PWE/KHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRBbGlnblwiLGEpLHZvaWQgMCE9PWImJnRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRCYXNlbGluZVwiLGIpLHRoaXMuX2FwcGx5VGV4dFByb3BlcnRpZXMoKSk6e2hvcml6b250YWw6dGhpcy5fdGV4dEFsaWduLHZlcnRpY2FsOnRoaXMuX3RleHRCYXNlbGluZX19LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZyxoLGksaixrLGwsbSxuLG8scD10aGlzLl9wSW5zdCxxPU51bWJlci5NQVhfVkFMVUU7aWYoKHRoaXMuX2RvRmlsbHx8dGhpcy5fZG9TdHJva2UpJiZ2b2lkIDAhPT1hKXtpZihcInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSxhPWEucmVwbGFjZSgvKFxcdCkvZyxcIiAgXCIpLGc9YS5zcGxpdChcIlxcblwiKSx2b2lkIDAhPT1kKXtmb3Iobz0wLGk9MDtpPGcubGVuZ3RoO2krKylmb3Ioaz1cIlwiLG49Z1tpXS5zcGxpdChcIiBcIiksaD0wO2g8bi5sZW5ndGg7aCsrKWw9aytuW2hdK1wiIFwiLG09dGhpcy50ZXh0V2lkdGgobCksbT5kPyhrPW5baF0rXCIgXCIsbys9cC50ZXh0TGVhZGluZygpKTprPWw7c3dpdGNoKHRoaXMuX3JlY3RNb2RlPT09Zi5DRU5URVImJihiLT1kLzIsYy09ZS8yKSx0aGlzLl90ZXh0QWxpZ24pe2Nhc2UgZi5DRU5URVI6Yis9ZC8yO2JyZWFrO2Nhc2UgZi5SSUdIVDpiKz1kfXZhciByPSExO2lmKHZvaWQgMCE9PWUpe3N3aXRjaCh0aGlzLl90ZXh0QmFzZWxpbmUpe2Nhc2UgZi5CT1RUT006Yys9ZS1vO2JyZWFrO2Nhc2UgZi5DRU5URVI6Yys9KGUtbykvMjticmVhaztjYXNlIGYuQkFTRUxJTkU6cj0hMCx0aGlzLl90ZXh0QmFzZWxpbmU9Zi5UT1B9cT1jK2UtcC50ZXh0QXNjZW50KCl9Zm9yKGk9MDtpPGcubGVuZ3RoO2krKyl7Zm9yKGs9XCJcIixuPWdbaV0uc3BsaXQoXCIgXCIpLGg9MDtoPG4ubGVuZ3RoO2grKylsPWsrbltoXStcIiBcIixtPXRoaXMudGV4dFdpZHRoKGwpLG0+ZCYmay5sZW5ndGg+MD8odGhpcy5fcmVuZGVyVGV4dChwLGssYixjLHEpLGs9bltoXStcIiBcIixjKz1wLnRleHRMZWFkaW5nKCkpOms9bDt0aGlzLl9yZW5kZXJUZXh0KHAsayxiLGMscSksYys9cC50ZXh0TGVhZGluZygpLHImJih0aGlzLl90ZXh0QmFzZWxpbmU9Zi5CQVNFTElORSl9fWVsc2V7dmFyIHM9MCx0PXAudGV4dEFsaWduKCkudmVydGljYWw7Zm9yKHQ9PT1mLkNFTlRFUj9zPShnLmxlbmd0aC0xKSpwLnRleHRMZWFkaW5nKCkvMjp0PT09Zi5CT1RUT00mJihzPShnLmxlbmd0aC0xKSpwLnRleHRMZWFkaW5nKCkpLGo9MDtqPGcubGVuZ3RoO2orKyl0aGlzLl9yZW5kZXJUZXh0KHAsZ1tqXSxiLGMtcyxxKSxjKz1wLnRleHRMZWFkaW5nKCl9cmV0dXJuIHB9fSxlLlJlbmRlcmVyLnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLlJlbmRlcmVyLnByb3RvdHlwZS5faXNPcGVuVHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YoYT1hfHx0aGlzLl90ZXh0Rm9udCkmJmEuZm9udCYmYS5mb250LnN1cHBvcnRlZH0sZS5SZW5kZXJlci5wcm90b3R5cGUuX3VwZGF0ZVRleHRNZXRyaWNzPWZ1bmN0aW9uKCl7aWYodGhpcy5faXNPcGVuVHlwZSgpKXJldHVybiB0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QXNjZW50XCIsdGhpcy5fdGV4dEZvbnQuX3RleHRBc2NlbnQoKSksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dERlc2NlbnRcIix0aGlzLl90ZXh0Rm9udC5fdGV4dERlc2NlbnQoKSksdGhpczt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTthLnN0eWxlLmZvbnRGYW1pbHk9dGhpcy5fdGV4dEZvbnQsYS5zdHlsZS5mb250U2l6ZT10aGlzLl90ZXh0U2l6ZStcInB4XCIsYS5pbm5lckhUTUw9XCJBQkNqZ3F8XCI7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtiLnN0eWxlLmRpc3BsYXk9XCJpbmxpbmUtYmxvY2tcIixiLnN0eWxlLndpZHRoPVwiMXB4XCIsYi5zdHlsZS5oZWlnaHQ9XCIwcHhcIjt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2MuYXBwZW5kQ2hpbGQoYSksYy5hcHBlbmRDaGlsZChiKSxjLnN0eWxlLmhlaWdodD1cIjBweFwiLGMuc3R5bGUub3ZlcmZsb3c9XCJoaWRkZW5cIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpLGIuc3R5bGUudmVydGljYWxBbGlnbj1cImJhc2VsaW5lXCI7dmFyIGU9ZChiKSxmPWQoYSksZz1lWzFdLWZbMV07Yi5zdHlsZS52ZXJ0aWNhbEFsaWduPVwiYm90dG9tXCIsZT1kKGIpLGY9ZChhKTt2YXIgaD1lWzFdLWZbMV0saT1oLWc7cmV0dXJuIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYyksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEFzY2VudFwiLGcpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHREZXNjZW50XCIsaSksdGhpc30sYi5leHBvcnRzPWUuUmVuZGVyZXJ9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNH1dLDI4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKSxlPWEoXCIuL2NvbnN0YW50c1wiKSxmPWEoXCIuLi9pbWFnZS9maWx0ZXJzXCIpO2EoXCIuL3A1LlJlbmRlcmVyXCIpO3ZhciBnPVwicmdiYSgwLDAsMCwwKVwiO2QuUmVuZGVyZXIyRD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGQuUmVuZGVyZXIuY2FsbCh0aGlzLGEsYixjKSx0aGlzLmRyYXdpbmdDb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJkcmF3aW5nQ29udGV4dFwiLHRoaXMuZHJhd2luZ0NvbnRleHQpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlJlbmRlcmVyLnByb3RvdHlwZSksZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0cz1mdW5jdGlvbigpe3RoaXMuX2NhY2hlZEZpbGxTdHlsZT10aGlzLl9jYWNoZWRTdHJva2VTdHlsZT12b2lkIDAsdGhpcy5fc2V0RmlsbChlLl9ERUZBVUxUX0ZJTEwpLHRoaXMuX3NldFN0cm9rZShlLl9ERUZBVUxUX1NUUk9LRSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lQ2FwPWUuUk9VTkQsdGhpcy5kcmF3aW5nQ29udGV4dC5mb250PVwibm9ybWFsIDEycHggc2Fucy1zZXJpZlwifSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihhLGIpe2QuUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsYSxiKSx0aGlzLmRyYXdpbmdDb250ZXh0LnNjYWxlKHRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksdGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe2lmKHRoaXMuZHJhd2luZ0NvbnRleHQuc2F2ZSgpLHRoaXMucmVzZXRNYXRyaXgoKSxhcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQuSW1hZ2UpdGhpcy5fcEluc3QuaW1hZ2UoYXJndW1lbnRzWzBdLDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTtlbHNle3ZhciBhPXRoaXMuX2dldEZpbGwoKSxiPXRoaXMuX3BJbnN0LmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyksYz1iLnRvU3RyaW5nKCk7dGhpcy5fc2V0RmlsbChjKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGxSZWN0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLl9zZXRGaWxsKGEpfXRoaXMuZHJhd2luZ0NvbnRleHQucmVzdG9yZSgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZHJhd2luZ0NvbnRleHQuc2F2ZSgpLHRoaXMucmVzZXRNYXRyaXgoKSx0aGlzLmRyYXdpbmdDb250ZXh0LmNsZWFyUmVjdCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5kcmF3aW5nQ29udGV4dC5yZXN0b3JlKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpO3RoaXMuX3NldEZpbGwoYS50b1N0cmluZygpKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zdHJva2U9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpO3RoaXMuX3NldFN0cm9rZShhLnRvU3RyaW5nKCkpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmltYWdlPWZ1bmN0aW9uKGEsYixjLGUsZixnLGgsaSxqKXt2YXIgazt0cnl7dGhpcy5fdGludCYmKGQuTWVkaWFFbGVtZW50JiZhIGluc3RhbmNlb2YgZC5NZWRpYUVsZW1lbnQmJmEubG9hZFBpeGVscygpLGEuY2FudmFzJiYoaz10aGlzLl9nZXRUaW50ZWRJbWFnZUNhbnZhcyhhKSkpLGt8fChrPWEuY2FudmFzfHxhLmVsdCk7dmFyIGw9MTthLndpZHRoJiZhLndpZHRoPjAmJihsPWsud2lkdGgvYS53aWR0aCksdGhpcy5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoayxsKmIsbCpjLGwqZSxsKmYsZyxoLGksail9Y2F0Y2goYSl7aWYoXCJOU19FUlJPUl9OT1RfQVZBSUxBQkxFXCIhPT1hLm5hbWUpdGhyb3cgYX10aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2dldFRpbnRlZEltYWdlQ2FudmFzPWZ1bmN0aW9uKGEpe2lmKCFhLmNhbnZhcylyZXR1cm4gYTt2YXIgYj1mLl90b1BpeGVscyhhLmNhbnZhcyksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Mud2lkdGg9YS5jYW52YXMud2lkdGgsYy5oZWlnaHQ9YS5jYW52YXMuaGVpZ2h0O2Zvcih2YXIgZD1jLmdldENvbnRleHQoXCIyZFwiKSxlPWQuY3JlYXRlSW1hZ2VEYXRhKGEuY2FudmFzLndpZHRoLGEuY2FudmFzLmhlaWdodCksZz1lLmRhdGEsaD0wO2g8Yi5sZW5ndGg7aCs9NCl7dmFyIGk9YltoXSxqPWJbaCsxXSxrPWJbaCsyXSxsPWJbaCszXTtnW2hdPWkqdGhpcy5fdGludFswXS8yNTUsZ1toKzFdPWoqdGhpcy5fdGludFsxXS8yNTUsZ1toKzJdPWsqdGhpcy5fdGludFsyXS8yNTUsZ1toKzNdPWwqdGhpcy5fdGludFszXS8yNTV9cmV0dXJuIGQucHV0SW1hZ2VEYXRhKGUsMCwwKSxjfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJsZW5kTW9kZT1mdW5jdGlvbihhKXt0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1hfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJsZW5kPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24sYj1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSxjPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwLGFyZ3VtZW50cy5sZW5ndGgtMSk7dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249Yix0aGlzLl9wSW5zdD90aGlzLl9wSW5zdC5jb3B5LmFwcGx5KHRoaXMuX3BJbnN0LGMpOnRoaXMuY29weS5hcHBseSh0aGlzLGMpLHRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWF9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhLGIsYyxlLGYsZyxoLGksajtpZig5PT09YXJndW1lbnRzLmxlbmd0aClhPWFyZ3VtZW50c1swXSxiPWFyZ3VtZW50c1sxXSxjPWFyZ3VtZW50c1syXSxlPWFyZ3VtZW50c1szXSxmPWFyZ3VtZW50c1s0XSxnPWFyZ3VtZW50c1s1XSxoPWFyZ3VtZW50c1s2XSxpPWFyZ3VtZW50c1s3XSxqPWFyZ3VtZW50c1s4XTtlbHNle2lmKDghPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlNpZ25hdHVyZSBub3Qgc3VwcG9ydGVkXCIpO2E9dGhpcy5fcEluc3QsYj1hcmd1bWVudHNbMF0sYz1hcmd1bWVudHNbMV0sZT1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10sZz1hcmd1bWVudHNbNF0saD1hcmd1bWVudHNbNV0saT1hcmd1bWVudHNbNl0saj1hcmd1bWVudHNbN119ZC5SZW5kZXJlcjJELl9jb3B5SGVscGVyKHRoaXMsYSxiLGMsZSxmLGcsaCxpLGopLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELl9jb3B5SGVscGVyPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpLGope2IubG9hZFBpeGVscygpO3ZhciBrPWIuY2FudmFzLndpZHRoL2Iud2lkdGg7YS5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoYi5jYW52YXMsaypjLGsqZCxrKmUsaypmLGcsaCxpLGopfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxlKXtpZih2b2lkIDA9PT1jJiZ2b2lkIDA9PT1lJiYodm9pZCAwPT09YSYmdm9pZCAwPT09Yj8oYT1iPTAsYz10aGlzLndpZHRoLGU9dGhpcy5oZWlnaHQpOmM9ZT0xKSxhK2M8MHx8YitlPDB8fGE+PXRoaXMud2lkdGh8fGI+PXRoaXMuaGVpZ2h0KXJldHVyblswLDAsMCwyNTVdO3ZhciBmPXRoaXMuX3BJbnN0fHx0aGlzLGc9Zi5fcGl4ZWxEZW5zaXR5O2E9TWF0aC5mbG9vcihhKSxiPU1hdGguZmxvb3IoYiksYz1NYXRoLmZsb29yKGMpLGU9TWF0aC5mbG9vcihlKTt2YXIgaD1hKmcsaT1iKmc7aWYoMSE9PWN8fDEhPT1lfHx0aGlzIGluc3RhbmNlb2YgZC5SZW5kZXJlckdMKXt2YXIgaj1NYXRoLm1pbihjLGYud2lkdGgpLGs9TWF0aC5taW4oZSxmLmhlaWdodCksbD1qKmcsbT1rKmcsbj1uZXcgZC5JbWFnZShqLGspO3JldHVybiBuLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIikuZHJhd0ltYWdlKHRoaXMuY2FudmFzLGgsaSxsLG0sMCwwLGosayksbn12YXIgbyxwO3JldHVybiBmLl9waXhlbHNEaXJ0eT8obz10aGlzLmRyYXdpbmdDb250ZXh0LmdldEltYWdlRGF0YShoLGksMSwxKS5kYXRhLHA9MCk6KG89Zi5waXhlbHMscD00KihoK2kqdGhpcy53aWR0aCpnKSksW29bcCswXSxvW3ArMV0sb1twKzJdLG9bcCszXV19LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUubG9hZFBpeGVscz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX3BJbnN0fHx0aGlzO2lmKGEuX3BpeGVsc0RpcnR5KXthLl9waXhlbHNEaXJ0eT0hMTt2YXIgYj1hLl9waXhlbERlbnNpdHksYz10aGlzLndpZHRoKmIsZD10aGlzLmhlaWdodCpiLGU9dGhpcy5kcmF3aW5nQ29udGV4dC5nZXRJbWFnZURhdGEoMCwwLGMsZCk7YS5fc2V0UHJvcGVydHkoXCJpbWFnZURhdGFcIixlKSxhLl9zZXRQcm9wZXJ0eShcInBpeGVsc1wiLGUuZGF0YSl9fSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7YT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihiKTt2YXIgZT10aGlzLl9wSW5zdHx8dGhpcztpZihjIGluc3RhbmNlb2YgZC5JbWFnZSl0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSx0aGlzLmRyYXdpbmdDb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5kcmF3aW5nQ29udGV4dC5zY2FsZShlLl9waXhlbERlbnNpdHksZS5fcGl4ZWxEZW5zaXR5KSx0aGlzLmRyYXdpbmdDb250ZXh0LmRyYXdJbWFnZShjLmNhbnZhcyxhLGIpLHRoaXMuZHJhd2luZ0NvbnRleHQucmVzdG9yZSgpLGUuX3BpeGVsc0RpcnR5PSEwO2Vsc2V7dmFyIGY9MCxnPTAsaD0wLGk9MCxqPTQqKGIqZS5fcGl4ZWxEZW5zaXR5Kih0aGlzLndpZHRoKmUuX3BpeGVsRGVuc2l0eSkrYSplLl9waXhlbERlbnNpdHkpO2lmKGUuaW1hZ2VEYXRhJiYhZS5fcGl4ZWxzRGlydHl8fGUubG9hZFBpeGVscy5jYWxsKGUpLFwibnVtYmVyXCI9PXR5cGVvZiBjKWo8ZS5waXhlbHMubGVuZ3RoJiYoZj1jLGc9YyxoPWMsaT0yNTUpO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIEFycmF5KXtpZihjLmxlbmd0aDw0KXRocm93IG5ldyBFcnJvcihcInBpeGVsIGFycmF5IG11c3QgYmUgb2YgdGhlIGZvcm0gW1IsIEcsIEIsIEFdXCIpO2o8ZS5waXhlbHMubGVuZ3RoJiYoZj1jWzBdLGc9Y1sxXSxoPWNbMl0saT1jWzNdKX1lbHNlIGMgaW5zdGFuY2VvZiBkLkNvbG9yJiZqPGUucGl4ZWxzLmxlbmd0aCYmKGY9Yy5sZXZlbHNbMF0sZz1jLmxldmVsc1sxXSxoPWMubGV2ZWxzWzJdLGk9Yy5sZXZlbHNbM10pO2Zvcih2YXIgaz0wO2s8ZS5fcGl4ZWxEZW5zaXR5O2srKylmb3IodmFyIGw9MDtsPGUuX3BpeGVsRGVuc2l0eTtsKyspaj00KigoYiplLl9waXhlbERlbnNpdHkrbCkqdGhpcy53aWR0aCplLl9waXhlbERlbnNpdHkrKGEqZS5fcGl4ZWxEZW5zaXR5K2spKSxlLnBpeGVsc1tqXT1mLGUucGl4ZWxzW2orMV09ZyxlLnBpeGVsc1tqKzJdPWgsZS5waXhlbHNbaiszXT1pfX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS51cGRhdGVQaXhlbHM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5fcEluc3R8fHRoaXMsZj1lLl9waXhlbERlbnNpdHk7dm9pZCAwPT09YSYmdm9pZCAwPT09YiYmdm9pZCAwPT09YyYmdm9pZCAwPT09ZCYmKGE9MCxiPTAsYz10aGlzLndpZHRoLGQ9dGhpcy5oZWlnaHQpLGMqPWYsZCo9Zix0aGlzLmRyYXdpbmdDb250ZXh0LnB1dEltYWdlRGF0YShlLmltYWdlRGF0YSxhLGIsMCwwLGMsZCksMD09PWEmJjA9PT1iJiZjPT09dGhpcy53aWR0aCYmZD09PXRoaXMuaGVpZ2h0fHwoZS5fcGl4ZWxzRGlydHk9ITApfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9hY3V0ZUFyY1RvQmV6aWVyPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi8yLGQ9TWF0aC5jb3MoYyksZT1NYXRoLnNpbihjKSxmPTEvTWF0aC50YW4oYyksZz1hK2MsaD1NYXRoLmNvcyhnKSxpPU1hdGguc2luKGcpLGo9KDQtZCkvMyxrPWUrKGQtaikqZjtyZXR1cm57YXg6TWF0aC5jb3MoYSksYXk6TWF0aC5zaW4oYSksYng6aipoK2sqaSxieTpqKmktaypoLGN4OmoqaC1rKmksY3k6aippK2sqaCxkeDpNYXRoLmNvcyhhK2IpLGR5Ok1hdGguc2luKGErYil9fSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmFyYz1mdW5jdGlvbihhLGIsYyxkLGYsZyxoKXt2YXIgaT10aGlzLmRyYXdpbmdDb250ZXh0LGo9Yy8yLGs9ZC8yLGw9MWUtNSxtPTAsbj1bXTtmb3IoYSs9aixiKz1rO2ctZj5sOyltPU1hdGgubWluKGctZixlLkhBTEZfUEkpLG4ucHVzaCh0aGlzLl9hY3V0ZUFyY1RvQmV6aWVyKGYsbSkpLGYrPW07cmV0dXJuIHRoaXMuX2RvRmlsbCYmKGkuYmVnaW5QYXRoKCksbi5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7MD09PWQmJmkubW92ZVRvKGErYy5heCpqLGIrYy5heSprKSxpLmJlemllckN1cnZlVG8oYStjLmJ4KmosYitjLmJ5KmssYStjLmN4KmosYitjLmN5KmssYStjLmR4KmosYitjLmR5KmspfSksaCE9PWUuUElFJiZudWxsIT1ofHxpLmxpbmVUbyhhLGIpLGkuY2xvc2VQYXRoKCksaS5maWxsKCkpLHRoaXMuX2RvU3Ryb2tlJiYoaS5iZWdpblBhdGgoKSxuLmZvckVhY2goZnVuY3Rpb24oYyxkKXswPT09ZCYmaS5tb3ZlVG8oYStjLmF4KmosYitjLmF5KmspLGkuYmV6aWVyQ3VydmVUbyhhK2MuYngqaixiK2MuYnkqayxhK2MuY3gqaixiK2MuY3kqayxhK2MuZHgqaixiK2MuZHkqayl9KSxoPT09ZS5QSUU/KGkubGluZVRvKGEsYiksaS5jbG9zZVBhdGgoKSk6aD09PWUuQ0hPUkQmJmkuY2xvc2VQYXRoKCksaS5zdHJva2UoKSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5lbGxpcHNlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZHJhd2luZ0NvbnRleHQsYz10aGlzLl9kb0ZpbGwsZD10aGlzLl9kb1N0cm9rZSxlPWFbMF0sZj1hWzFdLGg9YVsyXSxpPWFbM107aWYoYyYmIWQpe2lmKHRoaXMuX2dldEZpbGwoKT09PWcpcmV0dXJuIHRoaXN9ZWxzZSBpZighYyYmZCYmdGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO3ZhciBqPS41NTIyODQ3NDk4LGs9aC8yKmosbD1pLzIqaixtPWUraCxuPWYraSxvPWUraC8yLHA9ZitpLzI7Yi5iZWdpblBhdGgoKSxiLm1vdmVUbyhlLHApLGIuYmV6aWVyQ3VydmVUbyhlLHAtbCxvLWssZixvLGYpLGIuYmV6aWVyQ3VydmVUbyhvK2ssZixtLHAtbCxtLHApLGIuYmV6aWVyQ3VydmVUbyhtLHArbCxvK2ssbixvLG4pLGIuYmV6aWVyQ3VydmVUbyhvLWssbixlLHArbCxlLHApLGIuY2xvc2VQYXRoKCksYyYmYi5maWxsKCksZCYmYi5zdHJva2UoKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5saW5lPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZHJhd2luZ0NvbnRleHQ7cmV0dXJuIHRoaXMuX2RvU3Ryb2tlP3RoaXMuX2dldFN0cm9rZSgpPT09Zz90aGlzOihlLmxpbmVXaWR0aCUyPT0xJiZlLnRyYW5zbGF0ZSguNSwuNSksZS5iZWdpblBhdGgoKSxlLm1vdmVUbyhhLGIpLGUubGluZVRvKGMsZCksZS5zdHJva2UoKSxlLmxpbmVXaWR0aCUyPT0xJiZlLnRyYW5zbGF0ZSgtLjUsLS41KSx0aGlzKTp0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5kcmF3aW5nQ29udGV4dDtpZighdGhpcy5fZG9TdHJva2UpcmV0dXJuIHRoaXM7aWYodGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO3ZhciBkPXRoaXMuX2dldFN0cm9rZSgpLGY9dGhpcy5fZ2V0RmlsbCgpO2E9TWF0aC5yb3VuZChhKSxiPU1hdGgucm91bmQoYiksdGhpcy5fc2V0RmlsbChkKSxjLmxpbmVXaWR0aD4xPyhjLmJlZ2luUGF0aCgpLGMuYXJjKGEsYixjLmxpbmVXaWR0aC8yLDAsZS5UV09fUEksITEpLGMuZmlsbCgpKTpjLmZpbGxSZWN0KGEsYiwxLDEpLHRoaXMuX3NldEZpbGwoZil9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucXVhZD1mdW5jdGlvbihhLGIsYyxkLGUsZixoLGkpe3ZhciBqPXRoaXMuZHJhd2luZ0NvbnRleHQsaz10aGlzLl9kb0ZpbGwsbD10aGlzLl9kb1N0cm9rZTtpZihrJiYhbCl7aWYodGhpcy5fZ2V0RmlsbCgpPT09ZylyZXR1cm4gdGhpc31lbHNlIGlmKCFrJiZsJiZ0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7cmV0dXJuIGouYmVnaW5QYXRoKCksai5tb3ZlVG8oYSxiKSxqLmxpbmVUbyhjLGQpLGoubGluZVRvKGUsZiksai5saW5lVG8oaCxpKSxqLmNsb3NlUGF0aCgpLGsmJmouZmlsbCgpLGwmJmouc3Ryb2tlKCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5yZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGQ9YVsyXSxlPWFbM10sZj1hWzRdLGg9YVs1XSxpPWFbNl0saj1hWzddLGs9dGhpcy5kcmF3aW5nQ29udGV4dCxsPXRoaXMuX2RvRmlsbCxtPXRoaXMuX2RvU3Ryb2tlO2lmKGwmJiFtKXtpZih0aGlzLl9nZXRGaWxsKCk9PT1nKXJldHVybiB0aGlzfWVsc2UgaWYoIWwmJm0mJnRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpcztpZih0aGlzLl9kb1N0cm9rZSYmay5saW5lV2lkdGglMj09MSYmay50cmFuc2xhdGUoLjUsLjUpLGsuYmVnaW5QYXRoKCksdm9pZCAwPT09ZilrLnJlY3QoYixjLGQsZSk7ZWxzZXt2b2lkIDA9PT1oJiYoaD1mKSx2b2lkIDA9PT1pJiYoaT1oKSx2b2lkIDA9PT1qJiYoaj1pKTt2YXIgbj1kLzIsbz1lLzI7ZDwyKmYmJihmPW4pLGU8MipmJiYoZj1vKSxkPDIqaCYmKGg9biksZTwyKmgmJihoPW8pLGQ8MippJiYoaT1uKSxlPDIqaSYmKGk9byksZDwyKmomJihqPW4pLGU8MipqJiYoaj1vKSxrLmJlZ2luUGF0aCgpLGsubW92ZVRvKGIrZixjKSxrLmFyY1RvKGIrZCxjLGIrZCxjK2UsaCksay5hcmNUbyhiK2QsYytlLGIsYytlLGkpLGsuYXJjVG8oYixjK2UsYixjLGopLGsuYXJjVG8oYixjLGIrZCxjLGYpLGsuY2xvc2VQYXRoKCl9cmV0dXJuIHRoaXMuX2RvRmlsbCYmay5maWxsKCksdGhpcy5fZG9TdHJva2UmJmsuc3Ryb2tlKCksdGhpcy5fZG9TdHJva2UmJmsubGluZVdpZHRoJTI9PTEmJmsudHJhbnNsYXRlKC0uNSwtLjUpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudHJpYW5nbGU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kcmF3aW5nQ29udGV4dCxjPXRoaXMuX2RvRmlsbCxkPXRoaXMuX2RvU3Ryb2tlLGU9YVswXSxmPWFbMV0saD1hWzJdLGk9YVszXSxqPWFbNF0saz1hWzVdO2lmKGMmJiFkKXtpZih0aGlzLl9nZXRGaWxsKCk9PT1nKXJldHVybiB0aGlzfWVsc2UgaWYoIWMmJmQmJnRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpcztiLmJlZ2luUGF0aCgpLGIubW92ZVRvKGUsZiksYi5saW5lVG8oaCxpKSxiLmxpbmVUbyhqLGspLGIuY2xvc2VQYXRoKCksYyYmYi5maWxsKCksZCYmYi5zdHJva2UoKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5lbmRTaGFwZT1mdW5jdGlvbihhLGIsYyxkLGYsZyxoKXtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIHRoaXM7aWYoIXRoaXMuX2RvU3Ryb2tlJiYhdGhpcy5fZG9GaWxsKXJldHVybiB0aGlzO3ZhciBpLGo9YT09PWUuQ0xPU0U7aiYmIWcmJmIucHVzaChiWzBdKTt2YXIgayxsLG09Yi5sZW5ndGg7aWYoIWN8fGghPT1lLlBPTFlHT04mJm51bGwhPT1oKWlmKCFkfHxoIT09ZS5QT0xZR09OJiZudWxsIT09aClpZighZnx8aCE9PWUuUE9MWUdPTiYmbnVsbCE9PWgpaWYoaD09PWUuUE9JTlRTKWZvcihrPTA7azxtO2srKylpPWJba10sdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShpWzZdKSx0aGlzLl9wSW5zdC5wb2ludChpWzBdLGlbMV0pO2Vsc2UgaWYoaD09PWUuTElORVMpZm9yKGs9MDtrKzE8bTtrKz0yKWk9YltrXSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbaysxXVs2XSksdGhpcy5fcEluc3QubGluZShpWzBdLGlbMV0sYltrKzFdWzBdLGJbaysxXVsxXSk7ZWxzZSBpZihoPT09ZS5UUklBTkdMRVMpZm9yKGs9MDtrKzI8bTtrKz0zKWk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGlbMF0saVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzFdWzBdLGJbaysxXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzJdWzBdLGJbaysyXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9kb0ZpbGwmJih0aGlzLl9wSW5zdC5maWxsKGJbaysyXVs1XSksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsKCkpLHRoaXMuX2RvU3Ryb2tlJiYodGhpcy5fcEluc3Quc3Ryb2tlKGJbaysyXVs2XSksdGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2UoKSk7ZWxzZSBpZihoPT09ZS5UUklBTkdMRV9TVFJJUClmb3Ioaz0wO2srMTxtO2srKylpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiW2srMV1bMF0sYltrKzFdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzFdWzZdKSxcbnRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srMV1bNV0pLGsrMjxtJiYodGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzJdWzBdLGJbaysyXVsxXSksdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srMl1bNl0pLHRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srMl1bNV0pKSx0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpO2Vsc2UgaWYoaD09PWUuVFJJQU5HTEVfRkFOKXtpZihtPjIpe2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGs9MjtrPG07aysrKWk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiWzBdWzBdLGJbMF1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbay0xXVswXSxiW2stMV1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYlswXVswXSxiWzBdWzFdKSxrPG0tMSYmKHRoaXMuX2RvRmlsbCYmaVs1XSE9PWJbaysxXVs1XXx8dGhpcy5fZG9TdHJva2UmJmlbNl0hPT1iW2srMV1bNl0pJiYodGhpcy5fZG9GaWxsJiYodGhpcy5fcEluc3QuZmlsbChpWzVdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGwoKSx0aGlzLl9wSW5zdC5maWxsKGJbaysxXVs1XSkpLHRoaXMuX2RvU3Ryb2tlJiYodGhpcy5fcEluc3Quc3Ryb2tlKGlbNl0pLHRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlKCksdGhpcy5fcEluc3Quc3Ryb2tlKGJbaysxXVs2XSkpLHRoaXMuZHJhd2luZ0NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX19ZWxzZSBpZihoPT09ZS5RVUFEUylmb3Ioaz0wO2srMzxtO2srPTQpe2ZvcihpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pLGw9MTtsPDQ7bCsrKXRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaytsXVswXSxiW2srbF1bMV0pO3RoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSksdGhpcy5fZG9GaWxsJiZ0aGlzLl9wSW5zdC5maWxsKGJbayszXVs1XSksdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srM11bNl0pLHRoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZSBpZihoPT09ZS5RVUFEX1NUUklQKXtpZihtPjMpZm9yKGs9MDtrKzE8bTtrKz0yKWk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGsrMzxtPyh0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiW2srMl1bMF0sYltrKzJdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbayszXVswXSxiW2srM11bMV0pLHRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srM11bNV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzNdWzZdKSk6KHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGlbMF0saVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzFdWzBdLGJbaysxXVsxXSkpLHRoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZXtmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiWzBdWzBdLGJbMF1bMV0pLGs9MTtrPG07aysrKWk9YltrXSxpLmlzVmVydCYmKGkubW92ZVRvP3RoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGlbMF0saVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNle2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGs9MDtrPG07aysrKWJba10uaXNWZXJ0P2Jba10ubW92ZVRvP3RoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKFswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2tdWzBdLGJba11bMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQucXVhZHJhdGljQ3VydmVUbyhiW2tdWzBdLGJba11bMV0sYltrXVsyXSxiW2tdWzNdKTt0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2V7Zm9yKHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksaz0wO2s8bTtrKyspYltrXS5pc1ZlcnQ/YltrXS5tb3ZlVG8/dGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYltrXVswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2tdWzBdLGJba11bMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQuYmV6aWVyQ3VydmVUbyhiW2tdWzBdLGJba11bMV0sYltrXVsyXSxiW2tdWzNdLGJba11bNF0sYltrXVs1XSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNlIGlmKG0+Myl7dmFyIG49W10sbz0xLXRoaXMuX2N1cnZlVGlnaHRuZXNzO2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJbMV1bMF0sYlsxXVsxXSksaz0xO2srMjxtO2srKylpPWJba10sblswXT1baVswXSxpWzFdXSxuWzFdPVtpWzBdKyhvKmJbaysxXVswXS1vKmJbay0xXVswXSkvNixpWzFdKyhvKmJbaysxXVsxXS1vKmJbay0xXVsxXSkvNl0sblsyXT1bYltrKzFdWzBdKyhvKmJba11bMF0tbypiW2srMl1bMF0pLzYsYltrKzFdWzFdKyhvKmJba11bMV0tbypiW2srMl1bMV0pLzZdLG5bM109W2JbaysxXVswXSxiW2srMV1bMV1dLHRoaXMuZHJhd2luZ0NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzFdWzBdLG5bMV1bMV0sblsyXVswXSxuWzJdWzFdLG5bM11bMF0sblszXVsxXSk7aiYmdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzFdWzBdLGJbaysxXVsxXSksdGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1yZXR1cm4gYz0hMSxkPSExLGY9ITEsZz0hMSxqJiZiLnBvcCgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLm5vU21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuXCJpbWFnZVNtb290aGluZ0VuYWJsZWRcImluIHRoaXMuZHJhd2luZ0NvbnRleHQmJih0aGlzLmRyYXdpbmdDb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zbW9vdGg9ZnVuY3Rpb24oKXtyZXR1cm5cImltYWdlU21vb3RoaW5nRW5hYmxlZFwiaW4gdGhpcy5kcmF3aW5nQ29udGV4dCYmKHRoaXMuZHJhd2luZ0NvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSEwKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnN0cm9rZUNhcD1mdW5jdGlvbihhKXtyZXR1cm4gYSE9PWUuUk9VTkQmJmEhPT1lLlNRVUFSRSYmYSE9PWUuUFJPSkVDVHx8KHRoaXMuZHJhd2luZ0NvbnRleHQubGluZUNhcD1hKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnN0cm9rZUpvaW49ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1lLlJPVU5EJiZhIT09ZS5CRVZFTCYmYSE9PWUuTUlURVJ8fCh0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVKb2luPWEpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc3Ryb2tlV2VpZ2h0PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVXaWR0aD12b2lkIDA9PT1hfHwwPT09YT8xZS00OmEsdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fZ2V0RmlsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRGaWxsU3R5bGV8fCh0aGlzLl9jYWNoZWRGaWxsU3R5bGU9dGhpcy5kcmF3aW5nQ29udGV4dC5maWxsU3R5bGUpLHRoaXMuX2NhY2hlZEZpbGxTdHlsZX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fc2V0RmlsbD1mdW5jdGlvbihhKXthIT09dGhpcy5fY2FjaGVkRmlsbFN0eWxlJiYodGhpcy5kcmF3aW5nQ29udGV4dC5maWxsU3R5bGU9YSx0aGlzLl9jYWNoZWRGaWxsU3R5bGU9YSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2dldFN0cm9rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRTdHJva2VTdHlsZXx8KHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlU3R5bGUpLHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9zZXRTdHJva2U9ZnVuY3Rpb24oYSl7YSE9PXRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlJiYodGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2VTdHlsZT1hLHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlPWEpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJlemllcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3JldHVybiB0aGlzLl9wSW5zdC5iZWdpblNoYXBlKCksdGhpcy5fcEluc3QudmVydGV4KGEsYiksdGhpcy5fcEluc3QuYmV6aWVyVmVydGV4KGMsZCxlLGYsZyxoKSx0aGlzLl9wSW5zdC5lbmRTaGFwZSgpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY3VydmU9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXtyZXR1cm4gdGhpcy5fcEluc3QuYmVnaW5TaGFwZSgpLHRoaXMuX3BJbnN0LmN1cnZlVmVydGV4KGEsYiksdGhpcy5fcEluc3QuY3VydmVWZXJ0ZXgoYyxkKSx0aGlzLl9wSW5zdC5jdXJ2ZVZlcnRleChlLGYpLHRoaXMuX3BJbnN0LmN1cnZlVmVydGV4KGcsaCksdGhpcy5fcEluc3QuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9kb0ZpbGxTdHJva2VDbG9zZT1mdW5jdGlvbigpe3RoaXMuX2RvRmlsbCYmdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsKCksdGhpcy5fZG9TdHJva2UmJnRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlKCksdGhpcy5kcmF3aW5nQ29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNmb3JtKGEsYixjLGQsZSxmKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5yZXNldE1hdHJpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5kcmF3aW5nQ29udGV4dC5zY2FsZSh0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LHRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHkpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEpe3RoaXMuZHJhd2luZ0NvbnRleHQucm90YXRlKGEpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQuc2NhbGUoYSxiKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNoZWFyWD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC50cmFuc2Zvcm0oMSwwLE1hdGgudGFuKGEpLDEsMCwwKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNoZWFyWT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC50cmFuc2Zvcm0oMSxNYXRoLnRhbihhKSwwLDEsMCwwKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihhLGIpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3ImJihiPWEueSxhPWEueCksdGhpcy5kcmF3aW5nQ29udGV4dC50cmFuc2xhdGUoYSxiKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oYSxiLGMsZixnKXt2YXIgaDt2b2lkIDAhPT1mJiZ2b2lkIDAhPT1nJiZ0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT09PWUuQkFTRUxJTkUmJihoPSEwLHRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPWUuVE9QKTt2YXIgaT1kLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaCYmKHRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPWUuQkFTRUxJTkUpLGl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX3JlbmRlclRleHQ9ZnVuY3Rpb24oYSxiLGMsZCxmKXtpZighKGQ+PWYpKXJldHVybiBhLnB1c2goKSx0aGlzLl9pc09wZW5UeXBlKCk/dGhpcy5fdGV4dEZvbnQuX3JlbmRlclBhdGgoYixjLGQse3JlbmRlcmVyOnRoaXN9KToodGhpcy5fZG9TdHJva2UmJnRoaXMuX3N0cm9rZVNldCYmdGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2VUZXh0KGIsYyxkKSx0aGlzLl9kb0ZpbGwmJih0aGlzLl9maWxsU2V0fHx0aGlzLl9zZXRGaWxsKGUuX0RFRkFVTFRfVEVYVF9GSUxMKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGxUZXh0KGIsYyxkKSkpLGEucG9wKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLGF9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudGV4dFdpZHRoPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9pc09wZW5UeXBlKCk/dGhpcy5fdGV4dEZvbnQuX3RleHRXaWR0aChhLHRoaXMuX3RleHRTaXplKTp0aGlzLmRyYXdpbmdDb250ZXh0Lm1lYXN1cmVUZXh0KGEpLndpZHRofSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9hcHBseVRleHRQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLl9wSW5zdDtyZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEFzY2VudFwiLG51bGwpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHREZXNjZW50XCIsbnVsbCksYT10aGlzLl90ZXh0Rm9udCx0aGlzLl9pc09wZW5UeXBlKCkmJihhPXRoaXMuX3RleHRGb250LmZvbnQuZmFtaWx5TmFtZSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0U3R5bGVcIix0aGlzLl90ZXh0Rm9udC5mb250LnN0eWxlTmFtZSkpLHRoaXMuZHJhd2luZ0NvbnRleHQuZm9udD0odGhpcy5fdGV4dFN0eWxlfHxcIm5vcm1hbFwiKStcIiBcIisodGhpcy5fdGV4dFNpemV8fDEyKStcInB4IFwiKyhhfHxcInNhbnMtc2VyaWZcIiksdGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QWxpZ249dGhpcy5fdGV4dEFsaWduLHRoaXMuX3RleHRCYXNlbGluZT09PWUuQ0VOVEVSP3RoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPWUuX0NUWF9NSURETEU6dGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QmFzZWxpbmU9dGhpcy5fdGV4dEJhc2VsaW5lLGJ9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSxkLlJlbmRlcmVyLnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnBvcD1mdW5jdGlvbihhKXt0aGlzLmRyYXdpbmdDb250ZXh0LnJlc3RvcmUoKSx0aGlzLl9jYWNoZWRGaWxsU3R5bGU9dGhpcy5kcmF3aW5nQ29udGV4dC5maWxsU3R5bGUsdGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGU9dGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2VTdHlsZSxkLlJlbmRlcmVyLnByb3RvdHlwZS5wb3AuY2FsbCh0aGlzLGEpfSxiLmV4cG9ydHM9ZC5SZW5kZXJlcjJEfSx7XCIuLi9pbWFnZS9maWx0ZXJzXCI6NDIsXCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjQsXCIuL3A1LlJlbmRlcmVyXCI6Mjd9XSwyOTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIiksZT1hKFwiLi9jb25zdGFudHNcIik7YShcIi4vcDUuR3JhcGhpY3NcIiksYShcIi4vcDUuUmVuZGVyZXIyRFwiKSxhKFwiLi4vd2ViZ2wvcDUuUmVuZGVyZXJHTFwiKTt2YXIgZj1cImRlZmF1bHRDYW52YXMwXCIsZz1cInA1Q2FudmFzXCI7ZC5wcm90b3R5cGUuY3JlYXRlQ2FudmFzPWZ1bmN0aW9uKGEsYixjKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVDYW52YXNcIixhcmd1bWVudHMpO3ZhciBoLGk9Y3x8ZS5QMkQ7aWYoaT09PWUuV0VCR0wpe2lmKGg9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZikpe2gucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKTt2YXIgaj10aGlzLl9yZW5kZXJlcjt0aGlzLl9lbGVtZW50cz10aGlzLl9lbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1qfSl9aD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGguaWQ9ZixoLmNsYXNzTGlzdC5hZGQoZyl9ZWxzZSBpZih0aGlzLl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkKWg9dGhpcy5jYW52YXM7ZWxzZXtoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7Zm9yKHZhciBrPTA7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkZWZhdWx0Q2FudmFzXCIrayk7KWsrKztmPVwiZGVmYXVsdENhbnZhc1wiK2ssaC5pZD1mLGguY2xhc3NMaXN0LmFkZChnKX1yZXR1cm4gdGhpcy5fc2V0dXBEb25lfHwoaC5kYXRhc2V0LmhpZGRlbj0hMCxoLnN0eWxlLnZpc2liaWxpdHk9XCJoaWRkZW5cIiksdGhpcy5fdXNlck5vZGU/dGhpcy5fdXNlck5vZGUuYXBwZW5kQ2hpbGQoaCk6ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSxpPT09ZS5XRUJHTD8odGhpcy5fc2V0UHJvcGVydHkoXCJfcmVuZGVyZXJcIixuZXcgZC5SZW5kZXJlckdMKGgsdGhpcywhMCkpLHRoaXMuX2VsZW1lbnRzLnB1c2godGhpcy5fcmVuZGVyZXIpKTp0aGlzLl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkfHwodGhpcy5fc2V0UHJvcGVydHkoXCJfcmVuZGVyZXJcIixuZXcgZC5SZW5kZXJlcjJEKGgsdGhpcywhMCkpLHRoaXMuX2RlZmF1bHRHcmFwaGljc0NyZWF0ZWQ9ITAsdGhpcy5fZWxlbWVudHMucHVzaCh0aGlzLl9yZW5kZXJlcikpLHRoaXMuX3JlbmRlcmVyLnJlc2l6ZShhLGIpLHRoaXMuX3JlbmRlcmVyLl9hcHBseURlZmF1bHRzKCksdGhpcy5fcmVuZGVyZXJ9LGQucHJvdG90eXBlLnJlc2l6ZUNhbnZhcz1mdW5jdGlvbihhLGIsYyl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicmVzaXplQ2FudmFzXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlcil7dmFyIGU9e307Zm9yKHZhciBmIGluIHRoaXMuZHJhd2luZ0NvbnRleHQpe3ZhciBnPXRoaXMuZHJhd2luZ0NvbnRleHRbZl07XCJvYmplY3RcIiE9dHlwZW9mIGcmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGcmJihlW2ZdPWcpfXRoaXMuX3JlbmRlcmVyLnJlc2l6ZShhLGIpLHRoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iO2Zvcih2YXIgaCBpbiBlKXRyeXt0aGlzLmRyYXdpbmdDb250ZXh0W2hdPWVbaF19Y2F0Y2goYSl7fWN8fHRoaXMucmVkcmF3KCl9fSxkLnByb3RvdHlwZS5ub0NhbnZhcz1mdW5jdGlvbigpe3RoaXMuY2FudmFzJiZ0aGlzLmNhbnZhcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY2FudmFzKX0sZC5wcm90b3R5cGUuY3JlYXRlR3JhcGhpY3M9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVHcmFwaGljc1wiLGFyZ3VtZW50cyksbmV3IGQuR3JhcGhpY3MoYSxiLGMsdGhpcyl9LGQucHJvdG90eXBlLmJsZW5kTW9kZT1mdW5jdGlvbihhKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJibGVuZE1vZGVcIixhcmd1bWVudHMpLGEhPT1lLkJMRU5EJiZhIT09ZS5EQVJLRVNUJiZhIT09ZS5MSUdIVEVTVCYmYSE9PWUuRElGRkVSRU5DRSYmYSE9PWUuTVVMVElQTFkmJmEhPT1lLkVYQ0xVU0lPTiYmYSE9PWUuU0NSRUVOJiZhIT09ZS5SRVBMQUNFJiZhIT09ZS5PVkVSTEFZJiZhIT09ZS5IQVJEX0xJR0hUJiZhIT09ZS5TT0ZUX0xJR0hUJiZhIT09ZS5ET0RHRSYmYSE9PWUuQlVSTiYmYSE9PWUuQUREJiZhIT09ZS5OT1JNQUwpdGhyb3cgbmV3IEVycm9yKFwiTW9kZSBcIithK1wiIG5vdCByZWNvZ25pemVkLlwiKTt0aGlzLl9yZW5kZXJlci5ibGVuZE1vZGUoYSl9LGIuZXhwb3J0cz1kfSx7XCIuLi93ZWJnbC9wNS5SZW5kZXJlckdMXCI6NzQsXCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjQsXCIuL3A1LkdyYXBoaWNzXCI6MjYsXCIuL3A1LlJlbmRlcmVyMkRcIjoyOH1dLDMwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL21haW5cIiksZT1hKFwiLi4vY29uc3RhbnRzXCIpLGY9YShcIi4uL2hlbHBlcnNcIik7YShcIi4uL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUuYXJjPWZ1bmN0aW9uKGEsYixjLGcsaCxpLGosayl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYXJjXCIsYXJndW1lbnRzKSwhdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiYhdGhpcy5fcmVuZGVyZXIuX2RvRmlsbClyZXR1cm4gdGhpcztmb3IoaD10aGlzLl90b1JhZGlhbnMoaCksaT10aGlzLl90b1JhZGlhbnMoaSk7aDwwOyloKz1lLlRXT19QSTtmb3IoO2k8MDspaSs9ZS5UV09fUEk7dm9pZCAwIT09aCYmdm9pZCAwIT09aSYmKGkudG9GaXhlZCgxMCk9PT1oLnRvRml4ZWQoMTApfHxNYXRoLmFicyhpLWgpPT09ZS5UV09fUEk/KGglPWUuVFdPX1BJLGklPWUuVFdPX1BJLGgrPWUuVFdPX1BJKTpNYXRoLmFicyhpLWgpPmUuVFdPX1BJJiYoaCU9ZS5UV09fUEksaSU9ZS5UV09fUEksaSs9ZS5UV09fUEkpKSxoPD1lLkhBTEZfUEk/aD1NYXRoLmF0YW4oYy9nKk1hdGgudGFuKGgpKTpoPmUuSEFMRl9QSSYmaDw9MyplLkhBTEZfUEkmJihoPU1hdGguYXRhbihjL2cqTWF0aC50YW4oaCkpK2UuUEkpLGk8PWUuSEFMRl9QST9pPU1hdGguYXRhbihjL2cqTWF0aC50YW4oaSkpOmk+ZS5IQUxGX1BJJiZpPD0zKmUuSEFMRl9QSSYmKGk9TWF0aC5hdGFuKGMvZypNYXRoLnRhbihpKSkrZS5QSSksaD5pJiYoaSs9ZS5UV09fUEkpLGM9TWF0aC5hYnMoYyksZz1NYXRoLmFicyhnKTt2YXIgbD1mLm1vZGVBZGp1c3QoYSxiLGMsZyx0aGlzLl9yZW5kZXJlci5fZWxsaXBzZU1vZGUpO3JldHVybiB0aGlzLl9yZW5kZXJlci5hcmMobC54LGwueSxsLncsbC5oLGgsaSxqLGspLHRoaXN9LGQucHJvdG90eXBlLmVsbGlwc2U9ZnVuY3Rpb24oYSxiLGMsZSxnKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJlbGxpcHNlXCIsYXJndW1lbnRzKSwhdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiYhdGhpcy5fcmVuZGVyZXIuX2RvRmlsbClyZXR1cm4gdGhpcztjPDAmJihjPU1hdGguYWJzKGMpKSx2b2lkIDA9PT1lP2U9YzplPDAmJihlPU1hdGguYWJzKGUpKTt2YXIgaD1mLm1vZGVBZGp1c3QoYSxiLGMsZSx0aGlzLl9yZW5kZXJlci5fZWxsaXBzZU1vZGUpO3JldHVybiB0aGlzLl9yZW5kZXJlci5lbGxpcHNlKFtoLngsaC55LGgudyxoLmgsZ10pLHRoaXN9LGQucHJvdG90eXBlLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibGluZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiZ0aGlzLl9yZW5kZXJlci5saW5lLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicG9pbnRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmdGhpcy5fcmVuZGVyZXIucG9pbnQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5xdWFkPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInF1YWRcIixhcmd1bWVudHMpLCh0aGlzLl9yZW5kZXJlci5fZG9TdHJva2V8fHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpJiZ0aGlzLl9yZW5kZXJlci5xdWFkLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucmVjdD1mdW5jdGlvbigpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlY3RcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZXx8dGhpcy5fcmVuZGVyZXIuX2RvRmlsbCl7Zm9yKHZhciBhPWYubW9kZUFkanVzdChhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10sdGhpcy5fcmVuZGVyZXIuX3JlY3RNb2RlKSxiPVthLngsYS55LGEudyxhLmhdLGM9NDtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbY109YXJndW1lbnRzW2NdO3RoaXMuX3JlbmRlcmVyLnJlY3QoYil9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLnRyaWFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRyaWFuZ2xlXCIsYXJndW1lbnRzKSwodGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlfHx0aGlzLl9yZW5kZXJlci5fZG9GaWxsKSYmdGhpcy5fcmVuZGVyZXIudHJpYW5nbGUoYXJndW1lbnRzKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29uc3RhbnRzXCI6MTgsXCIuLi9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9oZWxwZXJzXCI6MjEsXCIuLi9tYWluXCI6MjR9XSwzMTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9tYWluXCIpLGU9YShcIi4uL2NvbnN0YW50c1wiKTtkLnByb3RvdHlwZS5lbGxpcHNlTW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZWxsaXBzZU1vZGVcIixhcmd1bWVudHMpLGEhPT1lLkNPUk5FUiYmYSE9PWUuQ09STkVSUyYmYSE9PWUuUkFESVVTJiZhIT09ZS5DRU5URVJ8fCh0aGlzLl9yZW5kZXJlci5fZWxsaXBzZU1vZGU9YSksdGhpc30sZC5wcm90b3R5cGUubm9TbW9vdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIubm9TbW9vdGgoKSx0aGlzfSxkLnByb3RvdHlwZS5yZWN0TW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicmVjdE1vZGVcIixhcmd1bWVudHMpLGEhPT1lLkNPUk5FUiYmYSE9PWUuQ09STkVSUyYmYSE9PWUuUkFESVVTJiZhIT09ZS5DRU5URVJ8fCh0aGlzLl9yZW5kZXJlci5fcmVjdE1vZGU9YSksdGhpc30sZC5wcm90b3R5cGUuc21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLnNtb290aCgpLHRoaXN9LGQucHJvdG90eXBlLnN0cm9rZUNhcD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3Ryb2tlQ2FwXCIsYXJndW1lbnRzKSxhIT09ZS5ST1VORCYmYSE9PWUuU1FVQVJFJiZhIT09ZS5QUk9KRUNUfHx0aGlzLl9yZW5kZXJlci5zdHJva2VDYXAoYSksdGhpc30sZC5wcm90b3R5cGUuc3Ryb2tlSm9pbj1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3Ryb2tlSm9pblwiLGFyZ3VtZW50cyksYSE9PWUuUk9VTkQmJmEhPT1lLkJFVkVMJiZhIT09ZS5NSVRFUnx8dGhpcy5fcmVuZGVyZXIuc3Ryb2tlSm9pbihhKSx0aGlzfSxkLnByb3RvdHlwZS5zdHJva2VXZWlnaHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInN0cm9rZVdlaWdodFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuc3Ryb2tlV2VpZ2h0KGEpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb25zdGFudHNcIjoxOCxcIi4uL21haW5cIjoyNH1dLDMyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL21haW5cIik7YShcIi4uL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUuYmV6aWVyPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllclwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlfHx0aGlzLl9yZW5kZXJlci5fZG9GaWxsPyh0aGlzLl9yZW5kZXJlci5iZXppZXIuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzKTp0aGlzfSxkLnByb3RvdHlwZS5iZXppZXJEZXRhaWw9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllckRldGFpbFwiLGFyZ3VtZW50cyksdGhpcy5fYmV6aWVyRGV0YWlsPWEsdGhpc30sZC5wcm90b3R5cGUuYmV6aWVyUG9pbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJQb2ludFwiLGFyZ3VtZW50cyk7dmFyIGc9MS1mO3JldHVybiBNYXRoLnBvdyhnLDMpKmErMypNYXRoLnBvdyhnLDIpKmYqYiszKmcqTWF0aC5wb3coZiwyKSpjK01hdGgucG93KGYsMykqZX0sZC5wcm90b3R5cGUuYmV6aWVyVGFuZ2VudD1mdW5jdGlvbihhLGIsYyxlLGYpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllclRhbmdlbnRcIixhcmd1bWVudHMpO3ZhciBnPTEtZjtyZXR1cm4gMyplKk1hdGgucG93KGYsMiktMypjKk1hdGgucG93KGYsMikrNipjKmcqZi02KmIqZypmKzMqYipNYXRoLnBvdyhnLDIpLTMqYSpNYXRoLnBvdyhnLDIpfSxkLnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiZ0aGlzLl9yZW5kZXJlci5jdXJ2ZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLmN1cnZlRGV0YWlsPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZURldGFpbFwiLGFyZ3VtZW50cyksdGhpcy5fY3VydmVEZXRhaWw9YTwzPzM6YSx0aGlzfSxkLnByb3RvdHlwZS5jdXJ2ZVRpZ2h0bmVzcz1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVUaWdodG5lc3NcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9jdXJ2ZVRpZ2h0bmVzcz1hLHRoaXN9LGQucHJvdG90eXBlLmN1cnZlUG9pbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVBvaW50XCIsYXJndW1lbnRzKTt2YXIgZz1mKmYqZixoPWYqZjtyZXR1cm4gYSooLS41KmcraC0uNSpmKStiKigxLjUqZy0yLjUqaCsxKStjKigtMS41KmcrMipoKy41KmYpK2UqKC41KmctLjUqaCl9LGQucHJvdG90eXBlLmN1cnZlVGFuZ2VudD1mdW5jdGlvbihhLGIsYyxlLGYpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlVGFuZ2VudFwiLGFyZ3VtZW50cyk7dmFyIGc9ZipmO3JldHVybiBhKigtMypnLzIrMipmLS41KStiKig5KmcvMi01KmYpK2MqKC05KmcvMis0KmYrLjUpK2UqKDMqZy8yLWYpfSxiLmV4cG9ydHM9ZH0se1wiLi4vZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vbWFpblwiOjI0fV0sMzM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vbWFpblwiKSxlPWEoXCIuLi9jb25zdGFudHNcIiksZj1udWxsLGc9W10saD1bXSxpPSExLGo9ITEsaz0hMSxsPSExLG09ITA7ZC5wcm90b3R5cGUuYmVnaW5Db250b3VyPWZ1bmN0aW9uKCl7cmV0dXJuIGg9W10sbD0hMCx0aGlzfSxkLnByb3RvdHlwZS5iZWdpblNoYXBlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZWdpblNoYXBlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRD90aGlzLl9yZW5kZXJlci5iZWdpblNoYXBlLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk6KGY9YT09PWUuUE9JTlRTfHxhPT09ZS5MSU5FU3x8YT09PWUuVFJJQU5HTEVTfHxhPT09ZS5UUklBTkdMRV9GQU58fGE9PT1lLlRSSUFOR0xFX1NUUklQfHxhPT09ZS5RVUFEU3x8YT09PWUuUVVBRF9TVFJJUD9hOm51bGwsZz1bXSxoPVtdKSx0aGlzfSxkLnByb3RvdHlwZS5iZXppZXJWZXJ0ZXg9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJWZXJ0ZXhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEKXRoaXMuX3JlbmRlcmVyLmJlemllclZlcnRleC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpO2Vsc2V7aWYoMD09PWcubGVuZ3RoKXRocm93XCJ2ZXJ0ZXgoKSBtdXN0IGJlIHVzZWQgb25jZSBiZWZvcmUgY2FsbGluZyBiZXppZXJWZXJ0ZXgoKVwiO2k9ITA7Zm9yKHZhciBhPVtdLGI9MDtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKWFbYl09YXJndW1lbnRzW2JdO2EuaXNWZXJ0PSExLGw/aC5wdXNoKGEpOmcucHVzaChhKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUuY3VydmVWZXJ0ZXg9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVWZXJ0ZXhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEP3RoaXMuX3JlbmRlcmVyLmN1cnZlVmVydGV4LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk6KGo9ITAsdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSkpLHRoaXN9LGQucHJvdG90eXBlLmVuZENvbnRvdXI9ZnVuY3Rpb24oKXt2YXIgYT1oWzBdLnNsaWNlKCk7YS5pc1ZlcnQ9aFswXS5pc1ZlcnQsYS5tb3ZlVG89ITEsaC5wdXNoKGEpLG0mJihnLnB1c2goZ1swXSksbT0hMSk7Zm9yKHZhciBiPTA7YjxoLmxlbmd0aDtiKyspZy5wdXNoKGhbYl0pO3JldHVybiB0aGlzfSxkLnByb3RvdHlwZS5lbmRTaGFwZT1mdW5jdGlvbihhKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJlbmRTaGFwZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhpcy5fcmVuZGVyZXIuZW5kU2hhcGUoYSxqLGksayxsLGYpO2Vsc2V7aWYoMD09PWcubGVuZ3RoKXJldHVybiB0aGlzO2lmKCF0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJiF0aGlzLl9yZW5kZXJlci5fZG9GaWxsKXJldHVybiB0aGlzO3ZhciBiPWE9PT1lLkNMT1NFO2ImJiFsJiZnLnB1c2goZ1swXSksdGhpcy5fcmVuZGVyZXIuZW5kU2hhcGUoYSxnLGosaSxrLGwsZiksaj0hMSxpPSExLGs9ITEsbD0hMSxtPSEwLGImJmcucG9wKCl9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLnF1YWRyYXRpY1ZlcnRleD1mdW5jdGlvbigpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInF1YWRyYXRpY1ZlcnRleFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhpcy5fcmVuZGVyZXIucXVhZHJhdGljVmVydGV4LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk7ZWxzZXtpZih0aGlzLl9jb250b3VySW5pdGVkKXt2YXIgYT17fTtyZXR1cm4gYS54PWFyZ3VtZW50c1swXSxhLnk9YXJndW1lbnRzWzFdLGEueDM9YXJndW1lbnRzWzJdLGEueTM9YXJndW1lbnRzWzNdLGEudHlwZT1lLlFVQURSQVRJQyx0aGlzLl9jb250b3VyVmVydGljZXMucHVzaChhKSx0aGlzfWlmKCEoZy5sZW5ndGg+MCkpdGhyb3cgbmV3IEVycm9yKFwidmVydGV4KCkgbXVzdCBiZSB1c2VkIG9uY2UgYmVmb3JlIGNhbGxpbmcgcXVhZHJhdGljVmVydGV4KClcIik7az0hMDtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYltjXT1hcmd1bWVudHNbY107Yi5pc1ZlcnQ9ITEsbD9oLnB1c2goYik6Zy5wdXNoKGIpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS52ZXJ0ZXg9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZih0aGlzLl9yZW5kZXJlci5pc1AzRCl0aGlzLl9yZW5kZXJlci52ZXJ0ZXguYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTtlbHNle3ZhciBmPVtdO2YuaXNWZXJ0PSEwLGZbMF09YSxmWzFdPWIsZlsyXT0wLGZbM109MCxmWzRdPTAsZls1XT10aGlzLl9yZW5kZXJlci5fZ2V0RmlsbCgpLGZbNl09dGhpcy5fcmVuZGVyZXIuX2dldFN0cm9rZSgpLGMmJihmLm1vdmVUbz1jKSxsPygwPT09aC5sZW5ndGgmJihmLm1vdmVUbz0hMCksaC5wdXNoKGYpKTpnLnB1c2goZil9cmV0dXJuIHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb25zdGFudHNcIjoxOCxcIi4uL21haW5cIjoyNH1dLDM0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cub1JlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxmdW5jdGlvbihhLGIpe3dpbmRvdy5zZXRUaW1lb3V0KGEsMWUzLzYwKX19KCksZnVuY3Rpb24oKXtcInVuZGVmaW5lZFwiPT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXl8fFVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZS5zbGljZXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KFVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZSxcInNsaWNlXCIse3ZhbHVlOkFycmF5LnByb3RvdHlwZS5zbGljZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMX0pfSgpLGZ1bmN0aW9uKCl7aWYoIU9iamVjdC5hc3NpZ24pe3ZhciBhPU9iamVjdC5rZXlzLGI9T2JqZWN0LmRlZmluZVByb3BlcnR5LGM9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMCE9PWEmJm51bGwhPT1hfSxkPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbCgpLGU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxmPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZS5jYWxsKGEsYil9fSxnPWZ1bmN0aW9uKGIsZSl7aWYoIWMoYikpdGhyb3cgbmV3IFR5cGVFcnJvcihcInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdFwiKTt2YXIgZyxoLGksaixrPU9iamVjdChiKTtmb3IoZz0xO2c8YXJndW1lbnRzLmxlbmd0aDsrK2cpZm9yKGg9T2JqZWN0KGFyZ3VtZW50c1tnXSksaj1hKGgpLGQmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJmoucHVzaC5hcHBseShqLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaCkuZmlsdGVyKGYoaCkpKSxpPTA7aTxqLmxlbmd0aDsrK2kpa1tqW2ldXT1oW2pbaV1dO3JldHVybiBrfTtiKE9iamVjdCxcImFzc2lnblwiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwfSl9fSgpfSx7fV0sMzU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2QucHJvdG90eXBlLm5vTG9vcD1mdW5jdGlvbigpe3RoaXMuX2xvb3A9ITF9LGQucHJvdG90eXBlLmxvb3A9ZnVuY3Rpb24oKXt0aGlzLl9sb29wPSEwLHRoaXMuX2RyYXcoKX0sZC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3RoaXMuX3N0eWxlcy5wdXNoKHtwcm9wczp7X2NvbG9yTW9kZTp0aGlzLl9jb2xvck1vZGV9LHJlbmRlcmVyOnRoaXMuX3JlbmRlcmVyLnB1c2goKX0pfSxkLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9zdHlsZXMucG9wKCk7YT8odGhpcy5fcmVuZGVyZXIucG9wKGEucmVuZGVyZXIpLE9iamVjdC5hc3NpZ24odGhpcyxhLnByb3BzKSk6Y29uc29sZS53YXJuKFwicG9wKCkgd2FzIGNhbGxlZCB3aXRob3V0IG1hdGNoaW5nIHB1c2goKVwiKX0sZC5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKGEpe3ZhciBiPXBhcnNlSW50KGEpOyhpc05hTihiKXx8YjwxKSYmKGI9MSk7dmFyIGM9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXMsZD1jLnNldHVwLGU9Yy5kcmF3O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpe3ZvaWQgMD09PWQmJmMuc2NhbGUoYy5fcGl4ZWxEZW5zaXR5LGMuX3BpeGVsRGVuc2l0eSk7Zm9yKHZhciBmPWZ1bmN0aW9uKGEpe2EuY2FsbChjKX0sZz0wO2c8YjtnKyspYy5yZXNldE1hdHJpeCgpLGMuX3JlbmRlcmVyLmlzUDNEJiZjLl9yZW5kZXJlci5fdXBkYXRlKCksYy5fc2V0UHJvcGVydHkoXCJmcmFtZUNvdW50XCIsYy5mcmFtZUNvdW50KzEpLGMuX3JlZ2lzdGVyZWRNZXRob2RzLnByZS5mb3JFYWNoKGYpLGUoKSxjLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0LmZvckVhY2goZil9fSxiLmV4cG9ydHM9ZH0se1wiLi9tYWluXCI6MjR9XSwzNjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIik7ZC5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3JldHVybiB0aGlzLl9yZW5kZXJlci5hcHBseU1hdHJpeChhLGIsYyxkLGUsZiksdGhpc30sZC5wcm90b3R5cGUucG9wTWF0cml4PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicG9wTWF0cml4KCkgbm90IHVzZWQsIHNlZSBwb3AoKVwiKX0sZC5wcm90b3R5cGUucHJpbnRNYXRyaXg9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJwcmludE1hdHJpeCgpIG5vdCBpbXBsZW1lbnRlZFwiKX0sZC5wcm90b3R5cGUucHVzaE1hdHJpeD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInB1c2hNYXRyaXgoKSBub3QgdXNlZCwgc2VlIHB1c2goKVwiKX0sZC5wcm90b3R5cGUucmVzZXRNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIucmVzZXRNYXRyaXgoKSx0aGlzfSxkLnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicm90YXRlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5yb3RhdGUodGhpcy5fdG9SYWRpYW5zKGEpLGIpLHRoaXN9LGQucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwicm90YXRlWFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyb3RhdGVYXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5yb3RhdGVYKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJyb3RhdGVZXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJvdGF0ZVlcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnJvdGF0ZVkodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInJvdGF0ZVpcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicm90YXRlWlwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIucm90YXRlWih0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYixjKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzY2FsZVwiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIGQuVmVjdG9yKXt2YXIgZT1hO2E9ZS54LGI9ZS55LGM9ZS56fWVsc2UgaWYoYSBpbnN0YW5jZW9mIEFycmF5KXt2YXIgZj1hO2E9ZlswXSxiPWZbMV0sYz1mWzJdfHwxfXJldHVybiBpc05hTihiKT9iPWM9YTppc05hTihjKSYmKGM9MSksdGhpcy5fcmVuZGVyZXIuc2NhbGUuY2FsbCh0aGlzLl9yZW5kZXJlcixhLGIsYyksdGhpc30sZC5wcm90b3R5cGUuc2hlYXJYPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzaGVhclhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnNoZWFyWCh0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnNoZWFyWT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2hlYXJZXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5zaGVhclkodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0cmFuc2xhdGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEP3RoaXMuX3JlbmRlcmVyLnRyYW5zbGF0ZShhLGIsYyk6dGhpcy5fcmVuZGVyZXIudHJhbnNsYXRlKGEsYiksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4vbWFpblwiOjI0fV0sMzc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmNyZWF0ZVN0cmluZ0RpY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlU3RyaW5nRGljdFwiLGFyZ3VtZW50cyksbmV3IGQuU3RyaW5nRGljdChhLGIpfSxkLnByb3RvdHlwZS5jcmVhdGVOdW1iZXJEaWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZU51bWJlckRpY3RcIixhcmd1bWVudHMpLG5ldyBkLk51bWJlckRpY3QoYSxiKX0sZC5UeXBlZERpY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSBpbnN0YW5jZW9mIE9iamVjdD90aGlzLmRhdGE9YToodGhpcy5kYXRhPXt9LHRoaXMuZGF0YVthXT1iKSx0aGlzfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aH0sZC5UeXBlZERpY3QucHJvdG90eXBlLmhhc0tleT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe2lmKHRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKSlyZXR1cm4gdGhpcy5kYXRhW2FdO2NvbnNvbGUubG9nKGErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBEaWN0aW9uYXJ5XCIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5fdmFsaWRhdGUoYik/dGhpcy5kYXRhW2FdPWI6Y29uc29sZS5sb2coXCJUaG9zZSB2YWx1ZXMgZG9udCB3b3JrIGZvciB0aGlzIGRpY3Rpb25hcnkgdHlwZS5cIil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5fYWRkT2JqPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXRoaXMuc2V0KGIsYVtiXSl9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24oYSxiKXthIGluc3RhbmNlb2YgT2JqZWN0JiZ2b2lkIDA9PT1iP3RoaXMuX2FkZE9iaihhKTp2b2lkIDAhPT1hP3RoaXMuc2V0KGEsYik6Y29uc29sZS5sb2coXCJJbiBvcmRlciB0byBjcmVhdGUgYSBuZXcgRGljdGlvbmFyeSBlbnRyeSB5b3UgbXVzdCBwYXNzIGFuIG9iamVjdCBvciBhIGtleSwgdmFsdWUgcGFpclwiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5kYXRhPXt9fSxkLlR5cGVkRGljdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGEpe2lmKCF0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSkpdGhyb3cgbmV3IEVycm9yKGErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBEaWN0aW9uYXJ5XCIpO2RlbGV0ZSB0aGlzLmRhdGFbYV19LGQuVHlwZWREaWN0LnByb3RvdHlwZS5wcmludD1mdW5jdGlvbigpe2Zvcih2YXIgYSBpbiB0aGlzLmRhdGEpY29uc29sZS5sb2coXCJrZXk6XCIrYStcIiB2YWx1ZTpcIit0aGlzLmRhdGFbYV0pfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2F2ZVRhYmxlPWZ1bmN0aW9uKGEpe3ZhciBiPVwiXCI7Zm9yKHZhciBjIGluIHRoaXMuZGF0YSliKz1jK1wiLFwiK3RoaXMuZGF0YVtjXStcIlxcblwiO3ZhciBlPW5ldyBCbG9iKFtiXSx7dHlwZTpcInRleHQvY3N2XCJ9KTtkLnByb3RvdHlwZS5kb3dubG9hZEZpbGUoZSxhfHxcIm15Y3N2XCIsXCJjc3ZcIil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5zYXZlSlNPTj1mdW5jdGlvbihhLGIpe2QucHJvdG90eXBlLnNhdmVKU09OKHRoaXMuZGF0YSxhLGIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGEpe3JldHVybiEwfSxkLlN0cmluZ0RpY3Q9ZnVuY3Rpb24oKXtkLlR5cGVkRGljdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGQuU3RyaW5nRGljdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlR5cGVkRGljdC5wcm90b3R5cGUpLGQuU3RyaW5nRGljdC5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhfSxkLk51bWJlckRpY3Q9ZnVuY3Rpb24oKXtkLlR5cGVkRGljdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlR5cGVkRGljdC5wcm90b3R5cGUpLGQuTnVtYmVyRGljdC5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhfSxkLk51bWJlckRpY3QucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhLGIpe3RoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKT90aGlzLmRhdGFbYV0rPWI6Y29uc29sZS5sb2coXCJUaGUga2V5IC0gXCIrYStcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGRpY3Rpb25hcnkuXCIpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihhLGIpe3RoaXMuYWRkKGEsLWIpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLm11bHQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSk/dGhpcy5kYXRhW2FdKj1iOmNvbnNvbGUubG9nKFwiVGhlIGtleSAtIFwiK2ErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkaWN0aW9uYXJ5LlwiKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSk/dGhpcy5kYXRhW2FdLz1iOmNvbnNvbGUubG9nKFwiVGhlIGtleSAtIFwiK2ErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkaWN0aW9uYXJ5LlwiKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5fdmFsdWVUZXN0PWZ1bmN0aW9uKGEpe2lmKDA9PT1PYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gc2VhcmNoIGZvciBhIG1pbmltdW0gb3IgbWF4aW11bSB2YWx1ZSBvbiBhbiBlbXB0eSBOdW1iZXJEaWN0XCIpO2lmKDE9PT1PYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aClyZXR1cm4gdGhpcy5kYXRhW09iamVjdC5rZXlzKHRoaXMuZGF0YSlbMF1dO3ZhciBiPXRoaXMuZGF0YVtPYmplY3Qua2V5cyh0aGlzLmRhdGEpWzBdXTtmb3IodmFyIGMgaW4gdGhpcy5kYXRhKXRoaXMuZGF0YVtjXSphPGIqYSYmKGI9dGhpcy5kYXRhW2NdKTtyZXR1cm4gYn0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5taW5WYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZVRlc3QoMSl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWF4VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWVUZXN0KC0xKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5fa2V5VGVzdD1mdW5jdGlvbihhKXtpZigwPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHVzZSBtaW5WYWx1ZSBvbiBhbiBlbXB0eSBOdW1iZXJEaWN0XCIpO2lmKDE9PT1PYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aClyZXR1cm4gT2JqZWN0LmtleXModGhpcy5kYXRhKVswXTtmb3IodmFyIGI9T2JqZWN0LmtleXModGhpcy5kYXRhKVswXSxjPTE7YzxPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aDtjKyspT2JqZWN0LmtleXModGhpcy5kYXRhKVtjXSphPGIqYSYmKGI9T2JqZWN0LmtleXModGhpcy5kYXRhKVtjXSk7cmV0dXJuIGJ9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWluS2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleVRlc3QoMSl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWF4S2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleVRlc3QoLTEpfSxiLmV4cG9ydHM9ZC5UeXBlZERpY3R9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMzg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmRldmljZU9yaWVudGF0aW9uPXZvaWQgMCxkLnByb3RvdHlwZS5hY2NlbGVyYXRpb25YPTAsZC5wcm90b3R5cGUuYWNjZWxlcmF0aW9uWT0wLGQucHJvdG90eXBlLmFjY2VsZXJhdGlvblo9MCxkLnByb3RvdHlwZS5wQWNjZWxlcmF0aW9uWD0wLGQucHJvdG90eXBlLnBBY2NlbGVyYXRpb25ZPTAsZC5wcm90b3R5cGUucEFjY2VsZXJhdGlvblo9MCxkLnByb3RvdHlwZS5fdXBkYXRlUEFjY2VsZXJhdGlvbnM9ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcInBBY2NlbGVyYXRpb25YXCIsdGhpcy5hY2NlbGVyYXRpb25YKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBBY2NlbGVyYXRpb25ZXCIsdGhpcy5hY2NlbGVyYXRpb25ZKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBBY2NlbGVyYXRpb25aXCIsdGhpcy5hY2NlbGVyYXRpb25aKX0sZC5wcm90b3R5cGUucm90YXRpb25YPTAsZC5wcm90b3R5cGUucm90YXRpb25ZPTAsZC5wcm90b3R5cGUucm90YXRpb25aPTAsZC5wcm90b3R5cGUucFJvdGF0aW9uWD0wLGQucHJvdG90eXBlLnBSb3RhdGlvblk9MCxkLnByb3RvdHlwZS5wUm90YXRpb25aPTA7dmFyIGUsZixnLGg9MCxpPTAsaj0wLGs9XCJjbG9ja3dpc2VcIixsPVwiY2xvY2t3aXNlXCIsbT1cImNsb2Nrd2lzZVwiO2QucHJvdG90eXBlLl91cGRhdGVQUm90YXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJwUm90YXRpb25YXCIsdGhpcy5yb3RhdGlvblgpLHRoaXMuX3NldFByb3BlcnR5KFwicFJvdGF0aW9uWVwiLHRoaXMucm90YXRpb25ZKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBSb3RhdGlvblpcIix0aGlzLnJvdGF0aW9uWil9LGQucHJvdG90eXBlLnR1cm5BeGlzPXZvaWQgMDt2YXIgbj0uNSxvPTMwO2QucHJvdG90eXBlLnNldE1vdmVUaHJlc2hvbGQ9ZnVuY3Rpb24oYSl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2V0TW92ZVRocmVzaG9sZFwiLGFyZ3VtZW50cyksbj1hfSxkLnByb3RvdHlwZS5zZXRTaGFrZVRocmVzaG9sZD1mdW5jdGlvbihhKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzZXRTaGFrZVRocmVzaG9sZFwiLGFyZ3VtZW50cyksbz1hfSxkLnByb3RvdHlwZS5fb25kZXZpY2VvcmllbnRhdGlvbj1mdW5jdGlvbihhKXt0aGlzLl91cGRhdGVQUm90YXRpb25zKCksdGhpcy5fc2V0UHJvcGVydHkoXCJyb3RhdGlvblhcIixhLmJldGEpLHRoaXMuX3NldFByb3BlcnR5KFwicm90YXRpb25ZXCIsYS5nYW1tYSksdGhpcy5fc2V0UHJvcGVydHkoXCJyb3RhdGlvblpcIixhLmFscGhhKSx0aGlzLl9oYW5kbGVNb3Rpb24oKX0sZC5wcm90b3R5cGUuX29uZGV2aWNlbW90aW9uPWZ1bmN0aW9uKGEpe3RoaXMuX3VwZGF0ZVBBY2NlbGVyYXRpb25zKCksdGhpcy5fc2V0UHJvcGVydHkoXCJhY2NlbGVyYXRpb25YXCIsMiphLmFjY2VsZXJhdGlvbi54KSx0aGlzLl9zZXRQcm9wZXJ0eShcImFjY2VsZXJhdGlvbllcIiwyKmEuYWNjZWxlcmF0aW9uLnkpLHRoaXMuX3NldFByb3BlcnR5KFwiYWNjZWxlcmF0aW9uWlwiLDIqYS5hY2NlbGVyYXRpb24ueiksdGhpcy5faGFuZGxlTW90aW9uKCl9LGQucHJvdG90eXBlLl9oYW5kbGVNb3Rpb249ZnVuY3Rpb24oKXs5MD09PXdpbmRvdy5vcmllbnRhdGlvbnx8LTkwPT09d2luZG93Lm9yaWVudGF0aW9uP3RoaXMuX3NldFByb3BlcnR5KFwiZGV2aWNlT3JpZW50YXRpb25cIixcImxhbmRzY2FwZVwiKTowPT09d2luZG93Lm9yaWVudGF0aW9uP3RoaXMuX3NldFByb3BlcnR5KFwiZGV2aWNlT3JpZW50YXRpb25cIixcInBvcnRyYWl0XCIpOnZvaWQgMD09PXdpbmRvdy5vcmllbnRhdGlvbiYmdGhpcy5fc2V0UHJvcGVydHkoXCJkZXZpY2VPcmllbnRhdGlvblwiLFwidW5kZWZpbmVkXCIpO3ZhciBhPXRoaXMuZGV2aWNlTW92ZWR8fHdpbmRvdy5kZXZpY2VNb3ZlZDtcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiYoTWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25YLXRoaXMucEFjY2VsZXJhdGlvblgpPm58fE1hdGguYWJzKHRoaXMuYWNjZWxlcmF0aW9uWS10aGlzLnBBY2NlbGVyYXRpb25ZKT5ufHxNYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblotdGhpcy5wQWNjZWxlcmF0aW9uWik+bikmJmEoKTt2YXIgYj10aGlzLmRldmljZVR1cm5lZHx8d2luZG93LmRldmljZVR1cm5lZDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiKXt2YXIgYz10aGlzLnJvdGF0aW9uWCsxODAsZD10aGlzLnBSb3RhdGlvblgrMTgwLHA9aCsxODA7Yy1kPjAmJmMtZDwyNzB8fGMtZDwtMjcwP2s9XCJjbG9ja3dpc2VcIjooYy1kPDB8fGMtZD4yNzApJiYoaz1cImNvdW50ZXItY2xvY2t3aXNlXCIpLGshPT1lJiYocD1jKSxNYXRoLmFicyhjLXApPjkwJiZNYXRoLmFicyhjLXApPDI3MCYmKHA9Yyx0aGlzLl9zZXRQcm9wZXJ0eShcInR1cm5BeGlzXCIsXCJYXCIpLGIoKSksZT1rLGg9cC0xODA7dmFyIHE9dGhpcy5yb3RhdGlvblkrMTgwLHI9dGhpcy5wUm90YXRpb25ZKzE4MCxzPWkrMTgwO3Etcj4wJiZxLXI8MjcwfHxxLXI8LTI3MD9sPVwiY2xvY2t3aXNlXCI6KHEtcjwwfHxxLXRoaXMucFJvdGF0aW9uWT4yNzApJiYobD1cImNvdW50ZXItY2xvY2t3aXNlXCIpLGwhPT1mJiYocz1xKSxNYXRoLmFicyhxLXMpPjkwJiZNYXRoLmFicyhxLXMpPDI3MCYmKHM9cSx0aGlzLl9zZXRQcm9wZXJ0eShcInR1cm5BeGlzXCIsXCJZXCIpLGIoKSksZj1sLGk9cy0xODAsdGhpcy5yb3RhdGlvblotdGhpcy5wUm90YXRpb25aPjAmJnRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWjwyNzB8fHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWjwtMjcwP209XCJjbG9ja3dpc2VcIjoodGhpcy5yb3RhdGlvblotdGhpcy5wUm90YXRpb25aPDB8fHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWj4yNzApJiYobT1cImNvdW50ZXItY2xvY2t3aXNlXCIpLG0hPT1nJiYoaj10aGlzLnJvdGF0aW9uWiksTWF0aC5hYnModGhpcy5yb3RhdGlvblotaik+OTAmJk1hdGguYWJzKHRoaXMucm90YXRpb25aLWopPDI3MCYmKGo9dGhpcy5yb3RhdGlvblosdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLFwiWlwiKSxiKCkpLGc9bSx0aGlzLl9zZXRQcm9wZXJ0eShcInR1cm5BeGlzXCIsdm9pZCAwKX12YXIgdD10aGlzLmRldmljZVNoYWtlbnx8d2luZG93LmRldmljZVNoYWtlbjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXt2YXIgdSx2O251bGwhPT10aGlzLnBBY2NlbGVyYXRpb25YJiYodT1NYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblgtdGhpcy5wQWNjZWxlcmF0aW9uWCksdj1NYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblktdGhpcy5wQWNjZWxlcmF0aW9uWSkpLHUrdj5vJiZ0KCl9fSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSwzOTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoKXtmb3IodmFyIGEgaW4gZilpZihmLmhhc093blByb3BlcnR5KGEpJiYhMD09PWZbYV0pcmV0dXJuITA7cmV0dXJuITF9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKSxmPXt9O2UucHJvdG90eXBlLmlzS2V5UHJlc3NlZD0hMSxlLnByb3RvdHlwZS5rZXlJc1ByZXNzZWQ9ITEsZS5wcm90b3R5cGUua2V5PVwiXCIsZS5wcm90b3R5cGUua2V5Q29kZT0wLGUucHJvdG90eXBlLl9vbmtleWRvd249ZnVuY3Rpb24oYSl7aWYoIWZbYS53aGljaF0pe3RoaXMuX3NldFByb3BlcnR5KFwiaXNLZXlQcmVzc2VkXCIsITApLHRoaXMuX3NldFByb3BlcnR5KFwia2V5SXNQcmVzc2VkXCIsITApLHRoaXMuX3NldFByb3BlcnR5KFwia2V5Q29kZVwiLGEud2hpY2gpLGZbYS53aGljaF09ITAsdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlcIixhLmtleXx8U3RyaW5nLmZyb21DaGFyQ29kZShhLndoaWNoKXx8YS53aGljaCk7dmFyIGI9dGhpcy5rZXlQcmVzc2VkfHx3aW5kb3cua2V5UHJlc3NlZDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiJiYhYS5jaGFyQ29kZSl7ITE9PT1iKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fX0sZS5wcm90b3R5cGUuX29ua2V5dXA9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5rZXlSZWxlYXNlZHx8d2luZG93LmtleVJlbGVhc2VkO2lmKGZbYS53aGljaF09ITEsZCgpfHwodGhpcy5fc2V0UHJvcGVydHkoXCJpc0tleVByZXNzZWRcIiwhMSksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlJc1ByZXNzZWRcIiwhMSkpLHRoaXMuX3NldFByb3BlcnR5KFwiX2xhc3RLZXlDb2RlVHlwZWRcIixudWxsKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleVwiLGEua2V5fHxTdHJpbmcuZnJvbUNoYXJDb2RlKGEud2hpY2gpfHxhLndoaWNoKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleUNvZGVcIixhLndoaWNoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiKXshMT09PWIoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGUucHJvdG90eXBlLl9vbmtleXByZXNzPWZ1bmN0aW9uKGEpe2lmKGEud2hpY2ghPT10aGlzLl9sYXN0S2V5Q29kZVR5cGVkKXt0aGlzLl9zZXRQcm9wZXJ0eShcImtleUNvZGVcIixhLndoaWNoKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9sYXN0S2V5Q29kZVR5cGVkXCIsYS53aGljaCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlcIixTdHJpbmcuZnJvbUNoYXJDb2RlKGEud2hpY2gpKTt2YXIgYj10aGlzLmtleVR5cGVkfHx3aW5kb3cua2V5VHlwZWQ7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYil7ITE9PT1iKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fX0sZS5wcm90b3R5cGUuX29uYmx1cj1mdW5jdGlvbihhKXtmPXt9fSxlLnByb3RvdHlwZS5rZXlJc0Rvd249ZnVuY3Rpb24oYSl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImtleUlzRG93blwiLGFyZ3VtZW50cyksZlthXX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNDA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjLGQpe2QmJiFkLmNsaWVudFgmJihkLnRvdWNoZXM/ZD1kLnRvdWNoZXNbMF06ZC5jaGFuZ2VkVG91Y2hlcyYmKGQ9ZC5jaGFuZ2VkVG91Y2hlc1swXSkpO3ZhciBlPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZj1hLnNjcm9sbFdpZHRoL2IsZz1hLnNjcm9sbEhlaWdodC9jO3JldHVybnt4OihkLmNsaWVudFgtZS5sZWZ0KS9mLHk6KGQuY2xpZW50WS1lLnRvcCkvZyx3aW5YOmQuY2xpZW50WCx3aW5ZOmQuY2xpZW50WSxpZDpkLmlkZW50aWZpZXJ9fXZhciBlPWEoXCIuLi9jb3JlL21haW5cIiksZj1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZS5wcm90b3R5cGUuX2hhc01vdXNlSW50ZXJhY3RlZD0hMSxlLnByb3RvdHlwZS5tb3VzZVg9MCxlLnByb3RvdHlwZS5tb3VzZVk9MCxlLnByb3RvdHlwZS5wbW91c2VYPTAsZS5wcm90b3R5cGUucG1vdXNlWT0wLGUucHJvdG90eXBlLndpbk1vdXNlWD0wLGUucHJvdG90eXBlLndpbk1vdXNlWT0wLGUucHJvdG90eXBlLnB3aW5Nb3VzZVg9MCxlLnByb3RvdHlwZS5wd2luTW91c2VZPTAsZS5wcm90b3R5cGUubW91c2VCdXR0b249MCxlLnByb3RvdHlwZS5tb3VzZUlzUHJlc3NlZD0hMSxlLnByb3RvdHlwZS5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzPWZ1bmN0aW9uKGEpe2lmKG51bGwhPT10aGlzLl9jdXJFbGVtZW50JiYoIWEudG91Y2hlc3x8YS50b3VjaGVzLmxlbmd0aD4wKSl7dmFyIGI9ZCh0aGlzLl9jdXJFbGVtZW50LmVsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LGEpO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VYXCIsYi54KSx0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlWVwiLGIueSksdGhpcy5fc2V0UHJvcGVydHkoXCJ3aW5Nb3VzZVhcIixiLndpblgpLHRoaXMuX3NldFByb3BlcnR5KFwid2luTW91c2VZXCIsYi53aW5ZKX10aGlzLl9oYXNNb3VzZUludGVyYWN0ZWR8fCh0aGlzLl91cGRhdGVNb3VzZUNvb3JkcygpLHRoaXMuX3NldFByb3BlcnR5KFwiX2hhc01vdXNlSW50ZXJhY3RlZFwiLCEwKSl9LGUucHJvdG90eXBlLl91cGRhdGVNb3VzZUNvb3Jkcz1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwicG1vdXNlWFwiLHRoaXMubW91c2VYKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBtb3VzZVlcIix0aGlzLm1vdXNlWSksdGhpcy5fc2V0UHJvcGVydHkoXCJwd2luTW91c2VYXCIsdGhpcy53aW5Nb3VzZVgpLHRoaXMuX3NldFByb3BlcnR5KFwicHdpbk1vdXNlWVwiLHRoaXMud2luTW91c2VZKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9wbW91c2VXaGVlbERlbHRhWVwiLHRoaXMuX21vdXNlV2hlZWxEZWx0YVkpfSxlLnByb3RvdHlwZS5fc2V0TW91c2VCdXR0b249ZnVuY3Rpb24oYSl7MT09PWEuYnV0dG9uP3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VCdXR0b25cIixmLkNFTlRFUik6Mj09PWEuYnV0dG9uP3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VCdXR0b25cIixmLlJJR0hUKTp0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlQnV0dG9uXCIsZi5MRUZUKX0sZS5wcm90b3R5cGUuX29ubW91c2Vtb3ZlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKSx0aGlzLm1vdXNlSXNQcmVzc2VkP1wiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VEcmFnZ2VkPyExPT09Yi5tb3VzZURyYWdnZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoTW92ZWQmJiExPT09Yi50b3VjaE1vdmVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZU1vdmVkJiYhMT09PWIubW91c2VNb3ZlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb25tb3VzZWRvd249ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCEwKSx0aGlzLl9zZXRNb3VzZUJ1dHRvbihhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksXCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVByZXNzZWQ/ITE9PT1iLm1vdXNlUHJlc3NlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hTdGFydGVkJiYhMT09PWIudG91Y2hTdGFydGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbm1vdXNldXA9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCExKSxcblwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VSZWxlYXNlZD8hMT09PWIubW91c2VSZWxlYXNlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hFbmRlZCYmITE9PT1iLnRvdWNoRW5kZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29uZHJhZ2VuZD1lLnByb3RvdHlwZS5fb25tb3VzZXVwLGUucHJvdG90eXBlLl9vbmRyYWdvdmVyPWUucHJvdG90eXBlLl9vbm1vdXNlbW92ZSxlLnByb3RvdHlwZS5fb25jbGljaz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlQ2xpY2tlZCl7ITE9PT1iLm1vdXNlQ2xpY2tlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX0sZS5wcm90b3R5cGUuX29uZGJsY2xpY2s9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYi5kb3VibGVDbGlja2VkKXshMT09PWIuZG91YmxlQ2xpY2tlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX0sZS5wcm90b3R5cGUuX21vdXNlV2hlZWxEZWx0YVk9MCxlLnByb3RvdHlwZS5fcG1vdXNlV2hlZWxEZWx0YVk9MCxlLnByb3RvdHlwZS5fb253aGVlbD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztpZih0aGlzLl9zZXRQcm9wZXJ0eShcIl9tb3VzZVdoZWVsRGVsdGFZXCIsYS5kZWx0YVkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VXaGVlbCl7YS5kZWx0YT1hLmRlbHRhWTshMT09PWIubW91c2VXaGVlbChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDQxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyxkLGUpe2U9ZXx8MDt2YXIgZj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGc9YS5zY3JvbGxXaWR0aC9iLGg9YS5zY3JvbGxIZWlnaHQvYyxpPWQudG91Y2hlc1tlXXx8ZC5jaGFuZ2VkVG91Y2hlc1tlXTtyZXR1cm57eDooaS5jbGllbnRYLWYubGVmdCkvZyx5OihpLmNsaWVudFktZi50b3ApL2gsd2luWDppLmNsaWVudFgsd2luWTppLmNsaWVudFksaWQ6aS5pZGVudGlmaWVyfX12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpO2UucHJvdG90eXBlLnRvdWNoZXM9W10sZS5wcm90b3R5cGUuX3VwZGF0ZVRvdWNoQ29vcmRzPWZ1bmN0aW9uKGEpe2lmKG51bGwhPT10aGlzLl9jdXJFbGVtZW50KXtmb3IodmFyIGI9W10sYz0wO2M8YS50b3VjaGVzLmxlbmd0aDtjKyspYltjXT1kKHRoaXMuX2N1ckVsZW1lbnQuZWx0LHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsYSxjKTt0aGlzLl9zZXRQcm9wZXJ0eShcInRvdWNoZXNcIixiKX19LGUucHJvdG90eXBlLl9vbnRvdWNoc3RhcnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCEwKSx0aGlzLl91cGRhdGVUb3VjaENvb3JkcyhhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksdGhpcy5fdXBkYXRlTW91c2VDb29yZHMoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoU3RhcnRlZD8hMT09PWIudG91Y2hTdGFydGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVByZXNzZWQmJiExPT09Yi5tb3VzZVByZXNzZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29udG91Y2htb3ZlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3VwZGF0ZVRvdWNoQ29vcmRzKGEpLHRoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoTW92ZWQ/ITE9PT1iLnRvdWNoTW92ZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlRHJhZ2dlZCYmITE9PT1iLm1vdXNlRHJhZ2dlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb250b3VjaGVuZD1mdW5jdGlvbihhKXt0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlSXNQcmVzc2VkXCIsITEpLHRoaXMuX3VwZGF0ZVRvdWNoQ29vcmRzKGEpLHRoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKTt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoRW5kZWQ/ITE9PT1iLnRvdWNoRW5kZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlUmVsZWFzZWQmJiExPT09Yi5tb3VzZVJlbGVhc2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhKXt2YXIgYj0zLjUqYXwwO2lmKGI9YjwxPzE6YjwyNDg/YjoyNDgsZyE9PWIpe2c9YixoPTErZzw8MSxpPW5ldyBJbnQzMkFycmF5KGgpLGo9bmV3IEFycmF5KGgpO2Zvcih2YXIgYz0wO2M8aDtjKyspaltjXT1uZXcgSW50MzJBcnJheSgyNTYpO2Zvcih2YXIgZCxlLGYsayxsPTEsbT1iLTE7bDxiO2wrKyl7aVtiK2xdPWlbbV09ZT1tKm0sZj1qW2IrbF0saz1qW20tLV07Zm9yKHZhciBuPTA7bjwyNTY7bisrKWZbbl09a1tuXT1lKm59ZD1pW2JdPWIqYixmPWpbYl07Zm9yKHZhciBvPTA7bzwyNTY7bysrKWZbb109ZCpvfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPWYuX3RvUGl4ZWxzKGEpLGU9YS53aWR0aCxrPWEuaGVpZ2h0LGw9ZSprLG09bmV3IEludDMyQXJyYXkobCksbj0wO248bDtuKyspbVtuXT1mLl9nZXRBUkdCKGMsbik7dmFyIG8scCxxLHIscyx0LHUsdix3LHgseT1uZXcgSW50MzJBcnJheShsKSx6PW5ldyBJbnQzMkFycmF5KGwpLEE9bmV3IEludDMyQXJyYXkobCksQj1uZXcgSW50MzJBcnJheShsKSxDPTA7ZChiKTt2YXIgRCxFLEYsRztmb3IoRT0wO0U8aztFKyspe2ZvcihEPTA7RDxlO0QrKyl7aWYocj1xPXA9cz1vPTAsKHQ9RC1nKTwwKXg9LXQsdD0wO2Vsc2V7aWYodD49ZSlicmVhazt4PTB9Zm9yKEY9eDtGPGgmJiEodD49ZSk7RisrKXt2YXIgSD1tW3QrQ107Rz1qW0ZdLHMrPUdbKC0xNjc3NzIxNiZIKT4+PjI0XSxwKz1HWygxNjcxMTY4MCZIKT4+MTZdLHErPUdbKDY1MjgwJkgpPj44XSxyKz1HWzI1NSZIXSxvKz1pW0ZdLHQrK311PUMrRCx5W3VdPXMvbyx6W3VdPXAvbyxBW3VdPXEvbyxCW3VdPXIvb31DKz1lfWZvcihDPTAsdj0tZyx3PXYqZSxFPTA7RTxrO0UrKyl7Zm9yKEQ9MDtEPGU7RCsrKXtpZihyPXE9cD1zPW89MCx2PDApeD11PS12LHQ9RDtlbHNle2lmKHY+PWspYnJlYWs7eD0wLHU9dix0PUQrd31mb3IoRj14O0Y8aCYmISh1Pj1rKTtGKyspRz1qW0ZdLHMrPUdbeVt0XV0scCs9R1t6W3RdXSxxKz1HW0FbdF1dLHIrPUdbQlt0XV0sbys9aVtGXSx1KyssdCs9ZTttW0QrQ109cy9vPDwyNHxwL288PDE2fHEvbzw8OHxyL299Qys9ZSx3Kz1lLHYrK31mLl9zZXRQaXhlbHMoYyxtKX12YXIgZj17fTtmLl90b1BpeGVscz1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEltYWdlRGF0YT9hLmRhdGE6YS5nZXRDb250ZXh0KFwiMmRcIikuZ2V0SW1hZ2VEYXRhKDAsMCxhLndpZHRoLGEuaGVpZ2h0KS5kYXRhfSxmLl9nZXRBUkdCPWZ1bmN0aW9uKGEsYil7dmFyIGM9NCpiO3JldHVybiBhW2MrM108PDI0JjQyNzgxOTAwODB8YVtjXTw8MTYmMTY3MTE2ODB8YVtjKzFdPDw4JjY1MjgwfDI1NSZhW2MrMl19LGYuX3NldFBpeGVscz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspYz00KmQsYVtjKzBdPSgxNjcxMTY4MCZiW2RdKT4+PjE2LGFbYysxXT0oNjUyODAmYltkXSk+Pj44LGFbYysyXT0yNTUmYltkXSxhW2MrM109KDQyNzgxOTAwODAmYltkXSk+Pj4yNH0sZi5fdG9JbWFnZURhdGE9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBJbWFnZURhdGE/YTphLmdldENvbnRleHQoXCIyZFwiKS5nZXRJbWFnZURhdGEoMCwwLGEud2lkdGgsYS5oZWlnaHQpfSxmLl9jcmVhdGVJbWFnZURhdGE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5fdG1wQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksZi5fdG1wQ3R4PWYuX3RtcENhbnZhcy5nZXRDb250ZXh0KFwiMmRcIiksdGhpcy5fdG1wQ3R4LmNyZWF0ZUltYWdlRGF0YShhLGIpfSxmLmFwcGx5PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldENvbnRleHQoXCIyZFwiKSxlPWQuZ2V0SW1hZ2VEYXRhKDAsMCxhLndpZHRoLGEuaGVpZ2h0KSxmPWIoZSxjKTtmIGluc3RhbmNlb2YgSW1hZ2VEYXRhP2QucHV0SW1hZ2VEYXRhKGYsMCwwLDAsMCxhLndpZHRoLGEuaGVpZ2h0KTpkLnB1dEltYWdlRGF0YShlLDAsMCwwLDAsYS53aWR0aCxhLmhlaWdodCl9LGYudGhyZXNob2xkPWZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5fdG9QaXhlbHMoYSk7dm9pZCAwPT09YiYmKGI9LjUpO2Zvcih2YXIgZD1NYXRoLmZsb29yKDI1NSpiKSxlPTA7ZTxjLmxlbmd0aDtlKz00KXt2YXIgZyxoPWNbZV0saT1jW2UrMV0saj1jW2UrMl0saz0uMjEyNipoKy43MTUyKmkrLjA3MjIqajtnPWs+PWQ/MjU1OjAsY1tlXT1jW2UrMV09Y1tlKzJdPWd9fSxmLmdyYXk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWYuX3RvUGl4ZWxzKGEpLGM9MDtjPGIubGVuZ3RoO2MrPTQpe3ZhciBkPWJbY10sZT1iW2MrMV0sZz1iW2MrMl0saD0uMjEyNipkKy43MTUyKmUrLjA3MjIqZztiW2NdPWJbYysxXT1iW2MrMl09aH19LGYub3BhcXVlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1mLl90b1BpeGVscyhhKSxjPTA7YzxiLmxlbmd0aDtjKz00KWJbYyszXT0yNTU7cmV0dXJuIGJ9LGYuaW52ZXJ0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1mLl90b1BpeGVscyhhKSxjPTA7YzxiLmxlbmd0aDtjKz00KWJbY109MjU1LWJbY10sYltjKzFdPTI1NS1iW2MrMV0sYltjKzJdPTI1NS1iW2MrMl19LGYucG9zdGVyaXplPWZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5fdG9QaXhlbHMoYSk7aWYoYjwyfHxiPjI1NSl0aHJvdyBuZXcgRXJyb3IoXCJMZXZlbCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAyIGFuZCBsZXNzIHRoYW4gMjU1IGZvciBwb3N0ZXJpemVcIik7Zm9yKHZhciBkPWItMSxlPTA7ZTxjLmxlbmd0aDtlKz00KXt2YXIgZz1jW2VdLGg9Y1tlKzFdLGk9Y1tlKzJdO2NbZV09MjU1KihnKmI+PjgpL2QsY1tlKzFdPTI1NSooaCpiPj44KS9kLGNbZSsyXT0yNTUqKGkqYj4+OCkvZH19LGYuZGlsYXRlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQsZSxnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ9Zi5fdG9QaXhlbHMoYSksdT0wLHY9dC5sZW5ndGg/dC5sZW5ndGgvNDowLHc9bmV3IEludDMyQXJyYXkodik7dTx2Oylmb3IoYj11LGM9dSthLndpZHRoO3U8YzspZD1lPWYuX2dldEFSR0IodCx1KSxpPXUtMSxoPXUrMSxqPXUtYS53aWR0aCxrPXUrYS53aWR0aCxpPGImJihpPXUpLGg+PWMmJihoPXUpLGo8MCYmKGo9MCksaz49diYmKGs9dSksbj1mLl9nZXRBUkdCKHQsaiksbT1mLl9nZXRBUkdCKHQsaSksbz1mLl9nZXRBUkdCKHQsayksbD1mLl9nZXRBUkdCKHQsaCksZz03NyooZD4+MTYmMjU1KSsxNTEqKGQ+PjgmMjU1KSsyOCooMjU1JmQpLHE9NzcqKG0+PjE2JjI1NSkrMTUxKihtPj44JjI1NSkrMjgqKDI1NSZtKSxwPTc3KihsPj4xNiYyNTUpKzE1MSoobD4+OCYyNTUpKzI4KigyNTUmbCkscj03Nyoobj4+MTYmMjU1KSsxNTEqKG4+PjgmMjU1KSsyOCooMjU1Jm4pLHM9NzcqKG8+PjE2JjI1NSkrMTUxKihvPj44JjI1NSkrMjgqKDI1NSZvKSxxPmcmJihlPW0sZz1xKSxwPmcmJihlPWwsZz1wKSxyPmcmJihlPW4sZz1yKSxzPmcmJihlPW8sZz1zKSx3W3UrK109ZTtmLl9zZXRQaXhlbHModCx3KX0sZi5lcm9kZT1mdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0PWYuX3RvUGl4ZWxzKGEpLHU9MCx2PXQubGVuZ3RoP3QubGVuZ3RoLzQ6MCx3PW5ldyBJbnQzMkFycmF5KHYpO3U8djspZm9yKGI9dSxjPXUrYS53aWR0aDt1PGM7KWQ9ZT1mLl9nZXRBUkdCKHQsdSksaT11LTEsaD11KzEsaj11LWEud2lkdGgsaz11K2Eud2lkdGgsaTxiJiYoaT11KSxoPj1jJiYoaD11KSxqPDAmJihqPTApLGs+PXYmJihrPXUpLG49Zi5fZ2V0QVJHQih0LGopLG09Zi5fZ2V0QVJHQih0LGkpLG89Zi5fZ2V0QVJHQih0LGspLGw9Zi5fZ2V0QVJHQih0LGgpLGc9NzcqKGQ+PjE2JjI1NSkrMTUxKihkPj44JjI1NSkrMjgqKDI1NSZkKSxxPTc3KihtPj4xNiYyNTUpKzE1MSoobT4+OCYyNTUpKzI4KigyNTUmbSkscD03NyoobD4+MTYmMjU1KSsxNTEqKGw+PjgmMjU1KSsyOCooMjU1JmwpLHI9NzcqKG4+PjE2JjI1NSkrMTUxKihuPj44JjI1NSkrMjgqKDI1NSZuKSxzPTc3KihvPj4xNiYyNTUpKzE1MSoobz4+OCYyNTUpKzI4KigyNTUmbykscTxnJiYoZT1tLGc9cSkscDxnJiYoZT1sLGc9cCkscjxnJiYoZT1uLGc9ciksczxnJiYoZT1vLGc9cyksd1t1KytdPWU7Zi5fc2V0UGl4ZWxzKHQsdyl9O3ZhciBnLGgsaSxqO2YuYmx1cj1mdW5jdGlvbihhLGIpe2UoYSxiKX0sYi5leHBvcnRzPWZ9LHt9XSw0MzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1bXTtkLnByb3RvdHlwZS5jcmVhdGVJbWFnZT1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVJbWFnZVwiLGFyZ3VtZW50cyksbmV3IGQuSW1hZ2UoYSxiKX0sZC5wcm90b3R5cGUuc2F2ZUNhbnZhcz1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVDYW52YXNcIixhcmd1bWVudHMpO3ZhciBhLGIsYyxlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTthcmd1bWVudHNbMF1pbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50PyhhPWFyZ3VtZW50c1swXSxlLnNoaWZ0KCkpOmFyZ3VtZW50c1swXWluc3RhbmNlb2YgZC5FbGVtZW50PyhhPWFyZ3VtZW50c1swXS5lbHQsZS5zaGlmdCgpKTphPXRoaXMuX2N1ckVsZW1lbnQmJnRoaXMuX2N1ckVsZW1lbnQuZWx0LGUubGVuZ3RoPj0xJiYoYj1lWzBdKSxlLmxlbmd0aD49MiYmKGM9ZVsxXSksYz1jfHxkLnByb3RvdHlwZS5fY2hlY2tGaWxlRXh0ZW5zaW9uKGIsYylbMV18fFwicG5nXCI7dmFyIGY7c3dpdGNoKGMpe2RlZmF1bHQ6Zj1cImltYWdlL3BuZ1wiO2JyZWFrO2Nhc2VcImpwZWdcIjpjYXNlXCJqcGdcIjpmPVwiaW1hZ2UvanBlZ1wifWEudG9CbG9iKGZ1bmN0aW9uKGEpe2QucHJvdG90eXBlLmRvd25sb2FkRmlsZShhLGIsYyl9LGYpfSxkLnByb3RvdHlwZS5zYXZlRnJhbWVzPWZ1bmN0aW9uKGEsYixjLGYsZyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZUZyYW1lc1wiLGFyZ3VtZW50cyk7dmFyIGg9Y3x8MztoPWQucHJvdG90eXBlLmNvbnN0cmFpbihoLDAsMTUpLGgqPTFlMzt2YXIgaT1mfHwxNTtpPWQucHJvdG90eXBlLmNvbnN0cmFpbihpLDAsMjIpO3ZhciBqPTAsaz1kLnByb3RvdHlwZS5fbWFrZUZyYW1lLGw9dGhpcy5fY3VyRWxlbWVudC5lbHQsbT1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2soYStqLGIsbCksaisrfSwxZTMvaSk7c2V0VGltZW91dChmdW5jdGlvbigpe2lmKGNsZWFySW50ZXJ2YWwobSksZylnKGUpO2Vsc2UgZm9yKHZhciBhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBiPWVbYV07ZC5wcm90b3R5cGUuZG93bmxvYWRGaWxlKGIuaW1hZ2VEYXRhLGIuZmlsZW5hbWUsYi5leHQpfWU9W119LGgrLjAxKX0sZC5wcm90b3R5cGUuX21ha2VGcmFtZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7ZD10aGlzP3RoaXMuX2N1ckVsZW1lbnQuZWx0OmM7dmFyIGY7aWYoYilzd2l0Y2goYi50b0xvd2VyQ2FzZSgpKXtjYXNlXCJwbmdcIjpmPVwiaW1hZ2UvcG5nXCI7YnJlYWs7Y2FzZVwianBlZ1wiOmNhc2VcImpwZ1wiOmY9XCJpbWFnZS9qcGVnXCI7YnJlYWs7ZGVmYXVsdDpmPVwiaW1hZ2UvcG5nXCJ9ZWxzZSBiPVwicG5nXCIsZj1cImltYWdlL3BuZ1wiO3ZhciBnPWQudG9EYXRhVVJMKGYpO2c9Zy5yZXBsYWNlKGYsXCJpbWFnZS9vY3RldC1zdHJlYW1cIik7dmFyIGg9e307aC5pbWFnZURhdGE9ZyxoLmZpbGVuYW1lPWEsaC5leHQ9YixlLnB1c2goaCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQ0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhPjAmJmE8Yj9hOmJ9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKSxmPWEoXCIuL2ZpbHRlcnNcIiksZz1hKFwiLi4vY29yZS9oZWxwZXJzXCIpLGg9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksZS5wcm90b3R5cGUubG9hZEltYWdlPWZ1bmN0aW9uKGEsYixjKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkSW1hZ2VcIixhcmd1bWVudHMpO3ZhciBkPW5ldyBJbWFnZSxmPW5ldyBlLkltYWdlKDEsMSx0aGlzKSxnPXRoaXM7cmV0dXJuIGQub25sb2FkPWZ1bmN0aW9uKCl7Zi53aWR0aD1mLmNhbnZhcy53aWR0aD1kLndpZHRoLGYuaGVpZ2h0PWYuY2FudmFzLmhlaWdodD1kLmhlaWdodCxmLmRyYXdpbmdDb250ZXh0LmRyYXdJbWFnZShkLDAsMCksZi5tb2RpZmllZD0hMCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiJiZiKGYpLGcuX2RlY3JlbWVudFByZWxvYWQoKX0sZC5vbmVycm9yPWZ1bmN0aW9uKGEpe2UuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcigwLGQuc3JjKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiZjKGEpfSwwIT09YS5pbmRleE9mKFwiZGF0YTppbWFnZS9cIikmJihkLmNyb3NzT3JpZ2luPVwiQW5vbnltb3VzXCIpLGQuc3JjPWEsZn0sZS5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oYSxiLGMsZixoLGksaixrLGwpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImltYWdlXCIsYXJndW1lbnRzKTt2YXIgbT1hLndpZHRoLG49YS5oZWlnaHQ7YS5lbHQmJmEuZWx0LnZpZGVvV2lkdGgmJiFhLmNhbnZhcyYmKG09YS5lbHQudmlkZW9XaWR0aCxuPWEuZWx0LnZpZGVvSGVpZ2h0KTt2YXIgbz1iLHA9YyxxPWZ8fG0scj1ofHxuLHM9aXx8MCx0PWp8fDAsdT1rfHxtLHY9bHx8bjt1PWQodSxtKSx2PWQodixuKTt2YXIgdz0xO2EuZWx0JiYhYS5jYW52YXMmJmEuZWx0LnN0eWxlLndpZHRoJiYodz1hLmVsdC52aWRlb1dpZHRoJiYhZj9hLmVsdC52aWRlb1dpZHRoOmEuZWx0LndpZHRoLHcvPXBhcnNlSW50KGEuZWx0LnN0eWxlLndpZHRoLDEwKSkscyo9dyx0Kj13LHYqPXcsdSo9dzt2YXIgeD1nLm1vZGVBZGp1c3QobyxwLHEscix0aGlzLl9yZW5kZXJlci5faW1hZ2VNb2RlKTt0aGlzLl9yZW5kZXJlci5pbWFnZShhLHMsdCx1LHYseC54LHgueSx4LncseC5oKX0sZS5wcm90b3R5cGUudGludD1mdW5jdGlvbigpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRpbnRcIixhcmd1bWVudHMpO3ZhciBhPXRoaXMuY29sb3IuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX3JlbmRlcmVyLl90aW50PWEubGV2ZWxzfSxlLnByb3RvdHlwZS5ub1RpbnQ9ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdGludD1udWxsfSxlLnByb3RvdHlwZS5fZ2V0VGludGVkSW1hZ2VDYW52YXM9ZnVuY3Rpb24oYSl7aWYoIWEuY2FudmFzKXJldHVybiBhO3ZhciBiPWYuX3RvUGl4ZWxzKGEuY2FudmFzKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7Yy53aWR0aD1hLmNhbnZhcy53aWR0aCxjLmhlaWdodD1hLmNhbnZhcy5oZWlnaHQ7Zm9yKHZhciBkPWMuZ2V0Q29udGV4dChcIjJkXCIpLGU9ZC5jcmVhdGVJbWFnZURhdGEoYS5jYW52YXMud2lkdGgsYS5jYW52YXMuaGVpZ2h0KSxnPWUuZGF0YSxoPTA7aDxiLmxlbmd0aDtoKz00KXt2YXIgaT1iW2hdLGo9YltoKzFdLGs9YltoKzJdLGw9YltoKzNdO2dbaF09aSp0aGlzLl9yZW5kZXJlci5fdGludFswXS8yNTUsZ1toKzFdPWoqdGhpcy5fcmVuZGVyZXIuX3RpbnRbMV0vMjU1LGdbaCsyXT1rKnRoaXMuX3JlbmRlcmVyLl90aW50WzJdLzI1NSxnW2grM109bCp0aGlzLl9yZW5kZXJlci5fdGludFszXS8yNTV9cmV0dXJuIGQucHV0SW1hZ2VEYXRhKGUsMCwwKSxjfSxlLnByb3RvdHlwZS5pbWFnZU1vZGU9ZnVuY3Rpb24oYSl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaW1hZ2VNb2RlXCIsYXJndW1lbnRzKSxhIT09aC5DT1JORVImJmEhPT1oLkNPUk5FUlMmJmEhPT1oLkNFTlRFUnx8KHRoaXMuX3JlbmRlcmVyLl9pbWFnZU1vZGU9YSl9LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9jb3JlL2hlbHBlcnNcIjoyMSxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9maWx0ZXJzXCI6NDJ9XSw0NTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi9maWx0ZXJzXCIpO2QuSW1hZ2U9ZnVuY3Rpb24oYSxiKXt0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yix0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaGVpZ2h0LHRoaXMuZHJhd2luZ0NvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLHRoaXMuX3BpeGVsRGVuc2l0eT0xLHRoaXMuX21vZGlmaWVkPSExLHRoaXMuX3BpeGVsc0RpcnR5PSEwLHRoaXMucGl4ZWxzPVtdfSxkLkltYWdlLnByb3RvdHlwZS5fc2V0UHJvcGVydHk9ZnVuY3Rpb24oYSxiKXt0aGlzW2FdPWIsdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmxvYWRQaXhlbHM9ZnVuY3Rpb24oKXtkLlJlbmRlcmVyMkQucHJvdG90eXBlLmxvYWRQaXhlbHMuY2FsbCh0aGlzKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUudXBkYXRlUGl4ZWxzPWZ1bmN0aW9uKGEsYixjLGUpe2QuUmVuZGVyZXIyRC5wcm90b3R5cGUudXBkYXRlUGl4ZWxzLmNhbGwodGhpcyxhLGIsYyxlKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEsYixjLGUpe3JldHVybiBkLlJlbmRlcmVyMkQucHJvdG90eXBlLmdldC5jYWxsKHRoaXMsYSxiLGMsZSl9LGQuSW1hZ2UucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7ZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zZXQuY2FsbCh0aGlzLGEsYixjKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGEsYil7MD09PWEmJjA9PT1iPyhhPXRoaXMuY2FudmFzLndpZHRoLGI9dGhpcy5jYW52YXMuaGVpZ2h0KTowPT09YT9hPXRoaXMuY2FudmFzLndpZHRoKmIvdGhpcy5jYW52YXMuaGVpZ2h0OjA9PT1iJiYoYj10aGlzLmNhbnZhcy5oZWlnaHQqYS90aGlzLmNhbnZhcy53aWR0aCksYT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihiKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Mud2lkdGg9YSxjLmhlaWdodD1iLGMuZ2V0Q29udGV4dChcIjJkXCIpLmRyYXdJbWFnZSh0aGlzLmNhbnZhcywwLDAsdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0LDAsMCxjLndpZHRoLGMuaGVpZ2h0KSx0aGlzLmNhbnZhcy53aWR0aD10aGlzLndpZHRoPWEsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaGVpZ2h0PWIsdGhpcy5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoYywwLDAsYSxiLDAsMCxhLGIpLHRoaXMucGl4ZWxzLmxlbmd0aD4wJiZ0aGlzLmxvYWRQaXhlbHMoKSx0aGlzLnNldE1vZGlmaWVkKCEwKSx0aGlzLl9waXhlbHNEaXJ0eT0hMH0sZC5JbWFnZS5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhLGIsYyxlLGYsZyxoLGksajtpZig5PT09YXJndW1lbnRzLmxlbmd0aClhPWFyZ3VtZW50c1swXSxiPWFyZ3VtZW50c1sxXSxjPWFyZ3VtZW50c1syXSxlPWFyZ3VtZW50c1szXSxmPWFyZ3VtZW50c1s0XSxnPWFyZ3VtZW50c1s1XSxoPWFyZ3VtZW50c1s2XSxpPWFyZ3VtZW50c1s3XSxqPWFyZ3VtZW50c1s4XTtlbHNle2lmKDghPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlNpZ25hdHVyZSBub3Qgc3VwcG9ydGVkXCIpO2E9dGhpcyxiPWFyZ3VtZW50c1swXSxjPWFyZ3VtZW50c1sxXSxlPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXSxnPWFyZ3VtZW50c1s0XSxoPWFyZ3VtZW50c1s1XSxpPWFyZ3VtZW50c1s2XSxqPWFyZ3VtZW50c1s3XX1kLlJlbmRlcmVyMkQuX2NvcHlIZWxwZXIodGhpcyxhLGIsYyxlLGYsZyxoLGksaiksdGhpcy5fcGl4ZWxzRGlydHk9ITB9LGQuSW1hZ2UucHJvdG90eXBlLm1hc2s9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9dGhpcyk7dmFyIGI9dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24sYz0xO2EgaW5zdGFuY2VvZiBkLlJlbmRlcmVyJiYoYz1hLl9wSW5zdC5fcGl4ZWxEZW5zaXR5KTt2YXIgZT1bYSwwLDAsYyphLndpZHRoLGMqYS5oZWlnaHQsMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHRdO3RoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVwiZGVzdGluYXRpb24taW5cIixkLkltYWdlLnByb3RvdHlwZS5jb3B5LmFwcGx5KHRoaXMsZSksdGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249Yix0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKGEsYil7ZS5hcHBseSh0aGlzLmNhbnZhcyxlW2EudG9Mb3dlckNhc2UoKV0sYiksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmJsZW5kPWZ1bmN0aW9uKCl7ZC5wcm90b3R5cGUuYmxlbmQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5zZXRNb2RpZmllZD1mdW5jdGlvbihhKXt0aGlzLl9tb2RpZmllZD1hfSxkLkltYWdlLnByb3RvdHlwZS5pc01vZGlmaWVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGlmaWVkfSxkLkltYWdlLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKGEsYil7ZC5wcm90b3R5cGUuc2F2ZUNhbnZhcyh0aGlzLmNhbnZhcyxhLGIpfSxiLmV4cG9ydHM9ZC5JbWFnZX0se1wiLi4vY29yZS9tYWluXCI6MjQsXCIuL2ZpbHRlcnNcIjo0Mn1dLDQ2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuL2ZpbHRlcnNcIik7YShcIi4uL2NvbG9yL3A1LkNvbG9yXCIpLGQucHJvdG90eXBlLnBpeGVscz1bXSxkLnByb3RvdHlwZS5ibGVuZD1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJsZW5kXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlcj90aGlzLl9yZW5kZXJlci5ibGVuZC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpOmQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYmxlbmQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29weVwiLGFyZ3VtZW50cyksZC5SZW5kZXJlcjJELnByb3RvdHlwZS5jb3B5LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbihhLGIpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImZpbHRlclwiLGFyZ3VtZW50cyksdm9pZCAwIT09dGhpcy5jYW52YXM/ZS5hcHBseSh0aGlzLmNhbnZhcyxlW2EudG9Mb3dlckNhc2UoKV0sYik6ZS5hcHBseSh0aGlzLmVsdCxlW2EudG9Mb3dlckNhc2UoKV0sYil9LGQucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZ2V0KGEsYixjLGQpfSxkLnByb3RvdHlwZS5sb2FkUGl4ZWxzPWZ1bmN0aW9uKCl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZFBpeGVsc1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIubG9hZFBpeGVscygpfSxkLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3JlbmRlcmVyLnNldChhLGIsYyl9LGQucHJvdG90eXBlLnVwZGF0ZVBpeGVscz1mdW5jdGlvbihhLGIsYyxlKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ1cGRhdGVQaXhlbHNcIixhcmd1bWVudHMpLDAhPT10aGlzLnBpeGVscy5sZW5ndGgmJnRoaXMuX3JlbmRlcmVyLnVwZGF0ZVBpeGVscyhhLGIsYyxlKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvbG9yL3A1LkNvbG9yXCI6MTYsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vZmlsdGVyc1wiOjQyfV0sNDc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7dmFyIGM9e307aWYodm9pZCAwPT09KGI9Ynx8W10pKWZvcih2YXIgZD0wO2Q8YS5sZW5ndGg7ZCsrKWJbZC50b1N0cmluZygpXT1kO2Zvcih2YXIgZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1iW2VdLGc9YVtlXTtjW2ZdPWd9cmV0dXJuIGN9ZnVuY3Rpb24gZShhKXt2YXIgYj1uZXcgaS5YTUwsYz1hLmNoaWxkTm9kZXM7aWYoYyYmYy5sZW5ndGgpe2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZj1lKGNbZF0pO2IuYWRkQ2hpbGQoZil9Yi5zZXROYW1lKGEubm9kZU5hbWUpLGIuX3NldENvbnQoYS50ZXh0Q29udGVudCksYi5fc2V0QXR0cmlidXRlcyhhKTtmb3IodmFyIGc9MDtnPGIuY2hpbGRyZW4ubGVuZ3RoO2crKyliLmNoaWxkcmVuW2ddLnBhcmVudD1iO3JldHVybiBifXJldHVybiBiLnNldE5hbWUoYS5ub2RlTmFtZSksYi5fc2V0Q29udChhLnRleHRDb250ZW50KSxiLl9zZXRBdHRyaWJ1dGVzKGEpLGJ9ZnVuY3Rpb24gZihhKXtyZXR1cm4gYS5yZXBsYWNlKC8mL2csXCImYW1wO1wiKS5yZXBsYWNlKC88L2csXCImbHQ7XCIpLnJlcGxhY2UoLz4vZyxcIiZndDtcIikucmVwbGFjZSgvXCIvZyxcIiZxdW90O1wiKS5yZXBsYWNlKC8nL2csXCImIzAzOTtcIil9ZnVuY3Rpb24gZyhhLGIpe2ImJiEwIT09YiYmXCJ0cnVlXCIhPT1ifHwoYj1cIlwiKSxhfHwoYT1cInVudGl0bGVkXCIpO3ZhciBjPVwiXCI7cmV0dXJuIGEmJmEuaW5kZXhPZihcIi5cIik+LTEmJihjPWEuc3BsaXQoXCIuXCIpLnBvcCgpKSxiJiZjIT09YiYmKGM9YixhPWErXCIuXCIrYyksW2EsY119ZnVuY3Rpb24gaChhKXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEudGFyZ2V0KX12YXIgaT1hKFwiLi4vY29yZS9tYWluXCIpO2EoXCJ3aGF0d2ctZmV0Y2hcIiksYShcImVzNi1wcm9taXNlXCIpLnBvbHlmaWxsKCk7dmFyIGo9YShcImZldGNoLWpzb25wXCIpO2EoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksaS5wcm90b3R5cGUubG9hZEpTT049ZnVuY3Rpb24oKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkSlNPTlwiLGFyZ3VtZW50cyk7Zm9yKHZhciBhLGIsYyxkPWFyZ3VtZW50c1swXSxlPXt9LGY9XCJqc29uXCIsZz0xO2c8YXJndW1lbnRzLmxlbmd0aDtnKyspe3ZhciBoPWFyZ3VtZW50c1tnXTtcInN0cmluZ1wiPT10eXBlb2YgaD9cImpzb25wXCIhPT1oJiZcImpzb25cIiE9PWh8fChmPWgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGg/YT9iPWg6YT1oOlwib2JqZWN0XCI9PXR5cGVvZiBoJiZoLmhhc093blByb3BlcnR5KFwianNvbnBDYWxsYmFja1wiKSYmKGY9XCJqc29ucFwiLGM9aCl9dmFyIGo9dGhpcztyZXR1cm4gdGhpcy5odHRwRG8oZCxcIkdFVFwiLGMsZixmdW5jdGlvbihiKXtmb3IodmFyIGMgaW4gYillW2NdPWJbY107dm9pZCAwIT09YSYmYShiKSxqLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGEpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig1LGQpLCFiKXRocm93IGE7YihhKX0pLGV9LGkucHJvdG90eXBlLmxvYWRTdHJpbmdzPWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZFN0cmluZ3NcIixhcmd1bWVudHMpO2Zvcih2YXIgYSxiLGM9W10sZD0xO2Q8YXJndW1lbnRzLmxlbmd0aDtkKyspe3ZhciBlPWFyZ3VtZW50c1tkXTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYodm9pZCAwPT09YT9hPWU6dm9pZCAwPT09YiYmKGI9ZSkpfXZhciBmPXRoaXM7cmV0dXJuIGkucHJvdG90eXBlLmh0dHBEby5jYWxsKHRoaXMsYXJndW1lbnRzWzBdLFwiR0VUXCIsXCJ0ZXh0XCIsZnVuY3Rpb24oYil7dmFyIGQ9Yi5yZXBsYWNlKC9cXHJcXG4vZyxcIlxcclwiKS5yZXBsYWNlKC9cXG4vZyxcIlxcclwiKS5zcGxpdCgvXFxyLyk7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYyxkKSx2b2lkIDAhPT1hJiZhKGMpLGYuX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYSl7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDMsYXJndW1lbnRzWzBdKSwhYil0aHJvdyBhO2IoYSl9KSxjfSxpLnByb3RvdHlwZS5sb2FkVGFibGU9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlPVtdLGY9ITEsZz1hLnN1YnN0cmluZyhhLmxhc3RJbmRleE9mKFwiLlwiKSsxLGEubGVuZ3RoKSxoPVwiLFwiLGo9ITE7XCJ0c3ZcIj09PWcmJihoPVwiXFx0XCIpO2Zvcih2YXIgaz0xO2s8YXJndW1lbnRzLmxlbmd0aDtrKyspaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYXJndW1lbnRzW2tdKXZvaWQgMD09PWI/Yj1hcmd1bWVudHNba106dm9pZCAwPT09YyYmKGM9YXJndW1lbnRzW2tdKTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBhcmd1bWVudHNba10paWYoZS5wdXNoKGFyZ3VtZW50c1trXSksXCJoZWFkZXJcIj09PWFyZ3VtZW50c1trXSYmKGY9ITApLFwiY3N2XCI9PT1hcmd1bWVudHNba10pe2lmKGopdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNldCBtdWx0aXBsZSBzZXBhcmF0b3IgdHlwZXMuXCIpO2g9XCIsXCIsaj0hMH1lbHNlIGlmKFwidHN2XCI9PT1hcmd1bWVudHNba10pe2lmKGopdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNldCBtdWx0aXBsZSBzZXBhcmF0b3IgdHlwZXMuXCIpO2g9XCJcXHRcIixqPSEwfXZhciBsPW5ldyBpLlRhYmxlLG09dGhpcztyZXR1cm4gdGhpcy5odHRwRG8oYSxcIkdFVFwiLFwidGFibGVcIixmdW5jdGlvbihhKXtmb3IodmFyIGMsZT17fSxnPTAsaj0xLG49MixvPTQscD0nXCInLHE9XCJcXHJcIixyPVwiXFxuXCIscz1bXSx0PTAsdT1udWxsLHY9ZnVuY3Rpb24oKXtlLmN1cnJlbnRTdGF0ZT1nLGUudG9rZW49XCJcIn0sdz1mdW5jdGlvbigpe3UucHVzaChlLnRva2VuKSx2KCl9LHg9ZnVuY3Rpb24oKXtlLmVzY2FwZWQ9ITEsdT1bXSx2KCl9LHk9ZnVuY3Rpb24oKXtlLmN1cnJlbnRTdGF0ZT1vLHMucHVzaCh1KSx1PW51bGx9Ozspe2lmKG51bGw9PShjPWFbdCsrXSkpe2lmKGUuZXNjYXBlZCl0aHJvdyBuZXcgRXJyb3IoXCJVbmNsb3NlZCBxdW90ZSBpbiBmaWxlLlwiKTtpZih1KXt3KCkseSgpO2JyZWFrfX1pZihudWxsPT09dSYmeCgpLGUuY3VycmVudFN0YXRlPT09Zyl7aWYoYz09PXApe2UuZXNjYXBlZD0hMCxlLmN1cnJlbnRTdGF0ZT1qO2NvbnRpbnVlfWUuY3VycmVudFN0YXRlPWp9aWYoZS5jdXJyZW50U3RhdGU9PT1qJiZlLmVzY2FwZWQpaWYoYz09PXApYVt0XT09PXA/KGUudG9rZW4rPXAsdCsrKTooZS5lc2NhcGVkPSExLGUuY3VycmVudFN0YXRlPW4pO2Vsc2V7aWYoYz09PXEpY29udGludWU7ZS50b2tlbis9Y31lbHNlIGM9PT1xPyhhW3RdPT09ciYmdCsrLHcoKSx5KCkpOmM9PT1yPyh3KCkseSgpKTpjPT09aD93KCk6ZS5jdXJyZW50U3RhdGU9PT1qJiYoZS50b2tlbis9Yyl9aWYoZilsLmNvbHVtbnM9cy5zaGlmdCgpO2Vsc2UgZm9yKGs9MDtrPHNbMF0ubGVuZ3RoO2srKylsLmNvbHVtbnNba109XCJudWxsXCI7dmFyIHo7Zm9yKGs9MDtrPHMubGVuZ3RoO2srKykoMSE9PXNba10ubGVuZ3RofHxcInVuZGVmaW5lZFwiIT09c1trXVswXSYmXCJcIiE9PXNba11bMF0pJiYoej1uZXcgaS5UYWJsZVJvdyx6LmFycj1zW2tdLHoub2JqPWQoc1trXSxsLmNvbHVtbnMpLGwuYWRkUm93KHopKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBiJiZiKGwpLG0uX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYil7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDIsYSksIWMpdGhyb3cgYjtjKGIpfSksbH0saS5wcm90b3R5cGUubG9hZFhNTD1mdW5jdGlvbigpe2Zvcih2YXIgYSxiLGM9e30sZD0xO2Q8YXJndW1lbnRzLmxlbmd0aDtkKyspe3ZhciBlPWFyZ3VtZW50c1tkXTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYodm9pZCAwPT09YT9hPWU6dm9pZCAwPT09YiYmKGI9ZSkpfXZhciBmPXRoaXM7cmV0dXJuIHRoaXMuaHR0cERvKGFyZ3VtZW50c1swXSxcIkdFVFwiLFwieG1sXCIsZnVuY3Rpb24oYil7Zm9yKHZhciBkIGluIGIpY1tkXT1iW2RdO3ZvaWQgMCE9PWEmJmEoYyksZi5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihhKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoMSxhcmd1bWVudHNbMF0pLCFiKXRocm93IGE7YihhKX0pLGN9LGkucHJvdG90eXBlLmxvYWRCeXRlcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9e30sZT10aGlzO3JldHVybiB0aGlzLmh0dHBEbyhhLFwiR0VUXCIsXCJhcnJheUJ1ZmZlclwiLGZ1bmN0aW9uKGEpe2QuYnl0ZXM9bmV3IFVpbnQ4QXJyYXkoYSksXCJmdW5jdGlvblwiPT10eXBlb2YgYiYmYihkKSxlLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGIpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig2LGEpLCFjKXRocm93IGI7YyhiKX0pLGR9LGkucHJvdG90eXBlLmh0dHBHZXQ9ZnVuY3Rpb24oKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJodHRwR2V0XCIsYXJndW1lbnRzKTt2YXIgYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBhLnNwbGljZSgxLDAsXCJHRVRcIiksaS5wcm90b3R5cGUuaHR0cERvLmFwcGx5KHRoaXMsYSl9LGkucHJvdG90eXBlLmh0dHBQb3N0PWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaHR0cFBvc3RcIixhcmd1bWVudHMpO3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGEuc3BsaWNlKDEsMCxcIlBPU1RcIiksaS5wcm90b3R5cGUuaHR0cERvLmFwcGx5KHRoaXMsYSl9LGkucHJvdG90eXBlLmh0dHBEbz1mdW5jdGlvbigpe2Zvcih2YXIgYSxiLGMsZCxmLGc9e30saD0wLGs9XCJ0ZXh0L3BsYWluXCIsbD1hcmd1bWVudHMubGVuZ3RoLTE7bD4wJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhcmd1bWVudHNbbF07bC0tKWgrKzt2YXIgbT1hcmd1bWVudHMubGVuZ3RoLWgsbj1hcmd1bWVudHNbMF07aWYoMj09PW0mJlwic3RyaW5nXCI9PXR5cGVvZiBuJiZcIm9iamVjdFwiPT10eXBlb2YgYXJndW1lbnRzWzFdKWQ9bmV3IFJlcXVlc3Qobixhcmd1bWVudHNbMV0pLGI9YXJndW1lbnRzWzJdLGM9YXJndW1lbnRzWzNdO2Vsc2V7Zm9yKHZhciBvLHA9XCJHRVRcIixxPTE7cTxhcmd1bWVudHMubGVuZ3RoO3ErKyl7dmFyIHI9YXJndW1lbnRzW3FdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiByKVwiR0VUXCI9PT1yfHxcIlBPU1RcIj09PXJ8fFwiUFVUXCI9PT1yfHxcIkRFTEVURVwiPT09cj9wPXI6XCJqc29uXCI9PT1yfHxcImpzb25wXCI9PT1yfHxcImJpbmFyeVwiPT09cnx8XCJhcnJheUJ1ZmZlclwiPT09cnx8XCJ4bWxcIj09PXJ8fFwidGV4dFwiPT09cnx8XCJ0YWJsZVwiPT09cj9hPXI6bz1yO2Vsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIHIpbz1yLnRvU3RyaW5nKCk7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgcilpZihyLmhhc093blByb3BlcnR5KFwianNvbnBDYWxsYmFja1wiKSlmb3IodmFyIHMgaW4gcilnW3NdPXJbc107ZWxzZSBvPUpTT04uc3RyaW5naWZ5KHIpLGs9XCJhcHBsaWNhdGlvbi9qc29uXCI7ZWxzZVwiZnVuY3Rpb25cIj09dHlwZW9mIHImJihiP2M9cjpiPXIpfWQ9bmV3IFJlcXVlc3Qobix7bWV0aG9kOnAsbW9kZTpcImNvcnNcIixib2R5Om8saGVhZGVyczpuZXcgSGVhZGVycyh7XCJDb250ZW50LVR5cGVcIjprfSl9KX1yZXR1cm4gYXx8KGE9LTEhPT1uLmluZGV4T2YoXCJqc29uXCIpP1wianNvblwiOi0xIT09bi5pbmRleE9mKFwieG1sXCIpP1wieG1sXCI6XCJ0ZXh0XCIpLGY9XCJqc29ucFwiPT09YT9qKG4sZyk6ZmV0Y2goZCksZj1mLnRoZW4oZnVuY3Rpb24oYil7aWYoIWIub2spe3ZhciBjPW5ldyBFcnJvcihiLmJvZHkpO3Rocm93IGMuc3RhdHVzPWIuc3RhdHVzLGMub2s9ITEsY312YXIgZD1iLmhlYWRlcnMuZ2V0KFwiY29udGVudC1sZW5ndGhcIik7c3dpdGNoKGQmJmQ+NjRlNiYmaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDcsbiksYSl7Y2FzZVwianNvblwiOmNhc2VcImpzb25wXCI6cmV0dXJuIGIuanNvbigpO2Nhc2VcImJpbmFyeVwiOnJldHVybiBiLmJsb2IoKTtjYXNlXCJhcnJheUJ1ZmZlclwiOnJldHVybiBiLmFycmF5QnVmZmVyKCk7Y2FzZVwieG1sXCI6cmV0dXJuIGIudGV4dCgpLnRoZW4oZnVuY3Rpb24oYSl7cmV0dXJuIGUoKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhhLFwidGV4dC94bWxcIikuZG9jdW1lbnRFbGVtZW50KX0pO2RlZmF1bHQ6cmV0dXJuIGIudGV4dCgpfX0pLGYudGhlbihifHxmdW5jdGlvbigpe30pLGYuY2F0Y2goY3x8Y29uc29sZS5lcnJvciksZn0sd2luZG93LlVSTD13aW5kb3cuVVJMfHx3aW5kb3cud2Via2l0VVJMLGkucHJvdG90eXBlLl9wV3JpdGVycz1bXSxpLnByb3RvdHlwZS5jcmVhdGVXcml0ZXI9ZnVuY3Rpb24oYSxiKXt2YXIgYztmb3IodmFyIGQgaW4gaS5wcm90b3R5cGUuX3BXcml0ZXJzKWlmKGkucHJvdG90eXBlLl9wV3JpdGVyc1tkXS5uYW1lPT09YSlyZXR1cm4gYz1uZXcgaS5QcmludFdyaXRlcihhK3RoaXMubWlsbGlzKCksYiksaS5wcm90b3R5cGUuX3BXcml0ZXJzLnB1c2goYyksYztyZXR1cm4gYz1uZXcgaS5QcmludFdyaXRlcihhLGIpLGkucHJvdG90eXBlLl9wV3JpdGVycy5wdXNoKGMpLGN9LGkuUHJpbnRXcml0ZXI9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO3RoaXMubmFtZT1hLHRoaXMuY29udGVudD1cIlwiLHRoaXMud3JpdGU9ZnVuY3Rpb24oYSl7dGhpcy5jb250ZW50Kz1hfSx0aGlzLnByaW50PWZ1bmN0aW9uKGEpe3RoaXMuY29udGVudCs9YStcIlxcblwifSx0aGlzLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5jb250ZW50PVwiXCJ9LHRoaXMuY2xvc2U9ZnVuY3Rpb24oKXt2YXIgZD1bXTtkLnB1c2godGhpcy5jb250ZW50KSxpLnByb3RvdHlwZS53cml0ZUZpbGUoZCxhLGIpO2Zvcih2YXIgZSBpbiBpLnByb3RvdHlwZS5fcFdyaXRlcnMpaS5wcm90b3R5cGUuX3BXcml0ZXJzW2VdLm5hbWU9PT10aGlzLm5hbWUmJmkucHJvdG90eXBlLl9wV3JpdGVycy5zcGxpY2UoZSwxKTtjLmNsZWFyKCksYz17fX19LGkucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWFyZ3VtZW50cyxlPXRoaXMuX2N1ckVsZW1lbnQuZWx0O2lmKDA9PT1kLmxlbmd0aClyZXR1cm4gdm9pZCBpLnByb3RvdHlwZS5zYXZlQ2FudmFzKGUpO2lmKGRbMF1pbnN0YW5jZW9mIGkuUmVuZGVyZXJ8fGRbMF1pbnN0YW5jZW9mIGkuR3JhcGhpY3MpcmV0dXJuIHZvaWQgaS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhkWzBdLmVsdCxkWzFdLGRbMl0pO2lmKDE9PT1kLmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIGRbMF0paS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhlLGRbMF0pO2Vsc2V7c3dpdGNoKGcoZFsxXSxkWzJdKVsxXSl7Y2FzZVwianNvblwiOnJldHVybiB2b2lkIGkucHJvdG90eXBlLnNhdmVKU09OKGRbMF0sZFsxXSxkWzJdKTtjYXNlXCJ0eHRcIjpyZXR1cm4gdm9pZCBpLnByb3RvdHlwZS5zYXZlU3RyaW5ncyhkWzBdLGRbMV0sZFsyXSk7ZGVmYXVsdDpkWzBdaW5zdGFuY2VvZiBBcnJheT9pLnByb3RvdHlwZS5zYXZlU3RyaW5ncyhkWzBdLGRbMV0sZFsyXSk6ZFswXWluc3RhbmNlb2YgaS5UYWJsZT9pLnByb3RvdHlwZS5zYXZlVGFibGUoZFswXSxkWzFdLGRbMl0pOmRbMF1pbnN0YW5jZW9mIGkuSW1hZ2U/aS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhkWzBdLmNhbnZhcyxkWzFdKTpkWzBdaW5zdGFuY2VvZiBpLlNvdW5kRmlsZSYmaS5wcm90b3R5cGUuc2F2ZVNvdW5kKGRbMF0sZFsxXSxkWzJdLGRbM10pfX19LGkucHJvdG90eXBlLnNhdmVKU09OPWZ1bmN0aW9uKGEsYixjKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlSlNPTlwiLGFyZ3VtZW50cyk7dmFyIGQ7ZD1jP0pTT04uc3RyaW5naWZ5KGEpOkpTT04uc3RyaW5naWZ5KGEsdm9pZCAwLDIpLHRoaXMuc2F2ZVN0cmluZ3MoZC5zcGxpdChcIlxcblwiKSxiLFwianNvblwiKX0saS5wcm90b3R5cGUuc2F2ZUpTT05PYmplY3Q9aS5wcm90b3R5cGUuc2F2ZUpTT04saS5wcm90b3R5cGUuc2F2ZUpTT05BcnJheT1pLnByb3RvdHlwZS5zYXZlSlNPTixpLnByb3RvdHlwZS5zYXZlU3RyaW5ncz1mdW5jdGlvbihhLGIsYyl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZVN0cmluZ3NcIixhcmd1bWVudHMpO2Zvcih2YXIgZD1jfHxcInR4dFwiLGU9dGhpcy5jcmVhdGVXcml0ZXIoYixkKSxmPTA7ZjxhLmxlbmd0aDtmKyspYS5sZW5ndGgsZS5wcmludChhW2ZdKTtlLmNsb3NlKCksZS5jbGVhcigpfSxpLnByb3RvdHlwZS5zYXZlVGFibGU9ZnVuY3Rpb24oYSxiLGMpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVUYWJsZVwiLGFyZ3VtZW50cyk7dmFyIGQ7ZD12b2lkIDA9PT1jP2Iuc3Vic3RyaW5nKGIubGFzdEluZGV4T2YoXCIuXCIpKzEsYi5sZW5ndGgpOmM7dmFyIGU9dGhpcy5jcmVhdGVXcml0ZXIoYixkKSxnPWEuY29sdW1ucyxoPVwiLFwiO2lmKFwidHN2XCI9PT1kJiYoaD1cIlxcdFwiKSxcImh0bWxcIiE9PWQpe2lmKFwiMFwiIT09Z1swXSl7Zm9yKHZhciBqPTA7ajxnLmxlbmd0aDtqKyspajxnLmxlbmd0aC0xP2Uud3JpdGUoZ1tqXStoKTplLndyaXRlKGdbal0pO2Uud3JpdGUoXCJcXG5cIil9Zm9yKHZhciBrPTA7azxhLnJvd3MubGVuZ3RoO2srKyl7dmFyIGw7Zm9yKGw9MDtsPGEucm93c1trXS5hcnIubGVuZ3RoO2wrKylsPGEucm93c1trXS5hcnIubGVuZ3RoLTE/ZS53cml0ZShhLnJvd3Nba10uYXJyW2xdK2gpOihhLnJvd3MubGVuZ3RoLGUud3JpdGUoYS5yb3dzW2tdLmFycltsXSkpO2Uud3JpdGUoXCJcXG5cIil9fWVsc2V7ZS5wcmludChcIjxodG1sPlwiKSxlLnByaW50KFwiPGhlYWQ+XCIpO3ZhciBtPScgIDxtZXRhIGh0dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50JztpZihtKz0nPVwidGV4dC9odG1sO2NoYXJzZXQ9dXRmLThcIiAvPicsZS5wcmludChtKSxlLnByaW50KFwiPC9oZWFkPlwiKSxlLnByaW50KFwiPGJvZHk+XCIpLGUucHJpbnQoXCIgIDx0YWJsZT5cIiksXCIwXCIhPT1nWzBdKXtlLnByaW50KFwiICAgIDx0cj5cIik7Zm9yKHZhciBuPTA7bjxnLmxlbmd0aDtuKyspe3ZhciBvPWYoZ1tuXSk7ZS5wcmludChcIiAgICAgIDx0ZD5cIitvKSxlLnByaW50KFwiICAgICAgPC90ZD5cIil9ZS5wcmludChcIiAgICA8L3RyPlwiKX1mb3IodmFyIHA9MDtwPGEucm93cy5sZW5ndGg7cCsrKXtlLnByaW50KFwiICAgIDx0cj5cIik7Zm9yKHZhciBxPTA7cTxhLmNvbHVtbnMubGVuZ3RoO3ErKyl7dmFyIHI9YS5yb3dzW3BdLmdldFN0cmluZyhxKSxzPWYocik7ZS5wcmludChcIiAgICAgIDx0ZD5cIitzKSxlLnByaW50KFwiICAgICAgPC90ZD5cIil9ZS5wcmludChcIiAgICA8L3RyPlwiKX1lLnByaW50KFwiICA8L3RhYmxlPlwiKSxlLnByaW50KFwiPC9ib2R5PlwiKSxlLnByaW50KFwiPC9odG1sPlwiKX1lLmNsb3NlKCksZS5jbGVhcigpfSxpLnByb3RvdHlwZS53cml0ZUZpbGU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7aS5wcm90b3R5cGUuX2lzU2FmYXJpKCkmJihkPVwidGV4dC9wbGFpblwiKTt2YXIgZT1uZXcgQmxvYihhLHt0eXBlOmR9KTtpLnByb3RvdHlwZS5kb3dubG9hZEZpbGUoZSxiLGMpfSxpLnByb3RvdHlwZS5kb3dubG9hZEZpbGU9ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWcoYyxkKSxmPWVbMF07aWYoYiBpbnN0YW5jZW9mIEJsb2Ipe3JldHVybiB2b2lkIGEoXCJmaWxlLXNhdmVyXCIpLnNhdmVBcyhiLGYpfXZhciBqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO2lmKGouaHJlZj1iLGouZG93bmxvYWQ9ZixqLm9uY2xpY2s9ZnVuY3Rpb24oYSl7aChhKSxhLnN0b3BQcm9wYWdhdGlvbigpfSxqLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChqKSxpLnByb3RvdHlwZS5faXNTYWZhcmkoKSl7dmFyIGs9XCJIZWxsbywgU2FmYXJpIHVzZXIhIFRvIGRvd25sb2FkIHRoaXMgZmlsZS4uLlxcblwiO2srPVwiMS4gR28gdG8gRmlsZSAtLVxceDNlIFNhdmUgQXMuXFxuXCIsays9JzIuIENob29zZSBcIlBhZ2UgU291cmNlXCIgYXMgdGhlIEZvcm1hdC5cXG4nLGsrPSczLiBOYW1lIGl0IHdpdGggdGhpcyBleHRlbnNpb246IC5cIicrZVsxXSsnXCInLGFsZXJ0KGspfWouY2xpY2soKX0saS5wcm90b3R5cGUuX2NoZWNrRmlsZUV4dGVuc2lvbj1nLGkucHJvdG90eXBlLl9pc1NhZmFyaT1mdW5jdGlvbigpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2luZG93LkhUTUxFbGVtZW50KS5pbmRleE9mKFwiQ29uc3RydWN0b3JcIik+MH0sYi5leHBvcnRzPWl9LHtcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjQsXCJlczYtcHJvbWlzZVwiOjQsXCJmZXRjaC1qc29ucFwiOjUsXCJmaWxlLXNhdmVyXCI6NixcIndoYXR3Zy1mZXRjaFwiOjEyfV0sNDg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuVGFibGU9ZnVuY3Rpb24oYSl7dGhpcy5jb2x1bW5zPVtdLHRoaXMucm93cz1bXX0sZC5UYWJsZS5wcm90b3R5cGUuYWRkUm93PWZ1bmN0aW9uKGEpe3ZhciBiPWF8fG5ldyBkLlRhYmxlUm93O2lmKHZvaWQgMD09PWIuYXJyfHx2b2lkIDA9PT1iLm9iail0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFRhYmxlUm93OiBcIitiKTtyZXR1cm4gYi50YWJsZT10aGlzLHRoaXMucm93cy5wdXNoKGIpLGJ9LGQuVGFibGUucHJvdG90eXBlLnJlbW92ZVJvdz1mdW5jdGlvbihhKXt0aGlzLnJvd3NbYV0udGFibGU9bnVsbDt2YXIgYj10aGlzLnJvd3Muc3BsaWNlKGErMSx0aGlzLnJvd3MubGVuZ3RoKTt0aGlzLnJvd3MucG9wKCksdGhpcy5yb3dzPXRoaXMucm93cy5jb25jYXQoYil9LGQuVGFibGUucHJvdG90eXBlLmdldFJvdz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3dzW2FdfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm93c30sZC5UYWJsZS5wcm90b3R5cGUuZmluZFJvdz1mdW5jdGlvbihhLGIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiKXtmb3IodmFyIGM9MDtjPHRoaXMucm93cy5sZW5ndGg7YysrKWlmKHRoaXMucm93c1tjXS5vYmpbYl09PT1hKXJldHVybiB0aGlzLnJvd3NbY119ZWxzZSBmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKWlmKHRoaXMucm93c1tkXS5hcnJbYl09PT1hKXJldHVybiB0aGlzLnJvd3NbZF07cmV0dXJuIG51bGx9LGQuVGFibGUucHJvdG90eXBlLmZpbmRSb3dzPWZ1bmN0aW9uKGEsYil7dmFyIGM9W107aWYoXCJzdHJpbmdcIj09dHlwZW9mIGIpZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKyl0aGlzLnJvd3NbZF0ub2JqW2JdPT09YSYmYy5wdXNoKHRoaXMucm93c1tkXSk7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMucm93cy5sZW5ndGg7ZSsrKXRoaXMucm93c1tlXS5hcnJbYl09PT1hJiZjLnB1c2godGhpcy5yb3dzW2VdKTtyZXR1cm4gY30sZC5UYWJsZS5wcm90b3R5cGUubWF0Y2hSb3c9ZnVuY3Rpb24oYSxiKXtpZihcIm51bWJlclwiPT10eXBlb2YgYil7Zm9yKHZhciBjPTA7Yzx0aGlzLnJvd3MubGVuZ3RoO2MrKylpZih0aGlzLnJvd3NbY10uYXJyW2JdLm1hdGNoKGEpKXJldHVybiB0aGlzLnJvd3NbY119ZWxzZSBmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKWlmKHRoaXMucm93c1tkXS5vYmpbYl0ubWF0Y2goYSkpcmV0dXJuIHRoaXMucm93c1tkXTtyZXR1cm4gbnVsbH0sZC5UYWJsZS5wcm90b3R5cGUubWF0Y2hSb3dzPWZ1bmN0aW9uKGEsYil7dmFyIGM9W107aWYoXCJudW1iZXJcIj09dHlwZW9mIGIpZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKyl0aGlzLnJvd3NbZF0uYXJyW2JdLm1hdGNoKGEpJiZjLnB1c2godGhpcy5yb3dzW2RdKTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5yb3dzLmxlbmd0aDtlKyspdGhpcy5yb3dzW2VdLm9ialtiXS5tYXRjaChhKSYmYy5wdXNoKHRoaXMucm93c1tlXSk7cmV0dXJuIGN9LGQuVGFibGUucHJvdG90eXBlLmdldENvbHVtbj1mdW5jdGlvbihhKXt2YXIgYj1bXTtpZihcInN0cmluZ1wiPT10eXBlb2YgYSlmb3IodmFyIGM9MDtjPHRoaXMucm93cy5sZW5ndGg7YysrKWIucHVzaCh0aGlzLnJvd3NbY10ub2JqW2FdKTtlbHNlIGZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspYi5wdXNoKHRoaXMucm93c1tkXS5hcnJbYV0pO3JldHVybiBifSxkLlRhYmxlLnByb3RvdHlwZS5jbGVhclJvd3M9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5yb3dzLHRoaXMucm93cz1bXX0sZC5UYWJsZS5wcm90b3R5cGUuYWRkQ29sdW1uPWZ1bmN0aW9uKGEpe3ZhciBiPWF8fG51bGw7dGhpcy5jb2x1bW5zLnB1c2goYil9LGQuVGFibGUucHJvdG90eXBlLmdldENvbHVtbkNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5sZW5ndGh9LGQuVGFibGUucHJvdG90eXBlLmdldFJvd0NvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm93cy5sZW5ndGh9LGQuVGFibGUucHJvdG90eXBlLnJlbW92ZVRva2Vucz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csXCJcXFxcJCZcIil9LGQ9W10sZT0wO2U8YS5sZW5ndGg7ZSsrKWQucHVzaChjKGEuY2hhckF0KGUpKSk7dmFyIGY9bmV3IFJlZ0V4cChkLmpvaW4oXCJ8XCIpLFwiZ1wiKTtpZih2b2lkIDA9PT1iKWZvcih2YXIgZz0wO2c8dGhpcy5jb2x1bW5zLmxlbmd0aDtnKyspZm9yKHZhciBoPTA7aDx0aGlzLnJvd3MubGVuZ3RoO2grKyl7dmFyIGk9dGhpcy5yb3dzW2hdLmFycltnXTtpPWkucmVwbGFjZShmLFwiXCIpLHRoaXMucm93c1toXS5hcnJbZ109aSx0aGlzLnJvd3NbaF0ub2JqW3RoaXMuY29sdW1uc1tnXV09aX1lbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBiKWZvcih2YXIgaj0wO2o8dGhpcy5yb3dzLmxlbmd0aDtqKyspe3ZhciBrPXRoaXMucm93c1tqXS5vYmpbYl07az1rLnJlcGxhY2UoZixcIlwiKSx0aGlzLnJvd3Nbal0ub2JqW2JdPWs7dmFyIGw9dGhpcy5jb2x1bW5zLmluZGV4T2YoYik7dGhpcy5yb3dzW2pdLmFycltsXT1rfWVsc2UgZm9yKHZhciBtPTA7bTx0aGlzLnJvd3MubGVuZ3RoO20rKyl7dmFyIG49dGhpcy5yb3dzW21dLmFycltiXTtuPW4ucmVwbGFjZShmLFwiXCIpLHRoaXMucm93c1ttXS5hcnJbYl09bix0aGlzLnJvd3NbbV0ub2JqW3RoaXMuY29sdW1uc1tiXV09bn19LGQuVGFibGUucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IFJlZ0V4cChcIiBcIixcImdcIik7aWYodm9pZCAwPT09YSlmb3IodmFyIGM9MDtjPHRoaXMuY29sdW1ucy5sZW5ndGg7YysrKWZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspe3ZhciBlPXRoaXMucm93c1tkXS5hcnJbY107ZT1lLnJlcGxhY2UoYixcIlwiKSx0aGlzLnJvd3NbZF0uYXJyW2NdPWUsdGhpcy5yb3dzW2RdLm9ialt0aGlzLmNvbHVtbnNbY11dPWV9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYSlmb3IodmFyIGY9MDtmPHRoaXMucm93cy5sZW5ndGg7ZisrKXt2YXIgZz10aGlzLnJvd3NbZl0ub2JqW2FdO2c9Zy5yZXBsYWNlKGIsXCJcIiksdGhpcy5yb3dzW2ZdLm9ialthXT1nO3ZhciBoPXRoaXMuY29sdW1ucy5pbmRleE9mKGEpO3RoaXMucm93c1tmXS5hcnJbaF09Z31lbHNlIGZvcih2YXIgaT0wO2k8dGhpcy5yb3dzLmxlbmd0aDtpKyspe3ZhciBqPXRoaXMucm93c1tpXS5hcnJbYV07aj1qLnJlcGxhY2UoYixcIlwiKSx0aGlzLnJvd3NbaV0uYXJyW2FdPWosdGhpcy5yb3dzW2ldLm9ialt0aGlzLmNvbHVtbnNbYV1dPWp9fSxkLlRhYmxlLnByb3RvdHlwZS5yZW1vdmVDb2x1bW49ZnVuY3Rpb24oYSl7dmFyIGIsYztcInN0cmluZ1wiPT10eXBlb2YgYT8oYj1hLGM9dGhpcy5jb2x1bW5zLmluZGV4T2YoYSkpOihjPWEsYj10aGlzLmNvbHVtbnNbYV0pO3ZhciBkPXRoaXMuY29sdW1ucy5zcGxpY2UoYysxLHRoaXMuY29sdW1ucy5sZW5ndGgpO3RoaXMuY29sdW1ucy5wb3AoKSx0aGlzLmNvbHVtbnM9dGhpcy5jb2x1bW5zLmNvbmNhdChkKTtmb3IodmFyIGU9MDtlPHRoaXMucm93cy5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLnJvd3NbZV0uYXJyLGc9Zi5zcGxpY2UoYysxLGYubGVuZ3RoKTtmLnBvcCgpLHRoaXMucm93c1tlXS5hcnI9Zi5jb25jYXQoZyksZGVsZXRlIHRoaXMucm93c1tlXS5vYmpbYl19fSxkLlRhYmxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMucm93c1thXS5zZXQoYixjKX0sZC5UYWJsZS5wcm90b3R5cGUuc2V0TnVtPWZ1bmN0aW9uKGEsYixjKXt0aGlzLnJvd3NbYV0uc2V0TnVtKGIsYyl9LGQuVGFibGUucHJvdG90eXBlLnNldFN0cmluZz1mdW5jdGlvbihhLGIsYyl7dGhpcy5yb3dzW2FdLnNldFN0cmluZyhiLGMpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5yb3dzW2FdLmdldChiKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0TnVtPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucm93c1thXS5nZXROdW0oYil9LGQuVGFibGUucHJvdG90eXBlLmdldFN0cmluZz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnJvd3NbYV0uZ2V0U3RyaW5nKGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRPYmplY3Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZD17fSxlPTA7ZTx0aGlzLnJvd3MubGVuZ3RoO2UrKylpZihiPXRoaXMucm93c1tlXS5vYmosXCJzdHJpbmdcIj09dHlwZW9mIGEpe2lmKCEodGhpcy5jb2x1bW5zLmluZGV4T2YoYSk+PTApKXRocm93IG5ldyBFcnJvcignVGhpcyB0YWJsZSBoYXMgbm8gY29sdW1uIG5hbWVkIFwiJythKydcIicpO2M9YlthXSxkW2NdPWJ9ZWxzZSBkW2VdPXRoaXMucm93c1tlXS5vYmo7cmV0dXJuIGR9LGQuVGFibGUucHJvdG90eXBlLmdldEFycmF5PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPVtdLGI9MDtiPHRoaXMucm93cy5sZW5ndGg7YisrKWEucHVzaCh0aGlzLnJvd3NbYl0uYXJyKTtyZXR1cm4gYX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNDk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuVGFibGVSb3c9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkPXt9O2EmJihiPWJ8fFwiLFwiLGM9YS5zcGxpdChiKSk7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWUsZz1jW2VdO2RbZl09Z310aGlzLmFycj1jLHRoaXMub2JqPWQsdGhpcy50YWJsZT1udWxsfSxkLlRhYmxlUm93LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXtpZihcInN0cmluZ1wiPT10eXBlb2YgYSl7dmFyIGM9dGhpcy50YWJsZS5jb2x1bW5zLmluZGV4T2YoYSk7aWYoIShjPj0wKSl0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgdGFibGUgaGFzIG5vIGNvbHVtbiBuYW1lZCBcIicrYSsnXCInKTt0aGlzLm9ialthXT1iLHRoaXMuYXJyW2NdPWJ9ZWxzZXtpZighKGE8dGhpcy50YWJsZS5jb2x1bW5zLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKFwiQ29sdW1uICNcIithK1wiIGlzIG91dCBvZiB0aGUgcmFuZ2Ugb2YgdGhpcyB0YWJsZVwiKTt0aGlzLmFyclthXT1iO3ZhciBkPXRoaXMudGFibGUuY29sdW1uc1thXTt0aGlzLm9ialtkXT1ifX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuc2V0TnVtPWZ1bmN0aW9uKGEsYil7dmFyIGM9cGFyc2VGbG9hdChiKTt0aGlzLnNldChhLGMpfSxkLlRhYmxlUm93LnByb3RvdHlwZS5zZXRTdHJpbmc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLnRvU3RyaW5nKCk7dGhpcy5zZXQoYSxjKX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhP3RoaXMub2JqW2FdOnRoaXMuYXJyW2FdfSxkLlRhYmxlUm93LnByb3RvdHlwZS5nZXROdW09ZnVuY3Rpb24oYSl7dmFyIGI7aWYoYj1cInN0cmluZ1wiPT10eXBlb2YgYT9wYXJzZUZsb2F0KHRoaXMub2JqW2FdKTpwYXJzZUZsb2F0KHRoaXMuYXJyW2FdKSxcIk5hTlwiPT09Yi50b1N0cmluZygpKXRocm93XCJFcnJvcjogXCIrdGhpcy5vYmpbYV0rXCIgaXMgTmFOIChOb3QgYSBOdW1iZXIpXCI7cmV0dXJuIGJ9LGQuVGFibGVSb3cucHJvdG90eXBlLmdldFN0cmluZz1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYT90aGlzLm9ialthXS50b1N0cmluZygpOnRoaXMuYXJyW2FdLnRvU3RyaW5nKCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDUwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlhNTD1mdW5jdGlvbigpe3RoaXMubmFtZT1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLmNoaWxkcmVuPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy5jb250ZW50PW51bGx9LGQuWE1MLnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnR9LGQuWE1MLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZX0sZC5YTUwucHJvdG90eXBlLnNldE5hbWU9ZnVuY3Rpb24oYSl7dGhpcy5uYW1lPWF9LGQuWE1MLnByb3RvdHlwZS5oYXNDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD4wfSxkLlhNTC5wcm90b3R5cGUubGlzdENoaWxkcmVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLm5hbWV9KX0sZC5YTUwucHJvdG90eXBlLmdldENoaWxkcmVuPWZ1bmN0aW9uKGEpe3JldHVybiBhP3RoaXMuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBiLm5hbWU9PT1hfSk6dGhpcy5jaGlsZHJlbn0sZC5YTUwucHJvdG90eXBlLmdldENoaWxkPWZ1bmN0aW9uKGEpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBhKXJldHVybiB0aGlzLmNoaWxkcmVuW2FdO2Zvcih2YXIgYj0wO2I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YisrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2JdO2lmKGMubmFtZT09PWEpcmV0dXJuIGN9fSxkLlhNTC5wcm90b3R5cGUuYWRkQ2hpbGQ9ZnVuY3Rpb24oYSl7YSBpbnN0YW5jZW9mIGQuWE1MJiZ0aGlzLmNoaWxkcmVuLnB1c2goYSl9LGQuWE1MLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbihhKXt2YXIgYj0tMTtpZihcInN0cmluZ1wiPT10eXBlb2YgYSl7Zm9yKHZhciBjPTA7Yzx0aGlzLmNoaWxkcmVuLmxlbmd0aDtjKyspaWYodGhpcy5jaGlsZHJlbltjXS5uYW1lPT09YSl7Yj1jO2JyZWFrfX1lbHNlIGI9YTstMSE9PWImJnRoaXMuY2hpbGRyZW4uc3BsaWNlKGIsMSl9LGQuWE1MLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVDb3VudD1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpLmxlbmd0aH0sZC5YTUwucHJvdG90eXBlLmxpc3RBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcyl9LGQuWE1MLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGU9ZnVuY3Rpb24oYSl7cmV0dXJuISF0aGlzLmF0dHJpYnV0ZXNbYV19LGQuWE1MLnByb3RvdHlwZS5nZXROdW09ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTnVtYmVyKHRoaXMuYXR0cmlidXRlc1thXSl8fGJ8fDB9LGQuWE1MLnByb3RvdHlwZS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gU3RyaW5nKHRoaXMuYXR0cmlidXRlc1thXSl8fGJ8fG51bGx9LGQuWE1MLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXt0aGlzLmF0dHJpYnV0ZXNbYV0mJih0aGlzLmF0dHJpYnV0ZXNbYV09Yil9LGQuWE1MLnByb3RvdHlwZS5nZXRDb250ZW50PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNvbnRlbnR8fGF8fG51bGx9LGQuWE1MLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKGEpe3RoaXMuY2hpbGRyZW4ubGVuZ3RofHwodGhpcy5jb250ZW50PWEpfSxkLlhNTC5wcm90b3R5cGUuX3NldENvbnQ9ZnVuY3Rpb24oYSl7dmFyIGI7Yj1hLGI9Yi5yZXBsYWNlKC9cXHNcXHMrL2csXCIsXCIpLHRoaXMuY29udGVudD1ifSxkLlhNTC5wcm90b3R5cGUuX3NldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oYSl7dmFyIGI9e30sYz1hLmF0dHJpYnV0ZXM7aWYoYylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXTtiW2Uubm9kZU5hbWVdPWUubm9kZVZhbHVlfXRoaXMuYXR0cmlidXRlcz1ifSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1MTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIE1hdGguaHlwb3QpcmV0dXJuIE1hdGguaHlwb3QuYXBwbHkobnVsbCxhcmd1bWVudHMpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGU9W10sZj0wLGc9MDtnPGQ7ZysrKXt2YXIgaD1hcmd1bWVudHNbZ11cbjtpZigoaD0raCk9PT0xLzB8fGg9PT0tMS8wKXJldHVybiAxLzA7aD1NYXRoLmFicyhoKSxoPmYmJihmPWgpLGVbZ109aH0wPT09ZiYmKGY9MSk7Zm9yKHZhciBpPTAsaj0wLGs9MDtrPGQ7aysrKXt2YXIgbD1lW2tdL2YsbT1sKmwtaixuPWkrbTtqPW4taS1tLGk9bn1yZXR1cm4gTWF0aC5zcXJ0KGkpKmZ9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKTtlLnByb3RvdHlwZS5hYnM9TWF0aC5hYnMsZS5wcm90b3R5cGUuY2VpbD1NYXRoLmNlaWwsZS5wcm90b3R5cGUuY29uc3RyYWluPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29uc3RyYWluXCIsYXJndW1lbnRzKSxNYXRoLm1heChNYXRoLm1pbihhLGMpLGIpfSxlLnByb3RvdHlwZS5kaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImRpc3RcIixhcmd1bWVudHMpLDQ9PT1hcmd1bWVudHMubGVuZ3RoP2QoYXJndW1lbnRzWzJdLWFyZ3VtZW50c1swXSxhcmd1bWVudHNbM10tYXJndW1lbnRzWzFdKTo2PT09YXJndW1lbnRzLmxlbmd0aD9kKGFyZ3VtZW50c1szXS1hcmd1bWVudHNbMF0sYXJndW1lbnRzWzRdLWFyZ3VtZW50c1sxXSxhcmd1bWVudHNbNV0tYXJndW1lbnRzWzJdKTp2b2lkIDB9LGUucHJvdG90eXBlLmV4cD1NYXRoLmV4cCxlLnByb3RvdHlwZS5mbG9vcj1NYXRoLmZsb29yLGUucHJvdG90eXBlLmxlcnA9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsZXJwXCIsYXJndW1lbnRzKSxjKihiLWEpK2F9LGUucHJvdG90eXBlLmxvZz1NYXRoLmxvZyxlLnByb3RvdHlwZS5tYWc9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWFnXCIsYXJndW1lbnRzKSxkKGEsYil9LGUucHJvdG90eXBlLm1hcD1mdW5jdGlvbihhLGIsYyxkLGYsZyl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWFwXCIsYXJndW1lbnRzKTt2YXIgaD0oYS1iKS8oYy1iKSooZi1kKStkO3JldHVybiBnP2Q8Zj90aGlzLmNvbnN0cmFpbihoLGQsZik6dGhpcy5jb25zdHJhaW4oaCxmLGQpOmh9LGUucHJvdG90eXBlLm1heD1mdW5jdGlvbigpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYXhcIixhcmd1bWVudHMpLGFyZ3VtZW50c1swXWluc3RhbmNlb2YgQXJyYXk/TWF0aC5tYXguYXBwbHkobnVsbCxhcmd1bWVudHNbMF0pOk1hdGgubWF4LmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZS5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1pblwiLGFyZ3VtZW50cyksYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBBcnJheT9NYXRoLm1pbi5hcHBseShudWxsLGFyZ3VtZW50c1swXSk6TWF0aC5taW4uYXBwbHkobnVsbCxhcmd1bWVudHMpfSxlLnByb3RvdHlwZS5ub3JtPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibm9ybVwiLGFyZ3VtZW50cyksdGhpcy5tYXAoYSxiLGMsMCwxKX0sZS5wcm90b3R5cGUucG93PU1hdGgucG93LGUucHJvdG90eXBlLnJvdW5kPU1hdGgucm91bmQsZS5wcm90b3R5cGUuc3E9ZnVuY3Rpb24oYSl7cmV0dXJuIGEqYX0sZS5wcm90b3R5cGUuc3FydD1NYXRoLnNxcnQsYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmNyZWF0ZVZlY3Rvcj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBkP25ldyBkLlZlY3Rvcih0aGlzLGFyZ3VtZW50cyk6bmV3IGQuVmVjdG9yKGEsYixjKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZCxlPWEoXCIuLi9jb3JlL21haW5cIiksZj00LGc9MTw8ZixoPTgsaT0xPDxoLGo9NDA5NSxrPTQsbD0uNSxtPWZ1bmN0aW9uKGEpe3JldHVybi41KigxLU1hdGguY29zKGEqTWF0aC5QSSkpfTtlLnByb3RvdHlwZS5ub2lzZT1mdW5jdGlvbihhLGIsYyl7aWYoYj1ifHwwLGM9Y3x8MCxudWxsPT1kKXtkPW5ldyBBcnJheShqKzEpO2Zvcih2YXIgZT0wO2U8aisxO2UrKylkW2VdPU1hdGgucmFuZG9tKCl9YTwwJiYoYT0tYSksYjwwJiYoYj0tYiksYzwwJiYoYz0tYyk7Zm9yKHZhciBuLG8scCxxLHIscz1NYXRoLmZsb29yKGEpLHQ9TWF0aC5mbG9vcihiKSx1PU1hdGguZmxvb3IoYyksdj1hLXMsdz1iLXQseD1jLXUseT0wLHo9LjUsQT0wO0E8aztBKyspe3ZhciBCPXMrKHQ8PGYpKyh1PDxoKTtuPW0odiksbz1tKHcpLHA9ZFtCJmpdLHArPW4qKGRbQisxJmpdLXApLHE9ZFtCK2cmal0scSs9biooZFtCK2crMSZqXS1xKSxwKz1vKihxLXApLEIrPWkscT1kW0Imal0scSs9biooZFtCKzEmal0tcSkscj1kW0IrZyZqXSxyKz1uKihkW0IrZysxJmpdLXIpLHErPW8qKHItcSkscCs9bSh4KSoocS1wKSx5Kz1wKnoseio9bCxzPDw9MSx2Kj0yLHQ8PD0xLHcqPTIsdTw8PTEseCo9Mix2Pj0xJiYocysrLHYtLSksdz49MSYmKHQrKyx3LS0pLHg+PTEmJih1KysseC0tKX1yZXR1cm4geX0sZS5wcm90b3R5cGUubm9pc2VEZXRhaWw9ZnVuY3Rpb24oYSxiKXthPjAmJihrPWEpLGI+MCYmKGw9Yil9LGUucHJvdG90eXBlLm5vaXNlU2VlZD1mdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbigpe3ZhciBhLGIsYz00Mjk0OTY3Mjk2LGQ9MTY2NDUyNSxlPTEwMTM5MDQyMjM7cmV0dXJue3NldFNlZWQ6ZnVuY3Rpb24oZCl7Yj1hPShudWxsPT1kP01hdGgucmFuZG9tKCkqYzpkKT4+PjB9LGdldFNlZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0scmFuZDpmdW5jdGlvbigpe3JldHVybihiPShkKmIrZSklYykvY319fSgpO2Iuc2V0U2VlZChhKSxkPW5ldyBBcnJheShqKzEpO2Zvcih2YXIgYz0wO2M8aisxO2MrKylkW2NdPWIucmFuZCgpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1NDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5WZWN0b3I9ZnVuY3Rpb24oKXt2YXIgYSxiLGM7YXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkPyh0aGlzLnA1PWFyZ3VtZW50c1swXSxhPWFyZ3VtZW50c1sxXVswXXx8MCxiPWFyZ3VtZW50c1sxXVsxXXx8MCxjPWFyZ3VtZW50c1sxXVsyXXx8MCk6KGE9YXJndW1lbnRzWzBdfHwwLGI9YXJndW1lbnRzWzFdfHwwLGM9YXJndW1lbnRzWzJdfHwwKSx0aGlzLng9YSx0aGlzLnk9Yix0aGlzLno9Y30sZC5WZWN0b3IucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJwNS5WZWN0b3IgT2JqZWN0IDogW1wiK3RoaXMueCtcIiwgXCIrdGhpcy55K1wiLCBcIit0aGlzLnorXCJdXCJ9LGQuVmVjdG9yLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KHRoaXMueD1hLnh8fDAsdGhpcy55PWEueXx8MCx0aGlzLno9YS56fHwwLHRoaXMpOmEgaW5zdGFuY2VvZiBBcnJheT8odGhpcy54PWFbMF18fDAsdGhpcy55PWFbMV18fDAsdGhpcy56PWFbMl18fDAsdGhpcyk6KHRoaXMueD1hfHwwLHRoaXMueT1ifHwwLHRoaXMuej1jfHwwLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnA1P25ldyBkLlZlY3Rvcih0aGlzLnA1LFt0aGlzLngsdGhpcy55LHRoaXMuel0pOm5ldyBkLlZlY3Rvcih0aGlzLngsdGhpcy55LHRoaXMueil9LGQuVmVjdG9yLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KHRoaXMueCs9YS54fHwwLHRoaXMueSs9YS55fHwwLHRoaXMueis9YS56fHwwLHRoaXMpOmEgaW5zdGFuY2VvZiBBcnJheT8odGhpcy54Kz1hWzBdfHwwLHRoaXMueSs9YVsxXXx8MCx0aGlzLnorPWFbMl18fDAsdGhpcyk6KHRoaXMueCs9YXx8MCx0aGlzLnkrPWJ8fDAsdGhpcy56Kz1jfHwwLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyh0aGlzLngtPWEueHx8MCx0aGlzLnktPWEueXx8MCx0aGlzLnotPWEuenx8MCx0aGlzKTphIGluc3RhbmNlb2YgQXJyYXk/KHRoaXMueC09YVswXXx8MCx0aGlzLnktPWFbMV18fDAsdGhpcy56LT1hWzJdfHwwLHRoaXMpOih0aGlzLngtPWF8fDAsdGhpcy55LT1ifHwwLHRoaXMuei09Y3x8MCx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLm11bHQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGEmJmlzRmluaXRlKGEpPyh0aGlzLngqPWEsdGhpcy55Kj1hLHRoaXMueio9YSx0aGlzKTooY29uc29sZS53YXJuKFwicDUuVmVjdG9yLnByb3RvdHlwZS5tdWx0OlwiLFwibiBpcyB1bmRlZmluZWQgb3Igbm90IGEgZmluaXRlIG51bWJlclwiKSx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLmRpdj1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYSYmaXNGaW5pdGUoYSk/MD09PWE/KGNvbnNvbGUud2FybihcInA1LlZlY3Rvci5wcm90b3R5cGUuZGl2OlwiLFwiZGl2aWRlIGJ5IDBcIiksdGhpcyk6KHRoaXMueC89YSx0aGlzLnkvPWEsdGhpcy56Lz1hLHRoaXMpOihjb25zb2xlLndhcm4oXCJwNS5WZWN0b3IucHJvdG90eXBlLmRpdjpcIixcIm4gaXMgdW5kZWZpbmVkIG9yIG5vdCBhIGZpbml0ZSBudW1iZXJcIiksdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5tYWc9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMubWFnU3EoKSl9LGQuVmVjdG9yLnByb3RvdHlwZS5tYWdTcT1mdW5jdGlvbigpe3ZhciBhPXRoaXMueCxiPXRoaXMueSxjPXRoaXMuejtyZXR1cm4gYSphK2IqYitjKmN9LGQuVmVjdG9yLnByb3RvdHlwZS5kb3Q9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/dGhpcy5kb3QoYS54LGEueSxhLnopOnRoaXMueCooYXx8MCkrdGhpcy55KihifHwwKSt0aGlzLnoqKGN8fDApfSxkLlZlY3Rvci5wcm90b3R5cGUuY3Jvc3M9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy55KmEuei10aGlzLnoqYS55LGM9dGhpcy56KmEueC10aGlzLngqYS56LGU9dGhpcy54KmEueS10aGlzLnkqYS54O3JldHVybiB0aGlzLnA1P25ldyBkLlZlY3Rvcih0aGlzLnA1LFtiLGMsZV0pOm5ldyBkLlZlY3RvcihiLGMsZSl9LGQuVmVjdG9yLnByb3RvdHlwZS5kaXN0PWZ1bmN0aW9uKGEpe3JldHVybiBhLmNvcHkoKS5zdWIodGhpcykubWFnKCl9LGQuVmVjdG9yLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1hZygpO3JldHVybiAwIT09YSYmdGhpcy5tdWx0KDEvYSksdGhpc30sZC5WZWN0b3IucHJvdG90eXBlLmxpbWl0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubWFnU3EoKTtyZXR1cm4gYj5hKmEmJnRoaXMuZGl2KE1hdGguc3FydChiKSkubXVsdChhKSx0aGlzfSxkLlZlY3Rvci5wcm90b3R5cGUuc2V0TWFnPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHQoYSl9LGQuVmVjdG9yLnByb3RvdHlwZS5oZWFkaW5nPWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5hdGFuMih0aGlzLnksdGhpcy54KTtyZXR1cm4gdGhpcy5wNT90aGlzLnA1Ll9mcm9tUmFkaWFucyhhKTphfSxkLlZlY3Rvci5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaGVhZGluZygpK2E7dGhpcy5wNSYmKGI9dGhpcy5wNS5fdG9SYWRpYW5zKGIpKTt2YXIgYz10aGlzLm1hZygpO3JldHVybiB0aGlzLng9TWF0aC5jb3MoYikqYyx0aGlzLnk9TWF0aC5zaW4oYikqYyx0aGlzfSxkLlZlY3Rvci5wcm90b3R5cGUuYW5nbGVCZXR3ZWVuPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZG90KGEpLyh0aGlzLm1hZygpKmEubWFnKCkpLGM9TWF0aC5hY29zKE1hdGgubWluKDEsTWF0aC5tYXgoLTEsYikpKTtyZXR1cm4gdGhpcy5wNT90aGlzLnA1Ll9mcm9tUmFkaWFucyhjKTpjfSxkLlZlY3Rvci5wcm90b3R5cGUubGVycD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yP3RoaXMubGVycChhLngsYS55LGEueixiKToodGhpcy54Kz0oYS10aGlzLngpKmV8fDAsdGhpcy55Kz0oYi10aGlzLnkpKmV8fDAsdGhpcy56Kz0oYy10aGlzLnopKmV8fDAsdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5hcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLnh8fDAsdGhpcy55fHwwLHRoaXMuenx8MF19LGQuVmVjdG9yLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlLGYsZztyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyhlPWEueHx8MCxmPWEueXx8MCxnPWEuenx8MCk6YSBpbnN0YW5jZW9mIEFycmF5PyhlPWFbMF18fDAsZj1hWzFdfHwwLGc9YVsyXXx8MCk6KGU9YXx8MCxmPWJ8fDAsZz1jfHwwKSx0aGlzLng9PT1lJiZ0aGlzLnk9PT1mJiZ0aGlzLno9PT1nfSxkLlZlY3Rvci5mcm9tQW5nbGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9MSksbmV3IGQuVmVjdG9yKGIqTWF0aC5jb3MoYSksYipNYXRoLnNpbihhKSwwKX0sZC5WZWN0b3IuZnJvbUFuZ2xlcz1mdW5jdGlvbihhLGIsYyl7dm9pZCAwPT09YyYmKGM9MSk7dmFyIGU9TWF0aC5jb3MoYiksZj1NYXRoLnNpbihiKSxnPU1hdGguY29zKGEpLGg9TWF0aC5zaW4oYSk7cmV0dXJuIG5ldyBkLlZlY3RvcihjKmgqZiwtYypnLGMqaCplKX0sZC5WZWN0b3IucmFuZG9tMkQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tQW5nbGUoTWF0aC5yYW5kb20oKSplLlRXT19QSSl9LGQuVmVjdG9yLnJhbmRvbTNEPWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5yYW5kb20oKSplLlRXT19QSSxiPTIqTWF0aC5yYW5kb20oKS0xLGM9TWF0aC5zcXJ0KDEtYipiKSxmPWMqTWF0aC5jb3MoYSksZz1jKk1hdGguc2luKGEpO3JldHVybiBuZXcgZC5WZWN0b3IoZixnLGIpfSxkLlZlY3Rvci5hZGQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP2Muc2V0KGEpOmM9YS5jb3B5KCksYy5hZGQoYiksY30sZC5WZWN0b3Iuc3ViPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz9jLnNldChhKTpjPWEuY29weSgpLGMuc3ViKGIpLGN9LGQuVmVjdG9yLm11bHQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP2Muc2V0KGEpOmM9YS5jb3B5KCksYy5tdWx0KGIpLGN9LGQuVmVjdG9yLmRpdj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/Yy5zZXQoYSk6Yz1hLmNvcHkoKSxjLmRpdihiKSxjfSxkLlZlY3Rvci5kb3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5kb3QoYil9LGQuVmVjdG9yLmNyb3NzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuY3Jvc3MoYil9LGQuVmVjdG9yLmRpc3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5kaXN0KGIpfSxkLlZlY3Rvci5sZXJwPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBkP2Quc2V0KGEpOmQ9YS5jb3B5KCksZC5sZXJwKGIsYyksZH0sZC5WZWN0b3IubWFnPWZ1bmN0aW9uKGEpe3ZhciBiPWEueCxjPWEueSxkPWEueixlPWIqYitjKmMrZCpkO3JldHVybiBNYXRoLnNxcnQoZSl9LGIuZXhwb3J0cz1kLlZlY3Rvcn0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9ITEsZj0hMSxnPTAsaD1mdW5jdGlvbigpe3ZhciBhLGIsYz00Mjk0OTY3Mjk2LGQ9MTY2NDUyNSxlPTEwMTM5MDQyMjM7cmV0dXJue3NldFNlZWQ6ZnVuY3Rpb24oZCl7Yj1hPShudWxsPT1kP01hdGgucmFuZG9tKCkqYzpkKT4+PjB9LGdldFNlZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0scmFuZDpmdW5jdGlvbigpe3JldHVybihiPShkKmIrZSklYykvY319fSgpO2QucHJvdG90eXBlLnJhbmRvbVNlZWQ9ZnVuY3Rpb24oYSl7aC5zZXRTZWVkKGEpLGU9ITAsZj0hMX0sZC5wcm90b3R5cGUucmFuZG9tPWZ1bmN0aW9uKGEsYil7dmFyIGM7aWYoYz1lP2gucmFuZCgpOk1hdGgucmFuZG9tKCksdm9pZCAwPT09YSlyZXR1cm4gYztpZih2b2lkIDA9PT1iKXJldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YVtNYXRoLmZsb29yKGMqYS5sZW5ndGgpXTpjKmE7aWYoYT5iKXt2YXIgZD1hO2E9YixiPWR9cmV0dXJuIGMqKGItYSkrYX0sZC5wcm90b3R5cGUucmFuZG9tR2F1c3NpYW49ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsaDtpZihmKWM9ZyxmPSExO2Vsc2V7ZG97ZD10aGlzLnJhbmRvbSgyKS0xLGU9dGhpcy5yYW5kb20oMiktMSxoPWQqZCtlKmV9d2hpbGUoaD49MSk7aD1NYXRoLnNxcnQoLTIqTWF0aC5sb2coaCkvaCksYz1kKmgsZz1lKmgsZj0hMH12YXIgaT1hfHwwO3JldHVybiBjKihifHwxKStpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5wcm90b3R5cGUuX2FuZ2xlTW9kZT1lLlJBRElBTlMsZC5wcm90b3R5cGUuYWNvcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hY29zKGEpKX0sZC5wcm90b3R5cGUuYXNpbj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hc2luKGEpKX0sZC5wcm90b3R5cGUuYXRhbj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hdGFuKGEpKX0sZC5wcm90b3R5cGUuYXRhbjI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hdGFuMihhLGIpKX0sZC5wcm90b3R5cGUuY29zPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLmNvcyh0aGlzLl90b1JhZGlhbnMoYSkpfSxkLnByb3RvdHlwZS5zaW49ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguc2luKHRoaXMuX3RvUmFkaWFucyhhKSl9LGQucHJvdG90eXBlLnRhbj1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC50YW4odGhpcy5fdG9SYWRpYW5zKGEpKX0sZC5wcm90b3R5cGUuZGVncmVlcz1mdW5jdGlvbihhKXtyZXR1cm4gYSplLlJBRF9UT19ERUd9LGQucHJvdG90eXBlLnJhZGlhbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEqZS5ERUdfVE9fUkFEfSxkLnByb3RvdHlwZS5hbmdsZU1vZGU9ZnVuY3Rpb24oYSl7YSE9PWUuREVHUkVFUyYmYSE9PWUuUkFESUFOU3x8KHRoaXMuX2FuZ2xlTW9kZT1hKX0sZC5wcm90b3R5cGUuX3RvUmFkaWFucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYW5nbGVNb2RlPT09ZS5ERUdSRUVTP2EqZS5ERUdfVE9fUkFEOmF9LGQucHJvdG90eXBlLl90b0RlZ3JlZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2FuZ2xlTW9kZT09PWUuUkFESUFOUz9hKmUuUkFEX1RPX0RFRzphfSxkLnByb3RvdHlwZS5fZnJvbVJhZGlhbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2FuZ2xlTW9kZT09PWUuREVHUkVFUz9hKmUuUkFEX1RPX0RFRzphfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLnRleHRBbGlnbj1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0QWxpZ25cIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRBbGlnbi5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0TGVhZGluZz1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dExlYWRpbmdcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRMZWFkaW5nLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRTaXplPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0U2l6ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dFNpemUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dFN0eWxlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0U3R5bGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRTdHlsZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0V2lkdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRXaWR0aFwiLGFyZ3VtZW50cyksMD09PWEubGVuZ3RoPzA6dGhpcy5fcmVuZGVyZXIudGV4dFdpZHRoLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRBc2NlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dEFzY2VudFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dEFzY2VudCgpfSxkLnByb3RvdHlwZS50ZXh0RGVzY2VudD1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0RGVzY2VudFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dERlc2NlbnQoKX0sZC5wcm90b3R5cGUuX3VwZGF0ZVRleHRNZXRyaWNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl91cGRhdGVUZXh0TWV0cmljcygpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1ODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIiksZj1hKFwib3BlbnR5cGUuanNcIik7YShcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxkLnByb3RvdHlwZS5sb2FkRm9udD1mdW5jdGlvbihhLGIsYyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZEZvbnRcIixhcmd1bWVudHMpO3ZhciBlPW5ldyBkLkZvbnQodGhpcyksZz10aGlzO3JldHVybiBmLmxvYWQoYSxmdW5jdGlvbihmLGgpe2lmKGYpcmV0dXJuIHZvaWQgMCE9PWM/YyhmKTooZC5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDQsYSksdm9pZCBjb25zb2xlLmVycm9yKGYsYSkpO2UuZm9udD1oLHZvaWQgMCE9PWImJmIoZSksZy5fZGVjcmVtZW50UHJlbG9hZCgpO3ZhciBpLGosaz1bXCJ0dGZcIixcIm90ZlwiLFwid29mZlwiLFwid29mZjJcIl0sbD1hLnNwbGl0KFwiXFxcXFwiKS5wb3AoKS5zcGxpdChcIi9cIikucG9wKCksbT1sLmxhc3RJbmRleE9mKFwiLlwiKSxuPW08MT9udWxsOmwuc3Vic3RyKG0rMSk7ay5pbmRleE9mKG4pPi0xJiYoaT1sLnN1YnN0cigwLG0pLGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpLGouYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcXG5AZm9udC1mYWNlIHtcXG5mb250LWZhbWlseTogXCIraStcIjtcXG5zcmM6IHVybChcIithK1wiKTtcXG59XFxuXCIpKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGopKX0pLGV9LGQucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvRmlsbHx8dGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlP3RoaXMuX3JlbmRlcmVyLnRleHQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTp0aGlzfSxkLnByb3RvdHlwZS50ZXh0Rm9udD1mdW5jdGlvbihhLGIpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRGb250XCIsYXJndW1lbnRzKSxhcmd1bWVudHMubGVuZ3RoKXtpZighYSl0aHJvdyBuZXcgRXJyb3IoXCJudWxsIGZvbnQgcGFzc2VkIHRvIHRleHRGb250XCIpO3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfdGV4dEZvbnRcIixhKSxiJiYodGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX3RleHRTaXplXCIsYiksdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX3RleHRMZWFkaW5nXCIsYiplLl9ERUZBVUxUX0xFQURNVUxUKSksdGhpcy5fcmVuZGVyZXIuX2FwcGx5VGV4dFByb3BlcnRpZXMoKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3RleHRGb250fSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjQsXCJvcGVudHlwZS5qc1wiOjEwfV0sNTk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7Zm9yKHZhciBjPWgoYix7c2FtcGxlRmFjdG9yOi4xLHNpbXBsaWZ5VGhyZXNob2xkOjB9KSxkPW4oYSwwLDEpLGY9ZC8oZCpjLnNhbXBsZUZhY3RvciksZz1bXSxpPTA7aTxkO2krPWYpZy5wdXNoKG4oYSxpKSk7cmV0dXJuIGMuc2ltcGxpZnlUaHJlc2hvbGQmJmUoZyxjLnNpbXBsaWZ5VGhyZXNob2xkKSxnfWZ1bmN0aW9uIGUoYSxiKXtiPXZvaWQgMD09PWI/MDpiO2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGgtMTthLmxlbmd0aD4zJiZkPj0wOy0tZClqKGkoYSxkLTEpLGkoYSxkKSxpKGEsZCsxKSxiKSYmKGEuc3BsaWNlKGQlYS5sZW5ndGgsMSksYysrKTtyZXR1cm4gY31mdW5jdGlvbiBmKGEpe2Zvcih2YXIgYixjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrKylcIk1cIj09PWFbZF0udHlwZSYmKGImJmMucHVzaChiKSxiPVtdKSxiLnB1c2goZyhhW2RdKSk7cmV0dXJuIGMucHVzaChiKSxjfWZ1bmN0aW9uIGcoYSl7dmFyIGI9W2EudHlwZV07cmV0dXJuXCJNXCI9PT1hLnR5cGV8fFwiTFwiPT09YS50eXBlP2IucHVzaChhLngsYS55KTpcIkNcIj09PWEudHlwZT9iLnB1c2goYS54MSxhLnkxLGEueDIsYS55MixhLngsYS55KTpcIlFcIj09PWEudHlwZSYmYi5wdXNoKGEueDEsYS55MSxhLngsYS55KSxifWZ1bmN0aW9uIGgoYSxiKXtpZihcIm9iamVjdFwiIT10eXBlb2YgYSlhPWI7ZWxzZSBmb3IodmFyIGMgaW4gYil2b2lkIDA9PT1hW2NdJiYoYVtjXT1iW2NdKTtyZXR1cm4gYX1mdW5jdGlvbiBpKGEsYil7dmFyIGM9YS5sZW5ndGg7cmV0dXJuIGFbYjwwP2IlYytjOmIlY119ZnVuY3Rpb24gaihhLGIsYyxkKXtpZighZClyZXR1cm4gMD09PWsoYSxiLGMpO3ZvaWQgMD09PWoudG1wUG9pbnQxJiYoai50bXBQb2ludDE9W10sai50bXBQb2ludDI9W10pO3ZhciBlPWoudG1wUG9pbnQxLGY9ai50bXBQb2ludDI7ZS54PWIueC1hLngsZS55PWIueS1hLnksZi54PWMueC1iLngsZi55PWMueS1iLnk7dmFyIGc9ZS54KmYueCtlLnkqZi55LGg9TWF0aC5zcXJ0KGUueCplLngrZS55KmUueSksaT1NYXRoLnNxcnQoZi54KmYueCtmLnkqZi55KTtyZXR1cm4gTWF0aC5hY29zKGcvKGgqaSkpPGR9ZnVuY3Rpb24gayhhLGIsYyl7cmV0dXJuKGJbMF0tYVswXSkqKGNbMV0tYVsxXSktKGNbMF0tYVswXSkqKGJbMV0tYVsxXSl9ZnVuY3Rpb24gbChhLGIsYyxkLGUsZixnLGgsaSl7dmFyIGo9MS1pLGs9TWF0aC5wb3coaiwzKSxsPU1hdGgucG93KGosMiksbT1pKmksbj1tKmksbz1rKmErMypsKmkqYyszKmoqaSppKmUrbipnLHA9aypiKzMqbCppKmQrMypqKmkqaSpmK24qaCxxPWErMippKihjLWEpK20qKGUtMipjK2EpLHI9YisyKmkqKGQtYikrbSooZi0yKmQrYikscz1jKzIqaSooZS1jKSttKihnLTIqZStjKSx0PWQrMippKihmLWQpK20qKGgtMipmK2QpLHU9aiphK2kqYyx2PWoqYitpKmQsdz1qKmUraSpnLHg9aipmK2kqaCx5PTkwLTE4MCpNYXRoLmF0YW4yKHEtcyxyLXQpL01hdGguUEk7cmV0dXJuKHE+c3x8cjx0KSYmKHkrPTE4MCkse3g6byx5OnAsbTp7eDpxLHk6cn0sbjp7eDpzLHk6dH0sc3RhcnQ6e3g6dSx5OnZ9LGVuZDp7eDp3LHk6eH0sYWxwaGE6eX19ZnVuY3Rpb24gbShhLGIsYyxkLGUsZixnLGgsaSl7cmV0dXJuIG51bGw9PWk/dShhLGIsYyxkLGUsZixnLGgpOmwoYSxiLGMsZCxlLGYsZyxoLHYoYSxiLGMsZCxlLGYsZyxoLGkpKX1mdW5jdGlvbiBuKGEsYixjKXthPXAoYSk7Zm9yKHZhciBkLGUsZixnLGgsaT1cIlwiLGo9e30saz0wLG49MCxvPWEubGVuZ3RoO248bztuKyspe2lmKGY9YVtuXSxcIk1cIj09PWZbMF0pZD0rZlsxXSxlPStmWzJdO2Vsc2V7aWYoZz1tKGQsZSxmWzFdLGZbMl0sZlszXSxmWzRdLGZbNV0sZls2XSksaytnPmImJiFjKXJldHVybiBoPW0oZCxlLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSxmWzZdLGItaykse3g6aC54LHk6aC55LGFscGhhOmguYWxwaGF9O2srPWcsZD0rZls1XSxlPStmWzZdfWkrPWYuc2hpZnQoKStmfXJldHVybiBqLmVuZD1pLGg9Yz9rOmwoZCxlLGZbMF0sZlsxXSxmWzJdLGZbM10sZls0XSxmWzVdLDEpLGguYWxwaGEmJihoPXt4OmgueCx5OmgueSxhbHBoYTpoLmFscGhhfSksaH1mdW5jdGlvbiBvKGEpe3ZhciBiPVtdLGM9MCxkPTAsZT0wLGY9MCxnPTA7aWYoIWEpcmV0dXJuIGI7XCJNXCI9PT1hWzBdWzBdJiYoYz0rYVswXVsxXSxkPSthWzBdWzJdLGU9YyxmPWQsZysrLGJbMF09W1wiTVwiLGMsZF0pO2Zvcih2YXIgaCxpLGosaz0zPT09YS5sZW5ndGgmJlwiTVwiPT09YVswXVswXSYmXCJSXCI9PT1hWzFdWzBdLnRvVXBwZXJDYXNlKCkmJlwiWlwiPT09YVsyXVswXS50b1VwcGVyQ2FzZSgpLGw9ZyxtPWEubGVuZ3RoO2w8bTtsKyspe2lmKGIucHVzaChpPVtdKSxqPWFbbF0salswXSE9PVN0cmluZy5wcm90b3R5cGUudG9VcHBlckNhc2UuY2FsbChqWzBdKSlzd2l0Y2goaVswXT1TdHJpbmcucHJvdG90eXBlLnRvVXBwZXJDYXNlLmNhbGwoalswXSksaVswXSl7Y2FzZVwiQVwiOmlbMV09alsxXSxpWzJdPWpbMl0saVszXT1qWzNdLGlbNF09als0XSxpWzVdPWpbNV0saVs2XT0rKGpbNl0rYyksaVs3XT0rKGpbN10rZCk7YnJlYWs7Y2FzZVwiVlwiOmlbMV09K2pbMV0rZDticmVhaztjYXNlXCJIXCI6aVsxXT0ralsxXStjO2JyZWFrO2Nhc2VcIlJcIjpoPVtjLGRdLmNvbmNhdChqLnNsaWNlKDEpKTtmb3IodmFyIG49MixvPWgubGVuZ3RoO248bztuKyspaFtuXT0raFtuXStjLGhbKytuXT0raFtuXStkO2IucG9wKCksYj1iLmNvbmNhdChyKGgsaykpO2JyZWFrO2Nhc2VcIk1cIjplPStqWzFdK2MsZj0ralsyXStkO2JyZWFrO2RlZmF1bHQ6Zm9yKG49MSxvPWoubGVuZ3RoO248bztuKyspaVtuXT0raltuXSsobiUyP2M6ZCl9ZWxzZSBpZihcIlJcIj09PWpbMF0paD1bYyxkXS5jb25jYXQoai5zbGljZSgxKSksYi5wb3AoKSxiPWIuY29uY2F0KHIoaCxrKSksaT1bXCJSXCJdLmNvbmNhdChqLnNsaWNlKC0yKSk7ZWxzZSBmb3IodmFyIHA9MCxxPWoubGVuZ3RoO3A8cTtwKyspaVtwXT1qW3BdO3N3aXRjaChpWzBdKXtjYXNlXCJaXCI6Yz1lLGQ9ZjticmVhaztjYXNlXCJIXCI6Yz1pWzFdO2JyZWFrO2Nhc2VcIlZcIjpkPWlbMV07YnJlYWs7Y2FzZVwiTVwiOmU9aVtpLmxlbmd0aC0yXSxmPWlbaS5sZW5ndGgtMV07YnJlYWs7ZGVmYXVsdDpjPWlbaS5sZW5ndGgtMl0sZD1pW2kubGVuZ3RoLTFdfX1yZXR1cm4gYn1mdW5jdGlvbiBwKGEsYil7dmFyIGMsZD1vKGEpLGU9YiYmbyhiKSxmPXt4OjAseTowLGJ4OjAsYnk6MCxYOjAsWTowLHF4Om51bGwscXk6bnVsbH0sZz17eDowLHk6MCxieDowLGJ5OjAsWDowLFk6MCxxeDpudWxsLHF5Om51bGx9LGg9W10saT1bXSxqPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9e1Q6MSxROjF9O2lmKCFhKXJldHVybltcIkNcIixiLngsYi55LGIueCxiLnksYi54LGIueV07c3dpdGNoKGFbMF1pbiBmfHwoYi5xeD1iLnF5PW51bGwpLGFbMF0pe2Nhc2VcIk1cIjpiLlg9YVsxXSxiLlk9YVsyXTticmVhaztjYXNlXCJBXCI6YT1bXCJDXCJdLmNvbmNhdChxLmFwcGx5KDAsW2IueCxiLnldLmNvbmNhdChhLnNsaWNlKDEpKSkpO2JyZWFrO2Nhc2VcIlNcIjpcIkNcIj09PWN8fFwiU1wiPT09Yz8oZD0yKmIueC1iLmJ4LGU9MipiLnktYi5ieSk6KGQ9Yi54LGU9Yi55KSxhPVtcIkNcIixkLGVdLmNvbmNhdChhLnNsaWNlKDEpKTticmVhaztjYXNlXCJUXCI6XCJRXCI9PT1jfHxcIlRcIj09PWM/KGIucXg9MipiLngtYi5xeCxiLnF5PTIqYi55LWIucXkpOihiLnF4PWIueCxiLnF5PWIueSksYT1bXCJDXCJdLmNvbmNhdCh0KGIueCxiLnksYi5xeCxiLnF5LGFbMV0sYVsyXSkpO2JyZWFrO2Nhc2VcIlFcIjpiLnF4PWFbMV0sYi5xeT1hWzJdLGE9W1wiQ1wiXS5jb25jYXQodChiLngsYi55LGFbMV0sYVsyXSxhWzNdLGFbNF0pKTticmVhaztjYXNlXCJMXCI6YT1bXCJDXCJdLmNvbmNhdChzKGIueCxiLnksYVsxXSxhWzJdKSk7YnJlYWs7Y2FzZVwiSFwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGFbMV0sYi55KSk7YnJlYWs7Y2FzZVwiVlwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGIueCxhWzFdKSk7YnJlYWs7Y2FzZVwiWlwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGIuWCxiLlkpKX1yZXR1cm4gYX0saz1mdW5jdGlvbihhLGIpe2lmKGFbYl0ubGVuZ3RoPjcpe2FbYl0uc2hpZnQoKTtmb3IodmFyIGY9YVtiXTtmLmxlbmd0aDspaFtiXT1cIkFcIixlJiYoaVtiXT1cIkFcIiksYS5zcGxpY2UoYisrLDAsW1wiQ1wiXS5jb25jYXQoZi5zcGxpY2UoMCw2KSkpO2Euc3BsaWNlKGIsMSksYz1NYXRoLm1heChkLmxlbmd0aCxlJiZlLmxlbmd0aHx8MCl9fSxsPWZ1bmN0aW9uKGEsYixmLGcsaCl7YSYmYiYmXCJNXCI9PT1hW2hdWzBdJiZcIk1cIiE9PWJbaF1bMF0mJihiLnNwbGljZShoLDAsW1wiTVwiLGcueCxnLnldKSxmLmJ4PTAsZi5ieT0wLGYueD1hW2hdWzFdLGYueT1hW2hdWzJdLGM9TWF0aC5tYXgoZC5sZW5ndGgsZSYmZS5sZW5ndGh8fDApKX0sbT1cIlwiLG49XCJcIjtjPU1hdGgubWF4KGQubGVuZ3RoLGUmJmUubGVuZ3RofHwwKTtmb3IodmFyIHA9MDtwPGM7cCsrKXtkW3BdJiYobT1kW3BdWzBdKSxcIkNcIiE9PW0mJihoW3BdPW0scCYmKG49aFtwLTFdKSksZFtwXT1qKGRbcF0sZixuKSxcIkFcIiE9PWhbcF0mJlwiQ1wiPT09bSYmKGhbcF09XCJDXCIpLGsoZCxwKSxlJiYoZVtwXSYmKG09ZVtwXVswXSksXCJDXCIhPT1tJiYoaVtwXT1tLHAmJihuPWlbcC0xXSkpLGVbcF09aihlW3BdLGcsbiksXCJBXCIhPT1pW3BdJiZcIkNcIj09PW0mJihpW3BdPVwiQ1wiKSxrKGUscCkpLGwoZCxlLGYsZyxwKSxsKGUsZCxnLGYscCk7dmFyIHI9ZFtwXSx1PWUmJmVbcF0sdj1yLmxlbmd0aCx3PWUmJnUubGVuZ3RoO2YueD1yW3YtMl0sZi55PXJbdi0xXSxmLmJ4PXBhcnNlRmxvYXQoclt2LTRdKXx8Zi54LGYuYnk9cGFyc2VGbG9hdChyW3YtM10pfHxmLnksZy5ieD1lJiYocGFyc2VGbG9hdCh1W3ctNF0pfHxnLngpLGcuYnk9ZSYmKHBhcnNlRmxvYXQodVt3LTNdKXx8Zy55KSxnLng9ZSYmdVt3LTJdLGcueT1lJiZ1W3ctMV19cmV0dXJuIGU/W2QsZV06ZH1mdW5jdGlvbiBxKGEsYixjLGQsZSxmLGcsaCxpLGope3ZhciBrLGwsbSxuLG8scD1NYXRoLlBJLHI9MTIwKnAvMTgwLHM9cC8xODAqKCtlfHwwKSx0PVtdLHU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybnt4OmEqTWF0aC5jb3MoYyktYipNYXRoLnNpbihjKSx5OmEqTWF0aC5zaW4oYykrYipNYXRoLmNvcyhjKX19O2lmKGopaz1qWzBdLGw9alsxXSxtPWpbMl0sbj1qWzNdO2Vsc2V7bz11KGEsYiwtcyksYT1vLngsYj1vLnksbz11KGgsaSwtcyksaD1vLngsaT1vLnk7dmFyIHY9KGEtaCkvMix3PShiLWkpLzIseD12KnYvKGMqYykrdyp3LyhkKmQpO3g+MSYmKHg9TWF0aC5zcXJ0KHgpLGMqPXgsZCo9eCk7dmFyIHk9YypjLHo9ZCpkLEE9KGY9PT1nPy0xOjEpKk1hdGguc3FydChNYXRoLmFicygoeSp6LXkqdyp3LXoqdip2KS8oeSp3Kncreip2KnYpKSk7bT1BKmMqdy9kKyhhK2gpLzIsbj1BKi1kKnYvYysoYitpKS8yLGs9TWF0aC5hc2luKCgoYi1uKS9kKS50b0ZpeGVkKDkpKSxsPU1hdGguYXNpbigoKGktbikvZCkudG9GaXhlZCg5KSksaz1hPG0/cC1rOmssbD1oPG0/cC1sOmwsazwwJiYoaz0yKnArayksbDwwJiYobD0yKnArbCksZyYmaz5sJiYoay09MipwKSwhZyYmbD5rJiYobC09MipwKX12YXIgQj1sLWs7aWYoTWF0aC5hYnMoQik+cil7dmFyIEM9bCxEPWgsRT1pO2w9aytyKihnJiZsPms/MTotMSksaD1tK2MqTWF0aC5jb3MobCksaT1uK2QqTWF0aC5zaW4obCksdD1xKGgsaSxjLGQsZSwwLGcsRCxFLFtsLEMsbSxuXSl9Qj1sLWs7dmFyIEY9TWF0aC5jb3MoayksRz1NYXRoLnNpbihrKSxIPU1hdGguY29zKGwpLEk9TWF0aC5zaW4obCksSj1NYXRoLnRhbihCLzQpLEs9NC8zKmMqSixMPTQvMypkKkosTT1bYSxiXSxOPVthK0sqRyxiLUwqRl0sTz1baCtLKkksaS1MKkhdLFA9W2gsaV07aWYoTlswXT0yKk1bMF0tTlswXSxOWzFdPTIqTVsxXS1OWzFdLGopcmV0dXJuW04sTyxQXS5jb25jYXQodCk7dD1bTixPLFBdLmNvbmNhdCh0KS5qb2luKCkuc3BsaXQoXCIsXCIpO2Zvcih2YXIgUT1bXSxSPTAsUz10Lmxlbmd0aDtSPFM7UisrKVFbUl09UiUyP3UodFtSLTFdLHRbUl0scykueTp1KHRbUl0sdFtSKzFdLHMpLng7cmV0dXJuIFF9ZnVuY3Rpb24gcihhLGIpe2Zvcih2YXIgYz1bXSxkPTAsZT1hLmxlbmd0aDtlLTIqIWI+ZDtkKz0yKXt2YXIgZj1be3g6K2FbZC0yXSx5OithW2QtMV19LHt4OithW2RdLHk6K2FbZCsxXX0se3g6K2FbZCsyXSx5OithW2QrM119LHt4OithW2QrNF0seTorYVtkKzVdfV07Yj9kP2UtND09PWQ/ZlszXT17eDorYVswXSx5OithWzFdfTplLTI9PT1kJiYoZlsyXT17eDorYVswXSx5OithWzFdfSxmWzNdPXt4OithWzJdLHk6K2FbM119KTpmWzBdPXt4OithW2UtMl0seTorYVtlLTFdfTplLTQ9PT1kP2ZbM109ZlsyXTpkfHwoZlswXT17eDorYVtkXSx5OithW2QrMV19KSxjLnB1c2goW1wiQ1wiLCgtZlswXS54KzYqZlsxXS54K2ZbMl0ueCkvNiwoLWZbMF0ueSs2KmZbMV0ueStmWzJdLnkpLzYsKGZbMV0ueCs2KmZbMl0ueC1mWzNdLngpLzYsKGZbMV0ueSs2KmZbMl0ueS1mWzNdLnkpLzYsZlsyXS54LGZbMl0ueV0pfXJldHVybiBjfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuW2EsYixjLGQsYyxkXX1mdW5jdGlvbiB0KGEsYixjLGQsZSxmKXt2YXIgZz0xLzMsaD0yLzM7cmV0dXJuW2cqYStoKmMsZypiK2gqZCxnKmUraCpjLGcqZitoKmQsZSxmXX1mdW5jdGlvbiB1KGEsYixjLGQsZSxmLGcsaCxpKXtudWxsPT1pJiYoaT0xKSxpPWk+MT8xOmk8MD8wOmk7Zm9yKHZhciBqPWkvMixrPTEyLGw9Wy0uMTI1MiwuMTI1MiwtLjM2NzgsLjM2NzgsLS41ODczLC41ODczLC0uNzY5OSwuNzY5OSwtLjkwNDEsLjkwNDEsLS45ODE2LC45ODE2XSxtPTAsbj1bLjI0OTEsLjI0OTEsLjIzMzUsLjIzMzUsLjIwMzIsLjIwMzIsLjE2MDEsLjE2MDEsLjEwNjksLjEwNjksLjA0NzIsLjA0NzJdLG89MDtvPGs7bysrKXt2YXIgcD1qKmxbb10raixxPXcocCxhLGMsZSxnKSxyPXcocCxiLGQsZixoKSxzPXEqcStyKnI7bSs9bltvXSpNYXRoLnNxcnQocyl9cmV0dXJuIGoqbX1mdW5jdGlvbiB2KGEsYixjLGQsZSxmLGcsaCxpKXtpZighKGk8MHx8dShhLGIsYyxkLGUsZixnLGgpPGkpKXt2YXIgaixrPTEsbD1rLzIsbT1rLWwsbj0uMDE7Zm9yKGo9dShhLGIsYyxkLGUsZixnLGgsbSk7TWF0aC5hYnMoai1pKT5uOylsLz0yLG0rPShqPGk/MTotMSkqbCxqPXUoYSxiLGMsZCxlLGYsZyxoLG0pO3JldHVybiBtfX1mdW5jdGlvbiB3KGEsYixjLGQsZSl7cmV0dXJuIGEqKGEqKC0zKmIrOSpjLTkqZCszKmUpKzYqYi0xMipjKzYqZCktMypiKzMqY31mdW5jdGlvbiB4KCl7Zm9yKHZhciBhPVwiXCIsYj1hcmd1bWVudHMubGVuZ3RoLTE7Yj49MDstLWIpe3ZhciBjPWFyZ3VtZW50c1tiXTthKz1jPT09T2JqZWN0KGMpP0pTT04uc3RyaW5naWZ5KGMpOmN9cmV0dXJuIGF9dmFyIHk9YShcIi4uL2NvcmUvbWFpblwiKSx6PWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTt5LkZvbnQ9ZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnQ9YSx0aGlzLmNhY2hlPXt9LHRoaXMuZm9udD12b2lkIDB9LHkuRm9udC5wcm90b3R5cGUubGlzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIm5vdCB5ZXQgaW1wbGVtZW50ZWRcIil9LHkuRm9udC5wcm90b3R5cGUudGV4dEJvdW5kcz1mdW5jdGlvbihhLGIsYyxkLGUpe2I9dm9pZCAwIT09Yj9iOjAsYz12b2lkIDAhPT1jP2M6MCxkPWR8fHRoaXMucGFyZW50Ll9yZW5kZXJlci5fdGV4dFNpemU7dmFyIGY9ZSYmZS5yZW5kZXJlciYmZS5yZW5kZXJlci5fcEluc3R8fHRoaXMucGFyZW50LGc9Zi5fcmVuZGVyZXIsaD1nLl90ZXh0QWxpZ258fHouTEVGVCxpPWcuX3RleHRCYXNlbGluZXx8ei5CQVNFTElORSxqPXgoXCJ0ZXh0Qm91bmRzXCIsYSxiLGMsZCxoLGkpLGs9dGhpcy5jYWNoZVtqXTtpZighayl7dmFyIGwsbSxuLG8scCxxPVtdLHI9W10scz10aGlzLl9zY2FsZShkKTt0aGlzLmZvbnQuZm9yRWFjaEdseXBoKGEsYixjLGQsZSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1hLmdldE1ldHJpY3MoKTtxLnB1c2goYitlLnhNaW4qcykscS5wdXNoKGIrZS54TWF4KnMpLHIucHVzaChjKy1lLnlNaW4qcyksci5wdXNoKGMrLWUueU1heCpzKX0pLGw9TWF0aC5taW4uYXBwbHkobnVsbCxxKSxtPU1hdGgubWluLmFwcGx5KG51bGwsciksbj1NYXRoLm1heC5hcHBseShudWxsLHEpLG89TWF0aC5tYXguYXBwbHkobnVsbCxyKSxrPXt4OmwseTptLGg6by1tLHc6bi1sLGFkdmFuY2U6bC1ifSxwPXRoaXMuX2hhbmRsZUFsaWdubWVudChnLGEsay54LGsueSxrLncray5hZHZhbmNlKSxrLng9cC54LGsueT1wLnksdGhpcy5jYWNoZVt4KFwidGV4dEJvdW5kc1wiLGEsYixjLGQsaCxpKV09a31yZXR1cm4ga30seS5Gb250LnByb3RvdHlwZS50ZXh0VG9Qb2ludHM9ZnVuY3Rpb24oYSxiLGMsZSxnKXtmdW5jdGlvbiBoKGIpe3JldHVybiBrW2JdLm5hbWUmJlwic3BhY2VcIj09PWtbYl0ubmFtZXx8YS5sZW5ndGg9PT1rLmxlbmd0aCYmXCIgXCI9PT1hW2JdfHxrW2JdLmluZGV4JiYzPT09a1tiXS5pbmRleH12YXIgaT0wLGo9W10saz10aGlzLl9nZXRHbHlwaHMoYSk7ZT1lfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIuX3RleHRTaXplO2Zvcih2YXIgbD0wO2w8ay5sZW5ndGg7bCsrKXtpZighaChsKSlmb3IodmFyIG09a1tsXS5nZXRQYXRoKGIsYyxlKSxuPWYobS5jb21tYW5kcyksbz0wO288bi5sZW5ndGg7bysrKWZvcih2YXIgcD1kKG5bb10sZykscT0wO3E8cC5sZW5ndGg7cSsrKXBbcV0ueCs9aSxqLnB1c2gocFtxXSk7aSs9a1tsXS5hZHZhbmNlV2lkdGgqdGhpcy5fc2NhbGUoZSl9cmV0dXJuIGp9LHkuRm9udC5wcm90b3R5cGUuX2dldEdseXBocz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5mb250LnN0cmluZ1RvR2x5cGhzKGEpfSx5LkZvbnQucHJvdG90eXBlLl9nZXRQYXRoPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWQmJmQucmVuZGVyZXImJmQucmVuZGVyZXIuX3BJbnN0fHx0aGlzLnBhcmVudCxmPWUuX3JlbmRlcmVyLGc9dGhpcy5faGFuZGxlQWxpZ25tZW50KGYsYSxiLGMpO3JldHVybiB0aGlzLmZvbnQuZ2V0UGF0aChhLGcueCxnLnksZi5fdGV4dFNpemUsZCl9LHkuRm9udC5wcm90b3R5cGUuX2dldFBhdGhEYXRhPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPTM7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGEmJmFyZ3VtZW50cy5sZW5ndGg+Mj9hPXRoaXMuX2dldFBhdGgoYSxiLGMsZCk6XCJvYmplY3RcIj09dHlwZW9mIGImJihkPWIpLGQmJlwibnVtYmVyXCI9PXR5cGVvZiBkLmRlY2ltYWxzJiYoZT1kLmRlY2ltYWxzKSxhLnRvUGF0aERhdGEoZSl9LHkuRm9udC5wcm90b3R5cGUuX2dldFNWRz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0zO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhJiZhcmd1bWVudHMubGVuZ3RoPjI/YT10aGlzLl9nZXRQYXRoKGEsYixjLGQpOlwib2JqZWN0XCI9PXR5cGVvZiBiJiYoZD1iKSxkJiYoXCJudW1iZXJcIj09dHlwZW9mIGQuZGVjaW1hbHMmJihlPWQuZGVjaW1hbHMpLFwibnVtYmVyXCI9PXR5cGVvZiBkLnN0cm9rZVdpZHRoJiYoYS5zdHJva2VXaWR0aD1kLnN0cm9rZVdpZHRoKSx2b2lkIDAhPT1kLmZpbGwmJihhLmZpbGw9ZC5maWxsKSx2b2lkIDAhPT1kLnN0cm9rZSYmKGEuc3Ryb2tlPWQuc3Ryb2tlKSksYS50b1NWRyhlKX0seS5Gb250LnByb3RvdHlwZS5fcmVuZGVyUGF0aD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmPWQmJmQucmVuZGVyZXJ8fHRoaXMucGFyZW50Ll9yZW5kZXJlcixnPWYuZHJhd2luZ0NvbnRleHQ7ZT1cIm9iamVjdFwiPT10eXBlb2YgYSYmYS5jb21tYW5kcz9hLmNvbW1hbmRzOnRoaXMuX2dldFBhdGgoYSxiLGMsZCkuY29tbWFuZHMsZy5iZWdpblBhdGgoKTtmb3IodmFyIGg9MDtoPGUubGVuZ3RoO2grPTEpe3ZhciBpPWVbaF07XCJNXCI9PT1pLnR5cGU/Zy5tb3ZlVG8oaS54LGkueSk6XCJMXCI9PT1pLnR5cGU/Zy5saW5lVG8oaS54LGkueSk6XCJDXCI9PT1pLnR5cGU/Zy5iZXppZXJDdXJ2ZVRvKGkueDEsaS55MSxpLngyLGkueTIsaS54LGkueSk6XCJRXCI9PT1pLnR5cGU/Zy5xdWFkcmF0aWNDdXJ2ZVRvKGkueDEsaS55MSxpLngsaS55KTpcIlpcIj09PWkudHlwZSYmZy5jbG9zZVBhdGgoKX1yZXR1cm4gZi5fZG9TdHJva2UmJmYuX3N0cm9rZVNldCYmZy5zdHJva2UoKSxmLl9kb0ZpbGwmJihmLl9maWxsU2V0fHxmLl9zZXRGaWxsKHouX0RFRkFVTFRfVEVYVF9GSUxMKSxnLmZpbGwoKSksdGhpc30seS5Gb250LnByb3RvdHlwZS5fdGV4dFdpZHRoPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZm9udC5nZXRBZHZhbmNlV2lkdGgoYSxiKX0seS5Gb250LnByb3RvdHlwZS5fdGV4dEFzY2VudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5mb250LmFzY2VuZGVyKnRoaXMuX3NjYWxlKGEpfSx5LkZvbnQucHJvdG90eXBlLl90ZXh0RGVzY2VudD1mdW5jdGlvbihhKXtyZXR1cm4tdGhpcy5mb250LmRlc2NlbmRlcip0aGlzLl9zY2FsZShhKX0seS5Gb250LnByb3RvdHlwZS5fc2NhbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIDEvdGhpcy5mb250LnVuaXRzUGVyRW0qKGF8fHRoaXMucGFyZW50Ll9yZW5kZXJlci5fdGV4dFNpemUpfSx5LkZvbnQucHJvdG90eXBlLl9oYW5kbGVBbGlnbm1lbnQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1hLl90ZXh0U2l6ZTtzd2l0Y2godm9pZCAwPT09ZSYmKGU9dGhpcy5fdGV4dFdpZHRoKGIsZikpLGEuX3RleHRBbGlnbil7Y2FzZSB6LkNFTlRFUjpjLT1lLzI7YnJlYWs7Y2FzZSB6LlJJR0hUOmMtPWV9c3dpdGNoKGEuX3RleHRCYXNlbGluZSl7Y2FzZSB6LlRPUDpkKz10aGlzLl90ZXh0QXNjZW50KGYpO2JyZWFrO2Nhc2Ugei5DRU5URVI6ZCs9dGhpcy5fdGV4dEFzY2VudChmKS8yO2JyZWFrO2Nhc2Ugei5CT1RUT006ZC09dGhpcy5fdGV4dERlc2NlbnQoZil9cmV0dXJue3g6Yyx5OmR9fSxiLmV4cG9ydHM9eX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihhLGIpe3JldHVybiBhLnB1c2goYiksYX0sZC5wcm90b3R5cGUuYXJyYXlDb3B5PWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZzt2b2lkIDAhPT1lPyhnPU1hdGgubWluKGUsYS5sZW5ndGgpLGY9ZCxhPWEuc2xpY2UoYixnK2IpKToodm9pZCAwIT09Yz8oZz1jLGc9TWF0aC5taW4oZyxhLmxlbmd0aCkpOmc9YS5sZW5ndGgsZj0wLGM9YixhPWEuc2xpY2UoMCxnKSksQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShjLFtmLGddLmNvbmNhdChhKSl9LGQucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihhLGIpe3JldHVybiBhLmNvbmNhdChiKX0sZC5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXZlcnNlKCl9LGQucHJvdG90eXBlLnNob3J0ZW49ZnVuY3Rpb24oYSl7cmV0dXJuIGEucG9wKCksYX0sZC5wcm90b3R5cGUuc2h1ZmZsZT1mdW5jdGlvbihhLGIpe3ZhciBjPUFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJkFycmF5QnVmZmVyLmlzVmlldyhhKTthPWJ8fGM/YTphLnNsaWNlKCk7Zm9yKHZhciBkLGUsZj1hLmxlbmd0aDtmPjE7KWQ9TWF0aC5yYW5kb20oKSpmfDAsZT1hWy0tZl0sYVtmXT1hW2RdLGFbZF09ZTtyZXR1cm4gYX0sZC5wcm90b3R5cGUuc29ydD1mdW5jdGlvbihhLGIpe3ZhciBjPWI/YS5zbGljZSgwLE1hdGgubWluKGIsYS5sZW5ndGgpKTphLGQ9Yj9hLnNsaWNlKE1hdGgubWluKGIsYS5sZW5ndGgpKTpbXTtyZXR1cm4gYz1cInN0cmluZ1wiPT10eXBlb2YgY1swXT9jLnNvcnQoKTpjLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS1ifSksYy5jb25jYXQoZCl9LGQucHJvdG90eXBlLnNwbGljZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoYSxbYywwXS5jb25jYXQoYikpLGF9LGQucHJvdG90eXBlLnN1YnNldD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHZvaWQgMCE9PWM/YS5zbGljZShiLGIrYyk6YS5zbGljZShiLGEubGVuZ3RoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmZsb2F0PWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAocGFyc2VGbG9hdCk6cGFyc2VGbG9hdChhKX0sZC5wcm90b3R5cGUuaW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9Ynx8MTAsXCJzdHJpbmdcIj09dHlwZW9mIGE/cGFyc2VJbnQoYSxiKTpcIm51bWJlclwiPT10eXBlb2YgYT8wfGE6XCJib29sZWFuXCI9PXR5cGVvZiBhP2E/MTowOmEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gZC5wcm90b3R5cGUuaW50KGEsYil9KTp2b2lkIDB9LGQucHJvdG90eXBlLnN0cj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLnN0cik6U3RyaW5nKGEpfSxkLnByb3RvdHlwZS5ib29sZWFuPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPzAhPT1hOlwic3RyaW5nXCI9PXR5cGVvZiBhP1widHJ1ZVwiPT09YS50b0xvd2VyQ2FzZSgpOlwiYm9vbGVhblwiPT10eXBlb2YgYT9hOmEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChkLnByb3RvdHlwZS5ib29sZWFuKTp2b2lkIDB9LGQucHJvdG90eXBlLmJ5dGU9ZnVuY3Rpb24oYSl7dmFyIGI9ZC5wcm90b3R5cGUuaW50KGEsMTApO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBiPyhiKzEyOCklMjU2LTEyODpiIGluc3RhbmNlb2YgQXJyYXk/Yi5tYXAoZC5wcm90b3R5cGUuYnl0ZSk6dm9pZCAwfSxkLnByb3RvdHlwZS5jaGFyPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiBhfHxpc05hTihhKT9hIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUuY2hhcik6XCJzdHJpbmdcIj09dHlwZW9mIGE/ZC5wcm90b3R5cGUuY2hhcihwYXJzZUludChhLDEwKSk6dm9pZCAwOlN0cmluZy5mcm9tQ2hhckNvZGUoYSl9LGQucHJvdG90eXBlLnVuY2hhcj1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYSYmMT09PWEubGVuZ3RoP2EuY2hhckNvZGVBdCgwKTphIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUudW5jaGFyKTp2b2lkIDB9LGQucHJvdG90eXBlLmhleD1mdW5jdGlvbihhLGIpe2lmKGI9dm9pZCAwPT09Ynx8bnVsbD09PWI/Yj04OmIsYSBpbnN0YW5jZW9mIEFycmF5KXJldHVybiBhLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gZC5wcm90b3R5cGUuaGV4KGEsYil9KTtpZihcIm51bWJlclwiPT10eXBlb2YgYSl7YTwwJiYoYT00Mjk0OTY3Mjk1K2ErMSk7Zm9yKHZhciBjPU51bWJlcihhKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtjLmxlbmd0aDxiOyljPVwiMFwiK2M7cmV0dXJuIGMubGVuZ3RoPj1iJiYoYz1jLnN1YnN0cmluZyhjLmxlbmd0aC1iLGMubGVuZ3RoKSksY319LGQucHJvdG90eXBlLnVuaGV4PWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUudW5oZXgpOnBhcnNlSW50KFwiMHhcIithLDE2KX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjKXt2YXIgZD1hPDAsZT1kP2EudG9TdHJpbmcoKS5zdWJzdHJpbmcoMSk6YS50b1N0cmluZygpLGY9ZS5pbmRleE9mKFwiLlwiKSxnPS0xIT09Zj9lLnN1YnN0cmluZygwLGYpOmUsaD0tMSE9PWY/ZS5zdWJzdHJpbmcoZisxKTpcIlwiLGk9ZD9cIi1cIjpcIlwiO2lmKHZvaWQgMCE9PWMpe3ZhciBqPVwiXCI7KC0xIT09Znx8Yy1oLmxlbmd0aD4wKSYmKGo9XCIuXCIpLGgubGVuZ3RoPmMmJihoPWguc3Vic3RyaW5nKDAsYykpO2Zvcih2YXIgaz0wO2s8Yi1nLmxlbmd0aDtrKyspaSs9XCIwXCI7aSs9ZyxpKz1qLGkrPWg7Zm9yKHZhciBsPTA7bDxjLWgubGVuZ3RoO2wrKylpKz1cIjBcIjtyZXR1cm4gaX1mb3IodmFyIG09MDttPE1hdGgubWF4KGItZy5sZW5ndGgsMCk7bSsrKWkrPVwiMFwiO3JldHVybiBpKz1lfWZ1bmN0aW9uIGUoYSxiKXthPWEudG9TdHJpbmcoKTt2YXIgYz1hLmluZGV4T2YoXCIuXCIpLGQ9LTEhPT1jP2Euc3Vic3RyaW5nKGMpOlwiXCIsZT0tMSE9PWM/YS5zdWJzdHJpbmcoMCxjKTphO2lmKGU9ZS50b1N0cmluZygpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csXCIsXCIpLDA9PT1iKWQ9XCJcIjtlbHNlIGlmKHZvaWQgMCE9PWIpaWYoYj5kLmxlbmd0aCl7ZCs9LTE9PT1jP1wiLlwiOlwiXCI7Zm9yKHZhciBmPWItZC5sZW5ndGgrMSxnPTA7ZzxmO2crKylkKz1cIjBcIn1lbHNlIGQ9ZC5zdWJzdHJpbmcoMCxiKzEpO3JldHVybiBlK2R9ZnVuY3Rpb24gZihhKXtyZXR1cm4gcGFyc2VGbG9hdChhKT4wP1wiK1wiK2EudG9TdHJpbmcoKTphLnRvU3RyaW5nKCl9ZnVuY3Rpb24gZyhhKXtyZXR1cm4gcGFyc2VGbG9hdChhKT4wP1wiIFwiK2EudG9TdHJpbmcoKTphLnRvU3RyaW5nKCl9dmFyIGg9YShcIi4uL2NvcmUvbWFpblwiKTthKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGgucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiam9pblwiLGFyZ3VtZW50cyksYS5qb2luKGIpfSxoLnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbihhLGIpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYXRjaFwiLGFyZ3VtZW50cyksYS5tYXRjaChiKX0saC5wcm90b3R5cGUubWF0Y2hBbGw9ZnVuY3Rpb24oYSxiKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYXRjaEFsbFwiLGFyZ3VtZW50cyk7Zm9yKHZhciBjPW5ldyBSZWdFeHAoYixcImdcIiksZD1jLmV4ZWMoYSksZT1bXTtudWxsIT09ZDspZS5wdXNoKGQpLGQ9Yy5leGVjKGEpO3JldHVybiBlfSxoLnByb3RvdHlwZS5uZj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5mXCIsYXJndW1lbnRzKSxhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGQoYSxiLGMpfSk6XCJbb2JqZWN0IEFyZ3VtZW50c11cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKT8zPT09YS5sZW5ndGg/dGhpcy5uZihhWzBdLGFbMV0sYVsyXSk6Mj09PWEubGVuZ3RoP3RoaXMubmYoYVswXSxhWzFdKTp0aGlzLm5mKGFbMF0pOmQoYSxiLGMpfSxoLnByb3RvdHlwZS5uZmM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibmZjXCIsYXJndW1lbnRzKSxhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSxiKX0pOmUoYSxiKX0saC5wcm90b3R5cGUubmZwPWZ1bmN0aW9uKCl7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibmZwXCIsYXJndW1lbnRzKTt2YXIgYT1oLnByb3RvdHlwZS5uZi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChmKTpmKGEpfSxoLnByb3RvdHlwZS5uZnM9ZnVuY3Rpb24oKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJuZnNcIixhcmd1bWVudHMpO3ZhciBhPWgucHJvdG90eXBlLm5mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGcpOmcoYSl9LGgucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwbGl0XCIsYXJndW1lbnRzKSxhLnNwbGl0KGIpfSxoLnByb3RvdHlwZS5zcGxpdFRva2Vucz1mdW5jdGlvbihhLGIpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwbGl0VG9rZW5zXCIsYXJndW1lbnRzKTt2YXIgYztpZih2b2lkIDAhPT1iKXt2YXIgZD1iLGU9L1xcXS9nLmV4ZWMoZCksZj0vXFxbL2cuZXhlYyhkKTtmJiZlPyhkPWQuc2xpY2UoMCxlLmluZGV4KStkLnNsaWNlKGUuaW5kZXgrMSksZj0vXFxbL2cuZXhlYyhkKSxkPWQuc2xpY2UoMCxmLmluZGV4KStkLnNsaWNlKGYuaW5kZXgrMSksYz1uZXcgUmVnRXhwKFwiW1xcXFxbXCIrZCtcIlxcXFxdXVwiLFwiZ1wiKSk6ZT8oZD1kLnNsaWNlKDAsZS5pbmRleCkrZC5zbGljZShlLmluZGV4KzEpLGM9bmV3IFJlZ0V4cChcIltcIitkK1wiXFxcXF1dXCIsXCJnXCIpKTpmPyhkPWQuc2xpY2UoMCxmLmluZGV4KStkLnNsaWNlKGYuaW5kZXgrMSksYz1uZXcgUmVnRXhwKFwiW1wiK2QrXCJcXFxcW11cIixcImdcIikpOmM9bmV3IFJlZ0V4cChcIltcIitkK1wiXVwiLFwiZ1wiKX1lbHNlIGM9L1xccy9nO3JldHVybiBhLnNwbGl0KGMpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYX0pfSxoLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKGEpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0cmltXCIsYXJndW1lbnRzKSxhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAodGhpcy50cmltKTphLnRyaW0oKX0sYi5leHBvcnRzPWh9LHtcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjR9XSw2MzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuZGF5PWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXREYXRlKCl9LGQucHJvdG90eXBlLmhvdXI9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldEhvdXJzKCl9LGQucHJvdG90eXBlLm1pbnV0ZT1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0TWludXRlcygpfSxkLnByb3RvdHlwZS5taWxsaXM9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpfSxkLnByb3RvdHlwZS5tb250aD1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0TW9udGgoKSsxfSxkLnByb3RvdHlwZS5zZWNvbmQ9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFNlY29uZHMoKX0sZC5wcm90b3R5cGUueWVhcj1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2EoXCIuL3A1Lkdlb21ldHJ5XCIpO3ZhciBlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLnByb3RvdHlwZS5wbGFuZT1mdW5jdGlvbihhLGIsYyxlKXt0aGlzLl9hc3NlcnQzZChcInBsYW5lXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBsYW5lXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9MSksdm9pZCAwPT09ZSYmKGU9MSk7dmFyIGY9XCJwbGFuZXxcIitjK1wifFwiK2U7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGYpKXt2YXIgZz1mdW5jdGlvbigpe2Zvcih2YXIgYSxiLGMsZT0wO2U8PXRoaXMuZGV0YWlsWTtlKyspe2I9ZS90aGlzLmRldGFpbFk7Zm9yKHZhciBmPTA7Zjw9dGhpcy5kZXRhaWxYO2YrKylhPWYvdGhpcy5kZXRhaWxYLGM9bmV3IGQuVmVjdG9yKGEtLjUsYi0uNSwwKSx0aGlzLnZlcnRpY2VzLnB1c2goYyksdGhpcy51dnMucHVzaChhLGIpfX0saD1uZXcgZC5HZW9tZXRyeShjLGUsZyk7aC5jb21wdXRlRmFjZXMoKS5jb21wdXRlTm9ybWFscygpLGM8PTEmJmU8PTE/aC5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gcGxhbmUgb2JqZWN0cyB3aXRoIG1vcmUgdGhhbiAxIGRldGFpbFggb3IgMSBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoZixoKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoZixhLGIsMSksdGhpc30sZC5wcm90b3R5cGUuYm94PWZ1bmN0aW9uKGEsYixjLGUsZil7dGhpcy5fYXNzZXJ0M2QoXCJib3hcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYm94XCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9Yik7dmFyIGc9dGhpcy5fcmVuZGVyZXIuYXR0cmlidXRlcyYmdGhpcy5fcmVuZGVyZXIuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nO3ZvaWQgMD09PWUmJihlPWc/MTo0KSx2b2lkIDA9PT1mJiYoZj1nPzE6NCk7dmFyIGg9XCJib3h8XCIrZStcInxcIitmO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChoKSl7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgYT1bWzAsNCwyLDZdLFsxLDMsNSw3XSxbMCwxLDQsNV0sWzIsNiwzLDddLFswLDIsMSwzXSxbNCw1LDYsN11dO3RoaXMuc3Ryb2tlSW5kaWNlcz1bWzAsMV0sWzEsM10sWzMsMl0sWzYsN10sWzgsOV0sWzksMTFdLFsxNCwxNV0sWzE2LDE3XSxbMTcsMTldLFsxOCwxOV0sWzIwLDIxXSxbMjIsMjNdXTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl7Zm9yKHZhciBjPWFbYl0sZT00KmIsZj0wO2Y8NDtmKyspe3ZhciBnPWNbZl0saD1uZXcgZC5WZWN0b3IoKDIqKDEmZyktMSkvMiwoKDImZyktMSkvMiwoKDQmZykvMi0xKS8yKTt0aGlzLnZlcnRpY2VzLnB1c2goaCksdGhpcy51dnMucHVzaCgxJmYsKDImZikvMil9dGhpcy5mYWNlcy5wdXNoKFtlLGUrMSxlKzJdKSx0aGlzLmZhY2VzLnB1c2goW2UrMixlKzEsZSszXSl9fSxqPW5ldyBkLkdlb21ldHJ5KGUsZixpKTtqLmNvbXB1dGVOb3JtYWxzKCksZTw9NCYmZjw9ND9qLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBib3ggb2JqZWN0cyB3aXRoIG1vcmUgdGhhbiA0IGRldGFpbFggb3IgNCBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoaCxqKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoaCxhLGIsYyksdGhpc30sZC5wcm90b3R5cGUuc3BoZXJlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJzcGhlcmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3BoZXJlXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9MjQpLHZvaWQgMD09PWMmJihjPTE2KSx0aGlzLmVsbGlwc29pZChhLGEsYSxiLGMpLHRoaXN9O3ZhciBmPWZ1bmN0aW9uKGEsYixjLGUsZixnLGgpe2E9YTw9MD8xOmEsYj1iPDA/MDpiLGM9Yzw9MD9hOmMsZT1lPDM/MzplLGY9ZjwxPzE6ZixnPXZvaWQgMD09PWd8fGcsaD12b2lkIDA9PT1oPzAhPT1iOmg7dmFyIGksaixrLGwsbSxuPWc/LTI6MCxvPWYrKGg/MjowKSxwPXt9LHE9TWF0aC5hdGFuMihhLWIsYyk7Zm9yKGk9bjtpPD1vOysraSl7dmFyIHIscz1pL2YsdD1jKnM7Zm9yKGk8MD8odD0wLHM9MCxyPWEpOmk+Zj8odD1jLHM9MSxyPWIpOnI9YSsoYi1hKSpzLC0yIT09aSYmaSE9PWYrMnx8KHI9MCksdC09Yy8yLHBbaV09MD09PXI/MTplLGo9MDtqPHBbaV07KytqKXt2YXIgdT1qL2U7dGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihNYXRoLnNpbigyKnUqTWF0aC5QSSkqcix0LE1hdGguY29zKDIqdSpNYXRoLlBJKSpyKSksdGhpcy52ZXJ0ZXhOb3JtYWxzLnB1c2gobmV3IGQuVmVjdG9yKGk8MHx8aT5mPzA6TWF0aC5zaW4oMip1Kk1hdGguUEkpKk1hdGguY29zKHEpLGk8MD8tMTppPmY/MTpNYXRoLnNpbihxKSxpPDB8fGk+Zj8wOk1hdGguY29zKDIqdSpNYXRoLlBJKSpNYXRoLmNvcyhxKSkpLHRoaXMudXZzLnB1c2godSxzKX19dmFyIHY9MDtpZihnKXtmb3Ioaz0wO2s8cFstMV07KytrKW09KGsrMSklcFstMV0sdGhpcy5mYWNlcy5wdXNoKFt2LHYrMSttLHYrMStrXSk7dis9cFstMl0rcFstMV19Zm9yKGk9MDtpPGY7KytpKXtmb3Ioaj0wO2o8cFtpXTsrK2opMT09PXBbaSsxXT8obD0oaisxKSVwW2ldLHRoaXMuZmFjZXMucHVzaChbditqLHYrbCx2K3BbaV1dKSk6KGw9KGorMSklcFtpXSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K2wsditwW2ldK2xdKSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K3BbaV0rbCx2K3BbaV0ral0pKTt2Kz1wW2ldfWlmKGgpZm9yKHYrPXBbZl0saj0wO2o8cFtmKzFdOysrailsPShqKzEpJXBbZisxXSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K2wsditwW2YrMV1dKX07ZC5wcm90b3R5cGUuY3lsaW5kZXI9ZnVuY3Rpb24oYSxiLGMsZSxnLGgpe3RoaXMuX2Fzc2VydDNkKFwiY3lsaW5kZXJcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3lsaW5kZXJcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj1hKSx2b2lkIDA9PT1jJiYoYz0yNCksdm9pZCAwPT09ZSYmKGU9MSksdm9pZCAwPT09aCYmKGg9ITApLFxudm9pZCAwPT09ZyYmKGc9ITApO3ZhciBpPVwiY3lsaW5kZXJ8XCIrYytcInxcIitlK1wifFwiK2crXCJ8XCIraDtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goaSkpe3ZhciBqPW5ldyBkLkdlb21ldHJ5KGMsZSk7Zi5jYWxsKGosMSwxLDEsYyxlLGcsaCksai5jb21wdXRlTm9ybWFscygpLGM8PTI0JiZlPD0xNj9qLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBjeWxpbmRlciBvYmplY3RzIHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMTYgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGksail9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGksYSxiLGEpLHRoaXN9LGQucHJvdG90eXBlLmNvbmU9ZnVuY3Rpb24oYSxiLGMsZSxnKXt0aGlzLl9hc3NlcnQzZChcImNvbmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29uZVwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPTI0KSx2b2lkIDA9PT1lJiYoZT0xKSx2b2lkIDA9PT1nJiYoZz0hMCk7dmFyIGg9XCJjb25lfFwiK2MrXCJ8XCIrZStcInxcIitnO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChoKSl7dmFyIGk9bmV3IGQuR2VvbWV0cnkoYyxlKTtmLmNhbGwoaSwxLDAsMSxjLGUsZywhMSksaS5jb21wdXRlTm9ybWFscygpLGM8PTI0JiZlPD0xNj9pLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBjb25lIG9iamVjdHMgd2l0aCBtb3JlIHRoYW4gMjQgZGV0YWlsWCBvciAxNiBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoaCxpKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoaCxhLGIsYSksdGhpc30sZC5wcm90b3R5cGUuZWxsaXBzb2lkPWZ1bmN0aW9uKGEsYixjLGUsZil7dGhpcy5fYXNzZXJ0M2QoXCJlbGxpcHNvaWRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZWxsaXBzb2lkXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9YSksdm9pZCAwPT09ZSYmKGU9MjQpLHZvaWQgMD09PWYmJihmPTE2KTt2YXIgZz1cImVsbGlwc29pZHxcIitlK1wifFwiK2Y7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGcpKXt2YXIgaD1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspZm9yKHZhciBiPWEvdGhpcy5kZXRhaWxZLGM9TWF0aC5QSSpiLU1hdGguUEkvMixlPU1hdGguY29zKGMpLGY9TWF0aC5zaW4oYyksZz0wO2c8PXRoaXMuZGV0YWlsWDtnKyspe3ZhciBoPWcvdGhpcy5kZXRhaWxYLGk9MipNYXRoLlBJKmgsaj1NYXRoLmNvcyhpKSxrPU1hdGguc2luKGkpLGw9bmV3IGQuVmVjdG9yKGUqayxmLGUqaik7dGhpcy52ZXJ0aWNlcy5wdXNoKGwpLHRoaXMudmVydGV4Tm9ybWFscy5wdXNoKGwpLHRoaXMudXZzLnB1c2goaCxiKX19LGk9bmV3IGQuR2VvbWV0cnkoZSxmLGgpO2kuY29tcHV0ZUZhY2VzKCksZTw9MjQmJmY8PTI0P2kuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlIG9uIGVsbGlwc29pZHMgd2l0aCBtb3JlIHRoYW4gMjQgZGV0YWlsWCBvciAyNCBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoZyxpKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoZyxhLGIsYyksdGhpc30sZC5wcm90b3R5cGUudG9ydXM9ZnVuY3Rpb24oYSxiLGMsZSl7aWYodGhpcy5fYXNzZXJ0M2QoXCJ0b3J1c1wiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0b3J1c1wiLGFyZ3VtZW50cyksdm9pZCAwPT09YSlhPTUwO2Vsc2UgaWYoIWEpcmV0dXJuO2lmKHZvaWQgMD09PWIpYj0xMDtlbHNlIGlmKCFiKXJldHVybjt2b2lkIDA9PT1jJiYoYz0yNCksdm9pZCAwPT09ZSYmKGU9MTYpO3ZhciBmPShiL2EpLnRvUHJlY2lzaW9uKDQpLGc9XCJ0b3J1c3xcIitmK1wifFwiK2MrXCJ8XCIrZTtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goZykpe3ZhciBoPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTw9dGhpcy5kZXRhaWxZO2ErKylmb3IodmFyIGI9YS90aGlzLmRldGFpbFksYz0yKk1hdGguUEkqYixlPU1hdGguY29zKGMpLGc9TWF0aC5zaW4oYyksaD0xK2YqZSxpPTA7aTw9dGhpcy5kZXRhaWxYO2krKyl7dmFyIGo9aS90aGlzLmRldGFpbFgsaz0yKk1hdGguUEkqaixsPU1hdGguY29zKGspLG09TWF0aC5zaW4oayksbj1uZXcgZC5WZWN0b3IoaCpsLGgqbSxmKmcpLG89bmV3IGQuVmVjdG9yKGUqbCxlKm0sZyk7dGhpcy52ZXJ0aWNlcy5wdXNoKG4pLHRoaXMudmVydGV4Tm9ybWFscy5wdXNoKG8pLHRoaXMudXZzLnB1c2goaixiKX19LGk9bmV3IGQuR2VvbWV0cnkoYyxlLGgpO2kuY29tcHV0ZUZhY2VzKCksYzw9MjQmJmU8PTE2P2kuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlcyBvbiB0b3J1cyBvYmplY3Qgd2l0aCBtb3JlIHRoYW4gMjQgZGV0YWlsWCBvciAxNiBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoZyxpKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoZyxhLGEsYSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihhLGIsYyl7dGhpcy5fdXNlUG9pbnRTaGFkZXIoKSx0aGlzLmN1clBvaW50U2hhZGVyLmJpbmRTaGFkZXIoKSx2b2lkIDA9PT1jJiYoYz0wKTt2YXIgZT1bXTtyZXR1cm4gZS5wdXNoKG5ldyBkLlZlY3RvcihhLGIsYykpLHRoaXMuX2RyYXdQb2ludHMoZSx0aGlzLl9wb2ludFZlcnRleEJ1ZmZlciksdGhpcy5jdXJQb2ludFNoYWRlci51bmJpbmRTaGFkZXIoKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnRyaWFuZ2xlPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGU9YVsyXSxmPWFbM10sZz1hWzRdLGg9YVs1XSxpPVwidHJpXCI7aWYoIXRoaXMuZ2VvbWV0cnlJbkhhc2goaSkpe3ZhciBqPWZ1bmN0aW9uKCl7dmFyIGE9W107YS5wdXNoKG5ldyBkLlZlY3RvcigwLDAsMCkpLGEucHVzaChuZXcgZC5WZWN0b3IoMCwxLDApKSxhLnB1c2gobmV3IGQuVmVjdG9yKDEsMCwwKSksdGhpcy5zdHJva2VJbmRpY2VzPVtbMCwxXSxbMSwyXSxbMiwwXV0sdGhpcy52ZXJ0aWNlcz1hLHRoaXMuZmFjZXM9W1swLDEsMl1dLHRoaXMudXZzPVswLDAsMCwxLDEsMV19LGs9bmV3IGQuR2VvbWV0cnkoMSwxLGopO2suX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpLGsuY29tcHV0ZU5vcm1hbHMoKSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoaSxrKX12YXIgbD10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3ZhciBtPW5ldyBkLk1hdHJpeChbZS1iLGYtYywwLDAsZy1iLGgtYywwLDAsMCwwLDEsMCxiLGMsMCwxXSkubXVsdCh0aGlzLnVNVk1hdHJpeCk7dGhpcy51TVZNYXRyaXg9bSx0aGlzLmRyYXdCdWZmZXJzKGkpfWZpbmFsbHl7dGhpcy51TVZNYXRyaXg9bH1yZXR1cm4gdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5lbGxpcHNlPWZ1bmN0aW9uKGEpe3RoaXMuYXJjKGFbMF0sYVsxXSxhWzJdLGFbM10sMCxlLlRXT19QSSxlLk9QRU4sYVs0XSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuYXJjPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZj1hcmd1bWVudHNbMF0sZz1hcmd1bWVudHNbMV0saD1hcmd1bWVudHNbMl0saT1hcmd1bWVudHNbM10saj1hcmd1bWVudHNbNF0saz1hcmd1bWVudHNbNV0sbD1hcmd1bWVudHNbNl0sbT1hcmd1bWVudHNbN118fDI1O2lmKE1hdGguYWJzKGstaik+PWUuVFdPX1BJPyhiPVwiZWxsaXBzZVwiLGM9YitcInxcIittK1wifFwiKTooYj1cImFyY1wiLGM9YitcInxcIitqK1wifFwiK2srXCJ8XCIrbCtcInxcIittK1wifFwiKSwhdGhpcy5nZW9tZXRyeUluSGFzaChjKSl7dmFyIG49ZnVuY3Rpb24oKXtpZih0aGlzLnN0cm9rZUluZGljZXM9W10sai50b0ZpeGVkKDEwKSE9PWsudG9GaXhlZCgxMCkpe2whPT1lLlBJRSYmdm9pZCAwIT09bHx8KHRoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoLjUsLjUsMCkpLHRoaXMudXZzLnB1c2goWy41LC41XSkpO2Zvcih2YXIgYT0wO2E8PW07YSsrKXt2YXIgYj1hL20sYz0oay1qKSpiK2osZj0uNStNYXRoLmNvcyhjKS8yLGc9LjUrTWF0aC5zaW4oYykvMjt0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGYsZywwKSksdGhpcy51dnMucHVzaChbZixnXSksYTxtLTEmJih0aGlzLmZhY2VzLnB1c2goWzAsYSsxLGErMl0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFthKzEsYSsyXSkpfXN3aXRjaChsKXtjYXNlIGUuUElFOnRoaXMuZmFjZXMucHVzaChbMCx0aGlzLnZlcnRpY2VzLmxlbmd0aC0yLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCwxXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goW3RoaXMudmVydGljZXMubGVuZ3RoLTIsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKTticmVhaztjYXNlIGUuQ0hPUkQ6dGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKTticmVhaztjYXNlIGUuT1BFTjp0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCwxXSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmZhY2VzLnB1c2goWzAsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMix0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goW3RoaXMudmVydGljZXMubGVuZ3RoLTIsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pfX19LG89bmV3IGQuR2VvbWV0cnkobSwxLG4pO28uY29tcHV0ZU5vcm1hbHMoKSxtPD01MD9vLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMobyk6Y29uc29sZS5sb2coXCJDYW5ub3Qgc3Ryb2tlIFwiK2IrXCIgd2l0aCBtb3JlIHRoYW4gNTAgZGV0YWlsXCIpLHRoaXMuY3JlYXRlQnVmZmVycyhjLG8pfXZhciBwPXRoaXMudU1WTWF0cml4LmNvcHkoKTt0cnl7dGhpcy51TVZNYXRyaXgudHJhbnNsYXRlKFtmLGcsMF0pLHRoaXMudU1WTWF0cml4LnNjYWxlKGgsaSwxKSx0aGlzLmRyYXdCdWZmZXJzKGMpfWZpbmFsbHl7dGhpcy51TVZNYXRyaXg9cH1yZXR1cm4gdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nLGM9YVswXSxlPWFbMV0sZj1hWzJdLGc9YVszXSxoPWFbNF18fChiPzE6MjQpLGk9YVs1XXx8KGI/MToxNiksaj1cInJlY3R8XCIraCtcInxcIitpO2lmKCF0aGlzLmdlb21ldHJ5SW5IYXNoKGopKXt2YXIgaz1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspZm9yKHZhciBiPWEvdGhpcy5kZXRhaWxZLGM9MDtjPD10aGlzLmRldGFpbFg7YysrKXt2YXIgZT1jL3RoaXMuZGV0YWlsWCxmPW5ldyBkLlZlY3RvcihlLGIsMCk7dGhpcy52ZXJ0aWNlcy5wdXNoKGYpLHRoaXMudXZzLnB1c2goZSxiKX1oPjAmJmk+MCYmKHRoaXMuc3Ryb2tlSW5kaWNlcz1bWzAsaF0sW2gsKGgrMSkqKGkrMSktMV0sWyhoKzEpKihpKzEpLTEsKGgrMSkqaV0sWyhoKzEpKmksMF1dKX0sbD1uZXcgZC5HZW9tZXRyeShoLGksayk7bC5jb21wdXRlRmFjZXMoKS5jb21wdXRlTm9ybWFscygpLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoaixsKX12YXIgbT10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3RoaXMudU1WTWF0cml4LnRyYW5zbGF0ZShbYyxlLDBdKSx0aGlzLnVNVk1hdHJpeC5zY2FsZShmLGcsMSksdGhpcy5kcmF3QnVmZmVycyhqKX1maW5hbGx5e3RoaXMudU1WTWF0cml4PW19cmV0dXJuIHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucXVhZD1mdW5jdGlvbihhLGIsYyxlLGYsZyxoLGkpe3ZhciBqPVwicXVhZHxcIithK1wifFwiK2IrXCJ8XCIrYytcInxcIitlK1wifFwiK2YrXCJ8XCIrZytcInxcIitoK1wifFwiK2k7aWYoIXRoaXMuZ2VvbWV0cnlJbkhhc2goaikpe3ZhciBrPWZ1bmN0aW9uKCl7dGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihhLGIsMCkpLHRoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoYyxlLDApKSx0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGYsZywwKSksdGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihoLGksMCkpLHRoaXMudXZzLnB1c2goMCwwLDEsMCwxLDEsMCwxKSx0aGlzLnN0cm9rZUluZGljZXM9W1swLDFdLFsxLDJdLFsyLDNdLFszLDBdXX0sbD1uZXcgZC5HZW9tZXRyeSgyLDIsayk7bC5jb21wdXRlTm9ybWFscygpLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSxsLmZhY2VzPVtbMCwxLDJdLFsyLDMsMF1dLHRoaXMuY3JlYXRlQnVmZmVycyhqLGwpfXJldHVybiB0aGlzLmRyYXdCdWZmZXJzKGopLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuYmV6aWVyPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpLGosayxsKXs4PT09YXJndW1lbnRzLmxlbmd0aCYmKGo9ZyxrPWgsZz1lLGg9ZCxkPWMsZT1kLGM9Zj1pPWw9MCk7dmFyIG09dGhpcy5fcEluc3QuX2JlemllckRldGFpbHx8MjA7dGhpcy5iZWdpblNoYXBlKCk7Zm9yKHZhciBuPTA7bjw9bTtuKyspe3ZhciBvPU1hdGgucG93KDEtbi9tLDMpLHA9bi9tKjMqTWF0aC5wb3coMS1uL20sMikscT0zKk1hdGgucG93KG4vbSwyKSooMS1uL20pLHI9TWF0aC5wb3cobi9tLDMpO3RoaXMudmVydGV4KGEqbytkKnArZypxK2oqcixiKm8rZSpwK2gqcStrKnIsYypvK2YqcCtpKnErbCpyKX1yZXR1cm4gdGhpcy5lbmRTaGFwZSgpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuY3VydmU9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGksaixrLGwpezg9PT1hcmd1bWVudHMubGVuZ3RoJiYoaj1nLGs9aCxnPWUsaD1kLGQ9YyxlPWQsYz1mPWk9bD0wKTt2YXIgbT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7dGhpcy5iZWdpblNoYXBlKCk7Zm9yKHZhciBuPTA7bjw9bTtuKyspe3ZhciBvPS41Kk1hdGgucG93KG4vbSwzKSxwPS41Kk1hdGgucG93KG4vbSwyKSxxPW4vbSouNSxyPS41LHM9byooMypkLWEtMypnK2opK3AqKDIqYS01KmQrNCpnLWopK3EqKC1hK2cpK3IqKDIqZCksdD1vKigzKmUtYi0zKmgraykrcCooMipiLTUqZSs0KmgtaykrcSooLWIraCkrciooMiplKSx1PW8qKDMqZi1jLTMqaStsKStwKigyKmMtNSpmKzQqaS1sKStxKigtYytpKStyKigyKmYpO3RoaXMudmVydGV4KHMsdCx1KX1yZXR1cm4gdGhpcy5lbmRTaGFwZSgpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUubGluZT1mdW5jdGlvbigpe3JldHVybiA2PT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5iZWdpblNoYXBlKCksdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pLHRoaXMudmVydGV4KGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNF0sYXJndW1lbnRzWzVdKSx0aGlzLmVuZFNoYXBlKCkpOjQ9PT1hcmd1bWVudHMubGVuZ3RoJiYodGhpcy5iZWdpblNoYXBlKCksdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSwwKSx0aGlzLnZlcnRleChhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLDApLHRoaXMuZW5kU2hhcGUoKSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5iZXppZXJWZXJ0ZXg9ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXgubGVuZ3RoKXRocm93IEVycm9yKFwidmVydGV4KCkgbXVzdCBiZSB1c2VkIG9uY2UgYmVmb3JlIGNhbGxpbmcgYmV6aWVyVmVydGV4KClcIik7dmFyIGEsYixjLGQsZSxmPVtdLGc9W10saD1bXSxpPWFyZ3VtZW50cy5sZW5ndGg7aWYoYT0wLDA9PT10aGlzLl9sb29rVXBUYWJsZUJlemllci5sZW5ndGh8fHRoaXMuX2x1dEJlemllckRldGFpbCE9PXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbCl7dGhpcy5fbG9va1VwVGFibGVCZXppZXI9W10sdGhpcy5fbHV0QmV6aWVyRGV0YWlsPXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbDtmb3IodmFyIGo9MS90aGlzLl9sdXRCZXppZXJEZXRhaWwsaz0wLGw9MSxtPTA7azwxOyl7aWYoYT1wYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksdGhpcy5fbG9va1VwVGFibGVCZXppZXJbbV09dGhpcy5fYmV6aWVyQ29lZmZpY2llbnRzKGEpLGwudG9GaXhlZCg2KT09PWoudG9GaXhlZCg2KSl7YT1wYXJzZUZsb2F0KGwudG9GaXhlZCg2KSkrcGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLCsrbSx0aGlzLl9sb29rVXBUYWJsZUJlemllclttXT10aGlzLl9iZXppZXJDb2VmZmljaWVudHMoYSk7YnJlYWt9ays9aixsLT1qLCsrbX19dmFyIG49dGhpcy5fbG9va1VwVGFibGVCZXppZXIubGVuZ3RoO2lmKDY9PT1pKXtmb3IodGhpcy5pc0Jlemllcj0hMCxmPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXSxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1s0XV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNV1dLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZlszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2dbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sdGhpcy52ZXJ0ZXgoYixjKTt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXT1hcmd1bWVudHNbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV09YXJndW1lbnRzWzVdfWVsc2UgaWYoOT09PWkpe2Zvcih0aGlzLmlzQmV6aWVyPSEwLGY9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzBdLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzZdXSxnPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsxXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzRdLGFyZ3VtZW50c1s3XV0saD1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMl0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1s1XSxhcmd1bWVudHNbOF1dLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZlszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2dbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sZD1oWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2hbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0raFsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStoWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyxkKTt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXT1hcmd1bWVudHNbNl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV09YXJndW1lbnRzWzddLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzJdPWFyZ3VtZW50c1s4XX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucXVhZHJhdGljVmVydGV4PWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4Lmxlbmd0aCl0aHJvdyBFcnJvcihcInZlcnRleCgpIG11c3QgYmUgdXNlZCBvbmNlIGJlZm9yZSBjYWxsaW5nIHF1YWRyYXRpY1ZlcnRleCgpXCIpO3ZhciBhLGIsYyxkLGUsZj1bXSxnPVtdLGg9W10saT1hcmd1bWVudHMubGVuZ3RoO2lmKGE9MCwwPT09dGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWMubGVuZ3RofHx0aGlzLl9sdXRRdWFkcmF0aWNEZXRhaWwhPT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWwpe3RoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljPVtdLHRoaXMuX2x1dFF1YWRyYXRpY0RldGFpbD10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7Zm9yKHZhciBqPTEvdGhpcy5fbHV0UXVhZHJhdGljRGV0YWlsLGs9MCxsPTEsbT0wO2s8MTspe2lmKGE9cGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLHRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW21dPXRoaXMuX3F1YWRyYXRpY0NvZWZmaWNpZW50cyhhKSxsLnRvRml4ZWQoNik9PT1qLnRvRml4ZWQoNikpe2E9cGFyc2VGbG9hdChsLnRvRml4ZWQoNikpK3BhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSwrK20sdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbbV09dGhpcy5fcXVhZHJhdGljQ29lZmZpY2llbnRzKGEpO2JyZWFrfWsrPWosbC09aiwrK219fXZhciBuPXRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljLmxlbmd0aDtpZig0PT09aSl7Zm9yKHRoaXMuaXNRdWFkcmF0aWM9ITAsZj1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF0sYXJndW1lbnRzWzBdLGFyZ3VtZW50c1syXV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1szXV0sZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLHRoaXMudmVydGV4KGIsYyk7dGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF09YXJndW1lbnRzWzJdLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdPWFyZ3VtZW50c1szXX1lbHNlIGlmKDY9PT1pKXtmb3IodGhpcy5pc1F1YWRyYXRpYz0hMCxmPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFswXSxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzNdXSxnPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzRdXSxoPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsyXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzVdXSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sZD1oWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2hbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0raFsyXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSx0aGlzLnZlcnRleChiLGMsZCk7dGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF09YXJndW1lbnRzWzNdLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdPWFyZ3VtZW50c1s0XSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsyXT1hcmd1bWVudHNbNV19fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmN1cnZlVmVydGV4PWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmPVtdLGc9W10saD1bXTthPTA7dmFyIGk9YXJndW1lbnRzLmxlbmd0aDtpZigwPT09dGhpcy5fbG9va1VwVGFibGVCZXppZXIubGVuZ3RofHx0aGlzLl9sdXRCZXppZXJEZXRhaWwhPT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWwpe3RoaXMuX2xvb2tVcFRhYmxlQmV6aWVyPVtdLHRoaXMuX2x1dEJlemllckRldGFpbD10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7Zm9yKHZhciBqPTEvdGhpcy5fbHV0QmV6aWVyRGV0YWlsLGs9MCxsPTEsbT0wO2s8MTspe2lmKGE9cGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW21dPXRoaXMuX2JlemllckNvZWZmaWNpZW50cyhhKSxsLnRvRml4ZWQoNik9PT1qLnRvRml4ZWQoNikpe2E9cGFyc2VGbG9hdChsLnRvRml4ZWQoNikpK3BhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSwrK20sdGhpcy5fbG9va1VwVGFibGVCZXppZXJbbV09dGhpcy5fYmV6aWVyQ29lZmZpY2llbnRzKGEpO2JyZWFrfWsrPWosbC09aiwrK219fXZhciBuPXRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyLmxlbmd0aDtpZigyPT09aSl7aWYodGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5wdXNoKGFyZ3VtZW50c1swXSksdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5wdXNoKGFyZ3VtZW50c1sxXSksOD09PXRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgubGVuZ3RoKXtmb3IodGhpcy5pc0N1cnZlPSEwLGY9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzBdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs0XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzZdXSksZz10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMV0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFszXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzVdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbN11dKSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2ZbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStnWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyk7Zm9yKGU9MDtlPGk7ZSsrKXRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXguc2hpZnQoKX19ZWxzZSBpZigzPT09aSYmKHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMF0pLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMV0pLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMl0pLDEyPT09dGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5sZW5ndGgpKXtmb3IodGhpcy5pc0N1cnZlPSEwLGY9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzBdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbM10sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs2XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzldXSksZz10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMV0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs0XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzddLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMTBdXSksaD10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs1XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzhdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMTFdXSksZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStmWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZ1szXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxkPWhbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0raFsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStoWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2hbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sdGhpcy52ZXJ0ZXgoYixjLGQpO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnNoaWZ0KCl9fSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5HZW9tZXRyeVwiOjcwfV0sNjU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QucHJvdG90eXBlLm9yYml0Q29udHJvbD1mdW5jdGlvbihhLGIpe2lmKHRoaXMuX2Fzc2VydDNkKFwib3JiaXRDb250cm9sXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm9yYml0Q29udHJvbFwiLGFyZ3VtZW50cyksdGhpcy5tb3VzZVg8dGhpcy53aWR0aCYmdGhpcy5tb3VzZVg+MCYmdGhpcy5tb3VzZVk8dGhpcy5oZWlnaHQmJnRoaXMubW91c2VZPjApe3ZhciBjPXRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmE7dm9pZCAwPT09YSYmKGE9MSksdm9pZCAwPT09YiYmKGI9YSksITAhPT10aGlzLmNvbnRleHRNZW51RGlzYWJsZWQmJih0aGlzLmNhbnZhcy5vbmNvbnRleHRtZW51PWZ1bmN0aW9uKCl7cmV0dXJuITF9LHRoaXMuX3NldFByb3BlcnR5KFwiY29udGV4dE1lbnVEaXNhYmxlZFwiLCEwKSksITAhPT10aGlzLndoZWVsRGVmYXVsdERpc2FibGVkJiYodGhpcy5jYW52YXMub253aGVlbD1mdW5jdGlvbigpe3JldHVybiExfSx0aGlzLl9zZXRQcm9wZXJ0eShcIndoZWVsRGVmYXVsdERpc2FibGVkXCIsITApKTt2YXIgZT10aGlzLmhlaWdodDx0aGlzLndpZHRoP3RoaXMuaGVpZ2h0OnRoaXMud2lkdGg7aWYodGhpcy5fbW91c2VXaGVlbERlbHRhWSE9PXRoaXMuX3Btb3VzZVdoZWVsRGVsdGFZJiYodGhpcy5fbW91c2VXaGVlbERlbHRhWT4wP3RoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuX29yYml0KDAsMCwuNSplKTp0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLl9vcmJpdCgwLDAsLS41KmUpKSx0aGlzLm1vdXNlSXNQcmVzc2VkKWlmKHRoaXMubW91c2VCdXR0b249PT10aGlzLkxFRlQpe3ZhciBmPS1hKih0aGlzLm1vdXNlWC10aGlzLnBtb3VzZVgpL2UsZz1iKih0aGlzLm1vdXNlWS10aGlzLnBtb3VzZVkpL2U7dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5fb3JiaXQoZixnLDApfWVsc2UgaWYodGhpcy5tb3VzZUJ1dHRvbj09PXRoaXMuUklHSFQpe3ZhciBoPWMuX2dldExvY2FsQXhlcygpLGk9TWF0aC5zcXJ0KGgueFswXSpoLnhbMF0raC54WzJdKmgueFsyXSk7MCE9PWkmJihoLnhbMF0vPWksaC54WzJdLz1pKTt2YXIgaj1NYXRoLnNxcnQoaC55WzBdKmgueVswXStoLnlbMl0qaC55WzJdKTswIT09aiYmKGgueVswXS89aixoLnlbMl0vPWopO3ZhciBrPS0xKmEqKHRoaXMubW91c2VYLXRoaXMucG1vdXNlWCksbD0tMSpiKih0aGlzLm1vdXNlWS10aGlzLnBtb3VzZVkpO2Muc2V0UG9zaXRpb24oYy5leWVYK2sqaC54WzBdK2wqaC56WzBdLGMuZXllWSxjLmV5ZVoraypoLnhbMl0rbCpoLnpbMl0pfXJldHVybiB0aGlzfX0sZC5wcm90b3R5cGUuZGVidWdNb2RlPWZ1bmN0aW9uKCl7dGhpcy5fYXNzZXJ0M2QoXCJkZWJ1Z01vZGVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZGVidWdNb2RlXCIsYXJndW1lbnRzKTtmb3IodmFyIGE9dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5sZW5ndGgtMTthPj0wO2EtLSl0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0W2FdLnRvU3RyaW5nKCkhPT10aGlzLl9ncmlkKCkudG9TdHJpbmcoKSYmdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdFthXS50b1N0cmluZygpIT09dGhpcy5fYXhlc0ljb24oKS50b1N0cmluZygpfHx0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0LnNwbGljZShhLDEpO2FyZ3VtZW50c1swXT09PWUuR1JJRD90aGlzLnJlZ2lzdGVyTWV0aG9kKFwicG9zdFwiLHRoaXMuX2dyaWQuY2FsbCh0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSxhcmd1bWVudHNbNV0pKTphcmd1bWVudHNbMF09PT1lLkFYRVM/dGhpcy5yZWdpc3Rlck1ldGhvZChcInBvc3RcIix0aGlzLl9heGVzSWNvbi5jYWxsKHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzRdKSk6KHRoaXMucmVnaXN0ZXJNZXRob2QoXCJwb3N0XCIsdGhpcy5fZ3JpZC5jYWxsKHRoaXMsYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSkpLHRoaXMucmVnaXN0ZXJNZXRob2QoXCJwb3N0XCIsdGhpcy5fYXhlc0ljb24uY2FsbCh0aGlzLGFyZ3VtZW50c1s1XSxhcmd1bWVudHNbNl0sYXJndW1lbnRzWzddLGFyZ3VtZW50c1s4XSkpKX0sZC5wcm90b3R5cGUubm9EZWJ1Z01vZGU9ZnVuY3Rpb24oKXt0aGlzLl9hc3NlcnQzZChcIm5vRGVidWdNb2RlXCIpO2Zvcih2YXIgYT10aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0Lmxlbmd0aC0xO2E+PTA7YS0tKXRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3RbYV0udG9TdHJpbmcoKSE9PXRoaXMuX2dyaWQoKS50b1N0cmluZygpJiZ0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0W2FdLnRvU3RyaW5nKCkhPT10aGlzLl9heGVzSWNvbigpLnRvU3RyaW5nKCl8fHRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3Quc3BsaWNlKGEsMSl9LGQucHJvdG90eXBlLl9ncmlkPWZ1bmN0aW9uKGEsYixjLGQsZSl7dm9pZCAwPT09YSYmKGE9dGhpcy53aWR0aC8yKSx2b2lkIDA9PT1iJiYoYj1NYXRoLnJvdW5kKGEvMzApPDQ/NDpNYXRoLnJvdW5kKGEvMzApKSx2b2lkIDA9PT1jJiYoYz0wKSx2b2lkIDA9PT1kJiYoZD0wKSx2b2lkIDA9PT1lJiYoZT0wKTt2YXIgZj1hL2IsZz1hLzI7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5wdXNoKCksdGhpcy5zdHJva2UoMjU1KnRoaXMuX3JlbmRlcmVyLmN1clN0cm9rZUNvbG9yWzBdLDI1NSp0aGlzLl9yZW5kZXJlci5jdXJTdHJva2VDb2xvclsxXSwyNTUqdGhpcy5fcmVuZGVyZXIuY3VyU3Ryb2tlQ29sb3JbMl0pLHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5zZXQodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzFdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzRdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzddLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEwXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEzXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSk7Zm9yKHZhciBhPTA7YTw9YjthKyspdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KC1nK2MsZCxhKmYtZytlKSx0aGlzLnZlcnRleCgrZytjLGQsYSpmLWcrZSksdGhpcy5lbmRTaGFwZSgpO2Zvcih2YXIgaD0wO2g8PWI7aCsrKXRoaXMuYmVnaW5TaGFwZSh0aGlzLkxJTkVTKSx0aGlzLnZlcnRleChoKmYtZytjLGQsLWcrZSksdGhpcy52ZXJ0ZXgoaCpmLWcrYyxkLCtnK2UpLHRoaXMuZW5kU2hhcGUoKTt0aGlzLnBvcCgpfX0sZC5wcm90b3R5cGUuX2F4ZXNJY29uPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB2b2lkIDA9PT1hJiYoYT10aGlzLndpZHRoLzIwPjQwP3RoaXMud2lkdGgvMjA6NDApLHZvaWQgMD09PWImJihiPS10aGlzLndpZHRoLzQpLHZvaWQgMD09PWMmJihjPWIpLHZvaWQgMD09PWQmJihkPWIpLGZ1bmN0aW9uKCl7dGhpcy5wdXNoKCksdGhpcy5fcmVuZGVyZXIudU1WTWF0cml4LnNldCh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzBdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsyXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzNdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs1XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzZdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbN10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs4XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzldLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTBdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTFdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTJdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTNdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTRdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTVdKSx0aGlzLnN0cm9rZVdlaWdodCgyKSx0aGlzLnN0cm9rZSgyNTUsMCwwKSx0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoYixjLGQpLHRoaXMudmVydGV4KGIrYSxjLGQpLHRoaXMuZW5kU2hhcGUoKSx0aGlzLnN0cm9rZSgwLDI1NSwwKSx0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoYixjLGQpLHRoaXMudmVydGV4KGIsYythLGQpLHRoaXMuZW5kU2hhcGUoKSx0aGlzLnN0cm9rZSgwLDAsMjU1KSx0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoYixjLGQpLHRoaXMudmVydGV4KGIsYyxkK2EpLHRoaXMuZW5kU2hhcGUoKSx0aGlzLnBvcCgpfX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDY2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5hbWJpZW50TGlnaHQ9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJhbWJpZW50TGlnaHRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYW1iaWVudExpZ2h0XCIsYXJndW1lbnRzKTt2YXIgZj10aGlzLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxnPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBnLnNldFVuaWZvcm0oXCJ1VXNlTGlnaHRpbmdcIiwhMCksZy5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3IpLHRoaXMuX3JlbmRlcmVyLmFtYmllbnRMaWdodENvbG9ycy5wdXNoKGYuX2FycmF5WzBdLGYuX2FycmF5WzFdLGYuX2FycmF5WzJdKSxnLnNldFVuaWZvcm0oXCJ1QW1iaWVudENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuYW1iaWVudExpZ2h0Q29sb3JzKSxnLnNldFVuaWZvcm0oXCJ1QW1iaWVudExpZ2h0Q291bnRcIix0aGlzLl9yZW5kZXJlci5hbWJpZW50TGlnaHRDb2xvcnMubGVuZ3RoLzMpLHRoaXN9LGQucHJvdG90eXBlLmRpcmVjdGlvbmFsTGlnaHQ9ZnVuY3Rpb24oYSxiLGMsZSxmLGcpe3RoaXMuX2Fzc2VydDNkKFwiZGlyZWN0aW9uYWxMaWdodFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJkaXJlY3Rpb25hbExpZ2h0XCIsYXJndW1lbnRzKTt2YXIgaCxpPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO2g9YSBpbnN0YW5jZW9mIGQuQ29sb3I/YTp0aGlzLmNvbG9yKGEsYixjKTt2YXIgaixrLGwsbT1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtcIm51bWJlclwiPT10eXBlb2YgbT8oaj1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0zXSxrPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTJdLGw9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pOihqPW0ueCxrPW0ueSxsPW0ueiksaS5zZXRVbmlmb3JtKFwidVVzZUxpZ2h0aW5nXCIsITApLGkuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKTt2YXIgbj1NYXRoLnNxcnQoaipqK2sqaytsKmwpO3JldHVybiB0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucy5wdXNoKGovbixrL24sbC9uKSxpLnNldFVuaWZvcm0oXCJ1TGlnaHRpbmdEaXJlY3Rpb25cIix0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucyksdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodENvbG9ycy5wdXNoKGguX2FycmF5WzBdLGguX2FycmF5WzFdLGguX2FycmF5WzJdKSxpLnNldFVuaWZvcm0oXCJ1RGlyZWN0aW9uYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnMpLGkuc2V0VW5pZm9ybShcInVEaXJlY3Rpb25hbExpZ2h0Q291bnRcIix0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzLmxlbmd0aC8zKSx0aGlzfSxkLnByb3RvdHlwZS5wb2ludExpZ2h0PWZ1bmN0aW9uKGEsYixjLGUsZixnKXt0aGlzLl9hc3NlcnQzZChcInBvaW50TGlnaHRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicG9pbnRMaWdodFwiLGFyZ3VtZW50cyk7dmFyIGg7aD1hIGluc3RhbmNlb2YgZC5Db2xvcj9hOnRoaXMuY29sb3IoYSxiLGMpO3ZhciBpLGosayxsPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdO1wibnVtYmVyXCI9PXR5cGVvZiBsPyhpPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTNdLGo9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMl0saz1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSk6KGk9bC54LGo9bC55LGs9bC56KTt2YXIgbT10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gbS5zZXRVbmlmb3JtKFwidVVzZUxpZ2h0aW5nXCIsITApLG0uc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSx0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0UG9zaXRpb25zLnB1c2goaSxqLGspLG0uc2V0VW5pZm9ybShcInVQb2ludExpZ2h0TG9jYXRpb25cIix0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0UG9zaXRpb25zKSx0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0Q29sb3JzLnB1c2goaC5fYXJyYXlbMF0saC5fYXJyYXlbMV0saC5fYXJyYXlbMl0pLG0uc2V0VW5pZm9ybShcInVQb2ludExpZ2h0Q29sb3JcIix0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0Q29sb3JzKSxtLnNldFVuaWZvcm0oXCJ1UG9pbnRMaWdodENvdW50XCIsdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodENvbG9ycy5sZW5ndGgvMyksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7Zm9yKHZhciBjPXt2OltdLHZ0OltdLHZuOltdfSxkPXt9LGY9MDtmPGIubGVuZ3RoOysrZil7dmFyIGc9YltmXS50cmltKCkuc3BsaXQoL1xcYlxccysvKTtpZihnLmxlbmd0aD4wKWlmKFwidlwiPT09Z1swXXx8XCJ2blwiPT09Z1swXSl7dmFyIGg9bmV3IGUuVmVjdG9yKHBhcnNlRmxvYXQoZ1sxXSkscGFyc2VGbG9hdChnWzJdKSxwYXJzZUZsb2F0KGdbM10pKTtjW2dbMF1dLnB1c2goaCl9ZWxzZSBpZihcInZ0XCI9PT1nWzBdKXt2YXIgaT1bcGFyc2VGbG9hdChnWzFdKSxwYXJzZUZsb2F0KGdbMl0pXTtjW2dbMF1dLnB1c2goaSl9ZWxzZSBpZihcImZcIj09PWdbMF0pZm9yKHZhciBqPTM7ajxnLmxlbmd0aDsrK2ope2Zvcih2YXIgaz1bXSxsPVsxLGotMSxqXSxtPTA7bTxsLmxlbmd0aDsrK20pe3ZhciBuPWdbbFttXV0sbz0wO2lmKHZvaWQgMCE9PWRbbl0pbz1kW25dO2Vsc2V7Zm9yKHZhciBwPW4uc3BsaXQoXCIvXCIpLHE9MDtxPHAubGVuZ3RoO3ErKylwW3FdPXBhcnNlSW50KHBbcV0pLTE7bz1kW25dPWEudmVydGljZXMubGVuZ3RoLGEudmVydGljZXMucHVzaChjLnZbcFswXV0uY29weSgpKSxjLnZ0W3BbMV1dP2EudXZzLnB1c2goYy52dFtwWzFdXS5zbGljZSgpKTphLnV2cy5wdXNoKFswLDBdKSxjLnZuW3BbMl1dJiZhLnZlcnRleE5vcm1hbHMucHVzaChjLnZuW3BbMl1dLmNvcHkoKSl9ay5wdXNoKG8pfWtbMF0hPT1rWzFdJiZrWzBdIT09a1syXSYma1sxXSE9PWtbMl0mJmEuZmFjZXMucHVzaChrKX19cmV0dXJuIDA9PT1hLnZlcnRleE5vcm1hbHMubGVuZ3RoJiZhLmNvbXB1dGVOb3JtYWxzKCksYX12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpO2EoXCIuL3A1Lkdlb21ldHJ5XCIpLGUucHJvdG90eXBlLmxvYWRNb2RlbD1mdW5jdGlvbihhKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkTW9kZWxcIixhcmd1bWVudHMpO3ZhciBiLGMsZjtcImJvb2xlYW5cIj09dHlwZW9mIGFyZ3VtZW50c1sxXT8oYj1hcmd1bWVudHNbMV0sYz1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10pOihiPSExLGM9YXJndW1lbnRzWzFdLGY9YXJndW1lbnRzWzJdKTt2YXIgZz1uZXcgZS5HZW9tZXRyeTtnLmdpZD1hK1wifFwiK2I7dmFyIGg9dGhpcztyZXR1cm4gdGhpcy5sb2FkU3RyaW5ncyhhLGZ1bmN0aW9uKGEpe2QoZyxhKSxiJiZnLm5vcm1hbGl6ZSgpLGguX2RlY3JlbWVudFByZWxvYWQoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiZjKGcpfS5iaW5kKHRoaXMpLGYpLGd9LGUucHJvdG90eXBlLm1vZGVsPWZ1bmN0aW9uKGEpe3RoaXMuX2Fzc2VydDNkKFwibW9kZWxcIiksZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibW9kZWxcIixhcmd1bWVudHMpLGEudmVydGljZXMubGVuZ3RoPjAmJih0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChhLmdpZCl8fChhLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGEuZ2lkLGEpKSx0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVycyhhLmdpZCkpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1Lkdlb21ldHJ5XCI6NzB9XSw2ODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4vcDUuVGV4dHVyZVwiKSxkLnByb3RvdHlwZS5sb2FkU2hhZGVyPWZ1bmN0aW9uKGEsYil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZFNoYWRlclwiLGFyZ3VtZW50cyk7dmFyIGM9bmV3IGQuU2hhZGVyLGU9dGhpcyxmPSExLGc9ITE7cmV0dXJuIHRoaXMubG9hZFN0cmluZ3MoYixmdW5jdGlvbihhKXtjLl9mcmFnU3JjPWEuam9pbihcIlxcblwiKSxmPSEwLGcmJmUuX2RlY3JlbWVudFByZWxvYWQoKX0pLHRoaXMubG9hZFN0cmluZ3MoYSxmdW5jdGlvbihhKXtjLl92ZXJ0U3JjPWEuam9pbihcIlxcblwiKSxnPSEwLGYmJmUuX2RlY3JlbWVudFByZWxvYWQoKX0pLGN9LGQucHJvdG90eXBlLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcImNyZWF0ZVNoYWRlclwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVTaGFkZXJcIixhcmd1bWVudHMpLG5ldyBkLlNoYWRlcih0aGlzLl9yZW5kZXJlcixhLGIpfSxkLnByb3RvdHlwZS5zaGFkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwic2hhZGVyXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNoYWRlclwiLGFyZ3VtZW50cyksdm9pZCAwPT09YS5fcmVuZGVyZXImJihhLl9yZW5kZXJlcj10aGlzLl9yZW5kZXJlciksYS5pc1N0cm9rZVNoYWRlcigpP3RoaXMuX3JlbmRlcmVyLnNldFN0cm9rZVNoYWRlcihhKTp0aGlzLl9yZW5kZXJlci5zZXRGaWxsU2hhZGVyKGEpLHRoaXN9LGQucHJvdG90eXBlLm5vcm1hbE1hdGVyaWFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwibm9ybWFsTWF0ZXJpYWxcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibm9ybWFsTWF0ZXJpYWxcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmRyYXdNb2RlPWUuRklMTCx0aGlzLl9yZW5kZXJlci5zZXRGaWxsU2hhZGVyKHRoaXMuX3JlbmRlcmVyLl9nZXROb3JtYWxTaGFkZXIoKSksdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yPVsxLDEsMSwxXSx0aGlzLm5vU3Ryb2tlKCksdGhpc30sZC5wcm90b3R5cGUudGV4dHVyZT1mdW5jdGlvbihhKXt0aGlzLl9hc3NlcnQzZChcInRleHR1cmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dHVyZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuZHJhd01vZGU9ZS5URVhUVVJFO3ZhciBiPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBiLnNldFVuaWZvcm0oXCJ1U3BlY3VsYXJcIiwhMSksYi5zZXRVbmlmb3JtKFwiaXNUZXh0dXJlXCIsITApLGIuc2V0VW5pZm9ybShcInVTYW1wbGVyXCIsYSksdGhpcy5ub1N0cm9rZSgpLHRoaXN9LGQucHJvdG90eXBlLmFtYmllbnRNYXRlcmlhbD1mdW5jdGlvbihhLGIsYyxlKXt0aGlzLl9hc3NlcnQzZChcImFtYmllbnRNYXRlcmlhbFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJhbWJpZW50TWF0ZXJpYWxcIixhcmd1bWVudHMpO3ZhciBmPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3I9Zi5fYXJyYXk7dmFyIGc9dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIGcuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSxnLnNldFVuaWZvcm0oXCJ1U3BlY3VsYXJcIiwhMSksZy5zZXRVbmlmb3JtKFwiaXNUZXh0dXJlXCIsITEpLHRoaXN9LGQucHJvdG90eXBlLnNwZWN1bGFyTWF0ZXJpYWw9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJzcGVjdWxhck1hdGVyaWFsXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwZWN1bGFyTWF0ZXJpYWxcIixhcmd1bWVudHMpO3ZhciBmPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3I9Zi5fYXJyYXk7dmFyIGc9dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIGcuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSxnLnNldFVuaWZvcm0oXCJ1U3BlY3VsYXJcIiwhMCksZy5zZXRVbmlmb3JtKFwiaXNUZXh0dXJlXCIsITEpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2FwcGx5Q29sb3JCbGVuZD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLkdMLGM9dGhpcy5kcmF3TW9kZT09PWUuVEVYVFVSRTtyZXR1cm4gY3x8YVthLmxlbmd0aC0xXTwxPyhiLmRlcHRoTWFzayhjKSxiLmVuYWJsZShiLkJMRU5EKSxiLmJsZW5kRXF1YXRpb24oYi5GVU5DX0FERCksYi5ibGVuZEZ1bmMoYi5TUkNfQUxQSEEsYi5PTkVfTUlOVVNfU1JDX0FMUEhBKSk6KGIuZGVwdGhNYXNrKCEwKSxiLmRpc2FibGUoYi5CTEVORCkpLGF9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LlRleHR1cmVcIjo3Nn1dLDY5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5jYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJjYW1lcmFcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY2FtZXJhXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYS5hcHBseSh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucGVyc3BlY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJwZXJzcGVjdGl2ZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwZXJzcGVjdGl2ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5wZXJzcGVjdGl2ZS5hcHBseSh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUub3J0aG89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJvcnRob1wiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJvcnRob1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5vcnRoby5hcHBseSh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUuY3JlYXRlQ2FtZXJhPWZ1bmN0aW9uKCl7dGhpcy5fYXNzZXJ0M2QoXCJjcmVhdGVDYW1lcmFcIik7dmFyIGE9bmV3IGQuQ2FtZXJhKHRoaXMuX3JlbmRlcmVyKTtyZXR1cm4gYS5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncygpLGEuX3NldERlZmF1bHRDYW1lcmEoKSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhPWEsYX0sZC5DYW1lcmE9ZnVuY3Rpb24oYSl7dGhpcy5fcmVuZGVyZXI9YSx0aGlzLmNhbWVyYVR5cGU9XCJkZWZhdWx0XCIsdGhpcy5jYW1lcmFNYXRyaXg9bmV3IGQuTWF0cml4LHRoaXMucHJvak1hdHJpeD1uZXcgZC5NYXRyaXh9LGQuQ2FtZXJhLnByb3RvdHlwZS5wZXJzcGVjdGl2ZT1mdW5jdGlvbihhLGIsYyxlKXt2b2lkIDA9PT1hPyhhPXRoaXMuZGVmYXVsdENhbWVyYUZPVix0aGlzLmNhbWVyYUZPVj1hKTp0aGlzLmNhbWVyYUZPVj10aGlzLl9yZW5kZXJlci5fcEluc3QuX3RvUmFkaWFucyhhKSx2b2lkIDA9PT1iJiYoYj10aGlzLmRlZmF1bHRBc3BlY3RSYXRpbyksdm9pZCAwPT09YyYmKGM9dGhpcy5kZWZhdWx0Q2FtZXJhTmVhciksdm9pZCAwPT09ZSYmKGU9dGhpcy5kZWZhdWx0Q2FtZXJhRmFyKSxjPD0xZS00JiYoYz0uMDEsY29uc29sZS5sb2coXCJBdm9pZCBwZXJzcGVjdGl2ZSBuZWFyIHBsYW5lIHZhbHVlcyBjbG9zZSB0byBvciBiZWxvdyAwLiBTZXR0aW5nIHZhbHVlIHRvIDAuMDEuXCIpKSxlPGMmJmNvbnNvbGUubG9nKFwiUGVyc3BlY3RpdmUgZmFyIHBsYW5lIHZhbHVlIGlzIGxlc3MgdGhhbiBuZWFyIHBsYW5lIHZhbHVlLiBOb3RoaW5nIHdpbGwgYmUgc2hvd24uXCIpLHRoaXMuY2FtZXJhRk9WPXRoaXMuX3JlbmRlcmVyLl9wSW5zdC5fdG9SYWRpYW5zKGEpLHRoaXMuYXNwZWN0UmF0aW89Yix0aGlzLmNhbWVyYU5lYXI9Yyx0aGlzLmNhbWVyYUZhcj1lLHRoaXMucHJvak1hdHJpeD1kLk1hdHJpeC5pZGVudGl0eSgpO3ZhciBmPTEvTWF0aC50YW4odGhpcy5jYW1lcmFGT1YvMiksZz0xLyh0aGlzLmNhbWVyYU5lYXItdGhpcy5jYW1lcmFGYXIpO3RoaXMucHJvak1hdHJpeC5zZXQoZi9iLDAsMCwwLDAsLWYsMCwwLDAsMCwoZStjKSpnLC0xLDAsMCwyKmUqYypnLDApLHRoaXMuX2lzQWN0aXZlKCkmJnRoaXMuX3JlbmRlcmVyLnVQTWF0cml4LnNldCh0aGlzLnByb2pNYXRyaXgubWF0NFswXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxXSx0aGlzLnByb2pNYXRyaXgubWF0NFsyXSx0aGlzLnByb2pNYXRyaXgubWF0NFszXSx0aGlzLnByb2pNYXRyaXgubWF0NFs0XSx0aGlzLnByb2pNYXRyaXgubWF0NFs1XSx0aGlzLnByb2pNYXRyaXgubWF0NFs2XSx0aGlzLnByb2pNYXRyaXgubWF0NFs3XSx0aGlzLnByb2pNYXRyaXgubWF0NFs4XSx0aGlzLnByb2pNYXRyaXgubWF0NFs5XSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTFdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEyXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxM10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTRdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzE1XSksdGhpcy5jYW1lcmFUeXBlPVwiY3VzdG9tXCJ9LGQuQ2FtZXJhLnByb3RvdHlwZS5vcnRobz1mdW5jdGlvbihhLGIsYyxlLGYsZyl7dm9pZCAwPT09YSYmKGE9LXRoaXMuX3JlbmRlcmVyLndpZHRoLzIpLHZvaWQgMD09PWImJihiPSt0aGlzLl9yZW5kZXJlci53aWR0aC8yKSx2b2lkIDA9PT1jJiYoYz0tdGhpcy5fcmVuZGVyZXIuaGVpZ2h0LzIpLHZvaWQgMD09PWUmJihlPSt0aGlzLl9yZW5kZXJlci5oZWlnaHQvMiksdm9pZCAwPT09ZiYmKGY9MCksdm9pZCAwPT09ZyYmKGc9TWF0aC5tYXgodGhpcy5fcmVuZGVyZXIud2lkdGgsdGhpcy5fcmVuZGVyZXIuaGVpZ2h0KSk7dmFyIGg9Yi1hLGk9ZS1jLGo9Zy1mLGs9Mi9oLGw9Mi9pLG09LTIvaixuPS0oYithKS9oLG89LShlK2MpL2kscD0tKGcrZikvajt0aGlzLnByb2pNYXRyaXg9ZC5NYXRyaXguaWRlbnRpdHkoKSx0aGlzLnByb2pNYXRyaXguc2V0KGssMCwwLDAsMCwtbCwwLDAsMCwwLG0sMCxuLG8scCwxKSx0aGlzLl9pc0FjdGl2ZSgpJiZ0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5zZXQodGhpcy5wcm9qTWF0cml4Lm1hdDRbMF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbM10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbN10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTBdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzExXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTNdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzE0XSx0aGlzLnByb2pNYXRyaXgubWF0NFsxNV0pLHRoaXMuY2FtZXJhVHlwZT1cImN1c3RvbVwifSxkLkNhbWVyYS5wcm90b3R5cGUuX3JvdGF0ZVZpZXc9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9dGhpcy5jZW50ZXJYLGc9dGhpcy5jZW50ZXJZLGg9dGhpcy5jZW50ZXJaO2YtPXRoaXMuZXllWCxnLT10aGlzLmV5ZVksaC09dGhpcy5leWVaO3ZhciBpPWQuTWF0cml4LmlkZW50aXR5KHRoaXMuX3JlbmRlcmVyLl9wSW5zdCk7aS5yb3RhdGUoYSxiLGMsZSk7dmFyIGo9W2YqaS5tYXQ0WzBdK2cqaS5tYXQ0WzRdK2gqaS5tYXQ0WzhdLGYqaS5tYXQ0WzFdK2cqaS5tYXQ0WzVdK2gqaS5tYXQ0WzldLGYqaS5tYXQ0WzJdK2cqaS5tYXQ0WzZdK2gqaS5tYXQ0WzEwXV07alswXSs9dGhpcy5leWVYLGpbMV0rPXRoaXMuZXllWSxqWzJdKz10aGlzLmV5ZVosdGhpcy5jYW1lcmEodGhpcy5leWVYLHRoaXMuZXllWSx0aGlzLmV5ZVosalswXSxqWzFdLGpbMl0sdGhpcy51cFgsdGhpcy51cFksdGhpcy51cFopfSxkLkNhbWVyYS5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldExvY2FsQXhlcygpO3RoaXMuX3JvdGF0ZVZpZXcoYSxiLnlbMF0sYi55WzFdLGIueVsyXSl9LGQuQ2FtZXJhLnByb3RvdHlwZS50aWx0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldExvY2FsQXhlcygpO3RoaXMuX3JvdGF0ZVZpZXcoYSxiLnhbMF0sYi54WzFdLGIueFsyXSl9LGQuQ2FtZXJhLnByb3RvdHlwZS5sb29rQXQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuY2FtZXJhKHRoaXMuZXllWCx0aGlzLmV5ZVksdGhpcy5leWVaLGEsYixjLHRoaXMudXBYLHRoaXMudXBZLHRoaXMudXBaKX0sZC5DYW1lcmEucHJvdG90eXBlLmNhbWVyYT1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSl7dm9pZCAwPT09YSYmKGE9dGhpcy5kZWZhdWx0RXllWCxiPXRoaXMuZGVmYXVsdEV5ZVksYz10aGlzLmRlZmF1bHRFeWVaLGQ9YSxlPWIsZj0wLGc9MCxoPTEsaT0wKSx0aGlzLmV5ZVg9YSx0aGlzLmV5ZVk9Yix0aGlzLmV5ZVo9Yyx0aGlzLmNlbnRlclg9ZCx0aGlzLmNlbnRlclk9ZSx0aGlzLmNlbnRlclo9Zix0aGlzLnVwWD1nLHRoaXMudXBZPWgsdGhpcy51cFo9aTt2YXIgaj10aGlzLl9nZXRMb2NhbEF4ZXMoKTt0aGlzLmNhbWVyYU1hdHJpeC5zZXQoai54WzBdLGoueVswXSxqLnpbMF0sMCxqLnhbMV0sai55WzFdLGouelsxXSwwLGoueFsyXSxqLnlbMl0sai56WzJdLDAsMCwwLDAsMSk7dmFyIGs9LWEsbD0tYixtPS1jO3JldHVybiB0aGlzLmNhbWVyYU1hdHJpeC50cmFuc2xhdGUoW2ssbCxtXSksdGhpcy5faXNBY3RpdmUoKSYmdGhpcy5fcmVuZGVyZXIudU1WTWF0cml4LnNldCh0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzBdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMV0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsyXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzNdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbNF0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs1XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzZdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbN10sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs4XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzldLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTBdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTFdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTJdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTNdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTRdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTVdKSx0aGlzfSxkLkNhbWVyYS5wcm90b3R5cGUubW92ZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fZ2V0TG9jYWxBeGVzKCksZT1bZC54WzBdKmEsZC54WzFdKmEsZC54WzJdKmFdLGY9W2QueVswXSpiLGQueVsxXSpiLGQueVsyXSpiXSxnPVtkLnpbMF0qYyxkLnpbMV0qYyxkLnpbMl0qY107dGhpcy5jYW1lcmEodGhpcy5leWVYK2VbMF0rZlswXStnWzBdLHRoaXMuZXllWStlWzFdK2ZbMV0rZ1sxXSx0aGlzLmV5ZVorZVsyXStmWzJdK2dbMl0sdGhpcy5jZW50ZXJYK2VbMF0rZlswXStnWzBdLHRoaXMuY2VudGVyWStlWzFdK2ZbMV0rZ1sxXSx0aGlzLmNlbnRlclorZVsyXStmWzJdK2dbMl0sMCwxLDApfSxkLkNhbWVyYS5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEtdGhpcy5leWVYLGU9Yi10aGlzLmV5ZVksZj1jLXRoaXMuZXllWjt0aGlzLmNhbWVyYShhLGIsYyx0aGlzLmNlbnRlclgrZCx0aGlzLmNlbnRlclkrZSx0aGlzLmNlbnRlclorZiwwLDEsMCl9LGQuQ2FtZXJhLnByb3RvdHlwZS5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncz1mdW5jdGlvbigpe3RoaXMuZGVmYXVsdENhbWVyYUZPVj02MC8xODAqTWF0aC5QSSxcbnRoaXMuZGVmYXVsdEFzcGVjdFJhdGlvPXRoaXMuX3JlbmRlcmVyLndpZHRoL3RoaXMuX3JlbmRlcmVyLmhlaWdodCx0aGlzLmRlZmF1bHRFeWVYPTAsdGhpcy5kZWZhdWx0RXllWT0wLHRoaXMuZGVmYXVsdEV5ZVo9dGhpcy5fcmVuZGVyZXIuaGVpZ2h0LzIvTWF0aC50YW4odGhpcy5kZWZhdWx0Q2FtZXJhRk9WLzIpLHRoaXMuZGVmYXVsdENlbnRlclg9MCx0aGlzLmRlZmF1bHRDZW50ZXJZPTAsdGhpcy5kZWZhdWx0Q2VudGVyWj0wLHRoaXMuZGVmYXVsdENhbWVyYU5lYXI9LjEqdGhpcy5kZWZhdWx0RXllWix0aGlzLmRlZmF1bHRDYW1lcmFGYXI9MTAqdGhpcy5kZWZhdWx0RXllWn0sZC5DYW1lcmEucHJvdG90eXBlLl9zZXREZWZhdWx0Q2FtZXJhPWZ1bmN0aW9uKCl7dGhpcy5jYW1lcmFGT1Y9dGhpcy5kZWZhdWx0Q2FtZXJhRk9WLHRoaXMuYXNwZWN0UmF0aW89dGhpcy5kZWZhdWx0QXNwZWN0UmF0aW8sdGhpcy5leWVYPXRoaXMuZGVmYXVsdEV5ZVgsdGhpcy5leWVZPXRoaXMuZGVmYXVsdEV5ZVksdGhpcy5leWVaPXRoaXMuZGVmYXVsdEV5ZVosdGhpcy5jZW50ZXJYPXRoaXMuZGVmYXVsdENlbnRlclgsdGhpcy5jZW50ZXJZPXRoaXMuZGVmYXVsdENlbnRlclksdGhpcy5jZW50ZXJaPXRoaXMuZGVmYXVsdENlbnRlclosdGhpcy51cFg9MCx0aGlzLnVwWT0xLHRoaXMudXBaPTAsdGhpcy5jYW1lcmFOZWFyPXRoaXMuZGVmYXVsdENhbWVyYU5lYXIsdGhpcy5jYW1lcmFGYXI9dGhpcy5kZWZhdWx0Q2FtZXJhRmFyLHRoaXMucGVyc3BlY3RpdmUoKSx0aGlzLmNhbWVyYSgpLHRoaXMuY2FtZXJhVHlwZT1cImRlZmF1bHRcIn0sZC5DYW1lcmEucHJvdG90eXBlLl9yZXNpemU9ZnVuY3Rpb24oKXtcImRlZmF1bHRcIj09PXRoaXMuY2FtZXJhVHlwZT8odGhpcy5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncygpLHRoaXMuX3NldERlZmF1bHRDYW1lcmEoKSk6dGhpcy5wZXJzcGVjdGl2ZSh0aGlzLmNhbWVyYUZPVix0aGlzLl9yZW5kZXJlci53aWR0aC90aGlzLl9yZW5kZXJlci5oZWlnaHQpfSxkLkNhbWVyYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkLkNhbWVyYSh0aGlzLl9yZW5kZXJlcik7cmV0dXJuIGEuY2FtZXJhRk9WPXRoaXMuY2FtZXJhRk9WLGEuYXNwZWN0UmF0aW89dGhpcy5hc3BlY3RSYXRpbyxhLmV5ZVg9dGhpcy5leWVYLGEuZXllWT10aGlzLmV5ZVksYS5leWVaPXRoaXMuZXllWixhLmNlbnRlclg9dGhpcy5jZW50ZXJYLGEuY2VudGVyWT10aGlzLmNlbnRlclksYS5jZW50ZXJaPXRoaXMuY2VudGVyWixhLmNhbWVyYU5lYXI9dGhpcy5jYW1lcmFOZWFyLGEuY2FtZXJhRmFyPXRoaXMuY2FtZXJhRmFyLGEuY2FtZXJhVHlwZT10aGlzLmNhbWVyYVR5cGUsYS5jYW1lcmFNYXRyaXg9dGhpcy5jYW1lcmFNYXRyaXguY29weSgpLGEucHJvak1hdHJpeD10aGlzLnByb2pNYXRyaXguY29weSgpLGF9LGQuQ2FtZXJhLnByb3RvdHlwZS5fZ2V0TG9jYWxBeGVzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5leWVYLXRoaXMuY2VudGVyWCxiPXRoaXMuZXllWS10aGlzLmNlbnRlclksYz10aGlzLmV5ZVotdGhpcy5jZW50ZXJaLGQ9TWF0aC5zcXJ0KGEqYStiKmIrYypjKTswIT09ZCYmKGEvPWQsYi89ZCxjLz1kKTt2YXIgZT10aGlzLnVwWCxmPXRoaXMudXBZLGc9dGhpcy51cFosaD1mKmMtZypiLGk9LWUqYytnKmEsaj1lKmItZiphO2U9YipqLWMqaSxmPS1hKmorYypoLGc9YSppLWIqaDt2YXIgaz1NYXRoLnNxcnQoaCpoK2kqaStqKmopOzAhPT1rJiYoaC89ayxpLz1rLGovPWspO3ZhciBsPU1hdGguc3FydChlKmUrZipmK2cqZyk7cmV0dXJuIDAhPT1sJiYoZS89bCxmLz1sLGcvPWwpLHt4OltoLGksal0seTpbZSxmLGddLHo6W2EsYixjXX19LGQuQ2FtZXJhLnByb3RvdHlwZS5fb3JiaXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuZXllWC10aGlzLmNlbnRlclgsZT10aGlzLmV5ZVktdGhpcy5jZW50ZXJZLGY9dGhpcy5leWVaLXRoaXMuY2VudGVyWixnPU1hdGguc3FydChkKmQrZSplK2YqZiksaD1NYXRoLmF0YW4yKGQsZiksaT1NYXRoLmFjb3MoTWF0aC5tYXgoLTEsTWF0aC5taW4oMSxlL2cpKSk7aCs9YSxpKz1iLGcrPWMsZzwwJiYoZz0uMSksaT5NYXRoLlBJP2k9TWF0aC5QSTppPD0wJiYoaT0uMDAxKTt2YXIgaj1NYXRoLnNpbihpKSpnKk1hdGguc2luKGgpLGs9TWF0aC5jb3MoaSkqZyxsPU1hdGguc2luKGkpKmcqTWF0aC5jb3MoaCk7dGhpcy5jYW1lcmEoait0aGlzLmNlbnRlclgsayt0aGlzLmNlbnRlclksbCt0aGlzLmNlbnRlclosdGhpcy5jZW50ZXJYLHRoaXMuY2VudGVyWSx0aGlzLmNlbnRlclosMCwxLDApfSxkLkNhbWVyYS5wcm90b3R5cGUuX2lzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT10aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhfSxkLnByb3RvdHlwZS5zZXRDYW1lcmE9ZnVuY3Rpb24oYSl7dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYT1hLHRoaXMuX3JlbmRlcmVyLnVQTWF0cml4LnNldChhLnByb2pNYXRyaXgubWF0NFswXSxhLnByb2pNYXRyaXgubWF0NFsxXSxhLnByb2pNYXRyaXgubWF0NFsyXSxhLnByb2pNYXRyaXgubWF0NFszXSxhLnByb2pNYXRyaXgubWF0NFs0XSxhLnByb2pNYXRyaXgubWF0NFs1XSxhLnByb2pNYXRyaXgubWF0NFs2XSxhLnByb2pNYXRyaXgubWF0NFs3XSxhLnByb2pNYXRyaXgubWF0NFs4XSxhLnByb2pNYXRyaXgubWF0NFs5XSxhLnByb2pNYXRyaXgubWF0NFsxMF0sYS5wcm9qTWF0cml4Lm1hdDRbMTFdLGEucHJvak1hdHJpeC5tYXQ0WzEyXSxhLnByb2pNYXRyaXgubWF0NFsxM10sYS5wcm9qTWF0cml4Lm1hdDRbMTRdLGEucHJvak1hdHJpeC5tYXQ0WzE1XSl9LGIuZXhwb3J0cz1kLkNhbWVyYX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3MDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5HZW9tZXRyeT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMudmVydGljZXM9W10sdGhpcy5saW5lVmVydGljZXM9W10sdGhpcy5saW5lTm9ybWFscz1bXSx0aGlzLnZlcnRleE5vcm1hbHM9W10sdGhpcy5mYWNlcz1bXSx0aGlzLnV2cz1bXSx0aGlzLmVkZ2VzPVtdLHRoaXMuZGV0YWlsWD12b2lkIDAhPT1hP2E6MSx0aGlzLmRldGFpbFk9dm9pZCAwIT09Yj9iOjEsYyBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZjLmNhbGwodGhpcyksdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuY29tcHV0ZUZhY2VzPWZ1bmN0aW9uKCl7dGhpcy5mYWNlcy5sZW5ndGg9MDtmb3IodmFyIGEsYixjLGQsZT10aGlzLmRldGFpbFgrMSxmPTA7Zjx0aGlzLmRldGFpbFk7ZisrKWZvcih2YXIgZz0wO2c8dGhpcy5kZXRhaWxYO2crKylhPWYqZStnLGI9ZiplK2crMSxjPShmKzEpKmUrZysxLGQ9KGYrMSkqZStnLHRoaXMuZmFjZXMucHVzaChbYSxiLGRdKSx0aGlzLmZhY2VzLnB1c2goW2QsYixjXSk7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLl9nZXRGYWNlTm9ybWFsPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZmFjZXNbYV0sYz10aGlzLnZlcnRpY2VzW2JbMF1dLGU9dGhpcy52ZXJ0aWNlc1tiWzFdXSxmPXRoaXMudmVydGljZXNbYlsyXV0sZz1kLlZlY3Rvci5zdWIoZSxjKSxoPWQuVmVjdG9yLnN1YihmLGMpLGk9ZC5WZWN0b3IuY3Jvc3MoZyxoKSxqPWQuVmVjdG9yLm1hZyhpKSxrPWovKGQuVmVjdG9yLm1hZyhnKSpkLlZlY3Rvci5tYWcoaCkpO3JldHVybiAwPT09a3x8aXNOYU4oayk/KGNvbnNvbGUud2FybihcInA1Lkdlb21ldHJ5LnByb3RvdHlwZS5fZ2V0RmFjZU5vcm1hbDpcIixcImZhY2UgaGFzIGNvbGluZWFyIHNpZGVzIG9yIGEgcmVwZWF0ZWQgdmVydGV4XCIpLGkpOihrPjEmJihrPTEpLGkubXVsdChNYXRoLmFzaW4oaykvaikpfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5jb21wdXRlTm9ybWFscz1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy52ZXJ0ZXhOb3JtYWxzLGM9dGhpcy52ZXJ0aWNlcyxlPXRoaXMuZmFjZXM7Zm9yKGIubGVuZ3RoPTAsYT0wO2E8Yy5sZW5ndGg7KythKWIucHVzaChuZXcgZC5WZWN0b3IpO2Zvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7KytmKWZvcih2YXIgZz1lW2ZdLGg9dGhpcy5fZ2V0RmFjZU5vcm1hbChmKSxpPTA7aTwzOysraSl7dmFyIGo9Z1tpXTtiW2pdLmFkZChoKX1mb3IoYT0wO2E8Yy5sZW5ndGg7KythKWJbYV0ubm9ybWFsaXplKCk7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLmF2ZXJhZ2VOb3JtYWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTw9dGhpcy5kZXRhaWxZO2ErKyl7dmFyIGI9dGhpcy5kZXRhaWxYKzEsYz1kLlZlY3Rvci5hZGQodGhpcy52ZXJ0ZXhOb3JtYWxzW2EqYl0sdGhpcy52ZXJ0ZXhOb3JtYWxzW2EqYit0aGlzLmRldGFpbFhdKTtjPWQuVmVjdG9yLmRpdihjLDIpLHRoaXMudmVydGV4Tm9ybWFsc1thKmJdPWMsdGhpcy52ZXJ0ZXhOb3JtYWxzW2EqYit0aGlzLmRldGFpbFhdPWN9cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLmF2ZXJhZ2VQb2xlTm9ybWFscz1mdW5jdGlvbigpe2Zvcih2YXIgYT1uZXcgZC5WZWN0b3IoMCwwLDApLGI9MDtiPHRoaXMuZGV0YWlsWDtiKyspYS5hZGQodGhpcy52ZXJ0ZXhOb3JtYWxzW2JdKTtmb3IoYT1kLlZlY3Rvci5kaXYoYSx0aGlzLmRldGFpbFgpLGI9MDtiPHRoaXMuZGV0YWlsWDtiKyspdGhpcy52ZXJ0ZXhOb3JtYWxzW2JdPWE7Zm9yKGE9bmV3IGQuVmVjdG9yKDAsMCwwKSxiPXRoaXMudmVydGljZXMubGVuZ3RoLTE7Yj50aGlzLnZlcnRpY2VzLmxlbmd0aC0xLXRoaXMuZGV0YWlsWDtiLS0pYS5hZGQodGhpcy52ZXJ0ZXhOb3JtYWxzW2JdKTtmb3IoYT1kLlZlY3Rvci5kaXYoYSx0aGlzLmRldGFpbFgpLGI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMTtiPnRoaXMudmVydGljZXMubGVuZ3RoLTEtdGhpcy5kZXRhaWxYO2ItLSl0aGlzLnZlcnRleE5vcm1hbHNbYl09YTtyZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuX21ha2VUcmlhbmdsZUVkZ2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5lZGdlcy5sZW5ndGg9MCxBcnJheS5pc0FycmF5KHRoaXMuc3Ryb2tlSW5kaWNlcykpZm9yKHZhciBhPTAsYj10aGlzLnN0cm9rZUluZGljZXMubGVuZ3RoO2E8YjthKyspdGhpcy5lZGdlcy5wdXNoKHRoaXMuc3Ryb2tlSW5kaWNlc1thXSk7ZWxzZSBmb3IodmFyIGM9MDtjPHRoaXMuZmFjZXMubGVuZ3RoO2MrKyl0aGlzLmVkZ2VzLnB1c2goW3RoaXMuZmFjZXNbY11bMF0sdGhpcy5mYWNlc1tjXVsxXV0pLHRoaXMuZWRnZXMucHVzaChbdGhpcy5mYWNlc1tjXVsxXSx0aGlzLmZhY2VzW2NdWzJdXSksdGhpcy5lZGdlcy5wdXNoKFt0aGlzLmZhY2VzW2NdWzJdLHRoaXMuZmFjZXNbY11bMF1dKTtyZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuX2VkZ2VzVG9WZXJ0aWNlcz1mdW5jdGlvbigpe3RoaXMubGluZVZlcnRpY2VzLmxlbmd0aD0wLHRoaXMubGluZU5vcm1hbHMubGVuZ3RoPTA7Zm9yKHZhciBhPTA7YTx0aGlzLmVkZ2VzLmxlbmd0aDthKyspe3ZhciBiPXRoaXMudmVydGljZXNbdGhpcy5lZGdlc1thXVswXV0sYz10aGlzLnZlcnRpY2VzW3RoaXMuZWRnZXNbYV1bMV1dLGQ9Yy5jb3B5KCkuc3ViKGIpLm5vcm1hbGl6ZSgpLGU9Yi5hcnJheSgpLGY9Yi5hcnJheSgpLGc9Yy5hcnJheSgpLGg9Yy5hcnJheSgpLGk9ZC5hcnJheSgpLGo9ZC5hcnJheSgpO2kucHVzaCgxKSxqLnB1c2goLTEpLHRoaXMubGluZU5vcm1hbHMucHVzaChpLGosaSxpLGosaiksdGhpcy5saW5lVmVydGljZXMucHVzaChlLGYsZyxnLGYsaCl9cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMudmVydGljZXMubGVuZ3RoPjApe2Zvcih2YXIgYT10aGlzLnZlcnRpY2VzWzBdLmNvcHkoKSxiPXRoaXMudmVydGljZXNbMF0uY29weSgpLGM9MDtjPHRoaXMudmVydGljZXMubGVuZ3RoO2MrKylhLng9TWF0aC5tYXgoYS54LHRoaXMudmVydGljZXNbY10ueCksYi54PU1hdGgubWluKGIueCx0aGlzLnZlcnRpY2VzW2NdLngpLGEueT1NYXRoLm1heChhLnksdGhpcy52ZXJ0aWNlc1tjXS55KSxiLnk9TWF0aC5taW4oYi55LHRoaXMudmVydGljZXNbY10ueSksYS56PU1hdGgubWF4KGEueix0aGlzLnZlcnRpY2VzW2NdLnopLGIuej1NYXRoLm1pbihiLnosdGhpcy52ZXJ0aWNlc1tjXS56KTt2YXIgZT1kLlZlY3Rvci5sZXJwKGEsYiwuNSksZj1kLlZlY3Rvci5zdWIoYSxiKSxnPU1hdGgubWF4KE1hdGgubWF4KGYueCxmLnkpLGYueiksaD0yMDAvZztmb3IoYz0wO2M8dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YysrKXRoaXMudmVydGljZXNbY10uc3ViKGUpLHRoaXMudmVydGljZXNbY10ubXVsdChoKX1yZXR1cm4gdGhpc30sYi5leHBvcnRzPWQuR2VvbWV0cnl9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9QXJyYXksZj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5fTtcInVuZGVmaW5lZFwiIT10eXBlb2YgRmxvYXQzMkFycmF5JiYoZT1GbG9hdDMyQXJyYXksZj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5fHxhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fSksZC5NYXRyaXg9ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGI9MDtiPGEubGVuZ3RoOysrYilhW2JdPWFyZ3VtZW50c1tiXTtyZXR1cm4gYS5sZW5ndGgmJmFbYS5sZW5ndGgtMV1pbnN0YW5jZW9mIGQmJih0aGlzLnA1PWFbYS5sZW5ndGgtMV0pLFwibWF0M1wiPT09YVswXT90aGlzLm1hdDM9QXJyYXkuaXNBcnJheShhWzFdKT9hWzFdOm5ldyBlKFsxLDAsMCwwLDEsMCwwLDAsMV0pOnRoaXMubWF0ND1BcnJheS5pc0FycmF5KGFbMF0pP2FbMF06bmV3IGUoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKSx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgZC5NYXRyaXg/KHRoaXMubWF0ND1hLm1hdDQsdGhpcyk6ZihhKT8odGhpcy5tYXQ0PWEsdGhpcyk6KDE2PT09YXJndW1lbnRzLmxlbmd0aCYmKHRoaXMubWF0NFswXT1hcmd1bWVudHNbMF0sdGhpcy5tYXQ0WzFdPWFyZ3VtZW50c1sxXSx0aGlzLm1hdDRbMl09YXJndW1lbnRzWzJdLHRoaXMubWF0NFszXT1hcmd1bWVudHNbM10sdGhpcy5tYXQ0WzRdPWFyZ3VtZW50c1s0XSx0aGlzLm1hdDRbNV09YXJndW1lbnRzWzVdLHRoaXMubWF0NFs2XT1hcmd1bWVudHNbNl0sdGhpcy5tYXQ0WzddPWFyZ3VtZW50c1s3XSx0aGlzLm1hdDRbOF09YXJndW1lbnRzWzhdLHRoaXMubWF0NFs5XT1hcmd1bWVudHNbOV0sdGhpcy5tYXQ0WzEwXT1hcmd1bWVudHNbMTBdLHRoaXMubWF0NFsxMV09YXJndW1lbnRzWzExXSx0aGlzLm1hdDRbMTJdPWFyZ3VtZW50c1sxMl0sdGhpcy5tYXQ0WzEzXT1hcmd1bWVudHNbMTNdLHRoaXMubWF0NFsxNF09YXJndW1lbnRzWzE0XSx0aGlzLm1hdDRbMTVdPWFyZ3VtZW50c1sxNV0pLHRoaXMpfSxkLk1hdHJpeC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkLk1hdHJpeCh0aGlzLm1hdDQsdGhpcy5wNSl9LGQuTWF0cml4LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGQuTWF0cml4KHRoaXMucDUpO3JldHVybiBhLm1hdDRbMF09dGhpcy5tYXQ0WzBdLGEubWF0NFsxXT10aGlzLm1hdDRbMV0sYS5tYXQ0WzJdPXRoaXMubWF0NFsyXSxhLm1hdDRbM109dGhpcy5tYXQ0WzNdLGEubWF0NFs0XT10aGlzLm1hdDRbNF0sYS5tYXQ0WzVdPXRoaXMubWF0NFs1XSxhLm1hdDRbNl09dGhpcy5tYXQ0WzZdLGEubWF0NFs3XT10aGlzLm1hdDRbN10sYS5tYXQ0WzhdPXRoaXMubWF0NFs4XSxhLm1hdDRbOV09dGhpcy5tYXQ0WzldLGEubWF0NFsxMF09dGhpcy5tYXQ0WzEwXSxhLm1hdDRbMTFdPXRoaXMubWF0NFsxMV0sYS5tYXQ0WzEyXT10aGlzLm1hdDRbMTJdLGEubWF0NFsxM109dGhpcy5tYXQ0WzEzXSxhLm1hdDRbMTRdPXRoaXMubWF0NFsxNF0sYS5tYXQ0WzE1XT10aGlzLm1hdDRbMTVdLGF9LGQuTWF0cml4LmlkZW50aXR5PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgZC5NYXRyaXgoYSl9LGQuTWF0cml4LnByb3RvdHlwZS50cmFuc3Bvc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGcsaCxpO3JldHVybiBhIGluc3RhbmNlb2YgZC5NYXRyaXg/KGI9YS5tYXQ0WzFdLGM9YS5tYXQ0WzJdLGU9YS5tYXQ0WzNdLGc9YS5tYXQ0WzZdLGg9YS5tYXQ0WzddLGk9YS5tYXQ0WzExXSx0aGlzLm1hdDRbMF09YS5tYXQ0WzBdLHRoaXMubWF0NFsxXT1hLm1hdDRbNF0sdGhpcy5tYXQ0WzJdPWEubWF0NFs4XSx0aGlzLm1hdDRbM109YS5tYXQ0WzEyXSx0aGlzLm1hdDRbNF09Yix0aGlzLm1hdDRbNV09YS5tYXQ0WzVdLHRoaXMubWF0NFs2XT1hLm1hdDRbOV0sdGhpcy5tYXQ0WzddPWEubWF0NFsxM10sdGhpcy5tYXQ0WzhdPWMsdGhpcy5tYXQ0WzldPWcsdGhpcy5tYXQ0WzEwXT1hLm1hdDRbMTBdLHRoaXMubWF0NFsxMV09YS5tYXQ0WzE0XSx0aGlzLm1hdDRbMTJdPWUsdGhpcy5tYXQ0WzEzXT1oLHRoaXMubWF0NFsxNF09aSx0aGlzLm1hdDRbMTVdPWEubWF0NFsxNV0pOmYoYSkmJihiPWFbMV0sYz1hWzJdLGU9YVszXSxnPWFbNl0saD1hWzddLGk9YVsxMV0sdGhpcy5tYXQ0WzBdPWFbMF0sdGhpcy5tYXQ0WzFdPWFbNF0sdGhpcy5tYXQ0WzJdPWFbOF0sdGhpcy5tYXQ0WzNdPWFbMTJdLHRoaXMubWF0NFs0XT1iLHRoaXMubWF0NFs1XT1hWzVdLHRoaXMubWF0NFs2XT1hWzldLHRoaXMubWF0NFs3XT1hWzEzXSx0aGlzLm1hdDRbOF09Yyx0aGlzLm1hdDRbOV09Zyx0aGlzLm1hdDRbMTBdPWFbMTBdLHRoaXMubWF0NFsxMV09YVsxNF0sdGhpcy5tYXQ0WzEyXT1lLHRoaXMubWF0NFsxM109aCx0aGlzLm1hdDRbMTRdPWksdGhpcy5tYXQ0WzE1XT1hWzE1XSksdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihhKXt2YXIgYixjLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIsczthIGluc3RhbmNlb2YgZC5NYXRyaXg/KGI9YS5tYXQ0WzBdLGM9YS5tYXQ0WzFdLGU9YS5tYXQ0WzJdLGc9YS5tYXQ0WzNdLGg9YS5tYXQ0WzRdLGk9YS5tYXQ0WzVdLGo9YS5tYXQ0WzZdLGs9YS5tYXQ0WzddLGw9YS5tYXQ0WzhdLG09YS5tYXQ0WzldLG49YS5tYXQ0WzEwXSxvPWEubWF0NFsxMV0scD1hLm1hdDRbMTJdLHE9YS5tYXQ0WzEzXSxyPWEubWF0NFsxNF0scz1hLm1hdDRbMTVdKTpmKGEpJiYoYj1hWzBdLGM9YVsxXSxlPWFbMl0sZz1hWzNdLGg9YVs0XSxpPWFbNV0saj1hWzZdLGs9YVs3XSxsPWFbOF0sbT1hWzldLG49YVsxMF0sbz1hWzExXSxwPWFbMTJdLHE9YVsxM10scj1hWzE0XSxzPWFbMTVdKTt2YXIgdD1iKmktYypoLHU9YipqLWUqaCx2PWIqay1nKmgsdz1jKmotZSppLHg9YyprLWcqaSx5PWUqay1nKmosej1sKnEtbSpwLEE9bCpyLW4qcCxCPWwqcy1vKnAsQz1tKnItbipxLEQ9bSpzLW8qcSxFPW4qcy1vKnIsRj10KkUtdSpEK3YqQyt3KkIteCpBK3kqejtyZXR1cm4gRj8oRj0xL0YsdGhpcy5tYXQ0WzBdPShpKkUtaipEK2sqQykqRix0aGlzLm1hdDRbMV09KGUqRC1jKkUtZypDKSpGLHRoaXMubWF0NFsyXT0ocSp5LXIqeCtzKncpKkYsdGhpcy5tYXQ0WzNdPShuKngtbSp5LW8qdykqRix0aGlzLm1hdDRbNF09KGoqQi1oKkUtaypBKSpGLHRoaXMubWF0NFs1XT0oYipFLWUqQitnKkEpKkYsdGhpcy5tYXQ0WzZdPShyKnYtcCp5LXMqdSkqRix0aGlzLm1hdDRbN109KGwqeS1uKnYrbyp1KSpGLHRoaXMubWF0NFs4XT0oaCpELWkqQitrKnopKkYsdGhpcy5tYXQ0WzldPShjKkItYipELWcqeikqRix0aGlzLm1hdDRbMTBdPShwKngtcSp2K3MqdCkqRix0aGlzLm1hdDRbMTFdPShtKnYtbCp4LW8qdCkqRix0aGlzLm1hdDRbMTJdPShpKkEtaCpDLWoqeikqRix0aGlzLm1hdDRbMTNdPShiKkMtYypBK2UqeikqRix0aGlzLm1hdDRbMTRdPShxKnUtcCp3LXIqdCkqRix0aGlzLm1hdDRbMTVdPShsKnctbSp1K24qdCkqRix0aGlzKTpudWxsfSxkLk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0M3gzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5tYXQzWzBdLGI9dGhpcy5tYXQzWzFdLGM9dGhpcy5tYXQzWzJdLGQ9dGhpcy5tYXQzWzNdLGU9dGhpcy5tYXQzWzRdLGY9dGhpcy5tYXQzWzVdLGc9dGhpcy5tYXQzWzZdLGg9dGhpcy5tYXQzWzddLGk9dGhpcy5tYXQzWzhdLGo9aSplLWYqaCxrPS1pKmQrZipnLGw9aCpkLWUqZyxtPWEqaitiKmsrYypsO3JldHVybiBtPyhtPTEvbSx0aGlzLm1hdDNbMF09aiptLHRoaXMubWF0M1sxXT0oLWkqYitjKmgpKm0sdGhpcy5tYXQzWzJdPShmKmItYyplKSptLHRoaXMubWF0M1szXT1rKm0sdGhpcy5tYXQzWzRdPShpKmEtYypnKSptLHRoaXMubWF0M1s1XT0oLWYqYStjKmQpKm0sdGhpcy5tYXQzWzZdPWwqbSx0aGlzLm1hdDNbN109KC1oKmErYipnKSptLHRoaXMubWF0M1s4XT0oZSphLWIqZCkqbSx0aGlzKTpudWxsfSxkLk1hdHJpeC5wcm90b3R5cGUudHJhbnNwb3NlM3gzPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMV0sYz1hWzJdLGQ9YVs1XTtyZXR1cm4gdGhpcy5tYXQzWzFdPWFbM10sdGhpcy5tYXQzWzJdPWFbNl0sdGhpcy5tYXQzWzNdPWIsdGhpcy5tYXQzWzVdPWFbN10sdGhpcy5tYXQzWzZdPWMsdGhpcy5tYXQzWzddPWQsdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLmludmVyc2VUcmFuc3Bvc2U9ZnVuY3Rpb24oYSl7dm9pZCAwPT09dGhpcy5tYXQzP2NvbnNvbGUuZXJyb3IoXCJzb3JyeSwgdGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIHdpdGggbWF0M1wiKToodGhpcy5tYXQzWzBdPWEubWF0NFswXSx0aGlzLm1hdDNbMV09YS5tYXQ0WzFdLHRoaXMubWF0M1syXT1hLm1hdDRbMl0sdGhpcy5tYXQzWzNdPWEubWF0NFs0XSx0aGlzLm1hdDNbNF09YS5tYXQ0WzVdLHRoaXMubWF0M1s1XT1hLm1hdDRbNl0sdGhpcy5tYXQzWzZdPWEubWF0NFs4XSx0aGlzLm1hdDNbN109YS5tYXQ0WzldLHRoaXMubWF0M1s4XT1hLm1hdDRbMTBdKTt2YXIgYj10aGlzLmludmVydDN4MygpO2lmKGIpYi50cmFuc3Bvc2UzeDModGhpcy5tYXQzKTtlbHNlIGZvcih2YXIgYz0wO2M8OTtjKyspdGhpcy5tYXQzW2NdPTA7cmV0dXJuIHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5kZXRlcm1pbmFudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMubWF0NFswXSp0aGlzLm1hdDRbNV0tdGhpcy5tYXQ0WzFdKnRoaXMubWF0NFs0XSxiPXRoaXMubWF0NFswXSp0aGlzLm1hdDRbNl0tdGhpcy5tYXQ0WzJdKnRoaXMubWF0NFs0XSxjPXRoaXMubWF0NFswXSp0aGlzLm1hdDRbN10tdGhpcy5tYXQ0WzNdKnRoaXMubWF0NFs0XSxkPXRoaXMubWF0NFsxXSp0aGlzLm1hdDRbNl0tdGhpcy5tYXQ0WzJdKnRoaXMubWF0NFs1XSxlPXRoaXMubWF0NFsxXSp0aGlzLm1hdDRbN10tdGhpcy5tYXQ0WzNdKnRoaXMubWF0NFs1XSxmPXRoaXMubWF0NFsyXSp0aGlzLm1hdDRbN10tdGhpcy5tYXQ0WzNdKnRoaXMubWF0NFs2XSxnPXRoaXMubWF0NFs4XSp0aGlzLm1hdDRbMTNdLXRoaXMubWF0NFs5XSp0aGlzLm1hdDRbMTJdLGg9dGhpcy5tYXQ0WzhdKnRoaXMubWF0NFsxNF0tdGhpcy5tYXQ0WzEwXSp0aGlzLm1hdDRbMTJdLGk9dGhpcy5tYXQ0WzhdKnRoaXMubWF0NFsxNV0tdGhpcy5tYXQ0WzExXSp0aGlzLm1hdDRbMTJdLGo9dGhpcy5tYXQ0WzldKnRoaXMubWF0NFsxNF0tdGhpcy5tYXQ0WzEwXSp0aGlzLm1hdDRbMTNdLGs9dGhpcy5tYXQ0WzldKnRoaXMubWF0NFsxNV0tdGhpcy5tYXQ0WzExXSp0aGlzLm1hdDRbMTNdO3JldHVybiBhKih0aGlzLm1hdDRbMTBdKnRoaXMubWF0NFsxNV0tdGhpcy5tYXQ0WzExXSp0aGlzLm1hdDRbMTRdKS1iKmsrYypqK2QqaS1lKmgrZipnfSxkLk1hdHJpeC5wcm90b3R5cGUubXVsdD1mdW5jdGlvbihhKXt2YXIgYjtpZihhPT09dGhpc3x8YT09PXRoaXMubWF0NCliPXRoaXMuY29weSgpLm1hdDQ7ZWxzZSBpZihhIGluc3RhbmNlb2YgZC5NYXRyaXgpYj1hLm1hdDQ7ZWxzZXtpZighZihhKSlyZXR1cm47Yj1hfXZhciBjPXRoaXMubWF0NFswXSxlPXRoaXMubWF0NFsxXSxnPXRoaXMubWF0NFsyXSxoPXRoaXMubWF0NFszXTtyZXR1cm4gdGhpcy5tYXQ0WzBdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzFdPWMqYlsxXStlKmJbNV0rZypiWzldK2gqYlsxM10sdGhpcy5tYXQ0WzJdPWMqYlsyXStlKmJbNl0rZypiWzEwXStoKmJbMTRdLHRoaXMubWF0NFszXT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSxjPXRoaXMubWF0NFs0XSxlPXRoaXMubWF0NFs1XSxnPXRoaXMubWF0NFs2XSxoPXRoaXMubWF0NFs3XSx0aGlzLm1hdDRbNF09YypiWzBdK2UqYls0XStnKmJbOF0raCpiWzEyXSx0aGlzLm1hdDRbNV09YypiWzFdK2UqYls1XStnKmJbOV0raCpiWzEzXSx0aGlzLm1hdDRbNl09YypiWzJdK2UqYls2XStnKmJbMTBdK2gqYlsxNF0sdGhpcy5tYXQ0WzddPWMqYlszXStlKmJbN10rZypiWzExXStoKmJbMTVdLGM9dGhpcy5tYXQ0WzhdLGU9dGhpcy5tYXQ0WzldLGc9dGhpcy5tYXQ0WzEwXSxoPXRoaXMubWF0NFsxMV0sdGhpcy5tYXQ0WzhdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzldPWMqYlsxXStlKmJbNV0rZypiWzldK2gqYlsxM10sdGhpcy5tYXQ0WzEwXT1jKmJbMl0rZSpiWzZdK2cqYlsxMF0raCpiWzE0XSx0aGlzLm1hdDRbMTFdPWMqYlszXStlKmJbN10rZypiWzExXStoKmJbMTVdLGM9dGhpcy5tYXQ0WzEyXSxlPXRoaXMubWF0NFsxM10sZz10aGlzLm1hdDRbMTRdLGg9dGhpcy5tYXQ0WzE1XSx0aGlzLm1hdDRbMTJdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzEzXT1jKmJbMV0rZSpiWzVdK2cqYls5XStoKmJbMTNdLHRoaXMubWF0NFsxNF09YypiWzJdK2UqYls2XStnKmJbMTBdK2gqYlsxNF0sdGhpcy5tYXQ0WzE1XT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KGI9YS55LGM9YS56LGE9YS54KTphIGluc3RhbmNlb2YgQXJyYXkmJihiPWFbMV0sYz1hWzJdLGE9YVswXSksdGhpcy5tYXQ0WzBdKj1hLHRoaXMubWF0NFsxXSo9YSx0aGlzLm1hdDRbMl0qPWEsdGhpcy5tYXQ0WzNdKj1hLHRoaXMubWF0NFs0XSo9Yix0aGlzLm1hdDRbNV0qPWIsdGhpcy5tYXQ0WzZdKj1iLHRoaXMubWF0NFs3XSo9Yix0aGlzLm1hdDRbOF0qPWMsdGhpcy5tYXQ0WzldKj1jLHRoaXMubWF0NFsxMF0qPWMsdGhpcy5tYXQ0WzExXSo9Yyx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXRoaXMucDU/dGhpcy5wNS5fdG9SYWRpYW5zKGEpOmE7YiBpbnN0YW5jZW9mIGQuVmVjdG9yPyhjPWIueSxlPWIueixiPWIueCk6YiBpbnN0YW5jZW9mIEFycmF5JiYoYz1iWzFdLGU9YlsyXSxiPWJbMF0pO3ZhciBnPU1hdGguc3FydChiKmIrYypjK2UqZSk7Yio9MS9nLGMqPTEvZyxlKj0xL2c7dmFyIGg9dGhpcy5tYXQ0WzBdLGk9dGhpcy5tYXQ0WzFdLGo9dGhpcy5tYXQ0WzJdLGs9dGhpcy5tYXQ0WzNdLGw9dGhpcy5tYXQ0WzRdLG09dGhpcy5tYXQ0WzVdLG49dGhpcy5tYXQ0WzZdLG89dGhpcy5tYXQ0WzddLHA9dGhpcy5tYXQ0WzhdLHE9dGhpcy5tYXQ0WzldLHI9dGhpcy5tYXQ0WzEwXSxzPXRoaXMubWF0NFsxMV0sdD1NYXRoLnNpbihmKSx1PU1hdGguY29zKGYpLHY9MS11LHc9YipiKnYrdSx4PWMqYip2K2UqdCx5PWUqYip2LWMqdCx6PWIqYyp2LWUqdCxBPWMqYyp2K3UsQj1lKmMqditiKnQsQz1iKmUqditjKnQsRD1jKmUqdi1iKnQsRT1lKmUqdit1O3JldHVybiB0aGlzLm1hdDRbMF09aCp3K2wqeCtwKnksdGhpcy5tYXQ0WzFdPWkqdyttKngrcSp5LHRoaXMubWF0NFsyXT1qKncrbip4K3IqeSx0aGlzLm1hdDRbM109ayp3K28qeCtzKnksdGhpcy5tYXQ0WzRdPWgqeitsKkErcCpCLHRoaXMubWF0NFs1XT1pKnorbSpBK3EqQix0aGlzLm1hdDRbNl09aip6K24qQStyKkIsdGhpcy5tYXQ0WzddPWsqeitvKkErcypCLHRoaXMubWF0NFs4XT1oKkMrbCpEK3AqRSx0aGlzLm1hdDRbOV09aSpDK20qRCtxKkUsdGhpcy5tYXQ0WzEwXT1qKkMrbipEK3IqRSx0aGlzLm1hdDRbMTFdPWsqQytvKkQrcypFLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSl7dmFyIGI9YVswXSxjPWFbMV0sZD1hWzJdfHwwO3RoaXMubWF0NFsxMl0rPXRoaXMubWF0NFswXSpiK3RoaXMubWF0NFs0XSpjK3RoaXMubWF0NFs4XSpkLHRoaXMubWF0NFsxM10rPXRoaXMubWF0NFsxXSpiK3RoaXMubWF0NFs1XSpjK3RoaXMubWF0NFs5XSpkLHRoaXMubWF0NFsxNF0rPXRoaXMubWF0NFsyXSpiK3RoaXMubWF0NFs2XSpjK3RoaXMubWF0NFsxMF0qZCx0aGlzLm1hdDRbMTVdKz10aGlzLm1hdDRbM10qYit0aGlzLm1hdDRbN10qYyt0aGlzLm1hdDRbMTFdKmR9LGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKGEpe3RoaXMucm90YXRlKGEsMSwwLDApfSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbihhKXt0aGlzLnJvdGF0ZShhLDAsMSwwKX0sZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oYSl7dGhpcy5yb3RhdGUoYSwwLDAsMSl9LGQuTWF0cml4LnByb3RvdHlwZS5wZXJzcGVjdGl2ZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0xL01hdGgudGFuKGEvMiksZj0xLyhjLWQpO3JldHVybiB0aGlzLm1hdDRbMF09ZS9iLHRoaXMubWF0NFsxXT0wLHRoaXMubWF0NFsyXT0wLHRoaXMubWF0NFszXT0wLHRoaXMubWF0NFs0XT0wLHRoaXMubWF0NFs1XT1lLHRoaXMubWF0NFs2XT0wLHRoaXMubWF0NFs3XT0wLHRoaXMubWF0NFs4XT0wLHRoaXMubWF0NFs5XT0wLHRoaXMubWF0NFsxMF09KGQrYykqZix0aGlzLm1hdDRbMTFdPS0xLHRoaXMubWF0NFsxMl09MCx0aGlzLm1hdDRbMTNdPTAsdGhpcy5tYXQ0WzE0XT0yKmQqYypmLHRoaXMubWF0NFsxNV09MCx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUub3J0aG89ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPTEvKGEtYiksaD0xLyhjLWQpLGk9MS8oZS1mKTtyZXR1cm4gdGhpcy5tYXQ0WzBdPS0yKmcsdGhpcy5tYXQ0WzFdPTAsdGhpcy5tYXQ0WzJdPTAsdGhpcy5tYXQ0WzNdPTAsdGhpcy5tYXQ0WzRdPTAsdGhpcy5tYXQ0WzVdPS0yKmgsdGhpcy5tYXQ0WzZdPTAsdGhpcy5tYXQ0WzddPTAsdGhpcy5tYXQ0WzhdPTAsdGhpcy5tYXQ0WzldPTAsdGhpcy5tYXQ0WzEwXT0yKmksdGhpcy5tYXQ0WzExXT0wLHRoaXMubWF0NFsxMl09KGErYikqZyx0aGlzLm1hdDRbMTNdPShkK2MpKmgsdGhpcy5tYXQ0WzE0XT0oZitlKSppLHRoaXMubWF0NFsxNV09MSx0aGlzfSxiLmV4cG9ydHM9ZC5NYXRyaXh9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QuUmVuZGVyZXJHTC5wcm90b3R5cGUuYmVnaW5TaGFwZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT12b2lkIDAhPT1hP2E6ZS5MSU5FX1NUUklQLHZvaWQgMD09PXRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcz8odGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5lZGdlcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLmNvbG9yQnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLnV2QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0ZXhCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUubGluZU5vcm1hbEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5wb2ludFZlcnRleEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4PVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4PVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXg9W10pOih0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLmVkZ2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGljZXMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLmxlbmd0aD0wKSx0aGlzLmlzSW1tZWRpYXRlRHJhd2luZz0hMCx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnZlcnRleD1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZjtjPWU9Zj0wLDM9PT1hcmd1bWVudHMubGVuZ3RoP2M9YXJndW1lbnRzWzJdOjQ9PT1hcmd1bWVudHMubGVuZ3RoPyhlPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXSk6NT09PWFyZ3VtZW50cy5sZW5ndGgmJihjPWFyZ3VtZW50c1syXSxlPWFyZ3VtZW50c1szXSxmPWFyZ3VtZW50c1s0XSk7dmFyIGc9bmV3IGQuVmVjdG9yKGEsYixjKTt0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMucHVzaChnKTt2YXIgaD10aGlzLmN1ckZpbGxDb2xvcnx8Wy41LC41LC41LDFdO3JldHVybiB0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzLnB1c2goaFswXSxoWzFdLGhbMl0saFszXSksdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLnB1c2goZSxmKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXT1hLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdPWIsdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMl09Yyx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFswXT1hLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdPWIsdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMl09Yyx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmVuZFNoYXBlPWZ1bmN0aW9uKGEsYixjLGYsZyxoKXtpZih0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPT09ZS5QT0lOVFMpdGhpcy5fdXNlUG9pbnRTaGFkZXIoKSx0aGlzLmN1clBvaW50U2hhZGVyLmJpbmRTaGFkZXIoKSx0aGlzLl9kcmF3UG9pbnRzKHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcyx0aGlzLmltbWVkaWF0ZU1vZGUucG9pbnRWZXJ0ZXhCdWZmZXIpLHRoaXMuY3VyUG9pbnRTaGFkZXIudW5iaW5kU2hhZGVyKCk7ZWxzZSBpZih0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoPjEpe2lmKHRoaXMuX3VzZUltbWVkaWF0ZU1vZGVTaGFkZXIoKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5kcmF3TW9kZSE9PWUuVEVYVFVSRSl7Zm9yKHZhciBpPTA7aTx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoLTE7aSsrKXRoaXMuaW1tZWRpYXRlTW9kZS5lZGdlcy5wdXNoKFtpLGkrMV0pO2E9PT1lLkNMT1NFJiZ0aGlzLmltbWVkaWF0ZU1vZGUuZWRnZXMucHVzaChbdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aC0xLDBdKSxkLkdlb21ldHJ5LnByb3RvdHlwZS5fZWRnZXNUb1ZlcnRpY2VzLmNhbGwodGhpcy5pbW1lZGlhdGVNb2RlKSx0aGlzLl9kcmF3U3Ryb2tlSW1tZWRpYXRlTW9kZSgpfWlmKHRoaXMuX2RvRmlsbCl7aWYodGhpcy5pc0Jlemllcnx8dGhpcy5pc1F1YWRyYXRpY3x8dGhpcy5pc0N1cnZlKXt2YXIgaj1bbmV3IEZsb2F0MzJBcnJheSh0aGlzLl92VG9OQXJyYXkodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzKSldLGs9dGhpcy5fdHJpYW5ndWxhdGUoaik7dGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzPVtdO2Zvcih2YXIgbD0wLG09ay5sZW5ndGg7bDxtO2wrPTMpdGhpcy52ZXJ0ZXgoa1tsXSxrW2wrMV0sa1tsKzJdKX10aGlzLl9kcmF3RmlsbEltbWVkaWF0ZU1vZGUoYSxiLGMsZixnLGgpfX1yZXR1cm4gdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLmxlbmd0aD0wLHRoaXMuaXNJbW1lZGlhdGVEcmF3aW5nPSExLHRoaXMuaXNCZXppZXI9ITEsdGhpcy5pc1F1YWRyYXRpYz0hMSx0aGlzLmlzQ3VydmU9ITEsdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXgubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXgubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5sZW5ndGg9MCx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9kcmF3RmlsbEltbWVkaWF0ZU1vZGU9ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe3ZhciBoPXRoaXMuR0w7aWYodGhpcy5jdXJGaWxsU2hhZGVyLmJpbmRTaGFkZXIoKSx0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhCdWZmZXIsaC5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcyksRmxvYXQzMkFycmF5LGguRFlOQU1JQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGguRkxPQVQsITEsMCwwKSksdGhpcy5kcmF3TW9kZT09PWUuRklMTCYmdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleENvbG9yJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUuY29sb3JCdWZmZXIsaC5BUlJBWV9CVUZGRVIsdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleENvbG9ycyxGbG9hdDMyQXJyYXksaC5EWU5BTUlDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleENvbG9yLmxvY2F0aW9uLDQsaC5GTE9BVCwhMSwwLDApKSx0aGlzLmRyYXdNb2RlPT09ZS5URVhUVVJFJiZ0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQmJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS51dkJ1ZmZlcixoLkFSUkFZX0JVRkZFUix0aGlzLmltbWVkaWF0ZU1vZGUudXZDb29yZHMsRmxvYXQzMkFycmF5LGguRFlOQU1JQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLGguRkxPQVQsITEsMCwwKSksdGhpcy5kcmF3TW9kZT09PWUuRklMTHx8dGhpcy5kcmF3TW9kZT09PWUuVEVYVFVSRSlzd2l0Y2godGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZSl7Y2FzZSBlLkxJTkVfU1RSSVA6Y2FzZSBlLkxJTkVTOmNhc2UgZS5UUklBTkdMRVM6dGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT10aGlzLmlzQmV6aWVyfHx0aGlzLmlzUXVhZHJhdGljfHx0aGlzLmlzQ3VydmU/ZS5UUklBTkdMRVM6ZS5UUklBTkdMRV9GQU59ZWxzZSBzd2l0Y2godGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZSl7Y2FzZSBlLkxJTkVfU1RSSVA6Y2FzZSBlLkxJTkVTOnRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9ZS5MSU5FX0xPT1B9aWYodGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT09PWUuUVVBRFN8fHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9PT1lLlFVQURfU1RSSVApdGhyb3cgbmV3IEVycm9yKFwic29ycnksIFwiK3RoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGUrXCIgbm90IHlldCBpbXBsZW1lbnRlZCBpbiB3ZWJnbCBtb2RlLlwiKTt0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJGaWxsQ29sb3IpLGguZW5hYmxlKGguQkxFTkQpLGguZHJhd0FycmF5cyh0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlLDAsdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLHRoaXMuY3VyRmlsbFNoYWRlci51bmJpbmRTaGFkZXIoKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd1N0cm9rZUltbWVkaWF0ZU1vZGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLkdMO3RoaXMuY3VyU3Ryb2tlU2hhZGVyLmJpbmRTaGFkZXIoKSx0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbiYmKHRoaXMuX2JpbmRCdWZmZXIodGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0ZXhCdWZmZXIsYS5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbih0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzKSxGbG9hdDMyQXJyYXksYS5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYS5GTE9BVCwhMSwwLDApKSx0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24mJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFsQnVmZmVyLGEuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4odGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxzKSxGbG9hdDMyQXJyYXksYS5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYURpcmVjdGlvbi5sb2NhdGlvbiw0LGEuRkxPQVQsITEsMCwwKSksdGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyU3Ryb2tlQ29sb3IpLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUywwLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGljZXMubGVuZ3RoKSx0aGlzLmN1clN0cm9rZVNoYWRlci51bmJpbmRTaGFkZXIoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGIuZXhwb3J0cz1kLlJlbmRlcmVyR0x9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDczOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPTA7ZC5SZW5kZXJlckdMLnByb3RvdHlwZS5faW5pdEJ1ZmZlckRlZmF1bHRzPWZ1bmN0aW9uKGEpe2lmKHRoaXMuX2ZyZWVCdWZmZXJzKGEpLCsrZT4xZTMpe3ZhciBiPU9iamVjdC5rZXlzKHRoaXMuZ0hhc2gpWzBdO2RlbGV0ZSB0aGlzLmdIYXNoW2JdLGUtLX10aGlzLmdIYXNoW2FdPXt9fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9mcmVlQnVmZmVycz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmdIYXNoW2FdO2lmKGIpe2RlbGV0ZSB0aGlzLmdIYXNoW2FdLGUtLTt2YXIgYz10aGlzLkdMO2IudmVydGV4QnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLnZlcnRleEJ1ZmZlciksYi5ub3JtYWxCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIubm9ybWFsQnVmZmVyKSxiLmxpbmVOb3JtYWxCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIubGluZU5vcm1hbEJ1ZmZlciksYi51dkJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi51dkJ1ZmZlciksYi5pbmRleEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi5pbmRleEJ1ZmZlciksYi5saW5lVmVydGV4QnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLmxpbmVWZXJ0ZXhCdWZmZXIpfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5jcmVhdGVCdWZmZXJzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5HTDt0aGlzLl9pbml0QnVmZmVyRGVmYXVsdHMoYSk7dmFyIGQ9dGhpcy5nSGFzaFthXTtyZXR1cm4gZC5udW1iZXJPZkl0ZW1zPTMqYi5mYWNlcy5sZW5ndGgsZC5saW5lVmVydGV4Q291bnQ9Yi5saW5lVmVydGljZXMubGVuZ3RoLHRoaXMuX3VzZUNvbG9yU2hhZGVyKCksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJihkLmxpbmVWZXJ0ZXhCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQubGluZVZlcnRleEJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIubGluZVZlcnRpY2VzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYy5GTE9BVCwhMSwwLDApKSx0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24mJihkLmxpbmVOb3JtYWxCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQubGluZU5vcm1hbEJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIubGluZU5vcm1hbHMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uLmxvY2F0aW9uLDQsYy5GTE9BVCwhMSwwLDApKSx0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJihkLnZlcnRleEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC52ZXJ0ZXhCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KGIudmVydGljZXMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGMuRkxPQVQsITEsMCwwKSksZC5pbmRleEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC5pbmRleEJ1ZmZlcixjLkVMRU1FTlRfQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4oYi5mYWNlcyksVWludDE2QXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYU5vcm1hbCYmKGQubm9ybWFsQnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLm5vcm1hbEJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl92VG9OQXJyYXkoYi52ZXJ0ZXhOb3JtYWxzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hTm9ybWFsLmxvY2F0aW9uLDMsYy5GTE9BVCwhMSwwLDApKSx0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQmJihkLnV2QnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLnV2QnVmZmVyLGMuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4oYi51dnMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLGMuRkxPQVQsITEsMCwwKSksZH0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5kcmF3QnVmZmVycz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLkdMO3RoaXMuX3VzZUNvbG9yU2hhZGVyKCk7dmFyIGM9dGhpcy5nSGFzaFthXTtyZXR1cm4gdGhpcy5fZG9TdHJva2UmJmMubGluZVZlcnRleENvdW50PjAmJih0aGlzLmN1clN0cm9rZVNoYWRlci5iaW5kU2hhZGVyKCksYy5saW5lVmVydGV4QnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLmxpbmVWZXJ0ZXhCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGIuRkxPQVQsITEsMCwwKSksYy5saW5lTm9ybWFsQnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLmxpbmVOb3JtYWxCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24ubG9jYXRpb24sNCxiLkZMT0FULCExLDAsMCkpLHRoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1clN0cm9rZUNvbG9yKSx0aGlzLl9kcmF3QXJyYXlzKGIuVFJJQU5HTEVTLGEpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLnVuYmluZFNoYWRlcigpKSwhMSE9PXRoaXMuX2RvRmlsbCYmKHRoaXMuY3VyRmlsbFNoYWRlci5iaW5kU2hhZGVyKCksYy52ZXJ0ZXhCdWZmZXImJih0aGlzLl9iaW5kQnVmZmVyKGMudmVydGV4QnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGIuRkxPQVQsITEsMCwwKSksYy5pbmRleEJ1ZmZlciYmdGhpcy5fYmluZEJ1ZmZlcihjLmluZGV4QnVmZmVyLGIuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLGMubm9ybWFsQnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLm5vcm1hbEJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hTm9ybWFsLmxvY2F0aW9uLDMsYi5GTE9BVCwhMSwwLDApKSxjLnV2QnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLnV2QnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLGIuRkxPQVQsITEsMCwwKSksdGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyRmlsbENvbG9yKSx0aGlzLl9kcmF3RWxlbWVudHMoYi5UUklBTkdMRVMsYSksdGhpcy5jdXJGaWxsU2hhZGVyLnVuYmluZFNoYWRlcigpKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmRyYXdCdWZmZXJzU2NhbGVkPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMudU1WTWF0cml4LmNvcHkoKTt0cnl7dGhpcy51TVZNYXRyaXguc2NhbGUoYixjLGQpLHRoaXMuZHJhd0J1ZmZlcnMoYSl9ZmluYWxseXt0aGlzLnVNVk1hdHJpeD1lfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd0FycmF5cz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLkdMLmRyYXdBcnJheXMoYSwwLHRoaXMuZ0hhc2hbYl0ubGluZVZlcnRleENvdW50KSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd0VsZW1lbnRzPWZ1bmN0aW9uKGEsYil7dGhpcy5HTC5kcmF3RWxlbWVudHMoYSx0aGlzLmdIYXNoW2JdLm51bWJlck9mSXRlbXMsdGhpcy5HTC5VTlNJR05FRF9TSE9SVCwwKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdQb2ludHM9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLkdMO3RoaXMuX2JpbmRCdWZmZXIoYixjLkFSUkFZX0JVRkZFUix0aGlzLl92VG9OQXJyYXkoYSksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyUG9pbnRTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyUG9pbnRTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxjLkZMT0FULCExLDAsMCksYy5kcmF3QXJyYXlzKGMuUG9pbnRzLDAsYS5sZW5ndGgpfSxiLmV4cG9ydHM9ZC5SZW5kZXJlckdMfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDc0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKSxmPWEoXCJsaWJ0ZXNzXCIpO2EoXCIuL3A1LlNoYWRlclwiKSxhKFwiLi9wNS5DYW1lcmFcIiksYShcIi4uL2NvcmUvcDUuUmVuZGVyZXJcIiksYShcIi4vcDUuTWF0cml4XCIpO3ZhciBnPXtpbW1lZGlhdGVWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGFWZXJ0ZXhDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBmbG9hdCB1UmVzb2x1dGlvbjtcXG51bmlmb3JtIGZsb2F0IHVQb2ludFNpemU7XFxuXFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdkNvbG9yID0gYVZlcnRleENvbG9yO1xcbiAgZ2xfUG9pbnRTaXplID0gdVBvaW50U2l6ZTtcXG59XFxuXCIsdmVydGV4Q29sb3JWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGFWZXJ0ZXhDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdkNvbG9yID0gYVZlcnRleENvbG9yO1xcbn1cXG5cIix2ZXJ0ZXhDb2xvckZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZvaWQgbWFpbih2b2lkKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7XFxufVwiLG5vcm1hbFZlcnQ6XCJhdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzMgYU5vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyB1Tm9ybWFsTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMyB2VmVydGV4Tm9ybWFsO1xcbnZhcnlpbmcgaGlnaHAgdmVjMiB2VmVydFRleENvb3JkO1xcblxcbnZvaWQgbWFpbih2b2lkKSB7XFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuICB2VmVydGV4Tm9ybWFsID0gbm9ybWFsaXplKHZlYzMoIHVOb3JtYWxNYXRyaXggKiBhTm9ybWFsICkpO1xcbiAgdlZlcnRUZXhDb29yZCA9IGFUZXhDb29yZDtcXG59XFxuXCIsbm9ybWFsRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnZhcnlpbmcgdmVjMyB2VmVydGV4Tm9ybWFsO1xcbnZvaWQgbWFpbih2b2lkKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZWZXJ0ZXhOb3JtYWwsIDEuMCk7XFxufVwiLGJhc2ljRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnZhcnlpbmcgdmVjMyB2VmVydGV4Tm9ybWFsO1xcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdU1hdGVyaWFsQ29sb3I7XFxufVwiLGxpZ2h0VmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMyBhTm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXhDb29yZDtcXG5cXG51bmlmb3JtIG1hdDQgdVZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyB1Tm9ybWFsTWF0cml4O1xcbnVuaWZvcm0gaW50IHVBbWJpZW50TGlnaHRDb3VudDtcXG51bmlmb3JtIGludCB1RGlyZWN0aW9uYWxMaWdodENvdW50O1xcbnVuaWZvcm0gaW50IHVQb2ludExpZ2h0Q291bnQ7XFxuXFxudW5pZm9ybSB2ZWMzIHVBbWJpZW50Q29sb3JbOF07XFxudW5pZm9ybSB2ZWMzIHVMaWdodGluZ0RpcmVjdGlvbls4XTtcXG51bmlmb3JtIHZlYzMgdURpcmVjdGlvbmFsQ29sb3JbOF07XFxudW5pZm9ybSB2ZWMzIHVQb2ludExpZ2h0TG9jYXRpb25bOF07XFxudW5pZm9ybSB2ZWMzIHVQb2ludExpZ2h0Q29sb3JbOF07XFxudW5pZm9ybSBib29sIHVTcGVjdWxhcjtcXG5cXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdlZlcnRUZXhDb29yZDtcXG52YXJ5aW5nIHZlYzMgdkxpZ2h0V2VpZ2h0aW5nO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG5cXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG5cXG4gIHZlYzMgdmVydGV4Tm9ybWFsID0gbm9ybWFsaXplKHZlYzMoIHVOb3JtYWxNYXRyaXggKiBhTm9ybWFsICkpO1xcbiAgdlZlcnRleE5vcm1hbCA9IHZlcnRleE5vcm1hbDtcXG4gIHZWZXJ0VGV4Q29vcmQgPSBhVGV4Q29vcmQ7XFxuXFxuICB2ZWM0IG12UG9zaXRpb24gPSB1TW9kZWxWaWV3TWF0cml4ICogdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICB2ZWMzIGV5ZURpcmVjdGlvbiA9IG5vcm1hbGl6ZSgtbXZQb3NpdGlvbi54eXopO1xcblxcbiAgZmxvYXQgc2hpbmluZXNzID0gMzIuMDtcXG4gIGZsb2F0IHNwZWN1bGFyRmFjdG9yID0gMi4wO1xcbiAgZmxvYXQgZGlmZnVzZUZhY3RvciA9IDAuMztcXG5cXG4gIHZlYzMgYW1iaWVudExpZ2h0RmFjdG9yID0gdmVjMygwLjApO1xcblxcbiAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHtcXG4gICAgaWYgKHVBbWJpZW50TGlnaHRDb3VudCA9PSBpKSBicmVhaztcXG4gICAgYW1iaWVudExpZ2h0RmFjdG9yICs9IHVBbWJpZW50Q29sb3JbaV07XFxuICB9XFxuXFxuXFxuICB2ZWMzIGRpcmVjdGlvbmFsTGlnaHRGYWN0b3IgPSB2ZWMzKDAuMCk7XFxuXFxuICBmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykge1xcbiAgICBpZiAodURpcmVjdGlvbmFsTGlnaHRDb3VudCA9PSBqKSBicmVhaztcXG4gICAgdmVjMyBkaXIgPSB1TGlnaHRpbmdEaXJlY3Rpb25bal07XFxuICAgIGZsb2F0IGRpcmVjdGlvbmFsTGlnaHRXZWlnaHRpbmcgPSBtYXgoZG90KHZlcnRleE5vcm1hbCwgLWRpciksIDAuMCk7XFxuICAgIGRpcmVjdGlvbmFsTGlnaHRGYWN0b3IgKz0gdURpcmVjdGlvbmFsQ29sb3Jbal0gKiBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nO1xcbiAgfVxcblxcblxcbiAgdmVjMyBwb2ludExpZ2h0RmFjdG9yID0gdmVjMygwLjApO1xcblxcbiAgZm9yIChpbnQgayA9IDA7IGsgPCA4OyBrKyspIHtcXG4gICAgaWYgKHVQb2ludExpZ2h0Q291bnQgPT0gaykgYnJlYWs7XFxuICAgIHZlYzMgbG9jID0gKHVWaWV3TWF0cml4ICogdmVjNCh1UG9pbnRMaWdodExvY2F0aW9uW2tdLCAxLjApKS54eXo7XFxuICAgIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBub3JtYWxpemUobG9jIC0gbXZQb3NpdGlvbi54eXopO1xcblxcbiAgICBmbG9hdCBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nID0gbWF4KGRvdCh2ZXJ0ZXhOb3JtYWwsIGxpZ2h0RGlyZWN0aW9uKSwgMC4wKTtcXG5cXG4gICAgZmxvYXQgc3BlY3VsYXJMaWdodFdlaWdodGluZyA9IDAuMDtcXG4gICAgaWYgKHVTcGVjdWxhciApe1xcbiAgICAgIHZlYzMgcmVmbGVjdGlvbkRpcmVjdGlvbiA9IHJlZmxlY3QoLWxpZ2h0RGlyZWN0aW9uLCB2ZXJ0ZXhOb3JtYWwpO1xcbiAgICAgIHNwZWN1bGFyTGlnaHRXZWlnaHRpbmcgPSBwb3cobWF4KGRvdChyZWZsZWN0aW9uRGlyZWN0aW9uLCBleWVEaXJlY3Rpb24pLCAwLjApLCBzaGluaW5lc3MpO1xcbiAgICB9XFxuXFxuICAgIHBvaW50TGlnaHRGYWN0b3IgKz0gdVBvaW50TGlnaHRDb2xvcltrXSAqIChzcGVjdWxhckZhY3RvciAqIHNwZWN1bGFyTGlnaHRXZWlnaHRpbmdcXG4gICAgICArIGRpcmVjdGlvbmFsTGlnaHRXZWlnaHRpbmcgKiBkaWZmdXNlRmFjdG9yKTtcXG4gIH1cXG5cXG4gIHZMaWdodFdlaWdodGluZyA9ICBhbWJpZW50TGlnaHRGYWN0b3IgKyBkaXJlY3Rpb25hbExpZ2h0RmFjdG9yICsgcG9pbnRMaWdodEZhY3RvcjtcXG59XFxuXCIsbGlnaHRUZXh0dXJlRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGJvb2wgaXNUZXh0dXJlO1xcbnVuaWZvcm0gYm9vbCB1VXNlTGlnaHRpbmc7XFxuXFxudmFyeWluZyB2ZWMzIHZMaWdodFdlaWdodGluZztcXG52YXJ5aW5nIGhpZ2hwIHZlYzIgdlZlcnRUZXhDb29yZDtcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gaXNUZXh0dXJlID8gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VmVydFRleENvb3JkKSA6IHVNYXRlcmlhbENvbG9yO1xcbiAgaWYgKHVVc2VMaWdodGluZylcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAqPSB2TGlnaHRXZWlnaHRpbmc7XFxufVwiLHBob25nVmVydDpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbmF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMyBhTm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXhDb29yZDtcXG5cXG51bmlmb3JtIHZlYzMgdUFtYmllbnRDb2xvcls4XTtcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIHVOb3JtYWxNYXRyaXg7XFxudW5pZm9ybSBpbnQgdUFtYmllbnRMaWdodENvdW50O1xcblxcbnZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZBbWJpZW50Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgdmVjNCB2aWV3TW9kZWxQb3NpdGlvbiA9IHVNb2RlbFZpZXdNYXRyaXggKiB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG5cXG4gIC8vIFBhc3MgdmFyeWluZ3MgdG8gZnJhZ21lbnQgc2hhZGVyXFxuICB2Vmlld1Bvc2l0aW9uID0gdmlld01vZGVsUG9zaXRpb24ueHl6O1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHZpZXdNb2RlbFBvc2l0aW9uOyAgXFxuXFxuICB2Tm9ybWFsID0gbm9ybWFsaXplKHVOb3JtYWxNYXRyaXggKiBub3JtYWxpemUoYU5vcm1hbCkpO1xcbiAgdlRleENvb3JkID0gYVRleENvb3JkO1xcblxcbiAgdkFtYmllbnRDb2xvciA9IHZlYzMoMC4wKTtcXG4gIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7XFxuICAgIGlmICh1QW1iaWVudExpZ2h0Q291bnQgPT0gaSkgYnJlYWs7XFxuICAgIHZBbWJpZW50Q29sb3IgKz0gdUFtYmllbnRDb2xvcltpXTtcXG4gIH1cXG59XFxuXCIsXG5waG9uZ0ZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG4vL3VuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1Vmlld01hdHJpeDtcXG5cXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBib29sIGlzVGV4dHVyZTtcXG51bmlmb3JtIGJvb2wgdVVzZUxpZ2h0aW5nO1xcblxcbnVuaWZvcm0gdmVjMyB1TGlnaHRpbmdEaXJlY3Rpb25bOF07XFxudW5pZm9ybSB2ZWMzIHVEaXJlY3Rpb25hbENvbG9yWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodExvY2F0aW9uWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodENvbG9yWzhdO1xcbnVuaWZvcm0gYm9vbCB1U3BlY3VsYXI7XFxuXFxudW5pZm9ybSBpbnQgdURpcmVjdGlvbmFsTGlnaHRDb3VudDtcXG51bmlmb3JtIGludCB1UG9pbnRMaWdodENvdW50O1xcblxcbnZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZBbWJpZW50Q29sb3I7XFxuXFxudmVjMyBWO1xcbnZlYzMgTjtcXG5cXG5jb25zdCBmbG9hdCBzaGluaW5lc3MgPSAzMi4wO1xcbmNvbnN0IGZsb2F0IHNwZWN1bGFyRmFjdG9yID0gMi4wO1xcbmNvbnN0IGZsb2F0IGRpZmZ1c2VGYWN0b3IgPSAwLjczO1xcblxcbnN0cnVjdCBMaWdodFJlc3VsdCB7XFxuXFx0ZmxvYXQgc3BlY3VsYXI7XFxuXFx0ZmxvYXQgZGlmZnVzZTtcXG59O1xcblxcbmZsb2F0IHBob25nU3BlY3VsYXIoXFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxcbiAgZmxvYXQgc2hpbmluZXNzKSB7XFxuXFxuICB2ZWMzIFIgPSBub3JtYWxpemUocmVmbGVjdCgtbGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpKTsgIFxcbiAgcmV0dXJuIHBvdyhtYXgoMC4wLCBkb3QoUiwgdmlld0RpcmVjdGlvbikpLCBzaGluaW5lc3MpO1xcbn1cXG5cXG5mbG9hdCBsYW1iZXJ0RGlmZnVzZShcXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwpIHtcXG4gIHJldHVybiBtYXgoMC4wLCBkb3QoLWxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSk7XFxufVxcblxcbkxpZ2h0UmVzdWx0IGxpZ2h0KHZlYzMgbGlnaHRWZWN0b3IpIHtcXG5cXG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShsaWdodFZlY3Rvcik7XFxuXFxuICAvL2NvbXB1dGUgb3VyIGRpZmZ1c2UgJiBzcGVjdWxhciB0ZXJtc1xcbiAgTGlnaHRSZXN1bHQgbHI7XFxuICBpZiAodVNwZWN1bGFyKVxcbiAgICBsci5zcGVjdWxhciA9IHBob25nU3BlY3VsYXIoTCwgViwgTiwgc2hpbmluZXNzKTtcXG4gIGxyLmRpZmZ1c2UgPSBsYW1iZXJ0RGlmZnVzZShMLCBOKTtcXG4gIHJldHVybiBscjtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG5cXG4gIFYgPSBub3JtYWxpemUodlZpZXdQb3NpdGlvbik7XFxuICBOID0gdk5vcm1hbDtcXG5cXG4gIHZlYzMgZGlmZnVzZSA9IHZlYzMoMC4wKTtcXG4gIGZsb2F0IHNwZWN1bGFyID0gMC4wO1xcblxcbiAgZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHtcXG4gICAgaWYgKHVEaXJlY3Rpb25hbExpZ2h0Q291bnQgPT0gaikgYnJlYWs7XFxuXFxuICAgIExpZ2h0UmVzdWx0IHJlc3VsdCA9IGxpZ2h0KHVMaWdodGluZ0RpcmVjdGlvbltqXSk7XFxuICAgIGRpZmZ1c2UgKz0gcmVzdWx0LmRpZmZ1c2UgKiB1RGlyZWN0aW9uYWxDb2xvcltqXTtcXG4gICAgc3BlY3VsYXIgKz0gcmVzdWx0LnNwZWN1bGFyO1xcbiAgfVxcblxcbiAgZm9yIChpbnQgayA9IDA7IGsgPCA4OyBrKyspIHtcXG4gICAgaWYgKHVQb2ludExpZ2h0Q291bnQgPT0gaykgYnJlYWs7XFxuXFxuICAgIHZlYzMgbGlnaHRQb3NpdGlvbiA9ICh1Vmlld01hdHJpeCAqIHZlYzQodVBvaW50TGlnaHRMb2NhdGlvbltrXSwgMS4wKSkueHl6O1xcbiAgICB2ZWMzIGxpZ2h0VmVjdG9yID0gdlZpZXdQb3NpdGlvbiAtIGxpZ2h0UG9zaXRpb247XFxuXFx0XFxuICAgIC8vY2FsY3VsYXRlIGF0dGVudWF0aW9uXFxuICAgIGZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgobGlnaHRWZWN0b3IpO1xcbiAgICBmbG9hdCBmYWxsb2ZmID0gNTAwLjAgLyAobGlnaHREaXN0YW5jZSArIDUwMC4wKTtcXG5cXG4gICAgTGlnaHRSZXN1bHQgcmVzdWx0ID0gbGlnaHQobGlnaHRWZWN0b3IpO1xcbiAgICBkaWZmdXNlICs9IHJlc3VsdC5kaWZmdXNlICogZmFsbG9mZiAqIHVQb2ludExpZ2h0Q29sb3Jba107XFxuICAgIHNwZWN1bGFyICs9IHJlc3VsdC5zcGVjdWxhciAqIGZhbGxvZmY7XFxuICB9XFxuXFxuICBnbF9GcmFnQ29sb3IgPSBpc1RleHR1cmUgPyB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXhDb29yZCkgOiB1TWF0ZXJpYWxDb2xvcjtcXG4gIGdsX0ZyYWdDb2xvci5yZ2IgPSBnbF9GcmFnQ29sb3IucmdiICogKGRpZmZ1c2UgKiBkaWZmdXNlRmFjdG9yICsgdkFtYmllbnRDb2xvcikgKyBzcGVjdWxhciAqIHNwZWN1bGFyRmFjdG9yO1xcbn1cIixmb250VmVydDpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbmF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcblxcbnVuaWZvcm0gdmVjNCB1R2x5cGhSZWN0O1xcbnVuaWZvcm0gZmxvYXQgdUdseXBoT2Zmc2V0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxudmFyeWluZyBmbG9hdCB3O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuXFxuICAvLyBzY2FsZSBieSB0aGUgc2l6ZSBvZiB0aGUgZ2x5cGgncyByZWN0YW5nbGVcXG4gIHBvc2l0aW9uVmVjNC54eSAqPSB1R2x5cGhSZWN0Lnp3IC0gdUdseXBoUmVjdC54eTtcXG5cXG4gIC8vIG1vdmUgdG8gdGhlIGNvcm5lciBvZiB0aGUgZ2x5cGhcXG4gIHBvc2l0aW9uVmVjNC54eSArPSB1R2x5cGhSZWN0Lnh5O1xcblxcbiAgLy8gbW92ZSB0byB0aGUgbGV0dGVyJ3MgbGluZSBvZmZzZXRcXG4gIHBvc2l0aW9uVmVjNC54ICs9IHVHbHlwaE9mZnNldDtcXG4gIFxcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuICB2VGV4Q29vcmQgPSBhVGV4Q29vcmQ7XFxuICB3ID0gZ2xfUG9zaXRpb24udztcXG59XFxuXCIsZm9udEZyYWc6XCIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbiNpZiAwXFxuICAvLyBzaW11bGF0ZSBpbnRlZ2VyIG1hdGggdXNpbmcgZmxvYXRzXFxuXFx0I2RlZmluZSBpbnQgZmxvYXRcXG5cXHQjZGVmaW5lIGl2ZWMyIHZlYzJcXG5cXHQjZGVmaW5lIElOVCh4KSBmbG9hdCh4KVxcblxcblxcdGludCBpZmxvb3IoZmxvYXQgdikgeyByZXR1cm4gZmxvb3Iodik7IH1cXG5cXHRpdmVjMiBpZmxvb3IodmVjMiB2KSB7IHJldHVybiBmbG9vcih2KTsgfVxcblxcbiNlbHNlXFxuICAvLyB1c2UgbmF0aXZlIGludGVnZXIgbWF0aFxcblxcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcXG5cXHQjZGVmaW5lIElOVCh4KSB4XFxuXFxuXFx0aW50IGlmbG9vcihmbG9hdCB2KSB7IHJldHVybiBpbnQodik7IH1cXG5cXHRpbnQgaWZsb29yKGludCB2KSB7IHJldHVybiB2OyB9XFxuXFx0aXZlYzIgaWZsb29yKHZlYzIgdikgeyByZXR1cm4gaXZlYzIodik7IH1cXG5cXG4jZW5kaWZcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlclN0cm9rZXM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJSb3dTdHJva2VzO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyUm93cztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlckNvbFN0cm9rZXM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJDb2xzO1xcblxcbnVuaWZvcm0gaXZlYzIgdVN0cm9rZUltYWdlU2l6ZTtcXG51bmlmb3JtIGl2ZWMyIHVDZWxsc0ltYWdlU2l6ZTtcXG51bmlmb3JtIGl2ZWMyIHVHcmlkSW1hZ2VTaXplO1xcblxcbnVuaWZvcm0gaXZlYzIgdUdyaWRPZmZzZXQ7XFxudW5pZm9ybSBpdmVjMiB1R3JpZFNpemU7XFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxuXFxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zXFxuaW50IHJvdW5kKGZsb2F0IHYpIHsgcmV0dXJuIGlmbG9vcih2ICsgMC41KTsgfVxcbml2ZWMyIHJvdW5kKHZlYzIgdikgeyByZXR1cm4gaWZsb29yKHYgKyAwLjUpOyB9XFxuZmxvYXQgc2F0dXJhdGUoZmxvYXQgdikgeyByZXR1cm4gY2xhbXAodiwgMC4wLCAxLjApOyB9XFxudmVjMiBzYXR1cmF0ZSh2ZWMyIHYpIHsgcmV0dXJuIGNsYW1wKHYsIDAuMCwgMS4wKTsgfVxcblxcbmludCBtdWwoZmxvYXQgdjEsIGludCB2Mikge1xcbiAgcmV0dXJuIGlmbG9vcih2MSAqIGZsb2F0KHYyKSk7XFxufVxcblxcbml2ZWMyIG11bCh2ZWMyIHYxLCBpdmVjMiB2Mikge1xcbiAgcmV0dXJuIGlmbG9vcih2MSAqIHZlYzIodjIpICsgMC41KTtcXG59XFxuXFxuLy8gdW5wYWNrIGEgMTYtYml0IGludGVnZXIgZnJvbSBhIGZsb2F0IHZlYzJcXG5pbnQgZ2V0SW50MTYodmVjMiB2KSB7XFxuICBpdmVjMiBpdiA9IHJvdW5kKHYgKiAyNTUuMCk7XFxuICByZXR1cm4gaXYueCAqIElOVCgxMjgpICsgaXYueTtcXG59XFxuXFxudmVjMiBwaXhlbFNjYWxlO1xcbnZlYzIgY292ZXJhZ2UgPSB2ZWMyKDAuMCk7XFxudmVjMiB3ZWlnaHQgPSB2ZWMyKDAuNSk7XFxuY29uc3QgZmxvYXQgbWluRGlzdGFuY2UgPSAxLjAvODE5Mi4wO1xcbmNvbnN0IGZsb2F0IGhhcmRuZXNzID0gMS4wNTsgLy8gYW1vdW50IG9mIGFudGlhbGlhc1xcblxcbi8vIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjdXJ2ZXMgaW4gYSBnbHlwaFxcbmNvbnN0IGludCBOID0gSU5UKDI1MCk7XFxuXFxuLy8gcmV0cmlldmVzIGFuIGluZGV4ZWQgcGl4ZWwgZnJvbSBhIHNhbXBsZXJcXG52ZWM0IGdldFRleGVsKHNhbXBsZXIyRCBzYW1wbGVyLCBpbnQgcG9zLCBpdmVjMiBzaXplKSB7XFxuICBpbnQgd2lkdGggPSBzaXplLng7XFxuICBpbnQgeSA9IGlmbG9vcihwb3MgLyB3aWR0aCk7XFxuICBpbnQgeCA9IHBvcyAtIHkgKiB3aWR0aDsgIC8vIHBvcyAlIHdpZHRoXFxuXFxuICByZXR1cm4gdGV4dHVyZTJEKHNhbXBsZXIsICh2ZWMyKHgsIHkpICsgMC41KSAvIHZlYzIoc2l6ZSkpO1xcbn1cXG5cXG52b2lkIGNhbHVsYXRlQ3Jvc3NpbmdzKHZlYzIgcDAsIHZlYzIgcDEsIHZlYzIgcDIsIG91dCB2ZWMyIEMxLCBvdXQgdmVjMiBDMikge1xcblxcbiAgLy8gZ2V0IHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIHF1YWRyYXRpYyBpbiB0XFxuICB2ZWMyIGEgPSBwMCAtIHAxICogMi4wICsgcDI7XFxuICB2ZWMyIGIgPSBwMCAtIHAxO1xcbiAgdmVjMiBjID0gcDAgLSB2VGV4Q29vcmQ7XFxuXFxuICAvLyBmb3VuZCBvdXQgd2hpY2ggdmFsdWVzIG9mICd0JyBpdCBjcm9zc2VzIHRoZSBheGVzXFxuICB2ZWMyIHN1cmQgPSBzcXJ0KG1heCh2ZWMyKDAuMCksIGIgKiBiIC0gYSAqIGMpKTtcXG4gIHZlYzIgdDEgPSAoKGIgLSBzdXJkKSAvIGEpLnl4O1xcbiAgdmVjMiB0MiA9ICgoYiArIHN1cmQpIC8gYSkueXg7XFxuXFxuICAvLyBhcHByb3hpbWF0ZSBzdHJhaWdodCBsaW5lcyB0byBhdm9pZCByb3VuZGluZyBlcnJvcnNcXG4gIGlmIChhYnMoYS55KSA8IDAuMDAxKVxcbiAgICB0MS54ID0gdDIueCA9IGMueSAvICgyLjAgKiBiLnkpO1xcblxcbiAgaWYgKGFicyhhLngpIDwgMC4wMDEpXFxuICAgIHQxLnkgPSB0Mi55ID0gYy54IC8gKDIuMCAqIGIueCk7XFxuXFxuICAvLyBwbHVnIGludG8gcXVhZHJhdGljIGZvcm11bGEgdG8gZmluZCB0aGUgY29ycmRpbmF0ZXMgb2YgdGhlIGNyb3NzaW5nc1xcbiAgQzEgPSAoKGEgKiB0MSAtIGIgKiAyLjApICogdDEgKyBjKSAqIHBpeGVsU2NhbGU7XFxuICBDMiA9ICgoYSAqIHQyIC0gYiAqIDIuMCkgKiB0MiArIGMpICogcGl4ZWxTY2FsZTtcXG59XFxuXFxudm9pZCBjb3ZlcmFnZVgodmVjMiBwMCwgdmVjMiBwMSwgdmVjMiBwMikge1xcblxcbiAgdmVjMiBDMSwgQzI7XFxuICBjYWx1bGF0ZUNyb3NzaW5ncyhwMCwgcDEsIHAyLCBDMSwgQzIpO1xcblxcbiAgLy8gZGV0ZXJtaW5lIG9uIHdoaWNoIHNpZGUgb2YgdGhlIHgtYXhpcyB0aGUgcG9pbnRzIGxpZVxcbiAgYm9vbCB5MCA9IHAwLnkgPiB2VGV4Q29vcmQueTtcXG4gIGJvb2wgeTEgPSBwMS55ID4gdlRleENvb3JkLnk7XFxuICBib29sIHkyID0gcDIueSA+IHZUZXhDb29yZC55O1xcblxcbiAgLy8gY291bGQgd2ViIGJlIHVuZGVyIHRoZSBjdXJ2ZSAoYWZ0ZXIgdDEpP1xcbiAgaWYgKHkxID8gIXkyIDogeTApIHtcXG4gICAgLy8gYWRkIHRoZSBjb3ZlcmFnZSBmb3IgdDFcXG4gICAgY292ZXJhZ2UueCArPSBzYXR1cmF0ZShDMS54ICsgMC41KTtcXG4gICAgLy8gY2FsY3VsYXRlIHRoZSBhbnRpLWFsaWFzaW5nIGZvciB0MVxcbiAgICB3ZWlnaHQueCA9IG1pbih3ZWlnaHQueCwgYWJzKEMxLngpKTtcXG4gIH1cXG5cXG4gIC8vIGFyZSB3ZSBvdXRzaWRlIHRoZSBjdXJ2ZSAoYWZ0ZXIgdDIpP1xcbiAgaWYgKHkxID8gIXkwIDogeTIpIHtcXG4gICAgLy8gc3VidHJhY3QgdGhlIGNvdmVyYWdlIGZvciB0MlxcbiAgICBjb3ZlcmFnZS54IC09IHNhdHVyYXRlKEMyLnggKyAwLjUpO1xcbiAgICAvLyBjYWxjdWxhdGUgdGhlIGFudGktYWxpYXNpbmcgZm9yIHQyXFxuICAgIHdlaWdodC54ID0gbWluKHdlaWdodC54LCBhYnMoQzIueCkpO1xcbiAgfVxcbn1cXG5cXG4vLyB0aGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIGNvdmVyYWdlWCwgYnV0IHdpdGggdGhlIGF4ZXMgc3dhcHBlZFxcbnZvaWQgY292ZXJhZ2VZKHZlYzIgcDAsIHZlYzIgcDEsIHZlYzIgcDIpIHtcXG5cXG4gIHZlYzIgQzEsIEMyO1xcbiAgY2FsdWxhdGVDcm9zc2luZ3MocDAsIHAxLCBwMiwgQzEsIEMyKTtcXG5cXG4gIGJvb2wgeDAgPSBwMC54ID4gdlRleENvb3JkLng7XFxuICBib29sIHgxID0gcDEueCA+IHZUZXhDb29yZC54O1xcbiAgYm9vbCB4MiA9IHAyLnggPiB2VGV4Q29vcmQueDtcXG5cXG4gIGlmICh4MSA/ICF4MiA6IHgwKSB7XFxuICAgIGNvdmVyYWdlLnkgLT0gc2F0dXJhdGUoQzEueSArIDAuNSk7XFxuICAgIHdlaWdodC55ID0gbWluKHdlaWdodC55LCBhYnMoQzEueSkpO1xcbiAgfVxcblxcbiAgaWYgKHgxID8gIXgwIDogeDIpIHtcXG4gICAgY292ZXJhZ2UueSArPSBzYXR1cmF0ZShDMi55ICsgMC41KTtcXG4gICAgd2VpZ2h0LnkgPSBtaW4od2VpZ2h0LnksIGFicyhDMi55KSk7XFxuICB9XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG5cXG4gIC8vIGNhbGN1bGF0ZSB0aGUgcGl4ZWwgc2NhbGUgYmFzZWQgb24gc2NyZWVuLWNvb3JkaW5hdGVzXFxuICBwaXhlbFNjYWxlID0gaGFyZG5lc3MgLyBmd2lkdGgodlRleENvb3JkKTtcXG5cXG4gIC8vIHdoaWNoIGdyaWQgY2VsbCBpcyB0aGlzIHBpeGVsIGluP1xcbiAgaXZlYzIgZ3JpZENvb3JkID0gaWZsb29yKHZUZXhDb29yZCAqIHZlYzIodUdyaWRTaXplKSk7XFxuXFxuICAvLyBpbnRlcnNlY3QgY3VydmVzIGluIHRoaXMgcm93XFxuICB7XFxuICAgIC8vIHRoZSBpbmRleCBpbnRvIHRoZSByb3cgaW5mbyBiaXRtYXBcXG4gICAgaW50IHJvd0luZGV4ID0gZ3JpZENvb3JkLnkgKyB1R3JpZE9mZnNldC55O1xcbiAgICAvLyBmZXRjaCB0aGUgaW5mbyB0ZXhlbFxcbiAgICB2ZWM0IHJvd0luZm8gPSBnZXRUZXhlbCh1U2FtcGxlclJvd3MsIHJvd0luZGV4LCB1R3JpZEltYWdlU2l6ZSk7XFxuICAgIC8vIHVucGFjayB0aGUgcm93SW5mb1xcbiAgICBpbnQgcm93U3Ryb2tlSW5kZXggPSBnZXRJbnQxNihyb3dJbmZvLnh5KTtcXG4gICAgaW50IHJvd1N0cm9rZUNvdW50ID0gZ2V0SW50MTYocm93SW5mby56dyk7XFxuXFxuICAgIGZvciAoaW50IGlSb3dTdHJva2UgPSBJTlQoMCk7IGlSb3dTdHJva2UgPCBOOyBpUm93U3Ryb2tlKyspIHtcXG4gICAgICBpZiAoaVJvd1N0cm9rZSA+PSByb3dTdHJva2VDb3VudClcXG4gICAgICAgIGJyZWFrO1xcblxcbiAgICAgIC8vIGVhY2ggc3Ryb2tlIGlzIG1hZGUgdXAgb2YgMyBwb2ludHM6IHRoZSBzdGFydCBhbmQgY29udHJvbCBwb2ludFxcbiAgICAgIC8vIGFuZCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY3VydmUuXFxuICAgICAgLy8gZmV0Y2ggdGhlIGluZGljZXMgb2YgdGhpcyBwYWlyIG9mIHN0cm9rZXM6XFxuICAgICAgdmVjNCBzdHJva2VJbmRpY2VzID0gZ2V0VGV4ZWwodVNhbXBsZXJSb3dTdHJva2VzLCByb3dTdHJva2VJbmRleCsrLCB1Q2VsbHNJbWFnZVNpemUpO1xcblxcbiAgICAgIC8vIHVucGFjayB0aGUgc3Ryb2tlIGluZGV4XFxuICAgICAgaW50IHN0cm9rZVBvcyA9IGdldEludDE2KHN0cm9rZUluZGljZXMueHkpO1xcblxcbiAgICAgIC8vIGZldGNoIHRoZSB0d28gc3Ryb2tlc1xcbiAgICAgIHZlYzQgc3Ryb2tlMCA9IGdldFRleGVsKHVTYW1wbGVyU3Ryb2tlcywgc3Ryb2tlUG9zICsgSU5UKDApLCB1U3Ryb2tlSW1hZ2VTaXplKTtcXG4gICAgICB2ZWM0IHN0cm9rZTEgPSBnZXRUZXhlbCh1U2FtcGxlclN0cm9rZXMsIHN0cm9rZVBvcyArIElOVCgxKSwgdVN0cm9rZUltYWdlU2l6ZSk7XFxuXFxuICAgICAgLy8gY2FsY3VsYXRlIHRoZSBjb3ZlcmFnZVxcbiAgICAgIGNvdmVyYWdlWChzdHJva2UwLnh5LCBzdHJva2UwLnp3LCBzdHJva2UxLnh5KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLy8gaW50ZXJzZWN0IGN1cnZlcyBpbiB0aGlzIGNvbHVtblxcbiAge1xcbiAgICBpbnQgY29sSW5kZXggPSBncmlkQ29vcmQueCArIHVHcmlkT2Zmc2V0Lng7XFxuICAgIHZlYzQgY29sSW5mbyA9IGdldFRleGVsKHVTYW1wbGVyQ29scywgY29sSW5kZXgsIHVHcmlkSW1hZ2VTaXplKTtcXG4gICAgaW50IGNvbFN0cm9rZUluZGV4ID0gZ2V0SW50MTYoY29sSW5mby54eSk7XFxuICAgIGludCBjb2xTdHJva2VDb3VudCA9IGdldEludDE2KGNvbEluZm8uencpO1xcbiAgICBcXG4gICAgZm9yIChpbnQgaUNvbFN0cm9rZSA9IElOVCgwKTsgaUNvbFN0cm9rZSA8IE47IGlDb2xTdHJva2UrKykge1xcbiAgICAgIGlmIChpQ29sU3Ryb2tlID49IGNvbFN0cm9rZUNvdW50KVxcbiAgICAgICAgYnJlYWs7XFxuXFxuICAgICAgdmVjNCBzdHJva2VJbmRpY2VzID0gZ2V0VGV4ZWwodVNhbXBsZXJDb2xTdHJva2VzLCBjb2xTdHJva2VJbmRleCsrLCB1Q2VsbHNJbWFnZVNpemUpO1xcblxcbiAgICAgIGludCBzdHJva2VQb3MgPSBnZXRJbnQxNihzdHJva2VJbmRpY2VzLnh5KTtcXG4gICAgICB2ZWM0IHN0cm9rZTAgPSBnZXRUZXhlbCh1U2FtcGxlclN0cm9rZXMsIHN0cm9rZVBvcyArIElOVCgwKSwgdVN0cm9rZUltYWdlU2l6ZSk7XFxuICAgICAgdmVjNCBzdHJva2UxID0gZ2V0VGV4ZWwodVNhbXBsZXJTdHJva2VzLCBzdHJva2VQb3MgKyBJTlQoMSksIHVTdHJva2VJbWFnZVNpemUpO1xcbiAgICAgIGNvdmVyYWdlWShzdHJva2UwLnh5LCBzdHJva2UwLnp3LCBzdHJva2UxLnh5KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgd2VpZ2h0ID0gc2F0dXJhdGUoMS4wIC0gd2VpZ2h0ICogMi4wKTtcXG4gIGZsb2F0IGRpc3RhbmNlID0gbWF4KHdlaWdodC54ICsgd2VpZ2h0LnksIG1pbkRpc3RhbmNlKTsgLy8gbWFuaGF0dGFuIGFwcHJveC5cXG4gIGZsb2F0IGFudGlhbGlhcyA9IGFicyhkb3QoY292ZXJhZ2UsIHdlaWdodCkgLyBkaXN0YW5jZSk7XFxuICBmbG9hdCBjb3ZlciA9IG1pbihhYnMoY292ZXJhZ2UueCksIGFicyhjb3ZlcmFnZS55KSk7XFxuICBnbF9GcmFnQ29sb3IgPSB1TWF0ZXJpYWxDb2xvcjtcXG4gIGdsX0ZyYWdDb2xvci5hICo9IHNhdHVyYXRlKG1heChhbnRpYWxpYXMsIGNvdmVyKSk7XFxufVwiLGxpbmVWZXJ0OlwiLypcXG4gIFBhcnQgb2YgdGhlIFByb2Nlc3NpbmcgcHJvamVjdCAtIGh0dHA6Ly9wcm9jZXNzaW5nLm9yZ1xcbiAgQ29weXJpZ2h0IChjKSAyMDEyLTE1IFRoZSBQcm9jZXNzaW5nIEZvdW5kYXRpb25cXG4gIENvcHlyaWdodCAoYykgMjAwNC0xMiBCZW4gRnJ5IGFuZCBDYXNleSBSZWFzXFxuICBDb3B5cmlnaHQgKGMpIDIwMDEtMDQgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neVxcbiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxcbiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xcbiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLjEuXFxuICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcXG4gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXFxuICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxcbiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cXG4gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbFxcbiAgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlXFxuICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLFxcbiAgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBXFxuKi9cXG5cXG4jZGVmaW5lIFBST0NFU1NJTkdfTElORV9TSEFERVJcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBmbG9hdCB1U3Ryb2tlV2VpZ2h0O1xcblxcbnVuaWZvcm0gdmVjNCB1Vmlld3BvcnQ7XFxuXFxuLy8gdXNpbmcgYSBzY2FsZSA8MSBtb3ZlcyB0aGUgbGluZXMgdG93YXJkcyB0aGUgY2FtZXJhXFxuLy8gaW4gb3JkZXIgdG8gcHJldmVudCBwb3BwaW5nIGVmZmVjdHMgZHVlIHRvIGhhbGYgb2ZcXG4vLyB0aGUgbGluZSBkaXNhcHBlYXJpbmcgYmVoaW5kIHRoZSBnZW9tZXRyeSBmYWNlcy5cXG52ZWMzIHNjYWxlID0gdmVjMygwLjk5OTUpO1xcblxcbmF0dHJpYnV0ZSB2ZWM0IGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBhRGlyZWN0aW9uO1xcbiAgXFxudm9pZCBtYWluKCkge1xcbiAgdmVjNCBwb3NwID0gdU1vZGVsVmlld01hdHJpeCAqIGFQb3NpdGlvbjtcXG4gIHZlYzQgcG9zcSA9IHVNb2RlbFZpZXdNYXRyaXggKiAoYVBvc2l0aW9uICsgdmVjNChhRGlyZWN0aW9uLnh5eiwgMCkpO1xcblxcbiAgLy8gTW92aW5nIHZlcnRpY2VzIHNsaWdodGx5IHRvd2FyZCB0aGUgY2FtZXJhXFxuICAvLyB0byBhdm9pZCBkZXB0aC1maWdodGluZyB3aXRoIHRoZSBmaWxsIHRyaWFuZ2xlcy5cXG4gIC8vIERpc2N1c3NlZCBoZXJlOlxcbiAgLy8gaHR0cDovL3d3dy5vcGVuZ2wub3JnL2Rpc2N1c3Npb25fYm9hcmRzL3ViYnRocmVhZHMucGhwP3ViYj1zaG93ZmxhdCZOdW1iZXI9MjUyODQ4ICBcXG4gIHBvc3AueHl6ID0gcG9zcC54eXogKiBzY2FsZTtcXG4gIHBvc3EueHl6ID0gcG9zcS54eXogKiBzY2FsZTtcXG5cXG4gIHZlYzQgcCA9IHVQcm9qZWN0aW9uTWF0cml4ICogcG9zcDtcXG4gIHZlYzQgcSA9IHVQcm9qZWN0aW9uTWF0cml4ICogcG9zcTtcXG5cXG4gIC8vIGZvcm11bGEgdG8gY29udmVydCBmcm9tIGNsaXAgc3BhY2UgKHJhbmdlIC0xLi4xKSB0byBzY3JlZW4gc3BhY2UgKHJhbmdlIDAuLlt3aWR0aCBvciBoZWlnaHRdKVxcbiAgLy8gc2NyZWVuX3AgPSAocC54eS9wLncgKyA8MSwxPikgKiAwLjUgKiB1Vmlld3BvcnQuendcXG5cXG4gIC8vIHByZXZlbnQgZGl2aXNpb24gYnkgVyBieSB0cmFuc2Zvcm1pbmcgdGhlIHRhbmdlbnQgZm9ybXVsYSAoZGl2IGJ5IDAgY2F1c2VzXFxuICAvLyB0aGUgbGluZSB0byBkaXNhcHBlYXIsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvY2Vzc2luZy9wcm9jZXNzaW5nL2lzc3Vlcy81MTgzKVxcbiAgLy8gdCA9IHNjcmVlbl9xIC0gc2NyZWVuX3BcXG4gIC8vXFxuICAvLyB0YW5nZW50IGlzIG5vcm1hbGl6ZWQgYW5kIHdlIGRvbid0IGNhcmUgd2hpY2ggYURpcmVjdGlvbiBpdCBwb2ludHMgdG8gKCstKVxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggc2NyZWVuX3EgLSBzY3JlZW5fcCApXFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCAocS54eS9xLncrPDEsMT4pKjAuNSp1Vmlld3BvcnQuencgLSAocC54eS9wLncrPDEsMT4pKjAuNSp1Vmlld3BvcnQuencgKVxcbiAgLy9cXG4gIC8vIGV4dHJhY3QgY29tbW9uIGZhY3RvciwgPDEsMT4gLSA8MSwxPiBjYW5jZWxzIG91dFxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKHEueHkvcS53IC0gcC54eS9wLncpICogMC41ICogdVZpZXdwb3J0Lnp3IClcXG4gIC8vXFxuICAvLyBjb252ZXJ0IHRvIGNvbW1vbiBkaXZpc29yXFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCAoKHEueHkqcC53IC0gcC54eSpxLncpIC8gKHAudypxLncpKSAqIDAuNSAqIHVWaWV3cG9ydC56dyApXFxuICAvL1xcbiAgLy8gcmVtb3ZlIHRoZSBjb21tb24gc2NhbGFyIGRpdmlzb3IvZmFjdG9yLCBub3QgbmVlZGVkIGR1ZSB0byBub3JtYWxpemUgYW5kICstXFxuICAvLyAoa2VlcCB1Vmlld3BvcnQgLSBjYW4ndCByZW1vdmUgYmVjYXVzZSBpdCBoYXMgZGlmZmVyZW50IGNvbXBvbmVudHMgZm9yIHggYW5kIHlcXG4gIC8vICBhbmQgY29ycmVjdHMgZm9yIGFzcGVjdCByYXRpbywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9jZXNzaW5nL3Byb2Nlc3NpbmcvaXNzdWVzLzUxODEpXFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCAocS54eSpwLncgLSBwLnh5KnEudykgKiB1Vmlld3BvcnQuencgKVxcblxcbiAgdmVjMiB0YW5nZW50ID0gbm9ybWFsaXplKChxLnh5KnAudyAtIHAueHkqcS53KSAqIHVWaWV3cG9ydC56dyk7XFxuXFxuICAvLyBmbGlwIHRhbmdlbnQgdG8gbm9ybWFsIChpdCdzIGFscmVhZHkgbm9ybWFsaXplZClcXG4gIHZlYzIgbm9ybWFsID0gdmVjMigtdGFuZ2VudC55LCB0YW5nZW50LngpO1xcblxcbiAgZmxvYXQgdGhpY2tuZXNzID0gYURpcmVjdGlvbi53ICogdVN0cm9rZVdlaWdodDtcXG4gIHZlYzIgb2Zmc2V0ID0gbm9ybWFsICogdGhpY2tuZXNzIC8gMi4wO1xcblxcbiAgLy8gUGVyc3BlY3RpdmUgLS0tXFxuICAvLyBjb252ZXJ0IGZyb20gd29ybGQgdG8gY2xpcCBieSBtdWx0aXBseWluZyB3aXRoIHByb2plY3Rpb24gc2NhbGluZyBmYWN0b3JcXG4gIC8vIHRvIGdldCB0aGUgcmlnaHQgdGhpY2tuZXNzIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb2Nlc3NpbmcvcHJvY2Vzc2luZy9pc3N1ZXMvNTE4MilcXG4gIC8vIGludmVydCBZLCBwcm9qZWN0aW9ucyBpbiBQcm9jZXNzaW5nIGludmVydCBZXFxuICB2ZWMyIHBlcnNwU2NhbGUgPSAodVByb2plY3Rpb25NYXRyaXggKiB2ZWM0KDEsIC0xLCAwLCAwKSkueHk7XFxuXFxuICAvLyBObyBQZXJzcGVjdGl2ZSAtLS1cXG4gIC8vIG11bHRpcGx5IGJ5IFcgKHRvIGNhbmNlbCBvdXQgZGl2aXNpb24gYnkgVyBsYXRlciBpbiB0aGUgcGlwZWxpbmUpIGFuZFxcbiAgLy8gY29udmVydCBmcm9tIHNjcmVlbiB0byBjbGlwIChkZXJpdmVkIGZyb20gY2xpcCB0byBzY3JlZW4gYWJvdmUpXFxuICB2ZWMyIG5vUGVyc3BTY2FsZSA9IHAudyAvICgwLjUgKiB1Vmlld3BvcnQuencpO1xcblxcbiAgLy9nbF9Qb3NpdGlvbi54eSA9IHAueHkgKyBvZmZzZXQueHkgKiBtaXgobm9QZXJzcFNjYWxlLCBwZXJzcFNjYWxlLCBmbG9hdChwZXJzcGVjdGl2ZSA+IDApKTtcXG4gIGdsX1Bvc2l0aW9uLnh5ID0gcC54eSArIG9mZnNldC54eSAqIHBlcnNwU2NhbGU7XFxuICBnbF9Qb3NpdGlvbi56dyA9IHAuenc7XFxufVxcblwiLGxpbmVGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxucHJlY2lzaW9uIG1lZGl1bXAgaW50O1xcblxcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB1TWF0ZXJpYWxDb2xvcjtcXG59XCIscG9pbnRWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbnVuaWZvcm0gZmxvYXQgdVBvaW50U2l6ZTtcXG52YXJ5aW5nIGZsb2F0IHZTdHJva2VXZWlnaHQ7XFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnZvaWQgbWFpbigpIHtcXG5cXHR2ZWM0IHBvc2l0aW9uVmVjNCA9ICB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG5cXHRnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG5cXHRnbF9Qb2ludFNpemUgPSB1UG9pbnRTaXplO1xcblxcdHZTdHJva2VXZWlnaHQgPSB1UG9pbnRTaXplO1xcbn1cIixwb2ludEZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5wcmVjaXNpb24gbWVkaXVtcCBpbnQ7XFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcbnZhcnlpbmcgZmxvYXQgdlN0cm9rZVdlaWdodDtcXG5cXG52b2lkIG1haW4oKXtcXG5cXHRmbG9hdCBtYXNrID0gMC4wO1xcblxcblxcdC8vIG1ha2UgYSBjaXJjdWxhciBtYXNrIHVzaW5nIHRoZSBnbF9Qb2ludENvb3JkIChnb2VzIGZyb20gMCAtIDEgb24gYSBwb2ludClcXG4gICAgLy8gbWlnaHQgYmUgYWJsZSB0byBnZXQgYSBuaWNlciBlZGdlIG9uIGJpZyBzdHJva2V3ZWlnaHRzIHdpdGggc21vb3Roc3RlcCBidXQgc2xpZ2h0bHkgbGVzcyBwZXJmb3JtYW50XFxuXFxuXFx0bWFzayA9IHN0ZXAoMC45OCwgbGVuZ3RoKGdsX1BvaW50Q29vcmQgKiAyLjAgLSAxLjApKTtcXG5cXG5cXHQvLyBpZiBzdHJva2VXZWlnaHQgaXMgMSBvciBsZXNzIGxldHMganVzdCBkcmF3IGEgc3F1YXJlXFxuXFx0Ly8gdGhpcyBwcmV2ZW50cyB3ZWlyZCBhcnRpZmFjdGluZyBmcm9tIGNhcnZpbmcgY2lyY2xlcyB3aGVuIG91ciBwb2ludHMgYXJlIHJlYWxseSBzbWFsbFxcblxcdC8vIGlmIHN0cm9rZVdlaWdodCBpcyBsYXJnZXIgdGhhbiAxLCB3ZSBqdXN0IHVzZSBpdCBhcyBpc1xcblxcblxcdG1hc2sgPSBtaXgoMC4wLCBtYXNrLCBjbGFtcChmbG9vcih2U3Ryb2tlV2VpZ2h0IC0gMC41KSwwLjAsMS4wKSk7XFxuXFxuXFx0Ly8gdGhyb3cgYXdheSB0aGUgYm9yZGVycyBvZiB0aGUgbWFza1xcbiAgICAvLyBvdGhlcndpc2Ugd2UgZ2V0IHdlaXJkIGFscGhhIGJsZW5kaW5nIGlzc3Vlc1xcblxcblxcdGlmKG1hc2sgPiAwLjk4KXtcXG4gICAgICBkaXNjYXJkO1xcbiAgXFx0fVxcblxcbiAgXFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCh1TWF0ZXJpYWxDb2xvci5yZ2IgKiAoMS4wIC0gbWFzayksIHVNYXRlcmlhbENvbG9yLmEpIDtcXG59XCJ9O2QuUmVuZGVyZXJHTD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gZC5SZW5kZXJlci5jYWxsKHRoaXMsYSxiLGMpLHRoaXMuYXR0cmlidXRlcz17fSxlPWV8fHt9LHRoaXMuYXR0cmlidXRlcy5hbHBoYT12b2lkIDA9PT1lLmFscGhhfHxlLmFscGhhLHRoaXMuYXR0cmlidXRlcy5kZXB0aD12b2lkIDA9PT1lLmRlcHRofHxlLmRlcHRoLHRoaXMuYXR0cmlidXRlcy5zdGVuY2lsPXZvaWQgMD09PWUuc3RlbmNpbHx8ZS5zdGVuY2lsLHRoaXMuYXR0cmlidXRlcy5hbnRpYWxpYXM9dm9pZCAwIT09ZS5hbnRpYWxpYXMmJmUuYW50aWFsaWFzLHRoaXMuYXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGE9dm9pZCAwIT09ZS5wcmVtdWx0aXBsaWVkQWxwaGEmJmUucHJlbXVsdGlwbGllZEFscGhhLHRoaXMuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9dm9pZCAwPT09ZS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJ8fGUucHJlc2VydmVEcmF3aW5nQnVmZmVyLHRoaXMuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nPXZvaWQgMCE9PWUucGVyUGl4ZWxMaWdodGluZyYmZS5wZXJQaXhlbExpZ2h0aW5nLHRoaXMuX2luaXRDb250ZXh0KCksdGhpcy5pc1AzRD0hMCx0aGlzLkdMPXRoaXMuZHJhd2luZ0NvbnRleHQsdGhpcy5hbWJpZW50TGlnaHRDb2xvcnM9W10sdGhpcy5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucz1bXSx0aGlzLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnM9W10sdGhpcy5wb2ludExpZ2h0UG9zaXRpb25zPVtdLHRoaXMucG9pbnRMaWdodENvbG9ycz1bXSx0aGlzLnVNVk1hdHJpeD1uZXcgZC5NYXRyaXgsdGhpcy51UE1hdHJpeD1uZXcgZC5NYXRyaXgsdGhpcy51Tk1hdHJpeD1uZXcgZC5NYXRyaXgoXCJtYXQzXCIpLHRoaXMuX2N1ckNhbWVyYT1uZXcgZC5DYW1lcmEodGhpcyksdGhpcy5fY3VyQ2FtZXJhLl9jb21wdXRlQ2FtZXJhRGVmYXVsdFNldHRpbmdzKCksdGhpcy5fY3VyQ2FtZXJhLl9zZXREZWZhdWx0Q2FtZXJhKCksdGhpcy5nSGFzaD17fSx0aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXI9dm9pZCAwLHRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9ybWFsU2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXI9dm9pZCAwLHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcj12b2lkIDAsdGhpcy5jdXJGaWxsU2hhZGVyPXZvaWQgMCx0aGlzLmN1clN0cm9rZVNoYWRlcj12b2lkIDAsdGhpcy5jdXJQb2ludFNoYWRlcj12b2lkIDAsdGhpcy5fdXNlQ29sb3JTaGFkZXIoKSx0aGlzLnNldFN0cm9rZVNoYWRlcih0aGlzLl9nZXRMaW5lU2hhZGVyKCkpLHRoaXMuX3VzZVBvaW50U2hhZGVyKCksdGhpcy5fcG9pbnRWZXJ0ZXhCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmlzSW1tZWRpYXRlRHJhd2luZz0hMSx0aGlzLmltbWVkaWF0ZU1vZGU9e30sdGhpcy5maWxsKDI1NSwyNTUsMjU1LDI1NSksdGhpcy5wb2ludFNpemU9NSx0aGlzLnN0cm9rZVdlaWdodCgxKSx0aGlzLnN0cm9rZSgwLDAsMCksdGhpcy50ZXh0dXJlcz1bXSx0aGlzLl9jdXJ2ZVRpZ2h0bmVzcz02LHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyPVtdLHRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljPVtdLHRoaXMuX2x1dEJlemllckRldGFpbD0wLHRoaXMuX2x1dFF1YWRyYXRpY0RldGFpbD0wLHRoaXMuX3Rlc3N5PXRoaXMuX2luaXRUZXNzeSgpLHRoaXMuZm9udEluZm9zPXt9LHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlJlbmRlcmVyLnByb3RvdHlwZSksZC5SZW5kZXJlckdMLnByb3RvdHlwZS5faW5pdENvbnRleHQ9ZnVuY3Rpb24oKXt0cnl7aWYodGhpcy5kcmF3aW5nQ29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwid2ViZ2xcIix0aGlzLmF0dHJpYnV0ZXMpfHx0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiZXhwZXJpbWVudGFsLXdlYmdsXCIsdGhpcy5hdHRyaWJ1dGVzKSxudWxsPT09dGhpcy5kcmF3aW5nQ29udGV4dCl0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciBjcmVhdGluZyB3ZWJnbCBjb250ZXh0XCIpO2NvbnNvbGUubG9nKFwicDUuUmVuZGVyZXJHTDogZW5hYmxlZCB3ZWJnbCBjb250ZXh0XCIpO3ZhciBhPXRoaXMuZHJhd2luZ0NvbnRleHQ7YS5lbmFibGUoYS5ERVBUSF9URVNUKSxhLmRlcHRoRnVuYyhhLkxFUVVBTCksYS52aWV3cG9ydCgwLDAsYS5kcmF3aW5nQnVmZmVyV2lkdGgsYS5kcmF3aW5nQnVmZmVySGVpZ2h0KSx0aGlzLl92aWV3cG9ydD10aGlzLmRyYXdpbmdDb250ZXh0LmdldFBhcmFtZXRlcih0aGlzLmRyYXdpbmdDb250ZXh0LlZJRVdQT1JUKX1jYXRjaChhKXt0aHJvdyBhfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fcmVzZXRDb250ZXh0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZT10aGlzLndpZHRoLGY9dGhpcy5oZWlnaHQsZz10aGlzLmNhbnZhcy5pZCxoPXRoaXMuY2FudmFzO2gmJmgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKSxoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksaC5pZD1nLHRoaXMuX3BJbnN0Ll91c2VyTm9kZT90aGlzLl9wSW5zdC5fdXNlck5vZGUuYXBwZW5kQ2hpbGQoaCk6ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSx0aGlzLl9wSW5zdC5jYW52YXM9aDt2YXIgaT1uZXcgZC5SZW5kZXJlckdMKHRoaXMuX3BJbnN0LmNhbnZhcyx0aGlzLl9wSW5zdCwhMCxhKTt0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJfcmVuZGVyZXJcIixpKSxpLnJlc2l6ZShlLGYpLGkuX2FwcGx5RGVmYXVsdHMoKSx0aGlzLl9wSW5zdC5fZWxlbWVudHMucHVzaChpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5hcHBseSh3aW5kb3cuX3JlbmRlcmVyLGIpfSwwKX0sZC5wcm90b3R5cGUuc2V0QXR0cmlidXRlcz1mdW5jdGlvbihhLGIpe3RoaXMuX2Fzc2VydDNkKFwic2V0QXR0cmlidXRlc1wiKTt2YXIgYzt2b2lkIDAhPT1iPyhjPXt9LGNbYV09Yik6YSBpbnN0YW5jZW9mIE9iamVjdCYmKGM9YSksdGhpcy5wdXNoKCksdGhpcy5fcmVuZGVyZXIuX3Jlc2V0Q29udGV4dChjKSx0aGlzLnBvcCgpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLnVNVk1hdHJpeC5zZXQodGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzBdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzNdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs0XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzZdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs3XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzldLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTJdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxM10sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTVdKSx0aGlzLmFtYmllbnRMaWdodENvbG9ycy5sZW5ndGg9MCx0aGlzLmRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25zLmxlbmd0aD0wLHRoaXMuZGlyZWN0aW9uYWxMaWdodENvbG9ycy5sZW5ndGg9MCx0aGlzLnBvaW50TGlnaHRQb3NpdGlvbnMubGVuZ3RoPTAsdGhpcy5wb2ludExpZ2h0Q29sb3JzLmxlbmd0aD0wfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmJhY2tncm91bmQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpLGI9YS5sZXZlbHNbMF0vMjU1LGM9YS5sZXZlbHNbMV0vMjU1LGQ9YS5sZXZlbHNbMl0vMjU1LGU9YS5sZXZlbHNbM10vMjU1O3RoaXMuR0wuY2xlYXJDb2xvcihiLGMsZCxlKSx0aGlzLkdMLmRlcHRoTWFzayghMCksdGhpcy5HTC5jbGVhcih0aGlzLkdMLkNPTE9SX0JVRkZFUl9CSVR8dGhpcy5HTC5ERVBUSF9CVUZGRVJfQklUKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGEsYixjLGYpe3ZhciBnPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyk7dGhpcy5jdXJGaWxsQ29sb3I9Zy5fYXJyYXksdGhpcy5pc0ltbWVkaWF0ZURyYXdpbmc/dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldEltbWVkaWF0ZU1vZGVTaGFkZXIoKSk6dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldENvbG9yU2hhZGVyKCkpLHRoaXMuZHJhd01vZGU9ZS5GSUxMLHRoaXMuY3VyRmlsbFNoYWRlci5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLmN1ckZpbGxDb2xvcil9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc3Ryb2tlPWZ1bmN0aW9uKGEsYixjLGUpe2FyZ3VtZW50c1szXT0yNTU7dmFyIGY9ZC5wcm90b3R5cGUuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKTt0aGlzLmN1clN0cm9rZUNvbG9yPWYuX2FycmF5LHRoaXMuY3VyU3Ryb2tlU2hhZGVyLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuY3VyU3Ryb2tlQ29sb3IpLHRoaXMuY3VyUG9pbnRTaGFkZXIuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsZi5fYXJyYXkpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnN0cm9rZVdlaWdodD1mdW5jdGlvbihhKXt0aGlzLmN1clN0cm9rZVdlaWdodCE9PWEmJih0aGlzLnBvaW50U2l6ZT1hLHRoaXMuY3VyU3Ryb2tlV2VpZ2h0PWEsdGhpcy5jdXJTdHJva2VTaGFkZXIuc2V0VW5pZm9ybShcInVTdHJva2VXZWlnaHRcIixhKSx0aGlzLmN1clBvaW50U2hhZGVyLnNldFVuaWZvcm0oXCJ1UG9pbnRTaXplXCIsYSkpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gZC5SZW5kZXJlcjJELnByb3RvdHlwZS5nZXQuYXBwbHkodGhpcyxbYSxiLGMsZV0pfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmxvYWRQaXhlbHM9ZnVuY3Rpb24oKXtpZighMCE9PXRoaXMuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpcmV0dXJuIHZvaWQgY29uc29sZS5sb2coXCJsb2FkUGl4ZWxzIG9ubHkgd29ya3MgaW4gV2ViR0wgd2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgaXMgdHJ1ZS5cIik7dmFyIGE9dGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSxiPXRoaXMud2lkdGgsYz10aGlzLmhlaWdodDtiKj1hLGMqPWEsdm9pZCAwPT09dGhpcy5waXhlbHMmJih0aGlzLnBpeGVscz1uZXcgVWludDhBcnJheSh0aGlzLkdMLmRyYXdpbmdCdWZmZXJXaWR0aCp0aGlzLkdMLmRyYXdpbmdCdWZmZXJIZWlnaHQqNCkpLHRoaXMuR0wucmVhZFBpeGVscygwLDAsYixjLHRoaXMuR0wuUkdCQSx0aGlzLkdMLlVOU0lHTkVEX0JZVEUsdGhpcy5waXhlbHMpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcInBpeGVsc1wiLHRoaXMucGl4ZWxzKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5nZW9tZXRyeUluSGFzaD1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5nSGFzaFthXX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oYSxiKXtkLlJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLGEsYiksdGhpcy5HTC52aWV3cG9ydCgwLDAsdGhpcy5HTC5kcmF3aW5nQnVmZmVyV2lkdGgsdGhpcy5HTC5kcmF3aW5nQnVmZmVySGVpZ2h0KSx0aGlzLl92aWV3cG9ydD10aGlzLkdMLmdldFBhcmFtZXRlcih0aGlzLkdMLlZJRVdQT1JUKSx0aGlzLl9jdXJDYW1lcmEuX3Jlc2l6ZSgpLHZvaWQgMCE9PXRoaXMucGl4ZWxzJiYodGhpcy5waXhlbHM9bmV3IFVpbnQ4QXJyYXkodGhpcy5HTC5kcmF3aW5nQnVmZmVyV2lkdGgqdGhpcy5HTC5kcmF3aW5nQnVmZmVySGVpZ2h0KjQpKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50c1swXXx8MCxiPWFyZ3VtZW50c1sxXXx8MCxjPWFyZ3VtZW50c1syXXx8MCxkPWFyZ3VtZW50c1szXXx8MDt0aGlzLkdMLmNsZWFyQ29sb3IoYSxiLGMsZCksdGhpcy5HTC5jbGVhcih0aGlzLkdMLkNPTE9SX0JVRkZFUl9CSVR8dGhpcy5HTC5ERVBUSF9CVUZGRVJfQklUKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3ImJihjPWEueixiPWEueSxhPWEueCksdGhpcy51TVZNYXRyaXgudHJhbnNsYXRlKFthLGIsY10pLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLnVNVk1hdHJpeC5zY2FsZShhLGIsYyksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwPT09Yj90aGlzLnJvdGF0ZVooYSk6KGFyZ3VtZW50c1swXT10aGlzLl9wSW5zdC5fZnJvbVJhZGlhbnMoYSksZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZS5hcHBseSh0aGlzLnVNVk1hdHJpeCxhcmd1bWVudHMpLHRoaXMpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm90YXRlKGEsMSwwLDApLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3RhdGUoYSwwLDEsMCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvdGF0ZShhLDAsMCwxKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXt2YXIgYT1kLlJlbmRlcmVyLnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMpLGI9YS5wcm9wZXJ0aWVzO3JldHVybiBiLnVNVk1hdHJpeD10aGlzLnVNVk1hdHJpeC5jb3B5KCksYi51UE1hdHJpeD10aGlzLnVQTWF0cml4LmNvcHkoKSxiLl9jdXJDYW1lcmE9dGhpcy5fY3VyQ2FtZXJhLHRoaXMuX2N1ckNhbWVyYT10aGlzLl9jdXJDYW1lcmEuY29weSgpLGF9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucmVzZXRNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51TVZNYXRyaXg9ZC5NYXRyaXguaWRlbnRpdHkodGhpcy5fcEluc3QpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2V0RmlsbFNoYWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jdXJGaWxsU2hhZGVyIT09YSYmKHRoaXMuY3VyRmlsbFNoYWRlcj1hLHRoaXMuY3VyRmlsbFNoYWRlci5pbml0KCkpLHRoaXMuY3VyRmlsbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zZXRQb2ludFNoYWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jdXJQb2ludFNoYWRlciE9PWEmJih0aGlzLmN1clBvaW50U2hhZGVyPWEsdGhpcy5jdXJQb2ludFNoYWRlci5pbml0KCkpLHRoaXMuY3VyUG9pbnRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2V0U3Ryb2tlU2hhZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmN1clN0cm9rZVNoYWRlciE9PWEmJih0aGlzLmN1clN0cm9rZVNoYWRlcj1hLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmluaXQoKSksdGhpcy5jdXJTdHJva2VTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VzZUxpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciYmdGhpcy5jdXJGaWxsU2hhZGVyLmlzTGlnaHRTaGFkZXIoKXx8dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldExpZ2h0U2hhZGVyKCkpLHRoaXMuY3VyRmlsbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXNlQ29sb3JTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJGaWxsU2hhZGVyJiZ0aGlzLmN1ckZpbGxTaGFkZXIhPT10aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcnx8dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldENvbG9yU2hhZGVyKCkpLHRoaXMuY3VyRmlsbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXNlUG9pbnRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJQb2ludFNoYWRlcnx8dGhpcy5zZXRQb2ludFNoYWRlcih0aGlzLl9nZXRQb2ludFNoYWRlcigpKSx0aGlzLmN1clBvaW50U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91c2VJbW1lZGlhdGVNb2RlU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciYmdGhpcy5jdXJGaWxsU2hhZGVyIT09dGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyfHx0aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0SW1tZWRpYXRlTW9kZVNoYWRlcigpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldExpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRMaWdodFNoYWRlcnx8KHRoaXMuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nP3RoaXMuX2RlZmF1bHRMaWdodFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLnBob25nVmVydCxnLnBob25nRnJhZyk6dGhpcy5fZGVmYXVsdExpZ2h0U2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcubGlnaHRWZXJ0LGcubGlnaHRUZXh0dXJlRnJhZykpLHRoaXMuX2RlZmF1bHRMaWdodFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0SW1tZWRpYXRlTW9kZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcnx8KHRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcuaW1tZWRpYXRlVmVydCxnLnZlcnRleENvbG9yRnJhZykpLHRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXROb3JtYWxTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdE5vcm1hbFNoYWRlcnx8KHRoaXMuX2RlZmF1bHROb3JtYWxTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5ub3JtYWxWZXJ0LGcubm9ybWFsRnJhZykpLHRoaXMuX2RlZmF1bHROb3JtYWxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldENvbG9yU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcnx8KHRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLm5vcm1hbFZlcnQsZy5iYXNpY0ZyYWcpKSx0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldFBvaW50U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcnx8KHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLnBvaW50VmVydCxnLnBvaW50RnJhZykpLHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0TGluZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0TGluZVNoYWRlcnx8KHRoaXMuX2RlZmF1bHRMaW5lU2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcubGluZVZlcnQsZy5saW5lRnJhZykpLHRoaXMuX2RlZmF1bHRMaW5lU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRGb250U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2hhZGVyfHwodGhpcy5HTC5nZXRFeHRlbnNpb24oXCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXNcIiksdGhpcy5fZGVmYXVsdEZvbnRTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5mb250VmVydCxnLmZvbnRGcmFnKSksdGhpcy5fZGVmYXVsdEZvbnRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldEVtcHR5VGV4dHVyZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9lbXB0eVRleHR1cmUpe3ZhciBhPW5ldyBkLkltYWdlKDEsMSk7YS5zZXQoMCwwLDI1NSksdGhpcy5fZW1wdHlUZXh0dXJlPW5ldyBkLlRleHR1cmUodGhpcyxhKX1yZXR1cm4gdGhpcy5fZW1wdHlUZXh0dXJlfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmdldFRleHR1cmU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMudGV4dHVyZXMsYz0wO2M8Yi5sZW5ndGg7KytjKXt2YXIgZT1iW2NdO2lmKGUuc3JjPT09YSlyZXR1cm4gZX12YXIgZj1uZXcgZC5UZXh0dXJlKHRoaXMsYSk7cmV0dXJuIHRoaXMudGV4dHVyZXMucHVzaChmKSxmfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9iaW5kQnVmZmVyPWZ1bmN0aW9uKGEsYixjLGQsZSl7aWYodGhpcy5HTC5iaW5kQnVmZmVyKGIsYSksdm9pZCAwIT09Yyl7dmFyIGY9bmV3IGQoYyk7dGhpcy5HTC5idWZmZXJEYXRhKGIsZixlKX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc21vb3RoPWZ1bmN0aW9uKCl7ITE9PT10aGlzLmF0dHJpYnV0ZXMuYW50aWFsaWFzJiZ0aGlzLl9wSW5zdC5zZXRBdHRyaWJ1dGVzKFwiYW50aWFsaWFzXCIsITApfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLm5vU21vb3RoPWZ1bmN0aW9uKCl7ITA9PT10aGlzLmF0dHJpYnV0ZXMuYW50aWFsaWFzJiZ0aGlzLl9wSW5zdC5zZXRBdHRyaWJ1dGVzKFwiYW50aWFsaWFzXCIsITEpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9mbGF0dGVuPWZ1bmN0aW9uKGEpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm5bXTtpZihhLmxlbmd0aD4yZTQpe3ZhciBiLGM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxkPVwiW29iamVjdCBBcnJheV1cIixlPVtdLGY9YS5zbGljZSgpO2I9Zi5wb3AoKTtkb3tjLmNhbGwoYik9PT1kP2YucHVzaC5hcHBseShmLGIpOmUucHVzaChiKX13aGlsZShmLmxlbmd0aCYmdm9pZCAwIT09KGI9Zi5wb3AoKSkpO3JldHVybiBlLnJldmVyc2UoKSxlfXJldHVybltdLmNvbmNhdC5hcHBseShbXSxhKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdlRvTkFycmF5PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9mbGF0dGVuKGEubWFwKGZ1bmN0aW9uKGEpe3JldHVyblthLngsYS55LGEuel19KSl9LGQucHJvdG90eXBlLl9hc3NlcnQzZD1mdW5jdGlvbihhKXtpZighdGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhyb3cgbmV3IEVycm9yKGErXCIoKSBpcyBvbmx5IHN1cHBvcnRlZCBpbiBXRUJHTCBtb2RlLiBJZiB5b3UnZCBsaWtlIHRvIHVzZSAzRCBncmFwaGljcyBhbmQgV2ViR0wsIHNlZSAgaHR0cHM6Ly9wNWpzLm9yZy9leGFtcGxlcy9mb3JtLTNkLXByaW1pdGl2ZXMuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIil9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2luaXRUZXNzeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtiW2IubGVuZ3RoXT1hWzBdLGJbYi5sZW5ndGhdPWFbMV0sYltiLmxlbmd0aF09YVsyXX1mdW5jdGlvbiBiKGEpe2EhPT1mLnByaW1pdGl2ZVR5cGUuR0xfVFJJQU5HTEVTJiZjb25zb2xlLmxvZyhcImV4cGVjdGVkIFRSSUFOR0xFUyBidXQgZ290IHR5cGU6IFwiK2EpfWZ1bmN0aW9uIGMoYSl7Y29uc29sZS5sb2coXCJlcnJvciBjYWxsYmFja1wiKSxjb25zb2xlLmxvZyhcImVycm9yIG51bWJlcjogXCIrYSl9ZnVuY3Rpb24gZChhLGIsYyl7cmV0dXJuW2FbMF0sYVsxXSxhWzJdXX1mdW5jdGlvbiBlKGEpe312YXIgZz1uZXcgZi5HbHVUZXNzZWxhdG9yO3JldHVybiBnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfVkVSVEVYX0RBVEEsYSksZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX0JFR0lOLGIpLGcuZ2x1VGVzc0NhbGxiYWNrKGYuZ2x1RW51bS5HTFVfVEVTU19FUlJPUixjKSxnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfQ09NQklORSxkKSxnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfRURHRV9GTEFHLGUpLGd9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3RyaWFuZ3VsYXRlPWZ1bmN0aW9uKGEpe3RoaXMuX3Rlc3N5LmdsdVRlc3NOb3JtYWwoMCwwLDEpO3ZhciBiPVtdO3RoaXMuX3Rlc3N5LmdsdVRlc3NCZWdpblBvbHlnb24oYik7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3RoaXMuX3Rlc3N5LmdsdVRlc3NCZWdpbkNvbnRvdXIoKTtmb3IodmFyIGQ9YVtjXSxlPTA7ZTxkLmxlbmd0aDtlKz0zKXt2YXIgZj1bZFtlXSxkW2UrMV0sZFtlKzJdXTt0aGlzLl90ZXNzeS5nbHVUZXNzVmVydGV4KGYsZil9dGhpcy5fdGVzc3kuZ2x1VGVzc0VuZENvbnRvdXIoKX1yZXR1cm4gdGhpcy5fdGVzc3kuZ2x1VGVzc0VuZFBvbHlnb24oKSxifSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9iZXppZXJDb2VmZmljaWVudHM9ZnVuY3Rpb24oYSl7dmFyIGI9YSphLGM9YiphLGQ9MS1hLGU9ZCpkO3JldHVybltlKmQsMyplKmEsMypkKmIsY119LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3F1YWRyYXRpY0NvZWZmaWNpZW50cz1mdW5jdGlvbihhKXt2YXIgYj1hKmEsYz0xLWE7cmV0dXJuW2MqYywyKmMqYSxiXX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fYmV6aWVyVG9DYXRtdWxsPWZ1bmN0aW9uKGEpe3JldHVyblthWzFdLGFbMV0rKGFbMl0tYVswXSkvdGhpcy5fY3VydmVUaWdodG5lc3MsYVsyXS0oYVszXS1hWzFdKS90aGlzLl9jdXJ2ZVRpZ2h0bmVzcyxhWzJdXX0sYi5leHBvcnRzPWQuUmVuZGVyZXJHTH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi4vY29yZS9wNS5SZW5kZXJlclwiOjI3LFwiLi9wNS5DYW1lcmFcIjo2OSxcIi4vcDUuTWF0cml4XCI6NzEsXCIuL3A1LlNoYWRlclwiOjc1LGxpYnRlc3M6OX1dLDc1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlNoYWRlcj1mdW5jdGlvbihhLGIsYyl7dGhpcy5fcmVuZGVyZXI9YSx0aGlzLl92ZXJ0U3JjPWIsdGhpcy5fZnJhZ1NyYz1jLHRoaXMuX3ZlcnRTaGFkZXI9LTEsdGhpcy5fZnJhZ1NoYWRlcj0tMSx0aGlzLl9nbFByb2dyYW09MCx0aGlzLl9sb2FkZWRBdHRyaWJ1dGVzPSExLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLl9sb2FkZWRVbmlmb3Jtcz0hMSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMuX2JvdW5kPSExLHRoaXMuc2FtcGxlcnM9W119LGQuU2hhZGVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuX2dsUHJvZ3JhbSl7dmFyIGE9dGhpcy5fcmVuZGVyZXIuR0w7aWYodGhpcy5fdmVydFNoYWRlcj1hLmNyZWF0ZVNoYWRlcihhLlZFUlRFWF9TSEFERVIpLGEuc2hhZGVyU291cmNlKHRoaXMuX3ZlcnRTaGFkZXIsdGhpcy5fdmVydFNyYyksYS5jb21waWxlU2hhZGVyKHRoaXMuX3ZlcnRTaGFkZXIpLCFhLmdldFNoYWRlclBhcmFtZXRlcih0aGlzLl92ZXJ0U2hhZGVyLGEuQ09NUElMRV9TVEFUVVMpKXJldHVybiBjb25zb2xlLmVycm9yKFwiWWlrZXMhIEFuIGVycm9yIG9jY3VycmVkIGNvbXBpbGluZyB0aGUgdmVydGV4IHNoYWRlcjpcIithLmdldFNoYWRlckluZm9Mb2codGhpcy5fdmVydFNoYWRlcikpLG51bGw7aWYodGhpcy5fZnJhZ1NoYWRlcj1hLmNyZWF0ZVNoYWRlcihhLkZSQUdNRU5UX1NIQURFUiksYS5zaGFkZXJTb3VyY2UodGhpcy5fZnJhZ1NoYWRlcix0aGlzLl9mcmFnU3JjKSxhLmNvbXBpbGVTaGFkZXIodGhpcy5fZnJhZ1NoYWRlciksIWEuZ2V0U2hhZGVyUGFyYW1ldGVyKHRoaXMuX2ZyYWdTaGFkZXIsYS5DT01QSUxFX1NUQVRVUykpcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJEYXJuISBBbiBlcnJvciBvY2N1cnJlZCBjb21waWxpbmcgdGhlIGZyYWdtZW50IHNoYWRlcjpcIithLmdldFNoYWRlckluZm9Mb2codGhpcy5fZnJhZ1NoYWRlcikpLG51bGw7dGhpcy5fZ2xQcm9ncmFtPWEuY3JlYXRlUHJvZ3JhbSgpLGEuYXR0YWNoU2hhZGVyKHRoaXMuX2dsUHJvZ3JhbSx0aGlzLl92ZXJ0U2hhZGVyKSxhLmF0dGFjaFNoYWRlcih0aGlzLl9nbFByb2dyYW0sdGhpcy5fZnJhZ1NoYWRlciksYS5saW5rUHJvZ3JhbSh0aGlzLl9nbFByb2dyYW0pLGEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLl9nbFByb2dyYW0sYS5MSU5LX1NUQVRVUyl8fGNvbnNvbGUuZXJyb3IoXCJTbmFwISBFcnJvciBsaW5raW5nIHNoYWRlciBwcm9ncmFtOiBcIithLmdldFByb2dyYW1JbmZvTG9nKHRoaXMuX2dsUHJvZ3JhbSkpLHRoaXMuX2xvYWRBdHRyaWJ1dGVzKCksdGhpcy5fbG9hZFVuaWZvcm1zKCl9cmV0dXJuIHRoaXN9LGQuU2hhZGVyLnByb3RvdHlwZS5fbG9hZEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkQXR0cmlidXRlcyl7dGhpcy5hdHRyaWJ1dGVzPXt9O2Zvcih2YXIgYT10aGlzLl9yZW5kZXJlci5HTCxiPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLl9nbFByb2dyYW0sYS5BQ1RJVkVfQVRUUklCVVRFUyksYz0wO2M8YjsrK2Mpe3ZhciBkPWEuZ2V0QWN0aXZlQXR0cmliKHRoaXMuX2dsUHJvZ3JhbSxjKSxlPWQubmFtZSxmPWEuZ2V0QXR0cmliTG9jYXRpb24odGhpcy5fZ2xQcm9ncmFtLGUpLGc9e307Zy5uYW1lPWUsZy5sb2NhdGlvbj1mLGcudHlwZT1kLnR5cGUsZy5zaXplPWQuc2l6ZSx0aGlzLmF0dHJpYnV0ZXNbZV09Z310aGlzLl9sb2FkZWRBdHRyaWJ1dGVzPSEwfX0sZC5TaGFkZXIucHJvdG90eXBlLl9sb2FkVW5pZm9ybXM9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkVW5pZm9ybXMpe2Zvcih2YXIgYT10aGlzLl9yZW5kZXJlci5HTCxiPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLl9nbFByb2dyYW0sYS5BQ1RJVkVfVU5JRk9STVMpLGM9MCxkPTA7ZDxiOysrZCl7dmFyIGU9YS5nZXRBY3RpdmVVbmlmb3JtKHRoaXMuX2dsUHJvZ3JhbSxkKSxmPXt9O2YubG9jYXRpb249YS5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5fZ2xQcm9ncmFtLGUubmFtZSksZi5zaXplPWUuc2l6ZTt2YXIgZz1lLm5hbWU7ZS5zaXplPjEmJihnPWcuc3Vic3RyaW5nKDAsZy5pbmRleE9mKFwiWzBdXCIpKSksZi5uYW1lPWcsZi50eXBlPWUudHlwZSxmLnR5cGU9PT1hLlNBTVBMRVJfMkQmJihmLnNhbXBsZXJJbmRleD1jLGMrKyx0aGlzLnNhbXBsZXJzLnB1c2goZikpLHRoaXMudW5pZm9ybXNbZ109Zn10aGlzLl9sb2FkZWRVbmlmb3Jtcz0hMH19LGQuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlPWZ1bmN0aW9uKCl7fSxkLlNoYWRlci5wcm90b3R5cGUuYmluZFNoYWRlcj1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuX2JvdW5kfHwodGhpcy51c2VQcm9ncmFtKCksdGhpcy5fYm91bmQ9ITAsdGhpcy5iaW5kVGV4dHVyZXMoKSx0aGlzLl9zZXRNYXRyaXhVbmlmb3JtcygpLHRoaXM9PT10aGlzLl9yZW5kZXJlci5jdXJTdHJva2VTaGFkZXImJnRoaXMuX3NldFZpZXdwb3J0VW5pZm9ybSgpKX0sZC5TaGFkZXIucHJvdG90eXBlLnVuYmluZFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib3VuZCYmKHRoaXMudW5iaW5kVGV4dHVyZXMoKSx0aGlzLl9ib3VuZD0hMSksdGhpc30sZC5TaGFkZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlcz1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9yZW5kZXJlci5HTCxiPTA7Yjx0aGlzLnNhbXBsZXJzLmxlbmd0aDtiKyspe3ZhciBjPXRoaXMuc2FtcGxlcnNbYl0sZD1jLnRleHR1cmU7dm9pZCAwPT09ZCYmKGQ9dGhpcy5fcmVuZGVyZXIuX2dldEVtcHR5VGV4dHVyZSgpKSxhLmFjdGl2ZVRleHR1cmUoYS5URVhUVVJFMCtjLnNhbXBsZXJJbmRleCksZC5iaW5kVGV4dHVyZSgpLGQudXBkYXRlKCksYS51bmlmb3JtMWkoYy5sb2NhdGlvbixjLnNhbXBsZXJJbmRleCl9fSxkLlNoYWRlci5wcm90b3R5cGUudXBkYXRlVGV4dHVyZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPHRoaXMuc2FtcGxlcnMubGVuZ3RoO2ErKyl7dmFyIGI9dGhpcy5zYW1wbGVyc1thXSxjPWIudGV4dHVyZTtjJiZjLnVwZGF0ZSgpfX0sZC5TaGFkZXIucHJvdG90eXBlLnVuYmluZFRleHR1cmVzPWZ1bmN0aW9uKCl7fSxkLlNoYWRlci5wcm90b3R5cGUuX3NldE1hdHJpeFVuaWZvcm1zPWZ1bmN0aW9uKCl7dGhpcy5zZXRVbmlmb3JtKFwidVByb2plY3Rpb25NYXRyaXhcIix0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5tYXQ0KSx0aGlzLnNldFVuaWZvcm0oXCJ1TW9kZWxWaWV3TWF0cml4XCIsdGhpcy5fcmVuZGVyZXIudU1WTWF0cml4Lm1hdDQpLHRoaXMuc2V0VW5pZm9ybShcInVWaWV3TWF0cml4XCIsdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NCksdGhpcz09PXRoaXMuX3JlbmRlcmVyLmN1ckZpbGxTaGFkZXImJih0aGlzLl9yZW5kZXJlci51Tk1hdHJpeC5pbnZlcnNlVHJhbnNwb3NlKHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeCksdGhpcy5zZXRVbmlmb3JtKFwidU5vcm1hbE1hdHJpeFwiLHRoaXMuX3JlbmRlcmVyLnVOTWF0cml4Lm1hdDMpKX0sZC5TaGFkZXIucHJvdG90eXBlLl9zZXRWaWV3cG9ydFVuaWZvcm09ZnVuY3Rpb24oKXt0aGlzLnNldFVuaWZvcm0oXCJ1Vmlld3BvcnRcIix0aGlzLl9yZW5kZXJlci5fdmlld3BvcnQpfSxkLlNoYWRlci5wcm90b3R5cGUudXNlUHJvZ3JhbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5HTC51c2VQcm9ncmFtKHRoaXMuX2dsUHJvZ3JhbSksdGhpc30sZC5TaGFkZXIucHJvdG90eXBlLnNldFVuaWZvcm09ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLnVuaWZvcm1zW2FdO2lmKGMpe3ZhciBkPWMubG9jYXRpb24sZT10aGlzLl9yZW5kZXJlci5HTDtzd2l0Y2godGhpcy51c2VQcm9ncmFtKCksYy50eXBlKXtjYXNlIGUuQk9PTDohMD09PWI/ZS51bmlmb3JtMWkoZCwxKTplLnVuaWZvcm0xaShkLDApO2JyZWFrO2Nhc2UgZS5JTlQ6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTFpdihkLGIpOmUudW5pZm9ybTFpKGQsYik7YnJlYWs7Y2FzZSBlLkZMT0FUOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0xZnYoZCxiKTplLnVuaWZvcm0xZihkLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVF9NQVQzOmUudW5pZm9ybU1hdHJpeDNmdihkLCExLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVF9NQVQ0OmUudW5pZm9ybU1hdHJpeDRmdihkLCExLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVF9WRUMyOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0yZnYoZCxiKTplLnVuaWZvcm0yZihkLGJbMF0sYlsxXSk7YnJlYWs7Y2FzZSBlLkZMT0FUX1ZFQzM6XG5jLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtM2Z2KGQsYik6ZS51bmlmb3JtM2YoZCxiWzBdLGJbMV0sYlsyXSk7YnJlYWs7Y2FzZSBlLkZMT0FUX1ZFQzQ6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTRmdihkLGIpOmUudW5pZm9ybTRmKGQsYlswXSxiWzFdLGJbMl0sYlszXSk7YnJlYWs7Y2FzZSBlLklOVF9WRUMyOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0yaXYoZCxiKTplLnVuaWZvcm0yaShkLGJbMF0sYlsxXSk7YnJlYWs7Y2FzZSBlLklOVF9WRUMzOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0zaXYoZCxiKTplLnVuaWZvcm0zaShkLGJbMF0sYlsxXSxiWzJdKTticmVhaztjYXNlIGUuSU5UX1ZFQzQ6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTRpdihkLGIpOmUudW5pZm9ybTRpKGQsYlswXSxiWzFdLGJbMl0sYlszXSk7YnJlYWs7Y2FzZSBlLlNBTVBMRVJfMkQ6ZS5hY3RpdmVUZXh0dXJlKGUuVEVYVFVSRTArYy5zYW1wbGVySW5kZXgpLGMudGV4dHVyZT10aGlzLl9yZW5kZXJlci5nZXRUZXh0dXJlKGIpLGUudW5pZm9ybTFpKGMubG9jYXRpb24sYy5zYW1wbGVySW5kZXgpfXJldHVybiB0aGlzfX0sZC5TaGFkZXIucHJvdG90eXBlLmlzTGlnaHRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy51bmlmb3Jtcy51VXNlTGlnaHRpbmd8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudUFtYmllbnRMaWdodENvdW50fHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVEaXJlY3Rpb25hbExpZ2h0Q291bnR8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVBvaW50TGlnaHRDb3VudHx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51QW1iaWVudENvbG9yfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVEaXJlY3Rpb25hbENvbG9yfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVQb2ludExpZ2h0TG9jYXRpb258fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVBvaW50TGlnaHRDb2xvcnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51TGlnaHRpbmdEaXJlY3Rpb258fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVNwZWN1bGFyfSxkLlNoYWRlci5wcm90b3R5cGUuaXNUZXh0dXJlU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2FtcGxlckluZGV4PjB9LGQuU2hhZGVyLnByb3RvdHlwZS5pc0NvbG9yU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuYXR0cmlidXRlcy5hVmVydGV4Q29sb3J8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudU1hdGVyaWFsQ29sb3J9LGQuU2hhZGVyLnByb3RvdHlwZS5pc1RleExpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNMaWdodFNoYWRlcigpJiZ0aGlzLmlzVGV4dHVyZVNoYWRlcigpfSxkLlNoYWRlci5wcm90b3R5cGUuaXNTdHJva2VTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy51bmlmb3Jtcy51U3Ryb2tlV2VpZ2h0fSxkLlNoYWRlci5wcm90b3R5cGUuZW5hYmxlQXR0cmliPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz10aGlzLl9yZW5kZXJlci5HTDtyZXR1cm4tMSE9PWEmJihnLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGEpLGcudmVydGV4QXR0cmliUG9pbnRlcihhLGIsYyxkLGUsZikpLHRoaXN9LGIuZXhwb3J0cz1kLlNoYWRlcn0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5UZXh0dXJlPWZ1bmN0aW9uKGEsYil7dGhpcy5fcmVuZGVyZXI9YTt2YXIgYz10aGlzLl9yZW5kZXJlci5HTDt0aGlzLnNyYz1iLHRoaXMuZ2xUZXg9dm9pZCAwLHRoaXMuZ2xUYXJnZXQ9Yy5URVhUVVJFXzJELHRoaXMuZ2xGb3JtYXQ9Yy5SR0JBLHRoaXMubWlwbWFwcz0hMSx0aGlzLmdsTWluRmlsdGVyPWMuTElORUFSLHRoaXMuZ2xNYWdGaWx0ZXI9Yy5MSU5FQVIsdGhpcy5nbFdyYXBTPWMuQ0xBTVBfVE9fRURHRSx0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFLHRoaXMuaXNTcmNNZWRpYUVsZW1lbnQ9dm9pZCAwIT09ZC5NZWRpYUVsZW1lbnQmJmIgaW5zdGFuY2VvZiBkLk1lZGlhRWxlbWVudCx0aGlzLl92aWRlb1ByZXZVcGRhdGVUaW1lPTAsdGhpcy5pc1NyY0hUTUxFbGVtZW50PXZvaWQgMCE9PWQuRWxlbWVudCYmYiBpbnN0YW5jZW9mIGQuRWxlbWVudCYmIShiIGluc3RhbmNlb2YgZC5HcmFwaGljcyksdGhpcy5pc1NyY1A1SW1hZ2U9YiBpbnN0YW5jZW9mIGQuSW1hZ2UsdGhpcy5pc1NyY1A1R3JhcGhpY3M9YiBpbnN0YW5jZW9mIGQuR3JhcGhpY3MsdGhpcy5pc0ltYWdlRGF0YT1cInVuZGVmaW5lZFwiIT10eXBlb2YgSW1hZ2VEYXRhJiZiIGluc3RhbmNlb2YgSW1hZ2VEYXRhO3ZhciBlPXRoaXMuX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZSgpO3JldHVybiB0aGlzLndpZHRoPWUud2lkdGgsdGhpcy5oZWlnaHQ9ZS5oZWlnaHQsdGhpcy5pbml0KGUpLHRoaXN9LGQuVGV4dHVyZS5wcm90b3R5cGUuX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZT1mdW5jdGlvbigpe3ZhciBhO3JldHVybiB0aGlzLmlzU3JjUDVJbWFnZT9hPXRoaXMuc3JjLmNhbnZhczp0aGlzLmlzU3JjTWVkaWFFbGVtZW50fHx0aGlzLmlzU3JjUDVHcmFwaGljc3x8dGhpcy5pc1NyY0hUTUxFbGVtZW50P2E9dGhpcy5zcmMuZWx0OnRoaXMuaXNJbWFnZURhdGEmJihhPXRoaXMuc3JjKSxhfSxkLlRleHR1cmUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fcmVuZGVyZXIuR0w7aWYodGhpcy5nbFRleD1iLmNyZWF0ZVRleHR1cmUoKSx0aGlzLmJpbmRUZXh0dXJlKCksYi50ZXhQYXJhbWV0ZXJpKGIuVEVYVFVSRV8yRCxiLlRFWFRVUkVfTUFHX0ZJTFRFUix0aGlzLmdsTWFnRmlsdGVyKSxiLnRleFBhcmFtZXRlcmkoYi5URVhUVVJFXzJELGIuVEVYVFVSRV9NSU5fRklMVEVSLHRoaXMuZ2xNaW5GaWx0ZXIpLGIudGV4UGFyYW1ldGVyaShiLlRFWFRVUkVfMkQsYi5URVhUVVJFX1dSQVBfUyx0aGlzLmdsV3JhcFMpLGIudGV4UGFyYW1ldGVyaShiLlRFWFRVUkVfMkQsYi5URVhUVVJFX1dSQVBfVCx0aGlzLmdsV3JhcFQpLDA9PT10aGlzLndpZHRofHwwPT09dGhpcy5oZWlnaHR8fHRoaXMuaXNTcmNNZWRpYUVsZW1lbnQmJiF0aGlzLnNyYy5sb2FkZWRtZXRhZGF0YSl7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoWzEsMSwxLDFdKTtiLnRleEltYWdlMkQodGhpcy5nbFRhcmdldCwwLGIuUkdCQSwxLDEsMCx0aGlzLmdsRm9ybWF0LGIuVU5TSUdORURfQllURSxjKX1lbHNlIGIudGV4SW1hZ2UyRCh0aGlzLmdsVGFyZ2V0LDAsdGhpcy5nbEZvcm1hdCx0aGlzLmdsRm9ybWF0LGIuVU5TSUdORURfQllURSxhKX0sZC5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNyYztpZigwPT09YS53aWR0aHx8MD09PWEuaGVpZ2h0KXJldHVybiExO3ZhciBiPXRoaXMuX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZSgpLGM9ITEsZD10aGlzLl9yZW5kZXJlci5HTDtyZXR1cm4gYi53aWR0aCE9PXRoaXMud2lkdGh8fGIuaGVpZ2h0IT09dGhpcy5oZWlnaHQ/KGM9ITAsdGhpcy53aWR0aD1iLndpZHRoLHRoaXMuaGVpZ2h0PWIuaGVpZ2h0LHRoaXMuaXNTcmNQNUltYWdlP2Euc2V0TW9kaWZpZWQoITEpOih0aGlzLmlzU3JjTWVkaWFFbGVtZW50fHx0aGlzLmlzU3JjSFRNTEVsZW1lbnQpJiZhLnNldE1vZGlmaWVkKCEwKSk6dGhpcy5pc1NyY1A1SW1hZ2U/YS5pc01vZGlmaWVkKCkmJihjPSEwLGEuc2V0TW9kaWZpZWQoITEpKTp0aGlzLmlzU3JjTWVkaWFFbGVtZW50P2EuaXNNb2RpZmllZCgpPyhjPSEwLGEuc2V0TW9kaWZpZWQoITEpKTphLmxvYWRlZG1ldGFkYXRhJiZ0aGlzLl92aWRlb1ByZXZVcGRhdGVUaW1lIT09YS50aW1lKCkmJih0aGlzLl92aWRlb1ByZXZVcGRhdGVUaW1lPWEudGltZSgpLGM9ITApOnRoaXMuaXNJbWFnZURhdGE/YS5fZGlydHkmJihhLl9kaXJ0eT0hMSxjPSEwKTpjPSEwLGMmJih0aGlzLmJpbmRUZXh0dXJlKCksZC50ZXhJbWFnZTJEKHRoaXMuZ2xUYXJnZXQsMCx0aGlzLmdsRm9ybWF0LHRoaXMuZ2xGb3JtYXQsZC5VTlNJR05FRF9CWVRFLGIpKSxjfSxkLlRleHR1cmUucHJvdG90eXBlLmJpbmRUZXh0dXJlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLkdMLmJpbmRUZXh0dXJlKHRoaXMuZ2xUYXJnZXQsdGhpcy5nbFRleCksdGhpc30sZC5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmRUZXh0dXJlPWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuR0wuYmluZFRleHR1cmUodGhpcy5nbFRhcmdldCxudWxsKX0sZC5UZXh0dXJlLnByb3RvdHlwZS5zZXRJbnRlcnBvbGF0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fcmVuZGVyZXIuR0w7YT09PWUuTkVBUkVTVD90aGlzLmdsTWluRmlsdGVyPWMuTkVBUkVTVDp0aGlzLmdsTWluRmlsdGVyPWMuTElORUFSLGI9PT1lLk5FQVJFU1Q/dGhpcy5nbE1hZ0ZpbHRlcj1jLk5FQVJFU1Q6dGhpcy5nbE1hZ0ZpbHRlcj1jLkxJTkVBUix0aGlzLmJpbmRUZXh0dXJlKCksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfTUlOX0ZJTFRFUix0aGlzLmdsTWluRmlsdGVyKSxjLnRleFBhcmFtZXRlcmkoYy5URVhUVVJFXzJELGMuVEVYVFVSRV9NQUdfRklMVEVSLHRoaXMuZ2xNYWdGaWx0ZXIpLHRoaXMudW5iaW5kVGV4dHVyZSgpfSxkLlRleHR1cmUucHJvdG90eXBlLnNldFdyYXBNb2RlPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fcmVuZGVyZXIuR0wsZD1mdW5jdGlvbihhKXtyZXR1cm4gMD09KGEmYS0xKX0sZj1kKHRoaXMud2lkdGgpLGc9ZCh0aGlzLndpZHRoKTthPT09ZS5SRVBFQVQ/ZiYmZz90aGlzLmdsV3JhcFM9Yy5SRVBFQVQ6KGNvbnNvbGUud2FybihcIllvdSB0cmllZCB0byBzZXQgdGhlIHdyYXAgbW9kZSB0byBSRVBFQVQgYnV0IHRoZSB0ZXh0dXJlIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgdHdvLiBTZXR0aW5nIHRvIENMQU1QIGluc3RlYWRcIiksdGhpcy5nbFdyYXBTPWMuQ0xBTVBfVE9fRURHRSk6YT09PWUuTUlSUk9SP2YmJmc/dGhpcy5nbFdyYXBTPWMuTUlSUk9SRURfUkVQRUFUOihjb25zb2xlLndhcm4oXCJZb3UgdHJpZWQgdG8gc2V0IHRoZSB3cmFwIG1vZGUgdG8gTUlSUk9SIGJ1dCB0aGUgdGV4dHVyZSBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIHR3by4gU2V0dGluZyB0byBDTEFNUCBpbnN0ZWFkXCIpLHRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UpOnRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UsYj09PWUuUkVQRUFUP2YmJmc/dGhpcy5nbFdyYXBUPWMuUkVQRUFUOihjb25zb2xlLndhcm4oXCJZb3UgdHJpZWQgdG8gc2V0IHRoZSB3cmFwIG1vZGUgdG8gUkVQRUFUIGJ1dCB0aGUgdGV4dHVyZSBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIHR3by4gU2V0dGluZyB0byBDTEFNUCBpbnN0ZWFkXCIpLHRoaXMuZ2xXcmFwVD1jLkNMQU1QX1RPX0VER0UpOmI9PT1lLk1JUlJPUj9mJiZnP3RoaXMuZ2xXcmFwVD1jLk1JUlJPUkVEX1JFUEVBVDooY29uc29sZS53YXJuKFwiWW91IHRyaWVkIHRvIHNldCB0aGUgd3JhcCBtb2RlIHRvIE1JUlJPUiBidXQgdGhlIHRleHR1cmUgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uIFNldHRpbmcgdG8gQ0xBTVAgaW5zdGVhZFwiKSx0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFKTp0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFLHRoaXMuYmluZFRleHR1cmUoKSxjLnRleFBhcmFtZXRlcmkoYy5URVhUVVJFXzJELGMuVEVYVFVSRV9XUkFQX1MsdGhpcy5nbFdyYXBTKSxjLnRleFBhcmFtZXRlcmkoYy5URVhUVVJFXzJELGMuVEVYVFVSRV9XUkFQX1QsdGhpcy5nbFdyYXBUKSx0aGlzLnVuYmluZFRleHR1cmUoKX0sYi5leHBvcnRzPWQuVGV4dHVyZX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7dGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5pbmZvcz1bXSx0aGlzLmZpbmRJbWFnZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLndpZHRoKnRoaXMuaGVpZ2h0O2lmKGE+Yil0aHJvdyBuZXcgRXJyb3IoXCJmb250IGlzIHRvbyBjb21wbGV4IHRvIHJlbmRlciBpbiAzRFwiKTtmb3IodmFyIGMsZCxlPXRoaXMuaW5mb3MubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBmPXRoaXMuaW5mb3NbZV07aWYoZi5pbmRleCthPGIpe2M9ZixkPWYuaW1hZ2VEYXRhO2JyZWFrfX1pZighYyl7dHJ5e2Q9bmV3IEltYWdlRGF0YSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX1jYXRjaChhKXt2YXIgZz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNhbnZhc1wiKVswXSxoPSFnO2d8fChnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksZy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZykpO3ZhciBpPWcuZ2V0Q29udGV4dChcIjJkXCIpO2kmJihkPWkuY3JlYXRlSW1hZ2VEYXRhKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKSxoJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGcpfWM9e2luZGV4OjAsaW1hZ2VEYXRhOmR9LHRoaXMuaW5mb3MucHVzaChjKX12YXIgaj1jLmluZGV4O3JldHVybiBjLmluZGV4Kz1hLGQuX2RpcnR5PSEwLHtpbWFnZURhdGE6ZCxpbmRleDpqfX19ZnVuY3Rpb24gZShhLGIsYyxkLGUpe3ZhciBmPWEuaW1hZ2VEYXRhLGc9Zi5kYXRhLGg9NCphLmluZGV4Kys7Z1toKytdPWIsZ1toKytdPWMsZ1toKytdPWQsZ1toKytdPWV9dmFyIGY9YShcIi4uL2NvcmUvbWFpblwiKSxnPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi9wNS5TaGFkZXJcIiksYShcIi4vcDUuUmVuZGVyZXJHTFwiKSxmLlJlbmRlcmVyR0wucHJvdG90eXBlLl9hcHBseVRleHRQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7fSxmLlJlbmRlcmVyR0wucHJvdG90eXBlLnRleHRXaWR0aD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5faXNPcGVuVHlwZSgpP3RoaXMuX3RleHRGb250Ll90ZXh0V2lkdGgoYSx0aGlzLl90ZXh0U2l6ZSk6MH07dmFyIGg9OSxpPWgsaj02NCxrPTY0LGw9NjQsbT02NCxuPTY0LG89NjQscD1NYXRoLnNxcnQoMykscT1mdW5jdGlvbihhKXt0aGlzLmZvbnQ9YSx0aGlzLnN0cm9rZUltYWdlSW5mb3M9bmV3IGQoaixrKSx0aGlzLmNvbERpbUltYWdlSW5mb3M9bmV3IGQobCxtKSx0aGlzLnJvd0RpbUltYWdlSW5mb3M9bmV3IGQobCxtKSx0aGlzLmNvbENlbGxJbWFnZUluZm9zPW5ldyBkKG4sbyksdGhpcy5yb3dDZWxsSW1hZ2VJbmZvcz1uZXcgZChuLG8pLHRoaXMuZ2x5cGhJbmZvcz17fSx0aGlzLmdldEdseXBoSW5mbz1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYixjKXtmdW5jdGlvbiBkKGEsYixjKXtmb3IodmFyIGQ9YS5sZW5ndGg7ZC0tID4wOyl7dmFyIGU9YVtkXTtiPmUmJihiPWUpLGM8ZSYmKGM9ZSl9cmV0dXJue21pbjpiLG1heDpjfX12YXIgZT13Lmxlbmd0aDt3LnB1c2goYyk7Zm9yKHZhciBmPWQoYSwxLDApLGc9TWF0aC5tYXgoTWF0aC5mbG9vcihmLm1pbipoKSwwKSxqPU1hdGgubWluKE1hdGguY2VpbChmLm1heCpoKSxoKSxrPWc7azxqOysrayl5W2tdLnB1c2goZSk7Zm9yKHZhciBsPWQoYiwxLDApLG09TWF0aC5tYXgoTWF0aC5mbG9vcihsLm1pbippKSwwKSxuPU1hdGgubWluKE1hdGguY2VpbChsLm1heCppKSxpKSxvPW07bzxuOysrbyl4W29dLnB1c2goZSl9ZnVuY3Rpb24gYyhhLGIsYyl7cmV0dXJuIGE8Yj9iOmE+Yz9jOmF9ZnVuY3Rpb24gZChhKXtyZXR1cm4gYygyNTUqYSwwLDI1NSl9ZnVuY3Rpb24gZyhhLGIsYyxkKXt0aGlzLnAwPWEsdGhpcy5jMD1iLHRoaXMuYzE9Yyx0aGlzLnAxPWQsdGhpcy50b1F1YWRyYXRpYz1mdW5jdGlvbigpe3JldHVybnt4OnRoaXMucDAueCx5OnRoaXMucDAueSx4MTp0aGlzLnAxLngseTE6dGhpcy5wMS55LGN4OigzKih0aGlzLmMwLngrdGhpcy5jMS54KS0odGhpcy5wMC54K3RoaXMucDEueCkpLzQsY3k6KDMqKHRoaXMuYzAueSt0aGlzLmMxLnkpLSh0aGlzLnAwLnkrdGhpcy5wMS55KSkvNH19LHRoaXMucXVhZEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIGYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIodGhpcy5wMSx0aGlzLnAwKSxmLlZlY3Rvci5tdWx0KGYuVmVjdG9yLnN1Yih0aGlzLmMxLHRoaXMuYzApLDMpKS5tYWcoKS8yfSx0aGlzLnNwbGl0PWZ1bmN0aW9uKGEpe3ZhciBiPWYuVmVjdG9yLmxlcnAodGhpcy5wMCx0aGlzLmMwLGEpLGM9Zi5WZWN0b3IubGVycCh0aGlzLmMwLHRoaXMuYzEsYSksZD1mLlZlY3Rvci5sZXJwKGIsYyxhKTt0aGlzLmMxPWYuVmVjdG9yLmxlcnAodGhpcy5jMSx0aGlzLnAxLGEpLHRoaXMuYzA9Zi5WZWN0b3IubGVycChjLHRoaXMuYzEsYSk7dmFyIGU9Zi5WZWN0b3IubGVycChkLHRoaXMuYzAsYSksaD1uZXcgZyh0aGlzLnAwLGIsZCxlKTtyZXR1cm4gdGhpcy5wMD1lLGh9LHRoaXMuc3BsaXRJbmZsZWN0aW9ucz1mdW5jdGlvbigpe3ZhciBhPWYuVmVjdG9yLnN1Yih0aGlzLmMwLHRoaXMucDApLGI9Zi5WZWN0b3Iuc3ViKGYuVmVjdG9yLnN1Yih0aGlzLmMxLHRoaXMuYzApLGEpLGM9Zi5WZWN0b3Iuc3ViKGYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIodGhpcy5wMSx0aGlzLmMxKSxhKSxmLlZlY3Rvci5tdWx0KGIsMikpLGQ9W10sZT1iLngqYy55LWIueSpjLng7aWYoMCE9PWUpe3ZhciBnPWEueCpjLnktYS55KmMueCxoPWEueCpiLnktYS55KmIueCxpPWcqZy00KmUqaDtpZihpPj0wKXtlPDAmJihlPS1lLGc9LWcsaD0taCk7dmFyIGo9TWF0aC5zcXJ0KGkpLGs9KC1nLWopLygyKmUpLGw9KC1nK2opLygyKmUpO2s+MCYmazwxJiYoZC5wdXNoKHRoaXMuc3BsaXQoaykpLGw9MS0oMS1sKS8oMS1rKSksbD4wJiZsPDEmJmQucHVzaCh0aGlzLnNwbGl0KGwpKX19cmV0dXJuIGQucHVzaCh0aGlzKSxkfX1mdW5jdGlvbiBqKGEsYixjLGQsZSxoLGksail7Zm9yKHZhciBrPW5ldyBnKG5ldyBmLlZlY3RvcihhLGIpLG5ldyBmLlZlY3RvcihjLGQpLG5ldyBmLlZlY3RvcihlLGgpLG5ldyBmLlZlY3RvcihpLGopKS5zcGxpdEluZmxlY3Rpb25zKCksbD1bXSxtPTMwL3Asbj0wO248ay5sZW5ndGg7bisrKXtmb3IodmFyIG8scT1rW25dLHI9W107ISgobz1tL3EucXVhZEVycm9yKCkpPj0uMTI1KTspe3ZhciBzPU1hdGgucG93KG8sMS8zKSx0PXEuc3BsaXQocyksdT1xLnNwbGl0KDEtcy8oMS1zKSk7bC5wdXNoKHQpLHIucHVzaChxKSxxPXV9bzwxJiZsLnB1c2gocS5zcGxpdCguNSkpLGwucHVzaChxKSxBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsLHIucmV2ZXJzZSgpKX1yZXR1cm4gbH1mdW5jdGlvbiBrKGEsYyxkLGUpe2IoW2EsZF0sW2MsZV0se3g6YSx5OmMsY3g6KGErZCkvMixjeTooYytlKS8yfSl9ZnVuY3Rpb24gbChhLGIsYyxkKXtyZXR1cm4gTWF0aC5hYnMoYy1hKTwxZS01JiZNYXRoLmFicyhkLWIpPDFlLTV9ZnVuY3Rpb24gbShhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoLGY9Yi5maW5kSW1hZ2UoZCksZz1mLmluZGV4LGg9MCxpPTA7aTxkOysraSloKz1hW2ldLmxlbmd0aDtmb3IodmFyIGo9Yy5maW5kSW1hZ2UoaCksaz0wO2s8ZDsrK2spe3ZhciBsPWFba10sbT1sLmxlbmd0aCxuPWouaW5kZXg7ZShmLG4+PjcsMTI3Jm4sbT4+NywxMjcmbSk7Zm9yKHZhciBvPTA7bzxtOysrbyl7dmFyIHA9bFtvXStTO2UoaixwPj43LDEyNyZwLDAsMCl9fXJldHVybntjZWxsSW1hZ2VJbmZvOmosZGltT2Zmc2V0OmcsZGltSW1hZ2VJbmZvOmZ9fXZhciBuPXRoaXMuZ2x5cGhJbmZvc1thLmluZGV4XTtpZihuKXJldHVybiBuO3ZhciBvPWEuZ2V0Qm91bmRpbmdCb3goKSxxPW8ueDEscj1vLnkxLHM9by54Mi1xLHQ9by55Mi1yLHU9YS5wYXRoLmNvbW1hbmRzO2lmKDA9PT1zfHwwPT09dHx8IXUubGVuZ3RoKXJldHVybiB0aGlzLmdseXBoSW5mb3NbYS5pbmRleF09e307dmFyIHYsdz1bXSx4PVtdLHk9W107Zm9yKHY9aC0xO3Y+PTA7LS12KXkucHVzaChbXSk7Zm9yKHY9aS0xO3Y+PTA7LS12KXgucHVzaChbXSk7Zm9yKHZhciB6LEEsQixDLEQ9MDtEPHUubGVuZ3RoOysrRCl7dmFyIEU9dVtEXSxGPShFLngtcSkvcyxHPShFLnktcikvdDtpZighbCh6LEEsRixHKSl7c3dpdGNoKEUudHlwZSl7Y2FzZVwiTVwiOkI9RixDPUc7YnJlYWs7Y2FzZVwiTFwiOmsoeixBLEYsRyk7YnJlYWs7Y2FzZVwiUVwiOnZhciBIPShFLngxLXEpL3MsST0oRS55MS1yKS90O2IoW3osRixIXSxbQSxHLEldLHt4OnoseTpBLGN4OkgsY3k6SX0pO2JyZWFrO2Nhc2VcIlpcIjpsKHosQSxCLEMpP3cucHVzaCh7eDp6LHk6QX0pOihrKHosQSxCLEMpLHcucHVzaCh7eDpCLHk6Q30pKTticmVhaztjYXNlXCJDXCI6Zm9yKHZhciBKPShFLngxLXEpL3MsSz0oRS55MS1yKS90LEw9KEUueDItcSkvcyxNPShFLnkyLXIpL3QsTj1qKHosQSxKLEssTCxNLEYsRyksTz0wO088Ti5sZW5ndGg7TysrKXt2YXIgUD1OW09dLnRvUXVhZHJhdGljKCk7YihbUC54LFAueDEsUC5jeF0sW1AueSxQLnkxLFAuY3ldLFApfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBjb21tYW5kIHR5cGU6IFwiK0UudHlwZSl9ej1GLEE9R319Zm9yKHZhciBRPXcubGVuZ3RoLFI9dGhpcy5zdHJva2VJbWFnZUluZm9zLmZpbmRJbWFnZShRKSxTPVIuaW5kZXgsVD0wO1Q8UTsrK1Qpe3ZhciBVPXdbVF07ZShSLGQoVS54KSxkKFUueSksZChVLmN4KSxkKFUuY3kpKX1yZXR1cm4gbj10aGlzLmdseXBoSW5mb3NbYS5pbmRleF09e2dseXBoOmEsdUdseXBoUmVjdDpbby54MSwtby55MSxvLngyLC1vLnkyXSxzdHJva2VJbWFnZUluZm86UixzdHJva2VzOncsY29sSW5mbzptKHksdGhpcy5jb2xEaW1JbWFnZUluZm9zLHRoaXMuY29sQ2VsbEltYWdlSW5mb3MpLHJvd0luZm86bSh4LHRoaXMucm93RGltSW1hZ2VJbmZvcyx0aGlzLnJvd0NlbGxJbWFnZUluZm9zKX0sbi51R3JpZE9mZnNldD1bbi5jb2xJbmZvLmRpbU9mZnNldCxuLnJvd0luZm8uZGltT2Zmc2V0XSxufX07Zi5SZW5kZXJlckdMLnByb3RvdHlwZS5fcmVuZGVyVGV4dD1mdW5jdGlvbihhLGIsYyxkLGUpe2lmKCEoZD49ZSkmJnRoaXMuX2RvRmlsbCl7aWYoIXRoaXMuX2lzT3BlblR5cGUoKSlyZXR1cm4gY29uc29sZS5sb2coXCJXRUJHTDogb25seSBvcGVudHlwZSBmb250cyBhcmUgc3VwcG9ydGVkXCIpLGE7YS5wdXNoKCk7dmFyIHA9dGhpcy5jdXJGaWxsU2hhZGVyLHI9dGhpcy5fZG9TdHJva2Uscz10aGlzLmRyYXdNb2RlO3RoaXMuY3VyRmlsbFNoYWRlcj1udWxsLHRoaXMuX2RvU3Ryb2tlPSExLHRoaXMuZHJhd01vZGU9Zy5URVhUVVJFO3ZhciB0PXRoaXMuX3RleHRGb250LmZvbnQsdT10aGlzLl90ZXh0Rm9udC5fZm9udEluZm87dXx8KHU9dGhpcy5fdGV4dEZvbnQuX2ZvbnRJbmZvPW5ldyBxKHQpKTt2YXIgdj10aGlzLl90ZXh0Rm9udC5faGFuZGxlQWxpZ25tZW50KHRoaXMsYixjLGQpLHc9dGhpcy5fdGV4dFNpemUseD13L3QudW5pdHNQZXJFbTt0aGlzLnRyYW5zbGF0ZSh2Lngsdi55LDApLHRoaXMuc2NhbGUoeCx4LDEpO3ZhciB5PXRoaXMuR0wsej0hdGhpcy5fZGVmYXVsdEZvbnRTaGFkZXIsQT10aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0Rm9udFNoYWRlcigpKTt6JiYoQS5zZXRVbmlmb3JtKFwidUdyaWRJbWFnZVNpemVcIixbbCxtXSksQS5zZXRVbmlmb3JtKFwidUNlbGxzSW1hZ2VTaXplXCIsW24sb10pLEEuc2V0VW5pZm9ybShcInVTdHJva2VJbWFnZVNpemVcIixbaixrXSksQS5zZXRVbmlmb3JtKFwidUdyaWRTaXplXCIsW2gsaV0pKSx0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJGaWxsQ29sb3IpO3ZhciBCPXRoaXMuZ0hhc2guZ2x5cGg7aWYoIUIpe3ZhciBDPXRoaXMuX3RleHRHZW9tPW5ldyBmLkdlb21ldHJ5KDEsMSxmdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PTE7YSsrKWZvcih2YXIgYj0wO2I8PTE7YisrKXRoaXMudmVydGljZXMucHVzaChuZXcgZi5WZWN0b3IoYixhLDApKSx0aGlzLnV2cy5wdXNoKGIsYSl9KTtDLmNvbXB1dGVGYWNlcygpLmNvbXB1dGVOb3JtYWxzKCksQj10aGlzLmNyZWF0ZUJ1ZmZlcnMoXCJnbHlwaFwiLEMpfXRoaXMuX2JpbmRCdWZmZXIoQi52ZXJ0ZXhCdWZmZXIseS5BUlJBWV9CVUZGRVIpLEEuZW5hYmxlQXR0cmliKEEuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyx5LkZMT0FULCExLDAsMCksdGhpcy5fYmluZEJ1ZmZlcihCLmluZGV4QnVmZmVyLHkuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLHRoaXMuX2JpbmRCdWZmZXIoQi51dkJ1ZmZlcix5LkFSUkFZX0JVRkZFUiksQS5lbmFibGVBdHRyaWIoQS5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLHkuRkxPQVQsITEsMCwwKSxBLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuY3VyRmlsbENvbG9yKTt0cnl7Zm9yKHZhciBEPTAsRT1udWxsLEY9ITEsRz10LnN0cmluZ1RvR2x5cGhzKGIpLEg9MDtIPEcubGVuZ3RoOysrSCl7dmFyIEk9R1tIXTtFJiYoRCs9dC5nZXRLZXJuaW5nVmFsdWUoRSxJKSk7dmFyIEo9dS5nZXRHbHlwaEluZm8oSSk7aWYoSi51R2x5cGhSZWN0KXt2YXIgSz1KLnJvd0luZm8sTD1KLmNvbEluZm87QS5zZXRVbmlmb3JtKFwidVNhbXBsZXJTdHJva2VzXCIsSi5zdHJva2VJbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlclJvd1N0cm9rZXNcIixLLmNlbGxJbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlclJvd3NcIixLLmRpbUltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVTYW1wbGVyQ29sU3Ryb2tlc1wiLEwuY2VsbEltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVTYW1wbGVyQ29sc1wiLEwuZGltSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidUdyaWRPZmZzZXRcIixKLnVHcmlkT2Zmc2V0KSxBLnNldFVuaWZvcm0oXCJ1R2x5cGhSZWN0XCIsSi51R2x5cGhSZWN0KSxBLnNldFVuaWZvcm0oXCJ1R2x5cGhPZmZzZXRcIixEKSxGP0EuYmluZFRleHR1cmVzKCk6KEY9ITAsQS5iaW5kU2hhZGVyKCkpLHkuZHJhd0VsZW1lbnRzKHkuVFJJQU5HTEVTLDYsdGhpcy5HTC5VTlNJR05FRF9TSE9SVCwwKX1EKz1JLmFkdmFuY2VXaWR0aCxFPUl9fWZpbmFsbHl7QS51bmJpbmRTaGFkZXIoKSx0aGlzLmN1ckZpbGxTaGFkZXI9cCx0aGlzLl9kb1N0cm9rZT1yLHRoaXMuZHJhd01vZGU9cyxhLnBvcCgpfXJldHVybiB0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsYX19fSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LlJlbmRlcmVyR0xcIjo3NCxcIi4vcDUuU2hhZGVyXCI6NzV9XX0se30sWzEzXSkoMTMpfSk7IiwiaW1wb3J0IHA1IGZyb20gJ3A1L2xpYi9wNS5taW4nO1xuaW1wb3J0IFRvbmUgZnJvbSAndG9uZSc7XG5cbmNvbnN0IHNrZXRjaCA9IChwKSA9PiB7XG4gICAgdmFyIHBoYXNlciA9IG5ldyBUb25lLlBoYXNlcih7XG4gICAgICAgIFwiZnJlcXVlbmN5XCI6IDAuNSxcbiAgICAgICAgXCJvY3RhdmVzXCI6IDAuNSxcbiAgICAgICAgXCJiYXNlRnJlcXVlbmN5XCI6IDE2MDBcbiAgICB9KS50b01hc3RlcigpO1xuXG4gICAgdmFyIGNob3J1cyA9IG5ldyBUb25lLkNob3J1cygwLjgsIDIuNSwgMC4yKS50b01hc3RlcigpO1xuICAgIFxuICAgIGNsYXNzIEhleGFnb24ge1xuICAgICAgY29uc3RydWN0b3Iobm90ZSwgeCwgeSwgcykge1xuICAgICAgICB0aGlzLm5vdGUgPSBub3RlO1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICB0aGlzLnMgPSBzO1xuICAgICAgICB0aGlzLmNhbnBsYXkgPSB0cnVlO1xuICAgICAgICB0aGlzLmZpbGxDb2xvciA9IDA7XG5cbiAgICAgICAgdGhpcy5mbSA9IG5ldyBUb25lLlBvbHlTeW50aCg4LCBUb25lLlN5bnRoLCB7XG4gICAgICAgIFwib3NjaWxsYXRvclwiOiB7XG4gICAgICAgICAgICBcInBhcnRpYWxzXCI6IFsxMDAsIDIwLCAzMCwgNF0sXG4gICAgICAgIH0sXG4gICAgICAgIFwiZW52ZWxvcGVcIjoge1xuICAgICAgICAgICAgYXR0YWNrOiAwLjMsXG4gICAgICAgICAgICBkZWNheTogMC42LFxuICAgICAgICAgICAgc3VzdGFpbjogNCxcbiAgICAgICAgICAgIHJlbGVhc2U6IDZcbiAgICAgICAgfSxcbiAgICAgIH0pLmNoYWluKGNob3J1cywgcGhhc2VyKTtcbiAgICAgICAgdGhpcy5mbS52b2x1bWUudmFsdWUgPSAtNDtcbiAgICAgIH1cblxuICAgICAgZHJhdygpIHtcbiAgICAgICAgcC5wdXNoKCk7XG4gICAgICAgIHAubm9TdHJva2UoKTtcbiAgICAgICAgcC50cmFuc2xhdGUodGhpcy54LHRoaXMueSwwKTtcblxuICAgICAgICBpZih0aGlzLm5vdGUgPT0gXCJDIzRcIikge1xuICAgICAgICAgIHAuYW1iaWVudE1hdGVyaWFsKCgyNTUvOSkgKiA1ICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYodGhpcy5ub3RlID09IFwiRyM0XCIgfHwgdGhpcy5ub3RlID09IFwiRyMzXCIpIHtcbiAgICAgICAgICBwLmFtYmllbnRNYXRlcmlhbCggKDI1NS85KSAqIDQpO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZih0aGlzLm5vdGUgPT0gXCJEIzVcIiB8fCB0aGlzLm5vdGUgPT0gXCJEIzRcIiB8fCB0aGlzLm5vdGUgPT0gXCJEIzNcIikge1xuICAgICAgICAgIHAuYW1iaWVudE1hdGVyaWFsKCAoMjU1LzkpICogNik7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmKHRoaXMubm90ZSA9PSBcIkEjNFwiIHx8IHRoaXMubm90ZSA9PSBcIkEjM1wiKSB7XG4gICAgICAgICAgcC5hbWJpZW50TWF0ZXJpYWwoICgyNTUvOSkgKiAzKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZih0aGlzLm5vdGUgPT0gXCJGNVwiIHx8IHRoaXMubm90ZSA9PSBcIkY0XCIgfHwgdGhpcy5ub3RlID09IFwiRjNcIikge1xuICAgICAgICAgIHAuYW1iaWVudE1hdGVyaWFsKCAoMjU1LzkpICogNyk7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmKHRoaXMubm90ZSA9PSBcIkM1XCIgfHwgdGhpcy5ub3RlID09IFwiQzRcIikge1xuICAgICAgICAgIHAuYW1iaWVudE1hdGVyaWFsKCAoMjU1LzkpICogMik7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmKHRoaXMubm90ZSA9PSBcIkc1XCIgfHwgdGhpcy5ub3RlID09IFwiRzRcIiB8fCB0aGlzLm5vdGUgPT0gXCJHM1wiKSB7XG4gICAgICAgICAgcC5hbWJpZW50TWF0ZXJpYWwoICgyNTUvOSkgKiA4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYodGhpcy5ub3RlID09IFwiRDVcIiB8fCB0aGlzLm5vdGUgPT0gXCJENFwiKSB7XG4gICAgICAgICAgcC5hbWJpZW50TWF0ZXJpYWwoICgyNTUvOSkgKiAxKTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYodGhpcy5ub3RlID09IFwiQTRcIikge1xuICAgICAgICAgIHAuYW1iaWVudE1hdGVyaWFsKCAoMjU1LzkpICogOSk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHAucHVzaCgpO1xuICAgICAgICBwLnRyYW5zbGF0ZSgwLDAsLXRoaXMucy8yKTtcbiAgICAgICAgcC5yb3RhdGVYKC1wLkhBTEZfUEkpO1xuICAgICAgICBwLmN5bGluZGVyKHRoaXMucyAqIDEuOCwgdGhpcy5zLzIsIDYpO1xuICAgICAgICBwLmZpbGwoMjU1LDAsMCx0aGlzLmZpbGxDb2xvcik7XG4gICAgICAgIHAuY3lsaW5kZXIodGhpcy5zICogMS45LCB0aGlzLnMvMS44LCA2KTtcbiAgICAgICAgcC5wb3AoKVxuICAgICAgICBwLnBvcCgpO1xuXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLT0xMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgeFZhbCA9IDA7XG4gICAgbGV0IHlWYWwgPSAwO1xuICAgIGxldCBwTW91c2VYID0gMDtcbiAgICBsZXQgcE1vdXNlWSA9IDA7XG4gICAgbGV0IGJhbGxYID0gMDtcbiAgICBsZXQgYmFsbFkgPSAwO1xuXG4gICAgbGV0IHRpbGVzID0gW107XG5cbiAgICBwLnNldHVwID0gKCkgPT4ge1xuICAgICAgICBsZXQgY2FudmFzID0gcC5jcmVhdGVDYW52YXMoODAwLCA4MDAsIHAuV0VCR0wpO1xuICAgIFxuICAgICAgICB0aWxlcy5wdXNoKCBuZXcgSGV4YWdvbihcIkMjNFwiLCAtMjAwLCAwLCAzMCkgKTtcbiAgICAgICAgdGlsZXMucHVzaCggbmV3IEhleGFnb24oXCJHIzRcIiwgLTE1MCwgLTEwMCwgMzApICk7XG4gICAgICAgIHRpbGVzLnB1c2goIG5ldyBIZXhhZ29uKFwiRyMzXCIsIC0xNTAsIDEwMCwgMzApICk7XG4gICAgICAgIHRpbGVzLnB1c2goIG5ldyBIZXhhZ29uKFwiRCM1XCIsIC0xMDAsIC0yMDAsIDMwKSApO1xuICAgICAgICB0aWxlcy5wdXNoKCBuZXcgSGV4YWdvbihcIkQjNFwiLCAtMTAwLCAwLCAzMCkgKTtcbiAgICAgICAgdGlsZXMucHVzaCggbmV3IEhleGFnb24oXCJEIzNcIiwgLTEwMCwgMjAwLCAzMCkgKTtcbiAgICAgICAgdGlsZXMucHVzaCggbmV3IEhleGFnb24oXCJBIzRcIiwgLTUwLCAtMTAwLCAzMCkgKTtcbiAgICAgICAgdGlsZXMucHVzaCggbmV3IEhleGFnb24oXCJBIzNcIiwgLTUwLCAxMDAsIDMwKSApO1xuICAgICAgICB0aWxlcy5wdXNoKCBuZXcgSGV4YWdvbihcIkY1XCIsIDAsIC0yMDAsIDMwKSApO1xuICAgICAgICB0aWxlcy5wdXNoKCBuZXcgSGV4YWdvbihcIkY0XCIsIDAsIDAsIDMwKSApO1xuICAgICAgICB0aWxlcy5wdXNoKCBuZXcgSGV4YWdvbihcIkYzXCIsIDAsIDIwMCwgMzApICk7XG4gICAgICAgIHRpbGVzLnB1c2goIG5ldyBIZXhhZ29uKFwiQzVcIiwgNTAsIC0xMDAsIDMwKSApO1xuICAgICAgICB0aWxlcy5wdXNoKCBuZXcgSGV4YWdvbihcIkM0XCIsIDUwLCAxMDAsIDMwKSApO1xuICAgICAgICB0aWxlcy5wdXNoKCBuZXcgSGV4YWdvbihcIkc1XCIsIDEwMCwgLTIwMCwgMzApICk7XG4gICAgICAgIHRpbGVzLnB1c2goIG5ldyBIZXhhZ29uKFwiRzRcIiwgMTAwLCAwLCAzMCkgKTtcbiAgICAgICAgdGlsZXMucHVzaCggbmV3IEhleGFnb24oXCJHM1wiLCAxMDAsIDIwMCwgMzApICk7XG4gICAgICAgIHRpbGVzLnB1c2goIG5ldyBIZXhhZ29uKFwiRDVcIiwgMTUwLCAtMTAwLCAzMCkgKTtcbiAgICAgICAgdGlsZXMucHVzaCggbmV3IEhleGFnb24oXCJENFwiLCAxNTAsIDEwMCwgMzApICk7XG4gICAgICAgIHRpbGVzLnB1c2goIG5ldyBIZXhhZ29uKFwiQTRcIiwgMjAwLCAwLCAzMCkgKTtcbiAgICB9XG5cbiAgICBsZXQgdHggPSAwO1xuICAgIGxldCB0eSA9IDEwMDAwO1xuICAgIGxldCBueCA9IDA7XG4gICAgbGV0IG55ID0gMDtcblxuICAgIHAuZHJhdyA9ICgpID0+IHtcbiAgICAgICAgLy9wLmNhbWVyYShwLmZyYW1lQ291bnQvNSAtIDQwMCwtMjAwLCAtNjAwLCAwLCAwLCAwLCAwLCAxLCAwKTtcbiAgICAgICAgcC5iYWNrZ3JvdW5kKDApO1xuICAgICAgICBwLnNtb290aCgpO1xuXG4gICAgICAgIHAucG9pbnRMaWdodCgxNTAsIDE1MCwgMTUwLCA1MDAsIDAsIDEwMCk7XG4gICAgICAgIHAuZGlyZWN0aW9uYWxMaWdodCgyNTUsMjU1LDI1NSwgMCwgMSwgLTEpO1xuICAgICAgICBwLmFtYmllbnRMaWdodCgyMDApO1xuXG4gICAgICAgIG54ID0gcC5tYXAocC5ub2lzZSh0eCksIDAsIDEsIHAud2lkdGgvMiAtIHAud2lkdGgvNiwgcC53aWR0aCAtIHAud2lkdGgvMyk7XG4gICAgICAgIG55ID0gcC5tYXAocC5ub2lzZSh0eSksIDAsIDEsIHAuaGVpZ2h0LCBwLmhlaWdodC8yKTtcblxuICAgICAgICAvLyBtb3VzZVxuICAgICAgICAvL3hWYWwgPSBwLm1hcChwLm1vdXNlWCwgMCwgcC53aWR0aCwtcC5QSS80LCBwLlBJLzQpO1xuICAgICAgICAvL3lWYWwgPSBwLm1hcChwLm1vdXNlWSwgMCwgcC53aWR0aCxwLlBJLzQsIC1wLlBJLzQpO1xuXG4gICAgICAgIC8vIG5vaXNlXG4gICAgICAgIHhWYWwgPSBwLm1hcChueCwgMCwgcC53aWR0aCwtcC5QSS80LCBwLlBJLzQpO1xuICAgICAgICB5VmFsID0gcC5tYXAobnksIDAsIHAuaGVpZ2h0LHAuUEkvNCwgLXAuUEkvNCk7XG4gICAgICAgIFxuICAgICAgICB0eCArPSAwLjAxO1xuICAgICAgICB0eSArPSAwLjAwNTtcbiAgICAgICAgXG4gICAgICAgIGlmKCAoYmFsbFggPiAtMTUwKSAmJiAoYmFsbFggPCAxNTApICkge1xuICAgICAgICAgIGJhbGxYICs9IHhWYWwgKiAyMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZihiYWxsWCA8PSAtMTUwKSB7XG4gICAgICAgICAgICBiYWxsWCA9IC0xNDk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGJhbGxYID49IDE1MCkge1xuICAgICAgICAgICAgYmFsbFggPSAxNDk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKCAoYmFsbFkgPiAtMTUwKSAmJiAoYmFsbFkgPCAxNTApICkge1xuICAgICAgICAgIGJhbGxZIC09ICh5VmFsK3AuUEkvOCkgKiAzMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZihiYWxsWSA8PSAtMTUwKSB7XG4gICAgICAgICAgICBiYWxsWSA9IC0xNDk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGJhbGxZID49IDE1MCkge1xuICAgICAgICAgICAgYmFsbFkgPSAxNDk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYmFsbFggPSBiYWxsWCArIHAuc2luKHAuZnJhbWVDb3VudC8zMCkgKiA0O1xuICAgICAgICBiYWxsWSA9IGJhbGxZICsgcC5jb3MocC5mcmFtZUNvdW50LzMwKSAqIDQ7XG4gICAgICAgIFxuICAgICAgICBcbiAgICAgICAgcC5wdXNoKCk7XG4gICAgICAgIHAucm90YXRlWChwLnJhZGlhbnMoODApKTtcbiAgICAgICAgcC5yb3RhdGVZKHhWYWwpO1xuICAgICAgICBwLnJvdGF0ZVgoeVZhbCk7XG5cbiAgICAgICAgZm9yKGxldCBpPTA7IGk8dGlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0aWxlc1tpXS5kcmF3KCk7XG4gICAgICAgICAgaWYocC5kaXN0KGJhbGxYLGJhbGxZLHRpbGVzW2ldLngsdGlsZXNbaV0ueSkgPCB0aWxlc1tpXS5zKjIpIHtcbiAgICAgICAgICAgIGlmKHRpbGVzW2ldLmNhblBsYXkpIHRpbGVzW2ldLmZtLnRyaWdnZXJBdHRhY2tSZWxlYXNlKHRpbGVzW2ldLm5vdGUsIFwiNjRuXCIpO1xuICAgICAgICAgICAgdGlsZXNbaV0uY2FuUGxheSA9IGZhbHNlO1xuICAgICAgICAgICAgdGlsZXNbaV0uZmlsbENvbG9yID0gMjAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aWxlc1tpXS5jYW5QbGF5ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwLnN0cm9rZSgyNTUsMjAwKTtcbiAgICAgICAgcC5saW5lKGJhbGxYLGJhbGxZLDIyMCxiYWxsWCxiYWxsWSwwKTtcbiAgICAgICAgcC5ub0ZpbGwoKTtcbiAgICAgICAgcC5zdHJva2UoMjU1LDEwMCk7XG4gICAgICAgIHAuZWxsaXBzZShiYWxsWCxiYWxsWSwxMCwxMCk7XG4gICAgICAgIHAuZWxsaXBzZShiYWxsWCxiYWxsWSwyMCwyMCk7XG4gICAgICAgIHAuZWxsaXBzZShiYWxsWCxiYWxsWSw0MCw0MCk7XG4gICAgICAgIFxuICAgICAgICBwLm5vU3Ryb2tlKCk7XG4gICAgICAgIHAuZmlsbCgyNTUsMjAwKTtcbiAgICAgICAgcC5wdXNoKCk7XG4gICAgICAgIHAudHJhbnNsYXRlKGJhbGxYLGJhbGxZLDIyMCk7XG4gICAgICAgIHAuc3BoZXJlKDE1KTtcbiAgICAgICAgXG4gICAgICAgIHAucG9wKCk7XG5cbiAgICAgICAgcC5wb3AoKTtcblxuICAgICAgICBwTW91c2VYID0gcC5tb3VzZVg7XG4gICAgICAgIHBNb3VzZVkgPSBwLm1vdXNlWTtcblxuICAgIH1cblxuICAgIHAua2V5UHJlc3NlZCA9ICgpID0+IHtcbiAgICAgICAgaWYocC5rZXkgPT0gJ20nKSB7XG4gICAgICAgICAgICBwLnNhdmUoRGF0ZS5ub3coKSArIFwiLmpwZ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IHNrZXRjaDtcbm5ldyBwNShza2V0Y2gpOyIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLCBldmFsKShcInRoaXNcIik7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file + */return function(e){t=e()}(function(){var t=function(){if(!(this instanceof t))throw new Error("constructor needs to be called with the 'new' keyword")};t.prototype.toString=function(){for(var e in t){var i=e[0].match(/^[A-Z]$/),r=t[e]===this.constructor;if(t.isFunction(t[e])&&i&&r)return e}return"Tone"},t.prototype.dispose=function(){return this},t.prototype.set=function(e,i,r){if(t.isObject(e))r=i;else if(t.isString(e)){var n={};n[e]=i,e=n}t:for(var o in e){i=e[o];var s=this;if(-1!==o.indexOf(".")){for(var a=o.split("."),h=0;hthis.memory){var r=this.length-this.memory;this._timeline.splice(0,r)}return this},t.Timeline.prototype.remove=function(t){var e=this._timeline.indexOf(t);return-1!==e&&this._timeline.splice(e,1),this},t.Timeline.prototype.get=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return-1!==r?this._timeline[r]:null},t.Timeline.prototype.peek=function(){return this._timeline[0]},t.Timeline.prototype.shift=function(){return this._timeline.shift()},t.Timeline.prototype.getAfter=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return r+10&&this._timeline[r-1][i]=0?this._timeline[n-1]:null},t.Timeline.prototype.cancel=function(t){if(this._timeline.length>1){var e=this._search(t);if(e>=0)if(this._timeline[e].time===t){for(var i=e;i>=0&&this._timeline[i].time===t;i--)e=i;this._timeline=this._timeline.slice(0,e)}else this._timeline=this._timeline.slice(0,e+1);else this._timeline=[]}else 1===this._timeline.length&&this._timeline[0].time>=t&&(this._timeline=[]);return this},t.Timeline.prototype.cancelBefore=function(t){var e=this._search(t);return e>=0&&(this._timeline=this._timeline.slice(e+1)),this},t.Timeline.prototype.previousEvent=function(t){var e=this._timeline.indexOf(t);return e>0?this._timeline[e-1]:null},t.Timeline.prototype._search=function(e,i){if(0===this._timeline.length)return-1;i=t.defaultArg(i,"time");var r=0,n=this._timeline.length,o=n;if(n>0&&this._timeline[n-1][i]<=e)return n-1;for(;re)return s;a[i]>e?o=s:r=s+1}return-1},t.Timeline.prototype._iterate=function(e,i,r){i=t.defaultArg(i,0),r=t.defaultArg(r,this._timeline.length-1),this._timeline.slice(i,r+1).forEach(function(t){e.call(this,t)}.bind(this))},t.Timeline.prototype.forEach=function(t){return this._iterate(t),this},t.Timeline.prototype.forEachBefore=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(e,0,i),this},t.Timeline.prototype.forEachAfter=function(t,e){var i=this._search(t);return this._iterate(e,i+1),this},t.Timeline.prototype.forEachBetween=function(t,e,i){var r=this._search(t),n=this._search(e);return-1!==r&&-1!==n?(this._timeline[r].time!==t&&(r+=1),this._timeline[n].time===e&&(n-=1),this._iterate(i,r,n)):-1===r&&this._iterate(i,0,n),this},t.Timeline.prototype.forEachFrom=function(t,e){for(var i=this._search(t);i>=0&&this._timeline[i].time>=t;)i--;return this._iterate(e,i+1),this},t.Timeline.prototype.forEachAtTime=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(function(i){i.time===t&&e.call(this,i)},0,i),this},t.Timeline.prototype.dispose=function(){return t.prototype.dispose.call(this),this._timeline=null,this},t.Timeline}),e(function(t){t.supported&&(!window.hasOwnProperty("OfflineAudioContext")&&window.hasOwnProperty("webkitOfflineAudioContext")&&(window.OfflineAudioContext=window.webkitOfflineAudioContext),new OfflineAudioContext(1,1,44100).startRendering()instanceof Promise||(OfflineAudioContext.prototype._native_startRendering=OfflineAudioContext.prototype.startRendering,OfflineAudioContext.prototype.startRendering=function(){return new Promise(function(t){this.oncomplete=function(e){t(e.renderedBuffer)},this._native_startRendering()}.bind(this))}))}),e(function(t){if(t.supported){!window.hasOwnProperty("AudioContext")&&window.hasOwnProperty("webkitAudioContext")&&(window.AudioContext=window.webkitAudioContext),AudioContext.prototype.close||(AudioContext.prototype.close=function(){return t.isFunction(this.suspend)&&this.suspend(),Promise.resolve()}),AudioContext.prototype.resume||(AudioContext.prototype.resume=function(){return Promise.resolve()}),!AudioContext.prototype.createGain&&AudioContext.prototype.createGainNode&&(AudioContext.prototype.createGain=AudioContext.prototype.createGainNode),!AudioContext.prototype.createDelay&&AudioContext.prototype.createDelayNode&&(AudioContext.prototype.createDelay=AudioContext.prototype.createDelayNode);var e=!1,i=new OfflineAudioContext(1,1,44100),r=new Uint32Array([1179011410,48,1163280727,544501094,16,131073,44100,176400,1048580,1635017060,8,0,0,0,0]).buffer;try{i.decodeAudioData(r)instanceof Promise&&(e=!0)}catch(t){e=!1}e||(AudioContext.prototype._native_decodeAudioData=AudioContext.prototype.decodeAudioData,AudioContext.prototype.decodeAudioData=function(t){return new Promise(function(e,i){this._native_decodeAudioData(t,e,i)}.bind(this))})}}),e(function(t){t.Context=function(){t.Emitter.call(this);var i=t.defaults(arguments,["context"],t.Context);if(!i.context&&(i.context=new window.AudioContext,!i.context))throw new Error("could not create AudioContext. Possibly too many AudioContexts running already.");for(var r in this._context=i.context,this._context)this._defineProperty(this._context,r);this._latencyHint=i.latencyHint,this._constants={},this.lookAhead=i.lookAhead,this._computedUpdateInterval=0,this._ticker=new e(this.emit.bind(this,"tick"),i.clockSource,i.updateInterval),this._timeouts=new t.Timeline,this._timeoutIds=0,this.on("tick",this._timeoutLoop.bind(this))},t.extend(t.Context,t.Emitter),t.Emitter.mixin(t.Context),t.Context.defaults={clockSource:"worker",latencyHint:"interactive",lookAhead:.1,updateInterval:.03},t.Context.prototype._defineProperty=function(e,i){t.isUndef(this[i])&&Object.defineProperty(this,i,{get:function(){return"function"==typeof e[i]?e[i].bind(e):e[i]},set:function(t){e[i]=t}})},t.Context.prototype.now=function(){return this._context.currentTime+this.lookAhead},t.Context.prototype.ready=function(){return new Promise(function(t){"running"===this._context.state?t():this._context.resume().then(function(){t()})}.bind(this))},t.Context.prototype.close=function(){return this._context.close().then(function(){t.Context.emit("close",this)}.bind(this))},t.Context.prototype.getConstant=function(t){if(this._constants[t])return this._constants[t];for(var e=this._context.createBuffer(1,128,this._context.sampleRate),i=e.getChannelData(0),r=0;r1&&(this.input=new Array(t)),1===e?this.output=this.context.createGain():e>1&&(this.output=new Array(e))},Object.defineProperty(t.AudioNode.prototype,"channelCount",{get:function(){return this.output.channelCount},set:function(t){return this.output.channelCount=t}}),Object.defineProperty(t.AudioNode.prototype,"channelCountMode",{get:function(){return this.output.channelCountMode},set:function(t){return this.output.channelCountMode=t}}),Object.defineProperty(t.AudioNode.prototype,"channelInterpretation",{get:function(){return this.output.channelInterpretation},set:function(t){return this.output.channelInterpretation=t}}),Object.defineProperty(t.AudioNode.prototype,"numberOfInputs",{get:function(){return this.input?t.isArray(this.input)?this.input.length:1:0}}),Object.defineProperty(t.AudioNode.prototype,"numberOfOutputs",{get:function(){return this.output?t.isArray(this.output)?this.output.length:1:0}}),t.AudioNode.prototype._onConnect=function(){},t.AudioNode.prototype.connect=function(e,i,r){return e._onConnect&&e._onConnect(this),t.isArray(this.output)?(i=t.defaultArg(i,0),this.output[i].connect(e,0,r)):this.output.connect(e,i,r),this},t.AudioNode.prototype.disconnect=function(e,i,r){t.isArray(this.output)?t.isNumber(e)?this.output[e].disconnect():(i=t.defaultArg(i,0),this.output[i].disconnect(e,0,r)):this.output.disconnect.apply(this.output,arguments)},t.AudioNode.prototype.chain=function(){for(var t=this,e=0;e3&&(r=parseFloat(parseFloat(r).toFixed(3))),[i,e,r].join(":")},t.Time.prototype.toTicks=function(){var t=this._beatsToUnits(1),e=this.valueOf()/t;return Math.round(e*this._getPPQ())},t.Time.prototype.toSeconds=function(){return this.valueOf()},t.Time.prototype.toMidi=function(){return t.Frequency.ftom(this.toFrequency())},t.Time}),e(function(t){return t.TransportTime=function(e,i){if(!(this instanceof t.TransportTime))return new t.TransportTime(e,i);t.Time.call(this,e,i)},t.extend(t.TransportTime,t.Time),t.TransportTime.prototype._now=function(){return t.Transport.seconds},t.TransportTime}),e(function(t){return t.Type={Default:"number",Time:"time",Frequency:"frequency",TransportTime:"transportTime",Ticks:"ticks",NormalRange:"normalRange",AudioRange:"audioRange",Decibels:"db",Interval:"interval",BPM:"bpm",Positive:"positive",Gain:"gain",Cents:"cents",Degrees:"degrees",MIDI:"midi",BarsBeatsSixteenths:"barsBeatsSixteenths",Samples:"samples",Hertz:"hertz",Note:"note",Milliseconds:"milliseconds",Seconds:"seconds",Notation:"notation"},t.prototype.toSeconds=function(e){return t.isNumber(e)?e:t.isUndef(e)?this.now():t.isString(e)?new t.Time(e).toSeconds():e instanceof t.TimeBase?e.toSeconds():void 0},t.prototype.toFrequency=function(e){return t.isNumber(e)?e:t.isString(e)||t.isUndef(e)?new t.Frequency(e).valueOf():e instanceof t.TimeBase?e.toFrequency():void 0},t.prototype.toTicks=function(e){return t.isNumber(e)||t.isString(e)?new t.TransportTime(e).toTicks():t.isUndef(e)?t.Transport.ticks:e instanceof t.TimeBase?e.toTicks():void 0},t}),e(function(t){return t.Param=function(){var e=t.defaults(arguments,["param","units","convert"],t.Param);t.AudioNode.call(this),this._param=this.input=e.param,this.units=e.units,this.convert=e.convert,this.overridden=!1,this._events=new t.Timeline(1e3),t.isDefined(e.value)&&this._param&&(this.value=e.value)},t.extend(t.Param,t.AudioNode),t.Param.defaults={units:t.Type.Default,convert:!0,param:void 0},Object.defineProperty(t.Param.prototype,"value",{get:function(){var t=this.now();return this._toUnits(this.getValueAtTime(t))},set:function(t){this._initialValue=this._fromUnits(t),this.cancelScheduledValues(this.context.currentTime),this.setValueAtTime(t,this.context.currentTime)}}),Object.defineProperty(t.Param.prototype,"minValue",{get:function(){return this.units===t.Type.Time||this.units===t.Type.Frequency||this.units===t.Type.NormalRange||this.units===t.Type.Positive||this.units===t.Type.BPM?0:this.units===t.Type.AudioRange?-1:this.units===t.Type.Decibels?-1/0:this._param.minValue}}),Object.defineProperty(t.Param.prototype,"maxValue",{get:function(){return this.units===t.Type.NormalRange||this.units===t.Type.AudioRange?1:this._param.maxValue}}),t.Param.prototype._fromUnits=function(e){if(!this.convert&&!t.isUndef(this.convert)||this.overridden)return e;switch(this.units){case t.Type.Time:return this.toSeconds(e);case t.Type.Frequency:return this.toFrequency(e);case t.Type.Decibels:return t.dbToGain(e);case t.Type.NormalRange:return Math.min(Math.max(e,0),1);case t.Type.AudioRange:return Math.min(Math.max(e,-1),1);case t.Type.Positive:return Math.max(e,0);default:return e}},t.Param.prototype._toUnits=function(e){if(!this.convert&&!t.isUndef(this.convert))return e;switch(this.units){case t.Type.Decibels:return t.gainToDb(e);default:return e}},t.Param.prototype._minOutput=1e-5,t.Param.AutomationType={Linear:"linearRampToValueAtTime",Exponential:"exponentialRampToValueAtTime",Target:"setTargetAtTime",SetValue:"setValueAtTime"},t.Param.prototype.setValueAtTime=function(e,i){return i=this.toSeconds(i),e=this._fromUnits(e),this._events.add({type:t.Param.AutomationType.SetValue,value:e,time:i}),this._param.setValueAtTime(e,i),this},t.Param.prototype.getValueAtTime=function(e){e=this.toSeconds(e);var i=this._events.getAfter(e),r=this._events.get(e),n=t.defaultArg(this._initialValue,this._param.defaultValue),o=n;if(null===r)o=n;else if(r.type===t.Param.AutomationType.Target){var s,a=this._events.getBefore(r.time);s=null===a?n:a.value,o=this._exponentialApproach(r.time,s,r.value,r.constant,e)}else o=null===i?r.value:i.type===t.Param.AutomationType.Linear?this._linearInterpolate(r.time,r.value,i.time,i.value,e):i.type===t.Param.AutomationType.Exponential?this._exponentialInterpolate(r.time,r.value,i.time,i.value,e):r.value;return o},t.Param.prototype.setRampPoint=function(t){t=this.toSeconds(t);var e=this.getValueAtTime(t);return this.cancelAndHoldAtTime(t),0===e&&(e=this._minOutput),this.setValueAtTime(this._toUnits(e),t),this},t.Param.prototype.linearRampToValueAtTime=function(e,i){return e=this._fromUnits(e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Linear,value:e,time:i}),this._param.linearRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampToValueAtTime=function(e,i){return e=this._fromUnits(e),e=Math.max(this._minOutput,e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Exponential,time:i,value:e}),this._param.exponentialRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.linearRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.linearRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.targetRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialApproachValueAtTime(t,i,e),this},t.Param.prototype.exponentialApproachValueAtTime=function(t,e,i){var r=Math.log(this.toSeconds(i)+1)/Math.log(200);return e=this.toSeconds(e),this.setTargetAtTime(t,e,r)},t.Param.prototype.setTargetAtTime=function(e,i,r){if(e=this._fromUnits(e),r<=0)throw new Error("timeConstant must be greater than 0");return i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Target,value:e,time:i,constant:r}),this._param.setTargetAtTime(e,i,r),this},t.Param.prototype.setValueCurveAtTime=function(e,i,r,n){n=t.defaultArg(n,1),r=this.toSeconds(r),i=this.toSeconds(i),this.setValueAtTime(e[0]*n,i);for(var o=r/(e.length-1),s=1;s=0;)this.emit("tick"),this._currentTime+=this.blockTime;return this._context.startRendering()},t.OfflineContext.prototype.close=function(){return this._context=null,Promise.resolve()},t.OfflineContext}),e(function(t){if(t.supported){var e=navigator.userAgent.toLowerCase();e.includes("safari")&&!e.includes("chrome")&&e.includes("mobile")&&(t.OfflineContext.prototype.createBufferSource=function(){var t=this._context.createBufferSource(),e=t.start;return t.start=function(i){this.setTimeout(function(){e.call(t,i)}.bind(this),0)}.bind(this),t})}}),e(function(t){return t.Gain=function(){var e=t.defaults(arguments,["gain","units"],t.Gain);t.AudioNode.call(this),this.input=this.output=this._gainNode=this.context.createGain(),this.gain=new t.Param({param:this._gainNode.gain,units:e.units,value:e.gain,convert:e.convert}),this._readOnly("gain")},t.extend(t.Gain,t.AudioNode),t.Gain.defaults={gain:1,convert:!0},t.Gain.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._gainNode.disconnect(),this._gainNode=null,this._writable("gain"),this.gain.dispose(),this.gain=null},t.Gain}),e(function(t){if(t.supported&&!AudioContext.prototype.createConstantSource){var e=function(t){this.context=t;for(var e=t.createBuffer(1,128,t.sampleRate),i=e.getChannelData(0),r=0;r0&&(n=(1-s)/(1/n)),"linear"===this._attackCurve)this._sig.linearRampTo(i,n,e);else if("exponential"===this._attackCurve)this._sig.targetRampTo(i,n,e);else if(n>0){this._sig.cancelAndHoldAtTime(e);var a=this._attackCurve;if(n0){var r=this.toSeconds(this.release);if("linear"===this._releaseCurve)this._sig.linearRampTo(0,r,e);else if("exponential"===this._releaseCurve)this._sig.targetRampTo(0,r,e);else{var n=this._releaseCurve;t.isArray(n)&&(this._sig.cancelAndHoldAtTime(e),this._sig.setValueCurveAtTime(n,e,r,i))}}return this},t.Envelope.prototype.getValueAtTime=function(t){return this._sig.getValueAtTime(t)},t.Envelope.prototype.triggerAttackRelease=function(t,e,i){return e=this.toSeconds(e),this.triggerAttack(e,i),this.triggerRelease(e+this.toSeconds(t)),this},t.Envelope.prototype.cancel=function(t){return this._sig.cancelScheduledValues(t),this},t.Envelope.prototype.connect=t.SignalBase.prototype.connect,function(){var e,i,r=[];for(e=0;e<128;e++)r[e]=Math.sin(e/127*(Math.PI/2));var n=[];for(e=0;e<127;e++){i=e/127;var o=Math.sin(i*(2*Math.PI)*6.4-Math.PI/2)+1;n[e]=o/10+.83*i}n[127]=1;var s=[];for(e=0;e<128;e++)s[e]=Math.ceil(e/127*5)/5;var a=[];for(e=0;e<128;e++)i=e/127,a[e]=.5*(1-Math.cos(Math.PI*i));var h=[];for(e=0;e<128;e++){i=e/127;var l=4*Math.pow(i,3)+.2,u=Math.cos(l*Math.PI*2*i);h[e]=Math.abs(u*(1-i))}function c(t){for(var e=new Array(t.length),i=0;i0?a:(-n-s)/o)+i.time}return i?0===i.value?1/0:i.time+(e-i.ticks)/i.value:e/this._initialValue},t.TickSignal.prototype.ticksToTime=function(e,i){return i=this.toSeconds(i),new t.Time(this.getDurationOfTicks(e,i))},t.TickSignal.prototype.timeToTicks=function(e,i){i=this.toSeconds(i),e=this.toSeconds(e);var r=this.getTicksAtTime(i),n=this.getTicksAtTime(i+e);return new t.Ticks(n-r)},t.TickSignal}),e(function(t){return t.TimelineState=function(e){t.Timeline.call(this),this._initial=e},t.extend(t.TimelineState,t.Timeline),t.TimelineState.prototype.getValueAtTime=function(t){var e=this.get(t);return null!==e?e.state:this._initial},t.TimelineState.prototype.setStateAtTime=function(t,e){return this.add({state:t,time:e}),this},t.TimelineState.prototype.getLastState=function(t,e){e=this.toSeconds(e);for(var i=this._search(e);i>=0;i--){var r=this._timeline[i];if(r.state===t)return r}},t.TimelineState.prototype.getNextState=function(t,e){e=this.toSeconds(e);var i=this._search(e);if(-1!==i)for(var r=i;r0&&(this._tickOffset.cancel(i.time),this._state.cancel(i.time))}return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this.setTicksAtTime(0,e),this},t.TickSource.prototype.pause=function(e){return e=this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started&&this._state.setStateAtTime(t.State.Paused,e),this},t.TickSource.prototype.cancel=function(t){return t=this.toSeconds(t),this._state.cancel(t),this._tickOffset.cancel(t),this},t.TickSource.prototype.getTicksAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.ticks,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=this.frequency.getTicksAtTime(e.time)-this.frequency.getTicksAtTime(i)),n=e}.bind(this)),this._state.remove(r),o},Object.defineProperty(t.TickSource.prototype,"ticks",{get:function(){return this.getTicksAtTime(this.now())},set:function(t){this.setTicksAtTime(t,this.now())}}),Object.defineProperty(t.TickSource.prototype,"seconds",{get:function(){return this.getSecondsAtTime(this.now())},set:function(t){var e=this.now(),i=this.frequency.timeToTicks(t,e);this.setTicksAtTime(i,e)}}),t.TickSource.prototype.getSecondsAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.seconds,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=e.time-i),n=e}.bind(this)),this._state.remove(r),o},t.TickSource.prototype.setTicksAtTime=function(t,e){return e=this.toSeconds(e),this._tickOffset.cancel(e),this._tickOffset.add({time:e,ticks:t,seconds:this.frequency.getDurationOfTicks(t,e)}),this},t.TickSource.prototype.getStateAtTime=function(t){return t=this.toSeconds(t),this._state.getValueAtTime(t)},t.TickSource.prototype.getTimeOfTick=function(e,i){i=t.defaultArg(i,this.now());var r=this._tickOffset.get(i),n=this._state.get(i),o=Math.max(r.time,n.time),s=this.frequency.getTicksAtTime(o)+e-r.ticks;return this.frequency.getTimeOfTick(s)},t.TickSource.prototype.forEachTickBetween=function(e,i,r){var n=this._state.get(e);if(this._state.forEachBetween(e,i,function(i){n.state===t.State.Started&&i.state!==t.State.Started&&this.forEachTickBetween(Math.max(n.time,e),i.time-this.sampleTime,r),n=i}.bind(this)),e=Math.max(n.time,e),n.state===t.State.Started&&this._state){var o=this.frequency.getTicksAtTime(e),s=(o-this.frequency.getTicksAtTime(n.time))%1;0!==s&&(s=1-s);for(var a=this.frequency.getTimeOfTick(o+s),h=null;a0)if(null===t.left.right)(e=t.left).right=t.right,i=e;else{for(e=t.left.right;null!==e.right;)e=e.right;e.parent.right=e.left,i=e.parent,e.left=t.left,e.right=t.right}else if(null===t.right.left)(e=t.right).left=t.left,i=e;else{for(e=t.right.left;null!==e.left;)e=e.left;e.parent=e.parent,e.parent.left=e.right,i=e.parent,e.left=t.left,e.right=t.right}null!==t.parent?t.isLeftChild()?t.parent.left=e:t.parent.right=e:this._setRoot(e),this._rebalance(i)}t.dispose()},t.IntervalTimeline.prototype._rotateLeft=function(t){var e=t.parent,i=t.isLeftChild(),r=t.right;t.right=r.left,r.left=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rotateRight=function(t){var e=t.parent,i=t.isLeftChild(),r=t.left;t.left=r.right,r.right=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rebalance=function(t){var e=t.getBalance();e>1?t.left.getBalance()<0?this._rotateLeft(t.left):this._rotateRight(t):e<-1&&(t.right.getBalance()>0?this._rotateRight(t.right):this._rotateLeft(t))},t.IntervalTimeline.prototype.get=function(t){if(null!==this._root){var e=[];if(this._root.search(t,e),e.length>0){for(var i=e[0],r=1;ri.low&&(i=e[r]);return i.event}}return null},t.IntervalTimeline.prototype.forEach=function(t){if(null!==this._root){var e=[];this._root.traverse(function(t){e.push(t)});for(var i=0;i=0;r--){var n=i[r].event;n&&e(n)}}return this},t.IntervalTimeline.prototype.forEachFrom=function(t,e){if(null!==this._root){var i=[];this._root.searchAfter(t,i);for(var r=i.length-1;r>=0;r--)e(i[r].event)}return this},t.IntervalTimeline.prototype.dispose=function(){var t=[];null!==this._root&&this._root.traverse(function(e){t.push(e)});for(var e=0;ethis.max||(null!==this.left&&this.left.search(t,e),this.low<=t&&this.high>t&&e.push(this),this.low>t||null!==this.right&&this.right.search(t,e))},e.prototype.searchAfter=function(t,e){this.low>=t&&(e.push(this),null!==this.left&&this.left.searchAfter(t,e)),null!==this.right&&this.right.searchAfter(t,e)},e.prototype.traverse=function(t){t(this),null!==this.left&&this.left.traverse(t),null!==this.right&&this.right.traverse(t)},e.prototype.updateHeight=function(){null!==this.left&&null!==this.right?this.height=Math.max(this.left.height,this.right.height)+1:null!==this.right?this.height=this.right.height+1:null!==this.left?this.height=this.left.height+1:this.height=0},e.prototype.updateMax=function(){this.max=this.high,null!==this.left&&(this.max=Math.max(this.max,this.left.max)),null!==this.right&&(this.max=Math.max(this.max,this.right.max))},e.prototype.getBalance=function(){var t=0;return null!==this.left&&null!==this.right?t=this.left.height-this.right.height:null!==this.left?t=this.left.height+1:null!==this.right&&(t=-(this.right.height+1)),t},e.prototype.isLeftChild=function(){return null!==this.parent&&this.parent.left===this},Object.defineProperty(e.prototype,"left",{get:function(){return this._left},set:function(t){this._left=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),Object.defineProperty(e.prototype,"right",{get:function(){return this._right},set:function(t){this._right=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),e.prototype.dispose=function(){this.parent=null,this._left=null,this._right=null,this.event=null},t.IntervalTimeline}),e(function(t){return t.Ticks=function(e,i){if(!(this instanceof t.Ticks))return new t.Ticks(e,i);t.TransportTime.call(this,e,i)},t.extend(t.Ticks,t.TransportTime),t.Ticks.prototype._defaultUnits="i",t.Ticks.prototype._now=function(){return t.Transport.ticks},t.Ticks.prototype._beatsToUnits=function(t){return this._getPPQ()*t},t.Ticks.prototype._secondsToUnits=function(t){return t/(60/this._getBpm())*this._getPPQ()},t.Ticks.prototype._ticksToUnits=function(t){return t},t.Ticks.prototype.toTicks=function(){return this.valueOf()},t.Ticks.prototype.toSeconds=function(){return this.valueOf()/this._getPPQ()*(60/this._getBpm())},t.Ticks}),e(function(t){return t.TransportEvent=function(e,i){i=t.defaultArg(i,t.TransportEvent.defaults),t.call(this),this.Transport=e,this.id=t.TransportEvent._eventId++,this.time=t.Ticks(i.time),this.callback=i.callback,this._once=i.once},t.extend(t.TransportEvent),t.TransportEvent.defaults={once:!1,callback:t.noOp},t.TransportEvent._eventId=0,t.TransportEvent.prototype.invoke=function(t){this.callback&&(this.callback(t),this._once&&this.Transport&&this.Transport.clear(this.id))},t.TransportEvent.prototype.dispose=function(){return t.prototype.dispose.call(this),this.Transport=null,this.callback=null,this.time=null,this},t.TransportEvent}),e(function(t){return t.TransportRepeatEvent=function(e,i){t.TransportEvent.call(this,e,i),i=t.defaultArg(i,t.TransportRepeatEvent.defaults),this.duration=t.Ticks(i.duration),this._interval=t.Ticks(i.interval),this._currentId=-1,this._nextId=-1,this._nextTick=this.time,this._boundRestart=this._restart.bind(this),this.Transport.on("start loopStart",this._boundRestart),this._restart()},t.extend(t.TransportRepeatEvent,t.TransportEvent),t.TransportRepeatEvent.defaults={duration:1/0,interval:1},t.TransportRepeatEvent.prototype.invoke=function(e){this._createEvents(e),t.TransportEvent.prototype.invoke.call(this,e)},t.TransportRepeatEvent.prototype._createEvents=function(e){var i=this.Transport.getTicksAtTime(e);i>=this.time&&i>=this._nextTick&&this._nextTick+this._intervalthis.time&&(this._nextTick=this.time+Math.ceil((i-this.time)/this._interval)*this._interval),this._currentId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick)),this._nextTick+=this._interval,this._nextId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick))},t.TransportRepeatEvent.prototype.dispose=function(){return this.Transport.clear(this._currentId),this.Transport.clear(this._nextId),this.Transport.off("start loopStart",this._boundRestart),this._boundCreateEvents=null,t.TransportEvent.prototype.dispose.call(this),this.duration=null,this._interval=null,this},t.TransportRepeatEvent}),e(function(t){t.Transport=function(){t.Emitter.call(this),t.getContext(function(){this.loop=!1,this._loopStart=0,this._loopEnd=0,this._ppq=e.defaults.PPQ,this._clock=new t.Clock({callback:this._processTick.bind(this),frequency:0}),this._bindClockEvents(),this.bpm=this._clock.frequency,this.bpm._toUnits=this._toUnits.bind(this),this.bpm._fromUnits=this._fromUnits.bind(this),this.bpm.units=t.Type.BPM,this.bpm.value=e.defaults.bpm,this._readOnly("bpm"),this._timeSignature=e.defaults.timeSignature,this._scheduledEvents={},this._timeline=new t.Timeline,this._repeatedEvents=new t.IntervalTimeline,this._syncedSignals=[],this._swingTicks=e.defaults.PPQ/2,this._swingAmount=0}.bind(this))},t.extend(t.Transport,t.Emitter),t.Transport.defaults={bpm:120,swing:0,swingSubdivision:"8n",timeSignature:4,loopStart:0,loopEnd:"4m",PPQ:192},t.Transport.prototype._processTick=function(e,i){if(this._swingAmount>0&&i%this._ppq!=0&&i%(2*this._swingTicks)!=0){var r=i%(2*this._swingTicks)/(2*this._swingTicks),n=Math.sin(r*Math.PI)*this._swingAmount;e+=t.Ticks(2*this._swingTicks/3).toSeconds()*n}this.loop&&i>=this._loopEnd&&(this.emit("loopEnd",e),this._clock.setTicksAtTime(this._loopStart,e),i=this._loopStart,this.emit("loopStart",e,this._clock.getSecondsAtTime(e)),this.emit("loop",e)),this._timeline.forEachAtTime(i,function(t){t.invoke(e)})},t.Transport.prototype.schedule=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e});return this._addEvent(r,this._timeline)},t.Transport.prototype.scheduleRepeat=function(e,i,r,n){var o=new t.TransportRepeatEvent(this,{callback:e,interval:t.Time(i),time:t.TransportTime(r),duration:t.Time(t.defaultArg(n,1/0))});return this._addEvent(o,this._repeatedEvents)},t.Transport.prototype.scheduleOnce=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e,once:!0});return this._addEvent(r,this._timeline)},t.Transport.prototype.clear=function(t){if(this._scheduledEvents.hasOwnProperty(t)){var e=this._scheduledEvents[t.toString()];e.timeline.remove(e.event),e.event.dispose(),delete this._scheduledEvents[t.toString()]}return this},t.Transport.prototype._addEvent=function(t,e){return this._scheduledEvents[t.id.toString()]={event:t,timeline:e},e.add(t),t.id},t.Transport.prototype.cancel=function(e){return e=t.defaultArg(e,0),e=this.toTicks(e),this._timeline.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this._repeatedEvents.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this},t.Transport.prototype._bindClockEvents=function(){this._clock.on("start",function(e,i){i=t.Ticks(i).toSeconds(),this.emit("start",e,i)}.bind(this)),this._clock.on("stop",function(t){this.emit("stop",t)}.bind(this)),this._clock.on("pause",function(t){this.emit("pause",t)}.bind(this))},Object.defineProperty(t.Transport.prototype,"state",{get:function(){return this._clock.getStateAtTime(this.now())}}),t.Transport.prototype.start=function(e,i){return t.isDefined(i)&&(i=this.toTicks(i)),this._clock.start(e,i),this},t.Transport.prototype.stop=function(t){return this._clock.stop(t),this},t.Transport.prototype.pause=function(t){return this._clock.pause(t),this},t.Transport.prototype.toggle=function(e){return e=this.toSeconds(e),this._clock.getStateAtTime(e)!==t.State.Started?this.start(e):this.stop(e),this},Object.defineProperty(t.Transport.prototype,"timeSignature",{get:function(){return this._timeSignature},set:function(e){t.isArray(e)&&(e=e[0]/e[1]*4),this._timeSignature=e}}),Object.defineProperty(t.Transport.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t)}}),t.Transport.prototype.setLoopPoints=function(t,e){return this.loopStart=t,this.loopEnd=e,this},Object.defineProperty(t.Transport.prototype,"swing",{get:function(){return this._swingAmount},set:function(t){this._swingAmount=t}}),Object.defineProperty(t.Transport.prototype,"swingSubdivision",{get:function(){return t.Ticks(this._swingTicks).toNotation()},set:function(t){this._swingTicks=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"position",{get:function(){var e=this.now(),i=this._clock.getTicksAtTime(e);return t.Ticks(i).toBarsBeatsSixteenths()},set:function(t){var e=this.toTicks(t);this.ticks=e}}),Object.defineProperty(t.Transport.prototype,"seconds",{get:function(){return this._clock.seconds},set:function(t){var e=this.now(),i=this.bpm.timeToTicks(t,e);this.ticks=i}}),Object.defineProperty(t.Transport.prototype,"progress",{get:function(){if(this.loop){var t=this.now();return(this._clock.getTicksAtTime(t)-this._loopStart)/(this._loopEnd-this._loopStart)}return 0}}),Object.defineProperty(t.Transport.prototype,"ticks",{get:function(){return this._clock.ticks},set:function(e){if(this._clock.ticks!==e){var i=this.now();this.state===t.State.Started?(this.emit("stop",i),this._clock.setTicksAtTime(e,i),this.emit("start",i,this.seconds)):this._clock.setTicksAtTime(e,i)}}}),t.Transport.prototype.getTicksAtTime=function(t){return Math.round(this._clock.getTicksAtTime(t))},t.Transport.prototype.getSecondsAtTime=function(t){return this._clock.getSecondsAtTime(t)},Object.defineProperty(t.Transport.prototype,"PPQ",{get:function(){return this._ppq},set:function(t){var e=this.bpm.value;this._ppq=t,this.bpm.value=e}}),t.Transport.prototype._fromUnits=function(t){return 1/(60/t/this.PPQ)},t.Transport.prototype._toUnits=function(t){return t/this.PPQ*60},t.Transport.prototype.nextSubdivision=function(e){if(e=this.toTicks(e),this.state!==t.State.Started)return 0;var i=this.now(),r=e-this.getTicksAtTime(i)%e;return this._clock.nextTickTime(r,i)},t.Transport.prototype.syncSignal=function(e,i){if(!i){var r=this.now();i=0!==e.getValueAtTime(r)?e.getValueAtTime(r)/this.bpm.getValueAtTime(r):0}var n=new t.Gain(i);return this.bpm.chain(n,e._param),this._syncedSignals.push({ratio:n,signal:e,initial:e.value}),e.value=0,this},t.Transport.prototype.unsyncSignal=function(t){for(var e=this._syncedSignals.length-1;e>=0;e--){var i=this._syncedSignals[e];i.signal===t&&(i.ratio.dispose(),i.signal.value=i.initial,this._syncedSignals.splice(e,1))}return this},t.Transport.prototype.dispose=function(){return t.Emitter.prototype.dispose.call(this),this._clock.dispose(),this._clock=null,this._writable("bpm"),this.bpm=null,this._timeline.dispose(),this._timeline=null,this._repeatedEvents.dispose(),this._repeatedEvents=null,this};var e=t.Transport;return t.Transport=new e,t.Context.on("init",function(i){i.Transport instanceof e?t.Transport=i.Transport:t.Transport=new e,i.Transport=t.Transport}),t.Context.on("close",function(t){t.Transport instanceof e&&t.Transport.dispose()}),t.Transport}),e(function(t){return t.Volume=function(){var e=t.defaults(arguments,["volume"],t.Volume);t.AudioNode.call(this),this.output=this.input=new t.Gain(e.volume,t.Type.Decibels),this._unmutedVolume=e.volume,this.volume=this.output.gain,this._readOnly("volume"),this.mute=e.mute},t.extend(t.Volume,t.AudioNode),t.Volume.defaults={volume:0,mute:!1},Object.defineProperty(t.Volume.prototype,"mute",{get:function(){return this.volume.value===-1/0},set:function(t){!this.mute&&t?(this._unmutedVolume=this.volume.value,this.volume.value=-1/0):this.mute&&!t&&(this.volume.value=this._unmutedVolume)}}),t.Volume.prototype.dispose=function(){return this.input.dispose(),t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this.volume.dispose(),this.volume=null,this},t.Volume}),e(function(t){t.Master=function(){t.AudioNode.call(this),t.getContext(function(){this.createInsOuts(1,0),this._volume=this.output=new t.Volume,this.volume=this._volume.volume,this._readOnly("volume"),this.input.chain(this.output,this.context.destination)}.bind(this))},t.extend(t.Master,t.AudioNode),t.Master.defaults={volume:0,mute:!1},Object.defineProperty(t.Master.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Master.prototype.chain=function(){this.input.disconnect(),this.input.chain.apply(this.input,arguments),arguments[arguments.length-1].connect(this.output)},t.Master.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null},t.AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this},window.AudioNode&&(AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this});var e=t.Master;return t.Master=new e,t.Context.on("init",function(i){i.Master instanceof e?t.Master=i.Master:t.Master=new e,i.Master=t.Master}),t.Context.on("close",function(t){t.Master instanceof e&&t.Master.dispose()}),t.Master}),e(function(t){return t.Source=function(e){e=t.defaultArg(e,t.Source.defaults),t.AudioNode.call(this),this._volume=this.output=new t.Volume(e.volume),this.volume=this._volume.volume,this._readOnly("volume"),this._state=new t.TimelineState(t.State.Stopped),this._state.memory=100,this._synced=!1,this._scheduled=[],this._volume.output.output.channelCount=2,this._volume.output.output.channelCountMode="explicit",this.mute=e.mute},t.extend(t.Source,t.AudioNode),t.Source.defaults={volume:0,mute:!1},Object.defineProperty(t.Source.prototype,"state",{get:function(){return this._synced?t.Transport.state===t.State.Started?this._state.getValueAtTime(t.Transport.seconds):t.State.Stopped:this._state.getValueAtTime(this.now())}}),Object.defineProperty(t.Source.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Source.prototype._start=t.noOp,t.Source.prototype.restart=t.noOp,t.Source.prototype._stop=t.noOp,t.Source.prototype.start=function(e,i,r){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started)this._state.cancel(e),this._state.setStateAtTime(t.State.Started,e),this.restart(e,i,r);else if(this._state.setStateAtTime(t.State.Started,e),this._synced){var n=this._state.get(e);n.offset=t.defaultArg(i,0),n.duration=r;var o=t.Transport.schedule(function(t){this._start(t,i,r)}.bind(this),e);this._scheduled.push(o),t.Transport.state===t.State.Started&&this._syncedStart(this.now(),t.Transport.seconds)}else this._start.apply(this,arguments);return this},t.Source.prototype.stop=function(e){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._synced){var i=t.Transport.schedule(this._stop.bind(this),e);this._scheduled.push(i)}else this._stop.apply(this,arguments);return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this},t.Source.prototype.sync=function(){return this._synced=!0,this._syncedStart=function(e,i){if(i>0){var r=this._state.get(i);if(r&&r.state===t.State.Started&&r.time!==i){var n,o=i-this.toSeconds(r.time);r.duration&&(n=this.toSeconds(r.duration)-o),this._start(e,this.toSeconds(r.offset)+o,n)}}}.bind(this),this._syncedStop=function(e){var i=t.Transport.getSecondsAtTime(Math.max(e-this.sampleTime,0));this._state.getValueAtTime(i)===t.State.Started&&this._stop(e)}.bind(this),t.Transport.on("start loopStart",this._syncedStart),t.Transport.on("stop pause loopEnd",this._syncedStop),this},t.Source.prototype.unsync=function(){this._synced&&(t.Transport.off("stop pause loopEnd",this._syncedStop),t.Transport.off("start loopStart",this._syncedStart)),this._synced=!1;for(var e=0;e0}}),Object.defineProperty(t.Buffer.prototype,"duration",{get:function(){return this._buffer?this._buffer.duration:0}}),Object.defineProperty(t.Buffer.prototype,"length",{get:function(){return this._buffer?this._buffer.length:0}}),Object.defineProperty(t.Buffer.prototype,"numberOfChannels",{get:function(){return this._buffer?this._buffer.numberOfChannels:0}}),t.Buffer.prototype.fromArray=function(t){var e=t[0].length>0,i=e?t.length:1,r=e?t[0].length:t.length,n=this.context.createBuffer(i,r,this.context.sampleRate);e||1!==i||(t=[t]);for(var o=0;o=this._startTime&&(-1===this._stopTime||e<=this._stopTime)?t.State.Started:t.State.Stopped},t.OscillatorNode.prototype.start=function(t){if(-1!==this._startTime)throw new Error("cannot call OscillatorNode.start more than once");this._startTime=this.toSeconds(t),this._oscillator.start(this._startTime);var e=this.context.currentTime;return this._gainNode.gain.cancelScheduledValues(e),this._gainNode.gain.setValueAtTime(0,e),this._gainNode.gain.setValueAtTime(1,this._startTime),this},t.OscillatorNode.prototype.setPeriodicWave=function(t){return this._oscillator.setPeriodicWave(t),this},t.OscillatorNode.prototype.stop=function(t){return this.cancelStop(),this._stopTime=this.toSeconds(t),this._gainNode.gain.setValueAtTime(0,this._stopTime),this.context.clearTimeout(this._timeout),this._timeout=this.context.setTimeout(function(){this._oscillator.stop(this.now()),this.onended()}.bind(this),this._stopTime-this.now()),this},t.OscillatorNode.prototype.cancelStop=function(){return-1!==this._startTime&&(this._gainNode.gain.cancelScheduledValues(this._startTime+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime)),this.context.clearTimeout(this._timeout),this._stopTime=-1),this},Object.defineProperty(t.OscillatorNode.prototype,"type",{get:function(){return this._oscillator.type},set:function(t){this._oscillator.type=t}}),t.OscillatorNode.prototype.dispose=function(){return this.context.clearTimeout(this._timeout),t.AudioNode.prototype.dispose.call(this),this.onended=null,this._oscillator.disconnect(),this._oscillator=null,this._gainNode.dispose(),this._gainNode=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this},t.OscillatorNode}),e(function(t){return t.Oscillator=function(){var e=t.defaults(arguments,["frequency","type"],t.Oscillator);t.Source.call(this,e),this._oscillator=null,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this._wave=null,this._partials=t.defaultArg(e.partials,[1]),this._phase=e.phase,this._type=null,this.type=e.type,this.phase=this._phase,this._readOnly(["frequency","detune"])},t.extend(t.Oscillator,t.Source),t.Oscillator.defaults={type:"sine",frequency:440,detune:0,phase:0,partials:[]},t.Oscillator.Type={Sine:"sine",Triangle:"triangle",Sawtooth:"sawtooth",Square:"square",Custom:"custom"},t.Oscillator.prototype._start=function(e){this._oscillator=new t.OscillatorNode,this._wave?this._oscillator.setPeriodicWave(this._wave):this._oscillator.type=this._type,this._oscillator.connect(this.output),this.frequency.connect(this._oscillator.frequency),this.detune.connect(this._oscillator.detune),e=this.toSeconds(e),this._oscillator.start(e)},t.Oscillator.prototype._stop=function(t){return this._oscillator&&(t=this.toSeconds(t),this._oscillator.stop(t)),this},t.Oscillator.prototype.restart=function(t){return this._oscillator.cancelStop(),this._state.cancel(this.toSeconds(t)),this},t.Oscillator.prototype.syncFrequency=function(){return t.Transport.syncSignal(this.frequency),this},t.Oscillator.prototype.unsyncFrequency=function(){return t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Oscillator.prototype,"type",{get:function(){return this._type},set:function(e){var i=[t.Oscillator.Type.Sine,t.Oscillator.Type.Square,t.Oscillator.Type.Triangle,t.Oscillator.Type.Sawtooth].includes(e);if(0===this._phase&&i)this._wave=null,null!==this._oscillator&&this._oscillator.type;else{var r=this._getRealImaginary(e,this._phase),n=this.context.createPeriodicWave(r[0],r[1]);this._wave=n,null!==this._oscillator&&this._oscillator.setPeriodicWave(this._wave)}this._type=e}}),t.Oscillator.prototype._getRealImaginary=function(e,i){var r=2048,n=new Float32Array(r),o=new Float32Array(r),s=1;if(e===t.Oscillator.Type.Custom)r=s=this._partials.length+1;else{var a=/^(sine|triangle|square|sawtooth)(\d+)$/.exec(e);a&&(s=parseInt(a[2])+1,e=a[1],r=s=Math.max(s,2))}for(var h=1;h>1&1?-1:1):0;break;case t.Oscillator.Type.Custom:l=this._partials[h-1];break;default:throw new TypeError("Tone.Oscillator: invalid type: "+e)}0!==l?(n[h]=-l*Math.sin(i*h),o[h]=l*Math.cos(i*h)):(n[h]=0,o[h]=0)}return[n,o]},t.Oscillator.prototype._inverseFFT=function(t,e,i){for(var r=0,n=t.length,o=0;on&&r=this.values.length&&(this.index=0)):e===t.CtrlPattern.Type.Down?(this.index--,this.index<0&&(this.index=this.values.length-1)):e===t.CtrlPattern.Type.UpDown||e===t.CtrlPattern.Type.DownUp?(this._direction===t.CtrlPattern.Type.Up?this.index++:this.index--,this.index<0?(this.index=1,this._direction=t.CtrlPattern.Type.Up):this.index>=this.values.length&&(this.index=this.values.length-2,this._direction=t.CtrlPattern.Type.Down)):e===t.CtrlPattern.Type.Random?this.index=Math.floor(Math.random()*this.values.length):e===t.CtrlPattern.Type.RandomWalk?Math.random()<.5?(this.index--,this.index=Math.max(this.index,0)):(this.index++,this.index=Math.min(this.index,this.values.length-1)):e===t.CtrlPattern.Type.RandomOnce?(this.index++,this.index>=this.values.length&&(this.index=0,this._shuffleValues())):e===t.CtrlPattern.Type.AlternateUp?(this._direction===t.CtrlPattern.Type.Up?(this.index+=2,this._direction=t.CtrlPattern.Type.Down):(this.index-=1,this._direction=t.CtrlPattern.Type.Up),this.index>=this.values.length&&(this.index=0,this._direction=t.CtrlPattern.Type.Up)):e===t.CtrlPattern.Type.AlternateDown&&(this._direction===t.CtrlPattern.Type.Up?(this.index+=1,this._direction=t.CtrlPattern.Type.Down):(this.index-=2,this._direction=t.CtrlPattern.Type.Up),this.index<0&&(this.index=this.values.length-1,this._direction=t.CtrlPattern.Type.Down)),this.value},t.CtrlPattern.prototype._shuffleValues=function(){var t=[];this._shuffled=[];for(var e=0;e0;){var i=t.splice(Math.floor(t.length*Math.random()),1);this._shuffled.push(i[0])}},t.CtrlPattern.prototype.dispose=function(){this._shuffled=null,this.values=null},t.CtrlPattern}),e(function(t){return t.CtrlRandom=function(){var e=t.defaults(arguments,["min","max"],t.CtrlRandom);t.call(this),this.min=e.min,this.max=e.max,this.integer=e.integer},t.extend(t.CtrlRandom),t.CtrlRandom.defaults={min:0,max:1,integer:!1},Object.defineProperty(t.CtrlRandom.prototype,"value",{get:function(){var t=this.toSeconds(this.min),e=this.toSeconds(this.max),i=Math.random(),r=i*t+(1-i)*e;return this.integer&&(r=Math.floor(r)),r}}),t.CtrlRandom}),e(function(t){return t.Buffers=function(e){var i=Array.prototype.slice.call(arguments);i.shift();var r=t.defaults(i,["onload","baseUrl"],t.Buffers);for(var n in t.call(this),this._buffers={},this.baseUrl=r.baseUrl,this._loadingCount=0,e)this._loadingCount++,this.add(n,e[n],this._bufferLoaded.bind(this,r.onload))},t.extend(t.Buffers),t.Buffers.defaults={onload:t.noOp,baseUrl:""},t.Buffers.prototype.has=function(t){return this._buffers.hasOwnProperty(t)},t.Buffers.prototype.get=function(t){if(this.has(t))return this._buffers[t];throw new Error("Tone.Buffers: no buffer named "+t)},t.Buffers.prototype._bufferLoaded=function(t){this._loadingCount--,0===this._loadingCount&&t&&t(this)},Object.defineProperty(t.Buffers.prototype,"loaded",{get:function(){var t=!0;for(var e in this._buffers){var i=this.get(e);t=t&&i.loaded}return t}}),t.Buffers.prototype.add=function(e,i,r){return r=t.defaultArg(r,t.noOp),i instanceof t.Buffer?(this._buffers[e]=i,r(this)):i instanceof AudioBuffer?(this._buffers[e]=new t.Buffer(i),r(this)):t.isString(i)&&(this._buffers[e]=new t.Buffer(this.baseUrl+i,r)),this},t.Buffers.prototype.dispose=function(){for(var e in t.prototype.dispose.call(this),this._buffers)this._buffers[e].dispose();return this._buffers=null,this},t.Buffers}),e(function(t){var e={};return t.prototype.send=function(i,r){e.hasOwnProperty(i)||(e[i]=this.context.createGain()),r=t.defaultArg(r,0);var n=new t.Gain(r,t.Type.Decibels);return this.connect(n),n.connect(e[i]),n},t.prototype.receive=function(t,i){return e.hasOwnProperty(t)||(e[t]=this.context.createGain()),e[t].connect(this,0,i),this},t.Context.on("init",function(t){t.Buses?e=t.Buses:(e={},t.Buses=e)}),t}),e(function(t){return t.Draw=function(){t.call(this),this._events=new t.Timeline,this.expiration=.25,this.anticipation=.008,this._boundDrawLoop=this._drawLoop.bind(this)},t.extend(t.Draw),t.Draw.prototype.schedule=function(t,e){return this._events.add({callback:t,time:this.toSeconds(e)}),1===this._events.length&&requestAnimationFrame(this._boundDrawLoop),this},t.Draw.prototype.cancel=function(t){return this._events.cancel(this.toSeconds(t)),this},t.Draw.prototype._drawLoop=function(){for(var e=t.now();this._events.length&&this._events.peek().time-this.anticipation<=e;){var i=this._events.shift();e-i.time<=this.expiration&&i.callback()}this._events.length>0&&requestAnimationFrame(this._boundDrawLoop)},t.Draw=new t.Draw,t.Draw}),e(function(t){t.Listener=function(){t.call(this),this._orientation=[0,0,0,0,0,0],this._position=[0,0,0],t.getContext(function(){this.set(e.defaults)}.bind(this))},t.extend(t.Listener),t.Listener.defaults={positionX:0,positionY:0,positionZ:0,forwardX:0,forwardY:0,forwardZ:1,upX:0,upY:1,upZ:0},t.Listener.prototype._rampTimeConstant=.01,t.Listener.prototype.setPosition=function(t,e,i){if(this.context.listener.positionX){var r=this.now();this.context.listener.positionX.setTargetAtTime(t,r,this._rampTimeConstant),this.context.listener.positionY.setTargetAtTime(e,r,this._rampTimeConstant),this.context.listener.positionZ.setTargetAtTime(i,r,this._rampTimeConstant)}else this.context.listener.setPosition(t,e,i);return this._position=Array.prototype.slice.call(arguments),this},t.Listener.prototype.setOrientation=function(t,e,i,r,n,o){if(this.context.listener.forwardX){var s=this.now();this.context.listener.forwardX.setTargetAtTime(t,s,this._rampTimeConstant),this.context.listener.forwardY.setTargetAtTime(e,s,this._rampTimeConstant),this.context.listener.forwardZ.setTargetAtTime(i,s,this._rampTimeConstant),this.context.listener.upX.setTargetAtTime(r,s,this._rampTimeConstant),this.context.listener.upY.setTargetAtTime(n,s,this._rampTimeConstant),this.context.listener.upZ.setTargetAtTime(o,s,this._rampTimeConstant)}else this.context.listener.setOrientation(t,e,i,r,n,o);return this._orientation=Array.prototype.slice.call(arguments),this},Object.defineProperty(t.Listener.prototype,"positionX",{set:function(t){this._position[0]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[0]}}),Object.defineProperty(t.Listener.prototype,"positionY",{set:function(t){this._position[1]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[1]}}),Object.defineProperty(t.Listener.prototype,"positionZ",{set:function(t){this._position[2]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[2]}}),Object.defineProperty(t.Listener.prototype,"forwardX",{set:function(t){this._orientation[0]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[0]}}),Object.defineProperty(t.Listener.prototype,"forwardY",{set:function(t){this._orientation[1]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[1]}}),Object.defineProperty(t.Listener.prototype,"forwardZ",{set:function(t){this._orientation[2]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[2]}}),Object.defineProperty(t.Listener.prototype,"upX",{set:function(t){this._orientation[3]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[3]}}),Object.defineProperty(t.Listener.prototype,"upY",{set:function(t){this._orientation[4]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[4]}}),Object.defineProperty(t.Listener.prototype,"upZ",{set:function(t){this._orientation[5]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[5]}}),t.Listener.prototype.dispose=function(){return this._orientation=null,this._position=null,this};var e=t.Listener;return t.Listener=new e,t.Context.on("init",function(i){i.Listener instanceof e?t.Listener=i.Listener:t.Listener=new e,i.Listener=t.Listener}),t.Listener}),e(function(t){return t.Offline=function(e,i){var r,n=t.context.sampleRate,o=t.context,s=function e(i,r,n,o){o=t.defaultArg(o,0);var s=new t.OfflineContext(2,r,n);t.context=s;var a=i(t.Transport);return s.currentTime>0&&o<1e3?e(i,r,n,++o):{response:a,context:s}}(e,i,n),a=s.response,h=s.context;return r=a instanceof Promise?a.then(function(){return h.render()}):h.render(),t.context=o,r.then(function(e){return new t.Buffer(e)})},t.Offline}),e(function(t){return t.Effect=function(){var e=t.defaults(arguments,["wet"],t.Effect);t.AudioNode.call(this),this.createInsOuts(1,1),this._dryWet=new t.CrossFade(e.wet),this.wet=this._dryWet.fade,this.effectSend=new t.Gain,this.effectReturn=new t.Gain,this.input.connect(this._dryWet.a),this.input.connect(this.effectSend),this.effectReturn.connect(this._dryWet.b),this._dryWet.connect(this.output),this._readOnly(["wet"])},t.extend(t.Effect,t.AudioNode),t.Effect.defaults={wet:1},t.Effect.prototype.connectEffect=function(t){return this.effectSend.chain(t,this.effectReturn),this},t.Effect.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this._dryWet.dispose(),this._dryWet=null,this.effectSend.dispose(),this.effectSend=null,this.effectReturn.dispose(),this.effectReturn=null,this._writable(["wet"]),this.wet=null,this},t.Effect}),e(function(t){return t.AutoFilter=function(){var e=t.defaults(arguments,["frequency","baseFrequency","octaves"],t.AutoFilter);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth}),this.depth=this._lfo.amplitude,this.frequency=this._lfo.frequency,this.filter=new t.Filter(e.filter),this._octaves=0,this.connectEffect(this.filter),this._lfo.connect(this.filter.frequency),this.type=e.type,this._readOnly(["frequency","depth"]),this.octaves=e.octaves,this.baseFrequency=e.baseFrequency},t.extend(t.AutoFilter,t.Effect),t.AutoFilter.defaults={frequency:1,type:"sine",depth:1,baseFrequency:200,octaves:2.6,filter:{type:"lowpass",rolloff:-12,Q:1}},t.AutoFilter.prototype.start=function(t){return this._lfo.start(t),this},t.AutoFilter.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoFilter.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoFilter.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoFilter.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),Object.defineProperty(t.AutoFilter.prototype,"baseFrequency",{get:function(){return this._lfo.min},set:function(t){this._lfo.min=this.toFrequency(t),this.octaves=this._octaves}}),Object.defineProperty(t.AutoFilter.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._lfo.max=this.baseFrequency*Math.pow(2,t)}}),t.AutoFilter.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this.filter.dispose(),this.filter=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null,this},t.AutoFilter}),e(function(t){return t.AutoPanner=function(){var e=t.defaults(arguments,["frequency"],t.AutoPanner);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth,min:-1,max:1}),this.depth=this._lfo.amplitude,this._panner=new t.Panner,this.frequency=this._lfo.frequency,this.connectEffect(this._panner),this._lfo.connect(this._panner.pan),this.type=e.type,this._readOnly(["depth","frequency"])},t.extend(t.AutoPanner,t.Effect),t.AutoPanner.defaults={frequency:1,type:"sine",depth:1},t.AutoPanner.prototype.start=function(t){return this._lfo.start(t),this},t.AutoPanner.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoPanner.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoPanner.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoPanner.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.AutoPanner.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this._panner.dispose(),this._panner=null,this._writable(["depth","frequency"]),this.frequency=null,this.depth=null,this},t.AutoPanner}),e(function(t){return t.AutoWah=function(){var e=t.defaults(arguments,["baseFrequency","octaves","sensitivity"],t.AutoWah);t.Effect.call(this,e),this.follower=new t.Follower(e.follower),this._sweepRange=new t.ScaleExp(0,1,.5),this._baseFrequency=e.baseFrequency,this._octaves=e.octaves,this._inputBoost=new t.Gain,this._bandpass=new t.Filter({rolloff:-48,frequency:0,Q:e.Q}),this._peaking=new t.Filter(0,"peaking"),this._peaking.gain.value=e.gain,this.gain=this._peaking.gain,this.Q=this._bandpass.Q,this.effectSend.chain(this._inputBoost,this.follower,this._sweepRange),this._sweepRange.connect(this._bandpass.frequency),this._sweepRange.connect(this._peaking.frequency),this.effectSend.chain(this._bandpass,this._peaking,this.effectReturn),this._setSweepRange(),this.sensitivity=e.sensitivity,this._readOnly(["gain","Q"])},t.extend(t.AutoWah,t.Effect),t.AutoWah.defaults={baseFrequency:100,octaves:6,sensitivity:0,Q:2,gain:2,follower:{attack:.3,release:.5}},Object.defineProperty(t.AutoWah.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"baseFrequency",{get:function(){return this._baseFrequency},set:function(t){this._baseFrequency=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"sensitivity",{get:function(){return t.gainToDb(1/this._inputBoost.gain.value)},set:function(e){this._inputBoost.gain.value=1/t.dbToGain(e)}}),t.AutoWah.prototype._setSweepRange=function(){this._sweepRange.min=this._baseFrequency,this._sweepRange.max=Math.min(this._baseFrequency*Math.pow(2,this._octaves),this.context.sampleRate/2)},t.AutoWah.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this.follower.dispose(),this.follower=null,this._sweepRange.dispose(),this._sweepRange=null,this._bandpass.dispose(),this._bandpass=null,this._peaking.dispose(),this._peaking=null,this._inputBoost.dispose(),this._inputBoost=null,this._writable(["gain","Q"]),this.gain=null,this.Q=null,this},t.AutoWah}),e(function(t){return t.Modulo=function(e){t.SignalBase.call(this),this.createInsOuts(1,0),this._shaper=new t.WaveShaper(Math.pow(2,16)),this._multiply=new t.Multiply,this._subtract=this.output=new t.Subtract,this._modSignal=new t.Signal(e),this.input.fan(this._shaper,this._subtract),this._modSignal.connect(this._multiply,0,0),this._shaper.connect(this._multiply,0,1),this._multiply.connect(this._subtract,0,1),this._setWaveShaper(e)},t.extend(t.Modulo,t.SignalBase),t.Modulo.prototype._setWaveShaper=function(t){this._shaper.setMap(function(e){return Math.floor((e+1e-4)/t)})},Object.defineProperty(t.Modulo.prototype,"value",{get:function(){return this._modSignal.value},set:function(t){this._modSignal.value=t,this._setWaveShaper(t)}}),t.Modulo.prototype.dispose=function(){return t.SignalBase.prototype.dispose.call(this),this._shaper.dispose(),this._shaper=null,this._multiply.dispose(),this._multiply=null,this._subtract.dispose(),this._subtract=null,this._modSignal.dispose(),this._modSignal=null,this},t.Modulo}),e(function(t){return t.BitCrusher=function(){var e=t.defaults(arguments,["bits"],t.BitCrusher);t.Effect.call(this,e);var i=1/Math.pow(2,e.bits-1);this._subtract=new t.Subtract,this._modulo=new t.Modulo(i),this._bits=e.bits,this.effectSend.fan(this._subtract,this._modulo),this._modulo.connect(this._subtract,0,1),this._subtract.connect(this.effectReturn)},t.extend(t.BitCrusher,t.Effect),t.BitCrusher.defaults={bits:4},Object.defineProperty(t.BitCrusher.prototype,"bits",{get:function(){return this._bits},set:function(t){this._bits=t;var e=1/Math.pow(2,t-1);this._modulo.value=e}}),t.BitCrusher.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._subtract.dispose(),this._subtract=null,this._modulo.dispose(),this._modulo=null,this},t.BitCrusher}),e(function(t){return t.Chebyshev=function(){var e=t.defaults(arguments,["order"],t.Chebyshev);t.Effect.call(this,e),this._shaper=new t.WaveShaper(4096),this._order=e.order,this.connectEffect(this._shaper),this.order=e.order,this.oversample=e.oversample},t.extend(t.Chebyshev,t.Effect),t.Chebyshev.defaults={order:1,oversample:"none"},t.Chebyshev.prototype._getCoefficient=function(t,e,i){return i.hasOwnProperty(e)?i[e]:(i[e]=0===e?0:1===e?t:2*t*this._getCoefficient(t,e-1,i)-this._getCoefficient(t,e-2,i),i[e])},Object.defineProperty(t.Chebyshev.prototype,"order",{get:function(){return this._order},set:function(t){this._order=t;for(var e=new Array(4096),i=e.length,r=0;r=this._startTime&&!this._sourceStopped?t.State.Started:t.State.Stopped},t.BufferSource.prototype.start=function(e,i,r,n,o){if(-1!==this._startTime)throw new Error("Tone.BufferSource can only be started once.");if(!this.buffer.loaded)throw new Error("Tone.BufferSource: buffer is either not set or not loaded.");e=this.toSeconds(e),i=this.loop?t.defaultArg(i,this.loopStart):t.defaultArg(i,0),i=this.toSeconds(i),n=t.defaultArg(n,1),this._gain=n,o=this.toSeconds(t.defaultArg(o,this.fadeIn)),this.fadeIn=o,o>0?(this._gainNode.gain.setValueAtTime(0,e),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(this._gain,e+o):this._gainNode.gain.exponentialApproachValueAtTime(this._gain,e,o)):this._gainNode.gain.setValueAtTime(n,e),this._startTime=e;var s=this.toSeconds(t.defaultArg(r,this.buffer.duration-i%this.buffer.duration));if(s=Math.max(s,0),t.isDefined(r)&&(this.loop||(s=Math.min(s,this.buffer.duration-i%this.buffer.duration)),this.stop(e+s,this.fadeOut)),this.loop){var a=this.loopEnd||this.buffer.duration,h=this.loopStart;i>=a&&(i=(i-h)%(a-h)+h)}return this._source.buffer=this.buffer.get(),this._source.loopEnd=this.loopEnd||this.buffer.duration,ithis.sampleTime?(this._gainNode.gain.setValueAtTime(this._gain,n),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(0,e):this._gainNode.gain.exponentialApproachValueAtTime(0,n,i)):this._gainNode.gain.setValueAtTime(0,e),t.context.clearTimeout(this._onendedTimeout),this._onendedTimeout=t.context.setTimeout(this._onended.bind(this),this._stopTime-this.now()),this}},t.BufferSource.prototype.cancelStop=function(){if(-1!==this._startTime&&!this._sourceStopped){var t=this.toSeconds(this.fadeIn);this._gainNode.gain.cancelScheduledValues(this._startTime+t+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime+t+this.sampleTime)),this.context.clearTimeout(this._onendedTimeout),this._stopTime=-1}return this},t.BufferSource.prototype._onended=function(){if(!this._sourceStopped){this._sourceStopped=!0;var t="exponential"===this.curve?2*this.fadeOut:0;this._sourceStarted&&-1!==this._stopTime&&this._source.stop(this._stopTime+t),this.onended(this)}},Object.defineProperty(t.BufferSource.prototype,"loopStart",{get:function(){return this._source.loopStart},set:function(t){this._source.loopStart=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"loopEnd",{get:function(){return this._source.loopEnd},set:function(t){this._source.loopEnd=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"buffer",{get:function(){return this._buffer},set:function(t){this._buffer.set(t)}}),Object.defineProperty(t.BufferSource.prototype,"loop",{get:function(){return this._source.loop},set:function(t){this._source.loop=t,this.cancelStop()}}),t.BufferSource.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.onended=null,this._source.onended=null,this._source.disconnect(),this._source=null,this._gainNode.dispose(),this._gainNode=null,this._buffer.dispose(),this._buffer=null,this._startTime=-1,this.playbackRate=null,t.context.clearTimeout(this._onendedTimeout),this},t.BufferSource}),e(function(t){t.Noise=function(){var e=t.defaults(arguments,["type"],t.Noise);t.Source.call(this,e),this._source=null,this._type=e.type,this._playbackRate=e.playbackRate},t.extend(t.Noise,t.Source),t.Noise.defaults={type:"white",playbackRate:1},Object.defineProperty(t.Noise.prototype,"type",{get:function(){return this._type},set:function(e){if(this._type!==e){if(!(e in i))throw new TypeError("Tone.Noise: invalid type: "+e);if(this._type=e,this.state===t.State.Started){var r=this.now();this._stop(r),this._start(r)}}}}),Object.defineProperty(t.Noise.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._source&&(this._source.playbackRate.value=t)}}),t.Noise.prototype._start=function(e){var r=i[this._type];this._source=new t.BufferSource(r).connect(this.output),this._source.loop=!0,this._source.playbackRate.value=this._playbackRate,this._source.start(this.toSeconds(e),Math.random()*(r.duration-.001))},t.Noise.prototype._stop=function(t){this._source&&(this._source.stop(this.toSeconds(t)),this._source=null)},t.Noise.prototype.restart=function(t){this._stop(t),this._start(t)},t.Noise.prototype.dispose=function(){return t.Source.prototype.dispose.call(this),null!==this._source&&(this._source.disconnect(),this._source=null),this._buffer=null,this};var e={pink:function(){for(var t=[],e=0;e<2;e++){var i,r,n,o,s,a,h,l=new Float32Array(220500);t[e]=l,i=r=n=o=s=a=h=0;for(var u=0;u<220500;u++){var c=2*Math.random()-1;i=.99886*i+.0555179*c,r=.99332*r+.0750759*c,n=.969*n+.153852*c,o=.8665*o+.3104856*c,s=.55*s+.5329522*c,a=-.7616*a-.016898*c,l[u]=i+r+n+o+s+a+h+.5362*c,l[u]*=.11,h=.115926*c}}return t}(),brown:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0,n=0;n<220500;n++){var o=2*Math.random()-1;i[n]=(r+.02*o)/1.02,r=i[n],i[n]*=3.5}}return t}(),white:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0;r<220500;r++)i[r]=2*Math.random()-1}return t}()},i={};function r(){for(var r in e)i[r]=(new t.Buffer).fromArray(e[r])}return t.getContext(r),t.Context.on("init",r),t.Noise}),e(function(t){return t.Reverb=function(){var e=t.defaults(arguments,["decay"],t.Reverb);t.Effect.call(this,e),this._convolver=this.context.createConvolver(),this.decay=e.decay,this.preDelay=e.preDelay,this.connectEffect(this._convolver)},t.extend(t.Reverb,t.Effect),t.Reverb.defaults={decay:1.5,preDelay:.01},t.Reverb.prototype.generate=function(){return t.Offline(function(){var e=new t.Noise,i=new t.Noise,r=new t.Merge;e.connect(r.left),i.connect(r.right);var n=(new t.Gain).toMaster();r.connect(n),e.start(0),i.start(0),n.gain.setValueAtTime(0,0),n.gain.linearRampToValueAtTime(1,this.preDelay),n.gain.exponentialApproachValueAtTime(0,this.preDelay,this.decay-this.preDelay)}.bind(this),this.decay).then(function(t){return this._convolver.buffer=t.get(),this}.bind(this))},t.Reverb.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._convolver.disconnect(),this._convolver=null,this},t.Reverb}),e(function(t){return t.StereoFeedbackEffect=function(){var e=t.defaults(arguments,["feedback"],t.FeedbackEffect);t.StereoEffect.call(this,e),this.feedback=new t.Signal(e.feedback,t.Type.NormalRange),this._feedbackL=new t.Gain,this._feedbackR=new t.Gain,this.effectReturnL.chain(this._feedbackL,this.effectSendL),this.effectReturnR.chain(this._feedbackR,this.effectSendR),this.feedback.fan(this._feedbackL.gain,this._feedbackR.gain),this._readOnly(["feedback"])},t.extend(t.StereoFeedbackEffect,t.StereoEffect),t.StereoFeedbackEffect.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["feedback"]),this.feedback.dispose(),this.feedback=null,this._feedbackL.dispose(),this._feedbackL=null,this._feedbackR.dispose(),this._feedbackR=null,this},t.StereoFeedbackEffect}),e(function(t){return t.StereoWidener=function(){var e=t.defaults(arguments,["width"],t.StereoWidener);t.MidSideEffect.call(this,e),this.width=new t.Signal(e.width,t.Type.NormalRange),this._readOnly(["width"]),this._twoTimesWidthMid=new t.Multiply(2),this._twoTimesWidthSide=new t.Multiply(2),this._midMult=new t.Multiply,this._twoTimesWidthMid.connect(this._midMult,0,1),this.midSend.chain(this._midMult,this.midReturn),this._oneMinusWidth=new t.Subtract,this._oneMinusWidth.connect(this._twoTimesWidthMid),this.context.getConstant(1).connect(this._oneMinusWidth,0,0),this.width.connect(this._oneMinusWidth,0,1),this._sideMult=new t.Multiply,this.width.connect(this._twoTimesWidthSide),this._twoTimesWidthSide.connect(this._sideMult,0,1),this.sideSend.chain(this._sideMult,this.sideReturn)},t.extend(t.StereoWidener,t.MidSideEffect),t.StereoWidener.defaults={width:.5},t.StereoWidener.prototype.dispose=function(){return t.MidSideEffect.prototype.dispose.call(this),this._writable(["width"]),this.width.dispose(),this.width=null,this._midMult.dispose(),this._midMult=null,this._sideMult.dispose(),this._sideMult=null,this._twoTimesWidthMid.dispose(),this._twoTimesWidthMid=null,this._twoTimesWidthSide.dispose(),this._twoTimesWidthSide=null,this._oneMinusWidth.dispose(),this._oneMinusWidth=null,this},t.StereoWidener}),e(function(t){return t.Tremolo=function(){var e=t.defaults(arguments,["frequency","depth"],t.Tremolo);t.StereoEffect.call(this,e),this._lfoL=new t.LFO({phase:e.spread,min:1,max:0}),this._lfoR=new t.LFO({phase:e.spread,min:1,max:0}),this._amplitudeL=new t.Gain,this._amplitudeR=new t.Gain,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.depth=new t.Signal(e.depth,t.Type.NormalRange),this._readOnly(["frequency","depth"]),this.effectSendL.chain(this._amplitudeL,this.effectReturnL),this.effectSendR.chain(this._amplitudeR,this.effectReturnR),this._lfoL.connect(this._amplitudeL.gain),this._lfoR.connect(this._amplitudeR.gain),this.frequency.fan(this._lfoL.frequency,this._lfoR.frequency),this.depth.fan(this._lfoR.amplitude,this._lfoL.amplitude),this.type=e.type,this.spread=e.spread},t.extend(t.Tremolo,t.StereoEffect),t.Tremolo.defaults={frequency:10,type:"sine",depth:.5,spread:180},t.Tremolo.prototype.start=function(t){return this._lfoL.start(t),this._lfoR.start(t),this},t.Tremolo.prototype.stop=function(t){return this._lfoL.stop(t),this._lfoR.stop(t),this},t.Tremolo.prototype.sync=function(e){return this._lfoL.sync(e),this._lfoR.sync(e),t.Transport.syncSignal(this.frequency),this},t.Tremolo.prototype.unsync=function(){return this._lfoL.unsync(),this._lfoR.unsync(),t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Tremolo.prototype,"type",{get:function(){return this._lfoL.type},set:function(t){this._lfoL.type=t,this._lfoR.type=t}}),Object.defineProperty(t.Tremolo.prototype,"spread",{get:function(){return this._lfoR.phase-this._lfoL.phase},set:function(t){this._lfoL.phase=90-t/2,this._lfoR.phase=t/2+90}}),t.Tremolo.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["frequency","depth"]),this._lfoL.dispose(),this._lfoL=null,this._lfoR.dispose(),this._lfoR=null,this._amplitudeL.dispose(),this._amplitudeL=null,this._amplitudeR.dispose(),this._amplitudeR=null,this.frequency=null,this.depth=null,this},t.Tremolo}),e(function(t){return t.Vibrato=function(){var e=t.defaults(arguments,["frequency","depth"],t.Vibrato);t.Effect.call(this,e),this._delayNode=new t.Delay(0,e.maxDelay),this._lfo=new t.LFO({type:e.type,min:0,max:e.maxDelay,frequency:e.frequency,phase:-90}).start().connect(this._delayNode.delayTime),this.frequency=this._lfo.frequency,this.depth=this._lfo.amplitude,this.depth.value=e.depth,this._readOnly(["frequency","depth"]),this.effectSend.chain(this._delayNode,this.effectReturn)},t.extend(t.Vibrato,t.Effect),t.Vibrato.defaults={maxDelay:.005,frequency:5,depth:.1,type:"sine"},Object.defineProperty(t.Vibrato.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.Vibrato.prototype.dispose=function(){t.Effect.prototype.dispose.call(this),this._delayNode.dispose(),this._delayNode=null,this._lfo.dispose(),this._lfo=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null},t.Vibrato}),e(function(t){return t.Event=function(){var e=t.defaults(arguments,["callback","value"],t.Event);t.call(this),this._loop=e.loop,this.callback=e.callback,this.value=e.value,this._loopStart=this.toTicks(e.loopStart),this._loopEnd=this.toTicks(e.loopEnd),this._state=new t.TimelineState(t.State.Stopped),this._playbackRate=1,this._startOffset=0,this._probability=e.probability,this._humanize=e.humanize,this.mute=e.mute,this.playbackRate=e.playbackRate},t.extend(t.Event),t.Event.defaults={callback:t.noOp,loop:!1,loopEnd:"1m",loopStart:0,playbackRate:1,value:null,probability:1,mute:!1,humanize:!1},t.Event.prototype._rescheduleEvents=function(e){return e=t.defaultArg(e,-1),this._state.forEachFrom(e,function(e){var i;if(e.state===t.State.Started){t.isDefined(e.id)&&t.Transport.clear(e.id);var r=e.time+Math.round(this.startOffset/this._playbackRate);if(this._loop){i=1/0,t.isNumber(this._loop)&&(i=this._loop*this._getLoopDuration());var n=this._state.getAfter(r);null!==n&&(i=Math.min(i,n.time-r)),i!==1/0&&(this._state.setStateAtTime(t.State.Stopped,r+i+1),i=t.Ticks(i));var o=t.Ticks(this._getLoopDuration());e.id=t.Transport.scheduleRepeat(this._tick.bind(this),o,t.Ticks(r),i)}else e.id=t.Transport.schedule(this._tick.bind(this),t.Ticks(r))}}.bind(this)),this},Object.defineProperty(t.Event.prototype,"state",{get:function(){return this._state.getValueAtTime(t.Transport.ticks)}}),Object.defineProperty(t.Event.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t}}),Object.defineProperty(t.Event.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t}}),Object.defineProperty(t.Event.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t}}),t.Event.prototype.start=function(e){return e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Stopped&&(this._state.add({state:t.State.Started,time:e,id:void 0}),this._rescheduleEvents(e)),this},t.Event.prototype.stop=function(e){if(this.cancel(e),e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Started){this._state.setStateAtTime(t.State.Stopped,e);var i=this._state.getBefore(e),r=e;null!==i&&(r=i.time),this._rescheduleEvents(r)}return this},t.Event.prototype.cancel=function(e){return e=t.defaultArg(e,-1/0),e=this.toTicks(e),this._state.forEachFrom(e,function(e){t.Transport.clear(e.id)}),this._state.cancel(e),this},t.Event.prototype._tick=function(e){var i=t.Transport.getTicksAtTime(e);if(!this.mute&&this._state.getValueAtTime(i)===t.State.Started){if(this.probability<1&&Math.random()>this.probability)return;if(this.humanize){var r=.02;t.isBoolean(this.humanize)||(r=this.toSeconds(this.humanize)),e+=(2*Math.random()-1)*r}this.callback(e,this.value)}},t.Event.prototype._getLoopDuration=function(){return Math.round((this._loopEnd-this._loopStart)/this._playbackRate)},Object.defineProperty(t.Event.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"progress",{get:function(){if(this._loop){var e=t.Transport.ticks,i=this._state.get(e);if(null!==i&&i.state===t.State.Started){var r=this._getLoopDuration();return(e-i.time)%r/r}return 0}return 0}}),t.Event.prototype.dispose=function(){this.cancel(),this._state.dispose(),this._state=null,this.callback=null,this.value=null},t.Event}),e(function(t){return t.Loop=function(){var e=t.defaults(arguments,["callback","interval"],t.Loop);t.call(this),this._event=new t.Event({callback:this._tick.bind(this),loop:!0,loopEnd:e.interval,playbackRate:e.playbackRate,probability:e.probability}),this.callback=e.callback,this.iterations=e.iterations},t.extend(t.Loop),t.Loop.defaults={interval:"4n",callback:t.noOp,playbackRate:1,iterations:1/0,probability:!0,mute:!1},t.Loop.prototype.start=function(t){return this._event.start(t),this},t.Loop.prototype.stop=function(t){return this._event.stop(t),this},t.Loop.prototype.cancel=function(t){return this._event.cancel(t),this},t.Loop.prototype._tick=function(t){this.callback(t)},Object.defineProperty(t.Loop.prototype,"state",{get:function(){return this._event.state}}),Object.defineProperty(t.Loop.prototype,"progress",{get:function(){return this._event.progress}}),Object.defineProperty(t.Loop.prototype,"interval",{get:function(){return this._event.loopEnd},set:function(t){this._event.loopEnd=t}}),Object.defineProperty(t.Loop.prototype,"playbackRate",{get:function(){return this._event.playbackRate},set:function(t){this._event.playbackRate=t}}),Object.defineProperty(t.Loop.prototype,"humanize",{get:function(){return this._event.humanize},set:function(t){this._event.humanize=t}}),Object.defineProperty(t.Loop.prototype,"probability",{get:function(){return this._event.probability},set:function(t){this._event.probability=t}}),Object.defineProperty(t.Loop.prototype,"mute",{get:function(){return this._event.mute},set:function(t){this._event.mute=t}}),Object.defineProperty(t.Loop.prototype,"iterations",{get:function(){return!0===this._event.loop?1/0:this._event.loop},set:function(t){this._event.loop=t===1/0||t}}),t.Loop.prototype.dispose=function(){this._event.dispose(),this._event=null,this.callback=null},t.Loop}),e(function(t){return t.Part=function(){var e=t.defaults(arguments,["callback","events"],t.Part);t.Event.call(this,e),this._events=[];for(var i=0;i=this._loopStart&&e.startOffset=r&&(e.loop=!1,e.start(t.Ticks(i))):e.startOffset>=r&&e.start(t.Ticks(i))},Object.defineProperty(t.Part.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t,this._forEach(function(t){t.startOffset+=this._startOffset})}}),t.Part.prototype.stop=function(e){var i=this.toTicks(e);return this._state.cancel(i),this._state.setStateAtTime(t.State.Stopped,i),this._forEach(function(t){t.stop(e)}),this},t.Part.prototype.at=function(e,i){e=t.TransportTime(e);for(var r=t.Ticks(1).toSeconds(),n=0;n=0;r--){var n=this._events[r];n instanceof t.Part?n.remove(e,i):n.startOffset===e&&(t.isUndef(i)||t.isDefined(i)&&n.value===i)&&(this._events.splice(r,1),n.dispose())}return this},t.Part.prototype.removeAll=function(){return this._forEach(function(t){t.dispose()}),this._events=[],this},t.Part.prototype.cancel=function(t){return this._forEach(function(e){e.cancel(t)}),this._state.cancel(this.toTicks(t)),this},t.Part.prototype._forEach=function(e,i){if(this._events){i=t.defaultArg(i,this);for(var r=this._events.length-1;r>=0;r--){var n=this._events[r];n instanceof t.Part?n._forEach(e,i):e.call(i,n)}}return this},t.Part.prototype._setAll=function(t,e){this._forEach(function(i){i[t]=e})},t.Part.prototype._tick=function(t,e){this.mute||this.callback(t,e)},t.Part.prototype._testLoopBoundries=function(e){e.startOffset=this._loopEnd?e.cancel(0):e.state===t.State.Stopped&&this._restartEvent(e)},Object.defineProperty(t.Part.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t,this._setAll("probability",t)}}),Object.defineProperty(t.Part.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t,this._setAll("humanize",t)}}),Object.defineProperty(t.Part.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._forEach(function(e){e._loopStart=this._loopStart,e._loopEnd=this._loopEnd,e.loop=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._forEach(function(e){e.loopEnd=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._forEach(function(t){t.loopStart=this.loopStart,this._testLoopBoundries(t)})}}),Object.defineProperty(t.Part.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._setAll("playbackRate",t)}}),Object.defineProperty(t.Part.prototype,"length",{get:function(){return this._events.length}}),t.Part.prototype.dispose=function(){return this.removeAll(),this._state.dispose(),this._state=null,this.callback=null,this._events=null,this},t.Part}),e(function(t){return t.Pattern=function(){var e=t.defaults(arguments,["callback","values","pattern"],t.Pattern);t.Loop.call(this,e),this._pattern=new t.CtrlPattern({values:e.values,type:e.pattern,index:e.index})},t.extend(t.Pattern,t.Loop),t.Pattern.defaults={pattern:t.CtrlPattern.Type.Up,callback:t.noOp,values:[]},t.Pattern.prototype._tick=function(t){this.callback(t,this._pattern.value),this._pattern.next()},Object.defineProperty(t.Pattern.prototype,"index",{get:function(){return this._pattern.index},set:function(t){this._pattern.index=t}}),Object.defineProperty(t.Pattern.prototype,"values",{get:function(){return this._pattern.values},set:function(t){this._pattern.values=t}}),Object.defineProperty(t.Pattern.prototype,"value",{get:function(){return this._pattern.value}}),Object.defineProperty(t.Pattern.prototype,"pattern",{get:function(){return this._pattern.type},set:function(t){this._pattern.type=t}}),t.Pattern.prototype.dispose=function(){t.Loop.prototype.dispose.call(this),this._pattern.dispose(),this._pattern=null},t.Pattern}),e(function(t){return t.Sequence=function(){var e=t.defaults(arguments,["callback","events","subdivision"],t.Sequence),i=e.events;if(delete e.events,t.Part.call(this,e),this._subdivision=this.toTicks(e.subdivision),t.isUndef(e.loopEnd)&&t.isDefined(i)&&(this._loopEnd=i.length*this._subdivision),this._loop=!0,t.isDefined(i))for(var r=0;r1){var e=-t/2,i=t/(this._oscillators.length-1);this._forEach(function(t,r){t.detune.value=e+i*r})}}}),Object.defineProperty(t.FatOscillator.prototype,"count",{get:function(){return this._oscillators.length},set:function(e){if(e=Math.max(e,1),this._oscillators.length!==e){this._forEach(function(t){t.dispose()}),this._oscillators=[];for(var i=0;i0&&this.getLevelAtTime(e)>.05){var i=this.toSeconds(this.portamento);this.frequency.exponentialRampTo(t,i,e)}else this.frequency.setValueAtTime(t,e);return this},t.Monophonic}),e(function(t){return t.Synth=function(e){e=t.defaultArg(e,t.Synth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","frequency","detune","envelope"])},t.extend(t.Synth,t.Monophonic),t.Synth.defaults={oscillator:{type:"triangle"},envelope:{attack:.005,decay:.1,sustain:.3,release:1}},t.Synth.prototype._triggerEnvelopeAttack=function(t,e){return this.envelope.triggerAttack(t,e),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.Synth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.Synth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.frequency=null,this.detune=null,this},t.Synth}),e(function(t){return t.AMSynth=function(e){e=t.defaultArg(e,t.AMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth,this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth,this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this._modulationScale=new t.AudioToGain,this._modulationNode=new t.Gain,this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.chain(this._modulationScale,this._modulationNode.gain),this._carrier.chain(this._modulationNode,this.output),this._readOnly(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.AMSynth,t.Monophonic),t.AMSynth.defaults={harmonicity:3,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.AMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.AMSynth.prototype._triggerEnvelopeRelease=function(t){return this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.AMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationScale.dispose(),this._modulationScale=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.AMSynth}),e(function(t){return t.MonoSynth=function(e){e=t.defaultArg(e,t.MonoSynth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.filter=new t.Filter(e.filter),this.filterEnvelope=new t.FrequencyEnvelope(e.filterEnvelope),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.filter,this.envelope,this.output),this.filterEnvelope.connect(this.filter.frequency),this._readOnly(["oscillator","frequency","detune","filter","filterEnvelope","envelope"])},t.extend(t.MonoSynth,t.Monophonic),t.MonoSynth.defaults={frequency:"C4",detune:0,oscillator:{type:"square"},filter:{Q:6,type:"lowpass",rolloff:-24},envelope:{attack:.005,decay:.1,sustain:.9,release:1},filterEnvelope:{attack:.06,decay:.2,sustain:.5,release:2,baseFrequency:200,octaves:7,exponent:2}},t.MonoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.envelope.triggerAttack(t,e),this.filterEnvelope.triggerAttack(t),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.MonoSynth.prototype._triggerEnvelopeRelease=function(t){return this.envelope.triggerRelease(t),this.filterEnvelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MonoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","filter","filterEnvelope","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.filterEnvelope.dispose(),this.filterEnvelope=null,this.filter.dispose(),this.filter=null,this.frequency=null,this.detune=null,this},t.MonoSynth}),e(function(t){return t.DuoSynth=function(e){e=t.defaultArg(e,t.DuoSynth.defaults),t.Monophonic.call(this,e),this.voice0=new t.MonoSynth(e.voice0),this.voice0.volume.value=-10,this.voice1=new t.MonoSynth(e.voice1),this.voice1.volume.value=-10,this._vibrato=new t.LFO(e.vibratoRate,-50,50),this._vibrato.start(),this.vibratoRate=this._vibrato.frequency,this._vibratoGain=new t.Gain(e.vibratoAmount,t.Type.Positive),this.vibratoAmount=this._vibratoGain.gain,this.frequency=new t.Signal(440,t.Type.Frequency),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.frequency.connect(this.voice0.frequency),this.frequency.chain(this.harmonicity,this.voice1.frequency),this._vibrato.connect(this._vibratoGain),this._vibratoGain.fan(this.voice0.detune,this.voice1.detune),this.voice0.connect(this.output),this.voice1.connect(this.output),this._readOnly(["voice0","voice1","frequency","vibratoAmount","vibratoRate"])},t.extend(t.DuoSynth,t.Monophonic),t.DuoSynth.defaults={vibratoAmount:.5,vibratoRate:5,harmonicity:1.5,voice0:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}},voice1:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}}},t.DuoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.voice0._triggerEnvelopeAttack(t,e),this.voice1._triggerEnvelopeAttack(t,e),this},t.DuoSynth.prototype._triggerEnvelopeRelease=function(t){return this.voice0._triggerEnvelopeRelease(t),this.voice1._triggerEnvelopeRelease(t),this},t.DuoSynth.prototype.getLevelAtTime=function(t){return(this.voice0.getLevelAtTime(t)+this.voice1.getLevelAtTime(t))/2},t.DuoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["voice0","voice1","frequency","vibratoAmount","vibratoRate"]),this.voice0.dispose(),this.voice0=null,this.voice1.dispose(),this.voice1=null,this.frequency.dispose(),this.frequency=null,this._vibratoGain.dispose(),this._vibratoGain=null,this._vibrato=null,this.harmonicity.dispose(),this.harmonicity=null,this.vibratoAmount.dispose(),this.vibratoAmount=null,this.vibratoRate=null,this},t.DuoSynth}),e(function(t){return t.FMSynth=function(e){e=t.defaultArg(e,t.FMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth(e.carrier),this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth(e.modulator),this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.modulationIndex=new t.Multiply(e.modulationIndex),this.modulationIndex.units=t.Type.Positive,this._modulationNode=new t.Gain(0),this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.frequency.chain(this.modulationIndex,this._modulationNode),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.connect(this._modulationNode.gain),this._modulationNode.connect(this._carrier.frequency),this._carrier.connect(this.output),this._readOnly(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.FMSynth,t.Monophonic),t.FMSynth.defaults={harmonicity:3,modulationIndex:10,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.FMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.FMSynth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.FMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.modulationIndex.dispose(),this.modulationIndex=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.FMSynth}),e(function(t){return t.MembraneSynth=function(e){e=t.defaultArg(e,t.MembraneSynth.defaults),t.Instrument.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.octaves=e.octaves,this.pitchDecay=e.pitchDecay,this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","envelope"])},t.extend(t.MembraneSynth,t.Instrument),t.MembraneSynth.defaults={pitchDecay:.05,octaves:10,oscillator:{type:"sine"},envelope:{attack:.001,decay:.4,sustain:.01,release:1.4,attackCurve:"exponential"}},t.MembraneSynth.prototype.triggerAttack=function(t,e,i){e=this.toSeconds(e);var r=(t=this.toFrequency(t))*this.octaves;return this.oscillator.frequency.setValueAtTime(r,e),this.oscillator.frequency.exponentialRampToValueAtTime(t,e+this.toSeconds(this.pitchDecay)),this.envelope.triggerAttack(e,i),this.oscillator.start(e),this},t.MembraneSynth.prototype.triggerRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MembraneSynth.prototype.dispose=function(){return t.Instrument.prototype.dispose.call(this),this._writable(["oscillator","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this},t.MembraneSynth}),e(function(t){var e=[1,1.483,1.932,2.546,2.63,3.897];return t.MetalSynth=function(i){i=t.defaultArg(i,t.MetalSynth.defaults),t.Instrument.call(this,i),this.frequency=new t.Signal(i.frequency,t.Type.Frequency),this._oscillators=[],this._freqMultipliers=[],this._amplitue=new t.Gain(0).connect(this.output),this._highpass=new t.Filter({type:"highpass",Q:-3.0102999566398125}).connect(this._amplitue),this._octaves=i.octaves,this._filterFreqScaler=new t.Scale(i.resonance,7e3),this.envelope=new t.Envelope({attack:i.envelope.attack,attackCurve:"linear",decay:i.envelope.decay,sustain:0,release:i.envelope.release}).chain(this._filterFreqScaler,this._highpass.frequency),this.envelope.connect(this._amplitue.gain);for(var r=0;re&&(o.voice.triggerRelease(e),o.release=e)}return this},t.PolySynth.prototype.sync=function(){return this._syncMethod("triggerAttack",1),this._syncMethod("triggerRelease",1),this},t.PolySynth.prototype.set=function(t,e,i){for(var r=0;rt&&(i.release=t,i.voice.triggerRelease(t))}return this},t.PolySynth.prototype.dispose=function(){t.Instrument.prototype.dispose.call(this);for(var e=0;e0)r=i[0];else if(!r&&t.isDefined(e))throw new Error("Tone.UserMedia: no matching device: "+e);this._device=r;var n={audio:{echoCancellation:!1,sampleRate:this.context.sampleRate}};return r&&(n.audio.deviceId=r.deviceId),navigator.mediaDevices.getUserMedia(n).then(function(t){return this._stream||(this._stream=t,this._mediaStream=this.context.createMediaStreamSource(t),this._mediaStream.connect(this.output)),this}.bind(this))}.bind(this))},t.UserMedia.prototype.close=function(){return this._stream&&(this._stream.getAudioTracks().forEach(function(t){t.stop()}),this._stream=null,this._mediaStream.disconnect(),this._mediaStream=null),this._device=null,this},t.UserMedia.enumerateDevices=function(){return navigator.mediaDevices.enumerateDevices().then(function(t){return t.filter(function(t){return"audioinput"===t.kind})})},Object.defineProperty(t.UserMedia.prototype,"state",{get:function(){return this._stream&&this._stream.active?t.State.Started:t.State.Stopped}}),Object.defineProperty(t.UserMedia.prototype,"deviceId",{get:function(){if(this._device)return this._device.deviceId}}),Object.defineProperty(t.UserMedia.prototype,"groupId",{get:function(){if(this._device)return this._device.groupId}}),Object.defineProperty(t.UserMedia.prototype,"label",{get:function(){if(this._device)return this._device.label}}),Object.defineProperty(t.UserMedia.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.UserMedia.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.close(),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null,this},Object.defineProperty(t.UserMedia,"supported",{get:function(){return t.isDefined(navigator.mediaDevices)&&t.isFunction(navigator.mediaDevices.getUserMedia)}}),t.UserMedia}),e(function(t){return t.Midi=function(e,i){if(!(this instanceof t.Midi))return new t.Midi(e,i);t.Frequency.call(this,e,i)},t.extend(t.Midi,t.Frequency),t.Midi.prototype._defaultUnits="midi",t.Midi.prototype._frequencyToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._frequencyToUnits.call(this,e))},t.Midi.prototype._ticksToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._ticksToUnits.call(this,e))},t.Midi.prototype._beatsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._beatsToUnits.call(this,e))},t.Midi.prototype._secondsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._secondsToUnits.call(this,e))},t.Midi.prototype.toMidi=function(){return this.valueOf()},t.Midi.prototype.toFrequency=function(){return t.Frequency.mtof(this.toMidi())},t.Midi.prototype.transpose=function(t){return new this.constructor(this.toMidi()+t)},t.Midi}),t}()}.call(e,i,e,t))||(t.exports=r)},function(t,e,i){(function(e){var i;t.exports=function t(e,r,n){function o(a,h){if(!r[a]){if(!e[a]){var l="function"==typeof i&&i;if(!h&&l)return i(a,!0);if(s)return s(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var c=r[a]={exports:{}};e[a][0].call(c.exports,function(t){var i=e[a][1][t];return o(i||t)},c,c.exports,t,e,r,n)}return r[a].exports}for(var s="function"==typeof i&&i,a=0;a0)throw new Error("Invalid string. Length must be a multiple of 4");var u=t.length;h="="===t.charAt(u-2)?2:"="===t.charAt(u-1)?1:0,l=new i(3*t.length/4-h),s=h>0?t.length-4:t.length;var c=0;for(n=0,o=0;n>16),r((65280&a)>>8),r(255&a);return 2===h?r(255&(a=e(t.charAt(n))<<2|e(t.charAt(n+1))>>4)):1===h&&(r((a=e(t.charAt(n))<<10|e(t.charAt(n+1))<<4|e(t.charAt(n+2))>>2)>>8&255),r(255&a)),l},t.fromByteArray=function(t){function e(t){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t)}function i(t){return e(t>>18&63)+e(t>>12&63)+e(t>>6&63)+e(63&t)}var r,n,o,s=t.length%3,a="";for(r=0,o=t.length-s;r>2),a+=e(n<<4&63),a+="==";break;case 2:n=(t[t.length-2]<<8)+t[t.length-1],a+=e(n>>10),a+=e(n>>4&63),a+=e(n<<2&63),a+="="}return a}}(void 0===i?this.base64js={}:i)},{}],2:[function(t,e,i){},{}],3:[function(t,i,r){(function(e){"use strict";function i(){return n.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function n(t){return this instanceof n?(n.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof t?function(t,e){if(t=s(t,e<0?0:0|a(e)),!n.TYPED_ARRAY_SUPPORT)for(var i=0;i1?arguments[1]:"utf8"):function(t,e){if(n.isBuffer(e))return function(t,e){var i=0|a(e.length);return t=s(t,i),e.copy(t,0,0,i),t}(t,e);if(F(e))return function(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r1?new n(t,arguments[1]):new n(t)}function o(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r>>1&&(t.parent=I),t}function a(t){if(t>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|t}function h(t,e){"string"!=typeof t&&(t=""+t);var i=t.length;if(0===i)return 0;for(var r=!1;;)switch(e){case"ascii":case"binary":case"raw":case"raws":return i;case"utf8":case"utf-8":return k(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return C(t).length;default:if(r)return k(t).length;e=(""+e).toLowerCase(),r=!0}}function l(t,e,i,r){i=Number(i)||0;var n=t.length-i;r?(r=Number(r))>n&&(r=n):r=n;var o=e.length;if(o%2!=0)throw new Error("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,n=i%256,o.push(n),o.push(r);return o}(e,t.length-i),t,i,r)}function m(t,e,i){return 0===e&&i===t.length?O.fromByteArray(t):O.fromByteArray(t.slice(e,i))}function y(t,e,i){i=Math.min(t.length,i);for(var r=[],n=e;n239?4:l>223?3:l>191?2:1;if(n+c<=i)switch(c){case 1:l<128&&(u=l);break;case 2:128==(192&(o=t[n+1]))&&(h=(31&l)<<6|63&o)>127&&(u=h);break;case 3:o=t[n+1],s=t[n+2],128==(192&o)&&128==(192&s)&&(h=(15&l)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(u=h);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&l)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(u=h)}null===u?(u=65533,c=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),n+=c}return function(t){var e=t.length;if(e<=D)return String.fromCharCode.apply(String,t);for(var i="",r=0;rr)&&(i=r);for(var n="",o=e;oi)throw new RangeError("Trying to access beyond buffer length")}function x(t,e,i,r,o,s){if(!n.isBuffer(t))throw new TypeError("buffer must be a Buffer instance");if(e>o||et.length)throw new RangeError("index out of range")}function w(t,e,i,r){e<0&&(e=65535+e+1);for(var n=0,o=Math.min(t.length-i,2);n>>8*(r?n:1-n)}function T(t,e,i,r){e<0&&(e=4294967295+e+1);for(var n=0,o=Math.min(t.length-i,4);n>>8*(r?n:3-n)&255}function A(t,e,i,r,n,o){if(e>n||et.length)throw new RangeError("index out of range");if(i<0)throw new RangeError("index out of range")}function P(t,e,i,r,n){return n||A(t,e,i,4,3.4028234663852886e38,-3.4028234663852886e38),L.write(t,e,i,r,23,4),i+4}function M(t,e,i,r,n){return n||A(t,e,i,8,1.7976931348623157e308,-1.7976931348623157e308),L.write(t,e,i,r,52,8),i+8}function E(t){return t<16?"0"+t.toString(16):t.toString(16)}function k(t,e){e=e||1/0;for(var i,r=t.length,n=null,o=[],s=0;s55295&&i<57344){if(!n){if(i>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}n=i;continue}if(i<56320){(e-=3)>-1&&o.push(239,191,189),n=i;continue}i=65536+(n-55296<<10|i-56320)}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,i<128){if((e-=1)<0)break;o.push(i)}else if(i<2048){if((e-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((e-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function C(t){return O.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(B,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function R(t,e,i,r){for(var n=0;n=e.length||n>=t.length);n++)e[n+i]=t[n];return n}var O=t("base64-js"),L=t("ieee754"),F=t("isarray");r.Buffer=n,r.SlowBuffer=function t(e,i){if(!(this instanceof t))return new t(e,i);var r=new n(e,i);return delete r.parent,r},r.INSPECT_MAX_BYTES=50,n.poolSize=8192;var I={};n.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){function t(){}try{var e=new Uint8Array(1);return e.foo=function(){return 42},e.constructor=t,42===e.foo()&&e.constructor===t&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}(),n.TYPED_ARRAY_SUPPORT?(n.prototype.__proto__=Uint8Array.prototype,n.__proto__=Uint8Array):(n.prototype.length=void 0,n.prototype.parent=void 0),n.isBuffer=function(t){return!(null==t||!t._isBuffer)},n.compare=function(t,e){if(!n.isBuffer(t)||!n.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var i=t.length,r=e.length,o=0,s=Math.min(i,r);othis.length&&(i=this.length),i<=e)return"";for(;;)switch(t){case"hex":return _(this,e,i);case"utf8":case"utf-8":return y(this,e,i);case"ascii":return v(this,e,i);case"binary":return g(this,e,i);case"base64":return m(this,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return b(this,e,i);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}.apply(this,arguments)},n.prototype.equals=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===n.compare(this,t)},n.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},n.prototype.compare=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?0:n.compare(this,t)},n.prototype.indexOf=function(t,e){function i(t,e,i){for(var r=-1,n=0;i+n2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e>>=0,0===this.length)return-1;if(e>=this.length)return-1;if(e<0&&(e=Math.max(this.length+e,0)),"string"==typeof t)return 0===t.length?-1:String.prototype.indexOf.call(this,t,e);if(n.isBuffer(t))return i(this,t,e);if("number"==typeof t)return n.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,t,e):i(this,[t],e);throw new TypeError("val must be string, number or Buffer")},n.prototype.get=function(t){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(t)},n.prototype.set=function(t,e){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(t,e)},n.prototype.write=function(t,e,i,r){if(void 0===e)r="utf8",i=this.length,e=0;else if(void 0===i&&"string"==typeof e)r=e,i=this.length,e=0;else if(isFinite(e))e|=0,isFinite(i)?(i|=0,void 0===r&&(r="utf8")):(r=i,i=void 0);else{var n=r;r=e,e=0|i,i=n}var o=this.length-e;if((void 0===i||i>o)&&(i=o),t.length>0&&(i<0||e<0)||e>this.length)throw new RangeError("attempt to write outside buffer bounds");r||(r="utf8");for(var s=!1;;)switch(r){case"hex":return l(this,t,e,i);case"utf8":case"utf-8":return u(this,t,e,i);case"ascii":return c(this,t,e,i);case"binary":return p(this,t,e,i);case"base64":return d(this,t,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return f(this,t,e,i);default:if(s)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),s=!0}},n.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var D=4096;n.prototype.slice=function(t,e){var i,r=this.length;if(t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(n*=256);)r+=this[t+--e]*n;return r},n.prototype.readUInt8=function(t,e){return e||S(t,1,this.length),this[t]},n.prototype.readUInt16LE=function(t,e){return e||S(t,2,this.length),this[t]|this[t+1]<<8},n.prototype.readUInt16BE=function(t,e){return e||S(t,2,this.length),this[t]<<8|this[t+1]},n.prototype.readUInt32LE=function(t,e){return e||S(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},n.prototype.readUInt32BE=function(t,e){return e||S(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},n.prototype.readIntLE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=this[t],n=1,o=0;++o=(n*=128)&&(r-=Math.pow(2,8*e)),r},n.prototype.readIntBE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=e,n=1,o=this[t+--r];r>0&&(n*=256);)o+=this[t+--r]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},n.prototype.readInt8=function(t,e){return e||S(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},n.prototype.readInt16LE=function(t,e){e||S(t,2,this.length);var i=this[t]|this[t+1]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt16BE=function(t,e){e||S(t,2,this.length);var i=this[t+1]|this[t]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt32LE=function(t,e){return e||S(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},n.prototype.readInt32BE=function(t,e){return e||S(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},n.prototype.readFloatLE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!0,23,4)},n.prototype.readFloatBE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!1,23,4)},n.prototype.readDoubleLE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!0,52,8)},n.prototype.readDoubleBE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!1,52,8)},n.prototype.writeUIntLE=function(t,e,i,r){t=+t,e|=0,i|=0,r||x(this,t,e,i,Math.pow(2,8*i),0);var n=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+n]=t/o&255;return e+i},n.prototype.writeUInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,255,0),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},n.prototype.writeUInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeUInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeUInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):T(this,t,e,!0),e+4},n.prototype.writeUInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeIntLE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=0,s=1,a=t<0?1:0;for(this[e]=255&t;++o>0)-a&255;return e+i},n.prototype.writeIntBE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=i-1,s=1,a=t<0?1:0;for(this[e+o]=255&t;--o>=0&&(s*=256);)this[e+o]=(t/s>>0)-a&255;return e+i},n.prototype.writeInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,127,-128),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},n.prototype.writeInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):T(this,t,e,!0),e+4},n.prototype.writeInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeFloatLE=function(t,e,i){return P(this,t,e,!0,i)},n.prototype.writeFloatBE=function(t,e,i){return P(this,t,e,!1,i)},n.prototype.writeDoubleLE=function(t,e,i){return M(this,t,e,!0,i)},n.prototype.writeDoubleBE=function(t,e,i){return M(this,t,e,!1,i)},n.prototype.copy=function(t,e,i,r){if(i||(i=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;o--)t[o+e]=this[o+i];else if(s<1e3||!n.TYPED_ARRAY_SUPPORT)for(o=0;o=this.length)throw new RangeError("start out of bounds");if(i<0||i>this.length)throw new RangeError("end out of bounds");var r;if("number"==typeof t)for(r=e;r>1,u=-7,c=i?n-1:0,p=i?-1:1,d=t[e+c];for(c+=p,o=d&(1<<-u)-1,d>>=-u,u+=a;u>0;o=256*o+t[e+c],c+=p,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=r;u>0;s=256*s+t[e+c],c+=p,u-=8);if(0===o)o=1-l;else{if(o===h)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,r),o-=l}return(d?-1:1)*s*Math.pow(2,o-r)},i.write=function(t,e,i,r,n,o){var s,a,h,l=8*o-n-1,u=(1<>1,p=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,f=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+c>=1?p/h:p*Math.pow(2,1-c))*h>=2&&(s++,h/=2),s+c>=u?(a=0,s=u):s+c>=1?(a=(e*h-1)*Math.pow(2,n),s+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,n),s=0));n>=8;t[i+d]=255&a,d+=f,a/=256,n-=8);for(s=s<0;t[i+d]=255&s,d+=f,s/=256,l-=8);t[i+d-f]|=128*m}},{}],8:[function(t,e,i){var r={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},{}],9:[function(t,e,i){"use strict";function r(t,e){return t.b===e.b&&t.a===e.a}function n(t,e){return t.bt?0:t)<=(i=0>i?0:i)?0===i?(e+r)/2:e+t/(t+i)*(r-e):r+i/(t+i)*(e-r)}function d(t){var e=g(t.b);return b(e,t.c),b(e.b,t.c),S(e,t.a),e}function f(t,e){var i=!1,r=!1;t!==e&&(e.a!==t.a&&(r=!0,w(e.a,t.a)),e.d!==t.d&&(i=!0,T(e.d,t.d)),_(e,t),r||(b(e,t.a),t.a.c=t),i||(S(e,t.d),t.d.a=t))}function m(t){var e=t.b,i=!1;t.d!==t.b.d&&(i=!0,T(t.d,t.b.d)),t.c===t?w(t.a,null):(t.b.d.a=J(t),t.a.c=t.c,_(t,J(t)),i||S(t,t.d)),e.c===e?(w(e.a,null),T(e.d,null)):(t.d.a=J(e),e.a.c=e.c,_(e,J(e))),x(t)}function y(t){var e=g(t),i=e.b;return _(e,t.e),e.a=t.b.a,b(i,e.a),e.d=i.d=t.d,e=e.b,_(t.b,J(t.b)),_(t.b,e),t.b.a=e.a,e.b.a.c=e.b,e.b.d=t.b.d,e.f=t.f,e.b.f=t.b.f,e}function v(t,e){var i=!1,r=g(t),n=r.b;return e.d!==t.d&&(i=!0,T(e.d,t.d)),_(r,t.e),_(n,e),r.a=t.b.a,n.a=e.a,r.d=n.d=t.d,t.d.a=n,i||S(r,t.d),r}function g(t){var e=new Z,i=new Z,r=t.b.h;return i.h=r,r.b.h=e,e.h=t,t.b.h=i,e.b=i,e.c=e,e.e=i,i.b=e,i.c=i,i.e=e}function _(t,e){var i=t.c,r=e.c;i.b.e=e,r.b.e=t,t.c=r,e.c=i}function b(t,e){var i=e.f,r=new K(e,i);i.e=r,e.f=r,i=r.c=t;do{i.a=r,i=i.c}while(i!==t)}function S(t,e){var i=e.d,r=new Q(e,i);i.b=r,e.d=r,r.a=t,r.c=e.c,i=t;do{i.d=r,i=i.e}while(i!==t)}function x(t){var e=t.h;t=t.b.h,e.b.h=t,t.b.h=e}function w(t,e){var i=t.c,r=i;do{r.a=e,r=r.c}while(r!==i);i=t.f,(r=t.e).f=i,i.e=r}function T(t,e){var i=t.a,r=i;do{r.d=e,r=r.e}while(r!==i);i=t.d,(r=t.b).d=i,i.b=r}function A(t){var e=0;return Math.abs(t[1])>Math.abs(t[0])&&(e=1),Math.abs(t[2])>Math.abs(t[e])&&(e=2),e}function P(t,e){t.f+=e.f,t.b.f+=e.b.f}function M(t,e,i){return t=t.a,e=e.a,i=i.a,e.b.a===t?i.b.a===t?n(e.a,i.a)?0>=s(i.b.a,e.a,i.a):0<=s(e.b.a,i.a,e.a):0>=s(i.b.a,t,i.a):i.b.a===t?0<=s(e.b.a,t,e.a):(e=o(e.b.a,t,e.a),t=o(i.b.a,t,i.a),e>=t)}function E(t){t.a.i=null;var e=t.e;e.a.c=e.c,e.c.a=e.a,t.e=null}function k(t,e){m(t.a),t.c=!1,t.a=e,e.i=t}function C(t){var e=t.a.a;do{t=ut(t)}while(t.a.a===e);return t.c&&(e=v(lt(t).a.b,t.a.e),k(t,e),t=ut(t)),t}function R(t,e,i){var r=new ht;return r.a=i,r.e=z(t.f,e.e,r),i.i=r}function O(t,e){switch(t.s){case 100130:return 0!=(1&e);case 100131:return 0!==e;case 100132:return 0e;case 100134:return 2<=e||-2>=e}return!1}function L(t){var e=t.a,i=e.d;i.c=t.d,i.a=e,E(t)}function F(t,e,i){for(t=e,e=e.a;t!==i;){t.c=!1;var r=lt(t),n=r.a;if(n.a!==e.a){if(!r.c){L(t);break}n=v(e.c.b,n.b),k(r,n)}e.c!==n&&(f(J(n),n),f(e,n)),L(t),e=r.a,t=r}return e}function I(t,e,i,r,n,o){var s=!0;do{R(t,e,i.b),i=i.c}while(i!==r);for(null===n&&(n=lt(e).a.b.c);r=lt(e),(i=r.a.b).a===n.a;)i.c!==n&&(f(J(i),i),f(J(n),i)),r.f=e.f-i.f,r.d=O(t,r.f),e.b=!0,!s&&N(t,e)&&(P(i,n),E(e),m(n)),s=!1,e=r,n=i;e.b=!0,o&&q(t,e)}function D(t,e,i,r,n){var o=[e.g[0],e.g[1],e.g[2]];e.d=null,e.d=t.o&&t.o(o,i,r,t.c)||null,null===e.d&&(n?t.n||(Y(t,100156),t.n=!0):e.d=i[0])}function U(t,e,i){var r=[null,null,null,null];r[0]=e.a.d,r[1]=i.a.d,D(t,e.a,r,[.5,.5,0,0],!1),f(e,i)}function B(t,e,i,r,n){var o=Math.abs(e.b-t.b)+Math.abs(e.a-t.a),s=Math.abs(i.b-t.b)+Math.abs(i.a-t.a),a=n+1;r[n]=.5*s/(o+s),r[a]=.5*o/(o+s),t.g[0]+=r[n]*e.g[0]+r[a]*i.g[0],t.g[1]+=r[n]*e.g[1]+r[a]*i.g[1],t.g[2]+=r[n]*e.g[2]+r[a]*i.g[2]}function N(t,e){var i=lt(e),o=e.a,a=i.a;if(n(o.a,a.a)){if(0=p?st(i,p):n(u[l[p>>1]],u[l[p]])?st(i,p):at(i,p)),u[h]=null,c[h]=i.b,i.b=h}else for(i.c[-(h+1)]=null;0s(o.b.a,a.a,o.a))return!1;ut(e).b=e.b=!0,y(o.b),f(J(a),o)}return!0}function G(t,e){var i=lt(e),u=e.a,c=i.a,d=u.a,m=c.a,v=u.b.a,g=c.b.a,_=new K;if(s(v,t.a,d),s(g,t.a,m),d===m||Math.min(d.a,v.a)>Math.max(m.a,g.a))return!1;if(n(d,m)){if(0s(v,m,d))return!1;var b,S,x=v,w=d,T=g,A=m;if(n(x,w)||(b=x,x=w,w=b),n(T,A)||(b=T,T=A,A=b),n(x,T)||(b=x,x=T,T=b,b=w,w=A,A=b),n(T,w)?n(w,A)?(b=o(x,T,w),S=o(T,w,A),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,w.b)):(b=s(x,T,w),S=-s(x,A,w),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,A.b)):_.b=(T.b+w.b)/2,a(x,w)||(b=x,x=w,w=b),a(T,A)||(b=T,T=A,A=b),a(x,T)||(b=x,x=T,T=b,b=w,w=A,A=b),a(T,w)?a(w,A)?(b=h(x,T,w),S=h(T,w,A),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,w.a)):(b=l(x,T,w),S=-l(x,A,w),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,A.a)):_.a=(T.a+w.a)/2,n(_,t.a)&&(_.b=t.a.b,_.a=t.a.a),n(x=n(d,m)?d:m,_)&&(_.b=x.b,_.a=x.a),r(_,d)||r(_,m))return N(t,e),!1;if(!r(v,t.a)&&0<=s(v,t.a,_)||!r(g,t.a)&&0>=s(g,t.a,_)){if(g===t.a)return y(u.b),f(c.b,u),e=C(e),u=lt(e).a,F(t,lt(e),i),I(t,e,J(u),u,u,!0),!0;if(v===t.a){y(c.b),f(u.e,J(c)),d=i=e,m=d.a.b.a;do{d=ut(d)}while(d.a.b.a===m);return d=lt(e=d).a.b.c,i.a=J(c),c=F(t,i,null),I(t,e,c.c,u.b.c,d,!0),!0}return 0<=s(v,t.a,_)&&(ut(e).b=e.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=s(g,t.a,_)&&(e.b=i.b=!0,y(c.b),c.a.b=t.a.b,c.a.a=t.a.a),!1}return y(u.b),y(c.b),f(J(c),u),u.a.b=_.b,u.a.a=_.a,u.a.h=et(t.e,u.a),u=u.a,c=[0,0,0,0],_=[d.d,v.d,m.d,g.d],u.g[0]=u.g[1]=u.g[2]=0,B(u,d,v,c,0),B(u,m,g,c,2),D(t,u,_,c,!0),ut(e).b=e.b=i.b=!0,!1}function q(t,e){for(var i=lt(e);;){for(;i.b;)e=i,i=lt(i);if(!e.b&&(i=e,null===(e=ut(e))||!e.b))break;e.b=!1;var r,o=e.a,a=i.a;if(r=o.b.a!==a.b.a)t:{var h=lt(r=e),l=r.a,u=h.a,c=void 0;if(n(l.b.a,u.b.a)){if(0>s(l.b.a,u.b.a,l.a)){r=!1;break t}ut(r).b=r.b=!0,c=y(l),f(u.b,c),c.d.c=r.d}else{if(0r.f&&(r.f*=2,r.c=rt(r.c,r.f+1)),0===r.b?i=n:(i=r.b,r.b=r.c[r.b]),r.e[i]=e,r.c[i]=n,r.d[n]=i,r.h&&at(r,n),i}return r=t.a++,t.c[r]=e,-(r+1)}function it(t){if(0===t.a)return ot(t.b);var e=t.c[t.d[t.a-1]];if(0!==t.b.a&&n(nt(t.b),e))return ot(t.b);do{--t.a}while(0t.a||n(r[a],r[l])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function at(t,e){for(var i=t.d,r=t.e,o=t.c,s=e,a=i[s];;){var h=s>>1,l=i[h];if(0===h||n(r[l],r[a])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function ht(){this.e=this.a=null,this.f=0,this.c=this.b=this.h=this.d=!1}function lt(t){return t.e.c.b}function ut(t){return t.e.a.b}var ct,pt=4e150,dt=0;(ct=H.prototype).x=function(){X(this,dt)},ct.B=function(t,e){switch(t){case 100142:return;case 100140:switch(e){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=e)}break;case 100141:return void(this.m=!!e);default:return void Y(this,100900)}Y(this,100901)},ct.y=function(t){switch(t){case 100142:return 0;case 100140:return this.s;case 100141:return this.m;default:Y(this,100900)}return!1},ct.A=function(t,e,i){this.j[0]=t,this.j[1]=e,this.j[2]=i},ct.z=function(t,e){var i=e||null;switch(t){case 100100:case 100106:this.h=i;break;case 100104:case 100110:this.l=i;break;case 100101:case 100107:this.k=i;break;case 100102:case 100108:this.i=i;break;case 100103:case 100109:this.p=i;break;case 100105:case 100111:this.o=i;break;case 100112:this.r=i;break;default:Y(this,100900)}},ct.C=function(t,e){var i=!1,r=[0,0,0];X(this,2);for(var n=0;3>n;++n){var o=t[n];-1e150>o&&(o=-1e150,i=!0),1e150p;++p){var d=t.g[p];de[p]&&(e[p]=d,i[p]=t)}if(t=0,e[1]-h[1]>e[0]-h[0]&&(t=1),e[2]-h[2]>e[t]-h[t]&&(t=2),h[t]>=e[t])a[0]=0,a[1]=0,a[2]=1;else{for(e=0,h=l[t],i=i[t],l=[0,0,0],h=[h.g[0]-i.g[0],h.g[1]-i.g[1],h.g[2]-i.g[2]],p=[0,0,0],t=o.e;t!==o;t=t.e)p[0]=t.g[0]-i.g[0],p[1]=t.g[1]-i.g[1],p[2]=t.g[2]-i.g[2],l[0]=h[1]*p[2]-h[2]*p[1],l[1]=h[2]*p[0]-h[0]*p[2],l[2]=h[0]*p[1]-h[1]*p[0],(d=l[0]*l[0]+l[1]*l[1]+l[2]*l[2])>e&&(e=d,a[0]=l[0],a[1]=l[1],a[2]=l[2]);0>=e&&(a[0]=a[1]=a[2]=0,a[A(h)]=1)}o=!0}for(l=A(a),t=this.b.c,e=(l+1)%3,i=(l+2)%3,l=0=(e=t.a).f))do{a+=(e.a.b-e.b.a.b)*(e.a.a+e.b.a.a),e=e.e}while(e!==t.a);if(0>a)for(a=this.b.c,o=a.e;o!==a;o=o.e)o.a=-o.a}for(this.n=!1,a=this.b.b,t=a.h;t!==a;t=o)o=t.h,e=t.e,r(t.a,t.b.a)&&t.e.e!==t&&(U(this,e,t),m(t),e=(t=e).e),e.e===t&&(e!==t&&(e!==o&&e!==o.b||(o=o.h),m(e)),t!==o&&t!==o.b||(o=o.h),m(t));for(this.e=a=new $,o=this.b.c,t=o.e;t!==o;t=t.e)t.h=et(a,t);for(tt(a),this.f=new function(t){this.a=new W,this.b=t,this.c=M}(this),j(this,-pt),j(this,pt);null!==(a=it(this.e));){for(;;){t:if(t=this.e,0===t.a)o=nt(t.b);else if(o=t.c[t.d[t.a-1]],0!==t.b.a&&(t=nt(t.b),n(t,o))){o=t;break t}if(null===o||!r(o,a))break;o=it(this.e),U(this,a.c,o.c)}V(this,a)}for(this.a=this.f.a.a.b.a.a,a=0;null!==(o=this.f.a.a.b);)o.h||++a,E(o);for(this.f=null,(a=this.e).b=null,a.d=null,this.e=a.c=null,a=this.b,t=a.a.b;t!==a.a;t=o)o=t.b,(t=t.a).e.e===t&&(P(t.c,t),m(t));if(!this.n){if(a=this.b,this.m)for(t=a.b.h;t!==a.b;t=o)o=t.h,t.b.d.c!==t.d.c?t.f=t.d.c?1:-1:m(t);else for(t=a.a.b;t!==a.a;t=o)if(o=t.b,t.c){for(t=t.a;n(t.b.a,t.a);t=t.c.b);for(;n(t.a,t.b.a);t=t.e);for(e=t.c.b,i=void 0;t.e!==e;)if(n(t.b.a,e.a)){for(;e.e!==t&&(u(e.e)||0>=s(e.a,e.b.a,e.e.b.a));)i=v(e.e,e),e=i.b;e=e.c.b}else{for(;e.e!==t&&(c(t.c.b)||0<=s(t.b.a,t.a,t.c.b.a));)i=v(t,t.c.b),t=i.b;t=t.e}for(;e.e.e!==t;)i=v(e.e,e),e=i.b}if(this.h||this.i||this.k||this.l)if(this.m){for(a=this.b,o=a.a.b;o!==a.a;o=o.b)if(o.c){this.h&&this.h(2,this.c),t=o.a;do{this.k&&this.k(t.a.d,this.c),t=t.e}while(t!==o.a);this.i&&this.i(this.c)}}else{for(a=this.b,o=!!this.l,t=!1,e=-1,i=a.a.d;i!==a.a;i=i.d)if(i.c){t||(this.h&&this.h(4,this.c),t=!0),l=i.a;do{o&&(h=l.b.d.c?0:1,e!==h&&(e=h,this.l&&this.l(!!e,this.c))),this.k&&this.k(l.a.d,this.c),l=l.e}while(l!==i.a)}t&&this.i&&this.i(this.c)}if(this.r){for(a=this.b,t=a.a.b;t!==a.a;t=o)if(o=t.b,!t.c){e=t.a,i=e.e,l=void 0;do{i=(l=i).e,l.d=null,null===l.b.d&&(l.c===l?w(l.a,null):(l.a.c=l.c,_(l,J(l))),(h=l.b).c===h?w(h.a,null):(h.a.c=h.c,_(h,J(h))),x(l))}while(l!==e);e=t.d,(t=t.b).d=e,e.b=t}return this.r(this.b),void(this.c=this.b=null)}}this.b=this.c=null},this.libtess={GluTesselator:H,windingRule:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},errorType:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156},gluEnum:{GLU_TESS_MESH:100112,GLU_TESS_TOLERANCE:100142,GLU_TESS_WINDING_RULE:100140,GLU_TESS_BOUNDARY_ONLY:100141,GLU_INVALID_ENUM:100900,GLU_INVALID_VALUE:100901,GLU_TESS_BEGIN:100100,GLU_TESS_VERTEX:100101,GLU_TESS_END:100102,GLU_TESS_ERROR:100103,GLU_TESS_EDGE_FLAG:100104,GLU_TESS_COMBINE:100105,GLU_TESS_BEGIN_DATA:100106,GLU_TESS_VERTEX_DATA:100107,GLU_TESS_END_DATA:100108,GLU_TESS_ERROR_DATA:100109,GLU_TESS_EDGE_FLAG_DATA:100110,GLU_TESS_COMBINE_DATA:100111}},H.prototype.gluDeleteTess=H.prototype.x,H.prototype.gluTessProperty=H.prototype.B,H.prototype.gluGetTessProperty=H.prototype.y,H.prototype.gluTessNormal=H.prototype.A,H.prototype.gluTessCallback=H.prototype.z,H.prototype.gluTessVertex=H.prototype.C,H.prototype.gluTessBeginPolygon=H.prototype.u,H.prototype.gluTessBeginContour=H.prototype.t,H.prototype.gluTessEndContour=H.prototype.v,H.prototype.gluTessEndPolygon=H.prototype.w,void 0!==e&&(e.exports=this.libtess)},{}],10:[function(t,e,i){(function(r){!function(t,r){r("object"==typeof i&&void 0!==e?i:t.opentype={})}(this,function(e){"use strict";function i(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function n(t,e){this.source=t,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=e,this.destLen=0,this.ltree=new i,this.dtree=new i}function o(t,e,i,r){var n,o;for(n=0;n>>=1,e}function h(t,e,i){if(!e)return i;for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>16-e;return t.tag>>>=e,t.bitcount-=e,r+i}function l(t,e){for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>=1,++n,i+=e.table[n],r-=e.table[n]}while(r>=0);return t.tag=o,t.bitcount-=n,e.trans[i+r]}function u(t,e,i){var r,n,o,a,u,c;for(r=h(t,5,257),n=h(t,5,1),o=h(t,4,4),a=0;a<19;++a)Le[a]=0;for(a=0;a8;)t.sourceIndex--,t.bitcount-=8;if(e=256*(e=t.source[t.sourceIndex+1])+t.source[t.sourceIndex],i=256*(i=t.source[t.sourceIndex+3])+t.source[t.sourceIndex+2],e!==(65535&~i))return Te;for(t.sourceIndex+=4,r=e;r;--r)t.dest[t.destLen++]=t.source[t.sourceIndex++];return t.bitcount=0,we}function d(t,e,i,r,n){return Math.pow(1-n,3)*t+3*Math.pow(1-n,2)*n*e+3*(1-n)*Math.pow(n,2)*i+Math.pow(n,3)*r}function f(){this.x1=Number.NaN,this.y1=Number.NaN,this.x2=Number.NaN,this.y2=Number.NaN}function m(){this.commands=[],this.fill="black",this.stroke=null,this.strokeWidth=1}function y(t){throw new Error(t)}function v(t,e){t||y(e)}function g(t){return function(){return t}}function _(t){return t>=-128&&t<=127}function b(t,e,i){for(var r=0,n=t.length;e>8&255,h+256&255)}return o}function w(t,e,i){for(var r=this,n=0;n>4,o=15&r;if(15===n)break;if(e+=i[n],15===o)break;e+=i[o]}return parseFloat(e)}(t);if(e>=32&&e<=246)return e-139;if(e>=247&&e<=250)return i=t.parseByte(),256*(e-247)+i+108;if(e>=251&&e<=254)return i=t.parseByte(),256*-(e-251)-i-108;throw new Error("Invalid b0 "+e)}function Y(t,e,i){e=void 0!==e?e:0;var r=new Ye.Parser(t,e),n=[],o=[];for(i=void 0!==i?i:t.length;r.relativeOffset>1,f.length=0,v=!0}var o,s,a,h,l,u,c,p,d=new m,f=[],y=0,v=!1,g=!1,_=0,b=0;if(t.isCIDFont){var S=t.tables.cff.topDict._fdSelect[e.index],x=t.tables.cff.topDict._fdArray[S];l=x._subrs,u=x._subrsBias,c=x._defaultWidthX,p=x._nominalWidthX}else l=t.tables.cff.topDict._subrs,u=t.tables.cff.topDict._subrsBias,c=t.tables.cff.topDict._defaultWidthX,p=t.tables.cff.topDict._nominalWidthX;var w=c;return function i(c){for(var m,S,x,T,A,P,M,E,k,C,R,O,L=0;L1&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_,b);break;case 5:for(;f.length>0;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 6:for(;f.length>0&&(_+=f.shift(),d.lineTo(_,b),0!==f.length);)b+=f.shift(),d.lineTo(_,b);break;case 7:for(;f.length>0&&(b+=f.shift(),d.lineTo(_,b),0!==f.length);)_+=f.shift(),d.lineTo(_,b);break;case 8:for(;f.length>0;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 10:A=f.pop()+u,(P=l[A])&&i(P);break;case 11:return;case 12:switch(F=c[L],L+=1,F){case 35:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h+f.shift(),k=M+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),b=O+f.shift(),f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;case 34:o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h,k=M+f.shift(),C=h,R=k+f.shift(),O=b,_=R+f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;case 36:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h,k=M+f.shift(),C=h,R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;case 37:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h+f.shift(),k=M+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),Math.abs(R-_)>Math.abs(O-b)?_=R+f.shift():b=O+f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;default:console.log("Glyph "+e.index+": unknown operator 1200"+F),f.length=0}break;case 14:f.length>0&&!v&&(w=f.shift()+p,v=!0),g&&(d.closePath(),g=!1);break;case 18:n();break;case 19:case 20:n(),L+=y+7>>3;break;case 21:f.length>2&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_+=f.pop(),b);break;case 22:f.length>1&&!v&&(w=f.shift()+p,v=!0),r(_+=f.pop(),b);break;case 23:n();break;case 24:for(;f.length>2;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 25:for(;f.length>6;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 26:for(f.length%2&&(_+=f.shift());f.length>0;)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a,b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 27:for(f.length%2&&(b+=f.shift());f.length>0;)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h,d.curveTo(o,s,a,h,_,b);break;case 28:m=c[L],S=c[L+1],f.push((m<<24|S<<16)>>16),L+=2;break;case 29:A=f.pop()+t.gsubrsBias,(P=t.gsubrs[A])&&i(P);break;case 30:for(;f.length>0&&(o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;case 31:for(;f.length>0&&(o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;default:F<32?console.log("Glyph "+e.index+": unknown operator "+F):F<247?f.push(F-139):F<251?(m=c[L],L+=1,f.push(256*(F-247)+m+108)):F<255?(m=c[L],L+=1,f.push(256*-(F-251)-m-108)):(m=c[L],S=c[L+1],x=c[L+2],T=c[L+3],L+=4,f.push((m<<24|S<<16|x<<8|T)/65536))}}}(i),e.advanceWidth=w,d}function et(t,e){var i,r=Ze.indexOf(t);return r>=0&&(i=r),(r=e.indexOf(t))>=0?i=r+Ze.length:(i=Ze.length+e.length,e.push(t)),i}function it(t,e,i){for(var r={},n=0;ne.value.tag?1:-1}),e.fields=e.fields.concat(r),e.fields=e.fields.concat(n),e}function mt(t,e,i){for(var r=0;r0)return t.glyphs.get(n).getMetrics()}return i}function yt(t,e){for(var i=0,r=t.length-1;i<=r;){var n=i+r>>>1,o=t[n].tag;if(o===e)return n;o>>1,o=t[n];if(o===e)return n;o>>1,s=(i=t[o]).start;if(s===e)return i;s0)return i=t[r-1],e>i.end?0:i}function _t(t,e){this.font=t,this.tableName=e}function bt(t){_t.call(this,t,"gpos")}function St(t){_t.call(this,t,"gsub")}function xt(t,e){var i=t.length;if(i!==e.length)return!1;for(var r=0;r0?(o=t.parseByte(),0==(e&n)&&(o=-o),o=i+o):o=(e&n)>0?i:i+t.parseShort(),o}function Et(t,e,i){var r,n,o=new Ye.Parser(e,i);if(t.numberOfContours=o.parseShort(),t._xMin=o.parseShort(),t._yMin=o.parseShort(),t._xMax=o.parseShort(),t._yMax=o.parseShort(),t.numberOfContours>0){for(var s=t.endPointIndices=[],a=0;a0)for(var c=o.parseByte(),p=0;p0){var d,f=[];if(l>0){for(var m=0;m=0,f.push(d);for(var y=0,v=0;v0?(2&r)>0?(S.dx=o.parseShort(),S.dy=o.parseShort()):S.matchedPoints=[o.parseUShort(),o.parseUShort()]:(2&r)>0?(S.dx=o.parseChar(),S.dy=o.parseChar()):S.matchedPoints=[o.parseByte(),o.parseByte()],(8&r)>0?S.xScale=S.yScale=o.parseF2Dot14():(64&r)>0?(S.xScale=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()):(128&r)>0&&(S.xScale=o.parseF2Dot14(),S.scale01=o.parseF2Dot14(),S.scale10=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()),t.components.push(S),b=!!(32&r)}if(256&r){t.instructionLength=o.parseUShort(),t.instructions=[];for(var x=0;xe.points.length-1||r.matchedPoints[1]>n.points.length-1)throw Error("Matched points out of range in "+e.name);var s=e.points[r.matchedPoints[0]],a=n.points[r.matchedPoints[1]],h={xScale:r.xScale,scale01:r.scale01,scale10:r.scale10,yScale:r.yScale,dx:0,dy:0};a=kt([a],h)[0],h.dx=s.x-a.x,h.dy=s.y-a.y,o=kt(n.points,h)}e.points=e.points.concat(o)}}return Ct(e.points)}function Ot(t){this.font=t,this.getCommands=function(t){return Ri.getPath(t).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function Lt(t){return t}function Ft(t){return Math.sign(t)*Math.round(Math.abs(t))}function It(t){return Math.sign(t)*Math.round(Math.abs(2*t))/2}function Dt(t){return Math.sign(t)*(Math.round(Math.abs(t)+.5)-.5)}function Ut(t){return Math.sign(t)*Math.ceil(Math.abs(t))}function Bt(t){return Math.sign(t)*Math.floor(Math.abs(t))}function Nt(t,e){this.x=t,this.y=e,this.axis=void 0,this.slope=e/t,this.normalSlope=-t/e,Object.freeze(this)}function Gt(t,e){var i=Math.sqrt(t*t+e*e);return e/=i,1==(t/=i)&&0===e?Li:0===t&&1===e?Fi:new Nt(t,e)}function qt(t,e,i,r){this.x=this.xo=Math.round(64*t)/64,this.y=this.yo=Math.round(64*e)/64,this.lastPointOfContour=i,this.onCurve=r,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}function Vt(t,e){switch(this.env=t,this.stack=[],this.prog=e,t){case"glyf":this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=Li,this.round=Ft}}function jt(t){for(var e=t.tZone=new Array(t.gZone.length),i=0;i=176&&i<=183)n+=i-176+1;else if(i>=184&&i<=191)n+=2*(i-184+1);else if(e&&1===o&&27===i)break}while(o>0);t.ip=n}function Wt(t,i){e.DEBUG&&console.log(i.step,"SVTCA["+t.axis+"]"),i.fv=i.pv=i.dpv=t}function Ht(t,i){e.DEBUG&&console.log(i.step,"SPVTCA["+t.axis+"]"),i.pv=i.dpv=t}function Xt(t,i){e.DEBUG&&console.log(i.step,"SFVTCA["+t.axis+"]"),i.fv=t}function Yt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.pv=i.dpv=Gt(r,n)}function Qt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SFVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.fv=Gt(r,n)}function Zt(t){e.DEBUG&&console.log(t.step,"POP[]"),t.stack.pop()}function Jt(t,i){var r=i.stack.pop(),n=i.z0[r],o=i.fv,s=i.pv;e.DEBUG&&console.log(i.step,"MDAP["+t+"]",r);var a=s.distance(n,Ii);t&&(a=i.round(a)),o.setRelative(n,Ii,a,s),o.touch(n),i.rp0=i.rp1=r}function Kt(t,i){var r,n,o,s=i.z2,a=s.length-2;e.DEBUG&&console.log(i.step,"IUP["+t.axis+"]");for(var h=0;h1?"loop "+(i.loop-h)+": ":"")+"SHP["+(t?"rp1":"rp2")+"]",u)}i.loop=1}function te(t,i){var r=i.stack,n=t?i.rp1:i.rp2,o=(t?i.z0:i.z1)[n],s=i.fv,a=i.pv,h=r.pop(),l=i.z2[i.contours[h]],u=l;e.DEBUG&&console.log(i.step,"SHC["+t+"]",h);var c=a.distance(o,o,!1,!0);do{u!==o&&s.setRelative(u,u,c,a),u=u.nextPointOnContour}while(u!==l)}function ee(t,i){var r,n=i.stack,o=t?i.rp1:i.rp2,s=(t?i.z0:i.z1)[o],a=i.fv,h=i.pv,l=n.pop();switch(e.DEBUG&&console.log(i.step,"SHZ["+t+"]",l),l){case 0:r=i.tZone;break;case 1:r=i.gZone;break;default:throw new Error("Invalid zone")}for(var u,c=h.distance(s,s,!1,!0),p=r.length-2,d=0;d",h),i.stack.push(Math.round(64*h))}function se(t,i){var r=i.stack,n=r.pop(),o=i.fv,s=i.pv,a=i.ppem,h=i.deltaBase+16*(t-1),l=i.deltaShift,u=i.z0;e.DEBUG&&console.log(i.step,"DELTAP["+t+"]",n,r);for(var c=0;c>4)===a){var f=(15&d)-8;f>=0&&f++,e.DEBUG&&console.log(i.step,"DELTAPFIX",p,"by",f*l);var m=u[p];o.setRelative(m,m,f*l,s)}}}function ae(t,i){var r=i.stack,n=r.pop();e.DEBUG&&console.log(i.step,"ROUND[]"),r.push(64*i.round(n/64))}function he(t,i){var r=i.stack,n=r.pop(),o=i.ppem,s=i.deltaBase+16*(t-1),a=i.deltaShift;e.DEBUG&&console.log(i.step,"DELTAC["+t+"]",n,r);for(var h=0;h>4)===o){var c=(15&u)-8;c>=0&&c++;var p=c*a;e.DEBUG&&console.log(i.step,"DELTACFIX",l,"by",p),i.cvt[l]+=p}}}function le(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log(i.step,"SDPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.dpv=Gt(r,n)}function ue(t,i){var r=i.stack,n=i.prog,o=i.ip;e.DEBUG&&console.log(i.step,"PUSHB["+t+"]");for(var s=0;s=0?1:-1,h=Math.abs(h),t&&(u=s.cvt[p],n&&Math.abs(h-u)":"_")+(n?"R":"_")+(0===o?"Gr":1===o?"Bl":2===o?"Wh":"")+"]",t?p+"("+s.cvt[p]+","+u+")":"",d,"(d =",a,"->",l*h,")"),s.rp1=s.rp0,s.rp2=d,i&&(s.rp0=d)}function de(t){(t=t||{}).empty||(Pt(t.familyName,"When creating a new Font object, familyName is required."),Pt(t.styleName,"When creating a new Font object, styleName is required."),Pt(t.unitsPerEm,"When creating a new Font object, unitsPerEm is required."),Pt(t.ascender,"When creating a new Font object, ascender is required."),Pt(t.descender,"When creating a new Font object, descender is required."),Pt(t.descender<0,"Descender should be negative (e.g. -512)."),this.names={fontFamily:{en:t.familyName||" "},fontSubfamily:{en:t.styleName||" "},fullName:{en:t.fullName||t.familyName+" "+t.styleName},postScriptName:{en:t.postScriptName||(t.familyName+t.styleName).replace(/\s/g,"")},designer:{en:t.designer||" "},designerURL:{en:t.designerURL||" "},manufacturer:{en:t.manufacturer||" "},manufacturerURL:{en:t.manufacturerURL||" "},license:{en:t.license||" "},licenseURL:{en:t.licenseURL||" "},version:{en:t.version||"Version 0.1"},description:{en:t.description||" "},copyright:{en:t.copyright||" "},trademark:{en:t.trademark||" "}},this.unitsPerEm=t.unitsPerEm||1e3,this.ascender=t.ascender,this.descender=t.descender,this.createdTimestamp=t.createdTimestamp,this.tables={os2:{usWeightClass:t.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:t.widthClass||this.usWidthClasses.MEDIUM,fsSelection:t.fsSelection||this.fsSelectionValues.REGULAR}}),this.supported=!0,this.glyphs=new ei.GlyphSet(this,t.glyphs||[]),this.encoding=new U(this),this.position=new bt(this),this.substitution=new St(this),this.tables=this.tables||{},Object.defineProperty(this,"hinting",{get:function(){return this._hinting?this._hinting:"truetype"===this.outlinesFormat?this._hinting=new Ot(this):void 0}})}function fe(t,e){var i=JSON.stringify(t),r=256;for(var n in e){var o=parseInt(n);if(o&&!(o<256)){if(JSON.stringify(e[n])===i)return o;r<=o&&(r=o+1)}}return e[r]=t,r}function me(t,e,i){var r=fe(e.name,i);return[{name:"tag_"+t,type:"TAG",value:e.tag},{name:"minValue_"+t,type:"FIXED",value:e.minValue<<16},{name:"defaultValue_"+t,type:"FIXED",value:e.defaultValue<<16},{name:"maxValue_"+t,type:"FIXED",value:e.maxValue<<16},{name:"flags_"+t,type:"USHORT",value:0},{name:"nameID_"+t,type:"USHORT",value:r}]}function ye(t,e,i){var r={},n=new Ye.Parser(t,e);return r.tag=n.parseTag(),r.minValue=n.parseFixed(),r.defaultValue=n.parseFixed(),r.maxValue=n.parseFixed(),n.skip("uShort",1),r.name=i[n.parseUShort()]||{},r}function ve(t,e,i,r){for(var n=fe(e.name,r),o=[{name:"nameID_"+t,type:"USHORT",value:n},{name:"flags_"+t,type:"USHORT",value:0}],s=0;s=i)){var n,o=e.charCodeAt(r);return o>=55296&&o<=56319&&i>r+1&&(n=e.charCodeAt(r+1))>=56320&&n<=57343?1024*(o-55296)+n-56320+65536:o}};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}();var we=0,Te=-3,Ae=new i,Pe=new i,Me=new Uint8Array(30),Ee=new Uint16Array(30),ke=new Uint8Array(30),Ce=new Uint16Array(30),Re=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Oe=new i,Le=new Uint8Array(320),Fe=new Uint16Array(16);(function(t,e){var i;for(i=0;i<7;++i)t.table[i]=0;for(t.table[7]=24,t.table[8]=152,t.table[9]=112,i=0;i<24;++i)t.trans[i]=256+i;for(i=0;i<144;++i)t.trans[24+i]=i;for(i=0;i<8;++i)t.trans[168+i]=280+i;for(i=0;i<112;++i)t.trans[176+i]=144+i;for(i=0;i<5;++i)e.table[i]=0;for(e.table[5]=32,i=0;i<32;++i)e.trans[i]=i})(Ae,Pe),o(Me,Ee,4,3),o(ke,Ce,2,1),Me[28]=0,Ee[28]=258;var Ie=function(t,e){var i,r,o=new n(t,e);do{switch(i=a(o),h(o,2,0)){case 0:r=p(o);break;case 1:r=c(o,Ae,Pe);break;case 2:u(o,o.ltree,o.dtree),r=c(o,o.ltree,o.dtree);break;default:r=Te}if(r!==we)throw new Error("Data error")}while(!i);return o.destLenthis.x2&&(this.x2=t)),"number"==typeof e&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),ethis.y2&&(this.y2=e))},f.prototype.addX=function(t){this.addPoint(t,null)},f.prototype.addY=function(t){this.addPoint(null,t)},f.prototype.addBezier=function(t,e,i,r,n,o,s,a){var h=this,l=[t,e],u=[i,r],c=[n,o],p=[s,a];this.addPoint(t,e),this.addPoint(s,a);for(var f=0;f<=1;f++){var m=6*l[f]-12*u[f]+6*c[f],y=-3*l[f]+9*u[f]-9*c[f]+3*p[f],v=3*u[f]-3*l[f];if(0!==y){var g=Math.pow(m,2)-4*v*y;if(!(g<0)){var _=(-m+Math.sqrt(g))/(2*y);0<_&&_<1&&(0===f&&h.addX(d(l[f],u[f],c[f],p[f],_)),1===f&&h.addY(d(l[f],u[f],c[f],p[f],_)));var b=(-m-Math.sqrt(g))/(2*y);0=0&&r>0&&(i+=" "),i+=e(n)}return i}t=void 0!==t?t:2;for(var r="",n=0;n=0&&t<=255,"Byte value should be between 0 and 255."),[t]},Ge.BYTE=g(1),Ne.CHAR=function(t){return[t.charCodeAt(0)]},Ge.CHAR=g(1),Ne.CHARARRAY=function(t){for(var e=[],i=0;i>8&255,255&t]},Ge.USHORT=g(2),Ne.SHORT=function(t){return t>=32768&&(t=-(65536-t)),[t>>8&255,255&t]},Ge.SHORT=g(2),Ne.UINT24=function(t){return[t>>16&255,t>>8&255,255&t]},Ge.UINT24=g(3),Ne.ULONG=function(t){return[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.ULONG=g(4),Ne.LONG=function(t){return t>=Ue&&(t=-(2*Ue-t)),[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONG=g(4),Ne.FIXED=Ne.ULONG,Ge.FIXED=Ge.ULONG,Ne.FWORD=Ne.SHORT,Ge.FWORD=Ge.SHORT,Ne.UFWORD=Ne.USHORT,Ge.UFWORD=Ge.USHORT,Ne.LONGDATETIME=function(t){return[0,0,0,0,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONGDATETIME=g(8),Ne.TAG=function(t){return De.argument(4===t.length,"Tag should be exactly 4 ASCII characters."),[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]},Ge.TAG=g(4),Ne.Card8=Ne.BYTE,Ge.Card8=Ge.BYTE,Ne.Card16=Ne.USHORT,Ge.Card16=Ge.USHORT,Ne.OffSize=Ne.BYTE,Ge.OffSize=Ge.BYTE,Ne.SID=Ne.USHORT,Ge.SID=Ge.USHORT,Ne.NUMBER=function(t){return t>=-107&&t<=107?[t+139]:t>=108&&t<=1131?[247+((t-=108)>>8),255&t]:t>=-1131&&t<=-108?[251+((t=-t-108)>>8),255&t]:t>=-32768&&t<=32767?Ne.NUMBER16(t):Ne.NUMBER32(t)},Ge.NUMBER=function(t){return Ne.NUMBER(t).length},Ne.NUMBER16=function(t){return[28,t>>8&255,255&t]},Ge.NUMBER16=g(3),Ne.NUMBER32=function(t){return[29,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.NUMBER32=g(5),Ne.REAL=function(t){var e=t.toString(),i=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(e);if(i){var r=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));e=(Math.round(t*r)/r).toString()}for(var n="",o=0,s=e.length;o>8&255,e[e.length]=255&r}return e},Ge.UTF16=function(t){return 2*t.length};var qe={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};Be.MACSTRING=function(t,e,i,r){var n=qe[r];if(void 0!==n){for(var o="",s=0;s=128&&void 0===(o=i[o]))return;r[n]=o}return r}},Ge.MACSTRING=function(t,e){var i=Ne.MACSTRING(t,e);return void 0!==i?i.length:0},Ne.VARDELTAS=function(t){for(var e=0,i=[];e=-128&&r<=127?S(t,e,i):x(t,e,i)}return i},Ne.INDEX=function(t){for(var e=1,i=[e],r=[],n=0;n>8,e[c+1]=255&p,e=e.concat(r[u])}return e},Ge.TABLE=function(t){for(var e=0,i=t.fields.length,r=0;r0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parsePointer32=function(t){var e=this.parseOffset32();if(e>0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parseListOfLists=function(t){for(var e=this,i=this.parseOffset16List(),r=i.length,n=this.relativeOffset,o=new Array(r),s=0;s=0;n-=1){var o=Ye.getUShort(t,e+4+8*n),s=Ye.getUShort(t,e+4+8*n+2);if(3===o&&(0===s||1===s||10===s)||0===o&&(0===s||1===s||2===s||3===s||4===s)){r=Ye.getULong(t,e+4+8*n+4);break}}if(-1===r)throw new Error("No valid cmap sub-tables found.");var a=new Ye.Parser(t,e+r);if(i.format=a.parseUShort(),12===i.format)!function(t,e){var i;e.parseUShort(),t.length=e.parseULong(),t.language=e.parseULong(),t.groupCount=i=e.parseULong(),t.glyphIndexMap={};for(var r=0;r>1,e.skip("uShort",3),t.glyphIndexMap={};for(var s=new Ye.Parser(i,r+n+14),a=new Ye.Parser(i,r+n+16+2*o),h=new Ye.Parser(i,r+n+16+4*o),l=new Ye.Parser(i,r+n+16+6*o),u=r+n+16+8*o,c=0;c0;e-=1)if(t.get(e).unicode>65535){console.log("Adding CMAP format 12 (needed!)"),i=!1;break}var r=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:i?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:i?12:20}];i||(r=r.concat([{name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}])),r=r.concat([{name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);var n=new We.Table("cmap",r);for(n.segments=[],e=0;e=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");o.push(n)}else{if(3!==a)throw new Error("CFF Table CID Font FDSelect table has unsupported format "+a);var l=s.parseCard16(),u=s.parseCard16();if(0!==u)throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+u);for(var c,p=0;p=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");if(c>i)throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+c);for(;u=1&&(i.ulCodePageRange1=r.parseULong(),i.ulCodePageRange2=r.parseULong()),i.version>=2&&(i.sxHeight=r.parseShort(),i.sCapHeight=r.parseShort(),i.usDefaultChar=r.parseUShort(),i.usBreakChar=r.parseUShort(),i.usMaxContent=r.parseUShort()),i},make:function(t){return new We.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],t)},unicodeRanges:gi,getUnicodeRange:function(t){for(var e=0;e=i.begin&&t=$e.length){var s=r.parseChar();i.names.push(r.parseString(s))}break;case 2.5:i.numberOfGlyphs=r.parseUShort(),i.offset=new Array(i.numberOfGlyphs);for(var a=0;ay||void 0===e)&&y>0&&(e=y),l 123 are reserved for internal usage");d|=1<0?hi.make(O):void 0,I=bi.make(),D=ni.make(t.glyphs,{version:t.getEnglishName("version"),fullName:E,familyName:P,weightName:M,postScriptName:k,unitsPerEm:t.unitsPerEm,fontBBox:[0,_.yMin,_.ascender,_.advanceWidthMax]}),U=t.metas&&Object.keys(t.metas).length>0?Ai.make(t.metas):void 0,B=[b,S,x,w,L,A,I,D,T];F&&B.push(F),t.tables.gsub&&B.push(Ti.make(t.tables.gsub)),U&&B.push(U);for(var N=ft(B),G=pt(N.encode()),q=N.fields,V=!1,j=0;j=0)return r[n].script;if(e){var o={tag:t,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return r.splice(-1-n,0,o),o.script}}},getLangSysTable:function(t,e,i){var r=this.getScriptTable(t,i);if(r){if(!e||"dflt"===e||"DFLT"===e)return r.defaultLangSys;var n=yt(r.langSysRecords,e);if(n>=0)return r.langSysRecords[n].langSys;if(i){var o={tag:e,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return r.langSysRecords.splice(-1-n,0,o),o.langSys}}},getFeatureTable:function(t,e,i,r){var n=this.getLangSysTable(t,e,r);if(n){for(var o,s=n.featureIndexes,a=this.font.tables[this.tableName].features,h=0;h=a[l-1].tag,"Features must be added in alphabetical order."),o={tag:i,feature:{params:0,lookupListIndexes:[]}},a.push(o),s.push(l),o.feature}}},getLookupTables:function(t,e,i,r,n){var o=this.getFeatureTable(t,e,i,n),s=[];if(o){for(var a,h=o.lookupListIndexes,l=this.font.tables[this.tableName].lookups,u=0;u=0?i:-1;case 2:var r=gt(t.ranges,e);return r?r.index+e-r.start:-1}},expandCoverage:function(t){if(1===t.format)return t.glyphs;for(var e=[],i=t.ranges,r=0;r=0){for(var u=o.ligatureSets[l],c=0;c2)){var r=this.font,n=this._prepState;if(!n||n.ppem!==i){var o=this._fpgmState;if(!o){Vt.prototype=Di,(o=this._fpgmState=new Vt("fpgm",r.tables.fpgm)).funcs=[],o.font=r,e.DEBUG&&(console.log("---EXEC FPGM---"),o.step=-1);try{Ei(o)}catch(t){return console.log("Hinting error in FPGM:"+t),void(this._errorState=3)}}Vt.prototype=o,(n=this._prepState=new Vt("prep",r.tables.prep)).ppem=i;var s=r.tables.cvt;if(s)for(var a=n.cvt=new Array(s.length),h=i/r.unitsPerEm,l=0;l1))try{return ki(t,n)}catch(t){return this._errorState<1&&(console.log("Hinting error:"+t),console.log("Note: further hinting errors are silenced")),void(this._errorState=1)}}},ki=function(t,i){var r,n,o,s=i.ppem/i.font.unitsPerEm,a=s,h=t.components;if(Vt.prototype=i,h){var l=i.font;n=[],r=[];for(var u=0;u1?"loop "+(t.loop-r)+": ":"")+"SHPIX[]",a,o),n.setRelative(h,h,o),n.touch(h)}t.loop=1},function(t){for(var i=t.stack,r=t.rp1,n=t.rp2,o=t.loop,s=t.z0[r],a=t.z1[n],h=t.fv,l=t.dpv,u=t.z2;o--;){var c=i.pop(),p=u[c];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"IP[]",c,r,"<->",n),h.interpolate(p,s,a,l),h.touch(p)}t.loop=1},ie.bind(void 0,0),ie.bind(void 0,1),function(t){for(var i=t.stack,r=t.rp0,n=t.z0[r],o=t.loop,s=t.fv,a=t.pv,h=t.z1;o--;){var l=i.pop(),u=h[l];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"ALIGNRP[]",l),s.setRelative(u,n,0,a),s.touch(u)}t.loop=1},function(t){e.DEBUG&&console.log(t.step,"RTDG[]"),t.round=It},re.bind(void 0,0),re.bind(void 0,1),function(t){var i=t.prog,r=t.ip,n=t.stack,o=i[++r];e.DEBUG&&console.log(t.step,"NPUSHB[]",o);for(var s=0;sr?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"GTEQ[]",r,n),i.push(n>=r?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"EQ[]",r,n),i.push(r===n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"NEQ[]",r,n),i.push(r!==n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ODD[]",r),i.push(Math.trunc(r)%2?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"EVEN[]",r),i.push(Math.trunc(r)%2?0:1)},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"IF[]",i),i||(zt(t,!0),e.DEBUG&&console.log(t.step,"EIF[]"))},function(t){e.DEBUG&&console.log(t.step,"EIF[]")},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"AND[]",r,n),i.push(r&&n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"OR[]",r,n),i.push(r||n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NOT[]",r),i.push(r?0:1)},se.bind(void 0,1),function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDB[]",i),t.deltaBase=i},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDS[]",i),t.deltaShift=Math.pow(.5,i)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"ADD[]",r,n),i.push(n+r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"SUB[]",r,n),i.push(n-r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"DIV[]",r,n),i.push(64*n/r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MUL[]",r,n),i.push(n*r/64)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ABS[]",r),i.push(Math.abs(r))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NEG[]",r),i.push(-r)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"FLOOR[]",r),i.push(64*Math.floor(r/64))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"CEILING[]",r),i.push(64*Math.ceil(r/64))},ae.bind(void 0,0),ae.bind(void 0,1),ae.bind(void 0,2),ae.bind(void 0,3),void 0,void 0,void 0,void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"WCVTF[]",r,n),t.cvt[n]=r*t.ppem/t.font.unitsPerEm},se.bind(void 0,2),se.bind(void 0,3),he.bind(void 0,1),he.bind(void 0,2),he.bind(void 0,3),function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"SROUND[]",r),t.round=Oi,192&r){case 0:i=.5;break;case 64:i=1;break;case 128:i=2;break;default:throw new Error("invalid SROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid SROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"S45ROUND[]",r),t.round=Oi,192&r){case 0:i=Math.sqrt(2)/2;break;case 64:i=Math.sqrt(2);break;case 128:i=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid S45ROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},void 0,void 0,function(t){e.DEBUG&&console.log(t.step,"ROFF[]"),t.round=Lt},void 0,function(t){e.DEBUG&&console.log(t.step,"RUTG[]"),t.round=Ut},function(t){e.DEBUG&&console.log(t.step,"RDTG[]"),t.round=Bt},Zt,Zt,void 0,void 0,void 0,void 0,void 0,function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANCTRL[]",i)},le.bind(void 0,0),le.bind(void 0,1),function(t){var i=t.stack,r=i.pop(),n=0;e.DEBUG&&console.log(t.step,"GETINFO[]",r),1&r&&(n=35),32&r&&(n|=4096),i.push(n)},void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop(),o=i.pop();e.DEBUG&&console.log(t.step,"ROLL[]"),i.push(n),i.push(r),i.push(o)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MAX[]",r,n),i.push(Math.max(n,r))},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MIN[]",r,n),i.push(Math.min(n,r))},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANTYPE[]",i)},function(t){var i=t.stack.pop(),r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"INSTCTRL[]",i,r),i){case 1:return void(t.inhibitGridFit=!!r);case 2:return void(t.ignoreCvt=!!r);default:throw new Error("invalid INSTCTRL[] selector")}},void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,ue.bind(void 0,1),ue.bind(void 0,2),ue.bind(void 0,3),ue.bind(void 0,4),ue.bind(void 0,5),ue.bind(void 0,6),ue.bind(void 0,7),ue.bind(void 0,8),ce.bind(void 0,1),ce.bind(void 0,2),ce.bind(void 0,3),ce.bind(void 0,4),ce.bind(void 0,5),ce.bind(void 0,6),ce.bind(void 0,7),ce.bind(void 0,8),pe.bind(void 0,0,0,0,0,0),pe.bind(void 0,0,0,0,0,1),pe.bind(void 0,0,0,0,0,2),pe.bind(void 0,0,0,0,0,3),pe.bind(void 0,0,0,0,1,0),pe.bind(void 0,0,0,0,1,1),pe.bind(void 0,0,0,0,1,2),pe.bind(void 0,0,0,0,1,3),pe.bind(void 0,0,0,1,0,0),pe.bind(void 0,0,0,1,0,1),pe.bind(void 0,0,0,1,0,2),pe.bind(void 0,0,0,1,0,3),pe.bind(void 0,0,0,1,1,0),pe.bind(void 0,0,0,1,1,1),pe.bind(void 0,0,0,1,1,2),pe.bind(void 0,0,0,1,1,3),pe.bind(void 0,0,1,0,0,0),pe.bind(void 0,0,1,0,0,1),pe.bind(void 0,0,1,0,0,2),pe.bind(void 0,0,1,0,0,3),pe.bind(void 0,0,1,0,1,0),pe.bind(void 0,0,1,0,1,1),pe.bind(void 0,0,1,0,1,2),pe.bind(void 0,0,1,0,1,3),pe.bind(void 0,0,1,1,0,0),pe.bind(void 0,0,1,1,0,1),pe.bind(void 0,0,1,1,0,2),pe.bind(void 0,0,1,1,0,3),pe.bind(void 0,0,1,1,1,0),pe.bind(void 0,0,1,1,1,1),pe.bind(void 0,0,1,1,1,2),pe.bind(void 0,0,1,1,1,3),pe.bind(void 0,1,0,0,0,0),pe.bind(void 0,1,0,0,0,1),pe.bind(void 0,1,0,0,0,2),pe.bind(void 0,1,0,0,0,3),pe.bind(void 0,1,0,0,1,0),pe.bind(void 0,1,0,0,1,1),pe.bind(void 0,1,0,0,1,2),pe.bind(void 0,1,0,0,1,3),pe.bind(void 0,1,0,1,0,0),pe.bind(void 0,1,0,1,0,1),pe.bind(void 0,1,0,1,0,2),pe.bind(void 0,1,0,1,0,3),pe.bind(void 0,1,0,1,1,0),pe.bind(void 0,1,0,1,1,1),pe.bind(void 0,1,0,1,1,2),pe.bind(void 0,1,0,1,1,3),pe.bind(void 0,1,1,0,0,0),pe.bind(void 0,1,1,0,0,1),pe.bind(void 0,1,1,0,0,2),pe.bind(void 0,1,1,0,0,3),pe.bind(void 0,1,1,0,1,0),pe.bind(void 0,1,1,0,1,1),pe.bind(void 0,1,1,0,1,2),pe.bind(void 0,1,1,0,1,3),pe.bind(void 0,1,1,1,0,0),pe.bind(void 0,1,1,1,0,1),pe.bind(void 0,1,1,1,0,2),pe.bind(void 0,1,1,1,0,3),pe.bind(void 0,1,1,1,1,0),pe.bind(void 0,1,1,1,1,1),pe.bind(void 0,1,1,1,1,2),pe.bind(void 0,1,1,1,1,3)];var Ui=Array.from||function(t){return t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]?|[^\uD800-\uDFFF]|./g)||[]};de.prototype.hasChar=function(t){return null!==this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyphIndex=function(t){return this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyph=function(t){var e=this.charToGlyphIndex(t),i=this.glyphs.get(e);return i||(i=this.glyphs.get(0)),i},de.prototype.stringToGlyphs=function(t,e){e=e||this.defaultRenderOptions;for(var i=Ui(t),r=[],n=0;n1&&console.warn("Only the first kern subtable is supported."),t.skip("uLong");var i=255&t.parseUShort();if(t.skip("uShort"),0===i){var r=t.parseUShort();t.skip("uShort",3);for(var n=0;n1)for(var i=1;i-1?e:t}(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(i)}function c(t){var e=new FormData;return t.trim().split("&").forEach(function(t){if(t){var i=t.split("="),r=i.shift().replace(/\+/g," "),n=i.join("=").replace(/\+/g," ");e.append(decodeURIComponent(r),decodeURIComponent(n))}}),e}function p(t){var e=new n;return t.split(/\r?\n/).forEach(function(t){var i=t.split(":"),r=i.shift().trim();if(r){var n=i.join(":").trim();e.append(r,n)}}),e}function d(t,e){e||(e={}),this.type="default",this.status="status"in e?e.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new n(e.headers),this.url=e.url||"",this._initBody(t)}if(!t.fetch){var f={searchParams:"URLSearchParams"in t,iterable:"Symbol"in t&&"iterator"in Symbol,blob:"FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in t,arrayBuffer:"ArrayBuffer"in t};if(f.arrayBuffer)var m=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],y=function(t){return t&&DataView.prototype.isPrototypeOf(t)},v=ArrayBuffer.isView||function(t){return t&&m.indexOf(Object.prototype.toString.call(t))>-1};n.prototype.append=function(t,r){t=e(t),r=i(r);var n=this.map[t];this.map[t]=n?n+","+r:r},n.prototype.delete=function(t){delete this.map[e(t)]},n.prototype.get=function(t){return t=e(t),this.has(t)?this.map[t]:null},n.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},n.prototype.set=function(t,r){this.map[e(t)]=i(r)},n.prototype.forEach=function(t,e){for(var i in this.map)this.map.hasOwnProperty(i)&&t.call(e,this.map[i],i,this)},n.prototype.keys=function(){var t=[];return this.forEach(function(e,i){t.push(i)}),r(t)},n.prototype.values=function(){var t=[];return this.forEach(function(e){t.push(e)}),r(t)},n.prototype.entries=function(){var t=[];return this.forEach(function(e,i){t.push([i,e])}),r(t)},f.iterable&&(n.prototype[Symbol.iterator]=n.prototype.entries);var g=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];u.prototype.clone=function(){return new u(this,{body:this._bodyInit})},l.call(u.prototype),l.call(d.prototype),d.prototype.clone=function(){return new d(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new n(this.headers),url:this.url})},d.error=function(){var t=new d(null,{status:0,statusText:""});return t.type="error",t};var _=[301,302,303,307,308];d.redirect=function(t,e){if(-1===_.indexOf(e))throw new RangeError("Invalid status code");return new d(null,{status:e,headers:{location:t}})},t.Headers=n,t.Request=u,t.Response=d,t.fetch=function(t,e){return new Promise(function(i,r){var n=new u(t,e),o=new XMLHttpRequest;o.onload=function(){var t={status:o.status,statusText:o.statusText,headers:p(o.getAllResponseHeaders()||"")};t.url="responseURL"in o?o.responseURL:t.headers.get("X-Request-URL");var e="response"in o?o.response:o.responseText;i(new d(e,t))},o.onerror=function(){r(new TypeError("Network request failed"))},o.ontimeout=function(){r(new TypeError("Network request failed"))},o.open(n.method,n.url,!0),"include"===n.credentials&&(o.withCredentials=!0),"responseType"in o&&f.blob&&(o.responseType="blob"),n.headers.forEach(function(t,e){o.setRequestHeader(e,t)}),o.send(void 0===n._bodyInit?null:n._bodyInit)})},t.fetch.polyfill=!0}}("undefined"!=typeof self?self:this)},{}],13:[function(t,e,i){"use strict";var r=t("./core/main");t("./core/constants"),t("./core/environment"),t("./core/error_helpers"),t("./core/helpers"),t("./core/legacy"),t("./core/p5.Element"),t("./core/p5.Graphics"),t("./core/p5.Renderer"),t("./core/p5.Renderer2D"),t("./core/rendering"),t("./core/shim"),t("./core/structure"),t("./core/transform"),t("./core/shape/2d_primitives"),t("./core/shape/attributes"),t("./core/shape/curves"),t("./core/shape/vertex"),t("./color/color_conversion"),t("./color/creating_reading"),t("./color/p5.Color"),t("./color/setting"),t("./data/p5.TypedDict"),t("./events/acceleration"),t("./events/keyboard"),t("./events/mouse"),t("./events/touch"),t("./image/filters"),t("./image/image"),t("./image/loading_displaying"),t("./image/p5.Image"),t("./image/pixels"),t("./io/files"),t("./io/p5.Table"),t("./io/p5.TableRow"),t("./io/p5.XML"),t("./math/calculation"),t("./math/math"),t("./math/noise"),t("./math/p5.Vector"),t("./math/random"),t("./math/trigonometry"),t("./typography/attributes"),t("./typography/loading_displaying"),t("./typography/p5.Font"),t("./utilities/array_functions"),t("./utilities/conversion"),t("./utilities/string_functions"),t("./utilities/time_date"),t("./webgl/3d_primitives"),t("./webgl/interaction"),t("./webgl/light"),t("./webgl/loading"),t("./webgl/material"),t("./webgl/p5.Camera"),t("./webgl/p5.Geometry"),t("./webgl/p5.Matrix"),t("./webgl/p5.RendererGL.Immediate"),t("./webgl/p5.RendererGL"),t("./webgl/p5.RendererGL.Retained"),t("./webgl/p5.Shader"),t("./webgl/p5.Texture"),t("./webgl/text"),t("./core/init"),e.exports=r},{"./color/color_conversion":14,"./color/creating_reading":15,"./color/p5.Color":16,"./color/setting":17,"./core/constants":18,"./core/environment":19,"./core/error_helpers":20,"./core/helpers":21,"./core/init":22,"./core/legacy":23,"./core/main":24,"./core/p5.Element":25,"./core/p5.Graphics":26,"./core/p5.Renderer":27,"./core/p5.Renderer2D":28,"./core/rendering":29,"./core/shape/2d_primitives":30,"./core/shape/attributes":31,"./core/shape/curves":32,"./core/shape/vertex":33,"./core/shim":34,"./core/structure":35,"./core/transform":36,"./data/p5.TypedDict":37,"./events/acceleration":38,"./events/keyboard":39,"./events/mouse":40,"./events/touch":41,"./image/filters":42,"./image/image":43,"./image/loading_displaying":44,"./image/p5.Image":45,"./image/pixels":46,"./io/files":47,"./io/p5.Table":48,"./io/p5.TableRow":49,"./io/p5.XML":50,"./math/calculation":51,"./math/math":52,"./math/noise":53,"./math/p5.Vector":54,"./math/random":55,"./math/trigonometry":56,"./typography/attributes":57,"./typography/loading_displaying":58,"./typography/p5.Font":59,"./utilities/array_functions":60,"./utilities/conversion":61,"./utilities/string_functions":62,"./utilities/time_date":63,"./webgl/3d_primitives":64,"./webgl/interaction":65,"./webgl/light":66,"./webgl/loading":67,"./webgl/material":68,"./webgl/p5.Camera":69,"./webgl/p5.Geometry":70,"./webgl/p5.Matrix":71,"./webgl/p5.RendererGL":74,"./webgl/p5.RendererGL.Immediate":72,"./webgl/p5.RendererGL.Retained":73,"./webgl/p5.Shader":75,"./webgl/p5.Texture":76,"./webgl/text":77}],14:[function(t,e,i){"use strict";var r=t("../core/main");r.ColorConversion={},r.ColorConversion._hsbaToHSLA=function(t){var e=t[0],i=t[1],r=t[2],n=(2-i)*r/2;return 0!==n&&(1===n?i=0:n<.5?i/=2-i:i=i*r/(2-2*n)),[e,i,n,t[3]]},r.ColorConversion._hsbaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s,a,h=Math.floor(e),l=r*(1-i),u=r*(1-i*(e-h)),c=r*(1-i*(1+h-e));1===h?(o=u,s=r,a=l):2===h?(o=l,s=r,a=c):3===h?(o=l,s=u,a=r):4===h?(o=c,s=l,a=r):5===h?(o=r,s=l,a=u):(o=r,s=c,a=l),n=[o,s,a,t[3]]}return n},r.ColorConversion._hslaToHSBA=function(t){var e,i=t[0],r=t[1],n=t[2];return[i,r=2*((e=n<.5?(1+r)*n:n+r-n*r)-n)/e,e,t[3]]},r.ColorConversion._hslaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s=2*r-(o=r<.5?(1+i)*r:r+i-r*i),a=function(t,e,i){return t<0?t+=6:t>=6&&(t-=6),t<1?e+(i-e)*t:t<3?i:t<4?e+(i-e)*(4-t):e};n=[a(e+2,s,o),a(e,s,o),a(e-2,s,o),t[3]]}return n},r.ColorConversion._rgbaToHSBA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=s-Math.min(r,n,o);return 0===a?(e=0,i=0):(i=a/s,r===s?e=(n-o)/a:n===s?e=2+(o-r)/a:o===s&&(e=4+(r-n)/a),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,s,t[3]]},r.ColorConversion._rgbaToHSLA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=Math.min(r,n,o),h=s+a,l=s-a;return 0===l?(e=0,i=0):(i=h<1?l/h:l/(2-h),r===s?e=(n-o)/l:n===s?e=2+(o-r)/l:o===s&&(e=4+(r-n)/l),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,h/2,t[3]]},e.exports=r.ColorConversion},{"../core/main":24}],15:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),t("../core/error_helpers"),r.prototype.alpha=function(t){return r._validateParameters("alpha",arguments),this.color(t)._getAlpha()},r.prototype.blue=function(t){return r._validateParameters("blue",arguments),this.color(t)._getBlue()},r.prototype.brightness=function(t){return r._validateParameters("brightness",arguments),this.color(t)._getBrightness()},r.prototype.color=function(){if(r._validateParameters("color",arguments),arguments[0]instanceof r.Color)return arguments[0];var t=arguments[0]instanceof Array?arguments[0]:arguments;return new r.Color(this,t)},r.prototype.green=function(t){return r._validateParameters("green",arguments),this.color(t)._getGreen()},r.prototype.hue=function(t){return r._validateParameters("hue",arguments),this.color(t)._getHue()},r.prototype.lerpColor=function(t,e,i){r._validateParameters("lerpColor",arguments);var o,s,a,h,l,u,c=this._colorMode,p=this._colorMaxes;if(c===n.RGB)l=t.levels.map(function(t){return t/255}),u=e.levels.map(function(t){return t/255});else if(c===n.HSB)t._getBrightness(),e._getBrightness(),l=t.hsba,u=e.hsba;else{if(c!==n.HSL)throw new Error(c+"cannot be used for interpolation.");t._getLightness(),e._getLightness(),l=t.hsla,u=e.hsla}return i=Math.max(Math.min(i,1),0),void 0===this.lerp&&(this.lerp=function(t,e,i){return i*(e-t)+t}),o=this.lerp(l[0],u[0],i),s=this.lerp(l[1],u[1],i),a=this.lerp(l[2],u[2],i),h=this.lerp(l[3],u[3],i),o*=p[c][0],s*=p[c][1],a*=p[c][2],h*=p[c][3],this.color(o,s,a,h)},r.prototype.lightness=function(t){return r._validateParameters("lightness",arguments),this.color(t)._getLightness()},r.prototype.red=function(t){return r._validateParameters("red",arguments),this.color(t)._getRed()},r.prototype.saturation=function(t){return r._validateParameters("saturation",arguments),this.color(t)._getSaturation()},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"./p5.Color":16}],16:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("./color_conversion");r.Color=function(t,e){if(this._storeModeAndMaxes(t._colorMode,t._colorMaxes),this.mode!==n.RGB&&this.mode!==n.HSL&&this.mode!==n.HSB)throw new Error(this.mode+" is an invalid colorMode.");return this._array=r.Color._parseInputs.apply(this,e),this._calculateLevels(),this},r.Color.prototype.toString=function(t){this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsla||(this.hsla=o._rgbaToHSLA(this._array));var e=this.levels,i=this._array,r=i[3];switch(t){case"#rrggbb":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16));case"#rrggbbaa":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16),e[3]<16?"0".concat(e[2].toString(16)):e[3].toString(16));case"#rgb":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16));case"#rgba":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16),Math.round(15*i[3]).toString(16));case"rgb":return"rgb(".concat(e[0],", ",e[1],", ",e[2],")");case"rgb%":return"rgb(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%)");case"rgba%":return"rgba(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%, ",(100*i[3]).toPrecision(3),"%)");case"hsb":case"hsv":return"hsb(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],")");case"hsb%":case"hsv%":return"hsb(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%)");case"hsba":case"hsva":return"hsba(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],", ",r,")");case"hsba%":case"hsva%":return"hsba(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"hsl":return"hsl(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],")");case"hsl%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%)");case"hsla":return"hsla(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],", ",r,")");case"hsla%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"rgba":default:return"rgba("+e[0]+","+e[1]+","+e[2]+","+r+")"}},r.Color.prototype.setRed=function(t){this._array[0]=t/this.maxes[n.RGB][0],this._calculateLevels()},r.Color.prototype.setGreen=function(t){this._array[1]=t/this.maxes[n.RGB][1],this._calculateLevels()},r.Color.prototype.setBlue=function(t){this._array[2]=t/this.maxes[n.RGB][2],this._calculateLevels()},r.Color.prototype.setAlpha=function(t){this._array[3]=t/this.maxes[this.mode][3],this._calculateLevels()},r.Color.prototype._calculateLevels=function(){for(var t=this._array,e=this.levels=new Array(t.length),i=t.length-1;i>=0;--i)e[i]=Math.round(255*t[i])},r.Color.prototype._getAlpha=function(){return this._array[3]*this.maxes[this.mode][3]},r.Color.prototype._storeModeAndMaxes=function(t,e){this.mode=t,this.maxes=e},r.Color.prototype._getMode=function(){return this.mode},r.Color.prototype._getMaxes=function(){return this.maxes},r.Color.prototype._getBlue=function(){return this._array[2]*this.maxes[n.RGB][2]},r.Color.prototype._getBrightness=function(){return this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[2]*this.maxes[n.HSB][2]},r.Color.prototype._getGreen=function(){return this._array[1]*this.maxes[n.RGB][1]},r.Color.prototype._getHue=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[0]*this.maxes[n.HSB][0]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[0]*this.maxes[n.HSL][0])},r.Color.prototype._getLightness=function(){return this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[2]*this.maxes[n.HSL][2]},r.Color.prototype._getRed=function(){return this._array[0]*this.maxes[n.RGB][0]},r.Color.prototype._getSaturation=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[1]*this.maxes[n.HSB][1]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[1]*this.maxes[n.HSL][1])};var s={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},a=/\s*/,h=/(\d{1,3})/,l=/((?:\d+(?:\.\d+)?)|(?:\.\d+))/,u=new RegExp(l.source+"%"),c={HEX3:/^#([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX4:/^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX6:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,HEX8:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,RGB:new RegExp(["^rgb\\(",h.source,",",h.source,",",h.source,"\\)$"].join(a.source),"i"),RGB_PERCENT:new RegExp(["^rgb\\(",u.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),RGBA:new RegExp(["^rgba\\(",h.source,",",h.source,",",h.source,",",l.source,"\\)$"].join(a.source),"i"),RGBA_PERCENT:new RegExp(["^rgba\\(",u.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSL:new RegExp(["^hsl\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSLA:new RegExp(["^hsla\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSB:new RegExp(["^hsb\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSBA:new RegExp(["^hsba\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i")};r.Color._parseInputs=function(t,e,i,a){var h,l=arguments.length,u=this.mode,p=this.maxes[u],d=[];if(l>=3){for(d[0]=t/p[0],d[1]=e/p[1],d[2]=i/p[2],d[3]="number"==typeof a?a/p[3]:1,h=d.length-1;h>=0;--h){var f=d[h];f<0?d[h]=0:f>1&&(d[h]=1)}return u===n.HSL?o._hslaToRGBA(d):u===n.HSB?o._hsbaToRGBA(d):d}if(1===l&&"string"==typeof t){var m=t.trim().toLowerCase();if(s[m])return r.Color._parseInputs.call(this,s[m]);if(c.HEX3.test(m))return(d=c.HEX3.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255}))[3]=1,d;if(c.HEX6.test(m))return(d=c.HEX6.exec(m).slice(1).map(function(t){return parseInt(t,16)/255}))[3]=1,d;if(c.HEX4.test(m))return d=c.HEX4.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255});if(c.HEX8.test(m))return d=c.HEX8.exec(m).slice(1).map(function(t){return parseInt(t,16)/255});if(c.RGB.test(m))return(d=c.RGB.exec(m).slice(1).map(function(t){return t/255}))[3]=1,d;if(c.RGB_PERCENT.test(m))return(d=c.RGB_PERCENT.exec(m).slice(1).map(function(t){return parseFloat(t)/100}))[3]=1,d;if(c.RGBA.test(m))return d=c.RGBA.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):t/255});if(c.RGBA_PERCENT.test(m))return d=c.RGBA_PERCENT.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):parseFloat(t)/100});if(c.HSL.test(m)?(d=c.HSL.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSLA.test(m)&&(d=c.HSLA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),(d=d.map(function(t){return Math.max(Math.min(t,1),0)})).length)return o._hslaToRGBA(d);if(c.HSB.test(m)?(d=c.HSB.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSBA.test(m)&&(d=c.HSBA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),d.length){for(h=d.length-1;h>=0;--h)d[h]=Math.max(Math.min(d[h],1),0);return o._hsbaToRGBA(d)}d=[1,1,1,1]}else{if(1!==l&&2!==l||"number"!=typeof t)throw new Error(arguments+"is not a valid color representation.");d[0]=t/p[2],d[1]=t/p[2],d[2]=t/p[2],d[3]="number"==typeof e?e/p[3]:1,d=d.map(function(t){return Math.max(Math.min(t,1),0)})}return d},e.exports=r.Color},{"../core/constants":18,"../core/main":24,"./color_conversion":14}],17:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),r.prototype.background=function(){return arguments[0]instanceof r.Image?this.image(arguments[0],0,0,this.width,this.height):this._renderer.background.apply(this._renderer,arguments),this},r.prototype.clear=function(){return this._renderer.clear(),this},r.prototype.colorMode=function(t,e,i,o,s){if(r._validateParameters("colorMode",arguments),t===n.RGB||t===n.HSB||t===n.HSL){this._colorMode=t;var a=this._colorMaxes[t];2===arguments.length?(a[0]=e,a[1]=e,a[2]=e,a[3]=e):4===arguments.length?(a[0]=e,a[1]=i,a[2]=o):5===arguments.length&&(a[0]=e,a[1]=i,a[2]=o,a[3]=s)}return this},r.prototype.fill=function(){return this._renderer._setProperty("_fillSet",!0),this._renderer._setProperty("_doFill",!0),this._renderer.fill.apply(this._renderer,arguments),this},r.prototype.noFill=function(){return this._renderer._setProperty("_doFill",!1),this},r.prototype.noStroke=function(){return this._renderer._setProperty("_doStroke",!1),this},r.prototype.stroke=function(){return this._renderer._setProperty("_strokeSet",!0),this._renderer._setProperty("_doStroke",!0),this._renderer.stroke.apply(this._renderer,arguments),this},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Color":16}],18:[function(t,e,i){"use strict";var r=Math.PI;e.exports={P2D:"p2d",WEBGL:"webgl",ARROW:"default",CROSS:"crosshair",HAND:"pointer",MOVE:"move",TEXT:"text",WAIT:"wait",HALF_PI:r/2,PI:r,QUARTER_PI:r/4,TAU:2*r,TWO_PI:2*r,DEGREES:"degrees",RADIANS:"radians",DEG_TO_RAD:r/180,RAD_TO_DEG:180/r,CORNER:"corner",CORNERS:"corners",RADIUS:"radius",RIGHT:"right",LEFT:"left",CENTER:"center",TOP:"top",BOTTOM:"bottom",BASELINE:"alphabetic",POINTS:0,LINES:1,LINE_STRIP:3,LINE_LOOP:2,TRIANGLES:4,TRIANGLE_FAN:6,TRIANGLE_STRIP:5,QUADS:"quads",QUAD_STRIP:"quad_strip",CLOSE:"close",OPEN:"open",CHORD:"chord",PIE:"pie",PROJECT:"square",SQUARE:"butt",ROUND:"round",BEVEL:"bevel",MITER:"miter",RGB:"rgb",HSB:"hsb",HSL:"hsl",AUTO:"auto",ALT:18,BACKSPACE:8,CONTROL:17,DELETE:46,DOWN_ARROW:40,ENTER:13,ESCAPE:27,LEFT_ARROW:37,OPTION:18,RETURN:13,RIGHT_ARROW:39,SHIFT:16,TAB:9,UP_ARROW:38,BLEND:"source-over",ADD:"lighter",DARKEST:"darken",LIGHTEST:"lighten",DIFFERENCE:"difference",EXCLUSION:"exclusion",MULTIPLY:"multiply",SCREEN:"screen",REPLACE:"copy",OVERLAY:"overlay",HARD_LIGHT:"hard-light",SOFT_LIGHT:"soft-light",DODGE:"color-dodge",BURN:"color-burn",THRESHOLD:"threshold",GRAY:"gray",OPAQUE:"opaque",INVERT:"invert",POSTERIZE:"posterize",DILATE:"dilate",ERODE:"erode",BLUR:"blur",NORMAL:"normal",ITALIC:"italic",BOLD:"bold",_DEFAULT_TEXT_FILL:"#000000",_DEFAULT_LEADMULT:1.25,_CTX_MIDDLE:"middle",LINEAR:"linear",QUADRATIC:"quadratic",BEZIER:"bezier",CURVE:"curve",STROKE:"stroke",FILL:"fill",TEXTURE:"texture",IMMEDIATE:"immediate",NEAREST:"nearest",REPEAT:"repeat",CLAMP:"clamp",MIRROR:"mirror",LANDSCAPE:"landscape",PORTRAIT:"portrait",_DEFAULT_STROKE:"#000000",_DEFAULT_FILL:"#FFFFFF",GRID:"grid",AXES:"axes"}},{}],19:[function(t,e,i){"use strict";function r(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth||0}function n(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight||0}var o=t("./main"),s=t("./constants"),a=[s.ARROW,s.CROSS,s.HAND,s.MOVE,s.TEXT,s.WAIT];o.prototype._frameRate=0,o.prototype._lastFrameTime=window.performance.now(),o.prototype._targetFrameRate=60;var h=window.print;o.prototype.print=function(){arguments.length?console.log.apply(console,arguments):h()},o.prototype.frameCount=0,o.prototype.focused=document.hasFocus(),o.prototype.cursor=function(t,e,i){var r="auto",n=this._curElement.elt;if(a.indexOf(t)>-1)r=t;else if("string"==typeof t){var o="";e&&i&&"number"==typeof e&&"number"==typeof i&&(o=e+" "+i),r="http://"===t.substring(0,7)||"https://"===t.substring(0,8)?"url("+t+") "+o+", auto":/\.(cur|jpg|jpeg|gif|png|CUR|JPG|JPEG|GIF|PNG)$/.test(t)?"url("+t+") "+o+", auto":t}n.style.cursor=r},o.prototype.frameRate=function(t){return o._validateParameters("frameRate",arguments),"number"!=typeof t||t<0?this._frameRate:(this._setProperty("_targetFrameRate",t),this._runFrames(),this)},o.prototype.getFrameRate=function(){return this.frameRate()},o.prototype.setFrameRate=function(t){return this.frameRate(t)},o.prototype.noCursor=function(){this._curElement.elt.style.cursor="none"},o.prototype.displayWidth=screen.width,o.prototype.displayHeight=screen.height,o.prototype.windowWidth=r(),o.prototype.windowHeight=n(),o.prototype._onresize=function(t){this._setProperty("windowWidth",r()),this._setProperty("windowHeight",n());var e,i=this._isGlobal?window:this;"function"==typeof i.windowResized&&(void 0===(e=i.windowResized(t))||e||t.preventDefault())},o.prototype.width=0,o.prototype.height=0,o.prototype.fullscreen=function(t){if(o._validateParameters("fullscreen",arguments),void 0===t)return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;t?function(t){if(!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled))throw new Error("Fullscreen not enabled in this browser.");t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.msRequestFullscreen&&t.msRequestFullscreen()}(document.documentElement):document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.msExitFullscreen&&document.msExitFullscreen()},o.prototype.pixelDensity=function(t){var e;return o._validateParameters("pixelDensity",arguments),"number"==typeof t?(t!==this._pixelDensity&&(this._pixelDensity=t,this._pixelsDirty=!0),e=this,this.resizeCanvas(this.width,this.height,!0)):e=this._pixelDensity,e},o.prototype.displayDensity=function(){return window.devicePixelRatio},o.prototype.getURL=function(){return location.href},o.prototype.getURLPath=function(){return location.pathname.split("/").filter(function(t){return""!==t})},o.prototype.getURLParams=function(){for(var t,e=/[?&]([^&=]+)(?:[&=])([^&=]+)/gim,i={};null!=(t=e.exec(location.search));)t.index===e.lastIndex&&e.lastIndex++,i[t[1]]=t[2];return i},e.exports=o},{"./constants":18,"./main":24}],20:[function(t,e,i){"use strict";var r=t("./main");t("./constants"),r._validateParameters=r._friendlyFileLoadError=function(){};var n=null,o=function(){var e={},i=function(t){return Object.getOwnPropertyNames(t).filter(function(t){return!("_"===t[0]||t in e||(e[t]=!0,0))}).map(function(e){var i;return i="function"==typeof t[e]?"function":e===e.toUpperCase()?"constant":"variable",{name:e,type:i}})};(n=[].concat(i(r.prototype),i(t("./constants")))).sort(function(t,e){return e.name.length-t.name.length})},s=function(t,e){e||(e=console.log.bind(console)),n||o(),n.some(function(i){if(t.message&&null!==t.message.match("\\W?"+i.name+"\\W"))return e("Did you just try to use p5.js's "+i.name+("function"===i.type?"() ":" ")+i.type+"? If so, you may want to move it into your sketch's setup() function.\n\nFor more details, see: https://github.com/processing/p5.js/wiki/p5.js-overview#why-cant-i-assign-variables-using-p5-functions-and-variables-before-setup"),!0})};r.prototype._helpForMisusedAtTopLevelCode=s,"complete"!==document.readyState&&(window.addEventListener("error",s,!1),window.addEventListener("load",function(){window.removeEventListener("error",s,!1)})),e.exports=r},{"../../docs/reference/data.json":void 0,"./constants":18,"./main":24}],21:[function(t,e,i){"use strict";var r=t("./constants");e.exports={modeAdjust:function(t,e,i,n,o){return o===r.CORNER?{x:t,y:e,w:i,h:n}:o===r.CORNERS?{x:t,y:e,w:i-t,h:n-e}:o===r.RADIUS?{x:t-i,y:e-n,w:2*i,h:2*n}:o===r.CENTER?{x:t-.5*i,y:e-.5*n,w:i,h:n}:void 0}}},{"./constants":18}],22:[function(t,e,i){"use strict";var r=t("../core/main"),n=function(){window.mocha||(window.setup&&"function"==typeof window.setup||window.draw&&"function"==typeof window.draw)&&!r.instance&&new r};"complete"===document.readyState?n():window.addEventListener("load",n,!1)},{"../core/main":24}],23:[function(t,e,i){"use strict";var r=t("./main");r.prototype.exit=function(){throw new Error("exit() not implemented, see remove()")},r.prototype.pushStyle=function(){throw new Error("pushStyle() not used, see push()")},r.prototype.popStyle=function(){throw new Error("popStyle() not used, see pop()")},r.prototype.size=function(){var t="size() is not a valid p5 function, to set the size of the ";throw new Error(t+="drawing canvas, please use createCanvas() instead")},e.exports=r},{"./main":24}],24:[function(t,e,i){"use strict";t("./shim");var r=t("./constants"),n=function(t,e,i){"boolean"==typeof e&&void 0===i&&(i=e,e=void 0),this._setupDone=!1,this._pixelDensity=Math.ceil(window.devicePixelRatio)||1,this._userNode=e,this._curElement=null,this._elements=[],this._requestAnimId=0,this._preloadCount=0,this._isGlobal=!1,this._loop=!0,this._initializeInstanceVariables(),this._defaultCanvasSize={width:100,height:100},this._events={mousemove:null,mousedown:null,mouseup:null,dragend:null,dragover:null,click:null,dblclick:null,mouseover:null,mouseout:null,keydown:null,keyup:null,keypress:null,touchstart:null,touchmove:null,touchend:null,resize:null,blur:null},this._events.wheel=null,this._loadingScreenId="p5_loading",this._registeredMethods={};for(var r=Object.getOwnPropertyNames(n.prototype._registeredMethods),o=0;o=i-5)&&(this.redraw(),this._frameRate=1e3/(t-this._lastFrameTime),this._lastFrameTime=t,void 0!==this._updateMouseCoords&&this._updateMouseCoords()),this._loop&&(this._requestAnimId=window.requestAnimationFrame(this._draw))}.bind(this),this._runFrames=function(){this._updateInterval&&clearInterval(this._updateInterval)}.bind(this),this._setProperty=function(t,e){this[t]=e,this._isGlobal&&(window[t]=e)}.bind(this),this.remove=function(){var t=document.getElementById(this._loadingScreenId);if(t&&(t.parentNode.removeChild(t),this._incrementPreload()),this._curElement){for(var e in this._loop=!1,this._requestAnimId&&window.cancelAnimationFrame(this._requestAnimId),this._events)window.removeEventListener(e,this._events[e]);for(var i=0;i-1?o.readAsText(n):o.readAsDataURL(n)}},this)):console.log("The File APIs are not fully supported in this browser."),this},s.Element.prototype._setProperty=function(t,e){this[t]=e},e.exports=s.Element},{"./main":24}],26:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");r.Graphics=function(t,e,i,o){var s=i||n.P2D;for(var a in this.canvas=document.createElement("canvas"),(o._userNode||document.body).appendChild(this.canvas),r.Element.call(this,this.canvas,o,!1),r.prototype)this[a]||("function"==typeof r.prototype[a]?this[a]=r.prototype[a].bind(this):this[a]=r.prototype[a]);return r.prototype._initializeInstanceVariables.apply(this),this.width=t,this.height=e,this._pixelDensity=o._pixelDensity,s===n.WEBGL?this._renderer=new r.RendererGL(this.canvas,this,!1):this._renderer=new r.Renderer2D(this.canvas,this,!1),o._elements.push(this),this._renderer.resize(t,e),this._renderer._applyDefaults(),this},r.Graphics.prototype=Object.create(r.Element.prototype),r.Graphics.prototype.remove=function(){this.elt.parentNode&&this.elt.parentNode.removeChild(this.elt);var t=this._pInst._elements.indexOf(this);for(var e in-1!==t&&this._pInst._elements.splice(t,1),this._events)this.elt.removeEventListener(e,this._events[e])},e.exports=r.Graphics},{"./constants":18,"./main":24}],27:[function(t,e,i){"use strict";function r(t){var e=0,i=0;if(t.offsetParent)do{e+=t.offsetLeft,i+=t.offsetTop}while(t=t.offsetParent);else e+=t.offsetLeft,i+=t.offsetTop;return[e,i]}var n=t("./main"),o=t("../core/constants");n.Renderer=function(t,e,i){n.Element.call(this,t,e),this.canvas=t,i?(this._isMainCanvas=!0,this._pInst._setProperty("_curElement",this),this._pInst._setProperty("canvas",this.canvas),this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height)):(this.canvas.style.display="none",this._styles=[]),this._textSize=12,this._textLeading=15,this._textFont="sans-serif",this._textStyle=o.NORMAL,this._textAscent=null,this._textDescent=null,this._textAlign=o.LEFT,this._textBaseline=o.BASELINE,this._rectMode=o.CORNER,this._ellipseMode=o.CENTER,this._curveTightness=0,this._imageMode=o.CORNER,this._tint=null,this._doStroke=!0,this._doFill=!0,this._strokeSet=!1,this._fillSet=!1},n.Renderer.prototype=Object.create(n.Element.prototype),n.Renderer.prototype.push=function(){return{properties:{_doStroke:this._doStroke,_strokeSet:this._strokeSet,_doFill:this._doFill,_fillSet:this._fillSet,_tint:this._tint,_imageMode:this._imageMode,_rectMode:this._rectMode,_ellipseMode:this._ellipseMode,_textFont:this._textFont,_textLeading:this._textLeading,_textSize:this._textSize,_textAlign:this._textAlign,_textBaseline:this._textBaseline,_textStyle:this._textStyle}}},n.Renderer.prototype.pop=function(t){t.properties&&Object.assign(this,t.properties)},n.Renderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.elt.width=t*this._pInst._pixelDensity,this.elt.height=e*this._pInst._pixelDensity,this.elt.style.width=t+"px",this.elt.style.height=e+"px",this._isMainCanvas&&(this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height))},n.Renderer.prototype.textLeading=function(t){return"number"==typeof t?(this._setProperty("_textLeading",t),this._pInst):this._textLeading},n.Renderer.prototype.textSize=function(t){return"number"==typeof t?(this._setProperty("_textSize",t),this._setProperty("_textLeading",t*o._DEFAULT_LEADMULT),this._applyTextProperties()):this._textSize},n.Renderer.prototype.textStyle=function(t){return t?(t!==o.NORMAL&&t!==o.ITALIC&&t!==o.BOLD||this._setProperty("_textStyle",t),this._applyTextProperties()):this._textStyle},n.Renderer.prototype.textAscent=function(){return null===this._textAscent&&this._updateTextMetrics(),this._textAscent},n.Renderer.prototype.textDescent=function(){return null===this._textDescent&&this._updateTextMetrics(),this._textDescent},n.Renderer.prototype.textAlign=function(t,e){return void 0!==t?(this._setProperty("_textAlign",t),void 0!==e&&this._setProperty("_textBaseline",e),this._applyTextProperties()):{horizontal:this._textAlign,vertical:this._textBaseline}},n.Renderer.prototype.text=function(t,e,i,r,n){var s,a,h,l,u,c,p,d,f=this._pInst,m=Number.MAX_VALUE;if((this._doFill||this._doStroke)&&void 0!==t){if("string"!=typeof t&&(t=t.toString()),t=t.replace(/(\t)/g," "),s=t.split("\n"),void 0!==r){for(d=0,h=0;hr?(u=p[a]+" ",d+=f.textLeading()):u=c;switch(this._rectMode===o.CENTER&&(e-=r/2,i-=n/2),this._textAlign){case o.CENTER:e+=r/2;break;case o.RIGHT:e+=r}var y=!1;if(void 0!==n){switch(this._textBaseline){case o.BOTTOM:i+=n-d;break;case o.CENTER:i+=(n-d)/2;break;case o.BASELINE:y=!0,this._textBaseline=o.TOP}m=i+n-f.textAscent()}for(h=0;hr&&u.length>0?(this._renderText(f,u,e,i,m),u=p[a]+" ",i+=f.textLeading()):u=c;this._renderText(f,u,e,i,m),i+=f.textLeading(),y&&(this._textBaseline=o.BASELINE)}}else{var v=0,g=f.textAlign().vertical;for(g===o.CENTER?v=(s.length-1)*f.textLeading()/2:g===o.BOTTOM&&(v=(s.length-1)*f.textLeading()),l=0;l0&&(c=u.width/t.width),this.drawingContext.drawImage(u,c*e,c*i,c*n,c*o,s,a,h,l)}catch(t){if("NS_ERROR_NOT_AVAILABLE"!==t.name)throw t}this._pInst._pixelsDirty=!0},r.Renderer2D.prototype._getTintedImageCanvas=function(t){if(!t.canvas)return t;var e=o._toPixels(t.canvas),i=document.createElement("canvas");i.width=t.canvas.width,i.height=t.canvas.height;for(var r=i.getContext("2d"),n=r.createImageData(t.canvas.width,t.canvas.height),s=n.data,a=0;a=this.width||e>=this.height)return[0,0,0,255];var o=this._pInst||this,s=o._pixelDensity;t=Math.floor(t),e=Math.floor(e),i=Math.floor(i),n=Math.floor(n);var a,h,l=t*s,u=e*s;if(1!==i||1!==n||this instanceof r.RendererGL){var c=Math.min(i,o.width),p=Math.min(n,o.height),d=c*s,f=p*s,m=new r.Image(c,p);return m.canvas.getContext("2d").drawImage(this.canvas,l,u,d,f,0,0,c,p),m}return o._pixelsDirty?(a=this.drawingContext.getImageData(l,u,1,1).data,h=0):(a=o.pixels,h=4*(l+u*this.width*s)),[a[h+0],a[h+1],a[h+2],a[h+3]]},r.Renderer2D.prototype.loadPixels=function(){var t=this._pInst||this;if(t._pixelsDirty){t._pixelsDirty=!1;var e=t._pixelDensity,i=this.width*e,r=this.height*e,n=this.drawingContext.getImageData(0,0,i,r);t._setProperty("imageData",n),t._setProperty("pixels",n.data)}},r.Renderer2D.prototype.set=function(t,e,i){t=Math.floor(t),e=Math.floor(e);var n=this._pInst||this;if(i instanceof r.Image)this.drawingContext.save(),this.drawingContext.setTransform(1,0,0,1,0,0),this.drawingContext.scale(n._pixelDensity,n._pixelDensity),this.drawingContext.drawImage(i.canvas,t,e),this.drawingContext.restore(),n._pixelsDirty=!0;else{var o=0,s=0,a=0,h=0,l=4*(e*n._pixelDensity*(this.width*n._pixelDensity)+t*n._pixelDensity);if(n.imageData&&!n._pixelsDirty||n.loadPixels.call(n),"number"==typeof i)l1e-5;)c=Math.min(s-o,n.HALF_PI),p.push(this._acuteArcToBezier(o,c)),o+=c;return this._doFill&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a!==n.PIE&&null!=a||h.lineTo(t,e),h.closePath(),h.fill()),this._doStroke&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a===n.PIE?(h.lineTo(t,e),h.closePath()):a===n.CHORD&&h.closePath(),h.stroke()),this},r.Renderer2D.prototype.ellipse=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;var l=.5522847498,u=a/2*l,c=h/2*l,p=n+a,d=o+h,f=n+a/2,m=o+h/2;e.beginPath(),e.moveTo(n,m),e.bezierCurveTo(n,m-c,f-u,o,f,o),e.bezierCurveTo(f+u,o,p,m-c,p,m),e.bezierCurveTo(p,m+c,f+u,d,f,d),e.bezierCurveTo(f-u,d,n,m+c,n,m),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.line=function(t,e,i,r){var n=this.drawingContext;return this._doStroke?this._getStroke()===s?this:(n.lineWidth%2==1&&n.translate(.5,.5),n.beginPath(),n.moveTo(t,e),n.lineTo(i,r),n.stroke(),n.lineWidth%2==1&&n.translate(-.5,-.5),this):this},r.Renderer2D.prototype.point=function(t,e){var i=this.drawingContext;if(!this._doStroke)return this;if(this._getStroke()===s)return this;var r=this._getStroke(),o=this._getFill();t=Math.round(t),e=Math.round(e),this._setFill(r),i.lineWidth>1?(i.beginPath(),i.arc(t,e,i.lineWidth/2,0,n.TWO_PI,!1),i.fill()):i.fillRect(t,e,1,1),this._setFill(o)},r.Renderer2D.prototype.quad=function(t,e,i,r,n,o,a,h){var l=this.drawingContext,u=this._doFill,c=this._doStroke;if(u&&!c){if(this._getFill()===s)return this}else if(!u&&c&&this._getStroke()===s)return this;return l.beginPath(),l.moveTo(t,e),l.lineTo(i,r),l.lineTo(n,o),l.lineTo(a,h),l.closePath(),u&&l.fill(),c&&l.stroke(),this},r.Renderer2D.prototype.rect=function(t){var e=t[0],i=t[1],r=t[2],n=t[3],o=t[4],a=t[5],h=t[6],l=t[7],u=this.drawingContext,c=this._doFill,p=this._doStroke;if(c&&!p){if(this._getFill()===s)return this}else if(!c&&p&&this._getStroke()===s)return this;if(this._doStroke&&u.lineWidth%2==1&&u.translate(.5,.5),u.beginPath(),void 0===o)u.rect(e,i,r,n);else{void 0===a&&(a=o),void 0===h&&(h=a),void 0===l&&(l=h);var d=r/2,f=n/2;r<2*o&&(o=d),n<2*o&&(o=f),r<2*a&&(a=d),n<2*a&&(a=f),r<2*h&&(h=d),n<2*h&&(h=f),r<2*l&&(l=d),n<2*l&&(l=f),u.beginPath(),u.moveTo(e+o,i),u.arcTo(e+r,i,e+r,i+n,a),u.arcTo(e+r,i+n,e,i+n,h),u.arcTo(e,i+n,e,i,l),u.arcTo(e,i,e+r,i,o),u.closePath()}return this._doFill&&u.fill(),this._doStroke&&u.stroke(),this._doStroke&&u.lineWidth%2==1&&u.translate(-.5,-.5),this},r.Renderer2D.prototype.triangle=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3],l=t[4],u=t[5];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;e.beginPath(),e.moveTo(n,o),e.lineTo(a,h),e.lineTo(l,u),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.endShape=function(t,e,i,r,o,s,a){if(0===e.length)return this;if(!this._doStroke&&!this._doFill)return this;var h,l=t===n.CLOSE;l&&!s&&e.push(e[0]);var u,c,p=e.length;if(!i||a!==n.POLYGON&&null!==a)if(!r||a!==n.POLYGON&&null!==a)if(!o||a!==n.POLYGON&&null!==a)if(a===n.POINTS)for(u=0;u2){for(this.drawingContext.beginPath(),u=2;u3)for(u=0;u+13){var d=[],f=1-this._curveTightness;for(this.drawingContext.beginPath(),this.drawingContext.moveTo(e[1][0],e[1][1]),u=1;u+2=o))return t.push(),this._isOpenType()?this._textFont._renderPath(e,i,r,{renderer:this}):(this._doStroke&&this._strokeSet&&this.drawingContext.strokeText(e,i,r),this._doFill&&(this._fillSet||this._setFill(n._DEFAULT_TEXT_FILL),this.drawingContext.fillText(e,i,r))),t.pop(),this._pInst._pixelsDirty=!0,t},r.Renderer2D.prototype.textWidth=function(t){return this._isOpenType()?this._textFont._textWidth(t,this._textSize):this.drawingContext.measureText(t).width},r.Renderer2D.prototype._applyTextProperties=function(){var t,e=this._pInst;return this._setProperty("_textAscent",null),this._setProperty("_textDescent",null),t=this._textFont,this._isOpenType()&&(t=this._textFont.font.familyName,this._setProperty("_textStyle",this._textFont.font.styleName)),this.drawingContext.font=(this._textStyle||"normal")+" "+(this._textSize||12)+"px "+(t||"sans-serif"),this.drawingContext.textAlign=this._textAlign,this._textBaseline===n.CENTER?this.drawingContext.textBaseline=n._CTX_MIDDLE:this.drawingContext.textBaseline=this._textBaseline,e},r.Renderer2D.prototype.push=function(){return this.drawingContext.save(),r.Renderer.prototype.push.apply(this)},r.Renderer2D.prototype.pop=function(t){this.drawingContext.restore(),this._cachedFillStyle=this.drawingContext.fillStyle,this._cachedStrokeStyle=this.drawingContext.strokeStyle,r.Renderer.prototype.pop.call(this,t)},e.exports=r.Renderer2D},{"../image/filters":42,"./constants":18,"./main":24,"./p5.Renderer":27}],29:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");t("./p5.Graphics"),t("./p5.Renderer2D"),t("../webgl/p5.RendererGL");var o="defaultCanvas0",s="p5Canvas";r.prototype.createCanvas=function(t,e,i){r._validateParameters("createCanvas",arguments);var a,h=i||n.P2D;if(h===n.WEBGL){if(a=document.getElementById(o)){a.parentNode.removeChild(a);var l=this._renderer;this._elements=this._elements.filter(function(t){return t!==l})}(a=document.createElement("canvas")).id=o,a.classList.add(s)}else if(this._defaultGraphicsCreated)a=this.canvas;else{a=document.createElement("canvas");for(var u=0;document.getElementById("defaultCanvas"+u);)u++;o="defaultCanvas"+u,a.id=o,a.classList.add(s)}return this._setupDone||(a.dataset.hidden=!0,a.style.visibility="hidden"),this._userNode?this._userNode.appendChild(a):document.body.appendChild(a),h===n.WEBGL?(this._setProperty("_renderer",new r.RendererGL(a,this,!0)),this._elements.push(this._renderer)):this._defaultGraphicsCreated||(this._setProperty("_renderer",new r.Renderer2D(a,this,!0)),this._defaultGraphicsCreated=!0,this._elements.push(this._renderer)),this._renderer.resize(t,e),this._renderer._applyDefaults(),this._renderer},r.prototype.resizeCanvas=function(t,e,i){if(r._validateParameters("resizeCanvas",arguments),this._renderer){var n={};for(var o in this.drawingContext){var s=this.drawingContext[o];"object"!=typeof s&&"function"!=typeof s&&(n[o]=s)}for(var a in this._renderer.resize(t,e),this.width=t,this.height=e,n)try{this.drawingContext[a]=n[a]}catch(t){}i||this.redraw()}},r.prototype.noCanvas=function(){this.canvas&&this.canvas.parentNode.removeChild(this.canvas)},r.prototype.createGraphics=function(t,e,i){return r._validateParameters("createGraphics",arguments),new r.Graphics(t,e,i,this)},r.prototype.blendMode=function(t){if(r._validateParameters("blendMode",arguments),t!==n.BLEND&&t!==n.DARKEST&&t!==n.LIGHTEST&&t!==n.DIFFERENCE&&t!==n.MULTIPLY&&t!==n.EXCLUSION&&t!==n.SCREEN&&t!==n.REPLACE&&t!==n.OVERLAY&&t!==n.HARD_LIGHT&&t!==n.SOFT_LIGHT&&t!==n.DODGE&&t!==n.BURN&&t!==n.ADD&&t!==n.NORMAL)throw new Error("Mode "+t+" not recognized.");this._renderer.blendMode(t)},e.exports=r},{"../webgl/p5.RendererGL":74,"./constants":18,"./main":24,"./p5.Graphics":26,"./p5.Renderer2D":28}],30:[function(t,e,i){"use strict";var r=t("../main"),n=t("../constants"),o=t("../helpers");t("../error_helpers"),r.prototype.arc=function(t,e,i,s,a,h,l,u){if(r._validateParameters("arc",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;for(a=this._toRadians(a),h=this._toRadians(h);a<0;)a+=n.TWO_PI;for(;h<0;)h+=n.TWO_PI;void 0!==a&&void 0!==h&&(h.toFixed(10)===a.toFixed(10)||Math.abs(h-a)===n.TWO_PI?(a%=n.TWO_PI,h%=n.TWO_PI,a+=n.TWO_PI):Math.abs(h-a)>n.TWO_PI&&(a%=n.TWO_PI,h%=n.TWO_PI,h+=n.TWO_PI)),a<=n.HALF_PI?a=Math.atan(i/s*Math.tan(a)):a>n.HALF_PI&&a<=3*n.HALF_PI&&(a=Math.atan(i/s*Math.tan(a))+n.PI),h<=n.HALF_PI?h=Math.atan(i/s*Math.tan(h)):h>n.HALF_PI&&h<=3*n.HALF_PI&&(h=Math.atan(i/s*Math.tan(h))+n.PI),a>h&&(h+=n.TWO_PI),i=Math.abs(i),s=Math.abs(s);var c=o.modeAdjust(t,e,i,s,this._renderer._ellipseMode);return this._renderer.arc(c.x,c.y,c.w,c.h,a,h,l,u),this},r.prototype.ellipse=function(t,e,i,n,s){if(r._validateParameters("ellipse",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;i<0&&(i=Math.abs(i)),void 0===n?n=i:n<0&&(n=Math.abs(n));var a=o.modeAdjust(t,e,i,n,this._renderer._ellipseMode);return this._renderer.ellipse([a.x,a.y,a.w,a.h,s]),this},r.prototype.line=function(){return r._validateParameters("line",arguments),this._renderer._doStroke&&this._renderer.line.apply(this._renderer,arguments),this},r.prototype.point=function(){return r._validateParameters("point",arguments),this._renderer._doStroke&&this._renderer.point.apply(this._renderer,arguments),this},r.prototype.quad=function(){return r._validateParameters("quad",arguments),(this._renderer._doStroke||this._renderer._doFill)&&this._renderer.quad.apply(this._renderer,arguments),this},r.prototype.rect=function(){if(r._validateParameters("rect",arguments),this._renderer._doStroke||this._renderer._doFill){for(var t=o.modeAdjust(arguments[0],arguments[1],arguments[2],arguments[3],this._renderer._rectMode),e=[t.x,t.y,t.w,t.h],i=4;i0))throw new Error("vertex() must be used once before calling quadraticVertex()");u=!0;for(var e=[],i=0;id||Math.abs(this.accelerationY-this.pAccelerationY)>d||Math.abs(this.accelerationZ-this.pAccelerationZ)>d)&&t();var e=this.deviceTurned||window.deviceTurned;if("function"==typeof e){var i=this.rotationX+180,r=this.pRotationX+180,m=a+180;i-r>0&&i-r<270||i-r<-270?u="clockwise":(i-r<0||i-r>270)&&(u="counter-clockwise"),u!==n&&(m=i),Math.abs(i-m)>90&&Math.abs(i-m)<270&&(m=i,this._setProperty("turnAxis","X"),e()),n=u,a=m-180;var y=this.rotationY+180,v=this.pRotationY+180,g=h+180;y-v>0&&y-v<270||y-v<-270?c="clockwise":(y-v<0||y-this.pRotationY>270)&&(c="counter-clockwise"),c!==o&&(g=y),Math.abs(y-g)>90&&Math.abs(y-g)<270&&(g=y,this._setProperty("turnAxis","Y"),e()),o=c,h=g-180,this.rotationZ-this.pRotationZ>0&&this.rotationZ-this.pRotationZ<270||this.rotationZ-this.pRotationZ<-270?p="clockwise":(this.rotationZ-this.pRotationZ<0||this.rotationZ-this.pRotationZ>270)&&(p="counter-clockwise"),p!==s&&(l=this.rotationZ),Math.abs(this.rotationZ-l)>90&&Math.abs(this.rotationZ-l)<270&&(l=this.rotationZ,this._setProperty("turnAxis","Z"),e()),s=p,this._setProperty("turnAxis",void 0)}var _,b,S=this.deviceShaken||window.deviceShaken;"function"==typeof S&&(null!==this.pAccelerationX&&(_=Math.abs(this.accelerationX-this.pAccelerationX),b=Math.abs(this.accelerationY-this.pAccelerationY)),_+b>f&&S())},e.exports=r},{"../core/main":24}],39:[function(t,e,i){"use strict";var r=t("../core/main"),n={};r.prototype.isKeyPressed=!1,r.prototype.keyIsPressed=!1,r.prototype.key="",r.prototype.keyCode=0,r.prototype._onkeydown=function(t){if(!n[t.which]){this._setProperty("isKeyPressed",!0),this._setProperty("keyIsPressed",!0),this._setProperty("keyCode",t.which),n[t.which]=!0,this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which);var e=this.keyPressed||window.keyPressed;"function"!=typeof e||t.charCode||!1===e(t)&&t.preventDefault()}},r.prototype._onkeyup=function(t){var e=this.keyReleased||window.keyReleased;n[t.which]=!1,function(){for(var t in n)if(n.hasOwnProperty(t)&&!0===n[t])return!0;return!1}()||(this._setProperty("isKeyPressed",!1),this._setProperty("keyIsPressed",!1)),this._setProperty("_lastKeyCodeTyped",null),this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which),this._setProperty("keyCode",t.which),"function"==typeof e&&!1===e(t)&&t.preventDefault()},r.prototype._onkeypress=function(t){if(t.which!==this._lastKeyCodeTyped){this._setProperty("keyCode",t.which),this._setProperty("_lastKeyCodeTyped",t.which),this._setProperty("key",String.fromCharCode(t.which));var e=this.keyTyped||window.keyTyped;"function"==typeof e&&!1===e(t)&&t.preventDefault()}},r.prototype._onblur=function(t){n={}},r.prototype.keyIsDown=function(t){return r._validateParameters("keyIsDown",arguments),n[t]},e.exports=r},{"../core/main":24}],40:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._hasMouseInteracted=!1,r.prototype.mouseX=0,r.prototype.mouseY=0,r.prototype.pmouseX=0,r.prototype.pmouseY=0,r.prototype.winMouseX=0,r.prototype.winMouseY=0,r.prototype.pwinMouseX=0,r.prototype.pwinMouseY=0,r.prototype.mouseButton=0,r.prototype.mouseIsPressed=!1,r.prototype._updateNextMouseCoords=function(t){if(null!==this._curElement&&(!t.touches||t.touches.length>0)){var e=function(t,e,i,r){r&&!r.clientX&&(r.touches?r=r.touches[0]:r.changedTouches&&(r=r.changedTouches[0]));var n=t.getBoundingClientRect(),o=t.scrollWidth/e,s=t.scrollHeight/i;return{x:(r.clientX-n.left)/o,y:(r.clientY-n.top)/s,winX:r.clientX,winY:r.clientY,id:r.identifier}}(this._curElement.elt,this.width,this.height,t);this._setProperty("mouseX",e.x),this._setProperty("mouseY",e.y),this._setProperty("winMouseX",e.winX),this._setProperty("winMouseY",e.winY)}this._hasMouseInteracted||(this._updateMouseCoords(),this._setProperty("_hasMouseInteracted",!0))},r.prototype._updateMouseCoords=function(){this._setProperty("pmouseX",this.mouseX),this._setProperty("pmouseY",this.mouseY),this._setProperty("pwinMouseX",this.winMouseX),this._setProperty("pwinMouseY",this.winMouseY),this._setProperty("_pmouseWheelDeltaY",this._mouseWheelDeltaY)},r.prototype._setMouseButton=function(t){1===t.button?this._setProperty("mouseButton",n.CENTER):2===t.button?this._setProperty("mouseButton",n.RIGHT):this._setProperty("mouseButton",n.LEFT)},r.prototype._onmousemove=function(t){var e=this._isGlobal?window:this;this._updateNextMouseCoords(t),this.mouseIsPressed?"function"==typeof e.mouseDragged?!1===e.mouseDragged(t)&&t.preventDefault():"function"==typeof e.touchMoved&&!1===e.touchMoved(t)&&t.preventDefault():"function"==typeof e.mouseMoved&&!1===e.mouseMoved(t)&&t.preventDefault()},r.prototype._onmousedown=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!0),this._setMouseButton(t),this._updateNextMouseCoords(t),"function"==typeof e.mousePressed?!1===e.mousePressed(t)&&t.preventDefault():"function"==typeof e.touchStarted&&!1===e.touchStarted(t)&&t.preventDefault()},r.prototype._onmouseup=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!1),"function"==typeof e.mouseReleased?!1===e.mouseReleased(t)&&t.preventDefault():"function"==typeof e.touchEnded&&!1===e.touchEnded(t)&&t.preventDefault()},r.prototype._ondragend=r.prototype._onmouseup,r.prototype._ondragover=r.prototype._onmousemove,r.prototype._onclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.mouseClicked&&!1===e.mouseClicked(t)&&t.preventDefault()},r.prototype._ondblclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.doubleClicked&&!1===e.doubleClicked(t)&&t.preventDefault()},r.prototype._mouseWheelDeltaY=0,r.prototype._pmouseWheelDeltaY=0,r.prototype._onwheel=function(t){var e=this._isGlobal?window:this;this._setProperty("_mouseWheelDeltaY",t.deltaY),"function"==typeof e.mouseWheel&&(t.delta=t.deltaY,!1===e.mouseWheel(t)&&t.preventDefault())},e.exports=r},{"../core/constants":18,"../core/main":24}],41:[function(t,e,i){"use strict";function r(t,e,i,r,n){n=n||0;var o=t.getBoundingClientRect(),s=t.scrollWidth/e,a=t.scrollHeight/i,h=r.touches[n]||r.changedTouches[n];return{x:(h.clientX-o.left)/s,y:(h.clientY-o.top)/a,winX:h.clientX,winY:h.clientY,id:h.identifier}}var n=t("../core/main");n.prototype.touches=[],n.prototype._updateTouchCoords=function(t){if(null!==this._curElement){for(var e=[],i=0;i=r)break;x=0}for(A=x;A=r);A++){var O=c[g+R];P=a[A],v+=P[(-16777216&O)>>>24],f+=P[(16711680&O)>>16],m+=P[(65280&O)>>8],y+=P[255&O],d+=s[A],g++}M[_=R+w]=v/d,E[_]=f/d,k[_]=m/d,C[_]=y/d}R+=r}for(R=0,S=(b=-n)*r,T=0;T=l)break;x=0,_=b,g=w+S}for(A=x;A=l);A++)P=a[A],v+=P[M[g]],f+=P[E[g]],m+=P[k[g]],y+=P[C[g]],d+=s[A],_++,g+=r;c[w+R]=v/d<<24|f/d<<16|m/d<<8|y/d}R+=r,S+=r,b++}h._setPixels(i,c)}var n,o,s,a,h={_toPixels:function(t){return t instanceof ImageData?t.data:t.getContext("2d").getImageData(0,0,t.width,t.height).data},_getARGB:function(t,e){var i=4*e;return t[i+3]<<24&4278190080|t[i]<<16&16711680|t[i+1]<<8&65280|255&t[i+2]},_setPixels:function(t,e){for(var i=0,r=0,n=t.length;r>>16,t[i+1]=(65280&e[r])>>>8,t[i+2]=255&e[r],t[i+3]=(4278190080&e[r])>>>24},_toImageData:function(t){return t instanceof ImageData?t:t.getContext("2d").getImageData(0,0,t.width,t.height)},_createImageData:function(t,e){return h._tmpCanvas=document.createElement("canvas"),h._tmpCtx=h._tmpCanvas.getContext("2d"),this._tmpCtx.createImageData(t,e)},apply:function(t,e,i){var r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),o=e(n,i);o instanceof ImageData?r.putImageData(o,0,0,0,0,t.width,t.height):r.putImageData(n,0,0,0,0,t.width,t.height)},threshold:function(t,e){var i=h._toPixels(t);void 0===e&&(e=.5);for(var r=Math.floor(255*e),n=0;n=r?255:0,i[n]=i[n+1]=i[n+2]=o}},gray:function(t){for(var e=h._toPixels(t),i=0;i255)throw new Error("Level must be greater than 2 and less than 255 for posterize");for(var r=e-1,n=0;n>8)/r,i[n+1]=255*(s*e>>8)/r,i[n+2]=255*(a*e>>8)/r}},dilate:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))>(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m>o&&(n=c,o=m),v>o&&(n=d,o=v),g>o&&(n=f,o=g),x[b++]=n;h._setPixels(_,x)},erode:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))<(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m=1&&(e=o[0]),o.length>=2&&(i=o[1]),i=i||r.prototype._checkFileExtension(e,i)[1]||"png"){default:n="image/png";break;case"jpeg":case"jpg":n="image/jpeg"}t.toBlob(function(t){r.prototype.downloadFile(t,e,i)},n)},r.prototype.saveFrames=function(t,e,i,o,s){r._validateParameters("saveFrames",arguments);var a=i||3;a=r.prototype.constrain(a,0,15),a*=1e3;var h=o||15;h=r.prototype.constrain(h,0,22);var l=0,u=r.prototype._makeFrame,c=this._curElement.elt,p=setInterval(function(){u(t+l,e,c),l++},1e3/h);setTimeout(function(){if(clearInterval(p),s)s(n);else for(var t=0;t0&&t0&&this.loadPixels(),this.setModified(!0),this._pixelsDirty=!0},r.Image.prototype.copy=function(){var t,e,i,n,o,s,a,h,l;if(9===arguments.length)t=arguments[0],e=arguments[1],i=arguments[2],n=arguments[3],o=arguments[4],s=arguments[5],a=arguments[6],h=arguments[7],l=arguments[8];else{if(8!==arguments.length)throw new Error("Signature not supported");t=this,e=arguments[0],i=arguments[1],n=arguments[2],o=arguments[3],s=arguments[4],a=arguments[5],h=arguments[6],l=arguments[7]}r.Renderer2D._copyHelper(this,t,e,i,n,o,s,a,h,l),this._pixelsDirty=!0},r.Image.prototype.mask=function(t){void 0===t&&(t=this);var e=this.drawingContext.globalCompositeOperation,i=1;t instanceof r.Renderer&&(i=t._pInst._pixelDensity);var n=[t,0,0,i*t.width,i*t.height,0,0,this.width,this.height];this.drawingContext.globalCompositeOperation="destination-in",r.Image.prototype.copy.apply(this,n),this.drawingContext.globalCompositeOperation=e,this.setModified(!0)},r.Image.prototype.filter=function(t,e){n.apply(this.canvas,n[t.toLowerCase()],e),this.setModified(!0)},r.Image.prototype.blend=function(){r.prototype.blend.apply(this,arguments),this.setModified(!0)},r.Image.prototype.setModified=function(t){this._modified=t},r.Image.prototype.isModified=function(){return this._modified},r.Image.prototype.save=function(t,e){r.prototype.saveCanvas(this.canvas,t,e)},e.exports=r.Image},{"../core/main":24,"./filters":42}],46:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("./filters");t("../color/p5.Color"),r.prototype.pixels=[],r.prototype.blend=function(){r._validateParameters("blend",arguments),this._renderer?this._renderer.blend.apply(this._renderer,arguments):r.Renderer2D.prototype.blend.apply(this,arguments)},r.prototype.copy=function(){r._validateParameters("copy",arguments),r.Renderer2D.prototype.copy.apply(this._renderer,arguments)},r.prototype.filter=function(t,e){r._validateParameters("filter",arguments),void 0!==this.canvas?n.apply(this.canvas,n[t.toLowerCase()],e):n.apply(this.elt,n[t.toLowerCase()],e)},r.prototype.get=function(t,e,i,r){return this._renderer.get(t,e,i,r)},r.prototype.loadPixels=function(){r._validateParameters("loadPixels",arguments),this._renderer.loadPixels()},r.prototype.set=function(t,e,i){this._renderer.set(t,e,i)},r.prototype.updatePixels=function(t,e,i,n){r._validateParameters("updatePixels",arguments),0!==this.pixels.length&&this._renderer.updatePixels(t,e,i,n)},e.exports=r},{"../color/p5.Color":16,"../core/main":24,"./filters":42}],47:[function(t,e,i){"use strict";function r(t,e){var i={};if(void 0===(e=e||[]))for(var r=0;r/g,">").replace(/"/g,""").replace(/'/g,"'")}function o(t,e){e&&!0!==e&&"true"!==e||(e=""),t||(t="untitled");var i="";return t&&t.indexOf(".")>-1&&(i=t.split(".").pop()),e&&i!==e&&(t=t+"."+(i=e)),[t,i]}var s=t("../core/main");t("whatwg-fetch"),t("es6-promise").polyfill();var a=t("fetch-jsonp");t("../core/error_helpers"),s.prototype.loadJSON=function(){s._validateParameters("loadJSON",arguments);for(var t,e,i,r=arguments[0],n={},o="json",a=1;a0&&"function"==typeof arguments[u];u--)h++;var c=arguments.length-h,p=arguments[0];if(2===c&&"string"==typeof p&&"object"==typeof arguments[1])r=new Request(p,arguments[1]),e=arguments[2],i=arguments[3];else{for(var d,f="GET",m=1;m64e6&&s._friendlyFileLoadError(7,p),t){case"json":case"jsonp":return e.json();case"binary":return e.blob();case"arrayBuffer":return e.arrayBuffer();case"xml":return e.text().then(function(t){return function t(e){var i=new s.XML,r=e.childNodes;if(r&&r.length){for(var n=0;n"),o.print("");var p=' "),o.print(""),o.print(" "),"0"!==a[0]){o.print(" ");for(var d=0;d"+f),o.print(" ")}o.print(" ")}for(var m=0;m");for(var y=0;y"+g),o.print(" ")}o.print(" ")}o.print("
"),o.print(""),o.print("")}o.close(),o.clear()},s.prototype.writeFile=function(t,e,i){var r="application/octet-stream";s.prototype._isSafari()&&(r="text/plain");var n=new Blob(t,{type:r});s.prototype.downloadFile(n,e,i)},s.prototype.downloadFile=function(e,i,r){var n=o(i,r),a=n[0];if(e instanceof Blob)t("file-saver").saveAs(e,a);else{var h=document.createElement("a");if(h.href=e,h.download=a,h.onclick=function(t){(function(t){document.body.removeChild(t.target)})(t),t.stopPropagation()},h.style.display="none",document.body.appendChild(h),s.prototype._isSafari()){var l="Hello, Safari user! To download this file...\n";l+="1. Go to File --\x3e Save As.\n",l+='2. Choose "Page Source" as the Format.\n',l+='3. Name it with this extension: ."'+n[1]+'"',alert(l)}h.click()}},s.prototype._checkFileExtension=o,s.prototype._isSafari=function(){return Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0},e.exports=s},{"../core/error_helpers":20,"../core/main":24,"es6-promise":4,"fetch-jsonp":5,"file-saver":6,"whatwg-fetch":12}],48:[function(t,e,i){"use strict";var r=t("../core/main");r.Table=function(t){this.columns=[],this.rows=[]},r.Table.prototype.addRow=function(t){var e=t||new r.TableRow;if(void 0===e.arr||void 0===e.obj)throw new Error("invalid TableRow: "+e);return e.table=this,this.rows.push(e),e},r.Table.prototype.removeRow=function(t){this.rows[t].table=null;var e=this.rows.splice(t+1,this.rows.length);this.rows.pop(),this.rows=this.rows.concat(e)},r.Table.prototype.getRow=function(t){return this.rows[t]},r.Table.prototype.getRows=function(){return this.rows},r.Table.prototype.findRow=function(t,e){if("string"==typeof e){for(var i=0;i=0))throw new Error('This table has no column named "'+t+'"');i=e[t],r[i]=e}else r[n]=this.rows[n].obj;return r},r.Table.prototype.getArray=function(){for(var t=[],e=0;e=0))throw new Error('This table has no column named "'+t+'"');this.obj[t]=e,this.arr[i]=e}else{if(!(t0},r.XML.prototype.listChildren=function(){return this.children.map(function(t){return t.name})},r.XML.prototype.getChildren=function(t){return t?this.children.filter(function(e){return e.name===t}):this.children},r.XML.prototype.getChild=function(t){if("string"!=typeof t)return this.children[t];for(var e=0;eo&&(o=a),n[s]=a}0===o&&(o=1);for(var h=0,l=0,u=0;u=1&&(f++,v--),g>=1&&(m++,g--),_>=1&&(y++,_--)}return b},n.prototype.noiseDetail=function(t,e){t>0&&(s=t),e>0&&(a=e)},n.prototype.noiseSeed=function(t){var e=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();e.setSeed(t),r=new Array(o+1);for(var i=0;it*t&&this.div(Math.sqrt(e)).mult(t),this},r.Vector.prototype.setMag=function(t){return this.normalize().mult(t)},r.Vector.prototype.heading=function(){var t=Math.atan2(this.y,this.x);return this.p5?this.p5._fromRadians(t):t},r.Vector.prototype.rotate=function(t){var e=this.heading()+t;this.p5&&(e=this.p5._toRadians(e));var i=this.mag();return this.x=Math.cos(e)*i,this.y=Math.sin(e)*i,this},r.Vector.prototype.angleBetween=function(t){var e=this.dot(t)/(this.mag()*t.mag()),i=Math.acos(Math.min(1,Math.max(-1,e)));return this.p5?this.p5._fromRadians(i):i},r.Vector.prototype.lerp=function(t,e,i,n){return t instanceof r.Vector?this.lerp(t.x,t.y,t.z,e):(this.x+=(t-this.x)*n||0,this.y+=(e-this.y)*n||0,this.z+=(i-this.z)*n||0,this)},r.Vector.prototype.array=function(){return[this.x||0,this.y||0,this.z||0]},r.Vector.prototype.equals=function(t,e,i){var n,o,s;return t instanceof r.Vector?(n=t.x||0,o=t.y||0,s=t.z||0):t instanceof Array?(n=t[0]||0,o=t[1]||0,s=t[2]||0):(n=t||0,o=e||0,s=i||0),this.x===n&&this.y===o&&this.z===s},r.Vector.fromAngle=function(t,e){return void 0===e&&(e=1),new r.Vector(e*Math.cos(t),e*Math.sin(t),0)},r.Vector.fromAngles=function(t,e,i){void 0===i&&(i=1);var n=Math.cos(e),o=Math.sin(e),s=Math.cos(t),a=Math.sin(t);return new r.Vector(i*a*o,-i*s,i*a*n)},r.Vector.random2D=function(){return this.fromAngle(Math.random()*n.TWO_PI)},r.Vector.random3D=function(){var t=Math.random()*n.TWO_PI,e=2*Math.random()-1,i=Math.sqrt(1-e*e),o=i*Math.cos(t),s=i*Math.sin(t);return new r.Vector(o,s,e)},r.Vector.add=function(t,e,i){return i?i.set(t):i=t.copy(),i.add(e),i},r.Vector.sub=function(t,e,i){return i?i.set(t):i=t.copy(),i.sub(e),i},r.Vector.mult=function(t,e,i){return i?i.set(t):i=t.copy(),i.mult(e),i},r.Vector.div=function(t,e,i){return i?i.set(t):i=t.copy(),i.div(e),i},r.Vector.dot=function(t,e){return t.dot(e)},r.Vector.cross=function(t,e){return t.cross(e)},r.Vector.dist=function(t,e){return t.dist(e)},r.Vector.lerp=function(t,e,i,r){return r?r.set(t):r=t.copy(),r.lerp(e,i),r},r.Vector.mag=function(t){var e=t.x,i=t.y,r=t.z,n=e*e+i*i+r*r;return Math.sqrt(n)},e.exports=r.Vector},{"../core/constants":18,"../core/main":24}],55:[function(t,e,i){"use strict";var r=t("../core/main"),n=!1,o=!1,s=0,a=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();r.prototype.randomSeed=function(t){a.setSeed(t),n=!0,o=!1},r.prototype.random=function(t,e){var i;if(i=n?a.rand():Math.random(),void 0===t)return i;if(void 0===e)return t instanceof Array?t[Math.floor(i*t.length)]:i*t;if(t>e){var r=t;t=e,e=r}return i*(e-t)+t},r.prototype.randomGaussian=function(t,e){var i,r,n,a;if(o)i=s,o=!1;else{do{r=this.random(2)-1,n=this.random(2)-1,a=r*r+n*n}while(a>=1);a=Math.sqrt(-2*Math.log(a)/a),i=r*a,s=n*a,o=!0}var h=t||0;return i*(e||1)+h},e.exports=r},{"../core/main":24}],56:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._angleMode=n.RADIANS,r.prototype.acos=function(t){return this._fromRadians(Math.acos(t))},r.prototype.asin=function(t){return this._fromRadians(Math.asin(t))},r.prototype.atan=function(t){return this._fromRadians(Math.atan(t))},r.prototype.atan2=function(t,e){return this._fromRadians(Math.atan2(t,e))},r.prototype.cos=function(t){return Math.cos(this._toRadians(t))},r.prototype.sin=function(t){return Math.sin(this._toRadians(t))},r.prototype.tan=function(t){return Math.tan(this._toRadians(t))},r.prototype.degrees=function(t){return t*n.RAD_TO_DEG},r.prototype.radians=function(t){return t*n.DEG_TO_RAD},r.prototype.angleMode=function(t){t!==n.DEGREES&&t!==n.RADIANS||(this._angleMode=t)},r.prototype._toRadians=function(t){return this._angleMode===n.DEGREES?t*n.DEG_TO_RAD:t},r.prototype._toDegrees=function(t){return this._angleMode===n.RADIANS?t*n.RAD_TO_DEG:t},r.prototype._fromRadians=function(t){return this._angleMode===n.DEGREES?t*n.RAD_TO_DEG:t},e.exports=r},{"../core/constants":18,"../core/main":24}],57:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.textAlign=function(t,e){return r._validateParameters("textAlign",arguments),this._renderer.textAlign.apply(this._renderer,arguments)},r.prototype.textLeading=function(t){return r._validateParameters("textLeading",arguments),this._renderer.textLeading.apply(this._renderer,arguments)},r.prototype.textSize=function(t){return r._validateParameters("textSize",arguments),this._renderer.textSize.apply(this._renderer,arguments)},r.prototype.textStyle=function(t){return r._validateParameters("textStyle",arguments),this._renderer.textStyle.apply(this._renderer,arguments)},r.prototype.textWidth=function(t){return r._validateParameters("textWidth",arguments),0===t.length?0:this._renderer.textWidth.apply(this._renderer,arguments)},r.prototype.textAscent=function(){return r._validateParameters("textAscent",arguments),this._renderer.textAscent()},r.prototype.textDescent=function(){return r._validateParameters("textDescent",arguments),this._renderer.textDescent()},r.prototype._updateTextMetrics=function(){return this._renderer._updateTextMetrics()},e.exports=r},{"../core/main":24}],58:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("opentype.js");t("../core/error_helpers"),r.prototype.loadFont=function(t,e,i){r._validateParameters("loadFont",arguments);var n=new r.Font(this),s=this;return o.load(t,function(o,a){if(o)return void 0!==i?i(o):(r._friendlyFileLoadError(4,t),void console.error(o,t));n.font=a,void 0!==e&&e(n),s._decrementPreload();var h,l,u=t.split("\\").pop().split("/").pop(),c=u.lastIndexOf("."),p=c<1?null:u.substr(c+1);["ttf","otf","woff","woff2"].indexOf(p)>-1&&(h=u.substr(0,c),(l=document.createElement("style")).appendChild(document.createTextNode("\n@font-face {\nfont-family: "+h+";\nsrc: url("+t+");\n}\n")),document.head.appendChild(l))}),n},r.prototype.text=function(t,e,i,n,o){return r._validateParameters("text",arguments),this._renderer._doFill||this._renderer._doStroke?this._renderer.text.apply(this._renderer,arguments):this},r.prototype.textFont=function(t,e){if(r._validateParameters("textFont",arguments),arguments.length){if(!t)throw new Error("null font passed to textFont");return this._renderer._setProperty("_textFont",t),e&&(this._renderer._setProperty("_textSize",e),this._renderer._setProperty("_textLeading",e*n._DEFAULT_LEADMULT)),this._renderer._applyTextProperties()}return this._renderer._textFont},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"opentype.js":10}],59:[function(t,e,i){"use strict";function r(t,e){for(var i=function(t,e){if("object"!=typeof t)t=e;else for(var i in e)void 0===t[i]&&(t[i]=e[i]);return t}(e,{sampleFactor:.1,simplifyThreshold:0}),r=c(t,0,1),o=r/(r*i.sampleFactor),s=[],a=0;a3&&r>=0;--r)h(a(t,r-1),a(t,r),a(t,r+1),e)&&(t.splice(r%t.length,1),i++);return i}function o(t){for(var e,i=[],r=0;rg||v<_)&&(T+=180),{x:f,y:m,m:{x:y,y:v},n:{x:g,y:_},start:{x:b,y:S},end:{x:x,y:w},alpha:T}}function u(t,e,i,r,n,o,s,a,h){return null==h?v(t,e,i,r,n,o,s,a):l(t,e,i,r,n,o,s,a,function(t,e,i,r,n,o,s,a,h){if(!(h<0||v(t,e,i,r,n,o,s,a).01;)u/=2,l=v(t,e,i,r,n,o,s,a,c+=(le&&!i)return{x:(a=u(r,n,o[1],o[2],o[3],o[4],o[5],o[6],e-h)).x,y:a.y,alpha:a.alpha};h+=s,r=+o[5],n=+o[6]}o.shift()}return(a=i?h:l(r,n,o[0],o[1],o[2],o[3],o[4],o[5],1)).alpha&&(a={x:a.x,y:a.y,alpha:a.alpha}),a}function p(t){var e=[],i=0,r=0,n=0,o=0,s=0;if(!t)return e;"M"===t[0][0]&&(i=+t[0][1],r=+t[0][2],n=i,o=r,s++,e[0]=["M",i,r]);for(var a,h,l,u=3===t.length&&"M"===t[0][0]&&"R"===t[1][0].toUpperCase()&&"Z"===t[2][0].toUpperCase(),c=s,p=t.length;c1&&(w=Math.sqrt(w),r*=w,n*=w);var T=r*r,A=n*n,P=(s===a?-1:1)*Math.sqrt(Math.abs((T*A-T*x*x-A*S*S)/(T*x*x+A*S*S)));d=P*r*x/n+(e+h)/2,f=P*-n*S/r+(i+l)/2,c=Math.asin(((i-f)/n).toFixed(9)),p=Math.asin(((l-f)/n).toFixed(9)),c=ep&&(c-=2*y),!a&&p>c&&(p-=2*y)}var M=p-c;if(Math.abs(M)>v){var E=p,k=h,C=l;p=c+v*(a&&p>c?1:-1),h=d+r*Math.cos(p),l=f+n*Math.sin(p),_=t(h,l,r,n,o,0,a,k,C,[p,E,d,f])}M=p-c;var R=Math.cos(c),O=Math.sin(c),L=Math.cos(p),F=Math.sin(p),I=Math.tan(M/4),D=4/3*r*I,U=4/3*n*I,B=[e,i],N=[e+D*O,i-U*R],G=[h+D*F,l-U*L],q=[h,l];if(N[0]=2*B[0]-N[0],N[1]=2*B[1]-N[1],u)return[N,G,q].concat(_);for(var V=[],j=0,z=(_=[N,G,q].concat(_).join().split(",")).length;j7){t[e].shift();for(var o=t[e];o.length;)a[e]="A",n&&(h[e]="A"),t.splice(e++,0,["C"].concat(o.splice(0,6)));t.splice(e,1),i=Math.max(r.length,n&&n.length||0)}},c=function(t,e,o,s,a){t&&e&&"M"===t[a][0]&&"M"!==e[a][0]&&(e.splice(a,0,["M",s.x,s.y]),o.bx=0,o.by=0,o.x=t[a][1],o.y=t[a][2],i=Math.max(r.length,n&&n.length||0))},d="",f="";i=Math.max(r.length,n&&n.length||0);for(var v=0;vr;r+=2){var o=[{x:+t[r-2],y:+t[r-1]},{x:+t[r],y:+t[r+1]},{x:+t[r+2],y:+t[r+3]},{x:+t[r+4],y:+t[r+5]}];e?r?n-4===r?o[3]={x:+t[0],y:+t[1]}:n-2===r&&(o[2]={x:+t[0],y:+t[1]},o[3]={x:+t[2],y:+t[3]}):o[0]={x:+t[n-2],y:+t[n-1]}:n-4===r?o[3]=o[2]:r||(o[0]={x:+t[r],y:+t[r+1]}),i.push(["C",(-o[0].x+6*o[1].x+o[2].x)/6,(-o[0].y+6*o[1].y+o[2].y)/6,(o[1].x+6*o[2].x-o[3].x)/6,(o[1].y+6*o[2].y-o[3].y)/6,o[2].x,o[2].y])}return i}function m(t,e,i,r){return[t,e,i,r,i,r]}function y(t,e,i,r,n,o){var s=1/3,a=2/3;return[s*t+a*i,s*e+a*r,s*n+a*i,s*o+a*r,n,o]}function v(t,e,i,r,n,o,s,a,h){null==h&&(h=1);for(var l=(h=h>1?1:h<0?0:h)/2,u=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],c=0,p=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],d=0;d<12;d++){var f=l*u[d]+l,m=g(f,t,i,n,s),y=g(f,e,r,o,a),v=m*m+y*y;c+=p[d]*Math.sqrt(v)}return l*c}function g(t,e,i,r,n){return t*(t*(-3*e+9*i-9*r+3*n)+6*e-12*i+6*r)-3*e+3*i}function _(){for(var t="",e=arguments.length-1;e>=0;--e){var i=arguments[e];t+=i===Object(i)?JSON.stringify(i):i}return t}var b=t("../core/main"),S=t("../core/constants");b.Font=function(t){this.parent=t,this.cache={},this.font=void 0},b.Font.prototype.list=function(){throw new Error("not yet implemented")},b.Font.prototype.textBounds=function(t,e,i,r,n){e=void 0!==e?e:0,i=void 0!==i?i:0,r=r||this.parent._renderer._textSize;var o=n&&n.renderer&&n.renderer._pInst||this.parent,s=o._renderer,a=s._textAlign||S.LEFT,h=s._textBaseline||S.BASELINE,l=_("textBounds",t,e,i,r,a,h),u=this.cache[l];if(!u){var c,p,d,f,m,y=[],v=[],g=this._scale(r);this.font.forEachGlyph(t,e,i,r,n,function(t,e,i,r){var n=t.getMetrics();y.push(e+n.xMin*g),y.push(e+n.xMax*g),v.push(i+-n.yMin*g),v.push(i+-n.yMax*g)}),c=Math.min.apply(null,y),p=Math.min.apply(null,v),d=Math.max.apply(null,y),f=Math.max.apply(null,v),u={x:c,y:p,h:f-p,w:d-c,advance:c-e},m=this._handleAlignment(s,t,u.x,u.y,u.w+u.advance),u.x=m.x,u.y=m.y,this.cache[_("textBounds",t,e,i,r,a,h)]=u}return u},b.Font.prototype.textToPoints=function(t,e,i,n,s){function a(e){return u[e].name&&"space"===u[e].name||t.length===u.length&&" "===t[e]||u[e].index&&3===u[e].index}var h=0,l=[],u=this._getGlyphs(t);n=n||this.parent._renderer._textSize;for(var c=0;c2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&"number"==typeof r.decimals&&(n=r.decimals),t.toPathData(n)},b.Font.prototype._getSVG=function(t,e,i,r){var n=3;return"string"==typeof t&&arguments.length>2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&("number"==typeof r.decimals&&(n=r.decimals),"number"==typeof r.strokeWidth&&(t.strokeWidth=r.strokeWidth),void 0!==r.fill&&(t.fill=r.fill),void 0!==r.stroke&&(t.stroke=r.stroke)),t.toSVG(n)},b.Font.prototype._renderPath=function(t,e,i,r){var n,o=r&&r.renderer||this.parent._renderer,s=o.drawingContext;n="object"==typeof t&&t.commands?t.commands:this._getPath(t,e,i,r).commands,s.beginPath();for(var a=0;a1;)i=Math.random()*o|0,r=t[--o],t[o]=t[i],t[i]=r;return t},r.prototype.sort=function(t,e){var i=e?t.slice(0,Math.min(e,t.length)):t,r=e?t.slice(Math.min(e,t.length)):[];return(i="string"==typeof i[0]?i.sort():i.sort(function(t,e){return t-e})).concat(r)},r.prototype.splice=function(t,e,i){return Array.prototype.splice.apply(t,[i,0].concat(e)),t},r.prototype.subset=function(t,e,i){return void 0!==i?t.slice(e,e+i):t.slice(e,t.length)},e.exports=r},{"../core/main":24}],61:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.float=function(t){return t instanceof Array?t.map(parseFloat):parseFloat(t)},r.prototype.int=function(t,e){return e=e||10,"string"==typeof t?parseInt(t,e):"number"==typeof t?0|t:"boolean"==typeof t?t?1:0:t instanceof Array?t.map(function(t){return r.prototype.int(t,e)}):void 0},r.prototype.str=function(t){return t instanceof Array?t.map(r.prototype.str):String(t)},r.prototype.boolean=function(t){return"number"==typeof t?0!==t:"string"==typeof t?"true"===t.toLowerCase():"boolean"==typeof t?t:t instanceof Array?t.map(r.prototype.boolean):void 0},r.prototype.byte=function(t){var e=r.prototype.int(t,10);return"number"==typeof e?(e+128)%256-128:e instanceof Array?e.map(r.prototype.byte):void 0},r.prototype.char=function(t){return"number"!=typeof t||isNaN(t)?t instanceof Array?t.map(r.prototype.char):"string"==typeof t?r.prototype.char(parseInt(t,10)):void 0:String.fromCharCode(t)},r.prototype.unchar=function(t){return"string"==typeof t&&1===t.length?t.charCodeAt(0):t instanceof Array?t.map(r.prototype.unchar):void 0},r.prototype.hex=function(t,e){if(e=void 0===e||null===e?e=8:e,t instanceof Array)return t.map(function(t){return r.prototype.hex(t,e)});if("number"==typeof t){t<0&&(t=4294967295+t+1);for(var i=Number(t).toString(16).toUpperCase();i.length=e&&(i=i.substring(i.length-e,i.length)),i}},r.prototype.unhex=function(t){return t instanceof Array?t.map(r.prototype.unhex):parseInt("0x"+t,16)},e.exports=r},{"../core/main":24}],62:[function(t,e,i){"use strict";function r(t,e,i){var r=t<0,n=r?t.toString().substring(1):t.toString(),o=n.indexOf("."),s=-1!==o?n.substring(0,o):n,a=-1!==o?n.substring(o+1):"",h=r?"-":"";if(void 0!==i){var l="";(-1!==o||i-a.length>0)&&(l="."),a.length>i&&(a=a.substring(0,i));for(var u=0;ur.length)for(var o=e-(r+=-1===i?".":"").length+1,s=0;s0?"+"+t.toString():t.toString()}function s(t){return parseFloat(t)>0?" "+t.toString():t.toString()}var a=t("../core/main");t("../core/error_helpers"),a.prototype.join=function(t,e){return a._validateParameters("join",arguments),t.join(e)},a.prototype.match=function(t,e){return a._validateParameters("match",arguments),t.match(e)},a.prototype.matchAll=function(t,e){a._validateParameters("matchAll",arguments);for(var i=new RegExp(e,"g"),r=i.exec(t),n=[];null!==r;)n.push(r),r=i.exec(t);return n},a.prototype.nf=function(t,e,i){return a._validateParameters("nf",arguments),t instanceof Array?t.map(function(t){return r(t,e,i)}):"[object Arguments]"===Object.prototype.toString.call(t)?3===t.length?this.nf(t[0],t[1],t[2]):2===t.length?this.nf(t[0],t[1]):this.nf(t[0]):r(t,e,i)},a.prototype.nfc=function(t,e){return a._validateParameters("nfc",arguments),t instanceof Array?t.map(function(t){return n(t,e)}):n(t,e)},a.prototype.nfp=function(){a._validateParameters("nfp",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(o):o(t)},a.prototype.nfs=function(){a._validateParameters("nfs",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(s):s(t)},a.prototype.split=function(t,e){return a._validateParameters("split",arguments),t.split(e)},a.prototype.splitTokens=function(t,e){var i;if(a._validateParameters("splitTokens",arguments),void 0!==e){var r=e,n=/\]/g.exec(r),o=/\[/g.exec(r);o&&n?(r=r.slice(0,n.index)+r.slice(n.index+1),o=/\[/g.exec(r),r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("[\\["+r+"\\]]","g")):n?(r=r.slice(0,n.index)+r.slice(n.index+1),i=new RegExp("["+r+"\\]]","g")):o?(r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("["+r+"\\[]","g")):i=new RegExp("["+r+"]","g")}else i=/\s/g;return t.split(i).filter(function(t){return t})},a.prototype.trim=function(t){return a._validateParameters("trim",arguments),t instanceof Array?t.map(this.trim):t.trim()},e.exports=a},{"../core/error_helpers":20,"../core/main":24}],63:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.day=function(){return(new Date).getDate()},r.prototype.hour=function(){return(new Date).getHours()},r.prototype.minute=function(){return(new Date).getMinutes()},r.prototype.millis=function(){return window.performance.now()},r.prototype.month=function(){return(new Date).getMonth()+1},r.prototype.second=function(){return(new Date).getSeconds()},r.prototype.year=function(){return(new Date).getFullYear()},e.exports=r},{"../core/main":24}],64:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry");var n=t("../core/constants");r.prototype.plane=function(t,e,i,n){this._assert3d("plane"),r._validateParameters("plane",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=1),void 0===n&&(n=1);var o="plane|"+i+"|"+n;if(!this._renderer.geometryInHash(o)){var s=new r.Geometry(i,n,function(){for(var t,e,i,n=0;n<=this.detailY;n++){e=n/this.detailY;for(var o=0;o<=this.detailX;o++)t=o/this.detailX,i=new r.Vector(t-.5,e-.5,0),this.vertices.push(i),this.uvs.push(t,e)}});s.computeFaces().computeNormals(),i<=1&&n<=1?s._makeTriangleEdges()._edgesToVertices():console.log("Cannot draw stroke on plane objects with more than 1 detailX or 1 detailY"),this._renderer.createBuffers(o,s)}return this._renderer.drawBuffersScaled(o,t,e,1),this},r.prototype.box=function(t,e,i,n,o){this._assert3d("box"),r._validateParameters("box",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=e);var s=this._renderer.attributes&&this._renderer.attributes.perPixelLighting;void 0===n&&(n=s?1:4),void 0===o&&(o=s?1:4);var a="box|"+n+"|"+o;if(!this._renderer.geometryInHash(a)){var h=new r.Geometry(n,o,function(){var t=[[0,4,2,6],[1,3,5,7],[0,1,4,5],[2,6,3,7],[0,2,1,3],[4,5,6,7]];this.strokeIndices=[[0,1],[1,3],[3,2],[6,7],[8,9],[9,11],[14,15],[16,17],[17,19],[18,19],[20,21],[22,23]];for(var e=0;eo?(_=i,g=1,v=e):v=t+(e-t)*g,-2!==h&&h!==o+2||(v=0),_-=i/2,m[h]=0===v?1:n,l=0;lo?0:Math.sin(2*b*Math.PI)*Math.cos(y),h<0?-1:h>o?1:Math.sin(y),h<0||h>o?0:Math.cos(2*b*Math.PI)*Math.cos(y))),this.uvs.push(b,g)}}var S=0;if(s){for(u=0;u=n.TWO_PI?(e="ellipse")+"|"+p+"|":(e="arc")+"|"+l+"|"+u+"|"+c+"|"+p+"|",!this.geometryInHash(i)){var d=new r.Geometry(p,1,function(){if(this.strokeIndices=[],l.toFixed(10)!==u.toFixed(10)){c!==n.PIE&&void 0!==c||(this.vertices.push(new r.Vector(.5,.5,0)),this.uvs.push([.5,.5]));for(var t=0;t<=p;t++){var e=t/p,i=(u-l)*e+l,o=.5+Math.cos(i)/2,s=.5+Math.sin(i)/2;this.vertices.push(new r.Vector(o,s,0)),this.uvs.push([o,s]),t0&&h>0&&(this.strokeIndices=[[0,a],[a,(a+1)*(h+1)-1],[(a+1)*(h+1)-1,(a+1)*h],[(a+1)*h,0]])});u.computeFaces().computeNormals()._makeTriangleEdges()._edgesToVertices(),this.createBuffers(l,u)}var c=this.uMVMatrix.copy();try{this.uMVMatrix.translate([i,n,0]),this.uMVMatrix.scale(o,s,1),this.drawBuffers(l)}finally{this.uMVMatrix=c}return this},r.RendererGL.prototype.quad=function(t,e,i,n,o,s,a,h){var l="quad|"+t+"|"+e+"|"+i+"|"+n+"|"+o+"|"+s+"|"+a+"|"+h;if(!this.geometryInHash(l)){var u=new r.Geometry(2,2,function(){this.vertices.push(new r.Vector(t,e,0)),this.vertices.push(new r.Vector(i,n,0)),this.vertices.push(new r.Vector(o,s,0)),this.vertices.push(new r.Vector(a,h,0)),this.uvs.push(0,0,1,0,1,1,0,1),this.strokeIndices=[[0,1],[1,2],[2,3],[3,0]]});u.computeNormals()._makeTriangleEdges()._edgesToVertices(),u.faces=[[0,1,2],[2,3,0]],this.createBuffers(l,u)}return this.drawBuffers(l),this},r.RendererGL.prototype.bezier=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._bezierDetail||20;this.beginShape();for(var d=0;d<=p;d++){var f=Math.pow(1-d/p,3),m=d/p*3*Math.pow(1-d/p,2),y=3*Math.pow(d/p,2)*(1-d/p),v=Math.pow(d/p,3);this.vertex(t*f+r*m+s*y+l*v,e*f+n*m+a*y+u*v,i*f+o*m+h*y+c*v)}return this.endShape(),this},r.RendererGL.prototype.curve=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._curveDetail;this.beginShape();for(var d=0;d<=p;d++){var f=.5*Math.pow(d/p,3),m=.5*Math.pow(d/p,2),y=d/p*.5,v=f*(3*r-t-3*s+l)+m*(2*t-5*r+4*s-l)+y*(-t+s)+2*r*.5,g=f*(3*n-e-3*a+u)+m*(2*e-5*n+4*a-u)+y*(-e+a)+2*n*.5,_=f*(3*o-i-3*h+c)+m*(2*i-5*o+4*h-c)+y*(-i+h)+2*o*.5;this.vertex(v,g,_)}return this.endShape(),this},r.RendererGL.prototype.line=function(){return 6===arguments.length?(this.beginShape(),this.vertex(arguments[0],arguments[1],arguments[2]),this.vertex(arguments[3],arguments[4],arguments[5]),this.endShape()):4===arguments.length&&(this.beginShape(),this.vertex(arguments[0],arguments[1],0),this.vertex(arguments[2],arguments[3],0),this.endShape()),this},r.RendererGL.prototype.bezierVertex=function(){if(0===this.immediateMode._bezierVertex.length)throw Error("vertex() must be used once before calling bezierVertex()");var t,e,i,r,n,o=[],s=[],a=[],h=arguments.length;if(t=0,0===this._lookUpTableBezier.length||this._lutBezierDetail!==this._pInst._curveDetail){this._lookUpTableBezier=[],this._lutBezierDetail=this._pInst._curveDetail;for(var l=1/this._lutBezierDetail,u=0,c=1,p=0;u<1;){if(t=parseFloat(u.toFixed(6)),this._lookUpTableBezier[p]=this._bezierCoefficients(t),c.toFixed(6)===l.toFixed(6)){t=parseFloat(c.toFixed(6))+parseFloat(u.toFixed(6)),++p,this._lookUpTableBezier[p]=this._bezierCoefficients(t);break}u+=l,c-=l,++p}}var d=this._lookUpTableBezier.length;if(6===h){for(this.isBezier=!0,o=[this.immediateMode._bezierVertex[0],arguments[0],arguments[2],arguments[4]],s=[this.immediateMode._bezierVertex[1],arguments[1],arguments[3],arguments[5]],n=0;n0&&this.mouseY0){var i=this._renderer._curCamera;void 0===t&&(t=1),void 0===e&&(e=t),!0!==this.contextMenuDisabled&&(this.canvas.oncontextmenu=function(){return!1},this._setProperty("contextMenuDisabled",!0)),!0!==this.wheelDefaultDisabled&&(this.canvas.onwheel=function(){return!1},this._setProperty("wheelDefaultDisabled",!0));var n=this.height0?this._renderer._curCamera._orbit(0,0,.5*n):this._renderer._curCamera._orbit(0,0,-.5*n)),this.mouseIsPressed)if(this.mouseButton===this.LEFT){var o=-t*(this.mouseX-this.pmouseX)/n,s=e*(this.mouseY-this.pmouseY)/n;this._renderer._curCamera._orbit(o,s,0)}else if(this.mouseButton===this.RIGHT){var a=i._getLocalAxes(),h=Math.sqrt(a.x[0]*a.x[0]+a.x[2]*a.x[2]);0!==h&&(a.x[0]/=h,a.x[2]/=h);var l=Math.sqrt(a.y[0]*a.y[0]+a.y[2]*a.y[2]);0!==l&&(a.y[0]/=l,a.y[2]/=l);var u=-1*t*(this.mouseX-this.pmouseX),c=-1*e*(this.mouseY-this.pmouseY);i.setPosition(i.eyeX+u*a.x[0]+c*a.z[0],i.eyeY,i.eyeZ+u*a.x[2]+c*a.z[2])}return this}},r.prototype.debugMode=function(){this._assert3d("debugMode"),r._validateParameters("debugMode",arguments);for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1);arguments[0]===n.GRID?this.registerMethod("post",this._grid.call(this,arguments[1],arguments[2],arguments[3],arguments[4],arguments[5])):arguments[0]===n.AXES?this.registerMethod("post",this._axesIcon.call(this,arguments[1],arguments[2],arguments[3],arguments[4])):(this.registerMethod("post",this._grid.call(this,arguments[0],arguments[1],arguments[2],arguments[3],arguments[4])),this.registerMethod("post",this._axesIcon.call(this,arguments[5],arguments[6],arguments[7],arguments[8])))},r.prototype.noDebugMode=function(){this._assert3d("noDebugMode");for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1)},r.prototype._grid=function(t,e,i,r,n){void 0===t&&(t=this.width/2),void 0===e&&(e=Math.round(t/30)<4?4:Math.round(t/30)),void 0===i&&(i=0),void 0===r&&(r=0),void 0===n&&(n=0);var o=t/e,s=t/2;return function(){this.push(),this.stroke(255*this._renderer.curStrokeColor[0],255*this._renderer.curStrokeColor[1],255*this._renderer.curStrokeColor[2]),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]);for(var t=0;t<=e;t++)this.beginShape(this.LINES),this.vertex(-s+i,r,t*o-s+n),this.vertex(+s+i,r,t*o-s+n),this.endShape();for(var a=0;a<=e;a++)this.beginShape(this.LINES),this.vertex(a*o-s+i,r,-s+n),this.vertex(a*o-s+i,r,+s+n),this.endShape();this.pop()}},r.prototype._axesIcon=function(t,e,i,r){return void 0===t&&(t=this.width/20>40?this.width/20:40),void 0===e&&(e=-this.width/4),void 0===i&&(i=e),void 0===r&&(r=e),function(){this.push(),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]),this.strokeWeight(2),this.stroke(255,0,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e+t,i,r),this.endShape(),this.stroke(0,255,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i+t,r),this.endShape(),this.stroke(0,0,255),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i,r+t),this.endShape(),this.pop()}},e.exports=r},{"../core/constants":18,"../core/main":24}],66:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.ambientLight=function(t,e,i,n){this._assert3d("ambientLight"),r._validateParameters("ambientLight",arguments);var o=this.color.apply(this,arguments),s=this._renderer._useLightShader();return s.setUniform("uUseLighting",!0),s.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.ambientLightColors.push(o._array[0],o._array[1],o._array[2]),s.setUniform("uAmbientColor",this._renderer.ambientLightColors),s.setUniform("uAmbientLightCount",this._renderer.ambientLightColors.length/3),this},r.prototype.directionalLight=function(t,e,i,n,o,s){this._assert3d("directionalLight"),r._validateParameters("directionalLight",arguments);var a,h=this._renderer._useLightShader();a=t instanceof r.Color?t:this.color(t,e,i);var l,u,c,p=arguments[arguments.length-1];"number"==typeof p?(l=arguments[arguments.length-3],u=arguments[arguments.length-2],c=arguments[arguments.length-1]):(l=p.x,u=p.y,c=p.z),h.setUniform("uUseLighting",!0),h.setUniform("uMaterialColor",this._renderer.curFillColor);var d=Math.sqrt(l*l+u*u+c*c);return this._renderer.directionalLightDirections.push(l/d,u/d,c/d),h.setUniform("uLightingDirection",this._renderer.directionalLightDirections),this._renderer.directionalLightColors.push(a._array[0],a._array[1],a._array[2]),h.setUniform("uDirectionalColor",this._renderer.directionalLightColors),h.setUniform("uDirectionalLightCount",this._renderer.directionalLightColors.length/3),this},r.prototype.pointLight=function(t,e,i,n,o,s){var a;this._assert3d("pointLight"),r._validateParameters("pointLight",arguments),a=t instanceof r.Color?t:this.color(t,e,i);var h,l,u,c=arguments[arguments.length-1];"number"==typeof c?(h=arguments[arguments.length-3],l=arguments[arguments.length-2],u=arguments[arguments.length-1]):(h=c.x,l=c.y,u=c.z);var p=this._renderer._useLightShader();return p.setUniform("uUseLighting",!0),p.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.pointLightPositions.push(h,l,u),p.setUniform("uPointLightLocation",this._renderer.pointLightPositions),this._renderer.pointLightColors.push(a._array[0],a._array[1],a._array[2]),p.setUniform("uPointLightColor",this._renderer.pointLightColors),p.setUniform("uPointLightCount",this._renderer.pointLightColors.length/3),this},e.exports=r},{"../core/main":24}],67:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry"),r.prototype.loadModel=function(t){var e,i,n;r._validateParameters("loadModel",arguments),"boolean"==typeof arguments[1]?(e=arguments[1],i=arguments[2],n=arguments[3]):(e=!1,i=arguments[1],n=arguments[2]);var o=new r.Geometry;o.gid=t+"|"+e;var s=this;return this.loadStrings(t,function(t){(function(t,e){for(var i={v:[],vt:[],vn:[]},n={},o=0;o0)if("v"===s[0]||"vn"===s[0]){var a=new r.Vector(parseFloat(s[1]),parseFloat(s[2]),parseFloat(s[3]));i[s[0]].push(a)}else if("vt"===s[0]){var h=[parseFloat(s[1]),parseFloat(s[2])];i[s[0]].push(h)}else if("f"===s[0])for(var l=3;l0&&(this._renderer.geometryInHash(t.gid)||(t._makeTriangleEdges()._edgesToVertices(),this._renderer.createBuffers(t.gid,t)),this._renderer.drawBuffers(t.gid))},e.exports=r},{"../core/main":24,"./p5.Geometry":70}],68:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Texture"),r.prototype.loadShader=function(t,e){r._validateParameters("loadShader",arguments);var i=new r.Shader,n=this,o=!1,s=!1;return this.loadStrings(e,function(t){i._fragSrc=t.join("\n"),o=!0,s&&n._decrementPreload()}),this.loadStrings(t,function(t){i._vertSrc=t.join("\n"),s=!0,o&&n._decrementPreload()}),i},r.prototype.createShader=function(t,e){return this._assert3d("createShader"),r._validateParameters("createShader",arguments),new r.Shader(this._renderer,t,e)},r.prototype.shader=function(t){return this._assert3d("shader"),r._validateParameters("shader",arguments),void 0===t._renderer&&(t._renderer=this._renderer),t.isStrokeShader()?this._renderer.setStrokeShader(t):this._renderer.setFillShader(t),this},r.prototype.normalMaterial=function(){return this._assert3d("normalMaterial"),r._validateParameters("normalMaterial",arguments),this._renderer.drawMode=n.FILL,this._renderer.setFillShader(this._renderer._getNormalShader()),this._renderer.curFillColor=[1,1,1,1],this.noStroke(),this},r.prototype.texture=function(t){this._assert3d("texture"),r._validateParameters("texture",arguments),this._renderer.drawMode=n.TEXTURE;var e=this._renderer._useLightShader();return e.setUniform("uSpecular",!1),e.setUniform("isTexture",!0),e.setUniform("uSampler",t),this.noStroke(),this},r.prototype.ambientMaterial=function(t,e,i,n){this._assert3d("ambientMaterial"),r._validateParameters("ambientMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!1),s.setUniform("isTexture",!1),this},r.prototype.specularMaterial=function(t,e,i,n){this._assert3d("specularMaterial"),r._validateParameters("specularMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!0),s.setUniform("isTexture",!1),this},r.RendererGL.prototype._applyColorBlend=function(t){var e=this.GL,i=this.drawMode===n.TEXTURE;return i||t[t.length-1]<1?(e.depthMask(i),e.enable(e.BLEND),e.blendEquation(e.FUNC_ADD),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA)):(e.depthMask(!0),e.disable(e.BLEND)),t},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Texture":76}],69:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.camera=function(){return this._assert3d("camera"),r._validateParameters("camera",arguments),this._renderer._curCamera.camera.apply(this._renderer._curCamera,arguments),this},r.prototype.perspective=function(){return this._assert3d("perspective"),r._validateParameters("perspective",arguments),this._renderer._curCamera.perspective.apply(this._renderer._curCamera,arguments),this},r.prototype.ortho=function(){return this._assert3d("ortho"),r._validateParameters("ortho",arguments),this._renderer._curCamera.ortho.apply(this._renderer._curCamera,arguments),this},r.prototype.createCamera=function(){this._assert3d("createCamera");var t=new r.Camera(this._renderer);return t._computeCameraDefaultSettings(),t._setDefaultCamera(),this._renderer._curCamera=t,t},r.Camera=function(t){this._renderer=t,this.cameraType="default",this.cameraMatrix=new r.Matrix,this.projMatrix=new r.Matrix},r.Camera.prototype.perspective=function(t,e,i,n){void 0===t?(t=this.defaultCameraFOV,this.cameraFOV=t):this.cameraFOV=this._renderer._pInst._toRadians(t),void 0===e&&(e=this.defaultAspectRatio),void 0===i&&(i=this.defaultCameraNear),void 0===n&&(n=this.defaultCameraFar),i<=1e-4&&(i=.01,console.log("Avoid perspective near plane values close to or below 0. Setting value to 0.01.")),nMath.PI?h=Math.PI:h<=0&&(h=.001);var l=Math.sin(h)*s*Math.sin(a),u=Math.cos(h)*s,c=Math.sin(h)*s*Math.cos(a);this.camera(l+this.centerX,u+this.centerY,c+this.centerZ,this.centerX,this.centerY,this.centerZ,0,1,0)},r.Camera.prototype._isActive=function(){return this===this._renderer._curCamera},r.prototype.setCamera=function(t){this._renderer._curCamera=t,this._renderer.uPMatrix.set(t.projMatrix.mat4[0],t.projMatrix.mat4[1],t.projMatrix.mat4[2],t.projMatrix.mat4[3],t.projMatrix.mat4[4],t.projMatrix.mat4[5],t.projMatrix.mat4[6],t.projMatrix.mat4[7],t.projMatrix.mat4[8],t.projMatrix.mat4[9],t.projMatrix.mat4[10],t.projMatrix.mat4[11],t.projMatrix.mat4[12],t.projMatrix.mat4[13],t.projMatrix.mat4[14],t.projMatrix.mat4[15])},e.exports=r.Camera},{"../core/main":24}],70:[function(t,e,i){"use strict";var r=t("../core/main");r.Geometry=function(t,e,i){return this.vertices=[],this.lineVertices=[],this.lineNormals=[],this.vertexNormals=[],this.faces=[],this.uvs=[],this.edges=[],this.detailX=void 0!==t?t:1,this.detailY=void 0!==e?e:1,i instanceof Function&&i.call(this),this},r.Geometry.prototype.computeFaces=function(){this.faces.length=0;for(var t,e,i,r,n=this.detailX+1,o=0;o1&&(u=1),h.mult(Math.asin(u)/l))},r.Geometry.prototype.computeNormals=function(){var t,e=this.vertexNormals,i=this.vertices,n=this.faces;for(e.length=0,t=0;tthis.vertices.length-1-this.detailX;e--)t.add(this.vertexNormals[e]);for(t=r.Vector.div(t,this.detailX),e=this.vertices.length-1;e>this.vertices.length-1-this.detailX;e--)this.vertexNormals[e]=t;return this},r.Geometry.prototype._makeTriangleEdges=function(){if(this.edges.length=0,Array.isArray(this.strokeIndices))for(var t=0,e=this.strokeIndices.length;t0){for(var t=this.vertices[0].copy(),e=this.vertices[0].copy(),i=0;i1){if(this._useImmediateModeShader(),this._doStroke&&this.drawMode!==n.TEXTURE){for(var h=0;h1e3){var e=Object.keys(this.gHash)[0];delete this.gHash[e],n--}this.gHash[t]={}},r.RendererGL.prototype._freeBuffers=function(t){var e=this.gHash[t];if(e){delete this.gHash[t],n--;var i=this.GL;e.vertexBuffer&&i.deleteBuffer(e.vertexBuffer),e.normalBuffer&&i.deleteBuffer(e.normalBuffer),e.lineNormalBuffer&&i.deleteBuffer(e.lineNormalBuffer),e.uvBuffer&&i.deleteBuffer(e.uvBuffer),e.indexBuffer&&i.deleteBuffer(e.indexBuffer),e.lineVertexBuffer&&i.deleteBuffer(e.lineVertexBuffer)}},r.RendererGL.prototype.createBuffers=function(t,e){var i=this.GL;this._initBufferDefaults(t);var r=this.gHash[t];return r.numberOfItems=3*e.faces.length,r.lineVertexCount=e.lineVertices.length,this._useColorShader(),this.curStrokeShader.attributes.aPosition&&(r.lineVertexBuffer=i.createBuffer(),this._bindBuffer(r.lineVertexBuffer,i.ARRAY_BUFFER,this._flatten(e.lineVertices),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),this.curStrokeShader.attributes.aDirection&&(r.lineNormalBuffer=i.createBuffer(),this._bindBuffer(r.lineNormalBuffer,i.ARRAY_BUFFER,this._flatten(e.lineNormals),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aPosition&&(r.vertexBuffer=i.createBuffer(),this._bindBuffer(r.vertexBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertices),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),r.indexBuffer=i.createBuffer(),this._bindBuffer(r.indexBuffer,i.ELEMENT_ARRAY_BUFFER,this._flatten(e.faces),Uint16Array,i.STATIC_DRAW),this.curFillShader.attributes.aNormal&&(r.normalBuffer=i.createBuffer(),this._bindBuffer(r.normalBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertexNormals),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aTexCoord&&(r.uvBuffer=i.createBuffer(),this._bindBuffer(r.uvBuffer,i.ARRAY_BUFFER,this._flatten(e.uvs),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,i.FLOAT,!1,0,0)),r},r.RendererGL.prototype.drawBuffers=function(t){var e=this.GL;this._useColorShader();var i=this.gHash[t];return this._doStroke&&i.lineVertexCount>0&&(this.curStrokeShader.bindShader(),i.lineVertexBuffer&&(this._bindBuffer(i.lineVertexBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.lineNormalBuffer&&(this._bindBuffer(i.lineNormalBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curStrokeColor),this._drawArrays(e.TRIANGLES,t),this.curStrokeShader.unbindShader()),!1!==this._doFill&&(this.curFillShader.bindShader(),i.vertexBuffer&&(this._bindBuffer(i.vertexBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.indexBuffer&&this._bindBuffer(i.indexBuffer,e.ELEMENT_ARRAY_BUFFER),i.normalBuffer&&(this._bindBuffer(i.normalBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,e.FLOAT,!1,0,0)),i.uvBuffer&&(this._bindBuffer(i.uvBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curFillColor),this._drawElements(e.TRIANGLES,t),this.curFillShader.unbindShader()),this},r.RendererGL.prototype.drawBuffersScaled=function(t,e,i,r){var n=this.uMVMatrix.copy();try{this.uMVMatrix.scale(e,i,r),this.drawBuffers(t)}finally{this.uMVMatrix=n}},r.RendererGL.prototype._drawArrays=function(t,e){return this.GL.drawArrays(t,0,this.gHash[e].lineVertexCount),this._pInst._pixelsDirty=!0,this},r.RendererGL.prototype._drawElements=function(t,e){this.GL.drawElements(t,this.gHash[e].numberOfItems,this.GL.UNSIGNED_SHORT,0),this._pInst._pixelsDirty=!0},r.RendererGL.prototype._drawPoints=function(t,e){var i=this.GL;this._bindBuffer(e,i.ARRAY_BUFFER,this._vToNArray(t),Float32Array,i.STATIC_DRAW),this.curPointShader.enableAttrib(this.curPointShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0),i.drawArrays(i.Points,0,t.length)},e.exports=r.RendererGL},{"../core/main":24}],74:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("libtess");t("./p5.Shader"),t("./p5.Camera"),t("../core/p5.Renderer"),t("./p5.Matrix");var s={immediateVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uResolution;\nuniform float uPointSize;\n\nvarying vec4 vColor;\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n gl_PointSize = uPointSize;\n}\n",vertexColorVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n}\n",vertexColorFrag:"precision mediump float;\nvarying vec4 vColor;\nvoid main(void) {\n gl_FragColor = vColor;\n}",normalVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\n\nvarying vec3 vVertexNormal;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vVertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertTexCoord = aTexCoord;\n}\n",normalFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nvoid main(void) {\n gl_FragColor = vec4(vVertexNormal, 1.0);\n}",basicFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nuniform vec4 uMaterialColor;\nvoid main(void) {\n gl_FragColor = uMaterialColor;\n}",lightVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uViewMatrix;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nuniform vec3 uAmbientColor[8];\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nvarying vec3 vVertexNormal;\nvarying vec2 vVertTexCoord;\nvarying vec3 vLightWeighting;\n\nvoid main(void){\n\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\n vec3 vertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertexNormal = vertexNormal;\n vVertTexCoord = aTexCoord;\n\n vec4 mvPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n vec3 eyeDirection = normalize(-mvPosition.xyz);\n\n float shininess = 32.0;\n float specularFactor = 2.0;\n float diffuseFactor = 0.3;\n\n vec3 ambientLightFactor = vec3(0.0);\n\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n ambientLightFactor += uAmbientColor[i];\n }\n\n\n vec3 directionalLightFactor = vec3(0.0);\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n vec3 dir = uLightingDirection[j];\n float directionalLightWeighting = max(dot(vertexNormal, -dir), 0.0);\n directionalLightFactor += uDirectionalColor[j] * directionalLightWeighting;\n }\n\n\n vec3 pointLightFactor = vec3(0.0);\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n vec3 loc = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightDirection = normalize(loc - mvPosition.xyz);\n\n float directionalLightWeighting = max(dot(vertexNormal, lightDirection), 0.0);\n\n float specularLightWeighting = 0.0;\n if (uSpecular ){\n vec3 reflectionDirection = reflect(-lightDirection, vertexNormal);\n specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess);\n }\n\n pointLightFactor += uPointLightColor[k] * (specularFactor * specularLightWeighting\n + directionalLightWeighting * diffuseFactor);\n }\n\n vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightFactor;\n}\n",lightTextureFrag:"precision mediump float;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nvarying vec3 vLightWeighting;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n gl_FragColor = isTexture ? texture2D(uSampler, vVertTexCoord) : uMaterialColor;\n if (uUseLighting)\n gl_FragColor.rgb *= vLightWeighting;\n}",phongVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform vec3 uAmbientColor[8];\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvoid main(void){\n\n vec4 viewModelPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n\n // Pass varyings to fragment shader\n vViewPosition = viewModelPosition.xyz;\n gl_Position = uProjectionMatrix * viewModelPosition; \n\n vNormal = normalize(uNormalMatrix * normalize(aNormal));\n vTexCoord = aTexCoord;\n\n vAmbientColor = vec3(0.0);\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n vAmbientColor += uAmbientColor[i];\n }\n}\n",phongFrag:"precision mediump float;\n\n//uniform mat4 uModelViewMatrix;\nuniform mat4 uViewMatrix;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvec3 V;\nvec3 N;\n\nconst float shininess = 32.0;\nconst float specularFactor = 2.0;\nconst float diffuseFactor = 0.73;\n\nstruct LightResult {\n\tfloat specular;\n\tfloat diffuse;\n};\n\nfloat phongSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float shininess) {\n\n vec3 R = normalize(reflect(-lightDirection, surfaceNormal)); \n return pow(max(0.0, dot(R, viewDirection)), shininess);\n}\n\nfloat lambertDiffuse(\n vec3 lightDirection,\n vec3 surfaceNormal) {\n return max(0.0, dot(-lightDirection, surfaceNormal));\n}\n\nLightResult light(vec3 lightVector) {\n\n vec3 L = normalize(lightVector);\n\n //compute our diffuse & specular terms\n LightResult lr;\n if (uSpecular)\n lr.specular = phongSpecular(L, V, N, shininess);\n lr.diffuse = lambertDiffuse(L, N);\n return lr;\n}\n\nvoid main(void) {\n\n V = normalize(vViewPosition);\n N = vNormal;\n\n vec3 diffuse = vec3(0.0);\n float specular = 0.0;\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n\n LightResult result = light(uLightingDirection[j]);\n diffuse += result.diffuse * uDirectionalColor[j];\n specular += result.specular;\n }\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n\n vec3 lightPosition = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightVector = vViewPosition - lightPosition;\n\t\n //calculate attenuation\n float lightDistance = length(lightVector);\n float falloff = 500.0 / (lightDistance + 500.0);\n\n LightResult result = light(lightVector);\n diffuse += result.diffuse * falloff * uPointLightColor[k];\n specular += result.specular * falloff;\n }\n\n gl_FragColor = isTexture ? texture2D(uSampler, vTexCoord) : uMaterialColor;\n gl_FragColor.rgb = gl_FragColor.rgb * (diffuse * diffuseFactor + vAmbientColor) + specular * specularFactor;\n}",fontVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nuniform vec4 uGlyphRect;\nuniform float uGlyphOffset;\n\nvarying vec2 vTexCoord;\nvarying float w;\n\nvoid main() {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n\n // scale by the size of the glyph's rectangle\n positionVec4.xy *= uGlyphRect.zw - uGlyphRect.xy;\n\n // move to the corner of the glyph\n positionVec4.xy += uGlyphRect.xy;\n\n // move to the letter's line offset\n positionVec4.x += uGlyphOffset;\n \n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vTexCoord = aTexCoord;\n w = gl_Position.w;\n}\n",fontFrag:"#extension GL_OES_standard_derivatives : enable\nprecision mediump float;\n\n#if 0\n // simulate integer math using floats\n\t#define int float\n\t#define ivec2 vec2\n\t#define INT(x) float(x)\n\n\tint ifloor(float v) { return floor(v); }\n\tivec2 ifloor(vec2 v) { return floor(v); }\n\n#else\n // use native integer math\n\tprecision mediump int;\n\t#define INT(x) x\n\n\tint ifloor(float v) { return int(v); }\n\tint ifloor(int v) { return v; }\n\tivec2 ifloor(vec2 v) { return ivec2(v); }\n\n#endif\n\nuniform sampler2D uSamplerStrokes;\nuniform sampler2D uSamplerRowStrokes;\nuniform sampler2D uSamplerRows;\nuniform sampler2D uSamplerColStrokes;\nuniform sampler2D uSamplerCols;\n\nuniform ivec2 uStrokeImageSize;\nuniform ivec2 uCellsImageSize;\nuniform ivec2 uGridImageSize;\n\nuniform ivec2 uGridOffset;\nuniform ivec2 uGridSize;\nuniform vec4 uMaterialColor;\n\nvarying vec2 vTexCoord;\n\n// some helper functions\nint round(float v) { return ifloor(v + 0.5); }\nivec2 round(vec2 v) { return ifloor(v + 0.5); }\nfloat saturate(float v) { return clamp(v, 0.0, 1.0); }\nvec2 saturate(vec2 v) { return clamp(v, 0.0, 1.0); }\n\nint mul(float v1, int v2) {\n return ifloor(v1 * float(v2));\n}\n\nivec2 mul(vec2 v1, ivec2 v2) {\n return ifloor(v1 * vec2(v2) + 0.5);\n}\n\n// unpack a 16-bit integer from a float vec2\nint getInt16(vec2 v) {\n ivec2 iv = round(v * 255.0);\n return iv.x * INT(128) + iv.y;\n}\n\nvec2 pixelScale;\nvec2 coverage = vec2(0.0);\nvec2 weight = vec2(0.5);\nconst float minDistance = 1.0/8192.0;\nconst float hardness = 1.05; // amount of antialias\n\n// the maximum number of curves in a glyph\nconst int N = INT(250);\n\n// retrieves an indexed pixel from a sampler\nvec4 getTexel(sampler2D sampler, int pos, ivec2 size) {\n int width = size.x;\n int y = ifloor(pos / width);\n int x = pos - y * width; // pos % width\n\n return texture2D(sampler, (vec2(x, y) + 0.5) / vec2(size));\n}\n\nvoid calulateCrossings(vec2 p0, vec2 p1, vec2 p2, out vec2 C1, out vec2 C2) {\n\n // get the coefficients of the quadratic in t\n vec2 a = p0 - p1 * 2.0 + p2;\n vec2 b = p0 - p1;\n vec2 c = p0 - vTexCoord;\n\n // found out which values of 't' it crosses the axes\n vec2 surd = sqrt(max(vec2(0.0), b * b - a * c));\n vec2 t1 = ((b - surd) / a).yx;\n vec2 t2 = ((b + surd) / a).yx;\n\n // approximate straight lines to avoid rounding errors\n if (abs(a.y) < 0.001)\n t1.x = t2.x = c.y / (2.0 * b.y);\n\n if (abs(a.x) < 0.001)\n t1.y = t2.y = c.x / (2.0 * b.x);\n\n // plug into quadratic formula to find the corrdinates of the crossings\n C1 = ((a * t1 - b * 2.0) * t1 + c) * pixelScale;\n C2 = ((a * t2 - b * 2.0) * t2 + c) * pixelScale;\n}\n\nvoid coverageX(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n // determine on which side of the x-axis the points lie\n bool y0 = p0.y > vTexCoord.y;\n bool y1 = p1.y > vTexCoord.y;\n bool y2 = p2.y > vTexCoord.y;\n\n // could web be under the curve (after t1)?\n if (y1 ? !y2 : y0) {\n // add the coverage for t1\n coverage.x += saturate(C1.x + 0.5);\n // calculate the anti-aliasing for t1\n weight.x = min(weight.x, abs(C1.x));\n }\n\n // are we outside the curve (after t2)?\n if (y1 ? !y0 : y2) {\n // subtract the coverage for t2\n coverage.x -= saturate(C2.x + 0.5);\n // calculate the anti-aliasing for t2\n weight.x = min(weight.x, abs(C2.x));\n }\n}\n\n// this is essentially the same as coverageX, but with the axes swapped\nvoid coverageY(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n bool x0 = p0.x > vTexCoord.x;\n bool x1 = p1.x > vTexCoord.x;\n bool x2 = p2.x > vTexCoord.x;\n\n if (x1 ? !x2 : x0) {\n coverage.y -= saturate(C1.y + 0.5);\n weight.y = min(weight.y, abs(C1.y));\n }\n\n if (x1 ? !x0 : x2) {\n coverage.y += saturate(C2.y + 0.5);\n weight.y = min(weight.y, abs(C2.y));\n }\n}\n\nvoid main() {\n\n // calculate the pixel scale based on screen-coordinates\n pixelScale = hardness / fwidth(vTexCoord);\n\n // which grid cell is this pixel in?\n ivec2 gridCoord = ifloor(vTexCoord * vec2(uGridSize));\n\n // intersect curves in this row\n {\n // the index into the row info bitmap\n int rowIndex = gridCoord.y + uGridOffset.y;\n // fetch the info texel\n vec4 rowInfo = getTexel(uSamplerRows, rowIndex, uGridImageSize);\n // unpack the rowInfo\n int rowStrokeIndex = getInt16(rowInfo.xy);\n int rowStrokeCount = getInt16(rowInfo.zw);\n\n for (int iRowStroke = INT(0); iRowStroke < N; iRowStroke++) {\n if (iRowStroke >= rowStrokeCount)\n break;\n\n // each stroke is made up of 3 points: the start and control point\n // and the start of the next curve.\n // fetch the indices of this pair of strokes:\n vec4 strokeIndices = getTexel(uSamplerRowStrokes, rowStrokeIndex++, uCellsImageSize);\n\n // unpack the stroke index\n int strokePos = getInt16(strokeIndices.xy);\n\n // fetch the two strokes\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n\n // calculate the coverage\n coverageX(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n // intersect curves in this column\n {\n int colIndex = gridCoord.x + uGridOffset.x;\n vec4 colInfo = getTexel(uSamplerCols, colIndex, uGridImageSize);\n int colStrokeIndex = getInt16(colInfo.xy);\n int colStrokeCount = getInt16(colInfo.zw);\n \n for (int iColStroke = INT(0); iColStroke < N; iColStroke++) {\n if (iColStroke >= colStrokeCount)\n break;\n\n vec4 strokeIndices = getTexel(uSamplerColStrokes, colStrokeIndex++, uCellsImageSize);\n\n int strokePos = getInt16(strokeIndices.xy);\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n coverageY(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n weight = saturate(1.0 - weight * 2.0);\n float distance = max(weight.x + weight.y, minDistance); // manhattan approx.\n float antialias = abs(dot(coverage, weight) / distance);\n float cover = min(abs(coverage.x), abs(coverage.y));\n gl_FragColor = uMaterialColor;\n gl_FragColor.a *= saturate(max(antialias, cover));\n}",lineVert:"/*\n Part of the Processing project - http://processing.org\n Copyright (c) 2012-15 The Processing Foundation\n Copyright (c) 2004-12 Ben Fry and Casey Reas\n Copyright (c) 2001-04 Massachusetts Institute of Technology\n This library is free software; you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, version 2.1.\n This library is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General\n Public License along with this library; if not, write to the\n Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n Boston, MA 02111-1307 USA\n*/\n\n#define PROCESSING_LINE_SHADER\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uStrokeWeight;\n\nuniform vec4 uViewport;\n\n// using a scale <1 moves the lines towards the camera\n// in order to prevent popping effects due to half of\n// the line disappearing behind the geometry faces.\nvec3 scale = vec3(0.9995);\n\nattribute vec4 aPosition;\nattribute vec4 aDirection;\n \nvoid main() {\n vec4 posp = uModelViewMatrix * aPosition;\n vec4 posq = uModelViewMatrix * (aPosition + vec4(aDirection.xyz, 0));\n\n // Moving vertices slightly toward the camera\n // to avoid depth-fighting with the fill triangles.\n // Discussed here:\n // http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=252848 \n posp.xyz = posp.xyz * scale;\n posq.xyz = posq.xyz * scale;\n\n vec4 p = uProjectionMatrix * posp;\n vec4 q = uProjectionMatrix * posq;\n\n // formula to convert from clip space (range -1..1) to screen space (range 0..[width or height])\n // screen_p = (p.xy/p.w + <1,1>) * 0.5 * uViewport.zw\n\n // prevent division by W by transforming the tangent formula (div by 0 causes\n // the line to disappear, see https://github.com/processing/processing/issues/5183)\n // t = screen_q - screen_p\n //\n // tangent is normalized and we don't care which aDirection it points to (+-)\n // t = +- normalize( screen_q - screen_p )\n // t = +- normalize( (q.xy/q.w+<1,1>)*0.5*uViewport.zw - (p.xy/p.w+<1,1>)*0.5*uViewport.zw )\n //\n // extract common factor, <1,1> - <1,1> cancels out\n // t = +- normalize( (q.xy/q.w - p.xy/p.w) * 0.5 * uViewport.zw )\n //\n // convert to common divisor\n // t = +- normalize( ((q.xy*p.w - p.xy*q.w) / (p.w*q.w)) * 0.5 * uViewport.zw )\n //\n // remove the common scalar divisor/factor, not needed due to normalize and +-\n // (keep uViewport - can't remove because it has different components for x and y\n // and corrects for aspect ratio, see https://github.com/processing/processing/issues/5181)\n // t = +- normalize( (q.xy*p.w - p.xy*q.w) * uViewport.zw )\n\n vec2 tangent = normalize((q.xy*p.w - p.xy*q.w) * uViewport.zw);\n\n // flip tangent to normal (it's already normalized)\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n float thickness = aDirection.w * uStrokeWeight;\n vec2 offset = normal * thickness / 2.0;\n\n // Perspective ---\n // convert from world to clip by multiplying with projection scaling factor\n // to get the right thickness (see https://github.com/processing/processing/issues/5182)\n // invert Y, projections in Processing invert Y\n vec2 perspScale = (uProjectionMatrix * vec4(1, -1, 0, 0)).xy;\n\n // No Perspective ---\n // multiply by W (to cancel out division by W later in the pipeline) and\n // convert from screen to clip (derived from clip to screen above)\n vec2 noPerspScale = p.w / (0.5 * uViewport.zw);\n\n //gl_Position.xy = p.xy + offset.xy * mix(noPerspScale, perspScale, float(perspective > 0));\n gl_Position.xy = p.xy + offset.xy * perspScale;\n gl_Position.zw = p.zw;\n}\n",lineFrag:"precision mediump float;\nprecision mediump int;\n\nuniform vec4 uMaterialColor;\n\nvoid main() {\n gl_FragColor = uMaterialColor;\n}",pointVert:"attribute vec3 aPosition;\nuniform float uPointSize;\nvarying float vStrokeWeight;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvoid main() {\n\tvec4 positionVec4 = vec4(aPosition, 1.0);\n\tgl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\tgl_PointSize = uPointSize;\n\tvStrokeWeight = uPointSize;\n}",pointFrag:"precision mediump float;\nprecision mediump int;\nuniform vec4 uMaterialColor;\nvarying float vStrokeWeight;\n\nvoid main(){\n\tfloat mask = 0.0;\n\n\t// make a circular mask using the gl_PointCoord (goes from 0 - 1 on a point)\n // might be able to get a nicer edge on big strokeweights with smoothstep but slightly less performant\n\n\tmask = step(0.98, length(gl_PointCoord * 2.0 - 1.0));\n\n\t// if strokeWeight is 1 or less lets just draw a square\n\t// this prevents weird artifacting from carving circles when our points are really small\n\t// if strokeWeight is larger than 1, we just use it as is\n\n\tmask = mix(0.0, mask, clamp(floor(vStrokeWeight - 0.5),0.0,1.0));\n\n\t// throw away the borders of the mask\n // otherwise we get weird alpha blending issues\n\n\tif(mask > 0.98){\n discard;\n \t}\n\n \tgl_FragColor = vec4(uMaterialColor.rgb * (1.0 - mask), uMaterialColor.a) ;\n}"};r.RendererGL=function(t,e,i,n){return r.Renderer.call(this,t,e,i),this.attributes={},n=n||{},this.attributes.alpha=void 0===n.alpha||n.alpha,this.attributes.depth=void 0===n.depth||n.depth,this.attributes.stencil=void 0===n.stencil||n.stencil,this.attributes.antialias=void 0!==n.antialias&&n.antialias,this.attributes.premultipliedAlpha=void 0!==n.premultipliedAlpha&&n.premultipliedAlpha,this.attributes.preserveDrawingBuffer=void 0===n.preserveDrawingBuffer||n.preserveDrawingBuffer,this.attributes.perPixelLighting=void 0!==n.perPixelLighting&&n.perPixelLighting,this._initContext(),this.isP3D=!0,this.GL=this.drawingContext,this.ambientLightColors=[],this.directionalLightDirections=[],this.directionalLightColors=[],this.pointLightPositions=[],this.pointLightColors=[],this.uMVMatrix=new r.Matrix,this.uPMatrix=new r.Matrix,this.uNMatrix=new r.Matrix("mat3"),this._curCamera=new r.Camera(this),this._curCamera._computeCameraDefaultSettings(),this._curCamera._setDefaultCamera(),this.gHash={},this._defaultLightShader=void 0,this._defaultImmediateModeShader=void 0,this._defaultNormalShader=void 0,this._defaultColorShader=void 0,this._defaultPointShader=void 0,this.curFillShader=void 0,this.curStrokeShader=void 0,this.curPointShader=void 0,this._useColorShader(),this.setStrokeShader(this._getLineShader()),this._usePointShader(),this._pointVertexBuffer=this.GL.createBuffer(),this.isImmediateDrawing=!1,this.immediateMode={},this.fill(255,255,255,255),this.pointSize=5,this.strokeWeight(1),this.stroke(0,0,0),this.textures=[],this._curveTightness=6,this._lookUpTableBezier=[],this._lookUpTableQuadratic=[],this._lutBezierDetail=0,this._lutQuadraticDetail=0,this._tessy=this._initTessy(),this.fontInfos={},this},r.RendererGL.prototype=Object.create(r.Renderer.prototype),r.RendererGL.prototype._initContext=function(){try{if(this.drawingContext=this.canvas.getContext("webgl",this.attributes)||this.canvas.getContext("experimental-webgl",this.attributes),null===this.drawingContext)throw new Error("Error creating webgl context");console.log("p5.RendererGL: enabled webgl context");var t=this.drawingContext;t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),this._viewport=this.drawingContext.getParameter(this.drawingContext.VIEWPORT)}catch(t){throw t}},r.RendererGL.prototype._resetContext=function(t,e,i){var n=this.width,o=this.height,s=this.canvas.id,a=this.canvas;a&&a.parentNode.removeChild(a),(a=document.createElement("canvas")).id=s,this._pInst._userNode?this._pInst._userNode.appendChild(a):document.body.appendChild(a),this._pInst.canvas=a;var h=new r.RendererGL(this._pInst.canvas,this._pInst,!0,t);this._pInst._setProperty("_renderer",h),h.resize(n,o),h._applyDefaults(),this._pInst._elements.push(h),"function"==typeof i&&setTimeout(function(){i.apply(window._renderer,e)},0)},r.prototype.setAttributes=function(t,e){var i;this._assert3d("setAttributes"),void 0!==e?(i={})[t]=e:t instanceof Object&&(i=t),this.push(),this._renderer._resetContext(i),this.pop()},r.RendererGL.prototype._update=function(){this.uMVMatrix.set(this._curCamera.cameraMatrix.mat4[0],this._curCamera.cameraMatrix.mat4[1],this._curCamera.cameraMatrix.mat4[2],this._curCamera.cameraMatrix.mat4[3],this._curCamera.cameraMatrix.mat4[4],this._curCamera.cameraMatrix.mat4[5],this._curCamera.cameraMatrix.mat4[6],this._curCamera.cameraMatrix.mat4[7],this._curCamera.cameraMatrix.mat4[8],this._curCamera.cameraMatrix.mat4[9],this._curCamera.cameraMatrix.mat4[10],this._curCamera.cameraMatrix.mat4[11],this._curCamera.cameraMatrix.mat4[12],this._curCamera.cameraMatrix.mat4[13],this._curCamera.cameraMatrix.mat4[14],this._curCamera.cameraMatrix.mat4[15]),this.ambientLightColors.length=0,this.directionalLightDirections.length=0,this.directionalLightColors.length=0,this.pointLightPositions.length=0,this.pointLightColors.length=0},r.RendererGL.prototype.background=function(){var t=this._pInst.color.apply(this._pInst,arguments),e=t.levels[0]/255,i=t.levels[1]/255,r=t.levels[2]/255,n=t.levels[3]/255;this.GL.clearColor(e,i,r,n),this.GL.depthMask(!0),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.fill=function(t,e,i,o){var s=r.prototype.color.apply(this._pInst,arguments);this.curFillColor=s._array,this.isImmediateDrawing?this.setFillShader(this._getImmediateModeShader()):this.setFillShader(this._getColorShader()),this.drawMode=n.FILL,this.curFillShader.setUniform("uMaterialColor",this.curFillColor)},r.RendererGL.prototype.stroke=function(t,e,i,n){arguments[3]=255;var o=r.prototype.color.apply(this._pInst,arguments);this.curStrokeColor=o._array,this.curStrokeShader.setUniform("uMaterialColor",this.curStrokeColor),this.curPointShader.setUniform("uMaterialColor",o._array)},r.RendererGL.prototype.strokeWeight=function(t){this.curStrokeWeight!==t&&(this.pointSize=t,this.curStrokeWeight=t,this.curStrokeShader.setUniform("uStrokeWeight",t),this.curPointShader.setUniform("uPointSize",t))},r.RendererGL.prototype.get=function(t,e,i,n){return r.Renderer2D.prototype.get.apply(this,[t,e,i,n])},r.RendererGL.prototype.loadPixels=function(){if(!0===this.attributes.preserveDrawingBuffer){var t=this._pInst._pixelDensity,e=this.width,i=this.height;e*=t,i*=t,void 0===this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4)),this.GL.readPixels(0,0,e,i,this.GL.RGBA,this.GL.UNSIGNED_BYTE,this.pixels),this._pInst._setProperty("pixels",this.pixels)}else console.log("loadPixels only works in WebGL when preserveDrawingBuffer is true.")},r.RendererGL.prototype.geometryInHash=function(t){return void 0!==this.gHash[t]},r.RendererGL.prototype.resize=function(t,e){r.Renderer.prototype.resize.call(this,t,e),this.GL.viewport(0,0,this.GL.drawingBufferWidth,this.GL.drawingBufferHeight),this._viewport=this.GL.getParameter(this.GL.VIEWPORT),this._curCamera._resize(),void 0!==this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4))},r.RendererGL.prototype.clear=function(){var t=arguments[0]||0,e=arguments[1]||0,i=arguments[2]||0,r=arguments[3]||0;this.GL.clearColor(t,e,i,r),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.translate=function(t,e,i){return t instanceof r.Vector&&(i=t.z,e=t.y,t=t.x),this.uMVMatrix.translate([t,e,i]),this},r.RendererGL.prototype.scale=function(t,e,i){return this.uMVMatrix.scale(t,e,i),this},r.RendererGL.prototype.rotate=function(t,e){return void 0===e?this.rotateZ(t):(arguments[0]=this._pInst._fromRadians(t),r.Matrix.prototype.rotate.apply(this.uMVMatrix,arguments),this)},r.RendererGL.prototype.rotateX=function(t){return this.rotate(t,1,0,0),this},r.RendererGL.prototype.rotateY=function(t){return this.rotate(t,0,1,0),this},r.RendererGL.prototype.rotateZ=function(t){return this.rotate(t,0,0,1),this},r.RendererGL.prototype.push=function(){var t=r.Renderer.prototype.push.apply(this),e=t.properties;return e.uMVMatrix=this.uMVMatrix.copy(),e.uPMatrix=this.uPMatrix.copy(),e._curCamera=this._curCamera,this._curCamera=this._curCamera.copy(),t},r.RendererGL.prototype.resetMatrix=function(){return this.uMVMatrix=r.Matrix.identity(this._pInst),this},r.RendererGL.prototype.setFillShader=function(t){return this.curFillShader!==t&&(this.curFillShader=t,this.curFillShader.init()),this.curFillShader},r.RendererGL.prototype.setPointShader=function(t){return this.curPointShader!==t&&(this.curPointShader=t,this.curPointShader.init()),this.curPointShader},r.RendererGL.prototype.setStrokeShader=function(t){return this.curStrokeShader!==t&&(this.curStrokeShader=t,this.curStrokeShader.init()),this.curStrokeShader},r.RendererGL.prototype._useLightShader=function(){return this.curFillShader&&this.curFillShader.isLightShader()||this.setFillShader(this._getLightShader()),this.curFillShader},r.RendererGL.prototype._useColorShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultImmediateModeShader||this.setFillShader(this._getColorShader()),this.curFillShader},r.RendererGL.prototype._usePointShader=function(){return this.curPointShader||this.setPointShader(this._getPointShader()),this.curPointShader},r.RendererGL.prototype._useImmediateModeShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultColorShader||this.setFillShader(this._getImmediateModeShader()),this.curFillShader},r.RendererGL.prototype._getLightShader=function(){return this._defaultLightShader||(this.attributes.perPixelLighting?this._defaultLightShader=new r.Shader(this,s.phongVert,s.phongFrag):this._defaultLightShader=new r.Shader(this,s.lightVert,s.lightTextureFrag)),this._defaultLightShader},r.RendererGL.prototype._getImmediateModeShader=function(){return this._defaultImmediateModeShader||(this._defaultImmediateModeShader=new r.Shader(this,s.immediateVert,s.vertexColorFrag)),this._defaultImmediateModeShader},r.RendererGL.prototype._getNormalShader=function(){return this._defaultNormalShader||(this._defaultNormalShader=new r.Shader(this,s.normalVert,s.normalFrag)),this._defaultNormalShader},r.RendererGL.prototype._getColorShader=function(){return this._defaultColorShader||(this._defaultColorShader=new r.Shader(this,s.normalVert,s.basicFrag)),this._defaultColorShader},r.RendererGL.prototype._getPointShader=function(){return this._defaultPointShader||(this._defaultPointShader=new r.Shader(this,s.pointVert,s.pointFrag)),this._defaultPointShader},r.RendererGL.prototype._getLineShader=function(){return this._defaultLineShader||(this._defaultLineShader=new r.Shader(this,s.lineVert,s.lineFrag)),this._defaultLineShader},r.RendererGL.prototype._getFontShader=function(){return this._defaultFontShader||(this.GL.getExtension("OES_standard_derivatives"),this._defaultFontShader=new r.Shader(this,s.fontVert,s.fontFrag)),this._defaultFontShader},r.RendererGL.prototype._getEmptyTexture=function(){if(!this._emptyTexture){var t=new r.Image(1,1);t.set(0,0,255),this._emptyTexture=new r.Texture(this,t)}return this._emptyTexture},r.RendererGL.prototype.getTexture=function(t){for(var e=this.textures,i=0;i2e4){var e,i=Object.prototype.toString,r=[],n=t.slice();e=n.pop();do{"[object Array]"===i.call(e)?n.push.apply(n,e):r.push(e)}while(n.length&&void 0!==(e=n.pop()));return r.reverse(),r}return[].concat.apply([],t)},r.RendererGL.prototype._vToNArray=function(t){return this._flatten(t.map(function(t){return[t.x,t.y,t.z]}))},r.prototype._assert3d=function(t){if(!this._renderer.isP3D)throw new Error(t+"() is only supported in WEBGL mode. If you'd like to use 3D graphics and WebGL, see https://p5js.org/examples/form-3d-primitives.html for more information.")},r.RendererGL.prototype._initTessy=function(){var t=new o.GluTesselator;return t.gluTessCallback(o.gluEnum.GLU_TESS_VERTEX_DATA,function(t,e){e[e.length]=t[0],e[e.length]=t[1],e[e.length]=t[2]}),t.gluTessCallback(o.gluEnum.GLU_TESS_BEGIN,function(t){t!==o.primitiveType.GL_TRIANGLES&&console.log("expected TRIANGLES but got type: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_ERROR,function(t){console.log("error callback"),console.log("error number: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_COMBINE,function(t,e,i){return[t[0],t[1],t[2]]}),t.gluTessCallback(o.gluEnum.GLU_TESS_EDGE_FLAG,function(t){}),t},r.RendererGL.prototype._triangulate=function(t){this._tessy.gluTessNormal(0,0,1);var e=[];this._tessy.gluTessBeginPolygon(e);for(var i=0;i1&&(s=s.substring(0,s.indexOf("[0]"))),o.name=s,o.type=n.type,o.type===t.SAMPLER_2D&&(o.samplerIndex=i,i++,this.samplers.push(o)),this.uniforms[s]=o}this._loadedUniforms=!0}},r.Shader.prototype.compile=function(){},r.Shader.prototype.bindShader=function(){this.init(),this._bound||(this.useProgram(),this._bound=!0,this.bindTextures(),this._setMatrixUniforms(),this===this._renderer.curStrokeShader&&this._setViewportUniform())},r.Shader.prototype.unbindShader=function(){return this._bound&&(this.unbindTextures(),this._bound=!1),this},r.Shader.prototype.bindTextures=function(){for(var t=this._renderer.GL,e=0;e1?e.length&&n.uniform1iv(r,e):n.uniform1i(r,e);break;case n.FLOAT:i.size>1?e.length&&n.uniform1fv(r,e):n.uniform1f(r,e);break;case n.FLOAT_MAT3:n.uniformMatrix3fv(r,!1,e);break;case n.FLOAT_MAT4:n.uniformMatrix4fv(r,!1,e);break;case n.FLOAT_VEC2:i.size>1?e.length&&n.uniform2fv(r,e):n.uniform2f(r,e[0],e[1]);break;case n.FLOAT_VEC3:i.size>1?e.length&&n.uniform3fv(r,e):n.uniform3f(r,e[0],e[1],e[2]);break;case n.FLOAT_VEC4:i.size>1?e.length&&n.uniform4fv(r,e):n.uniform4f(r,e[0],e[1],e[2],e[3]);break;case n.INT_VEC2:i.size>1?e.length&&n.uniform2iv(r,e):n.uniform2i(r,e[0],e[1]);break;case n.INT_VEC3:i.size>1?e.length&&n.uniform3iv(r,e):n.uniform3i(r,e[0],e[1],e[2]);break;case n.INT_VEC4:i.size>1?e.length&&n.uniform4iv(r,e):n.uniform4i(r,e[0],e[1],e[2],e[3]);break;case n.SAMPLER_2D:n.activeTexture(n.TEXTURE0+i.samplerIndex),i.texture=this._renderer.getTexture(e),n.uniform1i(i.location,i.samplerIndex)}return this}},r.Shader.prototype.isLightShader=function(){return void 0!==this.uniforms.uUseLighting||void 0!==this.uniforms.uAmbientLightCount||void 0!==this.uniforms.uDirectionalLightCount||void 0!==this.uniforms.uPointLightCount||void 0!==this.uniforms.uAmbientColor||void 0!==this.uniforms.uDirectionalColor||void 0!==this.uniforms.uPointLightLocation||void 0!==this.uniforms.uPointLightColor||void 0!==this.uniforms.uLightingDirection||void 0!==this.uniforms.uSpecular},r.Shader.prototype.isTextureShader=function(){return this.samplerIndex>0},r.Shader.prototype.isColorShader=function(){return void 0!==this.attributes.aVertexColor||void 0!==this.uniforms.uMaterialColor},r.Shader.prototype.isTexLightShader=function(){return this.isLightShader()&&this.isTextureShader()},r.Shader.prototype.isStrokeShader=function(){return void 0!==this.uniforms.uStrokeWeight},r.Shader.prototype.enableAttrib=function(t,e,i,r,n,o){var s=this._renderer.GL;return-1!==t&&(s.enableVertexAttribArray(t),s.vertexAttribPointer(t,e,i,r,n,o)),this},e.exports=r.Shader},{"../core/main":24}],76:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.Texture=function(t,e){this._renderer=t;var i=this._renderer.GL;this.src=e,this.glTex=void 0,this.glTarget=i.TEXTURE_2D,this.glFormat=i.RGBA,this.mipmaps=!1,this.glMinFilter=i.LINEAR,this.glMagFilter=i.LINEAR,this.glWrapS=i.CLAMP_TO_EDGE,this.glWrapT=i.CLAMP_TO_EDGE,this.isSrcMediaElement=void 0!==r.MediaElement&&e instanceof r.MediaElement,this._videoPrevUpdateTime=0,this.isSrcHTMLElement=void 0!==r.Element&&e instanceof r.Element&&!(e instanceof r.Graphics),this.isSrcP5Image=e instanceof r.Image,this.isSrcP5Graphics=e instanceof r.Graphics,this.isImageData="undefined"!=typeof ImageData&&e instanceof ImageData;var n=this._getTextureDataFromSource();return this.width=n.width,this.height=n.height,this.init(n),this},r.Texture.prototype._getTextureDataFromSource=function(){var t;return this.isSrcP5Image?t=this.src.canvas:this.isSrcMediaElement||this.isSrcP5Graphics||this.isSrcHTMLElement?t=this.src.elt:this.isImageData&&(t=this.src),t},r.Texture.prototype.init=function(t){var e=this._renderer.GL;if(this.glTex=e.createTexture(),this.bindTexture(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,this.glMagFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,this.glMinFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,this.glWrapS),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,this.glWrapT),0===this.width||0===this.height||this.isSrcMediaElement&&!this.src.loadedmetadata){var i=new Uint8Array([1,1,1,1]);e.texImage2D(this.glTarget,0,e.RGBA,1,1,0,this.glFormat,e.UNSIGNED_BYTE,i)}else e.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,e.UNSIGNED_BYTE,t)},r.Texture.prototype.update=function(){var t=this.src;if(0===t.width||0===t.height)return!1;var e=this._getTextureDataFromSource(),i=!1,r=this._renderer.GL;return e.width!==this.width||e.height!==this.height?(i=!0,this.width=e.width,this.height=e.height,this.isSrcP5Image?t.setModified(!1):(this.isSrcMediaElement||this.isSrcHTMLElement)&&t.setModified(!0)):this.isSrcP5Image?t.isModified()&&(i=!0,t.setModified(!1)):this.isSrcMediaElement?t.isModified()?(i=!0,t.setModified(!1)):t.loadedmetadata&&this._videoPrevUpdateTime!==t.time()&&(this._videoPrevUpdateTime=t.time(),i=!0):this.isImageData?t._dirty&&(t._dirty=!1,i=!0):i=!0,i&&(this.bindTexture(),r.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,r.UNSIGNED_BYTE,e)),i},r.Texture.prototype.bindTexture=function(){return this._renderer.GL.bindTexture(this.glTarget,this.glTex),this},r.Texture.prototype.unbindTexture=function(){this._renderer.GL.bindTexture(this.glTarget,null)},r.Texture.prototype.setInterpolation=function(t,e){var i=this._renderer.GL;t===n.NEAREST?this.glMinFilter=i.NEAREST:this.glMinFilter=i.LINEAR,e===n.NEAREST?this.glMagFilter=i.NEAREST:this.glMagFilter=i.LINEAR,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,this.glMinFilter),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,this.glMagFilter),this.unbindTexture()},r.Texture.prototype.setWrapMode=function(t,e){var i=this._renderer.GL,r=function(t){return 0==(t&t-1)},o=r(this.width),s=r(this.width);t===n.REPEAT?o&&s?this.glWrapS=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):t===n.MIRROR?o&&s?this.glWrapS=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):this.glWrapS=i.CLAMP_TO_EDGE,e===n.REPEAT?o&&s?this.glWrapT=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):e===n.MIRROR?o&&s?this.glWrapT=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):this.glWrapT=i.CLAMP_TO_EDGE,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,this.glWrapS),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,this.glWrapT),this.unbindTexture()},e.exports=r.Texture},{"../core/constants":18,"../core/main":24}],77:[function(t,e,i){"use strict";function r(t,e){this.width=t,this.height=e,this.infos=[],this.findImage=function(t){var e=this.width*this.height;if(t>e)throw new Error("font is too complex to render in 3D");for(var i,r,n=this.infos.length-1;n>=0;--n){var o=this.infos[n];if(o.index+t0;){var n=t[r];e>n&&(e=n),ii?i:t}(255*t,0,255)}function r(t,e,i,r,n,s,a,h){for(var u=new function t(e,i,r,n){this.p0=e,this.c0=i,this.c1=r,this.p1=n,this.toQuadratic=function(){return{x:this.p0.x,y:this.p0.y,x1:this.p1.x,y1:this.p1.y,cx:(3*(this.c0.x+this.c1.x)-(this.p0.x+this.p1.x))/4,cy:(3*(this.c0.y+this.c1.y)-(this.p0.y+this.p1.y))/4}},this.quadError=function(){return o.Vector.sub(o.Vector.sub(this.p1,this.p0),o.Vector.mult(o.Vector.sub(this.c1,this.c0),3)).mag()/2},this.split=function(e){var i=o.Vector.lerp(this.p0,this.c0,e),r=o.Vector.lerp(this.c0,this.c1,e),n=o.Vector.lerp(i,r,e);this.c1=o.Vector.lerp(this.c1,this.p1,e),this.c0=o.Vector.lerp(r,this.c1,e);var s=o.Vector.lerp(n,this.c0,e),a=new t(this.p0,i,n,s);return this.p0=s,a},this.splitInflections=function(){var t=o.Vector.sub(this.c0,this.p0),e=o.Vector.sub(o.Vector.sub(this.c1,this.c0),t),i=o.Vector.sub(o.Vector.sub(o.Vector.sub(this.p1,this.c1),t),o.Vector.mult(e,2)),r=[],n=e.x*i.y-e.y*i.x;if(0!==n){var s=t.x*i.y-t.y*i.x,a=t.x*e.y-t.y*e.x,h=s*s-4*n*a;if(h>=0){n<0&&(n=-n,s=-s,a=-a);var l=Math.sqrt(h),u=(-s-l)/(2*n),c=(-s+l)/(2*n);u>0&&u<1&&(r.push(this.split(u)),c=1-(1-c)/(1-u)),c>0&&c<1&&r.push(this.split(c))}}return r.push(this),r}}(new o.Vector(t,e),new o.Vector(i,r),new o.Vector(n,s),new o.Vector(a,h)).splitInflections(),c=[],p=30/l,d=0;d=.125);){var v=Math.pow(f,1/3),g=m.split(v),_=m.split(1-v/(1-v));c.push(g),y.push(m),m=_}f<1&&c.push(m.split(.5)),c.push(m),Array.prototype.push.apply(c,y.reverse())}return c}function s(t,i,r,n){e([t,r],[i,n],{x:t,y:i,cx:(t+r)/2,cy:(i+n)/2})}function u(t,e,i,r){return Math.abs(i-t)<1e-5&&Math.abs(r-e)<1e-5}function c(t,e,i){for(var r=t.length,o=e.findImage(r),s=o.index,a=0,h=0;h>7,127&d,p>>7,127&p);for(var f=0;f>7,127&m,0,0)}}return{cellImageInfo:l,dimOffset:s,dimImageInfo:o}}var p=this.glyphInfos[t.index];if(p)return p;var d=t.getBoundingBox(),f=d.x1,m=d.y1,y=d.x2-f,v=d.y2-m,g=t.path.commands;if(0===y||0===v||!g.length)return this.glyphInfos[t.index]={};var _,b=[],S=[],x=[];for(_=a-1;_>=0;--_)x.push([]);for(_=h-1;_>=0;--_)S.push([]);for(var w,T,A,P,M=0;M=n)&&this._doFill){if(!this._isOpenType())return console.log("WEBGL: only opentype fonts are supported"),t;t.push();var l=this.curFillShader,c=this._doStroke,p=this.drawMode;this.curFillShader=null,this._doStroke=!1,this.drawMode=s.TEXTURE;var d=this._textFont.font,f=this._textFont._fontInfo;f||(f=this._textFont._fontInfo=new u(d));var m=this._textFont._handleAlignment(this,e,i,r),y=this._textSize,v=y/d.unitsPerEm;this.translate(m.x,m.y,0),this.scale(v,v,1);var g=this.GL,_=!this._defaultFontShader,b=this.setFillShader(this._getFontShader());_&&(b.setUniform("uGridImageSize",[64,64]),b.setUniform("uCellsImageSize",[64,64]),b.setUniform("uStrokeImageSize",[64,64]),b.setUniform("uGridSize",[a,h])),this._applyColorBlend(this.curFillColor);var S=this.gHash.glyph;if(!S){var x=this._textGeom=new o.Geometry(1,1,function(){for(var t=0;t<=1;t++)for(var e=0;e<=1;e++)this.vertices.push(new o.Vector(e,t,0)),this.uvs.push(e,t)});x.computeFaces().computeNormals(),S=this.createBuffers("glyph",x)}this._bindBuffer(S.vertexBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aPosition.location,3,g.FLOAT,!1,0,0),this._bindBuffer(S.indexBuffer,g.ELEMENT_ARRAY_BUFFER),this._bindBuffer(S.uvBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aTexCoord.location,2,g.FLOAT,!1,0,0),b.setUniform("uMaterialColor",this.curFillColor);try{for(var w=0,T=null,A=!1,P=d.stringToGlyphs(e),M=0;M{var e=new s.a.Phaser({frequency:.5,octaves:.5,baseFrequency:1600}).toMaster(),i=new s.a.Chorus(.8,2.5,.2).toMaster();class r{constructor(t,r,n,o){this.note=t,this.x=r,this.y=n,this.s=o,this.canplay=!0,this.fillColor=0,this.fm=new s.a.PolySynth(8,s.a.Synth,{oscillator:{partials:[100,20,30,4]},envelope:{attack:.3,decay:.6,sustain:4,release:6}}).chain(i,e),this.fm.volume.value=-4}draw(){t.push(),t.noStroke(),t.translate(this.x,this.y,0),"C#4"==this.note?t.ambientMaterial(255/9*5):"G#4"==this.note||"G#3"==this.note?t.ambientMaterial(255/9*4):"D#5"==this.note||"D#4"==this.note||"D#3"==this.note?t.ambientMaterial(170):"A#4"==this.note||"A#3"==this.note?t.ambientMaterial(85):"F5"==this.note||"F4"==this.note||"F3"==this.note?t.ambientMaterial(255/9*7):"C5"==this.note||"C4"==this.note?t.ambientMaterial(255/9*2):"G5"==this.note||"G4"==this.note||"G3"==this.note?t.ambientMaterial(255/9*8):"D5"==this.note||"D4"==this.note?t.ambientMaterial(255/9*1):"A4"==this.note&&t.ambientMaterial(255),t.push(),t.translate(0,0,-this.s/2),t.rotateX(-t.HALF_PI),t.cylinder(1.8*this.s,this.s/2,6),t.fill(255,0,0,this.fillColor),t.cylinder(1.9*this.s,this.s/1.8,6),t.pop(),t.pop(),this.fillColor-=10}}let n=0,o=0,a=0,l=0,u=0,c=0,p=[];t.setup=(()=>{t.createCanvas(800,800,t.WEBGL);p.push(new r("C#4",-200,0,30)),p.push(new r("G#4",-150,-100,30)),p.push(new r("G#3",-150,100,30)),p.push(new r("D#5",-100,-200,30)),p.push(new r("D#4",-100,0,30)),p.push(new r("D#3",-100,200,30)),p.push(new r("A#4",-50,-100,30)),p.push(new r("A#3",-50,100,30)),p.push(new r("F5",0,-200,30)),p.push(new r("F4",0,0,30)),p.push(new r("F3",0,200,30)),p.push(new r("C5",50,-100,30)),p.push(new r("C4",50,100,30)),p.push(new r("G5",100,-200,30)),p.push(new r("G4",100,0,30)),p.push(new r("G3",100,200,30)),p.push(new r("D5",150,-100,30)),p.push(new r("D4",150,100,30)),p.push(new r("A4",200,0,30))});let d=0,f=1e4,m=0,y=0;t.draw=(()=>{t.background(0),t.smooth(),t.pointLight(150,150,150,500,0,100),t.directionalLight(255,255,255,0,1,-1),t.ambientLight(200),m=t.map(t.noise(d),0,1,t.width/2-t.width/6,t.width-t.width/3),y=t.map(t.noise(f),0,1,t.height,t.height/2),n=t.map(m,0,t.width,-t.PI/4,t.PI/4),o=t.map(y,0,t.height,t.PI/4,-t.PI/4),d+=.01,f+=.005,u>-150&&u<150?u+=20*n:(u<=-150&&(u=-149),u>=150&&(u=149)),c>-150&&c<150?c-=32*(o+t.PI/8):(c<=-150&&(c=-149),c>=150&&(c=149)),u+=4*t.sin(t.frameCount/30),c+=4*t.cos(t.frameCount/30),t.push(),t.rotateX(t.radians(80)),t.rotateY(n),t.rotateX(o);for(let e=0;e{"m"==t.key&&t.save(Date.now()+".jpg")}),t.mousePressed=(()=>{h()(s.a.context).then(function(){})})};e.default=l,new n.a(l)},function(t,e){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i}]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RvbmUvYnVpbGQvVG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcDUvbGliL3A1Lm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3RhcnRhdWRpb2NvbnRleHQvU3RhcnRBdWRpb0NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiXSwibmFtZXMiOlsiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyIsInVuZGVmaW5lZCIsIlRvbmUiLCJNb2R1bGUiLCJmdW5jIiwiTWFpbiIsInRoaXMiLCJFcnJvciIsInRvU3RyaW5nIiwiY2xhc3NOYW1lIiwiaXNMZXR0ZXIiLCJtYXRjaCIsInNhbWVDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwiaXNGdW5jdGlvbiIsImRpc3Bvc2UiLCJzZXQiLCJwYXJhbXMiLCJyYW1wVGltZSIsImlzT2JqZWN0IiwiaXNTdHJpbmciLCJ0bXBPYmoiLCJwYXJhbUxvb3AiLCJhdHRyIiwicGFyZW50IiwiaW5kZXhPZiIsImF0dHJTcGxpdCIsInNwbGl0IiwibGVuZ3RoIiwic3BsaWNlIiwiaW5uZXJQYXJhbSIsImpvaW4iLCJwYXJhbSIsImlzVW5kZWYiLCJTaWduYWwiLCJQYXJhbSIsInJhbXBUbyIsIkF1ZGlvUGFyYW0iLCJUaW1lQmFzZSIsIl9jb2xsZWN0RGVmYXVsdHMiLCJyZXQiLCJzdWJSZXQiLCJqIiwic3ViQXR0ciIsImlzRGVmaW5lZCIsImNvbnN0ciIsImRlZmF1bHRzIiwia2V5cyIsIl9zdXBlciIsInN1cGVyRGVmcyIsInB1c2giLCJ2YWx1ZXMiLCJvcHRpb25zIiwiZGVmYXVsdEFyZyIsImdpdmVuIiwiZmFsbGJhY2siLCJnaXZlblByb3AiLCJmYWxsYmFja1Byb3AiLCJjb25uZWN0U2VyaWVzIiwiY3VycmVudFVuaXQiLCJhcmd1bWVudHMiLCJ0b1VuaXQiLCJjb25uZWN0IiwidmFsIiwiaXNOdW1iZXIiLCJhcmciLCJpc0Jvb2xlYW4iLCJpc0FycmF5IiwiQXJyYXkiLCJpc05vdGUiLCJ0ZXN0Iiwibm9PcCIsIl9yZWFkT25seSIsIndyaXRhYmxlIiwiX3dyaXRhYmxlIiwiU3RhdGUiLCJTdGFydGVkIiwiU3RvcHBlZCIsIlBhdXNlZCIsImVxdWFsUG93ZXJTY2FsZSIsInBlcmNlbnQiLCJwaUZhY3RvciIsIk1hdGgiLCJQSSIsInNpbiIsImRiVG9HYWluIiwiZGIiLCJwb3ciLCJnYWluVG9EYiIsImdhaW4iLCJsb2ciLCJMTjEwIiwiaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvIiwiaW50ZXJ2YWwiLCJub3ciLCJjb250ZXh0IiwiZXh0ZW5kIiwiY2hpbGQiLCJUZW1wQ29uc3RydWN0b3IiLCJhdWRpb0NvbnRleHQiLCJDb250ZXh0IiwiZW1pdCIsInNldENvbnRleHQiLCJjdHgiLCJzYW1wbGVSYXRlIiwiaGFzQXVkaW9Db250ZXh0Iiwid2luZG93IiwiaGFzUHJvbWlzZXMiLCJoYXNXb3JrZXJzIiwiZ2V0Q29udGV4dCIsInJlc29sdmUiLCJpbml0aWFsaXplZCIsInJlc0NhbGxiYWNrIiwib2ZmIiwib24iLCJ2ZXJzaW9uIiwiRW1pdHRlciIsIl9ldmVudHMiLCJldmVudCIsImNhbGxiYWNrIiwiZXZlbnRzIiwiZXZlbnROYW1lIiwib25jZSIsImJvdW5kQ2FsbGJhY2siLCJhcHBseSIsImV2IiwiZXZlbnRMaXN0IiwiYXJncyIsInNsaWNlIiwibGVuIiwibWl4aW4iLCJmdW5jdGlvbnMiLCJlbWl0dGVyRnVuYyIsIlRpbWVsaW5lIiwiX3RpbWVsaW5lIiwibWVtb3J5IiwiSW5maW5pdHkiLCJhZGQiLCJ0aW1lIiwidmFsdWVPZiIsImluZGV4IiwiX3NlYXJjaCIsImRpZmYiLCJyZW1vdmUiLCJjb21wYXJhdG9yIiwicGVlayIsInNoaWZ0IiwiZ2V0QWZ0ZXIiLCJnZXRCZWZvcmUiLCJjYW5jZWwiLCJhZnRlciIsImNhbmNlbEJlZm9yZSIsInByZXZpb3VzRXZlbnQiLCJiZWdpbm5pbmciLCJlbmQiLCJtaWRQb2ludCIsImZsb29yIiwibmV4dEV2ZW50IiwiX2l0ZXJhdGUiLCJsb3dlckJvdW5kIiwidXBwZXJCb3VuZCIsImZvckVhY2giLCJmb3JFYWNoQmVmb3JlIiwiZm9yRWFjaEFmdGVyIiwiZm9yRWFjaEJldHdlZW4iLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwiZm9yRWFjaEZyb20iLCJmb3JFYWNoQXRUaW1lIiwic3VwcG9ydGVkIiwiT2ZmbGluZUF1ZGlvQ29udGV4dCIsIndlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQiLCJzdGFydFJlbmRlcmluZyIsIlByb21pc2UiLCJfbmF0aXZlX3N0YXJ0UmVuZGVyaW5nIiwiZG9uZSIsIm9uY29tcGxldGUiLCJlIiwicmVuZGVyZWRCdWZmZXIiLCJBdWRpb0NvbnRleHQiLCJ3ZWJraXRBdWRpb0NvbnRleHQiLCJjbG9zZSIsInN1c3BlbmQiLCJyZXN1bWUiLCJjcmVhdGVHYWluIiwiY3JlYXRlR2Fpbk5vZGUiLCJjcmVhdGVEZWxheSIsImNyZWF0ZURlbGF5Tm9kZSIsImRlY29kZUF1ZGlvRGF0YVByb21pc2UiLCJvZmZsaW5lQ29udGV4dCIsImF1ZGlvRGF0YSIsIlVpbnQzMkFycmF5IiwiYnVmZmVyIiwiZGVjb2RlQXVkaW9EYXRhIiwiX25hdGl2ZV9kZWNvZGVBdWRpb0RhdGEiLCJzdWNjZXNzIiwiZXJyb3IiLCJwcm9wIiwiX2NvbnRleHQiLCJfZGVmaW5lUHJvcGVydHkiLCJfbGF0ZW5jeUhpbnQiLCJsYXRlbmN5SGludCIsIl9jb25zdGFudHMiLCJsb29rQWhlYWQiLCJfY29tcHV0ZWRVcGRhdGVJbnRlcnZhbCIsIl90aWNrZXIiLCJUaWNrZXIiLCJjbG9ja1NvdXJjZSIsInVwZGF0ZUludGVydmFsIiwiX3RpbWVvdXRzIiwiX3RpbWVvdXRJZHMiLCJfdGltZW91dExvb3AiLCJjdXJyZW50VGltZSIsInJlYWR5Iiwic3RhdGUiLCJ0aGVuIiwiZ2V0Q29uc3RhbnQiLCJjcmVhdGVCdWZmZXIiLCJhcnIiLCJnZXRDaGFubmVsRGF0YSIsImNvbnN0YW50IiwiY3JlYXRlQnVmZmVyU291cmNlIiwiY2hhbm5lbENvdW50IiwiY2hhbm5lbENvdW50TW9kZSIsImxvb3AiLCJzdGFydCIsInNldFRpbWVvdXQiLCJmbiIsInRpbWVvdXQiLCJpZCIsImNsZWFyVGltZW91dCIsInR5cGUiLCJoaW50IiwiY29uIiwiZGlzY29ubmVjdCIsIl90eXBlIiwiX3VwZGF0ZUludGVydmFsIiwiX2NhbGxiYWNrIiwiX2NyZWF0ZUNsb2NrIiwiVHlwZSIsIldvcmtlciIsIlRpbWVvdXQiLCJPZmZsaW5lIiwiX2NyZWF0ZVdvcmtlciIsIlVSTCIsIndlYmtpdFVSTCIsImJsb2IiLCJCbG9iIiwidG9GaXhlZCIsImJsb2JVcmwiLCJjcmVhdGVPYmplY3RVUkwiLCJ3b3JrZXIiLCJvbm1lc3NhZ2UiLCJfd29ya2VyIiwiX2NyZWF0ZVRpbWVvdXQiLCJfdGltZW91dCIsIm1heCIsInBvc3RNZXNzYWdlIiwiX2Rpc3Bvc2VDbG9jayIsInRlcm1pbmF0ZSIsIm5hdGl2ZUNvbm5lY3QiLCJBdWRpb05vZGUiLCJuYXRpdmVEaXNjb25uZWN0IiwidG9uZUNvbm5lY3QiLCJCIiwib3V0TnVtIiwiaW5OdW0iLCJpbnB1dCIsIlRPTkVfU0lMRU5DRV9WRVJTSU9OX0xPR0dJTkciLCJjb25zb2xlIiwid2FybiIsImNyZWF0ZUluc091dHMiLCJpbnB1dHMiLCJvdXRwdXRzIiwib3V0cHV0IiwiY2hhbm5lbEludGVycHJldGF0aW9uIiwiX29uQ29ubmVjdCIsInVuaXQiLCJvdXRwdXROdW0iLCJpbnB1dE51bSIsImRlc3RpbmF0aW9uIiwiY2hhaW4iLCJmYW4iLCJTaWduYWxCYXNlIiwibm9kZSIsIm91dHB1dE51bWJlciIsImlucHV0TnVtYmVyIiwiX3BhcmFtIiwiY2FuY2VsU2NoZWR1bGVkVmFsdWVzIiwib3ZlcnJpZGRlbiIsInVhIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsIldhdmVTaGFwZXJOb2RlIiwiX2ludGVybmFsTm9kZSIsIl9uYXRpdmVfY3JlYXRlV2F2ZVNoYXBlciIsIl9jdXJ2ZSIsImN1cnZlIiwiYXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJjcmVhdGVXYXZlU2hhcGVyIiwiV2F2ZVNoYXBlciIsIm1hcHBpbmciLCJidWZmZXJMZW4iLCJfc2hhcGVyIiwiaXNGaW5pdGUiLCJzZXRNYXAiLCJub3JtYWxpemVkIiwib3ZlcnNhbXBsZSIsIm92ZXJzYW1wbGluZyIsIlJhbmdlRXJyb3IiLCJ1bml0cyIsIl92YWwiLCJfdW5pdHMiLCJwYXJzZUZsb2F0IiwiY2hhckF0IiwiX2RlZmF1bHRVbml0cyIsInRvU2Vjb25kcyIsInRvVGlja3MiLCJ0b0ZyZXF1ZW5jeSIsInRvTWlkaSIsIl9leHByZXNzaW9ucyIsInJlZ2V4cCIsIm1ldGhvZCIsImRvdCIsInBhcnNlSW50Iiwic2NhbGFyIiwiX2JlYXRzVG9Vbml0cyIsIl9nZXRUaW1lU2lnbmF0dXJlIiwiX3RpY2tzVG9Vbml0cyIsImh6IiwiX2ZyZXF1ZW5jeVRvVW5pdHMiLCJ0ciIsInEiLCJ0b3RhbCIsIl9zZWNvbmRzVG9Vbml0cyIsInNhbXBsZXMiLCJkZWZhdWx0IiwiX2dldEJwbSIsIlRyYW5zcG9ydCIsImJwbSIsInRpbWVTaWduYXR1cmUiLCJfZ2V0UFBRIiwiUFBRIiwiX25vdyIsImZyZXEiLCJiZWF0cyIsInNlY29uZHMiLCJ0aWNrcyIsIl9ub0FyZyIsInRyaW0iLCJleHByIiwibWF0Y2hpbmciLCJ0b1NhbXBsZXMiLCJ0b01pbGxpc2Vjb25kcyIsIkZyZXF1ZW5jeSIsImFzc2lnbiIsIm1pZGkiLCJtdG9mIiwibm90ZSIsInBpdGNoIiwib2N0YXZlIiwibm90ZU51bWJlciIsIm5vdGVUb1NjYWxlSW5kZXgiLCJ0cmFuc3Bvc2UiLCJoYXJtb25pemUiLCJpbnRlcnZhbHMiLCJtYXAiLCJmdG9tIiwidG9Ob3RlIiwibG9nMiIsIkE0Iiwicm91bmQiLCJzY2FsZUluZGV4VG9Ob3RlIiwicXVhcnRlclRpbWUiLCJxdWFydGVycyIsImNiYiIsImNiIiwiYyMiLCJjeCIsImRiYiIsImQjIiwiZHgiLCJlYmIiLCJlYiIsImUjIiwiZXgiLCJmYmIiLCJmYiIsImYiLCJmIyIsImZ4IiwiZ2JiIiwiZ2IiLCJnIiwiZyMiLCJneCIsImFiYiIsImFiIiwiYSIsImEjIiwiYXgiLCJiYmIiLCJiYiIsImIiLCJiIyIsImJ4IiwiZnJlcXVlbmN5IiwiVGltZSIsInF1YW50aXplIiwiY2FwdHVyZSIsInF1YW50VG8iLCJuZXh0U3ViZGl2aXNpb24iLCJzdWJkaXYiLCJzdWJkaXZpc2lvbiIsInRvTm90YXRpb24iLCJ0ZXN0Tm90YXRpb25zIiwicG93ZXIiLCJjbG9zZXN0IiwiY2xvc2VzdFNlY29uZHMiLCJub3RhdGlvbiIsIm5vdGF0aW9uU2Vjb25kcyIsImFicyIsInRvQmFyc0JlYXRzU2l4dGVlbnRocyIsIm1lYXN1cmVzIiwic2l4dGVlbnRocyIsIlRyYW5zcG9ydFRpbWUiLCJEZWZhdWx0IiwiVGlja3MiLCJOb3JtYWxSYW5nZSIsIkF1ZGlvUmFuZ2UiLCJEZWNpYmVscyIsIkludGVydmFsIiwiQlBNIiwiUG9zaXRpdmUiLCJHYWluIiwiQ2VudHMiLCJEZWdyZWVzIiwiTUlESSIsIkJhcnNCZWF0c1NpeHRlZW50aHMiLCJTYW1wbGVzIiwiSGVydHoiLCJOb3RlIiwiTWlsbGlzZWNvbmRzIiwiU2Vjb25kcyIsIk5vdGF0aW9uIiwiY29udmVydCIsIl90b1VuaXRzIiwiZ2V0VmFsdWVBdFRpbWUiLCJfaW5pdGlhbFZhbHVlIiwiX2Zyb21Vbml0cyIsInNldFZhbHVlQXRUaW1lIiwibWluVmFsdWUiLCJtYXhWYWx1ZSIsIm1pbiIsIl9taW5PdXRwdXQiLCJBdXRvbWF0aW9uVHlwZSIsIkxpbmVhciIsIkV4cG9uZW50aWFsIiwiVGFyZ2V0IiwiU2V0VmFsdWUiLCJiZWZvcmUiLCJpbml0aWFsVmFsdWUiLCJkZWZhdWx0VmFsdWUiLCJwcmV2aW91c1ZhbCIsInByZXZpb3VzIiwiX2V4cG9uZW50aWFsQXBwcm9hY2giLCJfbGluZWFySW50ZXJwb2xhdGUiLCJfZXhwb25lbnRpYWxJbnRlcnBvbGF0ZSIsInNldFJhbXBQb2ludCIsImN1cnJlbnRWYWwiLCJjYW5jZWxBbmRIb2xkQXRUaW1lIiwibGluZWFyUmFtcFRvVmFsdWVBdFRpbWUiLCJleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lIiwiZXhwb25lbnRpYWxSYW1wVG8iLCJsaW5lYXJSYW1wVG8iLCJ0YXJnZXRSYW1wVG8iLCJleHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUiLCJ0aW1lQ29uc3RhbnQiLCJzZXRUYXJnZXRBdFRpbWUiLCJzZXRWYWx1ZUN1cnZlQXRUaW1lIiwiZHVyYXRpb24iLCJzY2FsaW5nIiwic2VnVGltZSIsInZhbHVlQXRUaW1lIiwidDAiLCJ2MCIsInYxIiwiZXhwIiwidDEiLCJPZmZsaW5lQ29udGV4dCIsImNoYW5uZWxzIiwiX2R1cmF0aW9uIiwiX2N1cnJlbnRUaW1lIiwicmVuZGVyIiwiYmxvY2tUaW1lIiwiYnVmZmVyU291cmNlIiwiX25hdGl2ZV9zdGFydCIsIl9nYWluTm9kZSIsImNyZWF0ZUNvbnN0YW50U291cmNlIiwiQ29uc3RhbnRTb3VyY2VOb2RlIiwiX2J1ZmZlclNvdXJjZSIsImdhaW5Ob2RlIiwiX291dHB1dCIsIm9mZnNldCIsInN0b3AiLCJfcHJveGllcyIsIl9zb3VyY2VTdGFydGVkIiwiX2NvbnN0YW50U291cmNlIiwiX2lzUGFyYW0iLCJfYXBwbHlBdXRvbWF0aW9ucyIsIl9jb25uZWN0UHJveGllcyIsInByb3h5IiwiZnJvbSIsInByZXZpb3VzTWV0aG9kIiwic2lnbmFsIiwiUG93IiwiX2V4cCIsIl9leHBTY2FsZXIiLCJfZXhwRnVuYyIsIkVudmVsb3BlIiwiYXR0YWNrIiwiZGVjYXkiLCJzdXN0YWluIiwicmVsZWFzZSIsIl9hdHRhY2tDdXJ2ZSIsIl9yZWxlYXNlQ3VydmUiLCJfc2lnIiwiYXR0YWNrQ3VydmUiLCJyZWxlYXNlQ3VydmUiLCJJbiIsImN1cnZlRGVmIiwiT3V0IiwidHJpZ2dlckF0dGFjayIsInZlbG9jaXR5Iiwib3JpZ2luYWxBdHRhY2siLCJjdXJyZW50VmFsdWUiLCJwZXJjZW50Q29tcGxldGUiLCJzbGljZUluZGV4IiwidHJpZ2dlclJlbGVhc2UiLCJ0cmlnZ2VyQXR0YWNrUmVsZWFzZSIsImsiLCJjb3NpbmVDdXJ2ZSIsInJpcHBsZUN1cnZlIiwiY3VydmVMZW4iLCJzaW5lV2F2ZSIsInN0YWlyc0N1cnZlIiwiY2VpbCIsInNpbmVDdXJ2ZSIsImNvcyIsImJvdW5jZUN1cnZlIiwiaW52ZXJ0Q3VydmUiLCJvdXQiLCJsaW5lYXIiLCJleHBvbmVudGlhbCIsImJvdW5jZSIsImNvc2luZSIsInJldmVyc2UiLCJyZXZlcnNlQ3VydmUiLCJzdGVwIiwicmlwcGxlIiwic2luZSIsIkFtcGxpdHVkZUVudmVsb3BlIiwiQW5hbHlzZXJOb2RlIiwiZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSIsInVpbnQ4IiwiVWludDhBcnJheSIsImdldEJ5dGVUaW1lRG9tYWluRGF0YSIsIkFuYWx5c2VyIiwiX2FuYWx5c2VyIiwiY3JlYXRlQW5hbHlzZXIiLCJfYnVmZmVyIiwic2l6ZSIsInNtb290aGluZyIsIldhdmVmb3JtIiwiRkZUIiwiZ2V0VmFsdWUiLCJnZXRGbG9hdEZyZXF1ZW5jeURhdGEiLCJmcmVxdWVuY3lCaW5Db3VudCIsImZmdFNpemUiLCJUeXBlRXJyb3IiLCJzbW9vdGhpbmdUaW1lQ29uc3RhbnQiLCJDb21wcmVzc29yIiwiX2NvbXByZXNzb3IiLCJjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IiLCJ0aHJlc2hvbGQiLCJrbmVlIiwicmF0aW8iLCJBZGQiLCJfc3VtIiwiTXVsdGlwbHkiLCJfbXVsdCIsIk5lZ2F0ZSIsIl9tdWx0aXBseSIsIlN1YnRyYWN0IiwiX25lZyIsIkVxdWFsUG93ZXJHYWluIiwiX2VxUG93ZXIiLCJDcm9zc0ZhZGUiLCJpbml0aWFsRmFkZSIsImZhZGUiLCJfZXF1YWxQb3dlckEiLCJfZXF1YWxQb3dlckIiLCJfb25lIiwiX2ludmVydCIsIkZpbHRlciIsIl9maWx0ZXJzIiwiZGV0dW5lIiwiUSIsIl9yb2xsb2ZmIiwicm9sbG9mZiIsImNhc2NhZGluZ0NvdW50IiwiY291bnQiLCJmaWx0ZXIiLCJjcmVhdGVCaXF1YWRGaWx0ZXIiLCJjb25uZWN0aW9uQ2hhaW4iLCJjb25jYXQiLCJNdWx0aWJhbmRTcGxpdCIsImxvdyIsIl9sb3dNaWRGaWx0ZXIiLCJtaWQiLCJoaWdoIiwibG93RnJlcXVlbmN5IiwiaGlnaEZyZXF1ZW5jeSIsIkVRMyIsIl9tdWx0aWJhbmRTcGxpdCIsIl9sb3dHYWluIiwiX21pZEdhaW4iLCJfaGlnaEdhaW4iLCJTY2FsZSIsIm91dHB1dE1pbiIsIm91dHB1dE1heCIsIl9vdXRwdXRNaW4iLCJfb3V0cHV0TWF4IiwiX3NjYWxlIiwiX2FkZCIsIl9zZXRSYW5nZSIsIlNjYWxlRXhwIiwiZXhwb25lbnQiLCJEZWxheSIsIl9tYXhEZWxheSIsIm1heERlbGF5IiwiZGVsYXlUaW1lIiwiX2RlbGF5Tm9kZSIsIkZlZWRiYWNrQ29tYkZpbHRlciIsIl9kZWxheSIsIl9mZWVkYmFjayIsInJlc29uYW5jZSIsIkFicyIsIl9hYnMiLCJGb2xsb3dlciIsIl9maWx0ZXIiLCJfZnJlcXVlbmN5VmFsdWVzIiwiX3N1YiIsIl9hdHRhY2siLCJfcmVsZWFzZSIsIl9zZXRBdHRhY2tSZWxlYXNlIiwibWluVGltZSIsIlNjYWxlZEVudmVsb3BlIiwiRnJlcXVlbmN5RW52ZWxvcGUiLCJfb2N0YXZlcyIsIm9jdGF2ZXMiLCJiYXNlRnJlcXVlbmN5IiwiR3JlYXRlclRoYW5aZXJvIiwiX3RocmVzaCIsIkdyZWF0ZXJUaGFuIiwiX2d0eiIsIkdhdGUiLCJfZm9sbG93ZXIiLCJfZ3QiLCJ0aHJlc2giLCJhdHRhY2tUaW1lIiwicmVsZWFzZVRpbWUiLCJfd3JhcFNjaGVkdWxlTWV0aG9kcyIsInRpY2tzVW50aWxUaW1lIiwiX2dldFRpY2tzVW50aWxFdmVudCIsIlRpY2tTaWduYWwiLCJwcmV2RXZlbnQiLCJzZWdtZW50cyIsInJhbXBWYWwiLCJzZWdtZW50RHVyIiwidmFsMCIsInZhbDEiLCJzYW1wbGVUaW1lIiwiZ2V0VGlja3NBdFRpbWUiLCJnZXREdXJhdGlvbk9mVGlja3MiLCJjdXJyZW50VGljayIsImdldFRpbWVPZlRpY2siLCJ0aWNrIiwiZGVsdGEiLCJzcXJ0Iiwic29sMSIsInRpY2tzVG9UaW1lIiwid2hlbiIsInRpbWVUb1RpY2tzIiwic3RhcnRUaWNrcyIsImVuZFRpY2tzIiwiVGltZWxpbmVTdGF0ZSIsImluaXRpYWwiLCJfaW5pdGlhbCIsInNldFN0YXRlQXRUaW1lIiwiZ2V0TGFzdFN0YXRlIiwiZ2V0TmV4dFN0YXRlIiwiVGlja1NvdXJjZSIsIl9zdGF0ZSIsIl90aWNrT2Zmc2V0Iiwic2V0VGlja3NBdFRpbWUiLCJwYXVzZSIsInN0b3BFdmVudCIsInRtcEV2ZW50IiwibGFzdFN0YXRlIiwiZWxhcHNlZFRpY2tzIiwicGVyaW9kU3RhcnRUaW1lIiwib2Zmc2V0RXZlbnQiLCJnZXRTZWNvbmRzQXRUaW1lIiwiZWxhcHNlZFNlY29uZHMiLCJnZXRTdGF0ZUF0VGltZSIsImFic29sdXRlVGlja3MiLCJmb3JFYWNoVGlja0JldHdlZW4iLCJsYXN0U3RhdGVFdmVudCIsIm5leHRUaWNrVGltZSIsIkNsb2NrIiwiX25leHRUaWNrIiwiX3RpY2tTb3VyY2UiLCJfbGFzdFVwZGF0ZSIsIl9ib3VuZExvb3AiLCJfbG9vcCIsIkludGVydmFsVGltZWxpbmUiLCJfcm9vdCIsIl9sZW5ndGgiLCJJbnRlcnZhbE5vZGUiLCJpbnNlcnQiLCJ1cGRhdGVIZWlnaHQiLCJ1cGRhdGVNYXgiLCJfcmViYWxhbmNlIiwicmVzdWx0cyIsInNlYXJjaCIsIl9yZW1vdmVOb2RlIiwiX3NldFJvb3QiLCJfcmVwbGFjZU5vZGVJblBhcmVudCIsInJlcGxhY2VtZW50IiwiaXNMZWZ0Q2hpbGQiLCJsZWZ0IiwicmlnaHQiLCJ0ZW1wIiwiZ2V0QmFsYW5jZSIsIl9yb3RhdGVMZWZ0IiwicGl2b3ROb2RlIiwiX3JvdGF0ZVJpZ2h0IiwiYmFsYW5jZSIsImFsbE5vZGVzIiwidHJhdmVyc2UiLCJzZWFyY2hBZnRlciIsIl9sZWZ0IiwiX3JpZ2h0IiwiaGVpZ2h0IiwicG9pbnQiLCJUcmFuc3BvcnRFdmVudCIsIl9ldmVudElkIiwiX29uY2UiLCJpbnZva2UiLCJjbGVhciIsIlRyYW5zcG9ydFJlcGVhdEV2ZW50IiwiX2ludGVydmFsIiwiX2N1cnJlbnRJZCIsIl9uZXh0SWQiLCJfYm91bmRSZXN0YXJ0IiwiX3Jlc3RhcnQiLCJfY3JlYXRlRXZlbnRzIiwic2NoZWR1bGVPbmNlIiwiX2JvdW5kQ3JlYXRlRXZlbnRzIiwiX2xvb3BTdGFydCIsIl9sb29wRW5kIiwiX3BwcSIsIlRyYW5zcG9ydENvbnN0cnVjdG9yIiwiX2Nsb2NrIiwiX3Byb2Nlc3NUaWNrIiwiX2JpbmRDbG9ja0V2ZW50cyIsIl90aW1lU2lnbmF0dXJlIiwiX3NjaGVkdWxlZEV2ZW50cyIsIl9yZXBlYXRlZEV2ZW50cyIsIl9zeW5jZWRTaWduYWxzIiwiX3N3aW5nVGlja3MiLCJfc3dpbmdBbW91bnQiLCJzd2luZyIsInN3aW5nU3ViZGl2aXNpb24iLCJsb29wU3RhcnQiLCJsb29wRW5kIiwidGlja1RpbWUiLCJwcm9ncmVzcyIsImFtb3VudCIsInNjaGVkdWxlIiwiX2FkZEV2ZW50Iiwic2NoZWR1bGVSZXBlYXQiLCJldmVudElkIiwiaXRlbSIsInRpbWVsaW5lIiwidG9nZ2xlIiwidGltZVNpZyIsInN0YXJ0UG9zaXRpb24iLCJlbmRQb3NpdGlvbiIsInNldExvb3BQb2ludHMiLCJwcHEiLCJyZW1haW5pbmdUaWNrcyIsInN5bmNTaWduYWwiLCJyYXRpb1NpZ25hbCIsInVuc3luY1NpZ25hbCIsInN5bmNlZFNpZ25hbCIsIlZvbHVtZSIsInZvbHVtZSIsIl91bm11dGVkVm9sdW1lIiwibXV0ZSIsIk1hc3RlciIsIl92b2x1bWUiLCJ0b01hc3RlciIsIk1hc3RlckNvbnN0cnVjdG9yIiwiU291cmNlIiwiX3N5bmNlZCIsIl9zY2hlZHVsZWQiLCJfc3RhcnQiLCJyZXN0YXJ0IiwiX3N0b3AiLCJzY2hlZCIsIl9zeW5jZWRTdGFydCIsInN5bmMiLCJzdGF0ZUV2ZW50Iiwic3RhcnRPZmZzZXQiLCJfc3luY2VkU3RvcCIsInVuc3luYyIsIkF1ZGlvQnVmZmVyIiwiY29weVRvQ2hhbm5lbCIsInNyYyIsImNoYW5OdW0iLCJjaGFubmVsIiwiY29weUZyb21DaGFubmVsIiwiZGVzdCIsIkJ1ZmZlciIsIl9yZXZlcnNlZCIsIl94aHIiLCJfb25sb2FkIiwidXJsIiwib25sb2FkIiwibG9hZGVkIiwibG9hZCIsImNhdGNoIiwib25lcnJvciIsImJ1ZmYiLCJlcnIiLCJfcmVtb3ZlRnJvbURvd25sb2FkUXVldWUiLCJhYm9ydCIsIm51bWJlck9mQ2hhbm5lbHMiLCJmcm9tQXJyYXkiLCJpc011bHRpZGltZW5zaW9uYWwiLCJ0b01vbm8iLCJ0b0FycmF5Iiwib3V0cHV0QXJyYXkiLCJudW1DaGFubmVscyIsImNoYW5uZWxBcnJheSIsInNhbXBsZSIsInN0YXJ0U2FtcGxlcyIsImVuZFNhbXBsZXMiLCJfcmV2ZXJzZSIsInJldiIsIl9kb3dubG9hZFF1ZXVlIiwiYmFzZVVybCIsImZyb21VcmwiLCJyZXF1ZXN0IiwibWF0Y2hlcyIsImV4dGVuc2lvbnMiLCJleHRlbnNpb24iLCJzdXBwb3J0c1R5cGUiLCJyZXBsYWNlIiwib25FcnJvciIsIm9uUHJvZ3Jlc3MiLCJ0b3RhbFByb2dyZXNzIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwicmVzcG9uc2VUeXBlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInN0YXR1cyIsInJlc3BvbnNlIiwibGVuZ3RoQ29tcHV0YWJsZSIsInNlbmQiLCJjYW5jZWxEb3dubG9hZHMiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjYW5QbGF5VHlwZSIsInJlbW92ZUV2ZW50cyIsImZhaWwiLCJPc2NpbGxhdG9yTm9kZSIsIm9uZW5kZWQiLCJfc3RhcnRUaW1lIiwiX3N0b3BUaW1lIiwiX29zY2lsbGF0b3IiLCJjcmVhdGVPc2NpbGxhdG9yIiwiX2dhaW4iLCJzZXRQZXJpb2RpY1dhdmUiLCJwZXJpb2RpY1dhdmUiLCJjYW5jZWxTdG9wIiwiT3NjaWxsYXRvciIsIl93YXZlIiwiX3BhcnRpYWxzIiwicGFydGlhbHMiLCJfcGhhc2UiLCJwaGFzZSIsIlNpbmUiLCJUcmlhbmdsZSIsIlNhd3Rvb3RoIiwiU3F1YXJlIiwiQ3VzdG9tIiwic3luY0ZyZXF1ZW5jeSIsInVuc3luY0ZyZXF1ZW5jeSIsImlzQmFzaWNUeXBlIiwiY29lZnMiLCJfZ2V0UmVhbEltYWdpbmFyeSIsImNyZWF0ZVBlcmlvZGljV2F2ZSIsInBlcmlvZGljV2F2ZVNpemUiLCJyZWFsIiwiaW1hZyIsInBhcnRpYWxDb3VudCIsInBhcnRpYWwiLCJleGVjIiwiX2ludmVyc2VGRlQiLCJzdW0iLCJfZ2V0SW5pdGlhbFZhbHVlIiwidHdvUGkiLCJBdWRpb1RvR2FpbiIsIl9ub3JtIiwieCIsIlplcm8iLCJMRk8iLCJhbXBsaXR1ZGUiLCJfc3RvcHBlZFNpZ25hbCIsIl96ZXJvcyIsIl9zdG9wcGVkVmFsdWUiLCJfYTJnIiwiX3NjYWxlciIsImN1cnJlbnRNaW4iLCJjdXJyZW50TWF4IiwiTGltaXRlciIsIkxvd3Bhc3NDb21iRmlsdGVyIiwiX2xvd3Bhc3MiLCJkYW1wZW5pbmciLCJNZXJnZSIsIl9tZXJnZXIiLCJjcmVhdGVDaGFubmVsTWVyZ2VyIiwiTWV0ZXIiLCJnZXRMZXZlbCIsIlNwbGl0IiwiX3NwbGl0dGVyIiwiY3JlYXRlQ2hhbm5lbFNwbGl0dGVyIiwiTWlkU2lkZVNwbGl0IiwiX3NwbGl0IiwiX21pZEFkZCIsIlNRUlQxXzIiLCJfc2lkZVN1YnRyYWN0Iiwic2lkZSIsIk1pZFNpZGVNZXJnZSIsIl90aW1lc1R3b0xlZnQiLCJfdGltZXNUd29SaWdodCIsIl9tZXJnZSIsIk1pZFNpZGVDb21wcmVzc29yIiwiX21pZFNpZGVTcGxpdCIsIl9taWRTaWRlTWVyZ2UiLCJNb25vIiwiTXVsdGliYW5kQ29tcHJlc3NvciIsIlN0ZXJlb1Bhbm5lck5vZGUiLCJwYW4iLCJyaWdodFdhdmVTaGFwZXIiLCJsZWZ0V2F2ZVNoYXBlciIsImxlZnRHYWluIiwicmlnaHRHYWluIiwibWVyZ2UiLCJjcmVhdGVTdGVyZW9QYW5uZXIiLCJQYW5uZXIiLCJpbml0aWFsUGFuIiwiX3Bhbm5lciIsIlBhbm5lcjNEIiwiY3JlYXRlUGFubmVyIiwicGFubmluZ01vZGVsIiwibWF4RGlzdGFuY2UiLCJkaXN0YW5jZU1vZGVsIiwiY29uZU91dGVyR2FpbiIsImNvbmVPdXRlckFuZ2xlIiwiY29uZUlubmVyQW5nbGUiLCJyZWZEaXN0YW5jZSIsInJvbGxvZmZGYWN0b3IiLCJfb3JpZW50YXRpb24iLCJvcmllbnRhdGlvblgiLCJvcmllbnRhdGlvblkiLCJvcmllbnRhdGlvbloiLCJfcG9zaXRpb24iLCJwb3NpdGlvblgiLCJwb3NpdGlvblkiLCJwb3NpdGlvbloiLCJfcmFtcFRpbWVDb25zdGFudCIsInNldFBvc2l0aW9uIiwieSIsInoiLCJzZXRPcmllbnRhdGlvbiIsInBvcyIsIl9hbGlhc1Byb3BlcnR5IiwiUGFuVm9sIiwiU29sbyIsIl9zb2xvQmluZCIsIl9zb2xvZWQiLCJzb2xvIiwiX2lzU29sb2VkIiwiX2FkZFNvbG8iLCJfcmVtb3ZlU29sbyIsIl9jdXJyZW50U29sbyIsIl9ub1NvbG9zIiwiQ3RybEludGVycG9sYXRlIiwibG93ZXJQb3NpdGlvbiIsImxvd2VyIiwidXBwZXIiLCJfaW50ZXJwb2xhdGUiLCJyZXRBcnJheSIsInJldE9iaiIsIl90b051bWJlciIsIkN0cmxNYXJrb3YiLCJuZXh0IiwiZGlzdHJpYnV0aW9uIiwiX2dldFByb2JEaXN0cmlidXRpb24iLCJyYW5kIiwicmFuZG9tIiwiZGlzdCIsImNob3NlbiIsIm5lZWRzTm9ybWFsaXppbmciLCJvcHRpb24iLCJwcm9iYWJpbGl0eSIsIkN0cmxQYXR0ZXJuIiwiX3NodWZmbGVkIiwiX2RpcmVjdGlvbiIsIlVwIiwiRG93biIsIlVwRG93biIsIkRvd25VcCIsIkFsdGVybmF0ZVVwIiwiQWx0ZXJuYXRlRG93biIsIlJhbmRvbSIsIlJhbmRvbVdhbGsiLCJSYW5kb21PbmNlIiwiX3NodWZmbGVWYWx1ZXMiLCJjb3B5IiwicmFuZFZhbCIsIkN0cmxSYW5kb20iLCJpbnRlZ2VyIiwiQnVmZmVycyIsInVybHMiLCJfYnVmZmVycyIsIl9sb2FkaW5nQ291bnQiLCJfYnVmZmVyTG9hZGVkIiwiaGFzIiwiaXNMb2FkZWQiLCJidWZmTmFtZSIsIkJ1c2VzIiwiY2hhbm5lbE5hbWUiLCJzZW5kS25vYiIsInJlY2VpdmUiLCJEcmF3IiwiZXhwaXJhdGlvbiIsImFudGljaXBhdGlvbiIsIl9ib3VuZERyYXdMb29wIiwiX2RyYXdMb29wIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiTGlzdGVuZXIiLCJMaXN0ZW5lckNvbnN0cnVjdG9yIiwiZm9yd2FyZFgiLCJmb3J3YXJkWSIsImZvcndhcmRaIiwidXBYIiwidXBZIiwidXBaIiwibGlzdGVuZXIiLCJvcmlnaW5hbENvbnRleHQiLCJyZW5kZXJSZXQiLCJhdHRlbXB0UmVuZGVyIiwidHJpZXMiLCJFZmZlY3QiLCJfZHJ5V2V0Iiwid2V0IiwiZWZmZWN0U2VuZCIsImVmZmVjdFJldHVybiIsImNvbm5lY3RFZmZlY3QiLCJlZmZlY3QiLCJBdXRvRmlsdGVyIiwiX2xmbyIsImRlcHRoIiwiZGVsYXkiLCJvY3QiLCJBdXRvUGFubmVyIiwiQXV0b1dhaCIsImZvbGxvd2VyIiwiX3N3ZWVwUmFuZ2UiLCJfYmFzZUZyZXF1ZW5jeSIsIl9pbnB1dEJvb3N0IiwiX2JhbmRwYXNzIiwiX3BlYWtpbmciLCJfc2V0U3dlZXBSYW5nZSIsInNlbnNpdGl2aXR5IiwiYmFzZUZyZXEiLCJzZW5zaXRpdnkiLCJNb2R1bG8iLCJtb2R1bHVzIiwiX3N1YnRyYWN0IiwiX21vZFNpZ25hbCIsIl9zZXRXYXZlU2hhcGVyIiwibW9kIiwiQml0Q3J1c2hlciIsImludlN0ZXBTaXplIiwiYml0cyIsIl9tb2R1bG8iLCJfYml0cyIsIkNoZWJ5c2hldiIsIl9vcmRlciIsIm9yZGVyIiwiX2dldENvZWZmaWNpZW50IiwiZGVncmVlIiwibWVtbyIsIlN0ZXJlb0VmZmVjdCIsImVmZmVjdFNlbmRMIiwiZWZmZWN0U2VuZFIiLCJlZmZlY3RSZXR1cm5MIiwiZWZmZWN0UmV0dXJuUiIsIkNob3J1cyIsIl9kZXB0aCIsIl9kZWxheVRpbWUiLCJfbGZvTCIsIl9sZm9SIiwiX2RlbGF5Tm9kZUwiLCJfZGVsYXlOb2RlUiIsInNwcmVhZCIsImRldmlhdGlvbiIsIkNvbnZvbHZlciIsIl9jb252b2x2ZXIiLCJjcmVhdGVDb252b2x2ZXIiLCJEaXN0b3J0aW9uIiwiX2Rpc3RvcnRpb24iLCJkaXN0b3J0aW9uIiwiZGVnIiwiRmVlZGJhY2tFZmZlY3QiLCJfZmVlZGJhY2tHYWluIiwiZmVlZGJhY2siLCJGZWVkYmFja0RlbGF5IiwiY29tYkZpbHRlclR1bmluZ3MiLCJhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMiLCJGcmVldmVyYiIsInJvb21TaXplIiwiX2NvbWJGaWx0ZXJzIiwiX2FsbHBhc3NGaWx0ZXJzTCIsIl9hbGxwYXNzRmlsdGVyc1IiLCJhbGxwYXNzTCIsImFsbHBhc3NSIiwibGZwZiIsImFsIiwiYXIiLCJjZiIsImNvbWJGaWx0ZXJEZWxheVRpbWVzIiwiY29tYkZpbHRlclJlc29uYW5jZXMiLCJhbGxwYXNzRmlsdGVyRnJlcXMiLCJKQ1JldmVyYiIsIl9zY2FsZVJvb21TaXplIiwiX2FsbHBhc3NGaWx0ZXJzIiwiX2ZlZWRiYWNrQ29tYkZpbHRlcnMiLCJhZiIsImFsbHBhc3MiLCJmYmNmIiwiYXBmIiwiTWlkU2lkZUVmZmVjdCIsIm1pZFNlbmQiLCJzaWRlU2VuZCIsIm1pZFJldHVybiIsInNpZGVSZXR1cm4iLCJQaGFzZXIiLCJfZmlsdGVyc0wiLCJfbWFrZUZpbHRlcnMiLCJzdGFnZXMiLCJfZmlsdGVyc1IiLCJjb25uZWN0VG9GcmVxIiwiZmlsdGVycyIsIlN0ZXJlb1hGZWVkYmFja0VmZmVjdCIsIl9mZWVkYmFja0xSIiwiX2ZlZWRiYWNrUkwiLCJQaW5nUG9uZ0RlbGF5IiwiX2xlZnREZWxheSIsIm1heERlbGF5VGltZSIsIl9yaWdodERlbGF5IiwiX3JpZ2h0UHJlRGVsYXkiLCJQaXRjaFNoaWZ0IiwiX2ZyZXF1ZW5jeSIsIl9kZWxheUEiLCJfbGZvQSIsIl9kZWxheUIiLCJfbGZvQiIsIl9jcm9zc0ZhZGUiLCJfY3Jvc3NGYWRlTEZPIiwiX2ZlZWRiYWNrRGVsYXkiLCJfcGl0Y2giLCJfd2luZG93U2l6ZSIsIndpbmRvd1NpemUiLCJmYWN0b3IiLCJCdWZmZXJTb3VyY2UiLCJfc291cmNlU3RvcHBlZCIsIl9zb3VyY2UiLCJfb25lbmRlZCIsInBsYXliYWNrUmF0ZSIsImZhZGVJbiIsImZhZGVPdXQiLCJfb25lbmRlZFRpbWVvdXQiLCJmYWRlSW5UaW1lIiwiY29tcHV0ZWREdXIiLCJmYWRlT3V0VGltZSIsImhlbGREdXJhdGlvbiIsInN0YXJ0RmFkZSIsImFkZGl0aW9uYWxUYWlsIiwiTm9pc2UiLCJfcGxheWJhY2tSYXRlIiwiX25vaXNlQnVmZmVycyIsInJhdGUiLCJfbm9pc2VBcnJheXMiLCJwaW5rIiwiY2hhbm5lbE51bSIsImIwIiwiYjEiLCJiMiIsImIzIiwiYjQiLCJiNSIsImI2Iiwid2hpdGUiLCJicm93biIsImxhc3RPdXQiLCJjcmVhdGVCdWZmZXJzIiwiUmV2ZXJiIiwicHJlRGVsYXkiLCJnZW5lcmF0ZSIsIm5vaXNlTCIsIm5vaXNlUiIsIlN0ZXJlb0ZlZWRiYWNrRWZmZWN0IiwiX2ZlZWRiYWNrTCIsIl9mZWVkYmFja1IiLCJTdGVyZW9XaWRlbmVyIiwid2lkdGgiLCJfdHdvVGltZXNXaWR0aE1pZCIsIl90d29UaW1lc1dpZHRoU2lkZSIsIl9taWRNdWx0IiwiX29uZU1pbnVzV2lkdGgiLCJfc2lkZU11bHQiLCJUcmVtb2xvIiwiX2FtcGxpdHVkZUwiLCJfYW1wbGl0dWRlUiIsIlZpYnJhdG8iLCJFdmVudCIsIl9zdGFydE9mZnNldCIsIl9wcm9iYWJpbGl0eSIsIl9odW1hbml6ZSIsImh1bWFuaXplIiwiX3Jlc2NoZWR1bGVFdmVudHMiLCJzdGFydFRpY2siLCJfZ2V0TG9vcER1cmF0aW9uIiwiX3RpY2siLCJwcm9iIiwidmFyaWF0aW9uIiwicmVzY2hlZHVsVGltZSIsImxhc3RFdmVudCIsImxvb3BEdXJhdGlvbiIsIkxvb3AiLCJfZXZlbnQiLCJpdGVyYXRpb25zIiwiaXRlcnMiLCJQYXJ0IiwiX2ZvckVhY2giLCJfc3RhcnROb3RlIiwiYXQiLCJfcmVzdGFydEV2ZW50IiwicmVtb3ZlQWxsIiwiX3NldEFsbCIsIl90ZXN0TG9vcEJvdW5kcmllcyIsIlBhdHRlcm4iLCJfcGF0dGVybiIsInBhdHRlcm4iLCJ2YWxzIiwiU2VxdWVuY2UiLCJfc3ViZGl2aXNpb24iLCJfaW5kZXhUaW1lIiwic3ViU3ViZGl2aXNpb24iLCJQdWxzZU9zY2lsbGF0b3IiLCJfd2lkdGhHYXRlIiwiX3Nhd3Rvb3RoIiwiUFdNT3NjaWxsYXRvciIsIl9wdWxzZSIsIm1vZHVsYXRpb25GcmVxdWVuY3kiLCJfbW9kdWxhdG9yIiwiRk1Pc2NpbGxhdG9yIiwiX2NhcnJpZXIiLCJtb2R1bGF0aW9uSW5kZXgiLCJtb2R1bGF0aW9uVHlwZSIsImhhcm1vbmljaXR5IiwiX21vZHVsYXRpb25Ob2RlIiwiQU1Pc2NpbGxhdG9yIiwiX21vZHVsYXRpb25TY2FsZSIsIkZhdE9zY2lsbGF0b3IiLCJfb3NjaWxsYXRvcnMiLCJfc3ByZWFkIiwib3NjIiwiaXRlcmF0b3IiLCJPbW5pT3NjaWxsYXRvciIsIl9zb3VyY2VUeXBlIiwiT21uaU9zY1R5cGUiLCJwcmVmaXgiLCJzdWJzdHIiLCJfY3JlYXRlTmV3T3NjaWxsYXRvciIsIm9zY1R5cGUiLCJPc2NpbGxhdG9yQ29uc3RydWN0b3IiLCJvbGRPc2MiLCJtVHlwZSIsIkluc3RydW1lbnQiLCJfc3luY01ldGhvZCIsInRpbWVQb3NpdGlvbiIsIm9yaWdpbmFsTWV0aG9kIiwiX29yaWdpbmFsX3RyaWdnZXJBdHRhY2siLCJfb3JpZ2luYWxfdHJpZ2dlclJlbGVhc2UiLCJNb25vcGhvbmljIiwicG9ydGFtZW50byIsIl90cmlnZ2VyRW52ZWxvcGVBdHRhY2siLCJzZXROb3RlIiwiX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UiLCJnZXRMZXZlbEF0VGltZSIsImVudmVsb3BlIiwicG9ydFRpbWUiLCJTeW50aCIsIm9zY2lsbGF0b3IiLCJBTVN5bnRoIiwibW9kdWxhdGlvbiIsIm1vZHVsYXRpb25FbnZlbG9wZSIsIk1vbm9TeW50aCIsImZpbHRlckVudmVsb3BlIiwiRHVvU3ludGgiLCJ2b2ljZTAiLCJ2b2ljZTEiLCJfdmlicmF0byIsInZpYnJhdG9SYXRlIiwiX3ZpYnJhdG9HYWluIiwidmlicmF0b0Ftb3VudCIsIkZNU3ludGgiLCJjYXJyaWVyIiwibW9kdWxhdG9yIiwiTWVtYnJhbmVTeW50aCIsInBpdGNoRGVjYXkiLCJtYXhOb3RlIiwiaW5oYXJtUmF0aW9zIiwiTWV0YWxTeW50aCIsIl9mcmVxTXVsdGlwbGllcnMiLCJfYW1wbGl0dWUiLCJfaGlnaHBhc3MiLCJfZmlsdGVyRnJlcVNjYWxlciIsIm11bHQiLCJ2ZWwiLCJvY3RzIiwiTm9pc2VTeW50aCIsIm5vaXNlIiwiUGx1Y2tTeW50aCIsIl9ub2lzZSIsImF0dGFja05vaXNlIiwiX2xmY2YiLCJkZWxheUFtb3VudCIsIlBvbHlTeW50aCIsInBvbHlwaG9ueSIsIk1BWF9QT0xZUEhPTlkiLCJ2b2ljZXMiLCJfdHJpZ2dlcnMiLCJ2Iiwidm9pY2UiLCJub3RlcyIsIm9sZGVzdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdHJpbmdpZmllZCIsImRlc2MiLCJyZWxlYXNlQWxsIiwiU2FtcGxlciIsInVybE1hcCIsImlzTmFOIiwiX2FjdGl2ZVNvdXJjZXMiLCJfZmluZENsb3Nlc3QiLCJkaWZmZXJlbmNlIiwiY2xvc2VzdE5vdGUiLCJzb3VyY2UiLCJzb3VyY2VzIiwic2V0V2F2ZVRhYmxlIiwiY3JlYXRlV2F2ZVRhYmxlIiwiR2FpblRvQXVkaW8iLCJOb3JtYWxpemUiLCJpbnB1dE1pbiIsImlucHV0TWF4IiwiX2lucHV0TWluIiwiX2lucHV0TWF4IiwiX2RpdiIsIlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsIiwiX291dHB1dFNpZyIsIl9sYXN0VmFsIiwiX29uVGljayIsIl9iaW5kQW5jaG9yVmFsdWUiLCJfYW5jaG9yVmFsdWUiLCJfc3luY2VkQ2FsbGJhY2siLCJHcmFpblBsYXllciIsImdyYWluU2l6ZSIsIl9ncmFpblNpemUiLCJfb3ZlcmxhcCIsIm92ZXJsYXAiLCJfb25zdG9wIiwiX29mZnNldCIsInNlZWsiLCJQbGF5ZXIiLCJhdXRvc3RhcnQiLCJfZWxhcHNlZFRpbWUiLCJyZXRyaWdnZXIiLCJfb25Tb3VyY2VFbmQiLCJjb21wdXRlZER1cmF0aW9uIiwiX3N0b3BBdE5leHRJdGVyYXRpb24iLCJuZXh0U3RvcCIsInBvc2l0aW9uIiwic3RvcFRpbWUiLCJQbGF5ZXJzIiwiX3BsYXllcnMiLCJfZmFkZUluIiwiX2ZhZGVPdXQiLCJwbGF5ZXIiLCJwbGF5aW5nIiwicGxheWVyTmFtZSIsInN0b3BBbGwiLCJVc2VyTWVkaWEiLCJfbWVkaWFTdHJlYW0iLCJfc3RyZWFtIiwiX2RldmljZSIsImxhYmVsT3JJZCIsImVudW1lcmF0ZURldmljZXMiLCJkZXZpY2VzIiwiZGV2aWNlIiwiZmluZCIsImxhYmVsIiwiZGV2aWNlSWQiLCJjb25zdHJhaW50cyIsImF1ZGlvIiwiZWNob0NhbmNlbGxhdGlvbiIsIm1lZGlhRGV2aWNlcyIsImdldFVzZXJNZWRpYSIsInN0cmVhbSIsImNyZWF0ZU1lZGlhU3RyZWFtU291cmNlIiwiZ2V0QXVkaW9UcmFja3MiLCJ0cmFjayIsImtpbmQiLCJhY3RpdmUiLCJncm91cElkIiwiTWlkaSIsImZhY3RvcnkiLCJnbG9iYWwiLCJyZXF1aXJlIiwiaCIsImNvZGUiLCIxIiwiY2hhckNvZGVBdCIsInRvQnl0ZUFycmF5IiwiZnJvbUJ5dGVBcnJheSIsImJhc2U2NGpzIiwiMiIsIjMiLCJUWVBFRF9BUlJBWV9TVVBQT1JUIiwid3JpdGUiLCJpc0J1ZmZlciIsIlkiLCJBcnJheUJ1ZmZlciIsImJ5dGVMZW5ndGgiLCJfYXVnbWVudCIsImRhdGEiLCJfX3Byb3RvX18iLCJfaXNCdWZmZXIiLCJwb29sU2l6ZSIsIloiLCJSIiwiVSIsInUiLCJOdW1iZXIiLCJWIiwidyIsIlMiLCJUIiwiQSIsIlciLCIkIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJYIiwiTiIsIlAiLCJhYSIsIk8iLCJTbG93QnVmZmVyIiwiSU5TUEVDVF9NQVhfQllURVMiLCJmb28iLCJzdWJhcnJheSIsImNvbXBhcmUiLCJpc0VuY29kaW5nIiwiZXF1YWxzIiwiaW5zcGVjdCIsInJlYWRVSW50OCIsIndyaXRlVUludDgiLCJ0b0pTT04iLCJfYXJyIiwicmVhZFVJbnRMRSIsInJlYWRVSW50QkUiLCJyZWFkVUludDE2TEUiLCJyZWFkVUludDE2QkUiLCJyZWFkVUludDMyTEUiLCJyZWFkVUludDMyQkUiLCJyZWFkSW50TEUiLCJyZWFkSW50QkUiLCJyZWFkSW50OCIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZEZsb2F0TEUiLCJyZWFkIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVJbnRMRSIsIndyaXRlVUludEJFIiwid3JpdGVVSW50MTZMRSIsIndyaXRlVUludDE2QkUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVSW50MzJCRSIsIndyaXRlSW50TEUiLCJ3cml0ZUludEJFIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkxFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVGbG9hdEJFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlRG91YmxlQkUiLCJfc2V0IiwiZmlsbCIsInRvQXJyYXlCdWZmZXIiLCJfIiwidG9Mb2NhbGVTdHJpbmciLCJzZWxmIiwiYmFzZTY0LWpzIiwiaWVlZTc1NCIsImlzYXJyYXkiLCI0IiwiRVM2UHJvbWlzZSIsImNhIiwiZWEiLCJfcmVzdWx0IiwiaWEiLCJnYSIsImhhIiwiX2xhYmVsIiwiX29uZXJyb3IiLCJmYSIsIl9zdWJzY3JpYmVycyIsImphIiwia2EiLCJfaW5zdGFuY2VDb25zdHJ1Y3RvciIsInByb21pc2UiLCJfcmVtYWluaW5nIiwiX2VudW1lcmF0ZSIsImRhIiwiTXV0YXRpb25PYnNlcnZlciIsIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiLCJiYSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiaW1wb3J0U2NyaXB0cyIsIk1lc3NhZ2VDaGFubmVsIiwibmV4dFRpY2siLCJjcmVhdGVUZXh0Tm9kZSIsIm9ic2VydmUiLCJjaGFyYWN0ZXJEYXRhIiwicG9ydDEiLCJwb3J0MiIsInJ1bk9uTG9vcCIsInJ1bk9uQ29udGV4dCIsInN1YnN0cmluZyIsIl9lYWNoRW50cnkiLCJfc2V0dGxlZEF0IiwiX3dpbGxTZXR0bGVBdCIsImFsbCIsInJhY2UiLCJyZWplY3QiLCJfc2V0U2NoZWR1bGVyIiwiX3NldEFzYXAiLCJfYXNhcCIsInBvbHlmaWxsIiwiRnVuY3Rpb24iLCJjYXN0IiwiX3Byb2Nlc3MiLCI1IiwiZmV0Y2hKc29ucCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJyZW1vdmVDaGlsZCIsImpzb25wQ2FsbGJhY2siLCJqc29ucENhbGxiYWNrRnVuY3Rpb24iLCJEYXRlIiwib2siLCJqc29uIiwic2V0QXR0cmlidXRlIiwiY2hhcnNldCIsImFwcGVuZENoaWxkIiwiNiIsImNyZWF0ZUVsZW1lbnROUyIsIkhUTUxFbGVtZW50Iiwic2FmYXJpIiwic2V0SW1tZWRpYXRlIiwicmV2b2tlT2JqZWN0VVJMIiwicmVhZHlTdGF0ZSIsIklOSVQiLCJocmVmIiwiZG93bmxvYWQiLCJNb3VzZUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsIkRPTkUiLCJGaWxlUmVhZGVyIiwib25sb2FkZW5kIiwicmVzdWx0IiwibG9jYXRpb24iLCJyZWFkQXNEYXRhVVJMIiwibXNTYXZlT3JPcGVuQmxvYiIsIldSSVRJTkciLCJvbndyaXRlc3RhcnQiLCJvbnByb2dyZXNzIiwib253cml0ZSIsIm9uYWJvcnQiLCJvbndyaXRlZW5kIiwiY29udGVudCIsInNhdmVBcyIsIjciLCJOYU4iLCJMTjIiLCI4IiwiOSIsIm9hIiwibmEiLCJtYSIsImxhIiwicWEiLCJyYSIsInNvcnQiLCJwYSIsImxpYnRlc3MiLCJHbHVUZXNzZWxhdG9yIiwid2luZGluZ1J1bGUiLCJHTFVfVEVTU19XSU5ESU5HX09ERCIsIkdMVV9URVNTX1dJTkRJTkdfTk9OWkVSTyIsIkdMVV9URVNTX1dJTkRJTkdfUE9TSVRJVkUiLCJHTFVfVEVTU19XSU5ESU5HX05FR0FUSVZFIiwiR0xVX1RFU1NfV0lORElOR19BQlNfR0VRX1RXTyIsInByaW1pdGl2ZVR5cGUiLCJHTF9MSU5FX0xPT1AiLCJHTF9UUklBTkdMRVMiLCJHTF9UUklBTkdMRV9TVFJJUCIsIkdMX1RSSUFOR0xFX0ZBTiIsImVycm9yVHlwZSIsIkdMVV9URVNTX01JU1NJTkdfQkVHSU5fUE9MWUdPTiIsIkdMVV9URVNTX01JU1NJTkdfRU5EX1BPTFlHT04iLCJHTFVfVEVTU19NSVNTSU5HX0JFR0lOX0NPTlRPVVIiLCJHTFVfVEVTU19NSVNTSU5HX0VORF9DT05UT1VSIiwiR0xVX1RFU1NfQ09PUkRfVE9PX0xBUkdFIiwiR0xVX1RFU1NfTkVFRF9DT01CSU5FX0NBTExCQUNLIiwiZ2x1RW51bSIsIkdMVV9URVNTX01FU0giLCJHTFVfVEVTU19UT0xFUkFOQ0UiLCJHTFVfVEVTU19XSU5ESU5HX1JVTEUiLCJHTFVfVEVTU19CT1VOREFSWV9PTkxZIiwiR0xVX0lOVkFMSURfRU5VTSIsIkdMVV9JTlZBTElEX1ZBTFVFIiwiR0xVX1RFU1NfQkVHSU4iLCJHTFVfVEVTU19WRVJURVgiLCJHTFVfVEVTU19FTkQiLCJHTFVfVEVTU19FUlJPUiIsIkdMVV9URVNTX0VER0VfRkxBRyIsIkdMVV9URVNTX0NPTUJJTkUiLCJHTFVfVEVTU19CRUdJTl9EQVRBIiwiR0xVX1RFU1NfVkVSVEVYX0RBVEEiLCJHTFVfVEVTU19FTkRfREFUQSIsIkdMVV9URVNTX0VSUk9SX0RBVEEiLCJHTFVfVEVTU19FREdFX0ZMQUdfREFUQSIsIkdMVV9URVNTX0NPTUJJTkVfREFUQSIsImdsdURlbGV0ZVRlc3MiLCJnbHVUZXNzUHJvcGVydHkiLCJnbHVHZXRUZXNzUHJvcGVydHkiLCJnbHVUZXNzTm9ybWFsIiwiZ2x1VGVzc0NhbGxiYWNrIiwiZ2x1VGVzc1ZlcnRleCIsImdsdVRlc3NCZWdpblBvbHlnb24iLCJnbHVUZXNzQmVnaW5Db250b3VyIiwiZ2x1VGVzc0VuZENvbnRvdXIiLCJnbHVUZXNzRW5kUG9seWdvbiIsIjEwIiwib3BlbnR5cGUiLCJ0YWJsZSIsIlVpbnQxNkFycmF5IiwidHJhbnMiLCJzb3VyY2VJbmRleCIsInRhZyIsImJpdGNvdW50IiwiZGVzdExlbiIsImx0cmVlIiwiZHRyZWUiLCJ2ZSIsInVlIiwic2UiLCJ0ZSIsImtlIiwib2UiLCJwZSIsInFlIiwicmUiLCJsZSIsIngxIiwieTEiLCJ4MiIsInkyIiwiY29tbWFuZHMiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsInRhYmxlTmFtZSIsImZpZWxkcyIsImZvcm1hdCIsImdseXBocyIsInhlIiwiYXNzZXJ0Iiwic2NyaXB0IiwiZGVmYXVsdExhbmdTeXMiLCJyZXFGZWF0dXJlSW5kZXgiLCJmZWF0dXJlSW5kZXhlcyIsImxhbmdTeXNSZWNvcmRzIiwibGFuZ1N5cyIsImZlYXR1cmUiLCJmZWF0dXJlUGFyYW1zIiwibG9va3VwTGlzdEluZGV4ZXMiLCJsb29rdXBUeXBlIiwibG9va3VwRmxhZyIsInN1YnRhYmxlcyIsImdldFVpbnQ4IiwiZ2V0VWludDE2IiwiZ2V0VWludDMyIiwiZ2V0SW50MTYiLCJyZWxhdGl2ZU9mZnNldCIsImdseXBoSW5kZXgiLCJmb250IiwiY21hcCIsImVuY29kaW5nIiwibmFtZXMiLCJRZSIsIm51bWJlck9mR2x5cGhzIiwiZ2x5cGhOYW1lSW5kZXgiLCJiaW5kQ29uc3RydWN0b3JWYWx1ZXMiLCJwYXRoIiwiY29uZmlndXJhYmxlIiwiTGUiLCJnZXRDYXJkMTYiLCJnZXRCeXRlIiwiZ2V0T2Zmc2V0IiwiZ2V0Qnl0ZXMiLCJvYmplY3RzIiwiZW5kT2Zmc2V0IiwicGFyc2VCeXRlIiwiUGFyc2VyIiwiTmUiLCJvcCIsInNhIiwiVGUiLCJ0YSIsIlVlIiwiRGF0YVZpZXciLCJfc3VicnMiLCJfc3VicnNCaWFzIiwicHJpdmF0ZSIsIl9kZWZhdWx0V2lkdGhYIiwiZGVmYXVsdFdpZHRoWCIsIl9ub21pbmFsV2lkdGhYIiwibm9taW5hbFdpZHRoWCIsInN1YnJzIiwiX3ByaXZhdGVEaWN0IiwieGEiLCJjbG9zZVBhdGgiLCJtb3ZlVG8iLCJpc0NJREZvbnQiLCJ0YWJsZXMiLCJjZmYiLCJ0b3BEaWN0IiwiX2ZkU2VsZWN0IiwiX2ZkQXJyYXkiLCJwb3AiLCJsaW5lVG8iLCJjdXJ2ZVRvIiwiZ3N1YnJzQmlhcyIsImdzdWJycyIsImFkdmFuY2VXaWR0aCIsIkFhIiwiRGEiLCJFYSIsIkllIiwiUmVjb3JkIiwiZGljdCIsIkZhIiwidG9wRGljdHMiLCJKYSIsIlhhIiwiWWEiLCJkZiIsImZmIiwiZWYiLCIkYSIsIl9hIiwibWIiLCJuYiIsIm9iIiwicGIiLCJUYWJsZSIsIm51bVRhYmxlcyIsInNlYXJjaFJhbmdlIiwiZW50cnlTZWxlY3RvciIsInJhbmdlU2hpZnQiLCJzaXplT2YiLCJhcmd1bWVudCIsImVuY29kZSIsInFiIiwiY2hhclRvR2x5cGhJbmRleCIsImdldE1ldHJpY3MiLCJ0YiIsInViIiwidmIiLCJ3YiIsInhiIiwieWIiLCJ6YiIsIkFiIiwic3Vic3RGb3JtYXQiLCJDYiIsIkRiIiwiRWIiLCJGYiIsInBhcnNlU2hvcnQiLCJHYiIsIm51bWJlck9mQ29udG91cnMiLCJfeE1pbiIsIl95TWluIiwiX3hNYXgiLCJfeU1heCIsImVuZFBvaW50SW5kaWNlcyIsInBhcnNlVVNob3J0IiwiaW5zdHJ1Y3Rpb25MZW5ndGgiLCJpbnN0cnVjdGlvbnMiLCJvbkN1cnZlIiwibGFzdFBvaW50T2ZDb250b3VyIiwicG9pbnRzIiwiaXNDb21wb3NpdGUiLCJjb21wb25lbnRzIiwieFNjYWxlIiwic2NhbGUwMSIsInNjYWxlMTAiLCJ5U2NhbGUiLCJkeSIsIm1hdGNoZWRQb2ludHMiLCJwYXJzZUNoYXIiLCJwYXJzZUYyRG90MTQiLCJIYiIsIkpiIiwiSWIiLCJxdWFkcmF0aWNDdXJ2ZVRvIiwiS2IiLCJnZXRQYXRoIiwiTWIiLCJnZXRDb21tYW5kcyIsInZmIiwiX2ZwZ21TdGF0ZSIsIl9wcmVwU3RhdGUiLCJfZXJyb3JTdGF0ZSIsIk5iIiwiT2IiLCJzaWduIiwiUGIiLCJRYiIsIlJiIiwiU2IiLCJUYiIsImF4aXMiLCJzbG9wZSIsIm5vcm1hbFNsb3BlIiwiZnJlZXplIiwiVWIiLCJ4ZiIsInlmIiwiVmIiLCJ4byIsInlvIiwicHJldlBvaW50T25Db250b3VyIiwibmV4dFBvaW50T25Db250b3VyIiwieFRvdWNoZWQiLCJ5VG91Y2hlZCIsInByZXZlbnRFeHRlbnNpb25zIiwiV2IiLCJlbnYiLCJzdGFjayIsInByb2ciLCJ6cDAiLCJ6cDEiLCJ6cDIiLCJycDAiLCJycDEiLCJycDIiLCJmdiIsInB2IiwiZHB2IiwiWGIiLCJ0Wm9uZSIsImdab25lIiwiWWIiLCJpcCIsIlpiIiwiREVCVUciLCIkYiIsIl9iIiwiYWMiLCJ6MiIsInoxIiwiYmMiLCJ4YyIsIkdjIiwiejAiLCJkaXN0YW5jZSIsInpmIiwic2V0UmVsYXRpdmUiLCJ0b3VjaCIsIkhjIiwidG91Y2hlZCIsInByZXZUb3VjaGVkIiwibmV4dFRvdWNoZWQiLCJpbnRlcnBvbGF0ZSIsIkljIiwiSmMiLCJjb250b3VycyIsIktjIiwiTmMiLCJRYyIsImN2dCIsImN2Q3V0SW4iLCJYYyIsIlljIiwibWQiLCJwcGVtIiwiZGVsdGFCYXNlIiwiZGVsdGFTaGlmdCIsInhkIiwiemQiLCJHZCIsIk5kIiwiT2QiLCJQZCIsIm1pbkRpcyIsIlFkIiwiZW1wdHkiLCJmYW1pbHlOYW1lIiwic3R5bGVOYW1lIiwidW5pdHNQZXJFbSIsImFzY2VuZGVyIiwiZGVzY2VuZGVyIiwiZm9udEZhbWlseSIsImVuIiwiZm9udFN1YmZhbWlseSIsImZ1bGxOYW1lIiwicG9zdFNjcmlwdE5hbWUiLCJkZXNpZ25lciIsImRlc2lnbmVyVVJMIiwibWFudWZhY3R1cmVyIiwibWFudWZhY3R1cmVyVVJMIiwibGljZW5zZSIsImxpY2Vuc2VVUkwiLCJkZXNjcmlwdGlvbiIsImNvcHlyaWdodCIsInRyYWRlbWFyayIsImNyZWF0ZWRUaW1lc3RhbXAiLCJvczIiLCJ1c1dlaWdodENsYXNzIiwid2VpZ2h0Q2xhc3MiLCJ1c1dlaWdodENsYXNzZXMiLCJNRURJVU0iLCJ1c1dpZHRoQ2xhc3MiLCJ3aWR0aENsYXNzIiwidXNXaWR0aENsYXNzZXMiLCJmc1NlbGVjdGlvbiIsImZzU2VsZWN0aW9uVmFsdWVzIiwiUkVHVUxBUiIsIlNlIiwiR2x5cGhTZXQiLCJzdWJzdGl0dXRpb24iLCJfaGludGluZyIsIm91dGxpbmVzRm9ybWF0IiwiUmQiLCJTZCIsIlRkIiwicGFyc2VUYWciLCJwYXJzZUZpeGVkIiwic2tpcCIsIlVkIiwiY29vcmRpbmF0ZXMiLCJWZCIsImNlIiwicmVhZEZpbGUiLCJtZXNzYWdlIiwiZWUiLCJnZXRUYWciLCJnZXRVTG9uZyIsImNoZWNrc3VtIiwiY29tcHJlc3Npb24iLCJnZSIsImNvbXByZXNzZWRMZW5ndGgiLCJ3ZSIsImhlIiwiZ2V0VVNob3J0IiwiZmUiLCJNZSIsInBhcnNlIiwicGFyc2VTaG9ydExpc3QiLCJmcGdtIiwicGFyc2VCeXRlTGlzdCIsImhlYWQiLCJXZSIsImluZGV4VG9Mb2NGb3JtYXQiLCJoaGVhIiwiWGUiLCJudW1iZXJPZkhNZXRyaWNzIiwiWmUiLCJtYXhwIiwiJGUiLCJudW1HbHlwaHMiLCJqZiIsInBvc3QiLCJrZiIsImdseXBoTmFtZXMiLCJwcmVwIiwiZ2YiLCJIZiIsIlZlIiwiWWUiLCJnbHlwaEluZGV4TWFwIiwiYWRkVW5pY29kZSIsImNmZkVuY29kaW5nIiwiZ2x5cGhJbmRleFRvTmFtZSIsImtlcm5pbmdQYWlycyIsIkdmIiwiZ3BvcyIsIkZmIiwiaW5pdCIsImdzdWIiLCJvZiIsImZ2YXIiLCJDZiIsIm1ldGEiLCJwZiIsIm1ldGFzIiwiY29kZVBvaW50QXQiLCJtZSIsIm5lIiwiaXNFbXB0eSIsImFkZFBvaW50IiwiYWRkWCIsImFkZFkiLCJhZGRCZXppZXIiLCJhZGRRdWFkIiwiYmV6aWVyQ3VydmVUbyIsInF1YWRUbyIsImdldEJvdW5kaW5nQm94IiwiZHJhdyIsImJlZ2luUGF0aCIsImZpbGxTdHlsZSIsInN0cm9rZVN0eWxlIiwibGluZVdpZHRoIiwidG9QYXRoRGF0YSIsInRvU1ZHIiwidG9ET01FbGVtZW50IiwiemUiLCJBZSIsIkJlIiwiQ2UiLCJCWVRFIiwiQ0hBUiIsIkNIQVJBUlJBWSIsIlVTSE9SVCIsIlNIT1JUIiwiVUlOVDI0IiwiVUxPTkciLCJMT05HIiwiRklYRUQiLCJGV09SRCIsIlVGV09SRCIsIkxPTkdEQVRFVElNRSIsIlRBRyIsIkNhcmQ4IiwiQ2FyZDE2IiwiT2ZmU2l6ZSIsIlNJRCIsIk5VTUJFUiIsIk5VTUJFUjE2IiwiTlVNQkVSMzIiLCJSRUFMIiwiTkFNRSIsIlNUUklORyIsIlVURjgiLCJVVEYxNiIsIkRlIiwieC1tYWMtY3JvYXRpYW4iLCJ4LW1hYy1jeXJpbGxpYyIsIngtbWFjLWdhZWxpYyIsIngtbWFjLWdyZWVrIiwieC1tYWMtaWNlbGFuZGljIiwieC1tYWMtaW51aXQiLCJ4LW1hYy1jZSIsIm1hY2ludG9zaCIsIngtbWFjLXJvbWFuaWFuIiwieC1tYWMtdHVya2lzaCIsIk1BQ1NUUklORyIsIkVlIiwiRmUiLCJXZWFrTWFwIiwiR2UiLCJWQVJERUxUQVMiLCJJTkRFWCIsIk9CSkVDVCIsIkRJQ1QiLCJPUEVSQU5EIiwiT1BFUkFUT1IiLCJPUCIsIkhlIiwiQ0hBUlNUUklORyIsIlRBQkxFIiwiUkVDT1JEIiwiTElURVJBTCIsIkNvdmVyYWdlIiwiU2NyaXB0TGlzdCIsIkZlYXR1cmVMaXN0IiwiTG9va3VwTGlzdCIsInVzaG9ydExpc3QiLCJ0YWJsZUxpc3QiLCJyZWNvcmRMaXN0IiwiSmUiLCJieXRlIiwidVNob3J0Iiwic2hvcnQiLCJ1TG9uZyIsImZpeGVkIiwibG9uZ0RhdGVUaW1lIiwiZ2V0SW50OCIsInBhcnNlQ2FyZDgiLCJwYXJzZUNhcmQxNiIsInBhcnNlU0lEIiwicGFyc2VPZmZzZXQxNiIsInBhcnNlVUxvbmciLCJwYXJzZU9mZnNldDMyIiwicGFyc2VTdHJpbmciLCJwYXJzZUxvbmdEYXRlVGltZSIsInBhcnNlVmVyc2lvbiIsInBhcnNlVUxvbmdMaXN0IiwicGFyc2VPZmZzZXQxNkxpc3QiLCJwYXJzZVVTaG9ydExpc3QiLCJwYXJzZUxpc3QiLCJwYXJzZUxpc3QzMiIsInBhcnNlUmVjb3JkTGlzdCIsInBhcnNlUmVjb3JkTGlzdDMyIiwicGFyc2VTdHJ1Y3QiLCJwYXJzZVZhbHVlUmVjb3JkIiwieFBsYWNlbWVudCIsInlQbGFjZW1lbnQiLCJ4QWR2YW5jZSIsInlBZHZhbmNlIiwieFBsYURldmljZSIsInlQbGFEZXZpY2UiLCJ4QWR2RGV2aWNlIiwieUFkdkRldmljZSIsInBhcnNlVmFsdWVSZWNvcmRMaXN0IiwicGFyc2VQb2ludGVyIiwicGFyc2VQb2ludGVyMzIiLCJwYXJzZUxpc3RPZkxpc3RzIiwicGFyc2VDb3ZlcmFnZSIsInJhbmdlcyIsInBhcnNlQ2xhc3NEZWYiLCJzdGFydEdseXBoIiwiY2xhc3NlcyIsImNsYXNzSWQiLCJsaXN0IiwibGlzdDMyIiwicmVjb3JkTGlzdDMyIiwicG9pbnRlciIsInBvaW50ZXIzMiIsIm9mZnNldDE2IiwidVNob3J0TGlzdCIsIm9mZnNldDMyIiwidUxvbmdMaXN0Iiwic3RydWN0IiwiY292ZXJhZ2UiLCJjbGFzc0RlZiIsIktlIiwicmVzZXJ2ZWQiLCJwYXJzZVNjcmlwdExpc3QiLCJwYXJzZUZlYXR1cmVMaXN0IiwicGFyc2VMb29rdXBMaXN0IiwibWFya0ZpbHRlcmluZ1NldCIsInBhcnNlRmVhdHVyZVZhcmlhdGlvbnNMaXN0IiwiY29uZGl0aW9uU2V0T2Zmc2V0IiwiZmVhdHVyZVRhYmxlU3Vic3RpdHV0aW9uT2Zmc2V0IiwiZ2V0Q2FyZDgiLCJnZXRTaG9ydCIsImdldEZpeGVkIiwiYnl0ZXNUb1N0cmluZyIsImxhbmd1YWdlIiwiZ3JvdXBDb3VudCIsInNlZ0NvdW50IiwibWFrZSIsInVuaWNvZGUiLCJ1bmljb2RlcyIsImdseXBoSWQiLCJzZWdDb3VudFgyIiwiY21hcDRMZW5ndGgiLCJjbWFwMTJPZmZzZXQiLCJPZSIsIlBlIiwibmFtZVRvR2x5cGhJbmRleCIsIlJlIiwibGluZSIsInhNaW4iLCJ5TWluIiwieE1heCIsInlNYXgiLCJoaW50aW5nIiwiZ2V0Q29udG91cnMiLCJsZWZ0U2lkZUJlYXJpbmciLCJyaWdodFNpZGVCZWFyaW5nIiwiZHJhd1BvaW50cyIsImFyYyIsImRyYXdNZXRyaWNzIiwiZ2x5cGhMb2FkZXIiLCJ0dGZHbHlwaExvYWRlciIsImNmZkdseXBoTG9hZGVyIiwiZm9ybWF0TWFqb3IiLCJmb3JtYXRNaW5vciIsIm9mZnNldFNpemUiLCJyb3MiLCJmZEFycmF5IiwiZmRTZWxlY3QiLCJ5YSIsInN1YnJzQmlhcyIsImNoYXJTdHJpbmdzIiwibkdseXBocyIsInZhIiwid2EiLCJ3ZWlnaHQiLCJ3ZWlnaHROYW1lIiwiZm9udEJCb3giLCJmb250TWF0cml4IiwiaGVhZGVyIiwibmFtZUluZGV4IiwiQ2EiLCJ0b3BEaWN0SW5kZXgiLCJnbG9iYWxTdWJySW5kZXgiLCJjaGFyc2V0cyIsIklhIiwiY2hhclN0cmluZ3NJbmRleCIsIkthIiwicHJpdmF0ZURpY3QiLCJMYSIsInN0cmluZ0luZGV4Iiwic3RyaW5ncyIsIkdhIiwiZm9udFJldmlzaW9uIiwiY2hlY2tTdW1BZGp1c3RtZW50IiwibWFnaWNOdW1iZXIiLCJmbGFncyIsImNyZWF0ZWQiLCJtb2RpZmllZCIsIm1hY1N0eWxlIiwibG93ZXN0UmVjUFBFTSIsImZvbnREaXJlY3Rpb25IaW50IiwiZ2x5cGhEYXRhRm9ybWF0IiwiZ2V0VGltZSIsImxpbmVHYXAiLCJhZHZhbmNlV2lkdGhNYXgiLCJtaW5MZWZ0U2lkZUJlYXJpbmciLCJtaW5SaWdodFNpZGVCZWFyaW5nIiwieE1heEV4dGVudCIsImNhcmV0U2xvcGVSaXNlIiwiY2FyZXRTbG9wZVJ1biIsImNhcmV0T2Zmc2V0IiwibWV0cmljRGF0YUZvcm1hdCIsIm1heFBvaW50cyIsIm1heENvbnRvdXJzIiwibWF4Q29tcG9zaXRlUG9pbnRzIiwibWF4Q29tcG9zaXRlQ29udG91cnMiLCJtYXhab25lcyIsIm1heFR3aWxpZ2h0UG9pbnRzIiwibWF4U3RvcmFnZSIsIm1heEZ1bmN0aW9uRGVmcyIsIm1heEluc3RydWN0aW9uRGVmcyIsIm1heFN0YWNrRWxlbWVudHMiLCJtYXhTaXplT2ZJbnN0cnVjdGlvbnMiLCJtYXhDb21wb25lbnRFbGVtZW50cyIsIm1heENvbXBvbmVudERlcHRoIiwiX2UiLCIwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5IiwiMjAiLCIyMSIsIjIyIiwiMjMiLCIyNCIsIjI1IiwiMjYiLCIyNyIsIjI4IiwiMjkiLCIzMCIsIjMxIiwiMzIiLCIzMyIsIjM0IiwiMzUiLCIzNiIsIjM3IiwiMzgiLCIzOSIsIjQwIiwiNDEiLCI0MiIsIjQzIiwiNDQiLCI0NSIsIjQ2IiwiNDciLCI0OCIsIjQ5IiwiNTAiLCI1MSIsIjUyIiwiNTMiLCI1NCIsIjU1IiwiNTYiLCI1NyIsIjU4IiwiNTkiLCI2MCIsIjYxIiwiNjIiLCI2MyIsIjY0IiwiNjUiLCI2NiIsIjY3IiwiNjgiLCI2OSIsIjcwIiwiNzEiLCI3MiIsIjczIiwiNzQiLCI3NSIsIjc2IiwiNzciLCI3OCIsIjc5IiwiODAiLCI4MSIsIjgyIiwiODMiLCI4NCIsIjg1IiwiODYiLCI4NyIsIjg4IiwiODkiLCI5MCIsIjkxIiwiOTIiLCI5MyIsIjk0IiwiMTI4IiwiMTI5IiwiMTMwIiwiMTMxIiwiMTMyIiwiMTMzIiwiMTM0IiwiMTM1IiwiMTM2IiwiMTM3IiwiMTM4IiwiMTM5IiwiMTQwIiwiMTQxIiwiMTQyIiwiMTQzIiwiMTQ0IiwiMTQ1IiwiMTQ2IiwiMTQ3IiwiMTQ4IiwiMTQ5IiwiMTUwIiwiMTUxIiwiYmYiLCIxMDc4IiwiMTA1MiIsIjExNTYiLCIxMTE4IiwiNTEyMSIsIjE1MzYxIiwiMzA3MyIsIjIwNDkiLCIxMTI2NSIsIjEzMzEzIiwiMTIyODkiLCI0MDk3IiwiNjE0NSIsIjgxOTMiLCIxNjM4NSIsIjEwMjUiLCIxMDI0MSIsIjcxNjkiLCIxNDMzNyIsIjkyMTciLCIxMDY3IiwiMTEwMSIsIjIwOTIiLCIxMDY4IiwiMTEzMyIsIjEwNjkiLCIxMDU5IiwiMjExNyIsIjEwOTMiLCI4MjE4IiwiNTE0NiIsIjExNTAiLCIxMDI2IiwiMTAyNyIsIjMwNzYiLCI1MTI0IiwiMjA1MiIsIjQxMDAiLCIxMDI4IiwiMTE1NSIsIjEwNTAiLCI0MTIyIiwiMTAyOSIsIjEwMzAiLCIxMTY0IiwiMTEyNSIsIjIwNjciLCIxMDQzIiwiMzA4MSIsIjEwMjQ5IiwiNDEwNSIsIjkyMjUiLCIxNjM5MyIsIjYxNTMiLCI4MjAxIiwiMTc0MTciLCI1MTI5IiwiMTMzMjEiLCIxODQ0MSIsIjcxNzciLCIxMTI3MyIsIjIwNTciLCIxMDMzIiwiMTIyOTciLCIxMDYxIiwiMTA4MCIsIjExMjQiLCIxMDM1IiwiMjA2MCIsIjMwODQiLCIxMDM2IiwiNTEzMiIsIjYxNTYiLCI0MTA4IiwiMTEyMiIsIjExMTAiLCIxMDc5IiwiMzA3OSIsIjEwMzEiLCI1MTI3IiwiNDEwMyIsIjIwNTUiLCIxMDMyIiwiMTEzNSIsIjEwOTUiLCIxMTI4IiwiMTAzNyIsIjEwODEiLCIxMDM4IiwiMTAzOSIsIjExMzYiLCIxMDU3IiwiMTExNyIsIjIxNDEiLCIyMTA4IiwiMTA3NiIsIjEwNzciLCIxMDQwIiwiMjA2NCIsIjEwNDEiLCIxMDk5IiwiMTA4NyIsIjExMDciLCIxMTU4IiwiMTE1OSIsIjEwODkiLCIxMTExIiwiMTA0MiIsIjEwODgiLCIxMTA4IiwiMTA2MiIsIjEwNjMiLCIyMDk0IiwiMTEzNCIsIjEwNzEiLCIyMTEwIiwiMTA4NiIsIjExMDAiLCIxMDgyIiwiMTE1MyIsIjExNDYiLCIxMTAyIiwiMTE0OCIsIjExMDQiLCIyMTI4IiwiMTEyMSIsIjEwNDQiLCIyMDY4IiwiMTE1NCIsIjEwOTYiLCIxMTIzIiwiMTA0NSIsIjEwNDYiLCIyMDcwIiwiMTA5NCIsIjExMzEiLCIyMTU1IiwiMzE3OSIsIjEwNDgiLCIxMDQ3IiwiMTA0OSIsIjkyNzUiLCI0MTU1IiwiNTE3OSIsIjMxMzEiLCIxMDgzIiwiMjEwNyIsIjgyNTEiLCI2MjAzIiwiNzIyNyIsIjExMDMiLCI3MTk0IiwiMzA5OCIsIjYxNzAiLCIyMDc0IiwiMTEzMiIsIjEwNzQiLCIxMTE1IiwiMTA1MSIsIjEwNjAiLCIxMTI3NCIsIjE2Mzk0IiwiMTMzMjIiLCI5MjI2IiwiNTEzMCIsIjcxNzgiLCIxMjI5OCIsIjE3NDE4IiwiNDEwNiIsIjE4NDQyIiwiMjA1OCIsIjE5NDY2IiwiNjE1NCIsIjE1MzcwIiwiMTAyNTAiLCIyMDQ5MCIsIjMwODIiLCIxMDM0IiwiMjE1MTQiLCIxNDM0NiIsIjgyMDIiLCIyMDc3IiwiMTA1MyIsIjExMTQiLCIxMDY0IiwiMjE0MyIsIjEwOTciLCIxMDkyIiwiMTA5OCIsIjEwNTQiLCIxMTA1IiwiMTA1NSIsIjEwOTAiLCIxMTUyIiwiMTA1OCIsIjEwNzAiLCIxMDU2IiwiMjExNSIsIjEwOTEiLCIxMDY2IiwiMTEwNiIsIjExNjAiLCIxMTU3IiwiMTE0NCIsIjExMzAiLCJwbGF0Zm9ybUlEIiwiZW5jb2RpbmdJRCIsImxhbmd1YWdlSUQiLCJuYW1lSUQiLCJoZiIsImJlZ2luIiwieEF2Z0NoYXJXaWR0aCIsImZzVHlwZSIsInlTdWJzY3JpcHRYU2l6ZSIsInlTdWJzY3JpcHRZU2l6ZSIsInlTdWJzY3JpcHRYT2Zmc2V0IiwieVN1YnNjcmlwdFlPZmZzZXQiLCJ5U3VwZXJzY3JpcHRYU2l6ZSIsInlTdXBlcnNjcmlwdFlTaXplIiwieVN1cGVyc2NyaXB0WE9mZnNldCIsInlTdXBlcnNjcmlwdFlPZmZzZXQiLCJ5U3RyaWtlb3V0U2l6ZSIsInlTdHJpa2VvdXRQb3NpdGlvbiIsInNGYW1pbHlDbGFzcyIsInBhbm9zZSIsInVsVW5pY29kZVJhbmdlMSIsInVsVW5pY29kZVJhbmdlMiIsInVsVW5pY29kZVJhbmdlMyIsInVsVW5pY29kZVJhbmdlNCIsImFjaFZlbmRJRCIsInVzRmlyc3RDaGFySW5kZXgiLCJ1c0xhc3RDaGFySW5kZXgiLCJzVHlwb0FzY2VuZGVyIiwic1R5cG9EZXNjZW5kZXIiLCJzVHlwb0xpbmVHYXAiLCJ1c1dpbkFzY2VudCIsInVzV2luRGVzY2VudCIsInVsQ29kZVBhZ2VSYW5nZTEiLCJ1bENvZGVQYWdlUmFuZ2UyIiwic3hIZWlnaHQiLCJzQ2FwSGVpZ2h0IiwidXNEZWZhdWx0Q2hhciIsInVzQnJlYWtDaGFyIiwidXNNYXhDb250ZW50IiwidW5pY29kZVJhbmdlcyIsImdldFVuaWNvZGVSYW5nZSIsIml0YWxpY0FuZ2xlIiwidW5kZXJsaW5lUG9zaXRpb24iLCJ1bmRlcmxpbmVUaGlja25lc3MiLCJpc0ZpeGVkUGl0Y2giLCJtaW5NZW1UeXBlNDIiLCJtYXhNZW1UeXBlNDIiLCJtaW5NZW1UeXBlMSIsIm1heE1lbVR5cGUxIiwibGYiLCJkZWx0YUdseXBoSWQiLCJzdWJzdGl0dXRlIiwic2VxdWVuY2VzIiwiYWx0ZXJuYXRlU2V0cyIsImxpZ2F0dXJlU2V0cyIsImxpZ0dseXBoIiwibWYiLCJzZXF1ZW5jZUluZGV4IiwibG9va3VwTGlzdEluZGV4IiwicnVsZVNldHMiLCJsb29rdXBSZWNvcmRzIiwiY2xhc3NTZXRzIiwiY292ZXJhZ2VzIiwiY2hhaW5SdWxlU2V0cyIsImJhY2t0cmFjayIsImxvb2thaGVhZCIsImJhY2t0cmFja0NsYXNzRGVmIiwiaW5wdXRDbGFzc0RlZiIsImxvb2thaGVhZENsYXNzRGVmIiwiY2hhaW5DbGFzc1NldCIsImJhY2t0cmFja0NvdmVyYWdlIiwiaW5wdXRDb3ZlcmFnZSIsImxvb2thaGVhZENvdmVyYWdlIiwic3Vic3RpdHV0ZXMiLCJuZiIsInNjcmlwdHMiLCJmZWF0dXJlcyIsImxvb2t1cHMiLCJ2YXJpYXRpb25zIiwicWYiLCJmb250VG9UYWJsZSIsImFkdmFuY2VXaWR0aEF2ZyIsInJiIiwibWF4TGVmdFNpZGVCZWFyaW5nIiwiaGFzQ2hhciIsImdldEVuZ2xpc2hOYW1lIiwidW5pcXVlSUQiLCJwcmVmZXJyZWRGYW1pbHkiLCJwcmVmZXJyZWRTdWJmYW1pbHkiLCJjb21wdXRlQ2hlY2tTdW0iLCJzZWFyY2hUYWciLCJiaW5TZWFyY2giLCJnZXRUYWJsZSIsImNyZWF0ZURlZmF1bHRUYWJsZSIsImdldFNjcmlwdE5hbWVzIiwiZ2V0RGVmYXVsdFNjcmlwdE5hbWUiLCJnZXRTY3JpcHRUYWJsZSIsImdldExhbmdTeXNUYWJsZSIsImdldEZlYXR1cmVUYWJsZSIsImdldExvb2t1cFRhYmxlcyIsImdldEdseXBoQ2xhc3MiLCJnZXRDb3ZlcmFnZUluZGV4IiwiZXhwYW5kQ292ZXJhZ2UiLCJkZWZhdWx0S2VybmluZ1RhYmxlcyIsImdldEtlcm5pbmdUYWJsZXMiLCJnZXRLZXJuaW5nVmFsdWUiLCJwb3NGb3JtYXQiLCJwYWlyU2V0cyIsInNlY29uZEdseXBoIiwidmFsdWUxIiwiY2xhc3NEZWYxIiwiY2xhc3NEZWYyIiwiY2xhc3NSZWNvcmRzIiwiZ2V0U2luZ2xlIiwic3ViIiwiYnkiLCJnZXRBbHRlcm5hdGVzIiwiZ2V0TGlnYXR1cmVzIiwiYWRkU2luZ2xlIiwiYWRkQWx0ZXJuYXRlIiwiYWRkTGlnYXR1cmUiLCJnZXRGZWF0dXJlIiwicmYiLCJzZiIsInRmIiwidWYiLCJ3ZiIsInNyUGVyaW9kIiwic3JQaGFzZSIsInNyVGhyZXNob2xkIiwidHJ1bmMiLCJORUdBVElWRV9JTkZJTklUWSIsInVudG91Y2giLCJQT1NJVElWRV9JTkZJTklUWSIsIkFmIiwiYXV0b0ZsaXAiLCJmdW5jcyIsImluaGliaXRHcmlkRml0Iiwic3RvcmUiLCJpZ25vcmVDdnQiLCJCZiIsImNoYXJUb0dseXBoIiwic3RyaW5nVG9HbHlwaHMiLCJkZWZhdWx0UmVuZGVyT3B0aW9ucyIsImxpZ2EiLCJybGlnIiwibmFtZVRvR2x5cGgiLCJrZXJuaW5nIiwiZm9yRWFjaEdseXBoIiwibGV0dGVyU3BhY2luZyIsInRyYWNraW5nIiwiZ2V0UGF0aHMiLCJnZXRBZHZhbmNlV2lkdGgiLCJ2YWxpZGF0ZSIsInRvVGFibGVzIiwidG9CdWZmZXIiLCJyZXF1ZXN0RmlsZVN5c3RlbSIsIndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtIiwiVEVNUE9SQVJZIiwicm9vdCIsImdldEZpbGUiLCJjcmVhdGVXcml0ZXIiLCJ0b1VSTCIsIndyaXRlRmlsZVN5bmMiLCJJVEFMSUMiLCJVTkRFUlNDT1JFIiwiTkVHQVRJVkUiLCJPVVRMSU5FRCIsIlNUUklLRU9VVCIsIkJPTEQiLCJVU0VSX1RZUE9fTUVUUklDUyIsIldXUyIsIk9CTElRVUUiLCJVTFRSQV9DT05ERU5TRUQiLCJFWFRSQV9DT05ERU5TRUQiLCJDT05ERU5TRUQiLCJTRU1JX0NPTkRFTlNFRCIsIlNFTUlfRVhQQU5ERUQiLCJFWFBBTkRFRCIsIkVYVFJBX0VYUEFOREVEIiwiVUxUUkFfRVhQQU5ERUQiLCJUSElOIiwiRVhUUkFfTElHSFQiLCJMSUdIVCIsIk5PUk1BTCIsIlNFTUlfQk9MRCIsIkVYVFJBX0JPTEQiLCJCTEFDSyIsImF4ZXMiLCJpbnN0YW5jZXMiLCJvZmZzZXRUb0RhdGEiLCJEZiIsInZhbHVlRm9ybWF0MSIsInZhbHVlRm9ybWF0MiIsInZhbHVlMiIsImNsYXNzMUNvdW50IiwiY2xhc3MyQ291bnQiLCJFZiIsIiRkIiwiX2QiLCJGb250IiwiR2x5cGgiLCJQYXRoIiwiQm91bmRpbmdCb3giLCJfcGFyc2UiLCJzdGF0dXNUZXh0IiwibG9hZFN5bmMiLCJyZWFkRmlsZVN5bmMiLCJmcyIsInJ1biIsImZ1biIsInRpdGxlIiwiYnJvd3NlciIsImFyZ3YiLCJ2ZXJzaW9ucyIsImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwibGlzdGVuZXJzIiwiYmluZGluZyIsImN3ZCIsImNoZGlyIiwidW1hc2siLCJpdGVyYWJsZSIsImFwcGVuZCIsImdldE93blByb3BlcnR5TmFtZXMiLCJib2R5VXNlZCIsInJlYWRBc0FycmF5QnVmZmVyIiwiX2luaXRCb2R5IiwiX2JvZHlJbml0IiwiX2JvZHlUZXh0IiwiaXNQcm90b3R5cGVPZiIsIl9ib2R5QmxvYiIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJfYm9keUZvcm1EYXRhIiwic2VhcmNoUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXJyYXlCdWZmZXIiLCJfYm9keUFycmF5QnVmZmVyIiwiaGVhZGVycyIsInRleHQiLCJyZWFkQXNUZXh0IiwiYm9keSIsImNyZWRlbnRpYWxzIiwidG9VcHBlckNhc2UiLCJyZWZlcnJlciIsImRlY29kZVVSSUNvbXBvbmVudCIsImZldGNoIiwiaXNWaWV3IiwiZGVsZXRlIiwiZW50cmllcyIsImNsb25lIiwicmVkaXJlY3QiLCJIZWFkZXJzIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VVUkwiLCJyZXNwb25zZVRleHQiLCJvbnRpbWVvdXQiLCJ3aXRoQ3JlZGVudGlhbHMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiLi9jb2xvci9jb2xvcl9jb252ZXJzaW9uIiwiLi9jb2xvci9jcmVhdGluZ19yZWFkaW5nIiwiLi9jb2xvci9wNS5Db2xvciIsIi4vY29sb3Ivc2V0dGluZyIsIi4vY29yZS9jb25zdGFudHMiLCIuL2NvcmUvZW52aXJvbm1lbnQiLCIuL2NvcmUvZXJyb3JfaGVscGVycyIsIi4vY29yZS9oZWxwZXJzIiwiLi9jb3JlL2luaXQiLCIuL2NvcmUvbGVnYWN5IiwiLi9jb3JlL21haW4iLCIuL2NvcmUvcDUuRWxlbWVudCIsIi4vY29yZS9wNS5HcmFwaGljcyIsIi4vY29yZS9wNS5SZW5kZXJlciIsIi4vY29yZS9wNS5SZW5kZXJlcjJEIiwiLi9jb3JlL3JlbmRlcmluZyIsIi4vY29yZS9zaGFwZS8yZF9wcmltaXRpdmVzIiwiLi9jb3JlL3NoYXBlL2F0dHJpYnV0ZXMiLCIuL2NvcmUvc2hhcGUvY3VydmVzIiwiLi9jb3JlL3NoYXBlL3ZlcnRleCIsIi4vY29yZS9zaGltIiwiLi9jb3JlL3N0cnVjdHVyZSIsIi4vY29yZS90cmFuc2Zvcm0iLCIuL2RhdGEvcDUuVHlwZWREaWN0IiwiLi9ldmVudHMvYWNjZWxlcmF0aW9uIiwiLi9ldmVudHMva2V5Ym9hcmQiLCIuL2V2ZW50cy9tb3VzZSIsIi4vZXZlbnRzL3RvdWNoIiwiLi9pbWFnZS9maWx0ZXJzIiwiLi9pbWFnZS9pbWFnZSIsIi4vaW1hZ2UvbG9hZGluZ19kaXNwbGF5aW5nIiwiLi9pbWFnZS9wNS5JbWFnZSIsIi4vaW1hZ2UvcGl4ZWxzIiwiLi9pby9maWxlcyIsIi4vaW8vcDUuVGFibGUiLCIuL2lvL3A1LlRhYmxlUm93IiwiLi9pby9wNS5YTUwiLCIuL21hdGgvY2FsY3VsYXRpb24iLCIuL21hdGgvbWF0aCIsIi4vbWF0aC9ub2lzZSIsIi4vbWF0aC9wNS5WZWN0b3IiLCIuL21hdGgvcmFuZG9tIiwiLi9tYXRoL3RyaWdvbm9tZXRyeSIsIi4vdHlwb2dyYXBoeS9hdHRyaWJ1dGVzIiwiLi90eXBvZ3JhcGh5L2xvYWRpbmdfZGlzcGxheWluZyIsIi4vdHlwb2dyYXBoeS9wNS5Gb250IiwiLi91dGlsaXRpZXMvYXJyYXlfZnVuY3Rpb25zIiwiLi91dGlsaXRpZXMvY29udmVyc2lvbiIsIi4vdXRpbGl0aWVzL3N0cmluZ19mdW5jdGlvbnMiLCIuL3V0aWxpdGllcy90aW1lX2RhdGUiLCIuL3dlYmdsLzNkX3ByaW1pdGl2ZXMiLCIuL3dlYmdsL2ludGVyYWN0aW9uIiwiLi93ZWJnbC9saWdodCIsIi4vd2ViZ2wvbG9hZGluZyIsIi4vd2ViZ2wvbWF0ZXJpYWwiLCIuL3dlYmdsL3A1LkNhbWVyYSIsIi4vd2ViZ2wvcDUuR2VvbWV0cnkiLCIuL3dlYmdsL3A1Lk1hdHJpeCIsIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTCIsIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5JbW1lZGlhdGUiLCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuUmV0YWluZWQiLCIuL3dlYmdsL3A1LlNoYWRlciIsIi4vd2ViZ2wvcDUuVGV4dHVyZSIsIi4vd2ViZ2wvdGV4dCIsIkNvbG9yQ29udmVyc2lvbiIsIl9oc2JhVG9IU0xBIiwiX2hzYmFUb1JHQkEiLCJfaHNsYVRvSFNCQSIsIl9oc2xhVG9SR0JBIiwiX3JnYmFUb0hTQkEiLCJfcmdiYVRvSFNMQSIsIi4uL2NvcmUvbWFpbiIsImFscGhhIiwiX3ZhbGlkYXRlUGFyYW1ldGVycyIsImNvbG9yIiwiX2dldEFscGhhIiwiYmx1ZSIsIl9nZXRCbHVlIiwiYnJpZ2h0bmVzcyIsIl9nZXRCcmlnaHRuZXNzIiwiQ29sb3IiLCJncmVlbiIsIl9nZXRHcmVlbiIsImh1ZSIsIl9nZXRIdWUiLCJsZXJwQ29sb3IiLCJfY29sb3JNb2RlIiwiX2NvbG9yTWF4ZXMiLCJSR0IiLCJsZXZlbHMiLCJIU0IiLCJoc2JhIiwiSFNMIiwiX2dldExpZ2h0bmVzcyIsImhzbGEiLCJsZXJwIiwibGlnaHRuZXNzIiwicmVkIiwiX2dldFJlZCIsInNhdHVyYXRpb24iLCJfZ2V0U2F0dXJhdGlvbiIsIi4uL2NvcmUvY29uc3RhbnRzIiwiLi4vY29yZS9lcnJvcl9oZWxwZXJzIiwiLi9wNS5Db2xvciIsIl9zdG9yZU1vZGVBbmRNYXhlcyIsIl9hcnJheSIsIl9wYXJzZUlucHV0cyIsIl9jYWxjdWxhdGVMZXZlbHMiLCJ0b1ByZWNpc2lvbiIsIm1heGVzIiwic2V0UmVkIiwic2V0R3JlZW4iLCJzZXRCbHVlIiwic2V0QWxwaGEiLCJfZ2V0TW9kZSIsIl9nZXRNYXhlcyIsImFsaWNlYmx1ZSIsImFudGlxdWV3aGl0ZSIsImFxdWEiLCJhcXVhbWFyaW5lIiwiYXp1cmUiLCJiZWlnZSIsImJpc3F1ZSIsImJsYWNrIiwiYmxhbmNoZWRhbG1vbmQiLCJibHVldmlvbGV0IiwiYnVybHl3b29kIiwiY2FkZXRibHVlIiwiY2hhcnRyZXVzZSIsImNob2NvbGF0ZSIsImNvcmFsIiwiY29ybmZsb3dlcmJsdWUiLCJjb3Juc2lsayIsImNyaW1zb24iLCJjeWFuIiwiZGFya2JsdWUiLCJkYXJrY3lhbiIsImRhcmtnb2xkZW5yb2QiLCJkYXJrZ3JheSIsImRhcmtncmVlbiIsImRhcmtncmV5IiwiZGFya2toYWtpIiwiZGFya21hZ2VudGEiLCJkYXJrb2xpdmVncmVlbiIsImRhcmtvcmFuZ2UiLCJkYXJrb3JjaGlkIiwiZGFya3JlZCIsImRhcmtzYWxtb24iLCJkYXJrc2VhZ3JlZW4iLCJkYXJrc2xhdGVibHVlIiwiZGFya3NsYXRlZ3JheSIsImRhcmtzbGF0ZWdyZXkiLCJkYXJrdHVycXVvaXNlIiwiZGFya3Zpb2xldCIsImRlZXBwaW5rIiwiZGVlcHNreWJsdWUiLCJkaW1ncmF5IiwiZGltZ3JleSIsImRvZGdlcmJsdWUiLCJmaXJlYnJpY2siLCJmbG9yYWx3aGl0ZSIsImZvcmVzdGdyZWVuIiwiZnVjaHNpYSIsImdhaW5zYm9ybyIsImdob3N0d2hpdGUiLCJnb2xkIiwiZ29sZGVucm9kIiwiZ3JheSIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBsdW0iLCJwb3dkZXJibHVlIiwicHVycGxlIiwicm9zeWJyb3duIiwicm95YWxibHVlIiwic2FkZGxlYnJvd24iLCJzYWxtb24iLCJzYW5keWJyb3duIiwic2VhZ3JlZW4iLCJzZWFzaGVsbCIsInNpZW5uYSIsInNpbHZlciIsInNreWJsdWUiLCJzbGF0ZWJsdWUiLCJzbGF0ZWdyYXkiLCJzbGF0ZWdyZXkiLCJzbm93Iiwic3ByaW5nZ3JlZW4iLCJzdGVlbGJsdWUiLCJ0YW4iLCJ0ZWFsIiwidGhpc3RsZSIsInRvbWF0byIsInR1cnF1b2lzZSIsInZpb2xldCIsIndoZWF0Iiwid2hpdGVzbW9rZSIsInllbGxvdyIsInllbGxvd2dyZWVuIiwiUmVnRXhwIiwiSEVYMyIsIkhFWDQiLCJIRVg2IiwiSEVYOCIsIlJHQl9QRVJDRU5UIiwiUkdCQSIsIlJHQkFfUEVSQ0VOVCIsIkhTTEEiLCJIU0JBIiwiLi9jb2xvcl9jb252ZXJzaW9uIiwiYmFja2dyb3VuZCIsIkltYWdlIiwiaW1hZ2UiLCJfcmVuZGVyZXIiLCJjb2xvck1vZGUiLCJfc2V0UHJvcGVydHkiLCJub0ZpbGwiLCJub1N0cm9rZSIsIlAyRCIsIldFQkdMIiwiQVJST1ciLCJDUk9TUyIsIkhBTkQiLCJNT1ZFIiwiVEVYVCIsIldBSVQiLCJIQUxGX1BJIiwiUVVBUlRFUl9QSSIsIlRBVSIsIlRXT19QSSIsIkRFR1JFRVMiLCJSQURJQU5TIiwiREVHX1RPX1JBRCIsIlJBRF9UT19ERUciLCJDT1JORVIiLCJDT1JORVJTIiwiUkFESVVTIiwiUklHSFQiLCJMRUZUIiwiQ0VOVEVSIiwiVE9QIiwiQk9UVE9NIiwiQkFTRUxJTkUiLCJQT0lOVFMiLCJMSU5FUyIsIkxJTkVfU1RSSVAiLCJMSU5FX0xPT1AiLCJUUklBTkdMRVMiLCJUUklBTkdMRV9GQU4iLCJUUklBTkdMRV9TVFJJUCIsIlFVQURTIiwiUVVBRF9TVFJJUCIsIkNMT1NFIiwiT1BFTiIsIkNIT1JEIiwiUElFIiwiUFJPSkVDVCIsIlNRVUFSRSIsIlJPVU5EIiwiQkVWRUwiLCJNSVRFUiIsIkFVVE8iLCJBTFQiLCJCQUNLU1BBQ0UiLCJDT05UUk9MIiwiREVMRVRFIiwiRE9XTl9BUlJPVyIsIkVOVEVSIiwiRVNDQVBFIiwiTEVGVF9BUlJPVyIsIk9QVElPTiIsIlJFVFVSTiIsIlJJR0hUX0FSUk9XIiwiU0hJRlQiLCJUQUIiLCJVUF9BUlJPVyIsIkJMRU5EIiwiQUREIiwiREFSS0VTVCIsIkxJR0hURVNUIiwiRElGRkVSRU5DRSIsIkVYQ0xVU0lPTiIsIk1VTFRJUExZIiwiU0NSRUVOIiwiUkVQTEFDRSIsIk9WRVJMQVkiLCJIQVJEX0xJR0hUIiwiU09GVF9MSUdIVCIsIkRPREdFIiwiQlVSTiIsIlRIUkVTSE9MRCIsIkdSQVkiLCJPUEFRVUUiLCJJTlZFUlQiLCJQT1NURVJJWkUiLCJESUxBVEUiLCJFUk9ERSIsIkJMVVIiLCJfREVGQVVMVF9URVhUX0ZJTEwiLCJfREVGQVVMVF9MRUFETVVMVCIsIl9DVFhfTUlERExFIiwiTElORUFSIiwiUVVBRFJBVElDIiwiQkVaSUVSIiwiQ1VSVkUiLCJTVFJPS0UiLCJGSUxMIiwiVEVYVFVSRSIsIklNTUVESUFURSIsIk5FQVJFU1QiLCJSRVBFQVQiLCJDTEFNUCIsIk1JUlJPUiIsIkxBTkRTQ0FQRSIsIlBPUlRSQUlUIiwiX0RFRkFVTFRfU1RST0tFIiwiX0RFRkFVTFRfRklMTCIsIkdSSUQiLCJBWEVTIiwiaW5uZXJXaWR0aCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiaW5uZXJIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJfZnJhbWVSYXRlIiwiX2xhc3RGcmFtZVRpbWUiLCJwZXJmb3JtYW5jZSIsIl90YXJnZXRGcmFtZVJhdGUiLCJwcmludCIsImZyYW1lQ291bnQiLCJmb2N1c2VkIiwiaGFzRm9jdXMiLCJjdXJzb3IiLCJfY3VyRWxlbWVudCIsImVsdCIsInN0eWxlIiwiZnJhbWVSYXRlIiwiX3J1bkZyYW1lcyIsImdldEZyYW1lUmF0ZSIsInNldEZyYW1lUmF0ZSIsIm5vQ3Vyc29yIiwiZGlzcGxheVdpZHRoIiwic2NyZWVuIiwiZGlzcGxheUhlaWdodCIsIndpbmRvd1dpZHRoIiwid2luZG93SGVpZ2h0IiwiX29ucmVzaXplIiwiX2lzR2xvYmFsIiwid2luZG93UmVzaXplZCIsInByZXZlbnREZWZhdWx0IiwiZnVsbHNjcmVlbiIsImZ1bGxzY3JlZW5FbGVtZW50Iiwid2Via2l0RnVsbHNjcmVlbkVsZW1lbnQiLCJtb3pGdWxsU2NyZWVuRWxlbWVudCIsIm1zRnVsbHNjcmVlbkVsZW1lbnQiLCJmdWxsc2NyZWVuRW5hYmxlZCIsIndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkIiwibW96RnVsbFNjcmVlbkVuYWJsZWQiLCJtc0Z1bGxzY3JlZW5FbmFibGVkIiwicmVxdWVzdEZ1bGxzY3JlZW4iLCJtb3pSZXF1ZXN0RnVsbFNjcmVlbiIsIndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuIiwibXNSZXF1ZXN0RnVsbHNjcmVlbiIsImV4aXRGdWxsc2NyZWVuIiwibW96Q2FuY2VsRnVsbFNjcmVlbiIsIndlYmtpdEV4aXRGdWxsc2NyZWVuIiwibXNFeGl0RnVsbHNjcmVlbiIsInBpeGVsRGVuc2l0eSIsIl9waXhlbERlbnNpdHkiLCJfcGl4ZWxzRGlydHkiLCJyZXNpemVDYW52YXMiLCJkaXNwbGF5RGVuc2l0eSIsImRldmljZVBpeGVsUmF0aW8iLCJnZXRVUkwiLCJnZXRVUkxQYXRoIiwicGF0aG5hbWUiLCJnZXRVUkxQYXJhbXMiLCJsYXN0SW5kZXgiLCIuL2NvbnN0YW50cyIsIi4vbWFpbiIsIl9mcmllbmRseUZpbGVMb2FkRXJyb3IiLCJzb21lIiwiX2hlbHBGb3JNaXN1c2VkQXRUb3BMZXZlbENvZGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiLi4vLi4vZG9jcy9yZWZlcmVuY2UvZGF0YS5qc29uIiwibW9kZUFkanVzdCIsIm1vY2hhIiwic2V0dXAiLCJpbnN0YW5jZSIsImV4aXQiLCJwdXNoU3R5bGUiLCJwb3BTdHlsZSIsIl9zZXR1cERvbmUiLCJfdXNlck5vZGUiLCJfZWxlbWVudHMiLCJfcmVxdWVzdEFuaW1JZCIsIl9wcmVsb2FkQ291bnQiLCJfaW5pdGlhbGl6ZUluc3RhbmNlVmFyaWFibGVzIiwiX2RlZmF1bHRDYW52YXNTaXplIiwibW91c2Vtb3ZlIiwibW91c2Vkb3duIiwibW91c2V1cCIsImRyYWdlbmQiLCJkcmFnb3ZlciIsImNsaWNrIiwiZGJsY2xpY2siLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImtleWRvd24iLCJrZXl1cCIsImtleXByZXNzIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIiwicmVzaXplIiwiYmx1ciIsIndoZWVsIiwiX2xvYWRpbmdTY3JlZW5JZCIsIl9yZWdpc3RlcmVkTWV0aG9kcyIsIkRldmljZU9yaWVudGF0aW9uRXZlbnQiLCJkZXZpY2VvcmllbnRhdGlvbiIsIkRldmljZU1vdGlvbkV2ZW50IiwiX2lzTm9kZVdlYmtpdCIsImRldmljZW1vdGlvbiIsInByZWxvYWQiLCJpbm5lckhUTUwiLCJfcHJlbG9hZE1ldGhvZHMiLCJfd3JhcFByZWxvYWQiLCJfcmVnaXN0ZXJlZFByZWxvYWRNZXRob2RzIiwiX3J1bklmUHJlbG9hZHNBcmVEb25lIiwiX3NldHVwIiwiX2RyYXciLCJwYXJlbnROb2RlIiwiX2RlY3JlbWVudFByZWxvYWQiLCJfaW5jcmVtZW50UHJlbG9hZCIsImNyZWF0ZUNhbnZhcyIsImRhdGFzZXQiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5IiwicmVkcmF3IiwiX3VwZGF0ZU1vdXNlQ29vcmRzIiwiY2xlYXJJbnRlcnZhbCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiX2NyZWF0ZUZyaWVuZGx5R2xvYmFsRnVuY3Rpb25CaW5kZXIiLCJwYXNzaXZlIiwicmVnaXN0ZXJNZXRob2QiLCJfc3R5bGVzIiwiX2JlemllckRldGFpbCIsIl9jdXJ2ZURldGFpbCIsInJnYiIsImhzYiIsImhzbCIsImRpc2FibGVGcmllbmRseUVycm9ycyIsImxvYWRKU09OIiwibG9hZEltYWdlIiwibG9hZFN0cmluZ3MiLCJsb2FkWE1MIiwibG9hZEJ5dGVzIiwibG9hZFRhYmxlIiwibG9hZEZvbnQiLCJsb2FkTW9kZWwiLCJsb2FkU2hhZGVyIiwicHJlIiwicmVnaXN0ZXJQcmVsb2FkTWV0aG9kIiwiZ2xvYmFsT2JqZWN0IiwiLi9zaGltIiwiRWxlbWVudCIsIl9wSW5zdCIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiY2xhc3MiLCJtb3VzZVByZXNzZWQiLCJfc2V0TW91c2VCdXR0b24iLCJkb3VibGVDbGlja2VkIiwibW91c2VXaGVlbCIsIm1vdXNlUmVsZWFzZWQiLCJtb3VzZUNsaWNrZWQiLCJtb3VzZU1vdmVkIiwibW91c2VPdmVyIiwiY2hhbmdlZCIsIm1vdXNlT3V0IiwidG91Y2hTdGFydGVkIiwidG91Y2hNb3ZlZCIsInRvdWNoRW5kZWQiLCJkcmFnT3ZlciIsImRyYWdMZWF2ZSIsImRyb3AiLCJGaWxlIiwidGFyZ2V0IiwiRmlsZUxpc3QiLCJzdG9wUHJvcGFnYXRpb24iLCJkYXRhVHJhbnNmZXIiLCJmaWxlcyIsIkdyYXBoaWNzIiwiY2FudmFzIiwiUmVuZGVyZXJHTCIsIlJlbmRlcmVyMkQiLCJfYXBwbHlEZWZhdWx0cyIsIm9mZnNldFBhcmVudCIsIm9mZnNldExlZnQiLCJvZmZzZXRUb3AiLCJSZW5kZXJlciIsIl9pc01haW5DYW52YXMiLCJkaXNwbGF5IiwiX3RleHRTaXplIiwiX3RleHRMZWFkaW5nIiwiX3RleHRGb250IiwiX3RleHRTdHlsZSIsIl90ZXh0QXNjZW50IiwiX3RleHREZXNjZW50IiwiX3RleHRBbGlnbiIsIl90ZXh0QmFzZWxpbmUiLCJfcmVjdE1vZGUiLCJfZWxsaXBzZU1vZGUiLCJfY3VydmVUaWdodG5lc3MiLCJfaW1hZ2VNb2RlIiwiX3RpbnQiLCJfZG9TdHJva2UiLCJfZG9GaWxsIiwiX3N0cm9rZVNldCIsIl9maWxsU2V0IiwicHJvcGVydGllcyIsInRleHRMZWFkaW5nIiwidGV4dFNpemUiLCJfYXBwbHlUZXh0UHJvcGVydGllcyIsInRleHRTdHlsZSIsInRleHRBc2NlbnQiLCJfdXBkYXRlVGV4dE1ldHJpY3MiLCJ0ZXh0RGVzY2VudCIsInRleHRBbGlnbiIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIk1BWF9WQUxVRSIsInRleHRXaWR0aCIsIl9yZW5kZXJUZXh0IiwiX2lzT3BlblR5cGUiLCJmb250U2l6ZSIsIm92ZXJmbG93IiwidmVydGljYWxBbGlnbiIsImRyYXdpbmdDb250ZXh0IiwiX2NhY2hlZEZpbGxTdHlsZSIsIl9jYWNoZWRTdHJva2VTdHlsZSIsIl9zZXRGaWxsIiwiX3NldFN0cm9rZSIsImxpbmVDYXAiLCJzY2FsZSIsInNhdmUiLCJyZXNldE1hdHJpeCIsIl9nZXRGaWxsIiwiZmlsbFJlY3QiLCJyZXN0b3JlIiwiY2xlYXJSZWN0IiwiTWVkaWFFbGVtZW50IiwibG9hZFBpeGVscyIsIl9nZXRUaW50ZWRJbWFnZUNhbnZhcyIsImRyYXdJbWFnZSIsIl90b1BpeGVscyIsImNyZWF0ZUltYWdlRGF0YSIsInB1dEltYWdlRGF0YSIsImJsZW5kTW9kZSIsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsImJsZW5kIiwiX2NvcHlIZWxwZXIiLCJnZXRJbWFnZURhdGEiLCJwaXhlbHMiLCJzZXRUcmFuc2Zvcm0iLCJpbWFnZURhdGEiLCJ1cGRhdGVQaXhlbHMiLCJfYWN1dGVBcmNUb0JlemllciIsImF5IiwiY3kiLCJlbGxpcHNlIiwiX2dldFN0cm9rZSIsInRyYW5zbGF0ZSIsInF1YWQiLCJyZWN0IiwiYXJjVG8iLCJ0cmlhbmdsZSIsImVuZFNoYXBlIiwiUE9MWUdPTiIsIl9kb0ZpbGxTdHJva2VDbG9zZSIsImlzVmVydCIsIm5vU21vb3RoIiwiaW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwic21vb3RoIiwic3Ryb2tlQ2FwIiwic3Ryb2tlSm9pbiIsImxpbmVKb2luIiwic3Ryb2tlV2VpZ2h0IiwiYmV6aWVyIiwiYmVnaW5TaGFwZSIsInZlcnRleCIsImJlemllclZlcnRleCIsImN1cnZlVmVydGV4IiwiYXBwbHlNYXRyaXgiLCJ0cmFuc2Zvcm0iLCJyb3RhdGUiLCJzaGVhclgiLCJzaGVhclkiLCJWZWN0b3IiLCJ0ZXh0QmFzZWxpbmUiLCJfcmVuZGVyUGF0aCIsInJlbmRlcmVyIiwic3Ryb2tlVGV4dCIsImZpbGxUZXh0IiwiX3RleHRXaWR0aCIsIm1lYXN1cmVUZXh0IiwiLi4vaW1hZ2UvZmlsdGVycyIsIi4vcDUuUmVuZGVyZXIiLCJjbGFzc0xpc3QiLCJfZGVmYXVsdEdyYXBoaWNzQ3JlYXRlZCIsIm5vQ2FudmFzIiwiY3JlYXRlR3JhcGhpY3MiLCIuLi93ZWJnbC9wNS5SZW5kZXJlckdMIiwiLi9wNS5HcmFwaGljcyIsIi4vcDUuUmVuZGVyZXIyRCIsIl90b1JhZGlhbnMiLCJhdGFuIiwiLi4vY29uc3RhbnRzIiwiLi4vZXJyb3JfaGVscGVycyIsIi4uL2hlbHBlcnMiLCIuLi9tYWluIiwiZWxsaXBzZU1vZGUiLCJyZWN0TW9kZSIsImJlemllckRldGFpbCIsImJlemllclBvaW50IiwiYmV6aWVyVGFuZ2VudCIsImN1cnZlRGV0YWlsIiwiY3VydmVUaWdodG5lc3MiLCJjdXJ2ZVBvaW50IiwiY3VydmVUYW5nZW50IiwiYmVnaW5Db250b3VyIiwiaXNQM0QiLCJlbmRDb250b3VyIiwicXVhZHJhdGljVmVydGV4IiwiX2NvbnRvdXJJbml0ZWQiLCJ4MyIsInkzIiwiX2NvbnRvdXJWZXJ0aWNlcyIsIndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm1velJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtc1JlcXVlc3RBbmltYXRpb25GcmFtZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibm9Mb29wIiwicHJvcHMiLCJfdXBkYXRlIiwicG9wTWF0cml4IiwicHJpbnRNYXRyaXgiLCJwdXNoTWF0cml4Iiwicm90YXRlWCIsIl9hc3NlcnQzZCIsInJvdGF0ZVkiLCJyb3RhdGVaIiwiY3JlYXRlU3RyaW5nRGljdCIsIlN0cmluZ0RpY3QiLCJjcmVhdGVOdW1iZXJEaWN0IiwiTnVtYmVyRGljdCIsIlR5cGVkRGljdCIsImhhc0tleSIsIl92YWxpZGF0ZSIsIl9hZGRPYmoiLCJzYXZlVGFibGUiLCJkb3dubG9hZEZpbGUiLCJzYXZlSlNPTiIsImRpdiIsIl92YWx1ZVRlc3QiLCJfa2V5VGVzdCIsIm1pbktleSIsIm1heEtleSIsImRldmljZU9yaWVudGF0aW9uIiwiYWNjZWxlcmF0aW9uWCIsImFjY2VsZXJhdGlvblkiLCJhY2NlbGVyYXRpb25aIiwicEFjY2VsZXJhdGlvblgiLCJwQWNjZWxlcmF0aW9uWSIsInBBY2NlbGVyYXRpb25aIiwiX3VwZGF0ZVBBY2NlbGVyYXRpb25zIiwicm90YXRpb25YIiwicm90YXRpb25ZIiwicm90YXRpb25aIiwicFJvdGF0aW9uWCIsInBSb3RhdGlvblkiLCJwUm90YXRpb25aIiwiX3VwZGF0ZVBSb3RhdGlvbnMiLCJ0dXJuQXhpcyIsInNldE1vdmVUaHJlc2hvbGQiLCJzZXRTaGFrZVRocmVzaG9sZCIsIl9vbmRldmljZW9yaWVudGF0aW9uIiwiYmV0YSIsImdhbW1hIiwiX2hhbmRsZU1vdGlvbiIsIl9vbmRldmljZW1vdGlvbiIsImFjY2VsZXJhdGlvbiIsIm9yaWVudGF0aW9uIiwiZGV2aWNlTW92ZWQiLCJkZXZpY2VUdXJuZWQiLCJkZXZpY2VTaGFrZW4iLCJpc0tleVByZXNzZWQiLCJrZXlJc1ByZXNzZWQiLCJrZXlDb2RlIiwiX29ua2V5ZG93biIsIndoaWNoIiwia2V5UHJlc3NlZCIsImNoYXJDb2RlIiwiX29ua2V5dXAiLCJrZXlSZWxlYXNlZCIsIl9vbmtleXByZXNzIiwiX2xhc3RLZXlDb2RlVHlwZWQiLCJrZXlUeXBlZCIsIl9vbmJsdXIiLCJrZXlJc0Rvd24iLCJfaGFzTW91c2VJbnRlcmFjdGVkIiwibW91c2VYIiwibW91c2VZIiwicG1vdXNlWCIsInBtb3VzZVkiLCJ3aW5Nb3VzZVgiLCJ3aW5Nb3VzZVkiLCJwd2luTW91c2VYIiwicHdpbk1vdXNlWSIsIm1vdXNlQnV0dG9uIiwibW91c2VJc1ByZXNzZWQiLCJfdXBkYXRlTmV4dE1vdXNlQ29vcmRzIiwidG91Y2hlcyIsImNsaWVudFgiLCJjaGFuZ2VkVG91Y2hlcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFdpZHRoIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50WSIsInRvcCIsIndpblgiLCJ3aW5ZIiwiaWRlbnRpZmllciIsIl9tb3VzZVdoZWVsRGVsdGFZIiwiYnV0dG9uIiwiX29ubW91c2Vtb3ZlIiwibW91c2VEcmFnZ2VkIiwiX29ubW91c2Vkb3duIiwiX29ubW91c2V1cCIsIl9vbmRyYWdlbmQiLCJfb25kcmFnb3ZlciIsIl9vbmNsaWNrIiwiX29uZGJsY2xpY2siLCJfcG1vdXNlV2hlZWxEZWx0YVkiLCJfb253aGVlbCIsImRlbHRhWSIsIl91cGRhdGVUb3VjaENvb3JkcyIsIl9vbnRvdWNoc3RhcnQiLCJfb250b3VjaG1vdmUiLCJfb250b3VjaGVuZCIsIkludDMyQXJyYXkiLCJfZ2V0QVJHQiIsIl9zZXRQaXhlbHMiLCJJbWFnZURhdGEiLCJfdG9JbWFnZURhdGEiLCJfY3JlYXRlSW1hZ2VEYXRhIiwiX3RtcENhbnZhcyIsIl90bXBDdHgiLCJvcGFxdWUiLCJpbnZlcnQiLCJwb3N0ZXJpemUiLCJkaWxhdGUiLCJlcm9kZSIsImNyZWF0ZUltYWdlIiwic2F2ZUNhbnZhcyIsIkhUTUxDYW52YXNFbGVtZW50IiwiX2NoZWNrRmlsZUV4dGVuc2lvbiIsInRvQmxvYiIsInNhdmVGcmFtZXMiLCJjb25zdHJhaW4iLCJfbWFrZUZyYW1lIiwic2V0SW50ZXJ2YWwiLCJmaWxlbmFtZSIsImV4dCIsInRvRGF0YVVSTCIsImNyb3NzT3JpZ2luIiwidmlkZW9XaWR0aCIsInZpZGVvSGVpZ2h0IiwidGludCIsIm5vVGludCIsImltYWdlTW9kZSIsIi4uL2NvcmUvaGVscGVycyIsIi4vZmlsdGVycyIsIl9tb2RpZmllZCIsInNldE1vZGlmaWVkIiwibWFzayIsImlzTW9kaWZpZWQiLCIuLi9jb2xvci9wNS5Db2xvciIsImh0dHBEbyIsImxhc3RJbmRleE9mIiwiY3VycmVudFN0YXRlIiwidG9rZW4iLCJlc2NhcGVkIiwiY29sdW1ucyIsIlRhYmxlUm93Iiwib2JqIiwiYWRkUm93IiwiYnl0ZXMiLCJodHRwR2V0IiwiaHR0cFBvc3QiLCJDb250ZW50LVR5cGUiLCJYTUwiLCJjaGlsZE5vZGVzIiwiYWRkQ2hpbGQiLCJzZXROYW1lIiwibm9kZU5hbWUiLCJfc2V0Q29udCIsInRleHRDb250ZW50IiwiX3NldEF0dHJpYnV0ZXMiLCJjaGlsZHJlbiIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsIl9wV3JpdGVycyIsIlByaW50V3JpdGVyIiwibWlsbGlzIiwid3JpdGVGaWxlIiwic2F2ZVN0cmluZ3MiLCJTb3VuZEZpbGUiLCJzYXZlU291bmQiLCJzYXZlSlNPTk9iamVjdCIsInNhdmVKU09OQXJyYXkiLCJyb3dzIiwiZ2V0U3RyaW5nIiwiX2lzU2FmYXJpIiwib25jbGljayIsImFsZXJ0IiwiZXM2LXByb21pc2UiLCJmZXRjaC1qc29ucCIsImZpbGUtc2F2ZXIiLCJ3aGF0d2ctZmV0Y2giLCJyZW1vdmVSb3ciLCJnZXRSb3ciLCJnZXRSb3dzIiwiZmluZFJvdyIsImZpbmRSb3dzIiwibWF0Y2hSb3ciLCJtYXRjaFJvd3MiLCJnZXRDb2x1bW4iLCJjbGVhclJvd3MiLCJhZGRDb2x1bW4iLCJnZXRDb2x1bW5Db3VudCIsImdldFJvd0NvdW50IiwicmVtb3ZlVG9rZW5zIiwicmVtb3ZlQ29sdW1uIiwic2V0TnVtIiwic2V0U3RyaW5nIiwiZ2V0TnVtIiwiZ2V0T2JqZWN0IiwiZ2V0QXJyYXkiLCJhdHRyaWJ1dGVzIiwiZ2V0UGFyZW50IiwiZ2V0TmFtZSIsImhhc0NoaWxkcmVuIiwibGlzdENoaWxkcmVuIiwiZ2V0Q2hpbGRyZW4iLCJnZXRDaGlsZCIsImdldEF0dHJpYnV0ZUNvdW50IiwibGlzdEF0dHJpYnV0ZXMiLCJoYXNBdHRyaWJ1dGUiLCJnZXRDb250ZW50Iiwic2V0Q29udGVudCIsIm5vZGVWYWx1ZSIsImh5cG90IiwibWFnIiwibm9ybSIsInNxIiwiY3JlYXRlVmVjdG9yIiwibm9pc2VEZXRhaWwiLCJub2lzZVNlZWQiLCJzZXRTZWVkIiwiZ2V0U2VlZCIsInA1IiwibWFnU3EiLCJjcm9zcyIsIm5vcm1hbGl6ZSIsImxpbWl0Iiwic2V0TWFnIiwiaGVhZGluZyIsImF0YW4yIiwiX2Zyb21SYWRpYW5zIiwiYW5nbGVCZXR3ZWVuIiwiYWNvcyIsImZyb21BbmdsZSIsImZyb21BbmdsZXMiLCJyYW5kb20yRCIsInJhbmRvbTNEIiwicmFuZG9tU2VlZCIsInJhbmRvbUdhdXNzaWFuIiwiX2FuZ2xlTW9kZSIsImFzaW4iLCJkZWdyZWVzIiwicmFkaWFucyIsImFuZ2xlTW9kZSIsIl90b0RlZ3JlZXMiLCJ0ZXh0Rm9udCIsIm9wZW50eXBlLmpzIiwic2FtcGxlRmFjdG9yIiwic2ltcGxpZnlUaHJlc2hvbGQiLCJ0bXBQb2ludDEiLCJ0bXBQb2ludDIiLCJxeCIsInF5IiwiY2FjaGUiLCJ0ZXh0Qm91bmRzIiwiYWR2YW5jZSIsIl9oYW5kbGVBbGlnbm1lbnQiLCJ0ZXh0VG9Qb2ludHMiLCJfZ2V0R2x5cGhzIiwiX2dldFBhdGgiLCJfZ2V0UGF0aERhdGEiLCJkZWNpbWFscyIsIl9nZXRTVkciLCJhcnJheUNvcHkiLCJzaG9ydGVuIiwic2h1ZmZsZSIsInN1YnNldCIsImZsb2F0IiwiaW50Iiwic3RyIiwiYm9vbGVhbiIsImNoYXIiLCJ1bmNoYXIiLCJoZXgiLCJ1bmhleCIsIm1hdGNoQWxsIiwibmZjIiwibmZwIiwibmZzIiwic3BsaXRUb2tlbnMiLCJkYXkiLCJnZXREYXRlIiwiaG91ciIsImdldEhvdXJzIiwibWludXRlIiwiZ2V0TWludXRlcyIsIm1vbnRoIiwiZ2V0TW9udGgiLCJzZWNvbmQiLCJnZXRTZWNvbmRzIiwieWVhciIsImdldEZ1bGxZZWFyIiwicGxhbmUiLCJnZW9tZXRyeUluSGFzaCIsIkdlb21ldHJ5IiwiZGV0YWlsWSIsImRldGFpbFgiLCJ2ZXJ0aWNlcyIsInV2cyIsImNvbXB1dGVGYWNlcyIsImNvbXB1dGVOb3JtYWxzIiwiX21ha2VUcmlhbmdsZUVkZ2VzIiwiX2VkZ2VzVG9WZXJ0aWNlcyIsImRyYXdCdWZmZXJzU2NhbGVkIiwiYm94IiwicGVyUGl4ZWxMaWdodGluZyIsInN0cm9rZUluZGljZXMiLCJmYWNlcyIsInNwaGVyZSIsImVsbGlwc29pZCIsInZlcnRleE5vcm1hbHMiLCJjeWxpbmRlciIsImNvbmUiLCJ0b3J1cyIsIl91c2VQb2ludFNoYWRlciIsImN1clBvaW50U2hhZGVyIiwiYmluZFNoYWRlciIsIl9kcmF3UG9pbnRzIiwiX3BvaW50VmVydGV4QnVmZmVyIiwidW5iaW5kU2hhZGVyIiwidU1WTWF0cml4IiwiTWF0cml4IiwiZHJhd0J1ZmZlcnMiLCJpbW1lZGlhdGVNb2RlIiwiX2JlemllclZlcnRleCIsIl9sb29rVXBUYWJsZUJlemllciIsIl9sdXRCZXppZXJEZXRhaWwiLCJfYmV6aWVyQ29lZmZpY2llbnRzIiwiaXNCZXppZXIiLCJfcXVhZHJhdGljVmVydGV4IiwiX2xvb2tVcFRhYmxlUXVhZHJhdGljIiwiX2x1dFF1YWRyYXRpY0RldGFpbCIsIl9xdWFkcmF0aWNDb2VmZmljaWVudHMiLCJpc1F1YWRyYXRpYyIsIl9jdXJ2ZVZlcnRleCIsImlzQ3VydmUiLCJfYmV6aWVyVG9DYXRtdWxsIiwiLi9wNS5HZW9tZXRyeSIsIm9yYml0Q29udHJvbCIsIl9jdXJDYW1lcmEiLCJjb250ZXh0TWVudURpc2FibGVkIiwib25jb250ZXh0bWVudSIsIndoZWVsRGVmYXVsdERpc2FibGVkIiwib253aGVlbCIsIl9vcmJpdCIsIl9nZXRMb2NhbEF4ZXMiLCJleWVYIiwiZXllWSIsImV5ZVoiLCJkZWJ1Z01vZGUiLCJfZ3JpZCIsIl9heGVzSWNvbiIsIm5vRGVidWdNb2RlIiwiY3VyU3Ryb2tlQ29sb3IiLCJjYW1lcmFNYXRyaXgiLCJtYXQ0IiwiYW1iaWVudExpZ2h0IiwiX3VzZUxpZ2h0U2hhZGVyIiwic2V0VW5pZm9ybSIsImN1ckZpbGxDb2xvciIsImFtYmllbnRMaWdodENvbG9ycyIsImRpcmVjdGlvbmFsTGlnaHQiLCJkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucyIsImRpcmVjdGlvbmFsTGlnaHRDb2xvcnMiLCJwb2ludExpZ2h0IiwicG9pbnRMaWdodFBvc2l0aW9ucyIsInBvaW50TGlnaHRDb2xvcnMiLCJnaWQiLCJ2dCIsInZuIiwibW9kZWwiLCJTaGFkZXIiLCJfZnJhZ1NyYyIsIl92ZXJ0U3JjIiwiY3JlYXRlU2hhZGVyIiwic2hhZGVyIiwiaXNTdHJva2VTaGFkZXIiLCJzZXRTdHJva2VTaGFkZXIiLCJzZXRGaWxsU2hhZGVyIiwibm9ybWFsTWF0ZXJpYWwiLCJkcmF3TW9kZSIsIl9nZXROb3JtYWxTaGFkZXIiLCJ0ZXh0dXJlIiwiYW1iaWVudE1hdGVyaWFsIiwic3BlY3VsYXJNYXRlcmlhbCIsIl9hcHBseUNvbG9yQmxlbmQiLCJHTCIsImRlcHRoTWFzayIsImVuYWJsZSIsImJsZW5kRXF1YXRpb24iLCJGVU5DX0FERCIsImJsZW5kRnVuYyIsIlNSQ19BTFBIQSIsIk9ORV9NSU5VU19TUkNfQUxQSEEiLCJkaXNhYmxlIiwiLi9wNS5UZXh0dXJlIiwiY2FtZXJhIiwicGVyc3BlY3RpdmUiLCJvcnRobyIsImNyZWF0ZUNhbWVyYSIsIkNhbWVyYSIsIl9jb21wdXRlQ2FtZXJhRGVmYXVsdFNldHRpbmdzIiwiX3NldERlZmF1bHRDYW1lcmEiLCJjYW1lcmFUeXBlIiwicHJvak1hdHJpeCIsImRlZmF1bHRDYW1lcmFGT1YiLCJjYW1lcmFGT1YiLCJkZWZhdWx0QXNwZWN0UmF0aW8iLCJkZWZhdWx0Q2FtZXJhTmVhciIsImRlZmF1bHRDYW1lcmFGYXIiLCJhc3BlY3RSYXRpbyIsImNhbWVyYU5lYXIiLCJjYW1lcmFGYXIiLCJpZGVudGl0eSIsIl9pc0FjdGl2ZSIsInVQTWF0cml4IiwiX3JvdGF0ZVZpZXciLCJjZW50ZXJYIiwiY2VudGVyWSIsImNlbnRlcloiLCJ0aWx0IiwibG9va0F0IiwiZGVmYXVsdEV5ZVgiLCJkZWZhdWx0RXllWSIsImRlZmF1bHRFeWVaIiwibW92ZSIsImRlZmF1bHRDZW50ZXJYIiwiZGVmYXVsdENlbnRlclkiLCJkZWZhdWx0Q2VudGVyWiIsIl9yZXNpemUiLCJzZXRDYW1lcmEiLCJsaW5lVmVydGljZXMiLCJsaW5lTm9ybWFscyIsImVkZ2VzIiwiX2dldEZhY2VOb3JtYWwiLCJhdmVyYWdlTm9ybWFscyIsImF2ZXJhZ2VQb2xlTm9ybWFscyIsIm1hdDMiLCJpbnZlcnQzeDMiLCJ0cmFuc3Bvc2UzeDMiLCJpbnZlcnNlVHJhbnNwb3NlIiwiZGV0ZXJtaW5hbnQiLCJzaGFwZU1vZGUiLCJ2ZXJ0ZXhDb2xvcnMiLCJ1dkNvb3JkcyIsInZlcnRleEJ1ZmZlciIsImNvbG9yQnVmZmVyIiwidXZCdWZmZXIiLCJsaW5lVmVydGV4QnVmZmVyIiwibGluZU5vcm1hbEJ1ZmZlciIsInBvaW50VmVydGV4QnVmZmVyIiwiaXNJbW1lZGlhdGVEcmF3aW5nIiwiX3VzZUltbWVkaWF0ZU1vZGVTaGFkZXIiLCJfZHJhd1N0cm9rZUltbWVkaWF0ZU1vZGUiLCJfdlRvTkFycmF5IiwiX3RyaWFuZ3VsYXRlIiwiX2RyYXdGaWxsSW1tZWRpYXRlTW9kZSIsImN1ckZpbGxTaGFkZXIiLCJhUG9zaXRpb24iLCJfYmluZEJ1ZmZlciIsIkFSUkFZX0JVRkZFUiIsIkRZTkFNSUNfRFJBVyIsImVuYWJsZUF0dHJpYiIsIkZMT0FUIiwiYVZlcnRleENvbG9yIiwiYVRleENvb3JkIiwiZHJhd0FycmF5cyIsImN1clN0cm9rZVNoYWRlciIsIl9mbGF0dGVuIiwiU1RBVElDX0RSQVciLCJhRGlyZWN0aW9uIiwiX2luaXRCdWZmZXJEZWZhdWx0cyIsIl9mcmVlQnVmZmVycyIsImdIYXNoIiwiZGVsZXRlQnVmZmVyIiwibm9ybWFsQnVmZmVyIiwiaW5kZXhCdWZmZXIiLCJudW1iZXJPZkl0ZW1zIiwibGluZVZlcnRleENvdW50IiwiX3VzZUNvbG9yU2hhZGVyIiwiRUxFTUVOVF9BUlJBWV9CVUZGRVIiLCJhTm9ybWFsIiwiX2RyYXdBcnJheXMiLCJfZHJhd0VsZW1lbnRzIiwiZHJhd0VsZW1lbnRzIiwiVU5TSUdORURfU0hPUlQiLCJQb2ludHMiLCJpbW1lZGlhdGVWZXJ0IiwidmVydGV4Q29sb3JWZXJ0IiwidmVydGV4Q29sb3JGcmFnIiwibm9ybWFsVmVydCIsIm5vcm1hbEZyYWciLCJiYXNpY0ZyYWciLCJsaWdodFZlcnQiLCJsaWdodFRleHR1cmVGcmFnIiwicGhvbmdWZXJ0IiwicGhvbmdGcmFnIiwiZm9udFZlcnQiLCJmb250RnJhZyIsImxpbmVWZXJ0IiwibGluZUZyYWciLCJwb2ludFZlcnQiLCJwb2ludEZyYWciLCJzdGVuY2lsIiwiYW50aWFsaWFzIiwicHJlbXVsdGlwbGllZEFscGhhIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwiX2luaXRDb250ZXh0IiwidU5NYXRyaXgiLCJfZGVmYXVsdExpZ2h0U2hhZGVyIiwiX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyIiwiX2RlZmF1bHROb3JtYWxTaGFkZXIiLCJfZGVmYXVsdENvbG9yU2hhZGVyIiwiX2RlZmF1bHRQb2ludFNoYWRlciIsIl9nZXRMaW5lU2hhZGVyIiwicG9pbnRTaXplIiwidGV4dHVyZXMiLCJfdGVzc3kiLCJfaW5pdFRlc3N5IiwiZm9udEluZm9zIiwiREVQVEhfVEVTVCIsImRlcHRoRnVuYyIsIkxFUVVBTCIsInZpZXdwb3J0IiwiZHJhd2luZ0J1ZmZlcldpZHRoIiwiZHJhd2luZ0J1ZmZlckhlaWdodCIsIl92aWV3cG9ydCIsImdldFBhcmFtZXRlciIsIlZJRVdQT1JUIiwiX3Jlc2V0Q29udGV4dCIsInNldEF0dHJpYnV0ZXMiLCJjbGVhckNvbG9yIiwiQ09MT1JfQlVGRkVSX0JJVCIsIkRFUFRIX0JVRkZFUl9CSVQiLCJfZ2V0SW1tZWRpYXRlTW9kZVNoYWRlciIsIl9nZXRDb2xvclNoYWRlciIsImN1clN0cm9rZVdlaWdodCIsInJlYWRQaXhlbHMiLCJVTlNJR05FRF9CWVRFIiwic2V0UG9pbnRTaGFkZXIiLCJpc0xpZ2h0U2hhZGVyIiwiX2dldExpZ2h0U2hhZGVyIiwiX2dldFBvaW50U2hhZGVyIiwiX2RlZmF1bHRMaW5lU2hhZGVyIiwiX2dldEZvbnRTaGFkZXIiLCJfZGVmYXVsdEZvbnRTaGFkZXIiLCJnZXRFeHRlbnNpb24iLCJfZ2V0RW1wdHlUZXh0dXJlIiwiX2VtcHR5VGV4dHVyZSIsIlRleHR1cmUiLCJnZXRUZXh0dXJlIiwiYmluZEJ1ZmZlciIsImJ1ZmZlckRhdGEiLCIuLi9jb3JlL3A1LlJlbmRlcmVyIiwiLi9wNS5DYW1lcmEiLCIuL3A1Lk1hdHJpeCIsIi4vcDUuU2hhZGVyIiwiX3ZlcnRTaGFkZXIiLCJfZnJhZ1NoYWRlciIsIl9nbFByb2dyYW0iLCJfbG9hZGVkQXR0cmlidXRlcyIsIl9sb2FkZWRVbmlmb3JtcyIsInVuaWZvcm1zIiwiX2JvdW5kIiwic2FtcGxlcnMiLCJWRVJURVhfU0hBREVSIiwic2hhZGVyU291cmNlIiwiY29tcGlsZVNoYWRlciIsImdldFNoYWRlclBhcmFtZXRlciIsIkNPTVBJTEVfU1RBVFVTIiwiZ2V0U2hhZGVySW5mb0xvZyIsIkZSQUdNRU5UX1NIQURFUiIsImNyZWF0ZVByb2dyYW0iLCJhdHRhY2hTaGFkZXIiLCJsaW5rUHJvZ3JhbSIsImdldFByb2dyYW1QYXJhbWV0ZXIiLCJMSU5LX1NUQVRVUyIsImdldFByb2dyYW1JbmZvTG9nIiwiX2xvYWRBdHRyaWJ1dGVzIiwiX2xvYWRVbmlmb3JtcyIsIkFDVElWRV9BVFRSSUJVVEVTIiwiZ2V0QWN0aXZlQXR0cmliIiwiZ2V0QXR0cmliTG9jYXRpb24iLCJBQ1RJVkVfVU5JRk9STVMiLCJnZXRBY3RpdmVVbmlmb3JtIiwiZ2V0VW5pZm9ybUxvY2F0aW9uIiwiU0FNUExFUl8yRCIsInNhbXBsZXJJbmRleCIsImNvbXBpbGUiLCJ1c2VQcm9ncmFtIiwiYmluZFRleHR1cmVzIiwiX3NldE1hdHJpeFVuaWZvcm1zIiwiX3NldFZpZXdwb3J0VW5pZm9ybSIsInVuYmluZFRleHR1cmVzIiwiYWN0aXZlVGV4dHVyZSIsIlRFWFRVUkUwIiwiYmluZFRleHR1cmUiLCJ1cGRhdGUiLCJ1bmlmb3JtMWkiLCJ1cGRhdGVUZXh0dXJlcyIsIkJPT0wiLCJJTlQiLCJ1bmlmb3JtMWl2IiwidW5pZm9ybTFmdiIsInVuaWZvcm0xZiIsIkZMT0FUX01BVDMiLCJ1bmlmb3JtTWF0cml4M2Z2IiwiRkxPQVRfTUFUNCIsInVuaWZvcm1NYXRyaXg0ZnYiLCJGTE9BVF9WRUMyIiwidW5pZm9ybTJmdiIsInVuaWZvcm0yZiIsIkZMT0FUX1ZFQzMiLCJ1bmlmb3JtM2Z2IiwidW5pZm9ybTNmIiwiRkxPQVRfVkVDNCIsInVuaWZvcm00ZnYiLCJ1bmlmb3JtNGYiLCJJTlRfVkVDMiIsInVuaWZvcm0yaXYiLCJ1bmlmb3JtMmkiLCJJTlRfVkVDMyIsInVuaWZvcm0zaXYiLCJ1bmlmb3JtM2kiLCJJTlRfVkVDNCIsInVuaWZvcm00aXYiLCJ1bmlmb3JtNGkiLCJ1VXNlTGlnaHRpbmciLCJ1QW1iaWVudExpZ2h0Q291bnQiLCJ1RGlyZWN0aW9uYWxMaWdodENvdW50IiwidVBvaW50TGlnaHRDb3VudCIsInVBbWJpZW50Q29sb3IiLCJ1RGlyZWN0aW9uYWxDb2xvciIsInVQb2ludExpZ2h0TG9jYXRpb24iLCJ1UG9pbnRMaWdodENvbG9yIiwidUxpZ2h0aW5nRGlyZWN0aW9uIiwidVNwZWN1bGFyIiwiaXNUZXh0dXJlU2hhZGVyIiwiaXNDb2xvclNoYWRlciIsInVNYXRlcmlhbENvbG9yIiwiaXNUZXhMaWdodFNoYWRlciIsInVTdHJva2VXZWlnaHQiLCJlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSIsInZlcnRleEF0dHJpYlBvaW50ZXIiLCJnbFRleCIsImdsVGFyZ2V0IiwiVEVYVFVSRV8yRCIsImdsRm9ybWF0IiwibWlwbWFwcyIsImdsTWluRmlsdGVyIiwiZ2xNYWdGaWx0ZXIiLCJnbFdyYXBTIiwiQ0xBTVBfVE9fRURHRSIsImdsV3JhcFQiLCJpc1NyY01lZGlhRWxlbWVudCIsIl92aWRlb1ByZXZVcGRhdGVUaW1lIiwiaXNTcmNIVE1MRWxlbWVudCIsImlzU3JjUDVJbWFnZSIsImlzU3JjUDVHcmFwaGljcyIsImlzSW1hZ2VEYXRhIiwiX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZSIsImNyZWF0ZVRleHR1cmUiLCJ0ZXhQYXJhbWV0ZXJpIiwiVEVYVFVSRV9NQUdfRklMVEVSIiwiVEVYVFVSRV9NSU5fRklMVEVSIiwiVEVYVFVSRV9XUkFQX1MiLCJURVhUVVJFX1dSQVBfVCIsImxvYWRlZG1ldGFkYXRhIiwidGV4SW1hZ2UyRCIsIl9kaXJ0eSIsInVuYmluZFRleHR1cmUiLCJzZXRJbnRlcnBvbGF0aW9uIiwic2V0V3JhcE1vZGUiLCJNSVJST1JFRF9SRVBFQVQiLCJpbmZvcyIsImZpbmRJbWFnZSIsInN0cm9rZUltYWdlSW5mb3MiLCJjb2xEaW1JbWFnZUluZm9zIiwicm93RGltSW1hZ2VJbmZvcyIsImNvbENlbGxJbWFnZUluZm9zIiwicm93Q2VsbEltYWdlSW5mb3MiLCJnbHlwaEluZm9zIiwiZ2V0R2x5cGhJbmZvIiwicDAiLCJjMCIsImMxIiwicDEiLCJ0b1F1YWRyYXRpYyIsInF1YWRFcnJvciIsInNwbGl0SW5mbGVjdGlvbnMiLCJjZWxsSW1hZ2VJbmZvIiwiZGltT2Zmc2V0IiwiZGltSW1hZ2VJbmZvIiwiZ2x5cGgiLCJ1R2x5cGhSZWN0Iiwic3Ryb2tlSW1hZ2VJbmZvIiwic3Ryb2tlcyIsImNvbEluZm8iLCJyb3dJbmZvIiwidUdyaWRPZmZzZXQiLCJfZm9udEluZm8iLCJfdGV4dEdlb20iLCIuL3A1LlJlbmRlcmVyR0wiLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18iLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fIiwiVGFwTGlzdGVuZXIiLCJlbGVtZW50IiwiX2RyYWdnZWQiLCJfZWxlbWVudCIsIl9iaW5kZWRNb3ZlIiwiX21vdmVkIiwiX2JpbmRlZEVuZCIsIl9lbmRlZCIsImlzU3RhcnRlZCIsInN0YXJ0Q29udGV4dCIsImVsZW1lbnRzIiwiY2hlY2tMb29wIiwib25TdGFydGVkIiwidGFwTGlzdGVuZXJzIiwiYmluZFRhcExpc3RlbmVyIiwiTm9kZUxpc3QiLCJxdWVyeVNlbGVjdG9yQWxsIiwianF1ZXJ5IiwidGFwIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsInA1X2xpYl9wNV9taW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyIsInA1X2xpYl9wNV9taW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0IiwidG9uZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fIiwidG9uZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQiLCJzdGFydGF1ZGlvY29udGV4dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fIiwic3RhcnRhdWRpb2NvbnRleHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0Iiwic2tldGNoIiwicGhhc2VyIiwiY2hvcnVzIiwiSGV4YWdvbiIsIltvYmplY3QgT2JqZWN0XSIsImNhbnBsYXkiLCJmaWxsQ29sb3IiLCJmbSIsInhWYWwiLCJ5VmFsIiwicE1vdXNlWCIsInBNb3VzZVkiLCJiYWxsWCIsImJhbGxZIiwidGlsZXMiLCJ0eCIsInR5IiwibngiLCJueSIsImNhblBsYXkiLCJldmFsIl0sIm1hcHBpbmdzIjoiYUFDQSxJQUFBQSxLQUdBLFNBQUFDLEVBQUFDLEdBR0EsR0FBQUYsRUFBQUUsR0FDQSxPQUFBRixFQUFBRSxHQUFBQyxRQUdBLElBQUFDLEVBQUFKLEVBQUFFLElBQ0FHLEVBQUFILEVBQ0FJLEdBQUEsRUFDQUgsWUFVQSxPQU5BSSxFQUFBTCxHQUFBTSxLQUFBSixFQUFBRCxRQUFBQyxJQUFBRCxRQUFBRixHQUdBRyxFQUFBRSxHQUFBLEVBR0FGLEVBQUFELFFBS0FGLEVBQUFRLEVBQUFGLEVBR0FOLEVBQUFTLEVBQUFWLEVBR0FDLEVBQUFVLEVBQUEsU0FBQVIsRUFBQVMsRUFBQUMsR0FDQVosRUFBQWEsRUFBQVgsRUFBQVMsSUFDQUcsT0FBQUMsZUFBQWIsRUFBQVMsR0FBMENLLFlBQUEsRUFBQUMsSUFBQUwsS0FLMUNaLEVBQUFrQixFQUFBLFNBQUFoQixHQUNBLG9CQUFBaUIsZUFBQUMsYUFDQU4sT0FBQUMsZUFBQWIsRUFBQWlCLE9BQUFDLGFBQXdEQyxNQUFBLFdBRXhEUCxPQUFBQyxlQUFBYixFQUFBLGNBQWlEbUIsT0FBQSxLQVFqRHJCLEVBQUFzQixFQUFBLFNBQUFELEVBQUFFLEdBRUEsR0FEQSxFQUFBQSxJQUFBRixFQUFBckIsRUFBQXFCLElBQ0EsRUFBQUUsRUFBQSxPQUFBRixFQUNBLEtBQUFFLEdBQUEsaUJBQUFGLFFBQUFHLFdBQUEsT0FBQUgsRUFDQSxJQUFBSSxFQUFBWCxPQUFBWSxPQUFBLE1BR0EsR0FGQTFCLEVBQUFrQixFQUFBTyxHQUNBWCxPQUFBQyxlQUFBVSxFQUFBLFdBQXlDVCxZQUFBLEVBQUFLLFVBQ3pDLEVBQUFFLEdBQUEsaUJBQUFGLEVBQUEsUUFBQU0sS0FBQU4sRUFBQXJCLEVBQUFVLEVBQUFlLEVBQUFFLEVBQUEsU0FBQUEsR0FBZ0gsT0FBQU4sRUFBQU0sSUFBcUJDLEtBQUEsS0FBQUQsSUFDckks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QUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLFVBQUFDLEdBQUEsVUFBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxRQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxVQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLGFBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLE1BQXcrQkMsSUFBSzdHLEVBQUEsRUFBQWgyQixFQUFBLEVBQUFLLEVBQUEsRUFBQUMsRUFBQSxFQUFBa0csRUFBQSxFQUFBK0MsRUFBQSxFQUFBYSxFQUFBLEVBQUEyQixFQUFBLEVBQUFHLEVBQUEsRUFBQUMsRUFBQSxFQUFBMEQsR0FBQSxFQUFBb21CLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFDN3ArQkMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsR0FBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsR0FBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEdBQWtpQjV2QyxJQUFLOHZDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsTUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLE1BQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxVQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFVBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsU0FBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLE1BQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsVUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxTQUFBQyxLQUFBLE1BQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsTUFBQUMsS0FBQSxTQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxhQUFBQyxLQUFBLEtBQUFDLEtBQUEsYUFBQUMsS0FBQSxVQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLFVBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFB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T0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsUUFBdUI2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxLQUFBNzdFLElBQUEsT0FBc0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxPQUFBNzdFLElBQUEsU0FBMEI2N0UsTUFBQSxPQUFBNzdFLElBQUEsU0FBMEI2N0UsTUFBQSxRQUFBNzdFLElBQUEsVUFBNEI2N0UsTUFBQSxNQUFBNzdFLElBQUEsUUFBd0I2N0UsTUFBQSxPQUFBNzdFLElBQUEsU0FBMEI2N0UsTUFBQSxLQUFB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LGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxVQUFBLGFBQUFrOEQsR0FBQWw4RCxV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QUFDLE1BQUEsVUFBQUMsZUFBQSxVQUFBQyxTQUFBLFVBQUFDLFFBQUEsVUFBQUMsS0FBQSxVQUFBQyxTQUFBLFVBQUFDLFNBQUEsVUFBQUMsY0FBQSxVQUFBQyxTQUFBLFVBQUFDLFVBQUEsVUFBQUMsU0FBQSxVQUFBQyxVQUFBLFVBQUFDLFlBQUEsVUFBQUMsZUFBQSxVQUFBQyxXQUFBLFVBQUFDLFdBQUEsVUFBQUMsUUFBQSxVQUFBQyxXQUFBLFVBQUFDLGFBQUEsVUFBQUMsY0FBQSxVQUFBQyxjQUFBLFVBQUFDLGNBQUEsVUFBQUMsY0FBQSxVQUFBQyxXQUFBLFVBQUFDLFNBQUEsVUFBQUMsWUFBQSxVQUFBQyxRQUFBLFVBQUFDLFFBQUEsVUFBQUMsV0FBQSxVQUFBQyxVQUFBLFVBQUFDLFlBQUEsVUFBQUMsWUFBQSxVQUFBQyxRQUFBLFVBQUFDLFVBQUEsVUFBQUMsV0FBQSxVQUFBQyxLQUFBLFVBQUFDLFVBQUEsVUFBQUMsS0FBQSxVQUFBdEYsTUFBQSxVQUFBdUYsWUFBQSxVQUFBQyxLQUFBLFVBQUFDLFNBQUEsVUFBQUMsUUFBQSxVQUFBQyxVQUFBLFVBQUFDLE9BQUEsVUFBQUMsTUFBQSxVQUFBQyxNQUFBLFVBQUFDLFNBQUEsVUFBQUMsY0FBQSxVQUFBQyxVQUFBLFVBQUFDLGFBQUEsVUFBQUMsVUFBQSxVQUFBQyxXQUFBLFVBQUFDLFVBQUEsVUFBQUMscUJBQUEsVUFBQUMsVUFBQSxVQUFBQyxXQUFBLFVBQUFDLFVBQUEsVUFBQUMsVUFBQSxVQUFBQyxZQUFBLFVBQUFDLGNBQUEsVUFBQUMsYUFBQSxVQUFBQyxlQUFBLFVBQUFDLGVBQUEsVUFBQUMsZUFBQSxVQUFBQyxZQUFBLFVBQUFDLEtBQUEsVUFBQUMsVUFBQSxVQUFBQyxNQUFBLFVBQUFDLFFBQUEsVUFBQUMsT0FBQSxVQUFBQyxpQkFBQSxVQUFBQyxXQUFBLFVBQUFDLGFBQUEsVUFBQUMsYUFBQSxVQUFBQyxlQUFBLFVBQUFDLGdCQUFBLFVBQUFDLGtCQUFBLFVBQUFDLGdCQUFBLFVBQUFDLGdCQUFBLFVBQUFDLGFBQUEsVUFB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aW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMyk7XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSl7XG5cblx0Ly9VTURcblx0aWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0XHRkZWZpbmUoZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gZmFjdG9yeSgpO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiBcdH0gZWxzZSB7XG5cdFx0cm9vdC5Ub25lID0gZmFjdG9yeSgpO1xuXHR9XG5cbn0odGhpcywgZnVuY3Rpb24oKXtcblxuXHRcInVzZSBzdHJpY3RcIjtcblx0XG5cdHZhciBUb25lO1xuXHQvL2NvbnN0cnVjdHMgdGhlIG1haW4gVG9uZSBvYmplY3Rcblx0ZnVuY3Rpb24gTWFpbihmdW5jKXtcblx0XHRUb25lID0gZnVuYygpO1xuXHR9XG5cdC8vaW52b2tlcyBlYWNoIG9mIHRoZSBtb2R1bGVzIHdpdGggdGhlIG1haW4gVG9uZSBvYmplY3QgYXMgdGhlIGFyZ3VtZW50XG5cdGZ1bmN0aW9uIE1vZHVsZShmdW5jKXtcblx0XHRmdW5jKFRvbmUpO1xuXHR9XHQvKipcblx0ICogIFRvbmUuanNcblx0ICogIEBhdXRob3IgWW90YW0gTWFublxuXHQgKiAgQGxpY2Vuc2UgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCBNSVQgTGljZW5zZVxuXHQgKiAgQGNvcHlyaWdodCAyMDE0LTIwMTggWW90YW0gTWFublxuXHQgKi9cblx0TWFpbihmdW5jdGlvbiAoKSB7XG5cdCAgICBcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRPTkVcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZSBpcyB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgb3RoZXIgY2xhc3Nlcy5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICB2YXIgVG9uZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVG9uZSkpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb25zdHJ1Y3RvciBuZWVkcyB0byBiZSBjYWxsZWQgd2l0aCB0aGUgXFwnbmV3XFwnIGtleXdvcmQnKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBAcmV0dXJucyB7U3RyaW5nfSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBhcyBhIHN0cmluZ1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgY2xhc3NOYW1lIGluIFRvbmUpIHtcblx0ICAgICAgICAgICAgdmFyIGlzTGV0dGVyID0gY2xhc3NOYW1lWzBdLm1hdGNoKC9eW0EtWl0kLyk7XG5cdCAgICAgICAgICAgIHZhciBzYW1lQ29uc3RydWN0b3IgPSBUb25lW2NsYXNzTmFtZV0gPT09IHRoaXMuY29uc3RydWN0b3I7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzRnVuY3Rpb24oVG9uZVtjbGFzc05hbWVdKSAmJiBpc0xldHRlciAmJiBzYW1lQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuICdUb25lJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIGRpc2Nvbm5lY3QgYW5kIGRpc3Bvc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0R0VUL1NFVFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBwYXJhbWV0ZXJzIGF0IG9uY2UuIEVpdGhlciBwYXNzIGluIGFuXG5cdFx0ICogIG9iamVjdCBtYXBwaW5nIHBhcmFtZXRlcnMgdG8gdmFsdWVzLCBvciB0byBzZXQgYVxuXHRcdCAqICBzaW5nbGUgcGFyYW1ldGVyLCBieSBwYXNzaW5nIGluIGEgc3RyaW5nIGFuZCB2YWx1ZS5cblx0XHQgKiAgVGhlIGxhc3QgYXJndW1lbnQgaXMgYW4gb3B0aW9uYWwgcmFtcCB0aW1lIHdoaWNoXG5cdFx0ICogIHdpbGwgcmFtcCBhbnkgc2lnbmFsIHZhbHVlcyB0byB0aGVpciBkZXN0aW5hdGlvbiB2YWx1ZVxuXHRcdCAqICBvdmVyIHRoZSBkdXJhdGlvbiBvZiB0aGUgcmFtcFRpbWUuXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gcGFyYW1zXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmFtcFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmV9IHRoaXNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdmFsdWVzIHVzaW5nIGFuIG9iamVjdFxuXHRcdCAqIGZpbHRlci5zZXQoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IDMwMCxcblx0XHQgKiBcdFwidHlwZVwiIDogaGlnaHBhc3Ncblx0XHQgKiB9KTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBmaWx0ZXIuc2V0KFwidHlwZVwiLCBcImhpZ2hwYXNzXCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcmFtcCB0byB0aGUgdmFsdWUgMjIwIG92ZXIgMyBzZWNvbmRzLlxuXHRcdCAqIG9zY2lsbGF0b3Iuc2V0KHtcblx0XHQgKiBcdFwiZnJlcXVlbmN5XCIgOiAyMjBcblx0XHQgKiB9LCAzKTtcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChwYXJhbXMsIHZhbHVlLCByYW1wVGltZSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgcmFtcFRpbWUgPSB2YWx1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcocGFyYW1zKSkge1xuXHQgICAgICAgICAgICB2YXIgdG1wT2JqID0ge307XG5cdCAgICAgICAgICAgIHRtcE9ialtwYXJhbXNdID0gdmFsdWU7XG5cdCAgICAgICAgICAgIHBhcmFtcyA9IHRtcE9iajtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcGFyYW1Mb29wOlxuXHQgICAgICAgICAgICBmb3IgKHZhciBhdHRyIGluIHBhcmFtcykge1xuXHQgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJhbXNbYXR0cl07XG5cdCAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gdGhpcztcblx0ICAgICAgICAgICAgICAgIGlmIChhdHRyLmluZGV4T2YoJy4nKSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgYXR0clNwbGl0ID0gYXR0ci5zcGxpdCgnLicpO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0clNwbGl0Lmxlbmd0aCAtIDE7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbYXR0clNwbGl0W2ldXTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFRvbmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJTcGxpdC5zcGxpY2UoMCwgaSArIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlubmVyUGFyYW0gPSBhdHRyU3BsaXQuam9pbignLicpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnNldChpbm5lclBhcmFtLCB2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBwYXJhbUxvb3A7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGF0dHJTcGxpdFthdHRyU3BsaXQubGVuZ3RoIC0gMV07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB2YXIgcGFyYW0gPSBwYXJlbnRbYXR0cl07XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHBhcmFtKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuU2lnbmFsICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5TaWduYWwgfHwgVG9uZS5QYXJhbSAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0udmFsdWUgIT09IHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYocmFtcFRpbWUpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0ucmFtcFRvKHZhbHVlLCByYW1wVGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgQXVkaW9QYXJhbSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS52YWx1ZSAhPT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0udmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuVGltZUJhc2UgJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcGFyZW50W2F0dHJdID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgVG9uZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHBhcmFtLnNldCh2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtICE9PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHBhcmVudFthdHRyXSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgb2JqZWN0J3MgYXR0cmlidXRlcy4gR2l2ZW4gbm8gYXJndW1lbnRzIGdldFxuXHRcdCAqICB3aWxsIHJldHVybiBhbGwgYXZhaWxhYmxlIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nXG5cdFx0ICogIHZhbHVlcy4gUGFzcyBpbiBhIHNpbmdsZSBhdHRyaWJ1dGUgdG8gcmV0cmlldmUgb3IgYW4gYXJyYXlcblx0XHQgKiAgb2YgYXR0cmlidXRlcy4gVGhlIGF0dHJpYnV0ZSBzdHJpbmdzIGNhbiBhbHNvIGluY2x1ZGUgYSBcIi5cIlxuXHRcdCAqICB0byBhY2Nlc3MgZGVlcGVyIHByb3BlcnRpZXMuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG9zYy5nZXQoKTtcblx0XHQgKiAvL3JldHVybnMge1widHlwZVwiIDogXCJzaW5lXCIsIFwiZnJlcXVlbmN5XCIgOiA0NDAsIC4uLmV0Y31cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBvc2MuZ2V0KFwidHlwZVwiKTtcblx0XHQgKiAvL3JldHVybnMgeyBcInR5cGVcIiA6IFwic2luZVwifVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy91c2UgZG90IG5vdGF0aW9uIHRvIGFjY2VzcyBkZWVwIHByb3BlcnRpZXNcblx0XHQgKiBzeW50aC5nZXQoW1wiZW52ZWxvcGUuYXR0YWNrXCIsIFwiZW52ZWxvcGUucmVsZWFzZVwiXSk7XG5cdFx0ICogLy9yZXR1cm5zIHtcImVudmVsb3BlXCIgOiB7XCJhdHRhY2tcIiA6IDAuMiwgXCJyZWxlYXNlXCIgOiAwLjR9fVxuXHRcdCAqICBAcGFyYW0ge0FycmF5PXxzdHJpbmd8dW5kZWZpbmVkfSBwYXJhbXMgdGhlIHBhcmFtZXRlcnMgdG8gZ2V0LCBvdGhlcndpc2Ugd2lsbCByZXR1cm5cblx0XHQgKiAgXHRcdFx0XHRcdCAgICAgICAgICAgICAgICAgIGFsbCBhdmFpbGFibGUuXG5cdFx0ICogIEByZXR1cm5zIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHBhcmFtcyA9IHRoaXMuX2NvbGxlY3REZWZhdWx0cyh0aGlzLmNvbnN0cnVjdG9yKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcocGFyYW1zKSkge1xuXHQgICAgICAgICAgICBwYXJhbXMgPSBbcGFyYW1zXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHJldCA9IHt9O1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBhdHRyID0gcGFyYW1zW2ldO1xuXHQgICAgICAgICAgICB2YXIgcGFyZW50ID0gdGhpcztcblx0ICAgICAgICAgICAgdmFyIHN1YlJldCA9IHJldDtcblx0ICAgICAgICAgICAgaWYgKGF0dHIuaW5kZXhPZignLicpICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGF0dHJTcGxpdCA9IGF0dHIuc3BsaXQoJy4nKTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0clNwbGl0Lmxlbmd0aCAtIDE7IGorKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBzdWJBdHRyID0gYXR0clNwbGl0W2pdO1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YlJldFtzdWJBdHRyXSA9IHN1YlJldFtzdWJBdHRyXSB8fCB7fTtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJSZXQgPSBzdWJSZXRbc3ViQXR0cl07XG5cdCAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50W3N1YkF0dHJdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYXR0ciA9IGF0dHJTcGxpdFthdHRyU3BsaXQubGVuZ3RoIC0gMV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIHBhcmFtID0gcGFyZW50W2F0dHJdO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChwYXJhbXNbYXR0cl0pKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS5nZXQoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLlNpZ25hbCAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuU2lnbmFsKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS52YWx1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLlBhcmFtICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5QYXJhbSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0udmFsdWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBBdWRpb1BhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS52YWx1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIFRvbmUpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLmdldCgpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKCFUb25lLmlzRnVuY3Rpb24ocGFyYW0pICYmIFRvbmUuaXNEZWZpbmVkKHBhcmFtKSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJldDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29sbGVjdCBhbGwgb2YgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBpbiBvbmVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY29uc3RyIHRoZSBjb25zdHJ1Y3RvciB0byBmaW5kIHRoZSBkZWZhdWx0cyBmcm9tXG5cdFx0ICogIEByZXR1cm4ge0FycmF5fSBhbGwgb2YgdGhlIGF0dHJpYnV0ZXMgd2hpY2ggYmVsb25nIHRvIHRoZSBjbGFzc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuX2NvbGxlY3REZWZhdWx0cyA9IGZ1bmN0aW9uIChjb25zdHIpIHtcblx0ICAgICAgICB2YXIgcmV0ID0gW107XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGNvbnN0ci5kZWZhdWx0cykpIHtcblx0ICAgICAgICAgICAgcmV0ID0gT2JqZWN0LmtleXMoY29uc3RyLmRlZmF1bHRzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGNvbnN0ci5fc3VwZXIpKSB7XG5cdCAgICAgICAgICAgIHZhciBzdXBlckRlZnMgPSB0aGlzLl9jb2xsZWN0RGVmYXVsdHMoY29uc3RyLl9zdXBlcik7XG5cdCAgICAgICAgICAgIC8vZmlsdGVyIG91dCByZXBlYXRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VwZXJEZWZzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAocmV0LmluZGV4T2Yoc3VwZXJEZWZzW2ldKSA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXQucHVzaChzdXBlckRlZnNbaV0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0REVGQVVMVFNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgdmFsdWVzICBUaGUgYXJndW1lbnRzIGFycmF5XG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAga2V5cyAgICBUaGUgbmFtZXMgb2YgdGhlIGFyZ3VtZW50c1xuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gY29uc3RyIFRoZSBjbGFzcyBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcmV0dXJuICB7T2JqZWN0fSAgQW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSAgZGVmYXVsdHMgYmV0d2VlbiB0aGUgY2xhc3MnIGRlZmF1bHRzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHBhc3NlZCBpbiBhcmd1bWVudHMuXG5cdFx0ICovXG5cdCAgICBUb25lLmRlZmF1bHRzID0gZnVuY3Rpb24gKHZhbHVlcywga2V5cywgY29uc3RyKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSB7fTtcblx0ICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSAmJiBUb25lLmlzT2JqZWN0KHZhbHVlc1swXSkpIHtcblx0ICAgICAgICAgICAgb3B0aW9ucyA9IHZhbHVlc1swXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnNba2V5c1tpXV0gPSB2YWx1ZXNbaV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGNvbnN0ci5kZWZhdWx0cykpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBjb25zdHIuZGVmYXVsdHMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc09iamVjdChjb25zdHIpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgY29uc3RyKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gb3B0aW9ucztcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHRoZSBgZ2l2ZW5gIHBhcmFtZXRlciBpcyB1bmRlZmluZWQsIHVzZSB0aGUgYGZhbGxiYWNrYC5cblx0XHQgKiAgSWYgYm90aCBgZ2l2ZW5gIGFuZCBgZmFsbGJhY2tgIGFyZSBvYmplY3QgbGl0ZXJhbHMsIGl0IHdpbGxcblx0XHQgKiAgcmV0dXJuIGEgZGVlcCBjb3B5IHdoaWNoIGluY2x1ZGVzIGFsbCBvZiB0aGUgcGFyYW1ldGVycyBmcm9tIGJvdGhcblx0XHQgKiAgb2JqZWN0cy4gSWYgYSBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIGluIGdpdmVuLCBpdCB3aWxsIHJldHVyblxuXHRcdCAqICB0aGUgZmFsbGJhY2sgcHJvcGVydHkuXG5cdFx0ICogIDxicj48YnI+XG5cdFx0ICogIFdBUk5JTkc6IGlmIG9iamVjdCBpcyBzZWxmIHJlZmVyZW50aWFsLCBpdCB3aWxsIGdvIGludG8gYW4gYW5cblx0XHQgKiAgaW5maW5pdGUgcmVjdXJzaXZlIGxvb3AuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBwYXJhbSAgeyp9IGdpdmVuXG5cdFx0ICogIEBwYXJhbSAgeyp9IGZhbGxiYWNrXG5cdFx0ICogIEByZXR1cm4geyp9XG5cdFx0ICovXG5cdCAgICBUb25lLmRlZmF1bHRBcmcgPSBmdW5jdGlvbiAoZ2l2ZW4sIGZhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QoZ2l2ZW4pICYmIFRvbmUuaXNPYmplY3QoZmFsbGJhY2spKSB7XG5cdCAgICAgICAgICAgIHZhciByZXQgPSB7fTtcblx0ICAgICAgICAgICAgLy9tYWtlIGEgZGVlcCBjb3B5IG9mIHRoZSBnaXZlbiBvYmplY3Rcblx0ICAgICAgICAgICAgZm9yICh2YXIgZ2l2ZW5Qcm9wIGluIGdpdmVuKSB7XG5cdCAgICAgICAgICAgICAgICByZXRbZ2l2ZW5Qcm9wXSA9IFRvbmUuZGVmYXVsdEFyZyhmYWxsYmFja1tnaXZlblByb3BdLCBnaXZlbltnaXZlblByb3BdKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBmb3IgKHZhciBmYWxsYmFja1Byb3AgaW4gZmFsbGJhY2spIHtcblx0ICAgICAgICAgICAgICAgIHJldFtmYWxsYmFja1Byb3BdID0gVG9uZS5kZWZhdWx0QXJnKGdpdmVuW2ZhbGxiYWNrUHJvcF0sIGZhbGxiYWNrW2ZhbGxiYWNrUHJvcF0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuaXNVbmRlZihnaXZlbikgPyBmYWxsYmFjayA6IGdpdmVuO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRDT05ORUNUSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0b2dldGhlciBhbGwgb2YgdGhlIGFyZ3VtZW50cyBpbiBzZXJpZXNcblx0XHQgKiAgQHBhcmFtIHsuLi5BdWRpb1BhcmFtfFRvbmV8QXVkaW9Ob2RlfSBub2Rlc1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZX1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5jb25uZWN0U2VyaWVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBjdXJyZW50VW5pdCA9IGFyZ3VtZW50c1swXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgdG9Vbml0ID0gYXJndW1lbnRzW2ldO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdC5jb25uZWN0KHRvVW5pdCk7XG5cdCAgICAgICAgICAgIGN1cnJlbnRVbml0ID0gdG9Vbml0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gVG9uZTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIFRZUEUgQ0hFQ0tJTkdcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZyBpcyB1bmRlZmluZWRcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyB1bmRlZmluZWRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc1VuZGVmID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJnIGlzIG5vdCB1bmRlZmluZWRcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyB1bmRlZmluZWRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc0RlZmluZWQgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuICFUb25lLmlzVW5kZWYodmFsKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJnIGlzIGEgZnVuY3Rpb25cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIGZ1bmN0aW9uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIuXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBudW1iZXJcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc051bWJlciA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGdpdmVuIGFyZ3VtZW50IGlzIGFuIG9iamVjdCBsaXRlcmFsIChpLmUuIGB7fWApO1xuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGFuIG9iamVjdCBsaXRlcmFsLlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzT2JqZWN0ID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgJiYgYXJnLmNvbnN0cnVjdG9yID09PSBPYmplY3Q7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGEgYm9vbGVhbi5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIGJvb2xlYW5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc0Jvb2xlYW4gPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgYW4gQXJyYXlcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhbiBhcnJheVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzQXJyYXkgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJnKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgYSBzdHJpbmcuXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBzdHJpbmdcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc1N0cmluZyA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGluIHRoZSBmb3JtIG9mIGEgbm90ZSBpbiBzY2llbnRpZmljIHBpdGNoIG5vdGF0aW9uLlxuXHRcdCAqICBlLmcuIFwiQzRcIlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgc3RyaW5nXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNOb3RlID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiBUb25lLmlzU3RyaW5nKGFyZykgJiYgL14oW2EtZ117MX0oPzpifCN8eHxiYik/KSgtP1swLTldKykvaS50ZXN0KGFyZyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFuIGVtcHR5IGZ1bmN0aW9uLlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLm5vT3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIE1ha2UgdGhlIHByb3BlcnR5IG5vdCB3cml0YWJsZS4gSW50ZXJuYWwgdXNlIG9ubHkuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHByb3BlcnR5ICB0aGUgcHJvcGVydHkgdG8gbWFrZSBub3Qgd3JpdGFibGVcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLl9yZWFkT25seSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5KSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZWFkT25seShwcm9wZXJ0eVtpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHksIHtcblx0ICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcblx0ICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBNYWtlIGFuIGF0dHJpYnV0ZSB3cml0ZWFibGUuIEludGVyYWwgdXNlIG9ubHkuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHByb3BlcnR5ICB0aGUgcHJvcGVydHkgdG8gbWFrZSB3cml0YWJsZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuX3dyaXRhYmxlID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydHkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRhYmxlKHByb3BlcnR5W2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eSwgeyB3cml0YWJsZTogdHJ1ZSB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUG9zc2libGUgcGxheSBzdGF0ZXMuXG5cdFx0ICogQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RhdGUgPSB7XG5cdCAgICAgICAgU3RhcnRlZDogJ3N0YXJ0ZWQnLFxuXHQgICAgICAgIFN0b3BwZWQ6ICdzdG9wcGVkJyxcblx0ICAgICAgICBQYXVzZWQ6ICdwYXVzZWQnXG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgRXF1YWwgcG93ZXIgZ2FpbiBzY2FsZS4gR29vZCBmb3IgY3Jvc3MtZmFkaW5nLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gcGVyY2VudCAoMC0xKVxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgb3V0cHV0IGdhaW4gKDAtMSlcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5lcXVhbFBvd2VyU2NhbGUgPSBmdW5jdGlvbiAocGVyY2VudCkge1xuXHQgICAgICAgIHZhciBwaUZhY3RvciA9IDAuNSAqIE1hdGguUEk7XG5cdCAgICAgICAgcmV0dXJuIE1hdGguc2luKHBlcmNlbnQgKiBwaUZhY3Rvcik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZGVjaWJlbHMgaW50byBnYWluLlxuXHRcdCAqICBAcGFyYW0gIHtEZWNpYmVsc30gZGJcblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmRiVG9HYWluID0gZnVuY3Rpb24gKGRiKSB7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucG93KDEwLCBkYiAvIDIwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBnYWluIHRvIGRlY2liZWxzLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9IGdhaW4gKDAtMSlcblx0XHQgKiAgQHJldHVybiB7RGVjaWJlbHN9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZ2FpblRvRGIgPSBmdW5jdGlvbiAoZ2Fpbikge1xuXHQgICAgICAgIHJldHVybiAyMCAqIChNYXRoLmxvZyhnYWluKSAvIE1hdGguTE4xMCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYW4gaW50ZXJ2YWwgKGluIHNlbWl0b25lcykgdG8gYSBmcmVxdWVuY3kgcmF0aW8uXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsfSBpbnRlcnZhbCB0aGUgbnVtYmVyIG9mIHNlbWl0b25lcyBhYm92ZSB0aGUgYmFzZSBub3RlXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgdGhlIGZyZXF1ZW5jeSByYXRpb1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oMCk7IC8vIDFcblx0XHQgKiB0b25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbygxMik7IC8vIDJcblx0XHQgKiB0b25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbygtMTIpOyAvLyAwLjVcblx0XHQgKi9cblx0ICAgIFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvID0gZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucG93KDIsIGludGVydmFsIC8gMTIpO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRJTUlOR1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIEF1ZGlvQ29udGV4dCBjbG9jay5cblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSB0aGUgY3VycmVudFRpbWUgZnJvbSB0aGUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUubm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLmNvbnRleHQubm93KCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSBBdWRpb0NvbnRleHQgY2xvY2suXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gdGhlIGN1cnJlbnRUaW1lIGZyb20gdGhlIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5jb250ZXh0Lm5vdygpO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdElOSEVSSVRBTkNFXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBoYXZlIGEgY2hpbGQgaW5oZXJpdCBhbGwgb2YgVG9uZSdzIChvciBhIHBhcmVudCdzKSBwcm90b3R5cGVcblx0XHQgKiAgdG8gaW5oZXJpdCB0aGUgcGFyZW50J3MgcHJvcGVydGllcywgbWFrZSBzdXJlIHRvIGNhbGxcblx0XHQgKiAgUGFyZW50LmNhbGwodGhpcykgaW4gdGhlIGNoaWxkJ3MgY29uc3RydWN0b3Jcblx0XHQgKlxuXHRcdCAqICBiYXNlZCBvbiBjbG9zdXJlIGxpYnJhcnkncyBpbmhlcml0IGZ1bmN0aW9uXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gXHRjaGlsZFxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19IHBhcmVudCAob3B0aW9uYWwpIHBhcmVudCB0byBpbmhlcml0IGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm8gcGFyZW50IGlzIHN1cHBsaWVkLCB0aGUgY2hpbGRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBpbmhlcml0IGZyb20gVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5leHRlbmQgPSBmdW5jdGlvbiAoY2hpbGQsIHBhcmVudCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYocGFyZW50KSkge1xuXHQgICAgICAgICAgICBwYXJlbnQgPSBUb25lO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBUZW1wQ29uc3RydWN0b3IoKSB7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRlbXBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlO1xuXHQgICAgICAgIGNoaWxkLnByb3RvdHlwZSA9IG5ldyBUZW1wQ29uc3RydWN0b3IoKTtcblx0ICAgICAgICAvKiogQG92ZXJyaWRlICovXG5cdCAgICAgICAgY2hpbGQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY2hpbGQ7XG5cdCAgICAgICAgY2hpbGQuX3N1cGVyID0gcGFyZW50O1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdENPTlRFWFRcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFByaXZhdGUgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgQXVkaW9Db250ZXh0XG5cdFx0ICogIEB0eXBlIHtBdWRpb0NvbnRleHR9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgYXVkaW9Db250ZXh0ID0gbnVsbDtcblx0ICAgIC8qKlxuXHRcdCAqICBBIHN0YXRpYyBwb2ludGVyIHRvIHRoZSBhdWRpbyBjb250ZXh0IGFjY2Vzc2libGUgYXMgVG9uZS5jb250ZXh0LlxuXHRcdCAqICBAdHlwZSB7VG9uZS5Db250ZXh0fVxuXHRcdCAqICBAbmFtZSBjb250ZXh0XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZSwgJ2NvbnRleHQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBhdWRpb0NvbnRleHQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLkNvbnRleHQgJiYgY29udGV4dCBpbnN0YW5jZW9mIFRvbmUuQ29udGV4dCkge1xuXHQgICAgICAgICAgICAgICAgYXVkaW9Db250ZXh0ID0gY29udGV4dDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGF1ZGlvQ29udGV4dCA9IG5ldyBUb25lLkNvbnRleHQoY29udGV4dCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9pbml0aWFsaXplIHRoZSBuZXcgYXVkaW8gY29udGV4dFxuXHQgICAgICAgICAgICBUb25lLkNvbnRleHQuZW1pdCgnaW5pdCcsIGF1ZGlvQ29udGV4dCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAdHlwZSB7VG9uZS5Db250ZXh0fVxuXHRcdCAqICBAbmFtZSBjb250ZXh0XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLnByb3RvdHlwZSwgJ2NvbnRleHQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmNvbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVG9uZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYSBjb250ZXh0IG9uIGluaXQsIGJ1dCBpZiB5b3UgYXJlIHdvcmtpbmdcblx0XHQgKiAgd2l0aCBvdGhlciBsaWJyYXJpZXMgd2hpY2ggYWxzbyBjcmVhdGUgYW4gQXVkaW9Db250ZXh0LCBpdCBjYW4gYmVcblx0XHQgKiAgdXNlZnVsIHRvIHNldCB5b3VyIG93bi4gSWYgeW91IGFyZSBnb2luZyB0byBzZXQgeW91ciBvd24gY29udGV4dCxcblx0XHQgKiAgYmUgc3VyZSB0byBkbyBpdCBhdCB0aGUgc3RhcnQgb2YgeW91ciBjb2RlLCBiZWZvcmUgY3JlYXRpbmcgYW55IG9iamVjdHMuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHBhcmFtIHtBdWRpb0NvbnRleHR9IGN0eCBUaGUgbmV3IGF1ZGlvIGNvbnRleHQgdG8gc2V0XG5cdFx0ICovXG5cdCAgICBUb25lLnNldENvbnRleHQgPSBmdW5jdGlvbiAoY3R4KSB7XG5cdCAgICAgICAgVG9uZS5jb250ZXh0ID0gY3R4O1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFUVFJJQlVURVNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBvZiAxIHByb2Nlc3NpbmcgYmxvY2sgKDEyOCBzYW1wbGVzKVxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBibG9ja1RpbWVcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLnByb3RvdHlwZSwgJ2Jsb2NrVGltZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIDEyOCAvIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIG9mIG9uZSBzYW1wbGUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIHNhbXBsZVRpbWVcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLnByb3RvdHlwZSwgJ3NhbXBsZVRpbWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxIC8gdGhpcy5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgV2hldGhlciBvciBub3QgYWxsIHRoZSB0ZWNobm9sb2dpZXMgdGhhdCBUb25lLmpzIHJlbGllcyBvbiBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJyb3dzZXIuXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBzdXBwb3J0ZWRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLCAnc3VwcG9ydGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaGFzQXVkaW9Db250ZXh0ID0gd2luZG93Lmhhc093blByb3BlcnR5KCdBdWRpb0NvbnRleHQnKSB8fCB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3dlYmtpdEF1ZGlvQ29udGV4dCcpO1xuXHQgICAgICAgICAgICB2YXIgaGFzUHJvbWlzZXMgPSB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ1Byb21pc2UnKTtcblx0ICAgICAgICAgICAgdmFyIGhhc1dvcmtlcnMgPSB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ1dvcmtlcicpO1xuXHQgICAgICAgICAgICByZXR1cm4gaGFzQXVkaW9Db250ZXh0ICYmIGhhc1Byb21pc2VzICYmIGhhc1dvcmtlcnM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQm9vbGVhbiB2YWx1ZSBpZiB0aGUgYXVkaW8gY29udGV4dCBoYXMgYmVlbiBpbml0aWFsaXplZC5cblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG5hbWUgaW5pdGlhbGl6ZWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLCAnaW5pdGlhbGl6ZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBhdWRpb0NvbnRleHQgIT09IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBjb250ZXh0IHdoZW4gaXQgYmVjb21lcyBhdmFpbGFibGVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICByZXNvbHZlICBDYWxsYmFjayB3aGVuIHRoZSBjb250ZXh0IGlzIGluaXRpYWxpemVkXG5cdFx0ICogIEByZXR1cm4gIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5nZXRDb250ZXh0ID0gZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pbml0aWFsaXplZCkge1xuXHQgICAgICAgICAgICByZXNvbHZlKFRvbmUuY29udGV4dCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHJlc0NhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmVzb2x2ZShUb25lLmNvbnRleHQpO1xuXHQgICAgICAgICAgICAgICAgVG9uZS5Db250ZXh0Lm9mZignaW5pdCcsIHJlc0NhbGxiYWNrKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgcmVzQ2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gVG9uZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdmVyc2lvbiBudW1iZXJcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUudmVyc2lvbiA9ICdyMTInO1xuXHQgICAgcmV0dXJuIFRvbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkVtaXR0ZXIgZ2l2ZXMgY2xhc3NlcyB3aGljaCBleHRlbmQgaXRcblx0XHQgKiAgICAgICAgIHRoZSBhYmlsaXR5IHRvIGxpc3RlbiBmb3IgYW5kIGVtaXQgZXZlbnRzLlxuXHRcdCAqICAgICAgICAgSW5zcGlyYXRpb24gYW5kIHJlZmVyZW5jZSBmcm9tIEplcm9tZSBFdGllbm5lJ3MgW01pY3JvRXZlbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9qZXJvbWVldGllbm5lL21pY3JvZXZlbnQuanMpLlxuXHRcdCAqICAgICAgICAgTUlUIChjKSAyMDExIEplcm9tZSBFdGllbm5lLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBDb250YWlucyBhbGwgb2YgdGhlIGV2ZW50cy5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0ge307XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FbWl0dGVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICBCaW5kIGEgY2FsbGJhY2sgdG8gYSBzcGVjaWZpYyBldmVudC5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBldmVudCAgICAgVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGxpc3RlbiBmb3IuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgaXMgZW1pdHRlZFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vc3BsaXQgdGhlIGV2ZW50XG5cdCAgICAgICAgdmFyIGV2ZW50cyA9IGV2ZW50LnNwbGl0KC9cXFcrLyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50TmFtZSA9IGV2ZW50c1tpXTtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9ldmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0gPSBbXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnROYW1lXS5wdXNoKGNhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEJpbmQgYSBjYWxsYmFjayB3aGljaCBpcyBvbmx5IGludm9rZWQgb25jZVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIGV2ZW50ICAgICBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gbGlzdGVuIGZvci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCBpcyBlbWl0dGVkXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcblx0ICAgICAgICB2YXIgYm91bmRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy9pbnZva2UgdGhlIGNhbGxiYWNrXG5cdCAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHRoaXMub2ZmKGV2ZW50LCBib3VuZENhbGxiYWNrKTtcblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgdGhpcy5vbihldmVudCwgYm91bmRDYWxsYmFjayk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXIuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgZXZlbnQgICAgIFRoZSBldmVudCB0byBzdG9wIGxpc3RlbmluZyB0by5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB3aGljaCB3YXMgYm91bmQgdG9cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGV2ZW50IHdpdGggVG9uZS5FbWl0dGVyLm9uLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBubyBjYWxsYmFjayBpcyBnaXZlbiwgYWxsIGNhbGxiYWNrc1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHMgYXJlIHJlbW92ZWQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuXHQgICAgICAgIHZhciBldmVudHMgPSBldmVudC5zcGxpdCgvXFxXKy8pO1xuXHQgICAgICAgIGZvciAodmFyIGV2ID0gMDsgZXYgPCBldmVudHMubGVuZ3RoOyBldisrKSB7XG5cdCAgICAgICAgICAgIGV2ZW50ID0gZXZlbnRzW2V2XTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudCkpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYoY2FsbGJhY2spKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzW2V2ZW50XSA9IFtdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZXZlbnRMaXN0ID0gdGhpcy5fZXZlbnRzW2V2ZW50XTtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50TGlzdC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnRMaXN0W2ldID09PSBjYWxsYmFjaykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRMaXN0LnNwbGljZShpLCAxKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW52b2tlIGFsbCBvZiB0aGUgY2FsbGJhY2tzIGJvdW5kIHRvIHRoZSBldmVudFxuXHRcdCAqICB3aXRoIGFueSBhcmd1bWVudHMgcGFzc2VkIGluLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBldmVudCAgVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZ3MuLi4gVGhlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbnMgbGlzdGVuaW5nLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cykge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LmFwcGx5KG51bGwsIGFyZ3VtZW50cykuc2xpY2UoMSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9ldmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnQpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXZlbnRMaXN0ID0gdGhpcy5fZXZlbnRzW2V2ZW50XS5zbGljZSgwKTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBldmVudExpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudExpc3RbaV0uYXBwbHkodGhpcywgYXJncyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBFbWl0dGVyIGZ1bmN0aW9ucyAob24vb2ZmL2VtaXQpIHRvIHRoZSBvYmplY3Rcblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fEZ1bmN0aW9ufSAgb2JqZWN0ICBUaGUgb2JqZWN0IG9yIGNsYXNzIHRvIGV4dGVuZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW1pdHRlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5taXhpbiA9IGZ1bmN0aW9uIChvYmplY3QpIHtcblx0ICAgICAgICB2YXIgZnVuY3Rpb25zID0gW1xuXHQgICAgICAgICAgICAnb24nLFxuXHQgICAgICAgICAgICAnb25jZScsXG5cdCAgICAgICAgICAgICdvZmYnLFxuXHQgICAgICAgICAgICAnZW1pdCdcblx0ICAgICAgICBdO1xuXHQgICAgICAgIG9iamVjdC5fZXZlbnRzID0ge307XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGZ1bmMgPSBmdW5jdGlvbnNbaV07XG5cdCAgICAgICAgICAgIHZhciBlbWl0dGVyRnVuYyA9IFRvbmUuRW1pdHRlci5wcm90b3R5cGVbZnVuY107XG5cdCAgICAgICAgICAgIG9iamVjdFtmdW5jXSA9IGVtaXR0ZXJGdW5jO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gVG9uZS5FbWl0dGVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVtaXR0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIFRpbWVsaW5lIGNsYXNzIGZvciBzY2hlZHVsaW5nIGFuZCBtYWludGFpbmluZyBzdGF0ZVxuXHRcdCAqICAgICAgICAgYWxvbmcgYSB0aW1lbGluZS4gQWxsIGV2ZW50cyBtdXN0IGhhdmUgYSBcInRpbWVcIiBwcm9wZXJ0eS5cblx0XHQgKiAgICAgICAgIEludGVybmFsbHksIGV2ZW50cyBhcmUgc3RvcmVkIGluIHRpbWUgb3JkZXIgZm9yIGZhc3Rcblx0XHQgKiAgICAgICAgIHJldHJpZXZhbC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IFttZW1vcnk9SW5maW5pdHldIFRoZSBudW1iZXIgb2YgcHJldmlvdXMgZXZlbnRzIHRoYXQgYXJlIHJldGFpbmVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ21lbW9yeSddLCBUb25lLlRpbWVsaW5lKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIHNjaGVkdWxlZCB0aW1lbGluZSBldmVudHNcblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lbGluZSA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtZW1vcnkgb2YgdGhlIHRpbWVsaW5lLCBpLmUuXG5cdFx0XHQgKiAgaG93IG1hbnkgZXZlbnRzIGluIHRoZSBwYXN0IGl0IHdpbGwgcmV0YWluXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tZW1vcnkgPSBvcHRpb25zLm1lbW9yeTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpbWVsaW5lKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLmRlZmF1bHRzID0geyAnbWVtb3J5JzogSW5maW5pdHkgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVGltZWxpbmUjXG5cdFx0ICogIEBuYW1lIGxlbmd0aFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRpbWVsaW5lLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lLmxlbmd0aDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnNlcnQgYW4gZXZlbnQgb2JqZWN0IG9udG8gdGhlIHRpbWVsaW5lLiBFdmVudHMgbXVzdCBoYXZlIGEgXCJ0aW1lXCIgYXR0cmlidXRlLlxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R9ICBldmVudCAgVGhlIGV2ZW50IG9iamVjdCB0byBpbnNlcnQgaW50byB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgLy90aGUgZXZlbnQgbmVlZHMgdG8gaGF2ZSBhIHRpbWUgYXR0cmlidXRlXG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihldmVudC50aW1lKSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuVGltZWxpbmU6IGV2ZW50cyBtdXN0IGhhdmUgYSB0aW1lIGF0dHJpYnV0ZScpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBldmVudC50aW1lID0gZXZlbnQudGltZS52YWx1ZU9mKCk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNwbGljZShpbmRleCArIDEsIDAsIGV2ZW50KTtcblx0ICAgICAgICAvL2lmIHRoZSBsZW5ndGggaXMgbW9yZSB0aGFuIHRoZSBtZW1vcnksIHJlbW92ZSB0aGUgcHJldmlvdXMgb25lc1xuXHQgICAgICAgIGlmICh0aGlzLmxlbmd0aCA+IHRoaXMubWVtb3J5KSB7XG5cdCAgICAgICAgICAgIHZhciBkaWZmID0gdGhpcy5sZW5ndGggLSB0aGlzLm1lbW9yeTtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUuc3BsaWNlKDAsIGRpZmYpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGFuIGV2ZW50IGZyb20gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R9ICBldmVudCAgVGhlIGV2ZW50IG9iamVjdCB0byByZW1vdmUgZnJvbSB0aGUgbGlzdC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3RpbWVsaW5lLmluZGV4T2YoZXZlbnQpO1xuXHQgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgbmVhcmVzdCBldmVudCB3aG9zZSB0aW1lIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGNvbXBhcmF0b3IgV2hpY2ggdmFsdWUgaW4gdGhlIG9iamVjdCB0byBjb21wYXJlXG5cdFx0ICogIEByZXR1cm5zIHtPYmplY3R9IFRoZSBldmVudCBvYmplY3Qgc2V0IGFmdGVyIHRoYXQgdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgY29tcGFyYXRvciA9IFRvbmUuZGVmYXVsdEFyZyhjb21wYXJhdG9yLCAndGltZScpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lLCBjb21wYXJhdG9yKTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtpbmRleF07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGZpcnN0IGV2ZW50IGluIHRoZSB0aW1lbGluZSB3aXRob3V0IHJlbW92aW5nIGl0XG5cdFx0ICogIEByZXR1cm5zIHtPYmplY3R9IFRoZSBmaXJzdCBldmVudCBvYmplY3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLnBlZWsgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lWzBdO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGZpcnN0IGV2ZW50IGluIHRoZSB0aW1lbGluZSBhbmQgcmVtb3ZlIGl0XG5cdFx0ICogIEByZXR1cm5zIHtPYmplY3R9IFRoZSBmaXJzdCBldmVudCBvYmplY3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLnNoaWZ0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZS5zaGlmdCgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGV2ZW50IHdoaWNoIGlzIHNjaGVkdWxlZCBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGNvbXBhcmF0b3IgV2hpY2ggdmFsdWUgaW4gdGhlIG9iamVjdCB0byBjb21wYXJlXG5cdFx0ICogIEByZXR1cm5zIHtPYmplY3R9IFRoZSBldmVudCBvYmplY3QgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmdldEFmdGVyID0gZnVuY3Rpb24gKHRpbWUsIGNvbXBhcmF0b3IpIHtcblx0ICAgICAgICBjb21wYXJhdG9yID0gVG9uZS5kZWZhdWx0QXJnKGNvbXBhcmF0b3IsICd0aW1lJyk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUsIGNvbXBhcmF0b3IpO1xuXHQgICAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl90aW1lbGluZS5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4ICsgMV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGV2ZW50IGJlZm9yZSB0aGUgZXZlbnQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBjb21wYXJhdG9yIFdoaWNoIHZhbHVlIGluIHRoZSBvYmplY3QgdG8gY29tcGFyZVxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXZlbnQgb2JqZWN0IGJlZm9yZSB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZ2V0QmVmb3JlID0gZnVuY3Rpb24gKHRpbWUsIGNvbXBhcmF0b3IpIHtcblx0ICAgICAgICBjb21wYXJhdG9yID0gVG9uZS5kZWZhdWx0QXJnKGNvbXBhcmF0b3IsICd0aW1lJyk7XG5cdCAgICAgICAgdmFyIGxlbiA9IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDtcblx0ICAgICAgICAvL2lmIGl0J3MgYWZ0ZXIgdGhlIGxhc3QgaXRlbSwgcmV0dXJuIHRoZSBsYXN0IGl0ZW1cblx0ICAgICAgICBpZiAobGVuID4gMCAmJiB0aGlzLl90aW1lbGluZVtsZW4gLSAxXVtjb21wYXJhdG9yXSA8IHRpbWUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2xlbiAtIDFdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSwgY29tcGFyYXRvcik7XG5cdCAgICAgICAgaWYgKGluZGV4IC0gMSA+PSAwKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtpbmRleCAtIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGV2ZW50cyBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIGlmICh0aGlzLl90aW1lbGluZS5sZW5ndGggPiAxKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaChhZnRlcik7XG5cdCAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbaW5kZXhdLnRpbWUgPT09IGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9nZXQgdGhlIGZpcnN0IGl0ZW0gd2l0aCB0aGF0IHRpbWVcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVtpXS50aW1lID09PSBhZnRlcikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSB0aGlzLl90aW1lbGluZS5zbGljZSgwLCBpbmRleCk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gdGhpcy5fdGltZWxpbmUuc2xpY2UoMCwgaW5kZXggKyAxKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3RpbWVsaW5lLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgICAgICAvL3RoZSBmaXJzdCBpdGVtJ3MgdGltZVxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbMF0udGltZSA+PSBhZnRlcikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBbXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGV2ZW50cyBiZWZvcmUgb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIGNhbmNlbCBiZWZvcmUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5jYW5jZWxCZWZvcmUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IHRoaXMuX3RpbWVsaW5lLnNsaWNlKGluZGV4ICsgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIHByZXZpb3VzIGV2ZW50IGlmIHRoZXJlIGlzIG9uZS4gbnVsbCBvdGhlcndpc2Vcblx0XHQgKiBAcGFyYW0gIHtPYmplY3R9IGV2ZW50IFRoZSBldmVudCB0byBmaW5kIHRoZSBwcmV2aW91cyBvbmUgb2Zcblx0XHQgKiBAcmV0dXJuIHtPYmplY3R9ICAgICAgIFRoZSBldmVudCByaWdodCBiZWZvcmUgdGhlIGdpdmVuIGV2ZW50XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5wcmV2aW91c0V2ZW50ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fdGltZWxpbmUuaW5kZXhPZihldmVudCk7XG5cdCAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXggLSAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIERvZXMgYSBiaW5hcnkgc2VhcmNoIG9uIHRoZSB0aW1lbGluZSBhcnJheSBhbmQgcmV0dXJucyB0aGVcblx0XHQgKiAgbmVhcmVzdCBldmVudCBpbmRleCB3aG9zZSB0aW1lIGlzIGFmdGVyIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBJZiBhIHRpbWUgaXMgc2VhcmNoZWQgYmVmb3JlIHRoZSBmaXJzdCBpbmRleCBpbiB0aGUgdGltZWxpbmUsIC0xIGlzIHJldHVybmVkLlxuXHRcdCAqICBJZiB0aGUgdGltZSBpcyBhZnRlciB0aGUgZW5kLCB0aGUgaW5kZXggb2YgdGhlIGxhc3QgaXRlbSBpcyByZXR1cm5lZC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBjb21wYXJhdG9yIFdoaWNoIHZhbHVlIGluIHRoZSBvYmplY3QgdG8gY29tcGFyZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSB0aGUgaW5kZXggaW4gdGhlIHRpbWVsaW5lIGFycmF5XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5fc2VhcmNoID0gZnVuY3Rpb24gKHRpbWUsIGNvbXBhcmF0b3IpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdGltZWxpbmUubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAtMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgY29tcGFyYXRvciA9IFRvbmUuZGVmYXVsdEFyZyhjb21wYXJhdG9yLCAndGltZScpO1xuXHQgICAgICAgIHZhciBiZWdpbm5pbmcgPSAwO1xuXHQgICAgICAgIHZhciBsZW4gPSB0aGlzLl90aW1lbGluZS5sZW5ndGg7XG5cdCAgICAgICAgdmFyIGVuZCA9IGxlbjtcblx0ICAgICAgICBpZiAobGVuID4gMCAmJiB0aGlzLl90aW1lbGluZVtsZW4gLSAxXVtjb21wYXJhdG9yXSA8PSB0aW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBsZW4gLSAxO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB3aGlsZSAoYmVnaW5uaW5nIDwgZW5kKSB7XG5cdCAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgbWlkcG9pbnQgZm9yIHJvdWdobHkgZXF1YWwgcGFydGl0aW9uXG5cdCAgICAgICAgICAgIHZhciBtaWRQb2ludCA9IE1hdGguZmxvb3IoYmVnaW5uaW5nICsgKGVuZCAtIGJlZ2lubmluZykgLyAyKTtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fdGltZWxpbmVbbWlkUG9pbnRdO1xuXHQgICAgICAgICAgICB2YXIgbmV4dEV2ZW50ID0gdGhpcy5fdGltZWxpbmVbbWlkUG9pbnQgKyAxXTtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50W2NvbXBhcmF0b3JdID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAvL2Nob29zZSB0aGUgbGFzdCBvbmUgdGhhdCBoYXMgdGhlIHNhbWUgdGltZVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IG1pZFBvaW50OyBpIDwgdGhpcy5fdGltZWxpbmUubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdGVzdEV2ZW50ID0gdGhpcy5fdGltZWxpbmVbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RFdmVudFtjb21wYXJhdG9yXSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBtaWRQb2ludCA9IGk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG1pZFBvaW50O1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50W2NvbXBhcmF0b3JdIDwgdGltZSAmJiBuZXh0RXZlbnRbY29tcGFyYXRvcl0gPiB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbWlkUG9pbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRbY29tcGFyYXRvcl0gPiB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAvL3NlYXJjaCBsb3dlclxuXHQgICAgICAgICAgICAgICAgZW5kID0gbWlkUG9pbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvL3NlYXJjaCB1cHBlclxuXHQgICAgICAgICAgICAgICAgYmVnaW5uaW5nID0gbWlkUG9pbnQgKyAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAtMTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgaXRlcmF0b3IuIEFwcGxpZXMgZXh0cmEgc2FmZXR5IGNoZWNrcyBmb3Jcblx0XHQgKiAgcmVtb3ZpbmcgaXRlbXMgZnJvbSB0aGUgYXJyYXkuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2tcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gICAgbG93ZXJCb3VuZFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSAgICB1cHBlckJvdW5kXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5faXRlcmF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgbG93ZXJCb3VuZCwgdXBwZXJCb3VuZCkge1xuXHQgICAgICAgIGxvd2VyQm91bmQgPSBUb25lLmRlZmF1bHRBcmcobG93ZXJCb3VuZCwgMCk7XG5cdCAgICAgICAgdXBwZXJCb3VuZCA9IFRvbmUuZGVmYXVsdEFyZyh1cHBlckJvdW5kLCB0aGlzLl90aW1lbGluZS5sZW5ndGggLSAxKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5zbGljZShsb3dlckJvdW5kLCB1cHBlckJvdW5kICsgMSkuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBldmVudCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5XG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGF0IG9yIGJlZm9yZSB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hCZWZvcmUgPSBmdW5jdGlvbiAodGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL2l0ZXJhdGUgb3ZlciB0aGUgaXRlbXMgaW4gcmV2ZXJzZSBzbyB0aGF0IHJlbW92aW5nIGFuIGl0ZW0gZG9lc24ndCBicmVhayB0aGluZ3Ncblx0ICAgICAgICB2YXIgdXBwZXJCb3VuZCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBpZiAodXBwZXJCb3VuZCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgMCwgdXBwZXJCb3VuZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQWZ0ZXIgPSBmdW5jdGlvbiAodGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL2l0ZXJhdGUgb3ZlciB0aGUgaXRlbXMgaW4gcmV2ZXJzZSBzbyB0aGF0IHJlbW92aW5nIGFuIGl0ZW0gZG9lc24ndCBicmVhayB0aGluZ3Ncblx0ICAgICAgICB2YXIgbG93ZXJCb3VuZCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCBsb3dlckJvdW5kICsgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBiZXR3ZWVuIHRoZSBzdGFydFRpbWUgYW5kIGVuZFRpbWUuIFxuXHRcdCAqICBUaGUgdGltZXJhbmdlIGlzIGluY2x1c2l2ZSBvZiB0aGUgc3RhcnRUaW1lLCBidXQgZXhjbHVzaXZlIG9mIHRoZSBlbmRUaW1lLiBcblx0XHQgKiAgcmFuZ2UgPSBbc3RhcnRUaW1lLCBlbmRUaW1lKS4gXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHN0YXJ0VGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGVuZFRpbWUgVGhlIGVuZCBvZiB0aGUgdGVzdCBpbnRlcnZhbC4gXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hCZXR3ZWVuID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgZW5kVGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICB2YXIgbG93ZXJCb3VuZCA9IHRoaXMuX3NlYXJjaChzdGFydFRpbWUpO1xuXHQgICAgICAgIHZhciB1cHBlckJvdW5kID0gdGhpcy5fc2VhcmNoKGVuZFRpbWUpO1xuXHQgICAgICAgIGlmIChsb3dlckJvdW5kICE9PSAtMSAmJiB1cHBlckJvdW5kICE9PSAtMSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbbG93ZXJCb3VuZF0udGltZSAhPT0gc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICBsb3dlckJvdW5kICs9IDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9leGNsdXNpdmUgb2YgdGhlIGVuZCB0aW1lXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVt1cHBlckJvdW5kXS50aW1lID09PSBlbmRUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICB1cHBlckJvdW5kIC09IDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgbG93ZXJCb3VuZCwgdXBwZXJCb3VuZCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChsb3dlckJvdW5kID09PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCAwLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhdCBvciBhZnRlciB0aGUgZ2l2ZW4gdGltZS4gU2ltaWxhciB0b1xuXHRcdCAqICBmb3JFYWNoQWZ0ZXIsIGJ1dCBpbmNsdWRlcyB0aGUgaXRlbShzKSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hGcm9tID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIGxvd2VyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgLy93b3JrIGJhY2t3YXJkcyB1bnRpbCB0aGUgZXZlbnQgdGltZSBpcyBsZXNzIHRoYW4gdGltZVxuXHQgICAgICAgIHdoaWxlIChsb3dlckJvdW5kID49IDAgJiYgdGhpcy5fdGltZWxpbmVbbG93ZXJCb3VuZF0udGltZSA+PSB0aW1lKSB7XG5cdCAgICAgICAgICAgIGxvd2VyQm91bmQtLTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgbG93ZXJCb3VuZCArIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hBdFRpbWUgPSBmdW5jdGlvbiAodGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL2l0ZXJhdGUgb3ZlciB0aGUgaXRlbXMgaW4gcmV2ZXJzZSBzbyB0aGF0IHJlbW92aW5nIGFuIGl0ZW0gZG9lc24ndCBicmVhayB0aGluZ3Ncblx0ICAgICAgICB2YXIgdXBwZXJCb3VuZCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBpZiAodXBwZXJCb3VuZCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhpcy5faXRlcmF0ZShmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChldmVudC50aW1lID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBldmVudCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0sIDAsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlRpbWVsaW5lfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWVsaW5lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIXdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnT2ZmbGluZUF1ZGlvQ29udGV4dCcpICYmIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnd2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dCcpKSB7XG5cdCAgICAgICAgICAgIHdpbmRvdy5PZmZsaW5lQXVkaW9Db250ZXh0ID0gd2luZG93LndlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vcmV0dXJucyBwcm9taXNlP1xuXHQgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IE9mZmxpbmVBdWRpb0NvbnRleHQoMSwgMSwgNDQxMDApO1xuXHQgICAgICAgIHZhciByZXQgPSBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7XG5cdCAgICAgICAgaWYgKCEocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcblx0ICAgICAgICAgICAgT2ZmbGluZUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuX25hdGl2ZV9zdGFydFJlbmRlcmluZyA9IE9mZmxpbmVBdWRpb0NvbnRleHQucHJvdG90eXBlLnN0YXJ0UmVuZGVyaW5nO1xuXHQgICAgICAgICAgICBPZmZsaW5lQXVkaW9Db250ZXh0LnByb3RvdHlwZS5zdGFydFJlbmRlcmluZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoZG9uZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMub25jb21wbGV0ZSA9IGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZS5yZW5kZXJlZEJ1ZmZlcik7XG5cdCAgICAgICAgICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9uYXRpdmVfc3RhcnRSZW5kZXJpbmcoKTtcblx0ICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIXdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnQXVkaW9Db250ZXh0JykgJiYgd2luZG93Lmhhc093blByb3BlcnR5KCd3ZWJraXRBdWRpb0NvbnRleHQnKSkge1xuXHQgICAgICAgICAgICB3aW5kb3cuQXVkaW9Db250ZXh0ID0gd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9ub3QgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIGJ1dCBvbmx5IGFuIEFQSSBwbGFjZWhvbGRlclxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jbG9zZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNGdW5jdGlvbih0aGlzLnN1c3BlbmQpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5zdXNwZW5kKCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vbm90IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50XG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLnJlc3VtZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jcmVhdGVHYWluXG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUdhaW4gJiYgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluTm9kZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUdhaW4gPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUdhaW5Ob2RlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NyZWF0ZURlbGF5XG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5ICYmIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlRGVsYXlOb2RlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlRGVsYXkgPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5Tm9kZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy90ZXN0IGRlY29kZUF1ZGlvRGF0YSByZXR1cm5zIGEgcHJvbWlzZVxuXHQgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb2hheW9uYW8vd2ViLWF1ZGlvLWFwaS1zaGltL2Jsb2IvbWFzdGVyL3NyYy9BdWRpb0NvbnRleHQuanNcblx0ICAgICAgICAvLyBNSVQgTGljZW5zZSAoYykgMjAxNSBAbW9oYXlvbmFvXG5cdCAgICAgICAgdmFyIGRlY29kZUF1ZGlvRGF0YVByb21pc2UgPSBmYWxzZTtcblx0ICAgICAgICB2YXIgb2ZmbGluZUNvbnRleHQgPSBuZXcgT2ZmbGluZUF1ZGlvQ29udGV4dCgxLCAxLCA0NDEwMCk7XG5cdCAgICAgICAgdmFyIGF1ZGlvRGF0YSA9IG5ldyBVaW50MzJBcnJheShbXG5cdCAgICAgICAgICAgIDExNzkwMTE0MTAsXG5cdCAgICAgICAgICAgIDQ4LFxuXHQgICAgICAgICAgICAxMTYzMjgwNzI3LFxuXHQgICAgICAgICAgICA1NDQ1MDEwOTQsXG5cdCAgICAgICAgICAgIDE2LFxuXHQgICAgICAgICAgICAxMzEwNzMsXG5cdCAgICAgICAgICAgIDQ0MTAwLFxuXHQgICAgICAgICAgICAxNzY0MDAsXG5cdCAgICAgICAgICAgIDEwNDg1ODAsXG5cdCAgICAgICAgICAgIDE2MzUwMTcwNjAsXG5cdCAgICAgICAgICAgIDgsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDBcblx0ICAgICAgICBdKS5idWZmZXI7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgdmFyIHJldCA9IG9mZmxpbmVDb250ZXh0LmRlY29kZUF1ZGlvRGF0YShhdWRpb0RhdGEpO1xuXHQgICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHQgICAgICAgICAgICAgICAgZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSA9IHRydWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgIGRlY29kZUF1ZGlvRGF0YVByb21pc2UgPSBmYWxzZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCFkZWNvZGVBdWRpb0RhdGFQcm9taXNlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuX25hdGl2ZV9kZWNvZGVBdWRpb0RhdGEgPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmRlY29kZUF1ZGlvRGF0YTtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5kZWNvZGVBdWRpb0RhdGEgPSBmdW5jdGlvbiAoYXVkaW9EYXRhKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHN1Y2Nlc3MsIGVycm9yKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmF0aXZlX2RlY29kZUF1ZGlvRGF0YShhdWRpb0RhdGEsIHN1Y2Nlc3MsIGVycm9yKTtcblx0ICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgQXVkaW9Db250ZXh0LlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvQ29udGV4dD19IGNvbnRleHQgb3B0aW9uYWxseSBwYXNzIGluIGEgY29udGV4dFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnY29udGV4dCddLCBUb25lLkNvbnRleHQpO1xuXHQgICAgICAgIGlmICghb3B0aW9ucy5jb250ZXh0KSB7XG5cdCAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dCA9IG5ldyB3aW5kb3cuQXVkaW9Db250ZXh0KCk7XG5cdCAgICAgICAgICAgIGlmICghb3B0aW9ucy5jb250ZXh0KSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBjcmVhdGUgQXVkaW9Db250ZXh0LiBQb3NzaWJseSB0b28gbWFueSBBdWRpb0NvbnRleHRzIHJ1bm5pbmcgYWxyZWFkeS4nKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0O1xuXHQgICAgICAgIC8vIGV4dGVuZCBhbGwgb2YgdGhlIG1ldGhvZHNcblx0ICAgICAgICBmb3IgKHZhciBwcm9wIGluIHRoaXMuX2NvbnRleHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGVmaW5lUHJvcGVydHkodGhpcy5fY29udGV4dCwgcHJvcCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWZhdWx0IGxhdGVuY3kgaGludFxuXHRcdFx0ICogIEB0eXBlICB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sYXRlbmN5SGludCA9IG9wdGlvbnMubGF0ZW5jeUhpbnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBjb25zdGFudHMgQXVkaW9CdWZmZXJTb3VyY2VOb2Rlc1xuXHRcdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb25zdGFudHMgPSB7fTtcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8vIFdPUktFUlxuXHQgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiB0aW1lIGV2ZW50cyBhcmUgc2NoZWR1bGVkXG5cdFx0XHQgKiAgaW50byB0aGUgZnV0dXJlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvb2tBaGVhZCA9IG9wdGlvbnMubG9va0FoZWFkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgcmVmZXJlbmNlIHRvIHRoZSBhY3R1YWwgY29tcHV0ZWQgdXBkYXRlIGludGVydmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbXB1dGVkVXBkYXRlSW50ZXJ2YWwgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgcmVsaWFibGUgY2FsbGJhY2sgbWV0aG9kXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge1RpY2tlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpY2tlciA9IG5ldyBUaWNrZXIodGhpcy5lbWl0LmJpbmQodGhpcywgJ3RpY2snKSwgb3B0aW9ucy5jbG9ja1NvdXJjZSwgb3B0aW9ucy51cGRhdGVJbnRlcnZhbCk7XG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvLyBUSU1FT1VUU1xuXHQgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxsIG9mIHRoZSBzZXRUaW1lb3V0IGV2ZW50cy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRzID0gbmV3IFRvbmUuVGltZWxpbmUoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGltZW91dCBpZCBjb3VudGVyXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZW91dElkcyA9IDA7XG5cdCAgICAgICAgdGhpcy5vbigndGljaycsIHRoaXMuX3RpbWVvdXRMb29wLmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ29udGV4dCwgVG9uZS5FbWl0dGVyKTtcblx0ICAgIFRvbmUuRW1pdHRlci5taXhpbihUb25lLkNvbnRleHQpO1xuXHQgICAgLyoqXG5cdFx0ICogZGVmYXVsdHNcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnY2xvY2tTb3VyY2UnOiAnd29ya2VyJyxcblx0ICAgICAgICAnbGF0ZW5jeUhpbnQnOiAnaW50ZXJhY3RpdmUnLFxuXHQgICAgICAgICdsb29rQWhlYWQnOiAwLjEsXG5cdCAgICAgICAgJ3VwZGF0ZUludGVydmFsJzogMC4wM1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZpbmUgYSBwcm9wZXJ0eSBvbiB0aGlzIFRvbmUuQ29udGV4dC5cblx0XHQgKiAgVGhpcyBpcyB1c2VkIHRvIGV4dGVuZCB0aGUgbmF0aXZlIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAcGFyYW0gIHtBdWRpb0NvbnRleHR9ICBjb250ZXh0XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHByb3Bcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuX2RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKGNvbnRleHQsIHByb3ApIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXNbcHJvcF0pKSB7XG5cdCAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wLCB7XG5cdCAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHRbcHJvcF0gPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRbcHJvcF0uYmluZChjb250ZXh0KTtcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY29udGV4dFtwcm9wXSA9IHZhbDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCBhdWRpbyBjb250ZXh0IHRpbWVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUubm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0LmN1cnJlbnRUaW1lICsgdGhpcy5sb29rQWhlYWQ7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFByb21pc2Ugd2hpY2ggaXMgaW52b2tlZCB3aGVuIHRoZSBjb250ZXh0IGlzIHJ1bm5pbmcuXG5cdFx0ICogIFRyaWVzIHRvIHJlc3VtZSB0aGUgY29udGV4dCBpZiBpdCdzIG5vdCBzdGFydGVkLlxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUucmVhZHkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChkb25lKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9jb250ZXh0LnN0YXRlID09PSAncnVubmluZycpIHtcblx0ICAgICAgICAgICAgICAgIGRvbmUoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQucmVzdW1lKCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQcm9taXNlIHdoaWNoIGlzIGludm9rZWQgd2hlbiB0aGUgY29udGV4dCBpcyBydW5uaW5nLlxuXHRcdCAqICBUcmllcyB0byByZXN1bWUgdGhlIGNvbnRleHQgaWYgaXQncyBub3Qgc3RhcnRlZC5cblx0XHQgKiAgQHJldHVybiAge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0LmNsb3NlKCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQ29udGV4dC5lbWl0KCdjbG9zZScsIHRoaXMpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdlbmVyYXRlIGEgbG9vcGVkIGJ1ZmZlciBhdCBzb21lIGNvbnN0YW50IHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB2YWxcblx0XHQgKiAgQHJldHVybiAge0J1ZmZlclNvdXJjZU5vZGV9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmdldENvbnN0YW50ID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9jb25zdGFudHNbdmFsXSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uc3RhbnRzW3ZhbF07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuX2NvbnRleHQuY3JlYXRlQnVmZmVyKDEsIDEyOCwgdGhpcy5fY29udGV4dC5zYW1wbGVSYXRlKTtcblx0ICAgICAgICAgICAgdmFyIGFyciA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGFycltpXSA9IHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YXIgY29uc3RhbnQgPSB0aGlzLl9jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgICAgICBjb25zdGFudC5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgICAgICBjb25zdGFudC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICAgICAgY29uc3RhbnQuYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgICAgICBjb25zdGFudC5sb29wID0gdHJ1ZTtcblx0ICAgICAgICAgICAgY29uc3RhbnQuc3RhcnQoMCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50c1t2YWxdID0gY29uc3RhbnQ7XG5cdCAgICAgICAgICAgIHJldHVybiBjb25zdGFudDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcml2YXRlIGxvb3Agd2hpY2gga2VlcHMgdHJhY2sgb2YgdGhlIGNvbnRleHQgc2NoZWR1bGVkIHRpbWVvdXRzXG5cdFx0ICogIElzIGludm9rZWQgZnJvbSB0aGUgY2xvY2sgc291cmNlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLl90aW1lb3V0TG9vcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICB3aGlsZSAodGhpcy5fdGltZW91dHMgJiYgdGhpcy5fdGltZW91dHMubGVuZ3RoICYmIHRoaXMuX3RpbWVvdXRzLnBlZWsoKS50aW1lIDw9IG5vdykge1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lb3V0cy5zaGlmdCgpLmNhbGxiYWNrKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIHNldFRpbWVvdXQgd2hpY2ggaXMgZ2F1cmVudGVlZCBieSB0aGUgY2xvY2sgc291cmNlLlxuXHRcdCAqICBBbHNvIHJ1bnMgaW4gdGhlIG9mZmxpbmUgY29udGV4dC5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBmbiAgICAgICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlXG5cdFx0ICogIEBwYXJhbSAge1NlY29uZHN9ICAgIHRpbWVvdXQgIFRoZSB0aW1lb3V0IGluIHNlY29uZHNcblx0XHQgKiAgQHJldHVybnMge051bWJlcn0gSUQgdG8gdXNlIHdoZW4gaW52b2tpbmcgVG9uZS5Db250ZXh0LmNsZWFyVGltZW91dFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKGZuLCB0aW1lb3V0KSB7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dElkcysrO1xuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRzLmFkZCh7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrOiBmbixcblx0ICAgICAgICAgICAgdGltZTogbm93ICsgdGltZW91dCxcblx0ICAgICAgICAgICAgaWQ6IHRoaXMuX3RpbWVvdXRJZHNcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGltZW91dElkcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYXJzIGEgcHJldmlvdXNseSBzY2hlZHVsZWQgdGltZW91dCB3aXRoIFRvbmUuY29udGV4dC5zZXRUaW1lb3V0XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGlkICBUaGUgSUQgcmV0dXJuZWQgZnJvbSBzZXRUaW1lb3V0XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkNvbnRleHR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmNsZWFyVGltZW91dCA9IGZ1bmN0aW9uIChpZCkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChldmVudC5pZCA9PT0gaWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKGV2ZW50KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBIb3cgb2Z0ZW4gdGhlIFdlYiBXb3JrZXIgY2FsbGJhY2sgaXMgaW52b2tlZC5cblx0XHQgKiAgVGhpcyBudW1iZXIgY29ycmVzcG9uZHMgdG8gaG93IHJlc3BvbnNpdmUgdGhlIHNjaGVkdWxpbmdcblx0XHQgKiAgY2FuIGJlLiBDb250ZXh0LnVwZGF0ZUludGVydmFsICsgQ29udGV4dC5sb29rQWhlYWQgZ2l2ZXMgeW91IHRoZVxuXHRcdCAqICB0b3RhbCBsYXRlbmN5IGJldHdlZW4gc2NoZWR1bGluZyBhbiBldmVudCBhbmQgaGVhcmluZyBpdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ29udGV4dCNcblx0XHQgKiAgQG5hbWUgdXBkYXRlSW50ZXJ2YWxcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNvbnRleHQucHJvdG90eXBlLCAndXBkYXRlSW50ZXJ2YWwnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWNrZXIudXBkYXRlSW50ZXJ2YWw7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIudXBkYXRlSW50ZXJ2YWwgPSBpbnRlcnZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGF0IHRoZSBzb3VyY2Ugb2YgdGhlIGNsb2NrIGlzLCBlaXRoZXIgXCJ3b3JrZXJcIiAoV2ViIFdvcmtlciBbZGVmYXVsdF0pLFxuXHRcdCAqICBcInRpbWVvdXRcIiAoc2V0VGltZW91dCksIG9yIFwib2ZmbGluZVwiIChub25lKS5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ29udGV4dCNcblx0XHQgKiAgQG5hbWUgY2xvY2tTb3VyY2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNvbnRleHQucHJvdG90eXBlLCAnY2xvY2tTb3VyY2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWNrZXIudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja2VyLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0eXBlIG9mIHBsYXliYWNrLCB3aGljaCBhZmZlY3RzIHRyYWRlb2ZmcyBiZXR3ZWVuIGF1ZGlvXG5cdFx0ICogIG91dHB1dCBsYXRlbmN5IGFuZCByZXNwb25zaXZlbmVzcy5cblx0XHQgKlxuXHRcdCAqICBJbiBhZGRpdGlvbiB0byBzZXR0aW5nIHRoZSB2YWx1ZSBpbiBzZWNvbmRzLCB0aGUgbGF0ZW5jeUhpbnQgYWxzb1xuXHRcdCAqICBhY2NlcHRzIHRoZSBzdHJpbmdzIFwiaW50ZXJhY3RpdmVcIiAocHJpb3JpdGl6ZXMgbG93IGxhdGVuY3kpLFxuXHRcdCAqICBcInBsYXliYWNrXCIgKHByaW9yaXRpemVzIHN1c3RhaW5lZCBwbGF5YmFjayksIFwiYmFsYW5jZWRcIiAoYmFsYW5jZXNcblx0XHQgKiAgbGF0ZW5jeSBhbmQgcGVyZm9ybWFuY2UpLCBhbmQgXCJmYXN0ZXN0XCIgKGxvd2VzdCBsYXRlbmN5LCBtaWdodCBnbGl0Y2ggbW9yZSBvZnRlbikuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd8U2Vjb25kc31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ29udGV4dCNcblx0XHQgKiAgQG5hbWUgbGF0ZW5jeUhpbnRcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NldCB0aGUgbG9va0FoZWFkIHRvIDAuMyBzZWNvbmRzXG5cdFx0ICogVG9uZS5jb250ZXh0LmxhdGVuY3lIaW50ID0gMC4zO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udGV4dC5wcm90b3R5cGUsICdsYXRlbmN5SGludCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xhdGVuY3lIaW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaGludCkge1xuXHQgICAgICAgICAgICB2YXIgbG9va0FoZWFkID0gaGludDtcblx0ICAgICAgICAgICAgdGhpcy5fbGF0ZW5jeUhpbnQgPSBoaW50O1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc1N0cmluZyhoaW50KSkge1xuXHQgICAgICAgICAgICAgICAgc3dpdGNoIChoaW50KSB7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdpbnRlcmFjdGl2ZSc6XG5cdCAgICAgICAgICAgICAgICAgICAgbG9va0FoZWFkID0gMC4xO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubGF0ZW5jeUhpbnQgPSBoaW50O1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAncGxheWJhY2snOlxuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuODtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2JhbGFuY2VkJzpcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjI1O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubGF0ZW5jeUhpbnQgPSBoaW50O1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnZmFzdGVzdCc6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9ICdpbnRlcmFjdGl2ZSc7XG5cdCAgICAgICAgICAgICAgICAgICAgbG9va0FoZWFkID0gMC4wMTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmxvb2tBaGVhZCA9IGxvb2tBaGVhZDtcblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVJbnRlcnZhbCA9IGxvb2tBaGVhZCAvIDM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVW5saWtlIG90aGVyIGRpc3Bvc2UgbWV0aG9kcywgdGhpcyByZXR1cm5zIGEgUHJvbWlzZVxuXHRcdCAqICB3aGljaCBleGVjdXRlcyB3aGVuIHRoZSBjb250ZXh0IGlzIGNsb3NlZCBhbmQgZGlzcG9zZWRcblx0XHQgKiAgQHJldHVybnMge1Byb21pc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5jbG9zZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja2VyID0gbnVsbDtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dHMuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lb3V0cyA9IG51bGw7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNvbiBpbiB0aGlzLl9jb25zdGFudHMpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50c1tjb25dLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9jb25zdGFudHMgPSBudWxsO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIEEgY2xhc3Mgd2hpY2ggcHJvdmlkZXMgYSByZWxpYWJsZSBjYWxsYmFjayB1c2luZyBlaXRoZXJcblx0XHQgKiAgICAgICAgYSBXZWIgV29ya2VyLCBvciBpZiB0aGF0IGlzbid0IHN1cHBvcnRlZCwgZmFsbHMgYmFjayB0byBzZXRUaW1lb3V0LlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgVGlja2VyID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0eXBlLCB1cGRhdGVJbnRlcnZhbCkge1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogRWl0aGVyIFwid29ya2VyXCIgb3IgXCJ0aW1lb3V0XCJcblx0XHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdXBkYXRlIGludGVydmFsIG9mIHRoZSB3b3JrZXJcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJ2YWwgPSB1cGRhdGVJbnRlcnZhbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYXQgcmVndWxhciBpbnRlcnZhbHNcblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYWxsYmFjayA9IFRvbmUuZGVmYXVsdEFyZyhjYWxsYmFjaywgVG9uZS5ub09wKTtcblx0ICAgICAgICAvL2NyZWF0ZSB0aGUgY2xvY2sgc291cmNlIGZvciB0aGUgZmlyc3QgdGltZVxuXHQgICAgICAgIHRoaXMuX2NyZWF0ZUNsb2NrKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBvc3NpYmxlIHRpY2tlciB0eXBlc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRpY2tlci5UeXBlID0ge1xuXHQgICAgICAgIFdvcmtlcjogJ3dvcmtlcicsXG5cdCAgICAgICAgVGltZW91dDogJ3RpbWVvdXQnLFxuXHQgICAgICAgIE9mZmxpbmU6ICdvZmZsaW5lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZW5lcmF0ZSBhIHdlYiB3b3JrZXJcblx0XHQgKiAgQHJldHVybiAge1dlYldvcmtlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuX2NyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL1VSTCBTaGltXG5cdCAgICAgICAgd2luZG93LlVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcblx0ICAgICAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFsvL3RoZSBpbml0aWFsIHRpbWVvdXQgdGltZVxuXHQgICAgICAgICAgICAndmFyIHRpbWVvdXRUaW1lID0gJyArICh0aGlzLl91cGRhdGVJbnRlcnZhbCAqIDEwMDApLnRvRml4ZWQoMSkgKyAnOycgKyAvL29ubWVzc2FnZSBjYWxsYmFja1xuXHQgICAgICAgICAgICAnc2VsZi5vbm1lc3NhZ2UgPSBmdW5jdGlvbihtc2cpeycgKyAnXFx0dGltZW91dFRpbWUgPSBwYXJzZUludChtc2cuZGF0YSk7JyArICd9OycgKyAvL3RoZSB0aWNrIGZ1bmN0aW9uIHdoaWNoIHBvc3RzIGEgbWVzc2FnZVxuXHQgICAgICAgICAgICAvL2FuZCBzY2hlZHVsZXMgYSBuZXcgdGlja1xuXHQgICAgICAgICAgICAnZnVuY3Rpb24gdGljaygpeycgKyAnXFx0c2V0VGltZW91dCh0aWNrLCB0aW1lb3V0VGltZSk7JyArICdcXHRzZWxmLnBvc3RNZXNzYWdlKFxcJ3RpY2tcXCcpOycgKyAnfScgKyAvL2NhbGwgdGljayBpbml0aWFsbHlcblx0ICAgICAgICAgICAgJ3RpY2soKTsnXSk7XG5cdCAgICAgICAgdmFyIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXHQgICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKGJsb2JVcmwpO1xuXHQgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSB0aGlzLl9jYWxsYmFjay5iaW5kKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dvcmtlciA9IHdvcmtlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDcmVhdGUgYSB0aW1lb3V0IGxvb3Bcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fY3JlYXRlVGltZW91dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVRpbWVvdXQoKTtcblx0ICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2soKTtcblx0ICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMuX3VwZGF0ZUludGVydmFsICogMTAwMCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ3JlYXRlIHRoZSBjbG9jayBzb3VyY2UuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuX2NyZWF0ZUNsb2NrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUaWNrZXIuVHlwZS5Xb3JrZXIpIHtcblx0ICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVdvcmtlcigpO1xuXHQgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICAvLyB3b3JrZXJzIG5vdCBzdXBwb3J0ZWQsIGZhbGxiYWNrIHRvIHRpbWVvdXRcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBUaWNrZXIuVHlwZS5UaW1lb3V0O1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlQ2xvY2soKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVGlja2VyLlR5cGUuVGltZW91dCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jcmVhdGVUaW1lb3V0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEBtZW1iZXJPZiBUaWNrZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSB1cGRhdGVJbnRlcnZhbFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGlja2VyLnByb3RvdHlwZSwgJ3VwZGF0ZUludGVydmFsJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlSW50ZXJ2YWw7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl91cGRhdGVJbnRlcnZhbCA9IE1hdGgubWF4KGludGVydmFsLCAxMjggLyA0NDEwMCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUaWNrZXIuVHlwZS5Xb3JrZXIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3dvcmtlci5wb3N0TWVzc2FnZShNYXRoLm1heChpbnRlcnZhbCAqIDEwMDAsIDEpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIHRpY2tlciwgZWl0aGVyIGEgd29ya2VyIG9yIGEgdGltZW91dFxuXHRcdCAqIEBtZW1iZXJPZiBUaWNrZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUaWNrZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2VDbG9jaygpO1xuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fY3JlYXRlQ2xvY2soKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwIHRoZSBjdXJyZW50IGNsb2NrIHNvdXJjZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9kaXNwb3NlQ2xvY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXQpIHtcblx0ICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMuX3dvcmtlcikge1xuXHQgICAgICAgICAgICB0aGlzLl93b3JrZXIudGVybWluYXRlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3dvcmtlci5vbm1lc3NhZ2UgPSBudWxsO1xuXHQgICAgICAgICAgICB0aGlzLl93b3JrZXIgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fZGlzcG9zZUNsb2NrKCk7XG5cdCAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTaGltIGFsbCBjb25uZWN0L2Rpc2Nvbm5lY3QgYW5kIHNvbWUgZGVwcmVjYXRlZCBtZXRob2RzIHdoaWNoIGFyZSBzdGlsbCBpblxuXHRcdCAqICBzb21lIG9sZGVyIGltcGxlbWVudGF0aW9ucy5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5hdGl2ZUNvbm5lY3QgPSBBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3Q7XG5cdCAgICAgICAgdmFyIG5hdGl2ZURpc2Nvbm5lY3QgPSBBdWRpb05vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3Q7XG5cdCAgICAgICAgLy9yZXBsYWNlIHRoZSBvbGQgY29ubmVjdCBtZXRob2Rcblx0ICAgICAgICBmdW5jdGlvbiB0b25lQ29ubmVjdChCLCBvdXROdW0sIGluTnVtKSB7XG5cdCAgICAgICAgICAgIGlmIChCLmlucHV0KSB7XG5cdCAgICAgICAgICAgICAgICBpbk51bSA9IFRvbmUuZGVmYXVsdEFyZyhpbk51bSwgMCk7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KEIuaW5wdXQpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdChCLmlucHV0W2luTnVtXSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3QoQi5pbnB1dCwgb3V0TnVtLCBpbk51bSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChCIGluc3RhbmNlb2YgQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUNvbm5lY3QuY2FsbCh0aGlzLCBCLCBvdXROdW0sIGluTnVtKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEI7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlQ29ubmVjdC5jYWxsKHRoaXMsIEIsIG91dE51bSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Vycm9yIGNvbm5lY3RpbmcgdG8gbm9kZTogJyArIEIgKyAnXFxuJyArIGUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vcmVwbGFjZSB0aGUgb2xkIGRpc2Nvbm5lY3QgbWV0aG9kXG5cdCAgICAgICAgZnVuY3Rpb24gdG9uZURpc2Nvbm5lY3QoQiwgb3V0TnVtLCBpbk51bSkge1xuXHQgICAgICAgICAgICBpZiAoQiAmJiBCLmlucHV0ICYmIFRvbmUuaXNBcnJheShCLmlucHV0KSkge1xuXHQgICAgICAgICAgICAgICAgaW5OdW0gPSBUb25lLmRlZmF1bHRBcmcoaW5OdW0sIDApO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0KEIuaW5wdXRbaW5OdW1dLCBvdXROdW0sIDApO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKEIgJiYgQi5pbnB1dCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0KEIuaW5wdXQsIG91dE51bSwgaW5OdW0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICBuYXRpdmVEaXNjb25uZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlcnJvciBkaXNjb25uZWN0aW5nIG5vZGU6ICcgKyBCICsgJ1xcbicgKyBlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0ICE9PSB0b25lQ29ubmVjdCkge1xuXHQgICAgICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3QgPSB0b25lQ29ubmVjdDtcblx0ICAgICAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gdG9uZURpc2Nvbm5lY3Q7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvLyBzZXQgdGhlIGF1ZGlvIGNvbnRleHQgaW5pdGlhbGx5LCBhbmQgaWYgb25lIGlzIG5vdCBhbHJlYWR5IGNyZWF0ZWRcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCAmJiAhVG9uZS5pbml0aWFsaXplZCkge1xuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IG5ldyBUb25lLkNvbnRleHQoKTtcblx0ICAgICAgICAvLyBsb2cgb24gZmlyc3QgaW5pdGlhbGl6YXRpb25cblx0ICAgICAgICAvLyBhbGxvdyBvcHRpb25hbCBzaWxlbmNpbmcgb2YgdGhpcyBsb2dcblx0ICAgICAgICBpZiAoIXdpbmRvdy5UT05FX1NJTEVOQ0VfVkVSU0lPTl9MT0dHSU5HKSB7XG5cdCAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cdCAgICAgICAgICAgIGNvbnNvbGUubG9nKCclYyAqIFRvbmUuanMgJyArIFRvbmUudmVyc2lvbiArICcgKiAnLCAnYmFja2dyb3VuZDogIzAwMDsgY29sb3I6ICNmZmYnKTtcblx0ICAgICAgICB9XG5cdCAgICB9IGVsc2UgaWYgKCFUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cdCAgICAgICAgY29uc29sZS53YXJuKCdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBUb25lLmpzJyk7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gVG9uZS5Db250ZXh0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQXVkaW9Ob2RlIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBjbGFzc2VzIHdoaWNoIHByb2Nlc3MgYXVkaW8uXG5cdFx0ICogICAgICAgICBBdWRpb05vZGVzIGhhdmUgaW5wdXRzIGFuZCBvdXRwdXRzLlxuXHRcdCAqICBAcGFyYW1cdHtBdWRpb0NvbnRleHQ9fSBjb250ZXh0XHRUaGUgYXVkaW8gY29udGV4dCB0byB1c2Ugd2l0aCB0aGUgY2xhc3Ncblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLy91c2UgdGhlIGRlZmF1bHQgY29udGV4dCBpZiBvbmUgaXMgbm90IHBhc3NlZCBpblxuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnY29udGV4dCddLCB7ICdjb250ZXh0JzogVG9uZS5jb250ZXh0IH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIEF1ZGlvQ29udGV4dCBvZiB0aGlzIGluc3RhbmNlXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge0F1ZGlvQ29udGV4dH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnRleHQgPSBvcHRpb25zLmNvbnRleHQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBhdWRpbyBjb250ZXh0IGJlbG9uZ2luZyB0byB0aGlzIGluc3RhbmNlLlxuXHRcdCAqIEB0eXBlIHtUb25lLkNvbnRleHR9XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqIEBuYW1lIGNvbnRleHRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjb250ZXh0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDcmVhdGUgaW5wdXQgYW5kIG91dHB1dHMgZm9yIHRoaXMgb2JqZWN0LlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBbaW5wdXQ9MF0gICBUaGUgbnVtYmVyIG9mIGlucHV0c1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBbb3V0cHV0cz0wXSAgVGhlIG51bWJlciBvZiBvdXRwdXRzXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkF1ZGlvTm9kZX0gIHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jcmVhdGVJbnNPdXRzID0gZnVuY3Rpb24gKGlucHV0cywgb3V0cHV0cykge1xuXHQgICAgICAgIGlmIChpbnB1dHMgPT09IDEpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChpbnB1dHMgPiAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQgPSBuZXcgQXJyYXkoaW5wdXRzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKG91dHB1dHMgPT09IDEpIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAob3V0cHV0cyA+IDEpIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgQXJyYXkob3V0cHV0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjaGFubmVsQ291bnQgaXMgdGhlIG51bWJlciBvZiBjaGFubmVscyB1c2VkIHdoZW4gdXAtbWl4aW5nIGFuZCBkb3duLW1peGluZ1xuXHRcdCAqICBjb25uZWN0aW9ucyB0byBhbnkgaW5wdXRzIHRvIHRoZSBub2RlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyIGV4Y2VwdCBmb3Jcblx0XHQgKiAgc3BlY2lmaWMgbm9kZXMgd2hlcmUgaXRzIHZhbHVlIGlzIHNwZWNpYWxseSBkZXRlcm1pbmVkLlxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgY2hhbm5lbENvdW50XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NoYW5uZWxDb3VudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxDb3VudDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGMpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxDb3VudCA9IGM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2hhbm5lbENvdW50TW9kZSBkZXRlcm1pbmVzIGhvdyBjaGFubmVscyB3aWxsIGJlIGNvdW50ZWQgd2hlbiB1cC1taXhpbmcgYW5kXG5cdFx0ICogIGRvd24tbWl4aW5nIGNvbm5lY3Rpb25zIHRvIGFueSBpbnB1dHMgdG8gdGhlIG5vZGUuXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwibWF4XCIuIFRoaXMgYXR0cmlidXRlIGhhcyBubyBlZmZlY3QgZm9yIG5vZGVzIHdpdGggbm8gaW5wdXRzLlxuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIGNoYW5uZWxDb3VudE1vZGVcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnY2hhbm5lbENvdW50TW9kZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxDb3VudE1vZGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnRNb2RlID0gbTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjaGFubmVsSW50ZXJwcmV0YXRpb24gZGV0ZXJtaW5lcyBob3cgaW5kaXZpZHVhbCBjaGFubmVscyB3aWxsIGJlIHRyZWF0ZWRcblx0XHQgKiAgd2hlbiB1cC1taXhpbmcgYW5kIGRvd24tbWl4aW5nIGNvbm5lY3Rpb25zIHRvIGFueSBpbnB1dHMgdG8gdGhlIG5vZGUuXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFwic3BlYWtlcnNcIi5cblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSBjaGFubmVsSW50ZXJwcmV0YXRpb25cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnY2hhbm5lbEludGVycHJldGF0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbEludGVycHJldGF0aW9uO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbEludGVycHJldGF0aW9uID0gaTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIGlucHV0cyBmZWVkaW5nIGludG8gdGhlIEF1ZGlvTm9kZS5cblx0XHQgKiAgRm9yIHNvdXJjZSBub2RlcywgdGhpcyB3aWxsIGJlIDAuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIG51bWJlck9mSW5wdXRzXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnbnVtYmVyT2ZJbnB1dHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmlucHV0KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMuaW5wdXQpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQubGVuZ3RoO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBvdXRwdXRzIGNvbWluZyBvdXQgb2YgdGhlIEF1ZGlvTm9kZS5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgbnVtYmVyT2ZPdXRwdXRzXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnbnVtYmVyT2ZPdXRwdXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5vdXRwdXQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5vdXRwdXQpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0Lmxlbmd0aDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2FsbGVkIHdoZW4gYW4gYXVkaW8gcGFyYW0gY29ubmVjdHMgdG8gdGhpcyBub2RlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5fb25Db25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjb25uZWN0IHRoZSBvdXRwdXQgb2YgYSBUb25lTm9kZSB0byBhbiBBdWRpb1BhcmFtLCBBdWRpb05vZGUsIG9yIFRvbmVOb2RlXG5cdFx0ICogIEBwYXJhbSAge1RvbmUgfCBBdWRpb1BhcmFtIHwgQXVkaW9Ob2RlfSB1bml0XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TnVtPTBdIG9wdGlvbmFsbHkgd2hpY2ggb3V0cHV0IHRvIGNvbm5lY3QgZnJvbVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2lucHV0TnVtPTBdIG9wdGlvbmFsbHkgd2hpY2ggaW5wdXQgdG8gY29ubmVjdCB0b1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKHVuaXQsIG91dHB1dE51bSwgaW5wdXROdW0pIHtcblx0ICAgICAgICBpZiAodW5pdC5fb25Db25uZWN0KSB7XG5cdCAgICAgICAgICAgIHVuaXQuX29uQ29ubmVjdCh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgb3V0cHV0TnVtID0gVG9uZS5kZWZhdWx0QXJnKG91dHB1dE51bSwgMCk7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0W291dHB1dE51bV0uY29ubmVjdCh1bml0LCAwLCBpbnB1dE51bSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuY29ubmVjdCh1bml0LCBvdXRwdXROdW0sIGlucHV0TnVtKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc2Nvbm5lY3QgdGhlIG91dHB1dFxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxBdWRpb05vZGV9IG91dHB1dCBFaXRoZXIgdGhlIG91dHB1dCBpbmRleCB0byBkaXNjb25uZWN0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSBvdXRwdXQgaXMgYW4gYXJyYXksIG9yIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlIHRvIGRpc2Nvbm5lY3QgZnJvbS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgb3V0cHV0TnVtLCBpbnB1dE51bSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5vdXRwdXQpKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGRlc3RpbmF0aW9uKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRbZGVzdGluYXRpb25dLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIG91dHB1dE51bSA9IFRvbmUuZGVmYXVsdEFyZyhvdXRwdXROdW0sIDApO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRbb3V0cHV0TnVtXS5kaXNjb25uZWN0KGRlc3RpbmF0aW9uLCAwLCBpbnB1dE51bSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dC5kaXNjb25uZWN0LmFwcGx5KHRoaXMub3V0cHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29ubmVjdCB0aGUgb3V0cHV0IG9mIHRoaXMgbm9kZSB0byB0aGUgcmVzdCBvZiB0aGUgbm9kZXMgaW4gc2VyaWVzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICAvL2Nvbm5lY3QgYSBub2RlIHRvIGFuIGVmZmVjdCwgcGFuVm9sIGFuZCB0aGVuIHRvIHRoZSBtYXN0ZXIgb3V0cHV0XG5cdFx0ICogIG5vZGUuY2hhaW4oZWZmZWN0LCBwYW5Wb2wsIFRvbmUuTWFzdGVyKTtcblx0XHQgKiAgQHBhcmFtIHsuLi5BdWRpb1BhcmFtfFRvbmV8QXVkaW9Ob2RlfSBub2Rlc1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jaGFpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY3VycmVudFVuaXQgPSB0aGlzO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB0b1VuaXQgPSBhcmd1bWVudHNbaV07XG5cdCAgICAgICAgICAgIGN1cnJlbnRVbml0LmNvbm5lY3QodG9Vbml0KTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQgPSB0b1VuaXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhpcyBub2RlIHRvIHRoZSByZXN0IG9mIHRoZSBub2RlcyBpbiBwYXJhbGxlbC5cblx0XHQgKiAgQHBhcmFtIHsuLi5BdWRpb1BhcmFtfFRvbmV8QXVkaW9Ob2RlfSBub2Rlc1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5mYW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5jb25uZWN0KGFyZ3VtZW50c1tpXSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIGlmICh3aW5kb3cuQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgLy9naXZlIG5hdGl2ZSBub2RlcyBjaGFpbiBhbmQgZmFuIG1ldGhvZHNcblx0ICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLmNoYWluID0gVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNoYWluO1xuXHQgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuZmFuID0gVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmZhbjtcblx0ICAgIH1cblx0ICAgIC8qKlxuXHRcdCAqIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiBAcmV0dXJuIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKHRoaXMuaW5wdXQpKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmlucHV0IGluc3RhbmNlb2YgQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmlucHV0LmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmlucHV0ID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5vdXRwdXQgaW5zdGFuY2VvZiBBdWRpb05vZGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0LmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLm91dHB1dCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2NvbnRleHQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkF1ZGlvTm9kZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCYXNlIGNsYXNzIGZvciBhbGwgU2lnbmFscy4gVXNlZCBJbnRlcm5hbGx5LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsQmFzZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2lnbmFsQmFzZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFdoZW4gc2lnbmFscyBjb25uZWN0IHRvIG90aGVyIHNpZ25hbHMgb3IgQXVkaW9QYXJhbXMsXG5cdFx0ICogIHRoZXkgdGFrZSBvdmVyIHRoZSBvdXRwdXQgdmFsdWUgb2YgdGhhdCBzaWduYWwgb3IgQXVkaW9QYXJhbS5cblx0XHQgKiAgRm9yIGFsbCBvdGhlciBub2RlcywgdGhlIGJlaGF2aW9yIGlzIHRoZSBzYW1lIGFzIGEgZGVmYXVsdCA8Y29kZT5jb25uZWN0PC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAb3ZlcnJpZGVcblx0XHQgKiAgQHBhcmFtIHtBdWRpb1BhcmFtfEF1ZGlvTm9kZXxUb25lLlNpZ25hbHxUb25lfSBub2RlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TnVtYmVyPTBdIFRoZSBvdXRwdXQgbnVtYmVyIHRvIGNvbm5lY3QgZnJvbS5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtpbnB1dE51bWJlcj0wXSBUaGUgaW5wdXQgbnVtYmVyIHRvIGNvbm5lY3QgdG8uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNpZ25hbEJhc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIChub2RlLCBvdXRwdXROdW1iZXIsIGlucHV0TnVtYmVyKSB7XG5cdCAgICAgICAgLy96ZXJvIGl0IG91dCBzbyB0aGF0IHRoZSBzaWduYWwgY2FuIGhhdmUgZnVsbCBjb250cm9sXG5cdCAgICAgICAgaWYgKFRvbmUuU2lnbmFsICYmIFRvbmUuU2lnbmFsID09PSBub2RlLmNvbnN0cnVjdG9yIHx8IFRvbmUuUGFyYW0gJiYgVG9uZS5QYXJhbSA9PT0gbm9kZS5jb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCBjaGFuZ2VzXG5cdCAgICAgICAgICAgIG5vZGUuX3BhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcygwKTtcblx0ICAgICAgICAgICAgLy9yZXNldCB0aGUgdmFsdWVcblx0ICAgICAgICAgICAgbm9kZS5fcGFyYW0udmFsdWUgPSAwO1xuXHQgICAgICAgICAgICAvL21hcmsgdGhlIHZhbHVlIGFzIG92ZXJyaWRkZW5cblx0ICAgICAgICAgICAgbm9kZS5vdmVycmlkZGVuID0gdHJ1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBBdWRpb1BhcmFtKSB7XG5cdCAgICAgICAgICAgIG5vZGUuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKDApO1xuXHQgICAgICAgICAgICBub2RlLnZhbHVlID0gMDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3QuY2FsbCh0aGlzLCBub2RlLCBvdXRwdXROdW1iZXIsIGlucHV0TnVtYmVyKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TaWduYWxCYXNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICAvL2ZpeGVzIHNhZmFyaSBvbmx5IGJ1ZyB3aGljaCBpcyBzdGlsbCBwcmVzZW50IGluIDExXG5cdCAgICAgICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuXHQgICAgICAgIHZhciBpc1NhZmFyaSA9IHVhLmluY2x1ZGVzKCdzYWZhcmknKSAmJiAhdWEuaW5jbHVkZXMoJ2Nocm9tZScpO1xuXHQgICAgICAgIGlmIChpc1NhZmFyaSkge1xuXHQgICAgICAgICAgICB2YXIgV2F2ZVNoYXBlck5vZGUgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxOb2RlID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gY29udGV4dC5fbmF0aXZlX2NyZWF0ZVdhdmVTaGFwZXIoKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gdGhpcy5faW50ZXJuYWxOb2RlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmaW5lUHJvcGVydHkodGhpcy5faW50ZXJuYWxOb2RlLCBwcm9wKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdhdmVTaGFwZXJOb2RlLnByb3RvdHlwZSwgJ2N1cnZlJywge1xuXHQgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnZlO1xuXHQgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGN1cnZlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGN1cnZlLmxlbmd0aCArIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgIGFycmF5LnNldChjdXJ2ZSwgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgYXJyYXlbMF0gPSBjdXJ2ZVswXTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbE5vZGUuY3VydmUgPSBhcnJheTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIFdhdmVTaGFwZXJOb2RlLnByb3RvdHlwZS5fZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoY29udGV4dCwgcHJvcCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aGlzW3Byb3BdKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wLCB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0W3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRbcHJvcF0uYmluZChjb250ZXh0KTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRbcHJvcF07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtwcm9wXSA9IHZhbDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLl9uYXRpdmVfY3JlYXRlV2F2ZVNoYXBlciA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlV2F2ZVNoYXBlcjtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVXYXZlU2hhcGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXYXZlU2hhcGVyTm9kZSh0aGlzKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcyB0aGUgbmF0aXZlIFdlYiBBdWRpbyBBUElcblx0XHQgKiAgICAgICAgIFtXYXZlU2hhcGVyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtd2F2ZXNoYXBlcm5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtmdW5jdGlvbnxBcnJheXxOdW1iZXJ9IG1hcHBpbmcgVGhlIGZ1bmN0aW9uIHVzZWQgdG8gZGVmaW5lIHRoZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWFwcGluZyBmdW5jdGlvbiBzaG91bGQgdGFrZSB0d28gYXJndW1lbnRzOlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpcnN0IGlzIHRoZSB2YWx1ZSBhdCB0aGUgY3VycmVudCBwb3NpdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIGFycmF5IHBvc2l0aW9uLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGFycmF5LCB0aGF0IGFycmF5IHdpbGwgYmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBhcyB0aGUgd2F2ZSBzaGFwaW5nIGZ1bmN0aW9uLiBUaGUgaW5wdXRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbCBpcyBhbiBBdWRpb1JhbmdlIFstMSwgMV0gdmFsdWUgYW5kIHRoZSBvdXRwdXRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbCBjYW4gdGFrZSBvbiBhbnkgbnVtZXJpY2FsIHZhbHVlcy5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gW2J1ZmZlckxlbj0xMDI0XSBUaGUgbGVuZ3RoIG9mIHRoZSBXYXZlU2hhcGVyTm9kZSBidWZmZXIuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHRpbWVzVHdvID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbih2YWwpe1xuXHRcdCAqIFx0cmV0dXJuIHZhbCAqIDI7XG5cdFx0ICogfSwgMjA0OCk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHdhdmVzaGFwZXIgY2FuIGFsc28gYmUgY29uc3RydWN0ZWQgd2l0aCBhbiBhcnJheSBvZiB2YWx1ZXNcblx0XHQgKiB2YXIgaW52ZXJ0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihbMSwgLTFdKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZVNoYXBlciA9IGZ1bmN0aW9uIChtYXBwaW5nLCBidWZmZXJMZW4pIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgd2F2ZXNoYXBlclxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZVdhdmVTaGFwZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgd2F2ZXNoYXBlcnMgY3VydmVcblx0XHRcdCAqICBAdHlwZSB7RmxvYXQzMkFycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGluZykpIHtcblx0ICAgICAgICAgICAgdGhpcy5jdXJ2ZSA9IG1hcHBpbmc7XG5cdCAgICAgICAgfSBlbHNlIGlmIChpc0Zpbml0ZShtYXBwaW5nKSB8fCBUb25lLmlzVW5kZWYobWFwcGluZykpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBuZXcgRmxvYXQzMkFycmF5KFRvbmUuZGVmYXVsdEFyZyhtYXBwaW5nLCAxMDI0KSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzRnVuY3Rpb24obWFwcGluZykpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBuZXcgRmxvYXQzMkFycmF5KFRvbmUuZGVmYXVsdEFyZyhidWZmZXJMZW4sIDEwMjQpKTtcblx0ICAgICAgICAgICAgdGhpcy5zZXRNYXAobWFwcGluZyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuV2F2ZVNoYXBlciwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBVc2VzIGEgbWFwcGluZyBmdW5jdGlvbiB0byBzZXQgdGhlIHZhbHVlIG9mIHRoZSBjdXJ2ZS5cblx0XHQgKiAgQHBhcmFtIHtmdW5jdGlvbn0gbWFwcGluZyBUaGUgZnVuY3Rpb24gdXNlZCB0byBkZWZpbmUgdGhlIHZhbHVlcy5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWFwcGluZyBmdW5jdGlvbiB0YWtlIHR3byBhcmd1bWVudHM6XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpcnN0IGlzIHRoZSB2YWx1ZSBhdCB0aGUgY3VycmVudCBwb3NpdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGdvZXMgZnJvbSAtMSB0byAxIG92ZXIgdGhlIG51bWJlciBvZiBlbGVtZW50c1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjdXJ2ZSBhcnJheS4gVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgYXJyYXkgcG9zaXRpb24uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLldhdmVTaGFwZXJ9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL21hcCB0aGUgaW5wdXQgc2lnbmFsIGZyb20gWy0xLCAxXSB0byBbMCwgMTBdXG5cdFx0ICogc2hhcGVyLnNldE1hcChmdW5jdGlvbih2YWwsIGluZGV4KXtcblx0XHQgKiBcdHJldHVybiAodmFsICsgMSkgKiA1O1xuXHRcdCAqIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVTaGFwZXIucHJvdG90eXBlLnNldE1hcCA9IGZ1bmN0aW9uIChtYXBwaW5nKSB7XG5cdCAgICAgICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KHRoaXMuX2N1cnZlLmxlbmd0aCk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX2N1cnZlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBub3JtYWxpemVkID0gaSAvIChsZW4gLSAxKSAqIDIgLSAxO1xuXHQgICAgICAgICAgICBhcnJheVtpXSA9IG1hcHBpbmcobm9ybWFsaXplZCwgaSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuY3VydmUgPSBhcnJheTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXJyYXkgdG8gc2V0IGFzIHRoZSB3YXZlc2hhcGVyIGN1cnZlLiBGb3IgbGluZWFyIGN1cnZlc1xuXHRcdCAqIGFycmF5IGxlbmd0aCBkb2VzIG5vdCBtYWtlIG11Y2ggZGlmZmVyZW5jZSwgYnV0IGZvciBjb21wbGV4IGN1cnZlc1xuXHRcdCAqIGxvbmdlciBhcnJheXMgd2lsbCBwcm92aWRlIHNtb290aGVyIGludGVycG9sYXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuV2F2ZVNoYXBlciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgY3VydmVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLldhdmVTaGFwZXIucHJvdG90eXBlLCAnY3VydmUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZXIuY3VydmU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXBwaW5nKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gbmV3IEZsb2F0MzJBcnJheShtYXBwaW5nKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLmN1cnZlID0gdGhpcy5fY3VydmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBTcGVjaWZpZXMgd2hhdCB0eXBlIG9mIG92ZXJzYW1wbGluZyAoaWYgYW55KSBzaG91bGQgYmUgdXNlZCB3aGVuXG5cdFx0ICogYXBwbHlpbmcgdGhlIHNoYXBpbmcgY3VydmUuIENhbiBlaXRoZXIgYmUgXCJub25lXCIsIFwiMnhcIiBvciBcIjR4XCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuV2F2ZVNoYXBlciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIG92ZXJzYW1wbGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLldhdmVTaGFwZXIucHJvdG90eXBlLCAnb3ZlcnNhbXBsZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3ZlcnNhbXBsaW5nKSB7XG5cdCAgICAgICAgICAgIGlmIChbXG5cdCAgICAgICAgICAgICAgICAgICAgJ25vbmUnLFxuXHQgICAgICAgICAgICAgICAgICAgICcyeCcsXG5cdCAgICAgICAgICAgICAgICAgICAgJzR4J1xuXHQgICAgICAgICAgICAgICAgXS5pbmNsdWRlcyhvdmVyc2FtcGxpbmcpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZSA9IG92ZXJzYW1wbGluZztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUb25lLldhdmVTaGFwZXI6IG92ZXJzYW1wbGluZyBtdXN0IGJlIGVpdGhlciBcXCdub25lXFwnLCBcXCcyeFxcJywgb3IgXFwnNHhcXCcnKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5XYXZlU2hhcGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVTaGFwZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2N1cnZlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5XYXZlU2hhcGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVGltZUJhc2UgaXMgYSBmbGV4aWJsZSBlbmNvZGluZyBvZiB0aW1lXG5cdFx0ICogICAgICAgICB3aGljaCBjYW4gYmUgZXZhbHVhdGVkIHRvIGFuZCBmcm9tIGEgc3RyaW5nLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHZhbCAgICBUaGUgdGltZSB2YWx1ZSBhcyBhIG51bWJlciBvciBzdHJpbmdcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nPX0gIHVuaXRzICBVbml0IHZhbHVlc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoNCwgXCJuXCIpXG5cdFx0ICogVG9uZS5UaW1lQmFzZSgyLCBcInRcIilcblx0XHQgKiBUb25lLlRpbWVCYXNlKFwiMnRcIilcblx0XHQgKiBUb25lLlRpbWVCYXNlKFwiMnRcIikgKyBUb25lLlRpbWVCYXNlKFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICAvL2FsbG93cyBpdCB0byBiZSBjb25zdHJ1Y3RlZCB3aXRoIG9yIHdpdGhvdXQgJ25ldydcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgdmFsdWVcblx0XHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfFN0cmluZ3xUb25lLlRpbWVCYXNlfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbDtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSB1bml0c1xuXHRcdFx0XHQgKiBAdHlwZSB7U3RyaW5nP31cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdW5pdHM7XG5cdCAgICAgICAgICAgIC8vdGVzdCBpZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBudW1iZXJcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aGlzLl91bml0cykgJiYgVG9uZS5pc1N0cmluZyh0aGlzLl92YWwpICYmIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0ICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQodGhpcy5fdmFsKSA9PSB0aGlzLl92YWwgJiYgdGhpcy5fdmFsLmNoYXJBdCgwKSAhPT0gJysnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSBwYXJzZUZsb2F0KHRoaXMuX3ZhbCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl91bml0cyA9IHRoaXMuX2RlZmF1bHRVbml0cztcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwgJiYgdmFsLmNvbnN0cnVjdG9yID09PSB0aGlzLmNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgICAgICAvL2lmIHRoZXkncmUgdGhlIHNhbWUgdHlwZSwganVzdCBjb3B5IHZhbHVlcyBvdmVyXG5cdCAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwuX3ZhbDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdmFsLl91bml0cztcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX2RlZmF1bHRVbml0cykge1xuXHQgICAgICAgICAgICAgICAgY2FzZSAncyc6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLnRvU2Vjb25kcygpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnaSc6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLnRvVGlja3MoKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2h6Jzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ21pZGknOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b01pZGkoKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnJlY29nbml6ZWQgZGVmYXVsdCB1bml0cyAnICsgdGhpcy5fZGVmYXVsdFVuaXRzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaW1lQmFzZSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaW1lQmFzZSk7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBQlNUUkFDVCBTWU5UQVggVFJFRSBQQVJTRVJcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEFsbCB0aGUgcHJpbWFyeSBleHByZXNzaW9ucy5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMgPSB7XG5cdCAgICAgICAgJ24nOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyluKFxcLj8pJC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSwgZG90KSB7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIHZhciBzY2FsYXIgPSBkb3QgPT09ICcuJyA/IDEuNSA6IDE7XG5cdCAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IDEpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmVhdHNUb1VuaXRzKHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSkgKiBzY2FsYXI7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHMoNCAvIHZhbHVlKSAqIHNjYWxhcjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3QnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyl0JC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmVhdHNUb1VuaXRzKDggLyAocGFyc2VJbnQodmFsdWUpICogMykpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKW0kL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlSW50KHZhbHVlKSAqIHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdpJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspaSQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWNrc1RvVW5pdHMocGFyc2VJbnQodmFsdWUpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2h6Jzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT8paHokL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJlcXVlbmN5VG9Vbml0cyhwYXJzZUZsb2F0KHZhbHVlKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICd0cic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KTooXFxkKyg/OlxcLlxcZCspPyk6PyhcXGQrKD86XFwuXFxkKyk/KT8kLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAobSwgcSwgcykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHRvdGFsID0gMDtcblx0ICAgICAgICAgICAgICAgIGlmIChtICYmIG0gIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMuX2JlYXRzVG9Vbml0cyh0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkgKiBwYXJzZUZsb2F0KG0pKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChxICYmIHEgIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUZsb2F0KHEpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChzICYmIHMgIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUZsb2F0KHMpIC8gNCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdzJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT8pcyQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlY29uZHNUb1VuaXRzKHBhcnNlRmxvYXQodmFsdWUpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3NhbXBsZXMnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKylzYW1wbGVzJC8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpIC8gdGhpcy5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdkZWZhdWx0Jzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT8pJC8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwcmVzc2lvbnNbdGhpcy5fZGVmYXVsdFVuaXRzXS5tZXRob2QuY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2RlZmF1bHRVbml0cyA9ICdzJztcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRSQU5TUE9SVCBGQUxMQkFDS1Ncblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSBicG0sIG9yIDEyMCBpZiBUcmFuc3BvcnQgaXMgbm90IGF2YWlsYWJsZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9nZXRCcG0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIDEyMDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSB0aW1lU2lnbmF0dXJlIG9yIDQgaWYgVHJhbnNwb3J0IGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZ2V0VGltZVNpZ25hdHVyZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIDQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgUFBRIG9yIDE5MiBpZiBUcmFuc3BvcnQgaXMgbm90IGF2YWlsYWJsZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9nZXRQUFEgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC5QUFE7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIDE5Mjtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgaW4gd2hpY2hldmVyIGNvbnRleHQgaXMgcmVsZXZhbnRcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fbm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLm5vdygpO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFVOSVQgQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgZnJlcXVlbmN5IGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZnJlcXVlbmN5VG9Vbml0cyA9IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyBmcmVxO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBiZWF0cyBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gYmVhdHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMgPSBmdW5jdGlvbiAoYmVhdHMpIHtcblx0ICAgICAgICByZXR1cm4gNjAgLyB0aGlzLl9nZXRCcG0oKSAqIGJlYXRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9zZWNvbmRzVG9Vbml0cyA9IGZ1bmN0aW9uIChzZWNvbmRzKSB7XG5cdCAgICAgICAgcmV0dXJuIHNlY29uZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgdGljayBpbiB0aGUgY3VycmVudCB0aW1lIHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7VGlja3N9IHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fdGlja3NUb1VuaXRzID0gZnVuY3Rpb24gKHRpY2tzKSB7XG5cdCAgICAgICAgcmV0dXJuIHRpY2tzICogKHRoaXMuX2JlYXRzVG9Vbml0cygxKSAvIHRoaXMuX2dldFBQUSgpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBXaXRoIG5vIGFyZ3VtZW50cywgcmV0dXJuICdub3cnXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fbm9BcmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX25vdygpO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEVYUFJFU1NJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBFdmFsdWF0ZSB0aGUgdGltZSB2YWx1ZS4gUmV0dXJucyB0aGUgdGltZVxuXHRcdCAqICBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aGlzLl92YWwpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub0FyZygpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyh0aGlzLl92YWwpICYmIFRvbmUuaXNVbmRlZih0aGlzLl91bml0cykpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgdW5pdHMgaW4gdGhpcy5fZXhwcmVzc2lvbnMpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9leHByZXNzaW9uc1t1bml0c10ucmVnZXhwLnRlc3QodGhpcy5fdmFsLnRyaW0oKSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl91bml0cyA9IHVuaXRzO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh0aGlzLl91bml0cykpIHtcblx0ICAgICAgICAgICAgdmFyIGV4cHIgPSB0aGlzLl9leHByZXNzaW9uc1t0aGlzLl91bml0c107XG5cdCAgICAgICAgICAgIHZhciBtYXRjaGluZyA9IHRoaXMuX3ZhbC50b1N0cmluZygpLnRyaW0oKS5tYXRjaChleHByLnJlZ2V4cCk7XG5cdCAgICAgICAgICAgIGlmIChtYXRjaGluZykge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGV4cHIubWV0aG9kLmFwcGx5KHRoaXMsIG1hdGNoaW5nLnNsaWNlKDEpKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBleHByLm1ldGhvZC5jYWxsKHRoaXMsIHBhcnNlRmxvYXQodGhpcy5fdmFsKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBpbiBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4ge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIGluIGhlcnR6XG5cdFx0ICogIEByZXR1cm4ge0ZyZXF1ZW5jeX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAxIC8gdGhpcy50b1NlY29uZHMoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHNhbXBsZXNcblx0XHQgKiAgQHJldHVybiAge1NhbXBsZXN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b1NhbXBsZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudG9TZWNvbmRzKCkgKiB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge01pbGxpc2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvTWlsbGlzZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcygpICogMTAwMDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiB7VG9uZS5UaW1lQmFzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl92YWwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3VuaXRzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaW1lQmFzZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZyZXF1ZW5jeSBpcyBhIHByaW1pdGl2ZSB0eXBlIGZvciBlbmNvZGluZyBGcmVxdWVuY3kgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgRXZlbnR1YWxseSBhbGwgdGltZSB2YWx1ZXMgYXJlIGV2YWx1YXRlZCB0byBoZXJ0elxuXHRcdCAqICAgICAgICAgdXNpbmcgdGhlIGBldmFsYCBtZXRob2QuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UaW1lQmFzZX1cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIHZhbCAgICBUaGUgdGltZSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nPX0gIHVuaXRzICBUaGUgdW5pdHMgb2YgdGhlIHZhbHVlLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQzNcIikgLy8gMjYxXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koMzgsIFwibWlkaVwiKSAvL1xuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQzNcIikudHJhbnNwb3NlKDQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5GcmVxdWVuY3kpIHtcblx0ICAgICAgICAgICAgVG9uZS5UaW1lQmFzZS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5GcmVxdWVuY3kodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRnJlcXVlbmN5LCBUb25lLlRpbWVCYXNlKTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFVR01FTlQgQkFTRSBFWFBSRVNTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2V4cHJlc3Npb25zID0gT2JqZWN0LmFzc2lnbih7fSwgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zLCB7XG5cdCAgICAgICAgJ21pZGknOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspP21pZGkpLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kZWZhdWx0VW5pdHMgPT09ICdtaWRpJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5Lm10b2YodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbm90ZSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihbYS1nXXsxfSg/OmJ8I3x4fGJiKT8pKC0/WzAtOV0rKS9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChwaXRjaCwgb2N0YXZlKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBub3RlVG9TY2FsZUluZGV4W3BpdGNoLnRvTG93ZXJDYXNlKCldO1xuXHQgICAgICAgICAgICAgICAgdmFyIG5vdGVOdW1iZXIgPSBpbmRleCArIChwYXJzZUludChvY3RhdmUpICsgMSkgKiAxMjtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kZWZhdWx0VW5pdHMgPT09ICdtaWRpJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3RlTnVtYmVyO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kubXRvZihub3RlTnVtYmVyKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3RyJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT8pOihcXGQrKD86XFwuXFxkKyk/KTo/KFxcZCsoPzpcXC5cXGQrKT8pPy8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKG0sIHEsIHMpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IDE7XG5cdCAgICAgICAgICAgICAgICBpZiAobSAmJiBtICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCAqPSB0aGlzLl9iZWF0c1RvVW5pdHModGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpICogcGFyc2VGbG9hdChtKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAocSAmJiBxICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCAqPSB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VGbG9hdChxKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAocyAmJiBzICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCAqPSB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VGbG9hdChzKSAvIDQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRFWFBSRVNTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVHJhbnNwb3NlcyB0aGUgZnJlcXVlbmN5IGJ5IHRoZSBnaXZlbiBudW1iZXIgb2Ygc2VtaXRvbmVzLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbH0gIGludGVydmFsXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkZyZXF1ZW5jeX0gQSBuZXcgdHJhbnNwb3NlZCBmcmVxdWVuY3lcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkE0XCIpLnRyYW5zcG9zZSgzKTsgLy9cIkM1XCJcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50cmFuc3Bvc2UgPSBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy52YWx1ZU9mKCkgKiBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhpbnRlcnZhbCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUYWtlcyBhbiBhcnJheSBvZiBzZW1pdG9uZSBpbnRlcnZhbHMgYW5kIHJldHVybnNcblx0XHQgKiAgYW4gYXJyYXkgb2YgZnJlcXVlbmNpZXMgdHJhbnNwb3NlZCBieSB0aG9zZSBpbnRlcnZhbHMuXG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgaW50ZXJ2YWxzXG5cdFx0ICogIEByZXR1cm4gIHtBcnJheTxUb25lLkZyZXF1ZW5jeT59IFJldHVybnMgYW4gYXJyYXkgb2YgRnJlcXVlbmNpZXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkE0XCIpLmhhcm1vbml6ZShbMCwgMywgN10pOyAvL1tcIkE0XCIsIFwiQzVcIiwgXCJFNVwiXVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLmhhcm1vbml6ZSA9IGZ1bmN0aW9uIChpbnRlcnZhbHMpIHtcblx0ICAgICAgICByZXR1cm4gaW50ZXJ2YWxzLm1hcChmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNwb3NlKGludGVydmFsKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFVOSVQgQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBhcyBhIE1JREkgbm90ZVxuXHRcdCAqICBAcmV0dXJuICB7TUlESX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkM0XCIpLnRvTWlkaSgpOyAvLzYwXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9NaWRpID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKHRoaXMudmFsdWVPZigpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IGluIFNjaWVudGlmaWMgUGl0Y2ggTm90YXRpb25cblx0XHQgKiAgQHJldHVybiAge05vdGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koNjksIFwibWlkaVwiKS50b05vdGUoKTsgLy9cIkE0XCJcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b05vdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGZyZXEgPSB0aGlzLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgdmFyIGxvZyA9IE1hdGgubG9nMihmcmVxIC8gVG9uZS5GcmVxdWVuY3kuQTQpO1xuXHQgICAgICAgIHZhciBub3RlTnVtYmVyID0gTWF0aC5yb3VuZCgxMiAqIGxvZykgKyA1Nztcblx0ICAgICAgICB2YXIgb2N0YXZlID0gTWF0aC5mbG9vcihub3RlTnVtYmVyIC8gMTIpO1xuXHQgICAgICAgIGlmIChvY3RhdmUgPCAwKSB7XG5cdCAgICAgICAgICAgIG5vdGVOdW1iZXIgKz0gLTEyICogb2N0YXZlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgbm90ZU5hbWUgPSBzY2FsZUluZGV4VG9Ob3RlW25vdGVOdW1iZXIgJSAxMl07XG5cdCAgICAgICAgcmV0dXJuIG5vdGVOYW1lICsgb2N0YXZlLnRvU3RyaW5nKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZHVyYXRpb24gb2Ygb25lIGN5Y2xlIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvU2Vjb25kcy5jYWxsKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIGluIEhlcnR6XG5cdFx0ICogIEByZXR1cm4gIHtGcmVxdWVuY3l9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9GcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvRnJlcXVlbmN5LmNhbGwodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZHVyYXRpb24gb2Ygb25lIGN5Y2xlIGluIHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b1RpY2tzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBxdWFydGVyVGltZSA9IHRoaXMuX2JlYXRzVG9Vbml0cygxKTtcblx0ICAgICAgICB2YXIgcXVhcnRlcnMgPSB0aGlzLnZhbHVlT2YoKSAvIHF1YXJ0ZXJUaW1lO1xuXHQgICAgICAgIHJldHVybiBNYXRoLmZsb29yKHF1YXJ0ZXJzICogVG9uZS5UcmFuc3BvcnQuUFBRKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRVTklUIENPTlZFUlNJT05TIEhFTFBFUlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFdpdGggbm8gYXJndW1lbnRzLCByZXR1cm4gMFxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9ub0FyZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gMDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBmcmVxdWVuY3kgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fZnJlcXVlbmN5VG9Vbml0cyA9IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgcmV0dXJuIGZyZXE7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgdGljayBpbiB0aGUgY3VycmVudCB0aW1lIHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7VGlja3N9IHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiAxIC8gKHRpY2tzICogNjAgLyAoVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlICogVG9uZS5UcmFuc3BvcnQuUFBRKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMgPSBmdW5jdGlvbiAoYmVhdHMpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMuY2FsbCh0aGlzLCBiZWF0cyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9zZWNvbmRzVG9Vbml0cyA9IGZ1bmN0aW9uIChzZWNvbmRzKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyBzZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB1bml0cyBpZiBub25lIGFyZSBnaXZlbi5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fZGVmYXVsdFVuaXRzID0gJ2h6Jztcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEZSRVFVRU5DWSBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgTm90ZSB0byBzY2FsZSBpbmRleFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIHZhciBub3RlVG9TY2FsZUluZGV4ID0ge1xuXHQgICAgICAgICdjYmInOiAtMixcblx0ICAgICAgICAnY2InOiAtMSxcblx0ICAgICAgICAnYyc6IDAsXG5cdCAgICAgICAgJ2MjJzogMSxcblx0ICAgICAgICAnY3gnOiAyLFxuXHQgICAgICAgICdkYmInOiAwLFxuXHQgICAgICAgICdkYic6IDEsXG5cdCAgICAgICAgJ2QnOiAyLFxuXHQgICAgICAgICdkIyc6IDMsXG5cdCAgICAgICAgJ2R4JzogNCxcblx0ICAgICAgICAnZWJiJzogMixcblx0ICAgICAgICAnZWInOiAzLFxuXHQgICAgICAgICdlJzogNCxcblx0ICAgICAgICAnZSMnOiA1LFxuXHQgICAgICAgICdleCc6IDYsXG5cdCAgICAgICAgJ2ZiYic6IDMsXG5cdCAgICAgICAgJ2ZiJzogNCxcblx0ICAgICAgICAnZic6IDUsXG5cdCAgICAgICAgJ2YjJzogNixcblx0ICAgICAgICAnZngnOiA3LFxuXHQgICAgICAgICdnYmInOiA1LFxuXHQgICAgICAgICdnYic6IDYsXG5cdCAgICAgICAgJ2cnOiA3LFxuXHQgICAgICAgICdnIyc6IDgsXG5cdCAgICAgICAgJ2d4JzogOSxcblx0ICAgICAgICAnYWJiJzogNyxcblx0ICAgICAgICAnYWInOiA4LFxuXHQgICAgICAgICdhJzogOSxcblx0ICAgICAgICAnYSMnOiAxMCxcblx0ICAgICAgICAnYXgnOiAxMSxcblx0ICAgICAgICAnYmJiJzogOSxcblx0ICAgICAgICAnYmInOiAxMCxcblx0ICAgICAgICAnYic6IDExLFxuXHQgICAgICAgICdiIyc6IDEyLFxuXHQgICAgICAgICdieCc6IDEzXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHNjYWxlIGluZGV4IHRvIG5vdGUgKHNoYXJwcylcblx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBzY2FsZUluZGV4VG9Ob3RlID0gW1xuXHQgICAgICAgICdDJyxcblx0ICAgICAgICAnQyMnLFxuXHQgICAgICAgICdEJyxcblx0ICAgICAgICAnRCMnLFxuXHQgICAgICAgICdFJyxcblx0ICAgICAgICAnRicsXG5cdCAgICAgICAgJ0YjJyxcblx0ICAgICAgICAnRycsXG5cdCAgICAgICAgJ0cjJyxcblx0ICAgICAgICAnQScsXG5cdCAgICAgICAgJ0EjJyxcblx0ICAgICAgICAnQidcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIFtjb25jZXJ0IHBpdGNoXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db25jZXJ0X3BpdGNoKVxuXHRcdCAqICBBNCdzIHZhbHVlcyBpbiBIZXJ0ei5cblx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kuQTQgPSA0NDA7XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIE1JREkgbm90ZSB0byBmcmVxdWVuY3kgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge01JREl9IG1pZGkgVGhlIG1pZGkgbnVtYmVyIHRvIGNvbnZlcnQuXG5cdFx0ICogIEByZXR1cm4ge0ZyZXF1ZW5jeX0gdGhlIGNvcnJlc3BvbmRpbmcgZnJlcXVlbmN5IHZhbHVlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeS5tdG9mKDY5KTsgLy8gcmV0dXJucyA0NDBcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5Lm10b2YgPSBmdW5jdGlvbiAobWlkaSkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5BNCAqIE1hdGgucG93KDIsIChtaWRpIC0gNjkpIC8gMTIpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgZnJlcXVlbmN5IHZhbHVlIHRvIGEgTUlESSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSB2YWx1ZSB0byBmcmVxdWVuY3kgdmFsdWUgdG8gY29udmVydC5cblx0XHQgKiAgQHJldHVybnMgIHtNSURJfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3kuZnRvbSg0NDApOyAvLyByZXR1cm5zIDY5XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5mdG9tID0gZnVuY3Rpb24gKGZyZXF1ZW5jeSkge1xuXHQgICAgICAgIHJldHVybiA2OSArIE1hdGgucm91bmQoMTIgKiBNYXRoLmxvZzIoZnJlcXVlbmN5IC8gVG9uZS5GcmVxdWVuY3kuQTQpKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3k7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UaW1lIGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIFRpbWUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgVG9uZS5UaW1lIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIG9yIHdpdGhvdXQgdGhlIGBuZXdgIGtleXdvcmQuIFRvbmUuVGltZSBjYW4gYmUgcGFzc2VkXG5cdFx0ICogICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgb2YgYW55IG1ldGhvZCB3aGljaCB0YWtlcyB0aW1lIGFzIGFuIGFyZ3VtZW50LlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZUJhc2V9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdCA9IFRvbmUuVGltZShcIjRuXCIpOy8vYSBxdWFydGVyIG5vdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRpbWUpIHtcblx0ICAgICAgICAgICAgVG9uZS5UaW1lQmFzZS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaW1lKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpbWUsIFRvbmUuVGltZUJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogRXh0ZW5kIHRoZSBiYXNlIGV4cHJlc3Npb25zXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLl9leHByZXNzaW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9leHByZXNzaW9ucywge1xuXHQgICAgICAgICdxdWFudGl6ZSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXkAoLispLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAoY2FwdHVyZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50VG8gPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihjYXB0dXJlKTtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQubmV4dFN1YmRpdmlzaW9uKHF1YW50VG8pO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ25vdyc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXlxcKyguKykvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChjYXB0dXJlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm93KCkgKyBuZXcgdGhpcy5jb25zdHJ1Y3RvcihjYXB0dXJlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFF1YW50aXplIHRoZSB0aW1lIGJ5IHRoZSBnaXZlbiBzdWJkaXZpc2lvbi4gT3B0aW9uYWxseSBhZGQgYVxuXHRcdCAqICBwZXJjZW50YWdlIHdoaWNoIHdpbGwgbW92ZSB0aGUgdGltZSB2YWx1ZSB0b3dhcmRzIHRoZSBpZGVhbFxuXHRcdCAqICBxdWFudGl6ZWQgdmFsdWUgYnkgdGhhdCBwZXJjZW50YWdlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ8VGltZX0gIHZhbCAgICBUaGUgc3ViZGl2aXNpb24gdG8gcXVhbnRpemUgdG9cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBbcGVyY2VudD0xXSAgTW92ZSB0aGUgdGltZSB2YWx1ZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3dhcmRzIHRoZSBxdWFudGl6ZWQgdmFsdWUgYnlcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBwZXJjZW50YWdlLlxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVGltZSgyMSkucXVhbnRpemUoMikgLy9yZXR1cm5zIDIyXG5cdFx0ICogVG9uZS5UaW1lKDAuNikucXVhbnRpemUoXCI0blwiLCAwLjUpIC8vcmV0dXJucyAwLjU1XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnF1YW50aXplID0gZnVuY3Rpb24gKHN1YmRpdiwgcGVyY2VudCkge1xuXHQgICAgICAgIHBlcmNlbnQgPSBUb25lLmRlZmF1bHRBcmcocGVyY2VudCwgMSk7XG5cdCAgICAgICAgdmFyIHN1YmRpdmlzaW9uID0gbmV3IHRoaXMuY29uc3RydWN0b3Ioc3ViZGl2KTtcblx0ICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlT2YoKTtcblx0ICAgICAgICB2YXIgbXVsdGlwbGUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3ViZGl2aXNpb24pO1xuXHQgICAgICAgIHZhciBpZGVhbCA9IG11bHRpcGxlICogc3ViZGl2aXNpb247XG5cdCAgICAgICAgdmFyIGRpZmYgPSBpZGVhbCAtIHZhbHVlO1xuXHQgICAgICAgIHJldHVybiB2YWx1ZSArIGRpZmYgKiBwZXJjZW50O1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBUaW1lIHRvIE5vdGF0aW9uLiBUaGUgbm90YXRpb24gdmFsdWVzIGFyZSB3aWxsIGJlIHRoZVxuXHRcdCAqICBjbG9zZXN0IHJlcHJlc2VudGF0aW9uIGJldHdlZW4gMW0gdG8gMTI4dGggbm90ZS5cblx0XHQgKiAgQHJldHVybiB7Tm90YXRpb259XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pZiB0aGUgVHJhbnNwb3J0IGlzIGF0IDEyMGJwbTpcblx0XHQgKiBUb25lLlRpbWUoMikudG9Ob3RhdGlvbigpOy8vcmV0dXJucyBcIjFtXCJcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9Ob3RhdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgdGltZSA9IHRoaXMudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgdmFyIHRlc3ROb3RhdGlvbnMgPSBbJzFtJ107XG5cdCAgICAgICAgZm9yICh2YXIgcG93ZXIgPSAxOyBwb3dlciA8IDg7IHBvd2VyKyspIHtcblx0ICAgICAgICAgICAgdmFyIHN1YmRpdiA9IE1hdGgucG93KDIsIHBvd2VyKTtcblx0ICAgICAgICAgICAgdGVzdE5vdGF0aW9ucy5wdXNoKHN1YmRpdiArICduLicpO1xuXHQgICAgICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goc3ViZGl2ICsgJ24nKTtcblx0ICAgICAgICAgICAgdGVzdE5vdGF0aW9ucy5wdXNoKHN1YmRpdiArICd0Jyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaCgnMCcpO1xuXHQgICAgICAgIC8vZmluZCB0aGUgY2xvc2V0cyBub3RhdGlvbiByZXByZXNlbnRhdGlvblxuXHQgICAgICAgIHZhciBjbG9zZXN0ID0gdGVzdE5vdGF0aW9uc1swXTtcblx0ICAgICAgICB2YXIgY2xvc2VzdFNlY29uZHMgPSBUb25lLlRpbWUodGVzdE5vdGF0aW9uc1swXSkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgdGVzdE5vdGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChub3RhdGlvbikge1xuXHQgICAgICAgICAgICB2YXIgbm90YXRpb25TZWNvbmRzID0gVG9uZS5UaW1lKG5vdGF0aW9uKS50b1NlY29uZHMoKTtcblx0ICAgICAgICAgICAgaWYgKE1hdGguYWJzKG5vdGF0aW9uU2Vjb25kcyAtIHRpbWUpIDwgTWF0aC5hYnMoY2xvc2VzdFNlY29uZHMgLSB0aW1lKSkge1xuXHQgICAgICAgICAgICAgICAgY2xvc2VzdCA9IG5vdGF0aW9uO1xuXHQgICAgICAgICAgICAgICAgY2xvc2VzdFNlY29uZHMgPSBub3RhdGlvblNlY29uZHM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gY2xvc2VzdDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGVuY29kZWQgYXMgQmFyczpCZWF0czpTaXh0ZWVudGhzLlxuXHRcdCAqICBAcmV0dXJuICB7QmFyc0JlYXRzU2l4dGVlbnRoc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9CYXJzQmVhdHNTaXh0ZWVudGhzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBxdWFydGVyVGltZSA9IHRoaXMuX2JlYXRzVG9Vbml0cygxKTtcblx0ICAgICAgICB2YXIgcXVhcnRlcnMgPSB0aGlzLnZhbHVlT2YoKSAvIHF1YXJ0ZXJUaW1lO1xuXHQgICAgICAgIHZhciBtZWFzdXJlcyA9IE1hdGguZmxvb3IocXVhcnRlcnMgLyB0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkpO1xuXHQgICAgICAgIHZhciBzaXh0ZWVudGhzID0gcXVhcnRlcnMgJSAxICogNDtcblx0ICAgICAgICBxdWFydGVycyA9IE1hdGguZmxvb3IocXVhcnRlcnMpICUgdGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpO1xuXHQgICAgICAgIHNpeHRlZW50aHMgPSBzaXh0ZWVudGhzLnRvU3RyaW5nKCk7XG5cdCAgICAgICAgaWYgKHNpeHRlZW50aHMubGVuZ3RoID4gMykge1xuXHQgICAgICAgICAgICAvLyB0aGUgYWRkaXRpb25hbCBwYXJzZUZsb2F0IHJlbW92ZXMgaW5zaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvZXNcblx0ICAgICAgICAgICAgc2l4dGVlbnRocyA9IHBhcnNlRmxvYXQocGFyc2VGbG9hdChzaXh0ZWVudGhzKS50b0ZpeGVkKDMpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHByb2dyZXNzID0gW1xuXHQgICAgICAgICAgICBtZWFzdXJlcyxcblx0ICAgICAgICAgICAgcXVhcnRlcnMsXG5cdCAgICAgICAgICAgIHNpeHRlZW50aHNcblx0ICAgICAgICBdO1xuXHQgICAgICAgIHJldHVybiBwcm9ncmVzcy5qb2luKCc6Jyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiB0aWNrcy5cblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b1RpY2tzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBxdWFydGVyVGltZSA9IHRoaXMuX2JlYXRzVG9Vbml0cygxKTtcblx0ICAgICAgICB2YXIgcXVhcnRlcnMgPSB0aGlzLnZhbHVlT2YoKSAvIHF1YXJ0ZXJUaW1lO1xuXHQgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHF1YXJ0ZXJzICogdGhpcy5fZ2V0UFBRKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgYXMgYSBtaWRpIG5vdGUuXG5cdFx0ICogIEByZXR1cm4gIHtNaWRpfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b01pZGkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20odGhpcy50b0ZyZXF1ZW5jeSgpKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaW1lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVHJhbnNwb3J0VGltZSBpcyBhIHRoZSB0aW1lIGFsb25nIHRoZSBUcmFuc3BvcnQnc1xuXHRcdCAqICAgICAgICAgdGltZWxpbmUuIEl0IGlzIHNpbWlsYXIgdG8gVG9uZS5UaW1lLCBidXQgaW5zdGVhZCBvZiBldmFsdWF0aW5nXG5cdFx0ICogICAgICAgICBhZ2FpbnN0IHRoZSBBdWRpb0NvbnRleHQncyBjbG9jaywgaXQgaXMgZXZhbHVhdGVkIGFnYWluc3Rcblx0XHQgKiAgICAgICAgIHRoZSBUcmFuc3BvcnQncyBwb3NpdGlvbi4gU2VlIFtUcmFuc3BvcnRUaW1lIHdpa2ldKGh0dHBzOi8vZ2l0aHViLmNvbS9Ub25lanMvVG9uZS5qcy93aWtpL1RyYW5zcG9ydFRpbWUpLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHZhbCAgICBUaGUgdGltZSB2YWx1ZSBhcyBhIG51bWJlciBvciBzdHJpbmdcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nPX0gIHVuaXRzICBVbml0IHZhbHVlc1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UaW1lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuVHJhbnNwb3J0VGltZSkge1xuXHQgICAgICAgICAgICBUb25lLlRpbWUuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVHJhbnNwb3J0VGltZSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRUaW1lLCBUb25lLlRpbWUpO1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgaW4gd2hpY2hldmVyIGNvbnRleHQgaXMgcmVsZXZhbnRcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWUucHJvdG90eXBlLl9ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LnNlY29uZHM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0VGltZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VFlQRVNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogVW5pdHMgd2hpY2ggYSB2YWx1ZSBjYW4gdGFrZSBvbi5cblx0XHQgKiBAZW51bSB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UeXBlID0ge1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIERlZmF1bHQgdW5pdHNcblx0XHRcdCAqICBAdHlwZWRlZiB7RGVmYXVsdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIERlZmF1bHQ6ICdudW1iZXInLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRpbWUgY2FuIGJlIGRlc2NyaWJlZCBpbiBhIG51bWJlciBvZiB3YXlzLiBSZWFkIG1vcmUgW1RpbWVdKGh0dHBzOi8vZ2l0aHViLmNvbS9Ub25lanMvVG9uZS5qcy93aWtpL1RpbWUpLlxuXHRcdFx0ICpcblx0XHRcdCAqICAqIE51bWJlcnMsIHdoaWNoIHdpbGwgYmUgdGFrZW4gbGl0ZXJhbGx5IGFzIHRoZSB0aW1lIChpbiBzZWNvbmRzKS5cblx0XHRcdCAqICAqIE5vdGF0aW9uLCAoXCI0blwiLCBcIjh0XCIpIGRlc2NyaWJlcyB0aW1lIGluIEJQTSBhbmQgdGltZSBzaWduYXR1cmUgcmVsYXRpdmUgdmFsdWVzLlxuXHRcdFx0ICogICogVHJhbnNwb3J0VGltZSwgKFwiNDozOjJcIikgd2lsbCBhbHNvIHByb3ZpZGUgdGVtcG8gYW5kIHRpbWUgc2lnbmF0dXJlIHJlbGF0aXZlIHRpbWVzXG5cdFx0XHQgKiAgaW4gdGhlIGZvcm0gQkFSUzpRVUFSVEVSUzpTSVhURUVOVEhTLlxuXHRcdFx0ICogICogRnJlcXVlbmN5LCAoXCI4aHpcIikgaXMgY29udmVydGVkIHRvIHRoZSBsZW5ndGggb2YgdGhlIGN5Y2xlIGluIHNlY29uZHMuXG5cdFx0XHQgKiAgKiBOb3ctUmVsYXRpdmUsIChcIisxXCIpIHByZWZpeCBhbnkgb2YgdGhlIGFib3ZlIHdpdGggXCIrXCIgYW5kIGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXNcblx0XHRcdCAqICBcInRoZSBjdXJyZW50IHRpbWUgcGx1cyB3aGF0ZXZlciBleHByZXNzaW9uIGZvbGxvd3NcIi5cblx0XHRcdCAqICAqIEV4cHJlc3Npb25zLCAoXCIzOjAgKyAyIC0gKDFtIC8gNylcIikgYW55IG9mIHRoZSBhYm92ZSBjYW4gYWxzbyBiZSBjb21iaW5lZFxuXHRcdFx0ICogIGludG8gYSBtYXRoZW1hdGljYWwgZXhwcmVzc2lvbiB3aGljaCB3aWxsIGJlIGV2YWx1YXRlZCB0byBjb21wdXRlIHRoZSBkZXNpcmVkIHRpbWUuXG5cdFx0XHQgKiAgKiBObyBBcmd1bWVudCwgZm9yIG1ldGhvZHMgd2hpY2ggYWNjZXB0IHRpbWUsIG5vIGFyZ3VtZW50IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXNcblx0XHRcdCAqICBcIm5vd1wiIChpLmUuIHRoZSBjdXJyZW50VGltZSkuXG5cdFx0XHQgKlxuXHRcdFx0ICogIEB0eXBlZGVmIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgVGltZTogJ3RpbWUnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEZyZXF1ZW5jeSBjYW4gYmUgZGVzY3JpYmVkIHNpbWlsYXIgdG8gdGltZSwgZXhjZXB0IHVsdGltYXRlbHkgdGhlXG5cdFx0XHQgKiAgdmFsdWVzIGFyZSBjb252ZXJ0ZWQgdG8gZnJlcXVlbmN5IGluc3RlYWQgb2Ygc2Vjb25kcy4gQSBudW1iZXJcblx0XHRcdCAqICBpcyB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHZhbHVlIGluIGhlcnR6LiBBZGRpdGlvbmFsbHkgYW55IG9mIHRoZVxuXHRcdFx0ICogIFRpbWUgZW5jb2RpbmdzIGNhbiBiZSB1c2VkLiBOb3RlIG5hbWVzIGluIHRoZSBmb3JtXG5cdFx0XHQgKiAgb2YgTk9URSBPQ1RBVkUgKGkuZS4gQzQpIGFyZSBhbHNvIGFjY2VwdGVkIGFuZCBjb252ZXJ0ZWQgdG8gdGhlaXJcblx0XHRcdCAqICBmcmVxdWVuY3kgdmFsdWUuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0ZyZXF1ZW5jeX1cblx0XHRcdCAqL1xuXHQgICAgICAgIEZyZXF1ZW5jeTogJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVHJhbnNwb3J0VGltZSBkZXNjcmliZXMgYSBwb3NpdGlvbiBhbG9uZyB0aGUgVHJhbnNwb3J0J3MgdGltZWxpbmUuIEl0IGlzXG5cdFx0XHQgKiAgc2ltaWxhciB0byBUaW1lIGluIHRoYXQgaXQgdXNlcyBhbGwgdGhlIHNhbWUgZW5jb2RpbmdzLCBidXQgVHJhbnNwb3J0VGltZSBzcGVjaWZpY2FsbHlcblx0XHRcdCAqICBwZXJ0YWlucyB0byB0aGUgVHJhbnNwb3J0J3MgdGltZWxpbmUsIHdoaWNoIGlzIHN0YXJ0YWJsZSwgc3RvcHBhYmxlLCBsb29wYWJsZSwgYW5kIHNlZWthYmxlLlxuXHRcdFx0ICogIFtSZWFkIG1vcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9Ub25lanMvVG9uZS5qcy93aWtpL1RyYW5zcG9ydFRpbWUpXG5cdFx0XHQgKiAgQHR5cGVkZWYge1RyYW5zcG9ydFRpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBUcmFuc3BvcnRUaW1lOiAndHJhbnNwb3J0VGltZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGlja3MgYXJlIHRoZSBiYXNpYyBzdWJ1bml0IG9mIHRoZSBUcmFuc3BvcnQuIFRoZXkgYXJlXG5cdFx0XHQgKiAgdGhlIHNtYWxsZXN0IHVuaXQgb2YgdGltZSB0aGF0IHRoZSBUcmFuc3BvcnQgc3VwcG9ydHMuXG5cdFx0XHQgKiAgQHR5cGVkZWYge1RpY2tzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgVGlja3M6ICd0aWNrcycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTm9ybWFsIHZhbHVlcyBhcmUgd2l0aGluIHRoZSByYW5nZSBbMCwgMV0uXG5cdFx0XHQgKiAgQHR5cGVkZWYge05vcm1hbFJhbmdlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgTm9ybWFsUmFuZ2U6ICdub3JtYWxSYW5nZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQXVkaW9SYW5nZSB2YWx1ZXMgYXJlIGJldHdlZW4gWy0xLCAxXS5cblx0XHRcdCAqICBAdHlwZWRlZiB7QXVkaW9SYW5nZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIEF1ZGlvUmFuZ2U6ICdhdWRpb1JhbmdlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBEZWNpYmVscyBhcmUgYSBsb2dhcml0aG1pYyB1bml0IG9mIG1lYXN1cmVtZW50IHdoaWNoIGlzIHVzZWZ1bCBmb3Igdm9sdW1lXG5cdFx0XHQgKiAgYmVjYXVzZSBvZiB0aGUgbG9nYXJpdGhtaWMgd2F5IHRoYXQgd2UgcGVyY2VpdmUgbG91ZG5lc3MuIDAgZGVjaWJlbHNcblx0XHRcdCAqICBtZWFucyBubyBjaGFuZ2UgaW4gdm9sdW1lLiAtMTBkYiBpcyBhcHByb3hpbWF0ZWx5IGhhbGYgYXMgbG91ZCBhbmQgMTBkYlxuXHRcdFx0ICogIGlzIHR3aWNlIGlzIGxvdWQuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0RlY2liZWxzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgRGVjaWJlbHM6ICdkYicsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFsZi1zdGVwIG5vdGUgaW5jcmVtZW50cywgaS5lLiAxMiBpcyBhbiBvY3RhdmUgYWJvdmUgdGhlIHJvb3QuIGFuZCAxIGlzIGEgaGFsZi1zdGVwIHVwLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtJbnRlcnZhbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIEludGVydmFsOiAnaW50ZXJ2YWwnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEJlYXRzIHBlciBtaW51dGUuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0JQTX1cblx0XHRcdCAqL1xuXHQgICAgICAgIEJQTTogJ2JwbScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuXG5cdFx0XHQgKiAgQHR5cGVkZWYge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgUG9zaXRpdmU6ICdwb3NpdGl2ZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgR2FpbiBpcyB0aGUgcmF0aW8gYmV0d2VlbiBpbnB1dCBhbmQgb3V0cHV0IG9mIGEgc2lnbmFsLlxuXHRcdFx0ICogIEEgZ2FpbiBvZiAwIGlzIHRoZSBzYW1lIGFzIHNpbGVuY2luZyB0aGUgc2lnbmFsLiBBIGdhaW4gb2Zcblx0XHRcdCAqICAxLCBjYXVzZXMgbm8gY2hhbmdlIHRvIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0dhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICBHYWluOiAnZ2FpbicsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBjZW50IGlzIGEgaHVuZHJlZHRoIG9mIGEgc2VtaXRvbmUuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0NlbnRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQ2VudHM6ICdjZW50cycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW5nbGUgYmV0d2VlbiAwIGFuZCAzNjAuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0RlZ3JlZXN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBEZWdyZWVzOiAnZGVncmVlcycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBudW1iZXIgcmVwcmVzZW50aW5nIGEgbWlkaSBub3RlLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtNSURJfVxuXHRcdFx0ICovXG5cdCAgICAgICAgTUlESTogJ21pZGknLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgY29sb24tc2VwYXJhdGVkIHJlcHJlc2VudGF0aW9uIG9mIHRpbWUgaW4gdGhlIGZvcm0gb2Zcblx0XHRcdCAqICBCYXJzOkJlYXRzOlNpeHRlZW50aHMuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0JhcnNCZWF0c1NpeHRlZW50aHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBCYXJzQmVhdHNTaXh0ZWVudGhzOiAnYmFyc0JlYXRzU2l4dGVlbnRocycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2FtcGxpbmcgaXMgdGhlIHJlZHVjdGlvbiBvZiBhIGNvbnRpbnVvdXMgc2lnbmFsIHRvIGEgZGlzY3JldGUgc2lnbmFsLlxuXHRcdFx0ICogIEF1ZGlvIGlzIHR5cGljYWxseSBzYW1wbGVkIDQ0MTAwIHRpbWVzIHBlciBzZWNvbmQuXG5cdFx0XHQgKiAgQHR5cGVkZWYge1NhbXBsZXN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBTYW1wbGVzOiAnc2FtcGxlcycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGVydHogYXJlIGEgZnJlcXVlbmN5IHJlcHJlc2VudGF0aW9uIGRlZmluZWQgYXMgb25lIGN5Y2xlIHBlciBzZWNvbmQuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0hlcnR6fVxuXHRcdFx0ICovXG5cdCAgICAgICAgSGVydHo6ICdoZXJ0eicsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBmcmVxdWVuY3kgcmVwcmVzZW50ZWQgYnkgYSBsZXR0ZXIgbmFtZSxcblx0XHRcdCAqICBhY2NpZGVudGFsIGFuZCBvY3RhdmUuIFRoaXMgc3lzdGVtIGlzIGtub3duIGFzXG5cdFx0XHQgKiAgW1NjaWVudGlmaWMgUGl0Y2ggTm90YXRpb25dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NjaWVudGlmaWNfcGl0Y2hfbm90YXRpb24pLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtOb3RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgTm90ZTogJ25vdGUnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE9uZSBtaWxsaXNlY29uZCBpcyBhIHRob3VzYW5kdGggb2YgYSBzZWNvbmQuXG5cdFx0XHQgKiAgQHR5cGVkZWYge01pbGxpc2Vjb25kc31cblx0XHRcdCAqL1xuXHQgICAgICAgIE1pbGxpc2Vjb25kczogJ21pbGxpc2Vjb25kcycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2Vjb25kcyBhcmUgdGhlIHRpbWUgdW5pdCBvZiB0aGUgQXVkaW9Db250ZXh0LiBJbiB0aGUgZW5kLFxuXHRcdFx0ICogIGFsbCB2YWx1ZXMgbmVlZCB0byBiZSBldmFsdWF0ZWQgdG8gc2Vjb25kcy5cblx0XHRcdCAqICBAdHlwZWRlZiB7U2Vjb25kc31cblx0XHRcdCAqL1xuXHQgICAgICAgIFNlY29uZHM6ICdzZWNvbmRzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHN0cmluZyByZXByZXNlbnRpbmcgYSBkdXJhdGlvbiByZWxhdGl2ZSB0byBhIG1lYXN1cmUuXG5cdFx0XHQgKiAgKiBcIjRuXCIgPSBxdWFydGVyIG5vdGVcblx0XHRcdCAqICAqIFwiMm1cIiA9IHR3byBtZWFzdXJlc1xuXHRcdFx0ICogICogXCI4dFwiID0gZWlnaHRoLW5vdGUgdHJpcGxldFxuXHRcdFx0ICogIEB0eXBlZGVmIHtOb3RhdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIE5vdGF0aW9uOiAnbm90YXRpb24nXG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBBVUdNRU5UIFRPTkUncyBQUk9UT1RZUEVcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgVGltZSBpbnRvIHNlY29uZHMuXG5cdFx0ICpcblx0XHQgKiAgVW5saWtlIHRoZSBtZXRob2Qgd2hpY2ggaXQgb3ZlcnJpZGVzLCB0aGlzIHRha2VzIGludG8gYWNjb3VudFxuXHRcdCAqICB0cmFuc3BvcnR0aW1lIGFuZCBtdXNpY2FsIG5vdGF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIFRpbWUgOiAxLjQwXG5cdFx0ICogIE5vdGF0aW9uOiA0biBvciAxbSBvciAydFxuXHRcdCAqICBOb3cgUmVsYXRpdmU6ICszblxuXHRcdCAqICBNYXRoOiAzbisxNm4gb3IgZXZlbiBjb21wbGljYXRlZCBleHByZXNzaW9ucyAoKDNuKjIpLzYgKyAxKVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHJldHVybiB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRpbWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzVW5kZWYodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMubm93KCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaW1lKHRpbWUpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGltZSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRpbWUudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgZnJlcXVlbmN5IHJlcHJlc2VudGF0aW9uIGludG8gYSBudW1iZXIuXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gZnJlcVxuXHRcdCAqICBAcmV0dXJuIHtIZXJ0en0gICAgICB0aGUgZnJlcXVlbmN5IGluIGhlcnR6XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIoZnJlcSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZyZXE7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKGZyZXEpIHx8IFRvbmUuaXNVbmRlZihmcmVxKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuRnJlcXVlbmN5KGZyZXEpLnZhbHVlT2YoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGZyZXEgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmcmVxLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgdGltZSByZXByZXNlbnRhdGlvbiBpbnRvIHRpY2tzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm4ge1RpY2tzfSAgdGhlIHRpbWUgaW4gdGlja3Ncblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKHRpbWUpIHx8IFRvbmUuaXNTdHJpbmcodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRyYW5zcG9ydFRpbWUodGltZSkudG9UaWNrcygpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1VuZGVmKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC50aWNrcztcblx0ICAgICAgICB9IGVsc2UgaWYgKHRpbWUgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aW1lLnRvVGlja3MoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBhcmFtIHdyYXBzIHRoZSBuYXRpdmUgV2ViIEF1ZGlvJ3MgQXVkaW9QYXJhbSB0byBwcm92aWRlXG5cdFx0ICogICAgICAgICBhZGRpdGlvbmFsIHVuaXQgY29udmVyc2lvbiBmdW5jdGlvbmFsaXR5LiBJdCBhbHNvXG5cdFx0ICogICAgICAgICBzZXJ2ZXMgYXMgYSBiYXNlLWNsYXNzIGZvciBjbGFzc2VzIHdoaWNoIGhhdmUgYSBzaW5nbGUsXG5cdFx0ICogICAgICAgICBhdXRvbWF0YWJsZSBwYXJhbWV0ZXIuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtICB7QXVkaW9QYXJhbX0gIHBhcmFtICBUaGUgcGFyYW1ldGVyIHRvIHdyYXAuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuVHlwZX0gdW5pdHMgVGhlIHVuaXRzIG9mIHRoZSBhdWRpbyBwYXJhbS5cblx0XHQgKiAgQHBhcmFtICB7Qm9vbGVhbn0gY29udmVydCBJZiB0aGUgcGFyYW0gc2hvdWxkIGJlIGNvbnZlcnRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncGFyYW0nLFxuXHQgICAgICAgICAgICAndW5pdHMnLFxuXHQgICAgICAgICAgICAnY29udmVydCdcblx0ICAgICAgICBdLCBUb25lLlBhcmFtKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBuYXRpdmUgcGFyYW1ldGVyIHRvIGNvbnRyb2xcblx0XHRcdCAqICBAdHlwZSAge0F1ZGlvUGFyYW19XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dCA9IG9wdGlvbnMucGFyYW07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHVuaXRzIG9mIHRoZSBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UeXBlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy51bml0cyA9IG9wdGlvbnMudW5pdHM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSWYgdGhlIHZhbHVlIHNob3VsZCBiZSBjb252ZXJ0ZWQgb3Igbm90XG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmNvbnZlcnQgPSBvcHRpb25zLmNvbnZlcnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVHJ1ZSBpZiB0aGUgc2lnbmFsIHZhbHVlIGlzIGJlaW5nIG92ZXJyaWRkZW4gYnlcblx0XHRcdCAqICBhIGNvbm5lY3RlZCBzaWduYWwuXG5cdFx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0XHQgKiAgQHR5cGUgIHtib29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm92ZXJyaWRkZW4gPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB0aW1lbGluZSB3aGljaCB0cmFja3MgYWxsIG9mIHRoZSBhdXRvbWF0aW9ucy5cblx0XHRcdCAqIEB0eXBlIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBUb25lLlRpbWVsaW5lKDEwMDApO1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChvcHRpb25zLnZhbHVlKSAmJiB0aGlzLl9wYXJhbSkge1xuXHQgICAgICAgICAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYXJhbSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlZmF1bHQsXG5cdCAgICAgICAgJ2NvbnZlcnQnOiB0cnVlLFxuXHQgICAgICAgICdwYXJhbSc6IHVuZGVmaW5lZFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGFyYW0jXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFyYW0ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdG9Vbml0cyh0aGlzLmdldFZhbHVlQXRUaW1lKG5vdykpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5faW5pdGlhbFZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICAgICAgdGhpcy5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUF0VGltZSh2YWx1ZSwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGFyYW0jXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFyYW0ucHJvdG90eXBlLCAnbWluVmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuVGltZSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuRnJlcXVlbmN5IHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuUG9zaXRpdmUgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkJQTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkF1ZGlvUmFuZ2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAtMTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuRGVjaWJlbHMpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAtSW5maW5pdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW0ubWluVmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIG91dHB1dCB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGFyYW0jXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFyYW0ucHJvdG90eXBlLCAnbWF4VmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuTm9ybWFsUmFuZ2UgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkF1ZGlvUmFuZ2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmFtLm1heFZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCB0aGUgZ2l2ZW4gdmFsdWUgZnJvbSB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgVG9uZS5QYXJhbS51bml0c1xuXHRcdCAqICBpbnRvIHRoZSBkZXN0aW5hdGlvbiB2YWx1ZSAoc3VjaCBhcyBHYWluIG9yIEZyZXF1ZW5jeSkuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSAgeyp9IHZhbCB0aGUgdmFsdWUgdG8gY29udmVydFxuXHRcdCAqICBAcmV0dXJuIHtudW1iZXJ9ICAgICB0aGUgbnVtYmVyIHdoaWNoIHRoZSB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fZnJvbVVuaXRzID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIGlmICgodGhpcy5jb252ZXJ0IHx8IFRvbmUuaXNVbmRlZih0aGlzLmNvbnZlcnQpKSAmJiAhdGhpcy5vdmVycmlkZGVuKSB7XG5cdCAgICAgICAgICAgIHN3aXRjaCAodGhpcy51bml0cykge1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5UaW1lOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9TZWNvbmRzKHZhbCk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLkZyZXF1ZW5jeTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvRnJlcXVlbmN5KHZhbCk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLkRlY2liZWxzOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZGJUb0dhaW4odmFsKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuTm9ybWFsUmFuZ2U6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgodmFsLCAwKSwgMSk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLkF1ZGlvUmFuZ2U6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgodmFsLCAtMSksIDEpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5Qb3NpdGl2ZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCh2YWwsIDApO1xuXHQgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENvbnZlcnQgdGhlIHBhcmFtZXRlcnMgdmFsdWUgaW50byB0aGUgdW5pdHMgc3BlY2lmaWVkIGJ5IFRvbmUuUGFyYW0udW5pdHMuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0gIHtudW1iZXJ9IHZhbCB0aGUgdmFsdWUgdG8gY29udmVydFxuXHRcdCAqIEByZXR1cm4ge251bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl90b1VuaXRzID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIGlmICh0aGlzLmNvbnZlcnQgfHwgVG9uZS5pc1VuZGVmKHRoaXMuY29udmVydCkpIHtcblx0ICAgICAgICAgICAgc3dpdGNoICh0aGlzLnVuaXRzKSB7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLkRlY2liZWxzOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZ2FpblRvRGIodmFsKTtcblx0ICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fbWluT3V0cHV0ID0gMC4wMDAwMTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZXZlbnQgdHlwZXNcblx0XHQgKiAgQGVudW0ge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUgPSB7XG5cdCAgICAgICAgTGluZWFyOiAnbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgIEV4cG9uZW50aWFsOiAnZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZScsXG5cdCAgICAgICAgVGFyZ2V0OiAnc2V0VGFyZ2V0QXRUaW1lJyxcblx0ICAgICAgICBTZXRWYWx1ZTogJ3NldFZhbHVlQXRUaW1lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYSBwYXJhbWV0ZXIgdmFsdWUgY2hhbmdlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0geyp9XHR2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0IHRoZSBzaWduYWwuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gIHRpbWUgVGhlIHRpbWUgd2hlbiB0aGUgY2hhbmdlIHNob3VsZCBvY2N1ci5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NldCB0aGUgZnJlcXVlbmN5IHRvIFwiRzRcIiBpbiBleGFjdGx5IDEgc2Vjb25kIGZyb20gbm93LlxuXHRcdCAqIGZyZXEuc2V0VmFsdWVBdFRpbWUoXCJHNFwiLCBcIisxXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuc2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuU2V0VmFsdWUsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5zZXRWYWx1ZUF0VGltZSh2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc2lnbmFscyB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gU3Vic2VxdWVudCBzY2hlZHVsaW5nXG5cdFx0ICogIG1heSBpbnZhbGlkYXRlIHRoZSByZXR1cm5lZCB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFdoZW4gdG8gZ2V0IHRoZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfSBUaGUgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGFmdGVyID0gdGhpcy5fZXZlbnRzLmdldEFmdGVyKHRpbWUpO1xuXHQgICAgICAgIHZhciBiZWZvcmUgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHZhciBpbml0aWFsVmFsdWUgPSBUb25lLmRlZmF1bHRBcmcodGhpcy5faW5pdGlhbFZhbHVlLCB0aGlzLl9wYXJhbS5kZWZhdWx0VmFsdWUpO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblx0ICAgICAgICAvL2lmIGl0IHdhcyBzZXQgYnlcblx0ICAgICAgICBpZiAoYmVmb3JlID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYmVmb3JlLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuVGFyZ2V0KSB7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91cyA9IHRoaXMuX2V2ZW50cy5nZXRCZWZvcmUoYmVmb3JlLnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXNWYWw7XG5cdCAgICAgICAgICAgIGlmIChwcmV2aW91cyA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgcHJldmlvdXNWYWwgPSBpbml0aWFsVmFsdWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbCA9IHByZXZpb3VzLnZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZXhwb25lbnRpYWxBcHByb2FjaChiZWZvcmUudGltZSwgcHJldmlvdXNWYWwsIGJlZm9yZS52YWx1ZSwgYmVmb3JlLmNvbnN0YW50LCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGFmdGVyID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gYmVmb3JlLnZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9saW5lYXJJbnRlcnBvbGF0ZShiZWZvcmUudGltZSwgYmVmb3JlLnZhbHVlLCBhZnRlci50aW1lLCBhZnRlci52YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZXhwb25lbnRpYWxJbnRlcnBvbGF0ZShiZWZvcmUudGltZSwgYmVmb3JlLnZhbHVlLCBhZnRlci50aW1lLCBhZnRlci52YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSBiZWZvcmUudmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB2YWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ3JlYXRlcyBhIHNjaGVkdWxlIHBvaW50IHdpdGggdGhlIGN1cnJlbnQgdmFsdWUgYXQgdGhlIGN1cnJlbnQgdGltZS5cblx0XHQgKiAgVGhpcyBpcyB1c2VmdWwgZm9yIGNyZWF0aW5nIGFuIGF1dG9tYXRpb24gYW5jaG9yIHBvaW50IGluIG9yZGVyIHRvXG5cdFx0ICogIHNjaGVkdWxlIGNoYW5nZXMgZnJvbSB0aGUgY3VycmVudCB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IG5vdyAoT3B0aW9uYWxseSkgcGFzcyB0aGUgbm93IHZhbHVlIGluLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuc2V0UmFtcFBvaW50ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWwgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuY2FuY2VsQW5kSG9sZEF0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAoY3VycmVudFZhbCA9PT0gMCkge1xuXHQgICAgICAgICAgICBjdXJyZW50VmFsID0gdGhpcy5fbWluT3V0cHV0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnNldFZhbHVlQXRUaW1lKHRoaXMuX3RvVW5pdHMoY3VycmVudFZhbCksIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYSBsaW5lYXIgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb20gdGhlXG5cdFx0ICogIHByZXZpb3VzIHNjaGVkdWxlZCBwYXJhbWV0ZXIgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZW5kVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIGVuZFRpbWUpIHtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgZW5kVGltZSA9IHRoaXMudG9TZWNvbmRzKGVuZFRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiBlbmRUaW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIGVuZFRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gZXhwb25lbnRpYWwgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb21cblx0XHQgKiAgdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwYXJhbWV0ZXIgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZW5kVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5kVGltZSkge1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICB2YWx1ZSA9IE1hdGgubWF4KHRoaXMuX21pbk91dHB1dCwgdmFsdWUpO1xuXHQgICAgICAgIGVuZFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhlbmRUaW1lKTtcblx0ICAgICAgICAvL3N0b3JlIHRoZSBldmVudFxuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwsXG5cdCAgICAgICAgICAgICd0aW1lJzogZW5kVGltZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBlbmRUaW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGV4cG9uZW50aWFsIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBjdXJyZW50IHRpbWUgYW5kIGN1cnJlbnQgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlIG92ZXIgdGhlXG5cdFx0ICogIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2V4cG9uZW50aWFsbHkgcmFtcCB0byB0aGUgdmFsdWUgMiBvdmVyIDQgc2Vjb25kcy5cblx0XHQgKiBzaWduYWwuZXhwb25lbnRpYWxSYW1wVG8oMiwgNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIHN0YXJ0VGltZSArIHRoaXMudG9TZWNvbmRzKHJhbXBUaW1lKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhbiBsaW5lYXIgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb21cblx0XHQgKiAgdGhlIGN1cnJlbnQgdGltZSBhbmQgY3VycmVudCB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUgb3ZlciB0aGVcblx0XHQgKiAgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWUgICBUaGUgdmFsdWUgdG8gcmFtcCB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbGluZWFybHkgcmFtcCB0byB0aGUgdmFsdWUgNCBvdmVyIDMgc2Vjb25kcy5cblx0XHQgKiBzaWduYWwubGluZWFyUmFtcFRvKDQsIDMpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUubGluZWFyUmFtcFRvID0gZnVuY3Rpb24gKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLnNldFJhbXBQb2ludChzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIHN0YXJ0VGltZSArIHRoaXMudG9TZWNvbmRzKHJhbXBUaW1lKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gU2luY2UgaXRcblx0XHQgKiAgaXMgYW4gZXhwb25lbnRpYWwgYXBwcm9hY2ggaXQgd2lsbCBjb250aW51ZSBhcHByb2FjaGluZyBhZnRlciB0aGUgcmFtcCBkdXJhdGlvbi4gVGhlXG5cdFx0ICogIHJhbXBUaW1lIGlzIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdG8gcmVhY2ggb3ZlciA5OSUgb2YgdGhlIHdheSB0b3dhcmRzIHRoZSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0W3N0YXJ0VGltZT1ub3ddIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9leHBvbmVudGlhbGx5IHJhbXAgdG8gdGhlIHZhbHVlIDIgb3ZlciA0IHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmV4cG9uZW50aWFsUmFtcFRvKDIsIDQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUudGFyZ2V0UmFtcFRvID0gZnVuY3Rpb24gKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLnNldFJhbXBQb2ludChzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKHZhbHVlLCBzdGFydFRpbWUsIHJhbXBUaW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBTaW5jZSBpdFxuXHRcdCAqICBpcyBhbiBleHBvbmVudGlhbCBhcHByb2FjaCBpdCB3aWxsIGNvbnRpbnVlIGFwcHJvYWNoaW5nIGFmdGVyIHRoZSByYW1wIGR1cmF0aW9uLiBUaGVcblx0XHQgKiAgcmFtcFRpbWUgaXMgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0byByZWFjaCBvdmVyIDk5JSBvZiB0aGUgd2F5IHRvd2FyZHMgdGhlIHZhbHVlLiBUaGlzIG1ldGhvZHNcblx0XHQgKiAgaXMgc2ltaWxhciB0byBzZXRUYXJnZXRBdFRpbWUgZXhjZXB0IHRoZSB0aGlyZCBhcmd1bWVudCBpcyBhIHRpbWUgaW5zdGVhZCBvZiBhICd0aW1lQ29uc3RhbnQnXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWUgICBUaGUgdmFsdWUgdG8gcmFtcCB0by5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0dGltZSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2V4cG9uZW50aWFsbHkgcmFtcCB0byB0aGUgdmFsdWUgMiBvdmVyIDQgc2Vjb25kcy5cblx0XHQgKiBzaWduYWwuZXhwb25lbnRpYWxSYW1wVG8oMiwgNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUsIHJhbXBUaW1lKSB7XG5cdCAgICAgICAgdmFyIHRpbWVDb25zdGFudCA9IE1hdGgubG9nKHRoaXMudG9TZWNvbmRzKHJhbXBUaW1lKSArIDEpIC8gTWF0aC5sb2coMjAwKTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuc2V0VGFyZ2V0QXRUaW1lKHZhbHVlLCB0aW1lLCB0aW1lQ29uc3RhbnQpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUgd2l0aFxuXHRcdCAqICBhIHJhdGUgaGF2aW5nIHRoZSBnaXZlbiB0aW1lIGNvbnN0YW50LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHRpbWVDb25zdGFudFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25zdGFudCkge1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICAvLyBUaGUgdmFsdWUgd2lsbCBuZXZlciBiZSBhYmxlIHRvIGFwcHJvYWNoIHdpdGhvdXQgdGltZUNvbnN0YW50ID4gMC5cblx0ICAgICAgICBpZiAodGltZUNvbnN0YW50IDw9IDApIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aW1lQ29uc3RhbnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCcpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuVGFyZ2V0LFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiBzdGFydFRpbWUsXG5cdCAgICAgICAgICAgICdjb25zdGFudCc6IHRpbWVDb25zdGFudFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLnNldFRhcmdldEF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIGFuIGFycmF5IG9mIGFyYml0cmFyeSBwYXJhbWV0ZXIgdmFsdWVzIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb24uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtBcnJheX0gdmFsdWVzXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gZHVyYXRpb25cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3NjYWxpbmc9MV0gSWYgdGhlIHZhbHVlcyBpbiB0aGUgY3VydmUgc2hvdWxkIGJlIHNjYWxlZCBieSBzb21lIHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRWYWx1ZUN1cnZlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlcywgc3RhcnRUaW1lLCBkdXJhdGlvbiwgc2NhbGluZykge1xuXHQgICAgICAgIHNjYWxpbmcgPSBUb25lLmRlZmF1bHRBcmcoc2NhbGluZywgMSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLnNldFZhbHVlQXRUaW1lKHZhbHVlc1swXSAqIHNjYWxpbmcsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdmFyIHNlZ1RpbWUgPSBkdXJhdGlvbiAvICh2YWx1ZXMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZXNbaV0gKiBzY2FsaW5nLCBzdGFydFRpbWUgKyBpICogc2VnVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWxzIGFsbCBzY2hlZHVsZWQgcGFyYW1ldGVyIGNoYW5nZXMgd2l0aCB0aW1lcyBncmVhdGVyIHRoYW4gb3Jcblx0XHQgKiAgZXF1YWwgdG8gc3RhcnRUaW1lLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGlzIGlzIHNpbWlsYXIgdG8gW2NhbmNlbFNjaGVkdWxlZFZhbHVlc10oI2NhbmNlbFNjaGVkdWxlZFZhbHVlcykgZXhjZXB0XG5cdFx0ICogIGl0IGhvbGRzIHRoZSBhdXRvbWF0ZWQgdmFsdWUgYXQgdGltZSB1bnRpbCB0aGUgbmV4dCBhdXRvbWF0ZWQgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmNhbmNlbEFuZEhvbGRBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB2YWx1ZUF0VGltZSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgLy9pZiB0aGVyZSBpcyBhbiBldmVudCBhdCB0aGUgZ2l2ZW4gdGltZVxuXHQgICAgICAgIC8vYW5kIHRoYXQgZXZlbiBpcyBub3QgYSBcInNldFwiXG5cdCAgICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgdmFyIGFmdGVyID0gdGhpcy5fZXZlbnRzLmdldEFmdGVyKHRpbWUpO1xuXHQgICAgICAgIGlmIChiZWZvcmUgJiYgYmVmb3JlLnRpbWUgPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgLy9yZW1vdmUgZXZlcnl0aGluZyBhZnRlclxuXHQgICAgICAgICAgICBpZiAoYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwoYWZ0ZXIudGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKHRpbWUgKyAwLjAwMDAwMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKGFmdGVyKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIHRoZSBuZXh0IGV2ZW50KHMpXG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwoYWZ0ZXIudGltZSk7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcGFyYW0uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcikge1xuXHQgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZUF0VGltZSwgdGltZSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZUF0VGltZSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5FeHBvbmVudGlhbCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlQXRUaW1lLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5FeHBvbmVudGlhbCxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVBdFRpbWUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc2V0IHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuU2V0VmFsdWUsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlQXRUaW1lLFxuXHQgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBpZiAodGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhcmFtLnNldFZhbHVlQXRUaW1lKHZhbHVlQXRUaW1lLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJhbXBzIHRvIHRoZSBnaXZlbiB2YWx1ZSBvdmVyIHRoZSBkdXJhdGlvbiBvZiB0aGUgcmFtcFRpbWUuXG5cdFx0ICogIEF1dG9tYXRpY2FsbHkgc2VsZWN0cyB0aGUgYmVzdCByYW1wIHR5cGUgKGV4cG9uZW50aWFsIG9yIGxpbmVhcilcblx0XHQgKiAgZGVwZW5kaW5nIG9uIHRoZSBgdW5pdHNgIG9mIHRoZSBzaWduYWxcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIFx0VGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0W3N0YXJ0VGltZT1ub3ddIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9yYW1wIHRvIHRoZSB2YWx1ZSBlaXRoZXIgbGluZWFybHkgb3IgZXhwb25lbnRpYWxseVxuXHRcdCAqIC8vZGVwZW5kaW5nIG9uIHRoZSBcInVuaXRzXCIgdmFsdWUgb2YgdGhlIHNpZ25hbFxuXHRcdCAqIHNpZ25hbC5yYW1wVG8oMCwgMTApO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2NoZWR1bGUgaXQgdG8gcmFtcCBzdGFydGluZyBhdCBhIHNwZWNpZmljIHRpbWVcblx0XHQgKiBzaWduYWwucmFtcFRvKDAsIDEwLCA1KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUucmFtcFRvID0gZnVuY3Rpb24gKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgcmFtcFRpbWUgPSBUb25lLmRlZmF1bHRBcmcocmFtcFRpbWUsIDAuMSk7XG5cdCAgICAgICAgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5GcmVxdWVuY3kgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkJQTSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuRGVjaWJlbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5leHBvbmVudGlhbFJhbXBUbyh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5saW5lYXJSYW1wVG8odmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBVVRPTUFUSU9OIENVUlZFIENBTENVTEFUSU9OU1xuXHQgICAgLy9cdE1JVCBMaWNlbnNlLCBjb3B5cmlnaHQgKGMpIDIwMTQgSm9yZGFuIFNhbnRlbGxcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gQ2FsY3VsYXRlcyB0aGUgdGhlIHZhbHVlIGFsb25nIHRoZSBjdXJ2ZSBwcm9kdWNlZCBieSBzZXRUYXJnZXRBdFRpbWVcblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9leHBvbmVudGlhbEFwcHJvYWNoID0gZnVuY3Rpb24gKHQwLCB2MCwgdjEsIHRpbWVDb25zdGFudCwgdCkge1xuXHQgICAgICAgIHJldHVybiB2MSArICh2MCAtIHYxKSAqIE1hdGguZXhwKC0odCAtIHQwKSAvIHRpbWVDb25zdGFudCk7XG5cdCAgICB9O1xuXHQgICAgLy8gQ2FsY3VsYXRlcyB0aGUgdGhlIHZhbHVlIGFsb25nIHRoZSBjdXJ2ZSBwcm9kdWNlZCBieSBsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZVxuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2xpbmVhckludGVycG9sYXRlID0gZnVuY3Rpb24gKHQwLCB2MCwgdDEsIHYxLCB0KSB7XG5cdCAgICAgICAgcmV0dXJuIHYwICsgKHYxIC0gdjApICogKCh0IC0gdDApIC8gKHQxIC0gdDApKTtcblx0ICAgIH07XG5cdCAgICAvLyBDYWxjdWxhdGVzIHRoZSB0aGUgdmFsdWUgYWxvbmcgdGhlIGN1cnZlIHByb2R1Y2VkIGJ5IGV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWVcblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9leHBvbmVudGlhbEludGVycG9sYXRlID0gZnVuY3Rpb24gKHQwLCB2MCwgdDEsIHYxLCB0KSB7XG5cdCAgICAgICAgcmV0dXJuIHYwICogTWF0aC5wb3codjEgLyB2MCwgKHQgLSB0MCkgLyAodDEgLSB0MCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhcmFtO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIHRoZSBPZmZsaW5lQXVkaW9Db250ZXh0XG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkNvbnRleHR9XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGNoYW5uZWxzICBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIHRvIHJlbmRlclxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBkdXJhdGlvbiAgVGhlIGR1cmF0aW9uIHRvIHJlbmRlciBpbiBzYW1wbGVzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBzYW1wbGVSYXRlIHRoZSBzYW1wbGUgcmF0ZSB0byByZW5kZXIgYXRcblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQgPSBmdW5jdGlvbiAoY2hhbm5lbHMsIGR1cmF0aW9uLCBzYW1wbGVSYXRlKSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9mZmxpbmUgY29udGV4dFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtPZmZsaW5lQXVkaW9Db250ZXh0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdmFyIG9mZmxpbmVDb250ZXh0ID0gbmV3IE9mZmxpbmVBdWRpb0NvbnRleHQoY2hhbm5lbHMsIGR1cmF0aW9uICogc2FtcGxlUmF0ZSwgc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgLy93cmFwIHRoZSBtZXRob2RzL21lbWJlcnNcblx0ICAgICAgICBUb25lLkNvbnRleHQuY2FsbCh0aGlzLCB7XG5cdCAgICAgICAgICAgICdjb250ZXh0Jzogb2ZmbGluZUNvbnRleHQsXG5cdCAgICAgICAgICAgICdjbG9ja1NvdXJjZSc6ICdvZmZsaW5lJyxcblx0ICAgICAgICAgICAgJ2xvb2tBaGVhZCc6IDAsXG5cdCAgICAgICAgICAgICd1cGRhdGVJbnRlcnZhbCc6IDEyOCAvIHNhbXBsZVJhdGVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHByaXZhdGUgcmVmZXJlbmNlIHRvIHRoZSBkdXJhdGlvblxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kdXJhdGlvbiA9IGR1cmF0aW9uO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuIGFydGlmaWNpYWwgY2xvY2sgc291cmNlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gMDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk9mZmxpbmVDb250ZXh0LCBUb25lLkNvbnRleHQpO1xuXHQgICAgLyoqXG5cdFx0ICogIE92ZXJyaWRlIHRoZSBub3cgbWV0aG9kIHRvIHBvaW50IHRvIHRoZSBpbnRlcm5hbCBjbG9jayB0aW1lXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmVDb250ZXh0LnByb3RvdHlwZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRUaW1lO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW5kZXIgdGhlIG91dHB1dCBvZiB0aGUgT2ZmbGluZUNvbnRleHRcblx0XHQgKiAgQHJldHVybiAge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmVDb250ZXh0LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgd2hpbGUgKHRoaXMuX2R1cmF0aW9uIC0gdGhpcy5fY3VycmVudFRpbWUgPj0gMCkge1xuXHQgICAgICAgICAgICAvL2ludm9rZSBhbGwgdGhlIGNhbGxiYWNrcyBvbiB0aGF0IHRpbWVcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCd0aWNrJyk7XG5cdCAgICAgICAgICAgIC8vaW5jcmVtZW50IHRoZSBjbG9ja1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJyZW50VGltZSArPSB0aGlzLmJsb2NrVGltZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xvc2UgdGhlIGNvbnRleHRcblx0XHQgKiAgQHJldHVybiAge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmVDb250ZXh0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9jb250ZXh0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT2ZmbGluZUNvbnRleHQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcblx0ICAgICAgICB2YXIgaXNNb2JpbGVTYWZhcmkgPSB1YS5pbmNsdWRlcygnc2FmYXJpJykgJiYgIXVhLmluY2x1ZGVzKCdjaHJvbWUnKSAmJiB1YS5pbmNsdWRlcygnbW9iaWxlJyk7XG5cdCAgICAgICAgaWYgKGlzTW9iaWxlU2FmYXJpKSB7XG5cdCAgICAgICAgICAgIC8vbW9iaWxlIHNhZmFyaSBoYXMgYSBiaXphcnJlIGJ1ZyB3aXRoIHRoZSBvZmZsaW5lIGNvbnRleHRcblx0ICAgICAgICAgICAgLy93aGVuIGEgQnVmZmVyU291cmNlTm9kZSBpcyBzdGFydGVkLCBpdCBzdGFydHMgdGhlIG9mZmxpbmUgY29udGV4dFxuXHQgICAgICAgICAgICAvL1xuXHQgICAgICAgICAgICAvL2RlZmVycmluZyBhbGwgQnVmZmVyU291cmNlIHN0YXJ0cyB0aWxsIHRoZSBsYXN0IHBvc3NpYmxlIG1vbWVudFxuXHQgICAgICAgICAgICAvL3JlZHVjZXMgdGhlIGxpa2VsaWhvb2Qgb2YgdGhpcyBoYXBwZW5pbmdcblx0ICAgICAgICAgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlQnVmZmVyU291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlclNvdXJjZSA9IHRoaXMuX2NvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgX25hdGl2ZV9zdGFydCA9IGJ1ZmZlclNvdXJjZS5zdGFydDtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlclNvdXJjZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgX25hdGl2ZV9zdGFydC5jYWxsKGJ1ZmZlclNvdXJjZSwgdGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAwKTtcblx0ICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJTb3VyY2U7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSB0aGluIHdyYXBwZXIgYXJvdW5kIHRoZSBOYXRpdmUgV2ViIEF1ZGlvIEdhaW5Ob2RlLlxuXHRcdCAqICAgICAgICAgVGhlIEdhaW5Ob2RlIGlzIGEgYmFzaWMgYnVpbGRpbmcgYmxvY2sgb2YgdGhlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgQVBJIGFuZCBpcyB1c2VmdWwgZm9yIHJvdXRpbmcgYXVkaW8gYW5kIGFkanVzdGluZyBnYWlucy5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSAge051bWJlcj19ICBnYWluICBUaGUgaW5pdGlhbCBnYWluIG9mIHRoZSBHYWluTm9kZVxuXHRcdCAqICBAcGFyYW0ge1RvbmUuVHlwZT19IHVuaXRzIFRoZSB1bml0cyBvZiB0aGUgZ2FpbiBwYXJhbWV0ZXIuXG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICd1bml0cydcblx0ICAgICAgICBdLCBUb25lLkdhaW4pO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIEdhaW5Ob2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5fZ2Fpbk5vZGUgPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIHBhcmFtZXRlciBvZiB0aGUgZ2FpbiBub2RlLlxuXHRcdFx0ICogIEB0eXBlIHtHYWlufVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fZ2Fpbk5vZGUuZ2Fpbixcblx0ICAgICAgICAgICAgJ3VuaXRzJzogb3B0aW9ucy51bml0cyxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5nYWluLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IG9wdGlvbnMuY29udmVydFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdnYWluJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HYWluLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuR2Fpbi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZ2Fpbic6IDEsXG5cdCAgICAgICAgJ2NvbnZlcnQnOiB0cnVlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5HYWlufSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZ2FpbicpO1xuXHQgICAgICAgIHRoaXMuZ2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5nYWluID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HYWluO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQgJiYgIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlQ29uc3RhbnRTb3VyY2UpIHtcblx0ICAgICAgICB2YXIgQ29uc3RhbnRTb3VyY2VOb2RlID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDEsIDEyOCwgY29udGV4dC5zYW1wbGVSYXRlKTtcblx0ICAgICAgICAgICAgdmFyIGFyciA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGFycltpXSA9IDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmNoYW5uZWxDb3VudCA9IDE7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmJ1ZmZlciA9IGJ1ZmZlcjtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmxvb3AgPSB0cnVlO1xuXHQgICAgICAgICAgICB2YXIgZ2Fpbk5vZGUgPSB0aGlzLl9vdXRwdXQgPSBjb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICAgICAgdGhpcy5vZmZzZXQgPSBnYWluTm9kZS5nYWluO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuY29ubmVjdChnYWluTm9kZSk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgICAgIENvbnN0YW50U291cmNlTm9kZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5zdG9wKHRpbWUpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgICAgIENvbnN0YW50U291cmNlTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0LmNvbm5lY3QuYXBwbHkodGhpcy5fb3V0cHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgICAgIENvbnN0YW50U291cmNlTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0LmRpc2Nvbm5lY3QuYXBwbHkodGhpcy5fb3V0cHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlQ29uc3RhbnRTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnRTb3VyY2VOb2RlKHRoaXMpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVDb25zdGFudFNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudFNvdXJjZU5vZGUodGhpcyk7XG5cdCAgICAgICAgfTtcblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIHNpZ25hbCBpcyBhbiBhdWRpby1yYXRlIHZhbHVlLiBUb25lLlNpZ25hbCBpcyBhIGNvcmUgY29tcG9uZW50IG9mIHRoZSBsaWJyYXJ5LlxuXHRcdCAqICAgICAgICAgIFVubGlrZSBhIG51bWJlciwgU2lnbmFscyBjYW4gYmUgc2NoZWR1bGVkIHdpdGggc2FtcGxlLWxldmVsIGFjY3VyYWN5LiBUb25lLlNpZ25hbFxuXHRcdCAqICAgICAgICAgIGhhcyBhbGwgb2YgdGhlIG1ldGhvZHMgYXZhaWxhYmxlIHRvIG5hdGl2ZSBXZWIgQXVkaW9cblx0XHQgKiAgICAgICAgICBbQXVkaW9QYXJhbV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtYXVkaW9wYXJhbS1pbnRlcmZhY2UpXG5cdFx0ICogICAgICAgICAgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGNvbnZlbmllbmNlcy4gUmVhZCBtb3JlIGFib3V0IHdvcmtpbmcgd2l0aCBzaWduYWxzXG5cdFx0ICogICAgICAgICAgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9Ub25lanMvVG9uZS5qcy93aWtpL1NpZ25hbHMpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5QYXJhbX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8QXVkaW9QYXJhbX0gW3ZhbHVlXSBJbml0aWFsIHZhbHVlIG9mIHRoZSBzaWduYWwuIElmIGFuIEF1ZGlvUGFyYW1cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBwYXNzZWQgaW4sIHRoYXQgcGFyYW1ldGVyIHdpbGwgYmUgd3JhcHBlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBjb250cm9sbGVkIGJ5IHRoZSBTaWduYWwuXG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfSBbdW5pdHM9TnVtYmVyXSB1bml0IFRoZSB1bml0cyB0aGUgc2lnbmFsIGlzIGluLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMTApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndmFsdWUnLFxuXHQgICAgICAgICAgICAndW5pdHMnXG5cdCAgICAgICAgXSwgVG9uZS5TaWduYWwpO1xuXHQgICAgICAgIFRvbmUuUGFyYW0uY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCogV2hlbiBhIHNpZ25hbCBpcyBjb25uZWN0ZWQgdG8gYW5vdGhlciBzaWduYWwgb3IgYXVkaW8gcGFyYW0sXG5cdFx0XHQqIHRoaXMgc2lnbmFsIGJlY29tZXMgYSBwcm94eSBmb3IgaXRcblx0XHRcdCogQHR5cGUge0FycmF5fVxuXHRcdFx0KiBAcHJpdmF0ZVxuXHRcdFx0Ki9cblx0ICAgICAgICB0aGlzLl9wcm94aWVzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQqIEluZGljYXRlcyBpZiB0aGUgY29uc3RhbnQgc291cmNlIHdhcyBzdGFydGVkIG9yIG5vdFxuXHRcdFx0KiBAcHJpdmF0ZVxuXHRcdFx0KiBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGNvbnN0YW50IHNvdXJjZSBub2RlIHdoaWNoIGdlbmVyYXRlcyB0aGUgc2lnbmFsXG5cdFx0XHQgKiBAdHlwZSB7Q29uc3RhbnRTb3VyY2VOb2RlfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNvbnN0YW50U291cmNlKCk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLl9jb25zdGFudFNvdXJjZS5vZmZzZXQ7XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbm9kZSB3aGVyZSB0aGUgY29uc3RhbnQgc2lnbmFsIHZhbHVlIGlzIHNjYWxlZC5cblx0XHRcdCAqIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IHRoaXMuX2NvbnN0YW50U291cmNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG5vZGUgd2hlcmUgdGhlIHZhbHVlIGlzIHNldC5cblx0XHRcdCAqIEB0eXBlIHtUb25lLlBhcmFtfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLl9wYXJhbSA9IHRoaXMub3V0cHV0Lm9mZnNldDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNpZ25hbCwgVG9uZS5QYXJhbSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZhbHVlJzogMCxcblx0ICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVmYXVsdCxcblx0ICAgICAgICAnY29udmVydCc6IHRydWVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgV2hlbiBzaWduYWxzIGNvbm5lY3QgdG8gb3RoZXIgc2lnbmFscyBvciBBdWRpb1BhcmFtcyxcblx0XHQgKiAgdGhleSB0YWtlIG92ZXIgdGhlIG91dHB1dCB2YWx1ZSBvZiB0aGF0IHNpZ25hbCBvciBBdWRpb1BhcmFtLlxuXHRcdCAqICBGb3IgYWxsIG90aGVyIG5vZGVzLCB0aGUgYmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgYSBkZWZhdWx0IDxjb2RlPmNvbm5lY3Q8L2NvZGU+LlxuXHRcdCAqXG5cdFx0ICogIEBvdmVycmlkZVxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvUGFyYW18QXVkaW9Ob2RlfFRvbmUuU2lnbmFsfFRvbmV9IG5vZGVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW1iZXI9MF0gVGhlIG91dHB1dCBudW1iZXIgdG8gY29ubmVjdCBmcm9tLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2lucHV0TnVtYmVyPTBdIFRoZSBpbnB1dCBudW1iZXIgdG8gY29ubmVjdCB0by5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsfSB0aGlzXG5cdFx0ICogIEBtZXRob2Rcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAvL3RoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHdoZXJlIHRoaXMgbm9kZSB3aWxsIGZvcndhcmQgYXV0b21hdGlvbnNcblx0ICAgICAgICAvL3RvIGNvbm5lY3RlZCBub2RlcyB3aXRob3V0IGFueSBzaWduYWwgaWYgcG9zc2libGUuXG5cdCAgICAgICAgaWYgKHRoaXMuX2lzUGFyYW0obm9kZSkgJiYgIXRoaXMuX3NvdXJjZVN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcHJveGllcy5wdXNoKG5vZGUpO1xuXHQgICAgICAgICAgICBub2RlLm92ZXJyaWRkZW4gPSB0cnVlO1xuXHQgICAgICAgICAgICB0aGlzLl9hcHBseUF1dG9tYXRpb25zKG5vZGUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZVN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2Uuc3RhcnQoMCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGFrZXMgYSBub2RlIGFzIGFuIGFyZ3VtZW50IGFuZCByZXR1cm5zIGlmIGl0IGlzIGEgUGFyYW0gb3IgQXVkaW9QYXJhbVxuXHRcdCAqIEBwYXJhbSAgeyp9IG5vZGUgVGhlIG5vZGUgdG8gdGVzdFxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5faXNQYXJhbSA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuUGFyYW0gJiYgVG9uZS5QYXJhbSA9PT0gbm9kZS5jb25zdHJ1Y3RvciB8fCBub2RlIGluc3RhbmNlb2YgQXVkaW9QYXJhbTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBEaXNjYXJkIHRoZSBvcHRpbWl6YXRpb24gYW5kIGNvbm5lY3QgYWxsIG9mIHRoZSBwcm94aWVzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5fY29ubmVjdFByb3hpZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VTdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZS5zdGFydCgwKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fcHJveGllcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm94eSkge1xuXHQgICAgICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QuY2FsbCh0aGlzLCBwcm94eSk7XG5cdCAgICAgICAgICAgIGlmIChwcm94eS5fcHJveGllcykge1xuXHQgICAgICAgICAgICAgICAgcHJveHkuX2Nvbm5lY3RQcm94aWVzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZWQgd2hlbiBhIG5vZGUgaXMgY29ubmVjdGVkIHRvIHRoaXNcblx0XHQgKiBAcGFyYW0gIHtBdWRpb05vZGV9IGZyb21cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLl9vbkNvbm5lY3QgPSBmdW5jdGlvbiAoZnJvbSkge1xuXHQgICAgICAgIGlmICghdGhpcy5faXNQYXJhbShmcm9tKSkge1xuXHQgICAgICAgICAgICAvL2Nvbm5lY3QgYWxsIHRoZSBwcm94aWVzXG5cdCAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RQcm94aWVzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEFwcGx5IGFsbCB0aGUgY3VycmVudCBhdXRvbWF0aW9ucyB0byB0aGUgZ2l2ZW4gcGFyYW1ldGVyXG5cdFx0ICogQHBhcmFtICB7QXVkaW9QYXJhbX0gcGFyYW1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLl9hcHBseUF1dG9tYXRpb25zID0gZnVuY3Rpb24gKHBhcmFtKSB7XG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMuY29udGV4dC5jdXJyZW50VGltZTtcblx0ICAgICAgICBwYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMobm93KTtcblx0ICAgICAgICB2YXIgY3VycmVudFZhbCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUobm93KTtcblx0ICAgICAgICBwYXJhbS5zZXRWYWx1ZUF0VGltZShjdXJyZW50VmFsLCBub3cpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5mb3JFYWNoRnJvbShub3csIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBwYXJhbVtldmVudC50eXBlXShldmVudC52YWx1ZSwgZXZlbnQudGltZSwgZXZlbnQuY29uc3RhbnQpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIERpc2Nvbm5lY3QgZnJvbSB0aGUgZ2l2ZW4gbm9kZSBvciBhbGwgbm9kZXMgaWYgbm8gcGFyYW0gaXMgZ2l2ZW4uXG5cdFx0ICogQHBhcmFtICB7QXVkaW9Ob2RlfEF1ZGlvUGFyYW19IG5vZGVcblx0XHQgKiBAcmV0dXJuIHtUb25lLlNpZ25hbH0gICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Byb3hpZXMuaW5jbHVkZXMobm9kZSkpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fcHJveGllcy5pbmRleE9mKG5vZGUpO1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgfSBlbHNlIGlmICghbm9kZSkge1xuXHQgICAgICAgICAgICAvL25vIGFyZ3VtZW50LCBkaXNjb25uZWN0IGV2ZXJ5dGhpbmdcblx0ICAgICAgICAgICAgdGhpcy5fcHJveGllcyA9IFtdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNjb25uZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSBjdXJyZW50IHNpZ25hbCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lIFdoZW4gdG8gZ2V0IHRoZSBzaWduYWwgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtOdW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9wYXJhbS5nZXRWYWx1ZUF0VGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW0uZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuUGFyYW0ucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lLmNhbGwodGhpcywgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8vd3JhcCBhbGwgb2YgdGhlIGF1dG9tYXRpb24gbWV0aG9kc1xuXHQgICAgW1xuXHQgICAgICAgICdzZXRWYWx1ZUF0VGltZScsXG5cdCAgICAgICAgJ2xpbmVhclJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICAnZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZScsXG5cdCAgICAgICAgJ3NldFRhcmdldEF0VGltZSdcblx0ICAgIF0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG5cdCAgICAgICAgdmFyIHByZXZpb3VzTWV0aG9kID0gVG9uZS5TaWduYWwucHJvdG90eXBlW21ldGhvZF07XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXHQgICAgICAgICAgICBwcmV2aW91c01ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICBhcmdzWzBdID0gdGhpcy5fZnJvbVVuaXRzKGFyZ3NbMF0pO1xuXHQgICAgICAgICAgICBhcmdzWzFdID0gdGhpcy50b1NlY29uZHMoYXJnc1sxXSk7XG5cdCAgICAgICAgICAgIC8vYXBwbHkgaXQgdG8gdGhlIHByb3hpZXNcblx0ICAgICAgICAgICAgdGhpcy5fcHJveGllcy5mb3JFYWNoKGZ1bmN0aW9uIChzaWduYWwpIHtcblx0ICAgICAgICAgICAgICAgIHNpZ25hbFttZXRob2RdLmFwcGx5KHNpZ25hbCwgYXJncyk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH07XG5cdCAgICB9KTtcblx0ICAgIFtcblx0ICAgICAgICAnY2FuY2VsU2NoZWR1bGVkVmFsdWVzJyxcblx0ICAgICAgICAnY2FuY2VsQW5kSG9sZEF0VGltZSdcblx0ICAgIF0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG5cdCAgICAgICAgdmFyIHByZXZpb3VzTWV0aG9kID0gVG9uZS5TaWduYWwucHJvdG90eXBlW21ldGhvZF07XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXHQgICAgICAgICAgICBwcmV2aW91c01ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICBhcmdzWzBdID0gdGhpcy50b1NlY29uZHMoYXJnc1swXSk7XG5cdCAgICAgICAgICAgIC8vYXBwbHkgaXQgdG8gdGhlIHByb3hpZXNcblx0ICAgICAgICAgICAgdGhpcy5fcHJveGllcy5mb3JFYWNoKGZ1bmN0aW9uIChzaWduYWwpIHtcblx0ICAgICAgICAgICAgICAgIHNpZ25hbFttZXRob2RdLmFwcGx5KHNpZ25hbCwgYXJncyk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH07XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNwb3NlIGFuZCBkaXNjb25uZWN0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcHJveGllcyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2lnbmFsO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgUG93IGFwcGxpZXMgYW4gZXhwb25lbnQgdG8gdGhlIGluY29taW5nIHNpZ25hbC4gVGhlIGluY29taW5nIHNpZ25hbFxuXHRcdCAqICAgICAgICAgbXVzdCBiZSBBdWRpb1JhbmdlLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfSBleHAgVGhlIGV4cG9uZW50IHRvIGFwcGx5IHRvIHRoZSBpbmNvbWluZyBzaWduYWwsIG11c3QgYmUgYXQgbGVhc3QgMi4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBvdyA9IG5ldyBUb25lLlBvdygyKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDAuNSkuY29ubmVjdChwb3cpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIHBvdyBpcyAwLjI1LiBcblx0XHQgKi9cblx0ICAgIFRvbmUuUG93ID0gZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIGV4cG9uZW50XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V4cCA9IFRvbmUuZGVmYXVsdEFyZyhleHAsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwU2NhbGVyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcih0aGlzLl9leHBGdW5jKHRoaXMuX2V4cCksIDgxOTIpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUG93LCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHZhbHVlIG9mIHRoZSBleHBvbmVudC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Qb3cjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUG93LnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cCA9IGV4cDtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwU2NhbGVyLnNldE1hcCh0aGlzLl9leHBGdW5jKHRoaXMuX2V4cCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBmdW5jdGlvbiB3aGljaCBtYXBzIHRoZSB3YXZlc2hhcGVyXG5cdFx0ICogIEBwYXJhbSAgIHtudW1iZXJ9IGV4cFxuXHRcdCAqICBAcmV0dXJuIHtmdW5jdGlvbn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUG93LnByb3RvdHlwZS5fZXhwRnVuYyA9IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gTWF0aC5wb3coTWF0aC5hYnModmFsKSwgZXhwKTtcblx0ICAgICAgICB9O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG93fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBvdy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9leHBTY2FsZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2V4cFNjYWxlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUG93O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRW52ZWxvcGUgaXMgYW4gW0FEU1JdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5bnRoZXNpemVyI0FEU1JfZW52ZWxvcGUpXG5cdFx0ICogICAgICAgICAgZW52ZWxvcGUgZ2VuZXJhdG9yLiBUb25lLkVudmVsb3BlIG91dHB1dHMgYSBzaWduYWwgd2hpY2hcblx0XHQgKiAgICAgICAgICBjYW4gYmUgY29ubmVjdGVkIHRvIGFuIEF1ZGlvUGFyYW0gb3IgVG9uZS5TaWduYWwuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL2UvZWEvQURTUl9wYXJhbWV0ZXIuc3ZnXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbYXR0YWNrXSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZSB0byBnbyBmcm9tXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgMCB0byBpdCdzIG1heGltdW0gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2RlY2F5XVx0VGhlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIHRoZSBhdHRhY2sgdGhhdCBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIFx0dG8gZmFsbCB0byB0aGUgc3VzdGFpbiB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3N1c3RhaW5dXHRUaGUgcGVyY2VudCBvZiB0aGUgbWF4aW11bSB2YWx1ZSB0aGF0IHRoZSBlbnZlbG9wZSByZXN0cyBhdCB1bnRpbFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHRoZSByZWxlYXNlIGlzIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbcmVsZWFzZV1cdFRoZSBhbW91bnQgb2YgdGltZSBhZnRlciB0aGUgcmVsZWFzZSBpcyB0cmlnZ2VyZWQgaXQgdGFrZXMgdG8gcmVhY2ggMC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2FuIGFtcGxpdHVkZSBlbnZlbG9wZVxuXHRcdCAqIHZhciBnYWluTm9kZSA9IFRvbmUuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdFx0ICogdmFyIGVudiA9IG5ldyBUb25lLkVudmVsb3BlKHtcblx0XHQgKiBcdFwiYXR0YWNrXCIgOiAwLjEsXG5cdFx0ICogXHRcImRlY2F5XCIgOiAwLjIsXG5cdFx0ICogXHRcInN1c3RhaW5cIiA6IDEsXG5cdFx0ICogXHRcInJlbGVhc2VcIiA6IDAuOCxcblx0XHQgKiB9KTtcblx0XHQgKiBlbnYuY29ubmVjdChnYWluTm9kZS5nYWluKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9nZXQgYWxsIG9mIHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdkZWNheScsXG5cdCAgICAgICAgICAgICdzdXN0YWluJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVuIHRyaWdnZXJBdHRhY2sgaXMgY2FsbGVkLCB0aGUgYXR0YWNrIHRpbWUgaXMgdGhlIGFtb3VudCBvZlxuXHRcdFx0ICogIHRpbWUgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZSB0byByZWFjaCBpdCdzIG1heGltdW0gdmFsdWUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG9wdGlvbnMuYXR0YWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFmdGVyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGUsIHRoZSB2YWx1ZSB3aWxsIGZhbGxcblx0XHRcdCAqICBvdmVyIHRoZSBkdXJhdGlvbiBvZiB0aGUgZGVjYXkgdGltZSB0byBpdCdzIHN1c3RhaW4gdmFsdWUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlY2F5ID0gb3B0aW9ucy5kZWNheTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFx0VGhlIHN1c3RhaW4gdmFsdWUgaXMgdGhlIHZhbHVlXG5cdFx0XHQgKiBcdHdoaWNoIHRoZSBlbnZlbG9wZSByZXN0cyBhdCBhZnRlciB0cmlnZ2VyQXR0YWNrIGlzXG5cdFx0XHQgKiBcdGNhbGxlZCwgYnV0IGJlZm9yZSB0cmlnZ2VyUmVsZWFzZSBpcyBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc3VzdGFpbiA9IG9wdGlvbnMuc3VzdGFpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBZnRlciB0cmlnZ2VyUmVsZWFzZSBpcyBjYWxsZWQsIHRoZSBlbnZlbG9wZSdzXG5cdFx0XHQgKiAgdmFsdWUgd2lsbCBmYWxsIHRvIGl0J3MgbWltaW51bSB2YWx1ZSBvdmVyIHRoZVxuXHRcdFx0ICogIGR1cmF0aW9uIG9mIHRoZSByZWxlYXNlIHRpbWUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJlbGVhc2UgPSBvcHRpb25zLnJlbGVhc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5leHQgdGltZSB0aGUgZW52ZWxvcGUgaXMgYXQgc3RhbmRieVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gJ2xpbmVhcic7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5leHQgdGltZSB0aGUgZW52ZWxvcGUgaXMgYXQgc3RhbmRieVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9ICdleHBvbmVudGlhbCc7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2lnID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TaWduYWwoMCk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGF0dGFja0N1cnZlIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuYXR0YWNrQ3VydmUgPSBvcHRpb25zLmF0dGFja0N1cnZlO1xuXHQgICAgICAgIHRoaXMucmVsZWFzZUN1cnZlID0gb3B0aW9ucy5yZWxlYXNlQ3VydmU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FbnZlbG9wZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgJ2RlY2F5JzogMC4xLFxuXHQgICAgICAgICdzdXN0YWluJzogMC41LFxuXHQgICAgICAgICdyZWxlYXNlJzogMSxcblx0ICAgICAgICAnYXR0YWNrQ3VydmUnOiAnbGluZWFyJyxcblx0ICAgICAgICAncmVsZWFzZUN1cnZlJzogJ2V4cG9uZW50aWFsJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlYWQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGVudmVsb3BlLiBVc2VmdWwgZm9yXG5cdFx0ICogc3luY3Jvbml6aW5nIHZpc3VhbCBvdXRwdXQgdG8gdGhlIGVudmVsb3BlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkVudmVsb3BlLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBzaGFwZSBvZiB0aGUgYXR0YWNrLlxuXHRcdCAqIENhbiBiZSBhbnkgb2YgdGhlc2Ugc3RyaW5nczpcblx0XHQgKiA8dWw+XG5cdFx0ICogICA8bGk+bGluZWFyPC9saT5cblx0XHQgKiAgIDxsaT5leHBvbmVudGlhbDwvbGk+XG5cdFx0ICogICA8bGk+c2luZTwvbGk+XG5cdFx0ICogICA8bGk+Y29zaW5lPC9saT5cblx0XHQgKiAgIDxsaT5ib3VuY2U8L2xpPlxuXHRcdCAqICAgPGxpPnJpcHBsZTwvbGk+XG5cdFx0ICogICA8bGk+c3RlcDwvbGk+XG5cdFx0ICogPC91bD5cblx0XHQgKiBDYW4gYWxzbyBiZSBhbiBhcnJheSB3aGljaCBkZXNjcmliZXMgdGhlIGN1cnZlLiBWYWx1ZXNcblx0XHQgKiBpbiB0aGUgYXJyYXkgYXJlIGV2ZW5seSBzdWJkaXZpZGVkIGFuZCBsaW5lYXJseVxuXHRcdCAqIGludGVycG9sYXRlZCBvdmVyIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXR0YWNrLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd8QXJyYXl9XG5cdFx0ICogQG5hbWUgYXR0YWNrQ3VydmVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIGVudi5hdHRhY2tDdXJ2ZSA9IFwibGluZWFyXCI7XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2NhbiBhbHNvIGJlIGFuIGFycmF5XG5cdFx0ICogZW52LmF0dGFja0N1cnZlID0gWzAsIDAuMiwgMC4zLCAwLjQsIDFdXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUsICdhdHRhY2tDdXJ2ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNTdHJpbmcodGhpcy5fYXR0YWNrQ3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNrQ3VydmU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0FycmF5KHRoaXMuX2F0dGFja0N1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgLy9sb29rIHVwIHRoZSBuYW1lIGluIHRoZSBjdXJ2ZXMgYXJyYXlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHR5cGUgaW4gVG9uZS5FbnZlbG9wZS5UeXBlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuRW52ZWxvcGUuVHlwZVt0eXBlXS5JbiA9PT0gdGhpcy5fYXR0YWNrQ3VydmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgLy9vdGhlcndpc2UganVzdCByZXR1cm4gdGhlIGFycmF5XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNrQ3VydmU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIC8vY2hlY2sgaWYgaXQncyBhIHZhbGlkIHR5cGVcblx0ICAgICAgICAgICAgaWYgKFRvbmUuRW52ZWxvcGUuVHlwZS5oYXNPd25Qcm9wZXJ0eShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjdXJ2ZURlZiA9IFRvbmUuRW52ZWxvcGUuVHlwZVtjdXJ2ZV07XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChjdXJ2ZURlZikpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9IGN1cnZlRGVmLkluO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9IGN1cnZlRGVmO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNBcnJheShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gY3VydmU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuRW52ZWxvcGU6IGludmFsaWQgY3VydmU6ICcgKyBjdXJ2ZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBzaGFwZSBvZiB0aGUgcmVsZWFzZS4gU2VlIHRoZSBhdHRhY2sgY3VydmUgdHlwZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge1N0cmluZ3xBcnJheX1cblx0XHQgKiBAbmFtZSByZWxlYXNlQ3VydmVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIGVudi5yZWxlYXNlQ3VydmUgPSBcImxpbmVhclwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLCAncmVsZWFzZUN1cnZlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc1N0cmluZyh0aGlzLl9yZWxlYXNlQ3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVsZWFzZUN1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNBcnJheSh0aGlzLl9yZWxlYXNlQ3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICAvL2xvb2sgdXAgdGhlIG5hbWUgaW4gdGhlIGN1cnZlcyBhcnJheVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgdHlwZSBpbiBUb25lLkVudmVsb3BlLlR5cGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5FbnZlbG9wZS5UeXBlW3R5cGVdLk91dCA9PT0gdGhpcy5fcmVsZWFzZUN1cnZlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZSBhcnJheVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbGVhc2VDdXJ2ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY3VydmUpIHtcblx0ICAgICAgICAgICAgLy9jaGVjayBpZiBpdCdzIGEgdmFsaWQgdHlwZVxuXHQgICAgICAgICAgICBpZiAoVG9uZS5FbnZlbG9wZS5UeXBlLmhhc093blByb3BlcnR5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGN1cnZlRGVmID0gVG9uZS5FbnZlbG9wZS5UeXBlW2N1cnZlXTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGN1cnZlRGVmKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IGN1cnZlRGVmLk91dDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gY3VydmVEZWY7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0FycmF5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gY3VydmU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuRW52ZWxvcGU6IGludmFsaWQgY3VydmU6ICcgKyBjdXJ2ZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2svZGVjYXkgcG9ydGlvbiBvZiB0aGUgQURTUiBlbnZlbG9wZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBhdHRhY2sgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IG9mIHRoZSBlbnZlbG9wZSBzY2FsZXMgdGhlIHZhbGVzLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBiZXR3ZWVuIDAtMVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICAvL3RyaWdnZXIgdGhlIGF0dGFjayAwLjUgc2Vjb25kcyBmcm9tIG5vdyB3aXRoIGEgdmVsb2NpdHkgb2YgMC4yXG5cdFx0ICogIGVudi50cmlnZ2VyQXR0YWNrKFwiKzAuNVwiLCAwLjIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgb3JpZ2luYWxBdHRhY2sgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLmF0dGFjayk7XG5cdCAgICAgICAgdmFyIGF0dGFjayA9IG9yaWdpbmFsQXR0YWNrO1xuXHQgICAgICAgIHZhciBkZWNheSA9IHRoaXMudG9TZWNvbmRzKHRoaXMuZGVjYXkpO1xuXHQgICAgICAgIHZlbG9jaXR5ID0gVG9uZS5kZWZhdWx0QXJnKHZlbG9jaXR5LCAxKTtcblx0ICAgICAgICAvL2NoZWNrIGlmIGl0J3Mgbm90IGEgY29tcGxldGUgYXR0YWNrXG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA+IDApIHtcblx0ICAgICAgICAgICAgLy9zdWJ0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBmcm9tIHRoZSBhdHRhY2sgdGltZVxuXHQgICAgICAgICAgICB2YXIgYXR0YWNrUmF0ZSA9IDEgLyBhdHRhY2s7XG5cdCAgICAgICAgICAgIHZhciByZW1haW5pbmdEaXN0YW5jZSA9IDEgLSBjdXJyZW50VmFsdWU7XG5cdCAgICAgICAgICAgIC8vdGhlIGF0dGFjayBpcyBub3cgdGhlIHJlbWFpbmluZyB0aW1lXG5cdCAgICAgICAgICAgIGF0dGFjayA9IHJlbWFpbmluZ0Rpc3RhbmNlIC8gYXR0YWNrUmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hdHRhY2tcblx0ICAgICAgICBpZiAodGhpcy5fYXR0YWNrQ3VydmUgPT09ICdsaW5lYXInKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy5saW5lYXJSYW1wVG8odmVsb2NpdHksIGF0dGFjaywgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9hdHRhY2tDdXJ2ZSA9PT0gJ2V4cG9uZW50aWFsJykge1xuXHQgICAgICAgICAgICB0aGlzLl9zaWcudGFyZ2V0UmFtcFRvKHZlbG9jaXR5LCBhdHRhY2ssIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYXR0YWNrID4gMCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zaWcuY2FuY2VsQW5kSG9sZEF0VGltZSh0aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGN1cnZlID0gdGhpcy5fYXR0YWNrQ3VydmU7XG5cdCAgICAgICAgICAgIC8vdGFrZSBvbmx5IGEgcG9ydGlvbiBvZiB0aGUgY3VydmVcblx0ICAgICAgICAgICAgaWYgKGF0dGFjayA8IG9yaWdpbmFsQXR0YWNrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgcGVyY2VudENvbXBsZXRlID0gMSAtIGF0dGFjayAvIG9yaWdpbmFsQXR0YWNrO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNsaWNlSW5kZXggPSBNYXRoLmZsb29yKHBlcmNlbnRDb21wbGV0ZSAqIHRoaXMuX2F0dGFja0N1cnZlLmxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICBjdXJ2ZSA9IHRoaXMuX2F0dGFja0N1cnZlLnNsaWNlKHNsaWNlSW5kZXgpO1xuXHQgICAgICAgICAgICAgICAgLy90aGUgZmlyc3QgaW5kZXggaXMgdGhlIGN1cnJlbnQgdmFsdWVcblx0ICAgICAgICAgICAgICAgIGN1cnZlWzBdID0gY3VycmVudFZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy5zZXRWYWx1ZUN1cnZlQXRUaW1lKGN1cnZlLCB0aW1lLCBhdHRhY2ssIHZlbG9jaXR5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9kZWNheVxuXHQgICAgICAgIGlmIChkZWNheSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zaWcudGFyZ2V0UmFtcFRvKHZlbG9jaXR5ICogdGhpcy5zdXN0YWluLCBkZWNheSwgYXR0YWNrICsgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VycyB0aGUgcmVsZWFzZSBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vdHJpZ2dlciByZWxlYXNlIGltbWVkaWF0ZWx5XG5cdFx0ICogIGVudi50cmlnZ2VyUmVsZWFzZSgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAoY3VycmVudFZhbHVlID4gMCkge1xuXHQgICAgICAgICAgICB2YXIgcmVsZWFzZSA9IHRoaXMudG9TZWNvbmRzKHRoaXMucmVsZWFzZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9yZWxlYXNlQ3VydmUgPT09ICdsaW5lYXInKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaWcubGluZWFyUmFtcFRvKDAsIHJlbGVhc2UsIHRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3JlbGVhc2VDdXJ2ZSA9PT0gJ2V4cG9uZW50aWFsJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2lnLnRhcmdldFJhbXBUbygwLCByZWxlYXNlLCB0aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjdXJ2ZSA9IHRoaXMuX3JlbGVhc2VDdXJ2ZTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnLnNldFZhbHVlQ3VydmVBdFRpbWUoY3VydmUsIHRpbWUsIHJlbGVhc2UsIGN1cnJlbnRWYWx1ZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBUaGlzIHdpbGxcblx0XHQgKiAgcmV0dXJuIHRoZSB1bmNvbnZlcnRlZCAocmF3KSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIFRoZSBzY2hlZHVsZWQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3NpZy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdHJpZ2dlckF0dGFja1JlbGVhc2UgaXMgc2hvcnRoYW5kIGZvciB0cmlnZ2VyQXR0YWNrLCB0aGVuIHdhaXRpbmdcblx0XHQgKiAgc29tZSBkdXJhdGlvbiwgdGhlbiB0cmlnZ2VyUmVsZWFzZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBkdXJhdGlvbiBUaGUgZHVyYXRpb24gb2YgdGhlIHN1c3RhaW4uXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBhdHRhY2sgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIGVudmVsb3BlLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciB0aGUgYXR0YWNrIGFuZCB0aGVuIHRoZSByZWxlYXNlIGFmdGVyIDAuNiBzZWNvbmRzLlxuXHRcdCAqIGVudi50cmlnZ2VyQXR0YWNrUmVsZWFzZSgwLjYpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAoZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSh0aW1lICsgdGhpcy50b1NlY29uZHMoZHVyYXRpb24pKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VscyBhbGwgc2NoZWR1bGVkIGVudmVsb3BlIGNoYW5nZXMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGFmdGVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLl9zaWcuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKGFmdGVyKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQm9ycm93cyB0aGUgY29ubmVjdCBtZXRob2QgZnJvbSBUb25lLlNpZ25hbC5cblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5jb25uZWN0ID0gVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0O1xuXHQgICAgLyoqXG5cdCBcdCAqICBHZW5lcmF0ZSBzb21lIGNvbXBsZXggZW52ZWxvcGUgY3VydmVzLlxuXHQgXHQgKi9cblx0ICAgIChmdW5jdGlvbiBfY3JlYXRlQ3VydmVzKCkge1xuXHQgICAgICAgIHZhciBjdXJ2ZUxlbiA9IDEyODtcblx0ICAgICAgICB2YXIgaSwgaztcblx0ICAgICAgICAvL2Nvc2luZSBjdXJ2ZVxuXHQgICAgICAgIHZhciBjb3NpbmVDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGNvc2luZUN1cnZlW2ldID0gTWF0aC5zaW4oaSAvIChjdXJ2ZUxlbiAtIDEpICogKE1hdGguUEkgLyAyKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vcmlwcGxlIGN1cnZlXG5cdCAgICAgICAgdmFyIHJpcHBsZUN1cnZlID0gW107XG5cdCAgICAgICAgdmFyIHJpcHBsZUN1cnZlRnJlcSA9IDYuNDtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW4gLSAxOyBpKyspIHtcblx0ICAgICAgICAgICAgayA9IGkgLyAoY3VydmVMZW4gLSAxKTtcblx0ICAgICAgICAgICAgdmFyIHNpbmVXYXZlID0gTWF0aC5zaW4oayAqIChNYXRoLlBJICogMikgKiByaXBwbGVDdXJ2ZUZyZXEgLSBNYXRoLlBJIC8gMikgKyAxO1xuXHQgICAgICAgICAgICByaXBwbGVDdXJ2ZVtpXSA9IHNpbmVXYXZlIC8gMTAgKyBrICogMC44Mztcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmlwcGxlQ3VydmVbY3VydmVMZW4gLSAxXSA9IDE7XG5cdCAgICAgICAgLy9zdGFpcnMgY3VydmVcblx0ICAgICAgICB2YXIgc3RhaXJzQ3VydmUgPSBbXTtcblx0ICAgICAgICB2YXIgc3RlcHMgPSA1O1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIHN0YWlyc0N1cnZlW2ldID0gTWF0aC5jZWlsKGkgLyAoY3VydmVMZW4gLSAxKSAqIHN0ZXBzKSAvIHN0ZXBzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2luLW91dCBlYXNpbmcgY3VydmVcblx0ICAgICAgICB2YXIgc2luZUN1cnZlID0gW107XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgayA9IGkgLyAoY3VydmVMZW4gLSAxKTtcblx0ICAgICAgICAgICAgc2luZUN1cnZlW2ldID0gMC41ICogKDEgLSBNYXRoLmNvcyhNYXRoLlBJICogaykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2EgYm91bmNlIGN1cnZlXG5cdCAgICAgICAgdmFyIGJvdW5jZUN1cnZlID0gW107XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgayA9IGkgLyAoY3VydmVMZW4gLSAxKTtcblx0ICAgICAgICAgICAgdmFyIGZyZXEgPSBNYXRoLnBvdyhrLCAzKSAqIDQgKyAwLjI7XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSBNYXRoLmNvcyhmcmVxICogTWF0aC5QSSAqIDIgKiBrKTtcblx0ICAgICAgICAgICAgYm91bmNlQ3VydmVbaV0gPSBNYXRoLmFicyh2YWwgKiAoMSAtIGspKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSW52ZXJ0IGEgdmFsdWUgY3VydmUgdG8gbWFrZSBpdCB3b3JrIGZvciB0aGUgcmVsZWFzZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICBmdW5jdGlvbiBpbnZlcnRDdXJ2ZShjdXJ2ZSkge1xuXHQgICAgICAgICAgICB2YXIgb3V0ID0gbmV3IEFycmF5KGN1cnZlLmxlbmd0aCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY3VydmUubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgIG91dFtqXSA9IDEgLSBjdXJ2ZVtqXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gb3V0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICByZXZlcnNlIHRoZSBjdXJ2ZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICBmdW5jdGlvbiByZXZlcnNlQ3VydmUoY3VydmUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGN1cnZlLnNsaWNlKDApLnJldmVyc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgYXR0YWNrIGFuZCByZWxlYXNlIGN1cnZlIGFycmF5c1xuXHRcdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICBUb25lLkVudmVsb3BlLlR5cGUgPSB7XG5cdCAgICAgICAgICAgICdsaW5lYXInOiAnbGluZWFyJyxcblx0ICAgICAgICAgICAgJ2V4cG9uZW50aWFsJzogJ2V4cG9uZW50aWFsJyxcblx0ICAgICAgICAgICAgJ2JvdW5jZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBpbnZlcnRDdXJ2ZShib3VuY2VDdXJ2ZSksXG5cdCAgICAgICAgICAgICAgICBPdXQ6IGJvdW5jZUN1cnZlXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdjb3NpbmUnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogY29zaW5lQ3VydmUsXG5cdCAgICAgICAgICAgICAgICBPdXQ6IHJldmVyc2VDdXJ2ZShjb3NpbmVDdXJ2ZSlcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ3N0ZXAnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogc3RhaXJzQ3VydmUsXG5cdCAgICAgICAgICAgICAgICBPdXQ6IGludmVydEN1cnZlKHN0YWlyc0N1cnZlKVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAncmlwcGxlJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IHJpcHBsZUN1cnZlLFxuXHQgICAgICAgICAgICAgICAgT3V0OiBpbnZlcnRDdXJ2ZShyaXBwbGVDdXJ2ZSlcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ3NpbmUnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogc2luZUN1cnZlLFxuXHQgICAgICAgICAgICAgICAgT3V0OiBpbnZlcnRDdXJ2ZShzaW5lQ3VydmUpXG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9O1xuXHQgICAgfSgpKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEaXNjb25uZWN0IGFuZCBkaXNwb3NlLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NpZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2lnID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FbnZlbG9wZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkFtcGxpdHVkZUVudmVsb3BlIGlzIGEgVG9uZS5FbnZlbG9wZSBjb25uZWN0ZWQgdG8gYSBnYWluIG5vZGUuXG5cdFx0ICogICAgICAgICAgVW5saWtlIFRvbmUuRW52ZWxvcGUsIHdoaWNoIG91dHB1dHMgdGhlIGVudmVsb3BlJ3MgdmFsdWUsIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgYWNjZXB0c1xuXHRcdCAqICAgICAgICAgIGFuIGF1ZGlvIHNpZ25hbCBhcyB0aGUgaW5wdXQgYW5kIHdpbGwgYXBwbHkgdGhlIGVudmVsb3BlIHRvIHRoZSBhbXBsaXR1ZGVcblx0XHQgKiAgICAgICAgICBvZiB0aGUgc2lnbmFsLiBSZWFkIG1vcmUgYWJvdXQgQURTUiBFbnZlbG9wZXMgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3ludGhlc2l6ZXIjQURTUl9lbnZlbG9wZSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVudmVsb3BlfVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbYXR0YWNrXSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZSB0byBnbyBmcm9tXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB0byBpdCdzIG1heGltdW0gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2RlY2F5XVx0VGhlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIHRoZSBhdHRhY2sgdGhhdCBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIFx0dG8gZmFsbCB0byB0aGUgc3VzdGFpbiB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3N1c3RhaW5dXHRUaGUgcGVyY2VudCBvZiB0aGUgbWF4aW11bSB2YWx1ZSB0aGF0IHRoZSBlbnZlbG9wZSByZXN0cyBhdCB1bnRpbFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdHRoZSByZWxlYXNlIGlzIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbcmVsZWFzZV1cdFRoZSBhbW91bnQgb2YgdGltZSBhZnRlciB0aGUgcmVsZWFzZSBpcyB0cmlnZ2VyZWQgaXQgdGFrZXMgdG8gcmVhY2ggMC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgYW1wRW52ID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUoe1xuXHRcdCAqIFx0XCJhdHRhY2tcIjogMC4xLFxuXHRcdCAqIFx0XCJkZWNheVwiOiAwLjIsXG5cdFx0ICogXHRcInN1c3RhaW5cIjogMS4wLFxuXHRcdCAqIFx0XCJyZWxlYXNlXCI6IDAuOFxuXHRcdCAqIH0pLnRvTWFzdGVyKCk7XG5cdFx0ICogLy9jcmVhdGUgYW4gb3NjaWxsYXRvciBhbmQgY29ubmVjdCBpdFxuXHRcdCAqIHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkuY29ubmVjdChhbXBFbnYpLnN0YXJ0KCk7XG5cdFx0ICogLy90cmlnZ2VyIHRoZSBlbnZlbG9wZXMgYXR0YWNrIGFuZCByZWxlYXNlIFwiOHRcIiBhcGFydFxuXHRcdCAqIGFtcEVudi50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIjh0XCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVudmVsb3BlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGlucHV0IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICB0aGlzLl9zaWcuY29ubmVjdCh0aGlzLm91dHB1dC5nYWluKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFtcGxpdHVkZUVudmVsb3BlLCBUb25lLkVudmVsb3BlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFtcGxpdHVkZUVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQW5hbHlzZXJOb2RlLmdldEZsb2F0VGltZURvbWFpbkRhdGEgcG9seWZpbGxcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghQW5hbHlzZXJOb2RlLnByb3RvdHlwZS5nZXRGbG9hdFRpbWVEb21haW5EYXRhKSB7XG5cdCAgICAgICAgICAgIC8vcmVmZXJlbmNlZCBodHRwczovL2dpdGh1Yi5jb20vbW9oYXlvbmFvL2dldC1mbG9hdC10aW1lLWRvbWFpbi1kYXRhXG5cdCAgICAgICAgICAgIEFuYWx5c2VyTm9kZS5wcm90b3R5cGUuZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSA9IGZ1bmN0aW9uIChhcnJheSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkubGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKHVpbnQ4KTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdWludDgubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBhcnJheVtpXSA9ICh1aW50OFtpXSAtIDEyOCkgLyAxMjg7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgV2ViIEF1ZGlvJ3Ncblx0XHQgKiAgICAgICAgICBbQW5hbHlzZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI2lkbC1kZWYtQW5hbHlzZXJOb2RlKS5cblx0XHQgKiAgICAgICAgICBFeHRyYWN0cyBGRlQgb3IgV2F2ZWZvcm0gZGF0YSBmcm9tIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmc9fSB0eXBlIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgYW5hbHlzaXMsIGVpdGhlciBcImZmdFwiLCBvciBcIndhdmVmb3JtXCIuXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgRkZULiBWYWx1ZSBtdXN0IGJlIGEgcG93ZXIgb2Zcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdzaXplJ1xuXHQgICAgICAgIF0sIFRvbmUuQW5hbHlzZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFuYWx5c2VyIG5vZGUuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7QW5hbHlzZXJOb2RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlQW5hbHlzZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzaXMgdHlwZVxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGJ1ZmZlciB0aGF0IHRoZSBGRlQgZGF0YSBpcyB3cml0dGVuIHRvXG5cdFx0XHQgKiAgQHR5cGUge1R5cGVkQXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgLy9zZXQgdGhlIHZhbHVlcyBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLnNpemUgPSBvcHRpb25zLnNpemU7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQW5hbHlzZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnc2l6ZSc6IDEwMjQsXG5cdCAgICAgICAgJ3R5cGUnOiAnZmZ0Jyxcblx0ICAgICAgICAnc21vb3RoaW5nJzogMC44XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBvc3NpYmxlIHJldHVybiB0eXBlcyBvZiBhbmFseXNlci5nZXRWYWx1ZSgpXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLlR5cGUgPSB7XG5cdCAgICAgICAgV2F2ZWZvcm06ICd3YXZlZm9ybScsXG5cdCAgICAgICAgRkZUOiAnZmZ0J1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSdW4gdGhlIGFuYWx5c2lzIGdpdmVuIHRoZSBjdXJyZW50IHNldHRpbmdzIGFuZCByZXR1cm4gdGhlXG5cdFx0ICogIHJlc3VsdCBhcyBhIFR5cGVkQXJyYXkuXG5cdFx0ICogIEByZXR1cm5zIHtUeXBlZEFycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQW5hbHlzZXIuVHlwZS5GRlQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuZ2V0RmxvYXRGcmVxdWVuY3lEYXRhKHRoaXMuX2J1ZmZlcik7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUb25lLkFuYWx5c2VyLlR5cGUuV2F2ZWZvcm0pIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSh0aGlzLl9idWZmZXIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2l6ZSBvZiBhbmFseXNpcy4gVGhpcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQW5hbHlzZXIjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIHNpemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFuYWx5c2VyLnByb3RvdHlwZSwgJ3NpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5mcmVxdWVuY3lCaW5Db3VudDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuZmZ0U2l6ZSA9IHNpemUgKiAyO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KHNpemUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBhbmFseXNpcyBmdW5jdGlvbiByZXR1cm5lZCBieSBhbmFseXNlci5nZXRWYWx1ZSgpLCBlaXRoZXIgXCJmZnRcIiBvciBcIndhdmVmb3JtXCIuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkFuYWx5c2VyI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BbmFseXNlci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgaWYgKHR5cGUgIT09IFRvbmUuQW5hbHlzZXIuVHlwZS5XYXZlZm9ybSAmJiB0eXBlICE9PSBUb25lLkFuYWx5c2VyLlR5cGUuRkZUKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLkFuYWx5c2VyOiBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICAwIHJlcHJlc2VudHMgbm8gdGltZSBhdmVyYWdpbmcgd2l0aCB0aGUgbGFzdCBhbmFseXNpcyBmcmFtZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQW5hbHlzZXIjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgc21vb3RoaW5nXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BbmFseXNlci5wcm90b3R5cGUsICdzbW9vdGhpbmcnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5zbW9vdGhpbmdUaW1lQ29uc3RhbnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuc21vb3RoaW5nVGltZUNvbnN0YW50ID0gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5BbmFseXNlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQW5hbHlzZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkNvbXByZXNzb3IgaXMgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHRoZSBXZWIgQXVkaW9cblx0XHQgKiAgICAgICAgIFtEeW5hbWljc0NvbXByZXNzb3JOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1keW5hbWljc2NvbXByZXNzb3Jub2RlLWludGVyZmFjZSkuXG5cdFx0ICogICAgICAgICBDb21wcmVzc2lvbiByZWR1Y2VzIHRoZSB2b2x1bWUgb2YgbG91ZCBzb3VuZHMgb3IgYW1wbGlmaWVzIHF1aWV0IHNvdW5kc1xuXHRcdCAqICAgICAgICAgYnkgbmFycm93aW5nIG9yIFwiY29tcHJlc3NpbmdcIiBhbiBhdWRpbyBzaWduYWwncyBkeW5hbWljIHJhbmdlLlxuXHRcdCAqICAgICAgICAgUmVhZCBtb3JlIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0R5bmFtaWNfcmFuZ2VfY29tcHJlc3Npb24pLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN8T2JqZWN0fSBbdGhyZXNob2xkXSBUaGUgdmFsdWUgYWJvdmUgd2hpY2ggdGhlIGNvbXByZXNzaW9uIHN0YXJ0cyB0byBiZSBhcHBsaWVkLlxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfSBbcmF0aW9dIFRoZSBnYWluIHJlZHVjdGlvbiByYXRpby5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgY29tcCA9IG5ldyBUb25lLkNvbXByZXNzb3IoLTMwLCAzKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29tcHJlc3NvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnLFxuXHQgICAgICAgICAgICAncmF0aW8nXG5cdCAgICAgICAgXSwgVG9uZS5Db21wcmVzc29yKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBjb21wcmVzc29yIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7RHluYW1pY3NDb21wcmVzc29yTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3NvciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdGhyZXNob2xkIHZhdWVcblx0XHRcdCAqICBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy50aHJlc2hvbGQgPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2NvbXByZXNzb3IudGhyZXNob2xkLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVjaWJlbHMsXG5cdCAgICAgICAgICAgICdjb252ZXJ0JzogZmFsc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXR0YWNrIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXR0YWNrID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fY29tcHJlc3Nvci5hdHRhY2ssIFRvbmUuVHlwZS5UaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmVsZWFzZSBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJlbGVhc2UgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9jb21wcmVzc29yLnJlbGVhc2UsIFRvbmUuVHlwZS5UaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUga25lZSBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5rbmVlID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9jb21wcmVzc29yLmtuZWUsXG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWNpYmVscyxcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBmYWxzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByYXRpbyB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yYXRpbyA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fY29tcHJlc3Nvci5yYXRpbyxcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBmYWxzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2tuZWUnLFxuXHQgICAgICAgICAgICAncmVsZWFzZScsXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAncmF0aW8nLFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuc2V0KG9wdGlvbnMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ29tcHJlc3NvciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3JhdGlvJzogMTIsXG5cdCAgICAgICAgJ3RocmVzaG9sZCc6IC0yNCxcblx0ICAgICAgICAncmVsZWFzZSc6IDAuMjUsXG5cdCAgICAgICAgJ2F0dGFjayc6IDAuMDAzLFxuXHQgICAgICAgICdrbmVlJzogMzBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ29tcHJlc3Nvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db21wcmVzc29yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAna25lZScsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJyxcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyYXRpbycsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3Nvci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3NvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5hdHRhY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYXR0YWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlbGVhc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy50aHJlc2hvbGQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJhdGlvLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJhdGlvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmtuZWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMua25lZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ29tcHJlc3Nvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEFkZCBhIHNpZ25hbCBhbmQgYSBudW1iZXIgb3IgdHdvIHNpZ25hbHMuIFdoZW4gbm8gdmFsdWUgaXNcblx0XHQgKiAgICAgICAgIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3RvciwgVG9uZS5BZGQgd2lsbCBzdW0gPGNvZGU+aW5wdXRbMF08L2NvZGU+XG5cdFx0ICogICAgICAgICBhbmQgPGNvZGU+aW5wdXRbMV08L2NvZGU+LiBJZiBhIHZhbHVlIGlzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3RvciwgXG5cdFx0ICogICAgICAgICB0aGUgaXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgaW5wdXQuXG5cdFx0ICogIFxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBUb25lLkFkZCB3aWxsIHN1bSB0aGUgZmlyc3Rcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2Vjb25kIGlucHV0cy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgyKTtcblx0XHQgKiB2YXIgYWRkID0gbmV3IFRvbmUuQWRkKDIpO1xuXHRcdCAqIHNpZ25hbC5jb25uZWN0KGFkZCk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGFkZCBlcXVhbHMgNFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaWYgY29uc3RydWN0ZWQgd2l0aCBubyBhcmd1bWVudHNcblx0XHQgKiAvL2l0IHdpbGwgYWRkIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGlucHV0c1xuXHRcdCAqIHZhciBhZGQgPSBuZXcgVG9uZS5BZGQoKTtcblx0XHQgKiB2YXIgc2lnMCA9IG5ldyBUb25lLlNpZ25hbCgzKS5jb25uZWN0KGFkZCwgMCwgMCk7XG5cdFx0ICogdmFyIHNpZzEgPSBuZXcgVG9uZS5TaWduYWwoNCkuY29ubmVjdChhZGQsIDAsIDEpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBhZGQgZXF1YWxzIDcuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5BZGQgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc3VtbWluZyBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdW0gPSB0aGlzLmlucHV0WzBdID0gdGhpcy5pbnB1dFsxXSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuU2lnbmFsKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jb25uZWN0KHRoaXMuX3N1bSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BZGQsIFRvbmUuU2lnbmFsKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQWRkfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFkZC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3N1bS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3VtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BZGQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgTXVsdGlwbHkgdHdvIGluY29taW5nIHNpZ25hbHMuIE9yLCBpZiBhIG51bWJlciBpcyBnaXZlbiBpbiB0aGUgY29uc3RydWN0b3IsXG5cdFx0ICogICAgICAgICAgbXVsdGlwbGllcyB0aGUgaW5jb21pbmcgc2lnbmFsIGJ5IHRoYXQgdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZSBDb25zdGFudCB2YWx1ZSB0byBtdWx0aXBsZS4gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCByZXR1cm4gdGhlIHByb2R1Y3Qgb2YgdGhlIGZpcnN0IGFuZCBzZWNvbmQgaW5wdXRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHRcdCAqIHZhciBzaWdBID0gbmV3IFRvbmUuU2lnbmFsKDMpO1xuXHRcdCAqIHZhciBzaWdCID0gbmV3IFRvbmUuU2lnbmFsKDQpO1xuXHRcdCAqIHNpZ0EuY29ubmVjdChtdWx0LCAwLCAwKTtcblx0XHQgKiBzaWdCLmNvbm5lY3QobXVsdCwgMCwgMSk7XG5cdFx0ICogLy9vdXRwdXQgb2YgbXVsdCBpcyAxMi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KDEwKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDIpLmNvbm5lY3QobXVsdCk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIG11bHQgaXMgMjAuXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpcGx5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGlucHV0IG5vZGUgaXMgdGhlIHNhbWUgYXMgdGhlIG91dHB1dCBub2RlXG5cdFx0XHQgKiAgaXQgaXMgYWxzbyB0aGUgR2Fpbk5vZGUgd2hpY2ggaGFuZGxlcyB0aGUgc2NhbGluZyBvZiBpbmNvbWluZyBzaWduYWxcblx0XHRcdCAqXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0ID0gdGhpcy5pbnB1dFswXSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzY2FsaW5nIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb1BhcmFtfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXRbMV0gPSB0aGlzLm91dHB1dC5nYWluO1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBUb25lLmRlZmF1bHRBcmcodmFsdWUsIDApO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTXVsdGlwbHksIFRvbmUuU2lnbmFsKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NdWx0aXBseX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aXBseS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX211bHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NdWx0aXBseTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE5lZ2F0ZSB0aGUgaW5jb21pbmcgc2lnbmFsLiBpLmUuIGFuIGlucHV0IHNpZ25hbCBvZiAxMCB3aWxsIG91dHB1dCAtMTBcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbmVnID0gbmV3IFRvbmUuTmVnYXRlKCk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgtMikuY29ubmVjdChuZWcpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIG5lZyBpcyBwb3NpdGl2ZSAyLiBcblx0XHQgKi9cblx0ICAgIFRvbmUuTmVnYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIG5lZ2F0aW9uIGlzIGRvbmUgYnkgbXVsdGlwbHlpbmcgYnkgLTFcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NdWx0aXBseSgtMSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5OZWdhdGUsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTmVnYXRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5lZ2F0ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk5lZ2F0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFN1YnRyYWN0IHRoZSBzaWduYWwgY29ubmVjdGVkIHRvIDxjb2RlPmlucHV0WzFdPC9jb2RlPiBmcm9tIHRoZSBzaWduYWwgY29ubmVjdGVkIFxuXHRcdCAqICAgICAgICAgdG8gPGNvZGU+aW5wdXRbMF08L2NvZGU+LiBJZiBhbiBhcmd1bWVudCBpcyBwcm92aWRlZCBpbiB0aGUgY29uc3RydWN0b3IsIHRoZSBcblx0XHQgKiAgICAgICAgIHNpZ25hbHMgPGNvZGU+LnZhbHVlPC9jb2RlPiB3aWxsIGJlIHN1YnRyYWN0ZWQgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWUgVGhlIHZhbHVlIHRvIHN1YnRyYWN0IGZyb20gdGhlIGluY29taW5nIHNpZ25hbC4gSWYgdGhlIHZhbHVlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgaXMgb21pdHRlZCwgaXQgd2lsbCBzdWJ0cmFjdCB0aGUgc2Vjb25kIHNpZ25hbCBmcm9tIHRoZSBmaXJzdC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ViID0gbmV3IFRvbmUuU3VidHJhY3QoMSk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCg0KS5jb25uZWN0KHN1Yik7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIHN1YiBpcyAzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ViID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0XHQgKiB2YXIgc2lnQSA9IG5ldyBUb25lLlNpZ25hbCgxMCk7XG5cdFx0ICogdmFyIHNpZ0IgPSBuZXcgVG9uZS5TaWduYWwoMi41KTtcblx0XHQgKiBzaWdBLmNvbm5lY3Qoc3ViLCAwLCAwKTtcblx0XHQgKiBzaWdCLmNvbm5lY3Qoc3ViLCAwLCAxKTtcblx0XHQgKiAvL291dHB1dCBvZiBzdWIgaXMgNy41XG5cdFx0ICovXG5cdCAgICBUb25lLlN1YnRyYWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHN1bW1pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VtID0gdGhpcy5pbnB1dFswXSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIG5lZ2F0ZSB0aGUgaW5wdXQgb2YgdGhlIHNlY29uZCBpbnB1dCBiZWZvcmUgY29ubmVjdGluZyBpdFxuXHRcdFx0ICogIHRvIHRoZSBzdW1taW5nIG5vZGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTmVnYXRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9uZWcgPSBuZXcgVG9uZS5OZWdhdGUoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgdmFsdWUgaXMgc2V0XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5TaWduYWwodmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNoYWluKHRoaXMuX25lZywgdGhpcy5fc3VtKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN1YnRyYWN0LCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNpZ25hbEJhc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3VidHJhY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9uZWcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX25lZyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3VtLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9zdW0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN1YnRyYWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQ29udmVydCBhbiBpbmNvbWluZyBzaWduYWwgYmV0d2VlbiAwLCAxIHRvIGFuIGVxdWFsIHBvd2VyIGdhaW4gc2NhbGUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGVxUG93R2FpbiA9IG5ldyBUb25lLkVxdWFsUG93ZXJHYWluKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkVxdWFsUG93ZXJHYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2VxUG93ZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKE1hdGguYWJzKHZhbCkgPCAwLjAwMSkge1xuXHQgICAgICAgICAgICAgICAgLy9zaG91bGQgb3V0cHV0IDAgd2hlbiBpbnB1dCBpcyAwXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmVxdWFsUG93ZXJTY2FsZSh2YWwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpLCA0MDk2KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVxdWFsUG93ZXJHYWluLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVxdWFsUG93ZXJHYWlufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVxdWFsUG93ZXJHYWluLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2VxUG93ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2VxUG93ZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVxdWFsUG93ZXJHYWluO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyAgVG9uZS5Dcm9zc2ZhZGUgcHJvdmlkZXMgZXF1YWwgcG93ZXIgZmFkaW5nIGJldHdlZW4gdHdvIGlucHV0cy5cblx0XHQgKiAgICAgICAgIE1vcmUgb24gY3Jvc3NmYWRpbmcgdGVjaG5pcXVlIFtoZXJlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GYWRlXyhhdWRpb19lbmdpbmVlcmluZykjQ3Jvc3NmYWRpbmcpLlxuXHRcdCAqXG5cdFx0ICogQGNvbnN0cnVjdG9yXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtpbml0aWFsRmFkZT0wLjVdXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgY3Jvc3NGYWRlID0gbmV3IFRvbmUuQ3Jvc3NGYWRlKDAuNSk7XG5cdFx0ICogLy9jb25uZWN0IGVmZmVjdCBBIHRvIGNyb3NzZmFkZSBmcm9tXG5cdFx0ICogLy9lZmZlY3Qgb3V0cHV0IDAgdG8gY3Jvc3NmYWRlIGlucHV0IDBcblx0XHQgKiBlZmZlY3RBLmNvbm5lY3QoY3Jvc3NGYWRlLCAwLCAwKTtcblx0XHQgKiAvL2Nvbm5lY3QgZWZmZWN0IEIgdG8gY3Jvc3NmYWRlIGZyb21cblx0XHQgKiAvL2VmZmVjdCBvdXRwdXQgMCB0byBjcm9zc2ZhZGUgaW5wdXQgMVxuXHRcdCAqIGVmZmVjdEIuY29ubmVjdChjcm9zc0ZhZGUsIDAsIDEpO1xuXHRcdCAqIGNyb3NzRmFkZS5mYWRlLnZhbHVlID0gMDtcblx0XHQgKiAvLyBeIG9ubHkgZWZmZWN0QSBpcyBvdXRwdXRcblx0XHQgKiBjcm9zc0ZhZGUuZmFkZS52YWx1ZSA9IDE7XG5cdFx0ICogLy8gXiBvbmx5IGVmZmVjdEIgaXMgb3V0cHV0XG5cdFx0ICogY3Jvc3NGYWRlLmZhZGUudmFsdWUgPSAwLjU7XG5cdFx0ICogLy8gXiB0aGUgdHdvIHNpZ25hbHMgYXJlIG1peGVkIGVxdWFsbHkuXG5cdFx0ICovXG5cdCAgICBUb25lLkNyb3NzRmFkZSA9IGZ1bmN0aW9uIChpbml0aWFsRmFkZSkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFswXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYSA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzFdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5iID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFx0VGhlIG1peCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzLiBBIGZhZGUgdmFsdWUgb2YgMFxuXHRcdFx0ICogXHR3aWxsIG91dHB1dCAxMDAlIDxjb2RlPmlucHV0WzBdPC9jb2RlPiBhbmRcblx0XHRcdCAqIFx0YSB2YWx1ZSBvZiAxIHdpbGwgb3V0cHV0IDEwMCUgPGNvZGU+aW5wdXRbMV08L2NvZGU+LlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGUgPSBuZXcgVG9uZS5TaWduYWwoVG9uZS5kZWZhdWx0QXJnKGluaXRpYWxGYWRlLCAwLjUpLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGVxdWFsIHBvd2VyIGdhaW4gY3Jvc3MgZmFkZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRXF1YWxQb3dlckdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQSA9IG5ldyBUb25lLkVxdWFsUG93ZXJHYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZXF1YWwgcG93ZXIgZ2FpbiBjcm9zcyBmYWRlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5FcXVhbFBvd2VyR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJCID0gbmV3IFRvbmUuRXF1YWxQb3dlckdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpbnZlcnQgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmUgPSB0aGlzLmNvbnRleHQuZ2V0Q29uc3RhbnQoMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaW52ZXJ0IHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW52ZXJ0ID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5hLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuYi5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLmZhZGUuY2hhaW4odGhpcy5fZXF1YWxQb3dlckIsIHRoaXMuYi5nYWluKTtcblx0ICAgICAgICB0aGlzLl9vbmUuY29ubmVjdCh0aGlzLl9pbnZlcnQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuZmFkZS5jb25uZWN0KHRoaXMuX2ludmVydCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5faW52ZXJ0LmNoYWluKHRoaXMuX2VxdWFsUG93ZXJBLCB0aGlzLmEuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2ZhZGUnKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNyb3NzRmFkZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNyb3NzRmFkZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Dcm9zc0ZhZGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZmFkZScpO1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJBLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJCID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZhZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmFkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faW52ZXJ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9pbnZlcnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX29uZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5hLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuYi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5iID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Dcm9zc0ZhZGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5GaWx0ZXIgaXMgYSBmaWx0ZXIgd2hpY2ggYWxsb3dzIGZvciBhbGwgb2YgdGhlIHNhbWUgbmF0aXZlIG1ldGhvZHNcblx0XHQgKiAgICAgICAgICBhcyB0aGUgW0JpcXVhZEZpbHRlck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWJpcXVhZGZpbHRlcm5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKiAgICAgICAgICBUb25lLkZpbHRlciBoYXMgdGhlIGFkZGVkIGFiaWxpdHkgdG8gc2V0IHRoZSBmaWx0ZXIgcm9sbG9mZiBhdCAtMTJcblx0XHQgKiAgICAgICAgICAoZGVmYXVsdCksIC0yNCBhbmQgLTQ4LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlci5cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmc9fSB0eXBlIFRoZSB0eXBlIG9mIGZpbHRlci5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSByb2xsb2ZmIFRoZSBkcm9wIGluIGRlY2liZWxzIHBlciBvY3RhdmUgYWZ0ZXIgdGhlIGN1dG9mZiBmcmVxdWVuY3kuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgMyBjaG9pY2VzOiAtMTIsIC0yNCwgYW5kIC00OFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgZmlsdGVyID0gbmV3IFRvbmUuRmlsdGVyKDIwMCwgXCJoaWdocGFzc1wiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRmlsdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ3JvbGxvZmYnXG5cdCAgICAgICAgXSwgVG9uZS5GaWx0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmaWx0ZXIocylcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVyLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKDAsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gb2YgdGhlIGZpbHRlciwgb25seSB1c2VkIGluIGNlcnRhaW4gZmlsdGVyIHR5cGVzXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmdhaW4gPSBuZXcgVG9uZS5TaWduYWwoe1xuXHQgICAgICAgICAgICAndmFsdWUnOiBvcHRpb25zLmdhaW4sXG5cdCAgICAgICAgICAgICdjb252ZXJ0JzogZmFsc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgUSBvciBRdWFsaXR5IG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuUSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHR5cGUgb2YgdGhlIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlIHtzdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHJvbGxvZmYgdmFsdWUgb2YgdGhlIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JvbGxvZmYgPSBvcHRpb25zLnJvbGxvZmY7XG5cdCAgICAgICAgLy9zZXQgdGhlIHJvbGxvZmY7XG5cdCAgICAgICAgdGhpcy5yb2xsb2ZmID0gb3B0aW9ucy5yb2xsb2ZmO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmlsdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogJ2xvd3Bhc3MnLFxuXHQgICAgICAgICdmcmVxdWVuY3knOiAzNTAsXG5cdCAgICAgICAgJ3JvbGxvZmYnOiAtMTIsXG5cdCAgICAgICAgJ1EnOiAxLFxuXHQgICAgICAgICdnYWluJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBmaWx0ZXIuIFR5cGVzOiBcImxvd3Bhc3NcIiwgXCJoaWdocGFzc1wiLFxuXHRcdCAqIFwiYmFuZHBhc3NcIiwgXCJsb3dzaGVsZlwiLCBcImhpZ2hzaGVsZlwiLCBcIm5vdGNoXCIsIFwiYWxscGFzc1wiLCBvciBcInBlYWtpbmdcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GaWx0ZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GaWx0ZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHZhciB0eXBlcyA9IFtcblx0ICAgICAgICAgICAgICAgICdsb3dwYXNzJyxcblx0ICAgICAgICAgICAgICAgICdoaWdocGFzcycsXG5cdCAgICAgICAgICAgICAgICAnYmFuZHBhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ2xvd3NoZWxmJyxcblx0ICAgICAgICAgICAgICAgICdoaWdoc2hlbGYnLFxuXHQgICAgICAgICAgICAgICAgJ25vdGNoJyxcblx0ICAgICAgICAgICAgICAgICdhbGxwYXNzJyxcblx0ICAgICAgICAgICAgICAgICdwZWFraW5nJ1xuXHQgICAgICAgICAgICBdO1xuXHQgICAgICAgICAgICBpZiAodHlwZXMuaW5kZXhPZih0eXBlKSA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RvbmUuRmlsdGVyOiBpbnZhbGlkIHR5cGUgJyArIHR5cGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0udHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByb2xsb2ZmIG9mIHRoZSBmaWx0ZXIgd2hpY2ggaXMgdGhlIGRyb3AgaW4gZGJcblx0XHQgKiBwZXIgb2N0YXZlLiBJbXBsZW1lbnRlZCBpbnRlcm5hbGx5IGJ5IGNhc2NhZGluZyBmaWx0ZXJzLlxuXHRcdCAqIE9ubHkgYWNjZXB0cyB0aGUgdmFsdWVzIC0xMiwgLTI0LCAtNDggYW5kIC05Ni5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GaWx0ZXIjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSByb2xsb2ZmXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GaWx0ZXIucHJvdG90eXBlLCAncm9sbG9mZicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JvbGxvZmY7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyb2xsb2ZmKSB7XG5cdCAgICAgICAgICAgIHJvbGxvZmYgPSBwYXJzZUludChyb2xsb2ZmLCAxMCk7XG5cdCAgICAgICAgICAgIHZhciBwb3NzaWJpbGl0aWVzID0gW1xuXHQgICAgICAgICAgICAgICAgLTEyLFxuXHQgICAgICAgICAgICAgICAgLTI0LFxuXHQgICAgICAgICAgICAgICAgLTQ4LFxuXHQgICAgICAgICAgICAgICAgLTk2XG5cdCAgICAgICAgICAgIF07XG5cdCAgICAgICAgICAgIHZhciBjYXNjYWRpbmdDb3VudCA9IHBvc3NpYmlsaXRpZXMuaW5kZXhPZihyb2xsb2ZmKTtcblx0ICAgICAgICAgICAgLy9jaGVjayB0aGUgcm9sbG9mZiBpcyB2YWxpZFxuXHQgICAgICAgICAgICBpZiAoY2FzY2FkaW5nQ291bnQgPT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVG9uZS5GaWx0ZXI6IHJvbGxvZmYgY2FuIG9ubHkgYmUgLTEyLCAtMjQsIC00OCBvciAtOTYnKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBjYXNjYWRpbmdDb3VudCArPSAxO1xuXHQgICAgICAgICAgICB0aGlzLl9yb2xsb2ZmID0gcm9sbG9mZjtcblx0ICAgICAgICAgICAgLy9maXJzdCBkaXNjb25uZWN0IHRoZSBmaWx0ZXJzIGFuZCB0aHJvdyB0aGVtIGF3YXlcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldID0gbnVsbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzID0gbmV3IEFycmF5KGNhc2NhZGluZ0NvdW50KTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY291bnQgPSAwOyBjb3VudCA8IGNhc2NhZGluZ0NvdW50OyBjb3VudCsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZmlsdGVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICAgICAgZmlsdGVyLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdChmaWx0ZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QoZmlsdGVyLmRldHVuZSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLlEuY29ubmVjdChmaWx0ZXIuUSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmdhaW4uY29ubmVjdChmaWx0ZXIuZ2Fpbik7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2NvdW50XSA9IGZpbHRlcjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL2Nvbm5lY3QgdGhlbSB1cFxuXHQgICAgICAgICAgICB2YXIgY29ubmVjdGlvbkNoYWluID0gW3RoaXMuaW5wdXRdLmNvbmNhdCh0aGlzLl9maWx0ZXJzKS5jb25jYXQoW3RoaXMub3V0cHV0XSk7XG5cdCAgICAgICAgICAgIFRvbmUuY29ubmVjdFNlcmllcy5hcHBseShUb25lLCBjb25uZWN0aW9uQ2hhaW4pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GaWx0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5RLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZ2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5nYWluID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GaWx0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTcGxpdCB0aGUgaW5jb21pbmcgc2lnbmFsIGludG8gdGhyZWUgYmFuZHMgKGxvdywgbWlkLCBoaWdoKVxuXHRcdCAqICAgICAgICAgd2l0aCB0d28gY3Jvc3NvdmVyIGZyZXF1ZW5jeSBjb250cm9scy5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtsb3dGcmVxdWVuY3ldIHRoZSBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3lcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtoaWdoRnJlcXVlbmN5XSB0aGUgbWlkL2hpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRTcGxpdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSdcblx0ICAgICAgICBdLCBUb25lLk11bHRpYmFuZFNwbGl0KTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG91dHB1dHNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gbmV3IEFycmF5KDMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb3cgYmFuZC4gQWxpYXMgZm9yIDxjb2RlPm91dHB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvdyA9IHRoaXMub3V0cHV0WzBdID0gbmV3IFRvbmUuRmlsdGVyKDAsICdsb3dwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxvd2VyIGZpbHRlciBvZiB0aGUgbWlkIGJhbmRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvd01pZEZpbHRlciA9IG5ldyBUb25lLkZpbHRlcigwLCAnaGlnaHBhc3MnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIGJhbmQgb3V0cHV0LiBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzFdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gdGhpcy5vdXRwdXRbMV0gPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2xvd3Bhc3MnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgaGlnaCBiYW5kIG91dHB1dC4gQWxpYXMgZm9yIDxjb2RlPm91dHB1dFsyXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2ggPSB0aGlzLm91dHB1dFsyXSA9IG5ldyBUb25lLkZpbHRlcigwLCAnaGlnaHBhc3MnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbG93L21pZCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5sb3dGcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuaGlnaEZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHF1YWxpdHkgb2YgYWxsIHRoZSBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5RKTtcblx0ICAgICAgICB0aGlzLmlucHV0LmZhbih0aGlzLmxvdywgdGhpcy5oaWdoKTtcblx0ICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMuX2xvd01pZEZpbHRlciwgdGhpcy5taWQpO1xuXHQgICAgICAgIC8vdGhlIGZyZXF1ZW5jeSBjb250cm9sIHNpZ25hbFxuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5LmNvbm5lY3QodGhpcy5sb3cuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2xvd01pZEZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeS5jb25uZWN0KHRoaXMubWlkLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5LmNvbm5lY3QodGhpcy5oaWdoLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy90aGUgUSB2YWx1ZVxuXHQgICAgICAgIHRoaXMuUS5jb25uZWN0KHRoaXMubG93LlEpO1xuXHQgICAgICAgIHRoaXMuUS5jb25uZWN0KHRoaXMuX2xvd01pZEZpbHRlci5RKTtcblx0ICAgICAgICB0aGlzLlEuY29ubmVjdCh0aGlzLm1pZC5RKTtcblx0ICAgICAgICB0aGlzLlEuY29ubmVjdCh0aGlzLmhpZ2guUSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTXVsdGliYW5kU3BsaXQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZFNwbGl0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdsb3dGcmVxdWVuY3knOiA0MDAsXG5cdCAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiAyNTAwLFxuXHQgICAgICAgICdRJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTXVsdGliYW5kU3BsaXR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kU3BsaXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5sb3cuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubG93ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sb3dNaWRGaWx0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xvd01pZEZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2guZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5RLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk11bHRpYmFuZFNwbGl0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5FUTMgaXMgYSB0aHJlZSBiYW5kIEVRIHdpdGggY29udHJvbCBvdmVyIGxvdywgbWlkLCBhbmQgaGlnaCBnYWluIGFzXG5cdFx0ICogICAgICAgICB3ZWxsIGFzIHRoZSBsb3cgYW5kIGhpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jaWVzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc3xPYmplY3R9IFtsb3dMZXZlbF0gVGhlIGdhaW4gYXBwbGllZCB0byB0aGUgbG93cy5cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc30gW21pZExldmVsXSBUaGUgZ2FpbiBhcHBsaWVkIHRvIHRoZSBtaWQuXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFtoaWdoTGV2ZWxdIFRoZSBnYWluIGFwcGxpZWQgdG8gdGhlIGhpZ2guXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGVxID0gbmV3IFRvbmUuRVEzKC0xMCwgMywgLTIwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRVEzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnaGlnaCdcblx0ICAgICAgICBdLCBUb25lLkVRMyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3V0cHV0IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtdWx0aWJhbmQgc3BsaXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aWJhbmRTcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTXVsdGliYW5kU3BsaXQoe1xuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jzogb3B0aW9ucy5sb3dGcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jzogb3B0aW9ucy5oaWdoRnJlcXVlbmN5XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gZm9yIHRoZSBsb3dlciBzaWduYWxzXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvd0dhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMubG93LCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIGZvciB0aGUgbWlkIHNpZ25hbHNcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5taWQsIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBpbiBkZWNpYmVscyBvZiB0aGUgaGlnaCBwYXJ0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2hpZ2hHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLmhpZ2gsIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBpbiBkZWNpYmVscyBvZiB0aGUgbG93IHBhcnRcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93ID0gdGhpcy5fbG93R2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIG1pZCBwYXJ0XG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMuX21pZEdhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBoaWdoIHBhcnRcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IHRoaXMuX2hpZ2hHYWluLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIFEgdmFsdWUgZm9yIGFsbCBvZiB0aGUgZmlsdGVycy5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gdGhpcy5fbXVsdGliYW5kU3BsaXQuUTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbG93L21pZCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSB0aGlzLl9tdWx0aWJhbmRTcGxpdC5sb3dGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSB0aGlzLl9tdWx0aWJhbmRTcGxpdC5oaWdoRnJlcXVlbmN5O1xuXHQgICAgICAgIC8vdGhlIGZyZXF1ZW5jeSBiYW5kc1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0Lmxvdy5jaGFpbih0aGlzLl9sb3dHYWluLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQubWlkLmNoYWluKHRoaXMuX21pZEdhaW4sIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdC5oaWdoLmNoYWluKHRoaXMuX2hpZ2hHYWluLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRVEzLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICovXG5cdCAgICBUb25lLkVRMy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbG93JzogMCxcblx0ICAgICAgICAnbWlkJzogMCxcblx0ICAgICAgICAnaGlnaCc6IDAsXG5cdCAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IDQwMCxcblx0ICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IDI1MDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRVEzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVRMy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xvd0dhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xvd0dhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZEdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZEdhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2hpZ2hHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9oaWdoR2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3cgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2ggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRVEzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFBlcmZvcm1zIGEgbGluZWFyIHNjYWxpbmcgb24gYW4gaW5wdXQgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgIFNjYWxlcyBhIE5vcm1hbFJhbmdlIGlucHV0IHRvIGJldHdlZW5cblx0XHQgKiAgICAgICAgICBvdXRwdXRNaW4gYW5kIG91dHB1dE1heC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXRNaW49MF0gVGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAwLiBcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXRNYXg9MV1cdFRoZSBvdXRwdXQgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgMS4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNjYWxlID0gbmV3IFRvbmUuU2NhbGUoNTAsIDEwMCk7XG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgwLjUpLmNvbm5lY3Qoc2NhbGUpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBzY2FsZSBlcXVhbHMgNzVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGUgPSBmdW5jdGlvbiAob3V0cHV0TWluLCBvdXRwdXRNYXgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKiogXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3V0cHV0TWluID0gVG9uZS5kZWZhdWx0QXJnKG91dHB1dE1pbiwgMCk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX291dHB1dE1heCA9IFRvbmUuZGVmYXVsdEFyZyhvdXRwdXRNYXgsIDEpO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aXBseSgxKTtcblx0ICAgICAgICAvKiogXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FkZCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuQWRkKDApO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmNvbm5lY3QodGhpcy5fYWRkKTtcblx0ICAgICAgICB0aGlzLl9zZXRSYW5nZSgpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2NhbGUsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSBvdXRwdXQgdmFsdWUuIFRoaXMgbnVtYmVyIGlzIG91dHB1dCB3aGVuIFxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAwLiBcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGUucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0TWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dE1pbiA9IG1pbjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW4gXG5cdFx0ICogdGhlIHZhbHVlIGlucHV0IHZhbHVlIGlzIDEuIFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZS5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRNYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0TWF4ID0gbWF4O1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIHNldCB0aGUgdmFsdWVzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlLnByb3RvdHlwZS5fc2V0UmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fYWRkLnZhbHVlID0gdGhpcy5fb3V0cHV0TWluO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLnZhbHVlID0gdGhpcy5fb3V0cHV0TWF4IC0gdGhpcy5fb3V0cHV0TWluO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2NhbGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYWRkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hZGQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2NhbGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFBlcmZvcm1zIGFuIGV4cG9uZW50aWFsIHNjYWxpbmcgb24gYW4gaW5wdXQgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgIFNjYWxlcyBhIE5vcm1hbFJhbmdlIHZhbHVlIFswLDFdIGV4cG9uZW50aWFsbHlcblx0XHQgKiAgICAgICAgICB0byB0aGUgb3V0cHV0IHJhbmdlIG9mIG91dHB1dE1pbiB0byBvdXRwdXRNYXguXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWluPTBdIFRoZSBvdXRwdXQgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgMC5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXRNYXg9MV1cdFRoZSBvdXRwdXQgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgMS5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtleHBvbmVudD0yXSBUaGUgZXhwb25lbnQgd2hpY2ggc2NhbGVzIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNjYWxlRXhwID0gbmV3IFRvbmUuU2NhbGVFeHAoMCwgMTAwLCAyKTtcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDAuNSkuY29ubmVjdChzY2FsZUV4cCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlRXhwID0gZnVuY3Rpb24gKG91dHB1dE1pbiwgb3V0cHV0TWF4LCBleHBvbmVudCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSBpbnB1dCB0byB0aGUgb3V0cHV0IHJhbmdlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TY2FsZShvdXRwdXRNaW4sIG91dHB1dE1heCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Qb3d9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V4cCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5Qb3coVG9uZS5kZWZhdWx0QXJnKGV4cG9uZW50LCAyKSk7XG5cdCAgICAgICAgdGhpcy5fZXhwLmNvbm5lY3QodGhpcy5fc2NhbGUpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2NhbGVFeHAsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBJbnN0ZWFkIG9mIGludGVycG9sYXRpbmcgbGluZWFybHkgYmV0d2VlbiB0aGUgPGNvZGU+bWluPC9jb2RlPiBhbmRcblx0XHQgKiA8Y29kZT5tYXg8L2NvZGU+IHZhbHVlcywgc2V0dGluZyB0aGUgZXhwb25lbnQgd2lsbCBpbnRlcnBvbGF0ZSBiZXR3ZWVuXG5cdFx0ICogdGhlIHR3byB2YWx1ZXMgd2l0aCBhbiBleHBvbmVudGlhbCBjdXJ2ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZUV4cCNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGV4cG9uZW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUsICdleHBvbmVudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAudmFsdWUgPSBleHA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSBvdXRwdXQgdmFsdWUuIFRoaXMgbnVtYmVyIGlzIG91dHB1dCB3aGVuXG5cdFx0ICogdGhlIHZhbHVlIGlucHV0IHZhbHVlIGlzIDAuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVFeHAjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlRXhwLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5taW4gPSBtaW47XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgdmFsdWUuIFRoaXMgbnVtYmVyIGlzIG91dHB1dCB3aGVuXG5cdFx0ICogdGhlIHZhbHVlIGlucHV0IHZhbHVlIGlzIDEuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVFeHAjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlRXhwLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5tYXggPSBtYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNjYWxlRXhwfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlRXhwLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXhwLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9leHAgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNjYWxlRXhwO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgV2ViIEF1ZGlvJ3MgbmF0aXZlIFtEZWxheU5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWRlbGF5bm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gZGVsYXlUaW1lIFRoZSBkZWxheSBhcHBsaWVkIHRvIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IG1heERlbGF5IFRoZSBtYXhpbXVtIGRlbGF5IHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkRlbGF5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdtYXhEZWxheSdcblx0ICAgICAgICBdLCBUb25lLkRlbGF5KTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG1heGltdW0gZGVsYXkgdGltZSBpbml0aWFsaXplZCB3aXRoIHRoZSBub2RlXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21heERlbGF5ID0gTWF0aC5tYXgodGhpcy50b1NlY29uZHMob3B0aW9ucy5tYXhEZWxheSksIHRoaXMudG9TZWNvbmRzKG9wdGlvbnMuZGVsYXlUaW1lKSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG5hdGl2ZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZURlbGF5KHRoaXMuX21heERlbGF5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIGluY29taW5nIHNpZ25hbCBpc1xuXHRcdFx0ICogIGRlbGF5ZWQuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2RlbGF5Tm9kZS5kZWxheVRpbWUsXG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5UaW1lLFxuXHQgICAgICAgICAgICAndmFsdWUnOiBvcHRpb25zLmRlbGF5VGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdkZWxheVRpbWUnKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkRlbGF5LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRGVsYXkuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21heERlbGF5JzogMSxcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIGRlbGF5IHRpbWUuIFRoaXMgY2Fubm90IGJlIGNoYW5nZWQuIFRoZSB2YWx1ZSBpcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IuXG5cdFx0ICogQG1lbWJlcm9mIFRvbmUuRGVsYXkjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbWF4RGVsYXlcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkRlbGF5LnByb3RvdHlwZSwgJ21heERlbGF5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF4RGVsYXk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkRlbGF5fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EZWxheS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZGVsYXlUaW1lJyk7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkRlbGF5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQ29tYiBmaWx0ZXJzIGFyZSBiYXNpYyBidWlsZGluZyBibG9ja3MgZm9yIHBoeXNpY2FsIG1vZGVsaW5nLiBSZWFkIG1vcmVcblx0XHQgKiAgICAgICAgIGFib3V0IGNvbWIgZmlsdGVycyBvbiBbQ0NSTUEncyB3ZWJzaXRlXShodHRwczovL2Njcm1hLnN0YW5mb3JkLmVkdS9+am9zL3Bhc3AvRmVlZGJhY2tfQ29tYl9GaWx0ZXJzLmh0bWwpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtkZWxheVRpbWVdIFRoZSBkZWxheSB0aW1lIG9mIHRoZSBmaWx0ZXIuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2U9fSByZXNvbmFuY2UgVGhlIGFtb3VudCBvZiBmZWVkYmFjayB0aGUgZmlsdGVyIGhhcy5cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnXG5cdCAgICAgICAgXSwgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkRlbGF5KG9wdGlvbnMuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGRlbGF5IG9mIHRoZSBjb21iIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IHRoaXMuX2RlbGF5LmRlbGF5VGltZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmVlZGJhY2sgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2sgPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMucmVzb25hbmNlLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZmVlZGJhY2sgb2YgdGhlIGRlbGF5ZWQgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IHRoaXMuX2ZlZWRiYWNrLmdhaW47XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuY2hhaW4odGhpcy5fZmVlZGJhY2ssIHRoaXMuX2RlbGF5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDAuMSxcblx0ICAgICAgICAncmVzb25hbmNlJzogMC41XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZlZWRiYWNrQ29tYkZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZlZWRiYWNrQ29tYkZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgR2V0IHRoZSBjdXJyZW50IHdhdmVmb3JtIGRhdGEgb2YgdGhlIGNvbm5lY3RlZCBhdWRpbyBzb3VyY2UuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBzaXplIFRoZSBzaXplIG9mIHRoZSBGRlQuIFZhbHVlIG11c3QgYmUgYSBwb3dlciBvZlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GRlQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzaXplJ10sIFRvbmUuRkZUKTtcblx0ICAgICAgICBvcHRpb25zLnR5cGUgPSBUb25lLkFuYWx5c2VyLlR5cGUuRkZUO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFuYWx5c2VyIG5vZGUuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbmFseXNlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuQW5hbHlzZXIob3B0aW9ucyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GRlQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GRlQuZGVmYXVsdHMgPSB7ICdzaXplJzogMTAyNCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldHMgdGhlIHdhdmVmb3JtIG9mIHRoZSBhdWRpbyBzb3VyY2UuIFJldHVybnMgdGhlIHdhdmVmb3JtIGRhdGFcblx0XHQgKiAgb2YgbGVuZ3RoIFtzaXplXSgjc2l6ZSkgYXMgYSBGbG9hdDMyQXJyYXkgd2l0aCB2YWx1ZXMgYmV0d2VlbiAtMSBhbmQgMS5cblx0XHQgKiAgQHJldHVybnMge1R5cGVkQXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLkZGVC5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLmdldFZhbHVlKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzaXplIG9mIGFuYWx5c2lzLiBUaGlzIG11c3QgYmUgYSBwb3dlciBvZiB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5GRlQjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIHNpemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZGVC5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc2l6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuc2l6ZSA9IHNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkZGVH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRkZULnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GRlQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBSZXR1cm4gdGhlIGFic29sdXRlIHZhbHVlIG9mIGFuIGluY29taW5nIHNpZ25hbC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKC0xKTtcblx0XHQgKiB2YXIgYWJzID0gbmV3IFRvbmUuQWJzKCk7XG5cdFx0ICogc2lnbmFsLmNvbm5lY3QoYWJzKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgYWJzIGlzIDEuXG5cdFx0ICovXG5cdCAgICBUb25lLkFicyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MZXNzVGhhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWJzID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyh2YWwpIDwgMC4wMDEpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHZhbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LCAxMDI0KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFicywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNwb3NlIG1ldGhvZFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BYnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQWJzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2Ficy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYWJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BYnM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Gb2xsb3dlciBpcyBhICBjcnVkZSBlbnZlbG9wZSBmb2xsb3dlciB3aGljaCB3aWxsIGZvbGxvd1xuXHRcdCAqICAgICAgICAgIHRoZSBhbXBsaXR1ZGUgb2YgYW4gaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgIFRha2UgY2FyZSB3aXRoIHNtYWxsICg8IDAuMDIpIGF0dGFjayBvciBkZWNheSB2YWx1ZXNcblx0XHQgKiAgICAgICAgICBhcyBmb2xsb3dlciBoYXMgc29tZSByaXBwbGUgd2hpY2ggaXMgZXhhZ2dlcmF0ZWRcblx0XHQgKiAgICAgICAgICBhdCB0aGVzZSB2YWx1ZXMuIFJlYWQgbW9yZSBhYm91dCBlbnZlbG9wZSBmb2xsb3dlcnMgKGFsc28ga25vd25cblx0XHQgKiAgICAgICAgICBhcyBlbnZlbG9wZSBkZXRlY3RvcnMpIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VudmVsb3BlX2RldGVjdG9yKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbYXR0YWNrXSBUaGUgcmF0ZSBhdCB3aGljaCB0aGUgZm9sbG93ZXIgcmlzZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJlbGVhc2UgVGhlIHJhdGUgYXQgd2hpY2ggdGhlIGZvbG93ZXIgZmFsbHMuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZvbGxvd2VyID0gbmV3IFRvbmUuRm9sbG93ZXIoMC4yLCAwLjQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkZvbGxvd2VyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BYnN9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FicyA9IG5ldyBUb25lLkFicygpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsb3dwYXNzIGZpbHRlciB3aGljaCBzbW9vdGhzIHRoZSBpbnB1dFxuXHRcdFx0ICogIEB0eXBlIHtCaXF1YWRGaWx0ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyLnR5cGUgPSAnbG93cGFzcyc7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyLmZyZXF1ZW5jeS52YWx1ZSA9IDA7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyLlEudmFsdWUgPSAtMTAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5VmFsdWVzID0gbmV3IFRvbmUuV2F2ZVNoYXBlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWIgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheSA9IG5ldyBUb25lLkRlbGF5KHRoaXMuYmxvY2tUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGlzIGtlZXBzIGl0IGZhciBmcm9tIDAsIGV2ZW4gZm9yIHZlcnkgc21hbGwgZGlmZmVyZW5jZXNcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KDEwMDAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hdHRhY2sgPSBvcHRpb25zLmF0dGFjaztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yZWxlYXNlID0gb3B0aW9ucy5yZWxlYXNlO1xuXHQgICAgICAgIC8vdGhlIHNtb290aGVkIHNpZ25hbCB0byBnZXQgdGhlIHZhbHVlc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4odGhpcy5fYWJzLCB0aGlzLl9maWx0ZXIsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL3RoZSBkaWZmZXJlbmNlIHBhdGhcblx0ICAgICAgICB0aGlzLl9hYnMuY29ubmVjdCh0aGlzLl9zdWIsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5jaGFpbih0aGlzLl9kZWxheSwgdGhpcy5fc3ViKTtcblx0ICAgICAgICAvL3RocmVzaG9sZCB0aGUgZGlmZmVyZW5jZSBhbmQgdXNlIHRoZSB0aHJlc2ggdG8gc2V0IHRoZSBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLl9zdWIuY2hhaW4odGhpcy5fbXVsdCwgdGhpcy5fZnJlcXVlbmN5VmFsdWVzLCB0aGlzLl9maWx0ZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3NldCB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIHZhbHVlcyBpbiB0aGUgdGFibGVcblx0ICAgICAgICB0aGlzLl9zZXRBdHRhY2tSZWxlYXNlKHRoaXMuX2F0dGFjaywgdGhpcy5fcmVsZWFzZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Gb2xsb3dlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2F0dGFjayc6IDAuMDUsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc2V0cyB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIHRpbWVzIGluIHRoZSB3YXZlIHNoYXBlclxuXHRcdCAqICBAcGFyYW0gICB7VGltZX0gYXR0YWNrXG5cdFx0ICogIEBwYXJhbSAgIHtUaW1lfSByZWxlYXNlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyLnByb3RvdHlwZS5fc2V0QXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChhdHRhY2ssIHJlbGVhc2UpIHtcblx0ICAgICAgICB2YXIgbWluVGltZSA9IHRoaXMuYmxvY2tUaW1lO1xuXHQgICAgICAgIGF0dGFjayA9IFRvbmUuVGltZShhdHRhY2spLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgcmVsZWFzZSA9IFRvbmUuVGltZShyZWxlYXNlKS50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIGF0dGFjayA9IE1hdGgubWF4KGF0dGFjaywgbWluVGltZSk7XG5cdCAgICAgICAgcmVsZWFzZSA9IE1hdGgubWF4KHJlbGVhc2UsIG1pblRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcy5zZXRNYXAoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAodmFsIDw9IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBhdHRhY2s7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gcmVsZWFzZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhdHRhY2sgdGltZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Gb2xsb3dlciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBhdHRhY2tcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZvbGxvd2VyLnByb3RvdHlwZSwgJ2F0dGFjaycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGF0dGFjaykge1xuXHQgICAgICAgICAgICB0aGlzLl9hdHRhY2sgPSBhdHRhY2s7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldEF0dGFja1JlbGVhc2UodGhpcy5fYXR0YWNrLCB0aGlzLl9yZWxlYXNlKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByZWxlYXNlIHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRm9sbG93ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgcmVsZWFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLCAncmVsZWFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbGVhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyZWxlYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlbGVhc2UgPSByZWxlYXNlO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBdHRhY2tSZWxlYXNlKHRoaXMuX2F0dGFjaywgdGhpcy5fcmVsZWFzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQm9ycm93cyB0aGUgY29ubmVjdCBtZXRob2QgZnJvbSBTaWduYWwgc28gdGhhdCB0aGUgb3V0cHV0IGNhbiBiZSB1c2VkXG5cdFx0ICogIGFzIGEgVG9uZS5TaWduYWwgY29udHJvbCBzaWduYWwuXG5cdFx0ICogIEBmdW5jdGlvblxuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUuY29ubmVjdCA9IFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdDtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNwb3NlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZvbGxvd2VyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcy5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5VmFsdWVzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N1Yi5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc3ViID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hYnMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FicyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbXVsdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZvbGxvd2VyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5TY2FsZWRFbnZlbG9wIGlzIGFuIGVudmVsb3BlIHdoaWNoIGNhbiBiZSBzY2FsZWRcblx0XHQgKiAgICAgICAgIHRvIGFueSByYW5nZS4gSXQncyB1c2VmdWwgZm9yIGFwcGx5aW5nIGFuIGVudmVsb3BlXG5cdFx0ICogICAgICAgICB0byBhIGZyZXF1ZW5jeSBvciBhbnkgb3RoZXIgbm9uLU5vcm1hbFJhbmdlIHNpZ25hbFxuXHRcdCAqICAgICAgICAgcGFyYW1ldGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVudmVsb3BlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja11cdHRoZSBhdHRhY2sgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2RlY2F5XVx0dGhlIGRlY2F5IHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3N1c3RhaW5dIFx0YSBwZXJjZW50YWdlICgwLTEpIG9mIHRoZSBmdWxsIGFtcGxpdHVkZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0dGhlIHJlbGVhc2UgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBzY2FsZWRFbnYgPSBuZXcgVG9uZS5TY2FsZWRFbnZlbG9wZSh7XG5cdFx0ICogIFx0XCJhdHRhY2tcIiA6IDAuMixcblx0XHQgKiAgXHRcIm1pblwiIDogMjAwLFxuXHRcdCAqICBcdFwibWF4XCIgOiAyMDAwXG5cdFx0ICogIH0pO1xuXHRcdCAqICBzY2FsZWRFbnYuY29ubmVjdChvc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlZEVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vZ2V0IGFsbCBvZiB0aGUgZGVmYXVsdHNcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAnZGVjYXknLFxuXHQgICAgICAgICAgICAnc3VzdGFpbicsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuU2NhbGVkRW52ZWxvcGUuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSBpbmNvbWluZyBzaWduYWwgYnkgYW4gZXhwb25lbnRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Qb3d9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V4cCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuUG93KG9wdGlvbnMuZXhwb25lbnQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSBzaWduYWwgdG8gdGhlIGRlc2lyZWQgcmFuZ2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlNjYWxlKG9wdGlvbnMubWluLCBvcHRpb25zLm1heCk7XG5cdCAgICAgICAgdGhpcy5fc2lnLmNoYWluKHRoaXMuX2V4cCwgdGhpcy5fc2NhbGUpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2NhbGVkRW52ZWxvcGUsIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZWRFbnZlbG9wZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAnZXhwb25lbnQnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgbWluIG91dHB1dCB2YWx1ZS4gVGhpcyBpcyB0aGUgdmFsdWUgd2hpY2ggaXRcblx0XHQgKiBzdGFydHMgYXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVkRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5taW4gPSBtaW47XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBtYXggb3V0cHV0IHZhbHVlLiBJbiBvdGhlciB3b3JkcywgdGhlIHZhbHVlXG5cdFx0ICogYXQgdGhlIHBlYWsgb2YgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZWRFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWF4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1heCA9IG1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIGV4cG9uZW50IHZhbHVlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlZEVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgZXhwb25lbnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZSwgJ2V4cG9uZW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwLnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cC52YWx1ZSA9IGV4cDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TY2FsZWRFbnZlbG9wZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9leHAuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2V4cCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2NhbGVkRW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZyZXF1ZW5jeUVudmVsb3BlIGlzIGEgVG9uZS5TY2FsZWRFbnZlbG9wZSwgYnV0IGluc3RlYWQgb2YgYG1pbmAgYW5kIGBtYXhgXG5cdFx0ICogICAgICAgICBpdCdzIGdvdCBhIGBiYXNlRnJlcXVlbmN5YCBhbmQgYG9jdGF2ZXNgIHBhcmFtZXRlci5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbnZlbG9wZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdXHR0aGUgYXR0YWNrIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdHRoZSBkZWNheSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtzdXN0YWluXSBcdGEgcGVyY2VudGFnZSAoMC0xKSBvZiB0aGUgZnVsbCBhbXBsaXR1ZGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbcmVsZWFzZV1cdHRoZSByZWxlYXNlIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgZnJlcUVudiA9IG5ldyBUb25lLkZyZXF1ZW5jeUVudmVsb3BlKHtcblx0XHQgKiAgXHRcImF0dGFja1wiIDogMC4yLFxuXHRcdCAqICBcdFwiYmFzZUZyZXF1ZW5jeVwiIDogXCJDMlwiLFxuXHRcdCAqICBcdFwib2N0YXZlc1wiIDogNFxuXHRcdCAqICB9KTtcblx0XHQgKiAgZnJlcUVudi5jb25uZWN0KG9zY2lsbGF0b3IuZnJlcXVlbmN5KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ2RlY2F5Jyxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkVudmVsb3BlKTtcblx0ICAgICAgICBUb25lLlNjYWxlZEVudmVsb3BlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLy9tZXJnZSBpdCB3aXRoIHRoZSBmcmVxdWVuY3kgZW52ZWxvcGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFN0b3JlcyB0aGUgb2N0YXZlIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8vc2V0dXBcblx0ICAgICAgICB0aGlzLmJhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUsIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDIwMCxcblx0ICAgICAgICAnb2N0YXZlcyc6IDQsXG5cdCAgICAgICAgJ2V4cG9uZW50JzogMlxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIG1pbmludW0gb3V0cHV0IHZhbHVlLiBUaGlzIGlzIHRoZSB2YWx1ZSB3aGljaCBpdFxuXHRcdCAqIHN0YXJ0cyBhdC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqIEBuYW1lIGJhc2VGcmVxdWVuY3lcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZyZXF1ZW5jeUVudmVsb3BlLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWluID0gdGhpcy50b0ZyZXF1ZW5jeShtaW4pO1xuXHQgICAgICAgICAgICAvL2Fsc28gdXBkYXRlIHRoZSBvY3RhdmVzXG5cdCAgICAgICAgICAgIHRoaXMub2N0YXZlcyA9IHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIGJhc2VGcmVxdWVuY3kgdGhhdCB0aGVcblx0XHQgKiBlbnZlbG9wZSB3aWxsIHNjYWxlIHRvLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdGF2ZXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdGF2ZXM7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1heCA9IHRoaXMuYmFzZUZyZXF1ZW5jeSAqIE1hdGgucG93KDIsIG9jdGF2ZXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgZXhwb25lbnQgdmFsdWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBleHBvbmVudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLCAnZXhwb25lbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHAudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwLnZhbHVlID0gZXhwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZyZXF1ZW5jeUVudmVsb3BlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeUVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3lFbnZlbG9wZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBHcmVhdGVyVGhhblplcm8gb3V0cHV0cyAxIHdoZW4gdGhlIGlucHV0IGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiB6ZXJvXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGd0MCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuWmVybygpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMC4wMSkuY29ubmVjdChndDApO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBndDAgaXMgMS5cblx0XHQgKiBzaWcudmFsdWUgPSAwO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBndDAgaXMgMC5cblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW5aZXJvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmICh2YWwgPD0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sIDEyNyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIGZpcnN0IHRocmVzaG9sZGVkIHNpZ25hbCBieSBhIGxhcmdlIHZhbHVlLlxuXHRcdFx0ICogIHRoaXMgd2lsbCBoZWxwIHdpdGggdmFsdWVzIHdoaWNoIGFyZSB2ZXJ5IGNsb3NlIHRvIDBcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMTAwMDApO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9zY2FsZS5jb25uZWN0KHRoaXMuX3RocmVzaCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HcmVhdGVyVGhhblplcm8sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBtZXRob2Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR3JlYXRlclRoYW5aZXJvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyZWF0ZXJUaGFuWmVyby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGhyZXNoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HcmVhdGVyVGhhblplcm87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgT3V0cHV0IDEgaWYgdGhlIHNpZ25hbCBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlLCBvdGhlcndpc2Ugb3V0cHV0cyAwLlxuXHRcdCAqICAgICAgICAgIGNhbiBjb21wYXJlIHR3byBzaWduYWxzIG9yIGEgc2lnbmFsIGFuZCBhIG51bWJlci5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZhbHVlPTBdIHRoZSB2YWx1ZSB0byBjb21wYXJlIHRvIHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZ3QgPSBuZXcgVG9uZS5HcmVhdGVyVGhhbigyKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDQpLmNvbm5lY3QoZ3QpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIGd0IGlzIGVxdWFsIDEuXG5cdFx0ICovXG5cdCAgICBUb25lLkdyZWF0ZXJUaGFuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3VidHJhY3QgdGhlIGFtb3VudCBmcm9tIHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuU3VidHJhY3QodmFsdWUpO1xuXHQgICAgICAgIHRoaXMuaW5wdXRbMV0gPSB0aGlzLl9wYXJhbS5pbnB1dFsxXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb21wYXJlIHRoYXQgYW1vdW50IHRvIHplcm9cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HcmVhdGVyVGhhblplcm99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2d0eiA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR3JlYXRlclRoYW5aZXJvKCk7XG5cdCAgICAgICAgLy9jb25uZWN0XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uY29ubmVjdCh0aGlzLl9ndHopO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR3JlYXRlclRoYW4sIFRvbmUuU2lnbmFsKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNwb3NlIG1ldGhvZFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HcmVhdGVyVGhhbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2d0ei5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ3R6ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HcmVhdGVyVGhhbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkdhdGUgb25seSBwYXNzZXMgYSBzaWduYWwgdGhyb3VnaCB3aGVuIHRoZSBpbmNvbWluZ1xuXHRcdCAqICAgICAgICAgIHNpZ25hbCBleGNlZWRzIGEgc3BlY2lmaWVkIHRocmVzaG9sZC4gVG8gZG8gdGhpcywgR2F0ZSB1c2VzXG5cdFx0ICogICAgICAgICAgYSBUb25lLkZvbGxvd2VyIHRvIGZvbGxvdyB0aGUgYW1wbGl0dWRlIG9mIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogICAgICAgICAgQSBjb21tb24gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjbGFzcyBpcyBhIFtOb2lzZSBHYXRlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Ob2lzZV9nYXRlKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfE9iamVjdH0gW3RocmVzaG9sZF0gVGhlIHRocmVzaG9sZCBhYm92ZSB3aGljaCB0aGUgZ2F0ZSB3aWxsIG9wZW4uXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGF0dGFjayBUaGUgZm9sbG93ZXIncyBhdHRhY2sgdGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByZWxlYXNlIFRoZSBmb2xsb3dlcidzIHJlbGVhc2UgdGltZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBnYXRlID0gbmV3IFRvbmUuR2F0ZSgtMzAsIDAuMiwgMC4zKS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBtaWMgPSBuZXcgVG9uZS5Vc2VyTWVkaWEoKS5jb25uZWN0KGdhdGUpO1xuXHRcdCAqIC8vdGhlIGdhdGUgd2lsbCBvbmx5IHBhc3MgdGhyb3VnaCB0aGUgaW5jb21pbmdcblx0XHQgKiAvL3NpZ25hbCB3aGVuIGl0J3MgbG91ZGVyIHRoYW4gLTMwZGJcblx0XHQgKi9cblx0ICAgIFRvbmUuR2F0ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnLFxuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5HYXRlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Gb2xsb3dlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZm9sbG93ZXIgPSBuZXcgVG9uZS5Gb2xsb3dlcihvcHRpb25zLmF0dGFjaywgb3B0aW9ucy5yZWxlYXNlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HcmVhdGVyVGhhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ3QgPSBuZXcgVG9uZS5HcmVhdGVyVGhhbihUb25lLmRiVG9HYWluKG9wdGlvbnMudGhyZXNob2xkKSk7XG5cdCAgICAgICAgLy90aGUgY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vdGhlIGNvbnRyb2wgc2lnbmFsXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLl9ndCwgdGhpcy5fZm9sbG93ZXIsIHRoaXMub3V0cHV0LmdhaW4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR2F0ZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkdhdGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2F0dGFjayc6IDAuMSxcblx0ICAgICAgICAncmVsZWFzZSc6IDAuMSxcblx0ICAgICAgICAndGhyZXNob2xkJzogLTQwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHRocmVzaG9sZCBvZiB0aGUgZ2F0ZSBpbiBkZWNpYmVsc1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdhdGUjXG5cdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdCAqIEBuYW1lIHRocmVzaG9sZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR2F0ZS5wcm90b3R5cGUsICd0aHJlc2hvbGQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmdhaW5Ub0RiKHRoaXMuX2d0LnZhbHVlKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRocmVzaCkge1xuXHQgICAgICAgICAgICB0aGlzLl9ndC52YWx1ZSA9IFRvbmUuZGJUb0dhaW4odGhyZXNoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhdHRhY2sgc3BlZWQgb2YgdGhlIGdhdGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HYXRlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGF0dGFja1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR2F0ZS5wcm90b3R5cGUsICdhdHRhY2snLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb2xsb3dlci5hdHRhY2s7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhdHRhY2tUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvbGxvd2VyLmF0dGFjayA9IGF0dGFja1RpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcmVsZWFzZSBzcGVlZCBvZiB0aGUgZ2F0ZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdhdGUjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgcmVsZWFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR2F0ZS5wcm90b3R5cGUsICdyZWxlYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9sbG93ZXIucmVsZWFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJlbGVhc2VUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvbGxvd2VyLnJlbGVhc2UgPSByZWxlYXNlVGltZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuR2F0ZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HYXRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZm9sbG93ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2d0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mb2xsb3dlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZ3QgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBUb25lLlRpY2tTaWduYWwgZXh0ZW5kcyBUb25lLlNpZ25hbCwgYnV0IGFkZHMgdGhlIGNhcGFiaWxpdHlcblx0XHQgKiAgICAgICAgdG8gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgZWxhcHNlZCB0aWNrcy4gZXhwb25lbnRpYWwgYW5kIHRhcmdldCBjdXJ2ZXNcblx0XHQgKiAgICAgICAgYXJlIGFwcHJveGltYXRlZCB3aXRoIG11bHRpcGxlIGxpbmVhciByYW1wcy5cblx0XHQgKlxuXHRcdCAqICAgICAgICBUaGFuayB5b3UgQnJ1bm8gRGlhcywgSC4gU29maWEgUGludG8sIGFuZCBEYXZpZCBNLiBNYXRvcywgZm9yIHlvdXIgW1dBQyBwYXBlcl0oaHR0cHM6Ly9zbWFydGVjaC5nYXRlY2guZWR1L2JpdHN0cmVhbS9oYW5kbGUvMTg1My81NDU4OC9XQUMyMDE2LTQ5LnBkZilcblx0XHQgKiAgICAgICAgZGVzY3JpYmluZyBpbnRlZ3JhdGluZyB0aW1pbmcgZnVuY3Rpb25zIGZvciB0ZW1wbyBjYWxjdWxhdGlvbnMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge051bWJlcn0gdmFsdWUgVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHNpZ25hbFxuXHRcdCAqIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIHZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKHZhbHVlLCAxKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMsIHtcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLlRpY2tzLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vZXh0ZW5kIHRoZSBtZW1vcnlcblx0ICAgICAgICB0aGlzLl9ldmVudHMubWVtb3J5ID0gSW5maW5pdHk7XG5cdCAgICAgICAgLy9jbGVhciB0aGUgY2xvY2sgZnJvbSB0aGUgYmVnaW5uaW5nXG5cdCAgICAgICAgdGhpcy5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoMCk7XG5cdCAgICAgICAgLy9zZXQgYW4gaW5pdGlhbCBldmVudFxuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuU2V0VmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogMCxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpY2tTaWduYWwsIFRvbmUuU2lnbmFsKTtcblx0ICAgIC8qKlxuXHRcdCAqIFdyYXBzIFRvbmUuU2lnbmFsIG1ldGhvZHMgc28gdGhhdCB0aGV5IGFsc29cblx0XHQgKiByZWNvcmQgdGhlIHRpY2tzLlxuXHRcdCAqIEBwYXJhbSAge0Z1bmN0aW9ufSBtZXRob2Rcblx0XHQgKiBAcmV0dXJuIHtGdW5jdGlvbn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgZnVuY3Rpb24gX3dyYXBTY2hlZHVsZU1ldGhvZHMobWV0aG9kKSB7XG5cdCAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgICAgIG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXNFdmVudCA9IHRoaXMuX2V2ZW50cy5wcmV2aW91c0V2ZW50KGV2ZW50KTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzVW50aWxUaW1lID0gdGhpcy5fZ2V0VGlja3NVbnRpbEV2ZW50KHByZXZpb3VzRXZlbnQsIHRpbWUpO1xuXHQgICAgICAgICAgICBldmVudC50aWNrcyA9IE1hdGgubWF4KHRpY2tzVW50aWxUaW1lLCAwKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgIH1cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVBdFRpbWUgPSBfd3JhcFNjaGVkdWxlTWV0aG9kcyhUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVBdFRpbWUpO1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSA9IF93cmFwU2NoZWR1bGVNZXRob2RzKFRvbmUuU2lnbmFsLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lIHdpdGhcblx0XHQgKiAgYSByYXRlIGhhdmluZyB0aGUgZ2l2ZW4gdGltZSBjb25zdGFudC5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB0aW1lQ29uc3RhbnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5zZXRUYXJnZXRBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUsIGNvbnN0YW50KSB7XG5cdCAgICAgICAgLy9hcHJveGltYXRlIGl0IHdpdGggbXVsdGlwbGUgbGluZWFyIHJhbXBzXG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHRpbWUpO1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICAvL3N0YXJ0IGZyb20gcHJldmlvdXNseSBzY2hlZHVsZWQgdmFsdWVcblx0ICAgICAgICB2YXIgcHJldkV2ZW50ID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICB2YXIgc2VnbWVudHMgPSBNYXRoLnJvdW5kKE1hdGgubWF4KDEgLyBjb25zdGFudCwgMSkpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IHNlZ21lbnRzOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHNlZ1RpbWUgPSBjb25zdGFudCAqIGkgKyB0aW1lO1xuXHQgICAgICAgICAgICB2YXIgcmFtcFZhbCA9IHRoaXMuX2V4cG9uZW50aWFsQXBwcm9hY2gocHJldkV2ZW50LnRpbWUsIHByZXZFdmVudC52YWx1ZSwgdmFsdWUsIGNvbnN0YW50LCBzZWdUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh0aGlzLl90b1VuaXRzKHJhbXBWYWwpLCBzZWdUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhbiBleHBvbmVudGlhbCBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgcHJldmlvdXMgc2NoZWR1bGVkIHBhcmFtZXRlciB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZW5kVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICAvL2Fwcm94aW1hdGUgaXQgd2l0aCBtdWx0aXBsZSBsaW5lYXIgcmFtcHNcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIC8vc3RhcnQgZnJvbSBwcmV2aW91c2x5IHNjaGVkdWxlZCB2YWx1ZVxuXHQgICAgICAgIHZhciBwcmV2RXZlbnQgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIGlmIChwcmV2RXZlbnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgcHJldkV2ZW50ID0ge1xuXHQgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdGhpcy5faW5pdGlhbFZhbHVlLFxuXHQgICAgICAgICAgICAgICAgJ3RpbWUnOiAwXG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYXBwcm94IDEwIHNlZ21lbnRzIHBlciBzZWNvbmRcblx0ICAgICAgICB2YXIgc2VnbWVudHMgPSBNYXRoLnJvdW5kKE1hdGgubWF4KCh0aW1lIC0gcHJldkV2ZW50LnRpbWUpICogMTAsIDEpKTtcblx0ICAgICAgICB2YXIgc2VnbWVudER1ciA9ICh0aW1lIC0gcHJldkV2ZW50LnRpbWUpIC8gc2VnbWVudHM7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gc2VnbWVudHM7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgc2VnVGltZSA9IHNlZ21lbnREdXIgKiBpICsgcHJldkV2ZW50LnRpbWU7XG5cdCAgICAgICAgICAgIHZhciByYW1wVmFsID0gdGhpcy5fZXhwb25lbnRpYWxJbnRlcnBvbGF0ZShwcmV2RXZlbnQudGltZSwgcHJldkV2ZW50LnZhbHVlLCB0aW1lLCB2YWx1ZSwgc2VnVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodGhpcy5fdG9Vbml0cyhyYW1wVmFsKSwgc2VnVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIHRpY2sgdmFsdWUgYXQgdGhlIHRpbWUuIFRha2VzIGludG8gYWNjb3VudFxuXHRcdCAqIGFueSBhdXRvbWF0aW9uIGN1cnZlcyBzY2hlZHVsZWQgb24gdGhlIHNpZ25hbC5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gZ2V0IHRoZSB0aWNrIGNvdW50IGF0XG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgVGhlIG51bWJlciBvZiB0aWNrcyB3aGljaCBoYXZlIGVsYXBzZWQgYXQgdGhlIHRpbWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gYW55IGF1dG9tYXRpb25zLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5fZ2V0VGlja3NVbnRpbEV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50LCB0aW1lKSB7XG5cdCAgICAgICAgaWYgKGV2ZW50ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGV2ZW50ID0ge1xuXHQgICAgICAgICAgICAgICAgJ3RpY2tzJzogMCxcblx0ICAgICAgICAgICAgICAgICd0aW1lJzogMFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1VuZGVmKGV2ZW50LnRpY2tzKSkge1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXNFdmVudCA9IHRoaXMuX2V2ZW50cy5wcmV2aW91c0V2ZW50KGV2ZW50KTtcblx0ICAgICAgICAgICAgZXZlbnQudGlja3MgPSB0aGlzLl9nZXRUaWNrc1VudGlsRXZlbnQocHJldmlvdXNFdmVudCwgZXZlbnQudGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciB2YWwwID0gdGhpcy5nZXRWYWx1ZUF0VGltZShldmVudC50aW1lKTtcblx0ICAgICAgICB2YXIgdmFsMSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgLy9pZiBpdCdzIHJpZ2h0IG9uIHRoZSBsaW5lLCB0YWtlIHRoZSBwcmV2aW91cyB2YWx1ZVxuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMuZ2V0KHRpbWUpLnRpbWUgPT09IHRpbWUgJiYgdGhpcy5fZXZlbnRzLmdldCh0aW1lKS50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlKSB7XG5cdCAgICAgICAgICAgIHZhbDEgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUgLSB0aGlzLnNhbXBsZVRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gMC41ICogKHRpbWUgLSBldmVudC50aW1lKSAqICh2YWwwICsgdmFsMSkgKyBldmVudC50aWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSB0aWNrIHZhbHVlIGF0IHRoZSB0aW1lLiBUYWtlcyBpbnRvIGFjY291bnRcblx0XHQgKiBhbnkgYXV0b21hdGlvbiBjdXJ2ZXMgc2NoZWR1bGVkIG9uIHRoZSBzaWduYWwuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBUaGUgdGltZSB0byBnZXQgdGhlIHRpY2sgY291bnQgYXRcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgICBUaGUgbnVtYmVyIG9mIHRpY2tzIHdoaWNoIGhhdmUgZWxhcHNlZCBhdCB0aGUgdGltZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBhbnkgYXV0b21hdGlvbnMuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmdldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5fZ2V0VGlja3NVbnRpbEV2ZW50KGV2ZW50LCB0aW1lKSwgMCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIG51bWJlciBvZiB0aWNrcyBmcm9tIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtIHtUaWNrc30gdGlja3MgVGhlIG51bWJlciBvZiB0aWNrcyB0byBjYWxjdWxhdGVcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIGdldCB0aGUgbmV4dCB0aWNrIGZyb21cblx0XHQgKiBAcmV0dXJuIHtTZWNvbmRzfSBUaGUgZHVyYXRpb24gb2YgdGhlIG51bWJlciBvZiB0aWNrcyBmcm9tIHRoZSBnaXZlbiB0aW1lIGluIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZ2V0RHVyYXRpb25PZlRpY2tzID0gZnVuY3Rpb24gKHRpY2tzLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VGljayA9IHRoaXMuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGltZU9mVGljayhjdXJyZW50VGljayArIHRpY2tzKSAtIHRpbWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2l2ZW4gYSB0aWNrLCByZXR1cm5zIHRoZSB0aW1lIHRoYXQgdGljayBvY2N1cnMgYXQuXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tcblx0XHQgKiBAcmV0dXJuIHtUaW1lfSAgICAgIFRoZSB0aW1lIHRoYXQgdGhlIHRpY2sgb2NjdXJzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5nZXRUaW1lT2ZUaWNrID0gZnVuY3Rpb24gKHRpY2spIHtcblx0ICAgICAgICB2YXIgYmVmb3JlID0gdGhpcy5fZXZlbnRzLmdldCh0aWNrLCAndGlja3MnKTtcblx0ICAgICAgICB2YXIgYWZ0ZXIgPSB0aGlzLl9ldmVudHMuZ2V0QWZ0ZXIodGljaywgJ3RpY2tzJyk7XG5cdCAgICAgICAgaWYgKGJlZm9yZSAmJiBiZWZvcmUudGlja3MgPT09IHRpY2spIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGJlZm9yZS50aW1lO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYmVmb3JlICYmIGFmdGVyICYmIGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyICYmIGJlZm9yZS52YWx1ZSAhPT0gYWZ0ZXIudmFsdWUpIHtcblx0ICAgICAgICAgICAgdmFyIHZhbDAgPSB0aGlzLmdldFZhbHVlQXRUaW1lKGJlZm9yZS50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHZhbDEgPSB0aGlzLmdldFZhbHVlQXRUaW1lKGFmdGVyLnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgZGVsdGEgPSAodmFsMSAtIHZhbDApIC8gKGFmdGVyLnRpbWUgLSBiZWZvcmUudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBrID0gTWF0aC5zcXJ0KE1hdGgucG93KHZhbDAsIDIpIC0gMiAqIGRlbHRhICogKGJlZm9yZS50aWNrcyAtIHRpY2spKTtcblx0ICAgICAgICAgICAgdmFyIHNvbDEgPSAoLXZhbDAgKyBrKSAvIGRlbHRhO1xuXHQgICAgICAgICAgICB2YXIgc29sMiA9ICgtdmFsMCAtIGspIC8gZGVsdGE7XG5cdCAgICAgICAgICAgIHJldHVybiAoc29sMSA+IDAgPyBzb2wxIDogc29sMikgKyBiZWZvcmUudGltZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZSkge1xuXHQgICAgICAgICAgICBpZiAoYmVmb3JlLnZhbHVlID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gYmVmb3JlLnRpbWUgKyAodGljayAtIGJlZm9yZS50aWNrcykgLyBiZWZvcmUudmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdGljayAvIHRoaXMuX2luaXRpYWxWYWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ29udmVydCBzb21lIG51bWJlciBvZiB0aWNrcyB0aGVpciB0aGUgZHVyYXRpb24gaW4gc2Vjb25kcyBhY2NvdW50aW5nXG5cdFx0ICogZm9yIGFueSBhdXRvbWF0aW9uIGN1cnZlcyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIG51bWJlciBvZiB0aWNrcyB0byBjb252ZXJ0IHRvIHNlY29uZHMuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gW3doZW49bm93XSAgV2hlbiBhbG9uZyB0aGUgYXV0b21hdGlvbiB0aW1lbGluZSB0byBjb252ZXJ0IHRoZSB0aWNrcy5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlRpbWV9ICAgICAgIFRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIG9mIHRoZSB0aWNrcy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUudGlja3NUb1RpbWUgPSBmdW5jdGlvbiAodGlja3MsIHdoZW4pIHtcblx0ICAgICAgICB3aGVuID0gdGhpcy50b1NlY29uZHMod2hlbik7XG5cdCAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWUodGhpcy5nZXREdXJhdGlvbk9mVGlja3ModGlja3MsIHdoZW4pKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgaW52ZXJzZSBvZiBbdGlja3NUb1RpbWVdKCN0aWNrc3RvdGltZSkuIENvbnZlcnQgYSBkdXJhdGlvbiBpblxuXHRcdCAqIHNlY29uZHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbnVtYmVyIG9mIHRpY2tzIGFjY291bnRpbmcgZm9yIGFueVxuXHRcdCAqIGF1dG9tYXRpb24gY3VydmVzIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIFRoZSB0aW1lIGludGVydmFsIHRvIGNvbnZlcnQgdG8gdGlja3MuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gW3doZW49bm93XSAgICAgV2hlbiBhbG9uZyB0aGUgYXV0b21hdGlvbiB0aW1lbGluZSB0byBjb252ZXJ0IHRoZSB0aWNrcy5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlRpY2tzfSAgICAgICAgICBUaGUgZHVyYXRpb24gaW4gdGlja3MuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnRpbWVUb1RpY2tzID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB3aGVuKSB7XG5cdCAgICAgICAgd2hlbiA9IHRoaXMudG9TZWNvbmRzKHdoZW4pO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHZhciBzdGFydFRpY2tzID0gdGhpcy5nZXRUaWNrc0F0VGltZSh3aGVuKTtcblx0ICAgICAgICB2YXIgZW5kVGlja3MgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHdoZW4gKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpY2tzKGVuZFRpY2tzIC0gc3RhcnRUaWNrcyk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGlja1NpZ25hbDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIFRpbWVsaW5lIFN0YXRlLiBQcm92aWRlcyB0aGUgbWV0aG9kczogPGNvZGU+c2V0U3RhdGVBdFRpbWUoXCJzdGF0ZVwiLCB0aW1lKTwvY29kZT5cblx0XHQgKiAgICAgICAgICBhbmQgPGNvZGU+Z2V0VmFsdWVBdFRpbWUodGltZSk8L2NvZGU+LlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWVsaW5lfVxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gaW5pdGlhbCBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgVGltZWxpbmVTdGF0ZS4gXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIDxjb2RlPnVuZGVmaW5lZDwvY29kZT5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZSA9IGZ1bmN0aW9uIChpbml0aWFsKSB7XG5cdCAgICAgICAgVG9uZS5UaW1lbGluZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBpbml0aWFsIHN0YXRlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5pdGlhbCA9IGluaXRpYWw7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaW1lbGluZVN0YXRlLCBUb25lLlRpbWVsaW5lKTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBzY2hlZHVsZWQgc3RhdGUgc2NoZWR1bGVkIGJlZm9yZSBvciBhdFxuXHRcdCAqICB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm4gIHtTdHJpbmd9ICBUaGUgbmFtZSBvZiB0aGUgc3RhdGUgaW5wdXQgaW4gc2V0U3RhdGVBdFRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLmdldCh0aW1lKTtcblx0ICAgICAgICBpZiAoZXZlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnN0YXRlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbml0aWFsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgc3RhdGUgdG8gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBzdGF0ZSBUaGUgbmFtZSBvZiB0aGUgc3RhdGUgdG8gc2V0LlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmVTdGF0ZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlLnByb3RvdHlwZS5zZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdGltZSkge1xuXHQgICAgICAgIC8vYWxsIHN0YXRlIGNoYW5nZXMgbmVlZCB0byBiZSA+PSB0aGUgcHJldmlvdXMgc3RhdGUgdGltZVxuXHQgICAgICAgIC8vVE9ETyB0aHJvdyBlcnJvciBpZiB0aW1lIDwgdGhlIHByZXZpb3VzIGV2ZW50IHRpbWVcblx0ICAgICAgICB0aGlzLmFkZCh7XG5cdCAgICAgICAgICAgICdzdGF0ZSc6IHN0YXRlLFxuXHQgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBldmVudCBiZWZvcmUgdGhlIHRpbWUgd2l0aCB0aGUgZ2l2ZW4gc3RhdGVcblx0XHQgKiAgQHBhcmFtIHtUb25lLlN0YXRlfSBzdGF0ZSBUaGUgc3RhdGUgdG8gbG9vayBmb3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gY2hlY2sgYmVmb3JlXHRcdFx0XG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBUaGUgZXZlbnQgd2l0aCB0aGUgZ2l2ZW4gc3RhdGUgYmVmb3JlIHRoZSB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUucHJvdG90eXBlLmdldExhc3RTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4OyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl90aW1lbGluZVtpXTtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXRlID09PSBzdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGV2ZW50IGFmdGVyIHRoZSB0aW1lIHdpdGggdGhlIGdpdmVuIHN0YXRlXG5cdFx0ICogIEBwYXJhbSB7VG9uZS5TdGF0ZX0gc3RhdGUgVGhlIHN0YXRlIHRvIGxvb2sgZm9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGNoZWNrIGZyb21cblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIFRoZSBldmVudCB3aXRoIHRoZSBnaXZlbiBzdGF0ZSBhZnRlciB0aGUgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlLnByb3RvdHlwZS5nZXROZXh0U3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4OyBpIDwgdGhpcy5fdGltZWxpbmUubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3RpbWVsaW5lW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXRlID09PSBzdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaW1lbGluZVN0YXRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFVzZXMgW1RvbmUuVGlja1NpZ25hbF0oVGlja1NpZ25hbCkgdG8gdHJhY2sgZWxhcHNlZCB0aWNrcyB3aXRoXG5cdFx0ICogIFx0XHRjb21wbGV4IGF1dG9tYXRpb24gY3VydmVzLlxuXHRcdCAqXG5cdFx0ICogXHRAY29uc3RydWN0b3Jcblx0ICAgICAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBpbml0aWFsIGZyZXF1ZW5jeSB0aGF0IHRoZSBzaWduYWwgdGlja3MgYXRcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmcmVxdWVuY3knXSwgVG9uZS5UaWNrU291cmNlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBzaG91bGQgYmUgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSAge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlRpY2tTaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdmcmVxdWVuY3knKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3RhdGUgdGltZWxpbmVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZVN0YXRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG5ldyBUb25lLlRpbWVsaW5lU3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG9mZnNldCB2YWx1ZXMgb2YgdGhlIHRpY2tzXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0ID0gbmV3IFRvbmUuVGltZWxpbmUoKTtcblx0ICAgICAgICAvL2FkZCB0aGUgZmlyc3QgZXZlbnRcblx0ICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKDAsIDApO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGlja1NvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5kZWZhdWx0cyA9IHsgJ2ZyZXF1ZW5jeSc6IDEgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIsIFwic3RvcHBlZFwiIG9yIFwicGF1c2VkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVGlja1NvdXJjZSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgY2xvY2sgYXQgdGhlIGdpdmVuIHRpbWUuIE9wdGlvbmFsbHkgcGFzcyBpbiBhbiBvZmZzZXRcblx0XHQgKiAgb2Ygd2hlcmUgdG8gc3RhcnQgdGhlIHRpY2sgY291bnRlciBmcm9tLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIHRpbWUgICAgVGhlIHRpbWUgdGhlIGNsb2NrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge1RpY2tzPTB9IG9mZnNldCBUaGUgbnVtYmVyIG9mIHRpY2tzIHRvIHN0YXJ0IHRoZSBzb3VyY2UgYXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuVGlja1NvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RhcnRlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChvZmZzZXQpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKG9mZnNldCwgdGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGNsb2NrLiBTdG9wcGluZyB0aGUgY2xvY2sgcmVzZXRzIHRoZSB0aWNrIGNvdW50ZXIgdG8gMC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogY2xvY2suc3RvcCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy9jYW5jZWwgdGhlIHByZXZpb3VzIHN0b3Bcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RvcHBlZCkge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQodGltZSk7XG5cdCAgICAgICAgICAgIGlmIChldmVudC50aW1lID4gMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdGlja09mZnNldC5jYW5jZWwoZXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwoZXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGF1c2UgdGhlIGNsb2NrLiBQYXVzaW5nIGRvZXMgbm90IHJlc2V0IHRoZSB0aWNrIGNvdW50ZXIuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBjbG9jayBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuUGF1c2VkLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBzdGFydC9zdG9wL3BhdXNlIGFuZCBzZXRUaWNrQXRUaW1lIGV2ZW50cyBzY2hlZHVsZWQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRvIGNsZWFyIHRoZSBldmVudHMgYWZ0ZXJcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldC5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBlbGFwc2VkIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBnZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgIFRoZSBudW1iZXIgb2YgdGlja3Ncblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZ2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgc3RvcEV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0TGFzdFN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgLy90aGlzIGV2ZW50IGFsbG93cyBmb3JFYWNoQmV0d2VlbiB0byBpdGVyYXRlIHVudGlsIHRoZSBjdXJyZW50IHRpbWVcblx0ICAgICAgICB2YXIgdG1wRXZlbnQgPSB7XG5cdCAgICAgICAgICAgIHN0YXRlOiBUb25lLlN0YXRlLlBhdXNlZCxcblx0ICAgICAgICAgICAgdGltZTogdGltZVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuYWRkKHRtcEV2ZW50KTtcblx0ICAgICAgICAvL2tlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIG9mZnNldCBldmVudFxuXHQgICAgICAgIHZhciBsYXN0U3RhdGUgPSBzdG9wRXZlbnQ7XG5cdCAgICAgICAgdmFyIGVsYXBzZWRUaWNrcyA9IDA7XG5cdCAgICAgICAgLy9pdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBldmVudHMgc2luY2UgdGhlIGxhc3Qgc3RvcFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hCZXR3ZWVuKHN0b3BFdmVudC50aW1lLCB0aW1lICsgdGhpcy5zYW1wbGVUaW1lLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICB2YXIgcGVyaW9kU3RhcnRUaW1lID0gbGFzdFN0YXRlLnRpbWU7XG5cdCAgICAgICAgICAgIC8vaWYgdGhlcmUgaXMgYW4gb2Zmc2V0IGV2ZW50IGluIHRoaXMgcGVyaW9kIHVzZSB0aGF0XG5cdCAgICAgICAgICAgIHZhciBvZmZzZXRFdmVudCA9IHRoaXMuX3RpY2tPZmZzZXQuZ2V0KGUudGltZSk7XG5cdCAgICAgICAgICAgIGlmIChvZmZzZXRFdmVudC50aW1lID49IGxhc3RTdGF0ZS50aW1lKSB7XG5cdCAgICAgICAgICAgICAgICBlbGFwc2VkVGlja3MgPSBvZmZzZXRFdmVudC50aWNrcztcblx0ICAgICAgICAgICAgICAgIHBlcmlvZFN0YXJ0VGltZSA9IG9mZnNldEV2ZW50LnRpbWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKGxhc3RTdGF0ZS5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIGUuc3RhdGUgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgZWxhcHNlZFRpY2tzICs9IHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKGUudGltZSkgLSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShwZXJpb2RTdGFydFRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGxhc3RTdGF0ZSA9IGU7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgdGVtcG9yYXJ5IGV2ZW50XG5cdCAgICAgICAgdGhpcy5fc3RhdGUucmVtb3ZlKHRtcEV2ZW50KTtcblx0ICAgICAgICAvL3JldHVybiB0aGUgdGlja3Ncblx0ICAgICAgICByZXR1cm4gZWxhcHNlZFRpY2tzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC4gU3RhcnRzIGNvdW50aW5nIGF0IDBcblx0XHQgKiAgYW5kIGluY3JlbWVudHMgYWZ0ZXIgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkLiBSZXR1cm5zIC0xIHdoZW4gc3RvcHBlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVGlja1NvdXJjZSNcblx0XHQgKiAgQG5hbWUgdGlja3Ncblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUsICd0aWNrcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGlja3NBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUodCwgdGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgc2luY2UgdGlja3M9MCB0aGF0IHRoZSBUaWNrU291cmNlIGhhcyBiZWVuIHJ1bm5pbmcuIEFjY291bnRzXG5cdFx0ICogIGZvciB0ZW1wbyBjdXJ2ZXNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVGlja1NvdXJjZSNcblx0XHQgKiAgQG5hbWUgc2Vjb25kc1xuXHRcdCAqICBAdHlwZSB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLCAnc2Vjb25kcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2Vjb25kc0F0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHMpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuZnJlcXVlbmN5LnRpbWVUb1RpY2tzKHMsIG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUodGlja3MsIG5vdyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBlbGFwc2VkIHNlY29uZHMgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGdldCB0aGUgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfSAgVGhlIG51bWJlciBvZiBlbGFwc2VkIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZ2V0U2Vjb25kc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBzdG9wRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXRMYXN0U3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICAvL3RoaXMgZXZlbnQgYWxsb3dzIGZvckVhY2hCZXR3ZWVuIHRvIGl0ZXJhdGUgdW50aWwgdGhlIGN1cnJlbnQgdGltZVxuXHQgICAgICAgIHZhciB0bXBFdmVudCA9IHtcblx0ICAgICAgICAgICAgc3RhdGU6IFRvbmUuU3RhdGUuUGF1c2VkLFxuXHQgICAgICAgICAgICB0aW1lOiB0aW1lXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5hZGQodG1wRXZlbnQpO1xuXHQgICAgICAgIC8va2VlcCB0cmFjayBvZiB0aGUgcHJldmlvdXMgb2Zmc2V0IGV2ZW50XG5cdCAgICAgICAgdmFyIGxhc3RTdGF0ZSA9IHN0b3BFdmVudDtcblx0ICAgICAgICB2YXIgZWxhcHNlZFNlY29uZHMgPSAwO1xuXHQgICAgICAgIC8vaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgZXZlbnRzIHNpbmNlIHRoZSBsYXN0IHN0b3Bcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdG9wRXZlbnQudGltZSwgdGltZSArIHRoaXMuc2FtcGxlVGltZSwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgdmFyIHBlcmlvZFN0YXJ0VGltZSA9IGxhc3RTdGF0ZS50aW1lO1xuXHQgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGFuIG9mZnNldCBldmVudCBpbiB0aGlzIHBlcmlvZCB1c2UgdGhhdFxuXHQgICAgICAgICAgICB2YXIgb2Zmc2V0RXZlbnQgPSB0aGlzLl90aWNrT2Zmc2V0LmdldChlLnRpbWUpO1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0RXZlbnQudGltZSA+PSBsYXN0U3RhdGUudGltZSkge1xuXHQgICAgICAgICAgICAgICAgZWxhcHNlZFNlY29uZHMgPSBvZmZzZXRFdmVudC5zZWNvbmRzO1xuXHQgICAgICAgICAgICAgICAgcGVyaW9kU3RhcnRUaW1lID0gb2Zmc2V0RXZlbnQudGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAobGFzdFN0YXRlLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgZS5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICBlbGFwc2VkU2Vjb25kcyArPSBlLnRpbWUgLSBwZXJpb2RTdGFydFRpbWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbGFzdFN0YXRlID0gZTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIC8vcmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZXZlbnRcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5yZW1vdmUodG1wRXZlbnQpO1xuXHQgICAgICAgIC8vcmV0dXJuIHRoZSB0aWNrc1xuXHQgICAgICAgIHJldHVybiBlbGFwc2VkU2Vjb25kcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTZXQgdGhlIGNsb2NrJ3MgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIHZhbHVlIHRvIHNldFxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gc2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VG9uZS5UaWNrU291cmNlfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnNldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpY2tzLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuYWRkKHtcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lLFxuXHQgICAgICAgICAgICAndGlja3MnOiB0aWNrcyxcblx0ICAgICAgICAgICAgJ3NlY29uZHMnOiB0aGlzLmZyZXF1ZW5jeS5nZXREdXJhdGlvbk9mVGlja3ModGlja3MsIHRpbWUpXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHNjaGVkdWxlZCBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJuICB7U3RyaW5nfSAgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIGlucHV0IGluIHNldFN0YXRlQXRUaW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zdGFydChcIiswLjFcIik7XG5cdFx0ICogc291cmNlLmdldFN0YXRlQXRUaW1lKFwiKzAuMVwiKTsgLy9yZXR1cm5zIFwic3RhcnRlZFwiXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgdGltZSBvZiB0aGUgZ2l2ZW4gdGljay4gVGhlIHNlY29uZCBhcmd1bWVudFxuXHRcdCAqIGlzIHdoZW4gdG8gdGVzdCBiZWZvcmUuIFNpbmNlIHRpY2tzIGNhbiBiZSBzZXQgKHdpdGggc2V0VGlja3NBdFRpbWUpXG5cdFx0ICogdGhlcmUgbWF5IGJlIG11bHRpcGxlIHRpbWVzIGZvciBhIGdpdmVuIHRpY2sgdmFsdWUuIFxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgdGljayBudW1iZXIuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IGJlZm9yZSBXaGVuIHRvIG1lYXN1cmUgdGhlIHRpY2sgdmFsdWUgZnJvbS4gXG5cdFx0ICogQHJldHVybiB7VGltZX0gICAgICAgVGhlIHRpbWUgb2YgdGhlIHRpY2tcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZ2V0VGltZU9mVGljayA9IGZ1bmN0aW9uICh0aWNrLCBiZWZvcmUpIHtcblx0ICAgICAgICBiZWZvcmUgPSBUb25lLmRlZmF1bHRBcmcoYmVmb3JlLCB0aGlzLm5vdygpKTtcblx0ICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fdGlja09mZnNldC5nZXQoYmVmb3JlKTtcblx0ICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQoYmVmb3JlKTtcblx0ICAgICAgICB2YXIgc3RhcnRUaW1lID0gTWF0aC5tYXgob2Zmc2V0LnRpbWUsIGV2ZW50LnRpbWUpO1xuXHQgICAgICAgIHZhciBhYnNvbHV0ZVRpY2tzID0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUoc3RhcnRUaW1lKSArIHRpY2sgLSBvZmZzZXQudGlja3M7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZnJlcXVlbmN5LmdldFRpbWVPZlRpY2soYWJzb2x1dGVUaWNrcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludm9rZSB0aGUgY2FsbGJhY2sgZXZlbnQgYXQgYWxsIHNjaGVkdWxlZCB0aWNrcyBiZXR3ZWVuIHRoZSBcblx0XHQgKiAgc3RhcnQgdGltZSBhbmQgdGhlIGVuZCB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICAgIHN0YXJ0VGltZSAgVGhlIGJlZ2lubmluZyBvZiB0aGUgc2VhcmNoIHJhbmdlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICAgIGVuZFRpbWUgICAgVGhlIGVuZCBvZiB0aGUgc2VhcmNoIHJhbmdlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPFRpbWUsVGlja3M+fSAgY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZWFjaCB0aWNrXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlRpY2tTb3VyY2V9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZm9yRWFjaFRpY2tCZXR3ZWVuID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgZW5kVGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL29ubHkgaXRlcmF0ZSB0aHJvdWdoIHRoZSBzZWN0aW9ucyB3aGVyZSBpdCBpcyBcInN0YXJ0ZWRcIlxuXHQgICAgICAgIHZhciBsYXN0U3RhdGVFdmVudCA9IHRoaXMuX3N0YXRlLmdldChzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hCZXR3ZWVuKHN0YXJ0VGltZSwgZW5kVGltZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChsYXN0U3RhdGVFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIGV2ZW50LnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZm9yRWFjaFRpY2tCZXR3ZWVuKE1hdGgubWF4KGxhc3RTdGF0ZUV2ZW50LnRpbWUsIHN0YXJ0VGltZSksIGV2ZW50LnRpbWUgLSB0aGlzLnNhbXBsZVRpbWUsIGNhbGxiYWNrKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBsYXN0U3RhdGVFdmVudCA9IGV2ZW50O1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gTWF0aC5tYXgobGFzdFN0YXRlRXZlbnQudGltZSwgc3RhcnRUaW1lKTtcblx0ICAgICAgICBpZiAobGFzdFN0YXRlRXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiB0aGlzLl9zdGF0ZSkge1xuXHQgICAgICAgICAgICAvL2ZpZ3VyZSBvdXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZnJlcXVlbmN5IHRpY2tzIGFuZCB0aGUgXG5cdCAgICAgICAgICAgIHZhciBzdGFydFRpY2tzID0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUoc3RhcnRUaW1lKTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzQXRTdGFydCA9IHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKGxhc3RTdGF0ZUV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgZGlmZiA9IHN0YXJ0VGlja3MgLSB0aWNrc0F0U3RhcnQ7XG5cdCAgICAgICAgICAgIHZhciBvZmZzZXQgPSBkaWZmICUgMTtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gMCkge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMSAtIG9mZnNldDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YXIgbmV4dFRpY2tUaW1lID0gdGhpcy5mcmVxdWVuY3kuZ2V0VGltZU9mVGljayhzdGFydFRpY2tzICsgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgdmFyIGVycm9yID0gbnVsbDtcblx0ICAgICAgICAgICAgd2hpbGUgKG5leHRUaWNrVGltZSA8IGVuZFRpbWUgJiYgdGhpcy5fc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobmV4dFRpY2tUaW1lLCBNYXRoLnJvdW5kKHRoaXMuZ2V0VGlja3NBdFRpbWUobmV4dFRpY2tUaW1lKSkpO1xuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIG5leHRUaWNrVGltZSArPSB0aGlzLmZyZXF1ZW5jeS5nZXREdXJhdGlvbk9mVGlja3MoMSwgbmV4dFRpY2tUaW1lKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoZXJyb3IpIHtcblx0ICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGlja1NvdXJjZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIHNhbXBsZSBhY2N1cmF0ZSBjbG9jayB3aGljaCBwcm92aWRlcyBhIGNhbGxiYWNrIGF0IHRoZSBnaXZlbiByYXRlLlxuXHRcdCAqICAgICAgICAgIFdoaWxlIHRoZSBjYWxsYmFjayBpcyBub3Qgc2FtcGxlLWFjY3VyYXRlIChpdCBpcyBzdGlsbCBzdXNjZXB0aWJsZSB0b1xuXHRcdCAqICAgICAgICAgIGxvb3NlIEpTIHRpbWluZyksIHRoZSB0aW1lIHBhc3NlZCBpbiBhcyB0aGUgYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrXG5cdFx0ICogICAgICAgICAgaXMgcHJlY2lzZS4gRm9yIG1vc3QgYXBwbGljYXRpb25zLCBpdCBpcyBiZXR0ZXIgdG8gdXNlIFRvbmUuVHJhbnNwb3J0XG5cdFx0ICogICAgICAgICAgaW5zdGVhZCBvZiB0aGUgQ2xvY2sgYnkgaXRzZWxmIHNpbmNlIHlvdSBjYW4gc3luY2hyb25pemUgbXVsdGlwbGUgY2FsbGJhY2tzLlxuXHRcdCAqXG5cdFx0ICogXHRAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW1pdHRlcn1cblx0XHQgKiBcdEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdpdGggdGhlIHRpbWUgb2YgdGhlIGF1ZGlvIGV2ZW50XG5cdFx0ICogXHRAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSByYXRlIG9mIHRoZSBjYWxsYmFja1xuXHRcdCAqIFx0QGV4YW1wbGVcblx0XHQgKiAvL3RoZSBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgYXBwcm94aW1hdGVseSBvbmNlIGEgc2Vjb25kXG5cdFx0ICogLy9hbmQgd2lsbCBwcmludCB0aGUgdGltZSBleGFjdGx5IG9uY2UgYSBzZWNvbmQgYXBhcnQuXG5cdFx0ICogdmFyIGNsb2NrID0gbmV3IFRvbmUuQ2xvY2soZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHRjb25zb2xlLmxvZyh0aW1lKTtcblx0XHQgKiB9LCAxKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0sIFRvbmUuQ2xvY2spO1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBpbnZva2UgYXQgdGhlIHNjaGVkdWxlZCB0aWNrLlxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbmV4dCB0aW1lIHRoZSBjYWxsYmFjayBpcyBzY2hlZHVsZWQuXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0aWNrIGNvdW50ZXJcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVGlja1NvdXJjZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZSA9IG5ldyBUb25lLlRpY2tTb3VyY2Uob3B0aW9ucy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsYXN0IHRpbWUgdGhlIGxvb3AgY2FsbGJhY2sgd2FzIGludm9rZWRcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sYXN0VXBkYXRlID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmF0ZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gc2hvdWxkIGJlIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtCUE19XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl90aWNrU291cmNlLmZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHN0YXRlIHRpbWVsaW5lXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgLy9hZGQgYW4gaW5pdGlhbCBzdGF0ZVxuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvb3AgZnVuY3Rpb24gYm91bmQgdG8gaXRzIGNvbnRleHQuXG5cdFx0XHQgKiAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gcmVtb3ZlIHRoZSBldmVudCBpbiB0aGUgZW5kLlxuXHRcdFx0ICogIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYm91bmRMb29wID0gdGhpcy5fbG9vcC5iaW5kKHRoaXMpO1xuXHQgICAgICAgIC8vYmluZCBhIGNhbGxiYWNrIHRvIHRoZSB3b3JrZXIgdGhyZWFkXG5cdCAgICAgICAgdGhpcy5jb250ZXh0Lm9uKCd0aWNrJywgdGhpcy5fYm91bmRMb29wKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNsb2NrLCBUb25lLkVtaXR0ZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdjYWxsYmFjayc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIsIFwic3RvcHBlZFwiIG9yIFwicGF1c2VkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ2xvY2sjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DbG9jay5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBjbG9jayBhdCB0aGUgZ2l2ZW4gdGltZS4gT3B0aW9uYWxseSBwYXNzIGluIGFuIG9mZnNldFxuXHRcdCAqICBvZiB3aGVyZSB0byBzdGFydCB0aGUgdGljayBjb3VudGVyIGZyb20uXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgdGltZSAgICBUaGUgdGltZSB0aGUgY2xvY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSAge1RpY2tzPX0gIG9mZnNldCAgV2hlcmUgdGhlIHRpY2sgY291bnRlciBzdGFydHMgY291bnRpbmcgZnJvbS5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ2xvY2t9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5zdGFydCh0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICBpZiAodGltZSA8IHRoaXMuX2xhc3RVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RhcnQnLCB0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBjbG9jay4gU3RvcHBpbmcgdGhlIGNsb2NrIHJlc2V0cyB0aGUgdGljayBjb3VudGVyIHRvIDAuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBjbG9jayBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2xvY2t9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBjbG9jay5zdG9wKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5zdG9wKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aW1lIDwgdGhpcy5fbGFzdFVwZGF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0b3AnLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhdXNlIHRoZSBjbG9jay4gUGF1c2luZyBkb2VzIG5vdCByZXNldCB0aGUgdGljayBjb3VudGVyLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNsb2NrfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuUGF1c2VkLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5wYXVzZSh0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9sYXN0VXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3BhdXNlJywgdGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkLiBTdGFydHMgY291bnRpbmcgYXQgMFxuXHRcdCAqICBhbmQgaW5jcmVtZW50cyBhZnRlciB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNsb2NrLnByb3RvdHlwZSwgJ3RpY2tzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMuZ2V0VGlja3NBdFRpbWUodGhpcy5ub3coKSkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLnRpY2tzID0gdDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSBzaW5jZSB0aWNrcz0wIHRoYXQgdGhlIENsb2NrIGhhcyBiZWVuIHJ1bm5pbmcuIEFjY291bnRzXG5cdFx0ICogIGZvciB0ZW1wbyBjdXJ2ZXNcblx0XHQgKiAgQHR5cGUge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DbG9jay5wcm90b3R5cGUsICdzZWNvbmRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja1NvdXJjZS5zZWNvbmRzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocykge1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLnNlY29uZHMgPSBzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZWxhcHNlZCBzZWNvbmRzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBnZXQgdGhlIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc30gIFRoZSBudW1iZXIgb2YgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5nZXRTZWNvbmRzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGlja1NvdXJjZS5nZXRTZWNvbmRzQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFNldCB0aGUgY2xvY2sncyB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgdmFsdWUgdG8gc2V0XG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBzZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLkNsb2NrfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5zZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aWNrcywgdGltZSkge1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc2V0VGlja3NBdFRpbWUodGlja3MsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgY2xvY2sncyB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIGdldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgICBUaGUgdGljayB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLmdldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGlja1NvdXJjZS5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIHRpbWUgb2YgdGhlIG5leHQgdGlja1xuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgdGljayBudW1iZXIuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gYmVmb3JlIFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuQ2xvY2t9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLm5leHRUaWNrVGltZSA9IGZ1bmN0aW9uIChvZmZzZXQsIHdoZW4pIHtcblx0ICAgICAgICB3aGVuID0gdGhpcy50b1NlY29uZHMod2hlbik7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRUaWNrID0gdGhpcy5nZXRUaWNrc0F0VGltZSh3aGVuKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGlja1NvdXJjZS5nZXRUaW1lT2ZUaWNrKGN1cnJlbnRUaWNrICsgb2Zmc2V0LCB3aGVuKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNjaGVkdWxpbmcgbG9vcC5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLl9sb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBzdGFydFRpbWUgPSB0aGlzLl9sYXN0VXBkYXRlO1xuXHQgICAgICAgIHZhciBlbmRUaW1lID0gdGhpcy5ub3coKTtcblx0ICAgICAgICB0aGlzLl9sYXN0VXBkYXRlID0gZW5kVGltZTtcblx0ICAgICAgICBpZiAoc3RhcnRUaW1lICE9PSBlbmRUaW1lKSB7XG5cdCAgICAgICAgICAgIC8vdGhlIHN0YXRlIGNoYW5nZSBldmVudHNcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RhcnRUaW1lLCBlbmRUaW1lLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICAgICAgc3dpdGNoIChlLnN0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICBjYXNlIFRvbmUuU3RhdGUuU3RhcnRlZDpcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fdGlja1NvdXJjZS5nZXRUaWNrc0F0VGltZShlLnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RhcnQnLCBlLnRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlIFRvbmUuU3RhdGUuU3RvcHBlZDpcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoZS50aW1lICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RvcCcsIGUudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSBUb25lLlN0YXRlLlBhdXNlZDpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3BhdXNlJywgZS50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAgICAgLy90aGUgdGljayBjYWxsYmFja3Ncblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5mb3JFYWNoVGlja0JldHdlZW4oc3RhcnRUaW1lLCBlbmRUaW1lLCBmdW5jdGlvbiAodGltZSwgdGlja3MpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgdGlja3MpO1xuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgc2NoZWR1bGVkIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm4gIHtTdHJpbmd9ICBUaGUgbmFtZSBvZiB0aGUgc3RhdGUgaW5wdXQgaW4gc2V0U3RhdGVBdFRpbWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogY2xvY2suc3RhcnQoXCIrMC4xXCIpO1xuXHRcdCAqIGNsb2NrLmdldFN0YXRlQXRUaW1lKFwiKzAuMVwiKTsgLy9yZXR1cm5zIFwic3RhcnRlZFwiXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5nZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2xvY2t9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0Lm9mZigndGljaycsIHRoaXMuX2JvdW5kTG9vcCk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9ib3VuZExvb3AgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrID0gSW5maW5pdHk7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DbG9jaztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFNpbWlsYXIgdG8gVG9uZS5UaW1lbGluZSwgYnV0IGFsbCBldmVudHMgcmVwcmVzZW50XG5cdFx0ICogICAgICAgICBpbnRlcnZhbHMgd2l0aCBib3RoIFwidGltZVwiIGFuZCBcImR1cmF0aW9uXCIgdGltZXMuIFRoZVxuXHRcdCAqICAgICAgICAgZXZlbnRzIGFyZSBwbGFjZWQgaW4gYSB0cmVlIHN0cnVjdHVyZSBvcHRpbWl6ZWRcblx0XHQgKiAgICAgICAgIGZvciBxdWVyeWluZyBhbiBpbnRlcnNlY3Rpb24gcG9pbnQgd2l0aCB0aGUgdGltZWxpbmVcblx0XHQgKiAgICAgICAgIGV2ZW50cy4gSW50ZXJuYWxseSB1c2VzIGFuIFtJbnRlcnZhbCBUcmVlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JbnRlcnZhbF90cmVlKVxuXHRcdCAqICAgICAgICAgdG8gcmVwcmVzZW50IHRoZSBkYXRhLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJvb3Qgbm9kZSBvZiB0aGUgaW50ZXZhbCB0cmVlXG5cdFx0XHQgKiAgQHR5cGUgIHtJbnRlcnZhbE5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Jvb3QgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEtlZXAgdHJhY2sgb2YgdGhlIGxlbmd0aCBvZiB0aGUgdGltZWxpbmUuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xlbmd0aCA9IDA7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5JbnRlcnZhbFRpbWVsaW5lKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZXZlbnQgdG8gYWRkIHRvIHRoZSB0aW1lbGluZS4gQWxsIGV2ZW50cyBtdXN0XG5cdFx0ICogIGhhdmUgYSB0aW1lIGFuZCBkdXJhdGlvbiB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R9ICBldmVudCAgVGhlIGV2ZW50IHRvIGFkZCB0byB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHJldHVybiAge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihldmVudC50aW1lKSB8fCBUb25lLmlzVW5kZWYoZXZlbnQuZHVyYXRpb24pKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5JbnRlcnZhbFRpbWVsaW5lOiBldmVudHMgbXVzdCBoYXZlIHRpbWUgYW5kIGR1cmF0aW9uIHBhcmFtZXRlcnMnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZXZlbnQudGltZSA9IGV2ZW50LnRpbWUudmFsdWVPZigpO1xuXHQgICAgICAgIHZhciBub2RlID0gbmV3IEludGVydmFsTm9kZShldmVudC50aW1lLCBldmVudC50aW1lICsgZXZlbnQuZHVyYXRpb24sIGV2ZW50KTtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yb290ID0gbm9kZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9yb290Lmluc2VydChub2RlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fbGVuZ3RoKys7XG5cdCAgICAgICAgLy8gUmVzdHJ1Y3R1cmUgdHJlZSB0byBiZSBiYWxhbmNlZFxuXHQgICAgICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIG5vZGUudXBkYXRlSGVpZ2h0KCk7XG5cdCAgICAgICAgICAgIG5vZGUudXBkYXRlTWF4KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYmFsYW5jZShub2RlKTtcblx0ICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50O1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGFuIGV2ZW50IGZyb20gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R9ICBldmVudCAgVGhlIGV2ZW50IHRvIHJlbW92ZSBmcm9tIHRoZSB0aW1lbGluZVxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnNlYXJjaChldmVudC50aW1lLCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHJlc3VsdHNbaV07XG5cdCAgICAgICAgICAgICAgICBpZiAobm9kZS5ldmVudCA9PT0gZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVOb2RlKG5vZGUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xlbmd0aC0tO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuSW50ZXJ2YWxUaW1lbGluZSNcblx0XHQgKiAgQG5hbWUgbGVuZ3RoXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZW5ndGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGV2ZW50cyB3aG9zZSB0aW1lIHRpbWUgaXMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkludGVydmFsVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5mb3JFYWNoRnJvbShhZnRlciwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHRoaXMucmVtb3ZlKGV2ZW50KTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIHJvb3Qgbm9kZSBhcyB0aGUgZ2l2ZW4gbm9kZVxuXHRcdCAqICBAcGFyYW0ge0ludGVydmFsTm9kZX0gbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fc2V0Um9vdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgdGhpcy5fcm9vdCA9IG5vZGU7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5wYXJlbnQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVwbGFjZSB0aGUgcmVmZXJlbmNlcyB0byB0aGUgbm9kZSBpbiB0aGUgbm9kZSdzIHBhcmVudFxuXHRcdCAqICB3aXRoIHRoZSByZXBsYWNlbWVudCBub2RlLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIHJlcGxhY2VtZW50XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9yZXBsYWNlTm9kZUluUGFyZW50ID0gZnVuY3Rpb24gKG5vZGUsIHJlcGxhY2VtZW50KSB7XG5cdCAgICAgICAgaWYgKG5vZGUucGFyZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGlmIChub2RlLmlzTGVmdENoaWxkKCkpIHtcblx0ICAgICAgICAgICAgICAgIG5vZGUucGFyZW50LmxlZnQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIG5vZGUucGFyZW50LnJpZ2h0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fcmViYWxhbmNlKG5vZGUucGFyZW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSb290KHJlcGxhY2VtZW50KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSB0aGUgbm9kZSBmcm9tIHRoZSB0cmVlIGFuZCByZXBsYWNlIGl0IHdpdGhcblx0XHQgKiAgYSBzdWNjZXNzb3Igd2hpY2ggZm9sbG93cyB0aGUgc2NoZW1hLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9yZW1vdmVOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAobm9kZS5sZWZ0ID09PSBudWxsICYmIG5vZGUucmlnaHQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmVwbGFjZU5vZGVJblBhcmVudChub2RlLCBudWxsKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKG5vZGUucmlnaHQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmVwbGFjZU5vZGVJblBhcmVudChub2RlLCBub2RlLmxlZnQpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobm9kZS5sZWZ0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgbm9kZS5yaWdodCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIGJhbGFuY2UgPSBub2RlLmdldEJhbGFuY2UoKTtcblx0ICAgICAgICAgICAgdmFyIHJlcGxhY2VtZW50LCB0ZW1wO1xuXHQgICAgICAgICAgICBpZiAoYmFsYW5jZSA+IDApIHtcblx0ICAgICAgICAgICAgICAgIGlmIChub2RlLmxlZnQucmlnaHQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IG5vZGUubGVmdDtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5yaWdodCA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IG5vZGUubGVmdC5yaWdodDtcblx0ICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVwbGFjZW1lbnQucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC5yaWdodDtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucGFyZW50LnJpZ2h0ID0gcmVwbGFjZW1lbnQubGVmdDtcblx0ICAgICAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQucGFyZW50O1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LmxlZnQgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUucmlnaHQubGVmdCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQubGVmdCA9IG5vZGUubGVmdDtcblx0ICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5yaWdodC5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgd2hpbGUgKHJlcGxhY2VtZW50LmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LmxlZnQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5wYXJlbnQgPSByZXBsYWNlbWVudC5wYXJlbnQ7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5wYXJlbnQubGVmdCA9IHJlcGxhY2VtZW50LnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgdGVtcCA9IHJlcGxhY2VtZW50LnBhcmVudDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LmxlZnQgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5yaWdodCA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAobm9kZS5pc0xlZnRDaGlsZCgpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQubGVmdCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5yaWdodCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2V0Um9vdChyZXBsYWNlbWVudCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy8gdGhpcy5fcmVwbGFjZU5vZGVJblBhcmVudChub2RlLCByZXBsYWNlbWVudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYmFsYW5jZSh0ZW1wKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgbm9kZS5kaXNwb3NlKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJvdGF0ZSB0aGUgdHJlZSB0byB0aGUgbGVmdFxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9yb3RhdGVMZWZ0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cdCAgICAgICAgdmFyIGlzTGVmdENoaWxkID0gbm9kZS5pc0xlZnRDaGlsZCgpO1xuXHQgICAgICAgIC8vIE1ha2Ugbm9kZS5yaWdodCB0aGUgbmV3IHJvb3Qgb2YgdGhpcyBzdWIgdHJlZSAoaW5zdGVhZCBvZiBub2RlKVxuXHQgICAgICAgIHZhciBwaXZvdE5vZGUgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgIG5vZGUucmlnaHQgPSBwaXZvdE5vZGUubGVmdDtcblx0ICAgICAgICBwaXZvdE5vZGUubGVmdCA9IG5vZGU7XG5cdCAgICAgICAgaWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBpZiAoaXNMZWZ0Q2hpbGQpIHtcblx0ICAgICAgICAgICAgICAgIHBhcmVudC5sZWZ0ID0gcGl2b3ROb2RlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcGFyZW50LnJpZ2h0ID0gcGl2b3ROb2RlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0Um9vdChwaXZvdE5vZGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUm90YXRlIHRoZSB0cmVlIHRvIHRoZSByaWdodFxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9yb3RhdGVSaWdodCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50O1xuXHQgICAgICAgIHZhciBpc0xlZnRDaGlsZCA9IG5vZGUuaXNMZWZ0Q2hpbGQoKTtcblx0ICAgICAgICAvLyBNYWtlIG5vZGUubGVmdCB0aGUgbmV3IHJvb3Qgb2YgdGhpcyBzdWIgdHJlZSAoaW5zdGVhZCBvZiBub2RlKVxuXHQgICAgICAgIHZhciBwaXZvdE5vZGUgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgbm9kZS5sZWZ0ID0gcGl2b3ROb2RlLnJpZ2h0O1xuXHQgICAgICAgIHBpdm90Tm9kZS5yaWdodCA9IG5vZGU7XG5cdCAgICAgICAgaWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBpZiAoaXNMZWZ0Q2hpbGQpIHtcblx0ICAgICAgICAgICAgICAgIHBhcmVudC5sZWZ0ID0gcGl2b3ROb2RlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcGFyZW50LnJpZ2h0ID0gcGl2b3ROb2RlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0Um9vdChwaXZvdE5vZGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQmFsYW5jZSB0aGUgQlNUXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JlYmFsYW5jZSA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgdmFyIGJhbGFuY2UgPSBub2RlLmdldEJhbGFuY2UoKTtcblx0ICAgICAgICBpZiAoYmFsYW5jZSA+IDEpIHtcblx0ICAgICAgICAgICAgaWYgKG5vZGUubGVmdC5nZXRCYWxhbmNlKCkgPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVMZWZ0KG5vZGUubGVmdCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVSaWdodChub2RlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAoYmFsYW5jZSA8IC0xKSB7XG5cdCAgICAgICAgICAgIGlmIChub2RlLnJpZ2h0LmdldEJhbGFuY2UoKSA+IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZVJpZ2h0KG5vZGUucmlnaHQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlTGVmdChub2RlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IGFuIGV2ZW50IHdob3NlIHRpbWUgYW5kIGR1cmF0aW9uIHNwYW4gdGhlIGdpdmUgdGltZS4gV2lsbFxuXHRcdCAqICByZXR1cm4gdGhlIG1hdGNoIHdob3NlIFwidGltZVwiIHZhbHVlIGlzIGNsb3Nlc3QgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gYWRkIHRvIHRoZSB0aW1lbGluZVxuXHRcdCAqICBAcmV0dXJuICB7T2JqZWN0fSAgVGhlIGV2ZW50IHdoaWNoIHNwYW5zIHRoZSBkZXNpcmVkIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnNlYXJjaCh0aW1lLCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIG1heCA9IHJlc3VsdHNbMF07XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0c1tpXS5sb3cgPiBtYXgubG93KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG1heCA9IHJlc3VsdHNbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG1heC5ldmVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkludGVydmFsVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciBhbGxOb2RlcyA9IFtdO1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnRyYXZlcnNlKGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgICAgICAgICBhbGxOb2Rlcy5wdXNoKG5vZGUpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ID0gYWxsTm9kZXNbaV0uZXZlbnQ7XG5cdCAgICAgICAgICAgICAgICBpZiAoZXYpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhldik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBpbiB3aGljaCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBvdmVybGFwcyB3aXRoIHRoZSB0aW1lIGFuZCBkdXJhdGlvbiB0aW1lIG9mIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgb3ZlcmxhcHBpbmdcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hBdFRpbWUgPSBmdW5jdGlvbiAodGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnNlYXJjaCh0aW1lLCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IHJlc3VsdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldiA9IHJlc3VsdHNbaV0uZXZlbnQ7XG5cdCAgICAgICAgICAgICAgICBpZiAoZXYpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhldik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBpbiB3aGljaCB0aGUgdGltZSBpcyBncmVhdGVyXG5cdFx0ICogIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkludGVydmFsVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEZyb20gPSBmdW5jdGlvbiAodGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnNlYXJjaEFmdGVyKHRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gcmVzdWx0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ID0gcmVzdWx0c1tpXS5ldmVudDtcblx0ICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgYWxsTm9kZXMgPSBbXTtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnRyYXZlcnNlKGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgICAgICAgICBhbGxOb2Rlcy5wdXNoKG5vZGUpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxOb2Rlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBhbGxOb2Rlc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGFsbE5vZGVzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yb290ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRJTlRFUlZBTCBOT0RFIEhFTFBFUlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmVwcmVzZW50cyBhIG5vZGUgaW4gdGhlIGJpbmFyeSBzZWFyY2ggdHJlZSwgd2l0aCB0aGUgYWRkaXRpb25cblx0XHQgKiAgb2YgYSBcImhpZ2hcIiB2YWx1ZSB3aGljaCBrZWVwcyB0cmFjayBvZiB0aGUgaGlnaGVzdCB2YWx1ZSBvZlxuXHRcdCAqICBpdHMgY2hpbGRyZW4uXG5cdFx0ICogIFJlZmVyZW5jZXM6XG5cdFx0ICogIGh0dHBzOi8vYnJvb2tub3Zhay53b3JkcHJlc3MuY29tLzIwMTMvMTIvMDcvYXVnbWVudGVkLWludGVydmFsLXRyZWUtaW4tYy9cblx0XHQgKiAgaHR0cDovL3d3dy5taWYudnUubHQvfnZhbGRhcy9BTEdPUklUTUFJL0xJVEVSQVRVUkEvQ29ybWVuL0Nvcm1lbi5wZGZcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGxvd1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gaGlnaFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIEludGVydmFsTm9kZSA9IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGV2ZW50KSB7XG5cdCAgICAgICAgLy90aGUgZXZlbnQgY29udGFpbmVyXG5cdCAgICAgICAgdGhpcy5ldmVudCA9IGV2ZW50O1xuXHQgICAgICAgIC8vdGhlIGxvdyB2YWx1ZVxuXHQgICAgICAgIHRoaXMubG93ID0gbG93O1xuXHQgICAgICAgIC8vdGhlIGhpZ2ggdmFsdWVcblx0ICAgICAgICB0aGlzLmhpZ2ggPSBoaWdoO1xuXHQgICAgICAgIC8vdGhlIGhpZ2ggdmFsdWUgZm9yIHRoaXMgYW5kIGFsbCBjaGlsZCBub2Rlc1xuXHQgICAgICAgIHRoaXMubWF4ID0gdGhpcy5oaWdoO1xuXHQgICAgICAgIC8vdGhlIG5vZGVzIHRvIHRoZSBsZWZ0XG5cdCAgICAgICAgdGhpcy5fbGVmdCA9IG51bGw7XG5cdCAgICAgICAgLy90aGUgbm9kZXMgdG8gdGhlIHJpZ2h0XG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBudWxsO1xuXHQgICAgICAgIC8vdGhlIHBhcmVudCBub2RlXG5cdCAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXHQgICAgICAgIC8vdGhlIG51bWJlciBvZiBjaGlsZCBub2Rlc1xuXHQgICAgICAgIHRoaXMuaGVpZ2h0ID0gMDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW5zZXJ0IGEgbm9kZSBpbnRvIHRoZSBjb3JyZWN0IHNwb3QgaW4gdGhlIHRyZWVcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmIChub2RlLmxvdyA8PSB0aGlzLmxvdykge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5sZWZ0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmxlZnQgPSBub2RlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5sZWZ0Lmluc2VydChub2RlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0ID0gbm9kZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0Lmluc2VydChub2RlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNlYXJjaCB0aGUgdHJlZSBmb3Igbm9kZXMgd2hpY2ggb3ZlcmxhcFxuXHRcdCAqICB3aXRoIHRoZSBnaXZlbiBwb2ludFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBwb2ludCAgVGhlIHBvaW50IHRvIHF1ZXJ5XG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgcmVzdWx0cyAgVGhlIGFycmF5IHRvIHB1dCB0aGUgcmVzdWx0c1xuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5zZWFyY2ggPSBmdW5jdGlvbiAocG9pbnQsIHJlc3VsdHMpIHtcblx0ICAgICAgICAvLyBJZiBwIGlzIHRvIHRoZSByaWdodCBvZiB0aGUgcmlnaHRtb3N0IHBvaW50IG9mIGFueSBpbnRlcnZhbFxuXHQgICAgICAgIC8vIGluIHRoaXMgbm9kZSBhbmQgYWxsIGNoaWxkcmVuLCB0aGVyZSB3b24ndCBiZSBhbnkgbWF0Y2hlcy5cblx0ICAgICAgICBpZiAocG9pbnQgPiB0aGlzLm1heCkge1xuXHQgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIFNlYXJjaCBsZWZ0IGNoaWxkcmVuXG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLmxlZnQuc2VhcmNoKHBvaW50LCByZXN1bHRzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gQ2hlY2sgdGhpcyBub2RlXG5cdCAgICAgICAgaWYgKHRoaXMubG93IDw9IHBvaW50ICYmIHRoaXMuaGlnaCA+IHBvaW50KSB7XG5cdCAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gSWYgcCBpcyB0byB0aGUgbGVmdCBvZiB0aGUgdGltZSBvZiB0aGlzIGludGVydmFsLFxuXHQgICAgICAgIC8vIHRoZW4gaXQgY2FuJ3QgYmUgaW4gYW55IGNoaWxkIHRvIHRoZSByaWdodC5cblx0ICAgICAgICBpZiAodGhpcy5sb3cgPiBwb2ludCkge1xuXHQgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIFNlYXJjaCByaWdodCBjaGlsZHJlblxuXHQgICAgICAgIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQuc2VhcmNoKHBvaW50LCByZXN1bHRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNlYXJjaCB0aGUgdHJlZSBmb3Igbm9kZXMgd2hpY2ggYXJlIGxlc3Ncblx0XHQgKiAgdGhhbiB0aGUgZ2l2ZW4gcG9pbnRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgcG9pbnQgIFRoZSBwb2ludCB0byBxdWVyeVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIHJlc3VsdHMgIFRoZSBhcnJheSB0byBwdXQgdGhlIHJlc3VsdHNcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuc2VhcmNoQWZ0ZXIgPSBmdW5jdGlvbiAocG9pbnQsIHJlc3VsdHMpIHtcblx0ICAgICAgICAvLyBDaGVjayB0aGlzIG5vZGVcblx0ICAgICAgICBpZiAodGhpcy5sb3cgPj0gcG9pbnQpIHtcblx0ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmxlZnQuc2VhcmNoQWZ0ZXIocG9pbnQsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIHNlYXJjaCB0aGUgcmlnaHQgc2lkZVxuXHQgICAgICAgIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQuc2VhcmNoQWZ0ZXIocG9pbnQsIHJlc3VsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW52b2tlIHRoZSBjYWxsYmFjayBvbiB0aGlzIGVsZW1lbnQgYW5kIGJvdGggaXQncyBicmFuY2hlc1xuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnRyYXZlcnNlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLmxlZnQudHJhdmVyc2UoY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0LnRyYXZlcnNlKGNhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVwZGF0ZSB0aGUgaGVpZ2h0IG9mIHRoZSBub2RlXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnVwZGF0ZUhlaWdodCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsICYmIHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBNYXRoLm1heCh0aGlzLmxlZnQuaGVpZ2h0LCB0aGlzLnJpZ2h0LmhlaWdodCkgKyAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMucmlnaHQuaGVpZ2h0ICsgMTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMubGVmdC5oZWlnaHQgKyAxO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gMDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVwZGF0ZSB0aGUgaGVpZ2h0IG9mIHRoZSBub2RlXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnVwZGF0ZU1heCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLm1heCA9IHRoaXMuaGlnaDtcblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubWF4ID0gTWF0aC5tYXgodGhpcy5tYXgsIHRoaXMubGVmdC5tYXgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLm1heCA9IE1hdGgubWF4KHRoaXMubWF4LCB0aGlzLnJpZ2h0Lm1heCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYmFsYW5jZSBpcyBob3cgdGhlIGxlYWZzIGFyZSBkaXN0cmlidXRlZCBvbiB0aGUgbm9kZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgTmVnYXRpdmUgbnVtYmVycyBhcmUgYmFsYW5jZWQgdG8gdGhlIHJpZ2h0XG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLmdldEJhbGFuY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGJhbGFuY2UgPSAwO1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwgJiYgdGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBiYWxhbmNlID0gdGhpcy5sZWZ0LmhlaWdodCAtIHRoaXMucmlnaHQuaGVpZ2h0O1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGJhbGFuY2UgPSB0aGlzLmxlZnQuaGVpZ2h0ICsgMTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgYmFsYW5jZSA9IC0odGhpcy5yaWdodC5oZWlnaHQgKyAxKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGJhbGFuY2U7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoaXMgbm9kZSBpcyB0aGUgbGVmdCBjaGlsZFxuXHRcdCAqICBvZiBpdHMgcGFyZW50XG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLmlzTGVmdENoaWxkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCAhPT0gbnVsbCAmJiB0aGlzLnBhcmVudC5sZWZ0ID09PSB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBnZXQvc2V0IHRoZSBsZWZ0IG5vZGVcblx0XHQgKiAgQHR5cGUge0ludGVydmFsTm9kZX1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRlcnZhbE5vZGUucHJvdG90eXBlLCAnbGVmdCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xlZnQgPSBub2RlO1xuXHQgICAgICAgICAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlSGVpZ2h0KCk7XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlTWF4KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgZ2V0L3NldCB0aGUgcmlnaHQgbm9kZVxuXHRcdCAqICBAdHlwZSB7SW50ZXJ2YWxOb2RlfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludGVydmFsTm9kZS5wcm90b3R5cGUsICdyaWdodCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JpZ2h0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9yaWdodCA9IG5vZGU7XG5cdCAgICAgICAgICAgIGlmIChub2RlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVIZWlnaHQoKTtcblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVNYXgoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBudWxsIG91dCByZWZlcmVuY2VzLlxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yaWdodCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5ldmVudCA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RU5EIElOVEVSVkFMIE5PREUgSEVMUEVSXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIHJldHVybiBUb25lLkludGVydmFsVGltZWxpbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UaWNrcyBpcyBhIHByaW1pdGl2ZSB0eXBlIGZvciBlbmNvZGluZyBUaW1lIHZhbHVlcy5cblx0XHQgKiAgICAgICAgIFRvbmUuVGlja3MgY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCB0aGUgYG5ld2Aga2V5d29yZC4gVG9uZS5UaWNrcyBjYW4gYmUgcGFzc2VkXG5cdFx0ICogICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgb2YgYW55IG1ldGhvZCB3aGljaCB0YWtlcyB0aW1lIGFzIGFuIGFyZ3VtZW50LlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVHJhbnNwb3J0VGltZX1cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIHZhbCAgICBUaGUgdGltZSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nPX0gIHVuaXRzICBUaGUgdW5pdHMgb2YgdGhlIHZhbHVlLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB0ID0gVG9uZS5UaWNrcyhcIjRuXCIpOy8vYSBxdWFydGVyIG5vdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UaWNrcykge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydFRpbWUuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGlja3ModmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGlja3MsIFRvbmUuVHJhbnNwb3J0VGltZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fZGVmYXVsdFVuaXRzID0gJ2knO1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBjdXJyZW50IHRpbWUgaW4gdGhlIGdpdmVuIHVuaXRzXG5cdFx0ICogQHJldHVybiB7VGlja3N9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl9ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LnRpY2tzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBiZWF0cyBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gYmVhdHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMgPSBmdW5jdGlvbiAoYmVhdHMpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fZ2V0UFBRKCkgKiBiZWF0cztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzZWNvbmQgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtTZWNvbmRzfSBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiBzZWNvbmRzIC8gKDYwIC8gdGhpcy5fZ2V0QnBtKCkpICogdGhpcy5fZ2V0UFBRKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgdGljayBpbiB0aGUgY3VycmVudCB0aW1lIHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7VGlja3N9IHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fdGlja3NUb1VuaXRzID0gZnVuY3Rpb24gKHRpY2tzKSB7XG5cdCAgICAgICAgcmV0dXJuIHRpY2tzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpIC8gdGhpcy5fZ2V0UFBRKCkgKiAoNjAgLyB0aGlzLl9nZXRCcG0oKSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGlja3M7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmFuc3BvcnRFdmVudCBpcyBhbiBpbnRlcm5hbCBjbGFzcyB1c2VkIGJ5IChUb25lLlRyYW5zcG9ydClbVHJhbnNwb3J0XVxuXHRcdCAqICAgICAgICAgdG8gc2NoZWR1bGUgZXZlbnRzLiBEbyBubyBpbnZva2UgdGhpcyBjbGFzcyBkaXJlY3RseSwgaXQgaXNcblx0XHQgKiAgICAgICAgIGhhbmRsZWQgZnJvbSB3aXRoaW4gVG9uZS5UcmFuc3BvcnQuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudCA9IGZ1bmN0aW9uIChUcmFuc3BvcnQsIG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuVHJhbnNwb3J0RXZlbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFJlZmVyZW5jZSB0byB0aGUgVHJhbnNwb3J0IHRoYXQgY3JlYXRlZCBpdFxuXHRcdFx0ICogQHR5cGUge1RvbmUuVHJhbnNwb3J0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQgPSBUcmFuc3BvcnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdW5pcXVlIGlkIG9mIHRoZSBldmVudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaWQgPSBUb25lLlRyYW5zcG9ydEV2ZW50Ll9ldmVudElkKys7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdGltZSB0aGUgZXZlbnQgc3RhcnRzXG5cdFx0XHQgKiBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnRpbWUgPSBUb25lLlRpY2tzKG9wdGlvbnMudGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcblx0ICAgICAgICAvKipcblx0XHRcdCAqIElmIHRoZSBldmVudCBzaG91bGQgYmUgcmVtb3ZlZCBhZnRlciBiZWluZyBjcmVhdGVkLlxuXHRcdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25jZSA9IG9wdGlvbnMub25jZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydEV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25jZSc6IGZhbHNlLFxuXHQgICAgICAgICdjYWxsYmFjayc6IFRvbmUubm9PcFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEN1cnJlbnQgSUQgY291bnRlclxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50Ll9ldmVudElkID0gMDtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZSB0aGUgZXZlbnQgY2FsbGJhY2suXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgVGhlIEF1ZGlvQ29udGV4dCB0aW1lIGluIHNlY29uZHMgb2YgdGhlIGV2ZW50XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5pbnZva2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vbmNlICYmIHRoaXMuVHJhbnNwb3J0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLmlkKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0RXZlbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydEV2ZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQgaXMgYW4gaW50ZXJuYWwgY2xhc3MgdXNlZCBieSBUb25lLlRyYW5zcG9ydFxuXHRcdCAqICAgICAgICAgdG8gc2NoZWR1bGUgcmVwZWF0IGV2ZW50cy4gVGhpcyBjbGFzcyBzaG91bGQgbm90IGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVHJhbnNwb3J0RXZlbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50ID0gZnVuY3Rpb24gKFRyYW5zcG9ydCwgb3B0aW9ucykge1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQuY2FsbCh0aGlzLCBUcmFuc3BvcnQsIG9wdGlvbnMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBXaGVuIHRoZSBldmVudCBzaG91bGQgc3RvcCByZXBlYXRpbmdcblx0XHRcdCAqIEB0eXBlIHtUaWNrc31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmR1cmF0aW9uID0gVG9uZS5UaWNrcyhvcHRpb25zLmR1cmF0aW9uKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBpbnRlcnZhbCBvZiB0aGUgcmVwZWF0ZWQgZXZlbnRcblx0XHRcdCAqIEB0eXBlIHtUaWNrc31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IFRvbmUuVGlja3Mob3B0aW9ucy5pbnRlcnZhbCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgSUQgb2YgdGhlIGN1cnJlbnQgdGltZWxpbmUgZXZlbnRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3VycmVudElkID0gLTE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgSUQgb2YgdGhlIG5leHQgdGltZWxpbmUgZXZlbnRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbmV4dElkID0gLTE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgICogVGhlIHRpbWUgb2YgdGhlIG5leHQgZXZlbnRcblx0XHRcdCAgKiBAdHlwZSB7VGlja3N9XG5cdFx0XHQgICogQHByaXZhdGVcblx0XHRcdCAgKi9cblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IHRoaXMudGltZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIGEgcmVmZXJlbmNlIHRvIHRoZSBib3VuZCBzdGFydCBtZXRob2Rcblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ib3VuZFJlc3RhcnQgPSB0aGlzLl9yZXN0YXJ0LmJpbmQodGhpcyk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQub24oJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX2JvdW5kUmVzdGFydCk7XG5cdCAgICAgICAgdGhpcy5fcmVzdGFydCgpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQsIFRvbmUuVHJhbnNwb3J0RXZlbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHRzXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkdXJhdGlvbic6IEluZmluaXR5LFxuXHQgICAgICAgICdpbnRlcnZhbCc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2UgdGhlIGNhbGxiYWNrLiBSZXR1cm5zIHRoZSB0aWNrIHRpbWUgd2hpY2hcblx0XHQgKiB0aGUgbmV4dCBldmVudCBzaG91bGQgYmUgc2NoZWR1bGVkIGF0LlxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZSAgVGhlIEF1ZGlvQ29udGV4dCB0aW1lIGluIHNlY29uZHMgb2YgdGhlIGV2ZW50XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LnByb3RvdHlwZS5pbnZva2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vY3JlYXRlIG1vcmUgZXZlbnRzIGlmIG5lY2Vzc2FyeVxuXHQgICAgICAgIHRoaXMuX2NyZWF0ZUV2ZW50cyh0aW1lKTtcblx0ICAgICAgICAvL2NhbGwgdGhlIHN1cGVyIGNsYXNzXG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5wcm90b3R5cGUuaW52b2tlLmNhbGwodGhpcywgdGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUHVzaCBtb3JlIGV2ZW50cyBvbnRvIHRoZSB0aW1lbGluZSB0byBrZWVwIHVwIHdpdGggdGhlIHBvc2l0aW9uIG9mIHRoZSB0aW1lbGluZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LnByb3RvdHlwZS5fY3JlYXRlRXZlbnRzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvLyBzY2hlZHVsZSB0aGUgbmV4dCBldmVudFxuXHQgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuVHJhbnNwb3J0LmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aWNrcyA+PSB0aGlzLnRpbWUgJiYgdGlja3MgPj0gdGhpcy5fbmV4dFRpY2sgJiYgdGhpcy5fbmV4dFRpY2sgKyB0aGlzLl9pbnRlcnZhbCA8IHRoaXMudGltZSArIHRoaXMuZHVyYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fbmV4dFRpY2sgKz0gdGhpcy5faW50ZXJ2YWw7XG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJZCA9IHRoaXMuX25leHRJZDtcblx0ICAgICAgICAgICAgdGhpcy5fbmV4dElkID0gdGhpcy5UcmFuc3BvcnQuc2NoZWR1bGVPbmNlKHRoaXMuaW52b2tlLmJpbmQodGhpcyksIFRvbmUuVGlja3ModGhpcy5fbmV4dFRpY2spKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUHVzaCBtb3JlIGV2ZW50cyBvbnRvIHRoZSB0aW1lbGluZSB0byBrZWVwIHVwIHdpdGggdGhlIHBvc2l0aW9uIG9mIHRoZSB0aW1lbGluZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LnByb3RvdHlwZS5fcmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5fY3VycmVudElkKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9uZXh0SWQpO1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrID0gdGhpcy50aW1lO1xuXHQgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuVHJhbnNwb3J0LmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aWNrcyA+IHRoaXMudGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9uZXh0VGljayA9IHRoaXMudGltZSArIE1hdGguY2VpbCgodGlja3MgLSB0aGlzLnRpbWUpIC8gdGhpcy5faW50ZXJ2YWwpICogdGhpcy5faW50ZXJ2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2N1cnJlbnRJZCA9IHRoaXMuVHJhbnNwb3J0LnNjaGVkdWxlT25jZSh0aGlzLmludm9rZS5iaW5kKHRoaXMpLCBUb25lLlRpY2tzKHRoaXMuX25leHRUaWNrKSk7XG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgKz0gdGhpcy5faW50ZXJ2YWw7XG5cdCAgICAgICAgdGhpcy5fbmV4dElkID0gdGhpcy5UcmFuc3BvcnQuc2NoZWR1bGVPbmNlKHRoaXMuaW52b2tlLmJpbmQodGhpcyksIFRvbmUuVGlja3ModGhpcy5fbmV4dFRpY2spKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5fY3VycmVudElkKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9uZXh0SWQpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0Lm9mZignc3RhcnQgbG9vcFN0YXJ0JywgdGhpcy5fYm91bmRSZXN0YXJ0KTtcblx0ICAgICAgICB0aGlzLl9ib3VuZENyZWF0ZUV2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuZHVyYXRpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUcmFuc3BvcnQgZm9yIHRpbWluZyBtdXNpY2FsIGV2ZW50cy5cblx0XHQgKiAgICAgICAgICBTdXBwb3J0cyB0ZW1wbyBjdXJ2ZXMgYW5kIHRpbWUgY2hhbmdlcy4gVW5saWtlIGJyb3dzZXItYmFzZWQgdGltaW5nIChzZXRJbnRlcnZhbCwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKVxuXHRcdCAqICAgICAgICAgIFRvbmUuVHJhbnNwb3J0IHRpbWluZyBldmVudHMgcGFzcyBpbiB0aGUgZXhhY3QgdGltZSBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50XG5cdFx0ICogICAgICAgICAgaW4gdGhlIGFyZ3VtZW50IG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gUGFzcyB0aGF0IHRpbWUgdmFsdWUgdG8gdGhlIG9iamVjdFxuXHRcdCAqICAgICAgICAgIHlvdSdyZSBzY2hlZHVsaW5nLiA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgIEEgc2luZ2xlIHRyYW5zcG9ydCBpcyBjcmVhdGVkIGZvciB5b3Ugd2hlbiB0aGUgbGlicmFyeSBpcyBpbml0aWFsaXplZC5cblx0XHQgKiAgICAgICAgICA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgIFRoZSB0cmFuc3BvcnQgZW1pdHMgdGhlIGV2ZW50czogXCJzdGFydFwiLCBcInN0b3BcIiwgXCJwYXVzZVwiLCBhbmQgXCJsb29wXCIgd2hpY2ggYXJlXG5cdFx0ICogICAgICAgICAgY2FsbGVkIHdpdGggdGhlIHRpbWUgb2YgdGhhdCBldmVudCBhcyB0aGUgYXJndW1lbnQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW1pdHRlcn1cblx0XHQgKiAgQHNpbmdsZXRvblxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcmVwZWF0ZWQgZXZlbnQgZXZlcnkgOHRoIG5vdGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZVJlcGVhdChmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdC8vZG8gc29tZXRoaW5nIHdpdGggdGhlIHRpbWVcblx0XHQgKiB9LCBcIjhuXCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2NoZWR1bGUgYW4gZXZlbnQgb24gdGhlIDE2dGggbWVhc3VyZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly9kbyBzb21ldGhpbmcgd2l0aCB0aGUgdGltZVxuXHRcdCAqIH0sIFwiMTY6MDowXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLmNhbGwodGhpcyk7XG5cdCAgICAgICAgVG9uZS5nZXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdExPT1BJTkdcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogXHRJZiB0aGUgdHJhbnNwb3J0IGxvb3BzIG9yIG5vdC5cblx0XHRcdFx0ICogIEB0eXBlIHtib29sZWFufVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5sb29wID0gZmFsc2U7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdFRoZSBsb29wIHN0YXJ0IHBvc2l0aW9uIGluIHRpY2tzXG5cdFx0XHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gMDtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0VGhlIGxvb3AgZW5kIHBvc2l0aW9uIGluIHRpY2tzXG5cdFx0XHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IDA7XG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8vXHRDTE9DSy9URU1QT1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgUHVsc2VzIHBlciBxdWFydGVyIGlzIHRoZSBudW1iZXIgb2YgdGlja3MgcGVyIHF1YXJ0ZXIgbm90ZS5cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3BwcSA9IFRyYW5zcG9ydENvbnN0cnVjdG9yLmRlZmF1bHRzLlBQUTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICB3YXRjaGVzIHRoZSBtYWluIG9zY2lsbGF0b3IgZm9yIHRpbWluZyB0aWNrc1xuXHRcdFx0XHQgKiAgaW5pdGlhbGx5IHN0YXJ0cyBhdCAxMjBicG1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqICBAdHlwZSB7VG9uZS5DbG9ja31cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX2Nsb2NrID0gbmV3IFRvbmUuQ2xvY2soe1xuXHQgICAgICAgICAgICAgICAgJ2NhbGxiYWNrJzogdGhpcy5fcHJvY2Vzc1RpY2suYmluZCh0aGlzKSxcblx0ICAgICAgICAgICAgICAgICdmcmVxdWVuY3knOiAwXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB0aGlzLl9iaW5kQ2xvY2tFdmVudHMoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgQmVhdHMgUGVyIE1pbnV0ZSBvZiB0aGUgVHJhbnNwb3J0LlxuXHRcdFx0XHQgKiAgQHR5cGUge0JQTX1cblx0XHRcdFx0ICogIEBzaWduYWxcblx0XHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHRcdCAqIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZSA9IDgwO1xuXHRcdFx0XHQgKiAvL3JhbXAgdGhlIGJwbSB0byAxMjAgb3ZlciAxMCBzZWNvbmRzXG5cdFx0XHRcdCAqIFRvbmUuVHJhbnNwb3J0LmJwbS5yYW1wVG8oMTIwLCAxMCk7XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLmJwbSA9IHRoaXMuX2Nsb2NrLmZyZXF1ZW5jeTtcblx0ICAgICAgICAgICAgdGhpcy5icG0uX3RvVW5pdHMgPSB0aGlzLl90b1VuaXRzLmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLl9mcm9tVW5pdHMgPSB0aGlzLl9mcm9tVW5pdHMuYmluZCh0aGlzKTtcblx0ICAgICAgICAgICAgdGhpcy5icG0udW5pdHMgPSBUb25lLlR5cGUuQlBNO1xuXHQgICAgICAgICAgICB0aGlzLmJwbS52YWx1ZSA9IFRyYW5zcG9ydENvbnN0cnVjdG9yLmRlZmF1bHRzLmJwbTtcblx0ICAgICAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2JwbScpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSB0aW1lIHNpZ25hdHVyZSwgb3IgbW9yZSBhY2N1cmF0ZWx5IHRoZSBudW1lcmF0b3Jcblx0XHRcdFx0ICogIG9mIHRoZSB0aW1lIHNpZ25hdHVyZSBvdmVyIGEgZGVub21pbmF0b3Igb2YgNC5cblx0XHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdGltZVNpZ25hdHVyZSA9IFRyYW5zcG9ydENvbnN0cnVjdG9yLmRlZmF1bHRzLnRpbWVTaWduYXR1cmU7XG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8vXHRUSU1FTElORSBFVkVOVFNcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIEFsbCB0aGUgZXZlbnRzIGluIGFuIG9iamVjdCB0byBrZWVwIHRyYWNrIGJ5IElEXG5cdFx0XHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cyA9IHt9O1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogXHRUaGUgc2NoZWR1bGVkIGV2ZW50cy5cblx0XHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gbmV3IFRvbmUuVGltZWxpbmUoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBSZXBlYXRlZCBldmVudHNcblx0XHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBlYXRlZEV2ZW50cyA9IG5ldyBUb25lLkludGVydmFsVGltZWxpbmUoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBBbGwgb2YgdGhlIHN5bmNlZCBTaWduYWxzXG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fc3luY2VkU2lnbmFscyA9IFtdO1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0U1dJTkdcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSBzdWJkaXZpc2lvbiBvZiB0aGUgc3dpbmdcblx0XHRcdFx0ICogIEB0eXBlICB7VGlja3N9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fc3dpbmdUaWNrcyA9IFRyYW5zcG9ydENvbnN0cnVjdG9yLmRlZmF1bHRzLlBQUSAvIDI7XG5cdCAgICAgICAgICAgIC8vOG5cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgc3dpbmcgYW1vdW50XG5cdFx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fc3dpbmdBbW91bnQgPSAwO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnQsIFRvbmUuRW1pdHRlcik7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYnBtJzogMTIwLFxuXHQgICAgICAgICdzd2luZyc6IDAsXG5cdCAgICAgICAgJ3N3aW5nU3ViZGl2aXNpb24nOiAnOG4nLFxuXHQgICAgICAgICd0aW1lU2lnbmF0dXJlJzogNCxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAnbG9vcEVuZCc6ICc0bScsXG5cdCAgICAgICAgJ1BQUSc6IDE5MlxuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUSUNLU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIGNhbGxlZCBvbiBldmVyeSB0aWNrXG5cdFx0ICogIEBwYXJhbSAgIHtudW1iZXJ9IHRpY2tUaW1lIGNsb2NrIHJlbGF0aXZlIHRpY2sgdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLl9wcm9jZXNzVGljayA9IGZ1bmN0aW9uICh0aWNrVGltZSwgdGlja3MpIHtcblx0ICAgICAgICAvL2hhbmRsZSBzd2luZ1xuXHQgICAgICAgIGlmICh0aGlzLl9zd2luZ0Ftb3VudCA+IDAgJiYgdGlja3MgJSB0aGlzLl9wcHEgIT09IDAgJiYgLy9ub3Qgb24gYSBkb3duYmVhdFxuXHQgICAgICAgICAgICB0aWNrcyAlICh0aGlzLl9zd2luZ1RpY2tzICogMikgIT09IDApIHtcblx0ICAgICAgICAgICAgLy9hZGQgc29tZSBzd2luZ1xuXHQgICAgICAgICAgICB2YXIgcHJvZ3Jlc3MgPSB0aWNrcyAlICh0aGlzLl9zd2luZ1RpY2tzICogMikgLyAodGhpcy5fc3dpbmdUaWNrcyAqIDIpO1xuXHQgICAgICAgICAgICB2YXIgYW1vdW50ID0gTWF0aC5zaW4ocHJvZ3Jlc3MgKiBNYXRoLlBJKSAqIHRoaXMuX3N3aW5nQW1vdW50O1xuXHQgICAgICAgICAgICB0aWNrVGltZSArPSBUb25lLlRpY2tzKHRoaXMuX3N3aW5nVGlja3MgKiAyIC8gMykudG9TZWNvbmRzKCkgKiBhbW91bnQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vZG8gdGhlIGxvb3AgdGVzdFxuXHQgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgaWYgKHRpY2tzID49IHRoaXMuX2xvb3BFbmQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9vcEVuZCcsIHRpY2tUaW1lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2Nsb2NrLnNldFRpY2tzQXRUaW1lKHRoaXMuX2xvb3BTdGFydCwgdGlja1RpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGlja3MgPSB0aGlzLl9sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvb3BTdGFydCcsIHRpY2tUaW1lLCB0aGlzLl9jbG9jay5nZXRTZWNvbmRzQXRUaW1lKHRpY2tUaW1lKSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvb3AnLCB0aWNrVGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9pbnZva2UgdGhlIHRpbWVsaW5lIGV2ZW50cyBzY2hlZHVsZWQgb24gdGhpcyB0aWNrXG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuZm9yRWFjaEF0VGltZSh0aWNrcywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50Lmludm9rZSh0aWNrVGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFNDSEVEVUxBQkxFIEVWRU5UU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGFuIGV2ZW50IGFsb25nIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgYXQgdGhlIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gIHRpbWUgVGhlIHRpbWUgdG8gaW52b2tlIHRoZSBjYWxsYmFjayBhdC5cblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSBUaGUgaWQgb2YgdGhlIGV2ZW50IHdoaWNoIGNhbiBiZSB1c2VkIGZvciBjYW5jZWxpbmcgdGhlIGV2ZW50LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciB0aGUgY2FsbGJhY2sgd2hlbiB0aGUgVHJhbnNwb3J0IHJlYWNoZXMgdGhlIGRlc2lyZWQgdGltZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0ZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lKTtcblx0XHQgKiB9LCBcIjEyOGlcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRpbWUpIHtcblx0ICAgICAgICB2YXIgZXZlbnQgPSBuZXcgVG9uZS5UcmFuc3BvcnRFdmVudCh0aGlzLCB7XG5cdCAgICAgICAgICAgICd0aW1lJzogVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpLFxuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiBjYWxsYmFja1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hZGRFdmVudChldmVudCwgdGhpcy5fdGltZWxpbmUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZSBhIHJlcGVhdGVkIGV2ZW50IGFsb25nIHRoZSB0aW1lbGluZS4gVGhlIGV2ZW50IHdpbGwgZmlyZVxuXHRcdCAqICBhdCB0aGUgYGludGVydmFsYCBzdGFydGluZyBhdCB0aGUgYHN0YXJ0VGltZWAgYW5kIGZvciB0aGUgc3BlY2lmaWVkXG5cdFx0ICogIGBkdXJhdGlvbmAuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICBpbnRlcnZhbCAgIFRoZSBkdXJhdGlvbiBiZXR3ZWVuIHN1Y2Nlc3NpdmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MuIE11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWU9fSAgICBzdGFydFRpbWUgIFdoZW4gYWxvbmcgdGhlIHRpbWVsaW5lIHRoZSBldmVudHMgc2hvdWxkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgYmVpbmcgaW52b2tlZC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZHVyYXRpb249SW5maW5pdHldIEhvdyBsb25nIHRoZSBldmVudCBzaG91bGQgcmVwZWF0LlxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgICBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudC4gVXNlIHRoaXMgdG8gY2FuY2VsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZXZlbnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIGNhbGxiYWNrIGludm9rZWQgZXZlcnkgZWlnaHRoIG5vdGUgYWZ0ZXIgdGhlIGZpcnN0IG1lYXN1cmVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZVJlcGVhdChjYWxsYmFjaywgXCI4blwiLCBcIjFtXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnNjaGVkdWxlUmVwZWF0ID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBpbnRlcnZhbCwgc3RhcnRUaW1lLCBkdXJhdGlvbikge1xuXHQgICAgICAgIHZhciBldmVudCA9IG5ldyBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50KHRoaXMsIHtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogY2FsbGJhY2ssXG5cdCAgICAgICAgICAgICdpbnRlcnZhbCc6IFRvbmUuVGltZShpbnRlcnZhbCksXG5cdCAgICAgICAgICAgICd0aW1lJzogVG9uZS5UcmFuc3BvcnRUaW1lKHN0YXJ0VGltZSksXG5cdCAgICAgICAgICAgICdkdXJhdGlvbic6IFRvbmUuVGltZShUb25lLmRlZmF1bHRBcmcoZHVyYXRpb24sIEluZmluaXR5KSlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL2tpY2sgaXQgb2ZmIGlmIHRoZSBUcmFuc3BvcnQgaXMgc3RhcnRlZFxuXHQgICAgICAgIHJldHVybiB0aGlzLl9hZGRFdmVudChldmVudCwgdGhpcy5fcmVwZWF0ZWRFdmVudHMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZSBhbiBldmVudCB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBhZnRlciBpdCBpcyBpbnZva2VkLlxuXHRcdCAqICBOb3RlIHRoYXQgaWYgdGhlIGdpdmVuIHRpbWUgaXMgbGVzcyB0aGFuIHRoZSBjdXJyZW50IHRyYW5zcG9ydCB0aW1lLFxuXHRcdCAqICB0aGUgZXZlbnQgd2lsbCBiZSBpbnZva2VkIGltbWVkaWF0ZWx5LlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIG9uY2UuXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gdGltZSBUaGUgdGltZSB0aGUgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQuXG5cdFx0ICogIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnNjaGVkdWxlT25jZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdGltZSkge1xuXHQgICAgICAgIHZhciBldmVudCA9IG5ldyBUb25lLlRyYW5zcG9ydEV2ZW50KHRoaXMsIHtcblx0ICAgICAgICAgICAgJ3RpbWUnOiBUb25lLlRyYW5zcG9ydFRpbWUodGltZSksXG5cdCAgICAgICAgICAgICdjYWxsYmFjayc6IGNhbGxiYWNrLFxuXHQgICAgICAgICAgICAnb25jZSc6IHRydWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYWRkRXZlbnQoZXZlbnQsIHRoaXMuX3RpbWVsaW5lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYXIgdGhlIHBhc3NlZCBpbiBldmVudCBpZCBmcm9tIHRoZSB0aW1lbGluZVxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gZXZlbnRJZCBUaGUgaWQgb2YgdGhlIGV2ZW50LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIChldmVudElkKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3NjaGVkdWxlZEV2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudElkKSkge1xuXHQgICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuX3NjaGVkdWxlZEV2ZW50c1tldmVudElkLnRvU3RyaW5nKCldO1xuXHQgICAgICAgICAgICBpdGVtLnRpbWVsaW5lLnJlbW92ZShpdGVtLmV2ZW50KTtcblx0ICAgICAgICAgICAgaXRlbS5ldmVudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zY2hlZHVsZWRFdmVudHNbZXZlbnRJZC50b1N0cmluZygpXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQWRkIGFuIGV2ZW50IHRvIHRoZSBjb3JyZWN0IHRpbWVsaW5lLiBLZWVwIHRyYWNrIG9mIHRoZVxuXHRcdCAqIHRpbWVsaW5lIGl0IHdhcyBhZGRlZCB0by5cblx0XHQgKiBAcGFyYW0ge1RvbmUuVHJhbnNwb3J0RXZlbnR9XHRldmVudFxuXHRcdCAqIEBwYXJhbSB7VG9uZS5UaW1lbGluZX0gdGltZWxpbmVcblx0XHQgKiBAcmV0dXJucyB7TnVtYmVyfSB0aGUgZXZlbnQgaWQgd2hpY2ggd2FzIGp1c3QgYWRkZWRcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLl9hZGRFdmVudCA9IGZ1bmN0aW9uIChldmVudCwgdGltZWxpbmUpIHtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHNbZXZlbnQuaWQudG9TdHJpbmcoKV0gPSB7XG5cdCAgICAgICAgICAgICdldmVudCc6IGV2ZW50LFxuXHQgICAgICAgICAgICAndGltZWxpbmUnOiB0aW1lbGluZVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgdGltZWxpbmUuYWRkKGV2ZW50KTtcblx0ICAgICAgICByZXR1cm4gZXZlbnQuaWQ7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBzY2hlZHVsZWQgZXZlbnRzIGZyb20gdGhlIHRpbWVsaW5lIGFmdGVyXG5cdFx0ICogIHRoZSBnaXZlbiB0aW1lLiBSZXBlYXRlZCBldmVudHMgd2lsbCBiZSByZW1vdmVkXG5cdFx0ICogIGlmIHRoZWlyIHN0YXJ0VGltZSBpcyBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IFthZnRlcj0wXSBDbGVhciBhbGwgZXZlbnRzIGFmdGVyXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgdGltZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgYWZ0ZXIgPSBUb25lLmRlZmF1bHRBcmcoYWZ0ZXIsIDApO1xuXHQgICAgICAgIGFmdGVyID0gdGhpcy50b1RpY2tzKGFmdGVyKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5mb3JFYWNoRnJvbShhZnRlciwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2xlYXIoZXZlbnQuaWQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMuZm9yRWFjaEZyb20oYWZ0ZXIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICB0aGlzLmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRTVEFSVC9TVE9QL1BBVVNFXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQmluZCBzdGFydC9zdG9wL3BhdXNlIGV2ZW50cyBmcm9tIHRoZSBjbG9jayBhbmQgZW1pdCB0aGVtLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLl9iaW5kQ2xvY2tFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sub24oJ3N0YXJ0JywgZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLlRpY2tzKG9mZnNldCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RhcnQnLCB0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sub24oJ3N0b3AnLCBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0b3AnLCB0aW1lKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdwYXVzZScsIGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgncGF1c2UnLCB0aW1lKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIsIFwic3RvcHBlZFwiLCBvciBcInBhdXNlZFwiXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2suZ2V0U3RhdGVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIHRyYW5zcG9ydCBhbmQgYWxsIHNvdXJjZXMgc3luY2VkIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgdHJhbnNwb3J0IHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZT19IG9mZnNldCBUaGUgdGltZWxpbmUgb2Zmc2V0IHRvIHN0YXJ0IHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCBpbiBvbmUgc2Vjb25kIHN0YXJ0aW5nIGF0IGJlZ2lubmluZyBvZiB0aGUgNXRoIG1lYXN1cmUuXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoXCIrMVwiLCBcIjQ6MDowXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGNsb2NrXG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKG9mZnNldCkpIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1RpY2tzKG9mZnNldCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnN0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIHRyYW5zcG9ydCBhbmQgYWxsIHNvdXJjZXMgc3luY2VkIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgdHJhbnNwb3J0IHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdG9wKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGF1c2UgdGhlIHRyYW5zcG9ydCBhbmQgYWxsIHNvdXJjZXMgc3luY2VkIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnBhdXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRvZ2dsZSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdHJhbnNwb3J0LiBJZiBpdCBpc1xuXHRcdCAqIHN0YXJ0ZWQsIGl0IHdpbGwgc3RvcCBpdCwgb3RoZXJ3aXNlIGl0IHdpbGwgc3RhcnQgdGhlIFRyYW5zcG9ydC5cblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydH0gICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX2Nsb2NrLmdldFN0YXRlQXRUaW1lKHRpbWUpICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5zdGFydCh0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLnN0b3AodGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRTRVRURVJTL0dFVFRFUlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSBzaWduYXR1cmUgYXMganVzdCB0aGUgbnVtZXJhdG9yIG92ZXIgNC5cblx0XHQgKiAgRm9yIGV4YW1wbGUgNC80IHdvdWxkIGJlIGp1c3QgNCBhbmQgNi84IHdvdWxkIGJlIDMuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge051bWJlcnxBcnJheX1cblx0XHQgKiAgQG5hbWUgdGltZVNpZ25hdHVyZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY29tbW9uIHRpbWVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC50aW1lU2lnbmF0dXJlID0gNDtcblx0XHQgKiAvLyA3Lzhcblx0XHQgKiBUb25lLlRyYW5zcG9ydC50aW1lU2lnbmF0dXJlID0gWzcsIDhdO1xuXHRcdCAqIC8vdGhpcyB3aWxsIGJlIHJlZHVjZWQgdG8gYSBzaW5nbGUgbnVtYmVyXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZTsgLy9yZXR1cm5zIDMuNVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3RpbWVTaWduYXR1cmUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lU2lnbmF0dXJlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZVNpZykge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRpbWVTaWcpKSB7XG5cdCAgICAgICAgICAgICAgICB0aW1lU2lnID0gdGltZVNpZ1swXSAvIHRpbWVTaWdbMV0gKiA0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVTaWduYXR1cmUgPSB0aW1lU2lnO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogV2hlbiB0aGUgVG9uZS5UcmFuc3BvcnQubG9vcCA9IHRydWUsIHRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBsb29wLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BTdGFydCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdGFydFBvc2l0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9UaWNrcyhzdGFydFBvc2l0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFdoZW4gdGhlIFRvbmUuVHJhbnNwb3J0Lmxvb3AgPSB0cnVlLCB0aGlzIGlzIHRoZSBlbmRpbmcgcG9zaXRpb24gb2YgdGhlIGxvb3AuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wRW5kKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGVuZFBvc2l0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvVGlja3MoZW5kUG9zaXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgbG9vcCBzdGFydCBhbmQgc3RvcCBhdCB0aGUgc2FtZSB0aW1lLlxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IHN0YXJ0UG9zaXRpb25cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBlbmRQb3NpdGlvblxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xvb3Agb3ZlciB0aGUgZmlyc3QgbWVhc3VyZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNldExvb3BQb2ludHMoMCwgXCIxbVwiKTtcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5sb29wID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zZXRMb29wUG9pbnRzID0gZnVuY3Rpb24gKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBzdGFydFBvc2l0aW9uO1xuXHQgICAgICAgIHRoaXMubG9vcEVuZCA9IGVuZFBvc2l0aW9uO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3dpbmcgdmFsdWUuIEJldHdlZW4gMC0xIHdoZXJlIDEgZXF1YWwgdG9cblx0XHQgKiAgdGhlIG5vdGUgKyBoYWxmIHRoZSBzdWJkaXZpc2lvbi5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHN3aW5nXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc3dpbmcnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zd2luZ0Ftb3VudDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGFtb3VudCkge1xuXHQgICAgICAgICAgICAvL3NjYWxlIHRoZSB2YWx1ZXMgdG8gYSBub3JtYWwgcmFuZ2Vcblx0ICAgICAgICAgICAgdGhpcy5fc3dpbmdBbW91bnQgPSBhbW91bnQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBzdWJkaXZpc2lvbiB3aGljaCB0aGUgc3dpbmcgd2lsbCBiZSBhcHBsaWVkIHRvLlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBhbiA4dGggbm90ZS4gVmFsdWUgbXVzdCBiZSBsZXNzXG5cdFx0ICogIHRoYW4gYSBxdWFydGVyIG5vdGUuXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgc3dpbmdTdWJkaXZpc2lvblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3N3aW5nU3ViZGl2aXNpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX3N3aW5nVGlja3MpLnRvTm90YXRpb24oKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHN1YmRpdmlzaW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nVGlja3MgPSB0aGlzLnRvVGlja3Moc3ViZGl2aXNpb24pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBUcmFuc3BvcnQncyBwb3NpdGlvbiBpbiBCYXJzOkJlYXRzOlNpeHRlZW50aHMuXG5cdFx0ICogIFNldHRpbmcgdGhlIHZhbHVlIHdpbGwganVtcCB0byB0aGF0IHBvc2l0aW9uIHJpZ2h0IGF3YXkuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge0JhcnNCZWF0c1NpeHRlZW50aHN9XG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAncG9zaXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLl9jbG9jay5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aWNrcykudG9CYXJzQmVhdHNTaXh0ZWVudGhzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9ncmVzcykge1xuXHQgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLnRvVGlja3MocHJvZ3Jlc3MpO1xuXHQgICAgICAgICAgICB0aGlzLnRpY2tzID0gdGlja3M7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIFRyYW5zcG9ydCdzIHBvc2l0aW9uIGluIHNlY29uZHNcblx0XHQgKiAgU2V0dGluZyB0aGUgdmFsdWUgd2lsbCBqdW1wIHRvIHRoYXQgcG9zaXRpb24gcmlnaHQgYXdheS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7U2Vjb25kc31cblx0XHQgKiAgQG5hbWUgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3NlY29uZHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay5zZWNvbmRzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocykge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5icG0udGltZVRvVGlja3Mocywgbm93KTtcblx0ICAgICAgICAgICAgdGhpcy50aWNrcyA9IHRpY2tzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBUcmFuc3BvcnQncyBsb29wIHBvc2l0aW9uIGFzIGEgbm9ybWFsaXplZCB2YWx1ZS4gQWx3YXlzXG5cdFx0ICogIHJldHVybnMgMCBpZiB0aGUgdHJhbnNwb3J0IGlmIGxvb3AgaXMgbm90IHRydWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQG5hbWUgcHJvZ3Jlc3Ncblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3Byb2dyZXNzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuX2Nsb2NrLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gKHRpY2tzIC0gdGhpcy5fbG9vcFN0YXJ0KSAvICh0aGlzLl9sb29wRW5kIC0gdGhpcy5fbG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRyYW5zcG9ydHMgY3VycmVudCB0aWNrIHBvc2l0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqICBAbmFtZSB0aWNrc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3RpY2tzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2sudGlja3M7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9jbG9jay50aWNrcyAhPT0gdCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgICAgICAvL3N0b3AgZXZlcnl0aGluZyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydFxuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RvcCcsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvY2suc2V0VGlja3NBdFRpbWUodCwgbm93KTtcblx0ICAgICAgICAgICAgICAgICAgICAvL3Jlc3RhcnQgaXQgd2l0aCB0aGUgbmV3IHRpbWVcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0Jywgbm93LCB0aGlzLnNlY29uZHMpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9jay5zZXRUaWNrc0F0VGltZSh0LCBub3cpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGNsb2NrJ3MgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBnZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgICAgVGhlIHRpY2sgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuZ2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuX2Nsb2NrLmdldFRpY2tzQXRUaW1lKHRpbWUpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBlbGFwc2VkIHNlY29uZHMgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGdldCB0aGUgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfSAgVGhlIG51bWJlciBvZiBlbGFwc2VkIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5nZXRTZWNvbmRzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2suZ2V0U2Vjb25kc0F0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUHVsc2VzIFBlciBRdWFydGVyIG5vdGUuIFRoaXMgaXMgdGhlIHNtYWxsZXN0IHJlc29sdXRpb25cblx0XHQgKiAgdGhlIFRyYW5zcG9ydCB0aW1pbmcgc3VwcG9ydHMuIFRoaXMgc2hvdWxkIGJlIHNldCBvbmNlXG5cdFx0ICogIG9uIGluaXRpYWxpemF0aW9uIGFuZCBub3Qgc2V0IGFnYWluLiBDaGFuZ2luZyB0aGlzIHZhbHVlXG5cdFx0ICogIGFmdGVyIG90aGVyIG9iamVjdHMgaGF2ZSBiZWVuIGNyZWF0ZWQgY2FuIGNhdXNlIHByb2JsZW1zLlxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgUFBRXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnUFBRJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHBxO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHBxKSB7XG5cdCAgICAgICAgICAgIHZhciBicG0gPSB0aGlzLmJwbS52YWx1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fcHBxID0gcHBxO1xuXHQgICAgICAgICAgICB0aGlzLmJwbS52YWx1ZSA9IGJwbTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGZyb20gQlBNIHRvIGZyZXF1ZW5jeSAoZmFjdG9yaW5nIGluIFBQUSlcblx0XHQgKiAgQHBhcmFtICB7QlBNfSAgYnBtIFRoZSBCUE0gdmFsdWUgdG8gY29udmVydCB0byBmcmVxdWVuY3lcblx0XHQgKiAgQHJldHVybiAge0ZyZXF1ZW5jeX0gIFRoZSBCUE0gYXMgYSBmcmVxdWVuY3kgd2l0aCBQUFEgZmFjdG9yZWQgaW4uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX2Zyb21Vbml0cyA9IGZ1bmN0aW9uIChicG0pIHtcblx0ICAgICAgICByZXR1cm4gMSAvICg2MCAvIGJwbSAvIHRoaXMuUFBRKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBmcm9tIGZyZXF1ZW5jeSAod2l0aCBQUFEpIGludG8gQlBNXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gIGZyZXEgVGhlIGNsb2NrcyBmcmVxdWVuY3kgdG8gY29udmVydCB0byBCUE1cblx0XHQgKiAgQHJldHVybiAge0JQTX0gIFRoZSBmcmVxdWVuY3kgdmFsdWUgYXMgQlBNLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLl90b1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gZnJlcSAvIHRoaXMuUFBRICogNjA7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFNZTkNJTkdcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB0aW1lIGFsaWduZWQgdG8gdGhlIG5leHQgc3ViZGl2aXNpb25cblx0XHQgKiAgb2YgdGhlIFRyYW5zcG9ydC4gSWYgdGhlIFRyYW5zcG9ydCBpcyBub3Qgc3RhcnRlZCxcblx0XHQgKiAgaXQgd2lsbCByZXR1cm4gMC5cblx0XHQgKiAgTm90ZTogdGhpcyB3aWxsIG5vdCB3b3JrIHByZWNpc2VseSBkdXJpbmcgdGVtcG8gcmFtcHMuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICBzdWJkaXZpc2lvbiAgVGhlIHN1YmRpdmlzaW9uIHRvIHF1YW50aXplIHRvXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBUaGUgY29udGV4dCB0aW1lIG9mIHRoZSBuZXh0IHN1YmRpdmlzaW9uLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KCk7IC8vdGhlIHRyYW5zcG9ydCBtdXN0IGJlIHN0YXJ0ZWRcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5uZXh0U3ViZGl2aXNpb24oXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5uZXh0U3ViZGl2aXNpb24gPSBmdW5jdGlvbiAoc3ViZGl2aXNpb24pIHtcblx0ICAgICAgICBzdWJkaXZpc2lvbiA9IHRoaXMudG9UaWNrcyhzdWJkaXZpc2lvbik7XG5cdCAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAvL2lmIHRoZSB0cmFuc3BvcnQncyBub3Qgc3RhcnRlZCwgcmV0dXJuIDBcblx0ICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIC8vdGhlIHJlbWFpbmRlciBvZiB0aGUgY3VycmVudCB0aWNrcyBhbmQgdGhlIHN1YmRpdmlzaW9uXG5cdCAgICAgICAgICAgIHZhciB0cmFuc3BvcnRQb3MgPSB0aGlzLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgIHZhciByZW1haW5pbmdUaWNrcyA9IHN1YmRpdmlzaW9uIC0gdHJhbnNwb3J0UG9zICUgc3ViZGl2aXNpb247XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay5uZXh0VGlja1RpbWUocmVtYWluaW5nVGlja3MsIG5vdyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBdHRhY2hlcyB0aGUgc2lnbmFsIHRvIHRoZSB0ZW1wbyBjb250cm9sIHNpZ25hbCBzbyB0aGF0XG5cdFx0ICogIGFueSBjaGFuZ2VzIGluIHRoZSB0ZW1wbyB3aWxsIGNoYW5nZSB0aGUgc2lnbmFsIGluIHRoZSBzYW1lXG5cdFx0ICogIHJhdGlvLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuU2lnbmFsfSBzaWduYWxcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSByYXRpbyBPcHRpb25hbGx5IHBhc3MgaW4gdGhlIHJhdGlvIGJldHdlZW5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdHdvIHNpZ25hbHMuIE90aGVyd2lzZSBpdCB3aWxsIGJlIGNvbXB1dGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gdGhlaXIgY3VycmVudCB2YWx1ZXMuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnN5bmNTaWduYWwgPSBmdW5jdGlvbiAoc2lnbmFsLCByYXRpbykge1xuXHQgICAgICAgIGlmICghcmF0aW8pIHtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIHN5bmMgcmF0aW9cblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIGlmIChzaWduYWwuZ2V0VmFsdWVBdFRpbWUobm93KSAhPT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmF0aW8gPSBzaWduYWwuZ2V0VmFsdWVBdFRpbWUobm93KSAvIHRoaXMuYnBtLmdldFZhbHVlQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByYXRpbyA9IDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHJhdGlvU2lnbmFsID0gbmV3IFRvbmUuR2FpbihyYXRpbyk7XG5cdCAgICAgICAgdGhpcy5icG0uY2hhaW4ocmF0aW9TaWduYWwsIHNpZ25hbC5fcGFyYW0pO1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZFNpZ25hbHMucHVzaCh7XG5cdCAgICAgICAgICAgICdyYXRpbyc6IHJhdGlvU2lnbmFsLFxuXHQgICAgICAgICAgICAnc2lnbmFsJzogc2lnbmFsLFxuXHQgICAgICAgICAgICAnaW5pdGlhbCc6IHNpZ25hbC52YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHNpZ25hbC52YWx1ZSA9IDA7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVuc3luY3MgYSBwcmV2aW91c2x5IHN5bmNlZCBzaWduYWwgZnJvbSB0aGUgdHJhbnNwb3J0J3MgY29udHJvbC5cblx0XHQgKiAgU2VlIFRvbmUuVHJhbnNwb3J0LnN5bmNTaWduYWwuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuU2lnbmFsfSBzaWduYWxcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUudW5zeW5jU2lnbmFsID0gZnVuY3Rpb24gKHNpZ25hbCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9zeW5jZWRTaWduYWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgIHZhciBzeW5jZWRTaWduYWwgPSB0aGlzLl9zeW5jZWRTaWduYWxzW2ldO1xuXHQgICAgICAgICAgICBpZiAoc3luY2VkU2lnbmFsLnNpZ25hbCA9PT0gc2lnbmFsKSB7XG5cdCAgICAgICAgICAgICAgICBzeW5jZWRTaWduYWwucmF0aW8uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgc3luY2VkU2lnbmFsLnNpZ25hbC52YWx1ZSA9IHN5bmNlZFNpZ25hbC5pbml0aWFsO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3luY2VkU2lnbmFscy5zcGxpY2UoaSwgMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jbG9jayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2JwbScpO1xuXHQgICAgICAgIHRoaXMuYnBtID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9yZXBlYXRlZEV2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdElOSVRJQUxJWkFUSU9OXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICB2YXIgVHJhbnNwb3J0Q29uc3RydWN0b3IgPSBUb25lLlRyYW5zcG9ydDtcblx0ICAgIFRvbmUuVHJhbnNwb3J0ID0gbmV3IFRyYW5zcG9ydENvbnN0cnVjdG9yKCk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0LlRyYW5zcG9ydCBpbnN0YW5jZW9mIFRyYW5zcG9ydENvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0ID0gY29udGV4dC5UcmFuc3BvcnQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQgPSBuZXcgVHJhbnNwb3J0Q29uc3RydWN0b3IoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zdG9yZSB0aGUgVHJhbnNwb3J0IG9uIHRoZSBjb250ZXh0IHNvIGl0IGNhbiBiZSByZXRyaWV2ZWQgbGF0ZXJcblx0ICAgICAgICBjb250ZXh0LlRyYW5zcG9ydCA9IFRvbmUuVHJhbnNwb3J0O1xuXHQgICAgfSk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2Nsb3NlJywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5UcmFuc3BvcnQgaW5zdGFuY2VvZiBUcmFuc3BvcnRDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICBjb250ZXh0LlRyYW5zcG9ydC5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlZvbHVtZSBpcyBhIHNpbXBsZSB2b2x1bWUgbm9kZSwgdXNlZnVsIGZvciBjcmVhdGluZyBhIHZvbHVtZSBmYWRlci5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbdm9sdW1lPTBdIHRoZSBpbml0aWFsIHZvbHVtZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB2b2wgPSBuZXcgVG9uZS5Wb2x1bWUoLTEyKTtcblx0XHQgKiBpbnN0cnVtZW50LmNoYWluKHZvbCwgVG9uZS5NYXN0ZXIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Wb2x1bWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd2b2x1bWUnXSwgVG9uZS5Wb2x1bWUpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiB0aGUgb3V0cHV0IG5vZGVcblx0XHRcdCAqIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMudm9sdW1lLCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHVubXV0ZWQgdm9sdW1lXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdW5tdXRlZFZvbHVtZSA9IG9wdGlvbnMudm9sdW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2b2x1bWUgY29udHJvbCBpbiBkZWNpYmVscy5cblx0XHRcdCAqICBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLm91dHB1dC5nYWluO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAvL3NldCB0aGUgbXV0ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Wb2x1bWUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuVm9sdW1lLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVm9sdW1lI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogdm9sdW1lLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVm9sdW1lLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnZvbHVtZS52YWx1ZSA9PT0gLUluZmluaXR5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMubXV0ZSAmJiBtdXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl91bm11dGVkVm9sdW1lID0gdGhpcy52b2x1bWUudmFsdWU7XG5cdCAgICAgICAgICAgICAgICAvL21heWJlIGl0IHNob3VsZCByYW1wIGhlcmU/XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZvbHVtZS52YWx1ZSA9IC1JbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm11dGUgJiYgIW11dGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudm9sdW1lLnZhbHVlID0gdGhpcy5fdW5tdXRlZFZvbHVtZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlZvbHVtZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Wb2x1bWUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5kaXNwb3NlKCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Wb2x1bWU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBzaW5nbGUgbWFzdGVyIG91dHB1dCB3aGljaCBpcyBjb25uZWN0ZWQgdG8gdGhlXG5cdFx0ICogICAgICAgICAgQXVkaW9EZXN0aW5hdGlvbk5vZGUgKGFrYSB5b3VyIHNwZWFrZXJzKS5cblx0XHQgKiAgICAgICAgICBJdCBwcm92aWRlcyB1c2VmdWwgY29udmVuaWVuY2VzIHN1Y2ggYXMgdGhlIGFiaWxpdHlcblx0XHQgKiAgICAgICAgICB0byBzZXQgdGhlIHZvbHVtZSBhbmQgbXV0ZSB0aGUgZW50aXJlIGFwcGxpY2F0aW9uLlxuXHRcdCAqICAgICAgICAgIEl0IGFsc28gZ2l2ZXMgeW91IHRoZSBhYmlsaXR5IHRvIGFwcGx5IG1hc3RlciBlZmZlY3RzIHRvIHlvdXIgYXBwbGljYXRpb24uXG5cdFx0ICogICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBMaWtlIFRvbmUuVHJhbnNwb3J0LCBBIHNpbmdsZSBUb25lLk1hc3RlciBpcyBjcmVhdGVkXG5cdFx0ICogICAgICAgICAgb24gaW5pdGlhbGl6YXRpb24gYW5kIHlvdSBkbyBub3QgbmVlZCB0byBleHBsaWNpdGx5IGNvbnN0cnVjdCBvbmUuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90aGUgYXVkaW8gd2lsbCBnbyBmcm9tIHRoZSBvc2NpbGxhdG9yIHRvIHRoZSBzcGVha2Vyc1xuXHRcdCAqIG9zY2lsbGF0b3IuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdFx0ICogLy9hIGNvbnZlbmllbmNlIGZvciBjb25uZWN0aW5nIHRvIHRoZSBtYXN0ZXIgb3V0cHV0IGlzIGFsc28gcHJvdmlkZWQ6XG5cdFx0ICogb3NjaWxsYXRvci50b01hc3RlcigpO1xuXHRcdCAqIC8vdGhlIGFib3ZlIHR3byBleGFtcGxlcyBhcmUgZXF1aXZhbGVudC5cblx0XHQgKi9cblx0ICAgIFRvbmUuTWFzdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgVG9uZS5nZXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDApO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSBwcml2YXRlIHZvbHVtZSBub2RlXG5cdFx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBtYXN0ZXIgb3V0cHV0LlxuXHRcdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHRcdCAqIEBzaWduYWxcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4odGhpcy5vdXRwdXQsIHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1hc3RlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NYXN0ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5NYXN0ZXIjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiBUb25lLk1hc3Rlci5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1hc3Rlci5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBtYXN0ZXIgZWZmZWN0cyBjaGFpbi4gTk9URTogdGhpcyB3aWxsIGRpc2Nvbm5lY3QgYW55IG5vZGVzIHdoaWNoIHdlcmUgcHJldmlvdXNseVxuXHRcdCAqICBjaGFpbmVkIGluIHRoZSBtYXN0ZXIgZWZmZWN0cyBjaGFpbi5cblx0XHQgKiAgQHBhcmFtIHtBdWRpb05vZGV8VG9uZX0gYXJncy4uLiBBbGwgYXJndW1lbnRzIHdpbGwgYmUgY29ubmVjdGVkIGluIGEgcm93XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBNYXN0ZXIgd2lsbCBiZSByb3V0ZWQgdGhyb3VnaCBpdC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTWFzdGVyfSAgdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc29tZSBvdmVyYWxsIGNvbXByZXNzaW9uIHRvIGtlZXAgdGhlIGxldmVscyBpbiBjaGVja1xuXHRcdCAqIHZhciBtYXN0ZXJDb21wcmVzc29yID0gbmV3IFRvbmUuQ29tcHJlc3Nvcih7XG5cdFx0ICogXHRcInRocmVzaG9sZFwiIDogLTYsXG5cdFx0ICogXHRcInJhdGlvXCIgOiAzLFxuXHRcdCAqIFx0XCJhdHRhY2tcIiA6IDAuNSxcblx0XHQgKiBcdFwicmVsZWFzZVwiIDogMC4xXG5cdFx0ICogfSk7XG5cdFx0ICogLy9naXZlIGEgbGl0dGxlIGJvb3N0IHRvIHRoZSBsb3dzXG5cdFx0ICogdmFyIGxvd0J1bXAgPSBuZXcgVG9uZS5GaWx0ZXIoMjAwLCBcImxvd3NoZWxmXCIpO1xuXHRcdCAqIC8vcm91dGUgZXZlcnl0aGluZyB0aHJvdWdoIHRoZSBmaWx0ZXJcblx0XHQgKiAvL2FuZCBjb21wcmVzc29yIGJlZm9yZSBnb2luZyB0byB0aGUgc3BlYWtlcnNcblx0XHQgKiBUb25lLk1hc3Rlci5jaGFpbihsb3dCdW1wLCBtYXN0ZXJDb21wcmVzc29yKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTWFzdGVyLnByb3RvdHlwZS5jaGFpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmlucHV0LmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLmlucHV0LmNoYWluLmFwcGx5KHRoaXMuaW5wdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuTWFzdGVyfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NYXN0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBVUdNRU5UIFRPTkUncyBQUk9UT1RZUEVcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIENvbm5lY3QgJ3RoaXMnIHRvIHRoZSBtYXN0ZXIgb3V0cHV0LiBTaG9ydGhhbmQgZm9yIHRoaXMuY29ubmVjdChUb25lLk1hc3Rlcilcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jb25uZWN0IGFuIG9zY2lsbGF0b3IgdG8gdGhlIG1hc3RlciBvdXRwdXRcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLnRvTWFzdGVyKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUudG9NYXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICBpZiAod2luZG93LkF1ZGlvTm9kZSkge1xuXHQgICAgICAgIC8vIEFsc28gYXVnbWVudCBBdWRpb05vZGUncyBwcm90b3R5cGUgdG8gaW5jbHVkZSB0b01hc3RlciBhcyBhIGNvbnZlbmllbmNlXG5cdCAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS50b01hc3RlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgIH1cblx0ICAgIC8qKlxuXHRcdCAqICBpbml0aWFsaXplIHRoZSBtb2R1bGUgYW5kIGxpc3RlbiBmb3IgbmV3IGF1ZGlvIGNvbnRleHRzXG5cdFx0ICovXG5cdCAgICB2YXIgTWFzdGVyQ29uc3RydWN0b3IgPSBUb25lLk1hc3Rlcjtcblx0ICAgIFRvbmUuTWFzdGVyID0gbmV3IE1hc3RlckNvbnN0cnVjdG9yKCk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIC8vIGlmIGl0IGFscmVhZHkgZXhpc3RzLCBqdXN0IHJlc3RvcmUgaXRcblx0ICAgICAgICBpZiAoY29udGV4dC5NYXN0ZXIgaW5zdGFuY2VvZiBNYXN0ZXJDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICBUb25lLk1hc3RlciA9IGNvbnRleHQuTWFzdGVyO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIFRvbmUuTWFzdGVyID0gbmV3IE1hc3RlckNvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGNvbnRleHQuTWFzdGVyID0gVG9uZS5NYXN0ZXI7XG5cdCAgICB9KTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignY2xvc2UnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0Lk1hc3RlciBpbnN0YW5jZW9mIE1hc3RlckNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIGNvbnRleHQuTWFzdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLk1hc3Rlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCYXNlIGNsYXNzIGZvciBzb3VyY2VzLiBTb3VyY2VzIGhhdmUgc3RhcnQvc3RvcCBtZXRob2RzXG5cdFx0ICogICAgICAgICAgYW5kIHRoZSBhYmlsaXR5IHRvIGJlIHN5bmNlZCB0byB0aGVcblx0XHQgKiAgICAgICAgICBzdGFydC9zdG9wIG9mIFRvbmUuVHJhbnNwb3J0LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9NdWx0aXBsZSBzdGF0ZSBjaGFuZ2UgZXZlbnRzIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLFxuXHRcdCAqIC8vYnV0IG11c3QgYmUgc2V0IGluIHRoZSBjb3JyZWN0IG9yZGVyIGFuZCB3aXRoIGFzY2VuZGluZyB0aW1lc1xuXHRcdCAqXG5cdFx0ICogLy8gT0tcblx0XHQgKiBzdGF0ZS5zdGFydCgpLnN0b3AoXCIrMC4yXCIpO1xuXHRcdCAqIC8vIEFORFxuXHRcdCAqIHN0YXRlLnN0YXJ0KCkuc3RvcChcIiswLjJcIikuc3RhcnQoXCIrMC40XCIpLnN0b3AoXCIrMC43XCIpXG5cdFx0ICpcblx0XHQgKiAvLyBCQURcblx0XHQgKiBzdGF0ZS5zdG9wKFwiKzAuMlwiKS5zdGFydCgpO1xuXHRcdCAqIC8vIE9SXG5cdFx0ICogc3RhdGUuc3RhcnQoXCIrMC4zXCIpLnN0b3AoXCIrMC4yXCIpO1xuXHRcdCAqXG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlNvdXJjZS5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IHZvbHVtZSBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIHNvdXJjZS52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBcdEtlZXAgdHJhY2sgb2YgdGhlIHNjaGVkdWxlZCBzdGF0ZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZVN0YXRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG5ldyBUb25lLlRpbWVsaW5lU3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5tZW1vcnkgPSAxMDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHN5bmNlZCBgc3RhcnRgIGNhbGxiYWNrIGZ1bmN0aW9uIGZyb20gdGhlIHRyYW5zcG9ydFxuXHRcdFx0ICogIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgS2VlcCB0cmFjayBvZiBhbGwgb2YgdGhlIHNjaGVkdWxlZCBldmVudCBpZHNcblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSBbXTtcblx0ICAgICAgICAvL21ha2UgdGhlIG91dHB1dCBleHBsaWNpdGx5IHN0ZXJlb1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudCA9IDI7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLm91dHB1dC5vdXRwdXQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgLy9tdXRlIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNvdXJjZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNvdXJjZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUoVG9uZS5UcmFuc3BvcnQuc2Vjb25kcyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiBzb3VyY2UubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Tb3VyY2UucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvL292ZXJ3cml0ZSB0aGVzZSBmdW5jdGlvbnNcblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5fc3RhcnQgPSBUb25lLm5vT3A7XG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUucmVzdGFydCA9IFRvbmUubm9PcDtcblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5fc3RvcCA9IFRvbmUubm9PcDtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgc291cmNlIGF0IHRoZSBzcGVjaWZpZWQgdGltZS4gSWYgbm8gdGltZSBpcyBnaXZlbixcblx0XHQgKiAgc3RhcnQgdGhlIHNvdXJjZSBub3cuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgc291cmNlIHNob3VsZCBiZSBzdGFydGVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RhcnQoXCIrMC41XCIpOyAvL3N0YXJ0cyB0aGUgc291cmNlIDAuNSBzZWNvbmRzIGZyb20gbm93XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0LCBkdXJhdGlvbikge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGltZSkgJiYgdGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydC5zZWNvbmRzO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9pZiBpdCdzIHN0YXJ0ZWQsIHN0b3AgaXQgYW5kIHJlc3RhcnQgaXRcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RhcnRlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMucmVzdGFydCh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIG9mZnNldCB0aW1lIHRvIHRoZSBldmVudFxuXHQgICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgZXZlbnQub2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgICAgICAgICBldmVudC5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNjaGVkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCh0LCBvZmZzZXQsIGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgdGltZSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWQucHVzaChzY2hlZCk7XG5cdCAgICAgICAgICAgICAgICAvL2lmIGl0J3MgYWxyZWFkeSBzdGFydGVkXG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNlZFN0YXJ0KHRoaXMubm93KCksIFRvbmUuVHJhbnNwb3J0LnNlY29uZHMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgc291cmNlIGF0IHRoZSBzcGVjaWZpZWQgdGltZS4gSWYgbm8gdGltZSBpcyBnaXZlbixcblx0XHQgKiAgc3RvcCB0aGUgc291cmNlIG5vdy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBzb3VyY2Ugc2hvdWxkIGJlIHN0b3BwZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zdG9wKCk7IC8vIHN0b3BzIHRoZSBzb3VyY2UgaW1tZWRpYXRlbHlcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRpbWUpICYmIHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnQuc2Vjb25kcztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghdGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3AuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgc2NoZWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZSh0aGlzLl9zdG9wLmJpbmQodGhpcyksIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWQucHVzaChzY2hlZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTeW5jIHRoZSBzb3VyY2UgdG8gdGhlIFRyYW5zcG9ydCBzbyB0aGF0IGFsbCBzdWJzZXF1ZW50XG5cdFx0ICogIGNhbGxzIHRvIGBzdGFydGAgYW5kIGBzdG9wYCBhcmUgc3luY2VkIHRvIHRoZSBUcmFuc3BvcnRUaW1lXG5cdFx0ICogIGluc3RlYWQgb2YgdGhlIEF1ZGlvQ29udGV4dCB0aW1lLlxuXHRcdCAqXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc3luYyB0aGUgc291cmNlIHNvIHRoYXQgaXQgcGxheXMgYmV0d2VlbiAwIGFuZCAwLjMgb24gdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lXG5cdFx0ICogc291cmNlLnN5bmMoKS5zdGFydCgwKS5zdG9wKDAuMyk7XG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KCk7XG5cdFx0ICpcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgd2l0aCBhbiBvZmZzZXQgYW5kIHRoZSBzeW5jJ2VkIHNvdXJjZXNcblx0XHQgKiAvL3dpbGwgc3RhcnQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb25cblx0XHQgKiBzb3VyY2Uuc3luYygpLnN0YXJ0KDAuMSk7XG5cdFx0ICogLy90aGUgc291cmNlIHdpbGwgYmUgaW52b2tlZCB3aXRoIGFuIG9mZnNldCBvZiAwLjRcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydChcIiswLjVcIiwgMC41KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZCA9IHRydWU7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkU3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIGlmIChvZmZzZXQgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIHBsYXliYWNrIHN0YXRlIGF0IHRoYXQgdGltZVxuXHQgICAgICAgICAgICAgICAgdmFyIHN0YXRlRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQob2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgIC8vIGxpc3RlbiBmb3Igc3RhcnQgZXZlbnRzIHdoaWNoIG1heSBvY2N1ciBpbiB0aGUgbWlkZGxlIG9mIHRoZSBzeW5jJ2VkIHRpbWVcblx0ICAgICAgICAgICAgICAgIGlmIChzdGF0ZUV2ZW50ICYmIHN0YXRlRXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBzdGF0ZUV2ZW50LnRpbWUgIT09IG9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgb2Zmc2V0XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gb2Zmc2V0IC0gdGhpcy50b1NlY29uZHMoc3RhdGVFdmVudC50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlRXZlbnQuZHVyYXRpb24pIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhzdGF0ZUV2ZW50LmR1cmF0aW9uKSAtIHN0YXJ0T2Zmc2V0O1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCh0aW1lLCB0aGlzLnRvU2Vjb25kcyhzdGF0ZUV2ZW50Lm9mZnNldCkgKyBzdGFydE9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZFN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB2YXIgc2Vjb25kcyA9IFRvbmUuVHJhbnNwb3J0LmdldFNlY29uZHNBdFRpbWUoTWF0aC5tYXgodGltZSAtIHRoaXMuc2FtcGxlVGltZSwgMCkpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUoc2Vjb25kcykgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5vbignc3RhcnQgbG9vcFN0YXJ0JywgdGhpcy5fc3luY2VkU3RhcnQpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9uKCdzdG9wIHBhdXNlIGxvb3BFbmQnLCB0aGlzLl9zeW5jZWRTdG9wKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVW5zeW5jIHRoZSBzb3VyY2UgdG8gdGhlIFRyYW5zcG9ydC4gU2VlIFRvbmUuU291cmNlLnN5bmNcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQub2ZmKCdzdG9wIHBhdXNlIGxvb3BFbmQnLCB0aGlzLl9zeW5jZWRTdG9wKTtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQub2ZmKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9zeW5jZWRTdGFydCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3N5bmNlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8vIGNsZWFyIGFsbCBvZiB0aGUgc2NoZWR1bGVkIGlkc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2NoZWR1bGVkLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBpZCA9IHRoaXMuX3NjaGVkdWxlZFtpXTtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQuY2xlYXIoaWQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSBbXTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwoMCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICpcdENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLnVuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Tb3VyY2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBBdWRpb0J1ZmZlci5jb3B5VG8vRnJvbUNoYW5uZWwgcG9seWZpbGxcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghQXVkaW9CdWZmZXIucHJvdG90eXBlLmNvcHlUb0NoYW5uZWwpIHtcblx0ICAgICAgICAgICAgQXVkaW9CdWZmZXIucHJvdG90eXBlLmNvcHlUb0NoYW5uZWwgPSBmdW5jdGlvbiAoc3JjLCBjaGFuTnVtLCBzdGFydCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSB0aGlzLmdldENoYW5uZWxEYXRhKGNoYW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydCB8fCAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFubmVsLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpICsgc3RhcnRdID0gc3JjW2ldO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBBdWRpb0J1ZmZlci5wcm90b3R5cGUuY29weUZyb21DaGFubmVsID0gZnVuY3Rpb24gKGRlc3QsIGNoYW5OdW0sIHN0YXJ0KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IHRoaXMuZ2V0Q2hhbm5lbERhdGEoY2hhbk51bSk7XG5cdCAgICAgICAgICAgICAgICBzdGFydCA9IHN0YXJ0IHx8IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlc3QubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBkZXN0W2ldID0gY2hhbm5lbFtpICsgc3RhcnRdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCdWZmZXIgbG9hZGluZyBhbmQgc3RvcmFnZS4gVG9uZS5CdWZmZXIgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IGFsbFxuXHRcdCAqICAgICAgICAgIGNsYXNzZXMgdGhhdCBtYWtlIHJlcXVlc3RzIGZvciBhdWRpbyBmaWxlcyBzdWNoIGFzIFRvbmUuUGxheWVyLFxuXHRcdCAqICAgICAgICAgIFRvbmUuU2FtcGxlciBhbmQgVG9uZS5Db252b2x2ZXIuXG5cdFx0ICpcblx0XHQgKiAgICAgICAgICBBc2lkZSBmcm9tIGxvYWQgY2FsbGJhY2tzIGZyb20gaW5kaXZpZHVhbCBidWZmZXJzLCBUb25lLkJ1ZmZlclxuXHRcdCAqICBcdFx0cHJvdmlkZXMgZXZlbnRzIHdoaWNoIGtlZXAgdHJhY2sgb2YgdGhlIGxvYWRpbmcgcHJvZ3Jlc3Ncblx0XHQgKiAgXHRcdG9mIF9hbGxfIG9mIHRoZSBidWZmZXJzLiBUaGVzZSBhcmUgVG9uZS5CdWZmZXIub24oXCJsb2FkXCIgLyBcInByb2dyZXNzXCIgLyBcImVycm9yXCIpXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvQnVmZmVyfFN0cmluZ30gdXJsIFRoZSB1cmwgdG8gbG9hZCwgb3IgdGhlIGF1ZGlvIGJ1ZmZlciB0byBzZXQuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb249fSBvbmxvYWQgQSBjYWxsYmFjayB3aGljaCBpcyBpbnZva2VkIGFmdGVyIHRoZSBidWZmZXIgaXMgbG9hZGVkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIGBUb25lLkJ1ZmZlci5vbignbG9hZCcsIGNhbGxiYWNrKWAgaW5zdGVhZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmNlIGl0IHdpbGwgZ2l2ZSB5b3UgYSBjYWxsYmFjayB3aGVuIF9hbGxfIGJ1ZmZlcnMgYXJlIGxvYWRlZC5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9uZXJyb3IgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBpZiB0aGVyZSBpcyBhbiBlcnJvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBidWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIoXCJwYXRoL3RvL3NvdW5kLm1wM1wiLCBmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly90aGUgYnVmZmVyIGlzIG5vdyBhdmFpbGFibGUuXG5cdFx0ICogXHR2YXIgYnVmZiA9IGJ1ZmZlci5nZXQoKTtcblx0XHQgKiB9KTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NhbiBsb2FkIHByb3ZpZGUgZmFsbGJhY2sgZXh0ZW5zaW9uIHR5cGVzIGlmIHRoZSBmaXJzdCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuXG5cdFx0ICogdmFyIGJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihcInBhdGgvdG8vc291bmQuW21wM3xvZ2d8d2F2XVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3VybCcsXG5cdCAgICAgICAgICAgICdvbmxvYWQnLFxuXHQgICAgICAgICAgICAnb25lcnJvcidcblx0ICAgICAgICBdLCBUb25lLkJ1ZmZlcik7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHN0b3JlcyB0aGUgbG9hZGVkIEF1ZGlvQnVmZmVyXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGluZGljYXRlcyBpZiB0aGUgYnVmZmVyIHNob3VsZCBiZSByZXZlcnNlZCBvciBub3Rcblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmV2ZXJzZWQgPSBvcHRpb25zLnJldmVyc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIFhIUlxuXHRcdFx0ICogIEB0eXBlICB7WE1MSHR0cFJlcXVlc3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3hociA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBQcml2YXRlIGNhbGxiYWNrIHdoZW4gdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25sb2FkID0gVG9uZS5ub09wO1xuXHQgICAgICAgIGlmIChvcHRpb25zLnVybCBpbnN0YW5jZW9mIEF1ZGlvQnVmZmVyIHx8IG9wdGlvbnMudXJsIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5zZXQob3B0aW9ucy51cmwpO1xuXHQgICAgICAgICAgICAvLyBpbnZva2UgdGhlIG9ubG9hZCBjYWxsYmFja1xuXHQgICAgICAgICAgICBpZiAob3B0aW9ucy5vbmxvYWQpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvYWRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25sb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbmxvYWQgPSBvcHRpb25zLm9ubG9hZDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhvcHRpb25zLnVybCkpIHtcblx0ICAgICAgICAgICAgdGhpcy5sb2FkKG9wdGlvbnMudXJsKS50aGVuKG9wdGlvbnMub25sb2FkKS5jYXRjaChvcHRpb25zLm9uZXJyb3IpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJ1ZmZlcik7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3VybCc6IHVuZGVmaW5lZCxcblx0ICAgICAgICAncmV2ZXJzZSc6IGZhbHNlLFxuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ29uZXJyb3InOiBUb25lLm5vT3Bcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGFzcyBpbiBhbiBBdWRpb0J1ZmZlciBvciBUb25lLkJ1ZmZlciB0byBzZXQgdGhlIHZhbHVlXG5cdFx0ICogIG9mIHRoaXMgYnVmZmVyLlxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvQnVmZmVyfFRvbmUuQnVmZmVyfSBidWZmZXIgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIGlmIChidWZmZXIubG9hZGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9idWZmZXIgPSBidWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBidWZmZXIuX29ubG9hZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnNldChidWZmZXIpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IGJ1ZmZlcjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEByZXR1cm4ge0F1ZGlvQnVmZmVyfSBUaGUgYXVkaW8gYnVmZmVyIHN0b3JlZCBpbiB0aGUgb2JqZWN0LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBNYWtlcyBhbiB4aHIgcmVxZXN0IGZvciB0aGUgc2VsZWN0ZWQgdXJsIHRoZW4gZGVjb2Rlc1xuXHRcdCAqICB0aGUgZmlsZSBhcyBhbiBhdWRpbyBidWZmZXIuIEludm9rZXNcblx0XHQgKiAgdGhlIGNhbGxiYWNrIG9uY2UgdGhlIGF1ZGlvIGJ1ZmZlciBsb2Fkcy5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgdXJsIG9mIHRoZSBidWZmZXIgdG8gbG9hZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICBmaWxldHlwZSBzdXBwb3J0IGRlcGVuZHMgb24gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgYnJvd3Nlci5cblx0XHQgKiAgQHJldHVybnMge1Byb21pc2V9IHJldHVybnMgYSBQcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggdGhlIFRvbmUuQnVmZmVyXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uICh1cmwsIG9ubG9hZCwgb25lcnJvcikge1xuXHQgICAgICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKGxvYWQsIGVycm9yKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3hociA9IFRvbmUuQnVmZmVyLmxvYWQodXJsLCAvL3N1Y2Nlc3Ncblx0ICAgICAgICAgICAgZnVuY3Rpb24gKGJ1ZmYpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3hociA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNldChidWZmKTtcblx0ICAgICAgICAgICAgICAgIGxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICBpZiAob25sb2FkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb25sb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LmJpbmQodGhpcyksIC8vZXJyb3Jcblx0ICAgICAgICAgICAgZnVuY3Rpb24gKGVycikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIGVycm9yKGVycik7XG5cdCAgICAgICAgICAgICAgICBpZiAob25lcnJvcikge1xuXHQgICAgICAgICAgICAgICAgICAgIG9uZXJyb3IoZXJyKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHJldHVybiBwcm9taXNlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNwb3NlIGFuZCBkaXNjb25uZWN0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgaWYgKHRoaXMuX3hocikge1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5fcmVtb3ZlRnJvbURvd25sb2FkUXVldWUodGhpcy5feGhyKTtcblx0ICAgICAgICAgICAgdGhpcy5feGhyLmFib3J0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3hociA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXIgaXMgbG9hZGVkIG9yIG5vdFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA+IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZHVyYXRpb24gb2YgdGhlIGJ1ZmZlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBkdXJhdGlvblxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ2R1cmF0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fYnVmZmVyKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciBpbiBzYW1wbGVzXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgbGVuZ3RoXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fYnVmZmVyKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmxlbmd0aDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIGRpc2NyZXRlIGF1ZGlvIGNoYW5uZWxzLiBSZXR1cm5zIDAgaWYgbm8gYnVmZmVyXG5cdFx0ICogaXMgbG9hZGVkLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIG51bWJlck9mQ2hhbm5lbHNcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdudW1iZXJPZkNoYW5uZWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fYnVmZmVyKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgYXVkaW8gYnVmZmVyIGZyb20gdGhlIGFycmF5LiBUbyBjcmVhdGUgYSBtdWx0aWNoYW5uZWwgQXVkaW9CdWZmZXIsXG5cdFx0ICogIHBhc3MgaW4gYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LlxuXHRcdCAqICBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZpbGwgdGhlIGF1ZGlvIGJ1ZmZlclxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSkge1xuXHQgICAgICAgIHZhciBpc011bHRpZGltZW5zaW9uYWwgPSBhcnJheVswXS5sZW5ndGggPiAwO1xuXHQgICAgICAgIHZhciBjaGFubmVscyA9IGlzTXVsdGlkaW1lbnNpb25hbCA/IGFycmF5Lmxlbmd0aCA6IDE7XG5cdCAgICAgICAgdmFyIGxlbiA9IGlzTXVsdGlkaW1lbnNpb25hbCA/IGFycmF5WzBdLmxlbmd0aCA6IGFycmF5Lmxlbmd0aDtcblx0ICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlcihjaGFubmVscywgbGVuLCB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgaWYgKCFpc011bHRpZGltZW5zaW9uYWwgJiYgY2hhbm5lbHMgPT09IDEpIHtcblx0ICAgICAgICAgICAgYXJyYXkgPSBbYXJyYXldO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNoYW5uZWxzOyBjKyspIHtcblx0ICAgICAgICAgICAgYnVmZmVyLmNvcHlUb0NoYW5uZWwoYXJyYXlbY10sIGMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogXHRTdW1zIG11bGlwbGUgY2hhbm5lbHMgaW50byAxIGNoYW5uZWxcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBjaGFubmVsIE9wdGlvbmFsbHkgb25seSBjb3B5IGEgc2luZ2xlIGNoYW5uZWwgZnJvbSB0aGUgYXJyYXkuXG5cdFx0ICogIEByZXR1cm4ge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnRvTW9ubyA9IGZ1bmN0aW9uIChjaGFuTnVtKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIoY2hhbk51bSkpIHtcblx0ICAgICAgICAgICAgdGhpcy5mcm9tQXJyYXkodGhpcy50b0FycmF5KGNoYW5OdW0pKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgb3V0cHV0QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMubGVuZ3RoKTtcblx0ICAgICAgICAgICAgdmFyIG51bUNoYW5uZWxzID0gdGhpcy5udW1iZXJPZkNoYW5uZWxzO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsID0gMDsgY2hhbm5lbCA8IG51bUNoYW5uZWxzOyBjaGFubmVsKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsQXJyYXkgPSB0aGlzLnRvQXJyYXkoY2hhbm5lbCk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5uZWxBcnJheS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIG91dHB1dEFycmF5W2ldICs9IGNoYW5uZWxBcnJheVtpXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL2RpdmlkZSBieSB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzXG5cdCAgICAgICAgICAgIG91dHB1dEFycmF5ID0gb3V0cHV0QXJyYXkubWFwKGZ1bmN0aW9uIChzYW1wbGUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBzYW1wbGUgLyBudW1DaGFubmVscztcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuZnJvbUFycmF5KG91dHB1dEFycmF5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogXHRHZXQgdGhlIGJ1ZmZlciBhcyBhbiBhcnJheS4gU2luZ2xlIGNoYW5uZWwgYnVmZmVycyB3aWxsIHJldHVybiBhIDEtZGltZW5zaW9uYWxcblx0XHQgKiBcdEZsb2F0MzJBcnJheSwgYW5kIG11bHRpY2hhbm5lbCBidWZmZXJzIHdpbGwgcmV0dXJuIG11bHRpZGltZW5zaW9uYWwgYXJyYXlzLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IGNoYW5uZWwgT3B0aW9uYWxseSBvbmx5IGNvcHkgYSBzaW5nbGUgY2hhbm5lbCBmcm9tIHRoZSBhcnJheS5cblx0XHQgKiAgQHJldHVybiB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIChjaGFubmVsKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIoY2hhbm5lbCkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2hhbm5lbERhdGEoY2hhbm5lbCk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLm51bWJlck9mQ2hhbm5lbHMgPT09IDEpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9BcnJheSgwKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgcmV0ID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgdGhpcy5udW1iZXJPZkNoYW5uZWxzOyBjKyspIHtcblx0ICAgICAgICAgICAgICAgIHJldFtjXSA9IHRoaXMuZ2V0Q2hhbm5lbERhdGEoYyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHJldDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIEZsb2F0MzJBcnJheSByZXByZXNlbnRpbmcgdGhlIFBDTSBhdWRpbyBkYXRhIGZvciB0aGUgc3BlY2lmaWMgY2hhbm5lbC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgY2hhbm5lbCAgVGhlIGNoYW5uZWwgbnVtYmVyIHRvIHJldHVyblxuXHRcdCAqICBAcmV0dXJuICB7RmxvYXQzMkFycmF5fSAgVGhlIGF1ZGlvIGFzIGEgVHlwZWRBcnJheVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLmdldENoYW5uZWxEYXRhID0gZnVuY3Rpb24gKGNoYW5uZWwpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmdldENoYW5uZWxEYXRhKGNoYW5uZWwpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDdXQgYSBzdWJzZWN0aW9uIG9mIHRoZSBhcnJheSBhbmQgcmV0dXJuIGEgYnVmZmVyIG9mIHRoZVxuXHRcdCAqICBzdWJzZWN0aW9uLiBEb2VzIG5vdCBtb2RpZnkgdGhlIG9yaWdpbmFsIGJ1ZmZlclxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0IFRoZSB0aW1lIHRvIHN0YXJ0IHRoZSBzbGljZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBlbmQgVGhlIGVuZCB0aW1lIHRvIHNsaWNlLiBJZiBub25lIGlzIGdpdmVuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICB3aWxsIGRlZmF1bHQgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiAoc3RhcnQsIGVuZCkge1xuXHQgICAgICAgIGVuZCA9IFRvbmUuZGVmYXVsdEFyZyhlbmQsIHRoaXMuZHVyYXRpb24pO1xuXHQgICAgICAgIHZhciBzdGFydFNhbXBsZXMgPSBNYXRoLmZsb29yKHRoaXMuY29udGV4dC5zYW1wbGVSYXRlICogdGhpcy50b1NlY29uZHMoc3RhcnQpKTtcblx0ICAgICAgICB2YXIgZW5kU2FtcGxlcyA9IE1hdGguZmxvb3IodGhpcy5jb250ZXh0LnNhbXBsZVJhdGUgKiB0aGlzLnRvU2Vjb25kcyhlbmQpKTtcblx0ICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubnVtYmVyT2ZDaGFubmVsczsgaSsrKSB7XG5cdCAgICAgICAgICAgIHJlcGxhY2VtZW50W2ldID0gdGhpcy50b0FycmF5KGkpLnNsaWNlKHN0YXJ0U2FtcGxlcywgZW5kU2FtcGxlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciByZXRCdWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIoKS5mcm9tQXJyYXkocmVwbGFjZW1lbnQpO1xuXHQgICAgICAgIHJldHVybiByZXRCdWZmZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldmVyc2UgdGhlIGJ1ZmZlci5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5fcmV2ZXJzZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm51bWJlck9mQ2hhbm5lbHM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbCh0aGlzLmdldENoYW5uZWxEYXRhKGkpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXZlcnNlIHRoZSBidWZmZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIHJldmVyc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdyZXZlcnNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2ZXJzZWQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyZXYpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3JldmVyc2VkICE9PSByZXYpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JldmVyc2VkID0gcmV2O1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmV2ZXJzZSgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIFNUQVRJQyBNRVRIT0RTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vc3RhdGljYWxseSBpbmhlcml0cyBFbWl0dGVyIG1ldGhvZHNcblx0ICAgIFRvbmUuRW1pdHRlci5taXhpbihUb25lLkJ1ZmZlcik7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIHN0YXRpYyBxdWV1ZSBmb3IgYWxsIG9mIHRoZSB4aHIgcmVxdWVzdHNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUgPSBbXTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIHBhdGggd2hpY2ggaXMgcHJlZml4ZWQgYmVmb3JlIGV2ZXJ5IHVybC5cblx0XHQgKiAgQHR5cGUgIHtTdHJpbmd9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmJhc2VVcmwgPSAnJztcblx0ICAgIC8qKlxuXHRcdCAqICBDcmVhdGUgYSBUb25lLkJ1ZmZlciBmcm9tIHRoZSBhcnJheS4gVG8gY3JlYXRlIGEgbXVsdGljaGFubmVsIEF1ZGlvQnVmZmVyLFxuXHRcdCAqICBwYXNzIGluIGEgbXVsdGlkaW1lbnNpb25hbCBhcnJheS5cblx0XHQgKiAgQHBhcmFtIHtGbG9hdDMyQXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsIHRoZSBhdWRpbyBidWZmZXJcblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9IEEgVG9uZS5CdWZmZXIgY3JlYXRlZCBmcm9tIHRoZSBhcnJheVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KSB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyBUb25lLkJ1ZmZlcigpLmZyb21BcnJheShhcnJheSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ3JlYXRlcyBhIFRvbmUuQnVmZmVyIGZyb20gYSBVUkwsIHJldHVybnMgYSBwcm9taXNlXG5cdFx0ICogd2hpY2ggcmVzb2x2ZXMgdG8gYSBUb25lLkJ1ZmZlclxuXHRcdCAqIEBwYXJhbSAge1N0cmluZ30gdXJsIFRoZSB1cmwgdG8gbG9hZC5cblx0XHQgKiBAcmV0dXJuIHtQcm9taXNlPFRvbmUuQnVmZmVyPn0gICAgIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byBhIFRvbmUuQnVmZmVyXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5mcm9tVXJsID0gZnVuY3Rpb24gKHVybCkge1xuXHQgICAgICAgIHZhciBidWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIoKTtcblx0ICAgICAgICByZXR1cm4gYnVmZmVyLmxvYWQodXJsKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZW1vdmUgYW4geGhyIHJlcXVlc3QgZnJvbSB0aGUgZG93bmxvYWQgcXVldWVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlID0gZnVuY3Rpb24gKHJlcXVlc3QpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5pbmRleE9mKHJlcXVlc3QpO1xuXHQgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIExvYWRzIGEgdXJsIHVzaW5nIFhNTEh0dHBSZXF1ZXN0LlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdXJsXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IG9ubG9hZFxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBvbmVycm9yXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IG9ucHJvZ3Jlc3Ncblx0XHQgKiAgQHJldHVybiB7WE1MSHR0cFJlcXVlc3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5sb2FkID0gZnVuY3Rpb24gKHVybCwgb25sb2FkLCBvbmVycm9yKSB7XG5cdCAgICAgICAgLy9kZWZhdWx0XG5cdCAgICAgICAgb25sb2FkID0gVG9uZS5kZWZhdWx0QXJnKG9ubG9hZCwgVG9uZS5ub09wKTtcblx0ICAgICAgICAvLyB0ZXN0IGlmIHRoZSB1cmwgY29udGFpbnMgbXVsdGlwbGUgZXh0ZW5zaW9uc1xuXHQgICAgICAgIHZhciBtYXRjaGVzID0gdXJsLm1hdGNoKC9cXFsoLitcXHw/KStcXF0kLyk7XG5cdCAgICAgICAgaWYgKG1hdGNoZXMpIHtcblx0ICAgICAgICAgICAgdmFyIGV4dGVuc2lvbnMgPSBtYXRjaGVzWzFdLnNwbGl0KCd8Jyk7XG5cdCAgICAgICAgICAgIHZhciBleHRlbnNpb24gPSBleHRlbnNpb25zWzBdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLkJ1ZmZlci5zdXBwb3J0c1R5cGUoZXh0ZW5zaW9uc1tpXSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24gPSBleHRlbnNpb25zW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKG1hdGNoZXNbMF0sIGV4dGVuc2lvbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoZSkge1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5fcmVtb3ZlRnJvbURvd25sb2FkUXVldWUocmVxdWVzdCk7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLmVtaXQoJ2Vycm9yJywgZSk7XG5cdCAgICAgICAgICAgIGlmIChvbmVycm9yKSB7XG5cdCAgICAgICAgICAgICAgICBvbmVycm9yKGUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBvblByb2dyZXNzKCkge1xuXHQgICAgICAgICAgICAvL2NhbGN1bGF0ZSB0aGUgcHJvZ3Jlc3Ncblx0ICAgICAgICAgICAgdmFyIHRvdGFsUHJvZ3Jlc3MgPSAwO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0b3RhbFByb2dyZXNzICs9IFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlW2ldLnByb2dyZXNzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLmVtaXQoJ3Byb2dyZXNzJywgdG90YWxQcm9ncmVzcyAvIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLmxlbmd0aCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdCAgICAgICAgcmVxdWVzdC5vcGVuKCdHRVQnLCBUb25lLkJ1ZmZlci5iYXNlVXJsICsgdXJsLCB0cnVlKTtcblx0ICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XG5cdCAgICAgICAgLy9zdGFydCBvdXQgYXMgMFxuXHQgICAgICAgIHJlcXVlc3QucHJvZ3Jlc3MgPSAwO1xuXHQgICAgICAgIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLnB1c2gocmVxdWVzdCk7XG5cdCAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCkge1xuXHQgICAgICAgICAgICAgICAgVG9uZS5jb250ZXh0LmRlY29kZUF1ZGlvRGF0YShyZXF1ZXN0LnJlc3BvbnNlKS50aGVuKGZ1bmN0aW9uIChidWZmKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5wcm9ncmVzcyA9IDE7XG5cdCAgICAgICAgICAgICAgICAgICAgb25Qcm9ncmVzcygpO1xuXHQgICAgICAgICAgICAgICAgICAgIG9ubG9hZChidWZmKTtcblx0ICAgICAgICAgICAgICAgICAgICBUb25lLkJ1ZmZlci5fcmVtb3ZlRnJvbURvd25sb2FkUXVldWUocmVxdWVzdCk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvL2VtaXQgdGhlIGV2ZW50IGF0IHRoZSBlbmRcblx0ICAgICAgICAgICAgICAgICAgICAgICAgVG9uZS5CdWZmZXIuZW1pdCgnbG9hZCcpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBUb25lLkJ1ZmZlci5fcmVtb3ZlRnJvbURvd25sb2FkUXVldWUocmVxdWVzdCk7XG5cdCAgICAgICAgICAgICAgICAgICAgb25FcnJvcignVG9uZS5CdWZmZXI6IGNvdWxkIG5vdCBkZWNvZGUgYXVkaW8gZGF0YTogJyArIHVybCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIG9uRXJyb3IoJ1RvbmUuQnVmZmVyOiBjb3VsZCBub3QgbG9jYXRlIGZpbGU6ICcgKyB1cmwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuXHQgICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUpIHtcblx0ICAgICAgICAgICAgICAgIC8vb25seSBnbyB0byA5NSUsIHRoZSBsYXN0IDUlIGlzIHdoZW4gdGhlIGF1ZGlvIGlzIGRlY29kZWRcblx0ICAgICAgICAgICAgICAgIHJlcXVlc3QucHJvZ3Jlc3MgPSBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCAqIDAuOTU7XG5cdCAgICAgICAgICAgICAgICBvblByb2dyZXNzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXF1ZXN0LnNlbmQoKTtcblx0ICAgICAgICByZXR1cm4gcmVxdWVzdDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCBhbGwgb2YgdGhlIGRvd25sb2FkcyBpbiBwcm9ncmVzc1xuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuY2FuY2VsRG93bmxvYWRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdCkge1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5fcmVtb3ZlRnJvbURvd25sb2FkUXVldWUocmVxdWVzdCk7XG5cdCAgICAgICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gVG9uZS5CdWZmZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENoZWNrcyBhIHVybCdzIGV4dGVuc2lvbiB0byBzZWUgaWYgdGhlIGN1cnJlbnQgYnJvd3NlciBjYW4gcGxheSB0aGF0IGZpbGUgdHlwZS5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgdXJsL2V4dGVuc2lvbiB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm4ge0Jvb2xlYW59IElmIHRoZSBmaWxlIGV4dGVuc2lvbiBjYW4gYmUgcGxheWVkXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkJ1ZmZlci5zdXBwb3J0c1R5cGUoXCJ3YXZcIik7IC8vcmV0dXJucyB0cnVlXG5cdFx0ICogVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlKFwicGF0aC90by9maWxlLndhdlwiKTsgLy9yZXR1cm5zIHRydWVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZSA9IGZ1bmN0aW9uICh1cmwpIHtcblx0ICAgICAgICB2YXIgZXh0ZW5zaW9uID0gdXJsLnNwbGl0KCcuJyk7XG5cdCAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uW2V4dGVuc2lvbi5sZW5ndGggLSAxXTtcblx0ICAgICAgICB2YXIgcmVzcG9uc2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhdWRpbycpLmNhblBsYXlUeXBlKCdhdWRpby8nICsgZXh0ZW5zaW9uKTtcblx0ICAgICAgICByZXR1cm4gcmVzcG9uc2UgIT09ICcnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIGEgUHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aGVuIGFsbCBvZiB0aGUgYnVmZmVycyBoYXZlIGxvYWRlZFxuXHRcdCAqICBAcmV0dXJuIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5sb2FkZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9ubG9hZCwgb25lcnJvcjtcblx0ICAgICAgICBmdW5jdGlvbiByZW1vdmVFdmVudHMoKSB7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBldmVudHMgd2hlbiBpdCdzIHJlc29sdmVkXG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLm9mZignbG9hZCcsIG9ubG9hZCk7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLm9mZignZXJyb3InLCBvbmVycm9yKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChzdWNjZXNzLCBmYWlsKSB7XG5cdCAgICAgICAgICAgIG9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHN1Y2Nlc3MoKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgb25lcnJvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIGZhaWwoKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgLy9hZGQgdGhlIGV2ZW50IGxpc3RlbmVyc1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vbignbG9hZCcsIG9ubG9hZCk7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuXHQgICAgICAgIH0pLnRoZW4ocmVtb3ZlRXZlbnRzKS5jYXRjaChmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICByZW1vdmVFdmVudHMoKTtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkJ1ZmZlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIGZpcmUtYW5kLWZvcmdldCBPc2NpbGxhdG9yTm9kZS4gQWRkcyB0aGVcblx0XHQgKiAgICAgYWJpbGl0eSB0byByZXNjaGVkdWxlIHRoZSBzdG9wIG1ldGhvZC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0gIHtBdWRpb0J1ZmZlcnxUb25lLkJ1ZmZlcn0gIGJ1ZmZlciAgIFRoZSBidWZmZXIgdG8gcGxheVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIG9ubG9hZCAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBpcyBkb25lIHBsYXlpbmcuXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuT3NjaWxsYXRvck5vZGUpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBhZnRlciB0aGVcblx0XHRcdCAqICBidWZmZXIgc291cmNlIGlzIGRvbmUgcGxheWluZy5cblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vbmVuZGVkID0gb3B0aW9ucy5vbmVuZGVkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yIHN0YXJ0IHRpbWVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gLTE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3Igc3RvcCB0aW1lXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gLTE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gbm9kZSB3aGljaCBlbnZlbG9wZXMgdGhlIE9zY2lsbGF0b3JOb2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUgIHtPc2NpbGxhdG9yTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IHRoaXMuY29udGV4dC5jcmVhdGVPc2NpbGxhdG9yKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jb25uZWN0KHRoaXMuX2dhaW5Ob2RlKTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kudmFsdWUgPSBvcHRpb25zLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX29zY2lsbGF0b3IuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLnZhbHVlID0gb3B0aW9ucy5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHRoYXQgdGhlIGJ1ZmZlciByYW1wcyB0b1xuXHRcdFx0ICogIEB0eXBlIHtHYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluID0gMTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk9zY2lsbGF0b3JOb2RlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnb25lbmRlZCc6IFRvbmUubm9PcFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgb3NjaWxsYXRvciwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3JOb2RlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0YXRlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgcGxheWJhY2sgc3RhdGUgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFRoZSB0aW1lIHRvIHRlc3QgdGhlIHN0YXRlIGF0XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlN0YXRlfSAgVGhlIHBsYXliYWNrIHN0YXRlLiBcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLmdldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEgJiYgdGltZSA+PSB0aGlzLl9zdGFydFRpbWUgJiYgKHRoaXMuX3N0b3BUaW1lID09PSAtMSB8fCB0aW1lIDw9IHRoaXMuX3N0b3BUaW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdGFydGVkO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHQgICAgICogU3RhcnQgdGhlIG9zY2lsbGF0b3Igbm9kZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHQgICAgICogQHBhcmFtICB7VGltZT19IHRpbWUgV2hlbiB0byBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICogQHJldHVybiB7T3NjaWxsYXRvck5vZGV9ICAgICAgdGhpc1xuXHQgICAgICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQodGhpcy5fc3RhcnRUaW1lKTtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMuY29udGV4dC5jdXJyZW50VGltZTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMobm93KTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCBub3cpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDEsIHRoaXMuX3N0YXJ0VGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgY2FsbCBPc2NpbGxhdG9yTm9kZS5zdGFydCBtb3JlIHRoYW4gb25jZScpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0ICAgICAqIFNldHMgYW4gYXJiaXRyYXJ5IGN1c3RvbSBwZXJpb2RpYyB3YXZlZm9ybSBnaXZlbiBhIFBlcmlvZGljV2F2ZS5cblx0ICAgICAqIEBwYXJhbSAge1BlcmlvZGljV2F2ZX0gcGVyaW9kaWNXYXZlIFBlcmlvZGljV2F2ZSBzaG91bGQgYmUgY3JlYXRlZCB3aXRoIGNvbnRleHQuY3JlYXRlUGVyaW9kaWNXYXZlXG5cdCAgICAgKiBAcmV0dXJuIHtPc2NpbGxhdG9yTm9kZX0gdGhpc1xuXHQgICAgICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zZXRQZXJpb2RpY1dhdmUgPSBmdW5jdGlvbiAocGVyaW9kaWNXYXZlKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zZXRQZXJpb2RpY1dhdmUocGVyaW9kaWNXYXZlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0ICAgICAqIFN0b3AgdGhlIG9zY2lsbGF0b3Igbm9kZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHQgICAgICogQHBhcmFtICB7VGltZT19IHRpbWUgV2hlbiB0byBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgKiBAcmV0dXJuIHtPc2NpbGxhdG9yTm9kZX0gICAgICB0aGlzXG5cdCAgICAgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vY2FuY2VsIHRoZSBwcmV2aW91cyBzdG9wXG5cdCAgICAgICAgdGhpcy5jYW5jZWxTdG9wKCk7XG5cdCAgICAgICAgLy9yZXNjaGVkdWxlIGl0XG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRoaXMuX3N0b3BUaW1lKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXQgPSB0aGlzLmNvbnRleHQuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aGlzLm5vdygpKTtcblx0ICAgICAgICAgICAgdGhpcy5vbmVuZGVkKCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpLCB0aGlzLl9zdG9wVGltZSAtIHRoaXMubm93KCkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYSBzY2hlZHVsZWQgc3RvcCBldmVudFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Pc2NpbGxhdG9yTm9kZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLmNhbmNlbFN0b3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgLy9jYW5jZWwgdGhlIHN0b3AgZW52ZWxvcGVcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGhpcy5fc3RhcnRUaW1lICsgdGhpcy5zYW1wbGVUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCBNYXRoLm1heCh0aGlzLm5vdygpLCB0aGlzLl9zdGFydFRpbWUpKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG9zY2lsbGF0b3IgdHlwZS4gRWl0aGVyICdzaW5lJywgJ3Nhd3Rvb3RoJywgJ3NxdWFyZScsIG9yICd0cmlhbmdsZSdcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yTm9kZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Pc2NpbGxhdG9yTm9kZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT3NjaWxsYXRvck5vZGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk9zY2lsbGF0b3Igc3VwcG9ydHMgYSBudW1iZXIgb2YgZmVhdHVyZXMgaW5jbHVkaW5nXG5cdFx0ICogICAgICAgICBwaGFzZSByb3RhdGlvbiwgbXVsdGlwbGUgb3NjaWxsYXRvciB0eXBlcyAoc2VlIFRvbmUuT3NjaWxsYXRvci50eXBlKSxcblx0XHQgKiAgICAgICAgIGFuZCBUcmFuc3BvcnQgc3luY2luZyAoc2VlIFRvbmUuT3NjaWxsYXRvci5zeW5jRnJlcXVlbmN5KS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2ZyZXF1ZW5jeV0gU3RhcnRpbmcgZnJlcXVlbmN5XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfSBbdHlwZV0gVGhlIG9zY2lsbGF0b3IgdHlwZS4gUmVhZCBtb3JlIGFib3V0IHR5cGUgYmVsb3cuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9tYWtlIGFuZCBzdGFydCBhIDQ0MGh6IHNpbmUgdG9uZVxuXHRcdCAqIHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKDQ0MCwgXCJzaW5lXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLk9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1haW4gb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtPc2NpbGxhdG9yTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwZXJpb2RpYyB3YXZlXG5cdFx0XHQgKiAgQHR5cGUge1BlcmlvZGljV2F2ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fd2F2ZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhcnRpYWxzIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLnBhcnRpYWxzLCBbMV0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIGJldHdlZW4gMCAtIDM2MFxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtzdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBudWxsO1xuXHQgICAgICAgIC8vc2V0dXBcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMuX3BoYXNlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Pc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3BoYXNlJzogMCxcblx0ICAgICAgICAncGFydGlhbHMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgT3NjaWxsYXRvciB0eXBlc1xuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUgPSB7XG5cdCAgICAgICAgU2luZTogJ3NpbmUnLFxuXHQgICAgICAgIFRyaWFuZ2xlOiAndHJpYW5nbGUnLFxuXHQgICAgICAgIFNhd3Rvb3RoOiAnc2F3dG9vdGgnLFxuXHQgICAgICAgIFNxdWFyZTogJ3NxdWFyZScsXG5cdCAgICAgICAgQ3VzdG9tOiAnY3VzdG9tJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9uZXcgb3NjaWxsYXRvciB3aXRoIHByZXZpb3VzIHZhbHVlc1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yTm9kZSgpO1xuXHQgICAgICAgIGlmICh0aGlzLl93YXZlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc2V0UGVyaW9kaWNXYXZlKHRoaXMuX3dhdmUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgY29udHJvbCBzaWduYWwgdG8gdGhlIG9zY2lsbGF0b3IgZnJlcXVlbmN5ICYgZGV0dW5lXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX29zY2lsbGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHRoaXMuX29zY2lsbGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHJldHVybnMge1RvbmUuT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IpIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlc3RhcnQgdGhlIG9zY2lsbGF0b3IuIERvZXMgbm90IHN0b3AgdGhlIG9zY2lsbGF0b3IsIGJ1dCBpbnN0ZWFkXG5cdFx0ICoganVzdCBjYW5jZWxzIGFueSBzY2hlZHVsZWQgJ3N0b3AnIGZyb20gYmVpbmcgaW52b2tlZC5cblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuT3NjaWxsYXRvcn0gICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aGlzLnRvU2Vjb25kcyh0aW1lKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN5bmMgdGhlIHNpZ25hbCB0byB0aGUgVHJhbnNwb3J0J3MgYnBtLiBBbnkgY2hhbmdlcyB0byB0aGUgdHJhbnNwb3J0cyBicG0sXG5cdFx0ICogIHdpbGwgYWxzbyBhZmZlY3QgdGhlIG9zY2lsbGF0b3JzIGZyZXF1ZW5jeS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZSA9IDEyMDtcblx0XHQgKiBvc2MuZnJlcXVlbmN5LnZhbHVlID0gNDQwO1xuXHRcdCAqIC8vdGhlIHJhdGlvbiBiZXR3ZWVuIHRoZSBicG0gYW5kIHRoZSBmcmVxdWVuY3kgd2lsbCBiZSBtYWludGFpbmVkXG5cdFx0ICogb3NjLnN5bmNGcmVxdWVuY3koKTtcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgPSAyNDA7XG5cdFx0ICogLy8gdGhlIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvciBpcyBkb3VibGVkIHRvIDg4MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5zeW5jRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbnN5bmMgdGhlIG9zY2lsbGF0b3IncyBmcmVxdWVuY3kgZnJvbSB0aGUgVHJhbnNwb3J0LlxuXHRcdCAqICBTZWUgVG9uZS5Pc2NpbGxhdG9yLnN5bmNGcmVxdWVuY3lcblx0XHQgKiAgQHJldHVybnMge1RvbmUuT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS51bnN5bmNGcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQudW5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvcjogZWl0aGVyIHNpbmUsIHNxdWFyZSwgdHJpYW5nbGUsIG9yIHNhd3Rvb3RoLiBBbHNvIGNhcGFibGUgb2Zcblx0XHQgKiBzZXR0aW5nIHRoZSBmaXJzdCB4IG51bWJlciBvZiBwYXJ0aWFscyBvZiB0aGUgb3NjaWxsYXRvci4gRm9yIGV4YW1wbGU6IFwic2luZTRcIiB3b3VsZFxuXHRcdCAqIHNldCBiZSB0aGUgZmlyc3QgNCBwYXJ0aWFscyBvZiB0aGUgc2luZSB3YXZlIGFuZCBcInRyaWFuZ2xlOFwiIHdvdWxkIHNldCB0aGUgZmlyc3Rcblx0XHQgKiA4IHBhcnRpYWxzIG9mIHRoZSB0cmlhbmdsZSB3YXZlLlxuXHRcdCAqIDxicj48YnI+XG5cdFx0ICogVXNlcyBQZXJpb2RpY1dhdmUgaW50ZXJuYWxseSBldmVuIGZvciBuYXRpdmUgdHlwZXMgc28gdGhhdCBpdCBjYW4gc2V0IHRoZSBwaGFzZS5cblx0XHQgKiBQZXJpb2RpY1dhdmUgZXF1YXRpb25zIGFyZSBmcm9tIHRoZVxuXHRcdCAqIFtXZWJraXQgV2ViIEF1ZGlvIGltcGxlbWVudGF0aW9uXShodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2NvZGVzZWFyY2gjY2hyb21pdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9Tb3VyY2UvbW9kdWxlcy93ZWJhdWRpby9QZXJpb2RpY1dhdmUuY3BwJnNxPXBhY2thZ2U6Y2hyb21pdW0pLlxuXHRcdCAqXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IGl0IHRvIGEgc3F1YXJlIHdhdmVcblx0XHQgKiBvc2MudHlwZSA9IFwic3F1YXJlXCI7XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL3NldCB0aGUgZmlyc3QgNiBwYXJ0aWFscyBvZiBhIHNhd3Rvb3RoIHdhdmVcblx0XHQgKiBvc2MudHlwZSA9IFwic2F3dG9vdGg2XCI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB2YXIgaXNCYXNpY1R5cGUgPSBbXG5cdCAgICAgICAgICAgICAgICBUb25lLk9zY2lsbGF0b3IuVHlwZS5TaW5lLFxuXHQgICAgICAgICAgICAgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU3F1YXJlLFxuXHQgICAgICAgICAgICAgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuVHJpYW5nbGUsXG5cdCAgICAgICAgICAgICAgICBUb25lLk9zY2lsbGF0b3IuVHlwZS5TYXd0b290aFxuXHQgICAgICAgICAgICBdLmluY2x1ZGVzKHR5cGUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fcGhhc2UgPT09IDAgJiYgaXNCYXNpY1R5cGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3dhdmUgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgLy9qdXN0IGdvIHdpdGggdGhlIGJhc2ljIGFwcHJvYWNoXG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvciAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9PT0gdHlwZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjb2VmcyA9IHRoaXMuX2dldFJlYWxJbWFnaW5hcnkodHlwZSwgdGhpcy5fcGhhc2UpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHBlcmlvZGljV2F2ZSA9IHRoaXMuY29udGV4dC5jcmVhdGVQZXJpb2RpY1dhdmUoY29lZnNbMF0sIGNvZWZzWzFdKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3dhdmUgPSBwZXJpb2RpY1dhdmU7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvciAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc2V0UGVyaW9kaWNXYXZlKHRoaXMuX3dhdmUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHJlYWwgYW5kIGltYWdpbmFyeSBjb21wb25lbnRzIGJhc2VkXG5cdFx0ICogIG9uIHRoZSBvc2NpbGxhdG9yIHR5cGUuXG5cdFx0ICogIEByZXR1cm5zIHtBcnJheX0gW3JlYWwsIGltYWdpbmFyeV1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX2dldFJlYWxJbWFnaW5hcnkgPSBmdW5jdGlvbiAodHlwZSwgcGhhc2UpIHtcblx0ICAgICAgICB2YXIgZmZ0U2l6ZSA9IDQwOTY7XG5cdCAgICAgICAgdmFyIHBlcmlvZGljV2F2ZVNpemUgPSBmZnRTaXplIC8gMjtcblx0ICAgICAgICB2YXIgcmVhbCA9IG5ldyBGbG9hdDMyQXJyYXkocGVyaW9kaWNXYXZlU2l6ZSk7XG5cdCAgICAgICAgdmFyIGltYWcgPSBuZXcgRmxvYXQzMkFycmF5KHBlcmlvZGljV2F2ZVNpemUpO1xuXHQgICAgICAgIHZhciBwYXJ0aWFsQ291bnQgPSAxO1xuXHQgICAgICAgIGlmICh0eXBlID09PSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b20pIHtcblx0ICAgICAgICAgICAgcGFydGlhbENvdW50ID0gdGhpcy5fcGFydGlhbHMubGVuZ3RoICsgMTtcblx0ICAgICAgICAgICAgcGVyaW9kaWNXYXZlU2l6ZSA9IHBhcnRpYWxDb3VudDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgcGFydGlhbCA9IC9eKHNpbmV8dHJpYW5nbGV8c3F1YXJlfHNhd3Rvb3RoKShcXGQrKSQvLmV4ZWModHlwZSk7XG5cdCAgICAgICAgICAgIGlmIChwYXJ0aWFsKSB7XG5cdCAgICAgICAgICAgICAgICBwYXJ0aWFsQ291bnQgPSBwYXJzZUludChwYXJ0aWFsWzJdKSArIDE7XG5cdCAgICAgICAgICAgICAgICB0eXBlID0gcGFydGlhbFsxXTtcblx0ICAgICAgICAgICAgICAgIHBhcnRpYWxDb3VudCA9IE1hdGgubWF4KHBhcnRpYWxDb3VudCwgMik7XG5cdCAgICAgICAgICAgICAgICBwZXJpb2RpY1dhdmVTaXplID0gcGFydGlhbENvdW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZvciAodmFyIG4gPSAxOyBuIDwgcGVyaW9kaWNXYXZlU2l6ZTsgKytuKSB7XG5cdCAgICAgICAgICAgIHZhciBwaUZhY3RvciA9IDIgLyAobiAqIE1hdGguUEkpO1xuXHQgICAgICAgICAgICB2YXIgYjtcblx0ICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2luZTpcblx0ICAgICAgICAgICAgICAgIGIgPSBuIDw9IHBhcnRpYWxDb3VudCA/IDEgOiAwO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU3F1YXJlOlxuXHQgICAgICAgICAgICAgICAgYiA9IG4gJiAxID8gMiAqIHBpRmFjdG9yIDogMDtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNhd3Rvb3RoOlxuXHQgICAgICAgICAgICAgICAgYiA9IHBpRmFjdG9yICogKG4gJiAxID8gMSA6IC0xKTtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLlRyaWFuZ2xlOlxuXHQgICAgICAgICAgICAgICAgaWYgKG4gJiAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYiA9IDIgKiAocGlGYWN0b3IgKiBwaUZhY3RvcikgKiAobiAtIDEgPj4gMSAmIDEgPyAtMSA6IDEpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBiID0gMDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbTpcblx0ICAgICAgICAgICAgICAgIGIgPSB0aGlzLl9wYXJ0aWFsc1tuIC0gMV07XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RvbmUuT3NjaWxsYXRvcjogaW52YWxpZCB0eXBlOiAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKGIgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgIHJlYWxbbl0gPSAtYiAqIE1hdGguc2luKHBoYXNlICogbik7XG5cdCAgICAgICAgICAgICAgICBpbWFnW25dID0gYiAqIE1hdGguY29zKHBoYXNlICogbik7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZWFsW25dID0gMDtcblx0ICAgICAgICAgICAgICAgIGltYWdbbl0gPSAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBbXG5cdCAgICAgICAgICAgIHJlYWwsXG5cdCAgICAgICAgICAgIGltYWdcblx0ICAgICAgICBdO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb21wdXRlIHRoZSBpbnZlcnNlIEZGVCBmb3IgYSBnaXZlbiBwaGFzZS5cblx0XHQgKiAgQHBhcmFtICB7RmxvYXQzMkFycmF5fSAgcmVhbFxuXHRcdCAqICBAcGFyYW0gIHtGbG9hdDMyQXJyYXl9ICBpbWFnXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSAgcGhhc2Vcblx0XHQgKiAgQHJldHVybiAge0F1ZGlvUmFuZ2V9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9pbnZlcnNlRkZUID0gZnVuY3Rpb24gKHJlYWwsIGltYWcsIHBoYXNlKSB7XG5cdCAgICAgICAgdmFyIHN1bSA9IDA7XG5cdCAgICAgICAgdmFyIGxlbiA9IHJlYWwubGVuZ3RoO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgc3VtICs9IHJlYWxbaV0gKiBNYXRoLmNvcyhpICogcGhhc2UpICsgaW1hZ1tpXSAqIE1hdGguc2luKGkgKiBwaGFzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBzdW07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEByZXR1cm4gIHtBdWRpb1JhbmdlfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5fZ2V0SW5pdGlhbFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBjb2VmcyA9IHRoaXMuX2dldFJlYWxJbWFnaW5hcnkodGhpcy5fdHlwZSwgMCk7XG5cdCAgICAgICAgdmFyIHJlYWwgPSBjb2Vmc1swXTtcblx0ICAgICAgICB2YXIgaW1hZyA9IGNvZWZzWzFdO1xuXHQgICAgICAgIHZhciBtYXhWYWx1ZSA9IDA7XG5cdCAgICAgICAgdmFyIHR3b1BpID0gTWF0aC5QSSAqIDI7XG5cdCAgICAgICAgLy9jaGVjayBmb3IgcGVha3MgaW4gOCBwbGFjZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICBtYXhWYWx1ZSA9IE1hdGgubWF4KHRoaXMuX2ludmVyc2VGRlQocmVhbCwgaW1hZywgaSAvIDggKiB0d29QaSksIG1heFZhbHVlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIC10aGlzLl9pbnZlcnNlRkZUKHJlYWwsIGltYWcsIHRoaXMuX3BoYXNlKSAvIG1heFZhbHVlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSAhPT0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gW107XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFydGlhbHM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBhcnRpYWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgICAgIHRoaXMudHlwZSA9IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5waGFzZSA9IDE4MDsgLy9mbGlwcyB0aGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9waGFzZSAqICgxODAgLyBNYXRoLlBJKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BoYXNlID0gcGhhc2UgKiBNYXRoLlBJIC8gMTgwO1xuXHQgICAgICAgICAgICAvL3Jlc2V0IHRoZSB0eXBlXG5cdCAgICAgICAgICAgIHRoaXMudHlwZSA9IHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGlzcG9zZSBhbmQgZGlzY29ubmVjdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvciAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3dhdmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQXVkaW9Ub0dhaW4gY29udmVydHMgYW4gaW5wdXQgaW4gQXVkaW9SYW5nZSBbLTEsMV0gdG8gTm9ybWFsUmFuZ2UgWzAsMV0uIFxuXHRcdCAqICAgICAgICAgU2VlIFRvbmUuR2FpblRvQXVkaW8uXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBhMmcgPSBuZXcgVG9uZS5BdWRpb1RvR2FpbigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb1RvR2FpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25vcm0gPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh4KSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoeCArIDEpIC8gMjtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1ZGlvVG9HYWluLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvVG9HYWlufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvVG9HYWluLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX25vcm0uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX25vcm0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkF1ZGlvVG9HYWluO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuWmVybyBvdXRwdXRzIDAncyBhdCBhdWRpby1yYXRlLiBUaGUgcmVhc29uIHRoaXMgaGFzIHRvIGJlXG5cdFx0ICogICAgICAgICBpdCdzIG93biBjbGFzcyBpcyB0aGF0IG1hbnkgYnJvd3NlcnMgb3B0aW1pemUgb3V0IFRvbmUuU2lnbmFsXG5cdFx0ICogICAgICAgICB3aXRoIGEgdmFsdWUgb2YgMCBhbmQgd2lsbCBub3QgcHJvY2VzcyBub2RlcyBmdXJ0aGVyIGRvd24gdGhlIGdyYXBoLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5aZXJvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29uc3RhbnQoMCkuY29ubmVjdCh0aGlzLl9nYWluKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlplcm8sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuWmVyb30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuWmVyby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9nYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9nYWluID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5aZXJvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIExGTyBzdGFuZHMgZm9yIGxvdyBmcmVxdWVuY3kgb3NjaWxsYXRvci4gVG9uZS5MRk8gcHJvZHVjZXMgYW4gb3V0cHV0IHNpZ25hbFxuXHRcdCAqICAgICAgICAgIHdoaWNoIGNhbiBiZSBhdHRhY2hlZCB0byBhbiBBdWRpb1BhcmFtIG9yIFRvbmUuU2lnbmFsXG5cdFx0ICogICAgICAgICAgaW4gb3JkZXIgdG8gbW9kdWxhdGUgdGhhdCBwYXJhbWV0ZXIgd2l0aCBhbiBvc2NpbGxhdG9yLiBUaGUgTEZPIGNhblxuXHRcdCAqICAgICAgICAgIGFsc28gYmUgc3luY2VkIHRvIHRoZSB0cmFuc3BvcnQgdG8gc3RhcnQvc3RvcCBhbmQgY2hhbmdlIHdoZW4gdGhlIHRlbXBvIGNoYW5nZXMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdGlvbi4gVHlwaWNhbGx5LCBMRk9zIHdpbGwgYmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZnJlcXVlbmN5IHJhbmdlIG9mIDAuMSB0byAxMCBoZXJ0ei5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSBtaW4gVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlIG9mIHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gbWF4IFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBMRk8uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGxmbyA9IG5ldyBUb25lLkxGTyhcIjRuXCIsIDQwMCwgNDAwMCk7XG5cdFx0ICogbGZvLmNvbm5lY3QoZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkxGTyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbWluJyxcblx0ICAgICAgICAgICAgJ21heCdcblx0ICAgICAgICBdLCBUb25lLkxGTyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcih7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiBvcHRpb25zLnR5cGVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX29zY2lsbGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtcGxpdHVkZSBvZiB0aGUgTEZPLCB3aGljaCBjb250cm9scyB0aGUgb3V0cHV0IHJhbmdlIGJldHdlZW5cblx0XHRcdCAqIHRoZSBtaW4gYW5kIG1heCBvdXRwdXQuIEZvciBleGFtcGxlIGlmIHRoZSBtaW4gaXMgLTEwIGFuZCB0aGUgbWF4XG5cdFx0XHQgKiBpcyAxMCwgc2V0dGluZyB0aGUgYW1wbGl0dWRlIHRvIDAuNSB3b3VsZCBtYWtlIHRoZSBMRk8gbW9kdWxhdGVcblx0XHRcdCAqIGJldHdlZW4gLTUgYW5kIDUuXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUgPSB0aGlzLl9vc2NpbGxhdG9yLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLmFtcGxpdHVkZS51bml0cyA9IFRvbmUuVHlwZS5Ob3JtYWxSYW5nZTtcblx0ICAgICAgICB0aGlzLmFtcGxpdHVkZS52YWx1ZSA9IG9wdGlvbnMuYW1wbGl0dWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWduYWwgd2hpY2ggaXMgb3V0cHV0IHdoZW4gdGhlIExGTyBpcyBzdG9wcGVkXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgwLCBUb25lLlR5cGUuQXVkaW9SYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSnVzdCBvdXRwdXRzIHplcm9zLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlplcm99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3plcm9zID0gbmV3IFRvbmUuWmVybygpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB0aGF0IHRoZSBMRk8gb3V0cHV0cyB3aGVuIGl0J3Mgc3RvcHBlZFxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb1JhbmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdG9wcGVkVmFsdWUgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkF1ZGlvVG9HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hMmcgPSBuZXcgVG9uZS5BdWRpb1RvR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNjYWxlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZXIgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlNjYWxlKG9wdGlvbnMubWluLCBvcHRpb25zLm1heCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHVuaXRzIG9mIHRoZSBMRk8gKHVzZWQgZm9yIGNvbnZlcnRpbmcpXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVHlwZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdW5pdHMgPSBUb25lLlR5cGUuRGVmYXVsdDtcblx0ICAgICAgICB0aGlzLnVuaXRzID0gb3B0aW9ucy51bml0cztcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNoYWluKHRoaXMuX2EyZywgdGhpcy5fc2NhbGVyKTtcblx0ICAgICAgICB0aGlzLl96ZXJvcy5jb25uZWN0KHRoaXMuX2EyZyk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5jb25uZWN0KHRoaXMuX2EyZyk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnYW1wbGl0dWRlJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxGTywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgJ3BoYXNlJzogMCxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogJzRuJyxcblx0ICAgICAgICAnYW1wbGl0dWRlJzogMSxcblx0ICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVmYXVsdFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgTEZPLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBMRk8gd2lsbCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuc2V0VmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgTEZPLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBMRk8gd2lsbCBzdG9wXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnNldFZhbHVlQXRUaW1lKHRoaXMuX3N0b3BwZWRWYWx1ZSwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTeW5jIHRoZSBzdGFydC9zdG9wL3BhdXNlIHRvIHRoZSB0cmFuc3BvcnRcblx0XHQgKiAgYW5kIHRoZSBmcmVxdWVuY3kgdG8gdGhlIGJwbSBvZiB0aGUgdHJhbnNwb3J0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICBsZm8uZnJlcXVlbmN5LnZhbHVlID0gXCI4blwiO1xuXHRcdCAqICBsZm8uc3luYygpLnN0YXJ0KDApXG5cdFx0ICogIC8vdGhlIHJhdGUgb2YgdGhlIExGTyB3aWxsIGFsd2F5cyBiZSBhbiBlaWdodGggbm90ZSxcblx0XHQgKiAgLy9ldmVuIGFzIHRoZSB0ZW1wbyBjaGFuZ2VzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN5bmNGcmVxdWVuY3koKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdW5zeW5jIHRoZSBMRk8gZnJvbSB0cmFuc3BvcnQgY29udHJvbFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci51bnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnVuc3luY0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pdW11bSBvdXRwdXQgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90b1VuaXRzKHRoaXMuX3NjYWxlci5taW4pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIG1pbiA9IHRoaXMuX2Zyb21Vbml0cyhtaW4pO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZXIubWluID0gbWluO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdG9Vbml0cyh0aGlzLl9zY2FsZXIubWF4KTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICBtYXggPSB0aGlzLl9mcm9tVW5pdHMobWF4KTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGVyLm1heCA9IG1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yOiBzaW5lLCBzcXVhcmUsIHNhd3Rvb3RoLCB0cmlhbmdsZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcHBlZFZhbHVlID0gdGhpcy5fb3NjaWxsYXRvci5fZ2V0SW5pdGlhbFZhbHVlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwudmFsdWUgPSB0aGlzLl9zdG9wcGVkVmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcHBlZFZhbHVlID0gdGhpcy5fb3NjaWxsYXRvci5fZ2V0SW5pdGlhbFZhbHVlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwudmFsdWUgPSB0aGlzLl9zdG9wcGVkVmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3V0cHV0IHVuaXRzIG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtUb25lLlR5cGV9XG5cdFx0ICogQG5hbWUgdW5pdHNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICd1bml0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VuaXRzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHZhciBjdXJyZW50TWluID0gdGhpcy5taW47XG5cdCAgICAgICAgICAgIHZhciBjdXJyZW50TWF4ID0gdGhpcy5tYXg7XG5cdCAgICAgICAgICAgIC8vY29udmVydCB0aGUgbWluIGFuZCB0aGUgbWF4XG5cdCAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdmFsO1xuXHQgICAgICAgICAgICB0aGlzLm1pbiA9IGN1cnJlbnRNaW47XG5cdCAgICAgICAgICAgIHRoaXMubWF4ID0gY3VycmVudE1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3Iuc3RhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ29ubmVjdCB0aGUgb3V0cHV0IG9mIHRoZSBMRk8gdG8gYW4gQXVkaW9QYXJhbSwgQXVkaW9Ob2RlLCBvciBUb25lIE5vZGUuXG5cdFx0ICogIFRvbmUuTEZPIHdpbGwgYXV0b21hdGljYWxseSBjb252ZXJ0IHRvIHRoZSBkZXN0aW5hdGlvbiB1bml0cyBvZiB0aGVcblx0XHQgKiAgd2lsbCBnZXQgdGhlIHVuaXRzIGZyb20gdGhlIGNvbm5lY3RlZCBub2RlLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lIHwgQXVkaW9QYXJhbSB8IEF1ZGlvTm9kZX0gbm9kZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bT0wXSBvcHRpb25hbGx5IHdoaWNoIG91dHB1dCB0byBjb25uZWN0IGZyb21cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtpbnB1dE51bT0wXSBvcHRpb25hbGx5IHdoaWNoIGlucHV0IHRvIGNvbm5lY3QgdG9cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgaWYgKG5vZGUuY29uc3RydWN0b3IgPT09IFRvbmUuU2lnbmFsIHx8IG5vZGUuY29uc3RydWN0b3IgPT09IFRvbmUuUGFyYW0pIHtcblx0ICAgICAgICAgICAgdGhpcy5jb252ZXJ0ID0gbm9kZS5jb252ZXJ0O1xuXHQgICAgICAgICAgICB0aGlzLnVuaXRzID0gbm9kZS51bml0cztcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHByaXZhdGUgbWV0aG9kIGJvcnJvd2VkIGZyb20gUGFyYW0gY29udmVydHNcblx0XHQgKiAgdW5pdHMgZnJvbSB0aGVpciBkZXN0aW5hdGlvbiB2YWx1ZVxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5fZnJvbVVuaXRzID0gVG9uZS5QYXJhbS5wcm90b3R5cGUuX2Zyb21Vbml0cztcblx0ICAgIC8qKlxuXHRcdCAqICBwcml2YXRlIG1ldGhvZCBib3Jyb3dlZCBmcm9tIFBhcmFtIGNvbnZlcnRzXG5cdFx0ICogIHVuaXRzIHRvIHRoZWlyIGRlc3RpbmF0aW9uIHZhbHVlXG5cdFx0ICogIEBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLl90b1VuaXRzID0gVG9uZS5QYXJhbS5wcm90b3R5cGUuX3RvVW5pdHM7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzY29ubmVjdCBhbmQgZGlzcG9zZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnYW1wbGl0dWRlJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl96ZXJvcy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5femVyb3MgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hMmcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2EyZyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5MRk87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkxpbWl0ZXIgd2lsbCBsaW1pdCB0aGUgbG91ZG5lc3Mgb2YgYW4gaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgSXQgaXMgY29tcG9zZWQgb2YgYSBUb25lLkNvbXByZXNzb3Igd2l0aCBhIGZhc3QgYXR0YWNrXG5cdFx0ICogICAgICAgICBhbmQgcmVsZWFzZS4gTGltaXRlcnMgYXJlIGNvbW1vbmx5IHVzZWQgdG8gc2FmZWd1YXJkIGFnYWluc3Rcblx0XHQgKiAgICAgICAgIHNpZ25hbCBjbGlwcGluZy4gVW5saWtlIGEgY29tcHJlc3NvciwgbGltaXRlcnMgZG8gbm90IHByb3ZpZGVcblx0XHQgKiAgICAgICAgIHNtb290aCBnYWluIHJlZHVjdGlvbiBhbmQgYWxtb3N0IGNvbXBsZXRlbHkgcHJldmVudFxuXHRcdCAqICAgICAgICAgYWRkaXRpb25hbCBnYWluIGFib3ZlIHRoZSB0aHJlc2hvbGQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHRocmVzaG9sZCBUaGUgdGhlc2hvbGQgYWJvdmUgd2hpY2ggdGhlIGxpbWl0aW5nIGlzIGFwcGxpZWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBsaW1pdGVyID0gbmV3IFRvbmUuTGltaXRlcigtNik7XG5cdFx0ICovXG5cdCAgICBUb25lLkxpbWl0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd0aHJlc2hvbGQnXSwgVG9uZS5MaW1pdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBjb21wcmVzc29yXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Db21wcmVzc29yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3NvciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkNvbXByZXNzb3Ioe1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMDAxLFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJzogb3B0aW9ucy50aHJlc2hvbGRcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB0aHJlc2hvbGQgb2Ygb2YgdGhlIGxpbWl0ZXJcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy50aHJlc2hvbGQgPSB0aGlzLl9jb21wcmVzc29yLnRocmVzaG9sZDtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndGhyZXNob2xkJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5MaW1pdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGltaXRlci5kZWZhdWx0cyA9IHsgJ3RocmVzaG9sZCc6IC0xMiB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MaW1pdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpbWl0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndGhyZXNob2xkJyk7XG5cdCAgICAgICAgdGhpcy50aHJlc2hvbGQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkxpbWl0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkxvd3Bhc3MgaXMgYSBsb3dwYXNzIGZlZWRiYWNrIGNvbWIgZmlsdGVyLiBJdCBpcyBzaW1pbGFyIHRvXG5cdFx0ICogICAgICAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlciwgYnV0IGluY2x1ZGVzIGEgbG93cGFzcyBmaWx0ZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2RlbGF5VGltZV0gVGhlIGRlbGF5IHRpbWUgb2YgdGhlIGNvbWIgZmlsdGVyXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2U9fSByZXNvbmFuY2UgVGhlIHJlc29uYW5jZSAoZmVlZGJhY2spIG9mIHRoZSBjb21iIGZpbHRlclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeT19IGRhbXBlbmluZyBUaGUgY3V0b2ZmIG9mIHRoZSBsb3dwYXNzIGZpbHRlciBkYW1wZW5zIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwgYXMgaXQgaXMgZmVkYmFjay5cblx0XHQgKi9cblx0ICAgIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSwgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheSA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5EZWxheShvcHRpb25zLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlbGF5VGltZSBvZiB0aGUgY29tYiBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9kZWxheS5kZWxheVRpbWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxvd3Bhc3MgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUgIHtCaXF1YWRGaWx0ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb3dwYXNzID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcy5RLnZhbHVlID0gLTMuMDEwMjk5OTU2NjM5ODEyNTtcblx0ICAgICAgICB0aGlzLl9sb3dwYXNzLnR5cGUgPSAnbG93cGFzcyc7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRhbXBlbmluZyBjb250cm9sIG9mIHRoZSBmZWVkYmFja1xuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2xvd3Bhc3MuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAndmFsdWUnOiBvcHRpb25zLmRhbXBlbmluZ1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmZWVkYmFjayBnYWluXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2sgPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMucmVzb25hbmNlLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZmVlZGJhY2sgb2YgdGhlIGRlbGF5ZWQgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IHRoaXMuX2ZlZWRiYWNrLmdhaW47XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmNoYWluKHRoaXMuX2xvd3Bhc3MsIHRoaXMuX2ZlZWRiYWNrLCB0aGlzLl9kZWxheSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJyxcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Mb3dwYXNzQ29tYkZpbHRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDAuMSxcblx0ICAgICAgICAncmVzb25hbmNlJzogMC41LFxuXHQgICAgICAgICdkYW1wZW5pbmcnOiAzMDAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Mb3dwYXNzQ29tYkZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZycsXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sb3dwYXNzLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9sb3dwYXNzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFjay5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkxvd3Bhc3NDb21iRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTWVyZ2UgYnJpbmdzIHR3byBzaWduYWxzIGludG8gdGhlIGxlZnQgYW5kIHJpZ2h0XG5cdFx0ICogICAgICAgICAgY2hhbm5lbHMgb2YgYSBzaW5nbGUgc3RlcmVvIGNoYW5uZWwuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbWVyZ2UgPSBuZXcgVG9uZS5NZXJnZSgpLnRvTWFzdGVyKCk7XG5cdFx0ICogLy9yb3V0aW5nIGEgc2luZSB0b25lIGluIHRoZSBsZWZ0IGNoYW5uZWxcblx0XHQgKiAvL2FuZCBub2lzZSBpbiB0aGUgcmlnaHQgY2hhbm5lbFxuXHRcdCAqIHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkuY29ubmVjdChtZXJnZS5sZWZ0KTtcblx0XHQgKiB2YXIgbm9pc2UgPSBuZXcgVG9uZS5Ob2lzZSgpLmNvbm5lY3QobWVyZ2UucmlnaHQpO1xuXHRcdCAqIC8vc3RhcnRpbmcgb3VyIG9zY2lsbGF0b3JzXG5cdFx0ICogbm9pc2Uuc3RhcnQoKTtcblx0XHQgKiBvc2Muc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVyZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxlZnQgaW5wdXQgY2hhbm5lbC5cblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+aW5wdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5pbnB1dFswXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmlnaHQgaW5wdXQgY2hhbm5lbC5cblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+aW5wdXRbMV08L2NvZGU+LlxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtZXJnZXIgbm9kZSBmb3IgdGhlIHR3byBjaGFubmVsc1xuXHRcdFx0ICogIEB0eXBlIHtDaGFubmVsTWVyZ2VyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVyZ2VyID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ2hhbm5lbE1lcmdlcigyKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5sZWZ0LmNvbm5lY3QodGhpcy5fbWVyZ2VyLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLnJpZ2h0LmNvbm5lY3QodGhpcy5fbWVyZ2VyLCAwLCAxKTtcblx0ICAgICAgICB0aGlzLmxlZnQuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICB0aGlzLnJpZ2h0LmNoYW5uZWxDb3VudCA9IDE7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIHRoaXMucmlnaHQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NZXJnZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZXJnZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXJnZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMubGVmdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJpZ2h0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tZXJnZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWVyZ2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5NZXRlciBnZXRzIHRoZSBbUk1TXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Sb290X21lYW5fc3F1YXJlKVxuXHRcdCAqICAgICAgICAgIG9mIGFuIGlucHV0IHNpZ25hbCB3aXRoIHNvbWUgYXZlcmFnaW5nIGFwcGxpZWQuIEl0IGNhbiBhbHNvIGdldCB0aGUgcmF3XG5cdFx0ICogICAgICAgICAgdmFsdWUgb2YgdGhlIGlucHV0IHNpZ25hbC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gc21vb3RoaW5nIFRoZSBhbW91bnQgb2Ygc21vb3RoaW5nIGFwcGxpZWQgYmV0d2VlbiBmcmFtZXMuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG1ldGVyID0gbmV3IFRvbmUuTWV0ZXIoKTtcblx0XHQgKiB2YXIgbWljID0gbmV3IFRvbmUuVXNlck1lZGlhKCkub3BlbigpO1xuXHRcdCAqIC8vY29ubmVjdCBtaWMgdG8gdGhlIG1ldGVyXG5cdFx0ICogbWljLmNvbm5lY3QobWV0ZXIpO1xuXHRcdCAqIC8vdGhlIGN1cnJlbnQgbGV2ZWwgb2YgdGhlIG1pYyBpbnB1dCBpbiBkZWNpYmVsc1xuXHRcdCAqIHZhciBsZXZlbCA9IG1ldGVyLmdldFZhbHVlKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnc21vb3RoaW5nJ10sIFRvbmUuTWV0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFuYWx5c2VyIG5vZGUgd2hpY2ggY29tcHV0ZXMgdGhlIGxldmVscy5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5BbmFseXNlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuX2FuYWx5c2VyID0gbmV3IFRvbmUuQW5hbHlzZXIoJ3dhdmVmb3JtJywgMTAyNCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBjYXJyeW92ZXIgYmV0d2VlbiB0aGUgY3VycmVudCBhbmQgbGFzdCBmcmFtZS5cblx0XHRcdCAqICBPbmx5IGFwcGxpZWQgbWV0ZXIgZm9yIFwibGV2ZWxcIiB0eXBlLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zbW9vdGhpbmcgPSBvcHRpb25zLnNtb290aGluZztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1ldGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGVyLmRlZmF1bHRzID0geyAnc21vb3RoaW5nJzogMC44IH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBjdXJyZW50IGRlY2liZWwgdmFsdWUgb2YgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdCAqICBAcmV0dXJucyB7RGVjaWJlbHN9XG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGVyLnByb3RvdHlwZS5nZXRMZXZlbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci50eXBlID0gJ2ZmdCc7XG5cdCAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuX2FuYWx5c2VyLmdldFZhbHVlKCk7XG5cdCAgICAgICAgdmFyIG9mZnNldCA9IDI4O1xuXHQgICAgICAgIC8vIG5vcm1hbGl6ZXMgbW9zdCBzaWduYWwgbGV2ZWxzXG5cdCAgICAgICAgLy8gVE9ETzogY29tcHV0ZSBsb3VkbmVzcyBmcm9tIEZGVFxuXHQgICAgICAgIHJldHVybiBNYXRoLm1heC5hcHBseSh0aGlzLCB2YWx1ZXMpICsgb2Zmc2V0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNpZ25hbCB2YWx1ZSBvZiB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogIEByZXR1cm5zIHtOdW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGVyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci50eXBlID0gJ3dhdmVmb3JtJztcblx0ICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgICAgIHJldHVybiB2YWx1ZVswXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBBIHZhbHVlIGZyb20gMCAtPiAxIHdoZXJlIDAgcmVwcmVzZW50cyBubyB0aW1lIGF2ZXJhZ2luZyB3aXRoIHRoZSBsYXN0IGFuYWx5c2lzIGZyYW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk1ldGVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgc21vb3RoaW5nXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRlci5wcm90b3R5cGUsICdzbW9vdGhpbmcnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5zbW9vdGhpbmc7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuc21vb3RoaW5nID0gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZXRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWV0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICpcdEBjbGFzcyAgVG9uZS5TcGxpdCBzcGxpdHMgYW4gaW5jb21pbmcgc2lnbmFsIGludG8gbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3BsaXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHRcdCAqIHN0ZXJlb1NpZ25hbC5jb25uZWN0KHNwbGl0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU3BsaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMCwgMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge0NoYW5uZWxTcGxpdHRlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyID0gdGhpcy5pbnB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVDaGFubmVsU3BsaXR0ZXIoMik7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuY2hhbm5lbENvdW50ID0gMjtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBMZWZ0IGNoYW5uZWwgb3V0cHV0LlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubGVmdCA9IHRoaXMub3V0cHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFJpZ2h0IGNoYW5uZWwgb3V0cHV0LlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMV08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSB0aGlzLm91dHB1dFsxXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuY29ubmVjdCh0aGlzLmxlZnQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNvbm5lY3QodGhpcy5yaWdodCwgMSwgMCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TcGxpdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TcGxpdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TcGxpdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLmxlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yaWdodC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yaWdodCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNwbGl0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTWlkL1NpZGUgcHJvY2Vzc2luZyBzZXBhcmF0ZXMgdGhlIHRoZSAnbWlkJyBzaWduYWxcblx0XHQgKiAgICAgICAgICh3aGljaCBjb21lcyBvdXQgb2YgYm90aCB0aGUgbGVmdCBhbmQgdGhlIHJpZ2h0IGNoYW5uZWwpXG5cdFx0ICogICAgICAgICBhbmQgdGhlICdzaWRlJyAod2hpY2ggb25seSBjb21lcyBvdXQgb2YgdGhlIHRoZSBzaWRlIGNoYW5uZWxzKS4gPGJyPjxicj5cblx0XHQgKiAgICAgICAgIDxjb2RlPlxuXHRcdCAqICAgICAgICAgTWlkID0gKExlZnQrUmlnaHQpL3NxcnQoMik7ICAgLy8gb2J0YWluIG1pZC1zaWduYWwgZnJvbSBsZWZ0IGFuZCByaWdodDxicj5cblx0XHQgKiAgICAgICAgIFNpZGUgPSAoTGVmdC1SaWdodCkvc3FydCgyKTsgICAvLyBvYnRhaW4gc2lkZS1zaWduYWwgZnJvbSBsZWZ0IGFuZCByaWdoPGJyPlxuXHRcdCAqICAgICAgICAgPC9jb2RlPlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVTcGxpdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygwLCAyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzcGxpdCB0aGUgaW5jb21pbmcgc2lnbmFsIGludG8gbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHNcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NwbGl0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLlNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBzZW5kLiBDb25uZWN0IHRvIG1pZCBwcm9jZXNzaW5nLiBBbGlhcyBmb3Jcblx0XHRcdCAqICA8Y29kZT5vdXRwdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWRkfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkQWRkID0gbmV3IFRvbmUuQWRkKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgX21pZEFkZCBieSBzcXJ0KDEvMilcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLm91dHB1dFswXSA9IG5ldyBUb25lLk11bHRpcGx5KE1hdGguU1FSVDFfMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZGUgb3V0cHV0LiBDb25uZWN0IHRvIHNpZGUgcHJvY2Vzc2luZy4gQWxzbyBPdXRwdXQgMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0ID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIE11bHRpcGx5IHRoZSBfbWlkQWRkIGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGUgPSB0aGlzLm91dHB1dFsxXSA9IG5ldyBUb25lLk11bHRpcGx5KE1hdGguU1FSVDFfMik7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuY29ubmVjdCh0aGlzLl9taWRBZGQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fbWlkQWRkLCAxLCAxKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX3NpZGVTdWJ0cmFjdCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuY29ubmVjdCh0aGlzLl9zaWRlU3VidHJhY3QsIDEsIDEpO1xuXHQgICAgICAgIHRoaXMuX21pZEFkZC5jb25uZWN0KHRoaXMubWlkKTtcblx0ICAgICAgICB0aGlzLl9zaWRlU3VidHJhY3QuY29ubmVjdCh0aGlzLnNpZGUpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkU2lkZVNwbGl0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZVNwbGl0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVTcGxpdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnNpZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZEFkZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkQWRkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zaWRlU3VidHJhY3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NaWRTaWRlU3BsaXQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBNaWQvU2lkZSBwcm9jZXNzaW5nIHNlcGFyYXRlcyB0aGUgdGhlICdtaWQnIHNpZ25hbFxuXHRcdCAqICAgICAgICAgKHdoaWNoIGNvbWVzIG91dCBvZiBib3RoIHRoZSBsZWZ0IGFuZCB0aGUgcmlnaHQgY2hhbm5lbClcblx0XHQgKiAgICAgICAgIGFuZCB0aGUgJ3NpZGUnICh3aGljaCBvbmx5IGNvbWVzIG91dCBvZiB0aGUgdGhlIHNpZGUgY2hhbm5lbHMpLlxuXHRcdCAqICAgICAgICAgTWlkU2lkZU1lcmdlIG1lcmdlcyB0aGUgbWlkIGFuZCBzaWRlIHNpZ25hbCBhZnRlciB0aGV5J3ZlIGJlZW4gc2VwZXJhdGVkXG5cdFx0ICogICAgICAgICBieSBUb25lLk1pZFNpZGVTcGxpdC48YnI+PGJyPlxuXHRcdCAqICAgICAgICAgPGNvZGU+XG5cdFx0ICogICAgICAgICBMZWZ0ID0gKE1pZCtTaWRlKS9zcXJ0KDIpOyAgIC8vIG9idGFpbiBsZWZ0IHNpZ25hbCBmcm9tIG1pZCBhbmQgc2lkZTxicj5cblx0XHQgKiAgICAgICAgIFJpZ2h0ID0gKE1pZC1TaWRlKS9zcXJ0KDIpOyAgIC8vIG9idGFpbiByaWdodCBzaWduYWwgZnJvbSBtaWQgYW5kIHNpZGU8YnI+XG5cdFx0ICogICAgICAgICA8L2NvZGU+XG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZU1lcmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgc2lnbmFsIGlucHV0LiBBbGlhcyBmb3Jcblx0XHRcdCAqICA8Y29kZT5pbnB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gdGhpcy5pbnB1dFswXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICByZWNvbWJpbmUgdGhlIG1pZC9zaWRlIGludG8gTGVmdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGVmdCA9IG5ldyBUb25lLkFkZCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIGxlZnQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdCA9IG5ldyBUb25lLk11bHRpcGx5KE1hdGguU1FSVDFfMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZGUgc2lnbmFsIGlucHV0LiBBbGlhcyBmb3Jcblx0XHRcdCAqICA8Y29kZT5pbnB1dFsxXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcmVjb21iaW5lIHRoZSBtaWQvc2lkZSBpbnRvIFJpZ2h0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIE11bHRpcGx5IHRoZSByaWdodCBieSBzcXJ0KDEvMilcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29SaWdodCA9IG5ldyBUb25lLk11bHRpcGx5KE1hdGguU1FSVDFfMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTWVyZ2UgdGhlIGxlZnQvcmlnaHQgc2lnbmFsIGJhY2sgaW50byBhIHN0ZXJlbyBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NZXJnZSgpO1xuXHQgICAgICAgIHRoaXMubWlkLmNvbm5lY3QodGhpcy5fbGVmdCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5zaWRlLmNvbm5lY3QodGhpcy5fbGVmdCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5taWQuY29ubmVjdCh0aGlzLl9yaWdodCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5zaWRlLmNvbm5lY3QodGhpcy5fcmlnaHQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2xlZnQuY29ubmVjdCh0aGlzLl90aW1lc1R3b0xlZnQpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0LmNvbm5lY3QodGhpcy5fdGltZXNUd29SaWdodCk7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29MZWZ0LmNvbm5lY3QodGhpcy5fbWVyZ2UsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQuY29ubmVjdCh0aGlzLl9tZXJnZSwgMCwgMSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRTaWRlTWVyZ2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlTWVyZ2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZU1lcmdlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGVmdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29MZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9yaWdodCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29SaWdodC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29SaWdodCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NaWRTaWRlTWVyZ2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk1pZFNpZGVDb21wcmVzc29yIGFwcGxpZXMgdHdvIGRpZmZlcmVudCBjb21wcmVzc29ycyB0byB0aGUgbWlkXG5cdFx0ICogICAgICAgICBhbmQgc2lkZSBzaWduYWwgY29tcG9uZW50cy4gU2VlIFRvbmUuTWlkU2lkZVNwbGl0LlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIG9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBtaWQgYW5kIHNpZGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NvcnMuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlQ29tcHJlc3NvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtaWQvc2lkZSBzcGxpdFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5NaWRTaWRlU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NaWRTaWRlU3BsaXQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWlkL3NpZGUgcmVjb21iaW5hdGlvblxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5NaWRTaWRlTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTWlkU2lkZU1lcmdlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgbWlkIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Db21wcmVzc29yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMubWlkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBzaWRlIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Db21wcmVzc29yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLnNpZGUpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdC5taWQuY2hhaW4odGhpcy5taWQsIHRoaXMuX21pZFNpZGVNZXJnZS5taWQpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdC5zaWRlLmNoYWluKHRoaXMuc2lkZSwgdGhpcy5fbWlkU2lkZU1lcmdlLnNpZGUpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdzaWRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkU2lkZUNvbXByZXNzb3IsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlQ29tcHJlc3Nvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWlkJzoge1xuXHQgICAgICAgICAgICAncmF0aW8nOiAzLFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJzogLTI0LFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuMDMsXG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAyLFxuXHQgICAgICAgICAgICAna25lZSc6IDE2XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnc2lkZSc6IHtcblx0ICAgICAgICAgICAgJ3JhdGlvJzogNixcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCc6IC0zMCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjI1LFxuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMyxcblx0ICAgICAgICAgICAgJ2tuZWUnOiAxMFxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1pZFNpZGVDb21wcmVzc29yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVDb21wcmVzc29yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ3NpZGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NaWRTaWRlQ29tcHJlc3Nvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTW9ubyBjb2VyY2VzIHRoZSBpbmNvbWluZyBtb25vIG9yIHN0ZXJlbyBzaWduYWwgaW50byBhIG1vbm8gc2lnbmFsXG5cdFx0ICogICAgICAgICB3aGVyZSBib3RoIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzIGhhdmUgdGhlIHNhbWUgdmFsdWUuIFRoaXMgY2FuIGJlIHVzZWZ1bFxuXHRcdCAqICAgICAgICAgZm9yIFtzdGVyZW8gaW1hZ2luZ10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3RlcmVvX2ltYWdpbmcpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbWVyZ2UgdGhlIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fbWVyZ2UsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9tZXJnZSwgMCwgMSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb25vLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Nb25vO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBjb21wcmVzc29yIHdpdGggc2VwZXJhdGUgY29udHJvbHMgb3ZlciBsb3cvbWlkL2hpZ2ggZHluYW1pY3Ncblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgbG93L21pZC9oaWdoIGNvbXByZXNzb3Igc2V0dGluZ3MuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBtdWx0aWJhbmQgPSBuZXcgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yKHtcblx0XHQgKiAgXHRcImxvd0ZyZXF1ZW5jeVwiIDogMjAwLFxuXHRcdCAqICBcdFwiaGlnaEZyZXF1ZW5jeVwiIDogMTMwMFxuXHRcdCAqICBcdFwibG93XCIgOiB7XG5cdFx0ICogIFx0XHRcInRocmVzaG9sZFwiIDogLTEyXG5cdFx0ICogIFx0fVxuXHRcdCAqICB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcoYXJndW1lbnRzLCBUb25lLk11bHRpYmFuZENvbXByZXNzb3IuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWwgaW50byBoaWdoL21pZC9sb3dcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aWJhbmRTcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTXVsdGliYW5kU3BsaXQoe1xuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jzogb3B0aW9ucy5sb3dGcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jzogb3B0aW9ucy5oaWdoRnJlcXVlbmN5XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbG93L21pZCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSB0aGlzLl9zcGxpdHRlci5sb3dGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbWlkL2hpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IHRoaXMuX3NwbGl0dGVyLmhpZ2hGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG91dHB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIGxvdyBmcmVxdWVuY2llcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Db21wcmVzc29yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3cgPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMubG93KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBtaWQgZnJlcXVlbmNpZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLm1pZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgaGlnaCBmcmVxdWVuY2llcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Db21wcmVzc29yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLmhpZ2gpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgY29tcHJlc3NvclxuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmxvdy5jaGFpbih0aGlzLmxvdywgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLm1pZC5jaGFpbih0aGlzLm1pZCwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmhpZ2guY2hhaW4odGhpcy5oaWdoLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTXVsdGliYW5kQ29tcHJlc3NvciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZENvbXByZXNzb3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2xvdyc6IFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyxcblx0ICAgICAgICAnbWlkJzogVG9uZS5Db21wcmVzc29yLmRlZmF1bHRzLFxuXHQgICAgICAgICdoaWdoJzogVG9uZS5Db21wcmVzc29yLmRlZmF1bHRzLFxuXHQgICAgICAgICdsb3dGcmVxdWVuY3knOiAyNTAsXG5cdCAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiAyMDAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk11bHRpYmFuZENvbXByZXNzb3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5sb3cuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhpZ2guZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvdyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkICYmICF3aW5kb3cuU3RlcmVvUGFubmVyTm9kZSkge1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogQGNsYXNzIFNoaW1tZWQgU3RlcmVvUGFubmVyTm9kZVxuXHRcdFx0ICogQHBhcmFtICB7QXVkaW9Db250ZXh0fSBjb250ZXh0XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdmFyIFN0ZXJlb1Bhbm5lck5vZGUgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIGF1ZGlvIGNvbnRleHRcblx0XHRcdFx0ICogQHR5cGUge0F1ZGlvQ29udGV4dH1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgbGVmdC9yaWdodCBwYW5uaW5nLiBbLTEsIDFdXG5cdFx0XHRcdCAqIEB0eXBlIHtBdWRpb1JhbmdlfVxuXHRcdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLnBhbiA9IG5ldyBUb25lLlNpZ25hbCgwLCBUb25lLlR5cGUuQXVkaW9SYW5nZSk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBFcXVhbCBwb3dlciBzY2FsaW5nIG9mIHRoZSByaWdodCBnYWluXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgcmlnaHRXYXZlU2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5lcXVhbFBvd2VyU2NhbGUoKHZhbCArIDEpIC8gMik7XG5cdCAgICAgICAgICAgIH0sIDQwOTYpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogRXF1YWwgcG93ZXIgc2NhbGluZyBvZiB0aGUgbGVmdCBnYWluXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgbGVmdFdhdmVTaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmVxdWFsUG93ZXJTY2FsZSgxIC0gKHZhbCArIDEpIC8gMik7XG5cdCAgICAgICAgICAgIH0sIDQwOTYpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIGxlZnQgZ2FpbiB2YWx1ZVxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIGxlZnRHYWluID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIHJpZ2h0IGdhaW4gdmFsdWVcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciByaWdodEdhaW4gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBTcGxpdCB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLlNwbGl0fVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHNwbGl0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLlNwbGl0KCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBLZWVwcyB0aGUgd2F2ZXNoYXBlcnMgZnJvbSBvcHRpbWl6aW5nIDBzXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLlplcm99XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgemVybyA9IG5ldyBUb25lLlplcm8oKTtcblx0ICAgICAgICAgICAgemVyby5mYW4ocmlnaHRXYXZlU2hhcGVyLCBsZWZ0V2F2ZVNoYXBlcik7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBNZXJnZSB0aGUgb3V0Z29pbmcgc2lnbmFsXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLk1lcmdlfVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIG1lcmdlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NZXJnZSgpO1xuXHQgICAgICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgICAgIHNwbGl0LmxlZnQuY2hhaW4obGVmdEdhaW4sIG1lcmdlLmxlZnQpO1xuXHQgICAgICAgICAgICBzcGxpdC5yaWdodC5jaGFpbihyaWdodEdhaW4sIG1lcmdlLnJpZ2h0KTtcblx0ICAgICAgICAgICAgdGhpcy5wYW4uY2hhaW4obGVmdFdhdmVTaGFwZXIsIGxlZnRHYWluLmdhaW4pO1xuXHQgICAgICAgICAgICB0aGlzLnBhbi5jaGFpbihyaWdodFdhdmVTaGFwZXIsIHJpZ2h0R2Fpbi5nYWluKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFN0ZXJlb1Bhbm5lck5vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmRpc2Nvbm5lY3QuYXBwbHkodGhpcy5vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBTdGVyZW9QYW5uZXJOb2RlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dC5jb25uZWN0LmFwcGx5KHRoaXMub3V0cHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgLy9hZGQgaXQgdG8gdGhlIEF1ZGlvQ29udGV4dFxuXHQgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlU3RlcmVvUGFubmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFN0ZXJlb1Bhbm5lck5vZGUodGhpcyk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmNyZWF0ZVN0ZXJlb1Bhbm5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGVyZW9QYW5uZXJOb2RlKHRoaXMpO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5QYW5uZXIgaXMgYW4gZXF1YWwgcG93ZXIgTGVmdC9SaWdodCBQYW5uZXIgYW5kIGRvZXMgbm90XG5cdFx0ICogICAgICAgICAgc3VwcG9ydCAzRC4gUGFubmVyIHVzZXMgdGhlIFN0ZXJlb1Bhbm5lck5vZGUgd2hlbiBhdmFpbGFibGUuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW2luaXRpYWxQYW49MF0gVGhlIGluaXRhaWwgcGFubmVyIHZhbHVlIChjZW50ZXIpLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICAvL3BhbiB0aGUgaW5wdXQgc2lnbmFsIGhhcmQgcmlnaHQuXG5cdFx0ICogIHZhciBwYW5uZXIgPSBuZXcgVG9uZS5QYW5uZXIoMSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lciA9IGZ1bmN0aW9uIChpbml0aWFsUGFuKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCogIHRoZSBwYW5uZXIgbm9kZVxuXHRcdFx0KiAgQHR5cGUge1N0ZXJlb1Bhbm5lck5vZGV9XG5cdFx0XHQqICBAcHJpdmF0ZVxuXHRcdFx0Ki9cblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlU3RlcmVvUGFubmVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQqICBUaGUgcGFuIGNvbnRyb2wuIC0xID0gaGFyZCBsZWZ0LCAxID0gaGFyZCByaWdodC5cblx0XHRcdCogIEB0eXBlIHtBdWRpb1JhbmdlfVxuXHRcdFx0KiAgQHNpZ25hbFxuXHRcdFx0Ki9cblx0ICAgICAgICB0aGlzLnBhbiA9IHRoaXMuX3Bhbm5lci5wYW47XG5cdCAgICAgICAgLy9pbml0aWFsIHZhbHVlXG5cdCAgICAgICAgdGhpcy5wYW4udmFsdWUgPSBUb25lLmRlZmF1bHRBcmcoaW5pdGlhbFBhbiwgMCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3BhbicpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFubmVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgncGFuJyk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucGFuID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYW5uZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBzcGF0aWFsaXplZCBwYW5uZXIgbm9kZSB3aGljaCBzdXBwb3J0cyBlcXVhbHBvd2VyIG9yIEhSVEYgcGFubmluZy5cblx0XHQgKiAgICAgICAgICBUcmllcyB0byBub3JtYWxpemUgdGhlIEFQSSBhY3Jvc3MgdmFyaW91cyBicm93c2Vycy4gU2VlIFRvbmUuTGlzdGVuZXJcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gcG9zaXRpb25YIFRoZSBpbml0aWFsIHggcG9zaXRpb24uXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBwb3NpdGlvblkgVGhlIGluaXRpYWwgeSBwb3NpdGlvbi5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHBvc2l0aW9uWiBUaGUgaW5pdGlhbCB6IHBvc2l0aW9uLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwb3NpdGlvblgnLFxuXHQgICAgICAgICAgICAncG9zaXRpb25ZJyxcblx0ICAgICAgICAgICAgJ3Bvc2l0aW9uWidcblx0ICAgICAgICBdLCBUb25lLlBhbm5lcjNEKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYW5uZXIgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtQYW5uZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCk7XG5cdCAgICAgICAgLy9zZXQgc29tZSB2YWx1ZXNcblx0ICAgICAgICB0aGlzLl9wYW5uZXIucGFubmluZ01vZGVsID0gb3B0aW9ucy5wYW5uaW5nTW9kZWw7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLm1heERpc3RhbmNlID0gb3B0aW9ucy5tYXhEaXN0YW5jZTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzdGFuY2VNb2RlbCA9IG9wdGlvbnMuZGlzdGFuY2VNb2RlbDtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuY29uZU91dGVyR2FpbiA9IG9wdGlvbnMuY29uZU91dGVyR2Fpbjtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuY29uZU91dGVyQW5nbGUgPSBvcHRpb25zLmNvbmVPdXRlckFuZ2xlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5jb25lSW5uZXJBbmdsZSA9IG9wdGlvbnMuY29uZUlubmVyQW5nbGU7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLnJlZkRpc3RhbmNlID0gb3B0aW9ucy5yZWZEaXN0YW5jZTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIucm9sbG9mZkZhY3RvciA9IG9wdGlvbnMucm9sbG9mZkZhY3Rvcjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkcyB0aGUgY3VycmVudCBvcmllbnRhdGlvblxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gW1xuXHQgICAgICAgICAgICBvcHRpb25zLm9yaWVudGF0aW9uWCxcblx0ICAgICAgICAgICAgb3B0aW9ucy5vcmllbnRhdGlvblksXG5cdCAgICAgICAgICAgIG9wdGlvbnMub3JpZW50YXRpb25aXG5cdCAgICAgICAgXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkcyB0aGUgY3VycmVudCBwb3NpdGlvblxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gW1xuXHQgICAgICAgICAgICBvcHRpb25zLnBvc2l0aW9uWCxcblx0ICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvblksXG5cdCAgICAgICAgICAgIG9wdGlvbnMucG9zaXRpb25aXG5cdCAgICAgICAgXTtcblx0ICAgICAgICAvLyBzZXQgdGhlIGRlZmF1bHQgcG9zaXRpb24vb3JpZW50YXRpb25cblx0ICAgICAgICB0aGlzLm9yaWVudGF0aW9uWCA9IG9wdGlvbnMub3JpZW50YXRpb25YO1xuXHQgICAgICAgIHRoaXMub3JpZW50YXRpb25ZID0gb3B0aW9ucy5vcmllbnRhdGlvblk7XG5cdCAgICAgICAgdGhpcy5vcmllbnRhdGlvblogPSBvcHRpb25zLm9yaWVudGF0aW9uWjtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uWCA9IG9wdGlvbnMucG9zaXRpb25YO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb25ZID0gb3B0aW9ucy5wb3NpdGlvblk7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvblogPSBvcHRpb25zLnBvc2l0aW9uWjtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhbm5lcjNELCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHMgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwb3NpdGlvblgnOiAwLFxuXHQgICAgICAgICdwb3NpdGlvblknOiAwLFxuXHQgICAgICAgICdwb3NpdGlvblonOiAwLFxuXHQgICAgICAgICdvcmllbnRhdGlvblgnOiAwLFxuXHQgICAgICAgICdvcmllbnRhdGlvblknOiAwLFxuXHQgICAgICAgICdvcmllbnRhdGlvblonOiAwLFxuXHQgICAgICAgICdwYW5uaW5nTW9kZWwnOiAnZXF1YWxwb3dlcicsXG5cdCAgICAgICAgJ21heERpc3RhbmNlJzogMTAwMDAsXG5cdCAgICAgICAgJ2Rpc3RhbmNlTW9kZWwnOiAnaW52ZXJzZScsXG5cdCAgICAgICAgJ2NvbmVPdXRlckdhaW4nOiAwLFxuXHQgICAgICAgICdjb25lT3V0ZXJBbmdsZSc6IDM2MCxcblx0ICAgICAgICAnY29uZUlubmVyQW5nbGUnOiAzNjAsXG5cdCAgICAgICAgJ3JlZkRpc3RhbmNlJzogMSxcblx0ICAgICAgICAncm9sbG9mZkZhY3Rvcic6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcmFtcCB0aW1lIHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIHNldFRhcmdldEF0VGltZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QucHJvdG90eXBlLl9yYW1wVGltZUNvbnN0YW50ID0gMC4wMTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgc291cmNlIGluIDNkIHNwYWNlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBhbm5lcjNEfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELnByb3RvdHlwZS5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Bhbm5lci5wb3NpdGlvblgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5wb3NpdGlvblguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5wb3NpdGlvblkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5wb3NpdGlvblouc2V0VGFyZ2V0QXRUaW1lKHosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnNldFBvc2l0aW9uKHgsIHksIHopO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBzb3VyY2UgaW4gM2Qgc3BhY2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGFubmVyM0R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QucHJvdG90eXBlLnNldE9yaWVudGF0aW9uID0gZnVuY3Rpb24gKHgsIHksIHopIHtcblx0ICAgICAgICBpZiAodGhpcy5fcGFubmVyLm9yaWVudGF0aW9uWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLm9yaWVudGF0aW9uWC5zZXRUYXJnZXRBdFRpbWUoeCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLm9yaWVudGF0aW9uWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLm9yaWVudGF0aW9uWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIuc2V0T3JpZW50YXRpb24oeCwgeSwgeik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ3Bvc2l0aW9uWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMF0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblswXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAncG9zaXRpb25ZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblsxXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzFdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25aXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdwb3NpdGlvblonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzJdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMl07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggb3JpZW50YXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBvcmllbnRhdGlvblhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ29yaWVudGF0aW9uWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMF0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblswXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBvcmllbnRhdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG9yaWVudGF0aW9uWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAnb3JpZW50YXRpb25ZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblsxXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzFdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IG9yaWVudGF0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgb3JpZW50YXRpb25aXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdvcmllbnRhdGlvblonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzJdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMl07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUHJveHkgYSBwcm9wZXJ0eSBvbiB0aGUgcGFubmVyIHRvIGFuIGV4cG9zZWQgcHVibGljIHByb3Blcnlcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wKSB7XG5cdCAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCBwcm9wLCB7XG5cdCAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcGFubmVyW3Byb3BdID0gdmFsO1xuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYW5uZXJbcHJvcF07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBhbm5pbmcgbW9kZWwuIEVpdGhlciBcImVxdWFscG93ZXJcIiBvciBcIkhSVEZcIi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHBhbm5pbmdNb2RlbFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgncGFubmluZ01vZGVsJyk7XG5cdCAgICAvKipcblx0XHQgKiAgQSByZWZlcmVuY2UgZGlzdGFuY2UgZm9yIHJlZHVjaW5nIHZvbHVtZSBhcyBzb3VyY2UgbW92ZSBmdXJ0aGVyIGZyb20gdGhlIGxpc3RlbmVyXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSByZWZEaXN0YW5jZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgncmVmRGlzdGFuY2UnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZXNjcmliZXMgaG93IHF1aWNrbHkgdGhlIHZvbHVtZSBpcyByZWR1Y2VkIGFzIHNvdXJjZSBtb3ZlcyBhd2F5IGZyb20gbGlzdGVuZXIuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSByb2xsb2ZmRmFjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdyb2xsb2ZmRmFjdG9yJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRpc3RhbmNlIG1vZGVsIHVzZWQgYnksICBcImxpbmVhclwiLCBcImludmVyc2VcIiwgb3IgXCJleHBvbmVudGlhbFwiLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgZGlzdGFuY2VNb2RlbFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnZGlzdGFuY2VNb2RlbCcpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBhbmdsZSwgaW4gZGVncmVlcywgaW5zaWRlIG9mIHdoaWNoIHRoZXJlIHdpbGwgYmUgbm8gdm9sdW1lIHJlZHVjdGlvblxuXHRcdCAqICBAdHlwZSB7RGVncmVlc31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIGNvbmVJbm5lckFuZ2xlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdjb25lSW5uZXJBbmdsZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBhbmdsZSwgaW4gZGVncmVlcywgb3V0c2lkZSBvZiB3aGljaCB0aGUgdm9sdW1lIHdpbGwgYmUgcmVkdWNlZFxuXHRcdCAqICB0byBhIGNvbnN0YW50IHZhbHVlIG9mIGNvbmVPdXRlckdhaW5cblx0XHQgKiAgQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBjb25lT3V0ZXJBbmdsZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnY29uZU91dGVyQW5nbGUnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZ2FpbiBvdXRzaWRlIG9mIHRoZSBjb25lT3V0ZXJBbmdsZVxuXHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIGNvbmVPdXRlckdhaW5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2NvbmVPdXRlckdhaW4nKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbWF4aW11bSBkaXN0YW5jZSBiZXR3ZWVuIHNvdXJjZSBhbmQgbGlzdGVuZXIsXG5cdFx0ICogIGFmdGVyIHdoaWNoIHRoZSB2b2x1bWUgd2lsbCBub3QgYmUgcmVkdWNlZCBhbnkgZnVydGhlci5cblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgbWF4RGlzdGFuY2Vcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ21heERpc3RhbmNlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhbm5lcjNEfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFubmVyM0Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBhblZvbCBpcyBhIFRvbmUuUGFubmVyIGFuZCBUb25lLlZvbHVtZSBpbiBvbmUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtBdWRpb1JhbmdlfSBwYW4gdGhlIGluaXRpYWwgcGFuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2b2x1bWUgVGhlIG91dHB1dCB2b2x1bWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9wYW4gdGhlIGluY29taW5nIHNpZ25hbCBsZWZ0IGFuZCBkcm9wIHRoZSB2b2x1bWVcblx0XHQgKiB2YXIgcGFuVm9sID0gbmV3IFRvbmUuUGFuVm9sKC0wLjI1LCAtMTIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5Wb2wgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncGFuJyxcblx0ICAgICAgICAgICAgJ3ZvbHVtZSdcblx0ICAgICAgICBdLCBUb25lLlBhblZvbCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGFubmluZyBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUGFubmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuUGFubmVyKG9wdGlvbnMucGFuKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgTC9SIHBhbm5pbmcgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBhbiA9IHRoaXMuX3Bhbm5lci5wYW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZvbHVtZSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZvbHVtZSBjb250cm9sIGluIGRlY2liZWxzLlxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5jb25uZWN0KHRoaXMuX3ZvbHVtZSk7XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3BhbicsXG5cdCAgICAgICAgICAgICd2b2x1bWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYW5Wb2wsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlBhblZvbC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGFuJzogMCxcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZS91bm11dGUgdGhlIHZvbHVtZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhblZvbCNcblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5Wb2wucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFuVm9sfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhblZvbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3BhbicsXG5cdCAgICAgICAgICAgICd2b2x1bWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucGFuID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhblZvbDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlNvbG8gbGV0cyB5b3UgaXNvbGF0ZSBhIHNwZWNpZmljIGF1ZGlvIHN0cmVhbS4gV2hlblxuXHRcdCAqICAgICAgICAgYW4gaW5zdGFuY2UgaXMgc2V0IHRvIGBzb2xvPXRydWVgLCBpdCB3aWxsIG11dGUgYWxsIG90aGVyIGluc3RhbmNlcy5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzb2xvQSA9IG5ldyBUb25lLlNvbG8oKVxuXHRcdCAqIHZhciBzb2xvQiA9IG5ldyBUb25lLlNvbG8oKVxuXHRcdCAqIHNvbG9BLnNvbG8gPSB0cnVlXG5cdFx0ICogLy9ubyBhdWRpbyB3aWxsIHBhc3MgdGhyb3VnaCBzb2xvQlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnc29sbyddLCBUb25lLlNvbG8pO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGlucHV0IGFuZCBvdXRwdXQgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgYm91bmQgX3NvbG9lZCBtZXRob2Rcblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zb2xvQmluZCA9IHRoaXMuX3NvbG9lZC5iaW5kKHRoaXMpO1xuXHQgICAgICAgIC8vbGlzdGVuIGZvciBzb2xvIGV2ZW50cyBjbGFzcy13aWRlLlxuXHQgICAgICAgIHRoaXMuY29udGV4dC5vbignc29sbycsIHRoaXMuX3NvbG9CaW5kKTtcblx0ICAgICAgICAvL3NldCBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLnNvbG8gPSBvcHRpb25zLnNvbG87XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Tb2xvLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8uZGVmYXVsdHMgPSB7IHNvbG86IGZhbHNlIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXNvbGF0ZXMgdGhpcyBpbnN0YW5jZSBhbmQgbXV0ZXMgYWxsIG90aGVyIGluc3RhbmNlcyBvZiBUb25lLlNvbG8uXG5cdFx0ICogIE9ubHkgb25lIGluc3RhbmNlIGNhbiBiZSBzb2xvZWQgYXQgYSB0aW1lLiBBIHNvbG9lZFxuXHRcdCAqICBpbnN0YW5jZSB3aWxsIHJlcG9ydCBgc29sbz1mYWxzZWAgd2hlbiBhbm90aGVyIGluc3RhbmNlIGlzIHNvbG9lZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuU29sbyNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBuYW1lIHNvbG9cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNvbG8ucHJvdG90eXBlLCAnc29sbycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzU29sb2VkKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzb2xvKSB7XG5cdCAgICAgICAgICAgIGlmIChzb2xvKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hZGRTb2xvKCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVTb2xvKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmVtaXQoJ3NvbG8nLCB0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgY3VycmVudCBpbnN0YW5jZSBpcyBtdXRlZCwgaS5lLiBhbm90aGVyIGluc3RhbmNlIGlzIHNvbG9lZFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Tb2xvI1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgbXV0ZWRcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Tb2xvLnByb3RvdHlwZSwgJ211dGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5nYWluLnZhbHVlID09PSAwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQWRkIHRoaXMgdG8gdGhlIHNvbG9lZCBhcnJheVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9hZGRTb2xvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghVG9uZS5pc0FycmF5KHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8pKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8gPSBbXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCF0aGlzLl9pc1NvbG9lZCgpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8ucHVzaCh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVtb3ZlIHRoaXMgZnJvbSB0aGUgc29sb2VkIGFycmF5XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX3JlbW92ZVNvbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2lzU29sb2VkKCkpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5pbmRleE9mKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IElzIHRoaXMgb24gdGhlIHNvbG9lZCBhcnJheVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9pc1NvbG9lZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8pKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLmxlbmd0aCAhPT0gMCAmJiB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLmluZGV4T2YodGhpcykgIT09IC0xO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIG5vIG9uZSBpcyBzb2xvZWRcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5fbm9Tb2xvcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gIVRvbmUuaXNBcnJheSh0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvKSB8fCB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLmxlbmd0aCA9PT0gMDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU29sbyB0aGUgY3VycmVudCBpbnN0YW5jZSBhbmQgdW5zb2xvIGFsbCBvdGhlciBpbnN0YW5jZXMuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuU29sb30gIGluc3RhbmNlICBUaGUgaW5zdGFuY2Ugd2hpY2ggaXMgYmVpbmcgc29sb2VkL3Vuc29sb2VkLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5fc29sb2VkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9pc1NvbG9lZCgpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuZ2Fpbi52YWx1ZSA9IDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ub1NvbG9zKCkpIHtcblx0ICAgICAgICAgICAgLy9ubyBvbmUgaXMgc29sb2VkXG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuZ2Fpbi52YWx1ZSA9IDE7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5nYWluLnZhbHVlID0gMDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlNvbG99ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0Lm9mZignc29sbycsIHRoaXMuX3NvbG9CaW5kKTtcblx0ICAgICAgICB0aGlzLl9yZW1vdmVTb2xvKCk7XG5cdCAgICAgICAgdGhpcy5fc29sb0JpbmQgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU29sbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgR2V0IHRoZSBjdXJyZW50IHdhdmVmb3JtIGRhdGEgb2YgdGhlIGNvbm5lY3RlZCBhdWRpbyBzb3VyY2UuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBzaXplIFRoZSBzaXplIG9mIHRoZSBGRlQuIFZhbHVlIG11c3QgYmUgYSBwb3dlciBvZlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlZm9ybSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3NpemUnXSwgVG9uZS5XYXZlZm9ybSk7XG5cdCAgICAgICAgb3B0aW9ucy50eXBlID0gVG9uZS5BbmFseXNlci5UeXBlLldhdmVmb3JtO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFuYWx5c2VyIG5vZGUuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbmFseXNlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuQW5hbHlzZXIob3B0aW9ucyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5XYXZlZm9ybSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtLmRlZmF1bHRzID0geyAnc2l6ZSc6IDEwMjQgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXRzIHRoZSB3YXZlZm9ybSBvZiB0aGUgYXVkaW8gc291cmNlLiBSZXR1cm5zIHRoZSB3YXZlZm9ybSBkYXRhXG5cdFx0ICogIG9mIGxlbmd0aCBbc2l6ZV0oI3NpemUpIGFzIGEgRmxvYXQzMkFycmF5IHdpdGggdmFsdWVzIGJldHdlZW4gLTEgYW5kIDEuXG5cdFx0ICogIEByZXR1cm5zIHtUeXBlZEFycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlZm9ybS5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLmdldFZhbHVlKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzaXplIG9mIGFuYWx5c2lzLiBUaGlzIG11c3QgYmUgYSBwb3dlciBvZiB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5XYXZlZm9ybSNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuV2F2ZWZvcm0ucHJvdG90eXBlLCAnc2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNpemUgPSBzaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5XYXZlZm9ybX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLldhdmVmb3JtO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5DdHJsSW50ZXJwb2xhdGUgd2lsbCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIGdpdmVuIHZhbHVlcyBiYXNlZFxuXHRcdCAqICAgICAgICAgb24gdGhlIFwiaW5kZXhcIiBwcm9wZXJ0eS4gUGFzc2luZyBpbiBhbiBhcnJheSBvciBvYmplY3QgbGl0ZXJhbFxuXHRcdCAqICAgICAgICAgd2lsbCBpbnRlcnBvbGF0ZSBlYWNoIG9mIHRoZSBwYXJhbWV0ZXJzLiBOb3RlIChpLmUuIFwiQzNcIilcblx0XHQgKiAgICAgICAgIGFuZCBUaW1lIChpLmUuIFwiNG4gKyAyXCIpIGNhbiBiZSBpbnRlcnBvbGF0ZWQuIEFsbCBvdGhlciB2YWx1ZXMgYXJlXG5cdFx0ICogICAgICAgICBhc3N1bWVkIHRvIGJlIG51bWJlcnMuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBpbnRlcnAgPSBuZXcgVG9uZS5DdHJsSW50ZXJwb2xhdGUoWzAsIDIsIDksIDRdKTtcblx0XHQgKiBpbnRlcnAuaW5kZXggPSAwLjc1O1xuXHRcdCAqIGludGVycC52YWx1ZTsgLy9yZXR1cm5zIDEuNVxuXHRcdCAqXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGludGVycCA9IG5ldyBUb25lLkN0cmxJbnRlcnBvbGF0ZShbXG5cdFx0ICogXHRbMiwgNCwgNV0sXG5cdFx0ICogXHRbOSwgMywgMl0sXG5cdFx0ICogXSk7XG5cdFx0ICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSBhcnJheSBvZiB2YWx1ZXMgdG8gaW50ZXJwb2xhdGUgb3ZlclxuXHRcdCAqIEBwYXJhbSB7UG9zaXRpdmV9IGluZGV4IFRoZSBpbml0aWFsIGludGVycG9sYXRpb24gaW5kZXguXG5cdFx0ICogQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd2YWx1ZXMnLFxuXHQgICAgICAgICAgICAnaW5kZXgnXG5cdCAgICAgICAgXSwgVG9uZS5DdHJsSW50ZXJwb2xhdGUpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWVzIHRvIGludGVycG9sYXRlIGJldHdlZW5cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBvcHRpb25zLnZhbHVlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgaW50ZXJwb2xhdGVkIGluZGV4IGJldHdlZW4gdmFsdWVzLiBGb3IgZXhhbXBsZTogYSB2YWx1ZSBvZiAxLjVcblx0XHRcdCAqICB3b3VsZCBpbnRlcnBvbGF0ZSBlcXVhbGx5IGJldHdlZW4gdGhlIHZhbHVlIGF0IGluZGV4IDFcblx0XHRcdCAqICBhbmQgdGhlIHZhbHVlIGF0IGluZGV4IDIuIFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiBpbnRlcnAuaW5kZXggPSAwOyBcblx0XHRcdCAqIGludGVycC52YWx1ZTsgLy9yZXR1cm5zIHRoZSB2YWx1ZSBhdCAwXG5cdFx0XHQgKiBpbnRlcnAuaW5kZXggPSAwLjU7XG5cdFx0XHQgKiBpbnRlcnAudmFsdWU7IC8vcmV0dXJucyB0aGUgdmFsdWUgYmV0d2VlbiBpbmRpY2VzIDAgYW5kIDEuIFxuXHRcdFx0ICogIEB0eXBlICB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmluZGV4ID0gb3B0aW9ucy5pbmRleDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkN0cmxJbnRlcnBvbGF0ZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdpbmRleCc6IDAsXG5cdCAgICAgICAgJ3ZhbHVlcyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IGludGVycG9sYXRlZCB2YWx1ZSBiYXNlZCBvbiB0aGUgaW5kZXhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkN0cmxJbnRlcnBvbGF0ZSNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DdHJsSW50ZXJwb2xhdGUucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXg7XG5cdCAgICAgICAgICAgIGluZGV4ID0gTWF0aC5taW4oaW5kZXgsIHRoaXMudmFsdWVzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgbG93ZXJQb3NpdGlvbiA9IE1hdGguZmxvb3IoaW5kZXgpO1xuXHQgICAgICAgICAgICB2YXIgbG93ZXIgPSB0aGlzLnZhbHVlc1tsb3dlclBvc2l0aW9uXTtcblx0ICAgICAgICAgICAgdmFyIHVwcGVyID0gdGhpcy52YWx1ZXNbTWF0aC5jZWlsKGluZGV4KV07XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnRlcnBvbGF0ZShpbmRleCAtIGxvd2VyUG9zaXRpb24sIGxvd2VyLCB1cHBlcik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgaW50ZXJwb2xhdGlvbiByb3V0aW5lXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSAgaW5kZXggIFRoZSBpbmRleCBiZXR3ZWVuIHRoZSBsb3dlciBhbmQgdXBwZXJcblx0XHQgKiAgQHBhcmFtICB7Kn0gIGxvd2VyIFxuXHRcdCAqICBAcGFyYW0gIHsqfSAgdXBwZXIgXG5cdFx0ICogIEByZXR1cm4gIHsqfSAgVGhlIGludGVycG9sYXRlZCB2YWx1ZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUucHJvdG90eXBlLl9pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uIChpbmRleCwgbG93ZXIsIHVwcGVyKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheShsb3dlcikpIHtcblx0ICAgICAgICAgICAgdmFyIHJldEFycmF5ID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG93ZXIubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHJldEFycmF5W2ldID0gdGhpcy5faW50ZXJwb2xhdGUoaW5kZXgsIGxvd2VyW2ldLCB1cHBlcltpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHJldEFycmF5O1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc09iamVjdChsb3dlcikpIHtcblx0ICAgICAgICAgICAgdmFyIHJldE9iaiA9IHt9O1xuXHQgICAgICAgICAgICBmb3IgKHZhciBhdHRyIGluIGxvd2VyKSB7XG5cdCAgICAgICAgICAgICAgICByZXRPYmpbYXR0cl0gPSB0aGlzLl9pbnRlcnBvbGF0ZShpbmRleCwgbG93ZXJbYXR0cl0sIHVwcGVyW2F0dHJdKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0T2JqO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGxvd2VyID0gdGhpcy5fdG9OdW1iZXIobG93ZXIpO1xuXHQgICAgICAgICAgICB1cHBlciA9IHRoaXMuX3RvTnVtYmVyKHVwcGVyKTtcblx0ICAgICAgICAgICAgcmV0dXJuICgxIC0gaW5kZXgpICogbG93ZXIgKyBpbmRleCAqIHVwcGVyO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBmcm9tIHRoZSBnaXZlbiB0eXBlIGludG8gYSBudW1iZXJcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfFN0cmluZ30gIHZhbHVlXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZS5wcm90b3R5cGUuX3RvTnVtYmVyID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKHZhbCkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL290aGVyd2lzZSBhc3N1bWUgdGhhdCBpdCdzIFRpbWUuLi5cblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9TZWNvbmRzKHZhbCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5DdHJsSW50ZXJwb2xhdGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ3RybEludGVycG9sYXRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5DdHJsTWFya292IHJlcHJlc2VudHMgYSBNYXJrb3YgQ2hhaW4gd2hlcmUgZWFjaCBjYWxsXG5cdFx0ICogICAgICAgICB0byBUb25lLkN0cmxNYXJrb3YubmV4dCB3aWxsIG1vdmUgdG8gdGhlIG5leHQgc3RhdGUuIElmIHRoZSBuZXh0XG5cdFx0ICogICAgICAgICBzdGF0ZSBjaG9pY2UgaXMgYW4gYXJyYXksIHRoZSBuZXh0IHN0YXRlIGlzIGNob3NlbiByYW5kb21seSB3aXRoXG5cdFx0ICogICAgICAgICBldmVuIHByb2JhYmlsaXR5IGZvciBhbGwgb2YgdGhlIGNob2ljZXMuIEZvciBhIHdlaWdodGVkIHByb2JhYmlsaXR5XG5cdFx0ICogICAgICAgICBvZiB0aGUgbmV4dCBjaG9pY2VzLCBwYXNzIGluIGFuIG9iamVjdCB3aXRoIFwic3RhdGVcIiBhbmQgXCJwcm9iYWJpbGl0eVwiIGF0dHJpYnV0ZXMuIFxuXHRcdCAqICAgICAgICAgVGhlIHByb2JhYmlsaXRpZXMgd2lsbCBiZSBub3JtYWxpemVkIGFuZCB0aGVuIGNob3Nlbi4gSWYgbm8gbmV4dCBvcHRpb25zXG5cdFx0ICogICAgICAgICBhcmUgZ2l2ZW4gZm9yIHRoZSBjdXJyZW50IHN0YXRlLCB0aGUgc3RhdGUgd2lsbCBzdGF5IHRoZXJlLiBcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNoYWluID0gbmV3IFRvbmUuQ3RybE1hcmtvdih7XG5cdFx0ICogXHRcImJlZ2lubmluZ1wiIDogW1wiZW5kXCIsIFwibWlkZGxlXCJdLFxuXHRcdCAqIFx0XCJtaWRkbGVcIiA6IFwiZW5kXCJcblx0XHQgKiB9KTtcblx0XHQgKiBjaGFpbi52YWx1ZSA9IFwiYmVnaW5uaW5nXCI7XG5cdFx0ICogY2hhaW4ubmV4dCgpOyAvL3JldHVybnMgXCJlbmRcIiBvciBcIm1pZGRsZVwiIHdpdGggNTAlIHByb2JhYmlsaXR5XG5cdFx0ICpcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgY2hhaW4gPSBuZXcgVG9uZS5DdHJsTWFya292KHtcblx0XHQgKiBcdFwiYmVnaW5uaW5nXCIgOiBbe1widmFsdWVcIiA6IFwiZW5kXCIsIFwicHJvYmFiaWxpdHlcIiA6IDAuOH0sIFxuXHRcdCAqIFx0XHRcdFx0XHR7XCJ2YWx1ZVwiIDogXCJtaWRkbGVcIiwgXCJwcm9iYWJpbGl0eVwiIDogMC4yfV0sXG5cdFx0ICogXHRcIm1pZGRsZVwiIDogXCJlbmRcIlxuXHRcdCAqIH0pO1xuXHRcdCAqIGNoYWluLnZhbHVlID0gXCJiZWdpbm5pbmdcIjtcblx0XHQgKiBjaGFpbi5uZXh0KCk7IC8vcmV0dXJucyBcImVuZFwiIHdpdGggODAlIHByb2JhYmlsaXR5IG9yIFwibWlkZGxlXCIgd2l0aCAyMCUuXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgQW4gb2JqZWN0IHdpdGggdGhlIHN0YXRlIG5hbWVzIGFzIHRoZSBrZXlzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBuZXh0IHN0YXRlKHMpIGFzIHRoZSB2YWx1ZXMuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsTWFya292ID0gZnVuY3Rpb24gKHZhbHVlcywgaW5pdGlhbCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgTWFya292IHZhbHVlcyB3aXRoIHN0YXRlcyBhcyB0aGUga2V5c1xuXHRcdFx0ICogIGFuZCBuZXh0IHN0YXRlKHMpIGFzIHRoZSB2YWx1ZXMuIFxuXHRcdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IFRvbmUuZGVmYXVsdEFyZyh2YWx1ZXMsIHt9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgTWFya292IHZhbHVlcy4gVGhlIG5leHRcblx0XHRcdCAqICBzdGF0ZSB3aWxsIGJlIGV2YWx1YXRlZCBhbmQgcmV0dXJuZWQgd2hlbiBUb25lLkN0cmxNYXJrb3YubmV4dFxuXHRcdFx0ICogIGlzIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBUb25lLmRlZmF1bHRBcmcoaW5pdGlhbCwgT2JqZWN0LmtleXModGhpcy52YWx1ZXMpWzBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkN0cmxNYXJrb3YpO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIG5leHQgc3RhdGUgb2YgdGhlIE1hcmtvdiB2YWx1ZXMuIFxuXHRcdCAqICBAcmV0dXJuICB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsTWFya292LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLnZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh0aGlzLnZhbHVlKSkge1xuXHQgICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMudmFsdWVzW3RoaXMudmFsdWVdO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KG5leHQpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZGlzdHJpYnV0aW9uID0gdGhpcy5fZ2V0UHJvYkRpc3RyaWJ1dGlvbihuZXh0KTtcblx0ICAgICAgICAgICAgICAgIHZhciByYW5kID0gTWF0aC5yYW5kb20oKTtcblx0ICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3RyaWJ1dGlvbi5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBkaXN0ID0gZGlzdHJpYnV0aW9uW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChyYW5kID4gdG90YWwgJiYgcmFuZCA8IHRvdGFsICsgZGlzdCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hvc2VuID0gbmV4dFtpXTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QoY2hvc2VuKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNob3Nlbi52YWx1ZTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjaG9zZW47XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gZGlzdDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXh0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDaG9vc2UgcmFuZG9tbHkgZnJvbSBhbiBhcnJheSB3ZWlnaHRlZCBvcHRpb25zIGluIHRoZSBmb3JtIFxuXHRcdCAqICB7XCJzdGF0ZVwiIDogc3RyaW5nLCBcInByb2JhYmlsaXR5XCIgOiBudW1iZXJ9IG9yIGFuIGFycmF5IG9mIHZhbHVlc1xuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIG9wdGlvbnMgXG5cdFx0ICogIEByZXR1cm4gIHtBcnJheX0gIFRoZSByYW5kb21seSBzZWxlY3RlZCBjaG9pY2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdi5wcm90b3R5cGUuX2dldFByb2JEaXN0cmlidXRpb24gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIHZhciBkaXN0cmlidXRpb24gPSBbXTtcblx0ICAgICAgICB2YXIgdG90YWwgPSAwO1xuXHQgICAgICAgIHZhciBuZWVkc05vcm1hbGl6aW5nID0gZmFsc2U7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBvcHRpb24gPSBvcHRpb25zW2ldO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChvcHRpb24pKSB7XG5cdCAgICAgICAgICAgICAgICBuZWVkc05vcm1hbGl6aW5nID0gdHJ1ZTtcblx0ICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbltpXSA9IG9wdGlvbi5wcm9iYWJpbGl0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbltpXSA9IDEgLyBvcHRpb25zLmxlbmd0aDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0b3RhbCArPSBkaXN0cmlidXRpb25baV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChuZWVkc05vcm1hbGl6aW5nKSB7XG5cdCAgICAgICAgICAgIC8vbm9ybWFsaXplIHRoZSB2YWx1ZXNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkaXN0cmlidXRpb24ubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbltqXSA9IGRpc3RyaWJ1dGlvbltqXSAvIHRvdGFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBkaXN0cmlidXRpb247XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkN0cmxNYXJrb3Z9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxNYXJrb3Y7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBHZW5lcmF0ZSBwYXR0ZXJucyBmcm9tIGFuIGFycmF5IG9mIHZhbHVlcy5cblx0XHQgKiAgICAgICAgIEhhcyBhIG51bWJlciBvZiBhcnBlZ2dpYXRpb24gYW5kIHJhbmRvbWl6ZWRcblx0XHQgKiAgICAgICAgIHNlbGVjdGlvbiBwYXR0ZXJucy4gXG5cdFx0ICogICAgICAgICAgIDx1bD5cblx0XHQgKiAgXHQgICAgICAgIDxsaT5cInVwXCIgLSBjeWNsZXMgdXB3YXJkPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwiZG93blwiIC0gY3ljbGVzIGRvd253YXJkPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwidXBEb3duXCIgLSB1cCB0aGVuIGFuZCBkb3duPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwiZG93blVwXCIgLSBjeWNsZXMgZG93biB0aGVuIGFuZCB1cDwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImFsdGVybmF0ZVVwXCIgLSBqdW1wIHVwIHR3byBhbmQgZG93biBvbmU8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJhbHRlcm5hdGVEb3duXCIgLSBqdW1wIGRvd24gdHdvIGFuZCB1cCBvbmU8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJyYW5kb21cIiAtIHJhbmRvbWx5IHNlbGVjdCBhbiBpbmRleDwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInJhbmRvbVdhbGtcIiAtIHJhbmRvbWx5IG1vdmVzIG9uZSBpbmRleCBhd2F5IGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb248L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJyYW5kb21PbmNlXCIgLSByYW5kb21seSBzZWxlY3QgYW4gaW5kZXggd2l0aG91dCByZXBlYXRpbmcgdW50aWwgYWxsIHZhbHVlcyBoYXZlIGJlZW4gY2hvc2VuLjwvbGk+XG5cdFx0ICogICAgIFx0XHQ8L3VsPlxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIHZhbHVlcyAgIEFuIGFycmF5IG9mIG9wdGlvbnMgdG8gY2hvb3NlIGZyb20uXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuQ3RybFBhdHRlcm4uVHlwZT19ICB0eXBlICBUaGUgbmFtZSBvZiB0aGUgcGF0dGVybi5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3ZhbHVlcycsXG5cdCAgICAgICAgICAgICd0eXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuQ3RybFBhdHRlcm4pO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXJyYXkgb2YgdmFsdWVzIHRvIGFycGVnZ2lhdGUgb3ZlclxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gb3B0aW9ucy52YWx1ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHZhbHVlcyBhcnJheVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbmRleCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHR5cGUgcGxhY2Vob2xkZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5DdHJsUGF0dGVybi5UeXBlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTaHVmZmxlZCB2YWx1ZXMgZm9yIHRoZSBSYW5kb21PbmNlIHR5cGVcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NodWZmbGVkID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGlyZWN0aW9uIG9mIHRoZSBtb3ZlbWVudFxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3RybFBhdHRlcm4pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBDb250cm9sIFBhdHRlcm5zXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLlR5cGUgPSB7XG5cdCAgICAgICAgVXA6ICd1cCcsXG5cdCAgICAgICAgRG93bjogJ2Rvd24nLFxuXHQgICAgICAgIFVwRG93bjogJ3VwRG93bicsXG5cdCAgICAgICAgRG93blVwOiAnZG93blVwJyxcblx0ICAgICAgICBBbHRlcm5hdGVVcDogJ2FsdGVybmF0ZVVwJyxcblx0ICAgICAgICBBbHRlcm5hdGVEb3duOiAnYWx0ZXJuYXRlRG93bicsXG5cdCAgICAgICAgUmFuZG9tOiAncmFuZG9tJyxcblx0ICAgICAgICBSYW5kb21XYWxrOiAncmFuZG9tV2FsaycsXG5cdCAgICAgICAgUmFuZG9tT25jZTogJ3JhbmRvbU9uY2UnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy4gXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCxcblx0ICAgICAgICAndmFsdWVzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHZhbHVlIGF0IHRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBwYXR0ZXJuLlxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybFBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHsqfVxuXHRcdCAqICBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vc29tZSBzYWZlZ3VhcmRzXG5cdCAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlcy5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlcy5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1swXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5taW4odGhpcy5pbmRleCwgdGhpcy52YWx1ZXMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlc1t0aGlzLmluZGV4XTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbU9uY2UpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlcy5sZW5ndGggIT09IHRoaXMuX3NodWZmbGVkLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NodWZmbGVWYWx1ZXMoKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMudmFsdWVzW3RoaXMuX3NodWZmbGVkW3RoaXMuaW5kZXhdXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwYXR0ZXJuIHVzZWQgdG8gc2VsZWN0IHRoZSBuZXh0XG5cdFx0ICogIGl0ZW0gZnJvbSB0aGUgdmFsdWVzIGFycmF5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkN0cmxQYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7VG9uZS5DdHJsUGF0dGVybi5UeXBlfVxuXHRcdCAqICBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX3NodWZmbGVkID0gbnVsbDtcblx0ICAgICAgICAgICAgLy90aGUgZmlyc3QgaW5kZXhcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXBEb3duIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVVcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd24gfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd25VcCB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlRG93bikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy90aGUgZGlyZWN0aW9uXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXBEb3duIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVVcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duVXAgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZURvd24pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vcmFuZG9tc1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbU9uY2UpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NodWZmbGVWYWx1ZXMoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlJhbmRvbSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMudmFsdWVzLmxlbmd0aCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIG5leHQgdmFsdWUgZ2l2ZW4gdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHQgKiAgYW5kIHBhdHRlcm4uXG5cdFx0ICogIEByZXR1cm4geyp9IFRoZSBuZXh0IHZhbHVlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciB0eXBlID0gdGhpcy50eXBlO1xuXHQgICAgICAgIC8vY2hvb3NlIHRoZSBuZXh0IGluZGV4XG5cdCAgICAgICAgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCkge1xuXHQgICAgICAgICAgICB0aGlzLmluZGV4Kys7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID49IHRoaXMudmFsdWVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXgtLTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwRG93biB8fCB0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93blVwKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kaXJlY3Rpb24gPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleC0tO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IDE7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnZhbHVlcy5sZW5ndGggLSAyO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb20pIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMudmFsdWVzLmxlbmd0aCk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tV2Fsaykge1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5yYW5kb20oKSA8IDAuNSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleC0tO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IE1hdGgubWF4KHRoaXMuaW5kZXgsIDApO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IE1hdGgubWluKHRoaXMuaW5kZXgsIHRoaXMudmFsdWVzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSkge1xuXHQgICAgICAgICAgICB0aGlzLmluZGV4Kys7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID49IHRoaXMudmFsdWVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IDA7XG5cdCAgICAgICAgICAgICAgICAvL3Jlc2h1ZmZsZSB0aGUgdmFsdWVzIGZvciBuZXh0IHRpbWVcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NodWZmbGVWYWx1ZXMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZVVwKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kaXJlY3Rpb24gPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAyO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4IC09IDE7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZURvd24pIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDE7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggLT0gMjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnZhbHVlcy5sZW5ndGggLSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNodWZmbGVzIHRoZSB2YWx1ZXMgYW5kIHBsYWNlcyB0aGUgcmVzdWx0cyBpbnRvIHRoZSBfc2h1ZmZsZWRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLl9zaHVmZmxlVmFsdWVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBjb3B5ID0gW107XG5cdCAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGNvcHlbaV0gPSBpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB3aGlsZSAoY29weS5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgICAgIHZhciByYW5kVmFsID0gY29weS5zcGxpY2UoTWF0aC5mbG9vcihjb3B5Lmxlbmd0aCAqIE1hdGgucmFuZG9tKCkpLCAxKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZWQucHVzaChyYW5kVmFsWzBdKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkN0cmxQYXR0ZXJufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3NodWZmbGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ3RybFBhdHRlcm47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQ2hvb3NlIGEgcmFuZG9tIHZhbHVlLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcmFuZG9tV2FsayA9IG5ldyBUb25lLkN0cmxSYW5kb20oe1xuXHRcdCAqIFx0XCJtaW5cIiA6IDAsXG5cdFx0ICogXHRcIm1heFwiIDogMTAsXG5cdFx0ICogXHRcImludGVnZXJcIiA6IHRydWVcblx0XHQgKiB9KTtcblx0XHQgKiByYW5kb21XYWxrLmV2YWwoKTtcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxUaW1lPX0gbWluIFRoZSBtaW5pbXVtIHJldHVybiB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8VGltZT19IG1heCBUaGUgbWF4aW11bSByZXR1cm4gdmFsdWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxSYW5kb20gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnbWluJyxcblx0ICAgICAgICAgICAgJ21heCdcblx0ICAgICAgICBdLCBUb25lLkN0cmxSYW5kb20pO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWluaW11bSByZXR1cm4gdmFsdWVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcnxUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taW4gPSBvcHRpb25zLm1pbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWF4aW11bSByZXR1cm4gdmFsdWVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcnxUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tYXggPSBvcHRpb25zLm1heDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiB0aGUgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSBhbiBpbnRlZ2VyXG5cdFx0XHQgKiAgQHR5cGUgIHtCb29sZWFufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnRlZ2VyID0gb3B0aW9ucy5pbnRlZ2VyO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3RybFJhbmRvbSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFJhbmRvbS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAnaW50ZWdlcic6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiBhIHJhbmRvbSB2YWx1ZSBiZXR3ZWVuIG1pbiBhbmQgbWF4LiBcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkN0cmxSYW5kb20jXG5cdFx0ICogIEB0eXBlIHsqfVxuXHRcdCAqICBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ3RybFJhbmRvbS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMudG9TZWNvbmRzKHRoaXMubWluKTtcblx0ICAgICAgICAgICAgdmFyIG1heCA9IHRoaXMudG9TZWNvbmRzKHRoaXMubWF4KTtcblx0ICAgICAgICAgICAgdmFyIHJhbmQgPSBNYXRoLnJhbmRvbSgpO1xuXHQgICAgICAgICAgICB2YXIgdmFsID0gcmFuZCAqIG1pbiArICgxIC0gcmFuZCkgKiBtYXg7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmludGVnZXIpIHtcblx0ICAgICAgICAgICAgICAgIHZhbCA9IE1hdGguZmxvb3IodmFsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmUuQ3RybFJhbmRvbTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIGRhdGEgc3RydWN0dXJlIGZvciBob2xkaW5nIG11bHRpcGxlIGJ1ZmZlcnMuXG5cdFx0ICogIFxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R8QXJyYXl9ICAgIHVybHMgICAgICBBbiBvYmplY3QgbGl0ZXJhbCBvciBhcnJheVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB1cmxzIHRvIGxvYWQuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQuIFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xvYWQgYSB3aG9sZSBiYW5rIG9mIHBpYW5vIHNhbXBsZXNcblx0XHQgKiB2YXIgcGlhbm9TYW1wbGVzID0gbmV3IFRvbmUuQnVmZmVycyh7XG5cdFx0ICogXHRcIkM0XCIgOiBcInBhdGgvdG8vQzQubXAzXCJcblx0XHQgKiBcdFwiQyM0XCIgOiBcInBhdGgvdG8vQyM0Lm1wM1wiXG5cdFx0ICogXHRcIkQ0XCIgOiBcInBhdGgvdG8vRDQubXAzXCJcblx0XHQgKiBcdFwiRCM0XCIgOiBcInBhdGgvdG8vRCM0Lm1wM1wiXG5cdFx0ICogXHQuLi5cblx0XHQgKiB9LCBmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly9wbGF5IG9uZSBvZiB0aGUgc2FtcGxlcyB3aGVuIHRoZXkgYWxsIGxvYWRcblx0XHQgKiBcdHBsYXllci5idWZmZXIgPSBwaWFub1NhbXBsZXMuZ2V0KFwiQzRcIik7XG5cdFx0ICogXHRwbGF5ZXIuc3RhcnQoKTtcblx0XHQgKiB9KTtcblx0XHQgKiBcdEBleGFtcGxlXG5cdFx0ICogLy9UbyBwYXNzIGluIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlclxuXHRcdCAqIHZhciBidWZmZXJzID0gbmV3IFRvbmUuQnVmZmVycyh1cmxzLCB7XG5cdFx0ICogXHRcIm9ubG9hZFwiIDogY2FsbGJhY2ssXG5cdFx0ICogXHRcImJhc2VVcmxcIiA6IFwiLi4vcGF0aC90by9hdWRpby9cIlxuXHRcdCAqIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMgPSBmdW5jdGlvbiAodXJscykge1xuXHQgICAgICAgIC8vcmVtb3ZlIHRoZSB1cmxzIGZyb20gdGhlIG9wdGlvbnNcblx0ICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgYXJncy5zaGlmdCgpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmdzLCBbXG5cdCAgICAgICAgICAgICdvbmxvYWQnLFxuXHQgICAgICAgICAgICAnYmFzZVVybCdcblx0ICAgICAgICBdLCBUb25lLkJ1ZmZlcnMpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIGJ1ZmZlcnNcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVycyA9IHt9O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgcGF0aCB3aGljaCBpcyBwcmVmaXhlZCBiZWZvcmUgZXZlcnkgdXJsLlxuXHRcdFx0ICogIEB0eXBlICB7U3RyaW5nfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5iYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCA9IDA7XG5cdCAgICAgICAgLy9hZGQgZWFjaCBvbmVcblx0ICAgICAgICBmb3IgKHZhciBrZXkgaW4gdXJscykge1xuXHQgICAgICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQrKztcblx0ICAgICAgICAgICAgdGhpcy5hZGQoa2V5LCB1cmxzW2tleV0sIHRoaXMuX2J1ZmZlckxvYWRlZC5iaW5kKHRoaXMsIG9wdGlvbnMub25sb2FkKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQnVmZmVycyk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnYmFzZVVybCc6ICcnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRydWUgaWYgdGhlIGJ1ZmZlcnMgb2JqZWN0IGhhcyBhIGJ1ZmZlciBieSB0aGF0IG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICBuYW1lICBUaGUga2V5IG9yIGluZGV4IG9mIHRoZSBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5cblx0XHQgKiAgQHJldHVybiAge0Jvb2xlYW59XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcnMuaGFzT3duUHJvcGVydHkobmFtZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCBhIGJ1ZmZlciBieSBuYW1lLiBJZiBhbiBhcnJheSB3YXMgbG9hZGVkLCBcblx0XHQgKiAgdGhlbiB1c2UgdGhlIGFycmF5IGluZGV4LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgbmFtZSAgVGhlIGtleSBvciBpbmRleCBvZiB0aGUgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5oYXMobmFtZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcnNbbmFtZV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkJ1ZmZlcnM6IG5vIGJ1ZmZlciBuYW1lZCAnICsgbmFtZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIGJ1ZmZlciB3YXMgbG9hZGVkLiBkZWNyZW1lbnQgdGhlIGNvdW50ZXIuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLl9idWZmZXJMb2FkZWQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQtLTtcblx0ICAgICAgICBpZiAodGhpcy5fbG9hZGluZ0NvdW50ID09PSAwICYmIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVycyBhcmUgbG9hZGVkIG9yIG5vdFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlcnMjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJzLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGlzTG9hZGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgYnVmZk5hbWUgaW4gdGhpcy5fYnVmZmVycykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ1ZmYgPSB0aGlzLmdldChidWZmTmFtZSk7XG5cdCAgICAgICAgICAgICAgICBpc0xvYWRlZCA9IGlzTG9hZGVkICYmIGJ1ZmYubG9hZGVkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBpc0xvYWRlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBidWZmZXIgYnkgbmFtZSBhbmQgdXJsIHRvIHRoZSBCdWZmZXJzXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgbmFtZSAgICAgIEEgdW5pcXVlIG5hbWUgdG8gZ2l2ZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVmZmVyXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xUb25lLkJ1ZmZlcnxBdWRpb2J1ZmZlcn0gIHVybCAgRWl0aGVyIHRoZSB1cmwgb2YgdGhlIGJ1ZmVyLCBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGFkZGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2UgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobmFtZSwgdXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGNhbGxiYWNrID0gVG9uZS5kZWZhdWx0QXJnKGNhbGxiYWNrLCBUb25lLm5vT3ApO1xuXHQgICAgICAgIGlmICh1cmwgaW5zdGFuY2VvZiBUb25lLkJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzW25hbWVdID0gdXJsO1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHVybCBpbnN0YW5jZW9mIEF1ZGlvQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0gPSBuZXcgVG9uZS5CdWZmZXIodXJsKTtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHVybCkpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXSA9IG5ldyBUb25lLkJ1ZmZlcih0aGlzLmJhc2VVcmwgKyB1cmwsIGNhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fYnVmZmVycykge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzW25hbWVdLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQnVmZmVycztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgYnVzZXMgYXJlIGFub3RoZXIgd2F5IG9mIHJvdXRpbmcgYXVkaW9cblx0XHQgKlxuXHRcdCAqICBhdWdtZW50cyBUb25lLnByb3RvdHlwZSB0byBpbmNsdWRlIHNlbmQgYW5kIHJlY2lldmVcblx0XHQgKi9cblx0ICAgIC8qKlxuXHRcdCAqICBBbGwgb2YgdGhlIHJvdXRlc1xuXHRcdCAqXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBCdXNlcyA9IHt9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNlbmQgdGhpcyBzaWduYWwgdG8gdGhlIGNoYW5uZWwgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSBjaGFubmVsTmFtZSBBIG5hbWVkIGNoYW5uZWwgdG8gc2VuZCB0aGUgc2lnbmFsIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtEZWNpYmVsc30gYW1vdW50IFRoZSBhbW91bnQgb2YgdGhlIHNvdXJjZSB0byBzZW5kIHRvIHRoZSBidXMuXG5cdFx0ICogIEByZXR1cm4ge0dhaW5Ob2RlfSBUaGUgZ2FpbiBub2RlIHdoaWNoIGNvbm5lY3RzIHRoaXMgbm9kZSB0byB0aGUgZGVzaXJlZCBjaGFubmVsLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgdG8gYWRqdXN0IHRoZSBsZXZlbHMgb2YgdGhlIHNlbmQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnNlbmQoXCJyZXZlcmJcIiwgLTEyKTtcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbiAoY2hhbm5lbE5hbWUsIGFtb3VudCkge1xuXHQgICAgICAgIGlmICghQnVzZXMuaGFzT3duUHJvcGVydHkoY2hhbm5lbE5hbWUpKSB7XG5cdCAgICAgICAgICAgIEJ1c2VzW2NoYW5uZWxOYW1lXSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGFtb3VudCA9IFRvbmUuZGVmYXVsdEFyZyhhbW91bnQsIDApO1xuXHQgICAgICAgIHZhciBzZW5kS25vYiA9IG5ldyBUb25lLkdhaW4oYW1vdW50LCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIHRoaXMuY29ubmVjdChzZW5kS25vYik7XG5cdCAgICAgICAgc2VuZEtub2IuY29ubmVjdChCdXNlc1tjaGFubmVsTmFtZV0pO1xuXHQgICAgICAgIHJldHVybiBzZW5kS25vYjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVjaWV2ZSB0aGUgaW5wdXQgZnJvbSB0aGUgZGVzaXJlZCBjaGFubmVsTmFtZSB0byB0aGUgaW5wdXRcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9IGNoYW5uZWxOYW1lIEEgbmFtZWQgY2hhbm5lbCB0byBzZW5kIHRoZSBzaWduYWwgdG8uXG5cdFx0ICogIEBwYXJhbSAge051bWJlcj19IGNoYW5uZWxOdW1iZXIgVGhlIGNoYW5uZWwgdG8gY29ubmVjdCB0b1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHJldmVyYkVmZmVjdC5yZWNlaXZlKFwicmV2ZXJiXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUucmVjZWl2ZSA9IGZ1bmN0aW9uIChjaGFubmVsTmFtZSwgaW5wdXROdW0pIHtcblx0ICAgICAgICBpZiAoIUJ1c2VzLmhhc093blByb3BlcnR5KGNoYW5uZWxOYW1lKSkge1xuXHQgICAgICAgICAgICBCdXNlc1tjaGFubmVsTmFtZV0gPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBCdXNlc1tjaGFubmVsTmFtZV0uY29ubmVjdCh0aGlzLCAwLCBpbnB1dE51bSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy9yZW1vdmUgYWxsIHRoZSBzZW5kL3JlY2VpdmVzIHdoZW4gYSBuZXcgYXVkaW8gY29udGV4dCBpcyBwYXNzZWQgaW5cblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuQnVzZXMpIHtcblx0ICAgICAgICAgICAgQnVzZXMgPSBjb250ZXh0LkJ1c2VzO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIEJ1c2VzID0ge307XG5cdCAgICAgICAgICAgIGNvbnRleHQuQnVzZXMgPSBCdXNlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5EcmF3IGlzIHVzZWZ1bCBmb3Igc3luY2hyb25pemluZyB2aXN1YWxzIGFuZCBhdWRpbyBldmVudHMuXG5cdFx0ICogICAgICAgICBDYWxsYmFja3MgZnJvbSBUb25lLlRyYW5zcG9ydCBvciBhbnkgb2YgdGhlIFRvbmUuRXZlbnQgY2xhc3Nlc1xuXHRcdCAqICAgICAgICAgYWx3YXlzIGhhcHBlbiBfYmVmb3JlXyB0aGUgc2NoZWR1bGVkIHRpbWUgYW5kIGFyZSBub3Qgc3luY2hyb25pemVkXG5cdFx0ICogICAgICAgICB0byB0aGUgYW5pbWF0aW9uIGZyYW1lIHNvIHRoZXkgYXJlIG5vdCBnb29kIGZvciB0cmlnZ2VyaW5nIHRpZ2h0bHlcblx0XHQgKiAgICAgICAgIHN5bmNocm9uaXplZCB2aXN1YWxzIGFuZCBzb3VuZC4gVG9uZS5EcmF3IG1ha2VzIGl0IGVhc3kgdG8gc2NoZWR1bGVcblx0XHQgKiAgICAgICAgIGNhbGxiYWNrcyB1c2luZyB0aGUgQXVkaW9Db250ZXh0IHRpbWUgYW5kIHVzZXMgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxuXHRcdCAqICAgICAgICAgXG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL3VzZSB0aGUgdGltZSBhcmd1bWVudCB0byBzY2hlZHVsZSBhIGNhbGxiYWNrIHdpdGggVG9uZS5EcmF3XG5cdFx0ICogXHRUb25lLkRyYXcuc2NoZWR1bGUoZnVuY3Rpb24oKXtcblx0XHQgKiBcdFx0Ly9kbyBkcmF3aW5nIG9yIERPTSBtYW5pcHVsYXRpb24gaGVyZVxuXHRcdCAqIFx0fSwgdGltZSlcblx0XHQgKiB9LCBcIiswLjVcIilcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxsIG9mIHRoZSBldmVudHMuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkdXJhdGlvbiBhZnRlciB3aGljaCBldmVudHMgYXJlIG5vdCBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBkZWZhdWx0IDAuMjVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZXhwaXJhdGlvbiA9IDAuMjU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiB0aW1lIGJlZm9yZSB0aGUgc2NoZWR1bGVkIHRpbWUgXG5cdFx0XHQgKiAgdGhhdCB0aGUgY2FsbGJhY2sgY2FuIGJlIGludm9rZWQuIERlZmF1bHQgaXNcblx0XHRcdCAqICBoYWxmIHRoZSB0aW1lIG9mIGFuIGFuaW1hdGlvbiBmcmFtZSAoMC4wMDggc2Vjb25kcykuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQGRlZmF1bHQgMC4wMDhcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYW50aWNpcGF0aW9uID0gMC4wMDg7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRyYXcgbG9vcFxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JvdW5kRHJhd0xvb3AgPSB0aGlzLl9kcmF3TG9vcC5iaW5kKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRHJhdyk7XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYSBmdW5jdGlvbiBhdCB0aGUgZ2l2ZW4gdGltZSB0byBiZSBpbnZva2VkXG5cdFx0ICogIG9uIHRoZSBuZWFyZXN0IGFuaW1hdGlvbiBmcmFtZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgQ2FsbGJhY2sgaXMgaW52b2tlZCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgdGltZSAgICAgIFRoZSB0aW1lIHJlbGF0aXZlIHRvIHRoZSBBdWRpb0NvbnRleHQgdGltZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gaW52b2tlIHRoZSBjYWxsYmFjay5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRHJhd30gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EcmF3LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdGltZSkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG5cdCAgICAgICAgICAgIHRpbWU6IHRoaXMudG9TZWNvbmRzKHRpbWUpXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgZHJhdyBsb29wIG9uIHRoZSBmaXJzdCBldmVudFxuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9ib3VuZERyYXdMb29wKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBldmVudHMgc2NoZWR1bGVkIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgYWZ0ZXIgIFRpbWUgYWZ0ZXIgd2hpY2ggc2NoZWR1bGVkIGV2ZW50cyB3aWxsIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBiZSByZW1vdmVkIGZyb20gdGhlIHNjaGVkdWxpbmcgdGltZWxpbmUuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkRyYXd9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwodGhpcy50b1NlY29uZHMoYWZ0ZXIpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRyYXcgbG9vcFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EcmF3LnByb3RvdHlwZS5fZHJhd0xvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vdyA9IFRvbmUubm93KCk7XG5cdCAgICAgICAgd2hpbGUgKHRoaXMuX2V2ZW50cy5sZW5ndGggJiYgdGhpcy5fZXZlbnRzLnBlZWsoKS50aW1lIC0gdGhpcy5hbnRpY2lwYXRpb24gPD0gbm93KSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50cy5zaGlmdCgpO1xuXHQgICAgICAgICAgICBpZiAobm93IC0gZXZlbnQudGltZSA8PSB0aGlzLmV4cGlyYXRpb24pIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LmNhbGxiYWNrKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9ib3VuZERyYXdMb29wKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLy9tYWtlIGEgc2luZ2xldG9uXG5cdCAgICBUb25lLkRyYXcgPSBuZXcgVG9uZS5EcmF3KCk7XG5cdCAgICByZXR1cm4gVG9uZS5EcmF3O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJvdGggVG9uZS5QYW5uZXIzRCBhbmQgVG9uZS5MaXN0ZW5lciBoYXZlIGEgcG9zaXRpb24gaW4gM0Qgc3BhY2Vcblx0XHQgKiAgICAgICAgICB1c2luZyBhIHJpZ2h0LWhhbmRlZCBjYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW0uXG5cdFx0ICogICAgICAgICAgVGhlIHVuaXRzIHVzZWQgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGFyZSBub3QgZGVmaW5lZDtcblx0XHQgKiAgICAgICAgICB0aGVzZSBjb29yZGluYXRlcyBhcmUgaW5kZXBlbmRlbnQvaW52YXJpYW50IG9mIGFueSBwYXJ0aWN1bGFyXG5cdFx0ICogICAgICAgICAgdW5pdHMgc3VjaCBhcyBtZXRlcnMgb3IgZmVldC4gVG9uZS5QYW5uZXIzRCBvYmplY3RzIGhhdmUgYW4gZm9yd2FyZFxuXHRcdCAqICAgICAgICAgIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGRpcmVjdGlvbiB0aGUgc291bmQgaXMgcHJvamVjdGluZy4gQWRkaXRpb25hbGx5LFxuXHRcdCAqICAgICAgICAgIHRoZXkgaGF2ZSBhIHNvdW5kIGNvbmUgcmVwcmVzZW50aW5nIGhvdyBkaXJlY3Rpb25hbCB0aGUgc291bmQgaXMuXG5cdFx0ICogICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzb3VuZCBjb3VsZCBiZSBvbW5pZGlyZWN0aW9uYWwsIGluIHdoaWNoIGNhc2UgaXQgd291bGRcblx0XHQgKiAgICAgICAgICBiZSBoZWFyZCBhbnl3aGVyZSByZWdhcmRsZXNzIG9mIGl0cyBmb3J3YXJkLCBvciBpdCBjYW4gYmUgbW9yZSBkaXJlY3Rpb25hbFxuXHRcdCAqICAgICAgICAgIGFuZCBoZWFyZCBvbmx5IGlmIGl0IGlzIGZhY2luZyB0aGUgbGlzdGVuZXIuIFRvbmUuTGlzdGVuZXIgb2JqZWN0c1xuXHRcdCAqICAgICAgICAgIChyZXByZXNlbnRpbmcgYSBwZXJzb24ncyBlYXJzKSBoYXZlIGFuIGZvcndhcmQgYW5kIHVwIHZlY3RvclxuXHRcdCAqICAgICAgICAgIHJlcHJlc2VudGluZyBpbiB3aGljaCBkaXJlY3Rpb24gdGhlIHBlcnNvbiBpcyBmYWNpbmcuIEJlY2F1c2UgYm90aCB0aGVcblx0XHQgKiAgICAgICAgICBzb3VyY2Ugc3RyZWFtIGFuZCB0aGUgbGlzdGVuZXIgY2FuIGJlIG1vdmluZywgdGhleSBib3RoIGhhdmUgYSB2ZWxvY2l0eVxuXHRcdCAqICAgICAgICAgIHZlY3RvciByZXByZXNlbnRpbmcgYm90aCB0aGUgc3BlZWQgYW5kIGRpcmVjdGlvbiBvZiBtb3ZlbWVudC4gVGFrZW4gdG9nZXRoZXIsXG5cdFx0ICogICAgICAgICAgdGhlc2UgdHdvIHZlbG9jaXRpZXMgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBkb3BwbGVyIHNoaWZ0IGVmZmVjdCB3aGljaCBjaGFuZ2VzIHRoZSBwaXRjaC5cblx0XHQgKiAgICAgICAgICA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgIE5vdGU6IHRoZSBwb3NpdGlvbiBvZiB0aGUgTGlzdGVuZXIgd2lsbCBoYXZlIG5vIGVmZmVjdCBvbiBub2RlcyBub3QgY29ubmVjdGVkIHRvIGEgVG9uZS5QYW5uZXIzRFxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHNpbmdsZXRvblxuXHRcdCAqL1xuXHQgICAgVG9uZS5MaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgZm9yd2FyZCBvcmllbnRhdGlvblxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gW1xuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwXG5cdCAgICAgICAgXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkcyB0aGUgY3VycmVudCBwb3NpdGlvblxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gW1xuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwXG5cdCAgICAgICAgXTtcblx0ICAgICAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBzZXQgdGhlIGRlZmF1bHQgcG9zaXRpb24vZm9yd2FyZFxuXHQgICAgICAgICAgICB0aGlzLnNldChMaXN0ZW5lckNvbnN0cnVjdG9yLmRlZmF1bHRzKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTGlzdGVuZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MaXN0ZW5lci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncG9zaXRpb25YJzogMCxcblx0ICAgICAgICAncG9zaXRpb25ZJzogMCxcblx0ICAgICAgICAncG9zaXRpb25aJzogMCxcblx0ICAgICAgICAnZm9yd2FyZFgnOiAwLFxuXHQgICAgICAgICdmb3J3YXJkWSc6IDAsXG5cdCAgICAgICAgJ2ZvcndhcmRaJzogMSxcblx0ICAgICAgICAndXBYJzogMCxcblx0ICAgICAgICAndXBZJzogMSxcblx0ICAgICAgICAndXBaJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByYW1wIHRpbWUgd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgc2V0VGFyZ2V0QXRUaW1lXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUuX3JhbXBUaW1lQ29uc3RhbnQgPSAwLjAxO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsaXN0ZW5lciBpbiAzZCBzcGFjZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB5XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHpcblx0XHQgKiAgQHJldHVybiB7VG9uZS5MaXN0ZW5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUuc2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeikge1xuXHQgICAgICAgIGlmICh0aGlzLmNvbnRleHQubGlzdGVuZXIucG9zaXRpb25YKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIucG9zaXRpb25YLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIucG9zaXRpb25ZLnNldFRhcmdldEF0VGltZSh5LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIucG9zaXRpb25aLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5zZXRQb3NpdGlvbih4LCB5LCB6KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgbGlzdGVuZXIgdXNpbmcgdHdvIHZlY3RvcnMsIHRoZSBmb3J3YXJkXG5cdFx0ICogIHZlY3RvciAod2hpY2ggZGlyZWN0aW9uIHRoZSBsaXN0ZW5lciBpcyBmYWNpbmcpIGFuZCB0aGUgdXAgdmVjdG9yXG5cdFx0ICogICh3aGljaCB0aGUgdXAgZGlyZWN0aW9uIG9mIHRoZSBsaXN0ZW5lcikuIEFuIHVwIHZlY3RvclxuXHRcdCAqICBvZiAwLCAwLCAxIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGxpc3RlbmVyIHN0YW5kaW5nIHVwIGluIHRoZSBaIGRpcmVjdGlvbi5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB5XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHpcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdXBYXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHVwWVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB1cFpcblx0XHQgKiAgQHJldHVybiB7VG9uZS5MaXN0ZW5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUuc2V0T3JpZW50YXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeiwgdXBYLCB1cFksIHVwWikge1xuXHQgICAgICAgIGlmICh0aGlzLmNvbnRleHQubGlzdGVuZXIuZm9yd2FyZFgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWC5zZXRUYXJnZXRBdFRpbWUoeCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRZLnNldFRhcmdldEF0VGltZSh5LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuZm9yd2FyZFouc2V0VGFyZ2V0QXRUaW1lKHosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci51cFguc2V0VGFyZ2V0QXRUaW1lKHVwWCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnVwWS5zZXRUYXJnZXRBdFRpbWUodXBZLCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIudXBaLnNldFRhcmdldEF0VGltZSh1cFosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnNldE9yaWVudGF0aW9uKHgsIHksIHosIHVwWCwgdXBZLCB1cFopO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25YXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdwb3NpdGlvblgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvbllcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3Bvc2l0aW9uWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAncG9zaXRpb25aJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblsyXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzJdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVycyBmcm9udCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgd2hpY2ggd2F5IHRoZXkgYXJlIGZhY2luZy5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIGZvcndhcmRYXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdmb3J3YXJkWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMF0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblswXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcnMgZnJvbnQgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHdoaWNoIHdheSB0aGV5IGFyZSBmYWNpbmcuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBmb3J3YXJkWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAnZm9yd2FyZFknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXJzIGZyb250IGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB3aGljaCB3YXkgdGhleSBhcmUgZmFjaW5nLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgZm9yd2FyZFpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ2ZvcndhcmRaJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblsyXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzJdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVyJ3MgdXAgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHRoZSBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIHN0YW5kaW5nIGluLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgdXBYXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICd1cFgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzNdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bM107XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXIncyB1cCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgdGhlIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgc3RhbmRpbmcgaW4uXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSB1cFlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3VwWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bNF0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvbls0XTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcidzIHVwIGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB0aGUgZGlyZWN0aW9uIHRoZSBsaXN0ZW5lciBpcyBzdGFuZGluZyBpbi5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHVwWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAndXBaJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvbls1XSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzVdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MaXN0ZW5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vU0lOR0xFVE9OIFNFVFVQXG5cdCAgICB2YXIgTGlzdGVuZXJDb25zdHJ1Y3RvciA9IFRvbmUuTGlzdGVuZXI7XG5cdCAgICBUb25lLkxpc3RlbmVyID0gbmV3IExpc3RlbmVyQ29uc3RydWN0b3IoKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuTGlzdGVuZXIgaW5zdGFuY2VvZiBMaXN0ZW5lckNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIC8vYSBzaW5nbGUgbGlzdGVuZXIgb2JqZWN0XG5cdCAgICAgICAgICAgIFRvbmUuTGlzdGVuZXIgPSBjb250ZXh0Lkxpc3RlbmVyO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vbWFrZSBuZXcgTGlzdGVuZXIgaW5zaWRlc1xuXHQgICAgICAgICAgICBUb25lLkxpc3RlbmVyID0gbmV3IExpc3RlbmVyQ29uc3RydWN0b3IoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgY29udGV4dC5MaXN0ZW5lciA9IFRvbmUuTGlzdGVuZXI7XG5cdCAgICB9KTtcblx0ICAgIC8vRU5EIFNJTkdMRVRPTiBTRVRVUFxuXHQgICAgcmV0dXJuIFRvbmUuTGlzdGVuZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEJlY2F1c2Ugb2YgYSBidWcgaW4gaU9TIGNhdXNpbmcgdGhlIGN1cnJlbnRUaW1lIHRvIGluY3JlbWVudFxuXHRcdCAqIGJlZm9yZSB0aGUgcmVuZGVyaW5nIGlzIHN0YXJ0ZWQsIHNvbWV0aW1lcyBpdCB0YWtlcyBtdWx0aXBsZVxuXHRcdCAqIGF0dGVtcHRzIHRvIHJlbmRlciB0aGUgYXVkaW8gY29ycmVjdGx5LlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBmdW5jdGlvbiBhdHRlbXB0UmVuZGVyKGNhbGxiYWNrLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSwgdHJpZXMpIHtcblx0ICAgICAgICB0cmllcyA9IFRvbmUuZGVmYXVsdEFyZyh0cmllcywgMCk7XG5cdCAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgVG9uZS5PZmZsaW5lQ29udGV4dCgyLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgVG9uZS5jb250ZXh0ID0gY29udGV4dDtcblx0ICAgICAgICAvL2ludm9rZSB0aGUgY2FsbGJhY2svc2NoZWR1bGluZ1xuXHQgICAgICAgIHZhciByZXNwb25zZSA9IGNhbGxiYWNrKFRvbmUuVHJhbnNwb3J0KTtcblx0ICAgICAgICBpZiAoY29udGV4dC5jdXJyZW50VGltZSA+IDAgJiYgdHJpZXMgPCAxMDAwKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBhdHRlbXB0UmVuZGVyKGNhbGxiYWNrLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSwgKyt0cmllcyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgICAgICdyZXNwb25zZSc6IHJlc3BvbnNlLFxuXHQgICAgICAgICAgICAgICAgJ2NvbnRleHQnOiBjb250ZXh0XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHQgICAgLyoqXG5cdFx0ICogIEdlbmVyYXRlIGEgYnVmZmVyIGJ5IHJlbmRlcmluZyBhbGwgb2YgdGhlIFRvbmUuanMgY29kZSB3aXRoaW4gdGhlIGNhbGxiYWNrIHVzaW5nIHRoZSBPZmZsaW5lQXVkaW9Db250ZXh0LlxuXHRcdCAqICBUaGUgT2ZmbGluZUF1ZGlvQ29udGV4dCBpcyBjYXBhYmxlIG9mIHJlbmRlcmluZyBtdWNoIGZhc3RlciB0aGFuIHJlYWwgdGltZSBpbiBtYW55IGNhc2VzLlxuXHRcdCAqICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gYWxzbyBwYXNzZXMgaW4gYW4gb2ZmbGluZSBpbnN0YW5jZSBvZiBUb25lLlRyYW5zcG9ydCB3aGljaCBjYW4gYmUgdXNlZFxuXHRcdCAqICB0byBzY2hlZHVsZSBldmVudHMgYWxvbmcgdGhlIFRyYW5zcG9ydC4gKipOT1RFKiogT2ZmbGluZUF1ZGlvQ29udGV4dCBoYXMgdGhlIHNhbWUgcmVzdHJpY3Rpb25zXG5cdFx0ICogIGFzIHRoZSBBdWRpb0NvbnRleHQgaW4gdGhhdCBvbiBjZXJ0YWluIHBsYXRmb3JtcyAobGlrZSBpT1MpIGl0IG11c3QgYmUgaW52b2tlZCBieSBhbiBleHBsaWNpdFxuXHRcdCAqICB1c2VyIGFjdGlvbiBsaWtlIGEgY2xpY2sgb3IgdGFwLiBcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgQWxsIFRvbmUuanMgbm9kZXMgd2hpY2ggYXJlIGNyZWF0ZWQgYW5kIHNjaGVkdWxlZCB3aXRoaW4gdGhpcyBjYWxsYmFjayBhcmUgcmVjb3JkZWQgaW50byB0aGUgb3V0cHV0IEJ1ZmZlci5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIGR1cmF0aW9uICAgICB0aGUgYW1vdW50IG9mIHRpbWUgdG8gcmVjb3JkIGZvci5cblx0XHQgKiAgQHJldHVybiAge1Byb21pc2V9ICBUaGUgcHJvbWlzZSB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIFRvbmUuQnVmZmVyIG9mIHRoZSByZWNvcmRlZCBvdXRwdXQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9yZW5kZXIgMiBzZWNvbmRzIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogVG9uZS5PZmZsaW5lKGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL29ubHkgbm9kZXMgY3JlYXRlZCBpbiB0aGlzIGNhbGxiYWNrIHdpbGwgYmUgcmVjb3JkZWRcblx0XHQgKiBcdHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLnRvTWFzdGVyKCkuc3RhcnQoMClcblx0XHQgKiBcdC8vc2NoZWR1bGUgdGhlaXIgZXZlbnRzXG5cdFx0ICogfSwgMikudGhlbihmdW5jdGlvbihidWZmZXIpe1xuXHRcdCAqIFx0Ly9kbyBzb21ldGhpbmcgd2l0aCB0aGUgb3V0cHV0IGJ1ZmZlclxuXHRcdCAqIH0pXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2NhbiBhbHNvIHNjaGVkdWxlIGV2ZW50cyBhbG9uZyB0aGUgVHJhbnNwb3J0XG5cdFx0ICogLy91c2luZyB0aGUgcGFzc2VkIGluIE9mZmxpbmUgVHJhbnNwb3J0XG5cdFx0ICogVG9uZS5PZmZsaW5lKGZ1bmN0aW9uKFRyYW5zcG9ydCl7XG5cdFx0ICogXHR2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLnRvTWFzdGVyKClcblx0XHQgKiBcdFRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdFx0b3NjLnN0YXJ0KHRpbWUpLnN0b3AodGltZSArIDAuMSlcblx0XHQgKiBcdH0sIDEpXG5cdFx0ICogXHRUcmFuc3BvcnQuc3RhcnQoMC4yKVxuXHRcdCAqIH0sIDQpLnRoZW4oZnVuY3Rpb24oYnVmZmVyKXtcblx0XHQgKiBcdC8vZG8gc29tZXRoaW5nIHdpdGggdGhlIG91dHB1dCBidWZmZXJcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBkdXJhdGlvbikge1xuXHQgICAgICAgIC8vc2V0IHRoZSBPZmZsaW5lQXVkaW9Db250ZXh0XG5cdCAgICAgICAgdmFyIHNhbXBsZVJhdGUgPSBUb25lLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICB2YXIgb3JpZ2luYWxDb250ZXh0ID0gVG9uZS5jb250ZXh0O1xuXHQgICAgICAgIHZhciByZW5kZXJSZXQgPSBhdHRlbXB0UmVuZGVyKGNhbGxiYWNrLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVuZGVyUmV0LnJlc3BvbnNlO1xuXHQgICAgICAgIHZhciBjb250ZXh0ID0gcmVuZGVyUmV0LmNvbnRleHQ7XG5cdCAgICAgICAgdmFyIHJldDtcblx0ICAgICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdCAgICAgICAgICAgIC8vd2FpdCBmb3IgdGhlIHByb21pc2UgdG8gcmVzb2x2ZVxuXHQgICAgICAgICAgICByZXQgPSByZXNwb25zZS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIC8vdGhlbiByZW5kZXIgdGhlIGF1ZGlvXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5yZW5kZXIoKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9wcm9jZXNzIHRoZSBhdWRpb1xuXHQgICAgICAgICAgICByZXQgPSBjb250ZXh0LnJlbmRlcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JldHVybiB0aGUgb3JpZ2luYWwgQXVkaW9Db250ZXh0XG5cdCAgICAgICAgVG9uZS5jb250ZXh0ID0gb3JpZ2luYWxDb250ZXh0O1xuXHQgICAgICAgIC8vcmV0dXJuIHRoZSBhdWRpb1xuXHQgICAgICAgIHJldHVybiByZXQudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIC8vd3JhcCBpdCBpbiBhIFRvbmUuQnVmZmVyXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5CdWZmZXIoYnVmZmVyKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5PZmZsaW5lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqIFx0QGNsYXNzICBUb25lLkVmZmVjdCBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgZWZmZWN0cy4gQ29ubmVjdCB0aGUgZWZmZWN0IGJldHdlZW5cblx0XHQgKiBcdCAgICAgICAgdGhlIGVmZmVjdFNlbmQgYW5kIGVmZmVjdFJldHVybiBHYWluTm9kZXMsIHRoZW4gY29udHJvbCB0aGUgYW1vdW50IG9mXG5cdFx0ICogXHQgICAgICAgIGVmZmVjdCB3aGljaCBnb2VzIHRvIHRoZSBvdXRwdXQgdXNpbmcgdGhlIHdldCBjb250cm9sLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbd2V0XSBUaGUgc3RhcnRpbmcgd2V0IHZhbHVlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5FZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd3ZXQnXSwgVG9uZS5FZmZlY3QpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkcnl3ZXQga25vYiB0byBjb250cm9sIHRoZSBhbW91bnQgb2YgZWZmZWN0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3Jvc3NGYWRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBuZXcgVG9uZS5Dcm9zc0ZhZGUob3B0aW9ucy53ZXQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3ZXQgY29udHJvbCBpcyBob3cgbXVjaCBvZiB0aGUgZWZmZWN0ZWRcblx0XHRcdCAqICB3aWxsIHBhc3MgdGhyb3VnaCB0byB0aGUgb3V0cHV0LiAxID0gMTAwJSBlZmZlY3RlZFxuXHRcdFx0ICogIHNpZ25hbCwgMCA9IDEwMCUgZHJ5IHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy53ZXQgPSB0aGlzLl9kcnlXZXQuZmFkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb25uZWN0IHRoZSBlZmZlY3RTZW5kIHRvIHRoZSBpbnB1dCBvZiBodGUgZWZmZWN0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGUgZWZmZWN0IHRvIHRoZSBlZmZlY3RSZXR1cm5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX2RyeVdldC5hKTtcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5lZmZlY3RTZW5kKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybi5jb25uZWN0KHRoaXMuX2RyeVdldC5iKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWyd3ZXQnXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FZmZlY3QsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkVmZmVjdC5kZWZhdWx0cyA9IHsgJ3dldCc6IDEgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjaGFpbnMgdGhlIGVmZmVjdCBpbiBiZXR3ZWVuIHRoZSBlZmZlY3RTZW5kIGFuZCBlZmZlY3RSZXR1cm5cblx0XHQgKiAgQHBhcmFtICB7VG9uZX0gZWZmZWN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmNvbm5lY3RFZmZlY3QgPSBmdW5jdGlvbiAoZWZmZWN0KSB7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNoYWluKGVmZmVjdCwgdGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3dldCddKTtcblx0ICAgICAgICB0aGlzLndldCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BdXRvRmlsdGVyIGlzIGEgVG9uZS5GaWx0ZXIgd2l0aCBhIFRvbmUuTEZPIGNvbm5lY3RlZCB0byB0aGUgZmlsdGVyIGN1dG9mZiBmcmVxdWVuY3kuXG5cdFx0ICogICAgICAgICBTZXR0aW5nIHRoZSBMRk8gcmF0ZSBhbmQgZGVwdGggYWxsb3dzIGZvciBjb250cm9sIG92ZXIgdGhlIGZpbHRlciBtb2R1bGF0aW9uIHJhdGUgXG5cdFx0ICogICAgICAgICBhbmQgZGVwdGguXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIHJhdGUgb2YgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3k9fSBiYXNlRnJlcXVlbmN5IFRoZSBsb3dlciB2YWx1ZSBvZiB0aGUgTEZPcyBvc2NpbGxhdGlvblxuXHQgXHQgKiAgQHBhcmFtIHtGcmVxdWVuY3k9fSBvY3RhdmVzIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY3JlYXRlIGFuIGF1dG9maWx0ZXIgYW5kIHN0YXJ0IGl0J3MgTEZPXG5cdFx0ICogdmFyIGF1dG9GaWx0ZXIgPSBuZXcgVG9uZS5BdXRvRmlsdGVyKFwiNG5cIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqIC8vcm91dGUgYW4gb3NjaWxsYXRvciB0aHJvdWdoIHRoZSBmaWx0ZXIgYW5kIHN0YXJ0IGl0XG5cdFx0ICogdmFyIG9zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkuY29ubmVjdChhdXRvRmlsdGVyKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdiYXNlRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnXG5cdCAgICAgICAgXSwgVG9uZS5BdXRvRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8gd2hpY2ggZHJpdmVzIHRoZSBmaWx0ZXIgY3V0b2ZmXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm8gPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdhbXBsaXR1ZGUnOiBvcHRpb25zLmRlcHRoXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcmFuZ2Ugb2YgdGhlIGZpbHRlciBtb2R1bGF0aW5nIGJldHdlZW4gdGhlIG1pbiBhbmQgbWF4IGZyZXF1ZW5jeS4gXG5cdFx0XHQgKiAwID0gbm8gbW9kdWxhdGlvbi4gMSA9IGZ1bGwgbW9kdWxhdGlvbi5cblx0XHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9sZm8uYW1wbGl0dWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogSG93IGZhc3QgdGhlIGZpbHRlciBtb2R1bGF0ZXMgYmV0d2VlbiBtaW4gYW5kIG1heC4gXG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaWx0ZXIgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmlsdGVyID0gbmV3IFRvbmUuRmlsdGVyKG9wdGlvbnMuZmlsdGVyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb2N0YXZlcyBwbGFjZWhvbGRlclxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IDA7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLmZpbHRlcik7XG5cdCAgICAgICAgdGhpcy5fbGZvLmNvbm5lY3QodGhpcy5maWx0ZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICB0aGlzLmJhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICB9O1xuXHQgICAgLy9leHRlbmQgRWZmZWN0XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1dG9GaWx0ZXIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0c1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDEsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ2RlcHRoJzogMSxcblx0ICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDIwMCxcblx0ICAgICAgICAnb2N0YXZlcyc6IDIuNixcblx0ICAgICAgICAnZmlsdGVyJzoge1xuXHQgICAgICAgICAgICAndHlwZSc6ICdsb3dwYXNzJyxcblx0ICAgICAgICAgICAgJ3JvbGxvZmYnOiAtMTIsXG5cdCAgICAgICAgICAgICdRJzogMVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdGFydCB0aGUgZWZmZWN0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBMRk8gd2lsbCBzdGFydC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RvcC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBmaWx0ZXIgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFtkZWxheT0wXSBEZWxheSB0aW1lIGJlZm9yZSBzdGFydGluZyB0aGUgZWZmZWN0IGFmdGVyIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zcG9ydCBoYXMgc3RhcnRlZC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKGRlbGF5KSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN5bmMoZGVsYXkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgZmlsdGVyIGZyb20gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9sZm8udW5zeW5jKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVHlwZSBvZiBvc2NpbGxhdG9yIGF0dGFjaGVkIHRvIHRoZSBBdXRvRmlsdGVyLiBcblx0XHQgKiBQb3NzaWJsZSB2YWx1ZXM6IFwic2luZVwiLCBcInNxdWFyZVwiLCBcInRyaWFuZ2xlXCIsIFwic2F3dG9vdGhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBmaWx0ZXIncyBjdXRvZmYgZnJlcXVlbmN5LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9GaWx0ZXIjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLCAnYmFzZUZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmby5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby5taW4gPSB0aGlzLnRvRnJlcXVlbmN5KGZyZXEpO1xuXHQgICAgICAgICAgICAvL2FuZCBzZXQgdGhlIG1heFxuXHQgICAgICAgICAgICB0aGlzLm9jdGF2ZXMgPSB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGZpbHRlcidzIGN1dG9mZiBmcmVxdWVuY3kuIFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9GaWx0ZXIjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3QpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdDtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLm1heCA9IHRoaXMuYmFzZUZyZXF1ZW5jeSAqIE1hdGgucG93KDIsIG9jdCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9sZm8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5maWx0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkF1dG9GaWx0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkF1dG9QYW5uZXIgaXMgYSBUb25lLlBhbm5lciB3aXRoIGFuIExGTyBjb25uZWN0ZWQgdG8gdGhlIHBhbiBhbW91bnQuIFxuXHRcdCAqICAgICAgICAgTW9yZSBvbiB1c2luZyBhdXRvcGFubmVycyBbaGVyZV0oaHR0cHM6Ly93d3cuYWJsZXRvbi5jb20vZW4vYmxvZy9hdXRvcGFuLWNob3BwZXItZWZmZWN0LWFuZC1tb3JlLWxpdmVzY2hvb2wvKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFJhdGUgb2YgbGVmdC1yaWdodCBvc2NpbGxhdGlvbi4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jcmVhdGUgYW4gYXV0b3Bhbm5lciBhbmQgc3RhcnQgaXQncyBMRk9cblx0XHQgKiB2YXIgYXV0b1Bhbm5lciA9IG5ldyBUb25lLkF1dG9QYW5uZXIoXCI0blwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICogLy9yb3V0ZSBhbiBvc2NpbGxhdG9yIHRocm91Z2ggdGhlIHBhbm5lciBhbmQgc3RhcnQgaXRcblx0XHQgKiB2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KGF1dG9QYW5uZXIpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmcmVxdWVuY3knXSwgVG9uZS5BdXRvUGFubmVyKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8gd2hpY2ggZHJpdmVzIHRoZSBwYW5uaW5nXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm8gPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdhbXBsaXR1ZGUnOiBvcHRpb25zLmRlcHRoLFxuXHQgICAgICAgICAgICAnbWluJzogLTEsXG5cdCAgICAgICAgICAgICdtYXgnOiAxXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgYW1vdW50IG9mIHBhbm5pbmcgYmV0d2VlbiBsZWZ0IGFuZCByaWdodC4gXG5cdFx0XHQgKiAwID0gYWx3YXlzIGNlbnRlci4gMSA9IGZ1bGwgcmFuZ2UgYmV0d2VlbiBsZWZ0IGFuZCByaWdodC4gXG5cdFx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fbGZvLmFtcGxpdHVkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcGFubmVyIG5vZGUgd2hpY2ggZG9lcyB0aGUgcGFubmluZ1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBhbm5lcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbmV3IFRvbmUuUGFubmVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBIb3cgZmFzdCB0aGUgcGFubmVyIG1vZHVsYXRlcyBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0LiBcblx0XHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmby5mcmVxdWVuY3k7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9wYW5uZXIpO1xuXHQgICAgICAgIHRoaXMuX2xmby5jb25uZWN0KHRoaXMuX3Bhbm5lci5wYW4pO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdkZXB0aCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgLy9leHRlbmQgRWZmZWN0XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1dG9QYW5uZXIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0c1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDEsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ2RlcHRoJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0YXJ0IHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0YXJ0LiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCB0aGUgZWZmZWN0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBMRk8gd2lsbCBzdG9wLiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIHBhbm5lciB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW2RlbGF5PTBdIERlbGF5IHRpbWUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBlZmZlY3QgYWZ0ZXIgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IGhhcyBzdGFydGVkLiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoZGVsYXkpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3luYyhkZWxheSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVW5zeW5jIHRoZSBwYW5uZXIgZnJvbSB0aGUgdHJhbnNwb3J0XG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnVuc3luYygpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFR5cGUgb2Ygb3NjaWxsYXRvciBhdHRhY2hlZCB0byB0aGUgQXV0b0ZpbHRlci4gXG5cdFx0ICogUG9zc2libGUgdmFsdWVzOiBcInNpbmVcIiwgXCJzcXVhcmVcIiwgXCJ0cmlhbmdsZVwiLCBcInNhd3Rvb3RoXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmby50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8udHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGZvLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdkZXB0aCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkF1dG9QYW5uZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5BdXRvV2FoIGNvbm5lY3RzIGEgVG9uZS5Gb2xsb3dlciB0byBhIGJhbmRwYXNzIGZpbHRlciAoVG9uZS5GaWx0ZXIpLlxuXHRcdCAqICAgICAgICAgIFRoZSBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlciBpcyBhZGp1c3RlZCBwcm9wb3J0aW9uYWxseSB0byB0aGVcblx0XHQgKiAgICAgICAgICBpbmNvbWluZyBzaWduYWwncyBhbXBsaXR1ZGUuIEluc3BpcmF0aW9uIGZyb20gW1R1bmEuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9EaW5haG1vZS90dW5hKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtiYXNlRnJlcXVlbmN5XSBUaGUgZnJlcXVlbmN5IHRoZSBmaWx0ZXIgaXMgc2V0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGF0IHRoZSBsb3cgcG9pbnQgb2YgdGhlIHdhaFxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfSBbb2N0YXZlc10gVGhlIG51bWJlciBvZiBvY3RhdmVzIGFib3ZlIHRoZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaWx0ZXIgd2lsbCBzd2VlcCB0byB3aGVuIGZ1bGx5IG9wZW5cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc30gW3NlbnNpdGl2aXR5XSBUaGUgZGVjaWJlbCB0aHJlc2hvbGQgc2Vuc2l0aXZpdHkgZm9yXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbmNvbWluZyBzaWduYWwuIE5vcm1hbCByYW5nZSBvZiAtNDAgdG8gMC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgYXV0b1dhaCA9IG5ldyBUb25lLkF1dG9XYWgoNTAsIDYsIC0zMCkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL2luaXRpYWxpemUgdGhlIHN5bnRoIGFuZCBjb25uZWN0IHRvIGF1dG93YWhcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgU3ludGguY29ubmVjdChhdXRvV2FoKTtcblx0XHQgKiAvL1EgdmFsdWUgaW5mbHVlbmNlcyB0aGUgZWZmZWN0IG9mIHRoZSB3YWggLSBkZWZhdWx0IGlzIDJcblx0XHQgKiBhdXRvV2FoLlEudmFsdWUgPSA2O1xuXHRcdCAqIC8vbW9yZSBhdWRpYmxlIG9uIGhpZ2hlciBub3Rlc1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvV2FoID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnb2N0YXZlcycsXG5cdCAgICAgICAgICAgICdzZW5zaXRpdml0eSdcblx0ICAgICAgICBdLCBUb25lLkF1dG9XYWgpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGVudmVsb3BlIGZvbGxvd2VyLiBTZXQgdGhlIGF0dGFjay9yZWxlYXNlXG5cdFx0XHQgKiAgdGltaW5nIHRvIGFkanVzdCBob3cgdGhlIGVudmVsb3BlIGlzIGZvbGxvd2VkLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZvbGxvd2VyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZvbGxvd2VyID0gbmV3IFRvbmUuRm9sbG93ZXIob3B0aW9ucy5mb2xsb3dlcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGVzIHRoZSBmb2xsb3dlciB2YWx1ZSB0byB0aGUgZnJlcXVlbmN5IGRvbWFpblxuXHRcdFx0ICogIEB0eXBlIHtUb25lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlID0gbmV3IFRvbmUuU2NhbGVFeHAoMCwgMSwgMC41KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGlucHV0IGdhaW4gdG8gYWRqdXN0IHRoZSBzZW5zaXRpdml0eVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge0JpcXVhZEZpbHRlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JhbmRwYXNzID0gbmV3IFRvbmUuRmlsdGVyKHtcblx0ICAgICAgICAgICAgJ3JvbGxvZmYnOiAtNDgsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiAwLFxuXHQgICAgICAgICAgICAnUSc6IG9wdGlvbnMuUVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGVha2luZyA9IG5ldyBUb25lLkZpbHRlcigwLCAncGVha2luZycpO1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcuZ2Fpbi52YWx1ZSA9IG9wdGlvbnMuZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIG9mIHRoZSBmaWx0ZXIuXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5nYWluID0gdGhpcy5fcGVha2luZy5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHF1YWxpdHkgb2YgdGhlIGZpbHRlci5cblx0XHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IHRoaXMuX2JhbmRwYXNzLlE7XG5cdCAgICAgICAgLy90aGUgY29udHJvbCBzaWduYWwgcGF0aFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbih0aGlzLl9pbnB1dEJvb3N0LCB0aGlzLmZvbGxvd2VyLCB0aGlzLl9zd2VlcFJhbmdlKTtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLmNvbm5lY3QodGhpcy5fYmFuZHBhc3MuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLmNvbm5lY3QodGhpcy5fcGVha2luZy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vdGhlIGZpbHRlcmVkIHBhdGhcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4odGhpcy5fYmFuZHBhc3MsIHRoaXMuX3BlYWtpbmcsIHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgICAgICAvL3NldCB0aGUgaW5pdGlhbCB2YWx1ZVxuXHQgICAgICAgIHRoaXMuX3NldFN3ZWVwUmFuZ2UoKTtcblx0ICAgICAgICB0aGlzLnNlbnNpdGl2aXR5ID0gb3B0aW9ucy5zZW5zaXRpdml0eTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdXRvV2FoLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvV2FoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMTAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogNixcblx0ICAgICAgICAnc2Vuc2l0aXZpdHknOiAwLFxuXHQgICAgICAgICdRJzogMixcblx0ICAgICAgICAnZ2Fpbic6IDIsXG5cdCAgICAgICAgJ2ZvbGxvd2VyJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4zLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhhdCB0aGUgZmlsdGVyIHdpbGwgc3dlZXAgYWJvdmUgdGhlXG5cdFx0ICogYmFzZUZyZXF1ZW5jeS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvV2FoI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b1dhaC5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdGF2ZXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdGF2ZXM7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFN3ZWVwUmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBiYXNlIGZyZXF1ZW5jeSBmcm9tIHdoaWNoIHRoZSBzd2VlcCB3aWxsIHN0YXJ0IGZyb20uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b1dhaCNcblx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqIEBuYW1lIGJhc2VGcmVxdWVuY3lcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9XYWgucHJvdG90eXBlLCAnYmFzZUZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChiYXNlRnJlcSkge1xuXHQgICAgICAgICAgICB0aGlzLl9iYXNlRnJlcXVlbmN5ID0gYmFzZUZyZXE7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFN3ZWVwUmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBzZW5zaXRpdml0eSB0byBjb250cm9sIGhvdyByZXNwb25zaXZlIHRvIHRoZSBpbnB1dCBzaWduYWwgdGhlIGZpbHRlciBpcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvV2FoI1xuXHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHQgKiBAbmFtZSBzZW5zaXRpdml0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b1dhaC5wcm90b3R5cGUsICdzZW5zaXRpdml0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuZ2FpblRvRGIoMSAvIHRoaXMuX2lucHV0Qm9vc3QuZ2Fpbi52YWx1ZSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzZW5zaXRpdnkpIHtcblx0ICAgICAgICAgICAgdGhpcy5faW5wdXRCb29zdC5nYWluLnZhbHVlID0gMSAvIFRvbmUuZGJUb0dhaW4oc2Vuc2l0aXZ5KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXRzIHRoZSBzd2VlcCByYW5nZSBvZiB0aGUgc2NhbGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWgucHJvdG90eXBlLl9zZXRTd2VlcFJhbmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UubWluID0gdGhpcy5fYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLm1heCA9IE1hdGgubWluKHRoaXMuX2Jhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCB0aGlzLl9vY3RhdmVzKSwgdGhpcy5jb250ZXh0LnNhbXBsZVJhdGUgLyAyKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1dG9XYWh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuZm9sbG93ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZm9sbG93ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2JhbmRwYXNzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9iYW5kcGFzcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGVha2luZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcGVha2luZyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faW5wdXRCb29zdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faW5wdXRCb29zdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdXRvV2FoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU2lnbmFsLXJhdGUgbW9kdWxvIG9wZXJhdG9yLiBPbmx5IHdvcmtzIGluIEF1ZGlvUmFuZ2UgWy0xLCAxXSBhbmQgZm9yIG1vZHVsdXNcblx0XHQgKiAgICAgICAgIHZhbHVlcyBpbiB0aGUgTm9ybWFsUmFuZ2UuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IG1vZHVsdXMgVGhlIG1vZHVsdXMgdG8gYXBwbHkuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG1vZCA9IG5ldyBUb25lLk1vZHVsbygwLjIpXG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgwLjUpLmNvbm5lY3QobW9kKTtcblx0XHQgKiAvL21vZCBvdXRwdXRzIDAuMVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb2R1bG8gPSBmdW5jdGlvbiAobW9kdWx1cykge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHdhdmVzaGFwZXIgZ2V0cyB0aGUgaW50ZWdlciBtdWx0aXBsZSBvZlxuXHRcdFx0ICogIHRoZSBpbnB1dCBzaWduYWwgYW5kIHRoZSBtb2R1bHVzLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoTWF0aC5wb3coMiwgMTYpKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW50ZWdlciBtdWx0aXBsZSBpcyBtdWx0aXBsaWVkIGJ5IHRoZSBtb2R1bHVzXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IG5ldyBUb25lLk11bHRpcGx5KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgYW5kIHN1YnRyYWN0ZWQgZnJvbSB0aGUgaW5wdXQgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbW9kdWx1cyBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwgPSBuZXcgVG9uZS5TaWduYWwobW9kdWx1cyk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZmFuKHRoaXMuX3NoYXBlciwgdGhpcy5fc3VidHJhY3QpO1xuXHQgICAgICAgIHRoaXMuX21vZFNpZ25hbC5jb25uZWN0KHRoaXMuX211bHRpcGx5LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuY29ubmVjdCh0aGlzLl9tdWx0aXBseSwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkuY29ubmVjdCh0aGlzLl9zdWJ0cmFjdCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fc2V0V2F2ZVNoYXBlcihtb2R1bHVzKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1vZHVsbywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9ICBtb2QgIHRoZSBtb2R1bHVzIHRvIGFwcGx5XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vZHVsby5wcm90b3R5cGUuX3NldFdhdmVTaGFwZXIgPSBmdW5jdGlvbiAobW9kKSB7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLnNldE1hcChmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHZhciBtdWx0aXBsZSA9IE1hdGguZmxvb3IoKHZhbCArIDAuMDAwMSkgLyBtb2QpO1xuXHQgICAgICAgICAgICByZXR1cm4gbXVsdGlwbGU7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1vZHVsdXMgdmFsdWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTW9kdWxvI1xuXHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTW9kdWxvLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9kU2lnbmFsLnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobW9kKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZFNpZ25hbC52YWx1ZSA9IG1vZDtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0V2F2ZVNoYXBlcihtb2QpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9kdWxvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1vZHVsby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZFNpZ25hbC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Nb2R1bG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkJpdGNydXNoZXIgZG93bnNhbXBsZXMgdGhlIGluY29taW5nIHNpZ25hbCB0byBhIGRpZmZlcmVudCBiaXRkZXB0aC5cblx0XHQgKiAgICAgICAgIExvd2VyaW5nIHRoZSBiaXRkZXB0aCBvZiB0aGUgc2lnbmFsIGNyZWF0ZXMgZGlzdG9ydGlvbi4gUmVhZCBtb3JlIGFib3V0IEJpdGNydXNoaW5nXG5cdFx0ICogICAgICAgICBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CaXRjcnVzaGVyKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gYml0cyBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gZG93bnNhbXBsZSB0aGUgc2lnbmFsLiBOb21pbmFsIHJhbmdlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIG9mIDEgdG8gOC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2luaXRpYWxpemUgY3J1c2hlciBhbmQgcm91dGUgYSBzeW50aCB0aHJvdWdoIGl0XG5cdFx0ICogdmFyIGNydXNoZXIgPSBuZXcgVG9uZS5CaXRDcnVzaGVyKDQpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuTW9ub1N5bnRoKCkuY29ubmVjdChjcnVzaGVyKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQml0Q3J1c2hlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2JpdHMnXSwgVG9uZS5CaXRDcnVzaGVyKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIHZhciBpbnZTdGVwU2l6ZSA9IDEgLyBNYXRoLnBvdygyLCBvcHRpb25zLmJpdHMgLSAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTdWJ0cmFjdCB0aGUgaW5wdXQgc2lnbmFsIGFuZCB0aGUgbW9kdWx1cyBvZiB0aGUgaW5wdXQgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kIGZ1bmN0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1vZHVsb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxvID0gbmV3IFRvbmUuTW9kdWxvKGludlN0ZXBTaXplKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBrZWVwcyB0cmFjayBvZiB0aGUgYml0c1xuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JpdHMgPSBvcHRpb25zLmJpdHM7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmZhbih0aGlzLl9zdWJ0cmFjdCwgdGhpcy5fbW9kdWxvKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bG8uY29ubmVjdCh0aGlzLl9zdWJ0cmFjdCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QuY29ubmVjdCh0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CaXRDcnVzaGVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQml0Q3J1c2hlci5kZWZhdWx0cyA9IHsgJ2JpdHMnOiA0IH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYml0IGRlcHRoIG9mIHRoZSBlZmZlY3QuIE5vbWluYWwgcmFuZ2Ugb2YgMS04LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJpdENydXNoZXIjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBiaXRzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CaXRDcnVzaGVyLnByb3RvdHlwZSwgJ2JpdHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9iaXRzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYml0cykge1xuXHQgICAgICAgICAgICB0aGlzLl9iaXRzID0gYml0cztcblx0ICAgICAgICAgICAgdmFyIGludlN0ZXBTaXplID0gMSAvIE1hdGgucG93KDIsIGJpdHMgLSAxKTtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxvLnZhbHVlID0gaW52U3RlcFNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkJpdENydXNoZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQml0Q3J1c2hlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxvLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bG8gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkJpdENydXNoZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkNoZWJ5U2hldiBpcyBhIENoZWJ5c2hldiB3YXZlc2hhcGVyLCBhbiBlZmZlY3Qgd2hpY2ggaXMgZ29vZCBcblx0XHQgKiAgICAgICAgIGZvciBtYWtpbmcgZGlmZmVyZW50IHR5cGVzIG9mIGRpc3RvcnRpb24gc291bmRzLlxuXHRcdCAqICAgICAgICAgTm90ZSB0aGF0IG9kZCBvcmRlcnMgc291bmQgdmVyeSBkaWZmZXJlbnQgZnJvbSBldmVuIG9uZXMsIFxuXHRcdCAqICAgICAgICAgYW5kIG9yZGVyID0gMSBpcyBubyBjaGFuZ2UuIFxuXHRcdCAqICAgICAgICAgUmVhZCBtb3JlIGF0IFttdXNpYy5jb2x1bWJpYS5lZHVdKGh0dHA6Ly9tdXNpYy5jb2x1bWJpYS5lZHUvY21jL211c2ljYW5kY29tcHV0ZXJzL2NoYXB0ZXI0LzA0XzA2LnBocCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZXxPYmplY3R9IFtvcmRlcl0gVGhlIG9yZGVyIG9mIHRoZSBjaGVieXNoZXYgcG9seW5vbWlhbC4gTm9ybWFsIHJhbmdlIGJldHdlZW4gMS0xMDAuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY3JlYXRlIGEgbmV3IGNoZWJ5XG5cdFx0ICogdmFyIGNoZWJ5ID0gbmV3IFRvbmUuQ2hlYnlzaGV2KDUwKTtcblx0XHQgKiAvL2NyZWF0ZSBhIG1vbm9zeW50aCBjb25uZWN0ZWQgdG8gb3VyIGNoZWJ5XG5cdFx0ICogc3ludGggPSBuZXcgVG9uZS5Nb25vU3ludGgoKS5jb25uZWN0KGNoZWJ5KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hlYnlzaGV2ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnb3JkZXInXSwgVG9uZS5DaGVieXNoZXYpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKDQwOTYpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogaG9sZHMgb250byB0aGUgb3JkZXIgb2YgdGhlIGZpbHRlclxuXHRcdFx0ICogQHR5cGUge251bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vcmRlciA9IG9wdGlvbnMub3JkZXI7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX3NoYXBlcik7XG5cdCAgICAgICAgdGhpcy5vcmRlciA9IG9wdGlvbnMub3JkZXI7XG5cdCAgICAgICAgdGhpcy5vdmVyc2FtcGxlID0gb3B0aW9ucy5vdmVyc2FtcGxlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ2hlYnlzaGV2LCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hlYnlzaGV2LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvcmRlcic6IDEsXG5cdCAgICAgICAgJ292ZXJzYW1wbGUnOiAnbm9uZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZ2V0IHRoZSBjb2VmZmljaWVudCBmb3IgdGhhdCBkZWdyZWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHggdGhlIHggdmFsdWVcblx0XHQgKiAgQHBhcmFtICAge251bWJlcn0gZGVncmVlIFxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gbWVtbyBtZW1vaXplIHRoZSBjb21wdXRlZCB2YWx1ZS4gXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHRoaXMgc3BlZWRzIHVwIGNvbXB1dGF0aW9uIGdyZWF0bHkuIFxuXHRcdCAqICBAcmV0dXJuICB7bnVtYmVyfSAgICAgICB0aGUgY29lZmZpY2llbnQgXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldi5wcm90b3R5cGUuX2dldENvZWZmaWNpZW50ID0gZnVuY3Rpb24gKHgsIGRlZ3JlZSwgbWVtbykge1xuXHQgICAgICAgIGlmIChtZW1vLmhhc093blByb3BlcnR5KGRlZ3JlZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG1lbW9bZGVncmVlXTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGRlZ3JlZSA9PT0gMCkge1xuXHQgICAgICAgICAgICBtZW1vW2RlZ3JlZV0gPSAwO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoZGVncmVlID09PSAxKSB7XG5cdCAgICAgICAgICAgIG1lbW9bZGVncmVlXSA9IHg7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgbWVtb1tkZWdyZWVdID0gMiAqIHggKiB0aGlzLl9nZXRDb2VmZmljaWVudCh4LCBkZWdyZWUgLSAxLCBtZW1vKSAtIHRoaXMuX2dldENvZWZmaWNpZW50KHgsIGRlZ3JlZSAtIDIsIG1lbW8pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbWVtb1tkZWdyZWVdO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvcmRlciBvZiB0aGUgQ2hlYnlzaGV2IHBvbHlub21pYWwgd2hpY2ggY3JlYXRlc1xuXHRcdCAqIHRoZSBlcXVhdGlvbiB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBpbmNvbWluZyBcblx0XHQgKiBzaWduYWwgdGhyb3VnaCBhIFRvbmUuV2F2ZVNoYXBlci4gVGhlIGVxdWF0aW9uc1xuXHRcdCAqIGFyZSBpbiB0aGUgZm9ybTo8YnI+XG5cdFx0ICogb3JkZXIgMjogMnheMiArIDE8YnI+XG5cdFx0ICogb3JkZXIgMzogNHheMyArIDN4IDxicj5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaGVieXNoZXYjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIG9yZGVyXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLCAnb3JkZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmRlcjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9yZGVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yZGVyID0gb3JkZXI7XG5cdCAgICAgICAgICAgIHZhciBjdXJ2ZSA9IG5ldyBBcnJheSg0MDk2KTtcblx0ICAgICAgICAgICAgdmFyIGxlbiA9IGN1cnZlLmxlbmd0aDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHggPSBpICogMiAvIGxlbiAtIDE7XG5cdCAgICAgICAgICAgICAgICBpZiAoeCA9PT0gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vc2hvdWxkIG91dHB1dCAwIHdoZW4gaW5wdXQgaXMgMFxuXHQgICAgICAgICAgICAgICAgICAgIGN1cnZlW2ldID0gMDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY3VydmVbaV0gPSB0aGlzLl9nZXRDb2VmZmljaWVudCh4LCBvcmRlciwge30pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5jdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG92ZXJzYW1wbGluZyBvZiB0aGUgZWZmZWN0LiBDYW4gZWl0aGVyIGJlIFwibm9uZVwiLCBcIjJ4XCIgb3IgXCI0eFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNoZWJ5c2hldiNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIG92ZXJzYW1wbGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNoZWJ5c2hldi5wcm90b3R5cGUsICdvdmVyc2FtcGxlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvdmVyc2FtcGxpbmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGUgPSBvdmVyc2FtcGxpbmc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DaGVieXNoZXZ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNoZWJ5c2hldjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEJhc2UgY2xhc3MgZm9yIFN0ZXJlbyBlZmZlY3RzLiBQcm92aWRlcyBlZmZlY3RTZW5kTC9SIGFuZCBlZmZlY3RSZXR1cm5ML1IuXG5cdFx0ICpcblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd3ZXQnXSwgVG9uZS5FZmZlY3QpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZHJ5d2V0IGtub2IgdG8gY29udHJvbCB0aGUgYW1vdW50IG9mIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNyb3NzRmFkZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0ID0gbmV3IFRvbmUuQ3Jvc3NGYWRlKG9wdGlvbnMud2V0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgd2V0IGNvbnRyb2wsIGkuZS4gaG93IG11Y2ggb2YgdGhlIGVmZmVjdGVkXG5cdFx0XHQgKiAgd2lsbCBwYXNzIHRocm91Z2ggdG8gdGhlIG91dHB1dC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy53ZXQgPSB0aGlzLl9kcnlXZXQuZmFkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGVuIHNwbGl0IGl0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NwbGl0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0cyBzZW5kIExFRlRcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwgPSB0aGlzLl9zcGxpdC5sZWZ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBlZmZlY3RzIHNlbmQgUklHSFRcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIgPSB0aGlzLl9zcGxpdC5yaWdodDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc3RlcmVvIGVmZmVjdCBtZXJnZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBuZXcgVG9uZS5NZXJnZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBlZmZlY3QgcmV0dXJuIExFRlRcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTCA9IHRoaXMuX21lcmdlLmxlZnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdCByZXR1cm4gUklHSFRcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuUiA9IHRoaXMuX21lcmdlLnJpZ2h0O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fc3BsaXQpO1xuXHQgICAgICAgIC8vZHJ5IHdldCBjb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9kcnlXZXQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX21lcmdlLmNvbm5lY3QodGhpcy5fZHJ5V2V0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWyd3ZXQnXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9FZmZlY3QsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3RlcmVvRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5MID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnd2V0J10pO1xuXHQgICAgICAgIHRoaXMud2V0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdGVyZW9FZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkNob3J1cyBpcyBhIHN0ZXJlbyBjaG9ydXMgZWZmZWN0IGNvbXBvc2VkIG9mXG5cdFx0ICogICAgICAgICBhIGxlZnQgYW5kIHJpZ2h0IGRlbGF5IHdpdGggYSBUb25lLkxGTyBhcHBsaWVkIHRvIHRoZSBkZWxheVRpbWUgb2YgZWFjaCBjaGFubmVsLlxuXHRcdCAqICAgICAgICAgSW5zcGlyYXRpb24gZnJvbSBbVHVuYS5qc10oaHR0cHM6Ly9naXRodWIuY29tL0RpbmFobW9lL3R1bmEvYmxvYi9tYXN0ZXIvdHVuYS5qcykuXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgb24gdGhlIGNob3J1cyBlZmZlY3Qgb24gW1NvdW5kT25Tb3VuZF0oaHR0cDovL3d3dy5zb3VuZG9uc291bmQuY29tL3Nvcy9qdW4wNC9hcnRpY2xlcy9zeW50aHNlY3JldHMuaHRtKS5cblx0XHQgKlxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqXHRAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgb2YgdGhlIExGTy5cblx0XHQgKlx0QHBhcmFtIHtNaWxsaXNlY29uZHN9IFtkZWxheVRpbWVdIFRoZSBkZWxheSBvZiB0aGUgY2hvcnVzIGVmZmVjdCBpbiBtcy5cblx0XHQgKlx0QHBhcmFtIHtOb3JtYWxSYW5nZX0gW2RlcHRoXSBUaGUgZGVwdGggb2YgdGhlIGNob3J1cy5cblx0XHQgKlx0QGV4YW1wbGVcblx0XHQgKiB2YXIgY2hvcnVzID0gbmV3IFRvbmUuQ2hvcnVzKDQsIDIuNSwgMC41KTtcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5Qb2x5U3ludGgoNCwgVG9uZS5Nb25vU3ludGgpLmNvbm5lY3QoY2hvcnVzKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJDM1wiLFwiRTNcIixcIkczXCJdLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DaG9ydXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdLCBUb25lLkNob3J1cyk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVwdGggb2YgdGhlIGNob3J1c1xuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlcHRoID0gb3B0aW9ucy5kZXB0aDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXlUaW1lXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlUaW1lID0gb3B0aW9ucy5kZWxheVRpbWUgLyAxMDAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8gd2hpY2ggY29udHJvbHMgdGhlIGRlbGF5VGltZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAxXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgYW5vdGhlciBMRk8gZm9yIHRoZSByaWdodCBzaWRlIHdpdGggYSAxODAgZGVncmVlIHBoYXNlIGRpZmZcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogMTgwXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZGVsYXkgZm9yIGxlZnRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlTCA9IG5ldyBUb25lLkRlbGF5KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZGVsYXkgZm9yIHJpZ2h0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZVIgPSBuZXcgVG9uZS5EZWxheSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGZyZXF1ZW5jeSBvZiB0aGUgTEZPIHdoaWNoIG1vZHVsYXRlcyB0aGUgZGVsYXlUaW1lLlxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvTC5mcmVxdWVuY3k7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY2hhaW4odGhpcy5fZGVsYXlOb2RlTCwgdGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNoYWluKHRoaXMuX2RlbGF5Tm9kZVIsIHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgLy9hbmQgcGFzcyB0aHJvdWdoIHRvIG1ha2UgdGhlIGRldHVuZSBhcHBhcmVudFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY29ubmVjdCh0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY29ubmVjdCh0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIC8vbGZvIHNldHVwXG5cdCAgICAgICAgdGhpcy5fbGZvTC5jb25uZWN0KHRoaXMuX2RlbGF5Tm9kZUwuZGVsYXlUaW1lKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLmNvbm5lY3QodGhpcy5fZGVsYXlOb2RlUi5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGxmb1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3RhcnQoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN0YXJ0KCk7XG5cdCAgICAgICAgLy9oYXZlIG9uZSBMRk8gZnJlcXVlbmN5IGNvbnRyb2wgdGhlIG90aGVyXG5cdCAgICAgICAgdGhpcy5fbGZvTC5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9sZm9SLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2RlcHRoO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LnZhbHVlID0gb3B0aW9ucy5mcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZnJlcXVlbmN5J10pO1xuXHQgICAgICAgIHRoaXMuc3ByZWFkID0gb3B0aW9ucy5zcHJlYWQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DaG9ydXMsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNob3J1cy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMS41LFxuXHQgICAgICAgICdkZWxheVRpbWUnOiAzLjUsXG5cdCAgICAgICAgJ2RlcHRoJzogMC43LFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdzcHJlYWQnOiAxODBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVwdGggb2YgdGhlIGVmZmVjdC4gQSBkZXB0aCBvZiAxIG1ha2VzIHRoZSBkZWxheVRpbWVcblx0XHQgKiBtb2R1bGF0ZSBiZXR3ZWVuIDAgYW5kIDIqZGVsYXlUaW1lIChjZW50ZXJlZCBhcm91bmQgdGhlIGRlbGF5VGltZSkuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hvcnVzI1xuXHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiBAbmFtZSBkZXB0aFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hvcnVzLnByb3RvdHlwZSwgJ2RlcHRoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVwdGg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkZXB0aCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZXB0aCA9IGRlcHRoO1xuXHQgICAgICAgICAgICB2YXIgZGV2aWF0aW9uID0gdGhpcy5fZGVsYXlUaW1lICogZGVwdGg7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wubWluID0gTWF0aC5tYXgodGhpcy5fZGVsYXlUaW1lIC0gZGV2aWF0aW9uLCAwKTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5tYXggPSB0aGlzLl9kZWxheVRpbWUgKyBkZXZpYXRpb247XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWluID0gTWF0aC5tYXgodGhpcy5fZGVsYXlUaW1lIC0gZGV2aWF0aW9uLCAwKTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5tYXggPSB0aGlzLl9kZWxheVRpbWUgKyBkZXZpYXRpb247XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVsYXlUaW1lIGluIG1pbGxpc2Vjb25kcyBvZiB0aGUgY2hvcnVzLiBBIGxhcmdlciBkZWxheVRpbWVcblx0XHQgKiB3aWxsIGdpdmUgYSBtb3JlIHByb25vdW5jZWQgZWZmZWN0LiBOb21pbmFsIHJhbmdlIGEgZGVsYXlUaW1lXG5cdFx0ICogaXMgYmV0d2VlbiAyIGFuZCAyMG1zLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNob3J1cyNcblx0XHQgKiBAdHlwZSB7TWlsbGlzZWNvbmRzfVxuXHRcdCAqIEBuYW1lIGRlbGF5VGltZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hvcnVzLnByb3RvdHlwZSwgJ2RlbGF5VGltZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGF5VGltZSAqIDEwMDA7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkZWxheVRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGVsYXlUaW1lID0gZGVsYXlUaW1lIC8gMTAwMDtcblx0ICAgICAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2RlcHRoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG9zY2lsbGF0b3IgdHlwZSBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNob3J1cyNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvTC50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQW1vdW50IG9mIHN0ZXJlbyBzcHJlYWQuIFdoZW4gc2V0IHRvIDAsIGJvdGggTEZPJ3Mgd2lsbCBiZSBwYW5uZWQgY2VudHJhbGx5LlxuXHRcdCAqIFdoZW4gc2V0IHRvIDE4MCwgTEZPJ3Mgd2lsbCBiZSBwYW5uZWQgaGFyZCBsZWZ0IGFuZCByaWdodCByZXNwZWN0aXZlbHkuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hvcnVzI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHNwcmVhZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hvcnVzLnByb3RvdHlwZSwgJ3NwcmVhZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmb1IucGhhc2UgLSB0aGlzLl9sZm9MLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ByZWFkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wucGhhc2UgPSA5MCAtIHNwcmVhZCAvIDI7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IucGhhc2UgPSBzcHJlYWQgLyAyICsgOTA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNob3J1c30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DaG9ydXMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9sZm9MLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9MID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9SLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVMLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNob3J1cztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkNvbnZvbHZlciBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBOYXRpdmUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICAgW0NvbnZvbHZlck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWNvbnZvbHZlcm5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKiAgICAgICAgICBDb252b2x1dGlvbiBpcyB1c2VmdWwgZm9yIHJldmVyYiBhbmQgZmlsdGVyIGVtdWxhdGlvbi4gUmVhZCBtb3JlIGFib3V0IGNvbnZvbHV0aW9uIHJldmVyYiBvblxuXHRcdCAqICAgICAgICAgIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbnZvbHV0aW9uX3JldmVyYikuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd8VG9uZS5CdWZmZXJ8T2JqZWN0fSBbdXJsXSBUaGUgVVJMIG9mIHRoZSBpbXB1bHNlIHJlc3BvbnNlIG9yIHRoZSBUb25lLkJ1ZmZlclxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpYW5pbmcgdGhlIGltcHVsc2UgcmVzcG9uc2UuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb249fSBvbmxvYWQgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaW5pdGlhbGl6aW5nIHRoZSBjb252b2x2ZXIgd2l0aCBhbiBpbXB1bHNlIHJlc3BvbnNlXG5cdFx0ICogdmFyIGNvbnZvbHZlciA9IG5ldyBUb25lLkNvbnZvbHZlcihcIi4vcGF0aC90by9pci53YXZcIikudG9NYXN0ZXIoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udm9sdmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3VybCcsXG5cdCAgICAgICAgICAgICdvbmxvYWQnXG5cdCAgICAgICAgXSwgVG9uZS5Db252b2x2ZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29udm9sdmVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7Q29udm9sdmVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNvbnZvbHZlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBjb252b2x1dGlvbiBidWZmZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5CdWZmZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihvcHRpb25zLnVybCwgZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9jb252b2x2ZXIuYnVmZmVyID0gYnVmZmVyLmdldCgpO1xuXHQgICAgICAgICAgICBvcHRpb25zLm9ubG9hZCgpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX2NvbnZvbHZlcik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Db252b2x2ZXIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udm9sdmVyLmRlZmF1bHRzID0geyAnb25sb2FkJzogVG9uZS5ub09wIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGNvbnZvbHZlcidzIGJ1ZmZlclxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db252b2x2ZXIjXG5cdFx0ICogIEB0eXBlIHtBdWRpb0J1ZmZlcn1cblx0XHQgKiAgQG5hbWUgYnVmZmVyXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db252b2x2ZXIucHJvdG90eXBlLCAnYnVmZmVyJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmdldCgpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlci5zZXQoYnVmZmVyKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29udm9sdmVyLmJ1ZmZlciA9IHRoaXMuX2J1ZmZlci5nZXQoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBMb2FkIGFuIGltcHVsc2UgcmVzcG9uc2UgdXJsIGFzIGFuIGF1ZGlvIGJ1ZmZlci5cblx0XHQgKiAgRGVjb2RlcyB0aGUgYXVkaW8gYXN5bmNocm9ub3VzbHkgYW5kIGludm9rZXNcblx0XHQgKiAgdGhlIGNhbGxiYWNrIG9uY2UgdGhlIGF1ZGlvIGJ1ZmZlciBsb2Fkcy5cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgdXJsIG9mIHRoZSBidWZmZXIgdG8gbG9hZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICBmaWxldHlwZSBzdXBwb3J0IGRlcGVuZHMgb24gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgYnJvd3Nlci5cblx0XHQgKiAgQHBhcmFtICB7ZnVuY3Rpb249fSBjYWxsYmFja1xuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udm9sdmVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmxvYWQodXJsLCBmdW5jdGlvbiAoYnVmZikge1xuXHQgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmY7XG5cdCAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuXHQgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Db252b2x2ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udm9sdmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Db252b2x2ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkRpc3RvcnRpb24gaXMgYSBzaW1wbGUgZGlzdG9ydGlvbiBlZmZlY3QgdXNpbmcgVG9uZS5XYXZlU2hhcGVyLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZyb20gW2Egc3RhY2tvdmVyZmxvdyBhbnN3ZXJdKGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyMzEzNDA4KS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxPYmplY3R9IFtkaXN0b3J0aW9uXSBUaGUgYW1vdW50IG9mIGRpc3RvcnRpb24gKG5vbWluYWwgcmFuZ2Ugb2YgMC0xKVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBkaXN0ID0gbmV3IFRvbmUuRGlzdG9ydGlvbigwLjgpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIGZtID0gbmV3IFRvbmUuU2ltcGxlRk0oKS5jb25uZWN0KGRpc3QpO1xuXHRcdCAqIC8vdGhpcyBzb3VuZHMgZ29vZCBvbiBiYXNzIG5vdGVzXG5cdFx0ICogZm0udHJpZ2dlckF0dGFja1JlbGVhc2UoXCJBMVwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EaXN0b3J0aW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZGlzdG9ydGlvbiddLCBUb25lLkRpc3RvcnRpb24pO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcig0MDk2KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIGhvbGRzIHRoZSBkaXN0b3J0aW9uIGFtb3VudFxuXHRcdFx0ICogQHR5cGUge251bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kaXN0b3J0aW9uID0gb3B0aW9ucy5kaXN0b3J0aW9uO1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9zaGFwZXIpO1xuXHQgICAgICAgIHRoaXMuZGlzdG9ydGlvbiA9IG9wdGlvbnMuZGlzdG9ydGlvbjtcblx0ICAgICAgICB0aGlzLm92ZXJzYW1wbGUgPSBvcHRpb25zLm92ZXJzYW1wbGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5EaXN0b3J0aW9uLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRGlzdG9ydGlvbi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGlzdG9ydGlvbic6IDAuNCxcblx0ICAgICAgICAnb3ZlcnNhbXBsZSc6ICdub25lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhbW91bnQgb2YgZGlzdG9ydGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5EaXN0b3J0aW9uI1xuXHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiBAbmFtZSBkaXN0b3J0aW9uXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5EaXN0b3J0aW9uLnByb3RvdHlwZSwgJ2Rpc3RvcnRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9kaXN0b3J0aW9uO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYW1vdW50KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2Rpc3RvcnRpb24gPSBhbW91bnQ7XG5cdCAgICAgICAgICAgIHZhciBrID0gYW1vdW50ICogMTAwO1xuXHQgICAgICAgICAgICB2YXIgZGVnID0gTWF0aC5QSSAvIDE4MDtcblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLnNldE1hcChmdW5jdGlvbiAoeCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKHgpIDwgMC4wMDEpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL3Nob3VsZCBvdXRwdXQgMCB3aGVuIGlucHV0IGlzIDBcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgzICsgaykgKiB4ICogMjAgKiBkZWcgLyAoTWF0aC5QSSArIGsgKiBNYXRoLmFicyh4KSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG92ZXJzYW1wbGluZyBvZiB0aGUgZWZmZWN0LiBDYW4gZWl0aGVyIGJlIFwibm9uZVwiLCBcIjJ4XCIgb3IgXCI0eFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkRpc3RvcnRpb24jXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSBvdmVyc2FtcGxlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5EaXN0b3J0aW9uLnByb3RvdHlwZSwgJ292ZXJzYW1wbGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG92ZXJzYW1wbGluZykge1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZSA9IG92ZXJzYW1wbGluZztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkRpc3RvcnRpb259IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRGlzdG9ydGlvbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5EaXN0b3J0aW9uO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqIFx0QGNsYXNzICBUb25lLkZlZWRiYWNrRWZmZWN0IHByb3ZpZGVzIGEgbG9vcCBiZXR3ZWVuIGFuIFxuXHRcdCAqIFx0ICAgICAgICBhdWRpbyBzb3VyY2UgYW5kIGl0cyBvd24gb3V0cHV0LiBUaGlzIGlzIGEgYmFzZS1jbGFzc1xuXHRcdCAqIFx0ICAgICAgICBmb3IgZmVlZGJhY2sgZWZmZWN0cy4gXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFtmZWVkYmFja10gVGhlIGluaXRpYWwgZmVlZGJhY2sgdmFsdWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZmVlZGJhY2snXSwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZ2FpbiB3aGljaCBjb250cm9scyB0aGUgZmVlZGJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0dhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMuZmVlZGJhY2ssIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBzaWduYWwgd2hpY2ggaXMgZmVkIGJhY2sgaW50byB0aGUgZWZmZWN0IGlucHV0LiBcblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IHRoaXMuX2ZlZWRiYWNrR2Fpbi5nYWluO1xuXHQgICAgICAgIC8vdGhlIGZlZWRiYWNrIGxvb3Bcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybi5jaGFpbih0aGlzLl9mZWVkYmFja0dhaW4sIHRoaXMuZWZmZWN0U2VuZCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydmZWVkYmFjayddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZlZWRiYWNrRWZmZWN0LCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5kZWZhdWx0cyA9IHsgJ2ZlZWRiYWNrJzogMC4xMjUgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZlZWRiYWNrRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydmZWVkYmFjayddKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0dhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrR2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmVlZGJhY2tFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5GZWVkYmFja0RlbGF5IGlzIGEgRGVsYXlOb2RlIGluIHdoaWNoIHBhcnQgb2Ygb3V0cHV0XG5cdFx0ICogICAgICAgICAgc2lnbmFsIGlzIGZlZCBiYWNrIGludG8gdGhlIGRlbGF5LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5GZWVkYmFja0VmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2RlbGF5VGltZV0gVGhlIGRlbGF5IGFwcGxpZWQgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZT19IGZlZWRiYWNrIFRoZSBhbW91bnQgb2YgdGhlIGVmZmVjdGVkIHNpZ25hbCB3aGljaFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZlZCBiYWNrIHRocm91Z2ggdGhlIGRlbGF5LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBmZWVkYmFja0RlbGF5ID0gbmV3IFRvbmUuRmVlZGJhY2tEZWxheShcIjhuXCIsIDAuNSkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgdG9tID0gbmV3IFRvbmUuRHJ1bVN5bnRoKHtcblx0XHQgKiBcdFwib2N0YXZlc1wiIDogNCxcblx0XHQgKiBcdFwicGl0Y2hEZWNheVwiIDogMC4xXG5cdFx0ICogfSkuY29ubmVjdChmZWVkYmFja0RlbGF5KTtcblx0XHQgKiB0b20udHJpZ2dlckF0dGFja1JlbGVhc2UoXCJBMlwiLFwiMzJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0RlbGF5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdmZWVkYmFjaydcblx0ICAgICAgICBdLCBUb25lLkZlZWRiYWNrRGVsYXkpO1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBuZXcgVG9uZS5EZWxheShvcHRpb25zLmRlbGF5VGltZSwgb3B0aW9ucy5tYXhEZWxheSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlbGF5VGltZSBvZiB0aGUgRGVsYXlOb2RlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZGVsYXlOb2RlLmRlbGF5VGltZTtcblx0ICAgICAgICAvLyBjb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX2RlbGF5Tm9kZSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydkZWxheVRpbWUnXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GZWVkYmFja0RlbGF5LCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRGVsYXkuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDAuMjUsXG5cdCAgICAgICAgJ21heERlbGF5JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GZWVkYmFja0RlbGF5fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRGVsYXkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2RlbGF5VGltZSddKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmVlZGJhY2tEZWxheTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgYW4gYXJyYXkgb2YgY29tYiBmaWx0ZXIgZGVsYXkgdmFsdWVzIGZyb20gRnJlZXZlcmIgaW1wbGVtZW50YXRpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgY29tYkZpbHRlclR1bmluZ3MgPSBbXG5cdCAgICAgICAgMTU1NyAvIDQ0MTAwLFxuXHQgICAgICAgIDE2MTcgLyA0NDEwMCxcblx0ICAgICAgICAxNDkxIC8gNDQxMDAsXG5cdCAgICAgICAgMTQyMiAvIDQ0MTAwLFxuXHQgICAgICAgIDEyNzcgLyA0NDEwMCxcblx0ICAgICAgICAxMzU2IC8gNDQxMDAsXG5cdCAgICAgICAgMTE4OCAvIDQ0MTAwLFxuXHQgICAgICAgIDExMTYgLyA0NDEwMFxuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBhbiBhcnJheSBvZiBhbGxwYXNzIGZpbHRlciBmcmVxdWVuY3kgdmFsdWVzIGZyb20gRnJlZXZlcmIgaW1wbGVtZW50YXRpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzID0gW1xuXHQgICAgICAgIDIyNSxcblx0ICAgICAgICA1NTYsXG5cdCAgICAgICAgNDQxLFxuXHQgICAgICAgIDM0MVxuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GcmVldmVyYiBpcyBhIHJldmVyYiBiYXNlZCBvbiBbRnJlZXZlcmJdKGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L35qb3MvcGFzcC9GcmVldmVyYi5odG1sKS5cblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBvbiByZXZlcmIgb24gW1NvdW5kIE9uIFNvdW5kXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA0MDQwODM5MDIvaHR0cDovL3d3dy5zb3VuZG9uc291bmQuY29tOjgwL3Nvcy9mZWIwMS9hcnRpY2xlcy9zeW50aHNlY3JldHMuYXNwKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3Jvb21TaXplXSBDb3JyZWxhdGVkIHRvIHRoZSBkZWNheSB0aW1lLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2RhbXBlbmluZ10gVGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgYSBsb3dwYXNzIGZpbHRlciBhcyBwYXJ0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcmV2ZXJiLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBmcmVldmVyYiA9IG5ldyBUb25lLkZyZWV2ZXJiKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBmcmVldmVyYi5kYW1wZW5pbmcudmFsdWUgPSAxMDAwO1xuXHRcdCAqIC8vcm91dGluZyBzeW50aCB0aHJvdWdoIHRoZSByZXZlcmJcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5BTVN5bnRoKCkuY29ubmVjdChmcmVldmVyYik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZWV2ZXJiID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3Jvb21TaXplJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdLCBUb25lLkZyZWV2ZXJiKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByb29tU2l6ZSB2YWx1ZSBiZXR3ZWVuLiBBIGxhcmdlciByb29tU2l6ZVxuXHRcdFx0ICogIHdpbGwgcmVzdWx0IGluIGEgbG9uZ2VyIGRlY2F5LlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJvb21TaXplID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMucm9vbVNpemUsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBkYW1wZW5pbmcgb2YgdGhlIHJldmVyYmVyYW50IHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGFtcGVuaW5nLCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29tYiBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21iRmlsdGVycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhbGxwYXNzIGZpbHRlcnMgb24gdGhlIGxlZnRcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTCA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhbGxwYXNzIGZpbHRlcnMgb24gdGhlIHJpZ2h0XG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1IgPSBbXTtcblx0ICAgICAgICAvL21ha2UgdGhlIGFsbHBhc3MgZmlsdGVycyBvbiB0aGUgcmlnaHRcblx0ICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcy5sZW5ndGg7IGwrKykge1xuXHQgICAgICAgICAgICB2YXIgYWxscGFzc0wgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgIGFsbHBhc3NMLnR5cGUgPSAnYWxscGFzcyc7XG5cdCAgICAgICAgICAgIGFsbHBhc3NMLmZyZXF1ZW5jeS52YWx1ZSA9IGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llc1tsXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMLnB1c2goYWxscGFzc0wpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL21ha2UgdGhlIGFsbHBhc3MgZmlsdGVycyBvbiB0aGUgbGVmdFxuXHQgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzLmxlbmd0aDsgcisrKSB7XG5cdCAgICAgICAgICAgIHZhciBhbGxwYXNzUiA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgYWxscGFzc1IudHlwZSA9ICdhbGxwYXNzJztcblx0ICAgICAgICAgICAgYWxscGFzc1IuZnJlcXVlbmN5LnZhbHVlID0gYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzW3JdO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1IucHVzaChhbGxwYXNzUik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vbWFrZSB0aGUgY29tYiBmaWx0ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjb21iRmlsdGVyVHVuaW5ncy5sZW5ndGg7IGMrKykge1xuXHQgICAgICAgICAgICB2YXIgbGZwZiA9IG5ldyBUb25lLkxvd3Bhc3NDb21iRmlsdGVyKGNvbWJGaWx0ZXJUdW5pbmdzW2NdKTtcblx0ICAgICAgICAgICAgaWYgKGMgPCBjb21iRmlsdGVyVHVuaW5ncy5sZW5ndGggLyAyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNoYWluKGxmcGYsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTFswXSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNoYWluKGxmcGYsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUlswXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5yb29tU2l6ZS5jb25uZWN0KGxmcGYucmVzb25hbmNlKTtcblx0ICAgICAgICAgICAgdGhpcy5kYW1wZW5pbmcuY29ubmVjdChsZnBmLmRhbXBlbmluZyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbWJGaWx0ZXJzLnB1c2gobGZwZik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY2hhaW4gdGhlIGFsbHBhc3MgZmlsdGVycyB0b2dldGVoclxuXHQgICAgICAgIFRvbmUuY29ubmVjdFNlcmllcy5hcHBseShUb25lLCB0aGlzLl9hbGxwYXNzRmlsdGVyc0wpO1xuXHQgICAgICAgIFRvbmUuY29ubmVjdFNlcmllcy5hcHBseShUb25lLCB0aGlzLl9hbGxwYXNzRmlsdGVyc1IpO1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTFt0aGlzLl9hbGxwYXNzRmlsdGVyc0wubGVuZ3RoIC0gMV0uY29ubmVjdCh0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUlt0aGlzLl9hbGxwYXNzRmlsdGVyc1IubGVuZ3RoIC0gMV0uY29ubmVjdCh0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3Jvb21TaXplJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZyZWV2ZXJiLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVldmVyYi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncm9vbVNpemUnOiAwLjcsXG5cdCAgICAgICAgJ2RhbXBlbmluZyc6IDMwMDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZyZWV2ZXJifSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZWV2ZXJiLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgYWwgPSAwOyBhbCA8IHRoaXMuX2FsbHBhc3NGaWx0ZXJzTC5sZW5ndGg7IGFsKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMW2FsXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTFthbF0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0wgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGFyID0gMDsgYXIgPCB0aGlzLl9hbGxwYXNzRmlsdGVyc1IubGVuZ3RoOyBhcisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUlthcl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbYXJdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBjZiA9IDA7IGNmIDwgdGhpcy5fY29tYkZpbHRlcnMubGVuZ3RoOyBjZisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbWJGaWx0ZXJzW2NmXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbWJGaWx0ZXJzW2NmXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2NvbWJGaWx0ZXJzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdyb29tU2l6ZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GcmVldmVyYjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgYW4gYXJyYXkgb2YgdGhlIGNvbWIgZmlsdGVyIGRlbGF5IHRpbWUgdmFsdWVzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGNvbWJGaWx0ZXJEZWxheVRpbWVzID0gW1xuXHQgICAgICAgIDE2ODcgLyAyNTAwMCxcblx0ICAgICAgICAxNjAxIC8gMjUwMDAsXG5cdCAgICAgICAgMjA1MyAvIDI1MDAwLFxuXHQgICAgICAgIDIyNTEgLyAyNTAwMFxuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgcmVzb25hbmNlcyBvZiBlYWNoIG9mIHRoZSBjb21iIGZpbHRlcnNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgY29tYkZpbHRlclJlc29uYW5jZXMgPSBbXG5cdCAgICAgICAgMC43NzMsXG5cdCAgICAgICAgMC44MDIsXG5cdCAgICAgICAgMC43NTMsXG5cdCAgICAgICAgMC43MzNcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGFsbHBhc3MgZmlsdGVyIGZyZXF1ZW5jaWVzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGFsbHBhc3NGaWx0ZXJGcmVxcyA9IFtcblx0ICAgICAgICAzNDcsXG5cdCAgICAgICAgMTEzLFxuXHQgICAgICAgIDM3XG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkpDUmV2ZXJiIGlzIGEgc2ltcGxlIFtTY2hyb2VkZXIgUmV2ZXJiZXJhdG9yXShodHRwczovL2Njcm1hLnN0YW5mb3JkLmVkdS9+am9zL3Bhc3AvU2Nocm9lZGVyX1JldmVyYmVyYXRvcnMuaHRtbClcblx0XHQgKiAgICAgICAgIHR1bmVkIGJ5IEpvaG4gQ2hvd25pbmcgaW4gMTk3MC5cblx0XHQgKiAgICAgICAgIEl0IGlzIG1hZGUgdXAgb2YgdGhyZWUgYWxscGFzcyBmaWx0ZXJzIGFuZCBmb3VyIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLlxuXHRcdCAqXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFtyb29tU2l6ZV0gQ29vcmVsYXRlcyB0byB0aGUgZGVjYXkgdGltZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcmV2ZXJiID0gbmV3IFRvbmUuSkNSZXZlcmIoMC40KS5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0XHQgKiB2YXIgZGVsYXkgPSBuZXcgVG9uZS5GZWVkYmFja0RlbGF5KDAuNSk7XG5cdFx0ICogLy9jb25uZWN0aW5nIHRoZSBzeW50aCB0byByZXZlcmIgdGhyb3VnaCBkZWxheVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkR1b1N5bnRoKCkuY2hhaW4oZGVsYXksIHJldmVyYik7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJBNFwiLFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkpDUmV2ZXJiID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsncm9vbVNpemUnXSwgVG9uZS5KQ1JldmVyYik7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICByb29tIHNpemUgY29udHJvbCB2YWx1ZXMgYmV0d2VlbiBbMCwxXVxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJvb21TaXplID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMucm9vbVNpemUsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIHJvb20gc2l6ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNjYWxlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplID0gbmV3IFRvbmUuU2NhbGUoLTAuNzMzLCAwLjE5Nyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgYSBzZXJpZXMgb2YgYWxscGFzcyBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHBhcmFsbGVsIGZlZWRiYWNrIGNvbWIgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycyA9IFtdO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgYWxscGFzcyBmaWx0ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgYWYgPSAwOyBhZiA8IGFsbHBhc3NGaWx0ZXJGcmVxcy5sZW5ndGg7IGFmKyspIHtcblx0ICAgICAgICAgICAgdmFyIGFsbHBhc3MgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgIGFsbHBhc3MudHlwZSA9ICdhbGxwYXNzJztcblx0ICAgICAgICAgICAgYWxscGFzcy5mcmVxdWVuY3kudmFsdWUgPSBhbGxwYXNzRmlsdGVyRnJlcXNbYWZdO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVycy5wdXNoKGFsbHBhc3MpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2FuZCB0aGUgY29tYiBmaWx0ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgY2YgPSAwOyBjZiA8IGNvbWJGaWx0ZXJEZWxheVRpbWVzLmxlbmd0aDsgY2YrKykge1xuXHQgICAgICAgICAgICB2YXIgZmJjZiA9IG5ldyBUb25lLkZlZWRiYWNrQ29tYkZpbHRlcihjb21iRmlsdGVyRGVsYXlUaW1lc1tjZl0sIDAuMSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlUm9vbVNpemUuY29ubmVjdChmYmNmLnJlc29uYW5jZSk7XG5cdCAgICAgICAgICAgIGZiY2YucmVzb25hbmNlLnZhbHVlID0gY29tYkZpbHRlclJlc29uYW5jZXNbY2ZdO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1t0aGlzLl9hbGxwYXNzRmlsdGVycy5sZW5ndGggLSAxXS5jb25uZWN0KGZiY2YpO1xuXHQgICAgICAgICAgICBpZiAoY2YgPCBjb21iRmlsdGVyRGVsYXlUaW1lcy5sZW5ndGggLyAyKSB7XG5cdCAgICAgICAgICAgICAgICBmYmNmLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGZiY2YuY29ubmVjdCh0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnMucHVzaChmYmNmKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jaGFpbiB0aGUgYWxscGFzcyBmaWx0ZXJzIHRvZ2V0aGVyXG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZS5jb25uZWN0KHRoaXMuX3NjYWxlUm9vbVNpemUpO1xuXHQgICAgICAgIFRvbmUuY29ubmVjdFNlcmllcy5hcHBseShUb25lLCB0aGlzLl9hbGxwYXNzRmlsdGVycyk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jb25uZWN0KHRoaXMuX2FsbHBhc3NGaWx0ZXJzWzBdKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNvbm5lY3QodGhpcy5fYWxscGFzc0ZpbHRlcnNbMF0pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsncm9vbVNpemUnXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5KQ1JldmVyYiwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5KQ1JldmVyYi5kZWZhdWx0cyA9IHsgJ3Jvb21TaXplJzogMC41IH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkpDUmV2ZXJifSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkpDUmV2ZXJiLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgYXBmID0gMDsgYXBmIDwgdGhpcy5fYWxscGFzc0ZpbHRlcnMubGVuZ3RoOyBhcGYrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1thcGZdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNbYXBmXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBmYmNmID0gMDsgZmJjZiA8IHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnMubGVuZ3RoOyBmYmNmKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVyc1tmYmNmXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnNbZmJjZl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3Jvb21TaXplJ10pO1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlUm9vbVNpemUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlUm9vbVNpemUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkpDUmV2ZXJiO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTWlkL1NpZGUgcHJvY2Vzc2luZyBzZXBhcmF0ZXMgdGhlIHRoZSAnbWlkJyBzaWduYWxcblx0XHQgKiAgICAgICAgICh3aGljaCBjb21lcyBvdXQgb2YgYm90aCB0aGUgbGVmdCBhbmQgdGhlIHJpZ2h0IGNoYW5uZWwpXG5cdFx0ICogICAgICAgICBhbmQgdGhlICdzaWRlJyAod2hpY2ggb25seSBjb21lcyBvdXQgb2YgdGhlIHRoZSBzaWRlIGNoYW5uZWxzKVxuXHRcdCAqICAgICAgICAgYW5kIGVmZmVjdHMgdGhlbSBzZXBhcmF0ZWx5IGJlZm9yZSBiZWluZyByZWNvbWJpbmVkLlxuXHRcdCAqICAgICAgICAgQXBwbGllcyBhIE1pZC9TaWRlIHNlcGVyYXRpb24gYW5kIHJlY29tYmluYXRpb24uXG5cdFx0ICogICAgICAgICBBbGdvcml0aG0gZm91bmQgaW4gW2t2cmF1ZGlvIGZvcnVtc10oaHR0cDovL3d3dy5rdnJhdWRpby5jb20vZm9ydW0vdmlld3RvcGljLnBocD90PTIxMjU4NykuXG5cdFx0ICogICAgICAgICA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgVGhpcyBpcyBhIGJhc2UtY2xhc3MgZm9yIE1pZC9TaWRlIEVmZmVjdHMuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUVmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQvc2lkZSBzcGxpdFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5NaWRTaWRlU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdCA9IG5ldyBUb25lLk1pZFNpZGVTcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQvc2lkZSBtZXJnZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5NaWRTaWRlTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZSA9IG5ldyBUb25lLk1pZFNpZGVNZXJnZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgc2VuZC4gQ29ubmVjdCB0byBtaWQgcHJvY2Vzc2luZ1xuXHRcdFx0ICogIEB0eXBlIHtUb25lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZFNlbmQgPSB0aGlzLl9taWRTaWRlU3BsaXQubWlkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIHNlbmQuIENvbm5lY3QgdG8gc2lkZSBwcm9jZXNzaW5nXG5cdFx0XHQgKiAgQHR5cGUge1RvbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZVNlbmQgPSB0aGlzLl9taWRTaWRlU3BsaXQuc2lkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHJldHVybiBjb25uZWN0aW9uXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZFJldHVybiA9IHRoaXMuX21pZFNpZGVNZXJnZS5taWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZGUgcmV0dXJuIGNvbm5lY3Rpb25cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZVJldHVybiA9IHRoaXMuX21pZFNpZGVNZXJnZS5zaWRlO1xuXHQgICAgICAgIC8vdGhlIGNvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNvbm5lY3QodGhpcy5fbWlkU2lkZVNwbGl0KTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UuY29ubmVjdCh0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRTaWRlRWZmZWN0LCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1pZFNpZGVFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWRTZW5kID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGVTZW5kID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZFJldHVybiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlUmV0dXJuID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NaWRTaWRlRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QaGFzZXIgaXMgYSBwaGFzZXIgZWZmZWN0LiBQaGFzZXJzIHdvcmsgYnkgY2hhbmdpbmcgdGhlIHBoYXNlXG5cdFx0ICogICAgICAgICBvZiBkaWZmZXJlbnQgZnJlcXVlbmN5IGNvbXBvbmVudHMgb2YgYW4gaW5jb21pbmcgc2lnbmFsLiBSZWFkIG1vcmUgb25cblx0XHQgKiAgICAgICAgIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BoYXNlcl8oZWZmZWN0KSkuXG5cdFx0ICogICAgICAgICBJbnNwaXJhdGlvbiBmb3IgdGhpcyBwaGFzZXIgY29tZXMgZnJvbSBbVHVuYS5qc10oaHR0cHM6Ly9naXRodWIuY29tL0RpbmFobW9lL3R1bmEvKS5cblx0XHQgKlxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSBzcGVlZCBvZiB0aGUgcGhhc2luZy5cblx0XHQgKlx0QHBhcmFtIHtudW1iZXJ9IFtvY3RhdmVzXSBUaGUgb2N0YXZlcyBvZiB0aGUgZWZmZWN0LlxuXHRcdCAqXHRAcGFyYW0ge0ZyZXF1ZW5jeX0gW2Jhc2VGcmVxdWVuY3ldIFRoZSBiYXNlIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVycy5cblx0XHQgKlx0QGV4YW1wbGVcblx0XHQgKiB2YXIgcGhhc2VyID0gbmV3IFRvbmUuUGhhc2VyKHtcblx0XHQgKiBcdFwiZnJlcXVlbmN5XCIgOiAxNSxcblx0XHQgKiBcdFwib2N0YXZlc1wiIDogNSxcblx0XHQgKiBcdFwiYmFzZUZyZXF1ZW5jeVwiIDogMTAwMFxuXHRcdCAqIH0pLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuRk1TeW50aCgpLmNvbm5lY3QocGhhc2VyKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkUzXCIsIFwiMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBoYXNlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL3NldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnb2N0YXZlcycsXG5cdCAgICAgICAgICAgICdiYXNlRnJlcXVlbmN5J1xuXHQgICAgICAgIF0sIFRvbmUuUGhhc2VyKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8gd2hpY2ggY29udHJvbHMgdGhlIGZyZXF1ZW5jeSBvbiB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9MID0gbmV3IFRvbmUuTEZPKG9wdGlvbnMuZnJlcXVlbmN5LCAwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGNvbnRyb2xzIHRoZSBmcmVxdWVuY3kgb24gdGhlIHJpZ2h0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBuZXcgVG9uZS5MRk8ob3B0aW9ucy5mcmVxdWVuY3ksIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IucGhhc2UgPSAxODA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGJhc2UgbW9kdWxhdGlvbiBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvY3RhdmVzIG9mIHRoZSBwaGFzaW5nXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcXVhbGl0eSBmYWN0b3Igb2YgdGhlIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuUSwgVG9uZS5UeXBlLlBvc2l0aXZlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYXJyYXkgb2YgZmlsdGVycyBmb3IgdGhlIGxlZnQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc0wgPSB0aGlzLl9tYWtlRmlsdGVycyhvcHRpb25zLnN0YWdlcywgdGhpcy5fbGZvTCwgdGhpcy5RKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYXJyYXkgb2YgZmlsdGVycyBmb3IgdGhlIGxlZnQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc1IgPSB0aGlzLl9tYWtlRmlsdGVycyhvcHRpb25zLnN0YWdlcywgdGhpcy5fbGZvUiwgdGhpcy5RKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSBmcmVxdWVuY3kgb2YgdGhlIGVmZmVjdFxuXHRcdFx0ICogQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm9MLmZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS52YWx1ZSA9IG9wdGlvbnMuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGVtIHVwXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jb25uZWN0KHRoaXMuX2ZpbHRlcnNMWzBdKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNvbm5lY3QodGhpcy5fZmlsdGVyc1JbMF0pO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNMW29wdGlvbnMuc3RhZ2VzIC0gMV0uY29ubmVjdCh0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNSW29wdGlvbnMuc3RhZ2VzIC0gMV0uY29ubmVjdCh0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIC8vY29udHJvbCB0aGUgZnJlcXVlbmN5IHdpdGggb25lIExGT1xuXHQgICAgICAgIHRoaXMuX2xmb0wuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fbGZvUi5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBvcHRpb25zXG5cdCAgICAgICAgdGhpcy5iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBsZm9cblx0ICAgICAgICB0aGlzLl9sZm9MLnN0YXJ0KCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdGFydCgpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGhhc2VyLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdHNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7b2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaGFzZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDAuNSxcblx0ICAgICAgICAnb2N0YXZlcyc6IDMsXG5cdCAgICAgICAgJ3N0YWdlcyc6IDEwLFxuXHQgICAgICAgICdRJzogMTAsXG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAzNTBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHN0YWdlc1xuXHRcdCAqICBAcmV0dXJucyB7QXJyYXl9IHRoZSBudW1iZXIgb2YgZmlsdGVycyBhbGwgY29ubmVjdGVkIHRvZ2V0aGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBoYXNlci5wcm90b3R5cGUuX21ha2VGaWx0ZXJzID0gZnVuY3Rpb24gKHN0YWdlcywgY29ubmVjdFRvRnJlcSwgUSkge1xuXHQgICAgICAgIHZhciBmaWx0ZXJzID0gbmV3IEFycmF5KHN0YWdlcyk7XG5cdCAgICAgICAgLy9tYWtlIGFsbCB0aGUgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhZ2VzOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGZpbHRlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgZmlsdGVyLnR5cGUgPSAnYWxscGFzcyc7XG5cdCAgICAgICAgICAgIFEuY29ubmVjdChmaWx0ZXIuUSk7XG5cdCAgICAgICAgICAgIGNvbm5lY3RUb0ZyZXEuY29ubmVjdChmaWx0ZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICAgICAgZmlsdGVyc1tpXSA9IGZpbHRlcjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIGZpbHRlcnMpO1xuXHQgICAgICAgIHJldHVybiBmaWx0ZXJzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyB0aGUgcGhhc2UgZ29lcyBhYm92ZVxuXHRcdCAqIHRoZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGhhc2VyI1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QaGFzZXIucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3RhdmVzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3RhdmVzO1xuXHQgICAgICAgICAgICB2YXIgbWF4ID0gdGhpcy5fYmFzZUZyZXF1ZW5jeSAqIE1hdGgucG93KDIsIG9jdGF2ZXMpO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1heCA9IG1heDtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5tYXggPSBtYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdGhlIGJhc2UgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXJzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBoYXNlciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGJhc2VGcmVxdWVuY3lcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBoYXNlci5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IGZyZXE7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wubWluID0gZnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5taW4gPSBmcmVxO1xuXHQgICAgICAgICAgICB0aGlzLm9jdGF2ZXMgPSB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBoYXNlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaGFzZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLlEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzTC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzTFtpXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNMW2ldID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc0wgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fZmlsdGVyc1IubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1Jbal0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzUltqXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGhhc2VyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgSnVzdCBsaWtlIGEgc3RlcmVvIGZlZWRiYWNrIGVmZmVjdCwgYnV0IHRoZSBmZWVkYmFjayBpcyByb3V0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0XG5cdFx0ICogICAgICAgICBhbmQgcmlnaHQgdG8gbGVmdCBpbnN0ZWFkIG9mIG9uIHRoZSBzYW1lIGNoYW5uZWwuXG5cdFx0ICpcblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZmVlZGJhY2snXSwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIGZyb20gdGhlIG91dHB1dFxuXHRcdFx0ICogIGJhY2sgaW50byB0aGUgaW5wdXQgb2YgdGhlIGVmZmVjdCAocm91dGVkXG5cdFx0XHQgKiAgYWNyb3NzIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzKS5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZlZWRiYWNrLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZWZ0IHNpZGUgZmVlYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTFIgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHJpZ2h0IHNpZGUgZmVlYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUkwgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5MLmNoYWluKHRoaXMuX2ZlZWRiYWNrTFIsIHRoaXMuZWZmZWN0U2VuZFIpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuUi5jaGFpbih0aGlzLl9mZWVkYmFja1JMLCB0aGlzLmVmZmVjdFNlbmRMKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmZhbih0aGlzLl9mZWVkYmFja0xSLmdhaW4sIHRoaXMuX2ZlZWRiYWNrUkwuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydmZWVkYmFjayddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdCwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTFIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTFIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUkwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUkwgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBpbmdQb25nRGVsYXkgaXMgYSBmZWVkYmFjayBkZWxheSBlZmZlY3Qgd2hlcmUgdGhlIGVjaG8gaXMgaGVhcmRcblx0XHQgKiAgICAgICAgICBmaXJzdCBpbiBvbmUgY2hhbm5lbCBhbmQgbmV4dCBpbiB0aGUgb3Bwb3NpdGUgY2hhbm5lbC4gSW4gYSBzdGVyZW9cblx0XHQgKiAgICAgICAgICBzeXN0ZW0gdGhlc2UgYXJlIHRoZSByaWdodCBhbmQgbGVmdCBjaGFubmVscy5cblx0XHQgKiAgICAgICAgICBQaW5nUG9uZ0RlbGF5IGluIG1vcmUgc2ltcGxpZmllZCB0ZXJtcyBpcyB0d28gVG9uZS5GZWVkYmFja0RlbGF5c1xuXHRcdCAqICAgICAgICAgIHdpdGggaW5kZXBlbmRlbnQgZGVsYXkgdmFsdWVzLiBFYWNoIGRlbGF5IGlzIHJvdXRlZCB0byBvbmUgY2hhbm5lbFxuXHRcdCAqICAgICAgICAgIChsZWZ0IG9yIHJpZ2h0KSwgYW5kIHRoZSBjaGFubmVsIHRyaWdnZXJlZCBzZWNvbmQgd2lsbCBhbHdheXNcblx0XHQgKiAgICAgICAgICB0cmlnZ2VyIGF0IHRoZSBzYW1lIGludGVydmFsIGFmdGVyIHRoZSBmaXJzdC5cblx0XHQgKlxuXHRcdCAqIFx0QGNvbnN0cnVjdG9yXG5cdFx0ICogXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtkZWxheVRpbWVdIFRoZSBkZWxheVRpbWUgYmV0d2VlbiBjb25zZWN1dGl2ZSBlY2hvcy5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZT19IGZlZWRiYWNrIFRoZSBhbW91bnQgb2YgdGhlIGVmZmVjdGVkIHNpZ25hbCB3aGljaFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZmVkIGJhY2sgdGhyb3VnaCB0aGUgZGVsYXkuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBpbmdQb25nID0gbmV3IFRvbmUuUGluZ1BvbmdEZWxheShcIjRuXCIsIDAuMikudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgZHJ1bSA9IG5ldyBUb25lLkRydW1TeW50aCgpLmNvbm5lY3QocGluZ1BvbmcpO1xuXHRcdCAqIGRydW0udHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjMyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGluZ1BvbmdEZWxheSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnZmVlZGJhY2snXG5cdCAgICAgICAgXSwgVG9uZS5QaW5nUG9uZ0RlbGF5KTtcblx0ICAgICAgICBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlIG9uIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGVmdERlbGF5ID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlIG9uIHRoZSByaWdodCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0RGVsYXkgPSBuZXcgVG9uZS5EZWxheSgwLCBvcHRpb25zLm1heERlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHByZWRlbGF5IG9uIHRoZSByaWdodCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0UHJlRGVsYXkgPSBuZXcgVG9uZS5EZWxheSgwLCBvcHRpb25zLm1heERlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IHRpbWUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZWxheVRpbWUsIFRvbmUuVHlwZS5UaW1lKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNoYWluKHRoaXMuX2xlZnREZWxheSwgdGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNoYWluKHRoaXMuX3JpZ2h0UHJlRGVsYXksIHRoaXMuX3JpZ2h0RGVsYXksIHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUuZmFuKHRoaXMuX2xlZnREZWxheS5kZWxheVRpbWUsIHRoaXMuX3JpZ2h0RGVsYXkuZGVsYXlUaW1lLCB0aGlzLl9yaWdodFByZURlbGF5LmRlbGF5VGltZSk7XG5cdCAgICAgICAgLy9yZWFycmFuZ2VkIHRoZSBmZWVkYmFjayB0byBiZSBhZnRlciB0aGUgcmlnaHRQcmVEZWxheVxuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTFIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTFIuY29ubmVjdCh0aGlzLl9yaWdodERlbGF5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2RlbGF5VGltZSddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBpbmdQb25nRGVsYXksIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBpbmdQb25nRGVsYXkuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDAuMjUsXG5cdCAgICAgICAgJ21heERlbGF5VGltZSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBpbmdQb25nRGVsYXl9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGluZ1BvbmdEZWxheS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xlZnREZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGVmdERlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yaWdodERlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9yaWdodERlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yaWdodFByZURlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9yaWdodFByZURlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2RlbGF5VGltZSddKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBpbmdQb25nRGVsYXk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBpdGNoU2hpZnQgZG9lcyBuZWFyLXJlYWx0aW1lIHBpdGNoIHNoaWZ0aW5nIHRvIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogICAgICAgICBUaGUgZWZmZWN0IGlzIGFjaGlldmVkIGJ5IHNwZWVkaW5nIHVwIG9yIHNsb3dpbmcgZG93biB0aGUgZGVsYXlUaW1lXG5cdFx0ICogICAgICAgICBvZiBhIERlbGF5Tm9kZSB1c2luZyBhIHNhd3Rvb3RoIHdhdmUuXG5cdFx0ICogICAgICAgICBBbGdvcml0aG0gZm91bmQgaW4gW3RoaXMgcGRmXShodHRwOi8vZHNwLWJvb2submFyb2QucnUvc291bmRwcm9jLnBkZikuXG5cdFx0ICogICAgICAgICBBZGRpdGlvbmFsIHJlZmVyZW5jZSBieSBbTWlsbGVyIFB1Y2tldF0oaHR0cDovL21zcC51Y3NkLmVkdS90ZWNobmlxdWVzL3YwLjExL2Jvb2staHRtbC9ub2RlMTE1Lmh0bWwpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkZlZWRiYWNrRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge0ludGVydmFsPX0gcGl0Y2ggVGhlIGludGVydmFsIHRvIHRyYW5zcG9zZSB0aGUgaW5jb21pbmcgc2lnbmFsIGJ5LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaXRjaFNoaWZ0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsncGl0Y2gnXSwgVG9uZS5QaXRjaFNoaWZ0KTtcblx0ICAgICAgICBUb25lLkZlZWRiYWNrRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBpdGNoIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbCgwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBVc2VzIHR3byBEZWxheU5vZGVzIHRvIGNvdmVyIHVwIHRoZSBqdW1wIGluXG5cdFx0XHQgKiAgdGhlIHNhd3Rvb3RoIHdhdmUuXG5cdFx0XHQgKiAgQHR5cGUgIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5QSA9IG5ldyBUb25lLkRlbGF5KDAsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaXJzdCBMRk8uXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvQSA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMC4xLFxuXHQgICAgICAgICAgICAndHlwZSc6ICdzYXd0b290aCdcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2RlbGF5QS5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzZWNvbmQgRGVsYXlOb2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5QiA9IG5ldyBUb25lLkRlbGF5KDAsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaXJzdCBMRk8uXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvQiA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMC4xLFxuXHQgICAgICAgICAgICAndHlwZSc6ICdzYXd0b290aCcsXG5cdCAgICAgICAgICAgICdwaGFzZSc6IDE4MFxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5fZGVsYXlCLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQ3Jvc3NmYWRlIHF1aWNrbHkgYmV0d2VlbiB0aGUgdHdvIGRlbGF5IGxpbmVzXG5cdFx0XHQgKiAgdG8gY292ZXIgdXAgdGhlIGp1bXAgaW4gdGhlIHNhd3Rvb3RoIHdhdmVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ3Jvc3NGYWRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGUgPSBuZXcgVG9uZS5Dcm9zc0ZhZGUoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBMRk8gd2hpY2ggYWx0ZXJuYXRlcyBiZXR3ZWVuIHRoZSB0d29cblx0XHRcdCAqICBkZWxheSBsaW5lcyB0byBjb3ZlciB1cCB0aGUgZGlzcGFyaXR5IGluIHRoZVxuXHRcdFx0ICogIHNhd3Rvb3RoIHdhdmUuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlTEZPID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICAgICAndHlwZSc6ICd0cmlhbmdsZScsXG5cdCAgICAgICAgICAgICdwaGFzZSc6IDkwXG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9jcm9zc0ZhZGUuZmFkZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tEZWxheSA9IG5ldyBUb25lLkRlbGF5KG9wdGlvbnMuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGRlbGF5IG9uIHRoZSBpbnB1dCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IHRoaXMuX2ZlZWRiYWNrRGVsYXkuZGVsYXlUaW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdkZWxheVRpbWUnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkIHRoZSBjdXJyZW50IHBpdGNoXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGl0Y2ggPSBvcHRpb25zLnBpdGNoO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGQgdGhlIGN1cnJlbnQgd2luZG93U2l6ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3dpbmRvd1NpemUgPSBvcHRpb25zLndpbmRvd1NpemU7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSB0d28gZGVsYXkgbGluZXMgdXBcblx0ICAgICAgICB0aGlzLl9kZWxheUEuY29ubmVjdCh0aGlzLl9jcm9zc0ZhZGUuYSk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlCLmNvbm5lY3QodGhpcy5fY3Jvc3NGYWRlLmIpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5LmZhbih0aGlzLl9sZm9BLmZyZXF1ZW5jeSwgdGhpcy5fbGZvQi5mcmVxdWVuY3ksIHRoaXMuX2Nyb3NzRmFkZUxGTy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vcm91dGUgdGhlIGlucHV0XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmZhbih0aGlzLl9kZWxheUEsIHRoaXMuX2RlbGF5Qik7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlLmNoYWluKHRoaXMuX2ZlZWRiYWNrRGVsYXksIHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBMRk9zIGF0IHRoZSBzYW1lIHRpbWVcblx0ICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICB0aGlzLl9sZm9BLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgdGhpcy5fbGZvQi5zdGFydChub3cpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZUxGTy5zdGFydChub3cpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlXG5cdCAgICAgICAgdGhpcy53aW5kb3dTaXplID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBpdGNoU2hpZnQsIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBpdGNoU2hpZnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BpdGNoJzogMCxcblx0ICAgICAgICAnd2luZG93U2l6ZSc6IDAuMSxcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMCxcblx0ICAgICAgICAnZmVlZGJhY2snOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVwaXRjaCB0aGUgaW5jb21pbmcgc2lnbmFsIGJ5IHNvbWUgaW50ZXJ2YWwgKG1lYXN1cmVkXG5cdFx0ICogaW4gc2VtaS10b25lcykuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGl0Y2hTaGlmdCNcblx0XHQgKiBAdHlwZSB7SW50ZXJ2YWx9XG5cdFx0ICogQG5hbWUgcGl0Y2hcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHBpdGNoU2hpZnQucGl0Y2ggPSAtMTI7IC8vZG93biBvbmUgb2N0YXZlXG5cdFx0ICogcGl0Y2hTaGlmdC5waXRjaCA9IDc7IC8vdXAgYSBmaWZ0aFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGl0Y2hTaGlmdC5wcm90b3R5cGUsICdwaXRjaCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BpdGNoO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGl0Y2ggPSBpbnRlcnZhbDtcblx0ICAgICAgICAgICAgdmFyIGZhY3RvciA9IDA7XG5cdCAgICAgICAgICAgIGlmIChpbnRlcnZhbCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0EubWluID0gMDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0EubWF4ID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0IubWluID0gMDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0IubWF4ID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICAgICAgICAgIGZhY3RvciA9IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGludGVydmFsIC0gMSkgKyAxO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQS5taW4gPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQS5tYXggPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQi5taW4gPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQi5tYXggPSAwO1xuXHQgICAgICAgICAgICAgICAgZmFjdG9yID0gVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oaW50ZXJ2YWwpIC0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9mcmVxdWVuY3kudmFsdWUgPSBmYWN0b3IgKiAoMS4yIC8gdGhpcy5fd2luZG93U2l6ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgd2luZG93IHNpemUgY29ycmVzcG9uZHMgcm91Z2hseSB0byB0aGUgc2FtcGxlIGxlbmd0aCBpbiBhIGxvb3Bpbmcgc2FtcGxlci5cblx0XHQgKiBTbWFsbGVyIHZhbHVlcyBhcmUgZGVzaXJhYmxlIGZvciBhIGxlc3Mgbm90aWNlYWJsZSBkZWxheSB0aW1lIG9mIHRoZSBwaXRjaCBzaGlmdGVkXG5cdFx0ICogc2lnbmFsLCBidXQgbGFyZ2VyIHZhbHVlcyB3aWxsIHJlc3VsdCBpbiBzbW9vdGhlciBwaXRjaCBzaGlmdGluZyBmb3IgbGFyZ2VyIGludGVydmFscy5cblx0XHQgKiBBIG5vbWluYWwgcmFuZ2Ugb2YgMC4wMyB0byAwLjEgaXMgcmVjb21tZW5kZWQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGl0Y2hTaGlmdCNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSB3aW5kb3dTaXplXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBwaXRjaFNoaWZ0LndpbmRvd1NpemUgPSAwLjE7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QaXRjaFNoaWZ0LnByb3RvdHlwZSwgJ3dpbmRvd1NpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl93aW5kb3dTaXplID0gdGhpcy50b1NlY29uZHMoc2l6ZSk7XG5cdCAgICAgICAgICAgIHRoaXMucGl0Y2ggPSB0aGlzLl9waXRjaDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGl0Y2hTaGlmdH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGl0Y2hTaGlmdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5QS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlBID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kZWxheUIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5QiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvQS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvQSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvQi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvQiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZUxGTy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlTEZPID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZGVsYXlUaW1lJyk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tEZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tEZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBpdGNoU2hpZnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBCdWZmZXJTb3VyY2VOb2RlLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvQnVmZmVyfFRvbmUuQnVmZmVyfSAgYnVmZmVyICAgVGhlIGJ1ZmZlciB0byBwbGF5XG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgb25sb2FkICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIGlzIGRvbmUgcGxheWluZy5cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2J1ZmZlcicsXG5cdCAgICAgICAgICAgICdvbmxvYWQnXG5cdCAgICAgICAgXSwgVG9uZS5CdWZmZXJTb3VyY2UpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBhZnRlciB0aGVcblx0XHRcdCAqICBidWZmZXIgc291cmNlIGlzIGRvbmUgcGxheWluZy5cblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vbmVuZGVkID0gb3B0aW9ucy5vbmVuZGVkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0aW1lIHRoYXQgdGhlIGJ1ZmZlciB3YXMgc3RhcnRlZC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gLTE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW4gYWRkaXRpb25hbCBmbGFnIGlmIHRoZSBhY3R1YWwgQnVmZmVyU291cmNlTm9kZVxuXHRcdFx0ICogIGhhcyBiZWVuIHN0YXJ0ZWQuIGIvYyBzdG9wcGluZyBhbiB1bnN0YXJ0ZWQgYnVmZmVyXG5cdFx0XHQgKiAgd2lsbCB0aHJvdyBpdCBpbnRvIGFuIGludmFsaWQgc3RhdGVcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBGbGFnIGlmIHRoZSBzb3VyY2UgaGFzIGFscmVhZHkgYmVlbiBzdG9wcGVkXG5cdFx0XHQgKiAgQHR5cGUgIHtCb29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zb3VyY2VTdG9wcGVkID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpbWUgdGhhdCB0aGUgYnVmZmVyIGlzIHNjaGVkdWxlZCB0byBzdG9wLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIG5vZGUgd2hpY2ggZW52ZWxvcGVzIHRoZSBCdWZmZXJTb3VyY2Vcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYnVmZmVyIHNvdXJjZVxuXHRcdFx0ICogIEB0eXBlICB7QXVkaW9CdWZmZXJTb3VyY2VOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zb3VyY2UgPSB0aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmNvbm5lY3QodGhpcy5fZ2Fpbk5vZGUpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5vbmVuZGVkID0gdGhpcy5fb25lbmRlZC5iaW5kKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHByaXZhdGUgYnVmZmVyIGluc3RhbmNlXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5CdWZmZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKG9wdGlvbnMuYnVmZmVyLCBvcHRpb25zLm9ubG9hZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBsYXliYWNrUmF0ZSBvZiB0aGUgYnVmZmVyXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fc291cmNlLnBsYXliYWNrUmF0ZSwgVG9uZS5UeXBlLlBvc2l0aXZlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZUluIHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZUluID0gb3B0aW9ucy5mYWRlSW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZhZGVPdXQgdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlT3V0ID0gb3B0aW9ucy5mYWRlT3V0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGN1cnZlIGFwcGxpZWQgdG8gdGhlIGZhZGVzLCBlaXRoZXIgXCJsaW5lYXJcIiBvciBcImV4cG9uZW50aWFsXCJcblx0XHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmN1cnZlID0gb3B0aW9ucy5jdXJ2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgdGhhdCB0aGUgYnVmZmVyIHJhbXBzIHRvXG5cdFx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSAxO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG9uZW5kZWQgdGltZW91dFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmVuZGVkVGltZW91dCA9IC0xO1xuXHQgICAgICAgIC8vc2V0IHNvbWUgdmFsdWVzIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMubG9vcCA9IG9wdGlvbnMubG9vcDtcblx0ICAgICAgICB0aGlzLmxvb3BTdGFydCA9IG9wdGlvbnMubG9vcFN0YXJ0O1xuXHQgICAgICAgIHRoaXMubG9vcEVuZCA9IG9wdGlvbnMubG9vcEVuZDtcblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZS52YWx1ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQnVmZmVyU291cmNlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmVuZGVkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAnbG9vcEVuZCc6IDAsXG5cdCAgICAgICAgJ2ZhZGVJbic6IDAsXG5cdCAgICAgICAgJ2ZhZGVPdXQnOiAwLFxuXHQgICAgICAgICdjdXJ2ZSc6ICdsaW5lYXInLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0YXRlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgcGxheWJhY2sgc3RhdGUgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFRoZSB0aW1lIHRvIHRlc3QgdGhlIHN0YXRlIGF0XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlN0YXRlfSAgVGhlIHBsYXliYWNrIHN0YXRlLiBcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5nZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xICYmIHRpbWUgPj0gdGhpcy5fc3RhcnRUaW1lICYmICF0aGlzLl9zb3VyY2VTdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0YXJ0ZWQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBidWZmZXJcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3N0YXJ0VGltZT1ub3ddIFdoZW4gdGhlIHBsYXllciBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtvZmZzZXQ9MF0gVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgc2FtcGxlIHNob3VsZCBwbGF5LiBJZiBubyBkdXJhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnaXZlbiwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmdWxsIGxlbmd0aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2FtcGxlIChtaW51cyBhbnkgb2Zmc2V0KVxuXHRcdCAqICBAcGFyYW0gIHtHYWlufSAgW2dhaW49MV0gIFRoZSBnYWluIHRvIHBsYXkgdGhlIGJ1ZmZlciBiYWNrIGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIGZhZGVJblRpbWUgIFRoZSBvcHRpb25hbCBmYWRlSW4gcmFtcCB0aW1lLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0LCBkdXJhdGlvbiwgZ2FpbiwgZmFkZUluVGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJTb3VyY2UgY2FuIG9ubHkgYmUgc3RhcnRlZCBvbmNlLicpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIXRoaXMuYnVmZmVyLmxvYWRlZCkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyU291cmNlOiBidWZmZXIgaXMgZWl0aGVyIG5vdCBzZXQgb3Igbm90IGxvYWRlZC4nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vaWYgaXQncyBhIGxvb3AgdGhlIGRlZmF1bHQgb2Zmc2V0IGlzIHRoZSBsb29wc3RhcnQgcG9pbnRcblx0ICAgICAgICBpZiAodGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIHRoaXMubG9vcFN0YXJ0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL290aGVyd2lzZSB0aGUgZGVmYXVsdCBvZmZzZXQgaXMgMFxuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICBnYWluID0gVG9uZS5kZWZhdWx0QXJnKGdhaW4sIDEpO1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSBnYWluO1xuXHQgICAgICAgIGZhZGVJblRpbWUgPSB0aGlzLnRvU2Vjb25kcyhUb25lLmRlZmF1bHRBcmcoZmFkZUluVGltZSwgdGhpcy5mYWRlSW4pKTtcblx0ICAgICAgICB0aGlzLmZhZGVJbiA9IGZhZGVJblRpbWU7XG5cdCAgICAgICAgaWYgKGZhZGVJblRpbWUgPiAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmN1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh0aGlzLl9nYWluLCB0aW1lICsgZmFkZUluVGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSh0aGlzLl9nYWluLCB0aW1lLCBmYWRlSW5UaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoZ2FpbiwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWU7XG5cdCAgICAgICAgdmFyIGNvbXB1dGVkRHVyID0gdGhpcy50b1NlY29uZHMoVG9uZS5kZWZhdWx0QXJnKGR1cmF0aW9uLCB0aGlzLmJ1ZmZlci5kdXJhdGlvbiAtIG9mZnNldCAlIHRoaXMuYnVmZmVyLmR1cmF0aW9uKSk7XG5cdCAgICAgICAgY29tcHV0ZWREdXIgPSBNYXRoLm1heChjb21wdXRlZER1ciwgMCk7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGR1cmF0aW9uKSkge1xuXHQgICAgICAgICAgICAvL2NsaXAgdGhlIGR1cmF0aW9uIHdoZW4gbm90IGxvb3Bpbmdcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgICAgIGNvbXB1dGVkRHVyID0gTWF0aC5taW4oY29tcHV0ZWREdXIsIHRoaXMuYnVmZmVyLmR1cmF0aW9uIC0gb2Zmc2V0ICUgdGhpcy5idWZmZXIuZHVyYXRpb24pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcCh0aW1lICsgY29tcHV0ZWREdXIsIHRoaXMuZmFkZU91dCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc3RhcnQgdGhlIGJ1ZmZlciBzb3VyY2Vcblx0ICAgICAgICBpZiAodGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgIC8vbW9kaWZ5IHRoZSBvZmZzZXQgaWYgaXQncyBncmVhdGVyIHRoYW4gdGhlIGxvb3AgdGltZVxuXHQgICAgICAgICAgICB2YXIgbG9vcEVuZCA9IHRoaXMubG9vcEVuZCB8fCB0aGlzLmJ1ZmZlci5kdXJhdGlvbjtcblx0ICAgICAgICAgICAgdmFyIGxvb3BTdGFydCA9IHRoaXMubG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICB2YXIgbG9vcER1cmF0aW9uID0gbG9vcEVuZCAtIGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgLy9tb3ZlIHRoZSBvZmZzZXQgYmFja1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0ID49IGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgICAgIG9mZnNldCA9IChvZmZzZXQgLSBsb29wU3RhcnQpICUgbG9vcER1cmF0aW9uICsgbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5idWZmZXIgPSB0aGlzLmJ1ZmZlci5nZXQoKTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UubG9vcEVuZCA9IHRoaXMubG9vcEVuZCB8fCB0aGlzLmJ1ZmZlci5kdXJhdGlvbjtcblx0ICAgICAgICBpZiAob2Zmc2V0IDwgdGhpcy5idWZmZXIuZHVyYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5zdGFydCh0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgYnVmZmVyLiBPcHRpb25hbGx5IGFkZCBhIHJhbXAgdGltZSB0byBmYWRlIHRoZVxuXHRcdCAqICBidWZmZXIgb3V0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIHRpbWUgICAgICAgICBUaGUgdGltZSB0aGUgYnVmZmVyIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIGZhZGVPdXRUaW1lICBIb3cgbG9uZyB0aGUgZ2FpbiBzaG91bGQgZmFkZSBvdXQgZm9yXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlclNvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUsIGZhZGVPdXRUaW1lKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLmJ1ZmZlci5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkJ1ZmZlclNvdXJjZTogYnVmZmVyIGlzIGVpdGhlciBub3Qgc2V0IG9yIG5vdCBsb2FkZWQuJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLl9zb3VyY2VTdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vaWYgdGhlIGV2ZW50IGhhcyBhbHJlYWR5IGJlZW4gc2NoZWR1bGVkLCBjbGVhciBpdFxuXHQgICAgICAgIGlmICh0aGlzLl9zdG9wVGltZSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhpcy5jYW5jZWxTdG9wKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc3RvcCBpZiBpdCdzIHNjaGVkdWxlIGJlZm9yZSB0aGUgc3RhcnQgdGltZVxuXHQgICAgICAgIGlmICh0aW1lIDw9IHRoaXMuX3N0YXJ0VGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi52YWx1ZSA9IDA7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gTWF0aC5tYXgodGhpcy5fc3RhcnRUaW1lICsgdGhpcy5mYWRlSW4gKyB0aGlzLnNhbXBsZVRpbWUsIHRpbWUpO1xuXHQgICAgICAgIC8vY2FuY2VsIHRoZSBwcmV2aW91cyBjdXJ2ZVxuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gdGltZTtcblx0ICAgICAgICAvL3RoZSBmYWRlT3V0IHRpbWVcblx0ICAgICAgICBmYWRlT3V0VGltZSA9IHRoaXMudG9TZWNvbmRzKFRvbmUuZGVmYXVsdEFyZyhmYWRlT3V0VGltZSwgdGhpcy5mYWRlT3V0KSk7XG5cdCAgICAgICAgdmFyIGhlbGREdXJhdGlvbiA9IHRpbWUgLSB0aGlzLl9zdGFydFRpbWUgLSB0aGlzLmZhZGVJbiAtIHRoaXMuc2FtcGxlVGltZTtcblx0ICAgICAgICBpZiAoIXRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAvL21ha2Ugc3VyZSB0aGUgZmFkZSBkb2VzIG5vdCBnbyBiZXlvbmQgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyXG5cdCAgICAgICAgICAgIGhlbGREdXJhdGlvbiA9IE1hdGgubWluKGhlbGREdXJhdGlvbiwgdGhpcy5idWZmZXIuZHVyYXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmYWRlT3V0VGltZSA9IE1hdGgubWluKGhlbGREdXJhdGlvbiwgZmFkZU91dFRpbWUpO1xuXHQgICAgICAgIHZhciBzdGFydEZhZGUgPSB0aW1lIC0gZmFkZU91dFRpbWU7XG5cdCAgICAgICAgaWYgKGZhZGVPdXRUaW1lID4gdGhpcy5zYW1wbGVUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUodGhpcy5fZ2Fpbiwgc3RhcnRGYWRlKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuY3VydmUgPT09ICdsaW5lYXInKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUoMCwgc3RhcnRGYWRlLCBmYWRlT3V0VGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX29uZW5kZWRUaW1lb3V0KTtcblx0ICAgICAgICB0aGlzLl9vbmVuZGVkVGltZW91dCA9IFRvbmUuY29udGV4dC5zZXRUaW1lb3V0KHRoaXMuX29uZW5kZWQuYmluZCh0aGlzKSwgdGhpcy5fc3RvcFRpbWUgLSB0aGlzLm5vdygpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGEgc2NoZWR1bGVkIHN0b3AgZXZlbnRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLmNhbmNlbFN0b3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEgJiYgIXRoaXMuX3NvdXJjZVN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgLy9jYW5jZWwgdGhlIHN0b3AgZW52ZWxvcGVcblx0ICAgICAgICAgICAgdmFyIGZhZGVJblRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLmZhZGVJbik7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRoaXMuX3N0YXJ0VGltZSArIGZhZGVJblRpbWUgKyB0aGlzLnNhbXBsZVRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDEsIE1hdGgubWF4KHRoaXMubm93KCksIHRoaXMuX3N0YXJ0VGltZSArIGZhZGVJblRpbWUgKyB0aGlzLnNhbXBsZVRpbWUpKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl9vbmVuZGVkVGltZW91dCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gLTE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBjYWxsYmFjayB3aGVuIHRoZSBidWZmZXIgaXMgZW5kZWQuXG5cdFx0ICogIEludm9rZXMgYG9uZW5kZWRgIGFuZCBkaXNwb3NlcyB0aGUgbm9kZS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5fb25lbmRlZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZVN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlU3RvcHBlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIC8vYWxsb3cgYWRkaXRpb25hbCB0aW1lIGZvciB0aGUgZXhwb25lbnRpYWwgY3VydmUgdG8gZnVsbHkgZGVjYXlcblx0ICAgICAgICAgICAgdmFyIGFkZGl0aW9uYWxUYWlsID0gdGhpcy5jdXJ2ZSA9PT0gJ2V4cG9uZW50aWFsJyA/IHRoaXMuZmFkZU91dCAqIDIgOiAwO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlU3RhcnRlZCAmJiB0aGlzLl9zdG9wVGltZSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5zdG9wKHRoaXMuX3N0b3BUaW1lICsgYWRkaXRpb25hbFRhaWwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMub25lbmRlZCh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgbG9vcCBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIHN0YXJ0IGF0IHRoaXMgcG9zaXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb29wU3RhcnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wU3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLmxvb3BTdGFydCA9IHRoaXMudG9TZWNvbmRzKGxvb3BTdGFydCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgZW5kIGF0IHRoaXMgcG9zaXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLmxvb3BFbmQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wRW5kKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wRW5kID0gdGhpcy50b1NlY29uZHMobG9vcEVuZCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXVkaW8gYnVmZmVyIGJlbG9uZ2luZyB0byB0aGUgcGxheWVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VG9uZS5CdWZmZXJ9XG5cdFx0ICogQG5hbWUgYnVmZmVyXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnYnVmZmVyJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlci5zZXQoYnVmZmVyKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXIgc2hvdWxkIGxvb3Agb25jZSBpdCdzIG92ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvb3Bcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdsb29wJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLmxvb3A7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgdGhpcy5jYW5jZWxTdG9wKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlclNvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5vbmVuZGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zb3VyY2Uub25lbmRlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IC0xO1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlID0gbnVsbDtcblx0ICAgICAgICBUb25lLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX29uZW5kZWRUaW1lb3V0KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CdWZmZXJTb3VyY2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Ob2lzZSBpcyBhIG5vaXNlIGdlbmVyYXRvci4gSXQgdXNlcyBsb29wZWQgbm9pc2UgYnVmZmVycyB0byBzYXZlIG9uIHBlcmZvcm1hbmNlLlxuXHRcdCAqICAgICAgICAgIFRvbmUuTm9pc2Ugc3VwcG9ydHMgdGhlIG5vaXNlIHR5cGVzOiBcInBpbmtcIiwgXCJ3aGl0ZVwiLCBhbmQgXCJicm93blwiLiBSZWFkIG1vcmUgYWJvdXRcblx0XHQgKiAgICAgICAgICBjb2xvcnMgb2Ygbm9pc2Ugb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29sb3JzX29mX25vaXNlKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gdHlwZSB0aGUgbm9pc2UgdHlwZSAod2hpdGV8cGlua3xicm93bilcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2luaXRpYWxpemUgdGhlIG5vaXNlIGFuZCBzdGFydFxuXHRcdCAqIHZhciBub2lzZSA9IG5ldyBUb25lLk5vaXNlKFwicGlua1wiKS5zdGFydCgpO1xuXHRcdCAqXG5cdFx0ICogLy9tYWtlIGFuIGF1dG9maWx0ZXIgdG8gc2hhcGUgdGhlIG5vaXNlXG5cdFx0ICogdmFyIGF1dG9GaWx0ZXIgPSBuZXcgVG9uZS5BdXRvRmlsdGVyKHtcblx0XHQgKiBcdFwiZnJlcXVlbmN5XCIgOiBcIjhtXCIsXG5cdFx0ICogXHRcIm1pblwiIDogODAwLFxuXHRcdCAqIFx0XCJtYXhcIiA6IDE1MDAwXG5cdFx0ICogfSkuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdFx0ICpcblx0XHQgKiAvL2Nvbm5lY3QgdGhlIG5vaXNlXG5cdFx0ICogbm9pc2UuY29ubmVjdChhdXRvRmlsdGVyKTtcblx0XHQgKiAvL3N0YXJ0IHRoZSBhdXRvZmlsdGVyIExGT1xuXHRcdCAqIGF1dG9GaWx0ZXIuc3RhcnQoKVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3R5cGUnXSwgVG9uZS5Ob2lzZSk7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb0J1ZmZlclNvdXJjZU5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBidWZmZXJcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb0J1ZmZlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIG5vaXNlLiBBZmZlY3RzXG5cdFx0XHQgKiAgdGhlIFwiZnJlcXVlbmN5XCIgb2YgdGhlIG5vaXNlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5vaXNlLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogJ3doaXRlJyxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBub2lzZS4gQ2FuIGJlIFwid2hpdGVcIiwgXCJicm93blwiLCBvciBcInBpbmtcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Ob2lzZSNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG5vaXNlLnR5cGUgPSBcIndoaXRlXCI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Ob2lzZS5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgIT09IHR5cGUpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0eXBlIGluIF9ub2lzZUJ1ZmZlcnMpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgICAgICAgICAvL2lmIGl0J3MgcGxheWluZywgc3RvcCBhbmQgcmVzdGFydCBpdFxuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3Aobm93KTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQobm93KTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RvbmUuTm9pc2U6IGludmFsaWQgdHlwZTogJyArIHR5cGUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIG5vaXNlLiBBZmZlY3RzXG5cdFx0ICogIHRoZSBcImZyZXF1ZW5jeVwiIG9mIHRoZSBub2lzZS5cblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAc2lnbmFsXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Ob2lzZS5wcm90b3R5cGUsICdwbGF5YmFja1JhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2UpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5wbGF5YmFja1JhdGUudmFsdWUgPSByYXRlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgaW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciBidWZmZXIgPSBfbm9pc2VCdWZmZXJzW3RoaXMuX3R5cGVdO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IG5ldyBUb25lLkJ1ZmZlclNvdXJjZShidWZmZXIpLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UucGxheWJhY2tSYXRlLnZhbHVlID0gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5zdGFydCh0aGlzLnRvU2Vjb25kcyh0aW1lKSwgTWF0aC5yYW5kb20oKSAqIChidWZmZXIuZHVyYXRpb24gLSAwLjAwMSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBpbnRlcm5hbCBzdG9wIG1ldGhvZFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zb3VyY2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLnN0b3AodGhpcy50b1NlY29uZHModGltZSkpO1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXN0YXJ0cyB0aGUgbm9pc2UuXG5cdFx0ICogQHBhcmFtICB7W3R5cGVdfSB0aW1lIFtkZXNjcmlwdGlvbl1cblx0XHQgKiBAcmV0dXJuIHtbdHlwZV19ICAgICAgW2Rlc2NyaXB0aW9uXVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9UT0RPIGNvdWxkIGJlIG9wdGltaXplZCBieSBjYW5jZWxsaW5nIHRoZSBidWZmZXIgc291cmNlICdzdG9wJ1xuXHQgICAgICAgIC8vc3RvcCBhbmQgcmVzdGFydFxuXHQgICAgICAgIHRoaXMuX3N0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zb3VyY2UgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIFRIRSBCVUZGRVJTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vTm9pc2UgYnVmZmVyIHN0YXRzXG5cdCAgICB2YXIgYnVmZmVyTGVuZ3RoID0gNDQxMDAgKiA1O1xuXHQgICAgdmFyIGNoYW5uZWxzID0gMjtcblx0ICAgIC8qKlxuXHRcdCAqXHRUaGUgbm9pc2UgYXJyYXlzLiBHZW5lcmF0ZWQgb24gaW5pdGlhbGl6YXRpb24uXG5cdFx0ICogIGJvcnJvd2VkIGhlYXZpbHkgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vemFjaGFyeWRlbnRvbi9ub2lzZS5qc1xuXHRcdCAqICAoYykgMjAxMyBaYWNoIERlbnRvbiAoTUlUKVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBfbm9pc2VBcnJheXMgPSB7XG5cdCAgICAgICAgJ3BpbmsnOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY2hhbm5lbE51bSA9IDA7IGNoYW5uZWxOdW0gPCBjaGFubmVsczsgY2hhbm5lbE51bSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyTGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlcltjaGFubmVsTnVtXSA9IGNoYW5uZWw7XG5cdCAgICAgICAgICAgICAgICB2YXIgYjAsIGIxLCBiMiwgYjMsIGI0LCBiNSwgYjY7XG5cdCAgICAgICAgICAgICAgICBiMCA9IGIxID0gYjIgPSBiMyA9IGI0ID0gYjUgPSBiNiA9IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHdoaXRlID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxO1xuXHQgICAgICAgICAgICAgICAgICAgIGIwID0gMC45OTg4NiAqIGIwICsgd2hpdGUgKiAwLjA1NTUxNzk7XG5cdCAgICAgICAgICAgICAgICAgICAgYjEgPSAwLjk5MzMyICogYjEgKyB3aGl0ZSAqIDAuMDc1MDc1OTtcblx0ICAgICAgICAgICAgICAgICAgICBiMiA9IDAuOTY5ICogYjIgKyB3aGl0ZSAqIDAuMTUzODUyO1xuXHQgICAgICAgICAgICAgICAgICAgIGIzID0gMC44NjY1ICogYjMgKyB3aGl0ZSAqIDAuMzEwNDg1Njtcblx0ICAgICAgICAgICAgICAgICAgICBiNCA9IDAuNTUgKiBiNCArIHdoaXRlICogMC41MzI5NTIyO1xuXHQgICAgICAgICAgICAgICAgICAgIGI1ID0gLTAuNzYxNiAqIGI1IC0gd2hpdGUgKiAwLjAxNjg5ODtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2ldID0gYjAgKyBiMSArIGIyICsgYjMgKyBiNCArIGI1ICsgYjYgKyB3aGl0ZSAqIDAuNTM2Mjtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2ldICo9IDAuMTE7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gKHJvdWdobHkpIGNvbXBlbnNhdGUgZm9yIGdhaW5cblx0ICAgICAgICAgICAgICAgICAgICBiNiA9IHdoaXRlICogMC4xMTU5MjY7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcblx0ICAgICAgICB9KCksXG5cdCAgICAgICAgJ2Jyb3duJzogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWxOdW0gPSAwOyBjaGFubmVsTnVtIDwgY2hhbm5lbHM7IGNoYW5uZWxOdW0rKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJbY2hhbm5lbE51bV0gPSBjaGFubmVsO1xuXHQgICAgICAgICAgICAgICAgdmFyIGxhc3RPdXQgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB3aGl0ZSA9IE1hdGgucmFuZG9tKCkgKiAyIC0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2ldID0gKGxhc3RPdXQgKyAwLjAyICogd2hpdGUpIC8gMS4wMjtcblx0ICAgICAgICAgICAgICAgICAgICBsYXN0T3V0ID0gY2hhbm5lbFtpXTtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2ldICo9IDMuNTsgICAgLy8gKHJvdWdobHkpIGNvbXBlbnNhdGUgZm9yIGdhaW5cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuXHQgICAgICAgIH0oKSxcblx0ICAgICAgICAnd2hpdGUnOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY2hhbm5lbE51bSA9IDA7IGNoYW5uZWxOdW0gPCBjaGFubmVsczsgY2hhbm5lbE51bSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyTGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlcltjaGFubmVsTnVtXSA9IGNoYW5uZWw7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSA9IE1hdGgucmFuZG9tKCkgKiAyIC0gMTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuXHQgICAgICAgIH0oKVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqXHRzdGF0aWMgbm9pc2UgYnVmZmVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHQgKi9cblx0ICAgIHZhciBfbm9pc2VCdWZmZXJzID0ge307XG5cdCAgICAvL2NyZWF0ZSB0aGUgVG9uZS5CdWZmZXJzXG5cdCAgICBmdW5jdGlvbiBjcmVhdGVCdWZmZXJzKCkge1xuXHQgICAgICAgIGZvciAodmFyIHR5cGUgaW4gX25vaXNlQXJyYXlzKSB7XG5cdCAgICAgICAgICAgIF9ub2lzZUJ1ZmZlcnNbdHlwZV0gPSBuZXcgVG9uZS5CdWZmZXIoKS5mcm9tQXJyYXkoX25vaXNlQXJyYXlzW3R5cGVdKTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdCAgICAvL2NyZWF0ZSB0aGUgbm9pc2UgYnVmZmVyc1xuXHQgICAgVG9uZS5nZXRDb250ZXh0KGNyZWF0ZUJ1ZmZlcnMpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgY3JlYXRlQnVmZmVycyk7XG5cdCAgICByZXR1cm4gVG9uZS5Ob2lzZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFNpbXBsZSBjb252b2x1dGlvbiBjcmVhdGVkIHdpdGggZGVjYXlpbmcgbm9pc2UuXG5cdFx0ICogIFx0XHRHZW5lcmF0ZXMgYW4gSW1wdWxzZSBSZXNwb25zZSBCdWZmZXJcblx0XHQgKiBcdFx0XHR3aXRoIFRvbmUuT2ZmbGluZSB0aGVuIGZlZWRzIHRoZSBJUiBpbnRvIENvbnZvbHZlck5vZGUuXG5cdFx0ICogXHRcdFx0Tm90ZTogdGhlIFJldmVyYiB3aWxsIG5vdCBtYWtlIGFueSBzb3VuZCB1bnRpbCBbZ2VuZXJhdGVdKCNnZW5lcmF0ZSlcblx0XHQgKiBcdFx0XHRoYXMgYmVlbiBpbnZva2VkIGFuZCByZXNvbHZlZC5cblx0XHQgKlxuXHRcdCAqIFx0XHRcdEluc3BpcmF0aW9uIGZyb20gW1JldmVyYkdlbl0oaHR0cHM6Ly9naXRodWIuY29tL2FkZWxlc3BpbmFzc2UvcmV2ZXJiR2VuKS5cblx0XHQgKiBcdFx0XHRDb3B5cmlnaHQgKGMpIDIwMTQgQWxhbiBkZUxlc3BpbmFzc2UgQXBhY2hlIDIuMCBMaWNlbnNlLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkNvbnZvbHZlcn1cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gZGVjYXkgVGhlIGFtb3VudCBvZiB0aW1lIGl0IHdpbGwgcmV2ZXJiZXJhdGUgZm9yLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydkZWNheSddLCBUb25lLlJldmVyYik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBDb252b2x2ZXIgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtDb252b2x2ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ29udm9sdmVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZHVyYXRpb24gb2YgdGhlIHJldmVyYlxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlY2F5ID0gb3B0aW9ucy5kZWNheTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbW91bnQgb2YgdGltZSBiZWZvcmUgdGhlIHJldmVyYiBpcyBmdWxseVxuXHRcdFx0ICogcmFtcGVkIGluLlxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnByZURlbGF5ID0gb3B0aW9ucy5wcmVEZWxheTtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fY29udm9sdmVyKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlJldmVyYiwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHRzXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKiBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVjYXknOiAxLjUsXG5cdCAgICAgICAgJ3ByZURlbGF5JzogMC4wMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdlbmVyYXRlIHRoZSBJbXB1bHNlIFJlc3BvbnNlLiBSZXR1cm5zIGEgcHJvbWlzZSB3aGlsZSB0aGUgSVIgaXMgYmVpbmdcblx0XHQgKiBnZW5lcmF0ZWQuXG5cdFx0ICogQHJldHVybiB7UHJvbWlzZTxUb25lLlJldmVyYj59IFByb21pc2Ugd2hpY2ggcmV0dXJucyB0aGlzIG9iamVjdC5cblx0XHQgKi9cblx0ICAgIFRvbmUuUmV2ZXJiLnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5PZmZsaW5lKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy9jcmVhdGUgYSBub2lzZSBidXJzdCB3aGljaCBkZWNheXMgb3ZlciB0aGUgZHVyYXRpb25cblx0ICAgICAgICAgICAgdmFyIG5vaXNlTCA9IG5ldyBUb25lLk5vaXNlKCk7XG5cdCAgICAgICAgICAgIHZhciBub2lzZVIgPSBuZXcgVG9uZS5Ob2lzZSgpO1xuXHQgICAgICAgICAgICB2YXIgbWVyZ2UgPSBuZXcgVG9uZS5NZXJnZSgpO1xuXHQgICAgICAgICAgICBub2lzZUwuY29ubmVjdChtZXJnZS5sZWZ0KTtcblx0ICAgICAgICAgICAgbm9pc2VSLmNvbm5lY3QobWVyZ2UucmlnaHQpO1xuXHQgICAgICAgICAgICB2YXIgZ2Fpbk5vZGUgPSBuZXcgVG9uZS5HYWluKCkudG9NYXN0ZXIoKTtcblx0ICAgICAgICAgICAgbWVyZ2UuY29ubmVjdChnYWluTm9kZSk7XG5cdCAgICAgICAgICAgIG5vaXNlTC5zdGFydCgwKTtcblx0ICAgICAgICAgICAgbm9pc2VSLnN0YXJ0KDApO1xuXHQgICAgICAgICAgICAvL3Nob3J0IGZhZGUgaW5cblx0ICAgICAgICAgICAgZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCAwKTtcblx0ICAgICAgICAgICAgZ2Fpbk5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgxLCB0aGlzLnByZURlbGF5KTtcblx0ICAgICAgICAgICAgLy9kZWNheVxuXHQgICAgICAgICAgICBnYWluTm9kZS5nYWluLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSgwLCB0aGlzLnByZURlbGF5LCB0aGlzLmRlY2F5IC0gdGhpcy5wcmVEZWxheSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpLCB0aGlzLmRlY2F5KS50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY29udm9sdmVyLmJ1ZmZlciA9IGJ1ZmZlci5nZXQoKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlJldmVyYn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUmV2ZXJiLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlJldmVyYjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEJhc2UgY2xhc3MgZm9yIHN0ZXJlbyBmZWVkYmFjayBlZmZlY3RzIHdoZXJlIHRoZSBlZmZlY3RSZXR1cm5cblx0XHQgKiAgICAgICAgIGlzIGZlZCBiYWNrIGludG8gdGhlIHNhbWUgY2hhbm5lbC5cblx0XHQgKlxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9GZWVkYmFja0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZlZWRiYWNrJ10sIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29udHJvbHMgdGhlIGFtb3VudCBvZiBmZWVkYmFja1xuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZmVlZGJhY2ssIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxlZnQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSByaWdodCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1IgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5MLmNoYWluKHRoaXMuX2ZlZWRiYWNrTCwgdGhpcy5lZmZlY3RTZW5kTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SLmNoYWluKHRoaXMuX2ZlZWRiYWNrUiwgdGhpcy5lZmZlY3RTZW5kUik7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjay5mYW4odGhpcy5fZmVlZGJhY2tMLmdhaW4sIHRoaXMuX2ZlZWRiYWNrUi5nYWluKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3QsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9GZWVkYmFja0VmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9GZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZmVlZGJhY2snXSk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0wgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdGVyZW9GZWVkYmFja0VmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEFwcGxpZXMgYSB3aWR0aCBmYWN0b3IgdG8gdGhlIG1pZC9zaWRlIHNlcGVyYXRpb24uXG5cdFx0ICogICAgICAgICAwIGlzIGFsbCBtaWQgYW5kIDEgaXMgYWxsIHNpZGUuXG5cdFx0ICogICAgICAgICBBbGdvcml0aG0gZm91bmQgaW4gW2t2cmF1ZGlvIGZvcnVtc10oaHR0cDovL3d3dy5rdnJhdWRpby5jb20vZm9ydW0vdmlld3RvcGljLnBocD90PTIxMjU4NykuXG5cdFx0ICogICAgICAgICA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgPGNvZGU+XG5cdFx0ICogICAgICAgICBNaWQgKj0gMiooMS13aWR0aCk8YnI+XG5cdFx0ICogICAgICAgICBTaWRlICo9IDIqd2lkdGhcblx0XHQgKiAgICAgICAgIDwvY29kZT5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5NaWRTaWRlRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFt3aWR0aF0gVGhlIHN0ZXJlbyB3aWR0aC4gQSB3aWR0aCBvZiAwIGlzIG1vbm8gYW5kIDEgaXMgc3RlcmVvLiAwLjUgaXMgbm8gY2hhbmdlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9XaWRlbmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnd2lkdGgnXSwgVG9uZS5TdGVyZW9XaWRlbmVyKTtcblx0ICAgICAgICBUb25lLk1pZFNpZGVFZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgd2lkdGggY29udHJvbC4gMCA9IDEwMCUgbWlkLiAxID0gMTAwJSBzaWRlLiAwLjUgPSBubyBjaGFuZ2UuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy53aWR0aCwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3dpZHRoJ10pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVHdvIHRpbWVzIHRoZSAoMS13aWR0aCkgZm9yIHRoZSBtaWQgY2hhbm5lbFxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZCA9IG5ldyBUb25lLk11bHRpcGx5KDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVHdvIHRpbWVzIHRoZSB3aWR0aCBmb3IgdGhlIHNpZGUgY2hhbm5lbFxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aFNpZGUgPSBuZXcgVG9uZS5NdWx0aXBseSgyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBNaWQgbXVsdGlwbGllclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRNdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoTWlkLmNvbm5lY3QodGhpcy5fbWlkTXVsdCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5taWRTZW5kLmNoYWluKHRoaXMuX21pZE11bHQsIHRoaXMubWlkUmV0dXJuKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIDEgLSB3aWR0aFxuXHRcdFx0ICogQHR5cGUge1RvbmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmVNaW51c1dpZHRoID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICB0aGlzLl9vbmVNaW51c1dpZHRoLmNvbm5lY3QodGhpcy5fdHdvVGltZXNXaWR0aE1pZCk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmdldENvbnN0YW50KDEpLmNvbm5lY3QodGhpcy5fb25lTWludXNXaWR0aCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5jb25uZWN0KHRoaXMuX29uZU1pbnVzV2lkdGgsIDAsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNpZGUgbXVsdGlwbGllclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaWRlTXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KCk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5jb25uZWN0KHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlKTtcblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoU2lkZS5jb25uZWN0KHRoaXMuX3NpZGVNdWx0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLnNpZGVTZW5kLmNoYWluKHRoaXMuX3NpZGVNdWx0LCB0aGlzLnNpZGVSZXR1cm4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3RlcmVvV2lkZW5lciwgVG9uZS5NaWRTaWRlRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9XaWRlbmVyLmRlZmF1bHRzID0geyAnd2lkdGgnOiAwLjUgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3RlcmVvV2lkZW5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9XaWRlbmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTWlkU2lkZUVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnd2lkdGgnXSk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy53aWR0aCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkTXVsdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkTXVsdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2lkZU11bHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NpZGVNdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoTWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoTWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoU2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aFNpZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX29uZU1pbnVzV2lkdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX29uZU1pbnVzV2lkdGggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN0ZXJlb1dpZGVuZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyZW1vbG8gbW9kdWxhdGVzIHRoZSBhbXBsaXR1ZGUgb2YgYW4gaW5jb21pbmcgc2lnbmFsIHVzaW5nIGEgVG9uZS5MRk8uXG5cdFx0ICogICAgICAgICBUaGUgdHlwZSwgZnJlcXVlbmN5LCBhbmQgZGVwdGggb2YgdGhlIExGTyBpcyBjb250cm9sbGFibGUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtmcmVxdWVuY3ldIFRoZSByYXRlIG9mIHRoZSBlZmZlY3QuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtkZXB0aF0gVGhlIGRlcHRoIG9mIHRoZSBlZmZlY3QuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jcmVhdGUgYSB0cmVtb2xvIGFuZCBzdGFydCBpdCdzIExGT1xuXHRcdCAqIHZhciB0cmVtb2xvID0gbmV3IFRvbmUuVHJlbW9sbyg5LCAwLjc1KS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICogLy9yb3V0ZSBhbiBvc2NpbGxhdG9yIHRocm91Z2ggdGhlIHRyZW1vbG8gYW5kIHN0YXJ0IGl0XG5cdFx0ICogdmFyIG9zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkuY29ubmVjdCh0cmVtb2xvKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdLCBUb25lLlRyZW1vbG8pO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRyZW1lbG8gTEZPIGluIHRoZSBsZWZ0IGNoYW5uZWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9MID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ3BoYXNlJzogb3B0aW9ucy5zcHJlYWQsXG5cdCAgICAgICAgICAgICdtaW4nOiAxLFxuXHQgICAgICAgICAgICAnbWF4JzogMFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0cmVtZWxvIExGTyBpbiB0aGUgbGVmdCBjaGFubmVsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdwaGFzZSc6IG9wdGlvbnMuc3ByZWFkLFxuXHQgICAgICAgICAgICAnbWluJzogMSxcblx0ICAgICAgICAgICAgJ21heCc6IDBcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVyZSB0aGUgZ2FpbiBpcyBtdWx0aXBsaWVkXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVkZUwgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlcmUgdGhlIGdhaW4gaXMgbXVsdGlwbGllZFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVSID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIHRyZW1vbG8uXG5cdFx0XHQgKiAgQHR5cGUgIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXB0aCBvZiB0aGUgZWZmZWN0LiBBIGRlcHRoIG9mIDAsIGhhcyBubyBlZmZlY3Rcblx0XHRcdCAqICBvbiB0aGUgYW1wbGl0dWRlLCBhbmQgYSBkZXB0aCBvZiAxIG1ha2VzIHRoZSBhbXBsaXR1ZGVcblx0XHRcdCAqICBtb2R1bGF0ZSBmdWxseSBiZXR3ZWVuIDAgYW5kIDEuXG5cdFx0XHQgKiAgQHR5cGUgIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlcHRoID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGVwdGgsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY2hhaW4odGhpcy5fYW1wbGl0dWRlTCwgdGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNoYWluKHRoaXMuX2FtcGxpdHVkZVIsIHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5jb25uZWN0KHRoaXMuX2FtcGxpdHVkZUwuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5jb25uZWN0KHRoaXMuX2FtcGxpdHVkZVIuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZmFuKHRoaXMuX2xmb0wuZnJlcXVlbmN5LCB0aGlzLl9sZm9SLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXB0aC5mYW4odGhpcy5fbGZvUi5hbXBsaXR1ZGUsIHRoaXMuX2xmb0wuYW1wbGl0dWRlKTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5zcHJlYWQgPSBvcHRpb25zLnNwcmVhZDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyZW1vbG8sIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxMCxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZGVwdGgnOiAwLjUsXG5cdCAgICAgICAgJ3NwcmVhZCc6IDE4MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0YXJ0IHRoZSB0cmVtb2xvLlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSB0cmVtb2xvIGJlZ2lucy5cblx0XHQgKiBAcmV0dXJucyB7VG9uZS5UcmVtb2xvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm9MLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCB0aGUgdHJlbW9sby5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgdHJlbW9sbyBzdG9wcy5cblx0XHQgKiBAcmV0dXJucyB7VG9uZS5UcmVtb2xvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgZWZmZWN0IHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbZGVsYXk9MF0gRGVsYXkgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIGVmZmVjdCBhZnRlciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zcG9ydCBoYXMgc3RhcnRlZC5cblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoZGVsYXkpIHtcblx0ICAgICAgICB0aGlzLl9sZm9MLnN5bmMoZGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3luYyhkZWxheSk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQuc3luY1NpZ25hbCh0aGlzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVW5zeW5jIHRoZSBmaWx0ZXIgZnJvbSB0aGUgdHJhbnNwb3J0XG5cdFx0ICogQHJldHVybnMge1RvbmUuVHJlbW9sb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC51bnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnVuc3luYygpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LnVuc3luY1NpZ25hbCh0aGlzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIFRyZW1vbG8ncyBvc2NpbGxhdG9yIHR5cGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVHJlbW9sbyNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyZW1vbG8ucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmb0wudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEFtb3VudCBvZiBzdGVyZW8gc3ByZWFkLiBXaGVuIHNldCB0byAwLCBib3RoIExGTydzIHdpbGwgYmUgcGFubmVkIGNlbnRyYWxseS5cblx0XHQgKiBXaGVuIHNldCB0byAxODAsIExGTydzIHdpbGwgYmUgcGFubmVkIGhhcmQgbGVmdCBhbmQgcmlnaHQgcmVzcGVjdGl2ZWx5LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlRyZW1vbG8jXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmVtb2xvLnByb3RvdHlwZSwgJ3NwcmVhZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmb1IucGhhc2UgLSB0aGlzLl9sZm9MLnBoYXNlOyAgICAvLzE4MFxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ByZWFkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wucGhhc2UgPSA5MCAtIHNwcmVhZCAvIDI7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IucGhhc2UgPSBzcHJlYWQgLyAyICsgOTA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJlbW9sb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVkZUwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVkZUwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVkZVIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVkZVIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmVtb2xvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBWaWJyYXRvIGVmZmVjdCBjb21wb3NlZCBvZiBhIFRvbmUuRGVsYXkgYW5kIGEgVG9uZS5MRk8uIFRoZSBMRk9cblx0XHQgKiAgICAgICAgIG1vZHVsYXRlcyB0aGUgZGVsYXlUaW1lIG9mIHRoZSBkZWxheSwgY2F1c2luZyB0aGUgcGl0Y2ggdG8gcmlzZVxuXHRcdCAqICAgICAgICAgYW5kIGZhbGwuIFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgdmlicmF0by5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gZGVwdGggVGhlIGFtb3VudCB0aGUgcGl0Y2ggaXMgbW9kdWxhdGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5WaWJyYXRvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdLCBUb25lLlZpYnJhdG8pO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlbGF5IG5vZGUgdXNlZCBmb3IgdGhlIHZpYnJhdG8gZWZmZWN0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBMRk8gdXNlZCB0byBjb250cm9sIHRoZSB2aWJyYXRvXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm8gPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAndHlwZSc6IG9wdGlvbnMudHlwZSxcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiBvcHRpb25zLm1heERlbGF5LFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdwaGFzZSc6IC05MCAgICAvL29mZnNlIHRoZSBwaGFzZSBzbyB0aGUgcmVzdGluZyBwb3NpdGlvbiBpcyBpbiB0aGUgY2VudGVyXG5cdCAgICAgICAgfSkuc3RhcnQoKS5jb25uZWN0KHRoaXMuX2RlbGF5Tm9kZS5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIHZpYnJhdG9cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVwdGggb2YgdGhlIHZpYnJhdG8uIFxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fbGZvLmFtcGxpdHVkZTtcblx0ICAgICAgICB0aGlzLmRlcHRoLnZhbHVlID0gb3B0aW9ucy5kZXB0aDtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNoYWluKHRoaXMuX2RlbGF5Tm9kZSwgdGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVmlicmF0bywgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlZpYnJhdG8uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21heERlbGF5JzogMC4wMDUsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDUsXG5cdCAgICAgICAgJ2RlcHRoJzogMC4xLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVHlwZSBvZiBvc2NpbGxhdG9yIGF0dGFjaGVkIHRvIHRoZSBWaWJyYXRvLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlZpYnJhdG8jXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5WaWJyYXRvLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5WaWJyYXRvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlZpYnJhdG8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVmlicmF0bztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkV2ZW50IGFic3RyYWN0cyBhd2F5IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlIGFuZCBwcm92aWRlcyBhIHNjaGVkdWxhYmxlXG5cdFx0ICogICAgICAgICAgY2FsbGJhY2sgZm9yIGEgc2luZ2xlIG9yIHJlcGVhdGFibGUgZXZlbnRzIGFsb25nIHRoZSB0aW1lbGluZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBhdCB0aGUgdGltZS5cblx0XHQgKiAgQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgb3IgdmFsdWVzIHdoaWNoIHNob3VsZCBiZSBwYXNzZWQgdG9cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gb24gaW52b2NhdGlvbi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgY2hvcmQgPSBuZXcgVG9uZS5FdmVudChmdW5jdGlvbih0aW1lLCBjaG9yZCl7XG5cdFx0ICogXHQvL3RoZSBjaG9yZCBhcyB3ZWxsIGFzIHRoZSBleGFjdCB0aW1lIG9mIHRoZSBldmVudFxuXHRcdCAqIFx0Ly9hcmUgcGFzc2VkIGluIGFzIGFyZ3VtZW50cyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cblx0XHQgKiB9LCBbXCJENFwiLCBcIkU0XCIsIFwiRjRcIl0pO1xuXHRcdCAqIC8vc3RhcnQgdGhlIGNob3JkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRyYW5zcG9ydCB0aW1lbGluZVxuXHRcdCAqIGNob3JkLnN0YXJ0KCk7XG5cdFx0ICogLy9sb29wIGl0IGV2ZXJ5IG1lYXN1cmUgZm9yIDggbWVhc3VyZXNcblx0XHQgKiBjaG9yZC5sb29wID0gODtcblx0XHQgKiBjaG9yZC5sb29wRW5kID0gXCIxbVwiO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICd2YWx1ZSdcblx0ICAgICAgICBdLCBUb25lLkV2ZW50KTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTG9vcCB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbnxQb3NpdGl2ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcCA9IG9wdGlvbnMubG9vcDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlLlxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZVxuXHRcdFx0ICogIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHRcdFx0ICogIEB0eXBlICB7Kn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlbiB0aGUgbm90ZSBpcyBzY2hlZHVsZWQgdG8gc3RhcnQuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9UaWNrcyhvcHRpb25zLmxvb3BTdGFydCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlbiB0aGUgbm90ZSBpcyBzY2hlZHVsZWQgdG8gc3RhcnQuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvVGlja3Mob3B0aW9ucy5sb29wRW5kKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUcmFja3MgdGhlIHNjaGVkdWxlZCBldmVudHNcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZVN0YXRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG5ldyBUb25lLlRpbWVsaW5lU3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlIG5vdGUuIEEgc3BlZWQgb2YgMVxuXHRcdFx0ICogIGlzIG5vIGNoYW5nZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IDE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBkZWxheSB0aW1lIGZyb20gd2hlbiB0aGUgZXZlbnQgaXMgc2NoZWR1bGVkIHRvIHN0YXJ0XG5cdFx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGFydE9mZnNldCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcHJpdmF0ZSBob2xkZXIgb2YgcHJvYmFiaWxpdHkgdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Byb2JhYmlsaXR5ID0gb3B0aW9ucy5wcm9iYWJpbGl0eTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYW1vdW50IG9mIHZhcmlhdGlvbiBmcm9tIHRoZVxuXHRcdFx0ICogIGdpdmVuIHRpbWUuXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW58VGltZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faHVtYW5pemUgPSBvcHRpb25zLmh1bWFuaXplO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIG11dGUgaXMgdHJ1ZSwgdGhlIGNhbGxiYWNrIHdvbid0IGJlXG5cdFx0XHQgKiAgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgICAgICAvL3NldCB0aGUgaW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRXZlbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdjYWxsYmFjayc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wRW5kJzogJzFtJyxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAndmFsdWUnOiBudWxsLFxuXHQgICAgICAgICdwcm9iYWJpbGl0eSc6IDEsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZSxcblx0ICAgICAgICAnaHVtYW5pemUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXNjaGVkdWxlIGFsbCBvZiB0aGUgZXZlbnRzIGFsb25nIHRoZSB0aW1lbGluZVxuXHRcdCAqICB3aXRoIHRoZSB1cGRhdGVkIHZhbHVlcy5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBhZnRlciBPbmx5IHJlc2NoZWR1bGVzIGV2ZW50cyBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5fcmVzY2hlZHVsZUV2ZW50cyA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIC8vaWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHNjaGVkdWxlcyBhbGwgb2YgdGhlIGV2ZW50c1xuXHQgICAgICAgIGFmdGVyID0gVG9uZS5kZWZhdWx0QXJnKGFmdGVyLCAtMSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEZyb20oYWZ0ZXIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICB2YXIgZHVyYXRpb247XG5cdCAgICAgICAgICAgIGlmIChldmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoZXZlbnQuaWQpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQuY2xlYXIoZXZlbnQuaWQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdmFyIHN0YXJ0VGljayA9IGV2ZW50LnRpbWUgKyBNYXRoLnJvdW5kKHRoaXMuc3RhcnRPZmZzZXQgLyB0aGlzLl9wbGF5YmFja1JhdGUpO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IEluZmluaXR5O1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKHRoaXMuX2xvb3ApKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gdGhpcy5fbG9vcCAqIHRoaXMuX2dldExvb3BEdXJhdGlvbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0QWZ0ZXIoc3RhcnRUaWNrKTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEV2ZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gTWF0aC5taW4oZHVyYXRpb24sIG5leHRFdmVudC50aW1lIC0gc3RhcnRUaWNrKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKGR1cmF0aW9uICE9PSBJbmZpbml0eSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvL3NjaGVkdWxlIGEgc3RvcCBzaW5jZSBpdCdzIGZpbml0ZSBkdXJhdGlvblxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHN0YXJ0VGljayArIGR1cmF0aW9uICsgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gVG9uZS5UaWNrcyhkdXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBpbnRlcnZhbCA9IFRvbmUuVGlja3ModGhpcy5fZ2V0TG9vcER1cmF0aW9uKCkpO1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50LmlkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQodGhpcy5fdGljay5iaW5kKHRoaXMpLCBpbnRlcnZhbCwgVG9uZS5UaWNrcyhzdGFydFRpY2spLCBkdXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50LmlkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUodGhpcy5fdGljay5iaW5kKHRoaXMpLCBUb25lLlRpY2tzKHN0YXJ0VGljaykpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIG5vdGUsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC50aWNrcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN0YXJ0IGZyb20gdGhlIHNjaGVkdWxlZCBzdGFydCB0aW1lXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEBuYW1lIHN0YXJ0T2Zmc2V0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdzdGFydE9mZnNldCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0T2Zmc2V0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0T2Zmc2V0ID0gb2Zmc2V0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgbm90ZXMgYmVpbmcgdHJpZ2dlcmVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9iYWJpbGl0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAncHJvYmFiaWxpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9iYWJpbGl0eTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2IpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcHJvYmFiaWxpdHkgPSBwcm9iO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHNldCB0byB0cnVlLCB3aWxsIGFwcGx5IHNtYWxsIHJhbmRvbSB2YXJpYXRpb25cblx0XHQgKiAgdG8gdGhlIGNhbGxiYWNrIHRpbWUuIElmIHRoZSB2YWx1ZSBpcyBnaXZlbiBhcyBhIHRpbWUsIGl0IHdpbGwgcmFuZG9taXplXG5cdFx0ICogIGJ5IHRoYXQgYW1vdW50LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGV2ZW50Lmh1bWFuaXplID0gdHJ1ZTtcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58VGltZX1cblx0XHQgKiAgQG5hbWUgaHVtYW5pemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ2h1bWFuaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faHVtYW5pemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YXJpYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5faHVtYW5pemUgPSB2YXJpYXRpb247XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICB0aW1lICBXaGVuIHRoZSBub3RlIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RvcHBlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5hZGQoe1xuXHQgICAgICAgICAgICAgICAgJ3N0YXRlJzogVG9uZS5TdGF0ZS5TdGFydGVkLFxuXHQgICAgICAgICAgICAgICAgJ3RpbWUnOiB0aW1lLFxuXHQgICAgICAgICAgICAgICAgJ2lkJzogdW5kZWZpbmVkXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgRXZlbnQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICB0aW1lICBXaGVuIHRoZSBub3RlIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXRCZWZvcmUodGltZSk7XG5cdCAgICAgICAgICAgIHZhciByZXNjaGVkdWxUaW1lID0gdGltZTtcblx0ICAgICAgICAgICAgaWYgKHByZXZpb3VzRXZlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHJlc2NoZWR1bFRpbWUgPSBwcmV2aW91c0V2ZW50LnRpbWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cyhyZXNjaGVkdWxUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBhbGwgc2NoZWR1bGVkIGV2ZW50cyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIFt0aW1lPTBdICBUaGUgdGltZSBhZnRlciB3aGljaCBldmVudHMgd2lsbCBiZSBjYW5jZWwuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5kZWZhdWx0QXJnKHRpbWUsIC1JbmZpbml0eSk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoRnJvbSh0aW1lLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQuY2xlYXIoZXZlbnQuaWQpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZXIuIEFsc29cblx0XHQgKiAgY2hlY2tzIGlmIHRoZSBFdmVudCBpcyBkb25lIHBsYXlpbmdcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgb2YgdGhlIGV2ZW50IGluIHNlY29uZHNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdGlja3MgPSBUb25lLlRyYW5zcG9ydC5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAoIXRoaXMubXV0ZSAmJiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aWNrcykgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5wcm9iYWJpbGl0eSA8IDEgJiYgTWF0aC5yYW5kb20oKSA+IHRoaXMucHJvYmFiaWxpdHkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAodGhpcy5odW1hbml6ZSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHZhcmlhdGlvbiA9IDAuMDI7XG5cdCAgICAgICAgICAgICAgICBpZiAoIVRvbmUuaXNCb29sZWFuKHRoaXMuaHVtYW5pemUpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uID0gdGhpcy50b1NlY29uZHModGhpcy5odW1hbml6ZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB0aW1lICs9IChNYXRoLnJhbmRvbSgpICogMiAtIDEpICogdmFyaWF0aW9uO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgdGhpcy52YWx1ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGR1cmF0aW9uIG9mIHRoZSBsb29wLlxuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5fZ2V0TG9vcER1cmF0aW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKCh0aGlzLl9sb29wRW5kIC0gdGhpcy5fbG9vcFN0YXJ0KSAvIHRoaXMuX3BsYXliYWNrUmF0ZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHRoZSBub3RlIHNob3VsZCBsb29wIG9yIG5vdFxuXHRcdCAqICBiZXR3ZWVuIFRvbmUuRXZlbnQubG9vcFN0YXJ0IGFuZFxuXHRcdCAqICBUb25lLkV2ZW50Lmxvb3BFbmQuIEFuIGludGVnZXJcblx0XHQgKiAgdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhlIG51bWJlciBvZlxuXHRcdCAqICBsb29wcyB0aGUgRXZlbnQgZG9lcyBhZnRlciBpdCBzdGFydHMuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgbG9vcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3A7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBub3RlLiBEZWZhdWx0cyB0byAxLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBub3RlLmxvb3AgPSB0cnVlO1xuXHRcdCAqIC8vcmVwZWF0IHRoZSBub3RlIHR3aWNlIGFzIGZhc3Rcblx0XHQgKiBub3RlLnBsYXliYWNrUmF0ZSA9IDI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdwbGF5YmFja1JhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbG9vcEVuZCBwb2ludCBpcyB0aGUgdGltZSB0aGUgZXZlbnQgd2lsbCBsb29wXG5cdFx0ICogIGlmIFRvbmUuRXZlbnQubG9vcCBpcyB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BFbmQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKGxvb3BFbmQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgd2hlbiB0aGUgbG9vcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BTdGFydCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wU3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKGxvb3BTdGFydCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCBwcm9ncmVzcyBvZiB0aGUgbG9vcCBpbnRlcnZhbC5cblx0XHQgKiAgUmV0dXJucyAwIGlmIHRoZSBldmVudCBpcyBub3Qgc3RhcnRlZCB5ZXQgb3Jcblx0XHQgKiAgaXQgaXMgbm90IHNldCB0byBsb29wLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9ncmVzc1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3Byb2dyZXNzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHRpY2tzID0gVG9uZS5UcmFuc3BvcnQudGlja3M7XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFzdEV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KHRpY2tzKTtcblx0ICAgICAgICAgICAgICAgIGlmIChsYXN0RXZlbnQgIT09IG51bGwgJiYgbGFzdEV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbG9vcER1cmF0aW9uID0gdGhpcy5fZ2V0TG9vcER1cmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHByb2dyZXNzID0gKHRpY2tzIC0gbGFzdEV2ZW50LnRpbWUpICUgbG9vcER1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9ncmVzcyAvIGxvb3BEdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNhbmNlbCgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRXZlbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Mb29wIGNyZWF0ZXMgYSBsb29wZWQgY2FsbGJhY2sgYXQgdGhlIFxuXHRcdCAqICAgICAgICAgc3BlY2lmaWVkIGludGVydmFsLiBUaGUgY2FsbGJhY2sgY2FuIGJlIFxuXHRcdCAqICAgICAgICAgc3RhcnRlZCwgc3RvcHBlZCBhbmQgc2NoZWR1bGVkIGFsb25nXG5cdFx0ICogICAgICAgICB0aGUgVHJhbnNwb3J0J3MgdGltZWxpbmUuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBsb29wID0gbmV3IFRvbmUuTG9vcChmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdC8vdHJpZ2dlcmVkIGV2ZXJ5IGVpZ2h0aCBub3RlLiBcblx0XHQgKiBcdGNvbnNvbGUubG9nKHRpbWUpO1xuXHRcdCAqIH0sIFwiOG5cIikuc3RhcnQoMCk7XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoKTtcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gaW50ZXJ2YWwgVGhlIHRpbWUgYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxiYWNrIGNhbGxzLiBcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdpbnRlcnZhbCdcblx0ICAgICAgICBdLCBUb25lLkxvb3ApO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZXZlbnQgd2hpY2ggcHJvZHVjZXMgdGhlIGNhbGxiYWNrc1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnQgPSBuZXcgVG9uZS5FdmVudCh7XG5cdCAgICAgICAgICAgICdjYWxsYmFjayc6IHRoaXMuX3RpY2suYmluZCh0aGlzKSxcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0cnVlLFxuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IG9wdGlvbnMuaW50ZXJ2YWwsXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiBvcHRpb25zLnBsYXliYWNrUmF0ZSxcblx0ICAgICAgICAgICAgJ3Byb2JhYmlsaXR5Jzogb3B0aW9ucy5wcm9iYWJpbGl0eVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCB0aGUgbmV4dCBldmVudCBpbiB0aGUgcGF0dGVyblxuXHRcdFx0ICogIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpdGVyYXRpb25zXG5cdCAgICAgICAgdGhpcy5pdGVyYXRpb25zID0gb3B0aW9ucy5pdGVyYXRpb25zO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTG9vcCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnaW50ZXJ2YWwnOiAnNG4nLFxuXHQgICAgICAgICdjYWxsYmFjayc6IFRvbmUubm9PcCxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAnaXRlcmF0aW9ucyc6IEluZmluaXR5LFxuXHQgICAgICAgICdwcm9iYWJpbGl0eSc6IHRydWUsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgbG9vcCBhdCB0aGUgc3BlY2lmaWVkIHRpbWUgYWxvbmcgdGhlIFRyYW5zcG9ydCdzXG5cdFx0ICogIHRpbWVsaW5lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9uPX0gIHRpbWUgIFdoZW4gdG8gc3RhcnQgdGhlIExvb3AuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkxvb3B9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudC5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgbG9vcCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbj19ICB0aW1lICBXaGVuIHRvIHN0b3AgdGhlIEFycGVnZ2lvXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkxvb3B9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBhbGwgc2NoZWR1bGVkIGV2ZW50cyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIFt0aW1lPTBdICBUaGUgdGltZSBhZnRlciB3aGljaCBldmVudHMgd2lsbCBiZSBjYW5jZWwuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkxvb3B9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgbm90ZXMgc2hvdWxkIGJlIGNhbGxlZFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0aGUgZXZlbnQgb2NjdXJzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3RhdGUgb2YgdGhlIExvb3AsIGVpdGhlciBzdGFydGVkIG9yIHN0b3BwZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50LnN0YXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcm9ncmVzcyBvZiB0aGUgbG9vcCBhcyBhIHZhbHVlIGJldHdlZW4gMC0xLiAwLCB3aGVuXG5cdFx0ICogIHRoZSBsb29wIGlzIHN0b3BwZWQgb3IgZG9uZSBpdGVyYXRpbmcuIFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2dyZXNzXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdwcm9ncmVzcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50LnByb2dyZXNzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIGJldHdlZW4gc3VjY2Vzc2l2ZSBjYWxsYmFja3MuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGxvb3AuaW50ZXJ2YWwgPSBcIjhuXCI7IC8vbG9vcCBldmVyeSA4blxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgaW50ZXJ2YWxcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnaW50ZXJ2YWwnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQubG9vcEVuZCA9IGludGVydmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBsb29wLiBUaGUgbm9ybWFsIHBsYXliYWNrIHJhdGUgaXMgMSAobm8gY2hhbmdlKS4gXG5cdFx0ICogIEEgYHBsYXliYWNrUmF0ZWAgb2YgMiB3b3VsZCBiZSB0d2ljZSBhcyBmYXN0LiBcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdwbGF5YmFja1JhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50LnBsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmFuZG9tIHZhcmlhdGlvbiArLy0wLjAxcyB0byB0aGUgc2NoZWR1bGVkIHRpbWUuIFxuXHRcdCAqICBPciBnaXZlIGl0IGEgdGltZSB2YWx1ZSB3aGljaCBpdCB3aWxsIHJhbmRvbWl6ZSBieS5cblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58VGltZX1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQG5hbWUgaHVtYW5pemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnaHVtYW5pemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5odW1hbml6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhcmlhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5odW1hbml6ZSA9IHZhcmlhdGlvbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJvYmFibHkgb2YgdGhlIGNhbGxiYWNrIGJlaW5nIGludm9rZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvYmFiaWxpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAncHJvYmFiaWxpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5wcm9iYWJpbGl0eTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2IpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQucHJvYmFiaWxpdHkgPSBwcm9iO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIE11dGluZyB0aGUgTG9vcCBtZWFucyB0aGF0IG5vIGNhbGxiYWNrcyBhcmUgaW52b2tlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBuYW1lIG11dGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50Lm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50Lm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgbG9vcC4gVGhlIGRlZmF1bHRcblx0XHQgKiAgdmFsdWUgaXMgSW5maW5pdHkgKGxvb3AgZm9yZXZlcikuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgaXRlcmF0aW9uc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdpdGVyYXRpb25zJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZXZlbnQubG9vcCA9PT0gdHJ1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50Lmxvb3A7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGl0ZXJzKSB7XG5cdCAgICAgICAgICAgIGlmIChpdGVycyA9PT0gSW5maW5pdHkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmxvb3AgPSB0cnVlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnQubG9vcCA9IGl0ZXJzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkxvb3A7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBhcnQgaXMgYSBjb2xsZWN0aW9uIFRvbmUuRXZlbnRzIHdoaWNoIGNhbiBiZVxuXHRcdCAqICAgICAgICAgc3RhcnRlZC9zdG9wcGVkIGFuZCBsb29wZWQgYXMgYSBzaW5nbGUgdW5pdC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FdmVudH1cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBvbiBlYWNoIGV2ZW50XG5cdFx0ICogIEBwYXJhbSB7QXJyYXl9IGV2ZW50cyB0aGUgYXJyYXkgb2YgZXZlbnRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBhcnQgPSBuZXcgVG9uZS5QYXJ0KGZ1bmN0aW9uKHRpbWUsIG5vdGUpe1xuXHRcdCAqIFx0Ly90aGUgbm90ZXMgZ2l2ZW4gYXMgdGhlIHNlY29uZCBlbGVtZW50IGluIHRoZSBhcnJheVxuXHRcdCAqIFx0Ly93aWxsIGJlIHBhc3NlZCBpbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ICogXHRzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShub3RlLCBcIjhuXCIsIHRpbWUpO1xuXHRcdCAqIH0sIFtbMCwgXCJDMlwiXSwgW1wiMDoyXCIsIFwiQzNcIl0sIFtcIjA6MzoyXCIsIFwiRzJcIl1dKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3VzZSBhbiBhcnJheSBvZiBvYmplY3RzIGFzIGxvbmcgYXMgdGhlIG9iamVjdCBoYXMgYSBcInRpbWVcIiBhdHRyaWJ1dGVcblx0XHQgKiB2YXIgcGFydCA9IG5ldyBUb25lLlBhcnQoZnVuY3Rpb24odGltZSwgdmFsdWUpe1xuXHRcdCAqIFx0Ly90aGUgdmFsdWUgaXMgYW4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGJvdGggdGhlIG5vdGUgYW5kIHRoZSB2ZWxvY2l0eVxuXHRcdCAqIFx0c3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UodmFsdWUubm90ZSwgXCI4blwiLCB0aW1lLCB2YWx1ZS52ZWxvY2l0eSk7XG5cdFx0ICogfSwgW3tcInRpbWVcIiA6IDAsIFwibm90ZVwiIDogXCJDM1wiLCBcInZlbG9jaXR5XCI6IDAuOX0sXG5cdFx0ICogXHQgICB7XCJ0aW1lXCIgOiBcIjA6MlwiLCBcIm5vdGVcIiA6IFwiQzRcIiwgXCJ2ZWxvY2l0eVwiOiAwLjV9XG5cdFx0ICogXSkuc3RhcnQoMCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAnZXZlbnRzJ1xuXHQgICAgICAgIF0sIFRvbmUuUGFydCk7XG5cdCAgICAgICAgVG9uZS5FdmVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuIGFycmF5IG9mIE9iamVjdHMuXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gW107XG5cdCAgICAgICAgLy9hZGQgdGhlIGV2ZW50c1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5ldmVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5ldmVudHNbaV0pKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmFkZChvcHRpb25zLmV2ZW50c1tpXVswXSwgb3B0aW9ucy5ldmVudHNbaV1bMV0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5hZGQob3B0aW9ucy5ldmVudHNbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFydCwgVG9uZS5FdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcEVuZCc6ICcxbScsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ3Byb2JhYmlsaXR5JzogMSxcblx0ICAgICAgICAnaHVtYW5pemUnOiBmYWxzZSxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlLFxuXHQgICAgICAgICdldmVudHMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgcGFydCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gIHRpbWUgICAgV2hlbiB0byBzdGFydCB0aGUgcGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBvZmZzZXQgIFRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcnRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlZ2luIHBsYXlpbmcgYXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgIHZhciB0aWNrcyA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGlja3MpICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIHRoaXMuX2xvb3BTdGFydCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnRvVGlja3Mob2Zmc2V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuYWRkKHtcblx0ICAgICAgICAgICAgICAgICdzdGF0ZSc6IFRvbmUuU3RhdGUuU3RhcnRlZCxcblx0ICAgICAgICAgICAgICAgICd0aW1lJzogdGlja3MsXG5cdCAgICAgICAgICAgICAgICAnb2Zmc2V0Jzogb2Zmc2V0XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnROb3RlKGV2ZW50LCB0aWNrcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgZXZlbnQgaW4gdGhlIGdpdmVuIGV2ZW50IGF0IHRoZSBjb3JyZWN0IHRpbWUgZ2l2ZW5cblx0XHQgKiAgdGhlIHRpY2tzIGFuZCBvZmZzZXQgYW5kIGxvb3BpbmcuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuRXZlbnR9ICBldmVudFxuXHRcdCAqICBAcGFyYW0gIHtUaWNrc30gIHRpY2tzXG5cdFx0ICogIEBwYXJhbSAge1RpY2tzfSAgb2Zmc2V0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9zdGFydE5vdGUgPSBmdW5jdGlvbiAoZXZlbnQsIHRpY2tzLCBvZmZzZXQpIHtcblx0ICAgICAgICB0aWNrcyAtPSBvZmZzZXQ7XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0ID49IHRoaXMuX2xvb3BTdGFydCAmJiBldmVudC5zdGFydE9mZnNldCA8IHRoaXMuX2xvb3BFbmQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChldmVudC5zdGFydE9mZnNldCA8IG9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vc3RhcnQgaXQgb24gdGhlIG5leHQgbG9vcFxuXHQgICAgICAgICAgICAgICAgICAgIHRpY2tzICs9IHRoaXMuX2dldExvb3BEdXJhdGlvbigpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgZXZlbnQuc3RhcnQoVG9uZS5UaWNrcyh0aWNrcykpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0IDwgdGhpcy5fbG9vcFN0YXJ0ICYmIGV2ZW50LnN0YXJ0T2Zmc2V0ID49IG9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQubG9vcCA9IGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuc3RhcnQoVG9uZS5UaWNrcyh0aWNrcykpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGFydE9mZnNldCA+PSBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuc3RhcnQoVG9uZS5UaWNrcyh0aWNrcykpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN0YXJ0IGZyb20gdGhlIHNjaGVkdWxlZCBzdGFydCB0aW1lXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQG5hbWUgc3RhcnRPZmZzZXRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnc3RhcnRPZmZzZXQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydE9mZnNldDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGFydE9mZnNldCA9IG9mZnNldDtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0T2Zmc2V0ICs9IHRoaXMuX3N0YXJ0T2Zmc2V0O1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBwYXJ0IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgdGltZSAgV2hlbiB0byBzdG9wIHRoZSBwYXJ0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpY2tzKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpY2tzKTtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQvU2V0IGFuIEV2ZW50J3MgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIElmIGEgdmFsdWUgaXMgcGFzc2VkIGluIGFuZCBubyBldmVudCBleGlzdHMgYXRcblx0XHQgKiAgdGhlIGdpdmVuIHRpbWUsIG9uZSB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB0aGF0IHZhbHVlLlxuXHRcdCAqICBJZiB0d28gZXZlbnRzIGFyZSBhdCB0aGUgc2FtZSB0aW1lLCB0aGUgZmlyc3Qgb25lIHdpbGxcblx0XHQgKiAgYmUgcmV0dXJuZWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcGFydC5hdChcIjFtXCIpOyAvL3JldHVybnMgdGhlIHBhcnQgYXQgdGhlIGZpcnN0IG1lYXN1cmVcblx0XHQgKlxuXHRcdCAqIHBhcnQuYXQoXCIybVwiLCBcIkMyXCIpOyAvL3NldCB0aGUgdmFsdWUgYXQgXCIybVwiIHRvIEMyLlxuXHRcdCAqIC8vaWYgYW4gZXZlbnQgZGlkbid0IGV4aXN0IGF0IHRoYXQgdGltZSwgaXQgd2lsbCBiZSBjcmVhdGVkLlxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IHRpbWUgVGhlIHRpbWUgb2YgdGhlIGV2ZW50IHRvIGdldCBvciBzZXQuXG5cdFx0ICogIEBwYXJhbSB7Kj19IHZhbHVlIElmIGEgdmFsdWUgaXMgcGFzc2VkIGluLCB0aGUgdmFsdWUgb2YgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgIGV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lIHdpbGwgYmUgc2V0IHRvIGl0LlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkV2ZW50fSB0aGUgZXZlbnQgYXQgdGhlIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiAodGltZSwgdmFsdWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIHZhciB0aWNrVGltZSA9IFRvbmUuVGlja3MoMSkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9ldmVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnModGltZS50b1RpY2tzKCkgLSBldmVudC5zdGFydE9mZnNldCkgPCB0aWNrVGltZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKHZhbHVlKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50LnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9pZiB0aGVyZSB3YXMgbm8gZXZlbnQgYXQgdGhhdCB0aW1lLCBjcmVhdGUgb25lXG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKHZhbHVlKSkge1xuXHQgICAgICAgICAgICB0aGlzLmFkZCh0aW1lLCB2YWx1ZSk7XG5cdCAgICAgICAgICAgIC8vcmV0dXJuIHRoZSBuZXcgZXZlbnRcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50c1t0aGlzLl9ldmVudHMubGVuZ3RoIC0gMV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBhbiBldmVudCB0byB0aGUgcGFydC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRoZSBub3RlIHNob3VsZCBzdGFydC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBhbiBvYmplY3QgaXMgcGFzc2VkIGluLCBpdCBzaG91bGRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGEgJ3RpbWUnIGF0dHJpYnV0ZSBhbmQgdGhlIHJlc3Rcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgb2JqZWN0IHdpbGwgYmUgdXNlZCBhcyB0aGUgJ3ZhbHVlJy5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudHwqfSAgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFydH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHBhcnQuYWRkKFwiMW1cIiwgXCJDIysxMVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgLy9leHRyYWN0IHRoZSBwYXJhbWV0ZXJzXG5cdCAgICAgICAgaWYgKHRpbWUuaGFzT3duUHJvcGVydHkoJ3RpbWUnKSkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRpbWU7XG5cdCAgICAgICAgICAgIHRpbWUgPSB2YWx1ZS50aW1lO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIHZhciBldmVudDtcblx0ICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUb25lLkV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50ID0gdmFsdWU7XG5cdCAgICAgICAgICAgIGV2ZW50LmNhbGxiYWNrID0gdGhpcy5fdGljay5iaW5kKHRoaXMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGV2ZW50ID0gbmV3IFRvbmUuRXZlbnQoe1xuXHQgICAgICAgICAgICAgICAgJ2NhbGxiYWNrJzogdGhpcy5fdGljay5iaW5kKHRoaXMpLFxuXHQgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vdGhlIHN0YXJ0IG9mZnNldFxuXHQgICAgICAgIGV2ZW50LnN0YXJ0T2Zmc2V0ID0gdGltZTtcblx0ICAgICAgICAvL2luaXRpYWxpemUgdGhlIHZhbHVlc1xuXHQgICAgICAgIGV2ZW50LnNldCh7XG5cdCAgICAgICAgICAgICdsb29wRW5kJzogdGhpcy5sb29wRW5kLFxuXHQgICAgICAgICAgICAnbG9vcFN0YXJ0JzogdGhpcy5sb29wU3RhcnQsXG5cdCAgICAgICAgICAgICdsb29wJzogdGhpcy5sb29wLFxuXHQgICAgICAgICAgICAnaHVtYW5pemUnOiB0aGlzLmh1bWFuaXplLFxuXHQgICAgICAgICAgICAncGxheWJhY2tSYXRlJzogdGhpcy5wbGF5YmFja1JhdGUsXG5cdCAgICAgICAgICAgICdwcm9iYWJpbGl0eSc6IHRoaXMucHJvYmFiaWxpdHlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMucHVzaChldmVudCk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgbm90ZSBpZiBpdCBzaG91bGQgYmUgcGxheWVkIHJpZ2h0IG5vd1xuXHQgICAgICAgIHRoaXMuX3Jlc3RhcnRFdmVudChldmVudCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlc3RhcnQgdGhlIGdpdmVuIGV2ZW50XG5cdFx0ICogIEBwYXJhbSAge1RvbmUuRXZlbnR9ICBldmVudFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fcmVzdGFydEV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaChmdW5jdGlvbiAoc3RhdGVFdmVudCkge1xuXHQgICAgICAgICAgICBpZiAoc3RhdGVFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdGFydE5vdGUoZXZlbnQsIHN0YXRlRXZlbnQudGltZSwgc3RhdGVFdmVudC5vZmZzZXQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy9zdG9wIHRoZSBub3RlXG5cdCAgICAgICAgICAgICAgICBldmVudC5zdG9wKFRvbmUuVGlja3Moc3RhdGVFdmVudC50aW1lKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgcGFydC4gV2lsbCByZWN1cnNpdmVseSBpdGVyYXRlXG5cdFx0ICogIGludG8gbmVzdGVkIHBhcnRzIHRvIGZpbmQgdGhlIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogIEBwYXJhbSB7Kn0gdmFsdWUgT3B0aW9uYWxseSBzZWxlY3Qgb25seSBhIHNwZWNpZmljIGV2ZW50IHZhbHVlXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIC8vZXh0cmFjdCB0aGUgcGFyYW1ldGVyc1xuXHQgICAgICAgIGlmICh0aW1lLmhhc093blByb3BlcnR5KCd0aW1lJykpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aW1lO1xuXHQgICAgICAgICAgICB0aW1lID0gdmFsdWUudGltZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fZXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50c1tpXTtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgVG9uZS5QYXJ0KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5yZW1vdmUodGltZSwgdmFsdWUpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0ID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHZhbHVlKSB8fCBUb25lLmlzRGVmaW5lZCh2YWx1ZSkgJiYgZXZlbnQudmFsdWUgPT09IHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLnNwbGljZShpLCAxKTtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbGwgb2YgdGhlIG5vdGVzIGZyb20gdGhlIGdyb3VwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5yZW1vdmVBbGwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IFtdO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgc2NoZWR1bGVkIHN0YXRlIGNoYW5nZSBldmVudHM6IGkuZS4gXCJzdGFydFwiIGFuZCBcInN0b3BcIi5cblx0XHQgKiAgQHBhcmFtIHtUaW1lbGluZVBvc2l0aW9ufSBhZnRlciBUaGUgdGltZSBhZnRlciB3aGljaCB0byBjYW5jZWwgdGhlIHNjaGVkdWxlZCBldmVudHMuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LmNhbmNlbChhZnRlcik7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRoaXMudG9UaWNrcyhhZnRlcikpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBldmVudHNcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IGN0eCBUaGUgY29udGV4dFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgY3R4KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cykge1xuXHQgICAgICAgICAgICBjdHggPSBUb25lLmRlZmF1bHRBcmcoY3R4LCB0aGlzKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2V2ZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzLl9ldmVudHNbaV07XG5cdCAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFRvbmUuUGFydCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGUuX2ZvckVhY2goY2FsbGJhY2ssIGN0eCk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY3R4LCBlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBhdHRyaWJ1dGUgb2YgYWxsIG9mIHRoZSBldmVudHNcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgYXR0ciAgdGhlIGF0dHJpYnV0ZSB0byBzZXRcblx0XHQgKiAgQHBhcmFtICB7Kn0gIHZhbHVlICAgICAgVGhlIHZhbHVlIHRvIHNldCBpdCB0b1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fc2V0QWxsID0gZnVuY3Rpb24gKGF0dHIsIHZhbHVlKSB7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnRbYXR0cl0gPSB2YWx1ZTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgdGljayBtZXRob2Rcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgb2YgdGhlIGV2ZW50IGluIHNlY29uZHNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSwgdmFsdWUpIHtcblx0ICAgICAgICBpZiAoIXRoaXMubXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHZhbHVlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIERldGVybWluZSBpZiB0aGUgZXZlbnQgc2hvdWxkIGJlIGN1cnJlbnRseSBsb29waW5nXG5cdFx0ICogIGdpdmVuIHRoZSBsb29wIGJvdW5kcmllcyBvZiB0aGlzIFBhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuRXZlbnR9ICBldmVudCAgVGhlIGV2ZW50IHRvIHRlc3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3Rlc3RMb29wQm91bmRyaWVzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0IDwgdGhpcy5fbG9vcFN0YXJ0IHx8IGV2ZW50LnN0YXJ0T2Zmc2V0ID49IHRoaXMuX2xvb3BFbmQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuY2FuY2VsKDApO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RvcHBlZCkge1xuXHQgICAgICAgICAgICAvL3Jlc2NoZWR1bGUgaXQgaWYgaXQncyBzdG9wcGVkXG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc3RhcnRFdmVudChldmVudCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJvYmFiaWxpdHkgb2YgdGhlIG5vdGVzIGJlaW5nIHRyaWdnZXJlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9iYWJpbGl0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdwcm9iYWJpbGl0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2JhYmlsaXR5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvYikge1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9iYWJpbGl0eSA9IHByb2I7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldEFsbCgncHJvYmFiaWxpdHknLCBwcm9iKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiBzZXQgdG8gdHJ1ZSwgd2lsbCBhcHBseSBzbWFsbCByYW5kb20gdmFyaWF0aW9uXG5cdFx0ICogIHRvIHRoZSBjYWxsYmFjayB0aW1lLiBJZiB0aGUgdmFsdWUgaXMgZ2l2ZW4gYXMgYSB0aW1lLCBpdCB3aWxsIHJhbmRvbWl6ZVxuXHRcdCAqICBieSB0aGF0IGFtb3VudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBldmVudC5odW1hbml6ZSA9IHRydWU7XG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0ICogIEBuYW1lIGh1bWFuaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2h1bWFuaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faHVtYW5pemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YXJpYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5faHVtYW5pemUgPSB2YXJpYXRpb247XG5cdCAgICAgICAgICAgIHRoaXMuX3NldEFsbCgnaHVtYW5pemUnLCB2YXJpYXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHRoZSBwYXJ0IHNob3VsZCBsb29wIG9yIG5vdFxuXHRcdCAqICBiZXR3ZWVuIFRvbmUuUGFydC5sb29wU3RhcnQgYW5kXG5cdFx0ICogIFRvbmUuUGFydC5sb29wRW5kLiBBbiBpbnRlZ2VyXG5cdFx0ICogIHZhbHVlIGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2Zcblx0XHQgKiAgbG9vcHMgdGhlIFBhcnQgZG9lcyBhZnRlciBpdCBzdGFydHMuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFBvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBsb29wXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9sb29wIHRoZSBwYXJ0IDggdGltZXNcblx0XHQgKiBwYXJ0Lmxvb3AgPSA4O1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsb29wJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3ApIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5fbG9vcFN0YXJ0ID0gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuX2xvb3BFbmQgPSB0aGlzLl9sb29wRW5kO1xuXHQgICAgICAgICAgICAgICAgZXZlbnQubG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90ZXN0TG9vcEJvdW5kcmllcyhldmVudCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBsb29wRW5kIHBvaW50IGRldGVybWluZXMgd2hlbiBpdCB3aWxsXG5cdFx0ICogIGxvb3AgaWYgVG9uZS5QYXJ0Lmxvb3AgaXMgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcEVuZCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wRW5kKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvVGlja3MobG9vcEVuZCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3BFbmQgPSBsb29wRW5kO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rlc3RMb29wQm91bmRyaWVzKGV2ZW50KTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGxvb3BTdGFydCBwb2ludCBkZXRlcm1pbmVzIHdoZW4gaXQgd2lsbFxuXHRcdCAqICBsb29wIGlmIFRvbmUuUGFydC5sb29wIGlzIHRydWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wU3RhcnQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9UaWNrcyhsb29wU3RhcnQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5sb29wU3RhcnQgPSB0aGlzLmxvb3BTdGFydDtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXN0TG9vcEJvdW5kcmllcyhldmVudCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgcGFydFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdwbGF5YmFja1JhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldEFsbCgncGxheWJhY2tSYXRlJywgcmF0ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFRoZSBudW1iZXIgb2Ygc2NoZWR1bGVkIG5vdGVzIGluIHRoZSBwYXJ0LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGxlbmd0aFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzLmxlbmd0aDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMucmVtb3ZlQWxsKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhcnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYXR0ZXJuIGFycGVnZ2lhdGVzIGJldHdlZW4gdGhlIGdpdmVuIG5vdGVzXG5cdFx0ICogICAgICAgICBpbiBhIG51bWJlciBvZiBwYXR0ZXJucy4gU2VlIFRvbmUuQ3RybFBhdHRlcm4gZm9yXG5cdFx0ICogICAgICAgICBhIGZ1bGwgbGlzdCBvZiBwYXR0ZXJucy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGF0dGVybiA9IG5ldyBUb25lLlBhdHRlcm4oZnVuY3Rpb24odGltZSwgbm90ZSl7XG5cdFx0ICogICAvL3RoZSBvcmRlciBvZiB0aGUgbm90ZXMgcGFzc2VkIGluIGRlcGVuZHMgb24gdGhlIHBhdHRlcm5cblx0XHQgKiB9LCBbXCJDMlwiLCBcIkQ0XCIsIFwiRTVcIiwgXCJBNlwiXSwgXCJ1cERvd25cIik7XG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkxvb3B9XG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFycGVnZ2lhdGUgb3Zlci5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGF0dGVybiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICd2YWx1ZXMnLFxuXHQgICAgICAgICAgICAncGF0dGVybidcblx0ICAgICAgICBdLCBUb25lLlBhdHRlcm4pO1xuXHQgICAgICAgIFRvbmUuTG9vcC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYXR0ZXJuIG1hbmFnZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5DdHJsUGF0dGVybn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGF0dGVybiA9IG5ldyBUb25lLkN0cmxQYXR0ZXJuKHtcblx0ICAgICAgICAgICAgJ3ZhbHVlcyc6IG9wdGlvbnMudmFsdWVzLFxuXHQgICAgICAgICAgICAndHlwZSc6IG9wdGlvbnMucGF0dGVybixcblx0ICAgICAgICAgICAgJ2luZGV4Jzogb3B0aW9ucy5pbmRleFxuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGF0dGVybiwgVG9uZS5Mb29wKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXR0ZXJuLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwYXR0ZXJuJzogVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwLFxuXHQgICAgICAgICdjYWxsYmFjayc6IFRvbmUubm9PcCxcblx0ICAgICAgICAndmFsdWVzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIG5vdGVzIHNob3VsZCBiZSBjYWxsZWRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdGhlIGV2ZW50IG9jY3Vyc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXR0ZXJuLnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB0aGlzLl9wYXR0ZXJuLnZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9wYXR0ZXJuLm5leHQoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgaW5kZXggaW4gdGhlIHZhbHVlcyBhcnJheS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBpbmRleFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICdpbmRleCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHRlcm4uaW5kZXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhdHRlcm4uaW5kZXggPSBpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBhcnJheSBvZiBldmVudHMuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKiAgQG5hbWUgdmFsdWVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXR0ZXJuLnByb3RvdHlwZSwgJ3ZhbHVlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHRlcm4udmFsdWVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXR0ZXJuLnZhbHVlcyA9IHZhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHBhdHRlcm4uXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHsqfVxuXHRcdCAqICBAbmFtZSB2YWx1ZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuLnZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwYXR0ZXJuIHR5cGUuIFNlZSBUb25lLkN0cmxQYXR0ZXJuIGZvciB0aGUgZnVsbCBsaXN0IG9mIHBhdHRlcm5zLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSBwYXR0ZXJuXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXR0ZXJuLnByb3RvdHlwZSwgJ3BhdHRlcm4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhdHRlcm4udHlwZSA9IHBhdHRlcm47XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGF0dGVybn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGF0dGVybi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkxvb3AucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9wYXR0ZXJuLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wYXR0ZXJuID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYXR0ZXJuO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBzZXF1ZW5jZSBpcyBhbiBhbHRlcm5hdGUgbm90YXRpb24gb2YgYSBwYXJ0LiBJbnN0ZWFkXG5cdFx0ICogICAgICAgICBvZiBwYXNzaW5nIGluIGFuIGFycmF5IG9mIFt0aW1lLCBldmVudF0gcGFpcnMsIHBhc3Ncblx0XHQgKiAgICAgICAgIGluIGFuIGFycmF5IG9mIGV2ZW50cyB3aGljaCB3aWxsIGJlIHNwYWNlZCBhdCB0aGVcblx0XHQgKiAgICAgICAgIGdpdmVuIHN1YmRpdmlzaW9uLiBTdWItYXJyYXlzIHdpbGwgc3ViZGl2aWRlIHRoYXQgYmVhdFxuXHRcdCAqICAgICAgICAgYnkgdGhlIG51bWJlciBvZiBpdGVtcyBhcmUgaW4gdGhlIGFycmF5LlxuXHRcdCAqICAgICAgICAgU2VxdWVuY2Ugbm90YXRpb24gaW5zcGlyYXRpb24gZnJvbSBbVGlkYWxdKGh0dHA6Ly95YXh1Lm9yZy90aWRhbC8pXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBub3RlXG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgICBldmVudHMgIFRoZSBzZXF1ZW5jZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBzdWJkaXZpc2lvbiAgVGhlIHN1YmRpdmlzaW9uIGJldHdlZW4gd2hpY2ggZXZlbnRzIGFyZSBwbGFjZWQuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlBhcnR9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNlcSA9IG5ldyBUb25lLlNlcXVlbmNlKGZ1bmN0aW9uKHRpbWUsIG5vdGUpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2cobm90ZSk7XG5cdFx0ICogLy9zdHJhaWdodCBxdWF0ZXIgbm90ZXNcblx0XHQgKiB9LCBbXCJDNFwiLCBcIkU0XCIsIFwiRzRcIiwgXCJBNFwiXSwgXCI0blwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2VxID0gbmV3IFRvbmUuU2VxdWVuY2UoZnVuY3Rpb24odGltZSwgbm90ZSl7XG5cdFx0ICogXHRjb25zb2xlLmxvZyhub3RlKTtcblx0XHQgKiAvL3N1YmRpdmlzaW9ucyBhcmUgZ2l2ZW4gYXMgc3ViYXJyYXlzXG5cdFx0ICogfSwgW1wiQzRcIiwgW1wiRTRcIiwgXCJENFwiLCBcIkU0XCJdLCBcIkc0XCIsIFtcIkE0XCIsIFwiRzRcIl1dKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAnZXZlbnRzJyxcblx0ICAgICAgICAgICAgJ3N1YmRpdmlzaW9uJ1xuXHQgICAgICAgIF0sIFRvbmUuU2VxdWVuY2UpO1xuXHQgICAgICAgIC8vcmVtb3ZlIHRoZSBldmVudHNcblx0ICAgICAgICB2YXIgZXZlbnRzID0gb3B0aW9ucy5ldmVudHM7XG5cdCAgICAgICAgZGVsZXRlIG9wdGlvbnMuZXZlbnRzO1xuXHQgICAgICAgIFRvbmUuUGFydC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzdWJkaXZpc29uIG9mIGVhY2ggbm90ZVxuXHRcdFx0ICogIEB0eXBlICB7VGlja3N9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YmRpdmlzaW9uID0gdGhpcy50b1RpY2tzKG9wdGlvbnMuc3ViZGl2aXNpb24pO1xuXHQgICAgICAgIC8vaWYgbm8gdGltZSB3YXMgcGFzc2VkIGluLCB0aGUgbG9vcCBlbmQgaXMgdGhlIGVuZCBvZiB0aGUgY3ljbGVcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKG9wdGlvbnMubG9vcEVuZCkgJiYgVG9uZS5pc0RlZmluZWQoZXZlbnRzKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gZXZlbnRzLmxlbmd0aCAqIHRoaXMuX3N1YmRpdmlzaW9uO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2RlZmF1bHRzIHRvIGxvb3Bpbmdcblx0ICAgICAgICB0aGlzLl9sb29wID0gdHJ1ZTtcblx0ICAgICAgICAvL2FkZCBhbGwgb2YgdGhlIGV2ZW50c1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChldmVudHMpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmFkZChpLCBldmVudHNbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2VxdWVuY2UsIFRvbmUuUGFydCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UuZGVmYXVsdHMgPSB7ICdzdWJkaXZpc2lvbic6ICc0bicgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3ViZGl2aXNpb24gb2YgdGhlIHNlcXVlbmNlLiBUaGlzIGNhbiBvbmx5IGJlXG5cdFx0ICogIHNldCBpbiB0aGUgY29uc3RydWN0b3IuIFRoZSBzdWJkaXZpc2lvbiBpcyB0aGVcblx0XHQgKiAgaW50ZXJ2YWwgYmV0d2VlbiBzdWNjZXNzaXZlIHN0ZXBzLlxuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuU2VxdWVuY2UjXG5cdFx0ICogIEBuYW1lIHN1YmRpdmlzaW9uXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLCAnc3ViZGl2aXNpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX3N1YmRpdmlzaW9uKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQvU2V0IGFuIGluZGV4IG9mIHRoZSBzZXF1ZW5jZS4gSWYgdGhlIGluZGV4IGNvbnRhaW5zIGEgc3ViYXJyYXksXG5cdFx0ICogIGEgVG9uZS5TZXF1ZW5jZSByZXByZXNlbnRpbmcgdGhhdCBzdWItYXJyYXkgd2lsbCBiZSByZXR1cm5lZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2VxdWVuY2UgPSBuZXcgVG9uZS5TZXF1ZW5jZShwbGF5Tm90ZSwgW1wiRTRcIiwgXCJDNFwiLCBcIkYjNFwiLCBbXCJBNFwiLCBcIkJiM1wiXV0pXG5cdFx0ICogc2VxdWVuY2UuYXQoMCkvLyA9PiByZXR1cm5zIFwiRTRcIlxuXHRcdCAqIC8vc2V0IGEgdmFsdWVcblx0XHQgKiBzZXF1ZW5jZS5hdCgwLCBcIkczXCIpO1xuXHRcdCAqIC8vZ2V0IGEgbmVzdGVkIHNlcXVlbmNlXG5cdFx0ICogc2VxdWVuY2UuYXQoMykuYXQoMSkvLyA9PiByZXR1cm5zIFwiQmIzXCJcblx0XHQgKiBAcGFyYW0ge1Bvc2l0aXZlfSBpbmRleCBUaGUgaW5kZXggdG8gZ2V0IG9yIHNldFxuXHRcdCAqIEBwYXJhbSB7Kn0gdmFsdWUgT3B0aW9uYWxseSBwYXNzIGluIHRoZSB2YWx1ZSB0byBzZXQgYXQgdGhlIGdpdmVuIGluZGV4LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG5cdCAgICAgICAgLy9pZiB0aGUgdmFsdWUgaXMgYW4gYXJyYXksXG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh2YWx1ZSkpIHtcblx0ICAgICAgICAgICAgLy9yZW1vdmUgdGhlIGN1cnJlbnQgZXZlbnQgYXQgdGhhdCBpbmRleFxuXHQgICAgICAgICAgICB0aGlzLnJlbW92ZShpbmRleCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY2FsbCB0aGUgcGFyZW50J3MgbWV0aG9kXG5cdCAgICAgICAgcmV0dXJuIFRvbmUuUGFydC5wcm90b3R5cGUuYXQuY2FsbCh0aGlzLCB0aGlzLl9pbmRleFRpbWUoaW5kZXgpLCB2YWx1ZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhbiBldmVudCBhdCBhbiBpbmRleCwgaWYgdGhlcmUncyBhbHJlYWR5IHNvbWV0aGluZ1xuXHRcdCAqICBhdCB0aGF0IGluZGV4LCBvdmVyd3JpdGUgaXQuIElmIGB2YWx1ZWAgaXMgYW4gYXJyYXksXG5cdFx0ICogIGl0IHdpbGwgYmUgcGFyc2VkIGFzIGEgc3Vic2VxdWVuY2UuXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBpbmRleCBUaGUgaW5kZXggdG8gYWRkIHRoZSBldmVudCB0b1xuXHRcdCAqICBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhZGQgYXQgdGhhdCBpbmRleFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TZXF1ZW5jZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuXHQgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh2YWx1ZSkpIHtcblx0ICAgICAgICAgICAgLy9tYWtlIGEgc3Vic2VxdWVuY2UgYW5kIGFkZCB0aGF0IHRvIHRoZSBzZXF1ZW5jZVxuXHQgICAgICAgICAgICB2YXIgc3ViU3ViZGl2aXNpb24gPSBNYXRoLnJvdW5kKHRoaXMuX3N1YmRpdmlzaW9uIC8gdmFsdWUubGVuZ3RoKTtcblx0ICAgICAgICAgICAgdmFsdWUgPSBuZXcgVG9uZS5TZXF1ZW5jZSh0aGlzLl90aWNrLmJpbmQodGhpcyksIHZhbHVlLCBUb25lLlRpY2tzKHN1YlN1YmRpdmlzaW9uKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuUGFydC5wcm90b3R5cGUuYWRkLmNhbGwodGhpcywgdGhpcy5faW5kZXhUaW1lKGluZGV4KSwgdmFsdWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYSB2YWx1ZSBmcm9tIHRoZSBzZXF1ZW5jZSBieSBpbmRleFxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBldmVudCB0byByZW1vdmVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2VxdWVuY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcblx0ICAgICAgICBUb25lLlBhcnQucHJvdG90eXBlLnJlbW92ZS5jYWxsKHRoaXMsIHRoaXMuX2luZGV4VGltZShpbmRleCksIHZhbHVlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSB0aW1lIG9mIHRoZSBpbmRleCBnaXZlbiB0aGUgU2VxdWVuY2UncyBzdWJkaXZpc2lvblxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBpbmRleFxuXHRcdCAqICBAcmV0dXJuICB7VGltZX0gIFRoZSB0aW1lIG9mIHRoYXQgaW5kZXhcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLl9pbmRleFRpbWUgPSBmdW5jdGlvbiAoaW5kZXgpIHtcblx0ICAgICAgICBpZiAoaW5kZXggaW5zdGFuY2VvZiBUb25lLlRyYW5zcG9ydFRpbWUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKGluZGV4ICogdGhpcy5fc3ViZGl2aXNpb24gKyB0aGlzLnN0YXJ0T2Zmc2V0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlNlcXVlbmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuUGFydC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNlcXVlbmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QdWxzZU9zY2lsbGF0b3IgaXMgYSBwdWxzZSBvc2NpbGxhdG9yIHdpdGggY29udHJvbCBvdmVyIHB1bHNlIHdpZHRoLFxuXHRcdCAqICAgICAgICAgYWxzbyBrbm93biBhcyB0aGUgZHV0eSBjeWNsZS4gQXQgNTAlIGR1dHkgY3ljbGUgKHdpZHRoID0gMC41KSB0aGUgd2F2ZSBpc1xuXHRcdCAqICAgICAgICAgYSBzcXVhcmUgYW5kIG9ubHkgb2RkLW51bWJlcmVkIGhhcm1vbmljcyBhcmUgcHJlc2VudC4gQXQgYWxsIG90aGVyIHdpZHRoc1xuXHRcdCAqICAgICAgICAgZXZlbi1udW1iZXJlZCBoYXJtb25pY3MgYXJlIHByZXNlbnQuIFJlYWQgbW9yZVxuXHRcdCAqICAgICAgICAgW2hlcmVdKGh0dHBzOi8vd2lnZ2xld2F2ZS53b3JkcHJlc3MuY29tLzIwMTQvMDgvMTYvcHVsc2Utd2F2ZWZvcm1zLWFuZC1oYXJtb25pY3MvKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2ZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbd2lkdGhdIFRoZSB3aWR0aCBvZiB0aGUgcHVsc2Vcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcHVsc2UgPSBuZXcgVG9uZS5QdWxzZU9zY2lsbGF0b3IoXCJFNVwiLCAwLjQpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd3aWR0aCdcblx0ICAgICAgICBdLCBUb25lLk9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdpZHRoIG9mIHRoZSBwdWxzZS5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy53aWR0aCA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLndpZHRoLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGdhdGUgdGhlIHdpZHRoIGFtb3VudFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3dpZHRoR2F0ZSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2F3dG9vdGggb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoID0gbmV3IFRvbmUuT3NjaWxsYXRvcih7XG5cdCAgICAgICAgICAgIGZyZXF1ZW5jeTogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgIGRldHVuZTogb3B0aW9ucy5kZXR1bmUsXG5cdCAgICAgICAgICAgIHR5cGU6ICdzYXd0b290aCcsXG5cdCAgICAgICAgICAgIHBoYXNlOiBvcHRpb25zLnBoYXNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9zYXd0b290aC5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBpbiBjZW50cy5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLl9zYXd0b290aC5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhyZXNob2xkIHRoZSBzaWduYWwgdG8gdHVybiBpdCBpbnRvIGEgc3F1YXJlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGhyZXNoID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmICh2YWwgPCAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5jaGFpbih0aGlzLl90aHJlc2gsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLndpZHRoLmNoYWluKHRoaXMuX3dpZHRoR2F0ZSwgdGhpcy5fdGhyZXNoKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICd3aWR0aCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUHVsc2VPc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgcGFyYW1ldGVycy5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3BoYXNlJzogMCxcblx0ICAgICAgICAnd2lkdGgnOiAwLjJcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3dpZHRoR2F0ZS5nYWluLnNldFZhbHVlQXRUaW1lKDEsIHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLnN0b3AodGltZSk7XG5cdCAgICAgICAgLy90aGUgd2lkdGggaXMgc3RpbGwgY29ubmVjdGVkIHRvIHRoZSBvdXRwdXQuXG5cdCAgICAgICAgLy90aGF0IG5lZWRzIHRvIGJlIHN0b3BwZWQgYWxzb1xuXHQgICAgICAgIHRoaXMuX3dpZHRoR2F0ZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGgucmVzdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QdWxzZU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Nhd3Rvb3RoLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2F3dG9vdGgucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLiBBbHdheXMgcmV0dXJucyBcInB1bHNlXCIuXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUHVsc2VPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAncHVsc2UnO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQ2Fubm90IHNldCBwYXJ0aWFscyBmb3IgdGhpcyB3YXZlZm9ybSB0eXBlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUHVsc2VPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBbXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cCBtZXRob2QuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUHVsc2VPc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnd2lkdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLndpZHRoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3dpZHRoR2F0ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGhyZXNoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUHVsc2VPc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QV01Pc2NpbGxhdG9yIG1vZHVsYXRlcyB0aGUgd2lkdGggb2YgYSBUb25lLlB1bHNlT3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgYXQgdGhlIG1vZHVsYXRpb25GcmVxdWVuY3kuIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgY29udGludW91c2x5XG5cdFx0ICogICAgICAgICBjaGFuZ2luZyB0aGUgdGltYnJlIG9mIHRoZSBvc2NpbGxhdG9yIGJ5IGFsdGVyaW5nIHRoZSBoYXJtb25pY3Ncblx0XHQgKiAgICAgICAgIGdlbmVyYXRlZC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBzdGFydGluZyBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBtb2R1bGF0aW9uRnJlcXVlbmN5IFRoZSBtb2R1bGF0aW9uIGZyZXF1ZW5jeSBvZiB0aGUgd2lkdGggb2YgdGhlIHB1bHNlLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgcHdtID0gbmV3IFRvbmUuUFdNT3NjaWxsYXRvcihcIkFiM1wiLCAwLjMpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkZyZXF1ZW5jeSdcblx0ICAgICAgICBdLCBUb25lLlBXTU9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHB1bHNlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5QdWxzZU9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3B1bHNlID0gbmV3IFRvbmUuUHVsc2VPc2NpbGxhdG9yKG9wdGlvbnMubW9kdWxhdGlvbkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9jaGFuZ2UgdGhlIHB1bHNlIG9zY2lsbGF0b3IgdHlwZVxuXHQgICAgICAgIHRoaXMuX3B1bHNlLl9zYXd0b290aC50eXBlID0gJ3NpbmUnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtb2R1bGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnZGV0dW5lJzogb3B0aW9ucy5kZXR1bmUsXG5cdCAgICAgICAgICAgICdwaGFzZSc6IG9wdGlvbnMucGhhc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTY2FsZSB0aGUgb3NjaWxsYXRvciBzbyBpdCBkb2Vzbid0IGdvIHNpbGVudFxuXHRcdFx0ICogIGF0IHRoZSBleHRyZW1lIHZhbHVlcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBuZXcgVG9uZS5NdWx0aXBseSgyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLl9tb2R1bGF0b3IuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW9uIHJhdGUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25GcmVxdWVuY3kgPSB0aGlzLl9wdWxzZS5mcmVxdWVuY3k7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jaGFpbih0aGlzLl9zY2FsZSwgdGhpcy5fcHVsc2Uud2lkdGgpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25GcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBXTU9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3BoYXNlJzogMCxcblx0ICAgICAgICAnbW9kdWxhdGlvbkZyZXF1ZW5jeSc6IDAuNFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHJlc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2UucmVzdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvci4gQWx3YXlzIHJldHVybnMgXCJwd21cIi5cblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QV01Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gJ3B3bSc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBDYW5ub3Qgc2V0IHBhcnRpYWxzIGZvciB0aGlzIHdhdmVmb3JtIHR5cGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QV01Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gW107XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QV01Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGF0b3IucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QV01Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25GcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUFdNT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRk1Pc2NpbGxhdG9yXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gbW9kdWxhdGlvblR5cGUgVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBzaW5lIG9zY2lsbGF0b3IgZnJlcXVlbmN5LW1vZHVsYXRlZCBieSBhIHNxdWFyZSB3YXZlXG5cdFx0ICogdmFyIGZtT3NjID0gbmV3IFRvbmUuRk1Pc2NpbGxhdG9yKFwiQWIzXCIsIFwic2luZVwiLCBcInNxdWFyZVwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uVHlwZSdcblx0ICAgICAgICBdLCBUb25lLkZNT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMudHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMuX2NhcnJpZXIuZGV0dW5lO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLnZhbHVlID0gb3B0aW9ucy5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpb24gaW5kZXggd2hpY2ggaXMgaW4gZXNzZW5jZSB0aGUgZGVwdGggb3IgYW1vdW50IG9mIHRoZSBtb2R1bGF0aW9uLiBJbiBvdGhlciB0ZXJtcyBpdCBpcyB0aGVcblx0XHRcdCAqICByYXRpbyBvZiB0aGUgZnJlcXVlbmN5IG9mIHRoZSBtb2R1bGF0aW5nIHNpZ25hbCAobWYpIHRvIHRoZSBhbXBsaXR1ZGUgb2YgdGhlXG5cdFx0XHQgKiAgbW9kdWxhdGluZyBzaWduYWwgKG1hKSAtLSBhcyBpbiBtYS9tZi5cblx0XHRcdCAqXHRAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKlx0QHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXggPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLm1vZHVsYXRpb25JbmRleCk7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXgudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpbmcgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKG9wdGlvbnMuZnJlcXVlbmN5LCBvcHRpb25zLm1vZHVsYXRpb25UeXBlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgZnJlcXVlbmN5IHJhdGlvIGJldHdlZW4gdGhlIGNhcnJpZXIgYW5kIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvcnMuXG5cdFx0XHQgKiAgQSBoYXJtb25pY2l0eSBvZiAxIGdpdmVzIGJvdGggb3NjaWxsYXRvcnMgdGhlIHNhbWUgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy9waXRjaCB0aGUgbW9kdWxhdG9yIGFuIG9jdGF2ZSBiZWxvdyBjYXJyaWVyXG5cdFx0XHQgKiBzeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSBtb2R1bGF0aW9uIGhhcHBlbnNcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG5ldyBUb25lLkdhaW4oMCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMubW9kdWxhdGlvbkluZGV4LCB0aGlzLl9tb2R1bGF0aW9uTm9kZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNvbm5lY3QodGhpcy5fbW9kdWxhdGlvbk5vZGUuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHRoaXMuX21vZHVsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMucGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRk1Pc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3BoYXNlJzogMCxcblx0ICAgICAgICAnbW9kdWxhdGlvbkluZGV4JzogMixcblx0ICAgICAgICAnbW9kdWxhdGlvblR5cGUnOiAnc3F1YXJlJyxcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIucmVzdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uVHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ21vZHVsYXRpb25UeXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9kdWxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgY2FycmllciB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci5wYXJ0aWFscztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBhcnRpYWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIucGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5GTU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GTU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkFNT3NjaWxsYXRvclxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBzdGFydGluZyBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGF0aW9uVHlwZSBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHNpbmUgb3NjaWxsYXRvciBmcmVxdWVuY3ktbW9kdWxhdGVkIGJ5IGEgc3F1YXJlIHdhdmVcblx0XHQgKiB2YXIgZm1Pc2MgPSBuZXcgVG9uZS5BTU9zY2lsbGF0b3IoXCJBYjNcIiwgXCJzaW5lXCIsIFwic3F1YXJlXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25UeXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuQU1Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy50eXBlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvcidzIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMuX2NhcnJpZXIuZGV0dW5lO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLnZhbHVlID0gb3B0aW9ucy5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpbmcgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKG9wdGlvbnMuZnJlcXVlbmN5LCBvcHRpb25zLm1vZHVsYXRpb25UeXBlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb252ZXJ0IHRoZSAtMSwxIG91dHB1dCB0byAwLDFcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BdWRpb1RvR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgZnJlcXVlbmN5IHJhdGlvIGJldHdlZW4gdGhlIGNhcnJpZXIgYW5kIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvcnMuXG5cdFx0XHQgKiAgQSBoYXJtb25pY2l0eSBvZiAxIGdpdmVzIGJvdGggb3NjaWxsYXRvcnMgdGhlIHNhbWUgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy9waXRjaCB0aGUgbW9kdWxhdG9yIGFuIG9jdGF2ZSBiZWxvdyBjYXJyaWVyXG5cdFx0XHQgKiBzeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSBtb2R1bGF0aW9uIGhhcHBlbnNcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG5ldyBUb25lLkdhaW4oMCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fbW9kdWxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNoYWluKHRoaXMuX21vZHVsYXRpb25TY2FsZSwgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5jaGFpbih0aGlzLl9tb2R1bGF0aW9uTm9kZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMucGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BTU9zY2lsbGF0b3IsIFRvbmUuT3NjaWxsYXRvcik7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3BoYXNlJzogMCxcblx0ICAgICAgICAnbW9kdWxhdGlvblR5cGUnOiAnc3F1YXJlJyxcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIucmVzdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uVHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ21vZHVsYXRpb25UeXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9kdWxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkFNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgY2FycmllciB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkFNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci5wYXJ0aWFscztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBhcnRpYWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIucGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5BTU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BTU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZhdE9zY2lsbGF0b3Jcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBzdGFydGluZyBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGF0aW9uVHlwZSBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHNpbmUgb3NjaWxsYXRvciBmcmVxdWVuY3ktbW9kdWxhdGVkIGJ5IGEgc3F1YXJlIHdhdmVcblx0XHQgKiB2YXIgZm1Pc2MgPSBuZXcgVG9uZS5GYXRPc2NpbGxhdG9yKFwiQWIzXCIsIFwic2luZVwiLCBcInNxdWFyZVwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnc3ByZWFkJ1xuXHQgICAgICAgIF0sIFRvbmUuRmF0T3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvcidzIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiBvc2NpbGxhdG9yc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdG90YWwgc3ByZWFkIG9mIHRoZSBvc2NpbGxhdG9yc1xuXHRcdFx0ICogIEB0eXBlICB7Q2VudHN9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NwcmVhZCA9IG9wdGlvbnMuc3ByZWFkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUge0RlZ3JlZXN9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGFydGlhbHMgYXJyYXlcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMucGFydGlhbHMsIFtdKTtcblx0ICAgICAgICAvL3NldCB0aGUgY291bnQgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5jb3VudCA9IG9wdGlvbnMuY291bnQ7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZhdE9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3BoYXNlJzogMCxcblx0ICAgICAgICAnc3ByZWFkJzogMjAsXG5cdCAgICAgICAgJ2NvdW50JzogMyxcblx0ICAgICAgICAndHlwZSc6ICdzYXd0b290aCdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnN0b3AodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHJlc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2MucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgb3NjaWxsYXRvcnNcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBpdGVyYXRvciAgVGhlIGl0ZXJhdG9yIGZ1bmN0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLl9mb3JFYWNoID0gZnVuY3Rpb24gKGl0ZXJhdG9yKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBpdGVyYXRvci5jYWxsKHRoaXMsIHRoaXMuX29zY2lsbGF0b3JzW2ldLCBpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZhdE9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICBvc2MudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRldHVuZSBzcHJlYWQgYmV0d2VlbiB0aGUgb3NjaWxsYXRvcnMuIElmIFwiY291bnRcIiBpc1xuXHRcdCAqIHNldCB0byAzIG9zY2lsbGF0b3JzIGFuZCB0aGUgXCJzcHJlYWRcIiBpcyBzZXQgdG8gNDAsXG5cdFx0ICogdGhlIHRocmVlIG9zY2lsbGF0b3JzIHdvdWxkIGJlIGRldHVuZWQgbGlrZSB0aGlzOiBbLTIwLCAwLCAyMF1cblx0XHQgKiBmb3IgYSB0b3RhbCBkZXR1bmUgc3ByZWFkIG9mIDQwIGNlbnRzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZhdE9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0NlbnRzfVxuXHRcdCAqIEBuYW1lIHNwcmVhZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zcHJlYWQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3ByZWFkID0gc3ByZWFkO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoID4gMSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gLXNwcmVhZCAvIDI7XG5cdCAgICAgICAgICAgICAgICB2YXIgc3RlcCA9IHNwcmVhZCAvICh0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYywgaSkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9zYy5kZXR1bmUudmFsdWUgPSBzdGFydCArIHN0ZXAgKiBpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2YgZGV0dW5lZCBvc2NpbGxhdG9yc1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZhdE9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBjb3VudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICdjb3VudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGNvdW50KSB7XG5cdCAgICAgICAgICAgIGNvdW50ID0gTWF0aC5tYXgoY291bnQsIDEpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoICE9PSBjb3VudCkge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIHBhcnRpYWxzID0gdGhpcy5wYXJ0aWFscztcblx0ICAgICAgICAgICAgICAgIC8vIHZhciB0eXBlID0gdGhpcy50eXBlO1xuXHQgICAgICAgICAgICAgICAgLy9kaXNwb3NlIHRoZSBwcmV2aW91cyBvc2NpbGxhdG9yc1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBbXTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG9zYy5wYXJ0aWFscyA9IHRoaXMuX3BhcnRpYWxzO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG9zYy50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLnBoYXNlID0gdGhpcy5fcGhhc2U7XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLnZvbHVtZS52YWx1ZSA9IC02IC0gY291bnQgKiAxLjE7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdChvc2MuZnJlcXVlbmN5KTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KG9zYy5kZXR1bmUpO1xuXHQgICAgICAgICAgICAgICAgICAgIG9zYy5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXSA9IG9zYztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIC8vc2V0IHRoZSBzcHJlYWRcblx0ICAgICAgICAgICAgICAgIHRoaXMuc3ByZWFkID0gdGhpcy5fc3ByZWFkO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBvc2Muc3RhcnQoKTtcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgY2FycmllciB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZhdE9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJ0aWFscztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBhcnRpYWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b207XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkZhdE9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2MuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmF0T3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuT21uaU9zY2lsbGF0b3IgYWdncmVnYXRlcyBUb25lLk9zY2lsbGF0b3IsIFRvbmUuUHVsc2VPc2NpbGxhdG9yLFxuXHRcdCAqICAgICAgICAgVG9uZS5QV01Pc2NpbGxhdG9yLCBUb25lLkZNT3NjaWxsYXRvciwgVG9uZS5BTU9zY2lsbGF0b3IsIGFuZCBUb25lLkZhdE9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgIGludG8gb25lIGNsYXNzLiBUaGUgb3NjaWxsYXRvciBjbGFzcyBjYW4gYmUgY2hhbmdlZCBieSBzZXR0aW5nIHRoZSBgdHlwZWAuXG5cdFx0ICogICAgICAgICBgb21uaU9zYy50eXBlID0gXCJwd21cImAgd2lsbCBzZXQgaXQgdG8gdGhlIFRvbmUuUFdNT3NjaWxsYXRvci4gUHJlZml4aW5nXG5cdFx0ICogICAgICAgICBhbnkgb2YgdGhlIGJhc2ljIHR5cGVzIChcInNpbmVcIiwgXCJzcXVhcmU0XCIsIGV0Yy4pIHdpdGggXCJmbVwiLCBcImFtXCIsIG9yIFwiZmF0XCJcblx0XHQgKiAgICAgICAgIHdpbGwgdXNlIHRoZSBGTU9zY2lsbGF0b3IsIEFNT3NjaWxsYXRvciBvciBGYXRPc2NpbGxhdG9yIHJlc3BlY3RpdmVseS5cblx0XHQgKiAgICAgICAgIEZvciBleGFtcGxlOiBgb21uaU9zYy50eXBlID0gXCJmYXRzYXd0b290aFwiYCB3aWxsIGNyZWF0ZSBzZXQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgIHRvIGEgRmF0T3NjaWxsYXRvciBvZiB0eXBlIFwic2F3dG9vdGhcIi5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBpbml0aWFsIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBvbW5pT3NjID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3IoXCJDIzRcIiwgXCJwd21cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuT21uaU9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbFxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvciBzb3VyY2Vcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zb3VyY2VUeXBlID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgLy9zZXQgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICAvL3NldCB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHRoaXMuc2V0KG9wdGlvbnMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT21uaU9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdwaGFzZSc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQGVudW0ge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBPbW5pT3NjVHlwZSA9IHtcblx0ICAgICAgICBQdWxzZTogJ1B1bHNlT3NjaWxsYXRvcicsXG5cdCAgICAgICAgUFdNOiAnUFdNT3NjaWxsYXRvcicsXG5cdCAgICAgICAgT3NjOiAnT3NjaWxsYXRvcicsXG5cdCAgICAgICAgRk06ICdGTU9zY2lsbGF0b3InLFxuXHQgICAgICAgIEFNOiAnQU1Pc2NpbGxhdG9yJyxcblx0ICAgICAgICBGYXQ6ICdGYXRPc2NpbGxhdG9yJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdG8gc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRvIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvci4gQ2FuIGJlIGFueSBvZiB0aGUgYmFzaWMgdHlwZXM6IHNpbmUsIHNxdWFyZSwgdHJpYW5nbGUsIHNhd3Rvb3RoLiBPclxuXHRcdCAqIHByZWZpeCB0aGUgYmFzaWMgdHlwZXMgd2l0aCBcImZtXCIsIFwiYW1cIiwgb3IgXCJmYXRcIiB0byB1c2UgdGhlIEZNT3NjaWxsYXRvciwgQU1Pc2NpbGxhdG9yIG9yIEZhdE9zY2lsbGF0b3Jcblx0XHQgKiB0eXBlcy4gVGhlIG9zY2lsbGF0b3IgY291bGQgYWxzbyBiZSBzZXQgdG8gXCJwd21cIiBvciBcInB1bHNlXCIuIEFsbCBvZiB0aGUgcGFyYW1ldGVycyBvZiB0aGVcblx0XHQgKiBvc2NpbGxhdG9yJ3MgY2xhc3MgYXJlIGFjY2Vzc2libGUgd2hlbiB0aGUgb3NjaWxsYXRvciBpcyBzZXQgdG8gdGhhdCB0eXBlLCBidXQgdGhyb3dzIGFuIGVycm9yXG5cdFx0ICogd2hlbiBpdCdzIG5vdC5cblx0XHQgKlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb21uaU9zYy50eXBlID0gXCJwd21cIjtcblx0XHQgKiAvL21vZHVsYXRpb25GcmVxdWVuY3kgaXMgcGFyYW1ldGVyIHdoaWNoIGlzIGF2YWlsYWJsZVxuXHRcdCAqIC8vb25seSB3aGVuIHRoZSB0eXBlIGlzIFwicHdtXCIuXG5cdFx0ICogb21uaU9zYy5tb2R1bGF0aW9uRnJlcXVlbmN5LnZhbHVlID0gMC41O1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9hbiBzcXVhcmUgd2F2ZSBmcmVxdWVuY3kgbW9kdWxhdGVkIGJ5IGEgc2F3dG9vdGhcblx0XHQgKiBvbW5pT3NjLnR5cGUgPSBcImZtc3F1YXJlXCI7XG5cdFx0ICogb21uaU9zYy5tb2R1bGF0aW9uVHlwZSA9IFwic2F3dG9vdGhcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBwcmVmaXggPSAnJztcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNKSB7XG5cdCAgICAgICAgICAgICAgICBwcmVmaXggPSAnZm0nO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICBwcmVmaXggPSAnYW0nO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgcHJlZml4ID0gJ2ZhdCc7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIHRoaXMuX29zY2lsbGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgaWYgKHR5cGUuc3Vic3RyKDAsIDIpID09PSAnZm0nKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLkZNKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGUuc3Vic3RyKDIpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuc3Vic3RyKDAsIDIpID09PSAnYW0nKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLkFNKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGUuc3Vic3RyKDIpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuc3Vic3RyKDAsIDMpID09PSAnZmF0Jykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5GYXQpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZS5zdWJzdHIoMyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3B3bScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuUFdNKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncHVsc2UnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLlB1bHNlKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuT3NjKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBUaGlzIGlzIG5vdCBhdmFpbGFibGUgb24gXCJwd21cIiBhbmQgXCJwdWxzZVwiIG9zY2lsbGF0b3IgdHlwZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5wYXJ0aWFscztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBhcnRpYWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IucGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgYSBtZW1iZXIvYXR0cmlidXRlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHBhcmFtc1xuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJhbXBUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9tbmlPc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocGFyYW1zLCB2YWx1ZSkge1xuXHQgICAgICAgIC8vbWFrZSBzdXJlIHRoZSB0eXBlIGlzIHNldCBmaXJzdFxuXHQgICAgICAgIGlmIChwYXJhbXMgPT09ICd0eXBlJykge1xuXHQgICAgICAgICAgICB0aGlzLnR5cGUgPSB2YWx1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNPYmplY3QocGFyYW1zKSAmJiBwYXJhbXMuaGFzT3duUHJvcGVydHkoJ3R5cGUnKSkge1xuXHQgICAgICAgICAgICB0aGlzLnR5cGUgPSBwYXJhbXMudHlwZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy90aGVuIHNldCB0aGUgcmVzdFxuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLnNldC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjb25uZWN0IHRoZSBvc2NpbGxhdG9yIHRvIHRoZSBmcmVxdWVuY3kgYW5kIGRldHVuZSBzaWduYWxzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5fY3JlYXRlTmV3T3NjaWxsYXRvciA9IGZ1bmN0aW9uIChvc2NUeXBlKSB7XG5cdCAgICAgICAgaWYgKG9zY1R5cGUgIT09IHRoaXMuX3NvdXJjZVR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlVHlwZSA9IG9zY1R5cGU7XG5cdCAgICAgICAgICAgIHZhciBPc2NpbGxhdG9yQ29uc3RydWN0b3IgPSBUb25lW29zY1R5cGVdO1xuXHQgICAgICAgICAgICAvL3Nob3J0IGRlbGF5IHRvIGF2b2lkIGNsaWNrcyBvbiB0aGUgY2hhbmdlXG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvciAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIG9sZE9zYyA9IHRoaXMuX29zY2lsbGF0b3I7XG5cdCAgICAgICAgICAgICAgICBvbGRPc2Muc3RvcChub3cpO1xuXHQgICAgICAgICAgICAgICAgLy9kaXNwb3NlIHRoZSBvbGQgb25lXG5cdCAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb2xkT3NjLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgICAgICAgICBvbGRPc2MgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgfSwgdGhpcy5ibG9ja1RpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBuZXcgT3NjaWxsYXRvckNvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHRoaXMuX29zY2lsbGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydChub3cpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgd2lkdGggb2YgdGhlIG9zY2lsbGF0b3IgKG9ubHkgaWYgdGhlIG9zY2lsbGF0b3IgaXMgc2V0IHRvIFwicHVsc2VcIilcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQHNpZ25hbFxuXHRcdCAqIEBuYW1lIHdpZHRoXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgb21uaU9zYyA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKDQ0MCwgXCJwdWxzZVwiKTtcblx0XHQgKiAvL2NhbiBhY2Nlc3MgdGhlIHdpZHRoIGF0dHJpYnV0ZSBvbmx5IGlmIHR5cGUgPT09IFwicHVsc2VcIlxuXHRcdCAqIG9tbmlPc2Mud2lkdGgudmFsdWUgPSAwLjI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICd3aWR0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLlB1bHNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci53aWR0aDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBkZXR1bmVkIG9zY2lsbGF0b3JzXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBjb3VudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnY291bnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLmNvdW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjb3VudCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvdW50ID0gY291bnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZXR1bmUgc3ByZWFkIGJldHdlZW4gdGhlIG9zY2lsbGF0b3JzLiBJZiBcImNvdW50XCIgaXNcblx0XHQgKiBzZXQgdG8gMyBvc2NpbGxhdG9ycyBhbmQgdGhlIFwic3ByZWFkXCIgaXMgc2V0IHRvIDQwLFxuXHRcdCAqIHRoZSB0aHJlZSBvc2NpbGxhdG9ycyB3b3VsZCBiZSBkZXR1bmVkIGxpa2UgdGhpczogWy0yMCwgMCwgMjBdXG5cdFx0ICogZm9yIGEgdG90YWwgZGV0dW5lIHNwcmVhZCBvZiA0MCBjZW50cy4gU2VlIFRvbmUuRmF0T3NjaWxsYXRvclxuXHRcdCAqIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0NlbnRzfVxuXHRcdCAqIEBuYW1lIHNwcmVhZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5zcHJlYWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNwcmVhZCA9IHNwcmVhZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yLiBPbmx5IGlmIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogaXMgc2V0IHRvIFwiYW1cIiBvciBcImZtXCIgdHlwZXMuIHNlZS4gVG9uZS5BTU9zY2lsbGF0b3Igb3IgVG9uZS5GTU9zY2lsbGF0b3Jcblx0XHQgKiBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvblR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ21vZHVsYXRpb25UeXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0gfHwgdGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuQU0pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLm1vZHVsYXRpb25UeXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtVHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0gfHwgdGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuQU0pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvblR5cGUgPSBtVHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1vZHVsYXRpb24gaW5kZXggd2hpY2ggaXMgaW4gZXNzZW5jZSB0aGUgZGVwdGggb3IgYW1vdW50IG9mIHRoZSBtb2R1bGF0aW9uLiBJbiBvdGhlciB0ZXJtcyBpdCBpcyB0aGVcblx0XHQgKiByYXRpbyBvZiB0aGUgZnJlcXVlbmN5IG9mIHRoZSBtb2R1bGF0aW5nIHNpZ25hbCAobWYpIHRvIHRoZSBhbXBsaXR1ZGUgb2YgdGhlXG5cdFx0ICogbW9kdWxhdGluZyBzaWduYWwgKG1hKSAtLSBhcyBpbiBtYS9tZi5cblx0XHQgKiBTZWUgVG9uZS5GTU9zY2lsbGF0b3IgZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQHNpZ25hbFxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25JbmRleFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvbkluZGV4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLm1vZHVsYXRpb25JbmRleDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgY2FycmllciBhbmQgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9ycy5cblx0XHQgKiAgQSBoYXJtb25pY2l0eSBvZiAxIGdpdmVzIGJvdGggb3NjaWxsYXRvcnMgdGhlIHNhbWUgZnJlcXVlbmN5LlxuXHRcdCAqICBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLiBTZWUgVG9uZS5BTU9zY2lsbGF0b3Igb3IgVG9uZS5GTU9zY2lsbGF0b3Jcblx0XHQgKiAgZm9yIG1vcmUgaW5mby5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogIEBzaWduYWxcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBoYXJtb25pY2l0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnaGFybW9uaWNpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSB8fCB0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IuaGFybW9uaWNpdHk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtb2R1bGF0aW9uRnJlcXVlbmN5IFNpZ25hbCBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqIChvbmx5IGlmIHRoZSBvc2NpbGxhdG9yIHR5cGUgaXMgc2V0IHRvIHB3bSkuIFNlZVxuXHRcdCAqIFRvbmUuUFdNT3NjaWxsYXRvciBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQHNpZ25hbFxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25GcmVxdWVuY3lcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBvbW5pT3NjID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3IoNDQwLCBcInB3bVwiKTtcblx0XHQgKiAvL2NhbiBhY2Nlc3MgdGhlIG1vZHVsYXRpb25GcmVxdWVuY3kgYXR0cmlidXRlIG9ubHkgaWYgdHlwZSA9PT0gXCJwd21cIlxuXHRcdCAqIG9tbmlPc2MubW9kdWxhdGlvbkZyZXF1ZW5jeS52YWx1ZSA9IDAuMjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ21vZHVsYXRpb25GcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5QV00pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLm1vZHVsYXRpb25GcmVxdWVuY3k7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5PbW5pT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVR5cGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9tbmlPc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJhc2UtY2xhc3MgZm9yIGFsbCBpbnN0cnVtZW50c1xuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5JbnN0cnVtZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvdXRwdXQgYW5kIHZvbHVtZSB0cmltaW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogc291cmNlLnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEtlZXAgdHJhY2sgb2YgYWxsIGV2ZW50cyBzY2hlZHVsZWQgdG8gdGhlIHRyYW5zcG9ydFxuXHRcdFx0ICogd2hlbiB0aGUgaW5zdHJ1bWVudCBpcyAnc3luY2VkJ1xuXHRcdFx0ICogQHR5cGUge0FycmF5PE51bWJlcj59XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzID0gW107XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5JbnN0cnVtZW50LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgYXR0cmlidXRlc1xuXHRcdCAqICBAdHlwZSB7b2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LmRlZmF1bHRzID0ge1xuXHQgICAgICAgIC8qKiB0aGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMgKi9cblx0ICAgICAgICAndm9sdW1lJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBub3RlIHRoZSBub3RlIHRvIHRyaWdnZXJcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRvIHRyaWdnZXIgdGhlIG50b2Vcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgdG8gdHJpZ2dlciB0aGUgbm90ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gVG9uZS5ub09wO1xuXHQgICAgLyoqXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gd2hlbiB0byB0cmlnZ2VyIHRoZSByZWxlYXNlXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gVG9uZS5ub09wO1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBpbnN0cnVtZW50LnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogaW5zdHJ1bWVudC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnQzQnLCAnOG4nLCAwKVxuXHRcdCAqIGluc3RydW1lbnQudHJpZ2dlckF0dGFja1JlbGVhc2UoJ0U0JywgJzhuJywgJzhuJylcblx0XHQgKiBpbnN0cnVtZW50LnRyaWdnZXJBdHRhY2tSZWxlYXNlKCdHNCcsICc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogV3JhcCB0aGUgZ2l2ZW4gbWV0aG9kIHNvIHRoYXQgaXQgY2FuIGJlIHN5bmNocm9uaXplZFxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2QgV2hpY2ggbWV0aG9kIHRvIHdyYXAgYW5kIHN5bmNcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWVQb3NpdGlvbiBXaGF0IHBvc2l0aW9uIHRoZSB0aW1lIGFyZ3VtZW50IGFwcGVhcnMgaW5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5fc3luY01ldGhvZCA9IGZ1bmN0aW9uIChtZXRob2QsIHRpbWVQb3NpdGlvbikge1xuXHQgICAgICAgIHZhciBvcmlnaW5hbE1ldGhvZCA9IHRoaXNbJ19vcmlnaW5hbF8nICsgbWV0aG9kXSA9IHRoaXNbbWV0aG9kXTtcblx0ICAgICAgICB0aGlzW21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgdmFyIHRpbWUgPSBhcmdzW3RpbWVQb3NpdGlvbl07XG5cdCAgICAgICAgICAgIHZhciBpZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgICAgICBhcmdzW3RpbWVQb3NpdGlvbl0gPSB0O1xuXHQgICAgICAgICAgICAgICAgb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cy5wdXNoKGlkKTtcblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVW5zeW5jIHRoZSBpbnN0cnVtZW50IGZyb20gdGhlIFRyYW5zcG9ydFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihpZCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzID0gW107XG5cdCAgICAgICAgaWYgKHRoaXMuX29yaWdpbmFsX3RyaWdnZXJBdHRhY2spIHtcblx0ICAgICAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrID0gdGhpcy5fb3JpZ2luYWxfdHJpZ2dlckF0dGFjaztcblx0ICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSA9IHRoaXMuX29yaWdpbmFsX3RyaWdnZXJSZWxlYXNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrIGFuZCB0aGVuIHRoZSByZWxlYXNlIGFmdGVyIHRoZSBkdXJhdGlvbi5cblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byB0cmlnZ2VyLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgbm90ZSBzaG91bGQgYmUgaGVsZCBmb3IgYmVmb3JlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJpbmcgdGhlIHJlbGVhc2UuIFRoaXMgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddICBXaGVuIHRoZSBub3RlIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IHRoZSBub3RlIHNob3VsZCBiZSB0cmlnZ2VyZWQgYXQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgXCJDNFwiIGZvciB0aGUgZHVyYXRpb24gb2YgYW4gOHRoIG5vdGVcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGUsIGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sobm90ZSwgdGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsndm9sdW1lJ10pO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnVuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuSW5zdHJ1bWVudDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUaGlzIGlzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIG90aGVyIG1vbm9waG9uaWMgaW5zdHJ1bWVudHMgdG8gXG5cdFx0ICogICAgICAgICAgZXh0ZW5kLiBJTVBPUlRBTlQ6IEl0IGRvZXMgbm90IG1ha2UgYW55IHNvdW5kIG9uIGl0cyBvd24gYW5kXG5cdFx0ICogICAgICAgICAgc2hvdWxkbid0IGJlIGRpcmVjdGx5IGluc3RhbnRpYXRlZC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Nb25vcGhvbmljLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2xpZGUgdGltZSBiZXR3ZWVuIG5vdGVzLiBcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucG9ydGFtZW50byA9IG9wdGlvbnMucG9ydGFtZW50bztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1vbm9waG9uaWMsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5kZWZhdWx0cyA9IHsgJ3BvcnRhbWVudG8nOiAwIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrIG9mIHRoZSBub3RlIG9wdGlvbmFsbHkgd2l0aCBhIGdpdmVuIHZlbG9jaXR5LiBcblx0XHQgKiAgXG5cdFx0ICogIFxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHRyaWdnZXIuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIFdoZW4gdGhlIG5vdGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB2ZWxvY2l0eSBUaGUgdmVsb2NpdHkgc2NhbGVyIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVzIGhvdyBcImxvdWRcIiB0aGUgbm90ZSBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9waG9uaWN9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrKFwiQzRcIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIHRoZSBub3RlIGEgaGFsZiBzZWNvbmQgZnJvbSBub3cgYXQgaGFsZiB2ZWxvY2l0eVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2soXCJDNFwiLCBcIiswLjVcIiwgMC41KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMuc2V0Tm90ZShub3RlLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIElmIG5vIHRpbWUgaXMgZ2l2ZW4sIHRoZSByZWxlYXNlIGhhcHBlbnMgaW1tZWRpYXRseVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vcGhvbmljfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc3ludGgudHJpZ2dlclJlbGVhc2UoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBvdmVycmlkZSB0aGlzIG1ldGhvZCB3aXRoIHRoZSBhY3R1YWwgbWV0aG9kXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBvdmVycmlkZSB0aGlzIG1ldGhvZCB3aXRoIHRoZSBhY3R1YWwgbWV0aG9kXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBsZXZlbCBvZiB0aGUgb3V0cHV0IGF0IHRoZSBnaXZlbiB0aW1lLiBNZWFzdXJlc1xuXHRcdCAqICB0aGUgZW52ZWxvcGUocykgdmFsdWUgYXQgdGhlIHRpbWUuIFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gcXVlcnkgdGhlIGVudmVsb3BlIHZhbHVlXG5cdFx0ICogIEByZXR1cm4ge05vcm1hbFJhbmdlfSBUaGUgb3V0cHV0IGxldmVsIGJldHdlZW4gMC0xXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmdldExldmVsQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZW52ZWxvcGUuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gSWYgbm8gdGltZSBpcyBnaXZlbiwgdGhlIG5vdGVcblx0XHQgKiAgd2lsbCBzZXQgaW1tZWRpYXRlbHkuIFxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gbm90ZSBUaGUgbm90ZSB0byBjaGFuZ2UgdG8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgbm90ZSBzaG91bGQgYmUgc2V0LiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub3Bob25pY30gdGhpc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jaGFuZ2UgdG8gRiM2IGluIG9uZSBxdWFydGVyIG5vdGUgZnJvbSBub3cuXG5cdFx0ICogc3ludGguc2V0Tm90ZShcIkYjNlwiLCBcIis0blwiKTtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2hhbmdlIHRvIEJiNCByaWdodCBub3dcblx0XHQgKiBzeW50aC5zZXROb3RlKFwiQmI0XCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5zZXROb3RlID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMucG9ydGFtZW50byA+IDAgJiYgdGhpcy5nZXRMZXZlbEF0VGltZSh0aW1lKSA+IDAuMDUpIHtcblx0ICAgICAgICAgICAgdmFyIHBvcnRUaW1lID0gdGhpcy50b1NlY29uZHModGhpcy5wb3J0YW1lbnRvKTtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG8obm90ZSwgcG9ydFRpbWUsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKG5vdGUsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Nb25vcGhvbmljO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuU3ludGggaXMgY29tcG9zZWQgc2ltcGx5IG9mIGEgVG9uZS5PbW5pT3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgIHJvdXRlZCB0aHJvdWdoIGEgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZS5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMS0xXzBZVzJaMUoyRVBJMzZQOGZOQ01jWkc3TjF3MUdabHVQczRvZzRldm8vcHViP3c9MTE2MyZoPTIzMVwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLlN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9tbmlPc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3Iob3B0aW9ucy5vc2NpbGxhdG9yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMub3NjaWxsYXRvci5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIG9zY2lsbGF0b3JzIHRvIHRoZSBvdXRwdXRcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuY2hhaW4odGhpcy5lbnZlbG9wZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICd0cmlhbmdsZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4xLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAuMyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAxXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIC8vdGhlIGVudmVsb3Blc1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIC8vaWYgdGhlcmUgaXMgbm8gcmVsZWFzZSBwb3J0aW9uLCBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgICAgaWYgKHRoaXMuZW52ZWxvcGUuc3VzdGFpbiA9PT0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5hdHRhY2sgKyB0aGlzLmVudmVsb3BlLmRlY2F5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgcmVsZWFzZSBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEFNU3ludGggdXNlcyB0aGUgb3V0cHV0IG9mIG9uZSBUb25lLlN5bnRoIHRvIG1vZHVsYXRlIHRoZVxuXHRcdCAqICAgICAgICAgIGFtcGxpdHVkZSBvZiBhbm90aGVyIFRvbmUuU3ludGguIFRoZSBoYXJtb25pY2l0eSAodGhlIHJhdGlvIGJldHdlZW5cblx0XHQgKiAgICAgICAgICB0aGUgdHdvIHNpZ25hbHMpIGFmZmVjdHMgdGhlIHRpbWJyZSBvZiB0aGUgb3V0cHV0IHNpZ25hbCBncmVhdGx5LlxuXHRcdCAqICAgICAgICAgIFJlYWQgbW9yZSBhYm91dCBBbXBsaXR1ZGUgTW9kdWxhdGlvbiBTeW50aGVzaXMgb25cblx0XHQgKiAgICAgICAgICBbU291bmRPblNvdW5kXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA0MDQxMDM2NTMvaHR0cDovL3d3dy5zb3VuZG9uc291bmQuY29tOjgwL3Nvcy9tYXIwMC9hcnRpY2xlcy9zeW50aHNlY3JldHMuaHRtKS5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMVRRdThFZDRpRnIxWVRMS3BCM1UxX2h1ci1Vd0JyaDVnZEJYYzhCeGZHS3cvcHViP3c9MTAwOSZoPTQ1N1wiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuQU1TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuQU1TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIgdm9pY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3ludGh9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBuZXcgVG9uZS5TeW50aCgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyJ3Mgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSB0aGlzLl9jYXJyaWVyLm9zY2lsbGF0b3I7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIncyBlbnZlbG9wZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IHRoaXMuX2NhcnJpZXIuZW52ZWxvcGUuc2V0KG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3Igdm9pY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3ludGh9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLlN5bnRoKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yJ3Mgb3NjaWxsYXRvciB3aGljaCBpcyBhcHBsaWVkXG5cdFx0XHQgKiAgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSB0aGlzLl9tb2R1bGF0b3Iub3NjaWxsYXRvci5zZXQob3B0aW9ucy5tb2R1bGF0aW9uKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkVudmVsb3BlID0gdGhpcy5fbW9kdWxhdG9yLmVudmVsb3BlLnNldChvcHRpb25zLm1vZHVsYXRpb25FbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDQ0MCwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBpbiBjZW50c1xuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcy4gQSBoYXJtb25pY2l0eSBvZlxuXHRcdFx0ICogIDEgaXMgbm8gY2hhbmdlLiBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdm9pY2UxIGFuIG9jdGF2ZSBiZWxvdyB2b2ljZTBcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29udmVydCB0aGUgLTEsMSBvdXRwdXQgdG8gMCwxXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQXVkaW9Ub0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIG1vZHVsYXRpb24gaGFwcGVuc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29udHJvbCB0aGUgdHdvIHZvaWNlcyBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5mYW4odGhpcy5fY2Fycmllci5kZXR1bmUsIHRoaXMuX21vZHVsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jaGFpbih0aGlzLl9tb2R1bGF0aW9uU2NhbGUsIHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY2hhaW4odGhpcy5fbW9kdWxhdGlvbk5vZGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BTVN5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAzLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMDEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uJzogeyAndHlwZSc6ICdzcXVhcmUnIH0sXG5cdCAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMCxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdHJpZ2dlciB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgb2NjdXJcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BTVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICAvL3RoZSBwb3J0IGdsaWRlXG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vdGhlIGVudmVsb3Blc1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCByZWxlYXNlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BTVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbicsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25FbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BTVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTW9ub1N5bnRoIGlzIGNvbXBvc2VkIG9mIG9uZSBvc2NpbGxhdG9yLCBvbmUgZmlsdGVyLCBhbmQgdHdvIGVudmVsb3Blcy5cblx0XHQgKiAgICAgICAgICBUaGUgYW1wbGl0dWRlIG9mIHRoZSBUb25lLk9zY2lsbGF0b3IgYW5kIHRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZVxuXHRcdCAqICAgICAgICAgIFRvbmUuRmlsdGVyIGFyZSBjb250cm9sbGVkIGJ5IFRvbmUuRW52ZWxvcGVzLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xZ2FZMURGOV9IemtvZHFmOEpJMUNnMlZaZndTRWxwRlFmSTk0SVF3YWQzOC9wdWI/dz05MjQmaD0yNDBcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5Nb25vU3ludGgoe1xuXHRcdCAqIFx0XCJvc2NpbGxhdG9yXCIgOiB7XG5cdFx0ICogXHRcdFwidHlwZVwiIDogXCJzcXVhcmVcIlxuXHRcdCAqICB9LFxuXHRcdCAqICBcImVudmVsb3BlXCIgOiB7XG5cdFx0ICogIFx0XCJhdHRhY2tcIiA6IDAuMVxuXHRcdCAqICB9XG5cdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1vbm9TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT21uaU9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihvcHRpb25zLm9zY2lsbGF0b3IpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5vc2NpbGxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5vc2NpbGxhdG9yLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlsdGVyLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmlsdGVyID0gbmV3IFRvbmUuRmlsdGVyKG9wdGlvbnMuZmlsdGVyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlsdGVyIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZyZXF1ZW5jeUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZSA9IG5ldyBUb25lLkZyZXF1ZW5jeUVudmVsb3BlKG9wdGlvbnMuZmlsdGVyRW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBvc2NpbGxhdG9ycyB0byB0aGUgb3V0cHV0XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmNoYWluKHRoaXMuZmlsdGVyLCB0aGlzLmVudmVsb3BlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBmaWx0ZXIgZW52ZWxvcGVcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlLmNvbm5lY3QodGhpcy5maWx0ZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZmlsdGVyJyxcblx0ICAgICAgICAgICAgJ2ZpbHRlckVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9ub1N5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogJ0M0Jyxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc3F1YXJlJyB9LFxuXHQgICAgICAgICdmaWx0ZXInOiB7XG5cdCAgICAgICAgICAgICdRJzogNixcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnbG93cGFzcycsXG5cdCAgICAgICAgICAgICdyb2xsb2ZmJzogLTI0XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4xLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAuOSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAxXG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnZmlsdGVyRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjA2LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjIsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMC41LFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDIsXG5cdCAgICAgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICAgICAnb2N0YXZlcyc6IDcsXG5cdCAgICAgICAgICAgICdleHBvbmVudCc6IDJcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBhdHRhY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub1N5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuZW52ZWxvcGUuc3VzdGFpbiA9PT0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5hdHRhY2sgKyB0aGlzLmVudmVsb3BlLmRlY2F5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgcmVsZWFzZSBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub1N5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub1N5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZmlsdGVyJyxcblx0ICAgICAgICAgICAgJ2ZpbHRlckVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZpbHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9ub1N5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRHVvU3ludGggaXMgYSBtb25vcGhvbmljIHN5bnRoIGNvbXBvc2VkIG9mIHR3b1xuXHRcdCAqICAgICAgICAgIE1vbm9TeW50aHMgcnVuIGluIHBhcmFsbGVsIHdpdGggY29udHJvbCBvdmVyIHRoZVxuXHRcdCAqICAgICAgICAgIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSB0d28gdm9pY2VzIGFuZCB2aWJyYXRvIGVmZmVjdC5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMWJMNEdYdmZSTU1scVM3WHlCbTlDakw5S0pQU1VLYmNkQk5wcU9sa0ZMeGsvcHViP3c9MTAxMiZoPTQ0OFwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBkdW9TeW50aCA9IG5ldyBUb25lLkR1b1N5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBkdW9TeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuRHVvU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmaXJzdCB2b2ljZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1vbm9TeW50aH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9pY2UwID0gbmV3IFRvbmUuTW9ub1N5bnRoKG9wdGlvbnMudm9pY2UwKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHNlY29uZCB2b2ljZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1vbm9TeW50aH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9pY2UxID0gbmV3IFRvbmUuTW9ub1N5bnRoKG9wdGlvbnMudm9pY2UxKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMS52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZpYnJhdG8gTEZPLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdmlicmF0byA9IG5ldyBUb25lLkxGTyhvcHRpb25zLnZpYnJhdG9SYXRlLCAtNTAsIDUwKTtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvLnN0YXJ0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiB0aGUgdmlicmF0byBmcmVxdWVuY3lcblx0XHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZpYnJhdG9SYXRlID0gdGhpcy5fdmlicmF0by5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHZpYnJhdG8gZ2FpblxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG9HYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnZpYnJhdG9BbW91bnQsIFRvbmUuVHlwZS5Qb3NpdGl2ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgYW1vdW50IG9mIHZpYnJhdG9cblx0XHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmlicmF0b0Ftb3VudCA9IHRoaXMuX3ZpYnJhdG9HYWluLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZyZXF1ZW5jeSBjb250cm9sXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbCg0NDAsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSByYXRpbyBiZXR3ZWVuIHRoZSB0d28gdm9pY2VzLiBBIGhhcm1vbmljaXR5IG9mXG5cdFx0XHQgKiAgMSBpcyBubyBjaGFuZ2UuIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy9waXRjaCB2b2ljZTEgYW4gb2N0YXZlIGJlbG93IHZvaWNlMFxuXHRcdFx0ICogZHVvU3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIHR3byB2b2ljZXMgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLnZvaWNlMC5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMudm9pY2UxLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0by5jb25uZWN0KHRoaXMuX3ZpYnJhdG9HYWluKTtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2Fpbi5mYW4odGhpcy52b2ljZTAuZGV0dW5lLCB0aGlzLnZvaWNlMS5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3ZvaWNlMCcsXG5cdCAgICAgICAgICAgICd2b2ljZTEnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3ZpYnJhdG9BbW91bnQnLFxuXHQgICAgICAgICAgICAndmlicmF0b1JhdGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5EdW9TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2aWJyYXRvQW1vdW50JzogMC41LFxuXHQgICAgICAgICd2aWJyYXRvUmF0ZSc6IDUsXG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMS41LFxuXHQgICAgICAgICd2b2ljZTAnOiB7XG5cdCAgICAgICAgICAgICd2b2x1bWUnOiAtMTAsXG5cdCAgICAgICAgICAgICdwb3J0YW1lbnRvJzogMCxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgICAgICdmaWx0ZXJFbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAgICAgJ2RlY2F5JzogMCxcblx0ICAgICAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAgICAgJ2RlY2F5JzogMCxcblx0ICAgICAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICd2b2ljZTEnOiB7XG5cdCAgICAgICAgICAgICd2b2x1bWUnOiAtMTAsXG5cdCAgICAgICAgICAgICdwb3J0YW1lbnRvJzogMCxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgICAgICdmaWx0ZXJFbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAgICAgJ2RlY2F5JzogMCxcblx0ICAgICAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAgICAgJ2RlY2F5JzogMCxcblx0ICAgICAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVzXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBhdHRhY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRHVvU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3Blc1xuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgcmVsZWFzZSBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRHVvU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBsZXZlbCBvZiB0aGUgb3V0cHV0IGF0IHRoZSBnaXZlbiB0aW1lLiBNZWFzdXJlc1xuXHRcdCAqICB0aGUgZW52ZWxvcGUocykgdmFsdWUgYXQgdGhlIHRpbWUuIFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gcXVlcnkgdGhlIGVudmVsb3BlIHZhbHVlXG5cdFx0ICogIEByZXR1cm4ge05vcm1hbFJhbmdlfSBUaGUgb3V0cHV0IGxldmVsIGJldHdlZW4gMC0xXG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLnByb3RvdHlwZS5nZXRMZXZlbEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuICh0aGlzLnZvaWNlMC5nZXRMZXZlbEF0VGltZSh0aW1lKSArIHRoaXMudm9pY2UxLmdldExldmVsQXRUaW1lKHRpbWUpKSAvIDI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkR1b1N5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3ZvaWNlMCcsXG5cdCAgICAgICAgICAgICd2b2ljZTEnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3ZpYnJhdG9BbW91bnQnLFxuXHQgICAgICAgICAgICAndmlicmF0b1JhdGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMudm9pY2UwID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvaWNlMS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG9HYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZpYnJhdG9BbW91bnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMudmlicmF0b0Ftb3VudCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52aWJyYXRvUmF0ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRHVvU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgRk1TeW50aCBpcyBjb21wb3NlZCBvZiB0d28gVG9uZS5TeW50aHMgd2hlcmUgb25lIFRvbmUuU3ludGggbW9kdWxhdGVzXG5cdFx0ICogICAgICAgICAgdGhlIGZyZXF1ZW5jeSBvZiBhIHNlY29uZCBUb25lLlN5bnRoLiBBIGxvdCBvZiBzcGVjdHJhbCBjb250ZW50XG5cdFx0ICogICAgICAgICAgY2FuIGJlIGV4cGxvcmVkIHVzaW5nIHRoZSBtb2R1bGF0aW9uSW5kZXggcGFyYW1ldGVyLiBSZWFkIG1vcmUgYWJvdXRcblx0XHQgKiAgICAgICAgICBmcmVxdWVuY3kgbW9kdWxhdGlvbiBzeW50aGVzaXMgb24gU291bmQgT24gU291bmQ6IFtQYXJ0IDFdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwMzEyMzcwNC9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL2FwcjAwL2FydGljbGVzL3N5bnRoc2VjcmV0cy5odG0pLCBbUGFydCAyXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA0MDMxMTU4MzUvaHR0cDovL3d3dy5zb3VuZG9uc291bmQuY29tL3Nvcy9tYXkwMC9hcnRpY2xlcy9zeW50aC5odG0pLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xaDBQVURaWFBnaTRJa3g2YlZUNm9uY3JZUExsdUZLeTdsajUzcHV4ai1ETS9wdWI/dz05MDImaD00NjJcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZm1TeW50aCA9IG5ldyBUb25lLkZNU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIGZtU3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNVwiLCBcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuRk1TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIgdm9pY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3ludGh9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBuZXcgVG9uZS5TeW50aChvcHRpb25zLmNhcnJpZXIpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyJ3Mgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSB0aGlzLl9jYXJyaWVyLm9zY2lsbGF0b3I7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIncyBlbnZlbG9wZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gdGhpcy5fY2Fycmllci5lbnZlbG9wZS5zZXQob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuU3ludGgob3B0aW9ucy5tb2R1bGF0b3IpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvcidzIG9zY2lsbGF0b3Igd2hpY2ggaXMgYXBwbGllZFxuXHRcdFx0ICogIHRvIHRoZSBhbXBsaXR1ZGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uID0gdGhpcy5fbW9kdWxhdG9yLm9zY2lsbGF0b3Iuc2V0KG9wdGlvbnMubW9kdWxhdGlvbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkVudmVsb3BlID0gdGhpcy5fbW9kdWxhdG9yLmVudmVsb3BlLnNldChvcHRpb25zLm1vZHVsYXRpb25FbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoNDQwLCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSByYXRpbyBiZXR3ZWVuIHRoZSB0d28gdm9pY2VzLiBBIGhhcm1vbmljaXR5IG9mXG5cdFx0XHQgKiAgMSBpcyBubyBjaGFuZ2UuIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy9waXRjaCB2b2ljZTEgYW4gb2N0YXZlIGJlbG93IHZvaWNlMFxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGlvbiBpbmRleCB3aGljaCBlc3NlbnRpYWxseSB0aGUgZGVwdGggb3IgYW1vdW50IG9mIHRoZSBtb2R1bGF0aW9uLiBJdCBpcyB0aGVcblx0XHRcdCAqICByYXRpbyBvZiB0aGUgZnJlcXVlbmN5IG9mIHRoZSBtb2R1bGF0aW5nIHNpZ25hbCAobWYpIHRvIHRoZSBhbXBsaXR1ZGUgb2YgdGhlXG5cdFx0XHQgKiAgbW9kdWxhdGluZyBzaWduYWwgKG1hKSAtLSBhcyBpbiBtYS9tZi5cblx0XHRcdCAqXHRAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKlx0QHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXggPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLm1vZHVsYXRpb25JbmRleCk7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXgudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIG1vZHVsYXRpb24gaGFwcGVuc1xuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKDApO1xuXHQgICAgICAgIC8vY29udHJvbCB0aGUgdHdvIHZvaWNlcyBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLm1vZHVsYXRpb25JbmRleCwgdGhpcy5fbW9kdWxhdGlvbk5vZGUpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmZhbih0aGlzLl9jYXJyaWVyLmRldHVuZSwgdGhpcy5fbW9kdWxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNvbm5lY3QodGhpcy5fbW9kdWxhdGlvbk5vZGUuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jyxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbicsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRk1TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMyxcblx0ICAgICAgICAnbW9kdWxhdGlvbkluZGV4JzogMTAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4wMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ21vZHVsYXRpb24nOiB7ICd0eXBlJzogJ3NxdWFyZScgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC41LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0dHJpZ2dlciB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgb2NjdXJcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRk1TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vdGhlIGVudmVsb3Blc1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCByZWxlYXNlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZNU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRk1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25FbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GTVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTWVtYnJhbmVTeW50aCBtYWtlcyBraWNrIGFuZCB0b20gc291bmRzIHVzaW5nIGEgc2luZ2xlIG9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgICB3aXRoIGFuIGFtcGxpdHVkZSBlbnZlbG9wZSBhbmQgZnJlcXVlbmN5IHJhbXAuIEEgVG9uZS5PbW5pT3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgIGlzIHJvdXRlZCB0aHJvdWdoIGEgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSB0byB0aGUgb3V0cHV0LiBUaGUgZHJ1bVxuXHRcdCAqICAgICAgICAgIHF1YWxpdHkgb2YgdGhlIHNvdW5kIGNvbWVzIGZyb20gdGhlIGZyZXF1ZW5jeSBlbnZlbG9wZSBhcHBsaWVkXG5cdFx0ICogICAgICAgICAgZHVyaW5nIFRvbmUuTWVtYnJhbmVTeW50aC50cmlnZ2VyQXR0YWNrKG5vdGUpLiBUaGUgZnJlcXVlbmN5IGVudmVsb3BlXG5cdFx0ICogICAgICAgICAgc3RhcnRzIGF0IDxjb2RlPm5vdGUgKiAub2N0YXZlczwvY29kZT4gYW5kIHJhbXBzIHRvIDxjb2RlPm5vdGU8L2NvZGU+XG5cdFx0ICogICAgICAgICAgb3ZlciB0aGUgZHVyYXRpb24gb2YgPGNvZGU+LnBpdGNoRGVjYXk8L2NvZGU+LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLk1lbWJyYW5lU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzJcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1lbWJyYW5lU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9tbmlPc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3Iob3B0aW9ucy5vc2NpbGxhdG9yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyB0aGUgcGl0Y2ggZW52ZWxvcGUgcmFtcHMuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSB0aGUgZnJlcXVlbmN5IGVudmVsb3BlIHRha2VzLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5waXRjaERlY2F5ID0gb3B0aW9ucy5waXRjaERlY2F5O1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5jaGFpbih0aGlzLmVudmVsb3BlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1lbWJyYW5lU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwaXRjaERlY2F5JzogMC4wNSxcblx0ICAgICAgICAnb2N0YXZlcyc6IDEwLFxuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjQsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMC4wMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAxLjQsXG5cdCAgICAgICAgICAgICdhdHRhY2tDdXJ2ZSc6ICdleHBvbmVudGlhbCdcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHRpbWUgd2l0aCB0aGUgZ2l2ZW4gdmVsb2NpdHkuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICB0aGUgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICAgICB0aGUgdGltZSwgaWYgbm90IGdpdmVuIGlzIG5vd1xuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB2ZWxvY2l0eSBkZWZhdWx0cyB0byAxXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lbWJyYW5lU3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAga2ljay50cmlnZ2VyQXR0YWNrKDYwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBub3RlID0gdGhpcy50b0ZyZXF1ZW5jeShub3RlKTtcblx0ICAgICAgICB2YXIgbWF4Tm90ZSA9IG5vdGUgKiB0aGlzLm9jdGF2ZXM7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZShtYXhOb3RlLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5LmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUobm90ZSwgdGltZSArIHRoaXMudG9TZWNvbmRzKHRoaXMucGl0Y2hEZWNheSkpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIG5vdGUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIHJlbGVhc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVtYnJhbmVTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZW1icmFuZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWVtYnJhbmVTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEluaGFybW9uaWMgcmF0aW8gb2YgZnJlcXVlbmNpZXMgYmFzZWQgb24gdGhlIFJvbGFuZCBUUi04MDhcblx0XHQgKiAgVGFrZW4gZnJvbSBodHRwczovL2Njcm1hLnN0YW5mb3JkLmVkdS9wYXBlcnMvdHItODA4LWN5bWJhbC1waHlzaWNhbGx5LWluZm9ybWVkLWNpcmN1aXQtYmVuZGFibGUtZGlnaXRhbC1tb2RlbFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBpbmhhcm1SYXRpb3MgPSBbXG5cdCAgICAgICAgMSxcblx0ICAgICAgICAxLjQ4Myxcblx0ICAgICAgICAxLjkzMixcblx0ICAgICAgICAyLjU0Nixcblx0ICAgICAgICAyLjYzLFxuXHQgICAgICAgIDMuODk3XG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBoaWdobHkgaW5oYXJtb25pYyBhbmQgc3BlY3RyYWxseSBjb21wbGV4IHNvdXJjZSB3aXRoIGEgaGlnaHBhc3MgZmlsdGVyXG5cdFx0ICogICAgICAgICAgYW5kIGFtcGxpdHVkZSBlbnZlbG9wZSB3aGljaCBpcyBnb29kIGZvciBtYWtpbmcgbWV0YWxvcGhvbmUgc291bmRzLiBCYXNlZFxuXHRcdCAqICAgICAgICAgIG9uIEN5bWJhbFN5bnRoIGJ5IFtAcG9seXJoeXRobWF0aWNdKGh0dHBzOi8vZ2l0aHViLmNvbS9wb2x5cmh5dGhtYXRpYykuXG5cdFx0ICogICAgICAgICAgSW5zcGlyYXRpb24gZnJvbSBbU291bmQgb24gU291bmRdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDYxMDE0MzkyNC9odHRwczovL3d3dy5zb3VuZG9uc291bmQuY29tL3Nvcy9qdWwwMi9hcnRpY2xlcy9zeW50aHNlY3JldHMwNzAyLmFzcCkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgYXZhaWxibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1ldGFsU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIGN5bWJhbFxuXHRcdFx0ICogIEB0eXBlICB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXJyYXkgb2YgRk1Pc2NpbGxhdG9yc1xuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBtdWx0aXBsaWVyc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZnJlcU11bHRpcGxpZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBmb3IgdGhlIGJvZHlcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZSA9IG5ldyBUb25lLkdhaW4oMCkuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaGlnaHBhc3MgdGhlIG91dHB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faGlnaHBhc3MgPSBuZXcgVG9uZS5GaWx0ZXIoe1xuXHQgICAgICAgICAgICAndHlwZSc6ICdoaWdocGFzcycsXG5cdCAgICAgICAgICAgICdRJzogLTMuMDEwMjk5OTU2NjM5ODEyNVxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5fYW1wbGl0dWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyB0aGUgaGlnaHBhc3Ncblx0XHRcdCAqICBmaWx0ZXIgZnJlcXVlbmN5IHJhbXBzXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTY2FsZSB0aGUgYm9keSBlbnZlbG9wZVxuXHRcdFx0ICogIGZvciB0aGUgYmFuZHBhc3Ncblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlciA9IG5ldyBUb25lLlNjYWxlKG9wdGlvbnMucmVzb25hbmNlLCA3MDAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZW52ZWxvcGUgd2hpY2ggaXMgY29ubmVjdGVkIGJvdGggdG8gdGhlXG5cdFx0XHQgKiAgYW1wbGl0dWRlIGFuZCBoaWdocGFzcyBmaWx0ZXIncyBjdXRvZmYgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkVudmVsb3BlKHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IG9wdGlvbnMuZW52ZWxvcGUuYXR0YWNrLFxuXHQgICAgICAgICAgICAnYXR0YWNrQ3VydmUnOiAnbGluZWFyJyxcblx0ICAgICAgICAgICAgJ2RlY2F5Jzogb3B0aW9ucy5lbnZlbG9wZS5kZWNheSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IG9wdGlvbnMuZW52ZWxvcGUucmVsZWFzZVxuXHQgICAgICAgIH0pLmNoYWluKHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIsIHRoaXMuX2hpZ2hwYXNzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5jb25uZWN0KHRoaXMuX2FtcGxpdHVlLmdhaW4pO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5oYXJtUmF0aW9zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBvc2MgPSBuZXcgVG9uZS5GTU9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICAgICAgJ3R5cGUnOiAnc3F1YXJlJyxcblx0ICAgICAgICAgICAgICAgICdtb2R1bGF0aW9uVHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jzogb3B0aW9ucy5oYXJtb25pY2l0eSxcblx0ICAgICAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnOiBvcHRpb25zLm1vZHVsYXRpb25JbmRleFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgb3NjLmNvbm5lY3QodGhpcy5faGlnaHBhc3MpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXSA9IG9zYztcblx0ICAgICAgICAgICAgdmFyIG11bHQgPSBuZXcgVG9uZS5NdWx0aXBseShpbmhhcm1SYXRpb3NbaV0pO1xuXHQgICAgICAgICAgICB0aGlzLl9mcmVxTXVsdGlwbGllcnNbaV0gPSBtdWx0O1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbihtdWx0LCBvc2MuZnJlcXVlbmN5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zZXQgdGhlIG9jdGF2ZXNcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NZXRhbFN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDIwMCxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMS40LFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuMlxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogNS4xLFxuXHQgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnOiAzMixcblx0ICAgICAgICAncmVzb25hbmNlJzogNDAwMCxcblx0ICAgICAgICAnb2N0YXZlcyc6IDEuNVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2suXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICAgICAgV2hlbiB0aGUgYXR0YWNrIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSAgW3ZlbG9jaXR5PTFdICBUaGUgdmVsb2NpdHkgdGhhdCB0aGUgZW52ZWxvcGUgc2hvdWxkIGJlIHRyaWdnZXJlZCBhdC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTWV0YWxTeW50aH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWwpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmVsID0gVG9uZS5kZWZhdWx0QXJnKHZlbCwgMSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMuZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdGFydCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL2lmIHRoZSBzdXN0YWluIGlzIDAsIHN0b3AgdGhlIG9zY2lsbGF0b3IgYXMgd2VsbFxuXHQgICAgICAgIGlmICh0aGlzLmVudmVsb3BlLnN1c3RhaW4gPT09IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMuZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICBvc2Muc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5hdHRhY2sgKyB0aGlzLmVudmVsb3BlLmRlY2F5KTtcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2Ugb2YgdGhlIGVudmVsb3BlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgICAgIFdoZW4gdGhlIHJlbGVhc2Ugc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTWV0YWxTeW50aH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzLmZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogc3ludGguc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAwKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc4bicpXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyQXR0YWNrJywgMCk7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlclJlbGVhc2UnLCAwKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIG9mIHRoZSBlbnZlbG9wZSBhZnRlciB0aGUgZ2l2ZW5cblx0XHQgKiAgZHVyYXRpb24uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICBkdXJhdGlvbiAgVGhlIGR1cmF0aW9uIGJlZm9yZSB0cmlnZ2VyaW5nIHRoZSByZWxlYXNlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICAgICAgV2hlbiB0aGUgYXR0YWNrIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSAgW3ZlbG9jaXR5PTFdICBUaGUgdmVsb2NpdHkgdGhhdCB0aGUgZW52ZWxvcGUgc2hvdWxkIGJlIHRyaWdnZXJlZCBhdC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTWV0YWxTeW50aH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAoZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSh0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbW9kdWxhdGlvbkluZGV4IG9mIHRoZSBvc2NpbGxhdG9ycyB3aGljaCBtYWtlIHVwIHRoZSBzb3VyY2UuXG5cdFx0ICogIHNlZSBUb25lLkZNT3NjaWxsYXRvci5tb2R1bGF0aW9uSW5kZXhcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTWV0YWxTeW50aCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSAgbW9kdWxhdGlvbkluZGV4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZSwgJ21vZHVsYXRpb25JbmRleCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3JzWzBdLm1vZHVsYXRpb25JbmRleC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXS5tb2R1bGF0aW9uSW5kZXgudmFsdWUgPSB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgaGFybW9uaWNpdHkgb2YgdGhlIG9zY2lsbGF0b3JzIHdoaWNoIG1ha2UgdXAgdGhlIHNvdXJjZS5cblx0XHQgKiAgc2VlIFRvbmUuRk1Pc2NpbGxhdG9yLmhhcm1vbmljaXR5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk1ldGFsU3ludGgjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgIGhhcm1vbmljaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZSwgJ2hhcm1vbmljaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvcnNbMF0uaGFybW9uaWNpdHkudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0uaGFybW9uaWNpdHkudmFsdWUgPSB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBoaWdocGFzcyBmaWx0ZXIgYXR0YWNoZWQgdG8gdGhlIGVudmVsb3BlXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk1ldGFsU3ludGgjXG5cdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogIEBuYW1lICByZXNvbmFuY2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLCAncmVzb25hbmNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5taW4gPSB2YWw7XG5cdCAgICAgICAgICAgIHRoaXMub2N0YXZlcyA9IHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBvY3RhdmVzIGFib3ZlIHRoZSBcInJlc29uYW5jZVwiIGZyZXF1ZW5jeVxuXHRcdCAqICB0aGF0IHRoZSBmaWx0ZXIgcmFtcHMgZHVyaW5nIHRoZSBhdHRhY2svZGVjYXkgZW52ZWxvcGVcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTWV0YWxTeW50aCNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3RzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3RzO1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1heCA9IHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWluICogTWF0aC5wb3coMiwgb2N0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWV0YWxTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9mcmVxTXVsdGlwbGllcnNbaV0uZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZnJlcU11bHRpcGxpZXJzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faGlnaHBhc3MuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2hpZ2hwYXNzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZXRhbFN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTm9pc2VTeW50aCBpcyBjb21wb3NlZCBvZiBhIG5vaXNlIGdlbmVyYXRvciAoVG9uZS5Ob2lzZSksIG9uZSBmaWx0ZXIgKFRvbmUuRmlsdGVyKSxcblx0XHQgKiAgICAgICAgICBhbmQgdHdvIGVudmVsb3BlcyAoVG9uZS5FbnZlbG9wKS4gT25lIGVudmVsb3BlIGNvbnRyb2xzIHRoZSBhbXBsaXR1ZGVcblx0XHQgKiAgICAgICAgICBvZiB0aGUgbm9pc2UgYW5kIHRoZSBvdGhlciBpcyBjb250cm9scyB0aGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVyLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xcnF6dVg5ckJsaFQ1ME1SdkQyVEttbDliblpoY1ptelhGMXJmX283dmRuRS9wdWI/dz05MTgmaD0yNDJcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBub2lzZVN5bnRoID0gbmV3IFRvbmUuTm9pc2VTeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogbm9pc2VTeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTm9pc2VTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG5vaXNlIHNvdXJjZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Ob2lzZX1cblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogbm9pc2VTeW50aC5zZXQoXCJub2lzZS50eXBlXCIsIFwiYnJvd25cIik7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm5vaXNlID0gbmV3IFRvbmUuTm9pc2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgbm9pc2UgdG8gdGhlIG91dHB1dFxuXHQgICAgICAgIHRoaXMubm9pc2UuY2hhaW4odGhpcy5lbnZlbG9wZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ25vaXNlJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTm9pc2VTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdub2lzZSc6IHsgJ3R5cGUnOiAnd2hpdGUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3Blcy4gVW5saWtlIG90aGVyXG5cdFx0ICogIGluc3RydW1lbnRzLCBUb25lLk5vaXNlU3ludGggZG9lc24ndCBoYXZlIGEgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBhdHRhY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlU3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBub2lzZVN5bnRoLnRyaWdnZXJBdHRhY2soKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIC8vdGhlIGVudmVsb3Blc1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgbm9pc2Vcblx0ICAgICAgICB0aGlzLm5vaXNlLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLmVudmVsb3BlLnN1c3RhaW4gPT09IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5ub2lzZS5zdG9wKHRpbWUgPSB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5ub2lzZS5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogc3ludGguc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAwKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc4bicpXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyQXR0YWNrJywgMCk7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlclJlbGVhc2UnLCAwKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrIGFuZCB0aGVuIHRoZSByZWxlYXNlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiB0aGUgZHVyYXRpb24gb2YgdGhlIG5vdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgdGhlIHRpbWUgb2YgdGhlIGF0dGFja1xuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbm9pc2UnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5ub2lzZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5ub2lzZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTm9pc2VTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEthcnBsdXMtU3RyaW5nIHN0cmluZyBzeW50aGVzaXMuIE9mdGVuIG91dCBvZiB0dW5lLlxuXHRcdCAqICAgICAgICAgV2lsbCBjaGFuZ2Ugd2hlbiB0aGUgQXVkaW9Xb3JrZXJOb2RlIGlzIGF2YWlsYWJsZSBhY3Jvc3Ncblx0XHQgKiAgICAgICAgIGJyb3dzZXJzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHNlZSB0aGUgZGVmYXVsdHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGx1Y2t5ID0gbmV3IFRvbmUuUGx1Y2tTeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogcGx1Y2t5LnRyaWdnZXJBdHRhY2soXCJDNFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGx1Y2tTeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlBsdWNrU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk5vaXNlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ub2lzZSA9IG5ldyBUb25lLk5vaXNlKCdwaW5rJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBub2lzZSBhdCB0aGUgYXR0YWNrLlxuXHRcdFx0ICogIE5vbWluYWwgcmFuZ2Ugb2YgWzAuMSwgMjBdXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXR0YWNrTm9pc2UgPSBvcHRpb25zLmF0dGFja05vaXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBMRkNGXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTG93cGFzc0NvbWJGaWx0ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmY2YgPSBuZXcgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlcih7XG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnOiBvcHRpb25zLnJlc29uYW5jZSxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZyc6IG9wdGlvbnMuZGFtcGVuaW5nXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJlc29uYW5jZSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IHRoaXMuX2xmY2YucmVzb25hbmNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkYW1wZW5pbmcgY29udHJvbC4gaS5lLiB0aGUgbG93cGFzcyBmaWx0ZXIgZnJlcXVlbmN5IG9mIHRoZSBjb21iIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSB0aGlzLl9sZmNmLmRhbXBlbmluZztcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fbm9pc2UuY29ubmVjdCh0aGlzLl9sZmNmKTtcblx0ICAgICAgICB0aGlzLl9sZmNmLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QbHVja1N5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2F0dGFja05vaXNlJzogMSxcblx0ICAgICAgICAnZGFtcGVuaW5nJzogNDAwMCxcblx0ICAgICAgICAncmVzb25hbmNlJzogMC43XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIG5vdGUuXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBub3RlIFRoZSBub3RlIHRvIHRyaWdnZXIuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBub3RlIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsdWNrU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGx1Y2tTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlLCB0aW1lKSB7XG5cdCAgICAgICAgbm90ZSA9IHRoaXMudG9GcmVxdWVuY3kobm90ZSk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBkZWxheUFtb3VudCA9IDEgLyBub3RlO1xuXHQgICAgICAgIHRoaXMuX2xmY2YuZGVsYXlUaW1lLnNldFZhbHVlQXRUaW1lKGRlbGF5QW1vdW50LCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl9ub2lzZS5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9ub2lzZS5zdG9wKHRpbWUgKyBkZWxheUFtb3VudCAqIHRoaXMuYXR0YWNrTm9pc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGx1Y2tTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZmNmLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ub2lzZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZjZiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBsdWNrU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Qb2x5U3ludGggaGFuZGxlcyB2b2ljZSBjcmVhdGlvbiBhbmQgYWxsb2NhdGlvbiBmb3IgYW55XG5cdFx0ICogICAgICAgICAgaW5zdHJ1bWVudHMgcGFzc2VkIGluIGFzIHRoZSBzZWNvbmQgcGFyYW10ZXIuIFBvbHlTeW50aCBpc1xuXHRcdCAqICAgICAgICAgIG5vdCBhIHN5bnRoZXNpemVyIGJ5IGl0c2VsZiwgaXQgbWVyZWx5IG1hbmFnZXMgdm9pY2VzIG9mXG5cdFx0ICogICAgICAgICAgb25lIG9mIHRoZSBvdGhlciB0eXBlcyBvZiBzeW50aHMsIGFsbG93aW5nIGFueSBvZiB0aGVcblx0XHQgKiAgICAgICAgICBtb25vcGhvbmljIHN5bnRoZXNpemVycyB0byBiZSBwb2x5cGhvbmljLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge251bWJlcnxPYmplY3R9IFtwb2x5cGhvbnk9NF0gVGhlIG51bWJlciBvZiB2b2ljZXMgdG8gY3JlYXRlXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb259IFt2b2ljZT1Ub25lLlN5bnRoXSBUaGUgY29uc3RydWN0b3Igb2YgdGhlIHZvaWNlc1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VzIFRvbmUuU3ludGggYnkgZGVmYXVsdC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2EgcG9seXN5bnRoIGNvbXBvc2VkIG9mIDYgVm9pY2VzIG9mIFN5bnRoXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuUG9seVN5bnRoKDYsIFRvbmUuU3ludGgpLnRvTWFzdGVyKCk7XG5cdFx0ICogLy9zZXQgdGhlIGF0dHJpYnV0ZXMgdXNpbmcgdGhlIHNldCBpbnRlcmZhY2Vcblx0XHQgKiBzeW50aC5zZXQoXCJkZXR1bmVcIiwgLTEyMDApO1xuXHRcdCAqIC8vcGxheSBhIGNob3JkXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoW1wiQzRcIiwgXCJFNFwiLCBcIkE0XCJdLCBcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGggPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncG9seXBob255Jyxcblx0ICAgICAgICAgICAgJ3ZvaWNlJ1xuXHQgICAgICAgIF0sIFRvbmUuUG9seVN5bnRoKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuSW5zdHJ1bWVudC5kZWZhdWx0cyk7XG5cdCAgICAgICAgLy9tYXggcG9seXBob255XG5cdCAgICAgICAgb3B0aW9ucy5wb2x5cGhvbnkgPSBNYXRoLm1pbihUb25lLlBvbHlTeW50aC5NQVhfUE9MWVBIT05ZLCBvcHRpb25zLnBvbHlwaG9ueSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFycmF5IG9mIHZvaWNlc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9pY2VzID0gbmV3IEFycmF5KG9wdGlvbnMucG9seXBob255KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcXVldWUgb2Ygdm9pY2VzIHdpdGggZGF0YSBhYm91dCBsYXN0IHRyaWdnZXJcblx0XHRcdCAqICBhbmQgdGhlIHRyaWdnZXJlZCBub3RlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90cmlnZ2VycyA9IG5ldyBBcnJheShvcHRpb25zLnBvbHlwaG9ueSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBpbiBjZW50c1xuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZGV0dW5lJyk7XG5cdCAgICAgICAgLy9jcmVhdGUgdGhlIHZvaWNlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5wb2x5cGhvbnk7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgdiA9IG5ldyBvcHRpb25zLnZvaWNlKGFyZ3VtZW50c1syXSwgYXJndW1lbnRzWzNdKTtcblx0ICAgICAgICAgICAgaWYgKCEodiBpbnN0YW5jZW9mIFRvbmUuTW9ub3Bob25pYykpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3ludGggY29uc3RydWN0b3IgbXVzdCBiZSBpbnN0YW5jZSBvZiBUb25lLk1vbm9waG9uaWMnKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnZvaWNlc1tpXSA9IHY7XG5cdCAgICAgICAgICAgIHYuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgIGlmICh2Lmhhc093blByb3BlcnR5KCdkZXR1bmUnKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh2LmRldHVuZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcnNbaV0gPSB7XG5cdCAgICAgICAgICAgICAgICByZWxlYXNlOiAtMSxcblx0ICAgICAgICAgICAgICAgIG5vdGU6IG51bGwsXG5cdCAgICAgICAgICAgICAgICB2b2ljZTogdlxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBvbHlTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwb2x5cGhvbnknOiA0LFxuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICd2b2ljZSc6IFRvbmUuU3ludGhcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fEFycmF5fSBub3RlcyBUaGUgbm90ZXMgdG8gcGxheS4gQWNjZXB0cyBhIHNpbmdsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW5jeSBvciBhbiBhcnJheSBvZiBmcmVxdWVuY2llcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgVGhlIHN0YXJ0IHRpbWUgb2YgdGhlIG5vdGUuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgYSBjaG9yZCBpbW1lZGlhdGVseSB3aXRoIGEgdmVsb2NpdHkgb2YgMC4yXG5cdFx0ICogcG9seS50cmlnZ2VyQXR0YWNrKFtcIkFiM1wiLCBcIkM0XCIsIFwiRjVcIl0sIHVuZGVmaW5lZCwgMC4yKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGVzLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShub3RlcykpIHtcblx0ICAgICAgICAgICAgbm90ZXMgPSBbbm90ZXNdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3Rlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgdmFsID0gbm90ZXNbaV07XG5cdCAgICAgICAgICAgIC8vdHJpZ2dlciB0aGUgb2xkZXN0IHZvaWNlXG5cdCAgICAgICAgICAgIHZhciBvbGRlc3QgPSB0aGlzLl90cmlnZ2Vyc1swXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCB0aGlzLl90cmlnZ2Vycy5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RyaWdnZXJzW2pdLnJlbGVhc2UgPCBvbGRlc3QucmVsZWFzZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9sZGVzdCA9IHRoaXMuX3RyaWdnZXJzW2pdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIG9sZGVzdC5yZWxlYXNlID0gSW5maW5pdHk7XG5cdCAgICAgICAgICAgIG9sZGVzdC5ub3RlID0gSlNPTi5zdHJpbmdpZnkodmFsKTtcblx0ICAgICAgICAgICAgb2xkZXN0LnZvaWNlLnRyaWdnZXJBdHRhY2sodmFsLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2UgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkdXJhdGlvblxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeXxBcnJheX0gbm90ZXMgVGhlIG5vdGVzIHRvIHBsYXkuIEFjY2VwdHMgYSBzaW5nbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVxdWVuY3kgb3IgYW4gYXJyYXkgb2YgZnJlcXVlbmNpZXMuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIHRoZSBkdXJhdGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICAgICBpZiBubyB0aW1lIGlzIGdpdmVuLCBkZWZhdWx0cyB0byBub3dcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBhdHRhY2sgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIGEgY2hvcmQgZm9yIGEgZHVyYXRpb24gb2YgYSBoYWxmIG5vdGVcblx0XHQgKiBwb2x5LnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkViM1wiLCBcIkc0XCIsIFwiQzVcIl0sIFwiMm5cIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gcGFzcyBpbiBhbiBhcnJheSBvZiBkdXJhdGlvbnMgYXMgd2VsbFxuXHRcdCAqIHBvbHkudHJpZ2dlckF0dGFja1JlbGVhc2UoW1wiRWIzXCIsIFwiRzRcIiwgXCJDNVwiXSwgW1wiMm5cIiwgXCI0blwiLCBcIjRuXCJdKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlcywgZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayhub3RlcywgdGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkoZHVyYXRpb24pICYmIFRvbmUuaXNBcnJheShub3RlcykpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3Rlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGQgPSBkdXJhdGlvbltNYXRoLm1pbihpLCBkdXJhdGlvbi5sZW5ndGggLSAxKV07XG5cdCAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKG5vdGVzW2ldLCB0aW1lICsgdGhpcy50b1NlY29uZHMoZCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZShub3RlcywgdGltZSArIHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIG9mIHRoZSBub3RlLiBVbmxpa2UgbW9ub3Bob25pYyBpbnN0cnVtZW50cyxcblx0XHQgKiAgYSBub3RlIChvciBhcnJheSBvZiBub3RlcykgbmVlZHMgdG8gYmUgcGFzc2VkIGluIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fEFycmF5fSBub3RlcyBUaGUgbm90ZXMgdG8gcGxheS4gQWNjZXB0cyBhIHNpbmdsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW5jeSBvciBhbiBhcnJheSBvZiBmcmVxdWVuY2llcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgV2hlbiB0aGUgcmVsZWFzZSB3aWxsIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcG9seS50cmlnZ2VyUmVsZWFzZShbXCJBYjNcIiwgXCJDNFwiLCBcIkY1XCJdLCBcIisyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlcywgdGltZSkge1xuXHQgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShub3RlcykpIHtcblx0ICAgICAgICAgICAgbm90ZXMgPSBbbm90ZXNdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3Rlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAvL2dldCB0aGUgdm9pY2Vcblx0ICAgICAgICAgICAgdmFyIHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkobm90ZXNbaV0pO1xuXHQgICAgICAgICAgICBmb3IgKHZhciB2ID0gMDsgdiA8IHRoaXMuX3RyaWdnZXJzLmxlbmd0aDsgdisrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZGVzYyA9IHRoaXMuX3RyaWdnZXJzW3ZdO1xuXHQgICAgICAgICAgICAgICAgaWYgKGRlc2Mubm90ZSA9PT0gc3RyaW5naWZpZWQgJiYgZGVzYy5yZWxlYXNlID4gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGRlc2Mudm9pY2UudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZGVzYy5yZWxlYXNlID0gdGltZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyQXR0YWNrJywgMSk7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlclJlbGVhc2UnLCAxKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IGEgbWVtYmVyL2F0dHJpYnV0ZSBvZiB0aGUgdm9pY2VzLlxuXHRcdCAqICBAcGFyYW0ge09iamVjdHxzdHJpbmd9IHBhcmFtc1xuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJhbXBUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHBvbHkuc2V0KHtcblx0XHQgKiBcdFwiZmlsdGVyXCIgOiB7XG5cdFx0ICogXHRcdFwidHlwZVwiIDogXCJoaWdocGFzc1wiXG5cdFx0ICogXHR9LFxuXHRcdCAqIFx0XCJlbnZlbG9wZVwiIDoge1xuXHRcdCAqIFx0XHRcImF0dGFja1wiIDogMC4yNVxuXHRcdCAqIFx0fVxuXHRcdCAqIH0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChwYXJhbXMsIHZhbHVlLCByYW1wVGltZSkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52b2ljZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy52b2ljZXNbaV0uc2V0KHBhcmFtcywgdmFsdWUsIHJhbXBUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc3ludGgncyBhdHRyaWJ1dGVzLiBHaXZlbiBubyBhcmd1bWVudHMgZ2V0XG5cdFx0ICogIHdpbGwgcmV0dXJuIGFsbCBhdmFpbGFibGUgb2JqZWN0IHByb3BlcnRpZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmdcblx0XHQgKiAgdmFsdWVzLiBQYXNzIGluIGEgc2luZ2xlIGF0dHJpYnV0ZSB0byByZXRyaWV2ZSBvciBhbiBhcnJheVxuXHRcdCAqICBvZiBhdHRyaWJ1dGVzLiBUaGUgYXR0cmlidXRlIHN0cmluZ3MgY2FuIGFsc28gaW5jbHVkZSBhIFwiLlwiXG5cdFx0ICogIHRvIGFjY2VzcyBkZWVwZXIgcHJvcGVydGllcy5cblx0XHQgKiAgQHBhcmFtIHtBcnJheT19IHBhcmFtcyB0aGUgcGFyYW1ldGVycyB0byBnZXQsIG90aGVyd2lzZSB3aWxsIHJldHVyblxuXHRcdCAqICBcdFx0XHRcdFx0ICAgYWxsIGF2YWlsYWJsZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudm9pY2VzWzBdLmdldChwYXJhbXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgYWxsIHRoZSBjdXJyZW50bHkgYWN0aXZlIHZvaWNlcy5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIG5vdGVzIHNob3VsZCBiZSByZWxlYXNlZC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5yZWxlYXNlQWxsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90cmlnZ2Vycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZGVzYyA9IHRoaXMuX3RyaWdnZXJzW2ldO1xuXHQgICAgICAgICAgICBpZiAoZGVzYy5yZWxlYXNlID4gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgZGVzYy5yZWxlYXNlID0gdGltZTtcblx0ICAgICAgICAgICAgICAgIGRlc2Mudm9pY2UudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52b2ljZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy52b2ljZXNbaV0uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLnZvaWNlc1tpXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdkZXR1bmUnKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9pY2VzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90cmlnZ2VycyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBtYXhpbXVtIG51bWJlciBvZiBub3RlcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWRcblx0XHQgKiAgdG8gYSBwb2x5c3ludGguXG5cdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5NQVhfUE9MWVBIT05ZID0gMjA7XG5cdCAgICByZXR1cm4gVG9uZS5Qb2x5U3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBBdXRvbWF0aWNhbGx5IGludGVycG9sYXRlcyBiZXR3ZWVuIGEgc2V0IG9mIHBpdGNoZWQgc2FtcGxlcy4gUGFzcyBpbiBhbiBvYmplY3Qgd2hpY2ggbWFwcyB0aGUgbm90ZSdzIHBpdGNoIG9yIG1pZGkgdmFsdWUgdG8gdGhlIHVybCwgdGhlbiB5b3UgY2FuIHRyaWdnZXIgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSBvZiB0aGF0IG5vdGUgbGlrZSBvdGhlciBpbnN0cnVtZW50cy4gQnkgYXV0b21hdGljYWxseSByZXBpdGNoaW5nIHRoZSBzYW1wbGVzLCBpdCBpcyBwb3NzaWJsZSB0byBwbGF5IHBpdGNoZXMgd2hpY2ggd2VyZSBub3QgZXhwbGljaXRseSBpbmNsdWRlZCB3aGljaCBjYW4gc2F2ZSBsb2FkaW5nIHRpbWUuXG5cdFx0ICogICAgICAgIEZvciBzYW1wbGUgb3IgYnVmZmVyIHBsYXliYWNrIHdoZXJlIHJlcGl0Y2hpbmcgaXMgbm90IG5lY2Vzc2FyeSwgdXNlIFtUb25lLlBsYXllcl0oaHR0cHM6Ly90b25lanMuZ2l0aHViLmlvL2RvY3MvUGxheWVyKS5cblx0XHQgKiBAcGFyYW0ge09iamVjdH0gc2FtcGxlcyBBbiBvYmplY3Qgb2Ygc2FtcGxlcyBtYXBwaW5nIGVpdGhlciBNaWRpXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSBOdW1iZXJzIG9yIFNjaWVudGlmaWMgUGl0Y2ggTm90YXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgdXJsIG9mIHRoYXQgc2FtcGxlLlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbmxvYWQgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIGFsbCBvZiB0aGUgc2FtcGxlcyBhcmUgbG9hZGVkLlxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nPX0gYmFzZVVybCBUaGUgcm9vdCBVUkwgb2YgYWxsIG9mIHRoZSBzYW1wbGVzLCB3aGljaCBpcyBwcmVwZW5kZWQgdG8gYWxsIHRoZSBVUkxzLlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIHNhbXBsZXIgPSBuZXcgVG9uZS5TYW1wbGVyKHtcblx0XHQgKiBcdFwiQzNcIiA6IFwicGF0aC90by9DMy5tcDNcIixcblx0XHQgKiBcdFwiRCMzXCIgOiBcInBhdGgvdG8vRHNoYXJwMy5tcDNcIixcblx0XHQgKiBcdFwiRiMzXCIgOiBcInBhdGgvdG8vRnNoYXJwMy5tcDNcIixcblx0XHQgKiBcdFwiQTNcIiA6IFwicGF0aC90by9BMy5tcDNcIixcblx0XHQgKiB9LCBmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly9zYW1wbGVyIHdpbGwgcmVwaXRjaCB0aGUgY2xvc2VzdCBzYW1wbGVcblx0XHQgKiBcdHNhbXBsZXIudHJpZ2dlckF0dGFjayhcIkQzXCIpXG5cdFx0ICogfSlcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyID0gZnVuY3Rpb24gKHVybHMpIHtcblx0ICAgICAgICAvLyBzaGlmdCBhcmd1bWVudHMgb3ZlciBvbmUuIFRob3NlIGFyZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBvcHRpb25zXG5cdCAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIGFyZ3Muc2hpZnQoKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJncywgW1xuXHQgICAgICAgICAgICAnb25sb2FkJyxcblx0ICAgICAgICAgICAgJ2Jhc2VVcmwnXG5cdCAgICAgICAgXSwgVG9uZS5TYW1wbGVyKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICB2YXIgdXJsTWFwID0ge307XG5cdCAgICAgICAgZm9yICh2YXIgbm90ZSBpbiB1cmxzKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzTm90ZShub3RlKSkge1xuXHQgICAgICAgICAgICAgICAgLy9jb252ZXJ0IHRoZSBub3RlIG5hbWUgdG8gTUlESVxuXHQgICAgICAgICAgICAgICAgdmFyIG1pZCA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgICAgICAgICAgdXJsTWFwW21pZF0gPSB1cmxzW25vdGVdO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc05hTihwYXJzZUZsb2F0KG5vdGUpKSkge1xuXHQgICAgICAgICAgICAgICAgLy9vdGhlcndpc2UgaWYgaXQncyBudW1iZXJzIGFzc3VtZSBpdCdzIG1pZGlcblx0ICAgICAgICAgICAgICAgIHVybE1hcFtub3RlXSA9IHVybHNbbm90ZV07XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuU2FtcGxlcjogdXJsIGtleXMgbXVzdCBiZSB0aGUgbm90ZVxcJ3MgcGl0Y2gnKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBzdG9yZWQgYW5kIGxvYWRlZCBidWZmZXJzXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5CdWZmZXJzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBuZXcgVG9uZS5CdWZmZXJzKHVybE1hcCwgb3B0aW9ucy5vbmxvYWQsIG9wdGlvbnMuYmFzZVVybCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgb2JqZWN0IG9mIGFsbCBjdXJyZW50bHkgcGxheWluZyBCdWZmZXJTb3VyY2VzXG5cdFx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSB7fTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBlbnZlbG9wZSBhcHBsaWVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZS5cblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBvcHRpb25zLmF0dGFjaztcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBlbnZlbG9wZSBhcHBsaWVkIHRvIHRoZSBlbmQgb2YgdGhlIGVudmVsb3BlLlxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJlbGVhc2UgPSBvcHRpb25zLnJlbGVhc2U7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TYW1wbGVyLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHRzXG5cdFx0ICogQGNvbnN0XG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICBhdHRhY2s6IDAsXG5cdCAgICAgICAgcmVsZWFzZTogMC4xLFxuXHQgICAgICAgIG9ubG9hZDogVG9uZS5ub09wLFxuXHQgICAgICAgIGJhc2VVcmw6ICcnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBpbiBzdGVwcyBiZXR3ZWVuIHRoZSBnaXZlbiBtaWRpIG5vdGUgYXQgdGhlIGNsb3NldHMgc2FtcGxlLlxuXHRcdCAqIEBwYXJhbSAge01pZGl9IG1pZGlcblx0XHQgKiBAcmV0dXJuIHtJbnRlcnZhbH1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5fZmluZENsb3Nlc3QgPSBmdW5jdGlvbiAobWlkaSkge1xuXHQgICAgICAgIC8vc2VhcmNoZXMgd2l0aGluIDggb2N0YXZlcyBvZiB0aGUgZ2l2ZW4gbWlkaSBub3RlXG5cdCAgICAgICAgdmFyIE1BWF9JTlRFUlZBTCA9IDk2O1xuXHQgICAgICAgIHZhciBpbnRlcnZhbCA9IDA7XG5cdCAgICAgICAgd2hpbGUgKGludGVydmFsIDwgTUFYX0lOVEVSVkFMKSB7XG5cdCAgICAgICAgICAgIC8vIGNoZWNrIGFib3ZlIGFuZCBiZWxvd1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fYnVmZmVycy5oYXMobWlkaSArIGludGVydmFsKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC1pbnRlcnZhbDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9idWZmZXJzLmhhcyhtaWRpIC0gaW50ZXJ2YWwpKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJ2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaW50ZXJ2YWwrKztcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byBwbGF5XG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFdoZW4gdG8gcGxheSB0aGUgbm90ZVxuXHRcdCAqIEBwYXJhbSAge05vcm1hbFJhbmdlPX0gdmVsb2NpdHkgVGhlIHZlbG9jaXR5IHRvIHBsYXkgdGhlIHNhbXBsZSBiYWNrLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn0gICAgICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdmFyIG1pZGkgPSBUb25lLkZyZXF1ZW5jeShub3RlKS50b01pZGkoKTtcblx0ICAgICAgICAvLyBmaW5kIHRoZSBjbG9zZXN0IG5vdGUgcGl0Y2hcblx0ICAgICAgICB2YXIgZGlmZmVyZW5jZSA9IHRoaXMuX2ZpbmRDbG9zZXN0KG1pZGkpO1xuXHQgICAgICAgIGlmIChkaWZmZXJlbmNlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9zZXN0Tm90ZSA9IG1pZGkgLSBkaWZmZXJlbmNlO1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5fYnVmZmVycy5nZXQoY2xvc2VzdE5vdGUpO1xuXHQgICAgICAgICAgICAvLyBwbGF5IHRoYXQgbm90ZVxuXHQgICAgICAgICAgICB2YXIgc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKHtcblx0ICAgICAgICAgICAgICAgICdidWZmZXInOiBidWZmZXIsXG5cdCAgICAgICAgICAgICAgICAncGxheWJhY2tSYXRlJzogVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oZGlmZmVyZW5jZSksXG5cdCAgICAgICAgICAgICAgICAnZmFkZUluJzogdGhpcy5hdHRhY2ssXG5cdCAgICAgICAgICAgICAgICAnZmFkZU91dCc6IHRoaXMucmVsZWFzZSxcblx0ICAgICAgICAgICAgICAgICdjdXJ2ZSc6ICdleHBvbmVudGlhbCdcblx0ICAgICAgICAgICAgfSkuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdGFydCh0aW1lLCAwLCBidWZmZXIuZHVyYXRpb24sIHZlbG9jaXR5KTtcblx0ICAgICAgICAgICAgLy8gYWRkIGl0IHRvIHRoZSBhY3RpdmUgc291cmNlc1xuXHQgICAgICAgICAgICBpZiAoIVRvbmUuaXNBcnJheSh0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0ucHVzaCh7XG5cdCAgICAgICAgICAgICAgICBub3RlOiBtaWRpLFxuXHQgICAgICAgICAgICAgICAgc291cmNlOiBzb3VyY2Vcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gcmVsZWFzZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSAgICAgXHRXaGVuIHRvIHJlbGVhc2UgdGhlIG5vdGUuXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfVx0dGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlLCB0aW1lKSB7XG5cdCAgICAgICAgdmFyIG1pZGkgPSBUb25lLkZyZXF1ZW5jeShub3RlKS50b01pZGkoKTtcblx0ICAgICAgICAvLyBmaW5kIHRoZSBub3RlXG5cdCAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0gJiYgdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0uc2hpZnQoKS5zb3VyY2U7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgc291cmNlLnN0b3AodGltZSArIHRoaXMucmVsZWFzZSwgdGhpcy5yZWxlYXNlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVsZWFzZSBhbGwgY3VycmVudGx5IGFjdGl2ZSBub3Rlcy5cblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSAgICAgXHRXaGVuIHRvIHJlbGVhc2UgdGhlIG5vdGVzLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn1cdHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUucmVsZWFzZUFsbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIG5vdGUgaW4gdGhpcy5fYWN0aXZlU291cmNlcykge1xuXHQgICAgICAgICAgICB2YXIgc291cmNlcyA9IHRoaXMuX2FjdGl2ZVNvdXJjZXNbbm90ZV07XG5cdCAgICAgICAgICAgIHdoaWxlIChzb3VyY2VzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXMuc2hpZnQoKS5zb3VyY2U7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lICsgdGhpcy5yZWxlYXNlLCB0aGlzLnJlbGVhc2UpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogc3ludGguc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAwKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc4bicpXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyQXR0YWNrJywgMSk7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlclJlbGVhc2UnLCAxKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2UgdGhlIGF0dGFjayBwaGFzZSwgdGhlbiBhZnRlciB0aGUgZHVyYXRpb24sIGludm9rZSB0aGUgcmVsZWFzZS5cblx0XHQgKiBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHBsYXlcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiBUaGUgdGltZSB0aGUgbm90ZSBzaG91bGQgYmUgaGVsZFxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBXaGVuIHRvIHN0YXJ0IHRoZSBhdHRhY2tcblx0XHQgKiBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgYXR0YWNrXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfSAgICAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGUsIGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sobm90ZSwgdGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2Uobm90ZSwgdGltZSArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgbm90ZSB0byB0aGUgc2FtcGxlci5cblx0XHQgKiAgQHBhcmFtICB7Tm90ZXxNaWRpfSAgIG5vdGUgICAgICBUaGUgYnVmZmVyJ3MgcGl0Y2guXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xUb25lLkJ1ZmZlcnxBdWRpb2J1ZmZlcn0gIHVybCAgRWl0aGVyIHRoZSB1cmwgb2YgdGhlIGJ1ZmVyLFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYWRkZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5vdGUsIHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc05vdGUobm90ZSkpIHtcblx0ICAgICAgICAgICAgLy9jb252ZXJ0IHRoZSBub3RlIG5hbWUgdG8gTUlESVxuXHQgICAgICAgICAgICB2YXIgbWlkID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnMuYWRkKG1pZCwgdXJsLCBjYWxsYmFjayk7XG5cdCAgICAgICAgfSBlbHNlIGlmICghaXNOYU4ocGFyc2VGbG9hdChub3RlKSkpIHtcblx0ICAgICAgICAgICAgLy9vdGhlcndpc2UgaWYgaXQncyBudW1iZXJzIGFzc3VtZSBpdCdzIG1pZGlcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVycy5hZGQobm90ZSwgdXJsLCBjYWxsYmFjayk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlNhbXBsZXI6IG5vdGUgbXVzdCBiZSB0aGUgbm90ZVxcJ3MgcGl0Y2guIEluc3RlYWQgZ290ICcgKyBub3RlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TYW1wbGVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2FtcGxlci5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXJzLmxvYWRlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVycy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVycyA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgbWlkaSBpbiB0aGlzLl9hY3RpdmVTb3VyY2VzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TYW1wbGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIU9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zZXRQZXJpb2RpY1dhdmUpIHtcblx0ICAgICAgICAgICAgT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFBlcmlvZGljV2F2ZSA9IE9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zZXRXYXZlVGFibGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVQZXJpb2RpY1dhdmUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVQZXJpb2RpY1dhdmUgPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVdhdmVUYWJsZTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBNYXBzIGEgTm9ybWFsUmFuZ2UgWzAsIDFdIHRvIGFuIEF1ZGlvUmFuZ2UgWy0xLCAxXS4gXG5cdFx0ICogICAgICAgICBTZWUgYWxzbyBUb25lLkF1ZGlvVG9HYWluLiBcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZzJhID0gbmV3IFRvbmUuR2FpblRvQXVkaW8oKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuR2FpblRvQXVkaW8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ub3JtID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAoeCkge1xuXHQgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMoeCkgKiAyIC0gMTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdhaW5Ub0F1ZGlvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdhaW5Ub0F1ZGlvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW5Ub0F1ZGlvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX25vcm0uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX25vcm0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdhaW5Ub0F1ZGlvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTm9ybWFsaXplIHRha2VzIGFuIGlucHV0IG1pbiBhbmQgbWF4IGFuZCBtYXBzIGl0IGxpbmVhcmx5IHRvIE5vcm1hbFJhbmdlIFswLDFdXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBpbnB1dE1pbiB0aGUgbWluIGlucHV0IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBpbnB1dE1heCB0aGUgbWF4IGlucHV0IHZhbHVlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG5vcm0gPSBuZXcgVG9uZS5Ob3JtYWxpemUoMiwgNCk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgzKS5jb25uZWN0KG5vcm0pO1xuXHRcdCAqIC8vb3V0cHV0IG9mIG5vcm0gaXMgMC41LiBcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9ybWFsaXplID0gZnVuY3Rpb24gKGlucHV0TWluLCBpbnB1dE1heCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtaW4gaW5wdXQgdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnB1dE1pbiA9IFRvbmUuZGVmYXVsdEFyZyhpbnB1dE1pbiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1heCBpbnB1dCB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2lucHV0TWF4ID0gVG9uZS5kZWZhdWx0QXJnKGlucHV0TWF4LCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzdWJ0cmFjdCB0aGUgbWluIGZyb20gdGhlIGlucHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWRkfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWIgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuQWRkKDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGRpdmlkZSBieSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbnB1dCBhbmQgb3V0cHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RpdiA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMSk7XG5cdCAgICAgICAgdGhpcy5fc3ViLmNvbm5lY3QodGhpcy5fZGl2KTtcblx0ICAgICAgICB0aGlzLl9zZXRSYW5nZSgpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTm9ybWFsaXplLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gdmFsdWUgdGhlIGlucHV0IHNpZ25hbCB3aWxsIHJlYWNoLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk5vcm1hbGl6ZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTm9ybWFsaXplLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0TWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2lucHV0TWluID0gbWluO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gdmFsdWUgdGhlIGlucHV0IHNpZ25hbCB3aWxsIHJlYWNoLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk5vcm1hbGl6ZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTm9ybWFsaXplLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0TWF4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2lucHV0TWF4ID0gbWF4O1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIHNldCB0aGUgdmFsdWVzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUuX3NldFJhbmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N1Yi52YWx1ZSA9IC10aGlzLl9pbnB1dE1pbjtcblx0ICAgICAgICB0aGlzLl9kaXYudmFsdWUgPSAxIC8gKHRoaXMuX2lucHV0TWF4IC0gdGhpcy5faW5wdXRNaW4pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob3JtYWxpemV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9ybWFsaXplLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3N1Yi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3ViID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kaXYuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RpdiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTm9ybWFsaXplO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbCBleHRlbmRzIFRvbmUuU2lnbmFsLCBidXQgYWRkcyB0aGUgYWJpbGl0eSB0byBzeW5jaHJvbml6ZSB0aGUgc2lnbmFsIHRvIHRoZSBzaWduYWwgdG8gdGhlIFRvbmUuVHJhbnNwb3J0XG5cdFx0ICogQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHJlYWwgc2lnbmFsIG91dHB1dFxuXHRcdFx0ICogQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5fb3V0cHV0U2lnID0gbmV3IFRvbmUuU2lnbmFsKHRoaXMuX2luaXRpYWxWYWx1ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBLZWVwIHRyYWNrIG9mIHRoZSBsYXN0IHZhbHVlLiAoc21hbGwgb3B0aW1pemF0aW9uKVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sYXN0VmFsID0gdGhpcy52YWx1ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBldmVudCBpZCBvZiB0aGUgdGljayB1cGRhdGUgbG9vcFxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZVJlcGVhdCh0aGlzLl9vblRpY2suYmluZCh0aGlzKSwgJzFpJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBBIGJvdW5kIHZlcnNpb24gb2YgdGhlIGFuY2hvciB2YWx1ZSBtZXRob2RzXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmluZEFuY2hvclZhbHVlID0gdGhpcy5fYW5jaG9yVmFsdWUuYmluZCh0aGlzKTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5vbignc3RhcnQgc3RvcCBwYXVzZScsIHRoaXMuX2JpbmRBbmNob3JWYWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLm1lbW9yeSA9IEluZmluaXR5O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwsIFRvbmUuU2lnbmFsKTtcblx0ICAgIC8qKlxuXHRcdCAqIENhbGxiYWNrIHdoaWNoIGlzIGludm9rZWQgZXZlcnkgdGljay5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuX29uVGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHZhbCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoVG9uZS5UcmFuc3BvcnQuc2Vjb25kcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuX2xhc3RWYWwgIT09IHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sYXN0VmFsID0gdmFsO1xuXHQgICAgICAgICAgICAvL2FwcHJveGltYXRlIHJhbXAgY3VydmVzIHdpdGggbGluZWFyIHJhbXBzXG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dFNpZy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWwsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBBbmNob3IgdGhlIHZhbHVlIGF0IHRoZSBzdGFydCBhbmQgc3RvcCBvZiB0aGUgVHJhbnNwb3J0XG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgdGhpc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5fYW5jaG9yVmFsdWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB2YWwgPSB0aGlzLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnNlY29uZHMpO1xuXHQgICAgICAgIHRoaXMuX2xhc3RWYWwgPSB2YWw7XG5cdCAgICAgICAgdGhpcy5fb3V0cHV0U2lnLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcuc2V0VmFsdWVBdFRpbWUodmFsLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzY2hlZHVsZWQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFRoaXMgd2lsbFxuXHRcdCAqICByZXR1cm4gdGhlIHVuY29udmVydGVkIChyYXcpIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSAgdGltZSAgVGhlIHRpbWUgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIFRoZSBzY2hlZHVsZWQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gVG9uZS5TaWduYWwucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lLmNhbGwodGhpcywgdGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU2V0IHRoZSBvdXRwdXQgb2YgdGhlIHNpZ25hbCBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoYW5nZSB0byBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9IHRpbWUgIFRoZSB0aW1lIHRvIGNoYW5nZSB0aGUgc2lnbmFsXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHZhbHVlLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBMaW5lYXIgcmFtcCB0byB0aGUgZ2l2ZW4gdmFsdWUgZnJvbSB0aGUgcHJldmlvdXMgc2NoZWR1bGVkIHBvaW50IHRvIHRoZSBnaXZlbiB2YWx1ZVxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoYW5nZSB0byBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9IHRpbWUgIFRoZSB0aW1lIHRvIGNoYW5nZSB0aGUgc2lnbmFsXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHZhbHVlLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBFeHBvbmVudGlhbCByYW1wIHRvIHRoZSBnaXZlbiB2YWx1ZSBmcm9tIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcG9pbnQgdG8gdGhlIGdpdmVuIHZhbHVlXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hhbmdlIHRvIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gdGltZSAgVGhlIHRpbWUgdG8gY2hhbmdlIHRoZSBzaWduYWxcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHZhbHVlLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lIHdpdGhcblx0XHQgKiAgYSByYXRlIGhhdmluZyB0aGUgZ2l2ZW4gdGltZSBjb25zdGFudC5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB0aW1lQ29uc3RhbnRcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5zZXRUYXJnZXRBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLnNldFRhcmdldEF0VGltZS5jYWxsKHRoaXMsIHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbHMgYWxsIHNjaGVkdWxlZCBwYXJhbWV0ZXIgY2hhbmdlcyB3aXRoIHRpbWVzIGdyZWF0ZXIgdGhhbiBvclxuXHRcdCAqICBlcXVhbCB0byBzdGFydFRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVkVmFsdWVzID0gZnVuY3Rpb24gKHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMuY2FsbCh0aGlzLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgYW4gYXJyYXkgb2YgYXJiaXRyYXJ5IHZhbHVlcyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gdGltZSBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqICBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gdmFsdWVzXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gZHVyYXRpb25cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3NjYWxpbmc9MV0gSWYgdGhlIHZhbHVlcyBpbiB0aGUgY3VydmUgc2hvdWxkIGJlIHNjYWxlZCBieSBzb21lIHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVDdXJ2ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZXMsIHN0YXJ0VGltZSwgZHVyYXRpb24sIHNjYWxpbmcpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IFRvbmUuVHJhbnNwb3J0VGltZShkdXJhdGlvbik7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLnNldFZhbHVlQ3VydmVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZXMsIHN0YXJ0VGltZSwgZHVyYXRpb24sIHNjYWxpbmcpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGlzIGlzIHNpbWlsYXIgdG8gW2NhbmNlbFNjaGVkdWxlZFZhbHVlc10oI2NhbmNlbFNjaGVkdWxlZFZhbHVlcykgZXhjZXB0XG5cdFx0ICogIGl0IGhvbGRzIHRoZSBhdXRvbWF0ZWQgdmFsdWUgYXQgdGltZSB1bnRpbCB0aGUgbmV4dCBhdXRvbWF0ZWQgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmNhbmNlbEFuZEhvbGRBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlNpZ25hbC5wcm90b3R5cGUuY2FuY2VsQW5kSG9sZEF0VGltZS5jYWxsKHRoaXMsIFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQuY2xlYXIodGhpcy5fc3luY2VkKTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5vZmYoJ3N0YXJ0IHN0b3AgcGF1c2UnLCB0aGlzLl9zeW5jZWRDYWxsYmFjayk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCgwKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb3V0cHV0U2lnID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIFRvbmUuR3JhaW5QbGF5ZXIgaW1wbGVtZW50cyBbZ3JhbnVsYXIgc3ludGhlc2lzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HcmFudWxhcl9zeW50aGVzaXMpLlxuXHRcdCAqICAgICAgICBHcmFudWxhciBTeW50aGVzaXMgZW5hYmxlcyB5b3UgdG8gYWRqdXN0IHBpdGNoIGFuZCBwbGF5YmFjayByYXRlIGluZGVwZW5kZW50bHkuIFRoZSBncmFpblNpemUgaXMgdGhlXG5cdFx0ICogICAgICAgIGFtb3VudCBvZiB0aW1lIGVhY2ggc21hbGwgY2h1bmsgb2YgYXVkaW8gaXMgcGxheWVkIGZvciBhbmQgdGhlIG92ZXJsYXAgaXMgdGhlXG5cdFx0ICogICAgICAgIGFtb3VudCBvZiBjcm9zc2ZhZGluZyB0cmFuc2l0aW9uIHRpbWUgYmV0d2VlbiBzdWNjZXNzaXZlIGdyYWlucy5cblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogQHBhcmFtIHtTdHJpbmd8VG9uZS5CdWZmZXJ9IHVybFx0VGhlIHVybCB0byBsb2FkLCBvciB0aGUgVG9uZS5CdWZmZXIgdG8gcGxheS5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBhZnRlciB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICBdLCBUb25lLkdyYWluUGxheWVyKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhdWRpbyBidWZmZXIgYmVsb25naW5nIHRvIHRoZSBwbGF5ZXIuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKG9wdGlvbnMudXJsLCBvcHRpb25zLm9ubG9hZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQ3JlYXRlIGEgcmVwZWF0aW5nIHRpY2sgdG8gc2NoZWR1bGVcblx0XHRcdCAqICB0aGUgZ3JhaW5zLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5DbG9ja31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2xvY2sgPSBuZXcgVG9uZS5DbG9jayh0aGlzLl90aWNrLmJpbmQodGhpcyksIG9wdGlvbnMuZ3JhaW5TaXplKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcEVuZCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBBbGwgb2YgdGhlIGN1cnJlbnRseSBwbGF5aW5nIEJ1ZmZlclNvdXJjZXNcblx0XHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ncmFpblNpemUgPSBvcHRpb25zLmdyYWluU2l6ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vdmVybGFwID0gb3B0aW9ucy5vdmVybGFwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFkanVzdCB0aGUgcGl0Y2ggaW5kZXBlbmRlbnRseSBvZiB0aGUgcGxheWJhY2tSYXRlLlxuXHRcdFx0ICogIEB0eXBlICB7Q2VudHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8vc2V0dXBcblx0ICAgICAgICB0aGlzLm92ZXJsYXAgPSBvcHRpb25zLm92ZXJsYXA7XG5cdCAgICAgICAgdGhpcy5sb29wID0gb3B0aW9ucy5sb29wO1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgdGhpcy5ncmFpblNpemUgPSBvcHRpb25zLmdyYWluU2l6ZTtcblx0ICAgICAgICB0aGlzLmxvb3BTdGFydCA9IG9wdGlvbnMubG9vcFN0YXJ0O1xuXHQgICAgICAgIHRoaXMubG9vcEVuZCA9IG9wdGlvbnMubG9vcEVuZDtcblx0ICAgICAgICB0aGlzLnJldmVyc2UgPSBvcHRpb25zLnJldmVyc2U7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sub24oJ3N0b3AnLCB0aGlzLl9vbnN0b3AuYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HcmFpblBsYXllciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnb3ZlcmxhcCc6IDAuMSxcblx0ICAgICAgICAnZ3JhaW5TaXplJzogMC4yLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAwLFxuXHQgICAgICAgICdyZXZlcnNlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGxheSB0aGUgYnVmZmVyIGF0IHRoZSBnaXZlbiBzdGFydFRpbWUuIE9wdGlvbmFsbHkgYWRkIGFuIG9mZnNldFxuXHRcdCAqICBhbmQvb3IgZHVyYXRpb24gd2hpY2ggd2lsbCBwbGF5IHRoZSBidWZmZXIgZnJvbSBhIHBvc2l0aW9uXG5cdFx0ICogIHdpdGhpbiB0aGUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb24uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3N0YXJ0VGltZT1ub3ddIFdoZW4gdGhlIHBsYXllciBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtvZmZzZXQ9MF0gVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgc2FtcGxlIHNob3VsZCBwbGF5LiBJZiBubyBkdXJhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnaXZlbiwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmdWxsIGxlbmd0aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2FtcGxlIChtaW51cyBhbnkgb2Zmc2V0KVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HcmFpblBsYXllcn0gdGhpc1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiAgQG1ldGhvZCBzdGFydFxuXHRcdCAqICBAbmFtZSBzdGFydFxuXHRcdCAqL1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBvZmZzZXRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fb2Zmc2V0ID0gb2Zmc2V0O1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIGlmIChkdXJhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLnN0b3AodGltZSArIHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBzdGFydCBtZXRob2Rcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2VkIHdoZW4gdGhlIGNsb2NrIGlzIHN0b3BwZWRcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuX29uc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9zdG9wIHRoZSBwbGF5ZXJzXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgc291cmNlLnN0b3AodGltZSwgMCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludm9rZWQgb24gZWFjaCBjbG9jayB0aWNrLiBzY2hlZHVsZWQgYSBuZXdcblx0XHQgKiAgZ3JhaW4gYXQgdGhpcyB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciBmYWRlSW4gPSB0aGlzLl9vZmZzZXQgPCB0aGlzLl9vdmVybGFwID8gMCA6IHRoaXMuX292ZXJsYXA7XG5cdCAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBUb25lLkJ1ZmZlclNvdXJjZSh7XG5cdCAgICAgICAgICAgICdidWZmZXInOiB0aGlzLmJ1ZmZlcixcblx0ICAgICAgICAgICAgJ2ZhZGVJbic6IGZhZGVJbixcblx0ICAgICAgICAgICAgJ2ZhZGVPdXQnOiB0aGlzLl9vdmVybGFwLFxuXHQgICAgICAgICAgICAnbG9vcCc6IHRoaXMubG9vcCxcblx0ICAgICAgICAgICAgJ2xvb3BTdGFydCc6IHRoaXMuX2xvb3BTdGFydCxcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiB0aGlzLl9sb29wRW5kLFxuXHQgICAgICAgICAgICAncGxheWJhY2tSYXRlJzogVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8odGhpcy5kZXR1bmUgLyAxMDApXG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgc291cmNlLnN0YXJ0KHRpbWUsIHRoaXMuX29mZnNldCk7XG5cdCAgICAgICAgdGhpcy5fb2Zmc2V0ICs9IHRoaXMuZ3JhaW5TaXplO1xuXHQgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUgKyB0aGlzLmdyYWluU2l6ZSk7XG5cdCAgICAgICAgLy9hZGQgaXQgdG8gdGhlIGFjdGl2ZSBzb3VyY2VzXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5wdXNoKHNvdXJjZSk7XG5cdCAgICAgICAgLy9yZW1vdmUgaXQgd2hlbiBpdCdzIGRvbmVcblx0ICAgICAgICBzb3VyY2Uub25lbmRlZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fYWN0aXZlU291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cdCAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSnVtcCB0byBhIHNwZWNpZmljIHRpbWUgYW5kIHBsYXkgaXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICBvZmZzZXQgIFRoZSBvZmZzZXQgdG8ganVtcCB0by5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gdGltZSBXaGVuIHRvIG1ha2UgdGhlIGp1bXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkdyYWluUGxheWVyfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuc2VlayA9IGZ1bmN0aW9uIChvZmZzZXQsIHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgIHRoaXMuX3RpY2sodGhpcy50b1NlY29uZHModGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBzYW1wbGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdwbGF5YmFja1JhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIHRoaXMuZ3JhaW5TaXplID0gdGhpcy5fZ3JhaW5TaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGxvb3Agc3RhcnQgdGltZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbG9vcCBlbmQgdGltZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRpcmVjdGlvbiB0aGUgYnVmZmVyIHNob3VsZCBwbGF5IGluXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgcmV2ZXJzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAncmV2ZXJzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLnJldmVyc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyZXYpIHtcblx0ICAgICAgICAgICAgdGhpcy5idWZmZXIucmV2ZXJzZSA9IHJldjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBzaXplIG9mIGVhY2ggY2h1bmsgb2YgYXVkaW8gdGhhdCB0aGVcblx0XHQgKiBidWZmZXIgaXMgY2hvcHBlZCBpbnRvIGFuZCBwbGF5ZWQgYmFjayBhdC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBncmFpblNpemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ2dyYWluU2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dyYWluU2l6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ3JhaW5TaXplID0gdGhpcy50b1NlY29uZHMoc2l6ZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2Nsb2NrLmZyZXF1ZW5jeS52YWx1ZSA9IHRoaXMuX3BsYXliYWNrUmF0ZSAvIHRoaXMuX2dyYWluU2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoaXMgaXMgdGhlIGR1cmF0aW9uIG9mIHRoZSBjcm9zcy1mYWRlIGJldHdlZW5cblx0XHQgKiBzdWNlc3NpdmUgZ3JhaW5zLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIG92ZXJsYXBcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ292ZXJsYXAnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdmVybGFwO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdmVybGFwID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuR3JhaW5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmJ1ZmZlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jbG9jayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgc291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HcmFpblBsYXllcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBsYXllciBpcyBhbiBhdWRpbyBmaWxlIHBsYXllciB3aXRoIHN0YXJ0LCBsb29wLCBhbmQgc3RvcCBmdW5jdGlvbnMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd8QXVkaW9CdWZmZXJ9IHVybCBFaXRoZXIgdGhlIEF1ZGlvQnVmZmVyIG9yIHRoZSB1cmwgZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRvIGxvYWQgdGhlIEF1ZGlvQnVmZmVyXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb249fSBvbmxvYWQgVGhlIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIHRoZSBidWZmZXIgaXMgbG9hZGVkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY29tbWVuZGVkIHRvIHVzZSBUb25lLkJ1ZmZlci5vbignbG9hZCcpIGluc3RlYWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBsYXllciA9IG5ldyBUb25lLlBsYXllcihcIi4vcGF0aC90by9zYW1wbGUubXAzXCIpLnRvTWFzdGVyKCk7XG5cdFx0ICogLy9wbGF5IGFzIHNvb24gYXMgdGhlIGJ1ZmZlciBpcyBsb2FkZWRcblx0XHQgKiBwbGF5ZXIuYXV0b3N0YXJ0ID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyID0gZnVuY3Rpb24gKHVybCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zO1xuXHQgICAgICAgIGlmICh1cmwgaW5zdGFuY2VvZiBUb25lLkJ1ZmZlciAmJiB1cmwubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIHVybCA9IHVybC5nZXQoKTtcblx0ICAgICAgICAgICAgb3B0aW9ucyA9IFRvbmUuUGxheWVyLmRlZmF1bHRzO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAgICAgJ3VybCcsXG5cdCAgICAgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgICAgICBdLCBUb25lLlBsYXllcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSWYgdGhlIGZpbGUgc2hvdWxkIHBsYXkgYXMgc29vblxuXHRcdFx0ICogIGFzIHRoZSBidWZmZXIgaXMgbG9hZGVkLlxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3dpbGwgcGxheSBhcyBzb29uIGFzIGl0J3MgbG9hZGVkXG5cdFx0XHQgKiB2YXIgcGxheWVyID0gbmV3IFRvbmUuUGxheWVyKHtcblx0XHRcdCAqIFx0XCJ1cmxcIiA6IFwiLi9wYXRoL3RvL3NhbXBsZS5tcDNcIixcblx0XHRcdCAqIFx0XCJhdXRvc3RhcnRcIiA6IHRydWUsXG5cdFx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdXRvc3RhcnQgPSBvcHRpb25zLmF1dG9zdGFydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYnVmZmVyXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5CdWZmZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIoe1xuXHQgICAgICAgICAgICAndXJsJzogb3B0aW9ucy51cmwsXG5cdCAgICAgICAgICAgICdvbmxvYWQnOiB0aGlzLl9vbmxvYWQuYmluZCh0aGlzLCBvcHRpb25zLm9ubG9hZCksXG5cdCAgICAgICAgICAgICdyZXZlcnNlJzogb3B0aW9ucy5yZXZlcnNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKHVybCBpbnN0YW5jZW9mIEF1ZGlvQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlci5zZXQodXJsKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaWYgdGhlIGJ1ZmZlciBzaG91bGQgbG9vcCBvbmNlIGl0J3Mgb3ZlclxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wID0gb3B0aW9ucy5sb29wO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGlmICdsb29wJyBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIHN0YXJ0IGF0IHRoaXMgcG9zaXRpb25cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gb3B0aW9ucy5sb29wU3RhcnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaWYgJ2xvb3AnIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgZW5kIGF0IHRoaXMgcG9zaXRpb25cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcEVuZCA9IG9wdGlvbnMubG9vcEVuZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcGxheWJhY2sgcmF0ZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgYWN0aXZlIGJ1ZmZlciBzb3VyY2Ugbm9kZXNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXk8VG9uZS5CdWZmZXJTb3VyY2U+fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGVsYXBzZWQgdGltZSBjb3VudGVyLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpY2tTb3VyY2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lID0gbmV3IFRvbmUuVGlja1NvdXJjZShvcHRpb25zLnBsYXliYWNrUmF0ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZhZGVJbiB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVJbiA9IG9wdGlvbnMuZmFkZUluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlT3V0IHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZU91dCA9IG9wdGlvbnMuZmFkZU91dDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBsYXllciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnYXV0b3N0YXJ0JzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAwLFxuXHQgICAgICAgICdyZXRyaWdnZXInOiBmYWxzZSxcblx0ICAgICAgICAncmV2ZXJzZSc6IGZhbHNlLFxuXHQgICAgICAgICdmYWRlSW4nOiAwLFxuXHQgICAgICAgICdmYWRlT3V0JzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBMb2FkIHRoZSBhdWRpbyBmaWxlIGFzIGFuIGF1ZGlvIGJ1ZmZlci5cblx0XHQgKiAgRGVjb2RlcyB0aGUgYXVkaW8gYXN5bmNocm9ub3VzbHkgYW5kIGludm9rZXNcblx0XHQgKiAgdGhlIGNhbGxiYWNrIG9uY2UgdGhlIGF1ZGlvIGJ1ZmZlciBsb2Fkcy5cblx0XHQgKiAgTm90ZTogdGhpcyBkb2VzIG5vdCBuZWVkIHRvIGJlIGNhbGxlZCBpZiBhIHVybFxuXHRcdCAqICB3YXMgcGFzc2VkIGluIHRvIHRoZSBjb25zdHJ1Y3Rvci4gT25seSB1c2UgdGhpc1xuXHRcdCAqICBpZiB5b3Ugd2FudCB0byBtYW51YWxseSBsb2FkIGEgbmV3IHVybC5cblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGJ1ZmZlciB0byBsb2FkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgRmlsZXR5cGUgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgYnJvd3Nlci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdG8gaW52b2tlIG9uY2Vcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2FtcGxlIGlzIGxvYWRlZC5cblx0XHQgKiAgQHJldHVybnMge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sb2FkKHVybCwgdGhpcy5fb25sb2FkLmJpbmQodGhpcywgY2FsbGJhY2spKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnRlcm5hbCBjYWxsYmFjayB3aGVuIHRoZSBidWZmZXIgaXMgbG9hZGVkLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX29ubG9hZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIGNhbGxiYWNrID0gVG9uZS5kZWZhdWx0QXJnKGNhbGxiYWNrLCBUb25lLm5vT3ApO1xuXHQgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIGlmICh0aGlzLmF1dG9zdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLnN0YXJ0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludGVybmFsIGNhbGxiYWNrIHdoZW4gdGhlIGJ1ZmZlciBpcyBkb25lIHBsYXlpbmcuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fb25Tb3VyY2VFbmQgPSBmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fYWN0aXZlU291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQbGF5IHRoZSBidWZmZXIgYXQgdGhlIGdpdmVuIHN0YXJ0VGltZS4gT3B0aW9uYWxseSBhZGQgYW4gb2Zmc2V0XG5cdFx0ICogIGFuZC9vciBkdXJhdGlvbiB3aGljaCB3aWxsIHBsYXkgdGhlIGJ1ZmZlciBmcm9tIGEgcG9zaXRpb25cblx0XHQgKiAgd2l0aGluIHRoZSBidWZmZXIgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbc3RhcnRUaW1lPW5vd10gV2hlbiB0aGUgcGxheWVyIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW29mZnNldD0wXSBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBzYW1wbGUgc2hvdWxkIHBsYXkuIElmIG5vIGR1cmF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdpdmVuLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZ1bGwgbGVuZ3RoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzYW1wbGUgKG1pbnVzIGFueSBvZmZzZXQpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogIEBtZXRob2Qgc3RhcnRcblx0XHQgKiAgQG5hbWUgc3RhcnRcblx0XHQgKi9cblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBzdGFydCBtZXRob2Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgLy9pZiBpdCdzIGEgbG9vcCB0aGUgZGVmYXVsdCBvZmZzZXQgaXMgdGhlIGxvb3BzdGFydCBwb2ludFxuXHQgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIHRoaXMuX2xvb3BTdGFydCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9vdGhlcndpc2UgdGhlIGRlZmF1bHQgb2Zmc2V0IGlzIDBcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY29tcHV0ZSB0aGUgdmFsdWVzIGluIHNlY29uZHNcblx0ICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgIHZhciBjb21wdXRlZER1cmF0aW9uID0gVG9uZS5kZWZhdWx0QXJnKGR1cmF0aW9uLCBNYXRoLm1heCh0aGlzLl9idWZmZXIuZHVyYXRpb24gLSBvZmZzZXQsIDApKTtcblx0ICAgICAgICBjb21wdXRlZER1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoY29tcHV0ZWREdXJhdGlvbik7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBlbGFwc2VkIHRpbWUgY291bnRlclxuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLnN0YXJ0KHN0YXJ0VGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAvL21ha2UgdGhlIHNvdXJjZVxuXHQgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2Uoe1xuXHQgICAgICAgICAgICAnYnVmZmVyJzogdGhpcy5fYnVmZmVyLFxuXHQgICAgICAgICAgICAnbG9vcCc6IHRoaXMuX2xvb3AsXG5cdCAgICAgICAgICAgICdsb29wU3RhcnQnOiB0aGlzLl9sb29wU3RhcnQsXG5cdCAgICAgICAgICAgICdsb29wRW5kJzogdGhpcy5fbG9vcEVuZCxcblx0ICAgICAgICAgICAgJ29uZW5kZWQnOiB0aGlzLl9vblNvdXJjZUVuZC5iaW5kKHRoaXMpLFxuXHQgICAgICAgICAgICAncGxheWJhY2tSYXRlJzogdGhpcy5fcGxheWJhY2tSYXRlLFxuXHQgICAgICAgICAgICAnZmFkZUluJzogdGhpcy5mYWRlSW4sXG5cdCAgICAgICAgICAgICdmYWRlT3V0JzogdGhpcy5mYWRlT3V0XG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGxvb3BpbmcgcHJvcGVydGllc1xuXHQgICAgICAgIGlmICghdGhpcy5fbG9vcCAmJiAhdGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIC8vaWYgaXQncyBub3QgbG9vcGluZywgc2V0IHRoZSBzdGF0ZSBjaGFuZ2UgYXQgdGhlIGVuZCBvZiB0aGUgc2FtcGxlXG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgc3RhcnRUaW1lICsgY29tcHV0ZWREdXJhdGlvbiAvIHRoaXMuX3BsYXliYWNrUmF0ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYWRkIGl0IHRvIHRoZSBhcnJheSBvZiBhY3RpdmUgc291cmNlc1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMucHVzaChzb3VyY2UpO1xuXHQgICAgICAgIC8vc3RhcnQgaXRcblx0ICAgICAgICBpZiAodGhpcy5fbG9vcCAmJiBUb25lLmlzVW5kZWYoZHVyYXRpb24pKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdGFydChzdGFydFRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgc291cmNlLnN0YXJ0KHN0YXJ0VGltZSwgb2Zmc2V0LCBjb21wdXRlZER1cmF0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgcGxheWJhY2suXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgYW5kIHRoZW4gcmVzdGFydCB0aGUgcGxheWVyIGZyb20gdGhlIGJlZ2lubmluZyAob3Igb2Zmc2V0KVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbc3RhcnRUaW1lPW5vd10gV2hlbiB0aGUgcGxheWVyIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW29mZnNldD0wXSBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBzYW1wbGUgc2hvdWxkIHBsYXkuIElmIG5vIGR1cmF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdpdmVuLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZ1bGwgbGVuZ3RoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzYW1wbGUgKG1pbnVzIGFueSBvZmZzZXQpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0LCBkdXJhdGlvbikge1xuXHQgICAgICAgIHRoaXMuX3N0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhcnQodGltZSwgb2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNlZWsgdG8gYSBzcGVjaWZpYyB0aW1lIGluIHRoZSBwbGF5ZXIncyBidWZmZXIuIElmIHRoZVxuXHRcdCAqICBzb3VyY2UgaXMgbm8gbG9uZ2VyIHBsYXlpbmcgYXQgdGhhdCB0aW1lLCBpdCB3aWxsIHN0b3AuXG5cdFx0ICogIElmIHlvdSBzZWVrIHRvIGEgdGltZSB0aGF0XG5cdFx0ICogIEBwYXJhbSB7VGltZX0gb2Zmc2V0IFRoZSB0aW1lIHRvIHNlZWsgdG8uXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHRpbWUgVGhlIHRpbWUgZm9yIHRoZSBzZWVrIGV2ZW50IHRvIG9jY3VyLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zdGFydCgwLjIpO1xuXHRcdCAqIHNvdXJjZS5zdG9wKDAuNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuc2VlayA9IGZ1bmN0aW9uIChvZmZzZXQsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICAgICAgLy8gaWYgaXQncyBjdXJyZW50bHkgcGxheWluZywgc3RvcCBpdFxuXHQgICAgICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgICAgICAvL3Jlc3RhcnQgaXQgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAgICAgICAgdGhpcy5fc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgbG9vcCBzdGFydCBhbmQgZW5kLiBXaWxsIG9ubHkgbG9vcCBpZiBsb29wIGlzXG5cdFx0ICogIHNldCB0byB0cnVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGxvb3BTdGFydCBUaGUgbG9vcCBlbmQgdGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGxvb3BFbmQgVGhlIGxvb3AgZW5kIHRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9sb29wIDAuMSBzZWNvbmRzIG9mIHRoZSBmaWxlLlxuXHRcdCAqIHBsYXllci5zZXRMb29wUG9pbnRzKDAuMiwgMC4zKTtcblx0XHQgKiBwbGF5ZXIubG9vcCA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuc2V0TG9vcFBvaW50cyA9IGZ1bmN0aW9uIChsb29wU3RhcnQsIGxvb3BFbmQpIHtcblx0ICAgICAgICB0aGlzLmxvb3BTdGFydCA9IGxvb3BTdGFydDtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBsb29wRW5kO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBzdGFydCBhdCB0aGlzIHBvc2l0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wU3RhcnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wU3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAvL2dldCB0aGUgY3VycmVudCBzb3VyY2Vcblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgICAgIHNvdXJjZS5sb29wU3RhcnQgPSBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgbG9vcCBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIGVuZCBhdCB0aGlzIHBvc2l0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3BFbmQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wRW5kKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSBsb29wRW5kO1xuXHQgICAgICAgICAgICAvL2dldCB0aGUgY3VycmVudCBzb3VyY2Vcblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgICAgIHNvdXJjZS5sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXVkaW8gYnVmZmVyIGJlbG9uZ2luZyB0byB0aGUgcGxheWVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7VG9uZS5CdWZmZXJ9XG5cdFx0ICogQG5hbWUgYnVmZmVyXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnYnVmZmVyJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlci5zZXQoYnVmZmVyKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXIgc2hvdWxkIGxvb3Agb25jZSBpdCdzIG92ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvb3Bcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdsb29wJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3ApIHtcblx0ICAgICAgICAgICAgLy9pZiBubyBjaGFuZ2UsIGRvIG5vdGhpbmdcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3AgPT09IGxvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIGlmICghbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgLy9zdG9wIHRoZSBwbGF5YmFjayBvbiB0aGUgbmV4dCBjeWNsZVxuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RvcEF0TmV4dEl0ZXJhdGlvbihub3cpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy9yZW1vdmUgdGhlIG5leHQgc3RvcEV2ZW50XG5cdCAgICAgICAgICAgICAgICB2YXIgc3RvcEV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0TmV4dFN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCwgbm93KTtcblx0ICAgICAgICAgICAgICAgIGlmIChzdG9wRXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UubG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHN0b3BFdmVudC50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5jYW5jZWwoc3RvcEV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGEgc3RvcCBldmVudCBhdCB0aGUgbmV4dCBmdWxsIGl0ZXJhdGlvbi4gVXNlZFxuXHRcdCAqICBmb3Igc2NoZWR1bGluZyBzdG9wIHdoZW4gdGhlIGxvb3Agc3RhdGUgb3IgcGxheWJhY2tSYXRlIGNoYW5nZXNcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgbm93ICBUaGUgY3VycmVudCB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX3N0b3BBdE5leHRJdGVyYXRpb24gPSBmdW5jdGlvbiAobm93KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKG5vdykgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB2YXIgbmV4dFN0b3AgPSB0aGlzLl9zdGF0ZS5nZXROZXh0U3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBub3cpO1xuXHQgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLl9lbGFwc2VkVGltZS5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IE1hdGgubWF4KE1hdGguY2VpbChwb3NpdGlvbiAvIHRoaXMuYnVmZmVyLmR1cmF0aW9uKSwgMSk7XG5cdCAgICAgICAgICAgIHZhciBzdG9wVGltZSA9IHRoaXMuX2VsYXBzZWRUaW1lLmdldFRpbWVPZlRpY2soaXRlcmF0aW9ucyAqIHRoaXMuYnVmZmVyLmR1cmF0aW9uLCBuZXh0U3RvcCA/IG5leHRTdG9wLnRpbWUgLSB0aGlzLnNhbXBsZVRpbWUgOiBJbmZpbml0eSk7XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcChzdG9wVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwbGF5YmFjayBzcGVlZC4gMSBpcyBub3JtYWwgc3BlZWQuIFRoaXMgaXMgbm90IGEgc2lnbmFsIGJlY2F1c2Vcblx0XHQgKiBTYWZhcmkgYW5kIGlPUyBjdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBwbGF5YmFja1JhdGUgYXMgYSBzaWduYWwuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKHJhdGUsIG5vdyk7XG5cdCAgICAgICAgICAgIC8vaWYgaXQncyBub3QgbG9vcGluZ1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BBdE5leHRJdGVyYXRpb24obm93KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL3NldCBhbGwgdGhlIHNvdXJjZXNcblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgICAgIHNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VmFsdWVBdFRpbWUocmF0ZSwgbm93KTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyLiBcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBwb3NpdGlvblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ3Bvc2l0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKG5vdykgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiB0aGlzLmxvYWRlZCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gdGhpcy5idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLl9lbGFwc2VkVGltZS5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICUgZHVyYXRpb247XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRpcmVjdGlvbiB0aGUgYnVmZmVyIHNob3VsZCBwbGF5IGluXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIHJldmVyc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdyZXZlcnNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLnJldmVyc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyZXYpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnJldmVyc2UgPSByZXY7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiBhbGwgdGhlIGJ1ZmZlciBpcyBsb2FkZWRcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmxvYWRlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBEaXNwb3NlIGFuZCBkaXNjb25uZWN0LlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9kaXNjb25uZWN0IGFsbCBvZiB0aGUgcGxheWVyc1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IG51bGw7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QbGF5ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5QbGF5ZXJzIGNvbWJpbmVzIG11bHRpcGxlIFtUb25lLlBsYXllcl0oUGxheWVyKSBvYmplY3RzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSB1cmxzIEFuIG9iamVjdCBtYXBwaW5nIGEgbmFtZSB0byBhIHVybC5cblx0XHQgKiAgQHBhcmFtIHtmdW5jdGlvbj19IG9ubG9hZCBUaGUgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gYWxsIGJ1ZmZlcnMgYXJlIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycyA9IGZ1bmN0aW9uICh1cmxzKSB7XG5cdCAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIGFyZ3Muc2hpZnQoKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJncywgWydvbmxvYWQnXSwgVG9uZS5QbGF5ZXJzKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBzb3VyY2Uudm9sdW1lLnZhbHVlID0gLTY7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgb3V0cHV0IGV4cGxpY2l0bHkgc3RlcmVvXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLm91dHB1dC5vdXRwdXQuY2hhbm5lbENvdW50ID0gMjtcblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICAvL211dGUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGNvbnRhaW5lciBvZiBhbGwgb2YgdGhlIHBsYXllcnNcblx0XHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWVycyA9IHt9O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGxvYWRpbmcgY291bnRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50ID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHByaXZhdGUgaG9sZGVyIG9mIHRoZSBmYWRlSW4gdGltZVxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmFkZUluID0gb3B0aW9ucy5mYWRlSW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBwcml2YXRlIGhvbGRlciBvZiB0aGUgZmFkZU91dCB0aW1lXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mYWRlT3V0ID0gb3B0aW9ucy5mYWRlT3V0O1xuXHQgICAgICAgIC8vYWRkIGFsbCBvZiB0aGUgcGxheWVyc1xuXHQgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdXJscykge1xuXHQgICAgICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQrKztcblx0ICAgICAgICAgICAgdGhpcy5hZGQobmFtZSwgdXJsc1tuYW1lXSwgdGhpcy5fYnVmZmVyTG9hZGVkLmJpbmQodGhpcywgb3B0aW9ucy5vbmxvYWQpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QbGF5ZXJzLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2UsXG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnZmFkZUluJzogMCxcblx0ICAgICAgICAnZmFkZU91dCc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQSBidWZmZXIgd2FzIGxvYWRlZC4gZGVjcmVtZW50IHRoZSBjb3VudGVyLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLl9idWZmZXJMb2FkZWQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQtLTtcblx0ICAgICAgICBpZiAodGhpcy5fbG9hZGluZ0NvdW50ID09PSAwICYmIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogc291cmNlLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBmYWRlSW4gdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBmYWRlSW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnZmFkZUluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmFkZUluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZmFkZUluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZhZGVJbiA9IGZhZGVJbjtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgICAgICBwbGF5ZXIuZmFkZUluID0gZmFkZUluO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBmYWRlT3V0IHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgZmFkZU91dFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdmYWRlT3V0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmFkZU91dDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGZhZGVPdXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmFkZU91dCA9IGZhZGVPdXQ7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgcGxheWVyLmZhZGVPdXQgPSBmYWRlT3V0O1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBzdGF0ZSBvZiB0aGUgcGxheWVycyBvYmplY3QuIFJldHVybnMgXCJzdGFydGVkXCIgaWYgYW55IG9mIHRoZSBwbGF5ZXJzIGFyZSBwbGF5aW5nLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllcnMjXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAbmFtZSBzdGF0ZVxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHBsYXlpbmcgPSBmYWxzZTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgICAgICBwbGF5aW5nID0gcGxheWluZyB8fCBwbGF5ZXIuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHJldHVybiBwbGF5aW5nID8gVG9uZS5TdGF0ZS5TdGFydGVkIDogVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRydWUgaWYgdGhlIGJ1ZmZlcnMgb2JqZWN0IGhhcyBhIGJ1ZmZlciBieSB0aGF0IG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICBuYW1lICBUaGUga2V5IG9yIGluZGV4IG9mIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLlxuXHRcdCAqICBAcmV0dXJuICB7Qm9vbGVhbn1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fcGxheWVycy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IGEgcGxheWVyIGJ5IG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIG5hbWUgIFRoZSBwbGF5ZXJzIG5hbWUgYXMgZGVmaW5lZCBpblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29uc3RydWN0b3Igb2JqZWN0IG9yIGBhZGRgIG1ldGhvZC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGxheWVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIGlmICh0aGlzLmhhcyhuYW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWVyc1tuYW1lXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuUGxheWVyczogbm8gcGxheWVyIG5hbWVkICcgKyBuYW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgcGxheWVyc1xuXHRcdCAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuXHRcdCAqIEByZXR1cm4ge1RvbmUuUGxheWVyc30gICAgICAgICAgICB0aGlzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuX2ZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBmb3IgKHZhciBwbGF5ZXJOYW1lIGluIHRoaXMuX3BsYXllcnMpIHtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcy5fcGxheWVyc1twbGF5ZXJOYW1lXSwgcGxheWVyTmFtZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGFsbCB0aGUgYnVmZmVycyBhcmUgbG9hZGVkIG9yIG5vdFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllcnMjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGlzTG9hZGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgICAgICBpc0xvYWRlZCA9IGlzTG9hZGVkICYmIHBsYXllci5sb2FkZWQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICByZXR1cm4gaXNMb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgcGxheWVyIGJ5IG5hbWUgYW5kIHVybCB0byB0aGUgUGxheWVyc1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIG5hbWUgICAgICBBIHVuaXF1ZSBuYW1lIHRvIGdpdmUgdGhlIHBsYXllclxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8VG9uZS5CdWZmZXJ8QXVkaW9idWZmZXJ9ICB1cmwgIEVpdGhlciB0aGUgdXJsIG9mIHRoZSBidWZlcixcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGFkZGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5fcGxheWVyc1tuYW1lXSA9IG5ldyBUb25lLlBsYXllcih1cmwsIGNhbGxiYWNrKS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzW25hbWVdLmZhZGVJbiA9IHRoaXMuX2ZhZGVJbjtcblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzW25hbWVdLmZhZGVPdXQgPSB0aGlzLl9mYWRlT3V0O1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgYWxsIG9mIHRoZSBwbGF5ZXJzIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIHN0b3AgYWxsIG9mIHRoZSBwbGF5ZXJzLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuUGxheWVyc30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5zdG9wQWxsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgcGxheWVyLnN0b3AodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3QuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGxheWVyc30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICBwbGF5ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBsYXllcnM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Vc2VyTWVkaWEgdXNlcyBNZWRpYURldmljZXMuZ2V0VXNlck1lZGlhIHRvIG9wZW4gdXBcblx0XHQgKiAgICAgICAgICBhbmQgZXh0ZXJuYWwgbWljcm9waG9uZSBvciBhdWRpbyBpbnB1dC4gQ2hlY2tcblx0XHQgKiAgICAgICAgICBbTWVkaWFEZXZpY2VzIEFQSSBTdXBwb3J0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTWVkaWFEZXZpY2VzL2dldFVzZXJNZWRpYSlcblx0XHQgKiAgICAgICAgICB0byBzZWUgd2hpY2ggYnJvd3NlcnMgYXJlIHN1cHBvcnRlZC4gQWNjZXNzIHRvIGFuIGV4dGVybmFsIGlucHV0XG5cdFx0ICogICAgICAgICAgaXMgbGltaXRlZCB0byBzZWN1cmUgKEhUVFBTKSBjb25uZWN0aW9ucy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzPX0gdm9sdW1lIFRoZSBsZXZlbCBvZiB0aGUgaW5wdXRcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xpc3QgdGhlIGlucHV0cyBhbmQgb3BlbiB0aGUgdGhpcmQgb25lXG5cdFx0ICogdmFyIG1vdHUgPSBuZXcgVG9uZS5Vc2VyTWVkaWEoKTtcblx0XHQgKlxuXHRcdCAqIC8vb3BlbmluZyB0aGUgaW5wdXQgYXNrcyB0aGUgdXNlciB0byBhY3RpdmF0ZSB0aGVpciBtaWNcblx0XHQgKiBtb3R1Lm9wZW4oKS50aGVuKGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3Byb21pc2UgcmVzb2x2ZXMgd2hlbiBpbnB1dCBpcyBhdmFpbGFibGVcblx0XHQgKiB9KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVXNlck1lZGlhID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndm9sdW1lJ10sIFRvbmUuVXNlck1lZGlhKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBNZWRpYVN0cmVhbU5vZGVcblx0XHRcdCAqICBAdHlwZSB7TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWVkaWEgc3RyZWFtIGNyZWF0ZWQgYnkgZ2V0VXNlck1lZGlhLlxuXHRcdFx0ICogIEB0eXBlIHtMb2NhbE1lZGlhU3RyZWFtfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdHJlYW0gPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvcGVuIGRldmljZVxuXHRcdFx0ICogIEB0eXBlICB7TWVkaWFEZXZpY2VJbmZvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZXZpY2UgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvdXRwdXQgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogaW5wdXQudm9sdW1lLnZhbHVlID0gLTY7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlVzZXJNZWRpYSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIE9wZW4gdGhlIG1lZGlhIHN0cmVhbS4gSWYgYSBzdHJpbmcgaXMgcGFzc2VkIGluLCBpdCBpcyBhc3N1bWVkXG5cdFx0ICogIHRvIGJlIHRoZSBsYWJlbCBvciBpZCBvZiB0aGUgc3RyZWFtLCBpZiBhIG51bWJlciBpcyBwYXNzZWQgaW4sXG5cdFx0ICogIGl0IGlzIHRoZSBpbnB1dCBudW1iZXIgb2YgdGhlIHN0cmVhbS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gW2xhYmVsT3JJZD1cImRlZmF1bHRcIl0gVGhlIGxhYmVsIG9yIGlkIG9mIHRoZSBhdWRpbyBpbnB1dCBtZWRpYSBkZXZpY2UuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXRoIG5vIGFyZ3VtZW50LCB0aGUgZGVmYXVsdCBzdHJlYW0gaXMgb3BlbmVkLlxuXHRcdCAqICBAcmV0dXJuIHtQcm9taXNlfSBUaGUgcHJvbWlzZSBpcyByZXNvbHZlZCB3aGVuIHRoZSBzdHJlYW0gaXMgb3Blbi5cblx0XHQgKi9cblx0ICAgIFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24gKGxhYmVsT3JJZCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlVzZXJNZWRpYS5lbnVtZXJhdGVEZXZpY2VzKCkudGhlbihmdW5jdGlvbiAoZGV2aWNlcykge1xuXHQgICAgICAgICAgICB2YXIgZGV2aWNlO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc051bWJlcihsYWJlbE9ySWQpKSB7XG5cdCAgICAgICAgICAgICAgICBkZXZpY2UgPSBkZXZpY2VzW2xhYmVsT3JJZF07XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBkZXZpY2UgPSBkZXZpY2VzLmZpbmQoZnVuY3Rpb24gKGRldmljZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXZpY2UubGFiZWwgPT09IGxhYmVsT3JJZCB8fCBkZXZpY2UuZGV2aWNlSWQgPT09IGxhYmVsT3JJZDtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgLy9kaWRuJ3QgZmluZCBhIG1hdGNoaW5nIGRldmljZVxuXHQgICAgICAgICAgICAgICAgaWYgKCFkZXZpY2UgJiYgZGV2aWNlcy5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZGV2aWNlID0gZGV2aWNlc1swXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRldmljZSAmJiBUb25lLmlzRGVmaW5lZChsYWJlbE9ySWQpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlVzZXJNZWRpYTogbm8gbWF0Y2hpbmcgZGV2aWNlOiAnICsgbGFiZWxPcklkKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9kZXZpY2UgPSBkZXZpY2U7XG5cdCAgICAgICAgICAgIC8vZG8gZ2V0VXNlck1lZGlhXG5cdCAgICAgICAgICAgIHZhciBjb25zdHJhaW50cyA9IHtcblx0ICAgICAgICAgICAgICAgIGF1ZGlvOiB7XG5cdCAgICAgICAgICAgICAgICAgICAgJ2VjaG9DYW5jZWxsYXRpb24nOiBmYWxzZSxcblx0ICAgICAgICAgICAgICAgICAgICAnc2FtcGxlUmF0ZSc6IHRoaXMuY29udGV4dC5zYW1wbGVSYXRlXG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIGlmIChkZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzLmF1ZGlvLmRldmljZUlkID0gZGV2aWNlLmRldmljZUlkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYShjb25zdHJhaW50cykudGhlbihmdW5jdGlvbiAoc3RyZWFtKSB7XG5cdCAgICAgICAgICAgICAgICAvL3N0YXJ0IGEgbmV3IHNvdXJjZSBvbmx5IGlmIHRoZSBwcmV2aW91cyBvbmUgaXMgY2xvc2VkXG5cdCAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3N0cmVhbSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcblx0ICAgICAgICAgICAgICAgICAgICAvL1dyYXAgYSBNZWRpYVN0cmVhbVNvdXJjZU5vZGUgYXJvdW5kIHRoZSBsaXZlIGlucHV0IHN0cmVhbS5cblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbSA9IHRoaXMuY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShzdHJlYW0pO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vQ29ubmVjdCB0aGUgTWVkaWFTdHJlYW1Tb3VyY2VOb2RlIHRvIGEgZ2F0ZSBnYWluIG5vZGVcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsb3NlIHRoZSBtZWRpYSBzdHJlYW1cblx0XHQgKiAgQHJldHVybiB7VG9uZS5Vc2VyTWVkaWF9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RyZWFtKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0cmVhbS5nZXRBdWRpb1RyYWNrcygpLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG5cdCAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB0aGlzLl9zdHJlYW0gPSBudWxsO1xuXHQgICAgICAgICAgICAvL3JlbW92ZSB0aGUgb2xkIG1lZGlhIHN0cmVhbVxuXHQgICAgICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZGV2aWNlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyBhIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2l0aCB0aGUgbGlzdCBvZiBhdWRpbyBpbnB1dCBkZXZpY2VzIGF2YWlsYWJsZS5cblx0XHQgKiAgQHJldHVybiB7UHJvbWlzZX0gVGhlIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aXRoIHRoZSBkZXZpY2VzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlVzZXJNZWRpYS5lbnVtZXJhdGVEZXZpY2VzKCkudGhlbihmdW5jdGlvbihkZXZpY2VzKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKGRldmljZXMpXG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuVXNlck1lZGlhLmVudW1lcmF0ZURldmljZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oZnVuY3Rpb24gKGRldmljZXMpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGRldmljZXMuZmlsdGVyKGZ1bmN0aW9uIChkZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBkZXZpY2Uua2luZCA9PT0gJ2F1ZGlvaW5wdXQnO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgXCJzdGFydGVkXCIgd2hlbiB0aGUgbWljcm9waG9uZSBpcyBvcGVuXG5cdFx0ICogIGFuZCBcInN0b3BwZWRcIiB3aGVuIHRoZSBtaWMgaXMgY2xvc2VkLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbSAmJiB0aGlzLl9zdHJlYW0uYWN0aXZlID8gVG9uZS5TdGF0ZS5TdGFydGVkIDogVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRSZXR1cm5zIGFuIGlkZW50aWZpZXIgZm9yIHRoZSByZXByZXNlbnRlZCBkZXZpY2UgdGhhdCBpc1xuXHRcdCAqIFx0cGVyc2lzdGVkIGFjcm9zcyBzZXNzaW9ucy4gSXQgaXMgdW4tZ3Vlc3NhYmxlIGJ5IG90aGVyIGFwcGxpY2F0aW9ucyBhbmRcblx0XHQgKiBcdHVuaXF1ZSB0byB0aGUgb3JpZ2luIG9mIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLiBJdCBpcyByZXNldCB3aGVuIHRoZVxuXHRcdCAqIFx0dXNlciBjbGVhcnMgY29va2llcyAoZm9yIFByaXZhdGUgQnJvd3NpbmcsIGEgZGlmZmVyZW50IGlkZW50aWZpZXIgaXNcblx0XHQgKiBcdHVzZWQgdGhhdCBpcyBub3QgcGVyc2lzdGVkIGFjcm9zcyBzZXNzaW9ucykuIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlXG5cdFx0ICogXHRkZXZpY2UgaXMgbm90IG9wZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIGRldmljZUlkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnZGV2aWNlSWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2UuZGV2aWNlSWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0UmV0dXJucyBhIGdyb3VwIGlkZW50aWZpZXIuIFR3byBkZXZpY2VzIGhhdmUgdGhlXG5cdFx0ICogXHRzYW1lIGdyb3VwIGlkZW50aWZpZXIgaWYgdGhleSBiZWxvbmcgdG8gdGhlIHNhbWUgcGh5c2ljYWwgZGV2aWNlLlxuXHRcdCAqIFx0UmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgZGV2aWNlIGlzIG5vdCBvcGVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBncm91cElkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnZ3JvdXBJZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZS5ncm91cElkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFJldHVybnMgYSBsYWJlbCBkZXNjcmliaW5nIHRoaXMgZGV2aWNlIChmb3IgZXhhbXBsZSBcIkJ1aWx0LWluIE1pY3JvcGhvbmVcIikuXG5cdFx0ICogXHRSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZSBkZXZpY2UgaXMgbm90IG9wZW4gb3IgbGFiZWwgaXMgbm90IGF2YWlsYWJsZVxuXHRcdCAqIFx0YmVjYXVzZSBvZiBwZXJtaXNzaW9ucy5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgZ3JvdXBJZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ2xhYmVsJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlLmxhYmVsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogdXNlck1lZGlhLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXAuXG5cdFx0ICogQHJldHVybiB7VG9uZS5Vc2VyTWVkaWF9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jbG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiBnZXRVc2VyTWVkaWEgaXMgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLlxuXHRcdCAqICBAdHlwZSAge0Jvb2xlYW59XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgc3VwcG9ydGVkXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEsICdzdXBwb3J0ZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmlzRGVmaW5lZChuYXZpZ2F0b3IubWVkaWFEZXZpY2VzKSAmJiBUb25lLmlzRnVuY3Rpb24obmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmUuVXNlck1lZGlhO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTWlkaSBpcyBhIHByaW1pdGl2ZSB0eXBlIGZvciBlbmNvZGluZyBUaW1lIHZhbHVlcy5cblx0XHQgKiAgICAgICAgIFRvbmUuTWlkaSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0IHRoZSBgbmV3YCBrZXl3b3JkLiBUb25lLk1pZGkgY2FuIGJlIHBhc3NlZFxuXHRcdCAqICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIG9mIGFueSBtZXRob2Qgd2hpY2ggdGFrZXMgdGltZSBhcyBhbiBhcmd1bWVudC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkZyZXF1ZW5jeX1cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIHZhbCAgICBUaGUgdGltZSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nPX0gIHVuaXRzICBUaGUgdW5pdHMgb2YgdGhlIHZhbHVlLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB0ID0gVG9uZS5NaWRpKFwiNG5cIik7Ly9hIHF1YXJ0ZXIgbm90ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuTWlkaSkge1xuXHQgICAgICAgICAgICBUb25lLkZyZXF1ZW5jeS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5NaWRpKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZGksIFRvbmUuRnJlcXVlbmN5KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB1bml0cyBpZiBub25lIGFyZSBnaXZlbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX2RlZmF1bHRVbml0cyA9ICdtaWRpJztcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIGZyZXF1ZW5jeSBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fZnJlcXVlbmN5VG9Vbml0cyA9IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20oVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzLmNhbGwodGhpcywgZnJlcSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fdGlja3NUb1VuaXRzID0gZnVuY3Rpb24gKHRpY2tzKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20oVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl90aWNrc1RvVW5pdHMuY2FsbCh0aGlzLCB0aWNrcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBiZWF0cyBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gYmVhdHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzLmNhbGwodGhpcywgYmVhdHMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzZWNvbmQgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtTZWNvbmRzfSBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9zZWNvbmRzVG9Vbml0cyA9IGZ1bmN0aW9uIChzZWNvbmRzKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20oVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9zZWNvbmRzVG9Vbml0cy5jYWxsKHRoaXMsIHNlY29uZHMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IGFzIGEgTUlESSBub3RlXG5cdFx0ICogIEByZXR1cm4gIHtNSURJfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuTWlkaSg2MCkudG9NaWRpKCk7IC8vNjBcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUudG9NaWRpID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IGFzIGEgTUlESSBub3RlXG5cdFx0ICogIEByZXR1cm4gIHtNSURJfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuTWlkaSg2MCkudG9NaWRpKCk7IC8vNjBcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUudG9GcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5Lm10b2YodGhpcy50b01pZGkoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyYW5zcG9zZXMgdGhlIGZyZXF1ZW5jeSBieSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlbWl0b25lcy5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWx9ICBpbnRlcnZhbFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5GcmVxdWVuY3l9IEEgbmV3IHRyYW5zcG9zZWQgZnJlcXVlbmN5XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJBNFwiKS50cmFuc3Bvc2UoMyk7IC8vXCJDNVwiXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLnRyYW5zcG9zZSA9IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnRvTWlkaSgpICsgaW50ZXJ2YWwpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZGk7XG5cdH0pO1xuXHRcblx0cmV0dXJuIFRvbmU7XG59KSk7IiwiLyohIHA1LmpzIHYwLjcuMiBTZXB0ZW1iZXIgMDIsIDIwMTggKi8gIWZ1bmN0aW9uKGEpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPWEoKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sYSk7ZWxzZXt2YXIgYjtiPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcyxiLnA1PWEoKX19KGZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIGZ1bmN0aW9uIGEoYixjLGQpe2Z1bmN0aW9uIGUoZyxoKXtpZighY1tnXSl7aWYoIWJbZ10pe3ZhciBpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWgmJmkpcmV0dXJuIGkoZywhMCk7aWYoZilyZXR1cm4gZihnLCEwKTt2YXIgaj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2crXCInXCIpO3Rocm93IGouY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixqfXZhciBrPWNbZ109e2V4cG9ydHM6e319O2JbZ11bMF0uY2FsbChrLmV4cG9ydHMsZnVuY3Rpb24oYSl7dmFyIGM9YltnXVsxXVthXTtyZXR1cm4gZShjfHxhKX0sayxrLmV4cG9ydHMsYSxiLGMsZCl9cmV0dXJuIGNbZ10uZXhwb3J0c31mb3IodmFyIGY9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxnPTA7ZzxkLmxlbmd0aDtnKyspZShkW2ddKTtyZXR1cm4gZX0oezE6W2Z1bmN0aW9uKGEsYixjKXshZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihhKXt2YXIgYj1hLmNoYXJDb2RlQXQoMCk7cmV0dXJuIGI9PT1mfHxiPT09az82MjpiPT09Z3x8Yj09PWw/NjM6YjxoPy0xOmI8aCsxMD9iLWgrMjYrMjY6YjxqKzI2P2ItajpiPGkrMjY/Yi1pKzI2OnZvaWQgMH1mdW5jdGlvbiBjKGEpe2Z1bmN0aW9uIGMoYSl7altsKytdPWF9dmFyIGQsZixnLGgsaSxqO2lmKGEubGVuZ3RoJTQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0XCIpO3ZhciBrPWEubGVuZ3RoO2k9XCI9XCI9PT1hLmNoYXJBdChrLTIpPzI6XCI9XCI9PT1hLmNoYXJBdChrLTEpPzE6MCxqPW5ldyBlKDMqYS5sZW5ndGgvNC1pKSxnPWk+MD9hLmxlbmd0aC00OmEubGVuZ3RoO3ZhciBsPTA7Zm9yKGQ9MCxmPTA7ZDxnO2QrPTQsZis9MyloPWIoYS5jaGFyQXQoZCkpPDwxOHxiKGEuY2hhckF0KGQrMSkpPDwxMnxiKGEuY2hhckF0KGQrMikpPDw2fGIoYS5jaGFyQXQoZCszKSksYygoMTY3MTE2ODAmaCk+PjE2KSxjKCg2NTI4MCZoKT4+OCksYygyNTUmaCk7cmV0dXJuIDI9PT1pPyhoPWIoYS5jaGFyQXQoZCkpPDwyfGIoYS5jaGFyQXQoZCsxKSk+PjQsYygyNTUmaCkpOjE9PT1pJiYoaD1iKGEuY2hhckF0KGQpKTw8MTB8YihhLmNoYXJBdChkKzEpKTw8NHxiKGEuY2hhckF0KGQrMikpPj4yLGMoaD4+OCYyNTUpLGMoMjU1JmgpKSxqfWZ1bmN0aW9uIGQoYSl7ZnVuY3Rpb24gYihhKXtyZXR1cm5cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIi5jaGFyQXQoYSl9ZnVuY3Rpb24gYyhhKXtyZXR1cm4gYihhPj4xOCY2MykrYihhPj4xMiY2MykrYihhPj42JjYzKStiKDYzJmEpfXZhciBkLGUsZixnPWEubGVuZ3RoJTMsaD1cIlwiO2ZvcihkPTAsZj1hLmxlbmd0aC1nO2Q8ZjtkKz0zKWU9KGFbZF08PDE2KSsoYVtkKzFdPDw4KSthW2QrMl0saCs9YyhlKTtzd2l0Y2goZyl7Y2FzZSAxOmU9YVthLmxlbmd0aC0xXSxoKz1iKGU+PjIpLGgrPWIoZTw8NCY2MyksaCs9XCI9PVwiO2JyZWFrO2Nhc2UgMjplPShhW2EubGVuZ3RoLTJdPDw4KSthW2EubGVuZ3RoLTFdLGgrPWIoZT4+MTApLGgrPWIoZT4+NCY2MyksaCs9YihlPDwyJjYzKSxoKz1cIj1cIn1yZXR1cm4gaH12YXIgZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LGY9XCIrXCIuY2hhckNvZGVBdCgwKSxnPVwiL1wiLmNoYXJDb2RlQXQoMCksaD1cIjBcIi5jaGFyQ29kZUF0KDApLGk9XCJhXCIuY2hhckNvZGVBdCgwKSxqPVwiQVwiLmNoYXJDb2RlQXQoMCksaz1cIi1cIi5jaGFyQ29kZUF0KDApLGw9XCJfXCIuY2hhckNvZGVBdCgwKTthLnRvQnl0ZUFycmF5PWMsYS5mcm9tQnl0ZUFycmF5PWR9KHZvaWQgMD09PWM/dGhpcy5iYXNlNjRqcz17fTpjKX0se31dLDI6W2Z1bmN0aW9uKGEsYixjKXt9LHt9XSwzOltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoKXtmdW5jdGlvbiBhKCl7fXRyeXt2YXIgYj1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gYi5mb289ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9LGIuY29uc3RydWN0b3I9YSw0Mj09PWIuZm9vKCkmJmIuY29uc3RydWN0b3I9PT1hJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnN1YmFycmF5JiYwPT09Yi5zdWJhcnJheSgxLDEpLmJ5dGVMZW5ndGh9Y2F0Y2goYSl7cmV0dXJuITF9fWZ1bmN0aW9uIGUoKXtyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiBmKGEpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZj8oZi5UWVBFRF9BUlJBWV9TVVBQT1JUfHwodGhpcy5sZW5ndGg9MCx0aGlzLnBhcmVudD12b2lkIDApLFwibnVtYmVyXCI9PXR5cGVvZiBhP2codGhpcyxhKTpcInN0cmluZ1wiPT10eXBlb2YgYT9oKHRoaXMsYSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOlwidXRmOFwiKTppKHRoaXMsYSkpOmFyZ3VtZW50cy5sZW5ndGg+MT9uZXcgZihhLGFyZ3VtZW50c1sxXSk6bmV3IGYoYSl9ZnVuY3Rpb24gZyhhLGIpe2lmKGE9cChhLGI8MD8wOjB8cShiKSksIWYuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIGM9MDtjPGI7YysrKWFbY109MDtyZXR1cm4gYX1mdW5jdGlvbiBoKGEsYixjKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYyYmXCJcIiE9PWN8fChjPVwidXRmOFwiKSxhPXAoYSwwfHMoYixjKSksYS53cml0ZShiLGMpLGF9ZnVuY3Rpb24gaShhLGIpe2lmKGYuaXNCdWZmZXIoYikpcmV0dXJuIGooYSxiKTtpZihZKGIpKXJldHVybiBrKGEsYik7aWYobnVsbD09Yil0aHJvdyBuZXcgVHlwZUVycm9yKFwibXVzdCBzdGFydCB3aXRoIG51bWJlciwgYnVmZmVyLCBhcnJheSBvciBzdHJpbmdcIik7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyKXtpZihiLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBsKGEsYik7aWYoYiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBtKGEsYil9cmV0dXJuIGIubGVuZ3RoP24oYSxiKTpvKGEsYil9ZnVuY3Rpb24gaihhLGIpe3ZhciBjPTB8cShiLmxlbmd0aCk7cmV0dXJuIGE9cChhLGMpLGIuY29weShhLDAsMCxjKSxhfWZ1bmN0aW9uIGsoYSxiKXt2YXIgYz0wfHEoYi5sZW5ndGgpO2E9cChhLGMpO2Zvcih2YXIgZD0wO2Q8YztkKz0xKWFbZF09MjU1JmJbZF07cmV0dXJuIGF9ZnVuY3Rpb24gbChhLGIpe3ZhciBjPTB8cShiLmxlbmd0aCk7YT1wKGEsYyk7Zm9yKHZhciBkPTA7ZDxjO2QrPTEpYVtkXT0yNTUmYltkXTtyZXR1cm4gYX1mdW5jdGlvbiBtKGEsYil7cmV0dXJuIGYuVFlQRURfQVJSQVlfU1VQUE9SVD8oYi5ieXRlTGVuZ3RoLGE9Zi5fYXVnbWVudChuZXcgVWludDhBcnJheShiKSkpOmE9bChhLG5ldyBVaW50OEFycmF5KGIpKSxhfWZ1bmN0aW9uIG4oYSxiKXt2YXIgYz0wfHEoYi5sZW5ndGgpO2E9cChhLGMpO2Zvcih2YXIgZD0wO2Q8YztkKz0xKWFbZF09MjU1JmJbZF07cmV0dXJuIGF9ZnVuY3Rpb24gbyhhLGIpe3ZhciBjLGQ9MDtcIkJ1ZmZlclwiPT09Yi50eXBlJiZZKGIuZGF0YSkmJihjPWIuZGF0YSxkPTB8cShjLmxlbmd0aCkpLGE9cChhLGQpO2Zvcih2YXIgZT0wO2U8ZDtlKz0xKWFbZV09MjU1JmNbZV07cmV0dXJuIGF9ZnVuY3Rpb24gcChhLGIpe3JldHVybiBmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGE9Zi5fYXVnbWVudChuZXcgVWludDhBcnJheShiKSksYS5fX3Byb3RvX189Zi5wcm90b3R5cGUpOihhLmxlbmd0aD1iLGEuX2lzQnVmZmVyPSEwKSwwIT09YiYmYjw9Zi5wb29sU2l6ZT4+PjEmJihhLnBhcmVudD1aKSxhfWZ1bmN0aW9uIHEoYSl7aWYoYT49ZSgpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweFwiK2UoKS50b1N0cmluZygxNikrXCIgYnl0ZXNcIik7cmV0dXJuIDB8YX1mdW5jdGlvbiByKGEsYil7aWYoISh0aGlzIGluc3RhbmNlb2YgcikpcmV0dXJuIG5ldyByKGEsYik7dmFyIGM9bmV3IGYoYSxiKTtyZXR1cm4gZGVsZXRlIGMucGFyZW50LGN9ZnVuY3Rpb24gcyhhLGIpe1wic3RyaW5nXCIhPXR5cGVvZiBhJiYoYT1cIlwiK2EpO3ZhciBjPWEubGVuZ3RoO2lmKDA9PT1jKXJldHVybiAwO2Zvcih2YXIgZD0hMTs7KXN3aXRjaChiKXtjYXNlXCJhc2NpaVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcInJhd1wiOmNhc2VcInJhd3NcIjpyZXR1cm4gYztjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gUihhKS5sZW5ndGg7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIDIqYztjYXNlXCJoZXhcIjpyZXR1cm4gYz4+PjE7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIFUoYSkubGVuZ3RoO2RlZmF1bHQ6aWYoZClyZXR1cm4gUihhKS5sZW5ndGg7Yj0oXCJcIitiKS50b0xvd2VyQ2FzZSgpLGQ9ITB9fWZ1bmN0aW9uIHQoYSxiLGMpe3ZhciBkPSExO2lmKGJ8PTAsYz12b2lkIDA9PT1jfHxjPT09MS8wP3RoaXMubGVuZ3RoOjB8YyxhfHwoYT1cInV0ZjhcIiksYjwwJiYoYj0wKSxjPnRoaXMubGVuZ3RoJiYoYz10aGlzLmxlbmd0aCksYzw9YilyZXR1cm5cIlwiO2Zvcig7Oylzd2l0Y2goYSl7Y2FzZVwiaGV4XCI6cmV0dXJuIEYodGhpcyxiLGMpO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBCKHRoaXMsYixjKTtjYXNlXCJhc2NpaVwiOnJldHVybiBEKHRoaXMsYixjKTtjYXNlXCJiaW5hcnlcIjpyZXR1cm4gRSh0aGlzLGIsYyk7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIEEodGhpcyxiLGMpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBHKHRoaXMsYixjKTtkZWZhdWx0OmlmKGQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2EpO2E9KGErXCJcIikudG9Mb3dlckNhc2UoKSxkPSEwfX1mdW5jdGlvbiB1KGEsYixjLGQpe2M9TnVtYmVyKGMpfHwwO3ZhciBlPWEubGVuZ3RoLWM7ZD8oZD1OdW1iZXIoZCkpPmUmJihkPWUpOmQ9ZTt2YXIgZj1iLmxlbmd0aDtpZihmJTIhPTApdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBoZXggc3RyaW5nXCIpO2Q+Zi8yJiYoZD1mLzIpO2Zvcih2YXIgZz0wO2c8ZDtnKyspe3ZhciBoPXBhcnNlSW50KGIuc3Vic3RyKDIqZywyKSwxNik7aWYoaXNOYU4oaCkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBoZXggc3RyaW5nXCIpO2FbYytnXT1ofXJldHVybiBnfWZ1bmN0aW9uIHYoYSxiLGMsZCl7cmV0dXJuIFYoUihiLGEubGVuZ3RoLWMpLGEsYyxkKX1mdW5jdGlvbiB3KGEsYixjLGQpe3JldHVybiBWKFMoYiksYSxjLGQpfWZ1bmN0aW9uIHgoYSxiLGMsZCl7cmV0dXJuIHcoYSxiLGMsZCl9ZnVuY3Rpb24geShhLGIsYyxkKXtyZXR1cm4gVihVKGIpLGEsYyxkKX1mdW5jdGlvbiB6KGEsYixjLGQpe3JldHVybiBWKFQoYixhLmxlbmd0aC1jKSxhLGMsZCl9ZnVuY3Rpb24gQShhLGIsYyl7cmV0dXJuIDA9PT1iJiZjPT09YS5sZW5ndGg/Vy5mcm9tQnl0ZUFycmF5KGEpOlcuZnJvbUJ5dGVBcnJheShhLnNsaWNlKGIsYykpfWZ1bmN0aW9uIEIoYSxiLGMpe2M9TWF0aC5taW4oYS5sZW5ndGgsYyk7Zm9yKHZhciBkPVtdLGU9YjtlPGM7KXt2YXIgZj1hW2VdLGc9bnVsbCxoPWY+MjM5PzQ6Zj4yMjM/MzpmPjE5MT8yOjE7aWYoZStoPD1jKXt2YXIgaSxqLGssbDtzd2l0Y2goaCl7Y2FzZSAxOmY8MTI4JiYoZz1mKTticmVhaztjYXNlIDI6aT1hW2UrMV0sMTI4PT0oMTkyJmkpJiYobD0oMzEmZik8PDZ8NjMmaSk+MTI3JiYoZz1sKTticmVhaztjYXNlIDM6aT1hW2UrMV0saj1hW2UrMl0sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImaikmJihsPSgxNSZmKTw8MTJ8KDYzJmkpPDw2fDYzJmopPjIwNDcmJihsPDU1Mjk2fHxsPjU3MzQzKSYmKGc9bCk7YnJlYWs7Y2FzZSA0Omk9YVtlKzFdLGo9YVtlKzJdLGs9YVtlKzNdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJmopJiYxMjg9PSgxOTImaykmJihsPSgxNSZmKTw8MTh8KDYzJmkpPDwxMnwoNjMmaik8PDZ8NjMmayk+NjU1MzUmJmw8MTExNDExMiYmKGc9bCl9fW51bGw9PT1nPyhnPTY1NTMzLGg9MSk6Zz42NTUzNSYmKGctPTY1NTM2LGQucHVzaChnPj4+MTAmMTAyM3w1NTI5NiksZz01NjMyMHwxMDIzJmcpLGQucHVzaChnKSxlKz1ofXJldHVybiBDKGQpfWZ1bmN0aW9uIEMoYSl7dmFyIGI9YS5sZW5ndGg7aWYoYjw9JClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsYSk7Zm9yKHZhciBjPVwiXCIsZD0wO2Q8YjspYys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsYS5zbGljZShkLGQrPSQpKTtyZXR1cm4gY31mdW5jdGlvbiBEKGEsYixjKXt2YXIgZD1cIlwiO2M9TWF0aC5taW4oYS5sZW5ndGgsYyk7Zm9yKHZhciBlPWI7ZTxjO2UrKylkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZhW2VdKTtyZXR1cm4gZH1mdW5jdGlvbiBFKGEsYixjKXt2YXIgZD1cIlwiO2M9TWF0aC5taW4oYS5sZW5ndGgsYyk7Zm9yKHZhciBlPWI7ZTxjO2UrKylkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGFbZV0pO3JldHVybiBkfWZ1bmN0aW9uIEYoYSxiLGMpe3ZhciBkPWEubGVuZ3RoOyghYnx8YjwwKSYmKGI9MCksKCFjfHxjPDB8fGM+ZCkmJihjPWQpO2Zvcih2YXIgZT1cIlwiLGY9YjtmPGM7ZisrKWUrPVEoYVtmXSk7cmV0dXJuIGV9ZnVuY3Rpb24gRyhhLGIsYyl7Zm9yKHZhciBkPWEuc2xpY2UoYixjKSxlPVwiXCIsZj0wO2Y8ZC5sZW5ndGg7Zis9MillKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGRbZl0rMjU2KmRbZisxXSk7cmV0dXJuIGV9ZnVuY3Rpb24gSChhLGIsYyl7aWYoYSUxIT0wfHxhPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgaXMgbm90IHVpbnRcIik7aWYoYStiPmMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoXCIpfWZ1bmN0aW9uIEkoYSxiLGMsZCxlLGcpe2lmKCFmLmlzQnVmZmVyKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJidWZmZXIgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZVwiKTtpZihiPmV8fGI8Zyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInZhbHVlIGlzIG91dCBvZiBib3VuZHNcIik7aWYoYytkPmEubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiaW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIEooYSxiLGMsZCl7YjwwJiYoYj02NTUzNStiKzEpO2Zvcih2YXIgZT0wLGY9TWF0aC5taW4oYS5sZW5ndGgtYywyKTtlPGY7ZSsrKWFbYytlXT0oYiYyNTU8PDgqKGQ/ZToxLWUpKT4+PjgqKGQ/ZToxLWUpfWZ1bmN0aW9uIEsoYSxiLGMsZCl7YjwwJiYoYj00Mjk0OTY3Mjk1K2IrMSk7Zm9yKHZhciBlPTAsZj1NYXRoLm1pbihhLmxlbmd0aC1jLDQpO2U8ZjtlKyspYVtjK2VdPWI+Pj44KihkP2U6My1lKSYyNTV9ZnVuY3Rpb24gTChhLGIsYyxkLGUsZil7aWYoYj5lfHxiPGYpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ2YWx1ZSBpcyBvdXQgb2YgYm91bmRzXCIpO2lmKGMrZD5hLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImluZGV4IG91dCBvZiByYW5nZVwiKTtpZihjPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gTShhLGIsYyxkLGUpe3JldHVybiBlfHxMKGEsYixjLDQsMy40MDI4MjM0NjYzODUyODg2ZTM4LC0zLjQwMjgyMzQ2NjM4NTI4ODZlMzgpLFgud3JpdGUoYSxiLGMsZCwyMyw0KSxjKzR9ZnVuY3Rpb24gTihhLGIsYyxkLGUpe3JldHVybiBlfHxMKGEsYixjLDgsMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCwtMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCksWC53cml0ZShhLGIsYyxkLDUyLDgpLGMrOH1mdW5jdGlvbiBPKGEpe2lmKGE9UChhKS5yZXBsYWNlKGFhLFwiXCIpLGEubGVuZ3RoPDIpcmV0dXJuXCJcIjtmb3IoO2EubGVuZ3RoJTQhPTA7KWErPVwiPVwiO3JldHVybiBhfWZ1bmN0aW9uIFAoYSl7cmV0dXJuIGEudHJpbT9hLnRyaW0oKTphLnJlcGxhY2UoL15cXHMrfFxccyskL2csXCJcIil9ZnVuY3Rpb24gUShhKXtyZXR1cm4gYTwxNj9cIjBcIithLnRvU3RyaW5nKDE2KTphLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBSKGEsYil7Yj1ifHwxLzA7Zm9yKHZhciBjLGQ9YS5sZW5ndGgsZT1udWxsLGY9W10sZz0wO2c8ZDtnKyspe2lmKChjPWEuY2hhckNvZGVBdChnKSk+NTUyOTUmJmM8NTczNDQpe2lmKCFlKXtpZihjPjU2MzE5KXsoYi09Myk+LTEmJmYucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoZysxPT09ZCl7KGItPTMpPi0xJiZmLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWU9Yztjb250aW51ZX1pZihjPDU2MzIwKXsoYi09Myk+LTEmJmYucHVzaCgyMzksMTkxLDE4OSksZT1jO2NvbnRpbnVlfWM9NjU1MzYrKGUtNTUyOTY8PDEwfGMtNTYzMjApfWVsc2UgZSYmKGItPTMpPi0xJiZmLnB1c2goMjM5LDE5MSwxODkpO2lmKGU9bnVsbCxjPDEyOCl7aWYoKGItPTEpPDApYnJlYWs7Zi5wdXNoKGMpfWVsc2UgaWYoYzwyMDQ4KXtpZigoYi09Mik8MClicmVhaztmLnB1c2goYz4+NnwxOTIsNjMmY3wxMjgpfWVsc2UgaWYoYzw2NTUzNil7aWYoKGItPTMpPDApYnJlYWs7Zi5wdXNoKGM+PjEyfDIyNCxjPj42JjYzfDEyOCw2MyZjfDEyOCl9ZWxzZXtpZighKGM8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb2RlIHBvaW50XCIpO2lmKChiLT00KTwwKWJyZWFrO2YucHVzaChjPj4xOHwyNDAsYz4+MTImNjN8MTI4LGM+PjYmNjN8MTI4LDYzJmN8MTI4KX19cmV0dXJuIGZ9ZnVuY3Rpb24gUyhhKXtmb3IodmFyIGI9W10sYz0wO2M8YS5sZW5ndGg7YysrKWIucHVzaCgyNTUmYS5jaGFyQ29kZUF0KGMpKTtyZXR1cm4gYn1mdW5jdGlvbiBUKGEsYil7Zm9yKHZhciBjLGQsZSxmPVtdLGc9MDtnPGEubGVuZ3RoJiYhKChiLT0yKTwwKTtnKyspYz1hLmNoYXJDb2RlQXQoZyksZD1jPj44LGU9YyUyNTYsZi5wdXNoKGUpLGYucHVzaChkKTtyZXR1cm4gZn1mdW5jdGlvbiBVKGEpe3JldHVybiBXLnRvQnl0ZUFycmF5KE8oYSkpfWZ1bmN0aW9uIFYoYSxiLGMsZCl7Zm9yKHZhciBlPTA7ZTxkJiYhKGUrYz49Yi5sZW5ndGh8fGU+PWEubGVuZ3RoKTtlKyspYltlK2NdPWFbZV07cmV0dXJuIGV9dmFyIFc9YShcImJhc2U2NC1qc1wiKSxYPWEoXCJpZWVlNzU0XCIpLFk9YShcImlzYXJyYXlcIik7Yy5CdWZmZXI9ZixjLlNsb3dCdWZmZXI9cixjLklOU1BFQ1RfTUFYX0JZVEVTPTUwLGYucG9vbFNpemU9ODE5Mjt2YXIgWj17fTtmLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwIT09Yi5UWVBFRF9BUlJBWV9TVVBQT1JUP2IuVFlQRURfQVJSQVlfU1VQUE9SVDpkKCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyhmLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsZi5fX3Byb3RvX189VWludDhBcnJheSk6KGYucHJvdG90eXBlLmxlbmd0aD12b2lkIDAsZi5wcm90b3R5cGUucGFyZW50PXZvaWQgMCksZi5pc0J1ZmZlcj1mdW5jdGlvbihhKXtyZXR1cm4hKG51bGw9PWF8fCFhLl9pc0J1ZmZlcil9LGYuY29tcGFyZT1mdW5jdGlvbihhLGIpe2lmKCFmLmlzQnVmZmVyKGEpfHwhZi5pc0J1ZmZlcihiKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVyc1wiKTtpZihhPT09YilyZXR1cm4gMDtmb3IodmFyIGM9YS5sZW5ndGgsZD1iLmxlbmd0aCxlPTAsZz1NYXRoLm1pbihjLGQpO2U8ZyYmYVtlXT09PWJbZV07KSsrZTtyZXR1cm4gZSE9PWcmJihjPWFbZV0sZD1iW2VdKSxjPGQ/LTE6ZDxjPzE6MH0sZi5pc0VuY29kaW5nPWZ1bmN0aW9uKGEpe3N3aXRjaChTdHJpbmcoYSkudG9Mb3dlckNhc2UoKSl7Y2FzZVwiaGV4XCI6Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJiYXNlNjRcIjpjYXNlXCJyYXdcIjpjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sZi5jb25jYXQ9ZnVuY3Rpb24oYSxiKXtpZighWShhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwibGlzdCBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMuXCIpO2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gbmV3IGYoMCk7dmFyIGM7aWYodm9pZCAwPT09Yilmb3IoYj0wLGM9MDtjPGEubGVuZ3RoO2MrKyliKz1hW2NdLmxlbmd0aDt2YXIgZD1uZXcgZihiKSxlPTA7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGc9YVtjXTtnLmNvcHkoZCxlKSxlKz1nLmxlbmd0aH1yZXR1cm4gZH0sZi5ieXRlTGVuZ3RoPXMsZi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09YT9cIlwiOjA9PT1hcmd1bWVudHMubGVuZ3RoP0IodGhpcywwLGEpOnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxmLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oYSl7aWYoIWYuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXJcIik7cmV0dXJuIHRoaXM9PT1hfHwwPT09Zi5jb21wYXJlKHRoaXMsYSl9LGYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgYT1cIlwiLGI9Yy5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGE9dGhpcy50b1N0cmluZyhcImhleFwiLDAsYikubWF0Y2goLy57Mn0vZykuam9pbihcIiBcIiksdGhpcy5sZW5ndGg+YiYmKGErPVwiIC4uLiBcIikpLFwiPEJ1ZmZlciBcIithK1wiPlwifSxmLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGEpe2lmKCFmLmlzQnVmZmVyKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09YT8wOmYuY29tcGFyZSh0aGlzLGEpfSxmLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIsYyl7Zm9yKHZhciBkPS0xLGU9MDtjK2U8YS5sZW5ndGg7ZSsrKWlmKGFbYytlXT09PWJbLTE9PT1kPzA6ZS1kXSl7aWYoLTE9PT1kJiYoZD1lKSxlLWQrMT09PWIubGVuZ3RoKXJldHVybiBjK2R9ZWxzZSBkPS0xO3JldHVybi0xfWlmKGI+MjE0NzQ4MzY0Nz9iPTIxNDc0ODM2NDc6YjwtMjE0NzQ4MzY0OCYmKGI9LTIxNDc0ODM2NDgpLGI+Pj0wLDA9PT10aGlzLmxlbmd0aClyZXR1cm4tMTtpZihiPj10aGlzLmxlbmd0aClyZXR1cm4tMTtpZihiPDAmJihiPU1hdGgubWF4KHRoaXMubGVuZ3RoK2IsMCkpLFwic3RyaW5nXCI9PXR5cGVvZiBhKXJldHVybiAwPT09YS5sZW5ndGg/LTE6U3RyaW5nLnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcyxhLGIpO2lmKGYuaXNCdWZmZXIoYSkpcmV0dXJuIGModGhpcyxhLGIpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBhKXJldHVybiBmLlRZUEVEX0FSUkFZX1NVUFBPUlQmJlwiZnVuY3Rpb25cIj09PVVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsYSxiKTpjKHRoaXMsW2FdLGIpO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXJcIil9LGYucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gY29uc29sZS5sb2coXCIuZ2V0KCkgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHVzaW5nIGFycmF5IGluZGV4ZXMgaW5zdGVhZC5cIiksdGhpcy5yZWFkVUludDgoYSl9LGYucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe3JldHVybiBjb25zb2xlLmxvZyhcIi5zZXQoKSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdXNpbmcgYXJyYXkgaW5kZXhlcyBpbnN0ZWFkLlwiKSx0aGlzLndyaXRlVUludDgoYSxiKX0sZi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oYSxiLGMsZCl7aWYodm9pZCAwPT09YilkPVwidXRmOFwiLGM9dGhpcy5sZW5ndGgsYj0wO2Vsc2UgaWYodm9pZCAwPT09YyYmXCJzdHJpbmdcIj09dHlwZW9mIGIpZD1iLGM9dGhpcy5sZW5ndGgsYj0wO2Vsc2UgaWYoaXNGaW5pdGUoYikpYnw9MCxpc0Zpbml0ZShjKT8oY3w9MCx2b2lkIDA9PT1kJiYoZD1cInV0ZjhcIikpOihkPWMsYz12b2lkIDApO2Vsc2V7dmFyIGU9ZDtkPWIsYj0wfGMsYz1lfXZhciBmPXRoaXMubGVuZ3RoLWI7aWYoKHZvaWQgMD09PWN8fGM+ZikmJihjPWYpLGEubGVuZ3RoPjAmJihjPDB8fGI8MCl8fGI+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJhdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kc1wiKTtkfHwoZD1cInV0ZjhcIik7Zm9yKHZhciBnPSExOzspc3dpdGNoKGQpe2Nhc2VcImhleFwiOnJldHVybiB1KHRoaXMsYSxiLGMpO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiB2KHRoaXMsYSxiLGMpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIHcodGhpcyxhLGIsYyk7Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIHgodGhpcyxhLGIsYyk7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIHkodGhpcyxhLGIsYyk7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIHoodGhpcyxhLGIsYyk7ZGVmYXVsdDppZihnKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitkKTtkPShcIlwiK2QpLnRvTG93ZXJDYXNlKCksZz0hMH19LGYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiQnVmZmVyXCIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgJD00MDk2O2YucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5sZW5ndGg7YT1+fmEsYj12b2lkIDA9PT1iP2M6fn5iLGE8MD8oYSs9Yyk8MCYmKGE9MCk6YT5jJiYoYT1jKSxiPDA/KGIrPWMpPDAmJihiPTApOmI+YyYmKGI9YyksYjxhJiYoYj1hKTt2YXIgZDtpZihmLlRZUEVEX0FSUkFZX1NVUFBPUlQpZD1mLl9hdWdtZW50KHRoaXMuc3ViYXJyYXkoYSxiKSk7ZWxzZXt2YXIgZT1iLWE7ZD1uZXcgZihlLHZvaWQgMCk7Zm9yKHZhciBnPTA7ZzxlO2crKylkW2ddPXRoaXNbZythXX1yZXR1cm4gZC5sZW5ndGgmJihkLnBhcmVudD10aGlzLnBhcmVudHx8dGhpcyksZH0sZi5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihhLGIsYyl7YXw9MCxifD0wLGN8fEgoYSxiLHRoaXMubGVuZ3RoKTtmb3IodmFyIGQ9dGhpc1thXSxlPTEsZj0wOysrZjxiJiYoZSo9MjU2KTspZCs9dGhpc1thK2ZdKmU7cmV0dXJuIGR9LGYucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oYSxiLGMpe2F8PTAsYnw9MCxjfHxIKGEsYix0aGlzLmxlbmd0aCk7Zm9yKHZhciBkPXRoaXNbYSstLWJdLGU9MTtiPjAmJihlKj0yNTYpOylkKz10aGlzW2ErLS1iXSplO3JldHVybiBkfSxmLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDEsdGhpcy5sZW5ndGgpLHRoaXNbYV19LGYucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsMix0aGlzLmxlbmd0aCksdGhpc1thXXx0aGlzW2ErMV08PDh9LGYucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsMix0aGlzLmxlbmd0aCksdGhpc1thXTw8OHx0aGlzW2ErMV19LGYucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksKHRoaXNbYV18dGhpc1thKzFdPDw4fHRoaXNbYSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbYSszXX0sZi5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2FdKyh0aGlzW2ErMV08PDE2fHRoaXNbYSsyXTw8OHx0aGlzW2ErM10pfSxmLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oYSxiLGMpe2F8PTAsYnw9MCxjfHxIKGEsYix0aGlzLmxlbmd0aCk7Zm9yKHZhciBkPXRoaXNbYV0sZT0xLGY9MDsrK2Y8YiYmKGUqPTI1Nik7KWQrPXRoaXNbYStmXSplO3JldHVybiBlKj0xMjgsZD49ZSYmKGQtPU1hdGgucG93KDIsOCpiKSksZH0sZi5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGEsYixjKXthfD0wLGJ8PTAsY3x8SChhLGIsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZD1iLGU9MSxmPXRoaXNbYSstLWRdO2Q+MCYmKGUqPTI1Nik7KWYrPXRoaXNbYSstLWRdKmU7cmV0dXJuIGUqPTEyOCxmPj1lJiYoZi09TWF0aC5wb3coMiw4KmIpKSxmfSxmLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbYV0/LTEqKDI1NS10aGlzW2FdKzEpOnRoaXNbYV19LGYucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGEsYil7Ynx8SChhLDIsdGhpcy5sZW5ndGgpO3ZhciBjPXRoaXNbYV18dGhpc1thKzFdPDw4O3JldHVybiAzMjc2OCZjPzQyOTQ5MDE3NjB8YzpjfSxmLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihhLGIpe2J8fEgoYSwyLHRoaXMubGVuZ3RoKTt2YXIgYz10aGlzW2ErMV18dGhpc1thXTw8ODtyZXR1cm4gMzI3NjgmYz80Mjk0OTAxNzYwfGM6Y30sZi5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLHRoaXNbYV18dGhpc1thKzFdPDw4fHRoaXNbYSsyXTw8MTZ8dGhpc1thKzNdPDwyNH0sZi5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLHRoaXNbYV08PDI0fHRoaXNbYSsxXTw8MTZ8dGhpc1thKzJdPDw4fHRoaXNbYSszXX0sZi5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLFgucmVhZCh0aGlzLGEsITAsMjMsNCl9LGYucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSxYLnJlYWQodGhpcyxhLCExLDIzLDQpfSxmLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDgsdGhpcy5sZW5ndGgpLFgucmVhZCh0aGlzLGEsITAsNTIsOCl9LGYucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsOCx0aGlzLmxlbmd0aCksWC5yZWFkKHRoaXMsYSwhMSw1Miw4KX0sZi5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oYSxiLGMsZCl7YT0rYSxifD0wLGN8PTAsZHx8SSh0aGlzLGEsYixjLE1hdGgucG93KDIsOCpjKSwwKTt2YXIgZT0xLGY9MDtmb3IodGhpc1tiXT0yNTUmYTsrK2Y8YyYmKGUqPTI1Nik7KXRoaXNbYitmXT1hL2UmMjU1O3JldHVybiBiK2N9LGYucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGEsYixjLGQpe2E9K2EsYnw9MCxjfD0wLGR8fEkodGhpcyxhLGIsYyxNYXRoLnBvdygyLDgqYyksMCk7dmFyIGU9Yy0xLGY9MTtmb3IodGhpc1tiK2VdPTI1NSZhOy0tZT49MCYmKGYqPTI1Nik7KXRoaXNbYitlXT1hL2YmMjU1O3JldHVybiBiK2N9LGYucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwxLDI1NSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChhPU1hdGguZmxvb3IoYSkpLHRoaXNbYl09MjU1JmEsYisxfSxmLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMiw2NTUzNSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09MjU1JmEsdGhpc1tiKzFdPWE+Pj44KTpKKHRoaXMsYSxiLCEwKSxiKzJ9LGYucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwyLDY1NTM1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hPj4+OCx0aGlzW2IrMV09MjU1JmEpOkoodGhpcyxhLGIsITEpLGIrMn0sZi5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDQsNDI5NDk2NzI5NSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYiszXT1hPj4+MjQsdGhpc1tiKzJdPWE+Pj4xNix0aGlzW2IrMV09YT4+PjgsdGhpc1tiXT0yNTUmYSk6Syh0aGlzLGEsYiwhMCksYis0fSxmLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsNCw0Mjk0OTY3Mjk1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hPj4+MjQsdGhpc1tiKzFdPWE+Pj4xNix0aGlzW2IrMl09YT4+PjgsdGhpc1tiKzNdPTI1NSZhKTpLKHRoaXMsYSxiLCExKSxiKzR9LGYucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYT0rYSxifD0wLCFkKXt2YXIgZT1NYXRoLnBvdygyLDgqYy0xKTtJKHRoaXMsYSxiLGMsZS0xLC1lKX12YXIgZj0wLGc9MSxoPWE8MD8xOjA7Zm9yKHRoaXNbYl09MjU1JmE7KytmPGMmJihnKj0yNTYpOyl0aGlzW2IrZl09KGEvZz4+MCktaCYyNTU7cmV0dXJuIGIrY30sZi5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihhLGIsYyxkKXtpZihhPSthLGJ8PTAsIWQpe3ZhciBlPU1hdGgucG93KDIsOCpjLTEpO0kodGhpcyxhLGIsYyxlLTEsLWUpfXZhciBmPWMtMSxnPTEsaD1hPDA/MTowO2Zvcih0aGlzW2IrZl09MjU1JmE7LS1mPj0wJiYoZyo9MjU2KTspdGhpc1tiK2ZdPShhL2c+PjApLWgmMjU1O3JldHVybiBiK2N9LGYucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDEsMTI3LC0xMjgpLGYuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGE9TWF0aC5mbG9vcihhKSksYTwwJiYoYT0yNTUrYSsxKSx0aGlzW2JdPTI1NSZhLGIrMX0sZi5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMiwzMjc2NywtMzI3NjgpLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT0yNTUmYSx0aGlzW2IrMV09YT4+PjgpOkoodGhpcyxhLGIsITApLGIrMn0sZi5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMiwzMjc2NywtMzI3NjgpLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hPj4+OCx0aGlzW2IrMV09MjU1JmEpOkoodGhpcyxhLGIsITEpLGIrMn0sZi5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09MjU1JmEsdGhpc1tiKzFdPWE+Pj44LHRoaXNbYisyXT1hPj4+MTYsdGhpc1tiKzNdPWE+Pj4yNCk6Syh0aGlzLGEsYiwhMCksYis0fSxmLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGE8MCYmKGE9NDI5NDk2NzI5NSthKzEpLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT1hPj4+MjQsdGhpc1tiKzFdPWE+Pj4xNix0aGlzW2IrMl09YT4+PjgsdGhpc1tiKzNdPTI1NSZhKTpLKHRoaXMsYSxiLCExKSxiKzR9LGYucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIE0odGhpcyxhLGIsITAsYyl9LGYucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIE0odGhpcyxhLGIsITEsYyl9LGYucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBOKHRoaXMsYSxiLCEwLGMpfSxmLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTih0aGlzLGEsYiwhMSxjKX0sZi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihhLGIsYyxkKXtpZihjfHwoYz0wKSxkfHwwPT09ZHx8KGQ9dGhpcy5sZW5ndGgpLGI+PWEubGVuZ3RoJiYoYj1hLmxlbmd0aCksYnx8KGI9MCksZD4wJiZkPGMmJihkPWMpLGQ9PT1jKXJldHVybiAwO2lmKDA9PT1hLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKGI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHNcIik7aWYoYzwwfHxjPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHNcIik7aWYoZDwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlRW5kIG91dCBvZiBib3VuZHNcIik7ZD50aGlzLmxlbmd0aCYmKGQ9dGhpcy5sZW5ndGgpLGEubGVuZ3RoLWI8ZC1jJiYoZD1hLmxlbmd0aC1iK2MpO3ZhciBlLGc9ZC1jO2lmKHRoaXM9PT1hJiZjPGImJmI8ZClmb3IoZT1nLTE7ZT49MDtlLS0pYVtlK2JdPXRoaXNbZStjXTtlbHNlIGlmKGc8MWUzfHwhZi5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihlPTA7ZTxnO2UrKylhW2UrYl09dGhpc1tlK2NdO2Vsc2UgYS5fc2V0KHRoaXMuc3ViYXJyYXkoYyxjK2cpLGIpO3JldHVybiBnfSxmLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGEsYixjKXtpZihhfHwoYT0wKSxifHwoYj0wKSxjfHwoYz10aGlzLmxlbmd0aCksYzxiKXRocm93IG5ldyBSYW5nZUVycm9yKFwiZW5kIDwgc3RhcnRcIik7aWYoYyE9PWImJjAhPT10aGlzLmxlbmd0aCl7aWYoYjwwfHxiPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInN0YXJ0IG91dCBvZiBib3VuZHNcIik7aWYoYzwwfHxjPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiZW5kIG91dCBvZiBib3VuZHNcIik7dmFyIGQ7aWYoXCJudW1iZXJcIj09dHlwZW9mIGEpZm9yKGQ9YjtkPGM7ZCsrKXRoaXNbZF09YTtlbHNle3ZhciBlPVIoYS50b1N0cmluZygpKSxmPWUubGVuZ3RoO2ZvcihkPWI7ZDxjO2QrKyl0aGlzW2RdPWVbZCVmXX1yZXR1cm4gdGhpc319LGYucHJvdG90eXBlLnRvQXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheSl7aWYoZi5UWVBFRF9BUlJBWV9TVVBQT1JUKXJldHVybiBuZXcgZih0aGlzKS5idWZmZXI7Zm9yKHZhciBhPW5ldyBVaW50OEFycmF5KHRoaXMubGVuZ3RoKSxiPTAsYz1hLmxlbmd0aDtiPGM7Yis9MSlhW2JdPXRoaXNbYl07cmV0dXJuIGEuYnVmZmVyfXRocm93IG5ldyBUeXBlRXJyb3IoXCJCdWZmZXIudG9BcnJheUJ1ZmZlciBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKX07dmFyIF89Zi5wcm90b3R5cGU7Zi5fYXVnbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gYS5jb25zdHJ1Y3Rvcj1mLGEuX2lzQnVmZmVyPSEwLGEuX3NldD1hLnNldCxhLmdldD1fLmdldCxhLnNldD1fLnNldCxhLndyaXRlPV8ud3JpdGUsYS50b1N0cmluZz1fLnRvU3RyaW5nLGEudG9Mb2NhbGVTdHJpbmc9Xy50b1N0cmluZyxhLnRvSlNPTj1fLnRvSlNPTixhLmVxdWFscz1fLmVxdWFscyxhLmNvbXBhcmU9Xy5jb21wYXJlLGEuaW5kZXhPZj1fLmluZGV4T2YsYS5jb3B5PV8uY29weSxhLnNsaWNlPV8uc2xpY2UsYS5yZWFkVUludExFPV8ucmVhZFVJbnRMRSxhLnJlYWRVSW50QkU9Xy5yZWFkVUludEJFLGEucmVhZFVJbnQ4PV8ucmVhZFVJbnQ4LGEucmVhZFVJbnQxNkxFPV8ucmVhZFVJbnQxNkxFLGEucmVhZFVJbnQxNkJFPV8ucmVhZFVJbnQxNkJFLGEucmVhZFVJbnQzMkxFPV8ucmVhZFVJbnQzMkxFLGEucmVhZFVJbnQzMkJFPV8ucmVhZFVJbnQzMkJFLGEucmVhZEludExFPV8ucmVhZEludExFLGEucmVhZEludEJFPV8ucmVhZEludEJFLGEucmVhZEludDg9Xy5yZWFkSW50OCxhLnJlYWRJbnQxNkxFPV8ucmVhZEludDE2TEUsYS5yZWFkSW50MTZCRT1fLnJlYWRJbnQxNkJFLGEucmVhZEludDMyTEU9Xy5yZWFkSW50MzJMRSxhLnJlYWRJbnQzMkJFPV8ucmVhZEludDMyQkUsYS5yZWFkRmxvYXRMRT1fLnJlYWRGbG9hdExFLGEucmVhZEZsb2F0QkU9Xy5yZWFkRmxvYXRCRSxhLnJlYWREb3VibGVMRT1fLnJlYWREb3VibGVMRSxhLnJlYWREb3VibGVCRT1fLnJlYWREb3VibGVCRSxhLndyaXRlVUludDg9Xy53cml0ZVVJbnQ4LGEud3JpdGVVSW50TEU9Xy53cml0ZVVJbnRMRSxhLndyaXRlVUludEJFPV8ud3JpdGVVSW50QkUsYS53cml0ZVVJbnQxNkxFPV8ud3JpdGVVSW50MTZMRSxhLndyaXRlVUludDE2QkU9Xy53cml0ZVVJbnQxNkJFLGEud3JpdGVVSW50MzJMRT1fLndyaXRlVUludDMyTEUsYS53cml0ZVVJbnQzMkJFPV8ud3JpdGVVSW50MzJCRSxhLndyaXRlSW50TEU9Xy53cml0ZUludExFLGEud3JpdGVJbnRCRT1fLndyaXRlSW50QkUsYS53cml0ZUludDg9Xy53cml0ZUludDgsYS53cml0ZUludDE2TEU9Xy53cml0ZUludDE2TEUsYS53cml0ZUludDE2QkU9Xy53cml0ZUludDE2QkUsYS53cml0ZUludDMyTEU9Xy53cml0ZUludDMyTEUsYS53cml0ZUludDMyQkU9Xy53cml0ZUludDMyQkUsYS53cml0ZUZsb2F0TEU9Xy53cml0ZUZsb2F0TEUsYS53cml0ZUZsb2F0QkU9Xy53cml0ZUZsb2F0QkUsYS53cml0ZURvdWJsZUxFPV8ud3JpdGVEb3VibGVMRSxhLndyaXRlRG91YmxlQkU9Xy53cml0ZURvdWJsZUJFLGEuZmlsbD1fLmZpbGwsYS5pbnNwZWN0PV8uaW5zcGVjdCxhLnRvQXJyYXlCdWZmZXI9Xy50b0FycmF5QnVmZmVyLGF9O3ZhciBhYT0vW14rXFwvMC05QS1aYS16LV9dL2d9KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtcImJhc2U2NC1qc1wiOjEsaWVlZTc1NDo3LGlzYXJyYXk6OH1dLDQ6W2Z1bmN0aW9uKGIsYyxkKXsoZnVuY3Rpb24oZSxmKXshZnVuY3Rpb24oYixlKXtcIm9iamVjdFwiPT10eXBlb2YgZCYmdm9pZCAwIT09Yz9jLmV4cG9ydHM9ZSgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJmEuYW1kP2EoZSk6Yi5FUzZQcm9taXNlPWUoKX0odGhpcyxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGEoYSl7dmFyIGI9dHlwZW9mIGE7cmV0dXJuIG51bGwhPT1hJiYoXCJvYmplY3RcIj09PWJ8fFwiZnVuY3Rpb25cIj09PWIpfWZ1bmN0aW9uIGMoYSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgYX1mdW5jdGlvbiBkKGEpe1g9YX1mdW5jdGlvbiBnKGEpe1k9YX1mdW5jdGlvbiBoKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUubmV4dFRpY2sobSl9fWZ1bmN0aW9uIGkoKXtyZXR1cm4gdm9pZCAwIT09Vz9mdW5jdGlvbigpe1cobSl9OmwoKX1mdW5jdGlvbiBqKCl7dmFyIGE9MCxiPW5ldyBfKG0pLGM9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7cmV0dXJuIGIub2JzZXJ2ZShjLHtjaGFyYWN0ZXJEYXRhOiEwfSksZnVuY3Rpb24oKXtjLmRhdGE9YT0rK2ElMn19ZnVuY3Rpb24gaygpe3ZhciBhPW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gYS5wb3J0MS5vbm1lc3NhZ2U9bSxmdW5jdGlvbigpe3JldHVybiBhLnBvcnQyLnBvc3RNZXNzYWdlKDApfX1mdW5jdGlvbiBsKCl7dmFyIGE9c2V0VGltZW91dDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYShtLDEpfX1mdW5jdGlvbiBtKCl7Zm9yKHZhciBhPTA7YTxWO2ErPTIpeygwLGNhW2FdKShjYVthKzFdKSxjYVthXT12b2lkIDAsY2FbYSsxXT12b2lkIDB9Vj0wfWZ1bmN0aW9uIG4oKXt0cnl7dmFyIGE9YixjPWEoXCJ2ZXJ0eFwiKTtyZXR1cm4gVz1jLnJ1bk9uTG9vcHx8Yy5ydW5PbkNvbnRleHQsaSgpfWNhdGNoKGEpe3JldHVybiBsKCl9fWZ1bmN0aW9uIG8oYSxiKXt2YXIgYz1hcmd1bWVudHMsZD10aGlzLGU9bmV3IHRoaXMuY29uc3RydWN0b3IocSk7dm9pZCAwPT09ZVtlYV0mJkooZSk7dmFyIGY9ZC5fc3RhdGU7cmV0dXJuIGY/ZnVuY3Rpb24oKXt2YXIgYT1jW2YtMV07WShmdW5jdGlvbigpe3JldHVybiBHKGYsZSxhLGQuX3Jlc3VsdCl9KX0oKTpDKGQsZSxhLGIpLGV9ZnVuY3Rpb24gcChhKXt2YXIgYj10aGlzO2lmKGEmJlwib2JqZWN0XCI9PXR5cGVvZiBhJiZhLmNvbnN0cnVjdG9yPT09YilyZXR1cm4gYTt2YXIgYz1uZXcgYihxKTtyZXR1cm4geShjLGEpLGN9ZnVuY3Rpb24gcSgpe31mdW5jdGlvbiByKCl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgY2Fubm90IHJlc29sdmUgYSBwcm9taXNlIHdpdGggaXRzZWxmXCIpfWZ1bmN0aW9uIHMoKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihcIkEgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS5cIil9ZnVuY3Rpb24gdChhKXt0cnl7cmV0dXJuIGEudGhlbn1jYXRjaChhKXtyZXR1cm4gaWEuZXJyb3I9YSxpYX19ZnVuY3Rpb24gdShhLGIsYyxkKXt0cnl7YS5jYWxsKGIsYyxkKX1jYXRjaChhKXtyZXR1cm4gYX19ZnVuY3Rpb24gdihhLGIsYyl7WShmdW5jdGlvbihhKXt2YXIgZD0hMSxlPXUoYyxiLGZ1bmN0aW9uKGMpe2R8fChkPSEwLGIhPT1jP3koYSxjKTpBKGEsYykpfSxmdW5jdGlvbihiKXtkfHwoZD0hMCxCKGEsYikpfSxcIlNldHRsZTogXCIrKGEuX2xhYmVsfHxcIiB1bmtub3duIHByb21pc2VcIikpOyFkJiZlJiYoZD0hMCxCKGEsZSkpfSxhKX1mdW5jdGlvbiB3KGEsYil7Yi5fc3RhdGU9PT1nYT9BKGEsYi5fcmVzdWx0KTpiLl9zdGF0ZT09PWhhP0IoYSxiLl9yZXN1bHQpOkMoYix2b2lkIDAsZnVuY3Rpb24oYil7cmV0dXJuIHkoYSxiKX0sZnVuY3Rpb24oYil7cmV0dXJuIEIoYSxiKX0pfWZ1bmN0aW9uIHgoYSxiLGQpe2IuY29uc3RydWN0b3I9PT1hLmNvbnN0cnVjdG9yJiZkPT09byYmYi5jb25zdHJ1Y3Rvci5yZXNvbHZlPT09cD93KGEsYik6ZD09PWlhPyhCKGEsaWEuZXJyb3IpLGlhLmVycm9yPW51bGwpOnZvaWQgMD09PWQ/QShhLGIpOmMoZCk/dihhLGIsZCk6QShhLGIpfWZ1bmN0aW9uIHkoYixjKXtiPT09Yz9CKGIscigpKTphKGMpP3goYixjLHQoYykpOkEoYixjKX1mdW5jdGlvbiB6KGEpe2EuX29uZXJyb3ImJmEuX29uZXJyb3IoYS5fcmVzdWx0KSxEKGEpfWZ1bmN0aW9uIEEoYSxiKXthLl9zdGF0ZT09PWZhJiYoYS5fcmVzdWx0PWIsYS5fc3RhdGU9Z2EsMCE9PWEuX3N1YnNjcmliZXJzLmxlbmd0aCYmWShELGEpKX1mdW5jdGlvbiBCKGEsYil7YS5fc3RhdGU9PT1mYSYmKGEuX3N0YXRlPWhhLGEuX3Jlc3VsdD1iLFkoeixhKSl9ZnVuY3Rpb24gQyhhLGIsYyxkKXt2YXIgZT1hLl9zdWJzY3JpYmVycyxmPWUubGVuZ3RoO2EuX29uZXJyb3I9bnVsbCxlW2ZdPWIsZVtmK2dhXT1jLGVbZitoYV09ZCwwPT09ZiYmYS5fc3RhdGUmJlkoRCxhKX1mdW5jdGlvbiBEKGEpe3ZhciBiPWEuX3N1YnNjcmliZXJzLGM9YS5fc3RhdGU7aWYoMCE9PWIubGVuZ3RoKXtmb3IodmFyIGQ9dm9pZCAwLGU9dm9pZCAwLGY9YS5fcmVzdWx0LGc9MDtnPGIubGVuZ3RoO2crPTMpZD1iW2ddLGU9YltnK2NdLGQ/RyhjLGQsZSxmKTplKGYpO2EuX3N1YnNjcmliZXJzLmxlbmd0aD0wfX1mdW5jdGlvbiBFKCl7dGhpcy5lcnJvcj1udWxsfWZ1bmN0aW9uIEYoYSxiKXt0cnl7cmV0dXJuIGEoYil9Y2F0Y2goYSl7cmV0dXJuIGphLmVycm9yPWEsamF9fWZ1bmN0aW9uIEcoYSxiLGQsZSl7dmFyIGY9YyhkKSxnPXZvaWQgMCxoPXZvaWQgMCxpPXZvaWQgMCxqPXZvaWQgMDtpZihmKXtpZihnPUYoZCxlKSxnPT09amE/KGo9ITAsaD1nLmVycm9yLGcuZXJyb3I9bnVsbCk6aT0hMCxiPT09ZylyZXR1cm4gdm9pZCBCKGIscygpKX1lbHNlIGc9ZSxpPSEwO2IuX3N0YXRlIT09ZmF8fChmJiZpP3koYixnKTpqP0IoYixoKTphPT09Z2E/QShiLGcpOmE9PT1oYSYmQihiLGcpKX1mdW5jdGlvbiBIKGEsYil7dHJ5e2IoZnVuY3Rpb24oYil7eShhLGIpfSxmdW5jdGlvbihiKXtCKGEsYil9KX1jYXRjaChiKXtCKGEsYil9fWZ1bmN0aW9uIEkoKXtyZXR1cm4ga2ErK31mdW5jdGlvbiBKKGEpe2FbZWFdPWthKyssYS5fc3RhdGU9dm9pZCAwLGEuX3Jlc3VsdD12b2lkIDAsYS5fc3Vic2NyaWJlcnM9W119ZnVuY3Rpb24gSyhhLGIpe3RoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I9YSx0aGlzLnByb21pc2U9bmV3IGEocSksdGhpcy5wcm9taXNlW2VhXXx8Sih0aGlzLnByb21pc2UpLFUoYik/KHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuX3JlbWFpbmluZz1iLmxlbmd0aCx0aGlzLl9yZXN1bHQ9bmV3IEFycmF5KHRoaXMubGVuZ3RoKSwwPT09dGhpcy5sZW5ndGg/QSh0aGlzLnByb21pc2UsdGhpcy5fcmVzdWx0KToodGhpcy5sZW5ndGg9dGhpcy5sZW5ndGh8fDAsdGhpcy5fZW51bWVyYXRlKGIpLDA9PT10aGlzLl9yZW1haW5pbmcmJkEodGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCkpKTpCKHRoaXMucHJvbWlzZSxMKCkpfWZ1bmN0aW9uIEwoKXtyZXR1cm4gbmV3IEVycm9yKFwiQXJyYXkgTWV0aG9kcyBtdXN0IGJlIHByb3ZpZGVkIGFuIEFycmF5XCIpfWZ1bmN0aW9uIE0oYSl7cmV0dXJuIG5ldyBLKHRoaXMsYSkucHJvbWlzZX1mdW5jdGlvbiBOKGEpe3ZhciBiPXRoaXM7cmV0dXJuIG5ldyBiKFUoYSk/ZnVuY3Rpb24oYyxkKXtmb3IodmFyIGU9YS5sZW5ndGgsZj0wO2Y8ZTtmKyspYi5yZXNvbHZlKGFbZl0pLnRoZW4oYyxkKX06ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYihuZXcgVHlwZUVycm9yKFwiWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLlwiKSl9KX1mdW5jdGlvbiBPKGEpe3ZhciBiPXRoaXMsYz1uZXcgYihxKTtyZXR1cm4gQihjLGEpLGN9ZnVuY3Rpb24gUCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yXCIpfWZ1bmN0aW9uIFEoKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpfWZ1bmN0aW9uIFIoYSl7dGhpc1tlYV09SSgpLHRoaXMuX3Jlc3VsdD10aGlzLl9zdGF0ZT12b2lkIDAsdGhpcy5fc3Vic2NyaWJlcnM9W10scSE9PWEmJihcImZ1bmN0aW9uXCIhPXR5cGVvZiBhJiZQKCksdGhpcyBpbnN0YW5jZW9mIFI/SCh0aGlzLGEpOlEoKSl9ZnVuY3Rpb24gUygpe3ZhciBhPXZvaWQgMDtpZih2b2lkIDAhPT1mKWE9ZjtlbHNlIGlmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmKWE9c2VsZjtlbHNlIHRyeXthPUZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChhKXt0aHJvdyBuZXcgRXJyb3IoXCJwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnRcIil9dmFyIGI9YS5Qcm9taXNlO2lmKGIpe3ZhciBjPW51bGw7dHJ5e2M9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGIucmVzb2x2ZSgpKX1jYXRjaChhKXt9aWYoXCJbb2JqZWN0IFByb21pc2VdXCI9PT1jJiYhYi5jYXN0KXJldHVybn1hLlByb21pc2U9Un12YXIgVD12b2lkIDA7VD1BcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpfTt2YXIgVT1ULFY9MCxXPXZvaWQgMCxYPXZvaWQgMCxZPWZ1bmN0aW9uKGEsYil7Y2FbVl09YSxjYVtWKzFdPWIsMj09PShWKz0yKSYmKFg/WChtKTpkYSgpKX0sWj1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAsJD1afHx7fSxfPSQuTXV0YXRpb25PYnNlcnZlcnx8JC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGFhPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBzZWxmJiZ2b2lkIDAhPT1lJiZcIltvYmplY3QgcHJvY2Vzc11cIj09PXt9LnRvU3RyaW5nLmNhbGwoZSksYmE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1lc3NhZ2VDaGFubmVsLGNhPW5ldyBBcnJheSgxZTMpLGRhPXZvaWQgMDtkYT1hYT9oKCk6Xz9qKCk6YmE/aygpOnZvaWQgMD09PVomJlwiZnVuY3Rpb25cIj09dHlwZW9mIGI/bigpOmwoKTt2YXIgZWE9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDE2KSxmYT12b2lkIDAsZ2E9MSxoYT0yLGlhPW5ldyBFLGphPW5ldyBFLGthPTA7cmV0dXJuIEsucHJvdG90eXBlLl9lbnVtZXJhdGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTA7dGhpcy5fc3RhdGU9PT1mYSYmYjxhLmxlbmd0aDtiKyspdGhpcy5fZWFjaEVudHJ5KGFbYl0sYil9LEsucHJvdG90eXBlLl9lYWNoRW50cnk9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yLGQ9Yy5yZXNvbHZlO2lmKGQ9PT1wKXt2YXIgZT10KGEpO2lmKGU9PT1vJiZhLl9zdGF0ZSE9PWZhKXRoaXMuX3NldHRsZWRBdChhLl9zdGF0ZSxiLGEuX3Jlc3VsdCk7ZWxzZSBpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRoaXMuX3JlbWFpbmluZy0tLHRoaXMuX3Jlc3VsdFtiXT1hO2Vsc2UgaWYoYz09PVIpe3ZhciBmPW5ldyBjKHEpO3goZixhLGUpLHRoaXMuX3dpbGxTZXR0bGVBdChmLGIpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KG5ldyBjKGZ1bmN0aW9uKGIpe3JldHVybiBiKGEpfSksYil9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQoZChhKSxiKX0sSy5wcm90b3R5cGUuX3NldHRsZWRBdD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5wcm9taXNlO2QuX3N0YXRlPT09ZmEmJih0aGlzLl9yZW1haW5pbmctLSxhPT09aGE/QihkLGMpOnRoaXMuX3Jlc3VsdFtiXT1jKSwwPT09dGhpcy5fcmVtYWluaW5nJiZBKGQsdGhpcy5fcmVzdWx0KX0sSy5wcm90b3R5cGUuX3dpbGxTZXR0bGVBdD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7QyhhLHZvaWQgMCxmdW5jdGlvbihhKXtyZXR1cm4gYy5fc2V0dGxlZEF0KGdhLGIsYSl9LGZ1bmN0aW9uKGEpe3JldHVybiBjLl9zZXR0bGVkQXQoaGEsYixhKX0pfSxSLmFsbD1NLFIucmFjZT1OLFIucmVzb2x2ZT1wLFIucmVqZWN0PU8sUi5fc2V0U2NoZWR1bGVyPWQsUi5fc2V0QXNhcD1nLFIuX2FzYXA9WSxSLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Uix0aGVuOm8sY2F0Y2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudGhlbihudWxsLGEpfX0sUi5wb2x5ZmlsbD1TLFIuUHJvbWlzZT1SLFJ9KX0pLmNhbGwodGhpcyxiKFwiX3Byb2Nlc3NcIiksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtfcHJvY2VzczoxMX1dLDU6W2Z1bmN0aW9uKGIsYyxkKXshZnVuY3Rpb24oYixlKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiZhLmFtZClhKFtcImV4cG9ydHNcIixcIm1vZHVsZVwiXSxlKTtlbHNlIGlmKHZvaWQgMCE9PWQmJnZvaWQgMCE9PWMpZShkLGMpO2Vsc2V7dmFyIGY9e2V4cG9ydHM6e319O2UoZi5leHBvcnRzLGYpLGIuZmV0Y2hKc29ucD1mLmV4cG9ydHN9fSh0aGlzLGZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYygpe3JldHVyblwianNvbnBfXCIrRGF0ZS5ub3coKStcIl9cIitNYXRoLmNlaWwoMWU1Kk1hdGgucmFuZG9tKCkpfWZ1bmN0aW9uIGQoYSl7dHJ5e2RlbGV0ZSB3aW5kb3dbYV19Y2F0Y2goYil7d2luZG93W2FdPXZvaWQgMH19ZnVuY3Rpb24gZShhKXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKTtiJiZkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0ucmVtb3ZlQ2hpbGQoYil9ZnVuY3Rpb24gZihhKXt2YXIgYj1hcmd1bWVudHMubGVuZ3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/e306YXJndW1lbnRzWzFdLGY9YSxoPWIudGltZW91dHx8Zy50aW1lb3V0LGk9Yi5qc29ucENhbGxiYWNrfHxnLmpzb25wQ2FsbGJhY2ssaj12b2lkIDA7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGcsayl7dmFyIGw9Yi5qc29ucENhbGxiYWNrRnVuY3Rpb258fGMoKSxtPWkrXCJfXCIrbDt3aW5kb3dbbF09ZnVuY3Rpb24oYSl7Zyh7b2s6ITAsanNvbjpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoYSl9fSksaiYmY2xlYXJUaW1lb3V0KGopLGUobSksZChsKX0sZis9LTE9PT1mLmluZGV4T2YoXCI/XCIpP1wiP1wiOlwiJlwiO3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7bi5zZXRBdHRyaWJ1dGUoXCJzcmNcIixcIlwiK2YraStcIj1cIitsKSxiLmNoYXJzZXQmJm4uc2V0QXR0cmlidXRlKFwiY2hhcnNldFwiLGIuY2hhcnNldCksbi5pZD1tLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChuKSxqPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtrKG5ldyBFcnJvcihcIkpTT05QIHJlcXVlc3QgdG8gXCIrYStcIiB0aW1lZCBvdXRcIikpLGQobCksZShtKSx3aW5kb3dbbF09ZnVuY3Rpb24oKXtkKGwpfX0saCksbi5vbmVycm9yPWZ1bmN0aW9uKCl7ayhuZXcgRXJyb3IoXCJKU09OUCByZXF1ZXN0IHRvIFwiK2ErXCIgZmFpbGVkXCIpKSxkKGwpLGUobSksaiYmY2xlYXJUaW1lb3V0KGopfX0pfXZhciBnPXt0aW1lb3V0OjVlMyxqc29ucENhbGxiYWNrOlwiY2FsbGJhY2tcIixqc29ucENhbGxiYWNrRnVuY3Rpb246bnVsbH07Yi5leHBvcnRzPWZ9KX0se31dLDY6W2Z1bmN0aW9uKGIsYyxkKXt2YXIgZT1lfHxmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtpZighKHZvaWQgMD09PWF8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9NU0lFIFsxLTldXFwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSl7dmFyIGI9YS5kb2N1bWVudCxjPWZ1bmN0aW9uKCl7cmV0dXJuIGEuVVJMfHxhLndlYmtpdFVSTHx8YX0sZD1iLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixcImFcIiksZT1cImRvd25sb2FkXCJpbiBkLGY9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiKTthLmRpc3BhdGNoRXZlbnQoYil9LGc9L2NvbnN0cnVjdG9yL2kudGVzdChhLkhUTUxFbGVtZW50KXx8YS5zYWZhcmksaD0vQ3JpT1NcXC9bXFxkXSsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksaT1mdW5jdGlvbihiKXsoYS5zZXRJbW1lZGlhdGV8fGEuc2V0VGltZW91dCkoZnVuY3Rpb24oKXt0aHJvdyBifSwwKX0saj1cImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiLGs9NGU0LGw9ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXtcInN0cmluZ1wiPT10eXBlb2YgYT9jKCkucmV2b2tlT2JqZWN0VVJMKGEpOmEucmVtb3ZlKCl9O3NldFRpbWVvdXQoYixrKX0sbT1mdW5jdGlvbihhLGIsYyl7Yj1bXS5jb25jYXQoYik7Zm9yKHZhciBkPWIubGVuZ3RoO2QtLTspe3ZhciBlPWFbXCJvblwiK2JbZF1dO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpdHJ5e2UuY2FsbChhLGN8fGEpfWNhdGNoKGEpe2koYSl9fX0sbj1mdW5jdGlvbihhKXtyZXR1cm4vXlxccyooPzp0ZXh0XFwvXFxTKnxhcHBsaWNhdGlvblxcL3htbHxcXFMqXFwvXFxTKlxcK3htbClcXHMqOy4qY2hhcnNldFxccyo9XFxzKnV0Zi04L2kudGVzdChhLnR5cGUpP25ldyBCbG9iKFtTdHJpbmcuZnJvbUNoYXJDb2RlKDY1Mjc5KSxhXSx7dHlwZTphLnR5cGV9KTphfSxvPWZ1bmN0aW9uKGIsaSxrKXtrfHwoYj1uKGIpKTt2YXIgbyxwPXRoaXMscT1iLnR5cGUscj1xPT09aixzPWZ1bmN0aW9uKCl7bShwLFwid3JpdGVzdGFydCBwcm9ncmVzcyB3cml0ZSB3cml0ZWVuZFwiLnNwbGl0KFwiIFwiKSl9LHQ9ZnVuY3Rpb24oKXtpZigoaHx8ciYmZykmJmEuRmlsZVJlYWRlcil7dmFyIGQ9bmV3IEZpbGVSZWFkZXI7cmV0dXJuIGQub25sb2FkZW5kPWZ1bmN0aW9uKCl7dmFyIGI9aD9kLnJlc3VsdDpkLnJlc3VsdC5yZXBsYWNlKC9eZGF0YTpbXjtdKjsvLFwiZGF0YTphdHRhY2htZW50L2ZpbGU7XCIpO2Eub3BlbihiLFwiX2JsYW5rXCIpfHwoYS5sb2NhdGlvbi5ocmVmPWIpLGI9dm9pZCAwLHAucmVhZHlTdGF0ZT1wLkRPTkUscygpfSxkLnJlYWRBc0RhdGFVUkwoYiksdm9pZChwLnJlYWR5U3RhdGU9cC5JTklUKX1pZihvfHwobz1jKCkuY3JlYXRlT2JqZWN0VVJMKGIpKSxyKWEubG9jYXRpb24uaHJlZj1vO2Vsc2V7YS5vcGVuKG8sXCJfYmxhbmtcIil8fChhLmxvY2F0aW9uLmhyZWY9byl9cC5yZWFkeVN0YXRlPXAuRE9ORSxzKCksbChvKX07aWYocC5yZWFkeVN0YXRlPXAuSU5JVCxlKXJldHVybiBvPWMoKS5jcmVhdGVPYmplY3RVUkwoYiksdm9pZCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5ocmVmPW8sZC5kb3dubG9hZD1pLGYoZCkscygpLGwobykscC5yZWFkeVN0YXRlPXAuRE9ORX0pO3QoKX0scD1vLnByb3RvdHlwZSxxPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbmV3IG8oYSxifHxhLm5hbWV8fFwiZG93bmxvYWRcIixjKX07cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2I/ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPWJ8fGEubmFtZXx8XCJkb3dubG9hZFwiLGN8fChhPW4oYSkpLG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGEsYil9OihwLmFib3J0PWZ1bmN0aW9uKCl7fSxwLnJlYWR5U3RhdGU9cC5JTklUPTAscC5XUklUSU5HPTEscC5ET05FPTIscC5lcnJvcj1wLm9ud3JpdGVzdGFydD1wLm9ucHJvZ3Jlc3M9cC5vbndyaXRlPXAub25hYm9ydD1wLm9uZXJyb3I9cC5vbndyaXRlZW5kPW51bGwscSl9fShcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZnx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93fHx0aGlzLmNvbnRlbnQpO3ZvaWQgMCE9PWMmJmMuZXhwb3J0cz9jLmV4cG9ydHMuc2F2ZUFzPWU6dm9pZCAwIT09YSYmbnVsbCE9PWEmJm51bGwhPT1hLmFtZCYmYShcIkZpbGVTYXZlci5qc1wiLGZ1bmN0aW9uKCl7cmV0dXJuIGV9KX0se31dLDc6W2Z1bmN0aW9uKGEsYixjKXtjLnJlYWQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGg9OCplLWQtMSxpPSgxPDxoKS0xLGo9aT4+MSxrPS03LGw9Yz9lLTE6MCxtPWM/LTE6MSxuPWFbYitsXTtmb3IobCs9bSxmPW4mKDE8PC1rKS0xLG4+Pj0tayxrKz1oO2s+MDtmPTI1NipmK2FbYitsXSxsKz1tLGstPTgpO2ZvcihnPWYmKDE8PC1rKS0xLGY+Pj0tayxrKz1kO2s+MDtnPTI1NipnK2FbYitsXSxsKz1tLGstPTgpO2lmKDA9PT1mKWY9MS1qO2Vsc2V7aWYoZj09PWkpcmV0dXJuIGc/TmFOOjEvMCoobj8tMToxKTtnKz1NYXRoLnBvdygyLGQpLGYtPWp9cmV0dXJuKG4/LTE6MSkqZypNYXRoLnBvdygyLGYtZCl9LGMud3JpdGU9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnLGgsaSxqPTgqZi1lLTEsaz0oMTw8aiktMSxsPWs+PjEsbT0yMz09PWU/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLG49ZD8wOmYtMSxvPWQ/MTotMSxwPWI8MHx8MD09PWImJjEvYjwwPzE6MDtmb3IoYj1NYXRoLmFicyhiKSxpc05hTihiKXx8Yj09PTEvMD8oaD1pc05hTihiKT8xOjAsZz1rKTooZz1NYXRoLmZsb29yKE1hdGgubG9nKGIpL01hdGguTE4yKSxiKihpPU1hdGgucG93KDIsLWcpKTwxJiYoZy0tLGkqPTIpLGIrPWcrbD49MT9tL2k6bSpNYXRoLnBvdygyLDEtbCksYippPj0yJiYoZysrLGkvPTIpLGcrbD49az8oaD0wLGc9ayk6ZytsPj0xPyhoPShiKmktMSkqTWF0aC5wb3coMixlKSxnKz1sKTooaD1iKk1hdGgucG93KDIsbC0xKSpNYXRoLnBvdygyLGUpLGc9MCkpO2U+PTg7YVtjK25dPTI1NSZoLG4rPW8saC89MjU2LGUtPTgpO2ZvcihnPWc8PGV8aCxqKz1lO2o+MDthW2Mrbl09MjU1Jmcsbis9byxnLz0yNTYsai09OCk7YVtjK24tb118PTEyOCpwfX0se31dLDg6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD17fS50b1N0cmluZztiLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT1kLmNhbGwoYSl9fSx7fV0sOTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiKXtyZXR1cm4gYS5iPT09Yi5iJiZhLmE9PT1iLmF9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLmI8Yi5ifHxhLmI9PT1iLmImJmEuYTw9Yi5hfWZ1bmN0aW9uIGYoYSxiLGMpe3ZhciBkPWIuYi1hLmIsZT1jLmItYi5iXG47cmV0dXJuIDA8ZCtlP2Q8ZT9iLmEtYS5hK2QvKGQrZSkqKGEuYS1jLmEpOmIuYS1jLmErZS8oZCtlKSooYy5hLWEuYSk6MH1mdW5jdGlvbiBnKGEsYixjKXt2YXIgZD1iLmItYS5iLGU9Yy5iLWIuYjtyZXR1cm4gMDxkK2U/KGIuYS1jLmEpKmQrKGIuYS1hLmEpKmU6MH1mdW5jdGlvbiBoKGEsYil7cmV0dXJuIGEuYTxiLmF8fGEuYT09PWIuYSYmYS5iPD1iLmJ9ZnVuY3Rpb24gaShhLGIsYyl7dmFyIGQ9Yi5hLWEuYSxlPWMuYS1iLmE7cmV0dXJuIDA8ZCtlP2Q8ZT9iLmItYS5iK2QvKGQrZSkqKGEuYi1jLmIpOmIuYi1jLmIrZS8oZCtlKSooYy5iLWEuYik6MH1mdW5jdGlvbiBqKGEsYixjKXt2YXIgZD1iLmEtYS5hLGU9Yy5hLWIuYTtyZXR1cm4gMDxkK2U/KGIuYi1jLmIpKmQrKGIuYi1hLmIpKmU6MH1mdW5jdGlvbiBrKGEpe3JldHVybiBlKGEuYi5hLGEuYSl9ZnVuY3Rpb24gbChhKXtyZXR1cm4gZShhLmEsYS5iLmEpfWZ1bmN0aW9uIG0oYSxiLGMsZCl7cmV0dXJuIGE9MD5hPzA6YSxjPTA+Yz8wOmMsYTw9Yz8wPT09Yz8oYitkKS8yOmIrYS8oYStjKSooZC1iKTpkK2MvKGErYykqKGItZCl9ZnVuY3Rpb24gbihhKXt2YXIgYj1zKGEuYik7cmV0dXJuIHUoYixhLmMpLHUoYi5iLGEuYyksdihiLGEuYSksYn1mdW5jdGlvbiBvKGEsYil7dmFyIGM9ITEsZD0hMTthIT09YiYmKGIuYSE9PWEuYSYmKGQ9ITAseChiLmEsYS5hKSksYi5kIT09YS5kJiYoYz0hMCx5KGIuZCxhLmQpKSx0KGIsYSksZHx8KHUoYixhLmEpLGEuYS5jPWEpLGN8fCh2KGIsYS5kKSxhLmQuYT1hKSl9ZnVuY3Rpb24gcChhKXt2YXIgYj1hLmIsYz0hMTthLmQhPT1hLmIuZCYmKGM9ITAseShhLmQsYS5iLmQpKSxhLmM9PT1hP3goYS5hLG51bGwpOihhLmIuZC5hPSQoYSksYS5hLmM9YS5jLHQoYSwkKGEpKSxjfHx2KGEsYS5kKSksYi5jPT09Yj8oeChiLmEsbnVsbCkseShiLmQsbnVsbCkpOihhLmQuYT0kKGIpLGIuYS5jPWIuYyx0KGIsJChiKSkpLHcoYSl9ZnVuY3Rpb24gcShhKXt2YXIgYj1zKGEpLGM9Yi5iO3JldHVybiB0KGIsYS5lKSxiLmE9YS5iLmEsdShjLGIuYSksYi5kPWMuZD1hLmQsYj1iLmIsdChhLmIsJChhLmIpKSx0KGEuYixiKSxhLmIuYT1iLmEsYi5iLmEuYz1iLmIsYi5iLmQ9YS5iLmQsYi5mPWEuZixiLmIuZj1hLmIuZixifWZ1bmN0aW9uIHIoYSxiKXt2YXIgYz0hMSxkPXMoYSksZT1kLmI7cmV0dXJuIGIuZCE9PWEuZCYmKGM9ITAseShiLmQsYS5kKSksdChkLGEuZSksdChlLGIpLGQuYT1hLmIuYSxlLmE9Yi5hLGQuZD1lLmQ9YS5kLGEuZC5hPWUsY3x8dihkLGEuZCksZH1mdW5jdGlvbiBzKGEpe3ZhciBiPW5ldyBaLGM9bmV3IFosZD1hLmIuaDtyZXR1cm4gYy5oPWQsZC5iLmg9YixiLmg9YSxhLmIuaD1jLGIuYj1jLGIuYz1iLGIuZT1jLGMuYj1iLGMuYz1jLGMuZT1ifWZ1bmN0aW9uIHQoYSxiKXt2YXIgYz1hLmMsZD1iLmM7Yy5iLmU9YixkLmIuZT1hLGEuYz1kLGIuYz1jfWZ1bmN0aW9uIHUoYSxiKXt2YXIgYz1iLmYsZD1uZXcgYWEoYixjKTtjLmU9ZCxiLmY9ZCxjPWQuYz1hO2Rve2MuYT1kLGM9Yy5jfXdoaWxlKGMhPT1hKX1mdW5jdGlvbiB2KGEsYil7dmFyIGM9Yi5kLGQ9bmV3IFkoYixjKTtjLmI9ZCxiLmQ9ZCxkLmE9YSxkLmM9Yi5jLGM9YTtkb3tjLmQ9ZCxjPWMuZX13aGlsZShjIT09YSl9ZnVuY3Rpb24gdyhhKXt2YXIgYj1hLmg7YT1hLmIuaCxiLmIuaD1hLGEuYi5oPWJ9ZnVuY3Rpb24geChhLGIpe3ZhciBjPWEuYyxkPWM7ZG97ZC5hPWIsZD1kLmN9d2hpbGUoZCE9PWMpO2M9YS5mLGQ9YS5lLGQuZj1jLGMuZT1kfWZ1bmN0aW9uIHkoYSxiKXt2YXIgYz1hLmEsZD1jO2Rve2QuZD1iLGQ9ZC5lfXdoaWxlKGQhPT1jKTtjPWEuZCxkPWEuYixkLmQ9YyxjLmI9ZH1mdW5jdGlvbiB6KGEpe3ZhciBiPTA7cmV0dXJuIE1hdGguYWJzKGFbMV0pPk1hdGguYWJzKGFbMF0pJiYoYj0xKSxNYXRoLmFicyhhWzJdKT5NYXRoLmFicyhhW2JdKSYmKGI9MiksYn1mdW5jdGlvbiBBKGEsYil7YS5mKz1iLmYsYS5iLmYrPWIuYi5mfWZ1bmN0aW9uIEIoYSxiLGMpe3JldHVybiBhPWEuYSxiPWIuYSxjPWMuYSxiLmIuYT09PWE/Yy5iLmE9PT1hP2UoYi5hLGMuYSk/MD49ZyhjLmIuYSxiLmEsYy5hKTowPD1nKGIuYi5hLGMuYSxiLmEpOjA+PWcoYy5iLmEsYSxjLmEpOmMuYi5hPT09YT8wPD1nKGIuYi5hLGEsYi5hKTooYj1mKGIuYi5hLGEsYi5hKSxhPWYoYy5iLmEsYSxjLmEpLGI+PWEpfWZ1bmN0aW9uIEMoYSl7YS5hLmk9bnVsbDt2YXIgYj1hLmU7Yi5hLmM9Yi5jLGIuYy5hPWIuYSxhLmU9bnVsbH1mdW5jdGlvbiBEKGEsYil7cChhLmEpLGEuYz0hMSxhLmE9YixiLmk9YX1mdW5jdGlvbiBFKGEpe3ZhciBiPWEuYS5hO2Rve2E9b2EoYSl9d2hpbGUoYS5hLmE9PT1iKTtyZXR1cm4gYS5jJiYoYj1yKG5hKGEpLmEuYixhLmEuZSksRChhLGIpLGE9b2EoYSkpLGF9ZnVuY3Rpb24gRihhLGIsYyl7dmFyIGQ9bmV3IG1hO3JldHVybiBkLmE9YyxkLmU9VChhLmYsYi5lLGQpLGMuaT1kfWZ1bmN0aW9uIEcoYSxiKXtzd2l0Y2goYS5zKXtjYXNlIDEwMDEzMDpyZXR1cm4gMCE9KDEmYik7Y2FzZSAxMDAxMzE6cmV0dXJuIDAhPT1iO2Nhc2UgMTAwMTMyOnJldHVybiAwPGI7Y2FzZSAxMDAxMzM6cmV0dXJuIDA+YjtjYXNlIDEwMDEzNDpyZXR1cm4gMjw9Ynx8LTI+PWJ9cmV0dXJuITF9ZnVuY3Rpb24gSChhKXt2YXIgYj1hLmEsYz1iLmQ7Yy5jPWEuZCxjLmE9YixDKGEpfWZ1bmN0aW9uIEkoYSxiLGMpe2ZvcihhPWIsYj1iLmE7YSE9PWM7KXthLmM9ITE7dmFyIGQ9bmEoYSksZT1kLmE7aWYoZS5hIT09Yi5hKXtpZighZC5jKXtIKGEpO2JyZWFrfWU9cihiLmMuYixlLmIpLEQoZCxlKX1iLmMhPT1lJiYobygkKGUpLGUpLG8oYixlKSksSChhKSxiPWQuYSxhPWR9cmV0dXJuIGJ9ZnVuY3Rpb24gSihhLGIsYyxkLGUsZil7dmFyIGc9ITA7ZG97RihhLGIsYy5iKSxjPWMuY313aGlsZShjIT09ZCk7Zm9yKG51bGw9PT1lJiYoZT1uYShiKS5hLmIuYyk7ZD1uYShiKSxjPWQuYS5iLGMuYT09PWUuYTspYy5jIT09ZSYmKG8oJChjKSxjKSxvKCQoZSksYykpLGQuZj1iLmYtYy5mLGQuZD1HKGEsZC5mKSxiLmI9ITAsIWcmJk4oYSxiKSYmKEEoYyxlKSxDKGIpLHAoZSkpLGc9ITEsYj1kLGU9YztiLmI9ITAsZiYmUChhLGIpfWZ1bmN0aW9uIEsoYSxiLGMsZCxlKXt2YXIgZj1bYi5nWzBdLGIuZ1sxXSxiLmdbMl1dO2IuZD1udWxsLGIuZD1hLm8/YS5vKGYsYyxkLGEuYyl8fG51bGw6bnVsbCxudWxsPT09Yi5kJiYoZT9hLm58fChYKGEsMTAwMTU2KSxhLm49ITApOmIuZD1jWzBdKX1mdW5jdGlvbiBMKGEsYixjKXt2YXIgZD1bbnVsbCxudWxsLG51bGwsbnVsbF07ZFswXT1iLmEuZCxkWzFdPWMuYS5kLEsoYSxiLmEsZCxbLjUsLjUsMCwwXSwhMSksbyhiLGMpfWZ1bmN0aW9uIE0oYSxiLGMsZCxlKXt2YXIgZj1NYXRoLmFicyhiLmItYS5iKStNYXRoLmFicyhiLmEtYS5hKSxnPU1hdGguYWJzKGMuYi1hLmIpK01hdGguYWJzKGMuYS1hLmEpLGg9ZSsxO2RbZV09LjUqZy8oZitnKSxkW2hdPS41KmYvKGYrZyksYS5nWzBdKz1kW2VdKmIuZ1swXStkW2hdKmMuZ1swXSxhLmdbMV0rPWRbZV0qYi5nWzFdK2RbaF0qYy5nWzFdLGEuZ1syXSs9ZFtlXSpiLmdbMl0rZFtoXSpjLmdbMl19ZnVuY3Rpb24gTihhLGIpe3ZhciBjPW5hKGIpLGY9Yi5hLGg9Yy5hO2lmKGUoZi5hLGguYSkpe2lmKDA8ZyhoLmIuYSxmLmEsaC5hKSlyZXR1cm4hMTtpZihkKGYuYSxoLmEpKXtpZihmLmEhPT1oLmEpe3ZhciBjPWEuZSxpPWYuYS5oO2lmKDA8PWkpe3ZhciBjPWMuYixqPWMuZCxrPWMuZSxsPWMuYyxtPWxbaV07alttXT1qW2MuYV0sbFtqW21dXT1tLG08PS0tYy5hJiYoMT49bT9rYShjLG0pOmUoa1tqW20+PjFdXSxrW2pbbV1dKT9rYShjLG0pOmxhKGMsbSkpLGtbaV09bnVsbCxsW2ldPWMuYixjLmI9aX1lbHNlIGZvcihjLmNbLShpKzEpXT1udWxsOzA8Yy5hJiZudWxsPT09Yy5jW2MuZFtjLmEtMV1dOyktLWMuYTtMKGEsJChoKSxmKX19ZWxzZSBxKGguYiksbyhmLCQoaCkpLGIuYj1jLmI9ITB9ZWxzZXtpZigwPmcoZi5iLmEsaC5hLGYuYSkpcmV0dXJuITE7b2EoYikuYj1iLmI9ITAscShmLmIpLG8oJChoKSxmKX1yZXR1cm4hMH1mdW5jdGlvbiBPKGEsYil7dmFyIGM9bmEoYiksaz1iLmEsbD1jLmEsbj1rLmEscD1sLmEscj1rLmIuYSxzPWwuYi5hLHQ9bmV3IGFhO2lmKGcocixhLmEsbiksZyhzLGEuYSxwKSxuPT09cHx8TWF0aC5taW4obi5hLHIuYSk+TWF0aC5tYXgocC5hLHMuYSkpcmV0dXJuITE7aWYoZShuLHApKXtpZigwPGcocyxuLHApKXJldHVybiExfWVsc2UgaWYoMD5nKHIscCxuKSlyZXR1cm4hMTt2YXIgdSx2LHc9cix4PW4seT1zLHo9cDtpZihlKHcseCl8fCh1PXcsdz14LHg9dSksZSh5LHopfHwodT15LHk9eix6PXUpLGUodyx5KXx8KHU9dyx3PXkseT11LHU9eCx4PXosej11KSxlKHkseCk/ZSh4LHopPyh1PWYodyx5LHgpLHY9Zih5LHgseiksMD51K3YmJih1PS11LHY9LXYpLHQuYj1tKHUseS5iLHYseC5iKSk6KHU9Zyh3LHkseCksdj0tZyh3LHoseCksMD51K3YmJih1PS11LHY9LXYpLHQuYj1tKHUseS5iLHYsei5iKSk6dC5iPSh5LmIreC5iKS8yLGgodyx4KXx8KHU9dyx3PXgseD11KSxoKHkseil8fCh1PXkseT16LHo9dSksaCh3LHkpfHwodT13LHc9eSx5PXUsdT14LHg9eix6PXUpLGgoeSx4KT9oKHgseik/KHU9aSh3LHkseCksdj1pKHkseCx6KSwwPnUrdiYmKHU9LXUsdj0tdiksdC5hPW0odSx5LmEsdix4LmEpKToodT1qKHcseSx4KSx2PS1qKHcseix4KSwwPnUrdiYmKHU9LXUsdj0tdiksdC5hPW0odSx5LmEsdix6LmEpKTp0LmE9KHkuYSt4LmEpLzIsZSh0LGEuYSkmJih0LmI9YS5hLmIsdC5hPWEuYS5hKSx3PWUobixwKT9uOnAsZSh3LHQpJiYodC5iPXcuYix0LmE9dy5hKSxkKHQsbil8fGQodCxwKSlyZXR1cm4gTihhLGIpLCExO2lmKCFkKHIsYS5hKSYmMDw9ZyhyLGEuYSx0KXx8IWQocyxhLmEpJiYwPj1nKHMsYS5hLHQpKXtpZihzPT09YS5hKXJldHVybiBxKGsuYiksbyhsLmIsayksYj1FKGIpLGs9bmEoYikuYSxJKGEsbmEoYiksYyksSihhLGIsJChrKSxrLGssITApLCEwO2lmKHI9PT1hLmEpe3EobC5iKSxvKGsuZSwkKGwpKSxuPWM9YixwPW4uYS5iLmE7ZG97bj1vYShuKX13aGlsZShuLmEuYi5hPT09cCk7cmV0dXJuIGI9bixuPW5hKGIpLmEuYi5jLGMuYT0kKGwpLGw9SShhLGMsbnVsbCksSihhLGIsbC5jLGsuYi5jLG4sITApLCEwfXJldHVybiAwPD1nKHIsYS5hLHQpJiYob2EoYikuYj1iLmI9ITAscShrLmIpLGsuYS5iPWEuYS5iLGsuYS5hPWEuYS5hKSwwPj1nKHMsYS5hLHQpJiYoYi5iPWMuYj0hMCxxKGwuYiksbC5hLmI9YS5hLmIsbC5hLmE9YS5hLmEpLCExfXJldHVybiBxKGsuYikscShsLmIpLG8oJChsKSxrKSxrLmEuYj10LmIsay5hLmE9dC5hLGsuYS5oPWRhKGEuZSxrLmEpLGs9ay5hLGw9WzAsMCwwLDBdLHQ9W24uZCxyLmQscC5kLHMuZF0say5nWzBdPWsuZ1sxXT1rLmdbMl09MCxNKGssbixyLGwsMCksTShrLHAscyxsLDIpLEsoYSxrLHQsbCwhMCksb2EoYikuYj1iLmI9Yy5iPSEwLCExfWZ1bmN0aW9uIFAoYSxiKXtmb3IodmFyIGM9bmEoYik7Oyl7Zm9yKDtjLmI7KWI9YyxjPW5hKGMpO2lmKCFiLmImJihjPWIsbnVsbD09PShiPW9hKGIpKXx8IWIuYikpYnJlYWs7Yi5iPSExO3ZhciBkLGY9Yi5hLGg9Yy5hO2lmKGQ9Zi5iLmEhPT1oLmIuYSlhOntkPWI7dmFyIGk9bmEoZCksaj1kLmEsaz1pLmEsbD12b2lkIDA7aWYoZShqLmIuYSxrLmIuYSkpe2lmKDA+ZyhqLmIuYSxrLmIuYSxqLmEpKXtkPSExO2JyZWFrIGF9b2EoZCkuYj1kLmI9ITAsbD1xKGopLG8oay5iLGwpLGwuZC5jPWQuZH1lbHNle2lmKDA8ZyhrLmIuYSxqLmIuYSxrLmEpKXtkPSExO2JyZWFrIGF9ZC5iPWkuYj0hMCxsPXEoayksbyhqLmUsay5iKSxsLmIuZC5jPWQuZH1kPSEwfWlmKGQmJihjLmM/KEMoYykscChoKSxjPW5hKGIpLGg9Yy5hKTpiLmMmJihDKGIpLHAoZiksYj1vYShjKSxmPWIuYSkpLGYuYSE9PWguYSlpZihmLmIuYT09PWguYi5hfHxiLmN8fGMuY3x8Zi5iLmEhPT1hLmEmJmguYi5hIT09YS5hKU4oYSxiKTtlbHNlIGlmKE8oYSxiKSlicmVhaztmLmE9PT1oLmEmJmYuYi5hPT09aC5iLmEmJihBKGgsZiksQyhiKSxwKGYpLGI9b2EoYykpfX1mdW5jdGlvbiBRKGEsYil7YS5hPWI7Zm9yKHZhciBjPWIuYztudWxsPT09Yy5pOylpZigoYz1jLmMpPT09Yi5jKXt2YXIgYz1hLGY9YixoPW5ldyBtYTtoLmE9Zi5jLmI7dmFyIGk9Yy5mLGo9aS5hO2Rve2o9ai5hfXdoaWxlKG51bGwhPT1qLmImJiFpLmMoaS5iLGgsai5iKSk7dmFyIGk9ai5iLGs9bmEoaSksaD1pLmEsaj1rLmE7aWYoMD09PWcoaC5iLmEsZixoLmEpKWg9aS5hLGQoaC5hLGYpfHxkKGguYi5hLGYpfHwocShoLmIpLGkuYyYmKHAoaC5jKSxpLmM9ITEpLG8oZi5jLGgpLFEoYyxmKSk7ZWxzZXt2YXIgbD1lKGouYi5hLGguYi5hKT9pOmssaz12b2lkIDA7aS5kfHxsLmM/KGs9bD09PWk/cihmLmMuYixoLmUpOnIoai5iLmMuYixmLmMpLmIsbC5jP0QobCxrKTooaD1jLGk9RihjLGksayksaS5mPW9hKGkpLmYraS5hLmYsaS5kPUcoaCxpLmYpKSxRKGMsZikpOkooYyxpLGYuYyxmLmMsbnVsbCwhMCl9cmV0dXJufWlmKGM9RShjLmkpLGg9bmEoYyksaT1oLmEsaD1JKGEsaCxudWxsKSxoLmM9PT1pKXt2YXIgaT1oLGg9aS5jLGo9bmEoYyksaz1jLmEsbD1qLmEsbT0hMTtrLmIuYSE9PWwuYi5hJiZPKGEsYyksZChrLmEsYS5hKSYmKG8oJChoKSxrKSxjPUUoYyksaD1uYShjKS5hLEkoYSxuYShjKSxqKSxtPSEwKSxkKGwuYSxhLmEpJiYobyhpLCQobCkpLGk9SShhLGosbnVsbCksbT0hMCksbT9KKGEsYyxpLmMsaCxoLCEwKTooZj1lKGwuYSxrLmEpPyQobCk6ayxmPXIoaS5jLmIsZiksSihhLGMsZixmLmMsZi5jLCExKSxmLmIuaS5jPSEwLFAoYSxjKSl9ZWxzZSBKKGEsYyxoLmMsaSxpLCEwKX1mdW5jdGlvbiBSKGEsYil7dmFyIGM9bmV3IG1hLGQ9bihhLmIpO2QuYS5iPXFhLGQuYS5hPWIsZC5iLmEuYj0tcWEsZC5iLmEuYT1iLGEuYT1kLmIuYSxjLmE9ZCxjLmY9MCxjLmQ9ITEsYy5jPSExLGMuaD0hMCxjLmI9ITEsZD1hLmYsZD1UKGQsZC5hLGMpLGMuZT1kfWZ1bmN0aW9uIFMoYSl7dGhpcy5hPW5ldyBVLHRoaXMuYj1hLHRoaXMuYz1CfWZ1bmN0aW9uIFQoYSxiLGMpe2Rve2I9Yi5jfXdoaWxlKG51bGwhPT1iLmImJiFhLmMoYS5iLGIuYixjKSk7cmV0dXJuIGE9bmV3IFUoYyxiLmEsYiksYi5hLmM9YSxiLmE9YX1mdW5jdGlvbiBVKGEsYixjKXt0aGlzLmI9YXx8bnVsbCx0aGlzLmE9Ynx8dGhpcyx0aGlzLmM9Y3x8dGhpc31mdW5jdGlvbiBWKCl7dGhpcy5kPXJhLHRoaXMucD10aGlzLmI9dGhpcy5xPW51bGwsdGhpcy5qPVswLDAsMF0sdGhpcy5zPTEwMDEzMCx0aGlzLm49ITEsdGhpcy5vPXRoaXMuYT10aGlzLmU9dGhpcy5mPW51bGwsdGhpcy5tPSExLHRoaXMuYz10aGlzLnI9dGhpcy5pPXRoaXMuaz10aGlzLmw9dGhpcy5oPW51bGx9ZnVuY3Rpb24gVyhhLGIpe2lmKGEuZCE9PWIpZm9yKDthLmQhPT1iOylpZihhLmQ8Yilzd2l0Y2goYS5kKXtjYXNlIHJhOlgoYSwxMDAxNTEpLGEudShudWxsKTticmVhaztjYXNlIDE6WChhLDEwMDE1MiksYS50KCl9ZWxzZSBzd2l0Y2goYS5kKXtjYXNlIDI6WChhLDEwMDE1NCksYS52KCk7YnJlYWs7Y2FzZSAxOlgoYSwxMDAxNTMpLGEudygpfX1mdW5jdGlvbiBYKGEsYil7YS5wJiZhLnAoYixhLmMpfWZ1bmN0aW9uIFkoYSxiKXt0aGlzLmI9YXx8dGhpcyx0aGlzLmQ9Ynx8dGhpcyx0aGlzLmE9bnVsbCx0aGlzLmM9ITF9ZnVuY3Rpb24gWigpe3RoaXMuaD10aGlzLHRoaXMuaT10aGlzLmQ9dGhpcy5hPXRoaXMuZT10aGlzLmM9dGhpcy5iPW51bGwsdGhpcy5mPTB9ZnVuY3Rpb24gJChhKXtyZXR1cm4gYS5iLmV9ZnVuY3Rpb24gXygpe3RoaXMuYz1uZXcgYWEsdGhpcy5hPW5ldyBZLHRoaXMuYj1uZXcgWix0aGlzLmQ9bmV3IFosdGhpcy5iLmI9dGhpcy5kLHRoaXMuZC5iPXRoaXMuYn1mdW5jdGlvbiBhYShhLGIpe3RoaXMuZT1hfHx0aGlzLHRoaXMuZj1ifHx0aGlzLHRoaXMuZD10aGlzLmM9bnVsbCx0aGlzLmc9WzAsMCwwXSx0aGlzLmg9dGhpcy5hPXRoaXMuYj0wfWZ1bmN0aW9uIGJhKCl7dGhpcy5jPVtdLHRoaXMuZD1udWxsLHRoaXMuYT0wLHRoaXMuZT0hMSx0aGlzLmI9bmV3IGZhfWZ1bmN0aW9uIGNhKGEpe2EuZD1bXTtmb3IodmFyIGI9MDtiPGEuYTtiKyspYS5kW2JdPWI7YS5kLnNvcnQoZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGUoYVtiXSxhW2NdKT8xOi0xfX0oYS5jKSksYS5lPSEwLGhhKGEuYil9ZnVuY3Rpb24gZGEoYSxiKXtpZihhLmUpe3ZhciBjPWEuYixkPSsrYy5hOzIqZD5jLmYmJihjLmYqPTIsYy5jPWdhKGMuYyxjLmYrMSkpO3ZhciBlO3JldHVybiAwPT09Yy5iP2U9ZDooZT1jLmIsYy5iPWMuY1tjLmJdKSxjLmVbZV09YixjLmNbZV09ZCxjLmRbZF09ZSxjLmgmJmxhKGMsZCksZX1yZXR1cm4gYz1hLmErKyxhLmNbY109YiwtKGMrMSl9ZnVuY3Rpb24gZWEoYSl7aWYoMD09PWEuYSlyZXR1cm4gamEoYS5iKTt2YXIgYj1hLmNbYS5kW2EuYS0xXV07aWYoMCE9PWEuYi5hJiZlKGlhKGEuYiksYikpcmV0dXJuIGphKGEuYik7ZG97LS1hLmF9d2hpbGUoMDxhLmEmJm51bGw9PT1hLmNbYS5kW2EuYS0xXV0pO3JldHVybiBifWZ1bmN0aW9uIGZhKCl7dGhpcy5kPWdhKFswXSwzMyksdGhpcy5lPVtudWxsLG51bGxdLHRoaXMuYz1bMCwwXSx0aGlzLmE9MCx0aGlzLmY9MzIsdGhpcy5iPTAsdGhpcy5oPSExLHRoaXMuZFsxXT0xfWZ1bmN0aW9uIGdhKGEsYil7Zm9yKHZhciBjPUFycmF5KGIpLGQ9MDtkPGEubGVuZ3RoO2QrKyljW2RdPWFbZF07Zm9yKDtkPGI7ZCsrKWNbZF09MDtyZXR1cm4gY31mdW5jdGlvbiBoYShhKXtmb3IodmFyIGI9YS5hOzE8PWI7LS1iKWthKGEsYik7YS5oPSEwfWZ1bmN0aW9uIGlhKGEpe3JldHVybiBhLmVbYS5kWzFdXX1mdW5jdGlvbiBqYShhKXt2YXIgYj1hLmQsYz1hLmUsZD1hLmMsZT1iWzFdLGY9Y1tlXTtyZXR1cm4gMDxhLmEmJihiWzFdPWJbYS5hXSxkW2JbMV1dPTEsY1tlXT1udWxsLGRbZV09YS5iLGEuYj1lLDA8LS1hLmEmJmthKGEsMSkpLGZ9ZnVuY3Rpb24ga2EoYSxiKXtmb3IodmFyIGM9YS5kLGQ9YS5lLGY9YS5jLGc9YixoPWNbZ107Oyl7dmFyIGk9Zzw8MTtpPGEuYSYmZShkW2NbaSsxXV0sZFtjW2ldXSkmJihpKz0xKTt2YXIgaj1jW2ldO2lmKGk+YS5hfHxlKGRbaF0sZFtqXSkpe2NbZ109aCxmW2hdPWc7YnJlYWt9Y1tnXT1qLGZbal09ZyxnPWl9fWZ1bmN0aW9uIGxhKGEsYil7Zm9yKHZhciBjPWEuZCxkPWEuZSxmPWEuYyxnPWIsaD1jW2ddOzspe3ZhciBpPWc+PjEsaj1jW2ldO2lmKDA9PT1pfHxlKGRbal0sZFtoXSkpe2NbZ109aCxmW2hdPWc7YnJlYWt9Y1tnXT1qLGZbal09ZyxnPWl9fWZ1bmN0aW9uIG1hKCl7dGhpcy5lPXRoaXMuYT1udWxsLHRoaXMuZj0wLHRoaXMuYz10aGlzLmI9dGhpcy5oPXRoaXMuZD0hMX1mdW5jdGlvbiBuYShhKXtyZXR1cm4gYS5lLmMuYn1mdW5jdGlvbiBvYShhKXtyZXR1cm4gYS5lLmEuYn12YXIgcGEscWE9NGUxNTAscmE9MDtwYT1WLnByb3RvdHlwZSxwYS54PWZ1bmN0aW9uKCl7Vyh0aGlzLHJhKX0scGEuQj1mdW5jdGlvbihhLGIpe3N3aXRjaChhKXtjYXNlIDEwMDE0MjpyZXR1cm47Y2FzZSAxMDAxNDA6c3dpdGNoKGIpe2Nhc2UgMTAwMTMwOmNhc2UgMTAwMTMxOmNhc2UgMTAwMTMyOmNhc2UgMTAwMTMzOmNhc2UgMTAwMTM0OnJldHVybiB2b2lkKHRoaXMucz1iKX1icmVhaztjYXNlIDEwMDE0MTpyZXR1cm4gdm9pZCh0aGlzLm09ISFiKTtkZWZhdWx0OnJldHVybiB2b2lkIFgodGhpcywxMDA5MDApfVgodGhpcywxMDA5MDEpfSxwYS55PWZ1bmN0aW9uKGEpe3N3aXRjaChhKXtjYXNlIDEwMDE0MjpyZXR1cm4gMDtjYXNlIDEwMDE0MDpyZXR1cm4gdGhpcy5zO2Nhc2UgMTAwMTQxOnJldHVybiB0aGlzLm07ZGVmYXVsdDpYKHRoaXMsMTAwOTAwKX1yZXR1cm4hMX0scGEuQT1mdW5jdGlvbihhLGIsYyl7dGhpcy5qWzBdPWEsdGhpcy5qWzFdPWIsdGhpcy5qWzJdPWN9LHBhLno9ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHxudWxsO3N3aXRjaChhKXtjYXNlIDEwMDEwMDpjYXNlIDEwMDEwNjp0aGlzLmg9YzticmVhaztjYXNlIDEwMDEwNDpjYXNlIDEwMDExMDp0aGlzLmw9YzticmVhaztjYXNlIDEwMDEwMTpjYXNlIDEwMDEwNzp0aGlzLms9YzticmVhaztjYXNlIDEwMDEwMjpjYXNlIDEwMDEwODp0aGlzLmk9YzticmVhaztjYXNlIDEwMDEwMzpjYXNlIDEwMDEwOTp0aGlzLnA9YzticmVhaztjYXNlIDEwMDEwNTpjYXNlIDEwMDExMTp0aGlzLm89YzticmVhaztjYXNlIDEwMDExMjp0aGlzLnI9YzticmVhaztkZWZhdWx0OlgodGhpcywxMDA5MDApfX0scGEuQz1mdW5jdGlvbihhLGIpe3ZhciBjPSExLGQ9WzAsMCwwXTtXKHRoaXMsMik7Zm9yKHZhciBlPTA7Mz5lOysrZSl7dmFyIGY9YVtlXTstMWUxNTA+ZiYmKGY9LTFlMTUwLGM9ITApLDFlMTUwPGYmJihmPTFlMTUwLGM9ITApLGRbZV09Zn1jJiZYKHRoaXMsMTAwMTU1KSxjPXRoaXMucSxudWxsPT09Yz8oYz1uKHRoaXMuYiksbyhjLGMuYikpOihxKGMpLGM9Yy5lKSxjLmEuZD1iLGMuYS5nWzBdPWRbMF0sYy5hLmdbMV09ZFsxXSxjLmEuZ1syXT1kWzJdLGMuZj0xLGMuYi5mPS0xLHRoaXMucT1jfSxwYS51PWZ1bmN0aW9uKGEpe1codGhpcyxyYSksdGhpcy5kPTEsdGhpcy5iPW5ldyBfLHRoaXMuYz1hfSxwYS50PWZ1bmN0aW9uKCl7Vyh0aGlzLDEpLHRoaXMuZD0yLHRoaXMucT1udWxsfSxwYS52PWZ1bmN0aW9uKCl7Vyh0aGlzLDIpLHRoaXMuZD0xfSxwYS53PWZ1bmN0aW9uKCl7Vyh0aGlzLDEpLHRoaXMuZD1yYTt2YXIgYT10aGlzLmpbMF0sYj10aGlzLmpbMV0sYz10aGlzLmpbMl0sZj0hMSxoPVthLGIsY107aWYoMD09PWEmJjA9PT1iJiYwPT09Yyl7Zm9yKHZhciBiPVstMmUxNTAsLTJlMTUwLC0yZTE1MF0saT1bMmUxNTAsMmUxNTAsMmUxNTBdLGM9W10saj1bXSxmPXRoaXMuYi5jLGE9Zi5lO2EhPT1mO2E9YS5lKWZvcih2YXIgbT0wOzM+bTsrK20pe3ZhciBuPWEuZ1ttXTtuPGlbbV0mJihpW21dPW4salttXT1hKSxuPmJbbV0mJihiW21dPW4sY1ttXT1hKX1pZihhPTAsYlsxXS1pWzFdPmJbMF0taVswXSYmKGE9MSksYlsyXS1pWzJdPmJbYV0taVthXSYmKGE9MiksaVthXT49YlthXSloWzBdPTAsaFsxXT0wLGhbMl09MTtlbHNle2ZvcihiPTAsaT1qW2FdLGM9Y1thXSxqPVswLDAsMF0saT1baS5nWzBdLWMuZ1swXSxpLmdbMV0tYy5nWzFdLGkuZ1syXS1jLmdbMl1dLG09WzAsMCwwXSxhPWYuZTthIT09ZjthPWEuZSltWzBdPWEuZ1swXS1jLmdbMF0sbVsxXT1hLmdbMV0tYy5nWzFdLG1bMl09YS5nWzJdLWMuZ1syXSxqWzBdPWlbMV0qbVsyXS1pWzJdKm1bMV0salsxXT1pWzJdKm1bMF0taVswXSptWzJdLGpbMl09aVswXSptWzFdLWlbMV0qbVswXSwobj1qWzBdKmpbMF0ralsxXSpqWzFdK2pbMl0qalsyXSk+YiYmKGI9bixoWzBdPWpbMF0saFsxXT1qWzFdLGhbMl09alsyXSk7MD49YiYmKGhbMF09aFsxXT1oWzJdPTAsaFt6KGkpXT0xKX1mPSEwfWZvcihqPXooaCksYT10aGlzLmIuYyxiPShqKzEpJTMsYz0oaisyKSUzLGo9MDxoW2pdPzE6LTEsaD1hLmU7aCE9PWE7aD1oLmUpaC5iPWguZ1tiXSxoLmE9aipoLmdbY107aWYoZil7Zm9yKGg9MCxmPXRoaXMuYi5hLGE9Zi5iO2EhPT1mO2E9YS5iKWlmKGI9YS5hLCEoMD49Yi5mKSlkb3toKz0oYi5hLmItYi5iLmEuYikqKGIuYS5hK2IuYi5hLmEpLGI9Yi5lfXdoaWxlKGIhPT1hLmEpO2lmKDA+aClmb3IoaD10aGlzLmIuYyxmPWguZTtmIT09aDtmPWYuZSlmLmE9LWYuYX1mb3IodGhpcy5uPSExLGg9dGhpcy5iLmIsYT1oLmg7YSE9PWg7YT1mKWY9YS5oLGI9YS5lLGQoYS5hLGEuYi5hKSYmYS5lLmUhPT1hJiYoTCh0aGlzLGIsYSkscChhKSxhPWIsYj1hLmUpLGIuZT09PWEmJihiIT09YSYmKGIhPT1mJiZiIT09Zi5ifHwoZj1mLmgpLHAoYikpLGEhPT1mJiZhIT09Zi5ifHwoZj1mLmgpLHAoYSkpO2Zvcih0aGlzLmU9aD1uZXcgYmEsZj10aGlzLmIuYyxhPWYuZTthIT09ZjthPWEuZSlhLmg9ZGEoaCxhKTtmb3IoY2EoaCksdGhpcy5mPW5ldyBTKHRoaXMpLFIodGhpcywtcWEpLFIodGhpcyxxYSk7bnVsbCE9PShoPWVhKHRoaXMuZSkpOyl7Zm9yKDs7KXthOmlmKGE9dGhpcy5lLDA9PT1hLmEpZj1pYShhLmIpO2Vsc2UgaWYoZj1hLmNbYS5kW2EuYS0xXV0sMCE9PWEuYi5hJiYoYT1pYShhLmIpLGUoYSxmKSkpe2Y9YTticmVhayBhfWlmKG51bGw9PT1mfHwhZChmLGgpKWJyZWFrO2Y9ZWEodGhpcy5lKSxMKHRoaXMsaC5jLGYuYyl9USh0aGlzLGgpfWZvcih0aGlzLmE9dGhpcy5mLmEuYS5iLmEuYSxoPTA7bnVsbCE9PShmPXRoaXMuZi5hLmEuYik7KWYuaHx8KytoLEMoZik7Zm9yKHRoaXMuZj1udWxsLGg9dGhpcy5lLGguYj1udWxsLGguZD1udWxsLHRoaXMuZT1oLmM9bnVsbCxoPXRoaXMuYixhPWguYS5iO2EhPT1oLmE7YT1mKWY9YS5iLGE9YS5hLGEuZS5lPT09YSYmKEEoYS5jLGEpLHAoYSkpO2lmKCF0aGlzLm4pe2lmKGg9dGhpcy5iLHRoaXMubSlmb3IoYT1oLmIuaDthIT09aC5iO2E9ZilmPWEuaCxhLmIuZC5jIT09YS5kLmM/YS5mPWEuZC5jPzE6LTE6cChhKTtlbHNlIGZvcihhPWguYS5iO2EhPT1oLmE7YT1mKWlmKGY9YS5iLGEuYyl7Zm9yKGE9YS5hO2UoYS5iLmEsYS5hKTthPWEuYy5iKTtmb3IoO2UoYS5hLGEuYi5hKTthPWEuZSk7Zm9yKGI9YS5jLmIsYz12b2lkIDA7YS5lIT09YjspaWYoZShhLmIuYSxiLmEpKXtmb3IoO2IuZSE9PWEmJihrKGIuZSl8fDA+PWcoYi5hLGIuYi5hLGIuZS5iLmEpKTspYz1yKGIuZSxiKSxiPWMuYjtiPWIuYy5ifWVsc2V7Zm9yKDtiLmUhPT1hJiYobChhLmMuYil8fDA8PWcoYS5iLmEsYS5hLGEuYy5iLmEpKTspYz1yKGEsYS5jLmIpLGE9Yy5iO2E9YS5lfWZvcig7Yi5lLmUhPT1hOyljPXIoYi5lLGIpLGI9Yy5ifWlmKHRoaXMuaHx8dGhpcy5pfHx0aGlzLmt8fHRoaXMubClpZih0aGlzLm0pe2ZvcihoPXRoaXMuYixmPWguYS5iO2YhPT1oLmE7Zj1mLmIpaWYoZi5jKXt0aGlzLmgmJnRoaXMuaCgyLHRoaXMuYyksYT1mLmE7ZG97dGhpcy5rJiZ0aGlzLmsoYS5hLmQsdGhpcy5jKSxhPWEuZX13aGlsZShhIT09Zi5hKTt0aGlzLmkmJnRoaXMuaSh0aGlzLmMpfX1lbHNle2ZvcihoPXRoaXMuYixmPSEhdGhpcy5sLGE9ITEsYj0tMSxjPWguYS5kO2MhPT1oLmE7Yz1jLmQpaWYoYy5jKXthfHwodGhpcy5oJiZ0aGlzLmgoNCx0aGlzLmMpLGE9ITApLGo9Yy5hO2Rve2YmJihpPWouYi5kLmM/MDoxLGIhPT1pJiYoYj1pLHRoaXMubCYmdGhpcy5sKCEhYix0aGlzLmMpKSksdGhpcy5rJiZ0aGlzLmsoai5hLmQsdGhpcy5jKSxqPWouZX13aGlsZShqIT09Yy5hKX1hJiZ0aGlzLmkmJnRoaXMuaSh0aGlzLmMpfWlmKHRoaXMucil7Zm9yKGg9dGhpcy5iLGE9aC5hLmI7YSE9PWguYTthPWYpaWYoZj1hLmIsIWEuYyl7Yj1hLmEsYz1iLmUsaj12b2lkIDA7ZG97aj1jLGM9ai5lLGouZD1udWxsLG51bGw9PT1qLmIuZCYmKGouYz09PWo/eChqLmEsbnVsbCk6KGouYS5jPWouYyx0KGosJChqKSkpLGk9ai5iLGkuYz09PWk/eChpLmEsbnVsbCk6KGkuYS5jPWkuYyx0KGksJChpKSkpLHcoaikpfXdoaWxlKGohPT1iKTtiPWEuZCxhPWEuYixhLmQ9YixiLmI9YX1yZXR1cm4gdGhpcy5yKHRoaXMuYiksdm9pZCh0aGlzLmM9dGhpcy5iPW51bGwpfX10aGlzLmI9dGhpcy5jPW51bGx9LHRoaXMubGlidGVzcz17R2x1VGVzc2VsYXRvcjpWLHdpbmRpbmdSdWxlOntHTFVfVEVTU19XSU5ESU5HX09ERDoxMDAxMzAsR0xVX1RFU1NfV0lORElOR19OT05aRVJPOjEwMDEzMSxHTFVfVEVTU19XSU5ESU5HX1BPU0lUSVZFOjEwMDEzMixHTFVfVEVTU19XSU5ESU5HX05FR0FUSVZFOjEwMDEzMyxHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFfVFdPOjEwMDEzNH0scHJpbWl0aXZlVHlwZTp7R0xfTElORV9MT09QOjIsR0xfVFJJQU5HTEVTOjQsR0xfVFJJQU5HTEVfU1RSSVA6NSxHTF9UUklBTkdMRV9GQU46Nn0sZXJyb3JUeXBlOntHTFVfVEVTU19NSVNTSU5HX0JFR0lOX1BPTFlHT046MTAwMTUxLEdMVV9URVNTX01JU1NJTkdfRU5EX1BPTFlHT046MTAwMTUzLEdMVV9URVNTX01JU1NJTkdfQkVHSU5fQ09OVE9VUjoxMDAxNTIsR0xVX1RFU1NfTUlTU0lOR19FTkRfQ09OVE9VUjoxMDAxNTQsR0xVX1RFU1NfQ09PUkRfVE9PX0xBUkdFOjEwMDE1NSxHTFVfVEVTU19ORUVEX0NPTUJJTkVfQ0FMTEJBQ0s6MTAwMTU2fSxnbHVFbnVtOntHTFVfVEVTU19NRVNIOjEwMDExMixHTFVfVEVTU19UT0xFUkFOQ0U6MTAwMTQyLEdMVV9URVNTX1dJTkRJTkdfUlVMRToxMDAxNDAsR0xVX1RFU1NfQk9VTkRBUllfT05MWToxMDAxNDEsR0xVX0lOVkFMSURfRU5VTToxMDA5MDAsR0xVX0lOVkFMSURfVkFMVUU6MTAwOTAxLEdMVV9URVNTX0JFR0lOOjEwMDEwMCxHTFVfVEVTU19WRVJURVg6MTAwMTAxLEdMVV9URVNTX0VORDoxMDAxMDIsR0xVX1RFU1NfRVJST1I6MTAwMTAzLEdMVV9URVNTX0VER0VfRkxBRzoxMDAxMDQsR0xVX1RFU1NfQ09NQklORToxMDAxMDUsR0xVX1RFU1NfQkVHSU5fREFUQToxMDAxMDYsR0xVX1RFU1NfVkVSVEVYX0RBVEE6MTAwMTA3LEdMVV9URVNTX0VORF9EQVRBOjEwMDEwOCxHTFVfVEVTU19FUlJPUl9EQVRBOjEwMDEwOSxHTFVfVEVTU19FREdFX0ZMQUdfREFUQToxMDAxMTAsR0xVX1RFU1NfQ09NQklORV9EQVRBOjEwMDExMX19LFYucHJvdG90eXBlLmdsdURlbGV0ZVRlc3M9Vi5wcm90b3R5cGUueCxWLnByb3RvdHlwZS5nbHVUZXNzUHJvcGVydHk9Vi5wcm90b3R5cGUuQixWLnByb3RvdHlwZS5nbHVHZXRUZXNzUHJvcGVydHk9Vi5wcm90b3R5cGUueSxWLnByb3RvdHlwZS5nbHVUZXNzTm9ybWFsPVYucHJvdG90eXBlLkEsVi5wcm90b3R5cGUuZ2x1VGVzc0NhbGxiYWNrPVYucHJvdG90eXBlLnosVi5wcm90b3R5cGUuZ2x1VGVzc1ZlcnRleD1WLnByb3RvdHlwZS5DLFYucHJvdG90eXBlLmdsdVRlc3NCZWdpblBvbHlnb249Vi5wcm90b3R5cGUudSxWLnByb3RvdHlwZS5nbHVUZXNzQmVnaW5Db250b3VyPVYucHJvdG90eXBlLnQsVi5wcm90b3R5cGUuZ2x1VGVzc0VuZENvbnRvdXI9Vi5wcm90b3R5cGUudixWLnByb3RvdHlwZS5nbHVUZXNzRW5kUG9seWdvbj1WLnByb3RvdHlwZS53LHZvaWQgMCE9PWImJihiLmV4cG9ydHM9dGhpcy5saWJ0ZXNzKX0se31dLDEwOltmdW5jdGlvbihiLGMsZCl7KGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihiLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBkJiZ2b2lkIDAhPT1jP2UoZCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYSYmYS5hbWQ/YShbXCJleHBvcnRzXCJdLGUpOmUoYi5vcGVudHlwZT17fSl9KHRoaXMsZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYygpe3RoaXMudGFibGU9bmV3IFVpbnQxNkFycmF5KDE2KSx0aGlzLnRyYW5zPW5ldyBVaW50MTZBcnJheSgyODgpfWZ1bmN0aW9uIGQoYSxiKXt0aGlzLnNvdXJjZT1hLHRoaXMuc291cmNlSW5kZXg9MCx0aGlzLnRhZz0wLHRoaXMuYml0Y291bnQ9MCx0aGlzLmRlc3Q9Yix0aGlzLmRlc3RMZW49MCx0aGlzLmx0cmVlPW5ldyBjLHRoaXMuZHRyZWU9bmV3IGN9ZnVuY3Rpb24gZihhLGIsYyxkKXt2YXIgZSxmO2ZvcihlPTA7ZTxjOysrZSlhW2VdPTA7Zm9yKGU9MDtlPDMwLWM7KytlKWFbZStjXT1lL2N8MDtmb3IoZj1kLGU9MDtlPDMwOysrZSliW2VdPWYsZis9MTw8YVtlXX1mdW5jdGlvbiBnKGEsYil7dmFyIGM7Zm9yKGM9MDtjPDc7KytjKWEudGFibGVbY109MDtmb3IoYS50YWJsZVs3XT0yNCxhLnRhYmxlWzhdPTE1MixhLnRhYmxlWzldPTExMixjPTA7YzwyNDsrK2MpYS50cmFuc1tjXT0yNTYrYztmb3IoYz0wO2M8MTQ0OysrYylhLnRyYW5zWzI0K2NdPWM7Zm9yKGM9MDtjPDg7KytjKWEudHJhbnNbMTY4K2NdPTI4MCtjO2ZvcihjPTA7YzwxMTI7KytjKWEudHJhbnNbMTc2K2NdPTE0NCtjO2ZvcihjPTA7Yzw1OysrYyliLnRhYmxlW2NdPTA7Zm9yKGIudGFibGVbNV09MzIsYz0wO2M8MzI7KytjKWIudHJhbnNbY109Y31mdW5jdGlvbiBoKGEsYixjLGQpe3ZhciBlLGY7Zm9yKGU9MDtlPDE2OysrZSlhLnRhYmxlW2VdPTA7Zm9yKGU9MDtlPGQ7KytlKWEudGFibGVbYltjK2VdXSsrO2ZvcihhLnRhYmxlWzBdPTAsZj0wLGU9MDtlPDE2OysrZSl2ZVtlXT1mLGYrPWEudGFibGVbZV07Zm9yKGU9MDtlPGQ7KytlKWJbYytlXSYmKGEudHJhbnNbdmVbYltjK2VdXSsrXT1lKX1mdW5jdGlvbiBpKGEpe2EuYml0Y291bnQtLXx8KGEudGFnPWEuc291cmNlW2Euc291cmNlSW5kZXgrK10sYS5iaXRjb3VudD03KTt2YXIgYj0xJmEudGFnO3JldHVybiBhLnRhZz4+Pj0xLGJ9ZnVuY3Rpb24gaihhLGIsYyl7aWYoIWIpcmV0dXJuIGM7Zm9yKDthLmJpdGNvdW50PDI0OylhLnRhZ3w9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsrXTw8YS5iaXRjb3VudCxhLmJpdGNvdW50Kz04O3ZhciBkPWEudGFnJjY1NTM1Pj4+MTYtYjtyZXR1cm4gYS50YWc+Pj49YixhLmJpdGNvdW50LT1iLGQrY31mdW5jdGlvbiBrKGEsYil7Zm9yKDthLmJpdGNvdW50PDI0OylhLnRhZ3w9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsrXTw8YS5iaXRjb3VudCxhLmJpdGNvdW50Kz04O3ZhciBjPTAsZD0wLGU9MCxmPWEudGFnO2Rve2Q9MipkKygxJmYpLGY+Pj49MSwrK2UsYys9Yi50YWJsZVtlXSxkLT1iLnRhYmxlW2VdfXdoaWxlKGQ+PTApO3JldHVybiBhLnRhZz1mLGEuYml0Y291bnQtPWUsYi50cmFuc1tjK2RdfWZ1bmN0aW9uIGwoYSxiLGMpe3ZhciBkLGUsZixnLGksbDtmb3IoZD1qKGEsNSwyNTcpLGU9aihhLDUsMSksZj1qKGEsNCw0KSxnPTA7ZzwxOTsrK2cpdWVbZ109MDtmb3IoZz0wO2c8ZjsrK2cpe3ZhciBtPWooYSwzLDApO3VlW3NlW2ddXT1tfWZvcihoKHRlLHVlLDAsMTkpLGk9MDtpPGQrZTspe3ZhciBuPWsoYSx0ZSk7c3dpdGNoKG4pe2Nhc2UgMTY6dmFyIG89dWVbaS0xXTtmb3IobD1qKGEsMiwzKTtsOy0tbCl1ZVtpKytdPW87YnJlYWs7Y2FzZSAxNzpmb3IobD1qKGEsMywzKTtsOy0tbCl1ZVtpKytdPTA7YnJlYWs7Y2FzZSAxODpmb3IobD1qKGEsNywxMSk7bDstLWwpdWVbaSsrXT0wO2JyZWFrO2RlZmF1bHQ6dWVbaSsrXT1ufX1oKGIsdWUsMCxkKSxoKGMsdWUsZCxlKX1mdW5jdGlvbiBtKGEsYixjKXtmb3IoOzspe3ZhciBkPWsoYSxiKTtpZigyNTY9PT1kKXJldHVybiBrZTtpZihkPDI1NilhLmRlc3RbYS5kZXN0TGVuKytdPWQ7ZWxzZXt2YXIgZSxmLGcsaDtmb3IoZC09MjU3LGU9aihhLG9lW2RdLHBlW2RdKSxmPWsoYSxjKSxnPWEuZGVzdExlbi1qKGEscWVbZl0scmVbZl0pLGg9ZztoPGcrZTsrK2gpYS5kZXN0W2EuZGVzdExlbisrXT1hLmRlc3RbaF19fX1mdW5jdGlvbiBuKGEpe2Zvcih2YXIgYixjLGQ7YS5iaXRjb3VudD44OylhLnNvdXJjZUluZGV4LS0sYS5iaXRjb3VudC09ODtpZihiPWEuc291cmNlW2Euc291cmNlSW5kZXgrMV0sYj0yNTYqYithLnNvdXJjZVthLnNvdXJjZUluZGV4XSxjPWEuc291cmNlW2Euc291cmNlSW5kZXgrM10sYz0yNTYqYythLnNvdXJjZVthLnNvdXJjZUluZGV4KzJdLGIhPT0oNjU1MzUmfmMpKXJldHVybiBsZTtmb3IoYS5zb3VyY2VJbmRleCs9NCxkPWI7ZDstLWQpYS5kZXN0W2EuZGVzdExlbisrXT1hLnNvdXJjZVthLnNvdXJjZUluZGV4KytdO3JldHVybiBhLmJpdGNvdW50PTAsa2V9ZnVuY3Rpb24gbyhhLGIpe3ZhciBjLGUsZj1uZXcgZChhLGIpO2Rve3N3aXRjaChjPWkoZiksaihmLDIsMCkpe2Nhc2UgMDplPW4oZik7YnJlYWs7Y2FzZSAxOmU9bShmLG1lLG5lKTticmVhaztjYXNlIDI6bChmLGYubHRyZWUsZi5kdHJlZSksZT1tKGYsZi5sdHJlZSxmLmR0cmVlKTticmVhaztkZWZhdWx0OmU9bGV9aWYoZSE9PWtlKXRocm93IG5ldyBFcnJvcihcIkRhdGEgZXJyb3JcIil9d2hpbGUoIWMpO3JldHVybiBmLmRlc3RMZW48Zi5kZXN0Lmxlbmd0aD9cImZ1bmN0aW9uXCI9PXR5cGVvZiBmLmRlc3Quc2xpY2U/Zi5kZXN0LnNsaWNlKDAsZi5kZXN0TGVuKTpmLmRlc3Quc3ViYXJyYXkoMCxmLmRlc3RMZW4pOmYuZGVzdH1mdW5jdGlvbiBwKGEsYixjLGQsZSl7cmV0dXJuIE1hdGgucG93KDEtZSwzKSphKzMqTWF0aC5wb3coMS1lLDIpKmUqYiszKigxLWUpKk1hdGgucG93KGUsMikqYytNYXRoLnBvdyhlLDMpKmR9ZnVuY3Rpb24gcSgpe3RoaXMueDE9TnVtYmVyLk5hTix0aGlzLnkxPU51bWJlci5OYU4sdGhpcy54Mj1OdW1iZXIuTmFOLHRoaXMueTI9TnVtYmVyLk5hTn1mdW5jdGlvbiByKCl7dGhpcy5jb21tYW5kcz1bXSx0aGlzLmZpbGw9XCJibGFja1wiLHRoaXMuc3Ryb2tlPW51bGwsdGhpcy5zdHJva2VXaWR0aD0xfWZ1bmN0aW9uIHMoYSl7dGhyb3cgbmV3IEVycm9yKGEpfWZ1bmN0aW9uIHQoYSxiKXthfHxzKGIpfWZ1bmN0aW9uIHUoYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGF9fWZ1bmN0aW9uIHYoYSl7cmV0dXJuIGE+PS0xMjgmJmE8PTEyN31mdW5jdGlvbiB3KGEsYixjKXtmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2I8ZSYmZDw2NCYmMD09PWFbYl07KSsrYiwrK2Q7cmV0dXJuIGMucHVzaCgxMjh8ZC0xKSxifWZ1bmN0aW9uIHgoYSxiLGMpe2Zvcih2YXIgZD0wLGU9YS5sZW5ndGgsZj1iO2Y8ZSYmZDw2NDspe3ZhciBnPWFbZl07aWYoIXYoZykpYnJlYWs7aWYoMD09PWcmJmYrMTxlJiYwPT09YVtmKzFdKWJyZWFrOysrZiwrK2R9Yy5wdXNoKGQtMSk7Zm9yKHZhciBoPWI7aDxmOysraCljLnB1c2goYVtoXSsyNTYmMjU1KTtyZXR1cm4gZn1mdW5jdGlvbiB5KGEsYixjKXtmb3IodmFyIGQ9MCxlPWEubGVuZ3RoLGY9YjtmPGUmJmQ8NjQ7KXt2YXIgZz1hW2ZdO2lmKDA9PT1nKWJyZWFrO2lmKHYoZykmJmYrMTxlJiZ2KGFbZisxXSkpYnJlYWs7KytmLCsrZH1jLnB1c2goNjR8ZC0xKTtmb3IodmFyIGg9YjtoPGY7KytoKXt2YXIgaT1hW2hdO2MucHVzaChpKzY1NTM2Pj44JjI1NSxpKzI1NiYyNTUpfXJldHVybiBmfWZ1bmN0aW9uIHooYSxiLGMpe2Zvcih2YXIgZD10aGlzLGU9MDtlPGIubGVuZ3RoO2UrPTEpe3ZhciBmPWJbZV07ZFtmLm5hbWVdPWYudmFsdWV9aWYodGhpcy50YWJsZU5hbWU9YSx0aGlzLmZpZWxkcz1iLGMpZm9yKHZhciBnPU9iamVjdC5rZXlzKGMpLGg9MDtoPGcubGVuZ3RoO2grPTEpe3ZhciBpPWdbaF0saj1jW2ldO3ZvaWQgMCE9PWRbaV0mJihkW2ldPWopfX1mdW5jdGlvbiBBKGEsYixjKXt2b2lkIDA9PT1jJiYoYz1iLmxlbmd0aCk7dmFyIGQ9bmV3IEFycmF5KGIubGVuZ3RoKzEpO2RbMF09e25hbWU6YStcIkNvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmN9O2Zvcih2YXIgZT0wO2U8Yi5sZW5ndGg7ZSsrKWRbZSsxXT17bmFtZTphK2UsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmJbZV19O3JldHVybiBkfWZ1bmN0aW9uIEIoYSxiLGMpe3ZhciBkPWIubGVuZ3RoLGU9bmV3IEFycmF5KGQrMSk7ZVswXT17bmFtZTphK1wiQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZH07Zm9yKHZhciBmPTA7ZjxkO2YrKyllW2YrMV09e25hbWU6YStmLHR5cGU6XCJUQUJMRVwiLHZhbHVlOmMoYltmXSxmKX07cmV0dXJuIGV9ZnVuY3Rpb24gQyhhLGIsYyl7dmFyIGQ9Yi5sZW5ndGgsZT1bXTtlWzBdPXtuYW1lOmErXCJDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkfTtmb3IodmFyIGY9MDtmPGQ7ZisrKWU9ZS5jb25jYXQoYyhiW2ZdLGYpKTtyZXR1cm4gZX1mdW5jdGlvbiBEKGEpezE9PT1hLmZvcm1hdD96LmNhbGwodGhpcyxcImNvdmVyYWdlVGFibGVcIixbe25hbWU6XCJjb3ZlcmFnZUZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxfV0uY29uY2F0KEEoXCJnbHlwaFwiLGEuZ2x5cGhzKSkpOnhlLmFzc2VydCghMSxcIkNhbid0IGNyZWF0ZSBjb3ZlcmFnZSB0YWJsZSBmb3JtYXQgMiB5ZXQuXCIpfWZ1bmN0aW9uIEUoYSl7ei5jYWxsKHRoaXMsXCJzY3JpcHRMaXN0VGFibGVcIixDKFwic2NyaXB0UmVjb3JkXCIsYSxmdW5jdGlvbihhLGIpe3ZhciBjPWEuc2NyaXB0LGQ9Yy5kZWZhdWx0TGFuZ1N5cztyZXR1cm4geGUuYXNzZXJ0KCEhZCxcIlVuYWJsZSB0byB3cml0ZSBHU1VCOiBzY3JpcHQgXCIrYS50YWcrXCIgaGFzIG5vIGRlZmF1bHQgbGFuZ3VhZ2Ugc3lzdGVtLlwiKSxbe25hbWU6XCJzY3JpcHRUYWdcIitiLHR5cGU6XCJUQUdcIix2YWx1ZTphLnRhZ30se25hbWU6XCJzY3JpcHRcIitiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyB6KFwic2NyaXB0VGFibGVcIixbe25hbWU6XCJkZWZhdWx0TGFuZ1N5c1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyB6KFwiZGVmYXVsdExhbmdTeXNcIixbe25hbWU6XCJsb29rdXBPcmRlclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlcUZlYXR1cmVJbmRleFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkLnJlcUZlYXR1cmVJbmRleH1dLmNvbmNhdChBKFwiZmVhdHVyZUluZGV4XCIsZC5mZWF0dXJlSW5kZXhlcykpKX1dLmNvbmNhdChDKFwibGFuZ1N5c1wiLGMubGFuZ1N5c1JlY29yZHMsZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxhbmdTeXM7cmV0dXJuW3tuYW1lOlwibGFuZ1N5c1RhZ1wiK2IsdHlwZTpcIlRBR1wiLHZhbHVlOmEudGFnfSx7bmFtZTpcImxhbmdTeXNcIitiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyB6KFwibGFuZ1N5c1wiLFt7bmFtZTpcImxvb2t1cE9yZGVyXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVxRmVhdHVyZUluZGV4XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmMucmVxRmVhdHVyZUluZGV4fV0uY29uY2F0KEEoXCJmZWF0dXJlSW5kZXhcIixjLmZlYXR1cmVJbmRleGVzKSkpfV19KSkpfV19KSl9ZnVuY3Rpb24gRihhKXt6LmNhbGwodGhpcyxcImZlYXR1cmVMaXN0VGFibGVcIixDKFwiZmVhdHVyZVJlY29yZFwiLGEsZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmZlYXR1cmU7cmV0dXJuW3tuYW1lOlwiZmVhdHVyZVRhZ1wiK2IsdHlwZTpcIlRBR1wiLHZhbHVlOmEudGFnfSx7bmFtZTpcImZlYXR1cmVcIitiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyB6KFwiZmVhdHVyZVRhYmxlXCIsW3tuYW1lOlwiZmVhdHVyZVBhcmFtc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjLmZlYXR1cmVQYXJhbXN9XS5jb25jYXQoQShcImxvb2t1cExpc3RJbmRleFwiLGMubG9va3VwTGlzdEluZGV4ZXMpKSl9XX0pKX1mdW5jdGlvbiBHKGEsYil7ei5jYWxsKHRoaXMsXCJsb29rdXBMaXN0VGFibGVcIixCKFwibG9va3VwXCIsYSxmdW5jdGlvbihhKXt2YXIgYz1iW2EubG9va3VwVHlwZV07cmV0dXJuIHhlLmFzc2VydCghIWMsXCJVbmFibGUgdG8gd3JpdGUgR1NVQiBsb29rdXAgdHlwZSBcIithLmxvb2t1cFR5cGUrXCIgdGFibGVzLlwiKSxuZXcgeihcImxvb2t1cFRhYmxlXCIsW3tuYW1lOlwibG9va3VwVHlwZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmxvb2t1cFR5cGV9LHtuYW1lOlwibG9va3VwRmxhZ1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmxvb2t1cEZsYWd9XS5jb25jYXQoQihcInN1YnRhYmxlXCIsYS5zdWJ0YWJsZXMsYykpKX0pKX1mdW5jdGlvbiBIKGEsYil7cmV0dXJuIGEuZ2V0VWludDgoYil9ZnVuY3Rpb24gSShhLGIpe3JldHVybiBhLmdldFVpbnQxNihiLCExKX1mdW5jdGlvbiBKKGEsYil7cmV0dXJuIGEuZ2V0SW50MTYoYiwhMSl9ZnVuY3Rpb24gSyhhLGIpe3JldHVybiBhLmdldFVpbnQzMihiLCExKX1mdW5jdGlvbiBMKGEsYil7cmV0dXJuIGEuZ2V0SW50MTYoYiwhMSkrYS5nZXRVaW50MTYoYisyLCExKS82NTUzNX1mdW5jdGlvbiBNKGEsYil7Zm9yKHZhciBjPVwiXCIsZD1iO2Q8Yis0O2QrPTEpYys9U3RyaW5nLmZyb21DaGFyQ29kZShhLmdldEludDgoZCkpO3JldHVybiBjfWZ1bmN0aW9uIE4oYSxiLGMpe2Zvcih2YXIgZD0wLGU9MDtlPGM7ZSs9MSlkPDw9OCxkKz1hLmdldFVpbnQ4KGIrZSk7cmV0dXJuIGR9ZnVuY3Rpb24gTyhhLGIsYyl7Zm9yKHZhciBkPVtdLGU9YjtlPGM7ZSs9MSlkLnB1c2goYS5nZXRVaW50OChlKSk7cmV0dXJuIGR9ZnVuY3Rpb24gUChhKXtmb3IodmFyIGI9XCJcIixjPTA7YzxhLmxlbmd0aDtjKz0xKWIrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtjXSk7cmV0dXJuIGJ9ZnVuY3Rpb24gUShhLGIpe3RoaXMuZGF0YT1hLHRoaXMub2Zmc2V0PWIsdGhpcy5yZWxhdGl2ZU9mZnNldD0wfWZ1bmN0aW9uIFIoYSxiKXtiLnBhcnNlVVNob3J0KCksYS5sZW5ndGg9Yi5wYXJzZVVMb25nKCksYS5sYW5ndWFnZT1iLnBhcnNlVUxvbmcoKTt2YXIgYzthLmdyb3VwQ291bnQ9Yz1iLnBhcnNlVUxvbmcoKSxhLmdseXBoSW5kZXhNYXA9e307Zm9yKHZhciBkPTA7ZDxjO2QrPTEpZm9yKHZhciBlPWIucGFyc2VVTG9uZygpLGY9Yi5wYXJzZVVMb25nKCksZz1iLnBhcnNlVUxvbmcoKSxoPWU7aDw9ZjtoKz0xKWEuZ2x5cGhJbmRleE1hcFtoXT1nLGcrK31mdW5jdGlvbiBTKGEsYixjLGQsZSl7YS5sZW5ndGg9Yi5wYXJzZVVTaG9ydCgpLGEubGFuZ3VhZ2U9Yi5wYXJzZVVTaG9ydCgpO3ZhciBmO2Euc2VnQ291bnQ9Zj1iLnBhcnNlVVNob3J0KCk+PjEsYi5za2lwKFwidVNob3J0XCIsMyksYS5nbHlwaEluZGV4TWFwPXt9O2Zvcih2YXIgZz1uZXcgTGUuUGFyc2VyKGMsZCtlKzE0KSxoPW5ldyBMZS5QYXJzZXIoYyxkK2UrMTYrMipmKSxpPW5ldyBMZS5QYXJzZXIoYyxkK2UrMTYrNCpmKSxqPW5ldyBMZS5QYXJzZXIoYyxkK2UrMTYrNipmKSxrPWQrZSsxNis4KmYsbD0wO2w8Zi0xO2wrPTEpZm9yKHZhciBtPXZvaWQgMCxuPWcucGFyc2VVU2hvcnQoKSxvPWgucGFyc2VVU2hvcnQoKSxwPWkucGFyc2VTaG9ydCgpLHE9ai5wYXJzZVVTaG9ydCgpLHI9bztyPD1uO3IrPTEpMCE9PXE/KGs9ai5vZmZzZXQrai5yZWxhdGl2ZU9mZnNldC0yLGsrPXEsays9Miooci1vKSwwIT09KG09TGUuZ2V0VVNob3J0KGMsaykpJiYobT1tK3AmNjU1MzUpKTptPXIrcCY2NTUzNSxhLmdseXBoSW5kZXhNYXBbcl09bX1mdW5jdGlvbiBUKGEsYil7dmFyIGM9e307Yy52ZXJzaW9uPUxlLmdldFVTaG9ydChhLGIpLHhlLmFyZ3VtZW50KDA9PT1jLnZlcnNpb24sXCJjbWFwIHRhYmxlIHZlcnNpb24gc2hvdWxkIGJlIDAuXCIpLGMubnVtVGFibGVzPUxlLmdldFVTaG9ydChhLGIrMik7Zm9yKHZhciBkPS0xLGU9Yy5udW1UYWJsZXMtMTtlPj0wO2UtPTEpe3ZhciBmPUxlLmdldFVTaG9ydChhLGIrNCs4KmUpLGc9TGUuZ2V0VVNob3J0KGEsYis0KzgqZSsyKTtpZigzPT09ZiYmKDA9PT1nfHwxPT09Z3x8MTA9PT1nKXx8MD09PWYmJigwPT09Z3x8MT09PWd8fDI9PT1nfHwzPT09Z3x8ND09PWcpKXtkPUxlLmdldFVMb25nKGEsYis0KzgqZSs0KTticmVha319aWYoLTE9PT1kKXRocm93IG5ldyBFcnJvcihcIk5vIHZhbGlkIGNtYXAgc3ViLXRhYmxlcyBmb3VuZC5cIik7dmFyIGg9bmV3IExlLlBhcnNlcihhLGIrZCk7aWYoYy5mb3JtYXQ9aC5wYXJzZVVTaG9ydCgpLDEyPT09Yy5mb3JtYXQpUihjLGgpO2Vsc2V7aWYoNCE9PWMuZm9ybWF0KXRocm93IG5ldyBFcnJvcihcIk9ubHkgZm9ybWF0IDQgYW5kIDEyIGNtYXAgdGFibGVzIGFyZSBzdXBwb3J0ZWQgKGZvdW5kIGZvcm1hdCBcIitjLmZvcm1hdCtcIikuXCIpO1MoYyxoLGEsYixkKX1yZXR1cm4gY31mdW5jdGlvbiBVKGEsYixjKXthLnNlZ21lbnRzLnB1c2goe2VuZDpiLHN0YXJ0OmIsZGVsdGE6LShiLWMpLG9mZnNldDowLGdseXBoSW5kZXg6Y30pfWZ1bmN0aW9uIFYoYSl7YS5zZWdtZW50cy5wdXNoKHtlbmQ6NjU1MzUsc3RhcnQ6NjU1MzUsZGVsdGE6MSxvZmZzZXQ6MH0pfWZ1bmN0aW9uIFcoYSl7dmFyIGIsYz0hMDtmb3IoYj1hLmxlbmd0aC0xO2I+MDtiLT0xKXtpZihhLmdldChiKS51bmljb2RlPjY1NTM1KXtjb25zb2xlLmxvZyhcIkFkZGluZyBDTUFQIGZvcm1hdCAxMiAobmVlZGVkISlcIiksYz0hMTticmVha319dmFyIGQ9W3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcIm51bVRhYmxlc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjPzE6Mn0se25hbWU6XCJwbGF0Zm9ybUlEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjN9LHtuYW1lOlwiZW5jb2RpbmdJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmM/MTI6MjB9XTtjfHwoZD1kLmNvbmNhdChbe25hbWU6XCJjbWFwMTJQbGF0Zm9ybUlEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjN9LHtuYW1lOlwiY21hcDEyRW5jb2RpbmdJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxMH0se25hbWU6XCJjbWFwMTJPZmZzZXRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfV0pKSxkPWQuY29uY2F0KFt7bmFtZTpcImZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTo0fSx7bmFtZTpcImNtYXA0TGVuZ3RoXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibGFuZ3VhZ2VcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzZWdDb3VudFgyXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic2VhcmNoUmFuZ2VcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJlbnRyeVNlbGVjdG9yXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmFuZ2VTaGlmdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfV0pO3ZhciBlPW5ldyBJZS5UYWJsZShcImNtYXBcIixkKTtmb3IoZS5zZWdtZW50cz1bXSxiPTA7YjxhLmxlbmd0aDtiKz0xKXtmb3IodmFyIGY9YS5nZXQoYiksZz0wO2c8Zi51bmljb2Rlcy5sZW5ndGg7Zys9MSlVKGUsZi51bmljb2Rlc1tnXSxiKTtlLnNlZ21lbnRzPWUuc2VnbWVudHMuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0YXJ0LWIuc3RhcnR9KX1WKGUpO3ZhciBoPWUuc2VnbWVudHMubGVuZ3RoLGk9MCxqPVtdLGs9W10sbD1bXSxtPVtdLG49W10sbz1bXTtmb3IoYj0wO2I8aDtiKz0xKXt2YXIgcD1lLnNlZ21lbnRzW2JdO3AuZW5kPD02NTUzNSYmcC5zdGFydDw9NjU1MzU/KGo9ai5jb25jYXQoe25hbWU6XCJlbmRfXCIrYix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6cC5lbmR9KSxrPWsuY29uY2F0KHtuYW1lOlwic3RhcnRfXCIrYix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6cC5zdGFydH0pLGw9bC5jb25jYXQoe25hbWU6XCJpZERlbHRhX1wiK2IsdHlwZTpcIlNIT1JUXCIsdmFsdWU6cC5kZWx0YX0pLG09bS5jb25jYXQoe25hbWU6XCJpZFJhbmdlT2Zmc2V0X1wiK2IsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOnAub2Zmc2V0fSksdm9pZCAwIT09cC5nbHlwaElkJiYobj1uLmNvbmNhdCh7bmFtZTpcImdseXBoX1wiK2IsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOnAuZ2x5cGhJZH0pKSk6aSs9MSxjfHx2b2lkIDA9PT1wLmdseXBoSW5kZXh8fChvPW8uY29uY2F0KHtuYW1lOlwiY21hcDEyU3RhcnRfXCIrYix0eXBlOlwiVUxPTkdcIix2YWx1ZTpwLnN0YXJ0fSksbz1vLmNvbmNhdCh7bmFtZTpcImNtYXAxMkVuZF9cIitiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnAuZW5kfSksbz1vLmNvbmNhdCh7bmFtZTpcImNtYXAxMkdseXBoX1wiK2IsdHlwZTpcIlVMT05HXCIsdmFsdWU6cC5nbHlwaEluZGV4fSkpfWlmKGUuc2VnQ291bnRYMj0yKihoLWkpLGUuc2VhcmNoUmFuZ2U9MipNYXRoLnBvdygyLE1hdGguZmxvb3IoTWF0aC5sb2coaC1pKS9NYXRoLmxvZygyKSkpLGUuZW50cnlTZWxlY3Rvcj1NYXRoLmxvZyhlLnNlYXJjaFJhbmdlLzIpL01hdGgubG9nKDIpLGUucmFuZ2VTaGlmdD1lLnNlZ0NvdW50WDItZS5zZWFyY2hSYW5nZSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQoaiksZS5maWVsZHMucHVzaCh7bmFtZTpcInJlc2VydmVkUGFkXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9KSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQoayksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KGwpLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChtKSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQobiksZS5jbWFwNExlbmd0aD0xNCsyKmoubGVuZ3RoKzIrMiprLmxlbmd0aCsyKmwubGVuZ3RoKzIqbS5sZW5ndGgrMipuLmxlbmd0aCwhYyl7dmFyIHE9MTYrNCpvLmxlbmd0aDtlLmNtYXAxMk9mZnNldD0yMCtlLmNtYXA0TGVuZ3RoLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChbe25hbWU6XCJjbWFwMTJGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MTJ9LHtuYW1lOlwiY21hcDEyUmVzZXJ2ZWRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJjbWFwMTJMZW5ndGhcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTpxfSx7bmFtZTpcImNtYXAxMkxhbmd1YWdlXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJjbWFwMTJuR3JvdXBzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6by5sZW5ndGgvM31dKSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQobyl9cmV0dXJuIGV9ZnVuY3Rpb24gWChhKXt0aGlzLmZvbnQ9YX1mdW5jdGlvbiBZKGEpe3RoaXMuY21hcD1hfWZ1bmN0aW9uIFooYSxiKXt0aGlzLmVuY29kaW5nPWEsdGhpcy5jaGFyc2V0PWJ9ZnVuY3Rpb24gJChhKXt2YXIgYj10aGlzO3N3aXRjaChhLnZlcnNpb24pe2Nhc2UgMTp0aGlzLm5hbWVzPVFlLnNsaWNlKCk7YnJlYWs7Y2FzZSAyOnRoaXMubmFtZXM9bmV3IEFycmF5KGEubnVtYmVyT2ZHbHlwaHMpO2Zvcih2YXIgYz0wO2M8YS5udW1iZXJPZkdseXBocztjKyspYS5nbHlwaE5hbWVJbmRleFtjXTxRZS5sZW5ndGg/Yi5uYW1lc1tjXT1RZVthLmdseXBoTmFtZUluZGV4W2NdXTpiLm5hbWVzW2NdPWEubmFtZXNbYS5nbHlwaE5hbWVJbmRleFtjXS1RZS5sZW5ndGhdO2JyZWFrO2Nhc2UgMi41OnRoaXMubmFtZXM9bmV3IEFycmF5KGEubnVtYmVyT2ZHbHlwaHMpO2Zvcih2YXIgZD0wO2Q8YS5udW1iZXJPZkdseXBocztkKyspYi5uYW1lc1tkXT1RZVtkK2EuZ2x5cGhOYW1lSW5kZXhbZF1dO2JyZWFrO2Nhc2UgMzpkZWZhdWx0OnRoaXMubmFtZXM9W119fWZ1bmN0aW9uIF8oYSl7Zm9yKHZhciBiLGM9YS50YWJsZXMuY21hcC5nbHlwaEluZGV4TWFwLGQ9T2JqZWN0LmtleXMoYyksZT0wO2U8ZC5sZW5ndGg7ZSs9MSl7dmFyIGY9ZFtlXSxnPWNbZl07Yj1hLmdseXBocy5nZXQoZyksYi5hZGRVbmljb2RlKHBhcnNlSW50KGYpKX1mb3IodmFyIGg9MDtoPGEuZ2x5cGhzLmxlbmd0aDtoKz0xKWI9YS5nbHlwaHMuZ2V0KGgpLGEuY2ZmRW5jb2Rpbmc/YS5pc0NJREZvbnQ/Yi5uYW1lPVwiZ2lkXCIraDpiLm5hbWU9YS5jZmZFbmNvZGluZy5jaGFyc2V0W2hdOmEuZ2x5cGhOYW1lcy5uYW1lcyYmKGIubmFtZT1hLmdseXBoTmFtZXMuZ2x5cGhJbmRleFRvTmFtZShoKSl9ZnVuY3Rpb24gYWEoYSxiLGMsZCxlKXthLmJlZ2luUGF0aCgpLGEubW92ZVRvKGIsYyksYS5saW5lVG8oZCxlKSxhLnN0cm9rZSgpfWZ1bmN0aW9uIGJhKGEsYil7dmFyIGM9Ynx8bmV3IHI7cmV0dXJue2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiYoYz1jKCkpLGN9LHNldDpmdW5jdGlvbihhKXtjPWF9fX1mdW5jdGlvbiBjYShhKXt0aGlzLmJpbmRDb25zdHJ1Y3RvclZhbHVlcyhhKX1mdW5jdGlvbiBkYShhLGIsYyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEucGF0aCxhW2NdfSxzZXQ6ZnVuY3Rpb24oYil7YVtjXT1ifSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIGVhKGEsYil7dmFyIGM9dGhpcztpZih0aGlzLmZvbnQ9YSx0aGlzLmdseXBocz17fSxBcnJheS5pc0FycmF5KGIpKWZvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKWMuZ2x5cGhzW2RdPWJbZF07dGhpcy5sZW5ndGg9YiYmYi5sZW5ndGh8fDB9ZnVuY3Rpb24gZmEoYSxiKXtyZXR1cm4gbmV3IGNhKHtpbmRleDpiLGZvbnQ6YX0pfWZ1bmN0aW9uIGdhKGEsYixjLGQsZSxmKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZz1uZXcgY2Eoe2luZGV4OmIsZm9udDphfSk7cmV0dXJuIGcucGF0aD1mdW5jdGlvbigpe2MoZyxkLGUpO3ZhciBiPWYoYS5nbHlwaHMsZyk7cmV0dXJuIGIudW5pdHNQZXJFbT1hLnVuaXRzUGVyRW0sYn0sZGEoZyxcInhNaW5cIixcIl94TWluXCIpLGRhKGcsXCJ4TWF4XCIsXCJfeE1heFwiKSxkYShnLFwieU1pblwiLFwiX3lNaW5cIiksZGEoZyxcInlNYXhcIixcIl95TWF4XCIpLGd9fWZ1bmN0aW9uIGhhKGEsYixjLGQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPW5ldyBjYSh7aW5kZXg6Yixmb250OmF9KTtyZXR1cm4gZS5wYXRoPWZ1bmN0aW9uKCl7dmFyIGI9YyhhLGUsZCk7cmV0dXJuIGIudW5pdHNQZXJFbT1hLnVuaXRzUGVyRW0sYn0sZX19ZnVuY3Rpb24gaWEoYSxiKXtpZihhPT09YilyZXR1cm4hMDtpZihBcnJheS5pc0FycmF5KGEpJiZBcnJheS5pc0FycmF5KGIpKXtpZihhLmxlbmd0aCE9PWIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7Yys9MSlpZighaWEoYVtjXSxiW2NdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBqYShhKXtyZXR1cm4gYS5sZW5ndGg8MTI0MD8xMDc6YS5sZW5ndGg8MzM5MDA/MTEzMTozMjc2OH1mdW5jdGlvbiBrYShhLGIsYyl7dmFyIGQsZSxmPVtdLGc9W10saD1MZS5nZXRDYXJkMTYoYSxiKTtpZigwIT09aCl7dmFyIGk9TGUuZ2V0Qnl0ZShhLGIrMik7ZD1iKyhoKzEpKmkrMjtmb3IodmFyIGo9YiszLGs9MDtrPGgrMTtrKz0xKWYucHVzaChMZS5nZXRPZmZzZXQoYSxqLGkpKSxqKz1pO2U9ZCtmW2hdfWVsc2UgZT1iKzI7Zm9yKHZhciBsPTA7bDxmLmxlbmd0aC0xO2wrPTEpe3ZhciBtPUxlLmdldEJ5dGVzKGEsZCtmW2xdLGQrZltsKzFdKTtjJiYobT1jKG0pKSxnLnB1c2gobSl9cmV0dXJue29iamVjdHM6ZyxzdGFydE9mZnNldDpiLGVuZE9mZnNldDplfX1mdW5jdGlvbiBsYShhKXtmb3IodmFyIGI9XCJcIixjPTE1LGQ9W1wiMFwiLFwiMVwiLFwiMlwiLFwiM1wiLFwiNFwiLFwiNVwiLFwiNlwiLFwiN1wiLFwiOFwiLFwiOVwiLFwiLlwiLFwiRVwiLFwiRS1cIixudWxsLFwiLVwiXTs7KXt2YXIgZT1hLnBhcnNlQnl0ZSgpLGY9ZT4+NCxnPTE1JmU7aWYoZj09PWMpYnJlYWs7aWYoYis9ZFtmXSxnPT09YylicmVhaztiKz1kW2ddfXJldHVybiBwYXJzZUZsb2F0KGIpfWZ1bmN0aW9uIG1hKGEsYil7dmFyIGMsZCxlLGY7aWYoMjg9PT1iKXJldHVybiBjPWEucGFyc2VCeXRlKCksZD1hLnBhcnNlQnl0ZSgpLGM8PDh8ZDtpZigyOT09PWIpcmV0dXJuIGM9YS5wYXJzZUJ5dGUoKSxkPWEucGFyc2VCeXRlKCksZT1hLnBhcnNlQnl0ZSgpLGY9YS5wYXJzZUJ5dGUoKSxjPDwyNHxkPDwxNnxlPDw4fGY7aWYoMzA9PT1iKXJldHVybiBsYShhKTtpZihiPj0zMiYmYjw9MjQ2KXJldHVybiBiLTEzOTtpZihiPj0yNDcmJmI8PTI1MClyZXR1cm4gYz1hLnBhcnNlQnl0ZSgpLDI1NiooYi0yNDcpK2MrMTA4O2lmKGI+PTI1MSYmYjw9MjU0KXJldHVybiBjPWEucGFyc2VCeXRlKCksMjU2Ki0oYi0yNTEpLWMtMTA4O3Rocm93IG5ldyBFcnJvcihcIkludmFsaWQgYjAgXCIrYil9ZnVuY3Rpb24gbmEoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrPTEpe3ZhciBkPWFbY11bMF0sZT1hW2NdWzFdLGY9dm9pZCAwO2lmKGY9MT09PWUubGVuZ3RoP2VbMF06ZSxiLmhhc093blByb3BlcnR5KGQpJiYhaXNOYU4oYltkXSkpdGhyb3cgbmV3IEVycm9yKFwiT2JqZWN0IFwiK2IrXCIgYWxyZWFkeSBoYXMga2V5IFwiK2QpO2JbZF09Zn1yZXR1cm4gYn1mdW5jdGlvbiBvYShhLGIsYyl7Yj12b2lkIDAhPT1iP2I6MDt2YXIgZD1uZXcgTGUuUGFyc2VyKGEsYiksZT1bXSxmPVtdO2ZvcihjPXZvaWQgMCE9PWM/YzphLmxlbmd0aDtkLnJlbGF0aXZlT2Zmc2V0PGM7KXt2YXIgZz1kLnBhcnNlQnl0ZSgpO2c8PTIxPygxMj09PWcmJihnPTEyMDArZC5wYXJzZUJ5dGUoKSksZS5wdXNoKFtnLGZdKSxmPVtdKTpmLnB1c2gobWEoZCxnKSl9cmV0dXJuIG5hKGUpfWZ1bmN0aW9uIHBhKGEsYil7cmV0dXJuIGI9Yjw9MzkwP05lW2JdOmFbYi0zOTFdfWZ1bmN0aW9uIHFhKGEsYixjKXtmb3IodmFyIGQsZT17fSxmPTA7ZjxiLmxlbmd0aDtmKz0xKXt2YXIgZz1iW2ZdO2lmKEFycmF5LmlzQXJyYXkoZy50eXBlKSl7dmFyIGg9W107aC5sZW5ndGg9Zy50eXBlLmxlbmd0aDtmb3IodmFyIGk9MDtpPGcudHlwZS5sZW5ndGg7aSsrKWQ9dm9pZCAwIT09YVtnLm9wXT9hW2cub3BdW2ldOnZvaWQgMCx2b2lkIDA9PT1kJiYoZD12b2lkIDAhPT1nLnZhbHVlJiZ2b2lkIDAhPT1nLnZhbHVlW2ldP2cudmFsdWVbaV06bnVsbCksXCJTSURcIj09PWcudHlwZVtpXSYmKGQ9cGEoYyxkKSksaFtpXT1kO2VbZy5uYW1lXT1ofWVsc2UgZD1hW2cub3BdLHZvaWQgMD09PWQmJihkPXZvaWQgMCE9PWcudmFsdWU/Zy52YWx1ZTpudWxsKSxcIlNJRFwiPT09Zy50eXBlJiYoZD1wYShjLGQpKSxlW2cubmFtZV09ZH1yZXR1cm4gZX1mdW5jdGlvbiByYShhLGIpe3ZhciBjPXt9O3JldHVybiBjLmZvcm1hdE1ham9yPUxlLmdldENhcmQ4KGEsYiksYy5mb3JtYXRNaW5vcj1MZS5nZXRDYXJkOChhLGIrMSksYy5zaXplPUxlLmdldENhcmQ4KGEsYisyKSxjLm9mZnNldFNpemU9TGUuZ2V0Q2FyZDgoYSxiKzMpLGMuc3RhcnRPZmZzZXQ9YixjLmVuZE9mZnNldD1iKzQsY31mdW5jdGlvbiBzYShhLGIpe3JldHVybiBxYShvYShhLDAsYS5ieXRlTGVuZ3RoKSxUZSxiKX1mdW5jdGlvbiB0YShhLGIsYyxkKXtyZXR1cm4gcWEob2EoYSxiLGMpLFVlLGQpfWZ1bmN0aW9uIHVhKGEsYixjLGQpe2Zvcih2YXIgZT1bXSxmPTA7ZjxjLmxlbmd0aDtmKz0xKXt2YXIgZz1uZXcgRGF0YVZpZXcobmV3IFVpbnQ4QXJyYXkoY1tmXSkuYnVmZmVyKSxoPXNhKGcsZCk7aC5fc3VicnM9W10saC5fc3VicnNCaWFzPTA7dmFyIGk9aC5wcml2YXRlWzBdLGo9aC5wcml2YXRlWzFdO2lmKDAhPT1pJiYwIT09ail7dmFyIGs9dGEoYSxqK2IsaSxkKTtpZihoLl9kZWZhdWx0V2lkdGhYPWsuZGVmYXVsdFdpZHRoWCxoLl9ub21pbmFsV2lkdGhYPWsubm9taW5hbFdpZHRoWCwwIT09ay5zdWJycyl7dmFyIGw9aitrLnN1YnJzLG09a2EoYSxsK2IpO2guX3N1YnJzPW0ub2JqZWN0cyxoLl9zdWJyc0JpYXM9amEoaC5fc3VicnMpfWguX3ByaXZhdGVEaWN0PWt9ZS5wdXNoKGgpfXJldHVybiBlfWZ1bmN0aW9uIHZhKGEsYixjLGQpe3ZhciBlLGYsZz1uZXcgTGUuUGFyc2VyKGEsYik7Yy09MTt2YXIgaD1bXCIubm90ZGVmXCJdLGk9Zy5wYXJzZUNhcmQ4KCk7aWYoMD09PWkpZm9yKHZhciBqPTA7ajxjO2orPTEpZT1nLnBhcnNlU0lEKCksaC5wdXNoKHBhKGQsZSkpO2Vsc2UgaWYoMT09PWkpZm9yKDtoLmxlbmd0aDw9Yzspe2U9Zy5wYXJzZVNJRCgpLGY9Zy5wYXJzZUNhcmQ4KCk7Zm9yKHZhciBrPTA7azw9ZjtrKz0xKWgucHVzaChwYShkLGUpKSxlKz0xfWVsc2V7aWYoMiE9PWkpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBjaGFyc2V0IGZvcm1hdCBcIitpKTtmb3IoO2gubGVuZ3RoPD1jOyl7ZT1nLnBhcnNlU0lEKCksZj1nLnBhcnNlQ2FyZDE2KCk7Zm9yKHZhciBsPTA7bDw9ZjtsKz0xKWgucHVzaChwYShkLGUpKSxlKz0xfX1yZXR1cm4gaH1mdW5jdGlvbiB3YShhLGIsYyl7dmFyIGQsZT17fSxmPW5ldyBMZS5QYXJzZXIoYSxiKSxnPWYucGFyc2VDYXJkOCgpO2lmKDA9PT1nKWZvcih2YXIgaD1mLnBhcnNlQ2FyZDgoKSxpPTA7aTxoO2krPTEpZD1mLnBhcnNlQ2FyZDgoKSxlW2RdPWk7ZWxzZXtpZigxIT09Zyl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGVuY29kaW5nIGZvcm1hdCBcIitnKTt2YXIgaj1mLnBhcnNlQ2FyZDgoKTtkPTE7Zm9yKHZhciBrPTA7azxqO2srPTEpZm9yKHZhciBsPWYucGFyc2VDYXJkOCgpLG09Zi5wYXJzZUNhcmQ4KCksbj1sO248PWwrbTtuKz0xKWVbbl09ZCxkKz0xfXJldHVybiBuZXcgWihlLGMpfWZ1bmN0aW9uIHhhKGEsYixjKXtmdW5jdGlvbiBkKGEsYil7dCYmby5jbG9zZVBhdGgoKSxvLm1vdmVUbyhhLGIpLHQ9ITB9ZnVuY3Rpb24gZSgpe3ZhciBhO2E9cC5sZW5ndGglMiE9MCxhJiYhcyYmKHk9cC5zaGlmdCgpK24pLHErPXAubGVuZ3RoPj4xLHAubGVuZ3RoPTAscz0hMH1mdW5jdGlvbiBmKGMpe2Zvcih2YXIgbSxyLHcseCx6LEEsQixDLEQsRSxGLEcsSD0wO0g8Yy5sZW5ndGg7KXt2YXIgST1jW0hdO3N3aXRjaChIKz0xLEkpe2Nhc2UgMTpjYXNlIDM6ZSgpO2JyZWFrO2Nhc2UgNDpwLmxlbmd0aD4xJiYhcyYmKHk9cC5zaGlmdCgpK24scz0hMCksdis9cC5wb3AoKSxkKHUsdik7YnJlYWs7Y2FzZSA1OmZvcig7cC5sZW5ndGg+MDspdSs9cC5zaGlmdCgpLHYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2JyZWFrO2Nhc2UgNjpmb3IoO3AubGVuZ3RoPjAmJih1Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KSwwIT09cC5sZW5ndGgpOyl2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTticmVhaztjYXNlIDc6Zm9yKDtwLmxlbmd0aD4wJiYodis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdiksMCE9PXAubGVuZ3RoKTspdSs9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7YnJlYWs7Y2FzZSA4OmZvcig7cC5sZW5ndGg+MDspZz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxcbnU9aStwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMTA6ej1wLnBvcCgpK2wsQT1rW3pdLEEmJmYoQSk7YnJlYWs7Y2FzZSAxMTpyZXR1cm47Y2FzZSAxMjpzd2l0Y2goST1jW0hdLEgrPTEsSSl7Y2FzZSAzNTpnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLEI9aStwLnNoaWZ0KCksQz1qK3Auc2hpZnQoKSxEPUIrcC5zaGlmdCgpLEU9QytwLnNoaWZ0KCksRj1EK3Auc2hpZnQoKSxHPUUrcC5zaGlmdCgpLHU9RitwLnNoaWZ0KCksdj1HK3Auc2hpZnQoKSxwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosQixDKSxvLmN1cnZlVG8oRCxFLEYsRyx1LHYpO2JyZWFrO2Nhc2UgMzQ6Zz11K3Auc2hpZnQoKSxoPXYsaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLEI9aStwLnNoaWZ0KCksQz1qLEQ9QitwLnNoaWZ0KCksRT1qLEY9RCtwLnNoaWZ0KCksRz12LHU9RitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosQixDKSxvLmN1cnZlVG8oRCxFLEYsRyx1LHYpO2JyZWFrO2Nhc2UgMzY6Zz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxCPWkrcC5zaGlmdCgpLEM9aixEPUIrcC5zaGlmdCgpLEU9aixGPUQrcC5zaGlmdCgpLEc9RStwLnNoaWZ0KCksdT1GK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaixCLEMpLG8uY3VydmVUbyhELEUsRixHLHUsdik7YnJlYWs7Y2FzZSAzNzpnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLEI9aStwLnNoaWZ0KCksQz1qK3Auc2hpZnQoKSxEPUIrcC5zaGlmdCgpLEU9QytwLnNoaWZ0KCksRj1EK3Auc2hpZnQoKSxHPUUrcC5zaGlmdCgpLE1hdGguYWJzKEYtdSk+TWF0aC5hYnMoRy12KT91PUYrcC5zaGlmdCgpOnY9RytwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosQixDKSxvLmN1cnZlVG8oRCxFLEYsRyx1LHYpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5sb2coXCJHbHlwaCBcIitiLmluZGV4K1wiOiB1bmtub3duIG9wZXJhdG9yIDEyMDBcIitJKSxwLmxlbmd0aD0wfWJyZWFrO2Nhc2UgMTQ6cC5sZW5ndGg+MCYmIXMmJih5PXAuc2hpZnQoKStuLHM9ITApLHQmJihvLmNsb3NlUGF0aCgpLHQ9ITEpO2JyZWFrO2Nhc2UgMTg6ZSgpO2JyZWFrO2Nhc2UgMTk6Y2FzZSAyMDplKCksSCs9cSs3Pj4zO2JyZWFrO2Nhc2UgMjE6cC5sZW5ndGg+MiYmIXMmJih5PXAuc2hpZnQoKStuLHM9ITApLHYrPXAucG9wKCksdSs9cC5wb3AoKSxkKHUsdik7YnJlYWs7Y2FzZSAyMjpwLmxlbmd0aD4xJiYhcyYmKHk9cC5zaGlmdCgpK24scz0hMCksdSs9cC5wb3AoKSxkKHUsdik7YnJlYWs7Y2FzZSAyMzplKCk7YnJlYWs7Y2FzZSAyNDpmb3IoO3AubGVuZ3RoPjI7KWc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7dSs9cC5zaGlmdCgpLHYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2JyZWFrO2Nhc2UgMjU6Zm9yKDtwLmxlbmd0aD42Oyl1Kz1wLnNoaWZ0KCksdis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7Zz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztjYXNlIDI2OmZvcihwLmxlbmd0aCUyJiYodSs9cC5zaGlmdCgpKTtwLmxlbmd0aD4wOylnPXUsaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pLHY9aitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztjYXNlIDI3OmZvcihwLmxlbmd0aCUyJiYodis9cC5zaGlmdCgpKTtwLmxlbmd0aD4wOylnPXUrcC5zaGlmdCgpLGg9dixpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWosby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztjYXNlIDI4Om09Y1tIXSxyPWNbSCsxXSxwLnB1c2goKG08PDI0fHI8PDE2KT4+MTYpLEgrPTI7YnJlYWs7Y2FzZSAyOTp6PXAucG9wKCkrYS5nc3VicnNCaWFzLEE9YS5nc3VicnNbel0sQSYmZihBKTticmVhaztjYXNlIDMwOmZvcig7cC5sZW5ndGg+MCYmKGc9dSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aisoMT09PXAubGVuZ3RoP3Auc2hpZnQoKTowKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpLDAhPT1wLmxlbmd0aCk7KWc9dStwLnNoaWZ0KCksaD12LGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLHU9aSsoMT09PXAubGVuZ3RoP3Auc2hpZnQoKTowKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMzE6Zm9yKDtwLmxlbmd0aD4wJiYoZz11K3Auc2hpZnQoKSxoPXYsaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksdT1pKygxPT09cC5sZW5ndGg/cC5zaGlmdCgpOjApLG8uY3VydmVUbyhnLGgsaSxqLHUsdiksMCE9PXAubGVuZ3RoKTspZz11LGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qKygxPT09cC5sZW5ndGg/cC5zaGlmdCgpOjApLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7ZGVmYXVsdDpJPDMyP2NvbnNvbGUubG9nKFwiR2x5cGggXCIrYi5pbmRleCtcIjogdW5rbm93biBvcGVyYXRvciBcIitJKTpJPDI0Nz9wLnB1c2goSS0xMzkpOkk8MjUxPyhtPWNbSF0sSCs9MSxwLnB1c2goMjU2KihJLTI0NykrbSsxMDgpKTpJPDI1NT8obT1jW0hdLEgrPTEscC5wdXNoKDI1NiotKEktMjUxKS1tLTEwOCkpOihtPWNbSF0scj1jW0grMV0sdz1jW0grMl0seD1jW0grM10sSCs9NCxwLnB1c2goKG08PDI0fHI8PDE2fHc8PDh8eCkvNjU1MzYpKX19fXZhciBnLGgsaSxqLGssbCxtLG4sbz1uZXcgcixwPVtdLHE9MCxzPSExLHQ9ITEsdT0wLHY9MDtpZihhLmlzQ0lERm9udCl7dmFyIHc9YS50YWJsZXMuY2ZmLnRvcERpY3QuX2ZkU2VsZWN0W2IuaW5kZXhdLHg9YS50YWJsZXMuY2ZmLnRvcERpY3QuX2ZkQXJyYXlbd107az14Ll9zdWJycyxsPXguX3N1YnJzQmlhcyxtPXguX2RlZmF1bHRXaWR0aFgsbj14Ll9ub21pbmFsV2lkdGhYfWVsc2Ugaz1hLnRhYmxlcy5jZmYudG9wRGljdC5fc3VicnMsbD1hLnRhYmxlcy5jZmYudG9wRGljdC5fc3VicnNCaWFzLG09YS50YWJsZXMuY2ZmLnRvcERpY3QuX2RlZmF1bHRXaWR0aFgsbj1hLnRhYmxlcy5jZmYudG9wRGljdC5fbm9taW5hbFdpZHRoWDt2YXIgeT1tO3JldHVybiBmKGMpLGIuYWR2YW5jZVdpZHRoPXksb31mdW5jdGlvbiB5YShhLGIsYyxkKXt2YXIgZSxmPVtdLGc9bmV3IExlLlBhcnNlcihhLGIpLGg9Zy5wYXJzZUNhcmQ4KCk7aWYoMD09PWgpZm9yKHZhciBpPTA7aTxjO2krKyl7aWYoKGU9Zy5wYXJzZUNhcmQ4KCkpPj1kKXRocm93IG5ldyBFcnJvcihcIkNGRiB0YWJsZSBDSUQgRm9udCBGRFNlbGVjdCBoYXMgYmFkIEZEIGluZGV4IHZhbHVlIFwiK2UrXCIgKEZEIGNvdW50IFwiK2QrXCIpXCIpO2YucHVzaChlKX1lbHNle2lmKDMhPT1oKXRocm93IG5ldyBFcnJvcihcIkNGRiBUYWJsZSBDSUQgRm9udCBGRFNlbGVjdCB0YWJsZSBoYXMgdW5zdXBwb3J0ZWQgZm9ybWF0IFwiK2gpO3ZhciBqPWcucGFyc2VDYXJkMTYoKSxrPWcucGFyc2VDYXJkMTYoKTtpZigwIT09ayl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgVGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgZm9ybWF0IDMgcmFuZ2UgaGFzIGJhZCBpbml0aWFsIEdJRCBcIitrKTtmb3IodmFyIGwsbT0wO208ajttKyspe2lmKGU9Zy5wYXJzZUNhcmQ4KCksbD1nLnBhcnNlQ2FyZDE2KCksZT49ZCl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgdGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgaGFzIGJhZCBGRCBpbmRleCB2YWx1ZSBcIitlK1wiIChGRCBjb3VudCBcIitkK1wiKVwiKTtpZihsPmMpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIFRhYmxlIENJRCBGb250IEZEU2VsZWN0IGZvcm1hdCAzIHJhbmdlIGhhcyBiYWQgR0lEIFwiK2wpO2Zvcig7azxsO2srKylmLnB1c2goZSk7az1sfWlmKGwhPT1jKXRocm93IG5ldyBFcnJvcihcIkNGRiBUYWJsZSBDSUQgRm9udCBGRFNlbGVjdCBmb3JtYXQgMyByYW5nZSBoYXMgYmFkIGZpbmFsIEdJRCBcIitsKX1yZXR1cm4gZn1mdW5jdGlvbiB6YShhLGIsYyl7Yy50YWJsZXMuY2ZmPXt9O3ZhciBkPXJhKGEsYiksZT1rYShhLGQuZW5kT2Zmc2V0LExlLmJ5dGVzVG9TdHJpbmcpLGY9a2EoYSxlLmVuZE9mZnNldCksZz1rYShhLGYuZW5kT2Zmc2V0LExlLmJ5dGVzVG9TdHJpbmcpLGg9a2EoYSxnLmVuZE9mZnNldCk7Yy5nc3VicnM9aC5vYmplY3RzLGMuZ3N1YnJzQmlhcz1qYShjLmdzdWJycyk7dmFyIGk9dWEoYSxiLGYub2JqZWN0cyxnLm9iamVjdHMpO2lmKDEhPT1pLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgdGFibGUgaGFzIHRvbyBtYW55IGZvbnRzIGluICdGb250U2V0JyAtIGNvdW50IG9mIGZvbnRzIE5hbWVJbmRleC5sZW5ndGggPSBcIitpLmxlbmd0aCk7dmFyIGo9aVswXTtpZihjLnRhYmxlcy5jZmYudG9wRGljdD1qLGouX3ByaXZhdGVEaWN0JiYoYy5kZWZhdWx0V2lkdGhYPWouX3ByaXZhdGVEaWN0LmRlZmF1bHRXaWR0aFgsYy5ub21pbmFsV2lkdGhYPWouX3ByaXZhdGVEaWN0Lm5vbWluYWxXaWR0aFgpLHZvaWQgMCE9PWoucm9zWzBdJiZ2b2lkIDAhPT1qLnJvc1sxXSYmKGMuaXNDSURGb250PSEwKSxjLmlzQ0lERm9udCl7dmFyIGs9ai5mZEFycmF5LGw9ai5mZFNlbGVjdDtpZigwPT09a3x8MD09PWwpdGhyb3cgbmV3IEVycm9yKFwiRm9udCBpcyBtYXJrZWQgYXMgYSBDSUQgZm9udCwgYnV0IEZEQXJyYXkgYW5kL29yIEZEU2VsZWN0IGluZm9ybWF0aW9uIGlzIG1pc3NpbmdcIik7ays9Yjt2YXIgbT1rYShhLGspLG49dWEoYSxiLG0ub2JqZWN0cyxnLm9iamVjdHMpO2ouX2ZkQXJyYXk9bixsKz1iLGouX2ZkU2VsZWN0PXlhKGEsbCxjLm51bUdseXBocyxuLmxlbmd0aCl9dmFyIG89YitqLnByaXZhdGVbMV0scD10YShhLG8sai5wcml2YXRlWzBdLGcub2JqZWN0cyk7aWYoYy5kZWZhdWx0V2lkdGhYPXAuZGVmYXVsdFdpZHRoWCxjLm5vbWluYWxXaWR0aFg9cC5ub21pbmFsV2lkdGhYLDAhPT1wLnN1YnJzKXt2YXIgcT1vK3Auc3VicnMscj1rYShhLHEpO2Muc3VicnM9ci5vYmplY3RzLGMuc3VicnNCaWFzPWphKGMuc3VicnMpfWVsc2UgYy5zdWJycz1bXSxjLnN1YnJzQmlhcz0wO3ZhciBzPWthKGEsYitqLmNoYXJTdHJpbmdzKTtjLm5HbHlwaHM9cy5vYmplY3RzLmxlbmd0aDt2YXIgdD12YShhLGIrai5jaGFyc2V0LGMubkdseXBocyxnLm9iamVjdHMpOzA9PT1qLmVuY29kaW5nP2MuY2ZmRW5jb2Rpbmc9bmV3IFooT2UsdCk6MT09PWouZW5jb2Rpbmc/Yy5jZmZFbmNvZGluZz1uZXcgWihQZSx0KTpjLmNmZkVuY29kaW5nPXdhKGEsYitqLmVuY29kaW5nLHQpLGMuZW5jb2Rpbmc9Yy5lbmNvZGluZ3x8Yy5jZmZFbmNvZGluZyxjLmdseXBocz1uZXcgU2UuR2x5cGhTZXQoYyk7Zm9yKHZhciB1PTA7dTxjLm5HbHlwaHM7dSs9MSl7dmFyIHY9cy5vYmplY3RzW3VdO2MuZ2x5cGhzLnB1c2godSxTZS5jZmZHbHlwaExvYWRlcihjLHUseGEsdikpfX1mdW5jdGlvbiBBYShhLGIpe3ZhciBjLGQ9TmUuaW5kZXhPZihhKTtyZXR1cm4gZD49MCYmKGM9ZCksZD1iLmluZGV4T2YoYSksZD49MD9jPWQrTmUubGVuZ3RoOihjPU5lLmxlbmd0aCtiLmxlbmd0aCxiLnB1c2goYSkpLGN9ZnVuY3Rpb24gQmEoKXtyZXR1cm4gbmV3IEllLlJlY29yZChcIkhlYWRlclwiLFt7bmFtZTpcIm1ham9yXCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6MX0se25hbWU6XCJtaW5vclwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjB9LHtuYW1lOlwiaGRyU2l6ZVwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjR9LHtuYW1lOlwibWFqb3JcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZToxfV0pfWZ1bmN0aW9uIENhKGEpe3ZhciBiPW5ldyBJZS5SZWNvcmQoXCJOYW1lIElOREVYXCIsW3tuYW1lOlwibmFtZXNcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKTtiLm5hbWVzPVtdO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7Yys9MSliLm5hbWVzLnB1c2goe25hbWU6XCJuYW1lX1wiK2MsdHlwZTpcIk5BTUVcIix2YWx1ZTphW2NdfSk7cmV0dXJuIGJ9ZnVuY3Rpb24gRGEoYSxiLGMpe2Zvcih2YXIgZD17fSxlPTA7ZTxhLmxlbmd0aDtlKz0xKXt2YXIgZj1hW2VdLGc9YltmLm5hbWVdO3ZvaWQgMD09PWd8fGlhKGcsZi52YWx1ZSl8fChcIlNJRFwiPT09Zi50eXBlJiYoZz1BYShnLGMpKSxkW2Yub3BdPXtuYW1lOmYubmFtZSx0eXBlOmYudHlwZSx2YWx1ZTpnfSl9cmV0dXJuIGR9ZnVuY3Rpb24gRWEoYSxiKXt2YXIgYz1uZXcgSWUuUmVjb3JkKFwiVG9wIERJQ1RcIixbe25hbWU6XCJkaWN0XCIsdHlwZTpcIkRJQ1RcIix2YWx1ZTp7fX1dKTtyZXR1cm4gYy5kaWN0PURhKFRlLGEsYiksY31mdW5jdGlvbiBGYShhKXt2YXIgYj1uZXcgSWUuUmVjb3JkKFwiVG9wIERJQ1QgSU5ERVhcIixbe25hbWU6XCJ0b3BEaWN0c1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pO3JldHVybiBiLnRvcERpY3RzPVt7bmFtZTpcInRvcERpY3RfMFwiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOmF9XSxifWZ1bmN0aW9uIEdhKGEpe3ZhciBiPW5ldyBJZS5SZWNvcmQoXCJTdHJpbmcgSU5ERVhcIixbe25hbWU6XCJzdHJpbmdzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSk7Yi5zdHJpbmdzPVtdO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7Yys9MSliLnN0cmluZ3MucHVzaCh7bmFtZTpcInN0cmluZ19cIitjLHR5cGU6XCJTVFJJTkdcIix2YWx1ZTphW2NdfSk7cmV0dXJuIGJ9ZnVuY3Rpb24gSGEoKXtyZXR1cm4gbmV3IEllLlJlY29yZChcIkdsb2JhbCBTdWJyIElOREVYXCIsW3tuYW1lOlwic3VicnNcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKX1mdW5jdGlvbiBJYShhLGIpe2Zvcih2YXIgYz1uZXcgSWUuUmVjb3JkKFwiQ2hhcnNldHNcIixbe25hbWU6XCJmb3JtYXRcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZTowfV0pLGQ9MDtkPGEubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF0sZj1BYShlLGIpO2MuZmllbGRzLnB1c2goe25hbWU6XCJnbHlwaF9cIitkLHR5cGU6XCJTSURcIix2YWx1ZTpmfSl9cmV0dXJuIGN9ZnVuY3Rpb24gSmEoYSl7dmFyIGI9W10sYz1hLnBhdGg7Yi5wdXNoKHtuYW1lOlwid2lkdGhcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6YS5hZHZhbmNlV2lkdGh9KTtmb3IodmFyIGQ9MCxlPTAsZj0wO2Y8Yy5jb21tYW5kcy5sZW5ndGg7Zis9MSl7dmFyIGc9dm9pZCAwLGg9dm9pZCAwLGk9Yy5jb21tYW5kc1tmXTtpZihcIlFcIj09PWkudHlwZSl7dmFyIGo9MS8zLGs9Mi8zO2k9e3R5cGU6XCJDXCIseDppLngseTppLnkseDE6aipkK2sqaS54MSx5MTpqKmUrayppLnkxLHgyOmoqaS54K2sqaS54MSx5MjpqKmkueStrKmkueTF9fWlmKFwiTVwiPT09aS50eXBlKWc9TWF0aC5yb3VuZChpLngtZCksaD1NYXRoLnJvdW5kKGkueS1lKSxiLnB1c2goe25hbWU6XCJkeFwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpnfSksYi5wdXNoKHtuYW1lOlwiZHlcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6aH0pLGIucHVzaCh7bmFtZTpcInJtb3ZldG9cIix0eXBlOlwiT1BcIix2YWx1ZToyMX0pLGQ9TWF0aC5yb3VuZChpLngpLGU9TWF0aC5yb3VuZChpLnkpO2Vsc2UgaWYoXCJMXCI9PT1pLnR5cGUpZz1NYXRoLnJvdW5kKGkueC1kKSxoPU1hdGgucm91bmQoaS55LWUpLGIucHVzaCh7bmFtZTpcImR4XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmd9KSxiLnB1c2goe25hbWU6XCJkeVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpofSksYi5wdXNoKHtuYW1lOlwicmxpbmV0b1wiLHR5cGU6XCJPUFwiLHZhbHVlOjV9KSxkPU1hdGgucm91bmQoaS54KSxlPU1hdGgucm91bmQoaS55KTtlbHNlIGlmKFwiQ1wiPT09aS50eXBlKXt2YXIgbD1NYXRoLnJvdW5kKGkueDEtZCksbT1NYXRoLnJvdW5kKGkueTEtZSksbj1NYXRoLnJvdW5kKGkueDItaS54MSksbz1NYXRoLnJvdW5kKGkueTItaS55MSk7Zz1NYXRoLnJvdW5kKGkueC1pLngyKSxoPU1hdGgucm91bmQoaS55LWkueTIpLGIucHVzaCh7bmFtZTpcImR4MVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpsfSksYi5wdXNoKHtuYW1lOlwiZHkxXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOm19KSxiLnB1c2goe25hbWU6XCJkeDJcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6bn0pLGIucHVzaCh7bmFtZTpcImR5MlwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpvfSksYi5wdXNoKHtuYW1lOlwiZHhcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6Z30pLGIucHVzaCh7bmFtZTpcImR5XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmh9KSxiLnB1c2goe25hbWU6XCJycmN1cnZldG9cIix0eXBlOlwiT1BcIix2YWx1ZTo4fSksZD1NYXRoLnJvdW5kKGkueCksZT1NYXRoLnJvdW5kKGkueSl9fXJldHVybiBiLnB1c2goe25hbWU6XCJlbmRjaGFyXCIsdHlwZTpcIk9QXCIsdmFsdWU6MTR9KSxifWZ1bmN0aW9uIEthKGEpe2Zvcih2YXIgYj1uZXcgSWUuUmVjb3JkKFwiQ2hhclN0cmluZ3MgSU5ERVhcIixbe25hbWU6XCJjaGFyU3RyaW5nc1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pLGM9MDtjPGEubGVuZ3RoO2MrPTEpe3ZhciBkPWEuZ2V0KGMpLGU9SmEoZCk7Yi5jaGFyU3RyaW5ncy5wdXNoKHtuYW1lOmQubmFtZSx0eXBlOlwiQ0hBUlNUUklOR1wiLHZhbHVlOmV9KX1yZXR1cm4gYn1mdW5jdGlvbiBMYShhLGIpe3ZhciBjPW5ldyBJZS5SZWNvcmQoXCJQcml2YXRlIERJQ1RcIixbe25hbWU6XCJkaWN0XCIsdHlwZTpcIkRJQ1RcIix2YWx1ZTp7fX1dKTtyZXR1cm4gYy5kaWN0PURhKFVlLGEsYiksY31mdW5jdGlvbiBNYShhLGIpe2Zvcih2YXIgYyxkPW5ldyBJZS5UYWJsZShcIkNGRiBcIixbe25hbWU6XCJoZWFkZXJcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwibmFtZUluZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcInRvcERpY3RJbmRleFwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJzdHJpbmdJbmRleFwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJnbG9iYWxTdWJySW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwiY2hhcnNldHNcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwiY2hhclN0cmluZ3NJbmRleFwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJwcml2YXRlRGljdFwiLHR5cGU6XCJSRUNPUkRcIn1dKSxlPTEvYi51bml0c1BlckVtLGY9e3ZlcnNpb246Yi52ZXJzaW9uLGZ1bGxOYW1lOmIuZnVsbE5hbWUsZmFtaWx5TmFtZTpiLmZhbWlseU5hbWUsd2VpZ2h0OmIud2VpZ2h0TmFtZSxmb250QkJveDpiLmZvbnRCQm94fHxbMCwwLDAsMF0sZm9udE1hdHJpeDpbZSwwLDAsZSwwLDBdLGNoYXJzZXQ6OTk5LGVuY29kaW5nOjAsY2hhclN0cmluZ3M6OTk5LHByaXZhdGU6WzAsOTk5XX0sZz17fSxoPVtdLGk9MTtpPGEubGVuZ3RoO2krPTEpYz1hLmdldChpKSxoLnB1c2goYy5uYW1lKTt2YXIgaj1bXTtkLmhlYWRlcj1CYSgpLGQubmFtZUluZGV4PUNhKFtiLnBvc3RTY3JpcHROYW1lXSk7dmFyIGs9RWEoZixqKTtkLnRvcERpY3RJbmRleD1GYShrKSxkLmdsb2JhbFN1YnJJbmRleD1IYSgpLGQuY2hhcnNldHM9SWEoaCxqKSxkLmNoYXJTdHJpbmdzSW5kZXg9S2EoYSksZC5wcml2YXRlRGljdD1MYShnLGopLGQuc3RyaW5nSW5kZXg9R2Eoaik7dmFyIGw9ZC5oZWFkZXIuc2l6ZU9mKCkrZC5uYW1lSW5kZXguc2l6ZU9mKCkrZC50b3BEaWN0SW5kZXguc2l6ZU9mKCkrZC5zdHJpbmdJbmRleC5zaXplT2YoKStkLmdsb2JhbFN1YnJJbmRleC5zaXplT2YoKTtyZXR1cm4gZi5jaGFyc2V0PWwsZi5lbmNvZGluZz0wLGYuY2hhclN0cmluZ3M9Zi5jaGFyc2V0K2QuY2hhcnNldHMuc2l6ZU9mKCksZi5wcml2YXRlWzFdPWYuY2hhclN0cmluZ3MrZC5jaGFyU3RyaW5nc0luZGV4LnNpemVPZigpLGs9RWEoZixqKSxkLnRvcERpY3RJbmRleD1GYShrKSxkfWZ1bmN0aW9uIE5hKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7cmV0dXJuIGMudmVyc2lvbj1kLnBhcnNlVmVyc2lvbigpLGMuZm9udFJldmlzaW9uPU1hdGgucm91bmQoMWUzKmQucGFyc2VGaXhlZCgpKS8xZTMsYy5jaGVja1N1bUFkanVzdG1lbnQ9ZC5wYXJzZVVMb25nKCksYy5tYWdpY051bWJlcj1kLnBhcnNlVUxvbmcoKSx4ZS5hcmd1bWVudCgxNTk0ODM0MTY1PT09Yy5tYWdpY051bWJlcixcIkZvbnQgaGVhZGVyIGhhcyB3cm9uZyBtYWdpYyBudW1iZXIuXCIpLGMuZmxhZ3M9ZC5wYXJzZVVTaG9ydCgpLGMudW5pdHNQZXJFbT1kLnBhcnNlVVNob3J0KCksYy5jcmVhdGVkPWQucGFyc2VMb25nRGF0ZVRpbWUoKSxjLm1vZGlmaWVkPWQucGFyc2VMb25nRGF0ZVRpbWUoKSxjLnhNaW49ZC5wYXJzZVNob3J0KCksYy55TWluPWQucGFyc2VTaG9ydCgpLGMueE1heD1kLnBhcnNlU2hvcnQoKSxjLnlNYXg9ZC5wYXJzZVNob3J0KCksYy5tYWNTdHlsZT1kLnBhcnNlVVNob3J0KCksYy5sb3dlc3RSZWNQUEVNPWQucGFyc2VVU2hvcnQoKSxjLmZvbnREaXJlY3Rpb25IaW50PWQucGFyc2VTaG9ydCgpLGMuaW5kZXhUb0xvY0Zvcm1hdD1kLnBhcnNlU2hvcnQoKSxjLmdseXBoRGF0YUZvcm1hdD1kLnBhcnNlU2hvcnQoKSxjfWZ1bmN0aW9uIE9hKGEpe3ZhciBiPU1hdGgucm91bmQoKG5ldyBEYXRlKS5nZXRUaW1lKCkvMWUzKSsyMDgyODQ0ODAwLGM9YjtyZXR1cm4gYS5jcmVhdGVkVGltZXN0YW1wJiYoYz1hLmNyZWF0ZWRUaW1lc3RhbXArMjA4Mjg0NDgwMCksbmV3IEllLlRhYmxlKFwiaGVhZFwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiRklYRURcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJmb250UmV2aXNpb25cIix0eXBlOlwiRklYRURcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJjaGVja1N1bUFkanVzdG1lbnRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1hZ2ljTnVtYmVyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MTU5NDgzNDE2NX0se25hbWU6XCJmbGFnc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVuaXRzUGVyRW1cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MWUzfSx7bmFtZTpcImNyZWF0ZWRcIix0eXBlOlwiTE9OR0RBVEVUSU1FXCIsdmFsdWU6Y30se25hbWU6XCJtb2RpZmllZFwiLHR5cGU6XCJMT05HREFURVRJTUVcIix2YWx1ZTpifSx7bmFtZTpcInhNaW5cIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInlNaW5cIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInhNYXhcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInlNYXhcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcIm1hY1N0eWxlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibG93ZXN0UmVjUFBFTVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImZvbnREaXJlY3Rpb25IaW50XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6Mn0se25hbWU6XCJpbmRleFRvTG9jRm9ybWF0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJnbHlwaERhdGFGb3JtYXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfV0sYSl9ZnVuY3Rpb24gUGEoYSxiKXt2YXIgYz17fSxkPW5ldyBMZS5QYXJzZXIoYSxiKTtyZXR1cm4gYy52ZXJzaW9uPWQucGFyc2VWZXJzaW9uKCksYy5hc2NlbmRlcj1kLnBhcnNlU2hvcnQoKSxjLmRlc2NlbmRlcj1kLnBhcnNlU2hvcnQoKSxjLmxpbmVHYXA9ZC5wYXJzZVNob3J0KCksYy5hZHZhbmNlV2lkdGhNYXg9ZC5wYXJzZVVTaG9ydCgpLGMubWluTGVmdFNpZGVCZWFyaW5nPWQucGFyc2VTaG9ydCgpLGMubWluUmlnaHRTaWRlQmVhcmluZz1kLnBhcnNlU2hvcnQoKSxjLnhNYXhFeHRlbnQ9ZC5wYXJzZVNob3J0KCksYy5jYXJldFNsb3BlUmlzZT1kLnBhcnNlU2hvcnQoKSxjLmNhcmV0U2xvcGVSdW49ZC5wYXJzZVNob3J0KCksYy5jYXJldE9mZnNldD1kLnBhcnNlU2hvcnQoKSxkLnJlbGF0aXZlT2Zmc2V0Kz04LGMubWV0cmljRGF0YUZvcm1hdD1kLnBhcnNlU2hvcnQoKSxjLm51bWJlck9mSE1ldHJpY3M9ZC5wYXJzZVVTaG9ydCgpLGN9ZnVuY3Rpb24gUWEoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcImhoZWFcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwiYXNjZW5kZXJcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImRlc2NlbmRlclwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwibGluZUdhcFwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwiYWR2YW5jZVdpZHRoTWF4XCIsdHlwZTpcIlVGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwibWluTGVmdFNpZGVCZWFyaW5nXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJtaW5SaWdodFNpZGVCZWFyaW5nXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJ4TWF4RXh0ZW50XCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJjYXJldFNsb3BlUmlzZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwiY2FyZXRTbG9wZVJ1blwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiY2FyZXRPZmZzZXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlc2VydmVkMVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVzZXJ2ZWQyXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXNlcnZlZDNcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlc2VydmVkNFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibWV0cmljRGF0YUZvcm1hdFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibnVtYmVyT2ZITWV0cmljc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfV0sYSl9ZnVuY3Rpb24gUmEoYSxiLGMsZCxlKXtmb3IodmFyIGYsZyxoPW5ldyBMZS5QYXJzZXIoYSxiKSxpPTA7aTxkO2krPTEpe2k8YyYmKGY9aC5wYXJzZVVTaG9ydCgpLGc9aC5wYXJzZVNob3J0KCkpO3ZhciBqPWUuZ2V0KGkpO2ouYWR2YW5jZVdpZHRoPWYsai5sZWZ0U2lkZUJlYXJpbmc9Z319ZnVuY3Rpb24gU2EoYSl7Zm9yKHZhciBiPW5ldyBJZS5UYWJsZShcImhtdHhcIixbXSksYz0wO2M8YS5sZW5ndGg7Yys9MSl7dmFyIGQ9YS5nZXQoYyksZT1kLmFkdmFuY2VXaWR0aHx8MCxmPWQubGVmdFNpZGVCZWFyaW5nfHwwO2IuZmllbGRzLnB1c2goe25hbWU6XCJhZHZhbmNlV2lkdGhfXCIrYyx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZX0pLGIuZmllbGRzLnB1c2goe25hbWU6XCJsZWZ0U2lkZUJlYXJpbmdfXCIrYyx0eXBlOlwiU0hPUlRcIix2YWx1ZTpmfSl9cmV0dXJuIGJ9ZnVuY3Rpb24gVGEoYSl7Zm9yKHZhciBiPW5ldyBJZS5UYWJsZShcImx0YWdcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MX0se25hbWU6XCJmbGFnc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibnVtVGFnc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmEubGVuZ3RofV0pLGM9XCJcIixkPTEyKzQqYS5sZW5ndGgsZT0wO2U8YS5sZW5ndGg7KytlKXt2YXIgZj1jLmluZGV4T2YoYVtlXSk7ZjwwJiYoZj1jLmxlbmd0aCxjKz1hW2VdKSxiLmZpZWxkcy5wdXNoKHtuYW1lOlwib2Zmc2V0IFwiK2UsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmQrZn0pLGIuZmllbGRzLnB1c2goe25hbWU6XCJsZW5ndGggXCIrZSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YVtlXS5sZW5ndGh9KX1yZXR1cm4gYi5maWVsZHMucHVzaCh7bmFtZTpcInN0cmluZ1Bvb2xcIix0eXBlOlwiQ0hBUkFSUkFZXCIsdmFsdWU6Y30pLGJ9ZnVuY3Rpb24gVWEoYSxiKXt2YXIgYz1uZXcgTGUuUGFyc2VyKGEsYiksZD1jLnBhcnNlVUxvbmcoKTt4ZS5hcmd1bWVudCgxPT09ZCxcIlVuc3VwcG9ydGVkIGx0YWcgdGFibGUgdmVyc2lvbi5cIiksYy5za2lwKFwidUxvbmdcIiwxKTtmb3IodmFyIGU9Yy5wYXJzZVVMb25nKCksZj1bXSxnPTA7ZzxlO2crKyl7Zm9yKHZhciBoPVwiXCIsaT1iK2MucGFyc2VVU2hvcnQoKSxqPWMucGFyc2VVU2hvcnQoKSxrPWk7azxpK2o7KytrKWgrPVN0cmluZy5mcm9tQ2hhckNvZGUoYS5nZXRJbnQ4KGspKTtmLnB1c2goaCl9cmV0dXJuIGZ9ZnVuY3Rpb24gVmEoYSxiKXt2YXIgYz17fSxkPW5ldyBMZS5QYXJzZXIoYSxiKTtyZXR1cm4gYy52ZXJzaW9uPWQucGFyc2VWZXJzaW9uKCksYy5udW1HbHlwaHM9ZC5wYXJzZVVTaG9ydCgpLDE9PT1jLnZlcnNpb24mJihjLm1heFBvaW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb250b3Vycz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb21wb3NpdGVQb2ludHM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29tcG9zaXRlQ29udG91cnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Wm9uZXM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4VHdpbGlnaHRQb2ludHM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4U3RvcmFnZT1kLnBhcnNlVVNob3J0KCksYy5tYXhGdW5jdGlvbkRlZnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4SW5zdHJ1Y3Rpb25EZWZzPWQucGFyc2VVU2hvcnQoKSxjLm1heFN0YWNrRWxlbWVudHM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbXBvbmVudEVsZW1lbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbXBvbmVudERlcHRoPWQucGFyc2VVU2hvcnQoKSksY31mdW5jdGlvbiBXYShhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwibWF4cFwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiRklYRURcIix2YWx1ZToyMDQ4MH0se25hbWU6XCJudW1HbHlwaHNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YX1dKX1mdW5jdGlvbiBYYShhLGIsYyl7c3dpdGNoKGEpe2Nhc2UgMDppZig2NTUzNT09PWIpcmV0dXJuXCJ1bmRcIjtpZihjKXJldHVybiBjW2JdO2JyZWFrO2Nhc2UgMTpyZXR1cm4gYWZbYl07Y2FzZSAzOnJldHVybiBjZltiXX19ZnVuY3Rpb24gWWEoYSxiLGMpe3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIGRmO2Nhc2UgMTpyZXR1cm4gZmZbY118fGVmW2JdO2Nhc2UgMzppZigxPT09Ynx8MTA9PT1iKXJldHVybiBkZn19ZnVuY3Rpb24gWmEoYSxiLGMpe2Zvcih2YXIgZD17fSxlPW5ldyBMZS5QYXJzZXIoYSxiKSxmPWUucGFyc2VVU2hvcnQoKSxnPWUucGFyc2VVU2hvcnQoKSxoPWUub2Zmc2V0K2UucGFyc2VVU2hvcnQoKSxpPTA7aTxnO2krKyl7dmFyIGo9ZS5wYXJzZVVTaG9ydCgpLGs9ZS5wYXJzZVVTaG9ydCgpLGw9ZS5wYXJzZVVTaG9ydCgpLG09ZS5wYXJzZVVTaG9ydCgpLG49X2VbbV18fG0sbz1lLnBhcnNlVVNob3J0KCkscD1lLnBhcnNlVVNob3J0KCkscT1YYShqLGwsYykscj1ZYShqLGssbCk7aWYodm9pZCAwIT09ciYmdm9pZCAwIT09cSl7dmFyIHM9dm9pZCAwO2lmKHM9cj09PWRmP0FlLlVURjE2KGEsaCtwLG8pOkFlLk1BQ1NUUklORyhhLGgrcCxvLHIpKXt2YXIgdD1kW25dO3ZvaWQgMD09PXQmJih0PWRbbl09e30pLHRbcV09c319fXJldHVybiAxPT09ZiYmZS5wYXJzZVVTaG9ydCgpLGR9ZnVuY3Rpb24gJGEoYSl7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYlthW2NdXT1wYXJzZUludChjKTtyZXR1cm4gYn1mdW5jdGlvbiBfYShhLGIsYyxkLGUsZil7cmV0dXJuIG5ldyBJZS5SZWNvcmQoXCJOYW1lUmVjb3JkXCIsW3tuYW1lOlwicGxhdGZvcm1JRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphfSx7bmFtZTpcImVuY29kaW5nSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Yn0se25hbWU6XCJsYW5ndWFnZUlEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmN9LHtuYW1lOlwibmFtZUlEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmR9LHtuYW1lOlwibGVuZ3RoXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmV9LHtuYW1lOlwib2Zmc2V0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmZ9XSl9ZnVuY3Rpb24gYWIoYSxiKXt2YXIgYz1hLmxlbmd0aCxkPWIubGVuZ3RoLWMrMTthOmZvcih2YXIgZT0wO2U8ZDtlKyspZm9yKDtlPGQ7ZSsrKXtmb3IodmFyIGY9MDtmPGM7ZisrKWlmKGJbZStmXSE9PWFbZl0pY29udGludWUgYTtyZXR1cm4gZX1yZXR1cm4tMX1mdW5jdGlvbiBiYihhLGIpe3ZhciBjPWFiKGEsYik7aWYoYzwwKXtjPWIubGVuZ3RoO2Zvcih2YXIgZD0wLGU9YS5sZW5ndGg7ZDxlOysrZCliLnB1c2goYVtkXSl9cmV0dXJuIGN9ZnVuY3Rpb24gY2IoYSxiKXt2YXIgYyxkPVtdLGU9e30sZj0kYShfZSk7Zm9yKHZhciBnIGluIGEpe3ZhciBoPWZbZ107aWYodm9pZCAwPT09aCYmKGg9ZyksYz1wYXJzZUludChoKSxpc05hTihjKSl0aHJvdyBuZXcgRXJyb3IoJ05hbWUgdGFibGUgZW50cnkgXCInK2crJ1wiIGRvZXMgbm90IGV4aXN0LCBzZWUgbmFtZVRhYmxlTmFtZXMgZm9yIGNvbXBsZXRlIGxpc3QuJyk7ZVtjXT1hW2ddLGQucHVzaChjKX1mb3IodmFyIGk9JGEoYWYpLGo9JGEoY2YpLGs9W10sbD1bXSxtPTA7bTxkLmxlbmd0aDttKyspe2M9ZFttXTt2YXIgbj1lW2NdO2Zvcih2YXIgbyBpbiBuKXt2YXIgcD1uW29dLHE9MSxyPWlbb10scz1iZltyXSx0PVlhKHEscyxyKSx1PUJlLk1BQ1NUUklORyhwLHQpO3ZvaWQgMD09PXUmJihxPTAscj1iLmluZGV4T2YobykscjwwJiYocj1iLmxlbmd0aCxiLnB1c2gobykpLHM9NCx1PUJlLlVURjE2KHApKTt2YXIgdj1iYih1LGwpO2sucHVzaChfYShxLHMscixjLHUubGVuZ3RoLHYpKTt2YXIgdz1qW29dO2lmKHZvaWQgMCE9PXcpe3ZhciB4PUJlLlVURjE2KHApLHk9YmIoeCxsKTtrLnB1c2goX2EoMywxLHcsYyx4Lmxlbmd0aCx5KSl9fX1rLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5wbGF0Zm9ybUlELWIucGxhdGZvcm1JRHx8YS5lbmNvZGluZ0lELWIuZW5jb2RpbmdJRHx8YS5sYW5ndWFnZUlELWIubGFuZ3VhZ2VJRHx8YS5uYW1lSUQtYi5uYW1lSUR9KTtmb3IodmFyIHo9bmV3IEllLlRhYmxlKFwibmFtZVwiLFt7bmFtZTpcImZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImNvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmsubGVuZ3RofSx7bmFtZTpcInN0cmluZ09mZnNldFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTo2KzEyKmsubGVuZ3RofV0pLEE9MDtBPGsubGVuZ3RoO0ErKyl6LmZpZWxkcy5wdXNoKHtuYW1lOlwicmVjb3JkX1wiK0EsdHlwZTpcIlJFQ09SRFwiLHZhbHVlOmtbQV19KTtyZXR1cm4gei5maWVsZHMucHVzaCh7bmFtZTpcInN0cmluZ3NcIix0eXBlOlwiTElURVJBTFwiLHZhbHVlOmx9KSx6fWZ1bmN0aW9uIGRiKGEpe2Zvcih2YXIgYj0wO2I8aGYubGVuZ3RoO2IrPTEpe3ZhciBjPWhmW2JdO2lmKGE+PWMuYmVnaW4mJmE8Yy5lbmQpcmV0dXJuIGJ9cmV0dXJuLTF9ZnVuY3Rpb24gZWIoYSxiKXt2YXIgYz17fSxkPW5ldyBMZS5QYXJzZXIoYSxiKTtjLnZlcnNpb249ZC5wYXJzZVVTaG9ydCgpLGMueEF2Z0NoYXJXaWR0aD1kLnBhcnNlU2hvcnQoKSxjLnVzV2VpZ2h0Q2xhc3M9ZC5wYXJzZVVTaG9ydCgpLGMudXNXaWR0aENsYXNzPWQucGFyc2VVU2hvcnQoKSxjLmZzVHlwZT1kLnBhcnNlVVNob3J0KCksYy55U3Vic2NyaXB0WFNpemU9ZC5wYXJzZVNob3J0KCksYy55U3Vic2NyaXB0WVNpemU9ZC5wYXJzZVNob3J0KCksYy55U3Vic2NyaXB0WE9mZnNldD1kLnBhcnNlU2hvcnQoKSxjLnlTdWJzY3JpcHRZT2Zmc2V0PWQucGFyc2VTaG9ydCgpLGMueVN1cGVyc2NyaXB0WFNpemU9ZC5wYXJzZVNob3J0KCksYy55U3VwZXJzY3JpcHRZU2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdXBlcnNjcmlwdFhPZmZzZXQ9ZC5wYXJzZVNob3J0KCksYy55U3VwZXJzY3JpcHRZT2Zmc2V0PWQucGFyc2VTaG9ydCgpLGMueVN0cmlrZW91dFNpemU9ZC5wYXJzZVNob3J0KCksYy55U3RyaWtlb3V0UG9zaXRpb249ZC5wYXJzZVNob3J0KCksYy5zRmFtaWx5Q2xhc3M9ZC5wYXJzZVNob3J0KCksYy5wYW5vc2U9W107Zm9yKHZhciBlPTA7ZTwxMDtlKyspYy5wYW5vc2VbZV09ZC5wYXJzZUJ5dGUoKTtyZXR1cm4gYy51bFVuaWNvZGVSYW5nZTE9ZC5wYXJzZVVMb25nKCksYy51bFVuaWNvZGVSYW5nZTI9ZC5wYXJzZVVMb25nKCksYy51bFVuaWNvZGVSYW5nZTM9ZC5wYXJzZVVMb25nKCksYy51bFVuaWNvZGVSYW5nZTQ9ZC5wYXJzZVVMb25nKCksYy5hY2hWZW5kSUQ9U3RyaW5nLmZyb21DaGFyQ29kZShkLnBhcnNlQnl0ZSgpLGQucGFyc2VCeXRlKCksZC5wYXJzZUJ5dGUoKSxkLnBhcnNlQnl0ZSgpKSxjLmZzU2VsZWN0aW9uPWQucGFyc2VVU2hvcnQoKSxjLnVzRmlyc3RDaGFySW5kZXg9ZC5wYXJzZVVTaG9ydCgpLGMudXNMYXN0Q2hhckluZGV4PWQucGFyc2VVU2hvcnQoKSxjLnNUeXBvQXNjZW5kZXI9ZC5wYXJzZVNob3J0KCksYy5zVHlwb0Rlc2NlbmRlcj1kLnBhcnNlU2hvcnQoKSxjLnNUeXBvTGluZUdhcD1kLnBhcnNlU2hvcnQoKSxjLnVzV2luQXNjZW50PWQucGFyc2VVU2hvcnQoKSxjLnVzV2luRGVzY2VudD1kLnBhcnNlVVNob3J0KCksYy52ZXJzaW9uPj0xJiYoYy51bENvZGVQYWdlUmFuZ2UxPWQucGFyc2VVTG9uZygpLGMudWxDb2RlUGFnZVJhbmdlMj1kLnBhcnNlVUxvbmcoKSksYy52ZXJzaW9uPj0yJiYoYy5zeEhlaWdodD1kLnBhcnNlU2hvcnQoKSxjLnNDYXBIZWlnaHQ9ZC5wYXJzZVNob3J0KCksYy51c0RlZmF1bHRDaGFyPWQucGFyc2VVU2hvcnQoKSxjLnVzQnJlYWtDaGFyPWQucGFyc2VVU2hvcnQoKSxjLnVzTWF4Q29udGVudD1kLnBhcnNlVVNob3J0KCkpLGN9ZnVuY3Rpb24gZmIoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcIk9TLzJcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjN9LHtuYW1lOlwieEF2Z0NoYXJXaWR0aFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNXZWlnaHRDbGFzc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzV2lkdGhDbGFzc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImZzVHlwZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInlTdWJzY3JpcHRYU2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjY1MH0se25hbWU6XCJ5U3Vic2NyaXB0WVNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo2OTl9LHtuYW1lOlwieVN1YnNjcmlwdFhPZmZzZXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInlTdWJzY3JpcHRZT2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MTQwfSx7bmFtZTpcInlTdXBlcnNjcmlwdFhTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6NjUwfSx7bmFtZTpcInlTdXBlcnNjcmlwdFlTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6Njk5fSx7bmFtZTpcInlTdXBlcnNjcmlwdFhPZmZzZXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInlTdXBlcnNjcmlwdFlPZmZzZXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo0Nzl9LHtuYW1lOlwieVN0cmlrZW91dFNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo0OX0se25hbWU6XCJ5U3RyaWtlb3V0UG9zaXRpb25cIix0eXBlOlwiU0hPUlRcIix2YWx1ZToyNTh9LHtuYW1lOlwic0ZhbWlseUNsYXNzXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJiRmFtaWx5VHlwZVwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiU2VyaWZTdHlsZVwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiV2VpZ2h0XCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJQcm9wb3J0aW9uXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJDb250cmFzdFwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiU3Ryb2tlVmFyaWF0aW9uXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJBcm1TdHlsZVwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiTGV0dGVyZm9ybVwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiTWlkbGluZVwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiWEhlaWdodFwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJ1bFVuaWNvZGVSYW5nZTFcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcInVsVW5pY29kZVJhbmdlMlwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwidWxVbmljb2RlUmFuZ2UzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJ1bFVuaWNvZGVSYW5nZTRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcImFjaFZlbmRJRFwiLHR5cGU6XCJDSEFSQVJSQVlcIix2YWx1ZTpcIlhYWFhcIn0se25hbWU6XCJmc1NlbGVjdGlvblwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzRmlyc3RDaGFySW5kZXhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c0xhc3RDaGFySW5kZXhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzVHlwb0FzY2VuZGVyXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzVHlwb0Rlc2NlbmRlclwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic1R5cG9MaW5lR2FwXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c1dpbkFzY2VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzV2luRGVzY2VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVsQ29kZVBhZ2VSYW5nZTFcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcInVsQ29kZVBhZ2VSYW5nZTJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcInN4SGVpZ2h0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzQ2FwSGVpZ2h0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c0RlZmF1bHRDaGFyXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNCcmVha0NoYXJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c01heENvbnRleHRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dLGEpfWZ1bmN0aW9uIGdiKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7c3dpdGNoKGMudmVyc2lvbj1kLnBhcnNlVmVyc2lvbigpLGMuaXRhbGljQW5nbGU9ZC5wYXJzZUZpeGVkKCksYy51bmRlcmxpbmVQb3NpdGlvbj1kLnBhcnNlU2hvcnQoKSxjLnVuZGVybGluZVRoaWNrbmVzcz1kLnBhcnNlU2hvcnQoKSxjLmlzRml4ZWRQaXRjaD1kLnBhcnNlVUxvbmcoKSxjLm1pbk1lbVR5cGU0Mj1kLnBhcnNlVUxvbmcoKSxjLm1heE1lbVR5cGU0Mj1kLnBhcnNlVUxvbmcoKSxjLm1pbk1lbVR5cGUxPWQucGFyc2VVTG9uZygpLGMubWF4TWVtVHlwZTE9ZC5wYXJzZVVMb25nKCksYy52ZXJzaW9uKXtjYXNlIDE6Yy5uYW1lcz1RZS5zbGljZSgpO2JyZWFrO2Nhc2UgMjpjLm51bWJlck9mR2x5cGhzPWQucGFyc2VVU2hvcnQoKSxjLmdseXBoTmFtZUluZGV4PW5ldyBBcnJheShjLm51bWJlck9mR2x5cGhzKTtmb3IodmFyIGU9MDtlPGMubnVtYmVyT2ZHbHlwaHM7ZSsrKWMuZ2x5cGhOYW1lSW5kZXhbZV09ZC5wYXJzZVVTaG9ydCgpO2MubmFtZXM9W107Zm9yKHZhciBmPTA7ZjxjLm51bWJlck9mR2x5cGhzO2YrKylpZihjLmdseXBoTmFtZUluZGV4W2ZdPj1RZS5sZW5ndGgpe3ZhciBnPWQucGFyc2VDaGFyKCk7Yy5uYW1lcy5wdXNoKGQucGFyc2VTdHJpbmcoZykpfWJyZWFrO2Nhc2UgMi41OmMubnVtYmVyT2ZHbHlwaHM9ZC5wYXJzZVVTaG9ydCgpLGMub2Zmc2V0PW5ldyBBcnJheShjLm51bWJlck9mR2x5cGhzKTtmb3IodmFyIGg9MDtoPGMubnVtYmVyT2ZHbHlwaHM7aCsrKWMub2Zmc2V0W2hdPWQucGFyc2VDaGFyKCl9cmV0dXJuIGN9ZnVuY3Rpb24gaGIoKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwicG9zdFwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiRklYRURcIix2YWx1ZToxOTY2MDh9LHtuYW1lOlwiaXRhbGljQW5nbGVcIix0eXBlOlwiRklYRURcIix2YWx1ZTowfSx7bmFtZTpcInVuZGVybGluZVBvc2l0aW9uXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJ1bmRlcmxpbmVUaGlja25lc3NcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImlzRml4ZWRQaXRjaFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWluTWVtVHlwZTQyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtYXhNZW1UeXBlNDJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1pbk1lbVR5cGUxXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtYXhNZW1UeXBlMVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9XSl9ZnVuY3Rpb24gaWIoYSxiKXtiPWJ8fDA7dmFyIGM9bmV3IFEoYSxiKSxkPWMucGFyc2VWZXJzaW9uKDEpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09ZHx8MS4xPT09ZCxcIlVuc3VwcG9ydGVkIEdTVUIgdGFibGUgdmVyc2lvbi5cIiksMT09PWQ/e3ZlcnNpb246ZCxzY3JpcHRzOmMucGFyc2VTY3JpcHRMaXN0KCksZmVhdHVyZXM6Yy5wYXJzZUZlYXR1cmVMaXN0KCksbG9va3VwczpjLnBhcnNlTG9va3VwTGlzdChsZil9Ont2ZXJzaW9uOmQsc2NyaXB0czpjLnBhcnNlU2NyaXB0TGlzdCgpLGZlYXR1cmVzOmMucGFyc2VGZWF0dXJlTGlzdCgpLGxvb2t1cHM6Yy5wYXJzZUxvb2t1cExpc3QobGYpLHZhcmlhdGlvbnM6Yy5wYXJzZUZlYXR1cmVWYXJpYXRpb25zTGlzdCgpfX1mdW5jdGlvbiBqYihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiR1NVQlwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJzY3JpcHRzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLlNjcmlwdExpc3QoYS5zY3JpcHRzKX0se25hbWU6XCJmZWF0dXJlc1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5GZWF0dXJlTGlzdChhLmZlYXR1cmVzKX0se25hbWU6XCJsb29rdXBzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkxvb2t1cExpc3QoYS5sb29rdXBzLG5mKX1dKX1mdW5jdGlvbiBrYihhLGIpe3ZhciBjPW5ldyBMZS5QYXJzZXIoYSxiKSxkPWMucGFyc2VVTG9uZygpO3hlLmFyZ3VtZW50KDE9PT1kLFwiVW5zdXBwb3J0ZWQgTUVUQSB0YWJsZSB2ZXJzaW9uLlwiKSxjLnBhcnNlVUxvbmcoKSxjLnBhcnNlVUxvbmcoKTtmb3IodmFyIGU9Yy5wYXJzZVVMb25nKCksZj17fSxnPTA7ZzxlO2crKyl7dmFyIGg9Yy5wYXJzZVRhZygpLGk9Yy5wYXJzZVVMb25nKCksaj1jLnBhcnNlVUxvbmcoKSxrPUFlLlVURjgoYSxiK2ksaik7ZltoXT1rfXJldHVybiBmfWZ1bmN0aW9uIGxiKGEpe3ZhciBiPU9iamVjdC5rZXlzKGEpLmxlbmd0aCxjPVwiXCIsZD0xNisxMipiLGU9bmV3IEllLlRhYmxlKFwibWV0YVwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZToxfSx7bmFtZTpcImZsYWdzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJvZmZzZXRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTpkfSx7bmFtZTpcIm51bVRhZ3NcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTpifV0pO2Zvcih2YXIgZiBpbiBhKXt2YXIgZz1jLmxlbmd0aDtjKz1hW2ZdLGUuZmllbGRzLnB1c2goe25hbWU6XCJ0YWcgXCIrZix0eXBlOlwiVEFHXCIsdmFsdWU6Zn0pLGUuZmllbGRzLnB1c2goe25hbWU6XCJvZmZzZXQgXCIrZix0eXBlOlwiVUxPTkdcIix2YWx1ZTpkK2d9KSxlLmZpZWxkcy5wdXNoKHtuYW1lOlwibGVuZ3RoIFwiK2YsdHlwZTpcIlVMT05HXCIsdmFsdWU6YVtmXS5sZW5ndGh9KX1yZXR1cm4gZS5maWVsZHMucHVzaCh7bmFtZTpcInN0cmluZ1Bvb2xcIix0eXBlOlwiQ0hBUkFSUkFZXCIsdmFsdWU6Y30pLGV9ZnVuY3Rpb24gbWIoYSl7cmV0dXJuIE1hdGgubG9nKGEpL01hdGgubG9nKDIpfDB9ZnVuY3Rpb24gbmIoYSl7Zm9yKDthLmxlbmd0aCU0IT0wOylhLnB1c2goMCk7Zm9yKHZhciBiPTAsYz0wO2M8YS5sZW5ndGg7Yys9NCliKz0oYVtjXTw8MjQpKyhhW2MrMV08PDE2KSsoYVtjKzJdPDw4KSthW2MrM107cmV0dXJuIGIlPU1hdGgucG93KDIsMzIpfWZ1bmN0aW9uIG9iKGEsYixjLGQpe3JldHVybiBuZXcgSWUuUmVjb3JkKFwiVGFibGUgUmVjb3JkXCIsW3tuYW1lOlwidGFnXCIsdHlwZTpcIlRBR1wiLHZhbHVlOnZvaWQgMCE9PWE/YTpcIlwifSx7bmFtZTpcImNoZWNrU3VtXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6dm9pZCAwIT09Yj9iOjB9LHtuYW1lOlwib2Zmc2V0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6dm9pZCAwIT09Yz9jOjB9LHtuYW1lOlwibGVuZ3RoXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6dm9pZCAwIT09ZD9kOjB9XSl9ZnVuY3Rpb24gcGIoYSl7dmFyIGI9bmV3IEllLlRhYmxlKFwic2ZudFwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVEFHXCIsdmFsdWU6XCJPVFRPXCJ9LHtuYW1lOlwibnVtVGFibGVzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic2VhcmNoUmFuZ2VcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJlbnRyeVNlbGVjdG9yXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmFuZ2VTaGlmdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfV0pO2IudGFibGVzPWEsYi5udW1UYWJsZXM9YS5sZW5ndGg7dmFyIGM9TWF0aC5wb3coMixtYihiLm51bVRhYmxlcykpO2Iuc2VhcmNoUmFuZ2U9MTYqYyxiLmVudHJ5U2VsZWN0b3I9bWIoYyksYi5yYW5nZVNoaWZ0PTE2KmIubnVtVGFibGVzLWIuc2VhcmNoUmFuZ2U7Zm9yKHZhciBkPVtdLGU9W10sZj1iLnNpemVPZigpK29iKCkuc2l6ZU9mKCkqYi5udW1UYWJsZXM7ZiU0IT0wOylmKz0xLGUucHVzaCh7bmFtZTpcInBhZGRpbmdcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9KTtmb3IodmFyIGc9MDtnPGEubGVuZ3RoO2crPTEpe3ZhciBoPWFbZ107eGUuYXJndW1lbnQoND09PWgudGFibGVOYW1lLmxlbmd0aCxcIlRhYmxlIG5hbWVcIitoLnRhYmxlTmFtZStcIiBpcyBpbnZhbGlkLlwiKTt2YXIgaT1oLnNpemVPZigpLGo9b2IoaC50YWJsZU5hbWUsbmIoaC5lbmNvZGUoKSksZixpKTtmb3IoZC5wdXNoKHtuYW1lOmoudGFnK1wiIFRhYmxlIFJlY29yZFwiLHR5cGU6XCJSRUNPUkRcIix2YWx1ZTpqfSksZS5wdXNoKHtuYW1lOmgudGFibGVOYW1lK1wiIHRhYmxlXCIsdHlwZTpcIlJFQ09SRFwiLHZhbHVlOmh9KSxmKz1pLHhlLmFyZ3VtZW50KCFpc05hTihmKSxcIlNvbWV0aGluZyB3ZW50IHdyb25nIGNhbGN1bGF0aW5nIHRoZSBvZmZzZXQuXCIpO2YlNCE9MDspZis9MSxlLnB1c2goe25hbWU6XCJwYWRkaW5nXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSl9cmV0dXJuIGQuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnZhbHVlLnRhZz5iLnZhbHVlLnRhZz8xOi0xfSksYi5maWVsZHM9Yi5maWVsZHMuY29uY2F0KGQpLGIuZmllbGRzPWIuZmllbGRzLmNvbmNhdChlKSxifWZ1bmN0aW9uIHFiKGEsYixjKXtmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrPTEpe3ZhciBlPWEuY2hhclRvR2x5cGhJbmRleChiW2RdKTtpZihlPjApe3JldHVybiBhLmdseXBocy5nZXQoZSkuZ2V0TWV0cmljcygpfX1yZXR1cm4gY31mdW5jdGlvbiByYihhKXtmb3IodmFyIGI9MCxjPTA7YzxhLmxlbmd0aDtjKz0xKWIrPWFbY107cmV0dXJuIGIvYS5sZW5ndGh9ZnVuY3Rpb24gc2IoYSl7Zm9yKHZhciBiLGM9W10sZD1bXSxlPVtdLGY9W10sZz1bXSxoPVtdLGk9W10saj0wLGs9MCxsPTAsbT0wLG49MCxvPTA7bzxhLmdseXBocy5sZW5ndGg7bys9MSl7dmFyIHA9YS5nbHlwaHMuZ2V0KG8pLHE9MHxwLnVuaWNvZGU7aWYoaXNOYU4ocC5hZHZhbmNlV2lkdGgpKXRocm93IG5ldyBFcnJvcihcIkdseXBoIFwiK3AubmFtZStcIiAoXCIrbytcIik6IGFkdmFuY2VXaWR0aCBpcyBub3QgYSBudW1iZXIuXCIpOyhiPnF8fHZvaWQgMD09PWIpJiZxPjAmJihiPXEpLGo8cSYmKGo9cSk7dmFyIHI9amYuZ2V0VW5pY29kZVJhbmdlKHEpO2lmKHI8MzIpa3w9MTw8cjtlbHNlIGlmKHI8NjQpbHw9MTw8ci0zMjtlbHNlIGlmKHI8OTYpbXw9MTw8ci02NDtlbHNle2lmKCEocjwxMjMpKXRocm93IG5ldyBFcnJvcihcIlVuaWNvZGUgcmFuZ2VzIGJpdHMgPiAxMjMgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2FnZVwiKTtufD0xPDxyLTk2fWlmKFwiLm5vdGRlZlwiIT09cC5uYW1lKXt2YXIgcz1wLmdldE1ldHJpY3MoKTtjLnB1c2gocy54TWluKSxkLnB1c2gocy55TWluKSxlLnB1c2gocy54TWF4KSxmLnB1c2gocy55TWF4KSxoLnB1c2gocy5sZWZ0U2lkZUJlYXJpbmcpLGkucHVzaChzLnJpZ2h0U2lkZUJlYXJpbmcpLGcucHVzaChwLmFkdmFuY2VXaWR0aCl9fXZhciB0PXt4TWluOk1hdGgubWluLmFwcGx5KG51bGwsYykseU1pbjpNYXRoLm1pbi5hcHBseShudWxsLGQpLHhNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxlKSx5TWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsZiksYWR2YW5jZVdpZHRoTWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsZyksYWR2YW5jZVdpZHRoQXZnOnJiKGcpLG1pbkxlZnRTaWRlQmVhcmluZzpNYXRoLm1pbi5hcHBseShudWxsLGgpLG1heExlZnRTaWRlQmVhcmluZzpNYXRoLm1heC5hcHBseShudWxsLGgpLG1pblJpZ2h0U2lkZUJlYXJpbmc6TWF0aC5taW4uYXBwbHkobnVsbCxpKX07dC5hc2NlbmRlcj1hLmFzY2VuZGVyLHQuZGVzY2VuZGVyPWEuZGVzY2VuZGVyO3ZhciB1PVdlLm1ha2Uoe2ZsYWdzOjMsdW5pdHNQZXJFbTphLnVuaXRzUGVyRW0seE1pbjp0LnhNaW4seU1pbjp0LnlNaW4seE1heDp0LnhNYXgseU1heDp0LnlNYXgsbG93ZXN0UmVjUFBFTTozLGNyZWF0ZWRUaW1lc3RhbXA6YS5jcmVhdGVkVGltZXN0YW1wfSksdj1YZS5tYWtlKHthc2NlbmRlcjp0LmFzY2VuZGVyLGRlc2NlbmRlcjp0LmRlc2NlbmRlcixhZHZhbmNlV2lkdGhNYXg6dC5hZHZhbmNlV2lkdGhNYXgsbWluTGVmdFNpZGVCZWFyaW5nOnQubWluTGVmdFNpZGVCZWFyaW5nLG1pblJpZ2h0U2lkZUJlYXJpbmc6dC5taW5SaWdodFNpZGVCZWFyaW5nLHhNYXhFeHRlbnQ6dC5tYXhMZWZ0U2lkZUJlYXJpbmcrKHQueE1heC10LnhNaW4pLG51bWJlck9mSE1ldHJpY3M6YS5nbHlwaHMubGVuZ3RofSksdz0kZS5tYWtlKGEuZ2x5cGhzLmxlbmd0aCkseD1qZi5tYWtlKHt4QXZnQ2hhcldpZHRoOk1hdGgucm91bmQodC5hZHZhbmNlV2lkdGhBdmcpLHVzV2VpZ2h0Q2xhc3M6YS50YWJsZXMub3MyLnVzV2VpZ2h0Q2xhc3MsdXNXaWR0aENsYXNzOmEudGFibGVzLm9zMi51c1dpZHRoQ2xhc3MsdXNGaXJzdENoYXJJbmRleDpiLHVzTGFzdENoYXJJbmRleDpqLHVsVW5pY29kZVJhbmdlMTprLHVsVW5pY29kZVJhbmdlMjpsLHVsVW5pY29kZVJhbmdlMzptLHVsVW5pY29kZVJhbmdlNDpuLGZzU2VsZWN0aW9uOmEudGFibGVzLm9zMi5mc1NlbGVjdGlvbixzVHlwb0FzY2VuZGVyOnQuYXNjZW5kZXIsc1R5cG9EZXNjZW5kZXI6dC5kZXNjZW5kZXIsc1R5cG9MaW5lR2FwOjAsdXNXaW5Bc2NlbnQ6dC55TWF4LHVzV2luRGVzY2VudDpNYXRoLmFicyh0LnlNaW4pLHVsQ29kZVBhZ2VSYW5nZTE6MSxzeEhlaWdodDpxYihhLFwieHl2d1wiLHt5TWF4Ok1hdGgucm91bmQodC5hc2NlbmRlci8yKX0pLnlNYXgsc0NhcEhlaWdodDpxYihhLFwiSElLTEVGSk1OVFpCRFBSQUdPUVNVVldYWVwiLHQpLnlNYXgsdXNEZWZhdWx0Q2hhcjphLmhhc0NoYXIoXCIgXCIpPzMyOjAsdXNCcmVha0NoYXI6YS5oYXNDaGFyKFwiIFwiKT8zMjowfSkseT1ZZS5tYWtlKGEuZ2x5cGhzKSx6PU1lLm1ha2UoYS5nbHlwaHMpLEE9YS5nZXRFbmdsaXNoTmFtZShcImZvbnRGYW1pbHlcIiksQj1hLmdldEVuZ2xpc2hOYW1lKFwiZm9udFN1YmZhbWlseVwiKSxDPUErXCIgXCIrQixEPWEuZ2V0RW5nbGlzaE5hbWUoXCJwb3N0U2NyaXB0TmFtZVwiKTtEfHwoRD1BLnJlcGxhY2UoL1xccy9nLFwiXCIpK1wiLVwiK0IpO3ZhciBFPXt9O2Zvcih2YXIgRiBpbiBhLm5hbWVzKUVbRl09YS5uYW1lc1tGXTtFLnVuaXF1ZUlEfHwoRS51bmlxdWVJRD17ZW46YS5nZXRFbmdsaXNoTmFtZShcIm1hbnVmYWN0dXJlclwiKStcIjpcIitDfSksRS5wb3N0U2NyaXB0TmFtZXx8KEUucG9zdFNjcmlwdE5hbWU9e2VuOkR9KSxFLnByZWZlcnJlZEZhbWlseXx8KEUucHJlZmVycmVkRmFtaWx5PWEubmFtZXMuZm9udEZhbWlseSksRS5wcmVmZXJyZWRTdWJmYW1pbHl8fChFLnByZWZlcnJlZFN1YmZhbWlseT1hLm5hbWVzLmZvbnRTdWJmYW1pbHkpO3ZhciBHPVtdLEg9Z2YubWFrZShFLEcpLEk9Ry5sZW5ndGg+MD9aZS5tYWtlKEcpOnZvaWQgMCxKPWtmLm1ha2UoKSxLPVZlLm1ha2UoYS5nbHlwaHMse3ZlcnNpb246YS5nZXRFbmdsaXNoTmFtZShcInZlcnNpb25cIiksZnVsbE5hbWU6QyxmYW1pbHlOYW1lOkEsd2VpZ2h0TmFtZTpCLHBvc3RTY3JpcHROYW1lOkQsdW5pdHNQZXJFbTphLnVuaXRzUGVyRW0sZm9udEJCb3g6WzAsdC55TWluLHQuYXNjZW5kZXIsdC5hZHZhbmNlV2lkdGhNYXhdfSksTD1hLm1ldGFzJiZPYmplY3Qua2V5cyhhLm1ldGFzKS5sZW5ndGg+MD9wZi5tYWtlKGEubWV0YXMpOnZvaWQgMCxNPVt1LHYsdyx4LEgseixKLEsseV07SSYmTS5wdXNoKEkpLGEudGFibGVzLmdzdWImJk0ucHVzaChvZi5tYWtlKGEudGFibGVzLmdzdWIpKSxMJiZNLnB1c2goTCk7Zm9yKHZhciBOPXBiKE0pLE89Ti5lbmNvZGUoKSxQPW5iKE8pLFE9Ti5maWVsZHMsUj0hMSxTPTA7UzxRLmxlbmd0aDtTKz0xKWlmKFwiaGVhZCB0YWJsZVwiPT09UVtTXS5uYW1lKXtRW1NdLnZhbHVlLmNoZWNrU3VtQWRqdXN0bWVudD0yOTgxMTQ2NTU0LVAsUj0hMDticmVha31pZighUil0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBoZWFkIHRhYmxlIHdpdGggY2hlY2tTdW0gdG8gYWRqdXN0LlwiKTtyZXR1cm4gTn1mdW5jdGlvbiB0YihhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGgtMTtjPD1kOyl7dmFyIGU9YytkPj4+MSxmPWFbZV0udGFnO2lmKGY9PT1iKXJldHVybiBlO2Y8Yj9jPWUrMTpkPWUtMX1yZXR1cm4tYy0xfWZ1bmN0aW9uIHViKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aC0xO2M8PWQ7KXt2YXIgZT1jK2Q+Pj4xLGY9YVtlXTtpZihmPT09YilyZXR1cm4gZTtmPGI/Yz1lKzE6ZD1lLTF9cmV0dXJuLWMtMX1mdW5jdGlvbiB2YihhLGIpe2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aC0xO2Q8PWU7KXt2YXIgZj1kK2U+Pj4xO2M9YVtmXTt2YXIgZz1jLnN0YXJ0O2lmKGc9PT1iKXJldHVybiBjO2c8Yj9kPWYrMTplPWYtMX1pZihkPjApcmV0dXJuIGM9YVtkLTFdLGI+Yy5lbmQ/MDpjfWZ1bmN0aW9uIHdiKGEsYil7dGhpcy5mb250PWEsdGhpcy50YWJsZU5hbWU9Yn1mdW5jdGlvbiB4YihhKXt3Yi5jYWxsKHRoaXMsYSxcImdwb3NcIil9ZnVuY3Rpb24geWIoYSl7d2IuY2FsbCh0aGlzLGEsXCJnc3ViXCIpfWZ1bmN0aW9uIHpiKGEsYil7dmFyIGM9YS5sZW5ndGg7aWYoYyE9PWIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgZD0wO2Q8YztkKyspaWYoYVtkXSE9PWJbZF0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQWIoYSxiLGMpe2Zvcih2YXIgZD1hLnN1YnRhYmxlcyxlPTA7ZTxkLmxlbmd0aDtlKyspe3ZhciBmPWRbZV07aWYoZi5zdWJzdEZvcm1hdD09PWIpcmV0dXJuIGZ9aWYoYylyZXR1cm4gZC5wdXNoKGMpLGN9ZnVuY3Rpb24gQmIoKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93fWZ1bmN0aW9uIENiKGEpe2Zvcih2YXIgYj1uZXcgQXJyYXlCdWZmZXIoYS5sZW5ndGgpLGM9bmV3IFVpbnQ4QXJyYXkoYiksZD0wO2Q8YS5sZW5ndGg7KytkKWNbZF09YVtkXTtyZXR1cm4gYn1mdW5jdGlvbiBEYihhKXtmb3IodmFyIGI9bmV3IGUoYS5ieXRlTGVuZ3RoKSxjPW5ldyBVaW50OEFycmF5KGEpLGQ9MDtkPGIubGVuZ3RoOysrZCliW2RdPWNbZF07cmV0dXJuIGJ9ZnVuY3Rpb24gRWIoYSxiKXtpZighYSl0aHJvdyBifWZ1bmN0aW9uIEZiKGEsYixjLGQsZSl7dmFyIGY7cmV0dXJuKGImZCk+MD8oZj1hLnBhcnNlQnl0ZSgpLDA9PShiJmUpJiYoZj0tZiksZj1jK2YpOmY9KGImZSk+MD9jOmMrYS5wYXJzZVNob3J0KCksZn1mdW5jdGlvbiBHYihhLGIsYyl7dmFyIGQ9bmV3IExlLlBhcnNlcihiLGMpO2EubnVtYmVyT2ZDb250b3Vycz1kLnBhcnNlU2hvcnQoKSxhLl94TWluPWQucGFyc2VTaG9ydCgpLGEuX3lNaW49ZC5wYXJzZVNob3J0KCksYS5feE1heD1kLnBhcnNlU2hvcnQoKSxhLl95TWF4PWQucGFyc2VTaG9ydCgpO3ZhciBlLGY7aWYoYS5udW1iZXJPZkNvbnRvdXJzPjApe2Zvcih2YXIgZz1hLmVuZFBvaW50SW5kaWNlcz1bXSxoPTA7aDxhLm51bWJlck9mQ29udG91cnM7aCs9MSlnLnB1c2goZC5wYXJzZVVTaG9ydCgpKTthLmluc3RydWN0aW9uTGVuZ3RoPWQucGFyc2VVU2hvcnQoKSxhLmluc3RydWN0aW9ucz1bXTtmb3IodmFyIGk9MDtpPGEuaW5zdHJ1Y3Rpb25MZW5ndGg7aSs9MSlhLmluc3RydWN0aW9ucy5wdXNoKGQucGFyc2VCeXRlKCkpO3ZhciBqPWdbZy5sZW5ndGgtMV0rMTtlPVtdO2Zvcih2YXIgaz0wO2s8ajtrKz0xKWlmKGY9ZC5wYXJzZUJ5dGUoKSxlLnB1c2goZiksKDgmZik+MClmb3IodmFyIGw9ZC5wYXJzZUJ5dGUoKSxtPTA7bTxsO20rPTEpZS5wdXNoKGYpLGsrPTE7aWYoeGUuYXJndW1lbnQoZS5sZW5ndGg9PT1qLFwiQmFkIGZsYWdzLlwiKSxnLmxlbmd0aD4wKXt2YXIgbixvPVtdO2lmKGo+MCl7Zm9yKHZhciBwPTA7cDxqO3ArPTEpZj1lW3BdLG49e30sbi5vbkN1cnZlPSEhKDEmZiksbi5sYXN0UG9pbnRPZkNvbnRvdXI9Zy5pbmRleE9mKHApPj0wLG8ucHVzaChuKTtmb3IodmFyIHE9MCxyPTA7cjxqO3IrPTEpZj1lW3JdLG49b1tyXSxuLng9RmIoZCxmLHEsMiwxNikscT1uLng7Zm9yKHZhciBzPTAsdD0wO3Q8ajt0Kz0xKWY9ZVt0XSxuPW9bdF0sbi55PUZiKGQsZixzLDQsMzIpLHM9bi55fWEucG9pbnRzPW99ZWxzZSBhLnBvaW50cz1bXX1lbHNlIGlmKDA9PT1hLm51bWJlck9mQ29udG91cnMpYS5wb2ludHM9W107ZWxzZXthLmlzQ29tcG9zaXRlPSEwLGEucG9pbnRzPVtdLGEuY29tcG9uZW50cz1bXTtmb3IodmFyIHU9ITA7dTspe2U9ZC5wYXJzZVVTaG9ydCgpO3ZhciB2PXtnbHlwaEluZGV4OmQucGFyc2VVU2hvcnQoKSx4U2NhbGU6MSxzY2FsZTAxOjAsc2NhbGUxMDowLHlTY2FsZToxLGR4OjAsZHk6MH07KDEmZSk+MD8oMiZlKT4wPyh2LmR4PWQucGFyc2VTaG9ydCgpLHYuZHk9ZC5wYXJzZVNob3J0KCkpOnYubWF0Y2hlZFBvaW50cz1bZC5wYXJzZVVTaG9ydCgpLGQucGFyc2VVU2hvcnQoKV06KDImZSk+MD8odi5keD1kLnBhcnNlQ2hhcigpLHYuZHk9ZC5wYXJzZUNoYXIoKSk6di5tYXRjaGVkUG9pbnRzPVtkLnBhcnNlQnl0ZSgpLGQucGFyc2VCeXRlKCldLCg4JmUpPjA/di54U2NhbGU9di55U2NhbGU9ZC5wYXJzZUYyRG90MTQoKTooNjQmZSk+MD8odi54U2NhbGU9ZC5wYXJzZUYyRG90MTQoKSx2LnlTY2FsZT1kLnBhcnNlRjJEb3QxNCgpKTooMTI4JmUpPjAmJih2LnhTY2FsZT1kLnBhcnNlRjJEb3QxNCgpLHYuc2NhbGUwMT1kLnBhcnNlRjJEb3QxNCgpLHYuc2NhbGUxMD1kLnBhcnNlRjJEb3QxNCgpLHYueVNjYWxlPWQucGFyc2VGMkRvdDE0KCkpLGEuY29tcG9uZW50cy5wdXNoKHYpLHU9ISEoMzImZSl9aWYoMjU2JmUpe2EuaW5zdHJ1Y3Rpb25MZW5ndGg9ZC5wYXJzZVVTaG9ydCgpLGEuaW5zdHJ1Y3Rpb25zPVtdO2Zvcih2YXIgdz0wO3c8YS5pbnN0cnVjdGlvbkxlbmd0aDt3Kz0xKWEuaW5zdHJ1Y3Rpb25zLnB1c2goZC5wYXJzZUJ5dGUoKSl9fX1mdW5jdGlvbiBIYihhLGIpe2Zvcih2YXIgYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdLGY9e3g6Yi54U2NhbGUqZS54K2Iuc2NhbGUwMSplLnkrYi5keCx5OmIuc2NhbGUxMCplLngrYi55U2NhbGUqZS55K2IuZHksb25DdXJ2ZTplLm9uQ3VydmUsbGFzdFBvaW50T2ZDb250b3VyOmUubGFzdFBvaW50T2ZDb250b3VyfTtjLnB1c2goZil9cmV0dXJuIGN9ZnVuY3Rpb24gSWIoYSl7Zm9yKHZhciBiPVtdLGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXTtjLnB1c2goZSksZS5sYXN0UG9pbnRPZkNvbnRvdXImJihiLnB1c2goYyksYz1bXSl9cmV0dXJuIHhlLmFyZ3VtZW50KDA9PT1jLmxlbmd0aCxcIlRoZXJlIGFyZSBzdGlsbCBwb2ludHMgbGVmdCBpbiB0aGUgY3VycmVudCBjb250b3VyLlwiKSxifWZ1bmN0aW9uIEpiKGEpe3ZhciBiPW5ldyByO2lmKCFhKXJldHVybiBiO2Zvcih2YXIgYz1JYihhKSxkPTA7ZDxjLmxlbmd0aDsrK2Qpe3ZhciBlPWNbZF0sZj1udWxsLGc9ZVtlLmxlbmd0aC0xXSxoPWVbMF07aWYoZy5vbkN1cnZlKWIubW92ZVRvKGcueCxnLnkpO2Vsc2UgaWYoaC5vbkN1cnZlKWIubW92ZVRvKGgueCxoLnkpO2Vsc2V7dmFyIGk9e3g6LjUqKGcueCtoLngpLHk6LjUqKGcueStoLnkpfTtiLm1vdmVUbyhpLngsaS55KX1mb3IodmFyIGo9MDtqPGUubGVuZ3RoOysrailpZihmPWcsZz1oLGg9ZVsoaisxKSVlLmxlbmd0aF0sZy5vbkN1cnZlKWIubGluZVRvKGcueCxnLnkpO2Vsc2V7dmFyIGs9aDtmLm9uQ3VydmV8fHt4Oi41KihnLngrZi54KSx5Oi41KihnLnkrZi55KX0saC5vbkN1cnZlfHwoaz17eDouNSooZy54K2gueCkseTouNSooZy55K2gueSl9KSxiLnF1YWRyYXRpY0N1cnZlVG8oZy54LGcueSxrLngsay55KX1iLmNsb3NlUGF0aCgpfXJldHVybiBifWZ1bmN0aW9uIEtiKGEsYil7aWYoYi5pc0NvbXBvc2l0ZSlmb3IodmFyIGM9MDtjPGIuY29tcG9uZW50cy5sZW5ndGg7Yys9MSl7dmFyIGQ9Yi5jb21wb25lbnRzW2NdLGU9YS5nZXQoZC5nbHlwaEluZGV4KTtpZihlLmdldFBhdGgoKSxlLnBvaW50cyl7dmFyIGY9dm9pZCAwO2lmKHZvaWQgMD09PWQubWF0Y2hlZFBvaW50cylmPUhiKGUucG9pbnRzLGQpO2Vsc2V7XG5pZihkLm1hdGNoZWRQb2ludHNbMF0+Yi5wb2ludHMubGVuZ3RoLTF8fGQubWF0Y2hlZFBvaW50c1sxXT5lLnBvaW50cy5sZW5ndGgtMSl0aHJvdyBFcnJvcihcIk1hdGNoZWQgcG9pbnRzIG91dCBvZiByYW5nZSBpbiBcIitiLm5hbWUpO3ZhciBnPWIucG9pbnRzW2QubWF0Y2hlZFBvaW50c1swXV0saD1lLnBvaW50c1tkLm1hdGNoZWRQb2ludHNbMV1dLGk9e3hTY2FsZTpkLnhTY2FsZSxzY2FsZTAxOmQuc2NhbGUwMSxzY2FsZTEwOmQuc2NhbGUxMCx5U2NhbGU6ZC55U2NhbGUsZHg6MCxkeTowfTtoPUhiKFtoXSxpKVswXSxpLmR4PWcueC1oLngsaS5keT1nLnktaC55LGY9SGIoZS5wb2ludHMsaSl9Yi5wb2ludHM9Yi5wb2ludHMuY29uY2F0KGYpfX1yZXR1cm4gSmIoYi5wb2ludHMpfWZ1bmN0aW9uIExiKGEsYixjLGQpe2Zvcih2YXIgZT1uZXcgU2UuR2x5cGhTZXQoZCksZj0wO2Y8Yy5sZW5ndGgtMTtmKz0xKXt2YXIgZz1jW2ZdO2chPT1jW2YrMV0/ZS5wdXNoKGYsU2UudHRmR2x5cGhMb2FkZXIoZCxmLEdiLGEsYitnLEtiKSk6ZS5wdXNoKGYsU2UuZ2x5cGhMb2FkZXIoZCxmKSl9cmV0dXJuIGV9ZnVuY3Rpb24gTWIoYSl7dGhpcy5mb250PWEsdGhpcy5nZXRDb21tYW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gdmYuZ2V0UGF0aChhKS5jb21tYW5kc30sdGhpcy5fZnBnbVN0YXRlPXRoaXMuX3ByZXBTdGF0ZT12b2lkIDAsdGhpcy5fZXJyb3JTdGF0ZT0wfWZ1bmN0aW9uIE5iKGEpe3JldHVybiBhfWZ1bmN0aW9uIE9iKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqTWF0aC5yb3VuZChNYXRoLmFicyhhKSl9ZnVuY3Rpb24gUGIoYSl7cmV0dXJuIE1hdGguc2lnbihhKSpNYXRoLnJvdW5kKE1hdGguYWJzKDIqYSkpLzJ9ZnVuY3Rpb24gUWIoYSl7cmV0dXJuIE1hdGguc2lnbihhKSooTWF0aC5yb3VuZChNYXRoLmFicyhhKSsuNSktLjUpfWZ1bmN0aW9uIFJiKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqTWF0aC5jZWlsKE1hdGguYWJzKGEpKX1mdW5jdGlvbiBTYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKk1hdGguZmxvb3IoTWF0aC5hYnMoYSkpfWZ1bmN0aW9uIFRiKGEsYil7dGhpcy54PWEsdGhpcy55PWIsdGhpcy5heGlzPXZvaWQgMCx0aGlzLnNsb3BlPWIvYSx0aGlzLm5vcm1hbFNsb3BlPS1hL2IsT2JqZWN0LmZyZWV6ZSh0aGlzKX1mdW5jdGlvbiBVYihhLGIpe3ZhciBjPU1hdGguc3FydChhKmErYipiKTtyZXR1cm4gYS89YyxiLz1jLDE9PT1hJiYwPT09Yj94ZjowPT09YSYmMT09PWI/eWY6bmV3IFRiKGEsYil9ZnVuY3Rpb24gVmIoYSxiLGMsZCl7dGhpcy54PXRoaXMueG89TWF0aC5yb3VuZCg2NCphKS82NCx0aGlzLnk9dGhpcy55bz1NYXRoLnJvdW5kKDY0KmIpLzY0LHRoaXMubGFzdFBvaW50T2ZDb250b3VyPWMsdGhpcy5vbkN1cnZlPWQsdGhpcy5wcmV2UG9pbnRPbkNvbnRvdXI9dm9pZCAwLHRoaXMubmV4dFBvaW50T25Db250b3VyPXZvaWQgMCx0aGlzLnhUb3VjaGVkPSExLHRoaXMueVRvdWNoZWQ9ITEsT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHRoaXMpfWZ1bmN0aW9uIFdiKGEsYil7c3dpdGNoKHRoaXMuZW52PWEsdGhpcy5zdGFjaz1bXSx0aGlzLnByb2c9YixhKXtjYXNlXCJnbHlmXCI6dGhpcy56cDA9dGhpcy56cDE9dGhpcy56cDI9MSx0aGlzLnJwMD10aGlzLnJwMT10aGlzLnJwMj0wO2Nhc2VcInByZXBcIjp0aGlzLmZ2PXRoaXMucHY9dGhpcy5kcHY9eGYsdGhpcy5yb3VuZD1PYn19ZnVuY3Rpb24gWGIoYSl7Zm9yKHZhciBiPWEudFpvbmU9bmV3IEFycmF5KGEuZ1pvbmUubGVuZ3RoKSxjPTA7YzxiLmxlbmd0aDtjKyspYltjXT1uZXcgVmIoMCwwKX1mdW5jdGlvbiBZYihhLGIpe3ZhciBjLGQ9YS5wcm9nLGU9YS5pcCxmPTE7ZG97aWYoODg9PT0oYz1kWysrZV0pKWYrKztlbHNlIGlmKDg5PT09YylmLS07ZWxzZSBpZig2ND09PWMpZSs9ZFtlKzFdKzE7ZWxzZSBpZig2NT09PWMpZSs9MipkW2UrMV0rMTtlbHNlIGlmKGM+PTE3NiYmYzw9MTgzKWUrPWMtMTc2KzE7ZWxzZSBpZihjPj0xODQmJmM8PTE5MSllKz0yKihjLTE4NCsxKTtlbHNlIGlmKGImJjE9PT1mJiYyNz09PWMpYnJlYWt9d2hpbGUoZj4wKTthLmlwPWV9ZnVuY3Rpb24gWmIoYixjKXthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTVlRDQVtcIitiLmF4aXMrXCJdXCIpLGMuZnY9Yy5wdj1jLmRwdj1ifWZ1bmN0aW9uICRiKGIsYyl7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU1BWVENBW1wiK2IuYXhpcytcIl1cIiksYy5wdj1jLmRwdj1ifWZ1bmN0aW9uIF9iKGIsYyl7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU0ZWVENBW1wiK2IuYXhpcytcIl1cIiksYy5mdj1ifWZ1bmN0aW9uIGFjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MltlXSxoPWMuejFbZl07YS5ERUJVRyYmY29uc29sZS5sb2coXCJTUFZUTFtcIitiK1wiXVwiLGUsZik7dmFyIGksajtiPyhpPWcueS1oLnksaj1oLngtZy54KTooaT1oLngtZy54LGo9aC55LWcueSksYy5wdj1jLmRwdj1VYihpLGopfWZ1bmN0aW9uIGJjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MltlXSxoPWMuejFbZl07YS5ERUJVRyYmY29uc29sZS5sb2coXCJTRlZUTFtcIitiK1wiXVwiLGUsZik7dmFyIGksajtiPyhpPWcueS1oLnksaj1oLngtZy54KTooaT1oLngtZy54LGo9aC55LWcueSksYy5mdj1VYihpLGopfWZ1bmN0aW9uIGNjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUFZGU1tdXCIsZCxlKSxiLnB2PWIuZHB2PVViKGUsZCl9ZnVuY3Rpb24gZGMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNQVkZTW11cIixkLGUpLGIuZnY9VWIoZSxkKX1mdW5jdGlvbiBlYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yi5wdjthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJHUFZbXVwiKSxjLnB1c2goMTYzODQqZC54KSxjLnB1c2goMTYzODQqZC55KX1mdW5jdGlvbiBmYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yi5mdjthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJHRlZbXVwiKSxjLnB1c2goMTYzODQqZC54KSxjLnB1c2goMTYzODQqZC55KX1mdW5jdGlvbiBnYyhiKXtiLmZ2PWIucHYsYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0ZWVFBWW11cIil9ZnVuY3Rpb24gaGMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpLGY9Yy5wb3AoKSxnPWMucG9wKCksaD1jLnBvcCgpLGk9Yi56MCxqPWIuejEsaz1pW2RdLGw9aVtlXSxtPWpbZl0sbj1qW2ddLG89Yi56MltoXTthLkRFQlVHJiZjb25zb2xlLmxvZyhcIklTRUNUW10sIFwiLGQsZSxmLGcsaCk7dmFyIHA9ay54LHE9ay55LHI9bC54LHM9bC55LHQ9bS54LHU9bS55LHY9bi54LHc9bi55LHg9KHAtcikqKHUtdyktKHEtcykqKHQtdikseT1wKnMtcSpyLHo9dCp3LXUqdjtvLng9KHkqKHQtdikteioocC1yKSkveCxvLnk9KHkqKHUtdykteioocS1zKSkveH1mdW5jdGlvbiBpYyhiKXtiLnJwMD1iLnN0YWNrLnBvcCgpLGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNSUDBbXVwiLGIucnAwKX1mdW5jdGlvbiBqYyhiKXtiLnJwMT1iLnN0YWNrLnBvcCgpLGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNSUDFbXVwiLGIucnAxKX1mdW5jdGlvbiBrYyhiKXtiLnJwMj1iLnN0YWNrLnBvcCgpLGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNSUDJbXVwiLGIucnAyKX1mdW5jdGlvbiBsYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO3N3aXRjaChhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTWlAwW11cIixjKSxiLnpwMD1jLGMpe2Nhc2UgMDpiLnRab25lfHxYYihiKSxiLnowPWIudFpvbmU7YnJlYWs7Y2FzZSAxOmIuejA9Yi5nWm9uZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgem9uZSBwb2ludGVyXCIpfX1mdW5jdGlvbiBtYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO3N3aXRjaChhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTWlAxW11cIixjKSxiLnpwMT1jLGMpe2Nhc2UgMDpiLnRab25lfHxYYihiKSxiLnoxPWIudFpvbmU7YnJlYWs7Y2FzZSAxOmIuejE9Yi5nWm9uZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgem9uZSBwb2ludGVyXCIpfX1mdW5jdGlvbiBuYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO3N3aXRjaChhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTWlAyW11cIixjKSxiLnpwMj1jLGMpe2Nhc2UgMDpiLnRab25lfHxYYihiKSxiLnoyPWIudFpvbmU7YnJlYWs7Y2FzZSAxOmIuejI9Yi5nWm9uZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgem9uZSBwb2ludGVyXCIpfX1mdW5jdGlvbiBvYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO3N3aXRjaChhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTWlBTW11cIixjKSxiLnpwMD1iLnpwMT1iLnpwMj1jLGMpe2Nhc2UgMDpiLnRab25lfHxYYihiKSxiLnowPWIuejE9Yi56Mj1iLnRab25lO2JyZWFrO2Nhc2UgMTpiLnowPWIuejE9Yi56Mj1iLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lIHBvaW50ZXJcIil9fWZ1bmN0aW9uIHBjKGIpe2IubG9vcD1iLnN0YWNrLnBvcCgpLGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNMT09QW11cIixiLmxvb3ApfWZ1bmN0aW9uIHFjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJUR1tdXCIpLGIucm91bmQ9T2J9ZnVuY3Rpb24gcmMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlRIR1tdXCIpLGIucm91bmQ9UWJ9ZnVuY3Rpb24gc2MoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTTURbXVwiLGMpLGIubWluRGlzPWMvNjR9ZnVuY3Rpb24gdGMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRUxTRVtdXCIpLFliKGIsITEpfWZ1bmN0aW9uIHVjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiSk1QUltdXCIsYyksYi5pcCs9Yy0xfWZ1bmN0aW9uIHZjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0NWVENJW11cIixjKSxiLmN2Q3V0SW49Yy82NH1mdW5jdGlvbiB3YyhiKXt2YXIgYz1iLnN0YWNrO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkRVUFtdXCIpLGMucHVzaChjW2MubGVuZ3RoLTFdKX1mdW5jdGlvbiB4YyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJQT1BbXVwiKSxiLnN0YWNrLnBvcCgpfWZ1bmN0aW9uIHljKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkNMRUFSW11cIiksYi5zdGFjay5sZW5ndGg9MH1mdW5jdGlvbiB6YyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1dBUFtdXCIpLGMucHVzaChkKSxjLnB1c2goZSl9ZnVuY3Rpb24gQWMoYil7dmFyIGM9Yi5zdGFjazthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJERVBUSFtdXCIpLGMucHVzaChjLmxlbmd0aCl9ZnVuY3Rpb24gQmMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkxPT1BDQUxMW11cIixkLGUpO3ZhciBmPWIuaXAsZz1iLnByb2c7Yi5wcm9nPWIuZnVuY3NbZF07Zm9yKHZhciBoPTA7aDxlO2grKylzZihiKSxhLkRFQlVHJiZjb25zb2xlLmxvZygrK2Iuc3RlcCxoKzE8ZT9cIm5leHQgbG9vcGNhbGxcIjpcImRvbmUgbG9vcGNhbGxcIixoKTtiLmlwPWYsYi5wcm9nPWd9ZnVuY3Rpb24gQ2MoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJDQUxMW11cIixjKTt2YXIgZD1iLmlwLGU9Yi5wcm9nO2IucHJvZz1iLmZ1bmNzW2NdLHNmKGIpLGIuaXA9ZCxiLnByb2c9ZSxhLkRFQlVHJiZjb25zb2xlLmxvZygrK2Iuc3RlcCxcInJldHVybmluZyBmcm9tXCIsYyl9ZnVuY3Rpb24gRGMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQ0lOREVYW11cIixkKSxjLnB1c2goY1tjLmxlbmd0aC1kXSl9ZnVuY3Rpb24gRWMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTUlOREVYW11cIixkKSxjLnB1c2goYy5zcGxpY2UoYy5sZW5ndGgtZCwxKVswXSl9ZnVuY3Rpb24gRmMoYil7aWYoXCJmcGdtXCIhPT1iLmVudil0aHJvdyBuZXcgRXJyb3IoXCJGREVGIG5vdCBhbGxvd2VkIGhlcmVcIik7dmFyIGM9Yi5zdGFjayxkPWIucHJvZyxlPWIuaXAsZj1jLnBvcCgpLGc9ZTtmb3IoYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRkRFRltdXCIsZik7NDUhPT1kWysrZV07KTtiLmlwPWUsYi5mdW5jc1tmXT1kLnNsaWNlKGcrMSxlKX1mdW5jdGlvbiBHYyhiLGMpe3ZhciBkPWMuc3RhY2sucG9wKCksZT1jLnowW2RdLGY9Yy5mdixnPWMucHY7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiTURBUFtcIitiK1wiXVwiLGQpO3ZhciBoPWcuZGlzdGFuY2UoZSx6Zik7YiYmKGg9Yy5yb3VuZChoKSksZi5zZXRSZWxhdGl2ZShlLHpmLGgsZyksZi50b3VjaChlKSxjLnJwMD1jLnJwMT1kfWZ1bmN0aW9uIEhjKGIsYyl7dmFyIGQsZSxmLGc9Yy56MixoPWcubGVuZ3RoLTI7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiSVVQW1wiK2IuYXhpcytcIl1cIik7Zm9yKHZhciBpPTA7aTxoO2krKylkPWdbaV0sYi50b3VjaGVkKGQpfHwoZT1kLnByZXZUb3VjaGVkKGIpKSE9PWQmJihmPWQubmV4dFRvdWNoZWQoYiksZT09PWYmJmIuc2V0UmVsYXRpdmUoZCxkLGIuZGlzdGFuY2UoZSxlLCExLCEwKSxiLCEwKSxiLmludGVycG9sYXRlKGQsZSxmLGIpKX1mdW5jdGlvbiBJYyhiLGMpe2Zvcih2YXIgZD1jLnN0YWNrLGU9Yj9jLnJwMTpjLnJwMixmPShiP2MuejA6Yy56MSlbZV0sZz1jLmZ2LGg9Yy5wdixpPWMubG9vcCxqPWMuejI7aS0tOyl7dmFyIGs9ZC5wb3AoKSxsPWpba10sbT1oLmRpc3RhbmNlKGYsZiwhMSwhMCk7Zy5zZXRSZWxhdGl2ZShsLGwsbSxoKSxnLnRvdWNoKGwpLGEuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCwoYy5sb29wPjE/XCJsb29wIFwiKyhjLmxvb3AtaSkrXCI6IFwiOlwiXCIpK1wiU0hQW1wiKyhiP1wicnAxXCI6XCJycDJcIikrXCJdXCIsayl9Yy5sb29wPTF9ZnVuY3Rpb24gSmMoYixjKXt2YXIgZD1jLnN0YWNrLGU9Yj9jLnJwMTpjLnJwMixmPShiP2MuejA6Yy56MSlbZV0sZz1jLmZ2LGg9Yy5wdixpPWQucG9wKCksaj1jLnoyW2MuY29udG91cnNbaV1dLGs9ajthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTSENbXCIrYitcIl1cIixpKTt2YXIgbD1oLmRpc3RhbmNlKGYsZiwhMSwhMCk7ZG97ayE9PWYmJmcuc2V0UmVsYXRpdmUoayxrLGwsaCksaz1rLm5leHRQb2ludE9uQ29udG91cn13aGlsZShrIT09ail9ZnVuY3Rpb24gS2MoYixjKXt2YXIgZD1jLnN0YWNrLGU9Yj9jLnJwMTpjLnJwMixmPShiP2MuejA6Yy56MSlbZV0sZz1jLmZ2LGg9Yy5wdixpPWQucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU0haW1wiK2IrXCJdXCIsaSk7dmFyIGo7c3dpdGNoKGkpe2Nhc2UgMDpqPWMudFpvbmU7YnJlYWs7Y2FzZSAxOmo9Yy5nWm9uZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgem9uZVwiKX1mb3IodmFyIGssbD1oLmRpc3RhbmNlKGYsZiwhMSwhMCksbT1qLmxlbmd0aC0yLG49MDtuPG07bisrKWs9altuXSxnLnNldFJlbGF0aXZlKGssayxsLGgpfWZ1bmN0aW9uIExjKGIpe2Zvcih2YXIgYz1iLnN0YWNrLGQ9Yi5sb29wLGU9Yi5mdixmPWMucG9wKCkvNjQsZz1iLnoyO2QtLTspe3ZhciBoPWMucG9wKCksaT1nW2hdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCwoYi5sb29wPjE/XCJsb29wIFwiKyhiLmxvb3AtZCkrXCI6IFwiOlwiXCIpK1wiU0hQSVhbXVwiLGgsZiksZS5zZXRSZWxhdGl2ZShpLGksZiksZS50b3VjaChpKX1iLmxvb3A9MX1mdW5jdGlvbiBNYyhiKXtmb3IodmFyIGM9Yi5zdGFjayxkPWIucnAxLGU9Yi5ycDIsZj1iLmxvb3AsZz1iLnowW2RdLGg9Yi56MVtlXSxpPWIuZnYsaj1iLmRwdixrPWIuejI7Zi0tOyl7dmFyIGw9Yy5wb3AoKSxtPWtbbF07YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLChiLmxvb3A+MT9cImxvb3AgXCIrKGIubG9vcC1mKStcIjogXCI6XCJcIikrXCJJUFtdXCIsbCxkLFwiPC0+XCIsZSksaS5pbnRlcnBvbGF0ZShtLGcsaCxqKSxpLnRvdWNoKG0pfWIubG9vcD0xfWZ1bmN0aW9uIE5jKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCkvNjQsZj1kLnBvcCgpLGc9Yy56MVtmXSxoPWMuejBbYy5ycDBdLGk9Yy5mdixqPWMucHY7aS5zZXRSZWxhdGl2ZShnLGgsZSxqKSxpLnRvdWNoKGcpLGEuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIk1TSVJQW1wiK2IrXCJdXCIsZSxmKSxjLnJwMT1jLnJwMCxjLnJwMj1mLGImJihjLnJwMD1mKX1mdW5jdGlvbiBPYyhiKXtmb3IodmFyIGM9Yi5zdGFjayxkPWIucnAwLGU9Yi56MFtkXSxmPWIubG9vcCxnPWIuZnYsaD1iLnB2LGk9Yi56MTtmLS07KXt2YXIgaj1jLnBvcCgpLGs9aVtqXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsKGIubG9vcD4xP1wibG9vcCBcIisoYi5sb29wLWYpK1wiOiBcIjpcIlwiKStcIkFMSUdOUlBbXVwiLGopLGcuc2V0UmVsYXRpdmUoayxlLDAsaCksZy50b3VjaChrKX1iLmxvb3A9MX1mdW5jdGlvbiBQYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSVERHW11cIiksYi5yb3VuZD1QYn1mdW5jdGlvbiBRYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejBbZl0saD1jLmZ2LGk9Yy5wdixqPWMuY3Z0W2VdO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIk1JQVBbXCIrYitcIl1cIixlLFwiKFwiLGosXCIpXCIsZik7dmFyIGs9aS5kaXN0YW5jZShnLHpmKTtiJiYoTWF0aC5hYnMoay1qKTxjLmN2Q3V0SW4mJihrPWopLGs9Yy5yb3VuZChrKSksaC5zZXRSZWxhdGl2ZShnLHpmLGssaSksMD09PWMuenAwJiYoZy54bz1nLngsZy55bz1nLnkpLGgudG91Y2goZyksYy5ycDA9Yy5ycDE9Zn1mdW5jdGlvbiBSYyhiKXt2YXIgYz1iLnByb2csZD1iLmlwLGU9Yi5zdGFjayxmPWNbKytkXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJOUFVTSEJbXVwiLGYpO2Zvcih2YXIgZz0wO2c8ZjtnKyspZS5wdXNoKGNbKytkXSk7Yi5pcD1kfWZ1bmN0aW9uIFNjKGIpe3ZhciBjPWIuaXAsZD1iLnByb2csZT1iLnN0YWNrLGY9ZFsrK2NdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5QVVNIV1tdXCIsZik7Zm9yKHZhciBnPTA7ZzxmO2crKyl7dmFyIGg9ZFsrK2NdPDw4fGRbKytjXTszMjc2OCZoJiYoaD0tKDErKDY1NTM1XmgpKSksZS5wdXNoKGgpfWIuaXA9Y31mdW5jdGlvbiBUYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yi5zdG9yZTtkfHwoZD1iLnN0b3JlPVtdKTt2YXIgZT1jLnBvcCgpLGY9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJXU1wiLGUsZiksZFtmXT1lfWZ1bmN0aW9uIFVjKGIpe3ZhciBjPWIuc3RhY2ssZD1iLnN0b3JlLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSU1wiLGUpO3ZhciBmPWQmJmRbZV18fDA7Yy5wdXNoKGYpfWZ1bmN0aW9uIFZjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJXQ1ZUUFwiLGQsZSksYi5jdnRbZV09ZC82NH1mdW5jdGlvbiBXYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSQ1ZUXCIsZCksYy5wdXNoKDY0KmIuY3Z0W2RdKX1mdW5jdGlvbiBYYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9Yy56MltlXTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJHQ1tcIitiK1wiXVwiLGUpLGQucHVzaCg2NCpjLmRwdi5kaXN0YW5jZShmLHpmLGIsITEpKX1mdW5jdGlvbiBZYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejFbZV0saD1jLnowW2ZdLGk9Yy5kcHYuZGlzdGFuY2UoaCxnLGIsYik7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiTURbXCIrYitcIl1cIixlLGYsXCItPlwiLGkpLGMuc3RhY2sucHVzaChNYXRoLnJvdW5kKDY0KmkpKX1mdW5jdGlvbiBaYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNUFBFTVtdXCIpLGIuc3RhY2sucHVzaChiLnBwZW0pfWZ1bmN0aW9uICRjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkZMSVBPTltdXCIpLGIuYXV0b0ZsaXA9ITB9ZnVuY3Rpb24gX2MoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkxUW11cIixkLGUpLGMucHVzaChlPGQ/MTowKX1mdW5jdGlvbiBhZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTFRFUVtdXCIsZCxlKSxjLnB1c2goZTw9ZD8xOjApfWZ1bmN0aW9uIGJkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJHVFtdXCIsZCxlKSxjLnB1c2goZT5kPzE6MCl9ZnVuY3Rpb24gY2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdURVFbXVwiLGQsZSksYy5wdXNoKGU+PWQ/MTowKX1mdW5jdGlvbiBkZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRVFbXVwiLGQsZSksYy5wdXNoKGQ9PT1lPzE6MCl9ZnVuY3Rpb24gZWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5FUVtdXCIsZCxlKSxjLnB1c2goZCE9PWU/MTowKX1mdW5jdGlvbiBmZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJPRERbXVwiLGQpLGMucHVzaChNYXRoLnRydW5jKGQpJTI/MTowKX1mdW5jdGlvbiBnZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFVkVOW11cIixkKSxjLnB1c2goTWF0aC50cnVuYyhkKSUyPzA6MSl9ZnVuY3Rpb24gaGQoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJJRltdXCIsYyksY3x8KFliKGIsITApLGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVJRltdXCIpKX1mdW5jdGlvbiBpZChiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFSUZbXVwiKX1mdW5jdGlvbiBqZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQU5EW11cIixkLGUpLGMucHVzaChkJiZlPzE6MCl9ZnVuY3Rpb24ga2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk9SW11cIixkLGUpLGMucHVzaChkfHxlPzE6MCl9ZnVuY3Rpb24gbGQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTk9UW11cIixkKSxjLnB1c2goZD8wOjEpfWZ1bmN0aW9uIG1kKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1jLmZ2LGc9Yy5wdixoPWMucHBlbSxpPWMuZGVsdGFCYXNlKzE2KihiLTEpLGo9Yy5kZWx0YVNoaWZ0LGs9Yy56MDthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJERUxUQVBbXCIrYitcIl1cIixlLGQpO2Zvcih2YXIgbD0wO2w8ZTtsKyspe3ZhciBtPWQucG9wKCksbj1kLnBvcCgpO2lmKGkrKCgyNDAmbik+PjQpPT09aCl7dmFyIG89KDE1Jm4pLTg7bz49MCYmbysrLGEuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIkRFTFRBUEZJWFwiLG0sXCJieVwiLG8qaik7dmFyIHA9a1ttXTtmLnNldFJlbGF0aXZlKHAscCxvKmosZyl9fX1mdW5jdGlvbiBuZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTREJbXVwiLGQpLGIuZGVsdGFCYXNlPWR9ZnVuY3Rpb24gb2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0RTW11cIixkKSxiLmRlbHRhU2hpZnQ9TWF0aC5wb3coLjUsZCl9ZnVuY3Rpb24gcGQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkFERFtdXCIsZCxlKSxjLnB1c2goZStkKX1mdW5jdGlvbiBxZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1VCW11cIixkLGUpLGMucHVzaChlLWQpfWZ1bmN0aW9uIHJkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJESVZbXVwiLGQsZSksYy5wdXNoKDY0KmUvZCl9ZnVuY3Rpb24gc2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk1VTFtdXCIsZCxlKSxjLnB1c2goZSpkLzY0KX1mdW5jdGlvbiB0ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJBQlNbXVwiLGQpLGMucHVzaChNYXRoLmFicyhkKSl9ZnVuY3Rpb24gdWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTkVHW11cIixkKSxjLnB1c2goLWQpfWZ1bmN0aW9uIHZkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkZMT09SW11cIixkKSxjLnB1c2goNjQqTWF0aC5mbG9vcihkLzY0KSl9ZnVuY3Rpb24gd2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQ0VJTElOR1tdXCIsZCksYy5wdXNoKDY0Kk1hdGguY2VpbChkLzY0KSl9ZnVuY3Rpb24geGQoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJST1VORFtdXCIpLGQucHVzaCg2NCpjLnJvdW5kKGUvNjQpKX1mdW5jdGlvbiB5ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiV0NWVEZbXVwiLGQsZSksYi5jdnRbZV09ZCpiLnBwZW0vYi5mb250LnVuaXRzUGVyRW19ZnVuY3Rpb24gemQoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWMucHBlbSxnPWMuZGVsdGFCYXNlKzE2KihiLTEpLGg9Yy5kZWx0YVNoaWZ0O2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIkRFTFRBQ1tcIitiK1wiXVwiLGUsZCk7Zm9yKHZhciBpPTA7aTxlO2krKyl7dmFyIGo9ZC5wb3AoKSxrPWQucG9wKCk7aWYoZysoKDI0MCZrKT4+NCk9PT1mKXt2YXIgbD0oMTUmayktODtsPj0wJiZsKys7dmFyIG09bCpoO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIkRFTFRBQ0ZJWFwiLGosXCJieVwiLG0pLGMuY3Z0W2pdKz1tfX19ZnVuY3Rpb24gQWQoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUk9VTkRbXVwiLGMpLGIucm91bmQ9d2Y7dmFyIGQ7c3dpdGNoKDE5MiZjKXtjYXNlIDA6ZD0uNTticmVhaztjYXNlIDY0OmQ9MTticmVhaztjYXNlIDEyODpkPTI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFNST1VORCB2YWx1ZVwiKX1zd2l0Y2goYi5zclBlcmlvZD1kLDQ4JmMpe2Nhc2UgMDpiLnNyUGhhc2U9MDticmVhaztjYXNlIDE2OmIuc3JQaGFzZT0uMjUqZDticmVhaztjYXNlIDMyOmIuc3JQaGFzZT0uNSpkO2JyZWFrO2Nhc2UgNDg6Yi5zclBoYXNlPS43NSpkO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBTUk9VTkQgdmFsdWVcIil9YyY9MTUsYi5zclRocmVzaG9sZD0wPT09Yz8wOihjLzgtLjUpKmR9ZnVuY3Rpb24gQmQoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTNDVST1VORFtdXCIsYyksYi5yb3VuZD13Zjt2YXIgZDtzd2l0Y2goMTkyJmMpe2Nhc2UgMDpkPU1hdGguc3FydCgyKS8yO2JyZWFrO2Nhc2UgNjQ6ZD1NYXRoLnNxcnQoMik7YnJlYWs7Y2FzZSAxMjg6ZD0yKk1hdGguc3FydCgyKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgUzQ1Uk9VTkQgdmFsdWVcIil9c3dpdGNoKGIuc3JQZXJpb2Q9ZCw0OCZjKXtjYXNlIDA6Yi5zclBoYXNlPTA7YnJlYWs7Y2FzZSAxNjpiLnNyUGhhc2U9LjI1KmQ7YnJlYWs7Y2FzZSAzMjpiLnNyUGhhc2U9LjUqZDticmVhaztjYXNlIDQ4OmIuc3JQaGFzZT0uNzUqZDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgUzQ1Uk9VTkQgdmFsdWVcIil9YyY9MTUsYi5zclRocmVzaG9sZD0wPT09Yz8wOihjLzgtLjUpKmR9ZnVuY3Rpb24gQ2QoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUk9GRltdXCIpLGIucm91bmQ9TmJ9ZnVuY3Rpb24gRGQoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlVUR1tdXCIpLGIucm91bmQ9UmJ9ZnVuY3Rpb24gRWQoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUkRUR1tdXCIpLGIucm91bmQ9U2J9ZnVuY3Rpb24gRmQoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTQ0FOQ1RSTFtdXCIsYyl9ZnVuY3Rpb24gR2QoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnoyW2VdLGg9Yy56MVtmXTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTRFBWVExbXCIrYitcIl1cIixlLGYpO3ZhciBpLGo7Yj8oaT1nLnktaC55LGo9aC54LWcueCk6KGk9aC54LWcueCxqPWgueS1nLnkpLGMuZHB2PVViKGksail9ZnVuY3Rpb24gSGQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT0wO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdFVElORk9bXVwiLGQpLDEmZCYmKGU9MzUpLDMyJmQmJihlfD00MDk2KSxjLnB1c2goZSl9ZnVuY3Rpb24gSWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpLGY9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJST0xMW11cIiksYy5wdXNoKGUpLGMucHVzaChkKSxjLnB1c2goZil9ZnVuY3Rpb24gSmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk1BWFtdXCIsZCxlKSxjLnB1c2goTWF0aC5tYXgoZSxkKSl9ZnVuY3Rpb24gS2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk1JTltdXCIsZCxlKSxjLnB1c2goTWF0aC5taW4oZSxkKSl9ZnVuY3Rpb24gTGQoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTQ0FOVFlQRVtdXCIsYyl9ZnVuY3Rpb24gTWQoYil7dmFyIGM9Yi5zdGFjay5wb3AoKSxkPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIklOU1RDVFJMW11cIixjLGQpLGMpe2Nhc2UgMTpyZXR1cm4gdm9pZChiLmluaGliaXRHcmlkRml0PSEhZCk7Y2FzZSAyOnJldHVybiB2b2lkKGIuaWdub3JlQ3Z0PSEhZCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIElOU1RDVFJMW10gc2VsZWN0b3JcIil9fWZ1bmN0aW9uIE5kKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWMucHJvZyxmPWMuaXA7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiUFVTSEJbXCIrYitcIl1cIik7Zm9yKHZhciBnPTA7ZzxiO2crKylkLnB1c2goZVsrK2ZdKTtjLmlwPWZ9ZnVuY3Rpb24gT2QoYixjKXt2YXIgZD1jLmlwLGU9Yy5wcm9nLGY9Yy5zdGFjazthLkRFQlVHJiZjb25zb2xlLmxvZyhjLmlwLFwiUFVTSFdbXCIrYitcIl1cIik7Zm9yKHZhciBnPTA7ZzxiO2crKyl7dmFyIGg9ZVsrK2RdPDw4fGVbKytkXTszMjc2OCZoJiYoaD0tKDErKDY1NTM1XmgpKSksZi5wdXNoKGgpfWMuaXA9ZH1mdW5jdGlvbiBQZChiLGMsZCxlLGYsZyl7dmFyIGgsaSxqLGssbD1nLnN0YWNrLG09YiYmbC5wb3AoKSxuPWwucG9wKCksbz1nLnJwMCxwPWcuejBbb10scT1nLnoxW25dLHI9Zy5taW5EaXMscz1nLmZ2LHQ9Zy5kcHY7aT1oPXQuZGlzdGFuY2UocSxwLCEwLCEwKSxqPWk+PTA/MTotMSxpPU1hdGguYWJzKGkpLGImJihrPWcuY3Z0W21dLGUmJk1hdGguYWJzKGktayk8Zy5jdkN1dEluJiYoaT1rKSksZCYmaTxyJiYoaT1yKSxlJiYoaT1nLnJvdW5kKGkpKSxzLnNldFJlbGF0aXZlKHEscCxqKmksdCkscy50b3VjaChxKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhnLnN0ZXAsKGI/XCJNSVJQW1wiOlwiTURSUFtcIikrKGM/XCJNXCI6XCJtXCIpKyhkP1wiPlwiOlwiX1wiKSsoZT9cIlJcIjpcIl9cIikrKDA9PT1mP1wiR3JcIjoxPT09Zj9cIkJsXCI6Mj09PWY/XCJXaFwiOlwiXCIpK1wiXVwiLGI/bStcIihcIitnLmN2dFttXStcIixcIitrK1wiKVwiOlwiXCIsbixcIihkID1cIixoLFwiLT5cIixqKmksXCIpXCIpLGcucnAxPWcucnAwLGcucnAyPW4sYyYmKGcucnAwPW4pfWZ1bmN0aW9uIFFkKGEpe2E9YXx8e30sYS5lbXB0eXx8KEViKGEuZmFtaWx5TmFtZSxcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIGZhbWlseU5hbWUgaXMgcmVxdWlyZWQuXCIpLEViKGEuc3R5bGVOYW1lLFwiV2hlbiBjcmVhdGluZyBhIG5ldyBGb250IG9iamVjdCwgc3R5bGVOYW1lIGlzIHJlcXVpcmVkLlwiKSxFYihhLnVuaXRzUGVyRW0sXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCB1bml0c1BlckVtIGlzIHJlcXVpcmVkLlwiKSxFYihhLmFzY2VuZGVyLFwiV2hlbiBjcmVhdGluZyBhIG5ldyBGb250IG9iamVjdCwgYXNjZW5kZXIgaXMgcmVxdWlyZWQuXCIpLEViKGEuZGVzY2VuZGVyLFwiV2hlbiBjcmVhdGluZyBhIG5ldyBGb250IG9iamVjdCwgZGVzY2VuZGVyIGlzIHJlcXVpcmVkLlwiKSxFYihhLmRlc2NlbmRlcjwwLFwiRGVzY2VuZGVyIHNob3VsZCBiZSBuZWdhdGl2ZSAoZS5nLiAtNTEyKS5cIiksdGhpcy5uYW1lcz17Zm9udEZhbWlseTp7ZW46YS5mYW1pbHlOYW1lfHxcIiBcIn0sZm9udFN1YmZhbWlseTp7ZW46YS5zdHlsZU5hbWV8fFwiIFwifSxmdWxsTmFtZTp7ZW46YS5mdWxsTmFtZXx8YS5mYW1pbHlOYW1lK1wiIFwiK2Euc3R5bGVOYW1lfSxwb3N0U2NyaXB0TmFtZTp7ZW46YS5wb3N0U2NyaXB0TmFtZXx8KGEuZmFtaWx5TmFtZSthLnN0eWxlTmFtZSkucmVwbGFjZSgvXFxzL2csXCJcIil9LGRlc2lnbmVyOntlbjphLmRlc2lnbmVyfHxcIiBcIn0sZGVzaWduZXJVUkw6e2VuOmEuZGVzaWduZXJVUkx8fFwiIFwifSxtYW51ZmFjdHVyZXI6e2VuOmEubWFudWZhY3R1cmVyfHxcIiBcIn0sbWFudWZhY3R1cmVyVVJMOntlbjphLm1hbnVmYWN0dXJlclVSTHx8XCIgXCJ9LGxpY2Vuc2U6e2VuOmEubGljZW5zZXx8XCIgXCJ9LGxpY2Vuc2VVUkw6e2VuOmEubGljZW5zZVVSTHx8XCIgXCJ9LHZlcnNpb246e2VuOmEudmVyc2lvbnx8XCJWZXJzaW9uIDAuMVwifSxkZXNjcmlwdGlvbjp7ZW46YS5kZXNjcmlwdGlvbnx8XCIgXCJ9LGNvcHlyaWdodDp7ZW46YS5jb3B5cmlnaHR8fFwiIFwifSx0cmFkZW1hcms6e2VuOmEudHJhZGVtYXJrfHxcIiBcIn19LHRoaXMudW5pdHNQZXJFbT1hLnVuaXRzUGVyRW18fDFlMyx0aGlzLmFzY2VuZGVyPWEuYXNjZW5kZXIsdGhpcy5kZXNjZW5kZXI9YS5kZXNjZW5kZXIsdGhpcy5jcmVhdGVkVGltZXN0YW1wPWEuY3JlYXRlZFRpbWVzdGFtcCx0aGlzLnRhYmxlcz17b3MyOnt1c1dlaWdodENsYXNzOmEud2VpZ2h0Q2xhc3N8fHRoaXMudXNXZWlnaHRDbGFzc2VzLk1FRElVTSx1c1dpZHRoQ2xhc3M6YS53aWR0aENsYXNzfHx0aGlzLnVzV2lkdGhDbGFzc2VzLk1FRElVTSxmc1NlbGVjdGlvbjphLmZzU2VsZWN0aW9ufHx0aGlzLmZzU2VsZWN0aW9uVmFsdWVzLlJFR1VMQVJ9fSksdGhpcy5zdXBwb3J0ZWQ9ITAsdGhpcy5nbHlwaHM9bmV3IFNlLkdseXBoU2V0KHRoaXMsYS5nbHlwaHN8fFtdKSx0aGlzLmVuY29kaW5nPW5ldyBYKHRoaXMpLHRoaXMucG9zaXRpb249bmV3IHhiKHRoaXMpLHRoaXMuc3Vic3RpdHV0aW9uPW5ldyB5Yih0aGlzKSx0aGlzLnRhYmxlcz10aGlzLnRhYmxlc3x8e30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJoaW50aW5nXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oaW50aW5nP3RoaXMuX2hpbnRpbmc6XCJ0cnVldHlwZVwiPT09dGhpcy5vdXRsaW5lc0Zvcm1hdD90aGlzLl9oaW50aW5nPW5ldyBNYih0aGlzKTp2b2lkIDB9fSl9ZnVuY3Rpb24gUmQoYSxiKXt2YXIgYz1KU09OLnN0cmluZ2lmeShhKSxkPTI1Njtmb3IodmFyIGUgaW4gYil7dmFyIGY9cGFyc2VJbnQoZSk7aWYoZiYmIShmPDI1Nikpe2lmKEpTT04uc3RyaW5naWZ5KGJbZV0pPT09YylyZXR1cm4gZjtkPD1mJiYoZD1mKzEpfX1yZXR1cm4gYltkXT1hLGR9ZnVuY3Rpb24gU2QoYSxiLGMpe3ZhciBkPVJkKGIubmFtZSxjKTtyZXR1cm5be25hbWU6XCJ0YWdfXCIrYSx0eXBlOlwiVEFHXCIsdmFsdWU6Yi50YWd9LHtuYW1lOlwibWluVmFsdWVfXCIrYSx0eXBlOlwiRklYRURcIix2YWx1ZTpiLm1pblZhbHVlPDwxNn0se25hbWU6XCJkZWZhdWx0VmFsdWVfXCIrYSx0eXBlOlwiRklYRURcIix2YWx1ZTpiLmRlZmF1bHRWYWx1ZTw8MTZ9LHtuYW1lOlwibWF4VmFsdWVfXCIrYSx0eXBlOlwiRklYRURcIix2YWx1ZTpiLm1heFZhbHVlPDwxNn0se25hbWU6XCJmbGFnc19cIithLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcIm5hbWVJRF9cIithLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkfV19ZnVuY3Rpb24gVGQoYSxiLGMpe3ZhciBkPXt9LGU9bmV3IExlLlBhcnNlcihhLGIpO3JldHVybiBkLnRhZz1lLnBhcnNlVGFnKCksZC5taW5WYWx1ZT1lLnBhcnNlRml4ZWQoKSxkLmRlZmF1bHRWYWx1ZT1lLnBhcnNlRml4ZWQoKSxkLm1heFZhbHVlPWUucGFyc2VGaXhlZCgpLGUuc2tpcChcInVTaG9ydFwiLDEpLGQubmFtZT1jW2UucGFyc2VVU2hvcnQoKV18fHt9LGR9ZnVuY3Rpb24gVWQoYSxiLGMsZCl7Zm9yKHZhciBlPVJkKGIubmFtZSxkKSxmPVt7bmFtZTpcIm5hbWVJRF9cIithLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTplfSx7bmFtZTpcImZsYWdzX1wiK2EsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSxnPTA7ZzxjLmxlbmd0aDsrK2cpe3ZhciBoPWNbZ10udGFnO2YucHVzaCh7bmFtZTpcImF4aXNfXCIrYStcIiBcIitoLHR5cGU6XCJGSVhFRFwiLHZhbHVlOmIuY29vcmRpbmF0ZXNbaF08PDE2fSl9cmV0dXJuIGZ9ZnVuY3Rpb24gVmQoYSxiLGMsZCl7dmFyIGU9e30sZj1uZXcgTGUuUGFyc2VyKGEsYik7ZS5uYW1lPWRbZi5wYXJzZVVTaG9ydCgpXXx8e30sZi5za2lwKFwidVNob3J0XCIsMSksZS5jb29yZGluYXRlcz17fTtmb3IodmFyIGc9MDtnPGMubGVuZ3RoOysrZyllLmNvb3JkaW5hdGVzW2NbZ10udGFnXT1mLnBhcnNlRml4ZWQoKTtyZXR1cm4gZX1mdW5jdGlvbiBXZChhLGIpe3ZhciBjPW5ldyBJZS5UYWJsZShcImZ2YXJcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwib2Zmc2V0VG9EYXRhXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiY291bnRTaXplUGFpcnNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Mn0se25hbWU6XCJheGlzQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5heGVzLmxlbmd0aH0se25hbWU6XCJheGlzU2l6ZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToyMH0se25hbWU6XCJpbnN0YW5jZUNvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEuaW5zdGFuY2VzLmxlbmd0aH0se25hbWU6XCJpbnN0YW5jZVNpemVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6NCs0KmEuYXhlcy5sZW5ndGh9XSk7Yy5vZmZzZXRUb0RhdGE9Yy5zaXplT2YoKTtmb3IodmFyIGQ9MDtkPGEuYXhlcy5sZW5ndGg7ZCsrKWMuZmllbGRzPWMuZmllbGRzLmNvbmNhdChTZChkLGEuYXhlc1tkXSxiKSk7Zm9yKHZhciBlPTA7ZTxhLmluc3RhbmNlcy5sZW5ndGg7ZSsrKWMuZmllbGRzPWMuZmllbGRzLmNvbmNhdChVZChlLGEuaW5zdGFuY2VzW2VdLGEuYXhlcyxiKSk7cmV0dXJuIGN9ZnVuY3Rpb24gWGQoYSxiLGMpe3ZhciBkPW5ldyBMZS5QYXJzZXIoYSxiKSxlPWQucGFyc2VVTG9uZygpO3hlLmFyZ3VtZW50KDY1NTM2PT09ZSxcIlVuc3VwcG9ydGVkIGZ2YXIgdGFibGUgdmVyc2lvbi5cIik7dmFyIGY9ZC5wYXJzZU9mZnNldDE2KCk7ZC5za2lwKFwidVNob3J0XCIsMSk7Zm9yKHZhciBnPWQucGFyc2VVU2hvcnQoKSxoPWQucGFyc2VVU2hvcnQoKSxpPWQucGFyc2VVU2hvcnQoKSxqPWQucGFyc2VVU2hvcnQoKSxrPVtdLGw9MDtsPGc7bCsrKWsucHVzaChUZChhLGIrZitsKmgsYykpO2Zvcih2YXIgbT1bXSxuPWIrZitnKmgsbz0wO288aTtvKyspbS5wdXNoKFZkKGEsbitvKmosayxjKSk7cmV0dXJue2F4ZXM6ayxpbnN0YW5jZXM6bX19ZnVuY3Rpb24gWWQoYSxiKXtiPWJ8fDA7dmFyIGM9bmV3IFEoYSxiKSxkPWMucGFyc2VWZXJzaW9uKDEpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09ZHx8MS4xPT09ZCxcIlVuc3VwcG9ydGVkIEdQT1MgdGFibGUgdmVyc2lvbiBcIitkKSwxPT09ZD97dmVyc2lvbjpkLHNjcmlwdHM6Yy5wYXJzZVNjcmlwdExpc3QoKSxmZWF0dXJlczpjLnBhcnNlRmVhdHVyZUxpc3QoKSxsb29rdXBzOmMucGFyc2VMb29rdXBMaXN0KERmKX06e3ZlcnNpb246ZCxzY3JpcHRzOmMucGFyc2VTY3JpcHRMaXN0KCksZmVhdHVyZXM6Yy5wYXJzZUZlYXR1cmVMaXN0KCksbG9va3VwczpjLnBhcnNlTG9va3VwTGlzdChEZiksdmFyaWF0aW9uczpjLnBhcnNlRmVhdHVyZVZhcmlhdGlvbnNMaXN0KCl9fWZ1bmN0aW9uIFpkKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJHUE9TXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjY1NTM2fSx7bmFtZTpcInNjcmlwdHNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuU2NyaXB0TGlzdChhLnNjcmlwdHMpfSx7bmFtZTpcImZlYXR1cmVzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkZlYXR1cmVMaXN0KGEuZmVhdHVyZXMpfSx7bmFtZTpcImxvb2t1cHNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuTG9va3VwTGlzdChhLmxvb2t1cHMsRWYpfV0pfWZ1bmN0aW9uICRkKGEpe3ZhciBiPXt9O2Euc2tpcChcInVTaG9ydFwiKTt2YXIgYz1hLnBhcnNlVVNob3J0KCk7eGUuYXJndW1lbnQoMD09PWMsXCJVbnN1cHBvcnRlZCBrZXJuIHN1Yi10YWJsZSB2ZXJzaW9uLlwiKSxhLnNraXAoXCJ1U2hvcnRcIiwyKTt2YXIgZD1hLnBhcnNlVVNob3J0KCk7YS5za2lwKFwidVNob3J0XCIsMyk7Zm9yKHZhciBlPTA7ZTxkO2UrPTEpe3ZhciBmPWEucGFyc2VVU2hvcnQoKSxnPWEucGFyc2VVU2hvcnQoKSxoPWEucGFyc2VTaG9ydCgpO2JbZitcIixcIitnXT1ofXJldHVybiBifWZ1bmN0aW9uIF9kKGEpe3ZhciBiPXt9O2Euc2tpcChcInVTaG9ydFwiKSxhLnBhcnNlVUxvbmcoKT4xJiZjb25zb2xlLndhcm4oXCJPbmx5IHRoZSBmaXJzdCBrZXJuIHN1YnRhYmxlIGlzIHN1cHBvcnRlZC5cIiksYS5za2lwKFwidUxvbmdcIik7dmFyIGM9YS5wYXJzZVVTaG9ydCgpLGQ9MjU1JmM7aWYoYS5za2lwKFwidVNob3J0XCIpLDA9PT1kKXt2YXIgZT1hLnBhcnNlVVNob3J0KCk7YS5za2lwKFwidVNob3J0XCIsMyk7Zm9yKHZhciBmPTA7ZjxlO2YrPTEpe3ZhciBnPWEucGFyc2VVU2hvcnQoKSxoPWEucGFyc2VVU2hvcnQoKSxpPWEucGFyc2VTaG9ydCgpO2JbZytcIixcIitoXT1pfX1yZXR1cm4gYn1mdW5jdGlvbiBhZShhLGIpe3ZhciBjPW5ldyBMZS5QYXJzZXIoYSxiKSxkPWMucGFyc2VVU2hvcnQoKTtpZigwPT09ZClyZXR1cm4gJGQoYyk7aWYoMT09PWQpcmV0dXJuIF9kKGMpO3Rocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGtlcm4gdGFibGUgdmVyc2lvbiAoXCIrZCtcIikuXCIpfWZ1bmN0aW9uIGJlKGEsYixjLGQpe2Zvcih2YXIgZT1uZXcgTGUuUGFyc2VyKGEsYiksZj1kP2UucGFyc2VVU2hvcnQ6ZS5wYXJzZVVMb25nLGc9W10saD0wO2g8YysxO2grPTEpe3ZhciBpPWYuY2FsbChlKTtkJiYoaSo9MiksZy5wdXNoKGkpfXJldHVybiBnfWZ1bmN0aW9uIGNlKGEsYyl7YihcImZzXCIpLnJlYWRGaWxlKGEsZnVuY3Rpb24oYSxiKXtpZihhKXJldHVybiBjKGEubWVzc2FnZSk7YyhudWxsLENiKGIpKX0pfWZ1bmN0aW9uIGRlKGEsYil7dmFyIGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2Mub3BlbihcImdldFwiLGEsITApLGMucmVzcG9uc2VUeXBlPVwiYXJyYXlidWZmZXJcIixjLm9ubG9hZD1mdW5jdGlvbigpe3JldHVybiBjLnJlc3BvbnNlP2IobnVsbCxjLnJlc3BvbnNlKTpiKFwiRm9udCBjb3VsZCBub3QgYmUgbG9hZGVkOiBcIitjLnN0YXR1c1RleHQpfSxjLm9uZXJyb3I9ZnVuY3Rpb24oKXtiKFwiRm9udCBjb3VsZCBub3QgYmUgbG9hZGVkXCIpfSxjLnNlbmQoKX1mdW5jdGlvbiBlZShhLGIpe2Zvcih2YXIgYz1bXSxkPTEyLGU9MDtlPGI7ZSs9MSl7dmFyIGY9TGUuZ2V0VGFnKGEsZCksZz1MZS5nZXRVTG9uZyhhLGQrNCksaD1MZS5nZXRVTG9uZyhhLGQrOCksaT1MZS5nZXRVTG9uZyhhLGQrMTIpO2MucHVzaCh7dGFnOmYsY2hlY2tzdW06ZyxvZmZzZXQ6aCxsZW5ndGg6aSxjb21wcmVzc2lvbjohMX0pLGQrPTE2fXJldHVybiBjfWZ1bmN0aW9uIGZlKGEsYil7Zm9yKHZhciBjPVtdLGQ9NDQsZT0wO2U8YjtlKz0xKXt2YXIgZj1MZS5nZXRUYWcoYSxkKSxnPUxlLmdldFVMb25nKGEsZCs0KSxoPUxlLmdldFVMb25nKGEsZCs4KSxpPUxlLmdldFVMb25nKGEsZCsxMiksaj12b2lkIDA7aj1oPGkmJlwiV09GRlwiLGMucHVzaCh7dGFnOmYsb2Zmc2V0OmcsY29tcHJlc3Npb246aixjb21wcmVzc2VkTGVuZ3RoOmgsbGVuZ3RoOml9KSxkKz0yMH1yZXR1cm4gY31mdW5jdGlvbiBnZShhLGIpe2lmKFwiV09GRlwiPT09Yi5jb21wcmVzc2lvbil7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoYS5idWZmZXIsYi5vZmZzZXQrMixiLmNvbXByZXNzZWRMZW5ndGgtMiksZD1uZXcgVWludDhBcnJheShiLmxlbmd0aCk7aWYod2UoYyxkKSxkLmJ5dGVMZW5ndGghPT1iLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJEZWNvbXByZXNzaW9uIGVycm9yOiBcIitiLnRhZytcIiBkZWNvbXByZXNzZWQgbGVuZ3RoIGRvZXNuJ3QgbWF0Y2ggcmVjb3JkZWQgbGVuZ3RoXCIpO3JldHVybntkYXRhOm5ldyBEYXRhVmlldyhkLmJ1ZmZlciwwKSxvZmZzZXQ6MH19cmV0dXJue2RhdGE6YSxvZmZzZXQ6Yi5vZmZzZXR9fWZ1bmN0aW9uIGhlKGEpe3ZhciBiLGMsZCxlPW5ldyBRZCh7ZW1wdHk6ITB9KSxmPW5ldyBEYXRhVmlldyhhLDApLGc9W10saD1MZS5nZXRUYWcoZiwwKTtpZihoPT09U3RyaW5nLmZyb21DaGFyQ29kZSgwLDEsMCwwKXx8XCJ0cnVlXCI9PT1ofHxcInR5cDFcIj09PWgpZS5vdXRsaW5lc0Zvcm1hdD1cInRydWV0eXBlXCIsZD1MZS5nZXRVU2hvcnQoZiw0KSxnPWVlKGYsZCk7ZWxzZSBpZihcIk9UVE9cIj09PWgpZS5vdXRsaW5lc0Zvcm1hdD1cImNmZlwiLGQ9TGUuZ2V0VVNob3J0KGYsNCksZz1lZShmLGQpO2Vsc2V7aWYoXCJ3T0ZGXCIhPT1oKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIE9wZW5UeXBlIHNpZ25hdHVyZSBcIitoKTt2YXIgaT1MZS5nZXRUYWcoZiw0KTtpZihpPT09U3RyaW5nLmZyb21DaGFyQ29kZSgwLDEsMCwwKSllLm91dGxpbmVzRm9ybWF0PVwidHJ1ZXR5cGVcIjtlbHNle2lmKFwiT1RUT1wiIT09aSl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBPcGVuVHlwZSBmbGF2b3IgXCIraCk7ZS5vdXRsaW5lc0Zvcm1hdD1cImNmZlwifWQ9TGUuZ2V0VVNob3J0KGYsMTIpLGc9ZmUoZixkKX1mb3IodmFyIGosayxsLG0sbixvLHAscSxyLHMsdCx1PTA7dTxkO3UrPTEpe3ZhciB2PWdbdV0sdz12b2lkIDA7c3dpdGNoKHYudGFnKXtjYXNlXCJjbWFwXCI6dz1nZShmLHYpLGUudGFibGVzLmNtYXA9TWUucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLmVuY29kaW5nPW5ldyBZKGUudGFibGVzLmNtYXApO2JyZWFrO2Nhc2VcImN2dCBcIjp3PWdlKGYsdiksdD1uZXcgTGUuUGFyc2VyKHcuZGF0YSx3Lm9mZnNldCksZS50YWJsZXMuY3Z0PXQucGFyc2VTaG9ydExpc3Qodi5sZW5ndGgvMik7YnJlYWs7Y2FzZVwiZnZhclwiOms9djticmVhaztjYXNlXCJmcGdtXCI6dz1nZShmLHYpLHQ9bmV3IExlLlBhcnNlcih3LmRhdGEsdy5vZmZzZXQpLGUudGFibGVzLmZwZ209dC5wYXJzZUJ5dGVMaXN0KHYubGVuZ3RoKTticmVhaztjYXNlXCJoZWFkXCI6dz1nZShmLHYpLGUudGFibGVzLmhlYWQ9V2UucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLnVuaXRzUGVyRW09ZS50YWJsZXMuaGVhZC51bml0c1BlckVtLGI9ZS50YWJsZXMuaGVhZC5pbmRleFRvTG9jRm9ybWF0O2JyZWFrO2Nhc2VcImhoZWFcIjp3PWdlKGYsdiksZS50YWJsZXMuaGhlYT1YZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUuYXNjZW5kZXI9ZS50YWJsZXMuaGhlYS5hc2NlbmRlcixlLmRlc2NlbmRlcj1lLnRhYmxlcy5oaGVhLmRlc2NlbmRlcixlLm51bWJlck9mSE1ldHJpY3M9ZS50YWJsZXMuaGhlYS5udW1iZXJPZkhNZXRyaWNzO2JyZWFrO2Nhc2VcImhtdHhcIjpvPXY7YnJlYWs7Y2FzZVwibHRhZ1wiOnc9Z2UoZix2KSxjPVplLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCk7YnJlYWs7Y2FzZVwibWF4cFwiOnc9Z2UoZix2KSxlLnRhYmxlcy5tYXhwPSRlLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS5udW1HbHlwaHM9ZS50YWJsZXMubWF4cC5udW1HbHlwaHM7YnJlYWs7Y2FzZVwibmFtZVwiOnI9djticmVhaztjYXNlXCJPUy8yXCI6dz1nZShmLHYpLGUudGFibGVzLm9zMj1qZi5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpO2JyZWFrO2Nhc2VcInBvc3RcIjp3PWdlKGYsdiksZS50YWJsZXMucG9zdD1rZi5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUuZ2x5cGhOYW1lcz1uZXcgJChlLnRhYmxlcy5wb3N0KTticmVhaztjYXNlXCJwcmVwXCI6dz1nZShmLHYpLHQ9bmV3IExlLlBhcnNlcih3LmRhdGEsdy5vZmZzZXQpLGUudGFibGVzLnByZXA9dC5wYXJzZUJ5dGVMaXN0KHYubGVuZ3RoKTticmVhaztjYXNlXCJnbHlmXCI6bD12O2JyZWFrO2Nhc2VcImxvY2FcIjpxPXY7YnJlYWs7Y2FzZVwiQ0ZGIFwiOmo9djticmVhaztjYXNlXCJrZXJuXCI6cD12O2JyZWFrO2Nhc2VcIkdQT1NcIjptPXY7YnJlYWs7Y2FzZVwiR1NVQlwiOm49djticmVhaztjYXNlXCJtZXRhXCI6cz12fX12YXIgeD1nZShmLHIpO2lmKGUudGFibGVzLm5hbWU9Z2YucGFyc2UoeC5kYXRhLHgub2Zmc2V0LGMpLGUubmFtZXM9ZS50YWJsZXMubmFtZSxsJiZxKXt2YXIgeT0wPT09Yix6PWdlKGYscSksQT1IZi5wYXJzZSh6LmRhdGEsei5vZmZzZXQsZS5udW1HbHlwaHMseSksQj1nZShmLGwpO2UuZ2x5cGhzPXZmLnBhcnNlKEIuZGF0YSxCLm9mZnNldCxBLGUpfWVsc2V7aWYoIWopdGhyb3cgbmV3IEVycm9yKFwiRm9udCBkb2Vzbid0IGNvbnRhaW4gVHJ1ZVR5cGUgb3IgQ0ZGIG91dGxpbmVzLlwiKTt2YXIgQz1nZShmLGopO1ZlLnBhcnNlKEMuZGF0YSxDLm9mZnNldCxlKX12YXIgRD1nZShmLG8pO2lmKFllLnBhcnNlKEQuZGF0YSxELm9mZnNldCxlLm51bWJlck9mSE1ldHJpY3MsZS5udW1HbHlwaHMsZS5nbHlwaHMpLF8oZSkscCl7dmFyIEU9Z2UoZixwKTtlLmtlcm5pbmdQYWlycz1HZi5wYXJzZShFLmRhdGEsRS5vZmZzZXQpfWVsc2UgZS5rZXJuaW5nUGFpcnM9e307aWYobSl7dmFyIEY9Z2UoZixtKTtlLnRhYmxlcy5ncG9zPUZmLnBhcnNlKEYuZGF0YSxGLm9mZnNldCksZS5wb3NpdGlvbi5pbml0KCl9aWYobil7dmFyIEc9Z2UoZixuKTtlLnRhYmxlcy5nc3ViPW9mLnBhcnNlKEcuZGF0YSxHLm9mZnNldCl9aWYoayl7dmFyIEg9Z2UoZixrKTtlLnRhYmxlcy5mdmFyPUNmLnBhcnNlKEguZGF0YSxILm9mZnNldCxlLm5hbWVzKX1pZihzKXt2YXIgST1nZShmLHMpO2UudGFibGVzLm1ldGE9cGYucGFyc2UoSS5kYXRhLEkub2Zmc2V0KSxlLm1ldGFzPWUudGFibGVzLm1ldGF9cmV0dXJuIGV9ZnVuY3Rpb24gaWUoYSxiKXsoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHdpbmRvdz9jZTpkZSkoYSxmdW5jdGlvbihhLGMpe2lmKGEpcmV0dXJuIGIoYSk7dmFyIGQ7dHJ5e2Q9aGUoYyl9Y2F0Y2goYSl7cmV0dXJuIGIoYSxudWxsKX1yZXR1cm4gYihudWxsLGQpfSl9ZnVuY3Rpb24gamUoYSl7cmV0dXJuIGhlKENiKGIoXCJmc1wiKS5yZWFkRmlsZVN5bmMoYSkpKX1TdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0fHxmdW5jdGlvbigpe3ZhciBhPWZ1bmN0aW9uKCl7dHJ5e3ZhciBhPXt9LGI9T2JqZWN0LmRlZmluZVByb3BlcnR5LGM9YihhLGEsYSkmJmJ9Y2F0Y2goYSl7fXJldHVybiBjfSgpLGI9ZnVuY3Rpb24oYSl7aWYobnVsbD09dGhpcyl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgYj1TdHJpbmcodGhpcyksYz1iLmxlbmd0aCxkPWE/TnVtYmVyKGEpOjA7aWYoZCE9ZCYmKGQ9MCksIShkPDB8fGQ+PWMpKXt2YXIgZSxmPWIuY2hhckNvZGVBdChkKTtyZXR1cm4gZj49NTUyOTYmJmY8PTU2MzE5JiZjPmQrMSYmKGU9Yi5jaGFyQ29kZUF0KGQrMSkpPj01NjMyMCYmZTw9NTczNDM/MTAyNCooZi01NTI5NikrZS01NjMyMCs2NTUzNjpmfX07YT9hKFN0cmluZy5wcm90b3R5cGUsXCJjb2RlUG9pbnRBdFwiLHt2YWx1ZTpiLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOlN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQ9Yn0oKTt2YXIga2U9MCxsZT0tMyxtZT1uZXcgYyxuZT1uZXcgYyxvZT1uZXcgVWludDhBcnJheSgzMCkscGU9bmV3IFVpbnQxNkFycmF5KDMwKSxxZT1uZXcgVWludDhBcnJheSgzMCkscmU9bmV3IFVpbnQxNkFycmF5KDMwKSxzZT1uZXcgVWludDhBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLHRlPW5ldyBjLHVlPW5ldyBVaW50OEFycmF5KDMyMCksdmU9bmV3IFVpbnQxNkFycmF5KDE2KTtnKG1lLG5lKSxmKG9lLHBlLDQsMyksZihxZSxyZSwyLDEpLG9lWzI4XT0wLHBlWzI4XT0yNTg7dmFyIHdlPW87cS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiBpc05hTih0aGlzLngxKXx8aXNOYU4odGhpcy55MSl8fGlzTmFOKHRoaXMueDIpfHxpc05hTih0aGlzLnkyKX0scS5wcm90b3R5cGUuYWRkUG9pbnQ9ZnVuY3Rpb24oYSxiKXtcIm51bWJlclwiPT10eXBlb2YgYSYmKChpc05hTih0aGlzLngxKXx8aXNOYU4odGhpcy54MikpJiYodGhpcy54MT1hLHRoaXMueDI9YSksYTx0aGlzLngxJiYodGhpcy54MT1hKSxhPnRoaXMueDImJih0aGlzLngyPWEpKSxcIm51bWJlclwiPT10eXBlb2YgYiYmKChpc05hTih0aGlzLnkxKXx8aXNOYU4odGhpcy55MikpJiYodGhpcy55MT1iLHRoaXMueTI9YiksYjx0aGlzLnkxJiYodGhpcy55MT1iKSxiPnRoaXMueTImJih0aGlzLnkyPWIpKX0scS5wcm90b3R5cGUuYWRkWD1mdW5jdGlvbihhKXt0aGlzLmFkZFBvaW50KGEsbnVsbCl9LHEucHJvdG90eXBlLmFkZFk9ZnVuY3Rpb24oYSl7dGhpcy5hZGRQb2ludChudWxsLGEpfSxxLnByb3RvdHlwZS5hZGRCZXppZXI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXt2YXIgaT10aGlzLGo9W2EsYl0saz1bYyxkXSxsPVtlLGZdLG09W2csaF07dGhpcy5hZGRQb2ludChhLGIpLHRoaXMuYWRkUG9pbnQoZyxoKTtmb3IodmFyIG49MDtuPD0xO24rKyl7dmFyIG89NipqW25dLTEyKmtbbl0rNipsW25dLHE9LTMqaltuXSs5Kmtbbl0tOSpsW25dKzMqbVtuXSxyPTMqa1tuXS0zKmpbbl07aWYoMCE9PXEpe3ZhciBzPU1hdGgucG93KG8sMiktNCpyKnE7aWYoIShzPDApKXt2YXIgdD0oLW8rTWF0aC5zcXJ0KHMpKS8oMipxKTswPHQmJnQ8MSYmKDA9PT1uJiZpLmFkZFgocChqW25dLGtbbl0sbFtuXSxtW25dLHQpKSwxPT09biYmaS5hZGRZKHAoaltuXSxrW25dLGxbbl0sbVtuXSx0KSkpO3ZhciB1PSgtby1NYXRoLnNxcnQocykpLygyKnEpOzA8dSYmdTwxJiYoMD09PW4mJmkuYWRkWChwKGpbbl0sa1tuXSxsW25dLG1bbl0sdSkpLDE9PT1uJiZpLmFkZFkocChqW25dLGtbbl0sbFtuXSxtW25dLHUpKSl9fWVsc2V7aWYoMD09PW8pY29udGludWU7dmFyIHY9LXIvbzswPHYmJnY8MSYmKDA9PT1uJiZpLmFkZFgocChqW25dLGtbbl0sbFtuXSxtW25dLHYpKSwxPT09biYmaS5hZGRZKHAoaltuXSxrW25dLGxbbl0sbVtuXSx2KSkpfX19LHEucHJvdG90eXBlLmFkZFF1YWQ9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPWErMi8zKihjLWEpLGg9YisyLzMqKGQtYiksaT1nKzEvMyooZS1hKSxqPWgrMS8zKihmLWIpO3RoaXMuYWRkQmV6aWVyKGEsYixnLGgsaSxqLGUsZil9LHIucHJvdG90eXBlLm1vdmVUbz1mdW5jdGlvbihhLGIpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIk1cIix4OmEseTpifSl9LHIucHJvdG90eXBlLmxpbmVUbz1mdW5jdGlvbihhLGIpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIkxcIix4OmEseTpifSl9LHIucHJvdG90eXBlLmN1cnZlVG89ci5wcm90b3R5cGUuYmV6aWVyQ3VydmVUbz1mdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiQ1wiLHgxOmEseTE6Yix4MjpjLHkyOmQseDplLHk6Zn0pfSxyLnByb3RvdHlwZS5xdWFkVG89ci5wcm90b3R5cGUucXVhZHJhdGljQ3VydmVUbz1mdW5jdGlvbihhLGIsYyxkKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJRXCIseDE6YSx5MTpiLHg6Yyx5OmR9KX0sci5wcm90b3R5cGUuY2xvc2U9ci5wcm90b3R5cGUuY2xvc2VQYXRoPWZ1bmN0aW9uKCl7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiWlwifSl9LHIucHJvdG90eXBlLmV4dGVuZD1mdW5jdGlvbihhKXtpZihhLmNvbW1hbmRzKWE9YS5jb21tYW5kcztlbHNlIGlmKGEgaW5zdGFuY2VvZiBxKXt2YXIgYj1hO3JldHVybiB0aGlzLm1vdmVUbyhiLngxLGIueTEpLHRoaXMubGluZVRvKGIueDIsYi55MSksdGhpcy5saW5lVG8oYi54MixiLnkyKSx0aGlzLmxpbmVUbyhiLngxLGIueTIpLHZvaWQgdGhpcy5jbG9zZSgpfUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuY29tbWFuZHMsYSl9LHIucHJvdG90eXBlLmdldEJvdW5kaW5nQm94PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMsYj1uZXcgcSxjPTAsZD0wLGU9MCxmPTAsZz0wO2c8dGhpcy5jb21tYW5kcy5sZW5ndGg7ZysrKXt2YXIgaD1hLmNvbW1hbmRzW2ddO3N3aXRjaChoLnR5cGUpe2Nhc2VcIk1cIjpiLmFkZFBvaW50KGgueCxoLnkpLGM9ZT1oLngsZD1mPWgueTticmVhaztjYXNlXCJMXCI6Yi5hZGRQb2ludChoLngsaC55KSxlPWgueCxmPWgueTticmVhaztjYXNlXCJRXCI6Yi5hZGRRdWFkKGUsZixoLngxLGgueTEsaC54LGgueSksZT1oLngsZj1oLnk7YnJlYWs7Y2FzZVwiQ1wiOmIuYWRkQmV6aWVyKGUsZixoLngxLGgueTEsaC54MixoLnkyLGgueCxoLnkpLGU9aC54LGY9aC55O2JyZWFrO2Nhc2VcIlpcIjplPWMsZj1kO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBwYXRoIGNvbW1hbmQgXCIraC50eXBlKX19cmV0dXJuIGIuaXNFbXB0eSgpJiZiLmFkZFBvaW50KDAsMCksYn0sci5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2EuYmVnaW5QYXRoKCk7Zm9yKHZhciBjPTA7Yzx0aGlzLmNvbW1hbmRzLmxlbmd0aDtjKz0xKXt2YXIgZD1iLmNvbW1hbmRzW2NdO1wiTVwiPT09ZC50eXBlP2EubW92ZVRvKGQueCxkLnkpOlwiTFwiPT09ZC50eXBlP2EubGluZVRvKGQueCxkLnkpOlwiQ1wiPT09ZC50eXBlP2EuYmV6aWVyQ3VydmVUbyhkLngxLGQueTEsZC54MixkLnkyLGQueCxkLnkpOlwiUVwiPT09ZC50eXBlP2EucXVhZHJhdGljQ3VydmVUbyhkLngxLGQueTEsZC54LGQueSk6XCJaXCI9PT1kLnR5cGUmJmEuY2xvc2VQYXRoKCl9dGhpcy5maWxsJiYoYS5maWxsU3R5bGU9dGhpcy5maWxsLGEuZmlsbCgpKSx0aGlzLnN0cm9rZSYmKGEuc3Ryb2tlU3R5bGU9dGhpcy5zdHJva2UsYS5saW5lV2lkdGg9dGhpcy5zdHJva2VXaWR0aCxhLnN0cm9rZSgpKX0sci5wcm90b3R5cGUudG9QYXRoRGF0YT1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGIpe3JldHVybiBNYXRoLnJvdW5kKGIpPT09Yj9cIlwiK01hdGgucm91bmQoYik6Yi50b0ZpeGVkKGEpfWZ1bmN0aW9uIGMoKXtmb3IodmFyIGE9YXJndW1lbnRzLGM9XCJcIixkPTA7ZDxhcmd1bWVudHMubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF07ZT49MCYmZD4wJiYoYys9XCIgXCIpLGMrPWIoZSl9cmV0dXJuIGN9dmFyIGQ9dGhpczthPXZvaWQgMCE9PWE/YToyO2Zvcih2YXIgZT1cIlwiLGY9MDtmPHRoaXMuY29tbWFuZHMubGVuZ3RoO2YrPTEpe3ZhciBnPWQuY29tbWFuZHNbZl07XCJNXCI9PT1nLnR5cGU/ZSs9XCJNXCIrYyhnLngsZy55KTpcIkxcIj09PWcudHlwZT9lKz1cIkxcIitjKGcueCxnLnkpOlwiQ1wiPT09Zy50eXBlP2UrPVwiQ1wiK2MoZy54MSxnLnkxLGcueDIsZy55MixnLngsZy55KTpcIlFcIj09PWcudHlwZT9lKz1cIlFcIitjKGcueDEsZy55MSxnLngsZy55KTpcIlpcIj09PWcudHlwZSYmKGUrPVwiWlwiKX1yZXR1cm4gZX0sci5wcm90b3R5cGUudG9TVkc9ZnVuY3Rpb24oYSl7dmFyIGI9JzxwYXRoIGQ9XCInO3JldHVybiBiKz10aGlzLnRvUGF0aERhdGEoYSksYis9J1wiJyx0aGlzLmZpbGwmJlwiYmxhY2tcIiE9PXRoaXMuZmlsbCYmKG51bGw9PT10aGlzLmZpbGw/Yis9JyBmaWxsPVwibm9uZVwiJzpiKz0nIGZpbGw9XCInK3RoaXMuZmlsbCsnXCInKSx0aGlzLnN0cm9rZSYmKGIrPScgc3Ryb2tlPVwiJyt0aGlzLnN0cm9rZSsnXCIgc3Ryb2tlLXdpZHRoPVwiJyt0aGlzLnN0cm9rZVdpZHRoKydcIicpLGIrPVwiLz5cIn0sci5wcm90b3R5cGUudG9ET01FbGVtZW50PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMudG9QYXRoRGF0YShhKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJwYXRoXCIpO3JldHVybiBjLnNldEF0dHJpYnV0ZShcImRcIixiKSxjfTt2YXIgeGU9e2ZhaWw6cyxhcmd1bWVudDp0LGFzc2VydDp0fSx5ZT0zMjc2OCx6ZT0yMTQ3NDgzNjQ4LEFlPXt9LEJlPXt9LENlPXt9O0JlLkJZVEU9ZnVuY3Rpb24oYSl7cmV0dXJuIHhlLmFyZ3VtZW50KGE+PTAmJmE8PTI1NSxcIkJ5dGUgdmFsdWUgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMjU1LlwiKSxbYV19LENlLkJZVEU9dSgxKSxCZS5DSEFSPWZ1bmN0aW9uKGEpe3JldHVyblthLmNoYXJDb2RlQXQoMCldfSxDZS5DSEFSPXUoMSksQmUuQ0hBUkFSUkFZPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKz0xKWJbY109YS5jaGFyQ29kZUF0KGMpO3JldHVybiBifSxDZS5DSEFSQVJSQVk9ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSxCZS5VU0hPUlQ9ZnVuY3Rpb24oYSl7cmV0dXJuW2E+PjgmMjU1LDI1NSZhXX0sQ2UuVVNIT1JUPXUoMiksQmUuU0hPUlQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGE+PXllJiYoYT0tKDIqeWUtYSkpLFthPj44JjI1NSwyNTUmYV19LENlLlNIT1JUPXUoMiksQmUuVUlOVDI0PWZ1bmN0aW9uKGEpe3JldHVyblthPj4xNiYyNTUsYT4+OCYyNTUsMjU1JmFdfSxDZS5VSU5UMjQ9dSgzKSxCZS5VTE9ORz1mdW5jdGlvbihhKXtyZXR1cm5bYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLlVMT05HPXUoNCksQmUuTE9ORz1mdW5jdGlvbihhKXtyZXR1cm4gYT49emUmJihhPS0oMip6ZS1hKSksW2E+PjI0JjI1NSxhPj4xNiYyNTUsYT4+OCYyNTUsMjU1JmFdfSxDZS5MT05HPXUoNCksQmUuRklYRUQ9QmUuVUxPTkcsQ2UuRklYRUQ9Q2UuVUxPTkcsQmUuRldPUkQ9QmUuU0hPUlQsQ2UuRldPUkQ9Q2UuU0hPUlQsQmUuVUZXT1JEPUJlLlVTSE9SVCxDZS5VRldPUkQ9Q2UuVVNIT1JULEJlLkxPTkdEQVRFVElNRT1mdW5jdGlvbihhKXtyZXR1cm5bMCwwLDAsMCxhPj4yNCYyNTUsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuTE9OR0RBVEVUSU1FPXUoOCksQmUuVEFHPWZ1bmN0aW9uKGEpe3JldHVybiB4ZS5hcmd1bWVudCg0PT09YS5sZW5ndGgsXCJUYWcgc2hvdWxkIGJlIGV4YWN0bHkgNCBBU0NJSSBjaGFyYWN0ZXJzLlwiKSxbYS5jaGFyQ29kZUF0KDApLGEuY2hhckNvZGVBdCgxKSxhLmNoYXJDb2RlQXQoMiksYS5jaGFyQ29kZUF0KDMpXX0sQ2UuVEFHPXUoNCksQmUuQ2FyZDg9QmUuQllURSxDZS5DYXJkOD1DZS5CWVRFLEJlLkNhcmQxNj1CZS5VU0hPUlQsQ2UuQ2FyZDE2PUNlLlVTSE9SVCxCZS5PZmZTaXplPUJlLkJZVEUsQ2UuT2ZmU2l6ZT1DZS5CWVRFLEJlLlNJRD1CZS5VU0hPUlQsQ2UuU0lEPUNlLlVTSE9SVCxCZS5OVU1CRVI9ZnVuY3Rpb24oYSl7cmV0dXJuIGE+PS0xMDcmJmE8PTEwNz9bYSsxMzldOmE+PTEwOCYmYTw9MTEzMT8oYS09MTA4LFsyNDcrKGE+PjgpLDI1NSZhXSk6YT49LTExMzEmJmE8PS0xMDg/KGE9LWEtMTA4LFsyNTErKGE+PjgpLDI1NSZhXSk6YT49LTMyNzY4JiZhPD0zMjc2Nz9CZS5OVU1CRVIxNihhKTpCZS5OVU1CRVIzMihhKVxufSxDZS5OVU1CRVI9ZnVuY3Rpb24oYSl7cmV0dXJuIEJlLk5VTUJFUihhKS5sZW5ndGh9LEJlLk5VTUJFUjE2PWZ1bmN0aW9uKGEpe3JldHVyblsyOCxhPj44JjI1NSwyNTUmYV19LENlLk5VTUJFUjE2PXUoMyksQmUuTlVNQkVSMzI9ZnVuY3Rpb24oYSl7cmV0dXJuWzI5LGE+PjI0JjI1NSxhPj4xNiYyNTUsYT4+OCYyNTUsMjU1JmFdfSxDZS5OVU1CRVIzMj11KDUpLEJlLlJFQUw9ZnVuY3Rpb24oYSl7dmFyIGI9YS50b1N0cmluZygpLGM9L1xcLihcXGQqPykoPzo5ezUsMjB9fDB7NSwyMH0pXFxkezAsMn0oPzplKC4rKXwkKS8uZXhlYyhiKTtpZihjKXt2YXIgZD1wYXJzZUZsb2F0KFwiMWVcIisoKGNbMl0/K2NbMl06MCkrY1sxXS5sZW5ndGgpKTtiPShNYXRoLnJvdW5kKGEqZCkvZCkudG9TdHJpbmcoKX1mb3IodmFyIGU9XCJcIixmPTAsZz1iLmxlbmd0aDtmPGc7Zis9MSl7dmFyIGg9YltmXTtlKz1cImVcIj09PWg/XCItXCI9PT1iWysrZl0/XCJjXCI6XCJiXCI6XCIuXCI9PT1oP1wiYVwiOlwiLVwiPT09aD9cImVcIjpofWUrPTEmZS5sZW5ndGg/XCJmXCI6XCJmZlwiO2Zvcih2YXIgaT1bMzBdLGo9MCxrPWUubGVuZ3RoO2o8aztqKz0yKWkucHVzaChwYXJzZUludChlLnN1YnN0cihqLDIpLDE2KSk7cmV0dXJuIGl9LENlLlJFQUw9ZnVuY3Rpb24oYSl7cmV0dXJuIEJlLlJFQUwoYSkubGVuZ3RofSxCZS5OQU1FPUJlLkNIQVJBUlJBWSxDZS5OQU1FPUNlLkNIQVJBUlJBWSxCZS5TVFJJTkc9QmUuQ0hBUkFSUkFZLENlLlNUUklORz1DZS5DSEFSQVJSQVksQWUuVVRGOD1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPVtdLGU9YyxmPTA7ZjxlO2YrKyxiKz0xKWRbZl09YS5nZXRVaW50OChiKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGQpfSxBZS5VVEYxNj1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPVtdLGU9Yy8yLGY9MDtmPGU7ZisrLGIrPTIpZFtmXT1hLmdldFVpbnQxNihiKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGQpfSxCZS5VVEYxNj1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YS5sZW5ndGg7Yys9MSl7dmFyIGQ9YS5jaGFyQ29kZUF0KGMpO2JbYi5sZW5ndGhdPWQ+PjgmMjU1LGJbYi5sZW5ndGhdPTI1NSZkfXJldHVybiBifSxDZS5VVEYxNj1mdW5jdGlvbihhKXtyZXR1cm4gMiphLmxlbmd0aH07dmFyIERlPXtcIngtbWFjLWNyb2F0aWFuXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7FoOKEosK0wqjiiaDFvcOY4oiewrHiiaTiiaXiiIbCteKIguKIkeKIj8Wh4oirwqrCus6pxb7DuMK/wqHCrOKImsaS4omIxIbCq8SM4oCmwqDDgMODw5XFksWTxJDigJTigJzigJ3igJjigJnDt+KXiu+jv8Kp4oGE4oKs4oC54oC6w4bCu+KAk8K34oCa4oCe4oCww4LEh8OBxI3DiMONw47Dj8OMw5PDlMSRw5LDmsObw5nEscuGy5zCr8+Aw4vLmsK4w4rDpsuHXCIsXCJ4LW1hYy1jeXJpbGxpY1wiOlwi0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr+KAoMKw0pDCo8Kn4oCiwrbQhsKuwqnihKLQgtGS4omg0IPRk+KInsKx4omk4oml0ZbCtdKR0IjQhNGU0IfRl9CJ0ZnQitGa0ZjQhcKs4oiaxpLiiYjiiIbCq8K74oCmwqDQi9Gb0IzRnNGV4oCT4oCU4oCc4oCd4oCY4oCZw7figJ7QjtGe0I/Rn+KEltCB0ZHRj9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGOXCIsXCJ4LW1hYy1nYWVsaWNcIjpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jhuILCseKJpOKJpeG4g8SKxIvhuIrhuIvhuJ7huJ/EoMSh4bmAw6bDuOG5geG5luG5l8m8xpLFv+G5oMKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnhuaHhupvDv8W44bmq4oKs4oC54oC6xbbFt+G5q8K34buy4buz4oGKw4LDisOBw4vDiMONw47Dj8OMw5PDlOKZo8OSw5rDm8OZxLHDncO9xbTFteG6hOG6heG6gOG6geG6guG6g1wiLFwieC1tYWMtZ3JlZWtcIjpcIsOEwrnCssOJwrPDlsOczoXDoMOiw6TOhMKow6fDqcOow6rDq8Kj4oSiw67Dr+KAosK94oCww7TDtsKm4oKsw7nDu8O84oCgzpPOlM6YzpvOns6gw5/CrsKpzqPOqsKn4omgwrDCt86RwrHiiaTiiaXCpc6SzpXOls6XzpnOms6czqbOq86ozqnOrM6dwqzOn86h4omIzqTCq8K74oCmwqDOpc6nzobOiMWT4oCT4oCV4oCc4oCd4oCY4oCZw7fOic6KzozOjs6tzq7Or8+Mzo/Pjc6xzrLPiM60zrXPhs6zzrfOuc6+zrrOu868zr3Ov8+Az47Pgc+Dz4TOuM+Jz4LPh8+FzrbPis+LzpDOsMKtXCIsXCJ4LW1hYy1pY2VsYW5kaWNcIjpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zDncKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCus6pw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhOKCrMOQw7DDnsO+w73Ct+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvo7/DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIixcIngtbWFjLWludWl0XCI6XCLhkIPhkIThkIXhkIbhkIrhkIvhkLHhkLLhkLPhkLThkLjhkLnhkYnhkY7hkY/hkZDhkZHhkZXhkZbhkabhka3hka7hka/hkbDhkbLhkbPhkoPhkovhkozhko3hko7hkpDhkpHCsOGSoeGSpeGSpuKAosK24ZKnwq7CqeKEouGSqOGSquGSq+GSu+GTguGTg+GThOGTheGTh+GTiOGTkOGTr+GTsOGTseGTsuGTtOGTteGUheGTleGTluGTl+GTmOGTmuGTm+GTquGUqOGUqeGUquGUq+GUreKApsKg4ZSu4ZS+4ZWV4ZWW4ZWX4oCT4oCU4oCc4oCd4oCY4oCZ4ZWY4ZWZ4ZWa4ZWd4ZWG4ZWH4ZWI4ZWJ4ZWL4ZWM4ZWQ4ZW/4ZaA4ZaB4ZaC4ZaD4ZaE4ZaF4ZaP4ZaQ4ZaR4ZaS4ZaT4ZaU4ZaV4Zmx4Zmy4Zmz4Zm04Zm14Zm24ZaW4Zag4Zah4Zai4Zaj4Zak4Zal4Zam4ZW8xYHFglwiLFwieC1tYWMtY2VcIjpcIsOExIDEgcOJxITDlsOcw6HEhcSMw6TEjcSGxIfDqcW5xbrEjsOtxI/EksSTxJbDs8SXw7TDtsO1w7rEmsSbw7zigKDCsMSYwqPCp+KAosK2w5/CrsKp4oSixJnCqOKJoMSjxK7Er8Sq4omk4omlxKvEtuKIguKIkcWCxLvEvMS9xL7EucS6xYXFhsWDwqziiJrFhMWH4oiGwqvCu+KApsKgxYjFkMOVxZHFjOKAk+KAlOKAnOKAneKAmOKAmcO34peKxY3FlMWVxZjigLnigLrFmcWWxZfFoOKAmuKAnsWhxZrFm8OBxaTFpcONxb3FvsWqw5PDlMWrxa7DmsWvxbDFscWyxbPDncO9xLfFu8WBxbzEosuHXCIsbWFjaW50b3NoOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCus6pw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhOKCrOKAueKAuu+sge+sguKAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+jv8OSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiLFwieC1tYWMtcm9tYW5pYW5cIjpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMSCyJjiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrOqcSDyJnCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTigqzigLnigLrImsib4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU76O/w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCIsXCJ4LW1hYy10dXJraXNoXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK6zqnDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W4xJ7En8SwxLHFnsWf4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU76O/w5LDmsObw5nvoqDLhsucwq/LmMuZy5rCuMudy5vLh1wifTtBZS5NQUNTVFJJTkc9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9RGVbZF07aWYodm9pZCAwIT09ZSl7Zm9yKHZhciBmPVwiXCIsZz0wO2c8YztnKyspe3ZhciBoPWEuZ2V0VWludDgoYitnKTtmKz1oPD0xMjc/U3RyaW5nLmZyb21DaGFyQ29kZShoKTplWzEyNyZoXX1yZXR1cm4gZn19O3ZhciBFZSxGZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBXZWFrTWFwJiZuZXcgV2Vha01hcCxHZT1mdW5jdGlvbihhKXtpZighRWUpe0VlPXt9O2Zvcih2YXIgYiBpbiBEZSlFZVtiXT1uZXcgU3RyaW5nKGIpfXZhciBjPUVlW2FdO2lmKHZvaWQgMCE9PWMpe2lmKEZlKXt2YXIgZD1GZS5nZXQoYyk7aWYodm9pZCAwIT09ZClyZXR1cm4gZH12YXIgZT1EZVthXTtpZih2b2lkIDAhPT1lKXtmb3IodmFyIGY9e30sZz0wO2c8ZS5sZW5ndGg7ZysrKWZbZS5jaGFyQ29kZUF0KGcpXT1nKzEyODtyZXR1cm4gRmUmJkZlLnNldChjLGYpLGZ9fX07QmUuTUFDU1RSSU5HPWZ1bmN0aW9uKGEsYil7dmFyIGM9R2UoYik7aWYodm9pZCAwIT09Yyl7Zm9yKHZhciBkPVtdLGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIGY9YS5jaGFyQ29kZUF0KGUpO2lmKGY+PTEyOCYmdm9pZCAwPT09KGY9Y1tmXSkpcmV0dXJuO2RbZV09Zn1yZXR1cm4gZH19LENlLk1BQ1NUUklORz1mdW5jdGlvbihhLGIpe3ZhciBjPUJlLk1BQ1NUUklORyhhLGIpO3JldHVybiB2b2lkIDAhPT1jP2MubGVuZ3RoOjB9LEJlLlZBUkRFTFRBUz1mdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPVtdO2I8YS5sZW5ndGg7KXt2YXIgZD1hW2JdO2I9MD09PWQ/dyhhLGIsYyk6ZD49LTEyOCYmZDw9MTI3P3goYSxiLGMpOnkoYSxiLGMpfXJldHVybiBjfSxCZS5JTkRFWD1mdW5jdGlvbihhKXtmb3IodmFyIGI9MSxjPVtiXSxkPVtdLGU9MDtlPGEubGVuZ3RoO2UrPTEpe3ZhciBmPUJlLk9CSkVDVChhW2VdKTtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkLGYpLGIrPWYubGVuZ3RoLGMucHVzaChiKX1pZigwPT09ZC5sZW5ndGgpcmV0dXJuWzAsMF07Zm9yKHZhciBnPVtdLGg9MStNYXRoLmZsb29yKE1hdGgubG9nKGIpL01hdGgubG9nKDIpKS84fDAsaT1bdm9pZCAwLEJlLkJZVEUsQmUuVVNIT1JULEJlLlVJTlQyNCxCZS5VTE9OR11baF0saj0wO2o8Yy5sZW5ndGg7ais9MSl7dmFyIGs9aShjW2pdKTtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShnLGspfXJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0KEJlLkNhcmQxNihhLmxlbmd0aCksQmUuT2ZmU2l6ZShoKSxnLGQpfSxDZS5JTkRFWD1mdW5jdGlvbihhKXtyZXR1cm4gQmUuSU5ERVgoYSkubGVuZ3RofSxCZS5ESUNUPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPU9iamVjdC5rZXlzKGEpLGQ9Yy5sZW5ndGgsZT0wO2U8ZDtlKz0xKXt2YXIgZj1wYXJzZUludChjW2VdLDApLGc9YVtmXTtiPWIuY29uY2F0KEJlLk9QRVJBTkQoZy52YWx1ZSxnLnR5cGUpKSxiPWIuY29uY2F0KEJlLk9QRVJBVE9SKGYpKX1yZXR1cm4gYn0sQ2UuRElDVD1mdW5jdGlvbihhKXtyZXR1cm4gQmUuRElDVChhKS5sZW5ndGh9LEJlLk9QRVJBVE9SPWZ1bmN0aW9uKGEpe3JldHVybiBhPDEyMDA/W2FdOlsxMixhLTEyMDBdfSxCZS5PUEVSQU5EPWZ1bmN0aW9uKGEsYil7dmFyIGM9W107aWYoQXJyYXkuaXNBcnJheShiKSlmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrPTEpeGUuYXJndW1lbnQoYS5sZW5ndGg9PT1iLmxlbmd0aCxcIk5vdCBlbm91Z2ggYXJndW1lbnRzIGdpdmVuIGZvciB0eXBlXCIrYiksYz1jLmNvbmNhdChCZS5PUEVSQU5EKGFbZF0sYltkXSkpO2Vsc2UgaWYoXCJTSURcIj09PWIpYz1jLmNvbmNhdChCZS5OVU1CRVIoYSkpO2Vsc2UgaWYoXCJvZmZzZXRcIj09PWIpYz1jLmNvbmNhdChCZS5OVU1CRVIzMihhKSk7ZWxzZSBpZihcIm51bWJlclwiPT09YiljPWMuY29uY2F0KEJlLk5VTUJFUihhKSk7ZWxzZXtpZihcInJlYWxcIiE9PWIpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcGVyYW5kIHR5cGUgXCIrYik7Yz1jLmNvbmNhdChCZS5SRUFMKGEpKX1yZXR1cm4gY30sQmUuT1A9QmUuQllURSxDZS5PUD1DZS5CWVRFO3ZhciBIZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBXZWFrTWFwJiZuZXcgV2Vha01hcDtCZS5DSEFSU1RSSU5HPWZ1bmN0aW9uKGEpe2lmKEhlKXt2YXIgYj1IZS5nZXQoYSk7aWYodm9pZCAwIT09YilyZXR1cm4gYn1mb3IodmFyIGM9W10sZD1hLmxlbmd0aCxlPTA7ZTxkO2UrPTEpe3ZhciBmPWFbZV07Yz1jLmNvbmNhdChCZVtmLnR5cGVdKGYudmFsdWUpKX1yZXR1cm4gSGUmJkhlLnNldChhLGMpLGN9LENlLkNIQVJTVFJJTkc9ZnVuY3Rpb24oYSl7cmV0dXJuIEJlLkNIQVJTVFJJTkcoYSkubGVuZ3RofSxCZS5PQkpFQ1Q9ZnVuY3Rpb24oYSl7dmFyIGI9QmVbYS50eXBlXTtyZXR1cm4geGUuYXJndW1lbnQodm9pZCAwIT09YixcIk5vIGVuY29kaW5nIGZ1bmN0aW9uIGZvciB0eXBlIFwiK2EudHlwZSksYihhLnZhbHVlKX0sQ2UuT0JKRUNUPWZ1bmN0aW9uKGEpe3ZhciBiPUNlW2EudHlwZV07cmV0dXJuIHhlLmFyZ3VtZW50KHZvaWQgMCE9PWIsXCJObyBzaXplT2YgZnVuY3Rpb24gZm9yIHR5cGUgXCIrYS50eXBlKSxiKGEudmFsdWUpfSxCZS5UQUJMRT1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz1hLmZpZWxkcy5sZW5ndGgsZD1bXSxlPVtdLGY9MDtmPGM7Zis9MSl7dmFyIGc9YS5maWVsZHNbZl0saD1CZVtnLnR5cGVdO3hlLmFyZ3VtZW50KHZvaWQgMCE9PWgsXCJObyBlbmNvZGluZyBmdW5jdGlvbiBmb3IgZmllbGQgdHlwZSBcIitnLnR5cGUrXCIgKFwiK2cubmFtZStcIilcIik7dmFyIGk9YVtnLm5hbWVdO3ZvaWQgMD09PWkmJihpPWcudmFsdWUpO3ZhciBqPWgoaSk7XCJUQUJMRVwiPT09Zy50eXBlPyhlLnB1c2goYi5sZW5ndGgpLGI9Yi5jb25jYXQoWzAsMF0pLGQucHVzaChqKSk6Yj1iLmNvbmNhdChqKX1mb3IodmFyIGs9MDtrPGQubGVuZ3RoO2srPTEpe3ZhciBsPWVba10sbT1iLmxlbmd0aDt4ZS5hcmd1bWVudChtPDY1NTM2LFwiVGFibGUgXCIrYS50YWJsZU5hbWUrXCIgdG9vIGJpZy5cIiksYltsXT1tPj44LGJbbCsxXT0yNTUmbSxiPWIuY29uY2F0KGRba10pfXJldHVybiBifSxDZS5UQUJMRT1mdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPWEuZmllbGRzLmxlbmd0aCxkPTA7ZDxjO2QrPTEpe3ZhciBlPWEuZmllbGRzW2RdLGY9Q2VbZS50eXBlXTt4ZS5hcmd1bWVudCh2b2lkIDAhPT1mLFwiTm8gc2l6ZU9mIGZ1bmN0aW9uIGZvciBmaWVsZCB0eXBlIFwiK2UudHlwZStcIiAoXCIrZS5uYW1lK1wiKVwiKTt2YXIgZz1hW2UubmFtZV07dm9pZCAwPT09ZyYmKGc9ZS52YWx1ZSksYis9ZihnKSxcIlRBQkxFXCI9PT1lLnR5cGUmJihiKz0yKX1yZXR1cm4gYn0sQmUuUkVDT1JEPUJlLlRBQkxFLENlLlJFQ09SRD1DZS5UQUJMRSxCZS5MSVRFUkFMPWZ1bmN0aW9uKGEpe3JldHVybiBhfSxDZS5MSVRFUkFMPWZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0sei5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIEJlLlRBQkxFKHRoaXMpfSx6LnByb3RvdHlwZS5zaXplT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gQ2UuVEFCTEUodGhpcyl9LEQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoei5wcm90b3R5cGUpLEQucHJvdG90eXBlLmNvbnN0cnVjdG9yPUQsRS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6LnByb3RvdHlwZSksRS5wcm90b3R5cGUuY29uc3RydWN0b3I9RSxGLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHoucHJvdG90eXBlKSxGLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1GLEcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoei5wcm90b3R5cGUpLEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUc7dmFyIEllPXtUYWJsZTp6LFJlY29yZDp6LENvdmVyYWdlOkQsU2NyaXB0TGlzdDpFLEZlYXR1cmVMaXN0OkYsTG9va3VwTGlzdDpHLHVzaG9ydExpc3Q6QSx0YWJsZUxpc3Q6QixyZWNvcmRMaXN0OkN9LEplPXtieXRlOjEsdVNob3J0OjIsc2hvcnQ6Mix1TG9uZzo0LGZpeGVkOjQsbG9uZ0RhdGVUaW1lOjgsdGFnOjR9O1EucHJvdG90eXBlLnBhcnNlQnl0ZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YS5nZXRVaW50OCh0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MSxhfSxRLnByb3RvdHlwZS5wYXJzZUNoYXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0SW50OCh0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MSxhfSxRLnByb3RvdHlwZS5wYXJzZUNhcmQ4PVEucHJvdG90eXBlLnBhcnNlQnl0ZSxRLnByb3RvdHlwZS5wYXJzZVVTaG9ydD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YS5nZXRVaW50MTYodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIsYX0sUS5wcm90b3R5cGUucGFyc2VDYXJkMTY9US5wcm90b3R5cGUucGFyc2VVU2hvcnQsUS5wcm90b3R5cGUucGFyc2VTSUQ9US5wcm90b3R5cGUucGFyc2VVU2hvcnQsUS5wcm90b3R5cGUucGFyc2VPZmZzZXQxNj1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydCxRLnByb3RvdHlwZS5wYXJzZVNob3J0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldEludDE2KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yLGF9LFEucHJvdG90eXBlLnBhcnNlRjJEb3QxND1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YS5nZXRJbnQxNih0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KS8xNjM4NDtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MixhfSxRLnByb3RvdHlwZS5wYXJzZVVMb25nPWZ1bmN0aW9uKCl7dmFyIGE9Syh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTQsYX0sUS5wcm90b3R5cGUucGFyc2VPZmZzZXQzMj1RLnByb3RvdHlwZS5wYXJzZVVMb25nLFEucHJvdG90eXBlLnBhcnNlRml4ZWQ9ZnVuY3Rpb24oKXt2YXIgYT1MKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9NCxhfSxRLnByb3RvdHlwZS5wYXJzZVN0cmluZz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmRhdGEsYz10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGQ9XCJcIjt0aGlzLnJlbGF0aXZlT2Zmc2V0Kz1hO2Zvcih2YXIgZT0wO2U8YTtlKyspZCs9U3RyaW5nLmZyb21DaGFyQ29kZShiLmdldFVpbnQ4KGMrZSkpO3JldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVRhZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlU3RyaW5nKDQpfSxRLnByb3RvdHlwZS5wYXJzZUxvbmdEYXRlVGltZT1mdW5jdGlvbigpe3ZhciBhPUsodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQrNCk7cmV0dXJuIGEtPTIwODI4NDQ4MDAsdGhpcy5yZWxhdGl2ZU9mZnNldCs9OCxhfSxRLnByb3RvdHlwZS5wYXJzZVZlcnNpb249ZnVuY3Rpb24oYSl7dmFyIGI9SSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCksYz1JKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KzIpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz00LHZvaWQgMD09PWEmJihhPTQwOTYpLGIrYy9hLzEwfSxRLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9MSksdGhpcy5yZWxhdGl2ZU9mZnNldCs9SmVbYV0qYn0sUS5wcm90b3R5cGUucGFyc2VVTG9uZ0xpc3Q9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9dGhpcy5wYXJzZVVMb25nKCkpO2Zvcih2YXIgYj1uZXcgQXJyYXkoYSksYz10aGlzLmRhdGEsZD10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGU9MDtlPGE7ZSsrKWJbZV09Yy5nZXRVaW50MzIoZCksZCs9NDtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9NCphLGJ9LFEucHJvdG90eXBlLnBhcnNlT2Zmc2V0MTZMaXN0PVEucHJvdG90eXBlLnBhcnNlVVNob3J0TGlzdD1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT10aGlzLnBhcnNlVVNob3J0KCkpO2Zvcih2YXIgYj1uZXcgQXJyYXkoYSksYz10aGlzLmRhdGEsZD10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGU9MDtlPGE7ZSsrKWJbZV09Yy5nZXRVaW50MTYoZCksZCs9MjtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MiphLGJ9LFEucHJvdG90eXBlLnBhcnNlU2hvcnRMaXN0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1uZXcgQXJyYXkoYSksYz10aGlzLmRhdGEsZD10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGU9MDtlPGE7ZSsrKWJbZV09Yy5nZXRJbnQxNihkKSxkKz0yO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yKmEsYn0sUS5wcm90b3R5cGUucGFyc2VCeXRlTGlzdD1mdW5jdGlvbihhKXtmb3IodmFyIGI9bmV3IEFycmF5KGEpLGM9dGhpcy5kYXRhLGQ9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxlPTA7ZTxhO2UrKyliW2VdPWMuZ2V0VWludDgoZCsrKTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9YSxifSxRLnByb3RvdHlwZS5wYXJzZUxpc3Q9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2J8fChiPWEsYT10aGlzLnBhcnNlVVNob3J0KCkpO2Zvcih2YXIgZD1uZXcgQXJyYXkoYSksZT0wO2U8YTtlKyspZFtlXT1iLmNhbGwoYyk7cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlTGlzdDMyPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztifHwoYj1hLGE9dGhpcy5wYXJzZVVMb25nKCkpO2Zvcih2YXIgZD1uZXcgQXJyYXkoYSksZT0wO2U8YTtlKyspZFtlXT1iLmNhbGwoYyk7cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlUmVjb3JkTGlzdD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Ynx8KGI9YSxhPXRoaXMucGFyc2VVU2hvcnQoKSk7Zm9yKHZhciBkPW5ldyBBcnJheShhKSxlPU9iamVjdC5rZXlzKGIpLGY9MDtmPGE7ZisrKXtmb3IodmFyIGc9e30saD0wO2g8ZS5sZW5ndGg7aCsrKXt2YXIgaT1lW2hdLGo9YltpXTtnW2ldPWouY2FsbChjKX1kW2ZdPWd9cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlUmVjb3JkTGlzdDMyPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztifHwoYj1hLGE9dGhpcy5wYXJzZVVMb25nKCkpO2Zvcih2YXIgZD1uZXcgQXJyYXkoYSksZT1PYmplY3Qua2V5cyhiKSxmPTA7ZjxhO2YrKyl7Zm9yKHZhciBnPXt9LGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGk9ZVtoXSxqPWJbaV07Z1tpXT1qLmNhbGwoYyl9ZFtmXT1nfXJldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVN0cnVjdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGEpcmV0dXJuIGEuY2FsbCh0aGlzKTtmb3IodmFyIGM9T2JqZWN0LmtleXMoYSksZD17fSxlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWNbZV0sZz1hW2ZdO2RbZl09Zy5jYWxsKGIpfXJldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVZhbHVlUmVjb3JkPWZ1bmN0aW9uKGEpe2lmKHZvaWQgMD09PWEmJihhPXRoaXMucGFyc2VVU2hvcnQoKSksMCE9PWEpe3ZhciBiPXt9O3JldHVybiAxJmEmJihiLnhQbGFjZW1lbnQ9dGhpcy5wYXJzZVNob3J0KCkpLDImYSYmKGIueVBsYWNlbWVudD10aGlzLnBhcnNlU2hvcnQoKSksNCZhJiYoYi54QWR2YW5jZT10aGlzLnBhcnNlU2hvcnQoKSksOCZhJiYoYi55QWR2YW5jZT10aGlzLnBhcnNlU2hvcnQoKSksMTYmYSYmKGIueFBsYURldmljZT12b2lkIDAsdGhpcy5wYXJzZVNob3J0KCkpLDMyJmEmJihiLnlQbGFEZXZpY2U9dm9pZCAwLHRoaXMucGFyc2VTaG9ydCgpKSw2NCZhJiYoYi54QWR2RGV2aWNlPXZvaWQgMCx0aGlzLnBhcnNlU2hvcnQoKSksMTI4JmEmJihiLnlBZHZEZXZpY2U9dm9pZCAwLHRoaXMucGFyc2VTaG9ydCgpKSxifX0sUS5wcm90b3R5cGUucGFyc2VWYWx1ZVJlY29yZExpc3Q9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcyxiPXRoaXMucGFyc2VVU2hvcnQoKSxjPXRoaXMucGFyc2VVU2hvcnQoKSxkPW5ldyBBcnJheShjKSxlPTA7ZTxjO2UrKylkW2VdPWEucGFyc2VWYWx1ZVJlY29yZChiKTtyZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VQb2ludGVyPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucGFyc2VPZmZzZXQxNigpO2lmKGI+MClyZXR1cm4gbmV3IFEodGhpcy5kYXRhLHRoaXMub2Zmc2V0K2IpLnBhcnNlU3RydWN0KGEpfSxRLnByb3RvdHlwZS5wYXJzZVBvaW50ZXIzMj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnBhcnNlT2Zmc2V0MzIoKTtpZihiPjApcmV0dXJuIG5ldyBRKHRoaXMuZGF0YSx0aGlzLm9mZnNldCtiKS5wYXJzZVN0cnVjdChhKX0sUS5wcm90b3R5cGUucGFyc2VMaXN0T2ZMaXN0cz1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcyxjPXRoaXMucGFyc2VPZmZzZXQxNkxpc3QoKSxkPWMubGVuZ3RoLGU9dGhpcy5yZWxhdGl2ZU9mZnNldCxmPW5ldyBBcnJheShkKSxnPTA7ZzxkO2crKyl7dmFyIGg9Y1tnXTtpZigwIT09aClpZihiLnJlbGF0aXZlT2Zmc2V0PWgsYSl7Zm9yKHZhciBpPWIucGFyc2VPZmZzZXQxNkxpc3QoKSxqPW5ldyBBcnJheShpLmxlbmd0aCksaz0wO2s8aS5sZW5ndGg7aysrKWIucmVsYXRpdmVPZmZzZXQ9aCtpW2tdLGpba109YS5jYWxsKGIpO2ZbZ109an1lbHNlIGZbZ109Yi5wYXJzZVVTaG9ydExpc3QoKTtlbHNlIGZbZ109dm9pZCAwfXJldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0PWUsZn0sUS5wcm90b3R5cGUucGFyc2VDb3ZlcmFnZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGM9dGhpcy5wYXJzZVVTaG9ydCgpLGQ9dGhpcy5wYXJzZVVTaG9ydCgpO2lmKDE9PT1jKXJldHVybntmb3JtYXQ6MSxnbHlwaHM6dGhpcy5wYXJzZVVTaG9ydExpc3QoZCl9O2lmKDI9PT1jKXtmb3IodmFyIGU9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWVbZl09e3N0YXJ0OmEucGFyc2VVU2hvcnQoKSxlbmQ6YS5wYXJzZVVTaG9ydCgpLGluZGV4OmEucGFyc2VVU2hvcnQoKX07cmV0dXJue2Zvcm1hdDoyLHJhbmdlczplfX10aHJvdyBuZXcgRXJyb3IoXCIweFwiK2IudG9TdHJpbmcoMTYpK1wiOiBDb3ZlcmFnZSBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpfSxRLnByb3RvdHlwZS5wYXJzZUNsYXNzRGVmPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTtpZigxPT09YilyZXR1cm57Zm9ybWF0OjEsc3RhcnRHbHlwaDp0aGlzLnBhcnNlVVNob3J0KCksY2xhc3Nlczp0aGlzLnBhcnNlVVNob3J0TGlzdCgpfTtpZigyPT09YilyZXR1cm57Zm9ybWF0OjIscmFuZ2VzOnRoaXMucGFyc2VSZWNvcmRMaXN0KHtzdGFydDpRLnVTaG9ydCxlbmQ6US51U2hvcnQsY2xhc3NJZDpRLnVTaG9ydH0pfTt0aHJvdyBuZXcgRXJyb3IoXCIweFwiK2EudG9TdHJpbmcoMTYpK1wiOiBDbGFzc0RlZiBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpfSxRLmxpc3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZUxpc3QoYSxiKX19LFEubGlzdDMyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VMaXN0MzIoYSxiKX19LFEucmVjb3JkTGlzdD1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUmVjb3JkTGlzdChhLGIpfX0sUS5yZWNvcmRMaXN0MzI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVJlY29yZExpc3QzMihhLGIpfX0sUS5wb2ludGVyPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcihhKX19LFEucG9pbnRlcjMyPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcjMyKGEpfX0sUS50YWc9US5wcm90b3R5cGUucGFyc2VUYWcsUS5ieXRlPVEucHJvdG90eXBlLnBhcnNlQnl0ZSxRLnVTaG9ydD1RLm9mZnNldDE2PVEucHJvdG90eXBlLnBhcnNlVVNob3J0LFEudVNob3J0TGlzdD1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydExpc3QsUS51TG9uZz1RLm9mZnNldDMyPVEucHJvdG90eXBlLnBhcnNlVUxvbmcsUS51TG9uZ0xpc3Q9US5wcm90b3R5cGUucGFyc2VVTG9uZ0xpc3QsUS5zdHJ1Y3Q9US5wcm90b3R5cGUucGFyc2VTdHJ1Y3QsUS5jb3ZlcmFnZT1RLnByb3RvdHlwZS5wYXJzZUNvdmVyYWdlLFEuY2xhc3NEZWY9US5wcm90b3R5cGUucGFyc2VDbGFzc0RlZjt2YXIgS2U9e3Jlc2VydmVkOlEudVNob3J0LHJlcUZlYXR1cmVJbmRleDpRLnVTaG9ydCxmZWF0dXJlSW5kZXhlczpRLnVTaG9ydExpc3R9O1EucHJvdG90eXBlLnBhcnNlU2NyaXB0TGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcihRLnJlY29yZExpc3Qoe3RhZzpRLnRhZyxzY3JpcHQ6US5wb2ludGVyKHtkZWZhdWx0TGFuZ1N5czpRLnBvaW50ZXIoS2UpLGxhbmdTeXNSZWNvcmRzOlEucmVjb3JkTGlzdCh7dGFnOlEudGFnLGxhbmdTeXM6US5wb2ludGVyKEtlKX0pfSl9KSl8fFtdfSxRLnByb3RvdHlwZS5wYXJzZUZlYXR1cmVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyKFEucmVjb3JkTGlzdCh7dGFnOlEudGFnLGZlYXR1cmU6US5wb2ludGVyKHtmZWF0dXJlUGFyYW1zOlEub2Zmc2V0MTYsbG9va3VwTGlzdEluZGV4ZXM6US51U2hvcnRMaXN0fSl9KSl8fFtdfSxRLnByb3RvdHlwZS5wYXJzZUxvb2t1cExpc3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyKFEubGlzdChRLnBvaW50ZXIoZnVuY3Rpb24oKXt2YXIgYj10aGlzLnBhcnNlVVNob3J0KCk7eGUuYXJndW1lbnQoMTw9YiYmYjw9OSxcIkdQT1MvR1NVQiBsb29rdXAgdHlwZSBcIitiK1wiIHVua25vd24uXCIpO3ZhciBjPXRoaXMucGFyc2VVU2hvcnQoKSxkPTE2JmM7cmV0dXJue2xvb2t1cFR5cGU6Yixsb29rdXBGbGFnOmMsc3VidGFibGVzOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihhW2JdKSksbWFya0ZpbHRlcmluZ1NldDpkP3RoaXMucGFyc2VVU2hvcnQoKTp2b2lkIDB9fSkpKXx8W119LFEucHJvdG90eXBlLnBhcnNlRmVhdHVyZVZhcmlhdGlvbnNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyMzIoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCksYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hJiZiPDEsXCJHUE9TL0dTVUIgZmVhdHVyZSB2YXJpYXRpb25zIHRhYmxlIHVua25vd24uXCIpLHRoaXMucGFyc2VSZWNvcmRMaXN0MzIoe2NvbmRpdGlvblNldE9mZnNldDpRLm9mZnNldDMyLGZlYXR1cmVUYWJsZVN1YnN0aXR1dGlvbk9mZnNldDpRLm9mZnNldDMyfSl9KXx8W119O3ZhciBMZT17Z2V0Qnl0ZTpILGdldENhcmQ4OkgsZ2V0VVNob3J0OkksZ2V0Q2FyZDE2OkksZ2V0U2hvcnQ6SixnZXRVTG9uZzpLLGdldEZpeGVkOkwsZ2V0VGFnOk0sZ2V0T2Zmc2V0Ok4sZ2V0Qnl0ZXM6TyxieXRlc1RvU3RyaW5nOlAsUGFyc2VyOlF9LE1lPXtwYXJzZTpULG1ha2U6V30sTmU9W1wiLm5vdGRlZlwiLFwic3BhY2VcIixcImV4Y2xhbVwiLFwicXVvdGVkYmxcIixcIm51bWJlcnNpZ25cIixcImRvbGxhclwiLFwicGVyY2VudFwiLFwiYW1wZXJzYW5kXCIsXCJxdW90ZXJpZ2h0XCIsXCJwYXJlbmxlZnRcIixcInBhcmVucmlnaHRcIixcImFzdGVyaXNrXCIsXCJwbHVzXCIsXCJjb21tYVwiLFwiaHlwaGVuXCIsXCJwZXJpb2RcIixcInNsYXNoXCIsXCJ6ZXJvXCIsXCJvbmVcIixcInR3b1wiLFwidGhyZWVcIixcImZvdXJcIixcImZpdmVcIixcInNpeFwiLFwic2V2ZW5cIixcImVpZ2h0XCIsXCJuaW5lXCIsXCJjb2xvblwiLFwic2VtaWNvbG9uXCIsXCJsZXNzXCIsXCJlcXVhbFwiLFwiZ3JlYXRlclwiLFwicXVlc3Rpb25cIixcImF0XCIsXCJBXCIsXCJCXCIsXCJDXCIsXCJEXCIsXCJFXCIsXCJGXCIsXCJHXCIsXCJIXCIsXCJJXCIsXCJKXCIsXCJLXCIsXCJMXCIsXCJNXCIsXCJOXCIsXCJPXCIsXCJQXCIsXCJRXCIsXCJSXCIsXCJTXCIsXCJUXCIsXCJVXCIsXCJWXCIsXCJXXCIsXCJYXCIsXCJZXCIsXCJaXCIsXCJicmFja2V0bGVmdFwiLFwiYmFja3NsYXNoXCIsXCJicmFja2V0cmlnaHRcIixcImFzY2lpY2lyY3VtXCIsXCJ1bmRlcnNjb3JlXCIsXCJxdW90ZWxlZnRcIixcImFcIixcImJcIixcImNcIixcImRcIixcImVcIixcImZcIixcImdcIixcImhcIixcImlcIixcImpcIixcImtcIixcImxcIixcIm1cIixcIm5cIixcIm9cIixcInBcIixcInFcIixcInJcIixcInNcIixcInRcIixcInVcIixcInZcIixcIndcIixcInhcIixcInlcIixcInpcIixcImJyYWNlbGVmdFwiLFwiYmFyXCIsXCJicmFjZXJpZ2h0XCIsXCJhc2NpaXRpbGRlXCIsXCJleGNsYW1kb3duXCIsXCJjZW50XCIsXCJzdGVybGluZ1wiLFwiZnJhY3Rpb25cIixcInllblwiLFwiZmxvcmluXCIsXCJzZWN0aW9uXCIsXCJjdXJyZW5jeVwiLFwicXVvdGVzaW5nbGVcIixcInF1b3RlZGJsbGVmdFwiLFwiZ3VpbGxlbW90bGVmdFwiLFwiZ3VpbHNpbmdsbGVmdFwiLFwiZ3VpbHNpbmdscmlnaHRcIixcImZpXCIsXCJmbFwiLFwiZW5kYXNoXCIsXCJkYWdnZXJcIixcImRhZ2dlcmRibFwiLFwicGVyaW9kY2VudGVyZWRcIixcInBhcmFncmFwaFwiLFwiYnVsbGV0XCIsXCJxdW90ZXNpbmdsYmFzZVwiLFwicXVvdGVkYmxiYXNlXCIsXCJxdW90ZWRibHJpZ2h0XCIsXCJndWlsbGVtb3RyaWdodFwiLFwiZWxsaXBzaXNcIixcInBlcnRob3VzYW5kXCIsXCJxdWVzdGlvbmRvd25cIixcImdyYXZlXCIsXCJhY3V0ZVwiLFwiY2lyY3VtZmxleFwiLFwidGlsZGVcIixcIm1hY3JvblwiLFwiYnJldmVcIixcImRvdGFjY2VudFwiLFwiZGllcmVzaXNcIixcInJpbmdcIixcImNlZGlsbGFcIixcImh1bmdhcnVtbGF1dFwiLFwib2dvbmVrXCIsXCJjYXJvblwiLFwiZW1kYXNoXCIsXCJBRVwiLFwib3JkZmVtaW5pbmVcIixcIkxzbGFzaFwiLFwiT3NsYXNoXCIsXCJPRVwiLFwib3JkbWFzY3VsaW5lXCIsXCJhZVwiLFwiZG90bGVzc2lcIixcImxzbGFzaFwiLFwib3NsYXNoXCIsXCJvZVwiLFwiZ2VybWFuZGJsc1wiLFwib25lc3VwZXJpb3JcIixcImxvZ2ljYWxub3RcIixcIm11XCIsXCJ0cmFkZW1hcmtcIixcIkV0aFwiLFwib25laGFsZlwiLFwicGx1c21pbnVzXCIsXCJUaG9yblwiLFwib25lcXVhcnRlclwiLFwiZGl2aWRlXCIsXCJicm9rZW5iYXJcIixcImRlZ3JlZVwiLFwidGhvcm5cIixcInRocmVlcXVhcnRlcnNcIixcInR3b3N1cGVyaW9yXCIsXCJyZWdpc3RlcmVkXCIsXCJtaW51c1wiLFwiZXRoXCIsXCJtdWx0aXBseVwiLFwidGhyZWVzdXBlcmlvclwiLFwiY29weXJpZ2h0XCIsXCJBYWN1dGVcIixcIkFjaXJjdW1mbGV4XCIsXCJBZGllcmVzaXNcIixcIkFncmF2ZVwiLFwiQXJpbmdcIixcIkF0aWxkZVwiLFwiQ2NlZGlsbGFcIixcIkVhY3V0ZVwiLFwiRWNpcmN1bWZsZXhcIixcIkVkaWVyZXNpc1wiLFwiRWdyYXZlXCIsXCJJYWN1dGVcIixcIkljaXJjdW1mbGV4XCIsXCJJZGllcmVzaXNcIixcIklncmF2ZVwiLFwiTnRpbGRlXCIsXCJPYWN1dGVcIixcIk9jaXJjdW1mbGV4XCIsXCJPZGllcmVzaXNcIixcIk9ncmF2ZVwiLFwiT3RpbGRlXCIsXCJTY2Fyb25cIixcIlVhY3V0ZVwiLFwiVWNpcmN1bWZsZXhcIixcIlVkaWVyZXNpc1wiLFwiVWdyYXZlXCIsXCJZYWN1dGVcIixcIllkaWVyZXNpc1wiLFwiWmNhcm9uXCIsXCJhYWN1dGVcIixcImFjaXJjdW1mbGV4XCIsXCJhZGllcmVzaXNcIixcImFncmF2ZVwiLFwiYXJpbmdcIixcImF0aWxkZVwiLFwiY2NlZGlsbGFcIixcImVhY3V0ZVwiLFwiZWNpcmN1bWZsZXhcIixcImVkaWVyZXNpc1wiLFwiZWdyYXZlXCIsXCJpYWN1dGVcIixcImljaXJjdW1mbGV4XCIsXCJpZGllcmVzaXNcIixcImlncmF2ZVwiLFwibnRpbGRlXCIsXCJvYWN1dGVcIixcIm9jaXJjdW1mbGV4XCIsXCJvZGllcmVzaXNcIixcIm9ncmF2ZVwiLFwib3RpbGRlXCIsXCJzY2Fyb25cIixcInVhY3V0ZVwiLFwidWNpcmN1bWZsZXhcIixcInVkaWVyZXNpc1wiLFwidWdyYXZlXCIsXCJ5YWN1dGVcIixcInlkaWVyZXNpc1wiLFwiemNhcm9uXCIsXCJleGNsYW1zbWFsbFwiLFwiSHVuZ2FydW1sYXV0c21hbGxcIixcImRvbGxhcm9sZHN0eWxlXCIsXCJkb2xsYXJzdXBlcmlvclwiLFwiYW1wZXJzYW5kc21hbGxcIixcIkFjdXRlc21hbGxcIixcInBhcmVubGVmdHN1cGVyaW9yXCIsXCJwYXJlbnJpZ2h0c3VwZXJpb3JcIixcIjI2NiBmZlwiLFwib25lZG90ZW5sZWFkZXJcIixcInplcm9vbGRzdHlsZVwiLFwib25lb2xkc3R5bGVcIixcInR3b29sZHN0eWxlXCIsXCJ0aHJlZW9sZHN0eWxlXCIsXCJmb3Vyb2xkc3R5bGVcIixcImZpdmVvbGRzdHlsZVwiLFwic2l4b2xkc3R5bGVcIixcInNldmVub2xkc3R5bGVcIixcImVpZ2h0b2xkc3R5bGVcIixcIm5pbmVvbGRzdHlsZVwiLFwiY29tbWFzdXBlcmlvclwiLFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLFwicGVyaW9kc3VwZXJpb3JcIixcInF1ZXN0aW9uc21hbGxcIixcImFzdXBlcmlvclwiLFwiYnN1cGVyaW9yXCIsXCJjZW50c3VwZXJpb3JcIixcImRzdXBlcmlvclwiLFwiZXN1cGVyaW9yXCIsXCJpc3VwZXJpb3JcIixcImxzdXBlcmlvclwiLFwibXN1cGVyaW9yXCIsXCJuc3VwZXJpb3JcIixcIm9zdXBlcmlvclwiLFwicnN1cGVyaW9yXCIsXCJzc3VwZXJpb3JcIixcInRzdXBlcmlvclwiLFwiZmZcIixcImZmaVwiLFwiZmZsXCIsXCJwYXJlbmxlZnRpbmZlcmlvclwiLFwicGFyZW5yaWdodGluZmVyaW9yXCIsXCJDaXJjdW1mbGV4c21hbGxcIixcImh5cGhlbnN1cGVyaW9yXCIsXCJHcmF2ZXNtYWxsXCIsXCJBc21hbGxcIixcIkJzbWFsbFwiLFwiQ3NtYWxsXCIsXCJEc21hbGxcIixcIkVzbWFsbFwiLFwiRnNtYWxsXCIsXCJHc21hbGxcIixcIkhzbWFsbFwiLFwiSXNtYWxsXCIsXCJKc21hbGxcIixcIktzbWFsbFwiLFwiTHNtYWxsXCIsXCJNc21hbGxcIixcIk5zbWFsbFwiLFwiT3NtYWxsXCIsXCJQc21hbGxcIixcIlFzbWFsbFwiLFwiUnNtYWxsXCIsXCJTc21hbGxcIixcIlRzbWFsbFwiLFwiVXNtYWxsXCIsXCJWc21hbGxcIixcIldzbWFsbFwiLFwiWHNtYWxsXCIsXCJZc21hbGxcIixcIlpzbWFsbFwiLFwiY29sb25tb25ldGFyeVwiLFwib25lZml0dGVkXCIsXCJydXBpYWhcIixcIlRpbGRlc21hbGxcIixcImV4Y2xhbWRvd25zbWFsbFwiLFwiY2VudG9sZHN0eWxlXCIsXCJMc2xhc2hzbWFsbFwiLFwiU2Nhcm9uc21hbGxcIixcIlpjYXJvbnNtYWxsXCIsXCJEaWVyZXNpc3NtYWxsXCIsXCJCcmV2ZXNtYWxsXCIsXCJDYXJvbnNtYWxsXCIsXCJEb3RhY2NlbnRzbWFsbFwiLFwiTWFjcm9uc21hbGxcIixcImZpZ3VyZWRhc2hcIixcImh5cGhlbmluZmVyaW9yXCIsXCJPZ29uZWtzbWFsbFwiLFwiUmluZ3NtYWxsXCIsXCJDZWRpbGxhc21hbGxcIixcInF1ZXN0aW9uZG93bnNtYWxsXCIsXCJvbmVlaWdodGhcIixcInRocmVlZWlnaHRoc1wiLFwiZml2ZWVpZ2h0aHNcIixcInNldmVuZWlnaHRoc1wiLFwib25ldGhpcmRcIixcInR3b3RoaXJkc1wiLFwiemVyb3N1cGVyaW9yXCIsXCJmb3Vyc3VwZXJpb3JcIixcImZpdmVzdXBlcmlvclwiLFwic2l4c3VwZXJpb3JcIixcInNldmVuc3VwZXJpb3JcIixcImVpZ2h0c3VwZXJpb3JcIixcIm5pbmVzdXBlcmlvclwiLFwiemVyb2luZmVyaW9yXCIsXCJvbmVpbmZlcmlvclwiLFwidHdvaW5mZXJpb3JcIixcInRocmVlaW5mZXJpb3JcIixcImZvdXJpbmZlcmlvclwiLFwiZml2ZWluZmVyaW9yXCIsXCJzaXhpbmZlcmlvclwiLFwic2V2ZW5pbmZlcmlvclwiLFwiZWlnaHRpbmZlcmlvclwiLFwibmluZWluZmVyaW9yXCIsXCJjZW50aW5mZXJpb3JcIixcImRvbGxhcmluZmVyaW9yXCIsXCJwZXJpb2RpbmZlcmlvclwiLFwiY29tbWFpbmZlcmlvclwiLFwiQWdyYXZlc21hbGxcIixcIkFhY3V0ZXNtYWxsXCIsXCJBY2lyY3VtZmxleHNtYWxsXCIsXCJBdGlsZGVzbWFsbFwiLFwiQWRpZXJlc2lzc21hbGxcIixcIkFyaW5nc21hbGxcIixcIkFFc21hbGxcIixcIkNjZWRpbGxhc21hbGxcIixcIkVncmF2ZXNtYWxsXCIsXCJFYWN1dGVzbWFsbFwiLFwiRWNpcmN1bWZsZXhzbWFsbFwiLFwiRWRpZXJlc2lzc21hbGxcIixcIklncmF2ZXNtYWxsXCIsXCJJYWN1dGVzbWFsbFwiLFwiSWNpcmN1bWZsZXhzbWFsbFwiLFwiSWRpZXJlc2lzc21hbGxcIixcIkV0aHNtYWxsXCIsXCJOdGlsZGVzbWFsbFwiLFwiT2dyYXZlc21hbGxcIixcIk9hY3V0ZXNtYWxsXCIsXCJPY2lyY3VtZmxleHNtYWxsXCIsXCJPdGlsZGVzbWFsbFwiLFwiT2RpZXJlc2lzc21hbGxcIixcIk9Fc21hbGxcIixcIk9zbGFzaHNtYWxsXCIsXCJVZ3JhdmVzbWFsbFwiLFwiVWFjdXRlc21hbGxcIixcIlVjaXJjdW1mbGV4c21hbGxcIixcIlVkaWVyZXNpc3NtYWxsXCIsXCJZYWN1dGVzbWFsbFwiLFwiVGhvcm5zbWFsbFwiLFwiWWRpZXJlc2lzc21hbGxcIixcIjAwMS4wMDBcIixcIjAwMS4wMDFcIixcIjAwMS4wMDJcIixcIjAwMS4wMDNcIixcIkJsYWNrXCIsXCJCb2xkXCIsXCJCb29rXCIsXCJMaWdodFwiLFwiTWVkaXVtXCIsXCJSZWd1bGFyXCIsXCJSb21hblwiLFwiU2VtaWJvbGRcIl0sT2U9W1wiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcInNwYWNlXCIsXCJleGNsYW1cIixcInF1b3RlZGJsXCIsXCJudW1iZXJzaWduXCIsXCJkb2xsYXJcIixcInBlcmNlbnRcIixcImFtcGVyc2FuZFwiLFwicXVvdGVyaWdodFwiLFwicGFyZW5sZWZ0XCIsXCJwYXJlbnJpZ2h0XCIsXCJhc3Rlcmlza1wiLFwicGx1c1wiLFwiY29tbWFcIixcImh5cGhlblwiLFwicGVyaW9kXCIsXCJzbGFzaFwiLFwiemVyb1wiLFwib25lXCIsXCJ0d29cIixcInRocmVlXCIsXCJmb3VyXCIsXCJmaXZlXCIsXCJzaXhcIixcInNldmVuXCIsXCJlaWdodFwiLFwibmluZVwiLFwiY29sb25cIixcInNlbWljb2xvblwiLFwibGVzc1wiLFwiZXF1YWxcIixcImdyZWF0ZXJcIixcInF1ZXN0aW9uXCIsXCJhdFwiLFwiQVwiLFwiQlwiLFwiQ1wiLFwiRFwiLFwiRVwiLFwiRlwiLFwiR1wiLFwiSFwiLFwiSVwiLFwiSlwiLFwiS1wiLFwiTFwiLFwiTVwiLFwiTlwiLFwiT1wiLFwiUFwiLFwiUVwiLFwiUlwiLFwiU1wiLFwiVFwiLFwiVVwiLFwiVlwiLFwiV1wiLFwiWFwiLFwiWVwiLFwiWlwiLFwiYnJhY2tldGxlZnRcIixcImJhY2tzbGFzaFwiLFwiYnJhY2tldHJpZ2h0XCIsXCJhc2NpaWNpcmN1bVwiLFwidW5kZXJzY29yZVwiLFwicXVvdGVsZWZ0XCIsXCJhXCIsXCJiXCIsXCJjXCIsXCJkXCIsXCJlXCIsXCJmXCIsXCJnXCIsXCJoXCIsXCJpXCIsXCJqXCIsXCJrXCIsXCJsXCIsXCJtXCIsXCJuXCIsXCJvXCIsXCJwXCIsXCJxXCIsXCJyXCIsXCJzXCIsXCJ0XCIsXCJ1XCIsXCJ2XCIsXCJ3XCIsXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJicmFjZWxlZnRcIixcImJhclwiLFwiYnJhY2VyaWdodFwiLFwiYXNjaWl0aWxkZVwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJleGNsYW1kb3duXCIsXCJjZW50XCIsXCJzdGVybGluZ1wiLFwiZnJhY3Rpb25cIixcInllblwiLFwiZmxvcmluXCIsXCJzZWN0aW9uXCIsXCJjdXJyZW5jeVwiLFwicXVvdGVzaW5nbGVcIixcInF1b3RlZGJsbGVmdFwiLFwiZ3VpbGxlbW90bGVmdFwiLFwiZ3VpbHNpbmdsbGVmdFwiLFwiZ3VpbHNpbmdscmlnaHRcIixcImZpXCIsXCJmbFwiLFwiXCIsXCJlbmRhc2hcIixcImRhZ2dlclwiLFwiZGFnZ2VyZGJsXCIsXCJwZXJpb2RjZW50ZXJlZFwiLFwiXCIsXCJwYXJhZ3JhcGhcIixcImJ1bGxldFwiLFwicXVvdGVzaW5nbGJhc2VcIixcInF1b3RlZGJsYmFzZVwiLFwicXVvdGVkYmxyaWdodFwiLFwiZ3VpbGxlbW90cmlnaHRcIixcImVsbGlwc2lzXCIsXCJwZXJ0aG91c2FuZFwiLFwiXCIsXCJxdWVzdGlvbmRvd25cIixcIlwiLFwiZ3JhdmVcIixcImFjdXRlXCIsXCJjaXJjdW1mbGV4XCIsXCJ0aWxkZVwiLFwibWFjcm9uXCIsXCJicmV2ZVwiLFwiZG90YWNjZW50XCIsXCJkaWVyZXNpc1wiLFwiXCIsXCJyaW5nXCIsXCJjZWRpbGxhXCIsXCJcIixcImh1bmdhcnVtbGF1dFwiLFwib2dvbmVrXCIsXCJjYXJvblwiLFwiZW1kYXNoXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIkFFXCIsXCJcIixcIm9yZGZlbWluaW5lXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIkxzbGFzaFwiLFwiT3NsYXNoXCIsXCJPRVwiLFwib3JkbWFzY3VsaW5lXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiYWVcIixcIlwiLFwiXCIsXCJcIixcImRvdGxlc3NpXCIsXCJcIixcIlwiLFwibHNsYXNoXCIsXCJvc2xhc2hcIixcIm9lXCIsXCJnZXJtYW5kYmxzXCJdLFBlPVtcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJzcGFjZVwiLFwiZXhjbGFtc21hbGxcIixcIkh1bmdhcnVtbGF1dHNtYWxsXCIsXCJcIixcImRvbGxhcm9sZHN0eWxlXCIsXCJkb2xsYXJzdXBlcmlvclwiLFwiYW1wZXJzYW5kc21hbGxcIixcIkFjdXRlc21hbGxcIixcInBhcmVubGVmdHN1cGVyaW9yXCIsXCJwYXJlbnJpZ2h0c3VwZXJpb3JcIixcInR3b2RvdGVubGVhZGVyXCIsXCJvbmVkb3RlbmxlYWRlclwiLFwiY29tbWFcIixcImh5cGhlblwiLFwicGVyaW9kXCIsXCJmcmFjdGlvblwiLFwiemVyb29sZHN0eWxlXCIsXCJvbmVvbGRzdHlsZVwiLFwidHdvb2xkc3R5bGVcIixcInRocmVlb2xkc3R5bGVcIixcImZvdXJvbGRzdHlsZVwiLFwiZml2ZW9sZHN0eWxlXCIsXCJzaXhvbGRzdHlsZVwiLFwic2V2ZW5vbGRzdHlsZVwiLFwiZWlnaHRvbGRzdHlsZVwiLFwibmluZW9sZHN0eWxlXCIsXCJjb2xvblwiLFwic2VtaWNvbG9uXCIsXCJjb21tYXN1cGVyaW9yXCIsXCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoXCIsXCJwZXJpb2RzdXBlcmlvclwiLFwicXVlc3Rpb25zbWFsbFwiLFwiXCIsXCJhc3VwZXJpb3JcIixcImJzdXBlcmlvclwiLFwiY2VudHN1cGVyaW9yXCIsXCJkc3VwZXJpb3JcIixcImVzdXBlcmlvclwiLFwiXCIsXCJcIixcImlzdXBlcmlvclwiLFwiXCIsXCJcIixcImxzdXBlcmlvclwiLFwibXN1cGVyaW9yXCIsXCJuc3VwZXJpb3JcIixcIm9zdXBlcmlvclwiLFwiXCIsXCJcIixcInJzdXBlcmlvclwiLFwic3N1cGVyaW9yXCIsXCJ0c3VwZXJpb3JcIixcIlwiLFwiZmZcIixcImZpXCIsXCJmbFwiLFwiZmZpXCIsXCJmZmxcIixcInBhcmVubGVmdGluZmVyaW9yXCIsXCJcIixcInBhcmVucmlnaHRpbmZlcmlvclwiLFwiQ2lyY3VtZmxleHNtYWxsXCIsXCJoeXBoZW5zdXBlcmlvclwiLFwiR3JhdmVzbWFsbFwiLFwiQXNtYWxsXCIsXCJCc21hbGxcIixcIkNzbWFsbFwiLFwiRHNtYWxsXCIsXCJFc21hbGxcIixcIkZzbWFsbFwiLFwiR3NtYWxsXCIsXCJIc21hbGxcIixcIklzbWFsbFwiLFwiSnNtYWxsXCIsXCJLc21hbGxcIixcIkxzbWFsbFwiLFwiTXNtYWxsXCIsXCJOc21hbGxcIixcIk9zbWFsbFwiLFwiUHNtYWxsXCIsXCJRc21hbGxcIixcIlJzbWFsbFwiLFwiU3NtYWxsXCIsXCJUc21hbGxcIixcIlVzbWFsbFwiLFwiVnNtYWxsXCIsXCJXc21hbGxcIixcIlhzbWFsbFwiLFwiWXNtYWxsXCIsXCJac21hbGxcIixcImNvbG9ubW9uZXRhcnlcIixcIm9uZWZpdHRlZFwiLFwicnVwaWFoXCIsXCJUaWxkZXNtYWxsXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcImV4Y2xhbWRvd25zbWFsbFwiLFwiY2VudG9sZHN0eWxlXCIsXCJMc2xhc2hzbWFsbFwiLFwiXCIsXCJcIixcIlNjYXJvbnNtYWxsXCIsXCJaY2Fyb25zbWFsbFwiLFwiRGllcmVzaXNzbWFsbFwiLFwiQnJldmVzbWFsbFwiLFwiQ2Fyb25zbWFsbFwiLFwiXCIsXCJEb3RhY2NlbnRzbWFsbFwiLFwiXCIsXCJcIixcIk1hY3JvbnNtYWxsXCIsXCJcIixcIlwiLFwiZmlndXJlZGFzaFwiLFwiaHlwaGVuaW5mZXJpb3JcIixcIlwiLFwiXCIsXCJPZ29uZWtzbWFsbFwiLFwiUmluZ3NtYWxsXCIsXCJDZWRpbGxhc21hbGxcIixcIlwiLFwiXCIsXCJcIixcIm9uZXF1YXJ0ZXJcIixcIm9uZWhhbGZcIixcInRocmVlcXVhcnRlcnNcIixcInF1ZXN0aW9uZG93bnNtYWxsXCIsXCJvbmVlaWdodGhcIixcInRocmVlZWlnaHRoc1wiLFwiZml2ZWVpZ2h0aHNcIixcInNldmVuZWlnaHRoc1wiLFwib25ldGhpcmRcIixcInR3b3RoaXJkc1wiLFwiXCIsXCJcIixcInplcm9zdXBlcmlvclwiLFwib25lc3VwZXJpb3JcIixcInR3b3N1cGVyaW9yXCIsXCJ0aHJlZXN1cGVyaW9yXCIsXCJmb3Vyc3VwZXJpb3JcIixcImZpdmVzdXBlcmlvclwiLFwic2l4c3VwZXJpb3JcIixcInNldmVuc3VwZXJpb3JcIixcImVpZ2h0c3VwZXJpb3JcIixcIm5pbmVzdXBlcmlvclwiLFwiemVyb2luZmVyaW9yXCIsXCJvbmVpbmZlcmlvclwiLFwidHdvaW5mZXJpb3JcIixcInRocmVlaW5mZXJpb3JcIixcImZvdXJpbmZlcmlvclwiLFwiZml2ZWluZmVyaW9yXCIsXCJzaXhpbmZlcmlvclwiLFwic2V2ZW5pbmZlcmlvclwiLFwiZWlnaHRpbmZlcmlvclwiLFwibmluZWluZmVyaW9yXCIsXCJjZW50aW5mZXJpb3JcIixcImRvbGxhcmluZmVyaW9yXCIsXCJwZXJpb2RpbmZlcmlvclwiLFwiY29tbWFpbmZlcmlvclwiLFwiQWdyYXZlc21hbGxcIixcIkFhY3V0ZXNtYWxsXCIsXCJBY2lyY3VtZmxleHNtYWxsXCIsXCJBdGlsZGVzbWFsbFwiLFwiQWRpZXJlc2lzc21hbGxcIixcIkFyaW5nc21hbGxcIixcIkFFc21hbGxcIixcIkNjZWRpbGxhc21hbGxcIixcIkVncmF2ZXNtYWxsXCIsXCJFYWN1dGVzbWFsbFwiLFwiRWNpcmN1bWZsZXhzbWFsbFwiLFwiRWRpZXJlc2lzc21hbGxcIixcIklncmF2ZXNtYWxsXCIsXCJJYWN1dGVzbWFsbFwiLFwiSWNpcmN1bWZsZXhzbWFsbFwiLFwiSWRpZXJlc2lzc21hbGxcIixcIkV0aHNtYWxsXCIsXCJOdGlsZGVzbWFsbFwiLFwiT2dyYXZlc21hbGxcIixcIk9hY3V0ZXNtYWxsXCIsXCJPY2lyY3VtZmxleHNtYWxsXCIsXCJPdGlsZGVzbWFsbFwiLFwiT2RpZXJlc2lzc21hbGxcIixcIk9Fc21hbGxcIixcIk9zbGFzaHNtYWxsXCIsXCJVZ3JhdmVzbWFsbFwiLFwiVWFjdXRlc21hbGxcIixcIlVjaXJjdW1mbGV4c21hbGxcIixcIlVkaWVyZXNpc3NtYWxsXCIsXCJZYWN1dGVzbWFsbFwiLFwiVGhvcm5zbWFsbFwiLFwiWWRpZXJlc2lzc21hbGxcIl0sUWU9W1wiLm5vdGRlZlwiLFwiLm51bGxcIixcIm5vbm1hcmtpbmdyZXR1cm5cIixcInNwYWNlXCIsXCJleGNsYW1cIixcInF1b3RlZGJsXCIsXCJudW1iZXJzaWduXCIsXCJkb2xsYXJcIixcInBlcmNlbnRcIixcImFtcGVyc2FuZFwiLFwicXVvdGVzaW5nbGVcIixcInBhcmVubGVmdFwiLFwicGFyZW5yaWdodFwiLFwiYXN0ZXJpc2tcIixcInBsdXNcIixcImNvbW1hXCIsXCJoeXBoZW5cIixcInBlcmlvZFwiLFwic2xhc2hcIixcInplcm9cIixcIm9uZVwiLFwidHdvXCIsXCJ0aHJlZVwiLFwiZm91clwiLFwiZml2ZVwiLFwic2l4XCIsXCJzZXZlblwiLFwiZWlnaHRcIixcIm5pbmVcIixcImNvbG9uXCIsXCJzZW1pY29sb25cIixcImxlc3NcIixcImVxdWFsXCIsXCJncmVhdGVyXCIsXCJxdWVzdGlvblwiLFwiYXRcIixcIkFcIixcIkJcIixcIkNcIixcIkRcIixcIkVcIixcIkZcIixcIkdcIixcIkhcIixcIklcIixcIkpcIixcIktcIixcIkxcIixcIk1cIixcIk5cIixcIk9cIixcIlBcIixcIlFcIixcIlJcIixcIlNcIixcIlRcIixcIlVcIixcIlZcIixcIldcIixcIlhcIixcIllcIixcIlpcIixcImJyYWNrZXRsZWZ0XCIsXCJiYWNrc2xhc2hcIixcImJyYWNrZXRyaWdodFwiLFwiYXNjaWljaXJjdW1cIixcInVuZGVyc2NvcmVcIixcImdyYXZlXCIsXCJhXCIsXCJiXCIsXCJjXCIsXCJkXCIsXCJlXCIsXCJmXCIsXCJnXCIsXCJoXCIsXCJpXCIsXCJqXCIsXCJrXCIsXCJsXCIsXCJtXCIsXCJuXCIsXCJvXCIsXCJwXCIsXCJxXCIsXCJyXCIsXCJzXCIsXCJ0XCIsXCJ1XCIsXCJ2XCIsXCJ3XCIsXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJicmFjZWxlZnRcIixcImJhclwiLFwiYnJhY2VyaWdodFwiLFwiYXNjaWl0aWxkZVwiLFwiQWRpZXJlc2lzXCIsXCJBcmluZ1wiLFwiQ2NlZGlsbGFcIixcIkVhY3V0ZVwiLFwiTnRpbGRlXCIsXCJPZGllcmVzaXNcIixcIlVkaWVyZXNpc1wiLFwiYWFjdXRlXCIsXCJhZ3JhdmVcIixcImFjaXJjdW1mbGV4XCIsXCJhZGllcmVzaXNcIixcImF0aWxkZVwiLFwiYXJpbmdcIixcImNjZWRpbGxhXCIsXCJlYWN1dGVcIixcImVncmF2ZVwiLFwiZWNpcmN1bWZsZXhcIixcImVkaWVyZXNpc1wiLFwiaWFjdXRlXCIsXCJpZ3JhdmVcIixcImljaXJjdW1mbGV4XCIsXCJpZGllcmVzaXNcIixcIm50aWxkZVwiLFwib2FjdXRlXCIsXCJvZ3JhdmVcIixcIm9jaXJjdW1mbGV4XCIsXCJvZGllcmVzaXNcIixcIm90aWxkZVwiLFwidWFjdXRlXCIsXCJ1Z3JhdmVcIixcInVjaXJjdW1mbGV4XCIsXCJ1ZGllcmVzaXNcIixcImRhZ2dlclwiLFwiZGVncmVlXCIsXCJjZW50XCIsXCJzdGVybGluZ1wiLFwic2VjdGlvblwiLFwiYnVsbGV0XCIsXCJwYXJhZ3JhcGhcIixcImdlcm1hbmRibHNcIixcInJlZ2lzdGVyZWRcIixcImNvcHlyaWdodFwiLFwidHJhZGVtYXJrXCIsXCJhY3V0ZVwiLFwiZGllcmVzaXNcIixcIm5vdGVxdWFsXCIsXCJBRVwiLFwiT3NsYXNoXCIsXCJpbmZpbml0eVwiLFwicGx1c21pbnVzXCIsXCJsZXNzZXF1YWxcIixcImdyZWF0ZXJlcXVhbFwiLFwieWVuXCIsXCJtdVwiLFwicGFydGlhbGRpZmZcIixcInN1bW1hdGlvblwiLFwicHJvZHVjdFwiLFwicGlcIixcImludGVncmFsXCIsXCJvcmRmZW1pbmluZVwiLFwib3JkbWFzY3VsaW5lXCIsXCJPbWVnYVwiLFwiYWVcIixcIm9zbGFzaFwiLFwicXVlc3Rpb25kb3duXCIsXCJleGNsYW1kb3duXCIsXCJsb2dpY2Fsbm90XCIsXCJyYWRpY2FsXCIsXCJmbG9yaW5cIixcImFwcHJveGVxdWFsXCIsXCJEZWx0YVwiLFwiZ3VpbGxlbW90bGVmdFwiLFwiZ3VpbGxlbW90cmlnaHRcIixcImVsbGlwc2lzXCIsXCJub25icmVha2luZ3NwYWNlXCIsXCJBZ3JhdmVcIixcIkF0aWxkZVwiLFwiT3RpbGRlXCIsXCJPRVwiLFwib2VcIixcImVuZGFzaFwiLFwiZW1kYXNoXCIsXCJxdW90ZWRibGxlZnRcIixcInF1b3RlZGJscmlnaHRcIixcInF1b3RlbGVmdFwiLFwicXVvdGVyaWdodFwiLFwiZGl2aWRlXCIsXCJsb3plbmdlXCIsXCJ5ZGllcmVzaXNcIixcIllkaWVyZXNpc1wiLFwiZnJhY3Rpb25cIixcImN1cnJlbmN5XCIsXCJndWlsc2luZ2xsZWZ0XCIsXCJndWlsc2luZ2xyaWdodFwiLFwiZmlcIixcImZsXCIsXCJkYWdnZXJkYmxcIixcInBlcmlvZGNlbnRlcmVkXCIsXCJxdW90ZXNpbmdsYmFzZVwiLFwicXVvdGVkYmxiYXNlXCIsXCJwZXJ0aG91c2FuZFwiLFwiQWNpcmN1bWZsZXhcIixcIkVjaXJjdW1mbGV4XCIsXCJBYWN1dGVcIixcIkVkaWVyZXNpc1wiLFwiRWdyYXZlXCIsXCJJYWN1dGVcIixcIkljaXJjdW1mbGV4XCIsXCJJZGllcmVzaXNcIixcIklncmF2ZVwiLFwiT2FjdXRlXCIsXCJPY2lyY3VtZmxleFwiLFwiYXBwbGVcIixcIk9ncmF2ZVwiLFwiVWFjdXRlXCIsXCJVY2lyY3VtZmxleFwiLFwiVWdyYXZlXCIsXCJkb3RsZXNzaVwiLFwiY2lyY3VtZmxleFwiLFwidGlsZGVcIixcIm1hY3JvblwiLFwiYnJldmVcIixcImRvdGFjY2VudFwiLFwicmluZ1wiLFwiY2VkaWxsYVwiLFwiaHVuZ2FydW1sYXV0XCIsXCJvZ29uZWtcIixcImNhcm9uXCIsXCJMc2xhc2hcIixcImxzbGFzaFwiLFwiU2Nhcm9uXCIsXCJzY2Fyb25cIixcIlpjYXJvblwiLFwiemNhcm9uXCIsXCJicm9rZW5iYXJcIixcIkV0aFwiLFwiZXRoXCIsXCJZYWN1dGVcIixcInlhY3V0ZVwiLFwiVGhvcm5cIixcInRob3JuXCIsXCJtaW51c1wiLFwibXVsdGlwbHlcIixcIm9uZXN1cGVyaW9yXCIsXCJ0d29zdXBlcmlvclwiLFwidGhyZWVzdXBlcmlvclwiLFwib25laGFsZlwiLFwib25lcXVhcnRlclwiLFwidGhyZWVxdWFydGVyc1wiLFwiZnJhbmNcIixcIkdicmV2ZVwiLFwiZ2JyZXZlXCIsXCJJZG90YWNjZW50XCIsXCJTY2VkaWxsYVwiLFwic2NlZGlsbGFcIixcIkNhY3V0ZVwiLFwiY2FjdXRlXCIsXCJDY2Fyb25cIixcImNjYXJvblwiLFwiZGNyb2F0XCJdO1gucHJvdG90eXBlLmNoYXJUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7dmFyIGI9YS5jb2RlUG9pbnRBdCgwKSxjPXRoaXMuZm9udC5nbHlwaHM7aWYoYylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrPTEpZm9yKHZhciBlPWMuZ2V0KGQpLGY9MDtmPGUudW5pY29kZXMubGVuZ3RoO2YrPTEpaWYoZS51bmljb2Rlc1tmXT09PWIpcmV0dXJuIGQ7cmV0dXJuIG51bGx9LFkucHJvdG90eXBlLmNoYXJUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY21hcC5nbHlwaEluZGV4TWFwW2EuY29kZVBvaW50QXQoMCldfHwwfSxaLnByb3RvdHlwZS5jaGFyVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3ZhciBiPWEuY29kZVBvaW50QXQoMCksYz10aGlzLmVuY29kaW5nW2JdO3JldHVybiB0aGlzLmNoYXJzZXQuaW5kZXhPZihjKX0sJC5wcm90b3R5cGUubmFtZVRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5uYW1lcy5pbmRleE9mKGEpfSwkLnByb3RvdHlwZS5nbHlwaEluZGV4VG9OYW1lPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5hbWVzW2FdfTt2YXIgUmU9e2xpbmU6YWF9O2NhLnByb3RvdHlwZS5iaW5kQ29uc3RydWN0b3JWYWx1ZXM9ZnVuY3Rpb24oYSl7dGhpcy5pbmRleD1hLmluZGV4fHwwLHRoaXMubmFtZT1hLm5hbWV8fG51bGwsdGhpcy51bmljb2RlPWEudW5pY29kZXx8dm9pZCAwLHRoaXMudW5pY29kZXM9YS51bmljb2Rlc3x8dm9pZCAwIT09YS51bmljb2RlP1thLnVuaWNvZGVdOltdLGEueE1pbiYmKHRoaXMueE1pbj1hLnhNaW4pLGEueU1pbiYmKHRoaXMueU1pbj1hLnlNaW4pLGEueE1heCYmKHRoaXMueE1heD1hLnhNYXgpLGEueU1heCYmKHRoaXMueU1heD1hLnlNYXgpLGEuYWR2YW5jZVdpZHRoJiYodGhpcy5hZHZhbmNlV2lkdGg9YS5hZHZhbmNlV2lkdGgpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicGF0aFwiLGJhKHRoaXMsYS5wYXRoKSl9LGNhLnByb3RvdHlwZS5hZGRVbmljb2RlPWZ1bmN0aW9uKGEpezA9PT10aGlzLnVuaWNvZGVzLmxlbmd0aCYmKHRoaXMudW5pY29kZT1hKSx0aGlzLnVuaWNvZGVzLnB1c2goYSl9LGNhLnByb3RvdHlwZS5nZXRCb3VuZGluZ0JveD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGguZ2V0Qm91bmRpbmdCb3goKX0sY2EucHJvdG90eXBlLmdldFBhdGg9ZnVuY3Rpb24oYSxiLGMsZCxlKXthPXZvaWQgMCE9PWE/YTowLGI9dm9pZCAwIT09Yj9iOjAsYz12b2lkIDAhPT1jP2M6NzI7dmFyIGYsZztkfHwoZD17fSk7dmFyIGg9ZC54U2NhbGUsaT1kLnlTY2FsZTtpZihkLmhpbnRpbmcmJmUmJmUuaGludGluZyYmKGc9dGhpcy5wYXRoJiZlLmhpbnRpbmcuZXhlYyh0aGlzLGMpKSxnKWY9ZS5oaW50aW5nLmdldENvbW1hbmRzKGcpLGE9TWF0aC5yb3VuZChhKSxiPU1hdGgucm91bmQoYiksaD1pPTE7ZWxzZXtmPXRoaXMucGF0aC5jb21tYW5kczt2YXIgaj0xL3RoaXMucGF0aC51bml0c1BlckVtKmM7dm9pZCAwPT09aCYmKGg9aiksdm9pZCAwPT09aSYmKGk9ail9Zm9yKHZhciBrPW5ldyByLGw9MDtsPGYubGVuZ3RoO2wrPTEpe3ZhciBtPWZbbF07XCJNXCI9PT1tLnR5cGU/ay5tb3ZlVG8oYSttLngqaCxiKy1tLnkqaSk6XCJMXCI9PT1tLnR5cGU/ay5saW5lVG8oYSttLngqaCxiKy1tLnkqaSk6XCJRXCI9PT1tLnR5cGU/ay5xdWFkcmF0aWNDdXJ2ZVRvKGErbS54MSpoLGIrLW0ueTEqaSxhK20ueCpoLGIrLW0ueSppKTpcIkNcIj09PW0udHlwZT9rLmN1cnZlVG8oYSttLngxKmgsYistbS55MSppLGErbS54MipoLGIrLW0ueTIqaSxhK20ueCpoLGIrLW0ueSppKTpcIlpcIj09PW0udHlwZSYmay5jbG9zZVBhdGgoKX1yZXR1cm4ga30sY2EucHJvdG90eXBlLmdldENvbnRvdXJzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcztpZih2b2lkIDA9PT10aGlzLnBvaW50cylyZXR1cm5bXTtmb3IodmFyIGI9W10sYz1bXSxkPTA7ZDx0aGlzLnBvaW50cy5sZW5ndGg7ZCs9MSl7dmFyIGU9YS5wb2ludHNbZF07Yy5wdXNoKGUpLGUubGFzdFBvaW50T2ZDb250b3VyJiYoYi5wdXNoKGMpLGM9W10pfXJldHVybiB4ZS5hcmd1bWVudCgwPT09Yy5sZW5ndGgsXCJUaGVyZSBhcmUgc3RpbGwgcG9pbnRzIGxlZnQgaW4gdGhlIGN1cnJlbnQgY29udG91ci5cIiksYn0sY2EucHJvdG90eXBlLmdldE1ldHJpY3M9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5wYXRoLmNvbW1hbmRzLGI9W10sYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdO1wiWlwiIT09ZS50eXBlJiYoYi5wdXNoKGUueCksYy5wdXNoKGUueSkpLFwiUVwiIT09ZS50eXBlJiZcIkNcIiE9PWUudHlwZXx8KGIucHVzaChlLngxKSxjLnB1c2goZS55MSkpLFwiQ1wiPT09ZS50eXBlJiYoYi5wdXNoKGUueDIpLGMucHVzaChlLnkyKSl9dmFyIGY9e3hNaW46TWF0aC5taW4uYXBwbHkobnVsbCxiKSx5TWluOk1hdGgubWluLmFwcGx5KG51bGwsYykseE1heDpNYXRoLm1heC5hcHBseShudWxsLGIpLHlNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxjKSxsZWZ0U2lkZUJlYXJpbmc6dGhpcy5sZWZ0U2lkZUJlYXJpbmd9O3JldHVybiBpc0Zpbml0ZShmLnhNaW4pfHwoZi54TWluPTApLGlzRmluaXRlKGYueE1heCl8fChmLnhNYXg9dGhpcy5hZHZhbmNlV2lkdGgpLGlzRmluaXRlKGYueU1pbil8fChmLnlNaW49MCksaXNGaW5pdGUoZi55TWF4KXx8KGYueU1heD0wKSxmLnJpZ2h0U2lkZUJlYXJpbmc9dGhpcy5hZHZhbmNlV2lkdGgtZi5sZWZ0U2lkZUJlYXJpbmctKGYueE1heC1mLnhNaW4pLGZ9LGNhLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGEsYixjLGQsZSl7dGhpcy5nZXRQYXRoKGIsYyxkLGUpLmRyYXcoYSl9LGNhLnByb3RvdHlwZS5kcmF3UG9pbnRzPWZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoYixjLGQsZSl7dmFyIGY9MipNYXRoLlBJO2EuYmVnaW5QYXRoKCk7Zm9yKHZhciBnPTA7ZzxiLmxlbmd0aDtnKz0xKWEubW92ZVRvKGMrYltnXS54KmUsZCtiW2ddLnkqZSksYS5hcmMoYytiW2ddLngqZSxkK2JbZ10ueSplLDIsMCxmLCExKTthLmNsb3NlUGF0aCgpLGEuZmlsbCgpfWI9dm9pZCAwIT09Yj9iOjAsYz12b2lkIDAhPT1jP2M6MCxkPXZvaWQgMCE9PWQ/ZDoyNDtmb3IodmFyIGY9MS90aGlzLnBhdGgudW5pdHNQZXJFbSpkLGc9W10saD1bXSxpPXRoaXMucGF0aCxqPTA7ajxpLmNvbW1hbmRzLmxlbmd0aDtqKz0xKXt2YXIgaz1pLmNvbW1hbmRzW2pdO3ZvaWQgMCE9PWsueCYmZy5wdXNoKHt4OmsueCx5Oi1rLnl9KSx2b2lkIDAhPT1rLngxJiZoLnB1c2goe3g6ay54MSx5Oi1rLnkxfSksdm9pZCAwIT09ay54MiYmaC5wdXNoKHt4OmsueDIseTotay55Mn0pfWEuZmlsbFN0eWxlPVwiYmx1ZVwiLGUoZyxiLGMsZiksYS5maWxsU3R5bGU9XCJyZWRcIixlKGgsYixjLGYpfSxjYS5wcm90b3R5cGUuZHJhd01ldHJpY3M9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU7Yj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/YzowLGQ9dm9pZCAwIT09ZD9kOjI0LGU9MS90aGlzLnBhdGgudW5pdHNQZXJFbSpkLGEubGluZVdpZHRoPTEsYS5zdHJva2VTdHlsZT1cImJsYWNrXCIsUmUubGluZShhLGIsLTFlNCxiLDFlNCksUmUubGluZShhLC0xZTQsYywxZTQsYyk7dmFyIGY9dGhpcy54TWlufHwwLGc9dGhpcy55TWlufHwwLGg9dGhpcy54TWF4fHwwLGk9dGhpcy55TWF4fHwwLGo9dGhpcy5hZHZhbmNlV2lkdGh8fDA7YS5zdHJva2VTdHlsZT1cImJsdWVcIixSZS5saW5lKGEsYitmKmUsLTFlNCxiK2YqZSwxZTQpLFJlLmxpbmUoYSxiK2gqZSwtMWU0LGIraCplLDFlNCksUmUubGluZShhLC0xZTQsYystZyplLDFlNCxjKy1nKmUpLFJlLmxpbmUoYSwtMWU0LGMrLWkqZSwxZTQsYystaSplKSxhLnN0cm9rZVN0eWxlPVwiZ3JlZW5cIixSZS5saW5lKGEsYitqKmUsLTFlNCxiK2oqZSwxZTQpfSxlYS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuZ2x5cGhzW2FdJiYodGhpcy5nbHlwaHNbYV09dGhpcy5nbHlwaHNbYV0oKSksdGhpcy5nbHlwaHNbYV19LGVhLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGEsYil7dGhpcy5nbHlwaHNbYV09Yix0aGlzLmxlbmd0aCsrfTt2YXIgU2U9e0dseXBoU2V0OmVhLGdseXBoTG9hZGVyOmZhLHR0ZkdseXBoTG9hZGVyOmdhLGNmZkdseXBoTG9hZGVyOmhhfSxUZT1be25hbWU6XCJ2ZXJzaW9uXCIsb3A6MCx0eXBlOlwiU0lEXCJ9LHtuYW1lOlwibm90aWNlXCIsb3A6MSx0eXBlOlwiU0lEXCJ9LHtuYW1lOlwiY29weXJpZ2h0XCIsb3A6MTIwMCx0eXBlOlwiU0lEXCJ9LHtuYW1lOlwiZnVsbE5hbWVcIixvcDoyLHR5cGU6XCJTSURcIn0se25hbWU6XCJmYW1pbHlOYW1lXCIsb3A6Myx0eXBlOlwiU0lEXCJ9LHtuYW1lOlwid2VpZ2h0XCIsb3A6NCx0eXBlOlwiU0lEXCJ9LHtuYW1lOlwiaXNGaXhlZFBpdGNoXCIsb3A6MTIwMSx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJpdGFsaWNBbmdsZVwiLG9wOjEyMDIsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwidW5kZXJsaW5lUG9zaXRpb25cIixvcDoxMjAzLHR5cGU6XCJudW1iZXJcIix2YWx1ZTotMTAwfSx7bmFtZTpcInVuZGVybGluZVRoaWNrbmVzc1wiLG9wOjEyMDQsdHlwZTpcIm51bWJlclwiLHZhbHVlOjUwfSx7bmFtZTpcInBhaW50VHlwZVwiLG9wOjEyMDUsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwiY2hhcnN0cmluZ1R5cGVcIixvcDoxMjA2LHR5cGU6XCJudW1iZXJcIix2YWx1ZToyfSx7bmFtZTpcImZvbnRNYXRyaXhcIixvcDoxMjA3LHR5cGU6W1wicmVhbFwiLFwicmVhbFwiLFwicmVhbFwiLFwicmVhbFwiLFwicmVhbFwiLFwicmVhbFwiXSx2YWx1ZTpbLjAwMSwwLDAsLjAwMSwwLDBdfSx7bmFtZTpcInVuaXF1ZUlkXCIsb3A6MTMsdHlwZTpcIm51bWJlclwifSx7bmFtZTpcImZvbnRCQm94XCIsb3A6NSx0eXBlOltcIm51bWJlclwiLFwibnVtYmVyXCIsXCJudW1iZXJcIixcIm51bWJlclwiXSx2YWx1ZTpbMCwwLDAsMF19LHtuYW1lOlwic3Ryb2tlV2lkdGhcIixvcDoxMjA4LHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcInh1aWRcIixvcDoxNCx0eXBlOltdLHZhbHVlOm51bGx9LHtuYW1lOlwiY2hhcnNldFwiLG9wOjE1LHR5cGU6XCJvZmZzZXRcIix2YWx1ZTowfSx7bmFtZTpcImVuY29kaW5nXCIsb3A6MTYsdHlwZTpcIm9mZnNldFwiLHZhbHVlOjB9LHtuYW1lOlwiY2hhclN0cmluZ3NcIixvcDoxNyx0eXBlOlwib2Zmc2V0XCIsdmFsdWU6MH0se25hbWU6XCJwcml2YXRlXCIsb3A6MTgsdHlwZTpbXCJudW1iZXJcIixcIm9mZnNldFwiXSx2YWx1ZTpbMCwwXX0se25hbWU6XCJyb3NcIixvcDoxMjMwLHR5cGU6W1wiU0lEXCIsXCJTSURcIixcIm51bWJlclwiXX0se25hbWU6XCJjaWRGb250VmVyc2lvblwiLG9wOjEyMzEsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwiY2lkRm9udFJldmlzaW9uXCIsb3A6MTIzMix0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJjaWRGb250VHlwZVwiLG9wOjEyMzMsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwiY2lkQ291bnRcIixvcDoxMjM0LHR5cGU6XCJudW1iZXJcIix2YWx1ZTo4NzIwfSx7bmFtZTpcInVpZEJhc2VcIixvcDoxMjM1LHR5cGU6XCJudW1iZXJcIn0se25hbWU6XCJmZEFycmF5XCIsb3A6MTIzNix0eXBlOlwib2Zmc2V0XCJ9LHtuYW1lOlwiZmRTZWxlY3RcIixvcDoxMjM3LHR5cGU6XCJvZmZzZXRcIn0se25hbWU6XCJmb250TmFtZVwiLG9wOjEyMzgsdHlwZTpcIlNJRFwifV0sVWU9W3tuYW1lOlwic3VicnNcIixvcDoxOSx0eXBlOlwib2Zmc2V0XCIsdmFsdWU6MH0se25hbWU6XCJkZWZhdWx0V2lkdGhYXCIsb3A6MjAsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwibm9taW5hbFdpZHRoWFwiLG9wOjIxLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfV0sVmU9e3BhcnNlOnphLG1ha2U6TWF9LFdlPXtwYXJzZTpOYSxtYWtlOk9hfSxYZT17cGFyc2U6UGEsbWFrZTpRYX0sWWU9e3BhcnNlOlJhLG1ha2U6U2F9LFplPXttYWtlOlRhLHBhcnNlOlVhfSwkZT17cGFyc2U6VmEsbWFrZTpXYX0sX2U9W1wiY29weXJpZ2h0XCIsXCJmb250RmFtaWx5XCIsXCJmb250U3ViZmFtaWx5XCIsXCJ1bmlxdWVJRFwiLFwiZnVsbE5hbWVcIixcInZlcnNpb25cIixcInBvc3RTY3JpcHROYW1lXCIsXCJ0cmFkZW1hcmtcIixcIm1hbnVmYWN0dXJlclwiLFwiZGVzaWduZXJcIixcImRlc2NyaXB0aW9uXCIsXCJtYW51ZmFjdHVyZXJVUkxcIixcImRlc2lnbmVyVVJMXCIsXCJsaWNlbnNlXCIsXCJsaWNlbnNlVVJMXCIsXCJyZXNlcnZlZFwiLFwicHJlZmVycmVkRmFtaWx5XCIsXCJwcmVmZXJyZWRTdWJmYW1pbHlcIixcImNvbXBhdGlibGVGdWxsTmFtZVwiLFwic2FtcGxlVGV4dFwiLFwicG9zdFNjcmlwdEZpbmRGb250TmFtZVwiLFwid3dzRmFtaWx5XCIsXCJ3d3NTdWJmYW1pbHlcIl0sYWY9ezA6XCJlblwiLDE6XCJmclwiLDI6XCJkZVwiLDM6XCJpdFwiLDQ6XCJubFwiLDU6XCJzdlwiLDY6XCJlc1wiLDc6XCJkYVwiLDg6XCJwdFwiLDk6XCJub1wiLDEwOlwiaGVcIiwxMTpcImphXCIsMTI6XCJhclwiLDEzOlwiZmlcIiwxNDpcImVsXCIsMTU6XCJpc1wiLDE2OlwibXRcIiwxNzpcInRyXCIsMTg6XCJoclwiLDE5OlwiemgtSGFudFwiLDIwOlwidXJcIiwyMTpcImhpXCIsMjI6XCJ0aFwiLDIzOlwia29cIiwyNDpcImx0XCIsMjU6XCJwbFwiLDI2OlwiaHVcIiwyNzpcImVzXCIsMjg6XCJsdlwiLDI5Olwic2VcIiwzMDpcImZvXCIsMzE6XCJmYVwiLDMyOlwicnVcIiwzMzpcInpoXCIsMzQ6XCJubC1CRVwiLDM1OlwiZ2FcIiwzNjpcInNxXCIsMzc6XCJyb1wiLDM4OlwiY3pcIiwzOTpcInNrXCIsNDA6XCJzaVwiLDQxOlwieWlcIiw0MjpcInNyXCIsNDM6XCJta1wiLDQ0OlwiYmdcIiw0NTpcInVrXCIsNDY6XCJiZVwiLDQ3OlwidXpcIiw0ODpcImtrXCIsNDk6XCJhei1DeXJsXCIsNTA6XCJhei1BcmFiXCIsNTE6XCJoeVwiLDUyOlwia2FcIiw1MzpcIm1vXCIsNTQ6XCJreVwiLDU1OlwidGdcIiw1NjpcInRrXCIsNTc6XCJtbi1DTlwiLDU4OlwibW5cIiw1OTpcInBzXCIsNjA6XCJrc1wiLDYxOlwia3VcIiw2MjpcInNkXCIsNjM6XCJib1wiLDY0OlwibmVcIiw2NTpcInNhXCIsNjY6XCJtclwiLDY3OlwiYm5cIiw2ODpcImFzXCIsNjk6XCJndVwiLDcwOlwicGFcIiw3MTpcIm9yXCIsNzI6XCJtbFwiLDczOlwia25cIiw3NDpcInRhXCIsNzU6XCJ0ZVwiLDc2Olwic2lcIiw3NzpcIm15XCIsNzg6XCJrbVwiLDc5OlwibG9cIiw4MDpcInZpXCIsODE6XCJpZFwiLDgyOlwidGxcIiw4MzpcIm1zXCIsODQ6XCJtcy1BcmFiXCIsODU6XCJhbVwiLDg2OlwidGlcIiw4NzpcIm9tXCIsODg6XCJzb1wiLDg5Olwic3dcIiw5MDpcInJ3XCIsOTE6XCJyblwiLDkyOlwibnlcIiw5MzpcIm1nXCIsOTQ6XCJlb1wiLDEyODpcImN5XCIsMTI5OlwiZXVcIiwxMzA6XCJjYVwiLDEzMTpcImxhXCIsMTMyOlwicXVcIiwxMzM6XCJnblwiLDEzNDpcImF5XCIsMTM1OlwidHRcIiwxMzY6XCJ1Z1wiLDEzNzpcImR6XCIsMTM4OlwianZcIiwxMzk6XCJzdVwiLDE0MDpcImdsXCIsMTQxOlwiYWZcIiwxNDI6XCJiclwiLDE0MzpcIml1XCIsMTQ0OlwiZ2RcIiwxNDU6XCJndlwiLDE0NjpcImdhXCIsMTQ3OlwidG9cIiwxNDg6XCJlbC1wb2x5dG9uXCIsMTQ5Olwia2xcIiwxNTA6XCJhelwiLDE1MTpcIm5uXCJ9LGJmPXswOjAsMTowLDI6MCwzOjAsNDowLDU6MCw2OjAsNzowLDg6MCw5OjAsMTA6NSwxMToxLDEyOjQsMTM6MCwxNDo2LDE1OjAsMTY6MCwxNzowLDE4OjAsMTk6MiwyMDo0LFxuMjE6OSwyMjoyMSwyMzozLDI0OjI5LDI1OjI5LDI2OjI5LDI3OjI5LDI4OjI5LDI5OjAsMzA6MCwzMTo0LDMyOjcsMzM6MjUsMzQ6MCwzNTowLDM2OjAsMzc6MCwzODoyOSwzOToyOSw0MDowLDQxOjUsNDI6Nyw0Mzo3LDQ0OjcsNDU6Nyw0Njo3LDQ3OjcsNDg6Nyw0OTo3LDUwOjQsNTE6MjQsNTI6MjMsNTM6Nyw1NDo3LDU1OjcsNTY6Nyw1NzoyNyw1ODo3LDU5OjQsNjA6NCw2MTo0LDYyOjQsNjM6MjYsNjQ6OSw2NTo5LDY2OjksNjc6MTMsNjg6MTMsNjk6MTEsNzA6MTAsNzE6MTIsNzI6MTcsNzM6MTYsNzQ6MTQsNzU6MTUsNzY6MTgsNzc6MTksNzg6MjAsNzk6MjIsODA6MzAsODE6MCw4MjowLDgzOjAsODQ6NCw4NToyOCw4NjoyOCw4NzoyOCw4ODowLDg5OjAsOTA6MCw5MTowLDkyOjAsOTM6MCw5NDowLDEyODowLDEyOTowLDEzMDowLDEzMTowLDEzMjowLDEzMzowLDEzNDowLDEzNTo3LDEzNjo0LDEzNzoyNiwxMzg6MCwxMzk6MCwxNDA6MCwxNDE6MCwxNDI6MCwxNDM6MjgsMTQ0OjAsMTQ1OjAsMTQ2OjAsMTQ3OjAsMTQ4OjYsMTQ5OjAsMTUwOjAsMTUxOjB9LGNmPXsxMDc4OlwiYWZcIiwxMDUyOlwic3FcIiwxMTU2OlwiZ3N3XCIsMTExODpcImFtXCIsNTEyMTpcImFyLURaXCIsMTUzNjE6XCJhci1CSFwiLDMwNzM6XCJhclwiLDIwNDk6XCJhci1JUVwiLDExMjY1OlwiYXItSk9cIiwxMzMxMzpcImFyLUtXXCIsMTIyODk6XCJhci1MQlwiLDQwOTc6XCJhci1MWVwiLDYxNDU6XCJhcnlcIiw4MTkzOlwiYXItT01cIiwxNjM4NTpcImFyLVFBXCIsMTAyNTpcImFyLVNBXCIsMTAyNDE6XCJhci1TWVwiLDcxNjk6XCJhZWJcIiwxNDMzNzpcImFyLUFFXCIsOTIxNzpcImFyLVlFXCIsMTA2NzpcImh5XCIsMTEwMTpcImFzXCIsMjA5MjpcImF6LUN5cmxcIiwxMDY4OlwiYXpcIiwxMTMzOlwiYmFcIiwxMDY5OlwiZXVcIiwxMDU5OlwiYmVcIiwyMTE3OlwiYm5cIiwxMDkzOlwiYm4tSU5cIiw4MjE4OlwiYnMtQ3lybFwiLDUxNDY6XCJic1wiLDExNTA6XCJiclwiLDEwMjY6XCJiZ1wiLDEwMjc6XCJjYVwiLDMwNzY6XCJ6aC1IS1wiLDUxMjQ6XCJ6aC1NT1wiLDIwNTI6XCJ6aFwiLDQxMDA6XCJ6aC1TR1wiLDEwMjg6XCJ6aC1UV1wiLDExNTU6XCJjb1wiLDEwNTA6XCJoclwiLDQxMjI6XCJoci1CQVwiLDEwMjk6XCJjc1wiLDEwMzA6XCJkYVwiLDExNjQ6XCJwcnNcIiwxMTI1OlwiZHZcIiwyMDY3OlwibmwtQkVcIiwxMDQzOlwibmxcIiwzMDgxOlwiZW4tQVVcIiwxMDI0OTpcImVuLUJaXCIsNDEwNTpcImVuLUNBXCIsOTIyNTpcImVuLTAyOVwiLDE2MzkzOlwiZW4tSU5cIiw2MTUzOlwiZW4tSUVcIiw4MjAxOlwiZW4tSk1cIiwxNzQxNzpcImVuLU1ZXCIsNTEyOTpcImVuLU5aXCIsMTMzMjE6XCJlbi1QSFwiLDE4NDQxOlwiZW4tU0dcIiw3MTc3OlwiZW4tWkFcIiwxMTI3MzpcImVuLVRUXCIsMjA1NzpcImVuLUdCXCIsMTAzMzpcImVuXCIsMTIyOTc6XCJlbi1aV1wiLDEwNjE6XCJldFwiLDEwODA6XCJmb1wiLDExMjQ6XCJmaWxcIiwxMDM1OlwiZmlcIiwyMDYwOlwiZnItQkVcIiwzMDg0OlwiZnItQ0FcIiwxMDM2OlwiZnJcIiw1MTMyOlwiZnItTFVcIiw2MTU2OlwiZnItTUNcIiw0MTA4OlwiZnItQ0hcIiwxMTIyOlwiZnlcIiwxMTEwOlwiZ2xcIiwxMDc5Olwia2FcIiwzMDc5OlwiZGUtQVRcIiwxMDMxOlwiZGVcIiw1MTI3OlwiZGUtTElcIiw0MTAzOlwiZGUtTFVcIiwyMDU1OlwiZGUtQ0hcIiwxMDMyOlwiZWxcIiwxMTM1Olwia2xcIiwxMDk1OlwiZ3VcIiwxMTI4OlwiaGFcIiwxMDM3OlwiaGVcIiwxMDgxOlwiaGlcIiwxMDM4OlwiaHVcIiwxMDM5OlwiaXNcIiwxMTM2OlwiaWdcIiwxMDU3OlwiaWRcIiwxMTE3OlwiaXVcIiwyMTQxOlwiaXUtTGF0blwiLDIxMDg6XCJnYVwiLDEwNzY6XCJ4aFwiLDEwNzc6XCJ6dVwiLDEwNDA6XCJpdFwiLDIwNjQ6XCJpdC1DSFwiLDEwNDE6XCJqYVwiLDEwOTk6XCJrblwiLDEwODc6XCJra1wiLDExMDc6XCJrbVwiLDExNTg6XCJxdWNcIiwxMTU5OlwicndcIiwxMDg5Olwic3dcIiwxMTExOlwia29rXCIsMTA0MjpcImtvXCIsMTA4ODpcImt5XCIsMTEwODpcImxvXCIsMTA2MjpcImx2XCIsMTA2MzpcImx0XCIsMjA5NDpcImRzYlwiLDExMzQ6XCJsYlwiLDEwNzE6XCJta1wiLDIxMTA6XCJtcy1CTlwiLDEwODY6XCJtc1wiLDExMDA6XCJtbFwiLDEwODI6XCJtdFwiLDExNTM6XCJtaVwiLDExNDY6XCJhcm5cIiwxMTAyOlwibXJcIiwxMTQ4OlwibW9oXCIsMTEwNDpcIm1uXCIsMjEyODpcIm1uLUNOXCIsMTEyMTpcIm5lXCIsMTA0NDpcIm5iXCIsMjA2ODpcIm5uXCIsMTE1NDpcIm9jXCIsMTA5NjpcIm9yXCIsMTEyMzpcInBzXCIsMTA0NTpcInBsXCIsMTA0NjpcInB0XCIsMjA3MDpcInB0LVBUXCIsMTA5NDpcInBhXCIsMTEzMTpcInF1LUJPXCIsMjE1NTpcInF1LUVDXCIsMzE3OTpcInF1XCIsMTA0ODpcInJvXCIsMTA0NzpcInJtXCIsMTA0OTpcInJ1XCIsOTI3NTpcInNtblwiLDQxNTU6XCJzbWotTk9cIiw1MTc5Olwic21qXCIsMzEzMTpcInNlLUZJXCIsMTA4MzpcInNlXCIsMjEwNzpcInNlLVNFXCIsODI1MTpcInNtc1wiLDYyMDM6XCJzbWEtTk9cIiw3MjI3Olwic21zXCIsMTEwMzpcInNhXCIsNzE5NDpcInNyLUN5cmwtQkFcIiwzMDk4Olwic3JcIiw2MTcwOlwic3ItTGF0bi1CQVwiLDIwNzQ6XCJzci1MYXRuXCIsMTEzMjpcIm5zb1wiLDEwNzQ6XCJ0blwiLDExMTU6XCJzaVwiLDEwNTE6XCJza1wiLDEwNjA6XCJzbFwiLDExMjc0OlwiZXMtQVJcIiwxNjM5NDpcImVzLUJPXCIsMTMzMjI6XCJlcy1DTFwiLDkyMjY6XCJlcy1DT1wiLDUxMzA6XCJlcy1DUlwiLDcxNzg6XCJlcy1ET1wiLDEyMjk4OlwiZXMtRUNcIiwxNzQxODpcImVzLVNWXCIsNDEwNjpcImVzLUdUXCIsMTg0NDI6XCJlcy1ITlwiLDIwNTg6XCJlcy1NWFwiLDE5NDY2OlwiZXMtTklcIiw2MTU0OlwiZXMtUEFcIiwxNTM3MDpcImVzLVBZXCIsMTAyNTA6XCJlcy1QRVwiLDIwNDkwOlwiZXMtUFJcIiwzMDgyOlwiZXNcIiwxMDM0OlwiZXNcIiwyMTUxNDpcImVzLVVTXCIsMTQzNDY6XCJlcy1VWVwiLDgyMDI6XCJlcy1WRVwiLDIwNzc6XCJzdi1GSVwiLDEwNTM6XCJzdlwiLDExMTQ6XCJzeXJcIiwxMDY0OlwidGdcIiwyMTQzOlwidHptXCIsMTA5NzpcInRhXCIsMTA5MjpcInR0XCIsMTA5ODpcInRlXCIsMTA1NDpcInRoXCIsMTEwNTpcImJvXCIsMTA1NTpcInRyXCIsMTA5MDpcInRrXCIsMTE1MjpcInVnXCIsMTA1ODpcInVrXCIsMTA3MDpcImhzYlwiLDEwNTY6XCJ1clwiLDIxMTU6XCJ1ei1DeXJsXCIsMTA5MTpcInV6XCIsMTA2NjpcInZpXCIsMTEwNjpcImN5XCIsMTE2MDpcIndvXCIsMTE1NzpcInNhaFwiLDExNDQ6XCJpaVwiLDExMzA6XCJ5b1wifSxkZj1cInV0Zi0xNlwiLGVmPXswOlwibWFjaW50b3NoXCIsMTpcIngtbWFjLWphcGFuZXNlXCIsMjpcIngtbWFjLWNoaW5lc2V0cmFkXCIsMzpcIngtbWFjLWtvcmVhblwiLDY6XCJ4LW1hYy1ncmVla1wiLDc6XCJ4LW1hYy1jeXJpbGxpY1wiLDk6XCJ4LW1hYy1kZXZhbmFnYWlcIiwxMDpcIngtbWFjLWd1cm11a2hpXCIsMTE6XCJ4LW1hYy1ndWphcmF0aVwiLDEyOlwieC1tYWMtb3JpeWFcIiwxMzpcIngtbWFjLWJlbmdhbGlcIiwxNDpcIngtbWFjLXRhbWlsXCIsMTU6XCJ4LW1hYy10ZWx1Z3VcIiwxNjpcIngtbWFjLWthbm5hZGFcIiwxNzpcIngtbWFjLW1hbGF5YWxhbVwiLDE4OlwieC1tYWMtc2luaGFsZXNlXCIsMTk6XCJ4LW1hYy1idXJtZXNlXCIsMjA6XCJ4LW1hYy1raG1lclwiLDIxOlwieC1tYWMtdGhhaVwiLDIyOlwieC1tYWMtbGFvXCIsMjM6XCJ4LW1hYy1nZW9yZ2lhblwiLDI0OlwieC1tYWMtYXJtZW5pYW5cIiwyNTpcIngtbWFjLWNoaW5lc2VzaW1wXCIsMjY6XCJ4LW1hYy10aWJldGFuXCIsMjc6XCJ4LW1hYy1tb25nb2xpYW5cIiwyODpcIngtbWFjLWV0aGlvcGljXCIsMjk6XCJ4LW1hYy1jZVwiLDMwOlwieC1tYWMtdmlldG5hbWVzZVwiLDMxOlwieC1tYWMtZXh0YXJhYmljXCJ9LGZmPXsxNTpcIngtbWFjLWljZWxhbmRpY1wiLDE3OlwieC1tYWMtdHVya2lzaFwiLDE4OlwieC1tYWMtY3JvYXRpYW5cIiwyNDpcIngtbWFjLWNlXCIsMjU6XCJ4LW1hYy1jZVwiLDI2OlwieC1tYWMtY2VcIiwyNzpcIngtbWFjLWNlXCIsMjg6XCJ4LW1hYy1jZVwiLDMwOlwieC1tYWMtaWNlbGFuZGljXCIsMzc6XCJ4LW1hYy1yb21hbmlhblwiLDM4OlwieC1tYWMtY2VcIiwzOTpcIngtbWFjLWNlXCIsNDA6XCJ4LW1hYy1jZVwiLDE0MzpcIngtbWFjLWludWl0XCIsMTQ2OlwieC1tYWMtZ2FlbGljXCJ9LGdmPXtwYXJzZTpaYSxtYWtlOmNifSxoZj1be2JlZ2luOjAsZW5kOjEyN30se2JlZ2luOjEyOCxlbmQ6MjU1fSx7YmVnaW46MjU2LGVuZDozODN9LHtiZWdpbjozODQsZW5kOjU5MX0se2JlZ2luOjU5MixlbmQ6Njg3fSx7YmVnaW46Njg4LGVuZDo3Njd9LHtiZWdpbjo3NjgsZW5kOjg3OX0se2JlZ2luOjg4MCxlbmQ6MTAyM30se2JlZ2luOjExMzkyLGVuZDoxMTUxOX0se2JlZ2luOjEwMjQsZW5kOjEyNzl9LHtiZWdpbjoxMzI4LGVuZDoxNDIzfSx7YmVnaW46MTQyNCxlbmQ6MTUzNX0se2JlZ2luOjQyMjQwLGVuZDo0MjU1OX0se2JlZ2luOjE1MzYsZW5kOjE3OTF9LHtiZWdpbjoxOTg0LGVuZDoyMDQ3fSx7YmVnaW46MjMwNCxlbmQ6MjQzMX0se2JlZ2luOjI0MzIsZW5kOjI1NTl9LHtiZWdpbjoyNTYwLGVuZDoyNjg3fSx7YmVnaW46MjY4OCxlbmQ6MjgxNX0se2JlZ2luOjI4MTYsZW5kOjI5NDN9LHtiZWdpbjoyOTQ0LGVuZDozMDcxfSx7YmVnaW46MzA3MixlbmQ6MzE5OX0se2JlZ2luOjMyMDAsZW5kOjMzMjd9LHtiZWdpbjozMzI4LGVuZDozNDU1fSx7YmVnaW46MzU4NCxlbmQ6MzcxMX0se2JlZ2luOjM3MTIsZW5kOjM4Mzl9LHtiZWdpbjo0MjU2LGVuZDo0MzUxfSx7YmVnaW46NjkxMixlbmQ6NzAzOX0se2JlZ2luOjQzNTIsZW5kOjQ2MDd9LHtiZWdpbjo3NjgwLGVuZDo3OTM1fSx7YmVnaW46NzkzNixlbmQ6ODE5MX0se2JlZ2luOjgxOTIsZW5kOjgzMDN9LHtiZWdpbjo4MzA0LGVuZDo4MzUxfSx7YmVnaW46ODM1MixlbmQ6ODM5OX0se2JlZ2luOjg0MDAsZW5kOjg0NDd9LHtiZWdpbjo4NDQ4LGVuZDo4NTI3fSx7YmVnaW46ODUyOCxlbmQ6ODU5MX0se2JlZ2luOjg1OTIsZW5kOjg3MDN9LHtiZWdpbjo4NzA0LGVuZDo4OTU5fSx7YmVnaW46ODk2MCxlbmQ6OTIxNX0se2JlZ2luOjkyMTYsZW5kOjkyNzl9LHtiZWdpbjo5MjgwLGVuZDo5MzExfSx7YmVnaW46OTMxMixlbmQ6OTQ3MX0se2JlZ2luOjk0NzIsZW5kOjk1OTl9LHtiZWdpbjo5NjAwLGVuZDo5NjMxfSx7YmVnaW46OTYzMixlbmQ6OTcyN30se2JlZ2luOjk3MjgsZW5kOjk5ODN9LHtiZWdpbjo5OTg0LGVuZDoxMDE3NX0se2JlZ2luOjEyMjg4LGVuZDoxMjM1MX0se2JlZ2luOjEyMzUyLGVuZDoxMjQ0N30se2JlZ2luOjEyNDQ4LGVuZDoxMjU0M30se2JlZ2luOjEyNTQ0LGVuZDoxMjU5MX0se2JlZ2luOjEyNTkyLGVuZDoxMjY4N30se2JlZ2luOjQzMDcyLGVuZDo0MzEzNX0se2JlZ2luOjEyODAwLGVuZDoxMzA1NX0se2JlZ2luOjEzMDU2LGVuZDoxMzMxMX0se2JlZ2luOjQ0MDMyLGVuZDo1NTIxNX0se2JlZ2luOjU1Mjk2LGVuZDo1NzM0M30se2JlZ2luOjY3ODQwLGVuZDo2Nzg3MX0se2JlZ2luOjE5OTY4LGVuZDo0MDk1OX0se2JlZ2luOjU3MzQ0LGVuZDo2Mzc0M30se2JlZ2luOjEyNzM2LGVuZDoxMjc4M30se2JlZ2luOjY0MjU2LGVuZDo2NDMzNX0se2JlZ2luOjY0MzM2LGVuZDo2NTAyM30se2JlZ2luOjY1MDU2LGVuZDo2NTA3MX0se2JlZ2luOjY1MDQwLGVuZDo2NTA1NX0se2JlZ2luOjY1MTA0LGVuZDo2NTEzNX0se2JlZ2luOjY1MTM2LGVuZDo2NTI3OX0se2JlZ2luOjY1MjgwLGVuZDo2NTUxOX0se2JlZ2luOjY1NTIwLGVuZDo2NTUzNX0se2JlZ2luOjM4NDAsZW5kOjQwOTV9LHtiZWdpbjoxNzkyLGVuZDoxODcxfSx7YmVnaW46MTkyMCxlbmQ6MTk4M30se2JlZ2luOjM0NTYsZW5kOjM1ODN9LHtiZWdpbjo0MDk2LGVuZDo0MjU1fSx7YmVnaW46NDYwOCxlbmQ6NDk5MX0se2JlZ2luOjUwMjQsZW5kOjUxMTl9LHtiZWdpbjo1MTIwLGVuZDo1NzU5fSx7YmVnaW46NTc2MCxlbmQ6NTc5MX0se2JlZ2luOjU3OTIsZW5kOjU4ODd9LHtiZWdpbjo2MDE2LGVuZDo2MTQzfSx7YmVnaW46NjE0NCxlbmQ6NjMxOX0se2JlZ2luOjEwMjQwLGVuZDoxMDQ5NX0se2JlZ2luOjQwOTYwLGVuZDo0MjEyN30se2JlZ2luOjU4ODgsZW5kOjU5MTl9LHtiZWdpbjo2NjMwNCxlbmQ6NjYzNTF9LHtiZWdpbjo2NjM1MixlbmQ6NjYzODN9LHtiZWdpbjo2NjU2MCxlbmQ6NjY2Mzl9LHtiZWdpbjoxMTg3ODQsZW5kOjExOTAzOX0se2JlZ2luOjExOTgwOCxlbmQ6MTIwODMxfSx7YmVnaW46MTA0NDQ4MCxlbmQ6MTA0ODU3M30se2JlZ2luOjY1MDI0LGVuZDo2NTAzOX0se2JlZ2luOjkxNzUwNCxlbmQ6OTE3NjMxfSx7YmVnaW46NjQwMCxlbmQ6NjQ3OX0se2JlZ2luOjY0ODAsZW5kOjY1Mjd9LHtiZWdpbjo2NTI4LGVuZDo2NjIzfSx7YmVnaW46NjY1NixlbmQ6NjY4N30se2JlZ2luOjExMjY0LGVuZDoxMTM1OX0se2JlZ2luOjExNTY4LGVuZDoxMTY0N30se2JlZ2luOjE5OTA0LGVuZDoxOTk2N30se2JlZ2luOjQzMDA4LGVuZDo0MzA1NX0se2JlZ2luOjY1NTM2LGVuZDo2NTY2M30se2JlZ2luOjY1ODU2LGVuZDo2NTkzNX0se2JlZ2luOjY2NDMyLGVuZDo2NjQ2M30se2JlZ2luOjY2NDY0LGVuZDo2NjUyN30se2JlZ2luOjY2NjQwLGVuZDo2NjY4N30se2JlZ2luOjY2Njg4LGVuZDo2NjczNX0se2JlZ2luOjY3NTg0LGVuZDo2NzY0N30se2JlZ2luOjY4MDk2LGVuZDo2ODE5MX0se2JlZ2luOjExOTU1MixlbmQ6MTE5NjQ3fSx7YmVnaW46NzM3MjgsZW5kOjc0NzUxfSx7YmVnaW46MTE5NjQ4LGVuZDoxMTk2Nzl9LHtiZWdpbjo3MDQwLGVuZDo3MTAzfSx7YmVnaW46NzE2OCxlbmQ6NzI0N30se2JlZ2luOjcyNDgsZW5kOjcyOTV9LHtiZWdpbjo0MzEzNixlbmQ6NDMyMzF9LHtiZWdpbjo0MzI2NCxlbmQ6NDMzMTF9LHtiZWdpbjo0MzMxMixlbmQ6NDMzNTl9LHtiZWdpbjo0MzUyMCxlbmQ6NDM2MTV9LHtiZWdpbjo2NTkzNixlbmQ6NjU5OTl9LHtiZWdpbjo2NmUzLGVuZDo2NjA0N30se2JlZ2luOjY2MjA4LGVuZDo2NjI3MX0se2JlZ2luOjEyNzAyNCxlbmQ6MTI3MTM1fV0samY9e3BhcnNlOmViLG1ha2U6ZmIsdW5pY29kZVJhbmdlczpoZixnZXRVbmljb2RlUmFuZ2U6ZGJ9LGtmPXtwYXJzZTpnYixtYWtlOmhifSxsZj1uZXcgQXJyYXkoOSk7bGZbMV09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiAxPT09Yj97c3Vic3RGb3JtYXQ6MSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxkZWx0YUdseXBoSWQ6dGhpcy5wYXJzZVVTaG9ydCgpfToyPT09Yj97c3Vic3RGb3JtYXQ6Mixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxzdWJzdGl0dXRlOnRoaXMucGFyc2VPZmZzZXQxNkxpc3QoKX06dm9pZCB4ZS5hc3NlcnQoITEsXCIweFwiK2EudG9TdHJpbmcoMTYpK1wiOiBsb29rdXAgdHlwZSAxIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIil9LGxmWzJdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgTXVsdGlwbGUgU3Vic3RpdHV0aW9uIFN1YnRhYmxlIGlkZW50aWZpZXItZm9ybWF0IG11c3QgYmUgMVwiKSx7c3Vic3RGb3JtYXQ6YSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxzZXF1ZW5jZXM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKCl9fSxsZlszXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWEsXCJHU1VCIEFsdGVybmF0ZSBTdWJzdGl0dXRpb24gU3VidGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpLHtzdWJzdEZvcm1hdDphLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGFsdGVybmF0ZVNldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKCl9fSxsZls0XT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWEsXCJHU1VCIGxpZ2F0dXJlIHRhYmxlIGlkZW50aWZpZXItZm9ybWF0IG11c3QgYmUgMVwiKSx7c3Vic3RGb3JtYXQ6YSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxsaWdhdHVyZVNldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7cmV0dXJue2xpZ0dseXBoOnRoaXMucGFyc2VVU2hvcnQoKSxjb21wb25lbnRzOnRoaXMucGFyc2VVU2hvcnRMaXN0KHRoaXMucGFyc2VVU2hvcnQoKS0xKX19KX19O3ZhciBtZj17c2VxdWVuY2VJbmRleDpRLnVTaG9ydCxsb29rdXBMaXN0SW5kZXg6US51U2hvcnR9O2xmWzVdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTtpZigxPT09YilyZXR1cm57c3Vic3RGb3JtYXQ6Yixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxydWxlU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCksYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJue2lucHV0OnRoaXMucGFyc2VVU2hvcnRMaXN0KGEtMSksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChiLG1mKX19KX07aWYoMj09PWIpcmV0dXJue3N1YnN0Rm9ybWF0OmIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksY2xhc3NEZWY6dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksY2xhc3NTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKSxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm57Y2xhc3Nlczp0aGlzLnBhcnNlVVNob3J0TGlzdChhLTEpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QoYixtZil9fSl9O2lmKDM9PT1iKXt2YXIgYz10aGlzLnBhcnNlVVNob3J0KCksZD10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJue3N1YnN0Rm9ybWF0OmIsY292ZXJhZ2VzOnRoaXMucGFyc2VMaXN0KGMsUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KGQsbWYpfX14ZS5hc3NlcnQoITEsXCIweFwiK2EudG9TdHJpbmcoMTYpK1wiOiBsb29rdXAgdHlwZSA1IGZvcm1hdCBtdXN0IGJlIDEsIDIgb3IgMy5cIil9LGxmWzZdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4gMT09PWI/e3N1YnN0Rm9ybWF0OjEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksY2hhaW5SdWxlU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoZnVuY3Rpb24oKXtyZXR1cm57YmFja3RyYWNrOnRoaXMucGFyc2VVU2hvcnRMaXN0KCksaW5wdXQ6dGhpcy5wYXJzZVVTaG9ydExpc3QodGhpcy5wYXJzZVNob3J0KCktMSksbG9va2FoZWFkOnRoaXMucGFyc2VVU2hvcnRMaXN0KCksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChtZil9fSl9OjI9PT1iP3tzdWJzdEZvcm1hdDoyLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGJhY2t0cmFja0NsYXNzRGVmOnRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGlucHV0Q2xhc3NEZWY6dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksbG9va2FoZWFkQ2xhc3NEZWY6dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksY2hhaW5DbGFzc1NldDp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoZnVuY3Rpb24oKXtyZXR1cm57YmFja3RyYWNrOnRoaXMucGFyc2VVU2hvcnRMaXN0KCksaW5wdXQ6dGhpcy5wYXJzZVVTaG9ydExpc3QodGhpcy5wYXJzZVNob3J0KCktMSksbG9va2FoZWFkOnRoaXMucGFyc2VVU2hvcnRMaXN0KCksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChtZil9fSl9OjM9PT1iP3tzdWJzdEZvcm1hdDozLGJhY2t0cmFja0NvdmVyYWdlOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmNvdmVyYWdlKSksaW5wdXRDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGxvb2thaGVhZENvdmVyYWdlOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmNvdmVyYWdlKSksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChtZil9OnZvaWQgeGUuYXNzZXJ0KCExLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogbG9va3VwIHR5cGUgNiBmb3JtYXQgbXVzdCBiZSAxLCAyIG9yIDMuXCIpfSxsZls3XT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKTt4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgRXh0ZW5zaW9uIFN1YnN0aXR1dGlvbiBzdWJ0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIik7dmFyIGI9dGhpcy5wYXJzZVVTaG9ydCgpLGM9bmV3IFEodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucGFyc2VVTG9uZygpKTtyZXR1cm57c3Vic3RGb3JtYXQ6MSxsb29rdXBUeXBlOmIsZXh0ZW5zaW9uOmxmW2JdLmNhbGwoYyl9fSxsZls4XT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWEsXCJHU1VCIFJldmVyc2UgQ2hhaW5pbmcgQ29udGV4dHVhbCBTaW5nbGUgU3Vic3RpdHV0aW9uIFN1YnRhYmxlIGlkZW50aWZpZXItZm9ybWF0IG11c3QgYmUgMVwiKSx7c3Vic3RGb3JtYXQ6YSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxiYWNrdHJhY2tDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGxvb2thaGVhZENvdmVyYWdlOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmNvdmVyYWdlKSksc3Vic3RpdHV0ZXM6dGhpcy5wYXJzZVVTaG9ydExpc3QoKX19O3ZhciBuZj1uZXcgQXJyYXkoOSk7bmZbMV09ZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLnN1YnN0Rm9ybWF0P25ldyBJZS5UYWJsZShcInN1YnN0aXR1dGlvblRhYmxlXCIsW3tuYW1lOlwic3Vic3RGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJjb3ZlcmFnZVwiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Db3ZlcmFnZShhLmNvdmVyYWdlKX0se25hbWU6XCJkZWx0YUdseXBoSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5kZWx0YUdseXBoSWR9XSk6bmV3IEllLlRhYmxlKFwic3Vic3RpdHV0aW9uVGFibGVcIixbe25hbWU6XCJzdWJzdEZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToyfSx7bmFtZTpcImNvdmVyYWdlXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkNvdmVyYWdlKGEuY292ZXJhZ2UpfV0uY29uY2F0KEllLnVzaG9ydExpc3QoXCJzdWJzdGl0dXRlXCIsYS5zdWJzdGl0dXRlKSkpfSxuZlszXT1mdW5jdGlvbihhKXtyZXR1cm4geGUuYXNzZXJ0KDE9PT1hLnN1YnN0Rm9ybWF0LFwiTG9va3VwIHR5cGUgMyBzdWJzdEZvcm1hdCBtdXN0IGJlIDEuXCIpLG5ldyBJZS5UYWJsZShcInN1YnN0aXR1dGlvblRhYmxlXCIsW3tuYW1lOlwic3Vic3RGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJjb3ZlcmFnZVwiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Db3ZlcmFnZShhLmNvdmVyYWdlKX1dLmNvbmNhdChJZS50YWJsZUxpc3QoXCJhbHRTZXRcIixhLmFsdGVybmF0ZVNldHMsZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcImFsdGVybmF0ZVNldFRhYmxlXCIsSWUudXNob3J0TGlzdChcImFsdGVybmF0ZVwiLGEpKX0pKSl9LG5mWzRdPWZ1bmN0aW9uKGEpe3JldHVybiB4ZS5hc3NlcnQoMT09PWEuc3Vic3RGb3JtYXQsXCJMb29rdXAgdHlwZSA0IHN1YnN0Rm9ybWF0IG11c3QgYmUgMS5cIiksbmV3IEllLlRhYmxlKFwic3Vic3RpdHV0aW9uVGFibGVcIixbe25hbWU6XCJzdWJzdEZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcImNvdmVyYWdlXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkNvdmVyYWdlKGEuY292ZXJhZ2UpfV0uY29uY2F0KEllLnRhYmxlTGlzdChcImxpZ1NldFwiLGEubGlnYXR1cmVTZXRzLGZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJsaWdhdHVyZVNldFRhYmxlXCIsSWUudGFibGVMaXN0KFwibGlnYXR1cmVcIixhLGZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJsaWdhdHVyZVRhYmxlXCIsW3tuYW1lOlwibGlnR2x5cGhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5saWdHbHlwaH1dLmNvbmNhdChJZS51c2hvcnRMaXN0KFwiY29tcG9uZW50XCIsYS5jb21wb25lbnRzLGEuY29tcG9uZW50cy5sZW5ndGgrMSkpKX0pKX0pKSl9O3ZhciBvZj17cGFyc2U6aWIsbWFrZTpqYn0scGY9e3BhcnNlOmtiLG1ha2U6bGJ9LHFmPXttYWtlOnBiLGZvbnRUb1RhYmxlOnNiLGNvbXB1dGVDaGVja1N1bTpuYn07d2IucHJvdG90eXBlPXtzZWFyY2hUYWc6dGIsYmluU2VhcmNoOnViLGdldFRhYmxlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZm9udC50YWJsZXNbdGhpcy50YWJsZU5hbWVdO3JldHVybiFiJiZhJiYoYj10aGlzLmZvbnQudGFibGVzW3RoaXMudGFibGVOYW1lXT10aGlzLmNyZWF0ZURlZmF1bHRUYWJsZSgpKSxifSxnZXRTY3JpcHROYW1lczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0VGFibGUoKTtyZXR1cm4gYT9hLnNjcmlwdHMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnRhZ30pOltdfSxnZXREZWZhdWx0U2NyaXB0TmFtZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0VGFibGUoKTtpZihhKXtmb3IodmFyIGI9ITEsYz0wO2M8YS5zY3JpcHRzLmxlbmd0aDtjKyspe3ZhciBkPWEuc2NyaXB0c1tjXS50YWc7aWYoXCJERkxUXCI9PT1kKXJldHVybiBkO1wibGF0blwiPT09ZCYmKGI9ITApfXJldHVybiBiP1wibGF0blwiOnZvaWQgMH19LGdldFNjcmlwdFRhYmxlOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5nZXRUYWJsZShiKTtpZihjKXthPWF8fFwiREZMVFwiO3ZhciBkPWMuc2NyaXB0cyxlPXRiKGMuc2NyaXB0cyxhKTtpZihlPj0wKXJldHVybiBkW2VdLnNjcmlwdDtpZihiKXt2YXIgZj17dGFnOmEsc2NyaXB0OntkZWZhdWx0TGFuZ1N5czp7cmVzZXJ2ZWQ6MCxyZXFGZWF0dXJlSW5kZXg6NjU1MzUsZmVhdHVyZUluZGV4ZXM6W119LGxhbmdTeXNSZWNvcmRzOltdfX07cmV0dXJuIGQuc3BsaWNlKC0xLWUsMCxmKSxmLnNjcmlwdH19fSxnZXRMYW5nU3lzVGFibGU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuZ2V0U2NyaXB0VGFibGUoYSxjKTtpZihkKXtpZighYnx8XCJkZmx0XCI9PT1ifHxcIkRGTFRcIj09PWIpcmV0dXJuIGQuZGVmYXVsdExhbmdTeXM7dmFyIGU9dGIoZC5sYW5nU3lzUmVjb3JkcyxiKTtpZihlPj0wKXJldHVybiBkLmxhbmdTeXNSZWNvcmRzW2VdLmxhbmdTeXM7aWYoYyl7dmFyIGY9e3RhZzpiLGxhbmdTeXM6e3Jlc2VydmVkOjAscmVxRmVhdHVyZUluZGV4OjY1NTM1LGZlYXR1cmVJbmRleGVzOltdfX07cmV0dXJuIGQubGFuZ1N5c1JlY29yZHMuc3BsaWNlKC0xLWUsMCxmKSxmLmxhbmdTeXN9fX0sZ2V0RmVhdHVyZVRhYmxlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZ2V0TGFuZ1N5c1RhYmxlKGEsYixkKTtpZihlKXtmb3IodmFyIGYsZz1lLmZlYXR1cmVJbmRleGVzLGg9dGhpcy5mb250LnRhYmxlc1t0aGlzLnRhYmxlTmFtZV0uZmVhdHVyZXMsaT0wO2k8Zy5sZW5ndGg7aSsrKWlmKGY9aFtnW2ldXSxmLnRhZz09PWMpcmV0dXJuIGYuZmVhdHVyZTtpZihkKXt2YXIgaj1oLmxlbmd0aDtyZXR1cm4geGUuYXNzZXJ0KDA9PT1qfHxjPj1oW2otMV0udGFnLFwiRmVhdHVyZXMgbXVzdCBiZSBhZGRlZCBpbiBhbHBoYWJldGljYWwgb3JkZXIuXCIpLGY9e3RhZzpjLGZlYXR1cmU6e3BhcmFtczowLGxvb2t1cExpc3RJbmRleGVzOltdfX0saC5wdXNoKGYpLGcucHVzaChqKSxmLmZlYXR1cmV9fX0sZ2V0TG9va3VwVGFibGVzOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9dGhpcy5nZXRGZWF0dXJlVGFibGUoYSxiLGMsZSksZz1bXTtpZihmKXtmb3IodmFyIGgsaT1mLmxvb2t1cExpc3RJbmRleGVzLGo9dGhpcy5mb250LnRhYmxlc1t0aGlzLnRhYmxlTmFtZV0ubG9va3VwcyxrPTA7azxpLmxlbmd0aDtrKyspaD1qW2lba11dLGgubG9va3VwVHlwZT09PWQmJmcucHVzaChoKTtpZigwPT09Zy5sZW5ndGgmJmUpe2g9e2xvb2t1cFR5cGU6ZCxsb29rdXBGbGFnOjAsc3VidGFibGVzOltdLG1hcmtGaWx0ZXJpbmdTZXQ6dm9pZCAwfTt2YXIgbD1qLmxlbmd0aDtyZXR1cm4gai5wdXNoKGgpLGkucHVzaChsKSxbaF19fXJldHVybiBnfSxnZXRHbHlwaENsYXNzOmZ1bmN0aW9uKGEsYil7c3dpdGNoKGEuZm9ybWF0KXtjYXNlIDE6cmV0dXJuIGEuc3RhcnRHbHlwaDw9YiYmYjxhLnN0YXJ0R2x5cGgrYS5jbGFzc2VzLmxlbmd0aD9hLmNsYXNzZXNbYi1hLnN0YXJ0R2x5cGhdOjA7Y2FzZSAyOnZhciBjPXZiKGEucmFuZ2VzLGIpO3JldHVybiBjP2MuY2xhc3NJZDowfX0sZ2V0Q292ZXJhZ2VJbmRleDpmdW5jdGlvbihhLGIpe3N3aXRjaChhLmZvcm1hdCl7Y2FzZSAxOnZhciBjPXViKGEuZ2x5cGhzLGIpO3JldHVybiBjPj0wP2M6LTE7Y2FzZSAyOnZhciBkPXZiKGEucmFuZ2VzLGIpO3JldHVybiBkP2QuaW5kZXgrYi1kLnN0YXJ0Oi0xfX0sZXhwYW5kQ292ZXJhZ2U6ZnVuY3Rpb24oYSl7aWYoMT09PWEuZm9ybWF0KXJldHVybiBhLmdseXBocztmb3IodmFyIGI9W10sYz1hLnJhbmdlcyxkPTA7ZDxjLmxlbmd0aDtkKyspZm9yKHZhciBlPWNbZF0sZj1lLnN0YXJ0LGc9ZS5lbmQsaD1mO2g8PWc7aCsrKWIucHVzaChoKTtyZXR1cm4gYn19LHhiLnByb3RvdHlwZT13Yi5wcm90b3R5cGUseGIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldERlZmF1bHRTY3JpcHROYW1lKCk7dGhpcy5kZWZhdWx0S2VybmluZ1RhYmxlcz10aGlzLmdldEtlcm5pbmdUYWJsZXMoYSl9LHhiLnByb3RvdHlwZS5nZXRLZXJuaW5nVmFsdWU9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD10aGlzLGU9MDtlPGEubGVuZ3RoO2UrKylmb3IodmFyIGY9YVtlXS5zdWJ0YWJsZXMsZz0wO2c8Zi5sZW5ndGg7ZysrKXt2YXIgaD1mW2ddLGk9ZC5nZXRDb3ZlcmFnZUluZGV4KGguY292ZXJhZ2UsYik7aWYoIShpPDApKXN3aXRjaChoLnBvc0Zvcm1hdCl7Y2FzZSAxOmZvcih2YXIgaj1oLnBhaXJTZXRzW2ldLGs9MDtrPGoubGVuZ3RoO2srKyl7dmFyIGw9altrXTtpZihsLnNlY29uZEdseXBoPT09YylyZXR1cm4gbC52YWx1ZTEmJmwudmFsdWUxLnhBZHZhbmNlfHwwfWJyZWFrO2Nhc2UgMjp2YXIgbT1kLmdldEdseXBoQ2xhc3MoaC5jbGFzc0RlZjEsYiksbj1kLmdldEdseXBoQ2xhc3MoaC5jbGFzc0RlZjIsYyksbz1oLmNsYXNzUmVjb3Jkc1ttXVtuXTtyZXR1cm4gby52YWx1ZTEmJm8udmFsdWUxLnhBZHZhbmNlfHwwfX1yZXR1cm4gMH0seGIucHJvdG90eXBlLmdldEtlcm5pbmdUYWJsZXM9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLmZvbnQudGFibGVzLmdwb3MpcmV0dXJuIHRoaXMuZ2V0TG9va3VwVGFibGVzKGEsYixcImtlcm5cIiwyKX0seWIucHJvdG90eXBlPXdiLnByb3RvdHlwZSx5Yi5wcm90b3R5cGUuY3JlYXRlRGVmYXVsdFRhYmxlPWZ1bmN0aW9uKCl7cmV0dXJue3ZlcnNpb246MSxzY3JpcHRzOlt7dGFnOlwiREZMVFwiLHNjcmlwdDp7ZGVmYXVsdExhbmdTeXM6e3Jlc2VydmVkOjAscmVxRmVhdHVyZUluZGV4OjY1NTM1LGZlYXR1cmVJbmRleGVzOltdfSxsYW5nU3lzUmVjb3JkczpbXX19XSxmZWF0dXJlczpbXSxsb29rdXBzOltdfX0seWIucHJvdG90eXBlLmdldFNpbmdsZT1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT1bXSxmPXRoaXMuZ2V0TG9va3VwVGFibGVzKGIsYyxhLDEpLGc9MDtnPGYubGVuZ3RoO2crKylmb3IodmFyIGg9ZltnXS5zdWJ0YWJsZXMsaT0wO2k8aC5sZW5ndGg7aSsrKXt2YXIgaj1oW2ldLGs9ZC5leHBhbmRDb3ZlcmFnZShqLmNvdmVyYWdlKSxsPXZvaWQgMDtpZigxPT09ai5zdWJzdEZvcm1hdCl7dmFyIG09ai5kZWx0YUdseXBoSWQ7Zm9yKGw9MDtsPGsubGVuZ3RoO2wrKyl7dmFyIG49a1tsXTtlLnB1c2goe3N1YjpuLGJ5Om4rbX0pfX1lbHNle3ZhciBvPWouc3Vic3RpdHV0ZTtmb3IobD0wO2w8ay5sZW5ndGg7bCsrKWUucHVzaCh7c3ViOmtbbF0sYnk6b1tsXX0pfX1yZXR1cm4gZX0seWIucHJvdG90eXBlLmdldEFsdGVybmF0ZXM9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD10aGlzLGU9W10sZj10aGlzLmdldExvb2t1cFRhYmxlcyhiLGMsYSwzKSxnPTA7ZzxmLmxlbmd0aDtnKyspZm9yKHZhciBoPWZbZ10uc3VidGFibGVzLGk9MDtpPGgubGVuZ3RoO2krKylmb3IodmFyIGo9aFtpXSxrPWQuZXhwYW5kQ292ZXJhZ2Uoai5jb3ZlcmFnZSksbD1qLmFsdGVybmF0ZVNldHMsbT0wO208ay5sZW5ndGg7bSsrKWUucHVzaCh7c3ViOmtbbV0sYnk6bFttXX0pO3JldHVybiBlfSx5Yi5wcm90b3R5cGUuZ2V0TGlnYXR1cmVzPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPVtdLGY9dGhpcy5nZXRMb29rdXBUYWJsZXMoYixjLGEsNCksZz0wO2c8Zi5sZW5ndGg7ZysrKWZvcih2YXIgaD1mW2ddLnN1YnRhYmxlcyxpPTA7aTxoLmxlbmd0aDtpKyspZm9yKHZhciBqPWhbaV0saz1kLmV4cGFuZENvdmVyYWdlKGouY292ZXJhZ2UpLGw9ai5saWdhdHVyZVNldHMsbT0wO208ay5sZW5ndGg7bSsrKWZvcih2YXIgbj1rW21dLG89bFttXSxwPTA7cDxvLmxlbmd0aDtwKyspe3ZhciBxPW9bcF07ZS5wdXNoKHtzdWI6W25dLmNvbmNhdChxLmNvbXBvbmVudHMpLGJ5OnEubGlnR2x5cGh9KX1yZXR1cm4gZX0seWIucHJvdG90eXBlLmFkZFNpbmdsZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldExvb2t1cFRhYmxlcyhjLGQsYSwxLCEwKVswXSxmPUFiKGUsMix7c3Vic3RGb3JtYXQ6Mixjb3ZlcmFnZTp7Zm9ybWF0OjEsZ2x5cGhzOltdfSxzdWJzdGl0dXRlOltdfSk7eGUuYXNzZXJ0KDE9PT1mLmNvdmVyYWdlLmZvcm1hdCxcIkxpZ2F0dXJlOiB1bmFibGUgdG8gbW9kaWZ5IGNvdmVyYWdlIHRhYmxlIGZvcm1hdCBcIitmLmNvdmVyYWdlLmZvcm1hdCk7dmFyIGc9Yi5zdWIsaD10aGlzLmJpblNlYXJjaChmLmNvdmVyYWdlLmdseXBocyxnKTtoPDAmJihoPS0xLWgsZi5jb3ZlcmFnZS5nbHlwaHMuc3BsaWNlKGgsMCxnKSxmLnN1YnN0aXR1dGUuc3BsaWNlKGgsMCwwKSksZi5zdWJzdGl0dXRlW2hdPWIuYnl9LHliLnByb3RvdHlwZS5hZGRBbHRlcm5hdGU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5nZXRMb29rdXBUYWJsZXMoYyxkLGEsMywhMClbMF0sZj1BYihlLDEse3N1YnN0Rm9ybWF0OjEsY292ZXJhZ2U6e2Zvcm1hdDoxLGdseXBoczpbXX0sYWx0ZXJuYXRlU2V0czpbXX0pO3hlLmFzc2VydCgxPT09Zi5jb3ZlcmFnZS5mb3JtYXQsXCJMaWdhdHVyZTogdW5hYmxlIHRvIG1vZGlmeSBjb3ZlcmFnZSB0YWJsZSBmb3JtYXQgXCIrZi5jb3ZlcmFnZS5mb3JtYXQpO3ZhciBnPWIuc3ViLGg9dGhpcy5iaW5TZWFyY2goZi5jb3ZlcmFnZS5nbHlwaHMsZyk7aDwwJiYoaD0tMS1oLGYuY292ZXJhZ2UuZ2x5cGhzLnNwbGljZShoLDAsZyksZi5hbHRlcm5hdGVTZXRzLnNwbGljZShoLDAsMCkpLGYuYWx0ZXJuYXRlU2V0c1toXT1iLmJ5fSx5Yi5wcm90b3R5cGUuYWRkTGlnYXR1cmU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5nZXRMb29rdXBUYWJsZXMoYyxkLGEsNCwhMClbMF0sZj1lLnN1YnRhYmxlc1swXTtmfHwoZj17c3Vic3RGb3JtYXQ6MSxjb3ZlcmFnZTp7Zm9ybWF0OjEsZ2x5cGhzOltdfSxsaWdhdHVyZVNldHM6W119LGUuc3VidGFibGVzWzBdPWYpLHhlLmFzc2VydCgxPT09Zi5jb3ZlcmFnZS5mb3JtYXQsXCJMaWdhdHVyZTogdW5hYmxlIHRvIG1vZGlmeSBjb3ZlcmFnZSB0YWJsZSBmb3JtYXQgXCIrZi5jb3ZlcmFnZS5mb3JtYXQpO3ZhciBnPWIuc3ViWzBdLGg9Yi5zdWIuc2xpY2UoMSksaT17bGlnR2x5cGg6Yi5ieSxjb21wb25lbnRzOmh9LGo9dGhpcy5iaW5TZWFyY2goZi5jb3ZlcmFnZS5nbHlwaHMsZyk7aWYoaj49MCl7Zm9yKHZhciBrPWYubGlnYXR1cmVTZXRzW2pdLGw9MDtsPGsubGVuZ3RoO2wrKylpZih6YihrW2xdLmNvbXBvbmVudHMsaCkpcmV0dXJuO2sucHVzaChpKX1lbHNlIGo9LTEtaixmLmNvdmVyYWdlLmdseXBocy5zcGxpY2UoaiwwLGcpLGYubGlnYXR1cmVTZXRzLnNwbGljZShqLDAsW2ldKX0seWIucHJvdG90eXBlLmdldEZlYXR1cmU9ZnVuY3Rpb24oYSxiLGMpe2lmKC9zc1xcZFxcZC8udGVzdChhKSlyZXR1cm4gdGhpcy5nZXRTaW5nbGUoYSxiLGMpO3N3aXRjaChhKXtjYXNlXCJhYWx0XCI6Y2FzZVwic2FsdFwiOnJldHVybiB0aGlzLmdldFNpbmdsZShhLGIsYykuY29uY2F0KHRoaXMuZ2V0QWx0ZXJuYXRlcyhhLGIsYykpO2Nhc2VcImRsaWdcIjpjYXNlXCJsaWdhXCI6Y2FzZVwicmxpZ1wiOnJldHVybiB0aGlzLmdldExpZ2F0dXJlcyhhLGIsYyl9fSx5Yi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEsYixjLGQpe2lmKC9zc1xcZFxcZC8udGVzdChhKSlyZXR1cm4gdGhpcy5hZGRTaW5nbGUoYSxiLGMsZCk7c3dpdGNoKGEpe2Nhc2VcImFhbHRcIjpjYXNlXCJzYWx0XCI6cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGIuYnk/dGhpcy5hZGRTaW5nbGUoYSxiLGMsZCk6dGhpcy5hZGRBbHRlcm5hdGUoYSxiLGMsZCk7Y2FzZVwiZGxpZ1wiOmNhc2VcImxpZ2FcIjpjYXNlXCJybGlnXCI6cmV0dXJuIHRoaXMuYWRkTGlnYXR1cmUoYSxiLGMsZCl9fTt2YXIgcmYsc2YsdGYsdWYsdmY9e2dldFBhdGg6SmIscGFyc2U6TGJ9LHdmPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuc3JQZXJpb2QsYz10aGlzLnNyUGhhc2UsZD10aGlzLnNyVGhyZXNob2xkLGU9MTtyZXR1cm4gYTwwJiYoYT0tYSxlPS0xKSxhKz1kLWMsYT1NYXRoLnRydW5jKGEvYikqYixhKz1jLGE8MD9jKmU6YSplfSx4Zj17eDoxLHk6MCxheGlzOlwieFwiLGRpc3RhbmNlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybihjP2EueG86YS54KS0oZD9iLnhvOmIueCl9LGludGVycG9sYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrO3JldHVybiBkJiZkIT09dGhpcz8oZT1kLmRpc3RhbmNlKGEsYiwhMCwhMCksZj1kLmRpc3RhbmNlKGEsYywhMCwhMCksaT1kLmRpc3RhbmNlKGIsYiwhMSwhMCksaj1kLmRpc3RhbmNlKGMsYywhMSwhMCksZz1NYXRoLmFicyhlKSxoPU1hdGguYWJzKGYpLDA9PT0oaz1nK2gpP3ZvaWQgeGYuc2V0UmVsYXRpdmUoYSxhLChpK2opLzIsZCwhMCk6dm9pZCB4Zi5zZXRSZWxhdGl2ZShhLGEsKGkqaCtqKmcpL2ssZCwhMCkpOihlPWEueG8tYi54byxmPWEueG8tYy54byxpPWIueC1iLnhvLGo9Yy54LWMueG8sZz1NYXRoLmFicyhlKSxoPU1hdGguYWJzKGYpLDA9PT0oaz1nK2gpP3ZvaWQoYS54PWEueG8rKGkraikvMik6dm9pZChhLng9YS54bysoaSpoK2oqZykvaykpfSxub3JtYWxTbG9wZTpOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksc2V0UmVsYXRpdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZighZHx8ZD09PXRoaXMpcmV0dXJuIHZvaWQoYS54PShlP2IueG86Yi54KStjKTt2YXIgZj1lP2IueG86Yi54LGc9ZT9iLnlvOmIueSxoPWYrYypkLngsaT1nK2MqZC55O2EueD1oKyhhLnktaSkvZC5ub3JtYWxTbG9wZX0sc2xvcGU6MCx0b3VjaDpmdW5jdGlvbihhKXthLnhUb3VjaGVkPSEwfSx0b3VjaGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnhUb3VjaGVkfSx1bnRvdWNoOmZ1bmN0aW9uKGEpe2EueFRvdWNoZWQ9ITF9fSx5Zj17eDowLHk6MSxheGlzOlwieVwiLGRpc3RhbmNlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybihjP2EueW86YS55KS0oZD9iLnlvOmIueSl9LGludGVycG9sYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrO3JldHVybiBkJiZkIT09dGhpcz8oZT1kLmRpc3RhbmNlKGEsYiwhMCwhMCksZj1kLmRpc3RhbmNlKGEsYywhMCwhMCksaT1kLmRpc3RhbmNlKGIsYiwhMSwhMCksaj1kLmRpc3RhbmNlKGMsYywhMSwhMCksZz1NYXRoLmFicyhlKSxoPU1hdGguYWJzKGYpLDA9PT0oaz1nK2gpP3ZvaWQgeWYuc2V0UmVsYXRpdmUoYSxhLChpK2opLzIsZCwhMCk6dm9pZCB5Zi5zZXRSZWxhdGl2ZShhLGEsKGkqaCtqKmcpL2ssZCwhMCkpOihlPWEueW8tYi55byxmPWEueW8tYy55byxpPWIueS1iLnlvLGo9Yy55LWMueW8sZz1NYXRoLmFicyhlKSxoPU1hdGguYWJzKGYpLDA9PT0oaz1nK2gpP3ZvaWQoYS55PWEueW8rKGkraikvMik6dm9pZChhLnk9YS55bysoaSpoK2oqZykvaykpfSxub3JtYWxTbG9wZTowLHNldFJlbGF0aXZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoIWR8fGQ9PT10aGlzKXJldHVybiB2b2lkKGEueT0oZT9iLnlvOmIueSkrYyk7dmFyIGY9ZT9iLnhvOmIueCxnPWU/Yi55bzpiLnksaD1mK2MqZC54LGk9ZytjKmQueTthLnk9aStkLm5vcm1hbFNsb3BlKihhLngtaCl9LHNsb3BlOk51bWJlci5QT1NJVElWRV9JTkZJTklUWSx0b3VjaDpmdW5jdGlvbihhKXthLnlUb3VjaGVkPSEwfSx0b3VjaGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnlUb3VjaGVkfSx1bnRvdWNoOmZ1bmN0aW9uKGEpe2EueVRvdWNoZWQ9ITF9fTtPYmplY3QuZnJlZXplKHhmKSxPYmplY3QuZnJlZXplKHlmKSxUYi5wcm90b3R5cGUuZGlzdGFuY2U9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMueCp4Zi5kaXN0YW5jZShhLGIsYyxkKSt0aGlzLnkqeWYuZGlzdGFuY2UoYSxiLGMsZCl9LFRiLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztpZihnPWQuZGlzdGFuY2UoYSxiLCEwLCEwKSxoPWQuZGlzdGFuY2UoYSxjLCEwLCEwKSxlPWQuZGlzdGFuY2UoYixiLCExLCEwKSxmPWQuZGlzdGFuY2UoYyxjLCExLCEwKSxpPU1hdGguYWJzKGcpLGo9TWF0aC5hYnMoaCksMD09PShrPWkraikpcmV0dXJuIHZvaWQgdGhpcy5zZXRSZWxhdGl2ZShhLGEsKGUrZikvMixkLCEwKTt0aGlzLnNldFJlbGF0aXZlKGEsYSwoZSpqK2YqaSkvayxkLCEwKX0sVGIucHJvdG90eXBlLnNldFJlbGF0aXZlPWZ1bmN0aW9uKGEsYixjLGQsZSl7ZD1kfHx0aGlzO3ZhciBmPWU/Yi54bzpiLngsZz1lP2IueW86Yi55LGg9ZitjKmQueCxpPWcrYypkLnksaj1kLm5vcm1hbFNsb3BlLGs9dGhpcy5zbG9wZSxsPWEueCxtPWEueTthLng9KGsqbC1qKmgraS1tKS8oay1qKSxhLnk9ayooYS54LWwpK219LFRiLnByb3RvdHlwZS50b3VjaD1mdW5jdGlvbihhKXthLnhUb3VjaGVkPSEwLGEueVRvdWNoZWQ9ITB9LFZiLnByb3RvdHlwZS5uZXh0VG91Y2hlZD1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5uZXh0UG9pbnRPbkNvbnRvdXI7IWEudG91Y2hlZChiKSYmYiE9PXRoaXM7KWI9Yi5uZXh0UG9pbnRPbkNvbnRvdXI7cmV0dXJuIGJ9LFZiLnByb3RvdHlwZS5wcmV2VG91Y2hlZD1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5wcmV2UG9pbnRPbkNvbnRvdXI7IWEudG91Y2hlZChiKSYmYiE9PXRoaXM7KWI9Yi5wcmV2UG9pbnRPbkNvbnRvdXI7cmV0dXJuIGJ9O3ZhciB6Zj1PYmplY3QuZnJlZXplKG5ldyBWYigwLDApKSxBZj17Y3ZDdXRJbjoxNy8xNixkZWx0YUJhc2U6OSxkZWx0YVNoaWZ0Oi4xMjUsbG9vcDoxLG1pbkRpczoxLGF1dG9GbGlwOiEwfTtNYi5wcm90b3R5cGUuZXhlYz1mdW5jdGlvbihiLGMpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBjKXRocm93IG5ldyBFcnJvcihcIlBvaW50IHNpemUgaXMgbm90IGEgbnVtYmVyIVwiKTtpZighKHRoaXMuX2Vycm9yU3RhdGU+Mikpe3ZhciBkPXRoaXMuZm9udCxlPXRoaXMuX3ByZXBTdGF0ZTtpZighZXx8ZS5wcGVtIT09Yyl7dmFyIGY9dGhpcy5fZnBnbVN0YXRlO2lmKCFmKXtXYi5wcm90b3R5cGU9QWYsZj10aGlzLl9mcGdtU3RhdGU9bmV3IFdiKFwiZnBnbVwiLGQudGFibGVzLmZwZ20pLGYuZnVuY3M9W10sZi5mb250PWQsYS5ERUJVRyYmKGNvbnNvbGUubG9nKFwiLS0tRVhFQyBGUEdNLS0tXCIpLGYuc3RlcD0tMSk7dHJ5e3NmKGYpfWNhdGNoKGEpe3JldHVybiBjb25zb2xlLmxvZyhcIkhpbnRpbmcgZXJyb3IgaW4gRlBHTTpcIithKSx2b2lkKHRoaXMuX2Vycm9yU3RhdGU9Myl9fVdiLnByb3RvdHlwZT1mLGU9dGhpcy5fcHJlcFN0YXRlPW5ldyBXYihcInByZXBcIixkLnRhYmxlcy5wcmVwKSxlLnBwZW09Yzt2YXIgZz1kLnRhYmxlcy5jdnQ7aWYoZylmb3IodmFyIGg9ZS5jdnQ9bmV3IEFycmF5KGcubGVuZ3RoKSxpPWMvZC51bml0c1BlckVtLGo9MDtqPGcubGVuZ3RoO2orKyloW2pdPWdbal0qaTtlbHNlIGUuY3Z0PVtdO2EuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgUFJFUC0tLVwiKSxlLnN0ZXA9LTEpO3RyeXtzZihlKX1jYXRjaChhKXt0aGlzLl9lcnJvclN0YXRlPDImJmNvbnNvbGUubG9nKFwiSGludGluZyBlcnJvciBpbiBQUkVQOlwiK2EpLHRoaXMuX2Vycm9yU3RhdGU9Mn19aWYoISh0aGlzLl9lcnJvclN0YXRlPjEpKXRyeXtyZXR1cm4gdGYoYixlKX1jYXRjaChhKXtyZXR1cm4gdGhpcy5fZXJyb3JTdGF0ZTwxJiYoY29uc29sZS5sb2coXCJIaW50aW5nIGVycm9yOlwiK2EpLGNvbnNvbGUubG9nKFwiTm90ZTogZnVydGhlciBoaW50aW5nIGVycm9ycyBhcmUgc2lsZW5jZWRcIikpLHZvaWQodGhpcy5fZXJyb3JTdGF0ZT0xKX19fSx0Zj1mdW5jdGlvbihiLGMpe3ZhciBkLGUsZixnPWMucHBlbS9jLmZvbnQudW5pdHNQZXJFbSxoPWcsaT1iLmNvbXBvbmVudHM7aWYoV2IucHJvdG90eXBlPWMsaSl7dmFyIGo9Yy5mb250O2U9W10sZD1bXTtmb3IodmFyIGs9MDtrPGkubGVuZ3RoO2srKyl7dmFyIGw9aVtrXSxtPWouZ2x5cGhzLmdldChsLmdseXBoSW5kZXgpO2Y9bmV3IFdiKFwiZ2x5ZlwiLG0uaW5zdHJ1Y3Rpb25zKSxhLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIENPTVAgXCIraytcIi0tLVwiKSxmLnN0ZXA9LTEpLHVmKG0sZixnLGgpO2Zvcih2YXIgbj1NYXRoLnJvdW5kKGwuZHgqZyksbz1NYXRoLnJvdW5kKGwuZHkqaCkscD1mLmdab25lLHE9Zi5jb250b3VycyxyPTA7cjxwLmxlbmd0aDtyKyspe3ZhciBzPXBbcl07cy54VG91Y2hlZD1zLnlUb3VjaGVkPSExLHMueG89cy54PXMueCtuLHMueW89cy55PXMueStvfXZhciB0PWUubGVuZ3RoO2UucHVzaC5hcHBseShlLHApO2Zvcih2YXIgdT0wO3U8cS5sZW5ndGg7dSsrKWQucHVzaChxW3VdK3QpfWIuaW5zdHJ1Y3Rpb25zJiYhZi5pbmhpYml0R3JpZEZpdCYmKGY9bmV3IFdiKFwiZ2x5ZlwiLGIuaW5zdHJ1Y3Rpb25zKSxmLmdab25lPWYuejA9Zi56MT1mLnoyPWUsZi5jb250b3Vycz1kLGUucHVzaChuZXcgVmIoMCwwKSxuZXcgVmIoTWF0aC5yb3VuZChiLmFkdmFuY2VXaWR0aCpnKSwwKSksYS5ERUJVRyYmKGNvbnNvbGUubG9nKFwiLS0tRVhFQyBDT01QT1NJVEUtLS1cIiksZi5zdGVwPS0xKSxzZihmKSxlLmxlbmd0aC09Mil9ZWxzZSBmPW5ldyBXYihcImdseWZcIixiLmluc3RydWN0aW9ucyksYS5ERUJVRyYmKGNvbnNvbGUubG9nKFwiLS0tRVhFQyBHTFlQSC0tLVwiKSxmLnN0ZXA9LTEpLHVmKGIsZixnLGgpLGU9Zi5nWm9uZTtyZXR1cm4gZX0sdWY9ZnVuY3Rpb24oYixjLGQsZSl7Zm9yKHZhciBmLGc9Yi5wb2ludHN8fFtdLGg9Zy5sZW5ndGgsaT1jLmdab25lPWMuejA9Yy56MT1jLnoyPVtdLGo9Yy5jb250b3Vycz1bXSxrPTA7azxoO2srKylmPWdba10saVtrXT1uZXcgVmIoZi54KmQsZi55KmUsZi5sYXN0UG9pbnRPZkNvbnRvdXIsZi5vbkN1cnZlKTtmb3IodmFyIGwsbSxuPTA7bjxoO24rKylmPWlbbl0sbHx8KGw9ZixqLnB1c2gobikpLGYubGFzdFBvaW50T2ZDb250b3VyPyhmLm5leHRQb2ludE9uQ29udG91cj1sLGwucHJldlBvaW50T25Db250b3VyPWYsbD12b2lkIDApOihtPWlbbisxXSxmLm5leHRQb2ludE9uQ29udG91cj1tLG0ucHJldlBvaW50T25Db250b3VyPWYpO2lmKCFjLmluaGliaXRHcmlkRml0KXtpZihhLkRFQlVHKXtjb25zb2xlLmxvZyhcIlBST0NFU1NJTkcgR0xZUEhcIixjLnN0YWNrKTtmb3IodmFyIG89MDtvPGg7bysrKWNvbnNvbGUubG9nKG8saVtvXS54LGlbb10ueSl9aWYoaS5wdXNoKG5ldyBWYigwLDApLG5ldyBWYihNYXRoLnJvdW5kKGIuYWR2YW5jZVdpZHRoKmQpLDApKSxzZihjKSxpLmxlbmd0aC09MixhLkRFQlVHKXtjb25zb2xlLmxvZyhcIkZJTklTSEVEIEdMWVBIXCIsYy5zdGFjayk7Zm9yKHZhciBwPTA7cDxoO3ArKyljb25zb2xlLmxvZyhwLGlbcF0ueCxpW3BdLnkpfX19LHNmPWZ1bmN0aW9uKGIpe3ZhciBjPWIucHJvZztpZihjKXt2YXIgZCxlPWMubGVuZ3RoO2ZvcihiLmlwPTA7Yi5pcDxlO2IuaXArKyl7aWYoYS5ERUJVRyYmYi5zdGVwKyssIShkPXJmW2NbYi5pcF1dKSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGluc3RydWN0aW9uOiAweFwiK051bWJlcihjW2IuaXBdKS50b1N0cmluZygxNikpO2QoYil9fX0scmY9W1piLmJpbmQodm9pZCAwLHlmKSxaYi5iaW5kKHZvaWQgMCx4ZiksJGIuYmluZCh2b2lkIDAseWYpLCRiLmJpbmQodm9pZCAwLHhmKSxfYi5iaW5kKHZvaWQgMCx5ZiksX2IuYmluZCh2b2lkIDAseGYpLGFjLmJpbmQodm9pZCAwLDApLGFjLmJpbmQodm9pZCAwLDEpLGJjLmJpbmQodm9pZCAwLDApLGJjLmJpbmQodm9pZCAwLDEpLGNjLGRjLGVjLGZjLGdjLGhjLGljLGpjLGtjLGxjLG1jLG5jLG9jLHBjLHFjLHJjLHNjLHRjLHVjLHZjLHZvaWQgMCx2b2lkIDAsd2MseGMseWMsemMsQWMsRGMsRWMsdm9pZCAwLHZvaWQgMCx2b2lkIDAsQmMsQ2MsRmMsdm9pZCAwLEdjLmJpbmQodm9pZCAwLDApLEdjLmJpbmQodm9pZCAwLDEpLEhjLmJpbmQodm9pZCAwLHlmKSxIYy5iaW5kKHZvaWQgMCx4ZiksSWMuYmluZCh2b2lkIDAsMCksSWMuYmluZCh2b2lkIDAsMSksSmMuYmluZCh2b2lkIDAsMCksSmMuYmluZCh2b2lkIDAsMSksS2MuYmluZCh2b2lkIDAsMCksS2MuYmluZCh2b2lkIDAsMSksTGMsTWMsTmMuYmluZCh2b2lkIDAsMCksTmMuYmluZCh2b2lkIDAsMSksT2MsUGMsUWMuYmluZCh2b2lkIDAsMCksUWMuYmluZCh2b2lkIDAsMSksUmMsU2MsVGMsVWMsVmMsV2MsWGMuYmluZCh2b2lkIDAsMCksWGMuYmluZCh2b2lkIDAsMSksdm9pZCAwLFljLmJpbmQodm9pZCAwLDApLFljLmJpbmQodm9pZCAwLDEpLFpjLHZvaWQgMCwkYyx2b2lkIDAsdm9pZCAwLF9jLGFkLGJkLGNkLGRkLGVkLGZkLGdkLGhkLGlkLGpkLGtkLGxkLG1kLmJpbmQodm9pZCAwLDEpLG5kLG9kLHBkLHFkLHJkLHNkLHRkLHVkLHZkLHdkLHhkLmJpbmQodm9pZCAwLDApLHhkLmJpbmQodm9pZCAwLDEpLHhkLmJpbmQodm9pZCAwLDIpLHhkLmJpbmQodm9pZCAwLDMpLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx5ZCxtZC5iaW5kKHZvaWQgMCwyKSxtZC5iaW5kKHZvaWQgMCwzKSx6ZC5iaW5kKHZvaWQgMCwxKSx6ZC5iaW5kKHZvaWQgMCwyKSx6ZC5iaW5kKHZvaWQgMCwzKSxBZCxCZCx2b2lkIDAsdm9pZCAwLENkLHZvaWQgMCxEZCxFZCx4Yyx4Yyx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLEZkLEdkLmJpbmQodm9pZCAwLDApLEdkLmJpbmQodm9pZCAwLDEpLEhkLHZvaWQgMCxJZCxKZCxLZCxMZCxNZCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxOZC5iaW5kKHZvaWQgMCwxKSxOZC5iaW5kKHZvaWQgMCwyKSxOZC5iaW5kKHZvaWQgMCwzKSxOZC5iaW5kKHZvaWQgMCw0KSxOZC5iaW5kKHZvaWQgMCw1KSxOZC5iaW5kKHZvaWQgMCw2KSxOZC5iaW5kKHZvaWQgMCw3KSxOZC5iaW5kKHZvaWQgMCw4KSxPZC5iaW5kKHZvaWQgMCwxKSxPZC5iaW5kKHZvaWQgMCwyKSxPZC5iaW5kKHZvaWQgMCwzKSxPZC5iaW5kKHZvaWQgMCw0KSxPZC5iaW5kKHZvaWQgMCw1KSxPZC5iaW5kKHZvaWQgMCw2KSxPZC5iaW5kKHZvaWQgMCw3KSxPZC5iaW5kKHZvaWQgMCw4KSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwwLDApLFBkLmJpbmQodm9pZCAwLDAsMCwwLDAsMSksUGQuYmluZCh2b2lkIDAsMCwwLDAsMCwyKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwwLDMpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDEsMCksUGQuYmluZCh2b2lkIDAsMCwwLDAsMSwxKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwxLDIpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDEsMyksUGQuYmluZCh2b2lkIDAsMCwwLDEsMCwwKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwwLDEpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDAsMiksUGQuYmluZCh2b2lkIDAsMCwwLDEsMCwzKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwxLDApLFBkLmJpbmQodm9pZCAwLDAsMCwxLDEsMSksUGQuYmluZCh2b2lkIDAsMCwwLDEsMSwyKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwxLDMpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDAsMCksUGQuYmluZCh2b2lkIDAsMCwxLDAsMCwxKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwwLDIpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDAsMyksUGQuYmluZCh2b2lkIDAsMCwxLDAsMSwwKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwxLDEpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDEsMiksUGQuYmluZCh2b2lkIDAsMCwxLDAsMSwzKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwwLDApLFBkLmJpbmQodm9pZCAwLDAsMSwxLDAsMSksUGQuYmluZCh2b2lkIDAsMCwxLDEsMCwyKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwwLDMpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDEsMCksUGQuYmluZCh2b2lkIDAsMCwxLDEsMSwxKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwxLDIpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDEsMyksUGQuYmluZCh2b2lkIDAsMSwwLDAsMCwwKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwwLDEpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDAsMiksUGQuYmluZCh2b2lkIDAsMSwwLDAsMCwzKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwxLDApLFBkLmJpbmQodm9pZCAwLDEsMCwwLDEsMSksUGQuYmluZCh2b2lkIDAsMSwwLDAsMSwyKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwxLDMpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDAsMCksUGQuYmluZCh2b2lkIDAsMSwwLDEsMCwxKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwwLDIpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDAsMyksUGQuYmluZCh2b2lkIDAsMSwwLDEsMSwwKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwxLDEpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDEsMiksUGQuYmluZCh2b2lkIDAsMSwwLDEsMSwzKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwwLDApLFBkLmJpbmQodm9pZCAwLDEsMSwwLDAsMSksUGQuYmluZCh2b2lkIDAsMSwxLDAsMCwyKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwwLDMpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDEsMCksUGQuYmluZCh2b2lkIDAsMSwxLDAsMSwxKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwxLDIpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDEsMyksUGQuYmluZCh2b2lkIDAsMSwxLDEsMCwwKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwwLDEpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDAsMiksUGQuYmluZCh2b2lkIDAsMSwxLDEsMCwzKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwxLDApLFBkLmJpbmQodm9pZCAwLDEsMSwxLDEsMSksUGQuYmluZCh2b2lkIDAsMSwxLDEsMSwyKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwxLDMpXTt2YXIgQmY9QXJyYXkuZnJvbXx8ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF0Y2goL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0/fFteXFx1RDgwMC1cXHVERkZGXXwuL2cpfHxbXX07UWQucHJvdG90eXBlLmhhc0NoYXI9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT10aGlzLmVuY29kaW5nLmNoYXJUb0dseXBoSW5kZXgoYSl9LFFkLnByb3RvdHlwZS5jaGFyVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVuY29kaW5nLmNoYXJUb0dseXBoSW5kZXgoYSl9LFFkLnByb3RvdHlwZS5jaGFyVG9HbHlwaD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmNoYXJUb0dseXBoSW5kZXgoYSksYz10aGlzLmdseXBocy5nZXQoYik7cmV0dXJuIGN8fChjPXRoaXMuZ2x5cGhzLmdldCgwKSksY30sUWQucHJvdG90eXBlLnN0cmluZ1RvR2x5cGhzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztiPWJ8fHRoaXMuZGVmYXVsdFJlbmRlck9wdGlvbnM7Zm9yKHZhciBkPUJmKGEpLGU9W10sZj0wO2Y8ZC5sZW5ndGg7Zis9MSl7dmFyIGc9ZFtmXTtlLnB1c2goYy5jaGFyVG9HbHlwaEluZGV4KGcpKX12YXIgaD1lLmxlbmd0aDtpZihiLmZlYXR1cmVzKXt2YXIgaT1iLnNjcmlwdHx8dGhpcy5zdWJzdGl0dXRpb24uZ2V0RGVmYXVsdFNjcmlwdE5hbWUoKSxqPVtdO2IuZmVhdHVyZXMubGlnYSYmKGo9ai5jb25jYXQodGhpcy5zdWJzdGl0dXRpb24uZ2V0RmVhdHVyZShcImxpZ2FcIixpLGIubGFuZ3VhZ2UpKSksYi5mZWF0dXJlcy5ybGlnJiYoaj1qLmNvbmNhdCh0aGlzLnN1YnN0aXR1dGlvbi5nZXRGZWF0dXJlKFwicmxpZ1wiLGksYi5sYW5ndWFnZSkpKTtmb3IodmFyIGs9MDtrPGg7ays9MSlmb3IodmFyIGw9MDtsPGoubGVuZ3RoO2wrKyl7Zm9yKHZhciBtPWpbbF0sbj1tLnN1YixvPW4ubGVuZ3RoLHA9MDtwPG8mJm5bcF09PT1lW2srcF07KXArKztwPT09byYmKGUuc3BsaWNlKGssbyxtLmJ5KSxoPWgtbysxKX19Zm9yKHZhciBxPW5ldyBBcnJheShoKSxyPXRoaXMuZ2x5cGhzLmdldCgwKSxzPTA7czxoO3MrPTEpcVtzXT1jLmdseXBocy5nZXQoZVtzXSl8fHI7cmV0dXJuIHF9LFFkLnByb3RvdHlwZS5uYW1lVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdseXBoTmFtZXMubmFtZVRvR2x5cGhJbmRleChhKX0sUWQucHJvdG90eXBlLm5hbWVUb0dseXBoPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubmFtZVRvR2x5cGhJbmRleChhKSxjPXRoaXMuZ2x5cGhzLmdldChiKTtyZXR1cm4gY3x8KGM9dGhpcy5nbHlwaHMuZ2V0KDApKSxjfSxRZC5wcm90b3R5cGUuZ2x5cGhJbmRleFRvTmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nbHlwaE5hbWVzLmdseXBoSW5kZXhUb05hbWU/dGhpcy5nbHlwaE5hbWVzLmdseXBoSW5kZXhUb05hbWUoYSk6XCJcIn0sUWQucHJvdG90eXBlLmdldEtlcm5pbmdWYWx1ZT1mdW5jdGlvbihhLGIpe2E9YS5pbmRleHx8YSxiPWIuaW5kZXh8fGI7dmFyIGM9dGhpcy5wb3NpdGlvbi5kZWZhdWx0S2VybmluZ1RhYmxlcztyZXR1cm4gYz90aGlzLnBvc2l0aW9uLmdldEtlcm5pbmdWYWx1ZShjLGEsYik6dGhpcy5rZXJuaW5nUGFpcnNbYStcIixcIitiXXx8MH0sUWQucHJvdG90eXBlLmRlZmF1bHRSZW5kZXJPcHRpb25zPXtrZXJuaW5nOiEwLGZlYXR1cmVzOntsaWdhOiEwLHJsaWc6ITB9fSxRZC5wcm90b3R5cGUuZm9yRWFjaEdseXBoPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz10aGlzO2I9dm9pZCAwIT09Yj9iOjAsYz12b2lkIDAhPT1jP2M6MCxkPXZvaWQgMCE9PWQ/ZDo3MixlPWV8fHRoaXMuZGVmYXVsdFJlbmRlck9wdGlvbnM7dmFyIGgsaT0xL3RoaXMudW5pdHNQZXJFbSpkLGo9dGhpcy5zdHJpbmdUb0dseXBocyhhLGUpO2lmKGUua2VybmluZyl7dmFyIGs9ZS5zY3JpcHR8fHRoaXMucG9zaXRpb24uZ2V0RGVmYXVsdFNjcmlwdE5hbWUoKTtoPXRoaXMucG9zaXRpb24uZ2V0S2VybmluZ1RhYmxlcyhrLGUubGFuZ3VhZ2UpfWZvcih2YXIgbD0wO2w8ai5sZW5ndGg7bCs9MSl7dmFyIG09altsXTtpZihmLmNhbGwoZyxtLGIsYyxkLGUpLG0uYWR2YW5jZVdpZHRoJiYoYis9bS5hZHZhbmNlV2lkdGgqaSksZS5rZXJuaW5nJiZsPGoubGVuZ3RoLTEpe2IrPShoP2cucG9zaXRpb24uZ2V0S2VybmluZ1ZhbHVlKGgsbS5pbmRleCxqW2wrMV0uaW5kZXgpOmcuZ2V0S2VybmluZ1ZhbHVlKG0saltsKzFdKSkqaX1lLmxldHRlclNwYWNpbmc/Yis9ZS5sZXR0ZXJTcGFjaW5nKmQ6ZS50cmFja2luZyYmKGIrPWUudHJhY2tpbmcvMWUzKmQpfXJldHVybiBifSxRZC5wcm90b3R5cGUuZ2V0UGF0aD1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPW5ldyByO3JldHVybiB0aGlzLmZvckVhY2hHbHlwaChhLGIsYyxkLGUsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGc9YS5nZXRQYXRoKGIsYyxkLGUsdGhpcyk7Zi5leHRlbmQoZyl9KSxmfSxRZC5wcm90b3R5cGUuZ2V0UGF0aHM9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoR2x5cGgoYSxiLGMsZCxlLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBnPWEuZ2V0UGF0aChiLGMsZCxlLHRoaXMpO2YucHVzaChnKX0pLGZ9LFFkLnByb3RvdHlwZS5nZXRBZHZhbmNlV2lkdGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLmZvckVhY2hHbHlwaChhLDAsMCxiLGMsZnVuY3Rpb24oKXt9KX0sUWQucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZ2V0UGF0aChiLGMsZCxlLGYpLmRyYXcoYSl9LFFkLnByb3RvdHlwZS5kcmF3UG9pbnRzPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmZvckVhY2hHbHlwaChiLGMsZCxlLGYsZnVuY3Rpb24oYixjLGQsZSl7Yi5kcmF3UG9pbnRzKGEsYyxkLGUpfSl9LFFkLnByb3RvdHlwZS5kcmF3TWV0cmljcz1mdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5mb3JFYWNoR2x5cGgoYixjLGQsZSxmLGZ1bmN0aW9uKGIsYyxkLGUpe2IuZHJhd01ldHJpY3MoYSxjLGQsZSl9KX0sUWQucHJvdG90eXBlLmdldEVuZ2xpc2hOYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubmFtZXNbYV07aWYoYilyZXR1cm4gYi5lbn0sUWQucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe31mdW5jdGlvbiBiKGIpe3ZhciBkPWMuZ2V0RW5nbGlzaE5hbWUoYik7YShkJiZkLnRyaW0oKS5sZW5ndGg+MCxcIk5vIEVuZ2xpc2ggXCIrYitcIiBzcGVjaWZpZWQuXCIpfXZhciBjPXRoaXM7YihcImZvbnRGYW1pbHlcIiksYihcIndlaWdodE5hbWVcIiksYihcIm1hbnVmYWN0dXJlclwiKSxiKFwiY29weXJpZ2h0XCIpLGIoXCJ2ZXJzaW9uXCIpLGEodGhpcy51bml0c1BlckVtPjAsXCJObyB1bml0c1BlckVtIHNwZWNpZmllZC5cIil9LFFkLnByb3RvdHlwZS50b1RhYmxlcz1mdW5jdGlvbigpe3JldHVybiBxZi5mb250VG9UYWJsZSh0aGlzKX0sUWQucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybihcIkZvbnQudG9CdWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIEZvbnQudG9BcnJheUJ1ZmZlciBpbnN0ZWFkLlwiKSx0aGlzLnRvQXJyYXlCdWZmZXIoKX0sUWQucHJvdG90eXBlLnRvQXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy50b1RhYmxlcygpLGI9YS5lbmNvZGUoKSxjPW5ldyBBcnJheUJ1ZmZlcihiLmxlbmd0aCksZD1uZXcgVWludDhBcnJheShjKSxlPTA7ZTxiLmxlbmd0aDtlKyspZFtlXT1iW2VdO3JldHVybiBjfSxRZC5wcm90b3R5cGUuZG93bmxvYWQ9ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5nZXRFbmdsaXNoTmFtZShcImZvbnRGYW1pbHlcIiksZD10aGlzLmdldEVuZ2xpc2hOYW1lKFwiZm9udFN1YmZhbWlseVwiKTthPWF8fGMucmVwbGFjZSgvXFxzL2csXCJcIikrXCItXCIrZCtcIi5vdGZcIjt2YXIgZT10aGlzLnRvQXJyYXlCdWZmZXIoKTtpZihCYigpKXdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbT13aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW18fHdpbmRvdy53ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbSx3aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW0od2luZG93LlRFTVBPUkFSWSxlLmJ5dGVMZW5ndGgsZnVuY3Rpb24oYil7Yi5yb290LmdldEZpbGUoYSx7Y3JlYXRlOiEwfSxmdW5jdGlvbihhKXthLmNyZWF0ZVdyaXRlcihmdW5jdGlvbihiKXt2YXIgYz1uZXcgRGF0YVZpZXcoZSksZD1uZXcgQmxvYihbY10se3R5cGU6XCJmb250L29wZW50eXBlXCJ9KTtiLndyaXRlKGQpLGIuYWRkRXZlbnRMaXN0ZW5lcihcIndyaXRlZW5kXCIsZnVuY3Rpb24oKXtsb2NhdGlvbi5ocmVmPWEudG9VUkwoKX0sITEpfSl9KX0sZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKGEubmFtZStcIjogXCIrYS5tZXNzYWdlKX0pO2Vsc2V7dmFyIGY9YihcImZzXCIpLGc9RGIoZSk7Zi53cml0ZUZpbGVTeW5jKGEsZyl9fSxRZC5wcm90b3R5cGUuZnNTZWxlY3Rpb25WYWx1ZXM9e0lUQUxJQzoxLFVOREVSU0NPUkU6MixORUdBVElWRTo0LE9VVExJTkVEOjgsU1RSSUtFT1VUOjE2LEJPTEQ6MzIsUkVHVUxBUjo2NCxVU0VSX1RZUE9fTUVUUklDUzoxMjgsV1dTOjI1NixPQkxJUVVFOjUxMn0sUWQucHJvdG90eXBlLnVzV2lkdGhDbGFzc2VzPXtVTFRSQV9DT05ERU5TRUQ6MSxFWFRSQV9DT05ERU5TRUQ6MixDT05ERU5TRUQ6MyxTRU1JX0NPTkRFTlNFRDo0LE1FRElVTTo1LFNFTUlfRVhQQU5ERUQ6NixFWFBBTkRFRDo3LEVYVFJBX0VYUEFOREVEOjgsVUxUUkFfRVhQQU5ERUQ6OX0sUWQucHJvdG90eXBlLnVzV2VpZ2h0Q2xhc3Nlcz17VEhJTjoxMDAsRVhUUkFfTElHSFQ6MjAwLExJR0hUOjMwMCxOT1JNQUw6NDAwLE1FRElVTTo1MDAsU0VNSV9CT0xEOjYwMCxCT0xEOjcwMCxFWFRSQV9CT0xEOjgwMCxCTEFDSzo5MDB9O3ZhciBDZj17bWFrZTpXZCxwYXJzZTpYZH0sRGY9bmV3IEFycmF5KDEwKTtEZlsxXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIDE9PT1iP3twb3NGb3JtYXQ6MSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSx2YWx1ZTp0aGlzLnBhcnNlVmFsdWVSZWNvcmQoKX06Mj09PWI/e1xucG9zRm9ybWF0OjIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksdmFsdWVzOnRoaXMucGFyc2VWYWx1ZVJlY29yZExpc3QoKX06dm9pZCB4ZS5hc3NlcnQoITEsXCIweFwiK2EudG9TdHJpbmcoMTYpK1wiOiBHUE9TIGxvb2t1cCB0eXBlIDEgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKX0sRGZbMl09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO3hlLmFzc2VydCgxPT09Ynx8Mj09PWIsXCIweFwiK2EudG9TdHJpbmcoMTYpK1wiOiBHUE9TIGxvb2t1cCB0eXBlIDIgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKTt2YXIgYz10aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxkPXRoaXMucGFyc2VVU2hvcnQoKSxlPXRoaXMucGFyc2VVU2hvcnQoKTtpZigxPT09YilyZXR1cm57cG9zRm9ybWF0OmIsY292ZXJhZ2U6Yyx2YWx1ZUZvcm1hdDE6ZCx2YWx1ZUZvcm1hdDI6ZSxwYWlyU2V0czp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5saXN0KGZ1bmN0aW9uKCl7cmV0dXJue3NlY29uZEdseXBoOnRoaXMucGFyc2VVU2hvcnQoKSx2YWx1ZTE6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKGQpLHZhbHVlMjp0aGlzLnBhcnNlVmFsdWVSZWNvcmQoZSl9fSkpKX07aWYoMj09PWIpe3ZhciBmPXRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGc9dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksaD10aGlzLnBhcnNlVVNob3J0KCksaT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJue3Bvc0Zvcm1hdDpiLGNvdmVyYWdlOmMsdmFsdWVGb3JtYXQxOmQsdmFsdWVGb3JtYXQyOmUsY2xhc3NEZWYxOmYsY2xhc3NEZWYyOmcsY2xhc3MxQ291bnQ6aCxjbGFzczJDb3VudDppLGNsYXNzUmVjb3Jkczp0aGlzLnBhcnNlTGlzdChoLFEubGlzdChpLGZ1bmN0aW9uKCl7cmV0dXJue3ZhbHVlMTp0aGlzLnBhcnNlVmFsdWVSZWNvcmQoZCksdmFsdWUyOnRoaXMucGFyc2VWYWx1ZVJlY29yZChlKX19KSl9fX0sRGZbM109ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCAzIG5vdCBzdXBwb3J0ZWRcIn19LERmWzRdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgNCBub3Qgc3VwcG9ydGVkXCJ9fSxEZls1XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDUgbm90IHN1cHBvcnRlZFwifX0sRGZbNl09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA2IG5vdCBzdXBwb3J0ZWRcIn19LERmWzddPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgNyBub3Qgc3VwcG9ydGVkXCJ9fSxEZls4XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDggbm90IHN1cHBvcnRlZFwifX0sRGZbOV09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA5IG5vdCBzdXBwb3J0ZWRcIn19O3ZhciBFZj1uZXcgQXJyYXkoMTApLEZmPXtwYXJzZTpZZCxtYWtlOlpkfSxHZj17cGFyc2U6YWV9LEhmPXtwYXJzZTpiZX07YS5Gb250PVFkLGEuR2x5cGg9Y2EsYS5QYXRoPXIsYS5Cb3VuZGluZ0JveD1xLGEuX3BhcnNlPUxlLGEucGFyc2U9aGUsYS5sb2FkPWllLGEubG9hZFN5bmM9amUsT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KX0pLmNhbGwodGhpcyxiKFwiYnVmZmVyXCIpLkJ1ZmZlcil9LHtidWZmZXI6MyxmczoyfV0sMTE6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKCl7dGhyb3cgbmV3IEVycm9yKFwic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBlKCl7dGhyb3cgbmV3IEVycm9yKFwiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGYoYSl7aWYobD09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoYSwwKTtpZigobD09PWR8fCFsKSYmc2V0VGltZW91dClyZXR1cm4gbD1zZXRUaW1lb3V0LHNldFRpbWVvdXQoYSwwKTt0cnl7cmV0dXJuIGwoYSwwKX1jYXRjaChiKXt0cnl7cmV0dXJuIGwuY2FsbChudWxsLGEsMCl9Y2F0Y2goYil7cmV0dXJuIGwuY2FsbCh0aGlzLGEsMCl9fX1mdW5jdGlvbiBnKGEpe2lmKG09PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChhKTtpZigobT09PWV8fCFtKSYmY2xlYXJUaW1lb3V0KXJldHVybiBtPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoYSk7dHJ5e3JldHVybiBtKGEpfWNhdGNoKGIpe3RyeXtyZXR1cm4gbS5jYWxsKG51bGwsYSl9Y2F0Y2goYil7cmV0dXJuIG0uY2FsbCh0aGlzLGEpfX19ZnVuY3Rpb24gaCgpe3EmJm8mJihxPSExLG8ubGVuZ3RoP3A9by5jb25jYXQocCk6cj0tMSxwLmxlbmd0aCYmaSgpKX1mdW5jdGlvbiBpKCl7aWYoIXEpe3ZhciBhPWYoaCk7cT0hMDtmb3IodmFyIGI9cC5sZW5ndGg7Yjspe2ZvcihvPXAscD1bXTsrK3I8YjspbyYmb1tyXS5ydW4oKTtyPS0xLGI9cC5sZW5ndGh9bz1udWxsLHE9ITEsZyhhKX19ZnVuY3Rpb24gaihhLGIpe3RoaXMuZnVuPWEsdGhpcy5hcnJheT1ifWZ1bmN0aW9uIGsoKXt9dmFyIGwsbSxuPWIuZXhwb3J0cz17fTshZnVuY3Rpb24oKXt0cnl7bD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6ZH1jYXRjaChhKXtsPWR9dHJ5e209XCJmdW5jdGlvblwiPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDplfWNhdGNoKGEpe209ZX19KCk7dmFyIG8scD1bXSxxPSExLHI9LTE7bi5uZXh0VGljaz1mdW5jdGlvbihhKXt2YXIgYj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliW2MtMV09YXJndW1lbnRzW2NdO3AucHVzaChuZXcgaihhLGIpKSwxIT09cC5sZW5ndGh8fHF8fGYoaSl9LGoucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LG4udGl0bGU9XCJicm93c2VyXCIsbi5icm93c2VyPSEwLG4uZW52PXt9LG4uYXJndj1bXSxuLnZlcnNpb249XCJcIixuLnZlcnNpb25zPXt9LG4ub249ayxuLmFkZExpc3RlbmVyPWssbi5vbmNlPWssbi5vZmY9ayxuLnJlbW92ZUxpc3RlbmVyPWssbi5yZW1vdmVBbGxMaXN0ZW5lcnM9ayxuLmVtaXQ9ayxuLnByZXBlbmRMaXN0ZW5lcj1rLG4ucHJlcGVuZE9uY2VMaXN0ZW5lcj1rLG4ubGlzdGVuZXJzPWZ1bmN0aW9uKGEpe3JldHVybltdfSxuLmJpbmRpbmc9ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWRcIil9LG4uY3dkPWZ1bmN0aW9uKCl7cmV0dXJuXCIvXCJ9LG4uY2hkaXI9ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkXCIpfSxuLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7fV0sMTI6W2Z1bmN0aW9uKGEsYixjKXshZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihhKXtpZihcInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9U3RyaW5nKGEpKSwvW15hLXowLTlcXC0jJCUmJyorLlxcXl9gfH5dL2kudGVzdChhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWVcIik7cmV0dXJuIGEudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBjKGEpe3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBhJiYoYT1TdHJpbmcoYSkpLGF9ZnVuY3Rpb24gZChhKXt2YXIgYj17bmV4dDpmdW5jdGlvbigpe3ZhciBiPWEuc2hpZnQoKTtyZXR1cm57ZG9uZTp2b2lkIDA9PT1iLHZhbHVlOmJ9fX07cmV0dXJuIHIuaXRlcmFibGUmJihiW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gYn0pLGJ9ZnVuY3Rpb24gZShhKXt0aGlzLm1hcD17fSxhIGluc3RhbmNlb2YgZT9hLmZvckVhY2goZnVuY3Rpb24oYSxiKXt0aGlzLmFwcGVuZChiLGEpfSx0aGlzKTpBcnJheS5pc0FycmF5KGEpP2EuZm9yRWFjaChmdW5jdGlvbihhKXt0aGlzLmFwcGVuZChhWzBdLGFbMV0pfSx0aGlzKTphJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3RoaXMuYXBwZW5kKGIsYVtiXSl9LHRoaXMpfWZ1bmN0aW9uIGYoYSl7aWYoYS5ib2R5VXNlZClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcihcIkFscmVhZHkgcmVhZFwiKSk7YS5ib2R5VXNlZD0hMH1mdW5jdGlvbiBnKGEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihiLGMpe2Eub25sb2FkPWZ1bmN0aW9uKCl7YihhLnJlc3VsdCl9LGEub25lcnJvcj1mdW5jdGlvbigpe2MoYS5lcnJvcil9fSl9ZnVuY3Rpb24gaChhKXt2YXIgYj1uZXcgRmlsZVJlYWRlcixjPWcoYik7cmV0dXJuIGIucmVhZEFzQXJyYXlCdWZmZXIoYSksY31mdW5jdGlvbiBpKGEpe3ZhciBiPW5ldyBGaWxlUmVhZGVyLGM9ZyhiKTtyZXR1cm4gYi5yZWFkQXNUZXh0KGEpLGN9ZnVuY3Rpb24gaihhKXtmb3IodmFyIGI9bmV3IFVpbnQ4QXJyYXkoYSksYz1uZXcgQXJyYXkoYi5sZW5ndGgpLGQ9MDtkPGIubGVuZ3RoO2QrKyljW2RdPVN0cmluZy5mcm9tQ2hhckNvZGUoYltkXSk7cmV0dXJuIGMuam9pbihcIlwiKX1mdW5jdGlvbiBrKGEpe2lmKGEuc2xpY2UpcmV0dXJuIGEuc2xpY2UoMCk7dmFyIGI9bmV3IFVpbnQ4QXJyYXkoYS5ieXRlTGVuZ3RoKTtyZXR1cm4gYi5zZXQobmV3IFVpbnQ4QXJyYXkoYSkpLGIuYnVmZmVyfWZ1bmN0aW9uIGwoKXtyZXR1cm4gdGhpcy5ib2R5VXNlZD0hMSx0aGlzLl9pbml0Qm9keT1mdW5jdGlvbihhKXtpZih0aGlzLl9ib2R5SW5pdD1hLGEpaWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpdGhpcy5fYm9keVRleHQ9YTtlbHNlIGlmKHIuYmxvYiYmQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSl0aGlzLl9ib2R5QmxvYj1hO2Vsc2UgaWYoci5mb3JtRGF0YSYmRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkpdGhpcy5fYm9keUZvcm1EYXRhPWE7ZWxzZSBpZihyLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpKXRoaXMuX2JvZHlUZXh0PWEudG9TdHJpbmcoKTtlbHNlIGlmKHIuYXJyYXlCdWZmZXImJnIuYmxvYiYmdChhKSl0aGlzLl9ib2R5QXJyYXlCdWZmZXI9ayhhLmJ1ZmZlciksdGhpcy5fYm9keUluaXQ9bmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pO2Vsc2V7aWYoIXIuYXJyYXlCdWZmZXJ8fCFBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSYmIXUoYSkpdGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgQm9keUluaXQgdHlwZVwiKTt0aGlzLl9ib2R5QXJyYXlCdWZmZXI9ayhhKX1lbHNlIHRoaXMuX2JvZHlUZXh0PVwiXCI7dGhpcy5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKXx8KFwic3RyaW5nXCI9PXR5cGVvZiBhP3RoaXMuaGVhZGVycy5zZXQoXCJjb250ZW50LXR5cGVcIixcInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOFwiKTp0aGlzLl9ib2R5QmxvYiYmdGhpcy5fYm9keUJsb2IudHlwZT90aGlzLmhlYWRlcnMuc2V0KFwiY29udGVudC10eXBlXCIsdGhpcy5fYm9keUJsb2IudHlwZSk6ci5zZWFyY2hQYXJhbXMmJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSYmdGhpcy5oZWFkZXJzLnNldChcImNvbnRlbnQtdHlwZVwiLFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLThcIikpfSxyLmJsb2ImJih0aGlzLmJsb2I9ZnVuY3Rpb24oKXt2YXIgYT1mKHRoaXMpO2lmKGEpcmV0dXJuIGE7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKFwiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iXCIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpfSx0aGlzLmFycmF5QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj9mKHRoaXMpfHxQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKTp0aGlzLmJsb2IoKS50aGVuKGgpfSksdGhpcy50ZXh0PWZ1bmN0aW9uKCl7dmFyIGE9Zih0aGlzKTtpZihhKXJldHVybiBhO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBpKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShqKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHRcIik7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dCl9LHIuZm9ybURhdGEmJih0aGlzLmZvcm1EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4obyl9KSx0aGlzLmpzb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKX0sdGhpc31mdW5jdGlvbiBtKGEpe3ZhciBiPWEudG9VcHBlckNhc2UoKTtyZXR1cm4gdi5pbmRleE9mKGIpPi0xP2I6YX1mdW5jdGlvbiBuKGEsYil7Yj1ifHx7fTt2YXIgYz1iLmJvZHk7aWYoYSBpbnN0YW5jZW9mIG4pe2lmKGEuYm9keVVzZWQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFscmVhZHkgcmVhZFwiKTt0aGlzLnVybD1hLnVybCx0aGlzLmNyZWRlbnRpYWxzPWEuY3JlZGVudGlhbHMsYi5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBlKGEuaGVhZGVycykpLHRoaXMubWV0aG9kPWEubWV0aG9kLHRoaXMubW9kZT1hLm1vZGUsY3x8bnVsbD09YS5fYm9keUluaXR8fChjPWEuX2JvZHlJbml0LGEuYm9keVVzZWQ9ITApfWVsc2UgdGhpcy51cmw9U3RyaW5nKGEpO2lmKHRoaXMuY3JlZGVudGlhbHM9Yi5jcmVkZW50aWFsc3x8dGhpcy5jcmVkZW50aWFsc3x8XCJvbWl0XCIsIWIuaGVhZGVycyYmdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBlKGIuaGVhZGVycykpLHRoaXMubWV0aG9kPW0oYi5tZXRob2R8fHRoaXMubWV0aG9kfHxcIkdFVFwiKSx0aGlzLm1vZGU9Yi5tb2RlfHx0aGlzLm1vZGV8fG51bGwsdGhpcy5yZWZlcnJlcj1udWxsLChcIkdFVFwiPT09dGhpcy5tZXRob2R8fFwiSEVBRFwiPT09dGhpcy5tZXRob2QpJiZjKXRocm93IG5ldyBUeXBlRXJyb3IoXCJCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0c1wiKTt0aGlzLl9pbml0Qm9keShjKX1mdW5jdGlvbiBvKGEpe3ZhciBiPW5ldyBGb3JtRGF0YTtyZXR1cm4gYS50cmltKCkuc3BsaXQoXCImXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGM9YS5zcGxpdChcIj1cIiksZD1jLnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csXCIgXCIpLGU9Yy5qb2luKFwiPVwiKS5yZXBsYWNlKC9cXCsvZyxcIiBcIik7Yi5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KGQpLGRlY29kZVVSSUNvbXBvbmVudChlKSl9fSksYn1mdW5jdGlvbiBwKGEpe3ZhciBiPW5ldyBlO3JldHVybiBhLnNwbGl0KC9cXHI/XFxuLykuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYz1hLnNwbGl0KFwiOlwiKSxkPWMuc2hpZnQoKS50cmltKCk7aWYoZCl7dmFyIGU9Yy5qb2luKFwiOlwiKS50cmltKCk7Yi5hcHBlbmQoZCxlKX19KSxifWZ1bmN0aW9uIHEoYSxiKXtifHwoYj17fSksdGhpcy50eXBlPVwiZGVmYXVsdFwiLHRoaXMuc3RhdHVzPVwic3RhdHVzXCJpbiBiP2Iuc3RhdHVzOjIwMCx0aGlzLm9rPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMCx0aGlzLnN0YXR1c1RleHQ9XCJzdGF0dXNUZXh0XCJpbiBiP2Iuc3RhdHVzVGV4dDpcIk9LXCIsdGhpcy5oZWFkZXJzPW5ldyBlKGIuaGVhZGVycyksdGhpcy51cmw9Yi51cmx8fFwiXCIsdGhpcy5faW5pdEJvZHkoYSl9aWYoIWEuZmV0Y2gpe3ZhciByPXtzZWFyY2hQYXJhbXM6XCJVUkxTZWFyY2hQYXJhbXNcImluIGEsaXRlcmFibGU6XCJTeW1ib2xcImluIGEmJlwiaXRlcmF0b3JcImluIFN5bWJvbCxibG9iOlwiRmlsZVJlYWRlclwiaW4gYSYmXCJCbG9iXCJpbiBhJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEJsb2IsITB9Y2F0Y2goYSl7cmV0dXJuITF9fSgpLGZvcm1EYXRhOlwiRm9ybURhdGFcImluIGEsYXJyYXlCdWZmZXI6XCJBcnJheUJ1ZmZlclwiaW4gYX07aWYoci5hcnJheUJ1ZmZlcil2YXIgcz1bXCJbb2JqZWN0IEludDhBcnJheV1cIixcIltvYmplY3QgVWludDhBcnJheV1cIixcIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldXCIsXCJbb2JqZWN0IEludDE2QXJyYXldXCIsXCJbb2JqZWN0IFVpbnQxNkFycmF5XVwiLFwiW29iamVjdCBJbnQzMkFycmF5XVwiLFwiW29iamVjdCBVaW50MzJBcnJheV1cIixcIltvYmplY3QgRmxvYXQzMkFycmF5XVwiLFwiW29iamVjdCBGbG9hdDY0QXJyYXldXCJdLHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJkRhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpfSx1PUFycmF5QnVmZmVyLmlzVmlld3x8ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJnMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkpPi0xfTtlLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oYSxkKXthPWIoYSksZD1jKGQpO3ZhciBlPXRoaXMubWFwW2FdO3RoaXMubWFwW2FdPWU/ZStcIixcIitkOmR9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihhKXtkZWxldGUgdGhpcy5tYXBbYihhKV19LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gYT1iKGEpLHRoaXMuaGFzKGEpP3RoaXMubWFwW2FdOm51bGx9LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkoYihhKSl9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGQpe3RoaXMubWFwW2IoYSldPWMoZCl9LGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMgaW4gdGhpcy5tYXApdGhpcy5tYXAuaGFzT3duUHJvcGVydHkoYykmJmEuY2FsbChiLHRoaXMubWFwW2NdLGMsdGhpcyl9LGUucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGIsYyl7YS5wdXNoKGMpfSksZChhKX0sZS5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihiKXthLnB1c2goYil9KSxkKGEpfSxlLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihiLGMpe2EucHVzaChbYyxiXSl9KSxkKGEpfSxyLml0ZXJhYmxlJiYoZS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1lLnByb3RvdHlwZS5lbnRyaWVzKTt2YXIgdj1bXCJERUxFVEVcIixcIkdFVFwiLFwiSEVBRFwiLFwiT1BUSU9OU1wiLFwiUE9TVFwiLFwiUFVUXCJdO24ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMse2JvZHk6dGhpcy5fYm9keUluaXR9KX0sbC5jYWxsKG4ucHJvdG90eXBlKSxsLmNhbGwocS5wcm90b3R5cGUpLHEucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxKHRoaXMuX2JvZHlJbml0LHtzdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0aGlzLnN0YXR1c1RleHQsaGVhZGVyczpuZXcgZSh0aGlzLmhlYWRlcnMpLHVybDp0aGlzLnVybH0pfSxxLmVycm9yPWZ1bmN0aW9uKCl7dmFyIGE9bmV3IHEobnVsbCx7c3RhdHVzOjAsc3RhdHVzVGV4dDpcIlwifSk7cmV0dXJuIGEudHlwZT1cImVycm9yXCIsYX07dmFyIHc9WzMwMSwzMDIsMzAzLDMwNywzMDhdO3EucmVkaXJlY3Q9ZnVuY3Rpb24oYSxiKXtpZigtMT09PXcuaW5kZXhPZihiKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgc3RhdHVzIGNvZGVcIik7cmV0dXJuIG5ldyBxKG51bGwse3N0YXR1czpiLGhlYWRlcnM6e2xvY2F0aW9uOmF9fSl9LGEuSGVhZGVycz1lLGEuUmVxdWVzdD1uLGEuUmVzcG9uc2U9cSxhLmZldGNoPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsZCl7dmFyIGU9bmV3IG4oYSxiKSxmPW5ldyBYTUxIdHRwUmVxdWVzdDtmLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBhPXtzdGF0dXM6Zi5zdGF0dXMsc3RhdHVzVGV4dDpmLnN0YXR1c1RleHQsaGVhZGVyczpwKGYuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCl8fFwiXCIpfTthLnVybD1cInJlc3BvbnNlVVJMXCJpbiBmP2YucmVzcG9uc2VVUkw6YS5oZWFkZXJzLmdldChcIlgtUmVxdWVzdC1VUkxcIik7dmFyIGI9XCJyZXNwb25zZVwiaW4gZj9mLnJlc3BvbnNlOmYucmVzcG9uc2VUZXh0O2MobmV3IHEoYixhKSl9LGYub25lcnJvcj1mdW5jdGlvbigpe2QobmV3IFR5cGVFcnJvcihcIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWRcIikpfSxmLm9udGltZW91dD1mdW5jdGlvbigpe2QobmV3IFR5cGVFcnJvcihcIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWRcIikpfSxmLm9wZW4oZS5tZXRob2QsZS51cmwsITApLFwiaW5jbHVkZVwiPT09ZS5jcmVkZW50aWFscyYmKGYud2l0aENyZWRlbnRpYWxzPSEwKSxcInJlc3BvbnNlVHlwZVwiaW4gZiYmci5ibG9iJiYoZi5yZXNwb25zZVR5cGU9XCJibG9iXCIpLGUuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGEsYil7Zi5zZXRSZXF1ZXN0SGVhZGVyKGIsYSl9KSxmLnNlbmQodm9pZCAwPT09ZS5fYm9keUluaXQ/bnVsbDplLl9ib2R5SW5pdCl9KX0sYS5mZXRjaC5wb2x5ZmlsbD0hMH19KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcyl9LHt9XSwxMzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL2NvcmUvbWFpblwiKTthKFwiLi9jb3JlL2NvbnN0YW50c1wiKSxhKFwiLi9jb3JlL2Vudmlyb25tZW50XCIpLGEoXCIuL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxhKFwiLi9jb3JlL2hlbHBlcnNcIiksYShcIi4vY29yZS9sZWdhY3lcIiksYShcIi4vY29yZS9wNS5FbGVtZW50XCIpLGEoXCIuL2NvcmUvcDUuR3JhcGhpY3NcIiksYShcIi4vY29yZS9wNS5SZW5kZXJlclwiKSxhKFwiLi9jb3JlL3A1LlJlbmRlcmVyMkRcIiksYShcIi4vY29yZS9yZW5kZXJpbmdcIiksYShcIi4vY29yZS9zaGltXCIpLGEoXCIuL2NvcmUvc3RydWN0dXJlXCIpLGEoXCIuL2NvcmUvdHJhbnNmb3JtXCIpLGEoXCIuL2NvcmUvc2hhcGUvMmRfcHJpbWl0aXZlc1wiKSxhKFwiLi9jb3JlL3NoYXBlL2F0dHJpYnV0ZXNcIiksYShcIi4vY29yZS9zaGFwZS9jdXJ2ZXNcIiksYShcIi4vY29yZS9zaGFwZS92ZXJ0ZXhcIiksYShcIi4vY29sb3IvY29sb3JfY29udmVyc2lvblwiKSxhKFwiLi9jb2xvci9jcmVhdGluZ19yZWFkaW5nXCIpLGEoXCIuL2NvbG9yL3A1LkNvbG9yXCIpLGEoXCIuL2NvbG9yL3NldHRpbmdcIiksYShcIi4vZGF0YS9wNS5UeXBlZERpY3RcIiksYShcIi4vZXZlbnRzL2FjY2VsZXJhdGlvblwiKSxhKFwiLi9ldmVudHMva2V5Ym9hcmRcIiksYShcIi4vZXZlbnRzL21vdXNlXCIpLGEoXCIuL2V2ZW50cy90b3VjaFwiKSxhKFwiLi9pbWFnZS9maWx0ZXJzXCIpLGEoXCIuL2ltYWdlL2ltYWdlXCIpLGEoXCIuL2ltYWdlL2xvYWRpbmdfZGlzcGxheWluZ1wiKSxhKFwiLi9pbWFnZS9wNS5JbWFnZVwiKSxhKFwiLi9pbWFnZS9waXhlbHNcIiksYShcIi4vaW8vZmlsZXNcIiksYShcIi4vaW8vcDUuVGFibGVcIiksYShcIi4vaW8vcDUuVGFibGVSb3dcIiksYShcIi4vaW8vcDUuWE1MXCIpLGEoXCIuL21hdGgvY2FsY3VsYXRpb25cIiksYShcIi4vbWF0aC9tYXRoXCIpLGEoXCIuL21hdGgvbm9pc2VcIiksYShcIi4vbWF0aC9wNS5WZWN0b3JcIiksYShcIi4vbWF0aC9yYW5kb21cIiksYShcIi4vbWF0aC90cmlnb25vbWV0cnlcIiksYShcIi4vdHlwb2dyYXBoeS9hdHRyaWJ1dGVzXCIpLGEoXCIuL3R5cG9ncmFwaHkvbG9hZGluZ19kaXNwbGF5aW5nXCIpLGEoXCIuL3R5cG9ncmFwaHkvcDUuRm9udFwiKSxhKFwiLi91dGlsaXRpZXMvYXJyYXlfZnVuY3Rpb25zXCIpLGEoXCIuL3V0aWxpdGllcy9jb252ZXJzaW9uXCIpLGEoXCIuL3V0aWxpdGllcy9zdHJpbmdfZnVuY3Rpb25zXCIpLGEoXCIuL3V0aWxpdGllcy90aW1lX2RhdGVcIiksYShcIi4vd2ViZ2wvM2RfcHJpbWl0aXZlc1wiKSxhKFwiLi93ZWJnbC9pbnRlcmFjdGlvblwiKSxhKFwiLi93ZWJnbC9saWdodFwiKSxhKFwiLi93ZWJnbC9sb2FkaW5nXCIpLGEoXCIuL3dlYmdsL21hdGVyaWFsXCIpLGEoXCIuL3dlYmdsL3A1LkNhbWVyYVwiKSxhKFwiLi93ZWJnbC9wNS5HZW9tZXRyeVwiKSxhKFwiLi93ZWJnbC9wNS5NYXRyaXhcIiksYShcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5JbW1lZGlhdGVcIiksYShcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTFwiKSxhKFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLlJldGFpbmVkXCIpLGEoXCIuL3dlYmdsL3A1LlNoYWRlclwiKSxhKFwiLi93ZWJnbC9wNS5UZXh0dXJlXCIpLGEoXCIuL3dlYmdsL3RleHRcIiksYShcIi4vY29yZS9pbml0XCIpLGIuZXhwb3J0cz1kfSx7XCIuL2NvbG9yL2NvbG9yX2NvbnZlcnNpb25cIjoxNCxcIi4vY29sb3IvY3JlYXRpbmdfcmVhZGluZ1wiOjE1LFwiLi9jb2xvci9wNS5Db2xvclwiOjE2LFwiLi9jb2xvci9zZXR0aW5nXCI6MTcsXCIuL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuL2NvcmUvZW52aXJvbm1lbnRcIjoxOSxcIi4vY29yZS9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuL2NvcmUvaGVscGVyc1wiOjIxLFwiLi9jb3JlL2luaXRcIjoyMixcIi4vY29yZS9sZWdhY3lcIjoyMyxcIi4vY29yZS9tYWluXCI6MjQsXCIuL2NvcmUvcDUuRWxlbWVudFwiOjI1LFwiLi9jb3JlL3A1LkdyYXBoaWNzXCI6MjYsXCIuL2NvcmUvcDUuUmVuZGVyZXJcIjoyNyxcIi4vY29yZS9wNS5SZW5kZXJlcjJEXCI6MjgsXCIuL2NvcmUvcmVuZGVyaW5nXCI6MjksXCIuL2NvcmUvc2hhcGUvMmRfcHJpbWl0aXZlc1wiOjMwLFwiLi9jb3JlL3NoYXBlL2F0dHJpYnV0ZXNcIjozMSxcIi4vY29yZS9zaGFwZS9jdXJ2ZXNcIjozMixcIi4vY29yZS9zaGFwZS92ZXJ0ZXhcIjozMyxcIi4vY29yZS9zaGltXCI6MzQsXCIuL2NvcmUvc3RydWN0dXJlXCI6MzUsXCIuL2NvcmUvdHJhbnNmb3JtXCI6MzYsXCIuL2RhdGEvcDUuVHlwZWREaWN0XCI6MzcsXCIuL2V2ZW50cy9hY2NlbGVyYXRpb25cIjozOCxcIi4vZXZlbnRzL2tleWJvYXJkXCI6MzksXCIuL2V2ZW50cy9tb3VzZVwiOjQwLFwiLi9ldmVudHMvdG91Y2hcIjo0MSxcIi4vaW1hZ2UvZmlsdGVyc1wiOjQyLFwiLi9pbWFnZS9pbWFnZVwiOjQzLFwiLi9pbWFnZS9sb2FkaW5nX2Rpc3BsYXlpbmdcIjo0NCxcIi4vaW1hZ2UvcDUuSW1hZ2VcIjo0NSxcIi4vaW1hZ2UvcGl4ZWxzXCI6NDYsXCIuL2lvL2ZpbGVzXCI6NDcsXCIuL2lvL3A1LlRhYmxlXCI6NDgsXCIuL2lvL3A1LlRhYmxlUm93XCI6NDksXCIuL2lvL3A1LlhNTFwiOjUwLFwiLi9tYXRoL2NhbGN1bGF0aW9uXCI6NTEsXCIuL21hdGgvbWF0aFwiOjUyLFwiLi9tYXRoL25vaXNlXCI6NTMsXCIuL21hdGgvcDUuVmVjdG9yXCI6NTQsXCIuL21hdGgvcmFuZG9tXCI6NTUsXCIuL21hdGgvdHJpZ29ub21ldHJ5XCI6NTYsXCIuL3R5cG9ncmFwaHkvYXR0cmlidXRlc1wiOjU3LFwiLi90eXBvZ3JhcGh5L2xvYWRpbmdfZGlzcGxheWluZ1wiOjU4LFwiLi90eXBvZ3JhcGh5L3A1LkZvbnRcIjo1OSxcIi4vdXRpbGl0aWVzL2FycmF5X2Z1bmN0aW9uc1wiOjYwLFwiLi91dGlsaXRpZXMvY29udmVyc2lvblwiOjYxLFwiLi91dGlsaXRpZXMvc3RyaW5nX2Z1bmN0aW9uc1wiOjYyLFwiLi91dGlsaXRpZXMvdGltZV9kYXRlXCI6NjMsXCIuL3dlYmdsLzNkX3ByaW1pdGl2ZXNcIjo2NCxcIi4vd2ViZ2wvaW50ZXJhY3Rpb25cIjo2NSxcIi4vd2ViZ2wvbGlnaHRcIjo2NixcIi4vd2ViZ2wvbG9hZGluZ1wiOjY3LFwiLi93ZWJnbC9tYXRlcmlhbFwiOjY4LFwiLi93ZWJnbC9wNS5DYW1lcmFcIjo2OSxcIi4vd2ViZ2wvcDUuR2VvbWV0cnlcIjo3MCxcIi4vd2ViZ2wvcDUuTWF0cml4XCI6NzEsXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0xcIjo3NCxcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5JbW1lZGlhdGVcIjo3MixcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5SZXRhaW5lZFwiOjczLFwiLi93ZWJnbC9wNS5TaGFkZXJcIjo3NSxcIi4vd2ViZ2wvcDUuVGV4dHVyZVwiOjc2LFwiLi93ZWJnbC90ZXh0XCI6Nzd9XSwxNDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5Db2xvckNvbnZlcnNpb249e30sZC5Db2xvckNvbnZlcnNpb24uX2hzYmFUb0hTTEE9ZnVuY3Rpb24oYSl7dmFyIGI9YVswXSxjPWFbMV0sZD1hWzJdLGU9KDItYykqZC8yO3JldHVybiAwIT09ZSYmKDE9PT1lP2M9MDplPC41P2MvPTItYzpjPWMqZC8oMi0yKmUpKSxbYixjLGUsYVszXV19LGQuQ29sb3JDb252ZXJzaW9uLl9oc2JhVG9SR0JBPWZ1bmN0aW9uKGEpe3ZhciBiPTYqYVswXSxjPWFbMV0sZD1hWzJdLGU9W107aWYoMD09PWMpZT1bZCxkLGQsYVszXV07ZWxzZXt2YXIgZixnLGgsaT1NYXRoLmZsb29yKGIpLGo9ZCooMS1jKSxrPWQqKDEtYyooYi1pKSksbD1kKigxLWMqKDEraS1iKSk7MT09PWk/KGY9ayxnPWQsaD1qKToyPT09aT8oZj1qLGc9ZCxoPWwpOjM9PT1pPyhmPWosZz1rLGg9ZCk6ND09PWk/KGY9bCxnPWosaD1kKTo1PT09aT8oZj1kLGc9aixoPWspOihmPWQsZz1sLGg9aiksZT1bZixnLGgsYVszXV19cmV0dXJuIGV9LGQuQ29sb3JDb252ZXJzaW9uLl9oc2xhVG9IU0JBPWZ1bmN0aW9uKGEpe3ZhciBiLGM9YVswXSxkPWFbMV0sZT1hWzJdO3JldHVybiBiPWU8LjU/KDErZCkqZTplK2QtZSpkLGQ9MiooYi1lKS9iLFtjLGQsYixhWzNdXX0sZC5Db2xvckNvbnZlcnNpb24uX2hzbGFUb1JHQkE9ZnVuY3Rpb24oYSl7dmFyIGI9NiphWzBdLGM9YVsxXSxkPWFbMl0sZT1bXTtpZigwPT09YyllPVtkLGQsZCxhWzNdXTtlbHNle3ZhciBmO2Y9ZDwuNT8oMStjKSpkOmQrYy1kKmM7dmFyIGc9MipkLWYsaD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE8MD9hKz02OmE+PTYmJihhLT02KSxhPDE/YisoYy1iKSphOmE8Mz9jOmE8ND9iKyhjLWIpKig0LWEpOmJ9O2U9W2goYisyLGcsZiksaChiLGcsZiksaChiLTIsZyxmKSxhWzNdXX1yZXR1cm4gZX0sZC5Db2xvckNvbnZlcnNpb24uX3JnYmFUb0hTQkE9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPWFbMF0sZT1hWzFdLGY9YVsyXSxnPU1hdGgubWF4KGQsZSxmKSxoPWctTWF0aC5taW4oZCxlLGYpO3JldHVybiAwPT09aD8oYj0wLGM9MCk6KGM9aC9nLGQ9PT1nP2I9KGUtZikvaDplPT09Zz9iPTIrKGYtZCkvaDpmPT09ZyYmKGI9NCsoZC1lKS9oKSxiPDA/Yis9NjpiPj02JiYoYi09NikpLFtiLzYsYyxnLGFbM11dfSxkLkNvbG9yQ29udmVyc2lvbi5fcmdiYVRvSFNMQT1mdW5jdGlvbihhKXt2YXIgYixjLGQ9YVswXSxlPWFbMV0sZj1hWzJdLGc9TWF0aC5tYXgoZCxlLGYpLGg9TWF0aC5taW4oZCxlLGYpLGk9ZytoLGo9Zy1oO3JldHVybiAwPT09aj8oYj0wLGM9MCk6KGM9aTwxP2ovaTpqLygyLWkpLGQ9PT1nP2I9KGUtZikvajplPT09Zz9iPTIrKGYtZCkvajpmPT09ZyYmKGI9NCsoZC1lKS9qKSxiPDA/Yis9NjpiPj02JiYoYi09NikpLFtiLzYsYyxpLzIsYVszXV19LGIuZXhwb3J0cz1kLkNvbG9yQ29udmVyc2lvbn0se1wiLi4vY29yZS9tYWluXCI6MjR9XSwxNTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4vcDUuQ29sb3JcIiksYShcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxkLnByb3RvdHlwZS5hbHBoYT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYWxwaGFcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldEFscGhhKCl9LGQucHJvdG90eXBlLmJsdWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJsdWVcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldEJsdWUoKX0sZC5wcm90b3R5cGUuYnJpZ2h0bmVzcz1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYnJpZ2h0bmVzc1wiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0QnJpZ2h0bmVzcygpfSxkLnByb3RvdHlwZS5jb2xvcj1mdW5jdGlvbigpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvbG9yXCIsYXJndW1lbnRzKSxhcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQuQ29sb3IpcmV0dXJuIGFyZ3VtZW50c1swXTt2YXIgYT1hcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5P2FyZ3VtZW50c1swXTphcmd1bWVudHM7cmV0dXJuIG5ldyBkLkNvbG9yKHRoaXMsYSl9LGQucHJvdG90eXBlLmdyZWVuPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJncmVlblwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0R3JlZW4oKX0sZC5wcm90b3R5cGUuaHVlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJodWVcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldEh1ZSgpfSxkLnByb3RvdHlwZS5sZXJwQ29sb3I9ZnVuY3Rpb24oYSxiLGMpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxlcnBDb2xvclwiLGFyZ3VtZW50cyk7dmFyIGYsZyxoLGksaixrLGw9dGhpcy5fY29sb3JNb2RlLG09dGhpcy5fY29sb3JNYXhlcztpZihsPT09ZS5SR0Ipaj1hLmxldmVscy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEvMjU1fSksaz1iLmxldmVscy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEvMjU1fSk7ZWxzZSBpZihsPT09ZS5IU0IpYS5fZ2V0QnJpZ2h0bmVzcygpLGIuX2dldEJyaWdodG5lc3MoKSxqPWEuaHNiYSxrPWIuaHNiYTtlbHNle2lmKGwhPT1lLkhTTCl0aHJvdyBuZXcgRXJyb3IobCtcImNhbm5vdCBiZSB1c2VkIGZvciBpbnRlcnBvbGF0aW9uLlwiKTthLl9nZXRMaWdodG5lc3MoKSxiLl9nZXRMaWdodG5lc3MoKSxqPWEuaHNsYSxrPWIuaHNsYX1yZXR1cm4gYz1NYXRoLm1heChNYXRoLm1pbihjLDEpLDApLHZvaWQgMD09PXRoaXMubGVycCYmKHRoaXMubGVycD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGMqKGItYSkrYX0pLGY9dGhpcy5sZXJwKGpbMF0sa1swXSxjKSxnPXRoaXMubGVycChqWzFdLGtbMV0sYyksaD10aGlzLmxlcnAoalsyXSxrWzJdLGMpLGk9dGhpcy5sZXJwKGpbM10sa1szXSxjKSxmKj1tW2xdWzBdLGcqPW1bbF1bMV0saCo9bVtsXVsyXSxpKj1tW2xdWzNdLHRoaXMuY29sb3IoZixnLGgsaSl9LGQucHJvdG90eXBlLmxpZ2h0bmVzcz1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibGlnaHRuZXNzXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRMaWdodG5lc3MoKX0sZC5wcm90b3R5cGUucmVkPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyZWRcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldFJlZCgpfSxkLnByb3RvdHlwZS5zYXR1cmF0aW9uPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXR1cmF0aW9uXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRTYXR1cmF0aW9uKCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vcDUuQ29sb3JcIjoxNn1dLDE2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKSxmPWEoXCIuL2NvbG9yX2NvbnZlcnNpb25cIik7ZC5Db2xvcj1mdW5jdGlvbihhLGIpe2lmKHRoaXMuX3N0b3JlTW9kZUFuZE1heGVzKGEuX2NvbG9yTW9kZSxhLl9jb2xvck1heGVzKSx0aGlzLm1vZGUhPT1lLlJHQiYmdGhpcy5tb2RlIT09ZS5IU0wmJnRoaXMubW9kZSE9PWUuSFNCKXRocm93IG5ldyBFcnJvcih0aGlzLm1vZGUrXCIgaXMgYW4gaW52YWxpZCBjb2xvck1vZGUuXCIpO3JldHVybiB0aGlzLl9hcnJheT1kLkNvbG9yLl9wYXJzZUlucHV0cy5hcHBseSh0aGlzLGIpLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpLHRoaXN9LGQuQ29sb3IucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGEpe3RoaXMuaHNiYXx8KHRoaXMuaHNiYT1mLl9yZ2JhVG9IU0JBKHRoaXMuX2FycmF5KSksdGhpcy5oc2xhfHwodGhpcy5oc2xhPWYuX3JnYmFUb0hTTEEodGhpcy5fYXJyYXkpKTt2YXIgYj10aGlzLmxldmVscyxjPXRoaXMuX2FycmF5LGQ9Y1szXTtzd2l0Y2goYSl7Y2FzZVwiI3JyZ2diYlwiOnJldHVyblwiI1wiLmNvbmNhdChiWzBdPDE2P1wiMFwiLmNvbmNhdChiWzBdLnRvU3RyaW5nKDE2KSk6YlswXS50b1N0cmluZygxNiksYlsxXTwxNj9cIjBcIi5jb25jYXQoYlsxXS50b1N0cmluZygxNikpOmJbMV0udG9TdHJpbmcoMTYpLGJbMl08MTY/XCIwXCIuY29uY2F0KGJbMl0udG9TdHJpbmcoMTYpKTpiWzJdLnRvU3RyaW5nKDE2KSk7Y2FzZVwiI3JyZ2diYmFhXCI6cmV0dXJuXCIjXCIuY29uY2F0KGJbMF08MTY/XCIwXCIuY29uY2F0KGJbMF0udG9TdHJpbmcoMTYpKTpiWzBdLnRvU3RyaW5nKDE2KSxiWzFdPDE2P1wiMFwiLmNvbmNhdChiWzFdLnRvU3RyaW5nKDE2KSk6YlsxXS50b1N0cmluZygxNiksYlsyXTwxNj9cIjBcIi5jb25jYXQoYlsyXS50b1N0cmluZygxNikpOmJbMl0udG9TdHJpbmcoMTYpLGJbM108MTY/XCIwXCIuY29uY2F0KGJbMl0udG9TdHJpbmcoMTYpKTpiWzNdLnRvU3RyaW5nKDE2KSk7Y2FzZVwiI3JnYlwiOnJldHVyblwiI1wiLmNvbmNhdChNYXRoLnJvdW5kKDE1KmNbMF0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbMV0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbMl0pLnRvU3RyaW5nKDE2KSk7Y2FzZVwiI3JnYmFcIjpyZXR1cm5cIiNcIi5jb25jYXQoTWF0aC5yb3VuZCgxNSpjWzBdKS50b1N0cmluZygxNiksTWF0aC5yb3VuZCgxNSpjWzFdKS50b1N0cmluZygxNiksTWF0aC5yb3VuZCgxNSpjWzJdKS50b1N0cmluZygxNiksTWF0aC5yb3VuZCgxNSpjWzNdKS50b1N0cmluZygxNikpO2Nhc2VcInJnYlwiOnJldHVyblwicmdiKFwiLmNvbmNhdChiWzBdLFwiLCBcIixiWzFdLFwiLCBcIixiWzJdLFwiKVwiKTtjYXNlXCJyZ2IlXCI6cmV0dXJuXCJyZ2IoXCIuY29uY2F0KCgxMDAqY1swXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzJdKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcInJnYmElXCI6cmV0dXJuXCJyZ2JhKFwiLmNvbmNhdCgoMTAwKmNbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1syXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbM10pLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwiaHNiXCI6Y2FzZVwiaHN2XCI6cmV0dXJuXCJoc2IoXCIuY29uY2F0KHRoaXMuaHNiYVswXSp0aGlzLm1heGVzW2UuSFNCXVswXSxcIiwgXCIsdGhpcy5oc2JhWzFdKnRoaXMubWF4ZXNbZS5IU0JdWzFdLFwiLCBcIix0aGlzLmhzYmFbMl0qdGhpcy5tYXhlc1tlLkhTQl1bMl0sXCIpXCIpO2Nhc2VcImhzYiVcIjpjYXNlXCJoc3YlXCI6cmV0dXJuXCJoc2IoXCIuY29uY2F0KCgxMDAqdGhpcy5oc2JhWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2JhWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2JhWzJdKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcImhzYmFcIjpjYXNlXCJoc3ZhXCI6cmV0dXJuXCJoc2JhKFwiLmNvbmNhdCh0aGlzLmhzYmFbMF0qdGhpcy5tYXhlc1tlLkhTQl1bMF0sXCIsIFwiLHRoaXMuaHNiYVsxXSp0aGlzLm1heGVzW2UuSFNCXVsxXSxcIiwgXCIsdGhpcy5oc2JhWzJdKnRoaXMubWF4ZXNbZS5IU0JdWzJdLFwiLCBcIixkLFwiKVwiKTtjYXNlXCJoc2JhJVwiOmNhc2VcImhzdmElXCI6cmV0dXJuXCJoc2JhKFwiLmNvbmNhdCgoMTAwKnRoaXMuaHNiYVswXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNiYVsxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNiYVsyXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmQpLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwiaHNsXCI6cmV0dXJuXCJoc2woXCIuY29uY2F0KHRoaXMuaHNsYVswXSp0aGlzLm1heGVzW2UuSFNMXVswXSxcIiwgXCIsdGhpcy5oc2xhWzFdKnRoaXMubWF4ZXNbZS5IU0xdWzFdLFwiLCBcIix0aGlzLmhzbGFbMl0qdGhpcy5tYXhlc1tlLkhTTF1bMl0sXCIpXCIpO2Nhc2VcImhzbCVcIjpyZXR1cm5cImhzbChcIi5jb25jYXQoKDEwMCp0aGlzLmhzbGFbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzbGFbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzbGFbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwiaHNsYVwiOnJldHVyblwiaHNsYShcIi5jb25jYXQodGhpcy5oc2xhWzBdKnRoaXMubWF4ZXNbZS5IU0xdWzBdLFwiLCBcIix0aGlzLmhzbGFbMV0qdGhpcy5tYXhlc1tlLkhTTF1bMV0sXCIsIFwiLHRoaXMuaHNsYVsyXSp0aGlzLm1heGVzW2UuSFNMXVsyXSxcIiwgXCIsZCxcIilcIik7Y2FzZVwiaHNsYSVcIjpyZXR1cm5cImhzbChcIi5jb25jYXQoKDEwMCp0aGlzLmhzbGFbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzbGFbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzbGFbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpkKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcInJnYmFcIjpkZWZhdWx0OnJldHVyblwicmdiYShcIitiWzBdK1wiLFwiK2JbMV0rXCIsXCIrYlsyXStcIixcIitkK1wiKVwifX0sZC5Db2xvci5wcm90b3R5cGUuc2V0UmVkPWZ1bmN0aW9uKGEpe3RoaXMuX2FycmF5WzBdPWEvdGhpcy5tYXhlc1tlLlJHQl1bMF0sdGhpcy5fY2FsY3VsYXRlTGV2ZWxzKCl9LGQuQ29sb3IucHJvdG90eXBlLnNldEdyZWVuPWZ1bmN0aW9uKGEpe3RoaXMuX2FycmF5WzFdPWEvdGhpcy5tYXhlc1tlLlJHQl1bMV0sdGhpcy5fY2FsY3VsYXRlTGV2ZWxzKCl9LGQuQ29sb3IucHJvdG90eXBlLnNldEJsdWU9ZnVuY3Rpb24oYSl7dGhpcy5fYXJyYXlbMl09YS90aGlzLm1heGVzW2UuUkdCXVsyXSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKX0sZC5Db2xvci5wcm90b3R5cGUuc2V0QWxwaGE9ZnVuY3Rpb24oYSl7dGhpcy5fYXJyYXlbM109YS90aGlzLm1heGVzW3RoaXMubW9kZV1bM10sdGhpcy5fY2FsY3VsYXRlTGV2ZWxzKCl9LGQuQ29sb3IucHJvdG90eXBlLl9jYWxjdWxhdGVMZXZlbHM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5fYXJyYXksYj10aGlzLmxldmVscz1uZXcgQXJyYXkoYS5sZW5ndGgpLGM9YS5sZW5ndGgtMTtjPj0wOy0tYyliW2NdPU1hdGgucm91bmQoMjU1KmFbY10pfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0QWxwaGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXlbM10qdGhpcy5tYXhlc1t0aGlzLm1vZGVdWzNdfSxkLkNvbG9yLnByb3RvdHlwZS5fc3RvcmVNb2RlQW5kTWF4ZXM9ZnVuY3Rpb24oYSxiKXt0aGlzLm1vZGU9YSx0aGlzLm1heGVzPWJ9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZX0sZC5Db2xvci5wcm90b3R5cGUuX2dldE1heGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4ZXN9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRCbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5WzJdKnRoaXMubWF4ZXNbZS5SR0JdWzJdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0QnJpZ2h0bmVzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhzYmF8fCh0aGlzLmhzYmE9Zi5fcmdiYVRvSFNCQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNiYVsyXSp0aGlzLm1heGVzW2UuSFNCXVsyXX0sZC5Db2xvci5wcm90b3R5cGUuX2dldEdyZWVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5WzFdKnRoaXMubWF4ZXNbZS5SR0JdWzFdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0SHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZT09PWUuSFNCPyh0aGlzLmhzYmF8fCh0aGlzLmhzYmE9Zi5fcmdiYVRvSFNCQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNiYVswXSp0aGlzLm1heGVzW2UuSFNCXVswXSk6KHRoaXMuaHNsYXx8KHRoaXMuaHNsYT1mLl9yZ2JhVG9IU0xBKHRoaXMuX2FycmF5KSksdGhpcy5oc2xhWzBdKnRoaXMubWF4ZXNbZS5IU0xdWzBdKX0sZC5Db2xvci5wcm90b3R5cGUuX2dldExpZ2h0bmVzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhzbGF8fCh0aGlzLmhzbGE9Zi5fcmdiYVRvSFNMQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNsYVsyXSp0aGlzLm1heGVzW2UuSFNMXVsyXX0sZC5Db2xvci5wcm90b3R5cGUuX2dldFJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheVswXSp0aGlzLm1heGVzW2UuUkdCXVswXX0sZC5Db2xvci5wcm90b3R5cGUuX2dldFNhdHVyYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlPT09ZS5IU0I/KHRoaXMuaHNiYXx8KHRoaXMuaHNiYT1mLl9yZ2JhVG9IU0JBKHRoaXMuX2FycmF5KSksdGhpcy5oc2JhWzFdKnRoaXMubWF4ZXNbZS5IU0JdWzFdKToodGhpcy5oc2xhfHwodGhpcy5oc2xhPWYuX3JnYmFUb0hTTEEodGhpcy5fYXJyYXkpKSx0aGlzLmhzbGFbMV0qdGhpcy5tYXhlc1tlLkhTTF1bMV0pfTt2YXIgZz17YWxpY2VibHVlOlwiI2YwZjhmZlwiLGFudGlxdWV3aGl0ZTpcIiNmYWViZDdcIixhcXVhOlwiIzAwZmZmZlwiLGFxdWFtYXJpbmU6XCIjN2ZmZmQ0XCIsYXp1cmU6XCIjZjBmZmZmXCIsYmVpZ2U6XCIjZjVmNWRjXCIsYmlzcXVlOlwiI2ZmZTRjNFwiLGJsYWNrOlwiIzAwMDAwMFwiLGJsYW5jaGVkYWxtb25kOlwiI2ZmZWJjZFwiLGJsdWU6XCIjMDAwMGZmXCIsYmx1ZXZpb2xldDpcIiM4YTJiZTJcIixicm93bjpcIiNhNTJhMmFcIixidXJseXdvb2Q6XCIjZGViODg3XCIsY2FkZXRibHVlOlwiIzVmOWVhMFwiLGNoYXJ0cmV1c2U6XCIjN2ZmZjAwXCIsY2hvY29sYXRlOlwiI2QyNjkxZVwiLGNvcmFsOlwiI2ZmN2Y1MFwiLGNvcm5mbG93ZXJibHVlOlwiIzY0OTVlZFwiLGNvcm5zaWxrOlwiI2ZmZjhkY1wiLGNyaW1zb246XCIjZGMxNDNjXCIsY3lhbjpcIiMwMGZmZmZcIixkYXJrYmx1ZTpcIiMwMDAwOGJcIixkYXJrY3lhbjpcIiMwMDhiOGJcIixkYXJrZ29sZGVucm9kOlwiI2I4ODYwYlwiLGRhcmtncmF5OlwiI2E5YTlhOVwiLGRhcmtncmVlbjpcIiMwMDY0MDBcIixkYXJrZ3JleTpcIiNhOWE5YTlcIixkYXJra2hha2k6XCIjYmRiNzZiXCIsZGFya21hZ2VudGE6XCIjOGIwMDhiXCIsZGFya29saXZlZ3JlZW46XCIjNTU2YjJmXCIsZGFya29yYW5nZTpcIiNmZjhjMDBcIixkYXJrb3JjaGlkOlwiIzk5MzJjY1wiLGRhcmtyZWQ6XCIjOGIwMDAwXCIsZGFya3NhbG1vbjpcIiNlOTk2N2FcIixkYXJrc2VhZ3JlZW46XCIjOGZiYzhmXCIsZGFya3NsYXRlYmx1ZTpcIiM0ODNkOGJcIixkYXJrc2xhdGVncmF5OlwiIzJmNGY0ZlwiLGRhcmtzbGF0ZWdyZXk6XCIjMmY0ZjRmXCIsZGFya3R1cnF1b2lzZTpcIiMwMGNlZDFcIixkYXJrdmlvbGV0OlwiIzk0MDBkM1wiLGRlZXBwaW5rOlwiI2ZmMTQ5M1wiLGRlZXBza3libHVlOlwiIzAwYmZmZlwiLGRpbWdyYXk6XCIjNjk2OTY5XCIsZGltZ3JleTpcIiM2OTY5NjlcIixkb2RnZXJibHVlOlwiIzFlOTBmZlwiLGZpcmVicmljazpcIiNiMjIyMjJcIixmbG9yYWx3aGl0ZTpcIiNmZmZhZjBcIixmb3Jlc3RncmVlbjpcIiMyMjhiMjJcIixmdWNoc2lhOlwiI2ZmMDBmZlwiLGdhaW5zYm9ybzpcIiNkY2RjZGNcIixnaG9zdHdoaXRlOlwiI2Y4ZjhmZlwiLGdvbGQ6XCIjZmZkNzAwXCIsZ29sZGVucm9kOlwiI2RhYTUyMFwiLGdyYXk6XCIjODA4MDgwXCIsZ3JlZW46XCIjMDA4MDAwXCIsZ3JlZW55ZWxsb3c6XCIjYWRmZjJmXCIsZ3JleTpcIiM4MDgwODBcIixob25leWRldzpcIiNmMGZmZjBcIixob3RwaW5rOlwiI2ZmNjliNFwiLGluZGlhbnJlZDpcIiNjZDVjNWNcIixpbmRpZ286XCIjNGIwMDgyXCIsaXZvcnk6XCIjZmZmZmYwXCIsa2hha2k6XCIjZjBlNjhjXCIsbGF2ZW5kZXI6XCIjZTZlNmZhXCIsbGF2ZW5kZXJibHVzaDpcIiNmZmYwZjVcIixsYXduZ3JlZW46XCIjN2NmYzAwXCIsbGVtb25jaGlmZm9uOlwiI2ZmZmFjZFwiLGxpZ2h0Ymx1ZTpcIiNhZGQ4ZTZcIixsaWdodGNvcmFsOlwiI2YwODA4MFwiLGxpZ2h0Y3lhbjpcIiNlMGZmZmZcIixsaWdodGdvbGRlbnJvZHllbGxvdzpcIiNmYWZhZDJcIixsaWdodGdyYXk6XCIjZDNkM2QzXCIsbGlnaHRncmVlbjpcIiM5MGVlOTBcIixsaWdodGdyZXk6XCIjZDNkM2QzXCIsbGlnaHRwaW5rOlwiI2ZmYjZjMVwiLGxpZ2h0c2FsbW9uOlwiI2ZmYTA3YVwiLGxpZ2h0c2VhZ3JlZW46XCIjMjBiMmFhXCIsbGlnaHRza3libHVlOlwiIzg3Y2VmYVwiLGxpZ2h0c2xhdGVncmF5OlwiIzc3ODg5OVwiLGxpZ2h0c2xhdGVncmV5OlwiIzc3ODg5OVwiLGxpZ2h0c3RlZWxibHVlOlwiI2IwYzRkZVwiLGxpZ2h0eWVsbG93OlwiI2ZmZmZlMFwiLGxpbWU6XCIjMDBmZjAwXCIsbGltZWdyZWVuOlwiIzMyY2QzMlwiLGxpbmVuOlwiI2ZhZjBlNlwiLG1hZ2VudGE6XCIjZmYwMGZmXCIsbWFyb29uOlwiIzgwMDAwMFwiLG1lZGl1bWFxdWFtYXJpbmU6XCIjNjZjZGFhXCIsbWVkaXVtYmx1ZTpcIiMwMDAwY2RcIixtZWRpdW1vcmNoaWQ6XCIjYmE1NWQzXCIsbWVkaXVtcHVycGxlOlwiIzkzNzBkYlwiLG1lZGl1bXNlYWdyZWVuOlwiIzNjYjM3MVwiLG1lZGl1bXNsYXRlYmx1ZTpcIiM3YjY4ZWVcIixtZWRpdW1zcHJpbmdncmVlbjpcIiMwMGZhOWFcIixtZWRpdW10dXJxdW9pc2U6XCIjNDhkMWNjXCIsbWVkaXVtdmlvbGV0cmVkOlwiI2M3MTU4NVwiLG1pZG5pZ2h0Ymx1ZTpcIiMxOTE5NzBcIixtaW50Y3JlYW06XCIjZjVmZmZhXCIsbWlzdHlyb3NlOlwiI2ZmZTRlMVwiLG1vY2Nhc2luOlwiI2ZmZTRiNVwiLG5hdmFqb3doaXRlOlwiI2ZmZGVhZFwiLG5hdnk6XCIjMDAwMDgwXCIsb2xkbGFjZTpcIiNmZGY1ZTZcIixvbGl2ZTpcIiM4MDgwMDBcIixvbGl2ZWRyYWI6XCIjNmI4ZTIzXCIsb3JhbmdlOlwiI2ZmYTUwMFwiLG9yYW5nZXJlZDpcIiNmZjQ1MDBcIixvcmNoaWQ6XCIjZGE3MGQ2XCIscGFsZWdvbGRlbnJvZDpcIiNlZWU4YWFcIixwYWxlZ3JlZW46XCIjOThmYjk4XCIscGFsZXR1cnF1b2lzZTpcIiNhZmVlZWVcIixwYWxldmlvbGV0cmVkOlwiI2RiNzA5M1wiLHBhcGF5YXdoaXA6XCIjZmZlZmQ1XCIscGVhY2hwdWZmOlwiI2ZmZGFiOVwiLHBlcnU6XCIjY2Q4NTNmXCIscGluazpcIiNmZmMwY2JcIixwbHVtOlwiI2RkYTBkZFwiLHBvd2RlcmJsdWU6XCIjYjBlMGU2XCIscHVycGxlOlwiIzgwMDA4MFwiLHJlZDpcIiNmZjAwMDBcIixyb3N5YnJvd246XCIjYmM4ZjhmXCIscm95YWxibHVlOlwiIzQxNjllMVwiLHNhZGRsZWJyb3duOlwiIzhiNDUxM1wiLHNhbG1vbjpcIiNmYTgwNzJcIixzYW5keWJyb3duOlwiI2Y0YTQ2MFwiLHNlYWdyZWVuOlwiIzJlOGI1N1wiLHNlYXNoZWxsOlwiI2ZmZjVlZVwiLHNpZW5uYTpcIiNhMDUyMmRcIixzaWx2ZXI6XCIjYzBjMGMwXCIsc2t5Ymx1ZTpcIiM4N2NlZWJcIixzbGF0ZWJsdWU6XCIjNmE1YWNkXCIsc2xhdGVncmF5OlwiIzcwODA5MFwiLHNsYXRlZ3JleTpcIiM3MDgwOTBcIixzbm93OlwiI2ZmZmFmYVwiLHNwcmluZ2dyZWVuOlwiIzAwZmY3ZlwiLHN0ZWVsYmx1ZTpcIiM0NjgyYjRcIix0YW46XCIjZDJiNDhjXCIsdGVhbDpcIiMwMDgwODBcIix0aGlzdGxlOlwiI2Q4YmZkOFwiLHRvbWF0bzpcIiNmZjYzNDdcIix0dXJxdW9pc2U6XCIjNDBlMGQwXCIsdmlvbGV0OlwiI2VlODJlZVwiLHdoZWF0OlwiI2Y1ZGViM1wiLHdoaXRlOlwiI2ZmZmZmZlwiLHdoaXRlc21va2U6XCIjZjVmNWY1XCIseWVsbG93OlwiI2ZmZmYwMFwiLHllbGxvd2dyZWVuOlwiIzlhY2QzMlwifSxoPS9cXHMqLyxpPS8oXFxkezEsM30pLyxqPS8oKD86XFxkKyg/OlxcLlxcZCspPyl8KD86XFwuXFxkKykpLyxrPW5ldyBSZWdFeHAoai5zb3VyY2UrXCIlXCIpLGw9e0hFWDM6L14jKFthLWYwLTldKShbYS1mMC05XSkoW2EtZjAtOV0pJC9pLEhFWDQ6L14jKFthLWYwLTldKShbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKSQvaSxIRVg2Oi9eIyhbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KSQvaSxIRVg4Oi9eIyhbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkkL2ksUkdCOm5ldyBSZWdFeHAoW1wiXnJnYlxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsaS5zb3VyY2UsXCIsXCIsaS5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLFJHQl9QRVJDRU5UOm5ldyBSZWdFeHAoW1wiXnJnYlxcXFwoXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLFJHQkE6bmV3IFJlZ0V4cChbXCJecmdiYVxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsaS5zb3VyY2UsXCIsXCIsaS5zb3VyY2UsXCIsXCIsai5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLFJHQkFfUEVSQ0VOVDpuZXcgUmVnRXhwKFtcIl5yZ2JhXFxcXChcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixqLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksSFNMOm5ldyBSZWdFeHAoW1wiXmhzbFxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLEhTTEE6bmV3IFJlZ0V4cChbXCJeaHNsYVxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsai5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLEhTQjpuZXcgUmVnRXhwKFtcIl5oc2JcXFxcKFwiLGkuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxIU0JBOm5ldyBSZWdFeHAoW1wiXmhzYmFcXFxcKFwiLGkuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGouc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKX07ZC5Db2xvci5fcGFyc2VJbnB1dHM9ZnVuY3Rpb24oYSxiLGMsaCl7dmFyIGksaj1hcmd1bWVudHMubGVuZ3RoLGs9dGhpcy5tb2RlLG09dGhpcy5tYXhlc1trXSxuPVtdO2lmKGo+PTMpe2ZvcihuWzBdPWEvbVswXSxuWzFdPWIvbVsxXSxuWzJdPWMvbVsyXSxuWzNdPVwibnVtYmVyXCI9PXR5cGVvZiBoP2gvbVszXToxLGk9bi5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIG89bltpXTtvPDA/bltpXT0wOm8+MSYmKG5baV09MSl9cmV0dXJuIGs9PT1lLkhTTD9mLl9oc2xhVG9SR0JBKG4pOms9PT1lLkhTQj9mLl9oc2JhVG9SR0JBKG4pOm59aWYoMT09PWomJlwic3RyaW5nXCI9PXR5cGVvZiBhKXt2YXIgcD1hLnRyaW0oKS50b0xvd2VyQ2FzZSgpO2lmKGdbcF0pcmV0dXJuIGQuQ29sb3IuX3BhcnNlSW5wdXRzLmNhbGwodGhpcyxnW3BdKTtpZihsLkhFWDMudGVzdChwKSlyZXR1cm4gbj1sLkhFWDMuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGErYSwxNikvMjU1fSksblszXT0xLG47aWYobC5IRVg2LnRlc3QocCkpcmV0dXJuIG49bC5IRVg2LmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUludChhLDE2KS8yNTV9KSxuWzNdPTEsbjtpZihsLkhFWDQudGVzdChwKSlyZXR1cm4gbj1sLkhFWDQuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGErYSwxNikvMjU1fSk7aWYobC5IRVg4LnRlc3QocCkpcmV0dXJuIG49bC5IRVg4LmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUludChhLDE2KS8yNTV9KTtpZihsLlJHQi50ZXN0KHApKXJldHVybiBuPWwuUkdCLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLzI1NX0pLG5bM109MSxuO2lmKGwuUkdCX1BFUkNFTlQudGVzdChwKSlyZXR1cm4gbj1sLlJHQl9QRVJDRU5ULmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUZsb2F0KGEpLzEwMH0pLG5bM109MSxuO2lmKGwuUkdCQS50ZXN0KHApKXJldHVybiBuPWwuUkdCQS5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAzPT09Yj9wYXJzZUZsb2F0KGEpOmEvMjU1fSk7aWYobC5SR0JBX1BFUkNFTlQudGVzdChwKSlyZXR1cm4gbj1sLlJHQkFfUEVSQ0VOVC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAzPT09Yj9wYXJzZUZsb2F0KGEpOnBhcnNlRmxvYXQoYSkvMTAwfSk7aWYobC5IU0wudGVzdChwKT8obj1sLkhTTC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAwPT09Yj9wYXJzZUludChhLDEwKS8zNjA6cGFyc2VJbnQoYSwxMCkvMTAwfSksblszXT0xKTpsLkhTTEEudGVzdChwKSYmKG49bC5IU0xBLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDA9PT1iP3BhcnNlSW50KGEsMTApLzM2MDozPT09Yj9wYXJzZUZsb2F0KGEpOnBhcnNlSW50KGEsMTApLzEwMH0pKSxuPW4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLm1heChNYXRoLm1pbihhLDEpLDApfSksbi5sZW5ndGgpcmV0dXJuIGYuX2hzbGFUb1JHQkEobik7aWYobC5IU0IudGVzdChwKT8obj1sLkhTQi5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAwPT09Yj9wYXJzZUludChhLDEwKS8zNjA6cGFyc2VJbnQoYSwxMCkvMTAwfSksblszXT0xKTpsLkhTQkEudGVzdChwKSYmKG49bC5IU0JBLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDA9PT1iP3BhcnNlSW50KGEsMTApLzM2MDozPT09Yj9wYXJzZUZsb2F0KGEpOnBhcnNlSW50KGEsMTApLzEwMH0pKSxuLmxlbmd0aCl7Zm9yKGk9bi5sZW5ndGgtMTtpPj0wOy0taSluW2ldPU1hdGgubWF4KE1hdGgubWluKG5baV0sMSksMCk7cmV0dXJuIGYuX2hzYmFUb1JHQkEobil9bj1bMSwxLDEsMV19ZWxzZXtpZigxIT09aiYmMiE9PWp8fFwibnVtYmVyXCIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcihhcmd1bWVudHMrXCJpcyBub3QgYSB2YWxpZCBjb2xvciByZXByZXNlbnRhdGlvbi5cIik7blswXT1hL21bMl0sblsxXT1hL21bMl0sblsyXT1hL21bMl0sblszXT1cIm51bWJlclwiPT10eXBlb2YgYj9iL21bM106MSxuPW4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLm1heChNYXRoLm1pbihhLDEpLDApfSl9cmV0dXJuIG59LGIuZXhwb3J0cz1kLkNvbG9yfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL2NvbG9yX2NvbnZlcnNpb25cIjoxNH1dLDE3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi9wNS5Db2xvclwiKSxkLnByb3RvdHlwZS5iYWNrZ3JvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c1swXWluc3RhbmNlb2YgZC5JbWFnZT90aGlzLmltYWdlKGFyZ3VtZW50c1swXSwwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCk6dGhpcy5fcmVuZGVyZXIuYmFja2dyb3VuZC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmNsZWFyKCksdGhpc30sZC5wcm90b3R5cGUuY29sb3JNb2RlPWZ1bmN0aW9uKGEsYixjLGYsZyl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29sb3JNb2RlXCIsYXJndW1lbnRzKSxhPT09ZS5SR0J8fGE9PT1lLkhTQnx8YT09PWUuSFNMKXt0aGlzLl9jb2xvck1vZGU9YTt2YXIgaD10aGlzLl9jb2xvck1heGVzW2FdOzI9PT1hcmd1bWVudHMubGVuZ3RoPyhoWzBdPWIsaFsxXT1iLGhbMl09YixoWzNdPWIpOjQ9PT1hcmd1bWVudHMubGVuZ3RoPyhoWzBdPWIsaFsxXT1jLGhbMl09Zik6NT09PWFyZ3VtZW50cy5sZW5ndGgmJihoWzBdPWIsaFsxXT1jLGhbMl09ZixoWzNdPWcpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9maWxsU2V0XCIsITApLHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9kb0ZpbGxcIiwhMCksdGhpcy5fcmVuZGVyZXIuZmlsbC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLm5vRmlsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZG9GaWxsXCIsITEpLHRoaXN9LGQucHJvdG90eXBlLm5vU3Ryb2tlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9kb1N0cm9rZVwiLCExKSx0aGlzfSxkLnByb3RvdHlwZS5zdHJva2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX3N0cm9rZVNldFwiLCEwKSx0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZG9TdHJva2VcIiwhMCksdGhpcy5fcmVuZGVyZXIuc3Ryb2tlLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vcDUuQ29sb3JcIjoxNn1dLDE4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9TWF0aC5QSTtiLmV4cG9ydHM9e1AyRDpcInAyZFwiLFdFQkdMOlwid2ViZ2xcIixBUlJPVzpcImRlZmF1bHRcIixDUk9TUzpcImNyb3NzaGFpclwiLEhBTkQ6XCJwb2ludGVyXCIsTU9WRTpcIm1vdmVcIixURVhUOlwidGV4dFwiLFdBSVQ6XCJ3YWl0XCIsSEFMRl9QSTpkLzIsUEk6ZCxRVUFSVEVSX1BJOmQvNCxUQVU6MipkLFRXT19QSToyKmQsREVHUkVFUzpcImRlZ3JlZXNcIixSQURJQU5TOlwicmFkaWFuc1wiLERFR19UT19SQUQ6ZC8xODAsUkFEX1RPX0RFRzoxODAvZCxDT1JORVI6XCJjb3JuZXJcIixDT1JORVJTOlwiY29ybmVyc1wiLFJBRElVUzpcInJhZGl1c1wiLFJJR0hUOlwicmlnaHRcIixMRUZUOlwibGVmdFwiLENFTlRFUjpcImNlbnRlclwiLFRPUDpcInRvcFwiLEJPVFRPTTpcImJvdHRvbVwiLEJBU0VMSU5FOlwiYWxwaGFiZXRpY1wiLFBPSU5UUzowLExJTkVTOjEsTElORV9TVFJJUDozLExJTkVfTE9PUDoyLFRSSUFOR0xFUzo0LFRSSUFOR0xFX0ZBTjo2LFRSSUFOR0xFX1NUUklQOjUsUVVBRFM6XCJxdWFkc1wiLFFVQURfU1RSSVA6XCJxdWFkX3N0cmlwXCIsQ0xPU0U6XCJjbG9zZVwiLE9QRU46XCJvcGVuXCIsQ0hPUkQ6XCJjaG9yZFwiLFBJRTpcInBpZVwiLFBST0pFQ1Q6XCJzcXVhcmVcIixTUVVBUkU6XCJidXR0XCIsUk9VTkQ6XCJyb3VuZFwiLEJFVkVMOlwiYmV2ZWxcIixNSVRFUjpcIm1pdGVyXCIsUkdCOlwicmdiXCIsSFNCOlwiaHNiXCIsSFNMOlwiaHNsXCIsQVVUTzpcImF1dG9cIixBTFQ6MTgsQkFDS1NQQUNFOjgsQ09OVFJPTDoxNyxERUxFVEU6NDYsRE9XTl9BUlJPVzo0MCxFTlRFUjoxMyxFU0NBUEU6MjcsTEVGVF9BUlJPVzozNyxPUFRJT046MTgsUkVUVVJOOjEzLFJJR0hUX0FSUk9XOjM5LFNISUZUOjE2LFRBQjo5LFVQX0FSUk9XOjM4LEJMRU5EOlwic291cmNlLW92ZXJcIixBREQ6XCJsaWdodGVyXCIsREFSS0VTVDpcImRhcmtlblwiLExJR0hURVNUOlwibGlnaHRlblwiLERJRkZFUkVOQ0U6XCJkaWZmZXJlbmNlXCIsRVhDTFVTSU9OOlwiZXhjbHVzaW9uXCIsTVVMVElQTFk6XCJtdWx0aXBseVwiLFNDUkVFTjpcInNjcmVlblwiLFJFUExBQ0U6XCJjb3B5XCIsT1ZFUkxBWTpcIm92ZXJsYXlcIixIQVJEX0xJR0hUOlwiaGFyZC1saWdodFwiLFNPRlRfTElHSFQ6XCJzb2Z0LWxpZ2h0XCIsRE9ER0U6XCJjb2xvci1kb2RnZVwiLEJVUk46XCJjb2xvci1idXJuXCIsVEhSRVNIT0xEOlwidGhyZXNob2xkXCIsR1JBWTpcImdyYXlcIixPUEFRVUU6XCJvcGFxdWVcIixJTlZFUlQ6XCJpbnZlcnRcIixQT1NURVJJWkU6XCJwb3N0ZXJpemVcIixESUxBVEU6XCJkaWxhdGVcIixFUk9ERTpcImVyb2RlXCIsQkxVUjpcImJsdXJcIixOT1JNQUw6XCJub3JtYWxcIixJVEFMSUM6XCJpdGFsaWNcIixCT0xEOlwiYm9sZFwiLF9ERUZBVUxUX1RFWFRfRklMTDpcIiMwMDAwMDBcIixfREVGQVVMVF9MRUFETVVMVDoxLjI1LF9DVFhfTUlERExFOlwibWlkZGxlXCIsTElORUFSOlwibGluZWFyXCIsUVVBRFJBVElDOlwicXVhZHJhdGljXCIsQkVaSUVSOlwiYmV6aWVyXCIsQ1VSVkU6XCJjdXJ2ZVwiLFNUUk9LRTpcInN0cm9rZVwiLEZJTEw6XCJmaWxsXCIsVEVYVFVSRTpcInRleHR1cmVcIixJTU1FRElBVEU6XCJpbW1lZGlhdGVcIixORUFSRVNUOlwibmVhcmVzdFwiLFJFUEVBVDpcInJlcGVhdFwiLENMQU1QOlwiY2xhbXBcIixNSVJST1I6XCJtaXJyb3JcIixMQU5EU0NBUEU6XCJsYW5kc2NhcGVcIixQT1JUUkFJVDpcInBvcnRyYWl0XCIsX0RFRkFVTFRfU1RST0tFOlwiIzAwMDAwMFwiLF9ERUZBVUxUX0ZJTEw6XCIjRkZGRkZGXCIsR1JJRDpcImdyaWRcIixBWEVTOlwiYXhlc1wifX0se31dLDE5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZCgpe3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGh8fGRvY3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGh8fDB9ZnVuY3Rpb24gZSgpe3JldHVybiB3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodHx8ZG9jdW1lbnQuYm9keSYmZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHR8fDB9ZnVuY3Rpb24gZihhKXtpZighKGRvY3VtZW50LmZ1bGxzY3JlZW5FbmFibGVkfHxkb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRW5hYmxlZHx8ZG9jdW1lbnQubW96RnVsbFNjcmVlbkVuYWJsZWR8fGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVuYWJsZWQpKXRocm93IG5ldyBFcnJvcihcIkZ1bGxzY3JlZW4gbm90IGVuYWJsZWQgaW4gdGhpcyBicm93c2VyLlwiKVxuO2EucmVxdWVzdEZ1bGxzY3JlZW4/YS5yZXF1ZXN0RnVsbHNjcmVlbigpOmEubW96UmVxdWVzdEZ1bGxTY3JlZW4/YS5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpOmEud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4/YS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpOmEubXNSZXF1ZXN0RnVsbHNjcmVlbiYmYS5tc1JlcXVlc3RGdWxsc2NyZWVuKCl9ZnVuY3Rpb24gZygpe2RvY3VtZW50LmV4aXRGdWxsc2NyZWVuP2RvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk6ZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbj9kb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuKCk6ZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4/ZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4oKTpkb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuJiZkb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKCl9dmFyIGg9YShcIi4vbWFpblwiKSxpPWEoXCIuL2NvbnN0YW50c1wiKSxqPVtpLkFSUk9XLGkuQ1JPU1MsaS5IQU5ELGkuTU9WRSxpLlRFWFQsaS5XQUlUXTtoLnByb3RvdHlwZS5fZnJhbWVSYXRlPTAsaC5wcm90b3R5cGUuX2xhc3RGcmFtZVRpbWU9d2luZG93LnBlcmZvcm1hbmNlLm5vdygpLGgucHJvdG90eXBlLl90YXJnZXRGcmFtZVJhdGU9NjA7dmFyIGs9d2luZG93LnByaW50O2gucHJvdG90eXBlLnByaW50PWZ1bmN0aW9uKCl7YXJndW1lbnRzLmxlbmd0aD9jb25zb2xlLmxvZy5hcHBseShjb25zb2xlLGFyZ3VtZW50cyk6aygpfSxoLnByb3RvdHlwZS5mcmFtZUNvdW50PTAsaC5wcm90b3R5cGUuZm9jdXNlZD1kb2N1bWVudC5oYXNGb2N1cygpLGgucHJvdG90eXBlLmN1cnNvcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9XCJhdXRvXCIsZT10aGlzLl9jdXJFbGVtZW50LmVsdDtpZihqLmluZGV4T2YoYSk+LTEpZD1hO2Vsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpe3ZhciBmPVwiXCI7YiYmYyYmXCJudW1iZXJcIj09dHlwZW9mIGImJlwibnVtYmVyXCI9PXR5cGVvZiBjJiYoZj1iK1wiIFwiK2MpLGQ9XCJodHRwOi8vXCI9PT1hLnN1YnN0cmluZygwLDcpfHxcImh0dHBzOi8vXCI9PT1hLnN1YnN0cmluZygwLDgpP1widXJsKFwiK2ErXCIpIFwiK2YrXCIsIGF1dG9cIjovXFwuKGN1cnxqcGd8anBlZ3xnaWZ8cG5nfENVUnxKUEd8SlBFR3xHSUZ8UE5HKSQvLnRlc3QoYSk/XCJ1cmwoXCIrYStcIikgXCIrZitcIiwgYXV0b1wiOmF9ZS5zdHlsZS5jdXJzb3I9ZH0saC5wcm90b3R5cGUuZnJhbWVSYXRlPWZ1bmN0aW9uKGEpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJmcmFtZVJhdGVcIixhcmd1bWVudHMpLFwibnVtYmVyXCIhPXR5cGVvZiBhfHxhPDA/dGhpcy5fZnJhbWVSYXRlOih0aGlzLl9zZXRQcm9wZXJ0eShcIl90YXJnZXRGcmFtZVJhdGVcIixhKSx0aGlzLl9ydW5GcmFtZXMoKSx0aGlzKX0saC5wcm90b3R5cGUuZ2V0RnJhbWVSYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJhbWVSYXRlKCl9LGgucHJvdG90eXBlLnNldEZyYW1lUmF0ZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5mcmFtZVJhdGUoYSl9LGgucHJvdG90eXBlLm5vQ3Vyc29yPWZ1bmN0aW9uKCl7dGhpcy5fY3VyRWxlbWVudC5lbHQuc3R5bGUuY3Vyc29yPVwibm9uZVwifSxoLnByb3RvdHlwZS5kaXNwbGF5V2lkdGg9c2NyZWVuLndpZHRoLGgucHJvdG90eXBlLmRpc3BsYXlIZWlnaHQ9c2NyZWVuLmhlaWdodCxoLnByb3RvdHlwZS53aW5kb3dXaWR0aD1kKCksaC5wcm90b3R5cGUud2luZG93SGVpZ2h0PWUoKSxoLnByb3RvdHlwZS5fb25yZXNpemU9ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UHJvcGVydHkoXCJ3aW5kb3dXaWR0aFwiLGQoKSksdGhpcy5fc2V0UHJvcGVydHkoXCJ3aW5kb3dIZWlnaHRcIixlKCkpO3ZhciBiLGM9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7XCJmdW5jdGlvblwiPT10eXBlb2YgYy53aW5kb3dSZXNpemVkJiYodm9pZCAwPT09KGI9Yy53aW5kb3dSZXNpemVkKGEpKXx8Ynx8YS5wcmV2ZW50RGVmYXVsdCgpKX0saC5wcm90b3R5cGUud2lkdGg9MCxoLnByb3RvdHlwZS5oZWlnaHQ9MCxoLnByb3RvdHlwZS5mdWxsc2NyZWVuPWZ1bmN0aW9uKGEpe2lmKGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcImZ1bGxzY3JlZW5cIixhcmd1bWVudHMpLHZvaWQgMD09PWEpcmV0dXJuIGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50fHxkb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnR8fGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQ7YT9mKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk6ZygpfSxoLnByb3RvdHlwZS5waXhlbERlbnNpdHk9ZnVuY3Rpb24oYSl7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicGl4ZWxEZW5zaXR5XCIsYXJndW1lbnRzKTt2YXIgYjtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYT8oYSE9PXRoaXMuX3BpeGVsRGVuc2l0eSYmKHRoaXMuX3BpeGVsRGVuc2l0eT1hLHRoaXMuX3BpeGVsc0RpcnR5PSEwKSxiPXRoaXMsdGhpcy5yZXNpemVDYW52YXModGhpcy53aWR0aCx0aGlzLmhlaWdodCwhMCkpOmI9dGhpcy5fcGl4ZWxEZW5zaXR5LGJ9LGgucHJvdG90eXBlLmRpc3BsYXlEZW5zaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfSxoLnByb3RvdHlwZS5nZXRVUkw9ZnVuY3Rpb24oKXtyZXR1cm4gbG9jYXRpb24uaHJlZn0saC5wcm90b3R5cGUuZ2V0VVJMUGF0aD1mdW5jdGlvbigpe3JldHVybiBsb2NhdGlvbi5wYXRobmFtZS5zcGxpdChcIi9cIikuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVyblwiXCIhPT1hfSl9LGgucHJvdG90eXBlLmdldFVSTFBhcmFtcz1mdW5jdGlvbigpe2Zvcih2YXIgYSxiPS9bPyZdKFteJj1dKykoPzpbJj1dKShbXiY9XSspL2dpbSxjPXt9O251bGwhPShhPWIuZXhlYyhsb2NhdGlvbi5zZWFyY2gpKTspYS5pbmRleD09PWIubGFzdEluZGV4JiZiLmxhc3RJbmRleCsrLGNbYVsxXV09YVsyXTtyZXR1cm4gY30sYi5leHBvcnRzPWh9LHtcIi4vY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNH1dLDIwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKTthKFwiLi9jb25zdGFudHNcIik7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzPWQuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcj1mdW5jdGlvbigpe307dmFyIGU9bnVsbCxmPVwiaHR0cHM6Ly9naXRodWIuY29tL3Byb2Nlc3NpbmcvcDUuanMvd2lraS9wNS5qcy1vdmVydmlldyN3aHktY2FudC1pLWFzc2lnbi12YXJpYWJsZXMtdXNpbmctcDUtZnVuY3Rpb25zLWFuZC12YXJpYWJsZXMtYmVmb3JlLXNldHVwXCIsZz1mdW5jdGlvbigpe3ZhciBiPXt9LGM9ZnVuY3Rpb24oYSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm5cIl9cIiE9PWFbMF0mJighKGEgaW4gYikmJihiW2FdPSEwLCEwKSl9KS5tYXAoZnVuY3Rpb24oYil7dmFyIGM7cmV0dXJuIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgYVtiXT9cImZ1bmN0aW9uXCI6Yj09PWIudG9VcHBlckNhc2UoKT9cImNvbnN0YW50XCI6XCJ2YXJpYWJsZVwiLHtuYW1lOmIsdHlwZTpjfX0pfTtlPVtdLmNvbmNhdChjKGQucHJvdG90eXBlKSxjKGEoXCIuL2NvbnN0YW50c1wiKSkpLGUuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBiLm5hbWUubGVuZ3RoLWEubmFtZS5sZW5ndGh9KX0saD1mdW5jdGlvbihhLGIpe2J8fChiPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSkpLGV8fGcoKSxlLnNvbWUoZnVuY3Rpb24oYyl7aWYoYS5tZXNzYWdlJiZudWxsIT09YS5tZXNzYWdlLm1hdGNoKFwiXFxcXFc/XCIrYy5uYW1lK1wiXFxcXFdcIikpcmV0dXJuIGIoXCJEaWQgeW91IGp1c3QgdHJ5IHRvIHVzZSBwNS5qcydzIFwiK2MubmFtZSsoXCJmdW5jdGlvblwiPT09Yy50eXBlP1wiKCkgXCI6XCIgXCIpK2MudHlwZStcIj8gSWYgc28sIHlvdSBtYXkgd2FudCB0byBtb3ZlIGl0IGludG8geW91ciBza2V0Y2gncyBzZXR1cCgpIGZ1bmN0aW9uLlxcblxcbkZvciBtb3JlIGRldGFpbHMsIHNlZTogXCIrZiksITB9KX07ZC5wcm90b3R5cGUuX2hlbHBGb3JNaXN1c2VkQXRUb3BMZXZlbENvZGU9aCxcImNvbXBsZXRlXCIhPT1kb2N1bWVudC5yZWFkeVN0YXRlJiYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLGgsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLGZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLGgsITEpfSkpLGIuZXhwb3J0cz1kfSx7XCIuLi8uLi9kb2NzL3JlZmVyZW5jZS9kYXRhLmpzb25cIjp2b2lkIDAsXCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjR9XSwyMTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL2NvbnN0YW50c1wiKTtiLmV4cG9ydHM9e21vZGVBZGp1c3Q6ZnVuY3Rpb24oYSxiLGMsZSxmKXtyZXR1cm4gZj09PWQuQ09STkVSP3t4OmEseTpiLHc6YyxoOmV9OmY9PT1kLkNPUk5FUlM/e3g6YSx5OmIsdzpjLWEsaDplLWJ9OmY9PT1kLlJBRElVUz97eDphLWMseTpiLWUsdzoyKmMsaDoyKmV9OmY9PT1kLkNFTlRFUj97eDphLS41KmMseTpiLS41KmUsdzpjLGg6ZX06dm9pZCAwfX19LHtcIi4vY29uc3RhbnRzXCI6MTh9XSwyMjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1mdW5jdGlvbigpe3dpbmRvdy5tb2NoYXx8KHdpbmRvdy5zZXR1cCYmXCJmdW5jdGlvblwiPT10eXBlb2Ygd2luZG93LnNldHVwfHx3aW5kb3cuZHJhdyYmXCJmdW5jdGlvblwiPT10eXBlb2Ygd2luZG93LmRyYXcpJiYhZC5pbnN0YW5jZSYmbmV3IGR9O1wiY29tcGxldGVcIj09PWRvY3VtZW50LnJlYWR5U3RhdGU/ZSgpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLGUsITEpfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDIzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKTtkLnByb3RvdHlwZS5leGl0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiZXhpdCgpIG5vdCBpbXBsZW1lbnRlZCwgc2VlIHJlbW92ZSgpXCIpfSxkLnByb3RvdHlwZS5wdXNoU3R5bGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJwdXNoU3R5bGUoKSBub3QgdXNlZCwgc2VlIHB1c2goKVwiKX0sZC5wcm90b3R5cGUucG9wU3R5bGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJwb3BTdHlsZSgpIG5vdCB1c2VkLCBzZWUgcG9wKClcIil9LGQucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXt2YXIgYT1cInNpemUoKSBpcyBub3QgYSB2YWxpZCBwNSBmdW5jdGlvbiwgdG8gc2V0IHRoZSBzaXplIG9mIHRoZSBcIjt0aHJvdyBhKz1cImRyYXdpbmcgY2FudmFzLCBwbGVhc2UgdXNlIGNyZWF0ZUNhbnZhcygpIGluc3RlYWRcIixuZXcgRXJyb3IoYSl9LGIuZXhwb3J0cz1kfSx7XCIuL21haW5cIjoyNH1dLDI0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7YShcIi4vc2hpbVwiKTt2YXIgZD1hKFwiLi9jb25zdGFudHNcIiksZT1mdW5jdGlvbihhLGIsYyl7XCJib29sZWFuXCI9PXR5cGVvZiBiJiZ2b2lkIDA9PT1jJiYoYz1iLGI9dm9pZCAwKSx0aGlzLl9zZXR1cERvbmU9ITEsdGhpcy5fcGl4ZWxEZW5zaXR5PU1hdGguY2VpbCh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyl8fDEsdGhpcy5fdXNlck5vZGU9Yix0aGlzLl9jdXJFbGVtZW50PW51bGwsdGhpcy5fZWxlbWVudHM9W10sdGhpcy5fcmVxdWVzdEFuaW1JZD0wLHRoaXMuX3ByZWxvYWRDb3VudD0wLHRoaXMuX2lzR2xvYmFsPSExLHRoaXMuX2xvb3A9ITAsdGhpcy5faW5pdGlhbGl6ZUluc3RhbmNlVmFyaWFibGVzKCksdGhpcy5fZGVmYXVsdENhbnZhc1NpemU9e3dpZHRoOjEwMCxoZWlnaHQ6MTAwfSx0aGlzLl9ldmVudHM9e21vdXNlbW92ZTpudWxsLG1vdXNlZG93bjpudWxsLG1vdXNldXA6bnVsbCxkcmFnZW5kOm51bGwsZHJhZ292ZXI6bnVsbCxjbGljazpudWxsLGRibGNsaWNrOm51bGwsbW91c2VvdmVyOm51bGwsbW91c2VvdXQ6bnVsbCxrZXlkb3duOm51bGwsa2V5dXA6bnVsbCxrZXlwcmVzczpudWxsLHRvdWNoc3RhcnQ6bnVsbCx0b3VjaG1vdmU6bnVsbCx0b3VjaGVuZDpudWxsLHJlc2l6ZTpudWxsLGJsdXI6bnVsbH0sdGhpcy5fZXZlbnRzLndoZWVsPW51bGwsdGhpcy5fbG9hZGluZ1NjcmVlbklkPVwicDVfbG9hZGluZ1wiLHRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzPXt9O2Zvcih2YXIgZD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlLnByb3RvdHlwZS5fcmVnaXN0ZXJlZE1ldGhvZHMpLGY9MDtmPGQubGVuZ3RoO2YrKyl7dmFyIGc9ZFtmXTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kc1tnXT1lLnByb3RvdHlwZS5fcmVnaXN0ZXJlZE1ldGhvZHNbZ10uc2xpY2UoKX13aW5kb3cuRGV2aWNlT3JpZW50YXRpb25FdmVudCYmKHRoaXMuX2V2ZW50cy5kZXZpY2VvcmllbnRhdGlvbj1udWxsKSx3aW5kb3cuRGV2aWNlTW90aW9uRXZlbnQmJiF3aW5kb3cuX2lzTm9kZVdlYmtpdCYmKHRoaXMuX2V2ZW50cy5kZXZpY2Vtb3Rpb249bnVsbCksdGhpcy5fc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl91c2VyTm9kZSYmXCJzdHJpbmdcIj09dHlwZW9mIHRoaXMuX3VzZXJOb2RlJiYodGhpcy5fdXNlck5vZGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fdXNlck5vZGUpKTt2YXIgYT10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcyxiPWEucHJlbG9hZDtpZihiKXt2YXIgYz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9sb2FkaW5nU2NyZWVuSWQpO2lmKCFjKXtjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksYy5pbm5lckhUTUw9XCJMb2FkaW5nLi4uXCIsYy5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsYy5pZD10aGlzLl9sb2FkaW5nU2NyZWVuSWQ7KHRoaXMuX3VzZXJOb2RlfHxkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZChjKX12YXIgZD10aGlzLl9wcmVsb2FkTWV0aG9kcztmb3IodmFyIGYgaW4gZCl7ZFtmXT1kW2ZdfHxlO3ZhciBnPWRbZl07ZyE9PWUucHJvdG90eXBlJiZnIT09ZXx8KHRoaXMuX2lzR2xvYmFsJiYod2luZG93W2ZdPXRoaXMuX3dyYXBQcmVsb2FkKHRoaXMsZikpLGc9dGhpcyksdGhpcy5fcmVnaXN0ZXJlZFByZWxvYWRNZXRob2RzW2ZdPWdbZl0sZ1tmXT10aGlzLl93cmFwUHJlbG9hZChnLGYpfWIoKSx0aGlzLl9ydW5JZlByZWxvYWRzQXJlRG9uZSgpfWVsc2UgdGhpcy5fc2V0dXAoKSx0aGlzLl9ydW5GcmFtZXMoKSx0aGlzLl9kcmF3KCl9LmJpbmQodGhpcyksdGhpcy5fcnVuSWZQcmVsb2Fkc0FyZURvbmU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztpZigwPT09YS5fcHJlbG9hZENvdW50KXt2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhLl9sb2FkaW5nU2NyZWVuSWQpO2ImJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKSxhLl9zZXR1cCgpLGEuX3J1bkZyYW1lcygpLGEuX2RyYXcoKX19LHRoaXMuX2RlY3JlbWVudFByZWxvYWQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLnByZWxvYWQmJihhLl9zZXRQcm9wZXJ0eShcIl9wcmVsb2FkQ291bnRcIixhLl9wcmVsb2FkQ291bnQtMSksYS5fcnVuSWZQcmVsb2Fkc0FyZURvbmUoKSl9LHRoaXMuX3dyYXBQcmVsb2FkPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2luY3JlbWVudFByZWxvYWQoKSx0aGlzLl9yZWdpc3RlcmVkUHJlbG9hZE1ldGhvZHNbYl0uYXBwbHkoYSxhcmd1bWVudHMpfS5iaW5kKHRoaXMpfSx0aGlzLl9pbmNyZW1lbnRQcmVsb2FkPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7YS5fc2V0UHJvcGVydHkoXCJfcHJlbG9hZENvdW50XCIsYS5fcHJlbG9hZENvdW50KzEpfSx0aGlzLl9zZXR1cD1mdW5jdGlvbigpe3RoaXMuY3JlYXRlQ2FudmFzKHRoaXMuX2RlZmF1bHRDYW52YXNTaXplLndpZHRoLHRoaXMuX2RlZmF1bHRDYW52YXNTaXplLmhlaWdodCxcInAyZFwiKTt2YXIgYT10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLnByZWxvYWQpZm9yKHZhciBiIGluIHRoaXMuX3ByZWxvYWRNZXRob2RzKWFbYl09dGhpcy5fcHJlbG9hZE1ldGhvZHNbYl1bYl0sYVtiXSYmdGhpcyYmKGFbYl09YVtiXS5iaW5kKHRoaXMpKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLnNldHVwJiZhLnNldHVwKCk7Zm9yKHZhciBjPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiY2FudmFzXCIpLGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXTtcInRydWVcIj09PWUuZGF0YXNldC5oaWRkZW4mJihlLnN0eWxlLnZpc2liaWxpdHk9XCJcIixkZWxldGUgZS5kYXRhc2V0LmhpZGRlbil9dGhpcy5fc2V0dXBEb25lPSEwfS5iaW5kKHRoaXMpLHRoaXMuX2RyYXc9ZnVuY3Rpb24oKXt2YXIgYT13aW5kb3cucGVyZm9ybWFuY2Uubm93KCksYj1hLXRoaXMuX2xhc3RGcmFtZVRpbWUsYz0xZTMvdGhpcy5fdGFyZ2V0RnJhbWVSYXRlOyghdGhpcy5fbG9vcHx8Yj49Yy01KSYmKHRoaXMucmVkcmF3KCksdGhpcy5fZnJhbWVSYXRlPTFlMy8oYS10aGlzLl9sYXN0RnJhbWVUaW1lKSx0aGlzLl9sYXN0RnJhbWVUaW1lPWEsdm9pZCAwIT09dGhpcy5fdXBkYXRlTW91c2VDb29yZHMmJnRoaXMuX3VwZGF0ZU1vdXNlQ29vcmRzKCkpLHRoaXMuX2xvb3AmJih0aGlzLl9yZXF1ZXN0QW5pbUlkPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fZHJhdykpfS5iaW5kKHRoaXMpLHRoaXMuX3J1bkZyYW1lcz1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuX3VwZGF0ZUludGVydmFsKX0uYmluZCh0aGlzKSx0aGlzLl9zZXRQcm9wZXJ0eT1mdW5jdGlvbihhLGIpe3RoaXNbYV09Yix0aGlzLl9pc0dsb2JhbCYmKHdpbmRvd1thXT1iKX0uYmluZCh0aGlzKSx0aGlzLnJlbW92ZT1mdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2xvYWRpbmdTY3JlZW5JZCk7aWYoYSYmKGEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKSx0aGlzLl9pbmNyZW1lbnRQcmVsb2FkKCkpLHRoaXMuX2N1ckVsZW1lbnQpe3RoaXMuX2xvb3A9ITEsdGhpcy5fcmVxdWVzdEFuaW1JZCYmd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlcXVlc3RBbmltSWQpO2Zvcih2YXIgYiBpbiB0aGlzLl9ldmVudHMpd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYix0aGlzLl9ldmVudHNbYl0pO2Zvcih2YXIgYz0wO2M8dGhpcy5fZWxlbWVudHMubGVuZ3RoO2MrKyl7dmFyIGQ9dGhpcy5fZWxlbWVudHNbY107ZC5lbHQucGFyZW50Tm9kZSYmZC5lbHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkLmVsdCk7Zm9yKHZhciBmIGluIGQuX2V2ZW50cylkLmVsdC5yZW1vdmVFdmVudExpc3RlbmVyKGYsZC5fZXZlbnRzW2ZdKX12YXIgZz10aGlzO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnJlbW92ZS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEmJmEuY2FsbChnKX0pfWlmKHRoaXMuX2lzR2xvYmFsKXtmb3IodmFyIGggaW4gZS5wcm90b3R5cGUpdHJ5e2RlbGV0ZSB3aW5kb3dbaF19Y2F0Y2goYSl7d2luZG93W2hdPXZvaWQgMH1mb3IodmFyIGkgaW4gdGhpcylpZih0aGlzLmhhc093blByb3BlcnR5KGkpKXRyeXtkZWxldGUgd2luZG93W2ldfWNhdGNoKGEpe3dpbmRvd1tpXT12b2lkIDB9ZS5pbnN0YW5jZT1udWxsfX0uYmluZCh0aGlzKSx0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5pbml0LmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwIT09YSYmYS5jYWxsKHRoaXMpfSx0aGlzKTt2YXIgaD10aGlzLl9jcmVhdGVGcmllbmRseUdsb2JhbEZ1bmN0aW9uQmluZGVyKCk7aWYoYSlhKHRoaXMpO2Vsc2V7dGhpcy5faXNHbG9iYWw9ITAsZS5pbnN0YW5jZT10aGlzO2Zvcih2YXIgaSBpbiBlLnByb3RvdHlwZSlpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnByb3RvdHlwZVtpXSl7dmFyIGo9aS5zdWJzdHJpbmcoMik7dGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGopfHwoTWF0aC5oYXNPd25Qcm9wZXJ0eShpKSYmTWF0aFtpXT09PWUucHJvdG90eXBlW2ldP2goaSxlLnByb3RvdHlwZVtpXSk6aChpLGUucHJvdG90eXBlW2ldLmJpbmQodGhpcykpKX1lbHNlIGgoaSxlLnByb3RvdHlwZVtpXSk7Zm9yKHZhciBrIGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eShrKSYmaChrLHRoaXNba10pfWZvcih2YXIgbCBpbiB0aGlzLl9ldmVudHMpe3ZhciBtPXRoaXNbXCJfb25cIitsXTtpZihtKXt2YXIgbj1tLmJpbmQodGhpcyk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIobCxuLHtwYXNzaXZlOiExfSksdGhpcy5fZXZlbnRzW2xdPW59fXZhciBvPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJmb2N1c2VkXCIsITApfS5iaW5kKHRoaXMpLHA9ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcImZvY3VzZWRcIiwhMSl9LmJpbmQodGhpcyk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLG8pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLHApLHRoaXMucmVnaXN0ZXJNZXRob2QoXCJyZW1vdmVcIixmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIixvKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIixwKX0pLGM/dGhpcy5fc3RhcnQoKTpcImNvbXBsZXRlXCI9PT1kb2N1bWVudC5yZWFkeVN0YXRlP3RoaXMuX3N0YXJ0KCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsdGhpcy5fc3RhcnQuYmluZCh0aGlzKSwhMSl9O2UucHJvdG90eXBlLl9pbml0aWFsaXplSW5zdGFuY2VWYXJpYWJsZXM9ZnVuY3Rpb24oKXt0aGlzLl9zdHlsZXM9W10sdGhpcy5fYmV6aWVyRGV0YWlsPTIwLHRoaXMuX2N1cnZlRGV0YWlsPTIwLHRoaXMuX2NvbG9yTW9kZT1kLlJHQix0aGlzLl9jb2xvck1heGVzPXtyZ2I6WzI1NSwyNTUsMjU1LDI1NV0saHNiOlszNjAsMTAwLDEwMCwxXSxoc2w6WzM2MCwxMDAsMTAwLDFdfSx0aGlzLl9waXhlbHNEaXJ0eT0hMH0sZS5pbnN0YW5jZT1udWxsLGUuZGlzYWJsZUZyaWVuZGx5RXJyb3JzPSExO2Zvcih2YXIgZiBpbiBkKWUucHJvdG90eXBlW2ZdPWRbZl07ZS5wcm90b3R5cGUuX3ByZWxvYWRNZXRob2RzPXtsb2FkSlNPTjplLnByb3RvdHlwZSxsb2FkSW1hZ2U6ZS5wcm90b3R5cGUsbG9hZFN0cmluZ3M6ZS5wcm90b3R5cGUsbG9hZFhNTDplLnByb3RvdHlwZSxsb2FkQnl0ZXM6ZS5wcm90b3R5cGUsbG9hZFRhYmxlOmUucHJvdG90eXBlLGxvYWRGb250OmUucHJvdG90eXBlLGxvYWRNb2RlbDplLnByb3RvdHlwZSxsb2FkU2hhZGVyOmUucHJvdG90eXBlfSxlLnByb3RvdHlwZS5fcmVnaXN0ZXJlZE1ldGhvZHM9e2luaXQ6W10scHJlOltdLHBvc3Q6W10scmVtb3ZlOltdfSxlLnByb3RvdHlwZS5fcmVnaXN0ZXJlZFByZWxvYWRNZXRob2RzPXt9LGUucHJvdG90eXBlLnJlZ2lzdGVyUHJlbG9hZE1ldGhvZD1mdW5jdGlvbihhLGIpe2UucHJvdG90eXBlLl9wcmVsb2FkTWV0aG9kcy5oYXNPd25Qcm9wZXJ0eShhKXx8KGUucHJvdG90eXBlLl9wcmVsb2FkTWV0aG9kc1thXT1iKX0sZS5wcm90b3R5cGUucmVnaXN0ZXJNZXRob2Q9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzfHxlLnByb3RvdHlwZTtjLl9yZWdpc3RlcmVkTWV0aG9kcy5oYXNPd25Qcm9wZXJ0eShhKXx8KGMuX3JlZ2lzdGVyZWRNZXRob2RzW2FdPVtdKSxjLl9yZWdpc3RlcmVkTWV0aG9kc1thXS5wdXNoKGIpfSxlLnByb3RvdHlwZS5fY3JlYXRlRnJpZW5kbHlHbG9iYWxGdW5jdGlvbkJpbmRlcj1mdW5jdGlvbihhKXthPWF8fHt9O3ZhciBiPWEuZ2xvYmFsT2JqZWN0fHx3aW5kb3csYz1hLmxvZ3x8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxkPXtwcmludDohMH07cmV0dXJuIGZ1bmN0aW9uKGEsZil7aWYoZS5kaXNhYmxlRnJpZW5kbHlFcnJvcnMsMSliW2FdPWY7ZWxzZSB0cnl7aWYoYSBpbiBiJiYhKGEgaW4gZCkpdGhyb3cgbmV3IEVycm9yKCdnbG9iYWwgXCInK2ErJ1wiIGFscmVhZHkgZXhpc3RzJyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsYSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHNldDpmdW5jdGlvbihkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYixhLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpkLHdyaXRhYmxlOiEwfSksYygnWW91IGp1c3QgY2hhbmdlZCB0aGUgdmFsdWUgb2YgXCInK2ErXCJcXFwiLCB3aGljaCB3YXMgYSBwNSBmdW5jdGlvbi4gVGhpcyBjb3VsZCBjYXVzZSBwcm9ibGVtcyBsYXRlciBpZiB5b3UncmUgbm90IGNhcmVmdWwuXCIpfX0pfWNhdGNoKGQpe2MoJ3A1IGhhZCBwcm9ibGVtcyBjcmVhdGluZyB0aGUgZ2xvYmFsIGZ1bmN0aW9uIFwiJythKydcIiwgcG9zc2libHkgYmVjYXVzZSB5b3VyIGNvZGUgaXMgYWxyZWFkeSB1c2luZyB0aGF0IG5hbWUgYXMgYSB2YXJpYWJsZS4gWW91IG1heSB3YW50IHRvIHJlbmFtZSB5b3VyIHZhcmlhYmxlIHRvIHNvbWV0aGluZyBlbHNlLicpLGJbYV09Zn19fSxiLmV4cG9ydHM9ZX0se1wiLi9jb25zdGFudHNcIjoxOCxcIi4vc2hpbVwiOjM0fV0sMjU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4hMT09PWI/ZihhLGMpOmUoYSxiLGMpLHRoaXN9ZnVuY3Rpb24gZShhLGIsYyl7Yy5fZXZlbnRzW2FdJiZmKGEsYyk7dmFyIGQ9Yi5iaW5kKGMpO2MuZWx0LmFkZEV2ZW50TGlzdGVuZXIoYSxkLCExKSxjLl9ldmVudHNbYV09ZH1mdW5jdGlvbiBmKGEsYil7dmFyIGM9Yi5fZXZlbnRzW2FdO2IuZWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxjLCExKSxiLl9ldmVudHNbYV09bnVsbH12YXIgZz1hKFwiLi9tYWluXCIpO2cuRWxlbWVudD1mdW5jdGlvbihhLGIpe3RoaXMuZWx0PWEsdGhpcy5fcEluc3Q9Yix0aGlzLl9ldmVudHM9e30sdGhpcy53aWR0aD10aGlzLmVsdC5vZmZzZXRXaWR0aCx0aGlzLmhlaWdodD10aGlzLmVsdC5vZmZzZXRIZWlnaHR9LGcuRWxlbWVudC5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hP3RoaXMuZWx0LnBhcmVudE5vZGU6KFwic3RyaW5nXCI9PXR5cGVvZiBhPyhcIiNcIj09PWFbMF0mJihhPWEuc3Vic3RyaW5nKDEpKSxhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKTphIGluc3RhbmNlb2YgZy5FbGVtZW50JiYoYT1hLmVsdCksYS5hcHBlbmRDaGlsZCh0aGlzLmVsdCksdGhpcyl9LGcuRWxlbWVudC5wcm90b3R5cGUuaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/dGhpcy5lbHQuaWQ6KHRoaXMuZWx0LmlkPWEsdGhpcy53aWR0aD10aGlzLmVsdC5vZmZzZXRXaWR0aCx0aGlzLmhlaWdodD10aGlzLmVsdC5vZmZzZXRIZWlnaHQsdGhpcyl9LGcuRWxlbWVudC5wcm90b3R5cGUuY2xhc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/dGhpcy5lbHQuY2xhc3NOYW1lOih0aGlzLmVsdC5jbGFzc05hbWU9YSx0aGlzKX0sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZVByZXNzZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJtb3VzZWRvd25cIixmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMCksdGhpcy5fcEluc3QuX3NldE1vdXNlQnV0dG9uKGIpLGEoKX0sdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5kb3VibGVDbGlja2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiZGJsY2xpY2tcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VXaGVlbD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIndoZWVsXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlUmVsZWFzZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJtb3VzZXVwXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlQ2xpY2tlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcImNsaWNrXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlTW92ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJtb3VzZW1vdmVcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VPdmVyPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2VvdmVyXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmNoYW5nZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJjaGFuZ2VcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuaW5wdXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJpbnB1dFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZU91dD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNlb3V0XCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLnRvdWNoU3RhcnRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcInRvdWNoc3RhcnRcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUudG91Y2hNb3ZlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcInRvdWNobW92ZVwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS50b3VjaEVuZGVkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwidG91Y2hlbmRcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuZHJhZ092ZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJkcmFnb3ZlclwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5kcmFnTGVhdmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJkcmFnbGVhdmVcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuZHJvcD1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYil7dmFyIGM9bmV3IGcuRmlsZShiKTtyZXR1cm4gZnVuY3Rpb24oYil7Yy5kYXRhPWIudGFyZ2V0LnJlc3VsdCxhKGMpfX1yZXR1cm4gd2luZG93LkZpbGUmJndpbmRvdy5GaWxlUmVhZGVyJiZ3aW5kb3cuRmlsZUxpc3QmJndpbmRvdy5CbG9iPyhlKFwiZHJhZ292ZXJcIixmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpLGEucHJldmVudERlZmF1bHQoKX0sdGhpcyksZShcImRyYWdsZWF2ZVwiLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzKSx2b2lkIDAhPT1iJiZlKFwiZHJvcFwiLGIsdGhpcyksZShcImRyb3BcIixmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpLGEucHJldmVudERlZmF1bHQoKTtmb3IodmFyIGI9YS5kYXRhVHJhbnNmZXIuZmlsZXMsZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgZT1iW2RdLGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9YyhlKSxlLnR5cGUuaW5kZXhPZihcInRleHRcIik+LTE/Zi5yZWFkQXNUZXh0KGUpOmYucmVhZEFzRGF0YVVSTChlKX19LHRoaXMpKTpjb25zb2xlLmxvZyhcIlRoZSBGaWxlIEFQSXMgYXJlIG5vdCBmdWxseSBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLlwiKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLl9zZXRQcm9wZXJ0eT1mdW5jdGlvbihhLGIpe3RoaXNbYV09Yn0sYi5leHBvcnRzPWcuRWxlbWVudH0se1wiLi9tYWluXCI6MjR9XSwyNjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIiksZT1hKFwiLi9jb25zdGFudHNcIik7ZC5HcmFwaGljcz1mdW5jdGlvbihhLGIsYyxmKXt2YXIgZz1jfHxlLlAyRDt0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLChmLl91c2VyTm9kZXx8ZG9jdW1lbnQuYm9keSkuYXBwZW5kQ2hpbGQodGhpcy5jYW52YXMpLGQuRWxlbWVudC5jYWxsKHRoaXMsdGhpcy5jYW52YXMsZiwhMSk7Zm9yKHZhciBoIGluIGQucHJvdG90eXBlKXRoaXNbaF18fChcImZ1bmN0aW9uXCI9PXR5cGVvZiBkLnByb3RvdHlwZVtoXT90aGlzW2hdPWQucHJvdG90eXBlW2hdLmJpbmQodGhpcyk6dGhpc1toXT1kLnByb3RvdHlwZVtoXSk7cmV0dXJuIGQucHJvdG90eXBlLl9pbml0aWFsaXplSW5zdGFuY2VWYXJpYWJsZXMuYXBwbHkodGhpcyksdGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5fcGl4ZWxEZW5zaXR5PWYuX3BpeGVsRGVuc2l0eSxnPT09ZS5XRUJHTD90aGlzLl9yZW5kZXJlcj1uZXcgZC5SZW5kZXJlckdMKHRoaXMuY2FudmFzLHRoaXMsITEpOnRoaXMuX3JlbmRlcmVyPW5ldyBkLlJlbmRlcmVyMkQodGhpcy5jYW52YXMsdGhpcywhMSksZi5fZWxlbWVudHMucHVzaCh0aGlzKSx0aGlzLl9yZW5kZXJlci5yZXNpemUoYSxiKSx0aGlzLl9yZW5kZXJlci5fYXBwbHlEZWZhdWx0cygpLHRoaXN9LGQuR3JhcGhpY3MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5FbGVtZW50LnByb3RvdHlwZSksZC5HcmFwaGljcy5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5lbHQucGFyZW50Tm9kZSYmdGhpcy5lbHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVsdCk7dmFyIGE9dGhpcy5fcEluc3QuX2VsZW1lbnRzLmluZGV4T2YodGhpcyk7LTEhPT1hJiZ0aGlzLl9wSW5zdC5fZWxlbWVudHMuc3BsaWNlKGEsMSk7Zm9yKHZhciBiIGluIHRoaXMuX2V2ZW50cyl0aGlzLmVsdC5yZW1vdmVFdmVudExpc3RlbmVyKGIsdGhpcy5fZXZlbnRzW2JdKX0sYi5leHBvcnRzPWQuR3JhcGhpY3N9LHtcIi4vY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNH1dLDI3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhKXt2YXIgYj0wLGM9MDtpZihhLm9mZnNldFBhcmVudClkb3tiKz1hLm9mZnNldExlZnQsYys9YS5vZmZzZXRUb3B9d2hpbGUoYT1hLm9mZnNldFBhcmVudCk7ZWxzZSBiKz1hLm9mZnNldExlZnQsYys9YS5vZmZzZXRUb3A7cmV0dXJuW2IsY119dmFyIGU9YShcIi4vbWFpblwiKSxmPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtlLlJlbmRlcmVyPWZ1bmN0aW9uKGEsYixjKXtlLkVsZW1lbnQuY2FsbCh0aGlzLGEsYiksdGhpcy5jYW52YXM9YSxjPyh0aGlzLl9pc01haW5DYW52YXM9ITAsdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiX2N1ckVsZW1lbnRcIix0aGlzKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJjYW52YXNcIix0aGlzLmNhbnZhcyksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwid2lkdGhcIix0aGlzLndpZHRoKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJoZWlnaHRcIix0aGlzLmhlaWdodCkpOih0aGlzLmNhbnZhcy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLHRoaXMuX3N0eWxlcz1bXSksdGhpcy5fdGV4dFNpemU9MTIsdGhpcy5fdGV4dExlYWRpbmc9MTUsdGhpcy5fdGV4dEZvbnQ9XCJzYW5zLXNlcmlmXCIsdGhpcy5fdGV4dFN0eWxlPWYuTk9STUFMLHRoaXMuX3RleHRBc2NlbnQ9bnVsbCx0aGlzLl90ZXh0RGVzY2VudD1udWxsLHRoaXMuX3RleHRBbGlnbj1mLkxFRlQsdGhpcy5fdGV4dEJhc2VsaW5lPWYuQkFTRUxJTkUsdGhpcy5fcmVjdE1vZGU9Zi5DT1JORVIsdGhpcy5fZWxsaXBzZU1vZGU9Zi5DRU5URVIsdGhpcy5fY3VydmVUaWdodG5lc3M9MCx0aGlzLl9pbWFnZU1vZGU9Zi5DT1JORVIsdGhpcy5fdGludD1udWxsLHRoaXMuX2RvU3Ryb2tlPSEwLHRoaXMuX2RvRmlsbD0hMCx0aGlzLl9zdHJva2VTZXQ9ITEsdGhpcy5fZmlsbFNldD0hMX0sZS5SZW5kZXJlci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLkVsZW1lbnQucHJvdG90eXBlKSxlLlJlbmRlcmVyLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKCl7cmV0dXJue3Byb3BlcnRpZXM6e19kb1N0cm9rZTp0aGlzLl9kb1N0cm9rZSxfc3Ryb2tlU2V0OnRoaXMuX3N0cm9rZVNldCxfZG9GaWxsOnRoaXMuX2RvRmlsbCxfZmlsbFNldDp0aGlzLl9maWxsU2V0LF90aW50OnRoaXMuX3RpbnQsX2ltYWdlTW9kZTp0aGlzLl9pbWFnZU1vZGUsX3JlY3RNb2RlOnRoaXMuX3JlY3RNb2RlLF9lbGxpcHNlTW9kZTp0aGlzLl9lbGxpcHNlTW9kZSxfdGV4dEZvbnQ6dGhpcy5fdGV4dEZvbnQsX3RleHRMZWFkaW5nOnRoaXMuX3RleHRMZWFkaW5nLF90ZXh0U2l6ZTp0aGlzLl90ZXh0U2l6ZSxfdGV4dEFsaWduOnRoaXMuX3RleHRBbGlnbixfdGV4dEJhc2VsaW5lOnRoaXMuX3RleHRCYXNlbGluZSxfdGV4dFN0eWxlOnRoaXMuX3RleHRTdHlsZX19fSxlLlJlbmRlcmVyLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oYSl7YS5wcm9wZXJ0aWVzJiZPYmplY3QuYXNzaWduKHRoaXMsYS5wcm9wZXJ0aWVzKX0sZS5SZW5kZXJlci5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGEsYil7dGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5lbHQud2lkdGg9YSp0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LHRoaXMuZWx0LmhlaWdodD1iKnRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksdGhpcy5lbHQuc3R5bGUud2lkdGg9YStcInB4XCIsdGhpcy5lbHQuc3R5bGUuaGVpZ2h0PWIrXCJweFwiLHRoaXMuX2lzTWFpbkNhbnZhcyYmKHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIndpZHRoXCIsdGhpcy53aWR0aCksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiaGVpZ2h0XCIsdGhpcy5oZWlnaHQpKX0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dExlYWRpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGE/KHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRMZWFkaW5nXCIsYSksdGhpcy5fcEluc3QpOnRoaXMuX3RleHRMZWFkaW5nfSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0U2l6ZT1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYT8odGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dFNpemVcIixhKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0TGVhZGluZ1wiLGEqZi5fREVGQVVMVF9MRUFETVVMVCksdGhpcy5fYXBwbHlUZXh0UHJvcGVydGllcygpKTp0aGlzLl90ZXh0U2l6ZX0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dFN0eWxlPWZ1bmN0aW9uKGEpe3JldHVybiBhPyhhIT09Zi5OT1JNQUwmJmEhPT1mLklUQUxJQyYmYSE9PWYuQk9MRHx8dGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dFN0eWxlXCIsYSksdGhpcy5fYXBwbHlUZXh0UHJvcGVydGllcygpKTp0aGlzLl90ZXh0U3R5bGV9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRBc2NlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuX3RleHRBc2NlbnQmJnRoaXMuX3VwZGF0ZVRleHRNZXRyaWNzKCksdGhpcy5fdGV4dEFzY2VudH0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dERlc2NlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuX3RleHREZXNjZW50JiZ0aGlzLl91cGRhdGVUZXh0TWV0cmljcygpLHRoaXMuX3RleHREZXNjZW50fSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0QWxpZ249ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwIT09YT8odGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEFsaWduXCIsYSksdm9pZCAwIT09YiYmdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEJhc2VsaW5lXCIsYiksdGhpcy5fYXBwbHlUZXh0UHJvcGVydGllcygpKTp7aG9yaXpvbnRhbDp0aGlzLl90ZXh0QWxpZ24sdmVydGljYWw6dGhpcy5fdGV4dEJhc2VsaW5lfX0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dD1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBnLGgsaSxqLGssbCxtLG4sbyxwPXRoaXMuX3BJbnN0LHE9TnVtYmVyLk1BWF9WQUxVRTtpZigodGhpcy5fZG9GaWxsfHx0aGlzLl9kb1N0cm9rZSkmJnZvaWQgMCE9PWEpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBhJiYoYT1hLnRvU3RyaW5nKCkpLGE9YS5yZXBsYWNlKC8oXFx0KS9nLFwiICBcIiksZz1hLnNwbGl0KFwiXFxuXCIpLHZvaWQgMCE9PWQpe2ZvcihvPTAsaT0wO2k8Zy5sZW5ndGg7aSsrKWZvcihrPVwiXCIsbj1nW2ldLnNwbGl0KFwiIFwiKSxoPTA7aDxuLmxlbmd0aDtoKyspbD1rK25baF0rXCIgXCIsbT10aGlzLnRleHRXaWR0aChsKSxtPmQ/KGs9bltoXStcIiBcIixvKz1wLnRleHRMZWFkaW5nKCkpOms9bDtzd2l0Y2godGhpcy5fcmVjdE1vZGU9PT1mLkNFTlRFUiYmKGItPWQvMixjLT1lLzIpLHRoaXMuX3RleHRBbGlnbil7Y2FzZSBmLkNFTlRFUjpiKz1kLzI7YnJlYWs7Y2FzZSBmLlJJR0hUOmIrPWR9dmFyIHI9ITE7aWYodm9pZCAwIT09ZSl7c3dpdGNoKHRoaXMuX3RleHRCYXNlbGluZSl7Y2FzZSBmLkJPVFRPTTpjKz1lLW87YnJlYWs7Y2FzZSBmLkNFTlRFUjpjKz0oZS1vKS8yO2JyZWFrO2Nhc2UgZi5CQVNFTElORTpyPSEwLHRoaXMuX3RleHRCYXNlbGluZT1mLlRPUH1xPWMrZS1wLnRleHRBc2NlbnQoKX1mb3IoaT0wO2k8Zy5sZW5ndGg7aSsrKXtmb3Ioaz1cIlwiLG49Z1tpXS5zcGxpdChcIiBcIiksaD0wO2g8bi5sZW5ndGg7aCsrKWw9aytuW2hdK1wiIFwiLG09dGhpcy50ZXh0V2lkdGgobCksbT5kJiZrLmxlbmd0aD4wPyh0aGlzLl9yZW5kZXJUZXh0KHAsayxiLGMscSksaz1uW2hdK1wiIFwiLGMrPXAudGV4dExlYWRpbmcoKSk6az1sO3RoaXMuX3JlbmRlclRleHQocCxrLGIsYyxxKSxjKz1wLnRleHRMZWFkaW5nKCksciYmKHRoaXMuX3RleHRCYXNlbGluZT1mLkJBU0VMSU5FKX19ZWxzZXt2YXIgcz0wLHQ9cC50ZXh0QWxpZ24oKS52ZXJ0aWNhbDtmb3IodD09PWYuQ0VOVEVSP3M9KGcubGVuZ3RoLTEpKnAudGV4dExlYWRpbmcoKS8yOnQ9PT1mLkJPVFRPTSYmKHM9KGcubGVuZ3RoLTEpKnAudGV4dExlYWRpbmcoKSksaj0wO2o8Zy5sZW5ndGg7aisrKXRoaXMuX3JlbmRlclRleHQocCxnW2pdLGIsYy1zLHEpLGMrPXAudGV4dExlYWRpbmcoKX1yZXR1cm4gcH19LGUuUmVuZGVyZXIucHJvdG90eXBlLl9hcHBseURlZmF1bHRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUuUmVuZGVyZXIucHJvdG90eXBlLl9pc09wZW5UeXBlPWZ1bmN0aW9uKGEpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZihhPWF8fHRoaXMuX3RleHRGb250KSYmYS5mb250JiZhLmZvbnQuc3VwcG9ydGVkfSxlLlJlbmRlcmVyLnByb3RvdHlwZS5fdXBkYXRlVGV4dE1ldHJpY3M9ZnVuY3Rpb24oKXtpZih0aGlzLl9pc09wZW5UeXBlKCkpcmV0dXJuIHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRBc2NlbnRcIix0aGlzLl90ZXh0Rm9udC5fdGV4dEFzY2VudCgpKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0RGVzY2VudFwiLHRoaXMuX3RleHRGb250Ll90ZXh0RGVzY2VudCgpKSx0aGlzO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO2Euc3R5bGUuZm9udEZhbWlseT10aGlzLl90ZXh0Rm9udCxhLnN0eWxlLmZvbnRTaXplPXRoaXMuX3RleHRTaXplK1wicHhcIixhLmlubmVySFRNTD1cIkFCQ2pncXxcIjt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2Iuc3R5bGUuZGlzcGxheT1cImlubGluZS1ibG9ja1wiLGIuc3R5bGUud2lkdGg9XCIxcHhcIixiLnN0eWxlLmhlaWdodD1cIjBweFwiO3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7Yy5hcHBlbmRDaGlsZChhKSxjLmFwcGVuZENoaWxkKGIpLGMuc3R5bGUuaGVpZ2h0PVwiMHB4XCIsYy5zdHlsZS5vdmVyZmxvdz1cImhpZGRlblwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYyksYi5zdHlsZS52ZXJ0aWNhbEFsaWduPVwiYmFzZWxpbmVcIjt2YXIgZT1kKGIpLGY9ZChhKSxnPWVbMV0tZlsxXTtiLnN0eWxlLnZlcnRpY2FsQWxpZ249XCJib3R0b21cIixlPWQoYiksZj1kKGEpO3ZhciBoPWVbMV0tZlsxXSxpPWgtZztyZXR1cm4gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChjKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QXNjZW50XCIsZyksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dERlc2NlbnRcIixpKSx0aGlzfSxiLmV4cG9ydHM9ZS5SZW5kZXJlcn0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0fV0sMjg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpLGU9YShcIi4vY29uc3RhbnRzXCIpLGY9YShcIi4uL2ltYWdlL2ZpbHRlcnNcIik7YShcIi4vcDUuUmVuZGVyZXJcIik7dmFyIGc9XCJyZ2JhKDAsMCwwLDApXCI7ZC5SZW5kZXJlcjJEPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZC5SZW5kZXJlci5jYWxsKHRoaXMsYSxiLGMpLHRoaXMuZHJhd2luZ0NvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcImRyYXdpbmdDb250ZXh0XCIsdGhpcy5kcmF3aW5nQ29udGV4dCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQuUmVuZGVyZXIucHJvdG90eXBlKSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9hcHBseURlZmF1bHRzPWZ1bmN0aW9uKCl7dGhpcy5fY2FjaGVkRmlsbFN0eWxlPXRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlPXZvaWQgMCx0aGlzLl9zZXRGaWxsKGUuX0RFRkFVTFRfRklMTCksdGhpcy5fc2V0U3Ryb2tlKGUuX0RFRkFVTFRfU1RST0tFKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVDYXA9ZS5ST1VORCx0aGlzLmRyYXdpbmdDb250ZXh0LmZvbnQ9XCJub3JtYWwgMTJweCBzYW5zLXNlcmlmXCJ9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGEsYil7ZC5SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcyxhLGIpLHRoaXMuZHJhd2luZ0NvbnRleHQuc2NhbGUodGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSx0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5KX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5iYWNrZ3JvdW5kPWZ1bmN0aW9uKCl7aWYodGhpcy5kcmF3aW5nQ29udGV4dC5zYXZlKCksdGhpcy5yZXNldE1hdHJpeCgpLGFyZ3VtZW50c1swXWluc3RhbmNlb2YgZC5JbWFnZSl0aGlzLl9wSW5zdC5pbWFnZShhcmd1bWVudHNbMF0sMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpO2Vsc2V7dmFyIGE9dGhpcy5fZ2V0RmlsbCgpLGI9dGhpcy5fcEluc3QuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKSxjPWIudG9TdHJpbmcoKTt0aGlzLl9zZXRGaWxsKGMpLHRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFJlY3QoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuX3NldEZpbGwoYSl9dGhpcy5kcmF3aW5nQ29udGV4dC5yZXN0b3JlKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5kcmF3aW5nQ29udGV4dC5zYXZlKCksdGhpcy5yZXNldE1hdHJpeCgpLHRoaXMuZHJhd2luZ0NvbnRleHQuY2xlYXJSZWN0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRyYXdpbmdDb250ZXh0LnJlc3RvcmUoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX3BJbnN0LmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyk7dGhpcy5fc2V0RmlsbChhLnRvU3RyaW5nKCkpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnN0cm9rZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX3BJbnN0LmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyk7dGhpcy5fc2V0U3Ryb2tlKGEudG9TdHJpbmcoKSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oYSxiLGMsZSxmLGcsaCxpLGope3ZhciBrO3RyeXt0aGlzLl90aW50JiYoZC5NZWRpYUVsZW1lbnQmJmEgaW5zdGFuY2VvZiBkLk1lZGlhRWxlbWVudCYmYS5sb2FkUGl4ZWxzKCksYS5jYW52YXMmJihrPXRoaXMuX2dldFRpbnRlZEltYWdlQ2FudmFzKGEpKSksa3x8KGs9YS5jYW52YXN8fGEuZWx0KTt2YXIgbD0xO2Eud2lkdGgmJmEud2lkdGg+MCYmKGw9ay53aWR0aC9hLndpZHRoKSx0aGlzLmRyYXdpbmdDb250ZXh0LmRyYXdJbWFnZShrLGwqYixsKmMsbCplLGwqZixnLGgsaSxqKX1jYXRjaChhKXtpZihcIk5TX0VSUk9SX05PVF9BVkFJTEFCTEVcIiE9PWEubmFtZSl0aHJvdyBhfXRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fZ2V0VGludGVkSW1hZ2VDYW52YXM9ZnVuY3Rpb24oYSl7aWYoIWEuY2FudmFzKXJldHVybiBhO3ZhciBiPWYuX3RvUGl4ZWxzKGEuY2FudmFzKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7Yy53aWR0aD1hLmNhbnZhcy53aWR0aCxjLmhlaWdodD1hLmNhbnZhcy5oZWlnaHQ7Zm9yKHZhciBkPWMuZ2V0Q29udGV4dChcIjJkXCIpLGU9ZC5jcmVhdGVJbWFnZURhdGEoYS5jYW52YXMud2lkdGgsYS5jYW52YXMuaGVpZ2h0KSxnPWUuZGF0YSxoPTA7aDxiLmxlbmd0aDtoKz00KXt2YXIgaT1iW2hdLGo9YltoKzFdLGs9YltoKzJdLGw9YltoKzNdO2dbaF09aSp0aGlzLl90aW50WzBdLzI1NSxnW2grMV09aip0aGlzLl90aW50WzFdLzI1NSxnW2grMl09ayp0aGlzLl90aW50WzJdLzI1NSxnW2grM109bCp0aGlzLl90aW50WzNdLzI1NX1yZXR1cm4gZC5wdXRJbWFnZURhdGEoZSwwLDApLGN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYmxlbmRNb2RlPWZ1bmN0aW9uKGEpe3RoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWF9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYmxlbmQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbixiPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdLGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDAsYXJndW1lbnRzLmxlbmd0aC0xKTt0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1iLHRoaXMuX3BJbnN0P3RoaXMuX3BJbnN0LmNvcHkuYXBwbHkodGhpcy5fcEluc3QsYyk6dGhpcy5jb3B5LmFwcGx5KHRoaXMsYyksdGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGEsYixjLGUsZixnLGgsaSxqO2lmKDk9PT1hcmd1bWVudHMubGVuZ3RoKWE9YXJndW1lbnRzWzBdLGI9YXJndW1lbnRzWzFdLGM9YXJndW1lbnRzWzJdLGU9YXJndW1lbnRzWzNdLGY9YXJndW1lbnRzWzRdLGc9YXJndW1lbnRzWzVdLGg9YXJndW1lbnRzWzZdLGk9YXJndW1lbnRzWzddLGo9YXJndW1lbnRzWzhdO2Vsc2V7aWYoOCE9PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiU2lnbmF0dXJlIG5vdCBzdXBwb3J0ZWRcIik7YT10aGlzLl9wSW5zdCxiPWFyZ3VtZW50c1swXSxjPWFyZ3VtZW50c1sxXSxlPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXSxnPWFyZ3VtZW50c1s0XSxoPWFyZ3VtZW50c1s1XSxpPWFyZ3VtZW50c1s2XSxqPWFyZ3VtZW50c1s3XX1kLlJlbmRlcmVyMkQuX2NvcHlIZWxwZXIodGhpcyxhLGIsYyxlLGYsZyxoLGksaiksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQuX2NvcHlIZWxwZXI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGksail7Yi5sb2FkUGl4ZWxzKCk7dmFyIGs9Yi5jYW52YXMud2lkdGgvYi53aWR0aDthLmRyYXdpbmdDb250ZXh0LmRyYXdJbWFnZShiLmNhbnZhcyxrKmMsaypkLGsqZSxrKmYsZyxoLGksail9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEsYixjLGUpe2lmKHZvaWQgMD09PWMmJnZvaWQgMD09PWUmJih2b2lkIDA9PT1hJiZ2b2lkIDA9PT1iPyhhPWI9MCxjPXRoaXMud2lkdGgsZT10aGlzLmhlaWdodCk6Yz1lPTEpLGErYzwwfHxiK2U8MHx8YT49dGhpcy53aWR0aHx8Yj49dGhpcy5oZWlnaHQpcmV0dXJuWzAsMCwwLDI1NV07dmFyIGY9dGhpcy5fcEluc3R8fHRoaXMsZz1mLl9waXhlbERlbnNpdHk7YT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihiKSxjPU1hdGguZmxvb3IoYyksZT1NYXRoLmZsb29yKGUpO3ZhciBoPWEqZyxpPWIqZztpZigxIT09Y3x8MSE9PWV8fHRoaXMgaW5zdGFuY2VvZiBkLlJlbmRlcmVyR0wpe3ZhciBqPU1hdGgubWluKGMsZi53aWR0aCksaz1NYXRoLm1pbihlLGYuaGVpZ2h0KSxsPWoqZyxtPWsqZyxuPW5ldyBkLkltYWdlKGosayk7cmV0dXJuIG4uY2FudmFzLmdldENvbnRleHQoXCIyZFwiKS5kcmF3SW1hZ2UodGhpcy5jYW52YXMsaCxpLGwsbSwwLDAsaixrKSxufXZhciBvLHA7cmV0dXJuIGYuX3BpeGVsc0RpcnR5PyhvPXRoaXMuZHJhd2luZ0NvbnRleHQuZ2V0SW1hZ2VEYXRhKGgsaSwxLDEpLmRhdGEscD0wKToobz1mLnBpeGVscyxwPTQqKGgraSp0aGlzLndpZHRoKmcpKSxbb1twKzBdLG9bcCsxXSxvW3ArMl0sb1twKzNdXX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5sb2FkUGl4ZWxzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcEluc3R8fHRoaXM7aWYoYS5fcGl4ZWxzRGlydHkpe2EuX3BpeGVsc0RpcnR5PSExO3ZhciBiPWEuX3BpeGVsRGVuc2l0eSxjPXRoaXMud2lkdGgqYixkPXRoaXMuaGVpZ2h0KmIsZT10aGlzLmRyYXdpbmdDb250ZXh0LmdldEltYWdlRGF0YSgwLDAsYyxkKTthLl9zZXRQcm9wZXJ0eShcImltYWdlRGF0YVwiLGUpLGEuX3NldFByb3BlcnR5KFwicGl4ZWxzXCIsZS5kYXRhKX19LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXthPU1hdGguZmxvb3IoYSksYj1NYXRoLmZsb29yKGIpO3ZhciBlPXRoaXMuX3BJbnN0fHx0aGlzO2lmKGMgaW5zdGFuY2VvZiBkLkltYWdlKXRoaXMuZHJhd2luZ0NvbnRleHQuc2F2ZSgpLHRoaXMuZHJhd2luZ0NvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx0aGlzLmRyYXdpbmdDb250ZXh0LnNjYWxlKGUuX3BpeGVsRGVuc2l0eSxlLl9waXhlbERlbnNpdHkpLHRoaXMuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGMuY2FudmFzLGEsYiksdGhpcy5kcmF3aW5nQ29udGV4dC5yZXN0b3JlKCksZS5fcGl4ZWxzRGlydHk9ITA7ZWxzZXt2YXIgZj0wLGc9MCxoPTAsaT0wLGo9NCooYiplLl9waXhlbERlbnNpdHkqKHRoaXMud2lkdGgqZS5fcGl4ZWxEZW5zaXR5KSthKmUuX3BpeGVsRGVuc2l0eSk7aWYoZS5pbWFnZURhdGEmJiFlLl9waXhlbHNEaXJ0eXx8ZS5sb2FkUGl4ZWxzLmNhbGwoZSksXCJudW1iZXJcIj09dHlwZW9mIGMpajxlLnBpeGVscy5sZW5ndGgmJihmPWMsZz1jLGg9YyxpPTI1NSk7ZWxzZSBpZihjIGluc3RhbmNlb2YgQXJyYXkpe2lmKGMubGVuZ3RoPDQpdGhyb3cgbmV3IEVycm9yKFwicGl4ZWwgYXJyYXkgbXVzdCBiZSBvZiB0aGUgZm9ybSBbUiwgRywgQiwgQV1cIik7ajxlLnBpeGVscy5sZW5ndGgmJihmPWNbMF0sZz1jWzFdLGg9Y1syXSxpPWNbM10pfWVsc2UgYyBpbnN0YW5jZW9mIGQuQ29sb3ImJmo8ZS5waXhlbHMubGVuZ3RoJiYoZj1jLmxldmVsc1swXSxnPWMubGV2ZWxzWzFdLGg9Yy5sZXZlbHNbMl0saT1jLmxldmVsc1szXSk7Zm9yKHZhciBrPTA7azxlLl9waXhlbERlbnNpdHk7aysrKWZvcih2YXIgbD0wO2w8ZS5fcGl4ZWxEZW5zaXR5O2wrKylqPTQqKChiKmUuX3BpeGVsRGVuc2l0eStsKSp0aGlzLndpZHRoKmUuX3BpeGVsRGVuc2l0eSsoYSplLl9waXhlbERlbnNpdHkraykpLGUucGl4ZWxzW2pdPWYsZS5waXhlbHNbaisxXT1nLGUucGl4ZWxzW2orMl09aCxlLnBpeGVsc1tqKzNdPWl9fSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnVwZGF0ZVBpeGVscz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLl9wSW5zdHx8dGhpcyxmPWUuX3BpeGVsRGVuc2l0eTt2b2lkIDA9PT1hJiZ2b2lkIDA9PT1iJiZ2b2lkIDA9PT1jJiZ2b2lkIDA9PT1kJiYoYT0wLGI9MCxjPXRoaXMud2lkdGgsZD10aGlzLmhlaWdodCksYyo9ZixkKj1mLHRoaXMuZHJhd2luZ0NvbnRleHQucHV0SW1hZ2VEYXRhKGUuaW1hZ2VEYXRhLGEsYiwwLDAsYyxkKSwwPT09YSYmMD09PWImJmM9PT10aGlzLndpZHRoJiZkPT09dGhpcy5oZWlnaHR8fChlLl9waXhlbHNEaXJ0eT0hMCl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2FjdXRlQXJjVG9CZXppZXI9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLzIsZD1NYXRoLmNvcyhjKSxlPU1hdGguc2luKGMpLGY9MS9NYXRoLnRhbihjKSxnPWErYyxoPU1hdGguY29zKGcpLGk9TWF0aC5zaW4oZyksaj0oNC1kKS8zLGs9ZSsoZC1qKSpmO3JldHVybntheDpNYXRoLmNvcyhhKSxheTpNYXRoLnNpbihhKSxieDpqKmgrayppLGJ5OmoqaS1rKmgsY3g6aipoLWsqaSxjeTpqKmkraypoLGR4Ok1hdGguY29zKGErYiksZHk6TWF0aC5zaW4oYStiKX19LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYXJjPWZ1bmN0aW9uKGEsYixjLGQsZixnLGgpe3ZhciBpPXRoaXMuZHJhd2luZ0NvbnRleHQsaj1jLzIsaz1kLzIsbD0xZS01LG09MCxuPVtdO2ZvcihhKz1qLGIrPWs7Zy1mPmw7KW09TWF0aC5taW4oZy1mLGUuSEFMRl9QSSksbi5wdXNoKHRoaXMuX2FjdXRlQXJjVG9CZXppZXIoZixtKSksZis9bTtyZXR1cm4gdGhpcy5fZG9GaWxsJiYoaS5iZWdpblBhdGgoKSxuLmZvckVhY2goZnVuY3Rpb24oYyxkKXswPT09ZCYmaS5tb3ZlVG8oYStjLmF4KmosYitjLmF5KmspLGkuYmV6aWVyQ3VydmVUbyhhK2MuYngqaixiK2MuYnkqayxhK2MuY3gqaixiK2MuY3kqayxhK2MuZHgqaixiK2MuZHkqayl9KSxoIT09ZS5QSUUmJm51bGwhPWh8fGkubGluZVRvKGEsYiksaS5jbG9zZVBhdGgoKSxpLmZpbGwoKSksdGhpcy5fZG9TdHJva2UmJihpLmJlZ2luUGF0aCgpLG4uZm9yRWFjaChmdW5jdGlvbihjLGQpezA9PT1kJiZpLm1vdmVUbyhhK2MuYXgqaixiK2MuYXkqayksaS5iZXppZXJDdXJ2ZVRvKGErYy5ieCpqLGIrYy5ieSprLGErYy5jeCpqLGIrYy5jeSprLGErYy5keCpqLGIrYy5keSprKX0pLGg9PT1lLlBJRT8oaS5saW5lVG8oYSxiKSxpLmNsb3NlUGF0aCgpKTpoPT09ZS5DSE9SRCYmaS5jbG9zZVBhdGgoKSxpLnN0cm9rZSgpKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmVsbGlwc2U9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kcmF3aW5nQ29udGV4dCxjPXRoaXMuX2RvRmlsbCxkPXRoaXMuX2RvU3Ryb2tlLGU9YVswXSxmPWFbMV0saD1hWzJdLGk9YVszXTtpZihjJiYhZCl7aWYodGhpcy5fZ2V0RmlsbCgpPT09ZylyZXR1cm4gdGhpc31lbHNlIGlmKCFjJiZkJiZ0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7dmFyIGo9LjU1MjI4NDc0OTgsaz1oLzIqaixsPWkvMipqLG09ZStoLG49ZitpLG89ZStoLzIscD1mK2kvMjtiLmJlZ2luUGF0aCgpLGIubW92ZVRvKGUscCksYi5iZXppZXJDdXJ2ZVRvKGUscC1sLG8tayxmLG8sZiksYi5iZXppZXJDdXJ2ZVRvKG8rayxmLG0scC1sLG0scCksYi5iZXppZXJDdXJ2ZVRvKG0scCtsLG8rayxuLG8sbiksYi5iZXppZXJDdXJ2ZVRvKG8tayxuLGUscCtsLGUscCksYi5jbG9zZVBhdGgoKSxjJiZiLmZpbGwoKSxkJiZiLnN0cm9rZSgpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmxpbmU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5kcmF3aW5nQ29udGV4dDtyZXR1cm4gdGhpcy5fZG9TdHJva2U/dGhpcy5fZ2V0U3Ryb2tlKCk9PT1nP3RoaXM6KGUubGluZVdpZHRoJTI9PTEmJmUudHJhbnNsYXRlKC41LC41KSxlLmJlZ2luUGF0aCgpLGUubW92ZVRvKGEsYiksZS5saW5lVG8oYyxkKSxlLnN0cm9rZSgpLGUubGluZVdpZHRoJTI9PTEmJmUudHJhbnNsYXRlKC0uNSwtLjUpLHRoaXMpOnRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmRyYXdpbmdDb250ZXh0O2lmKCF0aGlzLl9kb1N0cm9rZSlyZXR1cm4gdGhpcztpZih0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7dmFyIGQ9dGhpcy5fZ2V0U3Ryb2tlKCksZj10aGlzLl9nZXRGaWxsKCk7YT1NYXRoLnJvdW5kKGEpLGI9TWF0aC5yb3VuZChiKSx0aGlzLl9zZXRGaWxsKGQpLGMubGluZVdpZHRoPjE/KGMuYmVnaW5QYXRoKCksYy5hcmMoYSxiLGMubGluZVdpZHRoLzIsMCxlLlRXT19QSSwhMSksYy5maWxsKCkpOmMuZmlsbFJlY3QoYSxiLDEsMSksdGhpcy5fc2V0RmlsbChmKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5xdWFkPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGgsaSl7dmFyIGo9dGhpcy5kcmF3aW5nQ29udGV4dCxrPXRoaXMuX2RvRmlsbCxsPXRoaXMuX2RvU3Ryb2tlO2lmKGsmJiFsKXtpZih0aGlzLl9nZXRGaWxsKCk9PT1nKXJldHVybiB0aGlzfWVsc2UgaWYoIWsmJmwmJnRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpcztyZXR1cm4gai5iZWdpblBhdGgoKSxqLm1vdmVUbyhhLGIpLGoubGluZVRvKGMsZCksai5saW5lVG8oZSxmKSxqLmxpbmVUbyhoLGkpLGouY2xvc2VQYXRoKCksayYmai5maWxsKCksbCYmai5zdHJva2UoKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnJlY3Q9ZnVuY3Rpb24oYSl7dmFyIGI9YVswXSxjPWFbMV0sZD1hWzJdLGU9YVszXSxmPWFbNF0saD1hWzVdLGk9YVs2XSxqPWFbN10saz10aGlzLmRyYXdpbmdDb250ZXh0LGw9dGhpcy5fZG9GaWxsLG09dGhpcy5fZG9TdHJva2U7aWYobCYmIW0pe2lmKHRoaXMuX2dldEZpbGwoKT09PWcpcmV0dXJuIHRoaXN9ZWxzZSBpZighbCYmbSYmdGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO2lmKHRoaXMuX2RvU3Ryb2tlJiZrLmxpbmVXaWR0aCUyPT0xJiZrLnRyYW5zbGF0ZSguNSwuNSksay5iZWdpblBhdGgoKSx2b2lkIDA9PT1mKWsucmVjdChiLGMsZCxlKTtlbHNle3ZvaWQgMD09PWgmJihoPWYpLHZvaWQgMD09PWkmJihpPWgpLHZvaWQgMD09PWomJihqPWkpO3ZhciBuPWQvMixvPWUvMjtkPDIqZiYmKGY9biksZTwyKmYmJihmPW8pLGQ8MipoJiYoaD1uKSxlPDIqaCYmKGg9byksZDwyKmkmJihpPW4pLGU8MippJiYoaT1vKSxkPDIqaiYmKGo9biksZTwyKmomJihqPW8pLGsuYmVnaW5QYXRoKCksay5tb3ZlVG8oYitmLGMpLGsuYXJjVG8oYitkLGMsYitkLGMrZSxoKSxrLmFyY1RvKGIrZCxjK2UsYixjK2UsaSksay5hcmNUbyhiLGMrZSxiLGMsaiksay5hcmNUbyhiLGMsYitkLGMsZiksay5jbG9zZVBhdGgoKX1yZXR1cm4gdGhpcy5fZG9GaWxsJiZrLmZpbGwoKSx0aGlzLl9kb1N0cm9rZSYmay5zdHJva2UoKSx0aGlzLl9kb1N0cm9rZSYmay5saW5lV2lkdGglMj09MSYmay50cmFuc2xhdGUoLS41LC0uNSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS50cmlhbmdsZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmRyYXdpbmdDb250ZXh0LGM9dGhpcy5fZG9GaWxsLGQ9dGhpcy5fZG9TdHJva2UsZT1hWzBdLGY9YVsxXSxoPWFbMl0saT1hWzNdLGo9YVs0XSxrPWFbNV07aWYoYyYmIWQpe2lmKHRoaXMuX2dldEZpbGwoKT09PWcpcmV0dXJuIHRoaXN9ZWxzZSBpZighYyYmZCYmdGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO2IuYmVnaW5QYXRoKCksYi5tb3ZlVG8oZSxmKSxiLmxpbmVUbyhoLGkpLGIubGluZVRvKGosayksYi5jbG9zZVBhdGgoKSxjJiZiLmZpbGwoKSxkJiZiLnN0cm9rZSgpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmVuZFNoYXBlPWZ1bmN0aW9uKGEsYixjLGQsZixnLGgpe2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gdGhpcztpZighdGhpcy5fZG9TdHJva2UmJiF0aGlzLl9kb0ZpbGwpcmV0dXJuIHRoaXM7dmFyIGksaj1hPT09ZS5DTE9TRTtqJiYhZyYmYi5wdXNoKGJbMF0pO3ZhciBrLGwsbT1iLmxlbmd0aDtpZighY3x8aCE9PWUuUE9MWUdPTiYmbnVsbCE9PWgpaWYoIWR8fGghPT1lLlBPTFlHT04mJm51bGwhPT1oKWlmKCFmfHxoIT09ZS5QT0xZR09OJiZudWxsIT09aClpZihoPT09ZS5QT0lOVFMpZm9yKGs9MDtrPG07aysrKWk9YltrXSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGlbNl0pLHRoaXMuX3BJbnN0LnBvaW50KGlbMF0saVsxXSk7ZWxzZSBpZihoPT09ZS5MSU5FUylmb3Ioaz0wO2srMTxtO2srPTIpaT1iW2tdLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzFdWzZdKSx0aGlzLl9wSW5zdC5saW5lKGlbMF0saVsxXSxiW2srMV1bMF0sYltrKzFdWzFdKTtlbHNlIGlmKGg9PT1lLlRSSUFOR0xFUylmb3Ioaz0wO2srMjxtO2srPTMpaT1iW2tdLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oaVswXSxpWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srMV1bMF0sYltrKzFdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srMl1bMF0sYltrKzJdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2RvRmlsbCYmKHRoaXMuX3BJbnN0LmZpbGwoYltrKzJdWzVdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGwoKSksdGhpcy5fZG9TdHJva2UmJih0aGlzLl9wSW5zdC5zdHJva2UoYltrKzJdWzZdKSx0aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZSgpKTtlbHNlIGlmKGg9PT1lLlRSSUFOR0xFX1NUUklQKWZvcihrPTA7aysxPG07aysrKWk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJbaysxXVswXSxiW2srMV1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSksdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srMV1bNl0pLFxudGhpcy5fZG9GaWxsJiZ0aGlzLl9wSW5zdC5maWxsKGJbaysxXVs1XSksaysyPG0mJih0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srMl1bMF0sYltrKzJdWzFdKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbaysyXVs2XSksdGhpcy5fZG9GaWxsJiZ0aGlzLl9wSW5zdC5maWxsKGJbaysyXVs1XSkpLHRoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCk7ZWxzZSBpZihoPT09ZS5UUklBTkdMRV9GQU4pe2lmKG0+Mil7Zm9yKHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksaz0yO2s8bTtrKyspaT1iW2tdLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJbMF1bMF0sYlswXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrLTFdWzBdLGJbay0xXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiWzBdWzBdLGJbMF1bMV0pLGs8bS0xJiYodGhpcy5fZG9GaWxsJiZpWzVdIT09YltrKzFdWzVdfHx0aGlzLl9kb1N0cm9rZSYmaVs2XSE9PWJbaysxXVs2XSkmJih0aGlzLl9kb0ZpbGwmJih0aGlzLl9wSW5zdC5maWxsKGlbNV0pLHRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbCgpLHRoaXMuX3BJbnN0LmZpbGwoYltrKzFdWzVdKSksdGhpcy5fZG9TdHJva2UmJih0aGlzLl9wSW5zdC5zdHJva2UoaVs2XSksdGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2UoKSx0aGlzLl9wSW5zdC5zdHJva2UoYltrKzFdWzZdKSksdGhpcy5kcmF3aW5nQ29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpKTt0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfX1lbHNlIGlmKGg9PT1lLlFVQURTKWZvcihrPTA7ayszPG07ays9NCl7Zm9yKGk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGlbMF0saVsxXSksbD0xO2w8NDtsKyspdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrK2xdWzBdLGJbaytsXVsxXSk7dGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSx0aGlzLl9kb0ZpbGwmJnRoaXMuX3BJbnN0LmZpbGwoYltrKzNdWzVdKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbayszXVs2XSksdGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNlIGlmKGg9PT1lLlFVQURfU1RSSVApe2lmKG0+Mylmb3Ioaz0wO2srMTxtO2srPTIpaT1iW2tdLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksayszPG0/KHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJbaysyXVswXSxiW2srMl1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzFdWzBdLGJbaysxXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzNdWzBdLGJbayszXVsxXSksdGhpcy5fZG9GaWxsJiZ0aGlzLl9wSW5zdC5maWxsKGJbayszXVs1XSksdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srM11bNl0pKToodGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oaVswXSxpWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srMV1bMF0sYltrKzFdWzFdKSksdGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNle2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJbMF1bMF0sYlswXVsxXSksaz0xO2s8bTtrKyspaT1iW2tdLGkuaXNWZXJ0JiYoaS5tb3ZlVG8/dGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oaVswXSxpWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pKTt0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2V7Zm9yKHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksaz0wO2s8bTtrKyspYltrXS5pc1ZlcnQ/YltrXS5tb3ZlVG8/dGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oWzBdLGJba11bMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJba11bMF0sYltrXVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKGJba11bMF0sYltrXVsxXSxiW2tdWzJdLGJba11bM10pO3RoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZXtmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSxrPTA7azxtO2srKyliW2tdLmlzVmVydD9iW2tdLm1vdmVUbz90aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiW2tdWzBdLGJba11bMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJba11bMF0sYltrXVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5iZXppZXJDdXJ2ZVRvKGJba11bMF0sYltrXVsxXSxiW2tdWzJdLGJba11bM10sYltrXVs0XSxiW2tdWzVdKTt0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2UgaWYobT4zKXt2YXIgbj1bXSxvPTEtdGhpcy5fY3VydmVUaWdodG5lc3M7Zm9yKHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYlsxXVswXSxiWzFdWzFdKSxrPTE7aysyPG07aysrKWk9YltrXSxuWzBdPVtpWzBdLGlbMV1dLG5bMV09W2lbMF0rKG8qYltrKzFdWzBdLW8qYltrLTFdWzBdKS82LGlbMV0rKG8qYltrKzFdWzFdLW8qYltrLTFdWzFdKS82XSxuWzJdPVtiW2srMV1bMF0rKG8qYltrXVswXS1vKmJbaysyXVswXSkvNixiW2srMV1bMV0rKG8qYltrXVsxXS1vKmJbaysyXVsxXSkvNl0sblszXT1bYltrKzFdWzBdLGJbaysxXVsxXV0sdGhpcy5kcmF3aW5nQ29udGV4dC5iZXppZXJDdXJ2ZVRvKG5bMV1bMF0sblsxXVsxXSxuWzJdWzBdLG5bMl1bMV0sblszXVswXSxuWzNdWzFdKTtqJiZ0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srMV1bMF0sYltrKzFdWzFdKSx0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfXJldHVybiBjPSExLGQ9ITEsZj0hMSxnPSExLGomJmIucG9wKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUubm9TbW9vdGg9ZnVuY3Rpb24oKXtyZXR1cm5cImltYWdlU21vb3RoaW5nRW5hYmxlZFwiaW4gdGhpcy5kcmF3aW5nQ29udGV4dCYmKHRoaXMuZHJhd2luZ0NvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSExKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNtb290aD1mdW5jdGlvbigpe3JldHVyblwiaW1hZ2VTbW9vdGhpbmdFbmFibGVkXCJpbiB0aGlzLmRyYXdpbmdDb250ZXh0JiYodGhpcy5kcmF3aW5nQ29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITApLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc3Ryb2tlQ2FwPWZ1bmN0aW9uKGEpe3JldHVybiBhIT09ZS5ST1VORCYmYSE9PWUuU1FVQVJFJiZhIT09ZS5QUk9KRUNUfHwodGhpcy5kcmF3aW5nQ29udGV4dC5saW5lQ2FwPWEpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc3Ryb2tlSm9pbj1mdW5jdGlvbihhKXtyZXR1cm4gYSE9PWUuUk9VTkQmJmEhPT1lLkJFVkVMJiZhIT09ZS5NSVRFUnx8KHRoaXMuZHJhd2luZ0NvbnRleHQubGluZUpvaW49YSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zdHJva2VXZWlnaHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVdpZHRoPXZvaWQgMD09PWF8fDA9PT1hPzFlLTQ6YSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9nZXRGaWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhY2hlZEZpbGxTdHlsZXx8KHRoaXMuX2NhY2hlZEZpbGxTdHlsZT10aGlzLmRyYXdpbmdDb250ZXh0LmZpbGxTdHlsZSksdGhpcy5fY2FjaGVkRmlsbFN0eWxlfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9zZXRGaWxsPWZ1bmN0aW9uKGEpe2EhPT10aGlzLl9jYWNoZWRGaWxsU3R5bGUmJih0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGxTdHlsZT1hLHRoaXMuX2NhY2hlZEZpbGxTdHlsZT1hKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fZ2V0U3Ryb2tlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlfHwodGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGU9dGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2VTdHlsZSksdGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGV9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX3NldFN0cm9rZT1mdW5jdGlvbihhKXthIT09dGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGUmJih0aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZVN0eWxlPWEsdGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGU9YSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYmV6aWVyPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCl7cmV0dXJuIHRoaXMuX3BJbnN0LmJlZ2luU2hhcGUoKSx0aGlzLl9wSW5zdC52ZXJ0ZXgoYSxiKSx0aGlzLl9wSW5zdC5iZXppZXJWZXJ0ZXgoYyxkLGUsZixnLGgpLHRoaXMuX3BJbnN0LmVuZFNoYXBlKCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3JldHVybiB0aGlzLl9wSW5zdC5iZWdpblNoYXBlKCksdGhpcy5fcEluc3QuY3VydmVWZXJ0ZXgoYSxiKSx0aGlzLl9wSW5zdC5jdXJ2ZVZlcnRleChjLGQpLHRoaXMuX3BJbnN0LmN1cnZlVmVydGV4KGUsZiksdGhpcy5fcEluc3QuY3VydmVWZXJ0ZXgoZyxoKSx0aGlzLl9wSW5zdC5lbmRTaGFwZSgpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2RvRmlsbFN0cm9rZUNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5fZG9GaWxsJiZ0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGwoKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2UoKSx0aGlzLmRyYXdpbmdDb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5kcmF3aW5nQ29udGV4dC50cmFuc2Zvcm0oYSxiLGMsZCxlLGYpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnJlc2V0TWF0cml4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx0aGlzLmRyYXdpbmdDb250ZXh0LnNjYWxlKHRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksdGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24oYSl7dGhpcy5kcmF3aW5nQ29udGV4dC5yb3RhdGUoYSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC5zY2FsZShhLGIpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc2hlYXJYPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnRyYW5zZm9ybSgxLDAsTWF0aC50YW4oYSksMSwwLDApLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc2hlYXJZPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnRyYW5zZm9ybSgxLE1hdGgudGFuKGEpLDAsMSwwLDApLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3RvciYmKGI9YS55LGE9YS54KSx0aGlzLmRyYXdpbmdDb250ZXh0LnRyYW5zbGF0ZShhLGIpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudGV4dD1mdW5jdGlvbihhLGIsYyxmLGcpe3ZhciBoO3ZvaWQgMCE9PWYmJnZvaWQgMCE9PWcmJnRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPT09ZS5CQVNFTElORSYmKGg9ITAsdGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QmFzZWxpbmU9ZS5UT1ApO3ZhciBpPWQuUmVuZGVyZXIucHJvdG90eXBlLnRleHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBoJiYodGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QmFzZWxpbmU9ZS5CQVNFTElORSksaX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fcmVuZGVyVGV4dD1mdW5jdGlvbihhLGIsYyxkLGYpe2lmKCEoZD49ZikpcmV0dXJuIGEucHVzaCgpLHRoaXMuX2lzT3BlblR5cGUoKT90aGlzLl90ZXh0Rm9udC5fcmVuZGVyUGF0aChiLGMsZCx7cmVuZGVyZXI6dGhpc30pOih0aGlzLl9kb1N0cm9rZSYmdGhpcy5fc3Ryb2tlU2V0JiZ0aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZVRleHQoYixjLGQpLHRoaXMuX2RvRmlsbCYmKHRoaXMuX2ZpbGxTZXR8fHRoaXMuX3NldEZpbGwoZS5fREVGQVVMVF9URVhUX0ZJTEwpLHRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFRleHQoYixjLGQpKSksYS5wb3AoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsYX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS50ZXh0V2lkdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2lzT3BlblR5cGUoKT90aGlzLl90ZXh0Rm9udC5fdGV4dFdpZHRoKGEsdGhpcy5fdGV4dFNpemUpOnRoaXMuZHJhd2luZ0NvbnRleHQubWVhc3VyZVRleHQoYSkud2lkdGh9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2FwcGx5VGV4dFByb3BlcnRpZXM9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuX3BJbnN0O3JldHVybiB0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QXNjZW50XCIsbnVsbCksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dERlc2NlbnRcIixudWxsKSxhPXRoaXMuX3RleHRGb250LHRoaXMuX2lzT3BlblR5cGUoKSYmKGE9dGhpcy5fdGV4dEZvbnQuZm9udC5mYW1pbHlOYW1lLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRTdHlsZVwiLHRoaXMuX3RleHRGb250LmZvbnQuc3R5bGVOYW1lKSksdGhpcy5kcmF3aW5nQ29udGV4dC5mb250PSh0aGlzLl90ZXh0U3R5bGV8fFwibm9ybWFsXCIpK1wiIFwiKyh0aGlzLl90ZXh0U2l6ZXx8MTIpK1wicHggXCIrKGF8fFwic2Fucy1zZXJpZlwiKSx0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRBbGlnbj10aGlzLl90ZXh0QWxpZ24sdGhpcy5fdGV4dEJhc2VsaW5lPT09ZS5DRU5URVI/dGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QmFzZWxpbmU9ZS5fQ1RYX01JRERMRTp0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT10aGlzLl90ZXh0QmFzZWxpbmUsYn0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQuc2F2ZSgpLGQuUmVuZGVyZXIucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcyl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKGEpe3RoaXMuZHJhd2luZ0NvbnRleHQucmVzdG9yZSgpLHRoaXMuX2NhY2hlZEZpbGxTdHlsZT10aGlzLmRyYXdpbmdDb250ZXh0LmZpbGxTdHlsZSx0aGlzLl9jYWNoZWRTdHJva2VTdHlsZT10aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZVN0eWxlLGQuUmVuZGVyZXIucHJvdG90eXBlLnBvcC5jYWxsKHRoaXMsYSl9LGIuZXhwb3J0cz1kLlJlbmRlcmVyMkR9LHtcIi4uL2ltYWdlL2ZpbHRlcnNcIjo0MixcIi4vY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNCxcIi4vcDUuUmVuZGVyZXJcIjoyN31dLDI5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKSxlPWEoXCIuL2NvbnN0YW50c1wiKTthKFwiLi9wNS5HcmFwaGljc1wiKSxhKFwiLi9wNS5SZW5kZXJlcjJEXCIpLGEoXCIuLi93ZWJnbC9wNS5SZW5kZXJlckdMXCIpO3ZhciBmPVwiZGVmYXVsdENhbnZhczBcIixnPVwicDVDYW52YXNcIjtkLnByb3RvdHlwZS5jcmVhdGVDYW52YXM9ZnVuY3Rpb24oYSxiLGMpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZUNhbnZhc1wiLGFyZ3VtZW50cyk7dmFyIGgsaT1jfHxlLlAyRDtpZihpPT09ZS5XRUJHTCl7aWYoaD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChmKSl7aC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGgpO3ZhciBqPXRoaXMuX3JlbmRlcmVyO3RoaXMuX2VsZW1lbnRzPXRoaXMuX2VsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYSE9PWp9KX1oPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksaC5pZD1mLGguY2xhc3NMaXN0LmFkZChnKX1lbHNlIGlmKHRoaXMuX2RlZmF1bHRHcmFwaGljc0NyZWF0ZWQpaD10aGlzLmNhbnZhcztlbHNle2g9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtmb3IodmFyIGs9MDtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlZmF1bHRDYW52YXNcIitrKTspaysrO2Y9XCJkZWZhdWx0Q2FudmFzXCIrayxoLmlkPWYsaC5jbGFzc0xpc3QuYWRkKGcpfXJldHVybiB0aGlzLl9zZXR1cERvbmV8fChoLmRhdGFzZXQuaGlkZGVuPSEwLGguc3R5bGUudmlzaWJpbGl0eT1cImhpZGRlblwiKSx0aGlzLl91c2VyTm9kZT90aGlzLl91c2VyTm9kZS5hcHBlbmRDaGlsZChoKTpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGgpLGk9PT1lLldFQkdMPyh0aGlzLl9zZXRQcm9wZXJ0eShcIl9yZW5kZXJlclwiLG5ldyBkLlJlbmRlcmVyR0woaCx0aGlzLCEwKSksdGhpcy5fZWxlbWVudHMucHVzaCh0aGlzLl9yZW5kZXJlcikpOnRoaXMuX2RlZmF1bHRHcmFwaGljc0NyZWF0ZWR8fCh0aGlzLl9zZXRQcm9wZXJ0eShcIl9yZW5kZXJlclwiLG5ldyBkLlJlbmRlcmVyMkQoaCx0aGlzLCEwKSksdGhpcy5fZGVmYXVsdEdyYXBoaWNzQ3JlYXRlZD0hMCx0aGlzLl9lbGVtZW50cy5wdXNoKHRoaXMuX3JlbmRlcmVyKSksdGhpcy5fcmVuZGVyZXIucmVzaXplKGEsYiksdGhpcy5fcmVuZGVyZXIuX2FwcGx5RGVmYXVsdHMoKSx0aGlzLl9yZW5kZXJlcn0sZC5wcm90b3R5cGUucmVzaXplQ2FudmFzPWZ1bmN0aW9uKGEsYixjKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyZXNpemVDYW52YXNcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyKXt2YXIgZT17fTtmb3IodmFyIGYgaW4gdGhpcy5kcmF3aW5nQ29udGV4dCl7dmFyIGc9dGhpcy5kcmF3aW5nQ29udGV4dFtmXTtcIm9iamVjdFwiIT10eXBlb2YgZyYmXCJmdW5jdGlvblwiIT10eXBlb2YgZyYmKGVbZl09Zyl9dGhpcy5fcmVuZGVyZXIucmVzaXplKGEsYiksdGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWI7Zm9yKHZhciBoIGluIGUpdHJ5e3RoaXMuZHJhd2luZ0NvbnRleHRbaF09ZVtoXX1jYXRjaChhKXt9Y3x8dGhpcy5yZWRyYXcoKX19LGQucHJvdG90eXBlLm5vQ2FudmFzPWZ1bmN0aW9uKCl7dGhpcy5jYW52YXMmJnRoaXMuY2FudmFzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jYW52YXMpfSxkLnByb3RvdHlwZS5jcmVhdGVHcmFwaGljcz1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZUdyYXBoaWNzXCIsYXJndW1lbnRzKSxuZXcgZC5HcmFwaGljcyhhLGIsYyx0aGlzKX0sZC5wcm90b3R5cGUuYmxlbmRNb2RlPWZ1bmN0aW9uKGEpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJsZW5kTW9kZVwiLGFyZ3VtZW50cyksYSE9PWUuQkxFTkQmJmEhPT1lLkRBUktFU1QmJmEhPT1lLkxJR0hURVNUJiZhIT09ZS5ESUZGRVJFTkNFJiZhIT09ZS5NVUxUSVBMWSYmYSE9PWUuRVhDTFVTSU9OJiZhIT09ZS5TQ1JFRU4mJmEhPT1lLlJFUExBQ0UmJmEhPT1lLk9WRVJMQVkmJmEhPT1lLkhBUkRfTElHSFQmJmEhPT1lLlNPRlRfTElHSFQmJmEhPT1lLkRPREdFJiZhIT09ZS5CVVJOJiZhIT09ZS5BREQmJmEhPT1lLk5PUk1BTCl0aHJvdyBuZXcgRXJyb3IoXCJNb2RlIFwiK2ErXCIgbm90IHJlY29nbml6ZWQuXCIpO3RoaXMuX3JlbmRlcmVyLmJsZW5kTW9kZShhKX0sYi5leHBvcnRzPWR9LHtcIi4uL3dlYmdsL3A1LlJlbmRlcmVyR0xcIjo3NCxcIi4vY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNCxcIi4vcDUuR3JhcGhpY3NcIjoyNixcIi4vcDUuUmVuZGVyZXIyRFwiOjI4fV0sMzA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vbWFpblwiKSxlPWEoXCIuLi9jb25zdGFudHNcIiksZj1hKFwiLi4vaGVscGVyc1wiKTthKFwiLi4vZXJyb3JfaGVscGVyc1wiKSxkLnByb3RvdHlwZS5hcmM9ZnVuY3Rpb24oYSxiLGMsZyxoLGksaixrKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJhcmNcIixhcmd1bWVudHMpLCF0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJiF0aGlzLl9yZW5kZXJlci5fZG9GaWxsKXJldHVybiB0aGlzO2ZvcihoPXRoaXMuX3RvUmFkaWFucyhoKSxpPXRoaXMuX3RvUmFkaWFucyhpKTtoPDA7KWgrPWUuVFdPX1BJO2Zvcig7aTwwOylpKz1lLlRXT19QSTt2b2lkIDAhPT1oJiZ2b2lkIDAhPT1pJiYoaS50b0ZpeGVkKDEwKT09PWgudG9GaXhlZCgxMCl8fE1hdGguYWJzKGktaCk9PT1lLlRXT19QST8oaCU9ZS5UV09fUEksaSU9ZS5UV09fUEksaCs9ZS5UV09fUEkpOk1hdGguYWJzKGktaCk+ZS5UV09fUEkmJihoJT1lLlRXT19QSSxpJT1lLlRXT19QSSxpKz1lLlRXT19QSSkpLGg8PWUuSEFMRl9QST9oPU1hdGguYXRhbihjL2cqTWF0aC50YW4oaCkpOmg+ZS5IQUxGX1BJJiZoPD0zKmUuSEFMRl9QSSYmKGg9TWF0aC5hdGFuKGMvZypNYXRoLnRhbihoKSkrZS5QSSksaTw9ZS5IQUxGX1BJP2k9TWF0aC5hdGFuKGMvZypNYXRoLnRhbihpKSk6aT5lLkhBTEZfUEkmJmk8PTMqZS5IQUxGX1BJJiYoaT1NYXRoLmF0YW4oYy9nKk1hdGgudGFuKGkpKStlLlBJKSxoPmkmJihpKz1lLlRXT19QSSksYz1NYXRoLmFicyhjKSxnPU1hdGguYWJzKGcpO3ZhciBsPWYubW9kZUFkanVzdChhLGIsYyxnLHRoaXMuX3JlbmRlcmVyLl9lbGxpcHNlTW9kZSk7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmFyYyhsLngsbC55LGwudyxsLmgsaCxpLGosayksdGhpc30sZC5wcm90b3R5cGUuZWxsaXBzZT1mdW5jdGlvbihhLGIsYyxlLGcpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImVsbGlwc2VcIixhcmd1bWVudHMpLCF0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJiF0aGlzLl9yZW5kZXJlci5fZG9GaWxsKXJldHVybiB0aGlzO2M8MCYmKGM9TWF0aC5hYnMoYykpLHZvaWQgMD09PWU/ZT1jOmU8MCYmKGU9TWF0aC5hYnMoZSkpO3ZhciBoPWYubW9kZUFkanVzdChhLGIsYyxlLHRoaXMuX3JlbmRlcmVyLl9lbGxpcHNlTW9kZSk7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmVsbGlwc2UoW2gueCxoLnksaC53LGguaCxnXSksdGhpc30sZC5wcm90b3R5cGUubGluZT1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsaW5lXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJnRoaXMuX3JlbmRlcmVyLmxpbmUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwb2ludFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiZ0aGlzLl9yZW5kZXJlci5wb2ludC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLnF1YWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicXVhZFwiLGFyZ3VtZW50cyksKHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZXx8dGhpcy5fcmVuZGVyZXIuX2RvRmlsbCkmJnRoaXMuX3JlbmRlcmVyLnF1YWQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5yZWN0PWZ1bmN0aW9uKCl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicmVjdFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlfHx0aGlzLl9yZW5kZXJlci5fZG9GaWxsKXtmb3IodmFyIGE9Zi5tb2RlQWRqdXN0KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSx0aGlzLl9yZW5kZXJlci5fcmVjdE1vZGUpLGI9W2EueCxhLnksYS53LGEuaF0sYz00O2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYltjXT1hcmd1bWVudHNbY107dGhpcy5fcmVuZGVyZXIucmVjdChiKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUudHJpYW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidHJpYW5nbGVcIixhcmd1bWVudHMpLCh0aGlzLl9yZW5kZXJlci5fZG9TdHJva2V8fHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpJiZ0aGlzLl9yZW5kZXJlci50cmlhbmdsZShhcmd1bWVudHMpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb25zdGFudHNcIjoxOCxcIi4uL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2hlbHBlcnNcIjoyMSxcIi4uL21haW5cIjoyNH1dLDMxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL21haW5cIiksZT1hKFwiLi4vY29uc3RhbnRzXCIpO2QucHJvdG90eXBlLmVsbGlwc2VNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJlbGxpcHNlTW9kZVwiLGFyZ3VtZW50cyksYSE9PWUuQ09STkVSJiZhIT09ZS5DT1JORVJTJiZhIT09ZS5SQURJVVMmJmEhPT1lLkNFTlRFUnx8KHRoaXMuX3JlbmRlcmVyLl9lbGxpcHNlTW9kZT1hKSx0aGlzfSxkLnByb3RvdHlwZS5ub1Ntb290aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5ub1Ntb290aCgpLHRoaXN9LGQucHJvdG90eXBlLnJlY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyZWN0TW9kZVwiLGFyZ3VtZW50cyksYSE9PWUuQ09STkVSJiZhIT09ZS5DT1JORVJTJiZhIT09ZS5SQURJVVMmJmEhPT1lLkNFTlRFUnx8KHRoaXMuX3JlbmRlcmVyLl9yZWN0TW9kZT1hKSx0aGlzfSxkLnByb3RvdHlwZS5zbW9vdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuc21vb3RoKCksdGhpc30sZC5wcm90b3R5cGUuc3Ryb2tlQ2FwPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzdHJva2VDYXBcIixhcmd1bWVudHMpLGEhPT1lLlJPVU5EJiZhIT09ZS5TUVVBUkUmJmEhPT1lLlBST0pFQ1R8fHRoaXMuX3JlbmRlcmVyLnN0cm9rZUNhcChhKSx0aGlzfSxkLnByb3RvdHlwZS5zdHJva2VKb2luPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzdHJva2VKb2luXCIsYXJndW1lbnRzKSxhIT09ZS5ST1VORCYmYSE9PWUuQkVWRUwmJmEhPT1lLk1JVEVSfHx0aGlzLl9yZW5kZXJlci5zdHJva2VKb2luKGEpLHRoaXN9LGQucHJvdG90eXBlLnN0cm9rZVdlaWdodD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3Ryb2tlV2VpZ2h0XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5zdHJva2VXZWlnaHQoYSksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4uL2NvbnN0YW50c1wiOjE4LFwiLi4vbWFpblwiOjI0fV0sMzI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vbWFpblwiKTthKFwiLi4vZXJyb3JfaGVscGVyc1wiKSxkLnByb3RvdHlwZS5iZXppZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmV6aWVyXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2V8fHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGw/KHRoaXMuX3JlbmRlcmVyLmJlemllci5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXMpOnRoaXN9LGQucHJvdG90eXBlLmJlemllckRldGFpbD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmV6aWVyRGV0YWlsXCIsYXJndW1lbnRzKSx0aGlzLl9iZXppZXJEZXRhaWw9YSx0aGlzfSxkLnByb3RvdHlwZS5iZXppZXJQb2ludD1mdW5jdGlvbihhLGIsYyxlLGYpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllclBvaW50XCIsYXJndW1lbnRzKTt2YXIgZz0xLWY7cmV0dXJuIE1hdGgucG93KGcsMykqYSszKk1hdGgucG93KGcsMikqZipiKzMqZypNYXRoLnBvdyhmLDIpKmMrTWF0aC5wb3coZiwzKSplfSxkLnByb3RvdHlwZS5iZXppZXJUYW5nZW50PWZ1bmN0aW9uKGEsYixjLGUsZil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmV6aWVyVGFuZ2VudFwiLGFyZ3VtZW50cyk7dmFyIGc9MS1mO3JldHVybiAzKmUqTWF0aC5wb3coZiwyKS0zKmMqTWF0aC5wb3coZiwyKSs2KmMqZypmLTYqYipnKmYrMypiKk1hdGgucG93KGcsMiktMyphKk1hdGgucG93KGcsMil9LGQucHJvdG90eXBlLmN1cnZlPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJnRoaXMuX3JlbmRlcmVyLmN1cnZlLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUuY3VydmVEZXRhaWw9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlRGV0YWlsXCIsYXJndW1lbnRzKSx0aGlzLl9jdXJ2ZURldGFpbD1hPDM/MzphLHRoaXN9LGQucHJvdG90eXBlLmN1cnZlVGlnaHRuZXNzPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVRpZ2h0bmVzc1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2N1cnZlVGlnaHRuZXNzPWEsdGhpc30sZC5wcm90b3R5cGUuY3VydmVQb2ludD1mdW5jdGlvbihhLGIsYyxlLGYpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlUG9pbnRcIixhcmd1bWVudHMpO3ZhciBnPWYqZipmLGg9ZipmO3JldHVybiBhKigtLjUqZytoLS41KmYpK2IqKDEuNSpnLTIuNSpoKzEpK2MqKC0xLjUqZysyKmgrLjUqZikrZSooLjUqZy0uNSpoKX0sZC5wcm90b3R5cGUuY3VydmVUYW5nZW50PWZ1bmN0aW9uKGEsYixjLGUsZil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVUYW5nZW50XCIsYXJndW1lbnRzKTt2YXIgZz1mKmY7cmV0dXJuIGEqKC0zKmcvMisyKmYtLjUpK2IqKDkqZy8yLTUqZikrYyooLTkqZy8yKzQqZisuNSkrZSooMypnLzItZil9LGIuZXhwb3J0cz1kfSx7XCIuLi9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9tYWluXCI6MjR9XSwzMzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9tYWluXCIpLGU9YShcIi4uL2NvbnN0YW50c1wiKSxmPW51bGwsZz1bXSxoPVtdLGk9ITEsaj0hMSxrPSExLGw9ITEsbT0hMDtkLnByb3RvdHlwZS5iZWdpbkNvbnRvdXI9ZnVuY3Rpb24oKXtyZXR1cm4gaD1bXSxsPSEwLHRoaXN9LGQucHJvdG90eXBlLmJlZ2luU2hhcGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlZ2luU2hhcGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEP3RoaXMuX3JlbmRlcmVyLmJlZ2luU2hhcGUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTooZj1hPT09ZS5QT0lOVFN8fGE9PT1lLkxJTkVTfHxhPT09ZS5UUklBTkdMRVN8fGE9PT1lLlRSSUFOR0xFX0ZBTnx8YT09PWUuVFJJQU5HTEVfU1RSSVB8fGE9PT1lLlFVQURTfHxhPT09ZS5RVUFEX1NUUklQP2E6bnVsbCxnPVtdLGg9W10pLHRoaXN9LGQucHJvdG90eXBlLmJlemllclZlcnRleD1mdW5jdGlvbigpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllclZlcnRleFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhpcy5fcmVuZGVyZXIuYmV6aWVyVmVydGV4LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk7ZWxzZXtpZigwPT09Zy5sZW5ndGgpdGhyb3dcInZlcnRleCgpIG11c3QgYmUgdXNlZCBvbmNlIGJlZm9yZSBjYWxsaW5nIGJlemllclZlcnRleCgpXCI7aT0hMDtmb3IodmFyIGE9W10sYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspYVtiXT1hcmd1bWVudHNbYl07YS5pc1ZlcnQ9ITEsbD9oLnB1c2goYSk6Zy5wdXNoKGEpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS5jdXJ2ZVZlcnRleD1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVZlcnRleFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0Q/dGhpcy5fcmVuZGVyZXIuY3VydmVWZXJ0ZXguYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTooaj0hMCx0aGlzLnZlcnRleChhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKSksdGhpc30sZC5wcm90b3R5cGUuZW5kQ29udG91cj1mdW5jdGlvbigpe3ZhciBhPWhbMF0uc2xpY2UoKTthLmlzVmVydD1oWzBdLmlzVmVydCxhLm1vdmVUbz0hMSxoLnB1c2goYSksbSYmKGcucHVzaChnWzBdKSxtPSExKTtmb3IodmFyIGI9MDtiPGgubGVuZ3RoO2IrKylnLnB1c2goaFtiXSk7cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLmVuZFNoYXBlPWZ1bmN0aW9uKGEpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImVuZFNoYXBlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRCl0aGlzLl9yZW5kZXJlci5lbmRTaGFwZShhLGosaSxrLGwsZik7ZWxzZXtpZigwPT09Zy5sZW5ndGgpcmV0dXJuIHRoaXM7aWYoIXRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmIXRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpcmV0dXJuIHRoaXM7dmFyIGI9YT09PWUuQ0xPU0U7YiYmIWwmJmcucHVzaChnWzBdKSx0aGlzLl9yZW5kZXJlci5lbmRTaGFwZShhLGcsaixpLGssbCxmKSxqPSExLGk9ITEsaz0hMSxsPSExLG09ITAsYiYmZy5wb3AoKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUucXVhZHJhdGljVmVydGV4PWZ1bmN0aW9uKCl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicXVhZHJhdGljVmVydGV4XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRCl0aGlzLl9yZW5kZXJlci5xdWFkcmF0aWNWZXJ0ZXguYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTtlbHNle2lmKHRoaXMuX2NvbnRvdXJJbml0ZWQpe3ZhciBhPXt9O3JldHVybiBhLng9YXJndW1lbnRzWzBdLGEueT1hcmd1bWVudHNbMV0sYS54Mz1hcmd1bWVudHNbMl0sYS55Mz1hcmd1bWVudHNbM10sYS50eXBlPWUuUVVBRFJBVElDLHRoaXMuX2NvbnRvdXJWZXJ0aWNlcy5wdXNoKGEpLHRoaXN9aWYoIShnLmxlbmd0aD4wKSl0aHJvdyBuZXcgRXJyb3IoXCJ2ZXJ0ZXgoKSBtdXN0IGJlIHVzZWQgb25jZSBiZWZvcmUgY2FsbGluZyBxdWFkcmF0aWNWZXJ0ZXgoKVwiKTtrPSEwO2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliW2NdPWFyZ3VtZW50c1tjXTtiLmlzVmVydD0hMSxsP2gucHVzaChiKTpnLnB1c2goYil9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLnZlcnRleD1mdW5jdGlvbihhLGIsYyxkLGUpe2lmKHRoaXMuX3JlbmRlcmVyLmlzUDNEKXRoaXMuX3JlbmRlcmVyLnZlcnRleC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpO2Vsc2V7dmFyIGY9W107Zi5pc1ZlcnQ9ITAsZlswXT1hLGZbMV09YixmWzJdPTAsZlszXT0wLGZbNF09MCxmWzVdPXRoaXMuX3JlbmRlcmVyLl9nZXRGaWxsKCksZls2XT10aGlzLl9yZW5kZXJlci5fZ2V0U3Ryb2tlKCksYyYmKGYubW92ZVRvPWMpLGw/KDA9PT1oLmxlbmd0aCYmKGYubW92ZVRvPSEwKSxoLnB1c2goZikpOmcucHVzaChmKX1yZXR1cm4gdGhpc30sYi5leHBvcnRzPWR9LHtcIi4uL2NvbnN0YW50c1wiOjE4LFwiLi4vbWFpblwiOjI0fV0sMzQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGZ1bmN0aW9uKGEsYil7d2luZG93LnNldFRpbWVvdXQoYSwxZTMvNjApfX0oKSxmdW5jdGlvbigpe1widW5kZWZpbmVkXCI9PXR5cGVvZiBVaW50OENsYW1wZWRBcnJheXx8VWludDhDbGFtcGVkQXJyYXkucHJvdG90eXBlLnNsaWNlfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoVWludDhDbGFtcGVkQXJyYXkucHJvdG90eXBlLFwic2xpY2VcIix7dmFsdWU6QXJyYXkucHJvdG90eXBlLnNsaWNlLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExfSl9KCksZnVuY3Rpb24oKXtpZighT2JqZWN0LmFzc2lnbil7dmFyIGE9T2JqZWN0LmtleXMsYj1PYmplY3QuZGVmaW5lUHJvcGVydHksYz1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwIT09YSYmbnVsbCE9PWF9LGQ9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCksZT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGY9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBlLmNhbGwoYSxiKX19LGc9ZnVuY3Rpb24oYixlKXtpZighYyhiKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0XCIpO3ZhciBnLGgsaSxqLGs9T2JqZWN0KGIpO2ZvcihnPTE7Zzxhcmd1bWVudHMubGVuZ3RoOysrZylmb3IoaD1PYmplY3QoYXJndW1lbnRzW2ddKSxqPWEoaCksZCYmT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmai5wdXNoLmFwcGx5KGosT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhoKS5maWx0ZXIoZihoKSkpLGk9MDtpPGoubGVuZ3RoOysraSlrW2pbaV1dPWhbaltpXV07cmV0dXJuIGt9O2IoT2JqZWN0LFwiYXNzaWduXCIse3ZhbHVlOmcsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITB9KX19KCl9LHt9XSwzNTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIik7ZC5wcm90b3R5cGUubm9Mb29wPWZ1bmN0aW9uKCl7dGhpcy5fbG9vcD0hMX0sZC5wcm90b3R5cGUubG9vcD1mdW5jdGlvbigpe3RoaXMuX2xvb3A9ITAsdGhpcy5fZHJhdygpfSxkLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKCl7dGhpcy5fc3R5bGVzLnB1c2goe3Byb3BzOntfY29sb3JNb2RlOnRoaXMuX2NvbG9yTW9kZX0scmVuZGVyZXI6dGhpcy5fcmVuZGVyZXIucHVzaCgpfSl9LGQucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX3N0eWxlcy5wb3AoKTthPyh0aGlzLl9yZW5kZXJlci5wb3AoYS5yZW5kZXJlciksT2JqZWN0LmFzc2lnbih0aGlzLGEucHJvcHMpKTpjb25zb2xlLndhcm4oXCJwb3AoKSB3YXMgY2FsbGVkIHdpdGhvdXQgbWF0Y2hpbmcgcHVzaCgpXCIpfSxkLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oYSl7dmFyIGI9cGFyc2VJbnQoYSk7KGlzTmFOKGIpfHxiPDEpJiYoYj0xKTt2YXIgYz10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcyxkPWMuc2V0dXAsZT1jLmRyYXc7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSl7dm9pZCAwPT09ZCYmYy5zY2FsZShjLl9waXhlbERlbnNpdHksYy5fcGl4ZWxEZW5zaXR5KTtmb3IodmFyIGY9ZnVuY3Rpb24oYSl7YS5jYWxsKGMpfSxnPTA7ZzxiO2crKyljLnJlc2V0TWF0cml4KCksYy5fcmVuZGVyZXIuaXNQM0QmJmMuX3JlbmRlcmVyLl91cGRhdGUoKSxjLl9zZXRQcm9wZXJ0eShcImZyYW1lQ291bnRcIixjLmZyYW1lQ291bnQrMSksYy5fcmVnaXN0ZXJlZE1ldGhvZHMucHJlLmZvckVhY2goZiksZSgpLGMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3QuZm9yRWFjaChmKX19LGIuZXhwb3J0cz1kfSx7XCIuL21haW5cIjoyNH1dLDM2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKTtkLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihhLGIsYyxkLGUsZil7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmFwcGx5TWF0cml4KGEsYixjLGQsZSxmKSx0aGlzfSxkLnByb3RvdHlwZS5wb3BNYXRyaXg9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJwb3BNYXRyaXgoKSBub3QgdXNlZCwgc2VlIHBvcCgpXCIpfSxkLnByb3RvdHlwZS5wcmludE1hdHJpeD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInByaW50TWF0cml4KCkgbm90IGltcGxlbWVudGVkXCIpfSxkLnByb3RvdHlwZS5wdXNoTWF0cml4PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicHVzaE1hdHJpeCgpIG5vdCB1c2VkLCBzZWUgcHVzaCgpXCIpfSxkLnByb3RvdHlwZS5yZXNldE1hdHJpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5yZXNldE1hdHJpeCgpLHRoaXN9LGQucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyb3RhdGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnJvdGF0ZSh0aGlzLl90b1JhZGlhbnMoYSksYiksdGhpc30sZC5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJyb3RhdGVYXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJvdGF0ZVhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnJvdGF0ZVgodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInJvdGF0ZVlcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicm90YXRlWVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIucm90YXRlWSh0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwicm90YXRlWlwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyb3RhdGVaXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5yb3RhdGVaKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYSxiLGMpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNjYWxlXCIsYXJndW1lbnRzKSxhIGluc3RhbmNlb2YgZC5WZWN0b3Ipe3ZhciBlPWE7YT1lLngsYj1lLnksYz1lLnp9ZWxzZSBpZihhIGluc3RhbmNlb2YgQXJyYXkpe3ZhciBmPWE7YT1mWzBdLGI9ZlsxXSxjPWZbMl18fDF9cmV0dXJuIGlzTmFOKGIpP2I9Yz1hOmlzTmFOKGMpJiYoYz0xKSx0aGlzLl9yZW5kZXJlci5zY2FsZS5jYWxsKHRoaXMuX3JlbmRlcmVyLGEsYixjKSx0aGlzfSxkLnByb3RvdHlwZS5zaGVhclg9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNoZWFyWFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuc2hlYXJYKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUuc2hlYXJZPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzaGVhcllcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnNoZWFyWSh0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRyYW5zbGF0ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0Q/dGhpcy5fcmVuZGVyZXIudHJhbnNsYXRlKGEsYixjKTp0aGlzLl9yZW5kZXJlci50cmFuc2xhdGUoYSxiKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi9tYWluXCI6MjR9XSwzNzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuY3JlYXRlU3RyaW5nRGljdD1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVTdHJpbmdEaWN0XCIsYXJndW1lbnRzKSxuZXcgZC5TdHJpbmdEaWN0KGEsYil9LGQucHJvdG90eXBlLmNyZWF0ZU51bWJlckRpY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlTnVtYmVyRGljdFwiLGFyZ3VtZW50cyksbmV3IGQuTnVtYmVyRGljdChhLGIpfSxkLlR5cGVkRGljdD1mdW5jdGlvbihhLGIpe3JldHVybiBhIGluc3RhbmNlb2YgT2JqZWN0P3RoaXMuZGF0YT1hOih0aGlzLmRhdGE9e30sdGhpcy5kYXRhW2FdPWIpLHRoaXN9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RofSxkLlR5cGVkRGljdC5wcm90b3R5cGUuaGFzS2V5PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSl9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7aWYodGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpKXJldHVybiB0aGlzLmRhdGFbYV07Y29uc29sZS5sb2coYStcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIERpY3Rpb25hcnlcIil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXt0aGlzLl92YWxpZGF0ZShiKT90aGlzLmRhdGFbYV09Yjpjb25zb2xlLmxvZyhcIlRob3NlIHZhbHVlcyBkb250IHdvcmsgZm9yIHRoaXMgZGljdGlvbmFyeSB0eXBlLlwiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLl9hZGRPYmo9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpdGhpcy5zZXQoYixhW2JdKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbihhLGIpe2EgaW5zdGFuY2VvZiBPYmplY3QmJnZvaWQgMD09PWI/dGhpcy5fYWRkT2JqKGEpOnZvaWQgMCE9PWE/dGhpcy5zZXQoYSxiKTpjb25zb2xlLmxvZyhcIkluIG9yZGVyIHRvIGNyZWF0ZSBhIG5ldyBEaWN0aW9uYXJ5IGVudHJ5IHlvdSBtdXN0IHBhc3MgYW4gb2JqZWN0IG9yIGEga2V5LCB2YWx1ZSBwYWlyXCIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmRhdGE9e319LGQuVHlwZWREaWN0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oYSl7aWYoIXRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgRXJyb3IoYStcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIERpY3Rpb25hcnlcIik7ZGVsZXRlIHRoaXMuZGF0YVthXX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnByaW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIHRoaXMuZGF0YSljb25zb2xlLmxvZyhcImtleTpcIithK1wiIHZhbHVlOlwiK3RoaXMuZGF0YVthXSl9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5zYXZlVGFibGU9ZnVuY3Rpb24oYSl7dmFyIGI9XCJcIjtmb3IodmFyIGMgaW4gdGhpcy5kYXRhKWIrPWMrXCIsXCIrdGhpcy5kYXRhW2NdK1wiXFxuXCI7dmFyIGU9bmV3IEJsb2IoW2JdLHt0eXBlOlwidGV4dC9jc3ZcIn0pO2QucHJvdG90eXBlLmRvd25sb2FkRmlsZShlLGF8fFwibXljc3ZcIixcImNzdlwiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnNhdmVKU09OPWZ1bmN0aW9uKGEsYil7ZC5wcm90b3R5cGUuc2F2ZUpTT04odGhpcy5kYXRhLGEsYil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuITB9LGQuU3RyaW5nRGljdD1mdW5jdGlvbigpe2QuVHlwZWREaWN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5TdHJpbmdEaWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQuVHlwZWREaWN0LnByb3RvdHlwZSksZC5TdHJpbmdEaWN0LnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGF9LGQuTnVtYmVyRGljdD1mdW5jdGlvbigpe2QuVHlwZWREaWN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQuVHlwZWREaWN0LnByb3RvdHlwZSksZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGF9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpP3RoaXMuZGF0YVthXSs9Yjpjb25zb2xlLmxvZyhcIlRoZSBrZXkgLSBcIithK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGljdGlvbmFyeS5cIil9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGEsYil7dGhpcy5hZGQoYSwtYil9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubXVsdD1mdW5jdGlvbihhLGIpe3RoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKT90aGlzLmRhdGFbYV0qPWI6Y29uc29sZS5sb2coXCJUaGUga2V5IC0gXCIrYStcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGRpY3Rpb25hcnkuXCIpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLmRpdj1mdW5jdGlvbihhLGIpe3RoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKT90aGlzLmRhdGFbYV0vPWI6Y29uc29sZS5sb2coXCJUaGUga2V5IC0gXCIrYStcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGRpY3Rpb25hcnkuXCIpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLl92YWx1ZVRlc3Q9ZnVuY3Rpb24oYSl7aWYoMD09PU9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBzZWFyY2ggZm9yIGEgbWluaW11bSBvciBtYXhpbXVtIHZhbHVlIG9uIGFuIGVtcHR5IE51bWJlckRpY3RcIik7aWYoMT09PU9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoKXJldHVybiB0aGlzLmRhdGFbT2JqZWN0LmtleXModGhpcy5kYXRhKVswXV07dmFyIGI9dGhpcy5kYXRhW09iamVjdC5rZXlzKHRoaXMuZGF0YSlbMF1dO2Zvcih2YXIgYyBpbiB0aGlzLmRhdGEpdGhpcy5kYXRhW2NdKmE8YiphJiYoYj10aGlzLmRhdGFbY10pO3JldHVybiBifSxkLk51bWJlckRpY3QucHJvdG90eXBlLm1pblZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlVGVzdCgxKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5tYXhWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZVRlc3QoLTEpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLl9rZXlUZXN0PWZ1bmN0aW9uKGEpe2lmKDA9PT1PYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gdXNlIG1pblZhbHVlIG9uIGFuIGVtcHR5IE51bWJlckRpY3RcIik7aWYoMT09PU9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoKXJldHVybiBPYmplY3Qua2V5cyh0aGlzLmRhdGEpWzBdO2Zvcih2YXIgYj1PYmplY3Qua2V5cyh0aGlzLmRhdGEpWzBdLGM9MTtjPE9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoO2MrKylPYmplY3Qua2V5cyh0aGlzLmRhdGEpW2NdKmE8YiphJiYoYj1PYmplY3Qua2V5cyh0aGlzLmRhdGEpW2NdKTtyZXR1cm4gYn0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5taW5LZXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa2V5VGVzdCgxKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5tYXhLZXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa2V5VGVzdCgtMSl9LGIuZXhwb3J0cz1kLlR5cGVkRGljdH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSwzODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuZGV2aWNlT3JpZW50YXRpb249dm9pZCAwLGQucHJvdG90eXBlLmFjY2VsZXJhdGlvblg9MCxkLnByb3RvdHlwZS5hY2NlbGVyYXRpb25ZPTAsZC5wcm90b3R5cGUuYWNjZWxlcmF0aW9uWj0wLGQucHJvdG90eXBlLnBBY2NlbGVyYXRpb25YPTAsZC5wcm90b3R5cGUucEFjY2VsZXJhdGlvblk9MCxkLnByb3RvdHlwZS5wQWNjZWxlcmF0aW9uWj0wLGQucHJvdG90eXBlLl91cGRhdGVQQWNjZWxlcmF0aW9ucz1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwicEFjY2VsZXJhdGlvblhcIix0aGlzLmFjY2VsZXJhdGlvblgpLHRoaXMuX3NldFByb3BlcnR5KFwicEFjY2VsZXJhdGlvbllcIix0aGlzLmFjY2VsZXJhdGlvblkpLHRoaXMuX3NldFByb3BlcnR5KFwicEFjY2VsZXJhdGlvblpcIix0aGlzLmFjY2VsZXJhdGlvblopfSxkLnByb3RvdHlwZS5yb3RhdGlvblg9MCxkLnByb3RvdHlwZS5yb3RhdGlvblk9MCxkLnByb3RvdHlwZS5yb3RhdGlvblo9MCxkLnByb3RvdHlwZS5wUm90YXRpb25YPTAsZC5wcm90b3R5cGUucFJvdGF0aW9uWT0wLGQucHJvdG90eXBlLnBSb3RhdGlvblo9MDt2YXIgZSxmLGcsaD0wLGk9MCxqPTAsaz1cImNsb2Nrd2lzZVwiLGw9XCJjbG9ja3dpc2VcIixtPVwiY2xvY2t3aXNlXCI7ZC5wcm90b3R5cGUuX3VwZGF0ZVBSb3RhdGlvbnM9ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcInBSb3RhdGlvblhcIix0aGlzLnJvdGF0aW9uWCksdGhpcy5fc2V0UHJvcGVydHkoXCJwUm90YXRpb25ZXCIsdGhpcy5yb3RhdGlvblkpLHRoaXMuX3NldFByb3BlcnR5KFwicFJvdGF0aW9uWlwiLHRoaXMucm90YXRpb25aKX0sZC5wcm90b3R5cGUudHVybkF4aXM9dm9pZCAwO3ZhciBuPS41LG89MzA7ZC5wcm90b3R5cGUuc2V0TW92ZVRocmVzaG9sZD1mdW5jdGlvbihhKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzZXRNb3ZlVGhyZXNob2xkXCIsYXJndW1lbnRzKSxuPWF9LGQucHJvdG90eXBlLnNldFNoYWtlVGhyZXNob2xkPWZ1bmN0aW9uKGEpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNldFNoYWtlVGhyZXNob2xkXCIsYXJndW1lbnRzKSxvPWF9LGQucHJvdG90eXBlLl9vbmRldmljZW9yaWVudGF0aW9uPWZ1bmN0aW9uKGEpe3RoaXMuX3VwZGF0ZVBSb3RhdGlvbnMoKSx0aGlzLl9zZXRQcm9wZXJ0eShcInJvdGF0aW9uWFwiLGEuYmV0YSksdGhpcy5fc2V0UHJvcGVydHkoXCJyb3RhdGlvbllcIixhLmdhbW1hKSx0aGlzLl9zZXRQcm9wZXJ0eShcInJvdGF0aW9uWlwiLGEuYWxwaGEpLHRoaXMuX2hhbmRsZU1vdGlvbigpfSxkLnByb3RvdHlwZS5fb25kZXZpY2Vtb3Rpb249ZnVuY3Rpb24oYSl7dGhpcy5fdXBkYXRlUEFjY2VsZXJhdGlvbnMoKSx0aGlzLl9zZXRQcm9wZXJ0eShcImFjY2VsZXJhdGlvblhcIiwyKmEuYWNjZWxlcmF0aW9uLngpLHRoaXMuX3NldFByb3BlcnR5KFwiYWNjZWxlcmF0aW9uWVwiLDIqYS5hY2NlbGVyYXRpb24ueSksdGhpcy5fc2V0UHJvcGVydHkoXCJhY2NlbGVyYXRpb25aXCIsMiphLmFjY2VsZXJhdGlvbi56KSx0aGlzLl9oYW5kbGVNb3Rpb24oKX0sZC5wcm90b3R5cGUuX2hhbmRsZU1vdGlvbj1mdW5jdGlvbigpezkwPT09d2luZG93Lm9yaWVudGF0aW9ufHwtOTA9PT13aW5kb3cub3JpZW50YXRpb24/dGhpcy5fc2V0UHJvcGVydHkoXCJkZXZpY2VPcmllbnRhdGlvblwiLFwibGFuZHNjYXBlXCIpOjA9PT13aW5kb3cub3JpZW50YXRpb24/dGhpcy5fc2V0UHJvcGVydHkoXCJkZXZpY2VPcmllbnRhdGlvblwiLFwicG9ydHJhaXRcIik6dm9pZCAwPT09d2luZG93Lm9yaWVudGF0aW9uJiZ0aGlzLl9zZXRQcm9wZXJ0eShcImRldmljZU9yaWVudGF0aW9uXCIsXCJ1bmRlZmluZWRcIik7dmFyIGE9dGhpcy5kZXZpY2VNb3ZlZHx8d2luZG93LmRldmljZU1vdmVkO1wiZnVuY3Rpb25cIj09dHlwZW9mIGEmJihNYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblgtdGhpcy5wQWNjZWxlcmF0aW9uWCk+bnx8TWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25ZLXRoaXMucEFjY2VsZXJhdGlvblkpPm58fE1hdGguYWJzKHRoaXMuYWNjZWxlcmF0aW9uWi10aGlzLnBBY2NlbGVyYXRpb25aKT5uKSYmYSgpO3ZhciBiPXRoaXMuZGV2aWNlVHVybmVkfHx3aW5kb3cuZGV2aWNlVHVybmVkO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGIpe3ZhciBjPXRoaXMucm90YXRpb25YKzE4MCxkPXRoaXMucFJvdGF0aW9uWCsxODAscD1oKzE4MDtjLWQ+MCYmYy1kPDI3MHx8Yy1kPC0yNzA/az1cImNsb2Nrd2lzZVwiOihjLWQ8MHx8Yy1kPjI3MCkmJihrPVwiY291bnRlci1jbG9ja3dpc2VcIiksayE9PWUmJihwPWMpLE1hdGguYWJzKGMtcCk+OTAmJk1hdGguYWJzKGMtcCk8MjcwJiYocD1jLHRoaXMuX3NldFByb3BlcnR5KFwidHVybkF4aXNcIixcIlhcIiksYigpKSxlPWssaD1wLTE4MDt2YXIgcT10aGlzLnJvdGF0aW9uWSsxODAscj10aGlzLnBSb3RhdGlvblkrMTgwLHM9aSsxODA7cS1yPjAmJnEtcjwyNzB8fHEtcjwtMjcwP2w9XCJjbG9ja3dpc2VcIjoocS1yPDB8fHEtdGhpcy5wUm90YXRpb25ZPjI3MCkmJihsPVwiY291bnRlci1jbG9ja3dpc2VcIiksbCE9PWYmJihzPXEpLE1hdGguYWJzKHEtcyk+OTAmJk1hdGguYWJzKHEtcyk8MjcwJiYocz1xLHRoaXMuX3NldFByb3BlcnR5KFwidHVybkF4aXNcIixcIllcIiksYigpKSxmPWwsaT1zLTE4MCx0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo+MCYmdGhpcy5yb3RhdGlvblotdGhpcy5wUm90YXRpb25aPDI3MHx8dGhpcy5yb3RhdGlvblotdGhpcy5wUm90YXRpb25aPC0yNzA/bT1cImNsb2Nrd2lzZVwiOih0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo8MHx8dGhpcy5yb3RhdGlvblotdGhpcy5wUm90YXRpb25aPjI3MCkmJihtPVwiY291bnRlci1jbG9ja3dpc2VcIiksbSE9PWcmJihqPXRoaXMucm90YXRpb25aKSxNYXRoLmFicyh0aGlzLnJvdGF0aW9uWi1qKT45MCYmTWF0aC5hYnModGhpcy5yb3RhdGlvblotaik8MjcwJiYoaj10aGlzLnJvdGF0aW9uWix0aGlzLl9zZXRQcm9wZXJ0eShcInR1cm5BeGlzXCIsXCJaXCIpLGIoKSksZz1tLHRoaXMuX3NldFByb3BlcnR5KFwidHVybkF4aXNcIix2b2lkIDApfXZhciB0PXRoaXMuZGV2aWNlU2hha2VufHx3aW5kb3cuZGV2aWNlU2hha2VuO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpe3ZhciB1LHY7bnVsbCE9PXRoaXMucEFjY2VsZXJhdGlvblgmJih1PU1hdGguYWJzKHRoaXMuYWNjZWxlcmF0aW9uWC10aGlzLnBBY2NlbGVyYXRpb25YKSx2PU1hdGguYWJzKHRoaXMuYWNjZWxlcmF0aW9uWS10aGlzLnBBY2NlbGVyYXRpb25ZKSksdSt2Pm8mJnQoKX19LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDM5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZCgpe2Zvcih2YXIgYSBpbiBmKWlmKGYuaGFzT3duUHJvcGVydHkoYSkmJiEwPT09ZlthXSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpLGY9e307ZS5wcm90b3R5cGUuaXNLZXlQcmVzc2VkPSExLGUucHJvdG90eXBlLmtleUlzUHJlc3NlZD0hMSxlLnByb3RvdHlwZS5rZXk9XCJcIixlLnByb3RvdHlwZS5rZXlDb2RlPTAsZS5wcm90b3R5cGUuX29ua2V5ZG93bj1mdW5jdGlvbihhKXtpZighZlthLndoaWNoXSl7dGhpcy5fc2V0UHJvcGVydHkoXCJpc0tleVByZXNzZWRcIiwhMCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlJc1ByZXNzZWRcIiwhMCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlDb2RlXCIsYS53aGljaCksZlthLndoaWNoXT0hMCx0aGlzLl9zZXRQcm9wZXJ0eShcImtleVwiLGEua2V5fHxTdHJpbmcuZnJvbUNoYXJDb2RlKGEud2hpY2gpfHxhLndoaWNoKTt2YXIgYj10aGlzLmtleVByZXNzZWR8fHdpbmRvdy5rZXlQcmVzc2VkO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGImJiFhLmNoYXJDb2RlKXshMT09PWIoYSkmJmEucHJldmVudERlZmF1bHQoKX19fSxlLnByb3RvdHlwZS5fb25rZXl1cD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmtleVJlbGVhc2VkfHx3aW5kb3cua2V5UmVsZWFzZWQ7aWYoZlthLndoaWNoXT0hMSxkKCl8fCh0aGlzLl9zZXRQcm9wZXJ0eShcImlzS2V5UHJlc3NlZFwiLCExKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleUlzUHJlc3NlZFwiLCExKSksdGhpcy5fc2V0UHJvcGVydHkoXCJfbGFzdEtleUNvZGVUeXBlZFwiLG51bGwpLHRoaXMuX3NldFByb3BlcnR5KFwia2V5XCIsYS5rZXl8fFN0cmluZy5mcm9tQ2hhckNvZGUoYS53aGljaCl8fGEud2hpY2gpLHRoaXMuX3NldFByb3BlcnR5KFwia2V5Q29kZVwiLGEud2hpY2gpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGIpeyExPT09YihhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX0sZS5wcm90b3R5cGUuX29ua2V5cHJlc3M9ZnVuY3Rpb24oYSl7aWYoYS53aGljaCE9PXRoaXMuX2xhc3RLZXlDb2RlVHlwZWQpe3RoaXMuX3NldFByb3BlcnR5KFwia2V5Q29kZVwiLGEud2hpY2gpLHRoaXMuX3NldFByb3BlcnR5KFwiX2xhc3RLZXlDb2RlVHlwZWRcIixhLndoaWNoKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleVwiLFN0cmluZy5mcm9tQ2hhckNvZGUoYS53aGljaCkpO3ZhciBiPXRoaXMua2V5VHlwZWR8fHdpbmRvdy5rZXlUeXBlZDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiKXshMT09PWIoYSkmJmEucHJldmVudERlZmF1bHQoKX19fSxlLnByb3RvdHlwZS5fb25ibHVyPWZ1bmN0aW9uKGEpe2Y9e319LGUucHJvdG90eXBlLmtleUlzRG93bj1mdW5jdGlvbihhKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwia2V5SXNEb3duXCIsYXJndW1lbnRzKSxmW2FdfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw0MDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMsZCl7ZCYmIWQuY2xpZW50WCYmKGQudG91Y2hlcz9kPWQudG91Y2hlc1swXTpkLmNoYW5nZWRUb3VjaGVzJiYoZD1kLmNoYW5nZWRUb3VjaGVzWzBdKSk7dmFyIGU9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPWEuc2Nyb2xsV2lkdGgvYixnPWEuc2Nyb2xsSGVpZ2h0L2M7cmV0dXJue3g6KGQuY2xpZW50WC1lLmxlZnQpL2YseTooZC5jbGllbnRZLWUudG9wKS9nLHdpblg6ZC5jbGllbnRYLHdpblk6ZC5jbGllbnRZLGlkOmQuaWRlbnRpZmllcn19dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKSxmPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtlLnByb3RvdHlwZS5faGFzTW91c2VJbnRlcmFjdGVkPSExLGUucHJvdG90eXBlLm1vdXNlWD0wLGUucHJvdG90eXBlLm1vdXNlWT0wLGUucHJvdG90eXBlLnBtb3VzZVg9MCxlLnByb3RvdHlwZS5wbW91c2VZPTAsZS5wcm90b3R5cGUud2luTW91c2VYPTAsZS5wcm90b3R5cGUud2luTW91c2VZPTAsZS5wcm90b3R5cGUucHdpbk1vdXNlWD0wLGUucHJvdG90eXBlLnB3aW5Nb3VzZVk9MCxlLnByb3RvdHlwZS5tb3VzZUJ1dHRvbj0wLGUucHJvdG90eXBlLm1vdXNlSXNQcmVzc2VkPSExLGUucHJvdG90eXBlLl91cGRhdGVOZXh0TW91c2VDb29yZHM9ZnVuY3Rpb24oYSl7aWYobnVsbCE9PXRoaXMuX2N1ckVsZW1lbnQmJighYS50b3VjaGVzfHxhLnRvdWNoZXMubGVuZ3RoPjApKXt2YXIgYj1kKHRoaXMuX2N1ckVsZW1lbnQuZWx0LHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsYSk7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZVhcIixiLngpLHRoaXMuX3NldFByb3BlcnR5KFwibW91c2VZXCIsYi55KSx0aGlzLl9zZXRQcm9wZXJ0eShcIndpbk1vdXNlWFwiLGIud2luWCksdGhpcy5fc2V0UHJvcGVydHkoXCJ3aW5Nb3VzZVlcIixiLndpblkpfXRoaXMuX2hhc01vdXNlSW50ZXJhY3RlZHx8KHRoaXMuX3VwZGF0ZU1vdXNlQ29vcmRzKCksdGhpcy5fc2V0UHJvcGVydHkoXCJfaGFzTW91c2VJbnRlcmFjdGVkXCIsITApKX0sZS5wcm90b3R5cGUuX3VwZGF0ZU1vdXNlQ29vcmRzPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJwbW91c2VYXCIsdGhpcy5tb3VzZVgpLHRoaXMuX3NldFByb3BlcnR5KFwicG1vdXNlWVwiLHRoaXMubW91c2VZKSx0aGlzLl9zZXRQcm9wZXJ0eShcInB3aW5Nb3VzZVhcIix0aGlzLndpbk1vdXNlWCksdGhpcy5fc2V0UHJvcGVydHkoXCJwd2luTW91c2VZXCIsdGhpcy53aW5Nb3VzZVkpLHRoaXMuX3NldFByb3BlcnR5KFwiX3Btb3VzZVdoZWVsRGVsdGFZXCIsdGhpcy5fbW91c2VXaGVlbERlbHRhWSl9LGUucHJvdG90eXBlLl9zZXRNb3VzZUJ1dHRvbj1mdW5jdGlvbihhKXsxPT09YS5idXR0b24/dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUJ1dHRvblwiLGYuQ0VOVEVSKToyPT09YS5idXR0b24/dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUJ1dHRvblwiLGYuUklHSFQpOnRoaXMuX3NldFByb3BlcnR5KFwibW91c2VCdXR0b25cIixmLkxFRlQpfSxlLnByb3RvdHlwZS5fb25tb3VzZW1vdmU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzKGEpLHRoaXMubW91c2VJc1ByZXNzZWQ/XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZURyYWdnZWQ/ITE9PT1iLm1vdXNlRHJhZ2dlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hNb3ZlZCYmITE9PT1iLnRvdWNoTW92ZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlTW92ZWQmJiExPT09Yi5tb3VzZU1vdmVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbm1vdXNlZG93bj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczt0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlSXNQcmVzc2VkXCIsITApLHRoaXMuX3NldE1vdXNlQnV0dG9uKGEpLHRoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlUHJlc3NlZD8hMT09PWIubW91c2VQcmVzc2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaFN0YXJ0ZWQmJiExPT09Yi50b3VjaFN0YXJ0ZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29ubW91c2V1cD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczt0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlSXNQcmVzc2VkXCIsITEpLFxuXCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVJlbGVhc2VkPyExPT09Yi5tb3VzZVJlbGVhc2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaEVuZGVkJiYhMT09PWIudG91Y2hFbmRlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb25kcmFnZW5kPWUucHJvdG90eXBlLl9vbm1vdXNldXAsZS5wcm90b3R5cGUuX29uZHJhZ292ZXI9ZS5wcm90b3R5cGUuX29ubW91c2Vtb3ZlLGUucHJvdG90eXBlLl9vbmNsaWNrPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VDbGlja2VkKXshMT09PWIubW91c2VDbGlja2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fSxlLnByb3RvdHlwZS5fb25kYmxjbGljaz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLmRvdWJsZUNsaWNrZWQpeyExPT09Yi5kb3VibGVDbGlja2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fSxlLnByb3RvdHlwZS5fbW91c2VXaGVlbERlbHRhWT0wLGUucHJvdG90eXBlLl9wbW91c2VXaGVlbERlbHRhWT0wLGUucHJvdG90eXBlLl9vbndoZWVsPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKHRoaXMuX3NldFByb3BlcnR5KFwiX21vdXNlV2hlZWxEZWx0YVlcIixhLmRlbHRhWSksXCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVdoZWVsKXthLmRlbHRhPWEuZGVsdGFZOyExPT09Yi5tb3VzZVdoZWVsKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNDE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjLGQsZSl7ZT1lfHwwO3ZhciBmPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZz1hLnNjcm9sbFdpZHRoL2IsaD1hLnNjcm9sbEhlaWdodC9jLGk9ZC50b3VjaGVzW2VdfHxkLmNoYW5nZWRUb3VjaGVzW2VdO3JldHVybnt4OihpLmNsaWVudFgtZi5sZWZ0KS9nLHk6KGkuY2xpZW50WS1mLnRvcCkvaCx3aW5YOmkuY2xpZW50WCx3aW5ZOmkuY2xpZW50WSxpZDppLmlkZW50aWZpZXJ9fXZhciBlPWEoXCIuLi9jb3JlL21haW5cIik7ZS5wcm90b3R5cGUudG91Y2hlcz1bXSxlLnByb3RvdHlwZS5fdXBkYXRlVG91Y2hDb29yZHM9ZnVuY3Rpb24oYSl7aWYobnVsbCE9PXRoaXMuX2N1ckVsZW1lbnQpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLnRvdWNoZXMubGVuZ3RoO2MrKyliW2NdPWQodGhpcy5fY3VyRWxlbWVudC5lbHQsdGhpcy53aWR0aCx0aGlzLmhlaWdodCxhLGMpO3RoaXMuX3NldFByb3BlcnR5KFwidG91Y2hlc1wiLGIpfX0sZS5wcm90b3R5cGUuX29udG91Y2hzdGFydD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczt0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlSXNQcmVzc2VkXCIsITApLHRoaXMuX3VwZGF0ZVRvdWNoQ29vcmRzKGEpLHRoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKSx0aGlzLl91cGRhdGVNb3VzZUNvb3JkcygpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hTdGFydGVkPyExPT09Yi50b3VjaFN0YXJ0ZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlUHJlc3NlZCYmITE9PT1iLm1vdXNlUHJlc3NlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb250b3VjaG1vdmU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fdXBkYXRlVG91Y2hDb29yZHMoYSksdGhpcy5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzKGEpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hNb3ZlZD8hMT09PWIudG91Y2hNb3ZlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VEcmFnZ2VkJiYhMT09PWIubW91c2VEcmFnZ2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbnRvdWNoZW5kPWZ1bmN0aW9uKGEpe3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMSksdGhpcy5fdXBkYXRlVG91Y2hDb29yZHMoYSksdGhpcy5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzKGEpO3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO1wiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hFbmRlZD8hMT09PWIudG91Y2hFbmRlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VSZWxlYXNlZCYmITE9PT1iLm1vdXNlUmVsZWFzZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNDI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEpe3ZhciBiPTMuNSphfDA7aWYoYj1iPDE/MTpiPDI0OD9iOjI0OCxnIT09Yil7Zz1iLGg9MStnPDwxLGk9bmV3IEludDMyQXJyYXkoaCksaj1uZXcgQXJyYXkoaCk7Zm9yKHZhciBjPTA7YzxoO2MrKylqW2NdPW5ldyBJbnQzMkFycmF5KDI1Nik7Zm9yKHZhciBkLGUsZixrLGw9MSxtPWItMTtsPGI7bCsrKXtpW2IrbF09aVttXT1lPW0qbSxmPWpbYitsXSxrPWpbbS0tXTtmb3IodmFyIG49MDtuPDI1NjtuKyspZltuXT1rW25dPWUqbn1kPWlbYl09YipiLGY9altiXTtmb3IodmFyIG89MDtvPDI1NjtvKyspZltvXT1kKm99fWZ1bmN0aW9uIGUoYSxiKXtmb3IodmFyIGM9Zi5fdG9QaXhlbHMoYSksZT1hLndpZHRoLGs9YS5oZWlnaHQsbD1lKmssbT1uZXcgSW50MzJBcnJheShsKSxuPTA7bjxsO24rKyltW25dPWYuX2dldEFSR0IoYyxuKTt2YXIgbyxwLHEscixzLHQsdSx2LHcseCx5PW5ldyBJbnQzMkFycmF5KGwpLHo9bmV3IEludDMyQXJyYXkobCksQT1uZXcgSW50MzJBcnJheShsKSxCPW5ldyBJbnQzMkFycmF5KGwpLEM9MDtkKGIpO3ZhciBELEUsRixHO2ZvcihFPTA7RTxrO0UrKyl7Zm9yKEQ9MDtEPGU7RCsrKXtpZihyPXE9cD1zPW89MCwodD1ELWcpPDApeD0tdCx0PTA7ZWxzZXtpZih0Pj1lKWJyZWFrO3g9MH1mb3IoRj14O0Y8aCYmISh0Pj1lKTtGKyspe3ZhciBIPW1bdCtDXTtHPWpbRl0scys9R1soLTE2Nzc3MjE2JkgpPj4+MjRdLHArPUdbKDE2NzExNjgwJkgpPj4xNl0scSs9R1soNjUyODAmSCk+PjhdLHIrPUdbMjU1JkhdLG8rPWlbRl0sdCsrfXU9QytELHlbdV09cy9vLHpbdV09cC9vLEFbdV09cS9vLEJbdV09ci9vfUMrPWV9Zm9yKEM9MCx2PS1nLHc9diplLEU9MDtFPGs7RSsrKXtmb3IoRD0wO0Q8ZTtEKyspe2lmKHI9cT1wPXM9bz0wLHY8MCl4PXU9LXYsdD1EO2Vsc2V7aWYodj49aylicmVhazt4PTAsdT12LHQ9RCt3fWZvcihGPXg7RjxoJiYhKHU+PWspO0YrKylHPWpbRl0scys9R1t5W3RdXSxwKz1HW3pbdF1dLHErPUdbQVt0XV0scis9R1tCW3RdXSxvKz1pW0ZdLHUrKyx0Kz1lO21bRCtDXT1zL288PDI0fHAvbzw8MTZ8cS9vPDw4fHIvb31DKz1lLHcrPWUsdisrfWYuX3NldFBpeGVscyhjLG0pfXZhciBmPXt9O2YuX3RvUGl4ZWxzPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgSW1hZ2VEYXRhP2EuZGF0YTphLmdldENvbnRleHQoXCIyZFwiKS5nZXRJbWFnZURhdGEoMCwwLGEud2lkdGgsYS5oZWlnaHQpLmRhdGF9LGYuX2dldEFSR0I9ZnVuY3Rpb24oYSxiKXt2YXIgYz00KmI7cmV0dXJuIGFbYyszXTw8MjQmNDI3ODE5MDA4MHxhW2NdPDwxNiYxNjcxMTY4MHxhW2MrMV08PDgmNjUyODB8MjU1JmFbYysyXX0sZi5fc2V0UGl4ZWxzPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZD0wLGU9YS5sZW5ndGg7ZDxlO2QrKyljPTQqZCxhW2MrMF09KDE2NzExNjgwJmJbZF0pPj4+MTYsYVtjKzFdPSg2NTI4MCZiW2RdKT4+PjgsYVtjKzJdPTI1NSZiW2RdLGFbYyszXT0oNDI3ODE5MDA4MCZiW2RdKT4+PjI0fSxmLl90b0ltYWdlRGF0YT1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEltYWdlRGF0YT9hOmEuZ2V0Q29udGV4dChcIjJkXCIpLmdldEltYWdlRGF0YSgwLDAsYS53aWR0aCxhLmhlaWdodCl9LGYuX2NyZWF0ZUltYWdlRGF0YT1mdW5jdGlvbihhLGIpe3JldHVybiBmLl90bXBDYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxmLl90bXBDdHg9Zi5fdG1wQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKSx0aGlzLl90bXBDdHguY3JlYXRlSW1hZ2VEYXRhKGEsYil9LGYuYXBwbHk9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0Q29udGV4dChcIjJkXCIpLGU9ZC5nZXRJbWFnZURhdGEoMCwwLGEud2lkdGgsYS5oZWlnaHQpLGY9YihlLGMpO2YgaW5zdGFuY2VvZiBJbWFnZURhdGE/ZC5wdXRJbWFnZURhdGEoZiwwLDAsMCwwLGEud2lkdGgsYS5oZWlnaHQpOmQucHV0SW1hZ2VEYXRhKGUsMCwwLDAsMCxhLndpZHRoLGEuaGVpZ2h0KX0sZi50aHJlc2hvbGQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1mLl90b1BpeGVscyhhKTt2b2lkIDA9PT1iJiYoYj0uNSk7Zm9yKHZhciBkPU1hdGguZmxvb3IoMjU1KmIpLGU9MDtlPGMubGVuZ3RoO2UrPTQpe3ZhciBnLGg9Y1tlXSxpPWNbZSsxXSxqPWNbZSsyXSxrPS4yMTI2KmgrLjcxNTIqaSsuMDcyMipqO2c9az49ZD8yNTU6MCxjW2VdPWNbZSsxXT1jW2UrMl09Z319LGYuZ3JheT1mdW5jdGlvbihhKXtmb3IodmFyIGI9Zi5fdG9QaXhlbHMoYSksYz0wO2M8Yi5sZW5ndGg7Yys9NCl7dmFyIGQ9YltjXSxlPWJbYysxXSxnPWJbYysyXSxoPS4yMTI2KmQrLjcxNTIqZSsuMDcyMipnO2JbY109YltjKzFdPWJbYysyXT1ofX0sZi5vcGFxdWU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWYuX3RvUGl4ZWxzKGEpLGM9MDtjPGIubGVuZ3RoO2MrPTQpYltjKzNdPTI1NTtyZXR1cm4gYn0sZi5pbnZlcnQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWYuX3RvUGl4ZWxzKGEpLGM9MDtjPGIubGVuZ3RoO2MrPTQpYltjXT0yNTUtYltjXSxiW2MrMV09MjU1LWJbYysxXSxiW2MrMl09MjU1LWJbYysyXX0sZi5wb3N0ZXJpemU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1mLl90b1BpeGVscyhhKTtpZihiPDJ8fGI+MjU1KXRocm93IG5ldyBFcnJvcihcIkxldmVsIG11c3QgYmUgZ3JlYXRlciB0aGFuIDIgYW5kIGxlc3MgdGhhbiAyNTUgZm9yIHBvc3Rlcml6ZVwiKTtmb3IodmFyIGQ9Yi0xLGU9MDtlPGMubGVuZ3RoO2UrPTQpe3ZhciBnPWNbZV0saD1jW2UrMV0saT1jW2UrMl07Y1tlXT0yNTUqKGcqYj4+OCkvZCxjW2UrMV09MjU1KihoKmI+PjgpL2QsY1tlKzJdPTI1NSooaSpiPj44KS9kfX0sZi5kaWxhdGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZCxlLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdD1mLl90b1BpeGVscyhhKSx1PTAsdj10Lmxlbmd0aD90Lmxlbmd0aC80OjAsdz1uZXcgSW50MzJBcnJheSh2KTt1PHY7KWZvcihiPXUsYz11K2Eud2lkdGg7dTxjOylkPWU9Zi5fZ2V0QVJHQih0LHUpLGk9dS0xLGg9dSsxLGo9dS1hLndpZHRoLGs9dSthLndpZHRoLGk8YiYmKGk9dSksaD49YyYmKGg9dSksajwwJiYoaj0wKSxrPj12JiYoaz11KSxuPWYuX2dldEFSR0IodCxqKSxtPWYuX2dldEFSR0IodCxpKSxvPWYuX2dldEFSR0IodCxrKSxsPWYuX2dldEFSR0IodCxoKSxnPTc3KihkPj4xNiYyNTUpKzE1MSooZD4+OCYyNTUpKzI4KigyNTUmZCkscT03NyoobT4+MTYmMjU1KSsxNTEqKG0+PjgmMjU1KSsyOCooMjU1Jm0pLHA9NzcqKGw+PjE2JjI1NSkrMTUxKihsPj44JjI1NSkrMjgqKDI1NSZsKSxyPTc3KihuPj4xNiYyNTUpKzE1MSoobj4+OCYyNTUpKzI4KigyNTUmbikscz03Nyoobz4+MTYmMjU1KSsxNTEqKG8+PjgmMjU1KSsyOCooMjU1Jm8pLHE+ZyYmKGU9bSxnPXEpLHA+ZyYmKGU9bCxnPXApLHI+ZyYmKGU9bixnPXIpLHM+ZyYmKGU9byxnPXMpLHdbdSsrXT1lO2YuX3NldFBpeGVscyh0LHcpfSxmLmVyb2RlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQsZSxnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ9Zi5fdG9QaXhlbHMoYSksdT0wLHY9dC5sZW5ndGg/dC5sZW5ndGgvNDowLHc9bmV3IEludDMyQXJyYXkodik7dTx2Oylmb3IoYj11LGM9dSthLndpZHRoO3U8YzspZD1lPWYuX2dldEFSR0IodCx1KSxpPXUtMSxoPXUrMSxqPXUtYS53aWR0aCxrPXUrYS53aWR0aCxpPGImJihpPXUpLGg+PWMmJihoPXUpLGo8MCYmKGo9MCksaz49diYmKGs9dSksbj1mLl9nZXRBUkdCKHQsaiksbT1mLl9nZXRBUkdCKHQsaSksbz1mLl9nZXRBUkdCKHQsayksbD1mLl9nZXRBUkdCKHQsaCksZz03NyooZD4+MTYmMjU1KSsxNTEqKGQ+PjgmMjU1KSsyOCooMjU1JmQpLHE9NzcqKG0+PjE2JjI1NSkrMTUxKihtPj44JjI1NSkrMjgqKDI1NSZtKSxwPTc3KihsPj4xNiYyNTUpKzE1MSoobD4+OCYyNTUpKzI4KigyNTUmbCkscj03Nyoobj4+MTYmMjU1KSsxNTEqKG4+PjgmMjU1KSsyOCooMjU1Jm4pLHM9NzcqKG8+PjE2JjI1NSkrMTUxKihvPj44JjI1NSkrMjgqKDI1NSZvKSxxPGcmJihlPW0sZz1xKSxwPGcmJihlPWwsZz1wKSxyPGcmJihlPW4sZz1yKSxzPGcmJihlPW8sZz1zKSx3W3UrK109ZTtmLl9zZXRQaXhlbHModCx3KX07dmFyIGcsaCxpLGo7Zi5ibHVyPWZ1bmN0aW9uKGEsYil7ZShhLGIpfSxiLmV4cG9ydHM9Zn0se31dLDQzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPVtdO2QucHJvdG90eXBlLmNyZWF0ZUltYWdlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZUltYWdlXCIsYXJndW1lbnRzKSxuZXcgZC5JbWFnZShhLGIpfSxkLnByb3RvdHlwZS5zYXZlQ2FudmFzPWZ1bmN0aW9uKCl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZUNhbnZhc1wiLGFyZ3VtZW50cyk7dmFyIGEsYixjLGU9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2FyZ3VtZW50c1swXWluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQ/KGE9YXJndW1lbnRzWzBdLGUuc2hpZnQoKSk6YXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkLkVsZW1lbnQ/KGE9YXJndW1lbnRzWzBdLmVsdCxlLnNoaWZ0KCkpOmE9dGhpcy5fY3VyRWxlbWVudCYmdGhpcy5fY3VyRWxlbWVudC5lbHQsZS5sZW5ndGg+PTEmJihiPWVbMF0pLGUubGVuZ3RoPj0yJiYoYz1lWzFdKSxjPWN8fGQucHJvdG90eXBlLl9jaGVja0ZpbGVFeHRlbnNpb24oYixjKVsxXXx8XCJwbmdcIjt2YXIgZjtzd2l0Y2goYyl7ZGVmYXVsdDpmPVwiaW1hZ2UvcG5nXCI7YnJlYWs7Y2FzZVwianBlZ1wiOmNhc2VcImpwZ1wiOmY9XCJpbWFnZS9qcGVnXCJ9YS50b0Jsb2IoZnVuY3Rpb24oYSl7ZC5wcm90b3R5cGUuZG93bmxvYWRGaWxlKGEsYixjKX0sZil9LGQucHJvdG90eXBlLnNhdmVGcmFtZXM9ZnVuY3Rpb24oYSxiLGMsZixnKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlRnJhbWVzXCIsYXJndW1lbnRzKTt2YXIgaD1jfHwzO2g9ZC5wcm90b3R5cGUuY29uc3RyYWluKGgsMCwxNSksaCo9MWUzO3ZhciBpPWZ8fDE1O2k9ZC5wcm90b3R5cGUuY29uc3RyYWluKGksMCwyMik7dmFyIGo9MCxrPWQucHJvdG90eXBlLl9tYWtlRnJhbWUsbD10aGlzLl9jdXJFbGVtZW50LmVsdCxtPXNldEludGVydmFsKGZ1bmN0aW9uKCl7ayhhK2osYixsKSxqKyt9LDFlMy9pKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoY2xlYXJJbnRlcnZhbChtKSxnKWcoZSk7ZWxzZSBmb3IodmFyIGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIGI9ZVthXTtkLnByb3RvdHlwZS5kb3dubG9hZEZpbGUoYi5pbWFnZURhdGEsYi5maWxlbmFtZSxiLmV4dCl9ZT1bXX0saCsuMDEpfSxkLnByb3RvdHlwZS5fbWFrZUZyYW1lPWZ1bmN0aW9uKGEsYixjKXt2YXIgZDtkPXRoaXM/dGhpcy5fY3VyRWxlbWVudC5lbHQ6Yzt2YXIgZjtpZihiKXN3aXRjaChiLnRvTG93ZXJDYXNlKCkpe2Nhc2VcInBuZ1wiOmY9XCJpbWFnZS9wbmdcIjticmVhaztjYXNlXCJqcGVnXCI6Y2FzZVwianBnXCI6Zj1cImltYWdlL2pwZWdcIjticmVhaztkZWZhdWx0OmY9XCJpbWFnZS9wbmdcIn1lbHNlIGI9XCJwbmdcIixmPVwiaW1hZ2UvcG5nXCI7dmFyIGc9ZC50b0RhdGFVUkwoZik7Zz1nLnJlcGxhY2UoZixcImltYWdlL29jdGV0LXN0cmVhbVwiKTt2YXIgaD17fTtoLmltYWdlRGF0YT1nLGguZmlsZW5hbWU9YSxoLmV4dD1iLGUucHVzaChoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNDQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7cmV0dXJuIGE+MCYmYTxiP2E6Yn12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpLGY9YShcIi4vZmlsdGVyc1wiKSxnPWEoXCIuLi9jb3JlL2hlbHBlcnNcIiksaD1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxlLnByb3RvdHlwZS5sb2FkSW1hZ2U9ZnVuY3Rpb24oYSxiLGMpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRJbWFnZVwiLGFyZ3VtZW50cyk7dmFyIGQ9bmV3IEltYWdlLGY9bmV3IGUuSW1hZ2UoMSwxLHRoaXMpLGc9dGhpcztyZXR1cm4gZC5vbmxvYWQ9ZnVuY3Rpb24oKXtmLndpZHRoPWYuY2FudmFzLndpZHRoPWQud2lkdGgsZi5oZWlnaHQ9Zi5jYW52YXMuaGVpZ2h0PWQuaGVpZ2h0LGYuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGQsMCwwKSxmLm1vZGlmaWVkPSEwLFwiZnVuY3Rpb25cIj09dHlwZW9mIGImJmIoZiksZy5fZGVjcmVtZW50UHJlbG9hZCgpfSxkLm9uZXJyb3I9ZnVuY3Rpb24oYSl7ZS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDAsZC5zcmMpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJmMoYSl9LDAhPT1hLmluZGV4T2YoXCJkYXRhOmltYWdlL1wiKSYmKGQuY3Jvc3NPcmlnaW49XCJBbm9ueW1vdXNcIiksZC5zcmM9YSxmfSxlLnByb3RvdHlwZS5pbWFnZT1mdW5jdGlvbihhLGIsYyxmLGgsaSxqLGssbCl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaW1hZ2VcIixhcmd1bWVudHMpO3ZhciBtPWEud2lkdGgsbj1hLmhlaWdodDthLmVsdCYmYS5lbHQudmlkZW9XaWR0aCYmIWEuY2FudmFzJiYobT1hLmVsdC52aWRlb1dpZHRoLG49YS5lbHQudmlkZW9IZWlnaHQpO3ZhciBvPWIscD1jLHE9Znx8bSxyPWh8fG4scz1pfHwwLHQ9anx8MCx1PWt8fG0sdj1sfHxuO3U9ZCh1LG0pLHY9ZCh2LG4pO3ZhciB3PTE7YS5lbHQmJiFhLmNhbnZhcyYmYS5lbHQuc3R5bGUud2lkdGgmJih3PWEuZWx0LnZpZGVvV2lkdGgmJiFmP2EuZWx0LnZpZGVvV2lkdGg6YS5lbHQud2lkdGgsdy89cGFyc2VJbnQoYS5lbHQuc3R5bGUud2lkdGgsMTApKSxzKj13LHQqPXcsdio9dyx1Kj13O3ZhciB4PWcubW9kZUFkanVzdChvLHAscSxyLHRoaXMuX3JlbmRlcmVyLl9pbWFnZU1vZGUpO3RoaXMuX3JlbmRlcmVyLmltYWdlKGEscyx0LHUsdix4LngseC55LHgudyx4LmgpfSxlLnByb3RvdHlwZS50aW50PWZ1bmN0aW9uKCl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGludFwiLGFyZ3VtZW50cyk7dmFyIGE9dGhpcy5jb2xvci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fcmVuZGVyZXIuX3RpbnQ9YS5sZXZlbHN9LGUucHJvdG90eXBlLm5vVGludD1mdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl90aW50PW51bGx9LGUucHJvdG90eXBlLl9nZXRUaW50ZWRJbWFnZUNhbnZhcz1mdW5jdGlvbihhKXtpZighYS5jYW52YXMpcmV0dXJuIGE7dmFyIGI9Zi5fdG9QaXhlbHMoYS5jYW52YXMpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtjLndpZHRoPWEuY2FudmFzLndpZHRoLGMuaGVpZ2h0PWEuY2FudmFzLmhlaWdodDtmb3IodmFyIGQ9Yy5nZXRDb250ZXh0KFwiMmRcIiksZT1kLmNyZWF0ZUltYWdlRGF0YShhLmNhbnZhcy53aWR0aCxhLmNhbnZhcy5oZWlnaHQpLGc9ZS5kYXRhLGg9MDtoPGIubGVuZ3RoO2grPTQpe3ZhciBpPWJbaF0saj1iW2grMV0saz1iW2grMl0sbD1iW2grM107Z1toXT1pKnRoaXMuX3JlbmRlcmVyLl90aW50WzBdLzI1NSxnW2grMV09aip0aGlzLl9yZW5kZXJlci5fdGludFsxXS8yNTUsZ1toKzJdPWsqdGhpcy5fcmVuZGVyZXIuX3RpbnRbMl0vMjU1LGdbaCszXT1sKnRoaXMuX3JlbmRlcmVyLl90aW50WzNdLzI1NX1yZXR1cm4gZC5wdXRJbWFnZURhdGEoZSwwLDApLGN9LGUucHJvdG90eXBlLmltYWdlTW9kZT1mdW5jdGlvbihhKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJpbWFnZU1vZGVcIixhcmd1bWVudHMpLGEhPT1oLkNPUk5FUiYmYSE9PWguQ09STkVSUyYmYSE9PWguQ0VOVEVSfHwodGhpcy5fcmVuZGVyZXIuX2ltYWdlTW9kZT1hKX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvaGVscGVyc1wiOjIxLFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL2ZpbHRlcnNcIjo0Mn1dLDQ1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuL2ZpbHRlcnNcIik7ZC5JbWFnZT1mdW5jdGlvbihhLGIpe3RoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iLHRoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksdGhpcy5jYW52YXMud2lkdGg9dGhpcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQ9dGhpcy5oZWlnaHQsdGhpcy5kcmF3aW5nQ29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIiksdGhpcy5fcGl4ZWxEZW5zaXR5PTEsdGhpcy5fbW9kaWZpZWQ9ITEsdGhpcy5fcGl4ZWxzRGlydHk9ITAsdGhpcy5waXhlbHM9W119LGQuSW1hZ2UucHJvdG90eXBlLl9zZXRQcm9wZXJ0eT1mdW5jdGlvbihhLGIpe3RoaXNbYV09Yix0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUubG9hZFBpeGVscz1mdW5jdGlvbigpe2QuUmVuZGVyZXIyRC5wcm90b3R5cGUubG9hZFBpeGVscy5jYWxsKHRoaXMpLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS51cGRhdGVQaXhlbHM9ZnVuY3Rpb24oYSxiLGMsZSl7ZC5SZW5kZXJlcjJELnByb3RvdHlwZS51cGRhdGVQaXhlbHMuY2FsbCh0aGlzLGEsYixjLGUpLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiLGMsZSl7cmV0dXJuIGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZ2V0LmNhbGwodGhpcyxhLGIsYyxlKX0sZC5JbWFnZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXtkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNldC5jYWxsKHRoaXMsYSxiLGMpLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oYSxiKXswPT09YSYmMD09PWI/KGE9dGhpcy5jYW52YXMud2lkdGgsYj10aGlzLmNhbnZhcy5oZWlnaHQpOjA9PT1hP2E9dGhpcy5jYW52YXMud2lkdGgqYi90aGlzLmNhbnZhcy5oZWlnaHQ6MD09PWImJihiPXRoaXMuY2FudmFzLmhlaWdodCphL3RoaXMuY2FudmFzLndpZHRoKSxhPU1hdGguZmxvb3IoYSksYj1NYXRoLmZsb29yKGIpO3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7Yy53aWR0aD1hLGMuaGVpZ2h0PWIsYy5nZXRDb250ZXh0KFwiMmRcIikuZHJhd0ltYWdlKHRoaXMuY2FudmFzLDAsMCx0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQsMCwwLGMud2lkdGgsYy5oZWlnaHQpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMud2lkdGg9YSx0aGlzLmNhbnZhcy5oZWlnaHQ9dGhpcy5oZWlnaHQ9Yix0aGlzLmRyYXdpbmdDb250ZXh0LmRyYXdJbWFnZShjLDAsMCxhLGIsMCwwLGEsYiksdGhpcy5waXhlbHMubGVuZ3RoPjAmJnRoaXMubG9hZFBpeGVscygpLHRoaXMuc2V0TW9kaWZpZWQoITApLHRoaXMuX3BpeGVsc0RpcnR5PSEwfSxkLkltYWdlLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGEsYixjLGUsZixnLGgsaSxqO2lmKDk9PT1hcmd1bWVudHMubGVuZ3RoKWE9YXJndW1lbnRzWzBdLGI9YXJndW1lbnRzWzFdLGM9YXJndW1lbnRzWzJdLGU9YXJndW1lbnRzWzNdLGY9YXJndW1lbnRzWzRdLGc9YXJndW1lbnRzWzVdLGg9YXJndW1lbnRzWzZdLGk9YXJndW1lbnRzWzddLGo9YXJndW1lbnRzWzhdO2Vsc2V7aWYoOCE9PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiU2lnbmF0dXJlIG5vdCBzdXBwb3J0ZWRcIik7YT10aGlzLGI9YXJndW1lbnRzWzBdLGM9YXJndW1lbnRzWzFdLGU9YXJndW1lbnRzWzJdLGY9YXJndW1lbnRzWzNdLGc9YXJndW1lbnRzWzRdLGg9YXJndW1lbnRzWzVdLGk9YXJndW1lbnRzWzZdLGo9YXJndW1lbnRzWzddfWQuUmVuZGVyZXIyRC5fY29weUhlbHBlcih0aGlzLGEsYixjLGUsZixnLGgsaSxqKSx0aGlzLl9waXhlbHNEaXJ0eT0hMH0sZC5JbWFnZS5wcm90b3R5cGUubWFzaz1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT10aGlzKTt2YXIgYj10aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbixjPTE7YSBpbnN0YW5jZW9mIGQuUmVuZGVyZXImJihjPWEuX3BJbnN0Ll9waXhlbERlbnNpdHkpO3ZhciBlPVthLDAsMCxjKmEud2lkdGgsYyphLmhlaWdodCwwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodF07dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249XCJkZXN0aW5hdGlvbi1pblwiLGQuSW1hZ2UucHJvdG90eXBlLmNvcHkuYXBwbHkodGhpcyxlKSx0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1iLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24oYSxiKXtlLmFwcGx5KHRoaXMuY2FudmFzLGVbYS50b0xvd2VyQ2FzZSgpXSxiKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUuYmxlbmQ9ZnVuY3Rpb24oKXtkLnByb3RvdHlwZS5ibGVuZC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLnNldE1vZGlmaWVkPWZ1bmN0aW9uKGEpe3RoaXMuX21vZGlmaWVkPWF9LGQuSW1hZ2UucHJvdG90eXBlLmlzTW9kaWZpZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9kaWZpZWR9LGQuSW1hZ2UucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oYSxiKXtkLnByb3RvdHlwZS5zYXZlQ2FudmFzKHRoaXMuY2FudmFzLGEsYil9LGIuZXhwb3J0cz1kLkltYWdlfSx7XCIuLi9jb3JlL21haW5cIjoyNCxcIi4vZmlsdGVyc1wiOjQyfV0sNDY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4vZmlsdGVyc1wiKTthKFwiLi4vY29sb3IvcDUuQ29sb3JcIiksZC5wcm90b3R5cGUucGl4ZWxzPVtdLGQucHJvdG90eXBlLmJsZW5kPWZ1bmN0aW9uKCl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmxlbmRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyP3RoaXMuX3JlbmRlcmVyLmJsZW5kLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk6ZC5SZW5kZXJlcjJELnByb3RvdHlwZS5ibGVuZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjb3B5XCIsYXJndW1lbnRzKSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmNvcHkuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKGEsYil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZmlsdGVyXCIsYXJndW1lbnRzKSx2b2lkIDAhPT10aGlzLmNhbnZhcz9lLmFwcGx5KHRoaXMuY2FudmFzLGVbYS50b0xvd2VyQ2FzZSgpXSxiKTplLmFwcGx5KHRoaXMuZWx0LGVbYS50b0xvd2VyQ2FzZSgpXSxiKX0sZC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLl9yZW5kZXJlci5nZXQoYSxiLGMsZCl9LGQucHJvdG90eXBlLmxvYWRQaXhlbHM9ZnVuY3Rpb24oKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkUGl4ZWxzXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5sb2FkUGl4ZWxzKCl9LGQucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7dGhpcy5fcmVuZGVyZXIuc2V0KGEsYixjKX0sZC5wcm90b3R5cGUudXBkYXRlUGl4ZWxzPWZ1bmN0aW9uKGEsYixjLGUpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInVwZGF0ZVBpeGVsc1wiLGFyZ3VtZW50cyksMCE9PXRoaXMucGl4ZWxzLmxlbmd0aCYmdGhpcy5fcmVuZGVyZXIudXBkYXRlUGl4ZWxzKGEsYixjLGUpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29sb3IvcDUuQ29sb3JcIjoxNixcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9maWx0ZXJzXCI6NDJ9XSw0NzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiKXt2YXIgYz17fTtpZih2b2lkIDA9PT0oYj1ifHxbXSkpZm9yKHZhciBkPTA7ZDxhLmxlbmd0aDtkKyspYltkLnRvU3RyaW5nKCldPWQ7Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDtlKyspe3ZhciBmPWJbZV0sZz1hW2VdO2NbZl09Z31yZXR1cm4gY31mdW5jdGlvbiBlKGEpe3ZhciBiPW5ldyBpLlhNTCxjPWEuY2hpbGROb2RlcztpZihjJiZjLmxlbmd0aCl7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBmPWUoY1tkXSk7Yi5hZGRDaGlsZChmKX1iLnNldE5hbWUoYS5ub2RlTmFtZSksYi5fc2V0Q29udChhLnRleHRDb250ZW50KSxiLl9zZXRBdHRyaWJ1dGVzKGEpO2Zvcih2YXIgZz0wO2c8Yi5jaGlsZHJlbi5sZW5ndGg7ZysrKWIuY2hpbGRyZW5bZ10ucGFyZW50PWI7cmV0dXJuIGJ9cmV0dXJuIGIuc2V0TmFtZShhLm5vZGVOYW1lKSxiLl9zZXRDb250KGEudGV4dENvbnRlbnQpLGIuX3NldEF0dHJpYnV0ZXMoYSksYn1mdW5jdGlvbiBmKGEpe3JldHVybiBhLnJlcGxhY2UoLyYvZyxcIiZhbXA7XCIpLnJlcGxhY2UoLzwvZyxcIiZsdDtcIikucmVwbGFjZSgvPi9nLFwiJmd0O1wiKS5yZXBsYWNlKC9cIi9nLFwiJnF1b3Q7XCIpLnJlcGxhY2UoLycvZyxcIiYjMDM5O1wiKX1mdW5jdGlvbiBnKGEsYil7YiYmITAhPT1iJiZcInRydWVcIiE9PWJ8fChiPVwiXCIpLGF8fChhPVwidW50aXRsZWRcIik7dmFyIGM9XCJcIjtyZXR1cm4gYSYmYS5pbmRleE9mKFwiLlwiKT4tMSYmKGM9YS5zcGxpdChcIi5cIikucG9wKCkpLGImJmMhPT1iJiYoYz1iLGE9YStcIi5cIitjKSxbYSxjXX1mdW5jdGlvbiBoKGEpe2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYS50YXJnZXQpfXZhciBpPWEoXCIuLi9jb3JlL21haW5cIik7YShcIndoYXR3Zy1mZXRjaFwiKSxhKFwiZXM2LXByb21pc2VcIikucG9seWZpbGwoKTt2YXIgaj1hKFwiZmV0Y2gtanNvbnBcIik7YShcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxpLnByb3RvdHlwZS5sb2FkSlNPTj1mdW5jdGlvbigpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRKU09OXCIsYXJndW1lbnRzKTtmb3IodmFyIGEsYixjLGQ9YXJndW1lbnRzWzBdLGU9e30sZj1cImpzb25cIixnPTE7Zzxhcmd1bWVudHMubGVuZ3RoO2crKyl7dmFyIGg9YXJndW1lbnRzW2ddO1wic3RyaW5nXCI9PXR5cGVvZiBoP1wianNvbnBcIiE9PWgmJlwianNvblwiIT09aHx8KGY9aCk6XCJmdW5jdGlvblwiPT10eXBlb2YgaD9hP2I9aDphPWg6XCJvYmplY3RcIj09dHlwZW9mIGgmJmguaGFzT3duUHJvcGVydHkoXCJqc29ucENhbGxiYWNrXCIpJiYoZj1cImpzb25wXCIsYz1oKX12YXIgaj10aGlzO3JldHVybiB0aGlzLmh0dHBEbyhkLFwiR0VUXCIsYyxmLGZ1bmN0aW9uKGIpe2Zvcih2YXIgYyBpbiBiKWVbY109YltjXTt2b2lkIDAhPT1hJiZhKGIpLGouX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYSl7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDUsZCksIWIpdGhyb3cgYTtiKGEpfSksZX0saS5wcm90b3R5cGUubG9hZFN0cmluZ3M9ZnVuY3Rpb24oKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkU3RyaW5nc1wiLGFyZ3VtZW50cyk7Zm9yKHZhciBhLGIsYz1bXSxkPTE7ZDxhcmd1bWVudHMubGVuZ3RoO2QrKyl7dmFyIGU9YXJndW1lbnRzW2RdO1wiZnVuY3Rpb25cIj09dHlwZW9mIGUmJih2b2lkIDA9PT1hP2E9ZTp2b2lkIDA9PT1iJiYoYj1lKSl9dmFyIGY9dGhpcztyZXR1cm4gaS5wcm90b3R5cGUuaHR0cERvLmNhbGwodGhpcyxhcmd1bWVudHNbMF0sXCJHRVRcIixcInRleHRcIixmdW5jdGlvbihiKXt2YXIgZD1iLnJlcGxhY2UoL1xcclxcbi9nLFwiXFxyXCIpLnJlcGxhY2UoL1xcbi9nLFwiXFxyXCIpLnNwbGl0KC9cXHIvKTtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShjLGQpLHZvaWQgMCE9PWEmJmEoYyksZi5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihhKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoMyxhcmd1bWVudHNbMF0pLCFiKXRocm93IGE7YihhKX0pLGN9LGkucHJvdG90eXBlLmxvYWRUYWJsZT1mdW5jdGlvbihhKXt2YXIgYixjLGU9W10sZj0hMSxnPWEuc3Vic3RyaW5nKGEubGFzdEluZGV4T2YoXCIuXCIpKzEsYS5sZW5ndGgpLGg9XCIsXCIsaj0hMTtcInRzdlwiPT09ZyYmKGg9XCJcXHRcIik7Zm9yKHZhciBrPTE7azxhcmd1bWVudHMubGVuZ3RoO2srKylpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhcmd1bWVudHNba10pdm9pZCAwPT09Yj9iPWFyZ3VtZW50c1trXTp2b2lkIDA9PT1jJiYoYz1hcmd1bWVudHNba10pO2Vsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIGFyZ3VtZW50c1trXSlpZihlLnB1c2goYXJndW1lbnRzW2tdKSxcImhlYWRlclwiPT09YXJndW1lbnRzW2tdJiYoZj0hMCksXCJjc3ZcIj09PWFyZ3VtZW50c1trXSl7aWYoail0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc2V0IG11bHRpcGxlIHNlcGFyYXRvciB0eXBlcy5cIik7aD1cIixcIixqPSEwfWVsc2UgaWYoXCJ0c3ZcIj09PWFyZ3VtZW50c1trXSl7aWYoail0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc2V0IG11bHRpcGxlIHNlcGFyYXRvciB0eXBlcy5cIik7aD1cIlxcdFwiLGo9ITB9dmFyIGw9bmV3IGkuVGFibGUsbT10aGlzO3JldHVybiB0aGlzLmh0dHBEbyhhLFwiR0VUXCIsXCJ0YWJsZVwiLGZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxlPXt9LGc9MCxqPTEsbj0yLG89NCxwPSdcIicscT1cIlxcclwiLHI9XCJcXG5cIixzPVtdLHQ9MCx1PW51bGwsdj1mdW5jdGlvbigpe2UuY3VycmVudFN0YXRlPWcsZS50b2tlbj1cIlwifSx3PWZ1bmN0aW9uKCl7dS5wdXNoKGUudG9rZW4pLHYoKX0seD1mdW5jdGlvbigpe2UuZXNjYXBlZD0hMSx1PVtdLHYoKX0seT1mdW5jdGlvbigpe2UuY3VycmVudFN0YXRlPW8scy5wdXNoKHUpLHU9bnVsbH07Oyl7aWYobnVsbD09KGM9YVt0KytdKSl7aWYoZS5lc2NhcGVkKXRocm93IG5ldyBFcnJvcihcIlVuY2xvc2VkIHF1b3RlIGluIGZpbGUuXCIpO2lmKHUpe3coKSx5KCk7YnJlYWt9fWlmKG51bGw9PT11JiZ4KCksZS5jdXJyZW50U3RhdGU9PT1nKXtpZihjPT09cCl7ZS5lc2NhcGVkPSEwLGUuY3VycmVudFN0YXRlPWo7Y29udGludWV9ZS5jdXJyZW50U3RhdGU9an1pZihlLmN1cnJlbnRTdGF0ZT09PWomJmUuZXNjYXBlZClpZihjPT09cClhW3RdPT09cD8oZS50b2tlbis9cCx0KyspOihlLmVzY2FwZWQ9ITEsZS5jdXJyZW50U3RhdGU9bik7ZWxzZXtpZihjPT09cSljb250aW51ZTtlLnRva2VuKz1jfWVsc2UgYz09PXE/KGFbdF09PT1yJiZ0KyssdygpLHkoKSk6Yz09PXI/KHcoKSx5KCkpOmM9PT1oP3coKTplLmN1cnJlbnRTdGF0ZT09PWomJihlLnRva2VuKz1jKX1pZihmKWwuY29sdW1ucz1zLnNoaWZ0KCk7ZWxzZSBmb3Ioaz0wO2s8c1swXS5sZW5ndGg7aysrKWwuY29sdW1uc1trXT1cIm51bGxcIjt2YXIgejtmb3Ioaz0wO2s8cy5sZW5ndGg7aysrKSgxIT09c1trXS5sZW5ndGh8fFwidW5kZWZpbmVkXCIhPT1zW2tdWzBdJiZcIlwiIT09c1trXVswXSkmJih6PW5ldyBpLlRhYmxlUm93LHouYXJyPXNba10sei5vYmo9ZChzW2tdLGwuY29sdW1ucyksbC5hZGRSb3coeikpO1wiZnVuY3Rpb25cIj09dHlwZW9mIGImJmIobCksbS5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihiKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoMixhKSwhYyl0aHJvdyBiO2MoYil9KSxsfSxpLnByb3RvdHlwZS5sb2FkWE1MPWZ1bmN0aW9uKCl7Zm9yKHZhciBhLGIsYz17fSxkPTE7ZDxhcmd1bWVudHMubGVuZ3RoO2QrKyl7dmFyIGU9YXJndW1lbnRzW2RdO1wiZnVuY3Rpb25cIj09dHlwZW9mIGUmJih2b2lkIDA9PT1hP2E9ZTp2b2lkIDA9PT1iJiYoYj1lKSl9dmFyIGY9dGhpcztyZXR1cm4gdGhpcy5odHRwRG8oYXJndW1lbnRzWzBdLFwiR0VUXCIsXCJ4bWxcIixmdW5jdGlvbihiKXtmb3IodmFyIGQgaW4gYiljW2RdPWJbZF07dm9pZCAwIT09YSYmYShjKSxmLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGEpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcigxLGFyZ3VtZW50c1swXSksIWIpdGhyb3cgYTtiKGEpfSksY30saS5wcm90b3R5cGUubG9hZEJ5dGVzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD17fSxlPXRoaXM7cmV0dXJuIHRoaXMuaHR0cERvKGEsXCJHRVRcIixcImFycmF5QnVmZmVyXCIsZnVuY3Rpb24oYSl7ZC5ieXRlcz1uZXcgVWludDhBcnJheShhKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiJiZiKGQpLGUuX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYil7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDYsYSksIWMpdGhyb3cgYjtjKGIpfSksZH0saS5wcm90b3R5cGUuaHR0cEdldD1mdW5jdGlvbigpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImh0dHBHZXRcIixhcmd1bWVudHMpO3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGEuc3BsaWNlKDEsMCxcIkdFVFwiKSxpLnByb3RvdHlwZS5odHRwRG8uYXBwbHkodGhpcyxhKX0saS5wcm90b3R5cGUuaHR0cFBvc3Q9ZnVuY3Rpb24oKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJodHRwUG9zdFwiLGFyZ3VtZW50cyk7dmFyIGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gYS5zcGxpY2UoMSwwLFwiUE9TVFwiKSxpLnByb3RvdHlwZS5odHRwRG8uYXBwbHkodGhpcyxhKX0saS5wcm90b3R5cGUuaHR0cERvPWZ1bmN0aW9uKCl7Zm9yKHZhciBhLGIsYyxkLGYsZz17fSxoPTAsaz1cInRleHQvcGxhaW5cIixsPWFyZ3VtZW50cy5sZW5ndGgtMTtsPjAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGFyZ3VtZW50c1tsXTtsLS0paCsrO3ZhciBtPWFyZ3VtZW50cy5sZW5ndGgtaCxuPWFyZ3VtZW50c1swXTtpZigyPT09bSYmXCJzdHJpbmdcIj09dHlwZW9mIG4mJlwib2JqZWN0XCI9PXR5cGVvZiBhcmd1bWVudHNbMV0pZD1uZXcgUmVxdWVzdChuLGFyZ3VtZW50c1sxXSksYj1hcmd1bWVudHNbMl0sYz1hcmd1bWVudHNbM107ZWxzZXtmb3IodmFyIG8scD1cIkdFVFwiLHE9MTtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKXt2YXIgcj1hcmd1bWVudHNbcV07aWYoXCJzdHJpbmdcIj09dHlwZW9mIHIpXCJHRVRcIj09PXJ8fFwiUE9TVFwiPT09cnx8XCJQVVRcIj09PXJ8fFwiREVMRVRFXCI9PT1yP3A9cjpcImpzb25cIj09PXJ8fFwianNvbnBcIj09PXJ8fFwiYmluYXJ5XCI9PT1yfHxcImFycmF5QnVmZmVyXCI9PT1yfHxcInhtbFwiPT09cnx8XCJ0ZXh0XCI9PT1yfHxcInRhYmxlXCI9PT1yP2E9cjpvPXI7ZWxzZSBpZihcIm51bWJlclwiPT10eXBlb2YgcilvPXIudG9TdHJpbmcoKTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiByKWlmKHIuaGFzT3duUHJvcGVydHkoXCJqc29ucENhbGxiYWNrXCIpKWZvcih2YXIgcyBpbiByKWdbc109cltzXTtlbHNlIG89SlNPTi5zdHJpbmdpZnkociksaz1cImFwcGxpY2F0aW9uL2pzb25cIjtlbHNlXCJmdW5jdGlvblwiPT10eXBlb2YgciYmKGI/Yz1yOmI9cil9ZD1uZXcgUmVxdWVzdChuLHttZXRob2Q6cCxtb2RlOlwiY29yc1wiLGJvZHk6byxoZWFkZXJzOm5ldyBIZWFkZXJzKHtcIkNvbnRlbnQtVHlwZVwiOmt9KX0pfXJldHVybiBhfHwoYT0tMSE9PW4uaW5kZXhPZihcImpzb25cIik/XCJqc29uXCI6LTEhPT1uLmluZGV4T2YoXCJ4bWxcIik/XCJ4bWxcIjpcInRleHRcIiksZj1cImpzb25wXCI9PT1hP2oobixnKTpmZXRjaChkKSxmPWYudGhlbihmdW5jdGlvbihiKXtpZighYi5vayl7dmFyIGM9bmV3IEVycm9yKGIuYm9keSk7dGhyb3cgYy5zdGF0dXM9Yi5zdGF0dXMsYy5vaz0hMSxjfXZhciBkPWIuaGVhZGVycy5nZXQoXCJjb250ZW50LWxlbmd0aFwiKTtzd2l0Y2goZCYmZD42NGU2JiZpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoNyxuKSxhKXtjYXNlXCJqc29uXCI6Y2FzZVwianNvbnBcIjpyZXR1cm4gYi5qc29uKCk7Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIGIuYmxvYigpO2Nhc2VcImFycmF5QnVmZmVyXCI6cmV0dXJuIGIuYXJyYXlCdWZmZXIoKTtjYXNlXCJ4bWxcIjpyZXR1cm4gYi50ZXh0KCkudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gZSgobmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEsXCJ0ZXh0L3htbFwiKS5kb2N1bWVudEVsZW1lbnQpfSk7ZGVmYXVsdDpyZXR1cm4gYi50ZXh0KCl9fSksZi50aGVuKGJ8fGZ1bmN0aW9uKCl7fSksZi5jYXRjaChjfHxjb25zb2xlLmVycm9yKSxmfSx3aW5kb3cuVVJMPXdpbmRvdy5VUkx8fHdpbmRvdy53ZWJraXRVUkwsaS5wcm90b3R5cGUuX3BXcml0ZXJzPVtdLGkucHJvdG90eXBlLmNyZWF0ZVdyaXRlcj1mdW5jdGlvbihhLGIpe3ZhciBjO2Zvcih2YXIgZCBpbiBpLnByb3RvdHlwZS5fcFdyaXRlcnMpaWYoaS5wcm90b3R5cGUuX3BXcml0ZXJzW2RdLm5hbWU9PT1hKXJldHVybiBjPW5ldyBpLlByaW50V3JpdGVyKGErdGhpcy5taWxsaXMoKSxiKSxpLnByb3RvdHlwZS5fcFdyaXRlcnMucHVzaChjKSxjO3JldHVybiBjPW5ldyBpLlByaW50V3JpdGVyKGEsYiksaS5wcm90b3R5cGUuX3BXcml0ZXJzLnB1c2goYyksY30saS5QcmludFdyaXRlcj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7dGhpcy5uYW1lPWEsdGhpcy5jb250ZW50PVwiXCIsdGhpcy53cml0ZT1mdW5jdGlvbihhKXt0aGlzLmNvbnRlbnQrPWF9LHRoaXMucHJpbnQ9ZnVuY3Rpb24oYSl7dGhpcy5jb250ZW50Kz1hK1wiXFxuXCJ9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmNvbnRlbnQ9XCJcIn0sdGhpcy5jbG9zZT1mdW5jdGlvbigpe3ZhciBkPVtdO2QucHVzaCh0aGlzLmNvbnRlbnQpLGkucHJvdG90eXBlLndyaXRlRmlsZShkLGEsYik7Zm9yKHZhciBlIGluIGkucHJvdG90eXBlLl9wV3JpdGVycylpLnByb3RvdHlwZS5fcFdyaXRlcnNbZV0ubmFtZT09PXRoaXMubmFtZSYmaS5wcm90b3R5cGUuX3BXcml0ZXJzLnNwbGljZShlLDEpO2MuY2xlYXIoKSxjPXt9fX0saS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YXJndW1lbnRzLGU9dGhpcy5fY3VyRWxlbWVudC5lbHQ7aWYoMD09PWQubGVuZ3RoKXJldHVybiB2b2lkIGkucHJvdG90eXBlLnNhdmVDYW52YXMoZSk7aWYoZFswXWluc3RhbmNlb2YgaS5SZW5kZXJlcnx8ZFswXWluc3RhbmNlb2YgaS5HcmFwaGljcylyZXR1cm4gdm9pZCBpLnByb3RvdHlwZS5zYXZlQ2FudmFzKGRbMF0uZWx0LGRbMV0sZFsyXSk7aWYoMT09PWQubGVuZ3RoJiZcInN0cmluZ1wiPT10eXBlb2YgZFswXSlpLnByb3RvdHlwZS5zYXZlQ2FudmFzKGUsZFswXSk7ZWxzZXtzd2l0Y2goZyhkWzFdLGRbMl0pWzFdKXtjYXNlXCJqc29uXCI6cmV0dXJuIHZvaWQgaS5wcm90b3R5cGUuc2F2ZUpTT04oZFswXSxkWzFdLGRbMl0pO2Nhc2VcInR4dFwiOnJldHVybiB2b2lkIGkucHJvdG90eXBlLnNhdmVTdHJpbmdzKGRbMF0sZFsxXSxkWzJdKTtkZWZhdWx0OmRbMF1pbnN0YW5jZW9mIEFycmF5P2kucHJvdG90eXBlLnNhdmVTdHJpbmdzKGRbMF0sZFsxXSxkWzJdKTpkWzBdaW5zdGFuY2VvZiBpLlRhYmxlP2kucHJvdG90eXBlLnNhdmVUYWJsZShkWzBdLGRbMV0sZFsyXSk6ZFswXWluc3RhbmNlb2YgaS5JbWFnZT9pLnByb3RvdHlwZS5zYXZlQ2FudmFzKGRbMF0uY2FudmFzLGRbMV0pOmRbMF1pbnN0YW5jZW9mIGkuU291bmRGaWxlJiZpLnByb3RvdHlwZS5zYXZlU291bmQoZFswXSxkWzFdLGRbMl0sZFszXSl9fX0saS5wcm90b3R5cGUuc2F2ZUpTT049ZnVuY3Rpb24oYSxiLGMpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVKU09OXCIsYXJndW1lbnRzKTt2YXIgZDtkPWM/SlNPTi5zdHJpbmdpZnkoYSk6SlNPTi5zdHJpbmdpZnkoYSx2b2lkIDAsMiksdGhpcy5zYXZlU3RyaW5ncyhkLnNwbGl0KFwiXFxuXCIpLGIsXCJqc29uXCIpfSxpLnByb3RvdHlwZS5zYXZlSlNPTk9iamVjdD1pLnByb3RvdHlwZS5zYXZlSlNPTixpLnByb3RvdHlwZS5zYXZlSlNPTkFycmF5PWkucHJvdG90eXBlLnNhdmVKU09OLGkucHJvdG90eXBlLnNhdmVTdHJpbmdzPWZ1bmN0aW9uKGEsYixjKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlU3RyaW5nc1wiLGFyZ3VtZW50cyk7Zm9yKHZhciBkPWN8fFwidHh0XCIsZT10aGlzLmNyZWF0ZVdyaXRlcihiLGQpLGY9MDtmPGEubGVuZ3RoO2YrKylhLmxlbmd0aCxlLnByaW50KGFbZl0pO2UuY2xvc2UoKSxlLmNsZWFyKCl9LGkucHJvdG90eXBlLnNhdmVUYWJsZT1mdW5jdGlvbihhLGIsYyl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZVRhYmxlXCIsYXJndW1lbnRzKTt2YXIgZDtkPXZvaWQgMD09PWM/Yi5zdWJzdHJpbmcoYi5sYXN0SW5kZXhPZihcIi5cIikrMSxiLmxlbmd0aCk6Yzt2YXIgZT10aGlzLmNyZWF0ZVdyaXRlcihiLGQpLGc9YS5jb2x1bW5zLGg9XCIsXCI7aWYoXCJ0c3ZcIj09PWQmJihoPVwiXFx0XCIpLFwiaHRtbFwiIT09ZCl7aWYoXCIwXCIhPT1nWzBdKXtmb3IodmFyIGo9MDtqPGcubGVuZ3RoO2orKylqPGcubGVuZ3RoLTE/ZS53cml0ZShnW2pdK2gpOmUud3JpdGUoZ1tqXSk7ZS53cml0ZShcIlxcblwiKX1mb3IodmFyIGs9MDtrPGEucm93cy5sZW5ndGg7aysrKXt2YXIgbDtmb3IobD0wO2w8YS5yb3dzW2tdLmFyci5sZW5ndGg7bCsrKWw8YS5yb3dzW2tdLmFyci5sZW5ndGgtMT9lLndyaXRlKGEucm93c1trXS5hcnJbbF0raCk6KGEucm93cy5sZW5ndGgsZS53cml0ZShhLnJvd3Nba10uYXJyW2xdKSk7ZS53cml0ZShcIlxcblwiKX19ZWxzZXtlLnByaW50KFwiPGh0bWw+XCIpLGUucHJpbnQoXCI8aGVhZD5cIik7dmFyIG09JyAgPG1ldGEgaHR0cC1lcXVpdj1cImNvbnRlbnQtdHlwZVwiIGNvbnRlbnQnO2lmKG0rPSc9XCJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOFwiIC8+JyxlLnByaW50KG0pLGUucHJpbnQoXCI8L2hlYWQ+XCIpLGUucHJpbnQoXCI8Ym9keT5cIiksZS5wcmludChcIiAgPHRhYmxlPlwiKSxcIjBcIiE9PWdbMF0pe2UucHJpbnQoXCIgICAgPHRyPlwiKTtmb3IodmFyIG49MDtuPGcubGVuZ3RoO24rKyl7dmFyIG89ZihnW25dKTtlLnByaW50KFwiICAgICAgPHRkPlwiK28pLGUucHJpbnQoXCIgICAgICA8L3RkPlwiKX1lLnByaW50KFwiICAgIDwvdHI+XCIpfWZvcih2YXIgcD0wO3A8YS5yb3dzLmxlbmd0aDtwKyspe2UucHJpbnQoXCIgICAgPHRyPlwiKTtmb3IodmFyIHE9MDtxPGEuY29sdW1ucy5sZW5ndGg7cSsrKXt2YXIgcj1hLnJvd3NbcF0uZ2V0U3RyaW5nKHEpLHM9ZihyKTtlLnByaW50KFwiICAgICAgPHRkPlwiK3MpLGUucHJpbnQoXCIgICAgICA8L3RkPlwiKX1lLnByaW50KFwiICAgIDwvdHI+XCIpfWUucHJpbnQoXCIgIDwvdGFibGU+XCIpLGUucHJpbnQoXCI8L2JvZHk+XCIpLGUucHJpbnQoXCI8L2h0bWw+XCIpfWUuY2xvc2UoKSxlLmNsZWFyKCl9LGkucHJvdG90eXBlLndyaXRlRmlsZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9XCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjtpLnByb3RvdHlwZS5faXNTYWZhcmkoKSYmKGQ9XCJ0ZXh0L3BsYWluXCIpO3ZhciBlPW5ldyBCbG9iKGEse3R5cGU6ZH0pO2kucHJvdG90eXBlLmRvd25sb2FkRmlsZShlLGIsYyl9LGkucHJvdG90eXBlLmRvd25sb2FkRmlsZT1mdW5jdGlvbihiLGMsZCl7dmFyIGU9ZyhjLGQpLGY9ZVswXTtpZihiIGluc3RhbmNlb2YgQmxvYil7cmV0dXJuIHZvaWQgYShcImZpbGUtc2F2ZXJcIikuc2F2ZUFzKGIsZil9dmFyIGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7aWYoai5ocmVmPWIsai5kb3dubG9hZD1mLGoub25jbGljaz1mdW5jdGlvbihhKXtoKGEpLGEuc3RvcFByb3BhZ2F0aW9uKCl9LGouc3R5bGUuZGlzcGxheT1cIm5vbmVcIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGopLGkucHJvdG90eXBlLl9pc1NhZmFyaSgpKXt2YXIgaz1cIkhlbGxvLCBTYWZhcmkgdXNlciEgVG8gZG93bmxvYWQgdGhpcyBmaWxlLi4uXFxuXCI7ays9XCIxLiBHbyB0byBGaWxlIC0tXFx4M2UgU2F2ZSBBcy5cXG5cIixrKz0nMi4gQ2hvb3NlIFwiUGFnZSBTb3VyY2VcIiBhcyB0aGUgRm9ybWF0Llxcbicsays9JzMuIE5hbWUgaXQgd2l0aCB0aGlzIGV4dGVuc2lvbjogLlwiJytlWzFdKydcIicsYWxlcnQoayl9ai5jbGljaygpfSxpLnByb3RvdHlwZS5fY2hlY2tGaWxlRXh0ZW5zaW9uPWcsaS5wcm90b3R5cGUuX2lzU2FmYXJpPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3aW5kb3cuSFRNTEVsZW1lbnQpLmluZGV4T2YoXCJDb25zdHJ1Y3RvclwiKT4wfSxiLmV4cG9ydHM9aX0se1wiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9jb3JlL21haW5cIjoyNCxcImVzNi1wcm9taXNlXCI6NCxcImZldGNoLWpzb25wXCI6NSxcImZpbGUtc2F2ZXJcIjo2LFwid2hhdHdnLWZldGNoXCI6MTJ9XSw0ODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5UYWJsZT1mdW5jdGlvbihhKXt0aGlzLmNvbHVtbnM9W10sdGhpcy5yb3dzPVtdfSxkLlRhYmxlLnByb3RvdHlwZS5hZGRSb3c9ZnVuY3Rpb24oYSl7dmFyIGI9YXx8bmV3IGQuVGFibGVSb3c7aWYodm9pZCAwPT09Yi5hcnJ8fHZvaWQgMD09PWIub2JqKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgVGFibGVSb3c6IFwiK2IpO3JldHVybiBiLnRhYmxlPXRoaXMsdGhpcy5yb3dzLnB1c2goYiksYn0sZC5UYWJsZS5wcm90b3R5cGUucmVtb3ZlUm93PWZ1bmN0aW9uKGEpe3RoaXMucm93c1thXS50YWJsZT1udWxsO3ZhciBiPXRoaXMucm93cy5zcGxpY2UoYSsxLHRoaXMucm93cy5sZW5ndGgpO3RoaXMucm93cy5wb3AoKSx0aGlzLnJvd3M9dGhpcy5yb3dzLmNvbmNhdChiKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0Um93PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvd3NbYV19LGQuVGFibGUucHJvdG90eXBlLmdldFJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3dzfSxkLlRhYmxlLnByb3RvdHlwZS5maW5kUm93PWZ1bmN0aW9uKGEsYil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGIpe2Zvcih2YXIgYz0wO2M8dGhpcy5yb3dzLmxlbmd0aDtjKyspaWYodGhpcy5yb3dzW2NdLm9ialtiXT09PWEpcmV0dXJuIHRoaXMucm93c1tjXX1lbHNlIGZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspaWYodGhpcy5yb3dzW2RdLmFycltiXT09PWEpcmV0dXJuIHRoaXMucm93c1tkXTtyZXR1cm4gbnVsbH0sZC5UYWJsZS5wcm90b3R5cGUuZmluZFJvd3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtpZihcInN0cmluZ1wiPT10eXBlb2YgYilmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKXRoaXMucm93c1tkXS5vYmpbYl09PT1hJiZjLnB1c2godGhpcy5yb3dzW2RdKTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5yb3dzLmxlbmd0aDtlKyspdGhpcy5yb3dzW2VdLmFycltiXT09PWEmJmMucHVzaCh0aGlzLnJvd3NbZV0pO3JldHVybiBjfSxkLlRhYmxlLnByb3RvdHlwZS5tYXRjaFJvdz1mdW5jdGlvbihhLGIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBiKXtmb3IodmFyIGM9MDtjPHRoaXMucm93cy5sZW5ndGg7YysrKWlmKHRoaXMucm93c1tjXS5hcnJbYl0ubWF0Y2goYSkpcmV0dXJuIHRoaXMucm93c1tjXX1lbHNlIGZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspaWYodGhpcy5yb3dzW2RdLm9ialtiXS5tYXRjaChhKSlyZXR1cm4gdGhpcy5yb3dzW2RdO3JldHVybiBudWxsfSxkLlRhYmxlLnByb3RvdHlwZS5tYXRjaFJvd3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtpZihcIm51bWJlclwiPT10eXBlb2YgYilmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKXRoaXMucm93c1tkXS5hcnJbYl0ubWF0Y2goYSkmJmMucHVzaCh0aGlzLnJvd3NbZF0pO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLnJvd3MubGVuZ3RoO2UrKyl0aGlzLnJvd3NbZV0ub2JqW2JdLm1hdGNoKGEpJiZjLnB1c2godGhpcy5yb3dzW2VdKTtyZXR1cm4gY30sZC5UYWJsZS5wcm90b3R5cGUuZ2V0Q29sdW1uPWZ1bmN0aW9uKGEpe3ZhciBiPVtdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhKWZvcih2YXIgYz0wO2M8dGhpcy5yb3dzLmxlbmd0aDtjKyspYi5wdXNoKHRoaXMucm93c1tjXS5vYmpbYV0pO2Vsc2UgZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKyliLnB1c2godGhpcy5yb3dzW2RdLmFyclthXSk7cmV0dXJuIGJ9LGQuVGFibGUucHJvdG90eXBlLmNsZWFyUm93cz1mdW5jdGlvbigpe2RlbGV0ZSB0aGlzLnJvd3MsdGhpcy5yb3dzPVtdfSxkLlRhYmxlLnByb3RvdHlwZS5hZGRDb2x1bW49ZnVuY3Rpb24oYSl7dmFyIGI9YXx8bnVsbDt0aGlzLmNvbHVtbnMucHVzaChiKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0Q29sdW1uQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2x1bW5zLmxlbmd0aH0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0Um93Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3dzLmxlbmd0aH0sZC5UYWJsZS5wcm90b3R5cGUucmVtb3ZlVG9rZW5zPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZyxcIlxcXFwkJlwiKX0sZD1bXSxlPTA7ZTxhLmxlbmd0aDtlKyspZC5wdXNoKGMoYS5jaGFyQXQoZSkpKTt2YXIgZj1uZXcgUmVnRXhwKGQuam9pbihcInxcIiksXCJnXCIpO2lmKHZvaWQgMD09PWIpZm9yKHZhciBnPTA7Zzx0aGlzLmNvbHVtbnMubGVuZ3RoO2crKylmb3IodmFyIGg9MDtoPHRoaXMucm93cy5sZW5ndGg7aCsrKXt2YXIgaT10aGlzLnJvd3NbaF0uYXJyW2ddO2k9aS5yZXBsYWNlKGYsXCJcIiksdGhpcy5yb3dzW2hdLmFycltnXT1pLHRoaXMucm93c1toXS5vYmpbdGhpcy5jb2x1bW5zW2ddXT1pfWVsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIGIpZm9yKHZhciBqPTA7ajx0aGlzLnJvd3MubGVuZ3RoO2orKyl7dmFyIGs9dGhpcy5yb3dzW2pdLm9ialtiXTtrPWsucmVwbGFjZShmLFwiXCIpLHRoaXMucm93c1tqXS5vYmpbYl09azt2YXIgbD10aGlzLmNvbHVtbnMuaW5kZXhPZihiKTt0aGlzLnJvd3Nbal0uYXJyW2xdPWt9ZWxzZSBmb3IodmFyIG09MDttPHRoaXMucm93cy5sZW5ndGg7bSsrKXt2YXIgbj10aGlzLnJvd3NbbV0uYXJyW2JdO249bi5yZXBsYWNlKGYsXCJcIiksdGhpcy5yb3dzW21dLmFycltiXT1uLHRoaXMucm93c1ttXS5vYmpbdGhpcy5jb2x1bW5zW2JdXT1ufX0sZC5UYWJsZS5wcm90b3R5cGUudHJpbT1mdW5jdGlvbihhKXt2YXIgYj1uZXcgUmVnRXhwKFwiIFwiLFwiZ1wiKTtpZih2b2lkIDA9PT1hKWZvcih2YXIgYz0wO2M8dGhpcy5jb2x1bW5zLmxlbmd0aDtjKyspZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKyl7dmFyIGU9dGhpcy5yb3dzW2RdLmFycltjXTtlPWUucmVwbGFjZShiLFwiXCIpLHRoaXMucm93c1tkXS5hcnJbY109ZSx0aGlzLnJvd3NbZF0ub2JqW3RoaXMuY29sdW1uc1tjXV09ZX1lbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBhKWZvcih2YXIgZj0wO2Y8dGhpcy5yb3dzLmxlbmd0aDtmKyspe3ZhciBnPXRoaXMucm93c1tmXS5vYmpbYV07Zz1nLnJlcGxhY2UoYixcIlwiKSx0aGlzLnJvd3NbZl0ub2JqW2FdPWc7dmFyIGg9dGhpcy5jb2x1bW5zLmluZGV4T2YoYSk7dGhpcy5yb3dzW2ZdLmFycltoXT1nfWVsc2UgZm9yKHZhciBpPTA7aTx0aGlzLnJvd3MubGVuZ3RoO2krKyl7dmFyIGo9dGhpcy5yb3dzW2ldLmFyclthXTtqPWoucmVwbGFjZShiLFwiXCIpLHRoaXMucm93c1tpXS5hcnJbYV09aix0aGlzLnJvd3NbaV0ub2JqW3RoaXMuY29sdW1uc1thXV09an19LGQuVGFibGUucHJvdG90eXBlLnJlbW92ZUNvbHVtbj1mdW5jdGlvbihhKXt2YXIgYixjO1wic3RyaW5nXCI9PXR5cGVvZiBhPyhiPWEsYz10aGlzLmNvbHVtbnMuaW5kZXhPZihhKSk6KGM9YSxiPXRoaXMuY29sdW1uc1thXSk7dmFyIGQ9dGhpcy5jb2x1bW5zLnNwbGljZShjKzEsdGhpcy5jb2x1bW5zLmxlbmd0aCk7dGhpcy5jb2x1bW5zLnBvcCgpLHRoaXMuY29sdW1ucz10aGlzLmNvbHVtbnMuY29uY2F0KGQpO2Zvcih2YXIgZT0wO2U8dGhpcy5yb3dzLmxlbmd0aDtlKyspe3ZhciBmPXRoaXMucm93c1tlXS5hcnIsZz1mLnNwbGljZShjKzEsZi5sZW5ndGgpO2YucG9wKCksdGhpcy5yb3dzW2VdLmFycj1mLmNvbmNhdChnKSxkZWxldGUgdGhpcy5yb3dzW2VdLm9ialtiXX19LGQuVGFibGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7dGhpcy5yb3dzW2FdLnNldChiLGMpfSxkLlRhYmxlLnByb3RvdHlwZS5zZXROdW09ZnVuY3Rpb24oYSxiLGMpe3RoaXMucm93c1thXS5zZXROdW0oYixjKX0sZC5UYWJsZS5wcm90b3R5cGUuc2V0U3RyaW5nPWZ1bmN0aW9uKGEsYixjKXt0aGlzLnJvd3NbYV0uc2V0U3RyaW5nKGIsYyl9LGQuVGFibGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnJvd3NbYV0uZ2V0KGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXROdW09ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5yb3dzW2FdLmdldE51bShiKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0U3RyaW5nPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucm93c1thXS5nZXRTdHJpbmcoYil9LGQuVGFibGUucHJvdG90eXBlLmdldE9iamVjdD1mdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkPXt9LGU9MDtlPHRoaXMucm93cy5sZW5ndGg7ZSsrKWlmKGI9dGhpcy5yb3dzW2VdLm9iaixcInN0cmluZ1wiPT10eXBlb2YgYSl7aWYoISh0aGlzLmNvbHVtbnMuaW5kZXhPZihhKT49MCkpdGhyb3cgbmV3IEVycm9yKCdUaGlzIHRhYmxlIGhhcyBubyBjb2x1bW4gbmFtZWQgXCInK2ErJ1wiJyk7Yz1iW2FdLGRbY109Yn1lbHNlIGRbZV09dGhpcy5yb3dzW2VdLm9iajtyZXR1cm4gZH0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0QXJyYXk9ZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sYj0wO2I8dGhpcy5yb3dzLmxlbmd0aDtiKyspYS5wdXNoKHRoaXMucm93c1tiXS5hcnIpO3JldHVybiBhfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw0OTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5UYWJsZVJvdz1mdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQ9e307YSYmKGI9Ynx8XCIsXCIsYz1hLnNwbGl0KGIpKTtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyl7dmFyIGY9ZSxnPWNbZV07ZFtmXT1nfXRoaXMuYXJyPWMsdGhpcy5vYmo9ZCx0aGlzLnRhYmxlPW51bGx9LGQuVGFibGVSb3cucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXt2YXIgYz10aGlzLnRhYmxlLmNvbHVtbnMuaW5kZXhPZihhKTtpZighKGM+PTApKXRocm93IG5ldyBFcnJvcignVGhpcyB0YWJsZSBoYXMgbm8gY29sdW1uIG5hbWVkIFwiJythKydcIicpO3RoaXMub2JqW2FdPWIsdGhpcy5hcnJbY109Yn1lbHNle2lmKCEoYTx0aGlzLnRhYmxlLmNvbHVtbnMubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IoXCJDb2x1bW4gI1wiK2ErXCIgaXMgb3V0IG9mIHRoZSByYW5nZSBvZiB0aGlzIHRhYmxlXCIpO3RoaXMuYXJyW2FdPWI7dmFyIGQ9dGhpcy50YWJsZS5jb2x1bW5zW2FdO3RoaXMub2JqW2RdPWJ9fSxkLlRhYmxlUm93LnByb3RvdHlwZS5zZXROdW09ZnVuY3Rpb24oYSxiKXt2YXIgYz1wYXJzZUZsb2F0KGIpO3RoaXMuc2V0KGEsYyl9LGQuVGFibGVSb3cucHJvdG90eXBlLnNldFN0cmluZz1mdW5jdGlvbihhLGIpe3ZhciBjPWIudG9TdHJpbmcoKTt0aGlzLnNldChhLGMpfSxkLlRhYmxlUm93LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGE/dGhpcy5vYmpbYV06dGhpcy5hcnJbYV19LGQuVGFibGVSb3cucHJvdG90eXBlLmdldE51bT1mdW5jdGlvbihhKXt2YXIgYjtpZihiPVwic3RyaW5nXCI9PXR5cGVvZiBhP3BhcnNlRmxvYXQodGhpcy5vYmpbYV0pOnBhcnNlRmxvYXQodGhpcy5hcnJbYV0pLFwiTmFOXCI9PT1iLnRvU3RyaW5nKCkpdGhyb3dcIkVycm9yOiBcIit0aGlzLm9ialthXStcIiBpcyBOYU4gKE5vdCBhIE51bWJlcilcIjtyZXR1cm4gYn0sZC5UYWJsZVJvdy5wcm90b3R5cGUuZ2V0U3RyaW5nPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhP3RoaXMub2JqW2FdLnRvU3RyaW5nKCk6dGhpcy5hcnJbYV0udG9TdHJpbmcoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuWE1MPWZ1bmN0aW9uKCl7dGhpcy5uYW1lPW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMuY2hpbGRyZW49W10sdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNvbnRlbnQ9bnVsbH0sZC5YTUwucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0sZC5YTUwucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lfSxkLlhNTC5wcm90b3R5cGUuc2V0TmFtZT1mdW5jdGlvbihhKXt0aGlzLm5hbWU9YX0sZC5YTUwucHJvdG90eXBlLmhhc0NoaWxkcmVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjB9LGQuWE1MLnByb3RvdHlwZS5saXN0Q2hpbGRyZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEubmFtZX0pfSxkLlhNTC5wcm90b3R5cGUuZ2V0Q2hpbGRyZW49ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIGIubmFtZT09PWF9KTp0aGlzLmNoaWxkcmVufSxkLlhNTC5wcm90b3R5cGUuZ2V0Q2hpbGQ9ZnVuY3Rpb24oYSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGEpcmV0dXJuIHRoaXMuY2hpbGRyZW5bYV07Zm9yKHZhciBiPTA7Yjx0aGlzLmNoaWxkcmVuLmxlbmd0aDtiKyspe3ZhciBjPXRoaXMuY2hpbGRyZW5bYl07aWYoYy5uYW1lPT09YSlyZXR1cm4gY319LGQuWE1MLnByb3RvdHlwZS5hZGRDaGlsZD1mdW5jdGlvbihhKXthIGluc3RhbmNlb2YgZC5YTUwmJnRoaXMuY2hpbGRyZW4ucHVzaChhKX0sZC5YTUwucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKGEpe3ZhciBiPS0xO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXtmb3IodmFyIGM9MDtjPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2MrKylpZih0aGlzLmNoaWxkcmVuW2NdLm5hbWU9PT1hKXtiPWM7YnJlYWt9fWVsc2UgYj1hOy0xIT09YiYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoYiwxKX0sZC5YTUwucHJvdG90eXBlLmdldEF0dHJpYnV0ZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcykubGVuZ3RofSxkLlhNTC5wcm90b3R5cGUubGlzdEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKX0sZC5YTUwucHJvdG90eXBlLmhhc0F0dHJpYnV0ZT1mdW5jdGlvbihhKXtyZXR1cm4hIXRoaXMuYXR0cmlidXRlc1thXX0sZC5YTUwucHJvdG90eXBlLmdldE51bT1mdW5jdGlvbihhLGIpe3JldHVybiBOdW1iZXIodGhpcy5hdHRyaWJ1dGVzW2FdKXx8Ynx8MH0sZC5YTUwucHJvdG90eXBlLmdldFN0cmluZz1mdW5jdGlvbihhLGIpe3JldHVybiBTdHJpbmcodGhpcy5hdHRyaWJ1dGVzW2FdKXx8Ynx8bnVsbH0sZC5YTUwucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbihhLGIpe3RoaXMuYXR0cmlidXRlc1thXSYmKHRoaXMuYXR0cmlidXRlc1thXT1iKX0sZC5YTUwucHJvdG90eXBlLmdldENvbnRlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY29udGVudHx8YXx8bnVsbH0sZC5YTUwucHJvdG90eXBlLnNldENvbnRlbnQ9ZnVuY3Rpb24oYSl7dGhpcy5jaGlsZHJlbi5sZW5ndGh8fCh0aGlzLmNvbnRlbnQ9YSl9LGQuWE1MLnByb3RvdHlwZS5fc2V0Q29udD1mdW5jdGlvbihhKXt2YXIgYjtiPWEsYj1iLnJlcGxhY2UoL1xcc1xccysvZyxcIixcIiksdGhpcy5jb250ZW50PWJ9LGQuWE1MLnByb3RvdHlwZS5fc2V0QXR0cmlidXRlcz1mdW5jdGlvbihhKXt2YXIgYj17fSxjPWEuYXR0cmlidXRlcztpZihjKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdO2JbZS5ub2RlTmFtZV09ZS5ub2RlVmFsdWV9dGhpcy5hdHRyaWJ1dGVzPWJ9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDUxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgTWF0aC5oeXBvdClyZXR1cm4gTWF0aC5oeXBvdC5hcHBseShudWxsLGFyZ3VtZW50cyk7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsZT1bXSxmPTAsZz0wO2c8ZDtnKyspe3ZhciBoPWFyZ3VtZW50c1tnXVxuO2lmKChoPStoKT09PTEvMHx8aD09PS0xLzApcmV0dXJuIDEvMDtoPU1hdGguYWJzKGgpLGg+ZiYmKGY9aCksZVtnXT1ofTA9PT1mJiYoZj0xKTtmb3IodmFyIGk9MCxqPTAsaz0wO2s8ZDtrKyspe3ZhciBsPWVba10vZixtPWwqbC1qLG49aSttO2o9bi1pLW0saT1ufXJldHVybiBNYXRoLnNxcnQoaSkqZn12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpO2UucHJvdG90eXBlLmFicz1NYXRoLmFicyxlLnByb3RvdHlwZS5jZWlsPU1hdGguY2VpbCxlLnByb3RvdHlwZS5jb25zdHJhaW49ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjb25zdHJhaW5cIixhcmd1bWVudHMpLE1hdGgubWF4KE1hdGgubWluKGEsYyksYil9LGUucHJvdG90eXBlLmRpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZGlzdFwiLGFyZ3VtZW50cyksND09PWFyZ3VtZW50cy5sZW5ndGg/ZChhcmd1bWVudHNbMl0tYXJndW1lbnRzWzBdLGFyZ3VtZW50c1szXS1hcmd1bWVudHNbMV0pOjY9PT1hcmd1bWVudHMubGVuZ3RoP2QoYXJndW1lbnRzWzNdLWFyZ3VtZW50c1swXSxhcmd1bWVudHNbNF0tYXJndW1lbnRzWzFdLGFyZ3VtZW50c1s1XS1hcmd1bWVudHNbMl0pOnZvaWQgMH0sZS5wcm90b3R5cGUuZXhwPU1hdGguZXhwLGUucHJvdG90eXBlLmZsb29yPU1hdGguZmxvb3IsZS5wcm90b3R5cGUubGVycD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxlcnBcIixhcmd1bWVudHMpLGMqKGItYSkrYX0sZS5wcm90b3R5cGUubG9nPU1hdGgubG9nLGUucHJvdG90eXBlLm1hZz1mdW5jdGlvbihhLGIpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYWdcIixhcmd1bWVudHMpLGQoYSxiKX0sZS5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKGEsYixjLGQsZixnKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYXBcIixhcmd1bWVudHMpO3ZhciBoPShhLWIpLyhjLWIpKihmLWQpK2Q7cmV0dXJuIGc/ZDxmP3RoaXMuY29uc3RyYWluKGgsZCxmKTp0aGlzLmNvbnN0cmFpbihoLGYsZCk6aH0sZS5wcm90b3R5cGUubWF4PWZ1bmN0aW9uKCl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1heFwiLGFyZ3VtZW50cyksYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBBcnJheT9NYXRoLm1heC5hcHBseShudWxsLGFyZ3VtZW50c1swXSk6TWF0aC5tYXguYXBwbHkobnVsbCxhcmd1bWVudHMpfSxlLnByb3RvdHlwZS5taW49ZnVuY3Rpb24oKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWluXCIsYXJndW1lbnRzKSxhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5P01hdGgubWluLmFwcGx5KG51bGwsYXJndW1lbnRzWzBdKTpNYXRoLm1pbi5hcHBseShudWxsLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlLm5vcm09ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJub3JtXCIsYXJndW1lbnRzKSx0aGlzLm1hcChhLGIsYywwLDEpfSxlLnByb3RvdHlwZS5wb3c9TWF0aC5wb3csZS5wcm90b3R5cGUucm91bmQ9TWF0aC5yb3VuZCxlLnByb3RvdHlwZS5zcT1mdW5jdGlvbihhKXtyZXR1cm4gYSphfSxlLnByb3RvdHlwZS5zcXJ0PU1hdGguc3FydCxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1MjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuY3JlYXRlVmVjdG9yPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGQ/bmV3IGQuVmVjdG9yKHRoaXMsYXJndW1lbnRzKTpuZXcgZC5WZWN0b3IoYSxiLGMpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1MzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkLGU9YShcIi4uL2NvcmUvbWFpblwiKSxmPTQsZz0xPDxmLGg9OCxpPTE8PGgsaj00MDk1LGs9NCxsPS41LG09ZnVuY3Rpb24oYSl7cmV0dXJuLjUqKDEtTWF0aC5jb3MoYSpNYXRoLlBJKSl9O2UucHJvdG90eXBlLm5vaXNlPWZ1bmN0aW9uKGEsYixjKXtpZihiPWJ8fDAsYz1jfHwwLG51bGw9PWQpe2Q9bmV3IEFycmF5KGorMSk7Zm9yKHZhciBlPTA7ZTxqKzE7ZSsrKWRbZV09TWF0aC5yYW5kb20oKX1hPDAmJihhPS1hKSxiPDAmJihiPS1iKSxjPDAmJihjPS1jKTtmb3IodmFyIG4sbyxwLHEscixzPU1hdGguZmxvb3IoYSksdD1NYXRoLmZsb29yKGIpLHU9TWF0aC5mbG9vcihjKSx2PWEtcyx3PWItdCx4PWMtdSx5PTAsej0uNSxBPTA7QTxrO0ErKyl7dmFyIEI9cysodDw8ZikrKHU8PGgpO249bSh2KSxvPW0odykscD1kW0Imal0scCs9biooZFtCKzEmal0tcCkscT1kW0IrZyZqXSxxKz1uKihkW0IrZysxJmpdLXEpLHArPW8qKHEtcCksQis9aSxxPWRbQiZqXSxxKz1uKihkW0IrMSZqXS1xKSxyPWRbQitnJmpdLHIrPW4qKGRbQitnKzEmal0tcikscSs9byooci1xKSxwKz1tKHgpKihxLXApLHkrPXAqeix6Kj1sLHM8PD0xLHYqPTIsdDw8PTEsdyo9Mix1PDw9MSx4Kj0yLHY+PTEmJihzKyssdi0tKSx3Pj0xJiYodCsrLHctLSkseD49MSYmKHUrKyx4LS0pfXJldHVybiB5fSxlLnByb3RvdHlwZS5ub2lzZURldGFpbD1mdW5jdGlvbihhLGIpe2E+MCYmKGs9YSksYj4wJiYobD1iKX0sZS5wcm90b3R5cGUubm9pc2VTZWVkPWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKCl7dmFyIGEsYixjPTQyOTQ5NjcyOTYsZD0xNjY0NTI1LGU9MTAxMzkwNDIyMztyZXR1cm57c2V0U2VlZDpmdW5jdGlvbihkKXtiPWE9KG51bGw9PWQ/TWF0aC5yYW5kb20oKSpjOmQpPj4+MH0sZ2V0U2VlZDpmdW5jdGlvbigpe3JldHVybiBhfSxyYW5kOmZ1bmN0aW9uKCl7cmV0dXJuKGI9KGQqYitlKSVjKS9jfX19KCk7Yi5zZXRTZWVkKGEpLGQ9bmV3IEFycmF5KGorMSk7Zm9yKHZhciBjPTA7YzxqKzE7YysrKWRbY109Yi5yYW5kKCl9LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDU0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLlZlY3Rvcj1mdW5jdGlvbigpe3ZhciBhLGIsYzthcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQ/KHRoaXMucDU9YXJndW1lbnRzWzBdLGE9YXJndW1lbnRzWzFdWzBdfHwwLGI9YXJndW1lbnRzWzFdWzFdfHwwLGM9YXJndW1lbnRzWzFdWzJdfHwwKTooYT1hcmd1bWVudHNbMF18fDAsYj1hcmd1bWVudHNbMV18fDAsYz1hcmd1bWVudHNbMl18fDApLHRoaXMueD1hLHRoaXMueT1iLHRoaXMuej1jfSxkLlZlY3Rvci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cInA1LlZlY3RvciBPYmplY3QgOiBbXCIrdGhpcy54K1wiLCBcIit0aGlzLnkrXCIsIFwiK3RoaXMueitcIl1cIn0sZC5WZWN0b3IucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj8odGhpcy54PWEueHx8MCx0aGlzLnk9YS55fHwwLHRoaXMuej1hLnp8fDAsdGhpcyk6YSBpbnN0YW5jZW9mIEFycmF5Pyh0aGlzLng9YVswXXx8MCx0aGlzLnk9YVsxXXx8MCx0aGlzLno9YVsyXXx8MCx0aGlzKToodGhpcy54PWF8fDAsdGhpcy55PWJ8fDAsdGhpcy56PWN8fDAsdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucDU/bmV3IGQuVmVjdG9yKHRoaXMucDUsW3RoaXMueCx0aGlzLnksdGhpcy56XSk6bmV3IGQuVmVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX0sZC5WZWN0b3IucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj8odGhpcy54Kz1hLnh8fDAsdGhpcy55Kz1hLnl8fDAsdGhpcy56Kz1hLnp8fDAsdGhpcyk6YSBpbnN0YW5jZW9mIEFycmF5Pyh0aGlzLngrPWFbMF18fDAsdGhpcy55Kz1hWzFdfHwwLHRoaXMueis9YVsyXXx8MCx0aGlzKToodGhpcy54Kz1hfHwwLHRoaXMueSs9Ynx8MCx0aGlzLnorPWN8fDAsdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KHRoaXMueC09YS54fHwwLHRoaXMueS09YS55fHwwLHRoaXMuei09YS56fHwwLHRoaXMpOmEgaW5zdGFuY2VvZiBBcnJheT8odGhpcy54LT1hWzBdfHwwLHRoaXMueS09YVsxXXx8MCx0aGlzLnotPWFbMl18fDAsdGhpcyk6KHRoaXMueC09YXx8MCx0aGlzLnktPWJ8fDAsdGhpcy56LT1jfHwwLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUubXVsdD1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYSYmaXNGaW5pdGUoYSk/KHRoaXMueCo9YSx0aGlzLnkqPWEsdGhpcy56Kj1hLHRoaXMpOihjb25zb2xlLndhcm4oXCJwNS5WZWN0b3IucHJvdG90eXBlLm11bHQ6XCIsXCJuIGlzIHVuZGVmaW5lZCBvciBub3QgYSBmaW5pdGUgbnVtYmVyXCIpLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhJiZpc0Zpbml0ZShhKT8wPT09YT8oY29uc29sZS53YXJuKFwicDUuVmVjdG9yLnByb3RvdHlwZS5kaXY6XCIsXCJkaXZpZGUgYnkgMFwiKSx0aGlzKToodGhpcy54Lz1hLHRoaXMueS89YSx0aGlzLnovPWEsdGhpcyk6KGNvbnNvbGUud2FybihcInA1LlZlY3Rvci5wcm90b3R5cGUuZGl2OlwiLFwibiBpcyB1bmRlZmluZWQgb3Igbm90IGEgZmluaXRlIG51bWJlclwiKSx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLm1hZz1mdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy5tYWdTcSgpKX0sZC5WZWN0b3IucHJvdG90eXBlLm1hZ1NxPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy54LGI9dGhpcy55LGM9dGhpcy56O3JldHVybiBhKmErYipiK2MqY30sZC5WZWN0b3IucHJvdG90eXBlLmRvdD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj90aGlzLmRvdChhLngsYS55LGEueik6dGhpcy54KihhfHwwKSt0aGlzLnkqKGJ8fDApK3RoaXMueiooY3x8MCl9LGQuVmVjdG9yLnByb3RvdHlwZS5jcm9zcz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnkqYS56LXRoaXMueiphLnksYz10aGlzLnoqYS54LXRoaXMueCphLnosZT10aGlzLngqYS55LXRoaXMueSphLng7cmV0dXJuIHRoaXMucDU/bmV3IGQuVmVjdG9yKHRoaXMucDUsW2IsYyxlXSk6bmV3IGQuVmVjdG9yKGIsYyxlKX0sZC5WZWN0b3IucHJvdG90eXBlLmRpc3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY29weSgpLnN1Yih0aGlzKS5tYWcoKX0sZC5WZWN0b3IucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMubWFnKCk7cmV0dXJuIDAhPT1hJiZ0aGlzLm11bHQoMS9hKSx0aGlzfSxkLlZlY3Rvci5wcm90b3R5cGUubGltaXQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5tYWdTcSgpO3JldHVybiBiPmEqYSYmdGhpcy5kaXYoTWF0aC5zcXJ0KGIpKS5tdWx0KGEpLHRoaXN9LGQuVmVjdG9yLnByb3RvdHlwZS5zZXRNYWc9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdChhKX0sZC5WZWN0b3IucHJvdG90eXBlLmhlYWRpbmc9ZnVuY3Rpb24oKXt2YXIgYT1NYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpO3JldHVybiB0aGlzLnA1P3RoaXMucDUuX2Zyb21SYWRpYW5zKGEpOmF9LGQuVmVjdG9yLnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5oZWFkaW5nKCkrYTt0aGlzLnA1JiYoYj10aGlzLnA1Ll90b1JhZGlhbnMoYikpO3ZhciBjPXRoaXMubWFnKCk7cmV0dXJuIHRoaXMueD1NYXRoLmNvcyhiKSpjLHRoaXMueT1NYXRoLnNpbihiKSpjLHRoaXN9LGQuVmVjdG9yLnByb3RvdHlwZS5hbmdsZUJldHdlZW49ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kb3QoYSkvKHRoaXMubWFnKCkqYS5tYWcoKSksYz1NYXRoLmFjb3MoTWF0aC5taW4oMSxNYXRoLm1heCgtMSxiKSkpO3JldHVybiB0aGlzLnA1P3RoaXMucDUuX2Zyb21SYWRpYW5zKGMpOmN9LGQuVmVjdG9yLnByb3RvdHlwZS5sZXJwPWZ1bmN0aW9uKGEsYixjLGUpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/dGhpcy5sZXJwKGEueCxhLnksYS56LGIpOih0aGlzLngrPShhLXRoaXMueCkqZXx8MCx0aGlzLnkrPShiLXRoaXMueSkqZXx8MCx0aGlzLnorPShjLXRoaXMueikqZXx8MCx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLmFycmF5PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMueHx8MCx0aGlzLnl8fDAsdGhpcy56fHwwXX0sZC5WZWN0b3IucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihhLGIsYyl7dmFyIGUsZixnO3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KGU9YS54fHwwLGY9YS55fHwwLGc9YS56fHwwKTphIGluc3RhbmNlb2YgQXJyYXk/KGU9YVswXXx8MCxmPWFbMV18fDAsZz1hWzJdfHwwKTooZT1hfHwwLGY9Ynx8MCxnPWN8fDApLHRoaXMueD09PWUmJnRoaXMueT09PWYmJnRoaXMuej09PWd9LGQuVmVjdG9yLmZyb21BbmdsZT1mdW5jdGlvbihhLGIpe3JldHVybiB2b2lkIDA9PT1iJiYoYj0xKSxuZXcgZC5WZWN0b3IoYipNYXRoLmNvcyhhKSxiKk1hdGguc2luKGEpLDApfSxkLlZlY3Rvci5mcm9tQW5nbGVzPWZ1bmN0aW9uKGEsYixjKXt2b2lkIDA9PT1jJiYoYz0xKTt2YXIgZT1NYXRoLmNvcyhiKSxmPU1hdGguc2luKGIpLGc9TWF0aC5jb3MoYSksaD1NYXRoLnNpbihhKTtyZXR1cm4gbmV3IGQuVmVjdG9yKGMqaCpmLC1jKmcsYypoKmUpfSxkLlZlY3Rvci5yYW5kb20yRD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZyb21BbmdsZShNYXRoLnJhbmRvbSgpKmUuVFdPX1BJKX0sZC5WZWN0b3IucmFuZG9tM0Q9ZnVuY3Rpb24oKXt2YXIgYT1NYXRoLnJhbmRvbSgpKmUuVFdPX1BJLGI9MipNYXRoLnJhbmRvbSgpLTEsYz1NYXRoLnNxcnQoMS1iKmIpLGY9YypNYXRoLmNvcyhhKSxnPWMqTWF0aC5zaW4oYSk7cmV0dXJuIG5ldyBkLlZlY3RvcihmLGcsYil9LGQuVmVjdG9yLmFkZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/Yy5zZXQoYSk6Yz1hLmNvcHkoKSxjLmFkZChiKSxjfSxkLlZlY3Rvci5zdWI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP2Muc2V0KGEpOmM9YS5jb3B5KCksYy5zdWIoYiksY30sZC5WZWN0b3IubXVsdD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/Yy5zZXQoYSk6Yz1hLmNvcHkoKSxjLm11bHQoYiksY30sZC5WZWN0b3IuZGl2PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz9jLnNldChhKTpjPWEuY29weSgpLGMuZGl2KGIpLGN9LGQuVmVjdG9yLmRvdD1mdW5jdGlvbihhLGIpe3JldHVybiBhLmRvdChiKX0sZC5WZWN0b3IuY3Jvc3M9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5jcm9zcyhiKX0sZC5WZWN0b3IuZGlzdD1mdW5jdGlvbihhLGIpe3JldHVybiBhLmRpc3QoYil9LGQuVmVjdG9yLmxlcnA9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGQ/ZC5zZXQoYSk6ZD1hLmNvcHkoKSxkLmxlcnAoYixjKSxkfSxkLlZlY3Rvci5tYWc9ZnVuY3Rpb24oYSl7dmFyIGI9YS54LGM9YS55LGQ9YS56LGU9YipiK2MqYytkKmQ7cmV0dXJuIE1hdGguc3FydChlKX0sYi5leHBvcnRzPWQuVmVjdG9yfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw1NTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT0hMSxmPSExLGc9MCxoPWZ1bmN0aW9uKCl7dmFyIGEsYixjPTQyOTQ5NjcyOTYsZD0xNjY0NTI1LGU9MTAxMzkwNDIyMztyZXR1cm57c2V0U2VlZDpmdW5jdGlvbihkKXtiPWE9KG51bGw9PWQ/TWF0aC5yYW5kb20oKSpjOmQpPj4+MH0sZ2V0U2VlZDpmdW5jdGlvbigpe3JldHVybiBhfSxyYW5kOmZ1bmN0aW9uKCl7cmV0dXJuKGI9KGQqYitlKSVjKS9jfX19KCk7ZC5wcm90b3R5cGUucmFuZG9tU2VlZD1mdW5jdGlvbihhKXtoLnNldFNlZWQoYSksZT0hMCxmPSExfSxkLnByb3RvdHlwZS5yYW5kb209ZnVuY3Rpb24oYSxiKXt2YXIgYztpZihjPWU/aC5yYW5kKCk6TWF0aC5yYW5kb20oKSx2b2lkIDA9PT1hKXJldHVybiBjO2lmKHZvaWQgMD09PWIpcmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hW01hdGguZmxvb3IoYyphLmxlbmd0aCldOmMqYTtpZihhPmIpe3ZhciBkPWE7YT1iLGI9ZH1yZXR1cm4gYyooYi1hKSthfSxkLnByb3RvdHlwZS5yYW5kb21HYXVzc2lhbj1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxoO2lmKGYpYz1nLGY9ITE7ZWxzZXtkb3tkPXRoaXMucmFuZG9tKDIpLTEsZT10aGlzLnJhbmRvbSgyKS0xLGg9ZCpkK2UqZX13aGlsZShoPj0xKTtoPU1hdGguc3FydCgtMipNYXRoLmxvZyhoKS9oKSxjPWQqaCxnPWUqaCxmPSEwfXZhciBpPWF8fDA7cmV0dXJuIGMqKGJ8fDEpK2l9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDU2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLnByb3RvdHlwZS5fYW5nbGVNb2RlPWUuUkFESUFOUyxkLnByb3RvdHlwZS5hY29zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9mcm9tUmFkaWFucyhNYXRoLmFjb3MoYSkpfSxkLnByb3RvdHlwZS5hc2luPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9mcm9tUmFkaWFucyhNYXRoLmFzaW4oYSkpfSxkLnByb3RvdHlwZS5hdGFuPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9mcm9tUmFkaWFucyhNYXRoLmF0YW4oYSkpfSxkLnByb3RvdHlwZS5hdGFuMj1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9mcm9tUmFkaWFucyhNYXRoLmF0YW4yKGEsYikpfSxkLnByb3RvdHlwZS5jb3M9ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguY29zKHRoaXMuX3RvUmFkaWFucyhhKSl9LGQucHJvdG90eXBlLnNpbj1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5zaW4odGhpcy5fdG9SYWRpYW5zKGEpKX0sZC5wcm90b3R5cGUudGFuPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnRhbih0aGlzLl90b1JhZGlhbnMoYSkpfSxkLnByb3RvdHlwZS5kZWdyZWVzPWZ1bmN0aW9uKGEpe3JldHVybiBhKmUuUkFEX1RPX0RFR30sZC5wcm90b3R5cGUucmFkaWFucz1mdW5jdGlvbihhKXtyZXR1cm4gYSplLkRFR19UT19SQUR9LGQucHJvdG90eXBlLmFuZ2xlTW9kZT1mdW5jdGlvbihhKXthIT09ZS5ERUdSRUVTJiZhIT09ZS5SQURJQU5TfHwodGhpcy5fYW5nbGVNb2RlPWEpfSxkLnByb3RvdHlwZS5fdG9SYWRpYW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hbmdsZU1vZGU9PT1lLkRFR1JFRVM/YSplLkRFR19UT19SQUQ6YX0sZC5wcm90b3R5cGUuX3RvRGVncmVlcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYW5nbGVNb2RlPT09ZS5SQURJQU5TP2EqZS5SQURfVE9fREVHOmF9LGQucHJvdG90eXBlLl9mcm9tUmFkaWFucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYW5nbGVNb2RlPT09ZS5ERUdSRUVTP2EqZS5SQURfVE9fREVHOmF9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw1NzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUudGV4dEFsaWduPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRBbGlnblwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dEFsaWduLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRMZWFkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0TGVhZGluZ1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dExlYWRpbmcuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dFNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRTaXplXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0U2l6ZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0U3R5bGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRTdHlsZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dFN0eWxlLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRXaWR0aD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dFdpZHRoXCIsYXJndW1lbnRzKSwwPT09YS5sZW5ndGg/MDp0aGlzLl9yZW5kZXJlci50ZXh0V2lkdGguYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dEFzY2VudD1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0QXNjZW50XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0QXNjZW50KCl9LGQucHJvdG90eXBlLnRleHREZXNjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHREZXNjZW50XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0RGVzY2VudCgpfSxkLnByb3RvdHlwZS5fdXBkYXRlVGV4dE1ldHJpY3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3VwZGF0ZVRleHRNZXRyaWNzKCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDU4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKSxmPWEoXCJvcGVudHlwZS5qc1wiKTthKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGQucHJvdG90eXBlLmxvYWRGb250PWZ1bmN0aW9uKGEsYixjKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkRm9udFwiLGFyZ3VtZW50cyk7dmFyIGU9bmV3IGQuRm9udCh0aGlzKSxnPXRoaXM7cmV0dXJuIGYubG9hZChhLGZ1bmN0aW9uKGYsaCl7aWYoZilyZXR1cm4gdm9pZCAwIT09Yz9jKGYpOihkLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoNCxhKSx2b2lkIGNvbnNvbGUuZXJyb3IoZixhKSk7ZS5mb250PWgsdm9pZCAwIT09YiYmYihlKSxnLl9kZWNyZW1lbnRQcmVsb2FkKCk7dmFyIGksaixrPVtcInR0ZlwiLFwib3RmXCIsXCJ3b2ZmXCIsXCJ3b2ZmMlwiXSxsPWEuc3BsaXQoXCJcXFxcXCIpLnBvcCgpLnNwbGl0KFwiL1wiKS5wb3AoKSxtPWwubGFzdEluZGV4T2YoXCIuXCIpLG49bTwxP251bGw6bC5zdWJzdHIobSsxKTtrLmluZGV4T2Yobik+LTEmJihpPWwuc3Vic3RyKDAsbSksaj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIiksai5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlxcbkBmb250LWZhY2Uge1xcbmZvbnQtZmFtaWx5OiBcIitpK1wiO1xcbnNyYzogdXJsKFwiK2ErXCIpO1xcbn1cXG5cIikpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaikpfSksZX0sZC5wcm90b3R5cGUudGV4dD1mdW5jdGlvbihhLGIsYyxlLGYpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9GaWxsfHx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2U/dGhpcy5fcmVuZGVyZXIudGV4dC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpOnRoaXN9LGQucHJvdG90eXBlLnRleHRGb250PWZ1bmN0aW9uKGEsYil7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dEZvbnRcIixhcmd1bWVudHMpLGFyZ3VtZW50cy5sZW5ndGgpe2lmKCFhKXRocm93IG5ldyBFcnJvcihcIm51bGwgZm9udCBwYXNzZWQgdG8gdGV4dEZvbnRcIik7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl90ZXh0Rm9udFwiLGEpLGImJih0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfdGV4dFNpemVcIixiKSx0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfdGV4dExlYWRpbmdcIixiKmUuX0RFRkFVTFRfTEVBRE1VTFQpKSx0aGlzLl9yZW5kZXJlci5fYXBwbHlUZXh0UHJvcGVydGllcygpfXJldHVybiB0aGlzLl9yZW5kZXJlci5fdGV4dEZvbnR9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9jb3JlL21haW5cIjoyNCxcIm9wZW50eXBlLmpzXCI6MTB9XSw1OTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiKXtmb3IodmFyIGM9aChiLHtzYW1wbGVGYWN0b3I6LjEsc2ltcGxpZnlUaHJlc2hvbGQ6MH0pLGQ9bihhLDAsMSksZj1kLyhkKmMuc2FtcGxlRmFjdG9yKSxnPVtdLGk9MDtpPGQ7aSs9ZilnLnB1c2gobihhLGkpKTtyZXR1cm4gYy5zaW1wbGlmeVRocmVzaG9sZCYmZShnLGMuc2ltcGxpZnlUaHJlc2hvbGQpLGd9ZnVuY3Rpb24gZShhLGIpe2I9dm9pZCAwPT09Yj8wOmI7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aC0xO2EubGVuZ3RoPjMmJmQ+PTA7LS1kKWooaShhLGQtMSksaShhLGQpLGkoYSxkKzEpLGIpJiYoYS5zcGxpY2UoZCVhLmxlbmd0aCwxKSxjKyspO3JldHVybiBjfWZ1bmN0aW9uIGYoYSl7Zm9yKHZhciBiLGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCsrKVwiTVwiPT09YVtkXS50eXBlJiYoYiYmYy5wdXNoKGIpLGI9W10pLGIucHVzaChnKGFbZF0pKTtyZXR1cm4gYy5wdXNoKGIpLGN9ZnVuY3Rpb24gZyhhKXt2YXIgYj1bYS50eXBlXTtyZXR1cm5cIk1cIj09PWEudHlwZXx8XCJMXCI9PT1hLnR5cGU/Yi5wdXNoKGEueCxhLnkpOlwiQ1wiPT09YS50eXBlP2IucHVzaChhLngxLGEueTEsYS54MixhLnkyLGEueCxhLnkpOlwiUVwiPT09YS50eXBlJiZiLnB1c2goYS54MSxhLnkxLGEueCxhLnkpLGJ9ZnVuY3Rpb24gaChhLGIpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiBhKWE9YjtlbHNlIGZvcih2YXIgYyBpbiBiKXZvaWQgMD09PWFbY10mJihhW2NdPWJbY10pO3JldHVybiBhfWZ1bmN0aW9uIGkoYSxiKXt2YXIgYz1hLmxlbmd0aDtyZXR1cm4gYVtiPDA/YiVjK2M6YiVjXX1mdW5jdGlvbiBqKGEsYixjLGQpe2lmKCFkKXJldHVybiAwPT09ayhhLGIsYyk7dm9pZCAwPT09ai50bXBQb2ludDEmJihqLnRtcFBvaW50MT1bXSxqLnRtcFBvaW50Mj1bXSk7dmFyIGU9ai50bXBQb2ludDEsZj1qLnRtcFBvaW50MjtlLng9Yi54LWEueCxlLnk9Yi55LWEueSxmLng9Yy54LWIueCxmLnk9Yy55LWIueTt2YXIgZz1lLngqZi54K2UueSpmLnksaD1NYXRoLnNxcnQoZS54KmUueCtlLnkqZS55KSxpPU1hdGguc3FydChmLngqZi54K2YueSpmLnkpO3JldHVybiBNYXRoLmFjb3MoZy8oaCppKSk8ZH1mdW5jdGlvbiBrKGEsYixjKXtyZXR1cm4oYlswXS1hWzBdKSooY1sxXS1hWzFdKS0oY1swXS1hWzBdKSooYlsxXS1hWzFdKX1mdW5jdGlvbiBsKGEsYixjLGQsZSxmLGcsaCxpKXt2YXIgaj0xLWksaz1NYXRoLnBvdyhqLDMpLGw9TWF0aC5wb3coaiwyKSxtPWkqaSxuPW0qaSxvPWsqYSszKmwqaSpjKzMqaippKmkqZStuKmcscD1rKmIrMypsKmkqZCszKmoqaSppKmYrbipoLHE9YSsyKmkqKGMtYSkrbSooZS0yKmMrYSkscj1iKzIqaSooZC1iKSttKihmLTIqZCtiKSxzPWMrMippKihlLWMpK20qKGctMiplK2MpLHQ9ZCsyKmkqKGYtZCkrbSooaC0yKmYrZCksdT1qKmEraSpjLHY9aipiK2kqZCx3PWoqZStpKmcseD1qKmYraSpoLHk9OTAtMTgwKk1hdGguYXRhbjIocS1zLHItdCkvTWF0aC5QSTtyZXR1cm4ocT5zfHxyPHQpJiYoeSs9MTgwKSx7eDpvLHk6cCxtOnt4OnEseTpyfSxuOnt4OnMseTp0fSxzdGFydDp7eDp1LHk6dn0sZW5kOnt4OncseTp4fSxhbHBoYTp5fX1mdW5jdGlvbiBtKGEsYixjLGQsZSxmLGcsaCxpKXtyZXR1cm4gbnVsbD09aT91KGEsYixjLGQsZSxmLGcsaCk6bChhLGIsYyxkLGUsZixnLGgsdihhLGIsYyxkLGUsZixnLGgsaSkpfWZ1bmN0aW9uIG4oYSxiLGMpe2E9cChhKTtmb3IodmFyIGQsZSxmLGcsaCxpPVwiXCIsaj17fSxrPTAsbj0wLG89YS5sZW5ndGg7bjxvO24rKyl7aWYoZj1hW25dLFwiTVwiPT09ZlswXSlkPStmWzFdLGU9K2ZbMl07ZWxzZXtpZihnPW0oZCxlLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSxmWzZdKSxrK2c+YiYmIWMpcmV0dXJuIGg9bShkLGUsZlsxXSxmWzJdLGZbM10sZls0XSxmWzVdLGZbNl0sYi1rKSx7eDpoLngseTpoLnksYWxwaGE6aC5hbHBoYX07ays9ZyxkPStmWzVdLGU9K2ZbNl19aSs9Zi5zaGlmdCgpK2Z9cmV0dXJuIGouZW5kPWksaD1jP2s6bChkLGUsZlswXSxmWzFdLGZbMl0sZlszXSxmWzRdLGZbNV0sMSksaC5hbHBoYSYmKGg9e3g6aC54LHk6aC55LGFscGhhOmguYWxwaGF9KSxofWZ1bmN0aW9uIG8oYSl7dmFyIGI9W10sYz0wLGQ9MCxlPTAsZj0wLGc9MDtpZighYSlyZXR1cm4gYjtcIk1cIj09PWFbMF1bMF0mJihjPSthWzBdWzFdLGQ9K2FbMF1bMl0sZT1jLGY9ZCxnKyssYlswXT1bXCJNXCIsYyxkXSk7Zm9yKHZhciBoLGksaixrPTM9PT1hLmxlbmd0aCYmXCJNXCI9PT1hWzBdWzBdJiZcIlJcIj09PWFbMV1bMF0udG9VcHBlckNhc2UoKSYmXCJaXCI9PT1hWzJdWzBdLnRvVXBwZXJDYXNlKCksbD1nLG09YS5sZW5ndGg7bDxtO2wrKyl7aWYoYi5wdXNoKGk9W10pLGo9YVtsXSxqWzBdIT09U3RyaW5nLnByb3RvdHlwZS50b1VwcGVyQ2FzZS5jYWxsKGpbMF0pKXN3aXRjaChpWzBdPVN0cmluZy5wcm90b3R5cGUudG9VcHBlckNhc2UuY2FsbChqWzBdKSxpWzBdKXtjYXNlXCJBXCI6aVsxXT1qWzFdLGlbMl09alsyXSxpWzNdPWpbM10saVs0XT1qWzRdLGlbNV09als1XSxpWzZdPSsoals2XStjKSxpWzddPSsoals3XStkKTticmVhaztjYXNlXCJWXCI6aVsxXT0ralsxXStkO2JyZWFrO2Nhc2VcIkhcIjppWzFdPStqWzFdK2M7YnJlYWs7Y2FzZVwiUlwiOmg9W2MsZF0uY29uY2F0KGouc2xpY2UoMSkpO2Zvcih2YXIgbj0yLG89aC5sZW5ndGg7bjxvO24rKyloW25dPStoW25dK2MsaFsrK25dPStoW25dK2Q7Yi5wb3AoKSxiPWIuY29uY2F0KHIoaCxrKSk7YnJlYWs7Y2FzZVwiTVwiOmU9K2pbMV0rYyxmPStqWzJdK2Q7YnJlYWs7ZGVmYXVsdDpmb3Iobj0xLG89ai5sZW5ndGg7bjxvO24rKylpW25dPStqW25dKyhuJTI/YzpkKX1lbHNlIGlmKFwiUlwiPT09alswXSloPVtjLGRdLmNvbmNhdChqLnNsaWNlKDEpKSxiLnBvcCgpLGI9Yi5jb25jYXQocihoLGspKSxpPVtcIlJcIl0uY29uY2F0KGouc2xpY2UoLTIpKTtlbHNlIGZvcih2YXIgcD0wLHE9ai5sZW5ndGg7cDxxO3ArKylpW3BdPWpbcF07c3dpdGNoKGlbMF0pe2Nhc2VcIlpcIjpjPWUsZD1mO2JyZWFrO2Nhc2VcIkhcIjpjPWlbMV07YnJlYWs7Y2FzZVwiVlwiOmQ9aVsxXTticmVhaztjYXNlXCJNXCI6ZT1pW2kubGVuZ3RoLTJdLGY9aVtpLmxlbmd0aC0xXTticmVhaztkZWZhdWx0OmM9aVtpLmxlbmd0aC0yXSxkPWlbaS5sZW5ndGgtMV19fXJldHVybiBifWZ1bmN0aW9uIHAoYSxiKXt2YXIgYyxkPW8oYSksZT1iJiZvKGIpLGY9e3g6MCx5OjAsYng6MCxieTowLFg6MCxZOjAscXg6bnVsbCxxeTpudWxsfSxnPXt4OjAseTowLGJ4OjAsYnk6MCxYOjAsWTowLHF4Om51bGwscXk6bnVsbH0saD1bXSxpPVtdLGo9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj17VDoxLFE6MX07aWYoIWEpcmV0dXJuW1wiQ1wiLGIueCxiLnksYi54LGIueSxiLngsYi55XTtzd2l0Y2goYVswXWluIGZ8fChiLnF4PWIucXk9bnVsbCksYVswXSl7Y2FzZVwiTVwiOmIuWD1hWzFdLGIuWT1hWzJdO2JyZWFrO2Nhc2VcIkFcIjphPVtcIkNcIl0uY29uY2F0KHEuYXBwbHkoMCxbYi54LGIueV0uY29uY2F0KGEuc2xpY2UoMSkpKSk7YnJlYWs7Y2FzZVwiU1wiOlwiQ1wiPT09Y3x8XCJTXCI9PT1jPyhkPTIqYi54LWIuYngsZT0yKmIueS1iLmJ5KTooZD1iLngsZT1iLnkpLGE9W1wiQ1wiLGQsZV0uY29uY2F0KGEuc2xpY2UoMSkpO2JyZWFrO2Nhc2VcIlRcIjpcIlFcIj09PWN8fFwiVFwiPT09Yz8oYi5xeD0yKmIueC1iLnF4LGIucXk9MipiLnktYi5xeSk6KGIucXg9Yi54LGIucXk9Yi55KSxhPVtcIkNcIl0uY29uY2F0KHQoYi54LGIueSxiLnF4LGIucXksYVsxXSxhWzJdKSk7YnJlYWs7Y2FzZVwiUVwiOmIucXg9YVsxXSxiLnF5PWFbMl0sYT1bXCJDXCJdLmNvbmNhdCh0KGIueCxiLnksYVsxXSxhWzJdLGFbM10sYVs0XSkpO2JyZWFrO2Nhc2VcIkxcIjphPVtcIkNcIl0uY29uY2F0KHMoYi54LGIueSxhWzFdLGFbMl0pKTticmVhaztjYXNlXCJIXCI6YT1bXCJDXCJdLmNvbmNhdChzKGIueCxiLnksYVsxXSxiLnkpKTticmVhaztjYXNlXCJWXCI6YT1bXCJDXCJdLmNvbmNhdChzKGIueCxiLnksYi54LGFbMV0pKTticmVhaztjYXNlXCJaXCI6YT1bXCJDXCJdLmNvbmNhdChzKGIueCxiLnksYi5YLGIuWSkpfXJldHVybiBhfSxrPWZ1bmN0aW9uKGEsYil7aWYoYVtiXS5sZW5ndGg+Nyl7YVtiXS5zaGlmdCgpO2Zvcih2YXIgZj1hW2JdO2YubGVuZ3RoOyloW2JdPVwiQVwiLGUmJihpW2JdPVwiQVwiKSxhLnNwbGljZShiKyssMCxbXCJDXCJdLmNvbmNhdChmLnNwbGljZSgwLDYpKSk7YS5zcGxpY2UoYiwxKSxjPU1hdGgubWF4KGQubGVuZ3RoLGUmJmUubGVuZ3RofHwwKX19LGw9ZnVuY3Rpb24oYSxiLGYsZyxoKXthJiZiJiZcIk1cIj09PWFbaF1bMF0mJlwiTVwiIT09YltoXVswXSYmKGIuc3BsaWNlKGgsMCxbXCJNXCIsZy54LGcueV0pLGYuYng9MCxmLmJ5PTAsZi54PWFbaF1bMV0sZi55PWFbaF1bMl0sYz1NYXRoLm1heChkLmxlbmd0aCxlJiZlLmxlbmd0aHx8MCkpfSxtPVwiXCIsbj1cIlwiO2M9TWF0aC5tYXgoZC5sZW5ndGgsZSYmZS5sZW5ndGh8fDApO2Zvcih2YXIgcD0wO3A8YztwKyspe2RbcF0mJihtPWRbcF1bMF0pLFwiQ1wiIT09bSYmKGhbcF09bSxwJiYobj1oW3AtMV0pKSxkW3BdPWooZFtwXSxmLG4pLFwiQVwiIT09aFtwXSYmXCJDXCI9PT1tJiYoaFtwXT1cIkNcIiksayhkLHApLGUmJihlW3BdJiYobT1lW3BdWzBdKSxcIkNcIiE9PW0mJihpW3BdPW0scCYmKG49aVtwLTFdKSksZVtwXT1qKGVbcF0sZyxuKSxcIkFcIiE9PWlbcF0mJlwiQ1wiPT09bSYmKGlbcF09XCJDXCIpLGsoZSxwKSksbChkLGUsZixnLHApLGwoZSxkLGcsZixwKTt2YXIgcj1kW3BdLHU9ZSYmZVtwXSx2PXIubGVuZ3RoLHc9ZSYmdS5sZW5ndGg7Zi54PXJbdi0yXSxmLnk9clt2LTFdLGYuYng9cGFyc2VGbG9hdChyW3YtNF0pfHxmLngsZi5ieT1wYXJzZUZsb2F0KHJbdi0zXSl8fGYueSxnLmJ4PWUmJihwYXJzZUZsb2F0KHVbdy00XSl8fGcueCksZy5ieT1lJiYocGFyc2VGbG9hdCh1W3ctM10pfHxnLnkpLGcueD1lJiZ1W3ctMl0sZy55PWUmJnVbdy0xXX1yZXR1cm4gZT9bZCxlXTpkfWZ1bmN0aW9uIHEoYSxiLGMsZCxlLGYsZyxoLGksail7dmFyIGssbCxtLG4sbyxwPU1hdGguUEkscj0xMjAqcC8xODAscz1wLzE4MCooK2V8fDApLHQ9W10sdT1mdW5jdGlvbihhLGIsYyl7cmV0dXJue3g6YSpNYXRoLmNvcyhjKS1iKk1hdGguc2luKGMpLHk6YSpNYXRoLnNpbihjKStiKk1hdGguY29zKGMpfX07aWYoailrPWpbMF0sbD1qWzFdLG09alsyXSxuPWpbM107ZWxzZXtvPXUoYSxiLC1zKSxhPW8ueCxiPW8ueSxvPXUoaCxpLC1zKSxoPW8ueCxpPW8ueTt2YXIgdj0oYS1oKS8yLHc9KGItaSkvMix4PXYqdi8oYypjKSt3KncvKGQqZCk7eD4xJiYoeD1NYXRoLnNxcnQoeCksYyo9eCxkKj14KTt2YXIgeT1jKmMsej1kKmQsQT0oZj09PWc/LTE6MSkqTWF0aC5zcXJ0KE1hdGguYWJzKCh5KnoteSp3Kncteip2KnYpLyh5Kncqdyt6KnYqdikpKTttPUEqYyp3L2QrKGEraCkvMixuPUEqLWQqdi9jKyhiK2kpLzIsaz1NYXRoLmFzaW4oKChiLW4pL2QpLnRvRml4ZWQoOSkpLGw9TWF0aC5hc2luKCgoaS1uKS9kKS50b0ZpeGVkKDkpKSxrPWE8bT9wLWs6ayxsPWg8bT9wLWw6bCxrPDAmJihrPTIqcCtrKSxsPDAmJihsPTIqcCtsKSxnJiZrPmwmJihrLT0yKnApLCFnJiZsPmsmJihsLT0yKnApfXZhciBCPWwtaztpZihNYXRoLmFicyhCKT5yKXt2YXIgQz1sLEQ9aCxFPWk7bD1rK3IqKGcmJmw+az8xOi0xKSxoPW0rYypNYXRoLmNvcyhsKSxpPW4rZCpNYXRoLnNpbihsKSx0PXEoaCxpLGMsZCxlLDAsZyxELEUsW2wsQyxtLG5dKX1CPWwtazt2YXIgRj1NYXRoLmNvcyhrKSxHPU1hdGguc2luKGspLEg9TWF0aC5jb3MobCksST1NYXRoLnNpbihsKSxKPU1hdGgudGFuKEIvNCksSz00LzMqYypKLEw9NC8zKmQqSixNPVthLGJdLE49W2ErSypHLGItTCpGXSxPPVtoK0sqSSxpLUwqSF0sUD1baCxpXTtpZihOWzBdPTIqTVswXS1OWzBdLE5bMV09MipNWzFdLU5bMV0sailyZXR1cm5bTixPLFBdLmNvbmNhdCh0KTt0PVtOLE8sUF0uY29uY2F0KHQpLmpvaW4oKS5zcGxpdChcIixcIik7Zm9yKHZhciBRPVtdLFI9MCxTPXQubGVuZ3RoO1I8UztSKyspUVtSXT1SJTI/dSh0W1ItMV0sdFtSXSxzKS55OnUodFtSXSx0W1IrMV0scykueDtyZXR1cm4gUX1mdW5jdGlvbiByKGEsYil7Zm9yKHZhciBjPVtdLGQ9MCxlPWEubGVuZ3RoO2UtMiohYj5kO2QrPTIpe3ZhciBmPVt7eDorYVtkLTJdLHk6K2FbZC0xXX0se3g6K2FbZF0seTorYVtkKzFdfSx7eDorYVtkKzJdLHk6K2FbZCszXX0se3g6K2FbZCs0XSx5OithW2QrNV19XTtiP2Q/ZS00PT09ZD9mWzNdPXt4OithWzBdLHk6K2FbMV19OmUtMj09PWQmJihmWzJdPXt4OithWzBdLHk6K2FbMV19LGZbM109e3g6K2FbMl0seTorYVszXX0pOmZbMF09e3g6K2FbZS0yXSx5OithW2UtMV19OmUtND09PWQ/ZlszXT1mWzJdOmR8fChmWzBdPXt4OithW2RdLHk6K2FbZCsxXX0pLGMucHVzaChbXCJDXCIsKC1mWzBdLngrNipmWzFdLngrZlsyXS54KS82LCgtZlswXS55KzYqZlsxXS55K2ZbMl0ueSkvNiwoZlsxXS54KzYqZlsyXS54LWZbM10ueCkvNiwoZlsxXS55KzYqZlsyXS55LWZbM10ueSkvNixmWzJdLngsZlsyXS55XSl9cmV0dXJuIGN9ZnVuY3Rpb24gcyhhLGIsYyxkKXtyZXR1cm5bYSxiLGMsZCxjLGRdfWZ1bmN0aW9uIHQoYSxiLGMsZCxlLGYpe3ZhciBnPTEvMyxoPTIvMztyZXR1cm5bZyphK2gqYyxnKmIraCpkLGcqZStoKmMsZypmK2gqZCxlLGZdfWZ1bmN0aW9uIHUoYSxiLGMsZCxlLGYsZyxoLGkpe251bGw9PWkmJihpPTEpLGk9aT4xPzE6aTwwPzA6aTtmb3IodmFyIGo9aS8yLGs9MTIsbD1bLS4xMjUyLC4xMjUyLC0uMzY3OCwuMzY3OCwtLjU4NzMsLjU4NzMsLS43Njk5LC43Njk5LC0uOTA0MSwuOTA0MSwtLjk4MTYsLjk4MTZdLG09MCxuPVsuMjQ5MSwuMjQ5MSwuMjMzNSwuMjMzNSwuMjAzMiwuMjAzMiwuMTYwMSwuMTYwMSwuMTA2OSwuMTA2OSwuMDQ3MiwuMDQ3Ml0sbz0wO288aztvKyspe3ZhciBwPWoqbFtvXStqLHE9dyhwLGEsYyxlLGcpLHI9dyhwLGIsZCxmLGgpLHM9cSpxK3IqcjttKz1uW29dKk1hdGguc3FydChzKX1yZXR1cm4gaiptfWZ1bmN0aW9uIHYoYSxiLGMsZCxlLGYsZyxoLGkpe2lmKCEoaTwwfHx1KGEsYixjLGQsZSxmLGcsaCk8aSkpe3ZhciBqLGs9MSxsPWsvMixtPWstbCxuPS4wMTtmb3Ioaj11KGEsYixjLGQsZSxmLGcsaCxtKTtNYXRoLmFicyhqLWkpPm47KWwvPTIsbSs9KGo8aT8xOi0xKSpsLGo9dShhLGIsYyxkLGUsZixnLGgsbSk7cmV0dXJuIG19fWZ1bmN0aW9uIHcoYSxiLGMsZCxlKXtyZXR1cm4gYSooYSooLTMqYis5KmMtOSpkKzMqZSkrNipiLTEyKmMrNipkKS0zKmIrMypjfWZ1bmN0aW9uIHgoKXtmb3IodmFyIGE9XCJcIixiPWFyZ3VtZW50cy5sZW5ndGgtMTtiPj0wOy0tYil7dmFyIGM9YXJndW1lbnRzW2JdO2ErPWM9PT1PYmplY3QoYyk/SlNPTi5zdHJpbmdpZnkoYyk6Y31yZXR1cm4gYX12YXIgeT1hKFwiLi4vY29yZS9tYWluXCIpLHo9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO3kuRm9udD1mdW5jdGlvbihhKXt0aGlzLnBhcmVudD1hLHRoaXMuY2FjaGU9e30sdGhpcy5mb250PXZvaWQgMH0seS5Gb250LnByb3RvdHlwZS5saXN0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwibm90IHlldCBpbXBsZW1lbnRlZFwiKX0seS5Gb250LnByb3RvdHlwZS50ZXh0Qm91bmRzPWZ1bmN0aW9uKGEsYixjLGQsZSl7Yj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/YzowLGQ9ZHx8dGhpcy5wYXJlbnQuX3JlbmRlcmVyLl90ZXh0U2l6ZTt2YXIgZj1lJiZlLnJlbmRlcmVyJiZlLnJlbmRlcmVyLl9wSW5zdHx8dGhpcy5wYXJlbnQsZz1mLl9yZW5kZXJlcixoPWcuX3RleHRBbGlnbnx8ei5MRUZULGk9Zy5fdGV4dEJhc2VsaW5lfHx6LkJBU0VMSU5FLGo9eChcInRleHRCb3VuZHNcIixhLGIsYyxkLGgsaSksaz10aGlzLmNhY2hlW2pdO2lmKCFrKXt2YXIgbCxtLG4sbyxwLHE9W10scj1bXSxzPXRoaXMuX3NjYWxlKGQpO3RoaXMuZm9udC5mb3JFYWNoR2x5cGgoYSxiLGMsZCxlLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWEuZ2V0TWV0cmljcygpO3EucHVzaChiK2UueE1pbipzKSxxLnB1c2goYitlLnhNYXgqcyksci5wdXNoKGMrLWUueU1pbipzKSxyLnB1c2goYystZS55TWF4KnMpfSksbD1NYXRoLm1pbi5hcHBseShudWxsLHEpLG09TWF0aC5taW4uYXBwbHkobnVsbCxyKSxuPU1hdGgubWF4LmFwcGx5KG51bGwscSksbz1NYXRoLm1heC5hcHBseShudWxsLHIpLGs9e3g6bCx5Om0saDpvLW0sdzpuLWwsYWR2YW5jZTpsLWJ9LHA9dGhpcy5faGFuZGxlQWxpZ25tZW50KGcsYSxrLngsay55LGsudytrLmFkdmFuY2UpLGsueD1wLngsay55PXAueSx0aGlzLmNhY2hlW3goXCJ0ZXh0Qm91bmRzXCIsYSxiLGMsZCxoLGkpXT1rfXJldHVybiBrfSx5LkZvbnQucHJvdG90eXBlLnRleHRUb1BvaW50cz1mdW5jdGlvbihhLGIsYyxlLGcpe2Z1bmN0aW9uIGgoYil7cmV0dXJuIGtbYl0ubmFtZSYmXCJzcGFjZVwiPT09a1tiXS5uYW1lfHxhLmxlbmd0aD09PWsubGVuZ3RoJiZcIiBcIj09PWFbYl18fGtbYl0uaW5kZXgmJjM9PT1rW2JdLmluZGV4fXZhciBpPTAsaj1bXSxrPXRoaXMuX2dldEdseXBocyhhKTtlPWV8fHRoaXMucGFyZW50Ll9yZW5kZXJlci5fdGV4dFNpemU7Zm9yKHZhciBsPTA7bDxrLmxlbmd0aDtsKyspe2lmKCFoKGwpKWZvcih2YXIgbT1rW2xdLmdldFBhdGgoYixjLGUpLG49ZihtLmNvbW1hbmRzKSxvPTA7bzxuLmxlbmd0aDtvKyspZm9yKHZhciBwPWQobltvXSxnKSxxPTA7cTxwLmxlbmd0aDtxKyspcFtxXS54Kz1pLGoucHVzaChwW3FdKTtpKz1rW2xdLmFkdmFuY2VXaWR0aCp0aGlzLl9zY2FsZShlKX1yZXR1cm4gan0seS5Gb250LnByb3RvdHlwZS5fZ2V0R2x5cGhzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZvbnQuc3RyaW5nVG9HbHlwaHMoYSl9LHkuRm9udC5wcm90b3R5cGUuX2dldFBhdGg9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZCYmZC5yZW5kZXJlciYmZC5yZW5kZXJlci5fcEluc3R8fHRoaXMucGFyZW50LGY9ZS5fcmVuZGVyZXIsZz10aGlzLl9oYW5kbGVBbGlnbm1lbnQoZixhLGIsYyk7cmV0dXJuIHRoaXMuZm9udC5nZXRQYXRoKGEsZy54LGcueSxmLl90ZXh0U2l6ZSxkKX0seS5Gb250LnByb3RvdHlwZS5fZ2V0UGF0aERhdGE9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9MztyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYSYmYXJndW1lbnRzLmxlbmd0aD4yP2E9dGhpcy5fZ2V0UGF0aChhLGIsYyxkKTpcIm9iamVjdFwiPT10eXBlb2YgYiYmKGQ9YiksZCYmXCJudW1iZXJcIj09dHlwZW9mIGQuZGVjaW1hbHMmJihlPWQuZGVjaW1hbHMpLGEudG9QYXRoRGF0YShlKX0seS5Gb250LnByb3RvdHlwZS5fZ2V0U1ZHPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPTM7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGEmJmFyZ3VtZW50cy5sZW5ndGg+Mj9hPXRoaXMuX2dldFBhdGgoYSxiLGMsZCk6XCJvYmplY3RcIj09dHlwZW9mIGImJihkPWIpLGQmJihcIm51bWJlclwiPT10eXBlb2YgZC5kZWNpbWFscyYmKGU9ZC5kZWNpbWFscyksXCJudW1iZXJcIj09dHlwZW9mIGQuc3Ryb2tlV2lkdGgmJihhLnN0cm9rZVdpZHRoPWQuc3Ryb2tlV2lkdGgpLHZvaWQgMCE9PWQuZmlsbCYmKGEuZmlsbD1kLmZpbGwpLHZvaWQgMCE9PWQuc3Ryb2tlJiYoYS5zdHJva2U9ZC5zdHJva2UpKSxhLnRvU1ZHKGUpfSx5LkZvbnQucHJvdG90eXBlLl9yZW5kZXJQYXRoPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGY9ZCYmZC5yZW5kZXJlcnx8dGhpcy5wYXJlbnQuX3JlbmRlcmVyLGc9Zi5kcmF3aW5nQ29udGV4dDtlPVwib2JqZWN0XCI9PXR5cGVvZiBhJiZhLmNvbW1hbmRzP2EuY29tbWFuZHM6dGhpcy5fZ2V0UGF0aChhLGIsYyxkKS5jb21tYW5kcyxnLmJlZ2luUGF0aCgpO2Zvcih2YXIgaD0wO2g8ZS5sZW5ndGg7aCs9MSl7dmFyIGk9ZVtoXTtcIk1cIj09PWkudHlwZT9nLm1vdmVUbyhpLngsaS55KTpcIkxcIj09PWkudHlwZT9nLmxpbmVUbyhpLngsaS55KTpcIkNcIj09PWkudHlwZT9nLmJlemllckN1cnZlVG8oaS54MSxpLnkxLGkueDIsaS55MixpLngsaS55KTpcIlFcIj09PWkudHlwZT9nLnF1YWRyYXRpY0N1cnZlVG8oaS54MSxpLnkxLGkueCxpLnkpOlwiWlwiPT09aS50eXBlJiZnLmNsb3NlUGF0aCgpfXJldHVybiBmLl9kb1N0cm9rZSYmZi5fc3Ryb2tlU2V0JiZnLnN0cm9rZSgpLGYuX2RvRmlsbCYmKGYuX2ZpbGxTZXR8fGYuX3NldEZpbGwoei5fREVGQVVMVF9URVhUX0ZJTEwpLGcuZmlsbCgpKSx0aGlzfSx5LkZvbnQucHJvdG90eXBlLl90ZXh0V2lkdGg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5mb250LmdldEFkdmFuY2VXaWR0aChhLGIpfSx5LkZvbnQucHJvdG90eXBlLl90ZXh0QXNjZW50PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZvbnQuYXNjZW5kZXIqdGhpcy5fc2NhbGUoYSl9LHkuRm9udC5wcm90b3R5cGUuX3RleHREZXNjZW50PWZ1bmN0aW9uKGEpe3JldHVybi10aGlzLmZvbnQuZGVzY2VuZGVyKnRoaXMuX3NjYWxlKGEpfSx5LkZvbnQucHJvdG90eXBlLl9zY2FsZT1mdW5jdGlvbihhKXtyZXR1cm4gMS90aGlzLmZvbnQudW5pdHNQZXJFbSooYXx8dGhpcy5wYXJlbnQuX3JlbmRlcmVyLl90ZXh0U2l6ZSl9LHkuRm9udC5wcm90b3R5cGUuX2hhbmRsZUFsaWdubWVudD1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWEuX3RleHRTaXplO3N3aXRjaCh2b2lkIDA9PT1lJiYoZT10aGlzLl90ZXh0V2lkdGgoYixmKSksYS5fdGV4dEFsaWduKXtjYXNlIHouQ0VOVEVSOmMtPWUvMjticmVhaztjYXNlIHouUklHSFQ6Yy09ZX1zd2l0Y2goYS5fdGV4dEJhc2VsaW5lKXtjYXNlIHouVE9QOmQrPXRoaXMuX3RleHRBc2NlbnQoZik7YnJlYWs7Y2FzZSB6LkNFTlRFUjpkKz10aGlzLl90ZXh0QXNjZW50KGYpLzI7YnJlYWs7Y2FzZSB6LkJPVFRPTTpkLT10aGlzLl90ZXh0RGVzY2VudChmKX1yZXR1cm57eDpjLHk6ZH19LGIuZXhwb3J0cz15fSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw2MDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEucHVzaChiKSxhfSxkLnByb3RvdHlwZS5hcnJheUNvcHk9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnO3ZvaWQgMCE9PWU/KGc9TWF0aC5taW4oZSxhLmxlbmd0aCksZj1kLGE9YS5zbGljZShiLGcrYikpOih2b2lkIDAhPT1jPyhnPWMsZz1NYXRoLm1pbihnLGEubGVuZ3RoKSk6Zz1hLmxlbmd0aCxmPTAsYz1iLGE9YS5zbGljZSgwLGcpKSxBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGMsW2YsZ10uY29uY2F0KGEpKX0sZC5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuY29uY2F0KGIpfSxkLnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJldmVyc2UoKX0sZC5wcm90b3R5cGUuc2hvcnRlbj1mdW5jdGlvbihhKXtyZXR1cm4gYS5wb3AoKSxhfSxkLnByb3RvdHlwZS5zaHVmZmxlPWZ1bmN0aW9uKGEsYil7dmFyIGM9QXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldyYmQXJyYXlCdWZmZXIuaXNWaWV3KGEpO2E9Ynx8Yz9hOmEuc2xpY2UoKTtmb3IodmFyIGQsZSxmPWEubGVuZ3RoO2Y+MTspZD1NYXRoLnJhbmRvbSgpKmZ8MCxlPWFbLS1mXSxhW2ZdPWFbZF0sYVtkXT1lO3JldHVybiBhfSxkLnByb3RvdHlwZS5zb3J0PWZ1bmN0aW9uKGEsYil7dmFyIGM9Yj9hLnNsaWNlKDAsTWF0aC5taW4oYixhLmxlbmd0aCkpOmEsZD1iP2Euc2xpY2UoTWF0aC5taW4oYixhLmxlbmd0aCkpOltdO3JldHVybiBjPVwic3RyaW5nXCI9PXR5cGVvZiBjWzBdP2Muc29ydCgpOmMuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLWJ9KSxjLmNvbmNhdChkKX0sZC5wcm90b3R5cGUuc3BsaWNlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShhLFtjLDBdLmNvbmNhdChiKSksYX0sZC5wcm90b3R5cGUuc3Vic2V0PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdm9pZCAwIT09Yz9hLnNsaWNlKGIsYitjKTphLnNsaWNlKGIsYS5sZW5ndGgpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw2MTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuZmxvYXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChwYXJzZUZsb2F0KTpwYXJzZUZsb2F0KGEpfSxkLnByb3RvdHlwZS5pbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj1ifHwxMCxcInN0cmluZ1wiPT10eXBlb2YgYT9wYXJzZUludChhLGIpOlwibnVtYmVyXCI9PXR5cGVvZiBhPzB8YTpcImJvb2xlYW5cIj09dHlwZW9mIGE/YT8xOjA6YSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBkLnByb3RvdHlwZS5pbnQoYSxiKX0pOnZvaWQgMH0sZC5wcm90b3R5cGUuc3RyPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUuc3RyKTpTdHJpbmcoYSl9LGQucHJvdG90eXBlLmJvb2xlYW49ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGE/MCE9PWE6XCJzdHJpbmdcIj09dHlwZW9mIGE/XCJ0cnVlXCI9PT1hLnRvTG93ZXJDYXNlKCk6XCJib29sZWFuXCI9PXR5cGVvZiBhP2E6YSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLmJvb2xlYW4pOnZvaWQgMH0sZC5wcm90b3R5cGUuYnl0ZT1mdW5jdGlvbihhKXt2YXIgYj1kLnByb3RvdHlwZS5pbnQoYSwxMCk7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGI/KGIrMTI4KSUyNTYtMTI4OmIgaW5zdGFuY2VvZiBBcnJheT9iLm1hcChkLnByb3RvdHlwZS5ieXRlKTp2b2lkIDB9LGQucHJvdG90eXBlLmNoYXI9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIGF8fGlzTmFOKGEpP2EgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChkLnByb3RvdHlwZS5jaGFyKTpcInN0cmluZ1wiPT10eXBlb2YgYT9kLnByb3RvdHlwZS5jaGFyKHBhcnNlSW50KGEsMTApKTp2b2lkIDA6U3RyaW5nLmZyb21DaGFyQ29kZShhKX0sZC5wcm90b3R5cGUudW5jaGFyPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhJiYxPT09YS5sZW5ndGg/YS5jaGFyQ29kZUF0KDApOmEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChkLnByb3RvdHlwZS51bmNoYXIpOnZvaWQgMH0sZC5wcm90b3R5cGUuaGV4PWZ1bmN0aW9uKGEsYil7aWYoYj12b2lkIDA9PT1ifHxudWxsPT09Yj9iPTg6YixhIGluc3RhbmNlb2YgQXJyYXkpcmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBkLnByb3RvdHlwZS5oZXgoYSxiKX0pO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBhKXthPDAmJihhPTQyOTQ5NjcyOTUrYSsxKTtmb3IodmFyIGM9TnVtYmVyKGEpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO2MubGVuZ3RoPGI7KWM9XCIwXCIrYztyZXR1cm4gYy5sZW5ndGg+PWImJihjPWMuc3Vic3RyaW5nKGMubGVuZ3RoLWIsYy5sZW5ndGgpKSxjfX0sZC5wcm90b3R5cGUudW5oZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChkLnByb3RvdHlwZS51bmhleCk6cGFyc2VJbnQoXCIweFwiK2EsMTYpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw2MjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMpe3ZhciBkPWE8MCxlPWQ/YS50b1N0cmluZygpLnN1YnN0cmluZygxKTphLnRvU3RyaW5nKCksZj1lLmluZGV4T2YoXCIuXCIpLGc9LTEhPT1mP2Uuc3Vic3RyaW5nKDAsZik6ZSxoPS0xIT09Zj9lLnN1YnN0cmluZyhmKzEpOlwiXCIsaT1kP1wiLVwiOlwiXCI7aWYodm9pZCAwIT09Yyl7dmFyIGo9XCJcIjsoLTEhPT1mfHxjLWgubGVuZ3RoPjApJiYoaj1cIi5cIiksaC5sZW5ndGg+YyYmKGg9aC5zdWJzdHJpbmcoMCxjKSk7Zm9yKHZhciBrPTA7azxiLWcubGVuZ3RoO2srKylpKz1cIjBcIjtpKz1nLGkrPWosaSs9aDtmb3IodmFyIGw9MDtsPGMtaC5sZW5ndGg7bCsrKWkrPVwiMFwiO3JldHVybiBpfWZvcih2YXIgbT0wO208TWF0aC5tYXgoYi1nLmxlbmd0aCwwKTttKyspaSs9XCIwXCI7cmV0dXJuIGkrPWV9ZnVuY3Rpb24gZShhLGIpe2E9YS50b1N0cmluZygpO3ZhciBjPWEuaW5kZXhPZihcIi5cIiksZD0tMSE9PWM/YS5zdWJzdHJpbmcoYyk6XCJcIixlPS0xIT09Yz9hLnN1YnN0cmluZygwLGMpOmE7aWYoZT1lLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZyxcIixcIiksMD09PWIpZD1cIlwiO2Vsc2UgaWYodm9pZCAwIT09YilpZihiPmQubGVuZ3RoKXtkKz0tMT09PWM/XCIuXCI6XCJcIjtmb3IodmFyIGY9Yi1kLmxlbmd0aCsxLGc9MDtnPGY7ZysrKWQrPVwiMFwifWVsc2UgZD1kLnN1YnN0cmluZygwLGIrMSk7cmV0dXJuIGUrZH1mdW5jdGlvbiBmKGEpe3JldHVybiBwYXJzZUZsb2F0KGEpPjA/XCIrXCIrYS50b1N0cmluZygpOmEudG9TdHJpbmcoKX1mdW5jdGlvbiBnKGEpe3JldHVybiBwYXJzZUZsb2F0KGEpPjA/XCIgXCIrYS50b1N0cmluZygpOmEudG9TdHJpbmcoKX12YXIgaD1hKFwiLi4vY29yZS9tYWluXCIpO2EoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksaC5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihhLGIpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJqb2luXCIsYXJndW1lbnRzKSxhLmpvaW4oYil9LGgucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1hdGNoXCIsYXJndW1lbnRzKSxhLm1hdGNoKGIpfSxoLnByb3RvdHlwZS5tYXRjaEFsbD1mdW5jdGlvbihhLGIpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1hdGNoQWxsXCIsYXJndW1lbnRzKTtmb3IodmFyIGM9bmV3IFJlZ0V4cChiLFwiZ1wiKSxkPWMuZXhlYyhhKSxlPVtdO251bGwhPT1kOyllLnB1c2goZCksZD1jLmV4ZWMoYSk7cmV0dXJuIGV9LGgucHJvdG90eXBlLm5mPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibmZcIixhcmd1bWVudHMpLGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gZChhLGIsYyl9KTpcIltvYmplY3QgQXJndW1lbnRzXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpPzM9PT1hLmxlbmd0aD90aGlzLm5mKGFbMF0sYVsxXSxhWzJdKToyPT09YS5sZW5ndGg/dGhpcy5uZihhWzBdLGFbMV0pOnRoaXMubmYoYVswXSk6ZChhLGIsYyl9LGgucHJvdG90eXBlLm5mYz1mdW5jdGlvbihhLGIpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJuZmNcIixhcmd1bWVudHMpLGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gZShhLGIpfSk6ZShhLGIpfSxoLnByb3RvdHlwZS5uZnA9ZnVuY3Rpb24oKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJuZnBcIixhcmd1bWVudHMpO3ZhciBhPWgucHJvdG90eXBlLm5mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGYpOmYoYSl9LGgucHJvdG90eXBlLm5mcz1mdW5jdGlvbigpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5mc1wiLGFyZ3VtZW50cyk7dmFyIGE9aC5wcm90b3R5cGUubmYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZyk6ZyhhKX0saC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3BsaXRcIixhcmd1bWVudHMpLGEuc3BsaXQoYil9LGgucHJvdG90eXBlLnNwbGl0VG9rZW5zPWZ1bmN0aW9uKGEsYil7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3BsaXRUb2tlbnNcIixhcmd1bWVudHMpO3ZhciBjO2lmKHZvaWQgMCE9PWIpe3ZhciBkPWIsZT0vXFxdL2cuZXhlYyhkKSxmPS9cXFsvZy5leGVjKGQpO2YmJmU/KGQ9ZC5zbGljZSgwLGUuaW5kZXgpK2Quc2xpY2UoZS5pbmRleCsxKSxmPS9cXFsvZy5leGVjKGQpLGQ9ZC5zbGljZSgwLGYuaW5kZXgpK2Quc2xpY2UoZi5pbmRleCsxKSxjPW5ldyBSZWdFeHAoXCJbXFxcXFtcIitkK1wiXFxcXF1dXCIsXCJnXCIpKTplPyhkPWQuc2xpY2UoMCxlLmluZGV4KStkLnNsaWNlKGUuaW5kZXgrMSksYz1uZXcgUmVnRXhwKFwiW1wiK2QrXCJcXFxcXV1cIixcImdcIikpOmY/KGQ9ZC5zbGljZSgwLGYuaW5kZXgpK2Quc2xpY2UoZi5pbmRleCsxKSxjPW5ldyBSZWdFeHAoXCJbXCIrZCtcIlxcXFxbXVwiLFwiZ1wiKSk6Yz1uZXcgUmVnRXhwKFwiW1wiK2QrXCJdXCIsXCJnXCIpfWVsc2UgYz0vXFxzL2c7cmV0dXJuIGEuc3BsaXQoYykuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhfSl9LGgucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oYSl7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRyaW1cIixhcmd1bWVudHMpLGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcCh0aGlzLnRyaW0pOmEudHJpbSgpfSxiLmV4cG9ydHM9aH0se1wiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9jb3JlL21haW5cIjoyNH1dLDYzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5kYXk9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldERhdGUoKX0sZC5wcm90b3R5cGUuaG91cj1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0SG91cnMoKX0sZC5wcm90b3R5cGUubWludXRlPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRNaW51dGVzKCl9LGQucHJvdG90eXBlLm1pbGxpcz1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCl9LGQucHJvdG90eXBlLm1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRNb250aCgpKzF9LGQucHJvdG90eXBlLnNlY29uZD1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0U2Vjb25kcygpfSxkLnByb3RvdHlwZS55ZWFyPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw2NDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7YShcIi4vcDUuR2VvbWV0cnlcIik7dmFyIGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QucHJvdG90eXBlLnBsYW5lPWZ1bmN0aW9uKGEsYixjLGUpe3RoaXMuX2Fzc2VydDNkKFwicGxhbmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicGxhbmVcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj1hKSx2b2lkIDA9PT1jJiYoYz0xKSx2b2lkIDA9PT1lJiYoZT0xKTt2YXIgZj1cInBsYW5lfFwiK2MrXCJ8XCIrZTtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goZikpe3ZhciBnPWZ1bmN0aW9uKCl7Zm9yKHZhciBhLGIsYyxlPTA7ZTw9dGhpcy5kZXRhaWxZO2UrKyl7Yj1lL3RoaXMuZGV0YWlsWTtmb3IodmFyIGY9MDtmPD10aGlzLmRldGFpbFg7ZisrKWE9Zi90aGlzLmRldGFpbFgsYz1uZXcgZC5WZWN0b3IoYS0uNSxiLS41LDApLHRoaXMudmVydGljZXMucHVzaChjKSx0aGlzLnV2cy5wdXNoKGEsYil9fSxoPW5ldyBkLkdlb21ldHJ5KGMsZSxnKTtoLmNvbXB1dGVGYWNlcygpLmNvbXB1dGVOb3JtYWxzKCksYzw9MSYmZTw9MT9oLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBwbGFuZSBvYmplY3RzIHdpdGggbW9yZSB0aGFuIDEgZGV0YWlsWCBvciAxIGRldGFpbFlcIiksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhmLGgpfXJldHVybiB0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVyc1NjYWxlZChmLGEsYiwxKSx0aGlzfSxkLnByb3RvdHlwZS5ib3g9ZnVuY3Rpb24oYSxiLGMsZSxmKXt0aGlzLl9hc3NlcnQzZChcImJveFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJib3hcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj1hKSx2b2lkIDA9PT1jJiYoYz1iKTt2YXIgZz10aGlzLl9yZW5kZXJlci5hdHRyaWJ1dGVzJiZ0aGlzLl9yZW5kZXJlci5hdHRyaWJ1dGVzLnBlclBpeGVsTGlnaHRpbmc7dm9pZCAwPT09ZSYmKGU9Zz8xOjQpLHZvaWQgMD09PWYmJihmPWc/MTo0KTt2YXIgaD1cImJveHxcIitlK1wifFwiK2Y7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGgpKXt2YXIgaT1mdW5jdGlvbigpe3ZhciBhPVtbMCw0LDIsNl0sWzEsMyw1LDddLFswLDEsNCw1XSxbMiw2LDMsN10sWzAsMiwxLDNdLFs0LDUsNiw3XV07dGhpcy5zdHJva2VJbmRpY2VzPVtbMCwxXSxbMSwzXSxbMywyXSxbNiw3XSxbOCw5XSxbOSwxMV0sWzE0LDE1XSxbMTYsMTddLFsxNywxOV0sWzE4LDE5XSxbMjAsMjFdLFsyMiwyM11dO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKXtmb3IodmFyIGM9YVtiXSxlPTQqYixmPTA7Zjw0O2YrKyl7dmFyIGc9Y1tmXSxoPW5ldyBkLlZlY3RvcigoMiooMSZnKS0xKS8yLCgoMiZnKS0xKS8yLCgoNCZnKS8yLTEpLzIpO3RoaXMudmVydGljZXMucHVzaChoKSx0aGlzLnV2cy5wdXNoKDEmZiwoMiZmKS8yKX10aGlzLmZhY2VzLnB1c2goW2UsZSsxLGUrMl0pLHRoaXMuZmFjZXMucHVzaChbZSsyLGUrMSxlKzNdKX19LGo9bmV3IGQuR2VvbWV0cnkoZSxmLGkpO2ouY29tcHV0ZU5vcm1hbHMoKSxlPD00JiZmPD00P2ouX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlIG9uIGJveCBvYmplY3RzIHdpdGggbW9yZSB0aGFuIDQgZGV0YWlsWCBvciA0IGRldGFpbFlcIiksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhoLGopfXJldHVybiB0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVyc1NjYWxlZChoLGEsYixjKSx0aGlzfSxkLnByb3RvdHlwZS5zcGhlcmU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInNwaGVyZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzcGhlcmVcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj0yNCksdm9pZCAwPT09YyYmKGM9MTYpLHRoaXMuZWxsaXBzb2lkKGEsYSxhLGIsYyksdGhpc307dmFyIGY9ZnVuY3Rpb24oYSxiLGMsZSxmLGcsaCl7YT1hPD0wPzE6YSxiPWI8MD8wOmIsYz1jPD0wP2E6YyxlPWU8Mz8zOmUsZj1mPDE/MTpmLGc9dm9pZCAwPT09Z3x8ZyxoPXZvaWQgMD09PWg/MCE9PWI6aDt2YXIgaSxqLGssbCxtLG49Zz8tMjowLG89ZisoaD8yOjApLHA9e30scT1NYXRoLmF0YW4yKGEtYixjKTtmb3IoaT1uO2k8PW87KytpKXt2YXIgcixzPWkvZix0PWMqcztmb3IoaTwwPyh0PTAscz0wLHI9YSk6aT5mPyh0PWMscz0xLHI9Yik6cj1hKyhiLWEpKnMsLTIhPT1pJiZpIT09ZisyfHwocj0wKSx0LT1jLzIscFtpXT0wPT09cj8xOmUsaj0wO2o8cFtpXTsrK2ope3ZhciB1PWovZTt0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKE1hdGguc2luKDIqdSpNYXRoLlBJKSpyLHQsTWF0aC5jb3MoMip1Kk1hdGguUEkpKnIpKSx0aGlzLnZlcnRleE5vcm1hbHMucHVzaChuZXcgZC5WZWN0b3IoaTwwfHxpPmY/MDpNYXRoLnNpbigyKnUqTWF0aC5QSSkqTWF0aC5jb3MocSksaTwwPy0xOmk+Zj8xOk1hdGguc2luKHEpLGk8MHx8aT5mPzA6TWF0aC5jb3MoMip1Kk1hdGguUEkpKk1hdGguY29zKHEpKSksdGhpcy51dnMucHVzaCh1LHMpfX12YXIgdj0wO2lmKGcpe2ZvcihrPTA7azxwWy0xXTsrK2spbT0oaysxKSVwWy0xXSx0aGlzLmZhY2VzLnB1c2goW3YsdisxK20sdisxK2tdKTt2Kz1wWy0yXStwWy0xXX1mb3IoaT0wO2k8ZjsrK2kpe2ZvcihqPTA7ajxwW2ldOysraikxPT09cFtpKzFdPyhsPShqKzEpJXBbaV0sdGhpcy5mYWNlcy5wdXNoKFt2K2osditsLHYrcFtpXV0pKToobD0oaisxKSVwW2ldLHRoaXMuZmFjZXMucHVzaChbditqLHYrbCx2K3BbaV0rbF0pLHRoaXMuZmFjZXMucHVzaChbditqLHYrcFtpXStsLHYrcFtpXStqXSkpO3YrPXBbaV19aWYoaClmb3Iodis9cFtmXSxqPTA7ajxwW2YrMV07KytqKWw9KGorMSklcFtmKzFdLHRoaXMuZmFjZXMucHVzaChbditqLHYrbCx2K3BbZisxXV0pfTtkLnByb3RvdHlwZS5jeWxpbmRlcj1mdW5jdGlvbihhLGIsYyxlLGcsaCl7dGhpcy5fYXNzZXJ0M2QoXCJjeWxpbmRlclwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjeWxpbmRlclwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPTI0KSx2b2lkIDA9PT1lJiYoZT0xKSx2b2lkIDA9PT1oJiYoaD0hMCksXG52b2lkIDA9PT1nJiYoZz0hMCk7dmFyIGk9XCJjeWxpbmRlcnxcIitjK1wifFwiK2UrXCJ8XCIrZytcInxcIitoO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChpKSl7dmFyIGo9bmV3IGQuR2VvbWV0cnkoYyxlKTtmLmNhbGwoaiwxLDEsMSxjLGUsZyxoKSxqLmNvbXB1dGVOb3JtYWxzKCksYzw9MjQmJmU8PTE2P2ouX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlIG9uIGN5bGluZGVyIG9iamVjdHMgd2l0aCBtb3JlIHRoYW4gMjQgZGV0YWlsWCBvciAxNiBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoaSxqKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoaSxhLGIsYSksdGhpc30sZC5wcm90b3R5cGUuY29uZT1mdW5jdGlvbihhLGIsYyxlLGcpe3RoaXMuX2Fzc2VydDNkKFwiY29uZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjb25lXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9MjQpLHZvaWQgMD09PWUmJihlPTEpLHZvaWQgMD09PWcmJihnPSEwKTt2YXIgaD1cImNvbmV8XCIrYytcInxcIitlK1wifFwiK2c7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGgpKXt2YXIgaT1uZXcgZC5HZW9tZXRyeShjLGUpO2YuY2FsbChpLDEsMCwxLGMsZSxnLCExKSxpLmNvbXB1dGVOb3JtYWxzKCksYzw9MjQmJmU8PTE2P2kuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlIG9uIGNvbmUgb2JqZWN0cyB3aXRoIG1vcmUgdGhhbiAyNCBkZXRhaWxYIG9yIDE2IGRldGFpbFlcIiksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhoLGkpfXJldHVybiB0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVyc1NjYWxlZChoLGEsYixhKSx0aGlzfSxkLnByb3RvdHlwZS5lbGxpcHNvaWQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXt0aGlzLl9hc3NlcnQzZChcImVsbGlwc29pZFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJlbGxpcHNvaWRcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj1hKSx2b2lkIDA9PT1jJiYoYz1hKSx2b2lkIDA9PT1lJiYoZT0yNCksdm9pZCAwPT09ZiYmKGY9MTYpO3ZhciBnPVwiZWxsaXBzb2lkfFwiK2UrXCJ8XCIrZjtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goZykpe3ZhciBoPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTw9dGhpcy5kZXRhaWxZO2ErKylmb3IodmFyIGI9YS90aGlzLmRldGFpbFksYz1NYXRoLlBJKmItTWF0aC5QSS8yLGU9TWF0aC5jb3MoYyksZj1NYXRoLnNpbihjKSxnPTA7Zzw9dGhpcy5kZXRhaWxYO2crKyl7dmFyIGg9Zy90aGlzLmRldGFpbFgsaT0yKk1hdGguUEkqaCxqPU1hdGguY29zKGkpLGs9TWF0aC5zaW4oaSksbD1uZXcgZC5WZWN0b3IoZSprLGYsZSpqKTt0aGlzLnZlcnRpY2VzLnB1c2gobCksdGhpcy52ZXJ0ZXhOb3JtYWxzLnB1c2gobCksdGhpcy51dnMucHVzaChoLGIpfX0saT1uZXcgZC5HZW9tZXRyeShlLGYsaCk7aS5jb21wdXRlRmFjZXMoKSxlPD0yNCYmZjw9MjQ/aS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gZWxsaXBzb2lkcyB3aXRoIG1vcmUgdGhhbiAyNCBkZXRhaWxYIG9yIDI0IGRldGFpbFlcIiksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhnLGkpfXJldHVybiB0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVyc1NjYWxlZChnLGEsYixjKSx0aGlzfSxkLnByb3RvdHlwZS50b3J1cz1mdW5jdGlvbihhLGIsYyxlKXtpZih0aGlzLl9hc3NlcnQzZChcInRvcnVzXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRvcnVzXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hKWE9NTA7ZWxzZSBpZighYSlyZXR1cm47aWYodm9pZCAwPT09YiliPTEwO2Vsc2UgaWYoIWIpcmV0dXJuO3ZvaWQgMD09PWMmJihjPTI0KSx2b2lkIDA9PT1lJiYoZT0xNik7dmFyIGY9KGIvYSkudG9QcmVjaXNpb24oNCksZz1cInRvcnVzfFwiK2YrXCJ8XCIrYytcInxcIitlO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChnKSl7dmFyIGg9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD10aGlzLmRldGFpbFk7YSsrKWZvcih2YXIgYj1hL3RoaXMuZGV0YWlsWSxjPTIqTWF0aC5QSSpiLGU9TWF0aC5jb3MoYyksZz1NYXRoLnNpbihjKSxoPTErZiplLGk9MDtpPD10aGlzLmRldGFpbFg7aSsrKXt2YXIgaj1pL3RoaXMuZGV0YWlsWCxrPTIqTWF0aC5QSSpqLGw9TWF0aC5jb3MoayksbT1NYXRoLnNpbihrKSxuPW5ldyBkLlZlY3RvcihoKmwsaCptLGYqZyksbz1uZXcgZC5WZWN0b3IoZSpsLGUqbSxnKTt0aGlzLnZlcnRpY2VzLnB1c2gobiksdGhpcy52ZXJ0ZXhOb3JtYWxzLnB1c2gobyksdGhpcy51dnMucHVzaChqLGIpfX0saT1uZXcgZC5HZW9tZXRyeShjLGUsaCk7aS5jb21wdXRlRmFjZXMoKSxjPD0yNCYmZTw9MTY/aS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2VzIG9uIHRvcnVzIG9iamVjdCB3aXRoIG1vcmUgdGhhbiAyNCBkZXRhaWxYIG9yIDE2IGRldGFpbFlcIiksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhnLGkpfXJldHVybiB0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVyc1NjYWxlZChnLGEsYSxhKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKGEsYixjKXt0aGlzLl91c2VQb2ludFNoYWRlcigpLHRoaXMuY3VyUG9pbnRTaGFkZXIuYmluZFNoYWRlcigpLHZvaWQgMD09PWMmJihjPTApO3ZhciBlPVtdO3JldHVybiBlLnB1c2gobmV3IGQuVmVjdG9yKGEsYixjKSksdGhpcy5fZHJhd1BvaW50cyhlLHRoaXMuX3BvaW50VmVydGV4QnVmZmVyKSx0aGlzLmN1clBvaW50U2hhZGVyLnVuYmluZFNoYWRlcigpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUudHJpYW5nbGU9ZnVuY3Rpb24oYSl7dmFyIGI9YVswXSxjPWFbMV0sZT1hWzJdLGY9YVszXSxnPWFbNF0saD1hWzVdLGk9XCJ0cmlcIjtpZighdGhpcy5nZW9tZXRyeUluSGFzaChpKSl7dmFyIGo9ZnVuY3Rpb24oKXt2YXIgYT1bXTthLnB1c2gobmV3IGQuVmVjdG9yKDAsMCwwKSksYS5wdXNoKG5ldyBkLlZlY3RvcigwLDEsMCkpLGEucHVzaChuZXcgZC5WZWN0b3IoMSwwLDApKSx0aGlzLnN0cm9rZUluZGljZXM9W1swLDFdLFsxLDJdLFsyLDBdXSx0aGlzLnZlcnRpY2VzPWEsdGhpcy5mYWNlcz1bWzAsMSwyXV0sdGhpcy51dnM9WzAsMCwwLDEsMSwxXX0saz1uZXcgZC5HZW9tZXRyeSgxLDEsaik7ay5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCksay5jb21wdXRlTm9ybWFscygpLHRoaXMuY3JlYXRlQnVmZmVycyhpLGspfXZhciBsPXRoaXMudU1WTWF0cml4LmNvcHkoKTt0cnl7dmFyIG09bmV3IGQuTWF0cml4KFtlLWIsZi1jLDAsMCxnLWIsaC1jLDAsMCwwLDAsMSwwLGIsYywwLDFdKS5tdWx0KHRoaXMudU1WTWF0cml4KTt0aGlzLnVNVk1hdHJpeD1tLHRoaXMuZHJhd0J1ZmZlcnMoaSl9ZmluYWxseXt0aGlzLnVNVk1hdHJpeD1sfXJldHVybiB0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmVsbGlwc2U9ZnVuY3Rpb24oYSl7dGhpcy5hcmMoYVswXSxhWzFdLGFbMl0sYVszXSwwLGUuVFdPX1BJLGUuT1BFTixhWzRdKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5hcmM9ZnVuY3Rpb24oYSl7dmFyIGIsYyxmPWFyZ3VtZW50c1swXSxnPWFyZ3VtZW50c1sxXSxoPWFyZ3VtZW50c1syXSxpPWFyZ3VtZW50c1szXSxqPWFyZ3VtZW50c1s0XSxrPWFyZ3VtZW50c1s1XSxsPWFyZ3VtZW50c1s2XSxtPWFyZ3VtZW50c1s3XXx8MjU7aWYoTWF0aC5hYnMoay1qKT49ZS5UV09fUEk/KGI9XCJlbGxpcHNlXCIsYz1iK1wifFwiK20rXCJ8XCIpOihiPVwiYXJjXCIsYz1iK1wifFwiK2orXCJ8XCIraytcInxcIitsK1wifFwiK20rXCJ8XCIpLCF0aGlzLmdlb21ldHJ5SW5IYXNoKGMpKXt2YXIgbj1mdW5jdGlvbigpe2lmKHRoaXMuc3Ryb2tlSW5kaWNlcz1bXSxqLnRvRml4ZWQoMTApIT09ay50b0ZpeGVkKDEwKSl7bCE9PWUuUElFJiZ2b2lkIDAhPT1sfHwodGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvciguNSwuNSwwKSksdGhpcy51dnMucHVzaChbLjUsLjVdKSk7Zm9yKHZhciBhPTA7YTw9bTthKyspe3ZhciBiPWEvbSxjPShrLWopKmIraixmPS41K01hdGguY29zKGMpLzIsZz0uNStNYXRoLnNpbihjKS8yO3RoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoZixnLDApKSx0aGlzLnV2cy5wdXNoKFtmLGddKSxhPG0tMSYmKHRoaXMuZmFjZXMucHVzaChbMCxhKzEsYSsyXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goW2ErMSxhKzJdKSl9c3dpdGNoKGwpe2Nhc2UgZS5QSUU6dGhpcy5mYWNlcy5wdXNoKFswLHRoaXMudmVydGljZXMubGVuZ3RoLTIsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLDFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMix0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pO2JyZWFrO2Nhc2UgZS5DSE9SRDp0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCwxXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pO2JyZWFrO2Nhc2UgZS5PUEVOOnRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLDFdKTticmVhaztkZWZhdWx0OnRoaXMuZmFjZXMucHVzaChbMCx0aGlzLnZlcnRpY2VzLmxlbmd0aC0yLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMix0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSl9fX0sbz1uZXcgZC5HZW9tZXRyeShtLDEsbik7by5jb21wdXRlTm9ybWFscygpLG08PTUwP28uX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcyhvKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBzdHJva2UgXCIrYitcIiB3aXRoIG1vcmUgdGhhbiA1MCBkZXRhaWxcIiksdGhpcy5jcmVhdGVCdWZmZXJzKGMsbyl9dmFyIHA9dGhpcy51TVZNYXRyaXguY29weSgpO3RyeXt0aGlzLnVNVk1hdHJpeC50cmFuc2xhdGUoW2YsZywwXSksdGhpcy51TVZNYXRyaXguc2NhbGUoaCxpLDEpLHRoaXMuZHJhd0J1ZmZlcnMoYyl9ZmluYWxseXt0aGlzLnVNVk1hdHJpeD1wfXJldHVybiB0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJlY3Q9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hdHRyaWJ1dGVzLnBlclBpeGVsTGlnaHRpbmcsYz1hWzBdLGU9YVsxXSxmPWFbMl0sZz1hWzNdLGg9YVs0XXx8KGI/MToyNCksaT1hWzVdfHwoYj8xOjE2KSxqPVwicmVjdHxcIitoK1wifFwiK2k7aWYoIXRoaXMuZ2VvbWV0cnlJbkhhc2goaikpe3ZhciBrPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTw9dGhpcy5kZXRhaWxZO2ErKylmb3IodmFyIGI9YS90aGlzLmRldGFpbFksYz0wO2M8PXRoaXMuZGV0YWlsWDtjKyspe3ZhciBlPWMvdGhpcy5kZXRhaWxYLGY9bmV3IGQuVmVjdG9yKGUsYiwwKTt0aGlzLnZlcnRpY2VzLnB1c2goZiksdGhpcy51dnMucHVzaChlLGIpfWg+MCYmaT4wJiYodGhpcy5zdHJva2VJbmRpY2VzPVtbMCxoXSxbaCwoaCsxKSooaSsxKS0xXSxbKGgrMSkqKGkrMSktMSwoaCsxKSppXSxbKGgrMSkqaSwwXV0pfSxsPW5ldyBkLkdlb21ldHJ5KGgsaSxrKTtsLmNvbXB1dGVGYWNlcygpLmNvbXB1dGVOb3JtYWxzKCkuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpLHRoaXMuY3JlYXRlQnVmZmVycyhqLGwpfXZhciBtPXRoaXMudU1WTWF0cml4LmNvcHkoKTt0cnl7dGhpcy51TVZNYXRyaXgudHJhbnNsYXRlKFtjLGUsMF0pLHRoaXMudU1WTWF0cml4LnNjYWxlKGYsZywxKSx0aGlzLmRyYXdCdWZmZXJzKGopfWZpbmFsbHl7dGhpcy51TVZNYXRyaXg9bX1yZXR1cm4gdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5xdWFkPWZ1bmN0aW9uKGEsYixjLGUsZixnLGgsaSl7dmFyIGo9XCJxdWFkfFwiK2ErXCJ8XCIrYitcInxcIitjK1wifFwiK2UrXCJ8XCIrZitcInxcIitnK1wifFwiK2grXCJ8XCIraTtpZighdGhpcy5nZW9tZXRyeUluSGFzaChqKSl7dmFyIGs9ZnVuY3Rpb24oKXt0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGEsYiwwKSksdGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihjLGUsMCkpLHRoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoZixnLDApKSx0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGgsaSwwKSksdGhpcy51dnMucHVzaCgwLDAsMSwwLDEsMSwwLDEpLHRoaXMuc3Ryb2tlSW5kaWNlcz1bWzAsMV0sWzEsMl0sWzIsM10sWzMsMF1dfSxsPW5ldyBkLkdlb21ldHJ5KDIsMixrKTtsLmNvbXB1dGVOb3JtYWxzKCkuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpLGwuZmFjZXM9W1swLDEsMl0sWzIsMywwXV0sdGhpcy5jcmVhdGVCdWZmZXJzKGosbCl9cmV0dXJuIHRoaXMuZHJhd0J1ZmZlcnMoaiksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5iZXppZXI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGksaixrLGwpezg9PT1hcmd1bWVudHMubGVuZ3RoJiYoaj1nLGs9aCxnPWUsaD1kLGQ9YyxlPWQsYz1mPWk9bD0wKTt2YXIgbT10aGlzLl9wSW5zdC5fYmV6aWVyRGV0YWlsfHwyMDt0aGlzLmJlZ2luU2hhcGUoKTtmb3IodmFyIG49MDtuPD1tO24rKyl7dmFyIG89TWF0aC5wb3coMS1uL20sMykscD1uL20qMypNYXRoLnBvdygxLW4vbSwyKSxxPTMqTWF0aC5wb3cobi9tLDIpKigxLW4vbSkscj1NYXRoLnBvdyhuL20sMyk7dGhpcy52ZXJ0ZXgoYSpvK2QqcCtnKnEraipyLGIqbytlKnAraCpxK2sqcixjKm8rZipwK2kqcStsKnIpfXJldHVybiB0aGlzLmVuZFNoYXBlKCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSxqLGssbCl7OD09PWFyZ3VtZW50cy5sZW5ndGgmJihqPWcsaz1oLGc9ZSxoPWQsZD1jLGU9ZCxjPWY9aT1sPTApO3ZhciBtPXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbDt0aGlzLmJlZ2luU2hhcGUoKTtmb3IodmFyIG49MDtuPD1tO24rKyl7dmFyIG89LjUqTWF0aC5wb3cobi9tLDMpLHA9LjUqTWF0aC5wb3cobi9tLDIpLHE9bi9tKi41LHI9LjUscz1vKigzKmQtYS0zKmcraikrcCooMiphLTUqZCs0KmctaikrcSooLWErZykrciooMipkKSx0PW8qKDMqZS1iLTMqaCtrKStwKigyKmItNSplKzQqaC1rKStxKigtYitoKStyKigyKmUpLHU9byooMypmLWMtMyppK2wpK3AqKDIqYy01KmYrNCppLWwpK3EqKC1jK2kpK3IqKDIqZik7dGhpcy52ZXJ0ZXgocyx0LHUpfXJldHVybiB0aGlzLmVuZFNoYXBlKCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIDY9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLmJlZ2luU2hhcGUoKSx0aGlzLnZlcnRleChhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSksdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSxhcmd1bWVudHNbNV0pLHRoaXMuZW5kU2hhcGUoKSk6ND09PWFyZ3VtZW50cy5sZW5ndGgmJih0aGlzLmJlZ2luU2hhcGUoKSx0aGlzLnZlcnRleChhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLDApLHRoaXMudmVydGV4KGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10sMCksdGhpcy5lbmRTaGFwZSgpKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmJlemllclZlcnRleD1mdW5jdGlvbigpe2lmKDA9PT10aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleC5sZW5ndGgpdGhyb3cgRXJyb3IoXCJ2ZXJ0ZXgoKSBtdXN0IGJlIHVzZWQgb25jZSBiZWZvcmUgY2FsbGluZyBiZXppZXJWZXJ0ZXgoKVwiKTt2YXIgYSxiLGMsZCxlLGY9W10sZz1bXSxoPVtdLGk9YXJndW1lbnRzLmxlbmd0aDtpZihhPTAsMD09PXRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyLmxlbmd0aHx8dGhpcy5fbHV0QmV6aWVyRGV0YWlsIT09dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsKXt0aGlzLl9sb29rVXBUYWJsZUJlemllcj1bXSx0aGlzLl9sdXRCZXppZXJEZXRhaWw9dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsO2Zvcih2YXIgaj0xL3RoaXMuX2x1dEJlemllckRldGFpbCxrPTAsbD0xLG09MDtrPDE7KXtpZihhPXBhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSx0aGlzLl9sb29rVXBUYWJsZUJlemllclttXT10aGlzLl9iZXppZXJDb2VmZmljaWVudHMoYSksbC50b0ZpeGVkKDYpPT09ai50b0ZpeGVkKDYpKXthPXBhcnNlRmxvYXQobC50b0ZpeGVkKDYpKStwYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksKyttLHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW21dPXRoaXMuX2JlemllckNvZWZmaWNpZW50cyhhKTticmVha31rKz1qLGwtPWosKyttfX12YXIgbj10aGlzLl9sb29rVXBUYWJsZUJlemllci5sZW5ndGg7aWYoNj09PWkpe2Zvcih0aGlzLmlzQmV6aWVyPSEwLGY9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzBdLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzRdXSxnPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsxXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s1XV0sZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStmWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZ1szXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSx0aGlzLnZlcnRleChiLGMpO3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzBdPWFyZ3VtZW50c1s0XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsxXT1hcmd1bWVudHNbNV19ZWxzZSBpZig5PT09aSl7Zm9yKHRoaXMuaXNCZXppZXI9ITAsZj1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF0sYXJndW1lbnRzWzBdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNl1dLGc9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbNF0sYXJndW1lbnRzWzddXSxoPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsyXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzVdLGFyZ3VtZW50c1s4XV0sZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStmWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZ1szXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxkPWhbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0raFsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStoWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2hbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sdGhpcy52ZXJ0ZXgoYixjLGQpO3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzBdPWFyZ3VtZW50c1s2XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsxXT1hcmd1bWVudHNbN10sdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMl09YXJndW1lbnRzWzhdfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5xdWFkcmF0aWNWZXJ0ZXg9ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXgubGVuZ3RoKXRocm93IEVycm9yKFwidmVydGV4KCkgbXVzdCBiZSB1c2VkIG9uY2UgYmVmb3JlIGNhbGxpbmcgcXVhZHJhdGljVmVydGV4KClcIik7dmFyIGEsYixjLGQsZSxmPVtdLGc9W10saD1bXSxpPWFyZ3VtZW50cy5sZW5ndGg7aWYoYT0wLDA9PT10aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpYy5sZW5ndGh8fHRoaXMuX2x1dFF1YWRyYXRpY0RldGFpbCE9PXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbCl7dGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWM9W10sdGhpcy5fbHV0UXVhZHJhdGljRGV0YWlsPXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbDtmb3IodmFyIGo9MS90aGlzLl9sdXRRdWFkcmF0aWNEZXRhaWwsaz0wLGw9MSxtPTA7azwxOyl7aWYoYT1wYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbbV09dGhpcy5fcXVhZHJhdGljQ29lZmZpY2llbnRzKGEpLGwudG9GaXhlZCg2KT09PWoudG9GaXhlZCg2KSl7YT1wYXJzZUZsb2F0KGwudG9GaXhlZCg2KSkrcGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLCsrbSx0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1ttXT10aGlzLl9xdWFkcmF0aWNDb2VmZmljaWVudHMoYSk7YnJlYWt9ays9aixsLT1qLCsrbX19dmFyIG49dGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWMubGVuZ3RoO2lmKDQ9PT1pKXtmb3IodGhpcy5pc1F1YWRyYXRpYz0hMCxmPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFswXSxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzJdXSxnPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzNdXSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sdGhpcy52ZXJ0ZXgoYixjKTt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFswXT1hcmd1bWVudHNbMl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMV09YXJndW1lbnRzWzNdfWVsc2UgaWYoNj09PWkpe2Zvcih0aGlzLmlzUXVhZHJhdGljPSEwLGY9W3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbM11dLGc9W3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbNF1dLGg9W3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzJdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbNV1dLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSxkPWhbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0raFsxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStoWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLHRoaXMudmVydGV4KGIsYyxkKTt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFswXT1hcmd1bWVudHNbM10sdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMV09YXJndW1lbnRzWzRdLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzJdPWFyZ3VtZW50c1s1XX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuY3VydmVWZXJ0ZXg9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGY9W10sZz1bXSxoPVtdO2E9MDt2YXIgaT1hcmd1bWVudHMubGVuZ3RoO2lmKDA9PT10aGlzLl9sb29rVXBUYWJsZUJlemllci5sZW5ndGh8fHRoaXMuX2x1dEJlemllckRldGFpbCE9PXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbCl7dGhpcy5fbG9va1VwVGFibGVCZXppZXI9W10sdGhpcy5fbHV0QmV6aWVyRGV0YWlsPXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbDtmb3IodmFyIGo9MS90aGlzLl9sdXRCZXppZXJEZXRhaWwsaz0wLGw9MSxtPTA7azwxOyl7aWYoYT1wYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksdGhpcy5fbG9va1VwVGFibGVCZXppZXJbbV09dGhpcy5fYmV6aWVyQ29lZmZpY2llbnRzKGEpLGwudG9GaXhlZCg2KT09PWoudG9GaXhlZCg2KSl7YT1wYXJzZUZsb2F0KGwudG9GaXhlZCg2KSkrcGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLCsrbSx0aGlzLl9sb29rVXBUYWJsZUJlemllclttXT10aGlzLl9iZXppZXJDb2VmZmljaWVudHMoYSk7YnJlYWt9ays9aixsLT1qLCsrbX19dmFyIG49dGhpcy5fbG9va1VwVGFibGVCZXppZXIubGVuZ3RoO2lmKDI9PT1pKXtpZih0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzBdKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzFdKSw4PT09dGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5sZW5ndGgpe2Zvcih0aGlzLmlzQ3VydmU9ITAsZj10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFsyXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzRdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNl1dKSxnPXRoaXMuX2JlemllclRvQ2F0bXVsbChbdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFsxXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzNdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNV0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs3XV0pLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZlszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2dbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sdGhpcy52ZXJ0ZXgoYixjKTtmb3IoZT0wO2U8aTtlKyspdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5zaGlmdCgpfX1lbHNlIGlmKDM9PT1pJiYodGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5wdXNoKGFyZ3VtZW50c1swXSksdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5wdXNoKGFyZ3VtZW50c1sxXSksdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5wdXNoKGFyZ3VtZW50c1syXSksMTI9PT10aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4Lmxlbmd0aCkpe2Zvcih0aGlzLmlzQ3VydmU9ITAsZj10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFszXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzZdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbOV1dKSxnPXRoaXMuX2JlemllclRvQ2F0bXVsbChbdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFsxXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzRdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbN10sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFsxMF1dKSxoPXRoaXMuX2JlemllclRvQ2F0bXVsbChbdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFsyXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzVdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbOF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFsxMV1dKSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2ZbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStnWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGQ9aFswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStoWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2hbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0raFszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSx0aGlzLnZlcnRleChiLGMsZCk7Zm9yKGU9MDtlPGk7ZSsrKXRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXguc2hpZnQoKX19LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1Lkdlb21ldHJ5XCI6NzB9XSw2NTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5wcm90b3R5cGUub3JiaXRDb250cm9sPWZ1bmN0aW9uKGEsYil7aWYodGhpcy5fYXNzZXJ0M2QoXCJvcmJpdENvbnRyb2xcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwib3JiaXRDb250cm9sXCIsYXJndW1lbnRzKSx0aGlzLm1vdXNlWDx0aGlzLndpZHRoJiZ0aGlzLm1vdXNlWD4wJiZ0aGlzLm1vdXNlWTx0aGlzLmhlaWdodCYmdGhpcy5tb3VzZVk+MCl7dmFyIGM9dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYTt2b2lkIDA9PT1hJiYoYT0xKSx2b2lkIDA9PT1iJiYoYj1hKSwhMCE9PXRoaXMuY29udGV4dE1lbnVEaXNhYmxlZCYmKHRoaXMuY2FudmFzLm9uY29udGV4dG1lbnU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdGhpcy5fc2V0UHJvcGVydHkoXCJjb250ZXh0TWVudURpc2FibGVkXCIsITApKSwhMCE9PXRoaXMud2hlZWxEZWZhdWx0RGlzYWJsZWQmJih0aGlzLmNhbnZhcy5vbndoZWVsPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHRoaXMuX3NldFByb3BlcnR5KFwid2hlZWxEZWZhdWx0RGlzYWJsZWRcIiwhMCkpO3ZhciBlPXRoaXMuaGVpZ2h0PHRoaXMud2lkdGg/dGhpcy5oZWlnaHQ6dGhpcy53aWR0aDtpZih0aGlzLl9tb3VzZVdoZWVsRGVsdGFZIT09dGhpcy5fcG1vdXNlV2hlZWxEZWx0YVkmJih0aGlzLl9tb3VzZVdoZWVsRGVsdGFZPjA/dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5fb3JiaXQoMCwwLC41KmUpOnRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuX29yYml0KDAsMCwtLjUqZSkpLHRoaXMubW91c2VJc1ByZXNzZWQpaWYodGhpcy5tb3VzZUJ1dHRvbj09PXRoaXMuTEVGVCl7dmFyIGY9LWEqKHRoaXMubW91c2VYLXRoaXMucG1vdXNlWCkvZSxnPWIqKHRoaXMubW91c2VZLXRoaXMucG1vdXNlWSkvZTt0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLl9vcmJpdChmLGcsMCl9ZWxzZSBpZih0aGlzLm1vdXNlQnV0dG9uPT09dGhpcy5SSUdIVCl7dmFyIGg9Yy5fZ2V0TG9jYWxBeGVzKCksaT1NYXRoLnNxcnQoaC54WzBdKmgueFswXStoLnhbMl0qaC54WzJdKTswIT09aSYmKGgueFswXS89aSxoLnhbMl0vPWkpO3ZhciBqPU1hdGguc3FydChoLnlbMF0qaC55WzBdK2gueVsyXSpoLnlbMl0pOzAhPT1qJiYoaC55WzBdLz1qLGgueVsyXS89aik7dmFyIGs9LTEqYSoodGhpcy5tb3VzZVgtdGhpcy5wbW91c2VYKSxsPS0xKmIqKHRoaXMubW91c2VZLXRoaXMucG1vdXNlWSk7Yy5zZXRQb3NpdGlvbihjLmV5ZVgraypoLnhbMF0rbCpoLnpbMF0sYy5leWVZLGMuZXllWitrKmgueFsyXStsKmguelsyXSl9cmV0dXJuIHRoaXN9fSxkLnByb3RvdHlwZS5kZWJ1Z01vZGU9ZnVuY3Rpb24oKXt0aGlzLl9hc3NlcnQzZChcImRlYnVnTW9kZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJkZWJ1Z01vZGVcIixhcmd1bWVudHMpO2Zvcih2YXIgYT10aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0Lmxlbmd0aC0xO2E+PTA7YS0tKXRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3RbYV0udG9TdHJpbmcoKSE9PXRoaXMuX2dyaWQoKS50b1N0cmluZygpJiZ0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0W2FdLnRvU3RyaW5nKCkhPT10aGlzLl9heGVzSWNvbigpLnRvU3RyaW5nKCl8fHRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3Quc3BsaWNlKGEsMSk7YXJndW1lbnRzWzBdPT09ZS5HUklEP3RoaXMucmVnaXN0ZXJNZXRob2QoXCJwb3N0XCIsdGhpcy5fZ3JpZC5jYWxsKHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzRdLGFyZ3VtZW50c1s1XSkpOmFyZ3VtZW50c1swXT09PWUuQVhFUz90aGlzLnJlZ2lzdGVyTWV0aG9kKFwicG9zdFwiLHRoaXMuX2F4ZXNJY29uLmNhbGwodGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNF0pKToodGhpcy5yZWdpc3Rlck1ldGhvZChcInBvc3RcIix0aGlzLl9ncmlkLmNhbGwodGhpcyxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzRdKSksdGhpcy5yZWdpc3Rlck1ldGhvZChcInBvc3RcIix0aGlzLl9heGVzSWNvbi5jYWxsKHRoaXMsYXJndW1lbnRzWzVdLGFyZ3VtZW50c1s2XSxhcmd1bWVudHNbN10sYXJndW1lbnRzWzhdKSkpfSxkLnByb3RvdHlwZS5ub0RlYnVnTW9kZT1mdW5jdGlvbigpe3RoaXMuX2Fzc2VydDNkKFwibm9EZWJ1Z01vZGVcIik7Zm9yKHZhciBhPXRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3QubGVuZ3RoLTE7YT49MDthLS0pdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdFthXS50b1N0cmluZygpIT09dGhpcy5fZ3JpZCgpLnRvU3RyaW5nKCkmJnRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3RbYV0udG9TdHJpbmcoKSE9PXRoaXMuX2F4ZXNJY29uKCkudG9TdHJpbmcoKXx8dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5zcGxpY2UoYSwxKX0sZC5wcm90b3R5cGUuX2dyaWQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2b2lkIDA9PT1hJiYoYT10aGlzLndpZHRoLzIpLHZvaWQgMD09PWImJihiPU1hdGgucm91bmQoYS8zMCk8ND80Ok1hdGgucm91bmQoYS8zMCkpLHZvaWQgMD09PWMmJihjPTApLHZvaWQgMD09PWQmJihkPTApLHZvaWQgMD09PWUmJihlPTApO3ZhciBmPWEvYixnPWEvMjtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnB1c2goKSx0aGlzLnN0cm9rZSgyNTUqdGhpcy5fcmVuZGVyZXIuY3VyU3Ryb2tlQ29sb3JbMF0sMjU1KnRoaXMuX3JlbmRlcmVyLmN1clN0cm9rZUNvbG9yWzFdLDI1NSp0aGlzLl9yZW5kZXJlci5jdXJTdHJva2VDb2xvclsyXSksdGhpcy5fcmVuZGVyZXIudU1WTWF0cml4LnNldCh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzBdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsyXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzNdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs1XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzZdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbN10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs4XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzldLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTBdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTFdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTJdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTNdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTRdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTVdKTtmb3IodmFyIGE9MDthPD1iO2ErKyl0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoLWcrYyxkLGEqZi1nK2UpLHRoaXMudmVydGV4KCtnK2MsZCxhKmYtZytlKSx0aGlzLmVuZFNoYXBlKCk7Zm9yKHZhciBoPTA7aDw9YjtoKyspdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KGgqZi1nK2MsZCwtZytlKSx0aGlzLnZlcnRleChoKmYtZytjLGQsK2crZSksdGhpcy5lbmRTaGFwZSgpO3RoaXMucG9wKCl9fSxkLnByb3RvdHlwZS5fYXhlc0ljb249ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHZvaWQgMD09PWEmJihhPXRoaXMud2lkdGgvMjA+NDA/dGhpcy53aWR0aC8yMDo0MCksdm9pZCAwPT09YiYmKGI9LXRoaXMud2lkdGgvNCksdm9pZCAwPT09YyYmKGM9Yiksdm9pZCAwPT09ZCYmKGQ9YiksZnVuY3Rpb24oKXt0aGlzLnB1c2goKSx0aGlzLl9yZW5kZXJlci51TVZNYXRyaXguc2V0KHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzJdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbM10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs0XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzVdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs3XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzhdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxM10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNV0pLHRoaXMuc3Ryb2tlV2VpZ2h0KDIpLHRoaXMuc3Ryb2tlKDI1NSwwLDApLHRoaXMuYmVnaW5TaGFwZSh0aGlzLkxJTkVTKSx0aGlzLnZlcnRleChiLGMsZCksdGhpcy52ZXJ0ZXgoYithLGMsZCksdGhpcy5lbmRTaGFwZSgpLHRoaXMuc3Ryb2tlKDAsMjU1LDApLHRoaXMuYmVnaW5TaGFwZSh0aGlzLkxJTkVTKSx0aGlzLnZlcnRleChiLGMsZCksdGhpcy52ZXJ0ZXgoYixjK2EsZCksdGhpcy5lbmRTaGFwZSgpLHRoaXMuc3Ryb2tlKDAsMCwyNTUpLHRoaXMuYmVnaW5TaGFwZSh0aGlzLkxJTkVTKSx0aGlzLnZlcnRleChiLGMsZCksdGhpcy52ZXJ0ZXgoYixjLGQrYSksdGhpcy5lbmRTaGFwZSgpLHRoaXMucG9wKCl9fSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmFtYmllbnRMaWdodD1mdW5jdGlvbihhLGIsYyxlKXt0aGlzLl9hc3NlcnQzZChcImFtYmllbnRMaWdodFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJhbWJpZW50TGlnaHRcIixhcmd1bWVudHMpO3ZhciBmPXRoaXMuY29sb3IuYXBwbHkodGhpcyxhcmd1bWVudHMpLGc9dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIGcuc2V0VW5pZm9ybShcInVVc2VMaWdodGluZ1wiLCEwKSxnLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvciksdGhpcy5fcmVuZGVyZXIuYW1iaWVudExpZ2h0Q29sb3JzLnB1c2goZi5fYXJyYXlbMF0sZi5fYXJyYXlbMV0sZi5fYXJyYXlbMl0pLGcuc2V0VW5pZm9ybShcInVBbWJpZW50Q29sb3JcIix0aGlzLl9yZW5kZXJlci5hbWJpZW50TGlnaHRDb2xvcnMpLGcuc2V0VW5pZm9ybShcInVBbWJpZW50TGlnaHRDb3VudFwiLHRoaXMuX3JlbmRlcmVyLmFtYmllbnRMaWdodENvbG9ycy5sZW5ndGgvMyksdGhpc30sZC5wcm90b3R5cGUuZGlyZWN0aW9uYWxMaWdodD1mdW5jdGlvbihhLGIsYyxlLGYsZyl7dGhpcy5fYXNzZXJ0M2QoXCJkaXJlY3Rpb25hbExpZ2h0XCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImRpcmVjdGlvbmFsTGlnaHRcIixhcmd1bWVudHMpO3ZhciBoLGk9dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7aD1hIGluc3RhbmNlb2YgZC5Db2xvcj9hOnRoaXMuY29sb3IoYSxiLGMpO3ZhciBqLGssbCxtPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdO1wibnVtYmVyXCI9PXR5cGVvZiBtPyhqPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTNdLGs9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMl0sbD1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSk6KGo9bS54LGs9bS55LGw9bS56KSxpLnNldFVuaWZvcm0oXCJ1VXNlTGlnaHRpbmdcIiwhMCksaS5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3IpO3ZhciBuPU1hdGguc3FydChqKmorayprK2wqbCk7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25zLnB1c2goai9uLGsvbixsL24pLGkuc2V0VW5pZm9ybShcInVMaWdodGluZ0RpcmVjdGlvblwiLHRoaXMuX3JlbmRlcmVyLmRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25zKSx0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzLnB1c2goaC5fYXJyYXlbMF0saC5fYXJyYXlbMV0saC5fYXJyYXlbMl0pLGkuc2V0VW5pZm9ybShcInVEaXJlY3Rpb25hbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodENvbG9ycyksaS5zZXRVbmlmb3JtKFwidURpcmVjdGlvbmFsTGlnaHRDb3VudFwiLHRoaXMuX3JlbmRlcmVyLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnMubGVuZ3RoLzMpLHRoaXN9LGQucHJvdG90eXBlLnBvaW50TGlnaHQ9ZnVuY3Rpb24oYSxiLGMsZSxmLGcpe3RoaXMuX2Fzc2VydDNkKFwicG9pbnRMaWdodFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwb2ludExpZ2h0XCIsYXJndW1lbnRzKTt2YXIgaDtoPWEgaW5zdGFuY2VvZiBkLkNvbG9yP2E6dGhpcy5jb2xvcihhLGIsYyk7dmFyIGksaixrLGw9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV07XCJudW1iZXJcIj09dHlwZW9mIGw/KGk9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtM10saj1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSxrPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKTooaT1sLngsaj1sLnksaz1sLnopO3ZhciBtPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBtLnNldFVuaWZvcm0oXCJ1VXNlTGlnaHRpbmdcIiwhMCksbS5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3IpLHRoaXMuX3JlbmRlcmVyLnBvaW50TGlnaHRQb3NpdGlvbnMucHVzaChpLGosayksbS5zZXRVbmlmb3JtKFwidVBvaW50TGlnaHRMb2NhdGlvblwiLHRoaXMuX3JlbmRlcmVyLnBvaW50TGlnaHRQb3NpdGlvbnMpLHRoaXMuX3JlbmRlcmVyLnBvaW50TGlnaHRDb2xvcnMucHVzaChoLl9hcnJheVswXSxoLl9hcnJheVsxXSxoLl9hcnJheVsyXSksbS5zZXRVbmlmb3JtKFwidVBvaW50TGlnaHRDb2xvclwiLHRoaXMuX3JlbmRlcmVyLnBvaW50TGlnaHRDb2xvcnMpLG0uc2V0VW5pZm9ybShcInVQb2ludExpZ2h0Q291bnRcIix0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0Q29sb3JzLmxlbmd0aC8zKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw2NzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiKXtmb3IodmFyIGM9e3Y6W10sdnQ6W10sdm46W119LGQ9e30sZj0wO2Y8Yi5sZW5ndGg7KytmKXt2YXIgZz1iW2ZdLnRyaW0oKS5zcGxpdCgvXFxiXFxzKy8pO2lmKGcubGVuZ3RoPjApaWYoXCJ2XCI9PT1nWzBdfHxcInZuXCI9PT1nWzBdKXt2YXIgaD1uZXcgZS5WZWN0b3IocGFyc2VGbG9hdChnWzFdKSxwYXJzZUZsb2F0KGdbMl0pLHBhcnNlRmxvYXQoZ1szXSkpO2NbZ1swXV0ucHVzaChoKX1lbHNlIGlmKFwidnRcIj09PWdbMF0pe3ZhciBpPVtwYXJzZUZsb2F0KGdbMV0pLHBhcnNlRmxvYXQoZ1syXSldO2NbZ1swXV0ucHVzaChpKX1lbHNlIGlmKFwiZlwiPT09Z1swXSlmb3IodmFyIGo9MztqPGcubGVuZ3RoOysrail7Zm9yKHZhciBrPVtdLGw9WzEsai0xLGpdLG09MDttPGwubGVuZ3RoOysrbSl7dmFyIG49Z1tsW21dXSxvPTA7aWYodm9pZCAwIT09ZFtuXSlvPWRbbl07ZWxzZXtmb3IodmFyIHA9bi5zcGxpdChcIi9cIikscT0wO3E8cC5sZW5ndGg7cSsrKXBbcV09cGFyc2VJbnQocFtxXSktMTtvPWRbbl09YS52ZXJ0aWNlcy5sZW5ndGgsYS52ZXJ0aWNlcy5wdXNoKGMudltwWzBdXS5jb3B5KCkpLGMudnRbcFsxXV0/YS51dnMucHVzaChjLnZ0W3BbMV1dLnNsaWNlKCkpOmEudXZzLnB1c2goWzAsMF0pLGMudm5bcFsyXV0mJmEudmVydGV4Tm9ybWFscy5wdXNoKGMudm5bcFsyXV0uY29weSgpKX1rLnB1c2gobyl9a1swXSE9PWtbMV0mJmtbMF0hPT1rWzJdJiZrWzFdIT09a1syXSYmYS5mYWNlcy5wdXNoKGspfX1yZXR1cm4gMD09PWEudmVydGV4Tm9ybWFscy5sZW5ndGgmJmEuY29tcHV0ZU5vcm1hbHMoKSxhfXZhciBlPWEoXCIuLi9jb3JlL21haW5cIik7YShcIi4vcDUuR2VvbWV0cnlcIiksZS5wcm90b3R5cGUubG9hZE1vZGVsPWZ1bmN0aW9uKGEpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRNb2RlbFwiLGFyZ3VtZW50cyk7dmFyIGIsYyxmO1wiYm9vbGVhblwiPT10eXBlb2YgYXJndW1lbnRzWzFdPyhiPWFyZ3VtZW50c1sxXSxjPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXSk6KGI9ITEsYz1hcmd1bWVudHNbMV0sZj1hcmd1bWVudHNbMl0pO3ZhciBnPW5ldyBlLkdlb21ldHJ5O2cuZ2lkPWErXCJ8XCIrYjt2YXIgaD10aGlzO3JldHVybiB0aGlzLmxvYWRTdHJpbmdzKGEsZnVuY3Rpb24oYSl7ZChnLGEpLGImJmcubm9ybWFsaXplKCksaC5fZGVjcmVtZW50UHJlbG9hZCgpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJmMoZyl9LmJpbmQodGhpcyksZiksZ30sZS5wcm90b3R5cGUubW9kZWw9ZnVuY3Rpb24oYSl7dGhpcy5fYXNzZXJ0M2QoXCJtb2RlbFwiKSxlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtb2RlbFwiLGFyZ3VtZW50cyksYS52ZXJ0aWNlcy5sZW5ndGg+MCYmKHRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGEuZ2lkKXx8KGEuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoYS5naWQsYSkpLHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzKGEuZ2lkKSl9LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNCxcIi4vcDUuR2VvbWV0cnlcIjo3MH1dLDY4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi9wNS5UZXh0dXJlXCIpLGQucHJvdG90eXBlLmxvYWRTaGFkZXI9ZnVuY3Rpb24oYSxiKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkU2hhZGVyXCIsYXJndW1lbnRzKTt2YXIgYz1uZXcgZC5TaGFkZXIsZT10aGlzLGY9ITEsZz0hMTtyZXR1cm4gdGhpcy5sb2FkU3RyaW5ncyhiLGZ1bmN0aW9uKGEpe2MuX2ZyYWdTcmM9YS5qb2luKFwiXFxuXCIpLGY9ITAsZyYmZS5fZGVjcmVtZW50UHJlbG9hZCgpfSksdGhpcy5sb2FkU3RyaW5ncyhhLGZ1bmN0aW9uKGEpe2MuX3ZlcnRTcmM9YS5qb2luKFwiXFxuXCIpLGc9ITAsZiYmZS5fZGVjcmVtZW50UHJlbG9hZCgpfSksY30sZC5wcm90b3R5cGUuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwiY3JlYXRlU2hhZGVyXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZVNoYWRlclwiLGFyZ3VtZW50cyksbmV3IGQuU2hhZGVyKHRoaXMuX3JlbmRlcmVyLGEsYil9LGQucHJvdG90eXBlLnNoYWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJzaGFkZXJcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2hhZGVyXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hLl9yZW5kZXJlciYmKGEuX3JlbmRlcmVyPXRoaXMuX3JlbmRlcmVyKSxhLmlzU3Ryb2tlU2hhZGVyKCk/dGhpcy5fcmVuZGVyZXIuc2V0U3Ryb2tlU2hhZGVyKGEpOnRoaXMuX3JlbmRlcmVyLnNldEZpbGxTaGFkZXIoYSksdGhpc30sZC5wcm90b3R5cGUubm9ybWFsTWF0ZXJpYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJub3JtYWxNYXRlcmlhbFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJub3JtYWxNYXRlcmlhbFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuZHJhd01vZGU9ZS5GSUxMLHRoaXMuX3JlbmRlcmVyLnNldEZpbGxTaGFkZXIodGhpcy5fcmVuZGVyZXIuX2dldE5vcm1hbFNoYWRlcigpKSx0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3I9WzEsMSwxLDFdLHRoaXMubm9TdHJva2UoKSx0aGlzfSxkLnByb3RvdHlwZS50ZXh0dXJlPWZ1bmN0aW9uKGEpe3RoaXMuX2Fzc2VydDNkKFwidGV4dHVyZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0dXJlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5kcmF3TW9kZT1lLlRFWFRVUkU7dmFyIGI9dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIGIuc2V0VW5pZm9ybShcInVTcGVjdWxhclwiLCExKSxiLnNldFVuaWZvcm0oXCJpc1RleHR1cmVcIiwhMCksYi5zZXRVbmlmb3JtKFwidVNhbXBsZXJcIixhKSx0aGlzLm5vU3Ryb2tlKCksdGhpc30sZC5wcm90b3R5cGUuYW1iaWVudE1hdGVyaWFsPWZ1bmN0aW9uKGEsYixjLGUpe3RoaXMuX2Fzc2VydDNkKFwiYW1iaWVudE1hdGVyaWFsXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImFtYmllbnRNYXRlcmlhbFwiLGFyZ3VtZW50cyk7dmFyIGY9ZC5wcm90b3R5cGUuY29sb3IuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvcj1mLl9hcnJheTt2YXIgZz10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gZy5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3IpLGcuc2V0VW5pZm9ybShcInVTcGVjdWxhclwiLCExKSxnLnNldFVuaWZvcm0oXCJpc1RleHR1cmVcIiwhMSksdGhpc30sZC5wcm90b3R5cGUuc3BlY3VsYXJNYXRlcmlhbD1mdW5jdGlvbihhLGIsYyxlKXt0aGlzLl9hc3NlcnQzZChcInNwZWN1bGFyTWF0ZXJpYWxcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3BlY3VsYXJNYXRlcmlhbFwiLGFyZ3VtZW50cyk7dmFyIGY9ZC5wcm90b3R5cGUuY29sb3IuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvcj1mLl9hcnJheTt2YXIgZz10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gZy5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3IpLGcuc2V0VW5pZm9ybShcInVTcGVjdWxhclwiLCEwKSxnLnNldFVuaWZvcm0oXCJpc1RleHR1cmVcIiwhMSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fYXBwbHlDb2xvckJsZW5kPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuR0wsYz10aGlzLmRyYXdNb2RlPT09ZS5URVhUVVJFO3JldHVybiBjfHxhW2EubGVuZ3RoLTFdPDE/KGIuZGVwdGhNYXNrKGMpLGIuZW5hYmxlKGIuQkxFTkQpLGIuYmxlbmRFcXVhdGlvbihiLkZVTkNfQUREKSxiLmJsZW5kRnVuYyhiLlNSQ19BTFBIQSxiLk9ORV9NSU5VU19TUkNfQUxQSEEpKTooYi5kZXB0aE1hc2soITApLGIuZGlzYWJsZShiLkJMRU5EKSksYX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vcDUuVGV4dHVyZVwiOjc2fV0sNjk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmNhbWVyYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcImNhbWVyYVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjYW1lcmFcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhLmFwcGx5KHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5wZXJzcGVjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInBlcnNwZWN0aXZlXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBlcnNwZWN0aXZlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLnBlcnNwZWN0aXZlLmFwcGx5KHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5vcnRobz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcIm9ydGhvXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm9ydGhvXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLm9ydGhvLmFwcGx5KHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5jcmVhdGVDYW1lcmE9ZnVuY3Rpb24oKXt0aGlzLl9hc3NlcnQzZChcImNyZWF0ZUNhbWVyYVwiKTt2YXIgYT1uZXcgZC5DYW1lcmEodGhpcy5fcmVuZGVyZXIpO3JldHVybiBhLl9jb21wdXRlQ2FtZXJhRGVmYXVsdFNldHRpbmdzKCksYS5fc2V0RGVmYXVsdENhbWVyYSgpLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmE9YSxhfSxkLkNhbWVyYT1mdW5jdGlvbihhKXt0aGlzLl9yZW5kZXJlcj1hLHRoaXMuY2FtZXJhVHlwZT1cImRlZmF1bHRcIix0aGlzLmNhbWVyYU1hdHJpeD1uZXcgZC5NYXRyaXgsdGhpcy5wcm9qTWF0cml4PW5ldyBkLk1hdHJpeH0sZC5DYW1lcmEucHJvdG90eXBlLnBlcnNwZWN0aXZlPWZ1bmN0aW9uKGEsYixjLGUpe3ZvaWQgMD09PWE/KGE9dGhpcy5kZWZhdWx0Q2FtZXJhRk9WLHRoaXMuY2FtZXJhRk9WPWEpOnRoaXMuY2FtZXJhRk9WPXRoaXMuX3JlbmRlcmVyLl9wSW5zdC5fdG9SYWRpYW5zKGEpLHZvaWQgMD09PWImJihiPXRoaXMuZGVmYXVsdEFzcGVjdFJhdGlvKSx2b2lkIDA9PT1jJiYoYz10aGlzLmRlZmF1bHRDYW1lcmFOZWFyKSx2b2lkIDA9PT1lJiYoZT10aGlzLmRlZmF1bHRDYW1lcmFGYXIpLGM8PTFlLTQmJihjPS4wMSxjb25zb2xlLmxvZyhcIkF2b2lkIHBlcnNwZWN0aXZlIG5lYXIgcGxhbmUgdmFsdWVzIGNsb3NlIHRvIG9yIGJlbG93IDAuIFNldHRpbmcgdmFsdWUgdG8gMC4wMS5cIikpLGU8YyYmY29uc29sZS5sb2coXCJQZXJzcGVjdGl2ZSBmYXIgcGxhbmUgdmFsdWUgaXMgbGVzcyB0aGFuIG5lYXIgcGxhbmUgdmFsdWUuIE5vdGhpbmcgd2lsbCBiZSBzaG93bi5cIiksdGhpcy5jYW1lcmFGT1Y9dGhpcy5fcmVuZGVyZXIuX3BJbnN0Ll90b1JhZGlhbnMoYSksdGhpcy5hc3BlY3RSYXRpbz1iLHRoaXMuY2FtZXJhTmVhcj1jLHRoaXMuY2FtZXJhRmFyPWUsdGhpcy5wcm9qTWF0cml4PWQuTWF0cml4LmlkZW50aXR5KCk7dmFyIGY9MS9NYXRoLnRhbih0aGlzLmNhbWVyYUZPVi8yKSxnPTEvKHRoaXMuY2FtZXJhTmVhci10aGlzLmNhbWVyYUZhcik7dGhpcy5wcm9qTWF0cml4LnNldChmL2IsMCwwLDAsMCwtZiwwLDAsMCwwLChlK2MpKmcsLTEsMCwwLDIqZSpjKmcsMCksdGhpcy5faXNBY3RpdmUoKSYmdGhpcy5fcmVuZGVyZXIudVBNYXRyaXguc2V0KHRoaXMucHJvak1hdHJpeC5tYXQ0WzBdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzFdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzJdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzNdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzRdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzVdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzZdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzddLHRoaXMucHJvak1hdHJpeC5tYXQ0WzhdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzldLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEwXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTJdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEzXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxNF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTVdKSx0aGlzLmNhbWVyYVR5cGU9XCJjdXN0b21cIn0sZC5DYW1lcmEucHJvdG90eXBlLm9ydGhvPWZ1bmN0aW9uKGEsYixjLGUsZixnKXt2b2lkIDA9PT1hJiYoYT0tdGhpcy5fcmVuZGVyZXIud2lkdGgvMiksdm9pZCAwPT09YiYmKGI9K3RoaXMuX3JlbmRlcmVyLndpZHRoLzIpLHZvaWQgMD09PWMmJihjPS10aGlzLl9yZW5kZXJlci5oZWlnaHQvMiksdm9pZCAwPT09ZSYmKGU9K3RoaXMuX3JlbmRlcmVyLmhlaWdodC8yKSx2b2lkIDA9PT1mJiYoZj0wKSx2b2lkIDA9PT1nJiYoZz1NYXRoLm1heCh0aGlzLl9yZW5kZXJlci53aWR0aCx0aGlzLl9yZW5kZXJlci5oZWlnaHQpKTt2YXIgaD1iLWEsaT1lLWMsaj1nLWYsaz0yL2gsbD0yL2ksbT0tMi9qLG49LShiK2EpL2gsbz0tKGUrYykvaSxwPS0oZytmKS9qO3RoaXMucHJvak1hdHJpeD1kLk1hdHJpeC5pZGVudGl0eSgpLHRoaXMucHJvak1hdHJpeC5zZXQoaywwLDAsMCwwLC1sLDAsMCwwLDAsbSwwLG4sbyxwLDEpLHRoaXMuX2lzQWN0aXZlKCkmJnRoaXMuX3JlbmRlcmVyLnVQTWF0cml4LnNldCh0aGlzLnByb2pNYXRyaXgubWF0NFswXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxXSx0aGlzLnByb2pNYXRyaXgubWF0NFsyXSx0aGlzLnByb2pNYXRyaXgubWF0NFszXSx0aGlzLnByb2pNYXRyaXgubWF0NFs0XSx0aGlzLnByb2pNYXRyaXgubWF0NFs1XSx0aGlzLnByb2pNYXRyaXgubWF0NFs2XSx0aGlzLnByb2pNYXRyaXgubWF0NFs3XSx0aGlzLnByb2pNYXRyaXgubWF0NFs4XSx0aGlzLnByb2pNYXRyaXgubWF0NFs5XSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTFdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEyXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxM10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTRdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzE1XSksdGhpcy5jYW1lcmFUeXBlPVwiY3VzdG9tXCJ9LGQuQ2FtZXJhLnByb3RvdHlwZS5fcm90YXRlVmlldz1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj10aGlzLmNlbnRlclgsZz10aGlzLmNlbnRlclksaD10aGlzLmNlbnRlclo7Zi09dGhpcy5leWVYLGctPXRoaXMuZXllWSxoLT10aGlzLmV5ZVo7dmFyIGk9ZC5NYXRyaXguaWRlbnRpdHkodGhpcy5fcmVuZGVyZXIuX3BJbnN0KTtpLnJvdGF0ZShhLGIsYyxlKTt2YXIgaj1bZippLm1hdDRbMF0rZyppLm1hdDRbNF0raCppLm1hdDRbOF0sZippLm1hdDRbMV0rZyppLm1hdDRbNV0raCppLm1hdDRbOV0sZippLm1hdDRbMl0rZyppLm1hdDRbNl0raCppLm1hdDRbMTBdXTtqWzBdKz10aGlzLmV5ZVgsalsxXSs9dGhpcy5leWVZLGpbMl0rPXRoaXMuZXllWix0aGlzLmNhbWVyYSh0aGlzLmV5ZVgsdGhpcy5leWVZLHRoaXMuZXllWixqWzBdLGpbMV0salsyXSx0aGlzLnVwWCx0aGlzLnVwWSx0aGlzLnVwWil9LGQuQ2FtZXJhLnByb3RvdHlwZS5wYW49ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fZ2V0TG9jYWxBeGVzKCk7dGhpcy5fcm90YXRlVmlldyhhLGIueVswXSxiLnlbMV0sYi55WzJdKX0sZC5DYW1lcmEucHJvdG90eXBlLnRpbHQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fZ2V0TG9jYWxBeGVzKCk7dGhpcy5fcm90YXRlVmlldyhhLGIueFswXSxiLnhbMV0sYi54WzJdKX0sZC5DYW1lcmEucHJvdG90eXBlLmxvb2tBdD1mdW5jdGlvbihhLGIsYyl7dGhpcy5jYW1lcmEodGhpcy5leWVYLHRoaXMuZXllWSx0aGlzLmV5ZVosYSxiLGMsdGhpcy51cFgsdGhpcy51cFksdGhpcy51cFopfSxkLkNhbWVyYS5wcm90b3R5cGUuY2FtZXJhPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpKXt2b2lkIDA9PT1hJiYoYT10aGlzLmRlZmF1bHRFeWVYLGI9dGhpcy5kZWZhdWx0RXllWSxjPXRoaXMuZGVmYXVsdEV5ZVosZD1hLGU9YixmPTAsZz0wLGg9MSxpPTApLHRoaXMuZXllWD1hLHRoaXMuZXllWT1iLHRoaXMuZXllWj1jLHRoaXMuY2VudGVyWD1kLHRoaXMuY2VudGVyWT1lLHRoaXMuY2VudGVyWj1mLHRoaXMudXBYPWcsdGhpcy51cFk9aCx0aGlzLnVwWj1pO3ZhciBqPXRoaXMuX2dldExvY2FsQXhlcygpO3RoaXMuY2FtZXJhTWF0cml4LnNldChqLnhbMF0sai55WzBdLGouelswXSwwLGoueFsxXSxqLnlbMV0sai56WzFdLDAsai54WzJdLGoueVsyXSxqLnpbMl0sMCwwLDAsMCwxKTt2YXIgaz0tYSxsPS1iLG09LWM7cmV0dXJuIHRoaXMuY2FtZXJhTWF0cml4LnRyYW5zbGF0ZShbayxsLG1dKSx0aGlzLl9pc0FjdGl2ZSgpJiZ0aGlzLl9yZW5kZXJlci51TVZNYXRyaXguc2V0KHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMF0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsxXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzJdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbM10sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs0XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzVdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbNl0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs3XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzhdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbOV0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsxMF0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsxMV0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsxMl0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsxM10sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsxNF0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsxNV0pLHRoaXN9LGQuQ2FtZXJhLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLl9nZXRMb2NhbEF4ZXMoKSxlPVtkLnhbMF0qYSxkLnhbMV0qYSxkLnhbMl0qYV0sZj1bZC55WzBdKmIsZC55WzFdKmIsZC55WzJdKmJdLGc9W2QuelswXSpjLGQuelsxXSpjLGQuelsyXSpjXTt0aGlzLmNhbWVyYSh0aGlzLmV5ZVgrZVswXStmWzBdK2dbMF0sdGhpcy5leWVZK2VbMV0rZlsxXStnWzFdLHRoaXMuZXllWitlWzJdK2ZbMl0rZ1syXSx0aGlzLmNlbnRlclgrZVswXStmWzBdK2dbMF0sdGhpcy5jZW50ZXJZK2VbMV0rZlsxXStnWzFdLHRoaXMuY2VudGVyWitlWzJdK2ZbMl0rZ1syXSwwLDEsMCl9LGQuQ2FtZXJhLnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS10aGlzLmV5ZVgsZT1iLXRoaXMuZXllWSxmPWMtdGhpcy5leWVaO3RoaXMuY2FtZXJhKGEsYixjLHRoaXMuY2VudGVyWCtkLHRoaXMuY2VudGVyWStlLHRoaXMuY2VudGVyWitmLDAsMSwwKX0sZC5DYW1lcmEucHJvdG90eXBlLl9jb21wdXRlQ2FtZXJhRGVmYXVsdFNldHRpbmdzPWZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0Q2FtZXJhRk9WPTYwLzE4MCpNYXRoLlBJLFxudGhpcy5kZWZhdWx0QXNwZWN0UmF0aW89dGhpcy5fcmVuZGVyZXIud2lkdGgvdGhpcy5fcmVuZGVyZXIuaGVpZ2h0LHRoaXMuZGVmYXVsdEV5ZVg9MCx0aGlzLmRlZmF1bHRFeWVZPTAsdGhpcy5kZWZhdWx0RXllWj10aGlzLl9yZW5kZXJlci5oZWlnaHQvMi9NYXRoLnRhbih0aGlzLmRlZmF1bHRDYW1lcmFGT1YvMiksdGhpcy5kZWZhdWx0Q2VudGVyWD0wLHRoaXMuZGVmYXVsdENlbnRlclk9MCx0aGlzLmRlZmF1bHRDZW50ZXJaPTAsdGhpcy5kZWZhdWx0Q2FtZXJhTmVhcj0uMSp0aGlzLmRlZmF1bHRFeWVaLHRoaXMuZGVmYXVsdENhbWVyYUZhcj0xMCp0aGlzLmRlZmF1bHRFeWVafSxkLkNhbWVyYS5wcm90b3R5cGUuX3NldERlZmF1bHRDYW1lcmE9ZnVuY3Rpb24oKXt0aGlzLmNhbWVyYUZPVj10aGlzLmRlZmF1bHRDYW1lcmFGT1YsdGhpcy5hc3BlY3RSYXRpbz10aGlzLmRlZmF1bHRBc3BlY3RSYXRpbyx0aGlzLmV5ZVg9dGhpcy5kZWZhdWx0RXllWCx0aGlzLmV5ZVk9dGhpcy5kZWZhdWx0RXllWSx0aGlzLmV5ZVo9dGhpcy5kZWZhdWx0RXllWix0aGlzLmNlbnRlclg9dGhpcy5kZWZhdWx0Q2VudGVyWCx0aGlzLmNlbnRlclk9dGhpcy5kZWZhdWx0Q2VudGVyWSx0aGlzLmNlbnRlclo9dGhpcy5kZWZhdWx0Q2VudGVyWix0aGlzLnVwWD0wLHRoaXMudXBZPTEsdGhpcy51cFo9MCx0aGlzLmNhbWVyYU5lYXI9dGhpcy5kZWZhdWx0Q2FtZXJhTmVhcix0aGlzLmNhbWVyYUZhcj10aGlzLmRlZmF1bHRDYW1lcmFGYXIsdGhpcy5wZXJzcGVjdGl2ZSgpLHRoaXMuY2FtZXJhKCksdGhpcy5jYW1lcmFUeXBlPVwiZGVmYXVsdFwifSxkLkNhbWVyYS5wcm90b3R5cGUuX3Jlc2l6ZT1mdW5jdGlvbigpe1wiZGVmYXVsdFwiPT09dGhpcy5jYW1lcmFUeXBlPyh0aGlzLl9jb21wdXRlQ2FtZXJhRGVmYXVsdFNldHRpbmdzKCksdGhpcy5fc2V0RGVmYXVsdENhbWVyYSgpKTp0aGlzLnBlcnNwZWN0aXZlKHRoaXMuY2FtZXJhRk9WLHRoaXMuX3JlbmRlcmVyLndpZHRoL3RoaXMuX3JlbmRlcmVyLmhlaWdodCl9LGQuQ2FtZXJhLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGQuQ2FtZXJhKHRoaXMuX3JlbmRlcmVyKTtyZXR1cm4gYS5jYW1lcmFGT1Y9dGhpcy5jYW1lcmFGT1YsYS5hc3BlY3RSYXRpbz10aGlzLmFzcGVjdFJhdGlvLGEuZXllWD10aGlzLmV5ZVgsYS5leWVZPXRoaXMuZXllWSxhLmV5ZVo9dGhpcy5leWVaLGEuY2VudGVyWD10aGlzLmNlbnRlclgsYS5jZW50ZXJZPXRoaXMuY2VudGVyWSxhLmNlbnRlclo9dGhpcy5jZW50ZXJaLGEuY2FtZXJhTmVhcj10aGlzLmNhbWVyYU5lYXIsYS5jYW1lcmFGYXI9dGhpcy5jYW1lcmFGYXIsYS5jYW1lcmFUeXBlPXRoaXMuY2FtZXJhVHlwZSxhLmNhbWVyYU1hdHJpeD10aGlzLmNhbWVyYU1hdHJpeC5jb3B5KCksYS5wcm9qTWF0cml4PXRoaXMucHJvak1hdHJpeC5jb3B5KCksYX0sZC5DYW1lcmEucHJvdG90eXBlLl9nZXRMb2NhbEF4ZXM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmV5ZVgtdGhpcy5jZW50ZXJYLGI9dGhpcy5leWVZLXRoaXMuY2VudGVyWSxjPXRoaXMuZXllWi10aGlzLmNlbnRlclosZD1NYXRoLnNxcnQoYSphK2IqYitjKmMpOzAhPT1kJiYoYS89ZCxiLz1kLGMvPWQpO3ZhciBlPXRoaXMudXBYLGY9dGhpcy51cFksZz10aGlzLnVwWixoPWYqYy1nKmIsaT0tZSpjK2cqYSxqPWUqYi1mKmE7ZT1iKmotYyppLGY9LWEqaitjKmgsZz1hKmktYipoO3ZhciBrPU1hdGguc3FydChoKmgraSppK2oqaik7MCE9PWsmJihoLz1rLGkvPWssai89ayk7dmFyIGw9TWF0aC5zcXJ0KGUqZStmKmYrZypnKTtyZXR1cm4gMCE9PWwmJihlLz1sLGYvPWwsZy89bCkse3g6W2gsaSxqXSx5OltlLGYsZ10sejpbYSxiLGNdfX0sZC5DYW1lcmEucHJvdG90eXBlLl9vcmJpdD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5leWVYLXRoaXMuY2VudGVyWCxlPXRoaXMuZXllWS10aGlzLmNlbnRlclksZj10aGlzLmV5ZVotdGhpcy5jZW50ZXJaLGc9TWF0aC5zcXJ0KGQqZCtlKmUrZipmKSxoPU1hdGguYXRhbjIoZCxmKSxpPU1hdGguYWNvcyhNYXRoLm1heCgtMSxNYXRoLm1pbigxLGUvZykpKTtoKz1hLGkrPWIsZys9YyxnPDAmJihnPS4xKSxpPk1hdGguUEk/aT1NYXRoLlBJOmk8PTAmJihpPS4wMDEpO3ZhciBqPU1hdGguc2luKGkpKmcqTWF0aC5zaW4oaCksaz1NYXRoLmNvcyhpKSpnLGw9TWF0aC5zaW4oaSkqZypNYXRoLmNvcyhoKTt0aGlzLmNhbWVyYShqK3RoaXMuY2VudGVyWCxrK3RoaXMuY2VudGVyWSxsK3RoaXMuY2VudGVyWix0aGlzLmNlbnRlclgsdGhpcy5jZW50ZXJZLHRoaXMuY2VudGVyWiwwLDEsMCl9LGQuQ2FtZXJhLnByb3RvdHlwZS5faXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PXRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmF9LGQucHJvdG90eXBlLnNldENhbWVyYT1mdW5jdGlvbihhKXt0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhPWEsdGhpcy5fcmVuZGVyZXIudVBNYXRyaXguc2V0KGEucHJvak1hdHJpeC5tYXQ0WzBdLGEucHJvak1hdHJpeC5tYXQ0WzFdLGEucHJvak1hdHJpeC5tYXQ0WzJdLGEucHJvak1hdHJpeC5tYXQ0WzNdLGEucHJvak1hdHJpeC5tYXQ0WzRdLGEucHJvak1hdHJpeC5tYXQ0WzVdLGEucHJvak1hdHJpeC5tYXQ0WzZdLGEucHJvak1hdHJpeC5tYXQ0WzddLGEucHJvak1hdHJpeC5tYXQ0WzhdLGEucHJvak1hdHJpeC5tYXQ0WzldLGEucHJvak1hdHJpeC5tYXQ0WzEwXSxhLnByb2pNYXRyaXgubWF0NFsxMV0sYS5wcm9qTWF0cml4Lm1hdDRbMTJdLGEucHJvak1hdHJpeC5tYXQ0WzEzXSxhLnByb2pNYXRyaXgubWF0NFsxNF0sYS5wcm9qTWF0cml4Lm1hdDRbMTVdKX0sYi5leHBvcnRzPWQuQ2FtZXJhfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDcwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLkdlb21ldHJ5PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy52ZXJ0aWNlcz1bXSx0aGlzLmxpbmVWZXJ0aWNlcz1bXSx0aGlzLmxpbmVOb3JtYWxzPVtdLHRoaXMudmVydGV4Tm9ybWFscz1bXSx0aGlzLmZhY2VzPVtdLHRoaXMudXZzPVtdLHRoaXMuZWRnZXM9W10sdGhpcy5kZXRhaWxYPXZvaWQgMCE9PWE/YToxLHRoaXMuZGV0YWlsWT12b2lkIDAhPT1iP2I6MSxjIGluc3RhbmNlb2YgRnVuY3Rpb24mJmMuY2FsbCh0aGlzKSx0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5jb21wdXRlRmFjZXM9ZnVuY3Rpb24oKXt0aGlzLmZhY2VzLmxlbmd0aD0wO2Zvcih2YXIgYSxiLGMsZCxlPXRoaXMuZGV0YWlsWCsxLGY9MDtmPHRoaXMuZGV0YWlsWTtmKyspZm9yKHZhciBnPTA7Zzx0aGlzLmRldGFpbFg7ZysrKWE9ZiplK2csYj1mKmUrZysxLGM9KGYrMSkqZStnKzEsZD0oZisxKSplK2csdGhpcy5mYWNlcy5wdXNoKFthLGIsZF0pLHRoaXMuZmFjZXMucHVzaChbZCxiLGNdKTtyZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuX2dldEZhY2VOb3JtYWw9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5mYWNlc1thXSxjPXRoaXMudmVydGljZXNbYlswXV0sZT10aGlzLnZlcnRpY2VzW2JbMV1dLGY9dGhpcy52ZXJ0aWNlc1tiWzJdXSxnPWQuVmVjdG9yLnN1YihlLGMpLGg9ZC5WZWN0b3Iuc3ViKGYsYyksaT1kLlZlY3Rvci5jcm9zcyhnLGgpLGo9ZC5WZWN0b3IubWFnKGkpLGs9ai8oZC5WZWN0b3IubWFnKGcpKmQuVmVjdG9yLm1hZyhoKSk7cmV0dXJuIDA9PT1rfHxpc05hTihrKT8oY29uc29sZS53YXJuKFwicDUuR2VvbWV0cnkucHJvdG90eXBlLl9nZXRGYWNlTm9ybWFsOlwiLFwiZmFjZSBoYXMgY29saW5lYXIgc2lkZXMgb3IgYSByZXBlYXRlZCB2ZXJ0ZXhcIiksaSk6KGs+MSYmKGs9MSksaS5tdWx0KE1hdGguYXNpbihrKS9qKSl9LGQuR2VvbWV0cnkucHJvdG90eXBlLmNvbXB1dGVOb3JtYWxzPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLnZlcnRleE5vcm1hbHMsYz10aGlzLnZlcnRpY2VzLGU9dGhpcy5mYWNlcztmb3IoYi5sZW5ndGg9MCxhPTA7YTxjLmxlbmd0aDsrK2EpYi5wdXNoKG5ldyBkLlZlY3Rvcik7Zm9yKHZhciBmPTA7ZjxlLmxlbmd0aDsrK2YpZm9yKHZhciBnPWVbZl0saD10aGlzLl9nZXRGYWNlTm9ybWFsKGYpLGk9MDtpPDM7KytpKXt2YXIgaj1nW2ldO2Jbal0uYWRkKGgpfWZvcihhPTA7YTxjLmxlbmd0aDsrK2EpYlthXS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuYXZlcmFnZU5vcm1hbHM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD10aGlzLmRldGFpbFk7YSsrKXt2YXIgYj10aGlzLmRldGFpbFgrMSxjPWQuVmVjdG9yLmFkZCh0aGlzLnZlcnRleE5vcm1hbHNbYSpiXSx0aGlzLnZlcnRleE5vcm1hbHNbYSpiK3RoaXMuZGV0YWlsWF0pO2M9ZC5WZWN0b3IuZGl2KGMsMiksdGhpcy52ZXJ0ZXhOb3JtYWxzW2EqYl09Yyx0aGlzLnZlcnRleE5vcm1hbHNbYSpiK3RoaXMuZGV0YWlsWF09Y31yZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuYXZlcmFnZVBvbGVOb3JtYWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPW5ldyBkLlZlY3RvcigwLDAsMCksYj0wO2I8dGhpcy5kZXRhaWxYO2IrKylhLmFkZCh0aGlzLnZlcnRleE5vcm1hbHNbYl0pO2ZvcihhPWQuVmVjdG9yLmRpdihhLHRoaXMuZGV0YWlsWCksYj0wO2I8dGhpcy5kZXRhaWxYO2IrKyl0aGlzLnZlcnRleE5vcm1hbHNbYl09YTtmb3IoYT1uZXcgZC5WZWN0b3IoMCwwLDApLGI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMTtiPnRoaXMudmVydGljZXMubGVuZ3RoLTEtdGhpcy5kZXRhaWxYO2ItLSlhLmFkZCh0aGlzLnZlcnRleE5vcm1hbHNbYl0pO2ZvcihhPWQuVmVjdG9yLmRpdihhLHRoaXMuZGV0YWlsWCksYj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xO2I+dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMS10aGlzLmRldGFpbFg7Yi0tKXRoaXMudmVydGV4Tm9ybWFsc1tiXT1hO3JldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5fbWFrZVRyaWFuZ2xlRWRnZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmVkZ2VzLmxlbmd0aD0wLEFycmF5LmlzQXJyYXkodGhpcy5zdHJva2VJbmRpY2VzKSlmb3IodmFyIGE9MCxiPXRoaXMuc3Ryb2tlSW5kaWNlcy5sZW5ndGg7YTxiO2ErKyl0aGlzLmVkZ2VzLnB1c2godGhpcy5zdHJva2VJbmRpY2VzW2FdKTtlbHNlIGZvcih2YXIgYz0wO2M8dGhpcy5mYWNlcy5sZW5ndGg7YysrKXRoaXMuZWRnZXMucHVzaChbdGhpcy5mYWNlc1tjXVswXSx0aGlzLmZhY2VzW2NdWzFdXSksdGhpcy5lZGdlcy5wdXNoKFt0aGlzLmZhY2VzW2NdWzFdLHRoaXMuZmFjZXNbY11bMl1dKSx0aGlzLmVkZ2VzLnB1c2goW3RoaXMuZmFjZXNbY11bMl0sdGhpcy5mYWNlc1tjXVswXV0pO3JldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5fZWRnZXNUb1ZlcnRpY2VzPWZ1bmN0aW9uKCl7dGhpcy5saW5lVmVydGljZXMubGVuZ3RoPTAsdGhpcy5saW5lTm9ybWFscy5sZW5ndGg9MDtmb3IodmFyIGE9MDthPHRoaXMuZWRnZXMubGVuZ3RoO2ErKyl7dmFyIGI9dGhpcy52ZXJ0aWNlc1t0aGlzLmVkZ2VzW2FdWzBdXSxjPXRoaXMudmVydGljZXNbdGhpcy5lZGdlc1thXVsxXV0sZD1jLmNvcHkoKS5zdWIoYikubm9ybWFsaXplKCksZT1iLmFycmF5KCksZj1iLmFycmF5KCksZz1jLmFycmF5KCksaD1jLmFycmF5KCksaT1kLmFycmF5KCksaj1kLmFycmF5KCk7aS5wdXNoKDEpLGoucHVzaCgtMSksdGhpcy5saW5lTm9ybWFscy5wdXNoKGksaixpLGksaixqKSx0aGlzLmxpbmVWZXJ0aWNlcy5wdXNoKGUsZixnLGcsZixoKX1yZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy52ZXJ0aWNlcy5sZW5ndGg+MCl7Zm9yKHZhciBhPXRoaXMudmVydGljZXNbMF0uY29weSgpLGI9dGhpcy52ZXJ0aWNlc1swXS5jb3B5KCksYz0wO2M8dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YysrKWEueD1NYXRoLm1heChhLngsdGhpcy52ZXJ0aWNlc1tjXS54KSxiLng9TWF0aC5taW4oYi54LHRoaXMudmVydGljZXNbY10ueCksYS55PU1hdGgubWF4KGEueSx0aGlzLnZlcnRpY2VzW2NdLnkpLGIueT1NYXRoLm1pbihiLnksdGhpcy52ZXJ0aWNlc1tjXS55KSxhLno9TWF0aC5tYXgoYS56LHRoaXMudmVydGljZXNbY10ueiksYi56PU1hdGgubWluKGIueix0aGlzLnZlcnRpY2VzW2NdLnopO3ZhciBlPWQuVmVjdG9yLmxlcnAoYSxiLC41KSxmPWQuVmVjdG9yLnN1YihhLGIpLGc9TWF0aC5tYXgoTWF0aC5tYXgoZi54LGYueSksZi56KSxoPTIwMC9nO2ZvcihjPTA7Yzx0aGlzLnZlcnRpY2VzLmxlbmd0aDtjKyspdGhpcy52ZXJ0aWNlc1tjXS5zdWIoZSksdGhpcy52ZXJ0aWNlc1tjXS5tdWx0KGgpfXJldHVybiB0aGlzfSxiLmV4cG9ydHM9ZC5HZW9tZXRyeX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3MTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1BcnJheSxmPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXl9O1widW5kZWZpbmVkXCIhPXR5cGVvZiBGbG9hdDMyQXJyYXkmJihlPUZsb2F0MzJBcnJheSxmPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXl8fGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl9KSxkLk1hdHJpeD1mdW5jdGlvbigpe2Zvcih2YXIgYT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksYj0wO2I8YS5sZW5ndGg7KytiKWFbYl09YXJndW1lbnRzW2JdO3JldHVybiBhLmxlbmd0aCYmYVthLmxlbmd0aC0xXWluc3RhbmNlb2YgZCYmKHRoaXMucDU9YVthLmxlbmd0aC0xXSksXCJtYXQzXCI9PT1hWzBdP3RoaXMubWF0Mz1BcnJheS5pc0FycmF5KGFbMV0pP2FbMV06bmV3IGUoWzEsMCwwLDAsMSwwLDAsMCwxXSk6dGhpcy5tYXQ0PUFycmF5LmlzQXJyYXkoYVswXSk/YVswXTpuZXcgZShbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLk1hdHJpeD8odGhpcy5tYXQ0PWEubWF0NCx0aGlzKTpmKGEpPyh0aGlzLm1hdDQ9YSx0aGlzKTooMTY9PT1hcmd1bWVudHMubGVuZ3RoJiYodGhpcy5tYXQ0WzBdPWFyZ3VtZW50c1swXSx0aGlzLm1hdDRbMV09YXJndW1lbnRzWzFdLHRoaXMubWF0NFsyXT1hcmd1bWVudHNbMl0sdGhpcy5tYXQ0WzNdPWFyZ3VtZW50c1szXSx0aGlzLm1hdDRbNF09YXJndW1lbnRzWzRdLHRoaXMubWF0NFs1XT1hcmd1bWVudHNbNV0sdGhpcy5tYXQ0WzZdPWFyZ3VtZW50c1s2XSx0aGlzLm1hdDRbN109YXJndW1lbnRzWzddLHRoaXMubWF0NFs4XT1hcmd1bWVudHNbOF0sdGhpcy5tYXQ0WzldPWFyZ3VtZW50c1s5XSx0aGlzLm1hdDRbMTBdPWFyZ3VtZW50c1sxMF0sdGhpcy5tYXQ0WzExXT1hcmd1bWVudHNbMTFdLHRoaXMubWF0NFsxMl09YXJndW1lbnRzWzEyXSx0aGlzLm1hdDRbMTNdPWFyZ3VtZW50c1sxM10sdGhpcy5tYXQ0WzE0XT1hcmd1bWVudHNbMTRdLHRoaXMubWF0NFsxNV09YXJndW1lbnRzWzE1XSksdGhpcyl9LGQuTWF0cml4LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGQuTWF0cml4KHRoaXMubWF0NCx0aGlzLnA1KX0sZC5NYXRyaXgucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZC5NYXRyaXgodGhpcy5wNSk7cmV0dXJuIGEubWF0NFswXT10aGlzLm1hdDRbMF0sYS5tYXQ0WzFdPXRoaXMubWF0NFsxXSxhLm1hdDRbMl09dGhpcy5tYXQ0WzJdLGEubWF0NFszXT10aGlzLm1hdDRbM10sYS5tYXQ0WzRdPXRoaXMubWF0NFs0XSxhLm1hdDRbNV09dGhpcy5tYXQ0WzVdLGEubWF0NFs2XT10aGlzLm1hdDRbNl0sYS5tYXQ0WzddPXRoaXMubWF0NFs3XSxhLm1hdDRbOF09dGhpcy5tYXQ0WzhdLGEubWF0NFs5XT10aGlzLm1hdDRbOV0sYS5tYXQ0WzEwXT10aGlzLm1hdDRbMTBdLGEubWF0NFsxMV09dGhpcy5tYXQ0WzExXSxhLm1hdDRbMTJdPXRoaXMubWF0NFsxMl0sYS5tYXQ0WzEzXT10aGlzLm1hdDRbMTNdLGEubWF0NFsxNF09dGhpcy5tYXQ0WzE0XSxhLm1hdDRbMTVdPXRoaXMubWF0NFsxNV0sYX0sZC5NYXRyaXguaWRlbnRpdHk9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBkLk1hdHJpeChhKX0sZC5NYXRyaXgucHJvdG90eXBlLnRyYW5zcG9zZT1mdW5jdGlvbihhKXt2YXIgYixjLGUsZyxoLGk7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLk1hdHJpeD8oYj1hLm1hdDRbMV0sYz1hLm1hdDRbMl0sZT1hLm1hdDRbM10sZz1hLm1hdDRbNl0saD1hLm1hdDRbN10saT1hLm1hdDRbMTFdLHRoaXMubWF0NFswXT1hLm1hdDRbMF0sdGhpcy5tYXQ0WzFdPWEubWF0NFs0XSx0aGlzLm1hdDRbMl09YS5tYXQ0WzhdLHRoaXMubWF0NFszXT1hLm1hdDRbMTJdLHRoaXMubWF0NFs0XT1iLHRoaXMubWF0NFs1XT1hLm1hdDRbNV0sdGhpcy5tYXQ0WzZdPWEubWF0NFs5XSx0aGlzLm1hdDRbN109YS5tYXQ0WzEzXSx0aGlzLm1hdDRbOF09Yyx0aGlzLm1hdDRbOV09Zyx0aGlzLm1hdDRbMTBdPWEubWF0NFsxMF0sdGhpcy5tYXQ0WzExXT1hLm1hdDRbMTRdLHRoaXMubWF0NFsxMl09ZSx0aGlzLm1hdDRbMTNdPWgsdGhpcy5tYXQ0WzE0XT1pLHRoaXMubWF0NFsxNV09YS5tYXQ0WzE1XSk6ZihhKSYmKGI9YVsxXSxjPWFbMl0sZT1hWzNdLGc9YVs2XSxoPWFbN10saT1hWzExXSx0aGlzLm1hdDRbMF09YVswXSx0aGlzLm1hdDRbMV09YVs0XSx0aGlzLm1hdDRbMl09YVs4XSx0aGlzLm1hdDRbM109YVsxMl0sdGhpcy5tYXQ0WzRdPWIsdGhpcy5tYXQ0WzVdPWFbNV0sdGhpcy5tYXQ0WzZdPWFbOV0sdGhpcy5tYXQ0WzddPWFbMTNdLHRoaXMubWF0NFs4XT1jLHRoaXMubWF0NFs5XT1nLHRoaXMubWF0NFsxMF09YVsxMF0sdGhpcy5tYXQ0WzExXT1hWzE0XSx0aGlzLm1hdDRbMTJdPWUsdGhpcy5tYXQ0WzEzXT1oLHRoaXMubWF0NFsxNF09aSx0aGlzLm1hdDRbMTVdPWFbMTVdKSx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzO2EgaW5zdGFuY2VvZiBkLk1hdHJpeD8oYj1hLm1hdDRbMF0sYz1hLm1hdDRbMV0sZT1hLm1hdDRbMl0sZz1hLm1hdDRbM10saD1hLm1hdDRbNF0saT1hLm1hdDRbNV0saj1hLm1hdDRbNl0saz1hLm1hdDRbN10sbD1hLm1hdDRbOF0sbT1hLm1hdDRbOV0sbj1hLm1hdDRbMTBdLG89YS5tYXQ0WzExXSxwPWEubWF0NFsxMl0scT1hLm1hdDRbMTNdLHI9YS5tYXQ0WzE0XSxzPWEubWF0NFsxNV0pOmYoYSkmJihiPWFbMF0sYz1hWzFdLGU9YVsyXSxnPWFbM10saD1hWzRdLGk9YVs1XSxqPWFbNl0saz1hWzddLGw9YVs4XSxtPWFbOV0sbj1hWzEwXSxvPWFbMTFdLHA9YVsxMl0scT1hWzEzXSxyPWFbMTRdLHM9YVsxNV0pO3ZhciB0PWIqaS1jKmgsdT1iKmotZSpoLHY9YiprLWcqaCx3PWMqai1lKmkseD1jKmstZyppLHk9ZSprLWcqaix6PWwqcS1tKnAsQT1sKnItbipwLEI9bCpzLW8qcCxDPW0qci1uKnEsRD1tKnMtbypxLEU9bipzLW8qcixGPXQqRS11KkQrdipDK3cqQi14KkEreSp6O3JldHVybiBGPyhGPTEvRix0aGlzLm1hdDRbMF09KGkqRS1qKkQraypDKSpGLHRoaXMubWF0NFsxXT0oZSpELWMqRS1nKkMpKkYsdGhpcy5tYXQ0WzJdPShxKnktcip4K3MqdykqRix0aGlzLm1hdDRbM109KG4qeC1tKnktbyp3KSpGLHRoaXMubWF0NFs0XT0oaipCLWgqRS1rKkEpKkYsdGhpcy5tYXQ0WzVdPShiKkUtZSpCK2cqQSkqRix0aGlzLm1hdDRbNl09KHIqdi1wKnktcyp1KSpGLHRoaXMubWF0NFs3XT0obCp5LW4qditvKnUpKkYsdGhpcy5tYXQ0WzhdPShoKkQtaSpCK2sqeikqRix0aGlzLm1hdDRbOV09KGMqQi1iKkQtZyp6KSpGLHRoaXMubWF0NFsxMF09KHAqeC1xKnYrcyp0KSpGLHRoaXMubWF0NFsxMV09KG0qdi1sKngtbyp0KSpGLHRoaXMubWF0NFsxMl09KGkqQS1oKkMtaip6KSpGLHRoaXMubWF0NFsxM109KGIqQy1jKkErZSp6KSpGLHRoaXMubWF0NFsxNF09KHEqdS1wKnctcip0KSpGLHRoaXMubWF0NFsxNV09KGwqdy1tKnUrbip0KSpGLHRoaXMpOm51bGx9LGQuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQzeDM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1hdDNbMF0sYj10aGlzLm1hdDNbMV0sYz10aGlzLm1hdDNbMl0sZD10aGlzLm1hdDNbM10sZT10aGlzLm1hdDNbNF0sZj10aGlzLm1hdDNbNV0sZz10aGlzLm1hdDNbNl0saD10aGlzLm1hdDNbN10saT10aGlzLm1hdDNbOF0saj1pKmUtZipoLGs9LWkqZCtmKmcsbD1oKmQtZSpnLG09YSpqK2IqaytjKmw7cmV0dXJuIG0/KG09MS9tLHRoaXMubWF0M1swXT1qKm0sdGhpcy5tYXQzWzFdPSgtaSpiK2MqaCkqbSx0aGlzLm1hdDNbMl09KGYqYi1jKmUpKm0sdGhpcy5tYXQzWzNdPWsqbSx0aGlzLm1hdDNbNF09KGkqYS1jKmcpKm0sdGhpcy5tYXQzWzVdPSgtZiphK2MqZCkqbSx0aGlzLm1hdDNbNl09bCptLHRoaXMubWF0M1s3XT0oLWgqYStiKmcpKm0sdGhpcy5tYXQzWzhdPShlKmEtYipkKSptLHRoaXMpOm51bGx9LGQuTWF0cml4LnByb3RvdHlwZS50cmFuc3Bvc2UzeDM9ZnVuY3Rpb24oYSl7dmFyIGI9YVsxXSxjPWFbMl0sZD1hWzVdO3JldHVybiB0aGlzLm1hdDNbMV09YVszXSx0aGlzLm1hdDNbMl09YVs2XSx0aGlzLm1hdDNbM109Yix0aGlzLm1hdDNbNV09YVs3XSx0aGlzLm1hdDNbNl09Yyx0aGlzLm1hdDNbN109ZCx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuaW52ZXJzZVRyYW5zcG9zZT1mdW5jdGlvbihhKXt2b2lkIDA9PT10aGlzLm1hdDM/Y29uc29sZS5lcnJvcihcInNvcnJ5LCB0aGlzIGZ1bmN0aW9uIG9ubHkgd29ya3Mgd2l0aCBtYXQzXCIpOih0aGlzLm1hdDNbMF09YS5tYXQ0WzBdLHRoaXMubWF0M1sxXT1hLm1hdDRbMV0sdGhpcy5tYXQzWzJdPWEubWF0NFsyXSx0aGlzLm1hdDNbM109YS5tYXQ0WzRdLHRoaXMubWF0M1s0XT1hLm1hdDRbNV0sdGhpcy5tYXQzWzVdPWEubWF0NFs2XSx0aGlzLm1hdDNbNl09YS5tYXQ0WzhdLHRoaXMubWF0M1s3XT1hLm1hdDRbOV0sdGhpcy5tYXQzWzhdPWEubWF0NFsxMF0pO3ZhciBiPXRoaXMuaW52ZXJ0M3gzKCk7aWYoYiliLnRyYW5zcG9zZTN4Myh0aGlzLm1hdDMpO2Vsc2UgZm9yKHZhciBjPTA7Yzw5O2MrKyl0aGlzLm1hdDNbY109MDtyZXR1cm4gdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLmRldGVybWluYW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5tYXQ0WzBdKnRoaXMubWF0NFs1XS10aGlzLm1hdDRbMV0qdGhpcy5tYXQ0WzRdLGI9dGhpcy5tYXQ0WzBdKnRoaXMubWF0NFs2XS10aGlzLm1hdDRbMl0qdGhpcy5tYXQ0WzRdLGM9dGhpcy5tYXQ0WzBdKnRoaXMubWF0NFs3XS10aGlzLm1hdDRbM10qdGhpcy5tYXQ0WzRdLGQ9dGhpcy5tYXQ0WzFdKnRoaXMubWF0NFs2XS10aGlzLm1hdDRbMl0qdGhpcy5tYXQ0WzVdLGU9dGhpcy5tYXQ0WzFdKnRoaXMubWF0NFs3XS10aGlzLm1hdDRbM10qdGhpcy5tYXQ0WzVdLGY9dGhpcy5tYXQ0WzJdKnRoaXMubWF0NFs3XS10aGlzLm1hdDRbM10qdGhpcy5tYXQ0WzZdLGc9dGhpcy5tYXQ0WzhdKnRoaXMubWF0NFsxM10tdGhpcy5tYXQ0WzldKnRoaXMubWF0NFsxMl0saD10aGlzLm1hdDRbOF0qdGhpcy5tYXQ0WzE0XS10aGlzLm1hdDRbMTBdKnRoaXMubWF0NFsxMl0saT10aGlzLm1hdDRbOF0qdGhpcy5tYXQ0WzE1XS10aGlzLm1hdDRbMTFdKnRoaXMubWF0NFsxMl0saj10aGlzLm1hdDRbOV0qdGhpcy5tYXQ0WzE0XS10aGlzLm1hdDRbMTBdKnRoaXMubWF0NFsxM10saz10aGlzLm1hdDRbOV0qdGhpcy5tYXQ0WzE1XS10aGlzLm1hdDRbMTFdKnRoaXMubWF0NFsxM107cmV0dXJuIGEqKHRoaXMubWF0NFsxMF0qdGhpcy5tYXQ0WzE1XS10aGlzLm1hdDRbMTFdKnRoaXMubWF0NFsxNF0pLWIqaytjKmorZCppLWUqaCtmKmd9LGQuTWF0cml4LnByb3RvdHlwZS5tdWx0PWZ1bmN0aW9uKGEpe3ZhciBiO2lmKGE9PT10aGlzfHxhPT09dGhpcy5tYXQ0KWI9dGhpcy5jb3B5KCkubWF0NDtlbHNlIGlmKGEgaW5zdGFuY2VvZiBkLk1hdHJpeCliPWEubWF0NDtlbHNle2lmKCFmKGEpKXJldHVybjtiPWF9dmFyIGM9dGhpcy5tYXQ0WzBdLGU9dGhpcy5tYXQ0WzFdLGc9dGhpcy5tYXQ0WzJdLGg9dGhpcy5tYXQ0WzNdO3JldHVybiB0aGlzLm1hdDRbMF09YypiWzBdK2UqYls0XStnKmJbOF0raCpiWzEyXSx0aGlzLm1hdDRbMV09YypiWzFdK2UqYls1XStnKmJbOV0raCpiWzEzXSx0aGlzLm1hdDRbMl09YypiWzJdK2UqYls2XStnKmJbMTBdK2gqYlsxNF0sdGhpcy5tYXQ0WzNdPWMqYlszXStlKmJbN10rZypiWzExXStoKmJbMTVdLGM9dGhpcy5tYXQ0WzRdLGU9dGhpcy5tYXQ0WzVdLGc9dGhpcy5tYXQ0WzZdLGg9dGhpcy5tYXQ0WzddLHRoaXMubWF0NFs0XT1jKmJbMF0rZSpiWzRdK2cqYls4XStoKmJbMTJdLHRoaXMubWF0NFs1XT1jKmJbMV0rZSpiWzVdK2cqYls5XStoKmJbMTNdLHRoaXMubWF0NFs2XT1jKmJbMl0rZSpiWzZdK2cqYlsxMF0raCpiWzE0XSx0aGlzLm1hdDRbN109YypiWzNdK2UqYls3XStnKmJbMTFdK2gqYlsxNV0sYz10aGlzLm1hdDRbOF0sZT10aGlzLm1hdDRbOV0sZz10aGlzLm1hdDRbMTBdLGg9dGhpcy5tYXQ0WzExXSx0aGlzLm1hdDRbOF09YypiWzBdK2UqYls0XStnKmJbOF0raCpiWzEyXSx0aGlzLm1hdDRbOV09YypiWzFdK2UqYls1XStnKmJbOV0raCpiWzEzXSx0aGlzLm1hdDRbMTBdPWMqYlsyXStlKmJbNl0rZypiWzEwXStoKmJbMTRdLHRoaXMubWF0NFsxMV09YypiWzNdK2UqYls3XStnKmJbMTFdK2gqYlsxNV0sYz10aGlzLm1hdDRbMTJdLGU9dGhpcy5tYXQ0WzEzXSxnPXRoaXMubWF0NFsxNF0saD10aGlzLm1hdDRbMTVdLHRoaXMubWF0NFsxMl09YypiWzBdK2UqYls0XStnKmJbOF0raCpiWzEyXSx0aGlzLm1hdDRbMTNdPWMqYlsxXStlKmJbNV0rZypiWzldK2gqYlsxM10sdGhpcy5tYXQ0WzE0XT1jKmJbMl0rZSpiWzZdK2cqYlsxMF0raCpiWzE0XSx0aGlzLm1hdDRbMTVdPWMqYlszXStlKmJbN10rZypiWzExXStoKmJbMTVdLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj8oYj1hLnksYz1hLnosYT1hLngpOmEgaW5zdGFuY2VvZiBBcnJheSYmKGI9YVsxXSxjPWFbMl0sYT1hWzBdKSx0aGlzLm1hdDRbMF0qPWEsdGhpcy5tYXQ0WzFdKj1hLHRoaXMubWF0NFsyXSo9YSx0aGlzLm1hdDRbM10qPWEsdGhpcy5tYXQ0WzRdKj1iLHRoaXMubWF0NFs1XSo9Yix0aGlzLm1hdDRbNl0qPWIsdGhpcy5tYXQ0WzddKj1iLHRoaXMubWF0NFs4XSo9Yyx0aGlzLm1hdDRbOV0qPWMsdGhpcy5tYXQ0WzEwXSo9Yyx0aGlzLm1hdDRbMTFdKj1jLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9dGhpcy5wNT90aGlzLnA1Ll90b1JhZGlhbnMoYSk6YTtiIGluc3RhbmNlb2YgZC5WZWN0b3I/KGM9Yi55LGU9Yi56LGI9Yi54KTpiIGluc3RhbmNlb2YgQXJyYXkmJihjPWJbMV0sZT1iWzJdLGI9YlswXSk7dmFyIGc9TWF0aC5zcXJ0KGIqYitjKmMrZSplKTtiKj0xL2csYyo9MS9nLGUqPTEvZzt2YXIgaD10aGlzLm1hdDRbMF0saT10aGlzLm1hdDRbMV0saj10aGlzLm1hdDRbMl0saz10aGlzLm1hdDRbM10sbD10aGlzLm1hdDRbNF0sbT10aGlzLm1hdDRbNV0sbj10aGlzLm1hdDRbNl0sbz10aGlzLm1hdDRbN10scD10aGlzLm1hdDRbOF0scT10aGlzLm1hdDRbOV0scj10aGlzLm1hdDRbMTBdLHM9dGhpcy5tYXQ0WzExXSx0PU1hdGguc2luKGYpLHU9TWF0aC5jb3MoZiksdj0xLXUsdz1iKmIqdit1LHg9YypiKnYrZSp0LHk9ZSpiKnYtYyp0LHo9YipjKnYtZSp0LEE9YypjKnYrdSxCPWUqYyp2K2IqdCxDPWIqZSp2K2MqdCxEPWMqZSp2LWIqdCxFPWUqZSp2K3U7cmV0dXJuIHRoaXMubWF0NFswXT1oKncrbCp4K3AqeSx0aGlzLm1hdDRbMV09aSp3K20qeCtxKnksdGhpcy5tYXQ0WzJdPWoqdytuKngrcip5LHRoaXMubWF0NFszXT1rKncrbyp4K3MqeSx0aGlzLm1hdDRbNF09aCp6K2wqQStwKkIsdGhpcy5tYXQ0WzVdPWkqeittKkErcSpCLHRoaXMubWF0NFs2XT1qKnorbipBK3IqQix0aGlzLm1hdDRbN109ayp6K28qQStzKkIsdGhpcy5tYXQ0WzhdPWgqQytsKkQrcCpFLHRoaXMubWF0NFs5XT1pKkMrbSpEK3EqRSx0aGlzLm1hdDRbMTBdPWoqQytuKkQrcipFLHRoaXMubWF0NFsxMV09aypDK28qRCtzKkUsdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihhKXt2YXIgYj1hWzBdLGM9YVsxXSxkPWFbMl18fDA7dGhpcy5tYXQ0WzEyXSs9dGhpcy5tYXQ0WzBdKmIrdGhpcy5tYXQ0WzRdKmMrdGhpcy5tYXQ0WzhdKmQsdGhpcy5tYXQ0WzEzXSs9dGhpcy5tYXQ0WzFdKmIrdGhpcy5tYXQ0WzVdKmMrdGhpcy5tYXQ0WzldKmQsdGhpcy5tYXQ0WzE0XSs9dGhpcy5tYXQ0WzJdKmIrdGhpcy5tYXQ0WzZdKmMrdGhpcy5tYXQ0WzEwXSpkLHRoaXMubWF0NFsxNV0rPXRoaXMubWF0NFszXSpiK3RoaXMubWF0NFs3XSpjK3RoaXMubWF0NFsxMV0qZH0sZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oYSl7dGhpcy5yb3RhdGUoYSwxLDAsMCl9LGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKGEpe3RoaXMucm90YXRlKGEsMCwxLDApfSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbihhKXt0aGlzLnJvdGF0ZShhLDAsMCwxKX0sZC5NYXRyaXgucHJvdG90eXBlLnBlcnNwZWN0aXZlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPTEvTWF0aC50YW4oYS8yKSxmPTEvKGMtZCk7cmV0dXJuIHRoaXMubWF0NFswXT1lL2IsdGhpcy5tYXQ0WzFdPTAsdGhpcy5tYXQ0WzJdPTAsdGhpcy5tYXQ0WzNdPTAsdGhpcy5tYXQ0WzRdPTAsdGhpcy5tYXQ0WzVdPWUsdGhpcy5tYXQ0WzZdPTAsdGhpcy5tYXQ0WzddPTAsdGhpcy5tYXQ0WzhdPTAsdGhpcy5tYXQ0WzldPTAsdGhpcy5tYXQ0WzEwXT0oZCtjKSpmLHRoaXMubWF0NFsxMV09LTEsdGhpcy5tYXQ0WzEyXT0wLHRoaXMubWF0NFsxM109MCx0aGlzLm1hdDRbMTRdPTIqZCpjKmYsdGhpcy5tYXQ0WzE1XT0wLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5vcnRobz1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9MS8oYS1iKSxoPTEvKGMtZCksaT0xLyhlLWYpO3JldHVybiB0aGlzLm1hdDRbMF09LTIqZyx0aGlzLm1hdDRbMV09MCx0aGlzLm1hdDRbMl09MCx0aGlzLm1hdDRbM109MCx0aGlzLm1hdDRbNF09MCx0aGlzLm1hdDRbNV09LTIqaCx0aGlzLm1hdDRbNl09MCx0aGlzLm1hdDRbN109MCx0aGlzLm1hdDRbOF09MCx0aGlzLm1hdDRbOV09MCx0aGlzLm1hdDRbMTBdPTIqaSx0aGlzLm1hdDRbMTFdPTAsdGhpcy5tYXQ0WzEyXT0oYStiKSpnLHRoaXMubWF0NFsxM109KGQrYykqaCx0aGlzLm1hdDRbMTRdPShmK2UpKmksdGhpcy5tYXQ0WzE1XT0xLHRoaXN9LGIuZXhwb3J0cz1kLk1hdHJpeH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3MjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5SZW5kZXJlckdMLnByb3RvdHlwZS5iZWdpblNoYXBlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPXZvaWQgMCE9PWE/YTplLkxJTkVfU1RSSVAsdm9pZCAwPT09dGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzPyh0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLmVkZ2VzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGljZXM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleENvbG9ycz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUubGluZU5vcm1hbHM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUuY29sb3JCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUudXZCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRleEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFsQnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLnBvaW50VmVydGV4QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXg9W10sdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXg9W10sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleD1bXSk6KHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUuZWRnZXMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0aWNlcy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUubGluZU5vcm1hbHMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleENvbG9ycy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUudXZDb29yZHMubGVuZ3RoPTApLHRoaXMuaXNJbW1lZGlhdGVEcmF3aW5nPSEwLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUudmVydGV4PWZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmO2M9ZT1mPTAsMz09PWFyZ3VtZW50cy5sZW5ndGg/Yz1hcmd1bWVudHNbMl06ND09PWFyZ3VtZW50cy5sZW5ndGg/KGU9YXJndW1lbnRzWzJdLGY9YXJndW1lbnRzWzNdKTo1PT09YXJndW1lbnRzLmxlbmd0aCYmKGM9YXJndW1lbnRzWzJdLGU9YXJndW1lbnRzWzNdLGY9YXJndW1lbnRzWzRdKTt2YXIgZz1uZXcgZC5WZWN0b3IoYSxiLGMpO3RoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5wdXNoKGcpO3ZhciBoPXRoaXMuY3VyRmlsbENvbG9yfHxbLjUsLjUsLjUsMV07cmV0dXJuIHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnMucHVzaChoWzBdLGhbMV0saFsyXSxoWzNdKSx0aGlzLmltbWVkaWF0ZU1vZGUudXZDb29yZHMucHVzaChlLGYpLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzBdPWEsdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV09Yix0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsyXT1jLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdPWEsdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMV09Yix0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsyXT1jLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZW5kU2hhcGU9ZnVuY3Rpb24oYSxiLGMsZixnLGgpe2lmKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9PT1lLlBPSU5UUyl0aGlzLl91c2VQb2ludFNoYWRlcigpLHRoaXMuY3VyUG9pbnRTaGFkZXIuYmluZFNoYWRlcigpLHRoaXMuX2RyYXdQb2ludHModGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLHRoaXMuaW1tZWRpYXRlTW9kZS5wb2ludFZlcnRleEJ1ZmZlciksdGhpcy5jdXJQb2ludFNoYWRlci51bmJpbmRTaGFkZXIoKTtlbHNlIGlmKHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGg+MSl7aWYodGhpcy5fdXNlSW1tZWRpYXRlTW9kZVNoYWRlcigpLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLmRyYXdNb2RlIT09ZS5URVhUVVJFKXtmb3IodmFyIGk9MDtpPHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGgtMTtpKyspdGhpcy5pbW1lZGlhdGVNb2RlLmVkZ2VzLnB1c2goW2ksaSsxXSk7YT09PWUuQ0xPU0UmJnRoaXMuaW1tZWRpYXRlTW9kZS5lZGdlcy5wdXNoKFt0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoLTEsMF0pLGQuR2VvbWV0cnkucHJvdG90eXBlLl9lZGdlc1RvVmVydGljZXMuY2FsbCh0aGlzLmltbWVkaWF0ZU1vZGUpLHRoaXMuX2RyYXdTdHJva2VJbW1lZGlhdGVNb2RlKCl9aWYodGhpcy5fZG9GaWxsKXtpZih0aGlzLmlzQmV6aWVyfHx0aGlzLmlzUXVhZHJhdGljfHx0aGlzLmlzQ3VydmUpe3ZhciBqPVtuZXcgRmxvYXQzMkFycmF5KHRoaXMuX3ZUb05BcnJheSh0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMpKV0saz10aGlzLl90cmlhbmd1bGF0ZShqKTt0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXM9W107Zm9yKHZhciBsPTAsbT1rLmxlbmd0aDtsPG07bCs9Myl0aGlzLnZlcnRleChrW2xdLGtbbCsxXSxrW2wrMl0pfXRoaXMuX2RyYXdGaWxsSW1tZWRpYXRlTW9kZShhLGIsYyxmLGcsaCl9fXJldHVybiB0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleENvbG9ycy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUudXZDb29yZHMubGVuZ3RoPTAsdGhpcy5pc0ltbWVkaWF0ZURyYXdpbmc9ITEsdGhpcy5pc0Jlemllcj0hMSx0aGlzLmlzUXVhZHJhdGljPSExLHRoaXMuaXNDdXJ2ZT0hMSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleC5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleC5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4Lmxlbmd0aD0wLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdGaWxsSW1tZWRpYXRlTW9kZT1mdW5jdGlvbihhLGIsYyxkLGYsZyl7dmFyIGg9dGhpcy5HTDtpZih0aGlzLmN1ckZpbGxTaGFkZXIuYmluZFNoYWRlcigpLHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbiYmKHRoaXMuX2JpbmRCdWZmZXIodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleEJ1ZmZlcixoLkFSUkFZX0JVRkZFUix0aGlzLl92VG9OQXJyYXkodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzKSxGbG9hdDMyQXJyYXksaC5EWU5BTUlDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsaC5GTE9BVCwhMSwwLDApKSx0aGlzLmRyYXdNb2RlPT09ZS5GSUxMJiZ0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4Q29sb3ImJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS5jb2xvckJ1ZmZlcixoLkFSUkFZX0JVRkZFUix0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzLEZsb2F0MzJBcnJheSxoLkRZTkFNSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVmVydGV4Q29sb3IubG9jYXRpb24sNCxoLkZMT0FULCExLDAsMCkpLHRoaXMuZHJhd01vZGU9PT1lLlRFWFRVUkUmJnRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZCYmKHRoaXMuX2JpbmRCdWZmZXIodGhpcy5pbW1lZGlhdGVNb2RlLnV2QnVmZmVyLGguQVJSQVlfQlVGRkVSLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3JkcyxGbG9hdDMyQXJyYXksaC5EWU5BTUlDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVRleENvb3JkLmxvY2F0aW9uLDIsaC5GTE9BVCwhMSwwLDApKSx0aGlzLmRyYXdNb2RlPT09ZS5GSUxMfHx0aGlzLmRyYXdNb2RlPT09ZS5URVhUVVJFKXN3aXRjaCh0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlKXtjYXNlIGUuTElORV9TVFJJUDpjYXNlIGUuTElORVM6Y2FzZSBlLlRSSUFOR0xFUzp0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPXRoaXMuaXNCZXppZXJ8fHRoaXMuaXNRdWFkcmF0aWN8fHRoaXMuaXNDdXJ2ZT9lLlRSSUFOR0xFUzplLlRSSUFOR0xFX0ZBTn1lbHNlIHN3aXRjaCh0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlKXtjYXNlIGUuTElORV9TVFJJUDpjYXNlIGUuTElORVM6dGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT1lLkxJTkVfTE9PUH1pZih0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPT09ZS5RVUFEU3x8dGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT09PWUuUVVBRF9TVFJJUCl0aHJvdyBuZXcgRXJyb3IoXCJzb3JyeSwgXCIrdGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZStcIiBub3QgeWV0IGltcGxlbWVudGVkIGluIHdlYmdsIG1vZGUuXCIpO3RoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1ckZpbGxDb2xvciksaC5lbmFibGUoaC5CTEVORCksaC5kcmF3QXJyYXlzKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGUsMCx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsdGhpcy5jdXJGaWxsU2hhZGVyLnVuYmluZFNoYWRlcigpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9kcmF3U3Ryb2tlSW1tZWRpYXRlTW9kZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuR0w7dGhpcy5jdXJTdHJva2VTaGFkZXIuYmluZFNoYWRlcigpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRleEJ1ZmZlcixhLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGljZXMpLEZsb2F0MzJBcnJheSxhLlNUQVRJQ19EUkFXKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxhLkZMT0FULCExLDAsMCkpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYURpcmVjdGlvbiYmKHRoaXMuX2JpbmRCdWZmZXIodGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxCdWZmZXIsYS5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbih0aGlzLmltbWVkaWF0ZU1vZGUubGluZU5vcm1hbHMpLEZsb2F0MzJBcnJheSxhLlNUQVRJQ19EUkFXKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uLmxvY2F0aW9uLDQsYS5GTE9BVCwhMSwwLDApKSx0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJTdHJva2VDb2xvciksYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLDAsdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0aWNlcy5sZW5ndGgpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLnVuYmluZFNoYWRlcigpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sYi5leHBvcnRzPWQuUmVuZGVyZXJHTH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9MDtkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9pbml0QnVmZmVyRGVmYXVsdHM9ZnVuY3Rpb24oYSl7aWYodGhpcy5fZnJlZUJ1ZmZlcnMoYSksKytlPjFlMyl7dmFyIGI9T2JqZWN0LmtleXModGhpcy5nSGFzaClbMF07ZGVsZXRlIHRoaXMuZ0hhc2hbYl0sZS0tfXRoaXMuZ0hhc2hbYV09e319LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2ZyZWVCdWZmZXJzPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ0hhc2hbYV07aWYoYil7ZGVsZXRlIHRoaXMuZ0hhc2hbYV0sZS0tO3ZhciBjPXRoaXMuR0w7Yi52ZXJ0ZXhCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIudmVydGV4QnVmZmVyKSxiLm5vcm1hbEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi5ub3JtYWxCdWZmZXIpLGIubGluZU5vcm1hbEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi5saW5lTm9ybWFsQnVmZmVyKSxiLnV2QnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLnV2QnVmZmVyKSxiLmluZGV4QnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLmluZGV4QnVmZmVyKSxiLmxpbmVWZXJ0ZXhCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIubGluZVZlcnRleEJ1ZmZlcil9fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmNyZWF0ZUJ1ZmZlcnM9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLkdMO3RoaXMuX2luaXRCdWZmZXJEZWZhdWx0cyhhKTt2YXIgZD10aGlzLmdIYXNoW2FdO3JldHVybiBkLm51bWJlck9mSXRlbXM9MypiLmZhY2VzLmxlbmd0aCxkLmxpbmVWZXJ0ZXhDb3VudD1iLmxpbmVWZXJ0aWNlcy5sZW5ndGgsdGhpcy5fdXNlQ29sb3JTaGFkZXIoKSx0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbiYmKGQubGluZVZlcnRleEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC5saW5lVmVydGV4QnVmZmVyLGMuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4oYi5saW5lVmVydGljZXMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxjLkZMT0FULCExLDAsMCkpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYURpcmVjdGlvbiYmKGQubGluZU5vcm1hbEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC5saW5lTm9ybWFsQnVmZmVyLGMuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4oYi5saW5lTm9ybWFscyksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24ubG9jYXRpb24sNCxjLkZMT0FULCExLDAsMCkpLHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbiYmKGQudmVydGV4QnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLnZlcnRleEJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl92VG9OQXJyYXkoYi52ZXJ0aWNlcyksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYy5GTE9BVCwhMSwwLDApKSxkLmluZGV4QnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLmluZGV4QnVmZmVyLGMuRUxFTUVOVF9BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbihiLmZhY2VzKSxVaW50MTZBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hTm9ybWFsJiYoZC5ub3JtYWxCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQubm9ybWFsQnVmZmVyLGMuQVJSQVlfQlVGRkVSLHRoaXMuX3ZUb05BcnJheShiLnZlcnRleE5vcm1hbHMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFOb3JtYWwubG9jYXRpb24sMyxjLkZMT0FULCExLDAsMCkpLHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZCYmKGQudXZCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQudXZCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbihiLnV2cyksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVRleENvb3JkLmxvY2F0aW9uLDIsYy5GTE9BVCwhMSwwLDApKSxkfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmRyYXdCdWZmZXJzPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuR0w7dGhpcy5fdXNlQ29sb3JTaGFkZXIoKTt2YXIgYz10aGlzLmdIYXNoW2FdO3JldHVybiB0aGlzLl9kb1N0cm9rZSYmYy5saW5lVmVydGV4Q291bnQ+MCYmKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmJpbmRTaGFkZXIoKSxjLmxpbmVWZXJ0ZXhCdWZmZXImJih0aGlzLl9iaW5kQnVmZmVyKGMubGluZVZlcnRleEJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYi5GTE9BVCwhMSwwLDApKSxjLmxpbmVOb3JtYWxCdWZmZXImJih0aGlzLl9iaW5kQnVmZmVyKGMubGluZU5vcm1hbEJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYURpcmVjdGlvbi5sb2NhdGlvbiw0LGIuRkxPQVQsITEsMCwwKSksdGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyU3Ryb2tlQ29sb3IpLHRoaXMuX2RyYXdBcnJheXMoYi5UUklBTkdMRVMsYSksdGhpcy5jdXJTdHJva2VTaGFkZXIudW5iaW5kU2hhZGVyKCkpLCExIT09dGhpcy5fZG9GaWxsJiYodGhpcy5jdXJGaWxsU2hhZGVyLmJpbmRTaGFkZXIoKSxjLnZlcnRleEJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy52ZXJ0ZXhCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYi5GTE9BVCwhMSwwLDApKSxjLmluZGV4QnVmZmVyJiZ0aGlzLl9iaW5kQnVmZmVyKGMuaW5kZXhCdWZmZXIsYi5FTEVNRU5UX0FSUkFZX0JVRkZFUiksYy5ub3JtYWxCdWZmZXImJih0aGlzLl9iaW5kQnVmZmVyKGMubm9ybWFsQnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFOb3JtYWwubG9jYXRpb24sMyxiLkZMT0FULCExLDAsMCkpLGMudXZCdWZmZXImJih0aGlzLl9iaW5kQnVmZmVyKGMudXZCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVRleENvb3JkLmxvY2F0aW9uLDIsYi5GTE9BVCwhMSwwLDApKSx0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJGaWxsQ29sb3IpLHRoaXMuX2RyYXdFbGVtZW50cyhiLlRSSUFOR0xFUyxhKSx0aGlzLmN1ckZpbGxTaGFkZXIudW5iaW5kU2hhZGVyKCkpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZHJhd0J1ZmZlcnNTY2FsZWQ9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy51TVZNYXRyaXguY29weSgpO3RyeXt0aGlzLnVNVk1hdHJpeC5zY2FsZShiLGMsZCksdGhpcy5kcmF3QnVmZmVycyhhKX1maW5hbGx5e3RoaXMudU1WTWF0cml4PWV9fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9kcmF3QXJyYXlzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuR0wuZHJhd0FycmF5cyhhLDAsdGhpcy5nSGFzaFtiXS5saW5lVmVydGV4Q291bnQpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9kcmF3RWxlbWVudHM9ZnVuY3Rpb24oYSxiKXt0aGlzLkdMLmRyYXdFbGVtZW50cyhhLHRoaXMuZ0hhc2hbYl0ubnVtYmVyT2ZJdGVtcyx0aGlzLkdMLlVOU0lHTkVEX1NIT1JULDApLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd1BvaW50cz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuR0w7dGhpcy5fYmluZEJ1ZmZlcihiLGMuQVJSQVlfQlVGRkVSLHRoaXMuX3ZUb05BcnJheShhKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJQb2ludFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJQb2ludFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGMuRkxPQVQsITEsMCwwKSxjLmRyYXdBcnJheXMoYy5Qb2ludHMsMCxhLmxlbmd0aCl9LGIuZXhwb3J0cz1kLlJlbmRlcmVyR0x9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpLGY9YShcImxpYnRlc3NcIik7YShcIi4vcDUuU2hhZGVyXCIpLGEoXCIuL3A1LkNhbWVyYVwiKSxhKFwiLi4vY29yZS9wNS5SZW5kZXJlclwiKSxhKFwiLi9wNS5NYXRyaXhcIik7dmFyIGc9e2ltbWVkaWF0ZVZlcnQ6XCJhdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgYVZlcnRleENvbG9yO1xcblxcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIGZsb2F0IHVSZXNvbHV0aW9uO1xcbnVuaWZvcm0gZmxvYXQgdVBvaW50U2l6ZTtcXG5cXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZvaWQgbWFpbih2b2lkKSB7XFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuICB2Q29sb3IgPSBhVmVydGV4Q29sb3I7XFxuICBnbF9Qb2ludFNpemUgPSB1UG9pbnRTaXplO1xcbn1cXG5cIix2ZXJ0ZXhDb2xvclZlcnQ6XCJhdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgYVZlcnRleENvbG9yO1xcblxcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKSB7XFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuICB2Q29sb3IgPSBhVmVydGV4Q29sb3I7XFxufVxcblwiLHZlcnRleENvbG9yRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IHZDb2xvcjtcXG59XCIsbm9ybWFsVmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMyBhTm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXhDb29yZDtcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIHVOb3JtYWxNYXRyaXg7XFxuXFxudmFyeWluZyB2ZWMzIHZWZXJ0ZXhOb3JtYWw7XFxudmFyeWluZyBoaWdocCB2ZWMyIHZWZXJ0VGV4Q29vcmQ7XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG4gIHZWZXJ0ZXhOb3JtYWwgPSBub3JtYWxpemUodmVjMyggdU5vcm1hbE1hdHJpeCAqIGFOb3JtYWwgKSk7XFxuICB2VmVydFRleENvb3JkID0gYVRleENvb3JkO1xcbn1cXG5cIixub3JtYWxGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxudmFyeWluZyB2ZWMzIHZWZXJ0ZXhOb3JtYWw7XFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQodlZlcnRleE5vcm1hbCwgMS4wKTtcXG59XCIsYmFzaWNGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxudmFyeWluZyB2ZWMzIHZWZXJ0ZXhOb3JtYWw7XFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcbnZvaWQgbWFpbih2b2lkKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB1TWF0ZXJpYWxDb2xvcjtcXG59XCIsbGlnaHRWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMzIGFOb3JtYWw7XFxuYXR0cmlidXRlIHZlYzIgYVRleENvb3JkO1xcblxcbnVuaWZvcm0gbWF0NCB1Vmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIHVOb3JtYWxNYXRyaXg7XFxudW5pZm9ybSBpbnQgdUFtYmllbnRMaWdodENvdW50O1xcbnVuaWZvcm0gaW50IHVEaXJlY3Rpb25hbExpZ2h0Q291bnQ7XFxudW5pZm9ybSBpbnQgdVBvaW50TGlnaHRDb3VudDtcXG5cXG51bmlmb3JtIHZlYzMgdUFtYmllbnRDb2xvcls4XTtcXG51bmlmb3JtIHZlYzMgdUxpZ2h0aW5nRGlyZWN0aW9uWzhdO1xcbnVuaWZvcm0gdmVjMyB1RGlyZWN0aW9uYWxDb2xvcls4XTtcXG51bmlmb3JtIHZlYzMgdVBvaW50TGlnaHRMb2NhdGlvbls4XTtcXG51bmlmb3JtIHZlYzMgdVBvaW50TGlnaHRDb2xvcls4XTtcXG51bmlmb3JtIGJvb2wgdVNwZWN1bGFyO1xcblxcbnZhcnlpbmcgdmVjMyB2VmVydGV4Tm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2VmVydFRleENvb3JkO1xcbnZhcnlpbmcgdmVjMyB2TGlnaHRXZWlnaHRpbmc7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcblxcbiAgdmVjMyB2ZXJ0ZXhOb3JtYWwgPSBub3JtYWxpemUodmVjMyggdU5vcm1hbE1hdHJpeCAqIGFOb3JtYWwgKSk7XFxuICB2VmVydGV4Tm9ybWFsID0gdmVydGV4Tm9ybWFsO1xcbiAgdlZlcnRUZXhDb29yZCA9IGFUZXhDb29yZDtcXG5cXG4gIHZlYzQgbXZQb3NpdGlvbiA9IHVNb2RlbFZpZXdNYXRyaXggKiB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIHZlYzMgZXllRGlyZWN0aW9uID0gbm9ybWFsaXplKC1tdlBvc2l0aW9uLnh5eik7XFxuXFxuICBmbG9hdCBzaGluaW5lc3MgPSAzMi4wO1xcbiAgZmxvYXQgc3BlY3VsYXJGYWN0b3IgPSAyLjA7XFxuICBmbG9hdCBkaWZmdXNlRmFjdG9yID0gMC4zO1xcblxcbiAgdmVjMyBhbWJpZW50TGlnaHRGYWN0b3IgPSB2ZWMzKDAuMCk7XFxuXFxuICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykge1xcbiAgICBpZiAodUFtYmllbnRMaWdodENvdW50ID09IGkpIGJyZWFrO1xcbiAgICBhbWJpZW50TGlnaHRGYWN0b3IgKz0gdUFtYmllbnRDb2xvcltpXTtcXG4gIH1cXG5cXG5cXG4gIHZlYzMgZGlyZWN0aW9uYWxMaWdodEZhY3RvciA9IHZlYzMoMC4wKTtcXG5cXG4gIGZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKSB7XFxuICAgIGlmICh1RGlyZWN0aW9uYWxMaWdodENvdW50ID09IGopIGJyZWFrO1xcbiAgICB2ZWMzIGRpciA9IHVMaWdodGluZ0RpcmVjdGlvbltqXTtcXG4gICAgZmxvYXQgZGlyZWN0aW9uYWxMaWdodFdlaWdodGluZyA9IG1heChkb3QodmVydGV4Tm9ybWFsLCAtZGlyKSwgMC4wKTtcXG4gICAgZGlyZWN0aW9uYWxMaWdodEZhY3RvciArPSB1RGlyZWN0aW9uYWxDb2xvcltqXSAqIGRpcmVjdGlvbmFsTGlnaHRXZWlnaHRpbmc7XFxuICB9XFxuXFxuXFxuICB2ZWMzIHBvaW50TGlnaHRGYWN0b3IgPSB2ZWMzKDAuMCk7XFxuXFxuICBmb3IgKGludCBrID0gMDsgayA8IDg7IGsrKykge1xcbiAgICBpZiAodVBvaW50TGlnaHRDb3VudCA9PSBrKSBicmVhaztcXG4gICAgdmVjMyBsb2MgPSAodVZpZXdNYXRyaXggKiB2ZWM0KHVQb2ludExpZ2h0TG9jYXRpb25ba10sIDEuMCkpLnh5ejtcXG4gICAgdmVjMyBsaWdodERpcmVjdGlvbiA9IG5vcm1hbGl6ZShsb2MgLSBtdlBvc2l0aW9uLnh5eik7XFxuXFxuICAgIGZsb2F0IGRpcmVjdGlvbmFsTGlnaHRXZWlnaHRpbmcgPSBtYXgoZG90KHZlcnRleE5vcm1hbCwgbGlnaHREaXJlY3Rpb24pLCAwLjApO1xcblxcbiAgICBmbG9hdCBzcGVjdWxhckxpZ2h0V2VpZ2h0aW5nID0gMC4wO1xcbiAgICBpZiAodVNwZWN1bGFyICl7XFxuICAgICAgdmVjMyByZWZsZWN0aW9uRGlyZWN0aW9uID0gcmVmbGVjdCgtbGlnaHREaXJlY3Rpb24sIHZlcnRleE5vcm1hbCk7XFxuICAgICAgc3BlY3VsYXJMaWdodFdlaWdodGluZyA9IHBvdyhtYXgoZG90KHJlZmxlY3Rpb25EaXJlY3Rpb24sIGV5ZURpcmVjdGlvbiksIDAuMCksIHNoaW5pbmVzcyk7XFxuICAgIH1cXG5cXG4gICAgcG9pbnRMaWdodEZhY3RvciArPSB1UG9pbnRMaWdodENvbG9yW2tdICogKHNwZWN1bGFyRmFjdG9yICogc3BlY3VsYXJMaWdodFdlaWdodGluZ1xcbiAgICAgICsgZGlyZWN0aW9uYWxMaWdodFdlaWdodGluZyAqIGRpZmZ1c2VGYWN0b3IpO1xcbiAgfVxcblxcbiAgdkxpZ2h0V2VpZ2h0aW5nID0gIGFtYmllbnRMaWdodEZhY3RvciArIGRpcmVjdGlvbmFsTGlnaHRGYWN0b3IgKyBwb2ludExpZ2h0RmFjdG9yO1xcbn1cXG5cIixsaWdodFRleHR1cmVGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gYm9vbCBpc1RleHR1cmU7XFxudW5pZm9ybSBib29sIHVVc2VMaWdodGluZztcXG5cXG52YXJ5aW5nIHZlYzMgdkxpZ2h0V2VpZ2h0aW5nO1xcbnZhcnlpbmcgaGlnaHAgdmVjMiB2VmVydFRleENvb3JkO1xcblxcbnZvaWQgbWFpbih2b2lkKSB7XFxuICBnbF9GcmFnQ29sb3IgPSBpc1RleHR1cmUgPyB0ZXh0dXJlMkQodVNhbXBsZXIsIHZWZXJ0VGV4Q29vcmQpIDogdU1hdGVyaWFsQ29sb3I7XFxuICBpZiAodVVzZUxpZ2h0aW5nKVxcbiAgICBnbF9GcmFnQ29sb3IucmdiICo9IHZMaWdodFdlaWdodGluZztcXG59XCIscGhvbmdWZXJ0OlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMzIGFOb3JtYWw7XFxuYXR0cmlidXRlIHZlYzIgYVRleENvb3JkO1xcblxcbnVuaWZvcm0gdmVjMyB1QW1iaWVudENvbG9yWzhdO1xcblxcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgdU5vcm1hbE1hdHJpeDtcXG51bmlmb3JtIGludCB1QW1iaWVudExpZ2h0Q291bnQ7XFxuXFxudmFyeWluZyB2ZWMzIHZOb3JtYWw7XFxudmFyeWluZyB2ZWMyIHZUZXhDb29yZDtcXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdkFtYmllbnRDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICB2ZWM0IHZpZXdNb2RlbFBvc2l0aW9uID0gdU1vZGVsVmlld01hdHJpeCAqIHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcblxcbiAgLy8gUGFzcyB2YXJ5aW5ncyB0byBmcmFnbWVudCBzaGFkZXJcXG4gIHZWaWV3UG9zaXRpb24gPSB2aWV3TW9kZWxQb3NpdGlvbi54eXo7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdmlld01vZGVsUG9zaXRpb247ICBcXG5cXG4gIHZOb3JtYWwgPSBub3JtYWxpemUodU5vcm1hbE1hdHJpeCAqIG5vcm1hbGl6ZShhTm9ybWFsKSk7XFxuICB2VGV4Q29vcmQgPSBhVGV4Q29vcmQ7XFxuXFxuICB2QW1iaWVudENvbG9yID0gdmVjMygwLjApO1xcbiAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHtcXG4gICAgaWYgKHVBbWJpZW50TGlnaHRDb3VudCA9PSBpKSBicmVhaztcXG4gICAgdkFtYmllbnRDb2xvciArPSB1QW1iaWVudENvbG9yW2ldO1xcbiAgfVxcbn1cXG5cIixcbnBob25nRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbi8vdW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVWaWV3TWF0cml4O1xcblxcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGJvb2wgaXNUZXh0dXJlO1xcbnVuaWZvcm0gYm9vbCB1VXNlTGlnaHRpbmc7XFxuXFxudW5pZm9ybSB2ZWMzIHVMaWdodGluZ0RpcmVjdGlvbls4XTtcXG51bmlmb3JtIHZlYzMgdURpcmVjdGlvbmFsQ29sb3JbOF07XFxudW5pZm9ybSB2ZWMzIHVQb2ludExpZ2h0TG9jYXRpb25bOF07XFxudW5pZm9ybSB2ZWMzIHVQb2ludExpZ2h0Q29sb3JbOF07XFxudW5pZm9ybSBib29sIHVTcGVjdWxhcjtcXG5cXG51bmlmb3JtIGludCB1RGlyZWN0aW9uYWxMaWdodENvdW50O1xcbnVuaWZvcm0gaW50IHVQb2ludExpZ2h0Q291bnQ7XFxuXFxudmFyeWluZyB2ZWMzIHZOb3JtYWw7XFxudmFyeWluZyB2ZWMyIHZUZXhDb29yZDtcXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdkFtYmllbnRDb2xvcjtcXG5cXG52ZWMzIFY7XFxudmVjMyBOO1xcblxcbmNvbnN0IGZsb2F0IHNoaW5pbmVzcyA9IDMyLjA7XFxuY29uc3QgZmxvYXQgc3BlY3VsYXJGYWN0b3IgPSAyLjA7XFxuY29uc3QgZmxvYXQgZGlmZnVzZUZhY3RvciA9IDAuNzM7XFxuXFxuc3RydWN0IExpZ2h0UmVzdWx0IHtcXG5cXHRmbG9hdCBzcGVjdWxhcjtcXG5cXHRmbG9hdCBkaWZmdXNlO1xcbn07XFxuXFxuZmxvYXQgcGhvbmdTcGVjdWxhcihcXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXFxuICBmbG9hdCBzaGluaW5lc3MpIHtcXG5cXG4gIHZlYzMgUiA9IG5vcm1hbGl6ZShyZWZsZWN0KC1saWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCkpOyAgXFxuICByZXR1cm4gcG93KG1heCgwLjAsIGRvdChSLCB2aWV3RGlyZWN0aW9uKSksIHNoaW5pbmVzcyk7XFxufVxcblxcbmZsb2F0IGxhbWJlcnREaWZmdXNlKFxcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCkge1xcbiAgcmV0dXJuIG1heCgwLjAsIGRvdCgtbGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpKTtcXG59XFxuXFxuTGlnaHRSZXN1bHQgbGlnaHQodmVjMyBsaWdodFZlY3Rvcikge1xcblxcbiAgdmVjMyBMID0gbm9ybWFsaXplKGxpZ2h0VmVjdG9yKTtcXG5cXG4gIC8vY29tcHV0ZSBvdXIgZGlmZnVzZSAmIHNwZWN1bGFyIHRlcm1zXFxuICBMaWdodFJlc3VsdCBscjtcXG4gIGlmICh1U3BlY3VsYXIpXFxuICAgIGxyLnNwZWN1bGFyID0gcGhvbmdTcGVjdWxhcihMLCBWLCBOLCBzaGluaW5lc3MpO1xcbiAgbHIuZGlmZnVzZSA9IGxhbWJlcnREaWZmdXNlKEwsIE4pO1xcbiAgcmV0dXJuIGxyO1xcbn1cXG5cXG52b2lkIG1haW4odm9pZCkge1xcblxcbiAgViA9IG5vcm1hbGl6ZSh2Vmlld1Bvc2l0aW9uKTtcXG4gIE4gPSB2Tm9ybWFsO1xcblxcbiAgdmVjMyBkaWZmdXNlID0gdmVjMygwLjApO1xcbiAgZmxvYXQgc3BlY3VsYXIgPSAwLjA7XFxuXFxuICBmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykge1xcbiAgICBpZiAodURpcmVjdGlvbmFsTGlnaHRDb3VudCA9PSBqKSBicmVhaztcXG5cXG4gICAgTGlnaHRSZXN1bHQgcmVzdWx0ID0gbGlnaHQodUxpZ2h0aW5nRGlyZWN0aW9uW2pdKTtcXG4gICAgZGlmZnVzZSArPSByZXN1bHQuZGlmZnVzZSAqIHVEaXJlY3Rpb25hbENvbG9yW2pdO1xcbiAgICBzcGVjdWxhciArPSByZXN1bHQuc3BlY3VsYXI7XFxuICB9XFxuXFxuICBmb3IgKGludCBrID0gMDsgayA8IDg7IGsrKykge1xcbiAgICBpZiAodVBvaW50TGlnaHRDb3VudCA9PSBrKSBicmVhaztcXG5cXG4gICAgdmVjMyBsaWdodFBvc2l0aW9uID0gKHVWaWV3TWF0cml4ICogdmVjNCh1UG9pbnRMaWdodExvY2F0aW9uW2tdLCAxLjApKS54eXo7XFxuICAgIHZlYzMgbGlnaHRWZWN0b3IgPSB2Vmlld1Bvc2l0aW9uIC0gbGlnaHRQb3NpdGlvbjtcXG5cXHRcXG4gICAgLy9jYWxjdWxhdGUgYXR0ZW51YXRpb25cXG4gICAgZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aChsaWdodFZlY3Rvcik7XFxuICAgIGZsb2F0IGZhbGxvZmYgPSA1MDAuMCAvIChsaWdodERpc3RhbmNlICsgNTAwLjApO1xcblxcbiAgICBMaWdodFJlc3VsdCByZXN1bHQgPSBsaWdodChsaWdodFZlY3Rvcik7XFxuICAgIGRpZmZ1c2UgKz0gcmVzdWx0LmRpZmZ1c2UgKiBmYWxsb2ZmICogdVBvaW50TGlnaHRDb2xvcltrXTtcXG4gICAgc3BlY3VsYXIgKz0gcmVzdWx0LnNwZWN1bGFyICogZmFsbG9mZjtcXG4gIH1cXG5cXG4gIGdsX0ZyYWdDb2xvciA9IGlzVGV4dHVyZSA/IHRleHR1cmUyRCh1U2FtcGxlciwgdlRleENvb3JkKSA6IHVNYXRlcmlhbENvbG9yO1xcbiAgZ2xfRnJhZ0NvbG9yLnJnYiA9IGdsX0ZyYWdDb2xvci5yZ2IgKiAoZGlmZnVzZSAqIGRpZmZ1c2VGYWN0b3IgKyB2QW1iaWVudENvbG9yKSArIHNwZWN1bGFyICogc3BlY3VsYXJGYWN0b3I7XFxufVwiLGZvbnRWZXJ0OlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXhDb29yZDtcXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxuXFxudW5pZm9ybSB2ZWM0IHVHbHlwaFJlY3Q7XFxudW5pZm9ybSBmbG9hdCB1R2x5cGhPZmZzZXQ7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXhDb29yZDtcXG52YXJ5aW5nIGZsb2F0IHc7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG5cXG4gIC8vIHNjYWxlIGJ5IHRoZSBzaXplIG9mIHRoZSBnbHlwaCdzIHJlY3RhbmdsZVxcbiAgcG9zaXRpb25WZWM0Lnh5ICo9IHVHbHlwaFJlY3QuencgLSB1R2x5cGhSZWN0Lnh5O1xcblxcbiAgLy8gbW92ZSB0byB0aGUgY29ybmVyIG9mIHRoZSBnbHlwaFxcbiAgcG9zaXRpb25WZWM0Lnh5ICs9IHVHbHlwaFJlY3QueHk7XFxuXFxuICAvLyBtb3ZlIHRvIHRoZSBsZXR0ZXIncyBsaW5lIG9mZnNldFxcbiAgcG9zaXRpb25WZWM0LnggKz0gdUdseXBoT2Zmc2V0O1xcbiAgXFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG4gIHZUZXhDb29yZCA9IGFUZXhDb29yZDtcXG4gIHcgPSBnbF9Qb3NpdGlvbi53O1xcbn1cXG5cIixmb250RnJhZzpcIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXFxucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuI2lmIDBcXG4gIC8vIHNpbXVsYXRlIGludGVnZXIgbWF0aCB1c2luZyBmbG9hdHNcXG5cXHQjZGVmaW5lIGludCBmbG9hdFxcblxcdCNkZWZpbmUgaXZlYzIgdmVjMlxcblxcdCNkZWZpbmUgSU5UKHgpIGZsb2F0KHgpXFxuXFxuXFx0aW50IGlmbG9vcihmbG9hdCB2KSB7IHJldHVybiBmbG9vcih2KTsgfVxcblxcdGl2ZWMyIGlmbG9vcih2ZWMyIHYpIHsgcmV0dXJuIGZsb29yKHYpOyB9XFxuXFxuI2Vsc2VcXG4gIC8vIHVzZSBuYXRpdmUgaW50ZWdlciBtYXRoXFxuXFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xcblxcdCNkZWZpbmUgSU5UKHgpIHhcXG5cXG5cXHRpbnQgaWZsb29yKGZsb2F0IHYpIHsgcmV0dXJuIGludCh2KTsgfVxcblxcdGludCBpZmxvb3IoaW50IHYpIHsgcmV0dXJuIHY7IH1cXG5cXHRpdmVjMiBpZmxvb3IodmVjMiB2KSB7IHJldHVybiBpdmVjMih2KTsgfVxcblxcbiNlbmRpZlxcblxcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyU3Ryb2tlcztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlclJvd1N0cm9rZXM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJSb3dzO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyQ29sU3Ryb2tlcztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlckNvbHM7XFxuXFxudW5pZm9ybSBpdmVjMiB1U3Ryb2tlSW1hZ2VTaXplO1xcbnVuaWZvcm0gaXZlYzIgdUNlbGxzSW1hZ2VTaXplO1xcbnVuaWZvcm0gaXZlYzIgdUdyaWRJbWFnZVNpemU7XFxuXFxudW5pZm9ybSBpdmVjMiB1R3JpZE9mZnNldDtcXG51bmlmb3JtIGl2ZWMyIHVHcmlkU2l6ZTtcXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxuXFxudmFyeWluZyB2ZWMyIHZUZXhDb29yZDtcXG5cXG4vLyBzb21lIGhlbHBlciBmdW5jdGlvbnNcXG5pbnQgcm91bmQoZmxvYXQgdikgeyByZXR1cm4gaWZsb29yKHYgKyAwLjUpOyB9XFxuaXZlYzIgcm91bmQodmVjMiB2KSB7IHJldHVybiBpZmxvb3IodiArIDAuNSk7IH1cXG5mbG9hdCBzYXR1cmF0ZShmbG9hdCB2KSB7IHJldHVybiBjbGFtcCh2LCAwLjAsIDEuMCk7IH1cXG52ZWMyIHNhdHVyYXRlKHZlYzIgdikgeyByZXR1cm4gY2xhbXAodiwgMC4wLCAxLjApOyB9XFxuXFxuaW50IG11bChmbG9hdCB2MSwgaW50IHYyKSB7XFxuICByZXR1cm4gaWZsb29yKHYxICogZmxvYXQodjIpKTtcXG59XFxuXFxuaXZlYzIgbXVsKHZlYzIgdjEsIGl2ZWMyIHYyKSB7XFxuICByZXR1cm4gaWZsb29yKHYxICogdmVjMih2MikgKyAwLjUpO1xcbn1cXG5cXG4vLyB1bnBhY2sgYSAxNi1iaXQgaW50ZWdlciBmcm9tIGEgZmxvYXQgdmVjMlxcbmludCBnZXRJbnQxNih2ZWMyIHYpIHtcXG4gIGl2ZWMyIGl2ID0gcm91bmQodiAqIDI1NS4wKTtcXG4gIHJldHVybiBpdi54ICogSU5UKDEyOCkgKyBpdi55O1xcbn1cXG5cXG52ZWMyIHBpeGVsU2NhbGU7XFxudmVjMiBjb3ZlcmFnZSA9IHZlYzIoMC4wKTtcXG52ZWMyIHdlaWdodCA9IHZlYzIoMC41KTtcXG5jb25zdCBmbG9hdCBtaW5EaXN0YW5jZSA9IDEuMC84MTkyLjA7XFxuY29uc3QgZmxvYXQgaGFyZG5lc3MgPSAxLjA1OyAvLyBhbW91bnQgb2YgYW50aWFsaWFzXFxuXFxuLy8gdGhlIG1heGltdW0gbnVtYmVyIG9mIGN1cnZlcyBpbiBhIGdseXBoXFxuY29uc3QgaW50IE4gPSBJTlQoMjUwKTtcXG5cXG4vLyByZXRyaWV2ZXMgYW4gaW5kZXhlZCBwaXhlbCBmcm9tIGEgc2FtcGxlclxcbnZlYzQgZ2V0VGV4ZWwoc2FtcGxlcjJEIHNhbXBsZXIsIGludCBwb3MsIGl2ZWMyIHNpemUpIHtcXG4gIGludCB3aWR0aCA9IHNpemUueDtcXG4gIGludCB5ID0gaWZsb29yKHBvcyAvIHdpZHRoKTtcXG4gIGludCB4ID0gcG9zIC0geSAqIHdpZHRoOyAgLy8gcG9zICUgd2lkdGhcXG5cXG4gIHJldHVybiB0ZXh0dXJlMkQoc2FtcGxlciwgKHZlYzIoeCwgeSkgKyAwLjUpIC8gdmVjMihzaXplKSk7XFxufVxcblxcbnZvaWQgY2FsdWxhdGVDcm9zc2luZ3ModmVjMiBwMCwgdmVjMiBwMSwgdmVjMiBwMiwgb3V0IHZlYzIgQzEsIG91dCB2ZWMyIEMyKSB7XFxuXFxuICAvLyBnZXQgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgcXVhZHJhdGljIGluIHRcXG4gIHZlYzIgYSA9IHAwIC0gcDEgKiAyLjAgKyBwMjtcXG4gIHZlYzIgYiA9IHAwIC0gcDE7XFxuICB2ZWMyIGMgPSBwMCAtIHZUZXhDb29yZDtcXG5cXG4gIC8vIGZvdW5kIG91dCB3aGljaCB2YWx1ZXMgb2YgJ3QnIGl0IGNyb3NzZXMgdGhlIGF4ZXNcXG4gIHZlYzIgc3VyZCA9IHNxcnQobWF4KHZlYzIoMC4wKSwgYiAqIGIgLSBhICogYykpO1xcbiAgdmVjMiB0MSA9ICgoYiAtIHN1cmQpIC8gYSkueXg7XFxuICB2ZWMyIHQyID0gKChiICsgc3VyZCkgLyBhKS55eDtcXG5cXG4gIC8vIGFwcHJveGltYXRlIHN0cmFpZ2h0IGxpbmVzIHRvIGF2b2lkIHJvdW5kaW5nIGVycm9yc1xcbiAgaWYgKGFicyhhLnkpIDwgMC4wMDEpXFxuICAgIHQxLnggPSB0Mi54ID0gYy55IC8gKDIuMCAqIGIueSk7XFxuXFxuICBpZiAoYWJzKGEueCkgPCAwLjAwMSlcXG4gICAgdDEueSA9IHQyLnkgPSBjLnggLyAoMi4wICogYi54KTtcXG5cXG4gIC8vIHBsdWcgaW50byBxdWFkcmF0aWMgZm9ybXVsYSB0byBmaW5kIHRoZSBjb3JyZGluYXRlcyBvZiB0aGUgY3Jvc3NpbmdzXFxuICBDMSA9ICgoYSAqIHQxIC0gYiAqIDIuMCkgKiB0MSArIGMpICogcGl4ZWxTY2FsZTtcXG4gIEMyID0gKChhICogdDIgLSBiICogMi4wKSAqIHQyICsgYykgKiBwaXhlbFNjYWxlO1xcbn1cXG5cXG52b2lkIGNvdmVyYWdlWCh2ZWMyIHAwLCB2ZWMyIHAxLCB2ZWMyIHAyKSB7XFxuXFxuICB2ZWMyIEMxLCBDMjtcXG4gIGNhbHVsYXRlQ3Jvc3NpbmdzKHAwLCBwMSwgcDIsIEMxLCBDMik7XFxuXFxuICAvLyBkZXRlcm1pbmUgb24gd2hpY2ggc2lkZSBvZiB0aGUgeC1heGlzIHRoZSBwb2ludHMgbGllXFxuICBib29sIHkwID0gcDAueSA+IHZUZXhDb29yZC55O1xcbiAgYm9vbCB5MSA9IHAxLnkgPiB2VGV4Q29vcmQueTtcXG4gIGJvb2wgeTIgPSBwMi55ID4gdlRleENvb3JkLnk7XFxuXFxuICAvLyBjb3VsZCB3ZWIgYmUgdW5kZXIgdGhlIGN1cnZlIChhZnRlciB0MSk/XFxuICBpZiAoeTEgPyAheTIgOiB5MCkge1xcbiAgICAvLyBhZGQgdGhlIGNvdmVyYWdlIGZvciB0MVxcbiAgICBjb3ZlcmFnZS54ICs9IHNhdHVyYXRlKEMxLnggKyAwLjUpO1xcbiAgICAvLyBjYWxjdWxhdGUgdGhlIGFudGktYWxpYXNpbmcgZm9yIHQxXFxuICAgIHdlaWdodC54ID0gbWluKHdlaWdodC54LCBhYnMoQzEueCkpO1xcbiAgfVxcblxcbiAgLy8gYXJlIHdlIG91dHNpZGUgdGhlIGN1cnZlIChhZnRlciB0Mik/XFxuICBpZiAoeTEgPyAheTAgOiB5Mikge1xcbiAgICAvLyBzdWJ0cmFjdCB0aGUgY292ZXJhZ2UgZm9yIHQyXFxuICAgIGNvdmVyYWdlLnggLT0gc2F0dXJhdGUoQzIueCArIDAuNSk7XFxuICAgIC8vIGNhbGN1bGF0ZSB0aGUgYW50aS1hbGlhc2luZyBmb3IgdDJcXG4gICAgd2VpZ2h0LnggPSBtaW4od2VpZ2h0LngsIGFicyhDMi54KSk7XFxuICB9XFxufVxcblxcbi8vIHRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgY292ZXJhZ2VYLCBidXQgd2l0aCB0aGUgYXhlcyBzd2FwcGVkXFxudm9pZCBjb3ZlcmFnZVkodmVjMiBwMCwgdmVjMiBwMSwgdmVjMiBwMikge1xcblxcbiAgdmVjMiBDMSwgQzI7XFxuICBjYWx1bGF0ZUNyb3NzaW5ncyhwMCwgcDEsIHAyLCBDMSwgQzIpO1xcblxcbiAgYm9vbCB4MCA9IHAwLnggPiB2VGV4Q29vcmQueDtcXG4gIGJvb2wgeDEgPSBwMS54ID4gdlRleENvb3JkLng7XFxuICBib29sIHgyID0gcDIueCA+IHZUZXhDb29yZC54O1xcblxcbiAgaWYgKHgxID8gIXgyIDogeDApIHtcXG4gICAgY292ZXJhZ2UueSAtPSBzYXR1cmF0ZShDMS55ICsgMC41KTtcXG4gICAgd2VpZ2h0LnkgPSBtaW4od2VpZ2h0LnksIGFicyhDMS55KSk7XFxuICB9XFxuXFxuICBpZiAoeDEgPyAheDAgOiB4Mikge1xcbiAgICBjb3ZlcmFnZS55ICs9IHNhdHVyYXRlKEMyLnkgKyAwLjUpO1xcbiAgICB3ZWlnaHQueSA9IG1pbih3ZWlnaHQueSwgYWJzKEMyLnkpKTtcXG4gIH1cXG59XFxuXFxudm9pZCBtYWluKCkge1xcblxcbiAgLy8gY2FsY3VsYXRlIHRoZSBwaXhlbCBzY2FsZSBiYXNlZCBvbiBzY3JlZW4tY29vcmRpbmF0ZXNcXG4gIHBpeGVsU2NhbGUgPSBoYXJkbmVzcyAvIGZ3aWR0aCh2VGV4Q29vcmQpO1xcblxcbiAgLy8gd2hpY2ggZ3JpZCBjZWxsIGlzIHRoaXMgcGl4ZWwgaW4/XFxuICBpdmVjMiBncmlkQ29vcmQgPSBpZmxvb3IodlRleENvb3JkICogdmVjMih1R3JpZFNpemUpKTtcXG5cXG4gIC8vIGludGVyc2VjdCBjdXJ2ZXMgaW4gdGhpcyByb3dcXG4gIHtcXG4gICAgLy8gdGhlIGluZGV4IGludG8gdGhlIHJvdyBpbmZvIGJpdG1hcFxcbiAgICBpbnQgcm93SW5kZXggPSBncmlkQ29vcmQueSArIHVHcmlkT2Zmc2V0Lnk7XFxuICAgIC8vIGZldGNoIHRoZSBpbmZvIHRleGVsXFxuICAgIHZlYzQgcm93SW5mbyA9IGdldFRleGVsKHVTYW1wbGVyUm93cywgcm93SW5kZXgsIHVHcmlkSW1hZ2VTaXplKTtcXG4gICAgLy8gdW5wYWNrIHRoZSByb3dJbmZvXFxuICAgIGludCByb3dTdHJva2VJbmRleCA9IGdldEludDE2KHJvd0luZm8ueHkpO1xcbiAgICBpbnQgcm93U3Ryb2tlQ291bnQgPSBnZXRJbnQxNihyb3dJbmZvLnp3KTtcXG5cXG4gICAgZm9yIChpbnQgaVJvd1N0cm9rZSA9IElOVCgwKTsgaVJvd1N0cm9rZSA8IE47IGlSb3dTdHJva2UrKykge1xcbiAgICAgIGlmIChpUm93U3Ryb2tlID49IHJvd1N0cm9rZUNvdW50KVxcbiAgICAgICAgYnJlYWs7XFxuXFxuICAgICAgLy8gZWFjaCBzdHJva2UgaXMgbWFkZSB1cCBvZiAzIHBvaW50czogdGhlIHN0YXJ0IGFuZCBjb250cm9sIHBvaW50XFxuICAgICAgLy8gYW5kIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjdXJ2ZS5cXG4gICAgICAvLyBmZXRjaCB0aGUgaW5kaWNlcyBvZiB0aGlzIHBhaXIgb2Ygc3Ryb2tlczpcXG4gICAgICB2ZWM0IHN0cm9rZUluZGljZXMgPSBnZXRUZXhlbCh1U2FtcGxlclJvd1N0cm9rZXMsIHJvd1N0cm9rZUluZGV4KyssIHVDZWxsc0ltYWdlU2l6ZSk7XFxuXFxuICAgICAgLy8gdW5wYWNrIHRoZSBzdHJva2UgaW5kZXhcXG4gICAgICBpbnQgc3Ryb2tlUG9zID0gZ2V0SW50MTYoc3Ryb2tlSW5kaWNlcy54eSk7XFxuXFxuICAgICAgLy8gZmV0Y2ggdGhlIHR3byBzdHJva2VzXFxuICAgICAgdmVjNCBzdHJva2UwID0gZ2V0VGV4ZWwodVNhbXBsZXJTdHJva2VzLCBzdHJva2VQb3MgKyBJTlQoMCksIHVTdHJva2VJbWFnZVNpemUpO1xcbiAgICAgIHZlYzQgc3Ryb2tlMSA9IGdldFRleGVsKHVTYW1wbGVyU3Ryb2tlcywgc3Ryb2tlUG9zICsgSU5UKDEpLCB1U3Ryb2tlSW1hZ2VTaXplKTtcXG5cXG4gICAgICAvLyBjYWxjdWxhdGUgdGhlIGNvdmVyYWdlXFxuICAgICAgY292ZXJhZ2VYKHN0cm9rZTAueHksIHN0cm9rZTAuencsIHN0cm9rZTEueHkpO1xcbiAgICB9XFxuICB9XFxuXFxuICAvLyBpbnRlcnNlY3QgY3VydmVzIGluIHRoaXMgY29sdW1uXFxuICB7XFxuICAgIGludCBjb2xJbmRleCA9IGdyaWRDb29yZC54ICsgdUdyaWRPZmZzZXQueDtcXG4gICAgdmVjNCBjb2xJbmZvID0gZ2V0VGV4ZWwodVNhbXBsZXJDb2xzLCBjb2xJbmRleCwgdUdyaWRJbWFnZVNpemUpO1xcbiAgICBpbnQgY29sU3Ryb2tlSW5kZXggPSBnZXRJbnQxNihjb2xJbmZvLnh5KTtcXG4gICAgaW50IGNvbFN0cm9rZUNvdW50ID0gZ2V0SW50MTYoY29sSW5mby56dyk7XFxuICAgIFxcbiAgICBmb3IgKGludCBpQ29sU3Ryb2tlID0gSU5UKDApOyBpQ29sU3Ryb2tlIDwgTjsgaUNvbFN0cm9rZSsrKSB7XFxuICAgICAgaWYgKGlDb2xTdHJva2UgPj0gY29sU3Ryb2tlQ291bnQpXFxuICAgICAgICBicmVhaztcXG5cXG4gICAgICB2ZWM0IHN0cm9rZUluZGljZXMgPSBnZXRUZXhlbCh1U2FtcGxlckNvbFN0cm9rZXMsIGNvbFN0cm9rZUluZGV4KyssIHVDZWxsc0ltYWdlU2l6ZSk7XFxuXFxuICAgICAgaW50IHN0cm9rZVBvcyA9IGdldEludDE2KHN0cm9rZUluZGljZXMueHkpO1xcbiAgICAgIHZlYzQgc3Ryb2tlMCA9IGdldFRleGVsKHVTYW1wbGVyU3Ryb2tlcywgc3Ryb2tlUG9zICsgSU5UKDApLCB1U3Ryb2tlSW1hZ2VTaXplKTtcXG4gICAgICB2ZWM0IHN0cm9rZTEgPSBnZXRUZXhlbCh1U2FtcGxlclN0cm9rZXMsIHN0cm9rZVBvcyArIElOVCgxKSwgdVN0cm9rZUltYWdlU2l6ZSk7XFxuICAgICAgY292ZXJhZ2VZKHN0cm9rZTAueHksIHN0cm9rZTAuencsIHN0cm9rZTEueHkpO1xcbiAgICB9XFxuICB9XFxuXFxuICB3ZWlnaHQgPSBzYXR1cmF0ZSgxLjAgLSB3ZWlnaHQgKiAyLjApO1xcbiAgZmxvYXQgZGlzdGFuY2UgPSBtYXgod2VpZ2h0LnggKyB3ZWlnaHQueSwgbWluRGlzdGFuY2UpOyAvLyBtYW5oYXR0YW4gYXBwcm94LlxcbiAgZmxvYXQgYW50aWFsaWFzID0gYWJzKGRvdChjb3ZlcmFnZSwgd2VpZ2h0KSAvIGRpc3RhbmNlKTtcXG4gIGZsb2F0IGNvdmVyID0gbWluKGFicyhjb3ZlcmFnZS54KSwgYWJzKGNvdmVyYWdlLnkpKTtcXG4gIGdsX0ZyYWdDb2xvciA9IHVNYXRlcmlhbENvbG9yO1xcbiAgZ2xfRnJhZ0NvbG9yLmEgKj0gc2F0dXJhdGUobWF4KGFudGlhbGlhcywgY292ZXIpKTtcXG59XCIsbGluZVZlcnQ6XCIvKlxcbiAgUGFydCBvZiB0aGUgUHJvY2Vzc2luZyBwcm9qZWN0IC0gaHR0cDovL3Byb2Nlc3Npbmcub3JnXFxuICBDb3B5cmlnaHQgKGMpIDIwMTItMTUgVGhlIFByb2Nlc3NpbmcgRm91bmRhdGlvblxcbiAgQ29weXJpZ2h0IChjKSAyMDA0LTEyIEJlbiBGcnkgYW5kIENhc2V5IFJlYXNcXG4gIENvcHlyaWdodCAoYykgMjAwMS0wNCBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5XFxuICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXFxuICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljXFxuICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuMS5cXG4gIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxcbiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcXG4gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXFxuICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxcbiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsXFxuICBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGVcXG4gIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsXFxuICBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0FcXG4qL1xcblxcbiNkZWZpbmUgUFJPQ0VTU0lOR19MSU5FX1NIQURFUlxcblxcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIGZsb2F0IHVTdHJva2VXZWlnaHQ7XFxuXFxudW5pZm9ybSB2ZWM0IHVWaWV3cG9ydDtcXG5cXG4vLyB1c2luZyBhIHNjYWxlIDwxIG1vdmVzIHRoZSBsaW5lcyB0b3dhcmRzIHRoZSBjYW1lcmFcXG4vLyBpbiBvcmRlciB0byBwcmV2ZW50IHBvcHBpbmcgZWZmZWN0cyBkdWUgdG8gaGFsZiBvZlxcbi8vIHRoZSBsaW5lIGRpc2FwcGVhcmluZyBiZWhpbmQgdGhlIGdlb21ldHJ5IGZhY2VzLlxcbnZlYzMgc2NhbGUgPSB2ZWMzKDAuOTk5NSk7XFxuXFxuYXR0cmlidXRlIHZlYzQgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGFEaXJlY3Rpb247XFxuICBcXG52b2lkIG1haW4oKSB7XFxuICB2ZWM0IHBvc3AgPSB1TW9kZWxWaWV3TWF0cml4ICogYVBvc2l0aW9uO1xcbiAgdmVjNCBwb3NxID0gdU1vZGVsVmlld01hdHJpeCAqIChhUG9zaXRpb24gKyB2ZWM0KGFEaXJlY3Rpb24ueHl6LCAwKSk7XFxuXFxuICAvLyBNb3ZpbmcgdmVydGljZXMgc2xpZ2h0bHkgdG93YXJkIHRoZSBjYW1lcmFcXG4gIC8vIHRvIGF2b2lkIGRlcHRoLWZpZ2h0aW5nIHdpdGggdGhlIGZpbGwgdHJpYW5nbGVzLlxcbiAgLy8gRGlzY3Vzc2VkIGhlcmU6XFxuICAvLyBodHRwOi8vd3d3Lm9wZW5nbC5vcmcvZGlzY3Vzc2lvbl9ib2FyZHMvdWJidGhyZWFkcy5waHA/dWJiPXNob3dmbGF0Jk51bWJlcj0yNTI4NDggIFxcbiAgcG9zcC54eXogPSBwb3NwLnh5eiAqIHNjYWxlO1xcbiAgcG9zcS54eXogPSBwb3NxLnh5eiAqIHNjYWxlO1xcblxcbiAgdmVjNCBwID0gdVByb2plY3Rpb25NYXRyaXggKiBwb3NwO1xcbiAgdmVjNCBxID0gdVByb2plY3Rpb25NYXRyaXggKiBwb3NxO1xcblxcbiAgLy8gZm9ybXVsYSB0byBjb252ZXJ0IGZyb20gY2xpcCBzcGFjZSAocmFuZ2UgLTEuLjEpIHRvIHNjcmVlbiBzcGFjZSAocmFuZ2UgMC4uW3dpZHRoIG9yIGhlaWdodF0pXFxuICAvLyBzY3JlZW5fcCA9IChwLnh5L3AudyArIDwxLDE+KSAqIDAuNSAqIHVWaWV3cG9ydC56d1xcblxcbiAgLy8gcHJldmVudCBkaXZpc2lvbiBieSBXIGJ5IHRyYW5zZm9ybWluZyB0aGUgdGFuZ2VudCBmb3JtdWxhIChkaXYgYnkgMCBjYXVzZXNcXG4gIC8vIHRoZSBsaW5lIHRvIGRpc2FwcGVhciwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9jZXNzaW5nL3Byb2Nlc3NpbmcvaXNzdWVzLzUxODMpXFxuICAvLyB0ID0gc2NyZWVuX3EgLSBzY3JlZW5fcFxcbiAgLy9cXG4gIC8vIHRhbmdlbnQgaXMgbm9ybWFsaXplZCBhbmQgd2UgZG9uJ3QgY2FyZSB3aGljaCBhRGlyZWN0aW9uIGl0IHBvaW50cyB0byAoKy0pXFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCBzY3JlZW5fcSAtIHNjcmVlbl9wIClcXG4gIC8vIHQgPSArLSBub3JtYWxpemUoIChxLnh5L3Eudys8MSwxPikqMC41KnVWaWV3cG9ydC56dyAtIChwLnh5L3Audys8MSwxPikqMC41KnVWaWV3cG9ydC56dyApXFxuICAvL1xcbiAgLy8gZXh0cmFjdCBjb21tb24gZmFjdG9yLCA8MSwxPiAtIDwxLDE+IGNhbmNlbHMgb3V0XFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCAocS54eS9xLncgLSBwLnh5L3AudykgKiAwLjUgKiB1Vmlld3BvcnQuencgKVxcbiAgLy9cXG4gIC8vIGNvbnZlcnQgdG8gY29tbW9uIGRpdmlzb3JcXG4gIC8vIHQgPSArLSBub3JtYWxpemUoICgocS54eSpwLncgLSBwLnh5KnEudykgLyAocC53KnEudykpICogMC41ICogdVZpZXdwb3J0Lnp3IClcXG4gIC8vXFxuICAvLyByZW1vdmUgdGhlIGNvbW1vbiBzY2FsYXIgZGl2aXNvci9mYWN0b3IsIG5vdCBuZWVkZWQgZHVlIHRvIG5vcm1hbGl6ZSBhbmQgKy1cXG4gIC8vIChrZWVwIHVWaWV3cG9ydCAtIGNhbid0IHJlbW92ZSBiZWNhdXNlIGl0IGhhcyBkaWZmZXJlbnQgY29tcG9uZW50cyBmb3IgeCBhbmQgeVxcbiAgLy8gIGFuZCBjb3JyZWN0cyBmb3IgYXNwZWN0IHJhdGlvLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb2Nlc3NpbmcvcHJvY2Vzc2luZy9pc3N1ZXMvNTE4MSlcXG4gIC8vIHQgPSArLSBub3JtYWxpemUoIChxLnh5KnAudyAtIHAueHkqcS53KSAqIHVWaWV3cG9ydC56dyApXFxuXFxuICB2ZWMyIHRhbmdlbnQgPSBub3JtYWxpemUoKHEueHkqcC53IC0gcC54eSpxLncpICogdVZpZXdwb3J0Lnp3KTtcXG5cXG4gIC8vIGZsaXAgdGFuZ2VudCB0byBub3JtYWwgKGl0J3MgYWxyZWFkeSBub3JtYWxpemVkKVxcbiAgdmVjMiBub3JtYWwgPSB2ZWMyKC10YW5nZW50LnksIHRhbmdlbnQueCk7XFxuXFxuICBmbG9hdCB0aGlja25lc3MgPSBhRGlyZWN0aW9uLncgKiB1U3Ryb2tlV2VpZ2h0O1xcbiAgdmVjMiBvZmZzZXQgPSBub3JtYWwgKiB0aGlja25lc3MgLyAyLjA7XFxuXFxuICAvLyBQZXJzcGVjdGl2ZSAtLS1cXG4gIC8vIGNvbnZlcnQgZnJvbSB3b3JsZCB0byBjbGlwIGJ5IG11bHRpcGx5aW5nIHdpdGggcHJvamVjdGlvbiBzY2FsaW5nIGZhY3RvclxcbiAgLy8gdG8gZ2V0IHRoZSByaWdodCB0aGlja25lc3MgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvY2Vzc2luZy9wcm9jZXNzaW5nL2lzc3Vlcy81MTgyKVxcbiAgLy8gaW52ZXJ0IFksIHByb2plY3Rpb25zIGluIFByb2Nlc3NpbmcgaW52ZXJ0IFlcXG4gIHZlYzIgcGVyc3BTY2FsZSA9ICh1UHJvamVjdGlvbk1hdHJpeCAqIHZlYzQoMSwgLTEsIDAsIDApKS54eTtcXG5cXG4gIC8vIE5vIFBlcnNwZWN0aXZlIC0tLVxcbiAgLy8gbXVsdGlwbHkgYnkgVyAodG8gY2FuY2VsIG91dCBkaXZpc2lvbiBieSBXIGxhdGVyIGluIHRoZSBwaXBlbGluZSkgYW5kXFxuICAvLyBjb252ZXJ0IGZyb20gc2NyZWVuIHRvIGNsaXAgKGRlcml2ZWQgZnJvbSBjbGlwIHRvIHNjcmVlbiBhYm92ZSlcXG4gIHZlYzIgbm9QZXJzcFNjYWxlID0gcC53IC8gKDAuNSAqIHVWaWV3cG9ydC56dyk7XFxuXFxuICAvL2dsX1Bvc2l0aW9uLnh5ID0gcC54eSArIG9mZnNldC54eSAqIG1peChub1BlcnNwU2NhbGUsIHBlcnNwU2NhbGUsIGZsb2F0KHBlcnNwZWN0aXZlID4gMCkpO1xcbiAgZ2xfUG9zaXRpb24ueHkgPSBwLnh5ICsgb2Zmc2V0Lnh5ICogcGVyc3BTY2FsZTtcXG4gIGdsX1Bvc2l0aW9uLnp3ID0gcC56dztcXG59XFxuXCIsbGluZUZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5wcmVjaXNpb24gbWVkaXVtcCBpbnQ7XFxuXFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IHVNYXRlcmlhbENvbG9yO1xcbn1cIixwb2ludFZlcnQ6XCJhdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxudW5pZm9ybSBmbG9hdCB1UG9pbnRTaXplO1xcbnZhcnlpbmcgZmxvYXQgdlN0cm9rZVdlaWdodDtcXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudm9pZCBtYWluKCkge1xcblxcdHZlYzQgcG9zaXRpb25WZWM0ID0gIHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcblxcdGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcblxcdGdsX1BvaW50U2l6ZSA9IHVQb2ludFNpemU7XFxuXFx0dlN0cm9rZVdlaWdodCA9IHVQb2ludFNpemU7XFxufVwiLHBvaW50RnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnByZWNpc2lvbiBtZWRpdW1wIGludDtcXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxudmFyeWluZyBmbG9hdCB2U3Ryb2tlV2VpZ2h0O1xcblxcbnZvaWQgbWFpbigpe1xcblxcdGZsb2F0IG1hc2sgPSAwLjA7XFxuXFxuXFx0Ly8gbWFrZSBhIGNpcmN1bGFyIG1hc2sgdXNpbmcgdGhlIGdsX1BvaW50Q29vcmQgKGdvZXMgZnJvbSAwIC0gMSBvbiBhIHBvaW50KVxcbiAgICAvLyBtaWdodCBiZSBhYmxlIHRvIGdldCBhIG5pY2VyIGVkZ2Ugb24gYmlnIHN0cm9rZXdlaWdodHMgd2l0aCBzbW9vdGhzdGVwIGJ1dCBzbGlnaHRseSBsZXNzIHBlcmZvcm1hbnRcXG5cXG5cXHRtYXNrID0gc3RlcCgwLjk4LCBsZW5ndGgoZ2xfUG9pbnRDb29yZCAqIDIuMCAtIDEuMCkpO1xcblxcblxcdC8vIGlmIHN0cm9rZVdlaWdodCBpcyAxIG9yIGxlc3MgbGV0cyBqdXN0IGRyYXcgYSBzcXVhcmVcXG5cXHQvLyB0aGlzIHByZXZlbnRzIHdlaXJkIGFydGlmYWN0aW5nIGZyb20gY2FydmluZyBjaXJjbGVzIHdoZW4gb3VyIHBvaW50cyBhcmUgcmVhbGx5IHNtYWxsXFxuXFx0Ly8gaWYgc3Ryb2tlV2VpZ2h0IGlzIGxhcmdlciB0aGFuIDEsIHdlIGp1c3QgdXNlIGl0IGFzIGlzXFxuXFxuXFx0bWFzayA9IG1peCgwLjAsIG1hc2ssIGNsYW1wKGZsb29yKHZTdHJva2VXZWlnaHQgLSAwLjUpLDAuMCwxLjApKTtcXG5cXG5cXHQvLyB0aHJvdyBhd2F5IHRoZSBib3JkZXJzIG9mIHRoZSBtYXNrXFxuICAgIC8vIG90aGVyd2lzZSB3ZSBnZXQgd2VpcmQgYWxwaGEgYmxlbmRpbmcgaXNzdWVzXFxuXFxuXFx0aWYobWFzayA+IDAuOTgpe1xcbiAgICAgIGRpc2NhcmQ7XFxuICBcXHR9XFxuXFxuICBcXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KHVNYXRlcmlhbENvbG9yLnJnYiAqICgxLjAgLSBtYXNrKSwgdU1hdGVyaWFsQ29sb3IuYSkgO1xcbn1cIn07ZC5SZW5kZXJlckdMPWZ1bmN0aW9uKGEsYixjLGUpe3JldHVybiBkLlJlbmRlcmVyLmNhbGwodGhpcyxhLGIsYyksdGhpcy5hdHRyaWJ1dGVzPXt9LGU9ZXx8e30sdGhpcy5hdHRyaWJ1dGVzLmFscGhhPXZvaWQgMD09PWUuYWxwaGF8fGUuYWxwaGEsdGhpcy5hdHRyaWJ1dGVzLmRlcHRoPXZvaWQgMD09PWUuZGVwdGh8fGUuZGVwdGgsdGhpcy5hdHRyaWJ1dGVzLnN0ZW5jaWw9dm9pZCAwPT09ZS5zdGVuY2lsfHxlLnN0ZW5jaWwsdGhpcy5hdHRyaWJ1dGVzLmFudGlhbGlhcz12b2lkIDAhPT1lLmFudGlhbGlhcyYmZS5hbnRpYWxpYXMsdGhpcy5hdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYT12b2lkIDAhPT1lLnByZW11bHRpcGxpZWRBbHBoYSYmZS5wcmVtdWx0aXBsaWVkQWxwaGEsdGhpcy5hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj12b2lkIDA9PT1lLnByZXNlcnZlRHJhd2luZ0J1ZmZlcnx8ZS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsdGhpcy5hdHRyaWJ1dGVzLnBlclBpeGVsTGlnaHRpbmc9dm9pZCAwIT09ZS5wZXJQaXhlbExpZ2h0aW5nJiZlLnBlclBpeGVsTGlnaHRpbmcsdGhpcy5faW5pdENvbnRleHQoKSx0aGlzLmlzUDNEPSEwLHRoaXMuR0w9dGhpcy5kcmF3aW5nQ29udGV4dCx0aGlzLmFtYmllbnRMaWdodENvbG9ycz1bXSx0aGlzLmRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25zPVtdLHRoaXMuZGlyZWN0aW9uYWxMaWdodENvbG9ycz1bXSx0aGlzLnBvaW50TGlnaHRQb3NpdGlvbnM9W10sdGhpcy5wb2ludExpZ2h0Q29sb3JzPVtdLHRoaXMudU1WTWF0cml4PW5ldyBkLk1hdHJpeCx0aGlzLnVQTWF0cml4PW5ldyBkLk1hdHJpeCx0aGlzLnVOTWF0cml4PW5ldyBkLk1hdHJpeChcIm1hdDNcIiksdGhpcy5fY3VyQ2FtZXJhPW5ldyBkLkNhbWVyYSh0aGlzKSx0aGlzLl9jdXJDYW1lcmEuX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3MoKSx0aGlzLl9jdXJDYW1lcmEuX3NldERlZmF1bHRDYW1lcmEoKSx0aGlzLmdIYXNoPXt9LHRoaXMuX2RlZmF1bHRMaWdodFNoYWRlcj12b2lkIDAsdGhpcy5fZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXI9dm9pZCAwLHRoaXMuX2RlZmF1bHROb3JtYWxTaGFkZXI9dm9pZCAwLHRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcj12b2lkIDAsdGhpcy5fZGVmYXVsdFBvaW50U2hhZGVyPXZvaWQgMCx0aGlzLmN1ckZpbGxTaGFkZXI9dm9pZCAwLHRoaXMuY3VyU3Ryb2tlU2hhZGVyPXZvaWQgMCx0aGlzLmN1clBvaW50U2hhZGVyPXZvaWQgMCx0aGlzLl91c2VDb2xvclNoYWRlcigpLHRoaXMuc2V0U3Ryb2tlU2hhZGVyKHRoaXMuX2dldExpbmVTaGFkZXIoKSksdGhpcy5fdXNlUG9pbnRTaGFkZXIoKSx0aGlzLl9wb2ludFZlcnRleEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaXNJbW1lZGlhdGVEcmF3aW5nPSExLHRoaXMuaW1tZWRpYXRlTW9kZT17fSx0aGlzLmZpbGwoMjU1LDI1NSwyNTUsMjU1KSx0aGlzLnBvaW50U2l6ZT01LHRoaXMuc3Ryb2tlV2VpZ2h0KDEpLHRoaXMuc3Ryb2tlKDAsMCwwKSx0aGlzLnRleHR1cmVzPVtdLHRoaXMuX2N1cnZlVGlnaHRuZXNzPTYsdGhpcy5fbG9va1VwVGFibGVCZXppZXI9W10sdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWM9W10sdGhpcy5fbHV0QmV6aWVyRGV0YWlsPTAsdGhpcy5fbHV0UXVhZHJhdGljRGV0YWlsPTAsdGhpcy5fdGVzc3k9dGhpcy5faW5pdFRlc3N5KCksdGhpcy5mb250SW5mb3M9e30sdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQuUmVuZGVyZXIucHJvdG90eXBlKSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9pbml0Q29udGV4dD1mdW5jdGlvbigpe3RyeXtpZih0aGlzLmRyYXdpbmdDb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoXCJ3ZWJnbFwiLHRoaXMuYXR0cmlidXRlcyl8fHRoaXMuY2FudmFzLmdldENvbnRleHQoXCJleHBlcmltZW50YWwtd2ViZ2xcIix0aGlzLmF0dHJpYnV0ZXMpLG51bGw9PT10aGlzLmRyYXdpbmdDb250ZXh0KXRocm93IG5ldyBFcnJvcihcIkVycm9yIGNyZWF0aW5nIHdlYmdsIGNvbnRleHRcIik7Y29uc29sZS5sb2coXCJwNS5SZW5kZXJlckdMOiBlbmFibGVkIHdlYmdsIGNvbnRleHRcIik7dmFyIGE9dGhpcy5kcmF3aW5nQ29udGV4dDthLmVuYWJsZShhLkRFUFRIX1RFU1QpLGEuZGVwdGhGdW5jKGEuTEVRVUFMKSxhLnZpZXdwb3J0KDAsMCxhLmRyYXdpbmdCdWZmZXJXaWR0aCxhLmRyYXdpbmdCdWZmZXJIZWlnaHQpLHRoaXMuX3ZpZXdwb3J0PXRoaXMuZHJhd2luZ0NvbnRleHQuZ2V0UGFyYW1ldGVyKHRoaXMuZHJhd2luZ0NvbnRleHQuVklFV1BPUlQpfWNhdGNoKGEpe3Rocm93IGF9fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9yZXNldENvbnRleHQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPXRoaXMud2lkdGgsZj10aGlzLmhlaWdodCxnPXRoaXMuY2FudmFzLmlkLGg9dGhpcy5jYW52YXM7aCYmaC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGgpLGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxoLmlkPWcsdGhpcy5fcEluc3QuX3VzZXJOb2RlP3RoaXMuX3BJbnN0Ll91c2VyTm9kZS5hcHBlbmRDaGlsZChoKTpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGgpLHRoaXMuX3BJbnN0LmNhbnZhcz1oO3ZhciBpPW5ldyBkLlJlbmRlcmVyR0wodGhpcy5fcEluc3QuY2FudmFzLHRoaXMuX3BJbnN0LCEwLGEpO3RoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIl9yZW5kZXJlclwiLGkpLGkucmVzaXplKGUsZiksaS5fYXBwbHlEZWZhdWx0cygpLHRoaXMuX3BJbnN0Ll9lbGVtZW50cy5wdXNoKGkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmFwcGx5KHdpbmRvdy5fcmVuZGVyZXIsYil9LDApfSxkLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKGEsYil7dGhpcy5fYXNzZXJ0M2QoXCJzZXRBdHRyaWJ1dGVzXCIpO3ZhciBjO3ZvaWQgMCE9PWI/KGM9e30sY1thXT1iKTphIGluc3RhbmNlb2YgT2JqZWN0JiYoYz1hKSx0aGlzLnB1c2goKSx0aGlzLl9yZW5kZXJlci5fcmVzZXRDb250ZXh0KGMpLHRoaXMucG9wKCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3RoaXMudU1WTWF0cml4LnNldCh0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzFdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsyXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbM10sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzRdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs1XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNl0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzddLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs4XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOV0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEwXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTFdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMl0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEzXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTRdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNV0pLHRoaXMuYW1iaWVudExpZ2h0Q29sb3JzLmxlbmd0aD0wLHRoaXMuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbnMubGVuZ3RoPTAsdGhpcy5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzLmxlbmd0aD0wLHRoaXMucG9pbnRMaWdodFBvc2l0aW9ucy5sZW5ndGg9MCx0aGlzLnBvaW50TGlnaHRDb2xvcnMubGVuZ3RoPTB9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX3BJbnN0LmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyksYj1hLmxldmVsc1swXS8yNTUsYz1hLmxldmVsc1sxXS8yNTUsZD1hLmxldmVsc1syXS8yNTUsZT1hLmxldmVsc1szXS8yNTU7dGhpcy5HTC5jbGVhckNvbG9yKGIsYyxkLGUpLHRoaXMuR0wuZGVwdGhNYXNrKCEwKSx0aGlzLkdMLmNsZWFyKHRoaXMuR0wuQ09MT1JfQlVGRkVSX0JJVHx0aGlzLkdMLkRFUFRIX0JVRkZFUl9CSVQpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oYSxiLGMsZil7dmFyIGc9ZC5wcm90b3R5cGUuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKTt0aGlzLmN1ckZpbGxDb2xvcj1nLl9hcnJheSx0aGlzLmlzSW1tZWRpYXRlRHJhd2luZz90aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0SW1tZWRpYXRlTW9kZVNoYWRlcigpKTp0aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0Q29sb3JTaGFkZXIoKSksdGhpcy5kcmF3TW9kZT1lLkZJTEwsdGhpcy5jdXJGaWxsU2hhZGVyLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuY3VyRmlsbENvbG9yKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zdHJva2U9ZnVuY3Rpb24oYSxiLGMsZSl7YXJndW1lbnRzWzNdPTI1NTt2YXIgZj1kLnByb3RvdHlwZS5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpO3RoaXMuY3VyU3Ryb2tlQ29sb3I9Zi5fYXJyYXksdGhpcy5jdXJTdHJva2VTaGFkZXIuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5jdXJTdHJva2VDb2xvciksdGhpcy5jdXJQb2ludFNoYWRlci5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIixmLl9hcnJheSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc3Ryb2tlV2VpZ2h0PWZ1bmN0aW9uKGEpe3RoaXMuY3VyU3Ryb2tlV2VpZ2h0IT09YSYmKHRoaXMucG9pbnRTaXplPWEsdGhpcy5jdXJTdHJva2VXZWlnaHQ9YSx0aGlzLmN1clN0cm9rZVNoYWRlci5zZXRVbmlmb3JtKFwidVN0cm9rZVdlaWdodFwiLGEpLHRoaXMuY3VyUG9pbnRTaGFkZXIuc2V0VW5pZm9ybShcInVQb2ludFNpemVcIixhKSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEsYixjLGUpe3JldHVybiBkLlJlbmRlcmVyMkQucHJvdG90eXBlLmdldC5hcHBseSh0aGlzLFthLGIsYyxlXSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUubG9hZFBpeGVscz1mdW5jdGlvbigpe2lmKCEwIT09dGhpcy5hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcilyZXR1cm4gdm9pZCBjb25zb2xlLmxvZyhcImxvYWRQaXhlbHMgb25seSB3b3JrcyBpbiBXZWJHTCB3aGVuIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBpcyB0cnVlLlwiKTt2YXIgYT10aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LGI9dGhpcy53aWR0aCxjPXRoaXMuaGVpZ2h0O2IqPWEsYyo9YSx2b2lkIDA9PT10aGlzLnBpeGVscyYmKHRoaXMucGl4ZWxzPW5ldyBVaW50OEFycmF5KHRoaXMuR0wuZHJhd2luZ0J1ZmZlcldpZHRoKnRoaXMuR0wuZHJhd2luZ0J1ZmZlckhlaWdodCo0KSksdGhpcy5HTC5yZWFkUGl4ZWxzKDAsMCxiLGMsdGhpcy5HTC5SR0JBLHRoaXMuR0wuVU5TSUdORURfQllURSx0aGlzLnBpeGVscyksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwicGl4ZWxzXCIsdGhpcy5waXhlbHMpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmdlb21ldHJ5SW5IYXNoPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDAhPT10aGlzLmdIYXNoW2FdfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihhLGIpe2QuUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsYSxiKSx0aGlzLkdMLnZpZXdwb3J0KDAsMCx0aGlzLkdMLmRyYXdpbmdCdWZmZXJXaWR0aCx0aGlzLkdMLmRyYXdpbmdCdWZmZXJIZWlnaHQpLHRoaXMuX3ZpZXdwb3J0PXRoaXMuR0wuZ2V0UGFyYW1ldGVyKHRoaXMuR0wuVklFV1BPUlQpLHRoaXMuX2N1ckNhbWVyYS5fcmVzaXplKCksdm9pZCAwIT09dGhpcy5waXhlbHMmJih0aGlzLnBpeGVscz1uZXcgVWludDhBcnJheSh0aGlzLkdMLmRyYXdpbmdCdWZmZXJXaWR0aCp0aGlzLkdMLmRyYXdpbmdCdWZmZXJIZWlnaHQqNCkpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzWzBdfHwwLGI9YXJndW1lbnRzWzFdfHwwLGM9YXJndW1lbnRzWzJdfHwwLGQ9YXJndW1lbnRzWzNdfHwwO3RoaXMuR0wuY2xlYXJDb2xvcihhLGIsYyxkKSx0aGlzLkdMLmNsZWFyKHRoaXMuR0wuQ09MT1JfQlVGRkVSX0JJVHx0aGlzLkdMLkRFUFRIX0JVRkZFUl9CSVQpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3RvciYmKGM9YS56LGI9YS55LGE9YS54KSx0aGlzLnVNVk1hdHJpeC50cmFuc2xhdGUoW2EsYixjXSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMudU1WTWF0cml4LnNjYWxlKGEsYixjKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhLGIpe3JldHVybiB2b2lkIDA9PT1iP3RoaXMucm90YXRlWihhKTooYXJndW1lbnRzWzBdPXRoaXMuX3BJbnN0Ll9mcm9tUmFkaWFucyhhKSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlLmFwcGx5KHRoaXMudU1WTWF0cml4LGFyZ3VtZW50cyksdGhpcyl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3RhdGUoYSwxLDAsMCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvdGF0ZShhLDAsMSwwKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm90YXRlKGEsMCwwLDEpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3ZhciBhPWQuUmVuZGVyZXIucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcyksYj1hLnByb3BlcnRpZXM7cmV0dXJuIGIudU1WTWF0cml4PXRoaXMudU1WTWF0cml4LmNvcHkoKSxiLnVQTWF0cml4PXRoaXMudVBNYXRyaXguY29weSgpLGIuX2N1ckNhbWVyYT10aGlzLl9jdXJDYW1lcmEsdGhpcy5fY3VyQ2FtZXJhPXRoaXMuX2N1ckNhbWVyYS5jb3B5KCksYX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yZXNldE1hdHJpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVNVk1hdHJpeD1kLk1hdHJpeC5pZGVudGl0eSh0aGlzLl9wSW5zdCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zZXRGaWxsU2hhZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmN1ckZpbGxTaGFkZXIhPT1hJiYodGhpcy5jdXJGaWxsU2hhZGVyPWEsdGhpcy5jdXJGaWxsU2hhZGVyLmluaXQoKSksdGhpcy5jdXJGaWxsU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNldFBvaW50U2hhZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmN1clBvaW50U2hhZGVyIT09YSYmKHRoaXMuY3VyUG9pbnRTaGFkZXI9YSx0aGlzLmN1clBvaW50U2hhZGVyLmluaXQoKSksdGhpcy5jdXJQb2ludFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zZXRTdHJva2VTaGFkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY3VyU3Ryb2tlU2hhZGVyIT09YSYmKHRoaXMuY3VyU3Ryb2tlU2hhZGVyPWEsdGhpcy5jdXJTdHJva2VTaGFkZXIuaW5pdCgpKSx0aGlzLmN1clN0cm9rZVNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXNlTGlnaHRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJGaWxsU2hhZGVyJiZ0aGlzLmN1ckZpbGxTaGFkZXIuaXNMaWdodFNoYWRlcigpfHx0aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0TGlnaHRTaGFkZXIoKSksdGhpcy5jdXJGaWxsU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91c2VDb2xvclNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1ckZpbGxTaGFkZXImJnRoaXMuY3VyRmlsbFNoYWRlciE9PXRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyfHx0aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0Q29sb3JTaGFkZXIoKSksdGhpcy5jdXJGaWxsU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91c2VQb2ludFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1clBvaW50U2hhZGVyfHx0aGlzLnNldFBvaW50U2hhZGVyKHRoaXMuX2dldFBvaW50U2hhZGVyKCkpLHRoaXMuY3VyUG9pbnRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VzZUltbWVkaWF0ZU1vZGVTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJGaWxsU2hhZGVyJiZ0aGlzLmN1ckZpbGxTaGFkZXIhPT10aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXJ8fHRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRJbW1lZGlhdGVNb2RlU2hhZGVyKCkpLHRoaXMuY3VyRmlsbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0TGlnaHRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdExpZ2h0U2hhZGVyfHwodGhpcy5hdHRyaWJ1dGVzLnBlclBpeGVsTGlnaHRpbmc/dGhpcy5fZGVmYXVsdExpZ2h0U2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcucGhvbmdWZXJ0LGcucGhvbmdGcmFnKTp0aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5saWdodFZlcnQsZy5saWdodFRleHR1cmVGcmFnKSksdGhpcy5fZGVmYXVsdExpZ2h0U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRJbW1lZGlhdGVNb2RlU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyfHwodGhpcy5fZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5pbW1lZGlhdGVWZXJ0LGcudmVydGV4Q29sb3JGcmFnKSksdGhpcy5fZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldE5vcm1hbFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0Tm9ybWFsU2hhZGVyfHwodGhpcy5fZGVmYXVsdE5vcm1hbFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLm5vcm1hbFZlcnQsZy5ub3JtYWxGcmFnKSksdGhpcy5fZGVmYXVsdE5vcm1hbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0Q29sb3JTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyfHwodGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcubm9ybWFsVmVydCxnLmJhc2ljRnJhZykpLHRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0UG9pbnRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFBvaW50U2hhZGVyfHwodGhpcy5fZGVmYXVsdFBvaW50U2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcucG9pbnRWZXJ0LGcucG9pbnRGcmFnKSksdGhpcy5fZGVmYXVsdFBvaW50U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRMaW5lU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRMaW5lU2hhZGVyfHwodGhpcy5fZGVmYXVsdExpbmVTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5saW5lVmVydCxnLmxpbmVGcmFnKSksdGhpcy5fZGVmYXVsdExpbmVTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldEZvbnRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTaGFkZXJ8fCh0aGlzLkdMLmdldEV4dGVuc2lvbihcIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlc1wiKSx0aGlzLl9kZWZhdWx0Rm9udFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLmZvbnRWZXJ0LGcuZm9udEZyYWcpKSx0aGlzLl9kZWZhdWx0Rm9udFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0RW1wdHlUZXh0dXJlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2VtcHR5VGV4dHVyZSl7dmFyIGE9bmV3IGQuSW1hZ2UoMSwxKTthLnNldCgwLDAsMjU1KSx0aGlzLl9lbXB0eVRleHR1cmU9bmV3IGQuVGV4dHVyZSh0aGlzLGEpfXJldHVybiB0aGlzLl9lbXB0eVRleHR1cmV9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZ2V0VGV4dHVyZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy50ZXh0dXJlcyxjPTA7YzxiLmxlbmd0aDsrK2Mpe3ZhciBlPWJbY107aWYoZS5zcmM9PT1hKXJldHVybiBlfXZhciBmPW5ldyBkLlRleHR1cmUodGhpcyxhKTtyZXR1cm4gdGhpcy50ZXh0dXJlcy5wdXNoKGYpLGZ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2JpbmRCdWZmZXI9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZih0aGlzLkdMLmJpbmRCdWZmZXIoYixhKSx2b2lkIDAhPT1jKXt2YXIgZj1uZXcgZChjKTt0aGlzLkdMLmJ1ZmZlckRhdGEoYixmLGUpfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zbW9vdGg9ZnVuY3Rpb24oKXshMT09PXRoaXMuYXR0cmlidXRlcy5hbnRpYWxpYXMmJnRoaXMuX3BJbnN0LnNldEF0dHJpYnV0ZXMoXCJhbnRpYWxpYXNcIiwhMCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUubm9TbW9vdGg9ZnVuY3Rpb24oKXshMD09PXRoaXMuYXR0cmlidXRlcy5hbnRpYWxpYXMmJnRoaXMuX3BJbnN0LnNldEF0dHJpYnV0ZXMoXCJhbnRpYWxpYXNcIiwhMSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2ZsYXR0ZW49ZnVuY3Rpb24oYSl7aWYoMD09PWEubGVuZ3RoKXJldHVybltdO2lmKGEubGVuZ3RoPjJlNCl7dmFyIGIsYz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGQ9XCJbb2JqZWN0IEFycmF5XVwiLGU9W10sZj1hLnNsaWNlKCk7Yj1mLnBvcCgpO2Rve2MuY2FsbChiKT09PWQ/Zi5wdXNoLmFwcGx5KGYsYik6ZS5wdXNoKGIpfXdoaWxlKGYubGVuZ3RoJiZ2b2lkIDAhPT0oYj1mLnBvcCgpKSk7cmV0dXJuIGUucmV2ZXJzZSgpLGV9cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLGEpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl92VG9OQXJyYXk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2ZsYXR0ZW4oYS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuW2EueCxhLnksYS56XX0pKX0sZC5wcm90b3R5cGUuX2Fzc2VydDNkPWZ1bmN0aW9uKGEpe2lmKCF0aGlzLl9yZW5kZXJlci5pc1AzRCl0aHJvdyBuZXcgRXJyb3IoYStcIigpIGlzIG9ubHkgc3VwcG9ydGVkIGluIFdFQkdMIG1vZGUuIElmIHlvdSdkIGxpa2UgdG8gdXNlIDNEIGdyYXBoaWNzIGFuZCBXZWJHTCwgc2VlICBodHRwczovL3A1anMub3JnL2V4YW1wbGVzL2Zvcm0tM2QtcHJpbWl0aXZlcy5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5faW5pdFRlc3N5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe2JbYi5sZW5ndGhdPWFbMF0sYltiLmxlbmd0aF09YVsxXSxiW2IubGVuZ3RoXT1hWzJdfWZ1bmN0aW9uIGIoYSl7YSE9PWYucHJpbWl0aXZlVHlwZS5HTF9UUklBTkdMRVMmJmNvbnNvbGUubG9nKFwiZXhwZWN0ZWQgVFJJQU5HTEVTIGJ1dCBnb3QgdHlwZTogXCIrYSl9ZnVuY3Rpb24gYyhhKXtjb25zb2xlLmxvZyhcImVycm9yIGNhbGxiYWNrXCIpLGNvbnNvbGUubG9nKFwiZXJyb3IgbnVtYmVyOiBcIithKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm5bYVswXSxhWzFdLGFbMl1dfWZ1bmN0aW9uIGUoYSl7fXZhciBnPW5ldyBmLkdsdVRlc3NlbGF0b3I7cmV0dXJuIGcuZ2x1VGVzc0NhbGxiYWNrKGYuZ2x1RW51bS5HTFVfVEVTU19WRVJURVhfREFUQSxhKSxnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfQkVHSU4sYiksZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX0VSUk9SLGMpLGcuZ2x1VGVzc0NhbGxiYWNrKGYuZ2x1RW51bS5HTFVfVEVTU19DT01CSU5FLGQpLGcuZ2x1VGVzc0NhbGxiYWNrKGYuZ2x1RW51bS5HTFVfVEVTU19FREdFX0ZMQUcsZSksZ30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdHJpYW5ndWxhdGU9ZnVuY3Rpb24oYSl7dGhpcy5fdGVzc3kuZ2x1VGVzc05vcm1hbCgwLDAsMSk7dmFyIGI9W107dGhpcy5fdGVzc3kuZ2x1VGVzc0JlZ2luUG9seWdvbihiKTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl7dGhpcy5fdGVzc3kuZ2x1VGVzc0JlZ2luQ29udG91cigpO2Zvcih2YXIgZD1hW2NdLGU9MDtlPGQubGVuZ3RoO2UrPTMpe3ZhciBmPVtkW2VdLGRbZSsxXSxkW2UrMl1dO3RoaXMuX3Rlc3N5LmdsdVRlc3NWZXJ0ZXgoZixmKX10aGlzLl90ZXNzeS5nbHVUZXNzRW5kQ29udG91cigpfXJldHVybiB0aGlzLl90ZXNzeS5nbHVUZXNzRW5kUG9seWdvbigpLGJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2JlemllckNvZWZmaWNpZW50cz1mdW5jdGlvbihhKXt2YXIgYj1hKmEsYz1iKmEsZD0xLWEsZT1kKmQ7cmV0dXJuW2UqZCwzKmUqYSwzKmQqYixjXX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fcXVhZHJhdGljQ29lZmZpY2llbnRzPWZ1bmN0aW9uKGEpe3ZhciBiPWEqYSxjPTEtYTtyZXR1cm5bYypjLDIqYyphLGJdfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9iZXppZXJUb0NhdG11bGw9ZnVuY3Rpb24oYSl7cmV0dXJuW2FbMV0sYVsxXSsoYVsyXS1hWzBdKS90aGlzLl9jdXJ2ZVRpZ2h0bmVzcyxhWzJdLShhWzNdLWFbMV0pL3RoaXMuX2N1cnZlVGlnaHRuZXNzLGFbMl1dfSxiLmV4cG9ydHM9ZC5SZW5kZXJlckdMfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuLi9jb3JlL3A1LlJlbmRlcmVyXCI6MjcsXCIuL3A1LkNhbWVyYVwiOjY5LFwiLi9wNS5NYXRyaXhcIjo3MSxcIi4vcDUuU2hhZGVyXCI6NzUsbGlidGVzczo5fV0sNzU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuU2hhZGVyPWZ1bmN0aW9uKGEsYixjKXt0aGlzLl9yZW5kZXJlcj1hLHRoaXMuX3ZlcnRTcmM9Yix0aGlzLl9mcmFnU3JjPWMsdGhpcy5fdmVydFNoYWRlcj0tMSx0aGlzLl9mcmFnU2hhZGVyPS0xLHRoaXMuX2dsUHJvZ3JhbT0wLHRoaXMuX2xvYWRlZEF0dHJpYnV0ZXM9ITEsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMuX2xvYWRlZFVuaWZvcm1zPSExLHRoaXMudW5pZm9ybXM9e30sdGhpcy5fYm91bmQ9ITEsdGhpcy5zYW1wbGVycz1bXX0sZC5TaGFkZXIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5fZ2xQcm9ncmFtKXt2YXIgYT10aGlzLl9yZW5kZXJlci5HTDtpZih0aGlzLl92ZXJ0U2hhZGVyPWEuY3JlYXRlU2hhZGVyKGEuVkVSVEVYX1NIQURFUiksYS5zaGFkZXJTb3VyY2UodGhpcy5fdmVydFNoYWRlcix0aGlzLl92ZXJ0U3JjKSxhLmNvbXBpbGVTaGFkZXIodGhpcy5fdmVydFNoYWRlciksIWEuZ2V0U2hhZGVyUGFyYW1ldGVyKHRoaXMuX3ZlcnRTaGFkZXIsYS5DT01QSUxFX1NUQVRVUykpcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJZaWtlcyEgQW4gZXJyb3Igb2NjdXJyZWQgY29tcGlsaW5nIHRoZSB2ZXJ0ZXggc2hhZGVyOlwiK2EuZ2V0U2hhZGVySW5mb0xvZyh0aGlzLl92ZXJ0U2hhZGVyKSksbnVsbDtpZih0aGlzLl9mcmFnU2hhZGVyPWEuY3JlYXRlU2hhZGVyKGEuRlJBR01FTlRfU0hBREVSKSxhLnNoYWRlclNvdXJjZSh0aGlzLl9mcmFnU2hhZGVyLHRoaXMuX2ZyYWdTcmMpLGEuY29tcGlsZVNoYWRlcih0aGlzLl9mcmFnU2hhZGVyKSwhYS5nZXRTaGFkZXJQYXJhbWV0ZXIodGhpcy5fZnJhZ1NoYWRlcixhLkNPTVBJTEVfU1RBVFVTKSlyZXR1cm4gY29uc29sZS5lcnJvcihcIkRhcm4hIEFuIGVycm9yIG9jY3VycmVkIGNvbXBpbGluZyB0aGUgZnJhZ21lbnQgc2hhZGVyOlwiK2EuZ2V0U2hhZGVySW5mb0xvZyh0aGlzLl9mcmFnU2hhZGVyKSksbnVsbDt0aGlzLl9nbFByb2dyYW09YS5jcmVhdGVQcm9ncmFtKCksYS5hdHRhY2hTaGFkZXIodGhpcy5fZ2xQcm9ncmFtLHRoaXMuX3ZlcnRTaGFkZXIpLGEuYXR0YWNoU2hhZGVyKHRoaXMuX2dsUHJvZ3JhbSx0aGlzLl9mcmFnU2hhZGVyKSxhLmxpbmtQcm9ncmFtKHRoaXMuX2dsUHJvZ3JhbSksYS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMuX2dsUHJvZ3JhbSxhLkxJTktfU1RBVFVTKXx8Y29uc29sZS5lcnJvcihcIlNuYXAhIEVycm9yIGxpbmtpbmcgc2hhZGVyIHByb2dyYW06IFwiK2EuZ2V0UHJvZ3JhbUluZm9Mb2codGhpcy5fZ2xQcm9ncmFtKSksdGhpcy5fbG9hZEF0dHJpYnV0ZXMoKSx0aGlzLl9sb2FkVW5pZm9ybXMoKX1yZXR1cm4gdGhpc30sZC5TaGFkZXIucHJvdG90eXBlLl9sb2FkQXR0cmlidXRlcz1mdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWRBdHRyaWJ1dGVzKXt0aGlzLmF0dHJpYnV0ZXM9e307Zm9yKHZhciBhPXRoaXMuX3JlbmRlcmVyLkdMLGI9YS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMuX2dsUHJvZ3JhbSxhLkFDVElWRV9BVFRSSUJVVEVTKSxjPTA7YzxiOysrYyl7dmFyIGQ9YS5nZXRBY3RpdmVBdHRyaWIodGhpcy5fZ2xQcm9ncmFtLGMpLGU9ZC5uYW1lLGY9YS5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLl9nbFByb2dyYW0sZSksZz17fTtnLm5hbWU9ZSxnLmxvY2F0aW9uPWYsZy50eXBlPWQudHlwZSxnLnNpemU9ZC5zaXplLHRoaXMuYXR0cmlidXRlc1tlXT1nfXRoaXMuX2xvYWRlZEF0dHJpYnV0ZXM9ITB9fSxkLlNoYWRlci5wcm90b3R5cGUuX2xvYWRVbmlmb3Jtcz1mdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWRVbmlmb3Jtcyl7Zm9yKHZhciBhPXRoaXMuX3JlbmRlcmVyLkdMLGI9YS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMuX2dsUHJvZ3JhbSxhLkFDVElWRV9VTklGT1JNUyksYz0wLGQ9MDtkPGI7KytkKXt2YXIgZT1hLmdldEFjdGl2ZVVuaWZvcm0odGhpcy5fZ2xQcm9ncmFtLGQpLGY9e307Zi5sb2NhdGlvbj1hLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLl9nbFByb2dyYW0sZS5uYW1lKSxmLnNpemU9ZS5zaXplO3ZhciBnPWUubmFtZTtlLnNpemU+MSYmKGc9Zy5zdWJzdHJpbmcoMCxnLmluZGV4T2YoXCJbMF1cIikpKSxmLm5hbWU9ZyxmLnR5cGU9ZS50eXBlLGYudHlwZT09PWEuU0FNUExFUl8yRCYmKGYuc2FtcGxlckluZGV4PWMsYysrLHRoaXMuc2FtcGxlcnMucHVzaChmKSksdGhpcy51bmlmb3Jtc1tnXT1mfXRoaXMuX2xvYWRlZFVuaWZvcm1zPSEwfX0sZC5TaGFkZXIucHJvdG90eXBlLmNvbXBpbGU9ZnVuY3Rpb24oKXt9LGQuU2hhZGVyLnByb3RvdHlwZS5iaW5kU2hhZGVyPWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5fYm91bmR8fCh0aGlzLnVzZVByb2dyYW0oKSx0aGlzLl9ib3VuZD0hMCx0aGlzLmJpbmRUZXh0dXJlcygpLHRoaXMuX3NldE1hdHJpeFVuaWZvcm1zKCksdGhpcz09PXRoaXMuX3JlbmRlcmVyLmN1clN0cm9rZVNoYWRlciYmdGhpcy5fc2V0Vmlld3BvcnRVbmlmb3JtKCkpfSxkLlNoYWRlci5wcm90b3R5cGUudW5iaW5kU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvdW5kJiYodGhpcy51bmJpbmRUZXh0dXJlcygpLHRoaXMuX2JvdW5kPSExKSx0aGlzfSxkLlNoYWRlci5wcm90b3R5cGUuYmluZFRleHR1cmVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuX3JlbmRlcmVyLkdMLGI9MDtiPHRoaXMuc2FtcGxlcnMubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5zYW1wbGVyc1tiXSxkPWMudGV4dHVyZTt2b2lkIDA9PT1kJiYoZD10aGlzLl9yZW5kZXJlci5fZ2V0RW1wdHlUZXh0dXJlKCkpLGEuYWN0aXZlVGV4dHVyZShhLlRFWFRVUkUwK2Muc2FtcGxlckluZGV4KSxkLmJpbmRUZXh0dXJlKCksZC51cGRhdGUoKSxhLnVuaWZvcm0xaShjLmxvY2F0aW9uLGMuc2FtcGxlckluZGV4KX19LGQuU2hhZGVyLnByb3RvdHlwZS51cGRhdGVUZXh0dXJlcz1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8dGhpcy5zYW1wbGVycy5sZW5ndGg7YSsrKXt2YXIgYj10aGlzLnNhbXBsZXJzW2FdLGM9Yi50ZXh0dXJlO2MmJmMudXBkYXRlKCl9fSxkLlNoYWRlci5wcm90b3R5cGUudW5iaW5kVGV4dHVyZXM9ZnVuY3Rpb24oKXt9LGQuU2hhZGVyLnByb3RvdHlwZS5fc2V0TWF0cml4VW5pZm9ybXM9ZnVuY3Rpb24oKXt0aGlzLnNldFVuaWZvcm0oXCJ1UHJvamVjdGlvbk1hdHJpeFwiLHRoaXMuX3JlbmRlcmVyLnVQTWF0cml4Lm1hdDQpLHRoaXMuc2V0VW5pZm9ybShcInVNb2RlbFZpZXdNYXRyaXhcIix0aGlzLl9yZW5kZXJlci51TVZNYXRyaXgubWF0NCksdGhpcy5zZXRVbmlmb3JtKFwidVZpZXdNYXRyaXhcIix0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0KSx0aGlzPT09dGhpcy5fcmVuZGVyZXIuY3VyRmlsbFNoYWRlciYmKHRoaXMuX3JlbmRlcmVyLnVOTWF0cml4LmludmVyc2VUcmFuc3Bvc2UodGhpcy5fcmVuZGVyZXIudU1WTWF0cml4KSx0aGlzLnNldFVuaWZvcm0oXCJ1Tm9ybWFsTWF0cml4XCIsdGhpcy5fcmVuZGVyZXIudU5NYXRyaXgubWF0MykpfSxkLlNoYWRlci5wcm90b3R5cGUuX3NldFZpZXdwb3J0VW5pZm9ybT1mdW5jdGlvbigpe3RoaXMuc2V0VW5pZm9ybShcInVWaWV3cG9ydFwiLHRoaXMuX3JlbmRlcmVyLl92aWV3cG9ydCl9LGQuU2hhZGVyLnByb3RvdHlwZS51c2VQcm9ncmFtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLkdMLnVzZVByb2dyYW0odGhpcy5fZ2xQcm9ncmFtKSx0aGlzfSxkLlNoYWRlci5wcm90b3R5cGUuc2V0VW5pZm9ybT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMudW5pZm9ybXNbYV07aWYoYyl7dmFyIGQ9Yy5sb2NhdGlvbixlPXRoaXMuX3JlbmRlcmVyLkdMO3N3aXRjaCh0aGlzLnVzZVByb2dyYW0oKSxjLnR5cGUpe2Nhc2UgZS5CT09MOiEwPT09Yj9lLnVuaWZvcm0xaShkLDEpOmUudW5pZm9ybTFpKGQsMCk7YnJlYWs7Y2FzZSBlLklOVDpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtMWl2KGQsYik6ZS51bmlmb3JtMWkoZCxiKTticmVhaztjYXNlIGUuRkxPQVQ6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTFmdihkLGIpOmUudW5pZm9ybTFmKGQsYik7YnJlYWs7Y2FzZSBlLkZMT0FUX01BVDM6ZS51bmlmb3JtTWF0cml4M2Z2KGQsITEsYik7YnJlYWs7Y2FzZSBlLkZMT0FUX01BVDQ6ZS51bmlmb3JtTWF0cml4NGZ2KGQsITEsYik7YnJlYWs7Y2FzZSBlLkZMT0FUX1ZFQzI6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTJmdihkLGIpOmUudW5pZm9ybTJmKGQsYlswXSxiWzFdKTticmVhaztjYXNlIGUuRkxPQVRfVkVDMzpcbmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0zZnYoZCxiKTplLnVuaWZvcm0zZihkLGJbMF0sYlsxXSxiWzJdKTticmVhaztjYXNlIGUuRkxPQVRfVkVDNDpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtNGZ2KGQsYik6ZS51bmlmb3JtNGYoZCxiWzBdLGJbMV0sYlsyXSxiWzNdKTticmVhaztjYXNlIGUuSU5UX1ZFQzI6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTJpdihkLGIpOmUudW5pZm9ybTJpKGQsYlswXSxiWzFdKTticmVhaztjYXNlIGUuSU5UX1ZFQzM6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTNpdihkLGIpOmUudW5pZm9ybTNpKGQsYlswXSxiWzFdLGJbMl0pO2JyZWFrO2Nhc2UgZS5JTlRfVkVDNDpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtNGl2KGQsYik6ZS51bmlmb3JtNGkoZCxiWzBdLGJbMV0sYlsyXSxiWzNdKTticmVhaztjYXNlIGUuU0FNUExFUl8yRDplLmFjdGl2ZVRleHR1cmUoZS5URVhUVVJFMCtjLnNhbXBsZXJJbmRleCksYy50ZXh0dXJlPXRoaXMuX3JlbmRlcmVyLmdldFRleHR1cmUoYiksZS51bmlmb3JtMWkoYy5sb2NhdGlvbixjLnNhbXBsZXJJbmRleCl9cmV0dXJuIHRoaXN9fSxkLlNoYWRlci5wcm90b3R5cGUuaXNMaWdodFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVVc2VMaWdodGluZ3x8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51QW1iaWVudExpZ2h0Q291bnR8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudURpcmVjdGlvbmFsTGlnaHRDb3VudHx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51UG9pbnRMaWdodENvdW50fHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVBbWJpZW50Q29sb3J8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudURpcmVjdGlvbmFsQ29sb3J8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVBvaW50TGlnaHRMb2NhdGlvbnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51UG9pbnRMaWdodENvbG9yfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVMaWdodGluZ0RpcmVjdGlvbnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51U3BlY3VsYXJ9LGQuU2hhZGVyLnByb3RvdHlwZS5pc1RleHR1cmVTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zYW1wbGVySW5kZXg+MH0sZC5TaGFkZXIucHJvdG90eXBlLmlzQ29sb3JTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5hdHRyaWJ1dGVzLmFWZXJ0ZXhDb2xvcnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51TWF0ZXJpYWxDb2xvcn0sZC5TaGFkZXIucHJvdG90eXBlLmlzVGV4TGlnaHRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0xpZ2h0U2hhZGVyKCkmJnRoaXMuaXNUZXh0dXJlU2hhZGVyKCl9LGQuU2hhZGVyLnByb3RvdHlwZS5pc1N0cm9rZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVTdHJva2VXZWlnaHR9LGQuU2hhZGVyLnByb3RvdHlwZS5lbmFibGVBdHRyaWI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPXRoaXMuX3JlbmRlcmVyLkdMO3JldHVybi0xIT09YSYmKGcuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYSksZy52ZXJ0ZXhBdHRyaWJQb2ludGVyKGEsYixjLGQsZSxmKSksdGhpc30sYi5leHBvcnRzPWQuU2hhZGVyfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDc2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLlRleHR1cmU9ZnVuY3Rpb24oYSxiKXt0aGlzLl9yZW5kZXJlcj1hO3ZhciBjPXRoaXMuX3JlbmRlcmVyLkdMO3RoaXMuc3JjPWIsdGhpcy5nbFRleD12b2lkIDAsdGhpcy5nbFRhcmdldD1jLlRFWFRVUkVfMkQsdGhpcy5nbEZvcm1hdD1jLlJHQkEsdGhpcy5taXBtYXBzPSExLHRoaXMuZ2xNaW5GaWx0ZXI9Yy5MSU5FQVIsdGhpcy5nbE1hZ0ZpbHRlcj1jLkxJTkVBUix0aGlzLmdsV3JhcFM9Yy5DTEFNUF9UT19FREdFLHRoaXMuZ2xXcmFwVD1jLkNMQU1QX1RPX0VER0UsdGhpcy5pc1NyY01lZGlhRWxlbWVudD12b2lkIDAhPT1kLk1lZGlhRWxlbWVudCYmYiBpbnN0YW5jZW9mIGQuTWVkaWFFbGVtZW50LHRoaXMuX3ZpZGVvUHJldlVwZGF0ZVRpbWU9MCx0aGlzLmlzU3JjSFRNTEVsZW1lbnQ9dm9pZCAwIT09ZC5FbGVtZW50JiZiIGluc3RhbmNlb2YgZC5FbGVtZW50JiYhKGIgaW5zdGFuY2VvZiBkLkdyYXBoaWNzKSx0aGlzLmlzU3JjUDVJbWFnZT1iIGluc3RhbmNlb2YgZC5JbWFnZSx0aGlzLmlzU3JjUDVHcmFwaGljcz1iIGluc3RhbmNlb2YgZC5HcmFwaGljcyx0aGlzLmlzSW1hZ2VEYXRhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBJbWFnZURhdGEmJmIgaW5zdGFuY2VvZiBJbWFnZURhdGE7dmFyIGU9dGhpcy5fZ2V0VGV4dHVyZURhdGFGcm9tU291cmNlKCk7cmV0dXJuIHRoaXMud2lkdGg9ZS53aWR0aCx0aGlzLmhlaWdodD1lLmhlaWdodCx0aGlzLmluaXQoZSksdGhpc30sZC5UZXh0dXJlLnByb3RvdHlwZS5fZ2V0VGV4dHVyZURhdGFGcm9tU291cmNlPWZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIHRoaXMuaXNTcmNQNUltYWdlP2E9dGhpcy5zcmMuY2FudmFzOnRoaXMuaXNTcmNNZWRpYUVsZW1lbnR8fHRoaXMuaXNTcmNQNUdyYXBoaWNzfHx0aGlzLmlzU3JjSFRNTEVsZW1lbnQ/YT10aGlzLnNyYy5lbHQ6dGhpcy5pc0ltYWdlRGF0YSYmKGE9dGhpcy5zcmMpLGF9LGQuVGV4dHVyZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9yZW5kZXJlci5HTDtpZih0aGlzLmdsVGV4PWIuY3JlYXRlVGV4dHVyZSgpLHRoaXMuYmluZFRleHR1cmUoKSxiLnRleFBhcmFtZXRlcmkoYi5URVhUVVJFXzJELGIuVEVYVFVSRV9NQUdfRklMVEVSLHRoaXMuZ2xNYWdGaWx0ZXIpLGIudGV4UGFyYW1ldGVyaShiLlRFWFRVUkVfMkQsYi5URVhUVVJFX01JTl9GSUxURVIsdGhpcy5nbE1pbkZpbHRlciksYi50ZXhQYXJhbWV0ZXJpKGIuVEVYVFVSRV8yRCxiLlRFWFRVUkVfV1JBUF9TLHRoaXMuZ2xXcmFwUyksYi50ZXhQYXJhbWV0ZXJpKGIuVEVYVFVSRV8yRCxiLlRFWFRVUkVfV1JBUF9ULHRoaXMuZ2xXcmFwVCksMD09PXRoaXMud2lkdGh8fDA9PT10aGlzLmhlaWdodHx8dGhpcy5pc1NyY01lZGlhRWxlbWVudCYmIXRoaXMuc3JjLmxvYWRlZG1ldGFkYXRhKXt2YXIgYz1uZXcgVWludDhBcnJheShbMSwxLDEsMV0pO2IudGV4SW1hZ2UyRCh0aGlzLmdsVGFyZ2V0LDAsYi5SR0JBLDEsMSwwLHRoaXMuZ2xGb3JtYXQsYi5VTlNJR05FRF9CWVRFLGMpfWVsc2UgYi50ZXhJbWFnZTJEKHRoaXMuZ2xUYXJnZXQsMCx0aGlzLmdsRm9ybWF0LHRoaXMuZ2xGb3JtYXQsYi5VTlNJR05FRF9CWVRFLGEpfSxkLlRleHR1cmUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuc3JjO2lmKDA9PT1hLndpZHRofHwwPT09YS5oZWlnaHQpcmV0dXJuITE7dmFyIGI9dGhpcy5fZ2V0VGV4dHVyZURhdGFGcm9tU291cmNlKCksYz0hMSxkPXRoaXMuX3JlbmRlcmVyLkdMO3JldHVybiBiLndpZHRoIT09dGhpcy53aWR0aHx8Yi5oZWlnaHQhPT10aGlzLmhlaWdodD8oYz0hMCx0aGlzLndpZHRoPWIud2lkdGgsdGhpcy5oZWlnaHQ9Yi5oZWlnaHQsdGhpcy5pc1NyY1A1SW1hZ2U/YS5zZXRNb2RpZmllZCghMSk6KHRoaXMuaXNTcmNNZWRpYUVsZW1lbnR8fHRoaXMuaXNTcmNIVE1MRWxlbWVudCkmJmEuc2V0TW9kaWZpZWQoITApKTp0aGlzLmlzU3JjUDVJbWFnZT9hLmlzTW9kaWZpZWQoKSYmKGM9ITAsYS5zZXRNb2RpZmllZCghMSkpOnRoaXMuaXNTcmNNZWRpYUVsZW1lbnQ/YS5pc01vZGlmaWVkKCk/KGM9ITAsYS5zZXRNb2RpZmllZCghMSkpOmEubG9hZGVkbWV0YWRhdGEmJnRoaXMuX3ZpZGVvUHJldlVwZGF0ZVRpbWUhPT1hLnRpbWUoKSYmKHRoaXMuX3ZpZGVvUHJldlVwZGF0ZVRpbWU9YS50aW1lKCksYz0hMCk6dGhpcy5pc0ltYWdlRGF0YT9hLl9kaXJ0eSYmKGEuX2RpcnR5PSExLGM9ITApOmM9ITAsYyYmKHRoaXMuYmluZFRleHR1cmUoKSxkLnRleEltYWdlMkQodGhpcy5nbFRhcmdldCwwLHRoaXMuZ2xGb3JtYXQsdGhpcy5nbEZvcm1hdCxkLlVOU0lHTkVEX0JZVEUsYikpLGN9LGQuVGV4dHVyZS5wcm90b3R5cGUuYmluZFRleHR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuR0wuYmluZFRleHR1cmUodGhpcy5nbFRhcmdldCx0aGlzLmdsVGV4KSx0aGlzfSxkLlRleHR1cmUucHJvdG90eXBlLnVuYmluZFRleHR1cmU9ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5HTC5iaW5kVGV4dHVyZSh0aGlzLmdsVGFyZ2V0LG51bGwpfSxkLlRleHR1cmUucHJvdG90eXBlLnNldEludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9yZW5kZXJlci5HTDthPT09ZS5ORUFSRVNUP3RoaXMuZ2xNaW5GaWx0ZXI9Yy5ORUFSRVNUOnRoaXMuZ2xNaW5GaWx0ZXI9Yy5MSU5FQVIsYj09PWUuTkVBUkVTVD90aGlzLmdsTWFnRmlsdGVyPWMuTkVBUkVTVDp0aGlzLmdsTWFnRmlsdGVyPWMuTElORUFSLHRoaXMuYmluZFRleHR1cmUoKSxjLnRleFBhcmFtZXRlcmkoYy5URVhUVVJFXzJELGMuVEVYVFVSRV9NSU5fRklMVEVSLHRoaXMuZ2xNaW5GaWx0ZXIpLGMudGV4UGFyYW1ldGVyaShjLlRFWFRVUkVfMkQsYy5URVhUVVJFX01BR19GSUxURVIsdGhpcy5nbE1hZ0ZpbHRlciksdGhpcy51bmJpbmRUZXh0dXJlKCl9LGQuVGV4dHVyZS5wcm90b3R5cGUuc2V0V3JhcE1vZGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9yZW5kZXJlci5HTCxkPWZ1bmN0aW9uKGEpe3JldHVybiAwPT0oYSZhLTEpfSxmPWQodGhpcy53aWR0aCksZz1kKHRoaXMud2lkdGgpO2E9PT1lLlJFUEVBVD9mJiZnP3RoaXMuZ2xXcmFwUz1jLlJFUEVBVDooY29uc29sZS53YXJuKFwiWW91IHRyaWVkIHRvIHNldCB0aGUgd3JhcCBtb2RlIHRvIFJFUEVBVCBidXQgdGhlIHRleHR1cmUgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uIFNldHRpbmcgdG8gQ0xBTVAgaW5zdGVhZFwiKSx0aGlzLmdsV3JhcFM9Yy5DTEFNUF9UT19FREdFKTphPT09ZS5NSVJST1I/ZiYmZz90aGlzLmdsV3JhcFM9Yy5NSVJST1JFRF9SRVBFQVQ6KGNvbnNvbGUud2FybihcIllvdSB0cmllZCB0byBzZXQgdGhlIHdyYXAgbW9kZSB0byBNSVJST1IgYnV0IHRoZSB0ZXh0dXJlIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgdHdvLiBTZXR0aW5nIHRvIENMQU1QIGluc3RlYWRcIiksdGhpcy5nbFdyYXBTPWMuQ0xBTVBfVE9fRURHRSk6dGhpcy5nbFdyYXBTPWMuQ0xBTVBfVE9fRURHRSxiPT09ZS5SRVBFQVQ/ZiYmZz90aGlzLmdsV3JhcFQ9Yy5SRVBFQVQ6KGNvbnNvbGUud2FybihcIllvdSB0cmllZCB0byBzZXQgdGhlIHdyYXAgbW9kZSB0byBSRVBFQVQgYnV0IHRoZSB0ZXh0dXJlIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgdHdvLiBTZXR0aW5nIHRvIENMQU1QIGluc3RlYWRcIiksdGhpcy5nbFdyYXBUPWMuQ0xBTVBfVE9fRURHRSk6Yj09PWUuTUlSUk9SP2YmJmc/dGhpcy5nbFdyYXBUPWMuTUlSUk9SRURfUkVQRUFUOihjb25zb2xlLndhcm4oXCJZb3UgdHJpZWQgdG8gc2V0IHRoZSB3cmFwIG1vZGUgdG8gTUlSUk9SIGJ1dCB0aGUgdGV4dHVyZSBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIHR3by4gU2V0dGluZyB0byBDTEFNUCBpbnN0ZWFkXCIpLHRoaXMuZ2xXcmFwVD1jLkNMQU1QX1RPX0VER0UpOnRoaXMuZ2xXcmFwVD1jLkNMQU1QX1RPX0VER0UsdGhpcy5iaW5kVGV4dHVyZSgpLGMudGV4UGFyYW1ldGVyaShjLlRFWFRVUkVfMkQsYy5URVhUVVJFX1dSQVBfUyx0aGlzLmdsV3JhcFMpLGMudGV4UGFyYW1ldGVyaShjLlRFWFRVUkVfMkQsYy5URVhUVVJFX1dSQVBfVCx0aGlzLmdsV3JhcFQpLHRoaXMudW5iaW5kVGV4dHVyZSgpfSxiLmV4cG9ydHM9ZC5UZXh0dXJlfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw3NzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiKXt0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yix0aGlzLmluZm9zPVtdLHRoaXMuZmluZEltYWdlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMud2lkdGgqdGhpcy5oZWlnaHQ7aWYoYT5iKXRocm93IG5ldyBFcnJvcihcImZvbnQgaXMgdG9vIGNvbXBsZXggdG8gcmVuZGVyIGluIDNEXCIpO2Zvcih2YXIgYyxkLGU9dGhpcy5pbmZvcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIGY9dGhpcy5pbmZvc1tlXTtpZihmLmluZGV4K2E8Yil7Yz1mLGQ9Zi5pbWFnZURhdGE7YnJlYWt9fWlmKCFjKXt0cnl7ZD1uZXcgSW1hZ2VEYXRhKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfWNhdGNoKGEpe3ZhciBnPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiY2FudmFzXCIpWzBdLGg9IWc7Z3x8KGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxnLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChnKSk7dmFyIGk9Zy5nZXRDb250ZXh0KFwiMmRcIik7aSYmKGQ9aS5jcmVhdGVJbWFnZURhdGEodGhpcy53aWR0aCx0aGlzLmhlaWdodCkpLGgmJmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZyl9Yz17aW5kZXg6MCxpbWFnZURhdGE6ZH0sdGhpcy5pbmZvcy5wdXNoKGMpfXZhciBqPWMuaW5kZXg7cmV0dXJuIGMuaW5kZXgrPWEsZC5fZGlydHk9ITAse2ltYWdlRGF0YTpkLGluZGV4Omp9fX1mdW5jdGlvbiBlKGEsYixjLGQsZSl7dmFyIGY9YS5pbWFnZURhdGEsZz1mLmRhdGEsaD00KmEuaW5kZXgrKztnW2grK109YixnW2grK109YyxnW2grK109ZCxnW2grK109ZX12YXIgZj1hKFwiLi4vY29yZS9tYWluXCIpLGc9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuL3A1LlNoYWRlclwiKSxhKFwiLi9wNS5SZW5kZXJlckdMXCIpLGYuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2FwcGx5VGV4dFByb3BlcnRpZXM9ZnVuY3Rpb24oKXt9LGYuUmVuZGVyZXJHTC5wcm90b3R5cGUudGV4dFdpZHRoPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9pc09wZW5UeXBlKCk/dGhpcy5fdGV4dEZvbnQuX3RleHRXaWR0aChhLHRoaXMuX3RleHRTaXplKTowfTt2YXIgaD05LGk9aCxqPTY0LGs9NjQsbD02NCxtPTY0LG49NjQsbz02NCxwPU1hdGguc3FydCgzKSxxPWZ1bmN0aW9uKGEpe3RoaXMuZm9udD1hLHRoaXMuc3Ryb2tlSW1hZ2VJbmZvcz1uZXcgZChqLGspLHRoaXMuY29sRGltSW1hZ2VJbmZvcz1uZXcgZChsLG0pLHRoaXMucm93RGltSW1hZ2VJbmZvcz1uZXcgZChsLG0pLHRoaXMuY29sQ2VsbEltYWdlSW5mb3M9bmV3IGQobixvKSx0aGlzLnJvd0NlbGxJbWFnZUluZm9zPW5ldyBkKG4sbyksdGhpcy5nbHlwaEluZm9zPXt9LHRoaXMuZ2V0R2x5cGhJbmZvPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiLGMpe2Z1bmN0aW9uIGQoYSxiLGMpe2Zvcih2YXIgZD1hLmxlbmd0aDtkLS0gPjA7KXt2YXIgZT1hW2RdO2I+ZSYmKGI9ZSksYzxlJiYoYz1lKX1yZXR1cm57bWluOmIsbWF4OmN9fXZhciBlPXcubGVuZ3RoO3cucHVzaChjKTtmb3IodmFyIGY9ZChhLDEsMCksZz1NYXRoLm1heChNYXRoLmZsb29yKGYubWluKmgpLDApLGo9TWF0aC5taW4oTWF0aC5jZWlsKGYubWF4KmgpLGgpLGs9ZztrPGo7KytrKXlba10ucHVzaChlKTtmb3IodmFyIGw9ZChiLDEsMCksbT1NYXRoLm1heChNYXRoLmZsb29yKGwubWluKmkpLDApLG49TWF0aC5taW4oTWF0aC5jZWlsKGwubWF4KmkpLGkpLG89bTtvPG47KytvKXhbb10ucHVzaChlKX1mdW5jdGlvbiBjKGEsYixjKXtyZXR1cm4gYTxiP2I6YT5jP2M6YX1mdW5jdGlvbiBkKGEpe3JldHVybiBjKDI1NSphLDAsMjU1KX1mdW5jdGlvbiBnKGEsYixjLGQpe3RoaXMucDA9YSx0aGlzLmMwPWIsdGhpcy5jMT1jLHRoaXMucDE9ZCx0aGlzLnRvUXVhZHJhdGljPWZ1bmN0aW9uKCl7cmV0dXJue3g6dGhpcy5wMC54LHk6dGhpcy5wMC55LHgxOnRoaXMucDEueCx5MTp0aGlzLnAxLnksY3g6KDMqKHRoaXMuYzAueCt0aGlzLmMxLngpLSh0aGlzLnAwLngrdGhpcy5wMS54KSkvNCxjeTooMyoodGhpcy5jMC55K3RoaXMuYzEueSktKHRoaXMucDAueSt0aGlzLnAxLnkpKS80fX0sdGhpcy5xdWFkRXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gZi5WZWN0b3Iuc3ViKGYuVmVjdG9yLnN1Yih0aGlzLnAxLHRoaXMucDApLGYuVmVjdG9yLm11bHQoZi5WZWN0b3Iuc3ViKHRoaXMuYzEsdGhpcy5jMCksMykpLm1hZygpLzJ9LHRoaXMuc3BsaXQ9ZnVuY3Rpb24oYSl7dmFyIGI9Zi5WZWN0b3IubGVycCh0aGlzLnAwLHRoaXMuYzAsYSksYz1mLlZlY3Rvci5sZXJwKHRoaXMuYzAsdGhpcy5jMSxhKSxkPWYuVmVjdG9yLmxlcnAoYixjLGEpO3RoaXMuYzE9Zi5WZWN0b3IubGVycCh0aGlzLmMxLHRoaXMucDEsYSksdGhpcy5jMD1mLlZlY3Rvci5sZXJwKGMsdGhpcy5jMSxhKTt2YXIgZT1mLlZlY3Rvci5sZXJwKGQsdGhpcy5jMCxhKSxoPW5ldyBnKHRoaXMucDAsYixkLGUpO3JldHVybiB0aGlzLnAwPWUsaH0sdGhpcy5zcGxpdEluZmxlY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIGE9Zi5WZWN0b3Iuc3ViKHRoaXMuYzAsdGhpcy5wMCksYj1mLlZlY3Rvci5zdWIoZi5WZWN0b3Iuc3ViKHRoaXMuYzEsdGhpcy5jMCksYSksYz1mLlZlY3Rvci5zdWIoZi5WZWN0b3Iuc3ViKGYuVmVjdG9yLnN1Yih0aGlzLnAxLHRoaXMuYzEpLGEpLGYuVmVjdG9yLm11bHQoYiwyKSksZD1bXSxlPWIueCpjLnktYi55KmMueDtpZigwIT09ZSl7dmFyIGc9YS54KmMueS1hLnkqYy54LGg9YS54KmIueS1hLnkqYi54LGk9ZypnLTQqZSpoO2lmKGk+PTApe2U8MCYmKGU9LWUsZz0tZyxoPS1oKTt2YXIgaj1NYXRoLnNxcnQoaSksaz0oLWctaikvKDIqZSksbD0oLWcraikvKDIqZSk7az4wJiZrPDEmJihkLnB1c2godGhpcy5zcGxpdChrKSksbD0xLSgxLWwpLygxLWspKSxsPjAmJmw8MSYmZC5wdXNoKHRoaXMuc3BsaXQobCkpfX1yZXR1cm4gZC5wdXNoKHRoaXMpLGR9fWZ1bmN0aW9uIGooYSxiLGMsZCxlLGgsaSxqKXtmb3IodmFyIGs9bmV3IGcobmV3IGYuVmVjdG9yKGEsYiksbmV3IGYuVmVjdG9yKGMsZCksbmV3IGYuVmVjdG9yKGUsaCksbmV3IGYuVmVjdG9yKGksaikpLnNwbGl0SW5mbGVjdGlvbnMoKSxsPVtdLG09MzAvcCxuPTA7bjxrLmxlbmd0aDtuKyspe2Zvcih2YXIgbyxxPWtbbl0scj1bXTshKChvPW0vcS5xdWFkRXJyb3IoKSk+PS4xMjUpOyl7dmFyIHM9TWF0aC5wb3cobywxLzMpLHQ9cS5zcGxpdChzKSx1PXEuc3BsaXQoMS1zLygxLXMpKTtsLnB1c2godCksci5wdXNoKHEpLHE9dX1vPDEmJmwucHVzaChxLnNwbGl0KC41KSksbC5wdXNoKHEpLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGwsci5yZXZlcnNlKCkpfXJldHVybiBsfWZ1bmN0aW9uIGsoYSxjLGQsZSl7YihbYSxkXSxbYyxlXSx7eDphLHk6YyxjeDooYStkKS8yLGN5OihjK2UpLzJ9KX1mdW5jdGlvbiBsKGEsYixjLGQpe3JldHVybiBNYXRoLmFicyhjLWEpPDFlLTUmJk1hdGguYWJzKGQtYik8MWUtNX1mdW5jdGlvbiBtKGEsYixjKXtmb3IodmFyIGQ9YS5sZW5ndGgsZj1iLmZpbmRJbWFnZShkKSxnPWYuaW5kZXgsaD0wLGk9MDtpPGQ7KytpKWgrPWFbaV0ubGVuZ3RoO2Zvcih2YXIgaj1jLmZpbmRJbWFnZShoKSxrPTA7azxkOysrayl7dmFyIGw9YVtrXSxtPWwubGVuZ3RoLG49ai5pbmRleDtlKGYsbj4+NywxMjcmbixtPj43LDEyNyZtKTtmb3IodmFyIG89MDtvPG07KytvKXt2YXIgcD1sW29dK1M7ZShqLHA+PjcsMTI3JnAsMCwwKX19cmV0dXJue2NlbGxJbWFnZUluZm86aixkaW1PZmZzZXQ6ZyxkaW1JbWFnZUluZm86Zn19dmFyIG49dGhpcy5nbHlwaEluZm9zW2EuaW5kZXhdO2lmKG4pcmV0dXJuIG47dmFyIG89YS5nZXRCb3VuZGluZ0JveCgpLHE9by54MSxyPW8ueTEscz1vLngyLXEsdD1vLnkyLXIsdT1hLnBhdGguY29tbWFuZHM7aWYoMD09PXN8fDA9PT10fHwhdS5sZW5ndGgpcmV0dXJuIHRoaXMuZ2x5cGhJbmZvc1thLmluZGV4XT17fTt2YXIgdix3PVtdLHg9W10seT1bXTtmb3Iodj1oLTE7dj49MDstLXYpeS5wdXNoKFtdKTtmb3Iodj1pLTE7dj49MDstLXYpeC5wdXNoKFtdKTtmb3IodmFyIHosQSxCLEMsRD0wO0Q8dS5sZW5ndGg7KytEKXt2YXIgRT11W0RdLEY9KEUueC1xKS9zLEc9KEUueS1yKS90O2lmKCFsKHosQSxGLEcpKXtzd2l0Y2goRS50eXBlKXtjYXNlXCJNXCI6Qj1GLEM9RzticmVhaztjYXNlXCJMXCI6ayh6LEEsRixHKTticmVhaztjYXNlXCJRXCI6dmFyIEg9KEUueDEtcSkvcyxJPShFLnkxLXIpL3Q7YihbeixGLEhdLFtBLEcsSV0se3g6eix5OkEsY3g6SCxjeTpJfSk7YnJlYWs7Y2FzZVwiWlwiOmwoeixBLEIsQyk/dy5wdXNoKHt4OnoseTpBfSk6KGsoeixBLEIsQyksdy5wdXNoKHt4OkIseTpDfSkpO2JyZWFrO2Nhc2VcIkNcIjpmb3IodmFyIEo9KEUueDEtcSkvcyxLPShFLnkxLXIpL3QsTD0oRS54Mi1xKS9zLE09KEUueTItcikvdCxOPWooeixBLEosSyxMLE0sRixHKSxPPTA7TzxOLmxlbmd0aDtPKyspe3ZhciBQPU5bT10udG9RdWFkcmF0aWMoKTtiKFtQLngsUC54MSxQLmN4XSxbUC55LFAueTEsUC5jeV0sUCl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGNvbW1hbmQgdHlwZTogXCIrRS50eXBlKX16PUYsQT1HfX1mb3IodmFyIFE9dy5sZW5ndGgsUj10aGlzLnN0cm9rZUltYWdlSW5mb3MuZmluZEltYWdlKFEpLFM9Ui5pbmRleCxUPTA7VDxROysrVCl7dmFyIFU9d1tUXTtlKFIsZChVLngpLGQoVS55KSxkKFUuY3gpLGQoVS5jeSkpfXJldHVybiBuPXRoaXMuZ2x5cGhJbmZvc1thLmluZGV4XT17Z2x5cGg6YSx1R2x5cGhSZWN0OltvLngxLC1vLnkxLG8ueDIsLW8ueTJdLHN0cm9rZUltYWdlSW5mbzpSLHN0cm9rZXM6dyxjb2xJbmZvOm0oeSx0aGlzLmNvbERpbUltYWdlSW5mb3MsdGhpcy5jb2xDZWxsSW1hZ2VJbmZvcykscm93SW5mbzptKHgsdGhpcy5yb3dEaW1JbWFnZUluZm9zLHRoaXMucm93Q2VsbEltYWdlSW5mb3MpfSxuLnVHcmlkT2Zmc2V0PVtuLmNvbEluZm8uZGltT2Zmc2V0LG4ucm93SW5mby5kaW1PZmZzZXRdLG59fTtmLlJlbmRlcmVyR0wucHJvdG90eXBlLl9yZW5kZXJUZXh0PWZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoIShkPj1lKSYmdGhpcy5fZG9GaWxsKXtpZighdGhpcy5faXNPcGVuVHlwZSgpKXJldHVybiBjb25zb2xlLmxvZyhcIldFQkdMOiBvbmx5IG9wZW50eXBlIGZvbnRzIGFyZSBzdXBwb3J0ZWRcIiksYTthLnB1c2goKTt2YXIgcD10aGlzLmN1ckZpbGxTaGFkZXIscj10aGlzLl9kb1N0cm9rZSxzPXRoaXMuZHJhd01vZGU7dGhpcy5jdXJGaWxsU2hhZGVyPW51bGwsdGhpcy5fZG9TdHJva2U9ITEsdGhpcy5kcmF3TW9kZT1nLlRFWFRVUkU7dmFyIHQ9dGhpcy5fdGV4dEZvbnQuZm9udCx1PXRoaXMuX3RleHRGb250Ll9mb250SW5mbzt1fHwodT10aGlzLl90ZXh0Rm9udC5fZm9udEluZm89bmV3IHEodCkpO3ZhciB2PXRoaXMuX3RleHRGb250Ll9oYW5kbGVBbGlnbm1lbnQodGhpcyxiLGMsZCksdz10aGlzLl90ZXh0U2l6ZSx4PXcvdC51bml0c1BlckVtO3RoaXMudHJhbnNsYXRlKHYueCx2LnksMCksdGhpcy5zY2FsZSh4LHgsMSk7dmFyIHk9dGhpcy5HTCx6PSF0aGlzLl9kZWZhdWx0Rm9udFNoYWRlcixBPXRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRGb250U2hhZGVyKCkpO3omJihBLnNldFVuaWZvcm0oXCJ1R3JpZEltYWdlU2l6ZVwiLFtsLG1dKSxBLnNldFVuaWZvcm0oXCJ1Q2VsbHNJbWFnZVNpemVcIixbbixvXSksQS5zZXRVbmlmb3JtKFwidVN0cm9rZUltYWdlU2l6ZVwiLFtqLGtdKSxBLnNldFVuaWZvcm0oXCJ1R3JpZFNpemVcIixbaCxpXSkpLHRoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1ckZpbGxDb2xvcik7dmFyIEI9dGhpcy5nSGFzaC5nbHlwaDtpZighQil7dmFyIEM9dGhpcy5fdGV4dEdlb209bmV3IGYuR2VvbWV0cnkoMSwxLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTw9MTthKyspZm9yKHZhciBiPTA7Yjw9MTtiKyspdGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBmLlZlY3RvcihiLGEsMCkpLHRoaXMudXZzLnB1c2goYixhKX0pO0MuY29tcHV0ZUZhY2VzKCkuY29tcHV0ZU5vcm1hbHMoKSxCPXRoaXMuY3JlYXRlQnVmZmVycyhcImdseXBoXCIsQyl9dGhpcy5fYmluZEJ1ZmZlcihCLnZlcnRleEJ1ZmZlcix5LkFSUkFZX0JVRkZFUiksQS5lbmFibGVBdHRyaWIoQS5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLHkuRkxPQVQsITEsMCwwKSx0aGlzLl9iaW5kQnVmZmVyKEIuaW5kZXhCdWZmZXIseS5FTEVNRU5UX0FSUkFZX0JVRkZFUiksdGhpcy5fYmluZEJ1ZmZlcihCLnV2QnVmZmVyLHkuQVJSQVlfQlVGRkVSKSxBLmVuYWJsZUF0dHJpYihBLmF0dHJpYnV0ZXMuYVRleENvb3JkLmxvY2F0aW9uLDIseS5GTE9BVCwhMSwwLDApLEEuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5jdXJGaWxsQ29sb3IpO3RyeXtmb3IodmFyIEQ9MCxFPW51bGwsRj0hMSxHPXQuc3RyaW5nVG9HbHlwaHMoYiksSD0wO0g8Ry5sZW5ndGg7KytIKXt2YXIgST1HW0hdO0UmJihEKz10LmdldEtlcm5pbmdWYWx1ZShFLEkpKTt2YXIgSj11LmdldEdseXBoSW5mbyhJKTtpZihKLnVHbHlwaFJlY3Qpe3ZhciBLPUoucm93SW5mbyxMPUouY29sSW5mbztBLnNldFVuaWZvcm0oXCJ1U2FtcGxlclN0cm9rZXNcIixKLnN0cm9rZUltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVTYW1wbGVyUm93U3Ryb2tlc1wiLEsuY2VsbEltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVTYW1wbGVyUm93c1wiLEsuZGltSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidVNhbXBsZXJDb2xTdHJva2VzXCIsTC5jZWxsSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidVNhbXBsZXJDb2xzXCIsTC5kaW1JbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1R3JpZE9mZnNldFwiLEoudUdyaWRPZmZzZXQpLEEuc2V0VW5pZm9ybShcInVHbHlwaFJlY3RcIixKLnVHbHlwaFJlY3QpLEEuc2V0VW5pZm9ybShcInVHbHlwaE9mZnNldFwiLEQpLEY/QS5iaW5kVGV4dHVyZXMoKTooRj0hMCxBLmJpbmRTaGFkZXIoKSkseS5kcmF3RWxlbWVudHMoeS5UUklBTkdMRVMsNix0aGlzLkdMLlVOU0lHTkVEX1NIT1JULDApfUQrPUkuYWR2YW5jZVdpZHRoLEU9SX19ZmluYWxseXtBLnVuYmluZFNoYWRlcigpLHRoaXMuY3VyRmlsbFNoYWRlcj1wLHRoaXMuX2RvU3Ryb2tlPXIsdGhpcy5kcmF3TW9kZT1zLGEucG9wKCl9cmV0dXJuIHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCxhfX19LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vcDUuUmVuZGVyZXJHTFwiOjc0LFwiLi9wNS5TaGFkZXJcIjo3NX1dfSx7fSxbMTNdKSgxMyl9KTsiLCIvKipcbiAqICBTdGFydEF1ZGlvQ29udGV4dC5qc1xuICogIEBhdXRob3IgWW90YW0gTWFublxuICogIEBsaWNlbnNlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQgTUlUIExpY2Vuc2VcbiAqICBAY29weXJpZ2h0IDIwMTYgWW90YW0gTWFublxuICovXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KVxuXHQgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpXG5cdH0gZWxzZSB7XG5cdFx0cm9vdC5TdGFydEF1ZGlvQ29udGV4dCA9IGZhY3RvcnkoKVxuICB9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuXHQvL1RBUCBMSVNURU5FUi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXHQvKipcblx0ICogQGNsYXNzICBMaXN0ZW5zIGZvciBub24tZHJhZ2dpbmcgdGFwIGVuZHMgb24gdGhlIGdpdmVuIGVsZW1lbnRcblx0ICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0dmFyIFRhcExpc3RlbmVyID0gZnVuY3Rpb24oZWxlbWVudCwgY29udGV4dCl7XG5cblx0XHR0aGlzLl9kcmFnZ2VkID0gZmFsc2VcblxuXHRcdHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50XG5cblx0XHR0aGlzLl9iaW5kZWRNb3ZlID0gdGhpcy5fbW92ZWQuYmluZCh0aGlzKVxuXHRcdHRoaXMuX2JpbmRlZEVuZCA9IHRoaXMuX2VuZGVkLmJpbmQodGhpcywgY29udGV4dClcblxuXHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIiwgdGhpcy5fYmluZGVkRW5kKVxuXHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLCB0aGlzLl9iaW5kZWRNb3ZlKVxuXHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIHRoaXMuX2JpbmRlZEVuZClcblx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMuX2JpbmRlZEVuZClcblx0fVxuXG5cdC8qKlxuXHQgKiBkcmFnIG1vdmUgZXZlbnRcblx0ICovXG5cdFRhcExpc3RlbmVyLnByb3RvdHlwZS5fbW92ZWQgPSBmdW5jdGlvbihlKXtcblx0XHR0aGlzLl9kcmFnZ2VkID0gdHJ1ZVxuXHR9O1xuXG5cdC8qKlxuXHQgKiB0YXAgZW5kZWQgbGlzdGVuZXJcblx0ICovXG5cdFRhcExpc3RlbmVyLnByb3RvdHlwZS5fZW5kZWQgPSBmdW5jdGlvbihjb250ZXh0KXtcblx0XHRpZiAoIXRoaXMuX2RyYWdnZWQpe1xuXHRcdFx0c3RhcnRDb250ZXh0KGNvbnRleHQpXG5cdFx0fVxuXHRcdHRoaXMuX2RyYWdnZWQgPSBmYWxzZVxuXHR9O1xuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIHRoZSBib3VuZCBldmVudHNcblx0ICovXG5cdFRhcExpc3RlbmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24oKXtcblx0XHR0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIHRoaXMuX2JpbmRlZEVuZClcblx0XHR0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgdGhpcy5fYmluZGVkTW92ZSlcblx0XHR0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCB0aGlzLl9iaW5kZWRFbmQpXG5cdFx0dGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCB0aGlzLl9iaW5kZWRFbmQpXG5cdFx0dGhpcy5fYmluZGVkTW92ZSA9IG51bGxcblx0XHR0aGlzLl9iaW5kZWRFbmQgPSBudWxsXG5cdFx0dGhpcy5fZWxlbWVudCA9IG51bGxcblx0fTtcblxuXHQvL0VORCBUQVAgTElTVEVORVIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXHQvKipcblx0ICogUGxheXMgYSBzaWxlbnQgc291bmQgYW5kIGFsc28gaW52b2tlIHRoZSBcInJlc3VtZVwiIG1ldGhvZFxuXHQgKiBAcGFyYW0ge0F1ZGlvQ29udGV4dH0gY29udGV4dFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gc3RhcnRDb250ZXh0KGNvbnRleHQpe1xuXHRcdC8vIHRoaXMgYWNjb21wbGlzaGVzIHRoZSBpT1Mgc3BlY2lmaWMgcmVxdWlyZW1lbnRcblx0XHR2YXIgYnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgMSwgY29udGV4dC5zYW1wbGVSYXRlKVxuXHRcdHZhciBzb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpXG5cdFx0c291cmNlLmJ1ZmZlciA9IGJ1ZmZlclxuXHRcdHNvdXJjZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pXG5cdFx0c291cmNlLnN0YXJ0KDApXG5cblx0XHQvLyByZXN1bWUgdGhlIGF1ZGlvIGNvbnRleHRcblx0XHRpZiAoY29udGV4dC5yZXN1bWUpe1xuXHRcdFx0Y29udGV4dC5yZXN1bWUoKVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF1ZGlvIGNvbnRleHQgaXMgc3RhcnRlZFxuXHQgKiBAcGFyYW0gIHtBdWRpb0NvbnRleHR9ICBjb250ZXh0XG5cdCAqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBpc1N0YXJ0ZWQoY29udGV4dCl7XG5cdFx0IHJldHVybiBjb250ZXh0LnN0YXRlID09PSBcInJ1bm5pbmdcIlxuXHR9XG5cblx0LyoqXG5cdCAqIEludm9rZXMgdGhlIGNhbGxiYWNrIGFzIHNvb24gYXMgdGhlIEF1ZGlvQ29udGV4dFxuXHQgKiBpcyBzdGFydGVkXG5cdCAqIEBwYXJhbSAge0F1ZGlvQ29udGV4dH0gICBjb250ZXh0XG5cdCAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKi9cblx0ZnVuY3Rpb24gb25TdGFydGVkKGNvbnRleHQsIGNhbGxiYWNrKXtcblxuXHRcdGZ1bmN0aW9uIGNoZWNrTG9vcCgpe1xuXHRcdFx0aWYgKGlzU3RhcnRlZChjb250ZXh0KSl7XG5cdFx0XHRcdGNhbGxiYWNrKClcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShjaGVja0xvb3ApXG5cdFx0XHRcdGlmIChjb250ZXh0LnJlc3VtZSl7XG5cdFx0XHRcdFx0Y29udGV4dC5yZXN1bWUoKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzU3RhcnRlZChjb250ZXh0KSl7XG5cdFx0XHRjYWxsYmFjaygpXG5cdFx0fSBlbHNlIHtcblx0XHRcdGNoZWNrTG9vcCgpXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIHRhcCBsaXN0ZW5lciB0byB0aGUgYXVkaW8gY29udGV4dFxuXHQgKiBAcGFyYW0gIHtBcnJheXxFbGVtZW50fFN0cmluZ3xqUXVlcnl9IGVsZW1lbnRcblx0ICogQHBhcmFtIHtBcnJheX0gdGFwTGlzdGVuZXJzXG5cdCAqL1xuXHRmdW5jdGlvbiBiaW5kVGFwTGlzdGVuZXIoZWxlbWVudCwgdGFwTGlzdGVuZXJzLCBjb250ZXh0KXtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50KSB8fCAoTm9kZUxpc3QgJiYgZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0KSl7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnQubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRiaW5kVGFwTGlzdGVuZXIoZWxlbWVudFtpXSwgdGFwTGlzdGVuZXJzLCBjb250ZXh0KVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT09IFwic3RyaW5nXCIpe1xuXHRcdFx0YmluZFRhcExpc3RlbmVyKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZWxlbWVudCksIHRhcExpc3RlbmVycywgY29udGV4dClcblx0XHR9IGVsc2UgaWYgKGVsZW1lbnQuanF1ZXJ5ICYmIHR5cGVvZiBlbGVtZW50LnRvQXJyYXkgPT09IFwiZnVuY3Rpb25cIil7XG5cdFx0XHRiaW5kVGFwTGlzdGVuZXIoZWxlbWVudC50b0FycmF5KCksIHRhcExpc3RlbmVycywgY29udGV4dClcblx0XHR9IGVsc2UgaWYgKEVsZW1lbnQgJiYgZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpe1xuXHRcdFx0Ly9pZiBpdCdzIGFuIGVsZW1lbnQsIGNyZWF0ZSBhIFRhcExpc3RlbmVyXG5cdFx0XHR2YXIgdGFwID0gbmV3IFRhcExpc3RlbmVyKGVsZW1lbnQsIGNvbnRleHQpXG5cdFx0XHR0YXBMaXN0ZW5lcnMucHVzaCh0YXApXG5cdFx0fSBcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0F1ZGlvQ29udGV4dH0gY29udGV4dCBUaGUgQXVkaW9Db250ZXh0IHRvIHN0YXJ0LlxuXHQgKiBAcGFyYW0ge0FycmF5fFN0cmluZ3xFbGVtZW50fGpRdWVyeT19IGVsZW1lbnRzIEZvciBpT1MsIHRoZSBsaXN0IG9mIGVsZW1lbnRzXG5cdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiaW5kIHRhcCBldmVudCBsaXN0ZW5lcnNcblx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHdpbGwgc3RhcnQgdGhlIEF1ZGlvQ29udGV4dC4gSWZcblx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vIGVsZW1lbnRzIGFyZSBnaXZlbiwgaXQgd2lsbCBiaW5kXG5cdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZG9jdW1lbnQuYm9keS5cblx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgQXVkaW9Db250ZXh0IGlzIHN0YXJ0ZWQuXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9IFRoZSBwcm9taXNlIGlzIGludm9rZWQgd2hlbiB0aGUgQXVkaW9Db250ZXh0XG5cdCAqICAgICAgICAgICAgICAgICAgICAgICBpcyBzdGFydGVkLlxuXHQgKi9cblx0ZnVuY3Rpb24gU3RhcnRBdWRpb0NvbnRleHQoY29udGV4dCwgZWxlbWVudHMsIGNhbGxiYWNrKXtcblxuXHRcdC8vdGhlIHByb21pc2UgaXMgaW52b2tlZCB3aGVuIHRoZSBBdWRpb0NvbnRleHQgaXMgc3RhcnRlZFxuXHRcdHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24oc3VjY2Vzcykge1xuXHRcdFx0b25TdGFydGVkKGNvbnRleHQsIHN1Y2Nlc3MpXG5cdFx0fSlcblxuXHRcdC8vIFRoZSBUYXBMaXN0ZW5lcnMgYm91bmQgdG8gdGhlIGVsZW1lbnRzXG5cdFx0dmFyIHRhcExpc3RlbmVycyA9IFtdXG5cblx0XHQvLyBhZGQgYWxsIHRoZSB0YXAgbGlzdGVuZXJzXG5cdFx0aWYgKCFlbGVtZW50cyl7XG5cdFx0XHRlbGVtZW50cyA9IGRvY3VtZW50LmJvZHlcblx0XHR9XG5cdFx0YmluZFRhcExpc3RlbmVyKGVsZW1lbnRzLCB0YXBMaXN0ZW5lcnMsIGNvbnRleHQpXG5cblx0XHQvL2Rpc3Bvc2UgYWxsIHRoZXNlIHRhcCBsaXN0ZW5lcnMgd2hlbiB0aGUgY29udGV4dCBpcyBzdGFydGVkXG5cdFx0cHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRhcExpc3RlbmVycy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdHRhcExpc3RlbmVyc1tpXS5kaXNwb3NlKClcblx0XHRcdH1cblx0XHRcdHRhcExpc3RlbmVycyA9IG51bGxcblxuXHRcdFx0aWYgKGNhbGxiYWNrKXtcblx0XHRcdFx0Y2FsbGJhY2soKVxuXHRcdFx0fVxuXHRcdH0pXG5cblx0XHRyZXR1cm4gcHJvbWlzZVxuXHR9XG5cblx0cmV0dXJuIFN0YXJ0QXVkaW9Db250ZXh0XG59KSkiLCJpbXBvcnQgcDUgZnJvbSAncDUvbGliL3A1Lm1pbic7XG5pbXBvcnQgVG9uZSBmcm9tICd0b25lJztcbmltcG9ydCBTdGFydEF1ZGlvQ29udGV4dCBmcm9tICdzdGFydGF1ZGlvY29udGV4dCc7XG5cbmNvbnN0IHNrZXRjaCA9IChwKSA9PiB7XG4gICAgdmFyIHBoYXNlciA9IG5ldyBUb25lLlBoYXNlcih7XG4gICAgICAgIFwiZnJlcXVlbmN5XCI6IDAuNSxcbiAgICAgICAgXCJvY3RhdmVzXCI6IDAuNSxcbiAgICAgICAgXCJiYXNlRnJlcXVlbmN5XCI6IDE2MDBcbiAgICB9KS50b01hc3RlcigpO1xuXG4gICAgdmFyIGNob3J1cyA9IG5ldyBUb25lLkNob3J1cygwLjgsIDIuNSwgMC4yKS50b01hc3RlcigpO1xuICAgIFxuICAgIGNsYXNzIEhleGFnb24ge1xuICAgICAgY29uc3RydWN0b3Iobm90ZSwgeCwgeSwgcykge1xuICAgICAgICB0aGlzLm5vdGUgPSBub3RlO1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICB0aGlzLnMgPSBzO1xuICAgICAgICB0aGlzLmNhbnBsYXkgPSB0cnVlO1xuICAgICAgICB0aGlzLmZpbGxDb2xvciA9IDA7XG5cbiAgICAgICAgdGhpcy5mbSA9IG5ldyBUb25lLlBvbHlTeW50aCg4LCBUb25lLlN5bnRoLCB7XG4gICAgICAgIFwib3NjaWxsYXRvclwiOiB7XG4gICAgICAgICAgICBcInBhcnRpYWxzXCI6IFsxMDAsIDIwLCAzMCwgNF0sXG4gICAgICAgIH0sXG4gICAgICAgIFwiZW52ZWxvcGVcIjoge1xuICAgICAgICAgICAgYXR0YWNrOiAwLjMsXG4gICAgICAgICAgICBkZWNheTogMC42LFxuICAgICAgICAgICAgc3VzdGFpbjogNCxcbiAgICAgICAgICAgIHJlbGVhc2U6IDZcbiAgICAgICAgfSxcbiAgICAgIH0pLmNoYWluKGNob3J1cywgcGhhc2VyKTtcbiAgICAgICAgdGhpcy5mbS52b2x1bWUudmFsdWUgPSAtNDtcbiAgICAgIH1cblxuICAgICAgZHJhdygpIHtcbiAgICAgICAgcC5wdXNoKCk7XG4gICAgICAgIHAubm9TdHJva2UoKTtcbiAgICAgICAgcC50cmFuc2xhdGUodGhpcy54LHRoaXMueSwwKTtcblxuICAgICAgICBpZih0aGlzLm5vdGUgPT0gXCJDIzRcIikge1xuICAgICAgICAgIHAuYW1iaWVudE1hdGVyaWFsKCgyNTUvOSkgKiA1ICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYodGhpcy5ub3RlID09IFwiRyM0XCIgfHwgdGhpcy5ub3RlID09IFwiRyMzXCIpIHtcbiAgICAgICAgICBwLmFtYmllbnRNYXRlcmlhbCggKDI1NS85KSAqIDQpO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZih0aGlzLm5vdGUgPT0gXCJEIzVcIiB8fCB0aGlzLm5vdGUgPT0gXCJEIzRcIiB8fCB0aGlzLm5vdGUgPT0gXCJEIzNcIikge1xuICAgICAgICAgIHAuYW1iaWVudE1hdGVyaWFsKCAoMjU1LzkpICogNik7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmKHRoaXMubm90ZSA9PSBcIkEjNFwiIHx8IHRoaXMubm90ZSA9PSBcIkEjM1wiKSB7XG4gICAgICAgICAgcC5hbWJpZW50TWF0ZXJpYWwoICgyNTUvOSkgKiAzKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZih0aGlzLm5vdGUgPT0gXCJGNVwiIHx8IHRoaXMubm90ZSA9PSBcIkY0XCIgfHwgdGhpcy5ub3RlID09IFwiRjNcIikge1xuICAgICAgICAgIHAuYW1iaWVudE1hdGVyaWFsKCAoMjU1LzkpICogNyk7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmKHRoaXMubm90ZSA9PSBcIkM1XCIgfHwgdGhpcy5ub3RlID09IFwiQzRcIikge1xuICAgICAgICAgIHAuYW1iaWVudE1hdGVyaWFsKCAoMjU1LzkpICogMik7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmKHRoaXMubm90ZSA9PSBcIkc1XCIgfHwgdGhpcy5ub3RlID09IFwiRzRcIiB8fCB0aGlzLm5vdGUgPT0gXCJHM1wiKSB7XG4gICAgICAgICAgcC5hbWJpZW50TWF0ZXJpYWwoICgyNTUvOSkgKiA4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYodGhpcy5ub3RlID09IFwiRDVcIiB8fCB0aGlzLm5vdGUgPT0gXCJENFwiKSB7XG4gICAgICAgICAgcC5hbWJpZW50TWF0ZXJpYWwoICgyNTUvOSkgKiAxKTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYodGhpcy5ub3RlID09IFwiQTRcIikge1xuICAgICAgICAgIHAuYW1iaWVudE1hdGVyaWFsKCAoMjU1LzkpICogOSk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHAucHVzaCgpO1xuICAgICAgICBwLnRyYW5zbGF0ZSgwLDAsLXRoaXMucy8yKTtcbiAgICAgICAgcC5yb3RhdGVYKC1wLkhBTEZfUEkpO1xuICAgICAgICBwLmN5bGluZGVyKHRoaXMucyAqIDEuOCwgdGhpcy5zLzIsIDYpO1xuICAgICAgICBwLmZpbGwoMjU1LDAsMCx0aGlzLmZpbGxDb2xvcik7XG4gICAgICAgIHAuY3lsaW5kZXIodGhpcy5zICogMS45LCB0aGlzLnMvMS44LCA2KTtcbiAgICAgICAgcC5wb3AoKVxuICAgICAgICBwLnBvcCgpO1xuXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLT0xMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgeFZhbCA9IDA7XG4gICAgbGV0IHlWYWwgPSAwO1xuICAgIGxldCBwTW91c2VYID0gMDtcbiAgICBsZXQgcE1vdXNlWSA9IDA7XG4gICAgbGV0IGJhbGxYID0gMDtcbiAgICBsZXQgYmFsbFkgPSAwO1xuXG4gICAgbGV0IHRpbGVzID0gW107XG5cbiAgICBwLnNldHVwID0gKCkgPT4ge1xuICAgICAgICBsZXQgY2FudmFzID0gcC5jcmVhdGVDYW52YXMoODAwLCA4MDAsIHAuV0VCR0wpO1xuICAgIFxuICAgICAgICB0aWxlcy5wdXNoKCBuZXcgSGV4YWdvbihcIkMjNFwiLCAtMjAwLCAwLCAzMCkgKTtcbiAgICAgICAgdGlsZXMucHVzaCggbmV3IEhleGFnb24oXCJHIzRcIiwgLTE1MCwgLTEwMCwgMzApICk7XG4gICAgICAgIHRpbGVzLnB1c2goIG5ldyBIZXhhZ29uKFwiRyMzXCIsIC0xNTAsIDEwMCwgMzApICk7XG4gICAgICAgIHRpbGVzLnB1c2goIG5ldyBIZXhhZ29uKFwiRCM1XCIsIC0xMDAsIC0yMDAsIDMwKSApO1xuICAgICAgICB0aWxlcy5wdXNoKCBuZXcgSGV4YWdvbihcIkQjNFwiLCAtMTAwLCAwLCAzMCkgKTtcbiAgICAgICAgdGlsZXMucHVzaCggbmV3IEhleGFnb24oXCJEIzNcIiwgLTEwMCwgMjAwLCAzMCkgKTtcbiAgICAgICAgdGlsZXMucHVzaCggbmV3IEhleGFnb24oXCJBIzRcIiwgLTUwLCAtMTAwLCAzMCkgKTtcbiAgICAgICAgdGlsZXMucHVzaCggbmV3IEhleGFnb24oXCJBIzNcIiwgLTUwLCAxMDAsIDMwKSApO1xuICAgICAgICB0aWxlcy5wdXNoKCBuZXcgSGV4YWdvbihcIkY1XCIsIDAsIC0yMDAsIDMwKSApO1xuICAgICAgICB0aWxlcy5wdXNoKCBuZXcgSGV4YWdvbihcIkY0XCIsIDAsIDAsIDMwKSApO1xuICAgICAgICB0aWxlcy5wdXNoKCBuZXcgSGV4YWdvbihcIkYzXCIsIDAsIDIwMCwgMzApICk7XG4gICAgICAgIHRpbGVzLnB1c2goIG5ldyBIZXhhZ29uKFwiQzVcIiwgNTAsIC0xMDAsIDMwKSApO1xuICAgICAgICB0aWxlcy5wdXNoKCBuZXcgSGV4YWdvbihcIkM0XCIsIDUwLCAxMDAsIDMwKSApO1xuICAgICAgICB0aWxlcy5wdXNoKCBuZXcgSGV4YWdvbihcIkc1XCIsIDEwMCwgLTIwMCwgMzApICk7XG4gICAgICAgIHRpbGVzLnB1c2goIG5ldyBIZXhhZ29uKFwiRzRcIiwgMTAwLCAwLCAzMCkgKTtcbiAgICAgICAgdGlsZXMucHVzaCggbmV3IEhleGFnb24oXCJHM1wiLCAxMDAsIDIwMCwgMzApICk7XG4gICAgICAgIHRpbGVzLnB1c2goIG5ldyBIZXhhZ29uKFwiRDVcIiwgMTUwLCAtMTAwLCAzMCkgKTtcbiAgICAgICAgdGlsZXMucHVzaCggbmV3IEhleGFnb24oXCJENFwiLCAxNTAsIDEwMCwgMzApICk7XG4gICAgICAgIHRpbGVzLnB1c2goIG5ldyBIZXhhZ29uKFwiQTRcIiwgMjAwLCAwLCAzMCkgKTtcbiAgICB9XG5cbiAgICBsZXQgdHggPSAwO1xuICAgIGxldCB0eSA9IDEwMDAwO1xuICAgIGxldCBueCA9IDA7XG4gICAgbGV0IG55ID0gMDtcblxuICAgIHAuZHJhdyA9ICgpID0+IHtcbiAgICAgICAgLy9wLmNhbWVyYShwLmZyYW1lQ291bnQvNSAtIDQwMCwtMjAwLCAtNjAwLCAwLCAwLCAwLCAwLCAxLCAwKTtcbiAgICAgICAgcC5iYWNrZ3JvdW5kKDApO1xuICAgICAgICBwLnNtb290aCgpO1xuXG4gICAgICAgIHAucG9pbnRMaWdodCgxNTAsIDE1MCwgMTUwLCA1MDAsIDAsIDEwMCk7XG4gICAgICAgIHAuZGlyZWN0aW9uYWxMaWdodCgyNTUsMjU1LDI1NSwgMCwgMSwgLTEpO1xuICAgICAgICBwLmFtYmllbnRMaWdodCgyMDApO1xuXG4gICAgICAgIG54ID0gcC5tYXAocC5ub2lzZSh0eCksIDAsIDEsIHAud2lkdGgvMiAtIHAud2lkdGgvNiwgcC53aWR0aCAtIHAud2lkdGgvMyk7XG4gICAgICAgIG55ID0gcC5tYXAocC5ub2lzZSh0eSksIDAsIDEsIHAuaGVpZ2h0LCBwLmhlaWdodC8yKTtcblxuICAgICAgICAvLyBtb3VzZVxuICAgICAgICAvL3hWYWwgPSBwLm1hcChwLm1vdXNlWCwgMCwgcC53aWR0aCwtcC5QSS80LCBwLlBJLzQpO1xuICAgICAgICAvL3lWYWwgPSBwLm1hcChwLm1vdXNlWSwgMCwgcC53aWR0aCxwLlBJLzQsIC1wLlBJLzQpO1xuXG4gICAgICAgIC8vIG5vaXNlXG4gICAgICAgIHhWYWwgPSBwLm1hcChueCwgMCwgcC53aWR0aCwtcC5QSS80LCBwLlBJLzQpO1xuICAgICAgICB5VmFsID0gcC5tYXAobnksIDAsIHAuaGVpZ2h0LHAuUEkvNCwgLXAuUEkvNCk7XG4gICAgICAgIFxuICAgICAgICB0eCArPSAwLjAxO1xuICAgICAgICB0eSArPSAwLjAwNTtcbiAgICAgICAgXG4gICAgICAgIGlmKCAoYmFsbFggPiAtMTUwKSAmJiAoYmFsbFggPCAxNTApICkge1xuICAgICAgICAgIGJhbGxYICs9IHhWYWwgKiAyMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZihiYWxsWCA8PSAtMTUwKSB7XG4gICAgICAgICAgICBiYWxsWCA9IC0xNDk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGJhbGxYID49IDE1MCkge1xuICAgICAgICAgICAgYmFsbFggPSAxNDk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKCAoYmFsbFkgPiAtMTUwKSAmJiAoYmFsbFkgPCAxNTApICkge1xuICAgICAgICAgIGJhbGxZIC09ICh5VmFsK3AuUEkvOCkgKiAzMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZihiYWxsWSA8PSAtMTUwKSB7XG4gICAgICAgICAgICBiYWxsWSA9IC0xNDk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGJhbGxZID49IDE1MCkge1xuICAgICAgICAgICAgYmFsbFkgPSAxNDk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYmFsbFggPSBiYWxsWCArIHAuc2luKHAuZnJhbWVDb3VudC8zMCkgKiA0O1xuICAgICAgICBiYWxsWSA9IGJhbGxZICsgcC5jb3MocC5mcmFtZUNvdW50LzMwKSAqIDQ7XG4gICAgICAgIFxuICAgICAgICBcbiAgICAgICAgcC5wdXNoKCk7XG4gICAgICAgIHAucm90YXRlWChwLnJhZGlhbnMoODApKTtcbiAgICAgICAgcC5yb3RhdGVZKHhWYWwpO1xuICAgICAgICBwLnJvdGF0ZVgoeVZhbCk7XG5cbiAgICAgICAgZm9yKGxldCBpPTA7IGk8dGlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0aWxlc1tpXS5kcmF3KCk7XG4gICAgICAgICAgaWYocC5kaXN0KGJhbGxYLGJhbGxZLHRpbGVzW2ldLngsdGlsZXNbaV0ueSkgPCB0aWxlc1tpXS5zKjIpIHtcbiAgICAgICAgICAgIGlmKHRpbGVzW2ldLmNhblBsYXkpIHRpbGVzW2ldLmZtLnRyaWdnZXJBdHRhY2tSZWxlYXNlKHRpbGVzW2ldLm5vdGUsIFwiNjRuXCIpO1xuICAgICAgICAgICAgdGlsZXNbaV0uY2FuUGxheSA9IGZhbHNlO1xuICAgICAgICAgICAgdGlsZXNbaV0uZmlsbENvbG9yID0gMjAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aWxlc1tpXS5jYW5QbGF5ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwLnN0cm9rZSgyNTUsMjAwKTtcbiAgICAgICAgcC5saW5lKGJhbGxYLGJhbGxZLDIyMCxiYWxsWCxiYWxsWSwwKTtcbiAgICAgICAgcC5ub0ZpbGwoKTtcbiAgICAgICAgcC5zdHJva2UoMjU1LDEwMCk7XG4gICAgICAgIHAuZWxsaXBzZShiYWxsWCxiYWxsWSwxMCwxMCk7XG4gICAgICAgIHAuZWxsaXBzZShiYWxsWCxiYWxsWSwyMCwyMCk7XG4gICAgICAgIHAuZWxsaXBzZShiYWxsWCxiYWxsWSw0MCw0MCk7XG4gICAgICAgIFxuICAgICAgICBwLm5vU3Ryb2tlKCk7XG4gICAgICAgIHAuZmlsbCgyNTUsMjAwKTtcbiAgICAgICAgcC5wdXNoKCk7XG4gICAgICAgIHAudHJhbnNsYXRlKGJhbGxYLGJhbGxZLDIyMCk7XG4gICAgICAgIHAuc3BoZXJlKDE1KTtcbiAgICAgICAgXG4gICAgICAgIHAucG9wKCk7XG5cbiAgICAgICAgcC5wb3AoKTtcblxuICAgICAgICBwTW91c2VYID0gcC5tb3VzZVg7XG4gICAgICAgIHBNb3VzZVkgPSBwLm1vdXNlWTtcblxuICAgIH1cblxuICAgIHAua2V5UHJlc3NlZCA9ICgpID0+IHtcbiAgICAgICAgaWYocC5rZXkgPT0gJ20nKSB7XG4gICAgICAgICAgICBwLnNhdmUoRGF0ZS5ub3coKSArIFwiLmpwZ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwLm1vdXNlUHJlc3NlZCA9ICgpID0+IHtcbiAgICAgICAgU3RhcnRBdWRpb0NvbnRleHQoVG9uZS5jb250ZXh0KS50aGVuKGZ1bmN0aW9uKCl7fSk7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgc2tldGNoO1xubmV3IHA1KHNrZXRjaCk7IiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsIGV2YWwpKFwidGhpc1wiKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/Day-22-Hexagon-Tiling/package-lock.json b/Day-22-Hexagon-Tiling/package-lock.json index f09a1a4..d2a2255 100644 --- a/Day-22-Hexagon-Tiling/package-lock.json +++ b/Day-22-Hexagon-Tiling/package-lock.json @@ -29,8 +29,8 @@ "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", "requires": { - "@protobufjs/aspromise": "1.1.2", - "@protobufjs/inquire": "1.1.0" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, "@protobufjs/float": { @@ -73,8 +73,8 @@ "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-0.6.6.tgz", "integrity": "sha512-zDpDY6hyoXw6yEHd8CZrs7VL1Kl/kFhW5JcJWC7h2xqsMxk09v7OSNa4YQfJWJQeCXVStjK9VOqLSkwTETwPrw==", "requires": { - "@types/long": "3.0.32", - "protobufjs": "6.8.8" + "@types/long": "~3.0.32", + "protobufjs": "~6.8.6" } }, "@tensorflow/tfjs-core": { @@ -192,7 +192,7 @@ "integrity": "sha512-HRcWcY+YWt4+s/CvQn+vnSPfRaD4KkuzQFt5MNaELXXHSjelHlSEA8ZcqT69q0GTIuLWZ6JaoKar4yWHVpZHsQ==", "dev": true, "requires": { - "@xtuc/ieee754": "1.2.0" + "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { @@ -308,7 +308,7 @@ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "2.1.21", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -324,7 +324,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "5.7.3" + "acorn": "^5.0.0" } }, "ajv": { @@ -333,10 +333,10 @@ "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", "dev": true, "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-errors": { @@ -375,7 +375,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.3" + "color-convert": "^1.9.0" } }, "anymatch": { @@ -384,8 +384,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "aproba": { @@ -424,7 +424,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -445,9 +445,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -512,13 +512,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -527,7 +527,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -536,7 +536,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -545,7 +545,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -554,9 +554,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -604,15 +604,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", + "depd": "~1.1.2", + "http-errors": "~1.6.3", "iconv-lite": "0.4.23", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.2", "raw-body": "2.3.3", - "type-is": "1.6.16" + "type-is": "~1.6.16" } }, "bonjour": { @@ -621,12 +621,12 @@ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "array-flatten": "2.1.1", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, "brace-expansion": { @@ -635,7 +635,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -645,16 +645,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -663,7 +663,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -680,12 +680,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -694,9 +694,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -705,10 +705,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -717,8 +717,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -727,13 +727,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.1", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -742,7 +742,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "buffer": { @@ -751,9 +751,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-from": { @@ -792,19 +792,19 @@ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { - "bluebird": "3.5.2", - "chownr": "1.1.1", - "glob": "7.1.3", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.3", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.3.0", - "unique-filename": "1.1.1", - "y18n": "4.0.0" + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" } }, "cache-base": { @@ -813,15 +813,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "camelcase": { @@ -836,9 +836,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chokidar": { @@ -847,19 +847,19 @@ "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.4", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "lodash.debounce": "4.0.8", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.1.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, "chownr": { @@ -874,7 +874,7 @@ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", "dev": true, "requires": { - "tslib": "1.9.3" + "tslib": "^1.9.0" } }, "cipher-base": { @@ -883,8 +883,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "class-utils": { @@ -893,10 +893,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -905,7 +905,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -916,9 +916,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "code-point-at": { @@ -933,8 +933,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { @@ -976,7 +976,7 @@ "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", "dev": true, "requires": { - "mime-db": "1.37.0" + "mime-db": ">= 1.36.0 < 2" } }, "compression": { @@ -985,13 +985,13 @@ "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "2.0.15", + "compressible": "~2.0.14", "debug": "2.6.9", - "on-headers": "1.0.1", + "on-headers": "~1.0.1", "safe-buffer": "5.1.2", - "vary": "1.1.2" + "vary": "~1.1.2" } }, "concat-map": { @@ -1006,10 +1006,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "connect-history-api-fallback": { @@ -1024,7 +1024,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -1063,12 +1063,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -1089,8 +1089,8 @@ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -1099,11 +1099,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -1112,12 +1112,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -1126,11 +1126,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { @@ -1139,17 +1139,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.17", - "public-encrypt": "4.0.3", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "cyclist": { @@ -1200,8 +1200,8 @@ "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", "dev": true, "requires": { - "execa": "0.10.0", - "ip-regex": "2.1.0" + "execa": "^0.10.0", + "ip-regex": "^2.1.0" } }, "define-property": { @@ -1210,8 +1210,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -1220,7 +1220,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1229,7 +1229,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1238,9 +1238,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1251,12 +1251,12 @@ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" } }, "depd": { @@ -1271,8 +1271,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "destroy": { @@ -1293,9 +1293,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "dns-equal": { @@ -1310,8 +1310,8 @@ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "dev": true, "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.2" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, "dns-txt": { @@ -1320,7 +1320,7 @@ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { - "buffer-indexof": "1.1.1" + "buffer-indexof": "^1.0.0" } }, "domain-browser": { @@ -1335,10 +1335,10 @@ "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "ee-first": { @@ -1353,13 +1353,13 @@ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.5", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -1380,7 +1380,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "enhanced-resolve": { @@ -1389,9 +1389,9 @@ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.1.0" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "errno": { @@ -1400,7 +1400,7 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "escape-html": { @@ -1421,8 +1421,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "esrecurse": { @@ -1431,7 +1431,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -1464,7 +1464,7 @@ "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "original": "1.0.2" + "original": "^1.0.0" } }, "evp_bytestokey": { @@ -1473,8 +1473,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -1483,13 +1483,13 @@ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "6.0.5", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "expand-brackets": { @@ -1498,13 +1498,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1513,7 +1513,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -1522,7 +1522,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1533,36 +1533,36 @@ "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.3", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", + "proxy-addr": "~2.0.4", "qs": "6.5.2", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.2", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "array-flatten": { @@ -1579,8 +1579,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -1589,7 +1589,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -1600,14 +1600,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1616,7 +1616,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -1625,7 +1625,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -1634,7 +1634,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1643,7 +1643,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1652,9 +1652,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1677,7 +1677,7 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "fill-range": { @@ -1686,10 +1686,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -1698,7 +1698,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1710,12 +1710,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" } }, "find-cache-dir": { @@ -1724,9 +1724,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { @@ -1735,7 +1735,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "flush-write-stream": { @@ -1744,8 +1744,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "follow-redirects": { @@ -1754,7 +1754,7 @@ "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==", "dev": true, "requires": { - "debug": "3.1.0" + "debug": "=3.1.0" }, "dependencies": { "debug": { @@ -1786,7 +1786,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -1801,8 +1801,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-write-stream-atomic": { @@ -1811,10 +1811,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -1830,8 +1830,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.11.1", - "node-pre-gyp": "0.10.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -1857,8 +1857,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -1871,7 +1871,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1935,7 +1935,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -1950,14 +1950,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -1966,12 +1966,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -1986,7 +1986,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { @@ -1995,7 +1995,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -2004,8 +2004,8 @@ "dev": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2024,7 +2024,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -2038,7 +2038,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -2051,8 +2051,8 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, "minizlib": { @@ -2061,7 +2061,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -2084,9 +2084,9 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -2095,16 +2095,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -2113,8 +2113,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -2129,8 +2129,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -2139,10 +2139,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -2161,7 +2161,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -2182,8 +2182,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -2204,10 +2204,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -2224,13 +2224,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -2239,7 +2239,7 @@ "dev": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -2282,9 +2282,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -2293,7 +2293,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -2301,7 +2301,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -2316,13 +2316,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -2337,7 +2337,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -2376,12 +2376,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { @@ -2390,8 +2390,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -2400,7 +2400,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -2417,11 +2417,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.3", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "pify": { @@ -2461,9 +2461,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -2472,8 +2472,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -2482,7 +2482,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2493,8 +2493,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { @@ -2503,8 +2503,8 @@ "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "hmac-drbg": { @@ -2513,9 +2513,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.5", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hpack.js": { @@ -2524,10 +2524,10 @@ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { - "inherits": "2.0.3", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "wbuf": "1.7.3" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, "html-entities": { @@ -2548,10 +2548,10 @@ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.4.0" + "statuses": ">= 1.4.0 < 2" } }, "http-parser-js": { @@ -2566,9 +2566,9 @@ "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "dev": true, "requires": { - "eventemitter3": "3.1.0", - "follow-redirects": "1.5.9", - "requires-port": "1.0.0" + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, "http-proxy-middleware": { @@ -2577,10 +2577,10 @@ "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", "dev": true, "requires": { - "http-proxy": "1.17.0", - "is-glob": "4.0.0", - "lodash": "4.17.11", - "micromatch": "3.1.10" + "http-proxy": "^1.16.2", + "is-glob": "^4.0.0", + "lodash": "^4.17.5", + "micromatch": "^3.1.9" } }, "https-browserify": { @@ -2595,7 +2595,7 @@ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { @@ -2616,8 +2616,8 @@ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "3.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" }, "dependencies": { "find-up": { @@ -2626,7 +2626,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -2635,8 +2635,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -2645,7 +2645,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -2654,7 +2654,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.0.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -2669,7 +2669,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "3.0.0" + "find-up": "^3.0.0" } } } @@ -2692,8 +2692,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2708,8 +2708,8 @@ "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", "dev": true, "requires": { - "default-gateway": "2.7.2", - "ipaddr.js": "1.8.0" + "default-gateway": "^2.6.0", + "ipaddr.js": "^1.5.2" } }, "interpret": { @@ -2748,7 +2748,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2757,7 +2757,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2768,7 +2768,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.12.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -2783,7 +2783,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2792,7 +2792,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2803,9 +2803,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -2840,7 +2840,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -2849,7 +2849,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2858,7 +2858,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2875,7 +2875,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -2884,7 +2884,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-object": { @@ -2893,7 +2893,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-stream": { @@ -2974,7 +2974,7 @@ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "2.0.0" + "invert-kv": "^2.0.0" } }, "loader-runner": { @@ -2989,9 +2989,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -3000,8 +3000,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -3032,8 +3032,8 @@ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "make-dir": { @@ -3042,7 +3042,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "map-age-cleaner": { @@ -3051,7 +3051,7 @@ "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", "dev": true, "requires": { - "p-defer": "1.0.0" + "p-defer": "^1.0.0" } }, "map-cache": { @@ -3066,7 +3066,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "md5.js": { @@ -3075,9 +3075,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "media-typer": { @@ -3092,9 +3092,9 @@ "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "dev": true, "requires": { - "map-age-cleaner": "0.1.2", - "mimic-fn": "1.2.0", - "p-is-promise": "1.1.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" } }, "memory-fs": { @@ -3103,8 +3103,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "merge-descriptors": { @@ -3125,19 +3125,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "miller-rabin": { @@ -3146,8 +3146,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { @@ -3168,7 +3168,7 @@ "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "dev": true, "requires": { - "mime-db": "1.37.0" + "mime-db": "~1.37.0" } }, "mimic-fn": { @@ -3195,7 +3195,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3210,16 +3210,16 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.1", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.3" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -3228,8 +3228,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -3238,7 +3238,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -3258,12 +3258,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -3278,8 +3278,8 @@ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "dns-packet": "1.3.1", - "thunky": "1.0.3" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, "multicast-dns-service-types": { @@ -3301,17 +3301,17 @@ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "negotiator": { @@ -3344,28 +3344,28 @@ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.4", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" }, "dependencies": { @@ -3383,7 +3383,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "npm-run-path": { @@ -3392,7 +3392,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { @@ -3413,9 +3413,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -3424,7 +3424,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -3433,7 +3433,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3444,7 +3444,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.pick": { @@ -3453,7 +3453,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "obuf": { @@ -3483,7 +3483,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "opn": { @@ -3492,7 +3492,7 @@ "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", "dev": true, "requires": { - "is-wsl": "1.1.0" + "is-wsl": "^1.1.0" } }, "original": { @@ -3501,7 +3501,7 @@ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "requires": { - "url-parse": "1.4.3" + "url-parse": "^1.4.3" } }, "os-browserify": { @@ -3516,9 +3516,9 @@ "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", "dev": true, "requires": { - "execa": "0.10.0", - "lcid": "2.0.0", - "mem": "4.0.0" + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "p-defer": { @@ -3545,7 +3545,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -3554,7 +3554,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.3.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -3586,9 +3586,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "parse-asn1": { @@ -3597,11 +3597,11 @@ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.17" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parseurl": { @@ -3664,11 +3664,11 @@ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "pify": { @@ -3689,7 +3689,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -3698,7 +3698,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "portfinder": { @@ -3707,9 +3707,9 @@ "integrity": "sha512-23aeQKW9KgHe6citUrG3r9HjeX6vls0h713TAa+CwTKZwNIr/pD2ApaxYF4Um3ZZyq4ar+Siv3+fhoHaIwSOSw==", "dev": true, "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" } }, "posix-character-classes": { @@ -3741,19 +3741,19 @@ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", "requires": { - "@protobufjs/aspromise": "1.1.2", - "@protobufjs/base64": "1.1.2", - "@protobufjs/codegen": "2.0.4", - "@protobufjs/eventemitter": "1.1.0", - "@protobufjs/fetch": "1.1.0", - "@protobufjs/float": "1.0.2", - "@protobufjs/inquire": "1.1.0", - "@protobufjs/path": "1.1.2", - "@protobufjs/pool": "1.1.0", - "@protobufjs/utf8": "1.1.0", - "@types/long": "4.0.0", - "@types/node": "10.12.6", - "long": "4.0.0" + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" }, "dependencies": { "@types/long": { @@ -3769,7 +3769,7 @@ "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "dev": true, "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.8.0" } }, @@ -3791,12 +3791,12 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pump": { @@ -3805,8 +3805,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -3815,9 +3815,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "3.6.1", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, "punycode": { @@ -3856,7 +3856,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -3865,8 +3865,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -3893,13 +3893,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -3908,9 +3908,9 @@ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "micromatch": "3.1.10", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "regex-not": { @@ -3919,8 +3919,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "remove-trailing-separator": { @@ -3965,7 +3965,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "resolve-from": { @@ -3992,7 +3992,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.3" + "glob": "^7.0.5" } }, "ripemd160": { @@ -4001,8 +4001,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-queue": { @@ -4011,7 +4011,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "safe-buffer": { @@ -4026,7 +4026,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "safer-buffer": { @@ -4041,8 +4041,8 @@ "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "dev": true, "requires": { - "ajv": "6.5.4", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, "seedrandom": { @@ -4078,18 +4078,18 @@ "dev": true, "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" } }, "serialize-javascript": { @@ -4104,13 +4104,13 @@ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.21", - "parseurl": "1.3.2" + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" } }, "serve-static": { @@ -4119,9 +4119,9 @@ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.2" } }, @@ -4137,10 +4137,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -4149,7 +4149,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -4172,8 +4172,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shebang-command": { @@ -4182,7 +4182,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -4203,14 +4203,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -4219,7 +4219,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -4228,7 +4228,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -4239,9 +4239,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -4250,7 +4250,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -4259,7 +4259,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -4268,7 +4268,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -4277,9 +4277,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -4290,7 +4290,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -4299,7 +4299,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4310,8 +4310,8 @@ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", "dev": true, "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.3.2" + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" } }, "sockjs-client": { @@ -4320,12 +4320,12 @@ "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "dev": true, "requires": { - "debug": "3.2.6", - "eventsource": "1.0.7", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.4.3" + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" }, "dependencies": { "debug": { @@ -4334,7 +4334,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "faye-websocket": { @@ -4343,7 +4343,7 @@ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "ms": { @@ -4372,11 +4372,11 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { @@ -4391,12 +4391,12 @@ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", "dev": true, "requires": { - "debug": "2.6.9", - "handle-thing": "1.2.5", - "http-deceiver": "1.2.7", - "safe-buffer": "5.1.2", - "select-hose": "2.0.0", - "spdy-transport": "2.1.0" + "debug": "^2.6.8", + "handle-thing": "^1.2.5", + "http-deceiver": "^1.2.7", + "safe-buffer": "^5.0.1", + "select-hose": "^2.0.0", + "spdy-transport": "^2.0.18" } }, "spdy-transport": { @@ -4405,13 +4405,13 @@ "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", "dev": true, "requires": { - "debug": "2.6.9", - "detect-node": "2.0.4", - "hpack.js": "2.1.6", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2", - "wbuf": "1.7.3" + "debug": "^2.6.8", + "detect-node": "^2.0.3", + "hpack.js": "^2.1.6", + "obuf": "^1.1.1", + "readable-stream": "^2.2.9", + "safe-buffer": "^5.0.1", + "wbuf": "^1.7.2" } }, "split-string": { @@ -4420,7 +4420,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "ssri": { @@ -4429,17 +4429,22 @@ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.1" } }, + "startaudiocontext": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/startaudiocontext/-/startaudiocontext-1.2.1.tgz", + "integrity": "sha1-RtLKtUYseRGArMciPju7wycshZU=" + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -4448,7 +4453,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -4465,8 +4470,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-each": { @@ -4475,8 +4480,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { @@ -4485,11 +4490,11 @@ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -4504,8 +4509,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string_decoder": { @@ -4514,7 +4519,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -4523,7 +4528,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "strip-eof": { @@ -4538,7 +4543,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "tapable": { @@ -4552,8 +4557,8 @@ "resolved": "https://registry.npmjs.org/tensorjs/-/tensorjs-0.2.0.tgz", "integrity": "sha1-zjSJN6Cj+j6M6IW7S0ErUFT5abs=", "requires": { - "google-protobuf": "3.6.1", - "lodash": "4.17.11" + "google-protobuf": "^3.2.0-rc.2", + "lodash": "^4.17.4" } }, "tfjs": { @@ -4561,7 +4566,7 @@ "resolved": "https://registry.npmjs.org/tfjs/-/tfjs-0.6.0.tgz", "integrity": "sha1-Nw7l0hEvVz5ju7cM01C5BnfhGcw=", "requires": { - "tensorjs": "0.2.0" + "tensorjs": "^0.2.0" } }, "through2": { @@ -4570,8 +4575,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "thunky": { @@ -4586,7 +4591,7 @@ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "to-arraybuffer": { @@ -4601,7 +4606,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4610,7 +4615,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4621,10 +4626,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -4633,8 +4638,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "tone": { @@ -4661,7 +4666,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.21" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -4676,8 +4681,8 @@ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "dev": true, "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" + "commander": "~2.13.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -4694,14 +4699,14 @@ "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", "dev": true, "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.7", - "serialize-javascript": "1.5.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.3.0", - "worker-farm": "1.6.0" + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { "source-map": { @@ -4718,10 +4723,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -4730,7 +4735,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -4739,10 +4744,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -4753,7 +4758,7 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "2.0.1" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -4762,7 +4767,7 @@ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "unpipe": { @@ -4777,8 +4782,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -4787,9 +4792,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -4823,7 +4828,7 @@ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "urix": { @@ -4856,8 +4861,8 @@ "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==", "dev": true, "requires": { - "querystringify": "2.1.0", - "requires-port": "1.0.0" + "querystringify": "^2.0.0", + "requires-port": "^1.0.0" } }, "use": { @@ -4920,9 +4925,9 @@ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "dev": true, "requires": { - "chokidar": "2.0.4", - "graceful-fs": "4.1.11", - "neo-async": "2.6.0" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" } }, "wbuf": { @@ -4931,7 +4936,7 @@ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { - "minimalistic-assert": "1.0.1" + "minimalistic-assert": "^1.0.0" } }, "webpack": { @@ -4944,26 +4949,26 @@ "@webassemblyjs/helper-module-context": "1.7.10", "@webassemblyjs/wasm-edit": "1.7.10", "@webassemblyjs/wasm-parser": "1.7.10", - "acorn": "5.7.3", - "acorn-dynamic-import": "3.0.0", - "ajv": "6.5.4", - "ajv-keywords": "3.2.0", - "chrome-trace-event": "1.0.0", - "enhanced-resolve": "4.1.0", - "eslint-scope": "4.0.0", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.3.1", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "neo-async": "2.6.0", - "node-libs-browser": "2.1.0", - "schema-utils": "0.4.7", - "tapable": "1.1.0", - "uglifyjs-webpack-plugin": "1.3.0", - "watchpack": "1.6.0", - "webpack-sources": "1.3.0" + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.1.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" } }, "webpack-cli": { @@ -4972,16 +4977,16 @@ "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", "dev": true, "requires": { - "chalk": "2.4.1", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "global-modules-path": "2.3.0", - "import-local": "2.0.0", - "interpret": "1.1.0", - "loader-utils": "1.1.0", - "supports-color": "5.5.0", - "v8-compile-cache": "2.0.2", - "yargs": "12.0.2" + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.0", + "global-modules-path": "^2.3.0", + "import-local": "^2.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.2" } }, "webpack-dev-middleware": { @@ -4990,10 +4995,10 @@ "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", "dev": true, "requires": { - "memory-fs": "0.4.1", - "mime": "2.3.1", - "range-parser": "1.2.0", - "webpack-log": "2.0.0" + "memory-fs": "~0.4.1", + "mime": "^2.3.1", + "range-parser": "^1.0.3", + "webpack-log": "^2.0.0" }, "dependencies": { "mime": { @@ -5011,32 +5016,32 @@ "dev": true, "requires": { "ansi-html": "0.0.7", - "bonjour": "3.5.0", - "chokidar": "2.0.4", - "compression": "1.7.3", - "connect-history-api-fallback": "1.5.0", - "debug": "3.2.6", - "del": "3.0.0", - "express": "4.16.4", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.18.0", - "import-local": "2.0.0", - "internal-ip": "3.0.1", - "ip": "1.1.5", - "killable": "1.0.1", - "loglevel": "1.6.1", - "opn": "5.4.0", - "portfinder": "1.0.19", - "schema-utils": "1.0.0", - "selfsigned": "1.10.4", - "serve-index": "1.9.1", + "bonjour": "^3.5.0", + "chokidar": "^2.0.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "~0.18.0", + "import-local": "^2.0.0", + "internal-ip": "^3.0.1", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "schema-utils": "^1.0.0", + "selfsigned": "^1.9.1", + "serve-index": "^1.7.2", "sockjs": "0.3.19", "sockjs-client": "1.3.0", - "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "5.5.0", + "spdy": "^3.4.1", + "strip-ansi": "^3.0.0", + "supports-color": "^5.1.0", "webpack-dev-middleware": "3.4.0", - "webpack-log": "2.0.0", + "webpack-log": "^2.0.0", "yargs": "12.0.2" }, "dependencies": { @@ -5052,7 +5057,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "ms": { @@ -5067,9 +5072,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.5.4", - "ajv-errors": "1.0.0", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, "strip-ansi": { @@ -5078,7 +5083,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -5089,8 +5094,8 @@ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "ansi-colors": "3.2.1", - "uuid": "3.3.2" + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" } }, "webpack-sources": { @@ -5099,8 +5104,8 @@ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { - "source-list-map": "2.0.1", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -5117,8 +5122,8 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": "0.5.0", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -5133,7 +5138,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -5148,7 +5153,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -5157,8 +5162,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -5173,7 +5178,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -5182,9 +5187,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -5193,7 +5198,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -5234,18 +5239,18 @@ "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "2.0.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "10.1.0" + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" }, "dependencies": { "find-up": { @@ -5254,7 +5259,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -5263,8 +5268,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -5273,7 +5278,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -5282,7 +5287,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.0.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -5299,7 +5304,7 @@ "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } diff --git a/Day-22-Hexagon-Tiling/package.json b/Day-22-Hexagon-Tiling/package.json index 693e879..f0c01cf 100644 --- a/Day-22-Hexagon-Tiling/package.json +++ b/Day-22-Hexagon-Tiling/package.json @@ -19,6 +19,7 @@ "dependencies": { "@tensorflow/tfjs": "^0.13.4", "p5": "^0.7.2", + "startaudiocontext": "^1.2.1", "tfjs": "^0.6.0", "tone": "^0.12.80" } diff --git a/Day-22-Hexagon-Tiling/src/index.js b/Day-22-Hexagon-Tiling/src/index.js index 6816823..bbfea2e 100644 --- a/Day-22-Hexagon-Tiling/src/index.js +++ b/Day-22-Hexagon-Tiling/src/index.js @@ -1,5 +1,6 @@ import p5 from 'p5/lib/p5.min'; import Tone from 'tone'; +import StartAudioContext from 'startaudiocontext'; const sketch = (p) => { var phaser = new Tone.Phaser({ @@ -218,6 +219,9 @@ const sketch = (p) => { p.save(Date.now() + ".jpg"); } } + p.mousePressed = () => { + StartAudioContext(Tone.context).then(function(){}); + } } export default sketch; new p5(sketch); \ No newline at end of file diff --git a/Day-23-Prime-Distribution/dist/main.js b/Day-23-Prime-Distribution/dist/main.js index 9bbe713..b8fb5d2 100644 --- a/Day-23-Prime-Distribution/dist/main.js +++ b/Day-23-Prime-Distribution/dist/main.js @@ -1,8 +1,14 @@ -!function(t){var e={};function i(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=t,i.c=e,i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)i.d(r,n,function(e){return t[e]}.bind(null,n));return r},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=2)}([function(t,e,i){var r;void 0===(r=function(){return function(){"use strict";var t;function e(e){e(t)} +!function(t){var e={};function i(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=t,i.c=e,i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)i.d(r,n,function(e){return t[e]}.bind(null,n));return r},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=3)}([function(t,e,i){var r;void 0===(r=function(){return function(){"use strict";var t;function e(e){e(t)} /** * Tone.js * @author Yotam Mann * @license http://opensource.org/licenses/MIT MIT License * @copyright 2014-2018 Yotam Mann - */return function(e){t=e()}(function(){var t=function(){if(!(this instanceof t))throw new Error("constructor needs to be called with the 'new' keyword")};t.prototype.toString=function(){for(var e in t){var i=e[0].match(/^[A-Z]$/),r=t[e]===this.constructor;if(t.isFunction(t[e])&&i&&r)return e}return"Tone"},t.prototype.dispose=function(){return this},t.prototype.set=function(e,i,r){if(t.isObject(e))r=i;else if(t.isString(e)){var n={};n[e]=i,e=n}t:for(var o in e){i=e[o];var s=this;if(-1!==o.indexOf(".")){for(var a=o.split("."),h=0;hthis.memory){var r=this.length-this.memory;this._timeline.splice(0,r)}return this},t.Timeline.prototype.remove=function(t){var e=this._timeline.indexOf(t);return-1!==e&&this._timeline.splice(e,1),this},t.Timeline.prototype.get=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return-1!==r?this._timeline[r]:null},t.Timeline.prototype.peek=function(){return this._timeline[0]},t.Timeline.prototype.shift=function(){return this._timeline.shift()},t.Timeline.prototype.getAfter=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return r+10&&this._timeline[r-1][i]=0?this._timeline[n-1]:null},t.Timeline.prototype.cancel=function(t){if(this._timeline.length>1){var e=this._search(t);if(e>=0)if(this._timeline[e].time===t){for(var i=e;i>=0&&this._timeline[i].time===t;i--)e=i;this._timeline=this._timeline.slice(0,e)}else this._timeline=this._timeline.slice(0,e+1);else this._timeline=[]}else 1===this._timeline.length&&this._timeline[0].time>=t&&(this._timeline=[]);return this},t.Timeline.prototype.cancelBefore=function(t){var e=this._search(t);return e>=0&&(this._timeline=this._timeline.slice(e+1)),this},t.Timeline.prototype.previousEvent=function(t){var e=this._timeline.indexOf(t);return e>0?this._timeline[e-1]:null},t.Timeline.prototype._search=function(e,i){if(0===this._timeline.length)return-1;i=t.defaultArg(i,"time");var r=0,n=this._timeline.length,o=n;if(n>0&&this._timeline[n-1][i]<=e)return n-1;for(;re)return s;a[i]>e?o=s:r=s+1}return-1},t.Timeline.prototype._iterate=function(e,i,r){i=t.defaultArg(i,0),r=t.defaultArg(r,this._timeline.length-1),this._timeline.slice(i,r+1).forEach(function(t){e.call(this,t)}.bind(this))},t.Timeline.prototype.forEach=function(t){return this._iterate(t),this},t.Timeline.prototype.forEachBefore=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(e,0,i),this},t.Timeline.prototype.forEachAfter=function(t,e){var i=this._search(t);return this._iterate(e,i+1),this},t.Timeline.prototype.forEachBetween=function(t,e,i){var r=this._search(t),n=this._search(e);return-1!==r&&-1!==n?(this._timeline[r].time!==t&&(r+=1),this._timeline[n].time===e&&(n-=1),this._iterate(i,r,n)):-1===r&&this._iterate(i,0,n),this},t.Timeline.prototype.forEachFrom=function(t,e){for(var i=this._search(t);i>=0&&this._timeline[i].time>=t;)i--;return this._iterate(e,i+1),this},t.Timeline.prototype.forEachAtTime=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(function(i){i.time===t&&e.call(this,i)},0,i),this},t.Timeline.prototype.dispose=function(){return t.prototype.dispose.call(this),this._timeline=null,this},t.Timeline}),e(function(t){t.supported&&(!window.hasOwnProperty("OfflineAudioContext")&&window.hasOwnProperty("webkitOfflineAudioContext")&&(window.OfflineAudioContext=window.webkitOfflineAudioContext),new OfflineAudioContext(1,1,44100).startRendering()instanceof Promise||(OfflineAudioContext.prototype._native_startRendering=OfflineAudioContext.prototype.startRendering,OfflineAudioContext.prototype.startRendering=function(){return new Promise(function(t){this.oncomplete=function(e){t(e.renderedBuffer)},this._native_startRendering()}.bind(this))}))}),e(function(t){if(t.supported){!window.hasOwnProperty("AudioContext")&&window.hasOwnProperty("webkitAudioContext")&&(window.AudioContext=window.webkitAudioContext),AudioContext.prototype.close||(AudioContext.prototype.close=function(){return t.isFunction(this.suspend)&&this.suspend(),Promise.resolve()}),AudioContext.prototype.resume||(AudioContext.prototype.resume=function(){return Promise.resolve()}),!AudioContext.prototype.createGain&&AudioContext.prototype.createGainNode&&(AudioContext.prototype.createGain=AudioContext.prototype.createGainNode),!AudioContext.prototype.createDelay&&AudioContext.prototype.createDelayNode&&(AudioContext.prototype.createDelay=AudioContext.prototype.createDelayNode);var e=!1,i=new OfflineAudioContext(1,1,44100),r=new Uint32Array([1179011410,48,1163280727,544501094,16,131073,44100,176400,1048580,1635017060,8,0,0,0,0]).buffer;try{i.decodeAudioData(r)instanceof Promise&&(e=!0)}catch(t){e=!1}e||(AudioContext.prototype._native_decodeAudioData=AudioContext.prototype.decodeAudioData,AudioContext.prototype.decodeAudioData=function(t){return new Promise(function(e,i){this._native_decodeAudioData(t,e,i)}.bind(this))})}}),e(function(t){t.Context=function(){t.Emitter.call(this);var i=t.defaults(arguments,["context"],t.Context);if(!i.context&&(i.context=new window.AudioContext,!i.context))throw new Error("could not create AudioContext. Possibly too many AudioContexts running already.");for(var r in this._context=i.context,this._context)this._defineProperty(this._context,r);this._latencyHint=i.latencyHint,this._constants={},this.lookAhead=i.lookAhead,this._computedUpdateInterval=0,this._ticker=new e(this.emit.bind(this,"tick"),i.clockSource,i.updateInterval),this._timeouts=new t.Timeline,this._timeoutIds=0,this.on("tick",this._timeoutLoop.bind(this))},t.extend(t.Context,t.Emitter),t.Emitter.mixin(t.Context),t.Context.defaults={clockSource:"worker",latencyHint:"interactive",lookAhead:.1,updateInterval:.03},t.Context.prototype._defineProperty=function(e,i){t.isUndef(this[i])&&Object.defineProperty(this,i,{get:function(){return"function"==typeof e[i]?e[i].bind(e):e[i]},set:function(t){e[i]=t}})},t.Context.prototype.now=function(){return this._context.currentTime+this.lookAhead},t.Context.prototype.ready=function(){return new Promise(function(t){"running"===this._context.state?t():this._context.resume().then(function(){t()})}.bind(this))},t.Context.prototype.close=function(){return this._context.close().then(function(){t.Context.emit("close",this)}.bind(this))},t.Context.prototype.getConstant=function(t){if(this._constants[t])return this._constants[t];for(var e=this._context.createBuffer(1,128,this._context.sampleRate),i=e.getChannelData(0),r=0;r1&&(this.input=new Array(t)),1===e?this.output=this.context.createGain():e>1&&(this.output=new Array(e))},Object.defineProperty(t.AudioNode.prototype,"channelCount",{get:function(){return this.output.channelCount},set:function(t){return this.output.channelCount=t}}),Object.defineProperty(t.AudioNode.prototype,"channelCountMode",{get:function(){return this.output.channelCountMode},set:function(t){return this.output.channelCountMode=t}}),Object.defineProperty(t.AudioNode.prototype,"channelInterpretation",{get:function(){return this.output.channelInterpretation},set:function(t){return this.output.channelInterpretation=t}}),Object.defineProperty(t.AudioNode.prototype,"numberOfInputs",{get:function(){return this.input?t.isArray(this.input)?this.input.length:1:0}}),Object.defineProperty(t.AudioNode.prototype,"numberOfOutputs",{get:function(){return this.output?t.isArray(this.output)?this.output.length:1:0}}),t.AudioNode.prototype._onConnect=function(){},t.AudioNode.prototype.connect=function(e,i,r){return e._onConnect&&e._onConnect(this),t.isArray(this.output)?(i=t.defaultArg(i,0),this.output[i].connect(e,0,r)):this.output.connect(e,i,r),this},t.AudioNode.prototype.disconnect=function(e,i,r){t.isArray(this.output)?t.isNumber(e)?this.output[e].disconnect():(i=t.defaultArg(i,0),this.output[i].disconnect(e,0,r)):this.output.disconnect.apply(this.output,arguments)},t.AudioNode.prototype.chain=function(){for(var t=this,e=0;e3&&(r=parseFloat(parseFloat(r).toFixed(3))),[i,e,r].join(":")},t.Time.prototype.toTicks=function(){var t=this._beatsToUnits(1),e=this.valueOf()/t;return Math.round(e*this._getPPQ())},t.Time.prototype.toSeconds=function(){return this.valueOf()},t.Time.prototype.toMidi=function(){return t.Frequency.ftom(this.toFrequency())},t.Time}),e(function(t){return t.TransportTime=function(e,i){if(!(this instanceof t.TransportTime))return new t.TransportTime(e,i);t.Time.call(this,e,i)},t.extend(t.TransportTime,t.Time),t.TransportTime.prototype._now=function(){return t.Transport.seconds},t.TransportTime}),e(function(t){return t.Type={Default:"number",Time:"time",Frequency:"frequency",TransportTime:"transportTime",Ticks:"ticks",NormalRange:"normalRange",AudioRange:"audioRange",Decibels:"db",Interval:"interval",BPM:"bpm",Positive:"positive",Gain:"gain",Cents:"cents",Degrees:"degrees",MIDI:"midi",BarsBeatsSixteenths:"barsBeatsSixteenths",Samples:"samples",Hertz:"hertz",Note:"note",Milliseconds:"milliseconds",Seconds:"seconds",Notation:"notation"},t.prototype.toSeconds=function(e){return t.isNumber(e)?e:t.isUndef(e)?this.now():t.isString(e)?new t.Time(e).toSeconds():e instanceof t.TimeBase?e.toSeconds():void 0},t.prototype.toFrequency=function(e){return t.isNumber(e)?e:t.isString(e)||t.isUndef(e)?new t.Frequency(e).valueOf():e instanceof t.TimeBase?e.toFrequency():void 0},t.prototype.toTicks=function(e){return t.isNumber(e)||t.isString(e)?new t.TransportTime(e).toTicks():t.isUndef(e)?t.Transport.ticks:e instanceof t.TimeBase?e.toTicks():void 0},t}),e(function(t){return t.Param=function(){var e=t.defaults(arguments,["param","units","convert"],t.Param);t.AudioNode.call(this),this._param=this.input=e.param,this.units=e.units,this.convert=e.convert,this.overridden=!1,this._events=new t.Timeline(1e3),t.isDefined(e.value)&&this._param&&(this.value=e.value)},t.extend(t.Param,t.AudioNode),t.Param.defaults={units:t.Type.Default,convert:!0,param:void 0},Object.defineProperty(t.Param.prototype,"value",{get:function(){var t=this.now();return this._toUnits(this.getValueAtTime(t))},set:function(t){this._initialValue=this._fromUnits(t),this.cancelScheduledValues(this.context.currentTime),this.setValueAtTime(t,this.context.currentTime)}}),Object.defineProperty(t.Param.prototype,"minValue",{get:function(){return this.units===t.Type.Time||this.units===t.Type.Frequency||this.units===t.Type.NormalRange||this.units===t.Type.Positive||this.units===t.Type.BPM?0:this.units===t.Type.AudioRange?-1:this.units===t.Type.Decibels?-1/0:this._param.minValue}}),Object.defineProperty(t.Param.prototype,"maxValue",{get:function(){return this.units===t.Type.NormalRange||this.units===t.Type.AudioRange?1:this._param.maxValue}}),t.Param.prototype._fromUnits=function(e){if(!this.convert&&!t.isUndef(this.convert)||this.overridden)return e;switch(this.units){case t.Type.Time:return this.toSeconds(e);case t.Type.Frequency:return this.toFrequency(e);case t.Type.Decibels:return t.dbToGain(e);case t.Type.NormalRange:return Math.min(Math.max(e,0),1);case t.Type.AudioRange:return Math.min(Math.max(e,-1),1);case t.Type.Positive:return Math.max(e,0);default:return e}},t.Param.prototype._toUnits=function(e){if(!this.convert&&!t.isUndef(this.convert))return e;switch(this.units){case t.Type.Decibels:return t.gainToDb(e);default:return e}},t.Param.prototype._minOutput=1e-5,t.Param.AutomationType={Linear:"linearRampToValueAtTime",Exponential:"exponentialRampToValueAtTime",Target:"setTargetAtTime",SetValue:"setValueAtTime"},t.Param.prototype.setValueAtTime=function(e,i){return i=this.toSeconds(i),e=this._fromUnits(e),this._events.add({type:t.Param.AutomationType.SetValue,value:e,time:i}),this._param.setValueAtTime(e,i),this},t.Param.prototype.getValueAtTime=function(e){e=this.toSeconds(e);var i=this._events.getAfter(e),r=this._events.get(e),n=t.defaultArg(this._initialValue,this._param.defaultValue),o=n;if(null===r)o=n;else if(r.type===t.Param.AutomationType.Target){var s,a=this._events.getBefore(r.time);s=null===a?n:a.value,o=this._exponentialApproach(r.time,s,r.value,r.constant,e)}else o=null===i?r.value:i.type===t.Param.AutomationType.Linear?this._linearInterpolate(r.time,r.value,i.time,i.value,e):i.type===t.Param.AutomationType.Exponential?this._exponentialInterpolate(r.time,r.value,i.time,i.value,e):r.value;return o},t.Param.prototype.setRampPoint=function(t){t=this.toSeconds(t);var e=this.getValueAtTime(t);return this.cancelAndHoldAtTime(t),0===e&&(e=this._minOutput),this.setValueAtTime(this._toUnits(e),t),this},t.Param.prototype.linearRampToValueAtTime=function(e,i){return e=this._fromUnits(e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Linear,value:e,time:i}),this._param.linearRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampToValueAtTime=function(e,i){return e=this._fromUnits(e),e=Math.max(this._minOutput,e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Exponential,time:i,value:e}),this._param.exponentialRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.linearRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.linearRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.targetRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialApproachValueAtTime(t,i,e),this},t.Param.prototype.exponentialApproachValueAtTime=function(t,e,i){var r=Math.log(this.toSeconds(i)+1)/Math.log(200);return e=this.toSeconds(e),this.setTargetAtTime(t,e,r)},t.Param.prototype.setTargetAtTime=function(e,i,r){if(e=this._fromUnits(e),r<=0)throw new Error("timeConstant must be greater than 0");return i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Target,value:e,time:i,constant:r}),this._param.setTargetAtTime(e,i,r),this},t.Param.prototype.setValueCurveAtTime=function(e,i,r,n){n=t.defaultArg(n,1),r=this.toSeconds(r),i=this.toSeconds(i),this.setValueAtTime(e[0]*n,i);for(var o=r/(e.length-1),s=1;s=0;)this.emit("tick"),this._currentTime+=this.blockTime;return this._context.startRendering()},t.OfflineContext.prototype.close=function(){return this._context=null,Promise.resolve()},t.OfflineContext}),e(function(t){if(t.supported){var e=navigator.userAgent.toLowerCase();e.includes("safari")&&!e.includes("chrome")&&e.includes("mobile")&&(t.OfflineContext.prototype.createBufferSource=function(){var t=this._context.createBufferSource(),e=t.start;return t.start=function(i){this.setTimeout(function(){e.call(t,i)}.bind(this),0)}.bind(this),t})}}),e(function(t){return t.Gain=function(){var e=t.defaults(arguments,["gain","units"],t.Gain);t.AudioNode.call(this),this.input=this.output=this._gainNode=this.context.createGain(),this.gain=new t.Param({param:this._gainNode.gain,units:e.units,value:e.gain,convert:e.convert}),this._readOnly("gain")},t.extend(t.Gain,t.AudioNode),t.Gain.defaults={gain:1,convert:!0},t.Gain.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._gainNode.disconnect(),this._gainNode=null,this._writable("gain"),this.gain.dispose(),this.gain=null},t.Gain}),e(function(t){if(t.supported&&!AudioContext.prototype.createConstantSource){var e=function(t){this.context=t;for(var e=t.createBuffer(1,128,t.sampleRate),i=e.getChannelData(0),r=0;r0&&(n=(1-s)/(1/n)),"linear"===this._attackCurve)this._sig.linearRampTo(i,n,e);else if("exponential"===this._attackCurve)this._sig.targetRampTo(i,n,e);else if(n>0){this._sig.cancelAndHoldAtTime(e);var a=this._attackCurve;if(n0){var r=this.toSeconds(this.release);if("linear"===this._releaseCurve)this._sig.linearRampTo(0,r,e);else if("exponential"===this._releaseCurve)this._sig.targetRampTo(0,r,e);else{var n=this._releaseCurve;t.isArray(n)&&(this._sig.cancelAndHoldAtTime(e),this._sig.setValueCurveAtTime(n,e,r,i))}}return this},t.Envelope.prototype.getValueAtTime=function(t){return this._sig.getValueAtTime(t)},t.Envelope.prototype.triggerAttackRelease=function(t,e,i){return e=this.toSeconds(e),this.triggerAttack(e,i),this.triggerRelease(e+this.toSeconds(t)),this},t.Envelope.prototype.cancel=function(t){return this._sig.cancelScheduledValues(t),this},t.Envelope.prototype.connect=t.SignalBase.prototype.connect,function(){var e,i,r=[];for(e=0;e<128;e++)r[e]=Math.sin(e/127*(Math.PI/2));var n=[];for(e=0;e<127;e++){i=e/127;var o=Math.sin(i*(2*Math.PI)*6.4-Math.PI/2)+1;n[e]=o/10+.83*i}n[127]=1;var s=[];for(e=0;e<128;e++)s[e]=Math.ceil(e/127*5)/5;var a=[];for(e=0;e<128;e++)i=e/127,a[e]=.5*(1-Math.cos(Math.PI*i));var h=[];for(e=0;e<128;e++){i=e/127;var l=4*Math.pow(i,3)+.2,u=Math.cos(l*Math.PI*2*i);h[e]=Math.abs(u*(1-i))}function c(t){for(var e=new Array(t.length),i=0;i0?a:(-n-s)/o)+i.time}return i?0===i.value?1/0:i.time+(e-i.ticks)/i.value:e/this._initialValue},t.TickSignal.prototype.ticksToTime=function(e,i){return i=this.toSeconds(i),new t.Time(this.getDurationOfTicks(e,i))},t.TickSignal.prototype.timeToTicks=function(e,i){i=this.toSeconds(i),e=this.toSeconds(e);var r=this.getTicksAtTime(i),n=this.getTicksAtTime(i+e);return new t.Ticks(n-r)},t.TickSignal}),e(function(t){return t.TimelineState=function(e){t.Timeline.call(this),this._initial=e},t.extend(t.TimelineState,t.Timeline),t.TimelineState.prototype.getValueAtTime=function(t){var e=this.get(t);return null!==e?e.state:this._initial},t.TimelineState.prototype.setStateAtTime=function(t,e){return this.add({state:t,time:e}),this},t.TimelineState.prototype.getLastState=function(t,e){e=this.toSeconds(e);for(var i=this._search(e);i>=0;i--){var r=this._timeline[i];if(r.state===t)return r}},t.TimelineState.prototype.getNextState=function(t,e){e=this.toSeconds(e);var i=this._search(e);if(-1!==i)for(var r=i;r0&&(this._tickOffset.cancel(i.time),this._state.cancel(i.time))}return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this.setTicksAtTime(0,e),this},t.TickSource.prototype.pause=function(e){return e=this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started&&this._state.setStateAtTime(t.State.Paused,e),this},t.TickSource.prototype.cancel=function(t){return t=this.toSeconds(t),this._state.cancel(t),this._tickOffset.cancel(t),this},t.TickSource.prototype.getTicksAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.ticks,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=this.frequency.getTicksAtTime(e.time)-this.frequency.getTicksAtTime(i)),n=e}.bind(this)),this._state.remove(r),o},Object.defineProperty(t.TickSource.prototype,"ticks",{get:function(){return this.getTicksAtTime(this.now())},set:function(t){this.setTicksAtTime(t,this.now())}}),Object.defineProperty(t.TickSource.prototype,"seconds",{get:function(){return this.getSecondsAtTime(this.now())},set:function(t){var e=this.now(),i=this.frequency.timeToTicks(t,e);this.setTicksAtTime(i,e)}}),t.TickSource.prototype.getSecondsAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.seconds,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=e.time-i),n=e}.bind(this)),this._state.remove(r),o},t.TickSource.prototype.setTicksAtTime=function(t,e){return e=this.toSeconds(e),this._tickOffset.cancel(e),this._tickOffset.add({time:e,ticks:t,seconds:this.frequency.getDurationOfTicks(t,e)}),this},t.TickSource.prototype.getStateAtTime=function(t){return t=this.toSeconds(t),this._state.getValueAtTime(t)},t.TickSource.prototype.getTimeOfTick=function(e,i){i=t.defaultArg(i,this.now());var r=this._tickOffset.get(i),n=this._state.get(i),o=Math.max(r.time,n.time),s=this.frequency.getTicksAtTime(o)+e-r.ticks;return this.frequency.getTimeOfTick(s)},t.TickSource.prototype.forEachTickBetween=function(e,i,r){var n=this._state.get(e);if(this._state.forEachBetween(e,i,function(i){n.state===t.State.Started&&i.state!==t.State.Started&&this.forEachTickBetween(Math.max(n.time,e),i.time-this.sampleTime,r),n=i}.bind(this)),e=Math.max(n.time,e),n.state===t.State.Started&&this._state){var o=this.frequency.getTicksAtTime(e),s=(o-this.frequency.getTicksAtTime(n.time))%1;0!==s&&(s=1-s);for(var a=this.frequency.getTimeOfTick(o+s),h=null;a0)if(null===t.left.right)(e=t.left).right=t.right,i=e;else{for(e=t.left.right;null!==e.right;)e=e.right;e.parent.right=e.left,i=e.parent,e.left=t.left,e.right=t.right}else if(null===t.right.left)(e=t.right).left=t.left,i=e;else{for(e=t.right.left;null!==e.left;)e=e.left;e.parent=e.parent,e.parent.left=e.right,i=e.parent,e.left=t.left,e.right=t.right}null!==t.parent?t.isLeftChild()?t.parent.left=e:t.parent.right=e:this._setRoot(e),this._rebalance(i)}t.dispose()},t.IntervalTimeline.prototype._rotateLeft=function(t){var e=t.parent,i=t.isLeftChild(),r=t.right;t.right=r.left,r.left=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rotateRight=function(t){var e=t.parent,i=t.isLeftChild(),r=t.left;t.left=r.right,r.right=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rebalance=function(t){var e=t.getBalance();e>1?t.left.getBalance()<0?this._rotateLeft(t.left):this._rotateRight(t):e<-1&&(t.right.getBalance()>0?this._rotateRight(t.right):this._rotateLeft(t))},t.IntervalTimeline.prototype.get=function(t){if(null!==this._root){var e=[];if(this._root.search(t,e),e.length>0){for(var i=e[0],r=1;ri.low&&(i=e[r]);return i.event}}return null},t.IntervalTimeline.prototype.forEach=function(t){if(null!==this._root){var e=[];this._root.traverse(function(t){e.push(t)});for(var i=0;i=0;r--){var n=i[r].event;n&&e(n)}}return this},t.IntervalTimeline.prototype.forEachFrom=function(t,e){if(null!==this._root){var i=[];this._root.searchAfter(t,i);for(var r=i.length-1;r>=0;r--)e(i[r].event)}return this},t.IntervalTimeline.prototype.dispose=function(){var t=[];null!==this._root&&this._root.traverse(function(e){t.push(e)});for(var e=0;ethis.max||(null!==this.left&&this.left.search(t,e),this.low<=t&&this.high>t&&e.push(this),this.low>t||null!==this.right&&this.right.search(t,e))},e.prototype.searchAfter=function(t,e){this.low>=t&&(e.push(this),null!==this.left&&this.left.searchAfter(t,e)),null!==this.right&&this.right.searchAfter(t,e)},e.prototype.traverse=function(t){t(this),null!==this.left&&this.left.traverse(t),null!==this.right&&this.right.traverse(t)},e.prototype.updateHeight=function(){null!==this.left&&null!==this.right?this.height=Math.max(this.left.height,this.right.height)+1:null!==this.right?this.height=this.right.height+1:null!==this.left?this.height=this.left.height+1:this.height=0},e.prototype.updateMax=function(){this.max=this.high,null!==this.left&&(this.max=Math.max(this.max,this.left.max)),null!==this.right&&(this.max=Math.max(this.max,this.right.max))},e.prototype.getBalance=function(){var t=0;return null!==this.left&&null!==this.right?t=this.left.height-this.right.height:null!==this.left?t=this.left.height+1:null!==this.right&&(t=-(this.right.height+1)),t},e.prototype.isLeftChild=function(){return null!==this.parent&&this.parent.left===this},Object.defineProperty(e.prototype,"left",{get:function(){return this._left},set:function(t){this._left=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),Object.defineProperty(e.prototype,"right",{get:function(){return this._right},set:function(t){this._right=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),e.prototype.dispose=function(){this.parent=null,this._left=null,this._right=null,this.event=null},t.IntervalTimeline}),e(function(t){return t.Ticks=function(e,i){if(!(this instanceof t.Ticks))return new t.Ticks(e,i);t.TransportTime.call(this,e,i)},t.extend(t.Ticks,t.TransportTime),t.Ticks.prototype._defaultUnits="i",t.Ticks.prototype._now=function(){return t.Transport.ticks},t.Ticks.prototype._beatsToUnits=function(t){return this._getPPQ()*t},t.Ticks.prototype._secondsToUnits=function(t){return t/(60/this._getBpm())*this._getPPQ()},t.Ticks.prototype._ticksToUnits=function(t){return t},t.Ticks.prototype.toTicks=function(){return this.valueOf()},t.Ticks.prototype.toSeconds=function(){return this.valueOf()/this._getPPQ()*(60/this._getBpm())},t.Ticks}),e(function(t){return t.TransportEvent=function(e,i){i=t.defaultArg(i,t.TransportEvent.defaults),t.call(this),this.Transport=e,this.id=t.TransportEvent._eventId++,this.time=t.Ticks(i.time),this.callback=i.callback,this._once=i.once},t.extend(t.TransportEvent),t.TransportEvent.defaults={once:!1,callback:t.noOp},t.TransportEvent._eventId=0,t.TransportEvent.prototype.invoke=function(t){this.callback&&(this.callback(t),this._once&&this.Transport&&this.Transport.clear(this.id))},t.TransportEvent.prototype.dispose=function(){return t.prototype.dispose.call(this),this.Transport=null,this.callback=null,this.time=null,this},t.TransportEvent}),e(function(t){return t.TransportRepeatEvent=function(e,i){t.TransportEvent.call(this,e,i),i=t.defaultArg(i,t.TransportRepeatEvent.defaults),this.duration=t.Ticks(i.duration),this._interval=t.Ticks(i.interval),this._currentId=-1,this._nextId=-1,this._nextTick=this.time,this._boundRestart=this._restart.bind(this),this.Transport.on("start loopStart",this._boundRestart),this._restart()},t.extend(t.TransportRepeatEvent,t.TransportEvent),t.TransportRepeatEvent.defaults={duration:1/0,interval:1},t.TransportRepeatEvent.prototype.invoke=function(e){this._createEvents(e),t.TransportEvent.prototype.invoke.call(this,e)},t.TransportRepeatEvent.prototype._createEvents=function(e){var i=this.Transport.getTicksAtTime(e);i>=this.time&&i>=this._nextTick&&this._nextTick+this._intervalthis.time&&(this._nextTick=this.time+Math.ceil((i-this.time)/this._interval)*this._interval),this._currentId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick)),this._nextTick+=this._interval,this._nextId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick))},t.TransportRepeatEvent.prototype.dispose=function(){return this.Transport.clear(this._currentId),this.Transport.clear(this._nextId),this.Transport.off("start loopStart",this._boundRestart),this._boundCreateEvents=null,t.TransportEvent.prototype.dispose.call(this),this.duration=null,this._interval=null,this},t.TransportRepeatEvent}),e(function(t){t.Transport=function(){t.Emitter.call(this),t.getContext(function(){this.loop=!1,this._loopStart=0,this._loopEnd=0,this._ppq=e.defaults.PPQ,this._clock=new t.Clock({callback:this._processTick.bind(this),frequency:0}),this._bindClockEvents(),this.bpm=this._clock.frequency,this.bpm._toUnits=this._toUnits.bind(this),this.bpm._fromUnits=this._fromUnits.bind(this),this.bpm.units=t.Type.BPM,this.bpm.value=e.defaults.bpm,this._readOnly("bpm"),this._timeSignature=e.defaults.timeSignature,this._scheduledEvents={},this._timeline=new t.Timeline,this._repeatedEvents=new t.IntervalTimeline,this._syncedSignals=[],this._swingTicks=e.defaults.PPQ/2,this._swingAmount=0}.bind(this))},t.extend(t.Transport,t.Emitter),t.Transport.defaults={bpm:120,swing:0,swingSubdivision:"8n",timeSignature:4,loopStart:0,loopEnd:"4m",PPQ:192},t.Transport.prototype._processTick=function(e,i){if(this._swingAmount>0&&i%this._ppq!=0&&i%(2*this._swingTicks)!=0){var r=i%(2*this._swingTicks)/(2*this._swingTicks),n=Math.sin(r*Math.PI)*this._swingAmount;e+=t.Ticks(2*this._swingTicks/3).toSeconds()*n}this.loop&&i>=this._loopEnd&&(this.emit("loopEnd",e),this._clock.setTicksAtTime(this._loopStart,e),i=this._loopStart,this.emit("loopStart",e,this._clock.getSecondsAtTime(e)),this.emit("loop",e)),this._timeline.forEachAtTime(i,function(t){t.invoke(e)})},t.Transport.prototype.schedule=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e});return this._addEvent(r,this._timeline)},t.Transport.prototype.scheduleRepeat=function(e,i,r,n){var o=new t.TransportRepeatEvent(this,{callback:e,interval:t.Time(i),time:t.TransportTime(r),duration:t.Time(t.defaultArg(n,1/0))});return this._addEvent(o,this._repeatedEvents)},t.Transport.prototype.scheduleOnce=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e,once:!0});return this._addEvent(r,this._timeline)},t.Transport.prototype.clear=function(t){if(this._scheduledEvents.hasOwnProperty(t)){var e=this._scheduledEvents[t.toString()];e.timeline.remove(e.event),e.event.dispose(),delete this._scheduledEvents[t.toString()]}return this},t.Transport.prototype._addEvent=function(t,e){return this._scheduledEvents[t.id.toString()]={event:t,timeline:e},e.add(t),t.id},t.Transport.prototype.cancel=function(e){return e=t.defaultArg(e,0),e=this.toTicks(e),this._timeline.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this._repeatedEvents.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this},t.Transport.prototype._bindClockEvents=function(){this._clock.on("start",function(e,i){i=t.Ticks(i).toSeconds(),this.emit("start",e,i)}.bind(this)),this._clock.on("stop",function(t){this.emit("stop",t)}.bind(this)),this._clock.on("pause",function(t){this.emit("pause",t)}.bind(this))},Object.defineProperty(t.Transport.prototype,"state",{get:function(){return this._clock.getStateAtTime(this.now())}}),t.Transport.prototype.start=function(e,i){return t.isDefined(i)&&(i=this.toTicks(i)),this._clock.start(e,i),this},t.Transport.prototype.stop=function(t){return this._clock.stop(t),this},t.Transport.prototype.pause=function(t){return this._clock.pause(t),this},t.Transport.prototype.toggle=function(e){return e=this.toSeconds(e),this._clock.getStateAtTime(e)!==t.State.Started?this.start(e):this.stop(e),this},Object.defineProperty(t.Transport.prototype,"timeSignature",{get:function(){return this._timeSignature},set:function(e){t.isArray(e)&&(e=e[0]/e[1]*4),this._timeSignature=e}}),Object.defineProperty(t.Transport.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t)}}),t.Transport.prototype.setLoopPoints=function(t,e){return this.loopStart=t,this.loopEnd=e,this},Object.defineProperty(t.Transport.prototype,"swing",{get:function(){return this._swingAmount},set:function(t){this._swingAmount=t}}),Object.defineProperty(t.Transport.prototype,"swingSubdivision",{get:function(){return t.Ticks(this._swingTicks).toNotation()},set:function(t){this._swingTicks=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"position",{get:function(){var e=this.now(),i=this._clock.getTicksAtTime(e);return t.Ticks(i).toBarsBeatsSixteenths()},set:function(t){var e=this.toTicks(t);this.ticks=e}}),Object.defineProperty(t.Transport.prototype,"seconds",{get:function(){return this._clock.seconds},set:function(t){var e=this.now(),i=this.bpm.timeToTicks(t,e);this.ticks=i}}),Object.defineProperty(t.Transport.prototype,"progress",{get:function(){if(this.loop){var t=this.now();return(this._clock.getTicksAtTime(t)-this._loopStart)/(this._loopEnd-this._loopStart)}return 0}}),Object.defineProperty(t.Transport.prototype,"ticks",{get:function(){return this._clock.ticks},set:function(e){if(this._clock.ticks!==e){var i=this.now();this.state===t.State.Started?(this.emit("stop",i),this._clock.setTicksAtTime(e,i),this.emit("start",i,this.seconds)):this._clock.setTicksAtTime(e,i)}}}),t.Transport.prototype.getTicksAtTime=function(t){return Math.round(this._clock.getTicksAtTime(t))},t.Transport.prototype.getSecondsAtTime=function(t){return this._clock.getSecondsAtTime(t)},Object.defineProperty(t.Transport.prototype,"PPQ",{get:function(){return this._ppq},set:function(t){var e=this.bpm.value;this._ppq=t,this.bpm.value=e}}),t.Transport.prototype._fromUnits=function(t){return 1/(60/t/this.PPQ)},t.Transport.prototype._toUnits=function(t){return t/this.PPQ*60},t.Transport.prototype.nextSubdivision=function(e){if(e=this.toTicks(e),this.state!==t.State.Started)return 0;var i=this.now(),r=e-this.getTicksAtTime(i)%e;return this._clock.nextTickTime(r,i)},t.Transport.prototype.syncSignal=function(e,i){if(!i){var r=this.now();i=0!==e.getValueAtTime(r)?e.getValueAtTime(r)/this.bpm.getValueAtTime(r):0}var n=new t.Gain(i);return this.bpm.chain(n,e._param),this._syncedSignals.push({ratio:n,signal:e,initial:e.value}),e.value=0,this},t.Transport.prototype.unsyncSignal=function(t){for(var e=this._syncedSignals.length-1;e>=0;e--){var i=this._syncedSignals[e];i.signal===t&&(i.ratio.dispose(),i.signal.value=i.initial,this._syncedSignals.splice(e,1))}return this},t.Transport.prototype.dispose=function(){return t.Emitter.prototype.dispose.call(this),this._clock.dispose(),this._clock=null,this._writable("bpm"),this.bpm=null,this._timeline.dispose(),this._timeline=null,this._repeatedEvents.dispose(),this._repeatedEvents=null,this};var e=t.Transport;return t.Transport=new e,t.Context.on("init",function(i){i.Transport instanceof e?t.Transport=i.Transport:t.Transport=new e,i.Transport=t.Transport}),t.Context.on("close",function(t){t.Transport instanceof e&&t.Transport.dispose()}),t.Transport}),e(function(t){return t.Volume=function(){var e=t.defaults(arguments,["volume"],t.Volume);t.AudioNode.call(this),this.output=this.input=new t.Gain(e.volume,t.Type.Decibels),this._unmutedVolume=e.volume,this.volume=this.output.gain,this._readOnly("volume"),this.mute=e.mute},t.extend(t.Volume,t.AudioNode),t.Volume.defaults={volume:0,mute:!1},Object.defineProperty(t.Volume.prototype,"mute",{get:function(){return this.volume.value===-1/0},set:function(t){!this.mute&&t?(this._unmutedVolume=this.volume.value,this.volume.value=-1/0):this.mute&&!t&&(this.volume.value=this._unmutedVolume)}}),t.Volume.prototype.dispose=function(){return this.input.dispose(),t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this.volume.dispose(),this.volume=null,this},t.Volume}),e(function(t){t.Master=function(){t.AudioNode.call(this),t.getContext(function(){this.createInsOuts(1,0),this._volume=this.output=new t.Volume,this.volume=this._volume.volume,this._readOnly("volume"),this.input.chain(this.output,this.context.destination)}.bind(this))},t.extend(t.Master,t.AudioNode),t.Master.defaults={volume:0,mute:!1},Object.defineProperty(t.Master.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Master.prototype.chain=function(){this.input.disconnect(),this.input.chain.apply(this.input,arguments),arguments[arguments.length-1].connect(this.output)},t.Master.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null},t.AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this},window.AudioNode&&(AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this});var e=t.Master;return t.Master=new e,t.Context.on("init",function(i){i.Master instanceof e?t.Master=i.Master:t.Master=new e,i.Master=t.Master}),t.Context.on("close",function(t){t.Master instanceof e&&t.Master.dispose()}),t.Master}),e(function(t){return t.Source=function(e){e=t.defaultArg(e,t.Source.defaults),t.AudioNode.call(this),this._volume=this.output=new t.Volume(e.volume),this.volume=this._volume.volume,this._readOnly("volume"),this._state=new t.TimelineState(t.State.Stopped),this._state.memory=100,this._synced=!1,this._scheduled=[],this._volume.output.output.channelCount=2,this._volume.output.output.channelCountMode="explicit",this.mute=e.mute},t.extend(t.Source,t.AudioNode),t.Source.defaults={volume:0,mute:!1},Object.defineProperty(t.Source.prototype,"state",{get:function(){return this._synced?t.Transport.state===t.State.Started?this._state.getValueAtTime(t.Transport.seconds):t.State.Stopped:this._state.getValueAtTime(this.now())}}),Object.defineProperty(t.Source.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Source.prototype._start=t.noOp,t.Source.prototype.restart=t.noOp,t.Source.prototype._stop=t.noOp,t.Source.prototype.start=function(e,i,r){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started)this._state.cancel(e),this._state.setStateAtTime(t.State.Started,e),this.restart(e,i,r);else if(this._state.setStateAtTime(t.State.Started,e),this._synced){var n=this._state.get(e);n.offset=t.defaultArg(i,0),n.duration=r;var o=t.Transport.schedule(function(t){this._start(t,i,r)}.bind(this),e);this._scheduled.push(o),t.Transport.state===t.State.Started&&this._syncedStart(this.now(),t.Transport.seconds)}else this._start.apply(this,arguments);return this},t.Source.prototype.stop=function(e){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._synced){var i=t.Transport.schedule(this._stop.bind(this),e);this._scheduled.push(i)}else this._stop.apply(this,arguments);return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this},t.Source.prototype.sync=function(){return this._synced=!0,this._syncedStart=function(e,i){if(i>0){var r=this._state.get(i);if(r&&r.state===t.State.Started&&r.time!==i){var n,o=i-this.toSeconds(r.time);r.duration&&(n=this.toSeconds(r.duration)-o),this._start(e,this.toSeconds(r.offset)+o,n)}}}.bind(this),this._syncedStop=function(e){var i=t.Transport.getSecondsAtTime(Math.max(e-this.sampleTime,0));this._state.getValueAtTime(i)===t.State.Started&&this._stop(e)}.bind(this),t.Transport.on("start loopStart",this._syncedStart),t.Transport.on("stop pause loopEnd",this._syncedStop),this},t.Source.prototype.unsync=function(){this._synced&&(t.Transport.off("stop pause loopEnd",this._syncedStop),t.Transport.off("start loopStart",this._syncedStart)),this._synced=!1;for(var e=0;e0}}),Object.defineProperty(t.Buffer.prototype,"duration",{get:function(){return this._buffer?this._buffer.duration:0}}),Object.defineProperty(t.Buffer.prototype,"length",{get:function(){return this._buffer?this._buffer.length:0}}),Object.defineProperty(t.Buffer.prototype,"numberOfChannels",{get:function(){return this._buffer?this._buffer.numberOfChannels:0}}),t.Buffer.prototype.fromArray=function(t){var e=t[0].length>0,i=e?t.length:1,r=e?t[0].length:t.length,n=this.context.createBuffer(i,r,this.context.sampleRate);e||1!==i||(t=[t]);for(var o=0;o=this._startTime&&(-1===this._stopTime||e<=this._stopTime)?t.State.Started:t.State.Stopped},t.OscillatorNode.prototype.start=function(t){if(-1!==this._startTime)throw new Error("cannot call OscillatorNode.start more than once");this._startTime=this.toSeconds(t),this._oscillator.start(this._startTime);var e=this.context.currentTime;return this._gainNode.gain.cancelScheduledValues(e),this._gainNode.gain.setValueAtTime(0,e),this._gainNode.gain.setValueAtTime(1,this._startTime),this},t.OscillatorNode.prototype.setPeriodicWave=function(t){return this._oscillator.setPeriodicWave(t),this},t.OscillatorNode.prototype.stop=function(t){return this.cancelStop(),this._stopTime=this.toSeconds(t),this._gainNode.gain.setValueAtTime(0,this._stopTime),this.context.clearTimeout(this._timeout),this._timeout=this.context.setTimeout(function(){this._oscillator.stop(this.now()),this.onended()}.bind(this),this._stopTime-this.now()),this},t.OscillatorNode.prototype.cancelStop=function(){return-1!==this._startTime&&(this._gainNode.gain.cancelScheduledValues(this._startTime+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime)),this.context.clearTimeout(this._timeout),this._stopTime=-1),this},Object.defineProperty(t.OscillatorNode.prototype,"type",{get:function(){return this._oscillator.type},set:function(t){this._oscillator.type=t}}),t.OscillatorNode.prototype.dispose=function(){return this.context.clearTimeout(this._timeout),t.AudioNode.prototype.dispose.call(this),this.onended=null,this._oscillator.disconnect(),this._oscillator=null,this._gainNode.dispose(),this._gainNode=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this},t.OscillatorNode}),e(function(t){return t.Oscillator=function(){var e=t.defaults(arguments,["frequency","type"],t.Oscillator);t.Source.call(this,e),this._oscillator=null,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this._wave=null,this._partials=t.defaultArg(e.partials,[1]),this._phase=e.phase,this._type=null,this.type=e.type,this.phase=this._phase,this._readOnly(["frequency","detune"])},t.extend(t.Oscillator,t.Source),t.Oscillator.defaults={type:"sine",frequency:440,detune:0,phase:0,partials:[]},t.Oscillator.Type={Sine:"sine",Triangle:"triangle",Sawtooth:"sawtooth",Square:"square",Custom:"custom"},t.Oscillator.prototype._start=function(e){this._oscillator=new t.OscillatorNode,this._wave?this._oscillator.setPeriodicWave(this._wave):this._oscillator.type=this._type,this._oscillator.connect(this.output),this.frequency.connect(this._oscillator.frequency),this.detune.connect(this._oscillator.detune),e=this.toSeconds(e),this._oscillator.start(e)},t.Oscillator.prototype._stop=function(t){return this._oscillator&&(t=this.toSeconds(t),this._oscillator.stop(t)),this},t.Oscillator.prototype.restart=function(t){return this._oscillator.cancelStop(),this._state.cancel(this.toSeconds(t)),this},t.Oscillator.prototype.syncFrequency=function(){return t.Transport.syncSignal(this.frequency),this},t.Oscillator.prototype.unsyncFrequency=function(){return t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Oscillator.prototype,"type",{get:function(){return this._type},set:function(e){var i=[t.Oscillator.Type.Sine,t.Oscillator.Type.Square,t.Oscillator.Type.Triangle,t.Oscillator.Type.Sawtooth].includes(e);if(0===this._phase&&i)this._wave=null,null!==this._oscillator&&this._oscillator.type;else{var r=this._getRealImaginary(e,this._phase),n=this.context.createPeriodicWave(r[0],r[1]);this._wave=n,null!==this._oscillator&&this._oscillator.setPeriodicWave(this._wave)}this._type=e}}),t.Oscillator.prototype._getRealImaginary=function(e,i){var r=2048,n=new Float32Array(r),o=new Float32Array(r),s=1;if(e===t.Oscillator.Type.Custom)r=s=this._partials.length+1;else{var a=/^(sine|triangle|square|sawtooth)(\d+)$/.exec(e);a&&(s=parseInt(a[2])+1,e=a[1],r=s=Math.max(s,2))}for(var h=1;h>1&1?-1:1):0;break;case t.Oscillator.Type.Custom:l=this._partials[h-1];break;default:throw new TypeError("Tone.Oscillator: invalid type: "+e)}0!==l?(n[h]=-l*Math.sin(i*h),o[h]=l*Math.cos(i*h)):(n[h]=0,o[h]=0)}return[n,o]},t.Oscillator.prototype._inverseFFT=function(t,e,i){for(var r=0,n=t.length,o=0;on&&r=this.values.length&&(this.index=0)):e===t.CtrlPattern.Type.Down?(this.index--,this.index<0&&(this.index=this.values.length-1)):e===t.CtrlPattern.Type.UpDown||e===t.CtrlPattern.Type.DownUp?(this._direction===t.CtrlPattern.Type.Up?this.index++:this.index--,this.index<0?(this.index=1,this._direction=t.CtrlPattern.Type.Up):this.index>=this.values.length&&(this.index=this.values.length-2,this._direction=t.CtrlPattern.Type.Down)):e===t.CtrlPattern.Type.Random?this.index=Math.floor(Math.random()*this.values.length):e===t.CtrlPattern.Type.RandomWalk?Math.random()<.5?(this.index--,this.index=Math.max(this.index,0)):(this.index++,this.index=Math.min(this.index,this.values.length-1)):e===t.CtrlPattern.Type.RandomOnce?(this.index++,this.index>=this.values.length&&(this.index=0,this._shuffleValues())):e===t.CtrlPattern.Type.AlternateUp?(this._direction===t.CtrlPattern.Type.Up?(this.index+=2,this._direction=t.CtrlPattern.Type.Down):(this.index-=1,this._direction=t.CtrlPattern.Type.Up),this.index>=this.values.length&&(this.index=0,this._direction=t.CtrlPattern.Type.Up)):e===t.CtrlPattern.Type.AlternateDown&&(this._direction===t.CtrlPattern.Type.Up?(this.index+=1,this._direction=t.CtrlPattern.Type.Down):(this.index-=2,this._direction=t.CtrlPattern.Type.Up),this.index<0&&(this.index=this.values.length-1,this._direction=t.CtrlPattern.Type.Down)),this.value},t.CtrlPattern.prototype._shuffleValues=function(){var t=[];this._shuffled=[];for(var e=0;e0;){var i=t.splice(Math.floor(t.length*Math.random()),1);this._shuffled.push(i[0])}},t.CtrlPattern.prototype.dispose=function(){this._shuffled=null,this.values=null},t.CtrlPattern}),e(function(t){return t.CtrlRandom=function(){var e=t.defaults(arguments,["min","max"],t.CtrlRandom);t.call(this),this.min=e.min,this.max=e.max,this.integer=e.integer},t.extend(t.CtrlRandom),t.CtrlRandom.defaults={min:0,max:1,integer:!1},Object.defineProperty(t.CtrlRandom.prototype,"value",{get:function(){var t=this.toSeconds(this.min),e=this.toSeconds(this.max),i=Math.random(),r=i*t+(1-i)*e;return this.integer&&(r=Math.floor(r)),r}}),t.CtrlRandom}),e(function(t){return t.Buffers=function(e){var i=Array.prototype.slice.call(arguments);i.shift();var r=t.defaults(i,["onload","baseUrl"],t.Buffers);for(var n in t.call(this),this._buffers={},this.baseUrl=r.baseUrl,this._loadingCount=0,e)this._loadingCount++,this.add(n,e[n],this._bufferLoaded.bind(this,r.onload))},t.extend(t.Buffers),t.Buffers.defaults={onload:t.noOp,baseUrl:""},t.Buffers.prototype.has=function(t){return this._buffers.hasOwnProperty(t)},t.Buffers.prototype.get=function(t){if(this.has(t))return this._buffers[t];throw new Error("Tone.Buffers: no buffer named "+t)},t.Buffers.prototype._bufferLoaded=function(t){this._loadingCount--,0===this._loadingCount&&t&&t(this)},Object.defineProperty(t.Buffers.prototype,"loaded",{get:function(){var t=!0;for(var e in this._buffers){var i=this.get(e);t=t&&i.loaded}return t}}),t.Buffers.prototype.add=function(e,i,r){return r=t.defaultArg(r,t.noOp),i instanceof t.Buffer?(this._buffers[e]=i,r(this)):i instanceof AudioBuffer?(this._buffers[e]=new t.Buffer(i),r(this)):t.isString(i)&&(this._buffers[e]=new t.Buffer(this.baseUrl+i,r)),this},t.Buffers.prototype.dispose=function(){for(var e in t.prototype.dispose.call(this),this._buffers)this._buffers[e].dispose();return this._buffers=null,this},t.Buffers}),e(function(t){var e={};return t.prototype.send=function(i,r){e.hasOwnProperty(i)||(e[i]=this.context.createGain()),r=t.defaultArg(r,0);var n=new t.Gain(r,t.Type.Decibels);return this.connect(n),n.connect(e[i]),n},t.prototype.receive=function(t,i){return e.hasOwnProperty(t)||(e[t]=this.context.createGain()),e[t].connect(this,0,i),this},t.Context.on("init",function(t){t.Buses?e=t.Buses:(e={},t.Buses=e)}),t}),e(function(t){return t.Draw=function(){t.call(this),this._events=new t.Timeline,this.expiration=.25,this.anticipation=.008,this._boundDrawLoop=this._drawLoop.bind(this)},t.extend(t.Draw),t.Draw.prototype.schedule=function(t,e){return this._events.add({callback:t,time:this.toSeconds(e)}),1===this._events.length&&requestAnimationFrame(this._boundDrawLoop),this},t.Draw.prototype.cancel=function(t){return this._events.cancel(this.toSeconds(t)),this},t.Draw.prototype._drawLoop=function(){for(var e=t.now();this._events.length&&this._events.peek().time-this.anticipation<=e;){var i=this._events.shift();e-i.time<=this.expiration&&i.callback()}this._events.length>0&&requestAnimationFrame(this._boundDrawLoop)},t.Draw=new t.Draw,t.Draw}),e(function(t){t.Listener=function(){t.call(this),this._orientation=[0,0,0,0,0,0],this._position=[0,0,0],t.getContext(function(){this.set(e.defaults)}.bind(this))},t.extend(t.Listener),t.Listener.defaults={positionX:0,positionY:0,positionZ:0,forwardX:0,forwardY:0,forwardZ:1,upX:0,upY:1,upZ:0},t.Listener.prototype._rampTimeConstant=.01,t.Listener.prototype.setPosition=function(t,e,i){if(this.context.listener.positionX){var r=this.now();this.context.listener.positionX.setTargetAtTime(t,r,this._rampTimeConstant),this.context.listener.positionY.setTargetAtTime(e,r,this._rampTimeConstant),this.context.listener.positionZ.setTargetAtTime(i,r,this._rampTimeConstant)}else this.context.listener.setPosition(t,e,i);return this._position=Array.prototype.slice.call(arguments),this},t.Listener.prototype.setOrientation=function(t,e,i,r,n,o){if(this.context.listener.forwardX){var s=this.now();this.context.listener.forwardX.setTargetAtTime(t,s,this._rampTimeConstant),this.context.listener.forwardY.setTargetAtTime(e,s,this._rampTimeConstant),this.context.listener.forwardZ.setTargetAtTime(i,s,this._rampTimeConstant),this.context.listener.upX.setTargetAtTime(r,s,this._rampTimeConstant),this.context.listener.upY.setTargetAtTime(n,s,this._rampTimeConstant),this.context.listener.upZ.setTargetAtTime(o,s,this._rampTimeConstant)}else this.context.listener.setOrientation(t,e,i,r,n,o);return this._orientation=Array.prototype.slice.call(arguments),this},Object.defineProperty(t.Listener.prototype,"positionX",{set:function(t){this._position[0]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[0]}}),Object.defineProperty(t.Listener.prototype,"positionY",{set:function(t){this._position[1]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[1]}}),Object.defineProperty(t.Listener.prototype,"positionZ",{set:function(t){this._position[2]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[2]}}),Object.defineProperty(t.Listener.prototype,"forwardX",{set:function(t){this._orientation[0]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[0]}}),Object.defineProperty(t.Listener.prototype,"forwardY",{set:function(t){this._orientation[1]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[1]}}),Object.defineProperty(t.Listener.prototype,"forwardZ",{set:function(t){this._orientation[2]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[2]}}),Object.defineProperty(t.Listener.prototype,"upX",{set:function(t){this._orientation[3]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[3]}}),Object.defineProperty(t.Listener.prototype,"upY",{set:function(t){this._orientation[4]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[4]}}),Object.defineProperty(t.Listener.prototype,"upZ",{set:function(t){this._orientation[5]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[5]}}),t.Listener.prototype.dispose=function(){return this._orientation=null,this._position=null,this};var e=t.Listener;return t.Listener=new e,t.Context.on("init",function(i){i.Listener instanceof e?t.Listener=i.Listener:t.Listener=new e,i.Listener=t.Listener}),t.Listener}),e(function(t){return t.Offline=function(e,i){var r,n=t.context.sampleRate,o=t.context,s=function e(i,r,n,o){o=t.defaultArg(o,0);var s=new t.OfflineContext(2,r,n);t.context=s;var a=i(t.Transport);return s.currentTime>0&&o<1e3?e(i,r,n,++o):{response:a,context:s}}(e,i,n),a=s.response,h=s.context;return r=a instanceof Promise?a.then(function(){return h.render()}):h.render(),t.context=o,r.then(function(e){return new t.Buffer(e)})},t.Offline}),e(function(t){return t.Effect=function(){var e=t.defaults(arguments,["wet"],t.Effect);t.AudioNode.call(this),this.createInsOuts(1,1),this._dryWet=new t.CrossFade(e.wet),this.wet=this._dryWet.fade,this.effectSend=new t.Gain,this.effectReturn=new t.Gain,this.input.connect(this._dryWet.a),this.input.connect(this.effectSend),this.effectReturn.connect(this._dryWet.b),this._dryWet.connect(this.output),this._readOnly(["wet"])},t.extend(t.Effect,t.AudioNode),t.Effect.defaults={wet:1},t.Effect.prototype.connectEffect=function(t){return this.effectSend.chain(t,this.effectReturn),this},t.Effect.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this._dryWet.dispose(),this._dryWet=null,this.effectSend.dispose(),this.effectSend=null,this.effectReturn.dispose(),this.effectReturn=null,this._writable(["wet"]),this.wet=null,this},t.Effect}),e(function(t){return t.AutoFilter=function(){var e=t.defaults(arguments,["frequency","baseFrequency","octaves"],t.AutoFilter);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth}),this.depth=this._lfo.amplitude,this.frequency=this._lfo.frequency,this.filter=new t.Filter(e.filter),this._octaves=0,this.connectEffect(this.filter),this._lfo.connect(this.filter.frequency),this.type=e.type,this._readOnly(["frequency","depth"]),this.octaves=e.octaves,this.baseFrequency=e.baseFrequency},t.extend(t.AutoFilter,t.Effect),t.AutoFilter.defaults={frequency:1,type:"sine",depth:1,baseFrequency:200,octaves:2.6,filter:{type:"lowpass",rolloff:-12,Q:1}},t.AutoFilter.prototype.start=function(t){return this._lfo.start(t),this},t.AutoFilter.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoFilter.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoFilter.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoFilter.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),Object.defineProperty(t.AutoFilter.prototype,"baseFrequency",{get:function(){return this._lfo.min},set:function(t){this._lfo.min=this.toFrequency(t),this.octaves=this._octaves}}),Object.defineProperty(t.AutoFilter.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._lfo.max=this.baseFrequency*Math.pow(2,t)}}),t.AutoFilter.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this.filter.dispose(),this.filter=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null,this},t.AutoFilter}),e(function(t){return t.AutoPanner=function(){var e=t.defaults(arguments,["frequency"],t.AutoPanner);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth,min:-1,max:1}),this.depth=this._lfo.amplitude,this._panner=new t.Panner,this.frequency=this._lfo.frequency,this.connectEffect(this._panner),this._lfo.connect(this._panner.pan),this.type=e.type,this._readOnly(["depth","frequency"])},t.extend(t.AutoPanner,t.Effect),t.AutoPanner.defaults={frequency:1,type:"sine",depth:1},t.AutoPanner.prototype.start=function(t){return this._lfo.start(t),this},t.AutoPanner.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoPanner.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoPanner.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoPanner.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.AutoPanner.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this._panner.dispose(),this._panner=null,this._writable(["depth","frequency"]),this.frequency=null,this.depth=null,this},t.AutoPanner}),e(function(t){return t.AutoWah=function(){var e=t.defaults(arguments,["baseFrequency","octaves","sensitivity"],t.AutoWah);t.Effect.call(this,e),this.follower=new t.Follower(e.follower),this._sweepRange=new t.ScaleExp(0,1,.5),this._baseFrequency=e.baseFrequency,this._octaves=e.octaves,this._inputBoost=new t.Gain,this._bandpass=new t.Filter({rolloff:-48,frequency:0,Q:e.Q}),this._peaking=new t.Filter(0,"peaking"),this._peaking.gain.value=e.gain,this.gain=this._peaking.gain,this.Q=this._bandpass.Q,this.effectSend.chain(this._inputBoost,this.follower,this._sweepRange),this._sweepRange.connect(this._bandpass.frequency),this._sweepRange.connect(this._peaking.frequency),this.effectSend.chain(this._bandpass,this._peaking,this.effectReturn),this._setSweepRange(),this.sensitivity=e.sensitivity,this._readOnly(["gain","Q"])},t.extend(t.AutoWah,t.Effect),t.AutoWah.defaults={baseFrequency:100,octaves:6,sensitivity:0,Q:2,gain:2,follower:{attack:.3,release:.5}},Object.defineProperty(t.AutoWah.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"baseFrequency",{get:function(){return this._baseFrequency},set:function(t){this._baseFrequency=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"sensitivity",{get:function(){return t.gainToDb(1/this._inputBoost.gain.value)},set:function(e){this._inputBoost.gain.value=1/t.dbToGain(e)}}),t.AutoWah.prototype._setSweepRange=function(){this._sweepRange.min=this._baseFrequency,this._sweepRange.max=Math.min(this._baseFrequency*Math.pow(2,this._octaves),this.context.sampleRate/2)},t.AutoWah.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this.follower.dispose(),this.follower=null,this._sweepRange.dispose(),this._sweepRange=null,this._bandpass.dispose(),this._bandpass=null,this._peaking.dispose(),this._peaking=null,this._inputBoost.dispose(),this._inputBoost=null,this._writable(["gain","Q"]),this.gain=null,this.Q=null,this},t.AutoWah}),e(function(t){return t.Modulo=function(e){t.SignalBase.call(this),this.createInsOuts(1,0),this._shaper=new t.WaveShaper(Math.pow(2,16)),this._multiply=new t.Multiply,this._subtract=this.output=new t.Subtract,this._modSignal=new t.Signal(e),this.input.fan(this._shaper,this._subtract),this._modSignal.connect(this._multiply,0,0),this._shaper.connect(this._multiply,0,1),this._multiply.connect(this._subtract,0,1),this._setWaveShaper(e)},t.extend(t.Modulo,t.SignalBase),t.Modulo.prototype._setWaveShaper=function(t){this._shaper.setMap(function(e){return Math.floor((e+1e-4)/t)})},Object.defineProperty(t.Modulo.prototype,"value",{get:function(){return this._modSignal.value},set:function(t){this._modSignal.value=t,this._setWaveShaper(t)}}),t.Modulo.prototype.dispose=function(){return t.SignalBase.prototype.dispose.call(this),this._shaper.dispose(),this._shaper=null,this._multiply.dispose(),this._multiply=null,this._subtract.dispose(),this._subtract=null,this._modSignal.dispose(),this._modSignal=null,this},t.Modulo}),e(function(t){return t.BitCrusher=function(){var e=t.defaults(arguments,["bits"],t.BitCrusher);t.Effect.call(this,e);var i=1/Math.pow(2,e.bits-1);this._subtract=new t.Subtract,this._modulo=new t.Modulo(i),this._bits=e.bits,this.effectSend.fan(this._subtract,this._modulo),this._modulo.connect(this._subtract,0,1),this._subtract.connect(this.effectReturn)},t.extend(t.BitCrusher,t.Effect),t.BitCrusher.defaults={bits:4},Object.defineProperty(t.BitCrusher.prototype,"bits",{get:function(){return this._bits},set:function(t){this._bits=t;var e=1/Math.pow(2,t-1);this._modulo.value=e}}),t.BitCrusher.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._subtract.dispose(),this._subtract=null,this._modulo.dispose(),this._modulo=null,this},t.BitCrusher}),e(function(t){return t.Chebyshev=function(){var e=t.defaults(arguments,["order"],t.Chebyshev);t.Effect.call(this,e),this._shaper=new t.WaveShaper(4096),this._order=e.order,this.connectEffect(this._shaper),this.order=e.order,this.oversample=e.oversample},t.extend(t.Chebyshev,t.Effect),t.Chebyshev.defaults={order:1,oversample:"none"},t.Chebyshev.prototype._getCoefficient=function(t,e,i){return i.hasOwnProperty(e)?i[e]:(i[e]=0===e?0:1===e?t:2*t*this._getCoefficient(t,e-1,i)-this._getCoefficient(t,e-2,i),i[e])},Object.defineProperty(t.Chebyshev.prototype,"order",{get:function(){return this._order},set:function(t){this._order=t;for(var e=new Array(4096),i=e.length,r=0;r=this._startTime&&!this._sourceStopped?t.State.Started:t.State.Stopped},t.BufferSource.prototype.start=function(e,i,r,n,o){if(-1!==this._startTime)throw new Error("Tone.BufferSource can only be started once.");if(!this.buffer.loaded)throw new Error("Tone.BufferSource: buffer is either not set or not loaded.");e=this.toSeconds(e),i=this.loop?t.defaultArg(i,this.loopStart):t.defaultArg(i,0),i=this.toSeconds(i),n=t.defaultArg(n,1),this._gain=n,o=this.toSeconds(t.defaultArg(o,this.fadeIn)),this.fadeIn=o,o>0?(this._gainNode.gain.setValueAtTime(0,e),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(this._gain,e+o):this._gainNode.gain.exponentialApproachValueAtTime(this._gain,e,o)):this._gainNode.gain.setValueAtTime(n,e),this._startTime=e;var s=this.toSeconds(t.defaultArg(r,this.buffer.duration-i%this.buffer.duration));if(s=Math.max(s,0),t.isDefined(r)&&(this.loop||(s=Math.min(s,this.buffer.duration-i%this.buffer.duration)),this.stop(e+s,this.fadeOut)),this.loop){var a=this.loopEnd||this.buffer.duration,h=this.loopStart;i>=a&&(i=(i-h)%(a-h)+h)}return this._source.buffer=this.buffer.get(),this._source.loopEnd=this.loopEnd||this.buffer.duration,ithis.sampleTime?(this._gainNode.gain.setValueAtTime(this._gain,n),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(0,e):this._gainNode.gain.exponentialApproachValueAtTime(0,n,i)):this._gainNode.gain.setValueAtTime(0,e),t.context.clearTimeout(this._onendedTimeout),this._onendedTimeout=t.context.setTimeout(this._onended.bind(this),this._stopTime-this.now()),this}},t.BufferSource.prototype.cancelStop=function(){if(-1!==this._startTime&&!this._sourceStopped){var t=this.toSeconds(this.fadeIn);this._gainNode.gain.cancelScheduledValues(this._startTime+t+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime+t+this.sampleTime)),this.context.clearTimeout(this._onendedTimeout),this._stopTime=-1}return this},t.BufferSource.prototype._onended=function(){if(!this._sourceStopped){this._sourceStopped=!0;var t="exponential"===this.curve?2*this.fadeOut:0;this._sourceStarted&&-1!==this._stopTime&&this._source.stop(this._stopTime+t),this.onended(this)}},Object.defineProperty(t.BufferSource.prototype,"loopStart",{get:function(){return this._source.loopStart},set:function(t){this._source.loopStart=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"loopEnd",{get:function(){return this._source.loopEnd},set:function(t){this._source.loopEnd=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"buffer",{get:function(){return this._buffer},set:function(t){this._buffer.set(t)}}),Object.defineProperty(t.BufferSource.prototype,"loop",{get:function(){return this._source.loop},set:function(t){this._source.loop=t,this.cancelStop()}}),t.BufferSource.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.onended=null,this._source.onended=null,this._source.disconnect(),this._source=null,this._gainNode.dispose(),this._gainNode=null,this._buffer.dispose(),this._buffer=null,this._startTime=-1,this.playbackRate=null,t.context.clearTimeout(this._onendedTimeout),this},t.BufferSource}),e(function(t){t.Noise=function(){var e=t.defaults(arguments,["type"],t.Noise);t.Source.call(this,e),this._source=null,this._type=e.type,this._playbackRate=e.playbackRate},t.extend(t.Noise,t.Source),t.Noise.defaults={type:"white",playbackRate:1},Object.defineProperty(t.Noise.prototype,"type",{get:function(){return this._type},set:function(e){if(this._type!==e){if(!(e in i))throw new TypeError("Tone.Noise: invalid type: "+e);if(this._type=e,this.state===t.State.Started){var r=this.now();this._stop(r),this._start(r)}}}}),Object.defineProperty(t.Noise.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._source&&(this._source.playbackRate.value=t)}}),t.Noise.prototype._start=function(e){var r=i[this._type];this._source=new t.BufferSource(r).connect(this.output),this._source.loop=!0,this._source.playbackRate.value=this._playbackRate,this._source.start(this.toSeconds(e),Math.random()*(r.duration-.001))},t.Noise.prototype._stop=function(t){this._source&&(this._source.stop(this.toSeconds(t)),this._source=null)},t.Noise.prototype.restart=function(t){this._stop(t),this._start(t)},t.Noise.prototype.dispose=function(){return t.Source.prototype.dispose.call(this),null!==this._source&&(this._source.disconnect(),this._source=null),this._buffer=null,this};var e={pink:function(){for(var t=[],e=0;e<2;e++){var i,r,n,o,s,a,h,l=new Float32Array(220500);t[e]=l,i=r=n=o=s=a=h=0;for(var u=0;u<220500;u++){var c=2*Math.random()-1;i=.99886*i+.0555179*c,r=.99332*r+.0750759*c,n=.969*n+.153852*c,o=.8665*o+.3104856*c,s=.55*s+.5329522*c,a=-.7616*a-.016898*c,l[u]=i+r+n+o+s+a+h+.5362*c,l[u]*=.11,h=.115926*c}}return t}(),brown:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0,n=0;n<220500;n++){var o=2*Math.random()-1;i[n]=(r+.02*o)/1.02,r=i[n],i[n]*=3.5}}return t}(),white:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0;r<220500;r++)i[r]=2*Math.random()-1}return t}()},i={};function r(){for(var r in e)i[r]=(new t.Buffer).fromArray(e[r])}return t.getContext(r),t.Context.on("init",r),t.Noise}),e(function(t){return t.Reverb=function(){var e=t.defaults(arguments,["decay"],t.Reverb);t.Effect.call(this,e),this._convolver=this.context.createConvolver(),this.decay=e.decay,this.preDelay=e.preDelay,this.connectEffect(this._convolver)},t.extend(t.Reverb,t.Effect),t.Reverb.defaults={decay:1.5,preDelay:.01},t.Reverb.prototype.generate=function(){return t.Offline(function(){var e=new t.Noise,i=new t.Noise,r=new t.Merge;e.connect(r.left),i.connect(r.right);var n=(new t.Gain).toMaster();r.connect(n),e.start(0),i.start(0),n.gain.setValueAtTime(0,0),n.gain.linearRampToValueAtTime(1,this.preDelay),n.gain.exponentialApproachValueAtTime(0,this.preDelay,this.decay-this.preDelay)}.bind(this),this.decay).then(function(t){return this._convolver.buffer=t.get(),this}.bind(this))},t.Reverb.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._convolver.disconnect(),this._convolver=null,this},t.Reverb}),e(function(t){return t.StereoFeedbackEffect=function(){var e=t.defaults(arguments,["feedback"],t.FeedbackEffect);t.StereoEffect.call(this,e),this.feedback=new t.Signal(e.feedback,t.Type.NormalRange),this._feedbackL=new t.Gain,this._feedbackR=new t.Gain,this.effectReturnL.chain(this._feedbackL,this.effectSendL),this.effectReturnR.chain(this._feedbackR,this.effectSendR),this.feedback.fan(this._feedbackL.gain,this._feedbackR.gain),this._readOnly(["feedback"])},t.extend(t.StereoFeedbackEffect,t.StereoEffect),t.StereoFeedbackEffect.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["feedback"]),this.feedback.dispose(),this.feedback=null,this._feedbackL.dispose(),this._feedbackL=null,this._feedbackR.dispose(),this._feedbackR=null,this},t.StereoFeedbackEffect}),e(function(t){return t.StereoWidener=function(){var e=t.defaults(arguments,["width"],t.StereoWidener);t.MidSideEffect.call(this,e),this.width=new t.Signal(e.width,t.Type.NormalRange),this._readOnly(["width"]),this._twoTimesWidthMid=new t.Multiply(2),this._twoTimesWidthSide=new t.Multiply(2),this._midMult=new t.Multiply,this._twoTimesWidthMid.connect(this._midMult,0,1),this.midSend.chain(this._midMult,this.midReturn),this._oneMinusWidth=new t.Subtract,this._oneMinusWidth.connect(this._twoTimesWidthMid),this.context.getConstant(1).connect(this._oneMinusWidth,0,0),this.width.connect(this._oneMinusWidth,0,1),this._sideMult=new t.Multiply,this.width.connect(this._twoTimesWidthSide),this._twoTimesWidthSide.connect(this._sideMult,0,1),this.sideSend.chain(this._sideMult,this.sideReturn)},t.extend(t.StereoWidener,t.MidSideEffect),t.StereoWidener.defaults={width:.5},t.StereoWidener.prototype.dispose=function(){return t.MidSideEffect.prototype.dispose.call(this),this._writable(["width"]),this.width.dispose(),this.width=null,this._midMult.dispose(),this._midMult=null,this._sideMult.dispose(),this._sideMult=null,this._twoTimesWidthMid.dispose(),this._twoTimesWidthMid=null,this._twoTimesWidthSide.dispose(),this._twoTimesWidthSide=null,this._oneMinusWidth.dispose(),this._oneMinusWidth=null,this},t.StereoWidener}),e(function(t){return t.Tremolo=function(){var e=t.defaults(arguments,["frequency","depth"],t.Tremolo);t.StereoEffect.call(this,e),this._lfoL=new t.LFO({phase:e.spread,min:1,max:0}),this._lfoR=new t.LFO({phase:e.spread,min:1,max:0}),this._amplitudeL=new t.Gain,this._amplitudeR=new t.Gain,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.depth=new t.Signal(e.depth,t.Type.NormalRange),this._readOnly(["frequency","depth"]),this.effectSendL.chain(this._amplitudeL,this.effectReturnL),this.effectSendR.chain(this._amplitudeR,this.effectReturnR),this._lfoL.connect(this._amplitudeL.gain),this._lfoR.connect(this._amplitudeR.gain),this.frequency.fan(this._lfoL.frequency,this._lfoR.frequency),this.depth.fan(this._lfoR.amplitude,this._lfoL.amplitude),this.type=e.type,this.spread=e.spread},t.extend(t.Tremolo,t.StereoEffect),t.Tremolo.defaults={frequency:10,type:"sine",depth:.5,spread:180},t.Tremolo.prototype.start=function(t){return this._lfoL.start(t),this._lfoR.start(t),this},t.Tremolo.prototype.stop=function(t){return this._lfoL.stop(t),this._lfoR.stop(t),this},t.Tremolo.prototype.sync=function(e){return this._lfoL.sync(e),this._lfoR.sync(e),t.Transport.syncSignal(this.frequency),this},t.Tremolo.prototype.unsync=function(){return this._lfoL.unsync(),this._lfoR.unsync(),t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Tremolo.prototype,"type",{get:function(){return this._lfoL.type},set:function(t){this._lfoL.type=t,this._lfoR.type=t}}),Object.defineProperty(t.Tremolo.prototype,"spread",{get:function(){return this._lfoR.phase-this._lfoL.phase},set:function(t){this._lfoL.phase=90-t/2,this._lfoR.phase=t/2+90}}),t.Tremolo.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["frequency","depth"]),this._lfoL.dispose(),this._lfoL=null,this._lfoR.dispose(),this._lfoR=null,this._amplitudeL.dispose(),this._amplitudeL=null,this._amplitudeR.dispose(),this._amplitudeR=null,this.frequency=null,this.depth=null,this},t.Tremolo}),e(function(t){return t.Vibrato=function(){var e=t.defaults(arguments,["frequency","depth"],t.Vibrato);t.Effect.call(this,e),this._delayNode=new t.Delay(0,e.maxDelay),this._lfo=new t.LFO({type:e.type,min:0,max:e.maxDelay,frequency:e.frequency,phase:-90}).start().connect(this._delayNode.delayTime),this.frequency=this._lfo.frequency,this.depth=this._lfo.amplitude,this.depth.value=e.depth,this._readOnly(["frequency","depth"]),this.effectSend.chain(this._delayNode,this.effectReturn)},t.extend(t.Vibrato,t.Effect),t.Vibrato.defaults={maxDelay:.005,frequency:5,depth:.1,type:"sine"},Object.defineProperty(t.Vibrato.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.Vibrato.prototype.dispose=function(){t.Effect.prototype.dispose.call(this),this._delayNode.dispose(),this._delayNode=null,this._lfo.dispose(),this._lfo=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null},t.Vibrato}),e(function(t){return t.Event=function(){var e=t.defaults(arguments,["callback","value"],t.Event);t.call(this),this._loop=e.loop,this.callback=e.callback,this.value=e.value,this._loopStart=this.toTicks(e.loopStart),this._loopEnd=this.toTicks(e.loopEnd),this._state=new t.TimelineState(t.State.Stopped),this._playbackRate=1,this._startOffset=0,this._probability=e.probability,this._humanize=e.humanize,this.mute=e.mute,this.playbackRate=e.playbackRate},t.extend(t.Event),t.Event.defaults={callback:t.noOp,loop:!1,loopEnd:"1m",loopStart:0,playbackRate:1,value:null,probability:1,mute:!1,humanize:!1},t.Event.prototype._rescheduleEvents=function(e){return e=t.defaultArg(e,-1),this._state.forEachFrom(e,function(e){var i;if(e.state===t.State.Started){t.isDefined(e.id)&&t.Transport.clear(e.id);var r=e.time+Math.round(this.startOffset/this._playbackRate);if(this._loop){i=1/0,t.isNumber(this._loop)&&(i=this._loop*this._getLoopDuration());var n=this._state.getAfter(r);null!==n&&(i=Math.min(i,n.time-r)),i!==1/0&&(this._state.setStateAtTime(t.State.Stopped,r+i+1),i=t.Ticks(i));var o=t.Ticks(this._getLoopDuration());e.id=t.Transport.scheduleRepeat(this._tick.bind(this),o,t.Ticks(r),i)}else e.id=t.Transport.schedule(this._tick.bind(this),t.Ticks(r))}}.bind(this)),this},Object.defineProperty(t.Event.prototype,"state",{get:function(){return this._state.getValueAtTime(t.Transport.ticks)}}),Object.defineProperty(t.Event.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t}}),Object.defineProperty(t.Event.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t}}),Object.defineProperty(t.Event.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t}}),t.Event.prototype.start=function(e){return e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Stopped&&(this._state.add({state:t.State.Started,time:e,id:void 0}),this._rescheduleEvents(e)),this},t.Event.prototype.stop=function(e){if(this.cancel(e),e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Started){this._state.setStateAtTime(t.State.Stopped,e);var i=this._state.getBefore(e),r=e;null!==i&&(r=i.time),this._rescheduleEvents(r)}return this},t.Event.prototype.cancel=function(e){return e=t.defaultArg(e,-1/0),e=this.toTicks(e),this._state.forEachFrom(e,function(e){t.Transport.clear(e.id)}),this._state.cancel(e),this},t.Event.prototype._tick=function(e){var i=t.Transport.getTicksAtTime(e);if(!this.mute&&this._state.getValueAtTime(i)===t.State.Started){if(this.probability<1&&Math.random()>this.probability)return;if(this.humanize){var r=.02;t.isBoolean(this.humanize)||(r=this.toSeconds(this.humanize)),e+=(2*Math.random()-1)*r}this.callback(e,this.value)}},t.Event.prototype._getLoopDuration=function(){return Math.round((this._loopEnd-this._loopStart)/this._playbackRate)},Object.defineProperty(t.Event.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"progress",{get:function(){if(this._loop){var e=t.Transport.ticks,i=this._state.get(e);if(null!==i&&i.state===t.State.Started){var r=this._getLoopDuration();return(e-i.time)%r/r}return 0}return 0}}),t.Event.prototype.dispose=function(){this.cancel(),this._state.dispose(),this._state=null,this.callback=null,this.value=null},t.Event}),e(function(t){return t.Loop=function(){var e=t.defaults(arguments,["callback","interval"],t.Loop);t.call(this),this._event=new t.Event({callback:this._tick.bind(this),loop:!0,loopEnd:e.interval,playbackRate:e.playbackRate,probability:e.probability}),this.callback=e.callback,this.iterations=e.iterations},t.extend(t.Loop),t.Loop.defaults={interval:"4n",callback:t.noOp,playbackRate:1,iterations:1/0,probability:!0,mute:!1},t.Loop.prototype.start=function(t){return this._event.start(t),this},t.Loop.prototype.stop=function(t){return this._event.stop(t),this},t.Loop.prototype.cancel=function(t){return this._event.cancel(t),this},t.Loop.prototype._tick=function(t){this.callback(t)},Object.defineProperty(t.Loop.prototype,"state",{get:function(){return this._event.state}}),Object.defineProperty(t.Loop.prototype,"progress",{get:function(){return this._event.progress}}),Object.defineProperty(t.Loop.prototype,"interval",{get:function(){return this._event.loopEnd},set:function(t){this._event.loopEnd=t}}),Object.defineProperty(t.Loop.prototype,"playbackRate",{get:function(){return this._event.playbackRate},set:function(t){this._event.playbackRate=t}}),Object.defineProperty(t.Loop.prototype,"humanize",{get:function(){return this._event.humanize},set:function(t){this._event.humanize=t}}),Object.defineProperty(t.Loop.prototype,"probability",{get:function(){return this._event.probability},set:function(t){this._event.probability=t}}),Object.defineProperty(t.Loop.prototype,"mute",{get:function(){return this._event.mute},set:function(t){this._event.mute=t}}),Object.defineProperty(t.Loop.prototype,"iterations",{get:function(){return!0===this._event.loop?1/0:this._event.loop},set:function(t){this._event.loop=t===1/0||t}}),t.Loop.prototype.dispose=function(){this._event.dispose(),this._event=null,this.callback=null},t.Loop}),e(function(t){return t.Part=function(){var e=t.defaults(arguments,["callback","events"],t.Part);t.Event.call(this,e),this._events=[];for(var i=0;i=this._loopStart&&e.startOffset=r&&(e.loop=!1,e.start(t.Ticks(i))):e.startOffset>=r&&e.start(t.Ticks(i))},Object.defineProperty(t.Part.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t,this._forEach(function(t){t.startOffset+=this._startOffset})}}),t.Part.prototype.stop=function(e){var i=this.toTicks(e);return this._state.cancel(i),this._state.setStateAtTime(t.State.Stopped,i),this._forEach(function(t){t.stop(e)}),this},t.Part.prototype.at=function(e,i){e=t.TransportTime(e);for(var r=t.Ticks(1).toSeconds(),n=0;n=0;r--){var n=this._events[r];n instanceof t.Part?n.remove(e,i):n.startOffset===e&&(t.isUndef(i)||t.isDefined(i)&&n.value===i)&&(this._events.splice(r,1),n.dispose())}return this},t.Part.prototype.removeAll=function(){return this._forEach(function(t){t.dispose()}),this._events=[],this},t.Part.prototype.cancel=function(t){return this._forEach(function(e){e.cancel(t)}),this._state.cancel(this.toTicks(t)),this},t.Part.prototype._forEach=function(e,i){if(this._events){i=t.defaultArg(i,this);for(var r=this._events.length-1;r>=0;r--){var n=this._events[r];n instanceof t.Part?n._forEach(e,i):e.call(i,n)}}return this},t.Part.prototype._setAll=function(t,e){this._forEach(function(i){i[t]=e})},t.Part.prototype._tick=function(t,e){this.mute||this.callback(t,e)},t.Part.prototype._testLoopBoundries=function(e){e.startOffset=this._loopEnd?e.cancel(0):e.state===t.State.Stopped&&this._restartEvent(e)},Object.defineProperty(t.Part.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t,this._setAll("probability",t)}}),Object.defineProperty(t.Part.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t,this._setAll("humanize",t)}}),Object.defineProperty(t.Part.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._forEach(function(e){e._loopStart=this._loopStart,e._loopEnd=this._loopEnd,e.loop=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._forEach(function(e){e.loopEnd=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._forEach(function(t){t.loopStart=this.loopStart,this._testLoopBoundries(t)})}}),Object.defineProperty(t.Part.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._setAll("playbackRate",t)}}),Object.defineProperty(t.Part.prototype,"length",{get:function(){return this._events.length}}),t.Part.prototype.dispose=function(){return this.removeAll(),this._state.dispose(),this._state=null,this.callback=null,this._events=null,this},t.Part}),e(function(t){return t.Pattern=function(){var e=t.defaults(arguments,["callback","values","pattern"],t.Pattern);t.Loop.call(this,e),this._pattern=new t.CtrlPattern({values:e.values,type:e.pattern,index:e.index})},t.extend(t.Pattern,t.Loop),t.Pattern.defaults={pattern:t.CtrlPattern.Type.Up,callback:t.noOp,values:[]},t.Pattern.prototype._tick=function(t){this.callback(t,this._pattern.value),this._pattern.next()},Object.defineProperty(t.Pattern.prototype,"index",{get:function(){return this._pattern.index},set:function(t){this._pattern.index=t}}),Object.defineProperty(t.Pattern.prototype,"values",{get:function(){return this._pattern.values},set:function(t){this._pattern.values=t}}),Object.defineProperty(t.Pattern.prototype,"value",{get:function(){return this._pattern.value}}),Object.defineProperty(t.Pattern.prototype,"pattern",{get:function(){return this._pattern.type},set:function(t){this._pattern.type=t}}),t.Pattern.prototype.dispose=function(){t.Loop.prototype.dispose.call(this),this._pattern.dispose(),this._pattern=null},t.Pattern}),e(function(t){return t.Sequence=function(){var e=t.defaults(arguments,["callback","events","subdivision"],t.Sequence),i=e.events;if(delete e.events,t.Part.call(this,e),this._subdivision=this.toTicks(e.subdivision),t.isUndef(e.loopEnd)&&t.isDefined(i)&&(this._loopEnd=i.length*this._subdivision),this._loop=!0,t.isDefined(i))for(var r=0;r1){var e=-t/2,i=t/(this._oscillators.length-1);this._forEach(function(t,r){t.detune.value=e+i*r})}}}),Object.defineProperty(t.FatOscillator.prototype,"count",{get:function(){return this._oscillators.length},set:function(e){if(e=Math.max(e,1),this._oscillators.length!==e){this._forEach(function(t){t.dispose()}),this._oscillators=[];for(var i=0;i0&&this.getLevelAtTime(e)>.05){var i=this.toSeconds(this.portamento);this.frequency.exponentialRampTo(t,i,e)}else this.frequency.setValueAtTime(t,e);return this},t.Monophonic}),e(function(t){return t.Synth=function(e){e=t.defaultArg(e,t.Synth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","frequency","detune","envelope"])},t.extend(t.Synth,t.Monophonic),t.Synth.defaults={oscillator:{type:"triangle"},envelope:{attack:.005,decay:.1,sustain:.3,release:1}},t.Synth.prototype._triggerEnvelopeAttack=function(t,e){return this.envelope.triggerAttack(t,e),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.Synth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.Synth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.frequency=null,this.detune=null,this},t.Synth}),e(function(t){return t.AMSynth=function(e){e=t.defaultArg(e,t.AMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth,this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth,this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this._modulationScale=new t.AudioToGain,this._modulationNode=new t.Gain,this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.chain(this._modulationScale,this._modulationNode.gain),this._carrier.chain(this._modulationNode,this.output),this._readOnly(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.AMSynth,t.Monophonic),t.AMSynth.defaults={harmonicity:3,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.AMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.AMSynth.prototype._triggerEnvelopeRelease=function(t){return this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.AMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationScale.dispose(),this._modulationScale=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.AMSynth}),e(function(t){return t.MonoSynth=function(e){e=t.defaultArg(e,t.MonoSynth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.filter=new t.Filter(e.filter),this.filterEnvelope=new t.FrequencyEnvelope(e.filterEnvelope),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.filter,this.envelope,this.output),this.filterEnvelope.connect(this.filter.frequency),this._readOnly(["oscillator","frequency","detune","filter","filterEnvelope","envelope"])},t.extend(t.MonoSynth,t.Monophonic),t.MonoSynth.defaults={frequency:"C4",detune:0,oscillator:{type:"square"},filter:{Q:6,type:"lowpass",rolloff:-24},envelope:{attack:.005,decay:.1,sustain:.9,release:1},filterEnvelope:{attack:.06,decay:.2,sustain:.5,release:2,baseFrequency:200,octaves:7,exponent:2}},t.MonoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.envelope.triggerAttack(t,e),this.filterEnvelope.triggerAttack(t),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.MonoSynth.prototype._triggerEnvelopeRelease=function(t){return this.envelope.triggerRelease(t),this.filterEnvelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MonoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","filter","filterEnvelope","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.filterEnvelope.dispose(),this.filterEnvelope=null,this.filter.dispose(),this.filter=null,this.frequency=null,this.detune=null,this},t.MonoSynth}),e(function(t){return t.DuoSynth=function(e){e=t.defaultArg(e,t.DuoSynth.defaults),t.Monophonic.call(this,e),this.voice0=new t.MonoSynth(e.voice0),this.voice0.volume.value=-10,this.voice1=new t.MonoSynth(e.voice1),this.voice1.volume.value=-10,this._vibrato=new t.LFO(e.vibratoRate,-50,50),this._vibrato.start(),this.vibratoRate=this._vibrato.frequency,this._vibratoGain=new t.Gain(e.vibratoAmount,t.Type.Positive),this.vibratoAmount=this._vibratoGain.gain,this.frequency=new t.Signal(440,t.Type.Frequency),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.frequency.connect(this.voice0.frequency),this.frequency.chain(this.harmonicity,this.voice1.frequency),this._vibrato.connect(this._vibratoGain),this._vibratoGain.fan(this.voice0.detune,this.voice1.detune),this.voice0.connect(this.output),this.voice1.connect(this.output),this._readOnly(["voice0","voice1","frequency","vibratoAmount","vibratoRate"])},t.extend(t.DuoSynth,t.Monophonic),t.DuoSynth.defaults={vibratoAmount:.5,vibratoRate:5,harmonicity:1.5,voice0:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}},voice1:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}}},t.DuoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.voice0._triggerEnvelopeAttack(t,e),this.voice1._triggerEnvelopeAttack(t,e),this},t.DuoSynth.prototype._triggerEnvelopeRelease=function(t){return this.voice0._triggerEnvelopeRelease(t),this.voice1._triggerEnvelopeRelease(t),this},t.DuoSynth.prototype.getLevelAtTime=function(t){return(this.voice0.getLevelAtTime(t)+this.voice1.getLevelAtTime(t))/2},t.DuoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["voice0","voice1","frequency","vibratoAmount","vibratoRate"]),this.voice0.dispose(),this.voice0=null,this.voice1.dispose(),this.voice1=null,this.frequency.dispose(),this.frequency=null,this._vibratoGain.dispose(),this._vibratoGain=null,this._vibrato=null,this.harmonicity.dispose(),this.harmonicity=null,this.vibratoAmount.dispose(),this.vibratoAmount=null,this.vibratoRate=null,this},t.DuoSynth}),e(function(t){return t.FMSynth=function(e){e=t.defaultArg(e,t.FMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth(e.carrier),this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth(e.modulator),this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.modulationIndex=new t.Multiply(e.modulationIndex),this.modulationIndex.units=t.Type.Positive,this._modulationNode=new t.Gain(0),this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.frequency.chain(this.modulationIndex,this._modulationNode),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.connect(this._modulationNode.gain),this._modulationNode.connect(this._carrier.frequency),this._carrier.connect(this.output),this._readOnly(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.FMSynth,t.Monophonic),t.FMSynth.defaults={harmonicity:3,modulationIndex:10,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.FMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.FMSynth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.FMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.modulationIndex.dispose(),this.modulationIndex=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.FMSynth}),e(function(t){return t.MembraneSynth=function(e){e=t.defaultArg(e,t.MembraneSynth.defaults),t.Instrument.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.octaves=e.octaves,this.pitchDecay=e.pitchDecay,this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","envelope"])},t.extend(t.MembraneSynth,t.Instrument),t.MembraneSynth.defaults={pitchDecay:.05,octaves:10,oscillator:{type:"sine"},envelope:{attack:.001,decay:.4,sustain:.01,release:1.4,attackCurve:"exponential"}},t.MembraneSynth.prototype.triggerAttack=function(t,e,i){e=this.toSeconds(e);var r=(t=this.toFrequency(t))*this.octaves;return this.oscillator.frequency.setValueAtTime(r,e),this.oscillator.frequency.exponentialRampToValueAtTime(t,e+this.toSeconds(this.pitchDecay)),this.envelope.triggerAttack(e,i),this.oscillator.start(e),this},t.MembraneSynth.prototype.triggerRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MembraneSynth.prototype.dispose=function(){return t.Instrument.prototype.dispose.call(this),this._writable(["oscillator","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this},t.MembraneSynth}),e(function(t){var e=[1,1.483,1.932,2.546,2.63,3.897];return t.MetalSynth=function(i){i=t.defaultArg(i,t.MetalSynth.defaults),t.Instrument.call(this,i),this.frequency=new t.Signal(i.frequency,t.Type.Frequency),this._oscillators=[],this._freqMultipliers=[],this._amplitue=new t.Gain(0).connect(this.output),this._highpass=new t.Filter({type:"highpass",Q:-3.0102999566398125}).connect(this._amplitue),this._octaves=i.octaves,this._filterFreqScaler=new t.Scale(i.resonance,7e3),this.envelope=new t.Envelope({attack:i.envelope.attack,attackCurve:"linear",decay:i.envelope.decay,sustain:0,release:i.envelope.release}).chain(this._filterFreqScaler,this._highpass.frequency),this.envelope.connect(this._amplitue.gain);for(var r=0;re&&(o.voice.triggerRelease(e),o.release=e)}return this},t.PolySynth.prototype.sync=function(){return this._syncMethod("triggerAttack",1),this._syncMethod("triggerRelease",1),this},t.PolySynth.prototype.set=function(t,e,i){for(var r=0;rt&&(i.release=t,i.voice.triggerRelease(t))}return this},t.PolySynth.prototype.dispose=function(){t.Instrument.prototype.dispose.call(this);for(var e=0;e0)r=i[0];else if(!r&&t.isDefined(e))throw new Error("Tone.UserMedia: no matching device: "+e);this._device=r;var n={audio:{echoCancellation:!1,sampleRate:this.context.sampleRate}};return r&&(n.audio.deviceId=r.deviceId),navigator.mediaDevices.getUserMedia(n).then(function(t){return this._stream||(this._stream=t,this._mediaStream=this.context.createMediaStreamSource(t),this._mediaStream.connect(this.output)),this}.bind(this))}.bind(this))},t.UserMedia.prototype.close=function(){return this._stream&&(this._stream.getAudioTracks().forEach(function(t){t.stop()}),this._stream=null,this._mediaStream.disconnect(),this._mediaStream=null),this._device=null,this},t.UserMedia.enumerateDevices=function(){return navigator.mediaDevices.enumerateDevices().then(function(t){return t.filter(function(t){return"audioinput"===t.kind})})},Object.defineProperty(t.UserMedia.prototype,"state",{get:function(){return this._stream&&this._stream.active?t.State.Started:t.State.Stopped}}),Object.defineProperty(t.UserMedia.prototype,"deviceId",{get:function(){if(this._device)return this._device.deviceId}}),Object.defineProperty(t.UserMedia.prototype,"groupId",{get:function(){if(this._device)return this._device.groupId}}),Object.defineProperty(t.UserMedia.prototype,"label",{get:function(){if(this._device)return this._device.label}}),Object.defineProperty(t.UserMedia.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.UserMedia.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.close(),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null,this},Object.defineProperty(t.UserMedia,"supported",{get:function(){return t.isDefined(navigator.mediaDevices)&&t.isFunction(navigator.mediaDevices.getUserMedia)}}),t.UserMedia}),e(function(t){return t.Midi=function(e,i){if(!(this instanceof t.Midi))return new t.Midi(e,i);t.Frequency.call(this,e,i)},t.extend(t.Midi,t.Frequency),t.Midi.prototype._defaultUnits="midi",t.Midi.prototype._frequencyToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._frequencyToUnits.call(this,e))},t.Midi.prototype._ticksToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._ticksToUnits.call(this,e))},t.Midi.prototype._beatsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._beatsToUnits.call(this,e))},t.Midi.prototype._secondsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._secondsToUnits.call(this,e))},t.Midi.prototype.toMidi=function(){return this.valueOf()},t.Midi.prototype.toFrequency=function(){return t.Frequency.mtof(this.toMidi())},t.Midi.prototype.transpose=function(t){return new this.constructor(this.toMidi()+t)},t.Midi}),t}()}.call(e,i,e,t))||(t.exports=r)},function(t,e,i){(function(e){var i;t.exports=function t(e,r,n){function o(a,h){if(!r[a]){if(!e[a]){var l="function"==typeof i&&i;if(!h&&l)return i(a,!0);if(s)return s(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var c=r[a]={exports:{}};e[a][0].call(c.exports,function(t){var i=e[a][1][t];return o(i||t)},c,c.exports,t,e,r,n)}return r[a].exports}for(var s="function"==typeof i&&i,a=0;a0)throw new Error("Invalid string. Length must be a multiple of 4");var u=t.length;h="="===t.charAt(u-2)?2:"="===t.charAt(u-1)?1:0,l=new i(3*t.length/4-h),s=h>0?t.length-4:t.length;var c=0;for(n=0,o=0;n>16),r((65280&a)>>8),r(255&a);return 2===h?r(255&(a=e(t.charAt(n))<<2|e(t.charAt(n+1))>>4)):1===h&&(r((a=e(t.charAt(n))<<10|e(t.charAt(n+1))<<4|e(t.charAt(n+2))>>2)>>8&255),r(255&a)),l},t.fromByteArray=function(t){function e(t){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t)}function i(t){return e(t>>18&63)+e(t>>12&63)+e(t>>6&63)+e(63&t)}var r,n,o,s=t.length%3,a="";for(r=0,o=t.length-s;r>2),a+=e(n<<4&63),a+="==";break;case 2:n=(t[t.length-2]<<8)+t[t.length-1],a+=e(n>>10),a+=e(n>>4&63),a+=e(n<<2&63),a+="="}return a}}(void 0===i?this.base64js={}:i)},{}],2:[function(t,e,i){},{}],3:[function(t,i,r){(function(e){"use strict";function i(){return n.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function n(t){return this instanceof n?(n.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof t?function(t,e){if(t=s(t,e<0?0:0|a(e)),!n.TYPED_ARRAY_SUPPORT)for(var i=0;i1?arguments[1]:"utf8"):function(t,e){if(n.isBuffer(e))return function(t,e){var i=0|a(e.length);return t=s(t,i),e.copy(t,0,0,i),t}(t,e);if(F(e))return function(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r1?new n(t,arguments[1]):new n(t)}function o(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r>>1&&(t.parent=I),t}function a(t){if(t>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|t}function h(t,e){"string"!=typeof t&&(t=""+t);var i=t.length;if(0===i)return 0;for(var r=!1;;)switch(e){case"ascii":case"binary":case"raw":case"raws":return i;case"utf8":case"utf-8":return k(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return C(t).length;default:if(r)return k(t).length;e=(""+e).toLowerCase(),r=!0}}function l(t,e,i,r){i=Number(i)||0;var n=t.length-i;r?(r=Number(r))>n&&(r=n):r=n;var o=e.length;if(o%2!=0)throw new Error("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,n=i%256,o.push(n),o.push(r);return o}(e,t.length-i),t,i,r)}function m(t,e,i){return 0===e&&i===t.length?O.fromByteArray(t):O.fromByteArray(t.slice(e,i))}function y(t,e,i){i=Math.min(t.length,i);for(var r=[],n=e;n239?4:l>223?3:l>191?2:1;if(n+c<=i)switch(c){case 1:l<128&&(u=l);break;case 2:128==(192&(o=t[n+1]))&&(h=(31&l)<<6|63&o)>127&&(u=h);break;case 3:o=t[n+1],s=t[n+2],128==(192&o)&&128==(192&s)&&(h=(15&l)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(u=h);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&l)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(u=h)}null===u?(u=65533,c=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),n+=c}return function(t){var e=t.length;if(e<=D)return String.fromCharCode.apply(String,t);for(var i="",r=0;rr)&&(i=r);for(var n="",o=e;oi)throw new RangeError("Trying to access beyond buffer length")}function x(t,e,i,r,o,s){if(!n.isBuffer(t))throw new TypeError("buffer must be a Buffer instance");if(e>o||et.length)throw new RangeError("index out of range")}function w(t,e,i,r){e<0&&(e=65535+e+1);for(var n=0,o=Math.min(t.length-i,2);n>>8*(r?n:1-n)}function T(t,e,i,r){e<0&&(e=4294967295+e+1);for(var n=0,o=Math.min(t.length-i,4);n>>8*(r?n:3-n)&255}function A(t,e,i,r,n,o){if(e>n||et.length)throw new RangeError("index out of range");if(i<0)throw new RangeError("index out of range")}function P(t,e,i,r,n){return n||A(t,e,i,4,3.4028234663852886e38,-3.4028234663852886e38),L.write(t,e,i,r,23,4),i+4}function M(t,e,i,r,n){return n||A(t,e,i,8,1.7976931348623157e308,-1.7976931348623157e308),L.write(t,e,i,r,52,8),i+8}function E(t){return t<16?"0"+t.toString(16):t.toString(16)}function k(t,e){e=e||1/0;for(var i,r=t.length,n=null,o=[],s=0;s55295&&i<57344){if(!n){if(i>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}n=i;continue}if(i<56320){(e-=3)>-1&&o.push(239,191,189),n=i;continue}i=65536+(n-55296<<10|i-56320)}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,i<128){if((e-=1)<0)break;o.push(i)}else if(i<2048){if((e-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((e-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function C(t){return O.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(B,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function R(t,e,i,r){for(var n=0;n=e.length||n>=t.length);n++)e[n+i]=t[n];return n}var O=t("base64-js"),L=t("ieee754"),F=t("isarray");r.Buffer=n,r.SlowBuffer=function t(e,i){if(!(this instanceof t))return new t(e,i);var r=new n(e,i);return delete r.parent,r},r.INSPECT_MAX_BYTES=50,n.poolSize=8192;var I={};n.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){function t(){}try{var e=new Uint8Array(1);return e.foo=function(){return 42},e.constructor=t,42===e.foo()&&e.constructor===t&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}(),n.TYPED_ARRAY_SUPPORT?(n.prototype.__proto__=Uint8Array.prototype,n.__proto__=Uint8Array):(n.prototype.length=void 0,n.prototype.parent=void 0),n.isBuffer=function(t){return!(null==t||!t._isBuffer)},n.compare=function(t,e){if(!n.isBuffer(t)||!n.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var i=t.length,r=e.length,o=0,s=Math.min(i,r);othis.length&&(i=this.length),i<=e)return"";for(;;)switch(t){case"hex":return _(this,e,i);case"utf8":case"utf-8":return y(this,e,i);case"ascii":return v(this,e,i);case"binary":return g(this,e,i);case"base64":return m(this,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return b(this,e,i);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}.apply(this,arguments)},n.prototype.equals=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===n.compare(this,t)},n.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},n.prototype.compare=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?0:n.compare(this,t)},n.prototype.indexOf=function(t,e){function i(t,e,i){for(var r=-1,n=0;i+n2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e>>=0,0===this.length)return-1;if(e>=this.length)return-1;if(e<0&&(e=Math.max(this.length+e,0)),"string"==typeof t)return 0===t.length?-1:String.prototype.indexOf.call(this,t,e);if(n.isBuffer(t))return i(this,t,e);if("number"==typeof t)return n.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,t,e):i(this,[t],e);throw new TypeError("val must be string, number or Buffer")},n.prototype.get=function(t){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(t)},n.prototype.set=function(t,e){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(t,e)},n.prototype.write=function(t,e,i,r){if(void 0===e)r="utf8",i=this.length,e=0;else if(void 0===i&&"string"==typeof e)r=e,i=this.length,e=0;else if(isFinite(e))e|=0,isFinite(i)?(i|=0,void 0===r&&(r="utf8")):(r=i,i=void 0);else{var n=r;r=e,e=0|i,i=n}var o=this.length-e;if((void 0===i||i>o)&&(i=o),t.length>0&&(i<0||e<0)||e>this.length)throw new RangeError("attempt to write outside buffer bounds");r||(r="utf8");for(var s=!1;;)switch(r){case"hex":return l(this,t,e,i);case"utf8":case"utf-8":return u(this,t,e,i);case"ascii":return c(this,t,e,i);case"binary":return p(this,t,e,i);case"base64":return d(this,t,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return f(this,t,e,i);default:if(s)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),s=!0}},n.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var D=4096;n.prototype.slice=function(t,e){var i,r=this.length;if(t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(n*=256);)r+=this[t+--e]*n;return r},n.prototype.readUInt8=function(t,e){return e||S(t,1,this.length),this[t]},n.prototype.readUInt16LE=function(t,e){return e||S(t,2,this.length),this[t]|this[t+1]<<8},n.prototype.readUInt16BE=function(t,e){return e||S(t,2,this.length),this[t]<<8|this[t+1]},n.prototype.readUInt32LE=function(t,e){return e||S(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},n.prototype.readUInt32BE=function(t,e){return e||S(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},n.prototype.readIntLE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=this[t],n=1,o=0;++o=(n*=128)&&(r-=Math.pow(2,8*e)),r},n.prototype.readIntBE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=e,n=1,o=this[t+--r];r>0&&(n*=256);)o+=this[t+--r]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},n.prototype.readInt8=function(t,e){return e||S(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},n.prototype.readInt16LE=function(t,e){e||S(t,2,this.length);var i=this[t]|this[t+1]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt16BE=function(t,e){e||S(t,2,this.length);var i=this[t+1]|this[t]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt32LE=function(t,e){return e||S(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},n.prototype.readInt32BE=function(t,e){return e||S(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},n.prototype.readFloatLE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!0,23,4)},n.prototype.readFloatBE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!1,23,4)},n.prototype.readDoubleLE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!0,52,8)},n.prototype.readDoubleBE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!1,52,8)},n.prototype.writeUIntLE=function(t,e,i,r){t=+t,e|=0,i|=0,r||x(this,t,e,i,Math.pow(2,8*i),0);var n=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+n]=t/o&255;return e+i},n.prototype.writeUInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,255,0),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},n.prototype.writeUInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeUInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeUInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):T(this,t,e,!0),e+4},n.prototype.writeUInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeIntLE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=0,s=1,a=t<0?1:0;for(this[e]=255&t;++o>0)-a&255;return e+i},n.prototype.writeIntBE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=i-1,s=1,a=t<0?1:0;for(this[e+o]=255&t;--o>=0&&(s*=256);)this[e+o]=(t/s>>0)-a&255;return e+i},n.prototype.writeInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,127,-128),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},n.prototype.writeInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):T(this,t,e,!0),e+4},n.prototype.writeInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeFloatLE=function(t,e,i){return P(this,t,e,!0,i)},n.prototype.writeFloatBE=function(t,e,i){return P(this,t,e,!1,i)},n.prototype.writeDoubleLE=function(t,e,i){return M(this,t,e,!0,i)},n.prototype.writeDoubleBE=function(t,e,i){return M(this,t,e,!1,i)},n.prototype.copy=function(t,e,i,r){if(i||(i=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;o--)t[o+e]=this[o+i];else if(s<1e3||!n.TYPED_ARRAY_SUPPORT)for(o=0;o=this.length)throw new RangeError("start out of bounds");if(i<0||i>this.length)throw new RangeError("end out of bounds");var r;if("number"==typeof t)for(r=e;r>1,u=-7,c=i?n-1:0,p=i?-1:1,d=t[e+c];for(c+=p,o=d&(1<<-u)-1,d>>=-u,u+=a;u>0;o=256*o+t[e+c],c+=p,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=r;u>0;s=256*s+t[e+c],c+=p,u-=8);if(0===o)o=1-l;else{if(o===h)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,r),o-=l}return(d?-1:1)*s*Math.pow(2,o-r)},i.write=function(t,e,i,r,n,o){var s,a,h,l=8*o-n-1,u=(1<>1,p=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,f=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+c>=1?p/h:p*Math.pow(2,1-c))*h>=2&&(s++,h/=2),s+c>=u?(a=0,s=u):s+c>=1?(a=(e*h-1)*Math.pow(2,n),s+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,n),s=0));n>=8;t[i+d]=255&a,d+=f,a/=256,n-=8);for(s=s<0;t[i+d]=255&s,d+=f,s/=256,l-=8);t[i+d-f]|=128*m}},{}],8:[function(t,e,i){var r={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},{}],9:[function(t,e,i){"use strict";function r(t,e){return t.b===e.b&&t.a===e.a}function n(t,e){return t.bt?0:t)<=(i=0>i?0:i)?0===i?(e+r)/2:e+t/(t+i)*(r-e):r+i/(t+i)*(e-r)}function d(t){var e=g(t.b);return b(e,t.c),b(e.b,t.c),S(e,t.a),e}function f(t,e){var i=!1,r=!1;t!==e&&(e.a!==t.a&&(r=!0,w(e.a,t.a)),e.d!==t.d&&(i=!0,T(e.d,t.d)),_(e,t),r||(b(e,t.a),t.a.c=t),i||(S(e,t.d),t.d.a=t))}function m(t){var e=t.b,i=!1;t.d!==t.b.d&&(i=!0,T(t.d,t.b.d)),t.c===t?w(t.a,null):(t.b.d.a=J(t),t.a.c=t.c,_(t,J(t)),i||S(t,t.d)),e.c===e?(w(e.a,null),T(e.d,null)):(t.d.a=J(e),e.a.c=e.c,_(e,J(e))),x(t)}function y(t){var e=g(t),i=e.b;return _(e,t.e),e.a=t.b.a,b(i,e.a),e.d=i.d=t.d,e=e.b,_(t.b,J(t.b)),_(t.b,e),t.b.a=e.a,e.b.a.c=e.b,e.b.d=t.b.d,e.f=t.f,e.b.f=t.b.f,e}function v(t,e){var i=!1,r=g(t),n=r.b;return e.d!==t.d&&(i=!0,T(e.d,t.d)),_(r,t.e),_(n,e),r.a=t.b.a,n.a=e.a,r.d=n.d=t.d,t.d.a=n,i||S(r,t.d),r}function g(t){var e=new Z,i=new Z,r=t.b.h;return i.h=r,r.b.h=e,e.h=t,t.b.h=i,e.b=i,e.c=e,e.e=i,i.b=e,i.c=i,i.e=e}function _(t,e){var i=t.c,r=e.c;i.b.e=e,r.b.e=t,t.c=r,e.c=i}function b(t,e){var i=e.f,r=new K(e,i);i.e=r,e.f=r,i=r.c=t;do{i.a=r,i=i.c}while(i!==t)}function S(t,e){var i=e.d,r=new Q(e,i);i.b=r,e.d=r,r.a=t,r.c=e.c,i=t;do{i.d=r,i=i.e}while(i!==t)}function x(t){var e=t.h;t=t.b.h,e.b.h=t,t.b.h=e}function w(t,e){var i=t.c,r=i;do{r.a=e,r=r.c}while(r!==i);i=t.f,(r=t.e).f=i,i.e=r}function T(t,e){var i=t.a,r=i;do{r.d=e,r=r.e}while(r!==i);i=t.d,(r=t.b).d=i,i.b=r}function A(t){var e=0;return Math.abs(t[1])>Math.abs(t[0])&&(e=1),Math.abs(t[2])>Math.abs(t[e])&&(e=2),e}function P(t,e){t.f+=e.f,t.b.f+=e.b.f}function M(t,e,i){return t=t.a,e=e.a,i=i.a,e.b.a===t?i.b.a===t?n(e.a,i.a)?0>=s(i.b.a,e.a,i.a):0<=s(e.b.a,i.a,e.a):0>=s(i.b.a,t,i.a):i.b.a===t?0<=s(e.b.a,t,e.a):(e=o(e.b.a,t,e.a),t=o(i.b.a,t,i.a),e>=t)}function E(t){t.a.i=null;var e=t.e;e.a.c=e.c,e.c.a=e.a,t.e=null}function k(t,e){m(t.a),t.c=!1,t.a=e,e.i=t}function C(t){var e=t.a.a;do{t=ut(t)}while(t.a.a===e);return t.c&&(e=v(lt(t).a.b,t.a.e),k(t,e),t=ut(t)),t}function R(t,e,i){var r=new ht;return r.a=i,r.e=z(t.f,e.e,r),i.i=r}function O(t,e){switch(t.s){case 100130:return 0!=(1&e);case 100131:return 0!==e;case 100132:return 0e;case 100134:return 2<=e||-2>=e}return!1}function L(t){var e=t.a,i=e.d;i.c=t.d,i.a=e,E(t)}function F(t,e,i){for(t=e,e=e.a;t!==i;){t.c=!1;var r=lt(t),n=r.a;if(n.a!==e.a){if(!r.c){L(t);break}n=v(e.c.b,n.b),k(r,n)}e.c!==n&&(f(J(n),n),f(e,n)),L(t),e=r.a,t=r}return e}function I(t,e,i,r,n,o){var s=!0;do{R(t,e,i.b),i=i.c}while(i!==r);for(null===n&&(n=lt(e).a.b.c);r=lt(e),(i=r.a.b).a===n.a;)i.c!==n&&(f(J(i),i),f(J(n),i)),r.f=e.f-i.f,r.d=O(t,r.f),e.b=!0,!s&&N(t,e)&&(P(i,n),E(e),m(n)),s=!1,e=r,n=i;e.b=!0,o&&q(t,e)}function D(t,e,i,r,n){var o=[e.g[0],e.g[1],e.g[2]];e.d=null,e.d=t.o&&t.o(o,i,r,t.c)||null,null===e.d&&(n?t.n||(Y(t,100156),t.n=!0):e.d=i[0])}function U(t,e,i){var r=[null,null,null,null];r[0]=e.a.d,r[1]=i.a.d,D(t,e.a,r,[.5,.5,0,0],!1),f(e,i)}function B(t,e,i,r,n){var o=Math.abs(e.b-t.b)+Math.abs(e.a-t.a),s=Math.abs(i.b-t.b)+Math.abs(i.a-t.a),a=n+1;r[n]=.5*s/(o+s),r[a]=.5*o/(o+s),t.g[0]+=r[n]*e.g[0]+r[a]*i.g[0],t.g[1]+=r[n]*e.g[1]+r[a]*i.g[1],t.g[2]+=r[n]*e.g[2]+r[a]*i.g[2]}function N(t,e){var i=lt(e),o=e.a,a=i.a;if(n(o.a,a.a)){if(0=p?st(i,p):n(u[l[p>>1]],u[l[p]])?st(i,p):at(i,p)),u[h]=null,c[h]=i.b,i.b=h}else for(i.c[-(h+1)]=null;0s(o.b.a,a.a,o.a))return!1;ut(e).b=e.b=!0,y(o.b),f(J(a),o)}return!0}function G(t,e){var i=lt(e),u=e.a,c=i.a,d=u.a,m=c.a,v=u.b.a,g=c.b.a,_=new K;if(s(v,t.a,d),s(g,t.a,m),d===m||Math.min(d.a,v.a)>Math.max(m.a,g.a))return!1;if(n(d,m)){if(0s(v,m,d))return!1;var b,S,x=v,w=d,T=g,A=m;if(n(x,w)||(b=x,x=w,w=b),n(T,A)||(b=T,T=A,A=b),n(x,T)||(b=x,x=T,T=b,b=w,w=A,A=b),n(T,w)?n(w,A)?(b=o(x,T,w),S=o(T,w,A),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,w.b)):(b=s(x,T,w),S=-s(x,A,w),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,A.b)):_.b=(T.b+w.b)/2,a(x,w)||(b=x,x=w,w=b),a(T,A)||(b=T,T=A,A=b),a(x,T)||(b=x,x=T,T=b,b=w,w=A,A=b),a(T,w)?a(w,A)?(b=h(x,T,w),S=h(T,w,A),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,w.a)):(b=l(x,T,w),S=-l(x,A,w),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,A.a)):_.a=(T.a+w.a)/2,n(_,t.a)&&(_.b=t.a.b,_.a=t.a.a),n(x=n(d,m)?d:m,_)&&(_.b=x.b,_.a=x.a),r(_,d)||r(_,m))return N(t,e),!1;if(!r(v,t.a)&&0<=s(v,t.a,_)||!r(g,t.a)&&0>=s(g,t.a,_)){if(g===t.a)return y(u.b),f(c.b,u),e=C(e),u=lt(e).a,F(t,lt(e),i),I(t,e,J(u),u,u,!0),!0;if(v===t.a){y(c.b),f(u.e,J(c)),d=i=e,m=d.a.b.a;do{d=ut(d)}while(d.a.b.a===m);return d=lt(e=d).a.b.c,i.a=J(c),c=F(t,i,null),I(t,e,c.c,u.b.c,d,!0),!0}return 0<=s(v,t.a,_)&&(ut(e).b=e.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=s(g,t.a,_)&&(e.b=i.b=!0,y(c.b),c.a.b=t.a.b,c.a.a=t.a.a),!1}return y(u.b),y(c.b),f(J(c),u),u.a.b=_.b,u.a.a=_.a,u.a.h=et(t.e,u.a),u=u.a,c=[0,0,0,0],_=[d.d,v.d,m.d,g.d],u.g[0]=u.g[1]=u.g[2]=0,B(u,d,v,c,0),B(u,m,g,c,2),D(t,u,_,c,!0),ut(e).b=e.b=i.b=!0,!1}function q(t,e){for(var i=lt(e);;){for(;i.b;)e=i,i=lt(i);if(!e.b&&(i=e,null===(e=ut(e))||!e.b))break;e.b=!1;var r,o=e.a,a=i.a;if(r=o.b.a!==a.b.a)t:{var h=lt(r=e),l=r.a,u=h.a,c=void 0;if(n(l.b.a,u.b.a)){if(0>s(l.b.a,u.b.a,l.a)){r=!1;break t}ut(r).b=r.b=!0,c=y(l),f(u.b,c),c.d.c=r.d}else{if(0r.f&&(r.f*=2,r.c=rt(r.c,r.f+1)),0===r.b?i=n:(i=r.b,r.b=r.c[r.b]),r.e[i]=e,r.c[i]=n,r.d[n]=i,r.h&&at(r,n),i}return r=t.a++,t.c[r]=e,-(r+1)}function it(t){if(0===t.a)return ot(t.b);var e=t.c[t.d[t.a-1]];if(0!==t.b.a&&n(nt(t.b),e))return ot(t.b);do{--t.a}while(0t.a||n(r[a],r[l])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function at(t,e){for(var i=t.d,r=t.e,o=t.c,s=e,a=i[s];;){var h=s>>1,l=i[h];if(0===h||n(r[l],r[a])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function ht(){this.e=this.a=null,this.f=0,this.c=this.b=this.h=this.d=!1}function lt(t){return t.e.c.b}function ut(t){return t.e.a.b}var ct,pt=4e150,dt=0;(ct=H.prototype).x=function(){X(this,dt)},ct.B=function(t,e){switch(t){case 100142:return;case 100140:switch(e){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=e)}break;case 100141:return void(this.m=!!e);default:return void Y(this,100900)}Y(this,100901)},ct.y=function(t){switch(t){case 100142:return 0;case 100140:return this.s;case 100141:return this.m;default:Y(this,100900)}return!1},ct.A=function(t,e,i){this.j[0]=t,this.j[1]=e,this.j[2]=i},ct.z=function(t,e){var i=e||null;switch(t){case 100100:case 100106:this.h=i;break;case 100104:case 100110:this.l=i;break;case 100101:case 100107:this.k=i;break;case 100102:case 100108:this.i=i;break;case 100103:case 100109:this.p=i;break;case 100105:case 100111:this.o=i;break;case 100112:this.r=i;break;default:Y(this,100900)}},ct.C=function(t,e){var i=!1,r=[0,0,0];X(this,2);for(var n=0;3>n;++n){var o=t[n];-1e150>o&&(o=-1e150,i=!0),1e150p;++p){var d=t.g[p];de[p]&&(e[p]=d,i[p]=t)}if(t=0,e[1]-h[1]>e[0]-h[0]&&(t=1),e[2]-h[2]>e[t]-h[t]&&(t=2),h[t]>=e[t])a[0]=0,a[1]=0,a[2]=1;else{for(e=0,h=l[t],i=i[t],l=[0,0,0],h=[h.g[0]-i.g[0],h.g[1]-i.g[1],h.g[2]-i.g[2]],p=[0,0,0],t=o.e;t!==o;t=t.e)p[0]=t.g[0]-i.g[0],p[1]=t.g[1]-i.g[1],p[2]=t.g[2]-i.g[2],l[0]=h[1]*p[2]-h[2]*p[1],l[1]=h[2]*p[0]-h[0]*p[2],l[2]=h[0]*p[1]-h[1]*p[0],(d=l[0]*l[0]+l[1]*l[1]+l[2]*l[2])>e&&(e=d,a[0]=l[0],a[1]=l[1],a[2]=l[2]);0>=e&&(a[0]=a[1]=a[2]=0,a[A(h)]=1)}o=!0}for(l=A(a),t=this.b.c,e=(l+1)%3,i=(l+2)%3,l=0=(e=t.a).f))do{a+=(e.a.b-e.b.a.b)*(e.a.a+e.b.a.a),e=e.e}while(e!==t.a);if(0>a)for(a=this.b.c,o=a.e;o!==a;o=o.e)o.a=-o.a}for(this.n=!1,a=this.b.b,t=a.h;t!==a;t=o)o=t.h,e=t.e,r(t.a,t.b.a)&&t.e.e!==t&&(U(this,e,t),m(t),e=(t=e).e),e.e===t&&(e!==t&&(e!==o&&e!==o.b||(o=o.h),m(e)),t!==o&&t!==o.b||(o=o.h),m(t));for(this.e=a=new $,o=this.b.c,t=o.e;t!==o;t=t.e)t.h=et(a,t);for(tt(a),this.f=new function(t){this.a=new W,this.b=t,this.c=M}(this),j(this,-pt),j(this,pt);null!==(a=it(this.e));){for(;;){t:if(t=this.e,0===t.a)o=nt(t.b);else if(o=t.c[t.d[t.a-1]],0!==t.b.a&&(t=nt(t.b),n(t,o))){o=t;break t}if(null===o||!r(o,a))break;o=it(this.e),U(this,a.c,o.c)}V(this,a)}for(this.a=this.f.a.a.b.a.a,a=0;null!==(o=this.f.a.a.b);)o.h||++a,E(o);for(this.f=null,(a=this.e).b=null,a.d=null,this.e=a.c=null,a=this.b,t=a.a.b;t!==a.a;t=o)o=t.b,(t=t.a).e.e===t&&(P(t.c,t),m(t));if(!this.n){if(a=this.b,this.m)for(t=a.b.h;t!==a.b;t=o)o=t.h,t.b.d.c!==t.d.c?t.f=t.d.c?1:-1:m(t);else for(t=a.a.b;t!==a.a;t=o)if(o=t.b,t.c){for(t=t.a;n(t.b.a,t.a);t=t.c.b);for(;n(t.a,t.b.a);t=t.e);for(e=t.c.b,i=void 0;t.e!==e;)if(n(t.b.a,e.a)){for(;e.e!==t&&(u(e.e)||0>=s(e.a,e.b.a,e.e.b.a));)i=v(e.e,e),e=i.b;e=e.c.b}else{for(;e.e!==t&&(c(t.c.b)||0<=s(t.b.a,t.a,t.c.b.a));)i=v(t,t.c.b),t=i.b;t=t.e}for(;e.e.e!==t;)i=v(e.e,e),e=i.b}if(this.h||this.i||this.k||this.l)if(this.m){for(a=this.b,o=a.a.b;o!==a.a;o=o.b)if(o.c){this.h&&this.h(2,this.c),t=o.a;do{this.k&&this.k(t.a.d,this.c),t=t.e}while(t!==o.a);this.i&&this.i(this.c)}}else{for(a=this.b,o=!!this.l,t=!1,e=-1,i=a.a.d;i!==a.a;i=i.d)if(i.c){t||(this.h&&this.h(4,this.c),t=!0),l=i.a;do{o&&(h=l.b.d.c?0:1,e!==h&&(e=h,this.l&&this.l(!!e,this.c))),this.k&&this.k(l.a.d,this.c),l=l.e}while(l!==i.a)}t&&this.i&&this.i(this.c)}if(this.r){for(a=this.b,t=a.a.b;t!==a.a;t=o)if(o=t.b,!t.c){e=t.a,i=e.e,l=void 0;do{i=(l=i).e,l.d=null,null===l.b.d&&(l.c===l?w(l.a,null):(l.a.c=l.c,_(l,J(l))),(h=l.b).c===h?w(h.a,null):(h.a.c=h.c,_(h,J(h))),x(l))}while(l!==e);e=t.d,(t=t.b).d=e,e.b=t}return this.r(this.b),void(this.c=this.b=null)}}this.b=this.c=null},this.libtess={GluTesselator:H,windingRule:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},errorType:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156},gluEnum:{GLU_TESS_MESH:100112,GLU_TESS_TOLERANCE:100142,GLU_TESS_WINDING_RULE:100140,GLU_TESS_BOUNDARY_ONLY:100141,GLU_INVALID_ENUM:100900,GLU_INVALID_VALUE:100901,GLU_TESS_BEGIN:100100,GLU_TESS_VERTEX:100101,GLU_TESS_END:100102,GLU_TESS_ERROR:100103,GLU_TESS_EDGE_FLAG:100104,GLU_TESS_COMBINE:100105,GLU_TESS_BEGIN_DATA:100106,GLU_TESS_VERTEX_DATA:100107,GLU_TESS_END_DATA:100108,GLU_TESS_ERROR_DATA:100109,GLU_TESS_EDGE_FLAG_DATA:100110,GLU_TESS_COMBINE_DATA:100111}},H.prototype.gluDeleteTess=H.prototype.x,H.prototype.gluTessProperty=H.prototype.B,H.prototype.gluGetTessProperty=H.prototype.y,H.prototype.gluTessNormal=H.prototype.A,H.prototype.gluTessCallback=H.prototype.z,H.prototype.gluTessVertex=H.prototype.C,H.prototype.gluTessBeginPolygon=H.prototype.u,H.prototype.gluTessBeginContour=H.prototype.t,H.prototype.gluTessEndContour=H.prototype.v,H.prototype.gluTessEndPolygon=H.prototype.w,void 0!==e&&(e.exports=this.libtess)},{}],10:[function(t,e,i){(function(r){!function(t,r){r("object"==typeof i&&void 0!==e?i:t.opentype={})}(this,function(e){"use strict";function i(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function n(t,e){this.source=t,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=e,this.destLen=0,this.ltree=new i,this.dtree=new i}function o(t,e,i,r){var n,o;for(n=0;n>>=1,e}function h(t,e,i){if(!e)return i;for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>16-e;return t.tag>>>=e,t.bitcount-=e,r+i}function l(t,e){for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>=1,++n,i+=e.table[n],r-=e.table[n]}while(r>=0);return t.tag=o,t.bitcount-=n,e.trans[i+r]}function u(t,e,i){var r,n,o,a,u,c;for(r=h(t,5,257),n=h(t,5,1),o=h(t,4,4),a=0;a<19;++a)Le[a]=0;for(a=0;a8;)t.sourceIndex--,t.bitcount-=8;if(e=256*(e=t.source[t.sourceIndex+1])+t.source[t.sourceIndex],i=256*(i=t.source[t.sourceIndex+3])+t.source[t.sourceIndex+2],e!==(65535&~i))return Te;for(t.sourceIndex+=4,r=e;r;--r)t.dest[t.destLen++]=t.source[t.sourceIndex++];return t.bitcount=0,we}function d(t,e,i,r,n){return Math.pow(1-n,3)*t+3*Math.pow(1-n,2)*n*e+3*(1-n)*Math.pow(n,2)*i+Math.pow(n,3)*r}function f(){this.x1=Number.NaN,this.y1=Number.NaN,this.x2=Number.NaN,this.y2=Number.NaN}function m(){this.commands=[],this.fill="black",this.stroke=null,this.strokeWidth=1}function y(t){throw new Error(t)}function v(t,e){t||y(e)}function g(t){return function(){return t}}function _(t){return t>=-128&&t<=127}function b(t,e,i){for(var r=0,n=t.length;e>8&255,h+256&255)}return o}function w(t,e,i){for(var r=this,n=0;n>4,o=15&r;if(15===n)break;if(e+=i[n],15===o)break;e+=i[o]}return parseFloat(e)}(t);if(e>=32&&e<=246)return e-139;if(e>=247&&e<=250)return i=t.parseByte(),256*(e-247)+i+108;if(e>=251&&e<=254)return i=t.parseByte(),256*-(e-251)-i-108;throw new Error("Invalid b0 "+e)}function Y(t,e,i){e=void 0!==e?e:0;var r=new Ye.Parser(t,e),n=[],o=[];for(i=void 0!==i?i:t.length;r.relativeOffset>1,f.length=0,v=!0}var o,s,a,h,l,u,c,p,d=new m,f=[],y=0,v=!1,g=!1,_=0,b=0;if(t.isCIDFont){var S=t.tables.cff.topDict._fdSelect[e.index],x=t.tables.cff.topDict._fdArray[S];l=x._subrs,u=x._subrsBias,c=x._defaultWidthX,p=x._nominalWidthX}else l=t.tables.cff.topDict._subrs,u=t.tables.cff.topDict._subrsBias,c=t.tables.cff.topDict._defaultWidthX,p=t.tables.cff.topDict._nominalWidthX;var w=c;return function i(c){for(var m,S,x,T,A,P,M,E,k,C,R,O,L=0;L1&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_,b);break;case 5:for(;f.length>0;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 6:for(;f.length>0&&(_+=f.shift(),d.lineTo(_,b),0!==f.length);)b+=f.shift(),d.lineTo(_,b);break;case 7:for(;f.length>0&&(b+=f.shift(),d.lineTo(_,b),0!==f.length);)_+=f.shift(),d.lineTo(_,b);break;case 8:for(;f.length>0;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 10:A=f.pop()+u,(P=l[A])&&i(P);break;case 11:return;case 12:switch(F=c[L],L+=1,F){case 35:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h+f.shift(),k=M+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),b=O+f.shift(),f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;case 34:o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h,k=M+f.shift(),C=h,R=k+f.shift(),O=b,_=R+f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;case 36:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h,k=M+f.shift(),C=h,R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;case 37:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h+f.shift(),k=M+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),Math.abs(R-_)>Math.abs(O-b)?_=R+f.shift():b=O+f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;default:console.log("Glyph "+e.index+": unknown operator 1200"+F),f.length=0}break;case 14:f.length>0&&!v&&(w=f.shift()+p,v=!0),g&&(d.closePath(),g=!1);break;case 18:n();break;case 19:case 20:n(),L+=y+7>>3;break;case 21:f.length>2&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_+=f.pop(),b);break;case 22:f.length>1&&!v&&(w=f.shift()+p,v=!0),r(_+=f.pop(),b);break;case 23:n();break;case 24:for(;f.length>2;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 25:for(;f.length>6;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 26:for(f.length%2&&(_+=f.shift());f.length>0;)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a,b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 27:for(f.length%2&&(b+=f.shift());f.length>0;)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h,d.curveTo(o,s,a,h,_,b);break;case 28:m=c[L],S=c[L+1],f.push((m<<24|S<<16)>>16),L+=2;break;case 29:A=f.pop()+t.gsubrsBias,(P=t.gsubrs[A])&&i(P);break;case 30:for(;f.length>0&&(o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;case 31:for(;f.length>0&&(o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;default:F<32?console.log("Glyph "+e.index+": unknown operator "+F):F<247?f.push(F-139):F<251?(m=c[L],L+=1,f.push(256*(F-247)+m+108)):F<255?(m=c[L],L+=1,f.push(256*-(F-251)-m-108)):(m=c[L],S=c[L+1],x=c[L+2],T=c[L+3],L+=4,f.push((m<<24|S<<16|x<<8|T)/65536))}}}(i),e.advanceWidth=w,d}function et(t,e){var i,r=Ze.indexOf(t);return r>=0&&(i=r),(r=e.indexOf(t))>=0?i=r+Ze.length:(i=Ze.length+e.length,e.push(t)),i}function it(t,e,i){for(var r={},n=0;ne.value.tag?1:-1}),e.fields=e.fields.concat(r),e.fields=e.fields.concat(n),e}function mt(t,e,i){for(var r=0;r0)return t.glyphs.get(n).getMetrics()}return i}function yt(t,e){for(var i=0,r=t.length-1;i<=r;){var n=i+r>>>1,o=t[n].tag;if(o===e)return n;o>>1,o=t[n];if(o===e)return n;o>>1,s=(i=t[o]).start;if(s===e)return i;s0)return i=t[r-1],e>i.end?0:i}function _t(t,e){this.font=t,this.tableName=e}function bt(t){_t.call(this,t,"gpos")}function St(t){_t.call(this,t,"gsub")}function xt(t,e){var i=t.length;if(i!==e.length)return!1;for(var r=0;r0?(o=t.parseByte(),0==(e&n)&&(o=-o),o=i+o):o=(e&n)>0?i:i+t.parseShort(),o}function Et(t,e,i){var r,n,o=new Ye.Parser(e,i);if(t.numberOfContours=o.parseShort(),t._xMin=o.parseShort(),t._yMin=o.parseShort(),t._xMax=o.parseShort(),t._yMax=o.parseShort(),t.numberOfContours>0){for(var s=t.endPointIndices=[],a=0;a0)for(var c=o.parseByte(),p=0;p0){var d,f=[];if(l>0){for(var m=0;m=0,f.push(d);for(var y=0,v=0;v0?(2&r)>0?(S.dx=o.parseShort(),S.dy=o.parseShort()):S.matchedPoints=[o.parseUShort(),o.parseUShort()]:(2&r)>0?(S.dx=o.parseChar(),S.dy=o.parseChar()):S.matchedPoints=[o.parseByte(),o.parseByte()],(8&r)>0?S.xScale=S.yScale=o.parseF2Dot14():(64&r)>0?(S.xScale=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()):(128&r)>0&&(S.xScale=o.parseF2Dot14(),S.scale01=o.parseF2Dot14(),S.scale10=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()),t.components.push(S),b=!!(32&r)}if(256&r){t.instructionLength=o.parseUShort(),t.instructions=[];for(var x=0;xe.points.length-1||r.matchedPoints[1]>n.points.length-1)throw Error("Matched points out of range in "+e.name);var s=e.points[r.matchedPoints[0]],a=n.points[r.matchedPoints[1]],h={xScale:r.xScale,scale01:r.scale01,scale10:r.scale10,yScale:r.yScale,dx:0,dy:0};a=kt([a],h)[0],h.dx=s.x-a.x,h.dy=s.y-a.y,o=kt(n.points,h)}e.points=e.points.concat(o)}}return Ct(e.points)}function Ot(t){this.font=t,this.getCommands=function(t){return Ri.getPath(t).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function Lt(t){return t}function Ft(t){return Math.sign(t)*Math.round(Math.abs(t))}function It(t){return Math.sign(t)*Math.round(Math.abs(2*t))/2}function Dt(t){return Math.sign(t)*(Math.round(Math.abs(t)+.5)-.5)}function Ut(t){return Math.sign(t)*Math.ceil(Math.abs(t))}function Bt(t){return Math.sign(t)*Math.floor(Math.abs(t))}function Nt(t,e){this.x=t,this.y=e,this.axis=void 0,this.slope=e/t,this.normalSlope=-t/e,Object.freeze(this)}function Gt(t,e){var i=Math.sqrt(t*t+e*e);return e/=i,1==(t/=i)&&0===e?Li:0===t&&1===e?Fi:new Nt(t,e)}function qt(t,e,i,r){this.x=this.xo=Math.round(64*t)/64,this.y=this.yo=Math.round(64*e)/64,this.lastPointOfContour=i,this.onCurve=r,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}function Vt(t,e){switch(this.env=t,this.stack=[],this.prog=e,t){case"glyf":this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=Li,this.round=Ft}}function jt(t){for(var e=t.tZone=new Array(t.gZone.length),i=0;i=176&&i<=183)n+=i-176+1;else if(i>=184&&i<=191)n+=2*(i-184+1);else if(e&&1===o&&27===i)break}while(o>0);t.ip=n}function Wt(t,i){e.DEBUG&&console.log(i.step,"SVTCA["+t.axis+"]"),i.fv=i.pv=i.dpv=t}function Ht(t,i){e.DEBUG&&console.log(i.step,"SPVTCA["+t.axis+"]"),i.pv=i.dpv=t}function Xt(t,i){e.DEBUG&&console.log(i.step,"SFVTCA["+t.axis+"]"),i.fv=t}function Yt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.pv=i.dpv=Gt(r,n)}function Qt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SFVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.fv=Gt(r,n)}function Zt(t){e.DEBUG&&console.log(t.step,"POP[]"),t.stack.pop()}function Jt(t,i){var r=i.stack.pop(),n=i.z0[r],o=i.fv,s=i.pv;e.DEBUG&&console.log(i.step,"MDAP["+t+"]",r);var a=s.distance(n,Ii);t&&(a=i.round(a)),o.setRelative(n,Ii,a,s),o.touch(n),i.rp0=i.rp1=r}function Kt(t,i){var r,n,o,s=i.z2,a=s.length-2;e.DEBUG&&console.log(i.step,"IUP["+t.axis+"]");for(var h=0;h1?"loop "+(i.loop-h)+": ":"")+"SHP["+(t?"rp1":"rp2")+"]",u)}i.loop=1}function te(t,i){var r=i.stack,n=t?i.rp1:i.rp2,o=(t?i.z0:i.z1)[n],s=i.fv,a=i.pv,h=r.pop(),l=i.z2[i.contours[h]],u=l;e.DEBUG&&console.log(i.step,"SHC["+t+"]",h);var c=a.distance(o,o,!1,!0);do{u!==o&&s.setRelative(u,u,c,a),u=u.nextPointOnContour}while(u!==l)}function ee(t,i){var r,n=i.stack,o=t?i.rp1:i.rp2,s=(t?i.z0:i.z1)[o],a=i.fv,h=i.pv,l=n.pop();switch(e.DEBUG&&console.log(i.step,"SHZ["+t+"]",l),l){case 0:r=i.tZone;break;case 1:r=i.gZone;break;default:throw new Error("Invalid zone")}for(var u,c=h.distance(s,s,!1,!0),p=r.length-2,d=0;d",h),i.stack.push(Math.round(64*h))}function se(t,i){var r=i.stack,n=r.pop(),o=i.fv,s=i.pv,a=i.ppem,h=i.deltaBase+16*(t-1),l=i.deltaShift,u=i.z0;e.DEBUG&&console.log(i.step,"DELTAP["+t+"]",n,r);for(var c=0;c>4)===a){var f=(15&d)-8;f>=0&&f++,e.DEBUG&&console.log(i.step,"DELTAPFIX",p,"by",f*l);var m=u[p];o.setRelative(m,m,f*l,s)}}}function ae(t,i){var r=i.stack,n=r.pop();e.DEBUG&&console.log(i.step,"ROUND[]"),r.push(64*i.round(n/64))}function he(t,i){var r=i.stack,n=r.pop(),o=i.ppem,s=i.deltaBase+16*(t-1),a=i.deltaShift;e.DEBUG&&console.log(i.step,"DELTAC["+t+"]",n,r);for(var h=0;h>4)===o){var c=(15&u)-8;c>=0&&c++;var p=c*a;e.DEBUG&&console.log(i.step,"DELTACFIX",l,"by",p),i.cvt[l]+=p}}}function le(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log(i.step,"SDPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.dpv=Gt(r,n)}function ue(t,i){var r=i.stack,n=i.prog,o=i.ip;e.DEBUG&&console.log(i.step,"PUSHB["+t+"]");for(var s=0;s=0?1:-1,h=Math.abs(h),t&&(u=s.cvt[p],n&&Math.abs(h-u)":"_")+(n?"R":"_")+(0===o?"Gr":1===o?"Bl":2===o?"Wh":"")+"]",t?p+"("+s.cvt[p]+","+u+")":"",d,"(d =",a,"->",l*h,")"),s.rp1=s.rp0,s.rp2=d,i&&(s.rp0=d)}function de(t){(t=t||{}).empty||(Pt(t.familyName,"When creating a new Font object, familyName is required."),Pt(t.styleName,"When creating a new Font object, styleName is required."),Pt(t.unitsPerEm,"When creating a new Font object, unitsPerEm is required."),Pt(t.ascender,"When creating a new Font object, ascender is required."),Pt(t.descender,"When creating a new Font object, descender is required."),Pt(t.descender<0,"Descender should be negative (e.g. -512)."),this.names={fontFamily:{en:t.familyName||" "},fontSubfamily:{en:t.styleName||" "},fullName:{en:t.fullName||t.familyName+" "+t.styleName},postScriptName:{en:t.postScriptName||(t.familyName+t.styleName).replace(/\s/g,"")},designer:{en:t.designer||" "},designerURL:{en:t.designerURL||" "},manufacturer:{en:t.manufacturer||" "},manufacturerURL:{en:t.manufacturerURL||" "},license:{en:t.license||" "},licenseURL:{en:t.licenseURL||" "},version:{en:t.version||"Version 0.1"},description:{en:t.description||" "},copyright:{en:t.copyright||" "},trademark:{en:t.trademark||" "}},this.unitsPerEm=t.unitsPerEm||1e3,this.ascender=t.ascender,this.descender=t.descender,this.createdTimestamp=t.createdTimestamp,this.tables={os2:{usWeightClass:t.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:t.widthClass||this.usWidthClasses.MEDIUM,fsSelection:t.fsSelection||this.fsSelectionValues.REGULAR}}),this.supported=!0,this.glyphs=new ei.GlyphSet(this,t.glyphs||[]),this.encoding=new U(this),this.position=new bt(this),this.substitution=new St(this),this.tables=this.tables||{},Object.defineProperty(this,"hinting",{get:function(){return this._hinting?this._hinting:"truetype"===this.outlinesFormat?this._hinting=new Ot(this):void 0}})}function fe(t,e){var i=JSON.stringify(t),r=256;for(var n in e){var o=parseInt(n);if(o&&!(o<256)){if(JSON.stringify(e[n])===i)return o;r<=o&&(r=o+1)}}return e[r]=t,r}function me(t,e,i){var r=fe(e.name,i);return[{name:"tag_"+t,type:"TAG",value:e.tag},{name:"minValue_"+t,type:"FIXED",value:e.minValue<<16},{name:"defaultValue_"+t,type:"FIXED",value:e.defaultValue<<16},{name:"maxValue_"+t,type:"FIXED",value:e.maxValue<<16},{name:"flags_"+t,type:"USHORT",value:0},{name:"nameID_"+t,type:"USHORT",value:r}]}function ye(t,e,i){var r={},n=new Ye.Parser(t,e);return r.tag=n.parseTag(),r.minValue=n.parseFixed(),r.defaultValue=n.parseFixed(),r.maxValue=n.parseFixed(),n.skip("uShort",1),r.name=i[n.parseUShort()]||{},r}function ve(t,e,i,r){for(var n=fe(e.name,r),o=[{name:"nameID_"+t,type:"USHORT",value:n},{name:"flags_"+t,type:"USHORT",value:0}],s=0;s=i)){var n,o=e.charCodeAt(r);return o>=55296&&o<=56319&&i>r+1&&(n=e.charCodeAt(r+1))>=56320&&n<=57343?1024*(o-55296)+n-56320+65536:o}};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}();var we=0,Te=-3,Ae=new i,Pe=new i,Me=new Uint8Array(30),Ee=new Uint16Array(30),ke=new Uint8Array(30),Ce=new Uint16Array(30),Re=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Oe=new i,Le=new Uint8Array(320),Fe=new Uint16Array(16);(function(t,e){var i;for(i=0;i<7;++i)t.table[i]=0;for(t.table[7]=24,t.table[8]=152,t.table[9]=112,i=0;i<24;++i)t.trans[i]=256+i;for(i=0;i<144;++i)t.trans[24+i]=i;for(i=0;i<8;++i)t.trans[168+i]=280+i;for(i=0;i<112;++i)t.trans[176+i]=144+i;for(i=0;i<5;++i)e.table[i]=0;for(e.table[5]=32,i=0;i<32;++i)e.trans[i]=i})(Ae,Pe),o(Me,Ee,4,3),o(ke,Ce,2,1),Me[28]=0,Ee[28]=258;var Ie=function(t,e){var i,r,o=new n(t,e);do{switch(i=a(o),h(o,2,0)){case 0:r=p(o);break;case 1:r=c(o,Ae,Pe);break;case 2:u(o,o.ltree,o.dtree),r=c(o,o.ltree,o.dtree);break;default:r=Te}if(r!==we)throw new Error("Data error")}while(!i);return o.destLenthis.x2&&(this.x2=t)),"number"==typeof e&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),ethis.y2&&(this.y2=e))},f.prototype.addX=function(t){this.addPoint(t,null)},f.prototype.addY=function(t){this.addPoint(null,t)},f.prototype.addBezier=function(t,e,i,r,n,o,s,a){var h=this,l=[t,e],u=[i,r],c=[n,o],p=[s,a];this.addPoint(t,e),this.addPoint(s,a);for(var f=0;f<=1;f++){var m=6*l[f]-12*u[f]+6*c[f],y=-3*l[f]+9*u[f]-9*c[f]+3*p[f],v=3*u[f]-3*l[f];if(0!==y){var g=Math.pow(m,2)-4*v*y;if(!(g<0)){var _=(-m+Math.sqrt(g))/(2*y);0<_&&_<1&&(0===f&&h.addX(d(l[f],u[f],c[f],p[f],_)),1===f&&h.addY(d(l[f],u[f],c[f],p[f],_)));var b=(-m-Math.sqrt(g))/(2*y);0=0&&r>0&&(i+=" "),i+=e(n)}return i}t=void 0!==t?t:2;for(var r="",n=0;n=0&&t<=255,"Byte value should be between 0 and 255."),[t]},Ge.BYTE=g(1),Ne.CHAR=function(t){return[t.charCodeAt(0)]},Ge.CHAR=g(1),Ne.CHARARRAY=function(t){for(var e=[],i=0;i>8&255,255&t]},Ge.USHORT=g(2),Ne.SHORT=function(t){return t>=32768&&(t=-(65536-t)),[t>>8&255,255&t]},Ge.SHORT=g(2),Ne.UINT24=function(t){return[t>>16&255,t>>8&255,255&t]},Ge.UINT24=g(3),Ne.ULONG=function(t){return[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.ULONG=g(4),Ne.LONG=function(t){return t>=Ue&&(t=-(2*Ue-t)),[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONG=g(4),Ne.FIXED=Ne.ULONG,Ge.FIXED=Ge.ULONG,Ne.FWORD=Ne.SHORT,Ge.FWORD=Ge.SHORT,Ne.UFWORD=Ne.USHORT,Ge.UFWORD=Ge.USHORT,Ne.LONGDATETIME=function(t){return[0,0,0,0,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONGDATETIME=g(8),Ne.TAG=function(t){return De.argument(4===t.length,"Tag should be exactly 4 ASCII characters."),[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]},Ge.TAG=g(4),Ne.Card8=Ne.BYTE,Ge.Card8=Ge.BYTE,Ne.Card16=Ne.USHORT,Ge.Card16=Ge.USHORT,Ne.OffSize=Ne.BYTE,Ge.OffSize=Ge.BYTE,Ne.SID=Ne.USHORT,Ge.SID=Ge.USHORT,Ne.NUMBER=function(t){return t>=-107&&t<=107?[t+139]:t>=108&&t<=1131?[247+((t-=108)>>8),255&t]:t>=-1131&&t<=-108?[251+((t=-t-108)>>8),255&t]:t>=-32768&&t<=32767?Ne.NUMBER16(t):Ne.NUMBER32(t)},Ge.NUMBER=function(t){return Ne.NUMBER(t).length},Ne.NUMBER16=function(t){return[28,t>>8&255,255&t]},Ge.NUMBER16=g(3),Ne.NUMBER32=function(t){return[29,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.NUMBER32=g(5),Ne.REAL=function(t){var e=t.toString(),i=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(e);if(i){var r=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));e=(Math.round(t*r)/r).toString()}for(var n="",o=0,s=e.length;o>8&255,e[e.length]=255&r}return e},Ge.UTF16=function(t){return 2*t.length};var qe={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};Be.MACSTRING=function(t,e,i,r){var n=qe[r];if(void 0!==n){for(var o="",s=0;s=128&&void 0===(o=i[o]))return;r[n]=o}return r}},Ge.MACSTRING=function(t,e){var i=Ne.MACSTRING(t,e);return void 0!==i?i.length:0},Ne.VARDELTAS=function(t){for(var e=0,i=[];e=-128&&r<=127?S(t,e,i):x(t,e,i)}return i},Ne.INDEX=function(t){for(var e=1,i=[e],r=[],n=0;n>8,e[c+1]=255&p,e=e.concat(r[u])}return e},Ge.TABLE=function(t){for(var e=0,i=t.fields.length,r=0;r0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parsePointer32=function(t){var e=this.parseOffset32();if(e>0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parseListOfLists=function(t){for(var e=this,i=this.parseOffset16List(),r=i.length,n=this.relativeOffset,o=new Array(r),s=0;s=0;n-=1){var o=Ye.getUShort(t,e+4+8*n),s=Ye.getUShort(t,e+4+8*n+2);if(3===o&&(0===s||1===s||10===s)||0===o&&(0===s||1===s||2===s||3===s||4===s)){r=Ye.getULong(t,e+4+8*n+4);break}}if(-1===r)throw new Error("No valid cmap sub-tables found.");var a=new Ye.Parser(t,e+r);if(i.format=a.parseUShort(),12===i.format)!function(t,e){var i;e.parseUShort(),t.length=e.parseULong(),t.language=e.parseULong(),t.groupCount=i=e.parseULong(),t.glyphIndexMap={};for(var r=0;r>1,e.skip("uShort",3),t.glyphIndexMap={};for(var s=new Ye.Parser(i,r+n+14),a=new Ye.Parser(i,r+n+16+2*o),h=new Ye.Parser(i,r+n+16+4*o),l=new Ye.Parser(i,r+n+16+6*o),u=r+n+16+8*o,c=0;c0;e-=1)if(t.get(e).unicode>65535){console.log("Adding CMAP format 12 (needed!)"),i=!1;break}var r=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:i?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:i?12:20}];i||(r=r.concat([{name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}])),r=r.concat([{name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);var n=new We.Table("cmap",r);for(n.segments=[],e=0;e=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");o.push(n)}else{if(3!==a)throw new Error("CFF Table CID Font FDSelect table has unsupported format "+a);var l=s.parseCard16(),u=s.parseCard16();if(0!==u)throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+u);for(var c,p=0;p=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");if(c>i)throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+c);for(;u=1&&(i.ulCodePageRange1=r.parseULong(),i.ulCodePageRange2=r.parseULong()),i.version>=2&&(i.sxHeight=r.parseShort(),i.sCapHeight=r.parseShort(),i.usDefaultChar=r.parseUShort(),i.usBreakChar=r.parseUShort(),i.usMaxContent=r.parseUShort()),i},make:function(t){return new We.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],t)},unicodeRanges:gi,getUnicodeRange:function(t){for(var e=0;e=i.begin&&t=$e.length){var s=r.parseChar();i.names.push(r.parseString(s))}break;case 2.5:i.numberOfGlyphs=r.parseUShort(),i.offset=new Array(i.numberOfGlyphs);for(var a=0;ay||void 0===e)&&y>0&&(e=y),l 123 are reserved for internal usage");d|=1<0?hi.make(O):void 0,I=bi.make(),D=ni.make(t.glyphs,{version:t.getEnglishName("version"),fullName:E,familyName:P,weightName:M,postScriptName:k,unitsPerEm:t.unitsPerEm,fontBBox:[0,_.yMin,_.ascender,_.advanceWidthMax]}),U=t.metas&&Object.keys(t.metas).length>0?Ai.make(t.metas):void 0,B=[b,S,x,w,L,A,I,D,T];F&&B.push(F),t.tables.gsub&&B.push(Ti.make(t.tables.gsub)),U&&B.push(U);for(var N=ft(B),G=pt(N.encode()),q=N.fields,V=!1,j=0;j=0)return r[n].script;if(e){var o={tag:t,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return r.splice(-1-n,0,o),o.script}}},getLangSysTable:function(t,e,i){var r=this.getScriptTable(t,i);if(r){if(!e||"dflt"===e||"DFLT"===e)return r.defaultLangSys;var n=yt(r.langSysRecords,e);if(n>=0)return r.langSysRecords[n].langSys;if(i){var o={tag:e,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return r.langSysRecords.splice(-1-n,0,o),o.langSys}}},getFeatureTable:function(t,e,i,r){var n=this.getLangSysTable(t,e,r);if(n){for(var o,s=n.featureIndexes,a=this.font.tables[this.tableName].features,h=0;h=a[l-1].tag,"Features must be added in alphabetical order."),o={tag:i,feature:{params:0,lookupListIndexes:[]}},a.push(o),s.push(l),o.feature}}},getLookupTables:function(t,e,i,r,n){var o=this.getFeatureTable(t,e,i,n),s=[];if(o){for(var a,h=o.lookupListIndexes,l=this.font.tables[this.tableName].lookups,u=0;u=0?i:-1;case 2:var r=gt(t.ranges,e);return r?r.index+e-r.start:-1}},expandCoverage:function(t){if(1===t.format)return t.glyphs;for(var e=[],i=t.ranges,r=0;r=0){for(var u=o.ligatureSets[l],c=0;c2)){var r=this.font,n=this._prepState;if(!n||n.ppem!==i){var o=this._fpgmState;if(!o){Vt.prototype=Di,(o=this._fpgmState=new Vt("fpgm",r.tables.fpgm)).funcs=[],o.font=r,e.DEBUG&&(console.log("---EXEC FPGM---"),o.step=-1);try{Ei(o)}catch(t){return console.log("Hinting error in FPGM:"+t),void(this._errorState=3)}}Vt.prototype=o,(n=this._prepState=new Vt("prep",r.tables.prep)).ppem=i;var s=r.tables.cvt;if(s)for(var a=n.cvt=new Array(s.length),h=i/r.unitsPerEm,l=0;l1))try{return ki(t,n)}catch(t){return this._errorState<1&&(console.log("Hinting error:"+t),console.log("Note: further hinting errors are silenced")),void(this._errorState=1)}}},ki=function(t,i){var r,n,o,s=i.ppem/i.font.unitsPerEm,a=s,h=t.components;if(Vt.prototype=i,h){var l=i.font;n=[],r=[];for(var u=0;u1?"loop "+(t.loop-r)+": ":"")+"SHPIX[]",a,o),n.setRelative(h,h,o),n.touch(h)}t.loop=1},function(t){for(var i=t.stack,r=t.rp1,n=t.rp2,o=t.loop,s=t.z0[r],a=t.z1[n],h=t.fv,l=t.dpv,u=t.z2;o--;){var c=i.pop(),p=u[c];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"IP[]",c,r,"<->",n),h.interpolate(p,s,a,l),h.touch(p)}t.loop=1},ie.bind(void 0,0),ie.bind(void 0,1),function(t){for(var i=t.stack,r=t.rp0,n=t.z0[r],o=t.loop,s=t.fv,a=t.pv,h=t.z1;o--;){var l=i.pop(),u=h[l];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"ALIGNRP[]",l),s.setRelative(u,n,0,a),s.touch(u)}t.loop=1},function(t){e.DEBUG&&console.log(t.step,"RTDG[]"),t.round=It},re.bind(void 0,0),re.bind(void 0,1),function(t){var i=t.prog,r=t.ip,n=t.stack,o=i[++r];e.DEBUG&&console.log(t.step,"NPUSHB[]",o);for(var s=0;sr?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"GTEQ[]",r,n),i.push(n>=r?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"EQ[]",r,n),i.push(r===n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"NEQ[]",r,n),i.push(r!==n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ODD[]",r),i.push(Math.trunc(r)%2?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"EVEN[]",r),i.push(Math.trunc(r)%2?0:1)},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"IF[]",i),i||(zt(t,!0),e.DEBUG&&console.log(t.step,"EIF[]"))},function(t){e.DEBUG&&console.log(t.step,"EIF[]")},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"AND[]",r,n),i.push(r&&n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"OR[]",r,n),i.push(r||n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NOT[]",r),i.push(r?0:1)},se.bind(void 0,1),function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDB[]",i),t.deltaBase=i},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDS[]",i),t.deltaShift=Math.pow(.5,i)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"ADD[]",r,n),i.push(n+r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"SUB[]",r,n),i.push(n-r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"DIV[]",r,n),i.push(64*n/r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MUL[]",r,n),i.push(n*r/64)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ABS[]",r),i.push(Math.abs(r))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NEG[]",r),i.push(-r)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"FLOOR[]",r),i.push(64*Math.floor(r/64))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"CEILING[]",r),i.push(64*Math.ceil(r/64))},ae.bind(void 0,0),ae.bind(void 0,1),ae.bind(void 0,2),ae.bind(void 0,3),void 0,void 0,void 0,void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"WCVTF[]",r,n),t.cvt[n]=r*t.ppem/t.font.unitsPerEm},se.bind(void 0,2),se.bind(void 0,3),he.bind(void 0,1),he.bind(void 0,2),he.bind(void 0,3),function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"SROUND[]",r),t.round=Oi,192&r){case 0:i=.5;break;case 64:i=1;break;case 128:i=2;break;default:throw new Error("invalid SROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid SROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"S45ROUND[]",r),t.round=Oi,192&r){case 0:i=Math.sqrt(2)/2;break;case 64:i=Math.sqrt(2);break;case 128:i=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid S45ROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},void 0,void 0,function(t){e.DEBUG&&console.log(t.step,"ROFF[]"),t.round=Lt},void 0,function(t){e.DEBUG&&console.log(t.step,"RUTG[]"),t.round=Ut},function(t){e.DEBUG&&console.log(t.step,"RDTG[]"),t.round=Bt},Zt,Zt,void 0,void 0,void 0,void 0,void 0,function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANCTRL[]",i)},le.bind(void 0,0),le.bind(void 0,1),function(t){var i=t.stack,r=i.pop(),n=0;e.DEBUG&&console.log(t.step,"GETINFO[]",r),1&r&&(n=35),32&r&&(n|=4096),i.push(n)},void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop(),o=i.pop();e.DEBUG&&console.log(t.step,"ROLL[]"),i.push(n),i.push(r),i.push(o)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MAX[]",r,n),i.push(Math.max(n,r))},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MIN[]",r,n),i.push(Math.min(n,r))},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANTYPE[]",i)},function(t){var i=t.stack.pop(),r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"INSTCTRL[]",i,r),i){case 1:return void(t.inhibitGridFit=!!r);case 2:return void(t.ignoreCvt=!!r);default:throw new Error("invalid INSTCTRL[] selector")}},void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,ue.bind(void 0,1),ue.bind(void 0,2),ue.bind(void 0,3),ue.bind(void 0,4),ue.bind(void 0,5),ue.bind(void 0,6),ue.bind(void 0,7),ue.bind(void 0,8),ce.bind(void 0,1),ce.bind(void 0,2),ce.bind(void 0,3),ce.bind(void 0,4),ce.bind(void 0,5),ce.bind(void 0,6),ce.bind(void 0,7),ce.bind(void 0,8),pe.bind(void 0,0,0,0,0,0),pe.bind(void 0,0,0,0,0,1),pe.bind(void 0,0,0,0,0,2),pe.bind(void 0,0,0,0,0,3),pe.bind(void 0,0,0,0,1,0),pe.bind(void 0,0,0,0,1,1),pe.bind(void 0,0,0,0,1,2),pe.bind(void 0,0,0,0,1,3),pe.bind(void 0,0,0,1,0,0),pe.bind(void 0,0,0,1,0,1),pe.bind(void 0,0,0,1,0,2),pe.bind(void 0,0,0,1,0,3),pe.bind(void 0,0,0,1,1,0),pe.bind(void 0,0,0,1,1,1),pe.bind(void 0,0,0,1,1,2),pe.bind(void 0,0,0,1,1,3),pe.bind(void 0,0,1,0,0,0),pe.bind(void 0,0,1,0,0,1),pe.bind(void 0,0,1,0,0,2),pe.bind(void 0,0,1,0,0,3),pe.bind(void 0,0,1,0,1,0),pe.bind(void 0,0,1,0,1,1),pe.bind(void 0,0,1,0,1,2),pe.bind(void 0,0,1,0,1,3),pe.bind(void 0,0,1,1,0,0),pe.bind(void 0,0,1,1,0,1),pe.bind(void 0,0,1,1,0,2),pe.bind(void 0,0,1,1,0,3),pe.bind(void 0,0,1,1,1,0),pe.bind(void 0,0,1,1,1,1),pe.bind(void 0,0,1,1,1,2),pe.bind(void 0,0,1,1,1,3),pe.bind(void 0,1,0,0,0,0),pe.bind(void 0,1,0,0,0,1),pe.bind(void 0,1,0,0,0,2),pe.bind(void 0,1,0,0,0,3),pe.bind(void 0,1,0,0,1,0),pe.bind(void 0,1,0,0,1,1),pe.bind(void 0,1,0,0,1,2),pe.bind(void 0,1,0,0,1,3),pe.bind(void 0,1,0,1,0,0),pe.bind(void 0,1,0,1,0,1),pe.bind(void 0,1,0,1,0,2),pe.bind(void 0,1,0,1,0,3),pe.bind(void 0,1,0,1,1,0),pe.bind(void 0,1,0,1,1,1),pe.bind(void 0,1,0,1,1,2),pe.bind(void 0,1,0,1,1,3),pe.bind(void 0,1,1,0,0,0),pe.bind(void 0,1,1,0,0,1),pe.bind(void 0,1,1,0,0,2),pe.bind(void 0,1,1,0,0,3),pe.bind(void 0,1,1,0,1,0),pe.bind(void 0,1,1,0,1,1),pe.bind(void 0,1,1,0,1,2),pe.bind(void 0,1,1,0,1,3),pe.bind(void 0,1,1,1,0,0),pe.bind(void 0,1,1,1,0,1),pe.bind(void 0,1,1,1,0,2),pe.bind(void 0,1,1,1,0,3),pe.bind(void 0,1,1,1,1,0),pe.bind(void 0,1,1,1,1,1),pe.bind(void 0,1,1,1,1,2),pe.bind(void 0,1,1,1,1,3)];var Ui=Array.from||function(t){return t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]?|[^\uD800-\uDFFF]|./g)||[]};de.prototype.hasChar=function(t){return null!==this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyphIndex=function(t){return this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyph=function(t){var e=this.charToGlyphIndex(t),i=this.glyphs.get(e);return i||(i=this.glyphs.get(0)),i},de.prototype.stringToGlyphs=function(t,e){e=e||this.defaultRenderOptions;for(var i=Ui(t),r=[],n=0;n1&&console.warn("Only the first kern subtable is supported."),t.skip("uLong");var i=255&t.parseUShort();if(t.skip("uShort"),0===i){var r=t.parseUShort();t.skip("uShort",3);for(var n=0;n1)for(var i=1;i-1?e:t}(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(i)}function c(t){var e=new FormData;return t.trim().split("&").forEach(function(t){if(t){var i=t.split("="),r=i.shift().replace(/\+/g," "),n=i.join("=").replace(/\+/g," ");e.append(decodeURIComponent(r),decodeURIComponent(n))}}),e}function p(t){var e=new n;return t.split(/\r?\n/).forEach(function(t){var i=t.split(":"),r=i.shift().trim();if(r){var n=i.join(":").trim();e.append(r,n)}}),e}function d(t,e){e||(e={}),this.type="default",this.status="status"in e?e.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new n(e.headers),this.url=e.url||"",this._initBody(t)}if(!t.fetch){var f={searchParams:"URLSearchParams"in t,iterable:"Symbol"in t&&"iterator"in Symbol,blob:"FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in t,arrayBuffer:"ArrayBuffer"in t};if(f.arrayBuffer)var m=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],y=function(t){return t&&DataView.prototype.isPrototypeOf(t)},v=ArrayBuffer.isView||function(t){return t&&m.indexOf(Object.prototype.toString.call(t))>-1};n.prototype.append=function(t,r){t=e(t),r=i(r);var n=this.map[t];this.map[t]=n?n+","+r:r},n.prototype.delete=function(t){delete this.map[e(t)]},n.prototype.get=function(t){return t=e(t),this.has(t)?this.map[t]:null},n.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},n.prototype.set=function(t,r){this.map[e(t)]=i(r)},n.prototype.forEach=function(t,e){for(var i in this.map)this.map.hasOwnProperty(i)&&t.call(e,this.map[i],i,this)},n.prototype.keys=function(){var t=[];return this.forEach(function(e,i){t.push(i)}),r(t)},n.prototype.values=function(){var t=[];return this.forEach(function(e){t.push(e)}),r(t)},n.prototype.entries=function(){var t=[];return this.forEach(function(e,i){t.push([i,e])}),r(t)},f.iterable&&(n.prototype[Symbol.iterator]=n.prototype.entries);var g=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];u.prototype.clone=function(){return new u(this,{body:this._bodyInit})},l.call(u.prototype),l.call(d.prototype),d.prototype.clone=function(){return new d(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new n(this.headers),url:this.url})},d.error=function(){var t=new d(null,{status:0,statusText:""});return t.type="error",t};var _=[301,302,303,307,308];d.redirect=function(t,e){if(-1===_.indexOf(e))throw new RangeError("Invalid status code");return new d(null,{status:e,headers:{location:t}})},t.Headers=n,t.Request=u,t.Response=d,t.fetch=function(t,e){return new Promise(function(i,r){var n=new u(t,e),o=new XMLHttpRequest;o.onload=function(){var t={status:o.status,statusText:o.statusText,headers:p(o.getAllResponseHeaders()||"")};t.url="responseURL"in o?o.responseURL:t.headers.get("X-Request-URL");var e="response"in o?o.response:o.responseText;i(new d(e,t))},o.onerror=function(){r(new TypeError("Network request failed"))},o.ontimeout=function(){r(new TypeError("Network request failed"))},o.open(n.method,n.url,!0),"include"===n.credentials&&(o.withCredentials=!0),"responseType"in o&&f.blob&&(o.responseType="blob"),n.headers.forEach(function(t,e){o.setRequestHeader(e,t)}),o.send(void 0===n._bodyInit?null:n._bodyInit)})},t.fetch.polyfill=!0}}("undefined"!=typeof self?self:this)},{}],13:[function(t,e,i){"use strict";var r=t("./core/main");t("./core/constants"),t("./core/environment"),t("./core/error_helpers"),t("./core/helpers"),t("./core/legacy"),t("./core/p5.Element"),t("./core/p5.Graphics"),t("./core/p5.Renderer"),t("./core/p5.Renderer2D"),t("./core/rendering"),t("./core/shim"),t("./core/structure"),t("./core/transform"),t("./core/shape/2d_primitives"),t("./core/shape/attributes"),t("./core/shape/curves"),t("./core/shape/vertex"),t("./color/color_conversion"),t("./color/creating_reading"),t("./color/p5.Color"),t("./color/setting"),t("./data/p5.TypedDict"),t("./events/acceleration"),t("./events/keyboard"),t("./events/mouse"),t("./events/touch"),t("./image/filters"),t("./image/image"),t("./image/loading_displaying"),t("./image/p5.Image"),t("./image/pixels"),t("./io/files"),t("./io/p5.Table"),t("./io/p5.TableRow"),t("./io/p5.XML"),t("./math/calculation"),t("./math/math"),t("./math/noise"),t("./math/p5.Vector"),t("./math/random"),t("./math/trigonometry"),t("./typography/attributes"),t("./typography/loading_displaying"),t("./typography/p5.Font"),t("./utilities/array_functions"),t("./utilities/conversion"),t("./utilities/string_functions"),t("./utilities/time_date"),t("./webgl/3d_primitives"),t("./webgl/interaction"),t("./webgl/light"),t("./webgl/loading"),t("./webgl/material"),t("./webgl/p5.Camera"),t("./webgl/p5.Geometry"),t("./webgl/p5.Matrix"),t("./webgl/p5.RendererGL.Immediate"),t("./webgl/p5.RendererGL"),t("./webgl/p5.RendererGL.Retained"),t("./webgl/p5.Shader"),t("./webgl/p5.Texture"),t("./webgl/text"),t("./core/init"),e.exports=r},{"./color/color_conversion":14,"./color/creating_reading":15,"./color/p5.Color":16,"./color/setting":17,"./core/constants":18,"./core/environment":19,"./core/error_helpers":20,"./core/helpers":21,"./core/init":22,"./core/legacy":23,"./core/main":24,"./core/p5.Element":25,"./core/p5.Graphics":26,"./core/p5.Renderer":27,"./core/p5.Renderer2D":28,"./core/rendering":29,"./core/shape/2d_primitives":30,"./core/shape/attributes":31,"./core/shape/curves":32,"./core/shape/vertex":33,"./core/shim":34,"./core/structure":35,"./core/transform":36,"./data/p5.TypedDict":37,"./events/acceleration":38,"./events/keyboard":39,"./events/mouse":40,"./events/touch":41,"./image/filters":42,"./image/image":43,"./image/loading_displaying":44,"./image/p5.Image":45,"./image/pixels":46,"./io/files":47,"./io/p5.Table":48,"./io/p5.TableRow":49,"./io/p5.XML":50,"./math/calculation":51,"./math/math":52,"./math/noise":53,"./math/p5.Vector":54,"./math/random":55,"./math/trigonometry":56,"./typography/attributes":57,"./typography/loading_displaying":58,"./typography/p5.Font":59,"./utilities/array_functions":60,"./utilities/conversion":61,"./utilities/string_functions":62,"./utilities/time_date":63,"./webgl/3d_primitives":64,"./webgl/interaction":65,"./webgl/light":66,"./webgl/loading":67,"./webgl/material":68,"./webgl/p5.Camera":69,"./webgl/p5.Geometry":70,"./webgl/p5.Matrix":71,"./webgl/p5.RendererGL":74,"./webgl/p5.RendererGL.Immediate":72,"./webgl/p5.RendererGL.Retained":73,"./webgl/p5.Shader":75,"./webgl/p5.Texture":76,"./webgl/text":77}],14:[function(t,e,i){"use strict";var r=t("../core/main");r.ColorConversion={},r.ColorConversion._hsbaToHSLA=function(t){var e=t[0],i=t[1],r=t[2],n=(2-i)*r/2;return 0!==n&&(1===n?i=0:n<.5?i/=2-i:i=i*r/(2-2*n)),[e,i,n,t[3]]},r.ColorConversion._hsbaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s,a,h=Math.floor(e),l=r*(1-i),u=r*(1-i*(e-h)),c=r*(1-i*(1+h-e));1===h?(o=u,s=r,a=l):2===h?(o=l,s=r,a=c):3===h?(o=l,s=u,a=r):4===h?(o=c,s=l,a=r):5===h?(o=r,s=l,a=u):(o=r,s=c,a=l),n=[o,s,a,t[3]]}return n},r.ColorConversion._hslaToHSBA=function(t){var e,i=t[0],r=t[1],n=t[2];return[i,r=2*((e=n<.5?(1+r)*n:n+r-n*r)-n)/e,e,t[3]]},r.ColorConversion._hslaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s=2*r-(o=r<.5?(1+i)*r:r+i-r*i),a=function(t,e,i){return t<0?t+=6:t>=6&&(t-=6),t<1?e+(i-e)*t:t<3?i:t<4?e+(i-e)*(4-t):e};n=[a(e+2,s,o),a(e,s,o),a(e-2,s,o),t[3]]}return n},r.ColorConversion._rgbaToHSBA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=s-Math.min(r,n,o);return 0===a?(e=0,i=0):(i=a/s,r===s?e=(n-o)/a:n===s?e=2+(o-r)/a:o===s&&(e=4+(r-n)/a),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,s,t[3]]},r.ColorConversion._rgbaToHSLA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=Math.min(r,n,o),h=s+a,l=s-a;return 0===l?(e=0,i=0):(i=h<1?l/h:l/(2-h),r===s?e=(n-o)/l:n===s?e=2+(o-r)/l:o===s&&(e=4+(r-n)/l),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,h/2,t[3]]},e.exports=r.ColorConversion},{"../core/main":24}],15:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),t("../core/error_helpers"),r.prototype.alpha=function(t){return r._validateParameters("alpha",arguments),this.color(t)._getAlpha()},r.prototype.blue=function(t){return r._validateParameters("blue",arguments),this.color(t)._getBlue()},r.prototype.brightness=function(t){return r._validateParameters("brightness",arguments),this.color(t)._getBrightness()},r.prototype.color=function(){if(r._validateParameters("color",arguments),arguments[0]instanceof r.Color)return arguments[0];var t=arguments[0]instanceof Array?arguments[0]:arguments;return new r.Color(this,t)},r.prototype.green=function(t){return r._validateParameters("green",arguments),this.color(t)._getGreen()},r.prototype.hue=function(t){return r._validateParameters("hue",arguments),this.color(t)._getHue()},r.prototype.lerpColor=function(t,e,i){r._validateParameters("lerpColor",arguments);var o,s,a,h,l,u,c=this._colorMode,p=this._colorMaxes;if(c===n.RGB)l=t.levels.map(function(t){return t/255}),u=e.levels.map(function(t){return t/255});else if(c===n.HSB)t._getBrightness(),e._getBrightness(),l=t.hsba,u=e.hsba;else{if(c!==n.HSL)throw new Error(c+"cannot be used for interpolation.");t._getLightness(),e._getLightness(),l=t.hsla,u=e.hsla}return i=Math.max(Math.min(i,1),0),void 0===this.lerp&&(this.lerp=function(t,e,i){return i*(e-t)+t}),o=this.lerp(l[0],u[0],i),s=this.lerp(l[1],u[1],i),a=this.lerp(l[2],u[2],i),h=this.lerp(l[3],u[3],i),o*=p[c][0],s*=p[c][1],a*=p[c][2],h*=p[c][3],this.color(o,s,a,h)},r.prototype.lightness=function(t){return r._validateParameters("lightness",arguments),this.color(t)._getLightness()},r.prototype.red=function(t){return r._validateParameters("red",arguments),this.color(t)._getRed()},r.prototype.saturation=function(t){return r._validateParameters("saturation",arguments),this.color(t)._getSaturation()},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"./p5.Color":16}],16:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("./color_conversion");r.Color=function(t,e){if(this._storeModeAndMaxes(t._colorMode,t._colorMaxes),this.mode!==n.RGB&&this.mode!==n.HSL&&this.mode!==n.HSB)throw new Error(this.mode+" is an invalid colorMode.");return this._array=r.Color._parseInputs.apply(this,e),this._calculateLevels(),this},r.Color.prototype.toString=function(t){this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsla||(this.hsla=o._rgbaToHSLA(this._array));var e=this.levels,i=this._array,r=i[3];switch(t){case"#rrggbb":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16));case"#rrggbbaa":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16),e[3]<16?"0".concat(e[2].toString(16)):e[3].toString(16));case"#rgb":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16));case"#rgba":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16),Math.round(15*i[3]).toString(16));case"rgb":return"rgb(".concat(e[0],", ",e[1],", ",e[2],")");case"rgb%":return"rgb(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%)");case"rgba%":return"rgba(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%, ",(100*i[3]).toPrecision(3),"%)");case"hsb":case"hsv":return"hsb(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],")");case"hsb%":case"hsv%":return"hsb(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%)");case"hsba":case"hsva":return"hsba(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],", ",r,")");case"hsba%":case"hsva%":return"hsba(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"hsl":return"hsl(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],")");case"hsl%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%)");case"hsla":return"hsla(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],", ",r,")");case"hsla%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"rgba":default:return"rgba("+e[0]+","+e[1]+","+e[2]+","+r+")"}},r.Color.prototype.setRed=function(t){this._array[0]=t/this.maxes[n.RGB][0],this._calculateLevels()},r.Color.prototype.setGreen=function(t){this._array[1]=t/this.maxes[n.RGB][1],this._calculateLevels()},r.Color.prototype.setBlue=function(t){this._array[2]=t/this.maxes[n.RGB][2],this._calculateLevels()},r.Color.prototype.setAlpha=function(t){this._array[3]=t/this.maxes[this.mode][3],this._calculateLevels()},r.Color.prototype._calculateLevels=function(){for(var t=this._array,e=this.levels=new Array(t.length),i=t.length-1;i>=0;--i)e[i]=Math.round(255*t[i])},r.Color.prototype._getAlpha=function(){return this._array[3]*this.maxes[this.mode][3]},r.Color.prototype._storeModeAndMaxes=function(t,e){this.mode=t,this.maxes=e},r.Color.prototype._getMode=function(){return this.mode},r.Color.prototype._getMaxes=function(){return this.maxes},r.Color.prototype._getBlue=function(){return this._array[2]*this.maxes[n.RGB][2]},r.Color.prototype._getBrightness=function(){return this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[2]*this.maxes[n.HSB][2]},r.Color.prototype._getGreen=function(){return this._array[1]*this.maxes[n.RGB][1]},r.Color.prototype._getHue=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[0]*this.maxes[n.HSB][0]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[0]*this.maxes[n.HSL][0])},r.Color.prototype._getLightness=function(){return this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[2]*this.maxes[n.HSL][2]},r.Color.prototype._getRed=function(){return this._array[0]*this.maxes[n.RGB][0]},r.Color.prototype._getSaturation=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[1]*this.maxes[n.HSB][1]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[1]*this.maxes[n.HSL][1])};var s={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},a=/\s*/,h=/(\d{1,3})/,l=/((?:\d+(?:\.\d+)?)|(?:\.\d+))/,u=new RegExp(l.source+"%"),c={HEX3:/^#([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX4:/^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX6:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,HEX8:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,RGB:new RegExp(["^rgb\\(",h.source,",",h.source,",",h.source,"\\)$"].join(a.source),"i"),RGB_PERCENT:new RegExp(["^rgb\\(",u.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),RGBA:new RegExp(["^rgba\\(",h.source,",",h.source,",",h.source,",",l.source,"\\)$"].join(a.source),"i"),RGBA_PERCENT:new RegExp(["^rgba\\(",u.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSL:new RegExp(["^hsl\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSLA:new RegExp(["^hsla\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSB:new RegExp(["^hsb\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSBA:new RegExp(["^hsba\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i")};r.Color._parseInputs=function(t,e,i,a){var h,l=arguments.length,u=this.mode,p=this.maxes[u],d=[];if(l>=3){for(d[0]=t/p[0],d[1]=e/p[1],d[2]=i/p[2],d[3]="number"==typeof a?a/p[3]:1,h=d.length-1;h>=0;--h){var f=d[h];f<0?d[h]=0:f>1&&(d[h]=1)}return u===n.HSL?o._hslaToRGBA(d):u===n.HSB?o._hsbaToRGBA(d):d}if(1===l&&"string"==typeof t){var m=t.trim().toLowerCase();if(s[m])return r.Color._parseInputs.call(this,s[m]);if(c.HEX3.test(m))return(d=c.HEX3.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255}))[3]=1,d;if(c.HEX6.test(m))return(d=c.HEX6.exec(m).slice(1).map(function(t){return parseInt(t,16)/255}))[3]=1,d;if(c.HEX4.test(m))return d=c.HEX4.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255});if(c.HEX8.test(m))return d=c.HEX8.exec(m).slice(1).map(function(t){return parseInt(t,16)/255});if(c.RGB.test(m))return(d=c.RGB.exec(m).slice(1).map(function(t){return t/255}))[3]=1,d;if(c.RGB_PERCENT.test(m))return(d=c.RGB_PERCENT.exec(m).slice(1).map(function(t){return parseFloat(t)/100}))[3]=1,d;if(c.RGBA.test(m))return d=c.RGBA.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):t/255});if(c.RGBA_PERCENT.test(m))return d=c.RGBA_PERCENT.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):parseFloat(t)/100});if(c.HSL.test(m)?(d=c.HSL.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSLA.test(m)&&(d=c.HSLA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),(d=d.map(function(t){return Math.max(Math.min(t,1),0)})).length)return o._hslaToRGBA(d);if(c.HSB.test(m)?(d=c.HSB.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSBA.test(m)&&(d=c.HSBA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),d.length){for(h=d.length-1;h>=0;--h)d[h]=Math.max(Math.min(d[h],1),0);return o._hsbaToRGBA(d)}d=[1,1,1,1]}else{if(1!==l&&2!==l||"number"!=typeof t)throw new Error(arguments+"is not a valid color representation.");d[0]=t/p[2],d[1]=t/p[2],d[2]=t/p[2],d[3]="number"==typeof e?e/p[3]:1,d=d.map(function(t){return Math.max(Math.min(t,1),0)})}return d},e.exports=r.Color},{"../core/constants":18,"../core/main":24,"./color_conversion":14}],17:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),r.prototype.background=function(){return arguments[0]instanceof r.Image?this.image(arguments[0],0,0,this.width,this.height):this._renderer.background.apply(this._renderer,arguments),this},r.prototype.clear=function(){return this._renderer.clear(),this},r.prototype.colorMode=function(t,e,i,o,s){if(r._validateParameters("colorMode",arguments),t===n.RGB||t===n.HSB||t===n.HSL){this._colorMode=t;var a=this._colorMaxes[t];2===arguments.length?(a[0]=e,a[1]=e,a[2]=e,a[3]=e):4===arguments.length?(a[0]=e,a[1]=i,a[2]=o):5===arguments.length&&(a[0]=e,a[1]=i,a[2]=o,a[3]=s)}return this},r.prototype.fill=function(){return this._renderer._setProperty("_fillSet",!0),this._renderer._setProperty("_doFill",!0),this._renderer.fill.apply(this._renderer,arguments),this},r.prototype.noFill=function(){return this._renderer._setProperty("_doFill",!1),this},r.prototype.noStroke=function(){return this._renderer._setProperty("_doStroke",!1),this},r.prototype.stroke=function(){return this._renderer._setProperty("_strokeSet",!0),this._renderer._setProperty("_doStroke",!0),this._renderer.stroke.apply(this._renderer,arguments),this},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Color":16}],18:[function(t,e,i){"use strict";var r=Math.PI;e.exports={P2D:"p2d",WEBGL:"webgl",ARROW:"default",CROSS:"crosshair",HAND:"pointer",MOVE:"move",TEXT:"text",WAIT:"wait",HALF_PI:r/2,PI:r,QUARTER_PI:r/4,TAU:2*r,TWO_PI:2*r,DEGREES:"degrees",RADIANS:"radians",DEG_TO_RAD:r/180,RAD_TO_DEG:180/r,CORNER:"corner",CORNERS:"corners",RADIUS:"radius",RIGHT:"right",LEFT:"left",CENTER:"center",TOP:"top",BOTTOM:"bottom",BASELINE:"alphabetic",POINTS:0,LINES:1,LINE_STRIP:3,LINE_LOOP:2,TRIANGLES:4,TRIANGLE_FAN:6,TRIANGLE_STRIP:5,QUADS:"quads",QUAD_STRIP:"quad_strip",CLOSE:"close",OPEN:"open",CHORD:"chord",PIE:"pie",PROJECT:"square",SQUARE:"butt",ROUND:"round",BEVEL:"bevel",MITER:"miter",RGB:"rgb",HSB:"hsb",HSL:"hsl",AUTO:"auto",ALT:18,BACKSPACE:8,CONTROL:17,DELETE:46,DOWN_ARROW:40,ENTER:13,ESCAPE:27,LEFT_ARROW:37,OPTION:18,RETURN:13,RIGHT_ARROW:39,SHIFT:16,TAB:9,UP_ARROW:38,BLEND:"source-over",ADD:"lighter",DARKEST:"darken",LIGHTEST:"lighten",DIFFERENCE:"difference",EXCLUSION:"exclusion",MULTIPLY:"multiply",SCREEN:"screen",REPLACE:"copy",OVERLAY:"overlay",HARD_LIGHT:"hard-light",SOFT_LIGHT:"soft-light",DODGE:"color-dodge",BURN:"color-burn",THRESHOLD:"threshold",GRAY:"gray",OPAQUE:"opaque",INVERT:"invert",POSTERIZE:"posterize",DILATE:"dilate",ERODE:"erode",BLUR:"blur",NORMAL:"normal",ITALIC:"italic",BOLD:"bold",_DEFAULT_TEXT_FILL:"#000000",_DEFAULT_LEADMULT:1.25,_CTX_MIDDLE:"middle",LINEAR:"linear",QUADRATIC:"quadratic",BEZIER:"bezier",CURVE:"curve",STROKE:"stroke",FILL:"fill",TEXTURE:"texture",IMMEDIATE:"immediate",NEAREST:"nearest",REPEAT:"repeat",CLAMP:"clamp",MIRROR:"mirror",LANDSCAPE:"landscape",PORTRAIT:"portrait",_DEFAULT_STROKE:"#000000",_DEFAULT_FILL:"#FFFFFF",GRID:"grid",AXES:"axes"}},{}],19:[function(t,e,i){"use strict";function r(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth||0}function n(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight||0}var o=t("./main"),s=t("./constants"),a=[s.ARROW,s.CROSS,s.HAND,s.MOVE,s.TEXT,s.WAIT];o.prototype._frameRate=0,o.prototype._lastFrameTime=window.performance.now(),o.prototype._targetFrameRate=60;var h=window.print;o.prototype.print=function(){arguments.length?console.log.apply(console,arguments):h()},o.prototype.frameCount=0,o.prototype.focused=document.hasFocus(),o.prototype.cursor=function(t,e,i){var r="auto",n=this._curElement.elt;if(a.indexOf(t)>-1)r=t;else if("string"==typeof t){var o="";e&&i&&"number"==typeof e&&"number"==typeof i&&(o=e+" "+i),r="http://"===t.substring(0,7)||"https://"===t.substring(0,8)?"url("+t+") "+o+", auto":/\.(cur|jpg|jpeg|gif|png|CUR|JPG|JPEG|GIF|PNG)$/.test(t)?"url("+t+") "+o+", auto":t}n.style.cursor=r},o.prototype.frameRate=function(t){return o._validateParameters("frameRate",arguments),"number"!=typeof t||t<0?this._frameRate:(this._setProperty("_targetFrameRate",t),this._runFrames(),this)},o.prototype.getFrameRate=function(){return this.frameRate()},o.prototype.setFrameRate=function(t){return this.frameRate(t)},o.prototype.noCursor=function(){this._curElement.elt.style.cursor="none"},o.prototype.displayWidth=screen.width,o.prototype.displayHeight=screen.height,o.prototype.windowWidth=r(),o.prototype.windowHeight=n(),o.prototype._onresize=function(t){this._setProperty("windowWidth",r()),this._setProperty("windowHeight",n());var e,i=this._isGlobal?window:this;"function"==typeof i.windowResized&&(void 0===(e=i.windowResized(t))||e||t.preventDefault())},o.prototype.width=0,o.prototype.height=0,o.prototype.fullscreen=function(t){if(o._validateParameters("fullscreen",arguments),void 0===t)return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;t?function(t){if(!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled))throw new Error("Fullscreen not enabled in this browser.");t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.msRequestFullscreen&&t.msRequestFullscreen()}(document.documentElement):document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.msExitFullscreen&&document.msExitFullscreen()},o.prototype.pixelDensity=function(t){var e;return o._validateParameters("pixelDensity",arguments),"number"==typeof t?(t!==this._pixelDensity&&(this._pixelDensity=t,this._pixelsDirty=!0),e=this,this.resizeCanvas(this.width,this.height,!0)):e=this._pixelDensity,e},o.prototype.displayDensity=function(){return window.devicePixelRatio},o.prototype.getURL=function(){return location.href},o.prototype.getURLPath=function(){return location.pathname.split("/").filter(function(t){return""!==t})},o.prototype.getURLParams=function(){for(var t,e=/[?&]([^&=]+)(?:[&=])([^&=]+)/gim,i={};null!=(t=e.exec(location.search));)t.index===e.lastIndex&&e.lastIndex++,i[t[1]]=t[2];return i},e.exports=o},{"./constants":18,"./main":24}],20:[function(t,e,i){"use strict";var r=t("./main");t("./constants"),r._validateParameters=r._friendlyFileLoadError=function(){};var n=null,o=function(){var e={},i=function(t){return Object.getOwnPropertyNames(t).filter(function(t){return!("_"===t[0]||t in e||(e[t]=!0,0))}).map(function(e){var i;return i="function"==typeof t[e]?"function":e===e.toUpperCase()?"constant":"variable",{name:e,type:i}})};(n=[].concat(i(r.prototype),i(t("./constants")))).sort(function(t,e){return e.name.length-t.name.length})},s=function(t,e){e||(e=console.log.bind(console)),n||o(),n.some(function(i){if(t.message&&null!==t.message.match("\\W?"+i.name+"\\W"))return e("Did you just try to use p5.js's "+i.name+("function"===i.type?"() ":" ")+i.type+"? If so, you may want to move it into your sketch's setup() function.\n\nFor more details, see: https://github.com/processing/p5.js/wiki/p5.js-overview#why-cant-i-assign-variables-using-p5-functions-and-variables-before-setup"),!0})};r.prototype._helpForMisusedAtTopLevelCode=s,"complete"!==document.readyState&&(window.addEventListener("error",s,!1),window.addEventListener("load",function(){window.removeEventListener("error",s,!1)})),e.exports=r},{"../../docs/reference/data.json":void 0,"./constants":18,"./main":24}],21:[function(t,e,i){"use strict";var r=t("./constants");e.exports={modeAdjust:function(t,e,i,n,o){return o===r.CORNER?{x:t,y:e,w:i,h:n}:o===r.CORNERS?{x:t,y:e,w:i-t,h:n-e}:o===r.RADIUS?{x:t-i,y:e-n,w:2*i,h:2*n}:o===r.CENTER?{x:t-.5*i,y:e-.5*n,w:i,h:n}:void 0}}},{"./constants":18}],22:[function(t,e,i){"use strict";var r=t("../core/main"),n=function(){window.mocha||(window.setup&&"function"==typeof window.setup||window.draw&&"function"==typeof window.draw)&&!r.instance&&new r};"complete"===document.readyState?n():window.addEventListener("load",n,!1)},{"../core/main":24}],23:[function(t,e,i){"use strict";var r=t("./main");r.prototype.exit=function(){throw new Error("exit() not implemented, see remove()")},r.prototype.pushStyle=function(){throw new Error("pushStyle() not used, see push()")},r.prototype.popStyle=function(){throw new Error("popStyle() not used, see pop()")},r.prototype.size=function(){var t="size() is not a valid p5 function, to set the size of the ";throw new Error(t+="drawing canvas, please use createCanvas() instead")},e.exports=r},{"./main":24}],24:[function(t,e,i){"use strict";t("./shim");var r=t("./constants"),n=function(t,e,i){"boolean"==typeof e&&void 0===i&&(i=e,e=void 0),this._setupDone=!1,this._pixelDensity=Math.ceil(window.devicePixelRatio)||1,this._userNode=e,this._curElement=null,this._elements=[],this._requestAnimId=0,this._preloadCount=0,this._isGlobal=!1,this._loop=!0,this._initializeInstanceVariables(),this._defaultCanvasSize={width:100,height:100},this._events={mousemove:null,mousedown:null,mouseup:null,dragend:null,dragover:null,click:null,dblclick:null,mouseover:null,mouseout:null,keydown:null,keyup:null,keypress:null,touchstart:null,touchmove:null,touchend:null,resize:null,blur:null},this._events.wheel=null,this._loadingScreenId="p5_loading",this._registeredMethods={};for(var r=Object.getOwnPropertyNames(n.prototype._registeredMethods),o=0;o=i-5)&&(this.redraw(),this._frameRate=1e3/(t-this._lastFrameTime),this._lastFrameTime=t,void 0!==this._updateMouseCoords&&this._updateMouseCoords()),this._loop&&(this._requestAnimId=window.requestAnimationFrame(this._draw))}.bind(this),this._runFrames=function(){this._updateInterval&&clearInterval(this._updateInterval)}.bind(this),this._setProperty=function(t,e){this[t]=e,this._isGlobal&&(window[t]=e)}.bind(this),this.remove=function(){var t=document.getElementById(this._loadingScreenId);if(t&&(t.parentNode.removeChild(t),this._incrementPreload()),this._curElement){for(var e in this._loop=!1,this._requestAnimId&&window.cancelAnimationFrame(this._requestAnimId),this._events)window.removeEventListener(e,this._events[e]);for(var i=0;i-1?o.readAsText(n):o.readAsDataURL(n)}},this)):console.log("The File APIs are not fully supported in this browser."),this},s.Element.prototype._setProperty=function(t,e){this[t]=e},e.exports=s.Element},{"./main":24}],26:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");r.Graphics=function(t,e,i,o){var s=i||n.P2D;for(var a in this.canvas=document.createElement("canvas"),(o._userNode||document.body).appendChild(this.canvas),r.Element.call(this,this.canvas,o,!1),r.prototype)this[a]||("function"==typeof r.prototype[a]?this[a]=r.prototype[a].bind(this):this[a]=r.prototype[a]);return r.prototype._initializeInstanceVariables.apply(this),this.width=t,this.height=e,this._pixelDensity=o._pixelDensity,s===n.WEBGL?this._renderer=new r.RendererGL(this.canvas,this,!1):this._renderer=new r.Renderer2D(this.canvas,this,!1),o._elements.push(this),this._renderer.resize(t,e),this._renderer._applyDefaults(),this},r.Graphics.prototype=Object.create(r.Element.prototype),r.Graphics.prototype.remove=function(){this.elt.parentNode&&this.elt.parentNode.removeChild(this.elt);var t=this._pInst._elements.indexOf(this);for(var e in-1!==t&&this._pInst._elements.splice(t,1),this._events)this.elt.removeEventListener(e,this._events[e])},e.exports=r.Graphics},{"./constants":18,"./main":24}],27:[function(t,e,i){"use strict";function r(t){var e=0,i=0;if(t.offsetParent)do{e+=t.offsetLeft,i+=t.offsetTop}while(t=t.offsetParent);else e+=t.offsetLeft,i+=t.offsetTop;return[e,i]}var n=t("./main"),o=t("../core/constants");n.Renderer=function(t,e,i){n.Element.call(this,t,e),this.canvas=t,i?(this._isMainCanvas=!0,this._pInst._setProperty("_curElement",this),this._pInst._setProperty("canvas",this.canvas),this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height)):(this.canvas.style.display="none",this._styles=[]),this._textSize=12,this._textLeading=15,this._textFont="sans-serif",this._textStyle=o.NORMAL,this._textAscent=null,this._textDescent=null,this._textAlign=o.LEFT,this._textBaseline=o.BASELINE,this._rectMode=o.CORNER,this._ellipseMode=o.CENTER,this._curveTightness=0,this._imageMode=o.CORNER,this._tint=null,this._doStroke=!0,this._doFill=!0,this._strokeSet=!1,this._fillSet=!1},n.Renderer.prototype=Object.create(n.Element.prototype),n.Renderer.prototype.push=function(){return{properties:{_doStroke:this._doStroke,_strokeSet:this._strokeSet,_doFill:this._doFill,_fillSet:this._fillSet,_tint:this._tint,_imageMode:this._imageMode,_rectMode:this._rectMode,_ellipseMode:this._ellipseMode,_textFont:this._textFont,_textLeading:this._textLeading,_textSize:this._textSize,_textAlign:this._textAlign,_textBaseline:this._textBaseline,_textStyle:this._textStyle}}},n.Renderer.prototype.pop=function(t){t.properties&&Object.assign(this,t.properties)},n.Renderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.elt.width=t*this._pInst._pixelDensity,this.elt.height=e*this._pInst._pixelDensity,this.elt.style.width=t+"px",this.elt.style.height=e+"px",this._isMainCanvas&&(this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height))},n.Renderer.prototype.textLeading=function(t){return"number"==typeof t?(this._setProperty("_textLeading",t),this._pInst):this._textLeading},n.Renderer.prototype.textSize=function(t){return"number"==typeof t?(this._setProperty("_textSize",t),this._setProperty("_textLeading",t*o._DEFAULT_LEADMULT),this._applyTextProperties()):this._textSize},n.Renderer.prototype.textStyle=function(t){return t?(t!==o.NORMAL&&t!==o.ITALIC&&t!==o.BOLD||this._setProperty("_textStyle",t),this._applyTextProperties()):this._textStyle},n.Renderer.prototype.textAscent=function(){return null===this._textAscent&&this._updateTextMetrics(),this._textAscent},n.Renderer.prototype.textDescent=function(){return null===this._textDescent&&this._updateTextMetrics(),this._textDescent},n.Renderer.prototype.textAlign=function(t,e){return void 0!==t?(this._setProperty("_textAlign",t),void 0!==e&&this._setProperty("_textBaseline",e),this._applyTextProperties()):{horizontal:this._textAlign,vertical:this._textBaseline}},n.Renderer.prototype.text=function(t,e,i,r,n){var s,a,h,l,u,c,p,d,f=this._pInst,m=Number.MAX_VALUE;if((this._doFill||this._doStroke)&&void 0!==t){if("string"!=typeof t&&(t=t.toString()),t=t.replace(/(\t)/g," "),s=t.split("\n"),void 0!==r){for(d=0,h=0;hr?(u=p[a]+" ",d+=f.textLeading()):u=c;switch(this._rectMode===o.CENTER&&(e-=r/2,i-=n/2),this._textAlign){case o.CENTER:e+=r/2;break;case o.RIGHT:e+=r}var y=!1;if(void 0!==n){switch(this._textBaseline){case o.BOTTOM:i+=n-d;break;case o.CENTER:i+=(n-d)/2;break;case o.BASELINE:y=!0,this._textBaseline=o.TOP}m=i+n-f.textAscent()}for(h=0;hr&&u.length>0?(this._renderText(f,u,e,i,m),u=p[a]+" ",i+=f.textLeading()):u=c;this._renderText(f,u,e,i,m),i+=f.textLeading(),y&&(this._textBaseline=o.BASELINE)}}else{var v=0,g=f.textAlign().vertical;for(g===o.CENTER?v=(s.length-1)*f.textLeading()/2:g===o.BOTTOM&&(v=(s.length-1)*f.textLeading()),l=0;l0&&(c=u.width/t.width),this.drawingContext.drawImage(u,c*e,c*i,c*n,c*o,s,a,h,l)}catch(t){if("NS_ERROR_NOT_AVAILABLE"!==t.name)throw t}this._pInst._pixelsDirty=!0},r.Renderer2D.prototype._getTintedImageCanvas=function(t){if(!t.canvas)return t;var e=o._toPixels(t.canvas),i=document.createElement("canvas");i.width=t.canvas.width,i.height=t.canvas.height;for(var r=i.getContext("2d"),n=r.createImageData(t.canvas.width,t.canvas.height),s=n.data,a=0;a=this.width||e>=this.height)return[0,0,0,255];var o=this._pInst||this,s=o._pixelDensity;t=Math.floor(t),e=Math.floor(e),i=Math.floor(i),n=Math.floor(n);var a,h,l=t*s,u=e*s;if(1!==i||1!==n||this instanceof r.RendererGL){var c=Math.min(i,o.width),p=Math.min(n,o.height),d=c*s,f=p*s,m=new r.Image(c,p);return m.canvas.getContext("2d").drawImage(this.canvas,l,u,d,f,0,0,c,p),m}return o._pixelsDirty?(a=this.drawingContext.getImageData(l,u,1,1).data,h=0):(a=o.pixels,h=4*(l+u*this.width*s)),[a[h+0],a[h+1],a[h+2],a[h+3]]},r.Renderer2D.prototype.loadPixels=function(){var t=this._pInst||this;if(t._pixelsDirty){t._pixelsDirty=!1;var e=t._pixelDensity,i=this.width*e,r=this.height*e,n=this.drawingContext.getImageData(0,0,i,r);t._setProperty("imageData",n),t._setProperty("pixels",n.data)}},r.Renderer2D.prototype.set=function(t,e,i){t=Math.floor(t),e=Math.floor(e);var n=this._pInst||this;if(i instanceof r.Image)this.drawingContext.save(),this.drawingContext.setTransform(1,0,0,1,0,0),this.drawingContext.scale(n._pixelDensity,n._pixelDensity),this.drawingContext.drawImage(i.canvas,t,e),this.drawingContext.restore(),n._pixelsDirty=!0;else{var o=0,s=0,a=0,h=0,l=4*(e*n._pixelDensity*(this.width*n._pixelDensity)+t*n._pixelDensity);if(n.imageData&&!n._pixelsDirty||n.loadPixels.call(n),"number"==typeof i)l1e-5;)c=Math.min(s-o,n.HALF_PI),p.push(this._acuteArcToBezier(o,c)),o+=c;return this._doFill&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a!==n.PIE&&null!=a||h.lineTo(t,e),h.closePath(),h.fill()),this._doStroke&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a===n.PIE?(h.lineTo(t,e),h.closePath()):a===n.CHORD&&h.closePath(),h.stroke()),this},r.Renderer2D.prototype.ellipse=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;var l=.5522847498,u=a/2*l,c=h/2*l,p=n+a,d=o+h,f=n+a/2,m=o+h/2;e.beginPath(),e.moveTo(n,m),e.bezierCurveTo(n,m-c,f-u,o,f,o),e.bezierCurveTo(f+u,o,p,m-c,p,m),e.bezierCurveTo(p,m+c,f+u,d,f,d),e.bezierCurveTo(f-u,d,n,m+c,n,m),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.line=function(t,e,i,r){var n=this.drawingContext;return this._doStroke?this._getStroke()===s?this:(n.lineWidth%2==1&&n.translate(.5,.5),n.beginPath(),n.moveTo(t,e),n.lineTo(i,r),n.stroke(),n.lineWidth%2==1&&n.translate(-.5,-.5),this):this},r.Renderer2D.prototype.point=function(t,e){var i=this.drawingContext;if(!this._doStroke)return this;if(this._getStroke()===s)return this;var r=this._getStroke(),o=this._getFill();t=Math.round(t),e=Math.round(e),this._setFill(r),i.lineWidth>1?(i.beginPath(),i.arc(t,e,i.lineWidth/2,0,n.TWO_PI,!1),i.fill()):i.fillRect(t,e,1,1),this._setFill(o)},r.Renderer2D.prototype.quad=function(t,e,i,r,n,o,a,h){var l=this.drawingContext,u=this._doFill,c=this._doStroke;if(u&&!c){if(this._getFill()===s)return this}else if(!u&&c&&this._getStroke()===s)return this;return l.beginPath(),l.moveTo(t,e),l.lineTo(i,r),l.lineTo(n,o),l.lineTo(a,h),l.closePath(),u&&l.fill(),c&&l.stroke(),this},r.Renderer2D.prototype.rect=function(t){var e=t[0],i=t[1],r=t[2],n=t[3],o=t[4],a=t[5],h=t[6],l=t[7],u=this.drawingContext,c=this._doFill,p=this._doStroke;if(c&&!p){if(this._getFill()===s)return this}else if(!c&&p&&this._getStroke()===s)return this;if(this._doStroke&&u.lineWidth%2==1&&u.translate(.5,.5),u.beginPath(),void 0===o)u.rect(e,i,r,n);else{void 0===a&&(a=o),void 0===h&&(h=a),void 0===l&&(l=h);var d=r/2,f=n/2;r<2*o&&(o=d),n<2*o&&(o=f),r<2*a&&(a=d),n<2*a&&(a=f),r<2*h&&(h=d),n<2*h&&(h=f),r<2*l&&(l=d),n<2*l&&(l=f),u.beginPath(),u.moveTo(e+o,i),u.arcTo(e+r,i,e+r,i+n,a),u.arcTo(e+r,i+n,e,i+n,h),u.arcTo(e,i+n,e,i,l),u.arcTo(e,i,e+r,i,o),u.closePath()}return this._doFill&&u.fill(),this._doStroke&&u.stroke(),this._doStroke&&u.lineWidth%2==1&&u.translate(-.5,-.5),this},r.Renderer2D.prototype.triangle=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3],l=t[4],u=t[5];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;e.beginPath(),e.moveTo(n,o),e.lineTo(a,h),e.lineTo(l,u),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.endShape=function(t,e,i,r,o,s,a){if(0===e.length)return this;if(!this._doStroke&&!this._doFill)return this;var h,l=t===n.CLOSE;l&&!s&&e.push(e[0]);var u,c,p=e.length;if(!i||a!==n.POLYGON&&null!==a)if(!r||a!==n.POLYGON&&null!==a)if(!o||a!==n.POLYGON&&null!==a)if(a===n.POINTS)for(u=0;u2){for(this.drawingContext.beginPath(),u=2;u3)for(u=0;u+13){var d=[],f=1-this._curveTightness;for(this.drawingContext.beginPath(),this.drawingContext.moveTo(e[1][0],e[1][1]),u=1;u+2=o))return t.push(),this._isOpenType()?this._textFont._renderPath(e,i,r,{renderer:this}):(this._doStroke&&this._strokeSet&&this.drawingContext.strokeText(e,i,r),this._doFill&&(this._fillSet||this._setFill(n._DEFAULT_TEXT_FILL),this.drawingContext.fillText(e,i,r))),t.pop(),this._pInst._pixelsDirty=!0,t},r.Renderer2D.prototype.textWidth=function(t){return this._isOpenType()?this._textFont._textWidth(t,this._textSize):this.drawingContext.measureText(t).width},r.Renderer2D.prototype._applyTextProperties=function(){var t,e=this._pInst;return this._setProperty("_textAscent",null),this._setProperty("_textDescent",null),t=this._textFont,this._isOpenType()&&(t=this._textFont.font.familyName,this._setProperty("_textStyle",this._textFont.font.styleName)),this.drawingContext.font=(this._textStyle||"normal")+" "+(this._textSize||12)+"px "+(t||"sans-serif"),this.drawingContext.textAlign=this._textAlign,this._textBaseline===n.CENTER?this.drawingContext.textBaseline=n._CTX_MIDDLE:this.drawingContext.textBaseline=this._textBaseline,e},r.Renderer2D.prototype.push=function(){return this.drawingContext.save(),r.Renderer.prototype.push.apply(this)},r.Renderer2D.prototype.pop=function(t){this.drawingContext.restore(),this._cachedFillStyle=this.drawingContext.fillStyle,this._cachedStrokeStyle=this.drawingContext.strokeStyle,r.Renderer.prototype.pop.call(this,t)},e.exports=r.Renderer2D},{"../image/filters":42,"./constants":18,"./main":24,"./p5.Renderer":27}],29:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");t("./p5.Graphics"),t("./p5.Renderer2D"),t("../webgl/p5.RendererGL");var o="defaultCanvas0",s="p5Canvas";r.prototype.createCanvas=function(t,e,i){r._validateParameters("createCanvas",arguments);var a,h=i||n.P2D;if(h===n.WEBGL){if(a=document.getElementById(o)){a.parentNode.removeChild(a);var l=this._renderer;this._elements=this._elements.filter(function(t){return t!==l})}(a=document.createElement("canvas")).id=o,a.classList.add(s)}else if(this._defaultGraphicsCreated)a=this.canvas;else{a=document.createElement("canvas");for(var u=0;document.getElementById("defaultCanvas"+u);)u++;o="defaultCanvas"+u,a.id=o,a.classList.add(s)}return this._setupDone||(a.dataset.hidden=!0,a.style.visibility="hidden"),this._userNode?this._userNode.appendChild(a):document.body.appendChild(a),h===n.WEBGL?(this._setProperty("_renderer",new r.RendererGL(a,this,!0)),this._elements.push(this._renderer)):this._defaultGraphicsCreated||(this._setProperty("_renderer",new r.Renderer2D(a,this,!0)),this._defaultGraphicsCreated=!0,this._elements.push(this._renderer)),this._renderer.resize(t,e),this._renderer._applyDefaults(),this._renderer},r.prototype.resizeCanvas=function(t,e,i){if(r._validateParameters("resizeCanvas",arguments),this._renderer){var n={};for(var o in this.drawingContext){var s=this.drawingContext[o];"object"!=typeof s&&"function"!=typeof s&&(n[o]=s)}for(var a in this._renderer.resize(t,e),this.width=t,this.height=e,n)try{this.drawingContext[a]=n[a]}catch(t){}i||this.redraw()}},r.prototype.noCanvas=function(){this.canvas&&this.canvas.parentNode.removeChild(this.canvas)},r.prototype.createGraphics=function(t,e,i){return r._validateParameters("createGraphics",arguments),new r.Graphics(t,e,i,this)},r.prototype.blendMode=function(t){if(r._validateParameters("blendMode",arguments),t!==n.BLEND&&t!==n.DARKEST&&t!==n.LIGHTEST&&t!==n.DIFFERENCE&&t!==n.MULTIPLY&&t!==n.EXCLUSION&&t!==n.SCREEN&&t!==n.REPLACE&&t!==n.OVERLAY&&t!==n.HARD_LIGHT&&t!==n.SOFT_LIGHT&&t!==n.DODGE&&t!==n.BURN&&t!==n.ADD&&t!==n.NORMAL)throw new Error("Mode "+t+" not recognized.");this._renderer.blendMode(t)},e.exports=r},{"../webgl/p5.RendererGL":74,"./constants":18,"./main":24,"./p5.Graphics":26,"./p5.Renderer2D":28}],30:[function(t,e,i){"use strict";var r=t("../main"),n=t("../constants"),o=t("../helpers");t("../error_helpers"),r.prototype.arc=function(t,e,i,s,a,h,l,u){if(r._validateParameters("arc",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;for(a=this._toRadians(a),h=this._toRadians(h);a<0;)a+=n.TWO_PI;for(;h<0;)h+=n.TWO_PI;void 0!==a&&void 0!==h&&(h.toFixed(10)===a.toFixed(10)||Math.abs(h-a)===n.TWO_PI?(a%=n.TWO_PI,h%=n.TWO_PI,a+=n.TWO_PI):Math.abs(h-a)>n.TWO_PI&&(a%=n.TWO_PI,h%=n.TWO_PI,h+=n.TWO_PI)),a<=n.HALF_PI?a=Math.atan(i/s*Math.tan(a)):a>n.HALF_PI&&a<=3*n.HALF_PI&&(a=Math.atan(i/s*Math.tan(a))+n.PI),h<=n.HALF_PI?h=Math.atan(i/s*Math.tan(h)):h>n.HALF_PI&&h<=3*n.HALF_PI&&(h=Math.atan(i/s*Math.tan(h))+n.PI),a>h&&(h+=n.TWO_PI),i=Math.abs(i),s=Math.abs(s);var c=o.modeAdjust(t,e,i,s,this._renderer._ellipseMode);return this._renderer.arc(c.x,c.y,c.w,c.h,a,h,l,u),this},r.prototype.ellipse=function(t,e,i,n,s){if(r._validateParameters("ellipse",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;i<0&&(i=Math.abs(i)),void 0===n?n=i:n<0&&(n=Math.abs(n));var a=o.modeAdjust(t,e,i,n,this._renderer._ellipseMode);return this._renderer.ellipse([a.x,a.y,a.w,a.h,s]),this},r.prototype.line=function(){return r._validateParameters("line",arguments),this._renderer._doStroke&&this._renderer.line.apply(this._renderer,arguments),this},r.prototype.point=function(){return r._validateParameters("point",arguments),this._renderer._doStroke&&this._renderer.point.apply(this._renderer,arguments),this},r.prototype.quad=function(){return r._validateParameters("quad",arguments),(this._renderer._doStroke||this._renderer._doFill)&&this._renderer.quad.apply(this._renderer,arguments),this},r.prototype.rect=function(){if(r._validateParameters("rect",arguments),this._renderer._doStroke||this._renderer._doFill){for(var t=o.modeAdjust(arguments[0],arguments[1],arguments[2],arguments[3],this._renderer._rectMode),e=[t.x,t.y,t.w,t.h],i=4;i0))throw new Error("vertex() must be used once before calling quadraticVertex()");u=!0;for(var e=[],i=0;id||Math.abs(this.accelerationY-this.pAccelerationY)>d||Math.abs(this.accelerationZ-this.pAccelerationZ)>d)&&t();var e=this.deviceTurned||window.deviceTurned;if("function"==typeof e){var i=this.rotationX+180,r=this.pRotationX+180,m=a+180;i-r>0&&i-r<270||i-r<-270?u="clockwise":(i-r<0||i-r>270)&&(u="counter-clockwise"),u!==n&&(m=i),Math.abs(i-m)>90&&Math.abs(i-m)<270&&(m=i,this._setProperty("turnAxis","X"),e()),n=u,a=m-180;var y=this.rotationY+180,v=this.pRotationY+180,g=h+180;y-v>0&&y-v<270||y-v<-270?c="clockwise":(y-v<0||y-this.pRotationY>270)&&(c="counter-clockwise"),c!==o&&(g=y),Math.abs(y-g)>90&&Math.abs(y-g)<270&&(g=y,this._setProperty("turnAxis","Y"),e()),o=c,h=g-180,this.rotationZ-this.pRotationZ>0&&this.rotationZ-this.pRotationZ<270||this.rotationZ-this.pRotationZ<-270?p="clockwise":(this.rotationZ-this.pRotationZ<0||this.rotationZ-this.pRotationZ>270)&&(p="counter-clockwise"),p!==s&&(l=this.rotationZ),Math.abs(this.rotationZ-l)>90&&Math.abs(this.rotationZ-l)<270&&(l=this.rotationZ,this._setProperty("turnAxis","Z"),e()),s=p,this._setProperty("turnAxis",void 0)}var _,b,S=this.deviceShaken||window.deviceShaken;"function"==typeof S&&(null!==this.pAccelerationX&&(_=Math.abs(this.accelerationX-this.pAccelerationX),b=Math.abs(this.accelerationY-this.pAccelerationY)),_+b>f&&S())},e.exports=r},{"../core/main":24}],39:[function(t,e,i){"use strict";var r=t("../core/main"),n={};r.prototype.isKeyPressed=!1,r.prototype.keyIsPressed=!1,r.prototype.key="",r.prototype.keyCode=0,r.prototype._onkeydown=function(t){if(!n[t.which]){this._setProperty("isKeyPressed",!0),this._setProperty("keyIsPressed",!0),this._setProperty("keyCode",t.which),n[t.which]=!0,this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which);var e=this.keyPressed||window.keyPressed;"function"!=typeof e||t.charCode||!1===e(t)&&t.preventDefault()}},r.prototype._onkeyup=function(t){var e=this.keyReleased||window.keyReleased;n[t.which]=!1,function(){for(var t in n)if(n.hasOwnProperty(t)&&!0===n[t])return!0;return!1}()||(this._setProperty("isKeyPressed",!1),this._setProperty("keyIsPressed",!1)),this._setProperty("_lastKeyCodeTyped",null),this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which),this._setProperty("keyCode",t.which),"function"==typeof e&&!1===e(t)&&t.preventDefault()},r.prototype._onkeypress=function(t){if(t.which!==this._lastKeyCodeTyped){this._setProperty("keyCode",t.which),this._setProperty("_lastKeyCodeTyped",t.which),this._setProperty("key",String.fromCharCode(t.which));var e=this.keyTyped||window.keyTyped;"function"==typeof e&&!1===e(t)&&t.preventDefault()}},r.prototype._onblur=function(t){n={}},r.prototype.keyIsDown=function(t){return r._validateParameters("keyIsDown",arguments),n[t]},e.exports=r},{"../core/main":24}],40:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._hasMouseInteracted=!1,r.prototype.mouseX=0,r.prototype.mouseY=0,r.prototype.pmouseX=0,r.prototype.pmouseY=0,r.prototype.winMouseX=0,r.prototype.winMouseY=0,r.prototype.pwinMouseX=0,r.prototype.pwinMouseY=0,r.prototype.mouseButton=0,r.prototype.mouseIsPressed=!1,r.prototype._updateNextMouseCoords=function(t){if(null!==this._curElement&&(!t.touches||t.touches.length>0)){var e=function(t,e,i,r){r&&!r.clientX&&(r.touches?r=r.touches[0]:r.changedTouches&&(r=r.changedTouches[0]));var n=t.getBoundingClientRect(),o=t.scrollWidth/e,s=t.scrollHeight/i;return{x:(r.clientX-n.left)/o,y:(r.clientY-n.top)/s,winX:r.clientX,winY:r.clientY,id:r.identifier}}(this._curElement.elt,this.width,this.height,t);this._setProperty("mouseX",e.x),this._setProperty("mouseY",e.y),this._setProperty("winMouseX",e.winX),this._setProperty("winMouseY",e.winY)}this._hasMouseInteracted||(this._updateMouseCoords(),this._setProperty("_hasMouseInteracted",!0))},r.prototype._updateMouseCoords=function(){this._setProperty("pmouseX",this.mouseX),this._setProperty("pmouseY",this.mouseY),this._setProperty("pwinMouseX",this.winMouseX),this._setProperty("pwinMouseY",this.winMouseY),this._setProperty("_pmouseWheelDeltaY",this._mouseWheelDeltaY)},r.prototype._setMouseButton=function(t){1===t.button?this._setProperty("mouseButton",n.CENTER):2===t.button?this._setProperty("mouseButton",n.RIGHT):this._setProperty("mouseButton",n.LEFT)},r.prototype._onmousemove=function(t){var e=this._isGlobal?window:this;this._updateNextMouseCoords(t),this.mouseIsPressed?"function"==typeof e.mouseDragged?!1===e.mouseDragged(t)&&t.preventDefault():"function"==typeof e.touchMoved&&!1===e.touchMoved(t)&&t.preventDefault():"function"==typeof e.mouseMoved&&!1===e.mouseMoved(t)&&t.preventDefault()},r.prototype._onmousedown=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!0),this._setMouseButton(t),this._updateNextMouseCoords(t),"function"==typeof e.mousePressed?!1===e.mousePressed(t)&&t.preventDefault():"function"==typeof e.touchStarted&&!1===e.touchStarted(t)&&t.preventDefault()},r.prototype._onmouseup=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!1),"function"==typeof e.mouseReleased?!1===e.mouseReleased(t)&&t.preventDefault():"function"==typeof e.touchEnded&&!1===e.touchEnded(t)&&t.preventDefault()},r.prototype._ondragend=r.prototype._onmouseup,r.prototype._ondragover=r.prototype._onmousemove,r.prototype._onclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.mouseClicked&&!1===e.mouseClicked(t)&&t.preventDefault()},r.prototype._ondblclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.doubleClicked&&!1===e.doubleClicked(t)&&t.preventDefault()},r.prototype._mouseWheelDeltaY=0,r.prototype._pmouseWheelDeltaY=0,r.prototype._onwheel=function(t){var e=this._isGlobal?window:this;this._setProperty("_mouseWheelDeltaY",t.deltaY),"function"==typeof e.mouseWheel&&(t.delta=t.deltaY,!1===e.mouseWheel(t)&&t.preventDefault())},e.exports=r},{"../core/constants":18,"../core/main":24}],41:[function(t,e,i){"use strict";function r(t,e,i,r,n){n=n||0;var o=t.getBoundingClientRect(),s=t.scrollWidth/e,a=t.scrollHeight/i,h=r.touches[n]||r.changedTouches[n];return{x:(h.clientX-o.left)/s,y:(h.clientY-o.top)/a,winX:h.clientX,winY:h.clientY,id:h.identifier}}var n=t("../core/main");n.prototype.touches=[],n.prototype._updateTouchCoords=function(t){if(null!==this._curElement){for(var e=[],i=0;i=r)break;x=0}for(A=x;A=r);A++){var O=c[g+R];P=a[A],v+=P[(-16777216&O)>>>24],f+=P[(16711680&O)>>16],m+=P[(65280&O)>>8],y+=P[255&O],d+=s[A],g++}M[_=R+w]=v/d,E[_]=f/d,k[_]=m/d,C[_]=y/d}R+=r}for(R=0,S=(b=-n)*r,T=0;T=l)break;x=0,_=b,g=w+S}for(A=x;A=l);A++)P=a[A],v+=P[M[g]],f+=P[E[g]],m+=P[k[g]],y+=P[C[g]],d+=s[A],_++,g+=r;c[w+R]=v/d<<24|f/d<<16|m/d<<8|y/d}R+=r,S+=r,b++}h._setPixels(i,c)}var n,o,s,a,h={_toPixels:function(t){return t instanceof ImageData?t.data:t.getContext("2d").getImageData(0,0,t.width,t.height).data},_getARGB:function(t,e){var i=4*e;return t[i+3]<<24&4278190080|t[i]<<16&16711680|t[i+1]<<8&65280|255&t[i+2]},_setPixels:function(t,e){for(var i=0,r=0,n=t.length;r>>16,t[i+1]=(65280&e[r])>>>8,t[i+2]=255&e[r],t[i+3]=(4278190080&e[r])>>>24},_toImageData:function(t){return t instanceof ImageData?t:t.getContext("2d").getImageData(0,0,t.width,t.height)},_createImageData:function(t,e){return h._tmpCanvas=document.createElement("canvas"),h._tmpCtx=h._tmpCanvas.getContext("2d"),this._tmpCtx.createImageData(t,e)},apply:function(t,e,i){var r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),o=e(n,i);o instanceof ImageData?r.putImageData(o,0,0,0,0,t.width,t.height):r.putImageData(n,0,0,0,0,t.width,t.height)},threshold:function(t,e){var i=h._toPixels(t);void 0===e&&(e=.5);for(var r=Math.floor(255*e),n=0;n=r?255:0,i[n]=i[n+1]=i[n+2]=o}},gray:function(t){for(var e=h._toPixels(t),i=0;i255)throw new Error("Level must be greater than 2 and less than 255 for posterize");for(var r=e-1,n=0;n>8)/r,i[n+1]=255*(s*e>>8)/r,i[n+2]=255*(a*e>>8)/r}},dilate:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))>(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m>o&&(n=c,o=m),v>o&&(n=d,o=v),g>o&&(n=f,o=g),x[b++]=n;h._setPixels(_,x)},erode:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))<(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m=1&&(e=o[0]),o.length>=2&&(i=o[1]),i=i||r.prototype._checkFileExtension(e,i)[1]||"png"){default:n="image/png";break;case"jpeg":case"jpg":n="image/jpeg"}t.toBlob(function(t){r.prototype.downloadFile(t,e,i)},n)},r.prototype.saveFrames=function(t,e,i,o,s){r._validateParameters("saveFrames",arguments);var a=i||3;a=r.prototype.constrain(a,0,15),a*=1e3;var h=o||15;h=r.prototype.constrain(h,0,22);var l=0,u=r.prototype._makeFrame,c=this._curElement.elt,p=setInterval(function(){u(t+l,e,c),l++},1e3/h);setTimeout(function(){if(clearInterval(p),s)s(n);else for(var t=0;t0&&t0&&this.loadPixels(),this.setModified(!0),this._pixelsDirty=!0},r.Image.prototype.copy=function(){var t,e,i,n,o,s,a,h,l;if(9===arguments.length)t=arguments[0],e=arguments[1],i=arguments[2],n=arguments[3],o=arguments[4],s=arguments[5],a=arguments[6],h=arguments[7],l=arguments[8];else{if(8!==arguments.length)throw new Error("Signature not supported");t=this,e=arguments[0],i=arguments[1],n=arguments[2],o=arguments[3],s=arguments[4],a=arguments[5],h=arguments[6],l=arguments[7]}r.Renderer2D._copyHelper(this,t,e,i,n,o,s,a,h,l),this._pixelsDirty=!0},r.Image.prototype.mask=function(t){void 0===t&&(t=this);var e=this.drawingContext.globalCompositeOperation,i=1;t instanceof r.Renderer&&(i=t._pInst._pixelDensity);var n=[t,0,0,i*t.width,i*t.height,0,0,this.width,this.height];this.drawingContext.globalCompositeOperation="destination-in",r.Image.prototype.copy.apply(this,n),this.drawingContext.globalCompositeOperation=e,this.setModified(!0)},r.Image.prototype.filter=function(t,e){n.apply(this.canvas,n[t.toLowerCase()],e),this.setModified(!0)},r.Image.prototype.blend=function(){r.prototype.blend.apply(this,arguments),this.setModified(!0)},r.Image.prototype.setModified=function(t){this._modified=t},r.Image.prototype.isModified=function(){return this._modified},r.Image.prototype.save=function(t,e){r.prototype.saveCanvas(this.canvas,t,e)},e.exports=r.Image},{"../core/main":24,"./filters":42}],46:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("./filters");t("../color/p5.Color"),r.prototype.pixels=[],r.prototype.blend=function(){r._validateParameters("blend",arguments),this._renderer?this._renderer.blend.apply(this._renderer,arguments):r.Renderer2D.prototype.blend.apply(this,arguments)},r.prototype.copy=function(){r._validateParameters("copy",arguments),r.Renderer2D.prototype.copy.apply(this._renderer,arguments)},r.prototype.filter=function(t,e){r._validateParameters("filter",arguments),void 0!==this.canvas?n.apply(this.canvas,n[t.toLowerCase()],e):n.apply(this.elt,n[t.toLowerCase()],e)},r.prototype.get=function(t,e,i,r){return this._renderer.get(t,e,i,r)},r.prototype.loadPixels=function(){r._validateParameters("loadPixels",arguments),this._renderer.loadPixels()},r.prototype.set=function(t,e,i){this._renderer.set(t,e,i)},r.prototype.updatePixels=function(t,e,i,n){r._validateParameters("updatePixels",arguments),0!==this.pixels.length&&this._renderer.updatePixels(t,e,i,n)},e.exports=r},{"../color/p5.Color":16,"../core/main":24,"./filters":42}],47:[function(t,e,i){"use strict";function r(t,e){var i={};if(void 0===(e=e||[]))for(var r=0;r/g,">").replace(/"/g,""").replace(/'/g,"'")}function o(t,e){e&&!0!==e&&"true"!==e||(e=""),t||(t="untitled");var i="";return t&&t.indexOf(".")>-1&&(i=t.split(".").pop()),e&&i!==e&&(t=t+"."+(i=e)),[t,i]}var s=t("../core/main");t("whatwg-fetch"),t("es6-promise").polyfill();var a=t("fetch-jsonp");t("../core/error_helpers"),s.prototype.loadJSON=function(){s._validateParameters("loadJSON",arguments);for(var t,e,i,r=arguments[0],n={},o="json",a=1;a0&&"function"==typeof arguments[u];u--)h++;var c=arguments.length-h,p=arguments[0];if(2===c&&"string"==typeof p&&"object"==typeof arguments[1])r=new Request(p,arguments[1]),e=arguments[2],i=arguments[3];else{for(var d,f="GET",m=1;m64e6&&s._friendlyFileLoadError(7,p),t){case"json":case"jsonp":return e.json();case"binary":return e.blob();case"arrayBuffer":return e.arrayBuffer();case"xml":return e.text().then(function(t){return function t(e){var i=new s.XML,r=e.childNodes;if(r&&r.length){for(var n=0;n"),o.print("");var p=' "),o.print(""),o.print(" "),"0"!==a[0]){o.print(" ");for(var d=0;d"+f),o.print(" ")}o.print(" ")}for(var m=0;m");for(var y=0;y"+g),o.print(" ")}o.print(" ")}o.print("
"),o.print(""),o.print("")}o.close(),o.clear()},s.prototype.writeFile=function(t,e,i){var r="application/octet-stream";s.prototype._isSafari()&&(r="text/plain");var n=new Blob(t,{type:r});s.prototype.downloadFile(n,e,i)},s.prototype.downloadFile=function(e,i,r){var n=o(i,r),a=n[0];if(e instanceof Blob)t("file-saver").saveAs(e,a);else{var h=document.createElement("a");if(h.href=e,h.download=a,h.onclick=function(t){(function(t){document.body.removeChild(t.target)})(t),t.stopPropagation()},h.style.display="none",document.body.appendChild(h),s.prototype._isSafari()){var l="Hello, Safari user! To download this file...\n";l+="1. Go to File --\x3e Save As.\n",l+='2. Choose "Page Source" as the Format.\n',l+='3. Name it with this extension: ."'+n[1]+'"',alert(l)}h.click()}},s.prototype._checkFileExtension=o,s.prototype._isSafari=function(){return Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0},e.exports=s},{"../core/error_helpers":20,"../core/main":24,"es6-promise":4,"fetch-jsonp":5,"file-saver":6,"whatwg-fetch":12}],48:[function(t,e,i){"use strict";var r=t("../core/main");r.Table=function(t){this.columns=[],this.rows=[]},r.Table.prototype.addRow=function(t){var e=t||new r.TableRow;if(void 0===e.arr||void 0===e.obj)throw new Error("invalid TableRow: "+e);return e.table=this,this.rows.push(e),e},r.Table.prototype.removeRow=function(t){this.rows[t].table=null;var e=this.rows.splice(t+1,this.rows.length);this.rows.pop(),this.rows=this.rows.concat(e)},r.Table.prototype.getRow=function(t){return this.rows[t]},r.Table.prototype.getRows=function(){return this.rows},r.Table.prototype.findRow=function(t,e){if("string"==typeof e){for(var i=0;i=0))throw new Error('This table has no column named "'+t+'"');i=e[t],r[i]=e}else r[n]=this.rows[n].obj;return r},r.Table.prototype.getArray=function(){for(var t=[],e=0;e=0))throw new Error('This table has no column named "'+t+'"');this.obj[t]=e,this.arr[i]=e}else{if(!(t0},r.XML.prototype.listChildren=function(){return this.children.map(function(t){return t.name})},r.XML.prototype.getChildren=function(t){return t?this.children.filter(function(e){return e.name===t}):this.children},r.XML.prototype.getChild=function(t){if("string"!=typeof t)return this.children[t];for(var e=0;eo&&(o=a),n[s]=a}0===o&&(o=1);for(var h=0,l=0,u=0;u=1&&(f++,v--),g>=1&&(m++,g--),_>=1&&(y++,_--)}return b},n.prototype.noiseDetail=function(t,e){t>0&&(s=t),e>0&&(a=e)},n.prototype.noiseSeed=function(t){var e=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();e.setSeed(t),r=new Array(o+1);for(var i=0;it*t&&this.div(Math.sqrt(e)).mult(t),this},r.Vector.prototype.setMag=function(t){return this.normalize().mult(t)},r.Vector.prototype.heading=function(){var t=Math.atan2(this.y,this.x);return this.p5?this.p5._fromRadians(t):t},r.Vector.prototype.rotate=function(t){var e=this.heading()+t;this.p5&&(e=this.p5._toRadians(e));var i=this.mag();return this.x=Math.cos(e)*i,this.y=Math.sin(e)*i,this},r.Vector.prototype.angleBetween=function(t){var e=this.dot(t)/(this.mag()*t.mag()),i=Math.acos(Math.min(1,Math.max(-1,e)));return this.p5?this.p5._fromRadians(i):i},r.Vector.prototype.lerp=function(t,e,i,n){return t instanceof r.Vector?this.lerp(t.x,t.y,t.z,e):(this.x+=(t-this.x)*n||0,this.y+=(e-this.y)*n||0,this.z+=(i-this.z)*n||0,this)},r.Vector.prototype.array=function(){return[this.x||0,this.y||0,this.z||0]},r.Vector.prototype.equals=function(t,e,i){var n,o,s;return t instanceof r.Vector?(n=t.x||0,o=t.y||0,s=t.z||0):t instanceof Array?(n=t[0]||0,o=t[1]||0,s=t[2]||0):(n=t||0,o=e||0,s=i||0),this.x===n&&this.y===o&&this.z===s},r.Vector.fromAngle=function(t,e){return void 0===e&&(e=1),new r.Vector(e*Math.cos(t),e*Math.sin(t),0)},r.Vector.fromAngles=function(t,e,i){void 0===i&&(i=1);var n=Math.cos(e),o=Math.sin(e),s=Math.cos(t),a=Math.sin(t);return new r.Vector(i*a*o,-i*s,i*a*n)},r.Vector.random2D=function(){return this.fromAngle(Math.random()*n.TWO_PI)},r.Vector.random3D=function(){var t=Math.random()*n.TWO_PI,e=2*Math.random()-1,i=Math.sqrt(1-e*e),o=i*Math.cos(t),s=i*Math.sin(t);return new r.Vector(o,s,e)},r.Vector.add=function(t,e,i){return i?i.set(t):i=t.copy(),i.add(e),i},r.Vector.sub=function(t,e,i){return i?i.set(t):i=t.copy(),i.sub(e),i},r.Vector.mult=function(t,e,i){return i?i.set(t):i=t.copy(),i.mult(e),i},r.Vector.div=function(t,e,i){return i?i.set(t):i=t.copy(),i.div(e),i},r.Vector.dot=function(t,e){return t.dot(e)},r.Vector.cross=function(t,e){return t.cross(e)},r.Vector.dist=function(t,e){return t.dist(e)},r.Vector.lerp=function(t,e,i,r){return r?r.set(t):r=t.copy(),r.lerp(e,i),r},r.Vector.mag=function(t){var e=t.x,i=t.y,r=t.z,n=e*e+i*i+r*r;return Math.sqrt(n)},e.exports=r.Vector},{"../core/constants":18,"../core/main":24}],55:[function(t,e,i){"use strict";var r=t("../core/main"),n=!1,o=!1,s=0,a=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();r.prototype.randomSeed=function(t){a.setSeed(t),n=!0,o=!1},r.prototype.random=function(t,e){var i;if(i=n?a.rand():Math.random(),void 0===t)return i;if(void 0===e)return t instanceof Array?t[Math.floor(i*t.length)]:i*t;if(t>e){var r=t;t=e,e=r}return i*(e-t)+t},r.prototype.randomGaussian=function(t,e){var i,r,n,a;if(o)i=s,o=!1;else{do{r=this.random(2)-1,n=this.random(2)-1,a=r*r+n*n}while(a>=1);a=Math.sqrt(-2*Math.log(a)/a),i=r*a,s=n*a,o=!0}var h=t||0;return i*(e||1)+h},e.exports=r},{"../core/main":24}],56:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._angleMode=n.RADIANS,r.prototype.acos=function(t){return this._fromRadians(Math.acos(t))},r.prototype.asin=function(t){return this._fromRadians(Math.asin(t))},r.prototype.atan=function(t){return this._fromRadians(Math.atan(t))},r.prototype.atan2=function(t,e){return this._fromRadians(Math.atan2(t,e))},r.prototype.cos=function(t){return Math.cos(this._toRadians(t))},r.prototype.sin=function(t){return Math.sin(this._toRadians(t))},r.prototype.tan=function(t){return Math.tan(this._toRadians(t))},r.prototype.degrees=function(t){return t*n.RAD_TO_DEG},r.prototype.radians=function(t){return t*n.DEG_TO_RAD},r.prototype.angleMode=function(t){t!==n.DEGREES&&t!==n.RADIANS||(this._angleMode=t)},r.prototype._toRadians=function(t){return this._angleMode===n.DEGREES?t*n.DEG_TO_RAD:t},r.prototype._toDegrees=function(t){return this._angleMode===n.RADIANS?t*n.RAD_TO_DEG:t},r.prototype._fromRadians=function(t){return this._angleMode===n.DEGREES?t*n.RAD_TO_DEG:t},e.exports=r},{"../core/constants":18,"../core/main":24}],57:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.textAlign=function(t,e){return r._validateParameters("textAlign",arguments),this._renderer.textAlign.apply(this._renderer,arguments)},r.prototype.textLeading=function(t){return r._validateParameters("textLeading",arguments),this._renderer.textLeading.apply(this._renderer,arguments)},r.prototype.textSize=function(t){return r._validateParameters("textSize",arguments),this._renderer.textSize.apply(this._renderer,arguments)},r.prototype.textStyle=function(t){return r._validateParameters("textStyle",arguments),this._renderer.textStyle.apply(this._renderer,arguments)},r.prototype.textWidth=function(t){return r._validateParameters("textWidth",arguments),0===t.length?0:this._renderer.textWidth.apply(this._renderer,arguments)},r.prototype.textAscent=function(){return r._validateParameters("textAscent",arguments),this._renderer.textAscent()},r.prototype.textDescent=function(){return r._validateParameters("textDescent",arguments),this._renderer.textDescent()},r.prototype._updateTextMetrics=function(){return this._renderer._updateTextMetrics()},e.exports=r},{"../core/main":24}],58:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("opentype.js");t("../core/error_helpers"),r.prototype.loadFont=function(t,e,i){r._validateParameters("loadFont",arguments);var n=new r.Font(this),s=this;return o.load(t,function(o,a){if(o)return void 0!==i?i(o):(r._friendlyFileLoadError(4,t),void console.error(o,t));n.font=a,void 0!==e&&e(n),s._decrementPreload();var h,l,u=t.split("\\").pop().split("/").pop(),c=u.lastIndexOf("."),p=c<1?null:u.substr(c+1);["ttf","otf","woff","woff2"].indexOf(p)>-1&&(h=u.substr(0,c),(l=document.createElement("style")).appendChild(document.createTextNode("\n@font-face {\nfont-family: "+h+";\nsrc: url("+t+");\n}\n")),document.head.appendChild(l))}),n},r.prototype.text=function(t,e,i,n,o){return r._validateParameters("text",arguments),this._renderer._doFill||this._renderer._doStroke?this._renderer.text.apply(this._renderer,arguments):this},r.prototype.textFont=function(t,e){if(r._validateParameters("textFont",arguments),arguments.length){if(!t)throw new Error("null font passed to textFont");return this._renderer._setProperty("_textFont",t),e&&(this._renderer._setProperty("_textSize",e),this._renderer._setProperty("_textLeading",e*n._DEFAULT_LEADMULT)),this._renderer._applyTextProperties()}return this._renderer._textFont},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"opentype.js":10}],59:[function(t,e,i){"use strict";function r(t,e){for(var i=function(t,e){if("object"!=typeof t)t=e;else for(var i in e)void 0===t[i]&&(t[i]=e[i]);return t}(e,{sampleFactor:.1,simplifyThreshold:0}),r=c(t,0,1),o=r/(r*i.sampleFactor),s=[],a=0;a3&&r>=0;--r)h(a(t,r-1),a(t,r),a(t,r+1),e)&&(t.splice(r%t.length,1),i++);return i}function o(t){for(var e,i=[],r=0;rg||v<_)&&(T+=180),{x:f,y:m,m:{x:y,y:v},n:{x:g,y:_},start:{x:b,y:S},end:{x:x,y:w},alpha:T}}function u(t,e,i,r,n,o,s,a,h){return null==h?v(t,e,i,r,n,o,s,a):l(t,e,i,r,n,o,s,a,function(t,e,i,r,n,o,s,a,h){if(!(h<0||v(t,e,i,r,n,o,s,a).01;)u/=2,l=v(t,e,i,r,n,o,s,a,c+=(le&&!i)return{x:(a=u(r,n,o[1],o[2],o[3],o[4],o[5],o[6],e-h)).x,y:a.y,alpha:a.alpha};h+=s,r=+o[5],n=+o[6]}o.shift()}return(a=i?h:l(r,n,o[0],o[1],o[2],o[3],o[4],o[5],1)).alpha&&(a={x:a.x,y:a.y,alpha:a.alpha}),a}function p(t){var e=[],i=0,r=0,n=0,o=0,s=0;if(!t)return e;"M"===t[0][0]&&(i=+t[0][1],r=+t[0][2],n=i,o=r,s++,e[0]=["M",i,r]);for(var a,h,l,u=3===t.length&&"M"===t[0][0]&&"R"===t[1][0].toUpperCase()&&"Z"===t[2][0].toUpperCase(),c=s,p=t.length;c1&&(w=Math.sqrt(w),r*=w,n*=w);var T=r*r,A=n*n,P=(s===a?-1:1)*Math.sqrt(Math.abs((T*A-T*x*x-A*S*S)/(T*x*x+A*S*S)));d=P*r*x/n+(e+h)/2,f=P*-n*S/r+(i+l)/2,c=Math.asin(((i-f)/n).toFixed(9)),p=Math.asin(((l-f)/n).toFixed(9)),c=ep&&(c-=2*y),!a&&p>c&&(p-=2*y)}var M=p-c;if(Math.abs(M)>v){var E=p,k=h,C=l;p=c+v*(a&&p>c?1:-1),h=d+r*Math.cos(p),l=f+n*Math.sin(p),_=t(h,l,r,n,o,0,a,k,C,[p,E,d,f])}M=p-c;var R=Math.cos(c),O=Math.sin(c),L=Math.cos(p),F=Math.sin(p),I=Math.tan(M/4),D=4/3*r*I,U=4/3*n*I,B=[e,i],N=[e+D*O,i-U*R],G=[h+D*F,l-U*L],q=[h,l];if(N[0]=2*B[0]-N[0],N[1]=2*B[1]-N[1],u)return[N,G,q].concat(_);for(var V=[],j=0,z=(_=[N,G,q].concat(_).join().split(",")).length;j7){t[e].shift();for(var o=t[e];o.length;)a[e]="A",n&&(h[e]="A"),t.splice(e++,0,["C"].concat(o.splice(0,6)));t.splice(e,1),i=Math.max(r.length,n&&n.length||0)}},c=function(t,e,o,s,a){t&&e&&"M"===t[a][0]&&"M"!==e[a][0]&&(e.splice(a,0,["M",s.x,s.y]),o.bx=0,o.by=0,o.x=t[a][1],o.y=t[a][2],i=Math.max(r.length,n&&n.length||0))},d="",f="";i=Math.max(r.length,n&&n.length||0);for(var v=0;vr;r+=2){var o=[{x:+t[r-2],y:+t[r-1]},{x:+t[r],y:+t[r+1]},{x:+t[r+2],y:+t[r+3]},{x:+t[r+4],y:+t[r+5]}];e?r?n-4===r?o[3]={x:+t[0],y:+t[1]}:n-2===r&&(o[2]={x:+t[0],y:+t[1]},o[3]={x:+t[2],y:+t[3]}):o[0]={x:+t[n-2],y:+t[n-1]}:n-4===r?o[3]=o[2]:r||(o[0]={x:+t[r],y:+t[r+1]}),i.push(["C",(-o[0].x+6*o[1].x+o[2].x)/6,(-o[0].y+6*o[1].y+o[2].y)/6,(o[1].x+6*o[2].x-o[3].x)/6,(o[1].y+6*o[2].y-o[3].y)/6,o[2].x,o[2].y])}return i}function m(t,e,i,r){return[t,e,i,r,i,r]}function y(t,e,i,r,n,o){var s=1/3,a=2/3;return[s*t+a*i,s*e+a*r,s*n+a*i,s*o+a*r,n,o]}function v(t,e,i,r,n,o,s,a,h){null==h&&(h=1);for(var l=(h=h>1?1:h<0?0:h)/2,u=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],c=0,p=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],d=0;d<12;d++){var f=l*u[d]+l,m=g(f,t,i,n,s),y=g(f,e,r,o,a),v=m*m+y*y;c+=p[d]*Math.sqrt(v)}return l*c}function g(t,e,i,r,n){return t*(t*(-3*e+9*i-9*r+3*n)+6*e-12*i+6*r)-3*e+3*i}function _(){for(var t="",e=arguments.length-1;e>=0;--e){var i=arguments[e];t+=i===Object(i)?JSON.stringify(i):i}return t}var b=t("../core/main"),S=t("../core/constants");b.Font=function(t){this.parent=t,this.cache={},this.font=void 0},b.Font.prototype.list=function(){throw new Error("not yet implemented")},b.Font.prototype.textBounds=function(t,e,i,r,n){e=void 0!==e?e:0,i=void 0!==i?i:0,r=r||this.parent._renderer._textSize;var o=n&&n.renderer&&n.renderer._pInst||this.parent,s=o._renderer,a=s._textAlign||S.LEFT,h=s._textBaseline||S.BASELINE,l=_("textBounds",t,e,i,r,a,h),u=this.cache[l];if(!u){var c,p,d,f,m,y=[],v=[],g=this._scale(r);this.font.forEachGlyph(t,e,i,r,n,function(t,e,i,r){var n=t.getMetrics();y.push(e+n.xMin*g),y.push(e+n.xMax*g),v.push(i+-n.yMin*g),v.push(i+-n.yMax*g)}),c=Math.min.apply(null,y),p=Math.min.apply(null,v),d=Math.max.apply(null,y),f=Math.max.apply(null,v),u={x:c,y:p,h:f-p,w:d-c,advance:c-e},m=this._handleAlignment(s,t,u.x,u.y,u.w+u.advance),u.x=m.x,u.y=m.y,this.cache[_("textBounds",t,e,i,r,a,h)]=u}return u},b.Font.prototype.textToPoints=function(t,e,i,n,s){function a(e){return u[e].name&&"space"===u[e].name||t.length===u.length&&" "===t[e]||u[e].index&&3===u[e].index}var h=0,l=[],u=this._getGlyphs(t);n=n||this.parent._renderer._textSize;for(var c=0;c2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&"number"==typeof r.decimals&&(n=r.decimals),t.toPathData(n)},b.Font.prototype._getSVG=function(t,e,i,r){var n=3;return"string"==typeof t&&arguments.length>2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&("number"==typeof r.decimals&&(n=r.decimals),"number"==typeof r.strokeWidth&&(t.strokeWidth=r.strokeWidth),void 0!==r.fill&&(t.fill=r.fill),void 0!==r.stroke&&(t.stroke=r.stroke)),t.toSVG(n)},b.Font.prototype._renderPath=function(t,e,i,r){var n,o=r&&r.renderer||this.parent._renderer,s=o.drawingContext;n="object"==typeof t&&t.commands?t.commands:this._getPath(t,e,i,r).commands,s.beginPath();for(var a=0;a1;)i=Math.random()*o|0,r=t[--o],t[o]=t[i],t[i]=r;return t},r.prototype.sort=function(t,e){var i=e?t.slice(0,Math.min(e,t.length)):t,r=e?t.slice(Math.min(e,t.length)):[];return(i="string"==typeof i[0]?i.sort():i.sort(function(t,e){return t-e})).concat(r)},r.prototype.splice=function(t,e,i){return Array.prototype.splice.apply(t,[i,0].concat(e)),t},r.prototype.subset=function(t,e,i){return void 0!==i?t.slice(e,e+i):t.slice(e,t.length)},e.exports=r},{"../core/main":24}],61:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.float=function(t){return t instanceof Array?t.map(parseFloat):parseFloat(t)},r.prototype.int=function(t,e){return e=e||10,"string"==typeof t?parseInt(t,e):"number"==typeof t?0|t:"boolean"==typeof t?t?1:0:t instanceof Array?t.map(function(t){return r.prototype.int(t,e)}):void 0},r.prototype.str=function(t){return t instanceof Array?t.map(r.prototype.str):String(t)},r.prototype.boolean=function(t){return"number"==typeof t?0!==t:"string"==typeof t?"true"===t.toLowerCase():"boolean"==typeof t?t:t instanceof Array?t.map(r.prototype.boolean):void 0},r.prototype.byte=function(t){var e=r.prototype.int(t,10);return"number"==typeof e?(e+128)%256-128:e instanceof Array?e.map(r.prototype.byte):void 0},r.prototype.char=function(t){return"number"!=typeof t||isNaN(t)?t instanceof Array?t.map(r.prototype.char):"string"==typeof t?r.prototype.char(parseInt(t,10)):void 0:String.fromCharCode(t)},r.prototype.unchar=function(t){return"string"==typeof t&&1===t.length?t.charCodeAt(0):t instanceof Array?t.map(r.prototype.unchar):void 0},r.prototype.hex=function(t,e){if(e=void 0===e||null===e?e=8:e,t instanceof Array)return t.map(function(t){return r.prototype.hex(t,e)});if("number"==typeof t){t<0&&(t=4294967295+t+1);for(var i=Number(t).toString(16).toUpperCase();i.length=e&&(i=i.substring(i.length-e,i.length)),i}},r.prototype.unhex=function(t){return t instanceof Array?t.map(r.prototype.unhex):parseInt("0x"+t,16)},e.exports=r},{"../core/main":24}],62:[function(t,e,i){"use strict";function r(t,e,i){var r=t<0,n=r?t.toString().substring(1):t.toString(),o=n.indexOf("."),s=-1!==o?n.substring(0,o):n,a=-1!==o?n.substring(o+1):"",h=r?"-":"";if(void 0!==i){var l="";(-1!==o||i-a.length>0)&&(l="."),a.length>i&&(a=a.substring(0,i));for(var u=0;ur.length)for(var o=e-(r+=-1===i?".":"").length+1,s=0;s0?"+"+t.toString():t.toString()}function s(t){return parseFloat(t)>0?" "+t.toString():t.toString()}var a=t("../core/main");t("../core/error_helpers"),a.prototype.join=function(t,e){return a._validateParameters("join",arguments),t.join(e)},a.prototype.match=function(t,e){return a._validateParameters("match",arguments),t.match(e)},a.prototype.matchAll=function(t,e){a._validateParameters("matchAll",arguments);for(var i=new RegExp(e,"g"),r=i.exec(t),n=[];null!==r;)n.push(r),r=i.exec(t);return n},a.prototype.nf=function(t,e,i){return a._validateParameters("nf",arguments),t instanceof Array?t.map(function(t){return r(t,e,i)}):"[object Arguments]"===Object.prototype.toString.call(t)?3===t.length?this.nf(t[0],t[1],t[2]):2===t.length?this.nf(t[0],t[1]):this.nf(t[0]):r(t,e,i)},a.prototype.nfc=function(t,e){return a._validateParameters("nfc",arguments),t instanceof Array?t.map(function(t){return n(t,e)}):n(t,e)},a.prototype.nfp=function(){a._validateParameters("nfp",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(o):o(t)},a.prototype.nfs=function(){a._validateParameters("nfs",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(s):s(t)},a.prototype.split=function(t,e){return a._validateParameters("split",arguments),t.split(e)},a.prototype.splitTokens=function(t,e){var i;if(a._validateParameters("splitTokens",arguments),void 0!==e){var r=e,n=/\]/g.exec(r),o=/\[/g.exec(r);o&&n?(r=r.slice(0,n.index)+r.slice(n.index+1),o=/\[/g.exec(r),r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("[\\["+r+"\\]]","g")):n?(r=r.slice(0,n.index)+r.slice(n.index+1),i=new RegExp("["+r+"\\]]","g")):o?(r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("["+r+"\\[]","g")):i=new RegExp("["+r+"]","g")}else i=/\s/g;return t.split(i).filter(function(t){return t})},a.prototype.trim=function(t){return a._validateParameters("trim",arguments),t instanceof Array?t.map(this.trim):t.trim()},e.exports=a},{"../core/error_helpers":20,"../core/main":24}],63:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.day=function(){return(new Date).getDate()},r.prototype.hour=function(){return(new Date).getHours()},r.prototype.minute=function(){return(new Date).getMinutes()},r.prototype.millis=function(){return window.performance.now()},r.prototype.month=function(){return(new Date).getMonth()+1},r.prototype.second=function(){return(new Date).getSeconds()},r.prototype.year=function(){return(new Date).getFullYear()},e.exports=r},{"../core/main":24}],64:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry");var n=t("../core/constants");r.prototype.plane=function(t,e,i,n){this._assert3d("plane"),r._validateParameters("plane",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=1),void 0===n&&(n=1);var o="plane|"+i+"|"+n;if(!this._renderer.geometryInHash(o)){var s=new r.Geometry(i,n,function(){for(var t,e,i,n=0;n<=this.detailY;n++){e=n/this.detailY;for(var o=0;o<=this.detailX;o++)t=o/this.detailX,i=new r.Vector(t-.5,e-.5,0),this.vertices.push(i),this.uvs.push(t,e)}});s.computeFaces().computeNormals(),i<=1&&n<=1?s._makeTriangleEdges()._edgesToVertices():console.log("Cannot draw stroke on plane objects with more than 1 detailX or 1 detailY"),this._renderer.createBuffers(o,s)}return this._renderer.drawBuffersScaled(o,t,e,1),this},r.prototype.box=function(t,e,i,n,o){this._assert3d("box"),r._validateParameters("box",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=e);var s=this._renderer.attributes&&this._renderer.attributes.perPixelLighting;void 0===n&&(n=s?1:4),void 0===o&&(o=s?1:4);var a="box|"+n+"|"+o;if(!this._renderer.geometryInHash(a)){var h=new r.Geometry(n,o,function(){var t=[[0,4,2,6],[1,3,5,7],[0,1,4,5],[2,6,3,7],[0,2,1,3],[4,5,6,7]];this.strokeIndices=[[0,1],[1,3],[3,2],[6,7],[8,9],[9,11],[14,15],[16,17],[17,19],[18,19],[20,21],[22,23]];for(var e=0;eo?(_=i,g=1,v=e):v=t+(e-t)*g,-2!==h&&h!==o+2||(v=0),_-=i/2,m[h]=0===v?1:n,l=0;lo?0:Math.sin(2*b*Math.PI)*Math.cos(y),h<0?-1:h>o?1:Math.sin(y),h<0||h>o?0:Math.cos(2*b*Math.PI)*Math.cos(y))),this.uvs.push(b,g)}}var S=0;if(s){for(u=0;u=n.TWO_PI?(e="ellipse")+"|"+p+"|":(e="arc")+"|"+l+"|"+u+"|"+c+"|"+p+"|",!this.geometryInHash(i)){var d=new r.Geometry(p,1,function(){if(this.strokeIndices=[],l.toFixed(10)!==u.toFixed(10)){c!==n.PIE&&void 0!==c||(this.vertices.push(new r.Vector(.5,.5,0)),this.uvs.push([.5,.5]));for(var t=0;t<=p;t++){var e=t/p,i=(u-l)*e+l,o=.5+Math.cos(i)/2,s=.5+Math.sin(i)/2;this.vertices.push(new r.Vector(o,s,0)),this.uvs.push([o,s]),t0&&h>0&&(this.strokeIndices=[[0,a],[a,(a+1)*(h+1)-1],[(a+1)*(h+1)-1,(a+1)*h],[(a+1)*h,0]])});u.computeFaces().computeNormals()._makeTriangleEdges()._edgesToVertices(),this.createBuffers(l,u)}var c=this.uMVMatrix.copy();try{this.uMVMatrix.translate([i,n,0]),this.uMVMatrix.scale(o,s,1),this.drawBuffers(l)}finally{this.uMVMatrix=c}return this},r.RendererGL.prototype.quad=function(t,e,i,n,o,s,a,h){var l="quad|"+t+"|"+e+"|"+i+"|"+n+"|"+o+"|"+s+"|"+a+"|"+h;if(!this.geometryInHash(l)){var u=new r.Geometry(2,2,function(){this.vertices.push(new r.Vector(t,e,0)),this.vertices.push(new r.Vector(i,n,0)),this.vertices.push(new r.Vector(o,s,0)),this.vertices.push(new r.Vector(a,h,0)),this.uvs.push(0,0,1,0,1,1,0,1),this.strokeIndices=[[0,1],[1,2],[2,3],[3,0]]});u.computeNormals()._makeTriangleEdges()._edgesToVertices(),u.faces=[[0,1,2],[2,3,0]],this.createBuffers(l,u)}return this.drawBuffers(l),this},r.RendererGL.prototype.bezier=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._bezierDetail||20;this.beginShape();for(var d=0;d<=p;d++){var f=Math.pow(1-d/p,3),m=d/p*3*Math.pow(1-d/p,2),y=3*Math.pow(d/p,2)*(1-d/p),v=Math.pow(d/p,3);this.vertex(t*f+r*m+s*y+l*v,e*f+n*m+a*y+u*v,i*f+o*m+h*y+c*v)}return this.endShape(),this},r.RendererGL.prototype.curve=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._curveDetail;this.beginShape();for(var d=0;d<=p;d++){var f=.5*Math.pow(d/p,3),m=.5*Math.pow(d/p,2),y=d/p*.5,v=f*(3*r-t-3*s+l)+m*(2*t-5*r+4*s-l)+y*(-t+s)+2*r*.5,g=f*(3*n-e-3*a+u)+m*(2*e-5*n+4*a-u)+y*(-e+a)+2*n*.5,_=f*(3*o-i-3*h+c)+m*(2*i-5*o+4*h-c)+y*(-i+h)+2*o*.5;this.vertex(v,g,_)}return this.endShape(),this},r.RendererGL.prototype.line=function(){return 6===arguments.length?(this.beginShape(),this.vertex(arguments[0],arguments[1],arguments[2]),this.vertex(arguments[3],arguments[4],arguments[5]),this.endShape()):4===arguments.length&&(this.beginShape(),this.vertex(arguments[0],arguments[1],0),this.vertex(arguments[2],arguments[3],0),this.endShape()),this},r.RendererGL.prototype.bezierVertex=function(){if(0===this.immediateMode._bezierVertex.length)throw Error("vertex() must be used once before calling bezierVertex()");var t,e,i,r,n,o=[],s=[],a=[],h=arguments.length;if(t=0,0===this._lookUpTableBezier.length||this._lutBezierDetail!==this._pInst._curveDetail){this._lookUpTableBezier=[],this._lutBezierDetail=this._pInst._curveDetail;for(var l=1/this._lutBezierDetail,u=0,c=1,p=0;u<1;){if(t=parseFloat(u.toFixed(6)),this._lookUpTableBezier[p]=this._bezierCoefficients(t),c.toFixed(6)===l.toFixed(6)){t=parseFloat(c.toFixed(6))+parseFloat(u.toFixed(6)),++p,this._lookUpTableBezier[p]=this._bezierCoefficients(t);break}u+=l,c-=l,++p}}var d=this._lookUpTableBezier.length;if(6===h){for(this.isBezier=!0,o=[this.immediateMode._bezierVertex[0],arguments[0],arguments[2],arguments[4]],s=[this.immediateMode._bezierVertex[1],arguments[1],arguments[3],arguments[5]],n=0;n0&&this.mouseY0){var i=this._renderer._curCamera;void 0===t&&(t=1),void 0===e&&(e=t),!0!==this.contextMenuDisabled&&(this.canvas.oncontextmenu=function(){return!1},this._setProperty("contextMenuDisabled",!0)),!0!==this.wheelDefaultDisabled&&(this.canvas.onwheel=function(){return!1},this._setProperty("wheelDefaultDisabled",!0));var n=this.height0?this._renderer._curCamera._orbit(0,0,.5*n):this._renderer._curCamera._orbit(0,0,-.5*n)),this.mouseIsPressed)if(this.mouseButton===this.LEFT){var o=-t*(this.mouseX-this.pmouseX)/n,s=e*(this.mouseY-this.pmouseY)/n;this._renderer._curCamera._orbit(o,s,0)}else if(this.mouseButton===this.RIGHT){var a=i._getLocalAxes(),h=Math.sqrt(a.x[0]*a.x[0]+a.x[2]*a.x[2]);0!==h&&(a.x[0]/=h,a.x[2]/=h);var l=Math.sqrt(a.y[0]*a.y[0]+a.y[2]*a.y[2]);0!==l&&(a.y[0]/=l,a.y[2]/=l);var u=-1*t*(this.mouseX-this.pmouseX),c=-1*e*(this.mouseY-this.pmouseY);i.setPosition(i.eyeX+u*a.x[0]+c*a.z[0],i.eyeY,i.eyeZ+u*a.x[2]+c*a.z[2])}return this}},r.prototype.debugMode=function(){this._assert3d("debugMode"),r._validateParameters("debugMode",arguments);for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1);arguments[0]===n.GRID?this.registerMethod("post",this._grid.call(this,arguments[1],arguments[2],arguments[3],arguments[4],arguments[5])):arguments[0]===n.AXES?this.registerMethod("post",this._axesIcon.call(this,arguments[1],arguments[2],arguments[3],arguments[4])):(this.registerMethod("post",this._grid.call(this,arguments[0],arguments[1],arguments[2],arguments[3],arguments[4])),this.registerMethod("post",this._axesIcon.call(this,arguments[5],arguments[6],arguments[7],arguments[8])))},r.prototype.noDebugMode=function(){this._assert3d("noDebugMode");for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1)},r.prototype._grid=function(t,e,i,r,n){void 0===t&&(t=this.width/2),void 0===e&&(e=Math.round(t/30)<4?4:Math.round(t/30)),void 0===i&&(i=0),void 0===r&&(r=0),void 0===n&&(n=0);var o=t/e,s=t/2;return function(){this.push(),this.stroke(255*this._renderer.curStrokeColor[0],255*this._renderer.curStrokeColor[1],255*this._renderer.curStrokeColor[2]),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]);for(var t=0;t<=e;t++)this.beginShape(this.LINES),this.vertex(-s+i,r,t*o-s+n),this.vertex(+s+i,r,t*o-s+n),this.endShape();for(var a=0;a<=e;a++)this.beginShape(this.LINES),this.vertex(a*o-s+i,r,-s+n),this.vertex(a*o-s+i,r,+s+n),this.endShape();this.pop()}},r.prototype._axesIcon=function(t,e,i,r){return void 0===t&&(t=this.width/20>40?this.width/20:40),void 0===e&&(e=-this.width/4),void 0===i&&(i=e),void 0===r&&(r=e),function(){this.push(),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]),this.strokeWeight(2),this.stroke(255,0,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e+t,i,r),this.endShape(),this.stroke(0,255,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i+t,r),this.endShape(),this.stroke(0,0,255),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i,r+t),this.endShape(),this.pop()}},e.exports=r},{"../core/constants":18,"../core/main":24}],66:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.ambientLight=function(t,e,i,n){this._assert3d("ambientLight"),r._validateParameters("ambientLight",arguments);var o=this.color.apply(this,arguments),s=this._renderer._useLightShader();return s.setUniform("uUseLighting",!0),s.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.ambientLightColors.push(o._array[0],o._array[1],o._array[2]),s.setUniform("uAmbientColor",this._renderer.ambientLightColors),s.setUniform("uAmbientLightCount",this._renderer.ambientLightColors.length/3),this},r.prototype.directionalLight=function(t,e,i,n,o,s){this._assert3d("directionalLight"),r._validateParameters("directionalLight",arguments);var a,h=this._renderer._useLightShader();a=t instanceof r.Color?t:this.color(t,e,i);var l,u,c,p=arguments[arguments.length-1];"number"==typeof p?(l=arguments[arguments.length-3],u=arguments[arguments.length-2],c=arguments[arguments.length-1]):(l=p.x,u=p.y,c=p.z),h.setUniform("uUseLighting",!0),h.setUniform("uMaterialColor",this._renderer.curFillColor);var d=Math.sqrt(l*l+u*u+c*c);return this._renderer.directionalLightDirections.push(l/d,u/d,c/d),h.setUniform("uLightingDirection",this._renderer.directionalLightDirections),this._renderer.directionalLightColors.push(a._array[0],a._array[1],a._array[2]),h.setUniform("uDirectionalColor",this._renderer.directionalLightColors),h.setUniform("uDirectionalLightCount",this._renderer.directionalLightColors.length/3),this},r.prototype.pointLight=function(t,e,i,n,o,s){var a;this._assert3d("pointLight"),r._validateParameters("pointLight",arguments),a=t instanceof r.Color?t:this.color(t,e,i);var h,l,u,c=arguments[arguments.length-1];"number"==typeof c?(h=arguments[arguments.length-3],l=arguments[arguments.length-2],u=arguments[arguments.length-1]):(h=c.x,l=c.y,u=c.z);var p=this._renderer._useLightShader();return p.setUniform("uUseLighting",!0),p.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.pointLightPositions.push(h,l,u),p.setUniform("uPointLightLocation",this._renderer.pointLightPositions),this._renderer.pointLightColors.push(a._array[0],a._array[1],a._array[2]),p.setUniform("uPointLightColor",this._renderer.pointLightColors),p.setUniform("uPointLightCount",this._renderer.pointLightColors.length/3),this},e.exports=r},{"../core/main":24}],67:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry"),r.prototype.loadModel=function(t){var e,i,n;r._validateParameters("loadModel",arguments),"boolean"==typeof arguments[1]?(e=arguments[1],i=arguments[2],n=arguments[3]):(e=!1,i=arguments[1],n=arguments[2]);var o=new r.Geometry;o.gid=t+"|"+e;var s=this;return this.loadStrings(t,function(t){(function(t,e){for(var i={v:[],vt:[],vn:[]},n={},o=0;o0)if("v"===s[0]||"vn"===s[0]){var a=new r.Vector(parseFloat(s[1]),parseFloat(s[2]),parseFloat(s[3]));i[s[0]].push(a)}else if("vt"===s[0]){var h=[parseFloat(s[1]),parseFloat(s[2])];i[s[0]].push(h)}else if("f"===s[0])for(var l=3;l0&&(this._renderer.geometryInHash(t.gid)||(t._makeTriangleEdges()._edgesToVertices(),this._renderer.createBuffers(t.gid,t)),this._renderer.drawBuffers(t.gid))},e.exports=r},{"../core/main":24,"./p5.Geometry":70}],68:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Texture"),r.prototype.loadShader=function(t,e){r._validateParameters("loadShader",arguments);var i=new r.Shader,n=this,o=!1,s=!1;return this.loadStrings(e,function(t){i._fragSrc=t.join("\n"),o=!0,s&&n._decrementPreload()}),this.loadStrings(t,function(t){i._vertSrc=t.join("\n"),s=!0,o&&n._decrementPreload()}),i},r.prototype.createShader=function(t,e){return this._assert3d("createShader"),r._validateParameters("createShader",arguments),new r.Shader(this._renderer,t,e)},r.prototype.shader=function(t){return this._assert3d("shader"),r._validateParameters("shader",arguments),void 0===t._renderer&&(t._renderer=this._renderer),t.isStrokeShader()?this._renderer.setStrokeShader(t):this._renderer.setFillShader(t),this},r.prototype.normalMaterial=function(){return this._assert3d("normalMaterial"),r._validateParameters("normalMaterial",arguments),this._renderer.drawMode=n.FILL,this._renderer.setFillShader(this._renderer._getNormalShader()),this._renderer.curFillColor=[1,1,1,1],this.noStroke(),this},r.prototype.texture=function(t){this._assert3d("texture"),r._validateParameters("texture",arguments),this._renderer.drawMode=n.TEXTURE;var e=this._renderer._useLightShader();return e.setUniform("uSpecular",!1),e.setUniform("isTexture",!0),e.setUniform("uSampler",t),this.noStroke(),this},r.prototype.ambientMaterial=function(t,e,i,n){this._assert3d("ambientMaterial"),r._validateParameters("ambientMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!1),s.setUniform("isTexture",!1),this},r.prototype.specularMaterial=function(t,e,i,n){this._assert3d("specularMaterial"),r._validateParameters("specularMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!0),s.setUniform("isTexture",!1),this},r.RendererGL.prototype._applyColorBlend=function(t){var e=this.GL,i=this.drawMode===n.TEXTURE;return i||t[t.length-1]<1?(e.depthMask(i),e.enable(e.BLEND),e.blendEquation(e.FUNC_ADD),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA)):(e.depthMask(!0),e.disable(e.BLEND)),t},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Texture":76}],69:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.camera=function(){return this._assert3d("camera"),r._validateParameters("camera",arguments),this._renderer._curCamera.camera.apply(this._renderer._curCamera,arguments),this},r.prototype.perspective=function(){return this._assert3d("perspective"),r._validateParameters("perspective",arguments),this._renderer._curCamera.perspective.apply(this._renderer._curCamera,arguments),this},r.prototype.ortho=function(){return this._assert3d("ortho"),r._validateParameters("ortho",arguments),this._renderer._curCamera.ortho.apply(this._renderer._curCamera,arguments),this},r.prototype.createCamera=function(){this._assert3d("createCamera");var t=new r.Camera(this._renderer);return t._computeCameraDefaultSettings(),t._setDefaultCamera(),this._renderer._curCamera=t,t},r.Camera=function(t){this._renderer=t,this.cameraType="default",this.cameraMatrix=new r.Matrix,this.projMatrix=new r.Matrix},r.Camera.prototype.perspective=function(t,e,i,n){void 0===t?(t=this.defaultCameraFOV,this.cameraFOV=t):this.cameraFOV=this._renderer._pInst._toRadians(t),void 0===e&&(e=this.defaultAspectRatio),void 0===i&&(i=this.defaultCameraNear),void 0===n&&(n=this.defaultCameraFar),i<=1e-4&&(i=.01,console.log("Avoid perspective near plane values close to or below 0. Setting value to 0.01.")),nMath.PI?h=Math.PI:h<=0&&(h=.001);var l=Math.sin(h)*s*Math.sin(a),u=Math.cos(h)*s,c=Math.sin(h)*s*Math.cos(a);this.camera(l+this.centerX,u+this.centerY,c+this.centerZ,this.centerX,this.centerY,this.centerZ,0,1,0)},r.Camera.prototype._isActive=function(){return this===this._renderer._curCamera},r.prototype.setCamera=function(t){this._renderer._curCamera=t,this._renderer.uPMatrix.set(t.projMatrix.mat4[0],t.projMatrix.mat4[1],t.projMatrix.mat4[2],t.projMatrix.mat4[3],t.projMatrix.mat4[4],t.projMatrix.mat4[5],t.projMatrix.mat4[6],t.projMatrix.mat4[7],t.projMatrix.mat4[8],t.projMatrix.mat4[9],t.projMatrix.mat4[10],t.projMatrix.mat4[11],t.projMatrix.mat4[12],t.projMatrix.mat4[13],t.projMatrix.mat4[14],t.projMatrix.mat4[15])},e.exports=r.Camera},{"../core/main":24}],70:[function(t,e,i){"use strict";var r=t("../core/main");r.Geometry=function(t,e,i){return this.vertices=[],this.lineVertices=[],this.lineNormals=[],this.vertexNormals=[],this.faces=[],this.uvs=[],this.edges=[],this.detailX=void 0!==t?t:1,this.detailY=void 0!==e?e:1,i instanceof Function&&i.call(this),this},r.Geometry.prototype.computeFaces=function(){this.faces.length=0;for(var t,e,i,r,n=this.detailX+1,o=0;o1&&(u=1),h.mult(Math.asin(u)/l))},r.Geometry.prototype.computeNormals=function(){var t,e=this.vertexNormals,i=this.vertices,n=this.faces;for(e.length=0,t=0;tthis.vertices.length-1-this.detailX;e--)t.add(this.vertexNormals[e]);for(t=r.Vector.div(t,this.detailX),e=this.vertices.length-1;e>this.vertices.length-1-this.detailX;e--)this.vertexNormals[e]=t;return this},r.Geometry.prototype._makeTriangleEdges=function(){if(this.edges.length=0,Array.isArray(this.strokeIndices))for(var t=0,e=this.strokeIndices.length;t0){for(var t=this.vertices[0].copy(),e=this.vertices[0].copy(),i=0;i1){if(this._useImmediateModeShader(),this._doStroke&&this.drawMode!==n.TEXTURE){for(var h=0;h1e3){var e=Object.keys(this.gHash)[0];delete this.gHash[e],n--}this.gHash[t]={}},r.RendererGL.prototype._freeBuffers=function(t){var e=this.gHash[t];if(e){delete this.gHash[t],n--;var i=this.GL;e.vertexBuffer&&i.deleteBuffer(e.vertexBuffer),e.normalBuffer&&i.deleteBuffer(e.normalBuffer),e.lineNormalBuffer&&i.deleteBuffer(e.lineNormalBuffer),e.uvBuffer&&i.deleteBuffer(e.uvBuffer),e.indexBuffer&&i.deleteBuffer(e.indexBuffer),e.lineVertexBuffer&&i.deleteBuffer(e.lineVertexBuffer)}},r.RendererGL.prototype.createBuffers=function(t,e){var i=this.GL;this._initBufferDefaults(t);var r=this.gHash[t];return r.numberOfItems=3*e.faces.length,r.lineVertexCount=e.lineVertices.length,this._useColorShader(),this.curStrokeShader.attributes.aPosition&&(r.lineVertexBuffer=i.createBuffer(),this._bindBuffer(r.lineVertexBuffer,i.ARRAY_BUFFER,this._flatten(e.lineVertices),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),this.curStrokeShader.attributes.aDirection&&(r.lineNormalBuffer=i.createBuffer(),this._bindBuffer(r.lineNormalBuffer,i.ARRAY_BUFFER,this._flatten(e.lineNormals),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aPosition&&(r.vertexBuffer=i.createBuffer(),this._bindBuffer(r.vertexBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertices),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),r.indexBuffer=i.createBuffer(),this._bindBuffer(r.indexBuffer,i.ELEMENT_ARRAY_BUFFER,this._flatten(e.faces),Uint16Array,i.STATIC_DRAW),this.curFillShader.attributes.aNormal&&(r.normalBuffer=i.createBuffer(),this._bindBuffer(r.normalBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertexNormals),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aTexCoord&&(r.uvBuffer=i.createBuffer(),this._bindBuffer(r.uvBuffer,i.ARRAY_BUFFER,this._flatten(e.uvs),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,i.FLOAT,!1,0,0)),r},r.RendererGL.prototype.drawBuffers=function(t){var e=this.GL;this._useColorShader();var i=this.gHash[t];return this._doStroke&&i.lineVertexCount>0&&(this.curStrokeShader.bindShader(),i.lineVertexBuffer&&(this._bindBuffer(i.lineVertexBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.lineNormalBuffer&&(this._bindBuffer(i.lineNormalBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curStrokeColor),this._drawArrays(e.TRIANGLES,t),this.curStrokeShader.unbindShader()),!1!==this._doFill&&(this.curFillShader.bindShader(),i.vertexBuffer&&(this._bindBuffer(i.vertexBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.indexBuffer&&this._bindBuffer(i.indexBuffer,e.ELEMENT_ARRAY_BUFFER),i.normalBuffer&&(this._bindBuffer(i.normalBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,e.FLOAT,!1,0,0)),i.uvBuffer&&(this._bindBuffer(i.uvBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curFillColor),this._drawElements(e.TRIANGLES,t),this.curFillShader.unbindShader()),this},r.RendererGL.prototype.drawBuffersScaled=function(t,e,i,r){var n=this.uMVMatrix.copy();try{this.uMVMatrix.scale(e,i,r),this.drawBuffers(t)}finally{this.uMVMatrix=n}},r.RendererGL.prototype._drawArrays=function(t,e){return this.GL.drawArrays(t,0,this.gHash[e].lineVertexCount),this._pInst._pixelsDirty=!0,this},r.RendererGL.prototype._drawElements=function(t,e){this.GL.drawElements(t,this.gHash[e].numberOfItems,this.GL.UNSIGNED_SHORT,0),this._pInst._pixelsDirty=!0},r.RendererGL.prototype._drawPoints=function(t,e){var i=this.GL;this._bindBuffer(e,i.ARRAY_BUFFER,this._vToNArray(t),Float32Array,i.STATIC_DRAW),this.curPointShader.enableAttrib(this.curPointShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0),i.drawArrays(i.Points,0,t.length)},e.exports=r.RendererGL},{"../core/main":24}],74:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("libtess");t("./p5.Shader"),t("./p5.Camera"),t("../core/p5.Renderer"),t("./p5.Matrix");var s={immediateVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uResolution;\nuniform float uPointSize;\n\nvarying vec4 vColor;\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n gl_PointSize = uPointSize;\n}\n",vertexColorVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n}\n",vertexColorFrag:"precision mediump float;\nvarying vec4 vColor;\nvoid main(void) {\n gl_FragColor = vColor;\n}",normalVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\n\nvarying vec3 vVertexNormal;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vVertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertTexCoord = aTexCoord;\n}\n",normalFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nvoid main(void) {\n gl_FragColor = vec4(vVertexNormal, 1.0);\n}",basicFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nuniform vec4 uMaterialColor;\nvoid main(void) {\n gl_FragColor = uMaterialColor;\n}",lightVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uViewMatrix;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nuniform vec3 uAmbientColor[8];\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nvarying vec3 vVertexNormal;\nvarying vec2 vVertTexCoord;\nvarying vec3 vLightWeighting;\n\nvoid main(void){\n\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\n vec3 vertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertexNormal = vertexNormal;\n vVertTexCoord = aTexCoord;\n\n vec4 mvPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n vec3 eyeDirection = normalize(-mvPosition.xyz);\n\n float shininess = 32.0;\n float specularFactor = 2.0;\n float diffuseFactor = 0.3;\n\n vec3 ambientLightFactor = vec3(0.0);\n\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n ambientLightFactor += uAmbientColor[i];\n }\n\n\n vec3 directionalLightFactor = vec3(0.0);\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n vec3 dir = uLightingDirection[j];\n float directionalLightWeighting = max(dot(vertexNormal, -dir), 0.0);\n directionalLightFactor += uDirectionalColor[j] * directionalLightWeighting;\n }\n\n\n vec3 pointLightFactor = vec3(0.0);\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n vec3 loc = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightDirection = normalize(loc - mvPosition.xyz);\n\n float directionalLightWeighting = max(dot(vertexNormal, lightDirection), 0.0);\n\n float specularLightWeighting = 0.0;\n if (uSpecular ){\n vec3 reflectionDirection = reflect(-lightDirection, vertexNormal);\n specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess);\n }\n\n pointLightFactor += uPointLightColor[k] * (specularFactor * specularLightWeighting\n + directionalLightWeighting * diffuseFactor);\n }\n\n vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightFactor;\n}\n",lightTextureFrag:"precision mediump float;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nvarying vec3 vLightWeighting;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n gl_FragColor = isTexture ? texture2D(uSampler, vVertTexCoord) : uMaterialColor;\n if (uUseLighting)\n gl_FragColor.rgb *= vLightWeighting;\n}",phongVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform vec3 uAmbientColor[8];\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvoid main(void){\n\n vec4 viewModelPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n\n // Pass varyings to fragment shader\n vViewPosition = viewModelPosition.xyz;\n gl_Position = uProjectionMatrix * viewModelPosition; \n\n vNormal = normalize(uNormalMatrix * normalize(aNormal));\n vTexCoord = aTexCoord;\n\n vAmbientColor = vec3(0.0);\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n vAmbientColor += uAmbientColor[i];\n }\n}\n",phongFrag:"precision mediump float;\n\n//uniform mat4 uModelViewMatrix;\nuniform mat4 uViewMatrix;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvec3 V;\nvec3 N;\n\nconst float shininess = 32.0;\nconst float specularFactor = 2.0;\nconst float diffuseFactor = 0.73;\n\nstruct LightResult {\n\tfloat specular;\n\tfloat diffuse;\n};\n\nfloat phongSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float shininess) {\n\n vec3 R = normalize(reflect(-lightDirection, surfaceNormal)); \n return pow(max(0.0, dot(R, viewDirection)), shininess);\n}\n\nfloat lambertDiffuse(\n vec3 lightDirection,\n vec3 surfaceNormal) {\n return max(0.0, dot(-lightDirection, surfaceNormal));\n}\n\nLightResult light(vec3 lightVector) {\n\n vec3 L = normalize(lightVector);\n\n //compute our diffuse & specular terms\n LightResult lr;\n if (uSpecular)\n lr.specular = phongSpecular(L, V, N, shininess);\n lr.diffuse = lambertDiffuse(L, N);\n return lr;\n}\n\nvoid main(void) {\n\n V = normalize(vViewPosition);\n N = vNormal;\n\n vec3 diffuse = vec3(0.0);\n float specular = 0.0;\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n\n LightResult result = light(uLightingDirection[j]);\n diffuse += result.diffuse * uDirectionalColor[j];\n specular += result.specular;\n }\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n\n vec3 lightPosition = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightVector = vViewPosition - lightPosition;\n\t\n //calculate attenuation\n float lightDistance = length(lightVector);\n float falloff = 500.0 / (lightDistance + 500.0);\n\n LightResult result = light(lightVector);\n diffuse += result.diffuse * falloff * uPointLightColor[k];\n specular += result.specular * falloff;\n }\n\n gl_FragColor = isTexture ? texture2D(uSampler, vTexCoord) : uMaterialColor;\n gl_FragColor.rgb = gl_FragColor.rgb * (diffuse * diffuseFactor + vAmbientColor) + specular * specularFactor;\n}",fontVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nuniform vec4 uGlyphRect;\nuniform float uGlyphOffset;\n\nvarying vec2 vTexCoord;\nvarying float w;\n\nvoid main() {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n\n // scale by the size of the glyph's rectangle\n positionVec4.xy *= uGlyphRect.zw - uGlyphRect.xy;\n\n // move to the corner of the glyph\n positionVec4.xy += uGlyphRect.xy;\n\n // move to the letter's line offset\n positionVec4.x += uGlyphOffset;\n \n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vTexCoord = aTexCoord;\n w = gl_Position.w;\n}\n",fontFrag:"#extension GL_OES_standard_derivatives : enable\nprecision mediump float;\n\n#if 0\n // simulate integer math using floats\n\t#define int float\n\t#define ivec2 vec2\n\t#define INT(x) float(x)\n\n\tint ifloor(float v) { return floor(v); }\n\tivec2 ifloor(vec2 v) { return floor(v); }\n\n#else\n // use native integer math\n\tprecision mediump int;\n\t#define INT(x) x\n\n\tint ifloor(float v) { return int(v); }\n\tint ifloor(int v) { return v; }\n\tivec2 ifloor(vec2 v) { return ivec2(v); }\n\n#endif\n\nuniform sampler2D uSamplerStrokes;\nuniform sampler2D uSamplerRowStrokes;\nuniform sampler2D uSamplerRows;\nuniform sampler2D uSamplerColStrokes;\nuniform sampler2D uSamplerCols;\n\nuniform ivec2 uStrokeImageSize;\nuniform ivec2 uCellsImageSize;\nuniform ivec2 uGridImageSize;\n\nuniform ivec2 uGridOffset;\nuniform ivec2 uGridSize;\nuniform vec4 uMaterialColor;\n\nvarying vec2 vTexCoord;\n\n// some helper functions\nint round(float v) { return ifloor(v + 0.5); }\nivec2 round(vec2 v) { return ifloor(v + 0.5); }\nfloat saturate(float v) { return clamp(v, 0.0, 1.0); }\nvec2 saturate(vec2 v) { return clamp(v, 0.0, 1.0); }\n\nint mul(float v1, int v2) {\n return ifloor(v1 * float(v2));\n}\n\nivec2 mul(vec2 v1, ivec2 v2) {\n return ifloor(v1 * vec2(v2) + 0.5);\n}\n\n// unpack a 16-bit integer from a float vec2\nint getInt16(vec2 v) {\n ivec2 iv = round(v * 255.0);\n return iv.x * INT(128) + iv.y;\n}\n\nvec2 pixelScale;\nvec2 coverage = vec2(0.0);\nvec2 weight = vec2(0.5);\nconst float minDistance = 1.0/8192.0;\nconst float hardness = 1.05; // amount of antialias\n\n// the maximum number of curves in a glyph\nconst int N = INT(250);\n\n// retrieves an indexed pixel from a sampler\nvec4 getTexel(sampler2D sampler, int pos, ivec2 size) {\n int width = size.x;\n int y = ifloor(pos / width);\n int x = pos - y * width; // pos % width\n\n return texture2D(sampler, (vec2(x, y) + 0.5) / vec2(size));\n}\n\nvoid calulateCrossings(vec2 p0, vec2 p1, vec2 p2, out vec2 C1, out vec2 C2) {\n\n // get the coefficients of the quadratic in t\n vec2 a = p0 - p1 * 2.0 + p2;\n vec2 b = p0 - p1;\n vec2 c = p0 - vTexCoord;\n\n // found out which values of 't' it crosses the axes\n vec2 surd = sqrt(max(vec2(0.0), b * b - a * c));\n vec2 t1 = ((b - surd) / a).yx;\n vec2 t2 = ((b + surd) / a).yx;\n\n // approximate straight lines to avoid rounding errors\n if (abs(a.y) < 0.001)\n t1.x = t2.x = c.y / (2.0 * b.y);\n\n if (abs(a.x) < 0.001)\n t1.y = t2.y = c.x / (2.0 * b.x);\n\n // plug into quadratic formula to find the corrdinates of the crossings\n C1 = ((a * t1 - b * 2.0) * t1 + c) * pixelScale;\n C2 = ((a * t2 - b * 2.0) * t2 + c) * pixelScale;\n}\n\nvoid coverageX(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n // determine on which side of the x-axis the points lie\n bool y0 = p0.y > vTexCoord.y;\n bool y1 = p1.y > vTexCoord.y;\n bool y2 = p2.y > vTexCoord.y;\n\n // could web be under the curve (after t1)?\n if (y1 ? !y2 : y0) {\n // add the coverage for t1\n coverage.x += saturate(C1.x + 0.5);\n // calculate the anti-aliasing for t1\n weight.x = min(weight.x, abs(C1.x));\n }\n\n // are we outside the curve (after t2)?\n if (y1 ? !y0 : y2) {\n // subtract the coverage for t2\n coverage.x -= saturate(C2.x + 0.5);\n // calculate the anti-aliasing for t2\n weight.x = min(weight.x, abs(C2.x));\n }\n}\n\n// this is essentially the same as coverageX, but with the axes swapped\nvoid coverageY(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n bool x0 = p0.x > vTexCoord.x;\n bool x1 = p1.x > vTexCoord.x;\n bool x2 = p2.x > vTexCoord.x;\n\n if (x1 ? !x2 : x0) {\n coverage.y -= saturate(C1.y + 0.5);\n weight.y = min(weight.y, abs(C1.y));\n }\n\n if (x1 ? !x0 : x2) {\n coverage.y += saturate(C2.y + 0.5);\n weight.y = min(weight.y, abs(C2.y));\n }\n}\n\nvoid main() {\n\n // calculate the pixel scale based on screen-coordinates\n pixelScale = hardness / fwidth(vTexCoord);\n\n // which grid cell is this pixel in?\n ivec2 gridCoord = ifloor(vTexCoord * vec2(uGridSize));\n\n // intersect curves in this row\n {\n // the index into the row info bitmap\n int rowIndex = gridCoord.y + uGridOffset.y;\n // fetch the info texel\n vec4 rowInfo = getTexel(uSamplerRows, rowIndex, uGridImageSize);\n // unpack the rowInfo\n int rowStrokeIndex = getInt16(rowInfo.xy);\n int rowStrokeCount = getInt16(rowInfo.zw);\n\n for (int iRowStroke = INT(0); iRowStroke < N; iRowStroke++) {\n if (iRowStroke >= rowStrokeCount)\n break;\n\n // each stroke is made up of 3 points: the start and control point\n // and the start of the next curve.\n // fetch the indices of this pair of strokes:\n vec4 strokeIndices = getTexel(uSamplerRowStrokes, rowStrokeIndex++, uCellsImageSize);\n\n // unpack the stroke index\n int strokePos = getInt16(strokeIndices.xy);\n\n // fetch the two strokes\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n\n // calculate the coverage\n coverageX(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n // intersect curves in this column\n {\n int colIndex = gridCoord.x + uGridOffset.x;\n vec4 colInfo = getTexel(uSamplerCols, colIndex, uGridImageSize);\n int colStrokeIndex = getInt16(colInfo.xy);\n int colStrokeCount = getInt16(colInfo.zw);\n \n for (int iColStroke = INT(0); iColStroke < N; iColStroke++) {\n if (iColStroke >= colStrokeCount)\n break;\n\n vec4 strokeIndices = getTexel(uSamplerColStrokes, colStrokeIndex++, uCellsImageSize);\n\n int strokePos = getInt16(strokeIndices.xy);\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n coverageY(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n weight = saturate(1.0 - weight * 2.0);\n float distance = max(weight.x + weight.y, minDistance); // manhattan approx.\n float antialias = abs(dot(coverage, weight) / distance);\n float cover = min(abs(coverage.x), abs(coverage.y));\n gl_FragColor = uMaterialColor;\n gl_FragColor.a *= saturate(max(antialias, cover));\n}",lineVert:"/*\n Part of the Processing project - http://processing.org\n Copyright (c) 2012-15 The Processing Foundation\n Copyright (c) 2004-12 Ben Fry and Casey Reas\n Copyright (c) 2001-04 Massachusetts Institute of Technology\n This library is free software; you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, version 2.1.\n This library is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General\n Public License along with this library; if not, write to the\n Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n Boston, MA 02111-1307 USA\n*/\n\n#define PROCESSING_LINE_SHADER\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uStrokeWeight;\n\nuniform vec4 uViewport;\n\n// using a scale <1 moves the lines towards the camera\n// in order to prevent popping effects due to half of\n// the line disappearing behind the geometry faces.\nvec3 scale = vec3(0.9995);\n\nattribute vec4 aPosition;\nattribute vec4 aDirection;\n \nvoid main() {\n vec4 posp = uModelViewMatrix * aPosition;\n vec4 posq = uModelViewMatrix * (aPosition + vec4(aDirection.xyz, 0));\n\n // Moving vertices slightly toward the camera\n // to avoid depth-fighting with the fill triangles.\n // Discussed here:\n // http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=252848 \n posp.xyz = posp.xyz * scale;\n posq.xyz = posq.xyz * scale;\n\n vec4 p = uProjectionMatrix * posp;\n vec4 q = uProjectionMatrix * posq;\n\n // formula to convert from clip space (range -1..1) to screen space (range 0..[width or height])\n // screen_p = (p.xy/p.w + <1,1>) * 0.5 * uViewport.zw\n\n // prevent division by W by transforming the tangent formula (div by 0 causes\n // the line to disappear, see https://github.com/processing/processing/issues/5183)\n // t = screen_q - screen_p\n //\n // tangent is normalized and we don't care which aDirection it points to (+-)\n // t = +- normalize( screen_q - screen_p )\n // t = +- normalize( (q.xy/q.w+<1,1>)*0.5*uViewport.zw - (p.xy/p.w+<1,1>)*0.5*uViewport.zw )\n //\n // extract common factor, <1,1> - <1,1> cancels out\n // t = +- normalize( (q.xy/q.w - p.xy/p.w) * 0.5 * uViewport.zw )\n //\n // convert to common divisor\n // t = +- normalize( ((q.xy*p.w - p.xy*q.w) / (p.w*q.w)) * 0.5 * uViewport.zw )\n //\n // remove the common scalar divisor/factor, not needed due to normalize and +-\n // (keep uViewport - can't remove because it has different components for x and y\n // and corrects for aspect ratio, see https://github.com/processing/processing/issues/5181)\n // t = +- normalize( (q.xy*p.w - p.xy*q.w) * uViewport.zw )\n\n vec2 tangent = normalize((q.xy*p.w - p.xy*q.w) * uViewport.zw);\n\n // flip tangent to normal (it's already normalized)\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n float thickness = aDirection.w * uStrokeWeight;\n vec2 offset = normal * thickness / 2.0;\n\n // Perspective ---\n // convert from world to clip by multiplying with projection scaling factor\n // to get the right thickness (see https://github.com/processing/processing/issues/5182)\n // invert Y, projections in Processing invert Y\n vec2 perspScale = (uProjectionMatrix * vec4(1, -1, 0, 0)).xy;\n\n // No Perspective ---\n // multiply by W (to cancel out division by W later in the pipeline) and\n // convert from screen to clip (derived from clip to screen above)\n vec2 noPerspScale = p.w / (0.5 * uViewport.zw);\n\n //gl_Position.xy = p.xy + offset.xy * mix(noPerspScale, perspScale, float(perspective > 0));\n gl_Position.xy = p.xy + offset.xy * perspScale;\n gl_Position.zw = p.zw;\n}\n",lineFrag:"precision mediump float;\nprecision mediump int;\n\nuniform vec4 uMaterialColor;\n\nvoid main() {\n gl_FragColor = uMaterialColor;\n}",pointVert:"attribute vec3 aPosition;\nuniform float uPointSize;\nvarying float vStrokeWeight;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvoid main() {\n\tvec4 positionVec4 = vec4(aPosition, 1.0);\n\tgl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\tgl_PointSize = uPointSize;\n\tvStrokeWeight = uPointSize;\n}",pointFrag:"precision mediump float;\nprecision mediump int;\nuniform vec4 uMaterialColor;\nvarying float vStrokeWeight;\n\nvoid main(){\n\tfloat mask = 0.0;\n\n\t// make a circular mask using the gl_PointCoord (goes from 0 - 1 on a point)\n // might be able to get a nicer edge on big strokeweights with smoothstep but slightly less performant\n\n\tmask = step(0.98, length(gl_PointCoord * 2.0 - 1.0));\n\n\t// if strokeWeight is 1 or less lets just draw a square\n\t// this prevents weird artifacting from carving circles when our points are really small\n\t// if strokeWeight is larger than 1, we just use it as is\n\n\tmask = mix(0.0, mask, clamp(floor(vStrokeWeight - 0.5),0.0,1.0));\n\n\t// throw away the borders of the mask\n // otherwise we get weird alpha blending issues\n\n\tif(mask > 0.98){\n discard;\n \t}\n\n \tgl_FragColor = vec4(uMaterialColor.rgb * (1.0 - mask), uMaterialColor.a) ;\n}"};r.RendererGL=function(t,e,i,n){return r.Renderer.call(this,t,e,i),this.attributes={},n=n||{},this.attributes.alpha=void 0===n.alpha||n.alpha,this.attributes.depth=void 0===n.depth||n.depth,this.attributes.stencil=void 0===n.stencil||n.stencil,this.attributes.antialias=void 0!==n.antialias&&n.antialias,this.attributes.premultipliedAlpha=void 0!==n.premultipliedAlpha&&n.premultipliedAlpha,this.attributes.preserveDrawingBuffer=void 0===n.preserveDrawingBuffer||n.preserveDrawingBuffer,this.attributes.perPixelLighting=void 0!==n.perPixelLighting&&n.perPixelLighting,this._initContext(),this.isP3D=!0,this.GL=this.drawingContext,this.ambientLightColors=[],this.directionalLightDirections=[],this.directionalLightColors=[],this.pointLightPositions=[],this.pointLightColors=[],this.uMVMatrix=new r.Matrix,this.uPMatrix=new r.Matrix,this.uNMatrix=new r.Matrix("mat3"),this._curCamera=new r.Camera(this),this._curCamera._computeCameraDefaultSettings(),this._curCamera._setDefaultCamera(),this.gHash={},this._defaultLightShader=void 0,this._defaultImmediateModeShader=void 0,this._defaultNormalShader=void 0,this._defaultColorShader=void 0,this._defaultPointShader=void 0,this.curFillShader=void 0,this.curStrokeShader=void 0,this.curPointShader=void 0,this._useColorShader(),this.setStrokeShader(this._getLineShader()),this._usePointShader(),this._pointVertexBuffer=this.GL.createBuffer(),this.isImmediateDrawing=!1,this.immediateMode={},this.fill(255,255,255,255),this.pointSize=5,this.strokeWeight(1),this.stroke(0,0,0),this.textures=[],this._curveTightness=6,this._lookUpTableBezier=[],this._lookUpTableQuadratic=[],this._lutBezierDetail=0,this._lutQuadraticDetail=0,this._tessy=this._initTessy(),this.fontInfos={},this},r.RendererGL.prototype=Object.create(r.Renderer.prototype),r.RendererGL.prototype._initContext=function(){try{if(this.drawingContext=this.canvas.getContext("webgl",this.attributes)||this.canvas.getContext("experimental-webgl",this.attributes),null===this.drawingContext)throw new Error("Error creating webgl context");console.log("p5.RendererGL: enabled webgl context");var t=this.drawingContext;t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),this._viewport=this.drawingContext.getParameter(this.drawingContext.VIEWPORT)}catch(t){throw t}},r.RendererGL.prototype._resetContext=function(t,e,i){var n=this.width,o=this.height,s=this.canvas.id,a=this.canvas;a&&a.parentNode.removeChild(a),(a=document.createElement("canvas")).id=s,this._pInst._userNode?this._pInst._userNode.appendChild(a):document.body.appendChild(a),this._pInst.canvas=a;var h=new r.RendererGL(this._pInst.canvas,this._pInst,!0,t);this._pInst._setProperty("_renderer",h),h.resize(n,o),h._applyDefaults(),this._pInst._elements.push(h),"function"==typeof i&&setTimeout(function(){i.apply(window._renderer,e)},0)},r.prototype.setAttributes=function(t,e){var i;this._assert3d("setAttributes"),void 0!==e?(i={})[t]=e:t instanceof Object&&(i=t),this.push(),this._renderer._resetContext(i),this.pop()},r.RendererGL.prototype._update=function(){this.uMVMatrix.set(this._curCamera.cameraMatrix.mat4[0],this._curCamera.cameraMatrix.mat4[1],this._curCamera.cameraMatrix.mat4[2],this._curCamera.cameraMatrix.mat4[3],this._curCamera.cameraMatrix.mat4[4],this._curCamera.cameraMatrix.mat4[5],this._curCamera.cameraMatrix.mat4[6],this._curCamera.cameraMatrix.mat4[7],this._curCamera.cameraMatrix.mat4[8],this._curCamera.cameraMatrix.mat4[9],this._curCamera.cameraMatrix.mat4[10],this._curCamera.cameraMatrix.mat4[11],this._curCamera.cameraMatrix.mat4[12],this._curCamera.cameraMatrix.mat4[13],this._curCamera.cameraMatrix.mat4[14],this._curCamera.cameraMatrix.mat4[15]),this.ambientLightColors.length=0,this.directionalLightDirections.length=0,this.directionalLightColors.length=0,this.pointLightPositions.length=0,this.pointLightColors.length=0},r.RendererGL.prototype.background=function(){var t=this._pInst.color.apply(this._pInst,arguments),e=t.levels[0]/255,i=t.levels[1]/255,r=t.levels[2]/255,n=t.levels[3]/255;this.GL.clearColor(e,i,r,n),this.GL.depthMask(!0),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.fill=function(t,e,i,o){var s=r.prototype.color.apply(this._pInst,arguments);this.curFillColor=s._array,this.isImmediateDrawing?this.setFillShader(this._getImmediateModeShader()):this.setFillShader(this._getColorShader()),this.drawMode=n.FILL,this.curFillShader.setUniform("uMaterialColor",this.curFillColor)},r.RendererGL.prototype.stroke=function(t,e,i,n){arguments[3]=255;var o=r.prototype.color.apply(this._pInst,arguments);this.curStrokeColor=o._array,this.curStrokeShader.setUniform("uMaterialColor",this.curStrokeColor),this.curPointShader.setUniform("uMaterialColor",o._array)},r.RendererGL.prototype.strokeWeight=function(t){this.curStrokeWeight!==t&&(this.pointSize=t,this.curStrokeWeight=t,this.curStrokeShader.setUniform("uStrokeWeight",t),this.curPointShader.setUniform("uPointSize",t))},r.RendererGL.prototype.get=function(t,e,i,n){return r.Renderer2D.prototype.get.apply(this,[t,e,i,n])},r.RendererGL.prototype.loadPixels=function(){if(!0===this.attributes.preserveDrawingBuffer){var t=this._pInst._pixelDensity,e=this.width,i=this.height;e*=t,i*=t,void 0===this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4)),this.GL.readPixels(0,0,e,i,this.GL.RGBA,this.GL.UNSIGNED_BYTE,this.pixels),this._pInst._setProperty("pixels",this.pixels)}else console.log("loadPixels only works in WebGL when preserveDrawingBuffer is true.")},r.RendererGL.prototype.geometryInHash=function(t){return void 0!==this.gHash[t]},r.RendererGL.prototype.resize=function(t,e){r.Renderer.prototype.resize.call(this,t,e),this.GL.viewport(0,0,this.GL.drawingBufferWidth,this.GL.drawingBufferHeight),this._viewport=this.GL.getParameter(this.GL.VIEWPORT),this._curCamera._resize(),void 0!==this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4))},r.RendererGL.prototype.clear=function(){var t=arguments[0]||0,e=arguments[1]||0,i=arguments[2]||0,r=arguments[3]||0;this.GL.clearColor(t,e,i,r),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.translate=function(t,e,i){return t instanceof r.Vector&&(i=t.z,e=t.y,t=t.x),this.uMVMatrix.translate([t,e,i]),this},r.RendererGL.prototype.scale=function(t,e,i){return this.uMVMatrix.scale(t,e,i),this},r.RendererGL.prototype.rotate=function(t,e){return void 0===e?this.rotateZ(t):(arguments[0]=this._pInst._fromRadians(t),r.Matrix.prototype.rotate.apply(this.uMVMatrix,arguments),this)},r.RendererGL.prototype.rotateX=function(t){return this.rotate(t,1,0,0),this},r.RendererGL.prototype.rotateY=function(t){return this.rotate(t,0,1,0),this},r.RendererGL.prototype.rotateZ=function(t){return this.rotate(t,0,0,1),this},r.RendererGL.prototype.push=function(){var t=r.Renderer.prototype.push.apply(this),e=t.properties;return e.uMVMatrix=this.uMVMatrix.copy(),e.uPMatrix=this.uPMatrix.copy(),e._curCamera=this._curCamera,this._curCamera=this._curCamera.copy(),t},r.RendererGL.prototype.resetMatrix=function(){return this.uMVMatrix=r.Matrix.identity(this._pInst),this},r.RendererGL.prototype.setFillShader=function(t){return this.curFillShader!==t&&(this.curFillShader=t,this.curFillShader.init()),this.curFillShader},r.RendererGL.prototype.setPointShader=function(t){return this.curPointShader!==t&&(this.curPointShader=t,this.curPointShader.init()),this.curPointShader},r.RendererGL.prototype.setStrokeShader=function(t){return this.curStrokeShader!==t&&(this.curStrokeShader=t,this.curStrokeShader.init()),this.curStrokeShader},r.RendererGL.prototype._useLightShader=function(){return this.curFillShader&&this.curFillShader.isLightShader()||this.setFillShader(this._getLightShader()),this.curFillShader},r.RendererGL.prototype._useColorShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultImmediateModeShader||this.setFillShader(this._getColorShader()),this.curFillShader},r.RendererGL.prototype._usePointShader=function(){return this.curPointShader||this.setPointShader(this._getPointShader()),this.curPointShader},r.RendererGL.prototype._useImmediateModeShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultColorShader||this.setFillShader(this._getImmediateModeShader()),this.curFillShader},r.RendererGL.prototype._getLightShader=function(){return this._defaultLightShader||(this.attributes.perPixelLighting?this._defaultLightShader=new r.Shader(this,s.phongVert,s.phongFrag):this._defaultLightShader=new r.Shader(this,s.lightVert,s.lightTextureFrag)),this._defaultLightShader},r.RendererGL.prototype._getImmediateModeShader=function(){return this._defaultImmediateModeShader||(this._defaultImmediateModeShader=new r.Shader(this,s.immediateVert,s.vertexColorFrag)),this._defaultImmediateModeShader},r.RendererGL.prototype._getNormalShader=function(){return this._defaultNormalShader||(this._defaultNormalShader=new r.Shader(this,s.normalVert,s.normalFrag)),this._defaultNormalShader},r.RendererGL.prototype._getColorShader=function(){return this._defaultColorShader||(this._defaultColorShader=new r.Shader(this,s.normalVert,s.basicFrag)),this._defaultColorShader},r.RendererGL.prototype._getPointShader=function(){return this._defaultPointShader||(this._defaultPointShader=new r.Shader(this,s.pointVert,s.pointFrag)),this._defaultPointShader},r.RendererGL.prototype._getLineShader=function(){return this._defaultLineShader||(this._defaultLineShader=new r.Shader(this,s.lineVert,s.lineFrag)),this._defaultLineShader},r.RendererGL.prototype._getFontShader=function(){return this._defaultFontShader||(this.GL.getExtension("OES_standard_derivatives"),this._defaultFontShader=new r.Shader(this,s.fontVert,s.fontFrag)),this._defaultFontShader},r.RendererGL.prototype._getEmptyTexture=function(){if(!this._emptyTexture){var t=new r.Image(1,1);t.set(0,0,255),this._emptyTexture=new r.Texture(this,t)}return this._emptyTexture},r.RendererGL.prototype.getTexture=function(t){for(var e=this.textures,i=0;i2e4){var e,i=Object.prototype.toString,r=[],n=t.slice();e=n.pop();do{"[object Array]"===i.call(e)?n.push.apply(n,e):r.push(e)}while(n.length&&void 0!==(e=n.pop()));return r.reverse(),r}return[].concat.apply([],t)},r.RendererGL.prototype._vToNArray=function(t){return this._flatten(t.map(function(t){return[t.x,t.y,t.z]}))},r.prototype._assert3d=function(t){if(!this._renderer.isP3D)throw new Error(t+"() is only supported in WEBGL mode. If you'd like to use 3D graphics and WebGL, see https://p5js.org/examples/form-3d-primitives.html for more information.")},r.RendererGL.prototype._initTessy=function(){var t=new o.GluTesselator;return t.gluTessCallback(o.gluEnum.GLU_TESS_VERTEX_DATA,function(t,e){e[e.length]=t[0],e[e.length]=t[1],e[e.length]=t[2]}),t.gluTessCallback(o.gluEnum.GLU_TESS_BEGIN,function(t){t!==o.primitiveType.GL_TRIANGLES&&console.log("expected TRIANGLES but got type: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_ERROR,function(t){console.log("error callback"),console.log("error number: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_COMBINE,function(t,e,i){return[t[0],t[1],t[2]]}),t.gluTessCallback(o.gluEnum.GLU_TESS_EDGE_FLAG,function(t){}),t},r.RendererGL.prototype._triangulate=function(t){this._tessy.gluTessNormal(0,0,1);var e=[];this._tessy.gluTessBeginPolygon(e);for(var i=0;i1&&(s=s.substring(0,s.indexOf("[0]"))),o.name=s,o.type=n.type,o.type===t.SAMPLER_2D&&(o.samplerIndex=i,i++,this.samplers.push(o)),this.uniforms[s]=o}this._loadedUniforms=!0}},r.Shader.prototype.compile=function(){},r.Shader.prototype.bindShader=function(){this.init(),this._bound||(this.useProgram(),this._bound=!0,this.bindTextures(),this._setMatrixUniforms(),this===this._renderer.curStrokeShader&&this._setViewportUniform())},r.Shader.prototype.unbindShader=function(){return this._bound&&(this.unbindTextures(),this._bound=!1),this},r.Shader.prototype.bindTextures=function(){for(var t=this._renderer.GL,e=0;e1?e.length&&n.uniform1iv(r,e):n.uniform1i(r,e);break;case n.FLOAT:i.size>1?e.length&&n.uniform1fv(r,e):n.uniform1f(r,e);break;case n.FLOAT_MAT3:n.uniformMatrix3fv(r,!1,e);break;case n.FLOAT_MAT4:n.uniformMatrix4fv(r,!1,e);break;case n.FLOAT_VEC2:i.size>1?e.length&&n.uniform2fv(r,e):n.uniform2f(r,e[0],e[1]);break;case n.FLOAT_VEC3:i.size>1?e.length&&n.uniform3fv(r,e):n.uniform3f(r,e[0],e[1],e[2]);break;case n.FLOAT_VEC4:i.size>1?e.length&&n.uniform4fv(r,e):n.uniform4f(r,e[0],e[1],e[2],e[3]);break;case n.INT_VEC2:i.size>1?e.length&&n.uniform2iv(r,e):n.uniform2i(r,e[0],e[1]);break;case n.INT_VEC3:i.size>1?e.length&&n.uniform3iv(r,e):n.uniform3i(r,e[0],e[1],e[2]);break;case n.INT_VEC4:i.size>1?e.length&&n.uniform4iv(r,e):n.uniform4i(r,e[0],e[1],e[2],e[3]);break;case n.SAMPLER_2D:n.activeTexture(n.TEXTURE0+i.samplerIndex),i.texture=this._renderer.getTexture(e),n.uniform1i(i.location,i.samplerIndex)}return this}},r.Shader.prototype.isLightShader=function(){return void 0!==this.uniforms.uUseLighting||void 0!==this.uniforms.uAmbientLightCount||void 0!==this.uniforms.uDirectionalLightCount||void 0!==this.uniforms.uPointLightCount||void 0!==this.uniforms.uAmbientColor||void 0!==this.uniforms.uDirectionalColor||void 0!==this.uniforms.uPointLightLocation||void 0!==this.uniforms.uPointLightColor||void 0!==this.uniforms.uLightingDirection||void 0!==this.uniforms.uSpecular},r.Shader.prototype.isTextureShader=function(){return this.samplerIndex>0},r.Shader.prototype.isColorShader=function(){return void 0!==this.attributes.aVertexColor||void 0!==this.uniforms.uMaterialColor},r.Shader.prototype.isTexLightShader=function(){return this.isLightShader()&&this.isTextureShader()},r.Shader.prototype.isStrokeShader=function(){return void 0!==this.uniforms.uStrokeWeight},r.Shader.prototype.enableAttrib=function(t,e,i,r,n,o){var s=this._renderer.GL;return-1!==t&&(s.enableVertexAttribArray(t),s.vertexAttribPointer(t,e,i,r,n,o)),this},e.exports=r.Shader},{"../core/main":24}],76:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.Texture=function(t,e){this._renderer=t;var i=this._renderer.GL;this.src=e,this.glTex=void 0,this.glTarget=i.TEXTURE_2D,this.glFormat=i.RGBA,this.mipmaps=!1,this.glMinFilter=i.LINEAR,this.glMagFilter=i.LINEAR,this.glWrapS=i.CLAMP_TO_EDGE,this.glWrapT=i.CLAMP_TO_EDGE,this.isSrcMediaElement=void 0!==r.MediaElement&&e instanceof r.MediaElement,this._videoPrevUpdateTime=0,this.isSrcHTMLElement=void 0!==r.Element&&e instanceof r.Element&&!(e instanceof r.Graphics),this.isSrcP5Image=e instanceof r.Image,this.isSrcP5Graphics=e instanceof r.Graphics,this.isImageData="undefined"!=typeof ImageData&&e instanceof ImageData;var n=this._getTextureDataFromSource();return this.width=n.width,this.height=n.height,this.init(n),this},r.Texture.prototype._getTextureDataFromSource=function(){var t;return this.isSrcP5Image?t=this.src.canvas:this.isSrcMediaElement||this.isSrcP5Graphics||this.isSrcHTMLElement?t=this.src.elt:this.isImageData&&(t=this.src),t},r.Texture.prototype.init=function(t){var e=this._renderer.GL;if(this.glTex=e.createTexture(),this.bindTexture(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,this.glMagFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,this.glMinFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,this.glWrapS),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,this.glWrapT),0===this.width||0===this.height||this.isSrcMediaElement&&!this.src.loadedmetadata){var i=new Uint8Array([1,1,1,1]);e.texImage2D(this.glTarget,0,e.RGBA,1,1,0,this.glFormat,e.UNSIGNED_BYTE,i)}else e.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,e.UNSIGNED_BYTE,t)},r.Texture.prototype.update=function(){var t=this.src;if(0===t.width||0===t.height)return!1;var e=this._getTextureDataFromSource(),i=!1,r=this._renderer.GL;return e.width!==this.width||e.height!==this.height?(i=!0,this.width=e.width,this.height=e.height,this.isSrcP5Image?t.setModified(!1):(this.isSrcMediaElement||this.isSrcHTMLElement)&&t.setModified(!0)):this.isSrcP5Image?t.isModified()&&(i=!0,t.setModified(!1)):this.isSrcMediaElement?t.isModified()?(i=!0,t.setModified(!1)):t.loadedmetadata&&this._videoPrevUpdateTime!==t.time()&&(this._videoPrevUpdateTime=t.time(),i=!0):this.isImageData?t._dirty&&(t._dirty=!1,i=!0):i=!0,i&&(this.bindTexture(),r.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,r.UNSIGNED_BYTE,e)),i},r.Texture.prototype.bindTexture=function(){return this._renderer.GL.bindTexture(this.glTarget,this.glTex),this},r.Texture.prototype.unbindTexture=function(){this._renderer.GL.bindTexture(this.glTarget,null)},r.Texture.prototype.setInterpolation=function(t,e){var i=this._renderer.GL;t===n.NEAREST?this.glMinFilter=i.NEAREST:this.glMinFilter=i.LINEAR,e===n.NEAREST?this.glMagFilter=i.NEAREST:this.glMagFilter=i.LINEAR,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,this.glMinFilter),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,this.glMagFilter),this.unbindTexture()},r.Texture.prototype.setWrapMode=function(t,e){var i=this._renderer.GL,r=function(t){return 0==(t&t-1)},o=r(this.width),s=r(this.width);t===n.REPEAT?o&&s?this.glWrapS=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):t===n.MIRROR?o&&s?this.glWrapS=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):this.glWrapS=i.CLAMP_TO_EDGE,e===n.REPEAT?o&&s?this.glWrapT=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):e===n.MIRROR?o&&s?this.glWrapT=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):this.glWrapT=i.CLAMP_TO_EDGE,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,this.glWrapS),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,this.glWrapT),this.unbindTexture()},e.exports=r.Texture},{"../core/constants":18,"../core/main":24}],77:[function(t,e,i){"use strict";function r(t,e){this.width=t,this.height=e,this.infos=[],this.findImage=function(t){var e=this.width*this.height;if(t>e)throw new Error("font is too complex to render in 3D");for(var i,r,n=this.infos.length-1;n>=0;--n){var o=this.infos[n];if(o.index+t0;){var n=t[r];e>n&&(e=n),ii?i:t}(255*t,0,255)}function r(t,e,i,r,n,s,a,h){for(var u=new function t(e,i,r,n){this.p0=e,this.c0=i,this.c1=r,this.p1=n,this.toQuadratic=function(){return{x:this.p0.x,y:this.p0.y,x1:this.p1.x,y1:this.p1.y,cx:(3*(this.c0.x+this.c1.x)-(this.p0.x+this.p1.x))/4,cy:(3*(this.c0.y+this.c1.y)-(this.p0.y+this.p1.y))/4}},this.quadError=function(){return o.Vector.sub(o.Vector.sub(this.p1,this.p0),o.Vector.mult(o.Vector.sub(this.c1,this.c0),3)).mag()/2},this.split=function(e){var i=o.Vector.lerp(this.p0,this.c0,e),r=o.Vector.lerp(this.c0,this.c1,e),n=o.Vector.lerp(i,r,e);this.c1=o.Vector.lerp(this.c1,this.p1,e),this.c0=o.Vector.lerp(r,this.c1,e);var s=o.Vector.lerp(n,this.c0,e),a=new t(this.p0,i,n,s);return this.p0=s,a},this.splitInflections=function(){var t=o.Vector.sub(this.c0,this.p0),e=o.Vector.sub(o.Vector.sub(this.c1,this.c0),t),i=o.Vector.sub(o.Vector.sub(o.Vector.sub(this.p1,this.c1),t),o.Vector.mult(e,2)),r=[],n=e.x*i.y-e.y*i.x;if(0!==n){var s=t.x*i.y-t.y*i.x,a=t.x*e.y-t.y*e.x,h=s*s-4*n*a;if(h>=0){n<0&&(n=-n,s=-s,a=-a);var l=Math.sqrt(h),u=(-s-l)/(2*n),c=(-s+l)/(2*n);u>0&&u<1&&(r.push(this.split(u)),c=1-(1-c)/(1-u)),c>0&&c<1&&r.push(this.split(c))}}return r.push(this),r}}(new o.Vector(t,e),new o.Vector(i,r),new o.Vector(n,s),new o.Vector(a,h)).splitInflections(),c=[],p=30/l,d=0;d=.125);){var v=Math.pow(f,1/3),g=m.split(v),_=m.split(1-v/(1-v));c.push(g),y.push(m),m=_}f<1&&c.push(m.split(.5)),c.push(m),Array.prototype.push.apply(c,y.reverse())}return c}function s(t,i,r,n){e([t,r],[i,n],{x:t,y:i,cx:(t+r)/2,cy:(i+n)/2})}function u(t,e,i,r){return Math.abs(i-t)<1e-5&&Math.abs(r-e)<1e-5}function c(t,e,i){for(var r=t.length,o=e.findImage(r),s=o.index,a=0,h=0;h>7,127&d,p>>7,127&p);for(var f=0;f>7,127&m,0,0)}}return{cellImageInfo:l,dimOffset:s,dimImageInfo:o}}var p=this.glyphInfos[t.index];if(p)return p;var d=t.getBoundingBox(),f=d.x1,m=d.y1,y=d.x2-f,v=d.y2-m,g=t.path.commands;if(0===y||0===v||!g.length)return this.glyphInfos[t.index]={};var _,b=[],S=[],x=[];for(_=a-1;_>=0;--_)x.push([]);for(_=h-1;_>=0;--_)S.push([]);for(var w,T,A,P,M=0;M=n)&&this._doFill){if(!this._isOpenType())return console.log("WEBGL: only opentype fonts are supported"),t;t.push();var l=this.curFillShader,c=this._doStroke,p=this.drawMode;this.curFillShader=null,this._doStroke=!1,this.drawMode=s.TEXTURE;var d=this._textFont.font,f=this._textFont._fontInfo;f||(f=this._textFont._fontInfo=new u(d));var m=this._textFont._handleAlignment(this,e,i,r),y=this._textSize,v=y/d.unitsPerEm;this.translate(m.x,m.y,0),this.scale(v,v,1);var g=this.GL,_=!this._defaultFontShader,b=this.setFillShader(this._getFontShader());_&&(b.setUniform("uGridImageSize",[64,64]),b.setUniform("uCellsImageSize",[64,64]),b.setUniform("uStrokeImageSize",[64,64]),b.setUniform("uGridSize",[a,h])),this._applyColorBlend(this.curFillColor);var S=this.gHash.glyph;if(!S){var x=this._textGeom=new o.Geometry(1,1,function(){for(var t=0;t<=1;t++)for(var e=0;e<=1;e++)this.vertices.push(new o.Vector(e,t,0)),this.uvs.push(e,t)});x.computeFaces().computeNormals(),S=this.createBuffers("glyph",x)}this._bindBuffer(S.vertexBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aPosition.location,3,g.FLOAT,!1,0,0),this._bindBuffer(S.indexBuffer,g.ELEMENT_ARRAY_BUFFER),this._bindBuffer(S.uvBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aTexCoord.location,2,g.FLOAT,!1,0,0),b.setUniform("uMaterialColor",this.curFillColor);try{for(var w=0,T=null,A=!1,P=d.stringToGlyphs(e),M=0;M{let e=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541];var i=new s.a.Chorus(.8,2.5,.2).toMaster();class r{constructor(t,e){this.num=t,this.id=e,this.counter=0,this.alpha=0,this.lifetime=0,this.fm=new s.a.FMSynth({harmonicity:10,modulationIndex:80,detune:0,oscillator:{type:"sine"},envelope:{attack:.001,decay:.003,sustain:.06,release:.3},modulation:{type:"square"},modulationEnvelope:{attack:.01,decay:.02,sustain:.03,release:.033},portamento:.01}).connect(i),this.fm.volume.value=-6}draw(){t.push(),t.stroke(255,140),t.line(0,8*this.id,0,this.num,8*this.id,0),t.translate(0,8*this.id,0),t.noStroke(),t.fill(255,180),t.sphere(3),t.translate(this.num,0,0),t.sphere(3),t.fill(255,0,0,this.alpha),t.sphere(5),t.pop(),this.lifetime<10&&(t.push(),t.fill(255,180),t.translate(this.counter,8*this.id,0),t.sphere(3),t.pop(),this.counter++),this.alpha-=10,this.counter>this.num&&(this.counter=0,this.alpha=255,this.lifetime++,this.fm.triggerAttackRelease(s.a.Midi((541-this.num)/10+60).toFrequency(),"128n"))}}let n=[];t.setup=(()=>{t.createCanvas(800,800,t.WEBGL);for(let t=0;t{t.camera(t.mouseX-t.width/2,0,800,0,0,0,0,1,0),t.background(0),t.smooth(),t.translate(-t.width/2,t.height/6,0),t.rotateZ(-t.HALF_PI);for(let e=0;e{"m"==t.key&&t.save(Date.now()+".jpg")})};e.default=a,new n.a(a)},function(t,e){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RvbmUvYnVpbGQvVG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcDUvbGliL3A1Lm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsIl9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fIiwidW5kZWZpbmVkIiwiVG9uZSIsIk1vZHVsZSIsImZ1bmMiLCJNYWluIiwidGhpcyIsIkVycm9yIiwidG9TdHJpbmciLCJjbGFzc05hbWUiLCJpc0xldHRlciIsIm1hdGNoIiwic2FtZUNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiLCJpc0Z1bmN0aW9uIiwiZGlzcG9zZSIsInNldCIsInBhcmFtcyIsInJhbXBUaW1lIiwiaXNPYmplY3QiLCJpc1N0cmluZyIsInRtcE9iaiIsInBhcmFtTG9vcCIsImF0dHIiLCJwYXJlbnQiLCJpbmRleE9mIiwiYXR0clNwbGl0Iiwic3BsaXQiLCJsZW5ndGgiLCJzcGxpY2UiLCJpbm5lclBhcmFtIiwiam9pbiIsInBhcmFtIiwiaXNVbmRlZiIsIlNpZ25hbCIsIlBhcmFtIiwicmFtcFRvIiwiQXVkaW9QYXJhbSIsIlRpbWVCYXNlIiwiX2NvbGxlY3REZWZhdWx0cyIsInJldCIsInN1YlJldCIsImoiLCJzdWJBdHRyIiwiaXNEZWZpbmVkIiwiY29uc3RyIiwiZGVmYXVsdHMiLCJrZXlzIiwiX3N1cGVyIiwic3VwZXJEZWZzIiwicHVzaCIsInZhbHVlcyIsIm9wdGlvbnMiLCJkZWZhdWx0QXJnIiwiZ2l2ZW4iLCJmYWxsYmFjayIsImdpdmVuUHJvcCIsImZhbGxiYWNrUHJvcCIsImNvbm5lY3RTZXJpZXMiLCJjdXJyZW50VW5pdCIsImFyZ3VtZW50cyIsInRvVW5pdCIsImNvbm5lY3QiLCJ2YWwiLCJpc051bWJlciIsImFyZyIsImlzQm9vbGVhbiIsImlzQXJyYXkiLCJBcnJheSIsImlzTm90ZSIsInRlc3QiLCJub09wIiwiX3JlYWRPbmx5Iiwid3JpdGFibGUiLCJfd3JpdGFibGUiLCJTdGF0ZSIsIlN0YXJ0ZWQiLCJTdG9wcGVkIiwiUGF1c2VkIiwiZXF1YWxQb3dlclNjYWxlIiwicGVyY2VudCIsInBpRmFjdG9yIiwiTWF0aCIsIlBJIiwic2luIiwiZGJUb0dhaW4iLCJkYiIsInBvdyIsImdhaW5Ub0RiIiwiZ2FpbiIsImxvZyIsIkxOMTAiLCJpbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8iLCJpbnRlcnZhbCIsIm5vdyIsImNvbnRleHQiLCJleHRlbmQiLCJjaGlsZCIsIlRlbXBDb25zdHJ1Y3RvciIsImF1ZGlvQ29udGV4dCIsIkNvbnRleHQiLCJlbWl0Iiwic2V0Q29udGV4dCIsImN0eCIsInNhbXBsZVJhdGUiLCJoYXNBdWRpb0NvbnRleHQiLCJ3aW5kb3ciLCJoYXNQcm9taXNlcyIsImhhc1dvcmtlcnMiLCJnZXRDb250ZXh0IiwicmVzb2x2ZSIsImluaXRpYWxpemVkIiwicmVzQ2FsbGJhY2siLCJvZmYiLCJvbiIsInZlcnNpb24iLCJFbWl0dGVyIiwiX2V2ZW50cyIsImV2ZW50IiwiY2FsbGJhY2siLCJldmVudHMiLCJldmVudE5hbWUiLCJvbmNlIiwiYm91bmRDYWxsYmFjayIsImFwcGx5IiwiZXYiLCJldmVudExpc3QiLCJhcmdzIiwic2xpY2UiLCJsZW4iLCJtaXhpbiIsImZ1bmN0aW9ucyIsImVtaXR0ZXJGdW5jIiwiVGltZWxpbmUiLCJfdGltZWxpbmUiLCJtZW1vcnkiLCJJbmZpbml0eSIsImFkZCIsInRpbWUiLCJ2YWx1ZU9mIiwiaW5kZXgiLCJfc2VhcmNoIiwiZGlmZiIsInJlbW92ZSIsImNvbXBhcmF0b3IiLCJwZWVrIiwic2hpZnQiLCJnZXRBZnRlciIsImdldEJlZm9yZSIsImNhbmNlbCIsImFmdGVyIiwiY2FuY2VsQmVmb3JlIiwicHJldmlvdXNFdmVudCIsImJlZ2lubmluZyIsImVuZCIsIm1pZFBvaW50IiwiZmxvb3IiLCJuZXh0RXZlbnQiLCJfaXRlcmF0ZSIsImxvd2VyQm91bmQiLCJ1cHBlckJvdW5kIiwiZm9yRWFjaCIsImZvckVhY2hCZWZvcmUiLCJmb3JFYWNoQWZ0ZXIiLCJmb3JFYWNoQmV0d2VlbiIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJmb3JFYWNoRnJvbSIsImZvckVhY2hBdFRpbWUiLCJzdXBwb3J0ZWQiLCJPZmZsaW5lQXVkaW9Db250ZXh0Iiwid2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dCIsInN0YXJ0UmVuZGVyaW5nIiwiUHJvbWlzZSIsIl9uYXRpdmVfc3RhcnRSZW5kZXJpbmciLCJkb25lIiwib25jb21wbGV0ZSIsImUiLCJyZW5kZXJlZEJ1ZmZlciIsIkF1ZGlvQ29udGV4dCIsIndlYmtpdEF1ZGlvQ29udGV4dCIsImNsb3NlIiwic3VzcGVuZCIsInJlc3VtZSIsImNyZWF0ZUdhaW4iLCJjcmVhdGVHYWluTm9kZSIsImNyZWF0ZURlbGF5IiwiY3JlYXRlRGVsYXlOb2RlIiwiZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSIsIm9mZmxpbmVDb250ZXh0IiwiYXVkaW9EYXRhIiwiVWludDMyQXJyYXkiLCJidWZmZXIiLCJkZWNvZGVBdWRpb0RhdGEiLCJfbmF0aXZlX2RlY29kZUF1ZGlvRGF0YSIsInN1Y2Nlc3MiLCJlcnJvciIsInByb3AiLCJfY29udGV4dCIsIl9kZWZpbmVQcm9wZXJ0eSIsIl9sYXRlbmN5SGludCIsImxhdGVuY3lIaW50IiwiX2NvbnN0YW50cyIsImxvb2tBaGVhZCIsIl9jb21wdXRlZFVwZGF0ZUludGVydmFsIiwiX3RpY2tlciIsIlRpY2tlciIsImNsb2NrU291cmNlIiwidXBkYXRlSW50ZXJ2YWwiLCJfdGltZW91dHMiLCJfdGltZW91dElkcyIsIl90aW1lb3V0TG9vcCIsImN1cnJlbnRUaW1lIiwicmVhZHkiLCJzdGF0ZSIsInRoZW4iLCJnZXRDb25zdGFudCIsImNyZWF0ZUJ1ZmZlciIsImFyciIsImdldENoYW5uZWxEYXRhIiwiY29uc3RhbnQiLCJjcmVhdGVCdWZmZXJTb3VyY2UiLCJjaGFubmVsQ291bnQiLCJjaGFubmVsQ291bnRNb2RlIiwibG9vcCIsInN0YXJ0Iiwic2V0VGltZW91dCIsImZuIiwidGltZW91dCIsImlkIiwiY2xlYXJUaW1lb3V0IiwidHlwZSIsImhpbnQiLCJjb24iLCJkaXNjb25uZWN0IiwiX3R5cGUiLCJfdXBkYXRlSW50ZXJ2YWwiLCJfY2FsbGJhY2siLCJfY3JlYXRlQ2xvY2siLCJUeXBlIiwiV29ya2VyIiwiVGltZW91dCIsIk9mZmxpbmUiLCJfY3JlYXRlV29ya2VyIiwiVVJMIiwid2Via2l0VVJMIiwiYmxvYiIsIkJsb2IiLCJ0b0ZpeGVkIiwiYmxvYlVybCIsImNyZWF0ZU9iamVjdFVSTCIsIndvcmtlciIsIm9ubWVzc2FnZSIsIl93b3JrZXIiLCJfY3JlYXRlVGltZW91dCIsIl90aW1lb3V0IiwibWF4IiwicG9zdE1lc3NhZ2UiLCJfZGlzcG9zZUNsb2NrIiwidGVybWluYXRlIiwibmF0aXZlQ29ubmVjdCIsIkF1ZGlvTm9kZSIsIm5hdGl2ZURpc2Nvbm5lY3QiLCJ0b25lQ29ubmVjdCIsIkIiLCJvdXROdW0iLCJpbk51bSIsImlucHV0IiwiVE9ORV9TSUxFTkNFX1ZFUlNJT05fTE9HR0lORyIsImNvbnNvbGUiLCJ3YXJuIiwiY3JlYXRlSW5zT3V0cyIsImlucHV0cyIsIm91dHB1dHMiLCJvdXRwdXQiLCJjaGFubmVsSW50ZXJwcmV0YXRpb24iLCJfb25Db25uZWN0IiwidW5pdCIsIm91dHB1dE51bSIsImlucHV0TnVtIiwiZGVzdGluYXRpb24iLCJjaGFpbiIsImZhbiIsIlNpZ25hbEJhc2UiLCJub2RlIiwib3V0cHV0TnVtYmVyIiwiaW5wdXROdW1iZXIiLCJfcGFyYW0iLCJjYW5jZWxTY2hlZHVsZWRWYWx1ZXMiLCJvdmVycmlkZGVuIiwidWEiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwiV2F2ZVNoYXBlck5vZGUiLCJfaW50ZXJuYWxOb2RlIiwiX25hdGl2ZV9jcmVhdGVXYXZlU2hhcGVyIiwiX2N1cnZlIiwiY3VydmUiLCJhcnJheSIsIkZsb2F0MzJBcnJheSIsImNyZWF0ZVdhdmVTaGFwZXIiLCJXYXZlU2hhcGVyIiwibWFwcGluZyIsImJ1ZmZlckxlbiIsIl9zaGFwZXIiLCJpc0Zpbml0ZSIsInNldE1hcCIsIm5vcm1hbGl6ZWQiLCJvdmVyc2FtcGxlIiwib3ZlcnNhbXBsaW5nIiwiUmFuZ2VFcnJvciIsInVuaXRzIiwiX3ZhbCIsIl91bml0cyIsInBhcnNlRmxvYXQiLCJjaGFyQXQiLCJfZGVmYXVsdFVuaXRzIiwidG9TZWNvbmRzIiwidG9UaWNrcyIsInRvRnJlcXVlbmN5IiwidG9NaWRpIiwiX2V4cHJlc3Npb25zIiwicmVnZXhwIiwibWV0aG9kIiwiZG90IiwicGFyc2VJbnQiLCJzY2FsYXIiLCJfYmVhdHNUb1VuaXRzIiwiX2dldFRpbWVTaWduYXR1cmUiLCJfdGlja3NUb1VuaXRzIiwiaHoiLCJfZnJlcXVlbmN5VG9Vbml0cyIsInRyIiwicSIsInRvdGFsIiwiX3NlY29uZHNUb1VuaXRzIiwic2FtcGxlcyIsImRlZmF1bHQiLCJfZ2V0QnBtIiwiVHJhbnNwb3J0IiwiYnBtIiwidGltZVNpZ25hdHVyZSIsIl9nZXRQUFEiLCJQUFEiLCJfbm93IiwiZnJlcSIsImJlYXRzIiwic2Vjb25kcyIsInRpY2tzIiwiX25vQXJnIiwidHJpbSIsImV4cHIiLCJtYXRjaGluZyIsInRvU2FtcGxlcyIsInRvTWlsbGlzZWNvbmRzIiwiRnJlcXVlbmN5IiwiYXNzaWduIiwibWlkaSIsIm10b2YiLCJub3RlIiwicGl0Y2giLCJvY3RhdmUiLCJub3RlTnVtYmVyIiwibm90ZVRvU2NhbGVJbmRleCIsInRyYW5zcG9zZSIsImhhcm1vbml6ZSIsImludGVydmFscyIsIm1hcCIsImZ0b20iLCJ0b05vdGUiLCJsb2cyIiwiQTQiLCJyb3VuZCIsInNjYWxlSW5kZXhUb05vdGUiLCJxdWFydGVyVGltZSIsInF1YXJ0ZXJzIiwiY2JiIiwiY2IiLCJjIyIsImN4IiwiZGJiIiwiZCMiLCJkeCIsImViYiIsImViIiwiZSMiLCJleCIsImZiYiIsImZiIiwiZiIsImYjIiwiZngiLCJnYmIiLCJnYiIsImciLCJnIyIsImd4IiwiYWJiIiwiYWIiLCJhIiwiYSMiLCJheCIsImJiYiIsImJiIiwiYiIsImIjIiwiYngiLCJmcmVxdWVuY3kiLCJUaW1lIiwicXVhbnRpemUiLCJjYXB0dXJlIiwicXVhbnRUbyIsIm5leHRTdWJkaXZpc2lvbiIsInN1YmRpdiIsInN1YmRpdmlzaW9uIiwidG9Ob3RhdGlvbiIsInRlc3ROb3RhdGlvbnMiLCJwb3dlciIsImNsb3Nlc3QiLCJjbG9zZXN0U2Vjb25kcyIsIm5vdGF0aW9uIiwibm90YXRpb25TZWNvbmRzIiwiYWJzIiwidG9CYXJzQmVhdHNTaXh0ZWVudGhzIiwibWVhc3VyZXMiLCJzaXh0ZWVudGhzIiwiVHJhbnNwb3J0VGltZSIsIkRlZmF1bHQiLCJUaWNrcyIsIk5vcm1hbFJhbmdlIiwiQXVkaW9SYW5nZSIsIkRlY2liZWxzIiwiSW50ZXJ2YWwiLCJCUE0iLCJQb3NpdGl2ZSIsIkdhaW4iLCJDZW50cyIsIkRlZ3JlZXMiLCJNSURJIiwiQmFyc0JlYXRzU2l4dGVlbnRocyIsIlNhbXBsZXMiLCJIZXJ0eiIsIk5vdGUiLCJNaWxsaXNlY29uZHMiLCJTZWNvbmRzIiwiTm90YXRpb24iLCJjb252ZXJ0IiwiX3RvVW5pdHMiLCJnZXRWYWx1ZUF0VGltZSIsIl9pbml0aWFsVmFsdWUiLCJfZnJvbVVuaXRzIiwic2V0VmFsdWVBdFRpbWUiLCJtaW5WYWx1ZSIsIm1heFZhbHVlIiwibWluIiwiX21pbk91dHB1dCIsIkF1dG9tYXRpb25UeXBlIiwiTGluZWFyIiwiRXhwb25lbnRpYWwiLCJUYXJnZXQiLCJTZXRWYWx1ZSIsImJlZm9yZSIsImluaXRpYWxWYWx1ZSIsImRlZmF1bHRWYWx1ZSIsInByZXZpb3VzVmFsIiwicHJldmlvdXMiLCJfZXhwb25lbnRpYWxBcHByb2FjaCIsIl9saW5lYXJJbnRlcnBvbGF0ZSIsIl9leHBvbmVudGlhbEludGVycG9sYXRlIiwic2V0UmFtcFBvaW50IiwiY3VycmVudFZhbCIsImNhbmNlbEFuZEhvbGRBdFRpbWUiLCJsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZSIsImV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUiLCJleHBvbmVudGlhbFJhbXBUbyIsImxpbmVhclJhbXBUbyIsInRhcmdldFJhbXBUbyIsImV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSIsInRpbWVDb25zdGFudCIsInNldFRhcmdldEF0VGltZSIsInNldFZhbHVlQ3VydmVBdFRpbWUiLCJkdXJhdGlvbiIsInNjYWxpbmciLCJzZWdUaW1lIiwidmFsdWVBdFRpbWUiLCJ0MCIsInYwIiwidjEiLCJleHAiLCJ0MSIsIk9mZmxpbmVDb250ZXh0IiwiY2hhbm5lbHMiLCJfZHVyYXRpb24iLCJfY3VycmVudFRpbWUiLCJyZW5kZXIiLCJibG9ja1RpbWUiLCJidWZmZXJTb3VyY2UiLCJfbmF0aXZlX3N0YXJ0IiwiX2dhaW5Ob2RlIiwiY3JlYXRlQ29uc3RhbnRTb3VyY2UiLCJDb25zdGFudFNvdXJjZU5vZGUiLCJfYnVmZmVyU291cmNlIiwiZ2Fpbk5vZGUiLCJfb3V0cHV0Iiwib2Zmc2V0Iiwic3RvcCIsIl9wcm94aWVzIiwiX3NvdXJjZVN0YXJ0ZWQiLCJfY29uc3RhbnRTb3VyY2UiLCJfaXNQYXJhbSIsIl9hcHBseUF1dG9tYXRpb25zIiwiX2Nvbm5lY3RQcm94aWVzIiwicHJveHkiLCJmcm9tIiwicHJldmlvdXNNZXRob2QiLCJzaWduYWwiLCJQb3ciLCJfZXhwIiwiX2V4cFNjYWxlciIsIl9leHBGdW5jIiwiRW52ZWxvcGUiLCJhdHRhY2siLCJkZWNheSIsInN1c3RhaW4iLCJyZWxlYXNlIiwiX2F0dGFja0N1cnZlIiwiX3JlbGVhc2VDdXJ2ZSIsIl9zaWciLCJhdHRhY2tDdXJ2ZSIsInJlbGVhc2VDdXJ2ZSIsIkluIiwiY3VydmVEZWYiLCJPdXQiLCJ0cmlnZ2VyQXR0YWNrIiwidmVsb2NpdHkiLCJvcmlnaW5hbEF0dGFjayIsImN1cnJlbnRWYWx1ZSIsInBlcmNlbnRDb21wbGV0ZSIsInNsaWNlSW5kZXgiLCJ0cmlnZ2VyUmVsZWFzZSIsInRyaWdnZXJBdHRhY2tSZWxlYXNlIiwiayIsImNvc2luZUN1cnZlIiwicmlwcGxlQ3VydmUiLCJjdXJ2ZUxlbiIsInNpbmVXYXZlIiwic3RhaXJzQ3VydmUiLCJjZWlsIiwic2luZUN1cnZlIiwiY29zIiwiYm91bmNlQ3VydmUiLCJpbnZlcnRDdXJ2ZSIsIm91dCIsImxpbmVhciIsImV4cG9uZW50aWFsIiwiYm91bmNlIiwiY29zaW5lIiwicmV2ZXJzZSIsInJldmVyc2VDdXJ2ZSIsInN0ZXAiLCJyaXBwbGUiLCJzaW5lIiwiQW1wbGl0dWRlRW52ZWxvcGUiLCJBbmFseXNlck5vZGUiLCJnZXRGbG9hdFRpbWVEb21haW5EYXRhIiwidWludDgiLCJVaW50OEFycmF5IiwiZ2V0Qnl0ZVRpbWVEb21haW5EYXRhIiwiQW5hbHlzZXIiLCJfYW5hbHlzZXIiLCJjcmVhdGVBbmFseXNlciIsIl9idWZmZXIiLCJzaXplIiwic21vb3RoaW5nIiwiV2F2ZWZvcm0iLCJGRlQiLCJnZXRWYWx1ZSIsImdldEZsb2F0RnJlcXVlbmN5RGF0YSIsImZyZXF1ZW5jeUJpbkNvdW50IiwiZmZ0U2l6ZSIsIlR5cGVFcnJvciIsInNtb290aGluZ1RpbWVDb25zdGFudCIsIkNvbXByZXNzb3IiLCJfY29tcHJlc3NvciIsImNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvciIsInRocmVzaG9sZCIsImtuZWUiLCJyYXRpbyIsIkFkZCIsIl9zdW0iLCJNdWx0aXBseSIsIl9tdWx0IiwiTmVnYXRlIiwiX211bHRpcGx5IiwiU3VidHJhY3QiLCJfbmVnIiwiRXF1YWxQb3dlckdhaW4iLCJfZXFQb3dlciIsIkNyb3NzRmFkZSIsImluaXRpYWxGYWRlIiwiZmFkZSIsIl9lcXVhbFBvd2VyQSIsIl9lcXVhbFBvd2VyQiIsIl9vbmUiLCJfaW52ZXJ0IiwiRmlsdGVyIiwiX2ZpbHRlcnMiLCJkZXR1bmUiLCJRIiwiX3JvbGxvZmYiLCJyb2xsb2ZmIiwiY2FzY2FkaW5nQ291bnQiLCJjb3VudCIsImZpbHRlciIsImNyZWF0ZUJpcXVhZEZpbHRlciIsImNvbm5lY3Rpb25DaGFpbiIsImNvbmNhdCIsIk11bHRpYmFuZFNwbGl0IiwibG93IiwiX2xvd01pZEZpbHRlciIsIm1pZCIsImhpZ2giLCJsb3dGcmVxdWVuY3kiLCJoaWdoRnJlcXVlbmN5IiwiRVEzIiwiX211bHRpYmFuZFNwbGl0IiwiX2xvd0dhaW4iLCJfbWlkR2FpbiIsIl9oaWdoR2FpbiIsIlNjYWxlIiwib3V0cHV0TWluIiwib3V0cHV0TWF4IiwiX291dHB1dE1pbiIsIl9vdXRwdXRNYXgiLCJfc2NhbGUiLCJfYWRkIiwiX3NldFJhbmdlIiwiU2NhbGVFeHAiLCJleHBvbmVudCIsIkRlbGF5IiwiX21heERlbGF5IiwibWF4RGVsYXkiLCJkZWxheVRpbWUiLCJfZGVsYXlOb2RlIiwiRmVlZGJhY2tDb21iRmlsdGVyIiwiX2RlbGF5IiwiX2ZlZWRiYWNrIiwicmVzb25hbmNlIiwiQWJzIiwiX2FicyIsIkZvbGxvd2VyIiwiX2ZpbHRlciIsIl9mcmVxdWVuY3lWYWx1ZXMiLCJfc3ViIiwiX2F0dGFjayIsIl9yZWxlYXNlIiwiX3NldEF0dGFja1JlbGVhc2UiLCJtaW5UaW1lIiwiU2NhbGVkRW52ZWxvcGUiLCJGcmVxdWVuY3lFbnZlbG9wZSIsIl9vY3RhdmVzIiwib2N0YXZlcyIsImJhc2VGcmVxdWVuY3kiLCJHcmVhdGVyVGhhblplcm8iLCJfdGhyZXNoIiwiR3JlYXRlclRoYW4iLCJfZ3R6IiwiR2F0ZSIsIl9mb2xsb3dlciIsIl9ndCIsInRocmVzaCIsImF0dGFja1RpbWUiLCJyZWxlYXNlVGltZSIsIl93cmFwU2NoZWR1bGVNZXRob2RzIiwidGlja3NVbnRpbFRpbWUiLCJfZ2V0VGlja3NVbnRpbEV2ZW50IiwiVGlja1NpZ25hbCIsInByZXZFdmVudCIsInNlZ21lbnRzIiwicmFtcFZhbCIsInNlZ21lbnREdXIiLCJ2YWwwIiwidmFsMSIsInNhbXBsZVRpbWUiLCJnZXRUaWNrc0F0VGltZSIsImdldER1cmF0aW9uT2ZUaWNrcyIsImN1cnJlbnRUaWNrIiwiZ2V0VGltZU9mVGljayIsInRpY2siLCJkZWx0YSIsInNxcnQiLCJzb2wxIiwidGlja3NUb1RpbWUiLCJ3aGVuIiwidGltZVRvVGlja3MiLCJzdGFydFRpY2tzIiwiZW5kVGlja3MiLCJUaW1lbGluZVN0YXRlIiwiaW5pdGlhbCIsIl9pbml0aWFsIiwic2V0U3RhdGVBdFRpbWUiLCJnZXRMYXN0U3RhdGUiLCJnZXROZXh0U3RhdGUiLCJUaWNrU291cmNlIiwiX3N0YXRlIiwiX3RpY2tPZmZzZXQiLCJzZXRUaWNrc0F0VGltZSIsInBhdXNlIiwic3RvcEV2ZW50IiwidG1wRXZlbnQiLCJsYXN0U3RhdGUiLCJlbGFwc2VkVGlja3MiLCJwZXJpb2RTdGFydFRpbWUiLCJvZmZzZXRFdmVudCIsImdldFNlY29uZHNBdFRpbWUiLCJlbGFwc2VkU2Vjb25kcyIsImdldFN0YXRlQXRUaW1lIiwiYWJzb2x1dGVUaWNrcyIsImZvckVhY2hUaWNrQmV0d2VlbiIsImxhc3RTdGF0ZUV2ZW50IiwibmV4dFRpY2tUaW1lIiwiQ2xvY2siLCJfbmV4dFRpY2siLCJfdGlja1NvdXJjZSIsIl9sYXN0VXBkYXRlIiwiX2JvdW5kTG9vcCIsIl9sb29wIiwiSW50ZXJ2YWxUaW1lbGluZSIsIl9yb290IiwiX2xlbmd0aCIsIkludGVydmFsTm9kZSIsImluc2VydCIsInVwZGF0ZUhlaWdodCIsInVwZGF0ZU1heCIsIl9yZWJhbGFuY2UiLCJyZXN1bHRzIiwic2VhcmNoIiwiX3JlbW92ZU5vZGUiLCJfc2V0Um9vdCIsIl9yZXBsYWNlTm9kZUluUGFyZW50IiwicmVwbGFjZW1lbnQiLCJpc0xlZnRDaGlsZCIsImxlZnQiLCJyaWdodCIsInRlbXAiLCJnZXRCYWxhbmNlIiwiX3JvdGF0ZUxlZnQiLCJwaXZvdE5vZGUiLCJfcm90YXRlUmlnaHQiLCJiYWxhbmNlIiwiYWxsTm9kZXMiLCJ0cmF2ZXJzZSIsInNlYXJjaEFmdGVyIiwiX2xlZnQiLCJfcmlnaHQiLCJoZWlnaHQiLCJwb2ludCIsIlRyYW5zcG9ydEV2ZW50IiwiX2V2ZW50SWQiLCJfb25jZSIsImludm9rZSIsImNsZWFyIiwiVHJhbnNwb3J0UmVwZWF0RXZlbnQiLCJfaW50ZXJ2YWwiLCJfY3VycmVudElkIiwiX25leHRJZCIsIl9ib3VuZFJlc3RhcnQiLCJfcmVzdGFydCIsIl9jcmVhdGVFdmVudHMiLCJzY2hlZHVsZU9uY2UiLCJfYm91bmRDcmVhdGVFdmVudHMiLCJfbG9vcFN0YXJ0IiwiX2xvb3BFbmQiLCJfcHBxIiwiVHJhbnNwb3J0Q29uc3RydWN0b3IiLCJfY2xvY2siLCJfcHJvY2Vzc1RpY2siLCJfYmluZENsb2NrRXZlbnRzIiwiX3RpbWVTaWduYXR1cmUiLCJfc2NoZWR1bGVkRXZlbnRzIiwiX3JlcGVhdGVkRXZlbnRzIiwiX3N5bmNlZFNpZ25hbHMiLCJfc3dpbmdUaWNrcyIsIl9zd2luZ0Ftb3VudCIsInN3aW5nIiwic3dpbmdTdWJkaXZpc2lvbiIsImxvb3BTdGFydCIsImxvb3BFbmQiLCJ0aWNrVGltZSIsInByb2dyZXNzIiwiYW1vdW50Iiwic2NoZWR1bGUiLCJfYWRkRXZlbnQiLCJzY2hlZHVsZVJlcGVhdCIsImV2ZW50SWQiLCJpdGVtIiwidGltZWxpbmUiLCJ0b2dnbGUiLCJ0aW1lU2lnIiwic3RhcnRQb3NpdGlvbiIsImVuZFBvc2l0aW9uIiwic2V0TG9vcFBvaW50cyIsInBwcSIsInJlbWFpbmluZ1RpY2tzIiwic3luY1NpZ25hbCIsInJhdGlvU2lnbmFsIiwidW5zeW5jU2lnbmFsIiwic3luY2VkU2lnbmFsIiwiVm9sdW1lIiwidm9sdW1lIiwiX3VubXV0ZWRWb2x1bWUiLCJtdXRlIiwiTWFzdGVyIiwiX3ZvbHVtZSIsInRvTWFzdGVyIiwiTWFzdGVyQ29uc3RydWN0b3IiLCJTb3VyY2UiLCJfc3luY2VkIiwiX3NjaGVkdWxlZCIsIl9zdGFydCIsInJlc3RhcnQiLCJfc3RvcCIsInNjaGVkIiwiX3N5bmNlZFN0YXJ0Iiwic3luYyIsInN0YXRlRXZlbnQiLCJzdGFydE9mZnNldCIsIl9zeW5jZWRTdG9wIiwidW5zeW5jIiwiQXVkaW9CdWZmZXIiLCJjb3B5VG9DaGFubmVsIiwic3JjIiwiY2hhbk51bSIsImNoYW5uZWwiLCJjb3B5RnJvbUNoYW5uZWwiLCJkZXN0IiwiQnVmZmVyIiwiX3JldmVyc2VkIiwiX3hociIsIl9vbmxvYWQiLCJ1cmwiLCJvbmxvYWQiLCJsb2FkZWQiLCJsb2FkIiwiY2F0Y2giLCJvbmVycm9yIiwiYnVmZiIsImVyciIsIl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZSIsImFib3J0IiwibnVtYmVyT2ZDaGFubmVscyIsImZyb21BcnJheSIsImlzTXVsdGlkaW1lbnNpb25hbCIsInRvTW9ubyIsInRvQXJyYXkiLCJvdXRwdXRBcnJheSIsIm51bUNoYW5uZWxzIiwiY2hhbm5lbEFycmF5Iiwic2FtcGxlIiwic3RhcnRTYW1wbGVzIiwiZW5kU2FtcGxlcyIsIl9yZXZlcnNlIiwicmV2IiwiX2Rvd25sb2FkUXVldWUiLCJiYXNlVXJsIiwiZnJvbVVybCIsInJlcXVlc3QiLCJtYXRjaGVzIiwiZXh0ZW5zaW9ucyIsImV4dGVuc2lvbiIsInN1cHBvcnRzVHlwZSIsInJlcGxhY2UiLCJvbkVycm9yIiwib25Qcm9ncmVzcyIsInRvdGFsUHJvZ3Jlc3MiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJyZXNwb25zZVR5cGUiLCJhZGRFdmVudExpc3RlbmVyIiwic3RhdHVzIiwicmVzcG9uc2UiLCJsZW5ndGhDb21wdXRhYmxlIiwic2VuZCIsImNhbmNlbERvd25sb2FkcyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNhblBsYXlUeXBlIiwicmVtb3ZlRXZlbnRzIiwiZmFpbCIsIk9zY2lsbGF0b3JOb2RlIiwib25lbmRlZCIsIl9zdGFydFRpbWUiLCJfc3RvcFRpbWUiLCJfb3NjaWxsYXRvciIsImNyZWF0ZU9zY2lsbGF0b3IiLCJfZ2FpbiIsInNldFBlcmlvZGljV2F2ZSIsInBlcmlvZGljV2F2ZSIsImNhbmNlbFN0b3AiLCJPc2NpbGxhdG9yIiwiX3dhdmUiLCJfcGFydGlhbHMiLCJwYXJ0aWFscyIsIl9waGFzZSIsInBoYXNlIiwiU2luZSIsIlRyaWFuZ2xlIiwiU2F3dG9vdGgiLCJTcXVhcmUiLCJDdXN0b20iLCJzeW5jRnJlcXVlbmN5IiwidW5zeW5jRnJlcXVlbmN5IiwiaXNCYXNpY1R5cGUiLCJjb2VmcyIsIl9nZXRSZWFsSW1hZ2luYXJ5IiwiY3JlYXRlUGVyaW9kaWNXYXZlIiwicGVyaW9kaWNXYXZlU2l6ZSIsInJlYWwiLCJpbWFnIiwicGFydGlhbENvdW50IiwicGFydGlhbCIsImV4ZWMiLCJfaW52ZXJzZUZGVCIsInN1bSIsIl9nZXRJbml0aWFsVmFsdWUiLCJ0d29QaSIsIkF1ZGlvVG9HYWluIiwiX25vcm0iLCJ4IiwiWmVybyIsIkxGTyIsImFtcGxpdHVkZSIsIl9zdG9wcGVkU2lnbmFsIiwiX3plcm9zIiwiX3N0b3BwZWRWYWx1ZSIsIl9hMmciLCJfc2NhbGVyIiwiY3VycmVudE1pbiIsImN1cnJlbnRNYXgiLCJMaW1pdGVyIiwiTG93cGFzc0NvbWJGaWx0ZXIiLCJfbG93cGFzcyIsImRhbXBlbmluZyIsIk1lcmdlIiwiX21lcmdlciIsImNyZWF0ZUNoYW5uZWxNZXJnZXIiLCJNZXRlciIsImdldExldmVsIiwiU3BsaXQiLCJfc3BsaXR0ZXIiLCJjcmVhdGVDaGFubmVsU3BsaXR0ZXIiLCJNaWRTaWRlU3BsaXQiLCJfc3BsaXQiLCJfbWlkQWRkIiwiU1FSVDFfMiIsIl9zaWRlU3VidHJhY3QiLCJzaWRlIiwiTWlkU2lkZU1lcmdlIiwiX3RpbWVzVHdvTGVmdCIsIl90aW1lc1R3b1JpZ2h0IiwiX21lcmdlIiwiTWlkU2lkZUNvbXByZXNzb3IiLCJfbWlkU2lkZVNwbGl0IiwiX21pZFNpZGVNZXJnZSIsIk1vbm8iLCJNdWx0aWJhbmRDb21wcmVzc29yIiwiU3RlcmVvUGFubmVyTm9kZSIsInBhbiIsInJpZ2h0V2F2ZVNoYXBlciIsImxlZnRXYXZlU2hhcGVyIiwibGVmdEdhaW4iLCJyaWdodEdhaW4iLCJtZXJnZSIsImNyZWF0ZVN0ZXJlb1Bhbm5lciIsIlBhbm5lciIsImluaXRpYWxQYW4iLCJfcGFubmVyIiwiUGFubmVyM0QiLCJjcmVhdGVQYW5uZXIiLCJwYW5uaW5nTW9kZWwiLCJtYXhEaXN0YW5jZSIsImRpc3RhbmNlTW9kZWwiLCJjb25lT3V0ZXJHYWluIiwiY29uZU91dGVyQW5nbGUiLCJjb25lSW5uZXJBbmdsZSIsInJlZkRpc3RhbmNlIiwicm9sbG9mZkZhY3RvciIsIl9vcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uWCIsIm9yaWVudGF0aW9uWSIsIm9yaWVudGF0aW9uWiIsIl9wb3NpdGlvbiIsInBvc2l0aW9uWCIsInBvc2l0aW9uWSIsInBvc2l0aW9uWiIsIl9yYW1wVGltZUNvbnN0YW50Iiwic2V0UG9zaXRpb24iLCJ5IiwieiIsInNldE9yaWVudGF0aW9uIiwicG9zIiwiX2FsaWFzUHJvcGVydHkiLCJQYW5Wb2wiLCJTb2xvIiwiX3NvbG9CaW5kIiwiX3NvbG9lZCIsInNvbG8iLCJfaXNTb2xvZWQiLCJfYWRkU29sbyIsIl9yZW1vdmVTb2xvIiwiX2N1cnJlbnRTb2xvIiwiX25vU29sb3MiLCJDdHJsSW50ZXJwb2xhdGUiLCJsb3dlclBvc2l0aW9uIiwibG93ZXIiLCJ1cHBlciIsIl9pbnRlcnBvbGF0ZSIsInJldEFycmF5IiwicmV0T2JqIiwiX3RvTnVtYmVyIiwiQ3RybE1hcmtvdiIsIm5leHQiLCJkaXN0cmlidXRpb24iLCJfZ2V0UHJvYkRpc3RyaWJ1dGlvbiIsInJhbmQiLCJyYW5kb20iLCJkaXN0IiwiY2hvc2VuIiwibmVlZHNOb3JtYWxpemluZyIsIm9wdGlvbiIsInByb2JhYmlsaXR5IiwiQ3RybFBhdHRlcm4iLCJfc2h1ZmZsZWQiLCJfZGlyZWN0aW9uIiwiVXAiLCJEb3duIiwiVXBEb3duIiwiRG93blVwIiwiQWx0ZXJuYXRlVXAiLCJBbHRlcm5hdGVEb3duIiwiUmFuZG9tIiwiUmFuZG9tV2FsayIsIlJhbmRvbU9uY2UiLCJfc2h1ZmZsZVZhbHVlcyIsImNvcHkiLCJyYW5kVmFsIiwiQ3RybFJhbmRvbSIsImludGVnZXIiLCJCdWZmZXJzIiwidXJscyIsIl9idWZmZXJzIiwiX2xvYWRpbmdDb3VudCIsIl9idWZmZXJMb2FkZWQiLCJoYXMiLCJpc0xvYWRlZCIsImJ1ZmZOYW1lIiwiQnVzZXMiLCJjaGFubmVsTmFtZSIsInNlbmRLbm9iIiwicmVjZWl2ZSIsIkRyYXciLCJleHBpcmF0aW9uIiwiYW50aWNpcGF0aW9uIiwiX2JvdW5kRHJhd0xvb3AiLCJfZHJhd0xvb3AiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJMaXN0ZW5lciIsIkxpc3RlbmVyQ29uc3RydWN0b3IiLCJmb3J3YXJkWCIsImZvcndhcmRZIiwiZm9yd2FyZFoiLCJ1cFgiLCJ1cFkiLCJ1cFoiLCJsaXN0ZW5lciIsIm9yaWdpbmFsQ29udGV4dCIsInJlbmRlclJldCIsImF0dGVtcHRSZW5kZXIiLCJ0cmllcyIsIkVmZmVjdCIsIl9kcnlXZXQiLCJ3ZXQiLCJlZmZlY3RTZW5kIiwiZWZmZWN0UmV0dXJuIiwiY29ubmVjdEVmZmVjdCIsImVmZmVjdCIsIkF1dG9GaWx0ZXIiLCJfbGZvIiwiZGVwdGgiLCJkZWxheSIsIm9jdCIsIkF1dG9QYW5uZXIiLCJBdXRvV2FoIiwiZm9sbG93ZXIiLCJfc3dlZXBSYW5nZSIsIl9iYXNlRnJlcXVlbmN5IiwiX2lucHV0Qm9vc3QiLCJfYmFuZHBhc3MiLCJfcGVha2luZyIsIl9zZXRTd2VlcFJhbmdlIiwic2Vuc2l0aXZpdHkiLCJiYXNlRnJlcSIsInNlbnNpdGl2eSIsIk1vZHVsbyIsIm1vZHVsdXMiLCJfc3VidHJhY3QiLCJfbW9kU2lnbmFsIiwiX3NldFdhdmVTaGFwZXIiLCJtb2QiLCJCaXRDcnVzaGVyIiwiaW52U3RlcFNpemUiLCJiaXRzIiwiX21vZHVsbyIsIl9iaXRzIiwiQ2hlYnlzaGV2IiwiX29yZGVyIiwib3JkZXIiLCJfZ2V0Q29lZmZpY2llbnQiLCJkZWdyZWUiLCJtZW1vIiwiU3RlcmVvRWZmZWN0IiwiZWZmZWN0U2VuZEwiLCJlZmZlY3RTZW5kUiIsImVmZmVjdFJldHVybkwiLCJlZmZlY3RSZXR1cm5SIiwiQ2hvcnVzIiwiX2RlcHRoIiwiX2RlbGF5VGltZSIsIl9sZm9MIiwiX2xmb1IiLCJfZGVsYXlOb2RlTCIsIl9kZWxheU5vZGVSIiwic3ByZWFkIiwiZGV2aWF0aW9uIiwiQ29udm9sdmVyIiwiX2NvbnZvbHZlciIsImNyZWF0ZUNvbnZvbHZlciIsIkRpc3RvcnRpb24iLCJfZGlzdG9ydGlvbiIsImRpc3RvcnRpb24iLCJkZWciLCJGZWVkYmFja0VmZmVjdCIsIl9mZWVkYmFja0dhaW4iLCJmZWVkYmFjayIsIkZlZWRiYWNrRGVsYXkiLCJjb21iRmlsdGVyVHVuaW5ncyIsImFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcyIsIkZyZWV2ZXJiIiwicm9vbVNpemUiLCJfY29tYkZpbHRlcnMiLCJfYWxscGFzc0ZpbHRlcnNMIiwiX2FsbHBhc3NGaWx0ZXJzUiIsImFsbHBhc3NMIiwiYWxscGFzc1IiLCJsZnBmIiwiYWwiLCJhciIsImNmIiwiY29tYkZpbHRlckRlbGF5VGltZXMiLCJjb21iRmlsdGVyUmVzb25hbmNlcyIsImFsbHBhc3NGaWx0ZXJGcmVxcyIsIkpDUmV2ZXJiIiwiX3NjYWxlUm9vbVNpemUiLCJfYWxscGFzc0ZpbHRlcnMiLCJfZmVlZGJhY2tDb21iRmlsdGVycyIsImFmIiwiYWxscGFzcyIsImZiY2YiLCJhcGYiLCJNaWRTaWRlRWZmZWN0IiwibWlkU2VuZCIsInNpZGVTZW5kIiwibWlkUmV0dXJuIiwic2lkZVJldHVybiIsIlBoYXNlciIsIl9maWx0ZXJzTCIsIl9tYWtlRmlsdGVycyIsInN0YWdlcyIsIl9maWx0ZXJzUiIsImNvbm5lY3RUb0ZyZXEiLCJmaWx0ZXJzIiwiU3RlcmVvWEZlZWRiYWNrRWZmZWN0IiwiX2ZlZWRiYWNrTFIiLCJfZmVlZGJhY2tSTCIsIlBpbmdQb25nRGVsYXkiLCJfbGVmdERlbGF5IiwibWF4RGVsYXlUaW1lIiwiX3JpZ2h0RGVsYXkiLCJfcmlnaHRQcmVEZWxheSIsIlBpdGNoU2hpZnQiLCJfZnJlcXVlbmN5IiwiX2RlbGF5QSIsIl9sZm9BIiwiX2RlbGF5QiIsIl9sZm9CIiwiX2Nyb3NzRmFkZSIsIl9jcm9zc0ZhZGVMRk8iLCJfZmVlZGJhY2tEZWxheSIsIl9waXRjaCIsIl93aW5kb3dTaXplIiwid2luZG93U2l6ZSIsImZhY3RvciIsIkJ1ZmZlclNvdXJjZSIsIl9zb3VyY2VTdG9wcGVkIiwiX3NvdXJjZSIsIl9vbmVuZGVkIiwicGxheWJhY2tSYXRlIiwiZmFkZUluIiwiZmFkZU91dCIsIl9vbmVuZGVkVGltZW91dCIsImZhZGVJblRpbWUiLCJjb21wdXRlZER1ciIsImZhZGVPdXRUaW1lIiwiaGVsZER1cmF0aW9uIiwic3RhcnRGYWRlIiwiYWRkaXRpb25hbFRhaWwiLCJOb2lzZSIsIl9wbGF5YmFja1JhdGUiLCJfbm9pc2VCdWZmZXJzIiwicmF0ZSIsIl9ub2lzZUFycmF5cyIsInBpbmsiLCJjaGFubmVsTnVtIiwiYjAiLCJiMSIsImIyIiwiYjMiLCJiNCIsImI1IiwiYjYiLCJ3aGl0ZSIsImJyb3duIiwibGFzdE91dCIsImNyZWF0ZUJ1ZmZlcnMiLCJSZXZlcmIiLCJwcmVEZWxheSIsImdlbmVyYXRlIiwibm9pc2VMIiwibm9pc2VSIiwiU3RlcmVvRmVlZGJhY2tFZmZlY3QiLCJfZmVlZGJhY2tMIiwiX2ZlZWRiYWNrUiIsIlN0ZXJlb1dpZGVuZXIiLCJ3aWR0aCIsIl90d29UaW1lc1dpZHRoTWlkIiwiX3R3b1RpbWVzV2lkdGhTaWRlIiwiX21pZE11bHQiLCJfb25lTWludXNXaWR0aCIsIl9zaWRlTXVsdCIsIlRyZW1vbG8iLCJfYW1wbGl0dWRlTCIsIl9hbXBsaXR1ZGVSIiwiVmlicmF0byIsIkV2ZW50IiwiX3N0YXJ0T2Zmc2V0IiwiX3Byb2JhYmlsaXR5IiwiX2h1bWFuaXplIiwiaHVtYW5pemUiLCJfcmVzY2hlZHVsZUV2ZW50cyIsInN0YXJ0VGljayIsIl9nZXRMb29wRHVyYXRpb24iLCJfdGljayIsInByb2IiLCJ2YXJpYXRpb24iLCJyZXNjaGVkdWxUaW1lIiwibGFzdEV2ZW50IiwibG9vcER1cmF0aW9uIiwiTG9vcCIsIl9ldmVudCIsIml0ZXJhdGlvbnMiLCJpdGVycyIsIlBhcnQiLCJfZm9yRWFjaCIsIl9zdGFydE5vdGUiLCJhdCIsIl9yZXN0YXJ0RXZlbnQiLCJyZW1vdmVBbGwiLCJfc2V0QWxsIiwiX3Rlc3RMb29wQm91bmRyaWVzIiwiUGF0dGVybiIsIl9wYXR0ZXJuIiwicGF0dGVybiIsInZhbHMiLCJTZXF1ZW5jZSIsIl9zdWJkaXZpc2lvbiIsIl9pbmRleFRpbWUiLCJzdWJTdWJkaXZpc2lvbiIsIlB1bHNlT3NjaWxsYXRvciIsIl93aWR0aEdhdGUiLCJfc2F3dG9vdGgiLCJQV01Pc2NpbGxhdG9yIiwiX3B1bHNlIiwibW9kdWxhdGlvbkZyZXF1ZW5jeSIsIl9tb2R1bGF0b3IiLCJGTU9zY2lsbGF0b3IiLCJfY2FycmllciIsIm1vZHVsYXRpb25JbmRleCIsIm1vZHVsYXRpb25UeXBlIiwiaGFybW9uaWNpdHkiLCJfbW9kdWxhdGlvbk5vZGUiLCJBTU9zY2lsbGF0b3IiLCJfbW9kdWxhdGlvblNjYWxlIiwiRmF0T3NjaWxsYXRvciIsIl9vc2NpbGxhdG9ycyIsIl9zcHJlYWQiLCJvc2MiLCJpdGVyYXRvciIsIk9tbmlPc2NpbGxhdG9yIiwiX3NvdXJjZVR5cGUiLCJPbW5pT3NjVHlwZSIsInByZWZpeCIsInN1YnN0ciIsIl9jcmVhdGVOZXdPc2NpbGxhdG9yIiwib3NjVHlwZSIsIk9zY2lsbGF0b3JDb25zdHJ1Y3RvciIsIm9sZE9zYyIsIm1UeXBlIiwiSW5zdHJ1bWVudCIsIl9zeW5jTWV0aG9kIiwidGltZVBvc2l0aW9uIiwib3JpZ2luYWxNZXRob2QiLCJfb3JpZ2luYWxfdHJpZ2dlckF0dGFjayIsIl9vcmlnaW5hbF90cmlnZ2VyUmVsZWFzZSIsIk1vbm9waG9uaWMiLCJwb3J0YW1lbnRvIiwiX3RyaWdnZXJFbnZlbG9wZUF0dGFjayIsInNldE5vdGUiLCJfdHJpZ2dlckVudmVsb3BlUmVsZWFzZSIsImdldExldmVsQXRUaW1lIiwiZW52ZWxvcGUiLCJwb3J0VGltZSIsIlN5bnRoIiwib3NjaWxsYXRvciIsIkFNU3ludGgiLCJtb2R1bGF0aW9uIiwibW9kdWxhdGlvbkVudmVsb3BlIiwiTW9ub1N5bnRoIiwiZmlsdGVyRW52ZWxvcGUiLCJEdW9TeW50aCIsInZvaWNlMCIsInZvaWNlMSIsIl92aWJyYXRvIiwidmlicmF0b1JhdGUiLCJfdmlicmF0b0dhaW4iLCJ2aWJyYXRvQW1vdW50IiwiRk1TeW50aCIsImNhcnJpZXIiLCJtb2R1bGF0b3IiLCJNZW1icmFuZVN5bnRoIiwicGl0Y2hEZWNheSIsIm1heE5vdGUiLCJpbmhhcm1SYXRpb3MiLCJNZXRhbFN5bnRoIiwiX2ZyZXFNdWx0aXBsaWVycyIsIl9hbXBsaXR1ZSIsIl9oaWdocGFzcyIsIl9maWx0ZXJGcmVxU2NhbGVyIiwibXVsdCIsInZlbCIsIm9jdHMiLCJOb2lzZVN5bnRoIiwibm9pc2UiLCJQbHVja1N5bnRoIiwiX25vaXNlIiwiYXR0YWNrTm9pc2UiLCJfbGZjZiIsImRlbGF5QW1vdW50IiwiUG9seVN5bnRoIiwicG9seXBob255IiwiTUFYX1BPTFlQSE9OWSIsInZvaWNlcyIsIl90cmlnZ2VycyIsInYiLCJ2b2ljZSIsIm5vdGVzIiwib2xkZXN0IiwiSlNPTiIsInN0cmluZ2lmeSIsInN0cmluZ2lmaWVkIiwiZGVzYyIsInJlbGVhc2VBbGwiLCJTYW1wbGVyIiwidXJsTWFwIiwiaXNOYU4iLCJfYWN0aXZlU291cmNlcyIsIl9maW5kQ2xvc2VzdCIsImRpZmZlcmVuY2UiLCJjbG9zZXN0Tm90ZSIsInNvdXJjZSIsInNvdXJjZXMiLCJzZXRXYXZlVGFibGUiLCJjcmVhdGVXYXZlVGFibGUiLCJHYWluVG9BdWRpbyIsIk5vcm1hbGl6ZSIsImlucHV0TWluIiwiaW5wdXRNYXgiLCJfaW5wdXRNaW4iLCJfaW5wdXRNYXgiLCJfZGl2IiwiVHJhbnNwb3J0VGltZWxpbmVTaWduYWwiLCJfb3V0cHV0U2lnIiwiX2xhc3RWYWwiLCJfb25UaWNrIiwiX2JpbmRBbmNob3JWYWx1ZSIsIl9hbmNob3JWYWx1ZSIsIl9zeW5jZWRDYWxsYmFjayIsIkdyYWluUGxheWVyIiwiZ3JhaW5TaXplIiwiX2dyYWluU2l6ZSIsIl9vdmVybGFwIiwib3ZlcmxhcCIsIl9vbnN0b3AiLCJfb2Zmc2V0Iiwic2VlayIsIlBsYXllciIsImF1dG9zdGFydCIsIl9lbGFwc2VkVGltZSIsInJldHJpZ2dlciIsIl9vblNvdXJjZUVuZCIsImNvbXB1dGVkRHVyYXRpb24iLCJfc3RvcEF0TmV4dEl0ZXJhdGlvbiIsIm5leHRTdG9wIiwicG9zaXRpb24iLCJzdG9wVGltZSIsIlBsYXllcnMiLCJfcGxheWVycyIsIl9mYWRlSW4iLCJfZmFkZU91dCIsInBsYXllciIsInBsYXlpbmciLCJwbGF5ZXJOYW1lIiwic3RvcEFsbCIsIlVzZXJNZWRpYSIsIl9tZWRpYVN0cmVhbSIsIl9zdHJlYW0iLCJfZGV2aWNlIiwibGFiZWxPcklkIiwiZW51bWVyYXRlRGV2aWNlcyIsImRldmljZXMiLCJkZXZpY2UiLCJmaW5kIiwibGFiZWwiLCJkZXZpY2VJZCIsImNvbnN0cmFpbnRzIiwiYXVkaW8iLCJlY2hvQ2FuY2VsbGF0aW9uIiwibWVkaWFEZXZpY2VzIiwiZ2V0VXNlck1lZGlhIiwic3RyZWFtIiwiY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UiLCJnZXRBdWRpb1RyYWNrcyIsInRyYWNrIiwia2luZCIsImFjdGl2ZSIsImdyb3VwSWQiLCJNaWRpIiwiZmFjdG9yeSIsImdsb2JhbCIsInJlcXVpcmUiLCJoIiwiY29kZSIsIjEiLCJjaGFyQ29kZUF0IiwidG9CeXRlQXJyYXkiLCJmcm9tQnl0ZUFycmF5IiwiYmFzZTY0anMiLCIyIiwiMyIsIlRZUEVEX0FSUkFZX1NVUFBPUlQiLCJ3cml0ZSIsImlzQnVmZmVyIiwiWSIsIkFycmF5QnVmZmVyIiwiYnl0ZUxlbmd0aCIsIl9hdWdtZW50IiwiZGF0YSIsIl9fcHJvdG9fXyIsIl9pc0J1ZmZlciIsInBvb2xTaXplIiwiWiIsIlIiLCJVIiwidSIsIk51bWJlciIsIlYiLCJ3IiwiUyIsIlQiLCJBIiwiVyIsIiQiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIlgiLCJOIiwiUCIsImFhIiwiTyIsIlNsb3dCdWZmZXIiLCJJTlNQRUNUX01BWF9CWVRFUyIsImZvbyIsInN1YmFycmF5IiwiY29tcGFyZSIsImlzRW5jb2RpbmciLCJlcXVhbHMiLCJpbnNwZWN0IiwicmVhZFVJbnQ4Iiwid3JpdGVVSW50OCIsInRvSlNPTiIsIl9hcnIiLCJyZWFkVUludExFIiwicmVhZFVJbnRCRSIsInJlYWRVSW50MTZMRSIsInJlYWRVSW50MTZCRSIsInJlYWRVSW50MzJMRSIsInJlYWRVSW50MzJCRSIsInJlYWRJbnRMRSIsInJlYWRJbnRCRSIsInJlYWRJbnQ4IiwicmVhZEludDE2TEUiLCJyZWFkSW50MTZCRSIsInJlYWRJbnQzMkxFIiwicmVhZEludDMyQkUiLCJyZWFkRmxvYXRMRSIsInJlYWQiLCJyZWFkRmxvYXRCRSIsInJlYWREb3VibGVMRSIsInJlYWREb3VibGVCRSIsIndyaXRlVUludExFIiwid3JpdGVVSW50QkUiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVVSW50MTZCRSIsIndyaXRlVUludDMyTEUiLCJ3cml0ZVVJbnQzMkJFIiwid3JpdGVJbnRMRSIsIndyaXRlSW50QkUiLCJ3cml0ZUludDgiLCJ3cml0ZUludDE2TEUiLCJ3cml0ZUludDE2QkUiLCJ3cml0ZUludDMyTEUiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZUZsb2F0TEUiLCJ3cml0ZUZsb2F0QkUiLCJ3cml0ZURvdWJsZUxFIiwid3JpdGVEb3VibGVCRSIsIl9zZXQiLCJmaWxsIiwidG9BcnJheUJ1ZmZlciIsIl8iLCJ0b0xvY2FsZVN0cmluZyIsInNlbGYiLCJiYXNlNjQtanMiLCJpZWVlNzU0IiwiaXNhcnJheSIsIjQiLCJFUzZQcm9taXNlIiwiY2EiLCJlYSIsIl9yZXN1bHQiLCJpYSIsImdhIiwiaGEiLCJfbGFiZWwiLCJfb25lcnJvciIsImZhIiwiX3N1YnNjcmliZXJzIiwiamEiLCJrYSIsIl9pbnN0YW5jZUNvbnN0cnVjdG9yIiwicHJvbWlzZSIsIl9yZW1haW5pbmciLCJfZW51bWVyYXRlIiwiZGEiLCJNdXRhdGlvbk9ic2VydmVyIiwiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIsImJhIiwiVWludDhDbGFtcGVkQXJyYXkiLCJpbXBvcnRTY3JpcHRzIiwiTWVzc2FnZUNoYW5uZWwiLCJuZXh0VGljayIsImNyZWF0ZVRleHROb2RlIiwib2JzZXJ2ZSIsImNoYXJhY3RlckRhdGEiLCJwb3J0MSIsInBvcnQyIiwicnVuT25Mb29wIiwicnVuT25Db250ZXh0Iiwic3Vic3RyaW5nIiwiX2VhY2hFbnRyeSIsIl9zZXR0bGVkQXQiLCJfd2lsbFNldHRsZUF0IiwiYWxsIiwicmFjZSIsInJlamVjdCIsIl9zZXRTY2hlZHVsZXIiLCJfc2V0QXNhcCIsIl9hc2FwIiwicG9seWZpbGwiLCJGdW5jdGlvbiIsImNhc3QiLCJfcHJvY2VzcyIsIjUiLCJmZXRjaEpzb25wIiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInJlbW92ZUNoaWxkIiwianNvbnBDYWxsYmFjayIsImpzb25wQ2FsbGJhY2tGdW5jdGlvbiIsIkRhdGUiLCJvayIsImpzb24iLCJzZXRBdHRyaWJ1dGUiLCJjaGFyc2V0IiwiYXBwZW5kQ2hpbGQiLCI2IiwiY3JlYXRlRWxlbWVudE5TIiwiSFRNTEVsZW1lbnQiLCJzYWZhcmkiLCJzZXRJbW1lZGlhdGUiLCJyZXZva2VPYmplY3RVUkwiLCJyZWFkeVN0YXRlIiwiSU5JVCIsImhyZWYiLCJkb3dubG9hZCIsIk1vdXNlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiRE9ORSIsIkZpbGVSZWFkZXIiLCJvbmxvYWRlbmQiLCJyZXN1bHQiLCJsb2NhdGlvbiIsInJlYWRBc0RhdGFVUkwiLCJtc1NhdmVPck9wZW5CbG9iIiwiV1JJVElORyIsIm9ud3JpdGVzdGFydCIsIm9ucHJvZ3Jlc3MiLCJvbndyaXRlIiwib25hYm9ydCIsIm9ud3JpdGVlbmQiLCJjb250ZW50Iiwic2F2ZUFzIiwiNyIsIk5hTiIsIkxOMiIsIjgiLCI5Iiwib2EiLCJuYSIsIm1hIiwibGEiLCJxYSIsInJhIiwic29ydCIsInBhIiwibGlidGVzcyIsIkdsdVRlc3NlbGF0b3IiLCJ3aW5kaW5nUnVsZSIsIkdMVV9URVNTX1dJTkRJTkdfT0REIiwiR0xVX1RFU1NfV0lORElOR19OT05aRVJPIiwiR0xVX1RFU1NfV0lORElOR19QT1NJVElWRSIsIkdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkUiLCJHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFfVFdPIiwicHJpbWl0aXZlVHlwZSIsIkdMX0xJTkVfTE9PUCIsIkdMX1RSSUFOR0xFUyIsIkdMX1RSSUFOR0xFX1NUUklQIiwiR0xfVFJJQU5HTEVfRkFOIiwiZXJyb3JUeXBlIiwiR0xVX1RFU1NfTUlTU0lOR19CRUdJTl9QT0xZR09OIiwiR0xVX1RFU1NfTUlTU0lOR19FTkRfUE9MWUdPTiIsIkdMVV9URVNTX01JU1NJTkdfQkVHSU5fQ09OVE9VUiIsIkdMVV9URVNTX01JU1NJTkdfRU5EX0NPTlRPVVIiLCJHTFVfVEVTU19DT09SRF9UT09fTEFSR0UiLCJHTFVfVEVTU19ORUVEX0NPTUJJTkVfQ0FMTEJBQ0siLCJnbHVFbnVtIiwiR0xVX1RFU1NfTUVTSCIsIkdMVV9URVNTX1RPTEVSQU5DRSIsIkdMVV9URVNTX1dJTkRJTkdfUlVMRSIsIkdMVV9URVNTX0JPVU5EQVJZX09OTFkiLCJHTFVfSU5WQUxJRF9FTlVNIiwiR0xVX0lOVkFMSURfVkFMVUUiLCJHTFVfVEVTU19CRUdJTiIsIkdMVV9URVNTX1ZFUlRFWCIsIkdMVV9URVNTX0VORCIsIkdMVV9URVNTX0VSUk9SIiwiR0xVX1RFU1NfRURHRV9GTEFHIiwiR0xVX1RFU1NfQ09NQklORSIsIkdMVV9URVNTX0JFR0lOX0RBVEEiLCJHTFVfVEVTU19WRVJURVhfREFUQSIsIkdMVV9URVNTX0VORF9EQVRBIiwiR0xVX1RFU1NfRVJST1JfREFUQSIsIkdMVV9URVNTX0VER0VfRkxBR19EQVRBIiwiR0xVX1RFU1NfQ09NQklORV9EQVRBIiwiZ2x1RGVsZXRlVGVzcyIsImdsdVRlc3NQcm9wZXJ0eSIsImdsdUdldFRlc3NQcm9wZXJ0eSIsImdsdVRlc3NOb3JtYWwiLCJnbHVUZXNzQ2FsbGJhY2siLCJnbHVUZXNzVmVydGV4IiwiZ2x1VGVzc0JlZ2luUG9seWdvbiIsImdsdVRlc3NCZWdpbkNvbnRvdXIiLCJnbHVUZXNzRW5kQ29udG91ciIsImdsdVRlc3NFbmRQb2x5Z29uIiwiMTAiLCJvcGVudHlwZSIsInRhYmxlIiwiVWludDE2QXJyYXkiLCJ0cmFucyIsInNvdXJjZUluZGV4IiwidGFnIiwiYml0Y291bnQiLCJkZXN0TGVuIiwibHRyZWUiLCJkdHJlZSIsInZlIiwidWUiLCJzZSIsInRlIiwia2UiLCJvZSIsInBlIiwicWUiLCJyZSIsImxlIiwieDEiLCJ5MSIsIngyIiwieTIiLCJjb21tYW5kcyIsInN0cm9rZSIsInN0cm9rZVdpZHRoIiwidGFibGVOYW1lIiwiZmllbGRzIiwiZm9ybWF0IiwiZ2x5cGhzIiwieGUiLCJhc3NlcnQiLCJzY3JpcHQiLCJkZWZhdWx0TGFuZ1N5cyIsInJlcUZlYXR1cmVJbmRleCIsImZlYXR1cmVJbmRleGVzIiwibGFuZ1N5c1JlY29yZHMiLCJsYW5nU3lzIiwiZmVhdHVyZSIsImZlYXR1cmVQYXJhbXMiLCJsb29rdXBMaXN0SW5kZXhlcyIsImxvb2t1cFR5cGUiLCJsb29rdXBGbGFnIiwic3VidGFibGVzIiwiZ2V0VWludDgiLCJnZXRVaW50MTYiLCJnZXRVaW50MzIiLCJnZXRJbnQxNiIsInJlbGF0aXZlT2Zmc2V0IiwiZ2x5cGhJbmRleCIsImZvbnQiLCJjbWFwIiwiZW5jb2RpbmciLCJuYW1lcyIsIlFlIiwibnVtYmVyT2ZHbHlwaHMiLCJnbHlwaE5hbWVJbmRleCIsImJpbmRDb25zdHJ1Y3RvclZhbHVlcyIsInBhdGgiLCJjb25maWd1cmFibGUiLCJMZSIsImdldENhcmQxNiIsImdldEJ5dGUiLCJnZXRPZmZzZXQiLCJnZXRCeXRlcyIsIm9iamVjdHMiLCJlbmRPZmZzZXQiLCJwYXJzZUJ5dGUiLCJQYXJzZXIiLCJOZSIsIm9wIiwic2EiLCJUZSIsInRhIiwiVWUiLCJEYXRhVmlldyIsIl9zdWJycyIsIl9zdWJyc0JpYXMiLCJwcml2YXRlIiwiX2RlZmF1bHRXaWR0aFgiLCJkZWZhdWx0V2lkdGhYIiwiX25vbWluYWxXaWR0aFgiLCJub21pbmFsV2lkdGhYIiwic3VicnMiLCJfcHJpdmF0ZURpY3QiLCJ4YSIsImNsb3NlUGF0aCIsIm1vdmVUbyIsImlzQ0lERm9udCIsInRhYmxlcyIsImNmZiIsInRvcERpY3QiLCJfZmRTZWxlY3QiLCJfZmRBcnJheSIsInBvcCIsImxpbmVUbyIsImN1cnZlVG8iLCJnc3VicnNCaWFzIiwiZ3N1YnJzIiwiYWR2YW5jZVdpZHRoIiwiQWEiLCJEYSIsIkVhIiwiSWUiLCJSZWNvcmQiLCJkaWN0IiwiRmEiLCJ0b3BEaWN0cyIsIkphIiwiWGEiLCJZYSIsImRmIiwiZmYiLCJlZiIsIiRhIiwiX2EiLCJtYiIsIm5iIiwib2IiLCJwYiIsIlRhYmxlIiwibnVtVGFibGVzIiwic2VhcmNoUmFuZ2UiLCJlbnRyeVNlbGVjdG9yIiwicmFuZ2VTaGlmdCIsInNpemVPZiIsImFyZ3VtZW50IiwiZW5jb2RlIiwicWIiLCJjaGFyVG9HbHlwaEluZGV4IiwiZ2V0TWV0cmljcyIsInRiIiwidWIiLCJ2YiIsIndiIiwieGIiLCJ5YiIsInpiIiwiQWIiLCJzdWJzdEZvcm1hdCIsIkNiIiwiRGIiLCJFYiIsIkZiIiwicGFyc2VTaG9ydCIsIkdiIiwibnVtYmVyT2ZDb250b3VycyIsIl94TWluIiwiX3lNaW4iLCJfeE1heCIsIl95TWF4IiwiZW5kUG9pbnRJbmRpY2VzIiwicGFyc2VVU2hvcnQiLCJpbnN0cnVjdGlvbkxlbmd0aCIsImluc3RydWN0aW9ucyIsIm9uQ3VydmUiLCJsYXN0UG9pbnRPZkNvbnRvdXIiLCJwb2ludHMiLCJpc0NvbXBvc2l0ZSIsImNvbXBvbmVudHMiLCJ4U2NhbGUiLCJzY2FsZTAxIiwic2NhbGUxMCIsInlTY2FsZSIsImR5IiwibWF0Y2hlZFBvaW50cyIsInBhcnNlQ2hhciIsInBhcnNlRjJEb3QxNCIsIkhiIiwiSmIiLCJJYiIsInF1YWRyYXRpY0N1cnZlVG8iLCJLYiIsImdldFBhdGgiLCJNYiIsImdldENvbW1hbmRzIiwidmYiLCJfZnBnbVN0YXRlIiwiX3ByZXBTdGF0ZSIsIl9lcnJvclN0YXRlIiwiTmIiLCJPYiIsInNpZ24iLCJQYiIsIlFiIiwiUmIiLCJTYiIsIlRiIiwiYXhpcyIsInNsb3BlIiwibm9ybWFsU2xvcGUiLCJmcmVlemUiLCJVYiIsInhmIiwieWYiLCJWYiIsInhvIiwieW8iLCJwcmV2UG9pbnRPbkNvbnRvdXIiLCJuZXh0UG9pbnRPbkNvbnRvdXIiLCJ4VG91Y2hlZCIsInlUb3VjaGVkIiwicHJldmVudEV4dGVuc2lvbnMiLCJXYiIsImVudiIsInN0YWNrIiwicHJvZyIsInpwMCIsInpwMSIsInpwMiIsInJwMCIsInJwMSIsInJwMiIsImZ2IiwicHYiLCJkcHYiLCJYYiIsInRab25lIiwiZ1pvbmUiLCJZYiIsImlwIiwiWmIiLCJERUJVRyIsIiRiIiwiX2IiLCJhYyIsInoyIiwiejEiLCJiYyIsInhjIiwiR2MiLCJ6MCIsImRpc3RhbmNlIiwiemYiLCJzZXRSZWxhdGl2ZSIsInRvdWNoIiwiSGMiLCJ0b3VjaGVkIiwicHJldlRvdWNoZWQiLCJuZXh0VG91Y2hlZCIsImludGVycG9sYXRlIiwiSWMiLCJKYyIsImNvbnRvdXJzIiwiS2MiLCJOYyIsIlFjIiwiY3Z0IiwiY3ZDdXRJbiIsIlhjIiwiWWMiLCJtZCIsInBwZW0iLCJkZWx0YUJhc2UiLCJkZWx0YVNoaWZ0IiwieGQiLCJ6ZCIsIkdkIiwiTmQiLCJPZCIsIlBkIiwibWluRGlzIiwiUWQiLCJlbXB0eSIsImZhbWlseU5hbWUiLCJzdHlsZU5hbWUiLCJ1bml0c1BlckVtIiwiYXNjZW5kZXIiLCJkZXNjZW5kZXIiLCJmb250RmFtaWx5IiwiZW4iLCJmb250U3ViZmFtaWx5IiwiZnVsbE5hbWUiLCJwb3N0U2NyaXB0TmFtZSIsImRlc2lnbmVyIiwiZGVzaWduZXJVUkwiLCJtYW51ZmFjdHVyZXIiLCJtYW51ZmFjdHVyZXJVUkwiLCJsaWNlbnNlIiwibGljZW5zZVVSTCIsImRlc2NyaXB0aW9uIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiY3JlYXRlZFRpbWVzdGFtcCIsIm9zMiIsInVzV2VpZ2h0Q2xhc3MiLCJ3ZWlnaHRDbGFzcyIsInVzV2VpZ2h0Q2xhc3NlcyIsIk1FRElVTSIsInVzV2lkdGhDbGFzcyIsIndpZHRoQ2xhc3MiLCJ1c1dpZHRoQ2xhc3NlcyIsImZzU2VsZWN0aW9uIiwiZnNTZWxlY3Rpb25WYWx1ZXMiLCJSRUdVTEFSIiwiU2UiLCJHbHlwaFNldCIsInN1YnN0aXR1dGlvbiIsIl9oaW50aW5nIiwib3V0bGluZXNGb3JtYXQiLCJSZCIsIlNkIiwiVGQiLCJwYXJzZVRhZyIsInBhcnNlRml4ZWQiLCJza2lwIiwiVWQiLCJjb29yZGluYXRlcyIsIlZkIiwiY2UiLCJyZWFkRmlsZSIsIm1lc3NhZ2UiLCJlZSIsImdldFRhZyIsImdldFVMb25nIiwiY2hlY2tzdW0iLCJjb21wcmVzc2lvbiIsImdlIiwiY29tcHJlc3NlZExlbmd0aCIsIndlIiwiaGUiLCJnZXRVU2hvcnQiLCJmZSIsIk1lIiwicGFyc2UiLCJwYXJzZVNob3J0TGlzdCIsImZwZ20iLCJwYXJzZUJ5dGVMaXN0IiwiaGVhZCIsIldlIiwiaW5kZXhUb0xvY0Zvcm1hdCIsImhoZWEiLCJYZSIsIm51bWJlck9mSE1ldHJpY3MiLCJaZSIsIm1heHAiLCIkZSIsIm51bUdseXBocyIsImpmIiwicG9zdCIsImtmIiwiZ2x5cGhOYW1lcyIsInByZXAiLCJnZiIsIkhmIiwiVmUiLCJZZSIsImdseXBoSW5kZXhNYXAiLCJhZGRVbmljb2RlIiwiY2ZmRW5jb2RpbmciLCJnbHlwaEluZGV4VG9OYW1lIiwia2VybmluZ1BhaXJzIiwiR2YiLCJncG9zIiwiRmYiLCJpbml0IiwiZ3N1YiIsIm9mIiwiZnZhciIsIkNmIiwibWV0YSIsInBmIiwibWV0YXMiLCJjb2RlUG9pbnRBdCIsIm1lIiwibmUiLCJpc0VtcHR5IiwiYWRkUG9pbnQiLCJhZGRYIiwiYWRkWSIsImFkZEJlemllciIsImFkZFF1YWQiLCJiZXppZXJDdXJ2ZVRvIiwicXVhZFRvIiwiZ2V0Qm91bmRpbmdCb3giLCJkcmF3IiwiYmVnaW5QYXRoIiwiZmlsbFN0eWxlIiwic3Ryb2tlU3R5bGUiLCJsaW5lV2lkdGgiLCJ0b1BhdGhEYXRhIiwidG9TVkciLCJ0b0RPTUVsZW1lbnQiLCJ6ZSIsIkFlIiwiQmUiLCJDZSIsIkJZVEUiLCJDSEFSIiwiQ0hBUkFSUkFZIiwiVVNIT1JUIiwiU0hPUlQiLCJVSU5UMjQiLCJVTE9ORyIsIkxPTkciLCJGSVhFRCIsIkZXT1JEIiwiVUZXT1JEIiwiTE9OR0RBVEVUSU1FIiwiVEFHIiwiQ2FyZDgiLCJDYXJkMTYiLCJPZmZTaXplIiwiU0lEIiwiTlVNQkVSIiwiTlVNQkVSMTYiLCJOVU1CRVIzMiIsIlJFQUwiLCJOQU1FIiwiU1RSSU5HIiwiVVRGOCIsIlVURjE2IiwiRGUiLCJ4LW1hYy1jcm9hdGlhbiIsIngtbWFjLWN5cmlsbGljIiwieC1tYWMtZ2FlbGljIiwieC1tYWMtZ3JlZWsiLCJ4LW1hYy1pY2VsYW5kaWMiLCJ4LW1hYy1pbnVpdCIsIngtbWFjLWNlIiwibWFjaW50b3NoIiwieC1tYWMtcm9tYW5pYW4iLCJ4LW1hYy10dXJraXNoIiwiTUFDU1RSSU5HIiwiRWUiLCJGZSIsIldlYWtNYXAiLCJHZSIsIlZBUkRFTFRBUyIsIklOREVYIiwiT0JKRUNUIiwiRElDVCIsIk9QRVJBTkQiLCJPUEVSQVRPUiIsIk9QIiwiSGUiLCJDSEFSU1RSSU5HIiwiVEFCTEUiLCJSRUNPUkQiLCJMSVRFUkFMIiwiQ292ZXJhZ2UiLCJTY3JpcHRMaXN0IiwiRmVhdHVyZUxpc3QiLCJMb29rdXBMaXN0IiwidXNob3J0TGlzdCIsInRhYmxlTGlzdCIsInJlY29yZExpc3QiLCJKZSIsImJ5dGUiLCJ1U2hvcnQiLCJzaG9ydCIsInVMb25nIiwiZml4ZWQiLCJsb25nRGF0ZVRpbWUiLCJnZXRJbnQ4IiwicGFyc2VDYXJkOCIsInBhcnNlQ2FyZDE2IiwicGFyc2VTSUQiLCJwYXJzZU9mZnNldDE2IiwicGFyc2VVTG9uZyIsInBhcnNlT2Zmc2V0MzIiLCJwYXJzZVN0cmluZyIsInBhcnNlTG9uZ0RhdGVUaW1lIiwicGFyc2VWZXJzaW9uIiwicGFyc2VVTG9uZ0xpc3QiLCJwYXJzZU9mZnNldDE2TGlzdCIsInBhcnNlVVNob3J0TGlzdCIsInBhcnNlTGlzdCIsInBhcnNlTGlzdDMyIiwicGFyc2VSZWNvcmRMaXN0IiwicGFyc2VSZWNvcmRMaXN0MzIiLCJwYXJzZVN0cnVjdCIsInBhcnNlVmFsdWVSZWNvcmQiLCJ4UGxhY2VtZW50IiwieVBsYWNlbWVudCIsInhBZHZhbmNlIiwieUFkdmFuY2UiLCJ4UGxhRGV2aWNlIiwieVBsYURldmljZSIsInhBZHZEZXZpY2UiLCJ5QWR2RGV2aWNlIiwicGFyc2VWYWx1ZVJlY29yZExpc3QiLCJwYXJzZVBvaW50ZXIiLCJwYXJzZVBvaW50ZXIzMiIsInBhcnNlTGlzdE9mTGlzdHMiLCJwYXJzZUNvdmVyYWdlIiwicmFuZ2VzIiwicGFyc2VDbGFzc0RlZiIsInN0YXJ0R2x5cGgiLCJjbGFzc2VzIiwiY2xhc3NJZCIsImxpc3QiLCJsaXN0MzIiLCJyZWNvcmRMaXN0MzIiLCJwb2ludGVyIiwicG9pbnRlcjMyIiwib2Zmc2V0MTYiLCJ1U2hvcnRMaXN0Iiwib2Zmc2V0MzIiLCJ1TG9uZ0xpc3QiLCJzdHJ1Y3QiLCJjb3ZlcmFnZSIsImNsYXNzRGVmIiwiS2UiLCJyZXNlcnZlZCIsInBhcnNlU2NyaXB0TGlzdCIsInBhcnNlRmVhdHVyZUxpc3QiLCJwYXJzZUxvb2t1cExpc3QiLCJtYXJrRmlsdGVyaW5nU2V0IiwicGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3QiLCJjb25kaXRpb25TZXRPZmZzZXQiLCJmZWF0dXJlVGFibGVTdWJzdGl0dXRpb25PZmZzZXQiLCJnZXRDYXJkOCIsImdldFNob3J0IiwiZ2V0Rml4ZWQiLCJieXRlc1RvU3RyaW5nIiwibGFuZ3VhZ2UiLCJncm91cENvdW50Iiwic2VnQ291bnQiLCJtYWtlIiwidW5pY29kZSIsInVuaWNvZGVzIiwiZ2x5cGhJZCIsInNlZ0NvdW50WDIiLCJjbWFwNExlbmd0aCIsImNtYXAxMk9mZnNldCIsIk9lIiwiUGUiLCJuYW1lVG9HbHlwaEluZGV4IiwiUmUiLCJsaW5lIiwieE1pbiIsInlNaW4iLCJ4TWF4IiwieU1heCIsImhpbnRpbmciLCJnZXRDb250b3VycyIsImxlZnRTaWRlQmVhcmluZyIsInJpZ2h0U2lkZUJlYXJpbmciLCJkcmF3UG9pbnRzIiwiYXJjIiwiZHJhd01ldHJpY3MiLCJnbHlwaExvYWRlciIsInR0ZkdseXBoTG9hZGVyIiwiY2ZmR2x5cGhMb2FkZXIiLCJmb3JtYXRNYWpvciIsImZvcm1hdE1pbm9yIiwib2Zmc2V0U2l6ZSIsInJvcyIsImZkQXJyYXkiLCJmZFNlbGVjdCIsInlhIiwic3VicnNCaWFzIiwiY2hhclN0cmluZ3MiLCJuR2x5cGhzIiwidmEiLCJ3YSIsIndlaWdodCIsIndlaWdodE5hbWUiLCJmb250QkJveCIsImZvbnRNYXRyaXgiLCJoZWFkZXIiLCJuYW1lSW5kZXgiLCJDYSIsInRvcERpY3RJbmRleCIsImdsb2JhbFN1YnJJbmRleCIsImNoYXJzZXRzIiwiSWEiLCJjaGFyU3RyaW5nc0luZGV4IiwiS2EiLCJwcml2YXRlRGljdCIsIkxhIiwic3RyaW5nSW5kZXgiLCJzdHJpbmdzIiwiR2EiLCJmb250UmV2aXNpb24iLCJjaGVja1N1bUFkanVzdG1lbnQiLCJtYWdpY051bWJlciIsImZsYWdzIiwiY3JlYXRlZCIsIm1vZGlmaWVkIiwibWFjU3R5bGUiLCJsb3dlc3RSZWNQUEVNIiwiZm9udERpcmVjdGlvbkhpbnQiLCJnbHlwaERhdGFGb3JtYXQiLCJnZXRUaW1lIiwibGluZUdhcCIsImFkdmFuY2VXaWR0aE1heCIsIm1pbkxlZnRTaWRlQmVhcmluZyIsIm1pblJpZ2h0U2lkZUJlYXJpbmciLCJ4TWF4RXh0ZW50IiwiY2FyZXRTbG9wZVJpc2UiLCJjYXJldFNsb3BlUnVuIiwiY2FyZXRPZmZzZXQiLCJtZXRyaWNEYXRhRm9ybWF0IiwibWF4UG9pbnRzIiwibWF4Q29udG91cnMiLCJtYXhDb21wb3NpdGVQb2ludHMiLCJtYXhDb21wb3NpdGVDb250b3VycyIsIm1heFpvbmVzIiwibWF4VHdpbGlnaHRQb2ludHMiLCJtYXhTdG9yYWdlIiwibWF4RnVuY3Rpb25EZWZzIiwibWF4SW5zdHJ1Y3Rpb25EZWZzIiwibWF4U3RhY2tFbGVtZW50cyIsIm1heFNpemVPZkluc3RydWN0aW9ucyIsIm1heENvbXBvbmVudEVsZW1lbnRzIiwibWF4Q29tcG9uZW50RGVwdGgiLCJfZSIsIjAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiLCIyMCIsIjIxIiwiMjIiLCIyMyIsIjI0IiwiMjUiLCIyNiIsIjI3IiwiMjgiLCIyOSIsIjMwIiwiMzEiLCIzMiIsIjMzIiwiMzQiLCIzNSIsIjM2IiwiMzciLCIzOCIsIjM5IiwiNDAiLCI0MSIsIjQyIiwiNDMiLCI0NCIsIjQ1IiwiNDYiLCI0NyIsIjQ4IiwiNDkiLCI1MCIsIjUxIiwiNTIiLCI1MyIsIjU0IiwiNTUiLCI1NiIsIjU3IiwiNTgiLCI1OSIsIjYwIiwiNjEiLCI2MiIsIjYzIiwiNjQiLCI2NSIsIjY2IiwiNjciLCI2OCIsIjY5IiwiNzAiLCI3MSIsIjcyIiwiNzMiLCI3NCIsIjc1IiwiNzYiLCI3NyIsIjc4IiwiNzkiLCI4MCIsIjgxIiwiODIiLCI4MyIsIjg0IiwiODUiLCI4NiIsIjg3IiwiODgiLCI4OSIsIjkwIiwiOTEiLCI5MiIsIjkzIiwiOTQiLCIxMjgiLCIxMjkiLCIxMzAiLCIxMzEiLCIxMzIiLCIxMzMiLCIxMzQiLCIxMzUiLCIxMzYiLCIxMzciLCIxMzgiLCIxMzkiLCIxNDAiLCIxNDEiLCIxNDIiLCIxNDMiLCIxNDQiLCIxNDUiLCIxNDYiLCIxNDciLCIxNDgiLCIxNDkiLCIxNTAiLCIxNTEiLCJiZiIsIjEwNzgiLCIxMDUyIiwiMTE1NiIsIjExMTgiLCI1MTIxIiwiMTUzNjEiLCIzMDczIiwiMjA0OSIsIjExMjY1IiwiMTMzMTMiLCIxMjI4OSIsIjQwOTciLCI2MTQ1IiwiODE5MyIsIjE2Mzg1IiwiMTAyNSIsIjEwMjQxIiwiNzE2OSIsIjE0MzM3IiwiOTIxNyIsIjEwNjciLCIxMTAxIiwiMjA5MiIsIjEwNjgiLCIxMTMzIiwiMTA2OSIsIjEwNTkiLCIyMTE3IiwiMTA5MyIsIjgyMTgiLCI1MTQ2IiwiMTE1MCIsIjEwMjYiLCIxMDI3IiwiMzA3NiIsIjUxMjQiLCIyMDUyIiwiNDEwMCIsIjEwMjgiLCIxMTU1IiwiMTA1MCIsIjQxMjIiLCIxMDI5IiwiMTAzMCIsIjExNjQiLCIxMTI1IiwiMjA2NyIsIjEwNDMiLCIzMDgxIiwiMTAyNDkiLCI0MTA1IiwiOTIyNSIsIjE2MzkzIiwiNjE1MyIsIjgyMDEiLCIxNzQxNyIsIjUxMjkiLCIxMzMyMSIsIjE4NDQxIiwiNzE3NyIsIjExMjczIiwiMjA1NyIsIjEwMzMiLCIxMjI5NyIsIjEwNjEiLCIxMDgwIiwiMTEyNCIsIjEwMzUiLCIyMDYwIiwiMzA4NCIsIjEwMzYiLCI1MTMyIiwiNjE1NiIsIjQxMDgiLCIxMTIyIiwiMTExMCIsIjEwNzkiLCIzMDc5IiwiMTAzMSIsIjUxMjciLCI0MTAzIiwiMjA1NSIsIjEwMzIiLCIxMTM1IiwiMTA5NSIsIjExMjgiLCIxMDM3IiwiMTA4MSIsIjEwMzgiLCIxMDM5IiwiMTEzNiIsIjEwNTciLCIxMTE3IiwiMjE0MSIsIjIxMDgiLCIxMDc2IiwiMTA3NyIsIjEwNDAiLCIyMDY0IiwiMTA0MSIsIjEwOTkiLCIxMDg3IiwiMTEwNyIsIjExNTgiLCIxMTU5IiwiMTA4OSIsIjExMTEiLCIxMDQyIiwiMTA4OCIsIjExMDgiLCIxMDYyIiwiMTA2MyIsIjIwOTQiLCIxMTM0IiwiMTA3MSIsIjIxMTAiLCIxMDg2IiwiMTEwMCIsIjEwODIiLCIxMTUzIiwiMTE0NiIsIjExMDIiLCIxMTQ4IiwiMTEwNCIsIjIxMjgiLCIxMTIxIiwiMTA0NCIsIjIwNjgiLCIxMTU0IiwiMTA5NiIsIjExMjMiLCIxMDQ1IiwiMTA0NiIsIjIwNzAiLCIxMDk0IiwiMTEzMSIsIjIxNTUiLCIzMTc5IiwiMTA0OCIsIjEwNDciLCIxMDQ5IiwiOTI3NSIsIjQxNTUiLCI1MTc5IiwiMzEzMSIsIjEwODMiLCIyMTA3IiwiODI1MSIsIjYyMDMiLCI3MjI3IiwiMTEwMyIsIjcxOTQiLCIzMDk4IiwiNjE3MCIsIjIwNzQiLCIxMTMyIiwiMTA3NCIsIjExMTUiLCIxMDUxIiwiMTA2MCIsIjExMjc0IiwiMTYzOTQiLCIxMzMyMiIsIjkyMjYiLCI1MTMwIiwiNzE3OCIsIjEyMjk4IiwiMTc0MTgiLCI0MTA2IiwiMTg0NDIiLCIyMDU4IiwiMTk0NjYiLCI2MTU0IiwiMTUzNzAiLCIxMDI1MCIsIjIwNDkwIiwiMzA4MiIsIjEwMzQiLCIyMTUxNCIsIjE0MzQ2IiwiODIwMiIsIjIwNzciLCIxMDUzIiwiMTExNCIsIjEwNjQiLCIyMTQzIiwiMTA5NyIsIjEwOTIiLCIxMDk4IiwiMTA1NCIsIjExMDUiLCIxMDU1IiwiMTA5MCIsIjExNTIiLCIxMDU4IiwiMTA3MCIsIjEwNTYiLCIyMTE1IiwiMTA5MSIsIjEwNjYiLCIxMTA2IiwiMTE2MCIsIjExNTciLCIxMTQ0IiwiMTEzMCIsInBsYXRmb3JtSUQiLCJlbmNvZGluZ0lEIiwibGFuZ3VhZ2VJRCIsIm5hbWVJRCIsImhmIiwiYmVnaW4iLCJ4QXZnQ2hhcldpZHRoIiwiZnNUeXBlIiwieVN1YnNjcmlwdFhTaXplIiwieVN1YnNjcmlwdFlTaXplIiwieVN1YnNjcmlwdFhPZmZzZXQiLCJ5U3Vic2NyaXB0WU9mZnNldCIsInlTdXBlcnNjcmlwdFhTaXplIiwieVN1cGVyc2NyaXB0WVNpemUiLCJ5U3VwZXJzY3JpcHRYT2Zmc2V0IiwieVN1cGVyc2NyaXB0WU9mZnNldCIsInlTdHJpa2VvdXRTaXplIiwieVN0cmlrZW91dFBvc2l0aW9uIiwic0ZhbWlseUNsYXNzIiwicGFub3NlIiwidWxVbmljb2RlUmFuZ2UxIiwidWxVbmljb2RlUmFuZ2UyIiwidWxVbmljb2RlUmFuZ2UzIiwidWxVbmljb2RlUmFuZ2U0IiwiYWNoVmVuZElEIiwidXNGaXJzdENoYXJJbmRleCIsInVzTGFzdENoYXJJbmRleCIsInNUeXBvQXNjZW5kZXIiLCJzVHlwb0Rlc2NlbmRlciIsInNUeXBvTGluZUdhcCIsInVzV2luQXNjZW50IiwidXNXaW5EZXNjZW50IiwidWxDb2RlUGFnZVJhbmdlMSIsInVsQ29kZVBhZ2VSYW5nZTIiLCJzeEhlaWdodCIsInNDYXBIZWlnaHQiLCJ1c0RlZmF1bHRDaGFyIiwidXNCcmVha0NoYXIiLCJ1c01heENvbnRlbnQiLCJ1bmljb2RlUmFuZ2VzIiwiZ2V0VW5pY29kZVJhbmdlIiwiaXRhbGljQW5nbGUiLCJ1bmRlcmxpbmVQb3NpdGlvbiIsInVuZGVybGluZVRoaWNrbmVzcyIsImlzRml4ZWRQaXRjaCIsIm1pbk1lbVR5cGU0MiIsIm1heE1lbVR5cGU0MiIsIm1pbk1lbVR5cGUxIiwibWF4TWVtVHlwZTEiLCJsZiIsImRlbHRhR2x5cGhJZCIsInN1YnN0aXR1dGUiLCJzZXF1ZW5jZXMiLCJhbHRlcm5hdGVTZXRzIiwibGlnYXR1cmVTZXRzIiwibGlnR2x5cGgiLCJtZiIsInNlcXVlbmNlSW5kZXgiLCJsb29rdXBMaXN0SW5kZXgiLCJydWxlU2V0cyIsImxvb2t1cFJlY29yZHMiLCJjbGFzc1NldHMiLCJjb3ZlcmFnZXMiLCJjaGFpblJ1bGVTZXRzIiwiYmFja3RyYWNrIiwibG9va2FoZWFkIiwiYmFja3RyYWNrQ2xhc3NEZWYiLCJpbnB1dENsYXNzRGVmIiwibG9va2FoZWFkQ2xhc3NEZWYiLCJjaGFpbkNsYXNzU2V0IiwiYmFja3RyYWNrQ292ZXJhZ2UiLCJpbnB1dENvdmVyYWdlIiwibG9va2FoZWFkQ292ZXJhZ2UiLCJzdWJzdGl0dXRlcyIsIm5mIiwic2NyaXB0cyIsImZlYXR1cmVzIiwibG9va3VwcyIsInZhcmlhdGlvbnMiLCJxZiIsImZvbnRUb1RhYmxlIiwiYWR2YW5jZVdpZHRoQXZnIiwicmIiLCJtYXhMZWZ0U2lkZUJlYXJpbmciLCJoYXNDaGFyIiwiZ2V0RW5nbGlzaE5hbWUiLCJ1bmlxdWVJRCIsInByZWZlcnJlZEZhbWlseSIsInByZWZlcnJlZFN1YmZhbWlseSIsImNvbXB1dGVDaGVja1N1bSIsInNlYXJjaFRhZyIsImJpblNlYXJjaCIsImdldFRhYmxlIiwiY3JlYXRlRGVmYXVsdFRhYmxlIiwiZ2V0U2NyaXB0TmFtZXMiLCJnZXREZWZhdWx0U2NyaXB0TmFtZSIsImdldFNjcmlwdFRhYmxlIiwiZ2V0TGFuZ1N5c1RhYmxlIiwiZ2V0RmVhdHVyZVRhYmxlIiwiZ2V0TG9va3VwVGFibGVzIiwiZ2V0R2x5cGhDbGFzcyIsImdldENvdmVyYWdlSW5kZXgiLCJleHBhbmRDb3ZlcmFnZSIsImRlZmF1bHRLZXJuaW5nVGFibGVzIiwiZ2V0S2VybmluZ1RhYmxlcyIsImdldEtlcm5pbmdWYWx1ZSIsInBvc0Zvcm1hdCIsInBhaXJTZXRzIiwic2Vjb25kR2x5cGgiLCJ2YWx1ZTEiLCJjbGFzc0RlZjEiLCJjbGFzc0RlZjIiLCJjbGFzc1JlY29yZHMiLCJnZXRTaW5nbGUiLCJzdWIiLCJieSIsImdldEFsdGVybmF0ZXMiLCJnZXRMaWdhdHVyZXMiLCJhZGRTaW5nbGUiLCJhZGRBbHRlcm5hdGUiLCJhZGRMaWdhdHVyZSIsImdldEZlYXR1cmUiLCJyZiIsInNmIiwidGYiLCJ1ZiIsIndmIiwic3JQZXJpb2QiLCJzclBoYXNlIiwic3JUaHJlc2hvbGQiLCJ0cnVuYyIsIk5FR0FUSVZFX0lORklOSVRZIiwidW50b3VjaCIsIlBPU0lUSVZFX0lORklOSVRZIiwiQWYiLCJhdXRvRmxpcCIsImZ1bmNzIiwiaW5oaWJpdEdyaWRGaXQiLCJzdG9yZSIsImlnbm9yZUN2dCIsIkJmIiwiY2hhclRvR2x5cGgiLCJzdHJpbmdUb0dseXBocyIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibGlnYSIsInJsaWciLCJuYW1lVG9HbHlwaCIsImtlcm5pbmciLCJmb3JFYWNoR2x5cGgiLCJsZXR0ZXJTcGFjaW5nIiwidHJhY2tpbmciLCJnZXRQYXRocyIsImdldEFkdmFuY2VXaWR0aCIsInZhbGlkYXRlIiwidG9UYWJsZXMiLCJ0b0J1ZmZlciIsInJlcXVlc3RGaWxlU3lzdGVtIiwid2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0iLCJURU1QT1JBUlkiLCJyb290IiwiZ2V0RmlsZSIsImNyZWF0ZVdyaXRlciIsInRvVVJMIiwid3JpdGVGaWxlU3luYyIsIklUQUxJQyIsIlVOREVSU0NPUkUiLCJORUdBVElWRSIsIk9VVExJTkVEIiwiU1RSSUtFT1VUIiwiQk9MRCIsIlVTRVJfVFlQT19NRVRSSUNTIiwiV1dTIiwiT0JMSVFVRSIsIlVMVFJBX0NPTkRFTlNFRCIsIkVYVFJBX0NPTkRFTlNFRCIsIkNPTkRFTlNFRCIsIlNFTUlfQ09OREVOU0VEIiwiU0VNSV9FWFBBTkRFRCIsIkVYUEFOREVEIiwiRVhUUkFfRVhQQU5ERUQiLCJVTFRSQV9FWFBBTkRFRCIsIlRISU4iLCJFWFRSQV9MSUdIVCIsIkxJR0hUIiwiTk9STUFMIiwiU0VNSV9CT0xEIiwiRVhUUkFfQk9MRCIsIkJMQUNLIiwiYXhlcyIsImluc3RhbmNlcyIsIm9mZnNldFRvRGF0YSIsIkRmIiwidmFsdWVGb3JtYXQxIiwidmFsdWVGb3JtYXQyIiwidmFsdWUyIiwiY2xhc3MxQ291bnQiLCJjbGFzczJDb3VudCIsIkVmIiwiJGQiLCJfZCIsIkZvbnQiLCJHbHlwaCIsIlBhdGgiLCJCb3VuZGluZ0JveCIsIl9wYXJzZSIsInN0YXR1c1RleHQiLCJsb2FkU3luYyIsInJlYWRGaWxlU3luYyIsImZzIiwicnVuIiwiZnVuIiwidGl0bGUiLCJicm93c2VyIiwiYXJndiIsInZlcnNpb25zIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsInJlbW92ZUFsbExpc3RlbmVycyIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJiaW5kaW5nIiwiY3dkIiwiY2hkaXIiLCJ1bWFzayIsIml0ZXJhYmxlIiwiYXBwZW5kIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImJvZHlVc2VkIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJpc1Byb3RvdHlwZU9mIiwiX2JvZHlCbG9iIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJzZWFyY2hQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJhcnJheUJ1ZmZlciIsIl9ib2R5QXJyYXlCdWZmZXIiLCJoZWFkZXJzIiwidGV4dCIsInJlYWRBc1RleHQiLCJib2R5IiwiY3JlZGVudGlhbHMiLCJ0b1VwcGVyQ2FzZSIsInJlZmVycmVyIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZmV0Y2giLCJpc1ZpZXciLCJkZWxldGUiLCJlbnRyaWVzIiwiY2xvbmUiLCJyZWRpcmVjdCIsIkhlYWRlcnMiLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsIm9udGltZW91dCIsIndpdGhDcmVkZW50aWFscyIsInNldFJlcXVlc3RIZWFkZXIiLCIuL2NvbG9yL2NvbG9yX2NvbnZlcnNpb24iLCIuL2NvbG9yL2NyZWF0aW5nX3JlYWRpbmciLCIuL2NvbG9yL3A1LkNvbG9yIiwiLi9jb2xvci9zZXR0aW5nIiwiLi9jb3JlL2NvbnN0YW50cyIsIi4vY29yZS9lbnZpcm9ubWVudCIsIi4vY29yZS9lcnJvcl9oZWxwZXJzIiwiLi9jb3JlL2hlbHBlcnMiLCIuL2NvcmUvaW5pdCIsIi4vY29yZS9sZWdhY3kiLCIuL2NvcmUvbWFpbiIsIi4vY29yZS9wNS5FbGVtZW50IiwiLi9jb3JlL3A1LkdyYXBoaWNzIiwiLi9jb3JlL3A1LlJlbmRlcmVyIiwiLi9jb3JlL3A1LlJlbmRlcmVyMkQiLCIuL2NvcmUvcmVuZGVyaW5nIiwiLi9jb3JlL3NoYXBlLzJkX3ByaW1pdGl2ZXMiLCIuL2NvcmUvc2hhcGUvYXR0cmlidXRlcyIsIi4vY29yZS9zaGFwZS9jdXJ2ZXMiLCIuL2NvcmUvc2hhcGUvdmVydGV4IiwiLi9jb3JlL3NoaW0iLCIuL2NvcmUvc3RydWN0dXJlIiwiLi9jb3JlL3RyYW5zZm9ybSIsIi4vZGF0YS9wNS5UeXBlZERpY3QiLCIuL2V2ZW50cy9hY2NlbGVyYXRpb24iLCIuL2V2ZW50cy9rZXlib2FyZCIsIi4vZXZlbnRzL21vdXNlIiwiLi9ldmVudHMvdG91Y2giLCIuL2ltYWdlL2ZpbHRlcnMiLCIuL2ltYWdlL2ltYWdlIiwiLi9pbWFnZS9sb2FkaW5nX2Rpc3BsYXlpbmciLCIuL2ltYWdlL3A1LkltYWdlIiwiLi9pbWFnZS9waXhlbHMiLCIuL2lvL2ZpbGVzIiwiLi9pby9wNS5UYWJsZSIsIi4vaW8vcDUuVGFibGVSb3ciLCIuL2lvL3A1LlhNTCIsIi4vbWF0aC9jYWxjdWxhdGlvbiIsIi4vbWF0aC9tYXRoIiwiLi9tYXRoL25vaXNlIiwiLi9tYXRoL3A1LlZlY3RvciIsIi4vbWF0aC9yYW5kb20iLCIuL21hdGgvdHJpZ29ub21ldHJ5IiwiLi90eXBvZ3JhcGh5L2F0dHJpYnV0ZXMiLCIuL3R5cG9ncmFwaHkvbG9hZGluZ19kaXNwbGF5aW5nIiwiLi90eXBvZ3JhcGh5L3A1LkZvbnQiLCIuL3V0aWxpdGllcy9hcnJheV9mdW5jdGlvbnMiLCIuL3V0aWxpdGllcy9jb252ZXJzaW9uIiwiLi91dGlsaXRpZXMvc3RyaW5nX2Z1bmN0aW9ucyIsIi4vdXRpbGl0aWVzL3RpbWVfZGF0ZSIsIi4vd2ViZ2wvM2RfcHJpbWl0aXZlcyIsIi4vd2ViZ2wvaW50ZXJhY3Rpb24iLCIuL3dlYmdsL2xpZ2h0IiwiLi93ZWJnbC9sb2FkaW5nIiwiLi93ZWJnbC9tYXRlcmlhbCIsIi4vd2ViZ2wvcDUuQ2FtZXJhIiwiLi93ZWJnbC9wNS5HZW9tZXRyeSIsIi4vd2ViZ2wvcDUuTWF0cml4IiwiLi93ZWJnbC9wNS5SZW5kZXJlckdMIiwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLkltbWVkaWF0ZSIsIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5SZXRhaW5lZCIsIi4vd2ViZ2wvcDUuU2hhZGVyIiwiLi93ZWJnbC9wNS5UZXh0dXJlIiwiLi93ZWJnbC90ZXh0IiwiQ29sb3JDb252ZXJzaW9uIiwiX2hzYmFUb0hTTEEiLCJfaHNiYVRvUkdCQSIsIl9oc2xhVG9IU0JBIiwiX2hzbGFUb1JHQkEiLCJfcmdiYVRvSFNCQSIsIl9yZ2JhVG9IU0xBIiwiLi4vY29yZS9tYWluIiwiYWxwaGEiLCJfdmFsaWRhdGVQYXJhbWV0ZXJzIiwiY29sb3IiLCJfZ2V0QWxwaGEiLCJibHVlIiwiX2dldEJsdWUiLCJicmlnaHRuZXNzIiwiX2dldEJyaWdodG5lc3MiLCJDb2xvciIsImdyZWVuIiwiX2dldEdyZWVuIiwiaHVlIiwiX2dldEh1ZSIsImxlcnBDb2xvciIsIl9jb2xvck1vZGUiLCJfY29sb3JNYXhlcyIsIlJHQiIsImxldmVscyIsIkhTQiIsImhzYmEiLCJIU0wiLCJfZ2V0TGlnaHRuZXNzIiwiaHNsYSIsImxlcnAiLCJsaWdodG5lc3MiLCJyZWQiLCJfZ2V0UmVkIiwic2F0dXJhdGlvbiIsIl9nZXRTYXR1cmF0aW9uIiwiLi4vY29yZS9jb25zdGFudHMiLCIuLi9jb3JlL2Vycm9yX2hlbHBlcnMiLCIuL3A1LkNvbG9yIiwiX3N0b3JlTW9kZUFuZE1heGVzIiwiX2FycmF5IiwiX3BhcnNlSW5wdXRzIiwiX2NhbGN1bGF0ZUxldmVscyIsInRvUHJlY2lzaW9uIiwibWF4ZXMiLCJzZXRSZWQiLCJzZXRHcmVlbiIsInNldEJsdWUiLCJzZXRBbHBoYSIsIl9nZXRNb2RlIiwiX2dldE1heGVzIiwiYWxpY2VibHVlIiwiYW50aXF1ZXdoaXRlIiwiYXF1YSIsImFxdWFtYXJpbmUiLCJhenVyZSIsImJlaWdlIiwiYmlzcXVlIiwiYmxhY2siLCJibGFuY2hlZGFsbW9uZCIsImJsdWV2aW9sZXQiLCJidXJseXdvb2QiLCJjYWRldGJsdWUiLCJjaGFydHJldXNlIiwiY2hvY29sYXRlIiwiY29yYWwiLCJjb3JuZmxvd2VyYmx1ZSIsImNvcm5zaWxrIiwiY3JpbXNvbiIsImN5YW4iLCJkYXJrYmx1ZSIsImRhcmtjeWFuIiwiZGFya2dvbGRlbnJvZCIsImRhcmtncmF5IiwiZGFya2dyZWVuIiwiZGFya2dyZXkiLCJkYXJra2hha2kiLCJkYXJrbWFnZW50YSIsImRhcmtvbGl2ZWdyZWVuIiwiZGFya29yYW5nZSIsImRhcmtvcmNoaWQiLCJkYXJrcmVkIiwiZGFya3NhbG1vbiIsImRhcmtzZWFncmVlbiIsImRhcmtzbGF0ZWJsdWUiLCJkYXJrc2xhdGVncmF5IiwiZGFya3NsYXRlZ3JleSIsImRhcmt0dXJxdW9pc2UiLCJkYXJrdmlvbGV0IiwiZGVlcHBpbmsiLCJkZWVwc2t5Ymx1ZSIsImRpbWdyYXkiLCJkaW1ncmV5IiwiZG9kZ2VyYmx1ZSIsImZpcmVicmljayIsImZsb3JhbHdoaXRlIiwiZm9yZXN0Z3JlZW4iLCJmdWNoc2lhIiwiZ2FpbnNib3JvIiwiZ2hvc3R3aGl0ZSIsImdvbGQiLCJnb2xkZW5yb2QiLCJncmF5IiwiZ3JlZW55ZWxsb3ciLCJncmV5IiwiaG9uZXlkZXciLCJob3RwaW5rIiwiaW5kaWFucmVkIiwiaW5kaWdvIiwiaXZvcnkiLCJraGFraSIsImxhdmVuZGVyIiwibGF2ZW5kZXJibHVzaCIsImxhd25ncmVlbiIsImxlbW9uY2hpZmZvbiIsImxpZ2h0Ymx1ZSIsImxpZ2h0Y29yYWwiLCJsaWdodGN5YW4iLCJsaWdodGdvbGRlbnJvZHllbGxvdyIsImxpZ2h0Z3JheSIsImxpZ2h0Z3JlZW4iLCJsaWdodGdyZXkiLCJsaWdodHBpbmsiLCJsaWdodHNhbG1vbiIsImxpZ2h0c2VhZ3JlZW4iLCJsaWdodHNreWJsdWUiLCJsaWdodHNsYXRlZ3JheSIsImxpZ2h0c2xhdGVncmV5IiwibGlnaHRzdGVlbGJsdWUiLCJsaWdodHllbGxvdyIsImxpbWUiLCJsaW1lZ3JlZW4iLCJsaW5lbiIsIm1hZ2VudGEiLCJtYXJvb24iLCJtZWRpdW1hcXVhbWFyaW5lIiwibWVkaXVtYmx1ZSIsIm1lZGl1bW9yY2hpZCIsIm1lZGl1bXB1cnBsZSIsIm1lZGl1bXNlYWdyZWVuIiwibWVkaXVtc2xhdGVibHVlIiwibWVkaXVtc3ByaW5nZ3JlZW4iLCJtZWRpdW10dXJxdW9pc2UiLCJtZWRpdW12aW9sZXRyZWQiLCJtaWRuaWdodGJsdWUiLCJtaW50Y3JlYW0iLCJtaXN0eXJvc2UiLCJtb2NjYXNpbiIsIm5hdmFqb3doaXRlIiwibmF2eSIsIm9sZGxhY2UiLCJvbGl2ZSIsIm9saXZlZHJhYiIsIm9yYW5nZSIsIm9yYW5nZXJlZCIsIm9yY2hpZCIsInBhbGVnb2xkZW5yb2QiLCJwYWxlZ3JlZW4iLCJwYWxldHVycXVvaXNlIiwicGFsZXZpb2xldHJlZCIsInBhcGF5YXdoaXAiLCJwZWFjaHB1ZmYiLCJwZXJ1IiwicGx1bSIsInBvd2RlcmJsdWUiLCJwdXJwbGUiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZXNtb2tlIiwieWVsbG93IiwieWVsbG93Z3JlZW4iLCJSZWdFeHAiLCJIRVgzIiwiSEVYNCIsIkhFWDYiLCJIRVg4IiwiUkdCX1BFUkNFTlQiLCJSR0JBIiwiUkdCQV9QRVJDRU5UIiwiSFNMQSIsIkhTQkEiLCIuL2NvbG9yX2NvbnZlcnNpb24iLCJiYWNrZ3JvdW5kIiwiSW1hZ2UiLCJpbWFnZSIsIl9yZW5kZXJlciIsImNvbG9yTW9kZSIsIl9zZXRQcm9wZXJ0eSIsIm5vRmlsbCIsIm5vU3Ryb2tlIiwiUDJEIiwiV0VCR0wiLCJBUlJPVyIsIkNST1NTIiwiSEFORCIsIk1PVkUiLCJURVhUIiwiV0FJVCIsIkhBTEZfUEkiLCJRVUFSVEVSX1BJIiwiVEFVIiwiVFdPX1BJIiwiREVHUkVFUyIsIlJBRElBTlMiLCJERUdfVE9fUkFEIiwiUkFEX1RPX0RFRyIsIkNPUk5FUiIsIkNPUk5FUlMiLCJSQURJVVMiLCJSSUdIVCIsIkxFRlQiLCJDRU5URVIiLCJUT1AiLCJCT1RUT00iLCJCQVNFTElORSIsIlBPSU5UUyIsIkxJTkVTIiwiTElORV9TVFJJUCIsIkxJTkVfTE9PUCIsIlRSSUFOR0xFUyIsIlRSSUFOR0xFX0ZBTiIsIlRSSUFOR0xFX1NUUklQIiwiUVVBRFMiLCJRVUFEX1NUUklQIiwiQ0xPU0UiLCJPUEVOIiwiQ0hPUkQiLCJQSUUiLCJQUk9KRUNUIiwiU1FVQVJFIiwiUk9VTkQiLCJCRVZFTCIsIk1JVEVSIiwiQVVUTyIsIkFMVCIsIkJBQ0tTUEFDRSIsIkNPTlRST0wiLCJERUxFVEUiLCJET1dOX0FSUk9XIiwiRU5URVIiLCJFU0NBUEUiLCJMRUZUX0FSUk9XIiwiT1BUSU9OIiwiUkVUVVJOIiwiUklHSFRfQVJST1ciLCJTSElGVCIsIlRBQiIsIlVQX0FSUk9XIiwiQkxFTkQiLCJBREQiLCJEQVJLRVNUIiwiTElHSFRFU1QiLCJESUZGRVJFTkNFIiwiRVhDTFVTSU9OIiwiTVVMVElQTFkiLCJTQ1JFRU4iLCJSRVBMQUNFIiwiT1ZFUkxBWSIsIkhBUkRfTElHSFQiLCJTT0ZUX0xJR0hUIiwiRE9ER0UiLCJCVVJOIiwiVEhSRVNIT0xEIiwiR1JBWSIsIk9QQVFVRSIsIklOVkVSVCIsIlBPU1RFUklaRSIsIkRJTEFURSIsIkVST0RFIiwiQkxVUiIsIl9ERUZBVUxUX1RFWFRfRklMTCIsIl9ERUZBVUxUX0xFQURNVUxUIiwiX0NUWF9NSURETEUiLCJMSU5FQVIiLCJRVUFEUkFUSUMiLCJCRVpJRVIiLCJDVVJWRSIsIlNUUk9LRSIsIkZJTEwiLCJURVhUVVJFIiwiSU1NRURJQVRFIiwiTkVBUkVTVCIsIlJFUEVBVCIsIkNMQU1QIiwiTUlSUk9SIiwiTEFORFNDQVBFIiwiUE9SVFJBSVQiLCJfREVGQVVMVF9TVFJPS0UiLCJfREVGQVVMVF9GSUxMIiwiR1JJRCIsIkFYRVMiLCJpbm5lcldpZHRoIiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50V2lkdGgiLCJpbm5lckhlaWdodCIsImNsaWVudEhlaWdodCIsIl9mcmFtZVJhdGUiLCJfbGFzdEZyYW1lVGltZSIsInBlcmZvcm1hbmNlIiwiX3RhcmdldEZyYW1lUmF0ZSIsInByaW50IiwiZnJhbWVDb3VudCIsImZvY3VzZWQiLCJoYXNGb2N1cyIsImN1cnNvciIsIl9jdXJFbGVtZW50IiwiZWx0Iiwic3R5bGUiLCJmcmFtZVJhdGUiLCJfcnVuRnJhbWVzIiwiZ2V0RnJhbWVSYXRlIiwic2V0RnJhbWVSYXRlIiwibm9DdXJzb3IiLCJkaXNwbGF5V2lkdGgiLCJzY3JlZW4iLCJkaXNwbGF5SGVpZ2h0Iiwid2luZG93V2lkdGgiLCJ3aW5kb3dIZWlnaHQiLCJfb25yZXNpemUiLCJfaXNHbG9iYWwiLCJ3aW5kb3dSZXNpemVkIiwicHJldmVudERlZmF1bHQiLCJmdWxsc2NyZWVuIiwiZnVsbHNjcmVlbkVsZW1lbnQiLCJ3ZWJraXRGdWxsc2NyZWVuRWxlbWVudCIsIm1vekZ1bGxTY3JlZW5FbGVtZW50IiwibXNGdWxsc2NyZWVuRWxlbWVudCIsImZ1bGxzY3JlZW5FbmFibGVkIiwid2Via2l0RnVsbHNjcmVlbkVuYWJsZWQiLCJtb3pGdWxsU2NyZWVuRW5hYmxlZCIsIm1zRnVsbHNjcmVlbkVuYWJsZWQiLCJyZXF1ZXN0RnVsbHNjcmVlbiIsIm1velJlcXVlc3RGdWxsU2NyZWVuIiwid2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4iLCJtc1JlcXVlc3RGdWxsc2NyZWVuIiwiZXhpdEZ1bGxzY3JlZW4iLCJtb3pDYW5jZWxGdWxsU2NyZWVuIiwid2Via2l0RXhpdEZ1bGxzY3JlZW4iLCJtc0V4aXRGdWxsc2NyZWVuIiwicGl4ZWxEZW5zaXR5IiwiX3BpeGVsRGVuc2l0eSIsIl9waXhlbHNEaXJ0eSIsInJlc2l6ZUNhbnZhcyIsImRpc3BsYXlEZW5zaXR5IiwiZGV2aWNlUGl4ZWxSYXRpbyIsImdldFVSTCIsImdldFVSTFBhdGgiLCJwYXRobmFtZSIsImdldFVSTFBhcmFtcyIsImxhc3RJbmRleCIsIi4vY29uc3RhbnRzIiwiLi9tYWluIiwiX2ZyaWVuZGx5RmlsZUxvYWRFcnJvciIsInNvbWUiLCJfaGVscEZvck1pc3VzZWRBdFRvcExldmVsQ29kZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCIuLi8uLi9kb2NzL3JlZmVyZW5jZS9kYXRhLmpzb24iLCJtb2RlQWRqdXN0IiwibW9jaGEiLCJzZXR1cCIsImluc3RhbmNlIiwiZXhpdCIsInB1c2hTdHlsZSIsInBvcFN0eWxlIiwiX3NldHVwRG9uZSIsIl91c2VyTm9kZSIsIl9lbGVtZW50cyIsIl9yZXF1ZXN0QW5pbUlkIiwiX3ByZWxvYWRDb3VudCIsIl9pbml0aWFsaXplSW5zdGFuY2VWYXJpYWJsZXMiLCJfZGVmYXVsdENhbnZhc1NpemUiLCJtb3VzZW1vdmUiLCJtb3VzZWRvd24iLCJtb3VzZXVwIiwiZHJhZ2VuZCIsImRyYWdvdmVyIiwiY2xpY2siLCJkYmxjbGljayIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0Iiwia2V5ZG93biIsImtleXVwIiwia2V5cHJlc3MiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIiwidG91Y2hlbmQiLCJyZXNpemUiLCJibHVyIiwid2hlZWwiLCJfbG9hZGluZ1NjcmVlbklkIiwiX3JlZ2lzdGVyZWRNZXRob2RzIiwiRGV2aWNlT3JpZW50YXRpb25FdmVudCIsImRldmljZW9yaWVudGF0aW9uIiwiRGV2aWNlTW90aW9uRXZlbnQiLCJfaXNOb2RlV2Via2l0IiwiZGV2aWNlbW90aW9uIiwicHJlbG9hZCIsImlubmVySFRNTCIsIl9wcmVsb2FkTWV0aG9kcyIsIl93cmFwUHJlbG9hZCIsIl9yZWdpc3RlcmVkUHJlbG9hZE1ldGhvZHMiLCJfcnVuSWZQcmVsb2Fkc0FyZURvbmUiLCJfc2V0dXAiLCJfZHJhdyIsInBhcmVudE5vZGUiLCJfZGVjcmVtZW50UHJlbG9hZCIsIl9pbmNyZW1lbnRQcmVsb2FkIiwiY3JlYXRlQ2FudmFzIiwiZGF0YXNldCIsImhpZGRlbiIsInZpc2liaWxpdHkiLCJyZWRyYXciLCJfdXBkYXRlTW91c2VDb29yZHMiLCJjbGVhckludGVydmFsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJfY3JlYXRlRnJpZW5kbHlHbG9iYWxGdW5jdGlvbkJpbmRlciIsInBhc3NpdmUiLCJyZWdpc3Rlck1ldGhvZCIsIl9zdHlsZXMiLCJfYmV6aWVyRGV0YWlsIiwiX2N1cnZlRGV0YWlsIiwicmdiIiwiaHNiIiwiaHNsIiwiZGlzYWJsZUZyaWVuZGx5RXJyb3JzIiwibG9hZEpTT04iLCJsb2FkSW1hZ2UiLCJsb2FkU3RyaW5ncyIsImxvYWRYTUwiLCJsb2FkQnl0ZXMiLCJsb2FkVGFibGUiLCJsb2FkRm9udCIsImxvYWRNb2RlbCIsImxvYWRTaGFkZXIiLCJwcmUiLCJyZWdpc3RlclByZWxvYWRNZXRob2QiLCJnbG9iYWxPYmplY3QiLCIuL3NoaW0iLCJFbGVtZW50IiwiX3BJbnN0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJjbGFzcyIsIm1vdXNlUHJlc3NlZCIsIl9zZXRNb3VzZUJ1dHRvbiIsImRvdWJsZUNsaWNrZWQiLCJtb3VzZVdoZWVsIiwibW91c2VSZWxlYXNlZCIsIm1vdXNlQ2xpY2tlZCIsIm1vdXNlTW92ZWQiLCJtb3VzZU92ZXIiLCJjaGFuZ2VkIiwibW91c2VPdXQiLCJ0b3VjaFN0YXJ0ZWQiLCJ0b3VjaE1vdmVkIiwidG91Y2hFbmRlZCIsImRyYWdPdmVyIiwiZHJhZ0xlYXZlIiwiZHJvcCIsIkZpbGUiLCJ0YXJnZXQiLCJGaWxlTGlzdCIsInN0b3BQcm9wYWdhdGlvbiIsImRhdGFUcmFuc2ZlciIsImZpbGVzIiwiR3JhcGhpY3MiLCJjYW52YXMiLCJSZW5kZXJlckdMIiwiUmVuZGVyZXIyRCIsIl9hcHBseURlZmF1bHRzIiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0TGVmdCIsIm9mZnNldFRvcCIsIlJlbmRlcmVyIiwiX2lzTWFpbkNhbnZhcyIsImRpc3BsYXkiLCJfdGV4dFNpemUiLCJfdGV4dExlYWRpbmciLCJfdGV4dEZvbnQiLCJfdGV4dFN0eWxlIiwiX3RleHRBc2NlbnQiLCJfdGV4dERlc2NlbnQiLCJfdGV4dEFsaWduIiwiX3RleHRCYXNlbGluZSIsIl9yZWN0TW9kZSIsIl9lbGxpcHNlTW9kZSIsIl9jdXJ2ZVRpZ2h0bmVzcyIsIl9pbWFnZU1vZGUiLCJfdGludCIsIl9kb1N0cm9rZSIsIl9kb0ZpbGwiLCJfc3Ryb2tlU2V0IiwiX2ZpbGxTZXQiLCJwcm9wZXJ0aWVzIiwidGV4dExlYWRpbmciLCJ0ZXh0U2l6ZSIsIl9hcHBseVRleHRQcm9wZXJ0aWVzIiwidGV4dFN0eWxlIiwidGV4dEFzY2VudCIsIl91cGRhdGVUZXh0TWV0cmljcyIsInRleHREZXNjZW50IiwidGV4dEFsaWduIiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwiTUFYX1ZBTFVFIiwidGV4dFdpZHRoIiwiX3JlbmRlclRleHQiLCJfaXNPcGVuVHlwZSIsImZvbnRTaXplIiwib3ZlcmZsb3ciLCJ2ZXJ0aWNhbEFsaWduIiwiZHJhd2luZ0NvbnRleHQiLCJfY2FjaGVkRmlsbFN0eWxlIiwiX2NhY2hlZFN0cm9rZVN0eWxlIiwiX3NldEZpbGwiLCJfc2V0U3Ryb2tlIiwibGluZUNhcCIsInNjYWxlIiwic2F2ZSIsInJlc2V0TWF0cml4IiwiX2dldEZpbGwiLCJmaWxsUmVjdCIsInJlc3RvcmUiLCJjbGVhclJlY3QiLCJNZWRpYUVsZW1lbnQiLCJsb2FkUGl4ZWxzIiwiX2dldFRpbnRlZEltYWdlQ2FudmFzIiwiZHJhd0ltYWdlIiwiX3RvUGl4ZWxzIiwiY3JlYXRlSW1hZ2VEYXRhIiwicHV0SW1hZ2VEYXRhIiwiYmxlbmRNb2RlIiwiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIiwiYmxlbmQiLCJfY29weUhlbHBlciIsImdldEltYWdlRGF0YSIsInBpeGVscyIsInNldFRyYW5zZm9ybSIsImltYWdlRGF0YSIsInVwZGF0ZVBpeGVscyIsIl9hY3V0ZUFyY1RvQmV6aWVyIiwiYXkiLCJjeSIsImVsbGlwc2UiLCJfZ2V0U3Ryb2tlIiwidHJhbnNsYXRlIiwicXVhZCIsInJlY3QiLCJhcmNUbyIsInRyaWFuZ2xlIiwiZW5kU2hhcGUiLCJQT0xZR09OIiwiX2RvRmlsbFN0cm9rZUNsb3NlIiwiaXNWZXJ0Iiwibm9TbW9vdGgiLCJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCJzbW9vdGgiLCJzdHJva2VDYXAiLCJzdHJva2VKb2luIiwibGluZUpvaW4iLCJzdHJva2VXZWlnaHQiLCJiZXppZXIiLCJiZWdpblNoYXBlIiwidmVydGV4IiwiYmV6aWVyVmVydGV4IiwiY3VydmVWZXJ0ZXgiLCJhcHBseU1hdHJpeCIsInRyYW5zZm9ybSIsInJvdGF0ZSIsInNoZWFyWCIsInNoZWFyWSIsIlZlY3RvciIsInRleHRCYXNlbGluZSIsIl9yZW5kZXJQYXRoIiwicmVuZGVyZXIiLCJzdHJva2VUZXh0IiwiZmlsbFRleHQiLCJfdGV4dFdpZHRoIiwibWVhc3VyZVRleHQiLCIuLi9pbWFnZS9maWx0ZXJzIiwiLi9wNS5SZW5kZXJlciIsImNsYXNzTGlzdCIsIl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkIiwibm9DYW52YXMiLCJjcmVhdGVHcmFwaGljcyIsIi4uL3dlYmdsL3A1LlJlbmRlcmVyR0wiLCIuL3A1LkdyYXBoaWNzIiwiLi9wNS5SZW5kZXJlcjJEIiwiX3RvUmFkaWFucyIsImF0YW4iLCIuLi9jb25zdGFudHMiLCIuLi9lcnJvcl9oZWxwZXJzIiwiLi4vaGVscGVycyIsIi4uL21haW4iLCJlbGxpcHNlTW9kZSIsInJlY3RNb2RlIiwiYmV6aWVyRGV0YWlsIiwiYmV6aWVyUG9pbnQiLCJiZXppZXJUYW5nZW50IiwiY3VydmVEZXRhaWwiLCJjdXJ2ZVRpZ2h0bmVzcyIsImN1cnZlUG9pbnQiLCJjdXJ2ZVRhbmdlbnQiLCJiZWdpbkNvbnRvdXIiLCJpc1AzRCIsImVuZENvbnRvdXIiLCJxdWFkcmF0aWNWZXJ0ZXgiLCJfY29udG91ckluaXRlZCIsIngzIiwieTMiLCJfY29udG91clZlcnRpY2VzIiwid2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwibW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwib1JlcXVlc3RBbmltYXRpb25GcmFtZSIsIm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJub0xvb3AiLCJwcm9wcyIsIl91cGRhdGUiLCJwb3BNYXRyaXgiLCJwcmludE1hdHJpeCIsInB1c2hNYXRyaXgiLCJyb3RhdGVYIiwiX2Fzc2VydDNkIiwicm90YXRlWSIsInJvdGF0ZVoiLCJjcmVhdGVTdHJpbmdEaWN0IiwiU3RyaW5nRGljdCIsImNyZWF0ZU51bWJlckRpY3QiLCJOdW1iZXJEaWN0IiwiVHlwZWREaWN0IiwiaGFzS2V5IiwiX3ZhbGlkYXRlIiwiX2FkZE9iaiIsInNhdmVUYWJsZSIsImRvd25sb2FkRmlsZSIsInNhdmVKU09OIiwiZGl2IiwiX3ZhbHVlVGVzdCIsIl9rZXlUZXN0IiwibWluS2V5IiwibWF4S2V5IiwiZGV2aWNlT3JpZW50YXRpb24iLCJhY2NlbGVyYXRpb25YIiwiYWNjZWxlcmF0aW9uWSIsImFjY2VsZXJhdGlvbloiLCJwQWNjZWxlcmF0aW9uWCIsInBBY2NlbGVyYXRpb25ZIiwicEFjY2VsZXJhdGlvbloiLCJfdXBkYXRlUEFjY2VsZXJhdGlvbnMiLCJyb3RhdGlvblgiLCJyb3RhdGlvblkiLCJyb3RhdGlvbloiLCJwUm90YXRpb25YIiwicFJvdGF0aW9uWSIsInBSb3RhdGlvbloiLCJfdXBkYXRlUFJvdGF0aW9ucyIsInR1cm5BeGlzIiwic2V0TW92ZVRocmVzaG9sZCIsInNldFNoYWtlVGhyZXNob2xkIiwiX29uZGV2aWNlb3JpZW50YXRpb24iLCJiZXRhIiwiZ2FtbWEiLCJfaGFuZGxlTW90aW9uIiwiX29uZGV2aWNlbW90aW9uIiwiYWNjZWxlcmF0aW9uIiwib3JpZW50YXRpb24iLCJkZXZpY2VNb3ZlZCIsImRldmljZVR1cm5lZCIsImRldmljZVNoYWtlbiIsImlzS2V5UHJlc3NlZCIsImtleUlzUHJlc3NlZCIsImtleUNvZGUiLCJfb25rZXlkb3duIiwid2hpY2giLCJrZXlQcmVzc2VkIiwiY2hhckNvZGUiLCJfb25rZXl1cCIsImtleVJlbGVhc2VkIiwiX29ua2V5cHJlc3MiLCJfbGFzdEtleUNvZGVUeXBlZCIsImtleVR5cGVkIiwiX29uYmx1ciIsImtleUlzRG93biIsIl9oYXNNb3VzZUludGVyYWN0ZWQiLCJtb3VzZVgiLCJtb3VzZVkiLCJwbW91c2VYIiwicG1vdXNlWSIsIndpbk1vdXNlWCIsIndpbk1vdXNlWSIsInB3aW5Nb3VzZVgiLCJwd2luTW91c2VZIiwibW91c2VCdXR0b24iLCJtb3VzZUlzUHJlc3NlZCIsIl91cGRhdGVOZXh0TW91c2VDb29yZHMiLCJ0b3VjaGVzIiwiY2xpZW50WCIsImNoYW5nZWRUb3VjaGVzIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwic2Nyb2xsV2lkdGgiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRZIiwidG9wIiwid2luWCIsIndpblkiLCJpZGVudGlmaWVyIiwiX21vdXNlV2hlZWxEZWx0YVkiLCJidXR0b24iLCJfb25tb3VzZW1vdmUiLCJtb3VzZURyYWdnZWQiLCJfb25tb3VzZWRvd24iLCJfb25tb3VzZXVwIiwiX29uZHJhZ2VuZCIsIl9vbmRyYWdvdmVyIiwiX29uY2xpY2siLCJfb25kYmxjbGljayIsIl9wbW91c2VXaGVlbERlbHRhWSIsIl9vbndoZWVsIiwiZGVsdGFZIiwiX3VwZGF0ZVRvdWNoQ29vcmRzIiwiX29udG91Y2hzdGFydCIsIl9vbnRvdWNobW92ZSIsIl9vbnRvdWNoZW5kIiwiSW50MzJBcnJheSIsIl9nZXRBUkdCIiwiX3NldFBpeGVscyIsIkltYWdlRGF0YSIsIl90b0ltYWdlRGF0YSIsIl9jcmVhdGVJbWFnZURhdGEiLCJfdG1wQ2FudmFzIiwiX3RtcEN0eCIsIm9wYXF1ZSIsImludmVydCIsInBvc3Rlcml6ZSIsImRpbGF0ZSIsImVyb2RlIiwiY3JlYXRlSW1hZ2UiLCJzYXZlQ2FudmFzIiwiSFRNTENhbnZhc0VsZW1lbnQiLCJfY2hlY2tGaWxlRXh0ZW5zaW9uIiwidG9CbG9iIiwic2F2ZUZyYW1lcyIsImNvbnN0cmFpbiIsIl9tYWtlRnJhbWUiLCJzZXRJbnRlcnZhbCIsImZpbGVuYW1lIiwiZXh0IiwidG9EYXRhVVJMIiwiY3Jvc3NPcmlnaW4iLCJ2aWRlb1dpZHRoIiwidmlkZW9IZWlnaHQiLCJ0aW50Iiwibm9UaW50IiwiaW1hZ2VNb2RlIiwiLi4vY29yZS9oZWxwZXJzIiwiLi9maWx0ZXJzIiwiX21vZGlmaWVkIiwic2V0TW9kaWZpZWQiLCJtYXNrIiwiaXNNb2RpZmllZCIsIi4uL2NvbG9yL3A1LkNvbG9yIiwiaHR0cERvIiwibGFzdEluZGV4T2YiLCJjdXJyZW50U3RhdGUiLCJ0b2tlbiIsImVzY2FwZWQiLCJjb2x1bW5zIiwiVGFibGVSb3ciLCJvYmoiLCJhZGRSb3ciLCJieXRlcyIsImh0dHBHZXQiLCJodHRwUG9zdCIsIkNvbnRlbnQtVHlwZSIsIlhNTCIsImNoaWxkTm9kZXMiLCJhZGRDaGlsZCIsInNldE5hbWUiLCJub2RlTmFtZSIsIl9zZXRDb250IiwidGV4dENvbnRlbnQiLCJfc2V0QXR0cmlidXRlcyIsImNoaWxkcmVuIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiX3BXcml0ZXJzIiwiUHJpbnRXcml0ZXIiLCJtaWxsaXMiLCJ3cml0ZUZpbGUiLCJzYXZlU3RyaW5ncyIsIlNvdW5kRmlsZSIsInNhdmVTb3VuZCIsInNhdmVKU09OT2JqZWN0Iiwic2F2ZUpTT05BcnJheSIsInJvd3MiLCJnZXRTdHJpbmciLCJfaXNTYWZhcmkiLCJvbmNsaWNrIiwiYWxlcnQiLCJlczYtcHJvbWlzZSIsImZldGNoLWpzb25wIiwiZmlsZS1zYXZlciIsIndoYXR3Zy1mZXRjaCIsInJlbW92ZVJvdyIsImdldFJvdyIsImdldFJvd3MiLCJmaW5kUm93IiwiZmluZFJvd3MiLCJtYXRjaFJvdyIsIm1hdGNoUm93cyIsImdldENvbHVtbiIsImNsZWFyUm93cyIsImFkZENvbHVtbiIsImdldENvbHVtbkNvdW50IiwiZ2V0Um93Q291bnQiLCJyZW1vdmVUb2tlbnMiLCJyZW1vdmVDb2x1bW4iLCJzZXROdW0iLCJzZXRTdHJpbmciLCJnZXROdW0iLCJnZXRPYmplY3QiLCJnZXRBcnJheSIsImF0dHJpYnV0ZXMiLCJnZXRQYXJlbnQiLCJnZXROYW1lIiwiaGFzQ2hpbGRyZW4iLCJsaXN0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbiIsImdldENoaWxkIiwiZ2V0QXR0cmlidXRlQ291bnQiLCJsaXN0QXR0cmlidXRlcyIsImhhc0F0dHJpYnV0ZSIsImdldENvbnRlbnQiLCJzZXRDb250ZW50Iiwibm9kZVZhbHVlIiwiaHlwb3QiLCJtYWciLCJub3JtIiwic3EiLCJjcmVhdGVWZWN0b3IiLCJub2lzZURldGFpbCIsIm5vaXNlU2VlZCIsInNldFNlZWQiLCJnZXRTZWVkIiwicDUiLCJtYWdTcSIsImNyb3NzIiwibm9ybWFsaXplIiwibGltaXQiLCJzZXRNYWciLCJoZWFkaW5nIiwiYXRhbjIiLCJfZnJvbVJhZGlhbnMiLCJhbmdsZUJldHdlZW4iLCJhY29zIiwiZnJvbUFuZ2xlIiwiZnJvbUFuZ2xlcyIsInJhbmRvbTJEIiwicmFuZG9tM0QiLCJyYW5kb21TZWVkIiwicmFuZG9tR2F1c3NpYW4iLCJfYW5nbGVNb2RlIiwiYXNpbiIsImRlZ3JlZXMiLCJyYWRpYW5zIiwiYW5nbGVNb2RlIiwiX3RvRGVncmVlcyIsInRleHRGb250Iiwib3BlbnR5cGUuanMiLCJzYW1wbGVGYWN0b3IiLCJzaW1wbGlmeVRocmVzaG9sZCIsInRtcFBvaW50MSIsInRtcFBvaW50MiIsInF4IiwicXkiLCJjYWNoZSIsInRleHRCb3VuZHMiLCJhZHZhbmNlIiwiX2hhbmRsZUFsaWdubWVudCIsInRleHRUb1BvaW50cyIsIl9nZXRHbHlwaHMiLCJfZ2V0UGF0aCIsIl9nZXRQYXRoRGF0YSIsImRlY2ltYWxzIiwiX2dldFNWRyIsImFycmF5Q29weSIsInNob3J0ZW4iLCJzaHVmZmxlIiwic3Vic2V0IiwiZmxvYXQiLCJpbnQiLCJzdHIiLCJib29sZWFuIiwiY2hhciIsInVuY2hhciIsImhleCIsInVuaGV4IiwibWF0Y2hBbGwiLCJuZmMiLCJuZnAiLCJuZnMiLCJzcGxpdFRva2VucyIsImRheSIsImdldERhdGUiLCJob3VyIiwiZ2V0SG91cnMiLCJtaW51dGUiLCJnZXRNaW51dGVzIiwibW9udGgiLCJnZXRNb250aCIsInNlY29uZCIsImdldFNlY29uZHMiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJwbGFuZSIsImdlb21ldHJ5SW5IYXNoIiwiR2VvbWV0cnkiLCJkZXRhaWxZIiwiZGV0YWlsWCIsInZlcnRpY2VzIiwidXZzIiwiY29tcHV0ZUZhY2VzIiwiY29tcHV0ZU5vcm1hbHMiLCJfbWFrZVRyaWFuZ2xlRWRnZXMiLCJfZWRnZXNUb1ZlcnRpY2VzIiwiZHJhd0J1ZmZlcnNTY2FsZWQiLCJib3giLCJwZXJQaXhlbExpZ2h0aW5nIiwic3Ryb2tlSW5kaWNlcyIsImZhY2VzIiwic3BoZXJlIiwiZWxsaXBzb2lkIiwidmVydGV4Tm9ybWFscyIsImN5bGluZGVyIiwiY29uZSIsInRvcnVzIiwiX3VzZVBvaW50U2hhZGVyIiwiY3VyUG9pbnRTaGFkZXIiLCJiaW5kU2hhZGVyIiwiX2RyYXdQb2ludHMiLCJfcG9pbnRWZXJ0ZXhCdWZmZXIiLCJ1bmJpbmRTaGFkZXIiLCJ1TVZNYXRyaXgiLCJNYXRyaXgiLCJkcmF3QnVmZmVycyIsImltbWVkaWF0ZU1vZGUiLCJfYmV6aWVyVmVydGV4IiwiX2xvb2tVcFRhYmxlQmV6aWVyIiwiX2x1dEJlemllckRldGFpbCIsIl9iZXppZXJDb2VmZmljaWVudHMiLCJpc0JlemllciIsIl9xdWFkcmF0aWNWZXJ0ZXgiLCJfbG9va1VwVGFibGVRdWFkcmF0aWMiLCJfbHV0UXVhZHJhdGljRGV0YWlsIiwiX3F1YWRyYXRpY0NvZWZmaWNpZW50cyIsImlzUXVhZHJhdGljIiwiX2N1cnZlVmVydGV4IiwiaXNDdXJ2ZSIsIl9iZXppZXJUb0NhdG11bGwiLCIuL3A1Lkdlb21ldHJ5Iiwib3JiaXRDb250cm9sIiwiX2N1ckNhbWVyYSIsImNvbnRleHRNZW51RGlzYWJsZWQiLCJvbmNvbnRleHRtZW51Iiwid2hlZWxEZWZhdWx0RGlzYWJsZWQiLCJvbndoZWVsIiwiX29yYml0IiwiX2dldExvY2FsQXhlcyIsImV5ZVgiLCJleWVZIiwiZXllWiIsImRlYnVnTW9kZSIsIl9ncmlkIiwiX2F4ZXNJY29uIiwibm9EZWJ1Z01vZGUiLCJjdXJTdHJva2VDb2xvciIsImNhbWVyYU1hdHJpeCIsIm1hdDQiLCJhbWJpZW50TGlnaHQiLCJfdXNlTGlnaHRTaGFkZXIiLCJzZXRVbmlmb3JtIiwiY3VyRmlsbENvbG9yIiwiYW1iaWVudExpZ2h0Q29sb3JzIiwiZGlyZWN0aW9uYWxMaWdodCIsImRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25zIiwiZGlyZWN0aW9uYWxMaWdodENvbG9ycyIsInBvaW50TGlnaHQiLCJwb2ludExpZ2h0UG9zaXRpb25zIiwicG9pbnRMaWdodENvbG9ycyIsImdpZCIsInZ0Iiwidm4iLCJtb2RlbCIsIlNoYWRlciIsIl9mcmFnU3JjIiwiX3ZlcnRTcmMiLCJjcmVhdGVTaGFkZXIiLCJzaGFkZXIiLCJpc1N0cm9rZVNoYWRlciIsInNldFN0cm9rZVNoYWRlciIsInNldEZpbGxTaGFkZXIiLCJub3JtYWxNYXRlcmlhbCIsImRyYXdNb2RlIiwiX2dldE5vcm1hbFNoYWRlciIsInRleHR1cmUiLCJhbWJpZW50TWF0ZXJpYWwiLCJzcGVjdWxhck1hdGVyaWFsIiwiX2FwcGx5Q29sb3JCbGVuZCIsIkdMIiwiZGVwdGhNYXNrIiwiZW5hYmxlIiwiYmxlbmRFcXVhdGlvbiIsIkZVTkNfQUREIiwiYmxlbmRGdW5jIiwiU1JDX0FMUEhBIiwiT05FX01JTlVTX1NSQ19BTFBIQSIsImRpc2FibGUiLCIuL3A1LlRleHR1cmUiLCJjYW1lcmEiLCJwZXJzcGVjdGl2ZSIsIm9ydGhvIiwiY3JlYXRlQ2FtZXJhIiwiQ2FtZXJhIiwiX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3MiLCJfc2V0RGVmYXVsdENhbWVyYSIsImNhbWVyYVR5cGUiLCJwcm9qTWF0cml4IiwiZGVmYXVsdENhbWVyYUZPViIsImNhbWVyYUZPViIsImRlZmF1bHRBc3BlY3RSYXRpbyIsImRlZmF1bHRDYW1lcmFOZWFyIiwiZGVmYXVsdENhbWVyYUZhciIsImFzcGVjdFJhdGlvIiwiY2FtZXJhTmVhciIsImNhbWVyYUZhciIsImlkZW50aXR5IiwiX2lzQWN0aXZlIiwidVBNYXRyaXgiLCJfcm90YXRlVmlldyIsImNlbnRlclgiLCJjZW50ZXJZIiwiY2VudGVyWiIsInRpbHQiLCJsb29rQXQiLCJkZWZhdWx0RXllWCIsImRlZmF1bHRFeWVZIiwiZGVmYXVsdEV5ZVoiLCJtb3ZlIiwiZGVmYXVsdENlbnRlclgiLCJkZWZhdWx0Q2VudGVyWSIsImRlZmF1bHRDZW50ZXJaIiwiX3Jlc2l6ZSIsInNldENhbWVyYSIsImxpbmVWZXJ0aWNlcyIsImxpbmVOb3JtYWxzIiwiZWRnZXMiLCJfZ2V0RmFjZU5vcm1hbCIsImF2ZXJhZ2VOb3JtYWxzIiwiYXZlcmFnZVBvbGVOb3JtYWxzIiwibWF0MyIsImludmVydDN4MyIsInRyYW5zcG9zZTN4MyIsImludmVyc2VUcmFuc3Bvc2UiLCJkZXRlcm1pbmFudCIsInNoYXBlTW9kZSIsInZlcnRleENvbG9ycyIsInV2Q29vcmRzIiwidmVydGV4QnVmZmVyIiwiY29sb3JCdWZmZXIiLCJ1dkJ1ZmZlciIsImxpbmVWZXJ0ZXhCdWZmZXIiLCJsaW5lTm9ybWFsQnVmZmVyIiwicG9pbnRWZXJ0ZXhCdWZmZXIiLCJpc0ltbWVkaWF0ZURyYXdpbmciLCJfdXNlSW1tZWRpYXRlTW9kZVNoYWRlciIsIl9kcmF3U3Ryb2tlSW1tZWRpYXRlTW9kZSIsIl92VG9OQXJyYXkiLCJfdHJpYW5ndWxhdGUiLCJfZHJhd0ZpbGxJbW1lZGlhdGVNb2RlIiwiY3VyRmlsbFNoYWRlciIsImFQb3NpdGlvbiIsIl9iaW5kQnVmZmVyIiwiQVJSQVlfQlVGRkVSIiwiRFlOQU1JQ19EUkFXIiwiZW5hYmxlQXR0cmliIiwiRkxPQVQiLCJhVmVydGV4Q29sb3IiLCJhVGV4Q29vcmQiLCJkcmF3QXJyYXlzIiwiY3VyU3Ryb2tlU2hhZGVyIiwiX2ZsYXR0ZW4iLCJTVEFUSUNfRFJBVyIsImFEaXJlY3Rpb24iLCJfaW5pdEJ1ZmZlckRlZmF1bHRzIiwiX2ZyZWVCdWZmZXJzIiwiZ0hhc2giLCJkZWxldGVCdWZmZXIiLCJub3JtYWxCdWZmZXIiLCJpbmRleEJ1ZmZlciIsIm51bWJlck9mSXRlbXMiLCJsaW5lVmVydGV4Q291bnQiLCJfdXNlQ29sb3JTaGFkZXIiLCJFTEVNRU5UX0FSUkFZX0JVRkZFUiIsImFOb3JtYWwiLCJfZHJhd0FycmF5cyIsIl9kcmF3RWxlbWVudHMiLCJkcmF3RWxlbWVudHMiLCJVTlNJR05FRF9TSE9SVCIsIlBvaW50cyIsImltbWVkaWF0ZVZlcnQiLCJ2ZXJ0ZXhDb2xvclZlcnQiLCJ2ZXJ0ZXhDb2xvckZyYWciLCJub3JtYWxWZXJ0Iiwibm9ybWFsRnJhZyIsImJhc2ljRnJhZyIsImxpZ2h0VmVydCIsImxpZ2h0VGV4dHVyZUZyYWciLCJwaG9uZ1ZlcnQiLCJwaG9uZ0ZyYWciLCJmb250VmVydCIsImZvbnRGcmFnIiwibGluZVZlcnQiLCJsaW5lRnJhZyIsInBvaW50VmVydCIsInBvaW50RnJhZyIsInN0ZW5jaWwiLCJhbnRpYWxpYXMiLCJwcmVtdWx0aXBsaWVkQWxwaGEiLCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIiLCJfaW5pdENvbnRleHQiLCJ1Tk1hdHJpeCIsIl9kZWZhdWx0TGlnaHRTaGFkZXIiLCJfZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXIiLCJfZGVmYXVsdE5vcm1hbFNoYWRlciIsIl9kZWZhdWx0Q29sb3JTaGFkZXIiLCJfZGVmYXVsdFBvaW50U2hhZGVyIiwiX2dldExpbmVTaGFkZXIiLCJwb2ludFNpemUiLCJ0ZXh0dXJlcyIsIl90ZXNzeSIsIl9pbml0VGVzc3kiLCJmb250SW5mb3MiLCJERVBUSF9URVNUIiwiZGVwdGhGdW5jIiwiTEVRVUFMIiwidmlld3BvcnQiLCJkcmF3aW5nQnVmZmVyV2lkdGgiLCJkcmF3aW5nQnVmZmVySGVpZ2h0IiwiX3ZpZXdwb3J0IiwiZ2V0UGFyYW1ldGVyIiwiVklFV1BPUlQiLCJfcmVzZXRDb250ZXh0Iiwic2V0QXR0cmlidXRlcyIsImNsZWFyQ29sb3IiLCJDT0xPUl9CVUZGRVJfQklUIiwiREVQVEhfQlVGRkVSX0JJVCIsIl9nZXRJbW1lZGlhdGVNb2RlU2hhZGVyIiwiX2dldENvbG9yU2hhZGVyIiwiY3VyU3Ryb2tlV2VpZ2h0IiwicmVhZFBpeGVscyIsIlVOU0lHTkVEX0JZVEUiLCJzZXRQb2ludFNoYWRlciIsImlzTGlnaHRTaGFkZXIiLCJfZ2V0TGlnaHRTaGFkZXIiLCJfZ2V0UG9pbnRTaGFkZXIiLCJfZGVmYXVsdExpbmVTaGFkZXIiLCJfZ2V0Rm9udFNoYWRlciIsIl9kZWZhdWx0Rm9udFNoYWRlciIsImdldEV4dGVuc2lvbiIsIl9nZXRFbXB0eVRleHR1cmUiLCJfZW1wdHlUZXh0dXJlIiwiVGV4dHVyZSIsImdldFRleHR1cmUiLCJiaW5kQnVmZmVyIiwiYnVmZmVyRGF0YSIsIi4uL2NvcmUvcDUuUmVuZGVyZXIiLCIuL3A1LkNhbWVyYSIsIi4vcDUuTWF0cml4IiwiLi9wNS5TaGFkZXIiLCJfdmVydFNoYWRlciIsIl9mcmFnU2hhZGVyIiwiX2dsUHJvZ3JhbSIsIl9sb2FkZWRBdHRyaWJ1dGVzIiwiX2xvYWRlZFVuaWZvcm1zIiwidW5pZm9ybXMiLCJfYm91bmQiLCJzYW1wbGVycyIsIlZFUlRFWF9TSEFERVIiLCJzaGFkZXJTb3VyY2UiLCJjb21waWxlU2hhZGVyIiwiZ2V0U2hhZGVyUGFyYW1ldGVyIiwiQ09NUElMRV9TVEFUVVMiLCJnZXRTaGFkZXJJbmZvTG9nIiwiRlJBR01FTlRfU0hBREVSIiwiY3JlYXRlUHJvZ3JhbSIsImF0dGFjaFNoYWRlciIsImxpbmtQcm9ncmFtIiwiZ2V0UHJvZ3JhbVBhcmFtZXRlciIsIkxJTktfU1RBVFVTIiwiZ2V0UHJvZ3JhbUluZm9Mb2ciLCJfbG9hZEF0dHJpYnV0ZXMiLCJfbG9hZFVuaWZvcm1zIiwiQUNUSVZFX0FUVFJJQlVURVMiLCJnZXRBY3RpdmVBdHRyaWIiLCJnZXRBdHRyaWJMb2NhdGlvbiIsIkFDVElWRV9VTklGT1JNUyIsImdldEFjdGl2ZVVuaWZvcm0iLCJnZXRVbmlmb3JtTG9jYXRpb24iLCJTQU1QTEVSXzJEIiwic2FtcGxlckluZGV4IiwiY29tcGlsZSIsInVzZVByb2dyYW0iLCJiaW5kVGV4dHVyZXMiLCJfc2V0TWF0cml4VW5pZm9ybXMiLCJfc2V0Vmlld3BvcnRVbmlmb3JtIiwidW5iaW5kVGV4dHVyZXMiLCJhY3RpdmVUZXh0dXJlIiwiVEVYVFVSRTAiLCJiaW5kVGV4dHVyZSIsInVwZGF0ZSIsInVuaWZvcm0xaSIsInVwZGF0ZVRleHR1cmVzIiwiQk9PTCIsIklOVCIsInVuaWZvcm0xaXYiLCJ1bmlmb3JtMWZ2IiwidW5pZm9ybTFmIiwiRkxPQVRfTUFUMyIsInVuaWZvcm1NYXRyaXgzZnYiLCJGTE9BVF9NQVQ0IiwidW5pZm9ybU1hdHJpeDRmdiIsIkZMT0FUX1ZFQzIiLCJ1bmlmb3JtMmZ2IiwidW5pZm9ybTJmIiwiRkxPQVRfVkVDMyIsInVuaWZvcm0zZnYiLCJ1bmlmb3JtM2YiLCJGTE9BVF9WRUM0IiwidW5pZm9ybTRmdiIsInVuaWZvcm00ZiIsIklOVF9WRUMyIiwidW5pZm9ybTJpdiIsInVuaWZvcm0yaSIsIklOVF9WRUMzIiwidW5pZm9ybTNpdiIsInVuaWZvcm0zaSIsIklOVF9WRUM0IiwidW5pZm9ybTRpdiIsInVuaWZvcm00aSIsInVVc2VMaWdodGluZyIsInVBbWJpZW50TGlnaHRDb3VudCIsInVEaXJlY3Rpb25hbExpZ2h0Q291bnQiLCJ1UG9pbnRMaWdodENvdW50IiwidUFtYmllbnRDb2xvciIsInVEaXJlY3Rpb25hbENvbG9yIiwidVBvaW50TGlnaHRMb2NhdGlvbiIsInVQb2ludExpZ2h0Q29sb3IiLCJ1TGlnaHRpbmdEaXJlY3Rpb24iLCJ1U3BlY3VsYXIiLCJpc1RleHR1cmVTaGFkZXIiLCJpc0NvbG9yU2hhZGVyIiwidU1hdGVyaWFsQ29sb3IiLCJpc1RleExpZ2h0U2hhZGVyIiwidVN0cm9rZVdlaWdodCIsImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwidmVydGV4QXR0cmliUG9pbnRlciIsImdsVGV4IiwiZ2xUYXJnZXQiLCJURVhUVVJFXzJEIiwiZ2xGb3JtYXQiLCJtaXBtYXBzIiwiZ2xNaW5GaWx0ZXIiLCJnbE1hZ0ZpbHRlciIsImdsV3JhcFMiLCJDTEFNUF9UT19FREdFIiwiZ2xXcmFwVCIsImlzU3JjTWVkaWFFbGVtZW50IiwiX3ZpZGVvUHJldlVwZGF0ZVRpbWUiLCJpc1NyY0hUTUxFbGVtZW50IiwiaXNTcmNQNUltYWdlIiwiaXNTcmNQNUdyYXBoaWNzIiwiaXNJbWFnZURhdGEiLCJfZ2V0VGV4dHVyZURhdGFGcm9tU291cmNlIiwiY3JlYXRlVGV4dHVyZSIsInRleFBhcmFtZXRlcmkiLCJURVhUVVJFX01BR19GSUxURVIiLCJURVhUVVJFX01JTl9GSUxURVIiLCJURVhUVVJFX1dSQVBfUyIsIlRFWFRVUkVfV1JBUF9UIiwibG9hZGVkbWV0YWRhdGEiLCJ0ZXhJbWFnZTJEIiwiX2RpcnR5IiwidW5iaW5kVGV4dHVyZSIsInNldEludGVycG9sYXRpb24iLCJzZXRXcmFwTW9kZSIsIk1JUlJPUkVEX1JFUEVBVCIsImluZm9zIiwiZmluZEltYWdlIiwic3Ryb2tlSW1hZ2VJbmZvcyIsImNvbERpbUltYWdlSW5mb3MiLCJyb3dEaW1JbWFnZUluZm9zIiwiY29sQ2VsbEltYWdlSW5mb3MiLCJyb3dDZWxsSW1hZ2VJbmZvcyIsImdseXBoSW5mb3MiLCJnZXRHbHlwaEluZm8iLCJwMCIsImMwIiwiYzEiLCJwMSIsInRvUXVhZHJhdGljIiwicXVhZEVycm9yIiwic3BsaXRJbmZsZWN0aW9ucyIsImNlbGxJbWFnZUluZm8iLCJkaW1PZmZzZXQiLCJkaW1JbWFnZUluZm8iLCJnbHlwaCIsInVHbHlwaFJlY3QiLCJzdHJva2VJbWFnZUluZm8iLCJzdHJva2VzIiwiY29sSW5mbyIsInJvd0luZm8iLCJ1R3JpZE9mZnNldCIsIl9mb250SW5mbyIsIl90ZXh0R2VvbSIsIi4vcDUuUmVuZGVyZXJHTCIsIl9fd2VicGFja19leHBvcnRzX18iLCJwNV9saWJfcDVfbWluX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18iLCJwNV9saWJfcDVfbWluX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCIsInRvbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyIsInRvbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0Iiwic2tldGNoIiwicHJpbWVOdW1iZXJzIiwiY2hvcnVzIiwiUHJpbWUiLCJbb2JqZWN0IE9iamVjdF0iLCJudW0iLCJjb3VudGVyIiwibGlmZXRpbWUiLCJmbSIsInByaW1lcyIsImV2YWwiXSwibWFwcGluZ3MiOiJhQUNBLElBQUFBLEtBR0EsU0FBQUMsRUFBQUMsR0FHQSxHQUFBRixFQUFBRSxHQUNBLE9BQUFGLEVBQUFFLEdBQUFDLFFBR0EsSUFBQUMsRUFBQUosRUFBQUUsSUFDQUcsRUFBQUgsRUFDQUksR0FBQSxFQUNBSCxZQVVBLE9BTkFJLEVBQUFMLEdBQUFNLEtBQUFKLEVBQUFELFFBQUFDLElBQUFELFFBQUFGLEdBR0FHLEVBQUFFLEdBQUEsRUFHQUYsRUFBQUQsUUFLQUYsRUFBQVEsRUFBQUYsRUFHQU4sRUFBQVMsRUFBQVYsRUFHQUMsRUFBQVUsRUFBQSxTQUFBUixFQUFBUyxFQUFBQyxHQUNBWixFQUFBYSxFQUFBWCxFQUFBUyxJQUNBRyxPQUFBQyxlQUFBYixFQUFBUyxHQUEwQ0ssWUFBQSxFQUFBQyxJQUFBTCxLQUsxQ1osRUFBQWtCLEVBQUEsU0FBQWhCLEdBQ0Esb0JBQUFpQixlQUFBQyxhQUNBTixPQUFBQyxlQUFBYixFQUFBaUIsT0FBQUMsYUFBd0RDLE1BQUEsV0FFeERQLE9BQUFDLGVBQUFi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QUFBLEtBQUErQyxFQUFBLEtBQUFhLEVBQUEsS0FBQTJCLEVBQUEsS0FBQUcsRUFBQSxLQUFBQyxFQUFBLEtBQUEwRCxHQUFBLEtBQUFvbUIsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsVUFBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsUUFBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsVUFBQUMsR0FBQSxVQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLFFBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLFVBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsYUFBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsTUFBdytCQyxJQUFLN0csRUFBQSxFQUFBaDJCLEVBQUEsRUFBQUssRUFBQSxFQUFBQyxFQUFBLEVBQUFrRyxFQUFBLEVBQUErQyxFQUFBLEVBQUFhLEVBQUEsRUFBQTJCLEVBQUEsRUFBQUcsRUFBQSxFQUFBQyxFQUFBLEVBQUEwRCxHQUFBLEVBQUFvbUIsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUM3cCtCQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxHQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxHQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsR0FBa2lCNXZDLElBQUs4dkMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxNQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsTUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFVBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsVUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxTQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsTUFBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxVQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLFNBQUFDLEtBQUEsTUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxNQUFBQyxLQUFBLFNBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLGFBQUFDLEtBQUEsS0FBQUMsS0FBQSxhQUFBQyxLQUFBLFVBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsVUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUF5ekU1eUIsR0FBQSxTQUFBRSxJQUFpQmdmLEVBQUEsWUFBQWgyQixFQUFBLGlCQUFBSyxFQUFBLG9CQUFBQyxFQUFBLGVBQUE4SixFQUFBLGNBQUEyQixFQUFBLGlCQUFBSSxFQUFBLGtCQUFBMEQsR0FBQSxpQkFBQW9tQixHQUFBLGlCQUFBQyxHQUFBLGNBQUFDLEdBQUEsZ0JBQUFDLEdBQUEsY0FBQUMsR0FBQSxlQUFBQyxHQUFBLGdCQUFBQyxHQUFBLGtCQUFBQyxHQUFBLGtCQUFBQyxHQUFBLGdCQUFBQyxHQUFBLGNBQUFDLEdBQUEsYUFBQUMsR0FBQSxZQUFBQyxHQUFBLGlCQUFBQyxHQUFBLGlCQUFBQyxHQUFBLG9CQUFBQyxHQUFBLGdCQUFBQyxHQUFBLGtCQUFBQyxHQUFBLGlCQUFBQyxHQUFBLFdBQUFDLEdBQUEsbUJBQUFDLEdBQUEsbUJBQWtpQnRnQixJQUFLc2YsR0FBQSxrQkFBQUUsR0FBQSxnQkFBQUMsR0FBQSxpQkFBQU0sR0FBQSxXQUFBQyxHQUFBLFdBQUFDLEdBQUEsV0FBQUMsR0FBQSxXQUFBQyxHQUFBLFdBQUFFLEdBQUEsa0JBQUFPLEdBQUEsaUJBQUFDLEdBQUEsV0FBQUMsR0FBQSxXQUFBQyxHQUFBLFdBQUFzRSxJQUFBLGNBQUFHLElBQUEsZ0JBQTBQalgsSUFBS25CLE1BSGtzVixTQUFBem1ELEVBQUFLLEVBQUFqYixHQUFtQixRQUFBQyxLQUFZMk0sRUFBQSxJQUFBaWtELEdBQUFRLE9BQUF6MkMsRUFBQUssR0FBQWYsRUFBQXROLEVBQUE2cEQsY0FBQWw4QyxFQUFBM04sRUFBQTZwRCxjQUFBelosRUFBQXB3QyxFQUFBeVUsT0FBQXpVLEVBQUE2cEQsY0FBQTkyRCxFQUFBLEVBQXlGQSxFQUFBNGEsRUFBSTVhLElBQUEsQ0FBSyxJQUFBMEUsRUFBQXVJLEVBQUE2cEQsY0FBQS95QyxFQUFBOVcsRUFBQTZwRCxjQUFBNzJELEVBQUFnTixFQUFBNnBELGNBQUExMkQsRUFBQTZNLEVBQUE2cEQsY0FBQXIxRCxFQUFBNnhFLEdBQUFsekUsTUFBQUssRUFBQXdNLEVBQUE2cEQsY0FBQWgxRCxFQUFBbUwsRUFBQTZwRCxjQUFBLy9DLEVBQUFvOUMsR0FBQXp2RCxFQUFBekUsRUFBQUksR0FBQVMsRUFBQXN6RCxHQUFBMXZELEVBQUFxZixFQUFBOWpCLEdBQW1KLFlBQUFhLFFBQUEsSUFBQWlXLEVBQUEsQ0FBMkIsSUFBQWhWLE9BQUEsRUFBYSxHQUFBQSxFQUFBakIsSUFBQXV6RCxHQUFBaVIsR0FBQTJCLE1BQUFoc0QsRUFBQW9pQyxFQUFBdjdDLEVBQUFyQixHQUFBNmtFLEdBQUF1QyxVQUFBNXNELEVBQUFvaUMsRUFBQXY3QyxFQUFBckIsRUFBQUssR0FBQSxDQUF1RCxJQUFBSSxFQUFBWixFQUFBbUIsUUFBVyxJQUFBUCxNQUFBWixFQUFBbUIsT0FBc0JQLEVBQUE2VixHQUFBaFYsSUFBVyxXQUFBd1ksR0FBQXROLEVBQUE2cEQsY0FBQXgyRCxHQUdqbVd1dEUsS0FIK3VYLFNBQUE1eUQsRUFBQUssR0FBaUIsSUFBQWpiLEVBQUFDLEtBQUEyTSxLQUFlc04sRUFBQWk2QyxHQUFBOGUsSUFBVSxRQUFBMTRELEtBQUFLLEVBQUEsQ0FBZ0IsSUFBQW9pQyxFQUFBOWlDLEVBQUFLLEdBQVcsWUFBQXlpQyxNQUFBemlDLEdBQUF2YSxFQUFBa1csU0FBQThtQyxHQUFBNUUsTUFBQXA0QyxHQUFBLFVBQUFrQyxNQUFBLHFCQUFBcVksRUFBQSwyREFBOEkzTixFQUFBNU0sR0FBQTRhLEVBQUFMLEdBQUF0YSxFQUFBNEUsS0FBQTdFLEdBQW9CLFFBQUFMLEVBQUF3MEQsR0FBQXpwQixJQUFBcm1DLEVBQUE4dkQsR0FBQWpxQixJQUFBeG1CLEtBQUE5akIsS0FBQUcsRUFBQSxFQUF3Q0EsRUFBQUUsRUFBQXNELE9BQVd4RCxJQUFBLENBQUtDLEVBQUFDLEVBQUFGLEdBQU8sSUFBQXFCLEVBQUF3TCxFQUFBNU0sR0FBVyxRQUFBSSxLQUFBZ0IsRUFBQSxDQUFnQixJQUFBSyxFQUFBTCxFQUFBaEIsR0FBQXNXLEVBQUEsRUFBQWpXLEVBQUFkLEVBQUFTLEdBQUFzQixFQUFBcTRFLEdBQUF0NUUsR0FBQUksRUFBQWt6RCxHQUFBcjlDLEVBQUFoVixFQUFBakIsR0FBQTg5QyxFQUFBMm1CLEdBQUFzQyxVQUFBL2xFLEVBQUFaLFFBQThELElBQUEwOUMsSUFBQTduQyxFQUFBLEdBQUFqVyxFQUFBd2EsRUFBQTdYLFFBQUFoRCxJQUFBLElBQUFLLEVBQUF3YSxFQUFBMVgsT0FBQTBYLEVBQUFwVyxLQUFBekUsSUFBQXNCLEVBQUEsRUFBQTY4QyxFQUFBMm1CLEdBQUEwQixNQUFBbmxFLElBQStFLElBQUFnMkMsRUFBQXo4QixHQUFBdWpDLEVBQUEzK0MsR0FBYzhqQixFQUFBN2UsS0FBQXV2RCxHQUFBMTlDLEVBQUFoVixFQUFBakIsRUFBQVQsRUFBQXUrQyxFQUFBaDdDLE9BQUFrMEMsSUFBK0IsSUFBQWlILEVBQUFyNkMsRUFBQWpFLEdBQVcsWUFBQXMrQyxFQUFBLENBQWUsSUFBQTdpQixFQUFBcXBDLEdBQUEwQixNQUFBbmxFLEdBQUF5K0IsRUFBQWxsQixHQUFBNmdCLEVBQUFqOEIsR0FBNEI4akIsRUFBQTdlLEtBQUF1dkQsR0FBQSxJQUFBMVYsRUFBQTErQyxFQUFBNjdCLEVBQUF0NEIsT0FBQTI4QixNQUFpQ3hjLEVBQUFrbUMsS0FBQSxTQUFBaHZDLEVBQUFLLEdBQXFCLE9BQUFMLEVBQUFpc0UsV0FBQTVyRSxFQUFBNHJFLFlBQUFqc0UsRUFBQWtzRSxXQUFBN3JFLEVBQUE2ckUsWUFBQWxzRSxFQUFBbXNFLFdBQUE5ckUsRUFBQThyRSxZQUFBbnNFLEVBQUFvc0UsT0FBQS9yRSxFQUFBK3JFLFNBQTRHLFFBQUE3bUQsRUFBQSxJQUFBcXpCLEdBQUFpQixNQUFBLFNBQWdDdjBELEtBQUEsU0FBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBc0NWLEtBQUEsUUFBQWdRLEtBQUEsU0FBQXRQLE1BQUE4aUIsRUFBQW5nQixTQUE0Q3JELEtBQUEsZUFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsS0FBQThpQixFQUFBbmdCLFVBQXNEczdDLEVBQUEsRUFBT0EsRUFBQW43QixFQUFBbmdCLE9BQVdzN0MsSUFBQTFlLEVBQUF5dUIsT0FBQS9wRCxNQUFtQjNFLEtBQUEsVUFBQTIrQyxFQUFBM3VDLEtBQUEsU0FBQXRQLE1BQUE4aUIsRUFBQW03QixLQUE0QyxPQUFBMWUsRUFBQXl1QixPQUFBL3BELE1BQXNCM0UsS0FBQSxVQUFBZ1EsS0FBQSxVQUFBdFAsTUFBQWhCLElBQXNDdWdDLElBR3R1WjhtRCxLQUFNQyxNQUFBLEVBQUE3N0UsSUFBQSxNQUFrQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxPQUFxQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxRQUF1QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLFFBQUE3N0UsSUFBQSxVQUE0QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtB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LFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFB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LFVBQUFDLFVBQUEsVUFBQUMsYUFBQSxVQUFBQyxVQUFBLFVBQUFDLFdBQUEsVUFBQUMsVUFBQSxVQUFBQyxxQkFBQSxVQUFBQyxVQUFBLFVBQUFDLFdBQUEsVUFBQUMsVUFBQSxVQUFBQyxVQUFBLFVBQUFDLFlBQUEsVUFBQUMsY0FBQSxVQUFBQyxhQUFBLFVBQUFDLGVBQUEsVUFBQUMsZUFBQSxVQUFBQyxlQUFBLFVBQUFDLFlBQUEsVUFBQUMsS0FBQSxVQUFBQyxVQUFBLFVBQUFDLE1BQUEsVUFBQUMsUUFBQSxVQUFBQyxPQUFBLFVBQUFDLGlCQUFBLFVBQUFDLFdBQUEsVUFBQUMsYUFBQSxVQUFBQyxhQUFBLFVBQUFDLGVBQUEsVUFBQUMsZ0JBQUEsVUFBQUMsa0JBQUEsVUFBQUMsZ0JBQUEsVUFBQUMsZ0JBQUEsVUFBQUMsYUFBQSxVQUFBQyxVQUFBLFVBQUFDLFVBQUEsVUFBQUMsU0FBQSxVQUFBQyxZQUFBLFVBQUFDLEtBQUEsVUFBQUMsUUFBQSxVQUFBQyxNQUFBLFVBQUFDLFVBQUEsVUFBQUMsT0FBQSxVQUFBQyxVQUFBLFVBQUFDLE9BQUEsVUFBQUMsY0FBQSxVQUFBQyxVQUFBLFVBQUFDLGNBQUEsVUFBQUMsY0FBQSxVQUFBQyxXQUFBLFVBQUFDLFVBQUEsVUFBQUMsS0FBQSxVQUFBdjNELEtBQUEsVUFBQXczRCxLQUFBLFVBQUFDLFdBQUEsVUFBQUMsT0FBQSxVQUFBckksSUFBQSxVQUFBc0ksVUFBQSxVQUFBQyxVQUFBLFVBQUFDLFlBQUEsVUFBQUMsT0FBQSxVQUFBQyxXQUFBLFVBQUFDLFNBQUEsVUFBQUMsU0FBQSxVQUFBQyxPQUFBLFVBQUFDLE9BQUEsVUFBQUMsUUFBQSxVQUFBQyxVQUFBLFVBQUFDLFVBQUEsVUFBQUMsVUFBQSxVQUFBQyxLQUFBLFVBQUFDLFlBQUEsVUFBQUMsVUFBQSxVQUFBQyxJQUFBLFVBQUFDLEtBQUEsVUFBQUMsUUFBQSxVQUFBQyxPQUFBLFVBQUFDLFVBQUEsVUFBQUMsT0FBQSxVQUFBQyxNQUFBLFVBQUF4NEQsTUFBQSxVQUFBeTRELFdBQUEsVUFB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QStpRSxLQUFBLE1BQ0EvaUUsRUFBQSs2SCxPQUFBLzZILEVBQUFpbUgsT0FBQWptSCxFQUFBK3RDLE1BQUEscUJBQ0EvdEMsRUFBQXltRyxXQUFBLEdBQ0F6bUcsRUFBQSs5RyxTQUVBLzlHLEVBQUFvOUcsV0FBQXA5RyxFQUFBK3RDLE1BQUEsRUFBQS90QyxFQUFBdXZCLE9BQUEsS0FFQXZ2QixFQUFBcWlILFNBQUFyaUgsRUFBQXluRyxTQUVBLFFBQUF2cEcsRUFBQSxFQUFvQkEsRUFBQTh3SSxFQUFBbHRJLE9BQWlCNUQsSUFDckM4QixFQUFBb2lILFFBQUFwaUgsRUFBQXF4SCxRQUFBbnpILEVBQUEsTUFDQTh3SSxFQUFBOXdJLEdBQUE2a0UsU0FJQS9pRSxFQUFBdWxILFdBQUEsTUFDQSxLQUFBdmxILEVBQUFQLEtBQ0FPLEVBQUF5N0csS0FBQWwyRCxLQUFBdi9DLE1BQUEsV0FJZWtvSSxFQUFBLFVBQ2YsSUFBSUUsRUFBQWoxSCxFQUFFbzFILGtCQy9HTixJQUFBejFILEVBR0FBLEVBQUEsV0FDQSxPQUFBdFksS0FEQSxHQUlBLElBRUFzWSxLQUFBK3JDLFNBQUEsY0FBQUEsS0FBQSxFQUFBb3FGLE1BQUEsUUFDQyxNQUFBOWpJLEdBRUQsaUJBQUF2RSxTQUFBa1MsRUFBQWxTLFFBT0EzSSxFQUFBRCxRQUFBOGEiLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAyKTtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KXtcblxuXHQvL1VNRFxuXHRpZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRcdGRlZmluZShmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBmYWN0b3J5KCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuIFx0fSBlbHNlIHtcblx0XHRyb290LlRvbmUgPSBmYWN0b3J5KCk7XG5cdH1cblxufSh0aGlzLCBmdW5jdGlvbigpe1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIFRvbmU7XG5cdC8vY29uc3RydWN0cyB0aGUgbWFpbiBUb25lIG9iamVjdFxuXHRmdW5jdGlvbiBNYWluKGZ1bmMpe1xuXHRcdFRvbmUgPSBmdW5jKCk7XG5cdH1cblx0Ly9pbnZva2VzIGVhY2ggb2YgdGhlIG1vZHVsZXMgd2l0aCB0aGUgbWFpbiBUb25lIG9iamVjdCBhcyB0aGUgYXJndW1lbnRcblx0ZnVuY3Rpb24gTW9kdWxlKGZ1bmMpe1xuXHRcdGZ1bmMoVG9uZSk7XG5cdH1cdC8qKlxuXHQgKiAgVG9uZS5qc1xuXHQgKiAgQGF1dGhvciBZb3RhbSBNYW5uXG5cdCAqICBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVCBMaWNlbnNlXG5cdCAqICBAY29weXJpZ2h0IDIwMTQtMjAxOCBZb3RhbSBNYW5uXG5cdCAqL1xuXHRNYWluKGZ1bmN0aW9uICgpIHtcblx0ICAgIFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VE9ORVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lIGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBvdGhlciBjbGFzc2VzLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIHZhciBUb25lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUb25lKSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbnN0cnVjdG9yIG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBcXCduZXdcXCcga2V5d29yZCcpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEByZXR1cm5zIHtTdHJpbmd9IHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIGFzIGEgc3RyaW5nXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmb3IgKHZhciBjbGFzc05hbWUgaW4gVG9uZSkge1xuXHQgICAgICAgICAgICB2YXIgaXNMZXR0ZXIgPSBjbGFzc05hbWVbMF0ubWF0Y2goL15bQS1aXSQvKTtcblx0ICAgICAgICAgICAgdmFyIHNhbWVDb25zdHJ1Y3RvciA9IFRvbmVbY2xhc3NOYW1lXSA9PT0gdGhpcy5jb25zdHJ1Y3Rvcjtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNGdW5jdGlvbihUb25lW2NsYXNzTmFtZV0pICYmIGlzTGV0dGVyICYmIHNhbWVDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gJ1RvbmUnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgZGlzY29ubmVjdCBhbmQgZGlzcG9zZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRHRVQvU0VUXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIHBhcmFtZXRlcnMgYXQgb25jZS4gRWl0aGVyIHBhc3MgaW4gYW5cblx0XHQgKiAgb2JqZWN0IG1hcHBpbmcgcGFyYW1ldGVycyB0byB2YWx1ZXMsIG9yIHRvIHNldCBhXG5cdFx0ICogIHNpbmdsZSBwYXJhbWV0ZXIsIGJ5IHBhc3NpbmcgaW4gYSBzdHJpbmcgYW5kIHZhbHVlLlxuXHRcdCAqICBUaGUgbGFzdCBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCByYW1wIHRpbWUgd2hpY2hcblx0XHQgKiAgd2lsbCByYW1wIGFueSBzaWduYWwgdmFsdWVzIHRvIHRoZWlyIGRlc3RpbmF0aW9uIHZhbHVlXG5cdFx0ICogIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBwYXJhbXNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByYW1wVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZX0gdGhpc1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NldCB2YWx1ZXMgdXNpbmcgYW4gb2JqZWN0XG5cdFx0ICogZmlsdGVyLnNldCh7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogMzAwLFxuXHRcdCAqIFx0XCJ0eXBlXCIgOiBoaWdocGFzc1xuXHRcdCAqIH0pO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGZpbHRlci5zZXQoXCJ0eXBlXCIsIFwiaGlnaHBhc3NcIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9yYW1wIHRvIHRoZSB2YWx1ZSAyMjAgb3ZlciAzIHNlY29uZHMuXG5cdFx0ICogb3NjaWxsYXRvci5zZXQoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IDIyMFxuXHRcdCAqIH0sIDMpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgdmFsdWUsIHJhbXBUaW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QocGFyYW1zKSkge1xuXHQgICAgICAgICAgICByYW1wVGltZSA9IHZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHZhciB0bXBPYmogPSB7fTtcblx0ICAgICAgICAgICAgdG1wT2JqW3BhcmFtc10gPSB2YWx1ZTtcblx0ICAgICAgICAgICAgcGFyYW1zID0gdG1wT2JqO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBwYXJhbUxvb3A6XG5cdCAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gcGFyYW1zKSB7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcmFtc1thdHRyXTtcblx0ICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICAgICAgaWYgKGF0dHIuaW5kZXhPZignLicpICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyU3BsaXQgPSBhdHRyLnNwbGl0KCcuJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyU3BsaXQubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFthdHRyU3BsaXRbaV1dO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgVG9uZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0clNwbGl0LnNwbGljZSgwLCBpICsgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5uZXJQYXJhbSA9IGF0dHJTcGxpdC5qb2luKCcuJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuc2V0KGlubmVyUGFyYW0sIHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHBhcmFtTG9vcDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBhdHRyID0gYXR0clNwbGl0W2F0dHJTcGxpdC5sZW5ndGggLSAxXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHZhciBwYXJhbSA9IHBhcmVudFthdHRyXTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYocGFyYW0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5TaWduYWwgJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlNpZ25hbCB8fCBUb25lLlBhcmFtICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5QYXJhbSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS52YWx1ZSAhPT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihyYW1wVGltZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5yYW1wVG8odmFsdWUsIHJhbXBUaW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBBdWRpb1BhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnZhbHVlICE9PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5UaW1lQmFzZSAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJlbnRbYXR0cl0gPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBUb25lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcGFyYW0uc2V0KHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gIT09IHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcGFyZW50W2F0dHJdID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBvYmplY3QncyBhdHRyaWJ1dGVzLiBHaXZlbiBubyBhcmd1bWVudHMgZ2V0XG5cdFx0ICogIHdpbGwgcmV0dXJuIGFsbCBhdmFpbGFibGUgb2JqZWN0IHByb3BlcnRpZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmdcblx0XHQgKiAgdmFsdWVzLiBQYXNzIGluIGEgc2luZ2xlIGF0dHJpYnV0ZSB0byByZXRyaWV2ZSBvciBhbiBhcnJheVxuXHRcdCAqICBvZiBhdHRyaWJ1dGVzLiBUaGUgYXR0cmlidXRlIHN0cmluZ3MgY2FuIGFsc28gaW5jbHVkZSBhIFwiLlwiXG5cdFx0ICogIHRvIGFjY2VzcyBkZWVwZXIgcHJvcGVydGllcy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogb3NjLmdldCgpO1xuXHRcdCAqIC8vcmV0dXJucyB7XCJ0eXBlXCIgOiBcInNpbmVcIiwgXCJmcmVxdWVuY3lcIiA6IDQ0MCwgLi4uZXRjfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG9zYy5nZXQoXCJ0eXBlXCIpO1xuXHRcdCAqIC8vcmV0dXJucyB7IFwidHlwZVwiIDogXCJzaW5lXCJ9XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL3VzZSBkb3Qgbm90YXRpb24gdG8gYWNjZXNzIGRlZXAgcHJvcGVydGllc1xuXHRcdCAqIHN5bnRoLmdldChbXCJlbnZlbG9wZS5hdHRhY2tcIiwgXCJlbnZlbG9wZS5yZWxlYXNlXCJdKTtcblx0XHQgKiAvL3JldHVybnMge1wiZW52ZWxvcGVcIiA6IHtcImF0dGFja1wiIDogMC4yLCBcInJlbGVhc2VcIiA6IDAuNH19XG5cdFx0ICogIEBwYXJhbSB7QXJyYXk9fHN0cmluZ3x1bmRlZmluZWR9IHBhcmFtcyB0aGUgcGFyYW1ldGVycyB0byBnZXQsIG90aGVyd2lzZSB3aWxsIHJldHVyblxuXHRcdCAqICBcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgYWxsIGF2YWlsYWJsZS5cblx0XHQgKiAgQHJldHVybnMge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgcGFyYW1zID0gdGhpcy5fY29sbGVjdERlZmF1bHRzKHRoaXMuY29uc3RydWN0b3IpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHBhcmFtcyA9IFtwYXJhbXNdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmV0ID0ge307XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGF0dHIgPSBwYXJhbXNbaV07XG5cdCAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICB2YXIgc3ViUmV0ID0gcmV0O1xuXHQgICAgICAgICAgICBpZiAoYXR0ci5pbmRleE9mKCcuJykgIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYXR0clNwbGl0ID0gYXR0ci5zcGxpdCgnLicpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRyU3BsaXQubGVuZ3RoIC0gMTsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHN1YkF0dHIgPSBhdHRyU3BsaXRbal07XG5cdCAgICAgICAgICAgICAgICAgICAgc3ViUmV0W3N1YkF0dHJdID0gc3ViUmV0W3N1YkF0dHJdIHx8IHt9O1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YlJldCA9IHN1YlJldFtzdWJBdHRyXTtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbc3ViQXR0cl07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBhdHRyID0gYXR0clNwbGl0W2F0dHJTcGxpdC5sZW5ndGggLSAxXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YXIgcGFyYW0gPSBwYXJlbnRbYXR0cl07XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KHBhcmFtc1thdHRyXSkpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLmdldCgpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuU2lnbmFsICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5TaWduYWwpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLnZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuUGFyYW0gJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlBhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS52YWx1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLnZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgVG9uZSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0uZ2V0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoIVRvbmUuaXNGdW5jdGlvbihwYXJhbSkgJiYgVG9uZS5pc0RlZmluZWQocGFyYW0pKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjb2xsZWN0IGFsbCBvZiB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGluIG9uZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjb25zdHIgdGhlIGNvbnN0cnVjdG9yIHRvIGZpbmQgdGhlIGRlZmF1bHRzIGZyb21cblx0XHQgKiAgQHJldHVybiB7QXJyYXl9IGFsbCBvZiB0aGUgYXR0cmlidXRlcyB3aGljaCBiZWxvbmcgdG8gdGhlIGNsYXNzXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5fY29sbGVjdERlZmF1bHRzID0gZnVuY3Rpb24gKGNvbnN0cikge1xuXHQgICAgICAgIHZhciByZXQgPSBbXTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoY29uc3RyLmRlZmF1bHRzKSkge1xuXHQgICAgICAgICAgICByZXQgPSBPYmplY3Qua2V5cyhjb25zdHIuZGVmYXVsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoY29uc3RyLl9zdXBlcikpIHtcblx0ICAgICAgICAgICAgdmFyIHN1cGVyRGVmcyA9IHRoaXMuX2NvbGxlY3REZWZhdWx0cyhjb25zdHIuX3N1cGVyKTtcblx0ICAgICAgICAgICAgLy9maWx0ZXIgb3V0IHJlcGVhdHNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdXBlckRlZnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChyZXQuaW5kZXhPZihzdXBlckRlZnNbaV0pID09PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKHN1cGVyRGVmc1tpXSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJldDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRERUZBVUxUU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICB2YWx1ZXMgIFRoZSBhcmd1bWVudHMgYXJyYXlcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICBrZXlzICAgIFRoZSBuYW1lcyBvZiB0aGUgYXJndW1lbnRzXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBjb25zdHIgVGhlIGNsYXNzIGNvbnN0cnVjdG9yXG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBBbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlICBkZWZhdWx0cyBiZXR3ZWVuIHRoZSBjbGFzcycgZGVmYXVsdHNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgcGFzc2VkIGluIGFyZ3VtZW50cy5cblx0XHQgKi9cblx0ICAgIFRvbmUuZGVmYXVsdHMgPSBmdW5jdGlvbiAodmFsdWVzLCBrZXlzLCBjb25zdHIpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IHt9O1xuXHQgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxICYmIFRvbmUuaXNPYmplY3QodmFsdWVzWzBdKSkge1xuXHQgICAgICAgICAgICBvcHRpb25zID0gdmFsdWVzWzBdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgb3B0aW9uc1trZXlzW2ldXSA9IHZhbHVlc1tpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoY29uc3RyLmRlZmF1bHRzKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIGNvbnN0ci5kZWZhdWx0cyk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzT2JqZWN0KGNvbnN0cikpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBjb25zdHIpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBvcHRpb25zO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIGBnaXZlbmAgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCwgdXNlIHRoZSBgZmFsbGJhY2tgLlxuXHRcdCAqICBJZiBib3RoIGBnaXZlbmAgYW5kIGBmYWxsYmFja2AgYXJlIG9iamVjdCBsaXRlcmFscywgaXQgd2lsbFxuXHRcdCAqICByZXR1cm4gYSBkZWVwIGNvcHkgd2hpY2ggaW5jbHVkZXMgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIGZyb20gYm90aFxuXHRcdCAqICBvYmplY3RzLiBJZiBhIHBhcmFtZXRlciBpcyB1bmRlZmluZWQgaW4gZ2l2ZW4sIGl0IHdpbGwgcmV0dXJuXG5cdFx0ICogIHRoZSBmYWxsYmFjayBwcm9wZXJ0eS5cblx0XHQgKiAgPGJyPjxicj5cblx0XHQgKiAgV0FSTklORzogaWYgb2JqZWN0IGlzIHNlbGYgcmVmZXJlbnRpYWwsIGl0IHdpbGwgZ28gaW50byBhbiBhblxuXHRcdCAqICBpbmZpbml0ZSByZWN1cnNpdmUgbG9vcC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHBhcmFtICB7Kn0gZ2l2ZW5cblx0XHQgKiAgQHBhcmFtICB7Kn0gZmFsbGJhY2tcblx0XHQgKiAgQHJldHVybiB7Kn1cblx0XHQgKi9cblx0ICAgIFRvbmUuZGVmYXVsdEFyZyA9IGZ1bmN0aW9uIChnaXZlbiwgZmFsbGJhY2spIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc09iamVjdChnaXZlbikgJiYgVG9uZS5pc09iamVjdChmYWxsYmFjaykpIHtcblx0ICAgICAgICAgICAgdmFyIHJldCA9IHt9O1xuXHQgICAgICAgICAgICAvL21ha2UgYSBkZWVwIGNvcHkgb2YgdGhlIGdpdmVuIG9iamVjdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBnaXZlblByb3AgaW4gZ2l2ZW4pIHtcblx0ICAgICAgICAgICAgICAgIHJldFtnaXZlblByb3BdID0gVG9uZS5kZWZhdWx0QXJnKGZhbGxiYWNrW2dpdmVuUHJvcF0sIGdpdmVuW2dpdmVuUHJvcF0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGZvciAodmFyIGZhbGxiYWNrUHJvcCBpbiBmYWxsYmFjaykge1xuXHQgICAgICAgICAgICAgICAgcmV0W2ZhbGxiYWNrUHJvcF0gPSBUb25lLmRlZmF1bHRBcmcoZ2l2ZW5bZmFsbGJhY2tQcm9wXSwgZmFsbGJhY2tbZmFsbGJhY2tQcm9wXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHJldDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5pc1VuZGVmKGdpdmVuKSA/IGZhbGxiYWNrIDogZ2l2ZW47XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdENPTk5FQ1RJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBjb25uZWN0IHRvZ2V0aGVyIGFsbCBvZiB0aGUgYXJndW1lbnRzIGluIHNlcmllc1xuXHRcdCAqICBAcGFyYW0gey4uLkF1ZGlvUGFyYW18VG9uZXxBdWRpb05vZGV9IG5vZGVzXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLmNvbm5lY3RTZXJpZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRVbml0ID0gYXJndW1lbnRzWzBdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB0b1VuaXQgPSBhcmd1bWVudHNbaV07XG5cdCAgICAgICAgICAgIGN1cnJlbnRVbml0LmNvbm5lY3QodG9Vbml0KTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQgPSB0b1VuaXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gVFlQRSBDSEVDS0lOR1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJnIGlzIHVuZGVmaW5lZFxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIHVuZGVmaW5lZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzVW5kZWYgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmcgaXMgbm90IHVuZGVmaW5lZFxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIHVuZGVmaW5lZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzRGVmaW5lZCA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICByZXR1cm4gIVRvbmUuaXNVbmRlZih2YWwpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmcgaXMgYSBmdW5jdGlvblxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgZnVuY3Rpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc0Z1bmN0aW9uID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlci5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIG51bWJlclxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzTnVtYmVyID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgZ2l2ZW4gYXJndW1lbnQgaXMgYW4gb2JqZWN0IGxpdGVyYWwgKGkuZS4gYHt9YCk7XG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYW4gb2JqZWN0IGxpdGVyYWwuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNPYmplY3QgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBPYmplY3RdJyAmJiBhcmcuY29uc3RydWN0b3IgPT09IE9iamVjdDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgYSBib29sZWFuLlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgYm9vbGVhblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzQm9vbGVhbiA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhbiBBcnJheVxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGFuIGFycmF5XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNBcnJheSA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIHN0cmluZy5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIHN0cmluZ1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzU3RyaW5nID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgaW4gdGhlIGZvcm0gb2YgYSBub3RlIGluIHNjaWVudGlmaWMgcGl0Y2ggbm90YXRpb24uXG5cdFx0ICogIGUuZy4gXCJDNFwiXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBzdHJpbmdcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc05vdGUgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuaXNTdHJpbmcoYXJnKSAmJiAvXihbYS1nXXsxfSg/OmJ8I3x4fGJiKT8pKC0/WzAtOV0rKS9pLnRlc3QoYXJnKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQW4gZW1wdHkgZnVuY3Rpb24uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUubm9PcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTWFrZSB0aGUgcHJvcGVydHkgbm90IHdyaXRhYmxlLiBJbnRlcm5hbCB1c2Ugb25seS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcGVydHkgIHRoZSBwcm9wZXJ0eSB0byBtYWtlIG5vdCB3cml0YWJsZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuX3JlYWRPbmx5ID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydHkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5KHByb3BlcnR5W2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eSwge1xuXHQgICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuXHQgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIE1ha2UgYW4gYXR0cmlidXRlIHdyaXRlYWJsZS4gSW50ZXJhbCB1c2Ugb25seS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcGVydHkgIHRoZSBwcm9wZXJ0eSB0byBtYWtlIHdyaXRhYmxlXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5fd3JpdGFibGUgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0eS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd3JpdGFibGUocHJvcGVydHlbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB7IHdyaXRhYmxlOiB0cnVlIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBQb3NzaWJsZSBwbGF5IHN0YXRlcy5cblx0XHQgKiBAZW51bSB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGF0ZSA9IHtcblx0ICAgICAgICBTdGFydGVkOiAnc3RhcnRlZCcsXG5cdCAgICAgICAgU3RvcHBlZDogJ3N0b3BwZWQnLFxuXHQgICAgICAgIFBhdXNlZDogJ3BhdXNlZCdcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBFcXVhbCBwb3dlciBnYWluIHNjYWxlLiBHb29kIGZvciBjcm9zcy1mYWRpbmcuXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSBwZXJjZW50ICgwLTEpXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gICAgICAgICBvdXRwdXQgZ2FpbiAoMC0xKVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmVxdWFsUG93ZXJTY2FsZSA9IGZ1bmN0aW9uIChwZXJjZW50KSB7XG5cdCAgICAgICAgdmFyIHBpRmFjdG9yID0gMC41ICogTWF0aC5QSTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5zaW4ocGVyY2VudCAqIHBpRmFjdG9yKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBkZWNpYmVscyBpbnRvIGdhaW4uXG5cdFx0ICogIEBwYXJhbSAge0RlY2liZWxzfSBkYlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZGJUb0dhaW4gPSBmdW5jdGlvbiAoZGIpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5wb3coMTAsIGRiIC8gMjApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGdhaW4gdG8gZGVjaWJlbHMuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gZ2FpbiAoMC0xKVxuXHRcdCAqICBAcmV0dXJuIHtEZWNpYmVsc31cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5nYWluVG9EYiA9IGZ1bmN0aW9uIChnYWluKSB7XG5cdCAgICAgICAgcmV0dXJuIDIwICogKE1hdGgubG9nKGdhaW4pIC8gTWF0aC5MTjEwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhbiBpbnRlcnZhbCAoaW4gc2VtaXRvbmVzKSB0byBhIGZyZXF1ZW5jeSByYXRpby5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWx9IGludGVydmFsIHRoZSBudW1iZXIgb2Ygc2VtaXRvbmVzIGFib3ZlIHRoZSBiYXNlIG5vdGVcblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSAgICAgICAgICB0aGUgZnJlcXVlbmN5IHJhdGlvXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB0b25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbygwKTsgLy8gMVxuXHRcdCAqIHRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKDEyKTsgLy8gMlxuXHRcdCAqIHRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKC0xMik7IC8vIDAuNVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8gPSBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5wb3coMiwgaW50ZXJ2YWwgLyAxMik7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VElNSU5HXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBvZiB0aGUgQXVkaW9Db250ZXh0IGNsb2NrLlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBjdXJyZW50VGltZSBmcm9tIHRoZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuY29udGV4dC5ub3coKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIEF1ZGlvQ29udGV4dCBjbG9jay5cblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSB0aGUgY3VycmVudFRpbWUgZnJvbSB0aGUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUubm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLmNvbnRleHQubm93KCk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0SU5IRVJJVEFOQ0Vcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIGhhdmUgYSBjaGlsZCBpbmhlcml0IGFsbCBvZiBUb25lJ3MgKG9yIGEgcGFyZW50J3MpIHByb3RvdHlwZVxuXHRcdCAqICB0byBpbmhlcml0IHRoZSBwYXJlbnQncyBwcm9wZXJ0aWVzLCBtYWtlIHN1cmUgdG8gY2FsbFxuXHRcdCAqICBQYXJlbnQuY2FsbCh0aGlzKSBpbiB0aGUgY2hpbGQncyBjb25zdHJ1Y3RvclxuXHRcdCAqXG5cdFx0ICogIGJhc2VkIG9uIGNsb3N1cmUgbGlicmFyeSdzIGluaGVyaXQgZnVuY3Rpb25cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSBcdGNoaWxkXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gcGFyZW50IChvcHRpb25hbCkgcGFyZW50IHRvIGluaGVyaXQgZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBubyBwYXJlbnQgaXMgc3VwcGxpZWQsIHRoZSBjaGlsZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGluaGVyaXQgZnJvbSBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmV4dGVuZCA9IGZ1bmN0aW9uIChjaGlsZCwgcGFyZW50KSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihwYXJlbnQpKSB7XG5cdCAgICAgICAgICAgIHBhcmVudCA9IFRvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIFRlbXBDb25zdHJ1Y3RvcigpIHtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVGVtcENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7XG5cdCAgICAgICAgY2hpbGQucHJvdG90eXBlID0gbmV3IFRlbXBDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIC8qKiBAb3ZlcnJpZGUgKi9cblx0ICAgICAgICBjaGlsZC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjaGlsZDtcblx0ICAgICAgICBjaGlsZC5fc3VwZXIgPSBwYXJlbnQ7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0Q09OVEVYVFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUHJpdmF0ZSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHR5cGUge0F1ZGlvQ29udGV4dH1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBhdWRpb0NvbnRleHQgPSBudWxsO1xuXHQgICAgLyoqXG5cdFx0ICogIEEgc3RhdGljIHBvaW50ZXIgdG8gdGhlIGF1ZGlvIGNvbnRleHQgYWNjZXNzaWJsZSBhcyBUb25lLmNvbnRleHQuXG5cdFx0ICogIEB0eXBlIHtUb25lLkNvbnRleHR9XG5cdFx0ICogIEBuYW1lIGNvbnRleHRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLCAnY29udGV4dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGF1ZGlvQ29udGV4dDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuQ29udGV4dCAmJiBjb250ZXh0IGluc3RhbmNlb2YgVG9uZS5Db250ZXh0KSB7XG5cdCAgICAgICAgICAgICAgICBhdWRpb0NvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYXVkaW9Db250ZXh0ID0gbmV3IFRvbmUuQ29udGV4dChjb250ZXh0KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL2luaXRpYWxpemUgdGhlIG5ldyBhdWRpbyBjb250ZXh0XG5cdCAgICAgICAgICAgIFRvbmUuQ29udGV4dC5lbWl0KCdpbml0JywgYXVkaW9Db250ZXh0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEB0eXBlIHtUb25lLkNvbnRleHR9XG5cdFx0ICogIEBuYW1lIGNvbnRleHRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUucHJvdG90eXBlLCAnY29udGV4dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuY29udGV4dDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUb25lIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhIGNvbnRleHQgb24gaW5pdCwgYnV0IGlmIHlvdSBhcmUgd29ya2luZ1xuXHRcdCAqICB3aXRoIG90aGVyIGxpYnJhcmllcyB3aGljaCBhbHNvIGNyZWF0ZSBhbiBBdWRpb0NvbnRleHQsIGl0IGNhbiBiZVxuXHRcdCAqICB1c2VmdWwgdG8gc2V0IHlvdXIgb3duLiBJZiB5b3UgYXJlIGdvaW5nIHRvIHNldCB5b3VyIG93biBjb250ZXh0LFxuXHRcdCAqICBiZSBzdXJlIHRvIGRvIGl0IGF0IHRoZSBzdGFydCBvZiB5b3VyIGNvZGUsIGJlZm9yZSBjcmVhdGluZyBhbnkgb2JqZWN0cy5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcGFyYW0ge0F1ZGlvQ29udGV4dH0gY3R4IFRoZSBuZXcgYXVkaW8gY29udGV4dCB0byBzZXRcblx0XHQgKi9cblx0ICAgIFRvbmUuc2V0Q29udGV4dCA9IGZ1bmN0aW9uIChjdHgpIHtcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBjdHg7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVRUUklCVVRFU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBzZWNvbmRzIG9mIDEgcHJvY2Vzc2luZyBibG9jayAoMTI4IHNhbXBsZXMpXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIGJsb2NrVGltZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUucHJvdG90eXBlLCAnYmxvY2tUaW1lJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gMTI4IC8gdGhpcy5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGR1cmF0aW9uIGluIHNlY29uZHMgb2Ygb25lIHNhbXBsZS5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2FtcGxlVGltZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUucHJvdG90eXBlLCAnc2FtcGxlVGltZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIDEgLyB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGV0aGVyIG9yIG5vdCBhbGwgdGhlIHRlY2hub2xvZ2llcyB0aGF0IFRvbmUuanMgcmVsaWVzIG9uIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3Nlci5cblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBuYW1lIHN1cHBvcnRlZFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUsICdzdXBwb3J0ZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBoYXNBdWRpb0NvbnRleHQgPSB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ0F1ZGlvQ29udGV4dCcpIHx8IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnd2Via2l0QXVkaW9Db250ZXh0Jyk7XG5cdCAgICAgICAgICAgIHZhciBoYXNQcm9taXNlcyA9IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnUHJvbWlzZScpO1xuXHQgICAgICAgICAgICB2YXIgaGFzV29ya2VycyA9IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnV29ya2VyJyk7XG5cdCAgICAgICAgICAgIHJldHVybiBoYXNBdWRpb0NvbnRleHQgJiYgaGFzUHJvbWlzZXMgJiYgaGFzV29ya2Vycztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBCb29sZWFuIHZhbHVlIGlmIHRoZSBhdWRpbyBjb250ZXh0IGhhcyBiZWVuIGluaXRpYWxpemVkLlxuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbmFtZSBpbml0aWFsaXplZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUsICdpbml0aWFsaXplZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGF1ZGlvQ29udGV4dCAhPT0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGNvbnRleHQgd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIHJlc29sdmUgIENhbGxiYWNrIHdoZW4gdGhlIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWRcblx0XHQgKiAgQHJldHVybiAge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLmdldENvbnRleHQgPSBmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHQgICAgICAgIGlmIChUb25lLmluaXRpYWxpemVkKSB7XG5cdCAgICAgICAgICAgIHJlc29sdmUoVG9uZS5jb250ZXh0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgcmVzQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXNvbHZlKFRvbmUuY29udGV4dCk7XG5cdCAgICAgICAgICAgICAgICBUb25lLkNvbnRleHQub2ZmKCdpbml0JywgcmVzQ2FsbGJhY2spO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCByZXNDYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB2ZXJzaW9uIG51bWJlclxuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS52ZXJzaW9uID0gJ3IxMic7XG5cdCAgICByZXR1cm4gVG9uZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRW1pdHRlciBnaXZlcyBjbGFzc2VzIHdoaWNoIGV4dGVuZCBpdFxuXHRcdCAqICAgICAgICAgdGhlIGFiaWxpdHkgdG8gbGlzdGVuIGZvciBhbmQgZW1pdCBldmVudHMuXG5cdFx0ICogICAgICAgICBJbnNwaXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZyb20gSmVyb21lIEV0aWVubmUncyBbTWljcm9FdmVudF0oaHR0cHM6Ly9naXRodWIuY29tL2plcm9tZWV0aWVubmUvbWljcm9ldmVudC5qcykuXG5cdFx0ICogICAgICAgICBNSVQgKGMpIDIwMTEgSmVyb21lIEV0aWVubmUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENvbnRhaW5zIGFsbCBvZiB0aGUgZXZlbnRzLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSB7fTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVtaXR0ZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIEJpbmQgYSBjYWxsYmFjayB0byBhIHNwZWNpZmljIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIGV2ZW50ICAgICBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gbGlzdGVuIGZvci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCBpcyBlbWl0dGVkXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9zcGxpdCB0aGUgZXZlbnRcblx0ICAgICAgICB2YXIgZXZlbnRzID0gZXZlbnQuc3BsaXQoL1xcVysvKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnROYW1lID0gZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnROYW1lXSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudE5hbWVdLnB1c2goY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQmluZCBhIGNhbGxiYWNrIHdoaWNoIGlzIG9ubHkgaW52b2tlZCBvbmNlXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgZXZlbnQgICAgIFRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBsaXN0ZW4gZm9yLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50IGlzIGVtaXR0ZWRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuXHQgICAgICAgIHZhciBib3VuZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvL2ludm9rZSB0aGUgY2FsbGJhY2tcblx0ICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgdGhpcy5vZmYoZXZlbnQsIGJvdW5kQ2FsbGJhY2spO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm9uKGV2ZW50LCBib3VuZENhbGxiYWNrKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lci5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBldmVudCAgICAgVGhlIGV2ZW50IHRvIHN0b3AgbGlzdGVuaW5nIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHdoaWNoIHdhcyBib3VuZCB0b1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZXZlbnQgd2l0aCBUb25lLkVtaXR0ZXIub24uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vIGNhbGxiYWNrIGlzIGdpdmVuLCBhbGwgY2FsbGJhY2tzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cyBhcmUgcmVtb3ZlZC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50cyA9IGV2ZW50LnNwbGl0KC9cXFcrLyk7XG5cdCAgICAgICAgZm9yICh2YXIgZXYgPSAwOyBldiA8IGV2ZW50cy5sZW5ndGg7IGV2KyspIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSBldmVudHNbZXZdO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihjYWxsYmFjaykpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnRdID0gW107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBldmVudExpc3QgPSB0aGlzLl9ldmVudHNbZXZlbnRdO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudExpc3RbaV0gPT09IGNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudExpc3Quc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2UgYWxsIG9mIHRoZSBjYWxsYmFja3MgYm91bmQgdG8gdGhlIGV2ZW50XG5cdFx0ICogIHdpdGggYW55IGFyZ3VtZW50cyBwYXNzZWQgaW4uXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGV2ZW50ICBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJncy4uLiBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9ucyBsaXN0ZW5pbmcuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzKSB7XG5cdCAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5zbGljZSgxKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudCkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldmVudExpc3QgPSB0aGlzLl9ldmVudHNbZXZlbnRdLnNsaWNlKDApO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV2ZW50TGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50TGlzdFtpXS5hcHBseSh0aGlzLCBhcmdzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIEVtaXR0ZXIgZnVuY3Rpb25zIChvbi9vZmYvZW1pdCkgdG8gdGhlIG9iamVjdFxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R8RnVuY3Rpb259ICBvYmplY3QgIFRoZSBvYmplY3Qgb3IgY2xhc3MgdG8gZXh0ZW5kLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLm1peGluID0gZnVuY3Rpb24gKG9iamVjdCkge1xuXHQgICAgICAgIHZhciBmdW5jdGlvbnMgPSBbXG5cdCAgICAgICAgICAgICdvbicsXG5cdCAgICAgICAgICAgICdvbmNlJyxcblx0ICAgICAgICAgICAgJ29mZicsXG5cdCAgICAgICAgICAgICdlbWl0J1xuXHQgICAgICAgIF07XG5cdCAgICAgICAgb2JqZWN0Ll9ldmVudHMgPSB7fTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZnVuYyA9IGZ1bmN0aW9uc1tpXTtcblx0ICAgICAgICAgICAgdmFyIGVtaXR0ZXJGdW5jID0gVG9uZS5FbWl0dGVyLnByb3RvdHlwZVtmdW5jXTtcblx0ICAgICAgICAgICAgb2JqZWN0W2Z1bmNdID0gZW1pdHRlckZ1bmM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lLkVtaXR0ZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRW1pdHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgVGltZWxpbmUgY2xhc3MgZm9yIHNjaGVkdWxpbmcgYW5kIG1haW50YWluaW5nIHN0YXRlXG5cdFx0ICogICAgICAgICBhbG9uZyBhIHRpbWVsaW5lLiBBbGwgZXZlbnRzIG11c3QgaGF2ZSBhIFwidGltZVwiIHByb3BlcnR5LlxuXHRcdCAqICAgICAgICAgSW50ZXJuYWxseSwgZXZlbnRzIGFyZSBzdG9yZWQgaW4gdGltZSBvcmRlciBmb3IgZmFzdFxuXHRcdCAqICAgICAgICAgcmV0cmlldmFsLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gW21lbW9yeT1JbmZpbml0eV0gVGhlIG51bWJlciBvZiBwcmV2aW91cyBldmVudHMgdGhhdCBhcmUgcmV0YWluZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnbWVtb3J5J10sIFRvbmUuVGltZWxpbmUpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXJyYXkgb2Ygc2NoZWR1bGVkIHRpbWVsaW5lIGV2ZW50c1xuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1lbW9yeSBvZiB0aGUgdGltZWxpbmUsIGkuZS5cblx0XHRcdCAqICBob3cgbWFueSBldmVudHMgaW4gdGhlIHBhc3QgaXQgd2lsbCByZXRhaW5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1lbW9yeSA9IG9wdGlvbnMubWVtb3J5O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZWxpbmUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUuZGVmYXVsdHMgPSB7ICdtZW1vcnknOiBJbmZpbml0eSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaW1lbGluZSNcblx0XHQgKiAgQG5hbWUgbGVuZ3RoXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGltZWxpbmUucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmUubGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEluc2VydCBhbiBldmVudCBvYmplY3Qgb250byB0aGUgdGltZWxpbmUuIEV2ZW50cyBtdXN0IGhhdmUgYSBcInRpbWVcIiBhdHRyaWJ1dGUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgb2JqZWN0IHRvIGluc2VydCBpbnRvIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAvL3RoZSBldmVudCBuZWVkcyB0byBoYXZlIGEgdGltZSBhdHRyaWJ1dGVcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKGV2ZW50LnRpbWUpKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5UaW1lbGluZTogZXZlbnRzIG11c3QgaGF2ZSBhIHRpbWUgYXR0cmlidXRlJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGV2ZW50LnRpbWUgPSBldmVudC50aW1lLnZhbHVlT2YoKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2goZXZlbnQudGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuc3BsaWNlKGluZGV4ICsgMSwgMCwgZXZlbnQpO1xuXHQgICAgICAgIC8vaWYgdGhlIGxlbmd0aCBpcyBtb3JlIHRoYW4gdGhlIG1lbW9yeSwgcmVtb3ZlIHRoZSBwcmV2aW91cyBvbmVzXG5cdCAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gdGhpcy5tZW1vcnkpIHtcblx0ICAgICAgICAgICAgdmFyIGRpZmYgPSB0aGlzLmxlbmd0aCAtIHRoaXMubWVtb3J5O1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZS5zcGxpY2UoMCwgZGlmZik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgb2JqZWN0IHRvIHJlbW92ZSBmcm9tIHRoZSBsaXN0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fdGltZWxpbmUuaW5kZXhPZihldmVudCk7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZS5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBuZWFyZXN0IGV2ZW50IHdob3NlIHRpbWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGV2ZW50IG9iamVjdCBzZXQgYWZ0ZXIgdGhhdCB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHRpbWUsIGNvbXBhcmF0b3IpIHtcblx0ICAgICAgICBjb21wYXJhdG9yID0gVG9uZS5kZWZhdWx0QXJnKGNvbXBhcmF0b3IsICd0aW1lJyk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUsIGNvbXBhcmF0b3IpO1xuXHQgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4XTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZmlyc3QgZXZlbnQgaW4gdGhlIHRpbWVsaW5lIHdpdGhvdXQgcmVtb3ZpbmcgaXRcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGZpcnN0IGV2ZW50IG9iamVjdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbMF07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZmlyc3QgZXZlbnQgaW4gdGhlIHRpbWVsaW5lIGFuZCByZW1vdmUgaXRcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGZpcnN0IGV2ZW50IG9iamVjdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuc2hpZnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lLnNoaWZ0KCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgZXZlbnQgd2hpY2ggaXMgc2NoZWR1bGVkIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGV2ZW50IG9iamVjdCBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZ2V0QWZ0ZXIgPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSwgY29tcGFyYXRvcik7XG5cdCAgICAgICAgaWYgKGluZGV4ICsgMSA8IHRoaXMuX3RpbWVsaW5lLmxlbmd0aCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXggKyAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgZXZlbnQgYmVmb3JlIHRoZSBldmVudCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGNvbXBhcmF0b3IgV2hpY2ggdmFsdWUgaW4gdGhlIG9iamVjdCB0byBjb21wYXJlXG5cdFx0ICogIEByZXR1cm5zIHtPYmplY3R9IFRoZSBldmVudCBvYmplY3QgYmVmb3JlIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5nZXRCZWZvcmUgPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgbGVuID0gdGhpcy5fdGltZWxpbmUubGVuZ3RoO1xuXHQgICAgICAgIC8vaWYgaXQncyBhZnRlciB0aGUgbGFzdCBpdGVtLCByZXR1cm4gdGhlIGxhc3QgaXRlbVxuXHQgICAgICAgIGlmIChsZW4gPiAwICYmIHRoaXMuX3RpbWVsaW5lW2xlbiAtIDFdW2NvbXBhcmF0b3JdIDwgdGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbbGVuIC0gMV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lLCBjb21wYXJhdG9yKTtcblx0ICAgICAgICBpZiAoaW5kZXggLSAxID49IDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4IC0gMV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgZXZlbnRzIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lLmxlbmd0aCA+IDEpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKGFmdGVyKTtcblx0ICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVtpbmRleF0udGltZSA9PT0gYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL2dldCB0aGUgZmlyc3QgaXRlbSB3aXRoIHRoYXQgdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW2ldLnRpbWUgPT09IGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IHRoaXMuX3RpbWVsaW5lLnNsaWNlKDAsIGluZGV4KTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSB0aGlzLl90aW1lbGluZS5zbGljZSgwLCBpbmRleCArIDEpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBbXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGltZWxpbmUubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgICAgIC8vdGhlIGZpcnN0IGl0ZW0ncyB0aW1lXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVswXS50aW1lID49IGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgZXZlbnRzIGJlZm9yZSBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gY2FuY2VsIGJlZm9yZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmNhbmNlbEJlZm9yZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gdGhpcy5fdGltZWxpbmUuc2xpY2UoaW5kZXggKyAxKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgcHJldmlvdXMgZXZlbnQgaWYgdGhlcmUgaXMgb25lLiBudWxsIG90aGVyd2lzZVxuXHRcdCAqIEBwYXJhbSAge09iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHRvIGZpbmQgdGhlIHByZXZpb3VzIG9uZSBvZlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gICAgICAgVGhlIGV2ZW50IHJpZ2h0IGJlZm9yZSB0aGUgZ2l2ZW4gZXZlbnRcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLnByZXZpb3VzRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl90aW1lbGluZS5pbmRleE9mKGV2ZW50KTtcblx0ICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtpbmRleCAtIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRG9lcyBhIGJpbmFyeSBzZWFyY2ggb24gdGhlIHRpbWVsaW5lIGFycmF5IGFuZCByZXR1cm5zIHRoZVxuXHRcdCAqICBuZWFyZXN0IGV2ZW50IGluZGV4IHdob3NlIHRpbWUgaXMgYWZ0ZXIgb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIElmIGEgdGltZSBpcyBzZWFyY2hlZCBiZWZvcmUgdGhlIGZpcnN0IGluZGV4IGluIHRoZSB0aW1lbGluZSwgLTEgaXMgcmV0dXJuZWQuXG5cdFx0ICogIElmIHRoZSB0aW1lIGlzIGFmdGVyIHRoZSBlbmQsIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBpdGVtIGlzIHJldHVybmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGNvbXBhcmF0b3IgV2hpY2ggdmFsdWUgaW4gdGhlIG9iamVjdCB0byBjb21wYXJlXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9IHRoZSBpbmRleCBpbiB0aGUgdGltZWxpbmUgYXJyYXlcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLl9zZWFyY2ggPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGlmICh0aGlzLl90aW1lbGluZS5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb21wYXJhdG9yID0gVG9uZS5kZWZhdWx0QXJnKGNvbXBhcmF0b3IsICd0aW1lJyk7XG5cdCAgICAgICAgdmFyIGJlZ2lubmluZyA9IDA7XG5cdCAgICAgICAgdmFyIGxlbiA9IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDtcblx0ICAgICAgICB2YXIgZW5kID0gbGVuO1xuXHQgICAgICAgIGlmIChsZW4gPiAwICYmIHRoaXMuX3RpbWVsaW5lW2xlbiAtIDFdW2NvbXBhcmF0b3JdIDw9IHRpbWUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGxlbiAtIDE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHdoaWxlIChiZWdpbm5pbmcgPCBlbmQpIHtcblx0ICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBtaWRwb2ludCBmb3Igcm91Z2hseSBlcXVhbCBwYXJ0aXRpb25cblx0ICAgICAgICAgICAgdmFyIG1pZFBvaW50ID0gTWF0aC5mbG9vcihiZWdpbm5pbmcgKyAoZW5kIC0gYmVnaW5uaW5nKSAvIDIpO1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl90aW1lbGluZVttaWRQb2ludF07XG5cdCAgICAgICAgICAgIHZhciBuZXh0RXZlbnQgPSB0aGlzLl90aW1lbGluZVttaWRQb2ludCArIDFdO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnRbY29tcGFyYXRvcl0gPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIC8vY2hvb3NlIHRoZSBsYXN0IG9uZSB0aGF0IGhhcyB0aGUgc2FtZSB0aW1lXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gbWlkUG9pbnQ7IGkgPCB0aGlzLl90aW1lbGluZS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0ZXN0RXZlbnQgPSB0aGlzLl90aW1lbGluZVtpXTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGVzdEV2ZW50W2NvbXBhcmF0b3JdID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG1pZFBvaW50ID0gaTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbWlkUG9pbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRbY29tcGFyYXRvcl0gPCB0aW1lICYmIG5leHRFdmVudFtjb21wYXJhdG9yXSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBtaWRQb2ludDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFtjb21wYXJhdG9yXSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIC8vc2VhcmNoIGxvd2VyXG5cdCAgICAgICAgICAgICAgICBlbmQgPSBtaWRQb2ludDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vc2VhcmNoIHVwcGVyXG5cdCAgICAgICAgICAgICAgICBiZWdpbm5pbmcgPSBtaWRQb2ludCArIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBpdGVyYXRvci4gQXBwbGllcyBleHRyYSBzYWZldHkgY2hlY2tzIGZvclxuXHRcdCAqICByZW1vdmluZyBpdGVtcyBmcm9tIHRoZSBhcnJheS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFja1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSAgICBsb3dlckJvdW5kXG5cdFx0ICogIEBwYXJhbSAge051bWJlcj19ICAgIHVwcGVyQm91bmRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLl9pdGVyYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBsb3dlckJvdW5kLCB1cHBlckJvdW5kKSB7XG5cdCAgICAgICAgbG93ZXJCb3VuZCA9IFRvbmUuZGVmYXVsdEFyZyhsb3dlckJvdW5kLCAwKTtcblx0ICAgICAgICB1cHBlckJvdW5kID0gVG9uZS5kZWZhdWx0QXJnKHVwcGVyQm91bmQsIHRoaXMuX3RpbWVsaW5lLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNsaWNlKGxvd2VyQm91bmQsIHVwcGVyQm91bmQgKyAxKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXlcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2spO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYXQgb3IgYmVmb3JlIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEJlZm9yZSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciB1cHBlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmICh1cHBlckJvdW5kICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCAwLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hBZnRlciA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciBsb3dlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIGxvd2VyQm91bmQgKyAxKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGJldHdlZW4gdGhlIHN0YXJ0VGltZSBhbmQgZW5kVGltZS4gXG5cdFx0ICogIFRoZSB0aW1lcmFuZ2UgaXMgaW5jbHVzaXZlIG9mIHRoZSBzdGFydFRpbWUsIGJ1dCBleGNsdXNpdmUgb2YgdGhlIGVuZFRpbWUuIFxuXHRcdCAqICByYW5nZSA9IFtzdGFydFRpbWUsIGVuZFRpbWUpLiBcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgc3RhcnRUaW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgZW5kVGltZSBUaGUgZW5kIG9mIHRoZSB0ZXN0IGludGVydmFsLiBcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEJldHdlZW4gPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHZhciBsb3dlckJvdW5kID0gdGhpcy5fc2VhcmNoKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlzLl9zZWFyY2goZW5kVGltZSk7XG5cdCAgICAgICAgaWYgKGxvd2VyQm91bmQgIT09IC0xICYmIHVwcGVyQm91bmQgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVtsb3dlckJvdW5kXS50aW1lICE9PSBzdGFydFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGxvd2VyQm91bmQgKz0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL2V4Y2x1c2l2ZSBvZiB0aGUgZW5kIHRpbWVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW3VwcGVyQm91bmRdLnRpbWUgPT09IGVuZFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIHVwcGVyQm91bmQgLT0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCBsb3dlckJvdW5kLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGxvd2VyQm91bmQgPT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIDAsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGF0IG9yIGFmdGVyIHRoZSBnaXZlbiB0aW1lLiBTaW1pbGFyIHRvXG5cdFx0ICogIGZvckVhY2hBZnRlciwgYnV0IGluY2x1ZGVzIHRoZSBpdGVtKHMpIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEZyb20gPSBmdW5jdGlvbiAodGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL2l0ZXJhdGUgb3ZlciB0aGUgaXRlbXMgaW4gcmV2ZXJzZSBzbyB0aGF0IHJlbW92aW5nIGFuIGl0ZW0gZG9lc24ndCBicmVhayB0aGluZ3Ncblx0ICAgICAgICB2YXIgbG93ZXJCb3VuZCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICAvL3dvcmsgYmFja3dhcmRzIHVudGlsIHRoZSBldmVudCB0aW1lIGlzIGxlc3MgdGhhbiB0aW1lXG5cdCAgICAgICAgd2hpbGUgKGxvd2VyQm91bmQgPj0gMCAmJiB0aGlzLl90aW1lbGluZVtsb3dlckJvdW5kXS50aW1lID49IHRpbWUpIHtcblx0ICAgICAgICAgICAgbG93ZXJCb3VuZC0tO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCBsb3dlckJvdW5kICsgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciB1cHBlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmICh1cHBlckJvdW5kICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRpbWUgPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSwgMCwgdXBwZXJCb3VuZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZWxpbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghd2luZG93Lmhhc093blByb3BlcnR5KCdPZmZsaW5lQXVkaW9Db250ZXh0JykgJiYgd2luZG93Lmhhc093blByb3BlcnR5KCd3ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0JykpIHtcblx0ICAgICAgICAgICAgd2luZG93Lk9mZmxpbmVBdWRpb0NvbnRleHQgPSB3aW5kb3cud2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yZXR1cm5zIHByb21pc2U/XG5cdCAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgT2ZmbGluZUF1ZGlvQ29udGV4dCgxLCAxLCA0NDEwMCk7XG5cdCAgICAgICAgdmFyIHJldCA9IGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTtcblx0ICAgICAgICBpZiAoIShyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuXHQgICAgICAgICAgICBPZmZsaW5lQXVkaW9Db250ZXh0LnByb3RvdHlwZS5fbmF0aXZlX3N0YXJ0UmVuZGVyaW5nID0gT2ZmbGluZUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuc3RhcnRSZW5kZXJpbmc7XG5cdCAgICAgICAgICAgIE9mZmxpbmVBdWRpb0NvbnRleHQucHJvdG90eXBlLnN0YXJ0UmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChkb25lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlLnJlbmRlcmVkQnVmZmVyKTtcblx0ICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX25hdGl2ZV9zdGFydFJlbmRlcmluZygpO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghd2luZG93Lmhhc093blByb3BlcnR5KCdBdWRpb0NvbnRleHQnKSAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3dlYmtpdEF1ZGlvQ29udGV4dCcpKSB7XG5cdCAgICAgICAgICAgIHdpbmRvdy5BdWRpb0NvbnRleHQgPSB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL25vdCBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgYnV0IG9ubHkgYW4gQVBJIHBsYWNlaG9sZGVyXG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNsb3NlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0Z1bmN0aW9uKHRoaXMuc3VzcGVuZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnN1c3BlbmQoKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9ub3QgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnRcblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUucmVzdW1lKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NyZWF0ZUdhaW5cblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2FpbiAmJiBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUdhaW5Ob2RlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2FpbiA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2Fpbk5vZGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY3JlYXRlRGVsYXlcblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlRGVsYXkgJiYgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheU5vZGUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheSA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlRGVsYXlOb2RlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3Rlc3QgZGVjb2RlQXVkaW9EYXRhIHJldHVybnMgYSBwcm9taXNlXG5cdCAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vaGF5b25hby93ZWItYXVkaW8tYXBpLXNoaW0vYmxvYi9tYXN0ZXIvc3JjL0F1ZGlvQ29udGV4dC5qc1xuXHQgICAgICAgIC8vIE1JVCBMaWNlbnNlIChjKSAyMDE1IEBtb2hheW9uYW9cblx0ICAgICAgICB2YXIgZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSA9IGZhbHNlO1xuXHQgICAgICAgIHZhciBvZmZsaW5lQ29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDEsIDEsIDQ0MTAwKTtcblx0ICAgICAgICB2YXIgYXVkaW9EYXRhID0gbmV3IFVpbnQzMkFycmF5KFtcblx0ICAgICAgICAgICAgMTE3OTAxMTQxMCxcblx0ICAgICAgICAgICAgNDgsXG5cdCAgICAgICAgICAgIDExNjMyODA3MjcsXG5cdCAgICAgICAgICAgIDU0NDUwMTA5NCxcblx0ICAgICAgICAgICAgMTYsXG5cdCAgICAgICAgICAgIDEzMTA3Myxcblx0ICAgICAgICAgICAgNDQxMDAsXG5cdCAgICAgICAgICAgIDE3NjQwMCxcblx0ICAgICAgICAgICAgMTA0ODU4MCxcblx0ICAgICAgICAgICAgMTYzNTAxNzA2MCxcblx0ICAgICAgICAgICAgOCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMFxuXHQgICAgICAgIF0pLmJ1ZmZlcjtcblx0ICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICB2YXIgcmV0ID0gb2ZmbGluZUNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKGF1ZGlvRGF0YSk7XG5cdCAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdCAgICAgICAgICAgICAgICBkZWNvZGVBdWRpb0RhdGFQcm9taXNlID0gdHJ1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSA9IGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIWRlY29kZUF1ZGlvRGF0YVByb21pc2UpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5fbmF0aXZlX2RlY29kZUF1ZGlvRGF0YSA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuZGVjb2RlQXVkaW9EYXRhO1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmRlY29kZUF1ZGlvRGF0YSA9IGZ1bmN0aW9uIChhdWRpb0RhdGEpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoc3VjY2VzcywgZXJyb3IpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9uYXRpdmVfZGVjb2RlQXVkaW9EYXRhKGF1ZGlvRGF0YSwgc3VjY2VzcywgZXJyb3IpO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBBdWRpb0NvbnRleHQuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICogIEBwYXJhbSB7QXVkaW9Db250ZXh0PX0gY29udGV4dCBvcHRpb25hbGx5IHBhc3MgaW4gYSBjb250ZXh0XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydjb250ZXh0J10sIFRvbmUuQ29udGV4dCk7XG5cdCAgICAgICAgaWYgKCFvcHRpb25zLmNvbnRleHQpIHtcblx0ICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0ID0gbmV3IHdpbmRvdy5BdWRpb0NvbnRleHQoKTtcblx0ICAgICAgICAgICAgaWYgKCFvcHRpb25zLmNvbnRleHQpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGNyZWF0ZSBBdWRpb0NvbnRleHQuIFBvc3NpYmx5IHRvbyBtYW55IEF1ZGlvQ29udGV4dHMgcnVubmluZyBhbHJlYWR5LicpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2NvbnRleHQgPSBvcHRpb25zLmNvbnRleHQ7XG5cdCAgICAgICAgLy8gZXh0ZW5kIGFsbCBvZiB0aGUgbWV0aG9kc1xuXHQgICAgICAgIGZvciAodmFyIHByb3AgaW4gdGhpcy5fY29udGV4dCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZWZpbmVQcm9wZXJ0eSh0aGlzLl9jb250ZXh0LCBwcm9wKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlZmF1bHQgbGF0ZW5jeSBoaW50XG5cdFx0XHQgKiAgQHR5cGUgIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xhdGVuY3lIaW50ID0gb3B0aW9ucy5sYXRlbmN5SGludDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBvYmplY3QgY29udGFpbmluZyBhbGwgb2YgdGhlIGNvbnN0YW50cyBBdWRpb0J1ZmZlclNvdXJjZU5vZGVzXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IHt9O1xuXHQgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgLy8gV09SS0VSXG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgZXZlbnRzIGFyZSBzY2hlZHVsZWRcblx0XHRcdCAqICBpbnRvIHRoZSBmdXR1cmVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG9va0FoZWFkID0gb3B0aW9ucy5sb29rQWhlYWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSByZWZlcmVuY2UgdG8gdGhlIGFjdHVhbCBjb21wdXRlZCB1cGRhdGUgaW50ZXJ2YWxcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29tcHV0ZWRVcGRhdGVJbnRlcnZhbCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSByZWxpYWJsZSBjYWxsYmFjayBtZXRob2Rcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7VGlja2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGlja2VyID0gbmV3IFRpY2tlcih0aGlzLmVtaXQuYmluZCh0aGlzLCAndGljaycpLCBvcHRpb25zLmNsb2NrU291cmNlLCBvcHRpb25zLnVwZGF0ZUludGVydmFsKTtcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8vIFRJTUVPVVRTXG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIHNldFRpbWVvdXQgZXZlbnRzLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZW91dHMgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0aW1lb3V0IGlkIGNvdW50ZXJcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lb3V0SWRzID0gMDtcblx0ICAgICAgICB0aGlzLm9uKCd0aWNrJywgdGhpcy5fdGltZW91dExvb3AuYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Db250ZXh0LCBUb25lLkVtaXR0ZXIpO1xuXHQgICAgVG9uZS5FbWl0dGVyLm1peGluKFRvbmUuQ29udGV4dCk7XG5cdCAgICAvKipcblx0XHQgKiBkZWZhdWx0c1xuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdjbG9ja1NvdXJjZSc6ICd3b3JrZXInLFxuXHQgICAgICAgICdsYXRlbmN5SGludCc6ICdpbnRlcmFjdGl2ZScsXG5cdCAgICAgICAgJ2xvb2tBaGVhZCc6IDAuMSxcblx0ICAgICAgICAndXBkYXRlSW50ZXJ2YWwnOiAwLjAzXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmluZSBhIHByb3BlcnR5IG9uIHRoaXMgVG9uZS5Db250ZXh0LlxuXHRcdCAqICBUaGlzIGlzIHVzZWQgdG8gZXh0ZW5kIHRoZSBuYXRpdmUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvQ29udGV4dH0gIGNvbnRleHRcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5fZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoY29udGV4dCwgcHJvcCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpc1twcm9wXSkpIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3AsIHtcblx0ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGV4dFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXS5iaW5kKGNvbnRleHQpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjb250ZXh0W3Byb3BdID0gdmFsO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IGF1ZGlvIGNvbnRleHQgdGltZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQuY3VycmVudFRpbWUgKyB0aGlzLmxvb2tBaGVhZDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUHJvbWlzZSB3aGljaCBpcyBpbnZva2VkIHdoZW4gdGhlIGNvbnRleHQgaXMgcnVubmluZy5cblx0XHQgKiAgVHJpZXMgdG8gcmVzdW1lIHRoZSBjb250ZXh0IGlmIGl0J3Mgbm90IHN0YXJ0ZWQuXG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5yZWFkeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGRvbmUpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQuc3RhdGUgPT09ICdydW5uaW5nJykge1xuXHQgICAgICAgICAgICAgICAgZG9uZSgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5yZXN1bWUoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFByb21pc2Ugd2hpY2ggaXMgaW52b2tlZCB3aGVuIHRoZSBjb250ZXh0IGlzIHJ1bm5pbmcuXG5cdFx0ICogIFRyaWVzIHRvIHJlc3VtZSB0aGUgY29udGV4dCBpZiBpdCdzIG5vdCBzdGFydGVkLlxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQuY2xvc2UoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgVG9uZS5Db250ZXh0LmVtaXQoJ2Nsb3NlJywgdGhpcyk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2VuZXJhdGUgYSBsb29wZWQgYnVmZmVyIGF0IHNvbWUgY29uc3RhbnQgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHZhbFxuXHRcdCAqICBAcmV0dXJuICB7QnVmZmVyU291cmNlTm9kZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuZ2V0Q29uc3RhbnQgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2NvbnN0YW50c1t2YWxdKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25zdGFudHNbdmFsXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5fY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgMTI4LCB0aGlzLl9jb250ZXh0LnNhbXBsZVJhdGUpO1xuXHQgICAgICAgICAgICB2YXIgYXJyID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgYXJyW2ldID0gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBjb25zdGFudCA9IHRoaXMuX2NvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LmNoYW5uZWxDb3VudCA9IDE7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgICAgICBjb25zdGFudC5idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgICAgIGNvbnN0YW50Lmxvb3AgPSB0cnVlO1xuXHQgICAgICAgICAgICBjb25zdGFudC5zdGFydCgwKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzW3ZhbF0gPSBjb25zdGFudDtcblx0ICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByaXZhdGUgbG9vcCB3aGljaCBrZWVwcyB0cmFjayBvZiB0aGUgY29udGV4dCBzY2hlZHVsZWQgdGltZW91dHNcblx0XHQgKiAgSXMgaW52b2tlZCBmcm9tIHRoZSBjbG9jayBzb3VyY2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuX3RpbWVvdXRMb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHdoaWxlICh0aGlzLl90aW1lb3V0cyAmJiB0aGlzLl90aW1lb3V0cy5sZW5ndGggJiYgdGhpcy5fdGltZW91dHMucGVlaygpLnRpbWUgPD0gbm93KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRzLnNoaWZ0KCkuY2FsbGJhY2soKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEEgc2V0VGltZW91dCB3aGljaCBpcyBnYXVyZW50ZWVkIGJ5IHRoZSBjbG9jayBzb3VyY2UuXG5cdFx0ICogIEFsc28gcnVucyBpbiB0aGUgb2ZmbGluZSBjb250ZXh0LlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGZuICAgICAgIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHQgKiAgQHBhcmFtICB7U2Vjb25kc30gICAgdGltZW91dCAgVGhlIHRpbWVvdXQgaW4gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfSBJRCB0byB1c2Ugd2hlbiBpbnZva2luZyBUb25lLkNvbnRleHQuY2xlYXJUaW1lb3V0XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAoZm4sIHRpbWVvdXQpIHtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0SWRzKys7XG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dHMuYWRkKHtcblx0ICAgICAgICAgICAgY2FsbGJhY2s6IGZuLFxuXHQgICAgICAgICAgICB0aW1lOiBub3cgKyB0aW1lb3V0LFxuXHQgICAgICAgICAgICBpZDogdGhpcy5fdGltZW91dElkc1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aW1lb3V0SWRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhcnMgYSBwcmV2aW91c2x5IHNjaGVkdWxlZCB0aW1lb3V0IHdpdGggVG9uZS5jb250ZXh0LnNldFRpbWVvdXRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgaWQgIFRoZSBJRCByZXR1cm5lZCBmcm9tIHNldFRpbWVvdXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ29udGV4dH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24gKGlkKSB7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LmlkID09PSBpZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUoZXZlbnQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEhvdyBvZnRlbiB0aGUgV2ViIFdvcmtlciBjYWxsYmFjayBpcyBpbnZva2VkLlxuXHRcdCAqICBUaGlzIG51bWJlciBjb3JyZXNwb25kcyB0byBob3cgcmVzcG9uc2l2ZSB0aGUgc2NoZWR1bGluZ1xuXHRcdCAqICBjYW4gYmUuIENvbnRleHQudXBkYXRlSW50ZXJ2YWwgKyBDb250ZXh0Lmxvb2tBaGVhZCBnaXZlcyB5b3UgdGhlXG5cdFx0ICogIHRvdGFsIGxhdGVuY3kgYmV0d2VlbiBzY2hlZHVsaW5nIGFuIGV2ZW50IGFuZCBoZWFyaW5nIGl0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db250ZXh0I1xuXHRcdCAqICBAbmFtZSB1cGRhdGVJbnRlcnZhbFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udGV4dC5wcm90b3R5cGUsICd1cGRhdGVJbnRlcnZhbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tlci51cGRhdGVJbnRlcnZhbDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlci51cGRhdGVJbnRlcnZhbCA9IGludGVydmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFdoYXQgdGhlIHNvdXJjZSBvZiB0aGUgY2xvY2sgaXMsIGVpdGhlciBcIndvcmtlclwiIChXZWIgV29ya2VyIFtkZWZhdWx0XSksXG5cdFx0ICogIFwidGltZW91dFwiIChzZXRUaW1lb3V0KSwgb3IgXCJvZmZsaW5lXCIgKG5vbmUpLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db250ZXh0I1xuXHRcdCAqICBAbmFtZSBjbG9ja1NvdXJjZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udGV4dC5wcm90b3R5cGUsICdjbG9ja1NvdXJjZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tlci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHR5cGUgb2YgcGxheWJhY2ssIHdoaWNoIGFmZmVjdHMgdHJhZGVvZmZzIGJldHdlZW4gYXVkaW9cblx0XHQgKiAgb3V0cHV0IGxhdGVuY3kgYW5kIHJlc3BvbnNpdmVuZXNzLlxuXHRcdCAqXG5cdFx0ICogIEluIGFkZGl0aW9uIHRvIHNldHRpbmcgdGhlIHZhbHVlIGluIHNlY29uZHMsIHRoZSBsYXRlbmN5SGludCBhbHNvXG5cdFx0ICogIGFjY2VwdHMgdGhlIHN0cmluZ3MgXCJpbnRlcmFjdGl2ZVwiIChwcmlvcml0aXplcyBsb3cgbGF0ZW5jeSksXG5cdFx0ICogIFwicGxheWJhY2tcIiAocHJpb3JpdGl6ZXMgc3VzdGFpbmVkIHBsYXliYWNrKSwgXCJiYWxhbmNlZFwiIChiYWxhbmNlc1xuXHRcdCAqICBsYXRlbmN5IGFuZCBwZXJmb3JtYW5jZSksIGFuZCBcImZhc3Rlc3RcIiAobG93ZXN0IGxhdGVuY3ksIG1pZ2h0IGdsaXRjaCBtb3JlIG9mdGVuKS5cblx0XHQgKiAgQHR5cGUge1N0cmluZ3xTZWNvbmRzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db250ZXh0I1xuXHRcdCAqICBAbmFtZSBsYXRlbmN5SGludFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHRoZSBsb29rQWhlYWQgdG8gMC4zIHNlY29uZHNcblx0XHQgKiBUb25lLmNvbnRleHQubGF0ZW5jeUhpbnQgPSAwLjM7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db250ZXh0LnByb3RvdHlwZSwgJ2xhdGVuY3lIaW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGF0ZW5jeUhpbnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChoaW50KSB7XG5cdCAgICAgICAgICAgIHZhciBsb29rQWhlYWQgPSBoaW50O1xuXHQgICAgICAgICAgICB0aGlzLl9sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzU3RyaW5nKGhpbnQpKSB7XG5cdCAgICAgICAgICAgICAgICBzd2l0Y2ggKGhpbnQpIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2ludGVyYWN0aXZlJzpcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjE7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdwbGF5YmFjayc6XG5cdCAgICAgICAgICAgICAgICAgICAgbG9va0FoZWFkID0gMC44O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubGF0ZW5jeUhpbnQgPSBoaW50O1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnYmFsYW5jZWQnOlxuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuMjU7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdmYXN0ZXN0Jzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gJ2ludGVyYWN0aXZlJztcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjAxO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZUludGVydmFsID0gbG9va0FoZWFkIC8gMztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbmxpa2Ugb3RoZXIgZGlzcG9zZSBtZXRob2RzLCB0aGlzIHJldHVybnMgYSBQcm9taXNlXG5cdFx0ICogIHdoaWNoIGV4ZWN1dGVzIHdoZW4gdGhlIGNvbnRleHQgaXMgY2xvc2VkIGFuZCBkaXNwb3NlZFxuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLmNsb3NlKCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIgPSBudWxsO1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lb3V0cy5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRzID0gbnVsbDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY29uIGluIHRoaXMuX2NvbnN0YW50cykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzW2Nvbl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IG51bGw7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgQSBjbGFzcyB3aGljaCBwcm92aWRlcyBhIHJlbGlhYmxlIGNhbGxiYWNrIHVzaW5nIGVpdGhlclxuXHRcdCAqICAgICAgICBhIFdlYiBXb3JrZXIsIG9yIGlmIHRoYXQgaXNuJ3Qgc3VwcG9ydGVkLCBmYWxscyBiYWNrIHRvIHNldFRpbWVvdXQuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBUaWNrZXIgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHR5cGUsIHVwZGF0ZUludGVydmFsKSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBFaXRoZXIgXCJ3b3JrZXJcIiBvciBcInRpbWVvdXRcIlxuXHRcdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB1cGRhdGUgaW50ZXJ2YWwgb2YgdGhlIHdvcmtlclxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl91cGRhdGVJbnRlcnZhbCA9IHVwZGF0ZUludGVydmFsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGNhbGxiYWNrIHRvIGludm9rZSBhdCByZWd1bGFyIGludGVydmFsc1xuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gVG9uZS5kZWZhdWx0QXJnKGNhbGxiYWNrLCBUb25lLm5vT3ApO1xuXHQgICAgICAgIC8vY3JlYXRlIHRoZSBjbG9jayBzb3VyY2UgZm9yIHRoZSBmaXJzdCB0aW1lXG5cdCAgICAgICAgdGhpcy5fY3JlYXRlQ2xvY2soKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcG9zc2libGUgdGlja2VyIHR5cGVzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLlR5cGUgPSB7XG5cdCAgICAgICAgV29ya2VyOiAnd29ya2VyJyxcblx0ICAgICAgICBUaW1lb3V0OiAndGltZW91dCcsXG5cdCAgICAgICAgT2ZmbGluZTogJ29mZmxpbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdlbmVyYXRlIGEgd2ViIHdvcmtlclxuXHRcdCAqICBAcmV0dXJuICB7V2ViV29ya2VyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fY3JlYXRlV29ya2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vVVJMIFNoaW1cblx0ICAgICAgICB3aW5kb3cuVVJMID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xuXHQgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoWy8vdGhlIGluaXRpYWwgdGltZW91dCB0aW1lXG5cdCAgICAgICAgICAgICd2YXIgdGltZW91dFRpbWUgPSAnICsgKHRoaXMuX3VwZGF0ZUludGVydmFsICogMTAwMCkudG9GaXhlZCgxKSArICc7JyArIC8vb25tZXNzYWdlIGNhbGxiYWNrXG5cdCAgICAgICAgICAgICdzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKG1zZyl7JyArICdcXHR0aW1lb3V0VGltZSA9IHBhcnNlSW50KG1zZy5kYXRhKTsnICsgJ307JyArIC8vdGhlIHRpY2sgZnVuY3Rpb24gd2hpY2ggcG9zdHMgYSBtZXNzYWdlXG5cdCAgICAgICAgICAgIC8vYW5kIHNjaGVkdWxlcyBhIG5ldyB0aWNrXG5cdCAgICAgICAgICAgICdmdW5jdGlvbiB0aWNrKCl7JyArICdcXHRzZXRUaW1lb3V0KHRpY2ssIHRpbWVvdXRUaW1lKTsnICsgJ1xcdHNlbGYucG9zdE1lc3NhZ2UoXFwndGlja1xcJyk7JyArICd9JyArIC8vY2FsbCB0aWNrIGluaXRpYWxseVxuXHQgICAgICAgICAgICAndGljaygpOyddKTtcblx0ICAgICAgICB2YXIgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cdCAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoYmxvYlVybCk7XG5cdCAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd29ya2VyID0gd29ya2VyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENyZWF0ZSBhIHRpbWVvdXQgbG9vcFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9jcmVhdGVUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGltZW91dCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9jYWxsYmFjaygpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5fdXBkYXRlSW50ZXJ2YWwgKiAxMDAwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDcmVhdGUgdGhlIGNsb2NrIHNvdXJjZS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fY3JlYXRlQ2xvY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRpY2tlci5UeXBlLldvcmtlcikge1xuXHQgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlV29ya2VyKCk7XG5cdCAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHdvcmtlcnMgbm90IHN1cHBvcnRlZCwgZmFsbGJhY2sgdG8gdGltZW91dFxuXHQgICAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IFRpY2tlci5UeXBlLlRpbWVvdXQ7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVDbG9jaygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUaWNrZXIuVHlwZS5UaW1lb3V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVRpbWVvdXQoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQG1lbWJlck9mIFRpY2tlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHVwZGF0ZUludGVydmFsXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUaWNrZXIucHJvdG90eXBlLCAndXBkYXRlSW50ZXJ2YWwnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVJbnRlcnZhbDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUludGVydmFsID0gTWF0aC5tYXgoaW50ZXJ2YWwsIDEyOCAvIDQ0MTAwKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRpY2tlci5UeXBlLldvcmtlcikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd29ya2VyLnBvc3RNZXNzYWdlKE1hdGgubWF4KGludGVydmFsICogMTAwMCwgMSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgdGlja2VyLCBlaXRoZXIgYSB3b3JrZXIgb3IgYSB0aW1lb3V0XG5cdFx0ICogQG1lbWJlck9mIFRpY2tlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRpY2tlci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGlzcG9zZUNsb2NrKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9jcmVhdGVDbG9jaygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXAgdGhlIGN1cnJlbnQgY2xvY2sgc291cmNlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuX2Rpc3Bvc2VDbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdGltZW91dCkge1xuXHQgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5fd29ya2VyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3dvcmtlci50ZXJtaW5hdGUoKTtcblx0ICAgICAgICAgICAgdGhpcy5fd29ya2VyLm9ubWVzc2FnZSA9IG51bGw7XG5cdCAgICAgICAgICAgIHRoaXMuX3dvcmtlciA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9kaXNwb3NlQ2xvY2soKTtcblx0ICAgICAgICB0aGlzLl9jYWxsYmFjayA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNoaW0gYWxsIGNvbm5lY3QvZGlzY29ubmVjdCBhbmQgc29tZSBkZXByZWNhdGVkIG1ldGhvZHMgd2hpY2ggYXJlIHN0aWxsIGluXG5cdFx0ICogIHNvbWUgb2xkZXIgaW1wbGVtZW50YXRpb25zLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5nZXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbmF0aXZlQ29ubmVjdCA9IEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdDtcblx0ICAgICAgICB2YXIgbmF0aXZlRGlzY29ubmVjdCA9IEF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdDtcblx0ICAgICAgICAvL3JlcGxhY2UgdGhlIG9sZCBjb25uZWN0IG1ldGhvZFxuXHQgICAgICAgIGZ1bmN0aW9uIHRvbmVDb25uZWN0KEIsIG91dE51bSwgaW5OdW0pIHtcblx0ICAgICAgICAgICAgaWYgKEIuaW5wdXQpIHtcblx0ICAgICAgICAgICAgICAgIGluTnVtID0gVG9uZS5kZWZhdWx0QXJnKGluTnVtLCAwKTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkoQi5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0KEIuaW5wdXRbaW5OdW1dKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdChCLmlucHV0LCBvdXROdW0sIGluTnVtKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKEIgaW5zdGFuY2VvZiBBdWRpb05vZGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlQ29ubmVjdC5jYWxsKHRoaXMsIEIsIG91dE51bSwgaW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQjtcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVDb25uZWN0LmNhbGwodGhpcywgQiwgb3V0TnVtKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEI7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXJyb3IgY29ubmVjdGluZyB0byBub2RlOiAnICsgQiArICdcXG4nICsgZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yZXBsYWNlIHRoZSBvbGQgZGlzY29ubmVjdCBtZXRob2Rcblx0ICAgICAgICBmdW5jdGlvbiB0b25lRGlzY29ubmVjdChCLCBvdXROdW0sIGluTnVtKSB7XG5cdCAgICAgICAgICAgIGlmIChCICYmIEIuaW5wdXQgJiYgVG9uZS5pc0FycmF5KEIuaW5wdXQpKSB7XG5cdCAgICAgICAgICAgICAgICBpbk51bSA9IFRvbmUuZGVmYXVsdEFyZyhpbk51bSwgMCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoQi5pbnB1dFtpbk51bV0sIG91dE51bSwgMCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoQiAmJiBCLmlucHV0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoQi5pbnB1dCwgb3V0TnVtLCBpbk51bSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgICAgIG5hdGl2ZURpc2Nvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Vycm9yIGRpc2Nvbm5lY3Rpbmcgbm9kZTogJyArIEIgKyAnXFxuJyArIGUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3QgIT09IHRvbmVDb25uZWN0KSB7XG5cdCAgICAgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IHRvbmVDb25uZWN0O1xuXHQgICAgICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSB0b25lRGlzY29ubmVjdDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vIHNldCB0aGUgYXVkaW8gY29udGV4dCBpbml0aWFsbHksIGFuZCBpZiBvbmUgaXMgbm90IGFscmVhZHkgY3JlYXRlZFxuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkICYmICFUb25lLmluaXRpYWxpemVkKSB7XG5cdCAgICAgICAgVG9uZS5jb250ZXh0ID0gbmV3IFRvbmUuQ29udGV4dCgpO1xuXHQgICAgICAgIC8vIGxvZyBvbiBmaXJzdCBpbml0aWFsaXphdGlvblxuXHQgICAgICAgIC8vIGFsbG93IG9wdGlvbmFsIHNpbGVuY2luZyBvZiB0aGlzIGxvZ1xuXHQgICAgICAgIGlmICghd2luZG93LlRPTkVfU0lMRU5DRV9WRVJTSU9OX0xPR0dJTkcpIHtcblx0ICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblx0ICAgICAgICAgICAgY29uc29sZS5sb2coJyVjICogVG9uZS5qcyAnICsgVG9uZS52ZXJzaW9uICsgJyAqICcsICdiYWNrZ3JvdW5kOiAjMDAwOyBjb2xvcjogI2ZmZicpO1xuXHQgICAgICAgIH1cblx0ICAgIH0gZWxzZSBpZiAoIVRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblx0ICAgICAgICBjb25zb2xlLndhcm4oJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFRvbmUuanMnKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBUb25lLkNvbnRleHQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BdWRpb05vZGUgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNsYXNzZXMgd2hpY2ggcHJvY2VzcyBhdWRpby5cblx0XHQgKiAgICAgICAgIEF1ZGlvTm9kZXMgaGF2ZSBpbnB1dHMgYW5kIG91dHB1dHMuXG5cdFx0ICogIEBwYXJhbVx0e0F1ZGlvQ29udGV4dD19IGNvbnRleHRcdFRoZSBhdWRpbyBjb250ZXh0IHRvIHVzZSB3aXRoIHRoZSBjbGFzc1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvL3VzZSB0aGUgZGVmYXVsdCBjb250ZXh0IGlmIG9uZSBpcyBub3QgcGFzc2VkIGluXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydjb250ZXh0J10sIHsgJ2NvbnRleHQnOiBUb25lLmNvbnRleHQgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgQXVkaW9Db250ZXh0IG9mIHRoaXMgaW5zdGFuY2Vcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7QXVkaW9Db250ZXh0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG9wdGlvbnMuY29udGV4dDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGF1ZGlvIGNvbnRleHQgYmVsb25naW5nIHRvIHRoaXMgaW5zdGFuY2UuXG5cdFx0ICogQHR5cGUge1RvbmUuQ29udGV4dH1cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogQG5hbWUgY29udGV4dFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NvbnRleHQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENyZWF0ZSBpbnB1dCBhbmQgb3V0cHV0cyBmb3IgdGhpcyBvYmplY3QuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIFtpbnB1dD0wXSAgIFRoZSBudW1iZXIgb2YgaW5wdXRzXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIFtvdXRwdXRzPTBdICBUaGUgbnVtYmVyIG9mIG91dHB1dHNcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQXVkaW9Ob2RlfSAgdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNyZWF0ZUluc091dHMgPSBmdW5jdGlvbiAoaW5wdXRzLCBvdXRwdXRzKSB7XG5cdCAgICAgICAgaWYgKGlucHV0cyA9PT0gMSkge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGlucHV0cyA+IDEpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dCA9IG5ldyBBcnJheShpbnB1dHMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAob3V0cHV0cyA9PT0gMSkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChvdXRwdXRzID4gMSkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBBcnJheShvdXRwdXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYW5uZWxDb3VudCBpcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHVzZWQgd2hlbiB1cC1taXhpbmcgYW5kIGRvd24tbWl4aW5nXG5cdFx0ICogIGNvbm5lY3Rpb25zIHRvIGFueSBpbnB1dHMgdG8gdGhlIG5vZGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIgZXhjZXB0IGZvclxuXHRcdCAqICBzcGVjaWZpYyBub2RlcyB3aGVyZSBpdHMgdmFsdWUgaXMgc3BlY2lhbGx5IGRldGVybWluZWQuXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBjaGFubmVsQ291bnRcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnY2hhbm5lbENvdW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYykge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50ID0gYztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjaGFubmVsQ291bnRNb2RlIGRldGVybWluZXMgaG93IGNoYW5uZWxzIHdpbGwgYmUgY291bnRlZCB3aGVuIHVwLW1peGluZyBhbmRcblx0XHQgKiAgZG93bi1taXhpbmcgY29ubmVjdGlvbnMgdG8gYW55IGlucHV0cyB0byB0aGUgbm9kZS5cblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJtYXhcIi4gVGhpcyBhdHRyaWJ1dGUgaGFzIG5vIGVmZmVjdCBmb3Igbm9kZXMgd2l0aCBubyBpbnB1dHMuXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgY2hhbm5lbENvdW50TW9kZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjaGFubmVsQ291bnRNb2RlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50TW9kZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG0pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxDb3VudE1vZGUgPSBtO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYW5uZWxJbnRlcnByZXRhdGlvbiBkZXRlcm1pbmVzIGhvdyBpbmRpdmlkdWFsIGNoYW5uZWxzIHdpbGwgYmUgdHJlYXRlZFxuXHRcdCAqICB3aGVuIHVwLW1peGluZyBhbmQgZG93bi1taXhpbmcgY29ubmVjdGlvbnMgdG8gYW55IGlucHV0cyB0byB0aGUgbm9kZS5cblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJzcGVha2Vyc1wiLlxuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIGNoYW5uZWxJbnRlcnByZXRhdGlvblxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjaGFubmVsSW50ZXJwcmV0YXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsSW50ZXJwcmV0YXRpb247XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsSW50ZXJwcmV0YXRpb24gPSBpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaW5wdXRzIGZlZWRpbmcgaW50byB0aGUgQXVkaW9Ob2RlLlxuXHRcdCAqICBGb3Igc291cmNlIG5vZGVzLCB0aGlzIHdpbGwgYmUgMC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgbnVtYmVyT2ZJbnB1dHNcblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdudW1iZXJPZklucHV0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5sZW5ndGg7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIG91dHB1dHMgY29taW5nIG91dCBvZiB0aGUgQXVkaW9Ob2RlLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBudW1iZXJPZk91dHB1dHNcblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdudW1iZXJPZk91dHB1dHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQubGVuZ3RoO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDYWxsZWQgd2hlbiBhbiBhdWRpbyBwYXJhbSBjb25uZWN0cyB0byB0aGlzIG5vZGVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLl9vbkNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdGhlIG91dHB1dCBvZiBhIFRvbmVOb2RlIHRvIGFuIEF1ZGlvUGFyYW0sIEF1ZGlvTm9kZSwgb3IgVG9uZU5vZGVcblx0XHQgKiAgQHBhcmFtICB7VG9uZSB8IEF1ZGlvUGFyYW0gfCBBdWRpb05vZGV9IHVuaXRcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBvdXRwdXQgdG8gY29ubmVjdCBmcm9tXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBpbnB1dCB0byBjb25uZWN0IHRvXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAodW5pdCwgb3V0cHV0TnVtLCBpbnB1dE51bSkge1xuXHQgICAgICAgIGlmICh1bml0Ll9vbkNvbm5lY3QpIHtcblx0ICAgICAgICAgICAgdW5pdC5fb25Db25uZWN0KHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICBvdXRwdXROdW0gPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TnVtLCAwKTtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXRbb3V0cHV0TnVtXS5jb25uZWN0KHVuaXQsIDAsIGlucHV0TnVtKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dC5jb25uZWN0KHVuaXQsIG91dHB1dE51bSwgaW5wdXROdW0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZGlzY29ubmVjdCB0aGUgb3V0cHV0XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfEF1ZGlvTm9kZX0gb3V0cHV0IEVpdGhlciB0aGUgb3V0cHV0IGluZGV4IHRvIGRpc2Nvbm5lY3Rcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIG91dHB1dCBpcyBhbiBhcnJheSwgb3IgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgdG8gZGlzY29ubmVjdCBmcm9tLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBvdXRwdXROdW0sIGlucHV0TnVtKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIoZGVzdGluYXRpb24pKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFtkZXN0aW5hdGlvbl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgb3V0cHV0TnVtID0gVG9uZS5kZWZhdWx0QXJnKG91dHB1dE51bSwgMCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFtvdXRwdXROdW1dLmRpc2Nvbm5lY3QoZGVzdGluYXRpb24sIDAsIGlucHV0TnVtKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmRpc2Nvbm5lY3QuYXBwbHkodGhpcy5vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhpcyBub2RlIHRvIHRoZSByZXN0IG9mIHRoZSBub2RlcyBpbiBzZXJpZXMuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vY29ubmVjdCBhIG5vZGUgdG8gYW4gZWZmZWN0LCBwYW5Wb2wgYW5kIHRoZW4gdG8gdGhlIG1hc3RlciBvdXRwdXRcblx0XHQgKiAgbm9kZS5jaGFpbihlZmZlY3QsIHBhblZvbCwgVG9uZS5NYXN0ZXIpO1xuXHRcdCAqICBAcGFyYW0gey4uLkF1ZGlvUGFyYW18VG9uZXxBdWRpb05vZGV9IG5vZGVzXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNoYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBjdXJyZW50VW5pdCA9IHRoaXM7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHRvVW5pdCA9IGFyZ3VtZW50c1tpXTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQuY29ubmVjdCh0b1VuaXQpO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdCA9IHRvVW5pdDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGlzIG5vZGUgdG8gdGhlIHJlc3Qgb2YgdGhlIG5vZGVzIGluIHBhcmFsbGVsLlxuXHRcdCAqICBAcGFyYW0gey4uLkF1ZGlvUGFyYW18VG9uZXxBdWRpb05vZGV9IG5vZGVzXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmZhbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLmNvbm5lY3QoYXJndW1lbnRzW2ldKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgaWYgKHdpbmRvdy5BdWRpb05vZGUpIHtcblx0ICAgICAgICAvL2dpdmUgbmF0aXZlIG5vZGVzIGNoYWluIGFuZCBmYW4gbWV0aG9kc1xuXHQgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuY2hhaW4gPSBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY2hhaW47XG5cdCAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5mYW4gPSBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZmFuO1xuXHQgICAgfVxuXHQgICAgLyoqXG5cdFx0ICogRGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodGhpcy5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQgaW5zdGFuY2VvZiBBdWRpb05vZGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodGhpcy5vdXRwdXQpKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dCBpbnN0YW5jZW9mIEF1ZGlvTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0ID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXVkaW9Ob2RlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJhc2UgY2xhc3MgZm9yIGFsbCBTaWduYWxzLiBVc2VkIEludGVybmFsbHkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWxCYXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TaWduYWxCYXNlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgV2hlbiBzaWduYWxzIGNvbm5lY3QgdG8gb3RoZXIgc2lnbmFscyBvciBBdWRpb1BhcmFtcyxcblx0XHQgKiAgdGhleSB0YWtlIG92ZXIgdGhlIG91dHB1dCB2YWx1ZSBvZiB0aGF0IHNpZ25hbCBvciBBdWRpb1BhcmFtLlxuXHRcdCAqICBGb3IgYWxsIG90aGVyIG5vZGVzLCB0aGUgYmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgYSBkZWZhdWx0IDxjb2RlPmNvbm5lY3Q8L2NvZGU+LlxuXHRcdCAqXG5cdFx0ICogIEBvdmVycmlkZVxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvUGFyYW18QXVkaW9Ob2RlfFRvbmUuU2lnbmFsfFRvbmV9IG5vZGVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW1iZXI9MF0gVGhlIG91dHB1dCBudW1iZXIgdG8gY29ubmVjdCBmcm9tLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2lucHV0TnVtYmVyPTBdIFRoZSBpbnB1dCBudW1iZXIgdG8gY29ubmVjdCB0by5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsQmFzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUsIG91dHB1dE51bWJlciwgaW5wdXROdW1iZXIpIHtcblx0ICAgICAgICAvL3plcm8gaXQgb3V0IHNvIHRoYXQgdGhlIHNpZ25hbCBjYW4gaGF2ZSBmdWxsIGNvbnRyb2xcblx0ICAgICAgICBpZiAoVG9uZS5TaWduYWwgJiYgVG9uZS5TaWduYWwgPT09IG5vZGUuY29uc3RydWN0b3IgfHwgVG9uZS5QYXJhbSAmJiBUb25lLlBhcmFtID09PSBub2RlLmNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIGNoYW5nZXNcblx0ICAgICAgICAgICAgbm9kZS5fcGFyYW0uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKDApO1xuXHQgICAgICAgICAgICAvL3Jlc2V0IHRoZSB2YWx1ZVxuXHQgICAgICAgICAgICBub2RlLl9wYXJhbS52YWx1ZSA9IDA7XG5cdCAgICAgICAgICAgIC8vbWFyayB0aGUgdmFsdWUgYXMgb3ZlcnJpZGRlblxuXHQgICAgICAgICAgICBub2RlLm92ZXJyaWRkZW4gPSB0cnVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcblx0ICAgICAgICAgICAgbm9kZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoMCk7XG5cdCAgICAgICAgICAgIG5vZGUudmFsdWUgPSAwO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdC5jYWxsKHRoaXMsIG5vZGUsIG91dHB1dE51bWJlciwgaW5wdXROdW1iZXIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNpZ25hbEJhc2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIC8vZml4ZXMgc2FmYXJpIG9ubHkgYnVnIHdoaWNoIGlzIHN0aWxsIHByZXNlbnQgaW4gMTFcblx0ICAgICAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG5cdCAgICAgICAgdmFyIGlzU2FmYXJpID0gdWEuaW5jbHVkZXMoJ3NhZmFyaScpICYmICF1YS5pbmNsdWRlcygnY2hyb21lJyk7XG5cdCAgICAgICAgaWYgKGlzU2FmYXJpKSB7XG5cdCAgICAgICAgICAgIHZhciBXYXZlU2hhcGVyTm9kZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbE5vZGUgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBjb250ZXh0Ll9uYXRpdmVfY3JlYXRlV2F2ZVNoYXBlcigpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB0aGlzLl9pbnRlcm5hbE5vZGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZpbmVQcm9wZXJ0eSh0aGlzLl9pbnRlcm5hbE5vZGUsIHByb3ApO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2F2ZVNoYXBlck5vZGUucHJvdG90eXBlLCAnY3VydmUnLCB7XG5cdCAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VydmU7XG5cdCAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoY3VydmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoY3VydmUubGVuZ3RoICsgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgYXJyYXkuc2V0KGN1cnZlLCAxKTtcblx0ICAgICAgICAgICAgICAgICAgICBhcnJheVswXSA9IGN1cnZlWzBdO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTm9kZS5jdXJ2ZSA9IGFycmF5O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgV2F2ZVNoYXBlck5vZGUucHJvdG90eXBlLl9kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChjb250ZXh0LCBwcm9wKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXNbcHJvcF0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3AsIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHRbcHJvcF0gPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXS5iaW5kKGNvbnRleHQpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0W3Byb3BdID0gdmFsO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuX25hdGl2ZV9jcmVhdGVXYXZlU2hhcGVyID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVXYXZlU2hhcGVyO1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVdhdmVTaGFwZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdhdmVTaGFwZXJOb2RlKHRoaXMpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBzIHRoZSBuYXRpdmUgV2ViIEF1ZGlvIEFQSVxuXHRcdCAqICAgICAgICAgW1dhdmVTaGFwZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS13YXZlc2hhcGVybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufEFycmF5fE51bWJlcn0gbWFwcGluZyBUaGUgZnVuY3Rpb24gdXNlZCB0byBkZWZpbmUgdGhlIHZhbHVlcy5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXBwaW5nIGZ1bmN0aW9uIHNob3VsZCB0YWtlIHR3byBhcmd1bWVudHM6XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgaXMgdGhlIHZhbHVlIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHNlY29uZCBpcyB0aGUgYXJyYXkgcG9zaXRpb24uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHRoYXQgYXJyYXkgd2lsbCBiZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGFzIHRoZSB3YXZlIHNoYXBpbmcgZnVuY3Rpb24uIFRoZSBpbnB1dFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGlzIGFuIEF1ZGlvUmFuZ2UgWy0xLCAxXSB2YWx1ZSBhbmQgdGhlIG91dHB1dFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGNhbiB0YWtlIG9uIGFueSBudW1lcmljYWwgdmFsdWVzLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBbYnVmZmVyTGVuPTEwMjRdIFRoZSBsZW5ndGggb2YgdGhlIFdhdmVTaGFwZXJOb2RlIGJ1ZmZlci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdGltZXNUd28gPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uKHZhbCl7XG5cdFx0ICogXHRyZXR1cm4gdmFsICogMjtcblx0XHQgKiB9LCAyMDQ4KTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egd2F2ZXNoYXBlciBjYW4gYWxzbyBiZSBjb25zdHJ1Y3RlZCB3aXRoIGFuIGFycmF5IG9mIHZhbHVlc1xuXHRcdCAqIHZhciBpbnZlcnQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKFsxLCAtMV0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlU2hhcGVyID0gZnVuY3Rpb24gKG1hcHBpbmcsIGJ1ZmZlckxlbikge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB3YXZlc2hhcGVyXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlV2F2ZVNoYXBlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB3YXZlc2hhcGVycyBjdXJ2ZVxuXHRcdFx0ICogIEB0eXBlIHtGbG9hdDMyQXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2N1cnZlID0gbnVsbDtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtYXBwaW5nKSkge1xuXHQgICAgICAgICAgICB0aGlzLmN1cnZlID0gbWFwcGluZztcblx0ICAgICAgICB9IGVsc2UgaWYgKGlzRmluaXRlKG1hcHBpbmcpIHx8IFRvbmUuaXNVbmRlZihtYXBwaW5nKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG5ldyBGbG9hdDMyQXJyYXkoVG9uZS5kZWZhdWx0QXJnKG1hcHBpbmcsIDEwMjQpKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNGdW5jdGlvbihtYXBwaW5nKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG5ldyBGbG9hdDMyQXJyYXkoVG9uZS5kZWZhdWx0QXJnKGJ1ZmZlckxlbiwgMTAyNCkpO1xuXHQgICAgICAgICAgICB0aGlzLnNldE1hcChtYXBwaW5nKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5XYXZlU2hhcGVyLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIFVzZXMgYSBtYXBwaW5nIGZ1bmN0aW9uIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIGN1cnZlLlxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBwaW5nIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGRlZmluZSB0aGUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXBwaW5nIGZ1bmN0aW9uIHRha2UgdHdvIGFyZ3VtZW50czpcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgaXMgdGhlIHZhbHVlIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggZ29lcyBmcm9tIC0xIHRvIDEgb3ZlciB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGN1cnZlIGFycmF5LiBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBhcnJheSBwb3NpdGlvbi5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuV2F2ZVNoYXBlcn0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbWFwIHRoZSBpbnB1dCBzaWduYWwgZnJvbSBbLTEsIDFdIHRvIFswLCAxMF1cblx0XHQgKiBzaGFwZXIuc2V0TWFwKGZ1bmN0aW9uKHZhbCwgaW5kZXgpe1xuXHRcdCAqIFx0cmV0dXJuICh2YWwgKyAxKSAqIDU7XG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUuc2V0TWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcblx0ICAgICAgICB2YXIgYXJyYXkgPSBuZXcgQXJyYXkodGhpcy5fY3VydmUubGVuZ3RoKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5fY3VydmUubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWQgPSBpIC8gKGxlbiAtIDEpICogMiAtIDE7XG5cdCAgICAgICAgICAgIGFycmF5W2ldID0gbWFwcGluZyhub3JtYWxpemVkLCBpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5jdXJ2ZSA9IGFycmF5O1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhcnJheSB0byBzZXQgYXMgdGhlIHdhdmVzaGFwZXIgY3VydmUuIEZvciBsaW5lYXIgY3VydmVzXG5cdFx0ICogYXJyYXkgbGVuZ3RoIGRvZXMgbm90IG1ha2UgbXVjaCBkaWZmZXJlbmNlLCBidXQgZm9yIGNvbXBsZXggY3VydmVzXG5cdFx0ICogbG9uZ2VyIGFycmF5cyB3aWxsIHByb3ZpZGUgc21vb3RoZXIgaW50ZXJwb2xhdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5XYXZlU2hhcGVyI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBjdXJ2ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUsICdjdXJ2ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5jdXJ2ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1hcHBpbmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBuZXcgRmxvYXQzMkFycmF5KG1hcHBpbmcpO1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIuY3VydmUgPSB0aGlzLl9jdXJ2ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFNwZWNpZmllcyB3aGF0IHR5cGUgb2Ygb3ZlcnNhbXBsaW5nIChpZiBhbnkpIHNob3VsZCBiZSB1c2VkIHdoZW5cblx0XHQgKiBhcHBseWluZyB0aGUgc2hhcGluZyBjdXJ2ZS4gQ2FuIGVpdGhlciBiZSBcIm5vbmVcIiwgXCIyeFwiIG9yIFwiNHhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5XYXZlU2hhcGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgb3ZlcnNhbXBsZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUsICdvdmVyc2FtcGxlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvdmVyc2FtcGxpbmcpIHtcblx0ICAgICAgICAgICAgaWYgKFtcblx0ICAgICAgICAgICAgICAgICAgICAnbm9uZScsXG5cdCAgICAgICAgICAgICAgICAgICAgJzJ4Jyxcblx0ICAgICAgICAgICAgICAgICAgICAnNHgnXG5cdCAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKG92ZXJzYW1wbGluZykpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlID0gb3ZlcnNhbXBsaW5nO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RvbmUuV2F2ZVNoYXBlcjogb3ZlcnNhbXBsaW5nIG11c3QgYmUgZWl0aGVyIFxcJ25vbmVcXCcsIFxcJzJ4XFwnLCBvciBcXCc0eFxcJycpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLldhdmVTaGFwZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLldhdmVTaGFwZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UaW1lQmFzZSBpcyBhIGZsZXhpYmxlIGVuY29kaW5nIG9mIHRpbWVcblx0XHQgKiAgICAgICAgIHdoaWNoIGNhbiBiZSBldmFsdWF0ZWQgdG8gYW5kIGZyb20gYSBzdHJpbmcuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlIGFzIGEgbnVtYmVyIG9yIHN0cmluZ1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFVuaXQgdmFsdWVzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UaW1lQmFzZSg0LCBcIm5cIilcblx0XHQgKiBUb25lLlRpbWVCYXNlKDIsIFwidFwiKVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoXCIydFwiKVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoXCIydFwiKSArIFRvbmUuVGltZUJhc2UoXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIC8vYWxsb3dzIGl0IHRvIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCAnbmV3J1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSB2YWx1ZVxuXHRcdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ8U3RyaW5nfFRvbmUuVGltZUJhc2V9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIHVuaXRzXG5cdFx0XHRcdCAqIEB0eXBlIHtTdHJpbmc/fVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB1bml0cztcblx0ICAgICAgICAgICAgLy90ZXN0IGlmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG51bWJlclxuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXMuX3VuaXRzKSAmJiBUb25lLmlzU3RyaW5nKHRoaXMuX3ZhbCkgJiYgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHQgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0aGlzLl92YWwpID09IHRoaXMuX3ZhbCAmJiB0aGlzLl92YWwuY2hhckF0KDApICE9PSAnKycpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHBhcnNlRmxvYXQodGhpcy5fdmFsKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdGhpcy5fZGVmYXVsdFVuaXRzO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbCAmJiB2YWwuY29uc3RydWN0b3IgPT09IHRoaXMuY29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgICAgIC8vaWYgdGhleSdyZSB0aGUgc2FtZSB0eXBlLCBqdXN0IGNvcHkgdmFsdWVzIG92ZXJcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC5fdmFsO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB2YWwuX3VuaXRzO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fZGVmYXVsdFVuaXRzKSB7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdzJzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdpJzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9UaWNrcygpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnaHonOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnbWlkaSc6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLnRvTWlkaSgpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBkZWZhdWx0IHVuaXRzICcgKyB0aGlzLl9kZWZhdWx0VW5pdHMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWVCYXNlKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpbWVCYXNlKTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFCU1RSQUNUIFNZTlRBWCBUUkVFIFBBUlNFUlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQWxsIHRoZSBwcmltYXJ5IGV4cHJlc3Npb25zLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9leHByZXNzaW9ucyA9IHtcblx0ICAgICAgICAnbic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKW4oXFwuPykkL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlLCBkb3QpIHtcblx0ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNjYWxhciA9IGRvdCA9PT0gJy4nID8gMS41IDogMTtcblx0ICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHModGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpKSAqIHNjYWxhcjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyg0IC8gdmFsdWUpICogc2NhbGFyO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndCc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKXQkL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHMoOCAvIChwYXJzZUludCh2YWx1ZSkgKiAzKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdtJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspbSQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VJbnQodmFsdWUpICogdGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2knOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKylpJC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tzVG9Vbml0cyhwYXJzZUludCh2YWx1ZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnaHonOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPyloeiQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmVxdWVuY3lUb1VuaXRzKHBhcnNlRmxvYXQodmFsdWUpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3RyJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT8pOihcXGQrKD86XFwuXFxkKyk/KTo/KFxcZCsoPzpcXC5cXGQrKT8pPyQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChtLCBxLCBzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xuXHQgICAgICAgICAgICAgICAgaWYgKG0gJiYgbSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5fYmVhdHNUb1VuaXRzKHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSAqIHBhcnNlRmxvYXQobSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHEgJiYgcSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHMgJiYgcyAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocykgLyA0KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3MnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPylzJC8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2Vjb25kc1RvVW5pdHMocGFyc2VGbG9hdCh2YWx1ZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnc2FtcGxlcyc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKXNhbXBsZXMkLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSkgLyB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2RlZmF1bHQnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPykkLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHByZXNzaW9uc1t0aGlzLl9kZWZhdWx0VW5pdHNdLm1ldGhvZC5jYWxsKHRoaXMsIHZhbHVlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZGVmYXVsdFVuaXRzID0gJ3MnO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VFJBTlNQT1JUIEZBTExCQUNLU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGJwbSwgb3IgMTIwIGlmIFRyYW5zcG9ydCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2dldEJwbSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gMTIwO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIHRpbWVTaWduYXR1cmUgb3IgNCBpZiBUcmFuc3BvcnQgaXMgbm90IGF2YWlsYWJsZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9nZXRUaW1lU2lnbmF0dXJlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gNDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSBQUFEgb3IgMTkyIGlmIFRyYW5zcG9ydCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2dldFBQUSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LlBQUTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gMTkyO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiB3aGljaGV2ZXIgY29udGV4dCBpcyByZWxldmFudFxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMubm93KCk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VU5JVCBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBmcmVxdWVuY3kgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIGZyZXE7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiA2MCAvIHRoaXMuX2dldEJwbSgpICogYmVhdHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gc2Vjb25kcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gdGlja3MgKiAodGhpcy5fYmVhdHNUb1VuaXRzKDEpIC8gdGhpcy5fZ2V0UFBRKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFdpdGggbm8gYXJndW1lbnRzLCByZXR1cm4gJ25vdydcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9ub0FyZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fbm93KCk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RVhQUkVTU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEV2YWx1YXRlIHRoZSB0aW1lIHZhbHVlLiBSZXR1cm5zIHRoZSB0aW1lXG5cdFx0ICogIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXMuX3ZhbCkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vQXJnKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHRoaXMuX3ZhbCkgJiYgVG9uZS5pc1VuZGVmKHRoaXMuX3VuaXRzKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciB1bml0cyBpbiB0aGlzLl9leHByZXNzaW9ucykge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25zW3VuaXRzXS5yZWdleHAudGVzdCh0aGlzLl92YWwudHJpbSgpKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdW5pdHM7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKHRoaXMuX3VuaXRzKSkge1xuXHQgICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMuX2V4cHJlc3Npb25zW3RoaXMuX3VuaXRzXTtcblx0ICAgICAgICAgICAgdmFyIG1hdGNoaW5nID0gdGhpcy5fdmFsLnRvU3RyaW5nKCkudHJpbSgpLm1hdGNoKGV4cHIucmVnZXhwKTtcblx0ICAgICAgICAgICAgaWYgKG1hdGNoaW5nKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXhwci5tZXRob2QuYXBwbHkodGhpcywgbWF0Y2hpbmcuc2xpY2UoMSkpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGV4cHIubWV0aG9kLmNhbGwodGhpcywgcGFyc2VGbG9hdCh0aGlzLl92YWwpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIGluIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgaW4gaGVydHpcblx0XHQgKiAgQHJldHVybiB7RnJlcXVlbmN5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9GcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyB0aGlzLnRvU2Vjb25kcygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gc2FtcGxlc1xuXHRcdCAqICBAcmV0dXJuICB7U2FtcGxlc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvU2FtcGxlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHMoKSAqIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7TWlsbGlzZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9NaWxsaXNlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudG9TZWNvbmRzKCkgKiAxMDAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlRpbWVCYXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3ZhbCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdW5pdHMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWVCYXNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRnJlcXVlbmN5IGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIEZyZXF1ZW5jeSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBFdmVudHVhbGx5IGFsbCB0aW1lIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHRvIGhlcnR6XG5cdFx0ICogICAgICAgICB1c2luZyB0aGUgYGV2YWxgIG1ldGhvZC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWVCYXNlfVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJDM1wiKSAvLyAyNjFcblx0XHQgKiBUb25lLkZyZXF1ZW5jeSgzOCwgXCJtaWRpXCIpIC8vXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJDM1wiKS50cmFuc3Bvc2UoNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLkZyZXF1ZW5jeSkge1xuXHQgICAgICAgICAgICBUb25lLlRpbWVCYXNlLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLkZyZXF1ZW5jeSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GcmVxdWVuY3ksIFRvbmUuVGltZUJhc2UpO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVVHTUVOVCBCQVNFIEVYUFJFU1NJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fZXhwcmVzc2lvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMsIHtcblx0ICAgICAgICAnbWlkaSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/bWlkaSkvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRVbml0cyA9PT0gJ21pZGknKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kubXRvZih2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdub3RlJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFthLWddezF9KD86YnwjfHh8YmIpPykoLT9bMC05XSspL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHBpdGNoLCBvY3RhdmUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IG5vdGVUb1NjYWxlSW5kZXhbcGl0Y2gudG9Mb3dlckNhc2UoKV07XG5cdCAgICAgICAgICAgICAgICB2YXIgbm90ZU51bWJlciA9IGluZGV4ICsgKHBhcnNlSW50KG9jdGF2ZSkgKyAxKSAqIDEyO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRVbml0cyA9PT0gJ21pZGknKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vdGVOdW1iZXI7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5tdG9mKG5vdGVOdW1iZXIpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndHInOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPyk6KFxcZCsoPzpcXC5cXGQrKT8pOj8oXFxkKyg/OlxcLlxcZCspPyk/Lyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAobSwgcSwgcykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHRvdGFsID0gMTtcblx0ICAgICAgICAgICAgICAgIGlmIChtICYmIG0gIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICo9IHRoaXMuX2JlYXRzVG9Vbml0cyh0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkgKiBwYXJzZUZsb2F0KG0pKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChxICYmIHEgIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICo9IHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUZsb2F0KHEpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChzICYmIHMgIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICo9IHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUZsb2F0KHMpIC8gNCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEVYUFJFU1NJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUcmFuc3Bvc2VzIHRoZSBmcmVxdWVuY3kgYnkgdGhlIGdpdmVuIG51bWJlciBvZiBzZW1pdG9uZXMuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsfSAgaW50ZXJ2YWxcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRnJlcXVlbmN5fSBBIG5ldyB0cmFuc3Bvc2VkIGZyZXF1ZW5jeVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQTRcIikudHJhbnNwb3NlKDMpOyAvL1wiQzVcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRyYW5zcG9zZSA9IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnZhbHVlT2YoKSAqIFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGludGVydmFsKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRha2VzIGFuIGFycmF5IG9mIHNlbWl0b25lIGludGVydmFscyBhbmQgcmV0dXJuc1xuXHRcdCAqICBhbiBhcnJheSBvZiBmcmVxdWVuY2llcyB0cmFuc3Bvc2VkIGJ5IHRob3NlIGludGVydmFscy5cblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICBpbnRlcnZhbHNcblx0XHQgKiAgQHJldHVybiAge0FycmF5PFRvbmUuRnJlcXVlbmN5Pn0gUmV0dXJucyBhbiBhcnJheSBvZiBGcmVxdWVuY2llc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQTRcIikuaGFybW9uaXplKFswLCAzLCA3XSk7IC8vW1wiQTRcIiwgXCJDNVwiLCBcIkU1XCJdXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuaGFybW9uaXplID0gZnVuY3Rpb24gKGludGVydmFscykge1xuXHQgICAgICAgIHJldHVybiBpbnRlcnZhbHMubWFwKGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc3Bvc2UoaW50ZXJ2YWwpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VU5JVCBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IGFzIGEgTUlESSBub3RlXG5cdFx0ICogIEByZXR1cm4gIHtNSURJfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQzRcIikudG9NaWRpKCk7IC8vNjBcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b01pZGkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20odGhpcy52YWx1ZU9mKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgaW4gU2NpZW50aWZpYyBQaXRjaCBOb3RhdGlvblxuXHRcdCAqICBAcmV0dXJuICB7Tm90ZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeSg2OSwgXCJtaWRpXCIpLnRvTm90ZSgpOyAvL1wiQTRcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvTm90ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgZnJlcSA9IHRoaXMudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICB2YXIgbG9nID0gTWF0aC5sb2cyKGZyZXEgLyBUb25lLkZyZXF1ZW5jeS5BNCk7XG5cdCAgICAgICAgdmFyIG5vdGVOdW1iZXIgPSBNYXRoLnJvdW5kKDEyICogbG9nKSArIDU3O1xuXHQgICAgICAgIHZhciBvY3RhdmUgPSBNYXRoLmZsb29yKG5vdGVOdW1iZXIgLyAxMik7XG5cdCAgICAgICAgaWYgKG9jdGF2ZSA8IDApIHtcblx0ICAgICAgICAgICAgbm90ZU51bWJlciArPSAtMTIgKiBvY3RhdmU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBub3RlTmFtZSA9IHNjYWxlSW5kZXhUb05vdGVbbm90ZU51bWJlciAlIDEyXTtcblx0ICAgICAgICByZXR1cm4gbm90ZU5hbWUgKyBvY3RhdmUudG9TdHJpbmcoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBkdXJhdGlvbiBvZiBvbmUgY3ljbGUgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAxIC8gVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9TZWNvbmRzLmNhbGwodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgaW4gSGVydHpcblx0XHQgKiAgQHJldHVybiAge0ZyZXF1ZW5jeX1cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9GcmVxdWVuY3kuY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBkdXJhdGlvbiBvZiBvbmUgY3ljbGUgaW4gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJUaW1lID0gdGhpcy5fYmVhdHNUb1VuaXRzKDEpO1xuXHQgICAgICAgIHZhciBxdWFydGVycyA9IHRoaXMudmFsdWVPZigpIC8gcXVhcnRlclRpbWU7XG5cdCAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IocXVhcnRlcnMgKiBUb25lLlRyYW5zcG9ydC5QUFEpO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFVOSVQgQ09OVkVSU0lPTlMgSEVMUEVSU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiAwXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX25vQXJnID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIGZyZXF1ZW5jeSBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gZnJlcTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fdGlja3NUb1VuaXRzID0gZnVuY3Rpb24gKHRpY2tzKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyAodGlja3MgKiA2MCAvIChUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgKiBUb25lLlRyYW5zcG9ydC5QUFEpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiAxIC8gVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cy5jYWxsKHRoaXMsIGJlYXRzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzZWNvbmQgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtTZWNvbmRzfSBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIHNlY29uZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAnaHonO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RlJFUVVFTkNZIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBOb3RlIHRvIHNjYWxlIGluZGV4XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgdmFyIG5vdGVUb1NjYWxlSW5kZXggPSB7XG5cdCAgICAgICAgJ2NiYic6IC0yLFxuXHQgICAgICAgICdjYic6IC0xLFxuXHQgICAgICAgICdjJzogMCxcblx0ICAgICAgICAnYyMnOiAxLFxuXHQgICAgICAgICdjeCc6IDIsXG5cdCAgICAgICAgJ2RiYic6IDAsXG5cdCAgICAgICAgJ2RiJzogMSxcblx0ICAgICAgICAnZCc6IDIsXG5cdCAgICAgICAgJ2QjJzogMyxcblx0ICAgICAgICAnZHgnOiA0LFxuXHQgICAgICAgICdlYmInOiAyLFxuXHQgICAgICAgICdlYic6IDMsXG5cdCAgICAgICAgJ2UnOiA0LFxuXHQgICAgICAgICdlIyc6IDUsXG5cdCAgICAgICAgJ2V4JzogNixcblx0ICAgICAgICAnZmJiJzogMyxcblx0ICAgICAgICAnZmInOiA0LFxuXHQgICAgICAgICdmJzogNSxcblx0ICAgICAgICAnZiMnOiA2LFxuXHQgICAgICAgICdmeCc6IDcsXG5cdCAgICAgICAgJ2diYic6IDUsXG5cdCAgICAgICAgJ2diJzogNixcblx0ICAgICAgICAnZyc6IDcsXG5cdCAgICAgICAgJ2cjJzogOCxcblx0ICAgICAgICAnZ3gnOiA5LFxuXHQgICAgICAgICdhYmInOiA3LFxuXHQgICAgICAgICdhYic6IDgsXG5cdCAgICAgICAgJ2EnOiA5LFxuXHQgICAgICAgICdhIyc6IDEwLFxuXHQgICAgICAgICdheCc6IDExLFxuXHQgICAgICAgICdiYmInOiA5LFxuXHQgICAgICAgICdiYic6IDEwLFxuXHQgICAgICAgICdiJzogMTEsXG5cdCAgICAgICAgJ2IjJzogMTIsXG5cdCAgICAgICAgJ2J4JzogMTNcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc2NhbGUgaW5kZXggdG8gbm90ZSAoc2hhcnBzKVxuXHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIHNjYWxlSW5kZXhUb05vdGUgPSBbXG5cdCAgICAgICAgJ0MnLFxuXHQgICAgICAgICdDIycsXG5cdCAgICAgICAgJ0QnLFxuXHQgICAgICAgICdEIycsXG5cdCAgICAgICAgJ0UnLFxuXHQgICAgICAgICdGJyxcblx0ICAgICAgICAnRiMnLFxuXHQgICAgICAgICdHJyxcblx0ICAgICAgICAnRyMnLFxuXHQgICAgICAgICdBJyxcblx0ICAgICAgICAnQSMnLFxuXHQgICAgICAgICdCJ1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgW2NvbmNlcnQgcGl0Y2hdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbmNlcnRfcGl0Y2gpXG5cdFx0ICogIEE0J3MgdmFsdWVzIGluIEhlcnR6LlxuXHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5BNCA9IDQ0MDtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgTUlESSBub3RlIHRvIGZyZXF1ZW5jeSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7TUlESX0gbWlkaSBUaGUgbWlkaSBudW1iZXIgdG8gY29udmVydC5cblx0XHQgKiAgQHJldHVybiB7RnJlcXVlbmN5fSB0aGUgY29ycmVzcG9uZGluZyBmcmVxdWVuY3kgdmFsdWVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5Lm10b2YoNjkpOyAvLyByZXR1cm5zIDQ0MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kubXRvZiA9IGZ1bmN0aW9uIChtaWRpKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LkE0ICogTWF0aC5wb3coMiwgKG1pZGkgLSA2OSkgLyAxMik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBmcmVxdWVuY3kgdmFsdWUgdG8gYSBNSURJIG5vdGUuXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHZhbHVlIHRvIGZyZXF1ZW5jeSB2YWx1ZSB0byBjb252ZXJ0LlxuXHRcdCAqICBAcmV0dXJucyAge01JREl9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeS5mdG9tKDQ0MCk7IC8vIHJldHVybnMgNjlcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LmZ0b20gPSBmdW5jdGlvbiAoZnJlcXVlbmN5KSB7XG5cdCAgICAgICAgcmV0dXJuIDY5ICsgTWF0aC5yb3VuZCgxMiAqIE1hdGgubG9nMihmcmVxdWVuY3kgLyBUb25lLkZyZXF1ZW5jeS5BNCkpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRpbWUgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgVGltZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBUb25lLlRpbWUgY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCB0aGUgYG5ld2Aga2V5d29yZC4gVG9uZS5UaW1lIGNhbiBiZSBwYXNzZWRcblx0XHQgKiAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBvZiBhbnkgbWV0aG9kIHdoaWNoIHRha2VzIHRpbWUgYXMgYW4gYXJndW1lbnQuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UaW1lQmFzZX1cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIHZhbCAgICBUaGUgdGltZSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nPX0gIHVuaXRzICBUaGUgdW5pdHMgb2YgdGhlIHZhbHVlLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB0ID0gVG9uZS5UaW1lKFwiNG5cIik7Ly9hIHF1YXJ0ZXIgbm90ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuVGltZSkge1xuXHQgICAgICAgICAgICBUb25lLlRpbWVCYXNlLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWUodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZSwgVG9uZS5UaW1lQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBFeHRlbmQgdGhlIGJhc2UgZXhwcmVzc2lvbnNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zID0gT2JqZWN0LmFzc2lnbih7fSwgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zLCB7XG5cdCAgICAgICAgJ3F1YW50aXplJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eQCguKykvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChjYXB0dXJlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRUbyA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGNhcHR1cmUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC5uZXh0U3ViZGl2aXNpb24ocXVhbnRUbyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbm93Jzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eXFwrKC4rKS8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKGNhcHR1cmUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3coKSArIG5ldyB0aGlzLmNvbnN0cnVjdG9yKGNhcHR1cmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUXVhbnRpemUgdGhlIHRpbWUgYnkgdGhlIGdpdmVuIHN1YmRpdmlzaW9uLiBPcHRpb25hbGx5IGFkZCBhXG5cdFx0ICogIHBlcmNlbnRhZ2Ugd2hpY2ggd2lsbCBtb3ZlIHRoZSB0aW1lIHZhbHVlIHRvd2FyZHMgdGhlIGlkZWFsXG5cdFx0ICogIHF1YW50aXplZCB2YWx1ZSBieSB0aGF0IHBlcmNlbnRhZ2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcnxUaW1lfSAgdmFsICAgIFRoZSBzdWJkaXZpc2lvbiB0byBxdWFudGl6ZSB0b1xuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIFtwZXJjZW50PTFdICBNb3ZlIHRoZSB0aW1lIHZhbHVlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvd2FyZHMgdGhlIHF1YW50aXplZCB2YWx1ZSBieVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHBlcmNlbnRhZ2UuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UaW1lKDIxKS5xdWFudGl6ZSgyKSAvL3JldHVybnMgMjJcblx0XHQgKiBUb25lLlRpbWUoMC42KS5xdWFudGl6ZShcIjRuXCIsIDAuNSkgLy9yZXR1cm5zIDAuNTVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUucXVhbnRpemUgPSBmdW5jdGlvbiAoc3ViZGl2LCBwZXJjZW50KSB7XG5cdCAgICAgICAgcGVyY2VudCA9IFRvbmUuZGVmYXVsdEFyZyhwZXJjZW50LCAxKTtcblx0ICAgICAgICB2YXIgc3ViZGl2aXNpb24gPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihzdWJkaXYpO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWVPZigpO1xuXHQgICAgICAgIHZhciBtdWx0aXBsZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdWJkaXZpc2lvbik7XG5cdCAgICAgICAgdmFyIGlkZWFsID0gbXVsdGlwbGUgKiBzdWJkaXZpc2lvbjtcblx0ICAgICAgICB2YXIgZGlmZiA9IGlkZWFsIC0gdmFsdWU7XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlICsgZGlmZiAqIHBlcmNlbnQ7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIFRpbWUgdG8gTm90YXRpb24uIFRoZSBub3RhdGlvbiB2YWx1ZXMgYXJlIHdpbGwgYmUgdGhlXG5cdFx0ICogIGNsb3Nlc3QgcmVwcmVzZW50YXRpb24gYmV0d2VlbiAxbSB0byAxMjh0aCBub3RlLlxuXHRcdCAqICBAcmV0dXJuIHtOb3RhdGlvbn1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2lmIHRoZSBUcmFuc3BvcnQgaXMgYXQgMTIwYnBtOlxuXHRcdCAqIFRvbmUuVGltZSgyKS50b05vdGF0aW9uKCk7Ly9yZXR1cm5zIFwiMW1cIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b05vdGF0aW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciB0aW1lID0gdGhpcy50b1NlY29uZHMoKTtcblx0ICAgICAgICB2YXIgdGVzdE5vdGF0aW9ucyA9IFsnMW0nXTtcblx0ICAgICAgICBmb3IgKHZhciBwb3dlciA9IDE7IHBvd2VyIDwgODsgcG93ZXIrKykge1xuXHQgICAgICAgICAgICB2YXIgc3ViZGl2ID0gTWF0aC5wb3coMiwgcG93ZXIpO1xuXHQgICAgICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goc3ViZGl2ICsgJ24uJyk7XG5cdCAgICAgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaChzdWJkaXYgKyAnbicpO1xuXHQgICAgICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goc3ViZGl2ICsgJ3QnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGVzdE5vdGF0aW9ucy5wdXNoKCcwJyk7XG5cdCAgICAgICAgLy9maW5kIHRoZSBjbG9zZXRzIG5vdGF0aW9uIHJlcHJlc2VudGF0aW9uXG5cdCAgICAgICAgdmFyIGNsb3Nlc3QgPSB0ZXN0Tm90YXRpb25zWzBdO1xuXHQgICAgICAgIHZhciBjbG9zZXN0U2Vjb25kcyA9IFRvbmUuVGltZSh0ZXN0Tm90YXRpb25zWzBdKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB0ZXN0Tm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG5vdGF0aW9uKSB7XG5cdCAgICAgICAgICAgIHZhciBub3RhdGlvblNlY29uZHMgPSBUb25lLlRpbWUobm90YXRpb24pLnRvU2Vjb25kcygpO1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnMobm90YXRpb25TZWNvbmRzIC0gdGltZSkgPCBNYXRoLmFicyhjbG9zZXN0U2Vjb25kcyAtIHRpbWUpKSB7XG5cdCAgICAgICAgICAgICAgICBjbG9zZXN0ID0gbm90YXRpb247XG5cdCAgICAgICAgICAgICAgICBjbG9zZXN0U2Vjb25kcyA9IG5vdGF0aW9uU2Vjb25kcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiBjbG9zZXN0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgZW5jb2RlZCBhcyBCYXJzOkJlYXRzOlNpeHRlZW50aHMuXG5cdFx0ICogIEByZXR1cm4gIHtCYXJzQmVhdHNTaXh0ZWVudGhzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b0JhcnNCZWF0c1NpeHRlZW50aHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJUaW1lID0gdGhpcy5fYmVhdHNUb1VuaXRzKDEpO1xuXHQgICAgICAgIHZhciBxdWFydGVycyA9IHRoaXMudmFsdWVPZigpIC8gcXVhcnRlclRpbWU7XG5cdCAgICAgICAgdmFyIG1lYXN1cmVzID0gTWF0aC5mbG9vcihxdWFydGVycyAvIHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSk7XG5cdCAgICAgICAgdmFyIHNpeHRlZW50aHMgPSBxdWFydGVycyAlIDEgKiA0O1xuXHQgICAgICAgIHF1YXJ0ZXJzID0gTWF0aC5mbG9vcihxdWFydGVycykgJSB0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCk7XG5cdCAgICAgICAgc2l4dGVlbnRocyA9IHNpeHRlZW50aHMudG9TdHJpbmcoKTtcblx0ICAgICAgICBpZiAoc2l4dGVlbnRocy5sZW5ndGggPiAzKSB7XG5cdCAgICAgICAgICAgIC8vIHRoZSBhZGRpdGlvbmFsIHBhcnNlRmxvYXQgcmVtb3ZlcyBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9lc1xuXHQgICAgICAgICAgICBzaXh0ZWVudGhzID0gcGFyc2VGbG9hdChwYXJzZUZsb2F0KHNpeHRlZW50aHMpLnRvRml4ZWQoMykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcHJvZ3Jlc3MgPSBbXG5cdCAgICAgICAgICAgIG1lYXN1cmVzLFxuXHQgICAgICAgICAgICBxdWFydGVycyxcblx0ICAgICAgICAgICAgc2l4dGVlbnRoc1xuXHQgICAgICAgIF07XG5cdCAgICAgICAgcmV0dXJuIHByb2dyZXNzLmpvaW4oJzonKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHRpY2tzLlxuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJUaW1lID0gdGhpcy5fYmVhdHNUb1VuaXRzKDEpO1xuXHQgICAgICAgIHZhciBxdWFydGVycyA9IHRoaXMudmFsdWVPZigpIC8gcXVhcnRlclRpbWU7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQocXVhcnRlcnMgKiB0aGlzLl9nZXRQUFEoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBhcyBhIG1pZGkgbm90ZS5cblx0XHQgKiAgQHJldHVybiAge01pZGl9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvTWlkaSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbSh0aGlzLnRvRnJlcXVlbmN5KCkpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmFuc3BvcnRUaW1lIGlzIGEgdGhlIHRpbWUgYWxvbmcgdGhlIFRyYW5zcG9ydCdzXG5cdFx0ICogICAgICAgICB0aW1lbGluZS4gSXQgaXMgc2ltaWxhciB0byBUb25lLlRpbWUsIGJ1dCBpbnN0ZWFkIG9mIGV2YWx1YXRpbmdcblx0XHQgKiAgICAgICAgIGFnYWluc3QgdGhlIEF1ZGlvQ29udGV4dCdzIGNsb2NrLCBpdCBpcyBldmFsdWF0ZWQgYWdhaW5zdFxuXHRcdCAqICAgICAgICAgdGhlIFRyYW5zcG9ydCdzIHBvc2l0aW9uLiBTZWUgW1RyYW5zcG9ydFRpbWUgd2lraV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvVHJhbnNwb3J0VGltZSkuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlIGFzIGEgbnVtYmVyIG9yIHN0cmluZ1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFVuaXQgdmFsdWVzXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWV9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWUgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UcmFuc3BvcnRUaW1lKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVGltZS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UcmFuc3BvcnRUaW1lKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydFRpbWUsIFRvbmUuVGltZSk7XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiB3aGljaGV2ZXIgY29udGV4dCBpcyByZWxldmFudFxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZS5wcm90b3R5cGUuX25vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQuc2Vjb25kcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnRUaW1lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUWVBFU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiBVbml0cyB3aGljaCBhIHZhbHVlIGNhbiB0YWtlIG9uLlxuXHRcdCAqIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLlR5cGUgPSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRGVmYXVsdCB1bml0c1xuXHRcdFx0ICogIEB0eXBlZGVmIHtEZWZhdWx0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgRGVmYXVsdDogJ251bWJlcicsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGltZSBjYW4gYmUgZGVzY3JpYmVkIGluIGEgbnVtYmVyIG9mIHdheXMuIFJlYWQgbW9yZSBbVGltZV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvVGltZSkuXG5cdFx0XHQgKlxuXHRcdFx0ICogICogTnVtYmVycywgd2hpY2ggd2lsbCBiZSB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHRpbWUgKGluIHNlY29uZHMpLlxuXHRcdFx0ICogICogTm90YXRpb24sIChcIjRuXCIsIFwiOHRcIikgZGVzY3JpYmVzIHRpbWUgaW4gQlBNIGFuZCB0aW1lIHNpZ25hdHVyZSByZWxhdGl2ZSB2YWx1ZXMuXG5cdFx0XHQgKiAgKiBUcmFuc3BvcnRUaW1lLCAoXCI0OjM6MlwiKSB3aWxsIGFsc28gcHJvdmlkZSB0ZW1wbyBhbmQgdGltZSBzaWduYXR1cmUgcmVsYXRpdmUgdGltZXNcblx0XHRcdCAqICBpbiB0aGUgZm9ybSBCQVJTOlFVQVJURVJTOlNJWFRFRU5USFMuXG5cdFx0XHQgKiAgKiBGcmVxdWVuY3ksIChcIjhoelwiKSBpcyBjb252ZXJ0ZWQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY3ljbGUgaW4gc2Vjb25kcy5cblx0XHRcdCAqICAqIE5vdy1SZWxhdGl2ZSwgKFwiKzFcIikgcHJlZml4IGFueSBvZiB0aGUgYWJvdmUgd2l0aCBcIitcIiBhbmQgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhc1xuXHRcdFx0ICogIFwidGhlIGN1cnJlbnQgdGltZSBwbHVzIHdoYXRldmVyIGV4cHJlc3Npb24gZm9sbG93c1wiLlxuXHRcdFx0ICogICogRXhwcmVzc2lvbnMsIChcIjM6MCArIDIgLSAoMW0gLyA3KVwiKSBhbnkgb2YgdGhlIGFib3ZlIGNhbiBhbHNvIGJlIGNvbWJpbmVkXG5cdFx0XHQgKiAgaW50byBhIG1hdGhlbWF0aWNhbCBleHByZXNzaW9uIHdoaWNoIHdpbGwgYmUgZXZhbHVhdGVkIHRvIGNvbXB1dGUgdGhlIGRlc2lyZWQgdGltZS5cblx0XHRcdCAqICAqIE5vIEFyZ3VtZW50LCBmb3IgbWV0aG9kcyB3aGljaCBhY2NlcHQgdGltZSwgbm8gYXJndW1lbnQgd2lsbCBiZSBpbnRlcnByZXRlZCBhc1xuXHRcdFx0ICogIFwibm93XCIgKGkuZS4gdGhlIGN1cnJlbnRUaW1lKS5cblx0XHRcdCAqXG5cdFx0XHQgKiAgQHR5cGVkZWYge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBUaW1lOiAndGltZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRnJlcXVlbmN5IGNhbiBiZSBkZXNjcmliZWQgc2ltaWxhciB0byB0aW1lLCBleGNlcHQgdWx0aW1hdGVseSB0aGVcblx0XHRcdCAqICB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBmcmVxdWVuY3kgaW5zdGVhZCBvZiBzZWNvbmRzLiBBIG51bWJlclxuXHRcdFx0ICogIGlzIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgdmFsdWUgaW4gaGVydHouIEFkZGl0aW9uYWxseSBhbnkgb2YgdGhlXG5cdFx0XHQgKiAgVGltZSBlbmNvZGluZ3MgY2FuIGJlIHVzZWQuIE5vdGUgbmFtZXMgaW4gdGhlIGZvcm1cblx0XHRcdCAqICBvZiBOT1RFIE9DVEFWRSAoaS5lLiBDNCkgYXJlIGFsc28gYWNjZXB0ZWQgYW5kIGNvbnZlcnRlZCB0byB0aGVpclxuXHRcdFx0ICogIGZyZXF1ZW5jeSB2YWx1ZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7RnJlcXVlbmN5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgRnJlcXVlbmN5OiAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUcmFuc3BvcnRUaW1lIGRlc2NyaWJlcyBhIHBvc2l0aW9uIGFsb25nIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZS4gSXQgaXNcblx0XHRcdCAqICBzaW1pbGFyIHRvIFRpbWUgaW4gdGhhdCBpdCB1c2VzIGFsbCB0aGUgc2FtZSBlbmNvZGluZ3MsIGJ1dCBUcmFuc3BvcnRUaW1lIHNwZWNpZmljYWxseVxuXHRcdFx0ICogIHBlcnRhaW5zIHRvIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZSwgd2hpY2ggaXMgc3RhcnRhYmxlLCBzdG9wcGFibGUsIGxvb3BhYmxlLCBhbmQgc2Vla2FibGUuXG5cdFx0XHQgKiAgW1JlYWQgbW9yZV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvVHJhbnNwb3J0VGltZSlcblx0XHRcdCAqICBAdHlwZWRlZiB7VHJhbnNwb3J0VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIFRyYW5zcG9ydFRpbWU6ICd0cmFuc3BvcnRUaW1lJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaWNrcyBhcmUgdGhlIGJhc2ljIHN1YnVuaXQgb2YgdGhlIFRyYW5zcG9ydC4gVGhleSBhcmVcblx0XHRcdCAqICB0aGUgc21hbGxlc3QgdW5pdCBvZiB0aW1lIHRoYXQgdGhlIFRyYW5zcG9ydCBzdXBwb3J0cy5cblx0XHRcdCAqICBAdHlwZWRlZiB7VGlja3N9XG5cdFx0XHQgKi9cblx0ICAgICAgICBUaWNrczogJ3RpY2tzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBOb3JtYWwgdmFsdWVzIGFyZSB3aXRoaW4gdGhlIHJhbmdlIFswLCAxXS5cblx0XHRcdCAqICBAdHlwZWRlZiB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKi9cblx0ICAgICAgICBOb3JtYWxSYW5nZTogJ25vcm1hbFJhbmdlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBdWRpb1JhbmdlIHZhbHVlcyBhcmUgYmV0d2VlbiBbLTEsIDFdLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtBdWRpb1JhbmdlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQXVkaW9SYW5nZTogJ2F1ZGlvUmFuZ2UnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIERlY2liZWxzIGFyZSBhIGxvZ2FyaXRobWljIHVuaXQgb2YgbWVhc3VyZW1lbnQgd2hpY2ggaXMgdXNlZnVsIGZvciB2b2x1bWVcblx0XHRcdCAqICBiZWNhdXNlIG9mIHRoZSBsb2dhcml0aG1pYyB3YXkgdGhhdCB3ZSBwZXJjZWl2ZSBsb3VkbmVzcy4gMCBkZWNpYmVsc1xuXHRcdFx0ICogIG1lYW5zIG5vIGNoYW5nZSBpbiB2b2x1bWUuIC0xMGRiIGlzIGFwcHJveGltYXRlbHkgaGFsZiBhcyBsb3VkIGFuZCAxMGRiXG5cdFx0XHQgKiAgaXMgdHdpY2UgaXMgbG91ZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7RGVjaWJlbHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBEZWNpYmVsczogJ2RiJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYWxmLXN0ZXAgbm90ZSBpbmNyZW1lbnRzLCBpLmUuIDEyIGlzIGFuIG9jdGF2ZSBhYm92ZSB0aGUgcm9vdC4gYW5kIDEgaXMgYSBoYWxmLXN0ZXAgdXAuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0ludGVydmFsfVxuXHRcdFx0ICovXG5cdCAgICAgICAgSW50ZXJ2YWw6ICdpbnRlcnZhbCcsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQmVhdHMgcGVyIG1pbnV0ZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7QlBNfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQlBNOiAnYnBtJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMC5cblx0XHRcdCAqICBAdHlwZWRlZiB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBQb3NpdGl2ZTogJ3Bvc2l0aXZlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBHYWluIGlzIHRoZSByYXRpbyBiZXR3ZWVuIGlucHV0IGFuZCBvdXRwdXQgb2YgYSBzaWduYWwuXG5cdFx0XHQgKiAgQSBnYWluIG9mIDAgaXMgdGhlIHNhbWUgYXMgc2lsZW5jaW5nIHRoZSBzaWduYWwuIEEgZ2FpbiBvZlxuXHRcdFx0ICogIDEsIGNhdXNlcyBubyBjaGFuZ2UgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZWRlZiB7R2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIEdhaW46ICdnYWluJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGNlbnQgaXMgYSBodW5kcmVkdGggb2YgYSBzZW1pdG9uZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7Q2VudHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBDZW50czogJ2NlbnRzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbmdsZSBiZXR3ZWVuIDAgYW5kIDM2MC5cblx0XHRcdCAqICBAdHlwZWRlZiB7RGVncmVlc31cblx0XHRcdCAqL1xuXHQgICAgICAgIERlZ3JlZXM6ICdkZWdyZWVzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIG51bWJlciByZXByZXNlbnRpbmcgYSBtaWRpIG5vdGUuXG5cdFx0XHQgKiAgQHR5cGVkZWYge01JREl9XG5cdFx0XHQgKi9cblx0ICAgICAgICBNSURJOiAnbWlkaScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBjb2xvbi1zZXBhcmF0ZWQgcmVwcmVzZW50YXRpb24gb2YgdGltZSBpbiB0aGUgZm9ybSBvZlxuXHRcdFx0ICogIEJhcnM6QmVhdHM6U2l4dGVlbnRocy5cblx0XHRcdCAqICBAdHlwZWRlZiB7QmFyc0JlYXRzU2l4dGVlbnRoc31cblx0XHRcdCAqL1xuXHQgICAgICAgIEJhcnNCZWF0c1NpeHRlZW50aHM6ICdiYXJzQmVhdHNTaXh0ZWVudGhzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTYW1wbGluZyBpcyB0aGUgcmVkdWN0aW9uIG9mIGEgY29udGludW91cyBzaWduYWwgdG8gYSBkaXNjcmV0ZSBzaWduYWwuXG5cdFx0XHQgKiAgQXVkaW8gaXMgdHlwaWNhbGx5IHNhbXBsZWQgNDQxMDAgdGltZXMgcGVyIHNlY29uZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7U2FtcGxlc31cblx0XHRcdCAqL1xuXHQgICAgICAgIFNhbXBsZXM6ICdzYW1wbGVzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIZXJ0eiBhcmUgYSBmcmVxdWVuY3kgcmVwcmVzZW50YXRpb24gZGVmaW5lZCBhcyBvbmUgY3ljbGUgcGVyIHNlY29uZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7SGVydHp9XG5cdFx0XHQgKi9cblx0ICAgICAgICBIZXJ0ejogJ2hlcnR6Jyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGZyZXF1ZW5jeSByZXByZXNlbnRlZCBieSBhIGxldHRlciBuYW1lLFxuXHRcdFx0ICogIGFjY2lkZW50YWwgYW5kIG9jdGF2ZS4gVGhpcyBzeXN0ZW0gaXMga25vd24gYXNcblx0XHRcdCAqICBbU2NpZW50aWZpYyBQaXRjaCBOb3RhdGlvbl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2NpZW50aWZpY19waXRjaF9ub3RhdGlvbikuXG5cdFx0XHQgKiAgQHR5cGVkZWYge05vdGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBOb3RlOiAnbm90ZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgT25lIG1pbGxpc2Vjb25kIGlzIGEgdGhvdXNhbmR0aCBvZiBhIHNlY29uZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7TWlsbGlzZWNvbmRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgTWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmRzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTZWNvbmRzIGFyZSB0aGUgdGltZSB1bml0IG9mIHRoZSBBdWRpb0NvbnRleHQuIEluIHRoZSBlbmQsXG5cdFx0XHQgKiAgYWxsIHZhbHVlcyBuZWVkIHRvIGJlIGV2YWx1YXRlZCB0byBzZWNvbmRzLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtTZWNvbmRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgU2Vjb25kczogJ3NlY29uZHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGR1cmF0aW9uIHJlbGF0aXZlIHRvIGEgbWVhc3VyZS5cblx0XHRcdCAqICAqIFwiNG5cIiA9IHF1YXJ0ZXIgbm90ZVxuXHRcdFx0ICogICogXCIybVwiID0gdHdvIG1lYXN1cmVzXG5cdFx0XHQgKiAgKiBcIjh0XCIgPSBlaWdodGgtbm90ZSB0cmlwbGV0XG5cdFx0XHQgKiAgQHR5cGVkZWYge05vdGF0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgTm90YXRpb246ICdub3RhdGlvbidcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIEFVR01FTlQgVE9ORSdzIFBST1RPVFlQRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBUaW1lIGludG8gc2Vjb25kcy5cblx0XHQgKlxuXHRcdCAqICBVbmxpa2UgdGhlIG1ldGhvZCB3aGljaCBpdCBvdmVycmlkZXMsIHRoaXMgdGFrZXMgaW50byBhY2NvdW50XG5cdFx0ICogIHRyYW5zcG9ydHRpbWUgYW5kIG11c2ljYWwgbm90YXRpb24uXG5cdFx0ICpcblx0XHQgKiAgVGltZSA6IDEuNDBcblx0XHQgKiAgTm90YXRpb246IDRuIG9yIDFtIG9yIDJ0XG5cdFx0ICogIE5vdyBSZWxhdGl2ZTogKzNuXG5cdFx0ICogIE1hdGg6IDNuKzE2biBvciBldmVuIGNvbXBsaWNhdGVkIGV4cHJlc3Npb25zICgoM24qMikvNiArIDEpXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJuIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcih0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGltZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5ub3coKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWUodGltZSkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aW1lIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGltZS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBmcmVxdWVuY3kgcmVwcmVzZW50YXRpb24gaW50byBhIG51bWJlci5cblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4ge0hlcnR6fSAgICAgIHRoZSBmcmVxdWVuY3kgaW4gaGVydHpcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcihmcmVxKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gZnJlcTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcoZnJlcSkgfHwgVG9uZS5pc1VuZGVmKGZyZXEpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5GcmVxdWVuY3koZnJlcSkudmFsdWVPZigpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoZnJlcSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZyZXEudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSB0aW1lIHJlcHJlc2VudGF0aW9uIGludG8gdGlja3MuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHJldHVybiB7VGlja3N9ICB0aGUgdGltZSBpbiB0aWNrc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodGltZSkgfHwgVG9uZS5pc1N0cmluZyh0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKS50b1RpY2tzKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzVW5kZWYodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LnRpY2tzO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGltZSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRpbWUudG9UaWNrcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGFyYW0gd3JhcHMgdGhlIG5hdGl2ZSBXZWIgQXVkaW8ncyBBdWRpb1BhcmFtIHRvIHByb3ZpZGVcblx0XHQgKiAgICAgICAgIGFkZGl0aW9uYWwgdW5pdCBjb252ZXJzaW9uIGZ1bmN0aW9uYWxpdHkuIEl0IGFsc29cblx0XHQgKiAgICAgICAgIHNlcnZlcyBhcyBhIGJhc2UtY2xhc3MgZm9yIGNsYXNzZXMgd2hpY2ggaGF2ZSBhIHNpbmdsZSxcblx0XHQgKiAgICAgICAgIGF1dG9tYXRhYmxlIHBhcmFtZXRlci5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0gIHtBdWRpb1BhcmFtfSAgcGFyYW0gIFRoZSBwYXJhbWV0ZXIgdG8gd3JhcC5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5UeXBlfSB1bml0cyBUaGUgdW5pdHMgb2YgdGhlIGF1ZGlvIHBhcmFtLlxuXHRcdCAqICBAcGFyYW0gIHtCb29sZWFufSBjb252ZXJ0IElmIHRoZSBwYXJhbSBzaG91bGQgYmUgY29udmVydGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwYXJhbScsXG5cdCAgICAgICAgICAgICd1bml0cycsXG5cdCAgICAgICAgICAgICdjb252ZXJ0J1xuXHQgICAgICAgIF0sIFRvbmUuUGFyYW0pO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG5hdGl2ZSBwYXJhbWV0ZXIgdG8gY29udHJvbFxuXHRcdFx0ICogIEB0eXBlICB7QXVkaW9QYXJhbX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0ID0gb3B0aW9ucy5wYXJhbTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdW5pdHMgb2YgdGhlIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlR5cGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnVuaXRzID0gb3B0aW9ucy51bml0cztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiB0aGUgdmFsdWUgc2hvdWxkIGJlIGNvbnZlcnRlZCBvciBub3Rcblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY29udmVydCA9IG9wdGlvbnMuY29udmVydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUcnVlIGlmIHRoZSBzaWduYWwgdmFsdWUgaXMgYmVpbmcgb3ZlcnJpZGRlbiBieVxuXHRcdFx0ICogIGEgY29ubmVjdGVkIHNpZ25hbC5cblx0XHRcdCAqICBAcmVhZE9ubHlcblx0XHRcdCAqICBAdHlwZSAge2Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3ZlcnJpZGRlbiA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHRpbWVsaW5lIHdoaWNoIHRyYWNrcyBhbGwgb2YgdGhlIGF1dG9tYXRpb25zLlxuXHRcdFx0ICogQHR5cGUge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFRvbmUuVGltZWxpbmUoMTAwMCk7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKG9wdGlvbnMudmFsdWUpICYmIHRoaXMuX3BhcmFtKSB7XG5cdCAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhcmFtLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVmYXVsdCxcblx0ICAgICAgICAnY29udmVydCc6IHRydWUsXG5cdCAgICAgICAgJ3BhcmFtJzogdW5kZWZpbmVkXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYXJhbSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJhbS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90b1VuaXRzKHRoaXMuZ2V0VmFsdWVBdFRpbWUobm93KSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pbml0aWFsVmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgICAgICB0aGlzLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLnNldFZhbHVlQXRUaW1lKHZhbHVlLCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXJcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYXJhbSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJhbS5wcm90b3R5cGUsICdtaW5WYWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5UaW1lIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5GcmVxdWVuY3kgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLk5vcm1hbFJhbmdlIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5Qb3NpdGl2ZSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQlBNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQXVkaW9SYW5nZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5EZWNpYmVscykge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC1JbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJhbS5taW5WYWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXJcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYXJhbSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJhbS5wcm90b3R5cGUsICdtYXhWYWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQXVkaW9SYW5nZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW0ubWF4VmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IHRoZSBnaXZlbiB2YWx1ZSBmcm9tIHRoZSB0eXBlIHNwZWNpZmllZCBieSBUb25lLlBhcmFtLnVuaXRzXG5cdFx0ICogIGludG8gdGhlIGRlc3RpbmF0aW9uIHZhbHVlIChzdWNoIGFzIEdhaW4gb3IgRnJlcXVlbmN5KS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7Kn0gdmFsIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG5cdFx0ICogIEByZXR1cm4ge251bWJlcn0gICAgIHRoZSBudW1iZXIgd2hpY2ggdGhlIHZhbHVlIHNob3VsZCBiZSBzZXQgdG9cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9mcm9tVW5pdHMgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKCh0aGlzLmNvbnZlcnQgfHwgVG9uZS5pc1VuZGVmKHRoaXMuY29udmVydCkpICYmICF0aGlzLm92ZXJyaWRkZW4pIHtcblx0ICAgICAgICAgICAgc3dpdGNoICh0aGlzLnVuaXRzKSB7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLlRpbWU6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHModmFsKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuRnJlcXVlbmN5OlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9GcmVxdWVuY3kodmFsKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuRGVjaWJlbHM6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5kYlRvR2Fpbih2YWwpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWwsIDApLCAxKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuQXVkaW9SYW5nZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWwsIC0xKSwgMSk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLlBvc2l0aXZlOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHZhbCwgMCk7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ29udmVydCB0aGUgcGFyYW1ldGVycyB2YWx1ZSBpbnRvIHRoZSB1bml0cyBzcGVjaWZpZWQgYnkgVG9uZS5QYXJhbS51bml0cy5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSAge251bWJlcn0gdmFsIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG5cdFx0ICogQHJldHVybiB7bnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX3RvVW5pdHMgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udmVydCB8fCBUb25lLmlzVW5kZWYodGhpcy5jb252ZXJ0KSkge1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudW5pdHMpIHtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuRGVjaWJlbHM6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5nYWluVG9EYih2YWwpO1xuXHQgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgbWluaW11bSBvdXRwdXQgdmFsdWVcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9taW5PdXRwdXQgPSAwLjAwMDAxO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBldmVudCB0eXBlc1xuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZSA9IHtcblx0ICAgICAgICBMaW5lYXI6ICdsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZScsXG5cdCAgICAgICAgRXhwb25lbnRpYWw6ICdleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICBUYXJnZXQ6ICdzZXRUYXJnZXRBdFRpbWUnLFxuXHQgICAgICAgIFNldFZhbHVlOiAnc2V0VmFsdWVBdFRpbWUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhIHBhcmFtZXRlciB2YWx1ZSBjaGFuZ2UgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7Kn1cdHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSAgdGltZSBUaGUgdGltZSB3aGVuIHRoZSBjaGFuZ2Ugc2hvdWxkIG9jY3VyLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHRoZSBmcmVxdWVuY3kgdG8gXCJHNFwiIGluIGV4YWN0bHkgMSBzZWNvbmQgZnJvbSBub3cuXG5cdFx0ICogZnJlcS5zZXRWYWx1ZUF0VGltZShcIkc0XCIsIFwiKzFcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLnNldFZhbHVlQXRUaW1lKHZhbHVlLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzaWduYWxzIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBTdWJzZXF1ZW50IHNjaGVkdWxpbmdcblx0XHQgKiAgbWF5IGludmFsaWRhdGUgdGhlIHJldHVybmVkIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgV2hlbiB0byBnZXQgdGhlIHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgYWZ0ZXIgPSB0aGlzLl9ldmVudHMuZ2V0QWZ0ZXIodGltZSk7XG5cdCAgICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgdmFyIGluaXRpYWxWYWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyh0aGlzLl9pbml0aWFsVmFsdWUsIHRoaXMuX3BhcmFtLmRlZmF1bHRWYWx1ZSk7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXHQgICAgICAgIC8vaWYgaXQgd2FzIHNldCBieVxuXHQgICAgICAgIGlmIChiZWZvcmUgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSBpbml0aWFsVmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5UYXJnZXQpIHtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzID0gdGhpcy5fZXZlbnRzLmdldEJlZm9yZShiZWZvcmUudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c1ZhbDtcblx0ICAgICAgICAgICAgaWYgKHByZXZpb3VzID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbCA9IGluaXRpYWxWYWx1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsID0gcHJldmlvdXMudmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9leHBvbmVudGlhbEFwcHJvYWNoKGJlZm9yZS50aW1lLCBwcmV2aW91c1ZhbCwgYmVmb3JlLnZhbHVlLCBiZWZvcmUuY29uc3RhbnQsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSBiZWZvcmUudmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcikge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2xpbmVhckludGVycG9sYXRlKGJlZm9yZS50aW1lLCBiZWZvcmUudmFsdWUsIGFmdGVyLnRpbWUsIGFmdGVyLnZhbHVlLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9leHBvbmVudGlhbEludGVycG9sYXRlKGJlZm9yZS50aW1lLCBiZWZvcmUudmFsdWUsIGFmdGVyLnRpbWUsIGFmdGVyLnZhbHVlLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGJlZm9yZS52YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDcmVhdGVzIGEgc2NoZWR1bGUgcG9pbnQgd2l0aCB0aGUgY3VycmVudCB2YWx1ZSBhdCB0aGUgY3VycmVudCB0aW1lLlxuXHRcdCAqICBUaGlzIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgYW4gYXV0b21hdGlvbiBhbmNob3IgcG9pbnQgaW4gb3JkZXIgdG9cblx0XHQgKiAgc2NoZWR1bGUgY2hhbmdlcyBmcm9tIHRoZSBjdXJyZW50IHZhbHVlLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gbm93IChPcHRpb25hbGx5KSBwYXNzIHRoZSBub3cgdmFsdWUgaW4uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRSYW1wUG9pbnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgY3VycmVudFZhbCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgdGhpcy5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmIChjdXJyZW50VmFsID09PSAwKSB7XG5cdCAgICAgICAgICAgIGN1cnJlbnRWYWwgPSB0aGlzLl9taW5PdXRwdXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuc2V0VmFsdWVBdFRpbWUodGhpcy5fdG9Vbml0cyhjdXJyZW50VmFsKSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhIGxpbmVhciBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbSB0aGVcblx0XHQgKiAgcHJldmlvdXMgc2NoZWR1bGVkIHBhcmFtZXRlciB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBlbmRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5kVGltZSkge1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICBlbmRUaW1lID0gdGhpcy50b1NlY29uZHMoZW5kVGltZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IGVuZFRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgZW5kVGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhbiBleHBvbmVudGlhbCBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgcHJldmlvdXMgc2NoZWR1bGVkIHBhcmFtZXRlciB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBlbmRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBlbmRUaW1lKSB7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIHZhbHVlID0gTWF0aC5tYXgodGhpcy5fbWluT3V0cHV0LCB2YWx1ZSk7XG5cdCAgICAgICAgZW5kVGltZSA9IHRoaXMudG9TZWNvbmRzKGVuZFRpbWUpO1xuXHQgICAgICAgIC8vc3RvcmUgdGhlIGV2ZW50XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5FeHBvbmVudGlhbCxcblx0ICAgICAgICAgICAgJ3RpbWUnOiBlbmRUaW1lLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIGVuZFRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gZXhwb25lbnRpYWwgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb21cblx0XHQgKiAgdGhlIGN1cnJlbnQgdGltZSBhbmQgY3VycmVudCB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUgb3ZlciB0aGVcblx0XHQgKiAgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWUgICBUaGUgdmFsdWUgdG8gcmFtcCB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vZXhwb25lbnRpYWxseSByYW1wIHRvIHRoZSB2YWx1ZSAyIG92ZXIgNCBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5leHBvbmVudGlhbFJhbXBUbygyLCA0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvID0gZnVuY3Rpb24gKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLnNldFJhbXBQb2ludChzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lICsgdGhpcy50b1NlY29uZHMocmFtcFRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGxpbmVhciBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgY3VycmVudCB0aW1lIGFuZCBjdXJyZW50IHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZSBvdmVyIHRoZVxuXHRcdCAqICBkdXJhdGlvbiBvZiB0aGUgcmFtcFRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0W3N0YXJ0VGltZT1ub3ddIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9saW5lYXJseSByYW1wIHRvIHRoZSB2YWx1ZSA0IG92ZXIgMyBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5saW5lYXJSYW1wVG8oNCwgMyk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5saW5lYXJSYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lICsgdGhpcy50b1NlY29uZHMocmFtcFRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBTaW5jZSBpdFxuXHRcdCAqICBpcyBhbiBleHBvbmVudGlhbCBhcHByb2FjaCBpdCB3aWxsIGNvbnRpbnVlIGFwcHJvYWNoaW5nIGFmdGVyIHRoZSByYW1wIGR1cmF0aW9uLiBUaGVcblx0XHQgKiAgcmFtcFRpbWUgaXMgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0byByZWFjaCBvdmVyIDk5JSBvZiB0aGUgd2F5IHRvd2FyZHMgdGhlIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2V4cG9uZW50aWFsbHkgcmFtcCB0byB0aGUgdmFsdWUgMiBvdmVyIDQgc2Vjb25kcy5cblx0XHQgKiBzaWduYWwuZXhwb25lbnRpYWxSYW1wVG8oMiwgNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS50YXJnZXRSYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUodmFsdWUsIHN0YXJ0VGltZSwgcmFtcFRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFNpbmNlIGl0XG5cdFx0ICogIGlzIGFuIGV4cG9uZW50aWFsIGFwcHJvYWNoIGl0IHdpbGwgY29udGludWUgYXBwcm9hY2hpbmcgYWZ0ZXIgdGhlIHJhbXAgZHVyYXRpb24uIFRoZVxuXHRcdCAqICByYW1wVGltZSBpcyB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRvIHJlYWNoIG92ZXIgOTklIG9mIHRoZSB3YXkgdG93YXJkcyB0aGUgdmFsdWUuIFRoaXMgbWV0aG9kc1xuXHRcdCAqICBpcyBzaW1pbGFyIHRvIHNldFRhcmdldEF0VGltZSBleGNlcHQgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIGEgdGltZSBpbnN0ZWFkIG9mIGEgJ3RpbWVDb25zdGFudCdcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHR0aW1lIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vZXhwb25lbnRpYWxseSByYW1wIHRvIHRoZSB2YWx1ZSAyIG92ZXIgNCBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5leHBvbmVudGlhbFJhbXBUbygyLCA0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSwgcmFtcFRpbWUpIHtcblx0ICAgICAgICB2YXIgdGltZUNvbnN0YW50ID0gTWF0aC5sb2codGhpcy50b1NlY29uZHMocmFtcFRpbWUpICsgMSkgLyBNYXRoLmxvZygyMDApO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5zZXRUYXJnZXRBdFRpbWUodmFsdWUsIHRpbWUsIHRpbWVDb25zdGFudCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoXG5cdFx0ICogIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRpbWUgY29uc3RhbnQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGltZUNvbnN0YW50XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRUYXJnZXRBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KSB7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIC8vIFRoZSB2YWx1ZSB3aWxsIG5ldmVyIGJlIGFibGUgdG8gYXBwcm9hY2ggd2l0aG91dCB0aW1lQ29uc3RhbnQgPiAwLlxuXHQgICAgICAgIGlmICh0aW1lQ29uc3RhbnQgPD0gMCkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RpbWVDb25zdGFudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5UYXJnZXQsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IHN0YXJ0VGltZSxcblx0ICAgICAgICAgICAgJ2NvbnN0YW50JzogdGltZUNvbnN0YW50XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uc2V0VGFyZ2V0QXRUaW1lKHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgYW4gYXJyYXkgb2YgYXJiaXRyYXJ5IHBhcmFtZXRlciB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge0FycmF5fSB2YWx1ZXNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBkdXJhdGlvblxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc2NhbGluZz0xXSBJZiB0aGUgdmFsdWVzIGluIHRoZSBjdXJ2ZSBzaG91bGQgYmUgc2NhbGVkIGJ5IHNvbWUgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFZhbHVlQ3VydmVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWVzLCBzdGFydFRpbWUsIGR1cmF0aW9uLCBzY2FsaW5nKSB7XG5cdCAgICAgICAgc2NhbGluZyA9IFRvbmUuZGVmYXVsdEFyZyhzY2FsaW5nLCAxKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0VmFsdWVBdFRpbWUodmFsdWVzWzBdICogc2NhbGluZywgc3RhcnRUaW1lKTtcblx0ICAgICAgICB2YXIgc2VnVGltZSA9IGR1cmF0aW9uIC8gKHZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlc1tpXSAqIHNjYWxpbmcsIHN0YXJ0VGltZSArIGkgKiBzZWdUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbHMgYWxsIHNjaGVkdWxlZCBwYXJhbWV0ZXIgY2hhbmdlcyB3aXRoIHRpbWVzIGdyZWF0ZXIgdGhhbiBvclxuXHRcdCAqICBlcXVhbCB0byBzdGFydFRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVkVmFsdWVzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoaXMgaXMgc2ltaWxhciB0byBbY2FuY2VsU2NoZWR1bGVkVmFsdWVzXSgjY2FuY2VsU2NoZWR1bGVkVmFsdWVzKSBleGNlcHRcblx0XHQgKiAgaXQgaG9sZHMgdGhlIGF1dG9tYXRlZCB2YWx1ZSBhdCB0aW1lIHVudGlsIHRoZSBuZXh0IGF1dG9tYXRlZCBldmVudC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuY2FuY2VsQW5kSG9sZEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHZhbHVlQXRUaW1lID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICAvL2lmIHRoZXJlIGlzIGFuIGV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgICAgLy9hbmQgdGhhdCBldmVuIGlzIG5vdCBhIFwic2V0XCJcblx0ICAgICAgICB2YXIgYmVmb3JlID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICB2YXIgYWZ0ZXIgPSB0aGlzLl9ldmVudHMuZ2V0QWZ0ZXIodGltZSk7XG5cdCAgICAgICAgaWYgKGJlZm9yZSAmJiBiZWZvcmUudGltZSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAvL3JlbW92ZSBldmVyeXRoaW5nIGFmdGVyXG5cdCAgICAgICAgICAgIGlmIChhZnRlcikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbChhZnRlci50aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwodGltZSArIDAuMDAwMDAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgLy9jYW5jZWwgdGhlIG5leHQgZXZlbnQocylcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbChhZnRlci50aW1lKTtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlQXRUaW1lLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlQXRUaW1lLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodmFsdWVBdFRpbWUsIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZUF0VGltZSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zZXQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVBdFRpbWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmICh0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFyYW0uc2V0VmFsdWVBdFRpbWUodmFsdWVBdFRpbWUsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmFtcHMgdG8gdGhlIGdpdmVuIHZhbHVlIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKiAgQXV0b21hdGljYWxseSBzZWxlY3RzIHRoZSBiZXN0IHJhbXAgdHlwZSAoZXhwb25lbnRpYWwgb3IgbGluZWFyKVxuXHRcdCAqICBkZXBlbmRpbmcgb24gdGhlIGB1bml0c2Agb2YgdGhlIHNpZ25hbFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgXHRUaGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JhbXAgdG8gdGhlIHZhbHVlIGVpdGhlciBsaW5lYXJseSBvciBleHBvbmVudGlhbGx5XG5cdFx0ICogLy9kZXBlbmRpbmcgb24gdGhlIFwidW5pdHNcIiB2YWx1ZSBvZiB0aGUgc2lnbmFsXG5cdFx0ICogc2lnbmFsLnJhbXBUbygwLCAxMCk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zY2hlZHVsZSBpdCB0byByYW1wIHN0YXJ0aW5nIGF0IGEgc3BlY2lmaWMgdGltZVxuXHRcdCAqIHNpZ25hbC5yYW1wVG8oMCwgMTAsIDUpXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5yYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICByYW1wVGltZSA9IFRvbmUuZGVmYXVsdEFyZyhyYW1wVGltZSwgMC4xKTtcblx0ICAgICAgICBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkZyZXF1ZW5jeSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQlBNIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5EZWNpYmVscykge1xuXHQgICAgICAgICAgICB0aGlzLmV4cG9uZW50aWFsUmFtcFRvKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUbyh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFVVE9NQVRJT04gQ1VSVkUgQ0FMQ1VMQVRJT05TXG5cdCAgICAvL1x0TUlUIExpY2Vuc2UsIGNvcHlyaWdodCAoYykgMjAxNCBKb3JkYW4gU2FudGVsbFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBDYWxjdWxhdGVzIHRoZSB0aGUgdmFsdWUgYWxvbmcgdGhlIGN1cnZlIHByb2R1Y2VkIGJ5IHNldFRhcmdldEF0VGltZVxuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2V4cG9uZW50aWFsQXBwcm9hY2ggPSBmdW5jdGlvbiAodDAsIHYwLCB2MSwgdGltZUNvbnN0YW50LCB0KSB7XG5cdCAgICAgICAgcmV0dXJuIHYxICsgKHYwIC0gdjEpICogTWF0aC5leHAoLSh0IC0gdDApIC8gdGltZUNvbnN0YW50KTtcblx0ICAgIH07XG5cdCAgICAvLyBDYWxjdWxhdGVzIHRoZSB0aGUgdmFsdWUgYWxvbmcgdGhlIGN1cnZlIHByb2R1Y2VkIGJ5IGxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fbGluZWFySW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAodDAsIHYwLCB0MSwgdjEsIHQpIHtcblx0ICAgICAgICByZXR1cm4gdjAgKyAodjEgLSB2MCkgKiAoKHQgLSB0MCkgLyAodDEgLSB0MCkpO1xuXHQgICAgfTtcblx0ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHRoZSB2YWx1ZSBhbG9uZyB0aGUgY3VydmUgcHJvZHVjZWQgYnkgZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZVxuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAodDAsIHYwLCB0MSwgdjEsIHQpIHtcblx0ICAgICAgICByZXR1cm4gdjAgKiBNYXRoLnBvdyh2MSAvIHYwLCAodCAtIHQwKSAvICh0MSAtIHQwKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFyYW07XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIE9mZmxpbmVBdWRpb0NvbnRleHRcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQ29udGV4dH1cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgY2hhbm5lbHMgIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdG8gcmVuZGVyXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGR1cmF0aW9uICBUaGUgZHVyYXRpb24gdG8gcmVuZGVyIGluIHNhbXBsZXNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHNhbXBsZVJhdGUgdGhlIHNhbXBsZSByYXRlIHRvIHJlbmRlciBhdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dCA9IGZ1bmN0aW9uIChjaGFubmVscywgZHVyYXRpb24sIHNhbXBsZVJhdGUpIHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb2ZmbGluZSBjb250ZXh0XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge09mZmxpbmVBdWRpb0NvbnRleHR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB2YXIgb2ZmbGluZUNvbnRleHQgPSBuZXcgT2ZmbGluZUF1ZGlvQ29udGV4dChjaGFubmVscywgZHVyYXRpb24gKiBzYW1wbGVSYXRlLCBzYW1wbGVSYXRlKTtcblx0ICAgICAgICAvL3dyYXAgdGhlIG1ldGhvZHMvbWVtYmVyc1xuXHQgICAgICAgIFRvbmUuQ29udGV4dC5jYWxsKHRoaXMsIHtcblx0ICAgICAgICAgICAgJ2NvbnRleHQnOiBvZmZsaW5lQ29udGV4dCxcblx0ICAgICAgICAgICAgJ2Nsb2NrU291cmNlJzogJ29mZmxpbmUnLFxuXHQgICAgICAgICAgICAnbG9va0FoZWFkJzogMCxcblx0ICAgICAgICAgICAgJ3VwZGF0ZUludGVydmFsJzogMTI4IC8gc2FtcGxlUmF0ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgcHJpdmF0ZSByZWZlcmVuY2UgdG8gdGhlIGR1cmF0aW9uXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW4gYXJ0aWZpY2lhbCBjbG9jayBzb3VyY2Vcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSAwO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT2ZmbGluZUNvbnRleHQsIFRvbmUuQ29udGV4dCk7XG5cdCAgICAvKipcblx0XHQgKiAgT3ZlcnJpZGUgdGhlIG5vdyBtZXRob2QgdG8gcG9pbnQgdG8gdGhlIGludGVybmFsIGNsb2NrIHRpbWVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFRpbWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbmRlciB0aGUgb3V0cHV0IG9mIHRoZSBPZmZsaW5lQ29udGV4dFxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB3aGlsZSAodGhpcy5fZHVyYXRpb24gLSB0aGlzLl9jdXJyZW50VGltZSA+PSAwKSB7XG5cdCAgICAgICAgICAgIC8vaW52b2tlIGFsbCB0aGUgY2FsbGJhY2tzIG9uIHRoYXQgdGltZVxuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3RpY2snKTtcblx0ICAgICAgICAgICAgLy9pbmNyZW1lbnQgdGhlIGNsb2NrXG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHRoaXMuYmxvY2tUaW1lO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dC5zdGFydFJlbmRlcmluZygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbG9zZSB0aGUgY29udGV4dFxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2NvbnRleHQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5PZmZsaW5lQ29udGV4dDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuXHQgICAgICAgIHZhciBpc01vYmlsZVNhZmFyaSA9IHVhLmluY2x1ZGVzKCdzYWZhcmknKSAmJiAhdWEuaW5jbHVkZXMoJ2Nocm9tZScpICYmIHVhLmluY2x1ZGVzKCdtb2JpbGUnKTtcblx0ICAgICAgICBpZiAoaXNNb2JpbGVTYWZhcmkpIHtcblx0ICAgICAgICAgICAgLy9tb2JpbGUgc2FmYXJpIGhhcyBhIGJpemFycmUgYnVnIHdpdGggdGhlIG9mZmxpbmUgY29udGV4dFxuXHQgICAgICAgICAgICAvL3doZW4gYSBCdWZmZXJTb3VyY2VOb2RlIGlzIHN0YXJ0ZWQsIGl0IHN0YXJ0cyB0aGUgb2ZmbGluZSBjb250ZXh0XG5cdCAgICAgICAgICAgIC8vXG5cdCAgICAgICAgICAgIC8vZGVmZXJyaW5nIGFsbCBCdWZmZXJTb3VyY2Ugc3RhcnRzIHRpbGwgdGhlIGxhc3QgcG9zc2libGUgbW9tZW50XG5cdCAgICAgICAgICAgIC8vcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCBvZiB0aGlzIGhhcHBlbmluZ1xuXHQgICAgICAgICAgICBUb25lLk9mZmxpbmVDb250ZXh0LnByb3RvdHlwZS5jcmVhdGVCdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnVmZmVyU291cmNlID0gdGhpcy5fY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICAgICAgICAgIHZhciBfbmF0aXZlX3N0YXJ0ID0gYnVmZmVyU291cmNlLnN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyU291cmNlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBfbmF0aXZlX3N0YXJ0LmNhbGwoYnVmZmVyU291cmNlLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIDApO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclNvdXJjZTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIHRoaW4gd3JhcHBlciBhcm91bmQgdGhlIE5hdGl2ZSBXZWIgQXVkaW8gR2Fpbk5vZGUuXG5cdFx0ICogICAgICAgICBUaGUgR2Fpbk5vZGUgaXMgYSBiYXNpYyBidWlsZGluZyBibG9jayBvZiB0aGUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICBBUEkgYW5kIGlzIHVzZWZ1bCBmb3Igcm91dGluZyBhdWRpbyBhbmQgYWRqdXN0aW5nIGdhaW5zLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gIGdhaW4gIFRoZSBpbml0aWFsIGdhaW4gb2YgdGhlIEdhaW5Ob2RlXG5cdFx0ICogIEBwYXJhbSB7VG9uZS5UeXBlPX0gdW5pdHMgVGhlIHVuaXRzIG9mIHRoZSBnYWluIHBhcmFtZXRlci5cblx0XHQgKi9cblx0ICAgIFRvbmUuR2FpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ3VuaXRzJ1xuXHQgICAgICAgIF0sIFRvbmUuR2Fpbik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgR2Fpbk5vZGVcblx0XHRcdCAqICBAdHlwZSAge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLl9nYWluTm9kZSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gcGFyYW1ldGVyIG9mIHRoZSBnYWluIG5vZGUuXG5cdFx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5nYWluID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9nYWluTm9kZS5nYWluLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBvcHRpb25zLnVuaXRzLFxuXHQgICAgICAgICAgICAndmFsdWUnOiBvcHRpb25zLmdhaW4sXG5cdCAgICAgICAgICAgICdjb252ZXJ0Jzogb3B0aW9ucy5jb252ZXJ0XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2dhaW4nKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdhaW4sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdnYWluJzogMSxcblx0ICAgICAgICAnY29udmVydCc6IHRydWVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkdhaW59ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdnYWluJyk7XG5cdCAgICAgICAgdGhpcy5nYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmdhaW4gPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdhaW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCAmJiAhQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVDb25zdGFudFNvdXJjZSkge1xuXHQgICAgICAgIHZhciBDb25zdGFudFNvdXJjZU5vZGUgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgMTI4LCBjb250ZXh0LnNhbXBsZVJhdGUpO1xuXHQgICAgICAgICAgICB2YXIgYXJyID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgYXJyW2ldID0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UubG9vcCA9IHRydWU7XG5cdCAgICAgICAgICAgIHZhciBnYWluTm9kZSA9IHRoaXMuX291dHB1dCA9IGNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgICAgICB0aGlzLm9mZnNldCA9IGdhaW5Ob2RlLmdhaW47XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5jb25uZWN0KGdhaW5Ob2RlKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIENvbnN0YW50U291cmNlTm9kZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2Uuc3RhcnQodGltZSk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLnN0b3AodGltZSk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXQuY29ubmVjdC5hcHBseSh0aGlzLl9vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXQuZGlzY29ubmVjdC5hcHBseSh0aGlzLl9vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVDb25zdGFudFNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudFNvdXJjZU5vZGUodGhpcyk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnN0YW50U291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50U291cmNlTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc2lnbmFsIGlzIGFuIGF1ZGlvLXJhdGUgdmFsdWUuIFRvbmUuU2lnbmFsIGlzIGEgY29yZSBjb21wb25lbnQgb2YgdGhlIGxpYnJhcnkuXG5cdFx0ICogICAgICAgICAgVW5saWtlIGEgbnVtYmVyLCBTaWduYWxzIGNhbiBiZSBzY2hlZHVsZWQgd2l0aCBzYW1wbGUtbGV2ZWwgYWNjdXJhY3kuIFRvbmUuU2lnbmFsXG5cdFx0ICogICAgICAgICAgaGFzIGFsbCBvZiB0aGUgbWV0aG9kcyBhdmFpbGFibGUgdG8gbmF0aXZlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgIFtBdWRpb1BhcmFtXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1hdWRpb3BhcmFtLWludGVyZmFjZSlcblx0XHQgKiAgICAgICAgICBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgY29udmVuaWVuY2VzLiBSZWFkIG1vcmUgYWJvdXQgd29ya2luZyB3aXRoIHNpZ25hbHNcblx0XHQgKiAgICAgICAgICBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvU2lnbmFscykuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlBhcmFtfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxBdWRpb1BhcmFtfSBbdmFsdWVdIEluaXRpYWwgdmFsdWUgb2YgdGhlIHNpZ25hbC4gSWYgYW4gQXVkaW9QYXJhbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHBhc3NlZCBpbiwgdGhhdCBwYXJhbWV0ZXIgd2lsbCBiZSB3cmFwcGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNvbnRyb2xsZWQgYnkgdGhlIFNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IFt1bml0cz1OdW1iZXJdIHVuaXQgVGhlIHVuaXRzIHRoZSBzaWduYWwgaXMgaW4uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgxMCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd2YWx1ZScsXG5cdCAgICAgICAgICAgICd1bml0cydcblx0ICAgICAgICBdLCBUb25lLlNpZ25hbCk7XG5cdCAgICAgICAgVG9uZS5QYXJhbS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiBXaGVuIGEgc2lnbmFsIGlzIGNvbm5lY3RlZCB0byBhbm90aGVyIHNpZ25hbCBvciBhdWRpbyBwYXJhbSxcblx0XHRcdCogdGhpcyBzaWduYWwgYmVjb21lcyBhIHByb3h5IGZvciBpdFxuXHRcdFx0KiBAdHlwZSB7QXJyYXl9XG5cdFx0XHQqIEBwcml2YXRlXG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCogSW5kaWNhdGVzIGlmIHRoZSBjb25zdGFudCBzb3VyY2Ugd2FzIHN0YXJ0ZWQgb3Igbm90XG5cdFx0XHQqIEBwcml2YXRlXG5cdFx0XHQqIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0Ki9cblx0ICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY29uc3RhbnQgc291cmNlIG5vZGUgd2hpY2ggZ2VuZXJhdGVzIHRoZSBzaWduYWxcblx0XHRcdCAqIEB0eXBlIHtDb25zdGFudFNvdXJjZU5vZGV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2UgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ29uc3RhbnRTb3VyY2UoKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuX2NvbnN0YW50U291cmNlLm9mZnNldDtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBub2RlIHdoZXJlIHRoZSBjb25zdGFudCBzaWduYWwgdmFsdWUgaXMgc2NhbGVkLlxuXHRcdFx0ICogQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5fY29uc3RhbnRTb3VyY2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbm9kZSB3aGVyZSB0aGUgdmFsdWUgaXMgc2V0LlxuXHRcdFx0ICogQHR5cGUge1RvbmUuUGFyYW19XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMuX3BhcmFtID0gdGhpcy5vdXRwdXQub2Zmc2V0O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2lnbmFsLCBUb25lLlBhcmFtKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndmFsdWUnOiAwLFxuXHQgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWZhdWx0LFxuXHQgICAgICAgICdjb252ZXJ0JzogdHJ1ZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGVuIHNpZ25hbHMgY29ubmVjdCB0byBvdGhlciBzaWduYWxzIG9yIEF1ZGlvUGFyYW1zLFxuXHRcdCAqICB0aGV5IHRha2Ugb3ZlciB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoYXQgc2lnbmFsIG9yIEF1ZGlvUGFyYW0uXG5cdFx0ICogIEZvciBhbGwgb3RoZXIgbm9kZXMsIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBhIGRlZmF1bHQgPGNvZGU+Y29ubmVjdDwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQG92ZXJyaWRlXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9QYXJhbXxBdWRpb05vZGV8VG9uZS5TaWduYWx8VG9uZX0gbm9kZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bWJlcj0wXSBUaGUgb3V0cHV0IG51bWJlciB0byBjb25uZWN0IGZyb20uXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW1iZXI9MF0gVGhlIGlucHV0IG51bWJlciB0byBjb25uZWN0IHRvLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWx9IHRoaXNcblx0XHQgKiAgQG1ldGhvZFxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIC8vdGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gd2hlcmUgdGhpcyBub2RlIHdpbGwgZm9yd2FyZCBhdXRvbWF0aW9uc1xuXHQgICAgICAgIC8vdG8gY29ubmVjdGVkIG5vZGVzIHdpdGhvdXQgYW55IHNpZ25hbCBpZiBwb3NzaWJsZS5cblx0ICAgICAgICBpZiAodGhpcy5faXNQYXJhbShub2RlKSAmJiAhdGhpcy5fc291cmNlU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgICAgIG5vZGUub3ZlcnJpZGRlbiA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGx5QXV0b21hdGlvbnMobm9kZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fc291cmNlU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZS5zdGFydCgwKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUYWtlcyBhIG5vZGUgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgaWYgaXQgaXMgYSBQYXJhbSBvciBBdWRpb1BhcmFtXG5cdFx0ICogQHBhcmFtICB7Kn0gbm9kZSBUaGUgbm9kZSB0byB0ZXN0XG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLl9pc1BhcmFtID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5QYXJhbSAmJiBUb25lLlBhcmFtID09PSBub2RlLmNvbnN0cnVjdG9yIHx8IG5vZGUgaW5zdGFuY2VvZiBBdWRpb1BhcmFtO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIERpc2NhcmQgdGhlIG9wdGltaXphdGlvbiBhbmQgY29ubmVjdCBhbGwgb2YgdGhlIHByb3hpZXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLl9jb25uZWN0UHJveGllcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZVN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlLnN0YXJ0KDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9wcm94aWVzLmZvckVhY2goZnVuY3Rpb24gKHByb3h5KSB7XG5cdCAgICAgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdC5jYWxsKHRoaXMsIHByb3h5KTtcblx0ICAgICAgICAgICAgaWYgKHByb3h5Ll9wcm94aWVzKSB7XG5cdCAgICAgICAgICAgICAgICBwcm94eS5fY29ubmVjdFByb3hpZXMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlZCB3aGVuIGEgbm9kZSBpcyBjb25uZWN0ZWQgdG8gdGhpc1xuXHRcdCAqIEBwYXJhbSAge0F1ZGlvTm9kZX0gZnJvbVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX29uQ29ubmVjdCA9IGZ1bmN0aW9uIChmcm9tKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLl9pc1BhcmFtKGZyb20pKSB7XG5cdCAgICAgICAgICAgIC8vY29ubmVjdCBhbGwgdGhlIHByb3hpZXNcblx0ICAgICAgICAgICAgdGhpcy5fY29ubmVjdFByb3hpZXMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQXBwbHkgYWxsIHRoZSBjdXJyZW50IGF1dG9tYXRpb25zIHRvIHRoZSBnaXZlbiBwYXJhbWV0ZXJcblx0XHQgKiBAcGFyYW0gIHtBdWRpb1BhcmFtfSBwYXJhbVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX2FwcGx5QXV0b21hdGlvbnMgPSBmdW5jdGlvbiAocGFyYW0pIHtcblx0ICAgICAgICB2YXIgbm93ID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lO1xuXHQgICAgICAgIHBhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhub3cpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZShub3cpO1xuXHQgICAgICAgIHBhcmFtLnNldFZhbHVlQXRUaW1lKGN1cnJlbnRWYWwsIG5vdyk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmZvckVhY2hGcm9tKG5vdywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHBhcmFtW2V2ZW50LnR5cGVdKGV2ZW50LnZhbHVlLCBldmVudC50aW1lLCBldmVudC5jb25zdGFudCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRGlzY29ubmVjdCBmcm9tIHRoZSBnaXZlbiBub2RlIG9yIGFsbCBub2RlcyBpZiBubyBwYXJhbSBpcyBnaXZlbi5cblx0XHQgKiBAcGFyYW0gIHtBdWRpb05vZGV8QXVkaW9QYXJhbX0gbm9kZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2lnbmFsfSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fcHJveGllcy5pbmNsdWRlcyhub2RlKSkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9wcm94aWVzLmluZGV4T2Yobm9kZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKCFub2RlKSB7XG5cdCAgICAgICAgICAgIC8vbm8gYXJndW1lbnQsIGRpc2Nvbm5lY3QgZXZlcnl0aGluZ1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzID0gW107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc2Nvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGN1cnJlbnQgc2lnbmFsIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgV2hlbiB0byBnZXQgdGhlIHNpZ25hbCB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3BhcmFtLmdldFZhbHVlQXRUaW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJhbS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5QYXJhbS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLy93cmFwIGFsbCBvZiB0aGUgYXV0b21hdGlvbiBtZXRob2RzXG5cdCAgICBbXG5cdCAgICAgICAgJ3NldFZhbHVlQXRUaW1lJyxcblx0ICAgICAgICAnbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgICdleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICAnc2V0VGFyZ2V0QXRUaW1lJ1xuXHQgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcblx0ICAgICAgICB2YXIgcHJldmlvdXNNZXRob2QgPSBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdCAgICAgICAgICAgIHByZXZpb3VzTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIGFyZ3NbMF0gPSB0aGlzLl9mcm9tVW5pdHMoYXJnc1swXSk7XG5cdCAgICAgICAgICAgIGFyZ3NbMV0gPSB0aGlzLnRvU2Vjb25kcyhhcmdzWzFdKTtcblx0ICAgICAgICAgICAgLy9hcHBseSBpdCB0byB0aGUgcHJveGllc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLmZvckVhY2goZnVuY3Rpb24gKHNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc2lnbmFsW21ldGhvZF0uYXBwbHkoc2lnbmFsLCBhcmdzKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfTtcblx0ICAgIH0pO1xuXHQgICAgW1xuXHQgICAgICAgICdjYW5jZWxTY2hlZHVsZWRWYWx1ZXMnLFxuXHQgICAgICAgICdjYW5jZWxBbmRIb2xkQXRUaW1lJ1xuXHQgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcblx0ICAgICAgICB2YXIgcHJldmlvdXNNZXRob2QgPSBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdCAgICAgICAgICAgIHByZXZpb3VzTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIGFyZ3NbMF0gPSB0aGlzLnRvU2Vjb25kcyhhcmdzWzBdKTtcblx0ICAgICAgICAgICAgLy9hcHBseSBpdCB0byB0aGUgcHJveGllc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLmZvckVhY2goZnVuY3Rpb24gKHNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc2lnbmFsW21ldGhvZF0uYXBwbHkoc2lnbmFsLCBhcmdzKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfTtcblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2UuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wcm94aWVzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TaWduYWw7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBQb3cgYXBwbGllcyBhbiBleHBvbmVudCB0byB0aGUgaW5jb21pbmcgc2lnbmFsLiBUaGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogICAgICAgICBtdXN0IGJlIEF1ZGlvUmFuZ2UuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IGV4cCBUaGUgZXhwb25lbnQgdG8gYXBwbHkgdG8gdGhlIGluY29taW5nIHNpZ25hbCwgbXVzdCBiZSBhdCBsZWFzdCAyLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcG93ID0gbmV3IFRvbmUuUG93KDIpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KHBvdyk7XG5cdFx0ICogLy9vdXRwdXQgb2YgcG93IGlzIDAuMjUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb3cgPSBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiB0aGUgZXhwb25lbnRcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwID0gVG9uZS5kZWZhdWx0QXJnKGV4cCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHBTY2FsZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKHRoaXMuX2V4cEZ1bmModGhpcy5fZXhwKSwgODE5Mik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Qb3csIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdmFsdWUgb2YgdGhlIGV4cG9uZW50LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBvdyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Qb3cucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHA7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwID0gZXhwO1xuXHQgICAgICAgICAgICB0aGlzLl9leHBTY2FsZXIuc2V0TWFwKHRoaXMuX2V4cEZ1bmModGhpcy5fZXhwKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGZ1bmN0aW9uIHdoaWNoIG1hcHMgdGhlIHdhdmVzaGFwZXJcblx0XHQgKiAgQHBhcmFtICAge251bWJlcn0gZXhwXG5cdFx0ICogIEByZXR1cm4ge2Z1bmN0aW9ufVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb3cucHJvdG90eXBlLl9leHBGdW5jID0gZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLnBvdyhNYXRoLmFicyh2YWwpLCBleHApO1xuXHQgICAgICAgIH07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb3d9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG93LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2V4cFNjYWxlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXhwU2NhbGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Qb3c7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5FbnZlbG9wZSBpcyBhbiBbQURTUl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3ludGhlc2l6ZXIjQURTUl9lbnZlbG9wZSlcblx0XHQgKiAgICAgICAgICBlbnZlbG9wZSBnZW5lcmF0b3IuIFRvbmUuRW52ZWxvcGUgb3V0cHV0cyBhIHNpZ25hbCB3aGljaFxuXHRcdCAqICAgICAgICAgIGNhbiBiZSBjb25uZWN0ZWQgdG8gYW4gQXVkaW9QYXJhbSBvciBUb25lLlNpZ25hbC5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvZS9lYS9BRFNSX3BhcmFtZXRlci5zdmdcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFthdHRhY2tdIFRoZSBhbW91bnQgb2YgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlIHRvIGdvIGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAwIHRvIGl0J3MgbWF4aW11bSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHRUaGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgdGhlIGF0dGFjayB0aGF0IGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgXHR0byBmYWxsIHRvIHRoZSBzdXN0YWluIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc3VzdGFpbl1cdFRoZSBwZXJjZW50IG9mIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgdGhlIGVudmVsb3BlIHJlc3RzIGF0IHVudGlsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0dGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0VGhlIGFtb3VudCBvZiB0aW1lIGFmdGVyIHRoZSByZWxlYXNlIGlzIHRyaWdnZXJlZCBpdCB0YWtlcyB0byByZWFjaCAwLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYW4gYW1wbGl0dWRlIGVudmVsb3BlXG5cdFx0ICogdmFyIGdhaW5Ob2RlID0gVG9uZS5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0XHQgKiB2YXIgZW52ID0gbmV3IFRvbmUuRW52ZWxvcGUoe1xuXHRcdCAqIFx0XCJhdHRhY2tcIiA6IDAuMSxcblx0XHQgKiBcdFwiZGVjYXlcIiA6IDAuMixcblx0XHQgKiBcdFwic3VzdGFpblwiIDogMSxcblx0XHQgKiBcdFwicmVsZWFzZVwiIDogMC44LFxuXHRcdCAqIH0pO1xuXHRcdCAqIGVudi5jb25uZWN0KGdhaW5Ob2RlLmdhaW4pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2dldCBhbGwgb2YgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ2RlY2F5Jyxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkVudmVsb3BlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZW4gdHJpZ2dlckF0dGFjayBpcyBjYWxsZWQsIHRoZSBhdHRhY2sgdGltZSBpcyB0aGUgYW1vdW50IG9mXG5cdFx0XHQgKiAgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlIHRvIHJlYWNoIGl0J3MgbWF4aW11bSB2YWx1ZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXR0YWNrID0gb3B0aW9ucy5hdHRhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWZ0ZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZSwgdGhlIHZhbHVlIHdpbGwgZmFsbFxuXHRcdFx0ICogIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSBkZWNheSB0aW1lIHRvIGl0J3Mgc3VzdGFpbiB2YWx1ZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVjYXkgPSBvcHRpb25zLmRlY2F5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogXHRUaGUgc3VzdGFpbiB2YWx1ZSBpcyB0aGUgdmFsdWVcblx0XHRcdCAqIFx0d2hpY2ggdGhlIGVudmVsb3BlIHJlc3RzIGF0IGFmdGVyIHRyaWdnZXJBdHRhY2sgaXNcblx0XHRcdCAqIFx0Y2FsbGVkLCBidXQgYmVmb3JlIHRyaWdnZXJSZWxlYXNlIGlzIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zdXN0YWluID0gb3B0aW9ucy5zdXN0YWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFmdGVyIHRyaWdnZXJSZWxlYXNlIGlzIGNhbGxlZCwgdGhlIGVudmVsb3BlJ3Ncblx0XHRcdCAqICB2YWx1ZSB3aWxsIGZhbGwgdG8gaXQncyBtaW1pbnVtIHZhbHVlIG92ZXIgdGhlXG5cdFx0XHQgKiAgZHVyYXRpb24gb2YgdGhlIHJlbGVhc2UgdGltZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbmV4dCB0aW1lIHRoZSBlbnZlbG9wZSBpcyBhdCBzdGFuZGJ5XG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSAnbGluZWFyJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbmV4dCB0aW1lIHRoZSBlbnZlbG9wZSBpcyBhdCBzdGFuZGJ5XG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gJ2V4cG9uZW50aWFsJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaWcgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlNpZ25hbCgwKTtcblx0ICAgICAgICAvL3NldCB0aGUgYXR0YWNrQ3VydmUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5hdHRhY2tDdXJ2ZSA9IG9wdGlvbnMuYXR0YWNrQ3VydmU7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlQ3VydmUgPSBvcHRpb25zLnJlbGVhc2VDdXJ2ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVudmVsb3BlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgJ3N1c3RhaW4nOiAwLjUsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAxLFxuXHQgICAgICAgICdhdHRhY2tDdXJ2ZSc6ICdsaW5lYXInLFxuXHQgICAgICAgICdyZWxlYXNlQ3VydmUnOiAnZXhwb25lbnRpYWwnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVhZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZW52ZWxvcGUuIFVzZWZ1bCBmb3Jcblx0XHQgKiBzeW5jcm9uaXppbmcgdmlzdWFsIG91dHB1dCB0byB0aGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSB2YWx1ZVxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNoYXBlIG9mIHRoZSBhdHRhY2suXG5cdFx0ICogQ2FuIGJlIGFueSBvZiB0aGVzZSBzdHJpbmdzOlxuXHRcdCAqIDx1bD5cblx0XHQgKiAgIDxsaT5saW5lYXI8L2xpPlxuXHRcdCAqICAgPGxpPmV4cG9uZW50aWFsPC9saT5cblx0XHQgKiAgIDxsaT5zaW5lPC9saT5cblx0XHQgKiAgIDxsaT5jb3NpbmU8L2xpPlxuXHRcdCAqICAgPGxpPmJvdW5jZTwvbGk+XG5cdFx0ICogICA8bGk+cmlwcGxlPC9saT5cblx0XHQgKiAgIDxsaT5zdGVwPC9saT5cblx0XHQgKiA8L3VsPlxuXHRcdCAqIENhbiBhbHNvIGJlIGFuIGFycmF5IHdoaWNoIGRlc2NyaWJlcyB0aGUgY3VydmUuIFZhbHVlc1xuXHRcdCAqIGluIHRoZSBhcnJheSBhcmUgZXZlbmx5IHN1YmRpdmlkZWQgYW5kIGxpbmVhcmx5XG5cdFx0ICogaW50ZXJwb2xhdGVkIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSBhdHRhY2suXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge1N0cmluZ3xBcnJheX1cblx0XHQgKiBAbmFtZSBhdHRhY2tDdXJ2ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogZW52LmF0dGFja0N1cnZlID0gXCJsaW5lYXJcIjtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIGFsc28gYmUgYW4gYXJyYXlcblx0XHQgKiBlbnYuYXR0YWNrQ3VydmUgPSBbMCwgMC4yLCAwLjMsIDAuNCwgMV1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkVudmVsb3BlLnByb3RvdHlwZSwgJ2F0dGFja0N1cnZlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc1N0cmluZyh0aGlzLl9hdHRhY2tDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkodGhpcy5fYXR0YWNrQ3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICAvL2xvb2sgdXAgdGhlIG5hbWUgaW4gdGhlIGN1cnZlcyBhcnJheVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgdHlwZSBpbiBUb25lLkVudmVsb3BlLlR5cGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5FbnZlbG9wZS5UeXBlW3R5cGVdLkluID09PSB0aGlzLl9hdHRhY2tDdXJ2ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvL290aGVyd2lzZSBqdXN0IHJldHVybiB0aGUgYXJyYXlcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY3VydmUpIHtcblx0ICAgICAgICAgICAgLy9jaGVjayBpZiBpdCdzIGEgdmFsaWQgdHlwZVxuXHQgICAgICAgICAgICBpZiAoVG9uZS5FbnZlbG9wZS5UeXBlLmhhc093blByb3BlcnR5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGN1cnZlRGVmID0gVG9uZS5FbnZlbG9wZS5UeXBlW2N1cnZlXTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGN1cnZlRGVmKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gY3VydmVEZWYuSW47XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gY3VydmVEZWY7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0FycmF5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5FbnZlbG9wZTogaW52YWxpZCBjdXJ2ZTogJyArIGN1cnZlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNoYXBlIG9mIHRoZSByZWxlYXNlLiBTZWUgdGhlIGF0dGFjayBjdXJ2ZSB0eXBlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5FbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfEFycmF5fVxuXHRcdCAqIEBuYW1lIHJlbGVhc2VDdXJ2ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogZW52LnJlbGVhc2VDdXJ2ZSA9IFwibGluZWFyXCI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUsICdyZWxlYXNlQ3VydmUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzU3RyaW5nKHRoaXMuX3JlbGVhc2VDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlQ3VydmU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0FycmF5KHRoaXMuX3JlbGVhc2VDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vbG9vayB1cCB0aGUgbmFtZSBpbiB0aGUgY3VydmVzIGFycmF5XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB0eXBlIGluIFRvbmUuRW52ZWxvcGUuVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGVbdHlwZV0uT3V0ID09PSB0aGlzLl9yZWxlYXNlQ3VydmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgLy9vdGhlcndpc2UganVzdCByZXR1cm4gdGhlIGFycmF5XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVsZWFzZUN1cnZlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjdXJ2ZSkge1xuXHQgICAgICAgICAgICAvL2NoZWNrIGlmIGl0J3MgYSB2YWxpZCB0eXBlXG5cdCAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGUuaGFzT3duUHJvcGVydHkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY3VydmVEZWYgPSBUb25lLkVudmVsb3BlLlR5cGVbY3VydmVdO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QoY3VydmVEZWYpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gY3VydmVEZWYuT3V0O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBjdXJ2ZURlZjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5FbnZlbG9wZTogaW52YWxpZCBjdXJ2ZTogJyArIGN1cnZlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjay9kZWNheSBwb3J0aW9uIG9mIHRoZSBBRFNSIGVudmVsb3BlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIGVudmVsb3BlIHNjYWxlcyB0aGUgdmFsZXMuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIGJldHdlZW4gMC0xXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vdHJpZ2dlciB0aGUgYXR0YWNrIDAuNSBzZWNvbmRzIGZyb20gbm93IHdpdGggYSB2ZWxvY2l0eSBvZiAwLjJcblx0XHQgKiAgZW52LnRyaWdnZXJBdHRhY2soXCIrMC41XCIsIDAuMik7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBvcmlnaW5hbEF0dGFjayA9IHRoaXMudG9TZWNvbmRzKHRoaXMuYXR0YWNrKTtcblx0ICAgICAgICB2YXIgYXR0YWNrID0gb3JpZ2luYWxBdHRhY2s7XG5cdCAgICAgICAgdmFyIGRlY2F5ID0gdGhpcy50b1NlY29uZHModGhpcy5kZWNheSk7XG5cdCAgICAgICAgdmVsb2NpdHkgPSBUb25lLmRlZmF1bHRBcmcodmVsb2NpdHksIDEpO1xuXHQgICAgICAgIC8vY2hlY2sgaWYgaXQncyBub3QgYSBjb21wbGV0ZSBhdHRhY2tcblx0ICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAoY3VycmVudFZhbHVlID4gMCkge1xuXHQgICAgICAgICAgICAvL3N1YnRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIGZyb20gdGhlIGF0dGFjayB0aW1lXG5cdCAgICAgICAgICAgIHZhciBhdHRhY2tSYXRlID0gMSAvIGF0dGFjaztcblx0ICAgICAgICAgICAgdmFyIHJlbWFpbmluZ0Rpc3RhbmNlID0gMSAtIGN1cnJlbnRWYWx1ZTtcblx0ICAgICAgICAgICAgLy90aGUgYXR0YWNrIGlzIG5vdyB0aGUgcmVtYWluaW5nIHRpbWVcblx0ICAgICAgICAgICAgYXR0YWNrID0gcmVtYWluaW5nRGlzdGFuY2UgLyBhdHRhY2tSYXRlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2F0dGFja1xuXHQgICAgICAgIGlmICh0aGlzLl9hdHRhY2tDdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLmxpbmVhclJhbXBUbyh2ZWxvY2l0eSwgYXR0YWNrLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2F0dGFja0N1cnZlID09PSAnZXhwb25lbnRpYWwnKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy50YXJnZXRSYW1wVG8odmVsb2NpdHksIGF0dGFjaywgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhdHRhY2sgPiAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgY3VydmUgPSB0aGlzLl9hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICAgICAgLy90YWtlIG9ubHkgYSBwb3J0aW9uIG9mIHRoZSBjdXJ2ZVxuXHQgICAgICAgICAgICBpZiAoYXR0YWNrIDwgb3JpZ2luYWxBdHRhY2spIHtcblx0ICAgICAgICAgICAgICAgIHZhciBwZXJjZW50Q29tcGxldGUgPSAxIC0gYXR0YWNrIC8gb3JpZ2luYWxBdHRhY2s7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2xpY2VJbmRleCA9IE1hdGguZmxvb3IocGVyY2VudENvbXBsZXRlICogdGhpcy5fYXR0YWNrQ3VydmUubGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIGN1cnZlID0gdGhpcy5fYXR0YWNrQ3VydmUuc2xpY2Uoc2xpY2VJbmRleCk7XG5cdCAgICAgICAgICAgICAgICAvL3RoZSBmaXJzdCBpbmRleCBpcyB0aGUgY3VycmVudCB2YWx1ZVxuXHQgICAgICAgICAgICAgICAgY3VydmVbMF0gPSBjdXJyZW50VmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fc2lnLnNldFZhbHVlQ3VydmVBdFRpbWUoY3VydmUsIHRpbWUsIGF0dGFjaywgdmVsb2NpdHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2RlY2F5XG5cdCAgICAgICAgaWYgKGRlY2F5KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy50YXJnZXRSYW1wVG8odmVsb2NpdHkgKiB0aGlzLnN1c3RhaW4sIGRlY2F5LCBhdHRhY2sgKyB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXJzIHRoZSByZWxlYXNlIG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy90cmlnZ2VyIHJlbGVhc2UgaW1tZWRpYXRlbHlcblx0XHQgKiAgZW52LnRyaWdnZXJSZWxlYXNlKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPiAwKSB7XG5cdCAgICAgICAgICAgIHZhciByZWxlYXNlID0gdGhpcy50b1NlY29uZHModGhpcy5yZWxlYXNlKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3JlbGVhc2VDdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NpZy5saW5lYXJSYW1wVG8oMCwgcmVsZWFzZSwgdGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcmVsZWFzZUN1cnZlID09PSAnZXhwb25lbnRpYWwnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaWcudGFyZ2V0UmFtcFRvKDAsIHJlbGVhc2UsIHRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdmFyIGN1cnZlID0gdGhpcy5fcmVsZWFzZUN1cnZlO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWcuY2FuY2VsQW5kSG9sZEF0VGltZSh0aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWcuc2V0VmFsdWVDdXJ2ZUF0VGltZShjdXJ2ZSwgdGltZSwgcmVsZWFzZSwgY3VycmVudFZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzY2hlZHVsZWQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFRoaXMgd2lsbFxuXHRcdCAqICByZXR1cm4gdGhlIHVuY29udmVydGVkIChyYXcpIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgVGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc2lnLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyQXR0YWNrUmVsZWFzZSBpcyBzaG9ydGhhbmQgZm9yIHRyaWdnZXJBdHRhY2ssIHRoZW4gd2FpdGluZ1xuXHRcdCAqICBzb21lIGR1cmF0aW9uLCB0aGVuIHRyaWdnZXJSZWxlYXNlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGR1cmF0aW9uIFRoZSBkdXJhdGlvbiBvZiB0aGUgc3VzdGFpbi5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHRoZW4gdGhlIHJlbGVhc2UgYWZ0ZXIgMC42IHNlY29uZHMuXG5cdFx0ICogZW52LnRyaWdnZXJBdHRhY2tSZWxlYXNlKDAuNik7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbikpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWxzIGFsbCBzY2hlZHVsZWQgZW52ZWxvcGUgY2hhbmdlcyBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gYWZ0ZXJcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIHRoaXMuX3NpZy5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoYWZ0ZXIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBCb3Jyb3dzIHRoZSBjb25uZWN0IG1ldGhvZCBmcm9tIFRvbmUuU2lnbmFsLlxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmNvbm5lY3QgPSBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3Q7XG5cdCAgICAvKipcblx0IFx0ICogIEdlbmVyYXRlIHNvbWUgY29tcGxleCBlbnZlbG9wZSBjdXJ2ZXMuXG5cdCBcdCAqL1xuXHQgICAgKGZ1bmN0aW9uIF9jcmVhdGVDdXJ2ZXMoKSB7XG5cdCAgICAgICAgdmFyIGN1cnZlTGVuID0gMTI4O1xuXHQgICAgICAgIHZhciBpLCBrO1xuXHQgICAgICAgIC8vY29zaW5lIGN1cnZlXG5cdCAgICAgICAgdmFyIGNvc2luZUN1cnZlID0gW107XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgY29zaW5lQ3VydmVbaV0gPSBNYXRoLnNpbihpIC8gKGN1cnZlTGVuIC0gMSkgKiAoTWF0aC5QSSAvIDIpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yaXBwbGUgY3VydmVcblx0ICAgICAgICB2YXIgcmlwcGxlQ3VydmUgPSBbXTtcblx0ICAgICAgICB2YXIgcmlwcGxlQ3VydmVGcmVxID0gNi40O1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbiAtIDE7IGkrKykge1xuXHQgICAgICAgICAgICBrID0gaSAvIChjdXJ2ZUxlbiAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgc2luZVdhdmUgPSBNYXRoLnNpbihrICogKE1hdGguUEkgKiAyKSAqIHJpcHBsZUN1cnZlRnJlcSAtIE1hdGguUEkgLyAyKSArIDE7XG5cdCAgICAgICAgICAgIHJpcHBsZUN1cnZlW2ldID0gc2luZVdhdmUgLyAxMCArIGsgKiAwLjgzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByaXBwbGVDdXJ2ZVtjdXJ2ZUxlbiAtIDFdID0gMTtcblx0ICAgICAgICAvL3N0YWlycyBjdXJ2ZVxuXHQgICAgICAgIHZhciBzdGFpcnNDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIHZhciBzdGVwcyA9IDU7XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgc3RhaXJzQ3VydmVbaV0gPSBNYXRoLmNlaWwoaSAvIChjdXJ2ZUxlbiAtIDEpICogc3RlcHMpIC8gc3RlcHM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaW4tb3V0IGVhc2luZyBjdXJ2ZVxuXHQgICAgICAgIHZhciBzaW5lQ3VydmUgPSBbXTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBrID0gaSAvIChjdXJ2ZUxlbiAtIDEpO1xuXHQgICAgICAgICAgICBzaW5lQ3VydmVbaV0gPSAwLjUgKiAoMSAtIE1hdGguY29zKE1hdGguUEkgKiBrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYSBib3VuY2UgY3VydmVcblx0ICAgICAgICB2YXIgYm91bmNlQ3VydmUgPSBbXTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBrID0gaSAvIChjdXJ2ZUxlbiAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgZnJlcSA9IE1hdGgucG93KGssIDMpICogNCArIDAuMjtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IE1hdGguY29zKGZyZXEgKiBNYXRoLlBJICogMiAqIGspO1xuXHQgICAgICAgICAgICBib3VuY2VDdXJ2ZVtpXSA9IE1hdGguYWJzKHZhbCAqICgxIC0gaykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJbnZlcnQgYSB2YWx1ZSBjdXJ2ZSB0byBtYWtlIGl0IHdvcmsgZm9yIHRoZSByZWxlYXNlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIGZ1bmN0aW9uIGludmVydEN1cnZlKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIHZhciBvdXQgPSBuZXcgQXJyYXkoY3VydmUubGVuZ3RoKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjdXJ2ZS5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgb3V0W2pdID0gMSAtIGN1cnZlW2pdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBvdXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJldmVyc2UgdGhlIGN1cnZlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIGZ1bmN0aW9uIHJldmVyc2VDdXJ2ZShjdXJ2ZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gY3VydmUuc2xpY2UoMCkucmV2ZXJzZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhdHRhY2sgYW5kIHJlbGVhc2UgY3VydmUgYXJyYXlzXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUuVHlwZSA9IHtcblx0ICAgICAgICAgICAgJ2xpbmVhcic6ICdsaW5lYXInLFxuXHQgICAgICAgICAgICAnZXhwb25lbnRpYWwnOiAnZXhwb25lbnRpYWwnLFxuXHQgICAgICAgICAgICAnYm91bmNlJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IGludmVydEN1cnZlKGJvdW5jZUN1cnZlKSxcblx0ICAgICAgICAgICAgICAgIE91dDogYm91bmNlQ3VydmVcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2Nvc2luZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBjb3NpbmVDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogcmV2ZXJzZUN1cnZlKGNvc2luZUN1cnZlKVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnc3RlcCc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBzdGFpcnNDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogaW52ZXJ0Q3VydmUoc3RhaXJzQ3VydmUpXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdyaXBwbGUnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogcmlwcGxlQ3VydmUsXG5cdCAgICAgICAgICAgICAgICBPdXQ6IGludmVydEN1cnZlKHJpcHBsZUN1cnZlKVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnc2luZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBzaW5lQ3VydmUsXG5cdCAgICAgICAgICAgICAgICBPdXQ6IGludmVydEN1cnZlKHNpbmVDdXJ2ZSlcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH07XG5cdCAgICB9KCkpO1xuXHQgICAgLyoqXG5cdFx0ICogIERpc2Nvbm5lY3QgYW5kIGRpc3Bvc2UuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2lnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaWcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgaXMgYSBUb25lLkVudmVsb3BlIGNvbm5lY3RlZCB0byBhIGdhaW4gbm9kZS5cblx0XHQgKiAgICAgICAgICBVbmxpa2UgVG9uZS5FbnZlbG9wZSwgd2hpY2ggb3V0cHV0cyB0aGUgZW52ZWxvcGUncyB2YWx1ZSwgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSBhY2NlcHRzXG5cdFx0ICogICAgICAgICAgYW4gYXVkaW8gc2lnbmFsIGFzIHRoZSBpbnB1dCBhbmQgd2lsbCBhcHBseSB0aGUgZW52ZWxvcGUgdG8gdGhlIGFtcGxpdHVkZVxuXHRcdCAqICAgICAgICAgIG9mIHRoZSBzaWduYWwuIFJlYWQgbW9yZSBhYm91dCBBRFNSIEVudmVsb3BlcyBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW50aGVzaXplciNBRFNSX2VudmVsb3BlKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW52ZWxvcGV9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdIFRoZSBhbW91bnQgb2YgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlIHRvIGdvIGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIHRvIGl0J3MgbWF4aW11bSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHRUaGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgdGhlIGF0dGFjayB0aGF0IGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgXHR0byBmYWxsIHRvIHRoZSBzdXN0YWluIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc3VzdGFpbl1cdFRoZSBwZXJjZW50IG9mIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgdGhlIGVudmVsb3BlIHJlc3RzIGF0IHVudGlsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0dGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0VGhlIGFtb3VudCBvZiB0aW1lIGFmdGVyIHRoZSByZWxlYXNlIGlzIHRyaWdnZXJlZCBpdCB0YWtlcyB0byByZWFjaCAwLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBhbXBFbnYgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSh7XG5cdFx0ICogXHRcImF0dGFja1wiOiAwLjEsXG5cdFx0ICogXHRcImRlY2F5XCI6IDAuMixcblx0XHQgKiBcdFwic3VzdGFpblwiOiAxLjAsXG5cdFx0ICogXHRcInJlbGVhc2VcIjogMC44XG5cdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL2NyZWF0ZSBhbiBvc2NpbGxhdG9yIGFuZCBjb25uZWN0IGl0XG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KGFtcEVudikuc3RhcnQoKTtcblx0XHQgKiAvL3RyaWdnZXIgdGhlIGVudmVsb3BlcyBhdHRhY2sgYW5kIHJlbGVhc2UgXCI4dFwiIGFwYXJ0XG5cdFx0ICogYW1wRW52LnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiOHRcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkFtcGxpdHVkZUVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXQgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIHRoaXMuX3NpZy5jb25uZWN0KHRoaXMub3V0cHV0LmdhaW4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUsIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBBbmFseXNlck5vZGUuZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSBwb2x5ZmlsbFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCFBbmFseXNlck5vZGUucHJvdG90eXBlLmdldEZsb2F0VGltZURvbWFpbkRhdGEpIHtcblx0ICAgICAgICAgICAgLy9yZWZlcmVuY2VkIGh0dHBzOi8vZ2l0aHViLmNvbS9tb2hheW9uYW8vZ2V0LWZsb2F0LXRpbWUtZG9tYWluLWRhdGFcblx0ICAgICAgICAgICAgQW5hbHlzZXJOb2RlLnByb3RvdHlwZS5nZXRGbG9hdFRpbWVEb21haW5EYXRhID0gZnVuY3Rpb24gKGFycmF5KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdWludDggPSBuZXcgVWludDhBcnJheShhcnJheS5sZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5nZXRCeXRlVGltZURvbWFpbkRhdGEodWludDgpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1aW50OC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGFycmF5W2ldID0gKHVpbnQ4W2ldIC0gMTI4KSAvIDEyODtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBXZWIgQXVkaW8nc1xuXHRcdCAqICAgICAgICAgIFtBbmFseXNlck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jaWRsLWRlZi1BbmFseXNlck5vZGUpLlxuXHRcdCAqICAgICAgICAgIEV4dHJhY3RzIEZGVCBvciBXYXZlZm9ybSBkYXRhIGZyb20gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge1N0cmluZz19IHR5cGUgVGhlIHJldHVybiB0eXBlIG9mIHRoZSBhbmFseXNpcywgZWl0aGVyIFwiZmZ0XCIsIG9yIFwid2F2ZWZvcm1cIi5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBzaXplIFRoZSBzaXplIG9mIHRoZSBGRlQuIFZhbHVlIG11c3QgYmUgYSBwb3dlciBvZlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ3NpemUnXG5cdCAgICAgICAgXSwgVG9uZS5BbmFseXNlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtBbmFseXNlck5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVBbmFseXNlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNpcyB0eXBlXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYnVmZmVyIHRoYXQgdGhlIEZGVCBkYXRhIGlzIHdyaXR0ZW4gdG9cblx0XHRcdCAqICBAdHlwZSB7VHlwZWRBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICAvL3NldCB0aGUgdmFsdWVzIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuc2l6ZSA9IG9wdGlvbnMuc2l6ZTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BbmFseXNlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdzaXplJzogMTAyNCxcblx0ICAgICAgICAndHlwZSc6ICdmZnQnLFxuXHQgICAgICAgICdzbW9vdGhpbmcnOiAwLjhcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUG9zc2libGUgcmV0dXJuIHR5cGVzIG9mIGFuYWx5c2VyLmdldFZhbHVlKClcblx0XHQgKiAgQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIuVHlwZSA9IHtcblx0ICAgICAgICBXYXZlZm9ybTogJ3dhdmVmb3JtJyxcblx0ICAgICAgICBGRlQ6ICdmZnQnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJ1biB0aGUgYW5hbHlzaXMgZ2l2ZW4gdGhlIGN1cnJlbnQgc2V0dGluZ3MgYW5kIHJldHVybiB0aGVcblx0XHQgKiAgcmVzdWx0IGFzIGEgVHlwZWRBcnJheS5cblx0XHQgKiAgQHJldHVybnMge1R5cGVkQXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5BbmFseXNlci5UeXBlLkZGVCkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5nZXRGbG9hdEZyZXF1ZW5jeURhdGEodGhpcy5fYnVmZmVyKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQW5hbHlzZXIuVHlwZS5XYXZlZm9ybSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5nZXRGbG9hdFRpbWVEb21haW5EYXRhKHRoaXMuX2J1ZmZlcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzaXplIG9mIGFuYWx5c2lzLiBUaGlzIG11c3QgYmUgYSBwb3dlciBvZiB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5BbmFseXNlciNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLCAnc2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5mZnRTaXplID0gc2l6ZSAqIDI7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFuYWx5c2lzIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGFuYWx5c2VyLmdldFZhbHVlKCksIGVpdGhlciBcImZmdFwiIG9yIFwid2F2ZWZvcm1cIi5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQW5hbHlzZXIjXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFuYWx5c2VyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodHlwZSAhPT0gVG9uZS5BbmFseXNlci5UeXBlLldhdmVmb3JtICYmIHR5cGUgIT09IFRvbmUuQW5hbHlzZXIuVHlwZS5GRlQpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RvbmUuQW5hbHlzZXI6IGludmFsaWQgdHlwZTogJyArIHR5cGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIDAgcmVwcmVzZW50cyBubyB0aW1lIGF2ZXJhZ2luZyB3aXRoIHRoZSBsYXN0IGFuYWx5c2lzIGZyYW1lLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5BbmFseXNlciNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBzbW9vdGhpbmdcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFuYWx5c2VyLnByb3RvdHlwZSwgJ3Ntb290aGluZycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zbW9vdGhpbmdUaW1lQ29uc3RhbnQgPSB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkFuYWx5c2VyfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BbmFseXNlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ29tcHJlc3NvciBpcyBhIHRoaW4gd3JhcHBlciBhcm91bmQgdGhlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgW0R5bmFtaWNzQ29tcHJlc3Nvck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWR5bmFtaWNzY29tcHJlc3Nvcm5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKiAgICAgICAgIENvbXByZXNzaW9uIHJlZHVjZXMgdGhlIHZvbHVtZSBvZiBsb3VkIHNvdW5kcyBvciBhbXBsaWZpZXMgcXVpZXQgc291bmRzXG5cdFx0ICogICAgICAgICBieSBuYXJyb3dpbmcgb3IgXCJjb21wcmVzc2luZ1wiIGFuIGF1ZGlvIHNpZ25hbCdzIGR5bmFtaWMgcmFuZ2UuXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRHluYW1pY19yYW5nZV9jb21wcmVzc2lvbikuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc3xPYmplY3R9IFt0aHJlc2hvbGRdIFRoZSB2YWx1ZSBhYm92ZSB3aGljaCB0aGUgY29tcHJlc3Npb24gc3RhcnRzIHRvIGJlIGFwcGxpZWQuXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IFtyYXRpb10gVGhlIGdhaW4gcmVkdWN0aW9uIHJhdGlvLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjb21wID0gbmV3IFRvbmUuQ29tcHJlc3NvcigtMzAsIDMpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db21wcmVzc29yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCcsXG5cdCAgICAgICAgICAgICdyYXRpbydcblx0ICAgICAgICBdLCBUb25lLkNvbXByZXNzb3IpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbXByZXNzb3Igbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEeW5hbWljc0NvbXByZXNzb3JOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0aHJlc2hvbGQgdmF1ZVxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fY29tcHJlc3Nvci50aHJlc2hvbGQsXG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWNpYmVscyxcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBmYWxzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhdHRhY2sgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9jb21wcmVzc29yLmF0dGFjaywgVG9uZS5UeXBlLlRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByZWxlYXNlIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX2NvbXByZXNzb3IucmVsZWFzZSwgVG9uZS5UeXBlLlRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBrbmVlIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmtuZWUgPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2NvbXByZXNzb3Iua25lZSxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlY2liZWxzLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJhdGlvIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJhdGlvID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9jb21wcmVzc29yLnJhdGlvLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAna25lZScsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJyxcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyYXRpbycsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5zZXQob3B0aW9ucyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Db21wcmVzc29yLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncmF0aW8nOiAxMixcblx0ICAgICAgICAndGhyZXNob2xkJzogLTI0LFxuXHQgICAgICAgICdyZWxlYXNlJzogMC4yNSxcblx0ICAgICAgICAnYXR0YWNrJzogMC4wMDMsXG5cdCAgICAgICAgJ2tuZWUnOiAzMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Db21wcmVzc29yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbXByZXNzb3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdrbmVlJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnLFxuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JhdGlvJyxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmF0dGFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVsZWFzZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnRocmVzaG9sZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy50aHJlc2hvbGQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmF0aW8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmF0aW8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMua25lZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5rbmVlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Db21wcmVzc29yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQWRkIGEgc2lnbmFsIGFuZCBhIG51bWJlciBvciB0d28gc2lnbmFscy4gV2hlbiBubyB2YWx1ZSBpc1xuXHRcdCAqICAgICAgICAgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLCBUb25lLkFkZCB3aWxsIHN1bSA8Y29kZT5pbnB1dFswXTwvY29kZT5cblx0XHQgKiAgICAgICAgIGFuZCA8Y29kZT5pbnB1dFsxXTwvY29kZT4uIElmIGEgdmFsdWUgaXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLCBcblx0XHQgKiAgICAgICAgIHRoZSBpdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBpbnB1dC5cblx0XHQgKiAgXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWUgSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIFRvbmUuQWRkIHdpbGwgc3VtIHRoZSBmaXJzdFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWNvbmQgaW5wdXRzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDIpO1xuXHRcdCAqIHZhciBhZGQgPSBuZXcgVG9uZS5BZGQoMik7XG5cdFx0ICogc2lnbmFsLmNvbm5lY3QoYWRkKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgYWRkIGVxdWFscyA0XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pZiBjb25zdHJ1Y3RlZCB3aXRoIG5vIGFyZ3VtZW50c1xuXHRcdCAqIC8vaXQgd2lsbCBhZGQgdGhlIGZpcnN0IGFuZCBzZWNvbmQgaW5wdXRzXG5cdFx0ICogdmFyIGFkZCA9IG5ldyBUb25lLkFkZCgpO1xuXHRcdCAqIHZhciBzaWcwID0gbmV3IFRvbmUuU2lnbmFsKDMpLmNvbm5lY3QoYWRkLCAwLCAwKTtcblx0XHQgKiB2YXIgc2lnMSA9IG5ldyBUb25lLlNpZ25hbCg0KS5jb25uZWN0KGFkZCwgMCwgMSk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGFkZCBlcXVhbHMgNy4gXG5cdFx0ICovXG5cdCAgICBUb25lLkFkZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzdW1taW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IHRoaXMuaW5wdXRbMF0gPSB0aGlzLmlucHV0WzFdID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5TaWduYWwodmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNvbm5lY3QodGhpcy5fc3VtKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFkZCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BZGR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQWRkLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3VtLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdW0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFkZDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBNdWx0aXBseSB0d28gaW5jb21pbmcgc2lnbmFscy4gT3IsIGlmIGEgbnVtYmVyIGlzIGdpdmVuIGluIHRoZSBjb25zdHJ1Y3Rvcixcblx0XHQgKiAgICAgICAgICBtdWx0aXBsaWVzIHRoZSBpbmNvbWluZyBzaWduYWwgYnkgdGhhdCB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlIENvbnN0YW50IHZhbHVlIHRvIG11bHRpcGxlLiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIHJldHVybiB0aGUgcHJvZHVjdCBvZiB0aGUgZmlyc3QgYW5kIHNlY29uZCBpbnB1dHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KCk7XG5cdFx0ICogdmFyIHNpZ0EgPSBuZXcgVG9uZS5TaWduYWwoMyk7XG5cdFx0ICogdmFyIHNpZ0IgPSBuZXcgVG9uZS5TaWduYWwoNCk7XG5cdFx0ICogc2lnQS5jb25uZWN0KG11bHQsIDAsIDApO1xuXHRcdCAqIHNpZ0IuY29ubmVjdChtdWx0LCAwLCAxKTtcblx0XHQgKiAvL291dHB1dCBvZiBtdWx0IGlzIDEyLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMTApO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMikuY29ubmVjdChtdWx0KTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgbXVsdCBpcyAyMC5cblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGlwbHkgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXQgbm9kZSBpcyB0aGUgc2FtZSBhcyB0aGUgb3V0cHV0IG5vZGVcblx0XHRcdCAqICBpdCBpcyBhbHNvIHRoZSBHYWluTm9kZSB3aGljaCBoYW5kbGVzIHRoZSBzY2FsaW5nIG9mIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICpcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHQgPSB0aGlzLmlucHV0WzBdID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHNjYWxpbmcgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvUGFyYW19XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFsxXSA9IHRoaXMub3V0cHV0LmdhaW47XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyh2YWx1ZSwgMCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NdWx0aXBseSwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk11bHRpcGx5fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpcGx5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbXVsdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk11bHRpcGx5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTmVnYXRlIHRoZSBpbmNvbWluZyBzaWduYWwuIGkuZS4gYW4gaW5wdXQgc2lnbmFsIG9mIDEwIHdpbGwgb3V0cHV0IC0xMFxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBuZWcgPSBuZXcgVG9uZS5OZWdhdGUoKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKC0yKS5jb25uZWN0KG5lZyk7XG5cdFx0ICogLy9vdXRwdXQgb2YgbmVnIGlzIHBvc2l0aXZlIDIuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5OZWdhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbmVnYXRpb24gaXMgZG9uZSBieSBtdWx0aXBseWluZyBieSAtMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk11bHRpcGx5KC0xKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5lZ2F0ZSwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5OZWdhdGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTmVnYXRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTmVnYXRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU3VidHJhY3QgdGhlIHNpZ25hbCBjb25uZWN0ZWQgdG8gPGNvZGU+aW5wdXRbMV08L2NvZGU+IGZyb20gdGhlIHNpZ25hbCBjb25uZWN0ZWQgXG5cdFx0ICogICAgICAgICB0byA8Y29kZT5pbnB1dFswXTwvY29kZT4uIElmIGFuIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3RvciwgdGhlIFxuXHRcdCAqICAgICAgICAgc2lnbmFscyA8Y29kZT4udmFsdWU8L2NvZGU+IHdpbGwgYmUgc3VidHJhY3RlZCBmcm9tIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3VidHJhY3QgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsLiBJZiB0aGUgdmFsdWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBpcyBvbWl0dGVkLCBpdCB3aWxsIHN1YnRyYWN0IHRoZSBzZWNvbmQgc2lnbmFsIGZyb20gdGhlIGZpcnN0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzdWIgPSBuZXcgVG9uZS5TdWJ0cmFjdCgxKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDQpLmNvbm5lY3Qoc3ViKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2Ygc3ViIGlzIDMuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzdWIgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHRcdCAqIHZhciBzaWdBID0gbmV3IFRvbmUuU2lnbmFsKDEwKTtcblx0XHQgKiB2YXIgc2lnQiA9IG5ldyBUb25lLlNpZ25hbCgyLjUpO1xuXHRcdCAqIHNpZ0EuY29ubmVjdChzdWIsIDAsIDApO1xuXHRcdCAqIHNpZ0IuY29ubmVjdChzdWIsIDAsIDEpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIHN1YiBpcyA3LjVcblx0XHQgKi9cblx0ICAgIFRvbmUuU3VidHJhY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc3VtbWluZyBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdW0gPSB0aGlzLmlucHV0WzBdID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbmVnYXRlIHRoZSBpbnB1dCBvZiB0aGUgc2Vjb25kIGlucHV0IGJlZm9yZSBjb25uZWN0aW5nIGl0XG5cdFx0XHQgKiAgdG8gdGhlIHN1bW1pbmcgbm9kZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5OZWdhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25lZyA9IG5ldyBUb25lLk5lZ2F0ZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSB2YWx1ZSBpcyBzZXRcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLlNpZ25hbCh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uY2hhaW4odGhpcy5fbmVnLCB0aGlzLl9zdW0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3VidHJhY3QsIFRvbmUuU2lnbmFsKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsQmFzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdWJ0cmFjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX25lZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbmVnID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdW0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3VidHJhY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBDb252ZXJ0IGFuIGluY29taW5nIHNpZ25hbCBiZXR3ZWVuIDAsIDEgdG8gYW4gZXF1YWwgcG93ZXIgZ2FpbiBzY2FsZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZXFQb3dHYWluID0gbmV3IFRvbmUuRXF1YWxQb3dlckdhaW4oKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRXF1YWxQb3dlckdhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXFQb3dlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnModmFsKSA8IDAuMDAxKSB7XG5cdCAgICAgICAgICAgICAgICAvL3Nob3VsZCBvdXRwdXQgMCB3aGVuIGlucHV0IGlzIDBcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZXF1YWxQb3dlclNjYWxlKHZhbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyksIDQwOTYpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRXF1YWxQb3dlckdhaW4sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRXF1YWxQb3dlckdhaW59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXF1YWxQb3dlckdhaW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZXFQb3dlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXFQb3dlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRXF1YWxQb3dlckdhaW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzICBUb25lLkNyb3NzZmFkZSBwcm92aWRlcyBlcXVhbCBwb3dlciBmYWRpbmcgYmV0d2VlbiB0d28gaW5wdXRzLlxuXHRcdCAqICAgICAgICAgTW9yZSBvbiBjcm9zc2ZhZGluZyB0ZWNobmlxdWUgW2hlcmVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZhZGVfKGF1ZGlvX2VuZ2luZWVyaW5nKSNDcm9zc2ZhZGluZykuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogQHBhcmFtIHtOb3JtYWxSYW5nZX0gW2luaXRpYWxGYWRlPTAuNV1cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBjcm9zc0ZhZGUgPSBuZXcgVG9uZS5Dcm9zc0ZhZGUoMC41KTtcblx0XHQgKiAvL2Nvbm5lY3QgZWZmZWN0IEEgdG8gY3Jvc3NmYWRlIGZyb21cblx0XHQgKiAvL2VmZmVjdCBvdXRwdXQgMCB0byBjcm9zc2ZhZGUgaW5wdXQgMFxuXHRcdCAqIGVmZmVjdEEuY29ubmVjdChjcm9zc0ZhZGUsIDAsIDApO1xuXHRcdCAqIC8vY29ubmVjdCBlZmZlY3QgQiB0byBjcm9zc2ZhZGUgZnJvbVxuXHRcdCAqIC8vZWZmZWN0IG91dHB1dCAwIHRvIGNyb3NzZmFkZSBpbnB1dCAxXG5cdFx0ICogZWZmZWN0Qi5jb25uZWN0KGNyb3NzRmFkZSwgMCwgMSk7XG5cdFx0ICogY3Jvc3NGYWRlLmZhZGUudmFsdWUgPSAwO1xuXHRcdCAqIC8vIF4gb25seSBlZmZlY3RBIGlzIG91dHB1dFxuXHRcdCAqIGNyb3NzRmFkZS5mYWRlLnZhbHVlID0gMTtcblx0XHQgKiAvLyBeIG9ubHkgZWZmZWN0QiBpcyBvdXRwdXRcblx0XHQgKiBjcm9zc0ZhZGUuZmFkZS52YWx1ZSA9IDAuNTtcblx0XHQgKiAvLyBeIHRoZSB0d28gc2lnbmFscyBhcmUgbWl4ZWQgZXF1YWxseS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3Jvc3NGYWRlID0gZnVuY3Rpb24gKGluaXRpYWxGYWRlKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzBdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hID0gdGhpcy5pbnB1dFswXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+aW5wdXRbMV08L2NvZGU+LlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmIgPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogXHRUaGUgbWl4IGJldHdlZW4gdGhlIHR3byBpbnB1dHMuIEEgZmFkZSB2YWx1ZSBvZiAwXG5cdFx0XHQgKiBcdHdpbGwgb3V0cHV0IDEwMCUgPGNvZGU+aW5wdXRbMF08L2NvZGU+IGFuZFxuXHRcdFx0ICogXHRhIHZhbHVlIG9mIDEgd2lsbCBvdXRwdXQgMTAwJSA8Y29kZT5pbnB1dFsxXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZSA9IG5ldyBUb25lLlNpZ25hbChUb25lLmRlZmF1bHRBcmcoaW5pdGlhbEZhZGUsIDAuNSksIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZXF1YWwgcG93ZXIgZ2FpbiBjcm9zcyBmYWRlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5FcXVhbFBvd2VyR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJBID0gbmV3IFRvbmUuRXF1YWxQb3dlckdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBlcXVhbCBwb3dlciBnYWluIGNyb3NzIGZhZGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkVxdWFsUG93ZXJHYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckIgPSBuZXcgVG9uZS5FcXVhbFBvd2VyR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGludmVydCB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uZSA9IHRoaXMuY29udGV4dC5nZXRDb25zdGFudCgxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpbnZlcnQgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnZlcnQgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmEuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5iLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuZmFkZS5jaGFpbih0aGlzLl9lcXVhbFBvd2VyQiwgdGhpcy5iLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX29uZS5jb25uZWN0KHRoaXMuX2ludmVydCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5mYWRlLmNvbm5lY3QodGhpcy5faW52ZXJ0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9pbnZlcnQuY2hhaW4odGhpcy5fZXF1YWxQb3dlckEsIHRoaXMuYS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZmFkZScpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3Jvc3NGYWRlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ3Jvc3NGYWRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNyb3NzRmFkZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmYWRlJyk7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJBID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmFkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mYWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9pbnZlcnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ludmVydCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb25lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5iLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNyb3NzRmFkZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkZpbHRlciBpcyBhIGZpbHRlciB3aGljaCBhbGxvd3MgZm9yIGFsbCBvZiB0aGUgc2FtZSBuYXRpdmUgbWV0aG9kc1xuXHRcdCAqICAgICAgICAgIGFzIHRoZSBbQmlxdWFkRmlsdGVyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtYmlxdWFkZmlsdGVybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICAgICAgICAgIFRvbmUuRmlsdGVyIGhhcyB0aGUgYWRkZWQgYWJpbGl0eSB0byBzZXQgdGhlIGZpbHRlciByb2xsb2ZmIGF0IC0xMlxuXHRcdCAqICAgICAgICAgIChkZWZhdWx0KSwgLTI0IGFuZCAtNDguXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVyLlxuXHRcdCAqICBAcGFyYW0ge3N0cmluZz19IHR5cGUgVGhlIHR5cGUgb2YgZmlsdGVyLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHJvbGxvZmYgVGhlIGRyb3AgaW4gZGVjaWJlbHMgcGVyIG9jdGF2ZSBhZnRlciB0aGUgY3V0b2ZmIGZyZXF1ZW5jeS5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIGNob2ljZXM6IC0xMiwgLTI0LCBhbmQgLTQ4XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBmaWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIoMjAwLCBcImhpZ2hwYXNzXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAncm9sbG9mZidcblx0ICAgICAgICBdLCBUb25lLkZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZpbHRlcihzKVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwoMCwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBvZiB0aGUgZmlsdGVyLCBvbmx5IHVzZWQgaW4gY2VydGFpbiBmaWx0ZXIgdHlwZXNcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG5ldyBUb25lLlNpZ25hbCh7XG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZ2Fpbixcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBmYWxzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBRIG9yIFF1YWxpdHkgb2YgdGhlIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5RKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdHlwZSBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge3N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcm9sbG9mZiB2YWx1ZSBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcm9sbG9mZiA9IG9wdGlvbnMucm9sbG9mZjtcblx0ICAgICAgICAvL3NldCB0aGUgcm9sbG9mZjtcblx0ICAgICAgICB0aGlzLnJvbGxvZmYgPSBvcHRpb25zLnJvbGxvZmY7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GaWx0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICpcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GaWx0ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnbG93cGFzcycsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDM1MCxcblx0ICAgICAgICAncm9sbG9mZic6IC0xMixcblx0ICAgICAgICAnUSc6IDEsXG5cdCAgICAgICAgJ2dhaW4nOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGZpbHRlci4gVHlwZXM6IFwibG93cGFzc1wiLCBcImhpZ2hwYXNzXCIsXG5cdFx0ICogXCJiYW5kcGFzc1wiLCBcImxvd3NoZWxmXCIsIFwiaGlnaHNoZWxmXCIsIFwibm90Y2hcIiwgXCJhbGxwYXNzXCIsIG9yIFwicGVha2luZ1wiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZpbHRlciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZpbHRlci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdmFyIHR5cGVzID0gW1xuXHQgICAgICAgICAgICAgICAgJ2xvd3Bhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ2hpZ2hwYXNzJyxcblx0ICAgICAgICAgICAgICAgICdiYW5kcGFzcycsXG5cdCAgICAgICAgICAgICAgICAnbG93c2hlbGYnLFxuXHQgICAgICAgICAgICAgICAgJ2hpZ2hzaGVsZicsXG5cdCAgICAgICAgICAgICAgICAnbm90Y2gnLFxuXHQgICAgICAgICAgICAgICAgJ2FsbHBhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ3BlYWtpbmcnXG5cdCAgICAgICAgICAgIF07XG5cdCAgICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5GaWx0ZXI6IGludmFsaWQgdHlwZSAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXS50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJvbGxvZmYgb2YgdGhlIGZpbHRlciB3aGljaCBpcyB0aGUgZHJvcCBpbiBkYlxuXHRcdCAqIHBlciBvY3RhdmUuIEltcGxlbWVudGVkIGludGVybmFsbHkgYnkgY2FzY2FkaW5nIGZpbHRlcnMuXG5cdFx0ICogT25seSBhY2NlcHRzIHRoZSB2YWx1ZXMgLTEyLCAtMjQsIC00OCBhbmQgLTk2LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZpbHRlciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHJvbGxvZmZcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZpbHRlci5wcm90b3R5cGUsICdyb2xsb2ZmJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9sbG9mZjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJvbGxvZmYpIHtcblx0ICAgICAgICAgICAgcm9sbG9mZiA9IHBhcnNlSW50KHJvbGxvZmYsIDEwKTtcblx0ICAgICAgICAgICAgdmFyIHBvc3NpYmlsaXRpZXMgPSBbXG5cdCAgICAgICAgICAgICAgICAtMTIsXG5cdCAgICAgICAgICAgICAgICAtMjQsXG5cdCAgICAgICAgICAgICAgICAtNDgsXG5cdCAgICAgICAgICAgICAgICAtOTZcblx0ICAgICAgICAgICAgXTtcblx0ICAgICAgICAgICAgdmFyIGNhc2NhZGluZ0NvdW50ID0gcG9zc2liaWxpdGllcy5pbmRleE9mKHJvbGxvZmYpO1xuXHQgICAgICAgICAgICAvL2NoZWNrIHRoZSByb2xsb2ZmIGlzIHZhbGlkXG5cdCAgICAgICAgICAgIGlmIChjYXNjYWRpbmdDb3VudCA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUb25lLkZpbHRlcjogcm9sbG9mZiBjYW4gb25seSBiZSAtMTIsIC0yNCwgLTQ4IG9yIC05NicpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNhc2NhZGluZ0NvdW50ICs9IDE7XG5cdCAgICAgICAgICAgIHRoaXMuX3JvbGxvZmYgPSByb2xsb2ZmO1xuXHQgICAgICAgICAgICAvL2ZpcnN0IGRpc2Nvbm5lY3QgdGhlIGZpbHRlcnMgYW5kIHRocm93IHRoZW0gYXdheVxuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0gPSBudWxsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnMgPSBuZXcgQXJyYXkoY2FzY2FkaW5nQ291bnQpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjb3VudCA9IDA7IGNvdW50IDwgY2FzY2FkaW5nQ291bnQ7IGNvdW50KyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBmaWx0ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgICAgICBmaWx0ZXIudHlwZSA9IHRoaXMuX3R5cGU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KGZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdChmaWx0ZXIuZGV0dW5lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuUS5jb25uZWN0KGZpbHRlci5RKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZ2Fpbi5jb25uZWN0KGZpbHRlci5nYWluKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbY291bnRdID0gZmlsdGVyO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vY29ubmVjdCB0aGVtIHVwXG5cdCAgICAgICAgICAgIHZhciBjb25uZWN0aW9uQ2hhaW4gPSBbdGhpcy5pbnB1dF0uY29uY2F0KHRoaXMuX2ZpbHRlcnMpLmNvbmNhdChbdGhpcy5vdXRwdXRdKTtcblx0ICAgICAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIGNvbm5lY3Rpb25DaGFpbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLlEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5nYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmdhaW4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWwgaW50byB0aHJlZSBiYW5kcyAobG93LCBtaWQsIGhpZ2gpXG5cdFx0ICogICAgICAgICB3aXRoIHR3byBjcm9zc292ZXIgZnJlcXVlbmN5IGNvbnRyb2xzLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2xvd0ZyZXF1ZW5jeV0gdGhlIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2hpZ2hGcmVxdWVuY3ldIHRoZSBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZFNwbGl0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5J1xuXHQgICAgICAgIF0sIFRvbmUuTXVsdGliYW5kU3BsaXQpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGlucHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3V0cHV0c1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgQXJyYXkoMyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvdyBiYW5kLiBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93ID0gdGhpcy5vdXRwdXRbMF0gPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2xvd3Bhc3MnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbG93ZXIgZmlsdGVyIG9mIHRoZSBtaWQgYmFuZFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG93TWlkRmlsdGVyID0gbmV3IFRvbmUuRmlsdGVyKDAsICdoaWdocGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgYmFuZCBvdXRwdXQuIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMV08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLm91dHB1dFsxXSA9IG5ldyBUb25lLkZpbHRlcigwLCAnbG93cGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBoaWdoIGJhbmQgb3V0cHV0LiBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzJdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IHRoaXMub3V0cHV0WzJdID0gbmV3IFRvbmUuRmlsdGVyKDAsICdoaWdocGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmxvd0ZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5oaWdoRnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcXVhbGl0eSBvZiBhbGwgdGhlIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLlEpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZmFuKHRoaXMubG93LCB0aGlzLmhpZ2gpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4odGhpcy5fbG93TWlkRmlsdGVyLCB0aGlzLm1pZCk7XG5cdCAgICAgICAgLy90aGUgZnJlcXVlbmN5IGNvbnRyb2wgc2lnbmFsXG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kuY29ubmVjdCh0aGlzLmxvdy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fbG93TWlkRmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5LmNvbm5lY3QodGhpcy5taWQuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kuY29ubmVjdCh0aGlzLmhpZ2guZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3RoZSBRIHZhbHVlXG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5sb3cuUSk7XG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5fbG93TWlkRmlsdGVyLlEpO1xuXHQgICAgICAgIHRoaXMuUS5jb25uZWN0KHRoaXMubWlkLlEpO1xuXHQgICAgICAgIHRoaXMuUS5jb25uZWN0KHRoaXMuaGlnaC5RKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NdWx0aWJhbmRTcGxpdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kU3BsaXQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IDQwMCxcblx0ICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IDI1MDAsXG5cdCAgICAgICAgJ1EnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NdWx0aWJhbmRTcGxpdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRTcGxpdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmxvdy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sb3cgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xvd01pZEZpbHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbG93TWlkRmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oaWdoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTXVsdGliYW5kU3BsaXQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkVRMyBpcyBhIHRocmVlIGJhbmQgRVEgd2l0aCBjb250cm9sIG92ZXIgbG93LCBtaWQsIGFuZCBoaWdoIGdhaW4gYXNcblx0XHQgKiAgICAgICAgIHdlbGwgYXMgdGhlIGxvdyBhbmQgaGlnaCBjcm9zc292ZXIgZnJlcXVlbmNpZXMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfE9iamVjdH0gW2xvd0xldmVsXSBUaGUgZ2FpbiBhcHBsaWVkIHRvIHRoZSBsb3dzLlxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbbWlkTGV2ZWxdIFRoZSBnYWluIGFwcGxpZWQgdG8gdGhlIG1pZC5cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc30gW2hpZ2hMZXZlbF0gVGhlIGdhaW4gYXBwbGllZCB0byB0aGUgaGlnaC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZXEgPSBuZXcgVG9uZS5FUTMoLTEwLCAzLCAtMjApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FUTMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdoaWdoJ1xuXHQgICAgICAgIF0sIFRvbmUuRVEzKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvdXRwdXQgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG11bHRpYmFuZCBzcGxpdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpYmFuZFNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aWJhbmRTcGxpdCh7XG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knOiBvcHRpb25zLmxvd0ZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiBvcHRpb25zLmhpZ2hGcmVxdWVuY3lcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBmb3IgdGhlIGxvd2VyIHNpZ25hbHNcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG93R2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5sb3csIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gZm9yIHRoZSBtaWQgc2lnbmFsc1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLm1pZCwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBoaWdoIHBhcnRcblx0XHRcdCAqIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faGlnaEdhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMuaGlnaCwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBsb3cgcGFydFxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3cgPSB0aGlzLl9sb3dHYWluLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBpbiBkZWNpYmVscyBvZiB0aGUgbWlkIHBhcnRcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gdGhpcy5fbWlkR2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIGhpZ2ggcGFydFxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoID0gdGhpcy5faGlnaEdhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgUSB2YWx1ZSBmb3IgYWxsIG9mIHRoZSBmaWx0ZXJzLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSB0aGlzLl9tdWx0aWJhbmRTcGxpdC5RO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IHRoaXMuX211bHRpYmFuZFNwbGl0Lmxvd0ZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL2hpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IHRoaXMuX211bHRpYmFuZFNwbGl0LmhpZ2hGcmVxdWVuY3k7XG5cdCAgICAgICAgLy90aGUgZnJlcXVlbmN5IGJhbmRzXG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQubG93LmNoYWluKHRoaXMuX2xvd0dhaW4sIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdC5taWQuY2hhaW4odGhpcy5fbWlkR2FpbiwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0LmhpZ2guY2hhaW4odGhpcy5faGlnaEdhaW4sIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FUTMsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRVEzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdsb3cnOiAwLFxuXHQgICAgICAgICdtaWQnOiAwLFxuXHQgICAgICAgICdoaWdoJzogMCxcblx0ICAgICAgICAnbG93RnJlcXVlbmN5JzogNDAwLFxuXHQgICAgICAgICdoaWdoRnJlcXVlbmN5JzogMjUwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FUTN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRVEzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbG93R2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbG93R2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkR2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faGlnaEdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2hpZ2hHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvdyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FUTM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgUGVyZm9ybXMgYSBsaW5lYXIgc2NhbGluZyBvbiBhbiBpbnB1dCBzaWduYWwuXG5cdFx0ICogICAgICAgICAgU2NhbGVzIGEgTm9ybWFsUmFuZ2UgaW5wdXQgdG8gYmV0d2VlblxuXHRcdCAqICAgICAgICAgIG91dHB1dE1pbiBhbmQgb3V0cHV0TWF4LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1pbj0wXSBUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDAuIFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1heD0xXVx0VGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAxLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2NhbGUgPSBuZXcgVG9uZS5TY2FsZSg1MCwgMTAwKTtcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDAuNSkuY29ubmVjdChzY2FsZSk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIHNjYWxlIGVxdWFscyA3NVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZSA9IGZ1bmN0aW9uIChvdXRwdXRNaW4sIG91dHB1dE1heCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vdXRwdXRNaW4gPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TWluLCAwKTtcblx0ICAgICAgICAvKiogXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3V0cHV0TWF4ID0gVG9uZS5kZWZhdWx0QXJnKG91dHB1dE1heCwgMSk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpcGx5KDEpO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWRkID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5BZGQoMCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuY29ubmVjdCh0aGlzLl9hZGQpO1xuXHQgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TY2FsZSwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW4gXG5cdFx0ICogdGhlIHZhbHVlIGlucHV0IHZhbHVlIGlzIDAuIFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZS5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRNaW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0TWluID0gbWluO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlbiBcblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMS4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dE1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXRNYXggPSBtYXg7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgc2V0IHRoZSB2YWx1ZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGUucHJvdG90eXBlLl9zZXRSYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9hZGQudmFsdWUgPSB0aGlzLl9vdXRwdXRNaW47XG5cdCAgICAgICAgdGhpcy5fc2NhbGUudmFsdWUgPSB0aGlzLl9vdXRwdXRNYXggLSB0aGlzLl9vdXRwdXRNaW47XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TY2FsZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hZGQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FkZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TY2FsZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgUGVyZm9ybXMgYW4gZXhwb25lbnRpYWwgc2NhbGluZyBvbiBhbiBpbnB1dCBzaWduYWwuXG5cdFx0ICogICAgICAgICAgU2NhbGVzIGEgTm9ybWFsUmFuZ2UgdmFsdWUgWzAsMV0gZXhwb25lbnRpYWxseVxuXHRcdCAqICAgICAgICAgIHRvIHRoZSBvdXRwdXQgcmFuZ2Ugb2Ygb3V0cHV0TWluIHRvIG91dHB1dE1heC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXRNaW49MF0gVGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAwLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1heD0xXVx0VGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAxLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2V4cG9uZW50PTJdIFRoZSBleHBvbmVudCB3aGljaCBzY2FsZXMgdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2NhbGVFeHAgPSBuZXcgVG9uZS5TY2FsZUV4cCgwLCAxMDAsIDIpO1xuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KHNjYWxlRXhwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVFeHAgPSBmdW5jdGlvbiAob3V0cHV0TWluLCBvdXRwdXRNYXgsIGV4cG9uZW50KSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIGlucHV0IHRvIHRoZSBvdXRwdXQgcmFuZ2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlNjYWxlKG91dHB1dE1pbiwgb3V0cHV0TWF4KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBvd31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLlBvdyhUb25lLmRlZmF1bHRBcmcoZXhwb25lbnQsIDIpKTtcblx0ICAgICAgICB0aGlzLl9leHAuY29ubmVjdCh0aGlzLl9zY2FsZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TY2FsZUV4cCwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIEluc3RlYWQgb2YgaW50ZXJwb2xhdGluZyBsaW5lYXJseSBiZXR3ZWVuIHRoZSA8Y29kZT5taW48L2NvZGU+IGFuZFxuXHRcdCAqIDxjb2RlPm1heDwvY29kZT4gdmFsdWVzLCBzZXR0aW5nIHRoZSBleHBvbmVudCB3aWxsIGludGVycG9sYXRlIGJldHdlZW5cblx0XHQgKiB0aGUgdHdvIHZhbHVlcyB3aXRoIGFuIGV4cG9uZW50aWFsIGN1cnZlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlRXhwI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgZXhwb25lbnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlRXhwLnByb3RvdHlwZSwgJ2V4cG9uZW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwLnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cC52YWx1ZSA9IGV4cDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW5cblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZUV4cCNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1pbiA9IG1pbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW5cblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZUV4cCNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWF4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1heCA9IG1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2NhbGVFeHB9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9leHAuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2V4cCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2NhbGVFeHA7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCBXZWIgQXVkaW8ncyBuYXRpdmUgW0RlbGF5Tm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtZGVsYXlub2RlLWludGVyZmFjZSkuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBkZWxheVRpbWUgVGhlIGRlbGF5IGFwcGxpZWQgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gbWF4RGVsYXkgVGhlIG1heGltdW0gZGVsYXkgdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRGVsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ21heERlbGF5J1xuXHQgICAgICAgIF0sIFRvbmUuRGVsYXkpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbWF4aW11bSBkZWxheSB0aW1lIGluaXRpYWxpemVkIHdpdGggdGhlIG5vZGVcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWF4RGVsYXkgPSBNYXRoLm1heCh0aGlzLnRvU2Vjb25kcyhvcHRpb25zLm1heERlbGF5KSwgdGhpcy50b1NlY29uZHMob3B0aW9ucy5kZWxheVRpbWUpKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbmF0aXZlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlRGVsYXkodGhpcy5fbWF4RGVsYXkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSB0aGUgaW5jb21pbmcgc2lnbmFsIGlzXG5cdFx0XHQgKiAgZGVsYXllZC5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fZGVsYXlOb2RlLmRlbGF5VGltZSxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLlRpbWUsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZGVsYXlUaW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2RlbGF5VGltZScpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRGVsYXksIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EZWxheS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWF4RGVsYXknOiAxLFxuXHQgICAgICAgICdkZWxheVRpbWUnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gZGVsYXkgdGltZS4gVGhpcyBjYW5ub3QgYmUgY2hhbmdlZC4gVGhlIHZhbHVlIGlzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3Rvci5cblx0XHQgKiBAbWVtYmVyb2YgVG9uZS5EZWxheSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBtYXhEZWxheVxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRGVsYXkucHJvdG90eXBlLCAnbWF4RGVsYXknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXhEZWxheTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRGVsYXl9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRlbGF5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdkZWxheVRpbWUnKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRGVsYXk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBDb21iIGZpbHRlcnMgYXJlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcyBmb3IgcGh5c2ljYWwgbW9kZWxpbmcuIFJlYWQgbW9yZVxuXHRcdCAqICAgICAgICAgYWJvdXQgY29tYiBmaWx0ZXJzIG9uIFtDQ1JNQSdzIHdlYnNpdGVdKGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L35qb3MvcGFzcC9GZWVkYmFja19Db21iX0ZpbHRlcnMuaHRtbCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2RlbGF5VGltZV0gVGhlIGRlbGF5IHRpbWUgb2YgdGhlIGZpbHRlci5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZT19IHJlc29uYW5jZSBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIHRoZSBmaWx0ZXIgaGFzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZSdcblx0ICAgICAgICBdLCBUb25lLkZlZWRiYWNrQ29tYkZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZGVsYXkgb2YgdGhlIGNvbWIgZmlsdGVyLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZGVsYXkuZGVsYXlUaW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmZWVkYmFjayBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5yZXNvbmFuY2UsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBmZWVkYmFjayBvZiB0aGUgZGVsYXllZCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gdGhpcy5fZmVlZGJhY2suZ2Fpbjtcblx0ICAgICAgICB0aGlzLl9kZWxheS5jaGFpbih0aGlzLl9mZWVkYmFjaywgdGhpcy5fZGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4xLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiAwLjVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRmVlZGJhY2tDb21iRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBHZXQgdGhlIGN1cnJlbnQgd2F2ZWZvcm0gZGF0YSBvZiB0aGUgY29ubmVjdGVkIGF1ZGlvIHNvdXJjZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHNpemUgVGhlIHNpemUgb2YgdGhlIEZGVC4gVmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICovXG5cdCAgICBUb25lLkZGVCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3NpemUnXSwgVG9uZS5GRlQpO1xuXHQgICAgICAgIG9wdGlvbnMudHlwZSA9IFRvbmUuQW5hbHlzZXIuVHlwZS5GRlQ7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFuYWx5c2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5BbmFseXNlcihvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZGVCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkZGVC5kZWZhdWx0cyA9IHsgJ3NpemUnOiAxMDI0IH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0cyB0aGUgd2F2ZWZvcm0gb2YgdGhlIGF1ZGlvIHNvdXJjZS4gUmV0dXJucyB0aGUgd2F2ZWZvcm0gZGF0YVxuXHRcdCAqICBvZiBsZW5ndGggW3NpemVdKCNzaXplKSBhcyBhIEZsb2F0MzJBcnJheSB3aXRoIHZhbHVlcyBiZXR3ZWVuIC0xIGFuZCAxLlxuXHRcdCAqICBAcmV0dXJucyB7VHlwZWRBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuRkZULnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNpemUgb2YgYW5hbHlzaXMuIFRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkZGVCNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRkZULnByb3RvdHlwZSwgJ3NpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5zaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zaXplID0gc2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRkZUfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GRlQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZGVDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFJldHVybiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYW4gaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoLTEpO1xuXHRcdCAqIHZhciBhYnMgPSBuZXcgVG9uZS5BYnMoKTtcblx0XHQgKiBzaWduYWwuY29ubmVjdChhYnMpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBhYnMgaXMgMS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQWJzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxlc3NUaGFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hYnMgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKE1hdGguYWJzKHZhbCkgPCAwLjAwMSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnModmFsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sIDEwMjQpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQWJzLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgbWV0aG9kXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFic30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BYnMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYWJzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hYnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFicztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkZvbGxvd2VyIGlzIGEgIGNydWRlIGVudmVsb3BlIGZvbGxvd2VyIHdoaWNoIHdpbGwgZm9sbG93XG5cdFx0ICogICAgICAgICAgdGhlIGFtcGxpdHVkZSBvZiBhbiBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogICAgICAgICAgVGFrZSBjYXJlIHdpdGggc21hbGwgKDwgMC4wMikgYXR0YWNrIG9yIGRlY2F5IHZhbHVlc1xuXHRcdCAqICAgICAgICAgIGFzIGZvbGxvd2VyIGhhcyBzb21lIHJpcHBsZSB3aGljaCBpcyBleGFnZ2VyYXRlZFxuXHRcdCAqICAgICAgICAgIGF0IHRoZXNlIHZhbHVlcy4gUmVhZCBtb3JlIGFib3V0IGVudmVsb3BlIGZvbGxvd2VycyAoYWxzbyBrbm93blxuXHRcdCAqICAgICAgICAgIGFzIGVudmVsb3BlIGRldGVjdG9ycykgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRW52ZWxvcGVfZGV0ZWN0b3IpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdIFRoZSByYXRlIGF0IHdoaWNoIHRoZSBmb2xsb3dlciByaXNlcy5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmVsZWFzZSBUaGUgcmF0ZSBhdCB3aGljaCB0aGUgZm9sb3dlciBmYWxscy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZm9sbG93ZXIgPSBuZXcgVG9uZS5Gb2xsb3dlcigwLjIsIDAuNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRm9sbG93ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFic31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWJzID0gbmV3IFRvbmUuQWJzKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxvd3Bhc3MgZmlsdGVyIHdoaWNoIHNtb290aHMgdGhlIGlucHV0XG5cdFx0XHQgKiAgQHR5cGUge0JpcXVhZEZpbHRlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIudHlwZSA9ICdsb3dwYXNzJztcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuZnJlcXVlbmN5LnZhbHVlID0gMDtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuUS52YWx1ZSA9IC0xMDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbmV3IFRvbmUuRGVsYXkodGhpcy5ibG9ja1RpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoaXMga2VlcHMgaXQgZmFyIGZyb20gMCwgZXZlbiBmb3IgdmVyeSBzbWFsbCBkaWZmZXJlbmNlc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMTAwMDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2F0dGFjayA9IG9wdGlvbnMuYXR0YWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JlbGVhc2UgPSBvcHRpb25zLnJlbGVhc2U7XG5cdCAgICAgICAgLy90aGUgc21vb3RoZWQgc2lnbmFsIHRvIGdldCB0aGUgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLl9hYnMsIHRoaXMuX2ZpbHRlciwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vdGhlIGRpZmZlcmVuY2UgcGF0aFxuXHQgICAgICAgIHRoaXMuX2Ficy5jb25uZWN0KHRoaXMuX3N1YiwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyLmNoYWluKHRoaXMuX2RlbGF5LCB0aGlzLl9zdWIpO1xuXHQgICAgICAgIC8vdGhyZXNob2xkIHRoZSBkaWZmZXJlbmNlIGFuZCB1c2UgdGhlIHRocmVzaCB0byBzZXQgdGhlIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuX3N1Yi5jaGFpbih0aGlzLl9tdWx0LCB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMsIHRoaXMuX2ZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBhdHRhY2sgYW5kIHJlbGVhc2UgdmFsdWVzIGluIHRoZSB0YWJsZVxuXHQgICAgICAgIHRoaXMuX3NldEF0dGFja1JlbGVhc2UodGhpcy5fYXR0YWNrLCB0aGlzLl9yZWxlYXNlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZvbGxvd2VyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrJzogMC4wNSxcblx0ICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXRzIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2UgdGltZXMgaW4gdGhlIHdhdmUgc2hhcGVyXG5cdFx0ICogIEBwYXJhbSAgIHtUaW1lfSBhdHRhY2tcblx0XHQgKiAgQHBhcmFtICAge1RpbWV9IHJlbGVhc2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLl9zZXRBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGF0dGFjaywgcmVsZWFzZSkge1xuXHQgICAgICAgIHZhciBtaW5UaW1lID0gdGhpcy5ibG9ja1RpbWU7XG5cdCAgICAgICAgYXR0YWNrID0gVG9uZS5UaW1lKGF0dGFjaykudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICByZWxlYXNlID0gVG9uZS5UaW1lKHJlbGVhc2UpLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgYXR0YWNrID0gTWF0aC5tYXgoYXR0YWNrLCBtaW5UaW1lKTtcblx0ICAgICAgICByZWxlYXNlID0gTWF0aC5tYXgocmVsZWFzZSwgbWluVGltZSk7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5VmFsdWVzLnNldE1hcChmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmICh2YWwgPD0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGF0dGFjaztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF0dGFjayB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZvbGxvd2VyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGF0dGFja1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLCAnYXR0YWNrJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNrO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYXR0YWNrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2F0dGFjayA9IGF0dGFjaztcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QXR0YWNrUmVsZWFzZSh0aGlzLl9hdHRhY2ssIHRoaXMuX3JlbGVhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJlbGVhc2UgdGltZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Gb2xsb3dlciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSByZWxlYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUsICdyZWxlYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVsZWFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJlbGVhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmVsZWFzZSA9IHJlbGVhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldEF0dGFja1JlbGVhc2UodGhpcy5fYXR0YWNrLCB0aGlzLl9yZWxlYXNlKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBCb3Jyb3dzIHRoZSBjb25uZWN0IG1ldGhvZCBmcm9tIFNpZ25hbCBzbyB0aGF0IHRoZSBvdXRwdXQgY2FuIGJlIHVzZWRcblx0XHQgKiAgYXMgYSBUb25lLlNpZ25hbCBjb250cm9sIHNpZ25hbC5cblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyLnByb3RvdHlwZS5jb25uZWN0ID0gVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0O1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRm9sbG93ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5VmFsdWVzLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3ViLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9zdWIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Ficy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYWJzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRm9sbG93ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlNjYWxlZEVudmVsb3AgaXMgYW4gZW52ZWxvcGUgd2hpY2ggY2FuIGJlIHNjYWxlZFxuXHRcdCAqICAgICAgICAgdG8gYW55IHJhbmdlLiBJdCdzIHVzZWZ1bCBmb3IgYXBwbHlpbmcgYW4gZW52ZWxvcGVcblx0XHQgKiAgICAgICAgIHRvIGEgZnJlcXVlbmN5IG9yIGFueSBvdGhlciBub24tTm9ybWFsUmFuZ2Ugc2lnbmFsXG5cdFx0ICogICAgICAgICBwYXJhbWV0ZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW52ZWxvcGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbYXR0YWNrXVx0dGhlIGF0dGFjayB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHR0aGUgZGVjYXkgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbc3VzdGFpbl0gXHRhIHBlcmNlbnRhZ2UgKDAtMSkgb2YgdGhlIGZ1bGwgYW1wbGl0dWRlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHR0aGUgcmVsZWFzZSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIHNjYWxlZEVudiA9IG5ldyBUb25lLlNjYWxlZEVudmVsb3BlKHtcblx0XHQgKiAgXHRcImF0dGFja1wiIDogMC4yLFxuXHRcdCAqICBcdFwibWluXCIgOiAyMDAsXG5cdFx0ICogIFx0XCJtYXhcIiA6IDIwMDBcblx0XHQgKiAgfSk7XG5cdFx0ICogIHNjYWxlZEVudi5jb25uZWN0KG9zY2lsbGF0b3IuZnJlcXVlbmN5KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9nZXQgYWxsIG9mIHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdkZWNheScsXG5cdCAgICAgICAgICAgICdzdXN0YWluJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5TY2FsZWRFbnZlbG9wZS5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIGluY29taW5nIHNpZ25hbCBieSBhbiBleHBvbmVudFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBvd31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Qb3cob3B0aW9ucy5leHBvbmVudCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIHNpZ25hbCB0byB0aGUgZGVzaXJlZCByYW5nZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2NhbGUob3B0aW9ucy5taW4sIG9wdGlvbnMubWF4KTtcblx0ICAgICAgICB0aGlzLl9zaWcuY2hhaW4odGhpcy5fZXhwLCB0aGlzLl9zY2FsZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TY2FsZWRFbnZlbG9wZSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlZEVudmVsb3BlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICdleHBvbmVudCc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBtaW4gb3V0cHV0IHZhbHVlLiBUaGlzIGlzIHRoZSB2YWx1ZSB3aGljaCBpdFxuXHRcdCAqIHN0YXJ0cyBhdC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZWRFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1pbiA9IG1pbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIG1heCBvdXRwdXQgdmFsdWUuIEluIG90aGVyIHdvcmRzLCB0aGUgdmFsdWVcblx0XHQgKiBhdCB0aGUgcGVhayBvZiB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlZEVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5tYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgZXhwb25lbnQgdmFsdWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVkRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBleHBvbmVudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLCAnZXhwb25lbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHAudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwLnZhbHVlID0gZXhwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNjYWxlZEVudmVsb3BlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V4cC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXhwID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TY2FsZWRFbnZlbG9wZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUgaXMgYSBUb25lLlNjYWxlZEVudmVsb3BlLCBidXQgaW5zdGVhZCBvZiBgbWluYCBhbmQgYG1heGBcblx0XHQgKiAgICAgICAgIGl0J3MgZ290IGEgYGJhc2VGcmVxdWVuY3lgIGFuZCBgb2N0YXZlc2AgcGFyYW1ldGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVudmVsb3BlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja11cdHRoZSBhdHRhY2sgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2RlY2F5XVx0dGhlIGRlY2F5IHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3N1c3RhaW5dIFx0YSBwZXJjZW50YWdlICgwLTEpIG9mIHRoZSBmdWxsIGFtcGxpdHVkZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0dGhlIHJlbGVhc2UgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBmcmVxRW52ID0gbmV3IFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUoe1xuXHRcdCAqICBcdFwiYXR0YWNrXCIgOiAwLjIsXG5cdFx0ICogIFx0XCJiYXNlRnJlcXVlbmN5XCIgOiBcIkMyXCIsXG5cdFx0ICogIFx0XCJvY3RhdmVzXCIgOiA0XG5cdFx0ICogIH0pO1xuXHRcdCAqICBmcmVxRW52LmNvbm5lY3Qob3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAnZGVjYXknLFxuXHQgICAgICAgICAgICAnc3VzdGFpbicsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvL21lcmdlIGl0IHdpdGggdGhlIGZyZXF1ZW5jeSBlbnZlbG9wZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU3RvcmVzIHRoZSBvY3RhdmUgdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLy9zZXR1cFxuXHQgICAgICAgIHRoaXMuYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeUVudmVsb3BlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogNCxcblx0ICAgICAgICAnZXhwb25lbnQnOiAyXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgbWluaW51bSBvdXRwdXQgdmFsdWUuIFRoaXMgaXMgdGhlIHZhbHVlIHdoaWNoIGl0XG5cdFx0ICogc3RhcnRzIGF0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQG5hbWUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLCAnYmFzZUZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5taW4gPSB0aGlzLnRvRnJlcXVlbmN5KG1pbik7XG5cdCAgICAgICAgICAgIC8vYWxzbyB1cGRhdGUgdGhlIG9jdGF2ZXNcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgYmFzZUZyZXF1ZW5jeSB0aGF0IHRoZVxuXHRcdCAqIGVudmVsb3BlIHdpbGwgc2NhbGUgdG8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZyZXF1ZW5jeUVudmVsb3BlLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0YXZlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0YXZlcztcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWF4ID0gdGhpcy5iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgb2N0YXZlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBleHBvbmVudCB2YWx1ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGV4cG9uZW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUsICdleHBvbmVudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAudmFsdWUgPSBleHA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRnJlcXVlbmN5RW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEdyZWF0ZXJUaGFuWmVybyBvdXRwdXRzIDEgd2hlbiB0aGUgaW5wdXQgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIHplcm9cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZ3QwID0gbmV3IFRvbmUuR3JlYXRlclRoYW5aZXJvKCk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgwLjAxKS5jb25uZWN0KGd0MCk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGd0MCBpcyAxLlxuXHRcdCAqIHNpZy52YWx1ZSA9IDA7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGd0MCBpcyAwLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhblplcm8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGhyZXNoID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKHZhbCA8PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSwgMTI3KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgZmlyc3QgdGhyZXNob2xkZWQgc2lnbmFsIGJ5IGEgbGFyZ2UgdmFsdWUuXG5cdFx0XHQgKiAgdGhpcyB3aWxsIGhlbHAgd2l0aCB2YWx1ZXMgd2hpY2ggYXJlIHZlcnkgY2xvc2UgdG8gMFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aXBseSgxMDAwMCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmNvbm5lY3QodGhpcy5fdGhyZXNoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdyZWF0ZXJUaGFuWmVybywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNwb3NlIG1ldGhvZFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HcmVhdGVyVGhhblplcm99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW5aZXJvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGhyZXNoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdyZWF0ZXJUaGFuWmVybztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBPdXRwdXQgMSBpZiB0aGUgc2lnbmFsIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUsIG90aGVyd2lzZSBvdXRwdXRzIDAuXG5cdFx0ICogICAgICAgICAgY2FuIGNvbXBhcmUgdHdvIHNpZ25hbHMgb3IgYSBzaWduYWwgYW5kIGEgbnVtYmVyLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmFsdWU9MF0gdGhlIHZhbHVlIHRvIGNvbXBhcmUgdG8gdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBndCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuKDIpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoNCkuY29ubmVjdChndCk7XG5cdFx0ICogLy9vdXRwdXQgb2YgZ3QgaXMgZXF1YWwgMS5cblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW4gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzdWJ0cmFjdCB0aGUgYW1vdW50IGZyb20gdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5TdWJ0cmFjdCh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5pbnB1dFsxXSA9IHRoaXMuX3BhcmFtLmlucHV0WzFdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbXBhcmUgdGhhdCBhbW91bnQgdG8gemVyb1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdyZWF0ZXJUaGFuWmVyb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ3R6ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HcmVhdGVyVGhhblplcm8oKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jb25uZWN0KHRoaXMuX2d0eik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HcmVhdGVyVGhhbiwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgbWV0aG9kXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdyZWF0ZXJUaGFufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyZWF0ZXJUaGFuLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZ3R6LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ndHogPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdyZWF0ZXJUaGFuO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuR2F0ZSBvbmx5IHBhc3NlcyBhIHNpZ25hbCB0aHJvdWdoIHdoZW4gdGhlIGluY29taW5nXG5cdFx0ICogICAgICAgICAgc2lnbmFsIGV4Y2VlZHMgYSBzcGVjaWZpZWQgdGhyZXNob2xkLiBUbyBkbyB0aGlzLCBHYXRlIHVzZXNcblx0XHQgKiAgICAgICAgICBhIFRvbmUuRm9sbG93ZXIgdG8gZm9sbG93IHRoZSBhbXBsaXR1ZGUgb2YgdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBBIGNvbW1vbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIGlzIGEgW05vaXNlIEdhdGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05vaXNlX2dhdGUpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN8T2JqZWN0fSBbdGhyZXNob2xkXSBUaGUgdGhyZXNob2xkIGFib3ZlIHdoaWNoIHRoZSBnYXRlIHdpbGwgb3Blbi5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gYXR0YWNrIFRoZSBmb2xsb3dlcidzIGF0dGFjayB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJlbGVhc2UgVGhlIGZvbGxvd2VyJ3MgcmVsZWFzZSB0aW1lXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGdhdGUgPSBuZXcgVG9uZS5HYXRlKC0zMCwgMC4yLCAwLjMpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIG1pYyA9IG5ldyBUb25lLlVzZXJNZWRpYSgpLmNvbm5lY3QoZ2F0ZSk7XG5cdFx0ICogLy90aGUgZ2F0ZSB3aWxsIG9ubHkgcGFzcyB0aHJvdWdoIHRoZSBpbmNvbWluZ1xuXHRcdCAqIC8vc2lnbmFsIHdoZW4gaXQncyBsb3VkZXIgdGhhbiAtMzBkYlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCcsXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkdhdGUpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZvbGxvd2VyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mb2xsb3dlciA9IG5ldyBUb25lLkZvbGxvd2VyKG9wdGlvbnMuYXR0YWNrLCBvcHRpb25zLnJlbGVhc2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdyZWF0ZXJUaGFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ndCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuKFRvbmUuZGJUb0dhaW4ob3B0aW9ucy50aHJlc2hvbGQpKTtcblx0ICAgICAgICAvL3RoZSBjb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLy90aGUgY29udHJvbCBzaWduYWxcblx0ICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMuX2d0LCB0aGlzLl9mb2xsb3dlciwgdGhpcy5vdXRwdXQuZ2Fpbik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HYXRlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuR2F0ZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrJzogMC4xLFxuXHQgICAgICAgICdyZWxlYXNlJzogMC4xLFxuXHQgICAgICAgICd0aHJlc2hvbGQnOiAtNDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdGhyZXNob2xkIG9mIHRoZSBnYXRlIGluIGRlY2liZWxzXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR2F0ZSNcblx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0ICogQG5hbWUgdGhyZXNob2xkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HYXRlLnByb3RvdHlwZSwgJ3RocmVzaG9sZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuZ2FpblRvRGIodGhpcy5fZ3QudmFsdWUpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGhyZXNoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2d0LnZhbHVlID0gVG9uZS5kYlRvR2Fpbih0aHJlc2gpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF0dGFjayBzcGVlZCBvZiB0aGUgZ2F0ZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdhdGUjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgYXR0YWNrXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HYXRlLnByb3RvdHlwZSwgJ2F0dGFjaycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbGxvd2VyLmF0dGFjaztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGF0dGFja1RpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZm9sbG93ZXIuYXR0YWNrID0gYXR0YWNrVGltZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByZWxlYXNlIHNwZWVkIG9mIHRoZSBnYXRlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR2F0ZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSByZWxlYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HYXRlLnByb3RvdHlwZSwgJ3JlbGVhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb2xsb3dlci5yZWxlYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmVsZWFzZVRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZm9sbG93ZXIucmVsZWFzZSA9IHJlbGVhc2VUaW1lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HYXRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdhdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9mb2xsb3dlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZvbGxvd2VyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9ndCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR2F0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIFRvbmUuVGlja1NpZ25hbCBleHRlbmRzIFRvbmUuU2lnbmFsLCBidXQgYWRkcyB0aGUgY2FwYWJpbGl0eVxuXHRcdCAqICAgICAgICB0byBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBlbGFwc2VkIHRpY2tzLiBleHBvbmVudGlhbCBhbmQgdGFyZ2V0IGN1cnZlc1xuXHRcdCAqICAgICAgICBhcmUgYXBwcm94aW1hdGVkIHdpdGggbXVsdGlwbGUgbGluZWFyIHJhbXBzLlxuXHRcdCAqXG5cdFx0ICogICAgICAgIFRoYW5rIHlvdSBCcnVubyBEaWFzLCBILiBTb2ZpYSBQaW50bywgYW5kIERhdmlkIE0uIE1hdG9zLCBmb3IgeW91ciBbV0FDIHBhcGVyXShodHRwczovL3NtYXJ0ZWNoLmdhdGVjaC5lZHUvYml0c3RyZWFtL2hhbmRsZS8xODUzLzU0NTg4L1dBQzIwMTYtNDkucGRmKVxuXHRcdCAqICAgICAgICBkZXNjcmliaW5nIGludGVncmF0aW5nIHRpbWluZyBmdW5jdGlvbnMgZm9yIHRlbXBvIGNhbGN1bGF0aW9ucy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc2lnbmFsXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgdmFsdWUgPSBUb25lLmRlZmF1bHRBcmcodmFsdWUsIDEpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcywge1xuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuVGlja3MsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9leHRlbmQgdGhlIG1lbW9yeVxuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5tZW1vcnkgPSBJbmZpbml0eTtcblx0ICAgICAgICAvL2NsZWFyIHRoZSBjbG9jayBmcm9tIHRoZSBiZWdpbm5pbmdcblx0ICAgICAgICB0aGlzLmNhbmNlbFNjaGVkdWxlZFZhbHVlcygwKTtcblx0ICAgICAgICAvL3NldCBhbiBpbml0aWFsIGV2ZW50XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiAwLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGlja1NpZ25hbCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogV3JhcHMgVG9uZS5TaWduYWwgbWV0aG9kcyBzbyB0aGF0IHRoZXkgYWxzb1xuXHRcdCAqIHJlY29yZCB0aGUgdGlja3MuXG5cdFx0ICogQHBhcmFtICB7RnVuY3Rpb259IG1ldGhvZFxuXHRcdCAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBmdW5jdGlvbiBfd3JhcFNjaGVkdWxlTWV0aG9kcyhtZXRob2QpIHtcblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gdGhpcy5fZXZlbnRzLnByZXZpb3VzRXZlbnQoZXZlbnQpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3NVbnRpbFRpbWUgPSB0aGlzLl9nZXRUaWNrc1VudGlsRXZlbnQocHJldmlvdXNFdmVudCwgdGltZSk7XG5cdCAgICAgICAgICAgIGV2ZW50LnRpY2tzID0gTWF0aC5tYXgodGlja3NVbnRpbFRpbWUsIDApO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSA9IF93cmFwU2NoZWR1bGVNZXRob2RzKFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSk7XG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lID0gX3dyYXBTY2hlZHVsZU1ldGhvZHMoVG9uZS5TaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUgd2l0aFxuXHRcdCAqICBhIHJhdGUgaGF2aW5nIHRoZSBnaXZlbiB0aW1lIGNvbnN0YW50LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHRpbWVDb25zdGFudFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnNldFRhcmdldEF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSwgY29uc3RhbnQpIHtcblx0ICAgICAgICAvL2Fwcm94aW1hdGUgaXQgd2l0aCBtdWx0aXBsZSBsaW5lYXIgcmFtcHNcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQodGltZSk7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIC8vc3RhcnQgZnJvbSBwcmV2aW91c2x5IHNjaGVkdWxlZCB2YWx1ZVxuXHQgICAgICAgIHZhciBwcmV2RXZlbnQgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHZhciBzZWdtZW50cyA9IE1hdGgucm91bmQoTWF0aC5tYXgoMSAvIGNvbnN0YW50LCAxKSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gc2VnbWVudHM7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgc2VnVGltZSA9IGNvbnN0YW50ICogaSArIHRpbWU7XG5cdCAgICAgICAgICAgIHZhciByYW1wVmFsID0gdGhpcy5fZXhwb25lbnRpYWxBcHByb2FjaChwcmV2RXZlbnQudGltZSwgcHJldkV2ZW50LnZhbHVlLCB2YWx1ZSwgY29uc3RhbnQsIHNlZ1RpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMuX3RvVW5pdHMocmFtcFZhbCksIHNlZ1RpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGV4cG9uZW50aWFsIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcGFyYW1ldGVyIHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBlbmRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIC8vYXByb3hpbWF0ZSBpdCB3aXRoIG11bHRpcGxlIGxpbmVhciByYW1wc1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgLy9zdGFydCBmcm9tIHByZXZpb3VzbHkgc2NoZWR1bGVkIHZhbHVlXG5cdCAgICAgICAgdmFyIHByZXZFdmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgaWYgKHByZXZFdmVudCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICBwcmV2RXZlbnQgPSB7XG5cdCAgICAgICAgICAgICAgICAndmFsdWUnOiB0aGlzLl9pbml0aWFsVmFsdWUsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IDBcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hcHByb3ggMTAgc2VnbWVudHMgcGVyIHNlY29uZFxuXHQgICAgICAgIHZhciBzZWdtZW50cyA9IE1hdGgucm91bmQoTWF0aC5tYXgoKHRpbWUgLSBwcmV2RXZlbnQudGltZSkgKiAxMCwgMSkpO1xuXHQgICAgICAgIHZhciBzZWdtZW50RHVyID0gKHRpbWUgLSBwcmV2RXZlbnQudGltZSkgLyBzZWdtZW50cztcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBzZWdtZW50czsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBzZWdUaW1lID0gc2VnbWVudER1ciAqIGkgKyBwcmV2RXZlbnQudGltZTtcblx0ICAgICAgICAgICAgdmFyIHJhbXBWYWwgPSB0aGlzLl9leHBvbmVudGlhbEludGVycG9sYXRlKHByZXZFdmVudC50aW1lLCBwcmV2RXZlbnQudmFsdWUsIHRpbWUsIHZhbHVlLCBzZWdUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh0aGlzLl90b1VuaXRzKHJhbXBWYWwpLCBzZWdUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgdGljayB2YWx1ZSBhdCB0aGUgdGltZS4gVGFrZXMgaW50byBhY2NvdW50XG5cdFx0ICogYW55IGF1dG9tYXRpb24gY3VydmVzIHNjaGVkdWxlZCBvbiB0aGUgc2lnbmFsLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBUaGUgdGltZSB0byBnZXQgdGhlIHRpY2sgY291bnQgYXRcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgICBUaGUgbnVtYmVyIG9mIHRpY2tzIHdoaWNoIGhhdmUgZWxhcHNlZCBhdCB0aGUgdGltZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBhbnkgYXV0b21hdGlvbnMuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLl9nZXRUaWNrc1VudGlsRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIHRpbWUpIHtcblx0ICAgICAgICBpZiAoZXZlbnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSB7XG5cdCAgICAgICAgICAgICAgICAndGlja3MnOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3RpbWUnOiAwXG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzVW5kZWYoZXZlbnQudGlja3MpKSB7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gdGhpcy5fZXZlbnRzLnByZXZpb3VzRXZlbnQoZXZlbnQpO1xuXHQgICAgICAgICAgICBldmVudC50aWNrcyA9IHRoaXMuX2dldFRpY2tzVW50aWxFdmVudChwcmV2aW91c0V2ZW50LCBldmVudC50aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHZhbDAgPSB0aGlzLmdldFZhbHVlQXRUaW1lKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgIHZhciB2YWwxID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICAvL2lmIGl0J3MgcmlnaHQgb24gdGhlIGxpbmUsIHRha2UgdGhlIHByZXZpb3VzIHZhbHVlXG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5nZXQodGltZSkudGltZSA9PT0gdGltZSAmJiB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuU2V0VmFsdWUpIHtcblx0ICAgICAgICAgICAgdmFsMSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSAtIHRoaXMuc2FtcGxlVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAwLjUgKiAodGltZSAtIGV2ZW50LnRpbWUpICogKHZhbDAgKyB2YWwxKSArIGV2ZW50LnRpY2tzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIHRpY2sgdmFsdWUgYXQgdGhlIHRpbWUuIFRha2VzIGludG8gYWNjb3VudFxuXHRcdCAqIGFueSBhdXRvbWF0aW9uIGN1cnZlcyBzY2hlZHVsZWQgb24gdGhlIHNpZ25hbC5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIGdldCB0aGUgdGljayBjb3VudCBhdFxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgIFRoZSBudW1iZXIgb2YgdGlja3Mgd2hpY2ggaGF2ZSBlbGFwc2VkIGF0IHRoZSB0aW1lXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGFueSBhdXRvbWF0aW9ucy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZ2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLl9nZXRUaWNrc1VudGlsRXZlbnQoZXZlbnQsIHRpbWUpLCAwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgbnVtYmVyIG9mIHRpY2tzIGZyb20gdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0ge1RpY2tzfSB0aWNrcyBUaGUgbnVtYmVyIG9mIHRpY2tzIHRvIGNhbGN1bGF0ZVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gZ2V0IHRoZSBuZXh0IHRpY2sgZnJvbVxuXHRcdCAqIEByZXR1cm4ge1NlY29uZHN9IFRoZSBkdXJhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIHRpY2tzIGZyb20gdGhlIGdpdmVuIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5nZXREdXJhdGlvbk9mVGlja3MgPSBmdW5jdGlvbiAodGlja3MsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRUaWNrID0gdGhpcy5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5nZXRUaW1lT2ZUaWNrKGN1cnJlbnRUaWNrICsgdGlja3MpIC0gdGltZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHaXZlbiBhIHRpY2ssIHJldHVybnMgdGhlIHRpbWUgdGhhdCB0aWNrIG9jY3VycyBhdC5cblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja1xuXHRcdCAqIEByZXR1cm4ge1RpbWV9ICAgICAgVGhlIHRpbWUgdGhhdCB0aGUgdGljayBvY2N1cnMuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmdldFRpbWVPZlRpY2sgPSBmdW5jdGlvbiAodGljaykge1xuXHQgICAgICAgIHZhciBiZWZvcmUgPSB0aGlzLl9ldmVudHMuZ2V0KHRpY2ssICd0aWNrcycpO1xuXHQgICAgICAgIHZhciBhZnRlciA9IHRoaXMuX2V2ZW50cy5nZXRBZnRlcih0aWNrLCAndGlja3MnKTtcblx0ICAgICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aWNrcyA9PT0gdGljaykge1xuXHQgICAgICAgICAgICByZXR1cm4gYmVmb3JlLnRpbWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUgJiYgYWZ0ZXIgJiYgYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIgJiYgYmVmb3JlLnZhbHVlICE9PSBhZnRlci52YWx1ZSkge1xuXHQgICAgICAgICAgICB2YXIgdmFsMCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoYmVmb3JlLnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgdmFsMSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoYWZ0ZXIudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBkZWx0YSA9ICh2YWwxIC0gdmFsMCkgLyAoYWZ0ZXIudGltZSAtIGJlZm9yZS50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGsgPSBNYXRoLnNxcnQoTWF0aC5wb3codmFsMCwgMikgLSAyICogZGVsdGEgKiAoYmVmb3JlLnRpY2tzIC0gdGljaykpO1xuXHQgICAgICAgICAgICB2YXIgc29sMSA9ICgtdmFsMCArIGspIC8gZGVsdGE7XG5cdCAgICAgICAgICAgIHZhciBzb2wyID0gKC12YWwwIC0gaykgLyBkZWx0YTtcblx0ICAgICAgICAgICAgcmV0dXJuIChzb2wxID4gMCA/IHNvbDEgOiBzb2wyKSArIGJlZm9yZS50aW1lO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYmVmb3JlKSB7XG5cdCAgICAgICAgICAgIGlmIChiZWZvcmUudmFsdWUgPT09IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBiZWZvcmUudGltZSArICh0aWNrIC0gYmVmb3JlLnRpY2tzKSAvIGJlZm9yZS52YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aWNrIC8gdGhpcy5faW5pdGlhbFZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDb252ZXJ0IHNvbWUgbnVtYmVyIG9mIHRpY2tzIHRoZWlyIHRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIGFjY291bnRpbmdcblx0XHQgKiBmb3IgYW55IGF1dG9tYXRpb24gY3VydmVzIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgbnVtYmVyIG9mIHRpY2tzIHRvIGNvbnZlcnQgdG8gc2Vjb25kcy5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBbd2hlbj1ub3ddICBXaGVuIGFsb25nIHRoZSBhdXRvbWF0aW9uIHRpbWVsaW5lIHRvIGNvbnZlcnQgdGhlIHRpY2tzLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVGltZX0gICAgICAgVGhlIGR1cmF0aW9uIGluIHNlY29uZHMgb2YgdGhlIHRpY2tzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS50aWNrc1RvVGltZSA9IGZ1bmN0aW9uICh0aWNrcywgd2hlbikge1xuXHQgICAgICAgIHdoZW4gPSB0aGlzLnRvU2Vjb25kcyh3aGVuKTtcblx0ICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZSh0aGlzLmdldER1cmF0aW9uT2ZUaWNrcyh0aWNrcywgd2hlbikpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBpbnZlcnNlIG9mIFt0aWNrc1RvVGltZV0oI3RpY2tzdG90aW1lKS4gQ29udmVydCBhIGR1cmF0aW9uIGluXG5cdFx0ICogc2Vjb25kcyB0byB0aGUgY29ycmVzcG9uZGluZyBudW1iZXIgb2YgdGlja3MgYWNjb3VudGluZyBmb3IgYW55XG5cdFx0ICogYXV0b21hdGlvbiBjdXJ2ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gZHVyYXRpb24gVGhlIHRpbWUgaW50ZXJ2YWwgdG8gY29udmVydCB0byB0aWNrcy5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBbd2hlbj1ub3ddICAgICBXaGVuIGFsb25nIHRoZSBhdXRvbWF0aW9uIHRpbWVsaW5lIHRvIGNvbnZlcnQgdGhlIHRpY2tzLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVGlja3N9ICAgICAgICAgIFRoZSBkdXJhdGlvbiBpbiB0aWNrcy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUudGltZVRvVGlja3MgPSBmdW5jdGlvbiAoZHVyYXRpb24sIHdoZW4pIHtcblx0ICAgICAgICB3aGVuID0gdGhpcy50b1NlY29uZHMod2hlbik7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGlja3MgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHdoZW4pO1xuXHQgICAgICAgIHZhciBlbmRUaWNrcyA9IHRoaXMuZ2V0VGlja3NBdFRpbWUod2hlbiArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGlja3MoZW5kVGlja3MgLSBzdGFydFRpY2tzKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaWNrU2lnbmFsO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgVGltZWxpbmUgU3RhdGUuIFByb3ZpZGVzIHRoZSBtZXRob2RzOiA8Y29kZT5zZXRTdGF0ZUF0VGltZShcInN0YXRlXCIsIHRpbWUpPC9jb2RlPlxuXHRcdCAqICAgICAgICAgIGFuZCA8Y29kZT5nZXRWYWx1ZUF0VGltZSh0aW1lKTwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZWxpbmV9XG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSBpbml0aWFsIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBUaW1lbGluZVN0YXRlLiBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gPGNvZGU+dW5kZWZpbmVkPC9jb2RlPlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlID0gZnVuY3Rpb24gKGluaXRpYWwpIHtcblx0ICAgICAgICBUb25lLlRpbWVsaW5lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGluaXRpYWwgc3RhdGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbml0aWFsID0gaW5pdGlhbDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpbWVsaW5lU3RhdGUsIFRvbmUuVGltZWxpbmUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHNjaGVkdWxlZCBzdGF0ZSBzY2hlZHVsZWQgYmVmb3JlIG9yIGF0XG5cdFx0ICogIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybiAge1N0cmluZ30gIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBpbnB1dCBpbiBzZXRTdGF0ZUF0VGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciBldmVudCA9IHRoaXMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIGlmIChldmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gZXZlbnQuc3RhdGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRpYWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBzdGF0ZSB0byB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHN0YXRlIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSB0byBzZXQuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZVN0YXRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUucHJvdG90eXBlLnNldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHN0YXRlLCB0aW1lKSB7XG5cdCAgICAgICAgLy9hbGwgc3RhdGUgY2hhbmdlcyBuZWVkIHRvIGJlID49IHRoZSBwcmV2aW91cyBzdGF0ZSB0aW1lXG5cdCAgICAgICAgLy9UT0RPIHRocm93IGVycm9yIGlmIHRpbWUgPCB0aGUgcHJldmlvdXMgZXZlbnQgdGltZVxuXHQgICAgICAgIHRoaXMuYWRkKHtcblx0ICAgICAgICAgICAgJ3N0YXRlJzogc3RhdGUsXG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGV2ZW50IGJlZm9yZSB0aGUgdGltZSB3aXRoIHRoZSBnaXZlbiBzdGF0ZVxuXHRcdCAqICBAcGFyYW0ge1RvbmUuU3RhdGV9IHN0YXRlIFRoZSBzdGF0ZSB0byBsb29rIGZvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBjaGVjayBiZWZvcmVcdFx0XHRcblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIFRoZSBldmVudCB3aXRoIHRoZSBnaXZlbiBzdGF0ZSBiZWZvcmUgdGhlIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuZ2V0TGFzdFN0YXRlID0gZnVuY3Rpb24gKHN0YXRlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3RpbWVsaW5lW2ldO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IHN0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZXZlbnQgYWZ0ZXIgdGhlIHRpbWUgd2l0aCB0aGUgZ2l2ZW4gc3RhdGVcblx0XHQgKiAgQHBhcmFtIHtUb25lLlN0YXRlfSBzdGF0ZSBUaGUgc3RhdGUgdG8gbG9vayBmb3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gY2hlY2sgZnJvbVxuXHRcdCAqICBAcmV0dXJuICB7T2JqZWN0fSAgVGhlIGV2ZW50IHdpdGggdGhlIGdpdmVuIHN0YXRlIGFmdGVyIHRoZSB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUucHJvdG90eXBlLmdldE5leHRTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPCB0aGlzLl90aW1lbGluZS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fdGltZWxpbmVbaV07XG5cdCAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IHN0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWVsaW5lU3RhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVXNlcyBbVG9uZS5UaWNrU2lnbmFsXShUaWNrU2lnbmFsKSB0byB0cmFjayBlbGFwc2VkIHRpY2tzIHdpdGhcblx0XHQgKiAgXHRcdGNvbXBsZXggYXV0b21hdGlvbiBjdXJ2ZXMuXG5cdFx0ICpcblx0XHQgKiBcdEBjb25zdHJ1Y3RvclxuXHQgICAgICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIGluaXRpYWwgZnJlcXVlbmN5IHRoYXQgdGhlIHNpZ25hbCB0aWNrcyBhdFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZyZXF1ZW5jeSddLCBUb25lLlRpY2tTb3VyY2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBiZSBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlICB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuVGlja1NpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzdGF0ZSB0aW1lbGluZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgb2Zmc2V0IHZhbHVlcyBvZiB0aGUgdGlja3Ncblx0XHRcdCAqIEB0eXBlIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgIC8vYWRkIHRoZSBmaXJzdCBldmVudFxuXHQgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUoMCwgMCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaWNrU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLmRlZmF1bHRzID0geyAnZnJlcXVlbmN5JzogMSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiwgXCJzdG9wcGVkXCIgb3IgXCJwYXVzZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaWNrU291cmNlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBjbG9jayBhdCB0aGUgZ2l2ZW4gdGltZS4gT3B0aW9uYWxseSBwYXNzIGluIGFuIG9mZnNldFxuXHRcdCAqICBvZiB3aGVyZSB0byBzdGFydCB0aGUgdGljayBjb3VudGVyIGZyb20uXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgdGltZSAgICBUaGUgdGltZSB0aGUgY2xvY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7VGlja3M9MH0gb2Zmc2V0IFRoZSBudW1iZXIgb2YgdGlja3MgdG8gc3RhcnQgdGhlIHNvdXJjZSBhdFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5UaWNrU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKG9mZnNldCkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUob2Zmc2V0LCB0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgY2xvY2suIFN0b3BwaW5nIHRoZSBjbG9jayByZXNldHMgdGhlIHRpY2sgY291bnRlciB0byAwLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBjbG9jay5zdG9wKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL2NhbmNlbCB0aGUgcHJldmlvdXMgc3RvcFxuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3N0YXRlLmdldCh0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LnRpbWUgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmNhbmNlbChldmVudC50aW1lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbChldmVudC50aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXVzZSB0aGUgY2xvY2suIFBhdXNpbmcgZG9lcyBub3QgcmVzZXQgdGhlIHRpY2sgY291bnRlci5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5QYXVzZWQsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIHN0YXJ0L3N0b3AvcGF1c2UgYW5kIHNldFRpY2tBdFRpbWUgZXZlbnRzIHNjaGVkdWxlZCBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdG8gY2xlYXIgdGhlIGV2ZW50cyBhZnRlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGVsYXBzZWQgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIGdldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgVGhlIG51bWJlciBvZiB0aWNrc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBzdG9wRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXRMYXN0U3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICAvL3RoaXMgZXZlbnQgYWxsb3dzIGZvckVhY2hCZXR3ZWVuIHRvIGl0ZXJhdGUgdW50aWwgdGhlIGN1cnJlbnQgdGltZVxuXHQgICAgICAgIHZhciB0bXBFdmVudCA9IHtcblx0ICAgICAgICAgICAgc3RhdGU6IFRvbmUuU3RhdGUuUGF1c2VkLFxuXHQgICAgICAgICAgICB0aW1lOiB0aW1lXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5hZGQodG1wRXZlbnQpO1xuXHQgICAgICAgIC8va2VlcCB0cmFjayBvZiB0aGUgcHJldmlvdXMgb2Zmc2V0IGV2ZW50XG5cdCAgICAgICAgdmFyIGxhc3RTdGF0ZSA9IHN0b3BFdmVudDtcblx0ICAgICAgICB2YXIgZWxhcHNlZFRpY2tzID0gMDtcblx0ICAgICAgICAvL2l0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIGV2ZW50cyBzaW5jZSB0aGUgbGFzdCBzdG9wXG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RvcEV2ZW50LnRpbWUsIHRpbWUgKyB0aGlzLnNhbXBsZVRpbWUsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIHZhciBwZXJpb2RTdGFydFRpbWUgPSBsYXN0U3RhdGUudGltZTtcblx0ICAgICAgICAgICAgLy9pZiB0aGVyZSBpcyBhbiBvZmZzZXQgZXZlbnQgaW4gdGhpcyBwZXJpb2QgdXNlIHRoYXRcblx0ICAgICAgICAgICAgdmFyIG9mZnNldEV2ZW50ID0gdGhpcy5fdGlja09mZnNldC5nZXQoZS50aW1lKTtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldEV2ZW50LnRpbWUgPj0gbGFzdFN0YXRlLnRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRUaWNrcyA9IG9mZnNldEV2ZW50LnRpY2tzO1xuXHQgICAgICAgICAgICAgICAgcGVyaW9kU3RhcnRUaW1lID0gb2Zmc2V0RXZlbnQudGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAobGFzdFN0YXRlLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgZS5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICBlbGFwc2VkVGlja3MgKz0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUoZS50aW1lKSAtIHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKHBlcmlvZFN0YXJ0VGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbGFzdFN0YXRlID0gZTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIC8vcmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZXZlbnRcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5yZW1vdmUodG1wRXZlbnQpO1xuXHQgICAgICAgIC8vcmV0dXJuIHRoZSB0aWNrc1xuXHQgICAgICAgIHJldHVybiBlbGFwc2VkVGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkLiBTdGFydHMgY291bnRpbmcgYXQgMFxuXHRcdCAqICBhbmQgaW5jcmVtZW50cyBhZnRlciB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuIFJldHVybnMgLTEgd2hlbiBzdG9wcGVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaWNrU291cmNlI1xuXHRcdCAqICBAbmFtZSB0aWNrc1xuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZSwgJ3RpY2tzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUaWNrc0F0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSh0LCB0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSBzaW5jZSB0aWNrcz0wIHRoYXQgdGhlIFRpY2tTb3VyY2UgaGFzIGJlZW4gcnVubmluZy4gQWNjb3VudHNcblx0XHQgKiAgZm9yIHRlbXBvIGN1cnZlc1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaWNrU291cmNlI1xuXHRcdCAqICBAbmFtZSBzZWNvbmRzXG5cdFx0ICogIEB0eXBlIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUsICdzZWNvbmRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWNvbmRzQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocykge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5mcmVxdWVuY3kudGltZVRvVGlja3Mocywgbm93KTtcblx0ICAgICAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSh0aWNrcywgbm93KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGVsYXBzZWQgc2Vjb25kcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSBlbGFwc2VkIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9ICBUaGUgbnVtYmVyIG9mIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRTZWNvbmRzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIHN0b3BFdmVudCA9IHRoaXMuX3N0YXRlLmdldExhc3RTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIC8vdGhpcyBldmVudCBhbGxvd3MgZm9yRWFjaEJldHdlZW4gdG8gaXRlcmF0ZSB1bnRpbCB0aGUgY3VycmVudCB0aW1lXG5cdCAgICAgICAgdmFyIHRtcEV2ZW50ID0ge1xuXHQgICAgICAgICAgICBzdGF0ZTogVG9uZS5TdGF0ZS5QYXVzZWQsXG5cdCAgICAgICAgICAgIHRpbWU6IHRpbWVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9rZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBvZmZzZXQgZXZlbnRcblx0ICAgICAgICB2YXIgbGFzdFN0YXRlID0gc3RvcEV2ZW50O1xuXHQgICAgICAgIHZhciBlbGFwc2VkU2Vjb25kcyA9IDA7XG5cdCAgICAgICAgLy9pdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBldmVudHMgc2luY2UgdGhlIGxhc3Qgc3RvcFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hCZXR3ZWVuKHN0b3BFdmVudC50aW1lLCB0aW1lICsgdGhpcy5zYW1wbGVUaW1lLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICB2YXIgcGVyaW9kU3RhcnRUaW1lID0gbGFzdFN0YXRlLnRpbWU7XG5cdCAgICAgICAgICAgIC8vaWYgdGhlcmUgaXMgYW4gb2Zmc2V0IGV2ZW50IGluIHRoaXMgcGVyaW9kIHVzZSB0aGF0XG5cdCAgICAgICAgICAgIHZhciBvZmZzZXRFdmVudCA9IHRoaXMuX3RpY2tPZmZzZXQuZ2V0KGUudGltZSk7XG5cdCAgICAgICAgICAgIGlmIChvZmZzZXRFdmVudC50aW1lID49IGxhc3RTdGF0ZS50aW1lKSB7XG5cdCAgICAgICAgICAgICAgICBlbGFwc2VkU2Vjb25kcyA9IG9mZnNldEV2ZW50LnNlY29uZHM7XG5cdCAgICAgICAgICAgICAgICBwZXJpb2RTdGFydFRpbWUgPSBvZmZzZXRFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChsYXN0U3RhdGUuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBlLnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRTZWNvbmRzICs9IGUudGltZSAtIHBlcmlvZFN0YXJ0VGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBsYXN0U3RhdGUgPSBlO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIHRlbXBvcmFyeSBldmVudFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLnJlbW92ZSh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIHRpY2tzXG5cdCAgICAgICAgcmV0dXJuIGVsYXBzZWRTZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFNldCB0aGUgY2xvY2sncyB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgdmFsdWUgdG8gc2V0XG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBzZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRpY2tTb3VyY2V9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuc2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGlja3MsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldC5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldC5hZGQoe1xuXHQgICAgICAgICAgICAndGltZSc6IHRpbWUsXG5cdCAgICAgICAgICAgICd0aWNrcyc6IHRpY2tzLFxuXHQgICAgICAgICAgICAnc2Vjb25kcyc6IHRoaXMuZnJlcXVlbmN5LmdldER1cmF0aW9uT2ZUaWNrcyh0aWNrcywgdGltZSlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgc2NoZWR1bGVkIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm4gIHtTdHJpbmd9ICBUaGUgbmFtZSBvZiB0aGUgc3RhdGUgaW5wdXQgaW4gc2V0U3RhdGVBdFRpbWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0YXJ0KFwiKzAuMVwiKTtcblx0XHQgKiBzb3VyY2UuZ2V0U3RhdGVBdFRpbWUoXCIrMC4xXCIpOyAvL3JldHVybnMgXCJzdGFydGVkXCJcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSB0aW1lIG9mIHRoZSBnaXZlbiB0aWNrLiBUaGUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ICogaXMgd2hlbiB0byB0ZXN0IGJlZm9yZS4gU2luY2UgdGlja3MgY2FuIGJlIHNldCAod2l0aCBzZXRUaWNrc0F0VGltZSlcblx0XHQgKiB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgdGltZXMgZm9yIGEgZ2l2ZW4gdGljayB2YWx1ZS4gXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIG51bWJlci5cblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gYmVmb3JlIFdoZW4gdG8gbWVhc3VyZSB0aGUgdGljayB2YWx1ZSBmcm9tLiBcblx0XHQgKiBAcmV0dXJuIHtUaW1lfSAgICAgICBUaGUgdGltZSBvZiB0aGUgdGlja1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRUaW1lT2ZUaWNrID0gZnVuY3Rpb24gKHRpY2ssIGJlZm9yZSkge1xuXHQgICAgICAgIGJlZm9yZSA9IFRvbmUuZGVmYXVsdEFyZyhiZWZvcmUsIHRoaXMubm93KCkpO1xuXHQgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl90aWNrT2Zmc2V0LmdldChiZWZvcmUpO1xuXHQgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3N0YXRlLmdldChiZWZvcmUpO1xuXHQgICAgICAgIHZhciBzdGFydFRpbWUgPSBNYXRoLm1heChvZmZzZXQudGltZSwgZXZlbnQudGltZSk7XG5cdCAgICAgICAgdmFyIGFic29sdXRlVGlja3MgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShzdGFydFRpbWUpICsgdGljayAtIG9mZnNldC50aWNrcztcblx0ICAgICAgICByZXR1cm4gdGhpcy5mcmVxdWVuY3kuZ2V0VGltZU9mVGljayhhYnNvbHV0ZVRpY2tzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW52b2tlIHRoZSBjYWxsYmFjayBldmVudCBhdCBhbGwgc2NoZWR1bGVkIHRpY2tzIGJldHdlZW4gdGhlIFxuXHRcdCAqICBzdGFydCB0aW1lIGFuZCB0aGUgZW5kIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgc3RhcnRUaW1lICBUaGUgYmVnaW5uaW5nIG9mIHRoZSBzZWFyY2ggcmFuZ2Vcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgZW5kVGltZSAgICBUaGUgZW5kIG9mIHRoZSBzZWFyY2ggcmFuZ2Vcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb248VGltZSxUaWNrcz59ICBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBlYWNoIHRpY2tcblx0XHQgKiAgQHJldHVybiAge1RvbmUuVGlja1NvdXJjZX0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5mb3JFYWNoVGlja0JldHdlZW4gPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vb25seSBpdGVyYXRlIHRocm91Z2ggdGhlIHNlY3Rpb25zIHdoZXJlIGl0IGlzIFwic3RhcnRlZFwiXG5cdCAgICAgICAgdmFyIGxhc3RTdGF0ZUV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RhcnRUaW1lLCBlbmRUaW1lLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKGxhc3RTdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgZXZlbnQuc3RhdGUgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5mb3JFYWNoVGlja0JldHdlZW4oTWF0aC5tYXgobGFzdFN0YXRlRXZlbnQudGltZSwgc3RhcnRUaW1lKSwgZXZlbnQudGltZSAtIHRoaXMuc2FtcGxlVGltZSwgY2FsbGJhY2spO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGxhc3RTdGF0ZUV2ZW50ID0gZXZlbnQ7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICBzdGFydFRpbWUgPSBNYXRoLm1heChsYXN0U3RhdGVFdmVudC50aW1lLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIGlmIChsYXN0U3RhdGVFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIHRoaXMuX3N0YXRlKSB7XG5cdCAgICAgICAgICAgIC8vZmlndXJlIG91dCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBmcmVxdWVuY3kgdGlja3MgYW5kIHRoZSBcblx0ICAgICAgICAgICAgdmFyIHN0YXJ0VGlja3MgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3NBdFN0YXJ0ID0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUobGFzdFN0YXRlRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBkaWZmID0gc3RhcnRUaWNrcyAtIHRpY2tzQXRTdGFydDtcblx0ICAgICAgICAgICAgdmFyIG9mZnNldCA9IGRpZmYgJSAxO1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSAxIC0gb2Zmc2V0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBuZXh0VGlja1RpbWUgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaW1lT2ZUaWNrKHN0YXJ0VGlja3MgKyBvZmZzZXQpO1xuXHQgICAgICAgICAgICB2YXIgZXJyb3IgPSBudWxsO1xuXHQgICAgICAgICAgICB3aGlsZSAobmV4dFRpY2tUaW1lIDwgZW5kVGltZSAmJiB0aGlzLl9zdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXh0VGlja1RpbWUsIE1hdGgucm91bmQodGhpcy5nZXRUaWNrc0F0VGltZShuZXh0VGlja1RpbWUpKSk7XG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tUaW1lICs9IHRoaXMuZnJlcXVlbmN5LmdldER1cmF0aW9uT2ZUaWNrcygxLCBuZXh0VGlja1RpbWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChlcnJvcikge1xuXHQgICAgICAgICAgICB0aHJvdyBlcnJvcjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaWNrU291cmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc2FtcGxlIGFjY3VyYXRlIGNsb2NrIHdoaWNoIHByb3ZpZGVzIGEgY2FsbGJhY2sgYXQgdGhlIGdpdmVuIHJhdGUuXG5cdFx0ICogICAgICAgICAgV2hpbGUgdGhlIGNhbGxiYWNrIGlzIG5vdCBzYW1wbGUtYWNjdXJhdGUgKGl0IGlzIHN0aWxsIHN1c2NlcHRpYmxlIHRvXG5cdFx0ICogICAgICAgICAgbG9vc2UgSlMgdGltaW5nKSwgdGhlIHRpbWUgcGFzc2VkIGluIGFzIHRoZSBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2tcblx0XHQgKiAgICAgICAgICBpcyBwcmVjaXNlLiBGb3IgbW9zdCBhcHBsaWNhdGlvbnMsIGl0IGlzIGJldHRlciB0byB1c2UgVG9uZS5UcmFuc3BvcnRcblx0XHQgKiAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBDbG9jayBieSBpdHNlbGYgc2luY2UgeW91IGNhbiBzeW5jaHJvbml6ZSBtdWx0aXBsZSBjYWxsYmFja3MuXG5cdFx0ICpcblx0XHQgKiBcdEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqIFx0QHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2l0aCB0aGUgdGltZSBvZiB0aGUgYXVkaW8gZXZlbnRcblx0XHQgKiBcdEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHJhdGUgb2YgdGhlIGNhbGxiYWNrXG5cdFx0ICogXHRAZXhhbXBsZVxuXHRcdCAqIC8vdGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBhcHByb3hpbWF0ZWx5IG9uY2UgYSBzZWNvbmRcblx0XHQgKiAvL2FuZCB3aWxsIHByaW50IHRoZSB0aW1lIGV4YWN0bHkgb25jZSBhIHNlY29uZCBhcGFydC5cblx0XHQgKiB2YXIgY2xvY2sgPSBuZXcgVG9uZS5DbG9jayhmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKHRpbWUpO1xuXHRcdCAqIH0sIDEpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5DbG9jayk7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGludm9rZSBhdCB0aGUgc2NoZWR1bGVkIHRpY2suXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBuZXh0IHRpbWUgdGhlIGNhbGxiYWNrIGlzIHNjaGVkdWxlZC5cblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpY2sgY291bnRlclxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5UaWNrU291cmNlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlID0gbmV3IFRvbmUuVGlja1NvdXJjZShvcHRpb25zLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxhc3QgdGltZSB0aGUgbG9vcCBjYWxsYmFjayB3YXMgaW52b2tlZFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xhc3RVcGRhdGUgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByYXRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBzaG91bGQgYmUgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSAge0JQTX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX3RpY2tTb3VyY2UuZnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdmcmVxdWVuY3knKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3RhdGUgdGltZWxpbmVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZVN0YXRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG5ldyBUb25lLlRpbWVsaW5lU3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkKTtcblx0ICAgICAgICAvL2FkZCBhbiBpbml0aWFsIHN0YXRlXG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbG9vcCBmdW5jdGlvbiBib3VuZCB0byBpdHMgY29udGV4dC5cblx0XHRcdCAqICBUaGlzIGlzIG5lY2Vzc2FyeSB0byByZW1vdmUgdGhlIGV2ZW50IGluIHRoZSBlbmQuXG5cdFx0XHQgKiAgQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ib3VuZExvb3AgPSB0aGlzLl9sb29wLmJpbmQodGhpcyk7XG5cdCAgICAgICAgLy9iaW5kIGEgY2FsbGJhY2sgdG8gdGhlIHdvcmtlciB0aHJlYWRcblx0ICAgICAgICB0aGlzLmNvbnRleHQub24oJ3RpY2snLCB0aGlzLl9ib3VuZExvb3ApO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ2xvY2ssIFRvbmUuRW1pdHRlcik7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2suZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdmcmVxdWVuY3knOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiwgXCJzdG9wcGVkXCIgb3IgXCJwYXVzZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DbG9jayNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNsb2NrLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGNsb2NrIGF0IHRoZSBnaXZlbiB0aW1lLiBPcHRpb25hbGx5IHBhc3MgaW4gYW4gb2Zmc2V0XG5cdFx0ICogIG9mIHdoZXJlIHRvIHN0YXJ0IHRoZSB0aWNrIGNvdW50ZXIgZnJvbS5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICB0aW1lICAgIFRoZSB0aW1lIHRoZSBjbG9jayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtICB7VGlja3M9fSAgb2Zmc2V0ICBXaGVyZSB0aGUgdGljayBjb3VudGVyIHN0YXJ0cyBjb3VudGluZyBmcm9tLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5DbG9ja30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLnN0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgICAgIGlmICh0aW1lIDwgdGhpcy5fbGFzdFVwZGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGNsb2NrLiBTdG9wcGluZyB0aGUgY2xvY2sgcmVzZXRzIHRoZSB0aWNrIGNvdW50ZXIgdG8gMC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DbG9ja30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGNsb2NrLnN0b3AoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlLnN0b3AodGltZSk7XG5cdCAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9sYXN0VXBkYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RvcCcsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGF1c2UgdGhlIGNsb2NrLiBQYXVzaW5nIGRvZXMgbm90IHJlc2V0IHRoZSB0aWNrIGNvdW50ZXIuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBjbG9jayBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2xvY2t9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5QYXVzZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLnBhdXNlKHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGltZSA8IHRoaXMuX2xhc3RVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncGF1c2UnLCB0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuIFN0YXJ0cyBjb3VudGluZyBhdCAwXG5cdFx0ICogIGFuZCBpbmNyZW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC5cblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2xvY2sucHJvdG90eXBlLCAndGlja3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5nZXRUaWNrc0F0VGltZSh0aGlzLm5vdygpKSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UudGlja3MgPSB0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHNpbmNlIHRpY2tzPTAgdGhhdCB0aGUgQ2xvY2sgaGFzIGJlZW4gcnVubmluZy4gQWNjb3VudHNcblx0XHQgKiAgZm9yIHRlbXBvIGN1cnZlc1xuXHRcdCAqICBAdHlwZSB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNsb2NrLnByb3RvdHlwZSwgJ3NlY29uZHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLnNlY29uZHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc2Vjb25kcyA9IHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBlbGFwc2VkIHNlY29uZHMgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGdldCB0aGUgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfSAgVGhlIG51bWJlciBvZiBlbGFwc2VkIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLmdldFNlY29uZHNBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLmdldFNlY29uZHNBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgdGljayB2YWx1ZSB0byBzZXRcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIHNldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuQ2xvY2t9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnNldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpY2tzLCB0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5zZXRUaWNrc0F0VGltZSh0aWNrcywgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgIFRoZSB0aWNrIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZ2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgdGltZSBvZiB0aGUgbmV4dCB0aWNrXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIG51bWJlci5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBiZWZvcmUgXG5cdFx0ICogQHJldHVybiB7VG9uZS5DbG9ja30gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUubmV4dFRpY2tUaW1lID0gZnVuY3Rpb24gKG9mZnNldCwgd2hlbikge1xuXHQgICAgICAgIHdoZW4gPSB0aGlzLnRvU2Vjb25kcyh3aGVuKTtcblx0ICAgICAgICB2YXIgY3VycmVudFRpY2sgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHdoZW4pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLmdldFRpbWVPZlRpY2soY3VycmVudFRpY2sgKyBvZmZzZXQsIHdoZW4pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2NoZWR1bGluZyBsb29wLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuX2xvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHRoaXMuX2xhc3RVcGRhdGU7XG5cdCAgICAgICAgdmFyIGVuZFRpbWUgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHRoaXMuX2xhc3RVcGRhdGUgPSBlbmRUaW1lO1xuXHQgICAgICAgIGlmIChzdGFydFRpbWUgIT09IGVuZFRpbWUpIHtcblx0ICAgICAgICAgICAgLy90aGUgc3RhdGUgY2hhbmdlIGV2ZW50c1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdGFydFRpbWUsIGVuZFRpbWUsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgICAgICBzd2l0Y2ggKGUuc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgVG9uZS5TdGF0ZS5TdGFydGVkOlxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl90aWNrU291cmNlLmdldFRpY2tzQXRUaW1lKGUudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIGUudGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgVG9uZS5TdGF0ZS5TdG9wcGVkOlxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChlLnRpbWUgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgZS50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlIFRvbmUuU3RhdGUuUGF1c2VkOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncGF1c2UnLCBlLnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgICAgICAvL3RoZSB0aWNrIGNhbGxiYWNrc1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLmZvckVhY2hUaWNrQmV0d2VlbihzdGFydFRpbWUsIGVuZFRpbWUsIGZ1bmN0aW9uICh0aW1lLCB0aWNrcykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB0aWNrcyk7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBzY2hlZHVsZWQgc3RhdGUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybiAge1N0cmluZ30gIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBpbnB1dCBpbiBzZXRTdGF0ZUF0VGltZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBjbG9jay5zdGFydChcIiswLjFcIik7XG5cdFx0ICogY2xvY2suZ2V0U3RhdGVBdFRpbWUoXCIrMC4xXCIpOyAvL3JldHVybnMgXCJzdGFydGVkXCJcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLmdldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DbG9ja30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQub2ZmKCd0aWNrJywgdGhpcy5fYm91bmRMb29wKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2JvdW5kTG9vcCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSBJbmZpbml0eTtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNsb2NrO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU2ltaWxhciB0byBUb25lLlRpbWVsaW5lLCBidXQgYWxsIGV2ZW50cyByZXByZXNlbnRcblx0XHQgKiAgICAgICAgIGludGVydmFscyB3aXRoIGJvdGggXCJ0aW1lXCIgYW5kIFwiZHVyYXRpb25cIiB0aW1lcy4gVGhlXG5cdFx0ICogICAgICAgICBldmVudHMgYXJlIHBsYWNlZCBpbiBhIHRyZWUgc3RydWN0dXJlIG9wdGltaXplZFxuXHRcdCAqICAgICAgICAgZm9yIHF1ZXJ5aW5nIGFuIGludGVyc2VjdGlvbiBwb2ludCB3aXRoIHRoZSB0aW1lbGluZVxuXHRcdCAqICAgICAgICAgZXZlbnRzLiBJbnRlcm5hbGx5IHVzZXMgYW4gW0ludGVydmFsIFRyZWVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ludGVydmFsX3RyZWUpXG5cdFx0ICogICAgICAgICB0byByZXByZXNlbnQgdGhlIGRhdGEuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcm9vdCBub2RlIG9mIHRoZSBpbnRldmFsIHRyZWVcblx0XHRcdCAqICBAdHlwZSAge0ludGVydmFsTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcm9vdCA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgS2VlcCB0cmFjayBvZiB0aGUgbGVuZ3RoIG9mIHRoZSB0aW1lbGluZS5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkludGVydmFsVGltZWxpbmUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBldmVudCB0byBhZGQgdG8gdGhlIHRpbWVsaW5lLiBBbGwgZXZlbnRzIG11c3Rcblx0XHQgKiAgaGF2ZSBhIHRpbWUgYW5kIGR1cmF0aW9uIHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gYWRkIHRvIHRoZSB0aW1lbGluZVxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKGV2ZW50LnRpbWUpIHx8IFRvbmUuaXNVbmRlZihldmVudC5kdXJhdGlvbikpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkludGVydmFsVGltZWxpbmU6IGV2ZW50cyBtdXN0IGhhdmUgdGltZSBhbmQgZHVyYXRpb24gcGFyYW1ldGVycycpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBldmVudC50aW1lID0gZXZlbnQudGltZS52YWx1ZU9mKCk7XG5cdCAgICAgICAgdmFyIG5vZGUgPSBuZXcgSW50ZXJ2YWxOb2RlKGV2ZW50LnRpbWUsIGV2ZW50LnRpbWUgKyBldmVudC5kdXJhdGlvbiwgZXZlbnQpO1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBub2RlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QuaW5zZXJ0KG5vZGUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9sZW5ndGgrKztcblx0ICAgICAgICAvLyBSZXN0cnVjdHVyZSB0cmVlIHRvIGJlIGJhbGFuY2VkXG5cdCAgICAgICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgbm9kZS51cGRhdGVIZWlnaHQoKTtcblx0ICAgICAgICAgICAgbm9kZS51cGRhdGVNYXgoKTtcblx0ICAgICAgICAgICAgdGhpcy5fcmViYWxhbmNlKG5vZGUpO1xuXHQgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gcmVtb3ZlIGZyb20gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkludGVydmFsVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoKGV2ZW50LnRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBub2RlID0gcmVzdWx0c1tpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChub2RlLmV2ZW50ID09PSBldmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZU5vZGUobm9kZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGVuZ3RoLS07XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5JbnRlcnZhbFRpbWVsaW5lI1xuXHRcdCAqICBAbmFtZSBsZW5ndGhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgZXZlbnRzIHdob3NlIHRpbWUgdGltZSBpcyBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5yZW1vdmUoZXZlbnQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgcm9vdCBub2RlIGFzIHRoZSBnaXZlbiBub2RlXG5cdFx0ICogIEBwYXJhbSB7SW50ZXJ2YWxOb2RlfSBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9zZXRSb290ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB0aGlzLl9yb290ID0gbm9kZTtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnBhcmVudCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXBsYWNlIHRoZSByZWZlcmVuY2VzIHRvIHRoZSBub2RlIGluIHRoZSBub2RlJ3MgcGFyZW50XG5cdFx0ICogIHdpdGggdGhlIHJlcGxhY2VtZW50IG5vZGUuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgcmVwbGFjZW1lbnRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JlcGxhY2VOb2RlSW5QYXJlbnQgPSBmdW5jdGlvbiAobm9kZSwgcmVwbGFjZW1lbnQpIHtcblx0ICAgICAgICBpZiAobm9kZS5wYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKG5vZGUuaXNMZWZ0Q2hpbGQoKSkge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQubGVmdCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQucmlnaHQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9yZWJhbGFuY2Uobm9kZS5wYXJlbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocmVwbGFjZW1lbnQpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIHRoZSBub2RlIGZyb20gdGhlIHRyZWUgYW5kIHJlcGxhY2UgaXQgd2l0aFxuXHRcdCAqICBhIHN1Y2Nlc3NvciB3aGljaCBmb2xsb3dzIHRoZSBzY2hlbWEuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JlbW92ZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmIChub2RlLmxlZnQgPT09IG51bGwgJiYgbm9kZS5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIG51bGwpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobm9kZS5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIG5vZGUubGVmdCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlLmxlZnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmVwbGFjZU5vZGVJblBhcmVudChub2RlLCBub2RlLnJpZ2h0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgYmFsYW5jZSA9IG5vZGUuZ2V0QmFsYW5jZSgpO1xuXHQgICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQsIHRlbXA7XG5cdCAgICAgICAgICAgIGlmIChiYWxhbmNlID4gMCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKG5vZGUubGVmdC5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnJpZ2h0ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5sZWZ0LnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZXBsYWNlbWVudC5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5wYXJlbnQucmlnaHQgPSByZXBsYWNlbWVudC5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudC5wYXJlbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQubGVmdCA9IG5vZGUubGVmdDtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5yaWdodCA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5yaWdodC5sZWZ0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5sZWZ0ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgdGVtcCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLnJpZ2h0LmxlZnQ7XG5cdCAgICAgICAgICAgICAgICB3aGlsZSAocmVwbGFjZW1lbnQubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQubGVmdDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnBhcmVudCA9IHJlcGxhY2VtZW50LnBhcmVudDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnBhcmVudC5sZWZ0ID0gcmVwbGFjZW1lbnQucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQucGFyZW50O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQubGVmdCA9IG5vZGUubGVmdDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnJpZ2h0ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAobm9kZS5wYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChub2RlLmlzTGVmdENoaWxkKCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5sZWZ0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50LnJpZ2h0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zZXRSb290KHJlcGxhY2VtZW50KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIHJlcGxhY2VtZW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcmViYWxhbmNlKHRlbXApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBub2RlLmRpc3Bvc2UoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUm90YXRlIHRoZSB0cmVlIHRvIHRoZSBsZWZ0XG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JvdGF0ZUxlZnQgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcblx0ICAgICAgICB2YXIgaXNMZWZ0Q2hpbGQgPSBub2RlLmlzTGVmdENoaWxkKCk7XG5cdCAgICAgICAgLy8gTWFrZSBub2RlLnJpZ2h0IHRoZSBuZXcgcm9vdCBvZiB0aGlzIHN1YiB0cmVlIChpbnN0ZWFkIG9mIG5vZGUpXG5cdCAgICAgICAgdmFyIHBpdm90Tm9kZSA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgbm9kZS5yaWdodCA9IHBpdm90Tm9kZS5sZWZ0O1xuXHQgICAgICAgIHBpdm90Tm9kZS5sZWZ0ID0gbm9kZTtcblx0ICAgICAgICBpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGlmIChpc0xlZnRDaGlsZCkge1xuXHQgICAgICAgICAgICAgICAgcGFyZW50LmxlZnQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQucmlnaHQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSb290KHBpdm90Tm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSb3RhdGUgdGhlIHRyZWUgdG8gdGhlIHJpZ2h0XG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JvdGF0ZVJpZ2h0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cdCAgICAgICAgdmFyIGlzTGVmdENoaWxkID0gbm9kZS5pc0xlZnRDaGlsZCgpO1xuXHQgICAgICAgIC8vIE1ha2Ugbm9kZS5sZWZ0IHRoZSBuZXcgcm9vdCBvZiB0aGlzIHN1YiB0cmVlIChpbnN0ZWFkIG9mIG5vZGUpXG5cdCAgICAgICAgdmFyIHBpdm90Tm9kZSA9IG5vZGUubGVmdDtcblx0ICAgICAgICBub2RlLmxlZnQgPSBwaXZvdE5vZGUucmlnaHQ7XG5cdCAgICAgICAgcGl2b3ROb2RlLnJpZ2h0ID0gbm9kZTtcblx0ICAgICAgICBpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGlmIChpc0xlZnRDaGlsZCkge1xuXHQgICAgICAgICAgICAgICAgcGFyZW50LmxlZnQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQucmlnaHQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSb290KHBpdm90Tm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBCYWxhbmNlIHRoZSBCU1Rcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcmViYWxhbmNlID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB2YXIgYmFsYW5jZSA9IG5vZGUuZ2V0QmFsYW5jZSgpO1xuXHQgICAgICAgIGlmIChiYWxhbmNlID4gMSkge1xuXHQgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LmdldEJhbGFuY2UoKSA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZUxlZnQobm9kZS5sZWZ0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZVJpZ2h0KG5vZGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChiYWxhbmNlIDwgLTEpIHtcblx0ICAgICAgICAgICAgaWYgKG5vZGUucmlnaHQuZ2V0QmFsYW5jZSgpID4gMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlUmlnaHQobm9kZS5yaWdodCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVMZWZ0KG5vZGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgYW4gZXZlbnQgd2hvc2UgdGltZSBhbmQgZHVyYXRpb24gc3BhbiB0aGUgZ2l2ZSB0aW1lLiBXaWxsXG5cdFx0ICogIHJldHVybiB0aGUgbWF0Y2ggd2hvc2UgXCJ0aW1lXCIgdmFsdWUgaXMgY2xvc2VzdCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCB0byBhZGQgdG8gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBUaGUgZXZlbnQgd2hpY2ggc3BhbnMgdGhlIGRlc2lyZWQgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoKHRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWF4ID0gcmVzdWx0c1swXTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzW2ldLmxvdyA+IG1heC5sb3cpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbWF4ID0gcmVzdWx0c1tpXTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbWF4LmV2ZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIGFsbE5vZGVzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgICAgIGFsbE5vZGVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXYgPSBhbGxOb2Rlc1tpXS5ldmVudDtcblx0ICAgICAgICAgICAgICAgIGlmIChldikge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGluIHdoaWNoIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIG92ZXJsYXBzIHdpdGggdGhlIHRpbWUgYW5kIGR1cmF0aW9uIHRpbWUgb2YgdGhlIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBvdmVybGFwcGluZ1xuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkludGVydmFsVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoKHRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gcmVzdWx0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ID0gcmVzdWx0c1tpXS5ldmVudDtcblx0ICAgICAgICAgICAgICAgIGlmIChldikge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGluIHdoaWNoIHRoZSB0aW1lIGlzIGdyZWF0ZXJcblx0XHQgKiAgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoRnJvbSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoQWZ0ZXIodGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSByZXN1bHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXYgPSByZXN1bHRzW2ldLmV2ZW50O1xuXHQgICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBhbGxOb2RlcyA9IFtdO1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgICAgIGFsbE5vZGVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGFsbE5vZGVzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgYWxsTm9kZXMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Jvb3QgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdElOVEVSVkFMIE5PREUgSEVMUEVSXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXByZXNlbnRzIGEgbm9kZSBpbiB0aGUgYmluYXJ5IHNlYXJjaCB0cmVlLCB3aXRoIHRoZSBhZGRpdGlvblxuXHRcdCAqICBvZiBhIFwiaGlnaFwiIHZhbHVlIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHRoZSBoaWdoZXN0IHZhbHVlIG9mXG5cdFx0ICogIGl0cyBjaGlsZHJlbi5cblx0XHQgKiAgUmVmZXJlbmNlczpcblx0XHQgKiAgaHR0cHM6Ly9icm9va25vdmFrLndvcmRwcmVzcy5jb20vMjAxMy8xMi8wNy9hdWdtZW50ZWQtaW50ZXJ2YWwtdHJlZS1pbi1jL1xuXHRcdCAqICBodHRwOi8vd3d3Lm1pZi52dS5sdC9+dmFsZGFzL0FMR09SSVRNQUkvTElURVJBVFVSQS9Db3JtZW4vQ29ybWVuLnBkZlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gbG93XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBoaWdoXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgSW50ZXJ2YWxOb2RlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgZXZlbnQpIHtcblx0ICAgICAgICAvL3RoZSBldmVudCBjb250YWluZXJcblx0ICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdCAgICAgICAgLy90aGUgbG93IHZhbHVlXG5cdCAgICAgICAgdGhpcy5sb3cgPSBsb3c7XG5cdCAgICAgICAgLy90aGUgaGlnaCB2YWx1ZVxuXHQgICAgICAgIHRoaXMuaGlnaCA9IGhpZ2g7XG5cdCAgICAgICAgLy90aGUgaGlnaCB2YWx1ZSBmb3IgdGhpcyBhbmQgYWxsIGNoaWxkIG5vZGVzXG5cdCAgICAgICAgdGhpcy5tYXggPSB0aGlzLmhpZ2g7XG5cdCAgICAgICAgLy90aGUgbm9kZXMgdG8gdGhlIGxlZnRcblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbnVsbDtcblx0ICAgICAgICAvL3RoZSBub2RlcyB0byB0aGUgcmlnaHRcblx0ICAgICAgICB0aGlzLl9yaWdodCA9IG51bGw7XG5cdCAgICAgICAgLy90aGUgcGFyZW50IG5vZGVcblx0ICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cdCAgICAgICAgLy90aGUgbnVtYmVyIG9mIGNoaWxkIG5vZGVzXG5cdCAgICAgICAgdGhpcy5oZWlnaHQgPSAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnNlcnQgYSBub2RlIGludG8gdGhlIGNvcnJlY3Qgc3BvdCBpbiB0aGUgdHJlZVxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgaWYgKG5vZGUubG93IDw9IHRoaXMubG93KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmxlZnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGVmdCA9IG5vZGU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmxlZnQuaW5zZXJ0KG5vZGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQgPSBub2RlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQuaW5zZXJ0KG5vZGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2VhcmNoIHRoZSB0cmVlIGZvciBub2RlcyB3aGljaCBvdmVybGFwXG5cdFx0ICogIHdpdGggdGhlIGdpdmVuIHBvaW50XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHBvaW50ICBUaGUgcG9pbnQgdG8gcXVlcnlcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICByZXN1bHRzICBUaGUgYXJyYXkgdG8gcHV0IHRoZSByZXN1bHRzXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnNlYXJjaCA9IGZ1bmN0aW9uIChwb2ludCwgcmVzdWx0cykge1xuXHQgICAgICAgIC8vIElmIHAgaXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSByaWdodG1vc3QgcG9pbnQgb2YgYW55IGludGVydmFsXG5cdCAgICAgICAgLy8gaW4gdGhpcyBub2RlIGFuZCBhbGwgY2hpbGRyZW4sIHRoZXJlIHdvbid0IGJlIGFueSBtYXRjaGVzLlxuXHQgICAgICAgIGlmIChwb2ludCA+IHRoaXMubWF4KSB7XG5cdCAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gU2VhcmNoIGxlZnQgY2hpbGRyZW5cblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubGVmdC5zZWFyY2gocG9pbnQsIHJlc3VsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBDaGVjayB0aGlzIG5vZGVcblx0ICAgICAgICBpZiAodGhpcy5sb3cgPD0gcG9pbnQgJiYgdGhpcy5oaWdoID4gcG9pbnQpIHtcblx0ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBJZiBwIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSB0aW1lIG9mIHRoaXMgaW50ZXJ2YWwsXG5cdCAgICAgICAgLy8gdGhlbiBpdCBjYW4ndCBiZSBpbiBhbnkgY2hpbGQgdG8gdGhlIHJpZ2h0LlxuXHQgICAgICAgIGlmICh0aGlzLmxvdyA+IHBvaW50KSB7XG5cdCAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gU2VhcmNoIHJpZ2h0IGNoaWxkcmVuXG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC5zZWFyY2gocG9pbnQsIHJlc3VsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2VhcmNoIHRoZSB0cmVlIGZvciBub2RlcyB3aGljaCBhcmUgbGVzc1xuXHRcdCAqICB0aGFuIHRoZSBnaXZlbiBwb2ludFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBwb2ludCAgVGhlIHBvaW50IHRvIHF1ZXJ5XG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgcmVzdWx0cyAgVGhlIGFycmF5IHRvIHB1dCB0aGUgcmVzdWx0c1xuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5zZWFyY2hBZnRlciA9IGZ1bmN0aW9uIChwb2ludCwgcmVzdWx0cykge1xuXHQgICAgICAgIC8vIENoZWNrIHRoaXMgbm9kZVxuXHQgICAgICAgIGlmICh0aGlzLmxvdyA+PSBwb2ludCkge1xuXHQgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcyk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGVmdC5zZWFyY2hBZnRlcihwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gc2VhcmNoIHRoZSByaWdodCBzaWRlXG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC5zZWFyY2hBZnRlcihwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoaXMgZWxlbWVudCBhbmQgYm90aCBpdCdzIGJyYW5jaGVzXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2tcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUudHJhdmVyc2UgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubGVmdC50cmF2ZXJzZShjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQudHJhdmVyc2UoY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVXBkYXRlIHRoZSBoZWlnaHQgb2YgdGhlIG5vZGVcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUudXBkYXRlSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwgJiYgdGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLmhlaWdodCA9IE1hdGgubWF4KHRoaXMubGVmdC5oZWlnaHQsIHRoaXMucmlnaHQuaGVpZ2h0KSArIDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yaWdodC5oZWlnaHQgKyAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5sZWZ0LmhlaWdodCArIDE7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSAwO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVXBkYXRlIHRoZSBoZWlnaHQgb2YgdGhlIG5vZGVcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUudXBkYXRlTWF4ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMubWF4ID0gdGhpcy5oaWdoO1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5tYXggPSBNYXRoLm1heCh0aGlzLm1heCwgdGhpcy5sZWZ0Lm1heCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubWF4ID0gTWF0aC5tYXgodGhpcy5tYXgsIHRoaXMucmlnaHQubWF4KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBiYWxhbmNlIGlzIGhvdyB0aGUgbGVhZnMgYXJlIGRpc3RyaWJ1dGVkIG9uIHRoZSBub2RlXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBOZWdhdGl2ZSBudW1iZXJzIGFyZSBiYWxhbmNlZCB0byB0aGUgcmlnaHRcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuZ2V0QmFsYW5jZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgYmFsYW5jZSA9IDA7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCAmJiB0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGJhbGFuY2UgPSB0aGlzLmxlZnQuaGVpZ2h0IC0gdGhpcy5yaWdodC5oZWlnaHQ7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgYmFsYW5jZSA9IHRoaXMubGVmdC5oZWlnaHQgKyAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBiYWxhbmNlID0gLSh0aGlzLnJpZ2h0LmhlaWdodCArIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gYmFsYW5jZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhpcyBub2RlIGlzIHRoZSBsZWZ0IGNoaWxkXG5cdFx0ICogIG9mIGl0cyBwYXJlbnRcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuaXNMZWZ0Q2hpbGQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50ICE9PSBudWxsICYmIHRoaXMucGFyZW50LmxlZnQgPT09IHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGdldC9zZXQgdGhlIGxlZnQgbm9kZVxuXHRcdCAqICBAdHlwZSB7SW50ZXJ2YWxOb2RlfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludGVydmFsTm9kZS5wcm90b3R5cGUsICdsZWZ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGVmdDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGVmdCA9IG5vZGU7XG5cdCAgICAgICAgICAgIGlmIChub2RlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVIZWlnaHQoKTtcblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVNYXgoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBnZXQvc2V0IHRoZSByaWdodCBub2RlXG5cdFx0ICogIEB0eXBlIHtJbnRlcnZhbE5vZGV9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxOb2RlLnByb3RvdHlwZSwgJ3JpZ2h0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmlnaHQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JpZ2h0ID0gbm9kZTtcblx0ICAgICAgICAgICAgaWYgKG5vZGUgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gdGhpcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZUhlaWdodCgpO1xuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZU1heCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIG51bGwgb3V0IHJlZmVyZW5jZXMuXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmV2ZW50ID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRFTkQgSU5URVJWQUwgTk9ERSBIRUxQRVJcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgcmV0dXJuIFRvbmUuSW50ZXJ2YWxUaW1lbGluZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRpY2tzIGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIFRpbWUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgVG9uZS5UaWNrcyBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0IHRoZSBgbmV3YCBrZXl3b3JkLiBUb25lLlRpY2tzIGNhbiBiZSBwYXNzZWRcblx0XHQgKiAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBvZiBhbnkgbWV0aG9kIHdoaWNoIHRha2VzIHRpbWUgYXMgYW4gYXJndW1lbnQuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UcmFuc3BvcnRUaW1lfVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHQgPSBUb25lLlRpY2tzKFwiNG5cIik7Ly9hIHF1YXJ0ZXIgbm90ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcyA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRpY2tzKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0VGltZS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaWNrcyh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaWNrcywgVG9uZS5UcmFuc3BvcnRUaW1lKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB1bml0cyBpZiBub25lIGFyZSBnaXZlbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAnaSc7XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGN1cnJlbnQgdGltZSBpbiB0aGUgZ2l2ZW4gdW5pdHNcblx0XHQgKiBAcmV0dXJuIHtUaWNrc31cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX25vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQudGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9nZXRQUFEoKSAqIGJlYXRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl9zZWNvbmRzVG9Vbml0cyA9IGZ1bmN0aW9uIChzZWNvbmRzKSB7XG5cdCAgICAgICAgcmV0dXJuIHNlY29uZHMgLyAoNjAgLyB0aGlzLl9nZXRCcG0oKSkgKiB0aGlzLl9nZXRQUFEoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gdGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS50b1RpY2tzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgLyB0aGlzLl9nZXRQUFEoKSAqICg2MCAvIHRoaXMuX2dldEJwbSgpKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaWNrcztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyYW5zcG9ydEV2ZW50IGlzIGFuIGludGVybmFsIGNsYXNzIHVzZWQgYnkgKFRvbmUuVHJhbnNwb3J0KVtUcmFuc3BvcnRdXG5cdFx0ICogICAgICAgICB0byBzY2hlZHVsZSBldmVudHMuIERvIG5vIGludm9rZSB0aGlzIGNsYXNzIGRpcmVjdGx5LCBpdCBpc1xuXHRcdCAqICAgICAgICAgaGFuZGxlZCBmcm9tIHdpdGhpbiBUb25lLlRyYW5zcG9ydC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50ID0gZnVuY3Rpb24gKFRyYW5zcG9ydCwgb3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5UcmFuc3BvcnRFdmVudC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogUmVmZXJlbmNlIHRvIHRoZSBUcmFuc3BvcnQgdGhhdCBjcmVhdGVkIGl0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5UcmFuc3BvcnR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydCA9IFRyYW5zcG9ydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB1bmlxdWUgaWQgb2YgdGhlIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pZCA9IFRvbmUuVHJhbnNwb3J0RXZlbnQuX2V2ZW50SWQrKztcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB0aW1lIHRoZSBldmVudCBzdGFydHNcblx0XHRcdCAqIEB0eXBlIHtUaWNrc31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudGltZSA9IFRvbmUuVGlja3Mob3B0aW9ucy50aW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogSWYgdGhlIGV2ZW50IHNob3VsZCBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIGNyZWF0ZWQuXG5cdFx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmNlID0gb3B0aW9ucy5vbmNlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0RXZlbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHRzXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmNlJzogZmFsc2UsXG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ3VycmVudCBJRCBjb3VudGVyXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQuX2V2ZW50SWQgPSAwO1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlIHRoZSBldmVudCBjYWxsYmFjay5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBUaGUgQXVkaW9Db250ZXh0IHRpbWUgaW4gc2Vjb25kcyBvZiB0aGUgZXZlbnRcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29uY2UgJiYgdGhpcy5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuaWQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRFdmVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0RXZlbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCBpcyBhbiBpbnRlcm5hbCBjbGFzcyB1c2VkIGJ5IFRvbmUuVHJhbnNwb3J0XG5cdFx0ICogICAgICAgICB0byBzY2hlZHVsZSByZXBlYXQgZXZlbnRzLiBUaGlzIGNsYXNzIHNob3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5LlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UcmFuc3BvcnRFdmVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQgPSBmdW5jdGlvbiAoVHJhbnNwb3J0LCBvcHRpb25zKSB7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5jYWxsKHRoaXMsIFRyYW5zcG9ydCwgb3B0aW9ucyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFdoZW4gdGhlIGV2ZW50IHNob3VsZCBzdG9wIHJlcGVhdGluZ1xuXHRcdFx0ICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZHVyYXRpb24gPSBUb25lLlRpY2tzKG9wdGlvbnMuZHVyYXRpb24pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGludGVydmFsIG9mIHRoZSByZXBlYXRlZCBldmVudFxuXHRcdFx0ICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ludGVydmFsID0gVG9uZS5UaWNrcyhvcHRpb25zLmludGVydmFsKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBJRCBvZiB0aGUgY3VycmVudCB0aW1lbGluZSBldmVudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBJRCBvZiB0aGUgbmV4dCB0aW1lbGluZSBldmVudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9uZXh0SWQgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAgKiBUaGUgdGltZSBvZiB0aGUgbmV4dCBldmVudFxuXHRcdFx0ICAqIEB0eXBlIHtUaWNrc31cblx0XHRcdCAgKiBAcHJpdmF0ZVxuXHRcdFx0ICAqL1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrID0gdGhpcy50aW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogYSByZWZlcmVuY2UgdG8gdGhlIGJvdW5kIHN0YXJ0IG1ldGhvZFxuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JvdW5kUmVzdGFydCA9IHRoaXMuX3Jlc3RhcnQuYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5vbignc3RhcnQgbG9vcFN0YXJ0JywgdGhpcy5fYm91bmRSZXN0YXJ0KTtcblx0ICAgICAgICB0aGlzLl9yZXN0YXJ0KCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCwgVG9uZS5UcmFuc3BvcnRFdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2R1cmF0aW9uJzogSW5maW5pdHksXG5cdCAgICAgICAgJ2ludGVydmFsJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZSB0aGUgY2FsbGJhY2suIFJldHVybnMgdGhlIHRpY2sgdGltZSB3aGljaFxuXHRcdCAqIHRoZSBuZXh0IGV2ZW50IHNob3VsZCBiZSBzY2hlZHVsZWQgYXQuXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lICBUaGUgQXVkaW9Db250ZXh0IHRpbWUgaW4gc2Vjb25kcyBvZiB0aGUgZXZlbnRcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9jcmVhdGUgbW9yZSBldmVudHMgaWYgbmVjZXNzYXJ5XG5cdCAgICAgICAgdGhpcy5fY3JlYXRlRXZlbnRzKHRpbWUpO1xuXHQgICAgICAgIC8vY2FsbCB0aGUgc3VwZXIgY2xhc3Ncblx0ICAgICAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5pbnZva2UuY2FsbCh0aGlzLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBQdXNoIG1vcmUgZXZlbnRzIG9udG8gdGhlIHRpbWVsaW5lIHRvIGtlZXAgdXAgd2l0aCB0aGUgcG9zaXRpb24gb2YgdGhlIHRpbWVsaW5lXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLl9jcmVhdGVFdmVudHMgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vIHNjaGVkdWxlIHRoZSBuZXh0IGV2ZW50XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5UcmFuc3BvcnQuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKHRpY2tzID49IHRoaXMudGltZSAmJiB0aWNrcyA+PSB0aGlzLl9uZXh0VGljayAmJiB0aGlzLl9uZXh0VGljayArIHRoaXMuX2ludGVydmFsIDwgdGhpcy50aW1lICsgdGhpcy5kdXJhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9uZXh0VGljayArPSB0aGlzLl9pbnRlcnZhbDtcblx0ICAgICAgICAgICAgdGhpcy5fY3VycmVudElkID0gdGhpcy5fbmV4dElkO1xuXHQgICAgICAgICAgICB0aGlzLl9uZXh0SWQgPSB0aGlzLlRyYW5zcG9ydC5zY2hlZHVsZU9uY2UodGhpcy5pbnZva2UuYmluZCh0aGlzKSwgVG9uZS5UaWNrcyh0aGlzLl9uZXh0VGljaykpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBQdXNoIG1vcmUgZXZlbnRzIG9udG8gdGhlIHRpbWVsaW5lIHRvIGtlZXAgdXAgd2l0aCB0aGUgcG9zaXRpb24gb2YgdGhlIHRpbWVsaW5lXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLl9yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9jdXJyZW50SWQpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX25leHRJZCk7XG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSB0aGlzLnRpbWU7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5UcmFuc3BvcnQuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKHRpY2tzID4gdGhpcy50aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX25leHRUaWNrID0gdGhpcy50aW1lICsgTWF0aC5jZWlsKCh0aWNrcyAtIHRoaXMudGltZSkgLyB0aGlzLl9pbnRlcnZhbCkgKiB0aGlzLl9pbnRlcnZhbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY3VycmVudElkID0gdGhpcy5UcmFuc3BvcnQuc2NoZWR1bGVPbmNlKHRoaXMuaW52b2tlLmJpbmQodGhpcyksIFRvbmUuVGlja3ModGhpcy5fbmV4dFRpY2spKTtcblx0ICAgICAgICB0aGlzLl9uZXh0VGljayArPSB0aGlzLl9pbnRlcnZhbDtcblx0ICAgICAgICB0aGlzLl9uZXh0SWQgPSB0aGlzLlRyYW5zcG9ydC5zY2hlZHVsZU9uY2UodGhpcy5pbnZva2UuYmluZCh0aGlzKSwgVG9uZS5UaWNrcyh0aGlzLl9uZXh0VGljaykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9jdXJyZW50SWQpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX25leHRJZCk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQub2ZmKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9ib3VuZFJlc3RhcnQpO1xuXHQgICAgICAgIHRoaXMuX2JvdW5kQ3JlYXRlRXZlbnRzID0gbnVsbDtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5kdXJhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRyYW5zcG9ydCBmb3IgdGltaW5nIG11c2ljYWwgZXZlbnRzLlxuXHRcdCAqICAgICAgICAgIFN1cHBvcnRzIHRlbXBvIGN1cnZlcyBhbmQgdGltZSBjaGFuZ2VzLiBVbmxpa2UgYnJvd3Nlci1iYXNlZCB0aW1pbmcgKHNldEludGVydmFsLCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUpXG5cdFx0ICogICAgICAgICAgVG9uZS5UcmFuc3BvcnQgdGltaW5nIGV2ZW50cyBwYXNzIGluIHRoZSBleGFjdCB0aW1lIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnRcblx0XHQgKiAgICAgICAgICBpbiB0aGUgYXJndW1lbnQgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBQYXNzIHRoYXQgdGltZSB2YWx1ZSB0byB0aGUgb2JqZWN0XG5cdFx0ICogICAgICAgICAgeW91J3JlIHNjaGVkdWxpbmcuIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgQSBzaW5nbGUgdHJhbnNwb3J0IGlzIGNyZWF0ZWQgZm9yIHlvdSB3aGVuIHRoZSBsaWJyYXJ5IGlzIGluaXRpYWxpemVkLlxuXHRcdCAqICAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgVGhlIHRyYW5zcG9ydCBlbWl0cyB0aGUgZXZlbnRzOiBcInN0YXJ0XCIsIFwic3RvcFwiLCBcInBhdXNlXCIsIGFuZCBcImxvb3BcIiB3aGljaCBhcmVcblx0XHQgKiAgICAgICAgICBjYWxsZWQgd2l0aCB0aGUgdGltZSBvZiB0aGF0IGV2ZW50IGFzIHRoZSBhcmd1bWVudC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9yZXBlYXRlZCBldmVudCBldmVyeSA4dGggbm90ZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly9kbyBzb21ldGhpbmcgd2l0aCB0aGUgdGltZVxuXHRcdCAqIH0sIFwiOG5cIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zY2hlZHVsZSBhbiBldmVudCBvbiB0aGUgMTZ0aCBtZWFzdXJlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSB0aW1lXG5cdFx0ICogfSwgXCIxNjowOjBcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0TE9PUElOR1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdElmIHRoZSB0cmFuc3BvcnQgbG9vcHMgb3Igbm90LlxuXHRcdFx0XHQgKiAgQHR5cGUge2Jvb2xlYW59XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLmxvb3AgPSBmYWxzZTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0VGhlIGxvb3Agc3RhcnQgcG9zaXRpb24gaW4gdGlja3Ncblx0XHRcdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSAwO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogXHRUaGUgbG9vcCBlbmQgcG9zaXRpb24gaW4gdGlja3Ncblx0XHRcdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gMDtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdENMT0NLL1RFTVBPXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBQdWxzZXMgcGVyIHF1YXJ0ZXIgaXMgdGhlIG51bWJlciBvZiB0aWNrcyBwZXIgcXVhcnRlciBub3RlLlxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fcHBxID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMuUFBRO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIHdhdGNoZXMgdGhlIG1haW4gb3NjaWxsYXRvciBmb3IgdGltaW5nIHRpY2tzXG5cdFx0XHRcdCAqICBpbml0aWFsbHkgc3RhcnRzIGF0IDEyMGJwbVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICogIEB0eXBlIHtUb25lLkNsb2NrfVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fY2xvY2sgPSBuZXcgVG9uZS5DbG9jayh7XG5cdCAgICAgICAgICAgICAgICAnY2FsbGJhY2snOiB0aGlzLl9wcm9jZXNzVGljay5iaW5kKHRoaXMpLFxuXHQgICAgICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IDBcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2JpbmRDbG9ja0V2ZW50cygpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSBCZWF0cyBQZXIgTWludXRlIG9mIHRoZSBUcmFuc3BvcnQuXG5cdFx0XHRcdCAqICBAdHlwZSB7QlBNfVxuXHRcdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gODA7XG5cdFx0XHRcdCAqIC8vcmFtcCB0aGUgYnBtIHRvIDEyMCBvdmVyIDEwIHNlY29uZHNcblx0XHRcdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnJhbXBUbygxMjAsIDEwKTtcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuYnBtID0gdGhpcy5fY2xvY2suZnJlcXVlbmN5O1xuXHQgICAgICAgICAgICB0aGlzLmJwbS5fdG9Vbml0cyA9IHRoaXMuX3RvVW5pdHMuYmluZCh0aGlzKTtcblx0ICAgICAgICAgICAgdGhpcy5icG0uX2Zyb21Vbml0cyA9IHRoaXMuX2Zyb21Vbml0cy5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLmJwbS51bml0cyA9IFRvbmUuVHlwZS5CUE07XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLnZhbHVlID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMuYnBtO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWFkT25seSgnYnBtJyk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHRpbWUgc2lnbmF0dXJlLCBvciBtb3JlIGFjY3VyYXRlbHkgdGhlIG51bWVyYXRvclxuXHRcdFx0XHQgKiAgb2YgdGhlIHRpbWUgc2lnbmF0dXJlIG92ZXIgYSBkZW5vbWluYXRvciBvZiA0LlxuXHRcdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lU2lnbmF0dXJlID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMudGltZVNpZ25hdHVyZTtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdFRJTUVMSU5FIEVWRU5UU1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgQWxsIHRoZSBldmVudHMgaW4gYW4gb2JqZWN0IHRvIGtlZXAgdHJhY2sgYnkgSURcblx0XHRcdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzID0ge307XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdFRoZSBzY2hlZHVsZWQgZXZlbnRzLlxuXHRcdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmV9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFJlcGVhdGVkIGV2ZW50c1xuXHRcdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzID0gbmV3IFRvbmUuSW50ZXJ2YWxUaW1lbGluZSgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIEFsbCBvZiB0aGUgc3luY2VkIFNpZ25hbHNcblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zeW5jZWRTaWduYWxzID0gW107XG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8vXHRTV0lOR1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHN1YmRpdmlzaW9uIG9mIHRoZSBzd2luZ1xuXHRcdFx0XHQgKiAgQHR5cGUgIHtUaWNrc31cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ1RpY2tzID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMuUFBRIC8gMjtcblx0ICAgICAgICAgICAgLy84blxuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSBzd2luZyBhbW91bnRcblx0XHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ0Ftb3VudCA9IDA7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydCwgVG9uZS5FbWl0dGVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdicG0nOiAxMjAsXG5cdCAgICAgICAgJ3N3aW5nJzogMCxcblx0ICAgICAgICAnc3dpbmdTdWJkaXZpc2lvbic6ICc4bicsXG5cdCAgICAgICAgJ3RpbWVTaWduYXR1cmUnOiA0LFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogJzRtJyxcblx0ICAgICAgICAnUFBRJzogMTkyXG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRJQ0tTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgY2FsbGVkIG9uIGV2ZXJ5IHRpY2tcblx0XHQgKiAgQHBhcmFtICAge251bWJlcn0gdGlja1RpbWUgY2xvY2sgcmVsYXRpdmUgdGljayB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX3Byb2Nlc3NUaWNrID0gZnVuY3Rpb24gKHRpY2tUaW1lLCB0aWNrcykge1xuXHQgICAgICAgIC8vaGFuZGxlIHN3aW5nXG5cdCAgICAgICAgaWYgKHRoaXMuX3N3aW5nQW1vdW50ID4gMCAmJiB0aWNrcyAlIHRoaXMuX3BwcSAhPT0gMCAmJiAvL25vdCBvbiBhIGRvd25iZWF0XG5cdCAgICAgICAgICAgIHRpY2tzICUgKHRoaXMuX3N3aW5nVGlja3MgKiAyKSAhPT0gMCkge1xuXHQgICAgICAgICAgICAvL2FkZCBzb21lIHN3aW5nXG5cdCAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9IHRpY2tzICUgKHRoaXMuX3N3aW5nVGlja3MgKiAyKSAvICh0aGlzLl9zd2luZ1RpY2tzICogMik7XG5cdCAgICAgICAgICAgIHZhciBhbW91bnQgPSBNYXRoLnNpbihwcm9ncmVzcyAqIE1hdGguUEkpICogdGhpcy5fc3dpbmdBbW91bnQ7XG5cdCAgICAgICAgICAgIHRpY2tUaW1lICs9IFRvbmUuVGlja3ModGhpcy5fc3dpbmdUaWNrcyAqIDIgLyAzKS50b1NlY29uZHMoKSAqIGFtb3VudDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9kbyB0aGUgbG9vcCB0ZXN0XG5cdCAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICBpZiAodGlja3MgPj0gdGhpcy5fbG9vcEVuZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb29wRW5kJywgdGlja1RpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY2xvY2suc2V0VGlja3NBdFRpbWUodGhpcy5fbG9vcFN0YXJ0LCB0aWNrVGltZSk7XG5cdCAgICAgICAgICAgICAgICB0aWNrcyA9IHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9vcFN0YXJ0JywgdGlja1RpbWUsIHRoaXMuX2Nsb2NrLmdldFNlY29uZHNBdFRpbWUodGlja1RpbWUpKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9vcCcsIHRpY2tUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2ludm9rZSB0aGUgdGltZWxpbmUgZXZlbnRzIHNjaGVkdWxlZCBvbiB0aGlzIHRpY2tcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5mb3JFYWNoQXRUaW1lKHRpY2tzLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuaW52b2tlKHRpY2tUaW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U0NIRURVTEFCTEUgRVZFTlRTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYW4gZXZlbnQgYWxvbmcgdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBhdCB0aGUgdGltZS5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSAgdGltZSBUaGUgdGltZSB0byBpbnZva2UgdGhlIGNhbGxiYWNrIGF0LlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9IFRoZSBpZCBvZiB0aGUgZXZlbnQgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGNhbmNlbGluZyB0aGUgZXZlbnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIHRoZSBjYWxsYmFjayB3aGVuIHRoZSBUcmFuc3BvcnQgcmVhY2hlcyB0aGUgZGVzaXJlZCB0aW1lXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHRlbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUpO1xuXHRcdCAqIH0sIFwiMTI4aVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdGltZSkge1xuXHQgICAgICAgIHZhciBldmVudCA9IG5ldyBUb25lLlRyYW5zcG9ydEV2ZW50KHRoaXMsIHtcblx0ICAgICAgICAgICAgJ3RpbWUnOiBUb25lLlRyYW5zcG9ydFRpbWUodGltZSksXG5cdCAgICAgICAgICAgICdjYWxsYmFjayc6IGNhbGxiYWNrXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEV2ZW50KGV2ZW50LCB0aGlzLl90aW1lbGluZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGEgcmVwZWF0ZWQgZXZlbnQgYWxvbmcgdGhlIHRpbWVsaW5lLiBUaGUgZXZlbnQgd2lsbCBmaXJlXG5cdFx0ICogIGF0IHRoZSBgaW50ZXJ2YWxgIHN0YXJ0aW5nIGF0IHRoZSBgc3RhcnRUaW1lYCBhbmQgZm9yIHRoZSBzcGVjaWZpZWRcblx0XHQgKiAgYGR1cmF0aW9uYC5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayB0byBpbnZva2UuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICAgIGludGVydmFsICAgVGhlIGR1cmF0aW9uIGJldHdlZW4gc3VjY2Vzc2l2ZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy4gTXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZT19ICAgIHN0YXJ0VGltZSAgV2hlbiBhbG9uZyB0aGUgdGltZWxpbmUgdGhlIGV2ZW50cyBzaG91bGRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCBiZWluZyBpbnZva2VkLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkdXJhdGlvbj1JbmZpbml0eV0gSG93IGxvbmcgdGhlIGV2ZW50IHNob3VsZCByZXBlYXQuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICAgIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50LiBVc2UgdGhpcyB0byBjYW5jZWxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBldmVudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2EgY2FsbGJhY2sgaW52b2tlZCBldmVyeSBlaWdodGggbm90ZSBhZnRlciB0aGUgZmlyc3QgbWVhc3VyZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KGNhbGxiYWNrLCBcIjhuXCIsIFwiMW1cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2NoZWR1bGVSZXBlYXQgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGludGVydmFsLCBzdGFydFRpbWUsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQodGhpcywge1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiBjYWxsYmFjayxcblx0ICAgICAgICAgICAgJ2ludGVydmFsJzogVG9uZS5UaW1lKGludGVydmFsKSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKSxcblx0ICAgICAgICAgICAgJ2R1cmF0aW9uJzogVG9uZS5UaW1lKFRvbmUuZGVmYXVsdEFyZyhkdXJhdGlvbiwgSW5maW5pdHkpKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8va2ljayBpdCBvZmYgaWYgdGhlIFRyYW5zcG9ydCBpcyBzdGFydGVkXG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEV2ZW50KGV2ZW50LCB0aGlzLl9yZXBlYXRlZEV2ZW50cyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGFuIGV2ZW50IHRoYXQgd2lsbCBiZSByZW1vdmVkIGFmdGVyIGl0IGlzIGludm9rZWQuXG5cdFx0ICogIE5vdGUgdGhhdCBpZiB0aGUgZ2l2ZW4gdGltZSBpcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgdHJhbnNwb3J0IHRpbWUsXG5cdFx0ICogIHRoZSBldmVudCB3aWxsIGJlIGludm9rZWQgaW1tZWRpYXRlbHkuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugb25jZS5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSB0aW1lIFRoZSB0aW1lIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZC5cblx0XHQgKiAgQHJldHVybnMge051bWJlcn0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQuXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2NoZWR1bGVPbmNlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aW1lKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFRvbmUuVHJhbnNwb3J0RXZlbnQodGhpcywge1xuXHQgICAgICAgICAgICAndGltZSc6IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKSxcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogY2FsbGJhY2ssXG5cdCAgICAgICAgICAgICdvbmNlJzogdHJ1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hZGRFdmVudChldmVudCwgdGhpcy5fdGltZWxpbmUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhciB0aGUgcGFzc2VkIGluIGV2ZW50IGlkIGZyb20gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBldmVudElkIFRoZSBpZCBvZiB0aGUgZXZlbnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGV2ZW50SWQpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc2NoZWR1bGVkRXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50SWQpKSB7XG5cdCAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5fc2NoZWR1bGVkRXZlbnRzW2V2ZW50SWQudG9TdHJpbmcoKV07XG5cdCAgICAgICAgICAgIGl0ZW0udGltZWxpbmUucmVtb3ZlKGl0ZW0uZXZlbnQpO1xuXHQgICAgICAgICAgICBpdGVtLmV2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NjaGVkdWxlZEV2ZW50c1tldmVudElkLnRvU3RyaW5nKCldO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBBZGQgYW4gZXZlbnQgdG8gdGhlIGNvcnJlY3QgdGltZWxpbmUuIEtlZXAgdHJhY2sgb2YgdGhlXG5cdFx0ICogdGltZWxpbmUgaXQgd2FzIGFkZGVkIHRvLlxuXHRcdCAqIEBwYXJhbSB7VG9uZS5UcmFuc3BvcnRFdmVudH1cdGV2ZW50XG5cdFx0ICogQHBhcmFtIHtUb25lLlRpbWVsaW5lfSB0aW1lbGluZVxuXHRcdCAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBldmVudCBpZCB3aGljaCB3YXMganVzdCBhZGRlZFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX2FkZEV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50LCB0aW1lbGluZSkge1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50c1tldmVudC5pZC50b1N0cmluZygpXSA9IHtcblx0ICAgICAgICAgICAgJ2V2ZW50JzogZXZlbnQsXG5cdCAgICAgICAgICAgICd0aW1lbGluZSc6IHRpbWVsaW5lXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aW1lbGluZS5hZGQoZXZlbnQpO1xuXHQgICAgICAgIHJldHVybiBldmVudC5pZDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIHNjaGVkdWxlZCBldmVudHMgZnJvbSB0aGUgdGltZWxpbmUgYWZ0ZXJcblx0XHQgKiAgdGhlIGdpdmVuIHRpbWUuIFJlcGVhdGVkIGV2ZW50cyB3aWxsIGJlIHJlbW92ZWRcblx0XHQgKiAgaWYgdGhlaXIgc3RhcnRUaW1lIGlzIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gW2FmdGVyPTBdIENsZWFyIGFsbCBldmVudHMgYWZ0ZXJcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB0aW1lLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICBhZnRlciA9IFRvbmUuZGVmYXVsdEFyZyhhZnRlciwgMCk7XG5cdCAgICAgICAgYWZ0ZXIgPSB0aGlzLnRvVGlja3MoYWZ0ZXIpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLl9yZXBlYXRlZEV2ZW50cy5mb3JFYWNoRnJvbShhZnRlciwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2xlYXIoZXZlbnQuaWQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFNUQVJUL1NUT1AvUEFVU0Vcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBCaW5kIHN0YXJ0L3N0b3AvcGF1c2UgZXZlbnRzIGZyb20gdGhlIGNsb2NrIGFuZCBlbWl0IHRoZW0uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX2JpbmRDbG9ja0V2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbignc3RhcnQnLCBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuVGlja3Mob2Zmc2V0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbignc3RvcCcsIGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RvcCcsIHRpbWUpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sub24oJ3BhdXNlJywgZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdwYXVzZScsIHRpbWUpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiwgXCJzdG9wcGVkXCIsIG9yIFwicGF1c2VkXCJcblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay5nZXRTdGF0ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgdHJhbnNwb3J0IGFuZCBhbGwgc291cmNlcyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSB0cmFuc3BvcnQgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lPX0gb2Zmc2V0IFRoZSB0aW1lbGluZSBvZmZzZXQgdG8gc3RhcnQgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IGluIG9uZSBzZWNvbmQgc3RhcnRpbmcgYXQgYmVnaW5uaW5nIG9mIHRoZSA1dGggbWVhc3VyZS5cblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydChcIisxXCIsIFwiNDowOjBcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgY2xvY2tcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQob2Zmc2V0KSkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnRvVGlja3Mob2Zmc2V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY2xvY2suc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgdHJhbnNwb3J0IGFuZCBhbGwgc291cmNlcyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSB0cmFuc3BvcnQgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0b3AoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXVzZSB0aGUgdHJhbnNwb3J0IGFuZCBhbGwgc291cmNlcyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sucGF1c2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVG9nZ2xlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0cmFuc3BvcnQuIElmIGl0IGlzXG5cdFx0ICogc3RhcnRlZCwgaXQgd2lsbCBzdG9wIGl0LCBvdGhlcndpc2UgaXQgd2lsbCBzdGFydCB0aGUgVHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0fSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fY2xvY2suZ2V0U3RhdGVBdFRpbWUodGltZSkgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFNFVFRFUlMvR0VUVEVSU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHNpZ25hdHVyZSBhcyBqdXN0IHRoZSBudW1lcmF0b3Igb3ZlciA0LlxuXHRcdCAqICBGb3IgZXhhbXBsZSA0LzQgd291bGQgYmUganVzdCA0IGFuZCA2Lzggd291bGQgYmUgMy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfEFycmF5fVxuXHRcdCAqICBAbmFtZSB0aW1lU2lnbmF0dXJlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jb21tb24gdGltZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmUgPSA0O1xuXHRcdCAqIC8vIDcvOFxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmUgPSBbNywgOF07XG5cdFx0ICogLy90aGlzIHdpbGwgYmUgcmVkdWNlZCB0byBhIHNpbmdsZSBudW1iZXJcblx0XHQgKiBUb25lLlRyYW5zcG9ydC50aW1lU2lnbmF0dXJlOyAvL3JldHVybnMgMy41XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAndGltZVNpZ25hdHVyZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVTaWduYXR1cmU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lU2lnKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGltZVNpZykpIHtcblx0ICAgICAgICAgICAgICAgIHRpbWVTaWcgPSB0aW1lU2lnWzBdIC8gdGltZVNpZ1sxXSAqIDQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdGltZVNpZ25hdHVyZSA9IHRpbWVTaWc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBXaGVuIHRoZSBUb25lLlRyYW5zcG9ydC5sb29wID0gdHJ1ZSwgdGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGxvb3AuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcFN0YXJ0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHN0YXJ0UG9zaXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKHN0YXJ0UG9zaXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogV2hlbiB0aGUgVG9uZS5UcmFuc3BvcnQubG9vcCA9IHRydWUsIHRoaXMgaXMgdGhlIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgbG9vcC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BFbmQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZW5kUG9zaXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhlbmRQb3NpdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBsb29wIHN0YXJ0IGFuZCBzdG9wIGF0IHRoZSBzYW1lIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gc3RhcnRQb3NpdGlvblxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IGVuZFBvc2l0aW9uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9vcCBvdmVyIHRoZSBmaXJzdCBtZWFzdXJlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2V0TG9vcFBvaW50cygwLCBcIjFtXCIpO1xuXHRcdCAqIFRvbmUuVHJhbnNwb3J0Lmxvb3AgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnNldExvb3BQb2ludHMgPSBmdW5jdGlvbiAoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHtcblx0ICAgICAgICB0aGlzLmxvb3BTdGFydCA9IHN0YXJ0UG9zaXRpb247XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gZW5kUG9zaXRpb247XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzd2luZyB2YWx1ZS4gQmV0d2VlbiAwLTEgd2hlcmUgMSBlcXVhbCB0b1xuXHRcdCAqICB0aGUgbm90ZSArIGhhbGYgdGhlIHN1YmRpdmlzaW9uLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgc3dpbmdcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzd2luZycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N3aW5nQW1vdW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYW1vdW50KSB7XG5cdCAgICAgICAgICAgIC8vc2NhbGUgdGhlIHZhbHVlcyB0byBhIG5vcm1hbCByYW5nZVxuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ0Ftb3VudCA9IGFtb3VudDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIHN1YmRpdmlzaW9uIHdoaWNoIHRoZSBzd2luZyB3aWxsIGJlIGFwcGxpZWQgdG8uXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGFuIDh0aCBub3RlLiBWYWx1ZSBtdXN0IGJlIGxlc3Ncblx0XHQgKiAgdGhhbiBhIHF1YXJ0ZXIgbm90ZS5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBzd2luZ1N1YmRpdmlzaW9uXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc3dpbmdTdWJkaXZpc2lvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fc3dpbmdUaWNrcykudG9Ob3RhdGlvbigpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ViZGl2aXNpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3dpbmdUaWNrcyA9IHRoaXMudG9UaWNrcyhzdWJkaXZpc2lvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIFRyYW5zcG9ydCdzIHBvc2l0aW9uIGluIEJhcnM6QmVhdHM6U2l4dGVlbnRocy5cblx0XHQgKiAgU2V0dGluZyB0aGUgdmFsdWUgd2lsbCBqdW1wIHRvIHRoYXQgcG9zaXRpb24gcmlnaHQgYXdheS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7QmFyc0JlYXRzU2l4dGVlbnRoc31cblx0XHQgKiAgQG5hbWUgcG9zaXRpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdwb3NpdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuX2Nsb2NrLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRpY2tzKS50b0JhcnNCZWF0c1NpeHRlZW50aHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2dyZXNzKSB7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMudG9UaWNrcyhwcm9ncmVzcyk7XG5cdCAgICAgICAgICAgIHRoaXMudGlja3MgPSB0aWNrcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgVHJhbnNwb3J0J3MgcG9zaXRpb24gaW4gc2Vjb25kc1xuXHRcdCAqICBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIGp1bXAgdG8gdGhhdCBwb3NpdGlvbiByaWdodCBhd2F5LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtTZWNvbmRzfVxuXHRcdCAqICBAbmFtZSBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc2Vjb25kcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLnNlY29uZHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLmJwbS50aW1lVG9UaWNrcyhzLCBub3cpO1xuXHQgICAgICAgICAgICB0aGlzLnRpY2tzID0gdGlja3M7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIFRyYW5zcG9ydCdzIGxvb3AgcG9zaXRpb24gYXMgYSBub3JtYWxpemVkIHZhbHVlLiBBbHdheXNcblx0XHQgKiAgcmV0dXJucyAwIGlmIHRoZSB0cmFuc3BvcnQgaWYgbG9vcCBpcyBub3QgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAbmFtZSBwcm9ncmVzc1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAncHJvZ3Jlc3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5fY2xvY2suZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAodGlja3MgLSB0aGlzLl9sb29wU3RhcnQpIC8gKHRoaXMuX2xvb3BFbmQgLSB0aGlzLl9sb29wU3RhcnQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdHJhbnNwb3J0cyBjdXJyZW50IHRpY2sgcG9zaXRpb24uXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICogIEBuYW1lIHRpY2tzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAndGlja3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay50aWNrcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2Nsb2NrLnRpY2tzICE9PSB0KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgICAgIC8vc3RvcCBldmVyeXRoaW5nIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgbm93KTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9jay5zZXRUaWNrc0F0VGltZSh0LCBub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vcmVzdGFydCBpdCB3aXRoIHRoZSBuZXcgdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RhcnQnLCBub3csIHRoaXMuc2Vjb25kcyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb2NrLnNldFRpY2tzQXRUaW1lKHQsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgY2xvY2sncyB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIGdldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgICBUaGUgdGljayB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5fY2xvY2suZ2V0VGlja3NBdFRpbWUodGltZSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGVsYXBzZWQgc2Vjb25kcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSBlbGFwc2VkIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9ICBUaGUgbnVtYmVyIG9mIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmdldFNlY29uZHNBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay5nZXRTZWNvbmRzQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQdWxzZXMgUGVyIFF1YXJ0ZXIgbm90ZS4gVGhpcyBpcyB0aGUgc21hbGxlc3QgcmVzb2x1dGlvblxuXHRcdCAqICB0aGUgVHJhbnNwb3J0IHRpbWluZyBzdXBwb3J0cy4gVGhpcyBzaG91bGQgYmUgc2V0IG9uY2Vcblx0XHQgKiAgb24gaW5pdGlhbGl6YXRpb24gYW5kIG5vdCBzZXQgYWdhaW4uIENoYW5naW5nIHRoaXMgdmFsdWVcblx0XHQgKiAgYWZ0ZXIgb3RoZXIgb2JqZWN0cyBoYXZlIGJlZW4gY3JlYXRlZCBjYW4gY2F1c2UgcHJvYmxlbXMuXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBQUFFcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdQUFEnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcHE7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcHEpIHtcblx0ICAgICAgICAgICAgdmFyIGJwbSA9IHRoaXMuYnBtLnZhbHVlO1xuXHQgICAgICAgICAgICB0aGlzLl9wcHEgPSBwcHE7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLnZhbHVlID0gYnBtO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZnJvbSBCUE0gdG8gZnJlcXVlbmN5IChmYWN0b3JpbmcgaW4gUFBRKVxuXHRcdCAqICBAcGFyYW0gIHtCUE19ICBicG0gVGhlIEJQTSB2YWx1ZSB0byBjb252ZXJ0IHRvIGZyZXF1ZW5jeVxuXHRcdCAqICBAcmV0dXJuICB7RnJlcXVlbmN5fSAgVGhlIEJQTSBhcyBhIGZyZXF1ZW5jeSB3aXRoIFBQUSBmYWN0b3JlZCBpbi5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fZnJvbVVuaXRzID0gZnVuY3Rpb24gKGJwbSkge1xuXHQgICAgICAgIHJldHVybiAxIC8gKDYwIC8gYnBtIC8gdGhpcy5QUFEpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGZyb20gZnJlcXVlbmN5ICh3aXRoIFBQUSkgaW50byBCUE1cblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSAgZnJlcSBUaGUgY2xvY2tzIGZyZXF1ZW5jeSB0byBjb252ZXJ0IHRvIEJQTVxuXHRcdCAqICBAcmV0dXJuICB7QlBNfSAgVGhlIGZyZXF1ZW5jeSB2YWx1ZSBhcyBCUE0uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX3RvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiBmcmVxIC8gdGhpcy5QUFEgKiA2MDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U1lOQ0lOR1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHRpbWUgYWxpZ25lZCB0byB0aGUgbmV4dCBzdWJkaXZpc2lvblxuXHRcdCAqICBvZiB0aGUgVHJhbnNwb3J0LiBJZiB0aGUgVHJhbnNwb3J0IGlzIG5vdCBzdGFydGVkLFxuXHRcdCAqICBpdCB3aWxsIHJldHVybiAwLlxuXHRcdCAqICBOb3RlOiB0aGlzIHdpbGwgbm90IHdvcmsgcHJlY2lzZWx5IGR1cmluZyB0ZW1wbyByYW1wcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHN1YmRpdmlzaW9uICBUaGUgc3ViZGl2aXNpb24gdG8gcXVhbnRpemUgdG9cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIFRoZSBjb250ZXh0IHRpbWUgb2YgdGhlIG5leHQgc3ViZGl2aXNpb24uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoKTsgLy90aGUgdHJhbnNwb3J0IG11c3QgYmUgc3RhcnRlZFxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0Lm5leHRTdWJkaXZpc2lvbihcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLm5leHRTdWJkaXZpc2lvbiA9IGZ1bmN0aW9uIChzdWJkaXZpc2lvbikge1xuXHQgICAgICAgIHN1YmRpdmlzaW9uID0gdGhpcy50b1RpY2tzKHN1YmRpdmlzaW9uKTtcblx0ICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIC8vaWYgdGhlIHRyYW5zcG9ydCdzIG5vdCBzdGFydGVkLCByZXR1cm4gMFxuXHQgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgLy90aGUgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50IHRpY2tzIGFuZCB0aGUgc3ViZGl2aXNpb25cblx0ICAgICAgICAgICAgdmFyIHRyYW5zcG9ydFBvcyA9IHRoaXMuZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgdmFyIHJlbWFpbmluZ1RpY2tzID0gc3ViZGl2aXNpb24gLSB0cmFuc3BvcnRQb3MgJSBzdWJkaXZpc2lvbjtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLm5leHRUaWNrVGltZShyZW1haW5pbmdUaWNrcywgbm93KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEF0dGFjaGVzIHRoZSBzaWduYWwgdG8gdGhlIHRlbXBvIGNvbnRyb2wgc2lnbmFsIHNvIHRoYXRcblx0XHQgKiAgYW55IGNoYW5nZXMgaW4gdGhlIHRlbXBvIHdpbGwgY2hhbmdlIHRoZSBzaWduYWwgaW4gdGhlIHNhbWVcblx0XHQgKiAgcmF0aW8uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VG9uZS5TaWduYWx9IHNpZ25hbFxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHJhdGlvIE9wdGlvbmFsbHkgcGFzcyBpbiB0aGUgcmF0aW8gYmV0d2VlblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0d28gc2lnbmFscy4gT3RoZXJ3aXNlIGl0IHdpbGwgYmUgY29tcHV0ZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGVpciBjdXJyZW50IHZhbHVlcy5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc3luY1NpZ25hbCA9IGZ1bmN0aW9uIChzaWduYWwsIHJhdGlvKSB7XG5cdCAgICAgICAgaWYgKCFyYXRpbykge1xuXHQgICAgICAgICAgICAvL2dldCB0aGUgc3luYyByYXRpb1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKHNpZ25hbC5nZXRWYWx1ZUF0VGltZShub3cpICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByYXRpbyA9IHNpZ25hbC5nZXRWYWx1ZUF0VGltZShub3cpIC8gdGhpcy5icG0uZ2V0VmFsdWVBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJhdGlvID0gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmF0aW9TaWduYWwgPSBuZXcgVG9uZS5HYWluKHJhdGlvKTtcblx0ICAgICAgICB0aGlzLmJwbS5jaGFpbihyYXRpb1NpZ25hbCwgc2lnbmFsLl9wYXJhbSk7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkU2lnbmFscy5wdXNoKHtcblx0ICAgICAgICAgICAgJ3JhdGlvJzogcmF0aW9TaWduYWwsXG5cdCAgICAgICAgICAgICdzaWduYWwnOiBzaWduYWwsXG5cdCAgICAgICAgICAgICdpbml0aWFsJzogc2lnbmFsLnZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgc2lnbmFsLnZhbHVlID0gMDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVW5zeW5jcyBhIHByZXZpb3VzbHkgc3luY2VkIHNpZ25hbCBmcm9tIHRoZSB0cmFuc3BvcnQncyBjb250cm9sLlxuXHRcdCAqICBTZWUgVG9uZS5UcmFuc3BvcnQuc3luY1NpZ25hbC5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5TaWduYWx9IHNpZ25hbFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS51bnN5bmNTaWduYWwgPSBmdW5jdGlvbiAoc2lnbmFsKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX3N5bmNlZFNpZ25hbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgdmFyIHN5bmNlZFNpZ25hbCA9IHRoaXMuX3N5bmNlZFNpZ25hbHNbaV07XG5cdCAgICAgICAgICAgIGlmIChzeW5jZWRTaWduYWwuc2lnbmFsID09PSBzaWduYWwpIHtcblx0ICAgICAgICAgICAgICAgIHN5bmNlZFNpZ25hbC5yYXRpby5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICBzeW5jZWRTaWduYWwuc2lnbmFsLnZhbHVlID0gc3luY2VkU2lnbmFsLmluaXRpYWw7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zeW5jZWRTaWduYWxzLnNwbGljZShpLCAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnYnBtJyk7XG5cdCAgICAgICAgdGhpcy5icG0gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0SU5JVElBTElaQVRJT05cblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIHZhciBUcmFuc3BvcnRDb25zdHJ1Y3RvciA9IFRvbmUuVHJhbnNwb3J0O1xuXHQgICAgVG9uZS5UcmFuc3BvcnQgPSBuZXcgVHJhbnNwb3J0Q29uc3RydWN0b3IoKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuVHJhbnNwb3J0IGluc3RhbmNlb2YgVHJhbnNwb3J0Q29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQgPSBjb250ZXh0LlRyYW5zcG9ydDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydCA9IG5ldyBUcmFuc3BvcnRDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3N0b3JlIHRoZSBUcmFuc3BvcnQgb24gdGhlIGNvbnRleHQgc28gaXQgY2FuIGJlIHJldHJpZXZlZCBsYXRlclxuXHQgICAgICAgIGNvbnRleHQuVHJhbnNwb3J0ID0gVG9uZS5UcmFuc3BvcnQ7XG5cdCAgICB9KTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignY2xvc2UnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0LlRyYW5zcG9ydCBpbnN0YW5jZW9mIFRyYW5zcG9ydENvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIGNvbnRleHQuVHJhbnNwb3J0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVm9sdW1lIGlzIGEgc2ltcGxlIHZvbHVtZSBub2RlLCB1c2VmdWwgZm9yIGNyZWF0aW5nIGEgdm9sdW1lIGZhZGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFt2b2x1bWU9MF0gdGhlIGluaXRpYWwgdm9sdW1lXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHZvbCA9IG5ldyBUb25lLlZvbHVtZSgtMTIpO1xuXHRcdCAqIGluc3RydW1lbnQuY2hhaW4odm9sLCBUb25lLk1hc3Rlcik7XG5cdFx0ICovXG5cdCAgICBUb25lLlZvbHVtZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3ZvbHVtZSddLCBUb25lLlZvbHVtZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSBvdXRwdXQgbm9kZVxuXHRcdFx0ICogQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy52b2x1bWUsIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdW5tdXRlZCB2b2x1bWVcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl91bm11dGVkVm9sdW1lID0gb3B0aW9ucy52b2x1bWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZvbHVtZSBjb250cm9sIGluIGRlY2liZWxzLlxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMub3V0cHV0LmdhaW47XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBtdXRlIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlZvbHVtZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Wb2x1bWUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Wb2x1bWUjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiB2b2x1bWUubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Wb2x1bWUucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMudm9sdW1lLnZhbHVlID09PSAtSW5maW5pdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5tdXRlICYmIG11dGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3VubXV0ZWRWb2x1bWUgPSB0aGlzLnZvbHVtZS52YWx1ZTtcblx0ICAgICAgICAgICAgICAgIC8vbWF5YmUgaXQgc2hvdWxkIHJhbXAgaGVyZT9cblx0ICAgICAgICAgICAgICAgIHRoaXMudm9sdW1lLnZhbHVlID0gLUluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubXV0ZSAmJiAhbXV0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy52b2x1bWUudmFsdWUgPSB0aGlzLl91bm11dGVkVm9sdW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVm9sdW1lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlZvbHVtZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmlucHV0LmRpc3Bvc2UoKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlZvbHVtZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIHNpbmdsZSBtYXN0ZXIgb3V0cHV0IHdoaWNoIGlzIGNvbm5lY3RlZCB0byB0aGVcblx0XHQgKiAgICAgICAgICBBdWRpb0Rlc3RpbmF0aW9uTm9kZSAoYWthIHlvdXIgc3BlYWtlcnMpLlxuXHRcdCAqICAgICAgICAgIEl0IHByb3ZpZGVzIHVzZWZ1bCBjb252ZW5pZW5jZXMgc3VjaCBhcyB0aGUgYWJpbGl0eVxuXHRcdCAqICAgICAgICAgIHRvIHNldCB0aGUgdm9sdW1lIGFuZCBtdXRlIHRoZSBlbnRpcmUgYXBwbGljYXRpb24uXG5cdFx0ICogICAgICAgICAgSXQgYWxzbyBnaXZlcyB5b3UgdGhlIGFiaWxpdHkgdG8gYXBwbHkgbWFzdGVyIGVmZmVjdHMgdG8geW91ciBhcHBsaWNhdGlvbi5cblx0XHQgKiAgICAgICAgICA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgIExpa2UgVG9uZS5UcmFuc3BvcnQsIEEgc2luZ2xlIFRvbmUuTWFzdGVyIGlzIGNyZWF0ZWRcblx0XHQgKiAgICAgICAgICBvbiBpbml0aWFsaXphdGlvbiBhbmQgeW91IGRvIG5vdCBuZWVkIHRvIGV4cGxpY2l0bHkgY29uc3RydWN0IG9uZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RoZSBhdWRpbyB3aWxsIGdvIGZyb20gdGhlIG9zY2lsbGF0b3IgdG8gdGhlIHNwZWFrZXJzXG5cdFx0ICogb3NjaWxsYXRvci5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0XHQgKiAvL2EgY29udmVuaWVuY2UgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIG1hc3RlciBvdXRwdXQgaXMgYWxzbyBwcm92aWRlZDpcblx0XHQgKiBvc2NpbGxhdG9yLnRvTWFzdGVyKCk7XG5cdFx0ICogLy90aGUgYWJvdmUgdHdvIGV4YW1wbGVzIGFyZSBlcXVpdmFsZW50LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5NYXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHByaXZhdGUgdm9sdW1lIG5vZGVcblx0XHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG1hc3RlciBvdXRwdXQuXG5cdFx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLm91dHB1dCwgdGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWFzdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3Rlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk1hc3RlciNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIFRvbmUuTWFzdGVyLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWFzdGVyLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIG1hc3RlciBlZmZlY3RzIGNoYWluLiBOT1RFOiB0aGlzIHdpbGwgZGlzY29ubmVjdCBhbnkgbm9kZXMgd2hpY2ggd2VyZSBwcmV2aW91c2x5XG5cdFx0ICogIGNoYWluZWQgaW4gdGhlIG1hc3RlciBlZmZlY3RzIGNoYWluLlxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvTm9kZXxUb25lfSBhcmdzLi4uIEFsbCBhcmd1bWVudHMgd2lsbCBiZSBjb25uZWN0ZWQgaW4gYSByb3dcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIE1hc3RlciB3aWxsIGJlIHJvdXRlZCB0aHJvdWdoIGl0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NYXN0ZXJ9ICB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zb21lIG92ZXJhbGwgY29tcHJlc3Npb24gdG8ga2VlcCB0aGUgbGV2ZWxzIGluIGNoZWNrXG5cdFx0ICogdmFyIG1hc3RlckNvbXByZXNzb3IgPSBuZXcgVG9uZS5Db21wcmVzc29yKHtcblx0XHQgKiBcdFwidGhyZXNob2xkXCIgOiAtNixcblx0XHQgKiBcdFwicmF0aW9cIiA6IDMsXG5cdFx0ICogXHRcImF0dGFja1wiIDogMC41LFxuXHRcdCAqIFx0XCJyZWxlYXNlXCIgOiAwLjFcblx0XHQgKiB9KTtcblx0XHQgKiAvL2dpdmUgYSBsaXR0bGUgYm9vc3QgdG8gdGhlIGxvd3Ncblx0XHQgKiB2YXIgbG93QnVtcCA9IG5ldyBUb25lLkZpbHRlcigyMDAsIFwibG93c2hlbGZcIik7XG5cdFx0ICogLy9yb3V0ZSBldmVyeXRoaW5nIHRocm91Z2ggdGhlIGZpbHRlclxuXHRcdCAqIC8vYW5kIGNvbXByZXNzb3IgYmVmb3JlIGdvaW5nIHRvIHRoZSBzcGVha2Vyc1xuXHRcdCAqIFRvbmUuTWFzdGVyLmNoYWluKGxvd0J1bXAsIG1hc3RlckNvbXByZXNzb3IpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NYXN0ZXIucHJvdG90eXBlLmNoYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4uYXBwbHkodGhpcy5pbnB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NYXN0ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3Rlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFVR01FTlQgVE9ORSdzIFBST1RPVFlQRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQ29ubmVjdCAndGhpcycgdG8gdGhlIG1hc3RlciBvdXRwdXQuIFNob3J0aGFuZCBmb3IgdGhpcy5jb25uZWN0KFRvbmUuTWFzdGVyKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Nvbm5lY3QgYW4gb3NjaWxsYXRvciB0byB0aGUgbWFzdGVyIG91dHB1dFxuXHRcdCAqIHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkudG9NYXN0ZXIoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS50b01hc3RlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIGlmICh3aW5kb3cuQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgLy8gQWxzbyBhdWdtZW50IEF1ZGlvTm9kZSdzIHByb3RvdHlwZSB0byBpbmNsdWRlIHRvTWFzdGVyIGFzIGEgY29udmVuaWVuY2Vcblx0ICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLnRvTWFzdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHQgICAgLyoqXG5cdFx0ICogIGluaXRpYWxpemUgdGhlIG1vZHVsZSBhbmQgbGlzdGVuIGZvciBuZXcgYXVkaW8gY29udGV4dHNcblx0XHQgKi9cblx0ICAgIHZhciBNYXN0ZXJDb25zdHJ1Y3RvciA9IFRvbmUuTWFzdGVyO1xuXHQgICAgVG9uZS5NYXN0ZXIgPSBuZXcgTWFzdGVyQ29uc3RydWN0b3IoKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgLy8gaWYgaXQgYWxyZWFkeSBleGlzdHMsIGp1c3QgcmVzdG9yZSBpdFxuXHQgICAgICAgIGlmIChjb250ZXh0Lk1hc3RlciBpbnN0YW5jZW9mIE1hc3RlckNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIFRvbmUuTWFzdGVyID0gY29udGV4dC5NYXN0ZXI7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgVG9uZS5NYXN0ZXIgPSBuZXcgTWFzdGVyQ29uc3RydWN0b3IoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgY29udGV4dC5NYXN0ZXIgPSBUb25lLk1hc3Rlcjtcblx0ICAgIH0pO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdjbG9zZScsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuTWFzdGVyIGluc3RhbmNlb2YgTWFzdGVyQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgY29udGV4dC5NYXN0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmUuTWFzdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJhc2UgY2xhc3MgZm9yIHNvdXJjZXMuIFNvdXJjZXMgaGF2ZSBzdGFydC9zdG9wIG1ldGhvZHNcblx0XHQgKiAgICAgICAgICBhbmQgdGhlIGFiaWxpdHkgdG8gYmUgc3luY2VkIHRvIHRoZVxuXHRcdCAqICAgICAgICAgIHN0YXJ0L3N0b3Agb2YgVG9uZS5UcmFuc3BvcnQuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL011bHRpcGxlIHN0YXRlIGNoYW5nZSBldmVudHMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIsXG5cdFx0ICogLy9idXQgbXVzdCBiZSBzZXQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgYW5kIHdpdGggYXNjZW5kaW5nIHRpbWVzXG5cdFx0ICpcblx0XHQgKiAvLyBPS1xuXHRcdCAqIHN0YXRlLnN0YXJ0KCkuc3RvcChcIiswLjJcIik7XG5cdFx0ICogLy8gQU5EXG5cdFx0ICogc3RhdGUuc3RhcnQoKS5zdG9wKFwiKzAuMlwiKS5zdGFydChcIiswLjRcIikuc3RvcChcIiswLjdcIilcblx0XHQgKlxuXHRcdCAqIC8vIEJBRFxuXHRcdCAqIHN0YXRlLnN0b3AoXCIrMC4yXCIpLnN0YXJ0KCk7XG5cdFx0ICogLy8gT1Jcblx0XHQgKiBzdGF0ZS5zdGFydChcIiswLjNcIikuc3RvcChcIiswLjJcIik7XG5cdFx0ICpcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuU291cmNlLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvdXRwdXQgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogc291cmNlLnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFx0S2VlcCB0cmFjayBvZiB0aGUgc2NoZWR1bGVkIHN0YXRlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLm1lbW9yeSA9IDEwMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3luY2VkIGBzdGFydGAgY2FsbGJhY2sgZnVuY3Rpb24gZnJvbSB0aGUgdHJhbnNwb3J0XG5cdFx0XHQgKiAgQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBLZWVwIHRyYWNrIG9mIGFsbCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IGlkc1xuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IFtdO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgb3V0cHV0IGV4cGxpY2l0bHkgc3RlcmVvXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLm91dHB1dC5vdXRwdXQuY2hhbm5lbENvdW50ID0gMjtcblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICAvL211dGUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU291cmNlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU291cmNlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHNvdXJjZS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNvdXJjZS5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vb3ZlcndyaXRlIHRoZXNlIGZ1bmN0aW9uc1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLl9zdGFydCA9IFRvbmUubm9PcDtcblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5yZXN0YXJ0ID0gVG9uZS5ub09wO1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLl9zdG9wID0gVG9uZS5ub09wO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBzb3VyY2UgYXQgdGhlIHNwZWNpZmllZCB0aW1lLiBJZiBubyB0aW1lIGlzIGdpdmVuLFxuXHRcdCAqICBzdGFydCB0aGUgc291cmNlIG5vdy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBzb3VyY2Ugc2hvdWxkIGJlIHN0YXJ0ZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zdGFydChcIiswLjVcIik7IC8vc3RhcnRzIHRoZSBzb3VyY2UgMC41IHNlY29uZHMgZnJvbSBub3dcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSAmJiB0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0LnNlY29uZHM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2lmIGl0J3Mgc3RhcnRlZCwgc3RvcCBpdCBhbmQgcmVzdGFydCBpdFxuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5yZXN0YXJ0KHRpbWUsIG9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RhcnRlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgb2Zmc2V0IHRpbWUgdG8gdGhlIGV2ZW50XG5cdCAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQodGltZSk7XG5cdCAgICAgICAgICAgICAgICBldmVudC5vZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LmR1cmF0aW9uID0gZHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICB2YXIgc2NoZWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHQsIG9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZC5wdXNoKHNjaGVkKTtcblx0ICAgICAgICAgICAgICAgIC8vaWYgaXQncyBhbHJlYWR5IHN0YXJ0ZWRcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3luY2VkU3RhcnQodGhpcy5ub3coKSwgVG9uZS5UcmFuc3BvcnQuc2Vjb25kcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdGFydC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBzb3VyY2UgYXQgdGhlIHNwZWNpZmllZCB0aW1lLiBJZiBubyB0aW1lIGlzIGdpdmVuLFxuXHRcdCAqICBzdG9wIHRoZSBzb3VyY2Ugbm93LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHNvdXJjZSBzaG91bGQgYmUgc3RvcHBlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0b3AoKTsgLy8gc3RvcHMgdGhlIHNvdXJjZSBpbW1lZGlhdGVseVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGltZSkgJiYgdGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydC5zZWNvbmRzO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCF0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBzY2hlZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKHRoaXMuX3N0b3AuYmluZCh0aGlzKSwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZC5wdXNoKHNjaGVkKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN5bmMgdGhlIHNvdXJjZSB0byB0aGUgVHJhbnNwb3J0IHNvIHRoYXQgYWxsIHN1YnNlcXVlbnRcblx0XHQgKiAgY2FsbHMgdG8gYHN0YXJ0YCBhbmQgYHN0b3BgIGFyZSBzeW5jZWQgdG8gdGhlIFRyYW5zcG9ydFRpbWVcblx0XHQgKiAgaW5zdGVhZCBvZiB0aGUgQXVkaW9Db250ZXh0IHRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zeW5jIHRoZSBzb3VyY2Ugc28gdGhhdCBpdCBwbGF5cyBiZXR3ZWVuIDAgYW5kIDAuMyBvbiB0aGUgVHJhbnNwb3J0J3MgdGltZWxpbmVcblx0XHQgKiBzb3VyY2Uuc3luYygpLnN0YXJ0KDApLnN0b3AoMC4zKTtcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoKTtcblx0XHQgKlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB3aXRoIGFuIG9mZnNldCBhbmQgdGhlIHN5bmMnZWQgc291cmNlc1xuXHRcdCAqIC8vd2lsbCBzdGFydCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvblxuXHRcdCAqIHNvdXJjZS5zeW5jKCkuc3RhcnQoMC4xKTtcblx0XHQgKiAvL3RoZSBzb3VyY2Ugd2lsbCBiZSBpbnZva2VkIHdpdGggYW4gb2Zmc2V0IG9mIDAuNFxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KFwiKzAuNVwiLCAwLjUpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLl9zeW5jZWRTdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldCA+IDApIHtcblx0ICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgcGxheWJhY2sgc3RhdGUgYXQgdGhhdCB0aW1lXG5cdCAgICAgICAgICAgICAgICB2YXIgc3RhdGVFdmVudCA9IHRoaXMuX3N0YXRlLmdldChvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgLy8gbGlzdGVuIGZvciBzdGFydCBldmVudHMgd2hpY2ggbWF5IG9jY3VyIGluIHRoZSBtaWRkbGUgb2YgdGhlIHN5bmMnZWQgdGltZVxuXHQgICAgICAgICAgICAgICAgaWYgKHN0YXRlRXZlbnQgJiYgc3RhdGVFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIHN0YXRlRXZlbnQudGltZSAhPT0gb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBvZmZzZXRcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSBvZmZzZXQgLSB0aGlzLnRvU2Vjb25kcyhzdGF0ZUV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVFdmVudC5kdXJhdGlvbikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKHN0YXRlRXZlbnQuZHVyYXRpb24pIC0gc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUsIHRoaXMudG9TZWNvbmRzKHN0YXRlRXZlbnQub2Zmc2V0KSArIHN0YXJ0T2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkU3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHZhciBzZWNvbmRzID0gVG9uZS5UcmFuc3BvcnQuZ2V0U2Vjb25kc0F0VGltZShNYXRoLm1heCh0aW1lIC0gdGhpcy5zYW1wbGVUaW1lLCAwKSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShzZWNvbmRzKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9uKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9zeW5jZWRTdGFydCk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub24oJ3N0b3AgcGF1c2UgbG9vcEVuZCcsIHRoaXMuX3N5bmNlZFN0b3ApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbnN5bmMgdGhlIHNvdXJjZSB0byB0aGUgVHJhbnNwb3J0LiBTZWUgVG9uZS5Tb3VyY2Uuc3luY1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5vZmYoJ3N0b3AgcGF1c2UgbG9vcEVuZCcsIHRoaXMuX3N5bmNlZFN0b3ApO1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5vZmYoJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX3N5bmNlZFN0YXJ0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gZmFsc2U7XG5cdCAgICAgICAgLy8gY2xlYXIgYWxsIG9mIHRoZSBzY2hlZHVsZWQgaWRzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zY2hlZHVsZWQubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5fc2NoZWR1bGVkW2ldO1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihpZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IFtdO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCgwKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKlx0Q2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNvdXJjZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEF1ZGlvQnVmZmVyLmNvcHlUby9Gcm9tQ2hhbm5lbCBwb2x5ZmlsbFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCFBdWRpb0J1ZmZlci5wcm90b3R5cGUuY29weVRvQ2hhbm5lbCkge1xuXHQgICAgICAgICAgICBBdWRpb0J1ZmZlci5wcm90b3R5cGUuY29weVRvQ2hhbm5lbCA9IGZ1bmN0aW9uIChzcmMsIGNoYW5OdW0sIHN0YXJ0KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IHRoaXMuZ2V0Q2hhbm5lbERhdGEoY2hhbk51bSk7XG5cdCAgICAgICAgICAgICAgICBzdGFydCA9IHN0YXJ0IHx8IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5uZWwubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2kgKyBzdGFydF0gPSBzcmNbaV07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIEF1ZGlvQnVmZmVyLnByb3RvdHlwZS5jb3B5RnJvbUNoYW5uZWwgPSBmdW5jdGlvbiAoZGVzdCwgY2hhbk51bSwgc3RhcnQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gdGhpcy5nZXRDaGFubmVsRGF0YShjaGFuTnVtKTtcblx0ICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVzdC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGRlc3RbaV0gPSBjaGFubmVsW2kgKyBzdGFydF07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJ1ZmZlciBsb2FkaW5nIGFuZCBzdG9yYWdlLiBUb25lLkJ1ZmZlciBpcyB1c2VkIGludGVybmFsbHkgYnkgYWxsXG5cdFx0ICogICAgICAgICAgY2xhc3NlcyB0aGF0IG1ha2UgcmVxdWVzdHMgZm9yIGF1ZGlvIGZpbGVzIHN1Y2ggYXMgVG9uZS5QbGF5ZXIsXG5cdFx0ICogICAgICAgICAgVG9uZS5TYW1wbGVyIGFuZCBUb25lLkNvbnZvbHZlci5cblx0XHQgKlxuXHRcdCAqICAgICAgICAgIEFzaWRlIGZyb20gbG9hZCBjYWxsYmFja3MgZnJvbSBpbmRpdmlkdWFsIGJ1ZmZlcnMsIFRvbmUuQnVmZmVyXG5cdFx0ICogIFx0XHRwcm92aWRlcyBldmVudHMgd2hpY2gga2VlcCB0cmFjayBvZiB0aGUgbG9hZGluZyBwcm9ncmVzc1xuXHRcdCAqICBcdFx0b2YgX2FsbF8gb2YgdGhlIGJ1ZmZlcnMuIFRoZXNlIGFyZSBUb25lLkJ1ZmZlci5vbihcImxvYWRcIiAvIFwicHJvZ3Jlc3NcIiAvIFwiZXJyb3JcIilcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7QXVkaW9CdWZmZXJ8U3RyaW5nfSB1cmwgVGhlIHVybCB0byBsb2FkLCBvciB0aGUgYXVkaW8gYnVmZmVyIHRvIHNldC5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBBIGNhbGxiYWNrIHdoaWNoIGlzIGludm9rZWQgYWZ0ZXIgdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQncyByZWNvbW1lbmRlZCB0byB1c2UgYFRvbmUuQnVmZmVyLm9uKCdsb2FkJywgY2FsbGJhY2spYCBpbnN0ZWFkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luY2UgaXQgd2lsbCBnaXZlIHlvdSBhIGNhbGxiYWNrIHdoZW4gX2FsbF8gYnVmZmVycyBhcmUgbG9hZGVkLlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25lcnJvciBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGlmIHRoZXJlIGlzIGFuIGVycm9yXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihcInBhdGgvdG8vc291bmQubXAzXCIsIGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3RoZSBidWZmZXIgaXMgbm93IGF2YWlsYWJsZS5cblx0XHQgKiBcdHZhciBidWZmID0gYnVmZmVyLmdldCgpO1xuXHRcdCAqIH0pO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIGxvYWQgcHJvdmlkZSBmYWxsYmFjayBleHRlbnNpb24gdHlwZXMgaWYgdGhlIGZpcnN0IHR5cGUgaXMgbm90IHN1cHBvcnRlZC5cblx0XHQgKiB2YXIgYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKFwicGF0aC90by9zb3VuZC5bbXAzfG9nZ3x3YXZdXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCcsXG5cdCAgICAgICAgICAgICdvbmVycm9yJ1xuXHQgICAgICAgIF0sIFRvbmUuQnVmZmVyKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3RvcmVzIHRoZSBsb2FkZWQgQXVkaW9CdWZmZXJcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaW5kaWNhdGVzIGlmIHRoZSBidWZmZXIgc2hvdWxkIGJlIHJldmVyc2VkIG9yIG5vdFxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yZXZlcnNlZCA9IG9wdGlvbnMucmV2ZXJzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgWEhSXG5cdFx0XHQgKiAgQHR5cGUgIHtYTUxIdHRwUmVxdWVzdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFByaXZhdGUgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmxvYWQgPSBUb25lLm5vT3A7XG5cdCAgICAgICAgaWYgKG9wdGlvbnMudXJsIGluc3RhbmNlb2YgQXVkaW9CdWZmZXIgfHwgb3B0aW9ucy51cmwgaW5zdGFuY2VvZiBUb25lLkJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLnNldChvcHRpb25zLnVybCk7XG5cdCAgICAgICAgICAgIC8vIGludm9rZSB0aGUgb25sb2FkIGNhbGxiYWNrXG5cdCAgICAgICAgICAgIGlmIChvcHRpb25zLm9ubG9hZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9hZGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29ubG9hZCA9IG9wdGlvbnMub25sb2FkO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKG9wdGlvbnMudXJsKSkge1xuXHQgICAgICAgICAgICB0aGlzLmxvYWQob3B0aW9ucy51cmwpLnRoZW4ob3B0aW9ucy5vbmxvYWQpLmNhdGNoKG9wdGlvbnMub25lcnJvcik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQnVmZmVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndXJsJzogdW5kZWZpbmVkLFxuXHQgICAgICAgICdyZXZlcnNlJzogZmFsc2UsXG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnb25lcnJvcic6IFRvbmUubm9PcFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXNzIGluIGFuIEF1ZGlvQnVmZmVyIG9yIFRvbmUuQnVmZmVyIHRvIHNldCB0aGUgdmFsdWVcblx0XHQgKiAgb2YgdGhpcyBidWZmZXIuXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9CdWZmZXJ8VG9uZS5CdWZmZXJ9IGJ1ZmZlciB0aGUgYnVmZmVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICBpZiAoYnVmZmVyIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIpIHtcblx0ICAgICAgICAgICAgaWYgKGJ1ZmZlci5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IGJ1ZmZlci5nZXQoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlci5fb25sb2FkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25sb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQHJldHVybiB7QXVkaW9CdWZmZXJ9IFRoZSBhdWRpbyBidWZmZXIgc3RvcmVkIGluIHRoZSBvYmplY3QuXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIE1ha2VzIGFuIHhociByZXFlc3QgZm9yIHRoZSBzZWxlY3RlZCB1cmwgdGhlbiBkZWNvZGVzXG5cdFx0ICogIHRoZSBmaWxlIGFzIGFuIGF1ZGlvIGJ1ZmZlci4gSW52b2tlc1xuXHRcdCAqICB0aGUgY2FsbGJhY2sgb25jZSB0aGUgYXVkaW8gYnVmZmVyIGxvYWRzLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGJ1ZmZlciB0byBsb2FkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGZpbGV0eXBlIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICBicm93c2VyLlxuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX0gcmV0dXJucyBhIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2l0aCB0aGUgVG9uZS5CdWZmZXJcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKHVybCwgb25sb2FkLCBvbmVycm9yKSB7XG5cdCAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAobG9hZCwgZXJyb3IpIHtcblx0ICAgICAgICAgICAgdGhpcy5feGhyID0gVG9uZS5CdWZmZXIubG9hZCh1cmwsIC8vc3VjY2Vzc1xuXHQgICAgICAgICAgICBmdW5jdGlvbiAoYnVmZikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2V0KGJ1ZmYpO1xuXHQgICAgICAgICAgICAgICAgbG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIGlmIChvbmxvYWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgLy9lcnJvclxuXHQgICAgICAgICAgICBmdW5jdGlvbiAoZXJyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgZXJyb3IoZXJyKTtcblx0ICAgICAgICAgICAgICAgIGlmIChvbmVycm9yKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb25lcnJvcihlcnIpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHByb21pc2U7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICBpZiAodGhpcy5feGhyKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZSh0aGlzLl94aHIpO1xuXHQgICAgICAgICAgICB0aGlzLl94aHIuYWJvcnQoKTtcblx0ICAgICAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlciBpcyBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID4gMDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGR1cmF0aW9uXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnZHVyYXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGluIHNhbXBsZXNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBsZW5ndGhcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubGVuZ3RoO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2YgZGlzY3JldGUgYXVkaW8gY2hhbm5lbHMuIFJldHVybnMgMCBpZiBubyBidWZmZXJcblx0XHQgKiBpcyBsb2FkZWQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgbnVtYmVyT2ZDaGFubmVsc1xuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ251bWJlck9mQ2hhbm5lbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubnVtYmVyT2ZDaGFubmVscztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBhdWRpbyBidWZmZXIgZnJvbSB0aGUgYXJyYXkuIFRvIGNyZWF0ZSBhIG11bHRpY2hhbm5lbCBBdWRpb0J1ZmZlcixcblx0XHQgKiAgcGFzcyBpbiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkuXG5cdFx0ICogIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbCB0aGUgYXVkaW8gYnVmZmVyXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KSB7XG5cdCAgICAgICAgdmFyIGlzTXVsdGlkaW1lbnNpb25hbCA9IGFycmF5WzBdLmxlbmd0aCA+IDA7XG5cdCAgICAgICAgdmFyIGNoYW5uZWxzID0gaXNNdWx0aWRpbWVuc2lvbmFsID8gYXJyYXkubGVuZ3RoIDogMTtcblx0ICAgICAgICB2YXIgbGVuID0gaXNNdWx0aWRpbWVuc2lvbmFsID8gYXJyYXlbMF0ubGVuZ3RoIDogYXJyYXkubGVuZ3RoO1xuXHQgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyKGNoYW5uZWxzLCBsZW4sIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlKTtcblx0ICAgICAgICBpZiAoIWlzTXVsdGlkaW1lbnNpb25hbCAmJiBjaGFubmVscyA9PT0gMSkge1xuXHQgICAgICAgICAgICBhcnJheSA9IFthcnJheV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2hhbm5lbHM7IGMrKykge1xuXHQgICAgICAgICAgICBidWZmZXIuY29weVRvQ2hhbm5lbChhcnJheVtjXSwgYyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IGJ1ZmZlcjtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBcdFN1bXMgbXVsaXBsZSBjaGFubmVscyBpbnRvIDEgY2hhbm5lbFxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IGNoYW5uZWwgT3B0aW9uYWxseSBvbmx5IGNvcHkgYSBzaW5nbGUgY2hhbm5lbCBmcm9tIHRoZSBhcnJheS5cblx0XHQgKiAgQHJldHVybiB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUudG9Nb25vID0gZnVuY3Rpb24gKGNoYW5OdW0pIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcihjaGFuTnVtKSkge1xuXHQgICAgICAgICAgICB0aGlzLmZyb21BcnJheSh0aGlzLnRvQXJyYXkoY2hhbk51bSkpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBvdXRwdXRBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5sZW5ndGgpO1xuXHQgICAgICAgICAgICB2YXIgbnVtQ2hhbm5lbHMgPSB0aGlzLm51bWJlck9mQ2hhbm5lbHM7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgbnVtQ2hhbm5lbHM7IGNoYW5uZWwrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWxBcnJheSA9IHRoaXMudG9BcnJheShjaGFubmVsKTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbEFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3V0cHV0QXJyYXlbaV0gKz0gY2hhbm5lbEFycmF5W2ldO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vZGl2aWRlIGJ5IHRoZSBudW1iZXIgb2YgY2hhbm5lbHNcblx0ICAgICAgICAgICAgb3V0cHV0QXJyYXkgPSBvdXRwdXRBcnJheS5tYXAoZnVuY3Rpb24gKHNhbXBsZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHNhbXBsZSAvIG51bUNoYW5uZWxzO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5mcm9tQXJyYXkob3V0cHV0QXJyYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBcdEdldCB0aGUgYnVmZmVyIGFzIGFuIGFycmF5LiBTaW5nbGUgY2hhbm5lbCBidWZmZXJzIHdpbGwgcmV0dXJuIGEgMS1kaW1lbnNpb25hbFxuXHRcdCAqIFx0RmxvYXQzMkFycmF5LCBhbmQgbXVsdGljaGFubmVsIGJ1ZmZlcnMgd2lsbCByZXR1cm4gbXVsdGlkaW1lbnNpb25hbCBhcnJheXMuXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gY2hhbm5lbCBPcHRpb25hbGx5IG9ubHkgY29weSBhIHNpbmdsZSBjaGFubmVsIGZyb20gdGhlIGFycmF5LlxuXHRcdCAqICBAcmV0dXJuIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKGNoYW5uZWwpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcihjaGFubmVsKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDaGFubmVsRGF0YShjaGFubmVsKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMubnVtYmVyT2ZDaGFubmVscyA9PT0gMSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy50b0FycmF5KDApO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciByZXQgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCB0aGlzLm51bWJlck9mQ2hhbm5lbHM7IGMrKykge1xuXHQgICAgICAgICAgICAgICAgcmV0W2NdID0gdGhpcy5nZXRDaGFubmVsRGF0YShjKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgRmxvYXQzMkFycmF5IHJlcHJlc2VudGluZyB0aGUgUENNIGF1ZGlvIGRhdGEgZm9yIHRoZSBzcGVjaWZpYyBjaGFubmVsLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBjaGFubmVsICBUaGUgY2hhbm5lbCBudW1iZXIgdG8gcmV0dXJuXG5cdFx0ICogIEByZXR1cm4gIHtGbG9hdDMyQXJyYXl9ICBUaGUgYXVkaW8gYXMgYSBUeXBlZEFycmF5XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZ2V0Q2hhbm5lbERhdGEgPSBmdW5jdGlvbiAoY2hhbm5lbCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2hhbm5lbCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEN1dCBhIHN1YnNlY3Rpb24gb2YgdGhlIGFycmF5IGFuZCByZXR1cm4gYSBidWZmZXIgb2YgdGhlXG5cdFx0ICogIHN1YnNlY3Rpb24uIERvZXMgbm90IG1vZGlmeSB0aGUgb3JpZ2luYWwgYnVmZmVyXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnQgVGhlIHRpbWUgdG8gc3RhcnQgdGhlIHNsaWNlXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGVuZCBUaGUgZW5kIHRpbWUgdG8gc2xpY2UuIElmIG5vbmUgaXMgZ2l2ZW5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIHdpbGwgZGVmYXVsdCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXJcblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIChzdGFydCwgZW5kKSB7XG5cdCAgICAgICAgZW5kID0gVG9uZS5kZWZhdWx0QXJnKGVuZCwgdGhpcy5kdXJhdGlvbik7XG5cdCAgICAgICAgdmFyIHN0YXJ0U2FtcGxlcyA9IE1hdGguZmxvb3IodGhpcy5jb250ZXh0LnNhbXBsZVJhdGUgKiB0aGlzLnRvU2Vjb25kcyhzdGFydCkpO1xuXHQgICAgICAgIHZhciBlbmRTYW1wbGVzID0gTWF0aC5mbG9vcih0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSAqIHRoaXMudG9TZWNvbmRzKGVuZCkpO1xuXHQgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1iZXJPZkNoYW5uZWxzOyBpKyspIHtcblx0ICAgICAgICAgICAgcmVwbGFjZW1lbnRbaV0gPSB0aGlzLnRvQXJyYXkoaSkuc2xpY2Uoc3RhcnRTYW1wbGVzLCBlbmRTYW1wbGVzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHJldEJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcigpLmZyb21BcnJheShyZXBsYWNlbWVudCk7XG5cdCAgICAgICAgcmV0dXJuIHJldEJ1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV2ZXJzZSB0aGUgYnVmZmVyLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLl9yZXZlcnNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmxvYWRlZCkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubnVtYmVyT2ZDaGFubmVsczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKHRoaXMuZ2V0Q2hhbm5lbERhdGEoaSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldmVyc2UgdGhlIGJ1ZmZlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgcmV2ZXJzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ3JldmVyc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZlcnNlZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJldikge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fcmV2ZXJzZWQgIT09IHJldikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmV2ZXJzZWQgPSByZXY7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXZlcnNlKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gU1RBVElDIE1FVEhPRFNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9zdGF0aWNhbGx5IGluaGVyaXRzIEVtaXR0ZXIgbWV0aG9kc1xuXHQgICAgVG9uZS5FbWl0dGVyLm1peGluKFRvbmUuQnVmZmVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgc3RhdGljIHF1ZXVlIGZvciBhbGwgb2YgdGhlIHhociByZXF1ZXN0c1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZSA9IFtdO1xuXHQgICAgLyoqXG5cdFx0ICogIEEgcGF0aCB3aGljaCBpcyBwcmVmaXhlZCBiZWZvcmUgZXZlcnkgdXJsLlxuXHRcdCAqICBAdHlwZSAge1N0cmluZ31cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuYmFzZVVybCA9ICcnO1xuXHQgICAgLyoqXG5cdFx0ICogIENyZWF0ZSBhIFRvbmUuQnVmZmVyIGZyb20gdGhlIGFycmF5LiBUbyBjcmVhdGUgYSBtdWx0aWNoYW5uZWwgQXVkaW9CdWZmZXIsXG5cdFx0ICogIHBhc3MgaW4gYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LlxuXHRcdCAqICBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZpbGwgdGhlIGF1ZGlvIGJ1ZmZlclxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gQSBUb25lLkJ1ZmZlciBjcmVhdGVkIGZyb20gdGhlIGFycmF5XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IFRvbmUuQnVmZmVyKCkuZnJvbUFycmF5KGFycmF5KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDcmVhdGVzIGEgVG9uZS5CdWZmZXIgZnJvbSBhIFVSTCwgcmV0dXJucyBhIHByb21pc2Vcblx0XHQgKiB3aGljaCByZXNvbHZlcyB0byBhIFRvbmUuQnVmZmVyXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSB1cmwgVGhlIHVybCB0byBsb2FkLlxuXHRcdCAqIEByZXR1cm4ge1Byb21pc2U8VG9uZS5CdWZmZXI+fSAgICAgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHRvIGEgVG9uZS5CdWZmZXJcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmZyb21VcmwgPSBmdW5jdGlvbiAodXJsKSB7XG5cdCAgICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcigpO1xuXHQgICAgICAgIHJldHVybiBidWZmZXIubG9hZCh1cmwpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlbW92ZSBhbiB4aHIgcmVxdWVzdCBmcm9tIHRoZSBkb3dubG9hZCBxdWV1ZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5fcmVtb3ZlRnJvbURvd25sb2FkUXVldWUgPSBmdW5jdGlvbiAocmVxdWVzdCkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLmluZGV4T2YocmVxdWVzdCk7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTG9hZHMgYSB1cmwgdXNpbmcgWE1MSHR0cFJlcXVlc3QuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB1cmxcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gb25sb2FkXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IG9uZXJyb3Jcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gb25wcm9ncmVzc1xuXHRcdCAqICBAcmV0dXJuIHtYTUxIdHRwUmVxdWVzdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBvbmxvYWQsIG9uZXJyb3IpIHtcblx0ICAgICAgICAvL2RlZmF1bHRcblx0ICAgICAgICBvbmxvYWQgPSBUb25lLmRlZmF1bHRBcmcob25sb2FkLCBUb25lLm5vT3ApO1xuXHQgICAgICAgIC8vIHRlc3QgaWYgdGhlIHVybCBjb250YWlucyBtdWx0aXBsZSBleHRlbnNpb25zXG5cdCAgICAgICAgdmFyIG1hdGNoZXMgPSB1cmwubWF0Y2goL1xcWyguK1xcfD8pK1xcXSQvKTtcblx0ICAgICAgICBpZiAobWF0Y2hlcykge1xuXHQgICAgICAgICAgICB2YXIgZXh0ZW5zaW9ucyA9IG1hdGNoZXNbMV0uc3BsaXQoJ3wnKTtcblx0ICAgICAgICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnNbMF07XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZShleHRlbnNpb25zW2ldKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnNbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UobWF0Y2hlc1swXSwgZXh0ZW5zaW9uKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gb25FcnJvcihlKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuZW1pdCgnZXJyb3InLCBlKTtcblx0ICAgICAgICAgICAgaWYgKG9uZXJyb3IpIHtcblx0ICAgICAgICAgICAgICAgIG9uZXJyb3IoZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIG9uUHJvZ3Jlc3MoKSB7XG5cdCAgICAgICAgICAgIC8vY2FsY3VsYXRlIHRoZSBwcm9ncmVzc1xuXHQgICAgICAgICAgICB2YXIgdG90YWxQcm9ncmVzcyA9IDA7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRvdGFsUHJvZ3Jlc3MgKz0gVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWVbaV0ucHJvZ3Jlc3M7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuZW1pdCgncHJvZ3Jlc3MnLCB0b3RhbFByb2dyZXNzIC8gVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUubGVuZ3RoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0ICAgICAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIFRvbmUuQnVmZmVyLmJhc2VVcmwgKyB1cmwsIHRydWUpO1xuXHQgICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcblx0ICAgICAgICAvL3N0YXJ0IG91dCBhcyAwXG5cdCAgICAgICAgcmVxdWVzdC5wcm9ncmVzcyA9IDA7XG5cdCAgICAgICAgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUucHVzaChyZXF1ZXN0KTtcblx0ICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMjAwKSB7XG5cdCAgICAgICAgICAgICAgICBUb25lLmNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKHJlcXVlc3QucmVzcG9uc2UpLnRoZW4oZnVuY3Rpb24gKGJ1ZmYpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnByb2dyZXNzID0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBvblByb2dyZXNzKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgb25sb2FkKGJ1ZmYpO1xuXHQgICAgICAgICAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vZW1pdCB0aGUgZXZlbnQgYXQgdGhlIGVuZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBUb25lLkJ1ZmZlci5lbWl0KCdsb2FkJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgICAgICAgICBvbkVycm9yKCdUb25lLkJ1ZmZlcjogY291bGQgbm90IGRlY29kZSBhdWRpbyBkYXRhOiAnICsgdXJsKTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgb25FcnJvcignVG9uZS5CdWZmZXI6IGNvdWxkIG5vdCBsb2NhdGUgZmlsZTogJyArIHVybCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG5cdCAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuXHQgICAgICAgICAgICAgICAgLy9vbmx5IGdvIHRvIDk1JSwgdGhlIGxhc3QgNSUgaXMgd2hlbiB0aGUgYXVkaW8gaXMgZGVjb2RlZFxuXHQgICAgICAgICAgICAgICAgcmVxdWVzdC5wcm9ncmVzcyA9IGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsICogMC45NTtcblx0ICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3MoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJlcXVlc3Quc2VuZCgpO1xuXHQgICAgICAgIHJldHVybiByZXF1ZXN0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIGFsbCBvZiB0aGUgZG93bmxvYWRzIGluIHByb2dyZXNzXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5jYW5jZWxEb3dubG9hZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiBUb25lLkJ1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2hlY2tzIGEgdXJsJ3MgZXh0ZW5zaW9uIHRvIHNlZSBpZiB0aGUgY3VycmVudCBicm93c2VyIGNhbiBwbGF5IHRoYXQgZmlsZSB0eXBlLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSB1cmwvZXh0ZW5zaW9uIHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybiB7Qm9vbGVhbn0gSWYgdGhlIGZpbGUgZXh0ZW5zaW9uIGNhbiBiZSBwbGF5ZWRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZShcIndhdlwiKTsgLy9yZXR1cm5zIHRydWVcblx0XHQgKiBUb25lLkJ1ZmZlci5zdXBwb3J0c1R5cGUoXCJwYXRoL3RvL2ZpbGUud2F2XCIpOyAvL3JldHVybnMgdHJ1ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlID0gZnVuY3Rpb24gKHVybCkge1xuXHQgICAgICAgIHZhciBleHRlbnNpb24gPSB1cmwuc3BsaXQoJy4nKTtcblx0ICAgICAgICBleHRlbnNpb24gPSBleHRlbnNpb25bZXh0ZW5zaW9uLmxlbmd0aCAtIDFdO1xuXHQgICAgICAgIHZhciByZXNwb25zZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJykuY2FuUGxheVR5cGUoJ2F1ZGlvLycgKyBleHRlbnNpb24pO1xuXHQgICAgICAgIHJldHVybiByZXNwb25zZSAhPT0gJyc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgYSBQcm9taXNlIHdoaWNoIHJlc29sdmVzIHdoZW4gYWxsIG9mIHRoZSBidWZmZXJzIGhhdmUgbG9hZGVkXG5cdFx0ICogIEByZXR1cm4ge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLmxvYWRlZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb25sb2FkLCBvbmVycm9yO1xuXHQgICAgICAgIGZ1bmN0aW9uIHJlbW92ZUV2ZW50cygpIHtcblx0ICAgICAgICAgICAgLy9yZW1vdmUgdGhlIGV2ZW50cyB3aGVuIGl0J3MgcmVzb2x2ZWRcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub2ZmKCdsb2FkJywgb25sb2FkKTtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub2ZmKCdlcnJvcicsIG9uZXJyb3IpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHN1Y2Nlc3MsIGZhaWwpIHtcblx0ICAgICAgICAgICAgb25sb2FkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgc3VjY2VzcygpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBvbmVycm9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgZmFpbCgpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAvL2FkZCB0aGUgZXZlbnQgbGlzdGVuZXJzXG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLm9uKCdsb2FkJywgb25sb2FkKTtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub24oJ2Vycm9yJywgb25lcnJvcik7XG5cdCAgICAgICAgfSkudGhlbihyZW1vdmVFdmVudHMpLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIHJlbW92ZUV2ZW50cygpO1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQnVmZmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgZmlyZS1hbmQtZm9yZ2V0IE9zY2lsbGF0b3JOb2RlLiBBZGRzIHRoZVxuXHRcdCAqICAgICBhYmlsaXR5IHRvIHJlc2NoZWR1bGUgdGhlIHN0b3AgbWV0aG9kLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvQnVmZmVyfFRvbmUuQnVmZmVyfSAgYnVmZmVyICAgVGhlIGJ1ZmZlciB0byBwbGF5XG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgb25sb2FkICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIGlzIGRvbmUgcGxheWluZy5cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5Pc2NpbGxhdG9yTm9kZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRoZVxuXHRcdFx0ICogIGJ1ZmZlciBzb3VyY2UgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBvcHRpb25zLm9uZW5kZWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3Igc3RhcnQgdGltZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvciBzdG9wIHRpbWVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBub2RlIHdoaWNoIGVudmVsb3BlcyB0aGUgT3NjaWxsYXRvck5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSAge09zY2lsbGF0b3JOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gdGhpcy5jb250ZXh0LmNyZWF0ZU9zY2lsbGF0b3IoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvbm5lY3QodGhpcy5fZ2Fpbk5vZGUpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX29zY2lsbGF0b3IuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS52YWx1ZSA9IG9wdGlvbnMuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fb3NjaWxsYXRvci5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUudmFsdWUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgdGhhdCB0aGUgYnVmZmVyIHJhbXBzIHRvXG5cdFx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSAxO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT3NjaWxsYXRvck5vZGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdvbmVuZGVkJzogVG9uZS5ub09wXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBvc2NpbGxhdG9yLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvck5vZGUjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBwbGF5YmFjayBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gdGVzdCB0aGUgc3RhdGUgYXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuU3RhdGV9ICBUaGUgcGxheWJhY2sgc3RhdGUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSAmJiB0aW1lID49IHRoaXMuX3N0YXJ0VGltZSAmJiAodGhpcy5fc3RvcFRpbWUgPT09IC0xIHx8IHRpbWUgPD0gdGhpcy5fc3RvcFRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0YXJ0ZWQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdCAgICAgKiBTdGFydCB0aGUgb3NjaWxsYXRvciBub2RlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSBXaGVuIHRvIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgKiBAcmV0dXJuIHtPc2NpbGxhdG9yTm9kZX0gICAgICB0aGlzXG5cdCAgICAgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lID09PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydCh0aGlzLl9zdGFydFRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhub3cpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgdGhpcy5fc3RhcnRUaW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBjYWxsIE9zY2lsbGF0b3JOb2RlLnN0YXJ0IG1vcmUgdGhhbiBvbmNlJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHQgICAgICogU2V0cyBhbiBhcmJpdHJhcnkgY3VzdG9tIHBlcmlvZGljIHdhdmVmb3JtIGdpdmVuIGEgUGVyaW9kaWNXYXZlLlxuXHQgICAgICogQHBhcmFtICB7UGVyaW9kaWNXYXZlfSBwZXJpb2RpY1dhdmUgUGVyaW9kaWNXYXZlIHNob3VsZCBiZSBjcmVhdGVkIHdpdGggY29udGV4dC5jcmVhdGVQZXJpb2RpY1dhdmVcblx0ICAgICAqIEByZXR1cm4ge09zY2lsbGF0b3JOb2RlfSB0aGlzXG5cdCAgICAgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFBlcmlvZGljV2F2ZSA9IGZ1bmN0aW9uIChwZXJpb2RpY1dhdmUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNldFBlcmlvZGljV2F2ZShwZXJpb2RpY1dhdmUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHQgICAgICogU3RvcCB0aGUgb3NjaWxsYXRvciBub2RlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSBXaGVuIHRvIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAqIEByZXR1cm4ge09zY2lsbGF0b3JOb2RlfSAgICAgIHRoaXNcblx0ICAgICAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9jYW5jZWwgdGhlIHByZXZpb3VzIHN0b3Bcblx0ICAgICAgICB0aGlzLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICAvL3Jlc2NoZWR1bGUgaXRcblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGhpcy5fc3RvcFRpbWUpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dCA9IHRoaXMuY29udGV4dC5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdG9wKHRoaXMubm93KCkpO1xuXHQgICAgICAgICAgICB0aGlzLm9uZW5kZWQoKTtcblx0ICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMuX3N0b3BUaW1lIC0gdGhpcy5ub3coKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBhIHNjaGVkdWxlZCBzdG9wIGV2ZW50XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk9zY2lsbGF0b3JOb2RlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuY2FuY2VsU3RvcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCB0aGUgc3RvcCBlbnZlbG9wZVxuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aGlzLl9zdGFydFRpbWUgKyB0aGlzLnNhbXBsZVRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDEsIE1hdGgubWF4KHRoaXMubm93KCksIHRoaXMuX3N0YXJ0VGltZSkpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3NjaWxsYXRvciB0eXBlLiBFaXRoZXIgJ3NpbmUnLCAnc2F3dG9vdGgnLCAnc3F1YXJlJywgb3IgJ3RyaWFuZ2xlJ1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3JOb2RlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk9zY2lsbGF0b3JOb2RlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5vbmVuZGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Pc2NpbGxhdG9yTm9kZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuT3NjaWxsYXRvciBzdXBwb3J0cyBhIG51bWJlciBvZiBmZWF0dXJlcyBpbmNsdWRpbmdcblx0XHQgKiAgICAgICAgIHBoYXNlIHJvdGF0aW9uLCBtdWx0aXBsZSBvc2NpbGxhdG9yIHR5cGVzIChzZWUgVG9uZS5Pc2NpbGxhdG9yLnR5cGUpLFxuXHRcdCAqICAgICAgICAgYW5kIFRyYW5zcG9ydCBzeW5jaW5nIChzZWUgVG9uZS5Pc2NpbGxhdG9yLnN5bmNGcmVxdWVuY3kpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZnJlcXVlbmN5XSBTdGFydGluZyBmcmVxdWVuY3lcblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IFt0eXBlXSBUaGUgb3NjaWxsYXRvciB0eXBlLiBSZWFkIG1vcmUgYWJvdXQgdHlwZSBiZWxvdy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL21ha2UgYW5kIHN0YXJ0IGEgNDQwaHogc2luZSB0b25lXG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoNDQwLCBcInNpbmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWFpbiBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge09zY2lsbGF0b3JOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBlcmlvZGljIHdhdmVcblx0XHRcdCAqICBAdHlwZSB7UGVyaW9kaWNXYXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl93YXZlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGFydGlhbHMgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMucGFydGlhbHMsIFsxXSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgYmV0d2VlbiAwIC0gMzYwXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge3N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG51bGw7XG5cdCAgICAgICAgLy9zZXR1cFxuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5fcGhhc2U7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdwYXJ0aWFscyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBPc2NpbGxhdG9yIHR5cGVzXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IuVHlwZSA9IHtcblx0ICAgICAgICBTaW5lOiAnc2luZScsXG5cdCAgICAgICAgVHJpYW5nbGU6ICd0cmlhbmdsZScsXG5cdCAgICAgICAgU2F3dG9vdGg6ICdzYXd0b290aCcsXG5cdCAgICAgICAgU3F1YXJlOiAnc3F1YXJlJyxcblx0ICAgICAgICBDdXN0b206ICdjdXN0b20nXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL25ldyBvc2NpbGxhdG9yIHdpdGggcHJldmlvdXMgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3JOb2RlKCk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3dhdmUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zZXRQZXJpb2RpY1dhdmUodGhpcy5fd2F2ZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBjb250cm9sIHNpZ25hbCB0byB0aGUgb3NjaWxsYXRvciBmcmVxdWVuY3kgJiBkZXR1bmVcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvcikge1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVzdGFydCB0aGUgb3NjaWxsYXRvci4gRG9lcyBub3Qgc3RvcCB0aGUgb3NjaWxsYXRvciwgYnV0IGluc3RlYWRcblx0XHQgKiBqdXN0IGNhbmNlbHMgYW55IHNjaGVkdWxlZCAnc3RvcCcgZnJvbSBiZWluZyBpbnZva2VkLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lXG5cdFx0ICogQHJldHVybiB7VG9uZS5Pc2NpbGxhdG9yfSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jYW5jZWxTdG9wKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRoaXMudG9TZWNvbmRzKHRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3luYyB0aGUgc2lnbmFsIHRvIHRoZSBUcmFuc3BvcnQncyBicG0uIEFueSBjaGFuZ2VzIHRvIHRoZSB0cmFuc3BvcnRzIGJwbSxcblx0XHQgKiAgd2lsbCBhbHNvIGFmZmVjdCB0aGUgb3NjaWxsYXRvcnMgZnJlcXVlbmN5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gMTIwO1xuXHRcdCAqIG9zYy5mcmVxdWVuY3kudmFsdWUgPSA0NDA7XG5cdFx0ICogLy90aGUgcmF0aW9uIGJldHdlZW4gdGhlIGJwbSBhbmQgdGhlIGZyZXF1ZW5jeSB3aWxsIGJlIG1haW50YWluZWRcblx0XHQgKiBvc2Muc3luY0ZyZXF1ZW5jeSgpO1xuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZSA9IDI0MDtcblx0XHQgKiAvLyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yIGlzIGRvdWJsZWQgdG8gODgwXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLnN5bmNGcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQuc3luY1NpZ25hbCh0aGlzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVuc3luYyB0aGUgb3NjaWxsYXRvcidzIGZyZXF1ZW5jeSBmcm9tIHRoZSBUcmFuc3BvcnQuXG5cdFx0ICogIFNlZSBUb25lLk9zY2lsbGF0b3Iuc3luY0ZyZXF1ZW5jeVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLnVuc3luY0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC51bnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yOiBlaXRoZXIgc2luZSwgc3F1YXJlLCB0cmlhbmdsZSwgb3Igc2F3dG9vdGguIEFsc28gY2FwYWJsZSBvZlxuXHRcdCAqIHNldHRpbmcgdGhlIGZpcnN0IHggbnVtYmVyIG9mIHBhcnRpYWxzIG9mIHRoZSBvc2NpbGxhdG9yLiBGb3IgZXhhbXBsZTogXCJzaW5lNFwiIHdvdWxkXG5cdFx0ICogc2V0IGJlIHRoZSBmaXJzdCA0IHBhcnRpYWxzIG9mIHRoZSBzaW5lIHdhdmUgYW5kIFwidHJpYW5nbGU4XCIgd291bGQgc2V0IHRoZSBmaXJzdFxuXHRcdCAqIDggcGFydGlhbHMgb2YgdGhlIHRyaWFuZ2xlIHdhdmUuXG5cdFx0ICogPGJyPjxicj5cblx0XHQgKiBVc2VzIFBlcmlvZGljV2F2ZSBpbnRlcm5hbGx5IGV2ZW4gZm9yIG5hdGl2ZSB0eXBlcyBzbyB0aGF0IGl0IGNhbiBzZXQgdGhlIHBoYXNlLlxuXHRcdCAqIFBlcmlvZGljV2F2ZSBlcXVhdGlvbnMgYXJlIGZyb20gdGhlXG5cdFx0ICogW1dlYmtpdCBXZWIgQXVkaW8gaW1wbGVtZW50YXRpb25dKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vY29kZXNlYXJjaCNjaHJvbWl1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1NvdXJjZS9tb2R1bGVzL3dlYmF1ZGlvL1BlcmlvZGljV2F2ZS5jcHAmc3E9cGFja2FnZTpjaHJvbWl1bSkuXG5cdFx0ICpcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgaXQgdG8gYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIG9zYy50eXBlID0gXCJzcXVhcmVcIjtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHRoZSBmaXJzdCA2IHBhcnRpYWxzIG9mIGEgc2F3dG9vdGggd2F2ZVxuXHRcdCAqIG9zYy50eXBlID0gXCJzYXd0b290aDZcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0Jhc2ljVHlwZSA9IFtcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNpbmUsXG5cdCAgICAgICAgICAgICAgICBUb25lLk9zY2lsbGF0b3IuVHlwZS5TcXVhcmUsXG5cdCAgICAgICAgICAgICAgICBUb25lLk9zY2lsbGF0b3IuVHlwZS5UcmlhbmdsZSxcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNhd3Rvb3RoXG5cdCAgICAgICAgICAgIF0uaW5jbHVkZXModHlwZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9waGFzZSA9PT0gMCAmJiBpc0Jhc2ljVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd2F2ZSA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICAvL2p1c3QgZ28gd2l0aCB0aGUgYmFzaWMgYXBwcm9hY2hcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID09PSB0eXBlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNvZWZzID0gdGhpcy5fZ2V0UmVhbEltYWdpbmFyeSh0eXBlLCB0aGlzLl9waGFzZSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgcGVyaW9kaWNXYXZlID0gdGhpcy5jb250ZXh0LmNyZWF0ZVBlcmlvZGljV2F2ZShjb2Vmc1swXSwgY29lZnNbMV0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd2F2ZSA9IHBlcmlvZGljV2F2ZTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zZXRQZXJpb2RpY1dhdmUodGhpcy5fd2F2ZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5IGNvbXBvbmVudHMgYmFzZWRcblx0XHQgKiAgb24gdGhlIG9zY2lsbGF0b3IgdHlwZS5cblx0XHQgKiAgQHJldHVybnMge0FycmF5fSBbcmVhbCwgaW1hZ2luYXJ5XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5fZ2V0UmVhbEltYWdpbmFyeSA9IGZ1bmN0aW9uICh0eXBlLCBwaGFzZSkge1xuXHQgICAgICAgIHZhciBmZnRTaXplID0gNDA5Njtcblx0ICAgICAgICB2YXIgcGVyaW9kaWNXYXZlU2l6ZSA9IGZmdFNpemUgLyAyO1xuXHQgICAgICAgIHZhciByZWFsID0gbmV3IEZsb2F0MzJBcnJheShwZXJpb2RpY1dhdmVTaXplKTtcblx0ICAgICAgICB2YXIgaW1hZyA9IG5ldyBGbG9hdDMyQXJyYXkocGVyaW9kaWNXYXZlU2l6ZSk7XG5cdCAgICAgICAgdmFyIHBhcnRpYWxDb3VudCA9IDE7XG5cdCAgICAgICAgaWYgKHR5cGUgPT09IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbSkge1xuXHQgICAgICAgICAgICBwYXJ0aWFsQ291bnQgPSB0aGlzLl9wYXJ0aWFscy5sZW5ndGggKyAxO1xuXHQgICAgICAgICAgICBwZXJpb2RpY1dhdmVTaXplID0gcGFydGlhbENvdW50O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBwYXJ0aWFsID0gL14oc2luZXx0cmlhbmdsZXxzcXVhcmV8c2F3dG9vdGgpKFxcZCspJC8uZXhlYyh0eXBlKTtcblx0ICAgICAgICAgICAgaWYgKHBhcnRpYWwpIHtcblx0ICAgICAgICAgICAgICAgIHBhcnRpYWxDb3VudCA9IHBhcnNlSW50KHBhcnRpYWxbMl0pICsgMTtcblx0ICAgICAgICAgICAgICAgIHR5cGUgPSBwYXJ0aWFsWzFdO1xuXHQgICAgICAgICAgICAgICAgcGFydGlhbENvdW50ID0gTWF0aC5tYXgocGFydGlhbENvdW50LCAyKTtcblx0ICAgICAgICAgICAgICAgIHBlcmlvZGljV2F2ZVNpemUgPSBwYXJ0aWFsQ291bnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgZm9yICh2YXIgbiA9IDE7IG4gPCBwZXJpb2RpY1dhdmVTaXplOyArK24pIHtcblx0ICAgICAgICAgICAgdmFyIHBpRmFjdG9yID0gMiAvIChuICogTWF0aC5QSSk7XG5cdCAgICAgICAgICAgIHZhciBiO1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5TaW5lOlxuXHQgICAgICAgICAgICAgICAgYiA9IG4gPD0gcGFydGlhbENvdW50ID8gMSA6IDA7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5TcXVhcmU6XG5cdCAgICAgICAgICAgICAgICBiID0gbiAmIDEgPyAyICogcGlGYWN0b3IgOiAwO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2F3dG9vdGg6XG5cdCAgICAgICAgICAgICAgICBiID0gcGlGYWN0b3IgKiAobiAmIDEgPyAxIDogLTEpO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuVHJpYW5nbGU6XG5cdCAgICAgICAgICAgICAgICBpZiAobiAmIDEpIHtcblx0ICAgICAgICAgICAgICAgICAgICBiID0gMiAqIChwaUZhY3RvciAqIHBpRmFjdG9yKSAqIChuIC0gMSA+PiAxICYgMSA/IC0xIDogMSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGIgPSAwO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tOlxuXHQgICAgICAgICAgICAgICAgYiA9IHRoaXMuX3BhcnRpYWxzW24gLSAxXTtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5Pc2NpbGxhdG9yOiBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAoYiAhPT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmVhbFtuXSA9IC1iICogTWF0aC5zaW4ocGhhc2UgKiBuKTtcblx0ICAgICAgICAgICAgICAgIGltYWdbbl0gPSBiICogTWF0aC5jb3MocGhhc2UgKiBuKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJlYWxbbl0gPSAwO1xuXHQgICAgICAgICAgICAgICAgaW1hZ1tuXSA9IDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFtcblx0ICAgICAgICAgICAgcmVhbCxcblx0ICAgICAgICAgICAgaW1hZ1xuXHQgICAgICAgIF07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbXB1dGUgdGhlIGludmVyc2UgRkZUIGZvciBhIGdpdmVuIHBoYXNlLlxuXHRcdCAqICBAcGFyYW0gIHtGbG9hdDMyQXJyYXl9ICByZWFsXG5cdFx0ICogIEBwYXJhbSAge0Zsb2F0MzJBcnJheX0gIGltYWdcblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBwaGFzZVxuXHRcdCAqICBAcmV0dXJuICB7QXVkaW9SYW5nZX1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX2ludmVyc2VGRlQgPSBmdW5jdGlvbiAocmVhbCwgaW1hZywgcGhhc2UpIHtcblx0ICAgICAgICB2YXIgc3VtID0gMDtcblx0ICAgICAgICB2YXIgbGVuID0gcmVhbC5sZW5ndGg7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICBzdW0gKz0gcmVhbFtpXSAqIE1hdGguY29zKGkgKiBwaGFzZSkgKyBpbWFnW2ldICogTWF0aC5zaW4oaSAqIHBoYXNlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHN1bTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHJldHVybiAge0F1ZGlvUmFuZ2V9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9nZXRJbml0aWFsVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGNvZWZzID0gdGhpcy5fZ2V0UmVhbEltYWdpbmFyeSh0aGlzLl90eXBlLCAwKTtcblx0ICAgICAgICB2YXIgcmVhbCA9IGNvZWZzWzBdO1xuXHQgICAgICAgIHZhciBpbWFnID0gY29lZnNbMV07XG5cdCAgICAgICAgdmFyIG1heFZhbHVlID0gMDtcblx0ICAgICAgICB2YXIgdHdvUGkgPSBNYXRoLlBJICogMjtcblx0ICAgICAgICAvL2NoZWNrIGZvciBwZWFrcyBpbiA4IHBsYWNlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgIG1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5faW52ZXJzZUZGVChyZWFsLCBpbWFnLCBpIC8gOCAqIHR3b1BpKSwgbWF4VmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gLXRoaXMuX2ludmVyc2VGRlQocmVhbCwgaW1hZywgdGhpcy5fcGhhc2UpIC8gbWF4VmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlICE9PSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b20pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBbXTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJ0aWFscztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBoYXNlID0gMTgwOyAvL2ZsaXBzIHRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BoYXNlICogKDE4MCAvIE1hdGguUEkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGhhc2UgPSBwaGFzZSAqIE1hdGguUEkgLyAxODA7XG5cdCAgICAgICAgICAgIC8vcmVzZXQgdGhlIHR5cGVcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBEaXNwb3NlIGFuZCBkaXNjb25uZWN0LlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fd2F2ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBdWRpb1RvR2FpbiBjb252ZXJ0cyBhbiBpbnB1dCBpbiBBdWRpb1JhbmdlIFstMSwxXSB0byBOb3JtYWxSYW5nZSBbMCwxXS4gXG5cdFx0ICogICAgICAgICBTZWUgVG9uZS5HYWluVG9BdWRpby5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGEyZyA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvVG9HYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICh4ICsgMSkgLyAyO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXVkaW9Ub0dhaW4sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ub0dhaW59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ub0dhaW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbm9ybS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXVkaW9Ub0dhaW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5aZXJvIG91dHB1dHMgMCdzIGF0IGF1ZGlvLXJhdGUuIFRoZSByZWFzb24gdGhpcyBoYXMgdG8gYmVcblx0XHQgKiAgICAgICAgIGl0J3Mgb3duIGNsYXNzIGlzIHRoYXQgbWFueSBicm93c2VycyBvcHRpbWl6ZSBvdXQgVG9uZS5TaWduYWxcblx0XHQgKiAgICAgICAgIHdpdGggYSB2YWx1ZSBvZiAwIGFuZCB3aWxsIG5vdCBwcm9jZXNzIG5vZGVzIGZ1cnRoZXIgZG93biB0aGUgZ3JhcGguXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLlplcm8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5nZXRDb25zdGFudCgwKS5jb25uZWN0KHRoaXMuX2dhaW4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuWmVybywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5aZXJvfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5aZXJvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2dhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlplcm87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgTEZPIHN0YW5kcyBmb3IgbG93IGZyZXF1ZW5jeSBvc2NpbGxhdG9yLiBUb25lLkxGTyBwcm9kdWNlcyBhbiBvdXRwdXQgc2lnbmFsXG5cdFx0ICogICAgICAgICAgd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHRvIGFuIEF1ZGlvUGFyYW0gb3IgVG9uZS5TaWduYWxcblx0XHQgKiAgICAgICAgICBpbiBvcmRlciB0byBtb2R1bGF0ZSB0aGF0IHBhcmFtZXRlciB3aXRoIGFuIG9zY2lsbGF0b3IuIFRoZSBMRk8gY2FuXG5cdFx0ICogICAgICAgICAgYWxzbyBiZSBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydCB0byBzdGFydC9zdG9wIGFuZCBjaGFuZ2Ugd2hlbiB0aGUgdGVtcG8gY2hhbmdlcy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0aW9uLiBUeXBpY2FsbHksIExGT3Mgd2lsbCBiZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBmcmVxdWVuY3kgcmFuZ2Ugb2YgMC4xIHRvIDEwIGhlcnR6LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IG1pbiBUaGUgbWluaW11bSBvdXRwdXQgdmFsdWUgb2YgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSBtYXggVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIExGTy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbGZvID0gbmV3IFRvbmUuTEZPKFwiNG5cIiwgNDAwLCA0MDAwKTtcblx0XHQgKiBsZm8uY29ubmVjdChmaWx0ZXIuZnJlcXVlbmN5KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdtaW4nLFxuXHQgICAgICAgICAgICAnbWF4J1xuXHQgICAgICAgIF0sIFRvbmUuTEZPKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAndHlwZSc6IG9wdGlvbnMudHlwZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8ncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgYW1wbGl0dWRlIG9mIHRoZSBMRk8sIHdoaWNoIGNvbnRyb2xzIHRoZSBvdXRwdXQgcmFuZ2UgYmV0d2VlblxuXHRcdFx0ICogdGhlIG1pbiBhbmQgbWF4IG91dHB1dC4gRm9yIGV4YW1wbGUgaWYgdGhlIG1pbiBpcyAtMTAgYW5kIHRoZSBtYXhcblx0XHRcdCAqIGlzIDEwLCBzZXR0aW5nIHRoZSBhbXBsaXR1ZGUgdG8gMC41IHdvdWxkIG1ha2UgdGhlIExGTyBtb2R1bGF0ZVxuXHRcdFx0ICogYmV0d2VlbiAtNSBhbmQgNS5cblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmFtcGxpdHVkZSA9IHRoaXMuX29zY2lsbGF0b3Iudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlLnVuaXRzID0gVG9uZS5UeXBlLk5vcm1hbFJhbmdlO1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlLnZhbHVlID0gb3B0aW9ucy5hbXBsaXR1ZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZ25hbCB3aGljaCBpcyBvdXRwdXQgd2hlbiB0aGUgTEZPIGlzIHN0b3BwZWRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDAsIFRvbmUuVHlwZS5BdWRpb1JhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBKdXN0IG91dHB1dHMgemVyb3MuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuWmVyb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5femVyb3MgPSBuZXcgVG9uZS5aZXJvKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHRoYXQgdGhlIExGTyBvdXRwdXRzIHdoZW4gaXQncyBzdG9wcGVkXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRWYWx1ZSA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQXVkaW9Ub0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2EyZyA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlciA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2NhbGUob3B0aW9ucy5taW4sIG9wdGlvbnMubWF4KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdW5pdHMgb2YgdGhlIExGTyAodXNlZCBmb3IgY29udmVydGluZylcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UeXBlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl91bml0cyA9IFRvbmUuVHlwZS5EZWZhdWx0O1xuXHQgICAgICAgIHRoaXMudW5pdHMgPSBvcHRpb25zLnVuaXRzO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY2hhaW4odGhpcy5fYTJnLCB0aGlzLl9zY2FsZXIpO1xuXHQgICAgICAgIHRoaXMuX3plcm9zLmNvbm5lY3QodGhpcy5fYTJnKTtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLmNvbm5lY3QodGhpcy5fYTJnKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdhbXBsaXR1ZGUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMucGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTEZPLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdmcmVxdWVuY3knOiAnNG4nLFxuXHQgICAgICAgICdhbXBsaXR1ZGUnOiAxLFxuXHQgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWZhdWx0XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIExGTyB3aWxsIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIExGTyB3aWxsIHN0b3Bcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuc2V0VmFsdWVBdFRpbWUodGhpcy5fc3RvcHBlZFZhbHVlLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN5bmMgdGhlIHN0YXJ0L3N0b3AvcGF1c2UgdG8gdGhlIHRyYW5zcG9ydFxuXHRcdCAqICBhbmQgdGhlIGZyZXF1ZW5jeSB0byB0aGUgYnBtIG9mIHRoZSB0cmFuc3BvcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIGxmby5mcmVxdWVuY3kudmFsdWUgPSBcIjhuXCI7XG5cdFx0ICogIGxmby5zeW5jKCkuc3RhcnQoMClcblx0XHQgKiAgLy90aGUgcmF0ZSBvZiB0aGUgTEZPIHdpbGwgYWx3YXlzIGJlIGFuIGVpZ2h0aCBub3RlLFxuXHRcdCAqICAvL2V2ZW4gYXMgdGhlIHRlbXBvIGNoYW5nZXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3luY0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB1bnN5bmMgdGhlIExGTyBmcm9tIHRyYW5zcG9ydCBjb250cm9sXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnVuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudW5zeW5jRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbml1bXVtIG91dHB1dCBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvVW5pdHModGhpcy5fc2NhbGVyLm1pbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgbWluID0gdGhpcy5fZnJvbVVuaXRzKG1pbik7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlci5taW4gPSBtaW47XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90b1VuaXRzKHRoaXMuX3NjYWxlci5tYXgpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIG1heCA9IHRoaXMuX2Zyb21Vbml0cyhtYXgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZXIubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3I6IHNpbmUsIHNxdWFyZSwgc2F3dG9vdGgsIHRyaWFuZ2xlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkVmFsdWUgPSB0aGlzLl9vc2NpbGxhdG9yLl9nZXRJbml0aWFsVmFsdWUoKTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC52YWx1ZSA9IHRoaXMuX3N0b3BwZWRWYWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkVmFsdWUgPSB0aGlzLl9vc2NpbGxhdG9yLl9nZXRJbml0aWFsVmFsdWUoKTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC52YWx1ZSA9IHRoaXMuX3N0b3BwZWRWYWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvdXRwdXQgdW5pdHMgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge1RvbmUuVHlwZX1cblx0XHQgKiBAbmFtZSB1bml0c1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3VuaXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdW5pdHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdmFyIGN1cnJlbnRNaW4gPSB0aGlzLm1pbjtcblx0ICAgICAgICAgICAgdmFyIGN1cnJlbnRNYXggPSB0aGlzLm1heDtcblx0ICAgICAgICAgICAgLy9jb252ZXJ0IHRoZSBtaW4gYW5kIHRoZSBtYXhcblx0ICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB2YWw7XG5cdCAgICAgICAgICAgIHRoaXMubWluID0gY3VycmVudE1pbjtcblx0ICAgICAgICAgICAgdGhpcy5tYXggPSBjdXJyZW50TWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5zdGF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhlIExGTyB0byBhbiBBdWRpb1BhcmFtLCBBdWRpb05vZGUsIG9yIFRvbmUgTm9kZS5cblx0XHQgKiAgVG9uZS5MRk8gd2lsbCBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgdG8gdGhlIGRlc3RpbmF0aW9uIHVuaXRzIG9mIHRoZVxuXHRcdCAqICB3aWxsIGdldCB0aGUgdW5pdHMgZnJvbSB0aGUgY29ubmVjdGVkIG5vZGUuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUgfCBBdWRpb1BhcmFtIHwgQXVkaW9Ob2RlfSBub2RlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TnVtPTBdIG9wdGlvbmFsbHkgd2hpY2ggb3V0cHV0IHRvIGNvbm5lY3QgZnJvbVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2lucHV0TnVtPTBdIG9wdGlvbmFsbHkgd2hpY2ggaW5wdXQgdG8gY29ubmVjdCB0b1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAobm9kZS5jb25zdHJ1Y3RvciA9PT0gVG9uZS5TaWduYWwgfHwgbm9kZS5jb25zdHJ1Y3RvciA9PT0gVG9uZS5QYXJhbSkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnZlcnQgPSBub2RlLmNvbnZlcnQ7XG5cdCAgICAgICAgICAgIHRoaXMudW5pdHMgPSBub2RlLnVuaXRzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcHJpdmF0ZSBtZXRob2QgYm9ycm93ZWQgZnJvbSBQYXJhbSBjb252ZXJ0c1xuXHRcdCAqICB1bml0cyBmcm9tIHRoZWlyIGRlc3RpbmF0aW9uIHZhbHVlXG5cdFx0ICogIEBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLl9mcm9tVW5pdHMgPSBUb25lLlBhcmFtLnByb3RvdHlwZS5fZnJvbVVuaXRzO1xuXHQgICAgLyoqXG5cdFx0ICogIHByaXZhdGUgbWV0aG9kIGJvcnJvd2VkIGZyb20gUGFyYW0gY29udmVydHNcblx0XHQgKiAgdW5pdHMgdG8gdGhlaXIgZGVzdGluYXRpb24gdmFsdWVcblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuX3RvVW5pdHMgPSBUb25lLlBhcmFtLnByb3RvdHlwZS5fdG9Vbml0cztcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNjb25uZWN0IGFuZCBkaXNwb3NlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdhbXBsaXR1ZGUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3plcm9zLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl96ZXJvcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2EyZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYTJnID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkxGTztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTGltaXRlciB3aWxsIGxpbWl0IHRoZSBsb3VkbmVzcyBvZiBhbiBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogICAgICAgICBJdCBpcyBjb21wb3NlZCBvZiBhIFRvbmUuQ29tcHJlc3NvciB3aXRoIGEgZmFzdCBhdHRhY2tcblx0XHQgKiAgICAgICAgIGFuZCByZWxlYXNlLiBMaW1pdGVycyBhcmUgY29tbW9ubHkgdXNlZCB0byBzYWZlZ3VhcmQgYWdhaW5zdFxuXHRcdCAqICAgICAgICAgc2lnbmFsIGNsaXBwaW5nLiBVbmxpa2UgYSBjb21wcmVzc29yLCBsaW1pdGVycyBkbyBub3QgcHJvdmlkZVxuXHRcdCAqICAgICAgICAgc21vb3RoIGdhaW4gcmVkdWN0aW9uIGFuZCBhbG1vc3QgY29tcGxldGVseSBwcmV2ZW50XG5cdFx0ICogICAgICAgICBhZGRpdGlvbmFsIGdhaW4gYWJvdmUgdGhlIHRocmVzaG9sZC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGhyZXNob2xkIFRoZSB0aGVzaG9sZCBhYm92ZSB3aGljaCB0aGUgbGltaXRpbmcgaXMgYXBwbGllZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGxpbWl0ZXIgPSBuZXcgVG9uZS5MaW1pdGVyKC02KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTGltaXRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3RocmVzaG9sZCddLCBUb25lLkxpbWl0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbXByZXNzb3Jcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuQ29tcHJlc3Nvcih7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4wMDEsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnOiBvcHRpb25zLnRocmVzaG9sZFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHRocmVzaG9sZCBvZiBvZiB0aGUgbGltaXRlclxuXHRcdFx0ICogQHR5cGUge0RlY2liZWx9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IHRoaXMuX2NvbXByZXNzb3IudGhyZXNob2xkO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd0aHJlc2hvbGQnKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxpbWl0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZVxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaW1pdGVyLmRlZmF1bHRzID0geyAndGhyZXNob2xkJzogLTEyIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxpbWl0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGltaXRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd0aHJlc2hvbGQnKTtcblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTGltaXRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTG93cGFzcyBpcyBhIGxvd3Bhc3MgZmVlZGJhY2sgY29tYiBmaWx0ZXIuIEl0IGlzIHNpbWlsYXIgdG9cblx0XHQgKiAgICAgICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLCBidXQgaW5jbHVkZXMgYSBsb3dwYXNzIGZpbHRlci5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgdGltZSBvZiB0aGUgY29tYiBmaWx0ZXJcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZT19IHJlc29uYW5jZSBUaGUgcmVzb25hbmNlIChmZWVkYmFjaykgb2YgdGhlIGNvbWIgZmlsdGVyXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5PX0gZGFtcGVuaW5nIFRoZSBjdXRvZmYgb2YgdGhlIGxvd3Bhc3MgZmlsdGVyIGRhbXBlbnMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbCBhcyBpdCBpcyBmZWRiYWNrLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdLCBUb25lLkxvd3Bhc3NDb21iRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLkRlbGF5KG9wdGlvbnMuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXlUaW1lIG9mIHRoZSBjb21iIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IHRoaXMuX2RlbGF5LmRlbGF5VGltZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbG93cGFzcyBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSAge0JpcXVhZEZpbHRlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICB0aGlzLl9sb3dwYXNzLlEudmFsdWUgPSAtMy4wMTAyOTk5NTY2Mzk4MTI1O1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MudHlwZSA9ICdsb3dwYXNzJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGFtcGVuaW5nIGNvbnRyb2wgb2YgdGhlIGZlZWRiYWNrXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fbG93cGFzcy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5GcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZGFtcGVuaW5nXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZlZWRiYWNrIGdhaW5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5yZXNvbmFuY2UsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBmZWVkYmFjayBvZiB0aGUgZGVsYXllZCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gdGhpcy5fZmVlZGJhY2suZ2Fpbjtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fZGVsYXkuY2hhaW4odGhpcy5fbG93cGFzcywgdGhpcy5fZmVlZGJhY2ssIHRoaXMuX2RlbGF5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxvd3Bhc3NDb21iRmlsdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4xLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiAwLjUsXG5cdCAgICAgICAgJ2RhbXBlbmluZyc6IDMwMDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxvd3Bhc3NDb21iRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvd3Bhc3NDb21iRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJyxcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5NZXJnZSBicmluZ3MgdHdvIHNpZ25hbHMgaW50byB0aGUgbGVmdCBhbmQgcmlnaHRcblx0XHQgKiAgICAgICAgICBjaGFubmVscyBvZiBhIHNpbmdsZSBzdGVyZW8gY2hhbm5lbC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtZXJnZSA9IG5ldyBUb25lLk1lcmdlKCkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3JvdXRpbmcgYSBzaW5lIHRvbmUgaW4gdGhlIGxlZnQgY2hhbm5lbFxuXHRcdCAqIC8vYW5kIG5vaXNlIGluIHRoZSByaWdodCBjaGFubmVsXG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KG1lcmdlLmxlZnQpO1xuXHRcdCAqIHZhciBub2lzZSA9IG5ldyBUb25lLk5vaXNlKCkuY29ubmVjdChtZXJnZS5yaWdodCk7XG5cdFx0ICogLy9zdGFydGluZyBvdXIgb3NjaWxsYXRvcnNcblx0XHQgKiBub2lzZS5zdGFydCgpO1xuXHRcdCAqIG9zYy5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXJnZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbGVmdCBpbnB1dCBjaGFubmVsLlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByaWdodCBpbnB1dCBjaGFubmVsLlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFsxXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yaWdodCA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1lcmdlciBub2RlIGZvciB0aGUgdHdvIGNoYW5uZWxzXG5cdFx0XHQgKiAgQHR5cGUge0NoYW5uZWxNZXJnZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZXIgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVDaGFubmVsTWVyZ2VyKDIpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmxlZnQuY29ubmVjdCh0aGlzLl9tZXJnZXIsIDAsIDApO1xuXHQgICAgICAgIHRoaXMucmlnaHQuY29ubmVjdCh0aGlzLl9tZXJnZXIsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMubGVmdC5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgIHRoaXMucmlnaHQuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICB0aGlzLmxlZnQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgdGhpcy5yaWdodC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1lcmdlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lcmdlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1lcmdlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21lcmdlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2VyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZXJnZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1ldGVyIGdldHMgdGhlIFtSTVNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Jvb3RfbWVhbl9zcXVhcmUpXG5cdFx0ICogICAgICAgICAgb2YgYW4gaW5wdXQgc2lnbmFsIHdpdGggc29tZSBhdmVyYWdpbmcgYXBwbGllZC4gSXQgY2FuIGFsc28gZ2V0IHRoZSByYXdcblx0XHQgKiAgICAgICAgICB2YWx1ZSBvZiB0aGUgaW5wdXQgc2lnbmFsLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBzbW9vdGhpbmcgVGhlIGFtb3VudCBvZiBzbW9vdGhpbmcgYXBwbGllZCBiZXR3ZWVuIGZyYW1lcy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbWV0ZXIgPSBuZXcgVG9uZS5NZXRlcigpO1xuXHRcdCAqIHZhciBtaWMgPSBuZXcgVG9uZS5Vc2VyTWVkaWEoKS5vcGVuKCk7XG5cdFx0ICogLy9jb25uZWN0IG1pYyB0byB0aGUgbWV0ZXJcblx0XHQgKiBtaWMuY29ubmVjdChtZXRlcik7XG5cdFx0ICogLy90aGUgY3VycmVudCBsZXZlbCBvZiB0aGUgbWljIGlucHV0IGluIGRlY2liZWxzXG5cdFx0ICogdmFyIGxldmVsID0gbWV0ZXIuZ2V0VmFsdWUoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzbW9vdGhpbmcnXSwgVG9uZS5NZXRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZSB3aGljaCBjb21wdXRlcyB0aGUgbGV2ZWxzLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkFuYWx5c2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5fYW5hbHlzZXIgPSBuZXcgVG9uZS5BbmFseXNlcignd2F2ZWZvcm0nLCAxMDI0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGNhcnJ5b3ZlciBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCBsYXN0IGZyYW1lLlxuXHRcdFx0ICogIE9ubHkgYXBwbGllZCBtZXRlciBmb3IgXCJsZXZlbFwiIHR5cGUuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNtb290aGluZyA9IG9wdGlvbnMuc21vb3RoaW5nO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWV0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIuZGVmYXVsdHMgPSB7ICdzbW9vdGhpbmcnOiAwLjggfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGN1cnJlbnQgZGVjaWJlbCB2YWx1ZSBvZiB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogIEByZXR1cm5zIHtEZWNpYmVsc31cblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIucHJvdG90eXBlLmdldExldmVsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLnR5cGUgPSAnZmZ0Jztcblx0ICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgICAgICB2YXIgb2Zmc2V0ID0gMjg7XG5cdCAgICAgICAgLy8gbm9ybWFsaXplcyBtb3N0IHNpZ25hbCBsZXZlbHNcblx0ICAgICAgICAvLyBUT0RPOiBjb21wdXRlIGxvdWRuZXNzIGZyb20gRkZUXG5cdCAgICAgICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KHRoaXMsIHZhbHVlcykgKyBvZmZzZXQ7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc2lnbmFsIHZhbHVlIG9mIHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgQHJldHVybnMge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLnR5cGUgPSAnd2F2ZWZvcm0nO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX2FuYWx5c2VyLmdldFZhbHVlKCk7XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlWzBdO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEEgdmFsdWUgZnJvbSAwIC0+IDEgd2hlcmUgMCByZXByZXNlbnRzIG5vIHRpbWUgYXZlcmFnaW5nIHdpdGggdGhlIGxhc3QgYW5hbHlzaXMgZnJhbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTWV0ZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBzbW9vdGhpbmdcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGVyLnByb3RvdHlwZSwgJ3Ntb290aGluZycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zbW9vdGhpbmcgPSB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1ldGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZXRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKlx0QGNsYXNzICBUb25lLlNwbGl0IHNwbGl0cyBhbiBpbmNvbWluZyBzaWduYWwgaW50byBsZWZ0IGFuZCByaWdodCBjaGFubmVscy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzcGxpdCA9IG5ldyBUb25lLlNwbGl0KCk7XG5cdFx0ICogc3RlcmVvU2lnbmFsLmNvbm5lY3Qoc3BsaXQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TcGxpdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygwLCAyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7Q2hhbm5lbFNwbGl0dGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNoYW5uZWxTcGxpdHRlcigyKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jaGFubmVsQ291bnQgPSAyO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIExlZnQgY2hhbm5lbCBvdXRwdXQuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPm91dHB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5vdXRwdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgUmlnaHQgY2hhbm5lbCBvdXRwdXQuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPm91dHB1dFsxXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yaWdodCA9IHRoaXMub3V0cHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jb25uZWN0KHRoaXMubGVmdCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuY29ubmVjdCh0aGlzLnJpZ2h0LCAxLCAwKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNwbGl0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNwbGl0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNwbGl0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMubGVmdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJpZ2h0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3BsaXQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBNaWQvU2lkZSBwcm9jZXNzaW5nIHNlcGFyYXRlcyB0aGUgdGhlICdtaWQnIHNpZ25hbFxuXHRcdCAqICAgICAgICAgKHdoaWNoIGNvbWVzIG91dCBvZiBib3RoIHRoZSBsZWZ0IGFuZCB0aGUgcmlnaHQgY2hhbm5lbClcblx0XHQgKiAgICAgICAgIGFuZCB0aGUgJ3NpZGUnICh3aGljaCBvbmx5IGNvbWVzIG91dCBvZiB0aGUgdGhlIHNpZGUgY2hhbm5lbHMpLiA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgPGNvZGU+XG5cdFx0ICogICAgICAgICBNaWQgPSAoTGVmdCtSaWdodCkvc3FydCgyKTsgICAvLyBvYnRhaW4gbWlkLXNpZ25hbCBmcm9tIGxlZnQgYW5kIHJpZ2h0PGJyPlxuXHRcdCAqICAgICAgICAgU2lkZSA9IChMZWZ0LVJpZ2h0KS9zcXJ0KDIpOyAgIC8vIG9idGFpbiBzaWRlLXNpZ25hbCBmcm9tIGxlZnQgYW5kIHJpZ2g8YnI+XG5cdFx0ICogICAgICAgICA8L2NvZGU+XG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZVNwbGl0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDAsIDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWwgaW50byBsZWZ0IGFuZCByaWdodCBjaGFubmVsc1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHNlbmQuIENvbm5lY3QgdG8gbWlkIHByb2Nlc3NpbmcuIEFsaWFzIGZvclxuXHRcdFx0ICogIDxjb2RlPm91dHB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRBZGQgPSBuZXcgVG9uZS5BZGQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIE11bHRpcGx5IHRoZSBfbWlkQWRkIGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMub3V0cHV0WzBdID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSBvdXRwdXQuIENvbm5lY3QgdG8gc2lkZSBwcm9jZXNzaW5nLiBBbHNvIE91dHB1dCAxXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaWRlU3VidHJhY3QgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIF9taWRBZGQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IHRoaXMub3V0cHV0WzFdID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX21pZEFkZCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuY29ubmVjdCh0aGlzLl9taWRBZGQsIDEsIDEpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fc2lkZVN1YnRyYWN0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX3NpZGVTdWJ0cmFjdCwgMSwgMSk7XG5cdCAgICAgICAgdGhpcy5fbWlkQWRkLmNvbm5lY3QodGhpcy5taWQpO1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdC5jb25uZWN0KHRoaXMuc2lkZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRTaWRlU3BsaXQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlU3BsaXR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZVNwbGl0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkQWRkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRBZGQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVTcGxpdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1pZC9TaWRlIHByb2Nlc3Npbmcgc2VwYXJhdGVzIHRoZSB0aGUgJ21pZCcgc2lnbmFsXG5cdFx0ICogICAgICAgICAod2hpY2ggY29tZXMgb3V0IG9mIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBjaGFubmVsKVxuXHRcdCAqICAgICAgICAgYW5kIHRoZSAnc2lkZScgKHdoaWNoIG9ubHkgY29tZXMgb3V0IG9mIHRoZSB0aGUgc2lkZSBjaGFubmVscykuXG5cdFx0ICogICAgICAgICBNaWRTaWRlTWVyZ2UgbWVyZ2VzIHRoZSBtaWQgYW5kIHNpZGUgc2lnbmFsIGFmdGVyIHRoZXkndmUgYmVlbiBzZXBlcmF0ZWRcblx0XHQgKiAgICAgICAgIGJ5IFRvbmUuTWlkU2lkZVNwbGl0Ljxicj48YnI+XG5cdFx0ICogICAgICAgICA8Y29kZT5cblx0XHQgKiAgICAgICAgIExlZnQgPSAoTWlkK1NpZGUpL3NxcnQoMik7ICAgLy8gb2J0YWluIGxlZnQgc2lnbmFsIGZyb20gbWlkIGFuZCBzaWRlPGJyPlxuXHRcdCAqICAgICAgICAgUmlnaHQgPSAoTWlkLVNpZGUpL3NxcnQoMik7ICAgLy8gb2J0YWluIHJpZ2h0IHNpZ25hbCBmcm9tIG1pZCBhbmQgc2lkZTxicj5cblx0XHQgKiAgICAgICAgIDwvY29kZT5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlTWVyZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBzaWduYWwgaW5wdXQuIEFsaWFzIGZvclxuXHRcdFx0ICogIDxjb2RlPmlucHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJlY29tYmluZSB0aGUgbWlkL3NpZGUgaW50byBMZWZ0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWRkfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbmV3IFRvbmUuQWRkKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgbGVmdCBieSBzcXJ0KDEvMilcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29MZWZ0ID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSBzaWduYWwgaW5wdXQuIEFsaWFzIGZvclxuXHRcdFx0ICogIDxjb2RlPmlucHV0WzFdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICByZWNvbWJpbmUgdGhlIG1pZC9zaWRlIGludG8gUmlnaHRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIHJpZ2h0IGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0ID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBNZXJnZSB0aGUgbGVmdC9yaWdodCBzaWduYWwgYmFjayBpbnRvIGEgc3RlcmVvIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgdGhpcy5taWQuY29ubmVjdCh0aGlzLl9sZWZ0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLnNpZGUuY29ubmVjdCh0aGlzLl9sZWZ0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLm1pZC5jb25uZWN0KHRoaXMuX3JpZ2h0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLnNpZGUuY29ubmVjdCh0aGlzLl9yaWdodCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fbGVmdC5jb25uZWN0KHRoaXMuX3RpbWVzVHdvTGVmdCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQuY29ubmVjdCh0aGlzLl90aW1lc1R3b1JpZ2h0KTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQuY29ubmVjdCh0aGlzLl9tZXJnZSwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29SaWdodC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAxKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVNZXJnZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1pZFNpZGVNZXJnZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlTWVyZ2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5zaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVNZXJnZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IgYXBwbGllcyB0d28gZGlmZmVyZW50IGNvbXByZXNzb3JzIHRvIHRoZSBtaWRcblx0XHQgKiAgICAgICAgIGFuZCBzaWRlIHNpZ25hbCBjb21wb25lbnRzLiBTZWUgVG9uZS5NaWRTaWRlU3BsaXQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgb3B0aW9ucyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIG1pZCBhbmQgc2lkZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc29ycy5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVDb21wcmVzc29yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5NaWRTaWRlQ29tcHJlc3Nvci5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1pZC9zaWRlIHNwbGl0XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVTcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk1pZFNpZGVTcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtaWQvc2lkZSByZWNvbWJpbmF0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVNZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NaWRTaWRlTWVyZ2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBtaWQgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5taWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIHNpZGUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGUgPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMuc2lkZSk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0Lm1pZC5jaGFpbih0aGlzLm1pZCwgdGhpcy5fbWlkU2lkZU1lcmdlLm1pZCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0LnNpZGUuY2hhaW4odGhpcy5zaWRlLCB0aGlzLl9taWRTaWRlTWVyZ2Uuc2lkZSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ3NpZGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRTaWRlQ29tcHJlc3NvciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVDb21wcmVzc29yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtaWQnOiB7XG5cdCAgICAgICAgICAgICdyYXRpbyc6IDMsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnOiAtMjQsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC4wMyxcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDIsXG5cdCAgICAgICAgICAgICdrbmVlJzogMTZcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdzaWRlJzoge1xuXHQgICAgICAgICAgICAncmF0aW8nOiA2LFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJzogLTMwLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuMjUsXG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAzLFxuXHQgICAgICAgICAgICAna25lZSc6IDEwXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZUNvbXByZXNzb3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnc2lkZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5zaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVDb21wcmVzc29yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Nb25vIGNvZXJjZXMgdGhlIGluY29taW5nIG1vbm8gb3Igc3RlcmVvIHNpZ25hbCBpbnRvIGEgbW9ubyBzaWduYWxcblx0XHQgKiAgICAgICAgIHdoZXJlIGJvdGggbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gVGhpcyBjYW4gYmUgdXNlZnVsXG5cdFx0ICogICAgICAgICBmb3IgW3N0ZXJlbyBpbWFnaW5nXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TdGVyZW9faW1hZ2luZykuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ubyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBtZXJnZSB0aGUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NZXJnZSgpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9tZXJnZSwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAxKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1vbm8sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vbm87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIGNvbXByZXNzb3Igd2l0aCBzZXBlcmF0ZSBjb250cm9scyBvdmVyIGxvdy9taWQvaGlnaCBkeW5hbWljc1xuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBsb3cvbWlkL2hpZ2ggY29tcHJlc3NvciBzZXR0aW5ncy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIG11bHRpYmFuZCA9IG5ldyBUb25lLk11bHRpYmFuZENvbXByZXNzb3Ioe1xuXHRcdCAqICBcdFwibG93RnJlcXVlbmN5XCIgOiAyMDAsXG5cdFx0ICogIFx0XCJoaWdoRnJlcXVlbmN5XCIgOiAxMzAwXG5cdFx0ICogIFx0XCJsb3dcIiA6IHtcblx0XHQgKiAgXHRcdFwidGhyZXNob2xkXCIgOiAtMTJcblx0XHQgKiAgXHR9XG5cdFx0ICogIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZENvbXByZXNzb3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhhcmd1bWVudHMsIFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvci5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3BsaXQgdGhlIGluY29taW5nIHNpZ25hbCBpbnRvIGhpZ2gvbWlkL2xvd1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpYmFuZFNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aWJhbmRTcGxpdCh7XG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knOiBvcHRpb25zLmxvd0ZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiBvcHRpb25zLmhpZ2hGcmVxdWVuY3lcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IHRoaXMuX3NwbGl0dGVyLmxvd0ZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gdGhpcy5fc3BsaXR0ZXIuaGlnaEZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3V0cHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgbG93IGZyZXF1ZW5jaWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvdyA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5sb3cpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIG1pZCBmcmVxdWVuY2llcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Db21wcmVzc29yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMubWlkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBoaWdoIGZyZXF1ZW5jaWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2ggPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMuaGlnaCk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBjb21wcmVzc29yXG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIubG93LmNoYWluKHRoaXMubG93LCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIubWlkLmNoYWluKHRoaXMubWlkLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuaGlnaC5jaGFpbih0aGlzLmhpZ2gsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbG93JzogVG9uZS5Db21wcmVzc29yLmRlZmF1bHRzLFxuXHQgICAgICAgICdtaWQnOiBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMsXG5cdCAgICAgICAgJ2hpZ2gnOiBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMsXG5cdCAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IDI1MCxcblx0ICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IDIwMDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTXVsdGliYW5kQ29tcHJlc3Nvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmxvdy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGlnaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQgJiYgIXdpbmRvdy5TdGVyZW9QYW5uZXJOb2RlKSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBAY2xhc3MgU2hpbW1lZCBTdGVyZW9QYW5uZXJOb2RlXG5cdFx0XHQgKiBAcGFyYW0gIHtBdWRpb0NvbnRleHR9IGNvbnRleHRcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB2YXIgU3RlcmVvUGFubmVyTm9kZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgYXVkaW8gY29udGV4dFxuXHRcdFx0XHQgKiBAdHlwZSB7QXVkaW9Db250ZXh0fVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSBsZWZ0L3JpZ2h0IHBhbm5pbmcuIFstMSwgMV1cblx0XHRcdFx0ICogQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHRcdCAqIEBzaWduYWxcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMucGFuID0gbmV3IFRvbmUuU2lnbmFsKDAsIFRvbmUuVHlwZS5BdWRpb1JhbmdlKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIEVxdWFsIHBvd2VyIHNjYWxpbmcgb2YgdGhlIHJpZ2h0IGdhaW5cblx0XHRcdFx0ICogQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciByaWdodFdhdmVTaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmVxdWFsUG93ZXJTY2FsZSgodmFsICsgMSkgLyAyKTtcblx0ICAgICAgICAgICAgfSwgNDA5Nik7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBFcXVhbCBwb3dlciBzY2FsaW5nIG9mIHRoZSBsZWZ0IGdhaW5cblx0XHRcdFx0ICogQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBsZWZ0V2F2ZVNoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZXF1YWxQb3dlclNjYWxlKDEgLSAodmFsICsgMSkgLyAyKTtcblx0ICAgICAgICAgICAgfSwgNDA5Nik7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgbGVmdCBnYWluIHZhbHVlXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgbGVmdEdhaW4gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgcmlnaHQgZ2FpbiB2YWx1ZVxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHJpZ2h0R2FpbiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuU3BsaXR9XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgc3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIEtlZXBzIHRoZSB3YXZlc2hhcGVycyBmcm9tIG9wdGltaXppbmcgMHNcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuWmVyb31cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciB6ZXJvID0gbmV3IFRvbmUuWmVybygpO1xuXHQgICAgICAgICAgICB6ZXJvLmZhbihyaWdodFdhdmVTaGFwZXIsIGxlZnRXYXZlU2hhcGVyKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIE1lcmdlIHRoZSBvdXRnb2luZyBzaWduYWxcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgbWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICAgICAgc3BsaXQubGVmdC5jaGFpbihsZWZ0R2FpbiwgbWVyZ2UubGVmdCk7XG5cdCAgICAgICAgICAgIHNwbGl0LnJpZ2h0LmNoYWluKHJpZ2h0R2FpbiwgbWVyZ2UucmlnaHQpO1xuXHQgICAgICAgICAgICB0aGlzLnBhbi5jaGFpbihsZWZ0V2F2ZVNoYXBlciwgbGVmdEdhaW4uZ2Fpbik7XG5cdCAgICAgICAgICAgIHRoaXMucGFuLmNoYWluKHJpZ2h0V2F2ZVNoYXBlciwgcmlnaHRHYWluLmdhaW4pO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgU3RlcmVvUGFubmVyTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuZGlzY29ubmVjdC5hcHBseSh0aGlzLm91dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFN0ZXJlb1Bhbm5lck5vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmNvbm5lY3QuYXBwbHkodGhpcy5vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICAvL2FkZCBpdCB0byB0aGUgQXVkaW9Db250ZXh0XG5cdCAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVTdGVyZW9QYW5uZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgU3RlcmVvUGFubmVyTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlU3RlcmVvUGFubmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFN0ZXJlb1Bhbm5lck5vZGUodGhpcyk7XG5cdCAgICAgICAgfTtcblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBhbm5lciBpcyBhbiBlcXVhbCBwb3dlciBMZWZ0L1JpZ2h0IFBhbm5lciBhbmQgZG9lcyBub3Rcblx0XHQgKiAgICAgICAgICBzdXBwb3J0IDNELiBQYW5uZXIgdXNlcyB0aGUgU3RlcmVvUGFubmVyTm9kZSB3aGVuIGF2YWlsYWJsZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbaW5pdGlhbFBhbj0wXSBUaGUgaW5pdGFpbCBwYW5uZXIgdmFsdWUgKGNlbnRlcikuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vcGFuIHRoZSBpbnB1dCBzaWduYWwgaGFyZCByaWdodC5cblx0XHQgKiAgdmFyIHBhbm5lciA9IG5ldyBUb25lLlBhbm5lcigxKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyID0gZnVuY3Rpb24gKGluaXRpYWxQYW4pIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiAgdGhlIHBhbm5lciBub2RlXG5cdFx0XHQqICBAdHlwZSB7U3RlcmVvUGFubmVyTm9kZX1cblx0XHRcdCogIEBwcml2YXRlXG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVTdGVyZW9QYW5uZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCogIFRoZSBwYW4gY29udHJvbC4gLTEgPSBoYXJkIGxlZnQsIDEgPSBoYXJkIHJpZ2h0LlxuXHRcdFx0KiAgQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHQqICBAc2lnbmFsXG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMucGFuID0gdGhpcy5fcGFubmVyLnBhbjtcblx0ICAgICAgICAvL2luaXRpYWwgdmFsdWVcblx0ICAgICAgICB0aGlzLnBhbi52YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyhpbml0aWFsUGFuLCAwKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgncGFuJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYW5uZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdwYW4nKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5wYW4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhbm5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIHNwYXRpYWxpemVkIHBhbm5lciBub2RlIHdoaWNoIHN1cHBvcnRzIGVxdWFscG93ZXIgb3IgSFJURiBwYW5uaW5nLlxuXHRcdCAqICAgICAgICAgIFRyaWVzIHRvIG5vcm1hbGl6ZSB0aGUgQVBJIGFjcm9zcyB2YXJpb3VzIGJyb3dzZXJzLiBTZWUgVG9uZS5MaXN0ZW5lclxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBwb3NpdGlvblggVGhlIGluaXRpYWwgeCBwb3NpdGlvbi5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHBvc2l0aW9uWSBUaGUgaW5pdGlhbCB5IHBvc2l0aW9uLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gcG9zaXRpb25aIFRoZSBpbml0aWFsIHogcG9zaXRpb24uXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNEID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3Bvc2l0aW9uWCcsXG5cdCAgICAgICAgICAgICdwb3NpdGlvblknLFxuXHQgICAgICAgICAgICAncG9zaXRpb25aJ1xuXHQgICAgICAgIF0sIFRvbmUuUGFubmVyM0QpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhbm5lciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1Bhbm5lck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVQYW5uZXIoKTtcblx0ICAgICAgICAvL3NldCBzb21lIHZhbHVlc1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5wYW5uaW5nTW9kZWwgPSBvcHRpb25zLnBhbm5pbmdNb2RlbDtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIubWF4RGlzdGFuY2UgPSBvcHRpb25zLm1heERpc3RhbmNlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXN0YW5jZU1vZGVsID0gb3B0aW9ucy5kaXN0YW5jZU1vZGVsO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5jb25lT3V0ZXJHYWluID0gb3B0aW9ucy5jb25lT3V0ZXJHYWluO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5jb25lT3V0ZXJBbmdsZSA9IG9wdGlvbnMuY29uZU91dGVyQW5nbGU7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbmVJbm5lckFuZ2xlID0gb3B0aW9ucy5jb25lSW5uZXJBbmdsZTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIucmVmRGlzdGFuY2UgPSBvcHRpb25zLnJlZkRpc3RhbmNlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5yb2xsb2ZmRmFjdG9yID0gb3B0aW9ucy5yb2xsb2ZmRmFjdG9yO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IG9yaWVudGF0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBbXG5cdCAgICAgICAgICAgIG9wdGlvbnMub3JpZW50YXRpb25YLFxuXHQgICAgICAgICAgICBvcHRpb25zLm9yaWVudGF0aW9uWSxcblx0ICAgICAgICAgICAgb3B0aW9ucy5vcmllbnRhdGlvblpcblx0ICAgICAgICBdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBbXG5cdCAgICAgICAgICAgIG9wdGlvbnMucG9zaXRpb25YLFxuXHQgICAgICAgICAgICBvcHRpb25zLnBvc2l0aW9uWSxcblx0ICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvblpcblx0ICAgICAgICBdO1xuXHQgICAgICAgIC8vIHNldCB0aGUgZGVmYXVsdCBwb3NpdGlvbi9vcmllbnRhdGlvblxuXHQgICAgICAgIHRoaXMub3JpZW50YXRpb25YID0gb3B0aW9ucy5vcmllbnRhdGlvblg7XG5cdCAgICAgICAgdGhpcy5vcmllbnRhdGlvblkgPSBvcHRpb25zLm9yaWVudGF0aW9uWTtcblx0ICAgICAgICB0aGlzLm9yaWVudGF0aW9uWiA9IG9wdGlvbnMub3JpZW50YXRpb25aO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb25YID0gb3B0aW9ucy5wb3NpdGlvblg7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvblkgPSBvcHRpb25zLnBvc2l0aW9uWTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uWiA9IG9wdGlvbnMucG9zaXRpb25aO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFubmVyM0QsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0cyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Bvc2l0aW9uWCc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWSc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWic6IDAsXG5cdCAgICAgICAgJ29yaWVudGF0aW9uWCc6IDAsXG5cdCAgICAgICAgJ29yaWVudGF0aW9uWSc6IDAsXG5cdCAgICAgICAgJ29yaWVudGF0aW9uWic6IDAsXG5cdCAgICAgICAgJ3Bhbm5pbmdNb2RlbCc6ICdlcXVhbHBvd2VyJyxcblx0ICAgICAgICAnbWF4RGlzdGFuY2UnOiAxMDAwMCxcblx0ICAgICAgICAnZGlzdGFuY2VNb2RlbCc6ICdpbnZlcnNlJyxcblx0ICAgICAgICAnY29uZU91dGVyR2Fpbic6IDAsXG5cdCAgICAgICAgJ2NvbmVPdXRlckFuZ2xlJzogMzYwLFxuXHQgICAgICAgICdjb25lSW5uZXJBbmdsZSc6IDM2MCxcblx0ICAgICAgICAncmVmRGlzdGFuY2UnOiAxLFxuXHQgICAgICAgICdyb2xsb2ZmRmFjdG9yJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByYW1wIHRpbWUgd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgc2V0VGFyZ2V0QXRUaW1lXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuX3JhbXBUaW1lQ29uc3RhbnQgPSAwLjAxO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgaW4gM2Qgc3BhY2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGFubmVyM0R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24gKHgsIHksIHopIHtcblx0ICAgICAgICBpZiAodGhpcy5fcGFubmVyLnBvc2l0aW9uWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnBvc2l0aW9uWC5zZXRUYXJnZXRBdFRpbWUoeCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnBvc2l0aW9uWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnBvc2l0aW9uWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIuc2V0UG9zaXRpb24oeCwgeSwgeik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHNvdXJjZSBpbiAzZCBzcGFjZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB5XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHpcblx0XHQgKiAgQHJldHVybiB7VG9uZS5QYW5uZXIzRH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuc2V0T3JpZW50YXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeikge1xuXHQgICAgICAgIGlmICh0aGlzLl9wYW5uZXIub3JpZW50YXRpb25YKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIub3JpZW50YXRpb25YLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIub3JpZW50YXRpb25ZLnNldFRhcmdldEF0VGltZSh5LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIub3JpZW50YXRpb25aLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5zZXRPcmllbnRhdGlvbih4LCB5LCB6KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAncG9zaXRpb25YJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25ZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdwb3NpdGlvblknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ3Bvc2l0aW9uWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBvcmllbnRhdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG9yaWVudGF0aW9uWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAnb3JpZW50YXRpb25YJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IG9yaWVudGF0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgb3JpZW50YXRpb25ZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdvcmllbnRhdGlvblknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogb3JpZW50YXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBvcmllbnRhdGlvblpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ29yaWVudGF0aW9uWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBQcm94eSBhIHByb3BlcnR5IG9uIHRoZSBwYW5uZXIgdG8gYW4gZXhwb3NlZCBwdWJsaWMgcHJvcGVyeVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5ID0gZnVuY3Rpb24gKHByb3ApIHtcblx0ICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsIHByb3AsIHtcblx0ICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wYW5uZXJbcHJvcF0gPSB2YWw7XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bhbm5lcltwcm9wXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGFubmluZyBtb2RlbC4gRWl0aGVyIFwiZXF1YWxwb3dlclwiIG9yIFwiSFJURlwiLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcGFubmluZ01vZGVsXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdwYW5uaW5nTW9kZWwnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIHJlZmVyZW5jZSBkaXN0YW5jZSBmb3IgcmVkdWNpbmcgdm9sdW1lIGFzIHNvdXJjZSBtb3ZlIGZ1cnRoZXIgZnJvbSB0aGUgbGlzdGVuZXJcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHJlZkRpc3RhbmNlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdyZWZEaXN0YW5jZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlc2NyaWJlcyBob3cgcXVpY2tseSB0aGUgdm9sdW1lIGlzIHJlZHVjZWQgYXMgc291cmNlIG1vdmVzIGF3YXkgZnJvbSBsaXN0ZW5lci5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHJvbGxvZmZGYWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ3JvbGxvZmZGYWN0b3InKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGlzdGFuY2UgbW9kZWwgdXNlZCBieSwgIFwibGluZWFyXCIsIFwiaW52ZXJzZVwiLCBvciBcImV4cG9uZW50aWFsXCIuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBkaXN0YW5jZU1vZGVsXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdkaXN0YW5jZU1vZGVsJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFuZ2xlLCBpbiBkZWdyZWVzLCBpbnNpZGUgb2Ygd2hpY2ggdGhlcmUgd2lsbCBiZSBubyB2b2x1bWUgcmVkdWN0aW9uXG5cdFx0ICogIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgY29uZUlubmVyQW5nbGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2NvbmVJbm5lckFuZ2xlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFuZ2xlLCBpbiBkZWdyZWVzLCBvdXRzaWRlIG9mIHdoaWNoIHRoZSB2b2x1bWUgd2lsbCBiZSByZWR1Y2VkXG5cdFx0ICogIHRvIGEgY29uc3RhbnQgdmFsdWUgb2YgY29uZU91dGVyR2FpblxuXHRcdCAqICBAdHlwZSB7RGVncmVlc31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIGNvbmVPdXRlckFuZ2xlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdjb25lT3V0ZXJBbmdsZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBnYWluIG91dHNpZGUgb2YgdGhlIGNvbmVPdXRlckFuZ2xlXG5cdFx0ICogIEB0eXBlIHtHYWlufVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgY29uZU91dGVyR2FpblxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnY29uZU91dGVyR2FpbicpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gc291cmNlIGFuZCBsaXN0ZW5lcixcblx0XHQgKiAgYWZ0ZXIgd2hpY2ggdGhlIHZvbHVtZSB3aWxsIG5vdCBiZSByZWR1Y2VkIGFueSBmdXJ0aGVyLlxuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBtYXhEaXN0YW5jZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnbWF4RGlzdGFuY2UnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFubmVyM0R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYW5uZXIzRDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGFuVm9sIGlzIGEgVG9uZS5QYW5uZXIgYW5kIFRvbmUuVm9sdW1lIGluIG9uZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvUmFuZ2V9IHBhbiB0aGUgaW5pdGlhbCBwYW5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHZvbHVtZSBUaGUgb3V0cHV0IHZvbHVtZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3BhbiB0aGUgaW5jb21pbmcgc2lnbmFsIGxlZnQgYW5kIGRyb3AgdGhlIHZvbHVtZVxuXHRcdCAqIHZhciBwYW5Wb2wgPSBuZXcgVG9uZS5QYW5Wb2woLTAuMjUsIC0xMik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhblZvbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwYW4nLFxuXHQgICAgICAgICAgICAndm9sdW1lJ1xuXHQgICAgICAgIF0sIFRvbmUuUGFuVm9sKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYW5uaW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5QYW5uZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5QYW5uZXIob3B0aW9ucy5wYW4pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBML1IgcGFubmluZyBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb1JhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucGFuID0gdGhpcy5fcGFubmVyLnBhbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdm9sdW1lIGNvbnRyb2wgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbm5lY3QodGhpcy5fdm9sdW1lKTtcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncGFuJyxcblx0ICAgICAgICAgICAgJ3ZvbHVtZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhblZvbCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFuVm9sLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwYW4nOiAwLFxuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBNdXRlL3VubXV0ZSB0aGUgdm9sdW1lXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGFuVm9sI1xuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhblZvbC5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYW5Wb2x9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFuVm9sLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncGFuJyxcblx0ICAgICAgICAgICAgJ3ZvbHVtZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5wYW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFuVm9sO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuU29sbyBsZXRzIHlvdSBpc29sYXRlIGEgc3BlY2lmaWMgYXVkaW8gc3RyZWFtLiBXaGVuXG5cdFx0ICogICAgICAgICBhbiBpbnN0YW5jZSBpcyBzZXQgdG8gYHNvbG89dHJ1ZWAsIGl0IHdpbGwgbXV0ZSBhbGwgb3RoZXIgaW5zdGFuY2VzLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNvbG9BID0gbmV3IFRvbmUuU29sbygpXG5cdFx0ICogdmFyIHNvbG9CID0gbmV3IFRvbmUuU29sbygpXG5cdFx0ICogc29sb0Euc29sbyA9IHRydWVcblx0XHQgKiAvL25vIGF1ZGlvIHdpbGwgcGFzcyB0aHJvdWdoIHNvbG9CXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzb2xvJ10sIFRvbmUuU29sbyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgaW5wdXQgYW5kIG91dHB1dCBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBib3VuZCBfc29sb2VkIG1ldGhvZFxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvbG9CaW5kID0gdGhpcy5fc29sb2VkLmJpbmQodGhpcyk7XG5cdCAgICAgICAgLy9saXN0ZW4gZm9yIHNvbG8gZXZlbnRzIGNsYXNzLXdpZGUuXG5cdCAgICAgICAgdGhpcy5jb250ZXh0Lm9uKCdzb2xvJywgdGhpcy5fc29sb0JpbmQpO1xuXHQgICAgICAgIC8vc2V0IGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuc29sbyA9IG9wdGlvbnMuc29sbztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNvbG8sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5kZWZhdWx0cyA9IHsgc29sbzogZmFsc2UgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJc29sYXRlcyB0aGlzIGluc3RhbmNlIGFuZCBtdXRlcyBhbGwgb3RoZXIgaW5zdGFuY2VzIG9mIFRvbmUuU29sby5cblx0XHQgKiAgT25seSBvbmUgaW5zdGFuY2UgY2FuIGJlIHNvbG9lZCBhdCBhIHRpbWUuIEEgc29sb2VkXG5cdFx0ICogIGluc3RhbmNlIHdpbGwgcmVwb3J0IGBzb2xvPWZhbHNlYCB3aGVuIGFub3RoZXIgaW5zdGFuY2UgaXMgc29sb2VkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Tb2xvI1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgc29sb1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU29sby5wcm90b3R5cGUsICdzb2xvJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTb2xvZWQoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNvbG8pIHtcblx0ICAgICAgICAgICAgaWYgKHNvbG8pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FkZFNvbG8oKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVNvbG8oKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuZW1pdCgnc29sbycsIHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHRoZSBjdXJyZW50IGluc3RhbmNlIGlzIG11dGVkLCBpLmUuIGFub3RoZXIgaW5zdGFuY2UgaXMgc29sb2VkXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNvbG8jXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBtdXRlZFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNvbG8ucHJvdG90eXBlLCAnbXV0ZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LmdhaW4udmFsdWUgPT09IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBBZGQgdGhpcyB0byB0aGUgc29sb2VkIGFycmF5XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX2FkZFNvbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCFUb25lLmlzQXJyYXkodGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbykpIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbyA9IFtdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIXRoaXMuX2lzU29sb2VkKCkpIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5wdXNoKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZW1vdmUgdGhpcyBmcm9tIHRoZSBzb2xvZWQgYXJyYXlcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5fcmVtb3ZlU29sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5faXNTb2xvZWQoKSkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLmluZGV4T2YodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8uc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gSXMgdGhpcyBvbiB0aGUgc29sb2VkIGFycmF5XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX2lzU29sb2VkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbykpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8ubGVuZ3RoICE9PSAwICYmIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8uaW5kZXhPZih0aGlzKSAhPT0gLTE7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgbm8gb25lIGlzIHNvbG9lZFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9ub1NvbG9zID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAhVG9uZS5pc0FycmF5KHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8pIHx8IHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8ubGVuZ3RoID09PSAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTb2xvIHRoZSBjdXJyZW50IGluc3RhbmNlIGFuZCB1bnNvbG8gYWxsIG90aGVyIGluc3RhbmNlcy5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5Tb2xvfSAgaW5zdGFuY2UgIFRoZSBpbnN0YW5jZSB3aGljaCBpcyBiZWluZyBzb2xvZWQvdW5zb2xvZWQuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9zb2xvZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2lzU29sb2VkKCkpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5nYWluLnZhbHVlID0gMTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX25vU29sb3MoKSkge1xuXHQgICAgICAgICAgICAvL25vIG9uZSBpcyBzb2xvZWRcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5nYWluLnZhbHVlID0gMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmdhaW4udmFsdWUgPSAwO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuU29sb30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbnRleHQub2ZmKCdzb2xvJywgdGhpcy5fc29sb0JpbmQpO1xuXHQgICAgICAgIHRoaXMuX3JlbW92ZVNvbG8oKTtcblx0ICAgICAgICB0aGlzLl9zb2xvQmluZCA9IG51bGw7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Tb2xvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBHZXQgdGhlIGN1cnJlbnQgd2F2ZWZvcm0gZGF0YSBvZiB0aGUgY29ubmVjdGVkIGF1ZGlvIHNvdXJjZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHNpemUgVGhlIHNpemUgb2YgdGhlIEZGVC4gVmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnc2l6ZSddLCBUb25lLldhdmVmb3JtKTtcblx0ICAgICAgICBvcHRpb25zLnR5cGUgPSBUb25lLkFuYWx5c2VyLlR5cGUuV2F2ZWZvcm07XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFuYWx5c2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5BbmFseXNlcihvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLldhdmVmb3JtLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0uZGVmYXVsdHMgPSB7ICdzaXplJzogMTAyNCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldHMgdGhlIHdhdmVmb3JtIG9mIHRoZSBhdWRpbyBzb3VyY2UuIFJldHVybnMgdGhlIHdhdmVmb3JtIGRhdGFcblx0XHQgKiAgb2YgbGVuZ3RoIFtzaXplXSgjc2l6ZSkgYXMgYSBGbG9hdDMyQXJyYXkgd2l0aCB2YWx1ZXMgYmV0d2VlbiAtMSBhbmQgMS5cblx0XHQgKiAgQHJldHVybnMge1R5cGVkQXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNpemUgb2YgYW5hbHlzaXMuIFRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLldhdmVmb3JtI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5XYXZlZm9ybS5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc2l6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuc2l6ZSA9IHNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLldhdmVmb3JtfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlZm9ybS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuV2F2ZWZvcm07XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkN0cmxJbnRlcnBvbGF0ZSB3aWxsIGludGVycG9sYXRlIGJldHdlZW4gZ2l2ZW4gdmFsdWVzIGJhc2VkXG5cdFx0ICogICAgICAgICBvbiB0aGUgXCJpbmRleFwiIHByb3BlcnR5LiBQYXNzaW5nIGluIGFuIGFycmF5IG9yIG9iamVjdCBsaXRlcmFsXG5cdFx0ICogICAgICAgICB3aWxsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIHBhcmFtZXRlcnMuIE5vdGUgKGkuZS4gXCJDM1wiKVxuXHRcdCAqICAgICAgICAgYW5kIFRpbWUgKGkuZS4gXCI0biArIDJcIikgY2FuIGJlIGludGVycG9sYXRlZC4gQWxsIG90aGVyIHZhbHVlcyBhcmVcblx0XHQgKiAgICAgICAgIGFzc3VtZWQgdG8gYmUgbnVtYmVycy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGludGVycCA9IG5ldyBUb25lLkN0cmxJbnRlcnBvbGF0ZShbMCwgMiwgOSwgNF0pO1xuXHRcdCAqIGludGVycC5pbmRleCA9IDAuNzU7XG5cdFx0ICogaW50ZXJwLnZhbHVlOyAvL3JldHVybnMgMS41XG5cdFx0ICpcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgaW50ZXJwID0gbmV3IFRvbmUuQ3RybEludGVycG9sYXRlKFtcblx0XHQgKiBcdFsyLCA0LCA1XSxcblx0XHQgKiBcdFs5LCAzLCAyXSxcblx0XHQgKiBdKTtcblx0XHQgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIGFycmF5IG9mIHZhbHVlcyB0byBpbnRlcnBvbGF0ZSBvdmVyXG5cdFx0ICogQHBhcmFtIHtQb3NpdGl2ZX0gaW5kZXggVGhlIGluaXRpYWwgaW50ZXJwb2xhdGlvbiBpbmRleC5cblx0XHQgKiBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3ZhbHVlcycsXG5cdCAgICAgICAgICAgICdpbmRleCdcblx0ICAgICAgICBdLCBUb25lLkN0cmxJbnRlcnBvbGF0ZSk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZXMgdG8gaW50ZXJwb2xhdGUgYmV0d2VlblxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG9wdGlvbnMudmFsdWVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBpbnRlcnBvbGF0ZWQgaW5kZXggYmV0d2VlbiB2YWx1ZXMuIEZvciBleGFtcGxlOiBhIHZhbHVlIG9mIDEuNVxuXHRcdFx0ICogIHdvdWxkIGludGVycG9sYXRlIGVxdWFsbHkgYmV0d2VlbiB0aGUgdmFsdWUgYXQgaW5kZXggMVxuXHRcdFx0ICogIGFuZCB0aGUgdmFsdWUgYXQgaW5kZXggMi4gXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIGludGVycC5pbmRleCA9IDA7IFxuXHRcdFx0ICogaW50ZXJwLnZhbHVlOyAvL3JldHVybnMgdGhlIHZhbHVlIGF0IDBcblx0XHRcdCAqIGludGVycC5pbmRleCA9IDAuNTtcblx0XHRcdCAqIGludGVycC52YWx1ZTsgLy9yZXR1cm5zIHRoZSB2YWx1ZSBiZXR3ZWVuIGluZGljZXMgMCBhbmQgMS4gXG5cdFx0XHQgKiAgQHR5cGUgIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3RybEludGVycG9sYXRlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2luZGV4JzogMCxcblx0ICAgICAgICAndmFsdWVzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgaW50ZXJwb2xhdGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBpbmRleFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybEludGVycG9sYXRlI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxJbnRlcnBvbGF0ZS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgdGhpcy52YWx1ZXMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciBsb3dlclBvc2l0aW9uID0gTWF0aC5mbG9vcihpbmRleCk7XG5cdCAgICAgICAgICAgIHZhciBsb3dlciA9IHRoaXMudmFsdWVzW2xvd2VyUG9zaXRpb25dO1xuXHQgICAgICAgICAgICB2YXIgdXBwZXIgPSB0aGlzLnZhbHVlc1tNYXRoLmNlaWwoaW5kZXgpXTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVycG9sYXRlKGluZGV4IC0gbG93ZXJQb3NpdGlvbiwgbG93ZXIsIHVwcGVyKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBpbnRlcnBvbGF0aW9uIHJvdXRpbmVcblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBpbmRleCAgVGhlIGluZGV4IGJldHdlZW4gdGhlIGxvd2VyIGFuZCB1cHBlclxuXHRcdCAqICBAcGFyYW0gIHsqfSAgbG93ZXIgXG5cdFx0ICogIEBwYXJhbSAgeyp9ICB1cHBlciBcblx0XHQgKiAgQHJldHVybiAgeyp9ICBUaGUgaW50ZXJwb2xhdGVkIHZhbHVlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZS5wcm90b3R5cGUuX2ludGVycG9sYXRlID0gZnVuY3Rpb24gKGluZGV4LCBsb3dlciwgdXBwZXIpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KGxvd2VyKSkge1xuXHQgICAgICAgICAgICB2YXIgcmV0QXJyYXkgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb3dlci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgcmV0QXJyYXlbaV0gPSB0aGlzLl9pbnRlcnBvbGF0ZShpbmRleCwgbG93ZXJbaV0sIHVwcGVyW2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0QXJyYXk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzT2JqZWN0KGxvd2VyKSkge1xuXHQgICAgICAgICAgICB2YXIgcmV0T2JqID0ge307XG5cdCAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gbG93ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldE9ialthdHRyXSA9IHRoaXMuX2ludGVycG9sYXRlKGluZGV4LCBsb3dlclthdHRyXSwgdXBwZXJbYXR0cl0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXRPYmo7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgbG93ZXIgPSB0aGlzLl90b051bWJlcihsb3dlcik7XG5cdCAgICAgICAgICAgIHVwcGVyID0gdGhpcy5fdG9OdW1iZXIodXBwZXIpO1xuXHQgICAgICAgICAgICByZXR1cm4gKDEgLSBpbmRleCkgKiBsb3dlciArIGluZGV4ICogdXBwZXI7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGZyb20gdGhlIGdpdmVuIHR5cGUgaW50byBhIG51bWJlclxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ8U3RyaW5nfSAgdmFsdWVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZS5fdG9OdW1iZXIgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodmFsKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGFzc3VtZSB0aGF0IGl0J3MgVGltZS4uLlxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHModmFsKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkN0cmxJbnRlcnBvbGF0ZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsSW50ZXJwb2xhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkN0cmxNYXJrb3YgcmVwcmVzZW50cyBhIE1hcmtvdiBDaGFpbiB3aGVyZSBlYWNoIGNhbGxcblx0XHQgKiAgICAgICAgIHRvIFRvbmUuQ3RybE1hcmtvdi5uZXh0IHdpbGwgbW92ZSB0byB0aGUgbmV4dCBzdGF0ZS4gSWYgdGhlIG5leHRcblx0XHQgKiAgICAgICAgIHN0YXRlIGNob2ljZSBpcyBhbiBhcnJheSwgdGhlIG5leHQgc3RhdGUgaXMgY2hvc2VuIHJhbmRvbWx5IHdpdGhcblx0XHQgKiAgICAgICAgIGV2ZW4gcHJvYmFiaWxpdHkgZm9yIGFsbCBvZiB0aGUgY2hvaWNlcy4gRm9yIGEgd2VpZ2h0ZWQgcHJvYmFiaWxpdHlcblx0XHQgKiAgICAgICAgIG9mIHRoZSBuZXh0IGNob2ljZXMsIHBhc3MgaW4gYW4gb2JqZWN0IHdpdGggXCJzdGF0ZVwiIGFuZCBcInByb2JhYmlsaXR5XCIgYXR0cmlidXRlcy4gXG5cdFx0ICogICAgICAgICBUaGUgcHJvYmFiaWxpdGllcyB3aWxsIGJlIG5vcm1hbGl6ZWQgYW5kIHRoZW4gY2hvc2VuLiBJZiBubyBuZXh0IG9wdGlvbnNcblx0XHQgKiAgICAgICAgIGFyZSBnaXZlbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUsIHRoZSBzdGF0ZSB3aWxsIHN0YXkgdGhlcmUuIFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgY2hhaW4gPSBuZXcgVG9uZS5DdHJsTWFya292KHtcblx0XHQgKiBcdFwiYmVnaW5uaW5nXCIgOiBbXCJlbmRcIiwgXCJtaWRkbGVcIl0sXG5cdFx0ICogXHRcIm1pZGRsZVwiIDogXCJlbmRcIlxuXHRcdCAqIH0pO1xuXHRcdCAqIGNoYWluLnZhbHVlID0gXCJiZWdpbm5pbmdcIjtcblx0XHQgKiBjaGFpbi5uZXh0KCk7IC8vcmV0dXJucyBcImVuZFwiIG9yIFwibWlkZGxlXCIgd2l0aCA1MCUgcHJvYmFiaWxpdHlcblx0XHQgKlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjaGFpbiA9IG5ldyBUb25lLkN0cmxNYXJrb3Yoe1xuXHRcdCAqIFx0XCJiZWdpbm5pbmdcIiA6IFt7XCJ2YWx1ZVwiIDogXCJlbmRcIiwgXCJwcm9iYWJpbGl0eVwiIDogMC44fSwgXG5cdFx0ICogXHRcdFx0XHRcdHtcInZhbHVlXCIgOiBcIm1pZGRsZVwiLCBcInByb2JhYmlsaXR5XCIgOiAwLjJ9XSxcblx0XHQgKiBcdFwibWlkZGxlXCIgOiBcImVuZFwiXG5cdFx0ICogfSk7XG5cdFx0ICogY2hhaW4udmFsdWUgPSBcImJlZ2lubmluZ1wiO1xuXHRcdCAqIGNoYWluLm5leHQoKTsgLy9yZXR1cm5zIFwiZW5kXCIgd2l0aCA4MCUgcHJvYmFiaWxpdHkgb3IgXCJtaWRkbGVcIiB3aXRoIDIwJS5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IHZhbHVlcyBBbiBvYmplY3Qgd2l0aCB0aGUgc3RhdGUgbmFtZXMgYXMgdGhlIGtleXNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIG5leHQgc3RhdGUocykgYXMgdGhlIHZhbHVlcy4gXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YgPSBmdW5jdGlvbiAodmFsdWVzLCBpbml0aWFsKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBNYXJrb3YgdmFsdWVzIHdpdGggc3RhdGVzIGFzIHRoZSBrZXlzXG5cdFx0XHQgKiAgYW5kIG5leHQgc3RhdGUocykgYXMgdGhlIHZhbHVlcy4gXG5cdFx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gVG9uZS5kZWZhdWx0QXJnKHZhbHVlcywge30pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBNYXJrb3YgdmFsdWVzLiBUaGUgbmV4dFxuXHRcdFx0ICogIHN0YXRlIHdpbGwgYmUgZXZhbHVhdGVkIGFuZCByZXR1cm5lZCB3aGVuIFRvbmUuQ3RybE1hcmtvdi5uZXh0XG5cdFx0XHQgKiAgaXMgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyhpbml0aWFsLCBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcylbMF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3RybE1hcmtvdik7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgbmV4dCBzdGF0ZSBvZiB0aGUgTWFya292IHZhbHVlcy4gXG5cdFx0ICogIEByZXR1cm4gIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMudmFsdWVzLmhhc093blByb3BlcnR5KHRoaXMudmFsdWUpKSB7XG5cdCAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy52YWx1ZXNbdGhpcy52YWx1ZV07XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkobmV4dCkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkaXN0cmlidXRpb24gPSB0aGlzLl9nZXRQcm9iRGlzdHJpYnV0aW9uKG5leHQpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJhbmQgPSBNYXRoLnJhbmRvbSgpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHRvdGFsID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzdHJpYnV0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3QgPSBkaXN0cmlidXRpb25baV07XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmQgPiB0b3RhbCAmJiByYW5kIDwgdG90YWwgKyBkaXN0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaG9zZW4gPSBuZXh0W2ldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChjaG9zZW4pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gY2hvc2VuLnZhbHVlO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNob3Nlbjtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBkaXN0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5leHQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENob29zZSByYW5kb21seSBmcm9tIGFuIGFycmF5IHdlaWdodGVkIG9wdGlvbnMgaW4gdGhlIGZvcm0gXG5cdFx0ICogIHtcInN0YXRlXCIgOiBzdHJpbmcsIFwicHJvYmFiaWxpdHlcIiA6IG51bWJlcn0gb3IgYW4gYXJyYXkgb2YgdmFsdWVzXG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgb3B0aW9ucyBcblx0XHQgKiAgQHJldHVybiAge0FycmF5fSAgVGhlIHJhbmRvbWx5IHNlbGVjdGVkIGNob2ljZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsTWFya292LnByb3RvdHlwZS5fZ2V0UHJvYkRpc3RyaWJ1dGlvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgdmFyIGRpc3RyaWJ1dGlvbiA9IFtdO1xuXHQgICAgICAgIHZhciB0b3RhbCA9IDA7XG5cdCAgICAgICAgdmFyIG5lZWRzTm9ybWFsaXppbmcgPSBmYWxzZTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbaV07XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KG9wdGlvbikpIHtcblx0ICAgICAgICAgICAgICAgIG5lZWRzTm9ybWFsaXppbmcgPSB0cnVlO1xuXHQgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uW2ldID0gb3B0aW9uLnByb2JhYmlsaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uW2ldID0gMSAvIG9wdGlvbnMubGVuZ3RoO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRvdGFsICs9IGRpc3RyaWJ1dGlvbltpXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKG5lZWRzTm9ybWFsaXppbmcpIHtcblx0ICAgICAgICAgICAgLy9ub3JtYWxpemUgdGhlIHZhbHVlc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRpc3RyaWJ1dGlvbi5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uW2pdID0gZGlzdHJpYnV0aW9uW2pdIC8gdG90YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGRpc3RyaWJ1dGlvbjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ3RybE1hcmtvdn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ3RybE1hcmtvdjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEdlbmVyYXRlIHBhdHRlcm5zIGZyb20gYW4gYXJyYXkgb2YgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgSGFzIGEgbnVtYmVyIG9mIGFycGVnZ2lhdGlvbiBhbmQgcmFuZG9taXplZFxuXHRcdCAqICAgICAgICAgc2VsZWN0aW9uIHBhdHRlcm5zLiBcblx0XHQgKiAgICAgICAgICAgPHVsPlxuXHRcdCAqICBcdCAgICAgICAgPGxpPlwidXBcIiAtIGN5Y2xlcyB1cHdhcmQ8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJkb3duXCIgLSBjeWNsZXMgZG93bndhcmQ8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJ1cERvd25cIiAtIHVwIHRoZW4gYW5kIGRvd248L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJkb3duVXBcIiAtIGN5Y2xlcyBkb3duIHRoZW4gYW5kIHVwPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwiYWx0ZXJuYXRlVXBcIiAtIGp1bXAgdXAgdHdvIGFuZCBkb3duIG9uZTwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImFsdGVybmF0ZURvd25cIiAtIGp1bXAgZG93biB0d28gYW5kIHVwIG9uZTwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInJhbmRvbVwiIC0gcmFuZG9tbHkgc2VsZWN0IGFuIGluZGV4PC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwicmFuZG9tV2Fsa1wiIC0gcmFuZG9tbHkgbW92ZXMgb25lIGluZGV4IGF3YXkgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbjwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInJhbmRvbU9uY2VcIiAtIHJhbmRvbWx5IHNlbGVjdCBhbiBpbmRleCB3aXRob3V0IHJlcGVhdGluZyB1bnRpbCBhbGwgdmFsdWVzIGhhdmUgYmVlbiBjaG9zZW4uPC9saT5cblx0XHQgKiAgICAgXHRcdDwvdWw+XG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgdmFsdWVzICAgQW4gYXJyYXkgb2Ygb3B0aW9ucyB0byBjaG9vc2UgZnJvbS5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5DdHJsUGF0dGVybi5UeXBlPX0gIHR5cGUgIFRoZSBuYW1lIG9mIHRoZSBwYXR0ZXJuLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndmFsdWVzJyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5DdHJsUGF0dGVybik7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiB2YWx1ZXMgdG8gYXJwZWdnaWF0ZSBvdmVyXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBvcHRpb25zLnZhbHVlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgdmFsdWVzIGFycmF5XG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHlwZSBwbGFjZWhvbGRlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkN0cmxQYXR0ZXJuLlR5cGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNodWZmbGVkIHZhbHVlcyBmb3IgdGhlIFJhbmRvbU9uY2UgdHlwZVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkaXJlY3Rpb24gb2YgdGhlIG1vdmVtZW50XG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsUGF0dGVybik7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIENvbnRyb2wgUGF0dGVybnNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4uVHlwZSA9IHtcblx0ICAgICAgICBVcDogJ3VwJyxcblx0ICAgICAgICBEb3duOiAnZG93bicsXG5cdCAgICAgICAgVXBEb3duOiAndXBEb3duJyxcblx0ICAgICAgICBEb3duVXA6ICdkb3duVXAnLFxuXHQgICAgICAgIEFsdGVybmF0ZVVwOiAnYWx0ZXJuYXRlVXAnLFxuXHQgICAgICAgIEFsdGVybmF0ZURvd246ICdhbHRlcm5hdGVEb3duJyxcblx0ICAgICAgICBSYW5kb206ICdyYW5kb20nLFxuXHQgICAgICAgIFJhbmRvbVdhbGs6ICdyYW5kb21XYWxrJyxcblx0ICAgICAgICBSYW5kb21PbmNlOiAncmFuZG9tT25jZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLiBcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwLFxuXHQgICAgICAgICd2YWx1ZXMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIHBhdHRlcm4uXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsUGF0dGVybiNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy9zb21lIHNhZmVndWFyZHNcblx0ICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLm1pbih0aGlzLmluZGV4LCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWVzW3RoaXMuaW5kZXhdO1xuXHQgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCAhPT0gdGhpcy5fc2h1ZmZsZWQubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZVZhbHVlcygpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdmFsID0gdGhpcy52YWx1ZXNbdGhpcy5fc2h1ZmZsZWRbdGhpcy5pbmRleF1dO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBhdHRlcm4gdXNlZCB0byBzZWxlY3QgdGhlIG5leHRcblx0XHQgKiAgaXRlbSBmcm9tIHRoZSB2YWx1ZXMgYXJyYXlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybFBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtUb25lLkN0cmxQYXR0ZXJuLlR5cGV9XG5cdFx0ICogIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBudWxsO1xuXHQgICAgICAgICAgICAvL3RoZSBmaXJzdCBpbmRleFxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcERvd24gfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbU9uY2UgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZVVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93biB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93blVwIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVEb3duKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL3RoZSBkaXJlY3Rpb25cblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcERvd24gfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZVVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd25VcCB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlRG93bikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9yYW5kb21zXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZVZhbHVlcygpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uUmFuZG9tKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy52YWx1ZXMubGVuZ3RoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgbmV4dCB2YWx1ZSBnaXZlbiB0aGUgY3VycmVudCBwb3NpdGlvblxuXHRcdCAqICBhbmQgcGF0dGVybi5cblx0XHQgKiAgQHJldHVybiB7Kn0gVGhlIG5leHQgdmFsdWVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdCAgICAgICAgLy9jaG9vc2UgdGhlIG5leHQgaW5kZXhcblx0ICAgICAgICBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd24pIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleC0tO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnZhbHVlcy5sZW5ndGggLSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXBEb3duIHx8IHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duVXApIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4Kys7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4LS07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluZGV4ID49IHRoaXMudmFsdWVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDI7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbSkge1xuXHQgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy52YWx1ZXMubGVuZ3RoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21XYWxrKSB7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpIDwgMC41KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4LS07XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5tYXgodGhpcy5pbmRleCwgMCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4Kys7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5taW4odGhpcy5pbmRleCwgdGhpcy52YWx1ZXMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgICAgIC8vcmVzaHVmZmxlIHRoZSB2YWx1ZXMgZm9yIG5leHQgdGltZVxuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZVZhbHVlcygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlVXApIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDI7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggLT0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlRG93bikge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCAtPSAyO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDE7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2h1ZmZsZXMgdGhlIHZhbHVlcyBhbmQgcGxhY2VzIHRoZSByZXN1bHRzIGludG8gdGhlIF9zaHVmZmxlZFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUuX3NodWZmbGVWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGNvcHkgPSBbXTtcblx0ICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgY29weVtpXSA9IGk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHdoaWxlIChjb3B5Lmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgdmFyIHJhbmRWYWwgPSBjb3B5LnNwbGljZShNYXRoLmZsb29yKGNvcHkubGVuZ3RoICogTWF0aC5yYW5kb20oKSksIDEpO1xuXHQgICAgICAgICAgICB0aGlzLl9zaHVmZmxlZC5wdXNoKHJhbmRWYWxbMF0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ3RybFBhdHRlcm59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsUGF0dGVybjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBDaG9vc2UgYSByYW5kb20gdmFsdWUuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciByYW5kb21XYWxrID0gbmV3IFRvbmUuQ3RybFJhbmRvbSh7XG5cdFx0ICogXHRcIm1pblwiIDogMCxcblx0XHQgKiBcdFwibWF4XCIgOiAxMCxcblx0XHQgKiBcdFwiaW50ZWdlclwiIDogdHJ1ZVxuXHRcdCAqIH0pO1xuXHRcdCAqIHJhbmRvbVdhbGsuZXZhbCgpO1xuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfFRpbWU9fSBtaW4gVGhlIG1pbmltdW0gcmV0dXJuIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxUaW1lPX0gbWF4IFRoZSBtYXhpbXVtIHJldHVybiB2YWx1ZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFJhbmRvbSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdtaW4nLFxuXHQgICAgICAgICAgICAnbWF4J1xuXHQgICAgICAgIF0sIFRvbmUuQ3RybFJhbmRvbSk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaW5pbXVtIHJldHVybiB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfFRpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pbiA9IG9wdGlvbnMubWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtYXhpbXVtIHJldHVybiB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfFRpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1heCA9IG9wdGlvbnMubWF4O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIHRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIGFuIGludGVnZXJcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmludGVnZXIgPSBvcHRpb25zLmludGVnZXI7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsUmFuZG9tKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUmFuZG9tLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICdpbnRlZ2VyJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIGEgcmFuZG9tIHZhbHVlIGJldHdlZW4gbWluIGFuZCBtYXguIFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybFJhbmRvbSNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DdHJsUmFuZG9tLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbWluID0gdGhpcy50b1NlY29uZHModGhpcy5taW4pO1xuXHQgICAgICAgICAgICB2YXIgbWF4ID0gdGhpcy50b1NlY29uZHModGhpcy5tYXgpO1xuXHQgICAgICAgICAgICB2YXIgcmFuZCA9IE1hdGgucmFuZG9tKCk7XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSByYW5kICogbWluICsgKDEgLSByYW5kKSAqIG1heDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW50ZWdlcikge1xuXHQgICAgICAgICAgICAgICAgdmFsID0gTWF0aC5mbG9vcih2YWwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsUmFuZG9tO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgZGF0YSBzdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgbXVsdGlwbGUgYnVmZmVycy5cblx0XHQgKiAgXG5cdFx0ICogIEBwYXJhbSAge09iamVjdHxBcnJheX0gICAgdXJscyAgICAgIEFuIG9iamVjdCBsaXRlcmFsIG9yIGFycmF5XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHVybHMgdG8gbG9hZC5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZC4gXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9hZCBhIHdob2xlIGJhbmsgb2YgcGlhbm8gc2FtcGxlc1xuXHRcdCAqIHZhciBwaWFub1NhbXBsZXMgPSBuZXcgVG9uZS5CdWZmZXJzKHtcblx0XHQgKiBcdFwiQzRcIiA6IFwicGF0aC90by9DNC5tcDNcIlxuXHRcdCAqIFx0XCJDIzRcIiA6IFwicGF0aC90by9DIzQubXAzXCJcblx0XHQgKiBcdFwiRDRcIiA6IFwicGF0aC90by9ENC5tcDNcIlxuXHRcdCAqIFx0XCJEIzRcIiA6IFwicGF0aC90by9EIzQubXAzXCJcblx0XHQgKiBcdC4uLlxuXHRcdCAqIH0sIGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3BsYXkgb25lIG9mIHRoZSBzYW1wbGVzIHdoZW4gdGhleSBhbGwgbG9hZFxuXHRcdCAqIFx0cGxheWVyLmJ1ZmZlciA9IHBpYW5vU2FtcGxlcy5nZXQoXCJDNFwiKTtcblx0XHQgKiBcdHBsYXllci5zdGFydCgpO1xuXHRcdCAqIH0pO1xuXHRcdCAqIFx0QGV4YW1wbGVcblx0XHQgKiAvL1RvIHBhc3MgaW4gYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGluIHRoZSBzZWNvbmQgcGFyYW1ldGVyXG5cdFx0ICogdmFyIGJ1ZmZlcnMgPSBuZXcgVG9uZS5CdWZmZXJzKHVybHMsIHtcblx0XHQgKiBcdFwib25sb2FkXCIgOiBjYWxsYmFjayxcblx0XHQgKiBcdFwiYmFzZVVybFwiIDogXCIuLi9wYXRoL3RvL2F1ZGlvL1wiXG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycyA9IGZ1bmN0aW9uICh1cmxzKSB7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIHVybHMgZnJvbSB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3MsIFtcblx0ICAgICAgICAgICAgJ29ubG9hZCcsXG5cdCAgICAgICAgICAgICdiYXNlVXJsJ1xuXHQgICAgICAgIF0sIFRvbmUuQnVmZmVycyk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgYnVmZmVyc1xuXHRcdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0ge307XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBwYXRoIHdoaWNoIGlzIHByZWZpeGVkIGJlZm9yZSBldmVyeSB1cmwuXG5cdFx0XHQgKiAgQHR5cGUgIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50ID0gMDtcblx0ICAgICAgICAvL2FkZCBlYWNoIG9uZVxuXHQgICAgICAgIGZvciAodmFyIGtleSBpbiB1cmxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCsrO1xuXHQgICAgICAgICAgICB0aGlzLmFkZChrZXksIHVybHNba2V5XSwgdGhpcy5fYnVmZmVyTG9hZGVkLmJpbmQodGhpcywgb3B0aW9ucy5vbmxvYWQpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CdWZmZXJzKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdiYXNlVXJsJzogJydcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJ1ZSBpZiB0aGUgYnVmZmVycyBvYmplY3QgaGFzIGEgYnVmZmVyIGJ5IHRoYXQgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIG5hbWUgIFRoZSBrZXkgb3IgaW5kZXggb2YgdGhlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLlxuXHRcdCAqICBAcmV0dXJuICB7Qm9vbGVhbn1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVycy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IGEgYnVmZmVyIGJ5IG5hbWUuIElmIGFuIGFycmF5IHdhcyBsb2FkZWQsIFxuXHRcdCAqICB0aGVuIHVzZSB0aGUgYXJyYXkgaW5kZXguXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICBuYW1lICBUaGUga2V5IG9yIGluZGV4IG9mIHRoZSBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIGlmICh0aGlzLmhhcyhuYW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyc1tuYW1lXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyczogbm8gYnVmZmVyIG5hbWVkICcgKyBuYW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEEgYnVmZmVyIHdhcyBsb2FkZWQuIGRlY3JlbWVudCB0aGUgY291bnRlci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuX2J1ZmZlckxvYWRlZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudC0tO1xuXHQgICAgICAgIGlmICh0aGlzLl9sb2FkaW5nQ291bnQgPT09IDAgJiYgY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVycyNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlcnMucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaXNMb2FkZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBidWZmTmFtZSBpbiB0aGlzLl9idWZmZXJzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnVmZiA9IHRoaXMuZ2V0KGJ1ZmZOYW1lKTtcblx0ICAgICAgICAgICAgICAgIGlzTG9hZGVkID0gaXNMb2FkZWQgJiYgYnVmZi5sb2FkZWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIGJ1ZmZlciBieSBuYW1lIGFuZCB1cmwgdG8gdGhlIEJ1ZmZlcnNcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBuYW1lICAgICAgQSB1bmlxdWUgbmFtZSB0byBnaXZlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXJcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfFRvbmUuQnVmZmVyfEF1ZGlvYnVmZmVyfSAgdXJsICBFaXRoZXIgdGhlIHVybCBvZiB0aGUgYnVmZXIsIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYWRkZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgY2FsbGJhY2sgPSBUb25lLmRlZmF1bHRBcmcoY2FsbGJhY2ssIFRvbmUubm9PcCk7XG5cdCAgICAgICAgaWYgKHVybCBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0gPSB1cmw7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodXJsIGluc3RhbmNlb2YgQXVkaW9CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXSA9IG5ldyBUb25lLkJ1ZmZlcih1cmwpO1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcodXJsKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzW25hbWVdID0gbmV3IFRvbmUuQnVmZmVyKHRoaXMuYmFzZVVybCArIHVybCwgY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlcnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl9idWZmZXJzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0uZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CdWZmZXJzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBidXNlcyBhcmUgYW5vdGhlciB3YXkgb2Ygcm91dGluZyBhdWRpb1xuXHRcdCAqXG5cdFx0ICogIGF1Z21lbnRzIFRvbmUucHJvdG90eXBlIHRvIGluY2x1ZGUgc2VuZCBhbmQgcmVjaWV2ZVxuXHRcdCAqL1xuXHQgICAgLyoqXG5cdFx0ICogIEFsbCBvZiB0aGUgcm91dGVzXG5cdFx0ICpcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIEJ1c2VzID0ge307XG5cdCAgICAvKipcblx0XHQgKiAgU2VuZCB0aGlzIHNpZ25hbCB0byB0aGUgY2hhbm5lbCBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9IGNoYW5uZWxOYW1lIEEgbmFtZWQgY2hhbm5lbCB0byBzZW5kIHRoZSBzaWduYWwgdG8uXG5cdFx0ICogIEBwYXJhbSAge0RlY2liZWxzfSBhbW91bnQgVGhlIGFtb3VudCBvZiB0aGUgc291cmNlIHRvIHNlbmQgdG8gdGhlIGJ1cy5cblx0XHQgKiAgQHJldHVybiB7R2Fpbk5vZGV9IFRoZSBnYWluIG5vZGUgd2hpY2ggY29ubmVjdHMgdGhpcyBub2RlIHRvIHRoZSBkZXNpcmVkIGNoYW5uZWwuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCB0byBhZGp1c3QgdGhlIGxldmVscyBvZiB0aGUgc2VuZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc2VuZChcInJldmVyYlwiLCAtMTIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIChjaGFubmVsTmFtZSwgYW1vdW50KSB7XG5cdCAgICAgICAgaWYgKCFCdXNlcy5oYXNPd25Qcm9wZXJ0eShjaGFubmVsTmFtZSkpIHtcblx0ICAgICAgICAgICAgQnVzZXNbY2hhbm5lbE5hbWVdID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgYW1vdW50ID0gVG9uZS5kZWZhdWx0QXJnKGFtb3VudCwgMCk7XG5cdCAgICAgICAgdmFyIHNlbmRLbm9iID0gbmV3IFRvbmUuR2FpbihhbW91bnQsIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0KHNlbmRLbm9iKTtcblx0ICAgICAgICBzZW5kS25vYi5jb25uZWN0KEJ1c2VzW2NoYW5uZWxOYW1lXSk7XG5cdCAgICAgICAgcmV0dXJuIHNlbmRLbm9iO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZWNpZXZlIHRoZSBpbnB1dCBmcm9tIHRoZSBkZXNpcmVkIGNoYW5uZWxOYW1lIHRvIHRoZSBpbnB1dFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gY2hhbm5lbE5hbWUgQSBuYW1lZCBjaGFubmVsIHRvIHNlbmQgdGhlIHNpZ25hbCB0by5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gY2hhbm5lbE51bWJlciBUaGUgY2hhbm5lbCB0byBjb25uZWN0IHRvXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcmV2ZXJiRWZmZWN0LnJlY2VpdmUoXCJyZXZlcmJcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5yZWNlaXZlID0gZnVuY3Rpb24gKGNoYW5uZWxOYW1lLCBpbnB1dE51bSkge1xuXHQgICAgICAgIGlmICghQnVzZXMuaGFzT3duUHJvcGVydHkoY2hhbm5lbE5hbWUpKSB7XG5cdCAgICAgICAgICAgIEJ1c2VzW2NoYW5uZWxOYW1lXSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIEJ1c2VzW2NoYW5uZWxOYW1lXS5jb25uZWN0KHRoaXMsIDAsIGlucHV0TnVtKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvL3JlbW92ZSBhbGwgdGhlIHNlbmQvcmVjZWl2ZXMgd2hlbiBhIG5ldyBhdWRpbyBjb250ZXh0IGlzIHBhc3NlZCBpblxuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5CdXNlcykge1xuXHQgICAgICAgICAgICBCdXNlcyA9IGNvbnRleHQuQnVzZXM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgQnVzZXMgPSB7fTtcblx0ICAgICAgICAgICAgY29udGV4dC5CdXNlcyA9IEJ1c2VzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkRyYXcgaXMgdXNlZnVsIGZvciBzeW5jaHJvbml6aW5nIHZpc3VhbHMgYW5kIGF1ZGlvIGV2ZW50cy5cblx0XHQgKiAgICAgICAgIENhbGxiYWNrcyBmcm9tIFRvbmUuVHJhbnNwb3J0IG9yIGFueSBvZiB0aGUgVG9uZS5FdmVudCBjbGFzc2VzXG5cdFx0ICogICAgICAgICBhbHdheXMgaGFwcGVuIF9iZWZvcmVfIHRoZSBzY2hlZHVsZWQgdGltZSBhbmQgYXJlIG5vdCBzeW5jaHJvbml6ZWRcblx0XHQgKiAgICAgICAgIHRvIHRoZSBhbmltYXRpb24gZnJhbWUgc28gdGhleSBhcmUgbm90IGdvb2QgZm9yIHRyaWdnZXJpbmcgdGlnaHRseVxuXHRcdCAqICAgICAgICAgc3luY2hyb25pemVkIHZpc3VhbHMgYW5kIHNvdW5kLiBUb25lLkRyYXcgbWFrZXMgaXQgZWFzeSB0byBzY2hlZHVsZVxuXHRcdCAqICAgICAgICAgY2FsbGJhY2tzIHVzaW5nIHRoZSBBdWRpb0NvbnRleHQgdGltZSBhbmQgdXNlcyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuXG5cdFx0ICogICAgICAgICBcblx0XHQgKiAgQHNpbmdsZXRvblxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdC8vdXNlIHRoZSB0aW1lIGFyZ3VtZW50IHRvIHNjaGVkdWxlIGEgY2FsbGJhY2sgd2l0aCBUb25lLkRyYXdcblx0XHQgKiBcdFRvbmUuRHJhdy5zY2hlZHVsZShmdW5jdGlvbigpe1xuXHRcdCAqIFx0XHQvL2RvIGRyYXdpbmcgb3IgRE9NIG1hbmlwdWxhdGlvbiBoZXJlXG5cdFx0ICogXHR9LCB0aW1lKVxuXHRcdCAqIH0sIFwiKzAuNVwiKVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EcmF3ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIGV2ZW50cy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGR1cmF0aW9uIGFmdGVyIHdoaWNoIGV2ZW50cyBhcmUgbm90IGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQGRlZmF1bHQgMC4yNVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5leHBpcmF0aW9uID0gMC4yNTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgYmVmb3JlIHRoZSBzY2hlZHVsZWQgdGltZSBcblx0XHRcdCAqICB0aGF0IHRoZSBjYWxsYmFjayBjYW4gYmUgaW52b2tlZC4gRGVmYXVsdCBpc1xuXHRcdFx0ICogIGhhbGYgdGhlIHRpbWUgb2YgYW4gYW5pbWF0aW9uIGZyYW1lICgwLjAwOCBzZWNvbmRzKS5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAZGVmYXVsdCAwLjAwOFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hbnRpY2lwYXRpb24gPSAwLjAwODtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZHJhdyBsb29wXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYm91bmREcmF3TG9vcCA9IHRoaXMuX2RyYXdMb29wLmJpbmQodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5EcmF3KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZSBhIGZ1bmN0aW9uIGF0IHRoZSBnaXZlbiB0aW1lIHRvIGJlIGludm9rZWRcblx0XHQgKiAgb24gdGhlIG5lYXJlc3QgYW5pbWF0aW9uIGZyYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBDYWxsYmFjayBpcyBpbnZva2VkIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICB0aW1lICAgICAgVGhlIHRpbWUgcmVsYXRpdmUgdG8gdGhlIEF1ZGlvQ29udGV4dCB0aW1lXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBpbnZva2UgdGhlIGNhbGxiYWNrLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5EcmF3fSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcblx0ICAgICAgICAgICAgdGltZTogdGhpcy50b1NlY29uZHModGltZSlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBkcmF3IGxvb3Agb24gdGhlIGZpcnN0IGV2ZW50XG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kRHJhd0xvb3ApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGV2ZW50cyBzY2hlZHVsZWQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBhZnRlciAgVGltZSBhZnRlciB3aGljaCBzY2hlZHVsZWQgZXZlbnRzIHdpbGwgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2NoZWR1bGluZyB0aW1lbGluZS5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRHJhd30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdy5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCh0aGlzLnRvU2Vjb25kcyhhZnRlcikpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZHJhdyBsb29wXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcucHJvdG90eXBlLl9kcmF3TG9vcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm93ID0gVG9uZS5ub3coKTtcblx0ICAgICAgICB3aGlsZSAodGhpcy5fZXZlbnRzLmxlbmd0aCAmJiB0aGlzLl9ldmVudHMucGVlaygpLnRpbWUgLSB0aGlzLmFudGljaXBhdGlvbiA8PSBub3cpIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzLnNoaWZ0KCk7XG5cdCAgICAgICAgICAgIGlmIChub3cgLSBldmVudC50aW1lIDw9IHRoaXMuZXhwaXJhdGlvbikge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuY2FsbGJhY2soKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kRHJhd0xvb3ApO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvL21ha2UgYSBzaW5nbGV0b25cblx0ICAgIFRvbmUuRHJhdyA9IG5ldyBUb25lLkRyYXcoKTtcblx0ICAgIHJldHVybiBUb25lLkRyYXc7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQm90aCBUb25lLlBhbm5lcjNEIGFuZCBUb25lLkxpc3RlbmVyIGhhdmUgYSBwb3NpdGlvbiBpbiAzRCBzcGFjZVxuXHRcdCAqICAgICAgICAgIHVzaW5nIGEgcmlnaHQtaGFuZGVkIGNhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbS5cblx0XHQgKiAgICAgICAgICBUaGUgdW5pdHMgdXNlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gYXJlIG5vdCBkZWZpbmVkO1xuXHRcdCAqICAgICAgICAgIHRoZXNlIGNvb3JkaW5hdGVzIGFyZSBpbmRlcGVuZGVudC9pbnZhcmlhbnQgb2YgYW55IHBhcnRpY3VsYXJcblx0XHQgKiAgICAgICAgICB1bml0cyBzdWNoIGFzIG1ldGVycyBvciBmZWV0LiBUb25lLlBhbm5lcjNEIG9iamVjdHMgaGF2ZSBhbiBmb3J3YXJkXG5cdFx0ICogICAgICAgICAgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgZGlyZWN0aW9uIHRoZSBzb3VuZCBpcyBwcm9qZWN0aW5nLiBBZGRpdGlvbmFsbHksXG5cdFx0ICogICAgICAgICAgdGhleSBoYXZlIGEgc291bmQgY29uZSByZXByZXNlbnRpbmcgaG93IGRpcmVjdGlvbmFsIHRoZSBzb3VuZCBpcy5cblx0XHQgKiAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHNvdW5kIGNvdWxkIGJlIG9tbmlkaXJlY3Rpb25hbCwgaW4gd2hpY2ggY2FzZSBpdCB3b3VsZFxuXHRcdCAqICAgICAgICAgIGJlIGhlYXJkIGFueXdoZXJlIHJlZ2FyZGxlc3Mgb2YgaXRzIGZvcndhcmQsIG9yIGl0IGNhbiBiZSBtb3JlIGRpcmVjdGlvbmFsXG5cdFx0ICogICAgICAgICAgYW5kIGhlYXJkIG9ubHkgaWYgaXQgaXMgZmFjaW5nIHRoZSBsaXN0ZW5lci4gVG9uZS5MaXN0ZW5lciBvYmplY3RzXG5cdFx0ICogICAgICAgICAgKHJlcHJlc2VudGluZyBhIHBlcnNvbidzIGVhcnMpIGhhdmUgYW4gZm9yd2FyZCBhbmQgdXAgdmVjdG9yXG5cdFx0ICogICAgICAgICAgcmVwcmVzZW50aW5nIGluIHdoaWNoIGRpcmVjdGlvbiB0aGUgcGVyc29uIGlzIGZhY2luZy4gQmVjYXVzZSBib3RoIHRoZVxuXHRcdCAqICAgICAgICAgIHNvdXJjZSBzdHJlYW0gYW5kIHRoZSBsaXN0ZW5lciBjYW4gYmUgbW92aW5nLCB0aGV5IGJvdGggaGF2ZSBhIHZlbG9jaXR5XG5cdFx0ICogICAgICAgICAgdmVjdG9yIHJlcHJlc2VudGluZyBib3RoIHRoZSBzcGVlZCBhbmQgZGlyZWN0aW9uIG9mIG1vdmVtZW50LiBUYWtlbiB0b2dldGhlcixcblx0XHQgKiAgICAgICAgICB0aGVzZSB0d28gdmVsb2NpdGllcyBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBhIGRvcHBsZXIgc2hpZnQgZWZmZWN0IHdoaWNoIGNoYW5nZXMgdGhlIHBpdGNoLlxuXHRcdCAqICAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgTm90ZTogdGhlIHBvc2l0aW9uIG9mIHRoZSBMaXN0ZW5lciB3aWxsIGhhdmUgbm8gZWZmZWN0IG9uIG5vZGVzIG5vdCBjb25uZWN0ZWQgdG8gYSBUb25lLlBhbm5lcjNEXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkcyB0aGUgY3VycmVudCBmb3J3YXJkIG9yaWVudGF0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBbXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDBcblx0ICAgICAgICBdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBbXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDBcblx0ICAgICAgICBdO1xuXHQgICAgICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIHNldCB0aGUgZGVmYXVsdCBwb3NpdGlvbi9mb3J3YXJkXG5cdCAgICAgICAgICAgIHRoaXMuc2V0KExpc3RlbmVyQ29uc3RydWN0b3IuZGVmYXVsdHMpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5MaXN0ZW5lcik7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHMgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwb3NpdGlvblgnOiAwLFxuXHQgICAgICAgICdwb3NpdGlvblknOiAwLFxuXHQgICAgICAgICdwb3NpdGlvblonOiAwLFxuXHQgICAgICAgICdmb3J3YXJkWCc6IDAsXG5cdCAgICAgICAgJ2ZvcndhcmRZJzogMCxcblx0ICAgICAgICAnZm9yd2FyZFonOiAxLFxuXHQgICAgICAgICd1cFgnOiAwLFxuXHQgICAgICAgICd1cFknOiAxLFxuXHQgICAgICAgICd1cFonOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJhbXAgdGltZSB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBzZXRUYXJnZXRBdFRpbWVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5fcmFtcFRpbWVDb25zdGFudCA9IDAuMDE7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGxpc3RlbmVyIGluIDNkIHNwYWNlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkxpc3RlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblouc2V0VGFyZ2V0QXRUaW1lKHosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnNldFBvc2l0aW9uKHgsIHksIHopO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBsaXN0ZW5lciB1c2luZyB0d28gdmVjdG9ycywgdGhlIGZvcndhcmRcblx0XHQgKiAgdmVjdG9yICh3aGljaCBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIGZhY2luZykgYW5kIHRoZSB1cCB2ZWN0b3Jcblx0XHQgKiAgKHdoaWNoIHRoZSB1cCBkaXJlY3Rpb24gb2YgdGhlIGxpc3RlbmVyKS4gQW4gdXAgdmVjdG9yXG5cdFx0ICogIG9mIDAsIDAsIDEgaXMgZXF1aXZhbGVudCB0byB0aGUgbGlzdGVuZXIgc3RhbmRpbmcgdXAgaW4gdGhlIFogZGlyZWN0aW9uLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB1cFhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdXBZXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHVwWlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkxpc3RlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5zZXRPcmllbnRhdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6LCB1cFgsIHVwWSwgdXBaKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRYLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuZm9yd2FyZFkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnVwWC5zZXRUYXJnZXRBdFRpbWUodXBYLCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIudXBZLnNldFRhcmdldEF0VGltZSh1cFksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci51cFouc2V0VGFyZ2V0QXRUaW1lKHVwWiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuc2V0T3JpZW50YXRpb24oeCwgeSwgeiwgdXBYLCB1cFksIHVwWik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3Bvc2l0aW9uWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMF0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblswXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAncG9zaXRpb25ZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblsxXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzFdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25aXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdwb3NpdGlvblonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzJdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMl07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXJzIGZyb250IGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB3aGljaCB3YXkgdGhleSBhcmUgZmFjaW5nLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgZm9yd2FyZFhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ2ZvcndhcmRYJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVycyBmcm9udCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgd2hpY2ggd2F5IHRoZXkgYXJlIGZhY2luZy5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIGZvcndhcmRZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdmb3J3YXJkWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcnMgZnJvbnQgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHdoaWNoIHdheSB0aGV5IGFyZSBmYWNpbmcuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBmb3J3YXJkWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAnZm9yd2FyZFonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzJdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMl07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXIncyB1cCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgdGhlIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgc3RhbmRpbmcgaW4uXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSB1cFhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3VwWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bM10gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblszXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcidzIHVwIGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB0aGUgZGlyZWN0aW9uIHRoZSBsaXN0ZW5lciBpcyBzdGFuZGluZyBpbi5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHVwWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAndXBZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvbls0XSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzRdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVyJ3MgdXAgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHRoZSBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIHN0YW5kaW5nIGluLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgdXBaXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICd1cFonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzVdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bNV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxpc3RlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy9TSU5HTEVUT04gU0VUVVBcblx0ICAgIHZhciBMaXN0ZW5lckNvbnN0cnVjdG9yID0gVG9uZS5MaXN0ZW5lcjtcblx0ICAgIFRvbmUuTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5MaXN0ZW5lciBpbnN0YW5jZW9mIExpc3RlbmVyQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgLy9hIHNpbmdsZSBsaXN0ZW5lciBvYmplY3Rcblx0ICAgICAgICAgICAgVG9uZS5MaXN0ZW5lciA9IGNvbnRleHQuTGlzdGVuZXI7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9tYWtlIG5ldyBMaXN0ZW5lciBpbnNpZGVzXG5cdCAgICAgICAgICAgIFRvbmUuTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb250ZXh0Lkxpc3RlbmVyID0gVG9uZS5MaXN0ZW5lcjtcblx0ICAgIH0pO1xuXHQgICAgLy9FTkQgU0lOR0xFVE9OIFNFVFVQXG5cdCAgICByZXR1cm4gVG9uZS5MaXN0ZW5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQmVjYXVzZSBvZiBhIGJ1ZyBpbiBpT1MgY2F1c2luZyB0aGUgY3VycmVudFRpbWUgdG8gaW5jcmVtZW50XG5cdFx0ICogYmVmb3JlIHRoZSByZW5kZXJpbmcgaXMgc3RhcnRlZCwgc29tZXRpbWVzIGl0IHRha2VzIG11bHRpcGxlXG5cdFx0ICogYXR0ZW1wdHMgdG8gcmVuZGVyIHRoZSBhdWRpbyBjb3JyZWN0bHkuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIGZ1bmN0aW9uIGF0dGVtcHRSZW5kZXIoY2FsbGJhY2ssIGR1cmF0aW9uLCBzYW1wbGVSYXRlLCB0cmllcykge1xuXHQgICAgICAgIHRyaWVzID0gVG9uZS5kZWZhdWx0QXJnKHRyaWVzLCAwKTtcblx0ICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBUb25lLk9mZmxpbmVDb250ZXh0KDIsIGR1cmF0aW9uLCBzYW1wbGVSYXRlKTtcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgIC8vaW52b2tlIHRoZSBjYWxsYmFjay9zY2hlZHVsaW5nXG5cdCAgICAgICAgdmFyIHJlc3BvbnNlID0gY2FsbGJhY2soVG9uZS5UcmFuc3BvcnQpO1xuXHQgICAgICAgIGlmIChjb250ZXh0LmN1cnJlbnRUaW1lID4gMCAmJiB0cmllcyA8IDEwMDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRSZW5kZXIoY2FsbGJhY2ssIGR1cmF0aW9uLCBzYW1wbGVSYXRlLCArK3RyaWVzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAgICAgJ3Jlc3BvbnNlJzogcmVzcG9uc2UsXG5cdCAgICAgICAgICAgICAgICAnY29udGV4dCc6IGNvbnRleHRcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdCAgICAvKipcblx0XHQgKiAgR2VuZXJhdGUgYSBidWZmZXIgYnkgcmVuZGVyaW5nIGFsbCBvZiB0aGUgVG9uZS5qcyBjb2RlIHdpdGhpbiB0aGUgY2FsbGJhY2sgdXNpbmcgdGhlIE9mZmxpbmVBdWRpb0NvbnRleHQuXG5cdFx0ICogIFRoZSBPZmZsaW5lQXVkaW9Db250ZXh0IGlzIGNhcGFibGUgb2YgcmVuZGVyaW5nIG11Y2ggZmFzdGVyIHRoYW4gcmVhbCB0aW1lIGluIG1hbnkgY2FzZXMuXG5cdFx0ICogIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBhbHNvIHBhc3NlcyBpbiBhbiBvZmZsaW5lIGluc3RhbmNlIG9mIFRvbmUuVHJhbnNwb3J0IHdoaWNoIGNhbiBiZSB1c2VkXG5cdFx0ICogIHRvIHNjaGVkdWxlIGV2ZW50cyBhbG9uZyB0aGUgVHJhbnNwb3J0LiAqKk5PVEUqKiBPZmZsaW5lQXVkaW9Db250ZXh0IGhhcyB0aGUgc2FtZSByZXN0cmljdGlvbnNcblx0XHQgKiAgYXMgdGhlIEF1ZGlvQ29udGV4dCBpbiB0aGF0IG9uIGNlcnRhaW4gcGxhdGZvcm1zIChsaWtlIGlPUykgaXQgbXVzdCBiZSBpbnZva2VkIGJ5IGFuIGV4cGxpY2l0XG5cdFx0ICogIHVzZXIgYWN0aW9uIGxpa2UgYSBjbGljayBvciB0YXAuIFxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBBbGwgVG9uZS5qcyBub2RlcyB3aGljaCBhcmUgY3JlYXRlZCBhbmQgc2NoZWR1bGVkIHdpdGhpbiB0aGlzIGNhbGxiYWNrIGFyZSByZWNvcmRlZCBpbnRvIHRoZSBvdXRwdXQgQnVmZmVyLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgZHVyYXRpb24gICAgIHRoZSBhbW91bnQgb2YgdGltZSB0byByZWNvcmQgZm9yLlxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX0gIFRoZSBwcm9taXNlIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgVG9uZS5CdWZmZXIgb2YgdGhlIHJlY29yZGVkIG91dHB1dC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JlbmRlciAyIHNlY29uZHMgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiBUb25lLk9mZmxpbmUoZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vb25seSBub2RlcyBjcmVhdGVkIGluIHRoaXMgY2FsbGJhY2sgd2lsbCBiZSByZWNvcmRlZFxuXHRcdCAqIFx0dmFyIG9zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkudG9NYXN0ZXIoKS5zdGFydCgwKVxuXHRcdCAqIFx0Ly9zY2hlZHVsZSB0aGVpciBldmVudHNcblx0XHQgKiB9LCAyKS50aGVuKGZ1bmN0aW9uKGJ1ZmZlcil7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSBvdXRwdXQgYnVmZmVyXG5cdFx0ICogfSlcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIGFsc28gc2NoZWR1bGUgZXZlbnRzIGFsb25nIHRoZSBUcmFuc3BvcnRcblx0XHQgKiAvL3VzaW5nIHRoZSBwYXNzZWQgaW4gT2ZmbGluZSBUcmFuc3BvcnRcblx0XHQgKiBUb25lLk9mZmxpbmUoZnVuY3Rpb24oVHJhbnNwb3J0KXtcblx0XHQgKiBcdHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkudG9NYXN0ZXIoKVxuXHRcdCAqIFx0VHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0XHRvc2Muc3RhcnQodGltZSkuc3RvcCh0aW1lICsgMC4xKVxuXHRcdCAqIFx0fSwgMSlcblx0XHQgKiBcdFRyYW5zcG9ydC5zdGFydCgwLjIpXG5cdFx0ICogfSwgNCkudGhlbihmdW5jdGlvbihidWZmZXIpe1xuXHRcdCAqIFx0Ly9kbyBzb21ldGhpbmcgd2l0aCB0aGUgb3V0cHV0IGJ1ZmZlclxuXHRcdCAqIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgLy9zZXQgdGhlIE9mZmxpbmVBdWRpb0NvbnRleHRcblx0ICAgICAgICB2YXIgc2FtcGxlUmF0ZSA9IFRvbmUuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgIHZhciBvcmlnaW5hbENvbnRleHQgPSBUb25lLmNvbnRleHQ7XG5cdCAgICAgICAgdmFyIHJlbmRlclJldCA9IGF0dGVtcHRSZW5kZXIoY2FsbGJhY2ssIGR1cmF0aW9uLCBzYW1wbGVSYXRlKTtcblx0ICAgICAgICB2YXIgcmVzcG9uc2UgPSByZW5kZXJSZXQucmVzcG9uc2U7XG5cdCAgICAgICAgdmFyIGNvbnRleHQgPSByZW5kZXJSZXQuY29udGV4dDtcblx0ICAgICAgICB2YXIgcmV0O1xuXHQgICAgICAgIGlmIChyZXNwb25zZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0ICAgICAgICAgICAgLy93YWl0IGZvciB0aGUgcHJvbWlzZSB0byByZXNvbHZlXG5cdCAgICAgICAgICAgIHJldCA9IHJlc3BvbnNlLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgLy90aGVuIHJlbmRlciB0aGUgYXVkaW9cblx0ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnJlbmRlcigpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL3Byb2Nlc3MgdGhlIGF1ZGlvXG5cdCAgICAgICAgICAgIHJldCA9IGNvbnRleHQucmVuZGVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vcmV0dXJuIHRoZSBvcmlnaW5hbCBBdWRpb0NvbnRleHRcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBvcmlnaW5hbENvbnRleHQ7XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIGF1ZGlvXG5cdCAgICAgICAgcmV0dXJuIHJldC50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgLy93cmFwIGl0IGluIGEgVG9uZS5CdWZmZXJcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLkJ1ZmZlcihidWZmZXIpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9mZmxpbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogXHRAY2xhc3MgIFRvbmUuRWZmZWN0IGlzIHRoZSBiYXNlIGNsYXNzIGZvciBlZmZlY3RzLiBDb25uZWN0IHRoZSBlZmZlY3QgYmV0d2VlblxuXHRcdCAqIFx0ICAgICAgICB0aGUgZWZmZWN0U2VuZCBhbmQgZWZmZWN0UmV0dXJuIEdhaW5Ob2RlcywgdGhlbiBjb250cm9sIHRoZSBhbW91bnQgb2Zcblx0XHQgKiBcdCAgICAgICAgZWZmZWN0IHdoaWNoIGdvZXMgdG8gdGhlIG91dHB1dCB1c2luZyB0aGUgd2V0IGNvbnRyb2wuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFt3ZXRdIFRoZSBzdGFydGluZyB3ZXQgdmFsdWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkVmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3dldCddLCBUb25lLkVmZmVjdCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRyeXdldCBrbm9iIHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Dcm9zc0ZhZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG5ldyBUb25lLkNyb3NzRmFkZShvcHRpb25zLndldCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdldCBjb250cm9sIGlzIGhvdyBtdWNoIG9mIHRoZSBlZmZlY3RlZFxuXHRcdFx0ICogIHdpbGwgcGFzcyB0aHJvdWdoIHRvIHRoZSBvdXRwdXQuIDEgPSAxMDAlIGVmZmVjdGVkXG5cdFx0XHQgKiAgc2lnbmFsLCAwID0gMTAwJSBkcnkgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndldCA9IHRoaXMuX2RyeVdldC5mYWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbm5lY3QgdGhlIGVmZmVjdFNlbmQgdG8gdGhlIGlucHV0IG9mIGh0ZSBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29ubmVjdCB0aGUgb3V0cHV0IG9mIHRoZSBlZmZlY3QgdG8gdGhlIGVmZmVjdFJldHVyblxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fZHJ5V2V0LmEpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLmVmZmVjdFNlbmQpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuLmNvbm5lY3QodGhpcy5fZHJ5V2V0LmIpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3dldCddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVmZmVjdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0LmRlZmF1bHRzID0geyAnd2V0JzogMSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYWlucyB0aGUgZWZmZWN0IGluIGJldHdlZW4gdGhlIGVmZmVjdFNlbmQgYW5kIGVmZmVjdFJldHVyblxuXHRcdCAqICBAcGFyYW0gIHtUb25lfSBlZmZlY3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuY29ubmVjdEVmZmVjdCA9IGZ1bmN0aW9uIChlZmZlY3QpIHtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4oZWZmZWN0LCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnd2V0J10pO1xuXHQgICAgICAgIHRoaXMud2V0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkF1dG9GaWx0ZXIgaXMgYSBUb25lLkZpbHRlciB3aXRoIGEgVG9uZS5MRk8gY29ubmVjdGVkIHRvIHRoZSBmaWx0ZXIgY3V0b2ZmIGZyZXF1ZW5jeS5cblx0XHQgKiAgICAgICAgIFNldHRpbmcgdGhlIExGTyByYXRlIGFuZCBkZXB0aCBhbGxvd3MgZm9yIGNvbnRyb2wgb3ZlciB0aGUgZmlsdGVyIG1vZHVsYXRpb24gcmF0ZSBcblx0XHQgKiAgICAgICAgIGFuZCBkZXB0aC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgcmF0ZSBvZiB0aGUgTEZPLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeT19IGJhc2VGcmVxdWVuY3kgVGhlIGxvd2VyIHZhbHVlIG9mIHRoZSBMRk9zIG9zY2lsbGF0aW9uXG5cdCBcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeT19IG9jdGF2ZXMgVGhlIG51bWJlciBvZiBvY3RhdmVzIGFib3ZlIHRoZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jcmVhdGUgYW4gYXV0b2ZpbHRlciBhbmQgc3RhcnQgaXQncyBMRk9cblx0XHQgKiB2YXIgYXV0b0ZpbHRlciA9IG5ldyBUb25lLkF1dG9GaWx0ZXIoXCI0blwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICogLy9yb3V0ZSBhbiBvc2NpbGxhdG9yIHRocm91Z2ggdGhlIGZpbHRlciBhbmQgc3RhcnQgaXRcblx0XHQgKiB2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KGF1dG9GaWx0ZXIpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnb2N0YXZlcydcblx0ICAgICAgICBdLCBUb25lLkF1dG9GaWx0ZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBkcml2ZXMgdGhlIGZpbHRlciBjdXRvZmZcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZSc6IG9wdGlvbnMuZGVwdGhcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSByYW5nZSBvZiB0aGUgZmlsdGVyIG1vZHVsYXRpbmcgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggZnJlcXVlbmN5LiBcblx0XHRcdCAqIDAgPSBubyBtb2R1bGF0aW9uLiAxID0gZnVsbCBtb2R1bGF0aW9uLlxuXHRcdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2xmby5hbXBsaXR1ZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBIb3cgZmFzdCB0aGUgZmlsdGVyIG1vZHVsYXRlcyBiZXR3ZWVuIG1pbiBhbmQgbWF4LiBcblx0XHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmby5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpbHRlciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIob3B0aW9ucy5maWx0ZXIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvY3RhdmVzIHBsYWNlaG9sZGVyXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gMDtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuZmlsdGVyKTtcblx0ICAgICAgICB0aGlzLl9sZm8uY29ubmVjdCh0aGlzLmZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIHRoaXMuYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgIH07XG5cdCAgICAvL2V4dGVuZCBFZmZlY3Rcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXV0b0ZpbHRlciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHRzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMSxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZGVwdGgnOiAxLFxuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogMi42LFxuXHQgICAgICAgICdmaWx0ZXInOiB7XG5cdCAgICAgICAgICAgICd0eXBlJzogJ2xvd3Bhc3MnLFxuXHQgICAgICAgICAgICAncm9sbG9mZic6IC0xMixcblx0ICAgICAgICAgICAgJ1EnOiAxXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0YXJ0IHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0YXJ0LiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCB0aGUgZWZmZWN0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBMRk8gd2lsbCBzdG9wLiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGZpbHRlciB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW2RlbGF5PTBdIERlbGF5IHRpbWUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBlZmZlY3QgYWZ0ZXIgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IGhhcyBzdGFydGVkLiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoZGVsYXkpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3luYyhkZWxheSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVW5zeW5jIHRoZSBmaWx0ZXIgZnJvbSB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2xmby51bnN5bmMoKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUeXBlIG9mIG9zY2lsbGF0b3IgYXR0YWNoZWQgdG8gdGhlIEF1dG9GaWx0ZXIuIFxuXHRcdCAqIFBvc3NpYmxlIHZhbHVlczogXCJzaW5lXCIsIFwic3F1YXJlXCIsIFwidHJpYW5nbGVcIiwgXCJzYXd0b290aFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9GaWx0ZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIGZpbHRlcidzIGN1dG9mZiBmcmVxdWVuY3kuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLm1pbiA9IHRoaXMudG9GcmVxdWVuY3koZnJlcSk7XG5cdCAgICAgICAgICAgIC8vYW5kIHNldCB0aGUgbWF4XG5cdCAgICAgICAgICAgIHRoaXMub2N0YXZlcyA9IHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgZmlsdGVyJ3MgY3V0b2ZmIGZyZXF1ZW5jeS4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0O1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8ubWF4ID0gdGhpcy5iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgb2N0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xmby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZpbHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXV0b0ZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQXV0b1Bhbm5lciBpcyBhIFRvbmUuUGFubmVyIHdpdGggYW4gTEZPIGNvbm5lY3RlZCB0byB0aGUgcGFuIGFtb3VudC4gXG5cdFx0ICogICAgICAgICBNb3JlIG9uIHVzaW5nIGF1dG9wYW5uZXJzIFtoZXJlXShodHRwczovL3d3dy5hYmxldG9uLmNvbS9lbi9ibG9nL2F1dG9wYW4tY2hvcHBlci1lZmZlY3QtYW5kLW1vcmUtbGl2ZXNjaG9vbC8pLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gUmF0ZSBvZiBsZWZ0LXJpZ2h0IG9zY2lsbGF0aW9uLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhbiBhdXRvcGFubmVyIGFuZCBzdGFydCBpdCdzIExGT1xuXHRcdCAqIHZhciBhdXRvUGFubmVyID0gbmV3IFRvbmUuQXV0b1Bhbm5lcihcIjRuXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKiAvL3JvdXRlIGFuIG9zY2lsbGF0b3IgdGhyb3VnaCB0aGUgcGFubmVyIGFuZCBzdGFydCBpdFxuXHRcdCAqIHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QoYXV0b1Bhbm5lcikuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZyZXF1ZW5jeSddLCBUb25lLkF1dG9QYW5uZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBkcml2ZXMgdGhlIHBhbm5pbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZSc6IG9wdGlvbnMuZGVwdGgsXG5cdCAgICAgICAgICAgICdtaW4nOiAtMSxcblx0ICAgICAgICAgICAgJ21heCc6IDFcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbW91bnQgb2YgcGFubmluZyBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0LiBcblx0XHRcdCAqIDAgPSBhbHdheXMgY2VudGVyLiAxID0gZnVsbCByYW5nZSBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0LiBcblx0XHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9sZm8uYW1wbGl0dWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwYW5uZXIgbm9kZSB3aGljaCBkb2VzIHRoZSBwYW5uaW5nXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUGFubmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBuZXcgVG9uZS5QYW5uZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEhvdyBmYXN0IHRoZSBwYW5uZXIgbW9kdWxhdGVzIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQuIFxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX3Bhbm5lcik7XG5cdCAgICAgICAgdGhpcy5fbGZvLmNvbm5lY3QodGhpcy5fcGFubmVyLnBhbik7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2RlcHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICAvL2V4dGVuZCBFZmZlY3Rcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXV0b1Bhbm5lciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHRzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMSxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZGVwdGgnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RhcnQgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RhcnQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0b3AuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgcGFubmVyIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbZGVsYXk9MF0gRGVsYXkgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIGVmZmVjdCBhZnRlciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgaGFzIHN0YXJ0ZWQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uIChkZWxheSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zeW5jKGRlbGF5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIHBhbm5lciBmcm9tIHRoZSB0cmFuc3BvcnRcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9sZm8udW5zeW5jKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVHlwZSBvZiBvc2NpbGxhdG9yIGF0dGFjaGVkIHRvIHRoZSBBdXRvRmlsdGVyLiBcblx0XHQgKiBQb3NzaWJsZSB2YWx1ZXM6IFwic2luZVwiLCBcInNxdWFyZVwiLCBcInRyaWFuZ2xlXCIsIFwic2F3dG9vdGhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9sZm8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2RlcHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXV0b1Bhbm5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkF1dG9XYWggY29ubmVjdHMgYSBUb25lLkZvbGxvd2VyIHRvIGEgYmFuZHBhc3MgZmlsdGVyIChUb25lLkZpbHRlcikuXG5cdFx0ICogICAgICAgICAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVyIGlzIGFkanVzdGVkIHByb3BvcnRpb25hbGx5IHRvIHRoZVxuXHRcdCAqICAgICAgICAgIGluY29taW5nIHNpZ25hbCdzIGFtcGxpdHVkZS4gSW5zcGlyYXRpb24gZnJvbSBbVHVuYS5qc10oaHR0cHM6Ly9naXRodWIuY29tL0RpbmFobW9lL3R1bmEpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2Jhc2VGcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgdGhlIGZpbHRlciBpcyBzZXRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYXQgdGhlIGxvdyBwb2ludCBvZiB0aGUgd2FoXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IFtvY3RhdmVzXSBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIGJhc2VGcmVxdWVuY3lcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbHRlciB3aWxsIHN3ZWVwIHRvIHdoZW4gZnVsbHkgb3BlblxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbc2Vuc2l0aXZpdHldIFRoZSBkZWNpYmVsIHRocmVzaG9sZCBzZW5zaXRpdml0eSBmb3Jcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluY29taW5nIHNpZ25hbC4gTm9ybWFsIHJhbmdlIG9mIC00MCB0byAwLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBhdXRvV2FoID0gbmV3IFRvbmUuQXV0b1dhaCg1MCwgNiwgLTMwKS50b01hc3RlcigpO1xuXHRcdCAqIC8vaW5pdGlhbGl6ZSB0aGUgc3ludGggYW5kIGNvbm5lY3QgdG8gYXV0b3dhaFxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBTeW50aC5jb25uZWN0KGF1dG9XYWgpO1xuXHRcdCAqIC8vUSB2YWx1ZSBpbmZsdWVuY2VzIHRoZSBlZmZlY3Qgb2YgdGhlIHdhaCAtIGRlZmF1bHQgaXMgMlxuXHRcdCAqIGF1dG9XYWguUS52YWx1ZSA9IDY7XG5cdFx0ICogLy9tb3JlIGF1ZGlibGUgb24gaGlnaGVyIG5vdGVzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWggPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJyxcblx0ICAgICAgICAgICAgJ3NlbnNpdGl2aXR5J1xuXHQgICAgICAgIF0sIFRvbmUuQXV0b1dhaCk7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZW52ZWxvcGUgZm9sbG93ZXIuIFNldCB0aGUgYXR0YWNrL3JlbGVhc2Vcblx0XHRcdCAqICB0aW1pbmcgdG8gYWRqdXN0IGhvdyB0aGUgZW52ZWxvcGUgaXMgZm9sbG93ZWQuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRm9sbG93ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZm9sbG93ZXIgPSBuZXcgVG9uZS5Gb2xsb3dlcihvcHRpb25zLmZvbGxvd2VyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZXMgdGhlIGZvbGxvd2VyIHZhbHVlIHRvIHRoZSBmcmVxdWVuY3kgZG9tYWluXG5cdFx0XHQgKiAgQHR5cGUge1RvbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UgPSBuZXcgVG9uZS5TY2FsZUV4cCgwLCAxLCAwLjUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXQgZ2FpbiB0byBhZGp1c3QgdGhlIHNlbnNpdGl2aXR5XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5wdXRCb29zdCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7QmlxdWFkRmlsdGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmFuZHBhc3MgPSBuZXcgVG9uZS5GaWx0ZXIoe1xuXHQgICAgICAgICAgICAncm9sbG9mZic6IC00OCxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IDAsXG5cdCAgICAgICAgICAgICdRJzogb3B0aW9ucy5RXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wZWFraW5nID0gbmV3IFRvbmUuRmlsdGVyKDAsICdwZWFraW5nJyk7XG5cdCAgICAgICAgdGhpcy5fcGVha2luZy5nYWluLnZhbHVlID0gb3B0aW9ucy5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gb2YgdGhlIGZpbHRlci5cblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmdhaW4gPSB0aGlzLl9wZWFraW5nLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcXVhbGl0eSBvZiB0aGUgZmlsdGVyLlxuXHRcdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gdGhpcy5fYmFuZHBhc3MuUTtcblx0ICAgICAgICAvL3RoZSBjb250cm9sIHNpZ25hbCBwYXRoXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNoYWluKHRoaXMuX2lucHV0Qm9vc3QsIHRoaXMuZm9sbG93ZXIsIHRoaXMuX3N3ZWVwUmFuZ2UpO1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UuY29ubmVjdCh0aGlzLl9iYW5kcGFzcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UuY29ubmVjdCh0aGlzLl9wZWFraW5nLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy90aGUgZmlsdGVyZWQgcGF0aFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbih0aGlzLl9iYW5kcGFzcywgdGhpcy5fcGVha2luZywgdGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlXG5cdCAgICAgICAgdGhpcy5fc2V0U3dlZXBSYW5nZSgpO1xuXHQgICAgICAgIHRoaXMuc2Vuc2l0aXZpdHkgPSBvcHRpb25zLnNlbnNpdGl2aXR5O1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1dG9XYWgsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAxMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiA2LFxuXHQgICAgICAgICdzZW5zaXRpdml0eSc6IDAsXG5cdCAgICAgICAgJ1EnOiAyLFxuXHQgICAgICAgICdnYWluJzogMixcblx0ICAgICAgICAnZm9sbG93ZXInOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjMsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyB0aGF0IHRoZSBmaWx0ZXIgd2lsbCBzd2VlcCBhYm92ZSB0aGVcblx0XHQgKiBiYXNlRnJlcXVlbmN5LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9XYWgjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvV2FoLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0YXZlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0YXZlcztcblx0ICAgICAgICAgICAgdGhpcy5fc2V0U3dlZXBSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGJhc2UgZnJlcXVlbmN5IGZyb20gd2hpY2ggdGhlIHN3ZWVwIHdpbGwgc3RhcnQgZnJvbS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvV2FoI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQG5hbWUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b1dhaC5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJhc2VGcmVxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBiYXNlRnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0U3dlZXBSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNlbnNpdGl2aXR5IHRvIGNvbnRyb2wgaG93IHJlc3BvbnNpdmUgdG8gdGhlIGlucHV0IHNpZ25hbCB0aGUgZmlsdGVyIGlzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9XYWgjXG5cdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdCAqIEBuYW1lIHNlbnNpdGl2aXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvV2FoLnByb3RvdHlwZSwgJ3NlbnNpdGl2aXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5nYWluVG9EYigxIC8gdGhpcy5faW5wdXRCb29zdC5nYWluLnZhbHVlKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNlbnNpdGl2eSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pbnB1dEJvb3N0LmdhaW4udmFsdWUgPSAxIC8gVG9uZS5kYlRvR2FpbihzZW5zaXRpdnkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIHNldHMgdGhlIHN3ZWVwIHJhbmdlIG9mIHRoZSBzY2FsZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaC5wcm90b3R5cGUuX3NldFN3ZWVwUmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5taW4gPSB0aGlzLl9iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UubWF4ID0gTWF0aC5taW4odGhpcy5fYmFzZUZyZXF1ZW5jeSAqIE1hdGgucG93KDIsIHRoaXMuX29jdGF2ZXMpLCB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSAvIDIpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXV0b1dhaH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvV2FoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5mb2xsb3dlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mb2xsb3dlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYmFuZHBhc3MuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2JhbmRwYXNzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wZWFraW5nLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wZWFraW5nID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9pbnB1dEJvb3N0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9pbnB1dEJvb3N0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5nYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkF1dG9XYWg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTaWduYWwtcmF0ZSBtb2R1bG8gb3BlcmF0b3IuIE9ubHkgd29ya3MgaW4gQXVkaW9SYW5nZSBbLTEsIDFdIGFuZCBmb3IgbW9kdWx1c1xuXHRcdCAqICAgICAgICAgdmFsdWVzIGluIHRoZSBOb3JtYWxSYW5nZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gbW9kdWx1cyBUaGUgbW9kdWx1cyB0byBhcHBseS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbW9kID0gbmV3IFRvbmUuTW9kdWxvKDAuMilcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDAuNSkuY29ubmVjdChtb2QpO1xuXHRcdCAqIC8vbW9kIG91dHB1dHMgMC4xXG5cdFx0ICovXG5cdCAgICBUb25lLk1vZHVsbyA9IGZ1bmN0aW9uIChtb2R1bHVzKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgd2F2ZXNoYXBlciBnZXRzIHRoZSBpbnRlZ2VyIG11bHRpcGxlIG9mXG5cdFx0XHQgKiAgdGhlIGlucHV0IHNpZ25hbCBhbmQgdGhlIG1vZHVsdXMuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihNYXRoLnBvdygyLCAxNikpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnRlZ2VyIG11bHRpcGxlIGlzIG11bHRpcGxpZWQgYnkgdGhlIG1vZHVsdXNcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhbmQgc3VidHJhY3RlZCBmcm9tIHRoZSBpbnB1dCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtb2R1bHVzIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZFNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbChtb2R1bHVzKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5mYW4odGhpcy5fc2hhcGVyLCB0aGlzLl9zdWJ0cmFjdCk7XG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsLmNvbm5lY3QodGhpcy5fbXVsdGlwbHksIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5jb25uZWN0KHRoaXMuX211bHRpcGx5LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseS5jb25uZWN0KHRoaXMuX3N1YnRyYWN0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9zZXRXYXZlU2hhcGVyKG1vZHVsdXMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9kdWxvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gIG1vZCAgdGhlIG1vZHVsdXMgdG8gYXBwbHlcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9kdWxvLnByb3RvdHlwZS5fc2V0V2F2ZVNoYXBlciA9IGZ1bmN0aW9uIChtb2QpIHtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuc2V0TWFwKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdmFyIG11bHRpcGxlID0gTWF0aC5mbG9vcigodmFsICsgMC4wMDAxKSAvIG1vZCk7XG5cdCAgICAgICAgICAgIHJldHVybiBtdWx0aXBsZTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbW9kdWx1cyB2YWx1ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Nb2R1bG8jXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Nb2R1bG8ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2RTaWduYWwudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtb2QpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kU2lnbmFsLnZhbHVlID0gbW9kO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRXYXZlU2hhcGVyKG1vZCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb2R1bG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9kdWxvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vZHVsbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQml0Y3J1c2hlciBkb3duc2FtcGxlcyB0aGUgaW5jb21pbmcgc2lnbmFsIHRvIGEgZGlmZmVyZW50IGJpdGRlcHRoLlxuXHRcdCAqICAgICAgICAgTG93ZXJpbmcgdGhlIGJpdGRlcHRoIG9mIHRoZSBzaWduYWwgY3JlYXRlcyBkaXN0b3J0aW9uLiBSZWFkIG1vcmUgYWJvdXQgQml0Y3J1c2hpbmdcblx0XHQgKiAgICAgICAgIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpdGNydXNoZXIpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiaXRzIFRoZSBudW1iZXIgb2YgYml0cyB0byBkb3duc2FtcGxlIHRoZSBzaWduYWwuIE5vbWluYWwgcmFuZ2Vcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgb2YgMSB0byA4LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaW5pdGlhbGl6ZSBjcnVzaGVyIGFuZCByb3V0ZSBhIHN5bnRoIHRocm91Z2ggaXRcblx0XHQgKiB2YXIgY3J1c2hlciA9IG5ldyBUb25lLkJpdENydXNoZXIoNCkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5Nb25vU3ludGgoKS5jb25uZWN0KGNydXNoZXIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CaXRDcnVzaGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnYml0cyddLCBUb25lLkJpdENydXNoZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgdmFyIGludlN0ZXBTaXplID0gMSAvIE1hdGgucG93KDIsIG9wdGlvbnMuYml0cyAtIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFN1YnRyYWN0IHRoZSBpbnB1dCBzaWduYWwgYW5kIHRoZSBtb2R1bHVzIG9mIHRoZSBpbnB1dCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2QgZnVuY3Rpb25cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTW9kdWxvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bG8gPSBuZXcgVG9uZS5Nb2R1bG8oaW52U3RlcFNpemUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGtlZXBzIHRyYWNrIG9mIHRoZSBiaXRzXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYml0cyA9IG9wdGlvbnMuYml0cztcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuZmFuKHRoaXMuX3N1YnRyYWN0LCB0aGlzLl9tb2R1bG8pO1xuXHQgICAgICAgIHRoaXMuX21vZHVsby5jb25uZWN0KHRoaXMuX3N1YnRyYWN0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdC5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJpdENydXNoZXIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CaXRDcnVzaGVyLmRlZmF1bHRzID0geyAnYml0cyc6IDQgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBiaXQgZGVwdGggb2YgdGhlIGVmZmVjdC4gTm9taW5hbCByYW5nZSBvZiAxLTguXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQml0Q3J1c2hlciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGJpdHNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJpdENydXNoZXIucHJvdG90eXBlLCAnYml0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JpdHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChiaXRzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2JpdHMgPSBiaXRzO1xuXHQgICAgICAgICAgICB2YXIgaW52U3RlcFNpemUgPSAxIC8gTWF0aC5wb3coMiwgYml0cyAtIDEpO1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bG8udmFsdWUgPSBpbnZTdGVwU2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQml0Q3J1c2hlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CaXRDcnVzaGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bG8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsbyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQml0Q3J1c2hlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ2hlYnlTaGV2IGlzIGEgQ2hlYnlzaGV2IHdhdmVzaGFwZXIsIGFuIGVmZmVjdCB3aGljaCBpcyBnb29kIFxuXHRcdCAqICAgICAgICAgZm9yIG1ha2luZyBkaWZmZXJlbnQgdHlwZXMgb2YgZGlzdG9ydGlvbiBzb3VuZHMuXG5cdFx0ICogICAgICAgICBOb3RlIHRoYXQgb2RkIG9yZGVycyBzb3VuZCB2ZXJ5IGRpZmZlcmVudCBmcm9tIGV2ZW4gb25lcywgXG5cdFx0ICogICAgICAgICBhbmQgb3JkZXIgPSAxIGlzIG5vIGNoYW5nZS4gXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgYXQgW211c2ljLmNvbHVtYmlhLmVkdV0oaHR0cDovL211c2ljLmNvbHVtYmlhLmVkdS9jbWMvbXVzaWNhbmRjb21wdXRlcnMvY2hhcHRlcjQvMDRfMDYucGhwKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfE9iamVjdH0gW29yZGVyXSBUaGUgb3JkZXIgb2YgdGhlIGNoZWJ5c2hldiBwb2x5bm9taWFsLiBOb3JtYWwgcmFuZ2UgYmV0d2VlbiAxLTEwMC4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jcmVhdGUgYSBuZXcgY2hlYnlcblx0XHQgKiB2YXIgY2hlYnkgPSBuZXcgVG9uZS5DaGVieXNoZXYoNTApO1xuXHRcdCAqIC8vY3JlYXRlIGEgbW9ub3N5bnRoIGNvbm5lY3RlZCB0byBvdXIgY2hlYnlcblx0XHQgKiBzeW50aCA9IG5ldyBUb25lLk1vbm9TeW50aCgpLmNvbm5lY3QoY2hlYnkpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydvcmRlciddLCBUb25lLkNoZWJ5c2hldik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoNDA5Nik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBob2xkcyBvbnRvIHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29yZGVyID0gb3B0aW9ucy5vcmRlcjtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fc2hhcGVyKTtcblx0ICAgICAgICB0aGlzLm9yZGVyID0gb3B0aW9ucy5vcmRlcjtcblx0ICAgICAgICB0aGlzLm92ZXJzYW1wbGUgPSBvcHRpb25zLm92ZXJzYW1wbGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DaGVieXNoZXYsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29yZGVyJzogMSxcblx0ICAgICAgICAnb3ZlcnNhbXBsZSc6ICdub25lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBnZXQgdGhlIGNvZWZmaWNpZW50IGZvciB0aGF0IGRlZ3JlZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0geCB0aGUgeCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gICB7bnVtYmVyfSBkZWdyZWUgXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBtZW1vIG1lbW9pemUgdGhlIGNvbXB1dGVkIHZhbHVlLiBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBzcGVlZHMgdXAgY29tcHV0YXRpb24gZ3JlYXRseS4gXG5cdFx0ICogIEByZXR1cm4gIHtudW1iZXJ9ICAgICAgIHRoZSBjb2VmZmljaWVudCBcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZS5fZ2V0Q29lZmZpY2llbnQgPSBmdW5jdGlvbiAoeCwgZGVncmVlLCBtZW1vKSB7XG5cdCAgICAgICAgaWYgKG1lbW8uaGFzT3duUHJvcGVydHkoZGVncmVlKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbWVtb1tkZWdyZWVdO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoZGVncmVlID09PSAwKSB7XG5cdCAgICAgICAgICAgIG1lbW9bZGVncmVlXSA9IDA7XG5cdCAgICAgICAgfSBlbHNlIGlmIChkZWdyZWUgPT09IDEpIHtcblx0ICAgICAgICAgICAgbWVtb1tkZWdyZWVdID0geDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBtZW1vW2RlZ3JlZV0gPSAyICogeCAqIHRoaXMuX2dldENvZWZmaWNpZW50KHgsIGRlZ3JlZSAtIDEsIG1lbW8pIC0gdGhpcy5fZ2V0Q29lZmZpY2llbnQoeCwgZGVncmVlIC0gMiwgbWVtbyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBtZW1vW2RlZ3JlZV07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG9yZGVyIG9mIHRoZSBDaGVieXNoZXYgcG9seW5vbWlhbCB3aGljaCBjcmVhdGVzXG5cdFx0ICogdGhlIGVxdWF0aW9uIHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIGluY29taW5nIFxuXHRcdCAqIHNpZ25hbCB0aHJvdWdoIGEgVG9uZS5XYXZlU2hhcGVyLiBUaGUgZXF1YXRpb25zXG5cdFx0ICogYXJlIGluIHRoZSBmb3JtOjxicj5cblx0XHQgKiBvcmRlciAyOiAyeF4yICsgMTxicj5cblx0XHQgKiBvcmRlciAzOiA0eF4zICsgM3ggPGJyPlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNoZWJ5c2hldiNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb3JkZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNoZWJ5c2hldi5wcm90b3R5cGUsICdvcmRlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yZGVyO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3JkZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JkZXIgPSBvcmRlcjtcblx0ICAgICAgICAgICAgdmFyIGN1cnZlID0gbmV3IEFycmF5KDQwOTYpO1xuXHQgICAgICAgICAgICB2YXIgbGVuID0gY3VydmUubGVuZ3RoO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgeCA9IGkgKiAyIC8gbGVuIC0gMTtcblx0ICAgICAgICAgICAgICAgIGlmICh4ID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9zaG91bGQgb3V0cHV0IDAgd2hlbiBpbnB1dCBpcyAwXG5cdCAgICAgICAgICAgICAgICAgICAgY3VydmVbaV0gPSAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBjdXJ2ZVtpXSA9IHRoaXMuX2dldENvZWZmaWNpZW50KHgsIG9yZGVyLCB7fSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLmN1cnZlID0gY3VydmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3ZlcnNhbXBsaW5nIG9mIHRoZSBlZmZlY3QuIENhbiBlaXRoZXIgYmUgXCJub25lXCIsIFwiMnhcIiBvciBcIjR4XCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hlYnlzaGV2I1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgb3ZlcnNhbXBsZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZSwgJ292ZXJzYW1wbGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG92ZXJzYW1wbGluZykge1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZSA9IG92ZXJzYW1wbGluZztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNoZWJ5c2hldn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ2hlYnlzaGV2O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQmFzZSBjbGFzcyBmb3IgU3RlcmVvIGVmZmVjdHMuIFByb3ZpZGVzIGVmZmVjdFNlbmRML1IgYW5kIGVmZmVjdFJldHVybkwvUi5cblx0XHQgKlxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9FZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3dldCddLCBUb25lLkVmZmVjdCk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkcnl3ZXQga25vYiB0byBjb250cm9sIHRoZSBhbW91bnQgb2YgZWZmZWN0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3Jvc3NGYWRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBuZXcgVG9uZS5Dcm9zc0ZhZGUob3B0aW9ucy53ZXQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3ZXQgY29udHJvbCwgaS5lLiBob3cgbXVjaCBvZiB0aGUgZWZmZWN0ZWRcblx0XHRcdCAqICB3aWxsIHBhc3MgdGhyb3VnaCB0byB0aGUgb3V0cHV0LlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndldCA9IHRoaXMuX2RyeVdldC5mYWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZW4gc3BsaXQgaXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBlZmZlY3RzIHNlbmQgTEVGVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTCA9IHRoaXMuX3NwbGl0LmxlZnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdHMgc2VuZCBSSUdIVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUiA9IHRoaXMuX3NwbGl0LnJpZ2h0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzdGVyZW8gZWZmZWN0IG1lcmdlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdCByZXR1cm4gTEVGVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5MID0gdGhpcy5fbWVyZ2UubGVmdDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0IHJldHVybiBSSUdIVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SID0gdGhpcy5fbWVyZ2UucmlnaHQ7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9zcGxpdCk7XG5cdCAgICAgICAgLy9kcnkgd2V0IGNvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX2RyeVdldCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UuY29ubmVjdCh0aGlzLl9kcnlXZXQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3dldCddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb0VmZmVjdCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9FZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd3ZXQnXSk7XG5cdCAgICAgICAgdGhpcy53ZXQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN0ZXJlb0VmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ2hvcnVzIGlzIGEgc3RlcmVvIGNob3J1cyBlZmZlY3QgY29tcG9zZWQgb2Zcblx0XHQgKiAgICAgICAgIGEgbGVmdCBhbmQgcmlnaHQgZGVsYXkgd2l0aCBhIFRvbmUuTEZPIGFwcGxpZWQgdG8gdGhlIGRlbGF5VGltZSBvZiBlYWNoIGNoYW5uZWwuXG5cdFx0ICogICAgICAgICBJbnNwaXJhdGlvbiBmcm9tIFtUdW5hLmpzXShodHRwczovL2dpdGh1Yi5jb20vRGluYWhtb2UvdHVuYS9ibG9iL21hc3Rlci90dW5hLmpzKS5cblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBvbiB0aGUgY2hvcnVzIGVmZmVjdCBvbiBbU291bmRPblNvdW5kXShodHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL2p1bjA0L2FydGljbGVzL3N5bnRoc2VjcmV0cy5odG0pLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICpcdEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSBvZiB0aGUgTEZPLlxuXHRcdCAqXHRAcGFyYW0ge01pbGxpc2Vjb25kc30gW2RlbGF5VGltZV0gVGhlIGRlbGF5IG9mIHRoZSBjaG9ydXMgZWZmZWN0IGluIG1zLlxuXHRcdCAqXHRAcGFyYW0ge05vcm1hbFJhbmdlfSBbZGVwdGhdIFRoZSBkZXB0aCBvZiB0aGUgY2hvcnVzLlxuXHRcdCAqXHRAZXhhbXBsZVxuXHRcdCAqIHZhciBjaG9ydXMgPSBuZXcgVG9uZS5DaG9ydXMoNCwgMi41LCAwLjUpO1xuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLlBvbHlTeW50aCg0LCBUb25lLk1vbm9TeW50aCkuY29ubmVjdChjaG9ydXMpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkMzXCIsXCJFM1wiLFwiRzNcIl0sIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkNob3J1cyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuQ2hvcnVzKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZXB0aCBvZiB0aGUgY2hvcnVzXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVwdGggPSBvcHRpb25zLmRlcHRoO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheVRpbWVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheVRpbWUgPSBvcHRpb25zLmRlbGF5VGltZSAvIDEwMDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBjb250cm9scyB0aGUgZGVsYXlUaW1lXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9MID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDFcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhbm90aGVyIExGTyBmb3IgdGhlIHJpZ2h0IHNpZGUgd2l0aCBhIDE4MCBkZWdyZWUgcGhhc2UgZGlmZlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICAgICAncGhhc2UnOiAxODBcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBkZWxheSBmb3IgbGVmdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVMID0gbmV3IFRvbmUuRGVsYXkoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBkZWxheSBmb3IgcmlnaHRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlUiA9IG5ldyBUb25lLkRlbGF5KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZnJlcXVlbmN5IG9mIHRoZSBMRk8gd2hpY2ggbW9kdWxhdGVzIHRoZSBkZWxheVRpbWUuXG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm9MLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbih0aGlzLl9kZWxheU5vZGVMLCB0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4odGhpcy5fZGVsYXlOb2RlUiwgdGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAvL2FuZCBwYXNzIHRocm91Z2ggdG8gbWFrZSB0aGUgZGV0dW5lIGFwcGFyZW50XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgLy9sZm8gc2V0dXBcblx0ICAgICAgICB0aGlzLl9sZm9MLmNvbm5lY3QodGhpcy5fZGVsYXlOb2RlTC5kZWxheVRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuY29ubmVjdCh0aGlzLl9kZWxheU5vZGVSLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgbGZvXG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdGFydCgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RhcnQoKTtcblx0ICAgICAgICAvL2hhdmUgb25lIExGTyBmcmVxdWVuY3kgY29udHJvbCB0aGUgb3RoZXJcblx0ICAgICAgICB0aGlzLl9sZm9MLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2xmb1IuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3NldCB0aGUgaW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fZGVwdGg7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kudmFsdWUgPSBvcHRpb25zLmZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydmcmVxdWVuY3knXSk7XG5cdCAgICAgICAgdGhpcy5zcHJlYWQgPSBvcHRpb25zLnNwcmVhZDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNob3J1cywgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hvcnVzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxLjUsXG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDMuNSxcblx0ICAgICAgICAnZGVwdGgnOiAwLjcsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ3NwcmVhZCc6IDE4MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZXB0aCBvZiB0aGUgZWZmZWN0LiBBIGRlcHRoIG9mIDEgbWFrZXMgdGhlIGRlbGF5VGltZVxuXHRcdCAqIG1vZHVsYXRlIGJldHdlZW4gMCBhbmQgMipkZWxheVRpbWUgKGNlbnRlcmVkIGFyb3VuZCB0aGUgZGVsYXlUaW1lKS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBuYW1lIGRlcHRoXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAnZGVwdGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXB0aDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGRlcHRoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlcHRoID0gZGVwdGg7XG5cdCAgICAgICAgICAgIHZhciBkZXZpYXRpb24gPSB0aGlzLl9kZWxheVRpbWUgKiBkZXB0aDtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5taW4gPSBNYXRoLm1heCh0aGlzLl9kZWxheVRpbWUgLSBkZXZpYXRpb24sIDApO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1heCA9IHRoaXMuX2RlbGF5VGltZSArIGRldmlhdGlvbjtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5taW4gPSBNYXRoLm1heCh0aGlzLl9kZWxheVRpbWUgLSBkZXZpYXRpb24sIDApO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1heCA9IHRoaXMuX2RlbGF5VGltZSArIGRldmlhdGlvbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWxheVRpbWUgaW4gbWlsbGlzZWNvbmRzIG9mIHRoZSBjaG9ydXMuIEEgbGFyZ2VyIGRlbGF5VGltZVxuXHRcdCAqIHdpbGwgZ2l2ZSBhIG1vcmUgcHJvbm91bmNlZCBlZmZlY3QuIE5vbWluYWwgcmFuZ2UgYSBkZWxheVRpbWVcblx0XHQgKiBpcyBiZXR3ZWVuIDIgYW5kIDIwbXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hvcnVzI1xuXHRcdCAqIEB0eXBlIHtNaWxsaXNlY29uZHN9XG5cdFx0ICogQG5hbWUgZGVsYXlUaW1lXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAnZGVsYXlUaW1lJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVsYXlUaW1lICogMTAwMDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGRlbGF5VGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZWxheVRpbWUgPSBkZWxheVRpbWUgLyAxMDAwO1xuXHQgICAgICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fZGVwdGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3NjaWxsYXRvciB0eXBlIG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hvcnVzI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hvcnVzLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9MLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBBbW91bnQgb2Ygc3RlcmVvIHNwcmVhZC4gV2hlbiBzZXQgdG8gMCwgYm90aCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBjZW50cmFsbHkuXG5cdFx0ICogV2hlbiBzZXQgdG8gMTgwLCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBoYXJkIGxlZnQgYW5kIHJpZ2h0IHJlc3BlY3RpdmVseS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvUi5waGFzZSAtIHRoaXMuX2xmb0wucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5waGFzZSA9IDkwIC0gc3ByZWFkIC8gMjtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5waGFzZSA9IHNwcmVhZCAvIDIgKyA5MDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2hvcnVzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNob3J1cy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZUwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZUwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZVIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZVIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmcmVxdWVuY3knKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ2hvcnVzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuQ29udm9sdmVyIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIE5hdGl2ZSBXZWIgQXVkaW9cblx0XHQgKiAgICAgICAgICBbQ29udm9sdmVyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtY29udm9sdmVybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICAgICAgICAgIENvbnZvbHV0aW9uIGlzIHVzZWZ1bCBmb3IgcmV2ZXJiIGFuZCBmaWx0ZXIgZW11bGF0aW9uLiBSZWFkIG1vcmUgYWJvdXQgY29udm9sdXRpb24gcmV2ZXJiIG9uXG5cdFx0ICogICAgICAgICAgW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29udm9sdXRpb25fcmV2ZXJiKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ3xUb25lLkJ1ZmZlcnxPYmplY3R9IFt1cmxdIFRoZSBVUkwgb2YgdGhlIGltcHVsc2UgcmVzcG9uc2Ugb3IgdGhlIFRvbmUuQnVmZmVyXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlhbmluZyB0aGUgaW1wdWxzZSByZXNwb25zZS5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pbml0aWFsaXppbmcgdGhlIGNvbnZvbHZlciB3aXRoIGFuIGltcHVsc2UgcmVzcG9uc2Vcblx0XHQgKiB2YXIgY29udm9sdmVyID0gbmV3IFRvbmUuQ29udm9sdmVyKFwiLi9wYXRoL3RvL2lyLndhdlwiKS50b01hc3RlcigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICBdLCBUb25lLkNvbnZvbHZlcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb252b2x2ZXIgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtDb252b2x2ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ29udm9sdmVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbnZvbHV0aW9uIGJ1ZmZlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKG9wdGlvbnMudXJsLCBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnZvbHZlci5idWZmZXIgPSBidWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgICAgIG9wdGlvbnMub25sb2FkKCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fY29udm9sdmVyKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNvbnZvbHZlciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIuZGVmYXVsdHMgPSB7ICdvbmxvYWQnOiBUb25lLm5vT3AgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY29udm9sdmVyJ3MgYnVmZmVyXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnZvbHZlciNcblx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyfVxuXHRcdCAqICBAbmFtZSBidWZmZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNvbnZvbHZlci5wcm90b3R5cGUsICdidWZmZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChidWZmZXIpO1xuXHQgICAgICAgICAgICB0aGlzLl9jb252b2x2ZXIuYnVmZmVyID0gdGhpcy5fYnVmZmVyLmdldCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIExvYWQgYW4gaW1wdWxzZSByZXNwb25zZSB1cmwgYXMgYW4gYXVkaW8gYnVmZmVyLlxuXHRcdCAqICBEZWNvZGVzIHRoZSBhdWRpbyBhc3luY2hyb25vdXNseSBhbmQgaW52b2tlc1xuXHRcdCAqICB0aGUgY2FsbGJhY2sgb25jZSB0aGUgYXVkaW8gYnVmZmVyIGxvYWRzLlxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGJ1ZmZlciB0byBsb2FkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGZpbGV0eXBlIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICBicm93c2VyLlxuXHRcdCAqICBAcGFyYW0gIHtmdW5jdGlvbj19IGNhbGxiYWNrXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubG9hZCh1cmwsIGZ1bmN0aW9uIChidWZmKSB7XG5cdCAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gYnVmZjtcblx0ICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNvbnZvbHZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNvbnZvbHZlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRGlzdG9ydGlvbiBpcyBhIHNpbXBsZSBkaXN0b3J0aW9uIGVmZmVjdCB1c2luZyBUb25lLldhdmVTaGFwZXIuXG5cdFx0ICogICAgICAgICBBbGdvcml0aG0gZnJvbSBbYSBzdGFja292ZXJmbG93IGFuc3dlcl0oaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjIzMTM0MDgpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfE9iamVjdH0gW2Rpc3RvcnRpb25dIFRoZSBhbW91bnQgb2YgZGlzdG9ydGlvbiAobm9taW5hbCByYW5nZSBvZiAwLTEpXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGRpc3QgPSBuZXcgVG9uZS5EaXN0b3J0aW9uKDAuOCkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgZm0gPSBuZXcgVG9uZS5TaW1wbGVGTSgpLmNvbm5lY3QoZGlzdCk7XG5cdFx0ICogLy90aGlzIHNvdW5kcyBnb29kIG9uIGJhc3Mgbm90ZXNcblx0XHQgKiBmbS50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkExXCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkRpc3RvcnRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydkaXN0b3J0aW9uJ10sIFRvbmUuRGlzdG9ydGlvbik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKDQwOTYpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogaG9sZHMgdGhlIGRpc3RvcnRpb24gYW1vdW50XG5cdFx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Rpc3RvcnRpb24gPSBvcHRpb25zLmRpc3RvcnRpb247XG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX3NoYXBlcik7XG5cdCAgICAgICAgdGhpcy5kaXN0b3J0aW9uID0gb3B0aW9ucy5kaXN0b3J0aW9uO1xuXHQgICAgICAgIHRoaXMub3ZlcnNhbXBsZSA9IG9wdGlvbnMub3ZlcnNhbXBsZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkRpc3RvcnRpb24sIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EaXN0b3J0aW9uLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkaXN0b3J0aW9uJzogMC40LFxuXHQgICAgICAgICdvdmVyc2FtcGxlJzogJ25vbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGFtb3VudCBvZiBkaXN0b3J0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkRpc3RvcnRpb24jXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBuYW1lIGRpc3RvcnRpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkRpc3RvcnRpb24ucHJvdG90eXBlLCAnZGlzdG9ydGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3RvcnRpb247XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhbW91bnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGlzdG9ydGlvbiA9IGFtb3VudDtcblx0ICAgICAgICAgICAgdmFyIGsgPSBhbW91bnQgKiAxMDA7XG5cdCAgICAgICAgICAgIHZhciBkZWcgPSBNYXRoLlBJIC8gMTgwO1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIuc2V0TWFwKGZ1bmN0aW9uICh4KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoeCkgPCAwLjAwMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vc2hvdWxkIG91dHB1dCAwIHdoZW4gaW5wdXQgaXMgMFxuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDMgKyBrKSAqIHggKiAyMCAqIGRlZyAvIChNYXRoLlBJICsgayAqIE1hdGguYWJzKHgpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3ZlcnNhbXBsaW5nIG9mIHRoZSBlZmZlY3QuIENhbiBlaXRoZXIgYmUgXCJub25lXCIsIFwiMnhcIiBvciBcIjR4XCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRGlzdG9ydGlvbiNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIG92ZXJzYW1wbGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkRpc3RvcnRpb24ucHJvdG90eXBlLCAnb3ZlcnNhbXBsZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3ZlcnNhbXBsaW5nKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlID0gb3ZlcnNhbXBsaW5nO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRGlzdG9ydGlvbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EaXN0b3J0aW9uLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkRpc3RvcnRpb247XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogXHRAY2xhc3MgIFRvbmUuRmVlZGJhY2tFZmZlY3QgcHJvdmlkZXMgYSBsb29wIGJldHdlZW4gYW4gXG5cdFx0ICogXHQgICAgICAgIGF1ZGlvIHNvdXJjZSBhbmQgaXRzIG93biBvdXRwdXQuIFRoaXMgaXMgYSBiYXNlLWNsYXNzXG5cdFx0ICogXHQgICAgICAgIGZvciBmZWVkYmFjayBlZmZlY3RzLiBcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW2ZlZWRiYWNrXSBUaGUgaW5pdGlhbCBmZWVkYmFjayB2YWx1ZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmZWVkYmFjayddLCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBnYWluIHdoaWNoIGNvbnRyb2xzIHRoZSBmZWVkYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5mZWVkYmFjaywgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHNpZ25hbCB3aGljaCBpcyBmZWQgYmFjayBpbnRvIHRoZSBlZmZlY3QgaW5wdXQuIFxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gdGhpcy5fZmVlZGJhY2tHYWluLmdhaW47XG5cdCAgICAgICAgLy90aGUgZmVlZGJhY2sgbG9vcFxuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuLmNoYWluKHRoaXMuX2ZlZWRiYWNrR2FpbiwgdGhpcy5lZmZlY3RTZW5kKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmVlZGJhY2tFZmZlY3QsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRWZmZWN0LmRlZmF1bHRzID0geyAnZmVlZGJhY2snOiAwLjEyNSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRmVlZGJhY2tFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GZWVkYmFja0VmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkZlZWRiYWNrRGVsYXkgaXMgYSBEZWxheU5vZGUgaW4gd2hpY2ggcGFydCBvZiBvdXRwdXRcblx0XHQgKiAgICAgICAgICBzaWduYWwgaXMgZmVkIGJhY2sgaW50byB0aGUgZGVsYXkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkZlZWRiYWNrRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgYXBwbGllZCB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gZmVlZGJhY2sgVGhlIGFtb3VudCBvZiB0aGUgZWZmZWN0ZWQgc2lnbmFsIHdoaWNoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZmVkIGJhY2sgdGhyb3VnaCB0aGUgZGVsYXkuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZlZWRiYWNrRGVsYXkgPSBuZXcgVG9uZS5GZWVkYmFja0RlbGF5KFwiOG5cIiwgMC41KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciB0b20gPSBuZXcgVG9uZS5EcnVtU3ludGgoe1xuXHRcdCAqIFx0XCJvY3RhdmVzXCIgOiA0LFxuXHRcdCAqIFx0XCJwaXRjaERlY2F5XCIgOiAwLjFcblx0XHQgKiB9KS5jb25uZWN0KGZlZWRiYWNrRGVsYXkpO1xuXHRcdCAqIHRvbS50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkEyXCIsXCIzMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRGVsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ2ZlZWRiYWNrJ1xuXHQgICAgICAgIF0sIFRvbmUuRmVlZGJhY2tEZWxheSk7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG5ldyBUb25lLkRlbGF5KG9wdGlvbnMuZGVsYXlUaW1lLCBvcHRpb25zLm1heERlbGF5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXlUaW1lIG9mIHRoZSBEZWxheU5vZGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9kZWxheU5vZGUuZGVsYXlUaW1lO1xuXHQgICAgICAgIC8vIGNvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fZGVsYXlOb2RlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2RlbGF5VGltZSddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZlZWRiYWNrRGVsYXksIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tEZWxheS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4yNSxcblx0ICAgICAgICAnbWF4RGVsYXknOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZlZWRiYWNrRGVsYXl9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tEZWxheS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GZWVkYmFja0RlbGF5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBhbiBhcnJheSBvZiBjb21iIGZpbHRlciBkZWxheSB2YWx1ZXMgZnJvbSBGcmVldmVyYiBpbXBsZW1lbnRhdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBjb21iRmlsdGVyVHVuaW5ncyA9IFtcblx0ICAgICAgICAxNTU3IC8gNDQxMDAsXG5cdCAgICAgICAgMTYxNyAvIDQ0MTAwLFxuXHQgICAgICAgIDE0OTEgLyA0NDEwMCxcblx0ICAgICAgICAxNDIyIC8gNDQxMDAsXG5cdCAgICAgICAgMTI3NyAvIDQ0MTAwLFxuXHQgICAgICAgIDEzNTYgLyA0NDEwMCxcblx0ICAgICAgICAxMTg4IC8gNDQxMDAsXG5cdCAgICAgICAgMTExNiAvIDQ0MTAwXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIGFuIGFycmF5IG9mIGFsbHBhc3MgZmlsdGVyIGZyZXF1ZW5jeSB2YWx1ZXMgZnJvbSBGcmVldmVyYiBpbXBsZW1lbnRhdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMgPSBbXG5cdCAgICAgICAgMjI1LFxuXHQgICAgICAgIDU1Nixcblx0ICAgICAgICA0NDEsXG5cdCAgICAgICAgMzQxXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZyZWV2ZXJiIGlzIGEgcmV2ZXJiIGJhc2VkIG9uIFtGcmVldmVyYl0oaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvfmpvcy9wYXNwL0ZyZWV2ZXJiLmh0bWwpLlxuXHRcdCAqICAgICAgICAgUmVhZCBtb3JlIG9uIHJldmVyYiBvbiBbU291bmQgT24gU291bmRdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwNDA4MzkwMi9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb206ODAvc29zL2ZlYjAxL2FydGljbGVzL3N5bnRoc2VjcmV0cy5hc3ApLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbcm9vbVNpemVdIENvcnJlbGF0ZWQgdG8gdGhlIGRlY2F5IHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZGFtcGVuaW5nXSBUaGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiBhIGxvd3Bhc3MgZmlsdGVyIGFzIHBhcnRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZXZlcmIuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZyZWV2ZXJiID0gbmV3IFRvbmUuRnJlZXZlcmIoKS50b01hc3RlcigpO1xuXHRcdCAqIGZyZWV2ZXJiLmRhbXBlbmluZy52YWx1ZSA9IDEwMDA7XG5cdFx0ICogLy9yb3V0aW5nIHN5bnRoIHRocm91Z2ggdGhlIHJldmVyYlxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkFNU3ludGgoKS5jb25uZWN0KGZyZWV2ZXJiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlZXZlcmIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncm9vbVNpemUnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0sIFRvbmUuRnJlZXZlcmIpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJvb21TaXplIHZhbHVlIGJldHdlZW4uIEEgbGFyZ2VyIHJvb21TaXplXG5cdFx0XHQgKiAgd2lsbCByZXN1bHQgaW4gYSBsb25nZXIgZGVjYXkuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5yb29tU2l6ZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGRhbXBlbmluZyBvZiB0aGUgcmV2ZXJiZXJhbnQgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kYW1wZW5pbmcsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBjb21iIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbWJGaWx0ZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFsbHBhc3MgZmlsdGVycyBvbiB0aGUgbGVmdFxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFsbHBhc3MgZmlsdGVycyBvbiB0aGUgcmlnaHRcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUiA9IFtdO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSByaWdodFxuXHQgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzLmxlbmd0aDsgbCsrKSB7XG5cdCAgICAgICAgICAgIHZhciBhbGxwYXNzTCA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgYWxscGFzc0wudHlwZSA9ICdhbGxwYXNzJztcblx0ICAgICAgICAgICAgYWxscGFzc0wuZnJlcXVlbmN5LnZhbHVlID0gYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzW2xdO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0wucHVzaChhbGxwYXNzTCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vbWFrZSB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSBsZWZ0XG5cdCAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMubGVuZ3RoOyByKyspIHtcblx0ICAgICAgICAgICAgdmFyIGFsbHBhc3NSID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBhbGxwYXNzUi50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBhbGxwYXNzUi5mcmVxdWVuY3kudmFsdWUgPSBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXNbcl07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUi5wdXNoKGFsbHBhc3NSKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9tYWtlIHRoZSBjb21iIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNvbWJGaWx0ZXJUdW5pbmdzLmxlbmd0aDsgYysrKSB7XG5cdCAgICAgICAgICAgIHZhciBsZnBmID0gbmV3IFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIoY29tYkZpbHRlclR1bmluZ3NbY10pO1xuXHQgICAgICAgICAgICBpZiAoYyA8IGNvbWJGaWx0ZXJUdW5pbmdzLmxlbmd0aCAvIDIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY2hhaW4obGZwZiwgdGhpcy5fYWxscGFzc0ZpbHRlcnNMWzBdKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4obGZwZiwgdGhpcy5fYWxscGFzc0ZpbHRlcnNSWzBdKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnJvb21TaXplLmNvbm5lY3QobGZwZi5yZXNvbmFuY2UpO1xuXHQgICAgICAgICAgICB0aGlzLmRhbXBlbmluZy5jb25uZWN0KGxmcGYuZGFtcGVuaW5nKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29tYkZpbHRlcnMucHVzaChsZnBmKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jaGFpbiB0aGUgYWxscGFzcyBmaWx0ZXJzIHRvZ2V0ZWhyXG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTCk7XG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUik7XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMW3RoaXMuX2FsbHBhc3NGaWx0ZXJzTC5sZW5ndGggLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSW3RoaXMuX2FsbHBhc3NGaWx0ZXJzUi5sZW5ndGggLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncm9vbVNpemUnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRnJlZXZlcmIsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZWV2ZXJiLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdyb29tU2l6ZSc6IDAuNyxcblx0ICAgICAgICAnZGFtcGVuaW5nJzogMzAwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRnJlZXZlcmJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlZXZlcmIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBhbCA9IDA7IGFsIDwgdGhpcy5fYWxscGFzc0ZpbHRlcnNMLmxlbmd0aDsgYWwrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbYWxdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMW2FsXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTCA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgYXIgPSAwOyBhciA8IHRoaXMuX2FsbHBhc3NGaWx0ZXJzUi5sZW5ndGg7IGFyKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSW2FyXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUlthcl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1IgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGNmID0gMDsgY2YgPCB0aGlzLl9jb21iRmlsdGVycy5sZW5ndGg7IGNmKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fY29tYkZpbHRlcnNbY2ZdLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29tYkZpbHRlcnNbY2ZdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY29tYkZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3Jvb21TaXplJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZyZWV2ZXJiO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBhbiBhcnJheSBvZiB0aGUgY29tYiBmaWx0ZXIgZGVsYXkgdGltZSB2YWx1ZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgY29tYkZpbHRlckRlbGF5VGltZXMgPSBbXG5cdCAgICAgICAgMTY4NyAvIDI1MDAwLFxuXHQgICAgICAgIDE2MDEgLyAyNTAwMCxcblx0ICAgICAgICAyMDUzIC8gMjUwMDAsXG5cdCAgICAgICAgMjI1MSAvIDI1MDAwXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSByZXNvbmFuY2VzIG9mIGVhY2ggb2YgdGhlIGNvbWIgZmlsdGVyc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBjb21iRmlsdGVyUmVzb25hbmNlcyA9IFtcblx0ICAgICAgICAwLjc3Myxcblx0ICAgICAgICAwLjgwMixcblx0ICAgICAgICAwLjc1Myxcblx0ICAgICAgICAwLjczM1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgYWxscGFzcyBmaWx0ZXIgZnJlcXVlbmNpZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgYWxscGFzc0ZpbHRlckZyZXFzID0gW1xuXHQgICAgICAgIDM0Nyxcblx0ICAgICAgICAxMTMsXG5cdCAgICAgICAgMzdcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuSkNSZXZlcmIgaXMgYSBzaW1wbGUgW1NjaHJvZWRlciBSZXZlcmJlcmF0b3JdKGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L35qb3MvcGFzcC9TY2hyb2VkZXJfUmV2ZXJiZXJhdG9ycy5odG1sKVxuXHRcdCAqICAgICAgICAgdHVuZWQgYnkgSm9obiBDaG93bmluZyBpbiAxOTcwLlxuXHRcdCAqICAgICAgICAgSXQgaXMgbWFkZSB1cCBvZiB0aHJlZSBhbGxwYXNzIGZpbHRlcnMgYW5kIGZvdXIgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIuXG5cdFx0ICpcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3Jvb21TaXplXSBDb29yZWxhdGVzIHRvIHRoZSBkZWNheSB0aW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciByZXZlcmIgPSBuZXcgVG9uZS5KQ1JldmVyYigwLjQpLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHRcdCAqIHZhciBkZWxheSA9IG5ldyBUb25lLkZlZWRiYWNrRGVsYXkoMC41KTtcblx0XHQgKiAvL2Nvbm5lY3RpbmcgdGhlIHN5bnRoIHRvIHJldmVyYiB0aHJvdWdoIGRlbGF5XG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuRHVvU3ludGgoKS5jaGFpbihkZWxheSwgcmV2ZXJiKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkE0XCIsXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuSkNSZXZlcmIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydyb29tU2l6ZSddLCBUb25lLkpDUmV2ZXJiKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJvb20gc2l6ZSBjb250cm9sIHZhbHVlcyBiZXR3ZWVuIFswLDFdXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5yb29tU2l6ZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgcm9vbSBzaXplXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlUm9vbVNpemUgPSBuZXcgVG9uZS5TY2FsZSgtMC43MzMsIDAuMTk3KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhIHNlcmllcyBvZiBhbGxwYXNzIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcGFyYWxsZWwgZmVlZGJhY2sgY29tYiBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzID0gW107XG5cdCAgICAgICAgLy9tYWtlIHRoZSBhbGxwYXNzIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBhZiA9IDA7IGFmIDwgYWxscGFzc0ZpbHRlckZyZXFzLmxlbmd0aDsgYWYrKykge1xuXHQgICAgICAgICAgICB2YXIgYWxscGFzcyA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgYWxscGFzcy50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBhbGxwYXNzLmZyZXF1ZW5jeS52YWx1ZSA9IGFsbHBhc3NGaWx0ZXJGcmVxc1thZl07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzLnB1c2goYWxscGFzcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYW5kIHRoZSBjb21iIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBjZiA9IDA7IGNmIDwgY29tYkZpbHRlckRlbGF5VGltZXMubGVuZ3RoOyBjZisrKSB7XG5cdCAgICAgICAgICAgIHZhciBmYmNmID0gbmV3IFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyKGNvbWJGaWx0ZXJEZWxheVRpbWVzW2NmXSwgMC4xKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZS5jb25uZWN0KGZiY2YucmVzb25hbmNlKTtcblx0ICAgICAgICAgICAgZmJjZi5yZXNvbmFuY2UudmFsdWUgPSBjb21iRmlsdGVyUmVzb25hbmNlc1tjZl07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzW3RoaXMuX2FsbHBhc3NGaWx0ZXJzLmxlbmd0aCAtIDFdLmNvbm5lY3QoZmJjZik7XG5cdCAgICAgICAgICAgIGlmIChjZiA8IGNvbWJGaWx0ZXJEZWxheVRpbWVzLmxlbmd0aCAvIDIpIHtcblx0ICAgICAgICAgICAgICAgIGZiY2YuY29ubmVjdCh0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZmJjZi5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycy5wdXNoKGZiY2YpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NoYWluIHRoZSBhbGxwYXNzIGZpbHRlcnMgdG9nZXRoZXJcblx0ICAgICAgICB0aGlzLnJvb21TaXplLmNvbm5lY3QodGhpcy5fc2NhbGVSb29tU2l6ZSk7XG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNvbm5lY3QodGhpcy5fYWxscGFzc0ZpbHRlcnNbMF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY29ubmVjdCh0aGlzLl9hbGxwYXNzRmlsdGVyc1swXSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydyb29tU2l6ZSddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkpDUmV2ZXJiLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkpDUmV2ZXJiLmRlZmF1bHRzID0geyAncm9vbVNpemUnOiAwLjUgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSkNSZXZlcmJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSkNSZXZlcmIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBhcGYgPSAwOyBhcGYgPCB0aGlzLl9hbGxwYXNzRmlsdGVycy5sZW5ndGg7IGFwZisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzW2FwZl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1thcGZdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGZiY2YgPSAwOyBmYmNmIDwgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycy5sZW5ndGg7IGZiY2YrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzW2ZiY2ZdLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVyc1tmYmNmXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsncm9vbVNpemUnXSk7XG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuSkNSZXZlcmI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBNaWQvU2lkZSBwcm9jZXNzaW5nIHNlcGFyYXRlcyB0aGUgdGhlICdtaWQnIHNpZ25hbFxuXHRcdCAqICAgICAgICAgKHdoaWNoIGNvbWVzIG91dCBvZiBib3RoIHRoZSBsZWZ0IGFuZCB0aGUgcmlnaHQgY2hhbm5lbClcblx0XHQgKiAgICAgICAgIGFuZCB0aGUgJ3NpZGUnICh3aGljaCBvbmx5IGNvbWVzIG91dCBvZiB0aGUgdGhlIHNpZGUgY2hhbm5lbHMpXG5cdFx0ICogICAgICAgICBhbmQgZWZmZWN0cyB0aGVtIHNlcGFyYXRlbHkgYmVmb3JlIGJlaW5nIHJlY29tYmluZWQuXG5cdFx0ICogICAgICAgICBBcHBsaWVzIGEgTWlkL1NpZGUgc2VwZXJhdGlvbiBhbmQgcmVjb21iaW5hdGlvbi5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmb3VuZCBpbiBba3ZyYXVkaW8gZm9ydW1zXShodHRwOi8vd3d3Lmt2cmF1ZGlvLmNvbS9mb3J1bS92aWV3dG9waWMucGhwP3Q9MjEyNTg3KS5cblx0XHQgKiAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICBUaGlzIGlzIGEgYmFzZS1jbGFzcyBmb3IgTWlkL1NpZGUgRWZmZWN0cy5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9zaWRlIHNwbGl0XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVTcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gbmV3IFRvbmUuTWlkU2lkZVNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9zaWRlIG1lcmdlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVNZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gbmV3IFRvbmUuTWlkU2lkZU1lcmdlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBzZW5kLiBDb25uZWN0IHRvIG1pZCBwcm9jZXNzaW5nXG5cdFx0XHQgKiAgQHR5cGUge1RvbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkU2VuZCA9IHRoaXMuX21pZFNpZGVTcGxpdC5taWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZGUgc2VuZC4gQ29ubmVjdCB0byBzaWRlIHByb2Nlc3Npbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlU2VuZCA9IHRoaXMuX21pZFNpZGVTcGxpdC5zaWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgcmV0dXJuIGNvbm5lY3Rpb25cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkUmV0dXJuID0gdGhpcy5fbWlkU2lkZU1lcmdlLm1pZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSByZXR1cm4gY29ubmVjdGlvblxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlUmV0dXJuID0gdGhpcy5fbWlkU2lkZU1lcmdlLnNpZGU7XG5cdCAgICAgICAgLy90aGUgY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY29ubmVjdCh0aGlzLl9taWRTaWRlU3BsaXQpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVFZmZlY3QsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZUVmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZFNlbmQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZVNlbmQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkUmV0dXJuID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGVSZXR1cm4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBoYXNlciBpcyBhIHBoYXNlciBlZmZlY3QuIFBoYXNlcnMgd29yayBieSBjaGFuZ2luZyB0aGUgcGhhc2Vcblx0XHQgKiAgICAgICAgIG9mIGRpZmZlcmVudCBmcmVxdWVuY3kgY29tcG9uZW50cyBvZiBhbiBpbmNvbWluZyBzaWduYWwuIFJlYWQgbW9yZSBvblxuXHRcdCAqICAgICAgICAgW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUGhhc2VyXyhlZmZlY3QpKS5cblx0XHQgKiAgICAgICAgIEluc3BpcmF0aW9uIGZvciB0aGlzIHBoYXNlciBjb21lcyBmcm9tIFtUdW5hLmpzXShodHRwczovL2dpdGh1Yi5jb20vRGluYWhtb2UvdHVuYS8pLlxuXHRcdCAqXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIHNwZWVkIG9mIHRoZSBwaGFzaW5nLlxuXHRcdCAqXHRAcGFyYW0ge251bWJlcn0gW29jdGF2ZXNdIFRoZSBvY3RhdmVzIG9mIHRoZSBlZmZlY3QuXG5cdFx0ICpcdEBwYXJhbSB7RnJlcXVlbmN5fSBbYmFzZUZyZXF1ZW5jeV0gVGhlIGJhc2UgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXJzLlxuXHRcdCAqXHRAZXhhbXBsZVxuXHRcdCAqIHZhciBwaGFzZXIgPSBuZXcgVG9uZS5QaGFzZXIoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IDE1LFxuXHRcdCAqIFx0XCJvY3RhdmVzXCIgOiA1LFxuXHRcdCAqIFx0XCJiYXNlRnJlcXVlbmN5XCIgOiAxMDAwXG5cdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5GTVN5bnRoKCkuY29ubmVjdChwaGFzZXIpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiRTNcIiwgXCIyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vc2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJyxcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5QaGFzZXIpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBjb250cm9scyB0aGUgZnJlcXVlbmN5IG9uIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBuZXcgVG9uZS5MRk8ob3B0aW9ucy5mcmVxdWVuY3ksIDAsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8gd2hpY2ggY29udHJvbHMgdGhlIGZyZXF1ZW5jeSBvbiB0aGUgcmlnaHQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG5ldyBUb25lLkxGTyhvcHRpb25zLmZyZXF1ZW5jeSwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5waGFzZSA9IDE4MDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYmFzZSBtb2R1bGF0aW9uIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG9jdGF2ZXMgb2YgdGhlIHBoYXNpbmdcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBxdWFsaXR5IGZhY3RvciBvZiB0aGUgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5RLCBUb25lLlR5cGUuUG9zaXRpdmUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhcnJheSBvZiBmaWx0ZXJzIGZvciB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzTCA9IHRoaXMuX21ha2VGaWx0ZXJzKG9wdGlvbnMuc3RhZ2VzLCB0aGlzLl9sZm9MLCB0aGlzLlEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhcnJheSBvZiBmaWx0ZXJzIGZvciB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzUiA9IHRoaXMuX21ha2VGaWx0ZXJzKG9wdGlvbnMuc3RhZ2VzLCB0aGlzLl9sZm9SLCB0aGlzLlEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIGZyZXF1ZW5jeSBvZiB0aGUgZWZmZWN0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmb0wuZnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LnZhbHVlID0gb3B0aW9ucy5mcmVxdWVuY3k7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZW0gdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNvbm5lY3QodGhpcy5fZmlsdGVyc0xbMF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY29ubmVjdCh0aGlzLl9maWx0ZXJzUlswXSk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc0xbb3B0aW9ucy5zdGFnZXMgLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc1Jbb3B0aW9ucy5zdGFnZXMgLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSBmcmVxdWVuY3kgd2l0aCBvbmUgTEZPXG5cdCAgICAgICAgdGhpcy5fbGZvTC5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9sZm9SLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIG9wdGlvbnNcblx0ICAgICAgICB0aGlzLmJhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGxmb1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3RhcnQoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN0YXJ0KCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QaGFzZXIsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0c1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtvYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBoYXNlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMC41LFxuXHQgICAgICAgICdvY3RhdmVzJzogMyxcblx0ICAgICAgICAnc3RhZ2VzJzogMTAsXG5cdCAgICAgICAgJ1EnOiAxMCxcblx0ICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDM1MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gc3RhZ2VzXG5cdFx0ICogIEByZXR1cm5zIHtBcnJheX0gdGhlIG51bWJlciBvZiBmaWx0ZXJzIGFsbCBjb25uZWN0ZWQgdG9nZXRoZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyLnByb3RvdHlwZS5fbWFrZUZpbHRlcnMgPSBmdW5jdGlvbiAoc3RhZ2VzLCBjb25uZWN0VG9GcmVxLCBRKSB7XG5cdCAgICAgICAgdmFyIGZpbHRlcnMgPSBuZXcgQXJyYXkoc3RhZ2VzKTtcblx0ICAgICAgICAvL21ha2UgYWxsIHRoZSBmaWx0ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFnZXM7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZmlsdGVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBmaWx0ZXIudHlwZSA9ICdhbGxwYXNzJztcblx0ICAgICAgICAgICAgUS5jb25uZWN0KGZpbHRlci5RKTtcblx0ICAgICAgICAgICAgY29ubmVjdFRvRnJlcS5jb25uZWN0KGZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICBmaWx0ZXJzW2ldID0gZmlsdGVyO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgZmlsdGVycyk7XG5cdCAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoZSBwaGFzZSBnb2VzIGFib3ZlXG5cdFx0ICogdGhlIGJhc2VGcmVxdWVuY3lcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaGFzZXIjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBoYXNlci5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdGF2ZXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdGF2ZXM7XG5cdCAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLl9iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgb2N0YXZlcyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wubWF4ID0gbWF4O1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1heCA9IG1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0aGUgYmFzZSBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlcnMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGhhc2VyI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGhhc2VyLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgICAgICB0aGlzLl9iYXNlRnJlcXVlbmN5ID0gZnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5taW4gPSBmcmVxO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1pbiA9IGZyZXE7XG5cdCAgICAgICAgICAgIHRoaXMub2N0YXZlcyA9IHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGhhc2VyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBoYXNlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuUS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9MLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9MID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9SLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlcnNMLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNMW2ldLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc0xbaV0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzTCA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl9maWx0ZXJzUi5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzUltqXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNSW2pdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc1IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QaGFzZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBKdXN0IGxpa2UgYSBzdGVyZW8gZmVlZGJhY2sgZWZmZWN0LCBidXQgdGhlIGZlZWRiYWNrIGlzIHJvdXRlZCBmcm9tIGxlZnQgdG8gcmlnaHRcblx0XHQgKiAgICAgICAgIGFuZCByaWdodCB0byBsZWZ0IGluc3RlYWQgb2Ygb24gdGhlIHNhbWUgY2hhbm5lbC5cblx0XHQgKlxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmZWVkYmFjayddLCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZmVlZGJhY2sgZnJvbSB0aGUgb3V0cHV0XG5cdFx0XHQgKiAgYmFjayBpbnRvIHRoZSBpbnB1dCBvZiB0aGUgZWZmZWN0IChyb3V0ZWRcblx0XHRcdCAqICBhY3Jvc3MgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMpLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZmVlZGJhY2ssIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxlZnQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcmlnaHQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSTCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwuY2hhaW4odGhpcy5fZmVlZGJhY2tMUiwgdGhpcy5lZmZlY3RTZW5kUik7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SLmNoYWluKHRoaXMuX2ZlZWRiYWNrUkwsIHRoaXMuZWZmZWN0U2VuZEwpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZmFuKHRoaXMuX2ZlZWRiYWNrTFIuZ2FpbiwgdGhpcy5fZmVlZGJhY2tSTC5nYWluKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZmVlZGJhY2snXSk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSTCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGluZ1BvbmdEZWxheSBpcyBhIGZlZWRiYWNrIGRlbGF5IGVmZmVjdCB3aGVyZSB0aGUgZWNobyBpcyBoZWFyZFxuXHRcdCAqICAgICAgICAgIGZpcnN0IGluIG9uZSBjaGFubmVsIGFuZCBuZXh0IGluIHRoZSBvcHBvc2l0ZSBjaGFubmVsLiBJbiBhIHN0ZXJlb1xuXHRcdCAqICAgICAgICAgIHN5c3RlbSB0aGVzZSBhcmUgdGhlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzLlxuXHRcdCAqICAgICAgICAgIFBpbmdQb25nRGVsYXkgaW4gbW9yZSBzaW1wbGlmaWVkIHRlcm1zIGlzIHR3byBUb25lLkZlZWRiYWNrRGVsYXlzXG5cdFx0ICogICAgICAgICAgd2l0aCBpbmRlcGVuZGVudCBkZWxheSB2YWx1ZXMuIEVhY2ggZGVsYXkgaXMgcm91dGVkIHRvIG9uZSBjaGFubmVsXG5cdFx0ICogICAgICAgICAgKGxlZnQgb3IgcmlnaHQpLCBhbmQgdGhlIGNoYW5uZWwgdHJpZ2dlcmVkIHNlY29uZCB3aWxsIGFsd2F5c1xuXHRcdCAqICAgICAgICAgIHRyaWdnZXIgYXQgdGhlIHNhbWUgaW50ZXJ2YWwgYWZ0ZXIgdGhlIGZpcnN0LlxuXHRcdCAqXG5cdFx0ICogXHRAY29uc3RydWN0b3Jcblx0XHQgKiBcdEBleHRlbmRzIHtUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2RlbGF5VGltZV0gVGhlIGRlbGF5VGltZSBiZXR3ZWVuIGNvbnNlY3V0aXZlIGVjaG9zLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gZmVlZGJhY2sgVGhlIGFtb3VudCBvZiB0aGUgZWZmZWN0ZWQgc2lnbmFsIHdoaWNoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmZWQgYmFjayB0aHJvdWdoIHRoZSBkZWxheS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGluZ1BvbmcgPSBuZXcgVG9uZS5QaW5nUG9uZ0RlbGF5KFwiNG5cIiwgMC4yKS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBkcnVtID0gbmV3IFRvbmUuRHJ1bVN5bnRoKCkuY29ubmVjdChwaW5nUG9uZyk7XG5cdFx0ICogZHJ1bS50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiMzJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaW5nUG9uZ0RlbGF5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdmZWVkYmFjaydcblx0ICAgICAgICBdLCBUb25lLlBpbmdQb25nRGVsYXkpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGUgb24gdGhlIGxlZnQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZWZ0RGVsYXkgPSBuZXcgVG9uZS5EZWxheSgwLCBvcHRpb25zLm1heERlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGUgb24gdGhlIHJpZ2h0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmlnaHREZWxheSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcHJlZGVsYXkgb24gdGhlIHJpZ2h0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmlnaHRQcmVEZWxheSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgdGltZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRlbGF5VGltZSwgVG9uZS5UeXBlLlRpbWUpO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY2hhaW4odGhpcy5fbGVmdERlbGF5LCB0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4odGhpcy5fcmlnaHRQcmVEZWxheSwgdGhpcy5fcmlnaHREZWxheSwgdGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZS5mYW4odGhpcy5fbGVmdERlbGF5LmRlbGF5VGltZSwgdGhpcy5fcmlnaHREZWxheS5kZWxheVRpbWUsIHRoaXMuX3JpZ2h0UHJlRGVsYXkuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvL3JlYXJyYW5nZWQgdGhlIGZlZWRiYWNrIHRvIGJlIGFmdGVyIHRoZSByaWdodFByZURlbGF5XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUi5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUi5jb25uZWN0KHRoaXMuX3JpZ2h0RGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGluZ1BvbmdEZWxheSwgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGluZ1BvbmdEZWxheS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4yNSxcblx0ICAgICAgICAnbWF4RGVsYXlUaW1lJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGluZ1BvbmdEZWxheX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaW5nUG9uZ0RlbGF5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGVmdERlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0RGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0RGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0RGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0UHJlRGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0UHJlRGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGluZ1BvbmdEZWxheTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGl0Y2hTaGlmdCBkb2VzIG5lYXItcmVhbHRpbWUgcGl0Y2ggc2hpZnRpbmcgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgIFRoZSBlZmZlY3QgaXMgYWNoaWV2ZWQgYnkgc3BlZWRpbmcgdXAgb3Igc2xvd2luZyBkb3duIHRoZSBkZWxheVRpbWVcblx0XHQgKiAgICAgICAgIG9mIGEgRGVsYXlOb2RlIHVzaW5nIGEgc2F3dG9vdGggd2F2ZS5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmb3VuZCBpbiBbdGhpcyBwZGZdKGh0dHA6Ly9kc3AtYm9vay5uYXJvZC5ydS9zb3VuZHByb2MucGRmKS5cblx0XHQgKiAgICAgICAgIEFkZGl0aW9uYWwgcmVmZXJlbmNlIGJ5IFtNaWxsZXIgUHVja2V0XShodHRwOi8vbXNwLnVjc2QuZWR1L3RlY2huaXF1ZXMvdjAuMTEvYm9vay1odG1sL25vZGUxMTUuaHRtbCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRmVlZGJhY2tFZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7SW50ZXJ2YWw9fSBwaXRjaCBUaGUgaW50ZXJ2YWwgdG8gdHJhbnNwb3NlIHRoZSBpbmNvbWluZyBzaWduYWwgYnkuXG5cdFx0ICovXG5cdCAgICBUb25lLlBpdGNoU2hpZnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydwaXRjaCddLCBUb25lLlBpdGNoU2hpZnQpO1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGl0Y2ggc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFVzZXMgdHdvIERlbGF5Tm9kZXMgdG8gY292ZXIgdXAgdGhlIGp1bXAgaW5cblx0XHRcdCAqICB0aGUgc2F3dG9vdGggd2F2ZS5cblx0XHRcdCAqICBAdHlwZSAge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlBID0gbmV3IFRvbmUuRGVsYXkoMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpcnN0IExGTy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9BID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAwLjEsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ3Nhd3Rvb3RoJ1xuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5fZGVsYXlBLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNlY29uZCBEZWxheU5vZGVcblx0XHRcdCAqICBAdHlwZSAge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlCID0gbmV3IFRvbmUuRGVsYXkoMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpcnN0IExGTy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9CID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAwLjEsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ3Nhd3Rvb3RoJyxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogMTgwXG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9kZWxheUIuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBDcm9zc2ZhZGUgcXVpY2tseSBiZXR3ZWVuIHRoZSB0d28gZGVsYXkgbGluZXNcblx0XHRcdCAqICB0byBjb3ZlciB1cCB0aGUganVtcCBpbiB0aGUgc2F3dG9vdGggd2F2ZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Dcm9zc0ZhZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZSA9IG5ldyBUb25lLkNyb3NzRmFkZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIExGTyB3aGljaCBhbHRlcm5hdGVzIGJldHdlZW4gdGhlIHR3b1xuXHRcdFx0ICogIGRlbGF5IGxpbmVzIHRvIGNvdmVyIHVwIHRoZSBkaXNwYXJpdHkgaW4gdGhlXG5cdFx0XHQgKiAgc2F3dG9vdGggd2F2ZS5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8gPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ3RyaWFuZ2xlJyxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogOTBcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2Nyb3NzRmFkZS5mYWRlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0RlbGF5ID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZGVsYXkgb24gdGhlIGlucHV0IHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZmVlZGJhY2tEZWxheS5kZWxheVRpbWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2RlbGF5VGltZScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGQgdGhlIGN1cnJlbnQgcGl0Y2hcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9waXRjaCA9IG9wdGlvbnMucGl0Y2g7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZCB0aGUgY3VycmVudCB3aW5kb3dTaXplXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fd2luZG93U2l6ZSA9IG9wdGlvbnMud2luZG93U2l6ZTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIHR3byBkZWxheSBsaW5lcyB1cFxuXHQgICAgICAgIHRoaXMuX2RlbGF5QS5jb25uZWN0KHRoaXMuX2Nyb3NzRmFkZS5hKTtcblx0ICAgICAgICB0aGlzLl9kZWxheUIuY29ubmVjdCh0aGlzLl9jcm9zc0ZhZGUuYik7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kuZmFuKHRoaXMuX2xmb0EuZnJlcXVlbmN5LCB0aGlzLl9sZm9CLmZyZXF1ZW5jeSwgdGhpcy5fY3Jvc3NGYWRlTEZPLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9yb3V0ZSB0aGUgaW5wdXRcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuZmFuKHRoaXMuX2RlbGF5QSwgdGhpcy5fZGVsYXlCKTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGUuY2hhaW4odGhpcy5fZmVlZGJhY2tEZWxheSwgdGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIExGT3MgYXQgdGhlIHNhbWUgdGltZVxuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHRoaXMuX2xmb0Euc3RhcnQobm93KTtcblx0ICAgICAgICB0aGlzLl9sZm9CLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlTEZPLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVcblx0ICAgICAgICB0aGlzLndpbmRvd1NpemUgPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGl0Y2hTaGlmdCwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuUGl0Y2hTaGlmdC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGl0Y2gnOiAwLFxuXHQgICAgICAgICd3aW5kb3dTaXplJzogMC4xLFxuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLFxuXHQgICAgICAgICdmZWVkYmFjayc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXBpdGNoIHRoZSBpbmNvbWluZyBzaWduYWwgYnkgc29tZSBpbnRlcnZhbCAobWVhc3VyZWRcblx0XHQgKiBpbiBzZW1pLXRvbmVzKS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaXRjaFNoaWZ0I1xuXHRcdCAqIEB0eXBlIHtJbnRlcnZhbH1cblx0XHQgKiBAbmFtZSBwaXRjaFxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogcGl0Y2hTaGlmdC5waXRjaCA9IC0xMjsgLy9kb3duIG9uZSBvY3RhdmVcblx0XHQgKiBwaXRjaFNoaWZ0LnBpdGNoID0gNzsgLy91cCBhIGZpZnRoXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QaXRjaFNoaWZ0LnByb3RvdHlwZSwgJ3BpdGNoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGl0Y2g7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9waXRjaCA9IGludGVydmFsO1xuXHQgICAgICAgICAgICB2YXIgZmFjdG9yID0gMDtcblx0ICAgICAgICAgICAgaWYgKGludGVydmFsIDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQS5taW4gPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQS5tYXggPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQi5taW4gPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQi5tYXggPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgICAgICAgICAgZmFjdG9yID0gVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oaW50ZXJ2YWwgLSAxKSArIDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1pbiA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1heCA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1pbiA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1heCA9IDA7XG5cdCAgICAgICAgICAgICAgICBmYWN0b3IgPSBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhpbnRlcnZhbCkgLSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeS52YWx1ZSA9IGZhY3RvciAqICgxLjIgLyB0aGlzLl93aW5kb3dTaXplKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB3aW5kb3cgc2l6ZSBjb3JyZXNwb25kcyByb3VnaGx5IHRvIHRoZSBzYW1wbGUgbGVuZ3RoIGluIGEgbG9vcGluZyBzYW1wbGVyLlxuXHRcdCAqIFNtYWxsZXIgdmFsdWVzIGFyZSBkZXNpcmFibGUgZm9yIGEgbGVzcyBub3RpY2VhYmxlIGRlbGF5IHRpbWUgb2YgdGhlIHBpdGNoIHNoaWZ0ZWRcblx0XHQgKiBzaWduYWwsIGJ1dCBsYXJnZXIgdmFsdWVzIHdpbGwgcmVzdWx0IGluIHNtb290aGVyIHBpdGNoIHNoaWZ0aW5nIGZvciBsYXJnZXIgaW50ZXJ2YWxzLlxuXHRcdCAqIEEgbm9taW5hbCByYW5nZSBvZiAwLjAzIHRvIDAuMSBpcyByZWNvbW1lbmRlZC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaXRjaFNoaWZ0I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHdpbmRvd1NpemVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHBpdGNoU2hpZnQud2luZG93U2l6ZSA9IDAuMTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBpdGNoU2hpZnQucHJvdG90eXBlLCAnd2luZG93U2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3dpbmRvd1NpemUgPSB0aGlzLnRvU2Vjb25kcyhzaXplKTtcblx0ICAgICAgICAgICAgdGhpcy5waXRjaCA9IHRoaXMuX3BpdGNoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QaXRjaFNoaWZ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaXRjaFNoaWZ0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlBLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheUEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Qi5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlCID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9BLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9BID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9CLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9CID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlTEZPLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdkZWxheVRpbWUnKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGl0Y2hTaGlmdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIEJ1ZmZlclNvdXJjZU5vZGUuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtICB7QXVkaW9CdWZmZXJ8VG9uZS5CdWZmZXJ9ICBidWZmZXIgICBUaGUgYnVmZmVyIHRvIHBsYXlcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBvbmxvYWQgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYnVmZmVyJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICBdLCBUb25lLkJ1ZmZlclNvdXJjZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRoZVxuXHRcdFx0ICogIGJ1ZmZlciBzb3VyY2UgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBvcHRpb25zLm9uZW5kZWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpbWUgdGhhdCB0aGUgYnVmZmVyIHdhcyBzdGFydGVkLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBhZGRpdGlvbmFsIGZsYWcgaWYgdGhlIGFjdHVhbCBCdWZmZXJTb3VyY2VOb2RlXG5cdFx0XHQgKiAgaGFzIGJlZW4gc3RhcnRlZC4gYi9jIHN0b3BwaW5nIGFuIHVuc3RhcnRlZCBidWZmZXJcblx0XHRcdCAqICB3aWxsIHRocm93IGl0IGludG8gYW4gaW52YWxpZCBzdGF0ZVxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEZsYWcgaWYgdGhlIHNvdXJjZSBoYXMgYWxyZWFkeSBiZWVuIHN0b3BwZWRcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVN0b3BwZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGltZSB0aGF0IHRoZSBidWZmZXIgaXMgc2NoZWR1bGVkIHRvIHN0b3AuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gLTE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gbm9kZSB3aGljaCBlbnZlbG9wZXMgdGhlIEJ1ZmZlclNvdXJjZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBidWZmZXIgc291cmNlXG5cdFx0XHQgKiAgQHR5cGUgIHtBdWRpb0J1ZmZlclNvdXJjZU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UuY29ubmVjdCh0aGlzLl9nYWluTm9kZSk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLm9uZW5kZWQgPSB0aGlzLl9vbmVuZGVkLmJpbmQodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcHJpdmF0ZSBidWZmZXIgaW5zdGFuY2Vcblx0XHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIob3B0aW9ucy5idWZmZXIsIG9wdGlvbnMub25sb2FkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGxheWJhY2tSYXRlIG9mIHRoZSBidWZmZXJcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9zb3VyY2UucGxheWJhY2tSYXRlLCBUb25lLlR5cGUuUG9zaXRpdmUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlSW4gdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlSW4gPSBvcHRpb25zLmZhZGVJbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZU91dCB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVPdXQgPSBvcHRpb25zLmZhZGVPdXQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY3VydmUgYXBwbGllZCB0byB0aGUgZmFkZXMsIGVpdGhlciBcImxpbmVhclwiIG9yIFwiZXhwb25lbnRpYWxcIlxuXHRcdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY3VydmUgPSBvcHRpb25zLmN1cnZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB0aGF0IHRoZSBidWZmZXIgcmFtcHMgdG9cblx0XHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IDE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgb25lbmRlZCB0aW1lb3V0XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uZW5kZWRUaW1lb3V0ID0gLTE7XG5cdCAgICAgICAgLy9zZXQgc29tZSB2YWx1ZXMgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5sb29wID0gb3B0aW9ucy5sb29wO1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gb3B0aW9ucy5sb29wU3RhcnQ7XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gb3B0aW9ucy5sb29wRW5kO1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlLnZhbHVlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CdWZmZXJTb3VyY2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29uZW5kZWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogMCxcblx0ICAgICAgICAnZmFkZUluJzogMCxcblx0ICAgICAgICAnZmFkZU91dCc6IDAsXG5cdCAgICAgICAgJ2N1cnZlJzogJ2xpbmVhcicsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBwbGF5YmFjayBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gdGVzdCB0aGUgc3RhdGUgYXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuU3RhdGV9ICBUaGUgcGxheWJhY2sgc3RhdGUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLmdldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEgJiYgdGltZSA+PSB0aGlzLl9zdGFydFRpbWUgJiYgIXRoaXMuX3NvdXJjZVN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RhcnRlZDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbc3RhcnRUaW1lPW5vd10gV2hlbiB0aGUgcGxheWVyIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW29mZnNldD0wXSBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBzYW1wbGUgc2hvdWxkIHBsYXkuIElmIG5vIGR1cmF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdpdmVuLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZ1bGwgbGVuZ3RoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzYW1wbGUgKG1pbnVzIGFueSBvZmZzZXQpXG5cdFx0ICogIEBwYXJhbSAge0dhaW59ICBbZ2Fpbj0xXSAgVGhlIGdhaW4gdG8gcGxheSB0aGUgYnVmZmVyIGJhY2sgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgZmFkZUluVGltZSAgVGhlIG9wdGlvbmFsIGZhZGVJbiByYW1wIHRpbWUuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlclNvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uLCBnYWluLCBmYWRlSW5UaW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkJ1ZmZlclNvdXJjZSBjYW4gb25seSBiZSBzdGFydGVkIG9uY2UuJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghdGhpcy5idWZmZXIubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJTb3VyY2U6IGJ1ZmZlciBpcyBlaXRoZXIgbm90IHNldCBvciBub3QgbG9hZGVkLicpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy9pZiBpdCdzIGEgbG9vcCB0aGUgZGVmYXVsdCBvZmZzZXQgaXMgdGhlIGxvb3BzdGFydCBwb2ludFxuXHQgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgdGhpcy5sb29wU3RhcnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IG9mZnNldCBpcyAwXG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgIGdhaW4gPSBUb25lLmRlZmF1bHRBcmcoZ2FpbiwgMSk7XG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IGdhaW47XG5cdCAgICAgICAgZmFkZUluVGltZSA9IHRoaXMudG9TZWNvbmRzKFRvbmUuZGVmYXVsdEFyZyhmYWRlSW5UaW1lLCB0aGlzLmZhZGVJbikpO1xuXHQgICAgICAgIHRoaXMuZmFkZUluID0gZmFkZUluVGltZTtcblx0ICAgICAgICBpZiAoZmFkZUluVGltZSA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuY3VydmUgPT09ICdsaW5lYXInKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMuX2dhaW4sIHRpbWUgKyBmYWRlSW5UaW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKHRoaXMuX2dhaW4sIHRpbWUsIGZhZGVJblRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZShnYWluLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gdGltZTtcblx0ICAgICAgICB2YXIgY29tcHV0ZWREdXIgPSB0aGlzLnRvU2Vjb25kcyhUb25lLmRlZmF1bHRBcmcoZHVyYXRpb24sIHRoaXMuYnVmZmVyLmR1cmF0aW9uIC0gb2Zmc2V0ICUgdGhpcy5idWZmZXIuZHVyYXRpb24pKTtcblx0ICAgICAgICBjb21wdXRlZER1ciA9IE1hdGgubWF4KGNvbXB1dGVkRHVyLCAwKTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoZHVyYXRpb24pKSB7XG5cdCAgICAgICAgICAgIC8vY2xpcCB0aGUgZHVyYXRpb24gd2hlbiBub3QgbG9vcGluZ1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAgICAgY29tcHV0ZWREdXIgPSBNYXRoLm1pbihjb21wdXRlZER1ciwgdGhpcy5idWZmZXIuZHVyYXRpb24gLSBvZmZzZXQgJSB0aGlzLmJ1ZmZlci5kdXJhdGlvbik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHRpbWUgKyBjb21wdXRlZER1ciwgdGhpcy5mYWRlT3V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zdGFydCB0aGUgYnVmZmVyIHNvdXJjZVxuXHQgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgLy9tb2RpZnkgdGhlIG9mZnNldCBpZiBpdCdzIGdyZWF0ZXIgdGhhbiB0aGUgbG9vcCB0aW1lXG5cdCAgICAgICAgICAgIHZhciBsb29wRW5kID0gdGhpcy5sb29wRW5kIHx8IHRoaXMuYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgICAgICB2YXIgbG9vcFN0YXJ0ID0gdGhpcy5sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIHZhciBsb29wRHVyYXRpb24gPSBsb29wRW5kIC0gbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAvL21vdmUgdGhlIG9mZnNldCBiYWNrXG5cdCAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gbG9vcEVuZCkge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gKG9mZnNldCAtIGxvb3BTdGFydCkgJSBsb29wRHVyYXRpb24gKyBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLmdldCgpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wRW5kID0gdGhpcy5sb29wRW5kIHx8IHRoaXMuYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgIGlmIChvZmZzZXQgPCB0aGlzLmJ1ZmZlci5kdXJhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLnN0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBidWZmZXIuIE9wdGlvbmFsbHkgYWRkIGEgcmFtcCB0aW1lIHRvIGZhZGUgdGhlXG5cdFx0ICogIGJ1ZmZlciBvdXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgdGltZSAgICAgICAgIFRoZSB0aW1lIHRoZSBidWZmZXIgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgZmFkZU91dFRpbWUgIEhvdyBsb25nIHRoZSBnYWluIHNob3VsZCBmYWRlIG91dCBmb3Jcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSwgZmFkZU91dFRpbWUpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuYnVmZmVyLmxvYWRlZCkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyU291cmNlOiBidWZmZXIgaXMgZWl0aGVyIG5vdCBzZXQgb3Igbm90IGxvYWRlZC4nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy9pZiB0aGUgZXZlbnQgaGFzIGFscmVhZHkgYmVlbiBzY2hlZHVsZWQsIGNsZWFyIGl0XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0b3BUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zdG9wIGlmIGl0J3Mgc2NoZWR1bGUgYmVmb3JlIHRoZSBzdGFydCB0aW1lXG5cdCAgICAgICAgaWYgKHRpbWUgPD0gdGhpcy5fc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnZhbHVlID0gMDtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSBNYXRoLm1heCh0aGlzLl9zdGFydFRpbWUgKyB0aGlzLmZhZGVJbiArIHRoaXMuc2FtcGxlVGltZSwgdGltZSk7XG5cdCAgICAgICAgLy9jYW5jZWwgdGhlIHByZXZpb3VzIGN1cnZlXG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSB0aW1lO1xuXHQgICAgICAgIC8vdGhlIGZhZGVPdXQgdGltZVxuXHQgICAgICAgIGZhZGVPdXRUaW1lID0gdGhpcy50b1NlY29uZHMoVG9uZS5kZWZhdWx0QXJnKGZhZGVPdXRUaW1lLCB0aGlzLmZhZGVPdXQpKTtcblx0ICAgICAgICB2YXIgaGVsZER1cmF0aW9uID0gdGltZSAtIHRoaXMuX3N0YXJ0VGltZSAtIHRoaXMuZmFkZUluIC0gdGhpcy5zYW1wbGVUaW1lO1xuXHQgICAgICAgIGlmICghdGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgIC8vbWFrZSBzdXJlIHRoZSBmYWRlIGRvZXMgbm90IGdvIGJleW9uZCB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXJcblx0ICAgICAgICAgICAgaGVsZER1cmF0aW9uID0gTWF0aC5taW4oaGVsZER1cmF0aW9uLCB0aGlzLmJ1ZmZlci5kdXJhdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZhZGVPdXRUaW1lID0gTWF0aC5taW4oaGVsZER1cmF0aW9uLCBmYWRlT3V0VGltZSk7XG5cdCAgICAgICAgdmFyIHN0YXJ0RmFkZSA9IHRpbWUgLSBmYWRlT3V0VGltZTtcblx0ICAgICAgICBpZiAoZmFkZU91dFRpbWUgPiB0aGlzLnNhbXBsZVRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSh0aGlzLl9nYWluLCBzdGFydEZhZGUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5jdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSgwLCBzdGFydEZhZGUsIGZhZGVPdXRUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fb25lbmRlZFRpbWVvdXQpO1xuXHQgICAgICAgIHRoaXMuX29uZW5kZWRUaW1lb3V0ID0gVG9uZS5jb250ZXh0LnNldFRpbWVvdXQodGhpcy5fb25lbmRlZC5iaW5kKHRoaXMpLCB0aGlzLl9zdG9wVGltZSAtIHRoaXMubm93KCkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYSBzY2hlZHVsZWQgc3RvcCBldmVudFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuY2FuY2VsU3RvcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSAmJiAhdGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCB0aGUgc3RvcCBlbnZlbG9wZVxuXHQgICAgICAgICAgICB2YXIgZmFkZUluVGltZSA9IHRoaXMudG9TZWNvbmRzKHRoaXMuZmFkZUluKTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGhpcy5fc3RhcnRUaW1lICsgZmFkZUluVGltZSArIHRoaXMuc2FtcGxlVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgTWF0aC5tYXgodGhpcy5ub3coKSwgdGhpcy5fc3RhcnRUaW1lICsgZmFkZUluVGltZSArIHRoaXMuc2FtcGxlVGltZSkpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX29uZW5kZWRUaW1lb3V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGNhbGxiYWNrIHdoZW4gdGhlIGJ1ZmZlciBpcyBlbmRlZC5cblx0XHQgKiAgSW52b2tlcyBgb25lbmRlZGAgYW5kIGRpc3Bvc2VzIHRoZSBub2RlLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLl9vbmVuZGVkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdG9wcGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgLy9hbGxvdyBhZGRpdGlvbmFsIHRpbWUgZm9yIHRoZSBleHBvbmVudGlhbCBjdXJ2ZSB0byBmdWxseSBkZWNheVxuXHQgICAgICAgICAgICB2YXIgYWRkaXRpb25hbFRhaWwgPSB0aGlzLmN1cnZlID09PSAnZXhwb25lbnRpYWwnID8gdGhpcy5mYWRlT3V0ICogMiA6IDA7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VTdGFydGVkICYmIHRoaXMuX3N0b3BUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlLnN0b3AodGhpcy5fc3RvcFRpbWUgKyBhZGRpdGlvbmFsVGFpbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5vbmVuZGVkKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgc3RhcnQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLmxvb3BTdGFydDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UubG9vcFN0YXJ0ID0gdGhpcy50b1NlY29uZHMobG9vcFN0YXJ0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBlbmQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UubG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLmxvb3BFbmQgPSB0aGlzLnRvU2Vjb25kcyhsb29wRW5kKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhdWRpbyBidWZmZXIgYmVsb25naW5nIHRvIHRoZSBwbGF5ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHQgKiBAbmFtZSBidWZmZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdidWZmZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChidWZmZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlciBzaG91bGQgbG9vcCBvbmNlIGl0J3Mgb3Zlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9vcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UubG9vcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3ApIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLmxvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB0aGlzLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5vbmVuZGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gLTE7XG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fb25lbmRlZFRpbWVvdXQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkJ1ZmZlclNvdXJjZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk5vaXNlIGlzIGEgbm9pc2UgZ2VuZXJhdG9yLiBJdCB1c2VzIGxvb3BlZCBub2lzZSBidWZmZXJzIHRvIHNhdmUgb24gcGVyZm9ybWFuY2UuXG5cdFx0ICogICAgICAgICAgVG9uZS5Ob2lzZSBzdXBwb3J0cyB0aGUgbm9pc2UgdHlwZXM6IFwicGlua1wiLCBcIndoaXRlXCIsIGFuZCBcImJyb3duXCIuIFJlYWQgbW9yZSBhYm91dFxuXHRcdCAqICAgICAgICAgIGNvbG9ycyBvZiBub2lzZSBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db2xvcnNfb2Zfbm9pc2UpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfSB0eXBlIHRoZSBub2lzZSB0eXBlICh3aGl0ZXxwaW5rfGJyb3duKVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaW5pdGlhbGl6ZSB0aGUgbm9pc2UgYW5kIHN0YXJ0XG5cdFx0ICogdmFyIG5vaXNlID0gbmV3IFRvbmUuTm9pc2UoXCJwaW5rXCIpLnN0YXJ0KCk7XG5cdFx0ICpcblx0XHQgKiAvL21ha2UgYW4gYXV0b2ZpbHRlciB0byBzaGFwZSB0aGUgbm9pc2Vcblx0XHQgKiB2YXIgYXV0b0ZpbHRlciA9IG5ldyBUb25lLkF1dG9GaWx0ZXIoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IFwiOG1cIixcblx0XHQgKiBcdFwibWluXCIgOiA4MDAsXG5cdFx0ICogXHRcIm1heFwiIDogMTUwMDBcblx0XHQgKiB9KS5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0XHQgKlxuXHRcdCAqIC8vY29ubmVjdCB0aGUgbm9pc2Vcblx0XHQgKiBub2lzZS5jb25uZWN0KGF1dG9GaWx0ZXIpO1xuXHRcdCAqIC8vc3RhcnQgdGhlIGF1dG9maWx0ZXIgTEZPXG5cdFx0ICogYXV0b0ZpbHRlci5zdGFydCgpXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndHlwZSddLCBUb25lLk5vaXNlKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyU291cmNlTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGJ1ZmZlclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbm9pc2UuIEFmZmVjdHNcblx0XHRcdCAqICB0aGUgXCJmcmVxdWVuY3lcIiBvZiB0aGUgbm9pc2UuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTm9pc2UsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICpcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnd2hpdGUnLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG5vaXNlLiBDYW4gYmUgXCJ3aGl0ZVwiLCBcImJyb3duXCIsIG9yIFwicGlua1wiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk5vaXNlI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogbm9pc2UudHlwZSA9IFwid2hpdGVcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vaXNlLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSAhPT0gdHlwZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHR5cGUgaW4gX25vaXNlQnVmZmVycykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vaWYgaXQncyBwbGF5aW5nLCBzdG9wIGFuZCByZXN0YXJ0IGl0XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcChub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydChub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5Ob2lzZTogaW52YWxpZCB0eXBlOiAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbm9pc2UuIEFmZmVjdHNcblx0XHQgKiAgdGhlIFwiZnJlcXVlbmN5XCIgb2YgdGhlIG5vaXNlLlxuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBzaWduYWxcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vaXNlLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBpbnRlcm5hbCBzdGFydCBtZXRob2Rcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGJ1ZmZlciA9IF9ub2lzZUJ1ZmZlcnNbdGhpcy5fdHlwZV07XG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKGJ1ZmZlcikuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmxvb3AgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5wbGF5YmFja1JhdGUudmFsdWUgPSB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLnN0YXJ0KHRoaXMudG9TZWNvbmRzKHRpbWUpLCBNYXRoLnJhbmRvbSgpICogKGJ1ZmZlci5kdXJhdGlvbiAtIDAuMDAxKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGludGVybmFsIHN0b3AgbWV0aG9kXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2Uuc3RvcCh0aGlzLnRvU2Vjb25kcyh0aW1lKSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlc3RhcnRzIHRoZSBub2lzZS5cblx0XHQgKiBAcGFyYW0gIHtbdHlwZV19IHRpbWUgW2Rlc2NyaXB0aW9uXVxuXHRcdCAqIEByZXR1cm4ge1t0eXBlXX0gICAgICBbZGVzY3JpcHRpb25dXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL1RPRE8gY291bGQgYmUgb3B0aW1pemVkIGJ5IGNhbmNlbGxpbmcgdGhlIGJ1ZmZlciBzb3VyY2UgJ3N0b3AnXG5cdCAgICAgICAgLy9zdG9wIGFuZCByZXN0YXJ0XG5cdCAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gVEhFIEJVRkZFUlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9Ob2lzZSBidWZmZXIgc3RhdHNcblx0ICAgIHZhciBidWZmZXJMZW5ndGggPSA0NDEwMCAqIDU7XG5cdCAgICB2YXIgY2hhbm5lbHMgPSAyO1xuXHQgICAgLyoqXG5cdFx0ICpcdFRoZSBub2lzZSBhcnJheXMuIEdlbmVyYXRlZCBvbiBpbml0aWFsaXphdGlvbi5cblx0XHQgKiAgYm9ycm93ZWQgaGVhdmlseSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS96YWNoYXJ5ZGVudG9uL25vaXNlLmpzXG5cdFx0ICogIChjKSAyMDEzIFphY2ggRGVudG9uIChNSVQpXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIF9ub2lzZUFycmF5cyA9IHtcblx0ICAgICAgICAncGluayc6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsTnVtID0gMDsgY2hhbm5lbE51bSA8IGNoYW5uZWxzOyBjaGFubmVsTnVtKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJMZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyW2NoYW5uZWxOdW1dID0gY2hhbm5lbDtcblx0ICAgICAgICAgICAgICAgIHZhciBiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNjtcblx0ICAgICAgICAgICAgICAgIGIwID0gYjEgPSBiMiA9IGIzID0gYjQgPSBiNSA9IGI2ID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgd2hpdGUgPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7XG5cdCAgICAgICAgICAgICAgICAgICAgYjAgPSAwLjk5ODg2ICogYjAgKyB3aGl0ZSAqIDAuMDU1NTE3OTtcblx0ICAgICAgICAgICAgICAgICAgICBiMSA9IDAuOTkzMzIgKiBiMSArIHdoaXRlICogMC4wNzUwNzU5O1xuXHQgICAgICAgICAgICAgICAgICAgIGIyID0gMC45NjkgKiBiMiArIHdoaXRlICogMC4xNTM4NTI7XG5cdCAgICAgICAgICAgICAgICAgICAgYjMgPSAwLjg2NjUgKiBiMyArIHdoaXRlICogMC4zMTA0ODU2O1xuXHQgICAgICAgICAgICAgICAgICAgIGI0ID0gMC41NSAqIGI0ICsgd2hpdGUgKiAwLjUzMjk1MjI7XG5cdCAgICAgICAgICAgICAgICAgICAgYjUgPSAtMC43NjE2ICogYjUgLSB3aGl0ZSAqIDAuMDE2ODk4O1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gPSBiMCArIGIxICsgYjIgKyBiMyArIGI0ICsgYjUgKyBiNiArIHdoaXRlICogMC41MzYyO1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gKj0gMC4xMTtcblx0ICAgICAgICAgICAgICAgICAgICAvLyAocm91Z2hseSkgY29tcGVuc2F0ZSBmb3IgZ2FpblxuXHQgICAgICAgICAgICAgICAgICAgIGI2ID0gd2hpdGUgKiAwLjExNTkyNjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuXHQgICAgICAgIH0oKSxcblx0ICAgICAgICAnYnJvd24nOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY2hhbm5lbE51bSA9IDA7IGNoYW5uZWxOdW0gPCBjaGFubmVsczsgY2hhbm5lbE51bSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyTGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlcltjaGFubmVsTnVtXSA9IGNoYW5uZWw7XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFzdE91dCA9IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHdoaXRlID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxO1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gPSAobGFzdE91dCArIDAuMDIgKiB3aGl0ZSkgLyAxLjAyO1xuXHQgICAgICAgICAgICAgICAgICAgIGxhc3RPdXQgPSBjaGFubmVsW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gKj0gMy41OyAgICAvLyAocm91Z2hseSkgY29tcGVuc2F0ZSBmb3IgZ2FpblxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSgpLFxuXHQgICAgICAgICd3aGl0ZSc6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsTnVtID0gMDsgY2hhbm5lbE51bSA8IGNoYW5uZWxzOyBjaGFubmVsTnVtKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJMZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyW2NoYW5uZWxOdW1dID0gY2hhbm5lbDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2ldID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSgpXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICpcdHN0YXRpYyBub2lzZSBidWZmZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdCAqL1xuXHQgICAgdmFyIF9ub2lzZUJ1ZmZlcnMgPSB7fTtcblx0ICAgIC8vY3JlYXRlIHRoZSBUb25lLkJ1ZmZlcnNcblx0ICAgIGZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlcnMoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgdHlwZSBpbiBfbm9pc2VBcnJheXMpIHtcblx0ICAgICAgICAgICAgX25vaXNlQnVmZmVyc1t0eXBlXSA9IG5ldyBUb25lLkJ1ZmZlcigpLmZyb21BcnJheShfbm9pc2VBcnJheXNbdHlwZV0pO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0ICAgIC8vY3JlYXRlIHRoZSBub2lzZSBidWZmZXJzXG5cdCAgICBUb25lLmdldENvbnRleHQoY3JlYXRlQnVmZmVycyk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBjcmVhdGVCdWZmZXJzKTtcblx0ICAgIHJldHVybiBUb25lLk5vaXNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU2ltcGxlIGNvbnZvbHV0aW9uIGNyZWF0ZWQgd2l0aCBkZWNheWluZyBub2lzZS5cblx0XHQgKiAgXHRcdEdlbmVyYXRlcyBhbiBJbXB1bHNlIFJlc3BvbnNlIEJ1ZmZlclxuXHRcdCAqIFx0XHRcdHdpdGggVG9uZS5PZmZsaW5lIHRoZW4gZmVlZHMgdGhlIElSIGludG8gQ29udm9sdmVyTm9kZS5cblx0XHQgKiBcdFx0XHROb3RlOiB0aGUgUmV2ZXJiIHdpbGwgbm90IG1ha2UgYW55IHNvdW5kIHVudGlsIFtnZW5lcmF0ZV0oI2dlbmVyYXRlKVxuXHRcdCAqIFx0XHRcdGhhcyBiZWVuIGludm9rZWQgYW5kIHJlc29sdmVkLlxuXHRcdCAqXG5cdFx0ICogXHRcdFx0SW5zcGlyYXRpb24gZnJvbSBbUmV2ZXJiR2VuXShodHRwczovL2dpdGh1Yi5jb20vYWRlbGVzcGluYXNzZS9yZXZlcmJHZW4pLlxuXHRcdCAqIFx0XHRcdENvcHlyaWdodCAoYykgMjAxNCBBbGFuIGRlTGVzcGluYXNzZSBBcGFjaGUgMi4wIExpY2Vuc2UuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQ29udm9sdmVyfVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBkZWNheSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCByZXZlcmJlcmF0ZSBmb3IuXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2RlY2F5J10sIFRvbmUuUmV2ZXJiKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENvbnZvbHZlciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0NvbnZvbHZlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVDb252b2x2ZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgcmV2ZXJiXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVjYXkgPSBvcHRpb25zLmRlY2F5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtb3VudCBvZiB0aW1lIGJlZm9yZSB0aGUgcmV2ZXJiIGlzIGZ1bGx5XG5cdFx0XHQgKiByYW1wZWQgaW4uXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucHJlRGVsYXkgPSBvcHRpb25zLnByZURlbGF5O1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9jb252b2x2ZXIpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUmV2ZXJiLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuUmV2ZXJiLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWNheSc6IDEuNSxcblx0ICAgICAgICAncHJlRGVsYXknOiAwLjAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2VuZXJhdGUgdGhlIEltcHVsc2UgUmVzcG9uc2UuIFJldHVybnMgYSBwcm9taXNlIHdoaWxlIHRoZSBJUiBpcyBiZWluZ1xuXHRcdCAqIGdlbmVyYXRlZC5cblx0XHQgKiBAcmV0dXJuIHtQcm9taXNlPFRvbmUuUmV2ZXJiPn0gUHJvbWlzZSB3aGljaCByZXR1cm5zIHRoaXMgb2JqZWN0LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLk9mZmxpbmUoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvL2NyZWF0ZSBhIG5vaXNlIGJ1cnN0IHdoaWNoIGRlY2F5cyBvdmVyIHRoZSBkdXJhdGlvblxuXHQgICAgICAgICAgICB2YXIgbm9pc2VMID0gbmV3IFRvbmUuTm9pc2UoKTtcblx0ICAgICAgICAgICAgdmFyIG5vaXNlUiA9IG5ldyBUb25lLk5vaXNlKCk7XG5cdCAgICAgICAgICAgIHZhciBtZXJnZSA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgICAgIG5vaXNlTC5jb25uZWN0KG1lcmdlLmxlZnQpO1xuXHQgICAgICAgICAgICBub2lzZVIuY29ubmVjdChtZXJnZS5yaWdodCk7XG5cdCAgICAgICAgICAgIHZhciBnYWluTm9kZSA9IG5ldyBUb25lLkdhaW4oKS50b01hc3RlcigpO1xuXHQgICAgICAgICAgICBtZXJnZS5jb25uZWN0KGdhaW5Ob2RlKTtcblx0ICAgICAgICAgICAgbm9pc2VMLnN0YXJ0KDApO1xuXHQgICAgICAgICAgICBub2lzZVIuc3RhcnQoMCk7XG5cdCAgICAgICAgICAgIC8vc2hvcnQgZmFkZSBpblxuXHQgICAgICAgICAgICBnYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIDApO1xuXHQgICAgICAgICAgICBnYWluTm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKDEsIHRoaXMucHJlRGVsYXkpO1xuXHQgICAgICAgICAgICAvL2RlY2F5XG5cdCAgICAgICAgICAgIGdhaW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKDAsIHRoaXMucHJlRGVsYXksIHRoaXMuZGVjYXkgLSB0aGlzLnByZURlbGF5KTtcblx0ICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMuZGVjYXkpLnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9jb252b2x2ZXIuYnVmZmVyID0gYnVmZmVyLmdldCgpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUmV2ZXJifSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUmV2ZXJiO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQmFzZSBjbGFzcyBmb3Igc3RlcmVvIGZlZWRiYWNrIGVmZmVjdHMgd2hlcmUgdGhlIGVmZmVjdFJldHVyblxuXHRcdCAqICAgICAgICAgaXMgZmVkIGJhY2sgaW50byB0aGUgc2FtZSBjaGFubmVsLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZmVlZGJhY2snXSwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb250cm9scyB0aGUgYW1vdW50IG9mIGZlZWRiYWNrXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mZWVkYmFjaywgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGVmdCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0wgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHJpZ2h0IHNpZGUgZmVlYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwuY2hhaW4odGhpcy5fZmVlZGJhY2tMLCB0aGlzLmVmZmVjdFNlbmRMKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIuY2hhaW4odGhpcy5fZmVlZGJhY2tSLCB0aGlzLmVmZmVjdFNlbmRSKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmZhbih0aGlzLl9mZWVkYmFja0wuZ2FpbiwgdGhpcy5fZmVlZGJhY2tSLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZmVlZGJhY2snXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9GZWVkYmFja0VmZmVjdCwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydmZWVkYmFjayddKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1IgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQXBwbGllcyBhIHdpZHRoIGZhY3RvciB0byB0aGUgbWlkL3NpZGUgc2VwZXJhdGlvbi5cblx0XHQgKiAgICAgICAgIDAgaXMgYWxsIG1pZCBhbmQgMSBpcyBhbGwgc2lkZS5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmb3VuZCBpbiBba3ZyYXVkaW8gZm9ydW1zXShodHRwOi8vd3d3Lmt2cmF1ZGlvLmNvbS9mb3J1bS92aWV3dG9waWMucGhwP3Q9MjEyNTg3KS5cblx0XHQgKiAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICA8Y29kZT5cblx0XHQgKiAgICAgICAgIE1pZCAqPSAyKigxLXdpZHRoKTxicj5cblx0XHQgKiAgICAgICAgIFNpZGUgKj0gMip3aWR0aFxuXHRcdCAqICAgICAgICAgPC9jb2RlPlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1pZFNpZGVFZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3dpZHRoXSBUaGUgc3RlcmVvIHdpZHRoLiBBIHdpZHRoIG9mIDAgaXMgbW9ubyBhbmQgMSBpcyBzdGVyZW8uIDAuNSBpcyBubyBjaGFuZ2UuXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1dpZGVuZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd3aWR0aCddLCBUb25lLlN0ZXJlb1dpZGVuZXIpO1xuXHQgICAgICAgIFRvbmUuTWlkU2lkZUVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3aWR0aCBjb250cm9sLiAwID0gMTAwJSBtaWQuIDEgPSAxMDAlIHNpZGUuIDAuNSA9IG5vIGNoYW5nZS5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy53aWR0aCA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLndpZHRoLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnd2lkdGgnXSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUd28gdGltZXMgdGhlICgxLXdpZHRoKSBmb3IgdGhlIG1pZCBjaGFubmVsXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoTWlkID0gbmV3IFRvbmUuTXVsdGlwbHkoMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUd28gdGltZXMgdGhlIHdpZHRoIGZvciB0aGUgc2lkZSBjaGFubmVsXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoU2lkZSA9IG5ldyBUb25lLk11bHRpcGx5KDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE1pZCBtdWx0aXBsaWVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZE11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQuY29ubmVjdCh0aGlzLl9taWRNdWx0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLm1pZFNlbmQuY2hhaW4odGhpcy5fbWlkTXVsdCwgdGhpcy5taWRSZXR1cm4pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogMSAtIHdpZHRoXG5cdFx0XHQgKiBAdHlwZSB7VG9uZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uZU1pbnVzV2lkdGggPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIHRoaXMuX29uZU1pbnVzV2lkdGguY29ubmVjdCh0aGlzLl90d29UaW1lc1dpZHRoTWlkKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29uc3RhbnQoMSkuY29ubmVjdCh0aGlzLl9vbmVNaW51c1dpZHRoLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmNvbm5lY3QodGhpcy5fb25lTWludXNXaWR0aCwgMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2lkZSBtdWx0aXBsaWVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NpZGVNdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmNvbm5lY3QodGhpcy5fdHdvVGltZXNXaWR0aFNpZGUpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlLmNvbm5lY3QodGhpcy5fc2lkZU11bHQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuc2lkZVNlbmQuY2hhaW4odGhpcy5fc2lkZU11bHQsIHRoaXMuc2lkZVJldHVybik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9XaWRlbmVyLCBUb25lLk1pZFNpZGVFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1dpZGVuZXIuZGVmYXVsdHMgPSB7ICd3aWR0aCc6IDAuNSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9XaWRlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1dpZGVuZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5NaWRTaWRlRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd3aWR0aCddKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLndpZHRoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRNdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRNdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zaWRlTXVsdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2lkZU11bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoU2lkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvV2lkZW5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVHJlbW9sbyBtb2R1bGF0ZXMgdGhlIGFtcGxpdHVkZSBvZiBhbiBpbmNvbWluZyBzaWduYWwgdXNpbmcgYSBUb25lLkxGTy5cblx0XHQgKiAgICAgICAgIFRoZSB0eXBlLCBmcmVxdWVuY3ksIGFuZCBkZXB0aCBvZiB0aGUgTEZPIGlzIGNvbnRyb2xsYWJsZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2ZyZXF1ZW5jeV0gVGhlIHJhdGUgb2YgdGhlIGVmZmVjdC5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW2RlcHRoXSBUaGUgZGVwdGggb2YgdGhlIGVmZmVjdC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhIHRyZW1vbG8gYW5kIHN0YXJ0IGl0J3MgTEZPXG5cdFx0ICogdmFyIHRyZW1vbG8gPSBuZXcgVG9uZS5UcmVtb2xvKDksIDAuNzUpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKiAvL3JvdXRlIGFuIG9zY2lsbGF0b3IgdGhyb3VnaCB0aGUgdHJlbW9sbyBhbmQgc3RhcnQgaXRcblx0XHQgKiB2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KHRyZW1vbG8pLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuVHJlbW9sbyk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHJlbWVsbyBMRk8gaW4gdGhlIGxlZnQgY2hhbm5lbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAncGhhc2UnOiBvcHRpb25zLnNwcmVhZCxcblx0ICAgICAgICAgICAgJ21pbic6IDEsXG5cdCAgICAgICAgICAgICdtYXgnOiAwXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRyZW1lbG8gTEZPIGluIHRoZSBsZWZ0IGNoYW5uZWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9SID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ3BoYXNlJzogb3B0aW9ucy5zcHJlYWQsXG5cdCAgICAgICAgICAgICdtaW4nOiAxLFxuXHQgICAgICAgICAgICAnbWF4JzogMFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZXJlIHRoZSBnYWluIGlzIG11bHRpcGxpZWRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlTCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVyZSB0aGUgZ2FpbiBpcyBtdWx0aXBsaWVkXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVkZVIgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgdHJlbW9sby5cblx0XHRcdCAqICBAdHlwZSAge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlcHRoIG9mIHRoZSBlZmZlY3QuIEEgZGVwdGggb2YgMCwgaGFzIG5vIGVmZmVjdFxuXHRcdFx0ICogIG9uIHRoZSBhbXBsaXR1ZGUsIGFuZCBhIGRlcHRoIG9mIDEgbWFrZXMgdGhlIGFtcGxpdHVkZVxuXHRcdFx0ICogIG1vZHVsYXRlIGZ1bGx5IGJldHdlZW4gMCBhbmQgMS5cblx0XHRcdCAqICBAdHlwZSAge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXB0aCwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbih0aGlzLl9hbXBsaXR1ZGVMLCB0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4odGhpcy5fYW1wbGl0dWRlUiwgdGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICB0aGlzLl9sZm9MLmNvbm5lY3QodGhpcy5fYW1wbGl0dWRlTC5nYWluKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLmNvbm5lY3QodGhpcy5fYW1wbGl0dWRlUi5nYWluKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5mYW4odGhpcy5fbGZvTC5mcmVxdWVuY3ksIHRoaXMuX2xmb1IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmRlcHRoLmZhbih0aGlzLl9sZm9SLmFtcGxpdHVkZSwgdGhpcy5fbGZvTC5hbXBsaXR1ZGUpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLnNwcmVhZCA9IG9wdGlvbnMuc3ByZWFkO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJlbW9sbywgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDEwLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdkZXB0aCc6IDAuNSxcblx0ICAgICAgICAnc3ByZWFkJzogMTgwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RhcnQgdGhlIHRyZW1vbG8uXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHRyZW1vbG8gYmVnaW5zLlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIHRoZSB0cmVtb2xvLlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSB0cmVtb2xvIHN0b3BzLlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBlZmZlY3QgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFtkZWxheT0wXSBEZWxheSB0aW1lIGJlZm9yZSBzdGFydGluZyB0aGUgZWZmZWN0IGFmdGVyIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IGhhcyBzdGFydGVkLlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uIChkZWxheSkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3luYyhkZWxheSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zeW5jKGRlbGF5KTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIGZpbHRlciBmcm9tIHRoZSB0cmFuc3BvcnRcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5UcmVtb2xvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9sZm9MLnVuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IudW5zeW5jKCk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQudW5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgVHJlbW9sbydzIG9zY2lsbGF0b3IgdHlwZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmVtb2xvI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJlbW9sby5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvTC50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQW1vdW50IG9mIHN0ZXJlbyBzcHJlYWQuIFdoZW4gc2V0IHRvIDAsIGJvdGggTEZPJ3Mgd2lsbCBiZSBwYW5uZWQgY2VudHJhbGx5LlxuXHRcdCAqIFdoZW4gc2V0IHRvIDE4MCwgTEZPJ3Mgd2lsbCBiZSBwYW5uZWQgaGFyZCBsZWZ0IGFuZCByaWdodCByZXNwZWN0aXZlbHkuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVHJlbW9sbyNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyZW1vbG8ucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvUi5waGFzZSAtIHRoaXMuX2xmb0wucGhhc2U7ICAgIC8vMTgwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5waGFzZSA9IDkwIC0gc3ByZWFkIC8gMjtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5waGFzZSA9IHNwcmVhZCAvIDIgKyA5MDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmVtb2xvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyZW1vbG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIFZpYnJhdG8gZWZmZWN0IGNvbXBvc2VkIG9mIGEgVG9uZS5EZWxheSBhbmQgYSBUb25lLkxGTy4gVGhlIExGT1xuXHRcdCAqICAgICAgICAgbW9kdWxhdGVzIHRoZSBkZWxheVRpbWUgb2YgdGhlIGRlbGF5LCBjYXVzaW5nIHRoZSBwaXRjaCB0byByaXNlXG5cdFx0ICogICAgICAgICBhbmQgZmFsbC4gXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgZnJlcXVlbmN5IG9mIHRoZSB2aWJyYXRvLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBkZXB0aCBUaGUgYW1vdW50IHRoZSBwaXRjaCBpcyBtb2R1bGF0ZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlZpYnJhdG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuVmlicmF0byk7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXkgbm9kZSB1c2VkIGZvciB0aGUgdmlicmF0byBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIExGTyB1c2VkIHRvIGNvbnRyb2wgdGhlIHZpYnJhdG9cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICd0eXBlJzogb3B0aW9ucy50eXBlLFxuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IG9wdGlvbnMubWF4RGVsYXksXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogLTkwICAgIC8vb2Zmc2UgdGhlIHBoYXNlIHNvIHRoZSByZXN0aW5nIHBvc2l0aW9uIGlzIGluIHRoZSBjZW50ZXJcblx0ICAgICAgICB9KS5zdGFydCgpLmNvbm5lY3QodGhpcy5fZGVsYXlOb2RlLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgdmlicmF0b1xuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXB0aCBvZiB0aGUgdmlicmF0by4gXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9sZm8uYW1wbGl0dWRlO1xuXHQgICAgICAgIHRoaXMuZGVwdGgudmFsdWUgPSBvcHRpb25zLmRlcHRoO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4odGhpcy5fZGVsYXlOb2RlLCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5WaWJyYXRvLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuVmlicmF0by5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWF4RGVsYXknOiAwLjAwNSxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNSxcblx0ICAgICAgICAnZGVwdGgnOiAwLjEsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUeXBlIG9mIG9zY2lsbGF0b3IgYXR0YWNoZWQgdG8gdGhlIFZpYnJhdG8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVmlicmF0byNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlZpYnJhdG8ucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmby50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8udHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlZpYnJhdG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVmlicmF0by5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5WaWJyYXRvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRXZlbnQgYWJzdHJhY3RzIGF3YXkgVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUgYW5kIHByb3ZpZGVzIGEgc2NoZWR1bGFibGVcblx0XHQgKiAgICAgICAgICBjYWxsYmFjayBmb3IgYSBzaW5nbGUgb3IgcmVwZWF0YWJsZSBldmVudHMgYWxvbmcgdGhlIHRpbWVsaW5lLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGF0IHRoZSB0aW1lLlxuXHRcdCAqICBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSBvciB2YWx1ZXMgd2hpY2ggc2hvdWxkIGJlIHBhc3NlZCB0b1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBvbiBpbnZvY2F0aW9uLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjaG9yZCA9IG5ldyBUb25lLkV2ZW50KGZ1bmN0aW9uKHRpbWUsIGNob3JkKXtcblx0XHQgKiBcdC8vdGhlIGNob3JkIGFzIHdlbGwgYXMgdGhlIGV4YWN0IHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogXHQvL2FyZSBwYXNzZWQgaW4gYXMgYXJndW1lbnRzIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvblxuXHRcdCAqIH0sIFtcIkQ0XCIsIFwiRTRcIiwgXCJGNFwiXSk7XG5cdFx0ICogLy9zdGFydCB0aGUgY2hvcmQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJhbnNwb3J0IHRpbWVsaW5lXG5cdFx0ICogY2hvcmQuc3RhcnQoKTtcblx0XHQgKiAvL2xvb3AgaXQgZXZlcnkgbWVhc3VyZSBmb3IgOCBtZWFzdXJlc1xuXHRcdCAqIGNob3JkLmxvb3AgPSA4O1xuXHRcdCAqIGNob3JkLmxvb3BFbmQgPSBcIjFtXCI7XG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ3ZhbHVlJ1xuXHQgICAgICAgIF0sIFRvbmUuRXZlbnQpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBMb29wIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUgIHtCb29sZWFufFBvc2l0aXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wID0gb3B0aW9ucy5sb29wO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2UuXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB3aGljaCBpcyBwYXNzZWQgdG8gdGhlXG5cdFx0XHQgKiAgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdFx0XHQgKiAgQHR5cGUgIHsqfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVuIHRoZSBub3RlIGlzIHNjaGVkdWxlZCB0byBzdGFydC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKG9wdGlvbnMubG9vcFN0YXJ0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVuIHRoZSBub3RlIGlzIHNjaGVkdWxlZCB0byBzdGFydC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhvcHRpb25zLmxvb3BFbmQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRyYWNrcyB0aGUgc2NoZWR1bGVkIGV2ZW50c1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGUgbm90ZS4gQSBzcGVlZCBvZiAxXG5cdFx0XHQgKiAgaXMgbm8gY2hhbmdlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGRlbGF5IHRpbWUgZnJvbSB3aGVuIHRoZSBldmVudCBpcyBzY2hlZHVsZWQgdG8gc3RhcnRcblx0XHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0T2Zmc2V0ID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBwcml2YXRlIGhvbGRlciBvZiBwcm9iYWJpbGl0eSB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcHJvYmFiaWxpdHkgPSBvcHRpb25zLnByb2JhYmlsaXR5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhbW91bnQgb2YgdmFyaWF0aW9uIGZyb20gdGhlXG5cdFx0XHQgKiAgZ2l2ZW4gdGltZS5cblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9odW1hbml6ZSA9IG9wdGlvbnMuaHVtYW5pemU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSWYgbXV0ZSBpcyB0cnVlLCB0aGUgY2FsbGJhY2sgd29uJ3QgYmVcblx0XHRcdCAqICBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAnMW0nLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICd2YWx1ZSc6IG51bGwsXG5cdCAgICAgICAgJ3Byb2JhYmlsaXR5JzogMSxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlLFxuXHQgICAgICAgICdodW1hbml6ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlc2NoZWR1bGUgYWxsIG9mIHRoZSBldmVudHMgYWxvbmcgdGhlIHRpbWVsaW5lXG5cdFx0ICogIHdpdGggdGhlIHVwZGF0ZWQgdmFsdWVzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGFmdGVyIE9ubHkgcmVzY2hlZHVsZXMgZXZlbnRzIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLl9yZXNjaGVkdWxlRXZlbnRzID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgLy9pZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgc2NoZWR1bGVzIGFsbCBvZiB0aGUgZXZlbnRzXG5cdCAgICAgICAgYWZ0ZXIgPSBUb25lLmRlZmF1bHRBcmcoYWZ0ZXIsIC0xKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoRnJvbShhZnRlciwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHZhciBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChldmVudC5pZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB2YXIgc3RhcnRUaWNrID0gZXZlbnQudGltZSArIE1hdGgucm91bmQodGhpcy5zdGFydE9mZnNldCAvIHRoaXMuX3BsYXliYWNrUmF0ZSk7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gSW5maW5pdHk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodGhpcy5fbG9vcCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSB0aGlzLl9sb29wICogdGhpcy5fZ2V0TG9vcER1cmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0RXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXRBZnRlcihzdGFydFRpY2spO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0RXZlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBNYXRoLm1pbihkdXJhdGlvbiwgbmV4dEV2ZW50LnRpbWUgLSBzdGFydFRpY2spO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBpZiAoZHVyYXRpb24gIT09IEluZmluaXR5KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vc2NoZWR1bGUgYSBzdG9wIHNpbmNlIGl0J3MgZmluaXRlIGR1cmF0aW9uXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgc3RhcnRUaWNrICsgZHVyYXRpb24gKyAxKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBUb25lLlRpY2tzKGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGludGVydmFsID0gVG9uZS5UaWNrcyh0aGlzLl9nZXRMb29wRHVyYXRpb24oKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQuaWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZVJlcGVhdCh0aGlzLl90aWNrLmJpbmQodGhpcyksIGludGVydmFsLCBUb25lLlRpY2tzKHN0YXJ0VGljayksIGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQuaWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZSh0aGlzLl90aWNrLmJpbmQodGhpcyksIFRvbmUuVGlja3Moc3RhcnRUaWNrKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgbm90ZSwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnRpY2tzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3RhcnQgZnJvbSB0aGUgc2NoZWR1bGVkIHN0YXJ0IHRpbWVcblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQG5hbWUgc3RhcnRPZmZzZXRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3N0YXJ0T2Zmc2V0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2JhYmlsaXR5IG9mIHRoZSBub3RlcyBiZWluZyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2JhYmlsaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdwcm9iYWJpbGl0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2JhYmlsaXR5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvYikge1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9iYWJpbGl0eSA9IHByb2I7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgc2V0IHRvIHRydWUsIHdpbGwgYXBwbHkgc21hbGwgcmFuZG9tIHZhcmlhdGlvblxuXHRcdCAqICB0byB0aGUgY2FsbGJhY2sgdGltZS4gSWYgdGhlIHZhbHVlIGlzIGdpdmVuIGFzIGEgdGltZSwgaXQgd2lsbCByYW5kb21pemVcblx0XHQgKiAgYnkgdGhhdCBhbW91bnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogZXZlbnQuaHVtYW5pemUgPSB0cnVlO1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdCAqICBAbmFtZSBodW1hbml6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnaHVtYW5pemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9odW1hbml6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhcmlhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9odW1hbml6ZSA9IHZhcmlhdGlvbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIHRpbWUgIFdoZW4gdGhlIG5vdGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAnc3RhdGUnOiBUb25lLlN0YXRlLlN0YXJ0ZWQsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IHRpbWUsXG5cdCAgICAgICAgICAgICAgICAnaWQnOiB1bmRlZmluZWRcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBFdmVudCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIHRpbWUgIFdoZW4gdGhlIG5vdGUgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXNFdmVudCA9IHRoaXMuX3N0YXRlLmdldEJlZm9yZSh0aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHJlc2NoZWR1bFRpbWUgPSB0aW1lO1xuXHQgICAgICAgICAgICBpZiAocHJldmlvdXNFdmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgcmVzY2hlZHVsVGltZSA9IHByZXZpb3VzRXZlbnQudGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKHJlc2NoZWR1bFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGFsbCBzY2hlZHVsZWQgZXZlbnRzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgW3RpbWU9MF0gIFRoZSB0aW1lIGFmdGVyIHdoaWNoIGV2ZW50cyB3aWxsIGJlIGNhbmNlbC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLmRlZmF1bHRBcmcodGltZSwgLUluZmluaXR5KTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hGcm9tKHRpbWUsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlci4gQWxzb1xuXHRcdCAqICBjaGVja3MgaWYgdGhlIEV2ZW50IGlzIGRvbmUgcGxheWluZ1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSBvZiB0aGUgZXZlbnQgaW4gc2Vjb25kc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB0aWNrcyA9IFRvbmUuVHJhbnNwb3J0LmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmICghdGhpcy5tdXRlICYmIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpY2tzKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnByb2JhYmlsaXR5IDwgMSAmJiBNYXRoLnJhbmRvbSgpID4gdGhpcy5wcm9iYWJpbGl0eSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmh1bWFuaXplKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdmFyaWF0aW9uID0gMC4wMjtcblx0ICAgICAgICAgICAgICAgIGlmICghVG9uZS5pc0Jvb2xlYW4odGhpcy5odW1hbml6ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24gPSB0aGlzLnRvU2Vjb25kcyh0aGlzLmh1bWFuaXplKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRpbWUgKz0gKE1hdGgucmFuZG9tKCkgKiAyIC0gMSkgKiB2YXJpYXRpb247XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB0aGlzLnZhbHVlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgZHVyYXRpb24gb2YgdGhlIGxvb3AuXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLl9nZXRMb29wRHVyYXRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoKHRoaXMuX2xvb3BFbmQgLSB0aGlzLl9sb29wU3RhcnQpIC8gdGhpcy5fcGxheWJhY2tSYXRlKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIG5vdGUgc2hvdWxkIGxvb3Agb3Igbm90XG5cdFx0ICogIGJldHdlZW4gVG9uZS5FdmVudC5sb29wU3RhcnQgYW5kXG5cdFx0ICogIFRvbmUuRXZlbnQubG9vcEVuZC4gQW4gaW50ZWdlclxuXHRcdCAqICB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mXG5cdFx0ICogIGxvb3BzIHRoZSBFdmVudCBkb2VzIGFmdGVyIGl0IHN0YXJ0cy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFBvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBsb29wXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdsb29wJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3ApIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0VGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIG5vdGUuIERlZmF1bHRzIHRvIDEuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG5vdGUubG9vcCA9IHRydWU7XG5cdFx0ICogLy9yZXBlYXQgdGhlIG5vdGUgdHdpY2UgYXMgZmFzdFxuXHRcdCAqIG5vdGUucGxheWJhY2tSYXRlID0gMjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBsb29wRW5kIHBvaW50IGlzIHRoZSB0aW1lIHRoZSBldmVudCB3aWxsIGxvb3Bcblx0XHQgKiAgaWYgVG9uZS5FdmVudC5sb29wIGlzIHRydWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcEVuZCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wRW5kKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvVGlja3MobG9vcEVuZCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSB3aGVuIHRoZSBsb29wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcFN0YXJ0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3MobG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IHByb2dyZXNzIG9mIHRoZSBsb29wIGludGVydmFsLlxuXHRcdCAqICBSZXR1cm5zIDAgaWYgdGhlIGV2ZW50IGlzIG5vdCBzdGFydGVkIHlldCBvclxuXHRcdCAqICBpdCBpcyBub3Qgc2V0IHRvIGxvb3AuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2dyZXNzXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAncHJvZ3Jlc3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdGlja3MgPSBUb25lLlRyYW5zcG9ydC50aWNrcztcblx0ICAgICAgICAgICAgICAgIHZhciBsYXN0RXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQodGlja3MpO1xuXHQgICAgICAgICAgICAgICAgaWYgKGxhc3RFdmVudCAhPT0gbnVsbCAmJiBsYXN0RXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBsb29wRHVyYXRpb24gPSB0aGlzLl9nZXRMb29wRHVyYXRpb24oKTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcHJvZ3Jlc3MgPSAodGlja3MgLSBsYXN0RXZlbnQudGltZSkgJSBsb29wRHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2dyZXNzIC8gbG9vcER1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY2FuY2VsKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FdmVudDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkxvb3AgY3JlYXRlcyBhIGxvb3BlZCBjYWxsYmFjayBhdCB0aGUgXG5cdFx0ICogICAgICAgICBzcGVjaWZpZWQgaW50ZXJ2YWwuIFRoZSBjYWxsYmFjayBjYW4gYmUgXG5cdFx0ICogICAgICAgICBzdGFydGVkLCBzdG9wcGVkIGFuZCBzY2hlZHVsZWQgYWxvbmdcblx0XHQgKiAgICAgICAgIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZS4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGxvb3AgPSBuZXcgVG9uZS5Mb29wKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly90cmlnZ2VyZWQgZXZlcnkgZWlnaHRoIG5vdGUuIFxuXHRcdCAqIFx0Y29uc29sZS5sb2codGltZSk7XG5cdFx0ICogfSwgXCI4blwiKS5zdGFydCgwKTtcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydCgpO1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBpbnRlcnZhbCBUaGUgdGltZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbGJhY2sgY2FsbHMuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2ludGVydmFsJ1xuXHQgICAgICAgIF0sIFRvbmUuTG9vcCk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBldmVudCB3aGljaCBwcm9kdWNlcyB0aGUgY2FsbGJhY2tzXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudCA9IG5ldyBUb25lLkV2ZW50KHtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogdGhpcy5fdGljay5iaW5kKHRoaXMpLFxuXHQgICAgICAgICAgICAnbG9vcCc6IHRydWUsXG5cdCAgICAgICAgICAgICdsb29wRW5kJzogb3B0aW9ucy5pbnRlcnZhbCxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IG9wdGlvbnMucGxheWJhY2tSYXRlLFxuXHQgICAgICAgICAgICAncHJvYmFiaWxpdHknOiBvcHRpb25zLnByb2JhYmlsaXR5XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZSBuZXh0IGV2ZW50IGluIHRoZSBwYXR0ZXJuXG5cdFx0XHQgKiAgQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLy9zZXQgdGhlIGl0ZXJhdGlvbnNcblx0ICAgICAgICB0aGlzLml0ZXJhdGlvbnMgPSBvcHRpb25zLml0ZXJhdGlvbnM7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Mb29wKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdpbnRlcnZhbCc6ICc0bicsXG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdpdGVyYXRpb25zJzogSW5maW5pdHksXG5cdCAgICAgICAgJ3Byb2JhYmlsaXR5JzogdHJ1ZSxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBsb29wIGF0IHRoZSBzcGVjaWZpZWQgdGltZSBhbG9uZyB0aGUgVHJhbnNwb3J0J3Ncblx0XHQgKiAgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb249fSAgdGltZSAgV2hlbiB0byBzdGFydCB0aGUgTG9vcC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBsb29wIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9uPX0gIHRpbWUgIFdoZW4gdG8gc3RvcCB0aGUgQXJwZWdnaW9cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGFsbCBzY2hlZHVsZWQgZXZlbnRzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgW3RpbWU9MF0gIFRoZSB0aW1lIGFmdGVyIHdoaWNoIGV2ZW50cyB3aWxsIGJlIGNhbmNlbC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudC5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBub3RlcyBzaG91bGQgYmUgY2FsbGVkXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRoZSBldmVudCBvY2N1cnNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdGF0ZSBvZiB0aGUgTG9vcCwgZWl0aGVyIHN0YXJ0ZWQgb3Igc3RvcHBlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQuc3RhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2dyZXNzIG9mIHRoZSBsb29wIGFzIGEgdmFsdWUgYmV0d2VlbiAwLTEuIDAsIHdoZW5cblx0XHQgKiAgdGhlIGxvb3AgaXMgc3RvcHBlZCBvciBkb25lIGl0ZXJhdGluZy4gXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvZ3Jlc3Ncblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3Byb2dyZXNzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQucHJvZ3Jlc3M7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxiYWNrcy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogbG9vcC5pbnRlcnZhbCA9IFwiOG5cIjsgLy9sb29wIGV2ZXJ5IDhuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBpbnRlcnZhbFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdpbnRlcnZhbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50Lmxvb3BFbmQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5sb29wRW5kID0gaW50ZXJ2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIGxvb3AuIFRoZSBub3JtYWwgcGxheWJhY2sgcmF0ZSBpcyAxIChubyBjaGFuZ2UpLiBcblx0XHQgKiAgQSBgcGxheWJhY2tSYXRlYCBvZiAyIHdvdWxkIGJlIHR3aWNlIGFzIGZhc3QuIFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50LnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQucGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSYW5kb20gdmFyaWF0aW9uICsvLTAuMDFzIHRvIHRoZSBzY2hlZHVsZWQgdGltZS4gXG5cdFx0ICogIE9yIGdpdmUgaXQgYSB0aW1lIHZhbHVlIHdoaWNoIGl0IHdpbGwgcmFuZG9taXplIGJ5LlxuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAbmFtZSBodW1hbml6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdodW1hbml6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50Lmh1bWFuaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFyaWF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmh1bWFuaXplID0gdmFyaWF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcm9iYWJseSBvZiB0aGUgY2FsbGJhY2sgYmVpbmcgaW52b2tlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9iYWJpbGl0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdwcm9iYWJpbGl0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50LnByb2JhYmlsaXR5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvYikge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5wcm9iYWJpbGl0eSA9IHByb2I7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgTXV0aW5nIHRoZSBMb29wIG1lYW5zIHRoYXQgbm8gY2FsbGJhY2tzIGFyZSBpbnZva2VkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgbXV0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBsb29wLiBUaGUgZGVmYXVsdFxuXHRcdCAqICB2YWx1ZSBpcyBJbmZpbml0eSAobG9vcCBmb3JldmVyKS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBpdGVyYXRpb25zXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ2l0ZXJhdGlvbnMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9ldmVudC5sb29wID09PSB0cnVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQubG9vcDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaXRlcnMpIHtcblx0ICAgICAgICAgICAgaWYgKGl0ZXJzID09PSBJbmZpbml0eSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnQubG9vcCA9IHRydWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudC5sb29wID0gaXRlcnM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ldmVudCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTG9vcDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGFydCBpcyBhIGNvbGxlY3Rpb24gVG9uZS5FdmVudHMgd2hpY2ggY2FuIGJlXG5cdFx0ICogICAgICAgICBzdGFydGVkL3N0b3BwZWQgYW5kIGxvb3BlZCBhcyBhIHNpbmdsZSB1bml0LlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkV2ZW50fVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIG9uIGVhY2ggZXZlbnRcblx0XHQgKiAgQHBhcmFtIHtBcnJheX0gZXZlbnRzIHRoZSBhcnJheSBvZiBldmVudHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGFydCA9IG5ldyBUb25lLlBhcnQoZnVuY3Rpb24odGltZSwgbm90ZSl7XG5cdFx0ICogXHQvL3RoZSBub3RlcyBnaXZlbiBhcyB0aGUgc2Vjb25kIGVsZW1lbnQgaW4gdGhlIGFycmF5XG5cdFx0ICogXHQvL3dpbGwgYmUgcGFzc2VkIGluIGFzIHRoZSBzZWNvbmQgYXJndW1lbnRcblx0XHQgKiBcdHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKG5vdGUsIFwiOG5cIiwgdGltZSk7XG5cdFx0ICogfSwgW1swLCBcIkMyXCJdLCBbXCIwOjJcIiwgXCJDM1wiXSwgW1wiMDozOjJcIiwgXCJHMlwiXV0pO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdXNlIGFuIGFycmF5IG9mIG9iamVjdHMgYXMgbG9uZyBhcyB0aGUgb2JqZWN0IGhhcyBhIFwidGltZVwiIGF0dHJpYnV0ZVxuXHRcdCAqIHZhciBwYXJ0ID0gbmV3IFRvbmUuUGFydChmdW5jdGlvbih0aW1lLCB2YWx1ZSl7XG5cdFx0ICogXHQvL3RoZSB2YWx1ZSBpcyBhbiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYm90aCB0aGUgbm90ZSBhbmQgdGhlIHZlbG9jaXR5XG5cdFx0ICogXHRzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSh2YWx1ZS5ub3RlLCBcIjhuXCIsIHRpbWUsIHZhbHVlLnZlbG9jaXR5KTtcblx0XHQgKiB9LCBbe1widGltZVwiIDogMCwgXCJub3RlXCIgOiBcIkMzXCIsIFwidmVsb2NpdHlcIjogMC45fSxcblx0XHQgKiBcdCAgIHtcInRpbWVcIiA6IFwiMDoyXCIsIFwibm90ZVwiIDogXCJDNFwiLCBcInZlbG9jaXR5XCI6IDAuNX1cblx0XHQgKiBdKS5zdGFydCgwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdldmVudHMnXG5cdCAgICAgICAgXSwgVG9uZS5QYXJ0KTtcblx0ICAgICAgICBUb25lLkV2ZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW4gYXJyYXkgb2YgT2JqZWN0cy5cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBbXTtcblx0ICAgICAgICAvL2FkZCB0aGUgZXZlbnRzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmV2ZW50c1tpXSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYWRkKG9wdGlvbnMuZXZlbnRzW2ldWzBdLCBvcHRpb25zLmV2ZW50c1tpXVsxXSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmFkZChvcHRpb25zLmV2ZW50c1tpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYXJ0LCBUb25lLkV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdjYWxsYmFjayc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wRW5kJzogJzFtJyxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAncHJvYmFiaWxpdHknOiAxLFxuXHQgICAgICAgICdodW1hbml6ZSc6IGZhbHNlLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2UsXG5cdCAgICAgICAgJ2V2ZW50cyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBwYXJ0IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSAgdGltZSAgICBXaGVuIHRvIHN0YXJ0IHRoZSBwYXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIG9mZnNldCAgVGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFydFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmVnaW4gcGxheWluZyBhdC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aWNrcykgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgdGhpcy5fbG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9UaWNrcyhvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5hZGQoe1xuXHQgICAgICAgICAgICAgICAgJ3N0YXRlJzogVG9uZS5TdGF0ZS5TdGFydGVkLFxuXHQgICAgICAgICAgICAgICAgJ3RpbWUnOiB0aWNrcyxcblx0ICAgICAgICAgICAgICAgICdvZmZzZXQnOiBvZmZzZXRcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdGFydE5vdGUoZXZlbnQsIHRpY2tzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBldmVudCBpbiB0aGUgZ2l2ZW4gZXZlbnQgYXQgdGhlIGNvcnJlY3QgdGltZSBnaXZlblxuXHRcdCAqICB0aGUgdGlja3MgYW5kIG9mZnNldCBhbmQgbG9vcGluZy5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudH0gIGV2ZW50XG5cdFx0ICogIEBwYXJhbSAge1RpY2tzfSAgdGlja3Ncblx0XHQgKiAgQHBhcmFtICB7VGlja3N9ICBvZmZzZXRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3N0YXJ0Tm90ZSA9IGZ1bmN0aW9uIChldmVudCwgdGlja3MsIG9mZnNldCkge1xuXHQgICAgICAgIHRpY2tzIC09IG9mZnNldDtcblx0ICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPj0gdGhpcy5fbG9vcFN0YXJ0ICYmIGV2ZW50LnN0YXJ0T2Zmc2V0IDwgdGhpcy5fbG9vcEVuZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0IDwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9zdGFydCBpdCBvbiB0aGUgbmV4dCBsb29wXG5cdCAgICAgICAgICAgICAgICAgICAgdGlja3MgKz0gdGhpcy5fZ2V0TG9vcER1cmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBldmVudC5zdGFydChUb25lLlRpY2tzKHRpY2tzKSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPCB0aGlzLl9sb29wU3RhcnQgJiYgZXZlbnQuc3RhcnRPZmZzZXQgPj0gb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5sb29wID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICBldmVudC5zdGFydChUb25lLlRpY2tzKHRpY2tzKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0ID49IG9mZnNldCkge1xuXHQgICAgICAgICAgICBldmVudC5zdGFydChUb25lLlRpY2tzKHRpY2tzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3RhcnQgZnJvbSB0aGUgc2NoZWR1bGVkIHN0YXJ0IHRpbWVcblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAbmFtZSBzdGFydE9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdzdGFydE9mZnNldCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0T2Zmc2V0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0T2Zmc2V0ID0gb2Zmc2V0O1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuc3RhcnRPZmZzZXQgKz0gdGhpcy5fc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIHBhcnQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICB0aW1lICBXaGVuIHRvIHN0b3AgdGhlIHBhcnQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB0aWNrcyA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGlja3MpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGlja3MpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LnN0b3AodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldC9TZXQgYW4gRXZlbnQncyB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgSWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW4gYW5kIG5vIGV2ZW50IGV4aXN0cyBhdFxuXHRcdCAqICB0aGUgZ2l2ZW4gdGltZSwgb25lIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoYXQgdmFsdWUuXG5cdFx0ICogIElmIHR3byBldmVudHMgYXJlIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBmaXJzdCBvbmUgd2lsbFxuXHRcdCAqICBiZSByZXR1cm5lZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwYXJ0LmF0KFwiMW1cIik7IC8vcmV0dXJucyB0aGUgcGFydCBhdCB0aGUgZmlyc3QgbWVhc3VyZVxuXHRcdCAqXG5cdFx0ICogcGFydC5hdChcIjJtXCIsIFwiQzJcIik7IC8vc2V0IHRoZSB2YWx1ZSBhdCBcIjJtXCIgdG8gQzIuXG5cdFx0ICogLy9pZiBhbiBldmVudCBkaWRuJ3QgZXhpc3QgYXQgdGhhdCB0aW1lLCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnQgdG8gZ2V0IG9yIHNldC5cblx0XHQgKiAgQHBhcmFtIHsqPX0gdmFsdWUgSWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW4sIHRoZSB2YWx1ZSBvZiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgZXZlbnQgYXQgdGhlIGdpdmVuIHRpbWUgd2lsbCBiZSBzZXQgdG8gaXQuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRXZlbnR9IHRoZSBldmVudCBhdCB0aGUgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgdmFyIHRpY2tUaW1lID0gVG9uZS5UaWNrcygxKS50b1NlY29uZHMoKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHNbaV07XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aW1lLnRvVGlja3MoKSAtIGV2ZW50LnN0YXJ0T2Zmc2V0KSA8IHRpY2tUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodmFsdWUpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQudmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2lmIHRoZXJlIHdhcyBubyBldmVudCBhdCB0aGF0IHRpbWUsIGNyZWF0ZSBvbmVcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuYWRkKHRpbWUsIHZhbHVlKTtcblx0ICAgICAgICAgICAgLy9yZXR1cm4gdGhlIG5ldyBldmVudFxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzW3RoaXMuX2V2ZW50cy5sZW5ndGggLSAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIGFuIGV2ZW50IHRvIHRoZSBwYXJ0LlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgdGhlIG5vdGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW4sIGl0IHNob3VsZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgYSAndGltZScgYXR0cmlidXRlIGFuZCB0aGUgcmVzdFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBvYmplY3Qgd2lsbCBiZSB1c2VkIGFzIHRoZSAndmFsdWUnLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fCp9ICB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJ0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcGFydC5hZGQoXCIxbVwiLCBcIkMjKzExXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGltZSwgdmFsdWUpIHtcblx0ICAgICAgICAvL2V4dHJhY3QgdGhlIHBhcmFtZXRlcnNcblx0ICAgICAgICBpZiAodGltZS5oYXNPd25Qcm9wZXJ0eSgndGltZScpKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGltZTtcblx0ICAgICAgICAgICAgdGltZSA9IHZhbHVlLnRpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgdmFyIGV2ZW50O1xuXHQgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRvbmUuRXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgZXZlbnQuY2FsbGJhY2sgPSB0aGlzLl90aWNrLmJpbmQodGhpcyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSBuZXcgVG9uZS5FdmVudCh7XG5cdCAgICAgICAgICAgICAgICAnY2FsbGJhY2snOiB0aGlzLl90aWNrLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy90aGUgc3RhcnQgb2Zmc2V0XG5cdCAgICAgICAgZXZlbnQuc3RhcnRPZmZzZXQgPSB0aW1lO1xuXHQgICAgICAgIC8vaW5pdGlhbGl6ZSB0aGUgdmFsdWVzXG5cdCAgICAgICAgZXZlbnQuc2V0KHtcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiB0aGlzLmxvb3BFbmQsXG5cdCAgICAgICAgICAgICdsb29wU3RhcnQnOiB0aGlzLmxvb3BTdGFydCxcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0aGlzLmxvb3AsXG5cdCAgICAgICAgICAgICdodW1hbml6ZSc6IHRoaXMuaHVtYW5pemUsXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiB0aGlzLnBsYXliYWNrUmF0ZSxcblx0ICAgICAgICAgICAgJ3Byb2JhYmlsaXR5JzogdGhpcy5wcm9iYWJpbGl0eVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5wdXNoKGV2ZW50KTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBub3RlIGlmIGl0IHNob3VsZCBiZSBwbGF5ZWQgcmlnaHQgbm93XG5cdCAgICAgICAgdGhpcy5fcmVzdGFydEV2ZW50KGV2ZW50KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVzdGFydCB0aGUgZ2l2ZW4gZXZlbnRcblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudH0gIGV2ZW50XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9yZXN0YXJ0RXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZUV2ZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChzdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0Tm90ZShldmVudCwgc3RhdGVFdmVudC50aW1lLCBzdGF0ZUV2ZW50Lm9mZnNldCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvL3N0b3AgdGhlIG5vdGVcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0b3AoVG9uZS5UaWNrcyhzdGF0ZUV2ZW50LnRpbWUpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSBwYXJ0LiBXaWxsIHJlY3Vyc2l2ZWx5IGl0ZXJhdGVcblx0XHQgKiAgaW50byBuZXN0ZWQgcGFydHMgdG8gZmluZCB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiAgQHBhcmFtIHsqfSB2YWx1ZSBPcHRpb25hbGx5IHNlbGVjdCBvbmx5IGEgc3BlY2lmaWMgZXZlbnQgdmFsdWVcblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgLy9leHRyYWN0IHRoZSBwYXJhbWV0ZXJzXG5cdCAgICAgICAgaWYgKHRpbWUuaGFzT3duUHJvcGVydHkoJ3RpbWUnKSkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRpbWU7XG5cdCAgICAgICAgICAgIHRpbWUgPSB2YWx1ZS50aW1lO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9ldmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBUb25lLlBhcnQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnJlbW92ZSh0aW1lLCB2YWx1ZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYodmFsdWUpIHx8IFRvbmUuaXNEZWZpbmVkKHZhbHVlKSAmJiBldmVudC52YWx1ZSA9PT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGFsbCBvZiB0aGUgbm90ZXMgZnJvbSB0aGUgZ3JvdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gW107XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBzY2hlZHVsZWQgc3RhdGUgY2hhbmdlIGV2ZW50czogaS5lLiBcInN0YXJ0XCIgYW5kIFwic3RvcFwiLlxuXHRcdCAqICBAcGFyYW0ge1RpbWVsaW5lUG9zaXRpb259IGFmdGVyIFRoZSB0aW1lIGFmdGVyIHdoaWNoIHRvIGNhbmNlbCB0aGUgc2NoZWR1bGVkIGV2ZW50cy5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuY2FuY2VsKGFmdGVyKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGhpcy50b1RpY2tzKGFmdGVyKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIGV2ZW50c1xuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gY3R4IFRoZSBjb250ZXh0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjdHgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzKSB7XG5cdCAgICAgICAgICAgIGN0eCA9IFRvbmUuZGVmYXVsdEFyZyhjdHgsIHRoaXMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fZXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMuX2V2ZW50c1tpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgVG9uZS5QYXJ0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZS5fZm9yRWFjaChjYWxsYmFjaywgY3R4KTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjdHgsIGUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGF0dHJpYnV0ZSBvZiBhbGwgb2YgdGhlIGV2ZW50c1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBhdHRyICB0aGUgYXR0cmlidXRlIHRvIHNldFxuXHRcdCAqICBAcGFyYW0gIHsqfSAgdmFsdWUgICAgICBUaGUgdmFsdWUgdG8gc2V0IGl0IHRvXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9zZXRBbGwgPSBmdW5jdGlvbiAoYXR0ciwgdmFsdWUpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudFthdHRyXSA9IHZhbHVlO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCB0aWNrIG1ldGhvZFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSBvZiB0aGUgZXZlbnQgaW4gc2Vjb25kc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIGlmICghdGhpcy5tdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgdmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRGV0ZXJtaW5lIGlmIHRoZSBldmVudCBzaG91bGQgYmUgY3VycmVudGx5IGxvb3Bpbmdcblx0XHQgKiAgZ2l2ZW4gdGhlIGxvb3AgYm91bmRyaWVzIG9mIHRoaXMgUGFydC5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gdGVzdFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fdGVzdExvb3BCb3VuZHJpZXMgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPCB0aGlzLl9sb29wU3RhcnQgfHwgZXZlbnQuc3RhcnRPZmZzZXQgPj0gdGhpcy5fbG9vcEVuZCkge1xuXHQgICAgICAgICAgICBldmVudC5jYW5jZWwoMCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIC8vcmVzY2hlZHVsZSBpdCBpZiBpdCdzIHN0b3BwZWRcblx0ICAgICAgICAgICAgdGhpcy5fcmVzdGFydEV2ZW50KGV2ZW50KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgbm90ZXMgYmVpbmcgdHJpZ2dlcmVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2JhYmlsaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ3Byb2JhYmlsaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvYmFiaWxpdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9iKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2JhYmlsaXR5ID0gcHJvYjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QWxsKCdwcm9iYWJpbGl0eScsIHByb2IpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHNldCB0byB0cnVlLCB3aWxsIGFwcGx5IHNtYWxsIHJhbmRvbSB2YXJpYXRpb25cblx0XHQgKiAgdG8gdGhlIGNhbGxiYWNrIHRpbWUuIElmIHRoZSB2YWx1ZSBpcyBnaXZlbiBhcyBhIHRpbWUsIGl0IHdpbGwgcmFuZG9taXplXG5cdFx0ICogIGJ5IHRoYXQgYW1vdW50LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGV2ZW50Lmh1bWFuaXplID0gdHJ1ZTtcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58VGltZX1cblx0XHQgKiAgQG5hbWUgaHVtYW5pemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnaHVtYW5pemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9odW1hbml6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhcmlhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9odW1hbml6ZSA9IHZhcmlhdGlvbjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QWxsKCdodW1hbml6ZScsIHZhcmlhdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIHBhcnQgc2hvdWxkIGxvb3Agb3Igbm90XG5cdFx0ICogIGJldHdlZW4gVG9uZS5QYXJ0Lmxvb3BTdGFydCBhbmRcblx0XHQgKiAgVG9uZS5QYXJ0Lmxvb3BFbmQuIEFuIGludGVnZXJcblx0XHQgKiAgdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhlIG51bWJlciBvZlxuXHRcdCAqICBsb29wcyB0aGUgUGFydCBkb2VzIGFmdGVyIGl0IHN0YXJ0cy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGxvb3Bcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xvb3AgdGhlIHBhcnQgOCB0aW1lc1xuXHRcdCAqIHBhcnQubG9vcCA9IDg7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Ll9sb29wU3RhcnQgPSB0aGlzLl9sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgICAgICBldmVudC5fbG9vcEVuZCA9IHRoaXMuX2xvb3BFbmQ7XG5cdCAgICAgICAgICAgICAgICBldmVudC5sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Rlc3RMb29wQm91bmRyaWVzKGV2ZW50KTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGxvb3BFbmQgcG9pbnQgZGV0ZXJtaW5lcyB3aGVuIGl0IHdpbGxcblx0XHQgKiAgbG9vcCBpZiBUb25lLlBhcnQubG9vcCBpcyB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wRW5kKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhsb29wRW5kKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQubG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGVzdExvb3BCb3VuZHJpZXMoZXZlbnQpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbG9vcFN0YXJ0IHBvaW50IGRldGVybWluZXMgd2hlbiBpdCB3aWxsXG5cdFx0ICogIGxvb3AgaWYgVG9uZS5QYXJ0Lmxvb3AgaXMgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BTdGFydCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wU3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKGxvb3BTdGFydCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3BTdGFydCA9IHRoaXMubG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rlc3RMb29wQm91bmRyaWVzKGV2ZW50KTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBwYXJ0XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QWxsKCdwbGF5YmFja1JhdGUnLCByYXRlKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0VGhlIG51bWJlciBvZiBzY2hlZHVsZWQgbm90ZXMgaW4gdGhlIHBhcnQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgbGVuZ3RoXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudHMubGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5yZW1vdmVBbGwoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFydDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBhdHRlcm4gYXJwZWdnaWF0ZXMgYmV0d2VlbiB0aGUgZ2l2ZW4gbm90ZXNcblx0XHQgKiAgICAgICAgIGluIGEgbnVtYmVyIG9mIHBhdHRlcm5zLiBTZWUgVG9uZS5DdHJsUGF0dGVybiBmb3Jcblx0XHQgKiAgICAgICAgIGEgZnVsbCBsaXN0IG9mIHBhdHRlcm5zLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwYXR0ZXJuID0gbmV3IFRvbmUuUGF0dGVybihmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiAgIC8vdGhlIG9yZGVyIG9mIHRoZSBub3RlcyBwYXNzZWQgaW4gZGVwZW5kcyBvbiB0aGUgcGF0dGVyblxuXHRcdCAqIH0sIFtcIkMyXCIsIFwiRDRcIiwgXCJFNVwiLCBcIkE2XCJdLCBcInVwRG93blwiKTtcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTG9vcH1cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5cblx0XHQgKiAgQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXJwZWdnaWF0ZSBvdmVyLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXR0ZXJuID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ3ZhbHVlcycsXG5cdCAgICAgICAgICAgICdwYXR0ZXJuJ1xuXHQgICAgICAgIF0sIFRvbmUuUGF0dGVybik7XG5cdCAgICAgICAgVG9uZS5Mb29wLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhdHRlcm4gbWFuYWdlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkN0cmxQYXR0ZXJufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXR0ZXJuID0gbmV3IFRvbmUuQ3RybFBhdHRlcm4oe1xuXHQgICAgICAgICAgICAndmFsdWVzJzogb3B0aW9ucy52YWx1ZXMsXG5cdCAgICAgICAgICAgICd0eXBlJzogb3B0aW9ucy5wYXR0ZXJuLFxuXHQgICAgICAgICAgICAnaW5kZXgnOiBvcHRpb25zLmluZGV4XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYXR0ZXJuLCBUb25lLkxvb3ApO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BhdHRlcm4nOiBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXAsXG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICd2YWx1ZXMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgbm90ZXMgc2hvdWxkIGJlIGNhbGxlZFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0aGUgZXZlbnQgb2NjdXJzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4ucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHRoaXMuX3BhdHRlcm4udmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4ubmV4dCgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCBpbmRleCBpbiB0aGUgdmFsdWVzIGFycmF5LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGluZGV4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXR0ZXJuLnByb3RvdHlwZSwgJ2luZGV4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi5pbmRleDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGkpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGF0dGVybi5pbmRleCA9IGk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFycmF5IG9mIGV2ZW50cy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqICBAbmFtZSB2YWx1ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAndmFsdWVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi52YWx1ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhdHRlcm4udmFsdWVzID0gdmFscztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcGF0dGVybi5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHRlcm4udmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBhdHRlcm4gdHlwZS4gU2VlIFRvbmUuQ3RybFBhdHRlcm4gZm9yIHRoZSBmdWxsIGxpc3Qgb2YgcGF0dGVybnMuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIHBhdHRlcm5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAncGF0dGVybicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHRlcm4udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBhdHRlcm4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGF0dGVybi50eXBlID0gcGF0dGVybjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXR0ZXJufSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXR0ZXJuLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4gPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhdHRlcm47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIHNlcXVlbmNlIGlzIGFuIGFsdGVybmF0ZSBub3RhdGlvbiBvZiBhIHBhcnQuIEluc3RlYWRcblx0XHQgKiAgICAgICAgIG9mIHBhc3NpbmcgaW4gYW4gYXJyYXkgb2YgW3RpbWUsIGV2ZW50XSBwYWlycywgcGFzc1xuXHRcdCAqICAgICAgICAgaW4gYW4gYXJyYXkgb2YgZXZlbnRzIHdoaWNoIHdpbGwgYmUgc3BhY2VkIGF0IHRoZVxuXHRcdCAqICAgICAgICAgZ2l2ZW4gc3ViZGl2aXNpb24uIFN1Yi1hcnJheXMgd2lsbCBzdWJkaXZpZGUgdGhhdCBiZWF0XG5cdFx0ICogICAgICAgICBieSB0aGUgbnVtYmVyIG9mIGl0ZW1zIGFyZSBpbiB0aGUgYXJyYXkuXG5cdFx0ICogICAgICAgICBTZXF1ZW5jZSBub3RhdGlvbiBpbnNwaXJhdGlvbiBmcm9tIFtUaWRhbF0oaHR0cDovL3lheHUub3JnL3RpZGFsLylcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IG5vdGVcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICAgIGV2ZW50cyAgVGhlIHNlcXVlbmNlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHN1YmRpdmlzaW9uICBUaGUgc3ViZGl2aXNpb24gYmV0d2VlbiB3aGljaCBldmVudHMgYXJlIHBsYWNlZC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuUGFydH1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2VxID0gbmV3IFRvbmUuU2VxdWVuY2UoZnVuY3Rpb24odGltZSwgbm90ZSl7XG5cdFx0ICogXHRjb25zb2xlLmxvZyhub3RlKTtcblx0XHQgKiAvL3N0cmFpZ2h0IHF1YXRlciBub3Rlc1xuXHRcdCAqIH0sIFtcIkM0XCIsIFwiRTRcIiwgXCJHNFwiLCBcIkE0XCJdLCBcIjRuXCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzZXEgPSBuZXcgVG9uZS5TZXF1ZW5jZShmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKG5vdGUpO1xuXHRcdCAqIC8vc3ViZGl2aXNpb25zIGFyZSBnaXZlbiBhcyBzdWJhcnJheXNcblx0XHQgKiB9LCBbXCJDNFwiLCBbXCJFNFwiLCBcIkQ0XCIsIFwiRTRcIl0sIFwiRzRcIiwgW1wiQTRcIiwgXCJHNFwiXV0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdldmVudHMnLFxuXHQgICAgICAgICAgICAnc3ViZGl2aXNpb24nXG5cdCAgICAgICAgXSwgVG9uZS5TZXF1ZW5jZSk7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIGV2ZW50c1xuXHQgICAgICAgIHZhciBldmVudHMgPSBvcHRpb25zLmV2ZW50cztcblx0ICAgICAgICBkZWxldGUgb3B0aW9ucy5ldmVudHM7XG5cdCAgICAgICAgVG9uZS5QYXJ0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHN1YmRpdmlzb24gb2YgZWFjaCBub3RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUaWNrc31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ViZGl2aXNpb24gPSB0aGlzLnRvVGlja3Mob3B0aW9ucy5zdWJkaXZpc2lvbik7XG5cdCAgICAgICAgLy9pZiBubyB0aW1lIHdhcyBwYXNzZWQgaW4sIHRoZSBsb29wIGVuZCBpcyB0aGUgZW5kIG9mIHRoZSBjeWNsZVxuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYob3B0aW9ucy5sb29wRW5kKSAmJiBUb25lLmlzRGVmaW5lZChldmVudHMpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSBldmVudHMubGVuZ3RoICogdGhpcy5fc3ViZGl2aXNpb247XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vZGVmYXVsdHMgdG8gbG9vcGluZ1xuXHQgICAgICAgIHRoaXMuX2xvb3AgPSB0cnVlO1xuXHQgICAgICAgIC8vYWRkIGFsbCBvZiB0aGUgZXZlbnRzXG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGV2ZW50cykpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYWRkKGksIGV2ZW50c1tpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TZXF1ZW5jZSwgVG9uZS5QYXJ0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5kZWZhdWx0cyA9IHsgJ3N1YmRpdmlzaW9uJzogJzRuJyB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdWJkaXZpc2lvbiBvZiB0aGUgc2VxdWVuY2UuIFRoaXMgY2FuIG9ubHkgYmVcblx0XHQgKiAgc2V0IGluIHRoZSBjb25zdHJ1Y3Rvci4gVGhlIHN1YmRpdmlzaW9uIGlzIHRoZVxuXHRcdCAqICBpbnRlcnZhbCBiZXR3ZWVuIHN1Y2Nlc3NpdmUgc3RlcHMuXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5TZXF1ZW5jZSNcblx0XHQgKiAgQG5hbWUgc3ViZGl2aXNpb25cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUsICdzdWJkaXZpc2lvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fc3ViZGl2aXNpb24pLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEdldC9TZXQgYW4gaW5kZXggb2YgdGhlIHNlcXVlbmNlLiBJZiB0aGUgaW5kZXggY29udGFpbnMgYSBzdWJhcnJheSxcblx0XHQgKiAgYSBUb25lLlNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGF0IHN1Yi1hcnJheSB3aWxsIGJlIHJldHVybmVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzZXF1ZW5jZSA9IG5ldyBUb25lLlNlcXVlbmNlKHBsYXlOb3RlLCBbXCJFNFwiLCBcIkM0XCIsIFwiRiM0XCIsIFtcIkE0XCIsIFwiQmIzXCJdXSlcblx0XHQgKiBzZXF1ZW5jZS5hdCgwKS8vID0+IHJldHVybnMgXCJFNFwiXG5cdFx0ICogLy9zZXQgYSB2YWx1ZVxuXHRcdCAqIHNlcXVlbmNlLmF0KDAsIFwiRzNcIik7XG5cdFx0ICogLy9nZXQgYSBuZXN0ZWQgc2VxdWVuY2Vcblx0XHQgKiBzZXF1ZW5jZS5hdCgzKS5hdCgxKS8vID0+IHJldHVybnMgXCJCYjNcIlxuXHRcdCAqIEBwYXJhbSB7UG9zaXRpdmV9IGluZGV4IFRoZSBpbmRleCB0byBnZXQgb3Igc2V0XG5cdFx0ICogQHBhcmFtIHsqfSB2YWx1ZSBPcHRpb25hbGx5IHBhc3MgaW4gdGhlIHZhbHVlIHRvIHNldCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcblx0ICAgICAgICAvL2lmIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSxcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHZhbHVlKSkge1xuXHQgICAgICAgICAgICAvL3JlbW92ZSB0aGUgY3VycmVudCBldmVudCBhdCB0aGF0IGluZGV4XG5cdCAgICAgICAgICAgIHRoaXMucmVtb3ZlKGluZGV4KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jYWxsIHRoZSBwYXJlbnQncyBtZXRob2Rcblx0ICAgICAgICByZXR1cm4gVG9uZS5QYXJ0LnByb3RvdHlwZS5hdC5jYWxsKHRoaXMsIHRoaXMuX2luZGV4VGltZShpbmRleCksIHZhbHVlKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGFuIGV2ZW50IGF0IGFuIGluZGV4LCBpZiB0aGVyZSdzIGFscmVhZHkgc29tZXRoaW5nXG5cdFx0ICogIGF0IHRoYXQgaW5kZXgsIG92ZXJ3cml0ZSBpdC4gSWYgYHZhbHVlYCBpcyBhbiBhcnJheSxcblx0XHQgKiAgaXQgd2lsbCBiZSBwYXJzZWQgYXMgYSBzdWJzZXF1ZW5jZS5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGluZGV4IFRoZSBpbmRleCB0byBhZGQgdGhlIGV2ZW50IHRvXG5cdFx0ICogIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFkZCBhdCB0aGF0IGluZGV4XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNlcXVlbmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG5cdCAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHZhbHVlKSkge1xuXHQgICAgICAgICAgICAvL21ha2UgYSBzdWJzZXF1ZW5jZSBhbmQgYWRkIHRoYXQgdG8gdGhlIHNlcXVlbmNlXG5cdCAgICAgICAgICAgIHZhciBzdWJTdWJkaXZpc2lvbiA9IE1hdGgucm91bmQodGhpcy5fc3ViZGl2aXNpb24gLyB2YWx1ZS5sZW5ndGgpO1xuXHQgICAgICAgICAgICB2YWx1ZSA9IG5ldyBUb25lLlNlcXVlbmNlKHRoaXMuX3RpY2suYmluZCh0aGlzKSwgdmFsdWUsIFRvbmUuVGlja3Moc3ViU3ViZGl2aXNpb24pKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5hZGQuY2FsbCh0aGlzLCB0aGlzLl9pbmRleFRpbWUoaW5kZXgpLCB2YWx1ZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhIHZhbHVlIGZyb20gdGhlIHNlcXVlbmNlIGJ5IGluZGV4XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGV2ZW50IHRvIHJlbW92ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TZXF1ZW5jZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuUGFydC5wcm90b3R5cGUucmVtb3ZlLmNhbGwodGhpcywgdGhpcy5faW5kZXhUaW1lKGluZGV4KSwgdmFsdWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHRpbWUgb2YgdGhlIGluZGV4IGdpdmVuIHRoZSBTZXF1ZW5jZSdzIHN1YmRpdmlzaW9uXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGluZGV4XG5cdFx0ICogIEByZXR1cm4gIHtUaW1lfSAgVGhlIHRpbWUgb2YgdGhhdCBpbmRleFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUuX2luZGV4VGltZSA9IGZ1bmN0aW9uIChpbmRleCkge1xuXHQgICAgICAgIGlmIChpbmRleCBpbnN0YW5jZW9mIFRvbmUuVHJhbnNwb3J0VGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gaW5kZXg7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3MoaW5kZXggKiB0aGlzLl9zdWJkaXZpc2lvbiArIHRoaXMuc3RhcnRPZmZzZXQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuU2VxdWVuY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2VxdWVuY2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlB1bHNlT3NjaWxsYXRvciBpcyBhIHB1bHNlIG9zY2lsbGF0b3Igd2l0aCBjb250cm9sIG92ZXIgcHVsc2Ugd2lkdGgsXG5cdFx0ICogICAgICAgICBhbHNvIGtub3duIGFzIHRoZSBkdXR5IGN5Y2xlLiBBdCA1MCUgZHV0eSBjeWNsZSAod2lkdGggPSAwLjUpIHRoZSB3YXZlIGlzXG5cdFx0ICogICAgICAgICBhIHNxdWFyZSBhbmQgb25seSBvZGQtbnVtYmVyZWQgaGFybW9uaWNzIGFyZSBwcmVzZW50LiBBdCBhbGwgb3RoZXIgd2lkdGhzXG5cdFx0ICogICAgICAgICBldmVuLW51bWJlcmVkIGhhcm1vbmljcyBhcmUgcHJlc2VudC4gUmVhZCBtb3JlXG5cdFx0ICogICAgICAgICBbaGVyZV0oaHR0cHM6Ly93aWdnbGV3YXZlLndvcmRwcmVzcy5jb20vMjAxNC8wOC8xNi9wdWxzZS13YXZlZm9ybXMtYW5kLWhhcm1vbmljcy8pLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZnJlcXVlbmN5XSBUaGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt3aWR0aF0gVGhlIHdpZHRoIG9mIHRoZSBwdWxzZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwdWxzZSA9IG5ldyBUb25lLlB1bHNlT3NjaWxsYXRvcihcIkU1XCIsIDAuNCkudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3dpZHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgd2lkdGggb2YgdGhlIHB1bHNlLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndpZHRoID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMud2lkdGgsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZ2F0ZSB0aGUgd2lkdGggYW1vdW50XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzYXd0b290aCBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGggPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgZnJlcXVlbmN5OiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgZGV0dW5lOiBvcHRpb25zLmRldHVuZSxcblx0ICAgICAgICAgICAgdHlwZTogJ3Nhd3Rvb3RoJyxcblx0ICAgICAgICAgICAgcGhhc2U6IG9wdGlvbnMucGhhc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX3Nhd3Rvb3RoLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMuX3Nhd3Rvb3RoLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaHJlc2hvbGQgdGhlIHNpZ25hbCB0byB0dXJuIGl0IGludG8gYSBzcXVhcmVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKHZhbCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAtMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLmNoYWluKHRoaXMuX3RocmVzaCwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMud2lkdGguY2hhaW4odGhpcy5fd2lkdGhHYXRlLCB0aGlzLl90aHJlc2gpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3dpZHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QdWxzZU9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzLlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICd3aWR0aCc6IDAuMlxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgdGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguc3RvcCh0aW1lKTtcblx0ICAgICAgICAvL3RoZSB3aWR0aCBpcyBzdGlsbCBjb25uZWN0ZWQgdG8gdGhlIG91dHB1dC5cblx0ICAgICAgICAvL3RoYXQgbmVlZHMgdG8gYmUgc3RvcHBlZCBhbHNvXG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHJlc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlB1bHNlT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2F3dG9vdGgucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zYXd0b290aC5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuIEFsd2F5cyByZXR1cm5zIFwicHVsc2VcIi5cblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QdWxzZU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICdwdWxzZSc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBDYW5ub3Qgc2V0IHBhcnRpYWxzIGZvciB0aGlzIHdhdmVmb3JtIHR5cGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QdWxzZU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwIG1ldGhvZC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QdWxzZU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICd3aWR0aCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMud2lkdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dpZHRoR2F0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aHJlc2guZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QdWxzZU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBXTU9zY2lsbGF0b3IgbW9kdWxhdGVzIHRoZSB3aWR0aCBvZiBhIFRvbmUuUHVsc2VPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICBhdCB0aGUgbW9kdWxhdGlvbkZyZXF1ZW5jeS4gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBjb250aW51b3VzbHlcblx0XHQgKiAgICAgICAgIGNoYW5naW5nIHRoZSB0aW1icmUgb2YgdGhlIG9zY2lsbGF0b3IgYnkgYWx0ZXJpbmcgdGhlIGhhcm1vbmljc1xuXHRcdCAqICAgICAgICAgZ2VuZXJhdGVkLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IG1vZHVsYXRpb25GcmVxdWVuY3kgVGhlIG1vZHVsYXRpb24gZnJlcXVlbmN5IG9mIHRoZSB3aWR0aCBvZiB0aGUgcHVsc2UuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBwd20gPSBuZXcgVG9uZS5QV01Pc2NpbGxhdG9yKFwiQWIzXCIsIDAuMykudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5J1xuXHQgICAgICAgIF0sIFRvbmUuUFdNT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcHVsc2Ugb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlB1bHNlT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcHVsc2UgPSBuZXcgVG9uZS5QdWxzZU9zY2lsbGF0b3Iob3B0aW9ucy5tb2R1bGF0aW9uRnJlcXVlbmN5KTtcblx0ICAgICAgICAvL2NoYW5nZSB0aGUgcHVsc2Ugb3NjaWxsYXRvciB0eXBlXG5cdCAgICAgICAgdGhpcy5fcHVsc2UuX3Nhd3Rvb3RoLnR5cGUgPSAnc2luZSc7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1vZHVsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdkZXR1bmUnOiBvcHRpb25zLmRldHVuZSxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogb3B0aW9ucy5waGFzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNjYWxlIHRoZSBvc2NpbGxhdG9yIHNvIGl0IGRvZXNuJ3QgZ28gc2lsZW50XG5cdFx0XHQgKiAgYXQgdGhlIGV4dHJlbWUgdmFsdWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG5ldyBUb25lLk11bHRpcGx5KDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMuX21vZHVsYXRvci5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpb24gcmF0ZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkZyZXF1ZW5jeSA9IHRoaXMuX3B1bHNlLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNoYWluKHRoaXMuX3NjYWxlLCB0aGlzLl9wdWxzZS53aWR0aCk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2UuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUFdNT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5JzogMC40XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2Uuc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLiBBbHdheXMgcmV0dXJucyBcInB3bVwiLlxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBXTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAncHdtJztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgd2F2ZWZvcm0uIENhbm5vdCBzZXQgcGFydGlhbHMgZm9yIHRoaXMgd2F2ZWZvcm0gdHlwZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBXTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBbXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBXTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsYXRvci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBXTU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QV01Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GTU9zY2lsbGF0b3Jcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBzdGFydGluZyBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGF0aW9uVHlwZSBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHNpbmUgb3NjaWxsYXRvciBmcmVxdWVuY3ktbW9kdWxhdGVkIGJ5IGEgc3F1YXJlIHdhdmVcblx0XHQgKiB2YXIgZm1Pc2MgPSBuZXcgVG9uZS5GTU9zY2lsbGF0b3IoXCJBYjNcIiwgXCJzaW5lXCIsIFwic3F1YXJlXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25UeXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuRk1Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy50eXBlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvcidzIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fY2Fycmllci5kZXR1bmU7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUudmFsdWUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGlvbiBpbmRleCB3aGljaCBpcyBpbiBlc3NlbmNlIHRoZSBkZXB0aCBvciBhbW91bnQgb2YgdGhlIG1vZHVsYXRpb24uIEluIG90aGVyIHRlcm1zIGl0IGlzIHRoZVxuXHRcdFx0ICogIHJhdGlvIG9mIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1vZHVsYXRpbmcgc2lnbmFsIChtZikgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGVcblx0XHRcdCAqICBtb2R1bGF0aW5nIHNpZ25hbCAobWEpIC0tIGFzIGluIG1hL21mLlxuXHRcdFx0ICpcdEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqXHRAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMubW9kdWxhdGlvbkluZGV4KTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGluZyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMubW9kdWxhdGlvblR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgY2FycmllciBhbmQgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9ycy5cblx0XHRcdCAqICBBIGhhcm1vbmljaXR5IG9mIDEgZ2l2ZXMgYm90aCBvc2NpbGxhdG9ycyB0aGUgc2FtZSBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHRoZSBtb2R1bGF0b3IgYW4gb2N0YXZlIGJlbG93IGNhcnJpZXJcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIG1vZHVsYXRpb24gaGFwcGVuc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigwKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5tb2R1bGF0aW9uSW5kZXgsIHRoaXMuX21vZHVsYXRpb25Ob2RlKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY29ubmVjdCh0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fbW9kdWxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GTU9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnOiAyLFxuXHQgICAgICAgICdtb2R1bGF0aW9uVHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25UeXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvblR5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSBjYXJyaWVyIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkZNT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZNT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQU1Pc2NpbGxhdG9yXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuT3NjaWxsYXRvcn1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IG1vZHVsYXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egc2luZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeS1tb2R1bGF0ZWQgYnkgYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIHZhciBmbU9zYyA9IG5ldyBUb25lLkFNT3NjaWxsYXRvcihcIkFiM1wiLCBcInNpbmVcIiwgXCJzcXVhcmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvblR5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5BTU9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKG9wdGlvbnMuZnJlcXVlbmN5LCBvcHRpb25zLnR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fY2Fycmllci5kZXR1bmU7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUudmFsdWUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGluZyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMubW9kdWxhdGlvblR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnZlcnQgdGhlIC0xLDEgb3V0cHV0IHRvIDAsMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkF1ZGlvVG9HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBuZXcgVG9uZS5BdWRpb1RvR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgY2FycmllciBhbmQgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9ycy5cblx0XHRcdCAqICBBIGhhcm1vbmljaXR5IG9mIDEgZ2l2ZXMgYm90aCBvc2NpbGxhdG9ycyB0aGUgc2FtZSBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHRoZSBtb2R1bGF0b3IgYW4gb2N0YXZlIGJlbG93IGNhcnJpZXJcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIG1vZHVsYXRpb24gaGFwcGVuc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigwKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY2hhaW4odGhpcy5fbW9kdWxhdGlvblNjYWxlLCB0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNoYWluKHRoaXMuX21vZHVsYXRpb25Ob2RlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFNT3NjaWxsYXRvciwgVG9uZS5Pc2NpbGxhdG9yKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdtb2R1bGF0aW9uVHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkFNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25UeXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvblR5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSBjYXJyaWVyIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkFNT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFNT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRmF0T3NjaWxsYXRvclxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IG1vZHVsYXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egc2luZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeS1tb2R1bGF0ZWQgYnkgYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIHZhciBmbU9zYyA9IG5ldyBUb25lLkZhdE9zY2lsbGF0b3IoXCJBYjNcIiwgXCJzaW5lXCIsIFwic3F1YXJlXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdzcHJlYWQnXG5cdCAgICAgICAgXSwgVG9uZS5GYXRPc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIG9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0b3RhbCBzcHJlYWQgb2YgdGhlIG9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUgIHtDZW50c31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ByZWFkID0gb3B0aW9ucy5zcHJlYWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSB7RGVncmVlc31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYXJ0aWFscyBhcnJheVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucy5wYXJ0aWFscywgW10pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBjb3VudCBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLmNvdW50ID0gb3B0aW9ucy5jb3VudDtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmF0T3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdzcHJlYWQnOiAyMCxcblx0ICAgICAgICAnY291bnQnOiAzLFxuXHQgICAgICAgICd0eXBlJzogJ3Nhd3Rvb3RoJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBvc2NpbGxhdG9yc1xuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGl0ZXJhdG9yICBUaGUgaXRlcmF0b3IgZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUuX2ZvckVhY2ggPSBmdW5jdGlvbiAoaXRlcmF0b3IpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwodGhpcywgdGhpcy5fb3NjaWxsYXRvcnNbaV0sIGkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGV0dW5lIHNwcmVhZCBiZXR3ZWVuIHRoZSBvc2NpbGxhdG9ycy4gSWYgXCJjb3VudFwiIGlzXG5cdFx0ICogc2V0IHRvIDMgb3NjaWxsYXRvcnMgYW5kIHRoZSBcInNwcmVhZFwiIGlzIHNldCB0byA0MCxcblx0XHQgKiB0aGUgdGhyZWUgb3NjaWxsYXRvcnMgd291bGQgYmUgZGV0dW5lZCBsaWtlIHRoaXM6IFstMjAsIDAsIDIwXVxuXHRcdCAqIGZvciBhIHRvdGFsIGRldHVuZSBzcHJlYWQgb2YgNDAgY2VudHMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7Q2VudHN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3NwcmVhZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NwcmVhZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zcHJlYWQgPSBzcHJlYWQ7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGggPiAxKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSAtc3ByZWFkIC8gMjtcblx0ICAgICAgICAgICAgICAgIHZhciBzdGVwID0gc3ByZWFkIC8gKHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjLCBpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLmRldHVuZS52YWx1ZSA9IHN0YXJ0ICsgc3RlcCAqIGk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBkZXR1bmVkIG9zY2lsbGF0b3JzXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGNvdW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ2NvdW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY291bnQpIHtcblx0ICAgICAgICAgICAgY291bnQgPSBNYXRoLm1heChjb3VudCwgMSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGggIT09IGNvdW50KSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgcGFydGlhbHMgPSB0aGlzLnBhcnRpYWxzO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdCAgICAgICAgICAgICAgICAvL2Rpc3Bvc2UgdGhlIHByZXZpb3VzIG9zY2lsbGF0b3JzXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvc2MuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IFtdO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b20pIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3NjLnBhcnRpYWxzID0gdGhpcy5fcGFydGlhbHM7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3NjLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBvc2MucGhhc2UgPSB0aGlzLl9waGFzZTtcblx0ICAgICAgICAgICAgICAgICAgICBvc2Mudm9sdW1lLnZhbHVlID0gLTYgLSBjb3VudCAqIDEuMTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KG9zYy5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3Qob3NjLmRldHVuZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldID0gb3NjO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgLy9zZXQgdGhlIHNwcmVhZFxuXHQgICAgICAgICAgICAgICAgdGhpcy5zcHJlYWQgPSB0aGlzLl9zcHJlYWQ7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG9zYy5zdGFydCgpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSBjYXJyaWVyIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICBvc2MucGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRmF0T3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GYXRPc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5PbW5pT3NjaWxsYXRvciBhZ2dyZWdhdGVzIFRvbmUuT3NjaWxsYXRvciwgVG9uZS5QdWxzZU9zY2lsbGF0b3IsXG5cdFx0ICogICAgICAgICBUb25lLlBXTU9zY2lsbGF0b3IsIFRvbmUuRk1Pc2NpbGxhdG9yLCBUb25lLkFNT3NjaWxsYXRvciwgYW5kIFRvbmUuRmF0T3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgaW50byBvbmUgY2xhc3MuIFRoZSBvc2NpbGxhdG9yIGNsYXNzIGNhbiBiZSBjaGFuZ2VkIGJ5IHNldHRpbmcgdGhlIGB0eXBlYC5cblx0XHQgKiAgICAgICAgIGBvbW5pT3NjLnR5cGUgPSBcInB3bVwiYCB3aWxsIHNldCBpdCB0byB0aGUgVG9uZS5QV01Pc2NpbGxhdG9yLiBQcmVmaXhpbmdcblx0XHQgKiAgICAgICAgIGFueSBvZiB0aGUgYmFzaWMgdHlwZXMgKFwic2luZVwiLCBcInNxdWFyZTRcIiwgZXRjLikgd2l0aCBcImZtXCIsIFwiYW1cIiwgb3IgXCJmYXRcIlxuXHRcdCAqICAgICAgICAgd2lsbCB1c2UgdGhlIEZNT3NjaWxsYXRvciwgQU1Pc2NpbGxhdG9yIG9yIEZhdE9zY2lsbGF0b3IgcmVzcGVjdGl2ZWx5LlxuXHRcdCAqICAgICAgICAgRm9yIGV4YW1wbGU6IGBvbW5pT3NjLnR5cGUgPSBcImZhdHNhd3Rvb3RoXCJgIHdpbGwgY3JlYXRlIHNldCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgdG8gYSBGYXRPc2NpbGxhdG9yIG9mIHR5cGUgXCJzYXd0b290aFwiLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIGluaXRpYWwgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIG9tbmlPc2MgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihcIkMjNFwiLCBcInB3bVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5PbW5pT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yIHNvdXJjZVxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVR5cGUgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICAvL3NldCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBvcHRpb25zXG5cdCAgICAgICAgdGhpcy5zZXQob3B0aW9ucyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5PbW5pT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ3BoYXNlJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIE9tbmlPc2NUeXBlID0ge1xuXHQgICAgICAgIFB1bHNlOiAnUHVsc2VPc2NpbGxhdG9yJyxcblx0ICAgICAgICBQV006ICdQV01Pc2NpbGxhdG9yJyxcblx0ICAgICAgICBPc2M6ICdPc2NpbGxhdG9yJyxcblx0ICAgICAgICBGTTogJ0ZNT3NjaWxsYXRvcicsXG5cdCAgICAgICAgQU06ICdBTU9zY2lsbGF0b3InLFxuXHQgICAgICAgIEZhdDogJ0ZhdE9zY2lsbGF0b3InXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0byBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdG8gc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLiBDYW4gYmUgYW55IG9mIHRoZSBiYXNpYyB0eXBlczogc2luZSwgc3F1YXJlLCB0cmlhbmdsZSwgc2F3dG9vdGguIE9yXG5cdFx0ICogcHJlZml4IHRoZSBiYXNpYyB0eXBlcyB3aXRoIFwiZm1cIiwgXCJhbVwiLCBvciBcImZhdFwiIHRvIHVzZSB0aGUgRk1Pc2NpbGxhdG9yLCBBTU9zY2lsbGF0b3Igb3IgRmF0T3NjaWxsYXRvclxuXHRcdCAqIHR5cGVzLiBUaGUgb3NjaWxsYXRvciBjb3VsZCBhbHNvIGJlIHNldCB0byBcInB3bVwiIG9yIFwicHVsc2VcIi4gQWxsIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZVxuXHRcdCAqIG9zY2lsbGF0b3IncyBjbGFzcyBhcmUgYWNjZXNzaWJsZSB3aGVuIHRoZSBvc2NpbGxhdG9yIGlzIHNldCB0byB0aGF0IHR5cGUsIGJ1dCB0aHJvd3MgYW4gZXJyb3Jcblx0XHQgKiB3aGVuIGl0J3Mgbm90LlxuXHRcdCAqXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvbW5pT3NjLnR5cGUgPSBcInB3bVwiO1xuXHRcdCAqIC8vbW9kdWxhdGlvbkZyZXF1ZW5jeSBpcyBwYXJhbWV0ZXIgd2hpY2ggaXMgYXZhaWxhYmxlXG5cdFx0ICogLy9vbmx5IHdoZW4gdGhlIHR5cGUgaXMgXCJwd21cIi5cblx0XHQgKiBvbW5pT3NjLm1vZHVsYXRpb25GcmVxdWVuY3kudmFsdWUgPSAwLjU7XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2FuIHNxdWFyZSB3YXZlIGZyZXF1ZW5jeSBtb2R1bGF0ZWQgYnkgYSBzYXd0b290aFxuXHRcdCAqIG9tbmlPc2MudHlwZSA9IFwiZm1zcXVhcmVcIjtcblx0XHQgKiBvbW5pT3NjLm1vZHVsYXRpb25UeXBlID0gXCJzYXd0b290aFwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHByZWZpeCA9ICcnO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0pIHtcblx0ICAgICAgICAgICAgICAgIHByZWZpeCA9ICdmbSc7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuQU0pIHtcblx0ICAgICAgICAgICAgICAgIHByZWZpeCA9ICdhbSc7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICBwcmVmaXggPSAnZmF0Jztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgdGhpcy5fb3NjaWxsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodHlwZS5zdWJzdHIoMCwgMikgPT09ICdmbScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuRk0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZS5zdWJzdHIoMik7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdWJzdHIoMCwgMikgPT09ICdhbScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuQU0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZS5zdWJzdHIoMik7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdWJzdHIoMCwgMykgPT09ICdmYXQnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLkZhdCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlLnN1YnN0cigzKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncHdtJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5QV00pO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwdWxzZScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuUHVsc2UpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5Pc2MpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIFRoaXMgaXMgbm90IGF2YWlsYWJsZSBvbiBcInB3bVwiIGFuZCBcInB1bHNlXCIgb3NjaWxsYXRvciB0eXBlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnBhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCBhIG1lbWJlci9hdHRyaWJ1dGUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gcGFyYW1zXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmFtcFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuT21uaU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChwYXJhbXMsIHZhbHVlKSB7XG5cdCAgICAgICAgLy9tYWtlIHN1cmUgdGhlIHR5cGUgaXMgc2V0IGZpcnN0XG5cdCAgICAgICAgaWYgKHBhcmFtcyA9PT0gJ3R5cGUnKSB7XG5cdCAgICAgICAgICAgIHRoaXMudHlwZSA9IHZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc09iamVjdChwYXJhbXMpICYmIHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgndHlwZScpKSB7XG5cdCAgICAgICAgICAgIHRoaXMudHlwZSA9IHBhcmFtcy50eXBlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3RoZW4gc2V0IHRoZSByZXN0XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuc2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdGhlIG9zY2lsbGF0b3IgdG8gdGhlIGZyZXF1ZW5jeSBhbmQgZGV0dW5lIHNpZ25hbHNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLl9jcmVhdGVOZXdPc2NpbGxhdG9yID0gZnVuY3Rpb24gKG9zY1R5cGUpIHtcblx0ICAgICAgICBpZiAob3NjVHlwZSAhPT0gdGhpcy5fc291cmNlVHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VUeXBlID0gb3NjVHlwZTtcblx0ICAgICAgICAgICAgdmFyIE9zY2lsbGF0b3JDb25zdHJ1Y3RvciA9IFRvbmVbb3NjVHlwZV07XG5cdCAgICAgICAgICAgIC8vc2hvcnQgZGVsYXkgdG8gYXZvaWQgY2xpY2tzIG9uIHRoZSBjaGFuZ2Vcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgb2xkT3NjID0gdGhpcy5fb3NjaWxsYXRvcjtcblx0ICAgICAgICAgICAgICAgIG9sZE9zYy5zdG9wKG5vdyk7XG5cdCAgICAgICAgICAgICAgICAvL2Rpc3Bvc2UgdGhlIG9sZCBvbmVcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbGRPc2MuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgICAgIG9sZE9zYyA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICB9LCB0aGlzLmJsb2NrVGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG5ldyBPc2NpbGxhdG9yQ29uc3RydWN0b3IoKTtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB3aWR0aCBvZiB0aGUgb3NjaWxsYXRvciAob25seSBpZiB0aGUgb3NjaWxsYXRvciBpcyBzZXQgdG8gXCJwdWxzZVwiKVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiBAc2lnbmFsXG5cdFx0ICogQG5hbWUgd2lkdGhcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBvbW5pT3NjID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3IoNDQwLCBcInB1bHNlXCIpO1xuXHRcdCAqIC8vY2FuIGFjY2VzcyB0aGUgd2lkdGggYXR0cmlidXRlIG9ubHkgaWYgdHlwZSA9PT0gXCJwdWxzZVwiXG5cdFx0ICogb21uaU9zYy53aWR0aC52YWx1ZSA9IDAuMjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3dpZHRoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuUHVsc2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLndpZHRoO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIGRldHVuZWQgb3NjaWxsYXRvcnNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGNvdW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdjb3VudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IuY291bnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGNvdW50KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY291bnQgPSBjb3VudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRldHVuZSBzcHJlYWQgYmV0d2VlbiB0aGUgb3NjaWxsYXRvcnMuIElmIFwiY291bnRcIiBpc1xuXHRcdCAqIHNldCB0byAzIG9zY2lsbGF0b3JzIGFuZCB0aGUgXCJzcHJlYWRcIiBpcyBzZXQgdG8gNDAsXG5cdFx0ICogdGhlIHRocmVlIG9zY2lsbGF0b3JzIHdvdWxkIGJlIGRldHVuZWQgbGlrZSB0aGlzOiBbLTIwLCAwLCAyMF1cblx0XHQgKiBmb3IgYSB0b3RhbCBkZXR1bmUgc3ByZWFkIG9mIDQwIGNlbnRzLiBTZWUgVG9uZS5GYXRPc2NpbGxhdG9yXG5cdFx0ICogZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7Q2VudHN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnNwcmVhZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ByZWFkKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3ByZWFkID0gc3ByZWFkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3IuIE9ubHkgaWYgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiBpcyBzZXQgdG8gXCJhbVwiIG9yIFwiZm1cIiB0eXBlcy4gc2VlLiBUb25lLkFNT3NjaWxsYXRvciBvciBUb25lLkZNT3NjaWxsYXRvclxuXHRcdCAqIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uVHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvblR5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSB8fCB0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvblR5cGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1UeXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSB8fCB0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uVHlwZSA9IG1UeXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbW9kdWxhdGlvbiBpbmRleCB3aGljaCBpcyBpbiBlc3NlbmNlIHRoZSBkZXB0aCBvciBhbW91bnQgb2YgdGhlIG1vZHVsYXRpb24uIEluIG90aGVyIHRlcm1zIGl0IGlzIHRoZVxuXHRcdCAqIHJhdGlvIG9mIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1vZHVsYXRpbmcgc2lnbmFsIChtZikgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGVcblx0XHQgKiBtb2R1bGF0aW5nIHNpZ25hbCAobWEpIC0tIGFzIGluIG1hL21mLlxuXHRcdCAqIFNlZSBUb25lLkZNT3NjaWxsYXRvciBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAc2lnbmFsXG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvbkluZGV4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uSW5kZXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvbkluZGV4O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSBjYXJyaWVyIGFuZCB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3JzLlxuXHRcdCAqICBBIGhhcm1vbmljaXR5IG9mIDEgZ2l2ZXMgYm90aCBvc2NpbGxhdG9ycyB0aGUgc2FtZSBmcmVxdWVuY3kuXG5cdFx0ICogIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuIFNlZSBUb25lLkFNT3NjaWxsYXRvciBvciBUb25lLkZNT3NjaWxsYXRvclxuXHRcdCAqICBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiAgQHNpZ25hbFxuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGhhcm1vbmljaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdoYXJtb25pY2l0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNIHx8IHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5oYXJtb25pY2l0eTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1vZHVsYXRpb25GcmVxdWVuY3kgU2lnbmFsIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogKG9ubHkgaWYgdGhlIG9zY2lsbGF0b3IgdHlwZSBpcyBzZXQgdG8gcHdtKS4gU2VlXG5cdFx0ICogVG9uZS5QV01Pc2NpbGxhdG9yIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAc2lnbmFsXG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvbkZyZXF1ZW5jeVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIG9tbmlPc2MgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcig0NDAsIFwicHdtXCIpO1xuXHRcdCAqIC8vY2FuIGFjY2VzcyB0aGUgbW9kdWxhdGlvbkZyZXF1ZW5jeSBhdHRyaWJ1dGUgb25seSBpZiB0eXBlID09PSBcInB3bVwiXG5cdFx0ICogb21uaU9zYy5tb2R1bGF0aW9uRnJlcXVlbmN5LnZhbHVlID0gMC4yO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvbkZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLlBXTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvbkZyZXF1ZW5jeTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLk9tbmlPc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc291cmNlVHlwZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT21uaU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQmFzZS1jbGFzcyBmb3IgYWxsIGluc3RydW1lbnRzXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkluc3RydW1lbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCBhbmQgdm9sdW1lIHRyaW1pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBzb3VyY2Uudm9sdW1lLnZhbHVlID0gLTY7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogS2VlcCB0cmFjayBvZiBhbGwgZXZlbnRzIHNjaGVkdWxlZCB0byB0aGUgdHJhbnNwb3J0XG5cdFx0XHQgKiB3aGVuIHRoZSBpbnN0cnVtZW50IGlzICdzeW5jZWQnXG5cdFx0XHQgKiBAdHlwZSB7QXJyYXk8TnVtYmVyPn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSBbXTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkluc3RydW1lbnQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzXG5cdFx0ICogIEB0eXBlIHtvYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgLyoqIHRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscyAqL1xuXHQgICAgICAgICd2b2x1bWUnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5vdGUgdGhlIG5vdGUgdG8gdHJpZ2dlclxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdG8gdHJpZ2dlciB0aGUgbnRvZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSB0byB0cmlnZ2VyIHRoZSBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBUb25lLm5vT3A7XG5cdCAgICAvKipcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB3aGVuIHRvIHRyaWdnZXIgdGhlIHJlbGVhc2Vcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBUb25lLm5vT3A7XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIGluc3RydW1lbnQuc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBpbnN0cnVtZW50LnRyaWdnZXJBdHRhY2tSZWxlYXNlKCdDNCcsICc4bicsIDApXG5cdFx0ICogaW5zdHJ1bWVudC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnRTQnLCAnOG4nLCAnOG4nKVxuXHRcdCAqIGluc3RydW1lbnQudHJpZ2dlckF0dGFja1JlbGVhc2UoJ0c0JywgJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyQXR0YWNrJywgMSk7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlclJlbGVhc2UnLCAwKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBXcmFwIHRoZSBnaXZlbiBtZXRob2Qgc28gdGhhdCBpdCBjYW4gYmUgc3luY2hyb25pemVkXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZCBXaGljaCBtZXRob2QgdG8gd3JhcCBhbmQgc3luY1xuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZVBvc2l0aW9uIFdoYXQgcG9zaXRpb24gdGhlIHRpbWUgYXJndW1lbnQgYXBwZWFycyBpblxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLl9zeW5jTWV0aG9kID0gZnVuY3Rpb24gKG1ldGhvZCwgdGltZVBvc2l0aW9uKSB7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsTWV0aG9kID0gdGhpc1snX29yaWdpbmFsXycgKyBtZXRob2RdID0gdGhpc1ttZXRob2RdO1xuXHQgICAgICAgIHRoaXNbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB2YXIgdGltZSA9IGFyZ3NbdGltZVBvc2l0aW9uXTtcblx0ICAgICAgICAgICAgdmFyIGlkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgICAgIGFyZ3NbdGltZVBvc2l0aW9uXSA9IHQ7XG5cdCAgICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzLnB1c2goaWQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIGluc3RydW1lbnQgZnJvbSB0aGUgVHJhbnNwb3J0XG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGlkKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSBbXTtcblx0ICAgICAgICBpZiAodGhpcy5fb3JpZ2luYWxfdHJpZ2dlckF0dGFjaykge1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sgPSB0aGlzLl9vcmlnaW5hbF90cmlnZ2VyQXR0YWNrO1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlID0gdGhpcy5fb3JpZ2luYWxfdHJpZ2dlclJlbGVhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHRoZW4gdGhlIHJlbGVhc2UgYWZ0ZXIgdGhlIGR1cmF0aW9uLlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHRyaWdnZXIuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBub3RlIHNob3VsZCBiZSBoZWxkIGZvciBiZWZvcmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmluZyB0aGUgcmVsZWFzZS4gVGhpcyB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gIFdoZW4gdGhlIG5vdGUgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgdGhlIG5vdGUgc2hvdWxkIGJlIHRyaWdnZXJlZCBhdC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciBcIkM0XCIgZm9yIHRoZSBkdXJhdGlvbiBvZiBhbiA4dGggbm90ZVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAobm90ZSwgZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayhub3RlLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSh0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd2b2x1bWUnXSk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5JbnN0cnVtZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRoaXMgaXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3Igb3RoZXIgbW9ub3Bob25pYyBpbnN0cnVtZW50cyB0byBcblx0XHQgKiAgICAgICAgICBleHRlbmQuIElNUE9SVEFOVDogSXQgZG9lcyBub3QgbWFrZSBhbnkgc291bmQgb24gaXRzIG93biBhbmRcblx0XHQgKiAgICAgICAgICBzaG91bGRuJ3QgYmUgZGlyZWN0bHkgaW5zdGFudGlhdGVkLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1vbm9waG9uaWMuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnbGlkZSB0aW1lIGJldHdlZW4gbm90ZXMuIFxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wb3J0YW1lbnRvID0gb3B0aW9ucy5wb3J0YW1lbnRvO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9ub3Bob25pYywgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLmRlZmF1bHRzID0geyAncG9ydGFtZW50byc6IDAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgb2YgdGhlIG5vdGUgb3B0aW9uYWxseSB3aXRoIGEgZ2l2ZW4gdmVsb2NpdHkuIFxuXHRcdCAqICBcblx0XHQgKiAgXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gdHJpZ2dlci5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgV2hlbiB0aGUgbm90ZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHZlbG9jaXR5IFRoZSB2ZWxvY2l0eSBzY2FsZXIgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZXMgaG93IFwibG91ZFwiIHRoZSBub3RlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub3Bob25pY30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2soXCJDNFwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgdGhlIG5vdGUgYSBoYWxmIHNlY29uZCBmcm9tIG5vdyBhdCBoYWxmIHZlbG9jaXR5XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFjayhcIkM0XCIsIFwiKzAuNVwiLCAwLjUpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5zZXROb3RlKG5vdGUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gSWYgbm8gdGltZSBpcyBnaXZlbiwgdGhlIHJlbGVhc2UgaGFwcGVucyBpbW1lZGlhdGx5XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9waG9uaWN9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzeW50aC50cmlnZ2VyUmVsZWFzZSgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggdGhlIGFjdHVhbCBtZXRob2Rcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggdGhlIGFjdHVhbCBtZXRob2Rcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGxldmVsIG9mIHRoZSBvdXRwdXQgYXQgdGhlIGdpdmVuIHRpbWUuIE1lYXN1cmVzXG5cdFx0ICogIHRoZSBlbnZlbG9wZShzKSB2YWx1ZSBhdCB0aGUgdGltZS4gXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0byBxdWVyeSB0aGUgZW52ZWxvcGUgdmFsdWVcblx0XHQgKiAgQHJldHVybiB7Tm9ybWFsUmFuZ2V9IFRoZSBvdXRwdXQgbGV2ZWwgYmV0d2VlbiAwLTFcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZ2V0TGV2ZWxBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5lbnZlbG9wZS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBub3RlIGF0IHRoZSBnaXZlbiB0aW1lLiBJZiBubyB0aW1lIGlzIGdpdmVuLCB0aGUgbm90ZVxuXHRcdCAqICB3aWxsIHNldCBpbW1lZGlhdGVseS4gXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBub3RlIFRoZSBub3RlIHRvIGNoYW5nZSB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBub3RlIHNob3VsZCBiZSBzZXQuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vcGhvbmljfSB0aGlzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2NoYW5nZSB0byBGIzYgaW4gb25lIHF1YXJ0ZXIgbm90ZSBmcm9tIG5vdy5cblx0XHQgKiBzeW50aC5zZXROb3RlKFwiRiM2XCIsIFwiKzRuXCIpO1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jaGFuZ2UgdG8gQmI0IHJpZ2h0IG5vd1xuXHRcdCAqIHN5bnRoLnNldE5vdGUoXCJCYjRcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLnNldE5vdGUgPSBmdW5jdGlvbiAobm90ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5wb3J0YW1lbnRvID4gMCAmJiB0aGlzLmdldExldmVsQXRUaW1lKHRpbWUpID4gMC4wNSkge1xuXHQgICAgICAgICAgICB2YXIgcG9ydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLnBvcnRhbWVudG8pO1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5leHBvbmVudGlhbFJhbXBUbyhub3RlLCBwb3J0VGltZSwgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUobm90ZSwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vbm9waG9uaWM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5TeW50aCBpcyBjb21wb3NlZCBzaW1wbHkgb2YgYSBUb25lLk9tbmlPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICAgcm91dGVkIHRocm91Z2ggYSBUb25lLkFtcGxpdHVkZUVudmVsb3BlLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xLTFfMFlXMloxSjJFUEkzNlA4Zk5DTWNaRzdOMXcxR1psdVBzNG9nNGV2by9wdWI/dz0xMTYzJmg9MjMxXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT21uaU9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihvcHRpb25zLm9zY2lsbGF0b3IpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5vc2NpbGxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5vc2NpbGxhdG9yLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgb3NjaWxsYXRvcnMgdG8gdGhlIG91dHB1dFxuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5jaGFpbih0aGlzLmVudmVsb3BlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3RyaWFuZ2xlJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDA1LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMC4zLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDFcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBhdHRhY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgLy9pZiB0aGVyZSBpcyBubyByZWxlYXNlIHBvcnRpb24sIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQU1TeW50aCB1c2VzIHRoZSBvdXRwdXQgb2Ygb25lIFRvbmUuU3ludGggdG8gbW9kdWxhdGUgdGhlXG5cdFx0ICogICAgICAgICAgYW1wbGl0dWRlIG9mIGFub3RoZXIgVG9uZS5TeW50aC4gVGhlIGhhcm1vbmljaXR5ICh0aGUgcmF0aW8gYmV0d2VlblxuXHRcdCAqICAgICAgICAgIHRoZSB0d28gc2lnbmFscykgYWZmZWN0cyB0aGUgdGltYnJlIG9mIHRoZSBvdXRwdXQgc2lnbmFsIGdyZWF0bHkuXG5cdFx0ICogICAgICAgICAgUmVhZCBtb3JlIGFib3V0IEFtcGxpdHVkZSBNb2R1bGF0aW9uIFN5bnRoZXNpcyBvblxuXHRcdCAqICAgICAgICAgIFtTb3VuZE9uU291bmRdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwNDEwMzY1My9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb206ODAvc29zL21hcjAwL2FydGljbGVzL3N5bnRoc2VjcmV0cy5odG0pLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xVFF1OEVkNGlGcjFZVExLcEIzVTFfaHVyLVV3QnJoNWdkQlhjOEJ4ZkdLdy9wdWI/dz0xMDA5Jmg9NDU3XCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5BTVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5BTVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLlN5bnRoKCk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIncyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IHRoaXMuX2NhcnJpZXIub3NjaWxsYXRvcjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gdGhpcy5fY2Fycmllci5lbnZlbG9wZS5zZXQob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuU3ludGgoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBvc2NpbGxhdG9yIHdoaWNoIGlzIGFwcGxpZWRcblx0XHRcdCAqICB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IHRoaXMuX21vZHVsYXRvci5vc2NpbGxhdG9yLnNldChvcHRpb25zLm1vZHVsYXRpb24pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBlbnZlbG9wZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSB0aGlzLl9tb2R1bGF0b3IuZW52ZWxvcGUuc2V0KG9wdGlvbnMubW9kdWxhdGlvbkVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoNDQwLCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSByYXRpbyBiZXR3ZWVuIHRoZSB0d28gdm9pY2VzLiBBIGhhcm1vbmljaXR5IG9mXG5cdFx0XHQgKiAgMSBpcyBubyBjaGFuZ2UuIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy9waXRjaCB2b2ljZTEgYW4gb2N0YXZlIGJlbG93IHZvaWNlMFxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb252ZXJ0IHRoZSAtMSwxIG91dHB1dCB0byAwLDFcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BdWRpb1RvR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSB0d28gdm9pY2VzIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmZhbih0aGlzLl9jYXJyaWVyLmRldHVuZSwgdGhpcy5fbW9kdWxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNoYWluKHRoaXMuX21vZHVsYXRpb25TY2FsZSwgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5jaGFpbih0aGlzLl9tb2R1bGF0aW9uTm9kZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFNU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDMsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4wMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ21vZHVsYXRpb24nOiB7ICd0eXBlJzogJ3NxdWFyZScgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC41LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCBvY2N1clxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIC8vdGhlIHBvcnQgZ2xpZGVcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIHJlbGVhc2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQU1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFNU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Nb25vU3ludGggaXMgY29tcG9zZWQgb2Ygb25lIG9zY2lsbGF0b3IsIG9uZSBmaWx0ZXIsIGFuZCB0d28gZW52ZWxvcGVzLlxuXHRcdCAqICAgICAgICAgIFRoZSBhbXBsaXR1ZGUgb2YgdGhlIFRvbmUuT3NjaWxsYXRvciBhbmQgdGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlXG5cdFx0ICogICAgICAgICAgVG9uZS5GaWx0ZXIgYXJlIGNvbnRyb2xsZWQgYnkgVG9uZS5FbnZlbG9wZXMuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFnYVkxREY5X0h6a29kcWY4SkkxQ2cyVlpmd1NFbHBGUWZJOTRJUXdhZDM4L3B1Yj93PTkyNCZoPTI0MFwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLk1vbm9TeW50aCh7XG5cdFx0ICogXHRcIm9zY2lsbGF0b3JcIiA6IHtcblx0XHQgKiBcdFx0XCJ0eXBlXCIgOiBcInNxdWFyZVwiXG5cdFx0ICogIH0sXG5cdFx0ICogIFwiZW52ZWxvcGVcIiA6IHtcblx0XHQgKiAgXHRcImF0dGFja1wiIDogMC4xXG5cdFx0ICogIH1cblx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTW9ub1N5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5PbW5pT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKG9wdGlvbnMub3NjaWxsYXRvcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLm9zY2lsbGF0b3IuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIob3B0aW9ucy5maWx0ZXIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaWx0ZXIgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRnJlcXVlbmN5RW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlID0gbmV3IFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUob3B0aW9ucy5maWx0ZXJFbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIG9zY2lsbGF0b3JzIHRvIHRoZSBvdXRwdXRcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuY2hhaW4odGhpcy5maWx0ZXIsIHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGZpbHRlciBlbnZlbG9wZVxuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUuY29ubmVjdCh0aGlzLmZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmaWx0ZXInLFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb25vU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAnQzQnLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzcXVhcmUnIH0sXG5cdCAgICAgICAgJ2ZpbHRlcic6IHtcblx0ICAgICAgICAgICAgJ1EnOiA2LFxuXHQgICAgICAgICAgICAndHlwZSc6ICdsb3dwYXNzJyxcblx0ICAgICAgICAgICAgJ3JvbGxvZmYnOiAtMjRcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDA1LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMC45LFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDFcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdmaWx0ZXJFbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDYsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMixcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjUsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMixcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJzogNyxcblx0ICAgICAgICAgICAgJ2V4cG9uZW50JzogMlxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vdGhlIGVudmVsb3Blc1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmaWx0ZXInLFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Nb25vU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5EdW9TeW50aCBpcyBhIG1vbm9waG9uaWMgc3ludGggY29tcG9zZWQgb2YgdHdvXG5cdFx0ICogICAgICAgICAgTW9ub1N5bnRocyBydW4gaW4gcGFyYWxsZWwgd2l0aCBjb250cm9sIG92ZXIgdGhlXG5cdFx0ICogICAgICAgICAgZnJlcXVlbmN5IHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMgYW5kIHZpYnJhdG8gZWZmZWN0LlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xYkw0R1h2ZlJNTWxxUzdYeUJtOUNqTDlLSlBTVUtiY2RCTnBxT2xrRkx4ay9wdWI/dz0xMDEyJmg9NDQ4XCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGR1b1N5bnRoID0gbmV3IFRvbmUuRHVvU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIGR1b1N5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCIyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5EdW9TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZpcnN0IHZvaWNlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTW9ub1N5bnRofVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2ljZTAgPSBuZXcgVG9uZS5Nb25vU3ludGgob3B0aW9ucy52b2ljZTApO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2Vjb25kIHZvaWNlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTW9ub1N5bnRofVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2ljZTEgPSBuZXcgVG9uZS5Nb25vU3ludGgob3B0aW9ucy52b2ljZTEpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmlicmF0byBMRk8uXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92aWJyYXRvID0gbmV3IFRvbmUuTEZPKG9wdGlvbnMudmlicmF0b1JhdGUsIC01MCwgNTApO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8uc3RhcnQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSB2aWJyYXRvIGZyZXF1ZW5jeVxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmlicmF0b1JhdGUgPSB0aGlzLl92aWJyYXRvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdmlicmF0byBnYWluXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMudmlicmF0b0Ftb3VudCwgVG9uZS5UeXBlLlBvc2l0aXZlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbW91bnQgb2YgdmlicmF0b1xuXHRcdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52aWJyYXRvQW1vdW50ID0gdGhpcy5fdmlicmF0b0dhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZnJlcXVlbmN5IGNvbnRyb2xcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDQ0MCwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMuIEEgaGFybW9uaWNpdHkgb2Zcblx0XHRcdCAqICAxIGlzIG5vIGNoYW5nZS4gSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHZvaWNlMSBhbiBvY3RhdmUgYmVsb3cgdm9pY2UwXG5cdFx0XHQgKiBkdW9TeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8vY29udHJvbCB0aGUgdHdvIHZvaWNlcyBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMudm9pY2UwLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy52b2ljZTEuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvLmNvbm5lY3QodGhpcy5fdmlicmF0b0dhaW4pO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG9HYWluLmZhbih0aGlzLnZvaWNlMC5kZXR1bmUsIHRoaXMudm9pY2UxLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAndm9pY2UwJyxcblx0ICAgICAgICAgICAgJ3ZvaWNlMScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndmlicmF0b0Ftb3VudCcsXG5cdCAgICAgICAgICAgICd2aWJyYXRvUmF0ZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkR1b1N5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZpYnJhdG9BbW91bnQnOiAwLjUsXG5cdCAgICAgICAgJ3ZpYnJhdG9SYXRlJzogNSxcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAxLjUsXG5cdCAgICAgICAgJ3ZvaWNlMCc6IHtcblx0ICAgICAgICAgICAgJ3ZvbHVtZSc6IC0xMCxcblx0ICAgICAgICAgICAgJ3BvcnRhbWVudG8nOiAwLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAgICAgJ2ZpbHRlckVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3ZvaWNlMSc6IHtcblx0ICAgICAgICAgICAgJ3ZvbHVtZSc6IC0xMCxcblx0ICAgICAgICAgICAgJ3BvcnRhbWVudG8nOiAwLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAgICAgJ2ZpbHRlckVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXNcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EdW9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnZvaWNlMS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVzXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EdW9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMudm9pY2UwLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGxldmVsIG9mIHRoZSBvdXRwdXQgYXQgdGhlIGdpdmVuIHRpbWUuIE1lYXN1cmVzXG5cdFx0ICogIHRoZSBlbnZlbG9wZShzKSB2YWx1ZSBhdCB0aGUgdGltZS4gXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0byBxdWVyeSB0aGUgZW52ZWxvcGUgdmFsdWVcblx0XHQgKiAgQHJldHVybiB7Tm9ybWFsUmFuZ2V9IFRoZSBvdXRwdXQgbGV2ZWwgYmV0d2VlbiAwLTFcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGgucHJvdG90eXBlLmdldExldmVsQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gKHRoaXMudm9pY2UwLmdldExldmVsQXRUaW1lKHRpbWUpICsgdGhpcy52b2ljZTEuZ2V0TGV2ZWxBdFRpbWUodGltZSkpIC8gMjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRHVvU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAndm9pY2UwJyxcblx0ICAgICAgICAgICAgJ3ZvaWNlMScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndmlicmF0b0Ftb3VudCcsXG5cdCAgICAgICAgICAgICd2aWJyYXRvUmF0ZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmlicmF0b0Ftb3VudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52aWJyYXRvQW1vdW50ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZpYnJhdG9SYXRlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5EdW9TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBGTVN5bnRoIGlzIGNvbXBvc2VkIG9mIHR3byBUb25lLlN5bnRocyB3aGVyZSBvbmUgVG9uZS5TeW50aCBtb2R1bGF0ZXNcblx0XHQgKiAgICAgICAgICB0aGUgZnJlcXVlbmN5IG9mIGEgc2Vjb25kIFRvbmUuU3ludGguIEEgbG90IG9mIHNwZWN0cmFsIGNvbnRlbnRcblx0XHQgKiAgICAgICAgICBjYW4gYmUgZXhwbG9yZWQgdXNpbmcgdGhlIG1vZHVsYXRpb25JbmRleCBwYXJhbWV0ZXIuIFJlYWQgbW9yZSBhYm91dFxuXHRcdCAqICAgICAgICAgIGZyZXF1ZW5jeSBtb2R1bGF0aW9uIHN5bnRoZXNpcyBvbiBTb3VuZCBPbiBTb3VuZDogW1BhcnQgMV0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDAzMTIzNzA0L2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvYXByMDAvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmh0bSksIFtQYXJ0IDJdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwMzExNTgzNS9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL21heTAwL2FydGljbGVzL3N5bnRoLmh0bSkuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFoMFBVRFpYUGdpNElreDZiVlQ2b25jcllQTGx1Rkt5N2xqNTNwdXhqLURNL3B1Yj93PTkwMiZoPTQ2MlwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBmbVN5bnRoID0gbmV3IFRvbmUuRk1TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogZm1TeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM1XCIsIFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5GTVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLlN5bnRoKG9wdGlvbnMuY2Fycmllcik7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIncyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IHRoaXMuX2NhcnJpZXIub3NjaWxsYXRvcjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSB0aGlzLl9jYXJyaWVyLmVudmVsb3BlLnNldChvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5TeW50aChvcHRpb25zLm1vZHVsYXRvcik7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yJ3Mgb3NjaWxsYXRvciB3aGljaCBpcyBhcHBsaWVkXG5cdFx0XHQgKiAgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSB0aGlzLl9tb2R1bGF0b3Iub3NjaWxsYXRvci5zZXQob3B0aW9ucy5tb2R1bGF0aW9uKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSB0aGlzLl9tb2R1bGF0b3IuZW52ZWxvcGUuc2V0KG9wdGlvbnMubW9kdWxhdGlvbkVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbCg0NDAsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHNcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMuIEEgaGFybW9uaWNpdHkgb2Zcblx0XHRcdCAqICAxIGlzIG5vIGNoYW5nZS4gSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHZvaWNlMSBhbiBvY3RhdmUgYmVsb3cgdm9pY2UwXG5cdFx0XHQgKiBzeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW9uIGluZGV4IHdoaWNoIGVzc2VudGlhbGx5IHRoZSBkZXB0aCBvciBhbW91bnQgb2YgdGhlIG1vZHVsYXRpb24uIEl0IGlzIHRoZVxuXHRcdFx0ICogIHJhdGlvIG9mIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1vZHVsYXRpbmcgc2lnbmFsIChtZikgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGVcblx0XHRcdCAqICBtb2R1bGF0aW5nIHNpZ25hbCAobWEpIC0tIGFzIGluIG1hL21mLlxuXHRcdFx0ICpcdEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqXHRAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMubW9kdWxhdGlvbkluZGV4KTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG5ldyBUb25lLkdhaW4oMCk7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSB0d28gdm9pY2VzIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMubW9kdWxhdGlvbkluZGV4LCB0aGlzLl9tb2R1bGF0aW9uTm9kZSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZmFuKHRoaXMuX2NhcnJpZXIuZGV0dW5lLCB0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY29ubmVjdCh0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GTVN5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAzLFxuXHQgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnOiAxMCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjAxLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbic6IHsgJ3R5cGUnOiAnc3F1YXJlJyB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogXHR0cmlnZ2VyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCBvY2N1clxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GTVN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIHJlbGVhc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRk1TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GTVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZNU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5NZW1icmFuZVN5bnRoIG1ha2VzIGtpY2sgYW5kIHRvbSBzb3VuZHMgdXNpbmcgYSBzaW5nbGUgb3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgIHdpdGggYW4gYW1wbGl0dWRlIGVudmVsb3BlIGFuZCBmcmVxdWVuY3kgcmFtcC4gQSBUb25lLk9tbmlPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICAgaXMgcm91dGVkIHRocm91Z2ggYSBUb25lLkFtcGxpdHVkZUVudmVsb3BlIHRvIHRoZSBvdXRwdXQuIFRoZSBkcnVtXG5cdFx0ICogICAgICAgICAgcXVhbGl0eSBvZiB0aGUgc291bmQgY29tZXMgZnJvbSB0aGUgZnJlcXVlbmN5IGVudmVsb3BlIGFwcGxpZWRcblx0XHQgKiAgICAgICAgICBkdXJpbmcgVG9uZS5NZW1icmFuZVN5bnRoLnRyaWdnZXJBdHRhY2sobm90ZSkuIFRoZSBmcmVxdWVuY3kgZW52ZWxvcGVcblx0XHQgKiAgICAgICAgICBzdGFydHMgYXQgPGNvZGU+bm90ZSAqIC5vY3RhdmVzPC9jb2RlPiBhbmQgcmFtcHMgdG8gPGNvZGU+bm90ZTwvY29kZT5cblx0XHQgKiAgICAgICAgICBvdmVyIHRoZSBkdXJhdGlvbiBvZiA8Y29kZT4ucGl0Y2hEZWNheTwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuTWVtYnJhbmVTeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDMlwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTWVtYnJhbmVTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT21uaU9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihvcHRpb25zLm9zY2lsbGF0b3IpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoZSBwaXRjaCBlbnZlbG9wZSByYW1wcy5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBmcmVxdWVuY3kgZW52ZWxvcGUgdGFrZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBpdGNoRGVjYXkgPSBvcHRpb25zLnBpdGNoRGVjYXk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmNoYWluKHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWVtYnJhbmVTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BpdGNoRGVjYXknOiAwLjA1LFxuXHQgICAgICAgICdvY3RhdmVzJzogMTAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuNCxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDEuNCxcblx0ICAgICAgICAgICAgJ2F0dGFja0N1cnZlJzogJ2V4cG9uZW50aWFsJ1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoIHRoZSBnaXZlbiB2ZWxvY2l0eS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIHRoZSB0aW1lLCBpZiBub3QgZ2l2ZW4gaXMgbm93XG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHZlbG9jaXR5IGRlZmF1bHRzIHRvIDFcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVtYnJhbmVTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICBraWNrLnRyaWdnZXJBdHRhY2soNjApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIG5vdGUgPSB0aGlzLnRvRnJlcXVlbmN5KG5vdGUpO1xuXHQgICAgICAgIHZhciBtYXhOb3RlID0gbm90ZSAqIHRoaXMub2N0YXZlcztcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKG1heE5vdGUsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZShub3RlLCB0aW1lICsgdGhpcy50b1NlY29uZHModGhpcy5waXRjaERlY2F5KSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgbm90ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgcmVsZWFzZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZW1icmFuZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lbWJyYW5lU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZW1icmFuZVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgSW5oYXJtb25pYyByYXRpbyBvZiBmcmVxdWVuY2llcyBiYXNlZCBvbiB0aGUgUm9sYW5kIFRSLTgwOFxuXHRcdCAqICBUYWtlbiBmcm9tIGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L3BhcGVycy90ci04MDgtY3ltYmFsLXBoeXNpY2FsbHktaW5mb3JtZWQtY2lyY3VpdC1iZW5kYWJsZS1kaWdpdGFsLW1vZGVsXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGluaGFybVJhdGlvcyA9IFtcblx0ICAgICAgICAxLFxuXHQgICAgICAgIDEuNDgzLFxuXHQgICAgICAgIDEuOTMyLFxuXHQgICAgICAgIDIuNTQ2LFxuXHQgICAgICAgIDIuNjMsXG5cdCAgICAgICAgMy44OTdcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIGhpZ2hseSBpbmhhcm1vbmljIGFuZCBzcGVjdHJhbGx5IGNvbXBsZXggc291cmNlIHdpdGggYSBoaWdocGFzcyBmaWx0ZXJcblx0XHQgKiAgICAgICAgICBhbmQgYW1wbGl0dWRlIGVudmVsb3BlIHdoaWNoIGlzIGdvb2QgZm9yIG1ha2luZyBtZXRhbG9waG9uZSBzb3VuZHMuIEJhc2VkXG5cdFx0ICogICAgICAgICAgb24gQ3ltYmFsU3ludGggYnkgW0Bwb2x5cmh5dGhtYXRpY10oaHR0cHM6Ly9naXRodWIuY29tL3BvbHlyaHl0aG1hdGljKS5cblx0XHQgKiAgICAgICAgICBJbnNwaXJhdGlvbiBmcm9tIFtTb3VuZCBvbiBTb3VuZF0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNjEwMTQzOTI0L2h0dHBzOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL2p1bDAyL2FydGljbGVzL3N5bnRoc2VjcmV0czA3MDIuYXNwKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBhdmFpbGJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTWV0YWxTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgY3ltYmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiBGTU9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG11bHRpcGxpZXJzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mcmVxTXVsdGlwbGllcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGZvciB0aGUgYm9keVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVlID0gbmV3IFRvbmUuR2FpbigwKS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBoaWdocGFzcyB0aGUgb3V0cHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9oaWdocGFzcyA9IG5ldyBUb25lLkZpbHRlcih7XG5cdCAgICAgICAgICAgICd0eXBlJzogJ2hpZ2hwYXNzJyxcblx0ICAgICAgICAgICAgJ1EnOiAtMy4wMTAyOTk5NTY2Mzk4MTI1XG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoZSBoaWdocGFzc1xuXHRcdFx0ICogIGZpbHRlciBmcmVxdWVuY3kgcmFtcHNcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNjYWxlIHRoZSBib2R5IGVudmVsb3BlXG5cdFx0XHQgKiAgZm9yIHRoZSBiYW5kcGFzc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNjYWxlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyID0gbmV3IFRvbmUuU2NhbGUob3B0aW9ucy5yZXNvbmFuY2UsIDcwMDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBlbnZlbG9wZSB3aGljaCBpcyBjb25uZWN0ZWQgYm90aCB0byB0aGVcblx0XHRcdCAqICBhbXBsaXR1ZGUgYW5kIGhpZ2hwYXNzIGZpbHRlcidzIGN1dG9mZiBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuRW52ZWxvcGUoe1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogb3B0aW9ucy5lbnZlbG9wZS5hdHRhY2ssXG5cdCAgICAgICAgICAgICdhdHRhY2tDdXJ2ZSc6ICdsaW5lYXInLFxuXHQgICAgICAgICAgICAnZGVjYXknOiBvcHRpb25zLmVudmVsb3BlLmRlY2F5LFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogb3B0aW9ucy5lbnZlbG9wZS5yZWxlYXNlXG5cdCAgICAgICAgfSkuY2hhaW4odGhpcy5fZmlsdGVyRnJlcVNjYWxlciwgdGhpcy5faGlnaHBhc3MuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmNvbm5lY3QodGhpcy5fYW1wbGl0dWUuZ2Fpbik7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmhhcm1SYXRpb3MubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIG9zYyA9IG5ldyBUb25lLkZNT3NjaWxsYXRvcih7XG5cdCAgICAgICAgICAgICAgICAndHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICAgICAgICAgJ21vZHVsYXRpb25UeXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgICAgICAgICAnaGFybW9uaWNpdHknOiBvcHRpb25zLmhhcm1vbmljaXR5LFxuXHQgICAgICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IG9wdGlvbnMubW9kdWxhdGlvbkluZGV4XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBvc2MuY29ubmVjdCh0aGlzLl9oaWdocGFzcyk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldID0gb3NjO1xuXHQgICAgICAgICAgICB2YXIgbXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KGluaGFybVJhdGlvc1tpXSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVyc1tpXSA9IG11bHQ7XG5cdCAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKG11bHQsIG9zYy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3NldCB0aGUgb2N0YXZlc1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1ldGFsU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAxLjQsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC4yXG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiA1LjEsXG5cdCAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IDMyLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiA0MDAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogMS41XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjay5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgICAgICBXaGVuIHRoZSBhdHRhY2sgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBbdmVsb2NpdHk9MV0gIFRoZSB2ZWxvY2l0eSB0aGF0IHRoZSBlbnZlbG9wZSBzaG91bGQgYmUgdHJpZ2dlcmVkIGF0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NZXRhbFN5bnRofSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbCkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2ZWwgPSBUb25lLmRlZmF1bHRBcmcodmVsLCAxKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vaWYgdGhlIHN1c3RhaW4gaXMgMCwgc3RvcCB0aGUgb3NjaWxsYXRvciBhcyB3ZWxsXG5cdCAgICAgICAgaWYgKHRoaXMuZW52ZWxvcGUuc3VzdGFpbiA9PT0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICAgICAgV2hlbiB0aGUgcmVsZWFzZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NZXRhbFN5bnRofSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMuZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAwKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2Ugb2YgdGhlIGVudmVsb3BlIGFmdGVyIHRoZSBnaXZlblxuXHRcdCAqICBkdXJhdGlvbi5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIGR1cmF0aW9uICBUaGUgZHVyYXRpb24gYmVmb3JlIHRyaWdnZXJpbmcgdGhlIHJlbGVhc2Vcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgICAgICBXaGVuIHRoZSBhdHRhY2sgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBbdmVsb2NpdHk9MV0gIFRoZSB2ZWxvY2l0eSB0aGF0IHRoZSBlbnZlbG9wZSBzaG91bGQgYmUgdHJpZ2dlcmVkIGF0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NZXRhbFN5bnRofSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBtb2R1bGF0aW9uSW5kZXggb2YgdGhlIG9zY2lsbGF0b3JzIHdoaWNoIG1ha2UgdXAgdGhlIHNvdXJjZS5cblx0XHQgKiAgc2VlIFRvbmUuRk1Pc2NpbGxhdG9yLm1vZHVsYXRpb25JbmRleFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lICBtb2R1bGF0aW9uSW5kZXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLCAnbW9kdWxhdGlvbkluZGV4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvcnNbMF0ubW9kdWxhdGlvbkluZGV4LnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldLm1vZHVsYXRpb25JbmRleC52YWx1ZSA9IHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBoYXJtb25pY2l0eSBvZiB0aGUgb3NjaWxsYXRvcnMgd2hpY2ggbWFrZSB1cCB0aGUgc291cmNlLlxuXHRcdCAqICBzZWUgVG9uZS5GTU9zY2lsbGF0b3IuaGFybW9uaWNpdHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTWV0YWxTeW50aCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSAgaGFybW9uaWNpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLCAnaGFybW9uaWNpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yc1swXS5oYXJtb25pY2l0eS52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXS5oYXJtb25pY2l0eS52YWx1ZSA9IHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIGhpZ2hwYXNzIGZpbHRlciBhdHRhY2hlZCB0byB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTWV0YWxTeW50aCNcblx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiAgQG5hbWUgIHJlc29uYW5jZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdyZXNvbmFuY2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1pbiA9IHZhbDtcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIFwicmVzb25hbmNlXCIgZnJlcXVlbmN5XG5cdFx0ICogIHRoYXQgdGhlIGZpbHRlciByYW1wcyBkdXJpbmcgdGhlIGF0dGFjay9kZWNheSBlbnZlbG9wZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSAgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdHM7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWF4ID0gdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5taW4gKiBNYXRoLnBvdygyLCBvY3RzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZXRhbFN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVyc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mcmVxTXVsdGlwbGllcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9oaWdocGFzcy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faGlnaHBhc3MgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1ldGFsU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Ob2lzZVN5bnRoIGlzIGNvbXBvc2VkIG9mIGEgbm9pc2UgZ2VuZXJhdG9yIChUb25lLk5vaXNlKSwgb25lIGZpbHRlciAoVG9uZS5GaWx0ZXIpLFxuXHRcdCAqICAgICAgICAgIGFuZCB0d28gZW52ZWxvcGVzIChUb25lLkVudmVsb3ApLiBPbmUgZW52ZWxvcGUgY29udHJvbHMgdGhlIGFtcGxpdHVkZVxuXHRcdCAqICAgICAgICAgIG9mIHRoZSBub2lzZSBhbmQgdGhlIG90aGVyIGlzIGNvbnRyb2xzIHRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFycXp1WDlyQmxoVDUwTVJ2RDJUS21sOWJuWmhjWm16WEYxcmZfbzd2ZG5FL3B1Yj93PTkxOCZoPTI0MlwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIG5vaXNlU3ludGggPSBuZXcgVG9uZS5Ob2lzZVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBub2lzZVN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Ob2lzZVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbm9pc2Ugc291cmNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk5vaXNlfVxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiBub2lzZVN5bnRoLnNldChcIm5vaXNlLnR5cGVcIiwgXCJicm93blwiKTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubm9pc2UgPSBuZXcgVG9uZS5Ob2lzZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBub2lzZSB0byB0aGUgb3V0cHV0XG5cdCAgICAgICAgdGhpcy5ub2lzZS5jaGFpbih0aGlzLmVudmVsb3BlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbm9pc2UnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Ob2lzZVN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ25vaXNlJzogeyAndHlwZSc6ICd3aGl0ZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4xLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDBcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVzLiBVbmxpa2Ugb3RoZXJcblx0XHQgKiAgaW5zdHJ1bWVudHMsIFRvbmUuTm9pc2VTeW50aCBkb2Vzbid0IGhhdmUgYSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG5vaXNlU3ludGgudHJpZ2dlckF0dGFjaygpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBub2lzZVxuXHQgICAgICAgIHRoaXMubm9pc2Uuc3RhcnQodGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuZW52ZWxvcGUuc3VzdGFpbiA9PT0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLm5vaXNlLnN0b3AodGltZSA9IHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgcmVsZWFzZSBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLm5vaXNlLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAwKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHRoZW4gdGhlIHJlbGVhc2UuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIHRoZSBkdXJhdGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICAgICB0aGUgdGltZSBvZiB0aGUgYXR0YWNrXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdub2lzZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm5vaXNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm5vaXNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Ob2lzZVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgS2FycGx1cy1TdHJpbmcgc3RyaW5nIHN5bnRoZXNpcy4gT2Z0ZW4gb3V0IG9mIHR1bmUuXG5cdFx0ICogICAgICAgICBXaWxsIGNoYW5nZSB3aGVuIHRoZSBBdWRpb1dvcmtlck5vZGUgaXMgYXZhaWxhYmxlIGFjcm9zc1xuXHRcdCAqICAgICAgICAgYnJvd3NlcnMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gc2VlIHRoZSBkZWZhdWx0c1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwbHVja3kgPSBuZXcgVG9uZS5QbHVja1N5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBwbHVja3kudHJpZ2dlckF0dGFjayhcIkM0XCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuUGx1Y2tTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTm9pc2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25vaXNlID0gbmV3IFRvbmUuTm9pc2UoJ3BpbmsnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIG5vaXNlIGF0IHRoZSBhdHRhY2suXG5cdFx0XHQgKiAgTm9taW5hbCByYW5nZSBvZiBbMC4xLCAyMF1cblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2tOb2lzZSA9IG9wdGlvbnMuYXR0YWNrTm9pc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIExGQ0Zcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Mb3dwYXNzQ29tYkZpbHRlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZjZiA9IG5ldyBUb25lLkxvd3Bhc3NDb21iRmlsdGVyKHtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZSc6IG9wdGlvbnMucmVzb25hbmNlLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJzogb3B0aW9ucy5kYW1wZW5pbmdcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmVzb25hbmNlIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gdGhpcy5fbGZjZi5yZXNvbmFuY2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRhbXBlbmluZyBjb250cm9sLiBpLmUuIHRoZSBsb3dwYXNzIGZpbHRlciBmcmVxdWVuY3kgb2YgdGhlIGNvbWIgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IHRoaXMuX2xmY2YuZGFtcGVuaW5nO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9ub2lzZS5jb25uZWN0KHRoaXMuX2xmY2YpO1xuXHQgICAgICAgIHRoaXMuX2xmY2YuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBsdWNrU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGx1Y2tTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrTm9pc2UnOiAxLFxuXHQgICAgICAgICdkYW1wZW5pbmcnOiA0MDAwLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiAwLjdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IG5vdGUgVGhlIG5vdGUgdG8gdHJpZ2dlci5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIG5vdGUgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGx1Y2tTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUpIHtcblx0ICAgICAgICBub3RlID0gdGhpcy50b0ZyZXF1ZW5jeShub3RlKTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGRlbGF5QW1vdW50ID0gMSAvIG5vdGU7XG5cdCAgICAgICAgdGhpcy5fbGZjZi5kZWxheVRpbWUuc2V0VmFsdWVBdFRpbWUoZGVsYXlBbW91bnQsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlLnN0b3AodGltZSArIGRlbGF5QW1vdW50ICogdGhpcy5hdHRhY2tOb2lzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbHVja1N5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmY2YuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZmNmID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGx1Y2tTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBvbHlTeW50aCBoYW5kbGVzIHZvaWNlIGNyZWF0aW9uIGFuZCBhbGxvY2F0aW9uIGZvciBhbnlcblx0XHQgKiAgICAgICAgICBpbnN0cnVtZW50cyBwYXNzZWQgaW4gYXMgdGhlIHNlY29uZCBwYXJhbXRlci4gUG9seVN5bnRoIGlzXG5cdFx0ICogICAgICAgICAgbm90IGEgc3ludGhlc2l6ZXIgYnkgaXRzZWxmLCBpdCBtZXJlbHkgbWFuYWdlcyB2b2ljZXMgb2Zcblx0XHQgKiAgICAgICAgICBvbmUgb2YgdGhlIG90aGVyIHR5cGVzIG9mIHN5bnRocywgYWxsb3dpbmcgYW55IG9mIHRoZVxuXHRcdCAqICAgICAgICAgIG1vbm9waG9uaWMgc3ludGhlc2l6ZXJzIHRvIGJlIHBvbHlwaG9uaWMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfE9iamVjdH0gW3BvbHlwaG9ueT00XSBUaGUgbnVtYmVyIG9mIHZvaWNlcyB0byBjcmVhdGVcblx0XHQgKiAgQHBhcmFtIHtmdW5jdGlvbn0gW3ZvaWNlPVRvbmUuU3ludGhdIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgdm9pY2VzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXMgVG9uZS5TeW50aCBieSBkZWZhdWx0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBwb2x5c3ludGggY29tcG9zZWQgb2YgNiBWb2ljZXMgb2YgU3ludGhcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5Qb2x5U3ludGgoNiwgVG9uZS5TeW50aCkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3NldCB0aGUgYXR0cmlidXRlcyB1c2luZyB0aGUgc2V0IGludGVyZmFjZVxuXHRcdCAqIHN5bnRoLnNldChcImRldHVuZVwiLCAtMTIwMCk7XG5cdFx0ICogLy9wbGF5IGEgY2hvcmRcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJDNFwiLCBcIkU0XCIsIFwiQTRcIl0sIFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwb2x5cGhvbnknLFxuXHQgICAgICAgICAgICAndm9pY2UnXG5cdCAgICAgICAgXSwgVG9uZS5Qb2x5U3ludGgpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5JbnN0cnVtZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICAvL21heCBwb2x5cGhvbnlcblx0ICAgICAgICBvcHRpb25zLnBvbHlwaG9ueSA9IE1hdGgubWluKFRvbmUuUG9seVN5bnRoLk1BWF9QT0xZUEhPTlksIG9wdGlvbnMucG9seXBob255KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYXJyYXkgb2Ygdm9pY2VzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2ljZXMgPSBuZXcgQXJyYXkob3B0aW9ucy5wb2x5cGhvbnkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBxdWV1ZSBvZiB2b2ljZXMgd2l0aCBkYXRhIGFib3V0IGxhc3QgdHJpZ2dlclxuXHRcdFx0ICogIGFuZCB0aGUgdHJpZ2dlcmVkIG5vdGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJzID0gbmV3IEFycmF5KG9wdGlvbnMucG9seXBob255KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdkZXR1bmUnKTtcblx0ICAgICAgICAvL2NyZWF0ZSB0aGUgdm9pY2VzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLnBvbHlwaG9ueTsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB2ID0gbmV3IG9wdGlvbnMudm9pY2UoYXJndW1lbnRzWzJdLCBhcmd1bWVudHNbM10pO1xuXHQgICAgICAgICAgICBpZiAoISh2IGluc3RhbmNlb2YgVG9uZS5Nb25vcGhvbmljKSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeW50aCBjb25zdHJ1Y3RvciBtdXN0IGJlIGluc3RhbmNlIG9mIFRvbmUuTW9ub3Bob25pYycpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldID0gdjtcblx0ICAgICAgICAgICAgdi5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgaWYgKHYuaGFzT3duUHJvcGVydHkoJ2RldHVuZScpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHYuZGV0dW5lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90cmlnZ2Vyc1tpXSA9IHtcblx0ICAgICAgICAgICAgICAgIHJlbGVhc2U6IC0xLFxuXHQgICAgICAgICAgICAgICAgbm90ZTogbnVsbCxcblx0ICAgICAgICAgICAgICAgIHZvaWNlOiB2XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUG9seVN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BvbHlwaG9ueSc6IDQsXG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3ZvaWNlJzogVG9uZS5TeW50aFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l8QXJyYXl9IG5vdGVzIFRoZSBub3RlcyB0byBwbGF5LiBBY2NlcHRzIGEgc2luZ2xlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlcXVlbmN5IG9yIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICBUaGUgc3RhcnQgdGltZSBvZiB0aGUgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciBhIGNob3JkIGltbWVkaWF0ZWx5IHdpdGggYSB2ZWxvY2l0eSBvZiAwLjJcblx0XHQgKiBwb2x5LnRyaWdnZXJBdHRhY2soW1wiQWIzXCIsIFwiQzRcIiwgXCJGNVwiXSwgdW5kZWZpbmVkLCAwLjIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZXMsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5vdGVzKSkge1xuXHQgICAgICAgICAgICBub3RlcyA9IFtub3Rlc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSBub3Rlc1tpXTtcblx0ICAgICAgICAgICAgLy90cmlnZ2VyIHRoZSBvbGRlc3Qgdm9pY2Vcblx0ICAgICAgICAgICAgdmFyIG9sZGVzdCA9IHRoaXMuX3RyaWdnZXJzWzBdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHRoaXMuX3RyaWdnZXJzLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJpZ2dlcnNbal0ucmVsZWFzZSA8IG9sZGVzdC5yZWxlYXNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb2xkZXN0ID0gdGhpcy5fdHJpZ2dlcnNbal07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgb2xkZXN0LnJlbGVhc2UgPSBJbmZpbml0eTtcblx0ICAgICAgICAgICAgb2xkZXN0Lm5vdGUgPSBKU09OLnN0cmluZ2lmeSh2YWwpO1xuXHQgICAgICAgICAgICBvbGRlc3Qudm9pY2UudHJpZ2dlckF0dGFjayh2YWwsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSBhZnRlciB0aGUgc3BlY2lmaWVkIGR1cmF0aW9uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fEFycmF5fSBub3RlcyBUaGUgbm90ZXMgdG8gcGxheS4gQWNjZXB0cyBhIHNpbmdsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW5jeSBvciBhbiBhcnJheSBvZiBmcmVxdWVuY2llcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZHVyYXRpb24gdGhlIGR1cmF0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIGlmIG5vIHRpbWUgaXMgZ2l2ZW4sIGRlZmF1bHRzIHRvIG5vd1xuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIGF0dGFjayAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgYSBjaG9yZCBmb3IgYSBkdXJhdGlvbiBvZiBhIGhhbGYgbm90ZVxuXHRcdCAqIHBvbHkudHJpZ2dlckF0dGFja1JlbGVhc2UoW1wiRWIzXCIsIFwiRzRcIiwgXCJDNVwiXSwgXCIyblwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NhbiBwYXNzIGluIGFuIGFycmF5IG9mIGR1cmF0aW9ucyBhcyB3ZWxsXG5cdFx0ICogcG9seS50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJFYjNcIiwgXCJHNFwiLCBcIkM1XCJdLCBbXCIyblwiLCBcIjRuXCIsIFwiNG5cIl0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGVzLCBkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKG5vdGVzLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheShkdXJhdGlvbikgJiYgVG9uZS5pc0FycmF5KG5vdGVzKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZCA9IGR1cmF0aW9uW01hdGgubWluKGksIGR1cmF0aW9uLmxlbmd0aCAtIDEpXTtcblx0ICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2Uobm90ZXNbaV0sIHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKG5vdGVzLCB0aW1lICsgdGhpcy50b1NlY29uZHMoZHVyYXRpb24pKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2Ugb2YgdGhlIG5vdGUuIFVubGlrZSBtb25vcGhvbmljIGluc3RydW1lbnRzLFxuXHRcdCAqICBhIG5vdGUgKG9yIGFycmF5IG9mIG5vdGVzKSBuZWVkcyB0byBiZSBwYXNzZWQgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l8QXJyYXl9IG5vdGVzIFRoZSBub3RlcyB0byBwbGF5LiBBY2NlcHRzIGEgc2luZ2xlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlcXVlbmN5IG9yIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICBXaGVuIHRoZSByZWxlYXNlIHdpbGwgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwb2x5LnRyaWdnZXJSZWxlYXNlKFtcIkFiM1wiLCBcIkM0XCIsIFwiRjVcIl0sIFwiKzJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGVzLCB0aW1lKSB7XG5cdCAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5vdGVzKSkge1xuXHQgICAgICAgICAgICBub3RlcyA9IFtub3Rlc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSB2b2ljZVxuXHQgICAgICAgICAgICB2YXIgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeShub3Rlc1tpXSk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIHYgPSAwOyB2IDwgdGhpcy5fdHJpZ2dlcnMubGVuZ3RoOyB2KyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5fdHJpZ2dlcnNbdl07XG5cdCAgICAgICAgICAgICAgICBpZiAoZGVzYy5ub3RlID09PSBzdHJpbmdpZmllZCAmJiBkZXNjLnJlbGVhc2UgPiB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZGVzYy52b2ljZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICBkZXNjLnJlbGVhc2UgPSB0aW1lO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogc3ludGguc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAwKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc4bicpXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAxKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgYSBtZW1iZXIvYXR0cmlidXRlIG9mIHRoZSB2b2ljZXMuXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fHN0cmluZ30gcGFyYW1zXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmFtcFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcG9seS5zZXQoe1xuXHRcdCAqIFx0XCJmaWx0ZXJcIiA6IHtcblx0XHQgKiBcdFx0XCJ0eXBlXCIgOiBcImhpZ2hwYXNzXCJcblx0XHQgKiBcdH0sXG5cdFx0ICogXHRcImVudmVsb3BlXCIgOiB7XG5cdFx0ICogXHRcdFwiYXR0YWNrXCIgOiAwLjI1XG5cdFx0ICogXHR9XG5cdFx0ICogfSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgdmFsdWUsIHJhbXBUaW1lKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLnZvaWNlc1tpXS5zZXQocGFyYW1zLCB2YWx1ZSwgcmFtcFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzeW50aCdzIGF0dHJpYnV0ZXMuIEdpdmVuIG5vIGFyZ3VtZW50cyBnZXRcblx0XHQgKiAgd2lsbCByZXR1cm4gYWxsIGF2YWlsYWJsZSBvYmplY3QgcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZ1xuXHRcdCAqICB2YWx1ZXMuIFBhc3MgaW4gYSBzaW5nbGUgYXR0cmlidXRlIHRvIHJldHJpZXZlIG9yIGFuIGFycmF5XG5cdFx0ICogIG9mIGF0dHJpYnV0ZXMuIFRoZSBhdHRyaWJ1dGUgc3RyaW5ncyBjYW4gYWxzbyBpbmNsdWRlIGEgXCIuXCJcblx0XHQgKiAgdG8gYWNjZXNzIGRlZXBlciBwcm9wZXJ0aWVzLlxuXHRcdCAqICBAcGFyYW0ge0FycmF5PX0gcGFyYW1zIHRoZSBwYXJhbWV0ZXJzIHRvIGdldCwgb3RoZXJ3aXNlIHdpbGwgcmV0dXJuXG5cdFx0ICogIFx0XHRcdFx0XHQgICBhbGwgYXZhaWxhYmxlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52b2ljZXNbMF0uZ2V0KHBhcmFtcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmUgdm9pY2VzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgbm90ZXMgc2hvdWxkIGJlIHJlbGVhc2VkLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnJlbGVhc2VBbGwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RyaWdnZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5fdHJpZ2dlcnNbaV07XG5cdCAgICAgICAgICAgIGlmIChkZXNjLnJlbGVhc2UgPiB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICBkZXNjLnJlbGVhc2UgPSB0aW1lO1xuXHQgICAgICAgICAgICAgICAgZGVzYy52b2ljZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLnZvaWNlc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2RldHVuZScpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2ljZXMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIG5vdGVzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZFxuXHRcdCAqICB0byBhIHBvbHlzeW50aC5cblx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLk1BWF9QT0xZUEhPTlkgPSAyMDtcblx0ICAgIHJldHVybiBUb25lLlBvbHlTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIEF1dG9tYXRpY2FsbHkgaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgcGl0Y2hlZCBzYW1wbGVzLiBQYXNzIGluIGFuIG9iamVjdCB3aGljaCBtYXBzIHRoZSBub3RlJ3MgcGl0Y2ggb3IgbWlkaSB2YWx1ZSB0byB0aGUgdXJsLCB0aGVuIHlvdSBjYW4gdHJpZ2dlciB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIG9mIHRoYXQgbm90ZSBsaWtlIG90aGVyIGluc3RydW1lbnRzLiBCeSBhdXRvbWF0aWNhbGx5IHJlcGl0Y2hpbmcgdGhlIHNhbXBsZXMsIGl0IGlzIHBvc3NpYmxlIHRvIHBsYXkgcGl0Y2hlcyB3aGljaCB3ZXJlIG5vdCBleHBsaWNpdGx5IGluY2x1ZGVkIHdoaWNoIGNhbiBzYXZlIGxvYWRpbmcgdGltZS5cblx0XHQgKiAgICAgICAgRm9yIHNhbXBsZSBvciBidWZmZXIgcGxheWJhY2sgd2hlcmUgcmVwaXRjaGluZyBpcyBub3QgbmVjZXNzYXJ5LCB1c2UgW1RvbmUuUGxheWVyXShodHRwczovL3RvbmVqcy5naXRodWIuaW8vZG9jcy9QbGF5ZXIpLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzYW1wbGVzIEFuIG9iamVjdCBvZiBzYW1wbGVzIG1hcHBpbmcgZWl0aGVyIE1pZGlcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIE51bWJlcnMgb3IgU2NpZW50aWZpYyBQaXRjaCBOb3RhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSB1cmwgb2YgdGhhdCBzYW1wbGUuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYWxsIG9mIHRoZSBzYW1wbGVzIGFyZSBsb2FkZWQuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmc9fSBiYXNlVXJsIFRoZSByb290IFVSTCBvZiBhbGwgb2YgdGhlIHNhbXBsZXMsIHdoaWNoIGlzIHByZXBlbmRlZCB0byBhbGwgdGhlIFVSTHMuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgc2FtcGxlciA9IG5ldyBUb25lLlNhbXBsZXIoe1xuXHRcdCAqIFx0XCJDM1wiIDogXCJwYXRoL3RvL0MzLm1wM1wiLFxuXHRcdCAqIFx0XCJEIzNcIiA6IFwicGF0aC90by9Ec2hhcnAzLm1wM1wiLFxuXHRcdCAqIFx0XCJGIzNcIiA6IFwicGF0aC90by9Gc2hhcnAzLm1wM1wiLFxuXHRcdCAqIFx0XCJBM1wiIDogXCJwYXRoL3RvL0EzLm1wM1wiLFxuXHRcdCAqIH0sIGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3NhbXBsZXIgd2lsbCByZXBpdGNoIHRoZSBjbG9zZXN0IHNhbXBsZVxuXHRcdCAqIFx0c2FtcGxlci50cmlnZ2VyQXR0YWNrKFwiRDNcIilcblx0XHQgKiB9KVxuXHRcdCAqIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIgPSBmdW5jdGlvbiAodXJscykge1xuXHQgICAgICAgIC8vIHNoaWZ0IGFyZ3VtZW50cyBvdmVyIG9uZS4gVGhvc2UgYXJlIHRoZSByZW1haW5kZXIgb2YgdGhlIG9wdGlvbnNcblx0ICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgYXJncy5zaGlmdCgpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmdzLCBbXG5cdCAgICAgICAgICAgICdvbmxvYWQnLFxuXHQgICAgICAgICAgICAnYmFzZVVybCdcblx0ICAgICAgICBdLCBUb25lLlNhbXBsZXIpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIHZhciB1cmxNYXAgPSB7fTtcblx0ICAgICAgICBmb3IgKHZhciBub3RlIGluIHVybHMpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNOb3RlKG5vdGUpKSB7XG5cdCAgICAgICAgICAgICAgICAvL2NvbnZlcnQgdGhlIG5vdGUgbmFtZSB0byBNSURJXG5cdCAgICAgICAgICAgICAgICB2YXIgbWlkID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgICAgICAgICB1cmxNYXBbbWlkXSA9IHVybHNbbm90ZV07XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKHBhcnNlRmxvYXQobm90ZSkpKSB7XG5cdCAgICAgICAgICAgICAgICAvL290aGVyd2lzZSBpZiBpdCdzIG51bWJlcnMgYXNzdW1lIGl0J3MgbWlkaVxuXHQgICAgICAgICAgICAgICAgdXJsTWFwW25vdGVdID0gdXJsc1tub3RlXTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5TYW1wbGVyOiB1cmwga2V5cyBtdXN0IGJlIHRoZSBub3RlXFwncyBwaXRjaCcpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHN0b3JlZCBhbmQgbG9hZGVkIGJ1ZmZlcnNcblx0XHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcnN9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVycyA9IG5ldyBUb25lLkJ1ZmZlcnModXJsTWFwLCBvcHRpb25zLm9ubG9hZCwgb3B0aW9ucy5iYXNlVXJsKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBvYmplY3Qgb2YgYWxsIGN1cnJlbnRseSBwbGF5aW5nIEJ1ZmZlclNvdXJjZXNcblx0XHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IHt9O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGVudmVsb3BlIGFwcGxpZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlLlxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG9wdGlvbnMuYXR0YWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGVudmVsb3BlIGFwcGxpZWQgdG8gdGhlIGVuZCBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNhbXBsZXIsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAY29uc3Rcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgIGF0dGFjazogMCxcblx0ICAgICAgICByZWxlYXNlOiAwLjEsXG5cdCAgICAgICAgb25sb2FkOiBUb25lLm5vT3AsXG5cdCAgICAgICAgYmFzZVVybDogJydcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGluIHN0ZXBzIGJldHdlZW4gdGhlIGdpdmVuIG1pZGkgbm90ZSBhdCB0aGUgY2xvc2V0cyBzYW1wbGUuXG5cdFx0ICogQHBhcmFtICB7TWlkaX0gbWlkaVxuXHRcdCAqIEByZXR1cm4ge0ludGVydmFsfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLl9maW5kQ2xvc2VzdCA9IGZ1bmN0aW9uIChtaWRpKSB7XG5cdCAgICAgICAgLy9zZWFyY2hlcyB3aXRoaW4gOCBvY3RhdmVzIG9mIHRoZSBnaXZlbiBtaWRpIG5vdGVcblx0ICAgICAgICB2YXIgTUFYX0lOVEVSVkFMID0gOTY7XG5cdCAgICAgICAgdmFyIGludGVydmFsID0gMDtcblx0ICAgICAgICB3aGlsZSAoaW50ZXJ2YWwgPCBNQVhfSU5URVJWQUwpIHtcblx0ICAgICAgICAgICAgLy8gY2hlY2sgYWJvdmUgYW5kIGJlbG93XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXJzLmhhcyhtaWRpICsgaW50ZXJ2YWwpKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLWludGVydmFsO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2J1ZmZlcnMuaGFzKG1pZGkgLSBpbnRlcnZhbCkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcnZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpbnRlcnZhbCsrO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHBsYXlcblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSAgICAgV2hlbiB0byBwbGF5IHRoZSBub3RlXG5cdFx0ICogQHBhcmFtICB7Tm9ybWFsUmFuZ2U9fSB2ZWxvY2l0eSBUaGUgdmVsb2NpdHkgdG8gcGxheSB0aGUgc2FtcGxlIGJhY2suXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfSAgICAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB2YXIgbWlkaSA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgIC8vIGZpbmQgdGhlIGNsb3Nlc3Qgbm90ZSBwaXRjaFxuXHQgICAgICAgIHZhciBkaWZmZXJlbmNlID0gdGhpcy5fZmluZENsb3Nlc3QobWlkaSk7XG5cdCAgICAgICAgaWYgKGRpZmZlcmVuY2UgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb3Nlc3ROb3RlID0gbWlkaSAtIGRpZmZlcmVuY2U7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9idWZmZXJzLmdldChjbG9zZXN0Tm90ZSk7XG5cdCAgICAgICAgICAgIC8vIHBsYXkgdGhhdCBub3RlXG5cdCAgICAgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2Uoe1xuXHQgICAgICAgICAgICAgICAgJ2J1ZmZlcic6IGJ1ZmZlcixcblx0ICAgICAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhkaWZmZXJlbmNlKSxcblx0ICAgICAgICAgICAgICAgICdmYWRlSW4nOiB0aGlzLmF0dGFjayxcblx0ICAgICAgICAgICAgICAgICdmYWRlT3V0JzogdGhpcy5yZWxlYXNlLFxuXHQgICAgICAgICAgICAgICAgJ2N1cnZlJzogJ2V4cG9uZW50aWFsJ1xuXHQgICAgICAgICAgICB9KS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgc291cmNlLnN0YXJ0KHRpbWUsIDAsIGJ1ZmZlci5kdXJhdGlvbiwgdmVsb2NpdHkpO1xuXHQgICAgICAgICAgICAvLyBhZGQgaXQgdG8gdGhlIGFjdGl2ZSBzb3VyY2VzXG5cdCAgICAgICAgICAgIGlmICghVG9uZS5pc0FycmF5KHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0pKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5wdXNoKHtcblx0ICAgICAgICAgICAgICAgIG5vdGU6IG1pZGksXG5cdCAgICAgICAgICAgICAgICBzb3VyY2U6IHNvdXJjZVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byByZWxlYXNlLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBcdFdoZW4gdG8gcmVsZWFzZSB0aGUgbm90ZS5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9XHR0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUpIHtcblx0ICAgICAgICB2YXIgbWlkaSA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgIC8vIGZpbmQgdGhlIG5vdGVcblx0ICAgICAgICBpZiAodGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXSAmJiB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLmxlbmd0aCkge1xuXHQgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5zaGlmdCgpLnNvdXJjZTtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lICsgdGhpcy5yZWxlYXNlLCB0aGlzLnJlbGVhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZWxlYXNlIGFsbCBjdXJyZW50bHkgYWN0aXZlIG5vdGVzLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBcdFdoZW4gdG8gcmVsZWFzZSB0aGUgbm90ZXMuXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfVx0dGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5yZWxlYXNlQWxsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgbm90ZSBpbiB0aGlzLl9hY3RpdmVTb3VyY2VzKSB7XG5cdCAgICAgICAgICAgIHZhciBzb3VyY2VzID0gdGhpcy5fYWN0aXZlU291cmNlc1tub3RlXTtcblx0ICAgICAgICAgICAgd2hpbGUgKHNvdXJjZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gc291cmNlcy5zaGlmdCgpLnNvdXJjZTtcblx0ICAgICAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUgKyB0aGlzLnJlbGVhc2UsIHRoaXMucmVsZWFzZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAxKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZSB0aGUgYXR0YWNrIHBoYXNlLCB0aGVuIGFmdGVyIHRoZSBkdXJhdGlvbiwgaW52b2tlIHRoZSByZWxlYXNlLlxuXHRcdCAqIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gcGxheVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIFRoZSB0aW1lIHRoZSBub3RlIHNob3VsZCBiZSBoZWxkXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFdoZW4gdG8gc3RhcnQgdGhlIGF0dGFja1xuXHRcdCAqIEBwYXJhbSAge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IG9mIHRoZSBhdHRhY2tcblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9ICAgICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAobm90ZSwgZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayhub3RlLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZShub3RlLCB0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBub3RlIHRvIHRoZSBzYW1wbGVyLlxuXHRcdCAqICBAcGFyYW0gIHtOb3RlfE1pZGl9ICAgbm90ZSAgICAgIFRoZSBidWZmZXIncyBwaXRjaC5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfFRvbmUuQnVmZmVyfEF1ZGlvYnVmZmVyfSAgdXJsICBFaXRoZXIgdGhlIHVybCBvZiB0aGUgYnVmZXIsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhZGRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobm90ZSwgdXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGlmIChUb25lLmlzTm90ZShub3RlKSkge1xuXHQgICAgICAgICAgICAvL2NvbnZlcnQgdGhlIG5vdGUgbmFtZSB0byBNSURJXG5cdCAgICAgICAgICAgIHZhciBtaWQgPSBUb25lLkZyZXF1ZW5jeShub3RlKS50b01pZGkoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVycy5hZGQobWlkLCB1cmwsIGNhbGxiYWNrKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKCFpc05hTihwYXJzZUZsb2F0KG5vdGUpKSkge1xuXHQgICAgICAgICAgICAvL290aGVyd2lzZSBpZiBpdCdzIG51bWJlcnMgYXNzdW1lIGl0J3MgbWlkaVxuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzLmFkZChub3RlLCB1cmwsIGNhbGxiYWNrKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuU2FtcGxlcjogbm90ZSBtdXN0IGJlIHRoZSBub3RlXFwncyBwaXRjaC4gSW5zdGVhZCBnb3QgJyArIG5vdGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVycyBhcmUgbG9hZGVkIG9yIG5vdFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNhbXBsZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TYW1wbGVyLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcnMubG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXJzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBtaWRpIGluIHRoaXMuX2FjdGl2ZVNvdXJjZXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuc291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNhbXBsZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFBlcmlvZGljV2F2ZSkge1xuXHQgICAgICAgICAgICBPc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0UGVyaW9kaWNXYXZlID0gT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFdhdmVUYWJsZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVBlcmlvZGljV2F2ZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVBlcmlvZGljV2F2ZSA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlV2F2ZVRhYmxlO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1hcHMgYSBOb3JtYWxSYW5nZSBbMCwgMV0gdG8gYW4gQXVkaW9SYW5nZSBbLTEsIDFdLiBcblx0XHQgKiAgICAgICAgIFNlZSBhbHNvIFRvbmUuQXVkaW9Ub0dhaW4uIFxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBnMmEgPSBuZXcgVG9uZS5HYWluVG9BdWRpbygpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluVG9BdWRpbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25vcm0gPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh4KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh4KSAqIDIgLSAxO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR2FpblRvQXVkaW8sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR2FpblRvQXVkaW99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR2FpblRvQXVkaW8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbm9ybS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR2FpblRvQXVkaW87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBOb3JtYWxpemUgdGFrZXMgYW4gaW5wdXQgbWluIGFuZCBtYXggYW5kIG1hcHMgaXQgbGluZWFybHkgdG8gTm9ybWFsUmFuZ2UgWzAsMV1cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IGlucHV0TWluIHRoZSBtaW4gaW5wdXQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IGlucHV0TWF4IHRoZSBtYXggaW5wdXQgdmFsdWVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbm9ybSA9IG5ldyBUb25lLk5vcm1hbGl6ZSgyLCA0KTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDMpLmNvbm5lY3Qobm9ybSk7XG5cdFx0ICogLy9vdXRwdXQgb2Ygbm9ybSBpcyAwLjUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob3JtYWxpemUgPSBmdW5jdGlvbiAoaW5wdXRNaW4sIGlucHV0TWF4KSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1pbiBpbnB1dCB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2lucHV0TWluID0gVG9uZS5kZWZhdWx0QXJnKGlucHV0TWluLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWF4IGlucHV0IHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5wdXRNYXggPSBUb25lLmRlZmF1bHRBcmcoaW5wdXRNYXgsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHN1YnRyYWN0IHRoZSBtaW4gZnJvbSB0aGUgaW5wdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5BZGQoMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZGl2aWRlIGJ5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGlucHV0IGFuZCBvdXRwdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGl2ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NdWx0aXBseSgxKTtcblx0ICAgICAgICB0aGlzLl9zdWIuY29ubmVjdCh0aGlzLl9kaXYpO1xuXHQgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Ob3JtYWxpemUsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSB2YWx1ZSB0aGUgaW5wdXQgc2lnbmFsIHdpbGwgcmVhY2guXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTm9ybWFsaXplI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRNaW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5faW5wdXRNaW4gPSBtaW47XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSB2YWx1ZSB0aGUgaW5wdXQgc2lnbmFsIHdpbGwgcmVhY2guXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTm9ybWFsaXplI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRNYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faW5wdXRNYXggPSBtYXg7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgc2V0IHRoZSB2YWx1ZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9ybWFsaXplLnByb3RvdHlwZS5fc2V0UmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3ViLnZhbHVlID0gLXRoaXMuX2lucHV0TWluO1xuXHQgICAgICAgIHRoaXMuX2Rpdi52YWx1ZSA9IDEgLyAodGhpcy5faW5wdXRNYXggLSB0aGlzLl9pbnB1dE1pbik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vcm1hbGl6ZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3ViLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdWIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Rpdi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGl2ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Ob3JtYWxpemU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsIGV4dGVuZHMgVG9uZS5TaWduYWwsIGJ1dCBhZGRzIHRoZSBhYmlsaXR5IHRvIHN5bmNocm9uaXplIHRoZSBzaWduYWwgdG8gdGhlIHNpZ25hbCB0byB0aGUgVG9uZS5UcmFuc3BvcnRcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcmVhbCBzaWduYWwgb3V0cHV0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLl9vdXRwdXRTaWcgPSBuZXcgVG9uZS5TaWduYWwodGhpcy5faW5pdGlhbFZhbHVlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEtlZXAgdHJhY2sgb2YgdGhlIGxhc3QgdmFsdWUuIChzbWFsbCBvcHRpbWl6YXRpb24pXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xhc3RWYWwgPSB0aGlzLnZhbHVlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGV2ZW50IGlkIG9mIHRoZSB0aWNrIHVwZGF0ZSBsb29wXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KHRoaXMuX29uVGljay5iaW5kKHRoaXMpLCAnMWknKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEEgYm91bmQgdmVyc2lvbiBvZiB0aGUgYW5jaG9yIHZhbHVlIG1ldGhvZHNcblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iaW5kQW5jaG9yVmFsdWUgPSB0aGlzLl9hbmNob3JWYWx1ZS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9uKCdzdGFydCBzdG9wIHBhdXNlJywgdGhpcy5fYmluZEFuY2hvclZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMubWVtb3J5ID0gSW5maW5pdHk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogQ2FsbGJhY2sgd2hpY2ggaXMgaW52b2tlZCBldmVyeSB0aWNrLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5fb25UaWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICBpZiAodGhpcy5fbGFzdFZhbCAhPT0gdmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xhc3RWYWwgPSB2YWw7XG5cdCAgICAgICAgICAgIC8vYXBwcm94aW1hdGUgcmFtcCBjdXJ2ZXMgd2l0aCBsaW5lYXIgcmFtcHNcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0U2lnLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbCwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEFuY2hvciB0aGUgdmFsdWUgYXQgdGhlIHN0YXJ0IGFuZCBzdG9wIG9mIHRoZSBUcmFuc3BvcnRcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWUgVGhlIHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICB0aGlzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLl9hbmNob3JWYWx1ZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHZhbCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoVG9uZS5UcmFuc3BvcnQuc2Vjb25kcyk7XG5cdCAgICAgICAgdGhpcy5fbGFzdFZhbCA9IHZhbDtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZy5zZXRWYWx1ZUF0VGltZSh2YWwsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gVGhpcyB3aWxsXG5cdFx0ICogIHJldHVybiB0aGUgdW5jb252ZXJ0ZWQgKHJhdykgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9ICB0aW1lICBUaGUgdGltZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgVGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiBUb25lLlNpZ25hbC5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTZXQgdGhlIG91dHB1dCBvZiB0aGUgc2lnbmFsIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hhbmdlIHRvIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gdGltZSAgVGhlIHRpbWUgdG8gY2hhbmdlIHRoZSBzaWduYWxcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIExpbmVhciByYW1wIHRvIHRoZSBnaXZlbiB2YWx1ZSBmcm9tIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcG9pbnQgdG8gdGhlIGdpdmVuIHZhbHVlXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hhbmdlIHRvIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gdGltZSAgVGhlIHRpbWUgdG8gY2hhbmdlIHRoZSBzaWduYWxcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEV4cG9uZW50aWFsIHJhbXAgdG8gdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwb2ludCB0byB0aGUgZ2l2ZW4gdmFsdWVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGFuZ2UgdG8gYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSB0aW1lICBUaGUgdGltZSB0byBjaGFuZ2UgdGhlIHNpZ25hbFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUgd2l0aFxuXHRcdCAqICBhIHJhdGUgaGF2aW5nIHRoZSBnaXZlbiB0aW1lIGNvbnN0YW50LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHRpbWVDb25zdGFudFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLnNldFRhcmdldEF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VscyBhbGwgc2NoZWR1bGVkIHBhcmFtZXRlciBjaGFuZ2VzIHdpdGggdGltZXMgZ3JlYXRlciB0aGFuIG9yXG5cdFx0ICogIGVxdWFsIHRvIHN0YXJ0VGltZS5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMgPSBmdW5jdGlvbiAoc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcy5jYWxsKHRoaXMsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCBhbiBhcnJheSBvZiBhcmJpdHJhcnkgdmFsdWVzIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiB0aW1lIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb24uXG5cdFx0ICogIEBwYXJhbSB7RmxvYXQzMkFycmF5fSB2YWx1ZXNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBkdXJhdGlvblxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc2NhbGluZz0xXSBJZiB0aGUgdmFsdWVzIGluIHRoZSBjdXJ2ZSBzaG91bGQgYmUgc2NhbGVkIGJ5IHNvbWUgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUN1cnZlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlcywgc3RhcnRUaW1lLCBkdXJhdGlvbiwgc2NhbGluZykge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gVG9uZS5UcmFuc3BvcnRUaW1lKGR1cmF0aW9uKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVDdXJ2ZUF0VGltZS5jYWxsKHRoaXMsIHZhbHVlcywgc3RhcnRUaW1lLCBkdXJhdGlvbiwgc2NhbGluZyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoaXMgaXMgc2ltaWxhciB0byBbY2FuY2VsU2NoZWR1bGVkVmFsdWVzXSgjY2FuY2VsU2NoZWR1bGVkVmFsdWVzKSBleGNlcHRcblx0XHQgKiAgaXQgaG9sZHMgdGhlIGF1dG9tYXRlZCB2YWx1ZSBhdCB0aW1lIHVudGlsIHRoZSBuZXh0IGF1dG9tYXRlZCBldmVudC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuY2FuY2VsQW5kSG9sZEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxBbmRIb2xkQXRUaW1lLmNhbGwodGhpcywgVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBEaXNwb3NlIGFuZCBkaXNjb25uZWN0XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9zeW5jZWQpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9mZignc3RhcnQgc3RvcCBwYXVzZScsIHRoaXMuX3N5bmNlZENhbGxiYWNrKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKDApO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fb3V0cHV0U2lnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgVG9uZS5HcmFpblBsYXllciBpbXBsZW1lbnRzIFtncmFudWxhciBzeW50aGVzaXNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dyYW51bGFyX3N5bnRoZXNpcykuXG5cdFx0ICogICAgICAgIEdyYW51bGFyIFN5bnRoZXNpcyBlbmFibGVzIHlvdSB0byBhZGp1c3QgcGl0Y2ggYW5kIHBsYXliYWNrIHJhdGUgaW5kZXBlbmRlbnRseS4gVGhlIGdyYWluU2l6ZSBpcyB0aGVcblx0XHQgKiAgICAgICAgYW1vdW50IG9mIHRpbWUgZWFjaCBzbWFsbCBjaHVuayBvZiBhdWRpbyBpcyBwbGF5ZWQgZm9yIGFuZCB0aGUgb3ZlcmxhcCBpcyB0aGVcblx0XHQgKiAgICAgICAgYW1vdW50IG9mIGNyb3NzZmFkaW5nIHRyYW5zaXRpb24gdGltZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgZ3JhaW5zLlxuXHRcdCAqIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiBAcGFyYW0ge1N0cmluZ3xUb25lLkJ1ZmZlcn0gdXJsXHRUaGUgdXJsIHRvIGxvYWQsIG9yIHRoZSBUb25lLkJ1ZmZlciB0byBwbGF5LlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgIF0sIFRvbmUuR3JhaW5QbGF5ZXIpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGF1ZGlvIGJ1ZmZlciBiZWxvbmdpbmcgdG8gdGhlIHBsYXllci5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIob3B0aW9ucy51cmwsIG9wdGlvbnMub25sb2FkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBDcmVhdGUgYSByZXBlYXRpbmcgdGljayB0byBzY2hlZHVsZVxuXHRcdFx0ICogIHRoZSBncmFpbnMuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNsb2NrfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jbG9jayA9IG5ldyBUb25lLkNsb2NrKHRoaXMuX3RpY2suYmluZCh0aGlzKSwgb3B0aW9ucy5ncmFpblNpemUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wRW5kID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEFsbCBvZiB0aGUgY3VycmVudGx5IHBsYXlpbmcgQnVmZmVyU291cmNlc1xuXHRcdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dyYWluU2l6ZSA9IG9wdGlvbnMuZ3JhaW5TaXplO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX292ZXJsYXAgPSBvcHRpb25zLm92ZXJsYXA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWRqdXN0IHRoZSBwaXRjaCBpbmRlcGVuZGVudGx5IG9mIHRoZSBwbGF5YmFja1JhdGUuXG5cdFx0XHQgKiAgQHR5cGUgIHtDZW50c31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gb3B0aW9ucy5kZXR1bmU7XG5cdCAgICAgICAgLy9zZXR1cFxuXHQgICAgICAgIHRoaXMub3ZlcmxhcCA9IG9wdGlvbnMub3ZlcmxhcDtcblx0ICAgICAgICB0aGlzLmxvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICB0aGlzLmdyYWluU2l6ZSA9IG9wdGlvbnMuZ3JhaW5TaXplO1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gb3B0aW9ucy5sb29wU3RhcnQ7XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gb3B0aW9ucy5sb29wRW5kO1xuXHQgICAgICAgIHRoaXMucmV2ZXJzZSA9IG9wdGlvbnMucmV2ZXJzZTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbignc3RvcCcsIHRoaXMuX29uc3RvcC5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdyYWluUGxheWVyLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdvdmVybGFwJzogMC4xLFxuXHQgICAgICAgICdncmFpblNpemUnOiAwLjIsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAnbG9vcEVuZCc6IDAsXG5cdCAgICAgICAgJ3JldmVyc2UnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQbGF5IHRoZSBidWZmZXIgYXQgdGhlIGdpdmVuIHN0YXJ0VGltZS4gT3B0aW9uYWxseSBhZGQgYW4gb2Zmc2V0XG5cdFx0ICogIGFuZC9vciBkdXJhdGlvbiB3aGljaCB3aWxsIHBsYXkgdGhlIGJ1ZmZlciBmcm9tIGEgcG9zaXRpb25cblx0XHQgKiAgd2l0aGluIHRoZSBidWZmZXIgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbc3RhcnRUaW1lPW5vd10gV2hlbiB0aGUgcGxheWVyIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW29mZnNldD0wXSBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBzYW1wbGUgc2hvdWxkIHBsYXkuIElmIG5vIGR1cmF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdpdmVuLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZ1bGwgbGVuZ3RoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzYW1wbGUgKG1pbnVzIGFueSBvZmZzZXQpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdyYWluUGxheWVyfSB0aGlzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqICBAbWV0aG9kIHN0YXJ0XG5cdFx0ICogIEBuYW1lIHN0YXJ0XG5cdFx0ICovXG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IG9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vZmZzZXQgPSBvZmZzZXQ7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suc3RhcnQodGltZSk7XG5cdCAgICAgICAgaWYgKGR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcCh0aW1lICsgdGhpcy50b1NlY29uZHMoZHVyYXRpb24pKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZWQgd2hlbiB0aGUgY2xvY2sgaXMgc3RvcHBlZFxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fb25zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL3N0b3AgdGhlIHBsYXllcnNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lLCAwKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW52b2tlZCBvbiBlYWNoIGNsb2NrIHRpY2suIHNjaGVkdWxlZCBhIG5ld1xuXHRcdCAqICBncmFpbiBhdCB0aGlzIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGZhZGVJbiA9IHRoaXMuX29mZnNldCA8IHRoaXMuX292ZXJsYXAgPyAwIDogdGhpcy5fb3ZlcmxhcDtcblx0ICAgICAgICB2YXIgc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKHtcblx0ICAgICAgICAgICAgJ2J1ZmZlcic6IHRoaXMuYnVmZmVyLFxuXHQgICAgICAgICAgICAnZmFkZUluJzogZmFkZUluLFxuXHQgICAgICAgICAgICAnZmFkZU91dCc6IHRoaXMuX292ZXJsYXAsXG5cdCAgICAgICAgICAgICdsb29wJzogdGhpcy5sb29wLFxuXHQgICAgICAgICAgICAnbG9vcFN0YXJ0JzogdGhpcy5fbG9vcFN0YXJ0LFxuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IHRoaXMuX2xvb3BFbmQsXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyh0aGlzLmRldHVuZSAvIDEwMClcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICBzb3VyY2Uuc3RhcnQodGltZSwgdGhpcy5fb2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLl9vZmZzZXQgKz0gdGhpcy5ncmFpblNpemU7XG5cdCAgICAgICAgc291cmNlLnN0b3AodGltZSArIHRoaXMuZ3JhaW5TaXplKTtcblx0ICAgICAgICAvL2FkZCBpdCB0byB0aGUgYWN0aXZlIHNvdXJjZXNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnB1c2goc291cmNlKTtcblx0ICAgICAgICAvL3JlbW92ZSBpdCB3aGVuIGl0J3MgZG9uZVxuXHQgICAgICAgIHNvdXJjZS5vbmVuZGVkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9hY3RpdmVTb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblx0ICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBKdW1wIHRvIGEgc3BlY2lmaWMgdGltZSBhbmQgcGxheSBpdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIG9mZnNldCAgVGhlIG9mZnNldCB0byBqdW1wIHRvLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSB0aW1lIFdoZW4gdG8gbWFrZSB0aGUganVtcC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuR3JhaW5QbGF5ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24gKG9mZnNldCwgdGltZSkge1xuXHQgICAgICAgIHRoaXMuX29mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgdGhpcy5fdGljayh0aGlzLnRvU2Vjb25kcyh0aW1lKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIHNhbXBsZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdGhpcy5ncmFpblNpemUgPSB0aGlzLl9ncmFpblNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbG9vcCBzdGFydCB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBsb29wIGVuZCB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGlyZWN0aW9uIHRoZSBidWZmZXIgc2hvdWxkIHBsYXkgaW5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSByZXZlcnNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdyZXZlcnNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXIucmV2ZXJzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJldikge1xuXHQgICAgICAgICAgICB0aGlzLmJ1ZmZlci5yZXZlcnNlID0gcmV2O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNpemUgb2YgZWFjaCBjaHVuayBvZiBhdWRpbyB0aGF0IHRoZVxuXHRcdCAqIGJ1ZmZlciBpcyBjaG9wcGVkIGludG8gYW5kIHBsYXllZCBiYWNrIGF0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGdyYWluU2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnZ3JhaW5TaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ3JhaW5TaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9ncmFpblNpemUgPSB0aGlzLnRvU2Vjb25kcyhzaXplKTtcblx0ICAgICAgICAgICAgdGhpcy5fY2xvY2suZnJlcXVlbmN5LnZhbHVlID0gdGhpcy5fcGxheWJhY2tSYXRlIC8gdGhpcy5fZ3JhaW5TaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhpcyBpcyB0aGUgZHVyYXRpb24gb2YgdGhlIGNyb3NzLWZhZGUgYmV0d2VlblxuXHRcdCAqIHN1Y2Vzc2l2ZSBncmFpbnMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgb3ZlcmxhcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnb3ZlcmxhcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX292ZXJsYXA7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX292ZXJsYXAgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5HcmFpblBsYXllcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdyYWluUGxheWVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGxheWVyIGlzIGFuIGF1ZGlvIGZpbGUgcGxheWVyIHdpdGggc3RhcnQsIGxvb3AsIGFuZCBzdG9wIGZ1bmN0aW9ucy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ3xBdWRpb0J1ZmZlcn0gdXJsIEVpdGhlciB0aGUgQXVkaW9CdWZmZXIgb3IgdGhlIHVybCBmcm9tXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggdG8gbG9hZCB0aGUgQXVkaW9CdWZmZXJcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBUaGUgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjb21tZW5kZWQgdG8gdXNlIFRvbmUuQnVmZmVyLm9uKCdsb2FkJykgaW5zdGVhZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGxheWVyID0gbmV3IFRvbmUuUGxheWVyKFwiLi9wYXRoL3RvL3NhbXBsZS5tcDNcIikudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3BsYXkgYXMgc29vbiBhcyB0aGUgYnVmZmVyIGlzIGxvYWRlZFxuXHRcdCAqIHBsYXllci5hdXRvc3RhcnQgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIgPSBmdW5jdGlvbiAodXJsKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnM7XG5cdCAgICAgICAgaWYgKHVybCBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyICYmIHVybC5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgdXJsID0gdXJsLmdldCgpO1xuXHQgICAgICAgICAgICBvcHRpb25zID0gVG9uZS5QbGF5ZXIuZGVmYXVsdHM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgICAgICdvbmxvYWQnXG5cdCAgICAgICAgICAgIF0sIFRvbmUuUGxheWVyKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiB0aGUgZmlsZSBzaG91bGQgcGxheSBhcyBzb29uXG5cdFx0XHQgKiAgYXMgdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vd2lsbCBwbGF5IGFzIHNvb24gYXMgaXQncyBsb2FkZWRcblx0XHRcdCAqIHZhciBwbGF5ZXIgPSBuZXcgVG9uZS5QbGF5ZXIoe1xuXHRcdFx0ICogXHRcInVybFwiIDogXCIuL3BhdGgvdG8vc2FtcGxlLm1wM1wiLFxuXHRcdFx0ICogXHRcImF1dG9zdGFydFwiIDogdHJ1ZSxcblx0XHRcdCAqIH0pLnRvTWFzdGVyKCk7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF1dG9zdGFydCA9IG9wdGlvbnMuYXV0b3N0YXJ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBidWZmZXJcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcih7XG5cdCAgICAgICAgICAgICd1cmwnOiBvcHRpb25zLnVybCxcblx0ICAgICAgICAgICAgJ29ubG9hZCc6IHRoaXMuX29ubG9hZC5iaW5kKHRoaXMsIG9wdGlvbnMub25sb2FkKSxcblx0ICAgICAgICAgICAgJ3JldmVyc2UnOiBvcHRpb25zLnJldmVyc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgQXVkaW9CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldCh1cmwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpZiB0aGUgYnVmZmVyIHNob3VsZCBsb29wIG9uY2UgaXQncyBvdmVyXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaWYgJ2xvb3AnIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgc3RhcnQgYXQgdGhpcyBwb3NpdGlvblxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSBvcHRpb25zLmxvb3BTdGFydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpZiAnbG9vcCcgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBlbmQgYXQgdGhpcyBwb3NpdGlvblxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wRW5kID0gb3B0aW9ucy5sb29wRW5kO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwbGF5YmFjayByYXRlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxsIG9mIHRoZSBhY3RpdmUgYnVmZmVyIHNvdXJjZSBub2Rlc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheTxUb25lLkJ1ZmZlclNvdXJjZT59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZWxhcHNlZCB0aW1lIGNvdW50ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGlja1NvdXJjZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSBuZXcgVG9uZS5UaWNrU291cmNlKG9wdGlvbnMucGxheWJhY2tSYXRlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZUluIHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZUluID0gb3B0aW9ucy5mYWRlSW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZhZGVPdXQgdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlT3V0ID0gb3B0aW9ucy5mYWRlT3V0O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGxheWVyLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdhdXRvc3RhcnQnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAnbG9vcEVuZCc6IDAsXG5cdCAgICAgICAgJ3JldHJpZ2dlcic6IGZhbHNlLFxuXHQgICAgICAgICdyZXZlcnNlJzogZmFsc2UsXG5cdCAgICAgICAgJ2ZhZGVJbic6IDAsXG5cdCAgICAgICAgJ2ZhZGVPdXQnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIExvYWQgdGhlIGF1ZGlvIGZpbGUgYXMgYW4gYXVkaW8gYnVmZmVyLlxuXHRcdCAqICBEZWNvZGVzIHRoZSBhdWRpbyBhc3luY2hyb25vdXNseSBhbmQgaW52b2tlc1xuXHRcdCAqICB0aGUgY2FsbGJhY2sgb25jZSB0aGUgYXVkaW8gYnVmZmVyIGxvYWRzLlxuXHRcdCAqICBOb3RlOiB0aGlzIGRvZXMgbm90IG5lZWQgdG8gYmUgY2FsbGVkIGlmIGEgdXJsXG5cdFx0ICogIHdhcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVjdG9yLiBPbmx5IHVzZSB0aGlzXG5cdFx0ICogIGlmIHlvdSB3YW50IHRvIG1hbnVhbGx5IGxvYWQgYSBuZXcgdXJsLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgYnVmZmVyIHRvIGxvYWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICBGaWxldHlwZSBzdXBwb3J0IGRlcGVuZHMgb24gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICBicm93c2VyLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBpbnZva2Ugb25jZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzYW1wbGUgaXMgbG9hZGVkLlxuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmxvYWQodXJsLCB0aGlzLl9vbmxvYWQuYmluZCh0aGlzLCBjYWxsYmFjaykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludGVybmFsIGNhbGxiYWNrIHdoZW4gdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fb25sb2FkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgY2FsbGJhY2sgPSBUb25lLmRlZmF1bHRBcmcoY2FsbGJhY2ssIFRvbmUubm9PcCk7XG5cdCAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuYXV0b3N0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RhcnQoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW50ZXJuYWwgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGRvbmUgcGxheWluZy5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9vblNvdXJjZUVuZCA9IGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9hY3RpdmVTb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBsYXkgdGhlIGJ1ZmZlciBhdCB0aGUgZ2l2ZW4gc3RhcnRUaW1lLiBPcHRpb25hbGx5IGFkZCBhbiBvZmZzZXRcblx0XHQgKiAgYW5kL29yIGR1cmF0aW9uIHdoaWNoIHdpbGwgcGxheSB0aGUgYnVmZmVyIGZyb20gYSBwb3NpdGlvblxuXHRcdCAqICB3aXRoaW4gdGhlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiAgQG1ldGhvZCBzdGFydFxuXHRcdCAqICBAbmFtZSBzdGFydFxuXHRcdCAqL1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICAvL2lmIGl0J3MgYSBsb29wIHRoZSBkZWZhdWx0IG9mZnNldCBpcyB0aGUgbG9vcHN0YXJ0IHBvaW50XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgdGhpcy5fbG9vcFN0YXJ0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL290aGVyd2lzZSB0aGUgZGVmYXVsdCBvZmZzZXQgaXMgMFxuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jb21wdXRlIHRoZSB2YWx1ZXMgaW4gc2Vjb25kc1xuXHQgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgdmFyIGNvbXB1dGVkRHVyYXRpb24gPSBUb25lLmRlZmF1bHRBcmcoZHVyYXRpb24sIE1hdGgubWF4KHRoaXMuX2J1ZmZlci5kdXJhdGlvbiAtIG9mZnNldCwgMCkpO1xuXHQgICAgICAgIGNvbXB1dGVkRHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhjb21wdXRlZER1cmF0aW9uKTtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGVsYXBzZWQgdGltZSBjb3VudGVyXG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuc3RhcnQoc3RhcnRUaW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgc291cmNlXG5cdCAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBUb25lLkJ1ZmZlclNvdXJjZSh7XG5cdCAgICAgICAgICAgICdidWZmZXInOiB0aGlzLl9idWZmZXIsXG5cdCAgICAgICAgICAgICdsb29wJzogdGhpcy5fbG9vcCxcblx0ICAgICAgICAgICAgJ2xvb3BTdGFydCc6IHRoaXMuX2xvb3BTdGFydCxcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiB0aGlzLl9sb29wRW5kLFxuXHQgICAgICAgICAgICAnb25lbmRlZCc6IHRoaXMuX29uU291cmNlRW5kLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiB0aGlzLl9wbGF5YmFja1JhdGUsXG5cdCAgICAgICAgICAgICdmYWRlSW4nOiB0aGlzLmZhZGVJbixcblx0ICAgICAgICAgICAgJ2ZhZGVPdXQnOiB0aGlzLmZhZGVPdXRcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL3NldCB0aGUgbG9vcGluZyBwcm9wZXJ0aWVzXG5cdCAgICAgICAgaWYgKCF0aGlzLl9sb29wICYmICF0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgLy9pZiBpdCdzIG5vdCBsb29waW5nLCBzZXQgdGhlIHN0YXRlIGNoYW5nZSBhdCB0aGUgZW5kIG9mIHRoZSBzYW1wbGVcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBzdGFydFRpbWUgKyBjb21wdXRlZER1cmF0aW9uIC8gdGhpcy5fcGxheWJhY2tSYXRlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hZGQgaXQgdG8gdGhlIGFycmF5IG9mIGFjdGl2ZSBzb3VyY2VzXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5wdXNoKHNvdXJjZSk7XG5cdCAgICAgICAgLy9zdGFydCBpdFxuXHQgICAgICAgIGlmICh0aGlzLl9sb29wICYmIFRvbmUuaXNVbmRlZihkdXJhdGlvbikpIHtcblx0ICAgICAgICAgICAgc291cmNlLnN0YXJ0KHN0YXJ0VGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RhcnQoc3RhcnRUaW1lLCBvZmZzZXQsIGNvbXB1dGVkRHVyYXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCBwbGF5YmFjay5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgc291cmNlLnN0b3AodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCBhbmQgdGhlbiByZXN0YXJ0IHRoZSBwbGF5ZXIgZnJvbSB0aGUgYmVnaW5uaW5nIChvciBvZmZzZXQpXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGFydCh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2VlayB0byBhIHNwZWNpZmljIHRpbWUgaW4gdGhlIHBsYXllcidzIGJ1ZmZlci4gSWYgdGhlXG5cdFx0ICogIHNvdXJjZSBpcyBubyBsb25nZXIgcGxheWluZyBhdCB0aGF0IHRpbWUsIGl0IHdpbGwgc3RvcC5cblx0XHQgKiAgSWYgeW91IHNlZWsgdG8gYSB0aW1lIHRoYXRcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBvZmZzZXQgVGhlIHRpbWUgdG8gc2VlayB0by5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gdGltZSBUaGUgdGltZSBmb3IgdGhlIHNlZWsgZXZlbnQgdG8gb2NjdXIuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0YXJ0KDAuMik7XG5cdFx0ICogc291cmNlLnN0b3AoMC40KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24gKG9mZnNldCwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgICAgICAvLyBpZiBpdCdzIGN1cnJlbnRseSBwbGF5aW5nLCBzdG9wIGl0XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3AodGltZSk7XG5cdCAgICAgICAgICAgIC8vcmVzdGFydCBpdCBhdCB0aGUgZ2l2ZW4gdGltZVxuXHQgICAgICAgICAgICB0aGlzLl9zdGFydCh0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBsb29wIHN0YXJ0IGFuZCBlbmQuIFdpbGwgb25seSBsb29wIGlmIGxvb3AgaXNcblx0XHQgKiAgc2V0IHRvIHRydWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gbG9vcFN0YXJ0IFRoZSBsb29wIGVuZCB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gbG9vcEVuZCBUaGUgbG9vcCBlbmQgdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xvb3AgMC4xIHNlY29uZHMgb2YgdGhlIGZpbGUuXG5cdFx0ICogcGxheWVyLnNldExvb3BQb2ludHMoMC4yLCAwLjMpO1xuXHRcdCAqIHBsYXllci5sb29wID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5zZXRMb29wUG9pbnRzID0gZnVuY3Rpb24gKGxvb3BTdGFydCwgbG9vcEVuZCkge1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gbG9vcFN0YXJ0O1xuXHQgICAgICAgIHRoaXMubG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgbG9vcCBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIHN0YXJ0IGF0IHRoaXMgcG9zaXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSBjdXJyZW50IHNvdXJjZVxuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgc291cmNlLmxvb3BTdGFydCA9IGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgZW5kIGF0IHRoaXMgcG9zaXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSBjdXJyZW50IHNvdXJjZVxuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgc291cmNlLmxvb3BFbmQgPSBsb29wRW5kO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhdWRpbyBidWZmZXIgYmVsb25naW5nIHRvIHRoZSBwbGF5ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHQgKiBAbmFtZSBidWZmZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdidWZmZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChidWZmZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlciBzaG91bGQgbG9vcCBvbmNlIGl0J3Mgb3Zlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9vcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICAvL2lmIG5vIGNoYW5nZSwgZG8gbm90aGluZ1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCA9PT0gbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKCFsb29wKSB7XG5cdCAgICAgICAgICAgICAgICAvL3N0b3AgdGhlIHBsYXliYWNrIG9uIHRoZSBuZXh0IGN5Y2xlXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdG9wQXROZXh0SXRlcmF0aW9uKG5vdyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvL3JlbW92ZSB0aGUgbmV4dCBzdG9wRXZlbnRcblx0ICAgICAgICAgICAgICAgIHZhciBzdG9wRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXROZXh0U3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBub3cpO1xuXHQgICAgICAgICAgICAgICAgaWYgKHN0b3BFdmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwoc3RvcEV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLmNhbmNlbChzdG9wRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYSBzdG9wIGV2ZW50IGF0IHRoZSBuZXh0IGZ1bGwgaXRlcmF0aW9uLiBVc2VkXG5cdFx0ICogIGZvciBzY2hlZHVsaW5nIHN0b3Agd2hlbiB0aGUgbG9vcCBzdGF0ZSBvciBwbGF5YmFja1JhdGUgY2hhbmdlc1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBub3cgIFRoZSBjdXJyZW50IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fc3RvcEF0TmV4dEl0ZXJhdGlvbiA9IGZ1bmN0aW9uIChub3cpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUobm93KSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHZhciBuZXh0U3RvcCA9IHRoaXMuX3N0YXRlLmdldE5leHRTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIG5vdyk7XG5cdCAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuX2VsYXBzZWRUaW1lLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgIHZhciBpdGVyYXRpb25zID0gTWF0aC5tYXgoTWF0aC5jZWlsKHBvc2l0aW9uIC8gdGhpcy5idWZmZXIuZHVyYXRpb24pLCAxKTtcblx0ICAgICAgICAgICAgdmFyIHN0b3BUaW1lID0gdGhpcy5fZWxhcHNlZFRpbWUuZ2V0VGltZU9mVGljayhpdGVyYXRpb25zICogdGhpcy5idWZmZXIuZHVyYXRpb24sIG5leHRTdG9wID8gbmV4dFN0b3AudGltZSAtIHRoaXMuc2FtcGxlVGltZSA6IEluZmluaXR5KTtcblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHN0b3BUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBsYXliYWNrIHNwZWVkLiAxIGlzIG5vcm1hbCBzcGVlZC4gVGhpcyBpcyBub3QgYSBzaWduYWwgYmVjYXVzZVxuXHRcdCAqIFNhZmFyaSBhbmQgaU9TIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IHBsYXliYWNrUmF0ZSBhcyBhIHNpZ25hbC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdwbGF5YmFja1JhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUocmF0ZSwgbm93KTtcblx0ICAgICAgICAgICAgLy9pZiBpdCdzIG5vdCBsb29waW5nXG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RvcEF0TmV4dEl0ZXJhdGlvbihub3cpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vc2V0IGFsbCB0aGUgc291cmNlc1xuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgc291cmNlLnBsYXliYWNrUmF0ZS5zZXRWYWx1ZUF0VGltZShyYXRlLCBub3cpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIG9mIHRoZSBidWZmZXIuIFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBvc2l0aW9uXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAncG9zaXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUobm93KSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIHRoaXMubG9hZGVkKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZHVyYXRpb24gPSB0aGlzLmJ1ZmZlci5kdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuX2VsYXBzZWRUaW1lLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gJSBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGlyZWN0aW9uIHRoZSBidWZmZXIgc2hvdWxkIHBsYXkgaW5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgcmV2ZXJzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ3JldmVyc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIucmV2ZXJzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJldikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIucmV2ZXJzZSA9IHJldjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGFsbCB0aGUgYnVmZmVyIGlzIGxvYWRlZFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3QuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2Rpc2Nvbm5lY3QgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgc291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0gbnVsbDtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBsYXllcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBsYXllcnMgY29tYmluZXMgbXVsdGlwbGUgW1RvbmUuUGxheWVyXShQbGF5ZXIpIG9iamVjdHMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IHVybHMgQW4gb2JqZWN0IG1hcHBpbmcgYSBuYW1lIHRvIGEgdXJsLlxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9uPX0gb25sb2FkIFRoZSBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiBhbGwgYnVmZmVycyBhcmUgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzID0gZnVuY3Rpb24gKHVybHMpIHtcblx0ICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgYXJncy5zaGlmdCgpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmdzLCBbJ29ubG9hZCddLCBUb25lLlBsYXllcnMpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IHZvbHVtZSBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIHNvdXJjZS52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLy9tYWtlIHRoZSBvdXRwdXQgZXhwbGljaXRseSBzdGVyZW9cblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnQgPSAyO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIC8vbXV0ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY29udGFpbmVyIG9mIGFsbCBvZiB0aGUgcGxheWVyc1xuXHRcdFx0ICogQHR5cGUge09iamVjdH1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzID0ge307XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbG9hZGluZyBjb3VudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogcHJpdmF0ZSBob2xkZXIgb2YgdGhlIGZhZGVJbiB0aW1lXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mYWRlSW4gPSBvcHRpb25zLmZhZGVJbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHByaXZhdGUgaG9sZGVyIG9mIHRoZSBmYWRlT3V0IHRpbWVcblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZhZGVPdXQgPSBvcHRpb25zLmZhZGVPdXQ7XG5cdCAgICAgICAgLy9hZGQgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB1cmxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCsrO1xuXHQgICAgICAgICAgICB0aGlzLmFkZChuYW1lLCB1cmxzW25hbWVdLCB0aGlzLl9idWZmZXJMb2FkZWQuYmluZCh0aGlzLCBvcHRpb25zLm9ubG9hZCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBsYXllcnMsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZSxcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdmYWRlSW4nOiAwLFxuXHQgICAgICAgICdmYWRlT3V0JzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIGJ1ZmZlciB3YXMgbG9hZGVkLiBkZWNyZW1lbnQgdGhlIGNvdW50ZXIuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2tcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuX2J1ZmZlckxvYWRlZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudC0tO1xuXHQgICAgICAgIGlmICh0aGlzLl9sb2FkaW5nQ291bnQgPT09IDAgJiYgY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiBzb3VyY2UubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGZhZGVJbiB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGZhZGVJblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdmYWRlSW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mYWRlSW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmYWRlSW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmFkZUluID0gZmFkZUluO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHBsYXllci5mYWRlSW4gPSBmYWRlSW47XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGZhZGVPdXQgdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBmYWRlT3V0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ2ZhZGVPdXQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mYWRlT3V0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZmFkZU91dCkge1xuXHQgICAgICAgICAgICB0aGlzLl9mYWRlT3V0ID0gZmFkZU91dDtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgICAgICBwbGF5ZXIuZmFkZU91dCA9IGZhZGVPdXQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHN0YXRlIG9mIHRoZSBwbGF5ZXJzIG9iamVjdC4gUmV0dXJucyBcInN0YXJ0ZWRcIiBpZiBhbnkgb2YgdGhlIHBsYXllcnMgYXJlIHBsYXlpbmcuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVycyNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIHN0YXRlXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgcGxheWluZyA9IGZhbHNlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHBsYXlpbmcgPSBwbGF5aW5nIHx8IHBsYXllci5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgcmV0dXJuIHBsYXlpbmcgPyBUb25lLlN0YXRlLlN0YXJ0ZWQgOiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVHJ1ZSBpZiB0aGUgYnVmZmVycyBvYmplY3QgaGFzIGEgYnVmZmVyIGJ5IHRoYXQgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIG5hbWUgIFRoZSBrZXkgb3IgaW5kZXggb2YgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuXG5cdFx0ICogIEByZXR1cm4gIHtCb29sZWFufVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXJzLmhhc093blByb3BlcnR5KG5hbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgYSBwbGF5ZXIgYnkgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgbmFtZSAgVGhlIHBsYXllcnMgbmFtZSBhcyBkZWZpbmVkIGluXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25zdHJ1Y3RvciBvYmplY3Qgb3IgYGFkZGAgbWV0aG9kLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QbGF5ZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuaGFzKG5hbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXJzW25hbWVdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5QbGF5ZXJzOiBubyBwbGF5ZXIgbmFtZWQgJyArIG5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdFx0ICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG5cdFx0ICogQHJldHVybiB7VG9uZS5QbGF5ZXJzfSAgICAgICAgICAgIHRoaXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5fZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIGZvciAodmFyIHBsYXllck5hbWUgaW4gdGhpcy5fcGxheWVycykge1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9wbGF5ZXJzW3BsYXllck5hbWVdLCBwbGF5ZXJOYW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgYWxsIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVycyNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaXNMb2FkZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIGlzTG9hZGVkID0gaXNMb2FkZWQgJiYgcGxheWVyLmxvYWRlZDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHJldHVybiBpc0xvYWRlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBwbGF5ZXIgYnkgbmFtZSBhbmQgdXJsIHRvIHRoZSBQbGF5ZXJzXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgbmFtZSAgICAgIEEgdW5pcXVlIG5hbWUgdG8gZ2l2ZSB0aGUgcGxheWVyXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xUb25lLkJ1ZmZlcnxBdWRpb2J1ZmZlcn0gIHVybCAgRWl0aGVyIHRoZSB1cmwgb2YgdGhlIGJ1ZmVyLFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYWRkZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzW25hbWVdID0gbmV3IFRvbmUuUGxheWVyKHVybCwgY2FsbGJhY2spLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnNbbmFtZV0uZmFkZUluID0gdGhpcy5fZmFkZUluO1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnNbbmFtZV0uZmFkZU91dCA9IHRoaXMuX2ZhZGVPdXQ7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCBhbGwgb2YgdGhlIHBsYXllcnMgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gc3RvcCBhbGwgb2YgdGhlIHBsYXllcnMuXG5cdFx0ICogQHJldHVybiB7VG9uZS5QbGF5ZXJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLnN0b3BBbGwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICBwbGF5ZXIuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRGlzcG9zZSBhbmQgZGlzY29ubmVjdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QbGF5ZXJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgIHBsYXllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGxheWVycyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGxheWVycztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlVzZXJNZWRpYSB1c2VzIE1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEgdG8gb3BlbiB1cFxuXHRcdCAqICAgICAgICAgIGFuZCBleHRlcm5hbCBtaWNyb3Bob25lIG9yIGF1ZGlvIGlucHV0LiBDaGVja1xuXHRcdCAqICAgICAgICAgIFtNZWRpYURldmljZXMgQVBJIFN1cHBvcnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9NZWRpYURldmljZXMvZ2V0VXNlck1lZGlhKVxuXHRcdCAqICAgICAgICAgIHRvIHNlZSB3aGljaCBicm93c2VycyBhcmUgc3VwcG9ydGVkLiBBY2Nlc3MgdG8gYW4gZXh0ZXJuYWwgaW5wdXRcblx0XHQgKiAgICAgICAgICBpcyBsaW1pdGVkIHRvIHNlY3VyZSAoSFRUUFMpIGNvbm5lY3Rpb25zLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHM9fSB2b2x1bWUgVGhlIGxldmVsIG9mIHRoZSBpbnB1dFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbGlzdCB0aGUgaW5wdXRzIGFuZCBvcGVuIHRoZSB0aGlyZCBvbmVcblx0XHQgKiB2YXIgbW90dSA9IG5ldyBUb25lLlVzZXJNZWRpYSgpO1xuXHRcdCAqXG5cdFx0ICogLy9vcGVuaW5nIHRoZSBpbnB1dCBhc2tzIHRoZSB1c2VyIHRvIGFjdGl2YXRlIHRoZWlyIG1pY1xuXHRcdCAqIG1vdHUub3BlbigpLnRoZW4oZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vcHJvbWlzZSByZXNvbHZlcyB3aGVuIGlucHV0IGlzIGF2YWlsYWJsZVxuXHRcdCAqIH0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd2b2x1bWUnXSwgVG9uZS5Vc2VyTWVkaWEpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIE1lZGlhU3RyZWFtTm9kZVxuXHRcdFx0ICogIEB0eXBlIHtNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0gPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtZWRpYSBzdHJlYW0gY3JlYXRlZCBieSBnZXRVc2VyTWVkaWEuXG5cdFx0XHQgKiAgQHR5cGUge0xvY2FsTWVkaWFTdHJlYW19XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9wZW4gZGV2aWNlXG5cdFx0XHQgKiAgQHR5cGUgIHtNZWRpYURldmljZUluZm99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RldmljZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBpbnB1dC52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVXNlck1lZGlhLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVXNlck1lZGlhLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgT3BlbiB0aGUgbWVkaWEgc3RyZWFtLiBJZiBhIHN0cmluZyBpcyBwYXNzZWQgaW4sIGl0IGlzIGFzc3VtZWRcblx0XHQgKiAgdG8gYmUgdGhlIGxhYmVsIG9yIGlkIG9mIHRoZSBzdHJlYW0sIGlmIGEgbnVtYmVyIGlzIHBhc3NlZCBpbixcblx0XHQgKiAgaXQgaXMgdGhlIGlucHV0IG51bWJlciBvZiB0aGUgc3RyZWFtLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSBbbGFiZWxPcklkPVwiZGVmYXVsdFwiXSBUaGUgbGFiZWwgb3IgaWQgb2YgdGhlIGF1ZGlvIGlucHV0IG1lZGlhIGRldmljZS5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggbm8gYXJndW1lbnQsIHRoZSBkZWZhdWx0IHN0cmVhbSBpcyBvcGVuZWQuXG5cdFx0ICogIEByZXR1cm4ge1Byb21pc2V9IFRoZSBwcm9taXNlIGlzIHJlc29sdmVkIHdoZW4gdGhlIHN0cmVhbSBpcyBvcGVuLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAobGFiZWxPcklkKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuVXNlck1lZGlhLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uIChkZXZpY2VzKSB7XG5cdCAgICAgICAgICAgIHZhciBkZXZpY2U7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGxhYmVsT3JJZCkpIHtcblx0ICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZXNbbGFiZWxPcklkXTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZXMuZmluZChmdW5jdGlvbiAoZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRldmljZS5sYWJlbCA9PT0gbGFiZWxPcklkIHx8IGRldmljZS5kZXZpY2VJZCA9PT0gbGFiZWxPcklkO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICAvL2RpZG4ndCBmaW5kIGEgbWF0Y2hpbmcgZGV2aWNlXG5cdCAgICAgICAgICAgICAgICBpZiAoIWRldmljZSAmJiBkZXZpY2VzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICBkZXZpY2UgPSBkZXZpY2VzWzBdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZGV2aWNlICYmIFRvbmUuaXNEZWZpbmVkKGxhYmVsT3JJZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuVXNlck1lZGlhOiBubyBtYXRjaGluZyBkZXZpY2U6ICcgKyBsYWJlbE9ySWQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2RldmljZSA9IGRldmljZTtcblx0ICAgICAgICAgICAgLy9kbyBnZXRVc2VyTWVkaWFcblx0ICAgICAgICAgICAgdmFyIGNvbnN0cmFpbnRzID0ge1xuXHQgICAgICAgICAgICAgICAgYXVkaW86IHtcblx0ICAgICAgICAgICAgICAgICAgICAnZWNob0NhbmNlbGxhdGlvbic6IGZhbHNlLFxuXHQgICAgICAgICAgICAgICAgICAgICdzYW1wbGVSYXRlJzogdGhpcy5jb250ZXh0LnNhbXBsZVJhdGVcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgaWYgKGRldmljZSkge1xuXHQgICAgICAgICAgICAgICAgY29uc3RyYWludHMuYXVkaW8uZGV2aWNlSWQgPSBkZXZpY2UuZGV2aWNlSWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKGNvbnN0cmFpbnRzKS50aGVuKGZ1bmN0aW9uIChzdHJlYW0pIHtcblx0ICAgICAgICAgICAgICAgIC8vc3RhcnQgYSBuZXcgc291cmNlIG9ubHkgaWYgdGhlIHByZXZpb3VzIG9uZSBpcyBjbG9zZWRcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc3RyZWFtKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vV3JhcCBhIE1lZGlhU3RyZWFtU291cmNlTm9kZSBhcm91bmQgdGhlIGxpdmUgaW5wdXQgc3RyZWFtLlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtID0gdGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHN0cmVhbSk7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9Db25uZWN0IHRoZSBNZWRpYVN0cmVhbVNvdXJjZU5vZGUgdG8gYSBnYXRlIGdhaW4gbm9kZVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xvc2UgdGhlIG1lZGlhIHN0cmVhbVxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlVzZXJNZWRpYX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdHJlYW0pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RyZWFtLmdldEF1ZGlvVHJhY2tzKCkuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcblx0ICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBvbGQgbWVkaWEgc3RyZWFtXG5cdCAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9kZXZpY2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIHRoZSBsaXN0IG9mIGF1ZGlvIGlucHV0IGRldmljZXMgYXZhaWxhYmxlLlxuXHRcdCAqICBAcmV0dXJuIHtQcm9taXNlfSBUaGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggdGhlIGRldmljZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVXNlck1lZGlhLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uKGRldmljZXMpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2coZGV2aWNlcylcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEuZW51bWVyYXRlRGV2aWNlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKCkudGhlbihmdW5jdGlvbiAoZGV2aWNlcykge1xuXHQgICAgICAgICAgICByZXR1cm4gZGV2aWNlcy5maWx0ZXIoZnVuY3Rpb24gKGRldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGRldmljZS5raW5kID09PSAnYXVkaW9pbnB1dCc7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBcInN0YXJ0ZWRcIiB3aGVuIHRoZSBtaWNyb3Bob25lIGlzIG9wZW5cblx0XHQgKiAgYW5kIFwic3RvcHBlZFwiIHdoZW4gdGhlIG1pYyBpcyBjbG9zZWQuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtICYmIHRoaXMuX3N0cmVhbS5hY3RpdmUgPyBUb25lLlN0YXRlLlN0YXJ0ZWQgOiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFJldHVybnMgYW4gaWRlbnRpZmllciBmb3IgdGhlIHJlcHJlc2VudGVkIGRldmljZSB0aGF0IGlzXG5cdFx0ICogXHRwZXJzaXN0ZWQgYWNyb3NzIHNlc3Npb25zLiBJdCBpcyB1bi1ndWVzc2FibGUgYnkgb3RoZXIgYXBwbGljYXRpb25zIGFuZFxuXHRcdCAqIFx0dW5pcXVlIHRvIHRoZSBvcmlnaW4gb2YgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uIEl0IGlzIHJlc2V0IHdoZW4gdGhlXG5cdFx0ICogXHR1c2VyIGNsZWFycyBjb29raWVzIChmb3IgUHJpdmF0ZSBCcm93c2luZywgYSBkaWZmZXJlbnQgaWRlbnRpZmllciBpc1xuXHRcdCAqIFx0dXNlZCB0aGF0IGlzIG5vdCBwZXJzaXN0ZWQgYWNyb3NzIHNlc3Npb25zKS4gUmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGVcblx0XHQgKiBcdGRldmljZSBpcyBub3Qgb3Blbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgZGV2aWNlSWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdkZXZpY2VJZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZS5kZXZpY2VJZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRSZXR1cm5zIGEgZ3JvdXAgaWRlbnRpZmllci4gVHdvIGRldmljZXMgaGF2ZSB0aGVcblx0XHQgKiBcdHNhbWUgZ3JvdXAgaWRlbnRpZmllciBpZiB0aGV5IGJlbG9uZyB0byB0aGUgc2FtZSBwaHlzaWNhbCBkZXZpY2UuXG5cdFx0ICogXHRSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZSBkZXZpY2UgaXMgbm90IG9wZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIGdyb3VwSWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdncm91cElkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlLmdyb3VwSWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0UmV0dXJucyBhIGxhYmVsIGRlc2NyaWJpbmcgdGhpcyBkZXZpY2UgKGZvciBleGFtcGxlIFwiQnVpbHQtaW4gTWljcm9waG9uZVwiKS5cblx0XHQgKiBcdFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlIGRldmljZSBpcyBub3Qgb3BlbiBvciBsYWJlbCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogXHRiZWNhdXNlIG9mIHBlcm1pc3Npb25zLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBncm91cElkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnbGFiZWwnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2UubGFiZWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiB1c2VyTWVkaWEubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cC5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlVzZXJNZWRpYX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNsb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIElmIGdldFVzZXJNZWRpYSBpcyBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIuXG5cdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBzdXBwb3J0ZWRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYSwgJ3N1cHBvcnRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuaXNEZWZpbmVkKG5hdmlnYXRvci5tZWRpYURldmljZXMpICYmIFRvbmUuaXNGdW5jdGlvbihuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5Vc2VyTWVkaWE7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5NaWRpIGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIFRpbWUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgVG9uZS5NaWRpIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIG9yIHdpdGhvdXQgdGhlIGBuZXdgIGtleXdvcmQuIFRvbmUuTWlkaSBjYW4gYmUgcGFzc2VkXG5cdFx0ICogICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgb2YgYW55IG1ldGhvZCB3aGljaCB0YWtlcyB0aW1lIGFzIGFuIGFyZ3VtZW50LlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRnJlcXVlbmN5fVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHQgPSBUb25lLk1pZGkoXCI0blwiKTsvL2EgcXVhcnRlciBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5NaWRpKSB7XG5cdCAgICAgICAgICAgIFRvbmUuRnJlcXVlbmN5LmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLk1pZGkodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkaSwgVG9uZS5GcmVxdWVuY3kpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fZGVmYXVsdFVuaXRzID0gJ21pZGknO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgZnJlcXVlbmN5IGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMuY2FsbCh0aGlzLCBmcmVxKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgdGljayBpbiB0aGUgY3VycmVudCB0aW1lIHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7VGlja3N9IHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cy5jYWxsKHRoaXMsIHRpY2tzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20oVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMuY2FsbCh0aGlzLCBiZWF0cykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzLmNhbGwodGhpcywgc2Vjb25kcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgYXMgYSBNSURJIG5vdGVcblx0XHQgKiAgQHJldHVybiAge01JREl9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5NaWRpKDYwKS50b01pZGkoKTsgLy82MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS50b01pZGkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgYXMgYSBNSURJIG5vdGVcblx0XHQgKiAgQHJldHVybiAge01JREl9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5NaWRpKDYwKS50b01pZGkoKTsgLy82MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kubXRvZih0aGlzLnRvTWlkaSgpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJhbnNwb3NlcyB0aGUgZnJlcXVlbmN5IGJ5IHRoZSBnaXZlbiBudW1iZXIgb2Ygc2VtaXRvbmVzLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbH0gIGludGVydmFsXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkZyZXF1ZW5jeX0gQSBuZXcgdHJhbnNwb3NlZCBmcmVxdWVuY3lcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkE0XCIpLnRyYW5zcG9zZSgzKTsgLy9cIkM1XCJcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUudHJhbnNwb3NlID0gZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMudG9NaWRpKCkgKyBpbnRlcnZhbCk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkaTtcblx0fSk7XG5cdFxuXHRyZXR1cm4gVG9uZTtcbn0pKTsiLCIvKiEgcDUuanMgdjAuNy4yIFNlcHRlbWJlciAwMiwgMjAxOCAqLyAhZnVuY3Rpb24oYSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9YSgpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxhKTtlbHNle3ZhciBiO2I9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLGIucDU9YSgpfX0oZnVuY3Rpb24oKXt2YXIgYTtyZXR1cm4gZnVuY3Rpb24gYShiLGMsZCl7ZnVuY3Rpb24gZShnLGgpe2lmKCFjW2ddKXtpZighYltnXSl7dmFyIGk9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighaCYmaSlyZXR1cm4gaShnLCEwKTtpZihmKXJldHVybiBmKGcsITApO3ZhciBqPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrZytcIidcIik7dGhyb3cgai5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGp9dmFyIGs9Y1tnXT17ZXhwb3J0czp7fX07YltnXVswXS5jYWxsKGsuZXhwb3J0cyxmdW5jdGlvbihhKXt2YXIgYz1iW2ddWzFdW2FdO3JldHVybiBlKGN8fGEpfSxrLGsuZXhwb3J0cyxhLGIsYyxkKX1yZXR1cm4gY1tnXS5leHBvcnRzfWZvcih2YXIgZj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGc9MDtnPGQubGVuZ3RoO2crKyllKGRbZ10pO3JldHVybiBlfSh7MTpbZnVuY3Rpb24oYSxiLGMpeyFmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGEpe3ZhciBiPWEuY2hhckNvZGVBdCgwKTtyZXR1cm4gYj09PWZ8fGI9PT1rPzYyOmI9PT1nfHxiPT09bD82MzpiPGg/LTE6YjxoKzEwP2ItaCsyNisyNjpiPGorMjY/Yi1qOmI8aSsyNj9iLWkrMjY6dm9pZCAwfWZ1bmN0aW9uIGMoYSl7ZnVuY3Rpb24gYyhhKXtqW2wrK109YX12YXIgZCxmLGcsaCxpLGo7aWYoYS5sZW5ndGglND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7dmFyIGs9YS5sZW5ndGg7aT1cIj1cIj09PWEuY2hhckF0KGstMik/MjpcIj1cIj09PWEuY2hhckF0KGstMSk/MTowLGo9bmV3IGUoMyphLmxlbmd0aC80LWkpLGc9aT4wP2EubGVuZ3RoLTQ6YS5sZW5ndGg7dmFyIGw9MDtmb3IoZD0wLGY9MDtkPGc7ZCs9NCxmKz0zKWg9YihhLmNoYXJBdChkKSk8PDE4fGIoYS5jaGFyQXQoZCsxKSk8PDEyfGIoYS5jaGFyQXQoZCsyKSk8PDZ8YihhLmNoYXJBdChkKzMpKSxjKCgxNjcxMTY4MCZoKT4+MTYpLGMoKDY1MjgwJmgpPj44KSxjKDI1NSZoKTtyZXR1cm4gMj09PWk/KGg9YihhLmNoYXJBdChkKSk8PDJ8YihhLmNoYXJBdChkKzEpKT4+NCxjKDI1NSZoKSk6MT09PWkmJihoPWIoYS5jaGFyQXQoZCkpPDwxMHxiKGEuY2hhckF0KGQrMSkpPDw0fGIoYS5jaGFyQXQoZCsyKSk+PjIsYyhoPj44JjI1NSksYygyNTUmaCkpLGp9ZnVuY3Rpb24gZChhKXtmdW5jdGlvbiBiKGEpe3JldHVyblwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLmNoYXJBdChhKX1mdW5jdGlvbiBjKGEpe3JldHVybiBiKGE+PjE4JjYzKStiKGE+PjEyJjYzKStiKGE+PjYmNjMpK2IoNjMmYSl9dmFyIGQsZSxmLGc9YS5sZW5ndGglMyxoPVwiXCI7Zm9yKGQ9MCxmPWEubGVuZ3RoLWc7ZDxmO2QrPTMpZT0oYVtkXTw8MTYpKyhhW2QrMV08PDgpK2FbZCsyXSxoKz1jKGUpO3N3aXRjaChnKXtjYXNlIDE6ZT1hW2EubGVuZ3RoLTFdLGgrPWIoZT4+MiksaCs9YihlPDw0JjYzKSxoKz1cIj09XCI7YnJlYWs7Y2FzZSAyOmU9KGFbYS5sZW5ndGgtMl08PDgpK2FbYS5sZW5ndGgtMV0saCs9YihlPj4xMCksaCs9YihlPj40JjYzKSxoKz1iKGU8PDImNjMpLGgrPVwiPVwifXJldHVybiBofXZhciBlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksZj1cIitcIi5jaGFyQ29kZUF0KDApLGc9XCIvXCIuY2hhckNvZGVBdCgwKSxoPVwiMFwiLmNoYXJDb2RlQXQoMCksaT1cImFcIi5jaGFyQ29kZUF0KDApLGo9XCJBXCIuY2hhckNvZGVBdCgwKSxrPVwiLVwiLmNoYXJDb2RlQXQoMCksbD1cIl9cIi5jaGFyQ29kZUF0KDApO2EudG9CeXRlQXJyYXk9YyxhLmZyb21CeXRlQXJyYXk9ZH0odm9pZCAwPT09Yz90aGlzLmJhc2U2NGpzPXt9OmMpfSx7fV0sMjpbZnVuY3Rpb24oYSxiLGMpe30se31dLDM6W2Z1bmN0aW9uKGEsYixjKXsoZnVuY3Rpb24oYil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZCgpe2Z1bmN0aW9uIGEoKXt9dHJ5e3ZhciBiPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBiLmZvbz1mdW5jdGlvbigpe3JldHVybiA0Mn0sYi5jb25zdHJ1Y3Rvcj1hLDQyPT09Yi5mb28oKSYmYi5jb25zdHJ1Y3Rvcj09PWEmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGIuc3ViYXJyYXkmJjA9PT1iLnN1YmFycmF5KDEsMSkuYnl0ZUxlbmd0aH1jYXRjaChhKXtyZXR1cm4hMX19ZnVuY3Rpb24gZSgpe3JldHVybiBmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIGYoYSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBmPyhmLlRZUEVEX0FSUkFZX1NVUFBPUlR8fCh0aGlzLmxlbmd0aD0wLHRoaXMucGFyZW50PXZvaWQgMCksXCJudW1iZXJcIj09dHlwZW9mIGE/Zyh0aGlzLGEpOlwic3RyaW5nXCI9PXR5cGVvZiBhP2godGhpcyxhLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06XCJ1dGY4XCIpOmkodGhpcyxhKSk6YXJndW1lbnRzLmxlbmd0aD4xP25ldyBmKGEsYXJndW1lbnRzWzFdKTpuZXcgZihhKX1mdW5jdGlvbiBnKGEsYil7aWYoYT1wKGEsYjwwPzA6MHxxKGIpKSwhZi5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgYz0wO2M8YjtjKyspYVtjXT0wO3JldHVybiBhfWZ1bmN0aW9uIGgoYSxiLGMpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBjJiZcIlwiIT09Y3x8KGM9XCJ1dGY4XCIpLGE9cChhLDB8cyhiLGMpKSxhLndyaXRlKGIsYyksYX1mdW5jdGlvbiBpKGEsYil7aWYoZi5pc0J1ZmZlcihiKSlyZXR1cm4gaihhLGIpO2lmKFkoYikpcmV0dXJuIGsoYSxiKTtpZihudWxsPT1iKXRocm93IG5ldyBUeXBlRXJyb3IoXCJtdXN0IHN0YXJ0IHdpdGggbnVtYmVyLCBidWZmZXIsIGFycmF5IG9yIHN0cmluZ1wiKTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXIpe2lmKGIuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIGwoYSxiKTtpZihiIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIG0oYSxiKX1yZXR1cm4gYi5sZW5ndGg/bihhLGIpOm8oYSxiKX1mdW5jdGlvbiBqKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTtyZXR1cm4gYT1wKGEsYyksYi5jb3B5KGEsMCwwLGMpLGF9ZnVuY3Rpb24gayhhLGIpe3ZhciBjPTB8cShiLmxlbmd0aCk7YT1wKGEsYyk7Zm9yKHZhciBkPTA7ZDxjO2QrPTEpYVtkXT0yNTUmYltkXTtyZXR1cm4gYX1mdW5jdGlvbiBsKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTthPXAoYSxjKTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlhW2RdPTI1NSZiW2RdO3JldHVybiBhfWZ1bmN0aW9uIG0oYSxiKXtyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyhiLmJ5dGVMZW5ndGgsYT1mLl9hdWdtZW50KG5ldyBVaW50OEFycmF5KGIpKSk6YT1sKGEsbmV3IFVpbnQ4QXJyYXkoYikpLGF9ZnVuY3Rpb24gbihhLGIpe3ZhciBjPTB8cShiLmxlbmd0aCk7YT1wKGEsYyk7Zm9yKHZhciBkPTA7ZDxjO2QrPTEpYVtkXT0yNTUmYltkXTtyZXR1cm4gYX1mdW5jdGlvbiBvKGEsYil7dmFyIGMsZD0wO1wiQnVmZmVyXCI9PT1iLnR5cGUmJlkoYi5kYXRhKSYmKGM9Yi5kYXRhLGQ9MHxxKGMubGVuZ3RoKSksYT1wKGEsZCk7Zm9yKHZhciBlPTA7ZTxkO2UrPTEpYVtlXT0yNTUmY1tlXTtyZXR1cm4gYX1mdW5jdGlvbiBwKGEsYil7cmV0dXJuIGYuVFlQRURfQVJSQVlfU1VQUE9SVD8oYT1mLl9hdWdtZW50KG5ldyBVaW50OEFycmF5KGIpKSxhLl9fcHJvdG9fXz1mLnByb3RvdHlwZSk6KGEubGVuZ3RoPWIsYS5faXNCdWZmZXI9ITApLDAhPT1iJiZiPD1mLnBvb2xTaXplPj4+MSYmKGEucGFyZW50PVopLGF9ZnVuY3Rpb24gcShhKXtpZihhPj1lKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4XCIrZSgpLnRvU3RyaW5nKDE2KStcIiBieXRlc1wiKTtyZXR1cm4gMHxhfWZ1bmN0aW9uIHIoYSxiKXtpZighKHRoaXMgaW5zdGFuY2VvZiByKSlyZXR1cm4gbmV3IHIoYSxiKTt2YXIgYz1uZXcgZihhLGIpO3JldHVybiBkZWxldGUgYy5wYXJlbnQsY31mdW5jdGlvbiBzKGEsYil7XCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPVwiXCIrYSk7dmFyIGM9YS5sZW5ndGg7aWYoMD09PWMpcmV0dXJuIDA7Zm9yKHZhciBkPSExOzspc3dpdGNoKGIpe2Nhc2VcImFzY2lpXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwicmF3XCI6Y2FzZVwicmF3c1wiOnJldHVybiBjO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBSKGEpLmxlbmd0aDtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gMipjO2Nhc2VcImhleFwiOnJldHVybiBjPj4+MTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gVShhKS5sZW5ndGg7ZGVmYXVsdDppZihkKXJldHVybiBSKGEpLmxlbmd0aDtiPShcIlwiK2IpLnRvTG93ZXJDYXNlKCksZD0hMH19ZnVuY3Rpb24gdChhLGIsYyl7dmFyIGQ9ITE7aWYoYnw9MCxjPXZvaWQgMD09PWN8fGM9PT0xLzA/dGhpcy5sZW5ndGg6MHxjLGF8fChhPVwidXRmOFwiKSxiPDAmJihiPTApLGM+dGhpcy5sZW5ndGgmJihjPXRoaXMubGVuZ3RoKSxjPD1iKXJldHVyblwiXCI7Zm9yKDs7KXN3aXRjaChhKXtjYXNlXCJoZXhcIjpyZXR1cm4gRih0aGlzLGIsYyk7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIEIodGhpcyxiLGMpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIEQodGhpcyxiLGMpO2Nhc2VcImJpbmFyeVwiOnJldHVybiBFKHRoaXMsYixjKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gQSh0aGlzLGIsYyk7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIEcodGhpcyxiLGMpO2RlZmF1bHQ6aWYoZCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrYSk7YT0oYStcIlwiKS50b0xvd2VyQ2FzZSgpLGQ9ITB9fWZ1bmN0aW9uIHUoYSxiLGMsZCl7Yz1OdW1iZXIoYyl8fDA7dmFyIGU9YS5sZW5ndGgtYztkPyhkPU51bWJlcihkKSk+ZSYmKGQ9ZSk6ZD1lO3ZhciBmPWIubGVuZ3RoO2lmKGYlMiE9MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGhleCBzdHJpbmdcIik7ZD5mLzImJihkPWYvMik7Zm9yKHZhciBnPTA7ZzxkO2crKyl7dmFyIGg9cGFyc2VJbnQoYi5zdWJzdHIoMipnLDIpLDE2KTtpZihpc05hTihoKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGhleCBzdHJpbmdcIik7YVtjK2ddPWh9cmV0dXJuIGd9ZnVuY3Rpb24gdihhLGIsYyxkKXtyZXR1cm4gVihSKGIsYS5sZW5ndGgtYyksYSxjLGQpfWZ1bmN0aW9uIHcoYSxiLGMsZCl7cmV0dXJuIFYoUyhiKSxhLGMsZCl9ZnVuY3Rpb24geChhLGIsYyxkKXtyZXR1cm4gdyhhLGIsYyxkKX1mdW5jdGlvbiB5KGEsYixjLGQpe3JldHVybiBWKFUoYiksYSxjLGQpfWZ1bmN0aW9uIHooYSxiLGMsZCl7cmV0dXJuIFYoVChiLGEubGVuZ3RoLWMpLGEsYyxkKX1mdW5jdGlvbiBBKGEsYixjKXtyZXR1cm4gMD09PWImJmM9PT1hLmxlbmd0aD9XLmZyb21CeXRlQXJyYXkoYSk6Vy5mcm9tQnl0ZUFycmF5KGEuc2xpY2UoYixjKSl9ZnVuY3Rpb24gQihhLGIsYyl7Yz1NYXRoLm1pbihhLmxlbmd0aCxjKTtmb3IodmFyIGQ9W10sZT1iO2U8Yzspe3ZhciBmPWFbZV0sZz1udWxsLGg9Zj4yMzk/NDpmPjIyMz8zOmY+MTkxPzI6MTtpZihlK2g8PWMpe3ZhciBpLGosayxsO3N3aXRjaChoKXtjYXNlIDE6ZjwxMjgmJihnPWYpO2JyZWFrO2Nhc2UgMjppPWFbZSsxXSwxMjg9PSgxOTImaSkmJihsPSgzMSZmKTw8Nnw2MyZpKT4xMjcmJihnPWwpO2JyZWFrO2Nhc2UgMzppPWFbZSsxXSxqPWFbZSsyXSwxMjg9PSgxOTImaSkmJjEyOD09KDE5MiZqKSYmKGw9KDE1JmYpPDwxMnwoNjMmaSk8PDZ8NjMmaik+MjA0NyYmKGw8NTUyOTZ8fGw+NTczNDMpJiYoZz1sKTticmVhaztjYXNlIDQ6aT1hW2UrMV0saj1hW2UrMl0saz1hW2UrM10sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImaikmJjEyOD09KDE5MiZrKSYmKGw9KDE1JmYpPDwxOHwoNjMmaSk8PDEyfCg2MyZqKTw8Nnw2MyZrKT42NTUzNSYmbDwxMTE0MTEyJiYoZz1sKX19bnVsbD09PWc/KGc9NjU1MzMsaD0xKTpnPjY1NTM1JiYoZy09NjU1MzYsZC5wdXNoKGc+Pj4xMCYxMDIzfDU1Mjk2KSxnPTU2MzIwfDEwMjMmZyksZC5wdXNoKGcpLGUrPWh9cmV0dXJuIEMoZCl9ZnVuY3Rpb24gQyhhKXt2YXIgYj1hLmxlbmd0aDtpZihiPD0kKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhKTtmb3IodmFyIGM9XCJcIixkPTA7ZDxiOyljKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhLnNsaWNlKGQsZCs9JCkpO3JldHVybiBjfWZ1bmN0aW9uIEQoYSxiLGMpe3ZhciBkPVwiXCI7Yz1NYXRoLm1pbihhLmxlbmd0aCxjKTtmb3IodmFyIGU9YjtlPGM7ZSsrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmFbZV0pO3JldHVybiBkfWZ1bmN0aW9uIEUoYSxiLGMpe3ZhciBkPVwiXCI7Yz1NYXRoLm1pbihhLmxlbmd0aCxjKTtmb3IodmFyIGU9YjtlPGM7ZSsrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtlXSk7cmV0dXJuIGR9ZnVuY3Rpb24gRihhLGIsYyl7dmFyIGQ9YS5sZW5ndGg7KCFifHxiPDApJiYoYj0wKSwoIWN8fGM8MHx8Yz5kKSYmKGM9ZCk7Zm9yKHZhciBlPVwiXCIsZj1iO2Y8YztmKyspZSs9UShhW2ZdKTtyZXR1cm4gZX1mdW5jdGlvbiBHKGEsYixjKXtmb3IodmFyIGQ9YS5zbGljZShiLGMpLGU9XCJcIixmPTA7ZjxkLmxlbmd0aDtmKz0yKWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoZFtmXSsyNTYqZFtmKzFdKTtyZXR1cm4gZX1mdW5jdGlvbiBIKGEsYixjKXtpZihhJTEhPTB8fGE8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm9mZnNldCBpcyBub3QgdWludFwiKTtpZihhK2I+Yyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGhcIil9ZnVuY3Rpb24gSShhLGIsYyxkLGUsZyl7aWYoIWYuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImJ1ZmZlciBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlXCIpO2lmKGI+ZXx8YjxnKXRocm93IG5ldyBSYW5nZUVycm9yKFwidmFsdWUgaXMgb3V0IG9mIGJvdW5kc1wiKTtpZihjK2Q+YS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gSihhLGIsYyxkKXtiPDAmJihiPTY1NTM1K2IrMSk7Zm9yKHZhciBlPTAsZj1NYXRoLm1pbihhLmxlbmd0aC1jLDIpO2U8ZjtlKyspYVtjK2VdPShiJjI1NTw8OCooZD9lOjEtZSkpPj4+OCooZD9lOjEtZSl9ZnVuY3Rpb24gSyhhLGIsYyxkKXtiPDAmJihiPTQyOTQ5NjcyOTUrYisxKTtmb3IodmFyIGU9MCxmPU1hdGgubWluKGEubGVuZ3RoLWMsNCk7ZTxmO2UrKylhW2MrZV09Yj4+PjgqKGQ/ZTozLWUpJjI1NX1mdW5jdGlvbiBMKGEsYixjLGQsZSxmKXtpZihiPmV8fGI8Zil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInZhbHVlIGlzIG91dCBvZiBib3VuZHNcIik7aWYoYytkPmEubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiaW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKGM8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBNKGEsYixjLGQsZSl7cmV0dXJuIGV8fEwoYSxiLGMsNCwzLjQwMjgyMzQ2NjM4NTI4ODZlMzgsLTMuNDAyODIzNDY2Mzg1Mjg4NmUzOCksWC53cml0ZShhLGIsYyxkLDIzLDQpLGMrNH1mdW5jdGlvbiBOKGEsYixjLGQsZSl7cmV0dXJuIGV8fEwoYSxiLGMsOCwxLjc5NzY5MzEzNDg2MjMxNTdlMzA4LC0xLjc5NzY5MzEzNDg2MjMxNTdlMzA4KSxYLndyaXRlKGEsYixjLGQsNTIsOCksYys4fWZ1bmN0aW9uIE8oYSl7aWYoYT1QKGEpLnJlcGxhY2UoYWEsXCJcIiksYS5sZW5ndGg8MilyZXR1cm5cIlwiO2Zvcig7YS5sZW5ndGglNCE9MDspYSs9XCI9XCI7cmV0dXJuIGF9ZnVuY3Rpb24gUChhKXtyZXR1cm4gYS50cmltP2EudHJpbSgpOmEucmVwbGFjZSgvXlxccyt8XFxzKyQvZyxcIlwiKX1mdW5jdGlvbiBRKGEpe3JldHVybiBhPDE2P1wiMFwiK2EudG9TdHJpbmcoMTYpOmEudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFIoYSxiKXtiPWJ8fDEvMDtmb3IodmFyIGMsZD1hLmxlbmd0aCxlPW51bGwsZj1bXSxnPTA7ZzxkO2crKyl7aWYoKGM9YS5jaGFyQ29kZUF0KGcpKT41NTI5NSYmYzw1NzM0NCl7aWYoIWUpe2lmKGM+NTYzMTkpeyhiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihnKzE9PT1kKXsoYi09Myk+LTEmJmYucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9ZT1jO2NvbnRpbnVlfWlmKGM8NTYzMjApeyhiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KSxlPWM7Y29udGludWV9Yz02NTUzNisoZS01NTI5Njw8MTB8Yy01NjMyMCl9ZWxzZSBlJiYoYi09Myk+LTEmJmYucHVzaCgyMzksMTkxLDE4OSk7aWYoZT1udWxsLGM8MTI4KXtpZigoYi09MSk8MClicmVhaztmLnB1c2goYyl9ZWxzZSBpZihjPDIwNDgpe2lmKChiLT0yKTwwKWJyZWFrO2YucHVzaChjPj42fDE5Miw2MyZjfDEyOCl9ZWxzZSBpZihjPDY1NTM2KXtpZigoYi09Myk8MClicmVhaztmLnB1c2goYz4+MTJ8MjI0LGM+PjYmNjN8MTI4LDYzJmN8MTI4KX1lbHNle2lmKCEoYzwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIik7aWYoKGItPTQpPDApYnJlYWs7Zi5wdXNoKGM+PjE4fDI0MCxjPj4xMiY2M3wxMjgsYz4+NiY2M3wxMjgsNjMmY3wxMjgpfX1yZXR1cm4gZn1mdW5jdGlvbiBTKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKDI1NSZhLmNoYXJDb2RlQXQoYykpO3JldHVybiBifWZ1bmN0aW9uIFQoYSxiKXtmb3IodmFyIGMsZCxlLGY9W10sZz0wO2c8YS5sZW5ndGgmJiEoKGItPTIpPDApO2crKyljPWEuY2hhckNvZGVBdChnKSxkPWM+PjgsZT1jJTI1NixmLnB1c2goZSksZi5wdXNoKGQpO3JldHVybiBmfWZ1bmN0aW9uIFUoYSl7cmV0dXJuIFcudG9CeXRlQXJyYXkoTyhhKSl9ZnVuY3Rpb24gVihhLGIsYyxkKXtmb3IodmFyIGU9MDtlPGQmJiEoZStjPj1iLmxlbmd0aHx8ZT49YS5sZW5ndGgpO2UrKyliW2UrY109YVtlXTtyZXR1cm4gZX12YXIgVz1hKFwiYmFzZTY0LWpzXCIpLFg9YShcImllZWU3NTRcIiksWT1hKFwiaXNhcnJheVwiKTtjLkJ1ZmZlcj1mLGMuU2xvd0J1ZmZlcj1yLGMuSU5TUEVDVF9NQVhfQllURVM9NTAsZi5wb29sU2l6ZT04MTkyO3ZhciBaPXt9O2YuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDAhPT1iLlRZUEVEX0FSUkFZX1NVUFBPUlQ/Yi5UWVBFRF9BUlJBWV9TVVBQT1JUOmQoKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGYucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxmLl9fcHJvdG9fXz1VaW50OEFycmF5KTooZi5wcm90b3R5cGUubGVuZ3RoPXZvaWQgMCxmLnByb3RvdHlwZS5wYXJlbnQ9dm9pZCAwKSxmLmlzQnVmZmVyPWZ1bmN0aW9uKGEpe3JldHVybiEobnVsbD09YXx8IWEuX2lzQnVmZmVyKX0sZi5jb21wYXJlPWZ1bmN0aW9uKGEsYil7aWYoIWYuaXNCdWZmZXIoYSl8fCFmLmlzQnVmZmVyKGIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzXCIpO2lmKGE9PT1iKXJldHVybiAwO2Zvcih2YXIgYz1hLmxlbmd0aCxkPWIubGVuZ3RoLGU9MCxnPU1hdGgubWluKGMsZCk7ZTxnJiZhW2VdPT09YltlXTspKytlO3JldHVybiBlIT09ZyYmKGM9YVtlXSxkPWJbZV0pLGM8ZD8tMTpkPGM/MTowfSxmLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oYSl7c3dpdGNoKFN0cmluZyhhKS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInJhd1wiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxmLmNvbmNhdD1mdW5jdGlvbihhLGIpe2lmKCFZKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJsaXN0IGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycy5cIik7aWYoMD09PWEubGVuZ3RoKXJldHVybiBuZXcgZigwKTt2YXIgYztpZih2b2lkIDA9PT1iKWZvcihiPTAsYz0wO2M8YS5sZW5ndGg7YysrKWIrPWFbY10ubGVuZ3RoO3ZhciBkPW5ldyBmKGIpLGU9MDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgZz1hW2NdO2cuY29weShkLGUpLGUrPWcubGVuZ3RofXJldHVybiBkfSxmLmJ5dGVMZW5ndGg9cyxmLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBhPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1hP1wiXCI6MD09PWFyZ3VtZW50cy5sZW5ndGg/Qih0aGlzLDAsYSk6dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGYucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihhKXtpZighZi5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PWF8fDA9PT1mLmNvbXBhcmUodGhpcyxhKX0sZi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBhPVwiXCIsYj1jLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoYT10aGlzLnRvU3RyaW5nKFwiaGV4XCIsMCxiKS5tYXRjaCgvLnsyfS9nKS5qb2luKFwiIFwiKSx0aGlzLmxlbmd0aD5iJiYoYSs9XCIgLi4uIFwiKSksXCI8QnVmZmVyIFwiK2ErXCI+XCJ9LGYucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oYSl7aWYoIWYuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXJcIik7cmV0dXJuIHRoaXM9PT1hPzA6Zi5jb21wYXJlKHRoaXMsYSl9LGYucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYixjKXtmb3IodmFyIGQ9LTEsZT0wO2MrZTxhLmxlbmd0aDtlKyspaWYoYVtjK2VdPT09YlstMT09PWQ/MDplLWRdKXtpZigtMT09PWQmJihkPWUpLGUtZCsxPT09Yi5sZW5ndGgpcmV0dXJuIGMrZH1lbHNlIGQ9LTE7cmV0dXJuLTF9aWYoYj4yMTQ3NDgzNjQ3P2I9MjE0NzQ4MzY0NzpiPC0yMTQ3NDgzNjQ4JiYoYj0tMjE0NzQ4MzY0OCksYj4+PTAsMD09PXRoaXMubGVuZ3RoKXJldHVybi0xO2lmKGI+PXRoaXMubGVuZ3RoKXJldHVybi0xO2lmKGI8MCYmKGI9TWF0aC5tYXgodGhpcy5sZW5ndGgrYiwwKSksXCJzdHJpbmdcIj09dHlwZW9mIGEpcmV0dXJuIDA9PT1hLmxlbmd0aD8tMTpTdHJpbmcucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLGEsYik7aWYoZi5pc0J1ZmZlcihhKSlyZXR1cm4gYyh0aGlzLGEsYik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGEpcmV0dXJuIGYuVFlQRURfQVJSQVlfU1VQUE9SVCYmXCJmdW5jdGlvblwiPT09VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcyxhLGIpOmModGhpcyxbYV0sYik7dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlclwiKX0sZi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBjb25zb2xlLmxvZyhcIi5nZXQoKSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdXNpbmcgYXJyYXkgaW5kZXhlcyBpbnN0ZWFkLlwiKSx0aGlzLnJlYWRVSW50OChhKX0sZi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGNvbnNvbGUubG9nKFwiLnNldCgpIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB1c2luZyBhcnJheSBpbmRleGVzIGluc3RlYWQuXCIpLHRoaXMud3JpdGVVSW50OChhLGIpfSxmLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihhLGIsYyxkKXtpZih2b2lkIDA9PT1iKWQ9XCJ1dGY4XCIsYz10aGlzLmxlbmd0aCxiPTA7ZWxzZSBpZih2b2lkIDA9PT1jJiZcInN0cmluZ1wiPT10eXBlb2YgYilkPWIsYz10aGlzLmxlbmd0aCxiPTA7ZWxzZSBpZihpc0Zpbml0ZShiKSlifD0wLGlzRmluaXRlKGMpPyhjfD0wLHZvaWQgMD09PWQmJihkPVwidXRmOFwiKSk6KGQ9YyxjPXZvaWQgMCk7ZWxzZXt2YXIgZT1kO2Q9YixiPTB8YyxjPWV9dmFyIGY9dGhpcy5sZW5ndGgtYjtpZigodm9pZCAwPT09Y3x8Yz5mKSYmKGM9ZiksYS5sZW5ndGg+MCYmKGM8MHx8YjwwKXx8Yj50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzXCIpO2R8fChkPVwidXRmOFwiKTtmb3IodmFyIGc9ITE7Oylzd2l0Y2goZCl7Y2FzZVwiaGV4XCI6cmV0dXJuIHUodGhpcyxhLGIsYyk7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIHYodGhpcyxhLGIsYyk7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gdyh0aGlzLGEsYixjKTtjYXNlXCJiaW5hcnlcIjpyZXR1cm4geCh0aGlzLGEsYixjKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4geSh0aGlzLGEsYixjKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4geih0aGlzLGEsYixjKTtkZWZhdWx0OmlmKGcpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2QpO2Q9KFwiXCIrZCkudG9Mb3dlckNhc2UoKSxnPSEwfX0sZi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciAkPTQwOTY7Zi5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmxlbmd0aDthPX5+YSxiPXZvaWQgMD09PWI/Yzp+fmIsYTwwPyhhKz1jKTwwJiYoYT0wKTphPmMmJihhPWMpLGI8MD8oYis9Yyk8MCYmKGI9MCk6Yj5jJiYoYj1jKSxiPGEmJihiPWEpO3ZhciBkO2lmKGYuVFlQRURfQVJSQVlfU1VQUE9SVClkPWYuX2F1Z21lbnQodGhpcy5zdWJhcnJheShhLGIpKTtlbHNle3ZhciBlPWItYTtkPW5ldyBmKGUsdm9pZCAwKTtmb3IodmFyIGc9MDtnPGU7ZysrKWRbZ109dGhpc1tnK2FdfXJldHVybiBkLmxlbmd0aCYmKGQucGFyZW50PXRoaXMucGFyZW50fHx0aGlzKSxkfSxmLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGEsYixjKXthfD0wLGJ8PTAsY3x8SChhLGIsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZD10aGlzW2FdLGU9MSxmPTA7KytmPGImJihlKj0yNTYpOylkKz10aGlzW2ErZl0qZTtyZXR1cm4gZH0sZi5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihhLGIsYyl7YXw9MCxifD0wLGN8fEgoYSxiLHRoaXMubGVuZ3RoKTtmb3IodmFyIGQ9dGhpc1thKy0tYl0sZT0xO2I+MCYmKGUqPTI1Nik7KWQrPXRoaXNbYSstLWJdKmU7cmV0dXJuIGR9LGYucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsMSx0aGlzLmxlbmd0aCksdGhpc1thXX0sZi5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwyLHRoaXMubGVuZ3RoKSx0aGlzW2FdfHRoaXNbYSsxXTw8OH0sZi5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwyLHRoaXMubGVuZ3RoKSx0aGlzW2FdPDw4fHRoaXNbYSsxXX0sZi5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSwodGhpc1thXXx0aGlzW2ErMV08PDh8dGhpc1thKzJdPDwxNikrMTY3NzcyMTYqdGhpc1thKzNdfSxmLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbYV0rKHRoaXNbYSsxXTw8MTZ8dGhpc1thKzJdPDw4fHRoaXNbYSszXSl9LGYucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihhLGIsYyl7YXw9MCxifD0wLGN8fEgoYSxiLHRoaXMubGVuZ3RoKTtmb3IodmFyIGQ9dGhpc1thXSxlPTEsZj0wOysrZjxiJiYoZSo9MjU2KTspZCs9dGhpc1thK2ZdKmU7cmV0dXJuIGUqPTEyOCxkPj1lJiYoZC09TWF0aC5wb3coMiw4KmIpKSxkfSxmLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oYSxiLGMpe2F8PTAsYnw9MCxjfHxIKGEsYix0aGlzLmxlbmd0aCk7Zm9yKHZhciBkPWIsZT0xLGY9dGhpc1thKy0tZF07ZD4wJiYoZSo9MjU2KTspZis9dGhpc1thKy0tZF0qZTtyZXR1cm4gZSo9MTI4LGY+PWUmJihmLT1NYXRoLnBvdygyLDgqYikpLGZ9LGYucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1thXT8tMSooMjU1LXRoaXNbYV0rMSk6dGhpc1thXX0sZi5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oYSxiKXtifHxIKGEsMix0aGlzLmxlbmd0aCk7dmFyIGM9dGhpc1thXXx0aGlzW2ErMV08PDg7cmV0dXJuIDMyNzY4JmM/NDI5NDkwMTc2MHxjOmN9LGYucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGEsYil7Ynx8SChhLDIsdGhpcy5sZW5ndGgpO3ZhciBjPXRoaXNbYSsxXXx0aGlzW2FdPDw4O3JldHVybiAzMjc2OCZjPzQyOTQ5MDE3NjB8YzpjfSxmLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksdGhpc1thXXx0aGlzW2ErMV08PDh8dGhpc1thKzJdPDwxNnx0aGlzW2ErM108PDI0fSxmLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksdGhpc1thXTw8MjR8dGhpc1thKzFdPDwxNnx0aGlzW2ErMl08PDh8dGhpc1thKzNdfSxmLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksWC5yZWFkKHRoaXMsYSwhMCwyMyw0KX0sZi5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLFgucmVhZCh0aGlzLGEsITEsMjMsNCl9LGYucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsOCx0aGlzLmxlbmd0aCksWC5yZWFkKHRoaXMsYSwhMCw1Miw4KX0sZi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw4LHRoaXMubGVuZ3RoKSxYLnJlYWQodGhpcyxhLCExLDUyLDgpfSxmLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihhLGIsYyxkKXthPSthLGJ8PTAsY3w9MCxkfHxJKHRoaXMsYSxiLGMsTWF0aC5wb3coMiw4KmMpLDApO3ZhciBlPTEsZj0wO2Zvcih0aGlzW2JdPTI1NSZhOysrZjxjJiYoZSo9MjU2KTspdGhpc1tiK2ZdPWEvZSYyNTU7cmV0dXJuIGIrY30sZi5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oYSxiLGMsZCl7YT0rYSxifD0wLGN8PTAsZHx8SSh0aGlzLGEsYixjLE1hdGgucG93KDIsOCpjKSwwKTt2YXIgZT1jLTEsZj0xO2Zvcih0aGlzW2IrZV09MjU1JmE7LS1lPj0wJiYoZio9MjU2KTspdGhpc1tiK2VdPWEvZiYyNTU7cmV0dXJuIGIrY30sZi5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDEsMjU1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGE9TWF0aC5mbG9vcihhKSksdGhpc1tiXT0yNTUmYSxiKzF9LGYucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwyLDY1NTM1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT0yNTUmYSx0aGlzW2IrMV09YT4+PjgpOkoodGhpcyxhLGIsITApLGIrMn0sZi5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsNjU1MzUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj44LHRoaXNbYisxXT0yNTUmYSk6Sih0aGlzLGEsYiwhMSksYisyfSxmLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsNCw0Mjk0OTY3Mjk1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiKzNdPWE+Pj4yNCx0aGlzW2IrMl09YT4+PjE2LHRoaXNbYisxXT1hPj4+OCx0aGlzW2JdPTI1NSZhKTpLKHRoaXMsYSxiLCEwKSxiKzR9LGYucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiw0LDQyOTQ5NjcyOTUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj4yNCx0aGlzW2IrMV09YT4+PjE2LHRoaXNbYisyXT1hPj4+OCx0aGlzW2IrM109MjU1JmEpOksodGhpcyxhLGIsITEpLGIrNH0sZi5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihhLGIsYyxkKXtpZihhPSthLGJ8PTAsIWQpe3ZhciBlPU1hdGgucG93KDIsOCpjLTEpO0kodGhpcyxhLGIsYyxlLTEsLWUpfXZhciBmPTAsZz0xLGg9YTwwPzE6MDtmb3IodGhpc1tiXT0yNTUmYTsrK2Y8YyYmKGcqPTI1Nik7KXRoaXNbYitmXT0oYS9nPj4wKS1oJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGEsYixjLGQpe2lmKGE9K2EsYnw9MCwhZCl7dmFyIGU9TWF0aC5wb3coMiw4KmMtMSk7SSh0aGlzLGEsYixjLGUtMSwtZSl9dmFyIGY9Yy0xLGc9MSxoPWE8MD8xOjA7Zm9yKHRoaXNbYitmXT0yNTUmYTstLWY+PTAmJihnKj0yNTYpOyl0aGlzW2IrZl09KGEvZz4+MCktaCYyNTU7cmV0dXJuIGIrY30sZi5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMSwxMjcsLTEyOCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoYT1NYXRoLmZsb29yKGEpKSxhPDAmJihhPTI1NSthKzEpLHRoaXNbYl09MjU1JmEsYisxfSxmLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwyLDMyNzY3LC0zMjc2OCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPTI1NSZhLHRoaXNbYisxXT1hPj4+OCk6Sih0aGlzLGEsYiwhMCksYisyfSxmLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwyLDMyNzY3LC0zMjc2OCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj44LHRoaXNbYisxXT0yNTUmYSk6Sih0aGlzLGEsYiwhMSksYisyfSxmLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT0yNTUmYSx0aGlzW2IrMV09YT4+PjgsdGhpc1tiKzJdPWE+Pj4xNix0aGlzW2IrM109YT4+PjI0KTpLKHRoaXMsYSxiLCEwKSxiKzR9LGYucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksYTwwJiYoYT00Mjk0OTY3Mjk1K2ErMSksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj4yNCx0aGlzW2IrMV09YT4+PjE2LHRoaXNbYisyXT1hPj4+OCx0aGlzW2IrM109MjU1JmEpOksodGhpcyxhLGIsITEpLGIrNH0sZi5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTSh0aGlzLGEsYiwhMCxjKX0sZi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTSh0aGlzLGEsYiwhMSxjKX0sZi5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIE4odGhpcyxhLGIsITAsYyl9LGYucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBOKHRoaXMsYSxiLCExLGMpfSxmLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGEsYixjLGQpe2lmKGN8fChjPTApLGR8fDA9PT1kfHwoZD10aGlzLmxlbmd0aCksYj49YS5sZW5ndGgmJihiPWEubGVuZ3RoKSxifHwoYj0wKSxkPjAmJmQ8YyYmKGQ9YyksZD09PWMpcmV0dXJuIDA7aWYoMD09PWEubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoYjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihjPDB8fGM+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihkPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kc1wiKTtkPnRoaXMubGVuZ3RoJiYoZD10aGlzLmxlbmd0aCksYS5sZW5ndGgtYjxkLWMmJihkPWEubGVuZ3RoLWIrYyk7dmFyIGUsZz1kLWM7aWYodGhpcz09PWEmJmM8YiYmYjxkKWZvcihlPWctMTtlPj0wO2UtLSlhW2UrYl09dGhpc1tlK2NdO2Vsc2UgaWYoZzwxZTN8fCFmLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGU9MDtlPGc7ZSsrKWFbZStiXT10aGlzW2UrY107ZWxzZSBhLl9zZXQodGhpcy5zdWJhcnJheShjLGMrZyksYik7cmV0dXJuIGd9LGYucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oYSxiLGMpe2lmKGF8fChhPTApLGJ8fChiPTApLGN8fChjPXRoaXMubGVuZ3RoKSxjPGIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJlbmQgPCBzdGFydFwiKTtpZihjIT09YiYmMCE9PXRoaXMubGVuZ3RoKXtpZihiPDB8fGI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwic3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihjPDB8fGM+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJlbmQgb3V0IG9mIGJvdW5kc1wiKTt2YXIgZDtpZihcIm51bWJlclwiPT10eXBlb2YgYSlmb3IoZD1iO2Q8YztkKyspdGhpc1tkXT1hO2Vsc2V7dmFyIGU9UihhLnRvU3RyaW5nKCkpLGY9ZS5sZW5ndGg7Zm9yKGQ9YjtkPGM7ZCsrKXRoaXNbZF09ZVtkJWZdfXJldHVybiB0aGlzfX0sZi5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5KXtpZihmLlRZUEVEX0FSUkFZX1NVUFBPUlQpcmV0dXJuIG5ldyBmKHRoaXMpLmJ1ZmZlcjtmb3IodmFyIGE9bmV3IFVpbnQ4QXJyYXkodGhpcy5sZW5ndGgpLGI9MCxjPWEubGVuZ3RoO2I8YztiKz0xKWFbYl09dGhpc1tiXTtyZXR1cm4gYS5idWZmZXJ9dGhyb3cgbmV3IFR5cGVFcnJvcihcIkJ1ZmZlci50b0FycmF5QnVmZmVyIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpfTt2YXIgXz1mLnByb3RvdHlwZTtmLl9hdWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBhLmNvbnN0cnVjdG9yPWYsYS5faXNCdWZmZXI9ITAsYS5fc2V0PWEuc2V0LGEuZ2V0PV8uZ2V0LGEuc2V0PV8uc2V0LGEud3JpdGU9Xy53cml0ZSxhLnRvU3RyaW5nPV8udG9TdHJpbmcsYS50b0xvY2FsZVN0cmluZz1fLnRvU3RyaW5nLGEudG9KU09OPV8udG9KU09OLGEuZXF1YWxzPV8uZXF1YWxzLGEuY29tcGFyZT1fLmNvbXBhcmUsYS5pbmRleE9mPV8uaW5kZXhPZixhLmNvcHk9Xy5jb3B5LGEuc2xpY2U9Xy5zbGljZSxhLnJlYWRVSW50TEU9Xy5yZWFkVUludExFLGEucmVhZFVJbnRCRT1fLnJlYWRVSW50QkUsYS5yZWFkVUludDg9Xy5yZWFkVUludDgsYS5yZWFkVUludDE2TEU9Xy5yZWFkVUludDE2TEUsYS5yZWFkVUludDE2QkU9Xy5yZWFkVUludDE2QkUsYS5yZWFkVUludDMyTEU9Xy5yZWFkVUludDMyTEUsYS5yZWFkVUludDMyQkU9Xy5yZWFkVUludDMyQkUsYS5yZWFkSW50TEU9Xy5yZWFkSW50TEUsYS5yZWFkSW50QkU9Xy5yZWFkSW50QkUsYS5yZWFkSW50OD1fLnJlYWRJbnQ4LGEucmVhZEludDE2TEU9Xy5yZWFkSW50MTZMRSxhLnJlYWRJbnQxNkJFPV8ucmVhZEludDE2QkUsYS5yZWFkSW50MzJMRT1fLnJlYWRJbnQzMkxFLGEucmVhZEludDMyQkU9Xy5yZWFkSW50MzJCRSxhLnJlYWRGbG9hdExFPV8ucmVhZEZsb2F0TEUsYS5yZWFkRmxvYXRCRT1fLnJlYWRGbG9hdEJFLGEucmVhZERvdWJsZUxFPV8ucmVhZERvdWJsZUxFLGEucmVhZERvdWJsZUJFPV8ucmVhZERvdWJsZUJFLGEud3JpdGVVSW50OD1fLndyaXRlVUludDgsYS53cml0ZVVJbnRMRT1fLndyaXRlVUludExFLGEud3JpdGVVSW50QkU9Xy53cml0ZVVJbnRCRSxhLndyaXRlVUludDE2TEU9Xy53cml0ZVVJbnQxNkxFLGEud3JpdGVVSW50MTZCRT1fLndyaXRlVUludDE2QkUsYS53cml0ZVVJbnQzMkxFPV8ud3JpdGVVSW50MzJMRSxhLndyaXRlVUludDMyQkU9Xy53cml0ZVVJbnQzMkJFLGEud3JpdGVJbnRMRT1fLndyaXRlSW50TEUsYS53cml0ZUludEJFPV8ud3JpdGVJbnRCRSxhLndyaXRlSW50OD1fLndyaXRlSW50OCxhLndyaXRlSW50MTZMRT1fLndyaXRlSW50MTZMRSxhLndyaXRlSW50MTZCRT1fLndyaXRlSW50MTZCRSxhLndyaXRlSW50MzJMRT1fLndyaXRlSW50MzJMRSxhLndyaXRlSW50MzJCRT1fLndyaXRlSW50MzJCRSxhLndyaXRlRmxvYXRMRT1fLndyaXRlRmxvYXRMRSxhLndyaXRlRmxvYXRCRT1fLndyaXRlRmxvYXRCRSxhLndyaXRlRG91YmxlTEU9Xy53cml0ZURvdWJsZUxFLGEud3JpdGVEb3VibGVCRT1fLndyaXRlRG91YmxlQkUsYS5maWxsPV8uZmlsbCxhLmluc3BlY3Q9Xy5pbnNwZWN0LGEudG9BcnJheUJ1ZmZlcj1fLnRvQXJyYXlCdWZmZXIsYX07dmFyIGFhPS9bXitcXC8wLTlBLVphLXotX10vZ30pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se1wiYmFzZTY0LWpzXCI6MSxpZWVlNzU0OjcsaXNhcnJheTo4fV0sNDpbZnVuY3Rpb24oYixjLGQpeyhmdW5jdGlvbihlLGYpeyFmdW5jdGlvbihiLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBkJiZ2b2lkIDAhPT1jP2MuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYSYmYS5hbWQ/YShlKTpiLkVTNlByb21pc2U9ZSgpfSh0aGlzLGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYShhKXt2YXIgYj10eXBlb2YgYTtyZXR1cm4gbnVsbCE9PWEmJihcIm9iamVjdFwiPT09Ynx8XCJmdW5jdGlvblwiPT09Yil9ZnVuY3Rpb24gYyhhKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBhfWZ1bmN0aW9uIGQoYSl7WD1hfWZ1bmN0aW9uIGcoYSl7WT1hfWZ1bmN0aW9uIGgoKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5uZXh0VGljayhtKX19ZnVuY3Rpb24gaSgpe3JldHVybiB2b2lkIDAhPT1XP2Z1bmN0aW9uKCl7VyhtKX06bCgpfWZ1bmN0aW9uIGooKXt2YXIgYT0wLGI9bmV3IF8obSksYz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtyZXR1cm4gYi5vYnNlcnZlKGMse2NoYXJhY3RlckRhdGE6ITB9KSxmdW5jdGlvbigpe2MuZGF0YT1hPSsrYSUyfX1mdW5jdGlvbiBrKCl7dmFyIGE9bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBhLnBvcnQxLm9ubWVzc2FnZT1tLGZ1bmN0aW9uKCl7cmV0dXJuIGEucG9ydDIucG9zdE1lc3NhZ2UoMCl9fWZ1bmN0aW9uIGwoKXt2YXIgYT1zZXRUaW1lb3V0O3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhKG0sMSl9fWZ1bmN0aW9uIG0oKXtmb3IodmFyIGE9MDthPFY7YSs9Mil7KDAsY2FbYV0pKGNhW2ErMV0pLGNhW2FdPXZvaWQgMCxjYVthKzFdPXZvaWQgMH1WPTB9ZnVuY3Rpb24gbigpe3RyeXt2YXIgYT1iLGM9YShcInZlcnR4XCIpO3JldHVybiBXPWMucnVuT25Mb29wfHxjLnJ1bk9uQ29udGV4dCxpKCl9Y2F0Y2goYSl7cmV0dXJuIGwoKX19ZnVuY3Rpb24gbyhhLGIpe3ZhciBjPWFyZ3VtZW50cyxkPXRoaXMsZT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihxKTt2b2lkIDA9PT1lW2VhXSYmSihlKTt2YXIgZj1kLl9zdGF0ZTtyZXR1cm4gZj9mdW5jdGlvbigpe3ZhciBhPWNbZi0xXTtZKGZ1bmN0aW9uKCl7cmV0dXJuIEcoZixlLGEsZC5fcmVzdWx0KX0pfSgpOkMoZCxlLGEsYiksZX1mdW5jdGlvbiBwKGEpe3ZhciBiPXRoaXM7aWYoYSYmXCJvYmplY3RcIj09dHlwZW9mIGEmJmEuY29uc3RydWN0b3I9PT1iKXJldHVybiBhO3ZhciBjPW5ldyBiKHEpO3JldHVybiB5KGMsYSksY31mdW5jdGlvbiBxKCl7fWZ1bmN0aW9uIHIoKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIil9ZnVuY3Rpb24gcygpe3JldHVybiBuZXcgVHlwZUVycm9yKFwiQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLlwiKX1mdW5jdGlvbiB0KGEpe3RyeXtyZXR1cm4gYS50aGVufWNhdGNoKGEpe3JldHVybiBpYS5lcnJvcj1hLGlhfX1mdW5jdGlvbiB1KGEsYixjLGQpe3RyeXthLmNhbGwoYixjLGQpfWNhdGNoKGEpe3JldHVybiBhfX1mdW5jdGlvbiB2KGEsYixjKXtZKGZ1bmN0aW9uKGEpe3ZhciBkPSExLGU9dShjLGIsZnVuY3Rpb24oYyl7ZHx8KGQ9ITAsYiE9PWM/eShhLGMpOkEoYSxjKSl9LGZ1bmN0aW9uKGIpe2R8fChkPSEwLEIoYSxiKSl9LFwiU2V0dGxlOiBcIisoYS5fbGFiZWx8fFwiIHVua25vd24gcHJvbWlzZVwiKSk7IWQmJmUmJihkPSEwLEIoYSxlKSl9LGEpfWZ1bmN0aW9uIHcoYSxiKXtiLl9zdGF0ZT09PWdhP0EoYSxiLl9yZXN1bHQpOmIuX3N0YXRlPT09aGE/QihhLGIuX3Jlc3VsdCk6QyhiLHZvaWQgMCxmdW5jdGlvbihiKXtyZXR1cm4geShhLGIpfSxmdW5jdGlvbihiKXtyZXR1cm4gQihhLGIpfSl9ZnVuY3Rpb24geChhLGIsZCl7Yi5jb25zdHJ1Y3Rvcj09PWEuY29uc3RydWN0b3ImJmQ9PT1vJiZiLmNvbnN0cnVjdG9yLnJlc29sdmU9PT1wP3coYSxiKTpkPT09aWE/KEIoYSxpYS5lcnJvciksaWEuZXJyb3I9bnVsbCk6dm9pZCAwPT09ZD9BKGEsYik6YyhkKT92KGEsYixkKTpBKGEsYil9ZnVuY3Rpb24geShiLGMpe2I9PT1jP0IoYixyKCkpOmEoYyk/eChiLGMsdChjKSk6QShiLGMpfWZ1bmN0aW9uIHooYSl7YS5fb25lcnJvciYmYS5fb25lcnJvcihhLl9yZXN1bHQpLEQoYSl9ZnVuY3Rpb24gQShhLGIpe2EuX3N0YXRlPT09ZmEmJihhLl9yZXN1bHQ9YixhLl9zdGF0ZT1nYSwwIT09YS5fc3Vic2NyaWJlcnMubGVuZ3RoJiZZKEQsYSkpfWZ1bmN0aW9uIEIoYSxiKXthLl9zdGF0ZT09PWZhJiYoYS5fc3RhdGU9aGEsYS5fcmVzdWx0PWIsWSh6LGEpKX1mdW5jdGlvbiBDKGEsYixjLGQpe3ZhciBlPWEuX3N1YnNjcmliZXJzLGY9ZS5sZW5ndGg7YS5fb25lcnJvcj1udWxsLGVbZl09YixlW2YrZ2FdPWMsZVtmK2hhXT1kLDA9PT1mJiZhLl9zdGF0ZSYmWShELGEpfWZ1bmN0aW9uIEQoYSl7dmFyIGI9YS5fc3Vic2NyaWJlcnMsYz1hLl9zdGF0ZTtpZigwIT09Yi5sZW5ndGgpe2Zvcih2YXIgZD12b2lkIDAsZT12b2lkIDAsZj1hLl9yZXN1bHQsZz0wO2c8Yi5sZW5ndGg7Zys9MylkPWJbZ10sZT1iW2crY10sZD9HKGMsZCxlLGYpOmUoZik7YS5fc3Vic2NyaWJlcnMubGVuZ3RoPTB9fWZ1bmN0aW9uIEUoKXt0aGlzLmVycm9yPW51bGx9ZnVuY3Rpb24gRihhLGIpe3RyeXtyZXR1cm4gYShiKX1jYXRjaChhKXtyZXR1cm4gamEuZXJyb3I9YSxqYX19ZnVuY3Rpb24gRyhhLGIsZCxlKXt2YXIgZj1jKGQpLGc9dm9pZCAwLGg9dm9pZCAwLGk9dm9pZCAwLGo9dm9pZCAwO2lmKGYpe2lmKGc9RihkLGUpLGc9PT1qYT8oaj0hMCxoPWcuZXJyb3IsZy5lcnJvcj1udWxsKTppPSEwLGI9PT1nKXJldHVybiB2b2lkIEIoYixzKCkpfWVsc2UgZz1lLGk9ITA7Yi5fc3RhdGUhPT1mYXx8KGYmJmk/eShiLGcpOmo/QihiLGgpOmE9PT1nYT9BKGIsZyk6YT09PWhhJiZCKGIsZykpfWZ1bmN0aW9uIEgoYSxiKXt0cnl7YihmdW5jdGlvbihiKXt5KGEsYil9LGZ1bmN0aW9uKGIpe0IoYSxiKX0pfWNhdGNoKGIpe0IoYSxiKX19ZnVuY3Rpb24gSSgpe3JldHVybiBrYSsrfWZ1bmN0aW9uIEooYSl7YVtlYV09a2ErKyxhLl9zdGF0ZT12b2lkIDAsYS5fcmVzdWx0PXZvaWQgMCxhLl9zdWJzY3JpYmVycz1bXX1mdW5jdGlvbiBLKGEsYil7dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3Rvcj1hLHRoaXMucHJvbWlzZT1uZXcgYShxKSx0aGlzLnByb21pc2VbZWFdfHxKKHRoaXMucHJvbWlzZSksVShiKT8odGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5fcmVtYWluaW5nPWIubGVuZ3RoLHRoaXMuX3Jlc3VsdD1uZXcgQXJyYXkodGhpcy5sZW5ndGgpLDA9PT10aGlzLmxlbmd0aD9BKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpOih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aHx8MCx0aGlzLl9lbnVtZXJhdGUoYiksMD09PXRoaXMuX3JlbWFpbmluZyYmQSh0aGlzLnByb21pc2UsdGhpcy5fcmVzdWx0KSkpOkIodGhpcy5wcm9taXNlLEwoKSl9ZnVuY3Rpb24gTCgpe3JldHVybiBuZXcgRXJyb3IoXCJBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXlcIil9ZnVuY3Rpb24gTShhKXtyZXR1cm4gbmV3IEsodGhpcyxhKS5wcm9taXNlfWZ1bmN0aW9uIE4oYSl7dmFyIGI9dGhpcztyZXR1cm4gbmV3IGIoVShhKT9mdW5jdGlvbihjLGQpe2Zvcih2YXIgZT1hLmxlbmd0aCxmPTA7ZjxlO2YrKyliLnJlc29sdmUoYVtmXSkudGhlbihjLGQpfTpmdW5jdGlvbihhLGIpe3JldHVybiBiKG5ldyBUeXBlRXJyb3IoXCJZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuXCIpKX0pfWZ1bmN0aW9uIE8oYSl7dmFyIGI9dGhpcyxjPW5ldyBiKHEpO3JldHVybiBCKGMsYSksY31mdW5jdGlvbiBQKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIllvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHByb21pc2UgY29uc3RydWN0b3JcIil9ZnVuY3Rpb24gUSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIil9ZnVuY3Rpb24gUihhKXt0aGlzW2VhXT1JKCksdGhpcy5fcmVzdWx0PXRoaXMuX3N0YXRlPXZvaWQgMCx0aGlzLl9zdWJzY3JpYmVycz1bXSxxIT09YSYmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEmJlAoKSx0aGlzIGluc3RhbmNlb2YgUj9IKHRoaXMsYSk6USgpKX1mdW5jdGlvbiBTKCl7dmFyIGE9dm9pZCAwO2lmKHZvaWQgMCE9PWYpYT1mO2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYpYT1zZWxmO2Vsc2UgdHJ5e2E9RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGEpe3Rocm93IG5ldyBFcnJvcihcInBvbHlmaWxsIGZhaWxlZCBiZWNhdXNlIGdsb2JhbCBvYmplY3QgaXMgdW5hdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudFwiKX12YXIgYj1hLlByb21pc2U7aWYoYil7dmFyIGM9bnVsbDt0cnl7Yz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYi5yZXNvbHZlKCkpfWNhdGNoKGEpe31pZihcIltvYmplY3QgUHJvbWlzZV1cIj09PWMmJiFiLmNhc3QpcmV0dXJufWEuUHJvbWlzZT1SfXZhciBUPXZvaWQgMDtUPUFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheTpmdW5jdGlvbihhKXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSl9O3ZhciBVPVQsVj0wLFc9dm9pZCAwLFg9dm9pZCAwLFk9ZnVuY3Rpb24oYSxiKXtjYVtWXT1hLGNhW1YrMV09YiwyPT09KFYrPTIpJiYoWD9YKG0pOmRhKCkpfSxaPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCwkPVp8fHt9LF89JC5NdXRhdGlvbk9ic2VydmVyfHwkLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsYWE9XCJ1bmRlZmluZWRcIj09dHlwZW9mIHNlbGYmJnZvaWQgMCE9PWUmJlwiW29iamVjdCBwcm9jZXNzXVwiPT09e30udG9TdHJpbmcuY2FsbChlKSxiYT1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBpbXBvcnRTY3JpcHRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWwsY2E9bmV3IEFycmF5KDFlMyksZGE9dm9pZCAwO2RhPWFhP2goKTpfP2ooKTpiYT9rKCk6dm9pZCAwPT09WiYmXCJmdW5jdGlvblwiPT10eXBlb2YgYj9uKCk6bCgpO3ZhciBlYT1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpLGZhPXZvaWQgMCxnYT0xLGhhPTIsaWE9bmV3IEUsamE9bmV3IEUsa2E9MDtyZXR1cm4gSy5wcm90b3R5cGUuX2VudW1lcmF0ZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9MDt0aGlzLl9zdGF0ZT09PWZhJiZiPGEubGVuZ3RoO2IrKyl0aGlzLl9lYWNoRW50cnkoYVtiXSxiKX0sSy5wcm90b3R5cGUuX2VhY2hFbnRyeT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3IsZD1jLnJlc29sdmU7aWYoZD09PXApe3ZhciBlPXQoYSk7aWYoZT09PW8mJmEuX3N0YXRlIT09ZmEpdGhpcy5fc2V0dGxlZEF0KGEuX3N0YXRlLGIsYS5fcmVzdWx0KTtlbHNlIGlmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhpcy5fcmVtYWluaW5nLS0sdGhpcy5fcmVzdWx0W2JdPWE7ZWxzZSBpZihjPT09Uil7dmFyIGY9bmV3IGMocSk7eChmLGEsZSksdGhpcy5fd2lsbFNldHRsZUF0KGYsYil9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQobmV3IGMoZnVuY3Rpb24oYil7cmV0dXJuIGIoYSl9KSxiKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChkKGEpLGIpfSxLLnByb3RvdHlwZS5fc2V0dGxlZEF0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLnByb21pc2U7ZC5fc3RhdGU9PT1mYSYmKHRoaXMuX3JlbWFpbmluZy0tLGE9PT1oYT9CKGQsYyk6dGhpcy5fcmVzdWx0W2JdPWMpLDA9PT10aGlzLl9yZW1haW5pbmcmJkEoZCx0aGlzLl9yZXN1bHQpfSxLLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztDKGEsdm9pZCAwLGZ1bmN0aW9uKGEpe3JldHVybiBjLl9zZXR0bGVkQXQoZ2EsYixhKX0sZnVuY3Rpb24oYSl7cmV0dXJuIGMuX3NldHRsZWRBdChoYSxiLGEpfSl9LFIuYWxsPU0sUi5yYWNlPU4sUi5yZXNvbHZlPXAsUi5yZWplY3Q9TyxSLl9zZXRTY2hlZHVsZXI9ZCxSLl9zZXRBc2FwPWcsUi5fYXNhcD1ZLFIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpSLHRoZW46byxjYXRjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsYSl9fSxSLnBvbHlmaWxsPVMsUi5Qcm9taXNlPVIsUn0pfSkuY2FsbCh0aGlzLGIoXCJfcHJvY2Vzc1wiKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se19wcm9jZXNzOjExfV0sNTpbZnVuY3Rpb24oYixjLGQpeyFmdW5jdGlvbihiLGUpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJmEuYW1kKWEoW1wiZXhwb3J0c1wiLFwibW9kdWxlXCJdLGUpO2Vsc2UgaWYodm9pZCAwIT09ZCYmdm9pZCAwIT09YyllKGQsYyk7ZWxzZXt2YXIgZj17ZXhwb3J0czp7fX07ZShmLmV4cG9ydHMsZiksYi5mZXRjaEpzb25wPWYuZXhwb3J0c319KHRoaXMsZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBjKCl7cmV0dXJuXCJqc29ucF9cIitEYXRlLm5vdygpK1wiX1wiK01hdGguY2VpbCgxZTUqTWF0aC5yYW5kb20oKSl9ZnVuY3Rpb24gZChhKXt0cnl7ZGVsZXRlIHdpbmRvd1thXX1jYXRjaChiKXt3aW5kb3dbYV09dm9pZCAwfX1mdW5jdGlvbiBlKGEpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpO2ImJmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBmKGEpe3ZhciBiPWFyZ3VtZW50cy5sZW5ndGg8PTF8fHZvaWQgMD09PWFyZ3VtZW50c1sxXT97fTphcmd1bWVudHNbMV0sZj1hLGg9Yi50aW1lb3V0fHxnLnRpbWVvdXQsaT1iLmpzb25wQ2FsbGJhY2t8fGcuanNvbnBDYWxsYmFjayxqPXZvaWQgMDtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZyxrKXt2YXIgbD1iLmpzb25wQ2FsbGJhY2tGdW5jdGlvbnx8YygpLG09aStcIl9cIitsO3dpbmRvd1tsXT1mdW5jdGlvbihhKXtnKHtvazohMCxqc29uOmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShhKX19KSxqJiZjbGVhclRpbWVvdXQoaiksZShtKSxkKGwpfSxmKz0tMT09PWYuaW5kZXhPZihcIj9cIik/XCI/XCI6XCImXCI7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtuLnNldEF0dHJpYnV0ZShcInNyY1wiLFwiXCIrZitpK1wiPVwiK2wpLGIuY2hhcnNldCYmbi5zZXRBdHRyaWJ1dGUoXCJjaGFyc2V0XCIsYi5jaGFyc2V0KSxuLmlkPW0sZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKG4pLGo9c2V0VGltZW91dChmdW5jdGlvbigpe2sobmV3IEVycm9yKFwiSlNPTlAgcmVxdWVzdCB0byBcIithK1wiIHRpbWVkIG91dFwiKSksZChsKSxlKG0pLHdpbmRvd1tsXT1mdW5jdGlvbigpe2QobCl9fSxoKSxuLm9uZXJyb3I9ZnVuY3Rpb24oKXtrKG5ldyBFcnJvcihcIkpTT05QIHJlcXVlc3QgdG8gXCIrYStcIiBmYWlsZWRcIikpLGQobCksZShtKSxqJiZjbGVhclRpbWVvdXQoail9fSl9dmFyIGc9e3RpbWVvdXQ6NWUzLGpzb25wQ2FsbGJhY2s6XCJjYWxsYmFja1wiLGpzb25wQ2FsbGJhY2tGdW5jdGlvbjpudWxsfTtiLmV4cG9ydHM9Zn0pfSx7fV0sNjpbZnVuY3Rpb24oYixjLGQpe3ZhciBlPWV8fGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2lmKCEodm9pZCAwPT09YXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL01TSUUgWzEtOV1cXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpKXt2YXIgYj1hLmRvY3VtZW50LGM9ZnVuY3Rpb24oKXtyZXR1cm4gYS5VUkx8fGEud2Via2l0VVJMfHxhfSxkPWIuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFwiYVwiKSxlPVwiZG93bmxvYWRcImluIGQsZj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgTW91c2VFdmVudChcImNsaWNrXCIpO2EuZGlzcGF0Y2hFdmVudChiKX0sZz0vY29uc3RydWN0b3IvaS50ZXN0KGEuSFRNTEVsZW1lbnQpfHxhLnNhZmFyaSxoPS9DcmlPU1xcL1tcXGRdKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxpPWZ1bmN0aW9uKGIpeyhhLnNldEltbWVkaWF0ZXx8YS5zZXRUaW1lb3V0KShmdW5jdGlvbigpe3Rocm93IGJ9LDApfSxqPVwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsaz00ZTQsbD1mdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbigpe1wic3RyaW5nXCI9PXR5cGVvZiBhP2MoKS5yZXZva2VPYmplY3RVUkwoYSk6YS5yZW1vdmUoKX07c2V0VGltZW91dChiLGspfSxtPWZ1bmN0aW9uKGEsYixjKXtiPVtdLmNvbmNhdChiKTtmb3IodmFyIGQ9Yi5sZW5ndGg7ZC0tOyl7dmFyIGU9YVtcIm9uXCIrYltkXV07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSl0cnl7ZS5jYWxsKGEsY3x8YSl9Y2F0Y2goYSl7aShhKX19fSxuPWZ1bmN0aW9uKGEpe3JldHVybi9eXFxzKig/OnRleHRcXC9cXFMqfGFwcGxpY2F0aW9uXFwveG1sfFxcUypcXC9cXFMqXFwreG1sKVxccyo7LipjaGFyc2V0XFxzKj1cXHMqdXRmLTgvaS50ZXN0KGEudHlwZSk/bmV3IEJsb2IoW1N0cmluZy5mcm9tQ2hhckNvZGUoNjUyNzkpLGFdLHt0eXBlOmEudHlwZX0pOmF9LG89ZnVuY3Rpb24oYixpLGspe2t8fChiPW4oYikpO3ZhciBvLHA9dGhpcyxxPWIudHlwZSxyPXE9PT1qLHM9ZnVuY3Rpb24oKXttKHAsXCJ3cml0ZXN0YXJ0IHByb2dyZXNzIHdyaXRlIHdyaXRlZW5kXCIuc3BsaXQoXCIgXCIpKX0sdD1mdW5jdGlvbigpe2lmKChofHxyJiZnKSYmYS5GaWxlUmVhZGVyKXt2YXIgZD1uZXcgRmlsZVJlYWRlcjtyZXR1cm4gZC5vbmxvYWRlbmQ9ZnVuY3Rpb24oKXt2YXIgYj1oP2QucmVzdWx0OmQucmVzdWx0LnJlcGxhY2UoL15kYXRhOlteO10qOy8sXCJkYXRhOmF0dGFjaG1lbnQvZmlsZTtcIik7YS5vcGVuKGIsXCJfYmxhbmtcIil8fChhLmxvY2F0aW9uLmhyZWY9YiksYj12b2lkIDAscC5yZWFkeVN0YXRlPXAuRE9ORSxzKCl9LGQucmVhZEFzRGF0YVVSTChiKSx2b2lkKHAucmVhZHlTdGF0ZT1wLklOSVQpfWlmKG98fChvPWMoKS5jcmVhdGVPYmplY3RVUkwoYikpLHIpYS5sb2NhdGlvbi5ocmVmPW87ZWxzZXthLm9wZW4obyxcIl9ibGFua1wiKXx8KGEubG9jYXRpb24uaHJlZj1vKX1wLnJlYWR5U3RhdGU9cC5ET05FLHMoKSxsKG8pfTtpZihwLnJlYWR5U3RhdGU9cC5JTklULGUpcmV0dXJuIG89YygpLmNyZWF0ZU9iamVjdFVSTChiKSx2b2lkIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmhyZWY9byxkLmRvd25sb2FkPWksZihkKSxzKCksbChvKSxwLnJlYWR5U3RhdGU9cC5ET05FfSk7dCgpfSxwPW8ucHJvdG90eXBlLHE9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuZXcgbyhhLGJ8fGEubmFtZXx8XCJkb3dubG9hZFwiLGMpfTtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYj9mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9Ynx8YS5uYW1lfHxcImRvd25sb2FkXCIsY3x8KGE9bihhKSksbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoYSxiKX06KHAuYWJvcnQ9ZnVuY3Rpb24oKXt9LHAucmVhZHlTdGF0ZT1wLklOSVQ9MCxwLldSSVRJTkc9MSxwLkRPTkU9MixwLmVycm9yPXAub253cml0ZXN0YXJ0PXAub25wcm9ncmVzcz1wLm9ud3JpdGU9cC5vbmFib3J0PXAub25lcnJvcj1wLm9ud3JpdGVlbmQ9bnVsbCxxKX19KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmfHxcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3d8fHRoaXMuY29udGVudCk7dm9pZCAwIT09YyYmYy5leHBvcnRzP2MuZXhwb3J0cy5zYXZlQXM9ZTp2b2lkIDAhPT1hJiZudWxsIT09YSYmbnVsbCE9PWEuYW1kJiZhKFwiRmlsZVNhdmVyLmpzXCIsZnVuY3Rpb24oKXtyZXR1cm4gZX0pfSx7fV0sNzpbZnVuY3Rpb24oYSxiLGMpe2MucmVhZD1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaD04KmUtZC0xLGk9KDE8PGgpLTEsaj1pPj4xLGs9LTcsbD1jP2UtMTowLG09Yz8tMToxLG49YVtiK2xdO2ZvcihsKz1tLGY9biYoMTw8LWspLTEsbj4+PS1rLGsrPWg7az4wO2Y9MjU2KmYrYVtiK2xdLGwrPW0say09OCk7Zm9yKGc9ZiYoMTw8LWspLTEsZj4+PS1rLGsrPWQ7az4wO2c9MjU2KmcrYVtiK2xdLGwrPW0say09OCk7aWYoMD09PWYpZj0xLWo7ZWxzZXtpZihmPT09aSlyZXR1cm4gZz9OYU46MS8wKihuPy0xOjEpO2crPU1hdGgucG93KDIsZCksZi09an1yZXR1cm4obj8tMToxKSpnKk1hdGgucG93KDIsZi1kKX0sYy53cml0ZT1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGcsaCxpLGo9OCpmLWUtMSxrPSgxPDxqKS0xLGw9az4+MSxtPTIzPT09ZT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsbj1kPzA6Zi0xLG89ZD8xOi0xLHA9YjwwfHwwPT09YiYmMS9iPDA/MTowO2ZvcihiPU1hdGguYWJzKGIpLGlzTmFOKGIpfHxiPT09MS8wPyhoPWlzTmFOKGIpPzE6MCxnPWspOihnPU1hdGguZmxvb3IoTWF0aC5sb2coYikvTWF0aC5MTjIpLGIqKGk9TWF0aC5wb3coMiwtZykpPDEmJihnLS0saSo9MiksYis9ZytsPj0xP20vaTptKk1hdGgucG93KDIsMS1sKSxiKmk+PTImJihnKyssaS89MiksZytsPj1rPyhoPTAsZz1rKTpnK2w+PTE/KGg9KGIqaS0xKSpNYXRoLnBvdygyLGUpLGcrPWwpOihoPWIqTWF0aC5wb3coMixsLTEpKk1hdGgucG93KDIsZSksZz0wKSk7ZT49ODthW2Mrbl09MjU1Jmgsbis9byxoLz0yNTYsZS09OCk7Zm9yKGc9Zzw8ZXxoLGorPWU7aj4wO2FbYytuXT0yNTUmZyxuKz1vLGcvPTI1NixqLT04KTthW2Mrbi1vXXw9MTI4KnB9fSx7fV0sODpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9LnRvU3RyaW5nO2IuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PWQuY2FsbChhKX19LHt9XSw5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhLmI9PT1iLmImJmEuYT09PWIuYX1mdW5jdGlvbiBlKGEsYil7cmV0dXJuIGEuYjxiLmJ8fGEuYj09PWIuYiYmYS5hPD1iLmF9ZnVuY3Rpb24gZihhLGIsYyl7dmFyIGQ9Yi5iLWEuYixlPWMuYi1iLmJcbjtyZXR1cm4gMDxkK2U/ZDxlP2IuYS1hLmErZC8oZCtlKSooYS5hLWMuYSk6Yi5hLWMuYStlLyhkK2UpKihjLmEtYS5hKTowfWZ1bmN0aW9uIGcoYSxiLGMpe3ZhciBkPWIuYi1hLmIsZT1jLmItYi5iO3JldHVybiAwPGQrZT8oYi5hLWMuYSkqZCsoYi5hLWEuYSkqZTowfWZ1bmN0aW9uIGgoYSxiKXtyZXR1cm4gYS5hPGIuYXx8YS5hPT09Yi5hJiZhLmI8PWIuYn1mdW5jdGlvbiBpKGEsYixjKXt2YXIgZD1iLmEtYS5hLGU9Yy5hLWIuYTtyZXR1cm4gMDxkK2U/ZDxlP2IuYi1hLmIrZC8oZCtlKSooYS5iLWMuYik6Yi5iLWMuYitlLyhkK2UpKihjLmItYS5iKTowfWZ1bmN0aW9uIGooYSxiLGMpe3ZhciBkPWIuYS1hLmEsZT1jLmEtYi5hO3JldHVybiAwPGQrZT8oYi5iLWMuYikqZCsoYi5iLWEuYikqZTowfWZ1bmN0aW9uIGsoYSl7cmV0dXJuIGUoYS5iLmEsYS5hKX1mdW5jdGlvbiBsKGEpe3JldHVybiBlKGEuYSxhLmIuYSl9ZnVuY3Rpb24gbShhLGIsYyxkKXtyZXR1cm4gYT0wPmE/MDphLGM9MD5jPzA6YyxhPD1jPzA9PT1jPyhiK2QpLzI6YithLyhhK2MpKihkLWIpOmQrYy8oYStjKSooYi1kKX1mdW5jdGlvbiBuKGEpe3ZhciBiPXMoYS5iKTtyZXR1cm4gdShiLGEuYyksdShiLmIsYS5jKSx2KGIsYS5hKSxifWZ1bmN0aW9uIG8oYSxiKXt2YXIgYz0hMSxkPSExO2EhPT1iJiYoYi5hIT09YS5hJiYoZD0hMCx4KGIuYSxhLmEpKSxiLmQhPT1hLmQmJihjPSEwLHkoYi5kLGEuZCkpLHQoYixhKSxkfHwodShiLGEuYSksYS5hLmM9YSksY3x8KHYoYixhLmQpLGEuZC5hPWEpKX1mdW5jdGlvbiBwKGEpe3ZhciBiPWEuYixjPSExO2EuZCE9PWEuYi5kJiYoYz0hMCx5KGEuZCxhLmIuZCkpLGEuYz09PWE/eChhLmEsbnVsbCk6KGEuYi5kLmE9JChhKSxhLmEuYz1hLmMsdChhLCQoYSkpLGN8fHYoYSxhLmQpKSxiLmM9PT1iPyh4KGIuYSxudWxsKSx5KGIuZCxudWxsKSk6KGEuZC5hPSQoYiksYi5hLmM9Yi5jLHQoYiwkKGIpKSksdyhhKX1mdW5jdGlvbiBxKGEpe3ZhciBiPXMoYSksYz1iLmI7cmV0dXJuIHQoYixhLmUpLGIuYT1hLmIuYSx1KGMsYi5hKSxiLmQ9Yy5kPWEuZCxiPWIuYix0KGEuYiwkKGEuYikpLHQoYS5iLGIpLGEuYi5hPWIuYSxiLmIuYS5jPWIuYixiLmIuZD1hLmIuZCxiLmY9YS5mLGIuYi5mPWEuYi5mLGJ9ZnVuY3Rpb24gcihhLGIpe3ZhciBjPSExLGQ9cyhhKSxlPWQuYjtyZXR1cm4gYi5kIT09YS5kJiYoYz0hMCx5KGIuZCxhLmQpKSx0KGQsYS5lKSx0KGUsYiksZC5hPWEuYi5hLGUuYT1iLmEsZC5kPWUuZD1hLmQsYS5kLmE9ZSxjfHx2KGQsYS5kKSxkfWZ1bmN0aW9uIHMoYSl7dmFyIGI9bmV3IFosYz1uZXcgWixkPWEuYi5oO3JldHVybiBjLmg9ZCxkLmIuaD1iLGIuaD1hLGEuYi5oPWMsYi5iPWMsYi5jPWIsYi5lPWMsYy5iPWIsYy5jPWMsYy5lPWJ9ZnVuY3Rpb24gdChhLGIpe3ZhciBjPWEuYyxkPWIuYztjLmIuZT1iLGQuYi5lPWEsYS5jPWQsYi5jPWN9ZnVuY3Rpb24gdShhLGIpe3ZhciBjPWIuZixkPW5ldyBhYShiLGMpO2MuZT1kLGIuZj1kLGM9ZC5jPWE7ZG97Yy5hPWQsYz1jLmN9d2hpbGUoYyE9PWEpfWZ1bmN0aW9uIHYoYSxiKXt2YXIgYz1iLmQsZD1uZXcgWShiLGMpO2MuYj1kLGIuZD1kLGQuYT1hLGQuYz1iLmMsYz1hO2Rve2MuZD1kLGM9Yy5lfXdoaWxlKGMhPT1hKX1mdW5jdGlvbiB3KGEpe3ZhciBiPWEuaDthPWEuYi5oLGIuYi5oPWEsYS5iLmg9Yn1mdW5jdGlvbiB4KGEsYil7dmFyIGM9YS5jLGQ9Yztkb3tkLmE9YixkPWQuY313aGlsZShkIT09Yyk7Yz1hLmYsZD1hLmUsZC5mPWMsYy5lPWR9ZnVuY3Rpb24geShhLGIpe3ZhciBjPWEuYSxkPWM7ZG97ZC5kPWIsZD1kLmV9d2hpbGUoZCE9PWMpO2M9YS5kLGQ9YS5iLGQuZD1jLGMuYj1kfWZ1bmN0aW9uIHooYSl7dmFyIGI9MDtyZXR1cm4gTWF0aC5hYnMoYVsxXSk+TWF0aC5hYnMoYVswXSkmJihiPTEpLE1hdGguYWJzKGFbMl0pPk1hdGguYWJzKGFbYl0pJiYoYj0yKSxifWZ1bmN0aW9uIEEoYSxiKXthLmYrPWIuZixhLmIuZis9Yi5iLmZ9ZnVuY3Rpb24gQihhLGIsYyl7cmV0dXJuIGE9YS5hLGI9Yi5hLGM9Yy5hLGIuYi5hPT09YT9jLmIuYT09PWE/ZShiLmEsYy5hKT8wPj1nKGMuYi5hLGIuYSxjLmEpOjA8PWcoYi5iLmEsYy5hLGIuYSk6MD49ZyhjLmIuYSxhLGMuYSk6Yy5iLmE9PT1hPzA8PWcoYi5iLmEsYSxiLmEpOihiPWYoYi5iLmEsYSxiLmEpLGE9ZihjLmIuYSxhLGMuYSksYj49YSl9ZnVuY3Rpb24gQyhhKXthLmEuaT1udWxsO3ZhciBiPWEuZTtiLmEuYz1iLmMsYi5jLmE9Yi5hLGEuZT1udWxsfWZ1bmN0aW9uIEQoYSxiKXtwKGEuYSksYS5jPSExLGEuYT1iLGIuaT1hfWZ1bmN0aW9uIEUoYSl7dmFyIGI9YS5hLmE7ZG97YT1vYShhKX13aGlsZShhLmEuYT09PWIpO3JldHVybiBhLmMmJihiPXIobmEoYSkuYS5iLGEuYS5lKSxEKGEsYiksYT1vYShhKSksYX1mdW5jdGlvbiBGKGEsYixjKXt2YXIgZD1uZXcgbWE7cmV0dXJuIGQuYT1jLGQuZT1UKGEuZixiLmUsZCksYy5pPWR9ZnVuY3Rpb24gRyhhLGIpe3N3aXRjaChhLnMpe2Nhc2UgMTAwMTMwOnJldHVybiAwIT0oMSZiKTtjYXNlIDEwMDEzMTpyZXR1cm4gMCE9PWI7Y2FzZSAxMDAxMzI6cmV0dXJuIDA8YjtjYXNlIDEwMDEzMzpyZXR1cm4gMD5iO2Nhc2UgMTAwMTM0OnJldHVybiAyPD1ifHwtMj49Yn1yZXR1cm4hMX1mdW5jdGlvbiBIKGEpe3ZhciBiPWEuYSxjPWIuZDtjLmM9YS5kLGMuYT1iLEMoYSl9ZnVuY3Rpb24gSShhLGIsYyl7Zm9yKGE9YixiPWIuYTthIT09Yzspe2EuYz0hMTt2YXIgZD1uYShhKSxlPWQuYTtpZihlLmEhPT1iLmEpe2lmKCFkLmMpe0goYSk7YnJlYWt9ZT1yKGIuYy5iLGUuYiksRChkLGUpfWIuYyE9PWUmJihvKCQoZSksZSksbyhiLGUpKSxIKGEpLGI9ZC5hLGE9ZH1yZXR1cm4gYn1mdW5jdGlvbiBKKGEsYixjLGQsZSxmKXt2YXIgZz0hMDtkb3tGKGEsYixjLmIpLGM9Yy5jfXdoaWxlKGMhPT1kKTtmb3IobnVsbD09PWUmJihlPW5hKGIpLmEuYi5jKTtkPW5hKGIpLGM9ZC5hLmIsYy5hPT09ZS5hOyljLmMhPT1lJiYobygkKGMpLGMpLG8oJChlKSxjKSksZC5mPWIuZi1jLmYsZC5kPUcoYSxkLmYpLGIuYj0hMCwhZyYmTihhLGIpJiYoQShjLGUpLEMoYikscChlKSksZz0hMSxiPWQsZT1jO2IuYj0hMCxmJiZQKGEsYil9ZnVuY3Rpb24gSyhhLGIsYyxkLGUpe3ZhciBmPVtiLmdbMF0sYi5nWzFdLGIuZ1syXV07Yi5kPW51bGwsYi5kPWEubz9hLm8oZixjLGQsYS5jKXx8bnVsbDpudWxsLG51bGw9PT1iLmQmJihlP2Eubnx8KFgoYSwxMDAxNTYpLGEubj0hMCk6Yi5kPWNbMF0pfWZ1bmN0aW9uIEwoYSxiLGMpe3ZhciBkPVtudWxsLG51bGwsbnVsbCxudWxsXTtkWzBdPWIuYS5kLGRbMV09Yy5hLmQsSyhhLGIuYSxkLFsuNSwuNSwwLDBdLCExKSxvKGIsYyl9ZnVuY3Rpb24gTShhLGIsYyxkLGUpe3ZhciBmPU1hdGguYWJzKGIuYi1hLmIpK01hdGguYWJzKGIuYS1hLmEpLGc9TWF0aC5hYnMoYy5iLWEuYikrTWF0aC5hYnMoYy5hLWEuYSksaD1lKzE7ZFtlXT0uNSpnLyhmK2cpLGRbaF09LjUqZi8oZitnKSxhLmdbMF0rPWRbZV0qYi5nWzBdK2RbaF0qYy5nWzBdLGEuZ1sxXSs9ZFtlXSpiLmdbMV0rZFtoXSpjLmdbMV0sYS5nWzJdKz1kW2VdKmIuZ1syXStkW2hdKmMuZ1syXX1mdW5jdGlvbiBOKGEsYil7dmFyIGM9bmEoYiksZj1iLmEsaD1jLmE7aWYoZShmLmEsaC5hKSl7aWYoMDxnKGguYi5hLGYuYSxoLmEpKXJldHVybiExO2lmKGQoZi5hLGguYSkpe2lmKGYuYSE9PWguYSl7dmFyIGM9YS5lLGk9Zi5hLmg7aWYoMDw9aSl7dmFyIGM9Yy5iLGo9Yy5kLGs9Yy5lLGw9Yy5jLG09bFtpXTtqW21dPWpbYy5hXSxsW2pbbV1dPW0sbTw9LS1jLmEmJigxPj1tP2thKGMsbSk6ZShrW2pbbT4+MV1dLGtbalttXV0pP2thKGMsbSk6bGEoYyxtKSksa1tpXT1udWxsLGxbaV09Yy5iLGMuYj1pfWVsc2UgZm9yKGMuY1stKGkrMSldPW51bGw7MDxjLmEmJm51bGw9PT1jLmNbYy5kW2MuYS0xXV07KS0tYy5hO0woYSwkKGgpLGYpfX1lbHNlIHEoaC5iKSxvKGYsJChoKSksYi5iPWMuYj0hMH1lbHNle2lmKDA+ZyhmLmIuYSxoLmEsZi5hKSlyZXR1cm4hMTtvYShiKS5iPWIuYj0hMCxxKGYuYiksbygkKGgpLGYpfXJldHVybiEwfWZ1bmN0aW9uIE8oYSxiKXt2YXIgYz1uYShiKSxrPWIuYSxsPWMuYSxuPWsuYSxwPWwuYSxyPWsuYi5hLHM9bC5iLmEsdD1uZXcgYWE7aWYoZyhyLGEuYSxuKSxnKHMsYS5hLHApLG49PT1wfHxNYXRoLm1pbihuLmEsci5hKT5NYXRoLm1heChwLmEscy5hKSlyZXR1cm4hMTtpZihlKG4scCkpe2lmKDA8ZyhzLG4scCkpcmV0dXJuITF9ZWxzZSBpZigwPmcocixwLG4pKXJldHVybiExO3ZhciB1LHYsdz1yLHg9bix5PXMsej1wO2lmKGUodyx4KXx8KHU9dyx3PXgseD11KSxlKHkseil8fCh1PXkseT16LHo9dSksZSh3LHkpfHwodT13LHc9eSx5PXUsdT14LHg9eix6PXUpLGUoeSx4KT9lKHgseik/KHU9Zih3LHkseCksdj1mKHkseCx6KSwwPnUrdiYmKHU9LXUsdj0tdiksdC5iPW0odSx5LmIsdix4LmIpKToodT1nKHcseSx4KSx2PS1nKHcseix4KSwwPnUrdiYmKHU9LXUsdj0tdiksdC5iPW0odSx5LmIsdix6LmIpKTp0LmI9KHkuYit4LmIpLzIsaCh3LHgpfHwodT13LHc9eCx4PXUpLGgoeSx6KXx8KHU9eSx5PXosej11KSxoKHcseSl8fCh1PXcsdz15LHk9dSx1PXgseD16LHo9dSksaCh5LHgpP2goeCx6KT8odT1pKHcseSx4KSx2PWkoeSx4LHopLDA+dSt2JiYodT0tdSx2PS12KSx0LmE9bSh1LHkuYSx2LHguYSkpOih1PWoodyx5LHgpLHY9LWoodyx6LHgpLDA+dSt2JiYodT0tdSx2PS12KSx0LmE9bSh1LHkuYSx2LHouYSkpOnQuYT0oeS5hK3guYSkvMixlKHQsYS5hKSYmKHQuYj1hLmEuYix0LmE9YS5hLmEpLHc9ZShuLHApP246cCxlKHcsdCkmJih0LmI9dy5iLHQuYT13LmEpLGQodCxuKXx8ZCh0LHApKXJldHVybiBOKGEsYiksITE7aWYoIWQocixhLmEpJiYwPD1nKHIsYS5hLHQpfHwhZChzLGEuYSkmJjA+PWcocyxhLmEsdCkpe2lmKHM9PT1hLmEpcmV0dXJuIHEoay5iKSxvKGwuYixrKSxiPUUoYiksaz1uYShiKS5hLEkoYSxuYShiKSxjKSxKKGEsYiwkKGspLGssaywhMCksITA7aWYocj09PWEuYSl7cShsLmIpLG8oay5lLCQobCkpLG49Yz1iLHA9bi5hLmIuYTtkb3tuPW9hKG4pfXdoaWxlKG4uYS5iLmE9PT1wKTtyZXR1cm4gYj1uLG49bmEoYikuYS5iLmMsYy5hPSQobCksbD1JKGEsYyxudWxsKSxKKGEsYixsLmMsay5iLmMsbiwhMCksITB9cmV0dXJuIDA8PWcocixhLmEsdCkmJihvYShiKS5iPWIuYj0hMCxxKGsuYiksay5hLmI9YS5hLmIsay5hLmE9YS5hLmEpLDA+PWcocyxhLmEsdCkmJihiLmI9Yy5iPSEwLHEobC5iKSxsLmEuYj1hLmEuYixsLmEuYT1hLmEuYSksITF9cmV0dXJuIHEoay5iKSxxKGwuYiksbygkKGwpLGspLGsuYS5iPXQuYixrLmEuYT10LmEsay5hLmg9ZGEoYS5lLGsuYSksaz1rLmEsbD1bMCwwLDAsMF0sdD1bbi5kLHIuZCxwLmQscy5kXSxrLmdbMF09ay5nWzFdPWsuZ1syXT0wLE0oayxuLHIsbCwwKSxNKGsscCxzLGwsMiksSyhhLGssdCxsLCEwKSxvYShiKS5iPWIuYj1jLmI9ITAsITF9ZnVuY3Rpb24gUChhLGIpe2Zvcih2YXIgYz1uYShiKTs7KXtmb3IoO2MuYjspYj1jLGM9bmEoYyk7aWYoIWIuYiYmKGM9YixudWxsPT09KGI9b2EoYikpfHwhYi5iKSlicmVhaztiLmI9ITE7dmFyIGQsZj1iLmEsaD1jLmE7aWYoZD1mLmIuYSE9PWguYi5hKWE6e2Q9Yjt2YXIgaT1uYShkKSxqPWQuYSxrPWkuYSxsPXZvaWQgMDtpZihlKGouYi5hLGsuYi5hKSl7aWYoMD5nKGouYi5hLGsuYi5hLGouYSkpe2Q9ITE7YnJlYWsgYX1vYShkKS5iPWQuYj0hMCxsPXEoaiksbyhrLmIsbCksbC5kLmM9ZC5kfWVsc2V7aWYoMDxnKGsuYi5hLGouYi5hLGsuYSkpe2Q9ITE7YnJlYWsgYX1kLmI9aS5iPSEwLGw9cShrKSxvKGouZSxrLmIpLGwuYi5kLmM9ZC5kfWQ9ITB9aWYoZCYmKGMuYz8oQyhjKSxwKGgpLGM9bmEoYiksaD1jLmEpOmIuYyYmKEMoYikscChmKSxiPW9hKGMpLGY9Yi5hKSksZi5hIT09aC5hKWlmKGYuYi5hPT09aC5iLmF8fGIuY3x8Yy5jfHxmLmIuYSE9PWEuYSYmaC5iLmEhPT1hLmEpTihhLGIpO2Vsc2UgaWYoTyhhLGIpKWJyZWFrO2YuYT09PWguYSYmZi5iLmE9PT1oLmIuYSYmKEEoaCxmKSxDKGIpLHAoZiksYj1vYShjKSl9fWZ1bmN0aW9uIFEoYSxiKXthLmE9Yjtmb3IodmFyIGM9Yi5jO251bGw9PT1jLmk7KWlmKChjPWMuYyk9PT1iLmMpe3ZhciBjPWEsZj1iLGg9bmV3IG1hO2guYT1mLmMuYjt2YXIgaT1jLmYsaj1pLmE7ZG97aj1qLmF9d2hpbGUobnVsbCE9PWouYiYmIWkuYyhpLmIsaCxqLmIpKTt2YXIgaT1qLmIsaz1uYShpKSxoPWkuYSxqPWsuYTtpZigwPT09ZyhoLmIuYSxmLGguYSkpaD1pLmEsZChoLmEsZil8fGQoaC5iLmEsZil8fChxKGguYiksaS5jJiYocChoLmMpLGkuYz0hMSksbyhmLmMsaCksUShjLGYpKTtlbHNle3ZhciBsPWUoai5iLmEsaC5iLmEpP2k6ayxrPXZvaWQgMDtpLmR8fGwuYz8oaz1sPT09aT9yKGYuYy5iLGguZSk6cihqLmIuYy5iLGYuYykuYixsLmM/RChsLGspOihoPWMsaT1GKGMsaSxrKSxpLmY9b2EoaSkuZitpLmEuZixpLmQ9RyhoLGkuZikpLFEoYyxmKSk6SihjLGksZi5jLGYuYyxudWxsLCEwKX1yZXR1cm59aWYoYz1FKGMuaSksaD1uYShjKSxpPWguYSxoPUkoYSxoLG51bGwpLGguYz09PWkpe3ZhciBpPWgsaD1pLmMsaj1uYShjKSxrPWMuYSxsPWouYSxtPSExO2suYi5hIT09bC5iLmEmJk8oYSxjKSxkKGsuYSxhLmEpJiYobygkKGgpLGspLGM9RShjKSxoPW5hKGMpLmEsSShhLG5hKGMpLGopLG09ITApLGQobC5hLGEuYSkmJihvKGksJChsKSksaT1JKGEsaixudWxsKSxtPSEwKSxtP0ooYSxjLGkuYyxoLGgsITApOihmPWUobC5hLGsuYSk/JChsKTprLGY9cihpLmMuYixmKSxKKGEsYyxmLGYuYyxmLmMsITEpLGYuYi5pLmM9ITAsUChhLGMpKX1lbHNlIEooYSxjLGguYyxpLGksITApfWZ1bmN0aW9uIFIoYSxiKXt2YXIgYz1uZXcgbWEsZD1uKGEuYik7ZC5hLmI9cWEsZC5hLmE9YixkLmIuYS5iPS1xYSxkLmIuYS5hPWIsYS5hPWQuYi5hLGMuYT1kLGMuZj0wLGMuZD0hMSxjLmM9ITEsYy5oPSEwLGMuYj0hMSxkPWEuZixkPVQoZCxkLmEsYyksYy5lPWR9ZnVuY3Rpb24gUyhhKXt0aGlzLmE9bmV3IFUsdGhpcy5iPWEsdGhpcy5jPUJ9ZnVuY3Rpb24gVChhLGIsYyl7ZG97Yj1iLmN9d2hpbGUobnVsbCE9PWIuYiYmIWEuYyhhLmIsYi5iLGMpKTtyZXR1cm4gYT1uZXcgVShjLGIuYSxiKSxiLmEuYz1hLGIuYT1hfWZ1bmN0aW9uIFUoYSxiLGMpe3RoaXMuYj1hfHxudWxsLHRoaXMuYT1ifHx0aGlzLHRoaXMuYz1jfHx0aGlzfWZ1bmN0aW9uIFYoKXt0aGlzLmQ9cmEsdGhpcy5wPXRoaXMuYj10aGlzLnE9bnVsbCx0aGlzLmo9WzAsMCwwXSx0aGlzLnM9MTAwMTMwLHRoaXMubj0hMSx0aGlzLm89dGhpcy5hPXRoaXMuZT10aGlzLmY9bnVsbCx0aGlzLm09ITEsdGhpcy5jPXRoaXMucj10aGlzLmk9dGhpcy5rPXRoaXMubD10aGlzLmg9bnVsbH1mdW5jdGlvbiBXKGEsYil7aWYoYS5kIT09Yilmb3IoO2EuZCE9PWI7KWlmKGEuZDxiKXN3aXRjaChhLmQpe2Nhc2UgcmE6WChhLDEwMDE1MSksYS51KG51bGwpO2JyZWFrO2Nhc2UgMTpYKGEsMTAwMTUyKSxhLnQoKX1lbHNlIHN3aXRjaChhLmQpe2Nhc2UgMjpYKGEsMTAwMTU0KSxhLnYoKTticmVhaztjYXNlIDE6WChhLDEwMDE1MyksYS53KCl9fWZ1bmN0aW9uIFgoYSxiKXthLnAmJmEucChiLGEuYyl9ZnVuY3Rpb24gWShhLGIpe3RoaXMuYj1hfHx0aGlzLHRoaXMuZD1ifHx0aGlzLHRoaXMuYT1udWxsLHRoaXMuYz0hMX1mdW5jdGlvbiBaKCl7dGhpcy5oPXRoaXMsdGhpcy5pPXRoaXMuZD10aGlzLmE9dGhpcy5lPXRoaXMuYz10aGlzLmI9bnVsbCx0aGlzLmY9MH1mdW5jdGlvbiAkKGEpe3JldHVybiBhLmIuZX1mdW5jdGlvbiBfKCl7dGhpcy5jPW5ldyBhYSx0aGlzLmE9bmV3IFksdGhpcy5iPW5ldyBaLHRoaXMuZD1uZXcgWix0aGlzLmIuYj10aGlzLmQsdGhpcy5kLmI9dGhpcy5ifWZ1bmN0aW9uIGFhKGEsYil7dGhpcy5lPWF8fHRoaXMsdGhpcy5mPWJ8fHRoaXMsdGhpcy5kPXRoaXMuYz1udWxsLHRoaXMuZz1bMCwwLDBdLHRoaXMuaD10aGlzLmE9dGhpcy5iPTB9ZnVuY3Rpb24gYmEoKXt0aGlzLmM9W10sdGhpcy5kPW51bGwsdGhpcy5hPTAsdGhpcy5lPSExLHRoaXMuYj1uZXcgZmF9ZnVuY3Rpb24gY2EoYSl7YS5kPVtdO2Zvcih2YXIgYj0wO2I8YS5hO2IrKylhLmRbYl09YjthLmQuc29ydChmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYixjKXtyZXR1cm4gZShhW2JdLGFbY10pPzE6LTF9fShhLmMpKSxhLmU9ITAsaGEoYS5iKX1mdW5jdGlvbiBkYShhLGIpe2lmKGEuZSl7dmFyIGM9YS5iLGQ9KytjLmE7MipkPmMuZiYmKGMuZio9MixjLmM9Z2EoYy5jLGMuZisxKSk7dmFyIGU7cmV0dXJuIDA9PT1jLmI/ZT1kOihlPWMuYixjLmI9Yy5jW2MuYl0pLGMuZVtlXT1iLGMuY1tlXT1kLGMuZFtkXT1lLGMuaCYmbGEoYyxkKSxlfXJldHVybiBjPWEuYSsrLGEuY1tjXT1iLC0oYysxKX1mdW5jdGlvbiBlYShhKXtpZigwPT09YS5hKXJldHVybiBqYShhLmIpO3ZhciBiPWEuY1thLmRbYS5hLTFdXTtpZigwIT09YS5iLmEmJmUoaWEoYS5iKSxiKSlyZXR1cm4gamEoYS5iKTtkb3stLWEuYX13aGlsZSgwPGEuYSYmbnVsbD09PWEuY1thLmRbYS5hLTFdXSk7cmV0dXJuIGJ9ZnVuY3Rpb24gZmEoKXt0aGlzLmQ9Z2EoWzBdLDMzKSx0aGlzLmU9W251bGwsbnVsbF0sdGhpcy5jPVswLDBdLHRoaXMuYT0wLHRoaXMuZj0zMix0aGlzLmI9MCx0aGlzLmg9ITEsdGhpcy5kWzFdPTF9ZnVuY3Rpb24gZ2EoYSxiKXtmb3IodmFyIGM9QXJyYXkoYiksZD0wO2Q8YS5sZW5ndGg7ZCsrKWNbZF09YVtkXTtmb3IoO2Q8YjtkKyspY1tkXT0wO3JldHVybiBjfWZ1bmN0aW9uIGhhKGEpe2Zvcih2YXIgYj1hLmE7MTw9YjstLWIpa2EoYSxiKTthLmg9ITB9ZnVuY3Rpb24gaWEoYSl7cmV0dXJuIGEuZVthLmRbMV1dfWZ1bmN0aW9uIGphKGEpe3ZhciBiPWEuZCxjPWEuZSxkPWEuYyxlPWJbMV0sZj1jW2VdO3JldHVybiAwPGEuYSYmKGJbMV09YlthLmFdLGRbYlsxXV09MSxjW2VdPW51bGwsZFtlXT1hLmIsYS5iPWUsMDwtLWEuYSYma2EoYSwxKSksZn1mdW5jdGlvbiBrYShhLGIpe2Zvcih2YXIgYz1hLmQsZD1hLmUsZj1hLmMsZz1iLGg9Y1tnXTs7KXt2YXIgaT1nPDwxO2k8YS5hJiZlKGRbY1tpKzFdXSxkW2NbaV1dKSYmKGkrPTEpO3ZhciBqPWNbaV07aWYoaT5hLmF8fGUoZFtoXSxkW2pdKSl7Y1tnXT1oLGZbaF09ZzticmVha31jW2ddPWosZltqXT1nLGc9aX19ZnVuY3Rpb24gbGEoYSxiKXtmb3IodmFyIGM9YS5kLGQ9YS5lLGY9YS5jLGc9YixoPWNbZ107Oyl7dmFyIGk9Zz4+MSxqPWNbaV07aWYoMD09PWl8fGUoZFtqXSxkW2hdKSl7Y1tnXT1oLGZbaF09ZzticmVha31jW2ddPWosZltqXT1nLGc9aX19ZnVuY3Rpb24gbWEoKXt0aGlzLmU9dGhpcy5hPW51bGwsdGhpcy5mPTAsdGhpcy5jPXRoaXMuYj10aGlzLmg9dGhpcy5kPSExfWZ1bmN0aW9uIG5hKGEpe3JldHVybiBhLmUuYy5ifWZ1bmN0aW9uIG9hKGEpe3JldHVybiBhLmUuYS5ifXZhciBwYSxxYT00ZTE1MCxyYT0wO3BhPVYucHJvdG90eXBlLHBhLng9ZnVuY3Rpb24oKXtXKHRoaXMscmEpfSxwYS5CPWZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTAwMTQyOnJldHVybjtjYXNlIDEwMDE0MDpzd2l0Y2goYil7Y2FzZSAxMDAxMzA6Y2FzZSAxMDAxMzE6Y2FzZSAxMDAxMzI6Y2FzZSAxMDAxMzM6Y2FzZSAxMDAxMzQ6cmV0dXJuIHZvaWQodGhpcy5zPWIpfWJyZWFrO2Nhc2UgMTAwMTQxOnJldHVybiB2b2lkKHRoaXMubT0hIWIpO2RlZmF1bHQ6cmV0dXJuIHZvaWQgWCh0aGlzLDEwMDkwMCl9WCh0aGlzLDEwMDkwMSl9LHBhLnk9ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMTAwMTQyOnJldHVybiAwO2Nhc2UgMTAwMTQwOnJldHVybiB0aGlzLnM7Y2FzZSAxMDAxNDE6cmV0dXJuIHRoaXMubTtkZWZhdWx0OlgodGhpcywxMDA5MDApfXJldHVybiExfSxwYS5BPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmpbMF09YSx0aGlzLmpbMV09Yix0aGlzLmpbMl09Y30scGEuej1mdW5jdGlvbihhLGIpe3ZhciBjPWJ8fG51bGw7c3dpdGNoKGEpe2Nhc2UgMTAwMTAwOmNhc2UgMTAwMTA2OnRoaXMuaD1jO2JyZWFrO2Nhc2UgMTAwMTA0OmNhc2UgMTAwMTEwOnRoaXMubD1jO2JyZWFrO2Nhc2UgMTAwMTAxOmNhc2UgMTAwMTA3OnRoaXMuaz1jO2JyZWFrO2Nhc2UgMTAwMTAyOmNhc2UgMTAwMTA4OnRoaXMuaT1jO2JyZWFrO2Nhc2UgMTAwMTAzOmNhc2UgMTAwMTA5OnRoaXMucD1jO2JyZWFrO2Nhc2UgMTAwMTA1OmNhc2UgMTAwMTExOnRoaXMubz1jO2JyZWFrO2Nhc2UgMTAwMTEyOnRoaXMucj1jO2JyZWFrO2RlZmF1bHQ6WCh0aGlzLDEwMDkwMCl9fSxwYS5DPWZ1bmN0aW9uKGEsYil7dmFyIGM9ITEsZD1bMCwwLDBdO1codGhpcywyKTtmb3IodmFyIGU9MDszPmU7KytlKXt2YXIgZj1hW2VdOy0xZTE1MD5mJiYoZj0tMWUxNTAsYz0hMCksMWUxNTA8ZiYmKGY9MWUxNTAsYz0hMCksZFtlXT1mfWMmJlgodGhpcywxMDAxNTUpLGM9dGhpcy5xLG51bGw9PT1jPyhjPW4odGhpcy5iKSxvKGMsYy5iKSk6KHEoYyksYz1jLmUpLGMuYS5kPWIsYy5hLmdbMF09ZFswXSxjLmEuZ1sxXT1kWzFdLGMuYS5nWzJdPWRbMl0sYy5mPTEsYy5iLmY9LTEsdGhpcy5xPWN9LHBhLnU9ZnVuY3Rpb24oYSl7Vyh0aGlzLHJhKSx0aGlzLmQ9MSx0aGlzLmI9bmV3IF8sdGhpcy5jPWF9LHBhLnQ9ZnVuY3Rpb24oKXtXKHRoaXMsMSksdGhpcy5kPTIsdGhpcy5xPW51bGx9LHBhLnY9ZnVuY3Rpb24oKXtXKHRoaXMsMiksdGhpcy5kPTF9LHBhLnc9ZnVuY3Rpb24oKXtXKHRoaXMsMSksdGhpcy5kPXJhO3ZhciBhPXRoaXMualswXSxiPXRoaXMualsxXSxjPXRoaXMualsyXSxmPSExLGg9W2EsYixjXTtpZigwPT09YSYmMD09PWImJjA9PT1jKXtmb3IodmFyIGI9Wy0yZTE1MCwtMmUxNTAsLTJlMTUwXSxpPVsyZTE1MCwyZTE1MCwyZTE1MF0sYz1bXSxqPVtdLGY9dGhpcy5iLmMsYT1mLmU7YSE9PWY7YT1hLmUpZm9yKHZhciBtPTA7Mz5tOysrbSl7dmFyIG49YS5nW21dO248aVttXSYmKGlbbV09bixqW21dPWEpLG4+YlttXSYmKGJbbV09bixjW21dPWEpfWlmKGE9MCxiWzFdLWlbMV0+YlswXS1pWzBdJiYoYT0xKSxiWzJdLWlbMl0+YlthXS1pW2FdJiYoYT0yKSxpW2FdPj1iW2FdKWhbMF09MCxoWzFdPTAsaFsyXT0xO2Vsc2V7Zm9yKGI9MCxpPWpbYV0sYz1jW2FdLGo9WzAsMCwwXSxpPVtpLmdbMF0tYy5nWzBdLGkuZ1sxXS1jLmdbMV0saS5nWzJdLWMuZ1syXV0sbT1bMCwwLDBdLGE9Zi5lO2EhPT1mO2E9YS5lKW1bMF09YS5nWzBdLWMuZ1swXSxtWzFdPWEuZ1sxXS1jLmdbMV0sbVsyXT1hLmdbMl0tYy5nWzJdLGpbMF09aVsxXSptWzJdLWlbMl0qbVsxXSxqWzFdPWlbMl0qbVswXS1pWzBdKm1bMl0salsyXT1pWzBdKm1bMV0taVsxXSptWzBdLChuPWpbMF0qalswXStqWzFdKmpbMV0ralsyXSpqWzJdKT5iJiYoYj1uLGhbMF09alswXSxoWzFdPWpbMV0saFsyXT1qWzJdKTswPj1iJiYoaFswXT1oWzFdPWhbMl09MCxoW3ooaSldPTEpfWY9ITB9Zm9yKGo9eihoKSxhPXRoaXMuYi5jLGI9KGorMSklMyxjPShqKzIpJTMsaj0wPGhbal0/MTotMSxoPWEuZTtoIT09YTtoPWguZSloLmI9aC5nW2JdLGguYT1qKmguZ1tjXTtpZihmKXtmb3IoaD0wLGY9dGhpcy5iLmEsYT1mLmI7YSE9PWY7YT1hLmIpaWYoYj1hLmEsISgwPj1iLmYpKWRve2grPShiLmEuYi1iLmIuYS5iKSooYi5hLmErYi5iLmEuYSksYj1iLmV9d2hpbGUoYiE9PWEuYSk7aWYoMD5oKWZvcihoPXRoaXMuYi5jLGY9aC5lO2YhPT1oO2Y9Zi5lKWYuYT0tZi5hfWZvcih0aGlzLm49ITEsaD10aGlzLmIuYixhPWguaDthIT09aDthPWYpZj1hLmgsYj1hLmUsZChhLmEsYS5iLmEpJiZhLmUuZSE9PWEmJihMKHRoaXMsYixhKSxwKGEpLGE9YixiPWEuZSksYi5lPT09YSYmKGIhPT1hJiYoYiE9PWYmJmIhPT1mLmJ8fChmPWYuaCkscChiKSksYSE9PWYmJmEhPT1mLmJ8fChmPWYuaCkscChhKSk7Zm9yKHRoaXMuZT1oPW5ldyBiYSxmPXRoaXMuYi5jLGE9Zi5lO2EhPT1mO2E9YS5lKWEuaD1kYShoLGEpO2ZvcihjYShoKSx0aGlzLmY9bmV3IFModGhpcyksUih0aGlzLC1xYSksUih0aGlzLHFhKTtudWxsIT09KGg9ZWEodGhpcy5lKSk7KXtmb3IoOzspe2E6aWYoYT10aGlzLmUsMD09PWEuYSlmPWlhKGEuYik7ZWxzZSBpZihmPWEuY1thLmRbYS5hLTFdXSwwIT09YS5iLmEmJihhPWlhKGEuYiksZShhLGYpKSl7Zj1hO2JyZWFrIGF9aWYobnVsbD09PWZ8fCFkKGYsaCkpYnJlYWs7Zj1lYSh0aGlzLmUpLEwodGhpcyxoLmMsZi5jKX1RKHRoaXMsaCl9Zm9yKHRoaXMuYT10aGlzLmYuYS5hLmIuYS5hLGg9MDtudWxsIT09KGY9dGhpcy5mLmEuYS5iKTspZi5ofHwrK2gsQyhmKTtmb3IodGhpcy5mPW51bGwsaD10aGlzLmUsaC5iPW51bGwsaC5kPW51bGwsdGhpcy5lPWguYz1udWxsLGg9dGhpcy5iLGE9aC5hLmI7YSE9PWguYTthPWYpZj1hLmIsYT1hLmEsYS5lLmU9PT1hJiYoQShhLmMsYSkscChhKSk7aWYoIXRoaXMubil7aWYoaD10aGlzLmIsdGhpcy5tKWZvcihhPWguYi5oO2EhPT1oLmI7YT1mKWY9YS5oLGEuYi5kLmMhPT1hLmQuYz9hLmY9YS5kLmM/MTotMTpwKGEpO2Vsc2UgZm9yKGE9aC5hLmI7YSE9PWguYTthPWYpaWYoZj1hLmIsYS5jKXtmb3IoYT1hLmE7ZShhLmIuYSxhLmEpO2E9YS5jLmIpO2Zvcig7ZShhLmEsYS5iLmEpO2E9YS5lKTtmb3IoYj1hLmMuYixjPXZvaWQgMDthLmUhPT1iOylpZihlKGEuYi5hLGIuYSkpe2Zvcig7Yi5lIT09YSYmKGsoYi5lKXx8MD49ZyhiLmEsYi5iLmEsYi5lLmIuYSkpOyljPXIoYi5lLGIpLGI9Yy5iO2I9Yi5jLmJ9ZWxzZXtmb3IoO2IuZSE9PWEmJihsKGEuYy5iKXx8MDw9ZyhhLmIuYSxhLmEsYS5jLmIuYSkpOyljPXIoYSxhLmMuYiksYT1jLmI7YT1hLmV9Zm9yKDtiLmUuZSE9PWE7KWM9cihiLmUsYiksYj1jLmJ9aWYodGhpcy5ofHx0aGlzLml8fHRoaXMua3x8dGhpcy5sKWlmKHRoaXMubSl7Zm9yKGg9dGhpcy5iLGY9aC5hLmI7ZiE9PWguYTtmPWYuYilpZihmLmMpe3RoaXMuaCYmdGhpcy5oKDIsdGhpcy5jKSxhPWYuYTtkb3t0aGlzLmsmJnRoaXMuayhhLmEuZCx0aGlzLmMpLGE9YS5lfXdoaWxlKGEhPT1mLmEpO3RoaXMuaSYmdGhpcy5pKHRoaXMuYyl9fWVsc2V7Zm9yKGg9dGhpcy5iLGY9ISF0aGlzLmwsYT0hMSxiPS0xLGM9aC5hLmQ7YyE9PWguYTtjPWMuZClpZihjLmMpe2F8fCh0aGlzLmgmJnRoaXMuaCg0LHRoaXMuYyksYT0hMCksaj1jLmE7ZG97ZiYmKGk9ai5iLmQuYz8wOjEsYiE9PWkmJihiPWksdGhpcy5sJiZ0aGlzLmwoISFiLHRoaXMuYykpKSx0aGlzLmsmJnRoaXMuayhqLmEuZCx0aGlzLmMpLGo9ai5lfXdoaWxlKGohPT1jLmEpfWEmJnRoaXMuaSYmdGhpcy5pKHRoaXMuYyl9aWYodGhpcy5yKXtmb3IoaD10aGlzLmIsYT1oLmEuYjthIT09aC5hO2E9ZilpZihmPWEuYiwhYS5jKXtiPWEuYSxjPWIuZSxqPXZvaWQgMDtkb3tqPWMsYz1qLmUsai5kPW51bGwsbnVsbD09PWouYi5kJiYoai5jPT09aj94KGouYSxudWxsKTooai5hLmM9ai5jLHQoaiwkKGopKSksaT1qLmIsaS5jPT09aT94KGkuYSxudWxsKTooaS5hLmM9aS5jLHQoaSwkKGkpKSksdyhqKSl9d2hpbGUoaiE9PWIpO2I9YS5kLGE9YS5iLGEuZD1iLGIuYj1hfXJldHVybiB0aGlzLnIodGhpcy5iKSx2b2lkKHRoaXMuYz10aGlzLmI9bnVsbCl9fXRoaXMuYj10aGlzLmM9bnVsbH0sdGhpcy5saWJ0ZXNzPXtHbHVUZXNzZWxhdG9yOlYsd2luZGluZ1J1bGU6e0dMVV9URVNTX1dJTkRJTkdfT0REOjEwMDEzMCxHTFVfVEVTU19XSU5ESU5HX05PTlpFUk86MTAwMTMxLEdMVV9URVNTX1dJTkRJTkdfUE9TSVRJVkU6MTAwMTMyLEdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkU6MTAwMTMzLEdMVV9URVNTX1dJTkRJTkdfQUJTX0dFUV9UV086MTAwMTM0fSxwcmltaXRpdmVUeXBlOntHTF9MSU5FX0xPT1A6MixHTF9UUklBTkdMRVM6NCxHTF9UUklBTkdMRV9TVFJJUDo1LEdMX1RSSUFOR0xFX0ZBTjo2fSxlcnJvclR5cGU6e0dMVV9URVNTX01JU1NJTkdfQkVHSU5fUE9MWUdPTjoxMDAxNTEsR0xVX1RFU1NfTUlTU0lOR19FTkRfUE9MWUdPTjoxMDAxNTMsR0xVX1RFU1NfTUlTU0lOR19CRUdJTl9DT05UT1VSOjEwMDE1MixHTFVfVEVTU19NSVNTSU5HX0VORF9DT05UT1VSOjEwMDE1NCxHTFVfVEVTU19DT09SRF9UT09fTEFSR0U6MTAwMTU1LEdMVV9URVNTX05FRURfQ09NQklORV9DQUxMQkFDSzoxMDAxNTZ9LGdsdUVudW06e0dMVV9URVNTX01FU0g6MTAwMTEyLEdMVV9URVNTX1RPTEVSQU5DRToxMDAxNDIsR0xVX1RFU1NfV0lORElOR19SVUxFOjEwMDE0MCxHTFVfVEVTU19CT1VOREFSWV9PTkxZOjEwMDE0MSxHTFVfSU5WQUxJRF9FTlVNOjEwMDkwMCxHTFVfSU5WQUxJRF9WQUxVRToxMDA5MDEsR0xVX1RFU1NfQkVHSU46MTAwMTAwLEdMVV9URVNTX1ZFUlRFWDoxMDAxMDEsR0xVX1RFU1NfRU5EOjEwMDEwMixHTFVfVEVTU19FUlJPUjoxMDAxMDMsR0xVX1RFU1NfRURHRV9GTEFHOjEwMDEwNCxHTFVfVEVTU19DT01CSU5FOjEwMDEwNSxHTFVfVEVTU19CRUdJTl9EQVRBOjEwMDEwNixHTFVfVEVTU19WRVJURVhfREFUQToxMDAxMDcsR0xVX1RFU1NfRU5EX0RBVEE6MTAwMTA4LEdMVV9URVNTX0VSUk9SX0RBVEE6MTAwMTA5LEdMVV9URVNTX0VER0VfRkxBR19EQVRBOjEwMDExMCxHTFVfVEVTU19DT01CSU5FX0RBVEE6MTAwMTExfX0sVi5wcm90b3R5cGUuZ2x1RGVsZXRlVGVzcz1WLnByb3RvdHlwZS54LFYucHJvdG90eXBlLmdsdVRlc3NQcm9wZXJ0eT1WLnByb3RvdHlwZS5CLFYucHJvdG90eXBlLmdsdUdldFRlc3NQcm9wZXJ0eT1WLnByb3RvdHlwZS55LFYucHJvdG90eXBlLmdsdVRlc3NOb3JtYWw9Vi5wcm90b3R5cGUuQSxWLnByb3RvdHlwZS5nbHVUZXNzQ2FsbGJhY2s9Vi5wcm90b3R5cGUueixWLnByb3RvdHlwZS5nbHVUZXNzVmVydGV4PVYucHJvdG90eXBlLkMsVi5wcm90b3R5cGUuZ2x1VGVzc0JlZ2luUG9seWdvbj1WLnByb3RvdHlwZS51LFYucHJvdG90eXBlLmdsdVRlc3NCZWdpbkNvbnRvdXI9Vi5wcm90b3R5cGUudCxWLnByb3RvdHlwZS5nbHVUZXNzRW5kQ29udG91cj1WLnByb3RvdHlwZS52LFYucHJvdG90eXBlLmdsdVRlc3NFbmRQb2x5Z29uPVYucHJvdG90eXBlLncsdm9pZCAwIT09YiYmKGIuZXhwb3J0cz10aGlzLmxpYnRlc3MpfSx7fV0sMTA6W2Z1bmN0aW9uKGIsYyxkKXsoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGIsZSl7XCJvYmplY3RcIj09dHlwZW9mIGQmJnZvaWQgMCE9PWM/ZShkKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiZhLmFtZD9hKFtcImV4cG9ydHNcIl0sZSk6ZShiLm9wZW50eXBlPXt9KX0odGhpcyxmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBjKCl7dGhpcy50YWJsZT1uZXcgVWludDE2QXJyYXkoMTYpLHRoaXMudHJhbnM9bmV3IFVpbnQxNkFycmF5KDI4OCl9ZnVuY3Rpb24gZChhLGIpe3RoaXMuc291cmNlPWEsdGhpcy5zb3VyY2VJbmRleD0wLHRoaXMudGFnPTAsdGhpcy5iaXRjb3VudD0wLHRoaXMuZGVzdD1iLHRoaXMuZGVzdExlbj0wLHRoaXMubHRyZWU9bmV3IGMsdGhpcy5kdHJlZT1uZXcgY31mdW5jdGlvbiBmKGEsYixjLGQpe3ZhciBlLGY7Zm9yKGU9MDtlPGM7KytlKWFbZV09MDtmb3IoZT0wO2U8MzAtYzsrK2UpYVtlK2NdPWUvY3wwO2ZvcihmPWQsZT0wO2U8MzA7KytlKWJbZV09ZixmKz0xPDxhW2VdfWZ1bmN0aW9uIGcoYSxiKXt2YXIgYztmb3IoYz0wO2M8NzsrK2MpYS50YWJsZVtjXT0wO2ZvcihhLnRhYmxlWzddPTI0LGEudGFibGVbOF09MTUyLGEudGFibGVbOV09MTEyLGM9MDtjPDI0OysrYylhLnRyYW5zW2NdPTI1NitjO2ZvcihjPTA7YzwxNDQ7KytjKWEudHJhbnNbMjQrY109Yztmb3IoYz0wO2M8ODsrK2MpYS50cmFuc1sxNjgrY109MjgwK2M7Zm9yKGM9MDtjPDExMjsrK2MpYS50cmFuc1sxNzYrY109MTQ0K2M7Zm9yKGM9MDtjPDU7KytjKWIudGFibGVbY109MDtmb3IoYi50YWJsZVs1XT0zMixjPTA7YzwzMjsrK2MpYi50cmFuc1tjXT1jfWZ1bmN0aW9uIGgoYSxiLGMsZCl7dmFyIGUsZjtmb3IoZT0wO2U8MTY7KytlKWEudGFibGVbZV09MDtmb3IoZT0wO2U8ZDsrK2UpYS50YWJsZVtiW2MrZV1dKys7Zm9yKGEudGFibGVbMF09MCxmPTAsZT0wO2U8MTY7KytlKXZlW2VdPWYsZis9YS50YWJsZVtlXTtmb3IoZT0wO2U8ZDsrK2UpYltjK2VdJiYoYS50cmFuc1t2ZVtiW2MrZV1dKytdPWUpfWZ1bmN0aW9uIGkoYSl7YS5iaXRjb3VudC0tfHwoYS50YWc9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsrXSxhLmJpdGNvdW50PTcpO3ZhciBiPTEmYS50YWc7cmV0dXJuIGEudGFnPj4+PTEsYn1mdW5jdGlvbiBqKGEsYixjKXtpZighYilyZXR1cm4gYztmb3IoO2EuYml0Y291bnQ8MjQ7KWEudGFnfD1hLnNvdXJjZVthLnNvdXJjZUluZGV4KytdPDxhLmJpdGNvdW50LGEuYml0Y291bnQrPTg7dmFyIGQ9YS50YWcmNjU1MzU+Pj4xNi1iO3JldHVybiBhLnRhZz4+Pj1iLGEuYml0Y291bnQtPWIsZCtjfWZ1bmN0aW9uIGsoYSxiKXtmb3IoO2EuYml0Y291bnQ8MjQ7KWEudGFnfD1hLnNvdXJjZVthLnNvdXJjZUluZGV4KytdPDxhLmJpdGNvdW50LGEuYml0Y291bnQrPTg7dmFyIGM9MCxkPTAsZT0wLGY9YS50YWc7ZG97ZD0yKmQrKDEmZiksZj4+Pj0xLCsrZSxjKz1iLnRhYmxlW2VdLGQtPWIudGFibGVbZV19d2hpbGUoZD49MCk7cmV0dXJuIGEudGFnPWYsYS5iaXRjb3VudC09ZSxiLnRyYW5zW2MrZF19ZnVuY3Rpb24gbChhLGIsYyl7dmFyIGQsZSxmLGcsaSxsO2ZvcihkPWooYSw1LDI1NyksZT1qKGEsNSwxKSxmPWooYSw0LDQpLGc9MDtnPDE5OysrZyl1ZVtnXT0wO2ZvcihnPTA7ZzxmOysrZyl7dmFyIG09aihhLDMsMCk7dWVbc2VbZ11dPW19Zm9yKGgodGUsdWUsMCwxOSksaT0wO2k8ZCtlOyl7dmFyIG49ayhhLHRlKTtzd2l0Y2gobil7Y2FzZSAxNjp2YXIgbz11ZVtpLTFdO2ZvcihsPWooYSwyLDMpO2w7LS1sKXVlW2krK109bzticmVhaztjYXNlIDE3OmZvcihsPWooYSwzLDMpO2w7LS1sKXVlW2krK109MDticmVhaztjYXNlIDE4OmZvcihsPWooYSw3LDExKTtsOy0tbCl1ZVtpKytdPTA7YnJlYWs7ZGVmYXVsdDp1ZVtpKytdPW59fWgoYix1ZSwwLGQpLGgoYyx1ZSxkLGUpfWZ1bmN0aW9uIG0oYSxiLGMpe2Zvcig7Oyl7dmFyIGQ9ayhhLGIpO2lmKDI1Nj09PWQpcmV0dXJuIGtlO2lmKGQ8MjU2KWEuZGVzdFthLmRlc3RMZW4rK109ZDtlbHNle3ZhciBlLGYsZyxoO2ZvcihkLT0yNTcsZT1qKGEsb2VbZF0scGVbZF0pLGY9ayhhLGMpLGc9YS5kZXN0TGVuLWooYSxxZVtmXSxyZVtmXSksaD1nO2g8ZytlOysraClhLmRlc3RbYS5kZXN0TGVuKytdPWEuZGVzdFtoXX19fWZ1bmN0aW9uIG4oYSl7Zm9yKHZhciBiLGMsZDthLmJpdGNvdW50Pjg7KWEuc291cmNlSW5kZXgtLSxhLmJpdGNvdW50LT04O2lmKGI9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsxXSxiPTI1NipiK2Euc291cmNlW2Euc291cmNlSW5kZXhdLGM9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCszXSxjPTI1NipjK2Euc291cmNlW2Euc291cmNlSW5kZXgrMl0sYiE9PSg2NTUzNSZ+YykpcmV0dXJuIGxlO2ZvcihhLnNvdXJjZUluZGV4Kz00LGQ9YjtkOy0tZClhLmRlc3RbYS5kZXN0TGVuKytdPWEuc291cmNlW2Euc291cmNlSW5kZXgrK107cmV0dXJuIGEuYml0Y291bnQ9MCxrZX1mdW5jdGlvbiBvKGEsYil7dmFyIGMsZSxmPW5ldyBkKGEsYik7ZG97c3dpdGNoKGM9aShmKSxqKGYsMiwwKSl7Y2FzZSAwOmU9bihmKTticmVhaztjYXNlIDE6ZT1tKGYsbWUsbmUpO2JyZWFrO2Nhc2UgMjpsKGYsZi5sdHJlZSxmLmR0cmVlKSxlPW0oZixmLmx0cmVlLGYuZHRyZWUpO2JyZWFrO2RlZmF1bHQ6ZT1sZX1pZihlIT09a2UpdGhyb3cgbmV3IEVycm9yKFwiRGF0YSBlcnJvclwiKX13aGlsZSghYyk7cmV0dXJuIGYuZGVzdExlbjxmLmRlc3QubGVuZ3RoP1wiZnVuY3Rpb25cIj09dHlwZW9mIGYuZGVzdC5zbGljZT9mLmRlc3Quc2xpY2UoMCxmLmRlc3RMZW4pOmYuZGVzdC5zdWJhcnJheSgwLGYuZGVzdExlbik6Zi5kZXN0fWZ1bmN0aW9uIHAoYSxiLGMsZCxlKXtyZXR1cm4gTWF0aC5wb3coMS1lLDMpKmErMypNYXRoLnBvdygxLWUsMikqZSpiKzMqKDEtZSkqTWF0aC5wb3coZSwyKSpjK01hdGgucG93KGUsMykqZH1mdW5jdGlvbiBxKCl7dGhpcy54MT1OdW1iZXIuTmFOLHRoaXMueTE9TnVtYmVyLk5hTix0aGlzLngyPU51bWJlci5OYU4sdGhpcy55Mj1OdW1iZXIuTmFOfWZ1bmN0aW9uIHIoKXt0aGlzLmNvbW1hbmRzPVtdLHRoaXMuZmlsbD1cImJsYWNrXCIsdGhpcy5zdHJva2U9bnVsbCx0aGlzLnN0cm9rZVdpZHRoPTF9ZnVuY3Rpb24gcyhhKXt0aHJvdyBuZXcgRXJyb3IoYSl9ZnVuY3Rpb24gdChhLGIpe2F8fHMoYil9ZnVuY3Rpb24gdShhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYX19ZnVuY3Rpb24gdihhKXtyZXR1cm4gYT49LTEyOCYmYTw9MTI3fWZ1bmN0aW9uIHcoYSxiLGMpe2Zvcih2YXIgZD0wLGU9YS5sZW5ndGg7YjxlJiZkPDY0JiYwPT09YVtiXTspKytiLCsrZDtyZXR1cm4gYy5wdXNoKDEyOHxkLTEpLGJ9ZnVuY3Rpb24geChhLGIsYyl7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aCxmPWI7ZjxlJiZkPDY0Oyl7dmFyIGc9YVtmXTtpZighdihnKSlicmVhaztpZigwPT09ZyYmZisxPGUmJjA9PT1hW2YrMV0pYnJlYWs7KytmLCsrZH1jLnB1c2goZC0xKTtmb3IodmFyIGg9YjtoPGY7KytoKWMucHVzaChhW2hdKzI1NiYyNTUpO3JldHVybiBmfWZ1bmN0aW9uIHkoYSxiLGMpe2Zvcih2YXIgZD0wLGU9YS5sZW5ndGgsZj1iO2Y8ZSYmZDw2NDspe3ZhciBnPWFbZl07aWYoMD09PWcpYnJlYWs7aWYodihnKSYmZisxPGUmJnYoYVtmKzFdKSlicmVhazsrK2YsKytkfWMucHVzaCg2NHxkLTEpO2Zvcih2YXIgaD1iO2g8ZjsrK2gpe3ZhciBpPWFbaF07Yy5wdXNoKGkrNjU1MzY+PjgmMjU1LGkrMjU2JjI1NSl9cmV0dXJuIGZ9ZnVuY3Rpb24geihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT0wO2U8Yi5sZW5ndGg7ZSs9MSl7dmFyIGY9YltlXTtkW2YubmFtZV09Zi52YWx1ZX1pZih0aGlzLnRhYmxlTmFtZT1hLHRoaXMuZmllbGRzPWIsYylmb3IodmFyIGc9T2JqZWN0LmtleXMoYyksaD0wO2g8Zy5sZW5ndGg7aCs9MSl7dmFyIGk9Z1toXSxqPWNbaV07dm9pZCAwIT09ZFtpXSYmKGRbaV09ail9fWZ1bmN0aW9uIEEoYSxiLGMpe3ZvaWQgMD09PWMmJihjPWIubGVuZ3RoKTt2YXIgZD1uZXcgQXJyYXkoYi5sZW5ndGgrMSk7ZFswXT17bmFtZTphK1wiQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Y307Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDtlKyspZFtlKzFdPXtuYW1lOmErZSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YltlXX07cmV0dXJuIGR9ZnVuY3Rpb24gQihhLGIsYyl7dmFyIGQ9Yi5sZW5ndGgsZT1uZXcgQXJyYXkoZCsxKTtlWzBdPXtuYW1lOmErXCJDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkfTtmb3IodmFyIGY9MDtmPGQ7ZisrKWVbZisxXT17bmFtZTphK2YsdHlwZTpcIlRBQkxFXCIsdmFsdWU6YyhiW2ZdLGYpfTtyZXR1cm4gZX1mdW5jdGlvbiBDKGEsYixjKXt2YXIgZD1iLmxlbmd0aCxlPVtdO2VbMF09e25hbWU6YStcIkNvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmR9O2Zvcih2YXIgZj0wO2Y8ZDtmKyspZT1lLmNvbmNhdChjKGJbZl0sZikpO3JldHVybiBlfWZ1bmN0aW9uIEQoYSl7MT09PWEuZm9ybWF0P3ouY2FsbCh0aGlzLFwiY292ZXJhZ2VUYWJsZVwiLFt7bmFtZTpcImNvdmVyYWdlRm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9XS5jb25jYXQoQShcImdseXBoXCIsYS5nbHlwaHMpKSk6eGUuYXNzZXJ0KCExLFwiQ2FuJ3QgY3JlYXRlIGNvdmVyYWdlIHRhYmxlIGZvcm1hdCAyIHlldC5cIil9ZnVuY3Rpb24gRShhKXt6LmNhbGwodGhpcyxcInNjcmlwdExpc3RUYWJsZVwiLEMoXCJzY3JpcHRSZWNvcmRcIixhLGZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zY3JpcHQsZD1jLmRlZmF1bHRMYW5nU3lzO3JldHVybiB4ZS5hc3NlcnQoISFkLFwiVW5hYmxlIHRvIHdyaXRlIEdTVUI6IHNjcmlwdCBcIithLnRhZytcIiBoYXMgbm8gZGVmYXVsdCBsYW5ndWFnZSBzeXN0ZW0uXCIpLFt7bmFtZTpcInNjcmlwdFRhZ1wiK2IsdHlwZTpcIlRBR1wiLHZhbHVlOmEudGFnfSx7bmFtZTpcInNjcmlwdFwiK2IsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJzY3JpcHRUYWJsZVwiLFt7bmFtZTpcImRlZmF1bHRMYW5nU3lzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJkZWZhdWx0TGFuZ1N5c1wiLFt7bmFtZTpcImxvb2t1cE9yZGVyXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVxRmVhdHVyZUluZGV4XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmQucmVxRmVhdHVyZUluZGV4fV0uY29uY2F0KEEoXCJmZWF0dXJlSW5kZXhcIixkLmZlYXR1cmVJbmRleGVzKSkpfV0uY29uY2F0KEMoXCJsYW5nU3lzXCIsYy5sYW5nU3lzUmVjb3JkcyxmdW5jdGlvbihhLGIpe3ZhciBjPWEubGFuZ1N5cztyZXR1cm5be25hbWU6XCJsYW5nU3lzVGFnXCIrYix0eXBlOlwiVEFHXCIsdmFsdWU6YS50YWd9LHtuYW1lOlwibGFuZ1N5c1wiK2IsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJsYW5nU3lzXCIsW3tuYW1lOlwibG9va3VwT3JkZXJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXFGZWF0dXJlSW5kZXhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Yy5yZXFGZWF0dXJlSW5kZXh9XS5jb25jYXQoQShcImZlYXR1cmVJbmRleFwiLGMuZmVhdHVyZUluZGV4ZXMpKSl9XX0pKSl9XX0pKX1mdW5jdGlvbiBGKGEpe3ouY2FsbCh0aGlzLFwiZmVhdHVyZUxpc3RUYWJsZVwiLEMoXCJmZWF0dXJlUmVjb3JkXCIsYSxmdW5jdGlvbihhLGIpe3ZhciBjPWEuZmVhdHVyZTtyZXR1cm5be25hbWU6XCJmZWF0dXJlVGFnXCIrYix0eXBlOlwiVEFHXCIsdmFsdWU6YS50YWd9LHtuYW1lOlwiZmVhdHVyZVwiK2IsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJmZWF0dXJlVGFibGVcIixbe25hbWU6XCJmZWF0dXJlUGFyYW1zXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmMuZmVhdHVyZVBhcmFtc31dLmNvbmNhdChBKFwibG9va3VwTGlzdEluZGV4XCIsYy5sb29rdXBMaXN0SW5kZXhlcykpKX1dfSkpfWZ1bmN0aW9uIEcoYSxiKXt6LmNhbGwodGhpcyxcImxvb2t1cExpc3RUYWJsZVwiLEIoXCJsb29rdXBcIixhLGZ1bmN0aW9uKGEpe3ZhciBjPWJbYS5sb29rdXBUeXBlXTtyZXR1cm4geGUuYXNzZXJ0KCEhYyxcIlVuYWJsZSB0byB3cml0ZSBHU1VCIGxvb2t1cCB0eXBlIFwiK2EubG9va3VwVHlwZStcIiB0YWJsZXMuXCIpLG5ldyB6KFwibG9va3VwVGFibGVcIixbe25hbWU6XCJsb29rdXBUeXBlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEubG9va3VwVHlwZX0se25hbWU6XCJsb29rdXBGbGFnXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEubG9va3VwRmxhZ31dLmNvbmNhdChCKFwic3VidGFibGVcIixhLnN1YnRhYmxlcyxjKSkpfSkpfWZ1bmN0aW9uIEgoYSxiKXtyZXR1cm4gYS5nZXRVaW50OChiKX1mdW5jdGlvbiBJKGEsYil7cmV0dXJuIGEuZ2V0VWludDE2KGIsITEpfWZ1bmN0aW9uIEooYSxiKXtyZXR1cm4gYS5nZXRJbnQxNihiLCExKX1mdW5jdGlvbiBLKGEsYil7cmV0dXJuIGEuZ2V0VWludDMyKGIsITEpfWZ1bmN0aW9uIEwoYSxiKXtyZXR1cm4gYS5nZXRJbnQxNihiLCExKSthLmdldFVpbnQxNihiKzIsITEpLzY1NTM1fWZ1bmN0aW9uIE0oYSxiKXtmb3IodmFyIGM9XCJcIixkPWI7ZDxiKzQ7ZCs9MSljKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEuZ2V0SW50OChkKSk7cmV0dXJuIGN9ZnVuY3Rpb24gTihhLGIsYyl7Zm9yKHZhciBkPTAsZT0wO2U8YztlKz0xKWQ8PD04LGQrPWEuZ2V0VWludDgoYitlKTtyZXR1cm4gZH1mdW5jdGlvbiBPKGEsYixjKXtmb3IodmFyIGQ9W10sZT1iO2U8YztlKz0xKWQucHVzaChhLmdldFVpbnQ4KGUpKTtyZXR1cm4gZH1mdW5jdGlvbiBQKGEpe2Zvcih2YXIgYj1cIlwiLGM9MDtjPGEubGVuZ3RoO2MrPTEpYis9U3RyaW5nLmZyb21DaGFyQ29kZShhW2NdKTtyZXR1cm4gYn1mdW5jdGlvbiBRKGEsYil7dGhpcy5kYXRhPWEsdGhpcy5vZmZzZXQ9Yix0aGlzLnJlbGF0aXZlT2Zmc2V0PTB9ZnVuY3Rpb24gUihhLGIpe2IucGFyc2VVU2hvcnQoKSxhLmxlbmd0aD1iLnBhcnNlVUxvbmcoKSxhLmxhbmd1YWdlPWIucGFyc2VVTG9uZygpO3ZhciBjO2EuZ3JvdXBDb3VudD1jPWIucGFyc2VVTG9uZygpLGEuZ2x5cGhJbmRleE1hcD17fTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlmb3IodmFyIGU9Yi5wYXJzZVVMb25nKCksZj1iLnBhcnNlVUxvbmcoKSxnPWIucGFyc2VVTG9uZygpLGg9ZTtoPD1mO2grPTEpYS5nbHlwaEluZGV4TWFwW2hdPWcsZysrfWZ1bmN0aW9uIFMoYSxiLGMsZCxlKXthLmxlbmd0aD1iLnBhcnNlVVNob3J0KCksYS5sYW5ndWFnZT1iLnBhcnNlVVNob3J0KCk7dmFyIGY7YS5zZWdDb3VudD1mPWIucGFyc2VVU2hvcnQoKT4+MSxiLnNraXAoXCJ1U2hvcnRcIiwzKSxhLmdseXBoSW5kZXhNYXA9e307Zm9yKHZhciBnPW5ldyBMZS5QYXJzZXIoYyxkK2UrMTQpLGg9bmV3IExlLlBhcnNlcihjLGQrZSsxNisyKmYpLGk9bmV3IExlLlBhcnNlcihjLGQrZSsxNis0KmYpLGo9bmV3IExlLlBhcnNlcihjLGQrZSsxNis2KmYpLGs9ZCtlKzE2KzgqZixsPTA7bDxmLTE7bCs9MSlmb3IodmFyIG09dm9pZCAwLG49Zy5wYXJzZVVTaG9ydCgpLG89aC5wYXJzZVVTaG9ydCgpLHA9aS5wYXJzZVNob3J0KCkscT1qLnBhcnNlVVNob3J0KCkscj1vO3I8PW47cis9MSkwIT09cT8oaz1qLm9mZnNldCtqLnJlbGF0aXZlT2Zmc2V0LTIsays9cSxrKz0yKihyLW8pLDAhPT0obT1MZS5nZXRVU2hvcnQoYyxrKSkmJihtPW0rcCY2NTUzNSkpOm09citwJjY1NTM1LGEuZ2x5cGhJbmRleE1hcFtyXT1tfWZ1bmN0aW9uIFQoYSxiKXt2YXIgYz17fTtjLnZlcnNpb249TGUuZ2V0VVNob3J0KGEsYikseGUuYXJndW1lbnQoMD09PWMudmVyc2lvbixcImNtYXAgdGFibGUgdmVyc2lvbiBzaG91bGQgYmUgMC5cIiksYy5udW1UYWJsZXM9TGUuZ2V0VVNob3J0KGEsYisyKTtmb3IodmFyIGQ9LTEsZT1jLm51bVRhYmxlcy0xO2U+PTA7ZS09MSl7dmFyIGY9TGUuZ2V0VVNob3J0KGEsYis0KzgqZSksZz1MZS5nZXRVU2hvcnQoYSxiKzQrOCplKzIpO2lmKDM9PT1mJiYoMD09PWd8fDE9PT1nfHwxMD09PWcpfHwwPT09ZiYmKDA9PT1nfHwxPT09Z3x8Mj09PWd8fDM9PT1nfHw0PT09Zykpe2Q9TGUuZ2V0VUxvbmcoYSxiKzQrOCplKzQpO2JyZWFrfX1pZigtMT09PWQpdGhyb3cgbmV3IEVycm9yKFwiTm8gdmFsaWQgY21hcCBzdWItdGFibGVzIGZvdW5kLlwiKTt2YXIgaD1uZXcgTGUuUGFyc2VyKGEsYitkKTtpZihjLmZvcm1hdD1oLnBhcnNlVVNob3J0KCksMTI9PT1jLmZvcm1hdClSKGMsaCk7ZWxzZXtpZig0IT09Yy5mb3JtYXQpdGhyb3cgbmV3IEVycm9yKFwiT25seSBmb3JtYXQgNCBhbmQgMTIgY21hcCB0YWJsZXMgYXJlIHN1cHBvcnRlZCAoZm91bmQgZm9ybWF0IFwiK2MuZm9ybWF0K1wiKS5cIik7UyhjLGgsYSxiLGQpfXJldHVybiBjfWZ1bmN0aW9uIFUoYSxiLGMpe2Euc2VnbWVudHMucHVzaCh7ZW5kOmIsc3RhcnQ6YixkZWx0YTotKGItYyksb2Zmc2V0OjAsZ2x5cGhJbmRleDpjfSl9ZnVuY3Rpb24gVihhKXthLnNlZ21lbnRzLnB1c2goe2VuZDo2NTUzNSxzdGFydDo2NTUzNSxkZWx0YToxLG9mZnNldDowfSl9ZnVuY3Rpb24gVyhhKXt2YXIgYixjPSEwO2ZvcihiPWEubGVuZ3RoLTE7Yj4wO2ItPTEpe2lmKGEuZ2V0KGIpLnVuaWNvZGU+NjU1MzUpe2NvbnNvbGUubG9nKFwiQWRkaW5nIENNQVAgZm9ybWF0IDEyIChuZWVkZWQhKVwiKSxjPSExO2JyZWFrfX12YXIgZD1be25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibnVtVGFibGVzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmM/MToyfSx7bmFtZTpcInBsYXRmb3JtSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6M30se25hbWU6XCJlbmNvZGluZ0lEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwib2Zmc2V0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6Yz8xMjoyMH1dO2N8fChkPWQuY29uY2F0KFt7bmFtZTpcImNtYXAxMlBsYXRmb3JtSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6M30se25hbWU6XCJjbWFwMTJFbmNvZGluZ0lEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjEwfSx7bmFtZTpcImNtYXAxMk9mZnNldFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9XSkpLGQ9ZC5jb25jYXQoW3tuYW1lOlwiZm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjR9LHtuYW1lOlwiY21hcDRMZW5ndGhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJsYW5ndWFnZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNlZ0NvdW50WDJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzZWFyY2hSYW5nZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImVudHJ5U2VsZWN0b3JcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyYW5nZVNoaWZ0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSk7dmFyIGU9bmV3IEllLlRhYmxlKFwiY21hcFwiLGQpO2ZvcihlLnNlZ21lbnRzPVtdLGI9MDtiPGEubGVuZ3RoO2IrPTEpe2Zvcih2YXIgZj1hLmdldChiKSxnPTA7ZzxmLnVuaWNvZGVzLmxlbmd0aDtnKz0xKVUoZSxmLnVuaWNvZGVzW2ddLGIpO2Uuc2VnbWVudHM9ZS5zZWdtZW50cy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnQtYi5zdGFydH0pfVYoZSk7dmFyIGg9ZS5zZWdtZW50cy5sZW5ndGgsaT0wLGo9W10saz1bXSxsPVtdLG09W10sbj1bXSxvPVtdO2ZvcihiPTA7YjxoO2IrPTEpe3ZhciBwPWUuc2VnbWVudHNbYl07cC5lbmQ8PTY1NTM1JiZwLnN0YXJ0PD02NTUzNT8oaj1qLmNvbmNhdCh7bmFtZTpcImVuZF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLmVuZH0pLGs9ay5jb25jYXQoe25hbWU6XCJzdGFydF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLnN0YXJ0fSksbD1sLmNvbmNhdCh7bmFtZTpcImlkRGVsdGFfXCIrYix0eXBlOlwiU0hPUlRcIix2YWx1ZTpwLmRlbHRhfSksbT1tLmNvbmNhdCh7bmFtZTpcImlkUmFuZ2VPZmZzZXRfXCIrYix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6cC5vZmZzZXR9KSx2b2lkIDAhPT1wLmdseXBoSWQmJihuPW4uY29uY2F0KHtuYW1lOlwiZ2x5cGhfXCIrYix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6cC5nbHlwaElkfSkpKTppKz0xLGN8fHZvaWQgMD09PXAuZ2x5cGhJbmRleHx8KG89by5jb25jYXQoe25hbWU6XCJjbWFwMTJTdGFydF9cIitiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnAuc3RhcnR9KSxvPW8uY29uY2F0KHtuYW1lOlwiY21hcDEyRW5kX1wiK2IsdHlwZTpcIlVMT05HXCIsdmFsdWU6cC5lbmR9KSxvPW8uY29uY2F0KHtuYW1lOlwiY21hcDEyR2x5cGhfXCIrYix0eXBlOlwiVUxPTkdcIix2YWx1ZTpwLmdseXBoSW5kZXh9KSl9aWYoZS5zZWdDb3VudFgyPTIqKGgtaSksZS5zZWFyY2hSYW5nZT0yKk1hdGgucG93KDIsTWF0aC5mbG9vcihNYXRoLmxvZyhoLWkpL01hdGgubG9nKDIpKSksZS5lbnRyeVNlbGVjdG9yPU1hdGgubG9nKGUuc2VhcmNoUmFuZ2UvMikvTWF0aC5sb2coMiksZS5yYW5nZVNoaWZ0PWUuc2VnQ291bnRYMi1lLnNlYXJjaFJhbmdlLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChqKSxlLmZpZWxkcy5wdXNoKHtuYW1lOlwicmVzZXJ2ZWRQYWRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0pLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChrKSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQobCksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KG0pLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChuKSxlLmNtYXA0TGVuZ3RoPTE0KzIqai5sZW5ndGgrMisyKmsubGVuZ3RoKzIqbC5sZW5ndGgrMiptLmxlbmd0aCsyKm4ubGVuZ3RoLCFjKXt2YXIgcT0xNis0Km8ubGVuZ3RoO2UuY21hcDEyT2Zmc2V0PTIwK2UuY21hcDRMZW5ndGgsZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KFt7bmFtZTpcImNtYXAxMkZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxMn0se25hbWU6XCJjbWFwMTJSZXNlcnZlZFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImNtYXAxMkxlbmd0aFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnF9LHtuYW1lOlwiY21hcDEyTGFuZ3VhZ2VcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcImNtYXAxMm5Hcm91cHNcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTpvLmxlbmd0aC8zfV0pLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChvKX1yZXR1cm4gZX1mdW5jdGlvbiBYKGEpe3RoaXMuZm9udD1hfWZ1bmN0aW9uIFkoYSl7dGhpcy5jbWFwPWF9ZnVuY3Rpb24gWihhLGIpe3RoaXMuZW5jb2Rpbmc9YSx0aGlzLmNoYXJzZXQ9Yn1mdW5jdGlvbiAkKGEpe3ZhciBiPXRoaXM7c3dpdGNoKGEudmVyc2lvbil7Y2FzZSAxOnRoaXMubmFtZXM9UWUuc2xpY2UoKTticmVhaztjYXNlIDI6dGhpcy5uYW1lcz1uZXcgQXJyYXkoYS5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBjPTA7YzxhLm51bWJlck9mR2x5cGhzO2MrKylhLmdseXBoTmFtZUluZGV4W2NdPFFlLmxlbmd0aD9iLm5hbWVzW2NdPVFlW2EuZ2x5cGhOYW1lSW5kZXhbY11dOmIubmFtZXNbY109YS5uYW1lc1thLmdseXBoTmFtZUluZGV4W2NdLVFlLmxlbmd0aF07YnJlYWs7Y2FzZSAyLjU6dGhpcy5uYW1lcz1uZXcgQXJyYXkoYS5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBkPTA7ZDxhLm51bWJlck9mR2x5cGhzO2QrKyliLm5hbWVzW2RdPVFlW2QrYS5nbHlwaE5hbWVJbmRleFtkXV07YnJlYWs7Y2FzZSAzOmRlZmF1bHQ6dGhpcy5uYW1lcz1bXX19ZnVuY3Rpb24gXyhhKXtmb3IodmFyIGIsYz1hLnRhYmxlcy5jbWFwLmdseXBoSW5kZXhNYXAsZD1PYmplY3Qua2V5cyhjKSxlPTA7ZTxkLmxlbmd0aDtlKz0xKXt2YXIgZj1kW2VdLGc9Y1tmXTtiPWEuZ2x5cGhzLmdldChnKSxiLmFkZFVuaWNvZGUocGFyc2VJbnQoZikpfWZvcih2YXIgaD0wO2g8YS5nbHlwaHMubGVuZ3RoO2grPTEpYj1hLmdseXBocy5nZXQoaCksYS5jZmZFbmNvZGluZz9hLmlzQ0lERm9udD9iLm5hbWU9XCJnaWRcIitoOmIubmFtZT1hLmNmZkVuY29kaW5nLmNoYXJzZXRbaF06YS5nbHlwaE5hbWVzLm5hbWVzJiYoYi5uYW1lPWEuZ2x5cGhOYW1lcy5nbHlwaEluZGV4VG9OYW1lKGgpKX1mdW5jdGlvbiBhYShhLGIsYyxkLGUpe2EuYmVnaW5QYXRoKCksYS5tb3ZlVG8oYixjKSxhLmxpbmVUbyhkLGUpLGEuc3Ryb2tlKCl9ZnVuY3Rpb24gYmEoYSxiKXt2YXIgYz1ifHxuZXcgcjtyZXR1cm57Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJihjPWMoKSksY30sc2V0OmZ1bmN0aW9uKGEpe2M9YX19fWZ1bmN0aW9uIGNhKGEpe3RoaXMuYmluZENvbnN0cnVjdG9yVmFsdWVzKGEpfWZ1bmN0aW9uIGRhKGEsYixjKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5wYXRoLGFbY119LHNldDpmdW5jdGlvbihiKXthW2NdPWJ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9ZnVuY3Rpb24gZWEoYSxiKXt2YXIgYz10aGlzO2lmKHRoaXMuZm9udD1hLHRoaXMuZ2x5cGhzPXt9LEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspYy5nbHlwaHNbZF09YltkXTt0aGlzLmxlbmd0aD1iJiZiLmxlbmd0aHx8MH1mdW5jdGlvbiBmYShhLGIpe3JldHVybiBuZXcgY2Eoe2luZGV4OmIsZm9udDphfSl9ZnVuY3Rpb24gZ2EoYSxiLGMsZCxlLGYpe3JldHVybiBmdW5jdGlvbigpe3ZhciBnPW5ldyBjYSh7aW5kZXg6Yixmb250OmF9KTtyZXR1cm4gZy5wYXRoPWZ1bmN0aW9uKCl7YyhnLGQsZSk7dmFyIGI9ZihhLmdseXBocyxnKTtyZXR1cm4gYi51bml0c1BlckVtPWEudW5pdHNQZXJFbSxifSxkYShnLFwieE1pblwiLFwiX3hNaW5cIiksZGEoZyxcInhNYXhcIixcIl94TWF4XCIpLGRhKGcsXCJ5TWluXCIsXCJfeU1pblwiKSxkYShnLFwieU1heFwiLFwiX3lNYXhcIiksZ319ZnVuY3Rpb24gaGEoYSxiLGMsZCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bmV3IGNhKHtpbmRleDpiLGZvbnQ6YX0pO3JldHVybiBlLnBhdGg9ZnVuY3Rpb24oKXt2YXIgYj1jKGEsZSxkKTtyZXR1cm4gYi51bml0c1BlckVtPWEudW5pdHNQZXJFbSxifSxlfX1mdW5jdGlvbiBpYShhLGIpe2lmKGE9PT1iKXJldHVybiEwO2lmKEFycmF5LmlzQXJyYXkoYSkmJkFycmF5LmlzQXJyYXkoYikpe2lmKGEubGVuZ3RoIT09Yi5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0xKWlmKCFpYShhW2NdLGJbY10pKXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGphKGEpe3JldHVybiBhLmxlbmd0aDwxMjQwPzEwNzphLmxlbmd0aDwzMzkwMD8xMTMxOjMyNzY4fWZ1bmN0aW9uIGthKGEsYixjKXt2YXIgZCxlLGY9W10sZz1bXSxoPUxlLmdldENhcmQxNihhLGIpO2lmKDAhPT1oKXt2YXIgaT1MZS5nZXRCeXRlKGEsYisyKTtkPWIrKGgrMSkqaSsyO2Zvcih2YXIgaj1iKzMsaz0wO2s8aCsxO2srPTEpZi5wdXNoKExlLmdldE9mZnNldChhLGosaSkpLGorPWk7ZT1kK2ZbaF19ZWxzZSBlPWIrMjtmb3IodmFyIGw9MDtsPGYubGVuZ3RoLTE7bCs9MSl7dmFyIG09TGUuZ2V0Qnl0ZXMoYSxkK2ZbbF0sZCtmW2wrMV0pO2MmJihtPWMobSkpLGcucHVzaChtKX1yZXR1cm57b2JqZWN0czpnLHN0YXJ0T2Zmc2V0OmIsZW5kT2Zmc2V0OmV9fWZ1bmN0aW9uIGxhKGEpe2Zvcih2YXIgYj1cIlwiLGM9MTUsZD1bXCIwXCIsXCIxXCIsXCIyXCIsXCIzXCIsXCI0XCIsXCI1XCIsXCI2XCIsXCI3XCIsXCI4XCIsXCI5XCIsXCIuXCIsXCJFXCIsXCJFLVwiLG51bGwsXCItXCJdOzspe3ZhciBlPWEucGFyc2VCeXRlKCksZj1lPj40LGc9MTUmZTtpZihmPT09YylicmVhaztpZihiKz1kW2ZdLGc9PT1jKWJyZWFrO2IrPWRbZ119cmV0dXJuIHBhcnNlRmxvYXQoYil9ZnVuY3Rpb24gbWEoYSxiKXt2YXIgYyxkLGUsZjtpZigyOD09PWIpcmV0dXJuIGM9YS5wYXJzZUJ5dGUoKSxkPWEucGFyc2VCeXRlKCksYzw8OHxkO2lmKDI5PT09YilyZXR1cm4gYz1hLnBhcnNlQnl0ZSgpLGQ9YS5wYXJzZUJ5dGUoKSxlPWEucGFyc2VCeXRlKCksZj1hLnBhcnNlQnl0ZSgpLGM8PDI0fGQ8PDE2fGU8PDh8ZjtpZigzMD09PWIpcmV0dXJuIGxhKGEpO2lmKGI+PTMyJiZiPD0yNDYpcmV0dXJuIGItMTM5O2lmKGI+PTI0NyYmYjw9MjUwKXJldHVybiBjPWEucGFyc2VCeXRlKCksMjU2KihiLTI0NykrYysxMDg7aWYoYj49MjUxJiZiPD0yNTQpcmV0dXJuIGM9YS5wYXJzZUJ5dGUoKSwyNTYqLShiLTI1MSktYy0xMDg7dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiMCBcIitiKX1mdW5jdGlvbiBuYShhKXtmb3IodmFyIGI9e30sYz0wO2M8YS5sZW5ndGg7Yys9MSl7dmFyIGQ9YVtjXVswXSxlPWFbY11bMV0sZj12b2lkIDA7aWYoZj0xPT09ZS5sZW5ndGg/ZVswXTplLGIuaGFzT3duUHJvcGVydHkoZCkmJiFpc05hTihiW2RdKSl0aHJvdyBuZXcgRXJyb3IoXCJPYmplY3QgXCIrYitcIiBhbHJlYWR5IGhhcyBrZXkgXCIrZCk7YltkXT1mfXJldHVybiBifWZ1bmN0aW9uIG9hKGEsYixjKXtiPXZvaWQgMCE9PWI/YjowO3ZhciBkPW5ldyBMZS5QYXJzZXIoYSxiKSxlPVtdLGY9W107Zm9yKGM9dm9pZCAwIT09Yz9jOmEubGVuZ3RoO2QucmVsYXRpdmVPZmZzZXQ8Yzspe3ZhciBnPWQucGFyc2VCeXRlKCk7Zzw9MjE/KDEyPT09ZyYmKGc9MTIwMCtkLnBhcnNlQnl0ZSgpKSxlLnB1c2goW2csZl0pLGY9W10pOmYucHVzaChtYShkLGcpKX1yZXR1cm4gbmEoZSl9ZnVuY3Rpb24gcGEoYSxiKXtyZXR1cm4gYj1iPD0zOTA/TmVbYl06YVtiLTM5MV19ZnVuY3Rpb24gcWEoYSxiLGMpe2Zvcih2YXIgZCxlPXt9LGY9MDtmPGIubGVuZ3RoO2YrPTEpe3ZhciBnPWJbZl07aWYoQXJyYXkuaXNBcnJheShnLnR5cGUpKXt2YXIgaD1bXTtoLmxlbmd0aD1nLnR5cGUubGVuZ3RoO2Zvcih2YXIgaT0wO2k8Zy50eXBlLmxlbmd0aDtpKyspZD12b2lkIDAhPT1hW2cub3BdP2FbZy5vcF1baV06dm9pZCAwLHZvaWQgMD09PWQmJihkPXZvaWQgMCE9PWcudmFsdWUmJnZvaWQgMCE9PWcudmFsdWVbaV0/Zy52YWx1ZVtpXTpudWxsKSxcIlNJRFwiPT09Zy50eXBlW2ldJiYoZD1wYShjLGQpKSxoW2ldPWQ7ZVtnLm5hbWVdPWh9ZWxzZSBkPWFbZy5vcF0sdm9pZCAwPT09ZCYmKGQ9dm9pZCAwIT09Zy52YWx1ZT9nLnZhbHVlOm51bGwpLFwiU0lEXCI9PT1nLnR5cGUmJihkPXBhKGMsZCkpLGVbZy5uYW1lXT1kfXJldHVybiBlfWZ1bmN0aW9uIHJhKGEsYil7dmFyIGM9e307cmV0dXJuIGMuZm9ybWF0TWFqb3I9TGUuZ2V0Q2FyZDgoYSxiKSxjLmZvcm1hdE1pbm9yPUxlLmdldENhcmQ4KGEsYisxKSxjLnNpemU9TGUuZ2V0Q2FyZDgoYSxiKzIpLGMub2Zmc2V0U2l6ZT1MZS5nZXRDYXJkOChhLGIrMyksYy5zdGFydE9mZnNldD1iLGMuZW5kT2Zmc2V0PWIrNCxjfWZ1bmN0aW9uIHNhKGEsYil7cmV0dXJuIHFhKG9hKGEsMCxhLmJ5dGVMZW5ndGgpLFRlLGIpfWZ1bmN0aW9uIHRhKGEsYixjLGQpe3JldHVybiBxYShvYShhLGIsYyksVWUsZCl9ZnVuY3Rpb24gdWEoYSxiLGMsZCl7Zm9yKHZhciBlPVtdLGY9MDtmPGMubGVuZ3RoO2YrPTEpe3ZhciBnPW5ldyBEYXRhVmlldyhuZXcgVWludDhBcnJheShjW2ZdKS5idWZmZXIpLGg9c2EoZyxkKTtoLl9zdWJycz1bXSxoLl9zdWJyc0JpYXM9MDt2YXIgaT1oLnByaXZhdGVbMF0saj1oLnByaXZhdGVbMV07aWYoMCE9PWkmJjAhPT1qKXt2YXIgaz10YShhLGorYixpLGQpO2lmKGguX2RlZmF1bHRXaWR0aFg9ay5kZWZhdWx0V2lkdGhYLGguX25vbWluYWxXaWR0aFg9ay5ub21pbmFsV2lkdGhYLDAhPT1rLnN1YnJzKXt2YXIgbD1qK2suc3VicnMsbT1rYShhLGwrYik7aC5fc3VicnM9bS5vYmplY3RzLGguX3N1YnJzQmlhcz1qYShoLl9zdWJycyl9aC5fcHJpdmF0ZURpY3Q9a31lLnB1c2goaCl9cmV0dXJuIGV9ZnVuY3Rpb24gdmEoYSxiLGMsZCl7dmFyIGUsZixnPW5ldyBMZS5QYXJzZXIoYSxiKTtjLT0xO3ZhciBoPVtcIi5ub3RkZWZcIl0saT1nLnBhcnNlQ2FyZDgoKTtpZigwPT09aSlmb3IodmFyIGo9MDtqPGM7ais9MSllPWcucGFyc2VTSUQoKSxoLnB1c2gocGEoZCxlKSk7ZWxzZSBpZigxPT09aSlmb3IoO2gubGVuZ3RoPD1jOyl7ZT1nLnBhcnNlU0lEKCksZj1nLnBhcnNlQ2FyZDgoKTtmb3IodmFyIGs9MDtrPD1mO2srPTEpaC5wdXNoKHBhKGQsZSkpLGUrPTF9ZWxzZXtpZigyIT09aSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGNoYXJzZXQgZm9ybWF0IFwiK2kpO2Zvcig7aC5sZW5ndGg8PWM7KXtlPWcucGFyc2VTSUQoKSxmPWcucGFyc2VDYXJkMTYoKTtmb3IodmFyIGw9MDtsPD1mO2wrPTEpaC5wdXNoKHBhKGQsZSkpLGUrPTF9fXJldHVybiBofWZ1bmN0aW9uIHdhKGEsYixjKXt2YXIgZCxlPXt9LGY9bmV3IExlLlBhcnNlcihhLGIpLGc9Zi5wYXJzZUNhcmQ4KCk7aWYoMD09PWcpZm9yKHZhciBoPWYucGFyc2VDYXJkOCgpLGk9MDtpPGg7aSs9MSlkPWYucGFyc2VDYXJkOCgpLGVbZF09aTtlbHNle2lmKDEhPT1nKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gZW5jb2RpbmcgZm9ybWF0IFwiK2cpO3ZhciBqPWYucGFyc2VDYXJkOCgpO2Q9MTtmb3IodmFyIGs9MDtrPGo7ays9MSlmb3IodmFyIGw9Zi5wYXJzZUNhcmQ4KCksbT1mLnBhcnNlQ2FyZDgoKSxuPWw7bjw9bCttO24rPTEpZVtuXT1kLGQrPTF9cmV0dXJuIG5ldyBaKGUsYyl9ZnVuY3Rpb24geGEoYSxiLGMpe2Z1bmN0aW9uIGQoYSxiKXt0JiZvLmNsb3NlUGF0aCgpLG8ubW92ZVRvKGEsYiksdD0hMH1mdW5jdGlvbiBlKCl7dmFyIGE7YT1wLmxlbmd0aCUyIT0wLGEmJiFzJiYoeT1wLnNoaWZ0KCkrbikscSs9cC5sZW5ndGg+PjEscC5sZW5ndGg9MCxzPSEwfWZ1bmN0aW9uIGYoYyl7Zm9yKHZhciBtLHIsdyx4LHosQSxCLEMsRCxFLEYsRyxIPTA7SDxjLmxlbmd0aDspe3ZhciBJPWNbSF07c3dpdGNoKEgrPTEsSSl7Y2FzZSAxOmNhc2UgMzplKCk7YnJlYWs7Y2FzZSA0OnAubGVuZ3RoPjEmJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx2Kz1wLnBvcCgpLGQodSx2KTticmVhaztjYXNlIDU6Zm9yKDtwLmxlbmd0aD4wOyl1Kz1wLnNoaWZ0KCksdis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7YnJlYWs7Y2FzZSA2OmZvcig7cC5sZW5ndGg+MCYmKHUrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpLDAhPT1wLmxlbmd0aCk7KXYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2JyZWFrO2Nhc2UgNzpmb3IoO3AubGVuZ3RoPjAmJih2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KSwwIT09cC5sZW5ndGgpOyl1Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTticmVhaztjYXNlIDg6Zm9yKDtwLmxlbmd0aD4wOylnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLFxudT1pK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAxMDp6PXAucG9wKCkrbCxBPWtbel0sQSYmZihBKTticmVhaztjYXNlIDExOnJldHVybjtjYXNlIDEyOnN3aXRjaChJPWNbSF0sSCs9MSxJKXtjYXNlIDM1Omc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWorcC5zaGlmdCgpLEQ9QitwLnNoaWZ0KCksRT1DK3Auc2hpZnQoKSxGPUQrcC5zaGlmdCgpLEc9RStwLnNoaWZ0KCksdT1GK3Auc2hpZnQoKSx2PUcrcC5zaGlmdCgpLHAuc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaixCLEMpLG8uY3VydmVUbyhELEUsRixHLHUsdik7YnJlYWs7Y2FzZSAzNDpnPXUrcC5zaGlmdCgpLGg9dixpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWosRD1CK3Auc2hpZnQoKSxFPWosRj1EK3Auc2hpZnQoKSxHPXYsdT1GK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaixCLEMpLG8uY3VydmVUbyhELEUsRixHLHUsdik7YnJlYWs7Y2FzZSAzNjpnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLEI9aStwLnNoaWZ0KCksQz1qLEQ9QitwLnNoaWZ0KCksRT1qLEY9RCtwLnNoaWZ0KCksRz1FK3Auc2hpZnQoKSx1PUYrcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztjYXNlIDM3Omc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWorcC5zaGlmdCgpLEQ9QitwLnNoaWZ0KCksRT1DK3Auc2hpZnQoKSxGPUQrcC5zaGlmdCgpLEc9RStwLnNoaWZ0KCksTWF0aC5hYnMoRi11KT5NYXRoLmFicyhHLXYpP3U9RitwLnNoaWZ0KCk6dj1HK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaixCLEMpLG8uY3VydmVUbyhELEUsRixHLHUsdik7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmxvZyhcIkdseXBoIFwiK2IuaW5kZXgrXCI6IHVua25vd24gb3BlcmF0b3IgMTIwMFwiK0kpLHAubGVuZ3RoPTB9YnJlYWs7Y2FzZSAxNDpwLmxlbmd0aD4wJiYhcyYmKHk9cC5zaGlmdCgpK24scz0hMCksdCYmKG8uY2xvc2VQYXRoKCksdD0hMSk7YnJlYWs7Y2FzZSAxODplKCk7YnJlYWs7Y2FzZSAxOTpjYXNlIDIwOmUoKSxIKz1xKzc+PjM7YnJlYWs7Y2FzZSAyMTpwLmxlbmd0aD4yJiYhcyYmKHk9cC5zaGlmdCgpK24scz0hMCksdis9cC5wb3AoKSx1Kz1wLnBvcCgpLGQodSx2KTticmVhaztjYXNlIDIyOnAubGVuZ3RoPjEmJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx1Kz1wLnBvcCgpLGQodSx2KTticmVhaztjYXNlIDIzOmUoKTticmVhaztjYXNlIDI0OmZvcig7cC5sZW5ndGg+MjspZz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTt1Kz1wLnNoaWZ0KCksdis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7YnJlYWs7Y2FzZSAyNTpmb3IoO3AubGVuZ3RoPjY7KXUrPXAuc2hpZnQoKSx2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTtnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMjY6Zm9yKHAubGVuZ3RoJTImJih1Kz1wLnNoaWZ0KCkpO3AubGVuZ3RoPjA7KWc9dSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWksdj1qK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMjc6Zm9yKHAubGVuZ3RoJTImJih2Kz1wLnNoaWZ0KCkpO3AubGVuZ3RoPjA7KWc9dStwLnNoaWZ0KCksaD12LGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aixvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMjg6bT1jW0hdLHI9Y1tIKzFdLHAucHVzaCgobTw8MjR8cjw8MTYpPj4xNiksSCs9MjticmVhaztjYXNlIDI5Ono9cC5wb3AoKSthLmdzdWJyc0JpYXMsQT1hLmdzdWJyc1t6XSxBJiZmKEEpO2JyZWFrO2Nhc2UgMzA6Zm9yKDtwLmxlbmd0aD4wJiYoZz11LGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qKygxPT09cC5sZW5ndGg/cC5zaGlmdCgpOjApLG8uY3VydmVUbyhnLGgsaSxqLHUsdiksMCE9PXAubGVuZ3RoKTspZz11K3Auc2hpZnQoKSxoPXYsaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksdT1pKygxPT09cC5sZW5ndGg/cC5zaGlmdCgpOjApLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAzMTpmb3IoO3AubGVuZ3RoPjAmJihnPXUrcC5zaGlmdCgpLGg9dixpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSx1PWkrKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KSwwIT09cC5sZW5ndGgpOylnPXUsaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWorKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztkZWZhdWx0Okk8MzI/Y29uc29sZS5sb2coXCJHbHlwaCBcIitiLmluZGV4K1wiOiB1bmtub3duIG9wZXJhdG9yIFwiK0kpOkk8MjQ3P3AucHVzaChJLTEzOSk6STwyNTE/KG09Y1tIXSxIKz0xLHAucHVzaCgyNTYqKEktMjQ3KSttKzEwOCkpOkk8MjU1PyhtPWNbSF0sSCs9MSxwLnB1c2goMjU2Ki0oSS0yNTEpLW0tMTA4KSk6KG09Y1tIXSxyPWNbSCsxXSx3PWNbSCsyXSx4PWNbSCszXSxIKz00LHAucHVzaCgobTw8MjR8cjw8MTZ8dzw8OHx4KS82NTUzNikpfX19dmFyIGcsaCxpLGosayxsLG0sbixvPW5ldyByLHA9W10scT0wLHM9ITEsdD0hMSx1PTAsdj0wO2lmKGEuaXNDSURGb250KXt2YXIgdz1hLnRhYmxlcy5jZmYudG9wRGljdC5fZmRTZWxlY3RbYi5pbmRleF0seD1hLnRhYmxlcy5jZmYudG9wRGljdC5fZmRBcnJheVt3XTtrPXguX3N1YnJzLGw9eC5fc3VicnNCaWFzLG09eC5fZGVmYXVsdFdpZHRoWCxuPXguX25vbWluYWxXaWR0aFh9ZWxzZSBrPWEudGFibGVzLmNmZi50b3BEaWN0Ll9zdWJycyxsPWEudGFibGVzLmNmZi50b3BEaWN0Ll9zdWJyc0JpYXMsbT1hLnRhYmxlcy5jZmYudG9wRGljdC5fZGVmYXVsdFdpZHRoWCxuPWEudGFibGVzLmNmZi50b3BEaWN0Ll9ub21pbmFsV2lkdGhYO3ZhciB5PW07cmV0dXJuIGYoYyksYi5hZHZhbmNlV2lkdGg9eSxvfWZ1bmN0aW9uIHlhKGEsYixjLGQpe3ZhciBlLGY9W10sZz1uZXcgTGUuUGFyc2VyKGEsYiksaD1nLnBhcnNlQ2FyZDgoKTtpZigwPT09aClmb3IodmFyIGk9MDtpPGM7aSsrKXtpZigoZT1nLnBhcnNlQ2FyZDgoKSk+PWQpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIHRhYmxlIENJRCBGb250IEZEU2VsZWN0IGhhcyBiYWQgRkQgaW5kZXggdmFsdWUgXCIrZStcIiAoRkQgY291bnQgXCIrZCtcIilcIik7Zi5wdXNoKGUpfWVsc2V7aWYoMyE9PWgpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIFRhYmxlIENJRCBGb250IEZEU2VsZWN0IHRhYmxlIGhhcyB1bnN1cHBvcnRlZCBmb3JtYXQgXCIraCk7dmFyIGo9Zy5wYXJzZUNhcmQxNigpLGs9Zy5wYXJzZUNhcmQxNigpO2lmKDAhPT1rKXRocm93IG5ldyBFcnJvcihcIkNGRiBUYWJsZSBDSUQgRm9udCBGRFNlbGVjdCBmb3JtYXQgMyByYW5nZSBoYXMgYmFkIGluaXRpYWwgR0lEIFwiK2spO2Zvcih2YXIgbCxtPTA7bTxqO20rKyl7aWYoZT1nLnBhcnNlQ2FyZDgoKSxsPWcucGFyc2VDYXJkMTYoKSxlPj1kKXRocm93IG5ldyBFcnJvcihcIkNGRiB0YWJsZSBDSUQgRm9udCBGRFNlbGVjdCBoYXMgYmFkIEZEIGluZGV4IHZhbHVlIFwiK2UrXCIgKEZEIGNvdW50IFwiK2QrXCIpXCIpO2lmKGw+Yyl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgVGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgZm9ybWF0IDMgcmFuZ2UgaGFzIGJhZCBHSUQgXCIrbCk7Zm9yKDtrPGw7aysrKWYucHVzaChlKTtrPWx9aWYobCE9PWMpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIFRhYmxlIENJRCBGb250IEZEU2VsZWN0IGZvcm1hdCAzIHJhbmdlIGhhcyBiYWQgZmluYWwgR0lEIFwiK2wpfXJldHVybiBmfWZ1bmN0aW9uIHphKGEsYixjKXtjLnRhYmxlcy5jZmY9e307dmFyIGQ9cmEoYSxiKSxlPWthKGEsZC5lbmRPZmZzZXQsTGUuYnl0ZXNUb1N0cmluZyksZj1rYShhLGUuZW5kT2Zmc2V0KSxnPWthKGEsZi5lbmRPZmZzZXQsTGUuYnl0ZXNUb1N0cmluZyksaD1rYShhLGcuZW5kT2Zmc2V0KTtjLmdzdWJycz1oLm9iamVjdHMsYy5nc3VicnNCaWFzPWphKGMuZ3N1YnJzKTt2YXIgaT11YShhLGIsZi5vYmplY3RzLGcub2JqZWN0cyk7aWYoMSE9PWkubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkNGRiB0YWJsZSBoYXMgdG9vIG1hbnkgZm9udHMgaW4gJ0ZvbnRTZXQnIC0gY291bnQgb2YgZm9udHMgTmFtZUluZGV4Lmxlbmd0aCA9IFwiK2kubGVuZ3RoKTt2YXIgaj1pWzBdO2lmKGMudGFibGVzLmNmZi50b3BEaWN0PWosai5fcHJpdmF0ZURpY3QmJihjLmRlZmF1bHRXaWR0aFg9ai5fcHJpdmF0ZURpY3QuZGVmYXVsdFdpZHRoWCxjLm5vbWluYWxXaWR0aFg9ai5fcHJpdmF0ZURpY3Qubm9taW5hbFdpZHRoWCksdm9pZCAwIT09ai5yb3NbMF0mJnZvaWQgMCE9PWoucm9zWzFdJiYoYy5pc0NJREZvbnQ9ITApLGMuaXNDSURGb250KXt2YXIgaz1qLmZkQXJyYXksbD1qLmZkU2VsZWN0O2lmKDA9PT1rfHwwPT09bCl0aHJvdyBuZXcgRXJyb3IoXCJGb250IGlzIG1hcmtlZCBhcyBhIENJRCBmb250LCBidXQgRkRBcnJheSBhbmQvb3IgRkRTZWxlY3QgaW5mb3JtYXRpb24gaXMgbWlzc2luZ1wiKTtrKz1iO3ZhciBtPWthKGEsayksbj11YShhLGIsbS5vYmplY3RzLGcub2JqZWN0cyk7ai5fZmRBcnJheT1uLGwrPWIsai5fZmRTZWxlY3Q9eWEoYSxsLGMubnVtR2x5cGhzLG4ubGVuZ3RoKX12YXIgbz1iK2oucHJpdmF0ZVsxXSxwPXRhKGEsbyxqLnByaXZhdGVbMF0sZy5vYmplY3RzKTtpZihjLmRlZmF1bHRXaWR0aFg9cC5kZWZhdWx0V2lkdGhYLGMubm9taW5hbFdpZHRoWD1wLm5vbWluYWxXaWR0aFgsMCE9PXAuc3VicnMpe3ZhciBxPW8rcC5zdWJycyxyPWthKGEscSk7Yy5zdWJycz1yLm9iamVjdHMsYy5zdWJyc0JpYXM9amEoYy5zdWJycyl9ZWxzZSBjLnN1YnJzPVtdLGMuc3VicnNCaWFzPTA7dmFyIHM9a2EoYSxiK2ouY2hhclN0cmluZ3MpO2MubkdseXBocz1zLm9iamVjdHMubGVuZ3RoO3ZhciB0PXZhKGEsYitqLmNoYXJzZXQsYy5uR2x5cGhzLGcub2JqZWN0cyk7MD09PWouZW5jb2Rpbmc/Yy5jZmZFbmNvZGluZz1uZXcgWihPZSx0KToxPT09ai5lbmNvZGluZz9jLmNmZkVuY29kaW5nPW5ldyBaKFBlLHQpOmMuY2ZmRW5jb2Rpbmc9d2EoYSxiK2ouZW5jb2RpbmcsdCksYy5lbmNvZGluZz1jLmVuY29kaW5nfHxjLmNmZkVuY29kaW5nLGMuZ2x5cGhzPW5ldyBTZS5HbHlwaFNldChjKTtmb3IodmFyIHU9MDt1PGMubkdseXBoczt1Kz0xKXt2YXIgdj1zLm9iamVjdHNbdV07Yy5nbHlwaHMucHVzaCh1LFNlLmNmZkdseXBoTG9hZGVyKGMsdSx4YSx2KSl9fWZ1bmN0aW9uIEFhKGEsYil7dmFyIGMsZD1OZS5pbmRleE9mKGEpO3JldHVybiBkPj0wJiYoYz1kKSxkPWIuaW5kZXhPZihhKSxkPj0wP2M9ZCtOZS5sZW5ndGg6KGM9TmUubGVuZ3RoK2IubGVuZ3RoLGIucHVzaChhKSksY31mdW5jdGlvbiBCYSgpe3JldHVybiBuZXcgSWUuUmVjb3JkKFwiSGVhZGVyXCIsW3tuYW1lOlwibWFqb3JcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZToxfSx7bmFtZTpcIm1pbm9yXCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6MH0se25hbWU6XCJoZHJTaXplXCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6NH0se25hbWU6XCJtYWpvclwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjF9XSl9ZnVuY3Rpb24gQ2EoYSl7dmFyIGI9bmV3IEllLlJlY29yZChcIk5hbWUgSU5ERVhcIixbe25hbWU6XCJuYW1lc1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pO2IubmFtZXM9W107Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0xKWIubmFtZXMucHVzaCh7bmFtZTpcIm5hbWVfXCIrYyx0eXBlOlwiTkFNRVwiLHZhbHVlOmFbY119KTtyZXR1cm4gYn1mdW5jdGlvbiBEYShhLGIsYyl7Zm9yKHZhciBkPXt9LGU9MDtlPGEubGVuZ3RoO2UrPTEpe3ZhciBmPWFbZV0sZz1iW2YubmFtZV07dm9pZCAwPT09Z3x8aWEoZyxmLnZhbHVlKXx8KFwiU0lEXCI9PT1mLnR5cGUmJihnPUFhKGcsYykpLGRbZi5vcF09e25hbWU6Zi5uYW1lLHR5cGU6Zi50eXBlLHZhbHVlOmd9KX1yZXR1cm4gZH1mdW5jdGlvbiBFYShhLGIpe3ZhciBjPW5ldyBJZS5SZWNvcmQoXCJUb3AgRElDVFwiLFt7bmFtZTpcImRpY3RcIix0eXBlOlwiRElDVFwiLHZhbHVlOnt9fV0pO3JldHVybiBjLmRpY3Q9RGEoVGUsYSxiKSxjfWZ1bmN0aW9uIEZhKGEpe3ZhciBiPW5ldyBJZS5SZWNvcmQoXCJUb3AgRElDVCBJTkRFWFwiLFt7bmFtZTpcInRvcERpY3RzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSk7cmV0dXJuIGIudG9wRGljdHM9W3tuYW1lOlwidG9wRGljdF8wXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6YX1dLGJ9ZnVuY3Rpb24gR2EoYSl7dmFyIGI9bmV3IEllLlJlY29yZChcIlN0cmluZyBJTkRFWFwiLFt7bmFtZTpcInN0cmluZ3NcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKTtiLnN0cmluZ3M9W107Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0xKWIuc3RyaW5ncy5wdXNoKHtuYW1lOlwic3RyaW5nX1wiK2MsdHlwZTpcIlNUUklOR1wiLHZhbHVlOmFbY119KTtyZXR1cm4gYn1mdW5jdGlvbiBIYSgpe3JldHVybiBuZXcgSWUuUmVjb3JkKFwiR2xvYmFsIFN1YnIgSU5ERVhcIixbe25hbWU6XCJzdWJyc1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pfWZ1bmN0aW9uIElhKGEsYil7Zm9yKHZhciBjPW5ldyBJZS5SZWNvcmQoXCJDaGFyc2V0c1wiLFt7bmFtZTpcImZvcm1hdFwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjB9XSksZD0wO2Q8YS5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXSxmPUFhKGUsYik7Yy5maWVsZHMucHVzaCh7bmFtZTpcImdseXBoX1wiK2QsdHlwZTpcIlNJRFwiLHZhbHVlOmZ9KX1yZXR1cm4gY31mdW5jdGlvbiBKYShhKXt2YXIgYj1bXSxjPWEucGF0aDtiLnB1c2goe25hbWU6XCJ3aWR0aFwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTphLmFkdmFuY2VXaWR0aH0pO2Zvcih2YXIgZD0wLGU9MCxmPTA7ZjxjLmNvbW1hbmRzLmxlbmd0aDtmKz0xKXt2YXIgZz12b2lkIDAsaD12b2lkIDAsaT1jLmNvbW1hbmRzW2ZdO2lmKFwiUVwiPT09aS50eXBlKXt2YXIgaj0xLzMsaz0yLzM7aT17dHlwZTpcIkNcIix4OmkueCx5OmkueSx4MTpqKmQrayppLngxLHkxOmoqZStrKmkueTEseDI6aippLngrayppLngxLHkyOmoqaS55K2sqaS55MX19aWYoXCJNXCI9PT1pLnR5cGUpZz1NYXRoLnJvdW5kKGkueC1kKSxoPU1hdGgucm91bmQoaS55LWUpLGIucHVzaCh7bmFtZTpcImR4XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmd9KSxiLnB1c2goe25hbWU6XCJkeVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpofSksYi5wdXNoKHtuYW1lOlwicm1vdmV0b1wiLHR5cGU6XCJPUFwiLHZhbHVlOjIxfSksZD1NYXRoLnJvdW5kKGkueCksZT1NYXRoLnJvdW5kKGkueSk7ZWxzZSBpZihcIkxcIj09PWkudHlwZSlnPU1hdGgucm91bmQoaS54LWQpLGg9TWF0aC5yb3VuZChpLnktZSksYi5wdXNoKHtuYW1lOlwiZHhcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6Z30pLGIucHVzaCh7bmFtZTpcImR5XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmh9KSxiLnB1c2goe25hbWU6XCJybGluZXRvXCIsdHlwZTpcIk9QXCIsdmFsdWU6NX0pLGQ9TWF0aC5yb3VuZChpLngpLGU9TWF0aC5yb3VuZChpLnkpO2Vsc2UgaWYoXCJDXCI9PT1pLnR5cGUpe3ZhciBsPU1hdGgucm91bmQoaS54MS1kKSxtPU1hdGgucm91bmQoaS55MS1lKSxuPU1hdGgucm91bmQoaS54Mi1pLngxKSxvPU1hdGgucm91bmQoaS55Mi1pLnkxKTtnPU1hdGgucm91bmQoaS54LWkueDIpLGg9TWF0aC5yb3VuZChpLnktaS55MiksYi5wdXNoKHtuYW1lOlwiZHgxXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmx9KSxiLnB1c2goe25hbWU6XCJkeTFcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6bX0pLGIucHVzaCh7bmFtZTpcImR4MlwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpufSksYi5wdXNoKHtuYW1lOlwiZHkyXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOm99KSxiLnB1c2goe25hbWU6XCJkeFwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpnfSksYi5wdXNoKHtuYW1lOlwiZHlcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6aH0pLGIucHVzaCh7bmFtZTpcInJyY3VydmV0b1wiLHR5cGU6XCJPUFwiLHZhbHVlOjh9KSxkPU1hdGgucm91bmQoaS54KSxlPU1hdGgucm91bmQoaS55KX19cmV0dXJuIGIucHVzaCh7bmFtZTpcImVuZGNoYXJcIix0eXBlOlwiT1BcIix2YWx1ZToxNH0pLGJ9ZnVuY3Rpb24gS2EoYSl7Zm9yKHZhciBiPW5ldyBJZS5SZWNvcmQoXCJDaGFyU3RyaW5ncyBJTkRFWFwiLFt7bmFtZTpcImNoYXJTdHJpbmdzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSksYz0wO2M8YS5sZW5ndGg7Yys9MSl7dmFyIGQ9YS5nZXQoYyksZT1KYShkKTtiLmNoYXJTdHJpbmdzLnB1c2goe25hbWU6ZC5uYW1lLHR5cGU6XCJDSEFSU1RSSU5HXCIsdmFsdWU6ZX0pfXJldHVybiBifWZ1bmN0aW9uIExhKGEsYil7dmFyIGM9bmV3IEllLlJlY29yZChcIlByaXZhdGUgRElDVFwiLFt7bmFtZTpcImRpY3RcIix0eXBlOlwiRElDVFwiLHZhbHVlOnt9fV0pO3JldHVybiBjLmRpY3Q9RGEoVWUsYSxiKSxjfWZ1bmN0aW9uIE1hKGEsYil7Zm9yKHZhciBjLGQ9bmV3IEllLlRhYmxlKFwiQ0ZGIFwiLFt7bmFtZTpcImhlYWRlclwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJuYW1lSW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwidG9wRGljdEluZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcInN0cmluZ0luZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcImdsb2JhbFN1YnJJbmRleFwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJjaGFyc2V0c1wiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJjaGFyU3RyaW5nc0luZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcInByaXZhdGVEaWN0XCIsdHlwZTpcIlJFQ09SRFwifV0pLGU9MS9iLnVuaXRzUGVyRW0sZj17dmVyc2lvbjpiLnZlcnNpb24sZnVsbE5hbWU6Yi5mdWxsTmFtZSxmYW1pbHlOYW1lOmIuZmFtaWx5TmFtZSx3ZWlnaHQ6Yi53ZWlnaHROYW1lLGZvbnRCQm94OmIuZm9udEJCb3h8fFswLDAsMCwwXSxmb250TWF0cml4OltlLDAsMCxlLDAsMF0sY2hhcnNldDo5OTksZW5jb2Rpbmc6MCxjaGFyU3RyaW5nczo5OTkscHJpdmF0ZTpbMCw5OTldfSxnPXt9LGg9W10saT0xO2k8YS5sZW5ndGg7aSs9MSljPWEuZ2V0KGkpLGgucHVzaChjLm5hbWUpO3ZhciBqPVtdO2QuaGVhZGVyPUJhKCksZC5uYW1lSW5kZXg9Q2EoW2IucG9zdFNjcmlwdE5hbWVdKTt2YXIgaz1FYShmLGopO2QudG9wRGljdEluZGV4PUZhKGspLGQuZ2xvYmFsU3VickluZGV4PUhhKCksZC5jaGFyc2V0cz1JYShoLGopLGQuY2hhclN0cmluZ3NJbmRleD1LYShhKSxkLnByaXZhdGVEaWN0PUxhKGcsaiksZC5zdHJpbmdJbmRleD1HYShqKTt2YXIgbD1kLmhlYWRlci5zaXplT2YoKStkLm5hbWVJbmRleC5zaXplT2YoKStkLnRvcERpY3RJbmRleC5zaXplT2YoKStkLnN0cmluZ0luZGV4LnNpemVPZigpK2QuZ2xvYmFsU3VickluZGV4LnNpemVPZigpO3JldHVybiBmLmNoYXJzZXQ9bCxmLmVuY29kaW5nPTAsZi5jaGFyU3RyaW5ncz1mLmNoYXJzZXQrZC5jaGFyc2V0cy5zaXplT2YoKSxmLnByaXZhdGVbMV09Zi5jaGFyU3RyaW5ncytkLmNoYXJTdHJpbmdzSW5kZXguc2l6ZU9mKCksaz1FYShmLGopLGQudG9wRGljdEluZGV4PUZhKGspLGR9ZnVuY3Rpb24gTmEoYSxiKXt2YXIgYz17fSxkPW5ldyBMZS5QYXJzZXIoYSxiKTtyZXR1cm4gYy52ZXJzaW9uPWQucGFyc2VWZXJzaW9uKCksYy5mb250UmV2aXNpb249TWF0aC5yb3VuZCgxZTMqZC5wYXJzZUZpeGVkKCkpLzFlMyxjLmNoZWNrU3VtQWRqdXN0bWVudD1kLnBhcnNlVUxvbmcoKSxjLm1hZ2ljTnVtYmVyPWQucGFyc2VVTG9uZygpLHhlLmFyZ3VtZW50KDE1OTQ4MzQxNjU9PT1jLm1hZ2ljTnVtYmVyLFwiRm9udCBoZWFkZXIgaGFzIHdyb25nIG1hZ2ljIG51bWJlci5cIiksYy5mbGFncz1kLnBhcnNlVVNob3J0KCksYy51bml0c1BlckVtPWQucGFyc2VVU2hvcnQoKSxjLmNyZWF0ZWQ9ZC5wYXJzZUxvbmdEYXRlVGltZSgpLGMubW9kaWZpZWQ9ZC5wYXJzZUxvbmdEYXRlVGltZSgpLGMueE1pbj1kLnBhcnNlU2hvcnQoKSxjLnlNaW49ZC5wYXJzZVNob3J0KCksYy54TWF4PWQucGFyc2VTaG9ydCgpLGMueU1heD1kLnBhcnNlU2hvcnQoKSxjLm1hY1N0eWxlPWQucGFyc2VVU2hvcnQoKSxjLmxvd2VzdFJlY1BQRU09ZC5wYXJzZVVTaG9ydCgpLGMuZm9udERpcmVjdGlvbkhpbnQ9ZC5wYXJzZVNob3J0KCksYy5pbmRleFRvTG9jRm9ybWF0PWQucGFyc2VTaG9ydCgpLGMuZ2x5cGhEYXRhRm9ybWF0PWQucGFyc2VTaG9ydCgpLGN9ZnVuY3Rpb24gT2EoYSl7dmFyIGI9TWF0aC5yb3VuZCgobmV3IERhdGUpLmdldFRpbWUoKS8xZTMpKzIwODI4NDQ4MDAsYz1iO3JldHVybiBhLmNyZWF0ZWRUaW1lc3RhbXAmJihjPWEuY3JlYXRlZFRpbWVzdGFtcCsyMDgyODQ0ODAwKSxuZXcgSWUuVGFibGUoXCJoZWFkXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjY1NTM2fSx7bmFtZTpcImZvbnRSZXZpc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjY1NTM2fSx7bmFtZTpcImNoZWNrU3VtQWRqdXN0bWVudFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWFnaWNOdW1iZXJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZToxNTk0ODM0MTY1fSx7bmFtZTpcImZsYWdzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidW5pdHNQZXJFbVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxZTN9LHtuYW1lOlwiY3JlYXRlZFwiLHR5cGU6XCJMT05HREFURVRJTUVcIix2YWx1ZTpjfSx7bmFtZTpcIm1vZGlmaWVkXCIsdHlwZTpcIkxPTkdEQVRFVElNRVwiLHZhbHVlOmJ9LHtuYW1lOlwieE1pblwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieU1pblwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieE1heFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieU1heFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibWFjU3R5bGVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJsb3dlc3RSZWNQUEVNXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZm9udERpcmVjdGlvbkhpbnRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZToyfSx7bmFtZTpcImluZGV4VG9Mb2NGb3JtYXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImdseXBoRGF0YUZvcm1hdFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9XSxhKX1mdW5jdGlvbiBQYShhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3JldHVybiBjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLmFzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMuZGVzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMubGluZUdhcD1kLnBhcnNlU2hvcnQoKSxjLmFkdmFuY2VXaWR0aE1heD1kLnBhcnNlVVNob3J0KCksYy5taW5MZWZ0U2lkZUJlYXJpbmc9ZC5wYXJzZVNob3J0KCksYy5taW5SaWdodFNpZGVCZWFyaW5nPWQucGFyc2VTaG9ydCgpLGMueE1heEV4dGVudD1kLnBhcnNlU2hvcnQoKSxjLmNhcmV0U2xvcGVSaXNlPWQucGFyc2VTaG9ydCgpLGMuY2FyZXRTbG9wZVJ1bj1kLnBhcnNlU2hvcnQoKSxjLmNhcmV0T2Zmc2V0PWQucGFyc2VTaG9ydCgpLGQucmVsYXRpdmVPZmZzZXQrPTgsYy5tZXRyaWNEYXRhRm9ybWF0PWQucGFyc2VTaG9ydCgpLGMubnVtYmVyT2ZITWV0cmljcz1kLnBhcnNlVVNob3J0KCksY31mdW5jdGlvbiBRYShhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiaGhlYVwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiRklYRURcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJhc2NlbmRlclwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwiZGVzY2VuZGVyXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJsaW5lR2FwXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJhZHZhbmNlV2lkdGhNYXhcIix0eXBlOlwiVUZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJtaW5MZWZ0U2lkZUJlYXJpbmdcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcIm1pblJpZ2h0U2lkZUJlYXJpbmdcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcInhNYXhFeHRlbnRcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImNhcmV0U2xvcGVSaXNlXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJjYXJldFNsb3BlUnVuXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJjYXJldE9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVzZXJ2ZWQxXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXNlcnZlZDJcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlc2VydmVkM1wiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVzZXJ2ZWQ0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJtZXRyaWNEYXRhRm9ybWF0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJudW1iZXJPZkhNZXRyaWNzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSxhKX1mdW5jdGlvbiBSYShhLGIsYyxkLGUpe2Zvcih2YXIgZixnLGg9bmV3IExlLlBhcnNlcihhLGIpLGk9MDtpPGQ7aSs9MSl7aTxjJiYoZj1oLnBhcnNlVVNob3J0KCksZz1oLnBhcnNlU2hvcnQoKSk7dmFyIGo9ZS5nZXQoaSk7ai5hZHZhbmNlV2lkdGg9ZixqLmxlZnRTaWRlQmVhcmluZz1nfX1mdW5jdGlvbiBTYShhKXtmb3IodmFyIGI9bmV3IEllLlRhYmxlKFwiaG10eFwiLFtdKSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hLmdldChjKSxlPWQuYWR2YW5jZVdpZHRofHwwLGY9ZC5sZWZ0U2lkZUJlYXJpbmd8fDA7Yi5maWVsZHMucHVzaCh7bmFtZTpcImFkdmFuY2VXaWR0aF9cIitjLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTplfSksYi5maWVsZHMucHVzaCh7bmFtZTpcImxlZnRTaWRlQmVhcmluZ19cIitjLHR5cGU6XCJTSE9SVFwiLHZhbHVlOmZ9KX1yZXR1cm4gYn1mdW5jdGlvbiBUYShhKXtmb3IodmFyIGI9bmV3IEllLlRhYmxlKFwibHRhZ1wiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZToxfSx7bmFtZTpcImZsYWdzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJudW1UYWdzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6YS5sZW5ndGh9XSksYz1cIlwiLGQ9MTIrNCphLmxlbmd0aCxlPTA7ZTxhLmxlbmd0aDsrK2Upe3ZhciBmPWMuaW5kZXhPZihhW2VdKTtmPDAmJihmPWMubGVuZ3RoLGMrPWFbZV0pLGIuZmllbGRzLnB1c2goe25hbWU6XCJvZmZzZXQgXCIrZSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZCtmfSksYi5maWVsZHMucHVzaCh7bmFtZTpcImxlbmd0aCBcIitlLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphW2VdLmxlbmd0aH0pfXJldHVybiBiLmZpZWxkcy5wdXNoKHtuYW1lOlwic3RyaW5nUG9vbFwiLHR5cGU6XCJDSEFSQVJSQVlcIix2YWx1ZTpjfSksYn1mdW5jdGlvbiBVYShhLGIpe3ZhciBjPW5ldyBMZS5QYXJzZXIoYSxiKSxkPWMucGFyc2VVTG9uZygpO3hlLmFyZ3VtZW50KDE9PT1kLFwiVW5zdXBwb3J0ZWQgbHRhZyB0YWJsZSB2ZXJzaW9uLlwiKSxjLnNraXAoXCJ1TG9uZ1wiLDEpO2Zvcih2YXIgZT1jLnBhcnNlVUxvbmcoKSxmPVtdLGc9MDtnPGU7ZysrKXtmb3IodmFyIGg9XCJcIixpPWIrYy5wYXJzZVVTaG9ydCgpLGo9Yy5wYXJzZVVTaG9ydCgpLGs9aTtrPGkrajsrK2spaCs9U3RyaW5nLmZyb21DaGFyQ29kZShhLmdldEludDgoaykpO2YucHVzaChoKX1yZXR1cm4gZn1mdW5jdGlvbiBWYShhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3JldHVybiBjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLm51bUdseXBocz1kLnBhcnNlVVNob3J0KCksMT09PWMudmVyc2lvbiYmKGMubWF4UG9pbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbnRvdXJzPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbXBvc2l0ZVBvaW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb21wb3NpdGVDb250b3Vycz1kLnBhcnNlVVNob3J0KCksYy5tYXhab25lcz1kLnBhcnNlVVNob3J0KCksYy5tYXhUd2lsaWdodFBvaW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhTdG9yYWdlPWQucGFyc2VVU2hvcnQoKSxjLm1heEZ1bmN0aW9uRGVmcz1kLnBhcnNlVVNob3J0KCksYy5tYXhJbnN0cnVjdGlvbkRlZnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4U3RhY2tFbGVtZW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhTaXplT2ZJbnN0cnVjdGlvbnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29tcG9uZW50RWxlbWVudHM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29tcG9uZW50RGVwdGg9ZC5wYXJzZVVTaG9ydCgpKSxjfWZ1bmN0aW9uIFdhKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJtYXhwXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjIwNDgwfSx7bmFtZTpcIm51bUdseXBoc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphfV0pfWZ1bmN0aW9uIFhhKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSAwOmlmKDY1NTM1PT09YilyZXR1cm5cInVuZFwiO2lmKGMpcmV0dXJuIGNbYl07YnJlYWs7Y2FzZSAxOnJldHVybiBhZltiXTtjYXNlIDM6cmV0dXJuIGNmW2JdfX1mdW5jdGlvbiBZYShhLGIsYyl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gZGY7Y2FzZSAxOnJldHVybiBmZltjXXx8ZWZbYl07Y2FzZSAzOmlmKDE9PT1ifHwxMD09PWIpcmV0dXJuIGRmfX1mdW5jdGlvbiBaYShhLGIsYyl7Zm9yKHZhciBkPXt9LGU9bmV3IExlLlBhcnNlcihhLGIpLGY9ZS5wYXJzZVVTaG9ydCgpLGc9ZS5wYXJzZVVTaG9ydCgpLGg9ZS5vZmZzZXQrZS5wYXJzZVVTaG9ydCgpLGk9MDtpPGc7aSsrKXt2YXIgaj1lLnBhcnNlVVNob3J0KCksaz1lLnBhcnNlVVNob3J0KCksbD1lLnBhcnNlVVNob3J0KCksbT1lLnBhcnNlVVNob3J0KCksbj1fZVttXXx8bSxvPWUucGFyc2VVU2hvcnQoKSxwPWUucGFyc2VVU2hvcnQoKSxxPVhhKGosbCxjKSxyPVlhKGosayxsKTtpZih2b2lkIDAhPT1yJiZ2b2lkIDAhPT1xKXt2YXIgcz12b2lkIDA7aWYocz1yPT09ZGY/QWUuVVRGMTYoYSxoK3Asbyk6QWUuTUFDU1RSSU5HKGEsaCtwLG8scikpe3ZhciB0PWRbbl07dm9pZCAwPT09dCYmKHQ9ZFtuXT17fSksdFtxXT1zfX19cmV0dXJuIDE9PT1mJiZlLnBhcnNlVVNob3J0KCksZH1mdW5jdGlvbiAkYShhKXt2YXIgYj17fTtmb3IodmFyIGMgaW4gYSliW2FbY11dPXBhcnNlSW50KGMpO3JldHVybiBifWZ1bmN0aW9uIF9hKGEsYixjLGQsZSxmKXtyZXR1cm4gbmV3IEllLlJlY29yZChcIk5hbWVSZWNvcmRcIixbe25hbWU6XCJwbGF0Zm9ybUlEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmF9LHtuYW1lOlwiZW5jb2RpbmdJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpifSx7bmFtZTpcImxhbmd1YWdlSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Y30se25hbWU6XCJuYW1lSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZH0se25hbWU6XCJsZW5ndGhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZX0se25hbWU6XCJvZmZzZXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Zn1dKX1mdW5jdGlvbiBhYihhLGIpe3ZhciBjPWEubGVuZ3RoLGQ9Yi5sZW5ndGgtYysxO2E6Zm9yKHZhciBlPTA7ZTxkO2UrKylmb3IoO2U8ZDtlKyspe2Zvcih2YXIgZj0wO2Y8YztmKyspaWYoYltlK2ZdIT09YVtmXSljb250aW51ZSBhO3JldHVybiBlfXJldHVybi0xfWZ1bmN0aW9uIGJiKGEsYil7dmFyIGM9YWIoYSxiKTtpZihjPDApe2M9Yi5sZW5ndGg7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aDtkPGU7KytkKWIucHVzaChhW2RdKX1yZXR1cm4gY31mdW5jdGlvbiBjYihhLGIpe3ZhciBjLGQ9W10sZT17fSxmPSRhKF9lKTtmb3IodmFyIGcgaW4gYSl7dmFyIGg9ZltnXTtpZih2b2lkIDA9PT1oJiYoaD1nKSxjPXBhcnNlSW50KGgpLGlzTmFOKGMpKXRocm93IG5ldyBFcnJvcignTmFtZSB0YWJsZSBlbnRyeSBcIicrZysnXCIgZG9lcyBub3QgZXhpc3QsIHNlZSBuYW1lVGFibGVOYW1lcyBmb3IgY29tcGxldGUgbGlzdC4nKTtlW2NdPWFbZ10sZC5wdXNoKGMpfWZvcih2YXIgaT0kYShhZiksaj0kYShjZiksaz1bXSxsPVtdLG09MDttPGQubGVuZ3RoO20rKyl7Yz1kW21dO3ZhciBuPWVbY107Zm9yKHZhciBvIGluIG4pe3ZhciBwPW5bb10scT0xLHI9aVtvXSxzPWJmW3JdLHQ9WWEocSxzLHIpLHU9QmUuTUFDU1RSSU5HKHAsdCk7dm9pZCAwPT09dSYmKHE9MCxyPWIuaW5kZXhPZihvKSxyPDAmJihyPWIubGVuZ3RoLGIucHVzaChvKSkscz00LHU9QmUuVVRGMTYocCkpO3ZhciB2PWJiKHUsbCk7ay5wdXNoKF9hKHEscyxyLGMsdS5sZW5ndGgsdikpO3ZhciB3PWpbb107aWYodm9pZCAwIT09dyl7dmFyIHg9QmUuVVRGMTYocCkseT1iYih4LGwpO2sucHVzaChfYSgzLDEsdyxjLHgubGVuZ3RoLHkpKX19fWsuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnBsYXRmb3JtSUQtYi5wbGF0Zm9ybUlEfHxhLmVuY29kaW5nSUQtYi5lbmNvZGluZ0lEfHxhLmxhbmd1YWdlSUQtYi5sYW5ndWFnZUlEfHxhLm5hbWVJRC1iLm5hbWVJRH0pO2Zvcih2YXIgej1uZXcgSWUuVGFibGUoXCJuYW1lXCIsW3tuYW1lOlwiZm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiY291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ay5sZW5ndGh9LHtuYW1lOlwic3RyaW5nT2Zmc2V0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjYrMTIqay5sZW5ndGh9XSksQT0wO0E8ay5sZW5ndGg7QSsrKXouZmllbGRzLnB1c2goe25hbWU6XCJyZWNvcmRfXCIrQSx0eXBlOlwiUkVDT1JEXCIsdmFsdWU6a1tBXX0pO3JldHVybiB6LmZpZWxkcy5wdXNoKHtuYW1lOlwic3RyaW5nc1wiLHR5cGU6XCJMSVRFUkFMXCIsdmFsdWU6bH0pLHp9ZnVuY3Rpb24gZGIoYSl7Zm9yKHZhciBiPTA7YjxoZi5sZW5ndGg7Yis9MSl7dmFyIGM9aGZbYl07aWYoYT49Yy5iZWdpbiYmYTxjLmVuZClyZXR1cm4gYn1yZXR1cm4tMX1mdW5jdGlvbiBlYihhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO2MudmVyc2lvbj1kLnBhcnNlVVNob3J0KCksYy54QXZnQ2hhcldpZHRoPWQucGFyc2VTaG9ydCgpLGMudXNXZWlnaHRDbGFzcz1kLnBhcnNlVVNob3J0KCksYy51c1dpZHRoQ2xhc3M9ZC5wYXJzZVVTaG9ydCgpLGMuZnNUeXBlPWQucGFyc2VVU2hvcnQoKSxjLnlTdWJzY3JpcHRYU2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdWJzY3JpcHRZU2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdWJzY3JpcHRYT2Zmc2V0PWQucGFyc2VTaG9ydCgpLGMueVN1YnNjcmlwdFlPZmZzZXQ9ZC5wYXJzZVNob3J0KCksYy55U3VwZXJzY3JpcHRYU2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdXBlcnNjcmlwdFlTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1cGVyc2NyaXB0WE9mZnNldD1kLnBhcnNlU2hvcnQoKSxjLnlTdXBlcnNjcmlwdFlPZmZzZXQ9ZC5wYXJzZVNob3J0KCksYy55U3RyaWtlb3V0U2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdHJpa2VvdXRQb3NpdGlvbj1kLnBhcnNlU2hvcnQoKSxjLnNGYW1pbHlDbGFzcz1kLnBhcnNlU2hvcnQoKSxjLnBhbm9zZT1bXTtmb3IodmFyIGU9MDtlPDEwO2UrKyljLnBhbm9zZVtlXT1kLnBhcnNlQnl0ZSgpO3JldHVybiBjLnVsVW5pY29kZVJhbmdlMT1kLnBhcnNlVUxvbmcoKSxjLnVsVW5pY29kZVJhbmdlMj1kLnBhcnNlVUxvbmcoKSxjLnVsVW5pY29kZVJhbmdlMz1kLnBhcnNlVUxvbmcoKSxjLnVsVW5pY29kZVJhbmdlND1kLnBhcnNlVUxvbmcoKSxjLmFjaFZlbmRJRD1TdHJpbmcuZnJvbUNoYXJDb2RlKGQucGFyc2VCeXRlKCksZC5wYXJzZUJ5dGUoKSxkLnBhcnNlQnl0ZSgpLGQucGFyc2VCeXRlKCkpLGMuZnNTZWxlY3Rpb249ZC5wYXJzZVVTaG9ydCgpLGMudXNGaXJzdENoYXJJbmRleD1kLnBhcnNlVVNob3J0KCksYy51c0xhc3RDaGFySW5kZXg9ZC5wYXJzZVVTaG9ydCgpLGMuc1R5cG9Bc2NlbmRlcj1kLnBhcnNlU2hvcnQoKSxjLnNUeXBvRGVzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMuc1R5cG9MaW5lR2FwPWQucGFyc2VTaG9ydCgpLGMudXNXaW5Bc2NlbnQ9ZC5wYXJzZVVTaG9ydCgpLGMudXNXaW5EZXNjZW50PWQucGFyc2VVU2hvcnQoKSxjLnZlcnNpb24+PTEmJihjLnVsQ29kZVBhZ2VSYW5nZTE9ZC5wYXJzZVVMb25nKCksYy51bENvZGVQYWdlUmFuZ2UyPWQucGFyc2VVTG9uZygpKSxjLnZlcnNpb24+PTImJihjLnN4SGVpZ2h0PWQucGFyc2VTaG9ydCgpLGMuc0NhcEhlaWdodD1kLnBhcnNlU2hvcnQoKSxjLnVzRGVmYXVsdENoYXI9ZC5wYXJzZVVTaG9ydCgpLGMudXNCcmVha0NoYXI9ZC5wYXJzZVVTaG9ydCgpLGMudXNNYXhDb250ZW50PWQucGFyc2VVU2hvcnQoKSksY31mdW5jdGlvbiBmYihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiT1MvMlwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6M30se25hbWU6XCJ4QXZnQ2hhcldpZHRoXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c1dlaWdodENsYXNzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNXaWR0aENsYXNzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZnNUeXBlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieVN1YnNjcmlwdFhTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6NjUwfSx7bmFtZTpcInlTdWJzY3JpcHRZU2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjY5OX0se25hbWU6XCJ5U3Vic2NyaXB0WE9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieVN1YnNjcmlwdFlPZmZzZXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZToxNDB9LHtuYW1lOlwieVN1cGVyc2NyaXB0WFNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo2NTB9LHtuYW1lOlwieVN1cGVyc2NyaXB0WVNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo2OTl9LHtuYW1lOlwieVN1cGVyc2NyaXB0WE9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieVN1cGVyc2NyaXB0WU9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjQ3OX0se25hbWU6XCJ5U3RyaWtlb3V0U2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjQ5fSx7bmFtZTpcInlTdHJpa2VvdXRQb3NpdGlvblwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjI1OH0se25hbWU6XCJzRmFtaWx5Q2xhc3NcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImJGYW1pbHlUeXBlXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJTZXJpZlN0eWxlXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJXZWlnaHRcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlByb3BvcnRpb25cIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYkNvbnRyYXN0XCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJTdHJva2VWYXJpYXRpb25cIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYkFybVN0eWxlXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJMZXR0ZXJmb3JtXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJNaWRsaW5lXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJYSGVpZ2h0XCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcInVsVW5pY29kZVJhbmdlMVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwidWxVbmljb2RlUmFuZ2UyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJ1bFVuaWNvZGVSYW5nZTNcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcInVsVW5pY29kZVJhbmdlNFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwiYWNoVmVuZElEXCIsdHlwZTpcIkNIQVJBUlJBWVwiLHZhbHVlOlwiWFhYWFwifSx7bmFtZTpcImZzU2VsZWN0aW9uXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNGaXJzdENoYXJJbmRleFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzTGFzdENoYXJJbmRleFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNUeXBvQXNjZW5kZXJcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNUeXBvRGVzY2VuZGVyXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzVHlwb0xpbmVHYXBcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzV2luQXNjZW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNXaW5EZXNjZW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidWxDb2RlUGFnZVJhbmdlMVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwidWxDb2RlUGFnZVJhbmdlMlwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwic3hIZWlnaHRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNDYXBIZWlnaHRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzRGVmYXVsdENoYXJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c0JyZWFrQ2hhclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzTWF4Q29udGV4dFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfV0sYSl9ZnVuY3Rpb24gZ2IoYSxiKXt2YXIgYz17fSxkPW5ldyBMZS5QYXJzZXIoYSxiKTtzd2l0Y2goYy52ZXJzaW9uPWQucGFyc2VWZXJzaW9uKCksYy5pdGFsaWNBbmdsZT1kLnBhcnNlRml4ZWQoKSxjLnVuZGVybGluZVBvc2l0aW9uPWQucGFyc2VTaG9ydCgpLGMudW5kZXJsaW5lVGhpY2tuZXNzPWQucGFyc2VTaG9ydCgpLGMuaXNGaXhlZFBpdGNoPWQucGFyc2VVTG9uZygpLGMubWluTWVtVHlwZTQyPWQucGFyc2VVTG9uZygpLGMubWF4TWVtVHlwZTQyPWQucGFyc2VVTG9uZygpLGMubWluTWVtVHlwZTE9ZC5wYXJzZVVMb25nKCksYy5tYXhNZW1UeXBlMT1kLnBhcnNlVUxvbmcoKSxjLnZlcnNpb24pe2Nhc2UgMTpjLm5hbWVzPVFlLnNsaWNlKCk7YnJlYWs7Y2FzZSAyOmMubnVtYmVyT2ZHbHlwaHM9ZC5wYXJzZVVTaG9ydCgpLGMuZ2x5cGhOYW1lSW5kZXg9bmV3IEFycmF5KGMubnVtYmVyT2ZHbHlwaHMpO2Zvcih2YXIgZT0wO2U8Yy5udW1iZXJPZkdseXBocztlKyspYy5nbHlwaE5hbWVJbmRleFtlXT1kLnBhcnNlVVNob3J0KCk7Yy5uYW1lcz1bXTtmb3IodmFyIGY9MDtmPGMubnVtYmVyT2ZHbHlwaHM7ZisrKWlmKGMuZ2x5cGhOYW1lSW5kZXhbZl0+PVFlLmxlbmd0aCl7dmFyIGc9ZC5wYXJzZUNoYXIoKTtjLm5hbWVzLnB1c2goZC5wYXJzZVN0cmluZyhnKSl9YnJlYWs7Y2FzZSAyLjU6Yy5udW1iZXJPZkdseXBocz1kLnBhcnNlVVNob3J0KCksYy5vZmZzZXQ9bmV3IEFycmF5KGMubnVtYmVyT2ZHbHlwaHMpO2Zvcih2YXIgaD0wO2g8Yy5udW1iZXJPZkdseXBocztoKyspYy5vZmZzZXRbaF09ZC5wYXJzZUNoYXIoKX1yZXR1cm4gY31mdW5jdGlvbiBoYigpe3JldHVybiBuZXcgSWUuVGFibGUoXCJwb3N0XCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjE5NjYwOH0se25hbWU6XCJpdGFsaWNBbmdsZVwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjB9LHtuYW1lOlwidW5kZXJsaW5lUG9zaXRpb25cIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcInVuZGVybGluZVRoaWNrbmVzc1wiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwiaXNGaXhlZFBpdGNoXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtaW5NZW1UeXBlNDJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1heE1lbVR5cGU0MlwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWluTWVtVHlwZTFcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1heE1lbVR5cGUxXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH1dKX1mdW5jdGlvbiBpYihhLGIpe2I9Ynx8MDt2YXIgYz1uZXcgUShhLGIpLGQ9Yy5wYXJzZVZlcnNpb24oMSk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1kfHwxLjE9PT1kLFwiVW5zdXBwb3J0ZWQgR1NVQiB0YWJsZSB2ZXJzaW9uLlwiKSwxPT09ZD97dmVyc2lvbjpkLHNjcmlwdHM6Yy5wYXJzZVNjcmlwdExpc3QoKSxmZWF0dXJlczpjLnBhcnNlRmVhdHVyZUxpc3QoKSxsb29rdXBzOmMucGFyc2VMb29rdXBMaXN0KGxmKX06e3ZlcnNpb246ZCxzY3JpcHRzOmMucGFyc2VTY3JpcHRMaXN0KCksZmVhdHVyZXM6Yy5wYXJzZUZlYXR1cmVMaXN0KCksbG9va3VwczpjLnBhcnNlTG9va3VwTGlzdChsZiksdmFyaWF0aW9uczpjLnBhcnNlRmVhdHVyZVZhcmlhdGlvbnNMaXN0KCl9fWZ1bmN0aW9uIGpiKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJHU1VCXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjY1NTM2fSx7bmFtZTpcInNjcmlwdHNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuU2NyaXB0TGlzdChhLnNjcmlwdHMpfSx7bmFtZTpcImZlYXR1cmVzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkZlYXR1cmVMaXN0KGEuZmVhdHVyZXMpfSx7bmFtZTpcImxvb2t1cHNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuTG9va3VwTGlzdChhLmxvb2t1cHMsbmYpfV0pfWZ1bmN0aW9uIGtiKGEsYil7dmFyIGM9bmV3IExlLlBhcnNlcihhLGIpLGQ9Yy5wYXJzZVVMb25nKCk7eGUuYXJndW1lbnQoMT09PWQsXCJVbnN1cHBvcnRlZCBNRVRBIHRhYmxlIHZlcnNpb24uXCIpLGMucGFyc2VVTG9uZygpLGMucGFyc2VVTG9uZygpO2Zvcih2YXIgZT1jLnBhcnNlVUxvbmcoKSxmPXt9LGc9MDtnPGU7ZysrKXt2YXIgaD1jLnBhcnNlVGFnKCksaT1jLnBhcnNlVUxvbmcoKSxqPWMucGFyc2VVTG9uZygpLGs9QWUuVVRGOChhLGIraSxqKTtmW2hdPWt9cmV0dXJuIGZ9ZnVuY3Rpb24gbGIoYSl7dmFyIGI9T2JqZWN0LmtleXMoYSkubGVuZ3RoLGM9XCJcIixkPTE2KzEyKmIsZT1uZXcgSWUuVGFibGUoXCJtZXRhXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjF9LHtuYW1lOlwiZmxhZ3NcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmR9LHtuYW1lOlwibnVtVGFnc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmJ9XSk7Zm9yKHZhciBmIGluIGEpe3ZhciBnPWMubGVuZ3RoO2MrPWFbZl0sZS5maWVsZHMucHVzaCh7bmFtZTpcInRhZyBcIitmLHR5cGU6XCJUQUdcIix2YWx1ZTpmfSksZS5maWVsZHMucHVzaCh7bmFtZTpcIm9mZnNldCBcIitmLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmQrZ30pLGUuZmllbGRzLnB1c2goe25hbWU6XCJsZW5ndGggXCIrZix0eXBlOlwiVUxPTkdcIix2YWx1ZTphW2ZdLmxlbmd0aH0pfXJldHVybiBlLmZpZWxkcy5wdXNoKHtuYW1lOlwic3RyaW5nUG9vbFwiLHR5cGU6XCJDSEFSQVJSQVlcIix2YWx1ZTpjfSksZX1mdW5jdGlvbiBtYihhKXtyZXR1cm4gTWF0aC5sb2coYSkvTWF0aC5sb2coMil8MH1mdW5jdGlvbiBuYihhKXtmb3IoO2EubGVuZ3RoJTQhPTA7KWEucHVzaCgwKTtmb3IodmFyIGI9MCxjPTA7YzxhLmxlbmd0aDtjKz00KWIrPShhW2NdPDwyNCkrKGFbYysxXTw8MTYpKyhhW2MrMl08PDgpK2FbYyszXTtyZXR1cm4gYiU9TWF0aC5wb3coMiwzMil9ZnVuY3Rpb24gb2IoYSxiLGMsZCl7cmV0dXJuIG5ldyBJZS5SZWNvcmQoXCJUYWJsZSBSZWNvcmRcIixbe25hbWU6XCJ0YWdcIix0eXBlOlwiVEFHXCIsdmFsdWU6dm9pZCAwIT09YT9hOlwiXCJ9LHtuYW1lOlwiY2hlY2tTdW1cIix0eXBlOlwiVUxPTkdcIix2YWx1ZTp2b2lkIDAhPT1iP2I6MH0se25hbWU6XCJvZmZzZXRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTp2b2lkIDAhPT1jP2M6MH0se25hbWU6XCJsZW5ndGhcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTp2b2lkIDAhPT1kP2Q6MH1dKX1mdW5jdGlvbiBwYihhKXt2YXIgYj1uZXcgSWUuVGFibGUoXCJzZm50XCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJUQUdcIix2YWx1ZTpcIk9UVE9cIn0se25hbWU6XCJudW1UYWJsZXNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzZWFyY2hSYW5nZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImVudHJ5U2VsZWN0b3JcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyYW5nZVNoaWZ0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSk7Yi50YWJsZXM9YSxiLm51bVRhYmxlcz1hLmxlbmd0aDt2YXIgYz1NYXRoLnBvdygyLG1iKGIubnVtVGFibGVzKSk7Yi5zZWFyY2hSYW5nZT0xNipjLGIuZW50cnlTZWxlY3Rvcj1tYihjKSxiLnJhbmdlU2hpZnQ9MTYqYi5udW1UYWJsZXMtYi5zZWFyY2hSYW5nZTtmb3IodmFyIGQ9W10sZT1bXSxmPWIuc2l6ZU9mKCkrb2IoKS5zaXplT2YoKSpiLm51bVRhYmxlcztmJTQhPTA7KWYrPTEsZS5wdXNoKHtuYW1lOlwicGFkZGluZ1wiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0pO2Zvcih2YXIgZz0wO2c8YS5sZW5ndGg7Zys9MSl7dmFyIGg9YVtnXTt4ZS5hcmd1bWVudCg0PT09aC50YWJsZU5hbWUubGVuZ3RoLFwiVGFibGUgbmFtZVwiK2gudGFibGVOYW1lK1wiIGlzIGludmFsaWQuXCIpO3ZhciBpPWguc2l6ZU9mKCksaj1vYihoLnRhYmxlTmFtZSxuYihoLmVuY29kZSgpKSxmLGkpO2ZvcihkLnB1c2goe25hbWU6ai50YWcrXCIgVGFibGUgUmVjb3JkXCIsdHlwZTpcIlJFQ09SRFwiLHZhbHVlOmp9KSxlLnB1c2goe25hbWU6aC50YWJsZU5hbWUrXCIgdGFibGVcIix0eXBlOlwiUkVDT1JEXCIsdmFsdWU6aH0pLGYrPWkseGUuYXJndW1lbnQoIWlzTmFOKGYpLFwiU29tZXRoaW5nIHdlbnQgd3JvbmcgY2FsY3VsYXRpbmcgdGhlIG9mZnNldC5cIik7ZiU0IT0wOylmKz0xLGUucHVzaCh7bmFtZTpcInBhZGRpbmdcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudmFsdWUudGFnPmIudmFsdWUudGFnPzE6LTF9KSxiLmZpZWxkcz1iLmZpZWxkcy5jb25jYXQoZCksYi5maWVsZHM9Yi5maWVsZHMuY29uY2F0KGUpLGJ9ZnVuY3Rpb24gcWIoYSxiLGMpe2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCs9MSl7dmFyIGU9YS5jaGFyVG9HbHlwaEluZGV4KGJbZF0pO2lmKGU+MCl7cmV0dXJuIGEuZ2x5cGhzLmdldChlKS5nZXRNZXRyaWNzKCl9fXJldHVybiBjfWZ1bmN0aW9uIHJiKGEpe2Zvcih2YXIgYj0wLGM9MDtjPGEubGVuZ3RoO2MrPTEpYis9YVtjXTtyZXR1cm4gYi9hLmxlbmd0aH1mdW5jdGlvbiBzYihhKXtmb3IodmFyIGIsYz1bXSxkPVtdLGU9W10sZj1bXSxnPVtdLGg9W10saT1bXSxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MDtvPGEuZ2x5cGhzLmxlbmd0aDtvKz0xKXt2YXIgcD1hLmdseXBocy5nZXQobykscT0wfHAudW5pY29kZTtpZihpc05hTihwLmFkdmFuY2VXaWR0aCkpdGhyb3cgbmV3IEVycm9yKFwiR2x5cGggXCIrcC5uYW1lK1wiIChcIitvK1wiKTogYWR2YW5jZVdpZHRoIGlzIG5vdCBhIG51bWJlci5cIik7KGI+cXx8dm9pZCAwPT09YikmJnE+MCYmKGI9cSksajxxJiYoaj1xKTt2YXIgcj1qZi5nZXRVbmljb2RlUmFuZ2UocSk7aWYocjwzMilrfD0xPDxyO2Vsc2UgaWYocjw2NClsfD0xPDxyLTMyO2Vsc2UgaWYocjw5NiltfD0xPDxyLTY0O2Vsc2V7aWYoIShyPDEyMykpdGhyb3cgbmV3IEVycm9yKFwiVW5pY29kZSByYW5nZXMgYml0cyA+IDEyMyBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzYWdlXCIpO258PTE8PHItOTZ9aWYoXCIubm90ZGVmXCIhPT1wLm5hbWUpe3ZhciBzPXAuZ2V0TWV0cmljcygpO2MucHVzaChzLnhNaW4pLGQucHVzaChzLnlNaW4pLGUucHVzaChzLnhNYXgpLGYucHVzaChzLnlNYXgpLGgucHVzaChzLmxlZnRTaWRlQmVhcmluZyksaS5wdXNoKHMucmlnaHRTaWRlQmVhcmluZyksZy5wdXNoKHAuYWR2YW5jZVdpZHRoKX19dmFyIHQ9e3hNaW46TWF0aC5taW4uYXBwbHkobnVsbCxjKSx5TWluOk1hdGgubWluLmFwcGx5KG51bGwsZCkseE1heDpNYXRoLm1heC5hcHBseShudWxsLGUpLHlNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxmKSxhZHZhbmNlV2lkdGhNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxnKSxhZHZhbmNlV2lkdGhBdmc6cmIoZyksbWluTGVmdFNpZGVCZWFyaW5nOk1hdGgubWluLmFwcGx5KG51bGwsaCksbWF4TGVmdFNpZGVCZWFyaW5nOk1hdGgubWF4LmFwcGx5KG51bGwsaCksbWluUmlnaHRTaWRlQmVhcmluZzpNYXRoLm1pbi5hcHBseShudWxsLGkpfTt0LmFzY2VuZGVyPWEuYXNjZW5kZXIsdC5kZXNjZW5kZXI9YS5kZXNjZW5kZXI7dmFyIHU9V2UubWFrZSh7ZmxhZ3M6Myx1bml0c1BlckVtOmEudW5pdHNQZXJFbSx4TWluOnQueE1pbix5TWluOnQueU1pbix4TWF4OnQueE1heCx5TWF4OnQueU1heCxsb3dlc3RSZWNQUEVNOjMsY3JlYXRlZFRpbWVzdGFtcDphLmNyZWF0ZWRUaW1lc3RhbXB9KSx2PVhlLm1ha2Uoe2FzY2VuZGVyOnQuYXNjZW5kZXIsZGVzY2VuZGVyOnQuZGVzY2VuZGVyLGFkdmFuY2VXaWR0aE1heDp0LmFkdmFuY2VXaWR0aE1heCxtaW5MZWZ0U2lkZUJlYXJpbmc6dC5taW5MZWZ0U2lkZUJlYXJpbmcsbWluUmlnaHRTaWRlQmVhcmluZzp0Lm1pblJpZ2h0U2lkZUJlYXJpbmcseE1heEV4dGVudDp0Lm1heExlZnRTaWRlQmVhcmluZysodC54TWF4LXQueE1pbiksbnVtYmVyT2ZITWV0cmljczphLmdseXBocy5sZW5ndGh9KSx3PSRlLm1ha2UoYS5nbHlwaHMubGVuZ3RoKSx4PWpmLm1ha2Uoe3hBdmdDaGFyV2lkdGg6TWF0aC5yb3VuZCh0LmFkdmFuY2VXaWR0aEF2ZyksdXNXZWlnaHRDbGFzczphLnRhYmxlcy5vczIudXNXZWlnaHRDbGFzcyx1c1dpZHRoQ2xhc3M6YS50YWJsZXMub3MyLnVzV2lkdGhDbGFzcyx1c0ZpcnN0Q2hhckluZGV4OmIsdXNMYXN0Q2hhckluZGV4OmosdWxVbmljb2RlUmFuZ2UxOmssdWxVbmljb2RlUmFuZ2UyOmwsdWxVbmljb2RlUmFuZ2UzOm0sdWxVbmljb2RlUmFuZ2U0Om4sZnNTZWxlY3Rpb246YS50YWJsZXMub3MyLmZzU2VsZWN0aW9uLHNUeXBvQXNjZW5kZXI6dC5hc2NlbmRlcixzVHlwb0Rlc2NlbmRlcjp0LmRlc2NlbmRlcixzVHlwb0xpbmVHYXA6MCx1c1dpbkFzY2VudDp0LnlNYXgsdXNXaW5EZXNjZW50Ok1hdGguYWJzKHQueU1pbiksdWxDb2RlUGFnZVJhbmdlMToxLHN4SGVpZ2h0OnFiKGEsXCJ4eXZ3XCIse3lNYXg6TWF0aC5yb3VuZCh0LmFzY2VuZGVyLzIpfSkueU1heCxzQ2FwSGVpZ2h0OnFiKGEsXCJISUtMRUZKTU5UWkJEUFJBR09RU1VWV1hZXCIsdCkueU1heCx1c0RlZmF1bHRDaGFyOmEuaGFzQ2hhcihcIiBcIik/MzI6MCx1c0JyZWFrQ2hhcjphLmhhc0NoYXIoXCIgXCIpPzMyOjB9KSx5PVllLm1ha2UoYS5nbHlwaHMpLHo9TWUubWFrZShhLmdseXBocyksQT1hLmdldEVuZ2xpc2hOYW1lKFwiZm9udEZhbWlseVwiKSxCPWEuZ2V0RW5nbGlzaE5hbWUoXCJmb250U3ViZmFtaWx5XCIpLEM9QStcIiBcIitCLEQ9YS5nZXRFbmdsaXNoTmFtZShcInBvc3RTY3JpcHROYW1lXCIpO0R8fChEPUEucmVwbGFjZSgvXFxzL2csXCJcIikrXCItXCIrQik7dmFyIEU9e307Zm9yKHZhciBGIGluIGEubmFtZXMpRVtGXT1hLm5hbWVzW0ZdO0UudW5pcXVlSUR8fChFLnVuaXF1ZUlEPXtlbjphLmdldEVuZ2xpc2hOYW1lKFwibWFudWZhY3R1cmVyXCIpK1wiOlwiK0N9KSxFLnBvc3RTY3JpcHROYW1lfHwoRS5wb3N0U2NyaXB0TmFtZT17ZW46RH0pLEUucHJlZmVycmVkRmFtaWx5fHwoRS5wcmVmZXJyZWRGYW1pbHk9YS5uYW1lcy5mb250RmFtaWx5KSxFLnByZWZlcnJlZFN1YmZhbWlseXx8KEUucHJlZmVycmVkU3ViZmFtaWx5PWEubmFtZXMuZm9udFN1YmZhbWlseSk7dmFyIEc9W10sSD1nZi5tYWtlKEUsRyksST1HLmxlbmd0aD4wP1plLm1ha2UoRyk6dm9pZCAwLEo9a2YubWFrZSgpLEs9VmUubWFrZShhLmdseXBocyx7dmVyc2lvbjphLmdldEVuZ2xpc2hOYW1lKFwidmVyc2lvblwiKSxmdWxsTmFtZTpDLGZhbWlseU5hbWU6QSx3ZWlnaHROYW1lOkIscG9zdFNjcmlwdE5hbWU6RCx1bml0c1BlckVtOmEudW5pdHNQZXJFbSxmb250QkJveDpbMCx0LnlNaW4sdC5hc2NlbmRlcix0LmFkdmFuY2VXaWR0aE1heF19KSxMPWEubWV0YXMmJk9iamVjdC5rZXlzKGEubWV0YXMpLmxlbmd0aD4wP3BmLm1ha2UoYS5tZXRhcyk6dm9pZCAwLE09W3Usdix3LHgsSCx6LEosSyx5XTtJJiZNLnB1c2goSSksYS50YWJsZXMuZ3N1YiYmTS5wdXNoKG9mLm1ha2UoYS50YWJsZXMuZ3N1YikpLEwmJk0ucHVzaChMKTtmb3IodmFyIE49cGIoTSksTz1OLmVuY29kZSgpLFA9bmIoTyksUT1OLmZpZWxkcyxSPSExLFM9MDtTPFEubGVuZ3RoO1MrPTEpaWYoXCJoZWFkIHRhYmxlXCI9PT1RW1NdLm5hbWUpe1FbU10udmFsdWUuY2hlY2tTdW1BZGp1c3RtZW50PTI5ODExNDY1NTQtUCxSPSEwO2JyZWFrfWlmKCFSKXRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIGhlYWQgdGFibGUgd2l0aCBjaGVja1N1bSB0byBhZGp1c3QuXCIpO3JldHVybiBOfWZ1bmN0aW9uIHRiKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aC0xO2M8PWQ7KXt2YXIgZT1jK2Q+Pj4xLGY9YVtlXS50YWc7aWYoZj09PWIpcmV0dXJuIGU7ZjxiP2M9ZSsxOmQ9ZS0xfXJldHVybi1jLTF9ZnVuY3Rpb24gdWIoYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoLTE7Yzw9ZDspe3ZhciBlPWMrZD4+PjEsZj1hW2VdO2lmKGY9PT1iKXJldHVybiBlO2Y8Yj9jPWUrMTpkPWUtMX1yZXR1cm4tYy0xfWZ1bmN0aW9uIHZiKGEsYil7Zm9yKHZhciBjLGQ9MCxlPWEubGVuZ3RoLTE7ZDw9ZTspe3ZhciBmPWQrZT4+PjE7Yz1hW2ZdO3ZhciBnPWMuc3RhcnQ7aWYoZz09PWIpcmV0dXJuIGM7ZzxiP2Q9ZisxOmU9Zi0xfWlmKGQ+MClyZXR1cm4gYz1hW2QtMV0sYj5jLmVuZD8wOmN9ZnVuY3Rpb24gd2IoYSxiKXt0aGlzLmZvbnQ9YSx0aGlzLnRhYmxlTmFtZT1ifWZ1bmN0aW9uIHhiKGEpe3diLmNhbGwodGhpcyxhLFwiZ3Bvc1wiKX1mdW5jdGlvbiB5YihhKXt3Yi5jYWxsKHRoaXMsYSxcImdzdWJcIil9ZnVuY3Rpb24gemIoYSxiKXt2YXIgYz1hLmxlbmd0aDtpZihjIT09Yi5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBkPTA7ZDxjO2QrKylpZihhW2RdIT09YltkXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBBYihhLGIsYyl7Zm9yKHZhciBkPWEuc3VidGFibGVzLGU9MDtlPGQubGVuZ3RoO2UrKyl7dmFyIGY9ZFtlXTtpZihmLnN1YnN0Rm9ybWF0PT09YilyZXR1cm4gZn1pZihjKXJldHVybiBkLnB1c2goYyksY31mdW5jdGlvbiBCYigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3d9ZnVuY3Rpb24gQ2IoYSl7Zm9yKHZhciBiPW5ldyBBcnJheUJ1ZmZlcihhLmxlbmd0aCksYz1uZXcgVWludDhBcnJheShiKSxkPTA7ZDxhLmxlbmd0aDsrK2QpY1tkXT1hW2RdO3JldHVybiBifWZ1bmN0aW9uIERiKGEpe2Zvcih2YXIgYj1uZXcgZShhLmJ5dGVMZW5ndGgpLGM9bmV3IFVpbnQ4QXJyYXkoYSksZD0wO2Q8Yi5sZW5ndGg7KytkKWJbZF09Y1tkXTtyZXR1cm4gYn1mdW5jdGlvbiBFYihhLGIpe2lmKCFhKXRocm93IGJ9ZnVuY3Rpb24gRmIoYSxiLGMsZCxlKXt2YXIgZjtyZXR1cm4oYiZkKT4wPyhmPWEucGFyc2VCeXRlKCksMD09KGImZSkmJihmPS1mKSxmPWMrZik6Zj0oYiZlKT4wP2M6YythLnBhcnNlU2hvcnQoKSxmfWZ1bmN0aW9uIEdiKGEsYixjKXt2YXIgZD1uZXcgTGUuUGFyc2VyKGIsYyk7YS5udW1iZXJPZkNvbnRvdXJzPWQucGFyc2VTaG9ydCgpLGEuX3hNaW49ZC5wYXJzZVNob3J0KCksYS5feU1pbj1kLnBhcnNlU2hvcnQoKSxhLl94TWF4PWQucGFyc2VTaG9ydCgpLGEuX3lNYXg9ZC5wYXJzZVNob3J0KCk7dmFyIGUsZjtpZihhLm51bWJlck9mQ29udG91cnM+MCl7Zm9yKHZhciBnPWEuZW5kUG9pbnRJbmRpY2VzPVtdLGg9MDtoPGEubnVtYmVyT2ZDb250b3VycztoKz0xKWcucHVzaChkLnBhcnNlVVNob3J0KCkpO2EuaW5zdHJ1Y3Rpb25MZW5ndGg9ZC5wYXJzZVVTaG9ydCgpLGEuaW5zdHJ1Y3Rpb25zPVtdO2Zvcih2YXIgaT0wO2k8YS5pbnN0cnVjdGlvbkxlbmd0aDtpKz0xKWEuaW5zdHJ1Y3Rpb25zLnB1c2goZC5wYXJzZUJ5dGUoKSk7dmFyIGo9Z1tnLmxlbmd0aC0xXSsxO2U9W107Zm9yKHZhciBrPTA7azxqO2srPTEpaWYoZj1kLnBhcnNlQnl0ZSgpLGUucHVzaChmKSwoOCZmKT4wKWZvcih2YXIgbD1kLnBhcnNlQnl0ZSgpLG09MDttPGw7bSs9MSllLnB1c2goZiksays9MTtpZih4ZS5hcmd1bWVudChlLmxlbmd0aD09PWosXCJCYWQgZmxhZ3MuXCIpLGcubGVuZ3RoPjApe3ZhciBuLG89W107aWYoaj4wKXtmb3IodmFyIHA9MDtwPGo7cCs9MSlmPWVbcF0sbj17fSxuLm9uQ3VydmU9ISEoMSZmKSxuLmxhc3RQb2ludE9mQ29udG91cj1nLmluZGV4T2YocCk+PTAsby5wdXNoKG4pO2Zvcih2YXIgcT0wLHI9MDtyPGo7cis9MSlmPWVbcl0sbj1vW3JdLG4ueD1GYihkLGYscSwyLDE2KSxxPW4ueDtmb3IodmFyIHM9MCx0PTA7dDxqO3QrPTEpZj1lW3RdLG49b1t0XSxuLnk9RmIoZCxmLHMsNCwzMikscz1uLnl9YS5wb2ludHM9b31lbHNlIGEucG9pbnRzPVtdfWVsc2UgaWYoMD09PWEubnVtYmVyT2ZDb250b3VycylhLnBvaW50cz1bXTtlbHNle2EuaXNDb21wb3NpdGU9ITAsYS5wb2ludHM9W10sYS5jb21wb25lbnRzPVtdO2Zvcih2YXIgdT0hMDt1Oyl7ZT1kLnBhcnNlVVNob3J0KCk7dmFyIHY9e2dseXBoSW5kZXg6ZC5wYXJzZVVTaG9ydCgpLHhTY2FsZToxLHNjYWxlMDE6MCxzY2FsZTEwOjAseVNjYWxlOjEsZHg6MCxkeTowfTsoMSZlKT4wPygyJmUpPjA/KHYuZHg9ZC5wYXJzZVNob3J0KCksdi5keT1kLnBhcnNlU2hvcnQoKSk6di5tYXRjaGVkUG9pbnRzPVtkLnBhcnNlVVNob3J0KCksZC5wYXJzZVVTaG9ydCgpXTooMiZlKT4wPyh2LmR4PWQucGFyc2VDaGFyKCksdi5keT1kLnBhcnNlQ2hhcigpKTp2Lm1hdGNoZWRQb2ludHM9W2QucGFyc2VCeXRlKCksZC5wYXJzZUJ5dGUoKV0sKDgmZSk+MD92LnhTY2FsZT12LnlTY2FsZT1kLnBhcnNlRjJEb3QxNCgpOig2NCZlKT4wPyh2LnhTY2FsZT1kLnBhcnNlRjJEb3QxNCgpLHYueVNjYWxlPWQucGFyc2VGMkRvdDE0KCkpOigxMjgmZSk+MCYmKHYueFNjYWxlPWQucGFyc2VGMkRvdDE0KCksdi5zY2FsZTAxPWQucGFyc2VGMkRvdDE0KCksdi5zY2FsZTEwPWQucGFyc2VGMkRvdDE0KCksdi55U2NhbGU9ZC5wYXJzZUYyRG90MTQoKSksYS5jb21wb25lbnRzLnB1c2godiksdT0hISgzMiZlKX1pZigyNTYmZSl7YS5pbnN0cnVjdGlvbkxlbmd0aD1kLnBhcnNlVVNob3J0KCksYS5pbnN0cnVjdGlvbnM9W107Zm9yKHZhciB3PTA7dzxhLmluc3RydWN0aW9uTGVuZ3RoO3crPTEpYS5pbnN0cnVjdGlvbnMucHVzaChkLnBhcnNlQnl0ZSgpKX19fWZ1bmN0aW9uIEhiKGEsYil7Zm9yKHZhciBjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF0sZj17eDpiLnhTY2FsZSplLngrYi5zY2FsZTAxKmUueStiLmR4LHk6Yi5zY2FsZTEwKmUueCtiLnlTY2FsZSplLnkrYi5keSxvbkN1cnZlOmUub25DdXJ2ZSxsYXN0UG9pbnRPZkNvbnRvdXI6ZS5sYXN0UG9pbnRPZkNvbnRvdXJ9O2MucHVzaChmKX1yZXR1cm4gY31mdW5jdGlvbiBJYihhKXtmb3IodmFyIGI9W10sYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdO2MucHVzaChlKSxlLmxhc3RQb2ludE9mQ29udG91ciYmKGIucHVzaChjKSxjPVtdKX1yZXR1cm4geGUuYXJndW1lbnQoMD09PWMubGVuZ3RoLFwiVGhlcmUgYXJlIHN0aWxsIHBvaW50cyBsZWZ0IGluIHRoZSBjdXJyZW50IGNvbnRvdXIuXCIpLGJ9ZnVuY3Rpb24gSmIoYSl7dmFyIGI9bmV3IHI7aWYoIWEpcmV0dXJuIGI7Zm9yKHZhciBjPUliKGEpLGQ9MDtkPGMubGVuZ3RoOysrZCl7dmFyIGU9Y1tkXSxmPW51bGwsZz1lW2UubGVuZ3RoLTFdLGg9ZVswXTtpZihnLm9uQ3VydmUpYi5tb3ZlVG8oZy54LGcueSk7ZWxzZSBpZihoLm9uQ3VydmUpYi5tb3ZlVG8oaC54LGgueSk7ZWxzZXt2YXIgaT17eDouNSooZy54K2gueCkseTouNSooZy55K2gueSl9O2IubW92ZVRvKGkueCxpLnkpfWZvcih2YXIgaj0wO2o8ZS5sZW5ndGg7KytqKWlmKGY9ZyxnPWgsaD1lWyhqKzEpJWUubGVuZ3RoXSxnLm9uQ3VydmUpYi5saW5lVG8oZy54LGcueSk7ZWxzZXt2YXIgaz1oO2Yub25DdXJ2ZXx8e3g6LjUqKGcueCtmLngpLHk6LjUqKGcueStmLnkpfSxoLm9uQ3VydmV8fChrPXt4Oi41KihnLngraC54KSx5Oi41KihnLnkraC55KX0pLGIucXVhZHJhdGljQ3VydmVUbyhnLngsZy55LGsueCxrLnkpfWIuY2xvc2VQYXRoKCl9cmV0dXJuIGJ9ZnVuY3Rpb24gS2IoYSxiKXtpZihiLmlzQ29tcG9zaXRlKWZvcih2YXIgYz0wO2M8Yi5jb21wb25lbnRzLmxlbmd0aDtjKz0xKXt2YXIgZD1iLmNvbXBvbmVudHNbY10sZT1hLmdldChkLmdseXBoSW5kZXgpO2lmKGUuZ2V0UGF0aCgpLGUucG9pbnRzKXt2YXIgZj12b2lkIDA7aWYodm9pZCAwPT09ZC5tYXRjaGVkUG9pbnRzKWY9SGIoZS5wb2ludHMsZCk7ZWxzZXtcbmlmKGQubWF0Y2hlZFBvaW50c1swXT5iLnBvaW50cy5sZW5ndGgtMXx8ZC5tYXRjaGVkUG9pbnRzWzFdPmUucG9pbnRzLmxlbmd0aC0xKXRocm93IEVycm9yKFwiTWF0Y2hlZCBwb2ludHMgb3V0IG9mIHJhbmdlIGluIFwiK2IubmFtZSk7dmFyIGc9Yi5wb2ludHNbZC5tYXRjaGVkUG9pbnRzWzBdXSxoPWUucG9pbnRzW2QubWF0Y2hlZFBvaW50c1sxXV0saT17eFNjYWxlOmQueFNjYWxlLHNjYWxlMDE6ZC5zY2FsZTAxLHNjYWxlMTA6ZC5zY2FsZTEwLHlTY2FsZTpkLnlTY2FsZSxkeDowLGR5OjB9O2g9SGIoW2hdLGkpWzBdLGkuZHg9Zy54LWgueCxpLmR5PWcueS1oLnksZj1IYihlLnBvaW50cyxpKX1iLnBvaW50cz1iLnBvaW50cy5jb25jYXQoZil9fXJldHVybiBKYihiLnBvaW50cyl9ZnVuY3Rpb24gTGIoYSxiLGMsZCl7Zm9yKHZhciBlPW5ldyBTZS5HbHlwaFNldChkKSxmPTA7ZjxjLmxlbmd0aC0xO2YrPTEpe3ZhciBnPWNbZl07ZyE9PWNbZisxXT9lLnB1c2goZixTZS50dGZHbHlwaExvYWRlcihkLGYsR2IsYSxiK2csS2IpKTplLnB1c2goZixTZS5nbHlwaExvYWRlcihkLGYpKX1yZXR1cm4gZX1mdW5jdGlvbiBNYihhKXt0aGlzLmZvbnQ9YSx0aGlzLmdldENvbW1hbmRzPWZ1bmN0aW9uKGEpe3JldHVybiB2Zi5nZXRQYXRoKGEpLmNvbW1hbmRzfSx0aGlzLl9mcGdtU3RhdGU9dGhpcy5fcHJlcFN0YXRlPXZvaWQgMCx0aGlzLl9lcnJvclN0YXRlPTB9ZnVuY3Rpb24gTmIoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gT2IoYSl7cmV0dXJuIE1hdGguc2lnbihhKSpNYXRoLnJvdW5kKE1hdGguYWJzKGEpKX1mdW5jdGlvbiBQYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKk1hdGgucm91bmQoTWF0aC5hYnMoMiphKSkvMn1mdW5jdGlvbiBRYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKihNYXRoLnJvdW5kKE1hdGguYWJzKGEpKy41KS0uNSl9ZnVuY3Rpb24gUmIoYSl7cmV0dXJuIE1hdGguc2lnbihhKSpNYXRoLmNlaWwoTWF0aC5hYnMoYSkpfWZ1bmN0aW9uIFNiKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqTWF0aC5mbG9vcihNYXRoLmFicyhhKSl9ZnVuY3Rpb24gVGIoYSxiKXt0aGlzLng9YSx0aGlzLnk9Yix0aGlzLmF4aXM9dm9pZCAwLHRoaXMuc2xvcGU9Yi9hLHRoaXMubm9ybWFsU2xvcGU9LWEvYixPYmplY3QuZnJlZXplKHRoaXMpfWZ1bmN0aW9uIFViKGEsYil7dmFyIGM9TWF0aC5zcXJ0KGEqYStiKmIpO3JldHVybiBhLz1jLGIvPWMsMT09PWEmJjA9PT1iP3hmOjA9PT1hJiYxPT09Yj95ZjpuZXcgVGIoYSxiKX1mdW5jdGlvbiBWYihhLGIsYyxkKXt0aGlzLng9dGhpcy54bz1NYXRoLnJvdW5kKDY0KmEpLzY0LHRoaXMueT10aGlzLnlvPU1hdGgucm91bmQoNjQqYikvNjQsdGhpcy5sYXN0UG9pbnRPZkNvbnRvdXI9Yyx0aGlzLm9uQ3VydmU9ZCx0aGlzLnByZXZQb2ludE9uQ29udG91cj12b2lkIDAsdGhpcy5uZXh0UG9pbnRPbkNvbnRvdXI9dm9pZCAwLHRoaXMueFRvdWNoZWQ9ITEsdGhpcy55VG91Y2hlZD0hMSxPYmplY3QucHJldmVudEV4dGVuc2lvbnModGhpcyl9ZnVuY3Rpb24gV2IoYSxiKXtzd2l0Y2godGhpcy5lbnY9YSx0aGlzLnN0YWNrPVtdLHRoaXMucHJvZz1iLGEpe2Nhc2VcImdseWZcIjp0aGlzLnpwMD10aGlzLnpwMT10aGlzLnpwMj0xLHRoaXMucnAwPXRoaXMucnAxPXRoaXMucnAyPTA7Y2FzZVwicHJlcFwiOnRoaXMuZnY9dGhpcy5wdj10aGlzLmRwdj14Zix0aGlzLnJvdW5kPU9ifX1mdW5jdGlvbiBYYihhKXtmb3IodmFyIGI9YS50Wm9uZT1uZXcgQXJyYXkoYS5nWm9uZS5sZW5ndGgpLGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdPW5ldyBWYigwLDApfWZ1bmN0aW9uIFliKGEsYil7dmFyIGMsZD1hLnByb2csZT1hLmlwLGY9MTtkb3tpZig4OD09PShjPWRbKytlXSkpZisrO2Vsc2UgaWYoODk9PT1jKWYtLTtlbHNlIGlmKDY0PT09YyllKz1kW2UrMV0rMTtlbHNlIGlmKDY1PT09YyllKz0yKmRbZSsxXSsxO2Vsc2UgaWYoYz49MTc2JiZjPD0xODMpZSs9Yy0xNzYrMTtlbHNlIGlmKGM+PTE4NCYmYzw9MTkxKWUrPTIqKGMtMTg0KzEpO2Vsc2UgaWYoYiYmMT09PWYmJjI3PT09YylicmVha313aGlsZShmPjApO2EuaXA9ZX1mdW5jdGlvbiBaYihiLGMpe2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNWVENBW1wiK2IuYXhpcytcIl1cIiksYy5mdj1jLnB2PWMuZHB2PWJ9ZnVuY3Rpb24gJGIoYixjKXthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTUFZUQ0FbXCIrYi5heGlzK1wiXVwiKSxjLnB2PWMuZHB2PWJ9ZnVuY3Rpb24gX2IoYixjKXthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTRlZUQ0FbXCIrYi5heGlzK1wiXVwiKSxjLmZ2PWJ9ZnVuY3Rpb24gYWMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnoyW2VdLGg9Yy56MVtmXTthLkRFQlVHJiZjb25zb2xlLmxvZyhcIlNQVlRMW1wiK2IrXCJdXCIsZSxmKTt2YXIgaSxqO2I/KGk9Zy55LWgueSxqPWgueC1nLngpOihpPWgueC1nLngsaj1oLnktZy55KSxjLnB2PWMuZHB2PVViKGksail9ZnVuY3Rpb24gYmMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnoyW2VdLGg9Yy56MVtmXTthLkRFQlVHJiZjb25zb2xlLmxvZyhcIlNGVlRMW1wiK2IrXCJdXCIsZSxmKTt2YXIgaSxqO2I/KGk9Zy55LWgueSxqPWgueC1nLngpOihpPWgueC1nLngsaj1oLnktZy55KSxjLmZ2PVViKGksail9ZnVuY3Rpb24gY2MoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNQVkZTW11cIixkLGUpLGIucHY9Yi5kcHY9VWIoZSxkKX1mdW5jdGlvbiBkYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1BWRlNbXVwiLGQsZSksYi5mdj1VYihlLGQpfWZ1bmN0aW9uIGVjKGIpe3ZhciBjPWIuc3RhY2ssZD1iLnB2O2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdQVltdXCIpLGMucHVzaCgxNjM4NCpkLngpLGMucHVzaCgxNjM4NCpkLnkpfWZ1bmN0aW9uIGZjKGIpe3ZhciBjPWIuc3RhY2ssZD1iLmZ2O2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdGVltdXCIpLGMucHVzaCgxNjM4NCpkLngpLGMucHVzaCgxNjM4NCpkLnkpfWZ1bmN0aW9uIGdjKGIpe2IuZnY9Yi5wdixhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTRlZUUFZbXVwiKX1mdW5jdGlvbiBoYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCksZj1jLnBvcCgpLGc9Yy5wb3AoKSxoPWMucG9wKCksaT1iLnowLGo9Yi56MSxrPWlbZF0sbD1pW2VdLG09altmXSxuPWpbZ10sbz1iLnoyW2hdO2EuREVCVUcmJmNvbnNvbGUubG9nKFwiSVNFQ1RbXSwgXCIsZCxlLGYsZyxoKTt2YXIgcD1rLngscT1rLnkscj1sLngscz1sLnksdD1tLngsdT1tLnksdj1uLngsdz1uLnkseD0ocC1yKSoodS13KS0ocS1zKSoodC12KSx5PXAqcy1xKnIsej10KnctdSp2O28ueD0oeSoodC12KS16KihwLXIpKS94LG8ueT0oeSoodS13KS16KihxLXMpKS94fWZ1bmN0aW9uIGljKGIpe2IucnAwPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JQMFtdXCIsYi5ycDApfWZ1bmN0aW9uIGpjKGIpe2IucnAxPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JQMVtdXCIsYi5ycDEpfWZ1bmN0aW9uIGtjKGIpe2IucnAyPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JQMltdXCIsYi5ycDIpfWZ1bmN0aW9uIGxjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUDBbXVwiLGMpLGIuenAwPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejA9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56MD1iLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lIHBvaW50ZXJcIil9fWZ1bmN0aW9uIG1jKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUDFbXVwiLGMpLGIuenAxPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejE9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56MT1iLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lIHBvaW50ZXJcIil9fWZ1bmN0aW9uIG5jKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUDJbXVwiLGMpLGIuenAyPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejI9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56Mj1iLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lIHBvaW50ZXJcIil9fWZ1bmN0aW9uIG9jKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUFNbXVwiLGMpLGIuenAwPWIuenAxPWIuenAyPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejA9Yi56MT1iLnoyPWIudFpvbmU7YnJlYWs7Y2FzZSAxOmIuejA9Yi56MT1iLnoyPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gcGMoYil7Yi5sb29wPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0xPT1BbXVwiLGIubG9vcCl9ZnVuY3Rpb24gcWMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlRHW11cIiksYi5yb3VuZD1PYn1mdW5jdGlvbiByYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSVEhHW11cIiksYi5yb3VuZD1RYn1mdW5jdGlvbiBzYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNNRFtdXCIsYyksYi5taW5EaXM9Yy82NH1mdW5jdGlvbiB0YyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFTFNFW11cIiksWWIoYiwhMSl9ZnVuY3Rpb24gdWMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJKTVBSW11cIixjKSxiLmlwKz1jLTF9ZnVuY3Rpb24gdmMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTQ1ZUQ0lbXVwiLGMpLGIuY3ZDdXRJbj1jLzY0fWZ1bmN0aW9uIHdjKGIpe3ZhciBjPWIuc3RhY2s7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRFVQW11cIiksYy5wdXNoKGNbYy5sZW5ndGgtMV0pfWZ1bmN0aW9uIHhjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlBPUFtdXCIpLGIuc3RhY2sucG9wKCl9ZnVuY3Rpb24geWMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQ0xFQVJbXVwiKSxiLnN0YWNrLmxlbmd0aD0wfWZ1bmN0aW9uIHpjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTV0FQW11cIiksYy5wdXNoKGQpLGMucHVzaChlKX1mdW5jdGlvbiBBYyhiKXt2YXIgYz1iLnN0YWNrO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkRFUFRIW11cIiksYy5wdXNoKGMubGVuZ3RoKX1mdW5jdGlvbiBCYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTE9PUENBTExbXVwiLGQsZSk7dmFyIGY9Yi5pcCxnPWIucHJvZztiLnByb2c9Yi5mdW5jc1tkXTtmb3IodmFyIGg9MDtoPGU7aCsrKXNmKGIpLGEuREVCVUcmJmNvbnNvbGUubG9nKCsrYi5zdGVwLGgrMTxlP1wibmV4dCBsb29wY2FsbFwiOlwiZG9uZSBsb29wY2FsbFwiLGgpO2IuaXA9ZixiLnByb2c9Z31mdW5jdGlvbiBDYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkNBTExbXVwiLGMpO3ZhciBkPWIuaXAsZT1iLnByb2c7Yi5wcm9nPWIuZnVuY3NbY10sc2YoYiksYi5pcD1kLGIucHJvZz1lLGEuREVCVUcmJmNvbnNvbGUubG9nKCsrYi5zdGVwLFwicmV0dXJuaW5nIGZyb21cIixjKX1mdW5jdGlvbiBEYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJDSU5ERVhbXVwiLGQpLGMucHVzaChjW2MubGVuZ3RoLWRdKX1mdW5jdGlvbiBFYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNSU5ERVhbXVwiLGQpLGMucHVzaChjLnNwbGljZShjLmxlbmd0aC1kLDEpWzBdKX1mdW5jdGlvbiBGYyhiKXtpZihcImZwZ21cIiE9PWIuZW52KXRocm93IG5ldyBFcnJvcihcIkZERUYgbm90IGFsbG93ZWQgaGVyZVwiKTt2YXIgYz1iLnN0YWNrLGQ9Yi5wcm9nLGU9Yi5pcCxmPWMucG9wKCksZz1lO2ZvcihhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJGREVGW11cIixmKTs0NSE9PWRbKytlXTspO2IuaXA9ZSxiLmZ1bmNzW2ZdPWQuc2xpY2UoZysxLGUpfWZ1bmN0aW9uIEdjKGIsYyl7dmFyIGQ9Yy5zdGFjay5wb3AoKSxlPWMuejBbZF0sZj1jLmZ2LGc9Yy5wdjthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNREFQW1wiK2IrXCJdXCIsZCk7dmFyIGg9Zy5kaXN0YW5jZShlLHpmKTtiJiYoaD1jLnJvdW5kKGgpKSxmLnNldFJlbGF0aXZlKGUsemYsaCxnKSxmLnRvdWNoKGUpLGMucnAwPWMucnAxPWR9ZnVuY3Rpb24gSGMoYixjKXt2YXIgZCxlLGYsZz1jLnoyLGg9Zy5sZW5ndGgtMjthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJJVVBbXCIrYi5heGlzK1wiXVwiKTtmb3IodmFyIGk9MDtpPGg7aSsrKWQ9Z1tpXSxiLnRvdWNoZWQoZCl8fChlPWQucHJldlRvdWNoZWQoYikpIT09ZCYmKGY9ZC5uZXh0VG91Y2hlZChiKSxlPT09ZiYmYi5zZXRSZWxhdGl2ZShkLGQsYi5kaXN0YW5jZShlLGUsITEsITApLGIsITApLGIuaW50ZXJwb2xhdGUoZCxlLGYsYikpfWZ1bmN0aW9uIEljKGIsYyl7Zm9yKHZhciBkPWMuc3RhY2ssZT1iP2MucnAxOmMucnAyLGY9KGI/Yy56MDpjLnoxKVtlXSxnPWMuZnYsaD1jLnB2LGk9Yy5sb29wLGo9Yy56MjtpLS07KXt2YXIgaz1kLnBvcCgpLGw9altrXSxtPWguZGlzdGFuY2UoZixmLCExLCEwKTtnLnNldFJlbGF0aXZlKGwsbCxtLGgpLGcudG91Y2gobCksYS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLChjLmxvb3A+MT9cImxvb3AgXCIrKGMubG9vcC1pKStcIjogXCI6XCJcIikrXCJTSFBbXCIrKGI/XCJycDFcIjpcInJwMlwiKStcIl1cIixrKX1jLmxvb3A9MX1mdW5jdGlvbiBKYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1iP2MucnAxOmMucnAyLGY9KGI/Yy56MDpjLnoxKVtlXSxnPWMuZnYsaD1jLnB2LGk9ZC5wb3AoKSxqPWMuejJbYy5jb250b3Vyc1tpXV0saz1qO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNIQ1tcIitiK1wiXVwiLGkpO3ZhciBsPWguZGlzdGFuY2UoZixmLCExLCEwKTtkb3trIT09ZiYmZy5zZXRSZWxhdGl2ZShrLGssbCxoKSxrPWsubmV4dFBvaW50T25Db250b3VyfXdoaWxlKGshPT1qKX1mdW5jdGlvbiBLYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1iP2MucnAxOmMucnAyLGY9KGI/Yy56MDpjLnoxKVtlXSxnPWMuZnYsaD1jLnB2LGk9ZC5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTSFpbXCIrYitcIl1cIixpKTt2YXIgajtzd2l0Y2goaSl7Y2FzZSAwOmo9Yy50Wm9uZTticmVhaztjYXNlIDE6aj1jLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lXCIpfWZvcih2YXIgayxsPWguZGlzdGFuY2UoZixmLCExLCEwKSxtPWoubGVuZ3RoLTIsbj0wO248bTtuKyspaz1qW25dLGcuc2V0UmVsYXRpdmUoayxrLGwsaCl9ZnVuY3Rpb24gTGMoYil7Zm9yKHZhciBjPWIuc3RhY2ssZD1iLmxvb3AsZT1iLmZ2LGY9Yy5wb3AoKS82NCxnPWIuejI7ZC0tOyl7dmFyIGg9Yy5wb3AoKSxpPWdbaF07YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLChiLmxvb3A+MT9cImxvb3AgXCIrKGIubG9vcC1kKStcIjogXCI6XCJcIikrXCJTSFBJWFtdXCIsaCxmKSxlLnNldFJlbGF0aXZlKGksaSxmKSxlLnRvdWNoKGkpfWIubG9vcD0xfWZ1bmN0aW9uIE1jKGIpe2Zvcih2YXIgYz1iLnN0YWNrLGQ9Yi5ycDEsZT1iLnJwMixmPWIubG9vcCxnPWIuejBbZF0saD1iLnoxW2VdLGk9Yi5mdixqPWIuZHB2LGs9Yi56MjtmLS07KXt2YXIgbD1jLnBvcCgpLG09a1tsXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsKGIubG9vcD4xP1wibG9vcCBcIisoYi5sb29wLWYpK1wiOiBcIjpcIlwiKStcIklQW11cIixsLGQsXCI8LT5cIixlKSxpLmludGVycG9sYXRlKG0sZyxoLGopLGkudG91Y2gobSl9Yi5sb29wPTF9ZnVuY3Rpb24gTmMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKS82NCxmPWQucG9wKCksZz1jLnoxW2ZdLGg9Yy56MFtjLnJwMF0saT1jLmZ2LGo9Yy5wdjtpLnNldFJlbGF0aXZlKGcsaCxlLGopLGkudG91Y2goZyksYS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiTVNJUlBbXCIrYitcIl1cIixlLGYpLGMucnAxPWMucnAwLGMucnAyPWYsYiYmKGMucnAwPWYpfWZ1bmN0aW9uIE9jKGIpe2Zvcih2YXIgYz1iLnN0YWNrLGQ9Yi5ycDAsZT1iLnowW2RdLGY9Yi5sb29wLGc9Yi5mdixoPWIucHYsaT1iLnoxO2YtLTspe3ZhciBqPWMucG9wKCksaz1pW2pdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCwoYi5sb29wPjE/XCJsb29wIFwiKyhiLmxvb3AtZikrXCI6IFwiOlwiXCIpK1wiQUxJR05SUFtdXCIsaiksZy5zZXRSZWxhdGl2ZShrLGUsMCxoKSxnLnRvdWNoKGspfWIubG9vcD0xfWZ1bmN0aW9uIFBjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJUREdbXVwiKSxiLnJvdW5kPVBifWZ1bmN0aW9uIFFjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MFtmXSxoPWMuZnYsaT1jLnB2LGo9Yy5jdnRbZV07YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiTUlBUFtcIitiK1wiXVwiLGUsXCIoXCIsaixcIilcIixmKTt2YXIgaz1pLmRpc3RhbmNlKGcsemYpO2ImJihNYXRoLmFicyhrLWopPGMuY3ZDdXRJbiYmKGs9aiksaz1jLnJvdW5kKGspKSxoLnNldFJlbGF0aXZlKGcsemYsayxpKSwwPT09Yy56cDAmJihnLnhvPWcueCxnLnlvPWcueSksaC50b3VjaChnKSxjLnJwMD1jLnJwMT1mfWZ1bmN0aW9uIFJjKGIpe3ZhciBjPWIucHJvZyxkPWIuaXAsZT1iLnN0YWNrLGY9Y1srK2RdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5QVVNIQltdXCIsZik7Zm9yKHZhciBnPTA7ZzxmO2crKyllLnB1c2goY1srK2RdKTtiLmlwPWR9ZnVuY3Rpb24gU2MoYil7dmFyIGM9Yi5pcCxkPWIucHJvZyxlPWIuc3RhY2ssZj1kWysrY107YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTlBVU0hXW11cIixmKTtmb3IodmFyIGc9MDtnPGY7ZysrKXt2YXIgaD1kWysrY108PDh8ZFsrK2NdOzMyNzY4JmgmJihoPS0oMSsoNjU1MzVeaCkpKSxlLnB1c2goaCl9Yi5pcD1jfWZ1bmN0aW9uIFRjKGIpe3ZhciBjPWIuc3RhY2ssZD1iLnN0b3JlO2R8fChkPWIuc3RvcmU9W10pO3ZhciBlPWMucG9wKCksZj1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIldTXCIsZSxmKSxkW2ZdPWV9ZnVuY3Rpb24gVWMoYil7dmFyIGM9Yi5zdGFjayxkPWIuc3RvcmUsZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJTXCIsZSk7dmFyIGY9ZCYmZFtlXXx8MDtjLnB1c2goZil9ZnVuY3Rpb24gVmMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIldDVlRQXCIsZCxlKSxiLmN2dFtlXT1kLzY0fWZ1bmN0aW9uIFdjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJDVlRcIixkKSxjLnB1c2goNjQqYi5jdnRbZF0pfWZ1bmN0aW9uIFhjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1jLnoyW2VdO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIkdDW1wiK2IrXCJdXCIsZSksZC5wdXNoKDY0KmMuZHB2LmRpc3RhbmNlKGYsemYsYiwhMSkpfWZ1bmN0aW9uIFljKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MVtlXSxoPWMuejBbZl0saT1jLmRwdi5kaXN0YW5jZShoLGcsYixiKTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNRFtcIitiK1wiXVwiLGUsZixcIi0+XCIsaSksYy5zdGFjay5wdXNoKE1hdGgucm91bmQoNjQqaSkpfWZ1bmN0aW9uIFpjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk1QUEVNW11cIiksYi5zdGFjay5wdXNoKGIucHBlbSl9ZnVuY3Rpb24gJGMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRkxJUE9OW11cIiksYi5hdXRvRmxpcD0hMH1mdW5jdGlvbiBfYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTFRbXVwiLGQsZSksYy5wdXNoKGU8ZD8xOjApfWZ1bmN0aW9uIGFkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJMVEVRW11cIixkLGUpLGMucHVzaChlPD1kPzE6MCl9ZnVuY3Rpb24gYmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdUW11cIixkLGUpLGMucHVzaChlPmQ/MTowKX1mdW5jdGlvbiBjZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR1RFUVtdXCIsZCxlKSxjLnB1c2goZT49ZD8xOjApfWZ1bmN0aW9uIGRkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFUVtdXCIsZCxlKSxjLnB1c2goZD09PWU/MTowKX1mdW5jdGlvbiBlZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTkVRW11cIixkLGUpLGMucHVzaChkIT09ZT8xOjApfWZ1bmN0aW9uIGZkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk9ERFtdXCIsZCksYy5wdXNoKE1hdGgudHJ1bmMoZCklMj8xOjApfWZ1bmN0aW9uIGdkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVWRU5bXVwiLGQpLGMucHVzaChNYXRoLnRydW5jKGQpJTI/MDoxKX1mdW5jdGlvbiBoZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIklGW11cIixjKSxjfHwoWWIoYiwhMCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRUlGW11cIikpfWZ1bmN0aW9uIGlkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVJRltdXCIpfWZ1bmN0aW9uIGpkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJBTkRbXVwiLGQsZSksYy5wdXNoKGQmJmU/MTowKX1mdW5jdGlvbiBrZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiT1JbXVwiLGQsZSksYy5wdXNoKGR8fGU/MTowKX1mdW5jdGlvbiBsZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJOT1RbXVwiLGQpLGMucHVzaChkPzA6MSl9ZnVuY3Rpb24gbWQoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWMuZnYsZz1jLnB2LGg9Yy5wcGVtLGk9Yy5kZWx0YUJhc2UrMTYqKGItMSksaj1jLmRlbHRhU2hpZnQsaz1jLnowO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIkRFTFRBUFtcIitiK1wiXVwiLGUsZCk7Zm9yKHZhciBsPTA7bDxlO2wrKyl7dmFyIG09ZC5wb3AoKSxuPWQucG9wKCk7aWYoaSsoKDI0MCZuKT4+NCk9PT1oKXt2YXIgbz0oMTUmbiktODtvPj0wJiZvKyssYS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFQRklYXCIsbSxcImJ5XCIsbypqKTt2YXIgcD1rW21dO2Yuc2V0UmVsYXRpdmUocCxwLG8qaixnKX19fWZ1bmN0aW9uIG5kKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNEQltdXCIsZCksYi5kZWx0YUJhc2U9ZH1mdW5jdGlvbiBvZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTRFNbXVwiLGQpLGIuZGVsdGFTaGlmdD1NYXRoLnBvdyguNSxkKX1mdW5jdGlvbiBwZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQUREW11cIixkLGUpLGMucHVzaChlK2QpfWZ1bmN0aW9uIHFkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTVUJbXVwiLGQsZSksYy5wdXNoKGUtZCl9ZnVuY3Rpb24gcmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkRJVltdXCIsZCxlKSxjLnB1c2goNjQqZS9kKX1mdW5jdGlvbiBzZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTVVMW11cIixkLGUpLGMucHVzaChlKmQvNjQpfWZ1bmN0aW9uIHRkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkFCU1tdXCIsZCksYy5wdXNoKE1hdGguYWJzKGQpKX1mdW5jdGlvbiB1ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJORUdbXVwiLGQpLGMucHVzaCgtZCl9ZnVuY3Rpb24gdmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRkxPT1JbXVwiLGQpLGMucHVzaCg2NCpNYXRoLmZsb29yKGQvNjQpKX1mdW5jdGlvbiB3ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJDRUlMSU5HW11cIixkKSxjLnB1c2goNjQqTWF0aC5jZWlsKGQvNjQpKX1mdW5jdGlvbiB4ZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlJPVU5EW11cIiksZC5wdXNoKDY0KmMucm91bmQoZS82NCkpfWZ1bmN0aW9uIHlkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJXQ1ZURltdXCIsZCxlKSxiLmN2dFtlXT1kKmIucHBlbS9iLmZvbnQudW5pdHNQZXJFbX1mdW5jdGlvbiB6ZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9Yy5wcGVtLGc9Yy5kZWx0YUJhc2UrMTYqKGItMSksaD1jLmRlbHRhU2hpZnQ7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFDW1wiK2IrXCJdXCIsZSxkKTtmb3IodmFyIGk9MDtpPGU7aSsrKXt2YXIgaj1kLnBvcCgpLGs9ZC5wb3AoKTtpZihnKygoMjQwJmspPj40KT09PWYpe3ZhciBsPSgxNSZrKS04O2w+PTAmJmwrKzt2YXIgbT1sKmg7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFDRklYXCIsaixcImJ5XCIsbSksYy5jdnRbal0rPW19fX1mdW5jdGlvbiBBZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNST1VORFtdXCIsYyksYi5yb3VuZD13Zjt2YXIgZDtzd2l0Y2goMTkyJmMpe2Nhc2UgMDpkPS41O2JyZWFrO2Nhc2UgNjQ6ZD0xO2JyZWFrO2Nhc2UgMTI4OmQ9MjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgU1JPVU5EIHZhbHVlXCIpfXN3aXRjaChiLnNyUGVyaW9kPWQsNDgmYyl7Y2FzZSAwOmIuc3JQaGFzZT0wO2JyZWFrO2Nhc2UgMTY6Yi5zclBoYXNlPS4yNSpkO2JyZWFrO2Nhc2UgMzI6Yi5zclBoYXNlPS41KmQ7YnJlYWs7Y2FzZSA0ODpiLnNyUGhhc2U9Ljc1KmQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFNST1VORCB2YWx1ZVwiKX1jJj0xNSxiLnNyVGhyZXNob2xkPTA9PT1jPzA6KGMvOC0uNSkqZH1mdW5jdGlvbiBCZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlM0NVJPVU5EW11cIixjKSxiLnJvdW5kPXdmO3ZhciBkO3N3aXRjaCgxOTImYyl7Y2FzZSAwOmQ9TWF0aC5zcXJ0KDIpLzI7YnJlYWs7Y2FzZSA2NDpkPU1hdGguc3FydCgyKTticmVhaztjYXNlIDEyODpkPTIqTWF0aC5zcXJ0KDIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBTNDVST1VORCB2YWx1ZVwiKX1zd2l0Y2goYi5zclBlcmlvZD1kLDQ4JmMpe2Nhc2UgMDpiLnNyUGhhc2U9MDticmVhaztjYXNlIDE2OmIuc3JQaGFzZT0uMjUqZDticmVhaztjYXNlIDMyOmIuc3JQaGFzZT0uNSpkO2JyZWFrO2Nhc2UgNDg6Yi5zclBoYXNlPS43NSpkO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBTNDVST1VORCB2YWx1ZVwiKX1jJj0xNSxiLnNyVGhyZXNob2xkPTA9PT1jPzA6KGMvOC0uNSkqZH1mdW5jdGlvbiBDZChiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJST0ZGW11cIiksYi5yb3VuZD1OYn1mdW5jdGlvbiBEZChiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSVVRHW11cIiksYi5yb3VuZD1SYn1mdW5jdGlvbiBFZChiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSRFRHW11cIiksYi5yb3VuZD1TYn1mdW5jdGlvbiBGZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNDQU5DVFJMW11cIixjKX1mdW5jdGlvbiBHZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejJbZV0saD1jLnoxW2ZdO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNEUFZUTFtcIitiK1wiXVwiLGUsZik7dmFyIGksajtiPyhpPWcueS1oLnksaj1oLngtZy54KTooaT1oLngtZy54LGo9aC55LWcueSksYy5kcHY9VWIoaSxqKX1mdW5jdGlvbiBIZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPTA7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR0VUSU5GT1tdXCIsZCksMSZkJiYoZT0zNSksMzImZCYmKGV8PTQwOTYpLGMucHVzaChlKX1mdW5jdGlvbiBJZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCksZj1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJPTExbXVwiKSxjLnB1c2goZSksYy5wdXNoKGQpLGMucHVzaChmKX1mdW5jdGlvbiBKZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTUFYW11cIixkLGUpLGMucHVzaChNYXRoLm1heChlLGQpKX1mdW5jdGlvbiBLZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTUlOW11cIixkLGUpLGMucHVzaChNYXRoLm1pbihlLGQpKX1mdW5jdGlvbiBMZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNDQU5UWVBFW11cIixjKX1mdW5jdGlvbiBNZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpLGQ9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiSU5TVENUUkxbXVwiLGMsZCksYyl7Y2FzZSAxOnJldHVybiB2b2lkKGIuaW5oaWJpdEdyaWRGaXQ9ISFkKTtjYXNlIDI6cmV0dXJuIHZvaWQoYi5pZ25vcmVDdnQ9ISFkKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgSU5TVENUUkxbXSBzZWxlY3RvclwiKX19ZnVuY3Rpb24gTmQoYixjKXt2YXIgZD1jLnN0YWNrLGU9Yy5wcm9nLGY9Yy5pcDthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJQVVNIQltcIitiK1wiXVwiKTtmb3IodmFyIGc9MDtnPGI7ZysrKWQucHVzaChlWysrZl0pO2MuaXA9Zn1mdW5jdGlvbiBPZChiLGMpe3ZhciBkPWMuaXAsZT1jLnByb2csZj1jLnN0YWNrO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuaXAsXCJQVVNIV1tcIitiK1wiXVwiKTtmb3IodmFyIGc9MDtnPGI7ZysrKXt2YXIgaD1lWysrZF08PDh8ZVsrK2RdOzMyNzY4JmgmJihoPS0oMSsoNjU1MzVeaCkpKSxmLnB1c2goaCl9Yy5pcD1kfWZ1bmN0aW9uIFBkKGIsYyxkLGUsZixnKXt2YXIgaCxpLGosayxsPWcuc3RhY2ssbT1iJiZsLnBvcCgpLG49bC5wb3AoKSxvPWcucnAwLHA9Zy56MFtvXSxxPWcuejFbbl0scj1nLm1pbkRpcyxzPWcuZnYsdD1nLmRwdjtpPWg9dC5kaXN0YW5jZShxLHAsITAsITApLGo9aT49MD8xOi0xLGk9TWF0aC5hYnMoaSksYiYmKGs9Zy5jdnRbbV0sZSYmTWF0aC5hYnMoaS1rKTxnLmN2Q3V0SW4mJihpPWspKSxkJiZpPHImJihpPXIpLGUmJihpPWcucm91bmQoaSkpLHMuc2V0UmVsYXRpdmUocSxwLGoqaSx0KSxzLnRvdWNoKHEpLGEuREVCVUcmJmNvbnNvbGUubG9nKGcuc3RlcCwoYj9cIk1JUlBbXCI6XCJNRFJQW1wiKSsoYz9cIk1cIjpcIm1cIikrKGQ/XCI+XCI6XCJfXCIpKyhlP1wiUlwiOlwiX1wiKSsoMD09PWY/XCJHclwiOjE9PT1mP1wiQmxcIjoyPT09Zj9cIldoXCI6XCJcIikrXCJdXCIsYj9tK1wiKFwiK2cuY3Z0W21dK1wiLFwiK2srXCIpXCI6XCJcIixuLFwiKGQgPVwiLGgsXCItPlwiLGoqaSxcIilcIiksZy5ycDE9Zy5ycDAsZy5ycDI9bixjJiYoZy5ycDA9bil9ZnVuY3Rpb24gUWQoYSl7YT1hfHx7fSxhLmVtcHR5fHwoRWIoYS5mYW1pbHlOYW1lLFwiV2hlbiBjcmVhdGluZyBhIG5ldyBGb250IG9iamVjdCwgZmFtaWx5TmFtZSBpcyByZXF1aXJlZC5cIiksRWIoYS5zdHlsZU5hbWUsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBzdHlsZU5hbWUgaXMgcmVxdWlyZWQuXCIpLEViKGEudW5pdHNQZXJFbSxcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIHVuaXRzUGVyRW0gaXMgcmVxdWlyZWQuXCIpLEViKGEuYXNjZW5kZXIsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBhc2NlbmRlciBpcyByZXF1aXJlZC5cIiksRWIoYS5kZXNjZW5kZXIsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBkZXNjZW5kZXIgaXMgcmVxdWlyZWQuXCIpLEViKGEuZGVzY2VuZGVyPDAsXCJEZXNjZW5kZXIgc2hvdWxkIGJlIG5lZ2F0aXZlIChlLmcuIC01MTIpLlwiKSx0aGlzLm5hbWVzPXtmb250RmFtaWx5OntlbjphLmZhbWlseU5hbWV8fFwiIFwifSxmb250U3ViZmFtaWx5OntlbjphLnN0eWxlTmFtZXx8XCIgXCJ9LGZ1bGxOYW1lOntlbjphLmZ1bGxOYW1lfHxhLmZhbWlseU5hbWUrXCIgXCIrYS5zdHlsZU5hbWV9LHBvc3RTY3JpcHROYW1lOntlbjphLnBvc3RTY3JpcHROYW1lfHwoYS5mYW1pbHlOYW1lK2Euc3R5bGVOYW1lKS5yZXBsYWNlKC9cXHMvZyxcIlwiKX0sZGVzaWduZXI6e2VuOmEuZGVzaWduZXJ8fFwiIFwifSxkZXNpZ25lclVSTDp7ZW46YS5kZXNpZ25lclVSTHx8XCIgXCJ9LG1hbnVmYWN0dXJlcjp7ZW46YS5tYW51ZmFjdHVyZXJ8fFwiIFwifSxtYW51ZmFjdHVyZXJVUkw6e2VuOmEubWFudWZhY3R1cmVyVVJMfHxcIiBcIn0sbGljZW5zZTp7ZW46YS5saWNlbnNlfHxcIiBcIn0sbGljZW5zZVVSTDp7ZW46YS5saWNlbnNlVVJMfHxcIiBcIn0sdmVyc2lvbjp7ZW46YS52ZXJzaW9ufHxcIlZlcnNpb24gMC4xXCJ9LGRlc2NyaXB0aW9uOntlbjphLmRlc2NyaXB0aW9ufHxcIiBcIn0sY29weXJpZ2h0OntlbjphLmNvcHlyaWdodHx8XCIgXCJ9LHRyYWRlbWFyazp7ZW46YS50cmFkZW1hcmt8fFwiIFwifX0sdGhpcy51bml0c1BlckVtPWEudW5pdHNQZXJFbXx8MWUzLHRoaXMuYXNjZW5kZXI9YS5hc2NlbmRlcix0aGlzLmRlc2NlbmRlcj1hLmRlc2NlbmRlcix0aGlzLmNyZWF0ZWRUaW1lc3RhbXA9YS5jcmVhdGVkVGltZXN0YW1wLHRoaXMudGFibGVzPXtvczI6e3VzV2VpZ2h0Q2xhc3M6YS53ZWlnaHRDbGFzc3x8dGhpcy51c1dlaWdodENsYXNzZXMuTUVESVVNLHVzV2lkdGhDbGFzczphLndpZHRoQ2xhc3N8fHRoaXMudXNXaWR0aENsYXNzZXMuTUVESVVNLGZzU2VsZWN0aW9uOmEuZnNTZWxlY3Rpb258fHRoaXMuZnNTZWxlY3Rpb25WYWx1ZXMuUkVHVUxBUn19KSx0aGlzLnN1cHBvcnRlZD0hMCx0aGlzLmdseXBocz1uZXcgU2UuR2x5cGhTZXQodGhpcyxhLmdseXBoc3x8W10pLHRoaXMuZW5jb2Rpbmc9bmV3IFgodGhpcyksdGhpcy5wb3NpdGlvbj1uZXcgeGIodGhpcyksdGhpcy5zdWJzdGl0dXRpb249bmV3IHliKHRoaXMpLHRoaXMudGFibGVzPXRoaXMudGFibGVzfHx7fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImhpbnRpbmdcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hpbnRpbmc/dGhpcy5faGludGluZzpcInRydWV0eXBlXCI9PT10aGlzLm91dGxpbmVzRm9ybWF0P3RoaXMuX2hpbnRpbmc9bmV3IE1iKHRoaXMpOnZvaWQgMH19KX1mdW5jdGlvbiBSZChhLGIpe3ZhciBjPUpTT04uc3RyaW5naWZ5KGEpLGQ9MjU2O2Zvcih2YXIgZSBpbiBiKXt2YXIgZj1wYXJzZUludChlKTtpZihmJiYhKGY8MjU2KSl7aWYoSlNPTi5zdHJpbmdpZnkoYltlXSk9PT1jKXJldHVybiBmO2Q8PWYmJihkPWYrMSl9fXJldHVybiBiW2RdPWEsZH1mdW5jdGlvbiBTZChhLGIsYyl7dmFyIGQ9UmQoYi5uYW1lLGMpO3JldHVyblt7bmFtZTpcInRhZ19cIithLHR5cGU6XCJUQUdcIix2YWx1ZTpiLnRhZ30se25hbWU6XCJtaW5WYWx1ZV9cIithLHR5cGU6XCJGSVhFRFwiLHZhbHVlOmIubWluVmFsdWU8PDE2fSx7bmFtZTpcImRlZmF1bHRWYWx1ZV9cIithLHR5cGU6XCJGSVhFRFwiLHZhbHVlOmIuZGVmYXVsdFZhbHVlPDwxNn0se25hbWU6XCJtYXhWYWx1ZV9cIithLHR5cGU6XCJGSVhFRFwiLHZhbHVlOmIubWF4VmFsdWU8PDE2fSx7bmFtZTpcImZsYWdzX1wiK2EsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibmFtZUlEX1wiK2EsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmR9XX1mdW5jdGlvbiBUZChhLGIsYyl7dmFyIGQ9e30sZT1uZXcgTGUuUGFyc2VyKGEsYik7cmV0dXJuIGQudGFnPWUucGFyc2VUYWcoKSxkLm1pblZhbHVlPWUucGFyc2VGaXhlZCgpLGQuZGVmYXVsdFZhbHVlPWUucGFyc2VGaXhlZCgpLGQubWF4VmFsdWU9ZS5wYXJzZUZpeGVkKCksZS5za2lwKFwidVNob3J0XCIsMSksZC5uYW1lPWNbZS5wYXJzZVVTaG9ydCgpXXx8e30sZH1mdW5jdGlvbiBVZChhLGIsYyxkKXtmb3IodmFyIGU9UmQoYi5uYW1lLGQpLGY9W3tuYW1lOlwibmFtZUlEX1wiK2EsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmV9LHtuYW1lOlwiZmxhZ3NfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dLGc9MDtnPGMubGVuZ3RoOysrZyl7dmFyIGg9Y1tnXS50YWc7Zi5wdXNoKHtuYW1lOlwiYXhpc19cIithK1wiIFwiK2gsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5jb29yZGluYXRlc1toXTw8MTZ9KX1yZXR1cm4gZn1mdW5jdGlvbiBWZChhLGIsYyxkKXt2YXIgZT17fSxmPW5ldyBMZS5QYXJzZXIoYSxiKTtlLm5hbWU9ZFtmLnBhcnNlVVNob3J0KCldfHx7fSxmLnNraXAoXCJ1U2hvcnRcIiwxKSxlLmNvb3JkaW5hdGVzPXt9O2Zvcih2YXIgZz0wO2c8Yy5sZW5ndGg7KytnKWUuY29vcmRpbmF0ZXNbY1tnXS50YWddPWYucGFyc2VGaXhlZCgpO3JldHVybiBlfWZ1bmN0aW9uIFdkKGEsYil7dmFyIGM9bmV3IEllLlRhYmxlKFwiZnZhclwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJvZmZzZXRUb0RhdGFcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJjb3VudFNpemVQYWlyc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToyfSx7bmFtZTpcImF4aXNDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmF4ZXMubGVuZ3RofSx7bmFtZTpcImF4aXNTaXplXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjIwfSx7bmFtZTpcImluc3RhbmNlQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5pbnN0YW5jZXMubGVuZ3RofSx7bmFtZTpcImluc3RhbmNlU2l6ZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTo0KzQqYS5heGVzLmxlbmd0aH1dKTtjLm9mZnNldFRvRGF0YT1jLnNpemVPZigpO2Zvcih2YXIgZD0wO2Q8YS5heGVzLmxlbmd0aDtkKyspYy5maWVsZHM9Yy5maWVsZHMuY29uY2F0KFNkKGQsYS5heGVzW2RdLGIpKTtmb3IodmFyIGU9MDtlPGEuaW5zdGFuY2VzLmxlbmd0aDtlKyspYy5maWVsZHM9Yy5maWVsZHMuY29uY2F0KFVkKGUsYS5pbnN0YW5jZXNbZV0sYS5heGVzLGIpKTtyZXR1cm4gY31mdW5jdGlvbiBYZChhLGIsYyl7dmFyIGQ9bmV3IExlLlBhcnNlcihhLGIpLGU9ZC5wYXJzZVVMb25nKCk7eGUuYXJndW1lbnQoNjU1MzY9PT1lLFwiVW5zdXBwb3J0ZWQgZnZhciB0YWJsZSB2ZXJzaW9uLlwiKTt2YXIgZj1kLnBhcnNlT2Zmc2V0MTYoKTtkLnNraXAoXCJ1U2hvcnRcIiwxKTtmb3IodmFyIGc9ZC5wYXJzZVVTaG9ydCgpLGg9ZC5wYXJzZVVTaG9ydCgpLGk9ZC5wYXJzZVVTaG9ydCgpLGo9ZC5wYXJzZVVTaG9ydCgpLGs9W10sbD0wO2w8ZztsKyspay5wdXNoKFRkKGEsYitmK2wqaCxjKSk7Zm9yKHZhciBtPVtdLG49YitmK2cqaCxvPTA7bzxpO28rKyltLnB1c2goVmQoYSxuK28qaixrLGMpKTtyZXR1cm57YXhlczprLGluc3RhbmNlczptfX1mdW5jdGlvbiBZZChhLGIpe2I9Ynx8MDt2YXIgYz1uZXcgUShhLGIpLGQ9Yy5wYXJzZVZlcnNpb24oMSk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1kfHwxLjE9PT1kLFwiVW5zdXBwb3J0ZWQgR1BPUyB0YWJsZSB2ZXJzaW9uIFwiK2QpLDE9PT1kP3t2ZXJzaW9uOmQsc2NyaXB0czpjLnBhcnNlU2NyaXB0TGlzdCgpLGZlYXR1cmVzOmMucGFyc2VGZWF0dXJlTGlzdCgpLGxvb2t1cHM6Yy5wYXJzZUxvb2t1cExpc3QoRGYpfTp7dmVyc2lvbjpkLHNjcmlwdHM6Yy5wYXJzZVNjcmlwdExpc3QoKSxmZWF0dXJlczpjLnBhcnNlRmVhdHVyZUxpc3QoKSxsb29rdXBzOmMucGFyc2VMb29rdXBMaXN0KERmKSx2YXJpYXRpb25zOmMucGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3QoKX19ZnVuY3Rpb24gWmQoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcIkdQT1NcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwic2NyaXB0c1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5TY3JpcHRMaXN0KGEuc2NyaXB0cyl9LHtuYW1lOlwiZmVhdHVyZXNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuRmVhdHVyZUxpc3QoYS5mZWF0dXJlcyl9LHtuYW1lOlwibG9va3Vwc1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Mb29rdXBMaXN0KGEubG9va3VwcyxFZil9XSl9ZnVuY3Rpb24gJGQoYSl7dmFyIGI9e307YS5za2lwKFwidVNob3J0XCIpO3ZhciBjPWEucGFyc2VVU2hvcnQoKTt4ZS5hcmd1bWVudCgwPT09YyxcIlVuc3VwcG9ydGVkIGtlcm4gc3ViLXRhYmxlIHZlcnNpb24uXCIpLGEuc2tpcChcInVTaG9ydFwiLDIpO3ZhciBkPWEucGFyc2VVU2hvcnQoKTthLnNraXAoXCJ1U2hvcnRcIiwzKTtmb3IodmFyIGU9MDtlPGQ7ZSs9MSl7dmFyIGY9YS5wYXJzZVVTaG9ydCgpLGc9YS5wYXJzZVVTaG9ydCgpLGg9YS5wYXJzZVNob3J0KCk7YltmK1wiLFwiK2ddPWh9cmV0dXJuIGJ9ZnVuY3Rpb24gX2QoYSl7dmFyIGI9e307YS5za2lwKFwidVNob3J0XCIpLGEucGFyc2VVTG9uZygpPjEmJmNvbnNvbGUud2FybihcIk9ubHkgdGhlIGZpcnN0IGtlcm4gc3VidGFibGUgaXMgc3VwcG9ydGVkLlwiKSxhLnNraXAoXCJ1TG9uZ1wiKTt2YXIgYz1hLnBhcnNlVVNob3J0KCksZD0yNTUmYztpZihhLnNraXAoXCJ1U2hvcnRcIiksMD09PWQpe3ZhciBlPWEucGFyc2VVU2hvcnQoKTthLnNraXAoXCJ1U2hvcnRcIiwzKTtmb3IodmFyIGY9MDtmPGU7Zis9MSl7dmFyIGc9YS5wYXJzZVVTaG9ydCgpLGg9YS5wYXJzZVVTaG9ydCgpLGk9YS5wYXJzZVNob3J0KCk7YltnK1wiLFwiK2hdPWl9fXJldHVybiBifWZ1bmN0aW9uIGFlKGEsYil7dmFyIGM9bmV3IExlLlBhcnNlcihhLGIpLGQ9Yy5wYXJzZVVTaG9ydCgpO2lmKDA9PT1kKXJldHVybiAkZChjKTtpZigxPT09ZClyZXR1cm4gX2QoYyk7dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQga2VybiB0YWJsZSB2ZXJzaW9uIChcIitkK1wiKS5cIil9ZnVuY3Rpb24gYmUoYSxiLGMsZCl7Zm9yKHZhciBlPW5ldyBMZS5QYXJzZXIoYSxiKSxmPWQ/ZS5wYXJzZVVTaG9ydDplLnBhcnNlVUxvbmcsZz1bXSxoPTA7aDxjKzE7aCs9MSl7dmFyIGk9Zi5jYWxsKGUpO2QmJihpKj0yKSxnLnB1c2goaSl9cmV0dXJuIGd9ZnVuY3Rpb24gY2UoYSxjKXtiKFwiZnNcIikucmVhZEZpbGUoYSxmdW5jdGlvbihhLGIpe2lmKGEpcmV0dXJuIGMoYS5tZXNzYWdlKTtjKG51bGwsQ2IoYikpfSl9ZnVuY3Rpb24gZGUoYSxiKXt2YXIgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7Yy5vcGVuKFwiZ2V0XCIsYSwhMCksYy5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiLGMub25sb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIGMucmVzcG9uc2U/YihudWxsLGMucmVzcG9uc2UpOmIoXCJGb250IGNvdWxkIG5vdCBiZSBsb2FkZWQ6IFwiK2Muc3RhdHVzVGV4dCl9LGMub25lcnJvcj1mdW5jdGlvbigpe2IoXCJGb250IGNvdWxkIG5vdCBiZSBsb2FkZWRcIil9LGMuc2VuZCgpfWZ1bmN0aW9uIGVlKGEsYil7Zm9yKHZhciBjPVtdLGQ9MTIsZT0wO2U8YjtlKz0xKXt2YXIgZj1MZS5nZXRUYWcoYSxkKSxnPUxlLmdldFVMb25nKGEsZCs0KSxoPUxlLmdldFVMb25nKGEsZCs4KSxpPUxlLmdldFVMb25nKGEsZCsxMik7Yy5wdXNoKHt0YWc6ZixjaGVja3N1bTpnLG9mZnNldDpoLGxlbmd0aDppLGNvbXByZXNzaW9uOiExfSksZCs9MTZ9cmV0dXJuIGN9ZnVuY3Rpb24gZmUoYSxiKXtmb3IodmFyIGM9W10sZD00NCxlPTA7ZTxiO2UrPTEpe3ZhciBmPUxlLmdldFRhZyhhLGQpLGc9TGUuZ2V0VUxvbmcoYSxkKzQpLGg9TGUuZ2V0VUxvbmcoYSxkKzgpLGk9TGUuZ2V0VUxvbmcoYSxkKzEyKSxqPXZvaWQgMDtqPWg8aSYmXCJXT0ZGXCIsYy5wdXNoKHt0YWc6ZixvZmZzZXQ6Zyxjb21wcmVzc2lvbjpqLGNvbXByZXNzZWRMZW5ndGg6aCxsZW5ndGg6aX0pLGQrPTIwfXJldHVybiBjfWZ1bmN0aW9uIGdlKGEsYil7aWYoXCJXT0ZGXCI9PT1iLmNvbXByZXNzaW9uKXt2YXIgYz1uZXcgVWludDhBcnJheShhLmJ1ZmZlcixiLm9mZnNldCsyLGIuY29tcHJlc3NlZExlbmd0aC0yKSxkPW5ldyBVaW50OEFycmF5KGIubGVuZ3RoKTtpZih3ZShjLGQpLGQuYnl0ZUxlbmd0aCE9PWIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkRlY29tcHJlc3Npb24gZXJyb3I6IFwiK2IudGFnK1wiIGRlY29tcHJlc3NlZCBsZW5ndGggZG9lc24ndCBtYXRjaCByZWNvcmRlZCBsZW5ndGhcIik7cmV0dXJue2RhdGE6bmV3IERhdGFWaWV3KGQuYnVmZmVyLDApLG9mZnNldDowfX1yZXR1cm57ZGF0YTphLG9mZnNldDpiLm9mZnNldH19ZnVuY3Rpb24gaGUoYSl7dmFyIGIsYyxkLGU9bmV3IFFkKHtlbXB0eTohMH0pLGY9bmV3IERhdGFWaWV3KGEsMCksZz1bXSxoPUxlLmdldFRhZyhmLDApO2lmKGg9PT1TdHJpbmcuZnJvbUNoYXJDb2RlKDAsMSwwLDApfHxcInRydWVcIj09PWh8fFwidHlwMVwiPT09aCllLm91dGxpbmVzRm9ybWF0PVwidHJ1ZXR5cGVcIixkPUxlLmdldFVTaG9ydChmLDQpLGc9ZWUoZixkKTtlbHNlIGlmKFwiT1RUT1wiPT09aCllLm91dGxpbmVzRm9ybWF0PVwiY2ZmXCIsZD1MZS5nZXRVU2hvcnQoZiw0KSxnPWVlKGYsZCk7ZWxzZXtpZihcIndPRkZcIiE9PWgpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgT3BlblR5cGUgc2lnbmF0dXJlIFwiK2gpO3ZhciBpPUxlLmdldFRhZyhmLDQpO2lmKGk9PT1TdHJpbmcuZnJvbUNoYXJDb2RlKDAsMSwwLDApKWUub3V0bGluZXNGb3JtYXQ9XCJ0cnVldHlwZVwiO2Vsc2V7aWYoXCJPVFRPXCIhPT1pKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIE9wZW5UeXBlIGZsYXZvciBcIitoKTtlLm91dGxpbmVzRm9ybWF0PVwiY2ZmXCJ9ZD1MZS5nZXRVU2hvcnQoZiwxMiksZz1mZShmLGQpfWZvcih2YXIgaixrLGwsbSxuLG8scCxxLHIscyx0LHU9MDt1PGQ7dSs9MSl7dmFyIHY9Z1t1XSx3PXZvaWQgMDtzd2l0Y2godi50YWcpe2Nhc2VcImNtYXBcIjp3PWdlKGYsdiksZS50YWJsZXMuY21hcD1NZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUuZW5jb2Rpbmc9bmV3IFkoZS50YWJsZXMuY21hcCk7YnJlYWs7Y2FzZVwiY3Z0IFwiOnc9Z2UoZix2KSx0PW5ldyBMZS5QYXJzZXIody5kYXRhLHcub2Zmc2V0KSxlLnRhYmxlcy5jdnQ9dC5wYXJzZVNob3J0TGlzdCh2Lmxlbmd0aC8yKTticmVhaztjYXNlXCJmdmFyXCI6az12O2JyZWFrO2Nhc2VcImZwZ21cIjp3PWdlKGYsdiksdD1uZXcgTGUuUGFyc2VyKHcuZGF0YSx3Lm9mZnNldCksZS50YWJsZXMuZnBnbT10LnBhcnNlQnl0ZUxpc3Qodi5sZW5ndGgpO2JyZWFrO2Nhc2VcImhlYWRcIjp3PWdlKGYsdiksZS50YWJsZXMuaGVhZD1XZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUudW5pdHNQZXJFbT1lLnRhYmxlcy5oZWFkLnVuaXRzUGVyRW0sYj1lLnRhYmxlcy5oZWFkLmluZGV4VG9Mb2NGb3JtYXQ7YnJlYWs7Y2FzZVwiaGhlYVwiOnc9Z2UoZix2KSxlLnRhYmxlcy5oaGVhPVhlLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS5hc2NlbmRlcj1lLnRhYmxlcy5oaGVhLmFzY2VuZGVyLGUuZGVzY2VuZGVyPWUudGFibGVzLmhoZWEuZGVzY2VuZGVyLGUubnVtYmVyT2ZITWV0cmljcz1lLnRhYmxlcy5oaGVhLm51bWJlck9mSE1ldHJpY3M7YnJlYWs7Y2FzZVwiaG10eFwiOm89djticmVhaztjYXNlXCJsdGFnXCI6dz1nZShmLHYpLGM9WmUucGFyc2Uody5kYXRhLHcub2Zmc2V0KTticmVhaztjYXNlXCJtYXhwXCI6dz1nZShmLHYpLGUudGFibGVzLm1heHA9JGUucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLm51bUdseXBocz1lLnRhYmxlcy5tYXhwLm51bUdseXBoczticmVhaztjYXNlXCJuYW1lXCI6cj12O2JyZWFrO2Nhc2VcIk9TLzJcIjp3PWdlKGYsdiksZS50YWJsZXMub3MyPWpmLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCk7YnJlYWs7Y2FzZVwicG9zdFwiOnc9Z2UoZix2KSxlLnRhYmxlcy5wb3N0PWtmLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS5nbHlwaE5hbWVzPW5ldyAkKGUudGFibGVzLnBvc3QpO2JyZWFrO2Nhc2VcInByZXBcIjp3PWdlKGYsdiksdD1uZXcgTGUuUGFyc2VyKHcuZGF0YSx3Lm9mZnNldCksZS50YWJsZXMucHJlcD10LnBhcnNlQnl0ZUxpc3Qodi5sZW5ndGgpO2JyZWFrO2Nhc2VcImdseWZcIjpsPXY7YnJlYWs7Y2FzZVwibG9jYVwiOnE9djticmVhaztjYXNlXCJDRkYgXCI6aj12O2JyZWFrO2Nhc2VcImtlcm5cIjpwPXY7YnJlYWs7Y2FzZVwiR1BPU1wiOm09djticmVhaztjYXNlXCJHU1VCXCI6bj12O2JyZWFrO2Nhc2VcIm1ldGFcIjpzPXZ9fXZhciB4PWdlKGYscik7aWYoZS50YWJsZXMubmFtZT1nZi5wYXJzZSh4LmRhdGEseC5vZmZzZXQsYyksZS5uYW1lcz1lLnRhYmxlcy5uYW1lLGwmJnEpe3ZhciB5PTA9PT1iLHo9Z2UoZixxKSxBPUhmLnBhcnNlKHouZGF0YSx6Lm9mZnNldCxlLm51bUdseXBocyx5KSxCPWdlKGYsbCk7ZS5nbHlwaHM9dmYucGFyc2UoQi5kYXRhLEIub2Zmc2V0LEEsZSl9ZWxzZXtpZighail0aHJvdyBuZXcgRXJyb3IoXCJGb250IGRvZXNuJ3QgY29udGFpbiBUcnVlVHlwZSBvciBDRkYgb3V0bGluZXMuXCIpO3ZhciBDPWdlKGYsaik7VmUucGFyc2UoQy5kYXRhLEMub2Zmc2V0LGUpfXZhciBEPWdlKGYsbyk7aWYoWWUucGFyc2UoRC5kYXRhLEQub2Zmc2V0LGUubnVtYmVyT2ZITWV0cmljcyxlLm51bUdseXBocyxlLmdseXBocyksXyhlKSxwKXt2YXIgRT1nZShmLHApO2Uua2VybmluZ1BhaXJzPUdmLnBhcnNlKEUuZGF0YSxFLm9mZnNldCl9ZWxzZSBlLmtlcm5pbmdQYWlycz17fTtpZihtKXt2YXIgRj1nZShmLG0pO2UudGFibGVzLmdwb3M9RmYucGFyc2UoRi5kYXRhLEYub2Zmc2V0KSxlLnBvc2l0aW9uLmluaXQoKX1pZihuKXt2YXIgRz1nZShmLG4pO2UudGFibGVzLmdzdWI9b2YucGFyc2UoRy5kYXRhLEcub2Zmc2V0KX1pZihrKXt2YXIgSD1nZShmLGspO2UudGFibGVzLmZ2YXI9Q2YucGFyc2UoSC5kYXRhLEgub2Zmc2V0LGUubmFtZXMpfWlmKHMpe3ZhciBJPWdlKGYscyk7ZS50YWJsZXMubWV0YT1wZi5wYXJzZShJLmRhdGEsSS5vZmZzZXQpLGUubWV0YXM9ZS50YWJsZXMubWV0YX1yZXR1cm4gZX1mdW5jdGlvbiBpZShhLGIpeyhcInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93P2NlOmRlKShhLGZ1bmN0aW9uKGEsYyl7aWYoYSlyZXR1cm4gYihhKTt2YXIgZDt0cnl7ZD1oZShjKX1jYXRjaChhKXtyZXR1cm4gYihhLG51bGwpfXJldHVybiBiKG51bGwsZCl9KX1mdW5jdGlvbiBqZShhKXtyZXR1cm4gaGUoQ2IoYihcImZzXCIpLnJlYWRGaWxlU3luYyhhKSkpfVN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXR8fGZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oKXt0cnl7dmFyIGE9e30sYj1PYmplY3QuZGVmaW5lUHJvcGVydHksYz1iKGEsYSxhKSYmYn1jYXRjaChhKXt9cmV0dXJuIGN9KCksYj1mdW5jdGlvbihhKXtpZihudWxsPT10aGlzKXRocm93IFR5cGVFcnJvcigpO3ZhciBiPVN0cmluZyh0aGlzKSxjPWIubGVuZ3RoLGQ9YT9OdW1iZXIoYSk6MDtpZihkIT1kJiYoZD0wKSwhKGQ8MHx8ZD49Yykpe3ZhciBlLGY9Yi5jaGFyQ29kZUF0KGQpO3JldHVybiBmPj01NTI5NiYmZjw9NTYzMTkmJmM+ZCsxJiYoZT1iLmNoYXJDb2RlQXQoZCsxKSk+PTU2MzIwJiZlPD01NzM0Mz8xMDI0KihmLTU1Mjk2KStlLTU2MzIwKzY1NTM2OmZ9fTthP2EoU3RyaW5nLnByb3RvdHlwZSxcImNvZGVQb2ludEF0XCIse3ZhbHVlOmIsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6U3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdD1ifSgpO3ZhciBrZT0wLGxlPS0zLG1lPW5ldyBjLG5lPW5ldyBjLG9lPW5ldyBVaW50OEFycmF5KDMwKSxwZT1uZXcgVWludDE2QXJyYXkoMzApLHFlPW5ldyBVaW50OEFycmF5KDMwKSxyZT1uZXcgVWludDE2QXJyYXkoMzApLHNlPW5ldyBVaW50OEFycmF5KFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSksdGU9bmV3IGMsdWU9bmV3IFVpbnQ4QXJyYXkoMzIwKSx2ZT1uZXcgVWludDE2QXJyYXkoMTYpO2cobWUsbmUpLGYob2UscGUsNCwzKSxmKHFlLHJlLDIsMSksb2VbMjhdPTAscGVbMjhdPTI1ODt2YXIgd2U9bztxLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGlzTmFOKHRoaXMueDEpfHxpc05hTih0aGlzLnkxKXx8aXNOYU4odGhpcy54Mil8fGlzTmFOKHRoaXMueTIpfSxxLnByb3RvdHlwZS5hZGRQb2ludD1mdW5jdGlvbihhLGIpe1wibnVtYmVyXCI9PXR5cGVvZiBhJiYoKGlzTmFOKHRoaXMueDEpfHxpc05hTih0aGlzLngyKSkmJih0aGlzLngxPWEsdGhpcy54Mj1hKSxhPHRoaXMueDEmJih0aGlzLngxPWEpLGE+dGhpcy54MiYmKHRoaXMueDI9YSkpLFwibnVtYmVyXCI9PXR5cGVvZiBiJiYoKGlzTmFOKHRoaXMueTEpfHxpc05hTih0aGlzLnkyKSkmJih0aGlzLnkxPWIsdGhpcy55Mj1iKSxiPHRoaXMueTEmJih0aGlzLnkxPWIpLGI+dGhpcy55MiYmKHRoaXMueTI9YikpfSxxLnByb3RvdHlwZS5hZGRYPWZ1bmN0aW9uKGEpe3RoaXMuYWRkUG9pbnQoYSxudWxsKX0scS5wcm90b3R5cGUuYWRkWT1mdW5jdGlvbihhKXt0aGlzLmFkZFBvaW50KG51bGwsYSl9LHEucHJvdG90eXBlLmFkZEJlemllcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3ZhciBpPXRoaXMsaj1bYSxiXSxrPVtjLGRdLGw9W2UsZl0sbT1bZyxoXTt0aGlzLmFkZFBvaW50KGEsYiksdGhpcy5hZGRQb2ludChnLGgpO2Zvcih2YXIgbj0wO248PTE7bisrKXt2YXIgbz02Kmpbbl0tMTIqa1tuXSs2Kmxbbl0scT0tMypqW25dKzkqa1tuXS05Kmxbbl0rMyptW25dLHI9MyprW25dLTMqaltuXTtpZigwIT09cSl7dmFyIHM9TWF0aC5wb3cobywyKS00KnIqcTtpZighKHM8MCkpe3ZhciB0PSgtbytNYXRoLnNxcnQocykpLygyKnEpOzA8dCYmdDwxJiYoMD09PW4mJmkuYWRkWChwKGpbbl0sa1tuXSxsW25dLG1bbl0sdCkpLDE9PT1uJiZpLmFkZFkocChqW25dLGtbbl0sbFtuXSxtW25dLHQpKSk7dmFyIHU9KC1vLU1hdGguc3FydChzKSkvKDIqcSk7MDx1JiZ1PDEmJigwPT09biYmaS5hZGRYKHAoaltuXSxrW25dLGxbbl0sbVtuXSx1KSksMT09PW4mJmkuYWRkWShwKGpbbl0sa1tuXSxsW25dLG1bbl0sdSkpKX19ZWxzZXtpZigwPT09byljb250aW51ZTt2YXIgdj0tci9vOzA8diYmdjwxJiYoMD09PW4mJmkuYWRkWChwKGpbbl0sa1tuXSxsW25dLG1bbl0sdikpLDE9PT1uJiZpLmFkZFkocChqW25dLGtbbl0sbFtuXSxtW25dLHYpKSl9fX0scS5wcm90b3R5cGUuYWRkUXVhZD1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9YSsyLzMqKGMtYSksaD1iKzIvMyooZC1iKSxpPWcrMS8zKihlLWEpLGo9aCsxLzMqKGYtYik7dGhpcy5hZGRCZXppZXIoYSxiLGcsaCxpLGosZSxmKX0sci5wcm90b3R5cGUubW92ZVRvPWZ1bmN0aW9uKGEsYil7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiTVwiLHg6YSx5OmJ9KX0sci5wcm90b3R5cGUubGluZVRvPWZ1bmN0aW9uKGEsYil7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiTFwiLHg6YSx5OmJ9KX0sci5wcm90b3R5cGUuY3VydmVUbz1yLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJDXCIseDE6YSx5MTpiLHgyOmMseTI6ZCx4OmUseTpmfSl9LHIucHJvdG90eXBlLnF1YWRUbz1yLnByb3RvdHlwZS5xdWFkcmF0aWNDdXJ2ZVRvPWZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIlFcIix4MTphLHkxOmIseDpjLHk6ZH0pfSxyLnByb3RvdHlwZS5jbG9zZT1yLnByb3RvdHlwZS5jbG9zZVBhdGg9ZnVuY3Rpb24oKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJaXCJ9KX0sci5wcm90b3R5cGUuZXh0ZW5kPWZ1bmN0aW9uKGEpe2lmKGEuY29tbWFuZHMpYT1hLmNvbW1hbmRzO2Vsc2UgaWYoYSBpbnN0YW5jZW9mIHEpe3ZhciBiPWE7cmV0dXJuIHRoaXMubW92ZVRvKGIueDEsYi55MSksdGhpcy5saW5lVG8oYi54MixiLnkxKSx0aGlzLmxpbmVUbyhiLngyLGIueTIpLHRoaXMubGluZVRvKGIueDEsYi55Miksdm9pZCB0aGlzLmNsb3NlKCl9QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5jb21tYW5kcyxhKX0sci5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3g9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcyxiPW5ldyBxLGM9MCxkPTAsZT0wLGY9MCxnPTA7Zzx0aGlzLmNvbW1hbmRzLmxlbmd0aDtnKyspe3ZhciBoPWEuY29tbWFuZHNbZ107c3dpdGNoKGgudHlwZSl7Y2FzZVwiTVwiOmIuYWRkUG9pbnQoaC54LGgueSksYz1lPWgueCxkPWY9aC55O2JyZWFrO2Nhc2VcIkxcIjpiLmFkZFBvaW50KGgueCxoLnkpLGU9aC54LGY9aC55O2JyZWFrO2Nhc2VcIlFcIjpiLmFkZFF1YWQoZSxmLGgueDEsaC55MSxoLngsaC55KSxlPWgueCxmPWgueTticmVhaztjYXNlXCJDXCI6Yi5hZGRCZXppZXIoZSxmLGgueDEsaC55MSxoLngyLGgueTIsaC54LGgueSksZT1oLngsZj1oLnk7YnJlYWs7Y2FzZVwiWlwiOmU9YyxmPWQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHBhdGggY29tbWFuZCBcIitoLnR5cGUpfX1yZXR1cm4gYi5pc0VtcHR5KCkmJmIuYWRkUG9pbnQoMCwwKSxifSxyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7YS5iZWdpblBhdGgoKTtmb3IodmFyIGM9MDtjPHRoaXMuY29tbWFuZHMubGVuZ3RoO2MrPTEpe3ZhciBkPWIuY29tbWFuZHNbY107XCJNXCI9PT1kLnR5cGU/YS5tb3ZlVG8oZC54LGQueSk6XCJMXCI9PT1kLnR5cGU/YS5saW5lVG8oZC54LGQueSk6XCJDXCI9PT1kLnR5cGU/YS5iZXppZXJDdXJ2ZVRvKGQueDEsZC55MSxkLngyLGQueTIsZC54LGQueSk6XCJRXCI9PT1kLnR5cGU/YS5xdWFkcmF0aWNDdXJ2ZVRvKGQueDEsZC55MSxkLngsZC55KTpcIlpcIj09PWQudHlwZSYmYS5jbG9zZVBhdGgoKX10aGlzLmZpbGwmJihhLmZpbGxTdHlsZT10aGlzLmZpbGwsYS5maWxsKCkpLHRoaXMuc3Ryb2tlJiYoYS5zdHJva2VTdHlsZT10aGlzLnN0cm9rZSxhLmxpbmVXaWR0aD10aGlzLnN0cm9rZVdpZHRoLGEuc3Ryb2tlKCkpfSxyLnByb3RvdHlwZS50b1BhdGhEYXRhPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYil7cmV0dXJuIE1hdGgucm91bmQoYik9PT1iP1wiXCIrTWF0aC5yb3VuZChiKTpiLnRvRml4ZWQoYSl9ZnVuY3Rpb24gYygpe2Zvcih2YXIgYT1hcmd1bWVudHMsYz1cIlwiLGQ9MDtkPGFyZ3VtZW50cy5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXTtlPj0wJiZkPjAmJihjKz1cIiBcIiksYys9YihlKX1yZXR1cm4gY312YXIgZD10aGlzO2E9dm9pZCAwIT09YT9hOjI7Zm9yKHZhciBlPVwiXCIsZj0wO2Y8dGhpcy5jb21tYW5kcy5sZW5ndGg7Zis9MSl7dmFyIGc9ZC5jb21tYW5kc1tmXTtcIk1cIj09PWcudHlwZT9lKz1cIk1cIitjKGcueCxnLnkpOlwiTFwiPT09Zy50eXBlP2UrPVwiTFwiK2MoZy54LGcueSk6XCJDXCI9PT1nLnR5cGU/ZSs9XCJDXCIrYyhnLngxLGcueTEsZy54MixnLnkyLGcueCxnLnkpOlwiUVwiPT09Zy50eXBlP2UrPVwiUVwiK2MoZy54MSxnLnkxLGcueCxnLnkpOlwiWlwiPT09Zy50eXBlJiYoZSs9XCJaXCIpfXJldHVybiBlfSxyLnByb3RvdHlwZS50b1NWRz1mdW5jdGlvbihhKXt2YXIgYj0nPHBhdGggZD1cIic7cmV0dXJuIGIrPXRoaXMudG9QYXRoRGF0YShhKSxiKz0nXCInLHRoaXMuZmlsbCYmXCJibGFja1wiIT09dGhpcy5maWxsJiYobnVsbD09PXRoaXMuZmlsbD9iKz0nIGZpbGw9XCJub25lXCInOmIrPScgZmlsbD1cIicrdGhpcy5maWxsKydcIicpLHRoaXMuc3Ryb2tlJiYoYis9JyBzdHJva2U9XCInK3RoaXMuc3Ryb2tlKydcIiBzdHJva2Utd2lkdGg9XCInK3RoaXMuc3Ryb2tlV2lkdGgrJ1wiJyksYis9XCIvPlwifSxyLnByb3RvdHlwZS50b0RPTUVsZW1lbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy50b1BhdGhEYXRhKGEpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInBhdGhcIik7cmV0dXJuIGMuc2V0QXR0cmlidXRlKFwiZFwiLGIpLGN9O3ZhciB4ZT17ZmFpbDpzLGFyZ3VtZW50OnQsYXNzZXJ0OnR9LHllPTMyNzY4LHplPTIxNDc0ODM2NDgsQWU9e30sQmU9e30sQ2U9e307QmUuQllURT1mdW5jdGlvbihhKXtyZXR1cm4geGUuYXJndW1lbnQoYT49MCYmYTw9MjU1LFwiQnl0ZSB2YWx1ZSBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAyNTUuXCIpLFthXX0sQ2UuQllURT11KDEpLEJlLkNIQVI9ZnVuY3Rpb24oYSl7cmV0dXJuW2EuY2hhckNvZGVBdCgwKV19LENlLkNIQVI9dSgxKSxCZS5DSEFSQVJSQVk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrPTEpYltjXT1hLmNoYXJDb2RlQXQoYyk7cmV0dXJuIGJ9LENlLkNIQVJBUlJBWT1mdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LEJlLlVTSE9SVD1mdW5jdGlvbihhKXtyZXR1cm5bYT4+OCYyNTUsMjU1JmFdfSxDZS5VU0hPUlQ9dSgyKSxCZS5TSE9SVD1mdW5jdGlvbihhKXtyZXR1cm4gYT49eWUmJihhPS0oMip5ZS1hKSksW2E+PjgmMjU1LDI1NSZhXX0sQ2UuU0hPUlQ9dSgyKSxCZS5VSU5UMjQ9ZnVuY3Rpb24oYSl7cmV0dXJuW2E+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLlVJTlQyND11KDMpLEJlLlVMT05HPWZ1bmN0aW9uKGEpe3JldHVyblthPj4yNCYyNTUsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuVUxPTkc9dSg0KSxCZS5MT05HPWZ1bmN0aW9uKGEpe3JldHVybiBhPj16ZSYmKGE9LSgyKnplLWEpKSxbYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLkxPTkc9dSg0KSxCZS5GSVhFRD1CZS5VTE9ORyxDZS5GSVhFRD1DZS5VTE9ORyxCZS5GV09SRD1CZS5TSE9SVCxDZS5GV09SRD1DZS5TSE9SVCxCZS5VRldPUkQ9QmUuVVNIT1JULENlLlVGV09SRD1DZS5VU0hPUlQsQmUuTE9OR0RBVEVUSU1FPWZ1bmN0aW9uKGEpe3JldHVyblswLDAsMCwwLGE+PjI0JjI1NSxhPj4xNiYyNTUsYT4+OCYyNTUsMjU1JmFdfSxDZS5MT05HREFURVRJTUU9dSg4KSxCZS5UQUc9ZnVuY3Rpb24oYSl7cmV0dXJuIHhlLmFyZ3VtZW50KDQ9PT1hLmxlbmd0aCxcIlRhZyBzaG91bGQgYmUgZXhhY3RseSA0IEFTQ0lJIGNoYXJhY3RlcnMuXCIpLFthLmNoYXJDb2RlQXQoMCksYS5jaGFyQ29kZUF0KDEpLGEuY2hhckNvZGVBdCgyKSxhLmNoYXJDb2RlQXQoMyldfSxDZS5UQUc9dSg0KSxCZS5DYXJkOD1CZS5CWVRFLENlLkNhcmQ4PUNlLkJZVEUsQmUuQ2FyZDE2PUJlLlVTSE9SVCxDZS5DYXJkMTY9Q2UuVVNIT1JULEJlLk9mZlNpemU9QmUuQllURSxDZS5PZmZTaXplPUNlLkJZVEUsQmUuU0lEPUJlLlVTSE9SVCxDZS5TSUQ9Q2UuVVNIT1JULEJlLk5VTUJFUj1mdW5jdGlvbihhKXtyZXR1cm4gYT49LTEwNyYmYTw9MTA3P1thKzEzOV06YT49MTA4JiZhPD0xMTMxPyhhLT0xMDgsWzI0NysoYT4+OCksMjU1JmFdKTphPj0tMTEzMSYmYTw9LTEwOD8oYT0tYS0xMDgsWzI1MSsoYT4+OCksMjU1JmFdKTphPj0tMzI3NjgmJmE8PTMyNzY3P0JlLk5VTUJFUjE2KGEpOkJlLk5VTUJFUjMyKGEpXG59LENlLk5VTUJFUj1mdW5jdGlvbihhKXtyZXR1cm4gQmUuTlVNQkVSKGEpLmxlbmd0aH0sQmUuTlVNQkVSMTY9ZnVuY3Rpb24oYSl7cmV0dXJuWzI4LGE+PjgmMjU1LDI1NSZhXX0sQ2UuTlVNQkVSMTY9dSgzKSxCZS5OVU1CRVIzMj1mdW5jdGlvbihhKXtyZXR1cm5bMjksYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLk5VTUJFUjMyPXUoNSksQmUuUkVBTD1mdW5jdGlvbihhKXt2YXIgYj1hLnRvU3RyaW5nKCksYz0vXFwuKFxcZCo/KSg/Ojl7NSwyMH18MHs1LDIwfSlcXGR7MCwyfSg/OmUoLispfCQpLy5leGVjKGIpO2lmKGMpe3ZhciBkPXBhcnNlRmxvYXQoXCIxZVwiKygoY1syXT8rY1syXTowKStjWzFdLmxlbmd0aCkpO2I9KE1hdGgucm91bmQoYSpkKS9kKS50b1N0cmluZygpfWZvcih2YXIgZT1cIlwiLGY9MCxnPWIubGVuZ3RoO2Y8ZztmKz0xKXt2YXIgaD1iW2ZdO2UrPVwiZVwiPT09aD9cIi1cIj09PWJbKytmXT9cImNcIjpcImJcIjpcIi5cIj09PWg/XCJhXCI6XCItXCI9PT1oP1wiZVwiOmh9ZSs9MSZlLmxlbmd0aD9cImZcIjpcImZmXCI7Zm9yKHZhciBpPVszMF0saj0wLGs9ZS5sZW5ndGg7ajxrO2orPTIpaS5wdXNoKHBhcnNlSW50KGUuc3Vic3RyKGosMiksMTYpKTtyZXR1cm4gaX0sQ2UuUkVBTD1mdW5jdGlvbihhKXtyZXR1cm4gQmUuUkVBTChhKS5sZW5ndGh9LEJlLk5BTUU9QmUuQ0hBUkFSUkFZLENlLk5BTUU9Q2UuQ0hBUkFSUkFZLEJlLlNUUklORz1CZS5DSEFSQVJSQVksQ2UuU1RSSU5HPUNlLkNIQVJBUlJBWSxBZS5VVEY4PWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9W10sZT1jLGY9MDtmPGU7ZisrLGIrPTEpZFtmXT1hLmdldFVpbnQ4KGIpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZCl9LEFlLlVURjE2PWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9W10sZT1jLzIsZj0wO2Y8ZTtmKyssYis9MilkW2ZdPWEuZ2V0VWludDE2KGIpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZCl9LEJlLlVURjE2PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hLmNoYXJDb2RlQXQoYyk7YltiLmxlbmd0aF09ZD4+OCYyNTUsYltiLmxlbmd0aF09MjU1JmR9cmV0dXJuIGJ9LENlLlVURjE2PWZ1bmN0aW9uKGEpe3JldHVybiAyKmEubGVuZ3RofTt2YXIgRGU9e1wieC1tYWMtY3JvYXRpYW5cIjpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsWg4oSiwrTCqOKJoMW9w5jiiJ7CseKJpOKJpeKIhsK14oiC4oiR4oiPxaHiiKvCqsK6zqnFvsO4wr/CocKs4oiaxpLiiYjEhsKrxIzigKbCoMOAw4PDlcWSxZPEkOKAlOKAnOKAneKAmOKAmcO34peK76O/wqnigYTigqzigLnigLrDhsK74oCTwrfigJrigJ7igLDDgsSHw4HEjcOIw43DjsOPw4zDk8OUxJHDksOaw5vDmcSxy4bLnMKvz4DDi8uawrjDisOmy4dcIixcIngtbWFjLWN5cmlsbGljXCI6XCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv4oCgwrDSkMKjwqfigKLCttCGwq7CqeKEotCC0ZLiiaDQg9GT4oiewrHiiaTiiaXRlsK10pHQiNCE0ZTQh9GX0InRmdCK0ZrRmNCFwqziiJrGkuKJiOKIhsKrwrvigKbCoNCL0ZvQjNGc0ZXigJPigJTigJzigJ3igJjigJnDt+KAntCO0Z7Qj9Gf4oSW0IHRkdGP0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y5cIixcIngtbWFjLWdhZWxpY1wiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOG4gsKx4omk4oml4biDxIrEi+G4iuG4i+G4nuG4n8SgxKHhuYDDpsO44bmB4bmW4bmXybzGksW/4bmgwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmeG5oeG6m8O/xbjhuarigqzigLnigLrFtsW34bmrwrfhu7Lhu7PigYrDgsOKw4HDi8OIw43DjsOPw4zDk8OU4pmjw5LDmsObw5nEscOdw73FtMW14bqE4bqF4bqA4bqB4bqC4bqDXCIsXCJ4LW1hYy1ncmVla1wiOlwiw4TCucKyw4nCs8OWw5zOhcOgw6LDpM6EwqjDp8Opw6jDqsOrwqPihKLDrsOv4oCiwr3igLDDtMO2wqbigqzDucO7w7zigKDOk86UzpjOm86ezqDDn8KuwqnOo86qwqfiiaDCsMK3zpHCseKJpOKJpcKlzpLOlc6WzpfOmc6azpzOps6rzqjOqc6szp3CrM6fzqHiiYjOpMKrwrvigKbCoM6lzqfOhs6IxZPigJPigJXigJzigJ3igJjigJnDt86JzorOjM6Ozq3Ors6vz4zOj8+NzrHOss+IzrTOtc+GzrPOt865zr7Ous67zrzOvc6/z4DPjs+Bz4PPhM64z4nPgs+Hz4XOts+Kz4vOkM6wwq1cIixcIngtbWFjLWljZWxhbmRpY1wiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvMOdwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK6zqnDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGE4oKsw5DDsMOew77DvcK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+jv8OSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiLFwieC1tYWMtaW51aXRcIjpcIuGQg+GQhOGQheGQhuGQiuGQi+GQseGQsuGQs+GQtOGQuOGQueGRieGRjuGRj+GRkOGRkeGRleGRluGRpuGRreGRruGRr+GRsOGRsuGRs+GSg+GSi+GSjOGSjeGSjuGSkOGSkcKw4ZKh4ZKl4ZKm4oCiwrbhkqfCrsKp4oSi4ZKo4ZKq4ZKr4ZK74ZOC4ZOD4ZOE4ZOF4ZOH4ZOI4ZOQ4ZOv4ZOw4ZOx4ZOy4ZO04ZO14ZSF4ZOV4ZOW4ZOX4ZOY4ZOa4ZOb4ZOq4ZSo4ZSp4ZSq4ZSr4ZSt4oCmwqDhlK7hlL7hlZXhlZbhlZfigJPigJTigJzigJ3igJjigJnhlZjhlZnhlZrhlZ3hlYbhlYfhlYjhlYnhlYvhlYzhlZDhlb/hloDhloHhloLhloPhloThloXhlo/hlpDhlpHhlpLhlpPhlpThlpXhmbHhmbLhmbPhmbThmbXhmbbhlpbhlqDhlqHhlqLhlqPhlqThlqXhlqbhlbzFgcWCXCIsXCJ4LW1hYy1jZVwiOlwiw4TEgMSBw4nEhMOWw5zDocSFxIzDpMSNxIbEh8OpxbnFusSOw63Ej8SSxJPElsOzxJfDtMO2w7XDusSaxJvDvOKAoMKwxJjCo8Kn4oCiwrbDn8KuwqnihKLEmcKo4omgxKPErsSvxKriiaTiiaXEq8S24oiC4oiRxYLEu8S8xL3EvsS5xLrFhcWGxYPCrOKImsWExYfiiIbCq8K74oCmwqDFiMWQw5XFkcWM4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rFjcWUxZXFmOKAueKAusWZxZbFl8Wg4oCa4oCexaHFmsWbw4HFpMWlw43FvcW+xarDk8OUxavFrsOaxa/FsMWxxbLFs8Odw73Et8W7xYHFvMSiy4dcIixtYWNpbnRvc2g6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK6zqnDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGE4oKs4oC54oC676yB76yC4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU76O/w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCIsXCJ4LW1hYy1yb21hbmlhblwiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgxILImOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCus6pxIPImcK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhOKCrOKAueKAusiayJvigKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvo7/DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIixcIngtbWFjLXR1cmtpc2hcIjpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrOqcOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjEnsSfxLDEscWexZ/igKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvo7/DksOaw5vDme+ioMuGy5zCr8uYy5nLmsK4y53Lm8uHXCJ9O0FlLk1BQ1NUUklORz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1EZVtkXTtpZih2b2lkIDAhPT1lKXtmb3IodmFyIGY9XCJcIixnPTA7ZzxjO2crKyl7dmFyIGg9YS5nZXRVaW50OChiK2cpO2YrPWg8PTEyNz9TdHJpbmcuZnJvbUNoYXJDb2RlKGgpOmVbMTI3JmhdfXJldHVybiBmfX07dmFyIEVlLEZlPVwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtNYXAmJm5ldyBXZWFrTWFwLEdlPWZ1bmN0aW9uKGEpe2lmKCFFZSl7RWU9e307Zm9yKHZhciBiIGluIERlKUVlW2JdPW5ldyBTdHJpbmcoYil9dmFyIGM9RWVbYV07aWYodm9pZCAwIT09Yyl7aWYoRmUpe3ZhciBkPUZlLmdldChjKTtpZih2b2lkIDAhPT1kKXJldHVybiBkfXZhciBlPURlW2FdO2lmKHZvaWQgMCE9PWUpe2Zvcih2YXIgZj17fSxnPTA7ZzxlLmxlbmd0aDtnKyspZltlLmNoYXJDb2RlQXQoZyldPWcrMTI4O3JldHVybiBGZSYmRmUuc2V0KGMsZiksZn19fTtCZS5NQUNTVFJJTkc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1HZShiKTtpZih2b2lkIDAhPT1jKXtmb3IodmFyIGQ9W10sZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNoYXJDb2RlQXQoZSk7aWYoZj49MTI4JiZ2b2lkIDA9PT0oZj1jW2ZdKSlyZXR1cm47ZFtlXT1mfXJldHVybiBkfX0sQ2UuTUFDU1RSSU5HPWZ1bmN0aW9uKGEsYil7dmFyIGM9QmUuTUFDU1RSSU5HKGEsYik7cmV0dXJuIHZvaWQgMCE9PWM/Yy5sZW5ndGg6MH0sQmUuVkFSREVMVEFTPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9W107YjxhLmxlbmd0aDspe3ZhciBkPWFbYl07Yj0wPT09ZD93KGEsYixjKTpkPj0tMTI4JiZkPD0xMjc/eChhLGIsYyk6eShhLGIsYyl9cmV0dXJuIGN9LEJlLklOREVYPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0xLGM9W2JdLGQ9W10sZT0wO2U8YS5sZW5ndGg7ZSs9MSl7dmFyIGY9QmUuT0JKRUNUKGFbZV0pO0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGQsZiksYis9Zi5sZW5ndGgsYy5wdXNoKGIpfWlmKDA9PT1kLmxlbmd0aClyZXR1cm5bMCwwXTtmb3IodmFyIGc9W10saD0xK01hdGguZmxvb3IoTWF0aC5sb2coYikvTWF0aC5sb2coMikpLzh8MCxpPVt2b2lkIDAsQmUuQllURSxCZS5VU0hPUlQsQmUuVUlOVDI0LEJlLlVMT05HXVtoXSxqPTA7ajxjLmxlbmd0aDtqKz0xKXt2YXIgaz1pKGNbal0pO0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGcsayl9cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQoQmUuQ2FyZDE2KGEubGVuZ3RoKSxCZS5PZmZTaXplKGgpLGcsZCl9LENlLklOREVYPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5JTkRFWChhKS5sZW5ndGh9LEJlLkRJQ1Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9T2JqZWN0LmtleXMoYSksZD1jLmxlbmd0aCxlPTA7ZTxkO2UrPTEpe3ZhciBmPXBhcnNlSW50KGNbZV0sMCksZz1hW2ZdO2I9Yi5jb25jYXQoQmUuT1BFUkFORChnLnZhbHVlLGcudHlwZSkpLGI9Yi5jb25jYXQoQmUuT1BFUkFUT1IoZikpfXJldHVybiBifSxDZS5ESUNUPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5ESUNUKGEpLmxlbmd0aH0sQmUuT1BFUkFUT1I9ZnVuY3Rpb24oYSl7cmV0dXJuIGE8MTIwMD9bYV06WzEyLGEtMTIwMF19LEJlLk9QRVJBTkQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtpZihBcnJheS5pc0FycmF5KGIpKWZvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCs9MSl4ZS5hcmd1bWVudChhLmxlbmd0aD09PWIubGVuZ3RoLFwiTm90IGVub3VnaCBhcmd1bWVudHMgZ2l2ZW4gZm9yIHR5cGVcIitiKSxjPWMuY29uY2F0KEJlLk9QRVJBTkQoYVtkXSxiW2RdKSk7ZWxzZSBpZihcIlNJRFwiPT09YiljPWMuY29uY2F0KEJlLk5VTUJFUihhKSk7ZWxzZSBpZihcIm9mZnNldFwiPT09YiljPWMuY29uY2F0KEJlLk5VTUJFUjMyKGEpKTtlbHNlIGlmKFwibnVtYmVyXCI9PT1iKWM9Yy5jb25jYXQoQmUuTlVNQkVSKGEpKTtlbHNle2lmKFwicmVhbFwiIT09Yil0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG9wZXJhbmQgdHlwZSBcIitiKTtjPWMuY29uY2F0KEJlLlJFQUwoYSkpfXJldHVybiBjfSxCZS5PUD1CZS5CWVRFLENlLk9QPUNlLkJZVEU7dmFyIEhlPVwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtNYXAmJm5ldyBXZWFrTWFwO0JlLkNIQVJTVFJJTkc9ZnVuY3Rpb24oYSl7aWYoSGUpe3ZhciBiPUhlLmdldChhKTtpZih2b2lkIDAhPT1iKXJldHVybiBifWZvcih2YXIgYz1bXSxkPWEubGVuZ3RoLGU9MDtlPGQ7ZSs9MSl7dmFyIGY9YVtlXTtjPWMuY29uY2F0KEJlW2YudHlwZV0oZi52YWx1ZSkpfXJldHVybiBIZSYmSGUuc2V0KGEsYyksY30sQ2UuQ0hBUlNUUklORz1mdW5jdGlvbihhKXtyZXR1cm4gQmUuQ0hBUlNUUklORyhhKS5sZW5ndGh9LEJlLk9CSkVDVD1mdW5jdGlvbihhKXt2YXIgYj1CZVthLnR5cGVdO3JldHVybiB4ZS5hcmd1bWVudCh2b2lkIDAhPT1iLFwiTm8gZW5jb2RpbmcgZnVuY3Rpb24gZm9yIHR5cGUgXCIrYS50eXBlKSxiKGEudmFsdWUpfSxDZS5PQkpFQ1Q9ZnVuY3Rpb24oYSl7dmFyIGI9Q2VbYS50eXBlXTtyZXR1cm4geGUuYXJndW1lbnQodm9pZCAwIT09YixcIk5vIHNpemVPZiBmdW5jdGlvbiBmb3IgdHlwZSBcIithLnR5cGUpLGIoYS52YWx1ZSl9LEJlLlRBQkxFPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPWEuZmllbGRzLmxlbmd0aCxkPVtdLGU9W10sZj0wO2Y8YztmKz0xKXt2YXIgZz1hLmZpZWxkc1tmXSxoPUJlW2cudHlwZV07eGUuYXJndW1lbnQodm9pZCAwIT09aCxcIk5vIGVuY29kaW5nIGZ1bmN0aW9uIGZvciBmaWVsZCB0eXBlIFwiK2cudHlwZStcIiAoXCIrZy5uYW1lK1wiKVwiKTt2YXIgaT1hW2cubmFtZV07dm9pZCAwPT09aSYmKGk9Zy52YWx1ZSk7dmFyIGo9aChpKTtcIlRBQkxFXCI9PT1nLnR5cGU/KGUucHVzaChiLmxlbmd0aCksYj1iLmNvbmNhdChbMCwwXSksZC5wdXNoKGopKTpiPWIuY29uY2F0KGopfWZvcih2YXIgaz0wO2s8ZC5sZW5ndGg7ays9MSl7dmFyIGw9ZVtrXSxtPWIubGVuZ3RoO3hlLmFyZ3VtZW50KG08NjU1MzYsXCJUYWJsZSBcIithLnRhYmxlTmFtZStcIiB0b28gYmlnLlwiKSxiW2xdPW0+PjgsYltsKzFdPTI1NSZtLGI9Yi5jb25jYXQoZFtrXSl9cmV0dXJuIGJ9LENlLlRBQkxFPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9YS5maWVsZHMubGVuZ3RoLGQ9MDtkPGM7ZCs9MSl7dmFyIGU9YS5maWVsZHNbZF0sZj1DZVtlLnR5cGVdO3hlLmFyZ3VtZW50KHZvaWQgMCE9PWYsXCJObyBzaXplT2YgZnVuY3Rpb24gZm9yIGZpZWxkIHR5cGUgXCIrZS50eXBlK1wiIChcIitlLm5hbWUrXCIpXCIpO3ZhciBnPWFbZS5uYW1lXTt2b2lkIDA9PT1nJiYoZz1lLnZhbHVlKSxiKz1mKGcpLFwiVEFCTEVcIj09PWUudHlwZSYmKGIrPTIpfXJldHVybiBifSxCZS5SRUNPUkQ9QmUuVEFCTEUsQ2UuUkVDT1JEPUNlLlRBQkxFLEJlLkxJVEVSQUw9ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LENlLkxJVEVSQUw9ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSx6LnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gQmUuVEFCTEUodGhpcyl9LHoucHJvdG90eXBlLnNpemVPZj1mdW5jdGlvbigpe3JldHVybiBDZS5UQUJMRSh0aGlzKX0sRC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6LnByb3RvdHlwZSksRC5wcm90b3R5cGUuY29uc3RydWN0b3I9RCxFLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHoucHJvdG90eXBlKSxFLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FLEYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoei5wcm90b3R5cGUpLEYucHJvdG90eXBlLmNvbnN0cnVjdG9yPUYsRy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6LnByb3RvdHlwZSksRy5wcm90b3R5cGUuY29uc3RydWN0b3I9Rzt2YXIgSWU9e1RhYmxlOnosUmVjb3JkOnosQ292ZXJhZ2U6RCxTY3JpcHRMaXN0OkUsRmVhdHVyZUxpc3Q6RixMb29rdXBMaXN0OkcsdXNob3J0TGlzdDpBLHRhYmxlTGlzdDpCLHJlY29yZExpc3Q6Q30sSmU9e2J5dGU6MSx1U2hvcnQ6MixzaG9ydDoyLHVMb25nOjQsZml4ZWQ6NCxsb25nRGF0ZVRpbWU6OCx0YWc6NH07US5wcm90b3R5cGUucGFyc2VCeXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldFVpbnQ4KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0xLGF9LFEucHJvdG90eXBlLnBhcnNlQ2hhcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YS5nZXRJbnQ4KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0xLGF9LFEucHJvdG90eXBlLnBhcnNlQ2FyZDg9US5wcm90b3R5cGUucGFyc2VCeXRlLFEucHJvdG90eXBlLnBhcnNlVVNob3J0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldFVpbnQxNih0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MixhfSxRLnByb3RvdHlwZS5wYXJzZUNhcmQxNj1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydCxRLnByb3RvdHlwZS5wYXJzZVNJRD1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydCxRLnByb3RvdHlwZS5wYXJzZU9mZnNldDE2PVEucHJvdG90eXBlLnBhcnNlVVNob3J0LFEucHJvdG90eXBlLnBhcnNlU2hvcnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0SW50MTYodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIsYX0sUS5wcm90b3R5cGUucGFyc2VGMkRvdDE0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldEludDE2KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpLzE2Mzg0O3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yLGF9LFEucHJvdG90eXBlLnBhcnNlVUxvbmc9ZnVuY3Rpb24oKXt2YXIgYT1LKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9NCxhfSxRLnByb3RvdHlwZS5wYXJzZU9mZnNldDMyPVEucHJvdG90eXBlLnBhcnNlVUxvbmcsUS5wcm90b3R5cGUucGFyc2VGaXhlZD1mdW5jdGlvbigpe3ZhciBhPUwodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz00LGF9LFEucHJvdG90eXBlLnBhcnNlU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZGF0YSxjPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZD1cIlwiO3RoaXMucmVsYXRpdmVPZmZzZXQrPWE7Zm9yKHZhciBlPTA7ZTxhO2UrKylkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGIuZ2V0VWludDgoYytlKSk7cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlVGFnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VTdHJpbmcoNCl9LFEucHJvdG90eXBlLnBhcnNlTG9uZ0RhdGVUaW1lPWZ1bmN0aW9uKCl7dmFyIGE9Syh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCs0KTtyZXR1cm4gYS09MjA4Mjg0NDgwMCx0aGlzLnJlbGF0aXZlT2Zmc2V0Kz04LGF9LFEucHJvdG90eXBlLnBhcnNlVmVyc2lvbj1mdW5jdGlvbihhKXt2YXIgYj1JKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KSxjPUkodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQrMik7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTQsdm9pZCAwPT09YSYmKGE9NDA5NiksYitjL2EvMTB9LFEucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0xKSx0aGlzLnJlbGF0aXZlT2Zmc2V0Kz1KZVthXSpifSxRLnByb3RvdHlwZS5wYXJzZVVMb25nTGlzdD1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT10aGlzLnBhcnNlVUxvbmcoKSk7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldFVpbnQzMihkKSxkKz00O3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz00KmEsYn0sUS5wcm90b3R5cGUucGFyc2VPZmZzZXQxNkxpc3Q9US5wcm90b3R5cGUucGFyc2VVU2hvcnRMaXN0PWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMucGFyc2VVU2hvcnQoKSk7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldFVpbnQxNihkKSxkKz0yO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yKmEsYn0sUS5wcm90b3R5cGUucGFyc2VTaG9ydExpc3Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldEludDE2KGQpLGQrPTI7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIqYSxifSxRLnByb3RvdHlwZS5wYXJzZUJ5dGVMaXN0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1uZXcgQXJyYXkoYSksYz10aGlzLmRhdGEsZD10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGU9MDtlPGE7ZSsrKWJbZV09Yy5nZXRVaW50OChkKyspO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz1hLGJ9LFEucHJvdG90eXBlLnBhcnNlTGlzdD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Ynx8KGI9YSxhPXRoaXMucGFyc2VVU2hvcnQoKSk7Zm9yKHZhciBkPW5ldyBBcnJheShhKSxlPTA7ZTxhO2UrKylkW2VdPWIuY2FsbChjKTtyZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VMaXN0MzI9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2J8fChiPWEsYT10aGlzLnBhcnNlVUxvbmcoKSk7Zm9yKHZhciBkPW5ldyBBcnJheShhKSxlPTA7ZTxhO2UrKylkW2VdPWIuY2FsbChjKTtyZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VSZWNvcmRMaXN0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztifHwoYj1hLGE9dGhpcy5wYXJzZVVTaG9ydCgpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9T2JqZWN0LmtleXMoYiksZj0wO2Y8YTtmKyspe2Zvcih2YXIgZz17fSxoPTA7aDxlLmxlbmd0aDtoKyspe3ZhciBpPWVbaF0saj1iW2ldO2dbaV09ai5jYWxsKGMpfWRbZl09Z31yZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VSZWNvcmRMaXN0MzI9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2J8fChiPWEsYT10aGlzLnBhcnNlVUxvbmcoKSk7Zm9yKHZhciBkPW5ldyBBcnJheShhKSxlPU9iamVjdC5rZXlzKGIpLGY9MDtmPGE7ZisrKXtmb3IodmFyIGc9e30saD0wO2g8ZS5sZW5ndGg7aCsrKXt2YXIgaT1lW2hdLGo9YltpXTtnW2ldPWouY2FsbChjKX1kW2ZdPWd9cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlU3RydWN0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSlyZXR1cm4gYS5jYWxsKHRoaXMpO2Zvcih2YXIgYz1PYmplY3Qua2V5cyhhKSxkPXt9LGU9MDtlPGMubGVuZ3RoO2UrKyl7dmFyIGY9Y1tlXSxnPWFbZl07ZFtmXT1nLmNhbGwoYil9cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlVmFsdWVSZWNvcmQ9ZnVuY3Rpb24oYSl7aWYodm9pZCAwPT09YSYmKGE9dGhpcy5wYXJzZVVTaG9ydCgpKSwwIT09YSl7dmFyIGI9e307cmV0dXJuIDEmYSYmKGIueFBsYWNlbWVudD10aGlzLnBhcnNlU2hvcnQoKSksMiZhJiYoYi55UGxhY2VtZW50PXRoaXMucGFyc2VTaG9ydCgpKSw0JmEmJihiLnhBZHZhbmNlPXRoaXMucGFyc2VTaG9ydCgpKSw4JmEmJihiLnlBZHZhbmNlPXRoaXMucGFyc2VTaG9ydCgpKSwxNiZhJiYoYi54UGxhRGV2aWNlPXZvaWQgMCx0aGlzLnBhcnNlU2hvcnQoKSksMzImYSYmKGIueVBsYURldmljZT12b2lkIDAsdGhpcy5wYXJzZVNob3J0KCkpLDY0JmEmJihiLnhBZHZEZXZpY2U9dm9pZCAwLHRoaXMucGFyc2VTaG9ydCgpKSwxMjgmYSYmKGIueUFkdkRldmljZT12b2lkIDAsdGhpcy5wYXJzZVNob3J0KCkpLGJ9fSxRLnByb3RvdHlwZS5wYXJzZVZhbHVlUmVjb3JkTGlzdD1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLGI9dGhpcy5wYXJzZVVTaG9ydCgpLGM9dGhpcy5wYXJzZVVTaG9ydCgpLGQ9bmV3IEFycmF5KGMpLGU9MDtlPGM7ZSsrKWRbZV09YS5wYXJzZVZhbHVlUmVjb3JkKGIpO3JldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVBvaW50ZXI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wYXJzZU9mZnNldDE2KCk7aWYoYj4wKXJldHVybiBuZXcgUSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrYikucGFyc2VTdHJ1Y3QoYSl9LFEucHJvdG90eXBlLnBhcnNlUG9pbnRlcjMyPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucGFyc2VPZmZzZXQzMigpO2lmKGI+MClyZXR1cm4gbmV3IFEodGhpcy5kYXRhLHRoaXMub2Zmc2V0K2IpLnBhcnNlU3RydWN0KGEpfSxRLnByb3RvdHlwZS5wYXJzZUxpc3RPZkxpc3RzPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLGM9dGhpcy5wYXJzZU9mZnNldDE2TGlzdCgpLGQ9Yy5sZW5ndGgsZT10aGlzLnJlbGF0aXZlT2Zmc2V0LGY9bmV3IEFycmF5KGQpLGc9MDtnPGQ7ZysrKXt2YXIgaD1jW2ddO2lmKDAhPT1oKWlmKGIucmVsYXRpdmVPZmZzZXQ9aCxhKXtmb3IodmFyIGk9Yi5wYXJzZU9mZnNldDE2TGlzdCgpLGo9bmV3IEFycmF5KGkubGVuZ3RoKSxrPTA7azxpLmxlbmd0aDtrKyspYi5yZWxhdGl2ZU9mZnNldD1oK2lba10saltrXT1hLmNhbGwoYik7ZltnXT1qfWVsc2UgZltnXT1iLnBhcnNlVVNob3J0TGlzdCgpO2Vsc2UgZltnXT12b2lkIDB9cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQ9ZSxmfSxRLnByb3RvdHlwZS5wYXJzZUNvdmVyYWdlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYz10aGlzLnBhcnNlVVNob3J0KCksZD10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWMpcmV0dXJue2Zvcm1hdDoxLGdseXBoczp0aGlzLnBhcnNlVVNob3J0TGlzdChkKX07aWYoMj09PWMpe2Zvcih2YXIgZT1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspZVtmXT17c3RhcnQ6YS5wYXJzZVVTaG9ydCgpLGVuZDphLnBhcnNlVVNob3J0KCksaW5kZXg6YS5wYXJzZVVTaG9ydCgpfTtyZXR1cm57Zm9ybWF0OjIscmFuZ2VzOmV9fXRocm93IG5ldyBFcnJvcihcIjB4XCIrYi50b1N0cmluZygxNikrXCI6IENvdmVyYWdlIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIil9LFEucHJvdG90eXBlLnBhcnNlQ2xhc3NEZWY9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO2lmKDE9PT1iKXJldHVybntmb3JtYXQ6MSxzdGFydEdseXBoOnRoaXMucGFyc2VVU2hvcnQoKSxjbGFzc2VzOnRoaXMucGFyc2VVU2hvcnRMaXN0KCl9O2lmKDI9PT1iKXJldHVybntmb3JtYXQ6MixyYW5nZXM6dGhpcy5wYXJzZVJlY29yZExpc3Qoe3N0YXJ0OlEudVNob3J0LGVuZDpRLnVTaG9ydCxjbGFzc0lkOlEudVNob3J0fSl9O3Rocm93IG5ldyBFcnJvcihcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IENsYXNzRGVmIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIil9LFEubGlzdD1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlTGlzdChhLGIpfX0sUS5saXN0MzI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZUxpc3QzMihhLGIpfX0sUS5yZWNvcmRMaXN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VSZWNvcmRMaXN0KGEsYil9fSxRLnJlY29yZExpc3QzMj1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUmVjb3JkTGlzdDMyKGEsYil9fSxRLnBvaW50ZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyKGEpfX0sUS5wb2ludGVyMzI9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyMzIoYSl9fSxRLnRhZz1RLnByb3RvdHlwZS5wYXJzZVRhZyxRLmJ5dGU9US5wcm90b3R5cGUucGFyc2VCeXRlLFEudVNob3J0PVEub2Zmc2V0MTY9US5wcm90b3R5cGUucGFyc2VVU2hvcnQsUS51U2hvcnRMaXN0PVEucHJvdG90eXBlLnBhcnNlVVNob3J0TGlzdCxRLnVMb25nPVEub2Zmc2V0MzI9US5wcm90b3R5cGUucGFyc2VVTG9uZyxRLnVMb25nTGlzdD1RLnByb3RvdHlwZS5wYXJzZVVMb25nTGlzdCxRLnN0cnVjdD1RLnByb3RvdHlwZS5wYXJzZVN0cnVjdCxRLmNvdmVyYWdlPVEucHJvdG90eXBlLnBhcnNlQ292ZXJhZ2UsUS5jbGFzc0RlZj1RLnByb3RvdHlwZS5wYXJzZUNsYXNzRGVmO3ZhciBLZT17cmVzZXJ2ZWQ6US51U2hvcnQscmVxRmVhdHVyZUluZGV4OlEudVNob3J0LGZlYXR1cmVJbmRleGVzOlEudVNob3J0TGlzdH07US5wcm90b3R5cGUucGFyc2VTY3JpcHRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyKFEucmVjb3JkTGlzdCh7dGFnOlEudGFnLHNjcmlwdDpRLnBvaW50ZXIoe2RlZmF1bHRMYW5nU3lzOlEucG9pbnRlcihLZSksbGFuZ1N5c1JlY29yZHM6US5yZWNvcmRMaXN0KHt0YWc6US50YWcsbGFuZ1N5czpRLnBvaW50ZXIoS2UpfSl9KX0pKXx8W119LFEucHJvdG90eXBlLnBhcnNlRmVhdHVyZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoUS5yZWNvcmRMaXN0KHt0YWc6US50YWcsZmVhdHVyZTpRLnBvaW50ZXIoe2ZlYXR1cmVQYXJhbXM6US5vZmZzZXQxNixsb29rdXBMaXN0SW5kZXhlczpRLnVTaG9ydExpc3R9KX0pKXx8W119LFEucHJvdG90eXBlLnBhcnNlTG9va3VwTGlzdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoUS5saXN0KFEucG9pbnRlcihmdW5jdGlvbigpe3ZhciBiPXRoaXMucGFyc2VVU2hvcnQoKTt4ZS5hcmd1bWVudCgxPD1iJiZiPD05LFwiR1BPUy9HU1VCIGxvb2t1cCB0eXBlIFwiK2IrXCIgdW5rbm93bi5cIik7dmFyIGM9dGhpcy5wYXJzZVVTaG9ydCgpLGQ9MTYmYztyZXR1cm57bG9va3VwVHlwZTpiLGxvb2t1cEZsYWc6YyxzdWJ0YWJsZXM6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKGFbYl0pKSxtYXJrRmlsdGVyaW5nU2V0OmQ/dGhpcy5wYXJzZVVTaG9ydCgpOnZvaWQgMH19KSkpfHxbXX0sUS5wcm90b3R5cGUucGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIzMihmdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKSxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWEmJmI8MSxcIkdQT1MvR1NVQiBmZWF0dXJlIHZhcmlhdGlvbnMgdGFibGUgdW5rbm93bi5cIiksdGhpcy5wYXJzZVJlY29yZExpc3QzMih7Y29uZGl0aW9uU2V0T2Zmc2V0OlEub2Zmc2V0MzIsZmVhdHVyZVRhYmxlU3Vic3RpdHV0aW9uT2Zmc2V0OlEub2Zmc2V0MzJ9KX0pfHxbXX07dmFyIExlPXtnZXRCeXRlOkgsZ2V0Q2FyZDg6SCxnZXRVU2hvcnQ6SSxnZXRDYXJkMTY6SSxnZXRTaG9ydDpKLGdldFVMb25nOkssZ2V0Rml4ZWQ6TCxnZXRUYWc6TSxnZXRPZmZzZXQ6TixnZXRCeXRlczpPLGJ5dGVzVG9TdHJpbmc6UCxQYXJzZXI6UX0sTWU9e3BhcnNlOlQsbWFrZTpXfSxOZT1bXCIubm90ZGVmXCIsXCJzcGFjZVwiLFwiZXhjbGFtXCIsXCJxdW90ZWRibFwiLFwibnVtYmVyc2lnblwiLFwiZG9sbGFyXCIsXCJwZXJjZW50XCIsXCJhbXBlcnNhbmRcIixcInF1b3RlcmlnaHRcIixcInBhcmVubGVmdFwiLFwicGFyZW5yaWdodFwiLFwiYXN0ZXJpc2tcIixcInBsdXNcIixcImNvbW1hXCIsXCJoeXBoZW5cIixcInBlcmlvZFwiLFwic2xhc2hcIixcInplcm9cIixcIm9uZVwiLFwidHdvXCIsXCJ0aHJlZVwiLFwiZm91clwiLFwiZml2ZVwiLFwic2l4XCIsXCJzZXZlblwiLFwiZWlnaHRcIixcIm5pbmVcIixcImNvbG9uXCIsXCJzZW1pY29sb25cIixcImxlc3NcIixcImVxdWFsXCIsXCJncmVhdGVyXCIsXCJxdWVzdGlvblwiLFwiYXRcIixcIkFcIixcIkJcIixcIkNcIixcIkRcIixcIkVcIixcIkZcIixcIkdcIixcIkhcIixcIklcIixcIkpcIixcIktcIixcIkxcIixcIk1cIixcIk5cIixcIk9cIixcIlBcIixcIlFcIixcIlJcIixcIlNcIixcIlRcIixcIlVcIixcIlZcIixcIldcIixcIlhcIixcIllcIixcIlpcIixcImJyYWNrZXRsZWZ0XCIsXCJiYWNrc2xhc2hcIixcImJyYWNrZXRyaWdodFwiLFwiYXNjaWljaXJjdW1cIixcInVuZGVyc2NvcmVcIixcInF1b3RlbGVmdFwiLFwiYVwiLFwiYlwiLFwiY1wiLFwiZFwiLFwiZVwiLFwiZlwiLFwiZ1wiLFwiaFwiLFwiaVwiLFwialwiLFwia1wiLFwibFwiLFwibVwiLFwiblwiLFwib1wiLFwicFwiLFwicVwiLFwiclwiLFwic1wiLFwidFwiLFwidVwiLFwidlwiLFwid1wiLFwieFwiLFwieVwiLFwielwiLFwiYnJhY2VsZWZ0XCIsXCJiYXJcIixcImJyYWNlcmlnaHRcIixcImFzY2lpdGlsZGVcIixcImV4Y2xhbWRvd25cIixcImNlbnRcIixcInN0ZXJsaW5nXCIsXCJmcmFjdGlvblwiLFwieWVuXCIsXCJmbG9yaW5cIixcInNlY3Rpb25cIixcImN1cnJlbmN5XCIsXCJxdW90ZXNpbmdsZVwiLFwicXVvdGVkYmxsZWZ0XCIsXCJndWlsbGVtb3RsZWZ0XCIsXCJndWlsc2luZ2xsZWZ0XCIsXCJndWlsc2luZ2xyaWdodFwiLFwiZmlcIixcImZsXCIsXCJlbmRhc2hcIixcImRhZ2dlclwiLFwiZGFnZ2VyZGJsXCIsXCJwZXJpb2RjZW50ZXJlZFwiLFwicGFyYWdyYXBoXCIsXCJidWxsZXRcIixcInF1b3Rlc2luZ2xiYXNlXCIsXCJxdW90ZWRibGJhc2VcIixcInF1b3RlZGJscmlnaHRcIixcImd1aWxsZW1vdHJpZ2h0XCIsXCJlbGxpcHNpc1wiLFwicGVydGhvdXNhbmRcIixcInF1ZXN0aW9uZG93blwiLFwiZ3JhdmVcIixcImFjdXRlXCIsXCJjaXJjdW1mbGV4XCIsXCJ0aWxkZVwiLFwibWFjcm9uXCIsXCJicmV2ZVwiLFwiZG90YWNjZW50XCIsXCJkaWVyZXNpc1wiLFwicmluZ1wiLFwiY2VkaWxsYVwiLFwiaHVuZ2FydW1sYXV0XCIsXCJvZ29uZWtcIixcImNhcm9uXCIsXCJlbWRhc2hcIixcIkFFXCIsXCJvcmRmZW1pbmluZVwiLFwiTHNsYXNoXCIsXCJPc2xhc2hcIixcIk9FXCIsXCJvcmRtYXNjdWxpbmVcIixcImFlXCIsXCJkb3RsZXNzaVwiLFwibHNsYXNoXCIsXCJvc2xhc2hcIixcIm9lXCIsXCJnZXJtYW5kYmxzXCIsXCJvbmVzdXBlcmlvclwiLFwibG9naWNhbG5vdFwiLFwibXVcIixcInRyYWRlbWFya1wiLFwiRXRoXCIsXCJvbmVoYWxmXCIsXCJwbHVzbWludXNcIixcIlRob3JuXCIsXCJvbmVxdWFydGVyXCIsXCJkaXZpZGVcIixcImJyb2tlbmJhclwiLFwiZGVncmVlXCIsXCJ0aG9yblwiLFwidGhyZWVxdWFydGVyc1wiLFwidHdvc3VwZXJpb3JcIixcInJlZ2lzdGVyZWRcIixcIm1pbnVzXCIsXCJldGhcIixcIm11bHRpcGx5XCIsXCJ0aHJlZXN1cGVyaW9yXCIsXCJjb3B5cmlnaHRcIixcIkFhY3V0ZVwiLFwiQWNpcmN1bWZsZXhcIixcIkFkaWVyZXNpc1wiLFwiQWdyYXZlXCIsXCJBcmluZ1wiLFwiQXRpbGRlXCIsXCJDY2VkaWxsYVwiLFwiRWFjdXRlXCIsXCJFY2lyY3VtZmxleFwiLFwiRWRpZXJlc2lzXCIsXCJFZ3JhdmVcIixcIklhY3V0ZVwiLFwiSWNpcmN1bWZsZXhcIixcIklkaWVyZXNpc1wiLFwiSWdyYXZlXCIsXCJOdGlsZGVcIixcIk9hY3V0ZVwiLFwiT2NpcmN1bWZsZXhcIixcIk9kaWVyZXNpc1wiLFwiT2dyYXZlXCIsXCJPdGlsZGVcIixcIlNjYXJvblwiLFwiVWFjdXRlXCIsXCJVY2lyY3VtZmxleFwiLFwiVWRpZXJlc2lzXCIsXCJVZ3JhdmVcIixcIllhY3V0ZVwiLFwiWWRpZXJlc2lzXCIsXCJaY2Fyb25cIixcImFhY3V0ZVwiLFwiYWNpcmN1bWZsZXhcIixcImFkaWVyZXNpc1wiLFwiYWdyYXZlXCIsXCJhcmluZ1wiLFwiYXRpbGRlXCIsXCJjY2VkaWxsYVwiLFwiZWFjdXRlXCIsXCJlY2lyY3VtZmxleFwiLFwiZWRpZXJlc2lzXCIsXCJlZ3JhdmVcIixcImlhY3V0ZVwiLFwiaWNpcmN1bWZsZXhcIixcImlkaWVyZXNpc1wiLFwiaWdyYXZlXCIsXCJudGlsZGVcIixcIm9hY3V0ZVwiLFwib2NpcmN1bWZsZXhcIixcIm9kaWVyZXNpc1wiLFwib2dyYXZlXCIsXCJvdGlsZGVcIixcInNjYXJvblwiLFwidWFjdXRlXCIsXCJ1Y2lyY3VtZmxleFwiLFwidWRpZXJlc2lzXCIsXCJ1Z3JhdmVcIixcInlhY3V0ZVwiLFwieWRpZXJlc2lzXCIsXCJ6Y2Fyb25cIixcImV4Y2xhbXNtYWxsXCIsXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLFwiZG9sbGFyb2xkc3R5bGVcIixcImRvbGxhcnN1cGVyaW9yXCIsXCJhbXBlcnNhbmRzbWFsbFwiLFwiQWN1dGVzbWFsbFwiLFwicGFyZW5sZWZ0c3VwZXJpb3JcIixcInBhcmVucmlnaHRzdXBlcmlvclwiLFwiMjY2IGZmXCIsXCJvbmVkb3RlbmxlYWRlclwiLFwiemVyb29sZHN0eWxlXCIsXCJvbmVvbGRzdHlsZVwiLFwidHdvb2xkc3R5bGVcIixcInRocmVlb2xkc3R5bGVcIixcImZvdXJvbGRzdHlsZVwiLFwiZml2ZW9sZHN0eWxlXCIsXCJzaXhvbGRzdHlsZVwiLFwic2V2ZW5vbGRzdHlsZVwiLFwiZWlnaHRvbGRzdHlsZVwiLFwibmluZW9sZHN0eWxlXCIsXCJjb21tYXN1cGVyaW9yXCIsXCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoXCIsXCJwZXJpb2RzdXBlcmlvclwiLFwicXVlc3Rpb25zbWFsbFwiLFwiYXN1cGVyaW9yXCIsXCJic3VwZXJpb3JcIixcImNlbnRzdXBlcmlvclwiLFwiZHN1cGVyaW9yXCIsXCJlc3VwZXJpb3JcIixcImlzdXBlcmlvclwiLFwibHN1cGVyaW9yXCIsXCJtc3VwZXJpb3JcIixcIm5zdXBlcmlvclwiLFwib3N1cGVyaW9yXCIsXCJyc3VwZXJpb3JcIixcInNzdXBlcmlvclwiLFwidHN1cGVyaW9yXCIsXCJmZlwiLFwiZmZpXCIsXCJmZmxcIixcInBhcmVubGVmdGluZmVyaW9yXCIsXCJwYXJlbnJpZ2h0aW5mZXJpb3JcIixcIkNpcmN1bWZsZXhzbWFsbFwiLFwiaHlwaGVuc3VwZXJpb3JcIixcIkdyYXZlc21hbGxcIixcIkFzbWFsbFwiLFwiQnNtYWxsXCIsXCJDc21hbGxcIixcIkRzbWFsbFwiLFwiRXNtYWxsXCIsXCJGc21hbGxcIixcIkdzbWFsbFwiLFwiSHNtYWxsXCIsXCJJc21hbGxcIixcIkpzbWFsbFwiLFwiS3NtYWxsXCIsXCJMc21hbGxcIixcIk1zbWFsbFwiLFwiTnNtYWxsXCIsXCJPc21hbGxcIixcIlBzbWFsbFwiLFwiUXNtYWxsXCIsXCJSc21hbGxcIixcIlNzbWFsbFwiLFwiVHNtYWxsXCIsXCJVc21hbGxcIixcIlZzbWFsbFwiLFwiV3NtYWxsXCIsXCJYc21hbGxcIixcIllzbWFsbFwiLFwiWnNtYWxsXCIsXCJjb2xvbm1vbmV0YXJ5XCIsXCJvbmVmaXR0ZWRcIixcInJ1cGlhaFwiLFwiVGlsZGVzbWFsbFwiLFwiZXhjbGFtZG93bnNtYWxsXCIsXCJjZW50b2xkc3R5bGVcIixcIkxzbGFzaHNtYWxsXCIsXCJTY2Fyb25zbWFsbFwiLFwiWmNhcm9uc21hbGxcIixcIkRpZXJlc2lzc21hbGxcIixcIkJyZXZlc21hbGxcIixcIkNhcm9uc21hbGxcIixcIkRvdGFjY2VudHNtYWxsXCIsXCJNYWNyb25zbWFsbFwiLFwiZmlndXJlZGFzaFwiLFwiaHlwaGVuaW5mZXJpb3JcIixcIk9nb25la3NtYWxsXCIsXCJSaW5nc21hbGxcIixcIkNlZGlsbGFzbWFsbFwiLFwicXVlc3Rpb25kb3duc21hbGxcIixcIm9uZWVpZ2h0aFwiLFwidGhyZWVlaWdodGhzXCIsXCJmaXZlZWlnaHRoc1wiLFwic2V2ZW5laWdodGhzXCIsXCJvbmV0aGlyZFwiLFwidHdvdGhpcmRzXCIsXCJ6ZXJvc3VwZXJpb3JcIixcImZvdXJzdXBlcmlvclwiLFwiZml2ZXN1cGVyaW9yXCIsXCJzaXhzdXBlcmlvclwiLFwic2V2ZW5zdXBlcmlvclwiLFwiZWlnaHRzdXBlcmlvclwiLFwibmluZXN1cGVyaW9yXCIsXCJ6ZXJvaW5mZXJpb3JcIixcIm9uZWluZmVyaW9yXCIsXCJ0d29pbmZlcmlvclwiLFwidGhyZWVpbmZlcmlvclwiLFwiZm91cmluZmVyaW9yXCIsXCJmaXZlaW5mZXJpb3JcIixcInNpeGluZmVyaW9yXCIsXCJzZXZlbmluZmVyaW9yXCIsXCJlaWdodGluZmVyaW9yXCIsXCJuaW5laW5mZXJpb3JcIixcImNlbnRpbmZlcmlvclwiLFwiZG9sbGFyaW5mZXJpb3JcIixcInBlcmlvZGluZmVyaW9yXCIsXCJjb21tYWluZmVyaW9yXCIsXCJBZ3JhdmVzbWFsbFwiLFwiQWFjdXRlc21hbGxcIixcIkFjaXJjdW1mbGV4c21hbGxcIixcIkF0aWxkZXNtYWxsXCIsXCJBZGllcmVzaXNzbWFsbFwiLFwiQXJpbmdzbWFsbFwiLFwiQUVzbWFsbFwiLFwiQ2NlZGlsbGFzbWFsbFwiLFwiRWdyYXZlc21hbGxcIixcIkVhY3V0ZXNtYWxsXCIsXCJFY2lyY3VtZmxleHNtYWxsXCIsXCJFZGllcmVzaXNzbWFsbFwiLFwiSWdyYXZlc21hbGxcIixcIklhY3V0ZXNtYWxsXCIsXCJJY2lyY3VtZmxleHNtYWxsXCIsXCJJZGllcmVzaXNzbWFsbFwiLFwiRXRoc21hbGxcIixcIk50aWxkZXNtYWxsXCIsXCJPZ3JhdmVzbWFsbFwiLFwiT2FjdXRlc21hbGxcIixcIk9jaXJjdW1mbGV4c21hbGxcIixcIk90aWxkZXNtYWxsXCIsXCJPZGllcmVzaXNzbWFsbFwiLFwiT0VzbWFsbFwiLFwiT3NsYXNoc21hbGxcIixcIlVncmF2ZXNtYWxsXCIsXCJVYWN1dGVzbWFsbFwiLFwiVWNpcmN1bWZsZXhzbWFsbFwiLFwiVWRpZXJlc2lzc21hbGxcIixcIllhY3V0ZXNtYWxsXCIsXCJUaG9ybnNtYWxsXCIsXCJZZGllcmVzaXNzbWFsbFwiLFwiMDAxLjAwMFwiLFwiMDAxLjAwMVwiLFwiMDAxLjAwMlwiLFwiMDAxLjAwM1wiLFwiQmxhY2tcIixcIkJvbGRcIixcIkJvb2tcIixcIkxpZ2h0XCIsXCJNZWRpdW1cIixcIlJlZ3VsYXJcIixcIlJvbWFuXCIsXCJTZW1pYm9sZFwiXSxPZT1bXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwic3BhY2VcIixcImV4Y2xhbVwiLFwicXVvdGVkYmxcIixcIm51bWJlcnNpZ25cIixcImRvbGxhclwiLFwicGVyY2VudFwiLFwiYW1wZXJzYW5kXCIsXCJxdW90ZXJpZ2h0XCIsXCJwYXJlbmxlZnRcIixcInBhcmVucmlnaHRcIixcImFzdGVyaXNrXCIsXCJwbHVzXCIsXCJjb21tYVwiLFwiaHlwaGVuXCIsXCJwZXJpb2RcIixcInNsYXNoXCIsXCJ6ZXJvXCIsXCJvbmVcIixcInR3b1wiLFwidGhyZWVcIixcImZvdXJcIixcImZpdmVcIixcInNpeFwiLFwic2V2ZW5cIixcImVpZ2h0XCIsXCJuaW5lXCIsXCJjb2xvblwiLFwic2VtaWNvbG9uXCIsXCJsZXNzXCIsXCJlcXVhbFwiLFwiZ3JlYXRlclwiLFwicXVlc3Rpb25cIixcImF0XCIsXCJBXCIsXCJCXCIsXCJDXCIsXCJEXCIsXCJFXCIsXCJGXCIsXCJHXCIsXCJIXCIsXCJJXCIsXCJKXCIsXCJLXCIsXCJMXCIsXCJNXCIsXCJOXCIsXCJPXCIsXCJQXCIsXCJRXCIsXCJSXCIsXCJTXCIsXCJUXCIsXCJVXCIsXCJWXCIsXCJXXCIsXCJYXCIsXCJZXCIsXCJaXCIsXCJicmFja2V0bGVmdFwiLFwiYmFja3NsYXNoXCIsXCJicmFja2V0cmlnaHRcIixcImFzY2lpY2lyY3VtXCIsXCJ1bmRlcnNjb3JlXCIsXCJxdW90ZWxlZnRcIixcImFcIixcImJcIixcImNcIixcImRcIixcImVcIixcImZcIixcImdcIixcImhcIixcImlcIixcImpcIixcImtcIixcImxcIixcIm1cIixcIm5cIixcIm9cIixcInBcIixcInFcIixcInJcIixcInNcIixcInRcIixcInVcIixcInZcIixcIndcIixcInhcIixcInlcIixcInpcIixcImJyYWNlbGVmdFwiLFwiYmFyXCIsXCJicmFjZXJpZ2h0XCIsXCJhc2NpaXRpbGRlXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcImV4Y2xhbWRvd25cIixcImNlbnRcIixcInN0ZXJsaW5nXCIsXCJmcmFjdGlvblwiLFwieWVuXCIsXCJmbG9yaW5cIixcInNlY3Rpb25cIixcImN1cnJlbmN5XCIsXCJxdW90ZXNpbmdsZVwiLFwicXVvdGVkYmxsZWZ0XCIsXCJndWlsbGVtb3RsZWZ0XCIsXCJndWlsc2luZ2xsZWZ0XCIsXCJndWlsc2luZ2xyaWdodFwiLFwiZmlcIixcImZsXCIsXCJcIixcImVuZGFzaFwiLFwiZGFnZ2VyXCIsXCJkYWdnZXJkYmxcIixcInBlcmlvZGNlbnRlcmVkXCIsXCJcIixcInBhcmFncmFwaFwiLFwiYnVsbGV0XCIsXCJxdW90ZXNpbmdsYmFzZVwiLFwicXVvdGVkYmxiYXNlXCIsXCJxdW90ZWRibHJpZ2h0XCIsXCJndWlsbGVtb3RyaWdodFwiLFwiZWxsaXBzaXNcIixcInBlcnRob3VzYW5kXCIsXCJcIixcInF1ZXN0aW9uZG93blwiLFwiXCIsXCJncmF2ZVwiLFwiYWN1dGVcIixcImNpcmN1bWZsZXhcIixcInRpbGRlXCIsXCJtYWNyb25cIixcImJyZXZlXCIsXCJkb3RhY2NlbnRcIixcImRpZXJlc2lzXCIsXCJcIixcInJpbmdcIixcImNlZGlsbGFcIixcIlwiLFwiaHVuZ2FydW1sYXV0XCIsXCJvZ29uZWtcIixcImNhcm9uXCIsXCJlbWRhc2hcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiQUVcIixcIlwiLFwib3JkZmVtaW5pbmVcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiTHNsYXNoXCIsXCJPc2xhc2hcIixcIk9FXCIsXCJvcmRtYXNjdWxpbmVcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJhZVwiLFwiXCIsXCJcIixcIlwiLFwiZG90bGVzc2lcIixcIlwiLFwiXCIsXCJsc2xhc2hcIixcIm9zbGFzaFwiLFwib2VcIixcImdlcm1hbmRibHNcIl0sUGU9W1wiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcInNwYWNlXCIsXCJleGNsYW1zbWFsbFwiLFwiSHVuZ2FydW1sYXV0c21hbGxcIixcIlwiLFwiZG9sbGFyb2xkc3R5bGVcIixcImRvbGxhcnN1cGVyaW9yXCIsXCJhbXBlcnNhbmRzbWFsbFwiLFwiQWN1dGVzbWFsbFwiLFwicGFyZW5sZWZ0c3VwZXJpb3JcIixcInBhcmVucmlnaHRzdXBlcmlvclwiLFwidHdvZG90ZW5sZWFkZXJcIixcIm9uZWRvdGVubGVhZGVyXCIsXCJjb21tYVwiLFwiaHlwaGVuXCIsXCJwZXJpb2RcIixcImZyYWN0aW9uXCIsXCJ6ZXJvb2xkc3R5bGVcIixcIm9uZW9sZHN0eWxlXCIsXCJ0d29vbGRzdHlsZVwiLFwidGhyZWVvbGRzdHlsZVwiLFwiZm91cm9sZHN0eWxlXCIsXCJmaXZlb2xkc3R5bGVcIixcInNpeG9sZHN0eWxlXCIsXCJzZXZlbm9sZHN0eWxlXCIsXCJlaWdodG9sZHN0eWxlXCIsXCJuaW5lb2xkc3R5bGVcIixcImNvbG9uXCIsXCJzZW1pY29sb25cIixcImNvbW1hc3VwZXJpb3JcIixcInRocmVlcXVhcnRlcnNlbWRhc2hcIixcInBlcmlvZHN1cGVyaW9yXCIsXCJxdWVzdGlvbnNtYWxsXCIsXCJcIixcImFzdXBlcmlvclwiLFwiYnN1cGVyaW9yXCIsXCJjZW50c3VwZXJpb3JcIixcImRzdXBlcmlvclwiLFwiZXN1cGVyaW9yXCIsXCJcIixcIlwiLFwiaXN1cGVyaW9yXCIsXCJcIixcIlwiLFwibHN1cGVyaW9yXCIsXCJtc3VwZXJpb3JcIixcIm5zdXBlcmlvclwiLFwib3N1cGVyaW9yXCIsXCJcIixcIlwiLFwicnN1cGVyaW9yXCIsXCJzc3VwZXJpb3JcIixcInRzdXBlcmlvclwiLFwiXCIsXCJmZlwiLFwiZmlcIixcImZsXCIsXCJmZmlcIixcImZmbFwiLFwicGFyZW5sZWZ0aW5mZXJpb3JcIixcIlwiLFwicGFyZW5yaWdodGluZmVyaW9yXCIsXCJDaXJjdW1mbGV4c21hbGxcIixcImh5cGhlbnN1cGVyaW9yXCIsXCJHcmF2ZXNtYWxsXCIsXCJBc21hbGxcIixcIkJzbWFsbFwiLFwiQ3NtYWxsXCIsXCJEc21hbGxcIixcIkVzbWFsbFwiLFwiRnNtYWxsXCIsXCJHc21hbGxcIixcIkhzbWFsbFwiLFwiSXNtYWxsXCIsXCJKc21hbGxcIixcIktzbWFsbFwiLFwiTHNtYWxsXCIsXCJNc21hbGxcIixcIk5zbWFsbFwiLFwiT3NtYWxsXCIsXCJQc21hbGxcIixcIlFzbWFsbFwiLFwiUnNtYWxsXCIsXCJTc21hbGxcIixcIlRzbWFsbFwiLFwiVXNtYWxsXCIsXCJWc21hbGxcIixcIldzbWFsbFwiLFwiWHNtYWxsXCIsXCJZc21hbGxcIixcIlpzbWFsbFwiLFwiY29sb25tb25ldGFyeVwiLFwib25lZml0dGVkXCIsXCJydXBpYWhcIixcIlRpbGRlc21hbGxcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiZXhjbGFtZG93bnNtYWxsXCIsXCJjZW50b2xkc3R5bGVcIixcIkxzbGFzaHNtYWxsXCIsXCJcIixcIlwiLFwiU2Nhcm9uc21hbGxcIixcIlpjYXJvbnNtYWxsXCIsXCJEaWVyZXNpc3NtYWxsXCIsXCJCcmV2ZXNtYWxsXCIsXCJDYXJvbnNtYWxsXCIsXCJcIixcIkRvdGFjY2VudHNtYWxsXCIsXCJcIixcIlwiLFwiTWFjcm9uc21hbGxcIixcIlwiLFwiXCIsXCJmaWd1cmVkYXNoXCIsXCJoeXBoZW5pbmZlcmlvclwiLFwiXCIsXCJcIixcIk9nb25la3NtYWxsXCIsXCJSaW5nc21hbGxcIixcIkNlZGlsbGFzbWFsbFwiLFwiXCIsXCJcIixcIlwiLFwib25lcXVhcnRlclwiLFwib25laGFsZlwiLFwidGhyZWVxdWFydGVyc1wiLFwicXVlc3Rpb25kb3duc21hbGxcIixcIm9uZWVpZ2h0aFwiLFwidGhyZWVlaWdodGhzXCIsXCJmaXZlZWlnaHRoc1wiLFwic2V2ZW5laWdodGhzXCIsXCJvbmV0aGlyZFwiLFwidHdvdGhpcmRzXCIsXCJcIixcIlwiLFwiemVyb3N1cGVyaW9yXCIsXCJvbmVzdXBlcmlvclwiLFwidHdvc3VwZXJpb3JcIixcInRocmVlc3VwZXJpb3JcIixcImZvdXJzdXBlcmlvclwiLFwiZml2ZXN1cGVyaW9yXCIsXCJzaXhzdXBlcmlvclwiLFwic2V2ZW5zdXBlcmlvclwiLFwiZWlnaHRzdXBlcmlvclwiLFwibmluZXN1cGVyaW9yXCIsXCJ6ZXJvaW5mZXJpb3JcIixcIm9uZWluZmVyaW9yXCIsXCJ0d29pbmZlcmlvclwiLFwidGhyZWVpbmZlcmlvclwiLFwiZm91cmluZmVyaW9yXCIsXCJmaXZlaW5mZXJpb3JcIixcInNpeGluZmVyaW9yXCIsXCJzZXZlbmluZmVyaW9yXCIsXCJlaWdodGluZmVyaW9yXCIsXCJuaW5laW5mZXJpb3JcIixcImNlbnRpbmZlcmlvclwiLFwiZG9sbGFyaW5mZXJpb3JcIixcInBlcmlvZGluZmVyaW9yXCIsXCJjb21tYWluZmVyaW9yXCIsXCJBZ3JhdmVzbWFsbFwiLFwiQWFjdXRlc21hbGxcIixcIkFjaXJjdW1mbGV4c21hbGxcIixcIkF0aWxkZXNtYWxsXCIsXCJBZGllcmVzaXNzbWFsbFwiLFwiQXJpbmdzbWFsbFwiLFwiQUVzbWFsbFwiLFwiQ2NlZGlsbGFzbWFsbFwiLFwiRWdyYXZlc21hbGxcIixcIkVhY3V0ZXNtYWxsXCIsXCJFY2lyY3VtZmxleHNtYWxsXCIsXCJFZGllcmVzaXNzbWFsbFwiLFwiSWdyYXZlc21hbGxcIixcIklhY3V0ZXNtYWxsXCIsXCJJY2lyY3VtZmxleHNtYWxsXCIsXCJJZGllcmVzaXNzbWFsbFwiLFwiRXRoc21hbGxcIixcIk50aWxkZXNtYWxsXCIsXCJPZ3JhdmVzbWFsbFwiLFwiT2FjdXRlc21hbGxcIixcIk9jaXJjdW1mbGV4c21hbGxcIixcIk90aWxkZXNtYWxsXCIsXCJPZGllcmVzaXNzbWFsbFwiLFwiT0VzbWFsbFwiLFwiT3NsYXNoc21hbGxcIixcIlVncmF2ZXNtYWxsXCIsXCJVYWN1dGVzbWFsbFwiLFwiVWNpcmN1bWZsZXhzbWFsbFwiLFwiVWRpZXJlc2lzc21hbGxcIixcIllhY3V0ZXNtYWxsXCIsXCJUaG9ybnNtYWxsXCIsXCJZZGllcmVzaXNzbWFsbFwiXSxRZT1bXCIubm90ZGVmXCIsXCIubnVsbFwiLFwibm9ubWFya2luZ3JldHVyblwiLFwic3BhY2VcIixcImV4Y2xhbVwiLFwicXVvdGVkYmxcIixcIm51bWJlcnNpZ25cIixcImRvbGxhclwiLFwicGVyY2VudFwiLFwiYW1wZXJzYW5kXCIsXCJxdW90ZXNpbmdsZVwiLFwicGFyZW5sZWZ0XCIsXCJwYXJlbnJpZ2h0XCIsXCJhc3Rlcmlza1wiLFwicGx1c1wiLFwiY29tbWFcIixcImh5cGhlblwiLFwicGVyaW9kXCIsXCJzbGFzaFwiLFwiemVyb1wiLFwib25lXCIsXCJ0d29cIixcInRocmVlXCIsXCJmb3VyXCIsXCJmaXZlXCIsXCJzaXhcIixcInNldmVuXCIsXCJlaWdodFwiLFwibmluZVwiLFwiY29sb25cIixcInNlbWljb2xvblwiLFwibGVzc1wiLFwiZXF1YWxcIixcImdyZWF0ZXJcIixcInF1ZXN0aW9uXCIsXCJhdFwiLFwiQVwiLFwiQlwiLFwiQ1wiLFwiRFwiLFwiRVwiLFwiRlwiLFwiR1wiLFwiSFwiLFwiSVwiLFwiSlwiLFwiS1wiLFwiTFwiLFwiTVwiLFwiTlwiLFwiT1wiLFwiUFwiLFwiUVwiLFwiUlwiLFwiU1wiLFwiVFwiLFwiVVwiLFwiVlwiLFwiV1wiLFwiWFwiLFwiWVwiLFwiWlwiLFwiYnJhY2tldGxlZnRcIixcImJhY2tzbGFzaFwiLFwiYnJhY2tldHJpZ2h0XCIsXCJhc2NpaWNpcmN1bVwiLFwidW5kZXJzY29yZVwiLFwiZ3JhdmVcIixcImFcIixcImJcIixcImNcIixcImRcIixcImVcIixcImZcIixcImdcIixcImhcIixcImlcIixcImpcIixcImtcIixcImxcIixcIm1cIixcIm5cIixcIm9cIixcInBcIixcInFcIixcInJcIixcInNcIixcInRcIixcInVcIixcInZcIixcIndcIixcInhcIixcInlcIixcInpcIixcImJyYWNlbGVmdFwiLFwiYmFyXCIsXCJicmFjZXJpZ2h0XCIsXCJhc2NpaXRpbGRlXCIsXCJBZGllcmVzaXNcIixcIkFyaW5nXCIsXCJDY2VkaWxsYVwiLFwiRWFjdXRlXCIsXCJOdGlsZGVcIixcIk9kaWVyZXNpc1wiLFwiVWRpZXJlc2lzXCIsXCJhYWN1dGVcIixcImFncmF2ZVwiLFwiYWNpcmN1bWZsZXhcIixcImFkaWVyZXNpc1wiLFwiYXRpbGRlXCIsXCJhcmluZ1wiLFwiY2NlZGlsbGFcIixcImVhY3V0ZVwiLFwiZWdyYXZlXCIsXCJlY2lyY3VtZmxleFwiLFwiZWRpZXJlc2lzXCIsXCJpYWN1dGVcIixcImlncmF2ZVwiLFwiaWNpcmN1bWZsZXhcIixcImlkaWVyZXNpc1wiLFwibnRpbGRlXCIsXCJvYWN1dGVcIixcIm9ncmF2ZVwiLFwib2NpcmN1bWZsZXhcIixcIm9kaWVyZXNpc1wiLFwib3RpbGRlXCIsXCJ1YWN1dGVcIixcInVncmF2ZVwiLFwidWNpcmN1bWZsZXhcIixcInVkaWVyZXNpc1wiLFwiZGFnZ2VyXCIsXCJkZWdyZWVcIixcImNlbnRcIixcInN0ZXJsaW5nXCIsXCJzZWN0aW9uXCIsXCJidWxsZXRcIixcInBhcmFncmFwaFwiLFwiZ2VybWFuZGJsc1wiLFwicmVnaXN0ZXJlZFwiLFwiY29weXJpZ2h0XCIsXCJ0cmFkZW1hcmtcIixcImFjdXRlXCIsXCJkaWVyZXNpc1wiLFwibm90ZXF1YWxcIixcIkFFXCIsXCJPc2xhc2hcIixcImluZmluaXR5XCIsXCJwbHVzbWludXNcIixcImxlc3NlcXVhbFwiLFwiZ3JlYXRlcmVxdWFsXCIsXCJ5ZW5cIixcIm11XCIsXCJwYXJ0aWFsZGlmZlwiLFwic3VtbWF0aW9uXCIsXCJwcm9kdWN0XCIsXCJwaVwiLFwiaW50ZWdyYWxcIixcIm9yZGZlbWluaW5lXCIsXCJvcmRtYXNjdWxpbmVcIixcIk9tZWdhXCIsXCJhZVwiLFwib3NsYXNoXCIsXCJxdWVzdGlvbmRvd25cIixcImV4Y2xhbWRvd25cIixcImxvZ2ljYWxub3RcIixcInJhZGljYWxcIixcImZsb3JpblwiLFwiYXBwcm94ZXF1YWxcIixcIkRlbHRhXCIsXCJndWlsbGVtb3RsZWZ0XCIsXCJndWlsbGVtb3RyaWdodFwiLFwiZWxsaXBzaXNcIixcIm5vbmJyZWFraW5nc3BhY2VcIixcIkFncmF2ZVwiLFwiQXRpbGRlXCIsXCJPdGlsZGVcIixcIk9FXCIsXCJvZVwiLFwiZW5kYXNoXCIsXCJlbWRhc2hcIixcInF1b3RlZGJsbGVmdFwiLFwicXVvdGVkYmxyaWdodFwiLFwicXVvdGVsZWZ0XCIsXCJxdW90ZXJpZ2h0XCIsXCJkaXZpZGVcIixcImxvemVuZ2VcIixcInlkaWVyZXNpc1wiLFwiWWRpZXJlc2lzXCIsXCJmcmFjdGlvblwiLFwiY3VycmVuY3lcIixcImd1aWxzaW5nbGxlZnRcIixcImd1aWxzaW5nbHJpZ2h0XCIsXCJmaVwiLFwiZmxcIixcImRhZ2dlcmRibFwiLFwicGVyaW9kY2VudGVyZWRcIixcInF1b3Rlc2luZ2xiYXNlXCIsXCJxdW90ZWRibGJhc2VcIixcInBlcnRob3VzYW5kXCIsXCJBY2lyY3VtZmxleFwiLFwiRWNpcmN1bWZsZXhcIixcIkFhY3V0ZVwiLFwiRWRpZXJlc2lzXCIsXCJFZ3JhdmVcIixcIklhY3V0ZVwiLFwiSWNpcmN1bWZsZXhcIixcIklkaWVyZXNpc1wiLFwiSWdyYXZlXCIsXCJPYWN1dGVcIixcIk9jaXJjdW1mbGV4XCIsXCJhcHBsZVwiLFwiT2dyYXZlXCIsXCJVYWN1dGVcIixcIlVjaXJjdW1mbGV4XCIsXCJVZ3JhdmVcIixcImRvdGxlc3NpXCIsXCJjaXJjdW1mbGV4XCIsXCJ0aWxkZVwiLFwibWFjcm9uXCIsXCJicmV2ZVwiLFwiZG90YWNjZW50XCIsXCJyaW5nXCIsXCJjZWRpbGxhXCIsXCJodW5nYXJ1bWxhdXRcIixcIm9nb25la1wiLFwiY2Fyb25cIixcIkxzbGFzaFwiLFwibHNsYXNoXCIsXCJTY2Fyb25cIixcInNjYXJvblwiLFwiWmNhcm9uXCIsXCJ6Y2Fyb25cIixcImJyb2tlbmJhclwiLFwiRXRoXCIsXCJldGhcIixcIllhY3V0ZVwiLFwieWFjdXRlXCIsXCJUaG9yblwiLFwidGhvcm5cIixcIm1pbnVzXCIsXCJtdWx0aXBseVwiLFwib25lc3VwZXJpb3JcIixcInR3b3N1cGVyaW9yXCIsXCJ0aHJlZXN1cGVyaW9yXCIsXCJvbmVoYWxmXCIsXCJvbmVxdWFydGVyXCIsXCJ0aHJlZXF1YXJ0ZXJzXCIsXCJmcmFuY1wiLFwiR2JyZXZlXCIsXCJnYnJldmVcIixcIklkb3RhY2NlbnRcIixcIlNjZWRpbGxhXCIsXCJzY2VkaWxsYVwiLFwiQ2FjdXRlXCIsXCJjYWN1dGVcIixcIkNjYXJvblwiLFwiY2Nhcm9uXCIsXCJkY3JvYXRcIl07WC5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXt2YXIgYj1hLmNvZGVQb2ludEF0KDApLGM9dGhpcy5mb250LmdseXBocztpZihjKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCs9MSlmb3IodmFyIGU9Yy5nZXQoZCksZj0wO2Y8ZS51bmljb2Rlcy5sZW5ndGg7Zis9MSlpZihlLnVuaWNvZGVzW2ZdPT09YilyZXR1cm4gZDtyZXR1cm4gbnVsbH0sWS5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jbWFwLmdseXBoSW5kZXhNYXBbYS5jb2RlUG9pbnRBdCgwKV18fDB9LFoucHJvdG90eXBlLmNoYXJUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7dmFyIGI9YS5jb2RlUG9pbnRBdCgwKSxjPXRoaXMuZW5jb2RpbmdbYl07cmV0dXJuIHRoaXMuY2hhcnNldC5pbmRleE9mKGMpfSwkLnByb3RvdHlwZS5uYW1lVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5hbWVzLmluZGV4T2YoYSl9LCQucHJvdG90eXBlLmdseXBoSW5kZXhUb05hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubmFtZXNbYV19O3ZhciBSZT17bGluZTphYX07Y2EucHJvdG90eXBlLmJpbmRDb25zdHJ1Y3RvclZhbHVlcz1mdW5jdGlvbihhKXt0aGlzLmluZGV4PWEuaW5kZXh8fDAsdGhpcy5uYW1lPWEubmFtZXx8bnVsbCx0aGlzLnVuaWNvZGU9YS51bmljb2RlfHx2b2lkIDAsdGhpcy51bmljb2Rlcz1hLnVuaWNvZGVzfHx2b2lkIDAhPT1hLnVuaWNvZGU/W2EudW5pY29kZV06W10sYS54TWluJiYodGhpcy54TWluPWEueE1pbiksYS55TWluJiYodGhpcy55TWluPWEueU1pbiksYS54TWF4JiYodGhpcy54TWF4PWEueE1heCksYS55TWF4JiYodGhpcy55TWF4PWEueU1heCksYS5hZHZhbmNlV2lkdGgmJih0aGlzLmFkdmFuY2VXaWR0aD1hLmFkdmFuY2VXaWR0aCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwYXRoXCIsYmEodGhpcyxhLnBhdGgpKX0sY2EucHJvdG90eXBlLmFkZFVuaWNvZGU9ZnVuY3Rpb24oYSl7MD09PXRoaXMudW5pY29kZXMubGVuZ3RoJiYodGhpcy51bmljb2RlPWEpLHRoaXMudW5pY29kZXMucHVzaChhKX0sY2EucHJvdG90eXBlLmdldEJvdW5kaW5nQm94PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aC5nZXRCb3VuZGluZ0JveCgpfSxjYS5wcm90b3R5cGUuZ2V0UGF0aD1mdW5jdGlvbihhLGIsYyxkLGUpe2E9dm9pZCAwIT09YT9hOjAsYj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/Yzo3Mjt2YXIgZixnO2R8fChkPXt9KTt2YXIgaD1kLnhTY2FsZSxpPWQueVNjYWxlO2lmKGQuaGludGluZyYmZSYmZS5oaW50aW5nJiYoZz10aGlzLnBhdGgmJmUuaGludGluZy5leGVjKHRoaXMsYykpLGcpZj1lLmhpbnRpbmcuZ2V0Q29tbWFuZHMoZyksYT1NYXRoLnJvdW5kKGEpLGI9TWF0aC5yb3VuZChiKSxoPWk9MTtlbHNle2Y9dGhpcy5wYXRoLmNvbW1hbmRzO3ZhciBqPTEvdGhpcy5wYXRoLnVuaXRzUGVyRW0qYzt2b2lkIDA9PT1oJiYoaD1qKSx2b2lkIDA9PT1pJiYoaT1qKX1mb3IodmFyIGs9bmV3IHIsbD0wO2w8Zi5sZW5ndGg7bCs9MSl7dmFyIG09ZltsXTtcIk1cIj09PW0udHlwZT9rLm1vdmVUbyhhK20ueCpoLGIrLW0ueSppKTpcIkxcIj09PW0udHlwZT9rLmxpbmVUbyhhK20ueCpoLGIrLW0ueSppKTpcIlFcIj09PW0udHlwZT9rLnF1YWRyYXRpY0N1cnZlVG8oYSttLngxKmgsYistbS55MSppLGErbS54KmgsYistbS55KmkpOlwiQ1wiPT09bS50eXBlP2suY3VydmVUbyhhK20ueDEqaCxiKy1tLnkxKmksYSttLngyKmgsYistbS55MippLGErbS54KmgsYistbS55KmkpOlwiWlwiPT09bS50eXBlJiZrLmNsb3NlUGF0aCgpfXJldHVybiBrfSxjYS5wcm90b3R5cGUuZ2V0Q29udG91cnM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2lmKHZvaWQgMD09PXRoaXMucG9pbnRzKXJldHVybltdO2Zvcih2YXIgYj1bXSxjPVtdLGQ9MDtkPHRoaXMucG9pbnRzLmxlbmd0aDtkKz0xKXt2YXIgZT1hLnBvaW50c1tkXTtjLnB1c2goZSksZS5sYXN0UG9pbnRPZkNvbnRvdXImJihiLnB1c2goYyksYz1bXSl9cmV0dXJuIHhlLmFyZ3VtZW50KDA9PT1jLmxlbmd0aCxcIlRoZXJlIGFyZSBzdGlsbCBwb2ludHMgbGVmdCBpbiB0aGUgY3VycmVudCBjb250b3VyLlwiKSxifSxjYS5wcm90b3R5cGUuZ2V0TWV0cmljcz1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnBhdGguY29tbWFuZHMsYj1bXSxjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF07XCJaXCIhPT1lLnR5cGUmJihiLnB1c2goZS54KSxjLnB1c2goZS55KSksXCJRXCIhPT1lLnR5cGUmJlwiQ1wiIT09ZS50eXBlfHwoYi5wdXNoKGUueDEpLGMucHVzaChlLnkxKSksXCJDXCI9PT1lLnR5cGUmJihiLnB1c2goZS54MiksYy5wdXNoKGUueTIpKX12YXIgZj17eE1pbjpNYXRoLm1pbi5hcHBseShudWxsLGIpLHlNaW46TWF0aC5taW4uYXBwbHkobnVsbCxjKSx4TWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsYikseU1heDpNYXRoLm1heC5hcHBseShudWxsLGMpLGxlZnRTaWRlQmVhcmluZzp0aGlzLmxlZnRTaWRlQmVhcmluZ307cmV0dXJuIGlzRmluaXRlKGYueE1pbil8fChmLnhNaW49MCksaXNGaW5pdGUoZi54TWF4KXx8KGYueE1heD10aGlzLmFkdmFuY2VXaWR0aCksaXNGaW5pdGUoZi55TWluKXx8KGYueU1pbj0wKSxpc0Zpbml0ZShmLnlNYXgpfHwoZi55TWF4PTApLGYucmlnaHRTaWRlQmVhcmluZz10aGlzLmFkdmFuY2VXaWR0aC1mLmxlZnRTaWRlQmVhcmluZy0oZi54TWF4LWYueE1pbiksZn0sY2EucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oYSxiLGMsZCxlKXt0aGlzLmdldFBhdGgoYixjLGQsZSkuZHJhdyhhKX0sY2EucHJvdG90eXBlLmRyYXdQb2ludHM9ZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZShiLGMsZCxlKXt2YXIgZj0yKk1hdGguUEk7YS5iZWdpblBhdGgoKTtmb3IodmFyIGc9MDtnPGIubGVuZ3RoO2crPTEpYS5tb3ZlVG8oYytiW2ddLngqZSxkK2JbZ10ueSplKSxhLmFyYyhjK2JbZ10ueCplLGQrYltnXS55KmUsMiwwLGYsITEpO2EuY2xvc2VQYXRoKCksYS5maWxsKCl9Yj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/YzowLGQ9dm9pZCAwIT09ZD9kOjI0O2Zvcih2YXIgZj0xL3RoaXMucGF0aC51bml0c1BlckVtKmQsZz1bXSxoPVtdLGk9dGhpcy5wYXRoLGo9MDtqPGkuY29tbWFuZHMubGVuZ3RoO2orPTEpe3ZhciBrPWkuY29tbWFuZHNbal07dm9pZCAwIT09ay54JiZnLnB1c2goe3g6ay54LHk6LWsueX0pLHZvaWQgMCE9PWsueDEmJmgucHVzaCh7eDprLngxLHk6LWsueTF9KSx2b2lkIDAhPT1rLngyJiZoLnB1c2goe3g6ay54Mix5Oi1rLnkyfSl9YS5maWxsU3R5bGU9XCJibHVlXCIsZShnLGIsYyxmKSxhLmZpbGxTdHlsZT1cInJlZFwiLGUoaCxiLGMsZil9LGNhLnByb3RvdHlwZS5kcmF3TWV0cmljcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZTtiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD12b2lkIDAhPT1kP2Q6MjQsZT0xL3RoaXMucGF0aC51bml0c1BlckVtKmQsYS5saW5lV2lkdGg9MSxhLnN0cm9rZVN0eWxlPVwiYmxhY2tcIixSZS5saW5lKGEsYiwtMWU0LGIsMWU0KSxSZS5saW5lKGEsLTFlNCxjLDFlNCxjKTt2YXIgZj10aGlzLnhNaW58fDAsZz10aGlzLnlNaW58fDAsaD10aGlzLnhNYXh8fDAsaT10aGlzLnlNYXh8fDAsaj10aGlzLmFkdmFuY2VXaWR0aHx8MDthLnN0cm9rZVN0eWxlPVwiYmx1ZVwiLFJlLmxpbmUoYSxiK2YqZSwtMWU0LGIrZiplLDFlNCksUmUubGluZShhLGIraCplLC0xZTQsYitoKmUsMWU0KSxSZS5saW5lKGEsLTFlNCxjKy1nKmUsMWU0LGMrLWcqZSksUmUubGluZShhLC0xZTQsYystaSplLDFlNCxjKy1pKmUpLGEuc3Ryb2tlU3R5bGU9XCJncmVlblwiLFJlLmxpbmUoYSxiK2oqZSwtMWU0LGIraiplLDFlNCl9LGVhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5nbHlwaHNbYV0mJih0aGlzLmdseXBoc1thXT10aGlzLmdseXBoc1thXSgpKSx0aGlzLmdseXBoc1thXX0sZWEucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oYSxiKXt0aGlzLmdseXBoc1thXT1iLHRoaXMubGVuZ3RoKyt9O3ZhciBTZT17R2x5cGhTZXQ6ZWEsZ2x5cGhMb2FkZXI6ZmEsdHRmR2x5cGhMb2FkZXI6Z2EsY2ZmR2x5cGhMb2FkZXI6aGF9LFRlPVt7bmFtZTpcInZlcnNpb25cIixvcDowLHR5cGU6XCJTSURcIn0se25hbWU6XCJub3RpY2VcIixvcDoxLHR5cGU6XCJTSURcIn0se25hbWU6XCJjb3B5cmlnaHRcIixvcDoxMjAwLHR5cGU6XCJTSURcIn0se25hbWU6XCJmdWxsTmFtZVwiLG9wOjIsdHlwZTpcIlNJRFwifSx7bmFtZTpcImZhbWlseU5hbWVcIixvcDozLHR5cGU6XCJTSURcIn0se25hbWU6XCJ3ZWlnaHRcIixvcDo0LHR5cGU6XCJTSURcIn0se25hbWU6XCJpc0ZpeGVkUGl0Y2hcIixvcDoxMjAxLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcIml0YWxpY0FuZ2xlXCIsb3A6MTIwMix0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJ1bmRlcmxpbmVQb3NpdGlvblwiLG9wOjEyMDMsdHlwZTpcIm51bWJlclwiLHZhbHVlOi0xMDB9LHtuYW1lOlwidW5kZXJsaW5lVGhpY2tuZXNzXCIsb3A6MTIwNCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6NTB9LHtuYW1lOlwicGFpbnRUeXBlXCIsb3A6MTIwNSx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJjaGFyc3RyaW5nVHlwZVwiLG9wOjEyMDYsdHlwZTpcIm51bWJlclwiLHZhbHVlOjJ9LHtuYW1lOlwiZm9udE1hdHJpeFwiLG9wOjEyMDcsdHlwZTpbXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCJdLHZhbHVlOlsuMDAxLDAsMCwuMDAxLDAsMF19LHtuYW1lOlwidW5pcXVlSWRcIixvcDoxMyx0eXBlOlwibnVtYmVyXCJ9LHtuYW1lOlwiZm9udEJCb3hcIixvcDo1LHR5cGU6W1wibnVtYmVyXCIsXCJudW1iZXJcIixcIm51bWJlclwiLFwibnVtYmVyXCJdLHZhbHVlOlswLDAsMCwwXX0se25hbWU6XCJzdHJva2VXaWR0aFwiLG9wOjEyMDgsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwieHVpZFwiLG9wOjE0LHR5cGU6W10sdmFsdWU6bnVsbH0se25hbWU6XCJjaGFyc2V0XCIsb3A6MTUsdHlwZTpcIm9mZnNldFwiLHZhbHVlOjB9LHtuYW1lOlwiZW5jb2RpbmdcIixvcDoxNix0eXBlOlwib2Zmc2V0XCIsdmFsdWU6MH0se25hbWU6XCJjaGFyU3RyaW5nc1wiLG9wOjE3LHR5cGU6XCJvZmZzZXRcIix2YWx1ZTowfSx7bmFtZTpcInByaXZhdGVcIixvcDoxOCx0eXBlOltcIm51bWJlclwiLFwib2Zmc2V0XCJdLHZhbHVlOlswLDBdfSx7bmFtZTpcInJvc1wiLG9wOjEyMzAsdHlwZTpbXCJTSURcIixcIlNJRFwiLFwibnVtYmVyXCJdfSx7bmFtZTpcImNpZEZvbnRWZXJzaW9uXCIsb3A6MTIzMSx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJjaWRGb250UmV2aXNpb25cIixvcDoxMjMyLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNpZEZvbnRUeXBlXCIsb3A6MTIzMyx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJjaWRDb3VudFwiLG9wOjEyMzQsdHlwZTpcIm51bWJlclwiLHZhbHVlOjg3MjB9LHtuYW1lOlwidWlkQmFzZVwiLG9wOjEyMzUsdHlwZTpcIm51bWJlclwifSx7bmFtZTpcImZkQXJyYXlcIixvcDoxMjM2LHR5cGU6XCJvZmZzZXRcIn0se25hbWU6XCJmZFNlbGVjdFwiLG9wOjEyMzcsdHlwZTpcIm9mZnNldFwifSx7bmFtZTpcImZvbnROYW1lXCIsb3A6MTIzOCx0eXBlOlwiU0lEXCJ9XSxVZT1be25hbWU6XCJzdWJyc1wiLG9wOjE5LHR5cGU6XCJvZmZzZXRcIix2YWx1ZTowfSx7bmFtZTpcImRlZmF1bHRXaWR0aFhcIixvcDoyMCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJub21pbmFsV2lkdGhYXCIsb3A6MjEsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9XSxWZT17cGFyc2U6emEsbWFrZTpNYX0sV2U9e3BhcnNlOk5hLG1ha2U6T2F9LFhlPXtwYXJzZTpQYSxtYWtlOlFhfSxZZT17cGFyc2U6UmEsbWFrZTpTYX0sWmU9e21ha2U6VGEscGFyc2U6VWF9LCRlPXtwYXJzZTpWYSxtYWtlOldhfSxfZT1bXCJjb3B5cmlnaHRcIixcImZvbnRGYW1pbHlcIixcImZvbnRTdWJmYW1pbHlcIixcInVuaXF1ZUlEXCIsXCJmdWxsTmFtZVwiLFwidmVyc2lvblwiLFwicG9zdFNjcmlwdE5hbWVcIixcInRyYWRlbWFya1wiLFwibWFudWZhY3R1cmVyXCIsXCJkZXNpZ25lclwiLFwiZGVzY3JpcHRpb25cIixcIm1hbnVmYWN0dXJlclVSTFwiLFwiZGVzaWduZXJVUkxcIixcImxpY2Vuc2VcIixcImxpY2Vuc2VVUkxcIixcInJlc2VydmVkXCIsXCJwcmVmZXJyZWRGYW1pbHlcIixcInByZWZlcnJlZFN1YmZhbWlseVwiLFwiY29tcGF0aWJsZUZ1bGxOYW1lXCIsXCJzYW1wbGVUZXh0XCIsXCJwb3N0U2NyaXB0RmluZEZvbnROYW1lXCIsXCJ3d3NGYW1pbHlcIixcInd3c1N1YmZhbWlseVwiXSxhZj17MDpcImVuXCIsMTpcImZyXCIsMjpcImRlXCIsMzpcIml0XCIsNDpcIm5sXCIsNTpcInN2XCIsNjpcImVzXCIsNzpcImRhXCIsODpcInB0XCIsOTpcIm5vXCIsMTA6XCJoZVwiLDExOlwiamFcIiwxMjpcImFyXCIsMTM6XCJmaVwiLDE0OlwiZWxcIiwxNTpcImlzXCIsMTY6XCJtdFwiLDE3OlwidHJcIiwxODpcImhyXCIsMTk6XCJ6aC1IYW50XCIsMjA6XCJ1clwiLDIxOlwiaGlcIiwyMjpcInRoXCIsMjM6XCJrb1wiLDI0OlwibHRcIiwyNTpcInBsXCIsMjY6XCJodVwiLDI3OlwiZXNcIiwyODpcImx2XCIsMjk6XCJzZVwiLDMwOlwiZm9cIiwzMTpcImZhXCIsMzI6XCJydVwiLDMzOlwiemhcIiwzNDpcIm5sLUJFXCIsMzU6XCJnYVwiLDM2Olwic3FcIiwzNzpcInJvXCIsMzg6XCJjelwiLDM5Olwic2tcIiw0MDpcInNpXCIsNDE6XCJ5aVwiLDQyOlwic3JcIiw0MzpcIm1rXCIsNDQ6XCJiZ1wiLDQ1OlwidWtcIiw0NjpcImJlXCIsNDc6XCJ1elwiLDQ4Olwia2tcIiw0OTpcImF6LUN5cmxcIiw1MDpcImF6LUFyYWJcIiw1MTpcImh5XCIsNTI6XCJrYVwiLDUzOlwibW9cIiw1NDpcImt5XCIsNTU6XCJ0Z1wiLDU2OlwidGtcIiw1NzpcIm1uLUNOXCIsNTg6XCJtblwiLDU5OlwicHNcIiw2MDpcImtzXCIsNjE6XCJrdVwiLDYyOlwic2RcIiw2MzpcImJvXCIsNjQ6XCJuZVwiLDY1Olwic2FcIiw2NjpcIm1yXCIsNjc6XCJiblwiLDY4OlwiYXNcIiw2OTpcImd1XCIsNzA6XCJwYVwiLDcxOlwib3JcIiw3MjpcIm1sXCIsNzM6XCJrblwiLDc0OlwidGFcIiw3NTpcInRlXCIsNzY6XCJzaVwiLDc3OlwibXlcIiw3ODpcImttXCIsNzk6XCJsb1wiLDgwOlwidmlcIiw4MTpcImlkXCIsODI6XCJ0bFwiLDgzOlwibXNcIiw4NDpcIm1zLUFyYWJcIiw4NTpcImFtXCIsODY6XCJ0aVwiLDg3Olwib21cIiw4ODpcInNvXCIsODk6XCJzd1wiLDkwOlwicndcIiw5MTpcInJuXCIsOTI6XCJueVwiLDkzOlwibWdcIiw5NDpcImVvXCIsMTI4OlwiY3lcIiwxMjk6XCJldVwiLDEzMDpcImNhXCIsMTMxOlwibGFcIiwxMzI6XCJxdVwiLDEzMzpcImduXCIsMTM0OlwiYXlcIiwxMzU6XCJ0dFwiLDEzNjpcInVnXCIsMTM3OlwiZHpcIiwxMzg6XCJqdlwiLDEzOTpcInN1XCIsMTQwOlwiZ2xcIiwxNDE6XCJhZlwiLDE0MjpcImJyXCIsMTQzOlwiaXVcIiwxNDQ6XCJnZFwiLDE0NTpcImd2XCIsMTQ2OlwiZ2FcIiwxNDc6XCJ0b1wiLDE0ODpcImVsLXBvbHl0b25cIiwxNDk6XCJrbFwiLDE1MDpcImF6XCIsMTUxOlwibm5cIn0sYmY9ezA6MCwxOjAsMjowLDM6MCw0OjAsNTowLDY6MCw3OjAsODowLDk6MCwxMDo1LDExOjEsMTI6NCwxMzowLDE0OjYsMTU6MCwxNjowLDE3OjAsMTg6MCwxOToyLDIwOjQsXG4yMTo5LDIyOjIxLDIzOjMsMjQ6MjksMjU6MjksMjY6MjksMjc6MjksMjg6MjksMjk6MCwzMDowLDMxOjQsMzI6NywzMzoyNSwzNDowLDM1OjAsMzY6MCwzNzowLDM4OjI5LDM5OjI5LDQwOjAsNDE6NSw0Mjo3LDQzOjcsNDQ6Nyw0NTo3LDQ2OjcsNDc6Nyw0ODo3LDQ5OjcsNTA6NCw1MToyNCw1MjoyMyw1Mzo3LDU0OjcsNTU6Nyw1Njo3LDU3OjI3LDU4OjcsNTk6NCw2MDo0LDYxOjQsNjI6NCw2MzoyNiw2NDo5LDY1OjksNjY6OSw2NzoxMyw2ODoxMyw2OToxMSw3MDoxMCw3MToxMiw3MjoxNyw3MzoxNiw3NDoxNCw3NToxNSw3NjoxOCw3NzoxOSw3ODoyMCw3OToyMiw4MDozMCw4MTowLDgyOjAsODM6MCw4NDo0LDg1OjI4LDg2OjI4LDg3OjI4LDg4OjAsODk6MCw5MDowLDkxOjAsOTI6MCw5MzowLDk0OjAsMTI4OjAsMTI5OjAsMTMwOjAsMTMxOjAsMTMyOjAsMTMzOjAsMTM0OjAsMTM1OjcsMTM2OjQsMTM3OjI2LDEzODowLDEzOTowLDE0MDowLDE0MTowLDE0MjowLDE0MzoyOCwxNDQ6MCwxNDU6MCwxNDY6MCwxNDc6MCwxNDg6NiwxNDk6MCwxNTA6MCwxNTE6MH0sY2Y9ezEwNzg6XCJhZlwiLDEwNTI6XCJzcVwiLDExNTY6XCJnc3dcIiwxMTE4OlwiYW1cIiw1MTIxOlwiYXItRFpcIiwxNTM2MTpcImFyLUJIXCIsMzA3MzpcImFyXCIsMjA0OTpcImFyLUlRXCIsMTEyNjU6XCJhci1KT1wiLDEzMzEzOlwiYXItS1dcIiwxMjI4OTpcImFyLUxCXCIsNDA5NzpcImFyLUxZXCIsNjE0NTpcImFyeVwiLDgxOTM6XCJhci1PTVwiLDE2Mzg1OlwiYXItUUFcIiwxMDI1OlwiYXItU0FcIiwxMDI0MTpcImFyLVNZXCIsNzE2OTpcImFlYlwiLDE0MzM3OlwiYXItQUVcIiw5MjE3OlwiYXItWUVcIiwxMDY3OlwiaHlcIiwxMTAxOlwiYXNcIiwyMDkyOlwiYXotQ3lybFwiLDEwNjg6XCJhelwiLDExMzM6XCJiYVwiLDEwNjk6XCJldVwiLDEwNTk6XCJiZVwiLDIxMTc6XCJiblwiLDEwOTM6XCJibi1JTlwiLDgyMTg6XCJicy1DeXJsXCIsNTE0NjpcImJzXCIsMTE1MDpcImJyXCIsMTAyNjpcImJnXCIsMTAyNzpcImNhXCIsMzA3NjpcInpoLUhLXCIsNTEyNDpcInpoLU1PXCIsMjA1MjpcInpoXCIsNDEwMDpcInpoLVNHXCIsMTAyODpcInpoLVRXXCIsMTE1NTpcImNvXCIsMTA1MDpcImhyXCIsNDEyMjpcImhyLUJBXCIsMTAyOTpcImNzXCIsMTAzMDpcImRhXCIsMTE2NDpcInByc1wiLDExMjU6XCJkdlwiLDIwNjc6XCJubC1CRVwiLDEwNDM6XCJubFwiLDMwODE6XCJlbi1BVVwiLDEwMjQ5OlwiZW4tQlpcIiw0MTA1OlwiZW4tQ0FcIiw5MjI1OlwiZW4tMDI5XCIsMTYzOTM6XCJlbi1JTlwiLDYxNTM6XCJlbi1JRVwiLDgyMDE6XCJlbi1KTVwiLDE3NDE3OlwiZW4tTVlcIiw1MTI5OlwiZW4tTlpcIiwxMzMyMTpcImVuLVBIXCIsMTg0NDE6XCJlbi1TR1wiLDcxNzc6XCJlbi1aQVwiLDExMjczOlwiZW4tVFRcIiwyMDU3OlwiZW4tR0JcIiwxMDMzOlwiZW5cIiwxMjI5NzpcImVuLVpXXCIsMTA2MTpcImV0XCIsMTA4MDpcImZvXCIsMTEyNDpcImZpbFwiLDEwMzU6XCJmaVwiLDIwNjA6XCJmci1CRVwiLDMwODQ6XCJmci1DQVwiLDEwMzY6XCJmclwiLDUxMzI6XCJmci1MVVwiLDYxNTY6XCJmci1NQ1wiLDQxMDg6XCJmci1DSFwiLDExMjI6XCJmeVwiLDExMTA6XCJnbFwiLDEwNzk6XCJrYVwiLDMwNzk6XCJkZS1BVFwiLDEwMzE6XCJkZVwiLDUxMjc6XCJkZS1MSVwiLDQxMDM6XCJkZS1MVVwiLDIwNTU6XCJkZS1DSFwiLDEwMzI6XCJlbFwiLDExMzU6XCJrbFwiLDEwOTU6XCJndVwiLDExMjg6XCJoYVwiLDEwMzc6XCJoZVwiLDEwODE6XCJoaVwiLDEwMzg6XCJodVwiLDEwMzk6XCJpc1wiLDExMzY6XCJpZ1wiLDEwNTc6XCJpZFwiLDExMTc6XCJpdVwiLDIxNDE6XCJpdS1MYXRuXCIsMjEwODpcImdhXCIsMTA3NjpcInhoXCIsMTA3NzpcInp1XCIsMTA0MDpcIml0XCIsMjA2NDpcIml0LUNIXCIsMTA0MTpcImphXCIsMTA5OTpcImtuXCIsMTA4NzpcImtrXCIsMTEwNzpcImttXCIsMTE1ODpcInF1Y1wiLDExNTk6XCJyd1wiLDEwODk6XCJzd1wiLDExMTE6XCJrb2tcIiwxMDQyOlwia29cIiwxMDg4Olwia3lcIiwxMTA4OlwibG9cIiwxMDYyOlwibHZcIiwxMDYzOlwibHRcIiwyMDk0OlwiZHNiXCIsMTEzNDpcImxiXCIsMTA3MTpcIm1rXCIsMjExMDpcIm1zLUJOXCIsMTA4NjpcIm1zXCIsMTEwMDpcIm1sXCIsMTA4MjpcIm10XCIsMTE1MzpcIm1pXCIsMTE0NjpcImFyblwiLDExMDI6XCJtclwiLDExNDg6XCJtb2hcIiwxMTA0OlwibW5cIiwyMTI4OlwibW4tQ05cIiwxMTIxOlwibmVcIiwxMDQ0OlwibmJcIiwyMDY4Olwibm5cIiwxMTU0Olwib2NcIiwxMDk2Olwib3JcIiwxMTIzOlwicHNcIiwxMDQ1OlwicGxcIiwxMDQ2OlwicHRcIiwyMDcwOlwicHQtUFRcIiwxMDk0OlwicGFcIiwxMTMxOlwicXUtQk9cIiwyMTU1OlwicXUtRUNcIiwzMTc5OlwicXVcIiwxMDQ4Olwicm9cIiwxMDQ3Olwicm1cIiwxMDQ5OlwicnVcIiw5Mjc1Olwic21uXCIsNDE1NTpcInNtai1OT1wiLDUxNzk6XCJzbWpcIiwzMTMxOlwic2UtRklcIiwxMDgzOlwic2VcIiwyMTA3Olwic2UtU0VcIiw4MjUxOlwic21zXCIsNjIwMzpcInNtYS1OT1wiLDcyMjc6XCJzbXNcIiwxMTAzOlwic2FcIiw3MTk0Olwic3ItQ3lybC1CQVwiLDMwOTg6XCJzclwiLDYxNzA6XCJzci1MYXRuLUJBXCIsMjA3NDpcInNyLUxhdG5cIiwxMTMyOlwibnNvXCIsMTA3NDpcInRuXCIsMTExNTpcInNpXCIsMTA1MTpcInNrXCIsMTA2MDpcInNsXCIsMTEyNzQ6XCJlcy1BUlwiLDE2Mzk0OlwiZXMtQk9cIiwxMzMyMjpcImVzLUNMXCIsOTIyNjpcImVzLUNPXCIsNTEzMDpcImVzLUNSXCIsNzE3ODpcImVzLURPXCIsMTIyOTg6XCJlcy1FQ1wiLDE3NDE4OlwiZXMtU1ZcIiw0MTA2OlwiZXMtR1RcIiwxODQ0MjpcImVzLUhOXCIsMjA1ODpcImVzLU1YXCIsMTk0NjY6XCJlcy1OSVwiLDYxNTQ6XCJlcy1QQVwiLDE1MzcwOlwiZXMtUFlcIiwxMDI1MDpcImVzLVBFXCIsMjA0OTA6XCJlcy1QUlwiLDMwODI6XCJlc1wiLDEwMzQ6XCJlc1wiLDIxNTE0OlwiZXMtVVNcIiwxNDM0NjpcImVzLVVZXCIsODIwMjpcImVzLVZFXCIsMjA3NzpcInN2LUZJXCIsMTA1MzpcInN2XCIsMTExNDpcInN5clwiLDEwNjQ6XCJ0Z1wiLDIxNDM6XCJ0em1cIiwxMDk3OlwidGFcIiwxMDkyOlwidHRcIiwxMDk4OlwidGVcIiwxMDU0OlwidGhcIiwxMTA1OlwiYm9cIiwxMDU1OlwidHJcIiwxMDkwOlwidGtcIiwxMTUyOlwidWdcIiwxMDU4OlwidWtcIiwxMDcwOlwiaHNiXCIsMTA1NjpcInVyXCIsMjExNTpcInV6LUN5cmxcIiwxMDkxOlwidXpcIiwxMDY2OlwidmlcIiwxMTA2OlwiY3lcIiwxMTYwOlwid29cIiwxMTU3Olwic2FoXCIsMTE0NDpcImlpXCIsMTEzMDpcInlvXCJ9LGRmPVwidXRmLTE2XCIsZWY9ezA6XCJtYWNpbnRvc2hcIiwxOlwieC1tYWMtamFwYW5lc2VcIiwyOlwieC1tYWMtY2hpbmVzZXRyYWRcIiwzOlwieC1tYWMta29yZWFuXCIsNjpcIngtbWFjLWdyZWVrXCIsNzpcIngtbWFjLWN5cmlsbGljXCIsOTpcIngtbWFjLWRldmFuYWdhaVwiLDEwOlwieC1tYWMtZ3VybXVraGlcIiwxMTpcIngtbWFjLWd1amFyYXRpXCIsMTI6XCJ4LW1hYy1vcml5YVwiLDEzOlwieC1tYWMtYmVuZ2FsaVwiLDE0OlwieC1tYWMtdGFtaWxcIiwxNTpcIngtbWFjLXRlbHVndVwiLDE2OlwieC1tYWMta2FubmFkYVwiLDE3OlwieC1tYWMtbWFsYXlhbGFtXCIsMTg6XCJ4LW1hYy1zaW5oYWxlc2VcIiwxOTpcIngtbWFjLWJ1cm1lc2VcIiwyMDpcIngtbWFjLWtobWVyXCIsMjE6XCJ4LW1hYy10aGFpXCIsMjI6XCJ4LW1hYy1sYW9cIiwyMzpcIngtbWFjLWdlb3JnaWFuXCIsMjQ6XCJ4LW1hYy1hcm1lbmlhblwiLDI1OlwieC1tYWMtY2hpbmVzZXNpbXBcIiwyNjpcIngtbWFjLXRpYmV0YW5cIiwyNzpcIngtbWFjLW1vbmdvbGlhblwiLDI4OlwieC1tYWMtZXRoaW9waWNcIiwyOTpcIngtbWFjLWNlXCIsMzA6XCJ4LW1hYy12aWV0bmFtZXNlXCIsMzE6XCJ4LW1hYy1leHRhcmFiaWNcIn0sZmY9ezE1OlwieC1tYWMtaWNlbGFuZGljXCIsMTc6XCJ4LW1hYy10dXJraXNoXCIsMTg6XCJ4LW1hYy1jcm9hdGlhblwiLDI0OlwieC1tYWMtY2VcIiwyNTpcIngtbWFjLWNlXCIsMjY6XCJ4LW1hYy1jZVwiLDI3OlwieC1tYWMtY2VcIiwyODpcIngtbWFjLWNlXCIsMzA6XCJ4LW1hYy1pY2VsYW5kaWNcIiwzNzpcIngtbWFjLXJvbWFuaWFuXCIsMzg6XCJ4LW1hYy1jZVwiLDM5OlwieC1tYWMtY2VcIiw0MDpcIngtbWFjLWNlXCIsMTQzOlwieC1tYWMtaW51aXRcIiwxNDY6XCJ4LW1hYy1nYWVsaWNcIn0sZ2Y9e3BhcnNlOlphLG1ha2U6Y2J9LGhmPVt7YmVnaW46MCxlbmQ6MTI3fSx7YmVnaW46MTI4LGVuZDoyNTV9LHtiZWdpbjoyNTYsZW5kOjM4M30se2JlZ2luOjM4NCxlbmQ6NTkxfSx7YmVnaW46NTkyLGVuZDo2ODd9LHtiZWdpbjo2ODgsZW5kOjc2N30se2JlZ2luOjc2OCxlbmQ6ODc5fSx7YmVnaW46ODgwLGVuZDoxMDIzfSx7YmVnaW46MTEzOTIsZW5kOjExNTE5fSx7YmVnaW46MTAyNCxlbmQ6MTI3OX0se2JlZ2luOjEzMjgsZW5kOjE0MjN9LHtiZWdpbjoxNDI0LGVuZDoxNTM1fSx7YmVnaW46NDIyNDAsZW5kOjQyNTU5fSx7YmVnaW46MTUzNixlbmQ6MTc5MX0se2JlZ2luOjE5ODQsZW5kOjIwNDd9LHtiZWdpbjoyMzA0LGVuZDoyNDMxfSx7YmVnaW46MjQzMixlbmQ6MjU1OX0se2JlZ2luOjI1NjAsZW5kOjI2ODd9LHtiZWdpbjoyNjg4LGVuZDoyODE1fSx7YmVnaW46MjgxNixlbmQ6Mjk0M30se2JlZ2luOjI5NDQsZW5kOjMwNzF9LHtiZWdpbjozMDcyLGVuZDozMTk5fSx7YmVnaW46MzIwMCxlbmQ6MzMyN30se2JlZ2luOjMzMjgsZW5kOjM0NTV9LHtiZWdpbjozNTg0LGVuZDozNzExfSx7YmVnaW46MzcxMixlbmQ6MzgzOX0se2JlZ2luOjQyNTYsZW5kOjQzNTF9LHtiZWdpbjo2OTEyLGVuZDo3MDM5fSx7YmVnaW46NDM1MixlbmQ6NDYwN30se2JlZ2luOjc2ODAsZW5kOjc5MzV9LHtiZWdpbjo3OTM2LGVuZDo4MTkxfSx7YmVnaW46ODE5MixlbmQ6ODMwM30se2JlZ2luOjgzMDQsZW5kOjgzNTF9LHtiZWdpbjo4MzUyLGVuZDo4Mzk5fSx7YmVnaW46ODQwMCxlbmQ6ODQ0N30se2JlZ2luOjg0NDgsZW5kOjg1Mjd9LHtiZWdpbjo4NTI4LGVuZDo4NTkxfSx7YmVnaW46ODU5MixlbmQ6ODcwM30se2JlZ2luOjg3MDQsZW5kOjg5NTl9LHtiZWdpbjo4OTYwLGVuZDo5MjE1fSx7YmVnaW46OTIxNixlbmQ6OTI3OX0se2JlZ2luOjkyODAsZW5kOjkzMTF9LHtiZWdpbjo5MzEyLGVuZDo5NDcxfSx7YmVnaW46OTQ3MixlbmQ6OTU5OX0se2JlZ2luOjk2MDAsZW5kOjk2MzF9LHtiZWdpbjo5NjMyLGVuZDo5NzI3fSx7YmVnaW46OTcyOCxlbmQ6OTk4M30se2JlZ2luOjk5ODQsZW5kOjEwMTc1fSx7YmVnaW46MTIyODgsZW5kOjEyMzUxfSx7YmVnaW46MTIzNTIsZW5kOjEyNDQ3fSx7YmVnaW46MTI0NDgsZW5kOjEyNTQzfSx7YmVnaW46MTI1NDQsZW5kOjEyNTkxfSx7YmVnaW46MTI1OTIsZW5kOjEyNjg3fSx7YmVnaW46NDMwNzIsZW5kOjQzMTM1fSx7YmVnaW46MTI4MDAsZW5kOjEzMDU1fSx7YmVnaW46MTMwNTYsZW5kOjEzMzExfSx7YmVnaW46NDQwMzIsZW5kOjU1MjE1fSx7YmVnaW46NTUyOTYsZW5kOjU3MzQzfSx7YmVnaW46Njc4NDAsZW5kOjY3ODcxfSx7YmVnaW46MTk5NjgsZW5kOjQwOTU5fSx7YmVnaW46NTczNDQsZW5kOjYzNzQzfSx7YmVnaW46MTI3MzYsZW5kOjEyNzgzfSx7YmVnaW46NjQyNTYsZW5kOjY0MzM1fSx7YmVnaW46NjQzMzYsZW5kOjY1MDIzfSx7YmVnaW46NjUwNTYsZW5kOjY1MDcxfSx7YmVnaW46NjUwNDAsZW5kOjY1MDU1fSx7YmVnaW46NjUxMDQsZW5kOjY1MTM1fSx7YmVnaW46NjUxMzYsZW5kOjY1Mjc5fSx7YmVnaW46NjUyODAsZW5kOjY1NTE5fSx7YmVnaW46NjU1MjAsZW5kOjY1NTM1fSx7YmVnaW46Mzg0MCxlbmQ6NDA5NX0se2JlZ2luOjE3OTIsZW5kOjE4NzF9LHtiZWdpbjoxOTIwLGVuZDoxOTgzfSx7YmVnaW46MzQ1NixlbmQ6MzU4M30se2JlZ2luOjQwOTYsZW5kOjQyNTV9LHtiZWdpbjo0NjA4LGVuZDo0OTkxfSx7YmVnaW46NTAyNCxlbmQ6NTExOX0se2JlZ2luOjUxMjAsZW5kOjU3NTl9LHtiZWdpbjo1NzYwLGVuZDo1NzkxfSx7YmVnaW46NTc5MixlbmQ6NTg4N30se2JlZ2luOjYwMTYsZW5kOjYxNDN9LHtiZWdpbjo2MTQ0LGVuZDo2MzE5fSx7YmVnaW46MTAyNDAsZW5kOjEwNDk1fSx7YmVnaW46NDA5NjAsZW5kOjQyMTI3fSx7YmVnaW46NTg4OCxlbmQ6NTkxOX0se2JlZ2luOjY2MzA0LGVuZDo2NjM1MX0se2JlZ2luOjY2MzUyLGVuZDo2NjM4M30se2JlZ2luOjY2NTYwLGVuZDo2NjYzOX0se2JlZ2luOjExODc4NCxlbmQ6MTE5MDM5fSx7YmVnaW46MTE5ODA4LGVuZDoxMjA4MzF9LHtiZWdpbjoxMDQ0NDgwLGVuZDoxMDQ4NTczfSx7YmVnaW46NjUwMjQsZW5kOjY1MDM5fSx7YmVnaW46OTE3NTA0LGVuZDo5MTc2MzF9LHtiZWdpbjo2NDAwLGVuZDo2NDc5fSx7YmVnaW46NjQ4MCxlbmQ6NjUyN30se2JlZ2luOjY1MjgsZW5kOjY2MjN9LHtiZWdpbjo2NjU2LGVuZDo2Njg3fSx7YmVnaW46MTEyNjQsZW5kOjExMzU5fSx7YmVnaW46MTE1NjgsZW5kOjExNjQ3fSx7YmVnaW46MTk5MDQsZW5kOjE5OTY3fSx7YmVnaW46NDMwMDgsZW5kOjQzMDU1fSx7YmVnaW46NjU1MzYsZW5kOjY1NjYzfSx7YmVnaW46NjU4NTYsZW5kOjY1OTM1fSx7YmVnaW46NjY0MzIsZW5kOjY2NDYzfSx7YmVnaW46NjY0NjQsZW5kOjY2NTI3fSx7YmVnaW46NjY2NDAsZW5kOjY2Njg3fSx7YmVnaW46NjY2ODgsZW5kOjY2NzM1fSx7YmVnaW46Njc1ODQsZW5kOjY3NjQ3fSx7YmVnaW46NjgwOTYsZW5kOjY4MTkxfSx7YmVnaW46MTE5NTUyLGVuZDoxMTk2NDd9LHtiZWdpbjo3MzcyOCxlbmQ6NzQ3NTF9LHtiZWdpbjoxMTk2NDgsZW5kOjExOTY3OX0se2JlZ2luOjcwNDAsZW5kOjcxMDN9LHtiZWdpbjo3MTY4LGVuZDo3MjQ3fSx7YmVnaW46NzI0OCxlbmQ6NzI5NX0se2JlZ2luOjQzMTM2LGVuZDo0MzIzMX0se2JlZ2luOjQzMjY0LGVuZDo0MzMxMX0se2JlZ2luOjQzMzEyLGVuZDo0MzM1OX0se2JlZ2luOjQzNTIwLGVuZDo0MzYxNX0se2JlZ2luOjY1OTM2LGVuZDo2NTk5OX0se2JlZ2luOjY2ZTMsZW5kOjY2MDQ3fSx7YmVnaW46NjYyMDgsZW5kOjY2MjcxfSx7YmVnaW46MTI3MDI0LGVuZDoxMjcxMzV9XSxqZj17cGFyc2U6ZWIsbWFrZTpmYix1bmljb2RlUmFuZ2VzOmhmLGdldFVuaWNvZGVSYW5nZTpkYn0sa2Y9e3BhcnNlOmdiLG1ha2U6aGJ9LGxmPW5ldyBBcnJheSg5KTtsZlsxXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIDE9PT1iP3tzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGRlbHRhR2x5cGhJZDp0aGlzLnBhcnNlVVNob3J0KCl9OjI9PT1iP3tzdWJzdEZvcm1hdDoyLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHN1YnN0aXR1dGU6dGhpcy5wYXJzZU9mZnNldDE2TGlzdCgpfTp2b2lkIHhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IGxvb2t1cCB0eXBlIDEgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKX0sbGZbMl09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBNdWx0aXBsZSBTdWJzdGl0dXRpb24gU3VidGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpLHtzdWJzdEZvcm1hdDphLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHNlcXVlbmNlczp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoKX19LGxmWzNdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgQWx0ZXJuYXRlIFN1YnN0aXR1dGlvbiBTdWJ0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksYWx0ZXJuYXRlU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoKX19LGxmWzRdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgbGlnYXR1cmUgdGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpLHtzdWJzdEZvcm1hdDphLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGxpZ2F0dXJlU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoZnVuY3Rpb24oKXtyZXR1cm57bGlnR2x5cGg6dGhpcy5wYXJzZVVTaG9ydCgpLGNvbXBvbmVudHM6dGhpcy5wYXJzZVVTaG9ydExpc3QodGhpcy5wYXJzZVVTaG9ydCgpLTEpfX0pfX07dmFyIG1mPXtzZXF1ZW5jZUluZGV4OlEudVNob3J0LGxvb2t1cExpc3RJbmRleDpRLnVTaG9ydH07bGZbNV09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO2lmKDE9PT1iKXJldHVybntzdWJzdEZvcm1hdDpiLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHJ1bGVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKSxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm57aW5wdXQ6dGhpcy5wYXJzZVVTaG9ydExpc3QoYS0xKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KGIsbWYpfX0pfTtpZigyPT09YilyZXR1cm57c3Vic3RGb3JtYXQ6Yixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxjbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxjbGFzc1NldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpLGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntjbGFzc2VzOnRoaXMucGFyc2VVU2hvcnRMaXN0KGEtMSksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChiLG1mKX19KX07aWYoMz09PWIpe3ZhciBjPXRoaXMucGFyc2VVU2hvcnQoKSxkPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm57c3Vic3RGb3JtYXQ6Yixjb3ZlcmFnZXM6dGhpcy5wYXJzZUxpc3QoYyxRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QoZCxtZil9fXhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IGxvb2t1cCB0eXBlIDUgZm9ybWF0IG11c3QgYmUgMSwgMiBvciAzLlwiKX0sbGZbNl09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiAxPT09Yj97c3Vic3RGb3JtYXQ6MSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxjaGFpblJ1bGVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3JldHVybntiYWNrdHJhY2s6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxpbnB1dDp0aGlzLnBhcnNlVVNob3J0TGlzdCh0aGlzLnBhcnNlU2hvcnQoKS0xKSxsb29rYWhlYWQ6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KG1mKX19KX06Mj09PWI/e3N1YnN0Rm9ybWF0OjIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksYmFja3RyYWNrQ2xhc3NEZWY6dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksaW5wdXRDbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxsb29rYWhlYWRDbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxjaGFpbkNsYXNzU2V0OnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3JldHVybntiYWNrdHJhY2s6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxpbnB1dDp0aGlzLnBhcnNlVVNob3J0TGlzdCh0aGlzLnBhcnNlU2hvcnQoKS0xKSxsb29rYWhlYWQ6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KG1mKX19KX06Mz09PWI/e3N1YnN0Rm9ybWF0OjMsYmFja3RyYWNrQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxpbnB1dENvdmVyYWdlOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmNvdmVyYWdlKSksbG9va2FoZWFkQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KG1mKX06dm9pZCB4ZS5hc3NlcnQoITEsXCIweFwiK2EudG9TdHJpbmcoMTYpK1wiOiBsb29rdXAgdHlwZSA2IGZvcm1hdCBtdXN0IGJlIDEsIDIgb3IgMy5cIil9LGxmWzddPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3hlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBFeHRlbnNpb24gU3Vic3RpdHV0aW9uIHN1YnRhYmxlIGlkZW50aWZpZXItZm9ybWF0IG11c3QgYmUgMVwiKTt2YXIgYj10aGlzLnBhcnNlVVNob3J0KCksYz1uZXcgUSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5wYXJzZVVMb25nKCkpO3JldHVybntzdWJzdEZvcm1hdDoxLGxvb2t1cFR5cGU6YixleHRlbnNpb246bGZbYl0uY2FsbChjKX19LGxmWzhdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgUmV2ZXJzZSBDaGFpbmluZyBDb250ZXh0dWFsIFNpbmdsZSBTdWJzdGl0dXRpb24gU3VidGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpLHtzdWJzdEZvcm1hdDphLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGJhY2t0cmFja0NvdmVyYWdlOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmNvdmVyYWdlKSksbG9va2FoZWFkQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxzdWJzdGl0dXRlczp0aGlzLnBhcnNlVVNob3J0TGlzdCgpfX07dmFyIG5mPW5ldyBBcnJheSg5KTtuZlsxXT1mdW5jdGlvbihhKXtyZXR1cm4gMT09PWEuc3Vic3RGb3JtYXQ/bmV3IEllLlRhYmxlKFwic3Vic3RpdHV0aW9uVGFibGVcIixbe25hbWU6XCJzdWJzdEZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcImNvdmVyYWdlXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkNvdmVyYWdlKGEuY292ZXJhZ2UpfSx7bmFtZTpcImRlbHRhR2x5cGhJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmRlbHRhR2x5cGhJZH1dKTpuZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjJ9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9XS5jb25jYXQoSWUudXNob3J0TGlzdChcInN1YnN0aXR1dGVcIixhLnN1YnN0aXR1dGUpKSl9LG5mWzNdPWZ1bmN0aW9uKGEpe3JldHVybiB4ZS5hc3NlcnQoMT09PWEuc3Vic3RGb3JtYXQsXCJMb29rdXAgdHlwZSAzIHN1YnN0Rm9ybWF0IG11c3QgYmUgMS5cIiksbmV3IEllLlRhYmxlKFwic3Vic3RpdHV0aW9uVGFibGVcIixbe25hbWU6XCJzdWJzdEZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcImNvdmVyYWdlXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkNvdmVyYWdlKGEuY292ZXJhZ2UpfV0uY29uY2F0KEllLnRhYmxlTGlzdChcImFsdFNldFwiLGEuYWx0ZXJuYXRlU2V0cyxmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiYWx0ZXJuYXRlU2V0VGFibGVcIixJZS51c2hvcnRMaXN0KFwiYWx0ZXJuYXRlXCIsYSkpfSkpKX0sbmZbNF09ZnVuY3Rpb24oYSl7cmV0dXJuIHhlLmFzc2VydCgxPT09YS5zdWJzdEZvcm1hdCxcIkxvb2t1cCB0eXBlIDQgc3Vic3RGb3JtYXQgbXVzdCBiZSAxLlwiKSxuZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9XS5jb25jYXQoSWUudGFibGVMaXN0KFwibGlnU2V0XCIsYS5saWdhdHVyZVNldHMsZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcImxpZ2F0dXJlU2V0VGFibGVcIixJZS50YWJsZUxpc3QoXCJsaWdhdHVyZVwiLGEsZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcImxpZ2F0dXJlVGFibGVcIixbe25hbWU6XCJsaWdHbHlwaFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmxpZ0dseXBofV0uY29uY2F0KEllLnVzaG9ydExpc3QoXCJjb21wb25lbnRcIixhLmNvbXBvbmVudHMsYS5jb21wb25lbnRzLmxlbmd0aCsxKSkpfSkpfSkpKX07dmFyIG9mPXtwYXJzZTppYixtYWtlOmpifSxwZj17cGFyc2U6a2IsbWFrZTpsYn0scWY9e21ha2U6cGIsZm9udFRvVGFibGU6c2IsY29tcHV0ZUNoZWNrU3VtOm5ifTt3Yi5wcm90b3R5cGU9e3NlYXJjaFRhZzp0YixiaW5TZWFyY2g6dWIsZ2V0VGFibGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5mb250LnRhYmxlc1t0aGlzLnRhYmxlTmFtZV07cmV0dXJuIWImJmEmJihiPXRoaXMuZm9udC50YWJsZXNbdGhpcy50YWJsZU5hbWVdPXRoaXMuY3JlYXRlRGVmYXVsdFRhYmxlKCkpLGJ9LGdldFNjcmlwdE5hbWVzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRUYWJsZSgpO3JldHVybiBhP2Euc2NyaXB0cy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEudGFnfSk6W119LGdldERlZmF1bHRTY3JpcHROYW1lOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRUYWJsZSgpO2lmKGEpe2Zvcih2YXIgYj0hMSxjPTA7YzxhLnNjcmlwdHMubGVuZ3RoO2MrKyl7dmFyIGQ9YS5zY3JpcHRzW2NdLnRhZztpZihcIkRGTFRcIj09PWQpcmV0dXJuIGQ7XCJsYXRuXCI9PT1kJiYoYj0hMCl9cmV0dXJuIGI/XCJsYXRuXCI6dm9pZCAwfX0sZ2V0U2NyaXB0VGFibGU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmdldFRhYmxlKGIpO2lmKGMpe2E9YXx8XCJERkxUXCI7dmFyIGQ9Yy5zY3JpcHRzLGU9dGIoYy5zY3JpcHRzLGEpO2lmKGU+PTApcmV0dXJuIGRbZV0uc2NyaXB0O2lmKGIpe3ZhciBmPXt0YWc6YSxzY3JpcHQ6e2RlZmF1bHRMYW5nU3lzOntyZXNlcnZlZDowLHJlcUZlYXR1cmVJbmRleDo2NTUzNSxmZWF0dXJlSW5kZXhlczpbXX0sbGFuZ1N5c1JlY29yZHM6W119fTtyZXR1cm4gZC5zcGxpY2UoLTEtZSwwLGYpLGYuc2NyaXB0fX19LGdldExhbmdTeXNUYWJsZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5nZXRTY3JpcHRUYWJsZShhLGMpO2lmKGQpe2lmKCFifHxcImRmbHRcIj09PWJ8fFwiREZMVFwiPT09YilyZXR1cm4gZC5kZWZhdWx0TGFuZ1N5czt2YXIgZT10YihkLmxhbmdTeXNSZWNvcmRzLGIpO2lmKGU+PTApcmV0dXJuIGQubGFuZ1N5c1JlY29yZHNbZV0ubGFuZ1N5cztpZihjKXt2YXIgZj17dGFnOmIsbGFuZ1N5czp7cmVzZXJ2ZWQ6MCxyZXFGZWF0dXJlSW5kZXg6NjU1MzUsZmVhdHVyZUluZGV4ZXM6W119fTtyZXR1cm4gZC5sYW5nU3lzUmVjb3Jkcy5zcGxpY2UoLTEtZSwwLGYpLGYubGFuZ1N5c319fSxnZXRGZWF0dXJlVGFibGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5nZXRMYW5nU3lzVGFibGUoYSxiLGQpO2lmKGUpe2Zvcih2YXIgZixnPWUuZmVhdHVyZUluZGV4ZXMsaD10aGlzLmZvbnQudGFibGVzW3RoaXMudGFibGVOYW1lXS5mZWF0dXJlcyxpPTA7aTxnLmxlbmd0aDtpKyspaWYoZj1oW2dbaV1dLGYudGFnPT09YylyZXR1cm4gZi5mZWF0dXJlO2lmKGQpe3ZhciBqPWgubGVuZ3RoO3JldHVybiB4ZS5hc3NlcnQoMD09PWp8fGM+PWhbai0xXS50YWcsXCJGZWF0dXJlcyBtdXN0IGJlIGFkZGVkIGluIGFscGhhYmV0aWNhbCBvcmRlci5cIiksZj17dGFnOmMsZmVhdHVyZTp7cGFyYW1zOjAsbG9va3VwTGlzdEluZGV4ZXM6W119fSxoLnB1c2goZiksZy5wdXNoKGopLGYuZmVhdHVyZX19fSxnZXRMb29rdXBUYWJsZXM6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj10aGlzLmdldEZlYXR1cmVUYWJsZShhLGIsYyxlKSxnPVtdO2lmKGYpe2Zvcih2YXIgaCxpPWYubG9va3VwTGlzdEluZGV4ZXMsaj10aGlzLmZvbnQudGFibGVzW3RoaXMudGFibGVOYW1lXS5sb29rdXBzLGs9MDtrPGkubGVuZ3RoO2srKyloPWpbaVtrXV0saC5sb29rdXBUeXBlPT09ZCYmZy5wdXNoKGgpO2lmKDA9PT1nLmxlbmd0aCYmZSl7aD17bG9va3VwVHlwZTpkLGxvb2t1cEZsYWc6MCxzdWJ0YWJsZXM6W10sbWFya0ZpbHRlcmluZ1NldDp2b2lkIDB9O3ZhciBsPWoubGVuZ3RoO3JldHVybiBqLnB1c2goaCksaS5wdXNoKGwpLFtoXX19cmV0dXJuIGd9LGdldEdseXBoQ2xhc3M6ZnVuY3Rpb24oYSxiKXtzd2l0Y2goYS5mb3JtYXQpe2Nhc2UgMTpyZXR1cm4gYS5zdGFydEdseXBoPD1iJiZiPGEuc3RhcnRHbHlwaCthLmNsYXNzZXMubGVuZ3RoP2EuY2xhc3Nlc1tiLWEuc3RhcnRHbHlwaF06MDtjYXNlIDI6dmFyIGM9dmIoYS5yYW5nZXMsYik7cmV0dXJuIGM/Yy5jbGFzc0lkOjB9fSxnZXRDb3ZlcmFnZUluZGV4OmZ1bmN0aW9uKGEsYil7c3dpdGNoKGEuZm9ybWF0KXtjYXNlIDE6dmFyIGM9dWIoYS5nbHlwaHMsYik7cmV0dXJuIGM+PTA/YzotMTtjYXNlIDI6dmFyIGQ9dmIoYS5yYW5nZXMsYik7cmV0dXJuIGQ/ZC5pbmRleCtiLWQuc3RhcnQ6LTF9fSxleHBhbmRDb3ZlcmFnZTpmdW5jdGlvbihhKXtpZigxPT09YS5mb3JtYXQpcmV0dXJuIGEuZ2x5cGhzO2Zvcih2YXIgYj1bXSxjPWEucmFuZ2VzLGQ9MDtkPGMubGVuZ3RoO2QrKylmb3IodmFyIGU9Y1tkXSxmPWUuc3RhcnQsZz1lLmVuZCxoPWY7aDw9ZztoKyspYi5wdXNoKGgpO3JldHVybiBifX0seGIucHJvdG90eXBlPXdiLnByb3RvdHlwZSx4Yi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0RGVmYXVsdFNjcmlwdE5hbWUoKTt0aGlzLmRlZmF1bHRLZXJuaW5nVGFibGVzPXRoaXMuZ2V0S2VybmluZ1RhYmxlcyhhKX0seGIucHJvdG90eXBlLmdldEtlcm5pbmdWYWx1ZT1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT0wO2U8YS5sZW5ndGg7ZSsrKWZvcih2YXIgZj1hW2VdLnN1YnRhYmxlcyxnPTA7ZzxmLmxlbmd0aDtnKyspe3ZhciBoPWZbZ10saT1kLmdldENvdmVyYWdlSW5kZXgoaC5jb3ZlcmFnZSxiKTtpZighKGk8MCkpc3dpdGNoKGgucG9zRm9ybWF0KXtjYXNlIDE6Zm9yKHZhciBqPWgucGFpclNldHNbaV0saz0wO2s8ai5sZW5ndGg7aysrKXt2YXIgbD1qW2tdO2lmKGwuc2Vjb25kR2x5cGg9PT1jKXJldHVybiBsLnZhbHVlMSYmbC52YWx1ZTEueEFkdmFuY2V8fDB9YnJlYWs7Y2FzZSAyOnZhciBtPWQuZ2V0R2x5cGhDbGFzcyhoLmNsYXNzRGVmMSxiKSxuPWQuZ2V0R2x5cGhDbGFzcyhoLmNsYXNzRGVmMixjKSxvPWguY2xhc3NSZWNvcmRzW21dW25dO3JldHVybiBvLnZhbHVlMSYmby52YWx1ZTEueEFkdmFuY2V8fDB9fXJldHVybiAwfSx4Yi5wcm90b3R5cGUuZ2V0S2VybmluZ1RhYmxlcz1mdW5jdGlvbihhLGIpe2lmKHRoaXMuZm9udC50YWJsZXMuZ3BvcylyZXR1cm4gdGhpcy5nZXRMb29rdXBUYWJsZXMoYSxiLFwia2VyblwiLDIpfSx5Yi5wcm90b3R5cGU9d2IucHJvdG90eXBlLHliLnByb3RvdHlwZS5jcmVhdGVEZWZhdWx0VGFibGU9ZnVuY3Rpb24oKXtyZXR1cm57dmVyc2lvbjoxLHNjcmlwdHM6W3t0YWc6XCJERkxUXCIsc2NyaXB0OntkZWZhdWx0TGFuZ1N5czp7cmVzZXJ2ZWQ6MCxyZXFGZWF0dXJlSW5kZXg6NjU1MzUsZmVhdHVyZUluZGV4ZXM6W119LGxhbmdTeXNSZWNvcmRzOltdfX1dLGZlYXR1cmVzOltdLGxvb2t1cHM6W119fSx5Yi5wcm90b3R5cGUuZ2V0U2luZ2xlPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPVtdLGY9dGhpcy5nZXRMb29rdXBUYWJsZXMoYixjLGEsMSksZz0wO2c8Zi5sZW5ndGg7ZysrKWZvcih2YXIgaD1mW2ddLnN1YnRhYmxlcyxpPTA7aTxoLmxlbmd0aDtpKyspe3ZhciBqPWhbaV0saz1kLmV4cGFuZENvdmVyYWdlKGouY292ZXJhZ2UpLGw9dm9pZCAwO2lmKDE9PT1qLnN1YnN0Rm9ybWF0KXt2YXIgbT1qLmRlbHRhR2x5cGhJZDtmb3IobD0wO2w8ay5sZW5ndGg7bCsrKXt2YXIgbj1rW2xdO2UucHVzaCh7c3ViOm4sYnk6bittfSl9fWVsc2V7dmFyIG89ai5zdWJzdGl0dXRlO2ZvcihsPTA7bDxrLmxlbmd0aDtsKyspZS5wdXNoKHtzdWI6a1tsXSxieTpvW2xdfSl9fXJldHVybiBlfSx5Yi5wcm90b3R5cGUuZ2V0QWx0ZXJuYXRlcz1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT1bXSxmPXRoaXMuZ2V0TG9va3VwVGFibGVzKGIsYyxhLDMpLGc9MDtnPGYubGVuZ3RoO2crKylmb3IodmFyIGg9ZltnXS5zdWJ0YWJsZXMsaT0wO2k8aC5sZW5ndGg7aSsrKWZvcih2YXIgaj1oW2ldLGs9ZC5leHBhbmRDb3ZlcmFnZShqLmNvdmVyYWdlKSxsPWouYWx0ZXJuYXRlU2V0cyxtPTA7bTxrLmxlbmd0aDttKyspZS5wdXNoKHtzdWI6a1ttXSxieTpsW21dfSk7cmV0dXJuIGV9LHliLnByb3RvdHlwZS5nZXRMaWdhdHVyZXM9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD10aGlzLGU9W10sZj10aGlzLmdldExvb2t1cFRhYmxlcyhiLGMsYSw0KSxnPTA7ZzxmLmxlbmd0aDtnKyspZm9yKHZhciBoPWZbZ10uc3VidGFibGVzLGk9MDtpPGgubGVuZ3RoO2krKylmb3IodmFyIGo9aFtpXSxrPWQuZXhwYW5kQ292ZXJhZ2Uoai5jb3ZlcmFnZSksbD1qLmxpZ2F0dXJlU2V0cyxtPTA7bTxrLmxlbmd0aDttKyspZm9yKHZhciBuPWtbbV0sbz1sW21dLHA9MDtwPG8ubGVuZ3RoO3ArKyl7dmFyIHE9b1twXTtlLnB1c2goe3N1Yjpbbl0uY29uY2F0KHEuY29tcG9uZW50cyksYnk6cS5saWdHbHlwaH0pfXJldHVybiBlfSx5Yi5wcm90b3R5cGUuYWRkU2luZ2xlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZ2V0TG9va3VwVGFibGVzKGMsZCxhLDEsITApWzBdLGY9QWIoZSwyLHtzdWJzdEZvcm1hdDoyLGNvdmVyYWdlOntmb3JtYXQ6MSxnbHlwaHM6W119LHN1YnN0aXR1dGU6W119KTt4ZS5hc3NlcnQoMT09PWYuY292ZXJhZ2UuZm9ybWF0LFwiTGlnYXR1cmU6IHVuYWJsZSB0byBtb2RpZnkgY292ZXJhZ2UgdGFibGUgZm9ybWF0IFwiK2YuY292ZXJhZ2UuZm9ybWF0KTt2YXIgZz1iLnN1YixoPXRoaXMuYmluU2VhcmNoKGYuY292ZXJhZ2UuZ2x5cGhzLGcpO2g8MCYmKGg9LTEtaCxmLmNvdmVyYWdlLmdseXBocy5zcGxpY2UoaCwwLGcpLGYuc3Vic3RpdHV0ZS5zcGxpY2UoaCwwLDApKSxmLnN1YnN0aXR1dGVbaF09Yi5ieX0seWIucHJvdG90eXBlLmFkZEFsdGVybmF0ZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldExvb2t1cFRhYmxlcyhjLGQsYSwzLCEwKVswXSxmPUFiKGUsMSx7c3Vic3RGb3JtYXQ6MSxjb3ZlcmFnZTp7Zm9ybWF0OjEsZ2x5cGhzOltdfSxhbHRlcm5hdGVTZXRzOltdfSk7eGUuYXNzZXJ0KDE9PT1mLmNvdmVyYWdlLmZvcm1hdCxcIkxpZ2F0dXJlOiB1bmFibGUgdG8gbW9kaWZ5IGNvdmVyYWdlIHRhYmxlIGZvcm1hdCBcIitmLmNvdmVyYWdlLmZvcm1hdCk7dmFyIGc9Yi5zdWIsaD10aGlzLmJpblNlYXJjaChmLmNvdmVyYWdlLmdseXBocyxnKTtoPDAmJihoPS0xLWgsZi5jb3ZlcmFnZS5nbHlwaHMuc3BsaWNlKGgsMCxnKSxmLmFsdGVybmF0ZVNldHMuc3BsaWNlKGgsMCwwKSksZi5hbHRlcm5hdGVTZXRzW2hdPWIuYnl9LHliLnByb3RvdHlwZS5hZGRMaWdhdHVyZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldExvb2t1cFRhYmxlcyhjLGQsYSw0LCEwKVswXSxmPWUuc3VidGFibGVzWzBdO2Z8fChmPXtzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOntmb3JtYXQ6MSxnbHlwaHM6W119LGxpZ2F0dXJlU2V0czpbXX0sZS5zdWJ0YWJsZXNbMF09ZikseGUuYXNzZXJ0KDE9PT1mLmNvdmVyYWdlLmZvcm1hdCxcIkxpZ2F0dXJlOiB1bmFibGUgdG8gbW9kaWZ5IGNvdmVyYWdlIHRhYmxlIGZvcm1hdCBcIitmLmNvdmVyYWdlLmZvcm1hdCk7dmFyIGc9Yi5zdWJbMF0saD1iLnN1Yi5zbGljZSgxKSxpPXtsaWdHbHlwaDpiLmJ5LGNvbXBvbmVudHM6aH0saj10aGlzLmJpblNlYXJjaChmLmNvdmVyYWdlLmdseXBocyxnKTtpZihqPj0wKXtmb3IodmFyIGs9Zi5saWdhdHVyZVNldHNbal0sbD0wO2w8ay5sZW5ndGg7bCsrKWlmKHpiKGtbbF0uY29tcG9uZW50cyxoKSlyZXR1cm47ay5wdXNoKGkpfWVsc2Ugaj0tMS1qLGYuY292ZXJhZ2UuZ2x5cGhzLnNwbGljZShqLDAsZyksZi5saWdhdHVyZVNldHMuc3BsaWNlKGosMCxbaV0pfSx5Yi5wcm90b3R5cGUuZ2V0RmVhdHVyZT1mdW5jdGlvbihhLGIsYyl7aWYoL3NzXFxkXFxkLy50ZXN0KGEpKXJldHVybiB0aGlzLmdldFNpbmdsZShhLGIsYyk7c3dpdGNoKGEpe2Nhc2VcImFhbHRcIjpjYXNlXCJzYWx0XCI6cmV0dXJuIHRoaXMuZ2V0U2luZ2xlKGEsYixjKS5jb25jYXQodGhpcy5nZXRBbHRlcm5hdGVzKGEsYixjKSk7Y2FzZVwiZGxpZ1wiOmNhc2VcImxpZ2FcIjpjYXNlXCJybGlnXCI6cmV0dXJuIHRoaXMuZ2V0TGlnYXR1cmVzKGEsYixjKX19LHliLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoL3NzXFxkXFxkLy50ZXN0KGEpKXJldHVybiB0aGlzLmFkZFNpbmdsZShhLGIsYyxkKTtzd2l0Y2goYSl7Y2FzZVwiYWFsdFwiOmNhc2VcInNhbHRcIjpyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYi5ieT90aGlzLmFkZFNpbmdsZShhLGIsYyxkKTp0aGlzLmFkZEFsdGVybmF0ZShhLGIsYyxkKTtjYXNlXCJkbGlnXCI6Y2FzZVwibGlnYVwiOmNhc2VcInJsaWdcIjpyZXR1cm4gdGhpcy5hZGRMaWdhdHVyZShhLGIsYyxkKX19O3ZhciByZixzZix0Zix1Zix2Zj17Z2V0UGF0aDpKYixwYXJzZTpMYn0sd2Y9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zclBlcmlvZCxjPXRoaXMuc3JQaGFzZSxkPXRoaXMuc3JUaHJlc2hvbGQsZT0xO3JldHVybiBhPDAmJihhPS1hLGU9LTEpLGErPWQtYyxhPU1hdGgudHJ1bmMoYS9iKSpiLGErPWMsYTwwP2MqZTphKmV9LHhmPXt4OjEseTowLGF4aXM6XCJ4XCIsZGlzdGFuY2U6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKGM/YS54bzphLngpLShkP2IueG86Yi54KX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7cmV0dXJuIGQmJmQhPT10aGlzPyhlPWQuZGlzdGFuY2UoYSxiLCEwLCEwKSxmPWQuZGlzdGFuY2UoYSxjLCEwLCEwKSxpPWQuZGlzdGFuY2UoYixiLCExLCEwKSxqPWQuZGlzdGFuY2UoYyxjLCExLCEwKSxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZCB4Zi5zZXRSZWxhdGl2ZShhLGEsKGkraikvMixkLCEwKTp2b2lkIHhmLnNldFJlbGF0aXZlKGEsYSwoaSpoK2oqZykvayxkLCEwKSk6KGU9YS54by1iLnhvLGY9YS54by1jLnhvLGk9Yi54LWIueG8saj1jLngtYy54byxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZChhLng9YS54bysoaStqKS8yKTp2b2lkKGEueD1hLnhvKyhpKmgraipnKS9rKSl9LG5vcm1hbFNsb3BlOk51bWJlci5ORUdBVElWRV9JTkZJTklUWSxzZXRSZWxhdGl2ZTpmdW5jdGlvbihhLGIsYyxkLGUpe2lmKCFkfHxkPT09dGhpcylyZXR1cm4gdm9pZChhLng9KGU/Yi54bzpiLngpK2MpO3ZhciBmPWU/Yi54bzpiLngsZz1lP2IueW86Yi55LGg9ZitjKmQueCxpPWcrYypkLnk7YS54PWgrKGEueS1pKS9kLm5vcm1hbFNsb3BlfSxzbG9wZTowLHRvdWNoOmZ1bmN0aW9uKGEpe2EueFRvdWNoZWQ9ITB9LHRvdWNoZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueFRvdWNoZWR9LHVudG91Y2g6ZnVuY3Rpb24oYSl7YS54VG91Y2hlZD0hMX19LHlmPXt4OjAseToxLGF4aXM6XCJ5XCIsZGlzdGFuY2U6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKGM/YS55bzphLnkpLShkP2IueW86Yi55KX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7cmV0dXJuIGQmJmQhPT10aGlzPyhlPWQuZGlzdGFuY2UoYSxiLCEwLCEwKSxmPWQuZGlzdGFuY2UoYSxjLCEwLCEwKSxpPWQuZGlzdGFuY2UoYixiLCExLCEwKSxqPWQuZGlzdGFuY2UoYyxjLCExLCEwKSxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZCB5Zi5zZXRSZWxhdGl2ZShhLGEsKGkraikvMixkLCEwKTp2b2lkIHlmLnNldFJlbGF0aXZlKGEsYSwoaSpoK2oqZykvayxkLCEwKSk6KGU9YS55by1iLnlvLGY9YS55by1jLnlvLGk9Yi55LWIueW8saj1jLnktYy55byxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZChhLnk9YS55bysoaStqKS8yKTp2b2lkKGEueT1hLnlvKyhpKmgraipnKS9rKSl9LG5vcm1hbFNsb3BlOjAsc2V0UmVsYXRpdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZighZHx8ZD09PXRoaXMpcmV0dXJuIHZvaWQoYS55PShlP2IueW86Yi55KStjKTt2YXIgZj1lP2IueG86Yi54LGc9ZT9iLnlvOmIueSxoPWYrYypkLngsaT1nK2MqZC55O2EueT1pK2Qubm9ybWFsU2xvcGUqKGEueC1oKX0sc2xvcGU6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHRvdWNoOmZ1bmN0aW9uKGEpe2EueVRvdWNoZWQ9ITB9LHRvdWNoZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueVRvdWNoZWR9LHVudG91Y2g6ZnVuY3Rpb24oYSl7YS55VG91Y2hlZD0hMX19O09iamVjdC5mcmVlemUoeGYpLE9iamVjdC5mcmVlemUoeWYpLFRiLnByb3RvdHlwZS5kaXN0YW5jZT1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy54KnhmLmRpc3RhbmNlKGEsYixjLGQpK3RoaXMueSp5Zi5kaXN0YW5jZShhLGIsYyxkKX0sVGIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrO2lmKGc9ZC5kaXN0YW5jZShhLGIsITAsITApLGg9ZC5kaXN0YW5jZShhLGMsITAsITApLGU9ZC5kaXN0YW5jZShiLGIsITEsITApLGY9ZC5kaXN0YW5jZShjLGMsITEsITApLGk9TWF0aC5hYnMoZyksaj1NYXRoLmFicyhoKSwwPT09KGs9aStqKSlyZXR1cm4gdm9pZCB0aGlzLnNldFJlbGF0aXZlKGEsYSwoZStmKS8yLGQsITApO3RoaXMuc2V0UmVsYXRpdmUoYSxhLChlKmorZippKS9rLGQsITApfSxUYi5wcm90b3R5cGUuc2V0UmVsYXRpdmU9ZnVuY3Rpb24oYSxiLGMsZCxlKXtkPWR8fHRoaXM7dmFyIGY9ZT9iLnhvOmIueCxnPWU/Yi55bzpiLnksaD1mK2MqZC54LGk9ZytjKmQueSxqPWQubm9ybWFsU2xvcGUsaz10aGlzLnNsb3BlLGw9YS54LG09YS55O2EueD0oaypsLWoqaCtpLW0pLyhrLWopLGEueT1rKihhLngtbCkrbX0sVGIucHJvdG90eXBlLnRvdWNoPWZ1bmN0aW9uKGEpe2EueFRvdWNoZWQ9ITAsYS55VG91Y2hlZD0hMH0sVmIucHJvdG90eXBlLm5leHRUb3VjaGVkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLm5leHRQb2ludE9uQ29udG91cjshYS50b3VjaGVkKGIpJiZiIT09dGhpczspYj1iLm5leHRQb2ludE9uQ29udG91cjtyZXR1cm4gYn0sVmIucHJvdG90eXBlLnByZXZUb3VjaGVkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLnByZXZQb2ludE9uQ29udG91cjshYS50b3VjaGVkKGIpJiZiIT09dGhpczspYj1iLnByZXZQb2ludE9uQ29udG91cjtyZXR1cm4gYn07dmFyIHpmPU9iamVjdC5mcmVlemUobmV3IFZiKDAsMCkpLEFmPXtjdkN1dEluOjE3LzE2LGRlbHRhQmFzZTo5LGRlbHRhU2hpZnQ6LjEyNSxsb29wOjEsbWluRGlzOjEsYXV0b0ZsaXA6ITB9O01iLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGIsYyl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgc2l6ZSBpcyBub3QgYSBudW1iZXIhXCIpO2lmKCEodGhpcy5fZXJyb3JTdGF0ZT4yKSl7dmFyIGQ9dGhpcy5mb250LGU9dGhpcy5fcHJlcFN0YXRlO2lmKCFlfHxlLnBwZW0hPT1jKXt2YXIgZj10aGlzLl9mcGdtU3RhdGU7aWYoIWYpe1diLnByb3RvdHlwZT1BZixmPXRoaXMuX2ZwZ21TdGF0ZT1uZXcgV2IoXCJmcGdtXCIsZC50YWJsZXMuZnBnbSksZi5mdW5jcz1bXSxmLmZvbnQ9ZCxhLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIEZQR00tLS1cIiksZi5zdGVwPS0xKTt0cnl7c2YoZil9Y2F0Y2goYSl7cmV0dXJuIGNvbnNvbGUubG9nKFwiSGludGluZyBlcnJvciBpbiBGUEdNOlwiK2EpLHZvaWQodGhpcy5fZXJyb3JTdGF0ZT0zKX19V2IucHJvdG90eXBlPWYsZT10aGlzLl9wcmVwU3RhdGU9bmV3IFdiKFwicHJlcFwiLGQudGFibGVzLnByZXApLGUucHBlbT1jO3ZhciBnPWQudGFibGVzLmN2dDtpZihnKWZvcih2YXIgaD1lLmN2dD1uZXcgQXJyYXkoZy5sZW5ndGgpLGk9Yy9kLnVuaXRzUGVyRW0saj0wO2o8Zy5sZW5ndGg7aisrKWhbal09Z1tqXSppO2Vsc2UgZS5jdnQ9W107YS5ERUJVRyYmKGNvbnNvbGUubG9nKFwiLS0tRVhFQyBQUkVQLS0tXCIpLGUuc3RlcD0tMSk7dHJ5e3NmKGUpfWNhdGNoKGEpe3RoaXMuX2Vycm9yU3RhdGU8MiYmY29uc29sZS5sb2coXCJIaW50aW5nIGVycm9yIGluIFBSRVA6XCIrYSksdGhpcy5fZXJyb3JTdGF0ZT0yfX1pZighKHRoaXMuX2Vycm9yU3RhdGU+MSkpdHJ5e3JldHVybiB0ZihiLGUpfWNhdGNoKGEpe3JldHVybiB0aGlzLl9lcnJvclN0YXRlPDEmJihjb25zb2xlLmxvZyhcIkhpbnRpbmcgZXJyb3I6XCIrYSksY29uc29sZS5sb2coXCJOb3RlOiBmdXJ0aGVyIGhpbnRpbmcgZXJyb3JzIGFyZSBzaWxlbmNlZFwiKSksdm9pZCh0aGlzLl9lcnJvclN0YXRlPTEpfX19LHRmPWZ1bmN0aW9uKGIsYyl7dmFyIGQsZSxmLGc9Yy5wcGVtL2MuZm9udC51bml0c1BlckVtLGg9ZyxpPWIuY29tcG9uZW50cztpZihXYi5wcm90b3R5cGU9YyxpKXt2YXIgaj1jLmZvbnQ7ZT1bXSxkPVtdO2Zvcih2YXIgaz0wO2s8aS5sZW5ndGg7aysrKXt2YXIgbD1pW2tdLG09ai5nbHlwaHMuZ2V0KGwuZ2x5cGhJbmRleCk7Zj1uZXcgV2IoXCJnbHlmXCIsbS5pbnN0cnVjdGlvbnMpLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgQ09NUCBcIitrK1wiLS0tXCIpLGYuc3RlcD0tMSksdWYobSxmLGcsaCk7Zm9yKHZhciBuPU1hdGgucm91bmQobC5keCpnKSxvPU1hdGgucm91bmQobC5keSpoKSxwPWYuZ1pvbmUscT1mLmNvbnRvdXJzLHI9MDtyPHAubGVuZ3RoO3IrKyl7dmFyIHM9cFtyXTtzLnhUb3VjaGVkPXMueVRvdWNoZWQ9ITEscy54bz1zLng9cy54K24scy55bz1zLnk9cy55K299dmFyIHQ9ZS5sZW5ndGg7ZS5wdXNoLmFwcGx5KGUscCk7Zm9yKHZhciB1PTA7dTxxLmxlbmd0aDt1KyspZC5wdXNoKHFbdV0rdCl9Yi5pbnN0cnVjdGlvbnMmJiFmLmluaGliaXRHcmlkRml0JiYoZj1uZXcgV2IoXCJnbHlmXCIsYi5pbnN0cnVjdGlvbnMpLGYuZ1pvbmU9Zi56MD1mLnoxPWYuejI9ZSxmLmNvbnRvdXJzPWQsZS5wdXNoKG5ldyBWYigwLDApLG5ldyBWYihNYXRoLnJvdW5kKGIuYWR2YW5jZVdpZHRoKmcpLDApKSxhLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIENPTVBPU0lURS0tLVwiKSxmLnN0ZXA9LTEpLHNmKGYpLGUubGVuZ3RoLT0yKX1lbHNlIGY9bmV3IFdiKFwiZ2x5ZlwiLGIuaW5zdHJ1Y3Rpb25zKSxhLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIEdMWVBILS0tXCIpLGYuc3RlcD0tMSksdWYoYixmLGcsaCksZT1mLmdab25lO3JldHVybiBlfSx1Zj1mdW5jdGlvbihiLGMsZCxlKXtmb3IodmFyIGYsZz1iLnBvaW50c3x8W10saD1nLmxlbmd0aCxpPWMuZ1pvbmU9Yy56MD1jLnoxPWMuejI9W10saj1jLmNvbnRvdXJzPVtdLGs9MDtrPGg7aysrKWY9Z1trXSxpW2tdPW5ldyBWYihmLngqZCxmLnkqZSxmLmxhc3RQb2ludE9mQ29udG91cixmLm9uQ3VydmUpO2Zvcih2YXIgbCxtLG49MDtuPGg7bisrKWY9aVtuXSxsfHwobD1mLGoucHVzaChuKSksZi5sYXN0UG9pbnRPZkNvbnRvdXI/KGYubmV4dFBvaW50T25Db250b3VyPWwsbC5wcmV2UG9pbnRPbkNvbnRvdXI9ZixsPXZvaWQgMCk6KG09aVtuKzFdLGYubmV4dFBvaW50T25Db250b3VyPW0sbS5wcmV2UG9pbnRPbkNvbnRvdXI9Zik7aWYoIWMuaW5oaWJpdEdyaWRGaXQpe2lmKGEuREVCVUcpe2NvbnNvbGUubG9nKFwiUFJPQ0VTU0lORyBHTFlQSFwiLGMuc3RhY2spO2Zvcih2YXIgbz0wO288aDtvKyspY29uc29sZS5sb2cobyxpW29dLngsaVtvXS55KX1pZihpLnB1c2gobmV3IFZiKDAsMCksbmV3IFZiKE1hdGgucm91bmQoYi5hZHZhbmNlV2lkdGgqZCksMCkpLHNmKGMpLGkubGVuZ3RoLT0yLGEuREVCVUcpe2NvbnNvbGUubG9nKFwiRklOSVNIRUQgR0xZUEhcIixjLnN0YWNrKTtmb3IodmFyIHA9MDtwPGg7cCsrKWNvbnNvbGUubG9nKHAsaVtwXS54LGlbcF0ueSl9fX0sc2Y9ZnVuY3Rpb24oYil7dmFyIGM9Yi5wcm9nO2lmKGMpe3ZhciBkLGU9Yy5sZW5ndGg7Zm9yKGIuaXA9MDtiLmlwPGU7Yi5pcCsrKXtpZihhLkRFQlVHJiZiLnN0ZXArKywhKGQ9cmZbY1tiLmlwXV0pKXRocm93IG5ldyBFcnJvcihcInVua25vd24gaW5zdHJ1Y3Rpb246IDB4XCIrTnVtYmVyKGNbYi5pcF0pLnRvU3RyaW5nKDE2KSk7ZChiKX19fSxyZj1bWmIuYmluZCh2b2lkIDAseWYpLFpiLmJpbmQodm9pZCAwLHhmKSwkYi5iaW5kKHZvaWQgMCx5ZiksJGIuYmluZCh2b2lkIDAseGYpLF9iLmJpbmQodm9pZCAwLHlmKSxfYi5iaW5kKHZvaWQgMCx4ZiksYWMuYmluZCh2b2lkIDAsMCksYWMuYmluZCh2b2lkIDAsMSksYmMuYmluZCh2b2lkIDAsMCksYmMuYmluZCh2b2lkIDAsMSksY2MsZGMsZWMsZmMsZ2MsaGMsaWMsamMsa2MsbGMsbWMsbmMsb2MscGMscWMscmMsc2MsdGMsdWMsdmMsdm9pZCAwLHZvaWQgMCx3Yyx4Yyx5Yyx6YyxBYyxEYyxFYyx2b2lkIDAsdm9pZCAwLHZvaWQgMCxCYyxDYyxGYyx2b2lkIDAsR2MuYmluZCh2b2lkIDAsMCksR2MuYmluZCh2b2lkIDAsMSksSGMuYmluZCh2b2lkIDAseWYpLEhjLmJpbmQodm9pZCAwLHhmKSxJYy5iaW5kKHZvaWQgMCwwKSxJYy5iaW5kKHZvaWQgMCwxKSxKYy5iaW5kKHZvaWQgMCwwKSxKYy5iaW5kKHZvaWQgMCwxKSxLYy5iaW5kKHZvaWQgMCwwKSxLYy5iaW5kKHZvaWQgMCwxKSxMYyxNYyxOYy5iaW5kKHZvaWQgMCwwKSxOYy5iaW5kKHZvaWQgMCwxKSxPYyxQYyxRYy5iaW5kKHZvaWQgMCwwKSxRYy5iaW5kKHZvaWQgMCwxKSxSYyxTYyxUYyxVYyxWYyxXYyxYYy5iaW5kKHZvaWQgMCwwKSxYYy5iaW5kKHZvaWQgMCwxKSx2b2lkIDAsWWMuYmluZCh2b2lkIDAsMCksWWMuYmluZCh2b2lkIDAsMSksWmMsdm9pZCAwLCRjLHZvaWQgMCx2b2lkIDAsX2MsYWQsYmQsY2QsZGQsZWQsZmQsZ2QsaGQsaWQsamQsa2QsbGQsbWQuYmluZCh2b2lkIDAsMSksbmQsb2QscGQscWQscmQsc2QsdGQsdWQsdmQsd2QseGQuYmluZCh2b2lkIDAsMCkseGQuYmluZCh2b2lkIDAsMSkseGQuYmluZCh2b2lkIDAsMikseGQuYmluZCh2b2lkIDAsMyksdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHlkLG1kLmJpbmQodm9pZCAwLDIpLG1kLmJpbmQodm9pZCAwLDMpLHpkLmJpbmQodm9pZCAwLDEpLHpkLmJpbmQodm9pZCAwLDIpLHpkLmJpbmQodm9pZCAwLDMpLEFkLEJkLHZvaWQgMCx2b2lkIDAsQ2Qsdm9pZCAwLERkLEVkLHhjLHhjLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsRmQsR2QuYmluZCh2b2lkIDAsMCksR2QuYmluZCh2b2lkIDAsMSksSGQsdm9pZCAwLElkLEpkLEtkLExkLE1kLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE5kLmJpbmQodm9pZCAwLDEpLE5kLmJpbmQodm9pZCAwLDIpLE5kLmJpbmQodm9pZCAwLDMpLE5kLmJpbmQodm9pZCAwLDQpLE5kLmJpbmQodm9pZCAwLDUpLE5kLmJpbmQodm9pZCAwLDYpLE5kLmJpbmQodm9pZCAwLDcpLE5kLmJpbmQodm9pZCAwLDgpLE9kLmJpbmQodm9pZCAwLDEpLE9kLmJpbmQodm9pZCAwLDIpLE9kLmJpbmQodm9pZCAwLDMpLE9kLmJpbmQodm9pZCAwLDQpLE9kLmJpbmQodm9pZCAwLDUpLE9kLmJpbmQodm9pZCAwLDYpLE9kLmJpbmQodm9pZCAwLDcpLE9kLmJpbmQodm9pZCAwLDgpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDAsMCksUGQuYmluZCh2b2lkIDAsMCwwLDAsMCwxKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwwLDIpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDAsMyksUGQuYmluZCh2b2lkIDAsMCwwLDAsMSwwKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwxLDEpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDEsMiksUGQuYmluZCh2b2lkIDAsMCwwLDAsMSwzKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwwLDApLFBkLmJpbmQodm9pZCAwLDAsMCwxLDAsMSksUGQuYmluZCh2b2lkIDAsMCwwLDEsMCwyKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwwLDMpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDEsMCksUGQuYmluZCh2b2lkIDAsMCwwLDEsMSwxKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwxLDIpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDEsMyksUGQuYmluZCh2b2lkIDAsMCwxLDAsMCwwKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwwLDEpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDAsMiksUGQuYmluZCh2b2lkIDAsMCwxLDAsMCwzKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwxLDApLFBkLmJpbmQodm9pZCAwLDAsMSwwLDEsMSksUGQuYmluZCh2b2lkIDAsMCwxLDAsMSwyKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwxLDMpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDAsMCksUGQuYmluZCh2b2lkIDAsMCwxLDEsMCwxKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwwLDIpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDAsMyksUGQuYmluZCh2b2lkIDAsMCwxLDEsMSwwKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwxLDEpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDEsMiksUGQuYmluZCh2b2lkIDAsMCwxLDEsMSwzKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwwLDApLFBkLmJpbmQodm9pZCAwLDEsMCwwLDAsMSksUGQuYmluZCh2b2lkIDAsMSwwLDAsMCwyKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwwLDMpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDEsMCksUGQuYmluZCh2b2lkIDAsMSwwLDAsMSwxKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwxLDIpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDEsMyksUGQuYmluZCh2b2lkIDAsMSwwLDEsMCwwKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwwLDEpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDAsMiksUGQuYmluZCh2b2lkIDAsMSwwLDEsMCwzKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwxLDApLFBkLmJpbmQodm9pZCAwLDEsMCwxLDEsMSksUGQuYmluZCh2b2lkIDAsMSwwLDEsMSwyKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwxLDMpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDAsMCksUGQuYmluZCh2b2lkIDAsMSwxLDAsMCwxKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwwLDIpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDAsMyksUGQuYmluZCh2b2lkIDAsMSwxLDAsMSwwKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwxLDEpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDEsMiksUGQuYmluZCh2b2lkIDAsMSwxLDAsMSwzKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwwLDApLFBkLmJpbmQodm9pZCAwLDEsMSwxLDAsMSksUGQuYmluZCh2b2lkIDAsMSwxLDEsMCwyKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwwLDMpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDEsMCksUGQuYmluZCh2b2lkIDAsMSwxLDEsMSwxKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwxLDIpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDEsMyldO3ZhciBCZj1BcnJheS5mcm9tfHxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXRjaCgvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXT98W15cXHVEODAwLVxcdURGRkZdfC4vZyl8fFtdfTtRZC5wcm90b3R5cGUuaGFzQ2hhcj1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9PXRoaXMuZW5jb2RpbmcuY2hhclRvR2x5cGhJbmRleChhKX0sUWQucHJvdG90eXBlLmNoYXJUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZW5jb2RpbmcuY2hhclRvR2x5cGhJbmRleChhKX0sUWQucHJvdG90eXBlLmNoYXJUb0dseXBoPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY2hhclRvR2x5cGhJbmRleChhKSxjPXRoaXMuZ2x5cGhzLmdldChiKTtyZXR1cm4gY3x8KGM9dGhpcy5nbHlwaHMuZ2V0KDApKSxjfSxRZC5wcm90b3R5cGUuc3RyaW5nVG9HbHlwaHM9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2I9Ynx8dGhpcy5kZWZhdWx0UmVuZGVyT3B0aW9ucztmb3IodmFyIGQ9QmYoYSksZT1bXSxmPTA7ZjxkLmxlbmd0aDtmKz0xKXt2YXIgZz1kW2ZdO2UucHVzaChjLmNoYXJUb0dseXBoSW5kZXgoZykpfXZhciBoPWUubGVuZ3RoO2lmKGIuZmVhdHVyZXMpe3ZhciBpPWIuc2NyaXB0fHx0aGlzLnN1YnN0aXR1dGlvbi5nZXREZWZhdWx0U2NyaXB0TmFtZSgpLGo9W107Yi5mZWF0dXJlcy5saWdhJiYoaj1qLmNvbmNhdCh0aGlzLnN1YnN0aXR1dGlvbi5nZXRGZWF0dXJlKFwibGlnYVwiLGksYi5sYW5ndWFnZSkpKSxiLmZlYXR1cmVzLnJsaWcmJihqPWouY29uY2F0KHRoaXMuc3Vic3RpdHV0aW9uLmdldEZlYXR1cmUoXCJybGlnXCIsaSxiLmxhbmd1YWdlKSkpO2Zvcih2YXIgaz0wO2s8aDtrKz0xKWZvcih2YXIgbD0wO2w8ai5sZW5ndGg7bCsrKXtmb3IodmFyIG09altsXSxuPW0uc3ViLG89bi5sZW5ndGgscD0wO3A8byYmbltwXT09PWVbaytwXTspcCsrO3A9PT1vJiYoZS5zcGxpY2UoayxvLG0uYnkpLGg9aC1vKzEpfX1mb3IodmFyIHE9bmV3IEFycmF5KGgpLHI9dGhpcy5nbHlwaHMuZ2V0KDApLHM9MDtzPGg7cys9MSlxW3NdPWMuZ2x5cGhzLmdldChlW3NdKXx8cjtyZXR1cm4gcX0sUWQucHJvdG90eXBlLm5hbWVUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ2x5cGhOYW1lcy5uYW1lVG9HbHlwaEluZGV4KGEpfSxRZC5wcm90b3R5cGUubmFtZVRvR2x5cGg9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5uYW1lVG9HbHlwaEluZGV4KGEpLGM9dGhpcy5nbHlwaHMuZ2V0KGIpO3JldHVybiBjfHwoYz10aGlzLmdseXBocy5nZXQoMCkpLGN9LFFkLnByb3RvdHlwZS5nbHlwaEluZGV4VG9OYW1lPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdseXBoTmFtZXMuZ2x5cGhJbmRleFRvTmFtZT90aGlzLmdseXBoTmFtZXMuZ2x5cGhJbmRleFRvTmFtZShhKTpcIlwifSxRZC5wcm90b3R5cGUuZ2V0S2VybmluZ1ZhbHVlPWZ1bmN0aW9uKGEsYil7YT1hLmluZGV4fHxhLGI9Yi5pbmRleHx8Yjt2YXIgYz10aGlzLnBvc2l0aW9uLmRlZmF1bHRLZXJuaW5nVGFibGVzO3JldHVybiBjP3RoaXMucG9zaXRpb24uZ2V0S2VybmluZ1ZhbHVlKGMsYSxiKTp0aGlzLmtlcm5pbmdQYWlyc1thK1wiLFwiK2JdfHwwfSxRZC5wcm90b3R5cGUuZGVmYXVsdFJlbmRlck9wdGlvbnM9e2tlcm5pbmc6ITAsZmVhdHVyZXM6e2xpZ2E6ITAscmxpZzohMH19LFFkLnByb3RvdHlwZS5mb3JFYWNoR2x5cGg9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPXRoaXM7Yj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/YzowLGQ9dm9pZCAwIT09ZD9kOjcyLGU9ZXx8dGhpcy5kZWZhdWx0UmVuZGVyT3B0aW9uczt2YXIgaCxpPTEvdGhpcy51bml0c1BlckVtKmQsaj10aGlzLnN0cmluZ1RvR2x5cGhzKGEsZSk7aWYoZS5rZXJuaW5nKXt2YXIgaz1lLnNjcmlwdHx8dGhpcy5wb3NpdGlvbi5nZXREZWZhdWx0U2NyaXB0TmFtZSgpO2g9dGhpcy5wb3NpdGlvbi5nZXRLZXJuaW5nVGFibGVzKGssZS5sYW5ndWFnZSl9Zm9yKHZhciBsPTA7bDxqLmxlbmd0aDtsKz0xKXt2YXIgbT1qW2xdO2lmKGYuY2FsbChnLG0sYixjLGQsZSksbS5hZHZhbmNlV2lkdGgmJihiKz1tLmFkdmFuY2VXaWR0aCppKSxlLmtlcm5pbmcmJmw8ai5sZW5ndGgtMSl7Yis9KGg/Zy5wb3NpdGlvbi5nZXRLZXJuaW5nVmFsdWUoaCxtLmluZGV4LGpbbCsxXS5pbmRleCk6Zy5nZXRLZXJuaW5nVmFsdWUobSxqW2wrMV0pKSppfWUubGV0dGVyU3BhY2luZz9iKz1lLmxldHRlclNwYWNpbmcqZDplLnRyYWNraW5nJiYoYis9ZS50cmFja2luZy8xZTMqZCl9cmV0dXJuIGJ9LFFkLnByb3RvdHlwZS5nZXRQYXRoPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9bmV3IHI7cmV0dXJuIHRoaXMuZm9yRWFjaEdseXBoKGEsYixjLGQsZSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZz1hLmdldFBhdGgoYixjLGQsZSx0aGlzKTtmLmV4dGVuZChnKX0pLGZ9LFFkLnByb3RvdHlwZS5nZXRQYXRocz1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPVtdO3JldHVybiB0aGlzLmZvckVhY2hHbHlwaChhLGIsYyxkLGUsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGc9YS5nZXRQYXRoKGIsYyxkLGUsdGhpcyk7Zi5wdXNoKGcpfSksZn0sUWQucHJvdG90eXBlLmdldEFkdmFuY2VXaWR0aD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuZm9yRWFjaEdseXBoKGEsMCwwLGIsYyxmdW5jdGlvbigpe30pfSxRZC5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5nZXRQYXRoKGIsYyxkLGUsZikuZHJhdyhhKX0sUWQucHJvdG90eXBlLmRyYXdQb2ludHM9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZm9yRWFjaEdseXBoKGIsYyxkLGUsZixmdW5jdGlvbihiLGMsZCxlKXtiLmRyYXdQb2ludHMoYSxjLGQsZSl9KX0sUWQucHJvdG90eXBlLmRyYXdNZXRyaWNzPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmZvckVhY2hHbHlwaChiLGMsZCxlLGYsZnVuY3Rpb24oYixjLGQsZSl7Yi5kcmF3TWV0cmljcyhhLGMsZCxlKX0pfSxRZC5wcm90b3R5cGUuZ2V0RW5nbGlzaE5hbWU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5uYW1lc1thXTtpZihiKXJldHVybiBiLmVufSxRZC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7fWZ1bmN0aW9uIGIoYil7dmFyIGQ9Yy5nZXRFbmdsaXNoTmFtZShiKTthKGQmJmQudHJpbSgpLmxlbmd0aD4wLFwiTm8gRW5nbGlzaCBcIitiK1wiIHNwZWNpZmllZC5cIil9dmFyIGM9dGhpcztiKFwiZm9udEZhbWlseVwiKSxiKFwid2VpZ2h0TmFtZVwiKSxiKFwibWFudWZhY3R1cmVyXCIpLGIoXCJjb3B5cmlnaHRcIiksYihcInZlcnNpb25cIiksYSh0aGlzLnVuaXRzUGVyRW0+MCxcIk5vIHVuaXRzUGVyRW0gc3BlY2lmaWVkLlwiKX0sUWQucHJvdG90eXBlLnRvVGFibGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHFmLmZvbnRUb1RhYmxlKHRoaXMpfSxRZC5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKFwiRm9udC50b0J1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgRm9udC50b0FycmF5QnVmZmVyIGluc3RlYWQuXCIpLHRoaXMudG9BcnJheUJ1ZmZlcigpfSxRZC5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnRvVGFibGVzKCksYj1hLmVuY29kZSgpLGM9bmV3IEFycmF5QnVmZmVyKGIubGVuZ3RoKSxkPW5ldyBVaW50OEFycmF5KGMpLGU9MDtlPGIubGVuZ3RoO2UrKylkW2VdPWJbZV07cmV0dXJuIGN9LFFkLnByb3RvdHlwZS5kb3dubG9hZD1mdW5jdGlvbihhKXt2YXIgYz10aGlzLmdldEVuZ2xpc2hOYW1lKFwiZm9udEZhbWlseVwiKSxkPXRoaXMuZ2V0RW5nbGlzaE5hbWUoXCJmb250U3ViZmFtaWx5XCIpO2E9YXx8Yy5yZXBsYWNlKC9cXHMvZyxcIlwiKStcIi1cIitkK1wiLm90ZlwiO3ZhciBlPXRoaXMudG9BcnJheUJ1ZmZlcigpO2lmKEJiKCkpd2luZG93LnJlcXVlc3RGaWxlU3lzdGVtPXdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbXx8d2luZG93LndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtLHdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSh3aW5kb3cuVEVNUE9SQVJZLGUuYnl0ZUxlbmd0aCxmdW5jdGlvbihiKXtiLnJvb3QuZ2V0RmlsZShhLHtjcmVhdGU6ITB9LGZ1bmN0aW9uKGEpe2EuY3JlYXRlV3JpdGVyKGZ1bmN0aW9uKGIpe3ZhciBjPW5ldyBEYXRhVmlldyhlKSxkPW5ldyBCbG9iKFtjXSx7dHlwZTpcImZvbnQvb3BlbnR5cGVcIn0pO2Iud3JpdGUoZCksYi5hZGRFdmVudExpc3RlbmVyKFwid3JpdGVlbmRcIixmdW5jdGlvbigpe2xvY2F0aW9uLmhyZWY9YS50b1VSTCgpfSwhMSl9KX0pfSxmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYS5uYW1lK1wiOiBcIithLm1lc3NhZ2UpfSk7ZWxzZXt2YXIgZj1iKFwiZnNcIiksZz1EYihlKTtmLndyaXRlRmlsZVN5bmMoYSxnKX19LFFkLnByb3RvdHlwZS5mc1NlbGVjdGlvblZhbHVlcz17SVRBTElDOjEsVU5ERVJTQ09SRToyLE5FR0FUSVZFOjQsT1VUTElORUQ6OCxTVFJJS0VPVVQ6MTYsQk9MRDozMixSRUdVTEFSOjY0LFVTRVJfVFlQT19NRVRSSUNTOjEyOCxXV1M6MjU2LE9CTElRVUU6NTEyfSxRZC5wcm90b3R5cGUudXNXaWR0aENsYXNzZXM9e1VMVFJBX0NPTkRFTlNFRDoxLEVYVFJBX0NPTkRFTlNFRDoyLENPTkRFTlNFRDozLFNFTUlfQ09OREVOU0VEOjQsTUVESVVNOjUsU0VNSV9FWFBBTkRFRDo2LEVYUEFOREVEOjcsRVhUUkFfRVhQQU5ERUQ6OCxVTFRSQV9FWFBBTkRFRDo5fSxRZC5wcm90b3R5cGUudXNXZWlnaHRDbGFzc2VzPXtUSElOOjEwMCxFWFRSQV9MSUdIVDoyMDAsTElHSFQ6MzAwLE5PUk1BTDo0MDAsTUVESVVNOjUwMCxTRU1JX0JPTEQ6NjAwLEJPTEQ6NzAwLEVYVFJBX0JPTEQ6ODAwLEJMQUNLOjkwMH07dmFyIENmPXttYWtlOldkLHBhcnNlOlhkfSxEZj1uZXcgQXJyYXkoMTApO0RmWzFdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4gMT09PWI/e3Bvc0Zvcm1hdDoxLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHZhbHVlOnRoaXMucGFyc2VWYWx1ZVJlY29yZCgpfToyPT09Yj97XG5wb3NGb3JtYXQ6Mixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSx2YWx1ZXM6dGhpcy5wYXJzZVZhbHVlUmVjb3JkTGlzdCgpfTp2b2lkIHhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IEdQT1MgbG9va3VwIHR5cGUgMSBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpfSxEZlsyXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7eGUuYXNzZXJ0KDE9PT1ifHwyPT09YixcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IEdQT1MgbG9va3VwIHR5cGUgMiBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpO3ZhciBjPXRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGQ9dGhpcy5wYXJzZVVTaG9ydCgpLGU9dGhpcy5wYXJzZVVTaG9ydCgpO2lmKDE9PT1iKXJldHVybntwb3NGb3JtYXQ6Yixjb3ZlcmFnZTpjLHZhbHVlRm9ybWF0MTpkLHZhbHVlRm9ybWF0MjplLHBhaXJTZXRzOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmxpc3QoZnVuY3Rpb24oKXtyZXR1cm57c2Vjb25kR2x5cGg6dGhpcy5wYXJzZVVTaG9ydCgpLHZhbHVlMTp0aGlzLnBhcnNlVmFsdWVSZWNvcmQoZCksdmFsdWUyOnRoaXMucGFyc2VWYWx1ZVJlY29yZChlKX19KSkpfTtpZigyPT09Yil7dmFyIGY9dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksZz10aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxoPXRoaXMucGFyc2VVU2hvcnQoKSxpPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm57cG9zRm9ybWF0OmIsY292ZXJhZ2U6Yyx2YWx1ZUZvcm1hdDE6ZCx2YWx1ZUZvcm1hdDI6ZSxjbGFzc0RlZjE6ZixjbGFzc0RlZjI6ZyxjbGFzczFDb3VudDpoLGNsYXNzMkNvdW50OmksY2xhc3NSZWNvcmRzOnRoaXMucGFyc2VMaXN0KGgsUS5saXN0KGksZnVuY3Rpb24oKXtyZXR1cm57dmFsdWUxOnRoaXMucGFyc2VWYWx1ZVJlY29yZChkKSx2YWx1ZTI6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKGUpfX0pKX19fSxEZlszXT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDMgbm90IHN1cHBvcnRlZFwifX0sRGZbNF09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA0IG5vdCBzdXBwb3J0ZWRcIn19LERmWzVdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgNSBub3Qgc3VwcG9ydGVkXCJ9fSxEZls2XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDYgbm90IHN1cHBvcnRlZFwifX0sRGZbN109ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA3IG5vdCBzdXBwb3J0ZWRcIn19LERmWzhdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgOCBub3Qgc3VwcG9ydGVkXCJ9fSxEZls5XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDkgbm90IHN1cHBvcnRlZFwifX07dmFyIEVmPW5ldyBBcnJheSgxMCksRmY9e3BhcnNlOllkLG1ha2U6WmR9LEdmPXtwYXJzZTphZX0sSGY9e3BhcnNlOmJlfTthLkZvbnQ9UWQsYS5HbHlwaD1jYSxhLlBhdGg9cixhLkJvdW5kaW5nQm94PXEsYS5fcGFyc2U9TGUsYS5wYXJzZT1oZSxhLmxvYWQ9aWUsYS5sb2FkU3luYz1qZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0pfSkuY2FsbCh0aGlzLGIoXCJidWZmZXJcIikuQnVmZmVyKX0se2J1ZmZlcjozLGZzOjJ9XSwxMTpbZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGUoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gZihhKXtpZihsPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChhLDApO2lmKChsPT09ZHx8IWwpJiZzZXRUaW1lb3V0KXJldHVybiBsPXNldFRpbWVvdXQsc2V0VGltZW91dChhLDApO3RyeXtyZXR1cm4gbChhLDApfWNhdGNoKGIpe3RyeXtyZXR1cm4gbC5jYWxsKG51bGwsYSwwKX1jYXRjaChiKXtyZXR1cm4gbC5jYWxsKHRoaXMsYSwwKX19fWZ1bmN0aW9uIGcoYSl7aWYobT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGEpO2lmKChtPT09ZXx8IW0pJiZjbGVhclRpbWVvdXQpcmV0dXJuIG09Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChhKTt0cnl7cmV0dXJuIG0oYSl9Y2F0Y2goYil7dHJ5e3JldHVybiBtLmNhbGwobnVsbCxhKX1jYXRjaChiKXtyZXR1cm4gbS5jYWxsKHRoaXMsYSl9fX1mdW5jdGlvbiBoKCl7cSYmbyYmKHE9ITEsby5sZW5ndGg/cD1vLmNvbmNhdChwKTpyPS0xLHAubGVuZ3RoJiZpKCkpfWZ1bmN0aW9uIGkoKXtpZighcSl7dmFyIGE9ZihoKTtxPSEwO2Zvcih2YXIgYj1wLmxlbmd0aDtiOyl7Zm9yKG89cCxwPVtdOysrcjxiOylvJiZvW3JdLnJ1bigpO3I9LTEsYj1wLmxlbmd0aH1vPW51bGwscT0hMSxnKGEpfX1mdW5jdGlvbiBqKGEsYil7dGhpcy5mdW49YSx0aGlzLmFycmF5PWJ9ZnVuY3Rpb24gaygpe312YXIgbCxtLG49Yi5leHBvcnRzPXt9OyFmdW5jdGlvbigpe3RyeXtsPVwiZnVuY3Rpb25cIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpkfWNhdGNoKGEpe2w9ZH10cnl7bT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OmV9Y2F0Y2goYSl7bT1lfX0oKTt2YXIgbyxwPVtdLHE9ITEscj0tMTtuLm5leHRUaWNrPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbYy0xXT1hcmd1bWVudHNbY107cC5wdXNoKG5ldyBqKGEsYikpLDEhPT1wLmxlbmd0aHx8cXx8ZihpKX0sai5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sbi50aXRsZT1cImJyb3dzZXJcIixuLmJyb3dzZXI9ITAsbi5lbnY9e30sbi5hcmd2PVtdLG4udmVyc2lvbj1cIlwiLG4udmVyc2lvbnM9e30sbi5vbj1rLG4uYWRkTGlzdGVuZXI9ayxuLm9uY2U9ayxuLm9mZj1rLG4ucmVtb3ZlTGlzdGVuZXI9ayxuLnJlbW92ZUFsbExpc3RlbmVycz1rLG4uZW1pdD1rLG4ucHJlcGVuZExpc3RlbmVyPWssbi5wcmVwZW5kT25jZUxpc3RlbmVyPWssbi5saXN0ZW5lcnM9ZnVuY3Rpb24oYSl7cmV0dXJuW119LG4uYmluZGluZz1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX0sbi5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm5cIi9cIn0sbi5jaGRpcj1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9LG4udW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LHt9XSwxMjpbZnVuY3Rpb24oYSxiLGMpeyFmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGEpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBhJiYoYT1TdHJpbmcoYSkpLC9bXmEtejAtOVxcLSMkJSYnKisuXFxeX2B8fl0vaS50ZXN0KGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZVwiKTtyZXR1cm4gYS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGMoYSl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPVN0cmluZyhhKSksYX1mdW5jdGlvbiBkKGEpe3ZhciBiPXtuZXh0OmZ1bmN0aW9uKCl7dmFyIGI9YS5zaGlmdCgpO3JldHVybntkb25lOnZvaWQgMD09PWIsdmFsdWU6Yn19fTtyZXR1cm4gci5pdGVyYWJsZSYmKGJbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiBifSksYn1mdW5jdGlvbiBlKGEpe3RoaXMubWFwPXt9LGEgaW5zdGFuY2VvZiBlP2EuZm9yRWFjaChmdW5jdGlvbihhLGIpe3RoaXMuYXBwZW5kKGIsYSl9LHRoaXMpOkFycmF5LmlzQXJyYXkoYSk/YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3RoaXMuYXBwZW5kKGFbMF0sYVsxXSl9LHRoaXMpOmEmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLmZvckVhY2goZnVuY3Rpb24oYil7dGhpcy5hcHBlbmQoYixhW2JdKX0sdGhpcyl9ZnVuY3Rpb24gZihhKXtpZihhLmJvZHlVc2VkKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKFwiQWxyZWFkeSByZWFkXCIpKTthLmJvZHlVc2VkPSEwfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGIsYyl7YS5vbmxvYWQ9ZnVuY3Rpb24oKXtiKGEucmVzdWx0KX0sYS5vbmVycm9yPWZ1bmN0aW9uKCl7YyhhLmVycm9yKX19KX1mdW5jdGlvbiBoKGEpe3ZhciBiPW5ldyBGaWxlUmVhZGVyLGM9ZyhiKTtyZXR1cm4gYi5yZWFkQXNBcnJheUJ1ZmZlcihhKSxjfWZ1bmN0aW9uIGkoYSl7dmFyIGI9bmV3IEZpbGVSZWFkZXIsYz1nKGIpO3JldHVybiBiLnJlYWRBc1RleHQoYSksY31mdW5jdGlvbiBqKGEpe2Zvcih2YXIgYj1uZXcgVWludDhBcnJheShhKSxjPW5ldyBBcnJheShiLmxlbmd0aCksZD0wO2Q8Yi5sZW5ndGg7ZCsrKWNbZF09U3RyaW5nLmZyb21DaGFyQ29kZShiW2RdKTtyZXR1cm4gYy5qb2luKFwiXCIpfWZ1bmN0aW9uIGsoYSl7aWYoYS5zbGljZSlyZXR1cm4gYS5zbGljZSgwKTt2YXIgYj1uZXcgVWludDhBcnJheShhLmJ5dGVMZW5ndGgpO3JldHVybiBiLnNldChuZXcgVWludDhBcnJheShhKSksYi5idWZmZXJ9ZnVuY3Rpb24gbCgpe3JldHVybiB0aGlzLmJvZHlVc2VkPSExLHRoaXMuX2luaXRCb2R5PWZ1bmN0aW9uKGEpe2lmKHRoaXMuX2JvZHlJbml0PWEsYSlpZihcInN0cmluZ1wiPT10eXBlb2YgYSl0aGlzLl9ib2R5VGV4dD1hO2Vsc2UgaWYoci5ibG9iJiZCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpKXRoaXMuX2JvZHlCbG9iPWE7ZWxzZSBpZihyLmZvcm1EYXRhJiZGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSl0aGlzLl9ib2R5Rm9ybURhdGE9YTtlbHNlIGlmKHIuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkpdGhpcy5fYm9keVRleHQ9YS50b1N0cmluZygpO2Vsc2UgaWYoci5hcnJheUJ1ZmZlciYmci5ibG9iJiZ0KGEpKXRoaXMuX2JvZHlBcnJheUJ1ZmZlcj1rKGEuYnVmZmVyKSx0aGlzLl9ib2R5SW5pdD1uZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSk7ZWxzZXtpZighci5hcnJheUJ1ZmZlcnx8IUFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpJiYhdShhKSl0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBCb2R5SW5pdCB0eXBlXCIpO3RoaXMuX2JvZHlBcnJheUJ1ZmZlcj1rKGEpfWVsc2UgdGhpcy5fYm9keVRleHQ9XCJcIjt0aGlzLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpfHwoXCJzdHJpbmdcIj09dHlwZW9mIGE/dGhpcy5oZWFkZXJzLnNldChcImNvbnRlbnQtdHlwZVwiLFwidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04XCIpOnRoaXMuX2JvZHlCbG9iJiZ0aGlzLl9ib2R5QmxvYi50eXBlP3RoaXMuaGVhZGVycy5zZXQoXCJjb250ZW50LXR5cGVcIix0aGlzLl9ib2R5QmxvYi50eXBlKTpyLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpJiZ0aGlzLmhlYWRlcnMuc2V0KFwiY29udGVudC10eXBlXCIsXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOFwiKSl9LHIuYmxvYiYmKHRoaXMuYmxvYj1mdW5jdGlvbigpe3ZhciBhPWYodGhpcyk7aWYoYSlyZXR1cm4gYTtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2JcIik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSl9LHRoaXMuYXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm9keUFycmF5QnVmZmVyP2YodGhpcyl8fFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpOnRoaXMuYmxvYigpLnRoZW4oaCl9KSx0aGlzLnRleHQ9ZnVuY3Rpb24oKXt2YXIgYT1mKHRoaXMpO2lmKGEpcmV0dXJuIGE7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIGkodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGoodGhpcy5fYm9keUFycmF5QnVmZmVyKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcihcImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dFwiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KX0sci5mb3JtRGF0YSYmKHRoaXMuZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihvKX0pLHRoaXMuanNvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpfSx0aGlzfWZ1bmN0aW9uIG0oYSl7dmFyIGI9YS50b1VwcGVyQ2FzZSgpO3JldHVybiB2LmluZGV4T2YoYik+LTE/YjphfWZ1bmN0aW9uIG4oYSxiKXtiPWJ8fHt9O3ZhciBjPWIuYm9keTtpZihhIGluc3RhbmNlb2Ygbil7aWYoYS5ib2R5VXNlZCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQWxyZWFkeSByZWFkXCIpO3RoaXMudXJsPWEudXJsLHRoaXMuY3JlZGVudGlhbHM9YS5jcmVkZW50aWFscyxiLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGUoYS5oZWFkZXJzKSksdGhpcy5tZXRob2Q9YS5tZXRob2QsdGhpcy5tb2RlPWEubW9kZSxjfHxudWxsPT1hLl9ib2R5SW5pdHx8KGM9YS5fYm9keUluaXQsYS5ib2R5VXNlZD0hMCl9ZWxzZSB0aGlzLnVybD1TdHJpbmcoYSk7aWYodGhpcy5jcmVkZW50aWFscz1iLmNyZWRlbnRpYWxzfHx0aGlzLmNyZWRlbnRpYWxzfHxcIm9taXRcIiwhYi5oZWFkZXJzJiZ0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGUoYi5oZWFkZXJzKSksdGhpcy5tZXRob2Q9bShiLm1ldGhvZHx8dGhpcy5tZXRob2R8fFwiR0VUXCIpLHRoaXMubW9kZT1iLm1vZGV8fHRoaXMubW9kZXx8bnVsbCx0aGlzLnJlZmVycmVyPW51bGwsKFwiR0VUXCI9PT10aGlzLm1ldGhvZHx8XCJIRUFEXCI9PT10aGlzLm1ldGhvZCkmJmMpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzXCIpO3RoaXMuX2luaXRCb2R5KGMpfWZ1bmN0aW9uIG8oYSl7dmFyIGI9bmV3IEZvcm1EYXRhO3JldHVybiBhLnRyaW0oKS5zcGxpdChcIiZcIikuZm9yRWFjaChmdW5jdGlvbihhKXtpZihhKXt2YXIgYz1hLnNwbGl0KFwiPVwiKSxkPWMuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZyxcIiBcIiksZT1jLmpvaW4oXCI9XCIpLnJlcGxhY2UoL1xcKy9nLFwiIFwiKTtiLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQoZCksZGVjb2RlVVJJQ29tcG9uZW50KGUpKX19KSxifWZ1bmN0aW9uIHAoYSl7dmFyIGI9bmV3IGU7cmV0dXJuIGEuc3BsaXQoL1xccj9cXG4vKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBjPWEuc3BsaXQoXCI6XCIpLGQ9Yy5zaGlmdCgpLnRyaW0oKTtpZihkKXt2YXIgZT1jLmpvaW4oXCI6XCIpLnRyaW0oKTtiLmFwcGVuZChkLGUpfX0pLGJ9ZnVuY3Rpb24gcShhLGIpe2J8fChiPXt9KSx0aGlzLnR5cGU9XCJkZWZhdWx0XCIsdGhpcy5zdGF0dXM9XCJzdGF0dXNcImluIGI/Yi5zdGF0dXM6MjAwLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwLHRoaXMuc3RhdHVzVGV4dD1cInN0YXR1c1RleHRcImluIGI/Yi5zdGF0dXNUZXh0OlwiT0tcIix0aGlzLmhlYWRlcnM9bmV3IGUoYi5oZWFkZXJzKSx0aGlzLnVybD1iLnVybHx8XCJcIix0aGlzLl9pbml0Qm9keShhKX1pZighYS5mZXRjaCl7dmFyIHI9e3NlYXJjaFBhcmFtczpcIlVSTFNlYXJjaFBhcmFtc1wiaW4gYSxpdGVyYWJsZTpcIlN5bWJvbFwiaW4gYSYmXCJpdGVyYXRvclwiaW4gU3ltYm9sLGJsb2I6XCJGaWxlUmVhZGVyXCJpbiBhJiZcIkJsb2JcImluIGEmJmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgQmxvYiwhMH1jYXRjaChhKXtyZXR1cm4hMX19KCksZm9ybURhdGE6XCJGb3JtRGF0YVwiaW4gYSxhcnJheUJ1ZmZlcjpcIkFycmF5QnVmZmVyXCJpbiBhfTtpZihyLmFycmF5QnVmZmVyKXZhciBzPVtcIltvYmplY3QgSW50OEFycmF5XVwiLFwiW29iamVjdCBVaW50OEFycmF5XVwiLFwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIixcIltvYmplY3QgSW50MTZBcnJheV1cIixcIltvYmplY3QgVWludDE2QXJyYXldXCIsXCJbb2JqZWN0IEludDMyQXJyYXldXCIsXCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiLFwiW29iamVjdCBGbG9hdDMyQXJyYXldXCIsXCJbb2JqZWN0IEZsb2F0NjRBcnJheV1cIl0sdD1mdW5jdGlvbihhKXtyZXR1cm4gYSYmRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSl9LHU9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbihhKXtyZXR1cm4gYSYmcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSk+LTF9O2UucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihhLGQpe2E9YihhKSxkPWMoZCk7dmFyIGU9dGhpcy5tYXBbYV07dGhpcy5tYXBbYV09ZT9lK1wiLFwiK2Q6ZH0sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLm1hcFtiKGEpXX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBhPWIoYSksdGhpcy5oYXMoYSk/dGhpcy5tYXBbYV06bnVsbH0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShiKGEpKX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsZCl7dGhpcy5tYXBbYihhKV09YyhkKX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyBpbiB0aGlzLm1hcCl0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShjKSYmYS5jYWxsKGIsdGhpcy5tYXBbY10sYyx0aGlzKX0sZS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oYixjKXthLnB1c2goYyl9KSxkKGEpfSxlLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGIpe2EucHVzaChiKX0pLGQoYSl9LGUucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGIsYyl7YS5wdXNoKFtjLGJdKX0pLGQoYSl9LHIuaXRlcmFibGUmJihlLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWUucHJvdG90eXBlLmVudHJpZXMpO3ZhciB2PVtcIkRFTEVURVwiLFwiR0VUXCIsXCJIRUFEXCIsXCJPUFRJT05TXCIsXCJQT1NUXCIsXCJQVVRcIl07bi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyx7Ym9keTp0aGlzLl9ib2R5SW5pdH0pfSxsLmNhbGwobi5wcm90b3R5cGUpLGwuY2FsbChxLnByb3RvdHlwZSkscS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHEodGhpcy5fYm9keUluaXQse3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnRoaXMuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyBlKHRoaXMuaGVhZGVycyksdXJsOnRoaXMudXJsfSl9LHEuZXJyb3I9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcShudWxsLHtzdGF0dXM6MCxzdGF0dXNUZXh0OlwiXCJ9KTtyZXR1cm4gYS50eXBlPVwiZXJyb3JcIixhfTt2YXIgdz1bMzAxLDMwMiwzMDMsMzA3LDMwOF07cS5yZWRpcmVjdD1mdW5jdGlvbihhLGIpe2lmKC0xPT09dy5pbmRleE9mKGIpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBzdGF0dXMgY29kZVwiKTtyZXR1cm4gbmV3IHEobnVsbCx7c3RhdHVzOmIsaGVhZGVyczp7bG9jYXRpb246YX19KX0sYS5IZWFkZXJzPWUsYS5SZXF1ZXN0PW4sYS5SZXNwb25zZT1xLGEuZmV0Y2g9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYyxkKXt2YXIgZT1uZXcgbihhLGIpLGY9bmV3IFhNTEh0dHBSZXF1ZXN0O2Yub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGE9e3N0YXR1czpmLnN0YXR1cyxzdGF0dXNUZXh0OmYuc3RhdHVzVGV4dCxoZWFkZXJzOnAoZi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKXx8XCJcIil9O2EudXJsPVwicmVzcG9uc2VVUkxcImluIGY/Zi5yZXNwb25zZVVSTDphLmhlYWRlcnMuZ2V0KFwiWC1SZXF1ZXN0LVVSTFwiKTt2YXIgYj1cInJlc3BvbnNlXCJpbiBmP2YucmVzcG9uc2U6Zi5yZXNwb25zZVRleHQ7YyhuZXcgcShiLGEpKX0sZi5vbmVycm9yPWZ1bmN0aW9uKCl7ZChuZXcgVHlwZUVycm9yKFwiTmV0d29yayByZXF1ZXN0IGZhaWxlZFwiKSl9LGYub250aW1lb3V0PWZ1bmN0aW9uKCl7ZChuZXcgVHlwZUVycm9yKFwiTmV0d29yayByZXF1ZXN0IGZhaWxlZFwiKSl9LGYub3BlbihlLm1ldGhvZCxlLnVybCwhMCksXCJpbmNsdWRlXCI9PT1lLmNyZWRlbnRpYWxzJiYoZi53aXRoQ3JlZGVudGlhbHM9ITApLFwicmVzcG9uc2VUeXBlXCJpbiBmJiZyLmJsb2ImJihmLnJlc3BvbnNlVHlwZT1cImJsb2JcIiksZS5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oYSxiKXtmLnNldFJlcXVlc3RIZWFkZXIoYixhKX0pLGYuc2VuZCh2b2lkIDA9PT1lLl9ib2R5SW5pdD9udWxsOmUuX2JvZHlJbml0KX0pfSxhLmZldGNoLnBvbHlmaWxsPSEwfX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzKX0se31dLDEzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vY29yZS9tYWluXCIpO2EoXCIuL2NvcmUvY29uc3RhbnRzXCIpLGEoXCIuL2NvcmUvZW52aXJvbm1lbnRcIiksYShcIi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGEoXCIuL2NvcmUvaGVscGVyc1wiKSxhKFwiLi9jb3JlL2xlZ2FjeVwiKSxhKFwiLi9jb3JlL3A1LkVsZW1lbnRcIiksYShcIi4vY29yZS9wNS5HcmFwaGljc1wiKSxhKFwiLi9jb3JlL3A1LlJlbmRlcmVyXCIpLGEoXCIuL2NvcmUvcDUuUmVuZGVyZXIyRFwiKSxhKFwiLi9jb3JlL3JlbmRlcmluZ1wiKSxhKFwiLi9jb3JlL3NoaW1cIiksYShcIi4vY29yZS9zdHJ1Y3R1cmVcIiksYShcIi4vY29yZS90cmFuc2Zvcm1cIiksYShcIi4vY29yZS9zaGFwZS8yZF9wcmltaXRpdmVzXCIpLGEoXCIuL2NvcmUvc2hhcGUvYXR0cmlidXRlc1wiKSxhKFwiLi9jb3JlL3NoYXBlL2N1cnZlc1wiKSxhKFwiLi9jb3JlL3NoYXBlL3ZlcnRleFwiKSxhKFwiLi9jb2xvci9jb2xvcl9jb252ZXJzaW9uXCIpLGEoXCIuL2NvbG9yL2NyZWF0aW5nX3JlYWRpbmdcIiksYShcIi4vY29sb3IvcDUuQ29sb3JcIiksYShcIi4vY29sb3Ivc2V0dGluZ1wiKSxhKFwiLi9kYXRhL3A1LlR5cGVkRGljdFwiKSxhKFwiLi9ldmVudHMvYWNjZWxlcmF0aW9uXCIpLGEoXCIuL2V2ZW50cy9rZXlib2FyZFwiKSxhKFwiLi9ldmVudHMvbW91c2VcIiksYShcIi4vZXZlbnRzL3RvdWNoXCIpLGEoXCIuL2ltYWdlL2ZpbHRlcnNcIiksYShcIi4vaW1hZ2UvaW1hZ2VcIiksYShcIi4vaW1hZ2UvbG9hZGluZ19kaXNwbGF5aW5nXCIpLGEoXCIuL2ltYWdlL3A1LkltYWdlXCIpLGEoXCIuL2ltYWdlL3BpeGVsc1wiKSxhKFwiLi9pby9maWxlc1wiKSxhKFwiLi9pby9wNS5UYWJsZVwiKSxhKFwiLi9pby9wNS5UYWJsZVJvd1wiKSxhKFwiLi9pby9wNS5YTUxcIiksYShcIi4vbWF0aC9jYWxjdWxhdGlvblwiKSxhKFwiLi9tYXRoL21hdGhcIiksYShcIi4vbWF0aC9ub2lzZVwiKSxhKFwiLi9tYXRoL3A1LlZlY3RvclwiKSxhKFwiLi9tYXRoL3JhbmRvbVwiKSxhKFwiLi9tYXRoL3RyaWdvbm9tZXRyeVwiKSxhKFwiLi90eXBvZ3JhcGh5L2F0dHJpYnV0ZXNcIiksYShcIi4vdHlwb2dyYXBoeS9sb2FkaW5nX2Rpc3BsYXlpbmdcIiksYShcIi4vdHlwb2dyYXBoeS9wNS5Gb250XCIpLGEoXCIuL3V0aWxpdGllcy9hcnJheV9mdW5jdGlvbnNcIiksYShcIi4vdXRpbGl0aWVzL2NvbnZlcnNpb25cIiksYShcIi4vdXRpbGl0aWVzL3N0cmluZ19mdW5jdGlvbnNcIiksYShcIi4vdXRpbGl0aWVzL3RpbWVfZGF0ZVwiKSxhKFwiLi93ZWJnbC8zZF9wcmltaXRpdmVzXCIpLGEoXCIuL3dlYmdsL2ludGVyYWN0aW9uXCIpLGEoXCIuL3dlYmdsL2xpZ2h0XCIpLGEoXCIuL3dlYmdsL2xvYWRpbmdcIiksYShcIi4vd2ViZ2wvbWF0ZXJpYWxcIiksYShcIi4vd2ViZ2wvcDUuQ2FtZXJhXCIpLGEoXCIuL3dlYmdsL3A1Lkdlb21ldHJ5XCIpLGEoXCIuL3dlYmdsL3A1Lk1hdHJpeFwiKSxhKFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLkltbWVkaWF0ZVwiKSxhKFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMXCIpLGEoXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuUmV0YWluZWRcIiksYShcIi4vd2ViZ2wvcDUuU2hhZGVyXCIpLGEoXCIuL3dlYmdsL3A1LlRleHR1cmVcIiksYShcIi4vd2ViZ2wvdGV4dFwiKSxhKFwiLi9jb3JlL2luaXRcIiksYi5leHBvcnRzPWR9LHtcIi4vY29sb3IvY29sb3JfY29udmVyc2lvblwiOjE0LFwiLi9jb2xvci9jcmVhdGluZ19yZWFkaW5nXCI6MTUsXCIuL2NvbG9yL3A1LkNvbG9yXCI6MTYsXCIuL2NvbG9yL3NldHRpbmdcIjoxNyxcIi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4vY29yZS9lbnZpcm9ubWVudFwiOjE5LFwiLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4vY29yZS9oZWxwZXJzXCI6MjEsXCIuL2NvcmUvaW5pdFwiOjIyLFwiLi9jb3JlL2xlZ2FjeVwiOjIzLFwiLi9jb3JlL21haW5cIjoyNCxcIi4vY29yZS9wNS5FbGVtZW50XCI6MjUsXCIuL2NvcmUvcDUuR3JhcGhpY3NcIjoyNixcIi4vY29yZS9wNS5SZW5kZXJlclwiOjI3LFwiLi9jb3JlL3A1LlJlbmRlcmVyMkRcIjoyOCxcIi4vY29yZS9yZW5kZXJpbmdcIjoyOSxcIi4vY29yZS9zaGFwZS8yZF9wcmltaXRpdmVzXCI6MzAsXCIuL2NvcmUvc2hhcGUvYXR0cmlidXRlc1wiOjMxLFwiLi9jb3JlL3NoYXBlL2N1cnZlc1wiOjMyLFwiLi9jb3JlL3NoYXBlL3ZlcnRleFwiOjMzLFwiLi9jb3JlL3NoaW1cIjozNCxcIi4vY29yZS9zdHJ1Y3R1cmVcIjozNSxcIi4vY29yZS90cmFuc2Zvcm1cIjozNixcIi4vZGF0YS9wNS5UeXBlZERpY3RcIjozNyxcIi4vZXZlbnRzL2FjY2VsZXJhdGlvblwiOjM4LFwiLi9ldmVudHMva2V5Ym9hcmRcIjozOSxcIi4vZXZlbnRzL21vdXNlXCI6NDAsXCIuL2V2ZW50cy90b3VjaFwiOjQxLFwiLi9pbWFnZS9maWx0ZXJzXCI6NDIsXCIuL2ltYWdlL2ltYWdlXCI6NDMsXCIuL2ltYWdlL2xvYWRpbmdfZGlzcGxheWluZ1wiOjQ0LFwiLi9pbWFnZS9wNS5JbWFnZVwiOjQ1LFwiLi9pbWFnZS9waXhlbHNcIjo0NixcIi4vaW8vZmlsZXNcIjo0NyxcIi4vaW8vcDUuVGFibGVcIjo0OCxcIi4vaW8vcDUuVGFibGVSb3dcIjo0OSxcIi4vaW8vcDUuWE1MXCI6NTAsXCIuL21hdGgvY2FsY3VsYXRpb25cIjo1MSxcIi4vbWF0aC9tYXRoXCI6NTIsXCIuL21hdGgvbm9pc2VcIjo1MyxcIi4vbWF0aC9wNS5WZWN0b3JcIjo1NCxcIi4vbWF0aC9yYW5kb21cIjo1NSxcIi4vbWF0aC90cmlnb25vbWV0cnlcIjo1NixcIi4vdHlwb2dyYXBoeS9hdHRyaWJ1dGVzXCI6NTcsXCIuL3R5cG9ncmFwaHkvbG9hZGluZ19kaXNwbGF5aW5nXCI6NTgsXCIuL3R5cG9ncmFwaHkvcDUuRm9udFwiOjU5LFwiLi91dGlsaXRpZXMvYXJyYXlfZnVuY3Rpb25zXCI6NjAsXCIuL3V0aWxpdGllcy9jb252ZXJzaW9uXCI6NjEsXCIuL3V0aWxpdGllcy9zdHJpbmdfZnVuY3Rpb25zXCI6NjIsXCIuL3V0aWxpdGllcy90aW1lX2RhdGVcIjo2MyxcIi4vd2ViZ2wvM2RfcHJpbWl0aXZlc1wiOjY0LFwiLi93ZWJnbC9pbnRlcmFjdGlvblwiOjY1LFwiLi93ZWJnbC9saWdodFwiOjY2LFwiLi93ZWJnbC9sb2FkaW5nXCI6NjcsXCIuL3dlYmdsL21hdGVyaWFsXCI6NjgsXCIuL3dlYmdsL3A1LkNhbWVyYVwiOjY5LFwiLi93ZWJnbC9wNS5HZW9tZXRyeVwiOjcwLFwiLi93ZWJnbC9wNS5NYXRyaXhcIjo3MSxcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTFwiOjc0LFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLkltbWVkaWF0ZVwiOjcyLFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLlJldGFpbmVkXCI6NzMsXCIuL3dlYmdsL3A1LlNoYWRlclwiOjc1LFwiLi93ZWJnbC9wNS5UZXh0dXJlXCI6NzYsXCIuL3dlYmdsL3RleHRcIjo3N31dLDE0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLkNvbG9yQ29udmVyc2lvbj17fSxkLkNvbG9yQ29udmVyc2lvbi5faHNiYVRvSFNMQT1mdW5jdGlvbihhKXt2YXIgYj1hWzBdLGM9YVsxXSxkPWFbMl0sZT0oMi1jKSpkLzI7cmV0dXJuIDAhPT1lJiYoMT09PWU/Yz0wOmU8LjU/Yy89Mi1jOmM9YypkLygyLTIqZSkpLFtiLGMsZSxhWzNdXX0sZC5Db2xvckNvbnZlcnNpb24uX2hzYmFUb1JHQkE9ZnVuY3Rpb24oYSl7dmFyIGI9NiphWzBdLGM9YVsxXSxkPWFbMl0sZT1bXTtpZigwPT09YyllPVtkLGQsZCxhWzNdXTtlbHNle3ZhciBmLGcsaCxpPU1hdGguZmxvb3IoYiksaj1kKigxLWMpLGs9ZCooMS1jKihiLWkpKSxsPWQqKDEtYyooMStpLWIpKTsxPT09aT8oZj1rLGc9ZCxoPWopOjI9PT1pPyhmPWosZz1kLGg9bCk6Mz09PWk/KGY9aixnPWssaD1kKTo0PT09aT8oZj1sLGc9aixoPWQpOjU9PT1pPyhmPWQsZz1qLGg9ayk6KGY9ZCxnPWwsaD1qKSxlPVtmLGcsaCxhWzNdXX1yZXR1cm4gZX0sZC5Db2xvckNvbnZlcnNpb24uX2hzbGFUb0hTQkE9ZnVuY3Rpb24oYSl7dmFyIGIsYz1hWzBdLGQ9YVsxXSxlPWFbMl07cmV0dXJuIGI9ZTwuNT8oMStkKSplOmUrZC1lKmQsZD0yKihiLWUpL2IsW2MsZCxiLGFbM11dfSxkLkNvbG9yQ29udmVyc2lvbi5faHNsYVRvUkdCQT1mdW5jdGlvbihhKXt2YXIgYj02KmFbMF0sYz1hWzFdLGQ9YVsyXSxlPVtdO2lmKDA9PT1jKWU9W2QsZCxkLGFbM11dO2Vsc2V7dmFyIGY7Zj1kPC41PygxK2MpKmQ6ZCtjLWQqYzt2YXIgZz0yKmQtZixoPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYTwwP2ErPTY6YT49NiYmKGEtPTYpLGE8MT9iKyhjLWIpKmE6YTwzP2M6YTw0P2IrKGMtYikqKDQtYSk6Yn07ZT1baChiKzIsZyxmKSxoKGIsZyxmKSxoKGItMixnLGYpLGFbM11dfXJldHVybiBlfSxkLkNvbG9yQ29udmVyc2lvbi5fcmdiYVRvSFNCQT1mdW5jdGlvbihhKXt2YXIgYixjLGQ9YVswXSxlPWFbMV0sZj1hWzJdLGc9TWF0aC5tYXgoZCxlLGYpLGg9Zy1NYXRoLm1pbihkLGUsZik7cmV0dXJuIDA9PT1oPyhiPTAsYz0wKTooYz1oL2csZD09PWc/Yj0oZS1mKS9oOmU9PT1nP2I9MisoZi1kKS9oOmY9PT1nJiYoYj00KyhkLWUpL2gpLGI8MD9iKz02OmI+PTYmJihiLT02KSksW2IvNixjLGcsYVszXV19LGQuQ29sb3JDb252ZXJzaW9uLl9yZ2JhVG9IU0xBPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hWzBdLGU9YVsxXSxmPWFbMl0sZz1NYXRoLm1heChkLGUsZiksaD1NYXRoLm1pbihkLGUsZiksaT1nK2gsaj1nLWg7cmV0dXJuIDA9PT1qPyhiPTAsYz0wKTooYz1pPDE/ai9pOmovKDItaSksZD09PWc/Yj0oZS1mKS9qOmU9PT1nP2I9MisoZi1kKS9qOmY9PT1nJiYoYj00KyhkLWUpL2opLGI8MD9iKz02OmI+PTYmJihiLT02KSksW2IvNixjLGkvMixhWzNdXX0sYi5leHBvcnRzPWQuQ29sb3JDb252ZXJzaW9ufSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDE1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi9wNS5Db2xvclwiKSxhKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGQucHJvdG90eXBlLmFscGhhPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJhbHBoYVwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0QWxwaGEoKX0sZC5wcm90b3R5cGUuYmx1ZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmx1ZVwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0Qmx1ZSgpfSxkLnByb3RvdHlwZS5icmlnaHRuZXNzPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJicmlnaHRuZXNzXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRCcmlnaHRuZXNzKCl9LGQucHJvdG90eXBlLmNvbG9yPWZ1bmN0aW9uKCl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29sb3JcIixhcmd1bWVudHMpLGFyZ3VtZW50c1swXWluc3RhbmNlb2YgZC5Db2xvcilyZXR1cm4gYXJndW1lbnRzWzBdO3ZhciBhPWFyZ3VtZW50c1swXWluc3RhbmNlb2YgQXJyYXk/YXJndW1lbnRzWzBdOmFyZ3VtZW50cztyZXR1cm4gbmV3IGQuQ29sb3IodGhpcyxhKX0sZC5wcm90b3R5cGUuZ3JlZW49ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImdyZWVuXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRHcmVlbigpfSxkLnByb3RvdHlwZS5odWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImh1ZVwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0SHVlKCl9LGQucHJvdG90eXBlLmxlcnBDb2xvcj1mdW5jdGlvbihhLGIsYyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibGVycENvbG9yXCIsYXJndW1lbnRzKTt2YXIgZixnLGgsaSxqLGssbD10aGlzLl9jb2xvck1vZGUsbT10aGlzLl9jb2xvck1heGVzO2lmKGw9PT1lLlJHQilqPWEubGV2ZWxzLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS8yNTV9KSxrPWIubGV2ZWxzLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS8yNTV9KTtlbHNlIGlmKGw9PT1lLkhTQilhLl9nZXRCcmlnaHRuZXNzKCksYi5fZ2V0QnJpZ2h0bmVzcygpLGo9YS5oc2JhLGs9Yi5oc2JhO2Vsc2V7aWYobCE9PWUuSFNMKXRocm93IG5ldyBFcnJvcihsK1wiY2Fubm90IGJlIHVzZWQgZm9yIGludGVycG9sYXRpb24uXCIpO2EuX2dldExpZ2h0bmVzcygpLGIuX2dldExpZ2h0bmVzcygpLGo9YS5oc2xhLGs9Yi5oc2xhfXJldHVybiBjPU1hdGgubWF4KE1hdGgubWluKGMsMSksMCksdm9pZCAwPT09dGhpcy5sZXJwJiYodGhpcy5sZXJwPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYyooYi1hKSthfSksZj10aGlzLmxlcnAoalswXSxrWzBdLGMpLGc9dGhpcy5sZXJwKGpbMV0sa1sxXSxjKSxoPXRoaXMubGVycChqWzJdLGtbMl0sYyksaT10aGlzLmxlcnAoalszXSxrWzNdLGMpLGYqPW1bbF1bMF0sZyo9bVtsXVsxXSxoKj1tW2xdWzJdLGkqPW1bbF1bM10sdGhpcy5jb2xvcihmLGcsaCxpKX0sZC5wcm90b3R5cGUubGlnaHRuZXNzPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsaWdodG5lc3NcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldExpZ2h0bmVzcygpfSxkLnByb3RvdHlwZS5yZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlZFwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0UmVkKCl9LGQucHJvdG90eXBlLnNhdHVyYXRpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdHVyYXRpb25cIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldFNhdHVyYXRpb24oKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5Db2xvclwiOjE2fV0sMTY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpLGY9YShcIi4vY29sb3JfY29udmVyc2lvblwiKTtkLkNvbG9yPWZ1bmN0aW9uKGEsYil7aWYodGhpcy5fc3RvcmVNb2RlQW5kTWF4ZXMoYS5fY29sb3JNb2RlLGEuX2NvbG9yTWF4ZXMpLHRoaXMubW9kZSE9PWUuUkdCJiZ0aGlzLm1vZGUhPT1lLkhTTCYmdGhpcy5tb2RlIT09ZS5IU0IpdGhyb3cgbmV3IEVycm9yKHRoaXMubW9kZStcIiBpcyBhbiBpbnZhbGlkIGNvbG9yTW9kZS5cIik7cmV0dXJuIHRoaXMuX2FycmF5PWQuQ29sb3IuX3BhcnNlSW5wdXRzLmFwcGx5KHRoaXMsYiksdGhpcy5fY2FsY3VsYXRlTGV2ZWxzKCksdGhpc30sZC5Db2xvci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYSl7dGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzbGF8fCh0aGlzLmhzbGE9Zi5fcmdiYVRvSFNMQSh0aGlzLl9hcnJheSkpO3ZhciBiPXRoaXMubGV2ZWxzLGM9dGhpcy5fYXJyYXksZD1jWzNdO3N3aXRjaChhKXtjYXNlXCIjcnJnZ2JiXCI6cmV0dXJuXCIjXCIuY29uY2F0KGJbMF08MTY/XCIwXCIuY29uY2F0KGJbMF0udG9TdHJpbmcoMTYpKTpiWzBdLnRvU3RyaW5nKDE2KSxiWzFdPDE2P1wiMFwiLmNvbmNhdChiWzFdLnRvU3RyaW5nKDE2KSk6YlsxXS50b1N0cmluZygxNiksYlsyXTwxNj9cIjBcIi5jb25jYXQoYlsyXS50b1N0cmluZygxNikpOmJbMl0udG9TdHJpbmcoMTYpKTtjYXNlXCIjcnJnZ2JiYWFcIjpyZXR1cm5cIiNcIi5jb25jYXQoYlswXTwxNj9cIjBcIi5jb25jYXQoYlswXS50b1N0cmluZygxNikpOmJbMF0udG9TdHJpbmcoMTYpLGJbMV08MTY/XCIwXCIuY29uY2F0KGJbMV0udG9TdHJpbmcoMTYpKTpiWzFdLnRvU3RyaW5nKDE2KSxiWzJdPDE2P1wiMFwiLmNvbmNhdChiWzJdLnRvU3RyaW5nKDE2KSk6YlsyXS50b1N0cmluZygxNiksYlszXTwxNj9cIjBcIi5jb25jYXQoYlsyXS50b1N0cmluZygxNikpOmJbM10udG9TdHJpbmcoMTYpKTtjYXNlXCIjcmdiXCI6cmV0dXJuXCIjXCIuY29uY2F0KE1hdGgucm91bmQoMTUqY1swXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1sxXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1syXSkudG9TdHJpbmcoMTYpKTtjYXNlXCIjcmdiYVwiOnJldHVyblwiI1wiLmNvbmNhdChNYXRoLnJvdW5kKDE1KmNbMF0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbMV0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbMl0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbM10pLnRvU3RyaW5nKDE2KSk7Y2FzZVwicmdiXCI6cmV0dXJuXCJyZ2IoXCIuY29uY2F0KGJbMF0sXCIsIFwiLGJbMV0sXCIsIFwiLGJbMl0sXCIpXCIpO2Nhc2VcInJnYiVcIjpyZXR1cm5cInJnYihcIi5jb25jYXQoKDEwMCpjWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1sxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwicmdiYSVcIjpyZXR1cm5cInJnYmEoXCIuY29uY2F0KCgxMDAqY1swXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzJdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1szXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2JcIjpjYXNlXCJoc3ZcIjpyZXR1cm5cImhzYihcIi5jb25jYXQodGhpcy5oc2JhWzBdKnRoaXMubWF4ZXNbZS5IU0JdWzBdLFwiLCBcIix0aGlzLmhzYmFbMV0qdGhpcy5tYXhlc1tlLkhTQl1bMV0sXCIsIFwiLHRoaXMuaHNiYVsyXSp0aGlzLm1heGVzW2UuSFNCXVsyXSxcIilcIik7Y2FzZVwiaHNiJVwiOmNhc2VcImhzdiVcIjpyZXR1cm5cImhzYihcIi5jb25jYXQoKDEwMCp0aGlzLmhzYmFbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwiaHNiYVwiOmNhc2VcImhzdmFcIjpyZXR1cm5cImhzYmEoXCIuY29uY2F0KHRoaXMuaHNiYVswXSp0aGlzLm1heGVzW2UuSFNCXVswXSxcIiwgXCIsdGhpcy5oc2JhWzFdKnRoaXMubWF4ZXNbZS5IU0JdWzFdLFwiLCBcIix0aGlzLmhzYmFbMl0qdGhpcy5tYXhlc1tlLkhTQl1bMl0sXCIsIFwiLGQsXCIpXCIpO2Nhc2VcImhzYmElXCI6Y2FzZVwiaHN2YSVcIjpyZXR1cm5cImhzYmEoXCIuY29uY2F0KCgxMDAqdGhpcy5oc2JhWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2JhWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2JhWzJdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqZCkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2xcIjpyZXR1cm5cImhzbChcIi5jb25jYXQodGhpcy5oc2xhWzBdKnRoaXMubWF4ZXNbZS5IU0xdWzBdLFwiLCBcIix0aGlzLmhzbGFbMV0qdGhpcy5tYXhlc1tlLkhTTF1bMV0sXCIsIFwiLHRoaXMuaHNsYVsyXSp0aGlzLm1heGVzW2UuSFNMXVsyXSxcIilcIik7Y2FzZVwiaHNsJVwiOnJldHVyblwiaHNsKFwiLmNvbmNhdCgoMTAwKnRoaXMuaHNsYVswXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsyXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2xhXCI6cmV0dXJuXCJoc2xhKFwiLmNvbmNhdCh0aGlzLmhzbGFbMF0qdGhpcy5tYXhlc1tlLkhTTF1bMF0sXCIsIFwiLHRoaXMuaHNsYVsxXSp0aGlzLm1heGVzW2UuSFNMXVsxXSxcIiwgXCIsdGhpcy5oc2xhWzJdKnRoaXMubWF4ZXNbZS5IU0xdWzJdLFwiLCBcIixkLFwiKVwiKTtjYXNlXCJoc2xhJVwiOnJldHVyblwiaHNsKFwiLmNvbmNhdCgoMTAwKnRoaXMuaHNsYVswXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsyXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmQpLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwicmdiYVwiOmRlZmF1bHQ6cmV0dXJuXCJyZ2JhKFwiK2JbMF0rXCIsXCIrYlsxXStcIixcIitiWzJdK1wiLFwiK2QrXCIpXCJ9fSxkLkNvbG9yLnByb3RvdHlwZS5zZXRSZWQ9ZnVuY3Rpb24oYSl7dGhpcy5fYXJyYXlbMF09YS90aGlzLm1heGVzW2UuUkdCXVswXSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKX0sZC5Db2xvci5wcm90b3R5cGUuc2V0R3JlZW49ZnVuY3Rpb24oYSl7dGhpcy5fYXJyYXlbMV09YS90aGlzLm1heGVzW2UuUkdCXVsxXSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKX0sZC5Db2xvci5wcm90b3R5cGUuc2V0Qmx1ZT1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVsyXT1hL3RoaXMubWF4ZXNbZS5SR0JdWzJdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5zZXRBbHBoYT1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVszXT1hL3RoaXMubWF4ZXNbdGhpcy5tb2RlXVszXSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKX0sZC5Db2xvci5wcm90b3R5cGUuX2NhbGN1bGF0ZUxldmVscz1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9hcnJheSxiPXRoaXMubGV2ZWxzPW5ldyBBcnJheShhLmxlbmd0aCksYz1hLmxlbmd0aC0xO2M+PTA7LS1jKWJbY109TWF0aC5yb3VuZCgyNTUqYVtjXSl9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRBbHBoYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheVszXSp0aGlzLm1heGVzW3RoaXMubW9kZV1bM119LGQuQ29sb3IucHJvdG90eXBlLl9zdG9yZU1vZGVBbmRNYXhlcz1mdW5jdGlvbihhLGIpe3RoaXMubW9kZT1hLHRoaXMubWF4ZXM9Yn0sZC5Db2xvci5wcm90b3R5cGUuX2dldE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0TWF4ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXhlc30sZC5Db2xvci5wcm90b3R5cGUuX2dldEJsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXlbMl0qdGhpcy5tYXhlc1tlLlJHQl1bMl19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRCcmlnaHRuZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHNiYXx8KHRoaXMuaHNiYT1mLl9yZ2JhVG9IU0JBKHRoaXMuX2FycmF5KSksdGhpcy5oc2JhWzJdKnRoaXMubWF4ZXNbZS5IU0JdWzJdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0R3JlZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXlbMV0qdGhpcy5tYXhlc1tlLlJHQl1bMV19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRIdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlPT09ZS5IU0I/KHRoaXMuaHNiYXx8KHRoaXMuaHNiYT1mLl9yZ2JhVG9IU0JBKHRoaXMuX2FycmF5KSksdGhpcy5oc2JhWzBdKnRoaXMubWF4ZXNbZS5IU0JdWzBdKToodGhpcy5oc2xhfHwodGhpcy5oc2xhPWYuX3JnYmFUb0hTTEEodGhpcy5fYXJyYXkpKSx0aGlzLmhzbGFbMF0qdGhpcy5tYXhlc1tlLkhTTF1bMF0pfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0TGlnaHRuZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHNsYXx8KHRoaXMuaHNsYT1mLl9yZ2JhVG9IU0xBKHRoaXMuX2FycmF5KSksdGhpcy5oc2xhWzJdKnRoaXMubWF4ZXNbZS5IU0xdWzJdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0UmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5WzBdKnRoaXMubWF4ZXNbZS5SR0JdWzBdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0U2F0dXJhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGU9PT1lLkhTQj8odGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzYmFbMV0qdGhpcy5tYXhlc1tlLkhTQl1bMV0pOih0aGlzLmhzbGF8fCh0aGlzLmhzbGE9Zi5fcmdiYVRvSFNMQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNsYVsxXSp0aGlzLm1heGVzW2UuSFNMXVsxXSl9O3ZhciBnPXthbGljZWJsdWU6XCIjZjBmOGZmXCIsYW50aXF1ZXdoaXRlOlwiI2ZhZWJkN1wiLGFxdWE6XCIjMDBmZmZmXCIsYXF1YW1hcmluZTpcIiM3ZmZmZDRcIixhenVyZTpcIiNmMGZmZmZcIixiZWlnZTpcIiNmNWY1ZGNcIixiaXNxdWU6XCIjZmZlNGM0XCIsYmxhY2s6XCIjMDAwMDAwXCIsYmxhbmNoZWRhbG1vbmQ6XCIjZmZlYmNkXCIsYmx1ZTpcIiMwMDAwZmZcIixibHVldmlvbGV0OlwiIzhhMmJlMlwiLGJyb3duOlwiI2E1MmEyYVwiLGJ1cmx5d29vZDpcIiNkZWI4ODdcIixjYWRldGJsdWU6XCIjNWY5ZWEwXCIsY2hhcnRyZXVzZTpcIiM3ZmZmMDBcIixjaG9jb2xhdGU6XCIjZDI2OTFlXCIsY29yYWw6XCIjZmY3ZjUwXCIsY29ybmZsb3dlcmJsdWU6XCIjNjQ5NWVkXCIsY29ybnNpbGs6XCIjZmZmOGRjXCIsY3JpbXNvbjpcIiNkYzE0M2NcIixjeWFuOlwiIzAwZmZmZlwiLGRhcmtibHVlOlwiIzAwMDA4YlwiLGRhcmtjeWFuOlwiIzAwOGI4YlwiLGRhcmtnb2xkZW5yb2Q6XCIjYjg4NjBiXCIsZGFya2dyYXk6XCIjYTlhOWE5XCIsZGFya2dyZWVuOlwiIzAwNjQwMFwiLGRhcmtncmV5OlwiI2E5YTlhOVwiLGRhcmtraGFraTpcIiNiZGI3NmJcIixkYXJrbWFnZW50YTpcIiM4YjAwOGJcIixkYXJrb2xpdmVncmVlbjpcIiM1NTZiMmZcIixkYXJrb3JhbmdlOlwiI2ZmOGMwMFwiLGRhcmtvcmNoaWQ6XCIjOTkzMmNjXCIsZGFya3JlZDpcIiM4YjAwMDBcIixkYXJrc2FsbW9uOlwiI2U5OTY3YVwiLGRhcmtzZWFncmVlbjpcIiM4ZmJjOGZcIixkYXJrc2xhdGVibHVlOlwiIzQ4M2Q4YlwiLGRhcmtzbGF0ZWdyYXk6XCIjMmY0ZjRmXCIsZGFya3NsYXRlZ3JleTpcIiMyZjRmNGZcIixkYXJrdHVycXVvaXNlOlwiIzAwY2VkMVwiLGRhcmt2aW9sZXQ6XCIjOTQwMGQzXCIsZGVlcHBpbms6XCIjZmYxNDkzXCIsZGVlcHNreWJsdWU6XCIjMDBiZmZmXCIsZGltZ3JheTpcIiM2OTY5NjlcIixkaW1ncmV5OlwiIzY5Njk2OVwiLGRvZGdlcmJsdWU6XCIjMWU5MGZmXCIsZmlyZWJyaWNrOlwiI2IyMjIyMlwiLGZsb3JhbHdoaXRlOlwiI2ZmZmFmMFwiLGZvcmVzdGdyZWVuOlwiIzIyOGIyMlwiLGZ1Y2hzaWE6XCIjZmYwMGZmXCIsZ2FpbnNib3JvOlwiI2RjZGNkY1wiLGdob3N0d2hpdGU6XCIjZjhmOGZmXCIsZ29sZDpcIiNmZmQ3MDBcIixnb2xkZW5yb2Q6XCIjZGFhNTIwXCIsZ3JheTpcIiM4MDgwODBcIixncmVlbjpcIiMwMDgwMDBcIixncmVlbnllbGxvdzpcIiNhZGZmMmZcIixncmV5OlwiIzgwODA4MFwiLGhvbmV5ZGV3OlwiI2YwZmZmMFwiLGhvdHBpbms6XCIjZmY2OWI0XCIsaW5kaWFucmVkOlwiI2NkNWM1Y1wiLGluZGlnbzpcIiM0YjAwODJcIixpdm9yeTpcIiNmZmZmZjBcIixraGFraTpcIiNmMGU2OGNcIixsYXZlbmRlcjpcIiNlNmU2ZmFcIixsYXZlbmRlcmJsdXNoOlwiI2ZmZjBmNVwiLGxhd25ncmVlbjpcIiM3Y2ZjMDBcIixsZW1vbmNoaWZmb246XCIjZmZmYWNkXCIsbGlnaHRibHVlOlwiI2FkZDhlNlwiLGxpZ2h0Y29yYWw6XCIjZjA4MDgwXCIsbGlnaHRjeWFuOlwiI2UwZmZmZlwiLGxpZ2h0Z29sZGVucm9keWVsbG93OlwiI2ZhZmFkMlwiLGxpZ2h0Z3JheTpcIiNkM2QzZDNcIixsaWdodGdyZWVuOlwiIzkwZWU5MFwiLGxpZ2h0Z3JleTpcIiNkM2QzZDNcIixsaWdodHBpbms6XCIjZmZiNmMxXCIsbGlnaHRzYWxtb246XCIjZmZhMDdhXCIsbGlnaHRzZWFncmVlbjpcIiMyMGIyYWFcIixsaWdodHNreWJsdWU6XCIjODdjZWZhXCIsbGlnaHRzbGF0ZWdyYXk6XCIjNzc4ODk5XCIsbGlnaHRzbGF0ZWdyZXk6XCIjNzc4ODk5XCIsbGlnaHRzdGVlbGJsdWU6XCIjYjBjNGRlXCIsbGlnaHR5ZWxsb3c6XCIjZmZmZmUwXCIsbGltZTpcIiMwMGZmMDBcIixsaW1lZ3JlZW46XCIjMzJjZDMyXCIsbGluZW46XCIjZmFmMGU2XCIsbWFnZW50YTpcIiNmZjAwZmZcIixtYXJvb246XCIjODAwMDAwXCIsbWVkaXVtYXF1YW1hcmluZTpcIiM2NmNkYWFcIixtZWRpdW1ibHVlOlwiIzAwMDBjZFwiLG1lZGl1bW9yY2hpZDpcIiNiYTU1ZDNcIixtZWRpdW1wdXJwbGU6XCIjOTM3MGRiXCIsbWVkaXVtc2VhZ3JlZW46XCIjM2NiMzcxXCIsbWVkaXVtc2xhdGVibHVlOlwiIzdiNjhlZVwiLG1lZGl1bXNwcmluZ2dyZWVuOlwiIzAwZmE5YVwiLG1lZGl1bXR1cnF1b2lzZTpcIiM0OGQxY2NcIixtZWRpdW12aW9sZXRyZWQ6XCIjYzcxNTg1XCIsbWlkbmlnaHRibHVlOlwiIzE5MTk3MFwiLG1pbnRjcmVhbTpcIiNmNWZmZmFcIixtaXN0eXJvc2U6XCIjZmZlNGUxXCIsbW9jY2FzaW46XCIjZmZlNGI1XCIsbmF2YWpvd2hpdGU6XCIjZmZkZWFkXCIsbmF2eTpcIiMwMDAwODBcIixvbGRsYWNlOlwiI2ZkZjVlNlwiLG9saXZlOlwiIzgwODAwMFwiLG9saXZlZHJhYjpcIiM2YjhlMjNcIixvcmFuZ2U6XCIjZmZhNTAwXCIsb3JhbmdlcmVkOlwiI2ZmNDUwMFwiLG9yY2hpZDpcIiNkYTcwZDZcIixwYWxlZ29sZGVucm9kOlwiI2VlZThhYVwiLHBhbGVncmVlbjpcIiM5OGZiOThcIixwYWxldHVycXVvaXNlOlwiI2FmZWVlZVwiLHBhbGV2aW9sZXRyZWQ6XCIjZGI3MDkzXCIscGFwYXlhd2hpcDpcIiNmZmVmZDVcIixwZWFjaHB1ZmY6XCIjZmZkYWI5XCIscGVydTpcIiNjZDg1M2ZcIixwaW5rOlwiI2ZmYzBjYlwiLHBsdW06XCIjZGRhMGRkXCIscG93ZGVyYmx1ZTpcIiNiMGUwZTZcIixwdXJwbGU6XCIjODAwMDgwXCIscmVkOlwiI2ZmMDAwMFwiLHJvc3licm93bjpcIiNiYzhmOGZcIixyb3lhbGJsdWU6XCIjNDE2OWUxXCIsc2FkZGxlYnJvd246XCIjOGI0NTEzXCIsc2FsbW9uOlwiI2ZhODA3MlwiLHNhbmR5YnJvd246XCIjZjRhNDYwXCIsc2VhZ3JlZW46XCIjMmU4YjU3XCIsc2Vhc2hlbGw6XCIjZmZmNWVlXCIsc2llbm5hOlwiI2EwNTIyZFwiLHNpbHZlcjpcIiNjMGMwYzBcIixza3libHVlOlwiIzg3Y2VlYlwiLHNsYXRlYmx1ZTpcIiM2YTVhY2RcIixzbGF0ZWdyYXk6XCIjNzA4MDkwXCIsc2xhdGVncmV5OlwiIzcwODA5MFwiLHNub3c6XCIjZmZmYWZhXCIsc3ByaW5nZ3JlZW46XCIjMDBmZjdmXCIsc3RlZWxibHVlOlwiIzQ2ODJiNFwiLHRhbjpcIiNkMmI0OGNcIix0ZWFsOlwiIzAwODA4MFwiLHRoaXN0bGU6XCIjZDhiZmQ4XCIsdG9tYXRvOlwiI2ZmNjM0N1wiLHR1cnF1b2lzZTpcIiM0MGUwZDBcIix2aW9sZXQ6XCIjZWU4MmVlXCIsd2hlYXQ6XCIjZjVkZWIzXCIsd2hpdGU6XCIjZmZmZmZmXCIsd2hpdGVzbW9rZTpcIiNmNWY1ZjVcIix5ZWxsb3c6XCIjZmZmZjAwXCIseWVsbG93Z3JlZW46XCIjOWFjZDMyXCJ9LGg9L1xccyovLGk9LyhcXGR7MSwzfSkvLGo9LygoPzpcXGQrKD86XFwuXFxkKyk/KXwoPzpcXC5cXGQrKSkvLGs9bmV3IFJlZ0V4cChqLnNvdXJjZStcIiVcIiksbD17SEVYMzovXiMoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkkL2ksSEVYNDovXiMoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkoW2EtZjAtOV0pJC9pLEhFWDY6L14jKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pJC9pLEhFWDg6L14jKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KSQvaSxSR0I6bmV3IFJlZ0V4cChbXCJecmdiXFxcXChcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksUkdCX1BFUkNFTlQ6bmV3IFJlZ0V4cChbXCJecmdiXFxcXChcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksUkdCQTpuZXcgUmVnRXhwKFtcIl5yZ2JhXFxcXChcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIixcIixqLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksUkdCQV9QRVJDRU5UOm5ldyBSZWdFeHAoW1wiXnJnYmFcXFxcKFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGouc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxIU0w6bmV3IFJlZ0V4cChbXCJeaHNsXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksSFNMQTpuZXcgUmVnRXhwKFtcIl5oc2xhXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixqLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksSFNCOm5ldyBSZWdFeHAoW1wiXmhzYlxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLEhTQkE6bmV3IFJlZ0V4cChbXCJeaHNiYVxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsai5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpfTtkLkNvbG9yLl9wYXJzZUlucHV0cz1mdW5jdGlvbihhLGIsYyxoKXt2YXIgaSxqPWFyZ3VtZW50cy5sZW5ndGgsaz10aGlzLm1vZGUsbT10aGlzLm1heGVzW2tdLG49W107aWYoaj49Myl7Zm9yKG5bMF09YS9tWzBdLG5bMV09Yi9tWzFdLG5bMl09Yy9tWzJdLG5bM109XCJudW1iZXJcIj09dHlwZW9mIGg/aC9tWzNdOjEsaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgbz1uW2ldO288MD9uW2ldPTA6bz4xJiYobltpXT0xKX1yZXR1cm4gaz09PWUuSFNMP2YuX2hzbGFUb1JHQkEobik6az09PWUuSFNCP2YuX2hzYmFUb1JHQkEobik6bn1pZigxPT09aiYmXCJzdHJpbmdcIj09dHlwZW9mIGEpe3ZhciBwPWEudHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoZ1twXSlyZXR1cm4gZC5Db2xvci5fcGFyc2VJbnB1dHMuY2FsbCh0aGlzLGdbcF0pO2lmKGwuSEVYMy50ZXN0KHApKXJldHVybiBuPWwuSEVYMy5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSthLDE2KS8yNTV9KSxuWzNdPTEsbjtpZihsLkhFWDYudGVzdChwKSlyZXR1cm4gbj1sLkhFWDYuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGEsMTYpLzI1NX0pLG5bM109MSxuO2lmKGwuSEVYNC50ZXN0KHApKXJldHVybiBuPWwuSEVYNC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSthLDE2KS8yNTV9KTtpZihsLkhFWDgudGVzdChwKSlyZXR1cm4gbj1sLkhFWDguZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGEsMTYpLzI1NX0pO2lmKGwuUkdCLnRlc3QocCkpcmV0dXJuIG49bC5SR0IuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEvMjU1fSksblszXT0xLG47aWYobC5SR0JfUEVSQ0VOVC50ZXN0KHApKXJldHVybiBuPWwuUkdCX1BFUkNFTlQuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlRmxvYXQoYSkvMTAwfSksblszXT0xLG47aWYobC5SR0JBLnRlc3QocCkpcmV0dXJuIG49bC5SR0JBLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDM9PT1iP3BhcnNlRmxvYXQoYSk6YS8yNTV9KTtpZihsLlJHQkFfUEVSQ0VOVC50ZXN0KHApKXJldHVybiBuPWwuUkdCQV9QRVJDRU5ULmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDM9PT1iP3BhcnNlRmxvYXQoYSk6cGFyc2VGbG9hdChhKS8xMDB9KTtpZihsLkhTTC50ZXN0KHApPyhuPWwuSFNMLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDA9PT1iP3BhcnNlSW50KGEsMTApLzM2MDpwYXJzZUludChhLDEwKS8xMDB9KSxuWzNdPTEpOmwuSFNMQS50ZXN0KHApJiYobj1sLkhTTEEuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOjM9PT1iP3BhcnNlRmxvYXQoYSk6cGFyc2VJbnQoYSwxMCkvMTAwfSkpLG49bi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKGEsMSksMCl9KSxuLmxlbmd0aClyZXR1cm4gZi5faHNsYVRvUkdCQShuKTtpZihsLkhTQi50ZXN0KHApPyhuPWwuSFNCLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDA9PT1iP3BhcnNlSW50KGEsMTApLzM2MDpwYXJzZUludChhLDEwKS8xMDB9KSxuWzNdPTEpOmwuSFNCQS50ZXN0KHApJiYobj1sLkhTQkEuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOjM9PT1iP3BhcnNlRmxvYXQoYSk6cGFyc2VJbnQoYSwxMCkvMTAwfSkpLG4ubGVuZ3RoKXtmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKW5baV09TWF0aC5tYXgoTWF0aC5taW4obltpXSwxKSwwKTtyZXR1cm4gZi5faHNiYVRvUkdCQShuKX1uPVsxLDEsMSwxXX1lbHNle2lmKDEhPT1qJiYyIT09anx8XCJudW1iZXJcIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKGFyZ3VtZW50cytcImlzIG5vdCBhIHZhbGlkIGNvbG9yIHJlcHJlc2VudGF0aW9uLlwiKTtuWzBdPWEvbVsyXSxuWzFdPWEvbVsyXSxuWzJdPWEvbVsyXSxuWzNdPVwibnVtYmVyXCI9PXR5cGVvZiBiP2IvbVszXToxLG49bi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKGEsMSksMCl9KX1yZXR1cm4gbn0sYi5leHBvcnRzPWQuQ29sb3J9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vY29sb3JfY29udmVyc2lvblwiOjE0fV0sMTc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuL3A1LkNvbG9yXCIpLGQucHJvdG90eXBlLmJhY2tncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkLkltYWdlP3RoaXMuaW1hZ2UoYXJndW1lbnRzWzBdLDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTp0aGlzLl9yZW5kZXJlci5iYWNrZ3JvdW5kLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuY2xlYXIoKSx0aGlzfSxkLnByb3RvdHlwZS5jb2xvck1vZGU9ZnVuY3Rpb24oYSxiLGMsZixnKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjb2xvck1vZGVcIixhcmd1bWVudHMpLGE9PT1lLlJHQnx8YT09PWUuSFNCfHxhPT09ZS5IU0wpe3RoaXMuX2NvbG9yTW9kZT1hO3ZhciBoPXRoaXMuX2NvbG9yTWF4ZXNbYV07Mj09PWFyZ3VtZW50cy5sZW5ndGg/KGhbMF09YixoWzFdPWIsaFsyXT1iLGhbM109Yik6ND09PWFyZ3VtZW50cy5sZW5ndGg/KGhbMF09YixoWzFdPWMsaFsyXT1mKTo1PT09YXJndW1lbnRzLmxlbmd0aCYmKGhbMF09YixoWzFdPWMsaFsyXT1mLGhbM109Zyl9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2ZpbGxTZXRcIiwhMCksdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvRmlsbFwiLCEwKSx0aGlzLl9yZW5kZXJlci5maWxsLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUubm9GaWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9kb0ZpbGxcIiwhMSksdGhpc30sZC5wcm90b3R5cGUubm9TdHJva2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvU3Ryb2tlXCIsITEpLHRoaXN9LGQucHJvdG90eXBlLnN0cm9rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfc3Ryb2tlU2V0XCIsITApLHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9kb1N0cm9rZVwiLCEwKSx0aGlzLl9yZW5kZXJlci5zdHJva2UuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5Db2xvclwiOjE2fV0sMTg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1NYXRoLlBJO2IuZXhwb3J0cz17UDJEOlwicDJkXCIsV0VCR0w6XCJ3ZWJnbFwiLEFSUk9XOlwiZGVmYXVsdFwiLENST1NTOlwiY3Jvc3NoYWlyXCIsSEFORDpcInBvaW50ZXJcIixNT1ZFOlwibW92ZVwiLFRFWFQ6XCJ0ZXh0XCIsV0FJVDpcIndhaXRcIixIQUxGX1BJOmQvMixQSTpkLFFVQVJURVJfUEk6ZC80LFRBVToyKmQsVFdPX1BJOjIqZCxERUdSRUVTOlwiZGVncmVlc1wiLFJBRElBTlM6XCJyYWRpYW5zXCIsREVHX1RPX1JBRDpkLzE4MCxSQURfVE9fREVHOjE4MC9kLENPUk5FUjpcImNvcm5lclwiLENPUk5FUlM6XCJjb3JuZXJzXCIsUkFESVVTOlwicmFkaXVzXCIsUklHSFQ6XCJyaWdodFwiLExFRlQ6XCJsZWZ0XCIsQ0VOVEVSOlwiY2VudGVyXCIsVE9QOlwidG9wXCIsQk9UVE9NOlwiYm90dG9tXCIsQkFTRUxJTkU6XCJhbHBoYWJldGljXCIsUE9JTlRTOjAsTElORVM6MSxMSU5FX1NUUklQOjMsTElORV9MT09QOjIsVFJJQU5HTEVTOjQsVFJJQU5HTEVfRkFOOjYsVFJJQU5HTEVfU1RSSVA6NSxRVUFEUzpcInF1YWRzXCIsUVVBRF9TVFJJUDpcInF1YWRfc3RyaXBcIixDTE9TRTpcImNsb3NlXCIsT1BFTjpcIm9wZW5cIixDSE9SRDpcImNob3JkXCIsUElFOlwicGllXCIsUFJPSkVDVDpcInNxdWFyZVwiLFNRVUFSRTpcImJ1dHRcIixST1VORDpcInJvdW5kXCIsQkVWRUw6XCJiZXZlbFwiLE1JVEVSOlwibWl0ZXJcIixSR0I6XCJyZ2JcIixIU0I6XCJoc2JcIixIU0w6XCJoc2xcIixBVVRPOlwiYXV0b1wiLEFMVDoxOCxCQUNLU1BBQ0U6OCxDT05UUk9MOjE3LERFTEVURTo0NixET1dOX0FSUk9XOjQwLEVOVEVSOjEzLEVTQ0FQRToyNyxMRUZUX0FSUk9XOjM3LE9QVElPTjoxOCxSRVRVUk46MTMsUklHSFRfQVJST1c6MzksU0hJRlQ6MTYsVEFCOjksVVBfQVJST1c6MzgsQkxFTkQ6XCJzb3VyY2Utb3ZlclwiLEFERDpcImxpZ2h0ZXJcIixEQVJLRVNUOlwiZGFya2VuXCIsTElHSFRFU1Q6XCJsaWdodGVuXCIsRElGRkVSRU5DRTpcImRpZmZlcmVuY2VcIixFWENMVVNJT046XCJleGNsdXNpb25cIixNVUxUSVBMWTpcIm11bHRpcGx5XCIsU0NSRUVOOlwic2NyZWVuXCIsUkVQTEFDRTpcImNvcHlcIixPVkVSTEFZOlwib3ZlcmxheVwiLEhBUkRfTElHSFQ6XCJoYXJkLWxpZ2h0XCIsU09GVF9MSUdIVDpcInNvZnQtbGlnaHRcIixET0RHRTpcImNvbG9yLWRvZGdlXCIsQlVSTjpcImNvbG9yLWJ1cm5cIixUSFJFU0hPTEQ6XCJ0aHJlc2hvbGRcIixHUkFZOlwiZ3JheVwiLE9QQVFVRTpcIm9wYXF1ZVwiLElOVkVSVDpcImludmVydFwiLFBPU1RFUklaRTpcInBvc3Rlcml6ZVwiLERJTEFURTpcImRpbGF0ZVwiLEVST0RFOlwiZXJvZGVcIixCTFVSOlwiYmx1clwiLE5PUk1BTDpcIm5vcm1hbFwiLElUQUxJQzpcIml0YWxpY1wiLEJPTEQ6XCJib2xkXCIsX0RFRkFVTFRfVEVYVF9GSUxMOlwiIzAwMDAwMFwiLF9ERUZBVUxUX0xFQURNVUxUOjEuMjUsX0NUWF9NSURETEU6XCJtaWRkbGVcIixMSU5FQVI6XCJsaW5lYXJcIixRVUFEUkFUSUM6XCJxdWFkcmF0aWNcIixCRVpJRVI6XCJiZXppZXJcIixDVVJWRTpcImN1cnZlXCIsU1RST0tFOlwic3Ryb2tlXCIsRklMTDpcImZpbGxcIixURVhUVVJFOlwidGV4dHVyZVwiLElNTUVESUFURTpcImltbWVkaWF0ZVwiLE5FQVJFU1Q6XCJuZWFyZXN0XCIsUkVQRUFUOlwicmVwZWF0XCIsQ0xBTVA6XCJjbGFtcFwiLE1JUlJPUjpcIm1pcnJvclwiLExBTkRTQ0FQRTpcImxhbmRzY2FwZVwiLFBPUlRSQUlUOlwicG9ydHJhaXRcIixfREVGQVVMVF9TVFJPS0U6XCIjMDAwMDAwXCIsX0RFRkFVTFRfRklMTDpcIiNGRkZGRkZcIixHUklEOlwiZ3JpZFwiLEFYRVM6XCJheGVzXCJ9fSx7fV0sMTk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKCl7cmV0dXJuIHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aHx8ZG9jdW1lbnQuYm9keSYmZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aHx8MH1mdW5jdGlvbiBlKCl7cmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0fHxkb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodHx8MH1mdW5jdGlvbiBmKGEpe2lmKCEoZG9jdW1lbnQuZnVsbHNjcmVlbkVuYWJsZWR8fGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkfHxkb2N1bWVudC5tb3pGdWxsU2NyZWVuRW5hYmxlZHx8ZG9jdW1lbnQubXNGdWxsc2NyZWVuRW5hYmxlZCkpdGhyb3cgbmV3IEVycm9yKFwiRnVsbHNjcmVlbiBub3QgZW5hYmxlZCBpbiB0aGlzIGJyb3dzZXIuXCIpXG47YS5yZXF1ZXN0RnVsbHNjcmVlbj9hLnJlcXVlc3RGdWxsc2NyZWVuKCk6YS5tb3pSZXF1ZXN0RnVsbFNjcmVlbj9hLm1velJlcXVlc3RGdWxsU2NyZWVuKCk6YS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbj9hLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCk6YS5tc1JlcXVlc3RGdWxsc2NyZWVuJiZhLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKX1mdW5jdGlvbiBnKCl7ZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4/ZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTpkb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuP2RvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTpkb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbj9kb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbigpOmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4mJmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4oKX12YXIgaD1hKFwiLi9tYWluXCIpLGk9YShcIi4vY29uc3RhbnRzXCIpLGo9W2kuQVJST1csaS5DUk9TUyxpLkhBTkQsaS5NT1ZFLGkuVEVYVCxpLldBSVRdO2gucHJvdG90eXBlLl9mcmFtZVJhdGU9MCxoLnByb3RvdHlwZS5fbGFzdEZyYW1lVGltZT13aW5kb3cucGVyZm9ybWFuY2Uubm93KCksaC5wcm90b3R5cGUuX3RhcmdldEZyYW1lUmF0ZT02MDt2YXIgaz13aW5kb3cucHJpbnQ7aC5wcm90b3R5cGUucHJpbnQ9ZnVuY3Rpb24oKXthcmd1bWVudHMubGVuZ3RoP2NvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsYXJndW1lbnRzKTprKCl9LGgucHJvdG90eXBlLmZyYW1lQ291bnQ9MCxoLnByb3RvdHlwZS5mb2N1c2VkPWRvY3VtZW50Lmhhc0ZvY3VzKCksaC5wcm90b3R5cGUuY3Vyc29yPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1cImF1dG9cIixlPXRoaXMuX2N1ckVsZW1lbnQuZWx0O2lmKGouaW5kZXhPZihhKT4tMSlkPWE7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYSl7dmFyIGY9XCJcIjtiJiZjJiZcIm51bWJlclwiPT10eXBlb2YgYiYmXCJudW1iZXJcIj09dHlwZW9mIGMmJihmPWIrXCIgXCIrYyksZD1cImh0dHA6Ly9cIj09PWEuc3Vic3RyaW5nKDAsNyl8fFwiaHR0cHM6Ly9cIj09PWEuc3Vic3RyaW5nKDAsOCk/XCJ1cmwoXCIrYStcIikgXCIrZitcIiwgYXV0b1wiOi9cXC4oY3VyfGpwZ3xqcGVnfGdpZnxwbmd8Q1VSfEpQR3xKUEVHfEdJRnxQTkcpJC8udGVzdChhKT9cInVybChcIithK1wiKSBcIitmK1wiLCBhdXRvXCI6YX1lLnN0eWxlLmN1cnNvcj1kfSxoLnByb3RvdHlwZS5mcmFtZVJhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcImZyYW1lUmF0ZVwiLGFyZ3VtZW50cyksXCJudW1iZXJcIiE9dHlwZW9mIGF8fGE8MD90aGlzLl9mcmFtZVJhdGU6KHRoaXMuX3NldFByb3BlcnR5KFwiX3RhcmdldEZyYW1lUmF0ZVwiLGEpLHRoaXMuX3J1bkZyYW1lcygpLHRoaXMpfSxoLnByb3RvdHlwZS5nZXRGcmFtZVJhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcmFtZVJhdGUoKX0saC5wcm90b3R5cGUuc2V0RnJhbWVSYXRlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZyYW1lUmF0ZShhKX0saC5wcm90b3R5cGUubm9DdXJzb3I9ZnVuY3Rpb24oKXt0aGlzLl9jdXJFbGVtZW50LmVsdC5zdHlsZS5jdXJzb3I9XCJub25lXCJ9LGgucHJvdG90eXBlLmRpc3BsYXlXaWR0aD1zY3JlZW4ud2lkdGgsaC5wcm90b3R5cGUuZGlzcGxheUhlaWdodD1zY3JlZW4uaGVpZ2h0LGgucHJvdG90eXBlLndpbmRvd1dpZHRoPWQoKSxoLnByb3RvdHlwZS53aW5kb3dIZWlnaHQ9ZSgpLGgucHJvdG90eXBlLl9vbnJlc2l6ZT1mdW5jdGlvbihhKXt0aGlzLl9zZXRQcm9wZXJ0eShcIndpbmRvd1dpZHRoXCIsZCgpKSx0aGlzLl9zZXRQcm9wZXJ0eShcIndpbmRvd0hlaWdodFwiLGUoKSk7dmFyIGIsYz10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztcImZ1bmN0aW9uXCI9PXR5cGVvZiBjLndpbmRvd1Jlc2l6ZWQmJih2b2lkIDA9PT0oYj1jLndpbmRvd1Jlc2l6ZWQoYSkpfHxifHxhLnByZXZlbnREZWZhdWx0KCkpfSxoLnByb3RvdHlwZS53aWR0aD0wLGgucHJvdG90eXBlLmhlaWdodD0wLGgucHJvdG90eXBlLmZ1bGxzY3JlZW49ZnVuY3Rpb24oYSl7aWYoaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZnVsbHNjcmVlblwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSlyZXR1cm4gZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnR8fGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tb3pGdWxsU2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVudDthP2YoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTpnKCl9LGgucHJvdG90eXBlLnBpeGVsRGVuc2l0eT1mdW5jdGlvbihhKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwaXhlbERlbnNpdHlcIixhcmd1bWVudHMpO3ZhciBiO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPyhhIT09dGhpcy5fcGl4ZWxEZW5zaXR5JiYodGhpcy5fcGl4ZWxEZW5zaXR5PWEsdGhpcy5fcGl4ZWxzRGlydHk9ITApLGI9dGhpcyx0aGlzLnJlc2l6ZUNhbnZhcyh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LCEwKSk6Yj10aGlzLl9waXhlbERlbnNpdHksYn0saC5wcm90b3R5cGUuZGlzcGxheURlbnNpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmRldmljZVBpeGVsUmF0aW99LGgucHJvdG90eXBlLmdldFVSTD1mdW5jdGlvbigpe3JldHVybiBsb2NhdGlvbi5ocmVmfSxoLnByb3RvdHlwZS5nZXRVUkxQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIGxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KFwiL1wiKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuXCJcIiE9PWF9KX0saC5wcm90b3R5cGUuZ2V0VVJMUGFyYW1zPWZ1bmN0aW9uKCl7Zm9yKHZhciBhLGI9L1s/Jl0oW14mPV0rKSg/OlsmPV0pKFteJj1dKykvZ2ltLGM9e307bnVsbCE9KGE9Yi5leGVjKGxvY2F0aW9uLnNlYXJjaCkpOylhLmluZGV4PT09Yi5sYXN0SW5kZXgmJmIubGFzdEluZGV4KyssY1thWzFdXT1hWzJdO3JldHVybiBjfSxiLmV4cG9ydHM9aH0se1wiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0fV0sMjA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2EoXCIuL2NvbnN0YW50c1wiKTtkLl92YWxpZGF0ZVBhcmFtZXRlcnM9ZC5fZnJpZW5kbHlGaWxlTG9hZEVycm9yPWZ1bmN0aW9uKCl7fTt2YXIgZT1udWxsLGY9XCJodHRwczovL2dpdGh1Yi5jb20vcHJvY2Vzc2luZy9wNS5qcy93aWtpL3A1LmpzLW92ZXJ2aWV3I3doeS1jYW50LWktYXNzaWduLXZhcmlhYmxlcy11c2luZy1wNS1mdW5jdGlvbnMtYW5kLXZhcmlhYmxlcy1iZWZvcmUtc2V0dXBcIixnPWZ1bmN0aW9uKCl7dmFyIGI9e30sYz1mdW5jdGlvbihhKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVyblwiX1wiIT09YVswXSYmKCEoYSBpbiBiKSYmKGJbYV09ITAsITApKX0pLm1hcChmdW5jdGlvbihiKXt2YXIgYztyZXR1cm4gYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBhW2JdP1wiZnVuY3Rpb25cIjpiPT09Yi50b1VwcGVyQ2FzZSgpP1wiY29uc3RhbnRcIjpcInZhcmlhYmxlXCIse25hbWU6Yix0eXBlOmN9fSl9O2U9W10uY29uY2F0KGMoZC5wcm90b3R5cGUpLGMoYShcIi4vY29uc3RhbnRzXCIpKSksZS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGIubmFtZS5sZW5ndGgtYS5uYW1lLmxlbmd0aH0pfSxoPWZ1bmN0aW9uKGEsYil7Ynx8KGI9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSksZXx8ZygpLGUuc29tZShmdW5jdGlvbihjKXtpZihhLm1lc3NhZ2UmJm51bGwhPT1hLm1lc3NhZ2UubWF0Y2goXCJcXFxcVz9cIitjLm5hbWUrXCJcXFxcV1wiKSlyZXR1cm4gYihcIkRpZCB5b3UganVzdCB0cnkgdG8gdXNlIHA1LmpzJ3MgXCIrYy5uYW1lKyhcImZ1bmN0aW9uXCI9PT1jLnR5cGU/XCIoKSBcIjpcIiBcIikrYy50eXBlK1wiPyBJZiBzbywgeW91IG1heSB3YW50IHRvIG1vdmUgaXQgaW50byB5b3VyIHNrZXRjaCdzIHNldHVwKCkgZnVuY3Rpb24uXFxuXFxuRm9yIG1vcmUgZGV0YWlscywgc2VlOiBcIitmKSwhMH0pfTtkLnByb3RvdHlwZS5faGVscEZvck1pc3VzZWRBdFRvcExldmVsQ29kZT1oLFwiY29tcGxldGVcIiE9PWRvY3VtZW50LnJlYWR5U3RhdGUmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsaCwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsaCwhMSl9KSksYi5leHBvcnRzPWR9LHtcIi4uLy4uL2RvY3MvcmVmZXJlbmNlL2RhdGEuanNvblwiOnZvaWQgMCxcIi4vY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNH1dLDIxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vY29uc3RhbnRzXCIpO2IuZXhwb3J0cz17bW9kZUFkanVzdDpmdW5jdGlvbihhLGIsYyxlLGYpe3JldHVybiBmPT09ZC5DT1JORVI/e3g6YSx5OmIsdzpjLGg6ZX06Zj09PWQuQ09STkVSUz97eDphLHk6Yix3OmMtYSxoOmUtYn06Zj09PWQuUkFESVVTP3t4OmEtYyx5OmItZSx3OjIqYyxoOjIqZX06Zj09PWQuQ0VOVEVSP3t4OmEtLjUqYyx5OmItLjUqZSx3OmMsaDplfTp2b2lkIDB9fX0se1wiLi9jb25zdGFudHNcIjoxOH1dLDIyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWZ1bmN0aW9uKCl7d2luZG93Lm1vY2hhfHwod2luZG93LnNldHVwJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuc2V0dXB8fHdpbmRvdy5kcmF3JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuZHJhdykmJiFkLmluc3RhbmNlJiZuZXcgZH07XCJjb21wbGV0ZVwiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9lKCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsZSwhMSl9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMjM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2QucHJvdG90eXBlLmV4aXQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJleGl0KCkgbm90IGltcGxlbWVudGVkLCBzZWUgcmVtb3ZlKClcIil9LGQucHJvdG90eXBlLnB1c2hTdHlsZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInB1c2hTdHlsZSgpIG5vdCB1c2VkLCBzZWUgcHVzaCgpXCIpfSxkLnByb3RvdHlwZS5wb3BTdHlsZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInBvcFN0eWxlKCkgbm90IHVzZWQsIHNlZSBwb3AoKVwiKX0sZC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3ZhciBhPVwic2l6ZSgpIGlzIG5vdCBhIHZhbGlkIHA1IGZ1bmN0aW9uLCB0byBzZXQgdGhlIHNpemUgb2YgdGhlIFwiO3Rocm93IGErPVwiZHJhd2luZyBjYW52YXMsIHBsZWFzZSB1c2UgY3JlYXRlQ2FudmFzKCkgaW5zdGVhZFwiLG5ldyBFcnJvcihhKX0sYi5leHBvcnRzPWR9LHtcIi4vbWFpblwiOjI0fV0sMjQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjthKFwiLi9zaGltXCIpO3ZhciBkPWEoXCIuL2NvbnN0YW50c1wiKSxlPWZ1bmN0aW9uKGEsYixjKXtcImJvb2xlYW5cIj09dHlwZW9mIGImJnZvaWQgMD09PWMmJihjPWIsYj12b2lkIDApLHRoaXMuX3NldHVwRG9uZT0hMSx0aGlzLl9waXhlbERlbnNpdHk9TWF0aC5jZWlsKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKXx8MSx0aGlzLl91c2VyTm9kZT1iLHRoaXMuX2N1ckVsZW1lbnQ9bnVsbCx0aGlzLl9lbGVtZW50cz1bXSx0aGlzLl9yZXF1ZXN0QW5pbUlkPTAsdGhpcy5fcHJlbG9hZENvdW50PTAsdGhpcy5faXNHbG9iYWw9ITEsdGhpcy5fbG9vcD0hMCx0aGlzLl9pbml0aWFsaXplSW5zdGFuY2VWYXJpYWJsZXMoKSx0aGlzLl9kZWZhdWx0Q2FudmFzU2l6ZT17d2lkdGg6MTAwLGhlaWdodDoxMDB9LHRoaXMuX2V2ZW50cz17bW91c2Vtb3ZlOm51bGwsbW91c2Vkb3duOm51bGwsbW91c2V1cDpudWxsLGRyYWdlbmQ6bnVsbCxkcmFnb3ZlcjpudWxsLGNsaWNrOm51bGwsZGJsY2xpY2s6bnVsbCxtb3VzZW92ZXI6bnVsbCxtb3VzZW91dDpudWxsLGtleWRvd246bnVsbCxrZXl1cDpudWxsLGtleXByZXNzOm51bGwsdG91Y2hzdGFydDpudWxsLHRvdWNobW92ZTpudWxsLHRvdWNoZW5kOm51bGwscmVzaXplOm51bGwsYmx1cjpudWxsfSx0aGlzLl9ldmVudHMud2hlZWw9bnVsbCx0aGlzLl9sb2FkaW5nU2NyZWVuSWQ9XCJwNV9sb2FkaW5nXCIsdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHM9e307Zm9yKHZhciBkPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUucHJvdG90eXBlLl9yZWdpc3RlcmVkTWV0aG9kcyksZj0wO2Y8ZC5sZW5ndGg7ZisrKXt2YXIgZz1kW2ZdO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzW2ddPWUucHJvdG90eXBlLl9yZWdpc3RlcmVkTWV0aG9kc1tnXS5zbGljZSgpfXdpbmRvdy5EZXZpY2VPcmllbnRhdGlvbkV2ZW50JiYodGhpcy5fZXZlbnRzLmRldmljZW9yaWVudGF0aW9uPW51bGwpLHdpbmRvdy5EZXZpY2VNb3Rpb25FdmVudCYmIXdpbmRvdy5faXNOb2RlV2Via2l0JiYodGhpcy5fZXZlbnRzLmRldmljZW1vdGlvbj1udWxsKSx0aGlzLl9zdGFydD1mdW5jdGlvbigpe3RoaXMuX3VzZXJOb2RlJiZcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5fdXNlck5vZGUmJih0aGlzLl91c2VyTm9kZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl91c2VyTm9kZSkpO3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzLGI9YS5wcmVsb2FkO2lmKGIpe3ZhciBjPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2xvYWRpbmdTY3JlZW5JZCk7aWYoIWMpe2M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxjLmlubmVySFRNTD1cIkxvYWRpbmcuLi5cIixjLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixjLmlkPXRoaXMuX2xvYWRpbmdTY3JlZW5JZDsodGhpcy5fdXNlck5vZGV8fGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKGMpfXZhciBkPXRoaXMuX3ByZWxvYWRNZXRob2RzO2Zvcih2YXIgZiBpbiBkKXtkW2ZdPWRbZl18fGU7dmFyIGc9ZFtmXTtnIT09ZS5wcm90b3R5cGUmJmchPT1lfHwodGhpcy5faXNHbG9iYWwmJih3aW5kb3dbZl09dGhpcy5fd3JhcFByZWxvYWQodGhpcyxmKSksZz10aGlzKSx0aGlzLl9yZWdpc3RlcmVkUHJlbG9hZE1ldGhvZHNbZl09Z1tmXSxnW2ZdPXRoaXMuX3dyYXBQcmVsb2FkKGcsZil9YigpLHRoaXMuX3J1bklmUHJlbG9hZHNBcmVEb25lKCl9ZWxzZSB0aGlzLl9zZXR1cCgpLHRoaXMuX3J1bkZyYW1lcygpLHRoaXMuX2RyYXcoKX0uYmluZCh0aGlzKSx0aGlzLl9ydW5JZlByZWxvYWRzQXJlRG9uZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKDA9PT1hLl9wcmVsb2FkQ291bnQpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEuX2xvYWRpbmdTY3JlZW5JZCk7YiYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGEuX3NldHVwKCksYS5fcnVuRnJhbWVzKCksYS5fZHJhdygpfX0sdGhpcy5fZGVjcmVtZW50UHJlbG9hZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO1wiZnVuY3Rpb25cIj09dHlwZW9mIGEucHJlbG9hZCYmKGEuX3NldFByb3BlcnR5KFwiX3ByZWxvYWRDb3VudFwiLGEuX3ByZWxvYWRDb3VudC0xKSxhLl9ydW5JZlByZWxvYWRzQXJlRG9uZSgpKX0sdGhpcy5fd3JhcFByZWxvYWQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5jcmVtZW50UHJlbG9hZCgpLHRoaXMuX3JlZ2lzdGVyZWRQcmVsb2FkTWV0aG9kc1tiXS5hcHBseShhLGFyZ3VtZW50cyl9LmJpbmQodGhpcyl9LHRoaXMuX2luY3JlbWVudFByZWxvYWQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczthLl9zZXRQcm9wZXJ0eShcIl9wcmVsb2FkQ291bnRcIixhLl9wcmVsb2FkQ291bnQrMSl9LHRoaXMuX3NldHVwPWZ1bmN0aW9uKCl7dGhpcy5jcmVhdGVDYW52YXModGhpcy5fZGVmYXVsdENhbnZhc1NpemUud2lkdGgsdGhpcy5fZGVmYXVsdENhbnZhc1NpemUuaGVpZ2h0LFwicDJkXCIpO3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGEucHJlbG9hZClmb3IodmFyIGIgaW4gdGhpcy5fcHJlbG9hZE1ldGhvZHMpYVtiXT10aGlzLl9wcmVsb2FkTWV0aG9kc1tiXVtiXSxhW2JdJiZ0aGlzJiYoYVtiXT1hW2JdLmJpbmQodGhpcykpO1wiZnVuY3Rpb25cIj09dHlwZW9mIGEuc2V0dXAmJmEuc2V0dXAoKTtmb3IodmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjYW52YXNcIiksZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdO1widHJ1ZVwiPT09ZS5kYXRhc2V0LmhpZGRlbiYmKGUuc3R5bGUudmlzaWJpbGl0eT1cIlwiLGRlbGV0ZSBlLmRhdGFzZXQuaGlkZGVuKX10aGlzLl9zZXR1cERvbmU9ITB9LmJpbmQodGhpcyksdGhpcy5fZHJhdz1mdW5jdGlvbigpe3ZhciBhPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSxiPWEtdGhpcy5fbGFzdEZyYW1lVGltZSxjPTFlMy90aGlzLl90YXJnZXRGcmFtZVJhdGU7KCF0aGlzLl9sb29wfHxiPj1jLTUpJiYodGhpcy5yZWRyYXcoKSx0aGlzLl9mcmFtZVJhdGU9MWUzLyhhLXRoaXMuX2xhc3RGcmFtZVRpbWUpLHRoaXMuX2xhc3RGcmFtZVRpbWU9YSx2b2lkIDAhPT10aGlzLl91cGRhdGVNb3VzZUNvb3JkcyYmdGhpcy5fdXBkYXRlTW91c2VDb29yZHMoKSksdGhpcy5fbG9vcCYmKHRoaXMuX3JlcXVlc3RBbmltSWQ9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9kcmF3KSl9LmJpbmQodGhpcyksdGhpcy5fcnVuRnJhbWVzPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSW50ZXJ2YWwmJmNsZWFySW50ZXJ2YWwodGhpcy5fdXBkYXRlSW50ZXJ2YWwpfS5iaW5kKHRoaXMpLHRoaXMuX3NldFByb3BlcnR5PWZ1bmN0aW9uKGEsYil7dGhpc1thXT1iLHRoaXMuX2lzR2xvYmFsJiYod2luZG93W2FdPWIpfS5iaW5kKHRoaXMpLHRoaXMucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fbG9hZGluZ1NjcmVlbklkKTtpZihhJiYoYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpLHRoaXMuX2luY3JlbWVudFByZWxvYWQoKSksdGhpcy5fY3VyRWxlbWVudCl7dGhpcy5fbG9vcD0hMSx0aGlzLl9yZXF1ZXN0QW5pbUlkJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVxdWVzdEFuaW1JZCk7Zm9yKHZhciBiIGluIHRoaXMuX2V2ZW50cyl3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLHRoaXMuX2V2ZW50c1tiXSk7Zm9yKHZhciBjPTA7Yzx0aGlzLl9lbGVtZW50cy5sZW5ndGg7YysrKXt2YXIgZD10aGlzLl9lbGVtZW50c1tjXTtkLmVsdC5wYXJlbnROb2RlJiZkLmVsdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQuZWx0KTtmb3IodmFyIGYgaW4gZC5fZXZlbnRzKWQuZWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZixkLl9ldmVudHNbZl0pfXZhciBnPXRoaXM7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucmVtb3ZlLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwIT09YSYmYS5jYWxsKGcpfSl9aWYodGhpcy5faXNHbG9iYWwpe2Zvcih2YXIgaCBpbiBlLnByb3RvdHlwZSl0cnl7ZGVsZXRlIHdpbmRvd1toXX1jYXRjaChhKXt3aW5kb3dbaF09dm9pZCAwfWZvcih2YXIgaSBpbiB0aGlzKWlmKHRoaXMuaGFzT3duUHJvcGVydHkoaSkpdHJ5e2RlbGV0ZSB3aW5kb3dbaV19Y2F0Y2goYSl7d2luZG93W2ldPXZvaWQgMH1lLmluc3RhbmNlPW51bGx9fS5iaW5kKHRoaXMpLHRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmluaXQuZm9yRWFjaChmdW5jdGlvbihhKXt2b2lkIDAhPT1hJiZhLmNhbGwodGhpcyl9LHRoaXMpO3ZhciBoPXRoaXMuX2NyZWF0ZUZyaWVuZGx5R2xvYmFsRnVuY3Rpb25CaW5kZXIoKTtpZihhKWEodGhpcyk7ZWxzZXt0aGlzLl9pc0dsb2JhbD0hMCxlLmluc3RhbmNlPXRoaXM7Zm9yKHZhciBpIGluIGUucHJvdG90eXBlKWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUucHJvdG90eXBlW2ldKXt2YXIgaj1pLnN1YnN0cmluZygyKTt0aGlzLl9ldmVudHMuaGFzT3duUHJvcGVydHkoail8fChNYXRoLmhhc093blByb3BlcnR5KGkpJiZNYXRoW2ldPT09ZS5wcm90b3R5cGVbaV0/aChpLGUucHJvdG90eXBlW2ldKTpoKGksZS5wcm90b3R5cGVbaV0uYmluZCh0aGlzKSkpfWVsc2UgaChpLGUucHJvdG90eXBlW2ldKTtmb3IodmFyIGsgaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KGspJiZoKGssdGhpc1trXSl9Zm9yKHZhciBsIGluIHRoaXMuX2V2ZW50cyl7dmFyIG09dGhpc1tcIl9vblwiK2xdO2lmKG0pe3ZhciBuPW0uYmluZCh0aGlzKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihsLG4se3Bhc3NpdmU6ITF9KSx0aGlzLl9ldmVudHNbbF09bn19dmFyIG89ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcImZvY3VzZWRcIiwhMCl9LmJpbmQodGhpcykscD1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwiZm9jdXNlZFwiLCExKX0uYmluZCh0aGlzKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsbyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIscCksdGhpcy5yZWdpc3Rlck1ldGhvZChcInJlbW92ZVwiLGZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLG8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLHApfSksYz90aGlzLl9zdGFydCgpOlwiY29tcGxldGVcIj09PWRvY3VtZW50LnJlYWR5U3RhdGU/dGhpcy5fc3RhcnQoKTp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIix0aGlzLl9zdGFydC5iaW5kKHRoaXMpLCExKX07ZS5wcm90b3R5cGUuX2luaXRpYWxpemVJbnN0YW5jZVZhcmlhYmxlcz1mdW5jdGlvbigpe3RoaXMuX3N0eWxlcz1bXSx0aGlzLl9iZXppZXJEZXRhaWw9MjAsdGhpcy5fY3VydmVEZXRhaWw9MjAsdGhpcy5fY29sb3JNb2RlPWQuUkdCLHRoaXMuX2NvbG9yTWF4ZXM9e3JnYjpbMjU1LDI1NSwyNTUsMjU1XSxoc2I6WzM2MCwxMDAsMTAwLDFdLGhzbDpbMzYwLDEwMCwxMDAsMV19LHRoaXMuX3BpeGVsc0RpcnR5PSEwfSxlLmluc3RhbmNlPW51bGwsZS5kaXNhYmxlRnJpZW5kbHlFcnJvcnM9ITE7Zm9yKHZhciBmIGluIGQpZS5wcm90b3R5cGVbZl09ZFtmXTtlLnByb3RvdHlwZS5fcHJlbG9hZE1ldGhvZHM9e2xvYWRKU09OOmUucHJvdG90eXBlLGxvYWRJbWFnZTplLnByb3RvdHlwZSxsb2FkU3RyaW5nczplLnByb3RvdHlwZSxsb2FkWE1MOmUucHJvdG90eXBlLGxvYWRCeXRlczplLnByb3RvdHlwZSxsb2FkVGFibGU6ZS5wcm90b3R5cGUsbG9hZEZvbnQ6ZS5wcm90b3R5cGUsbG9hZE1vZGVsOmUucHJvdG90eXBlLGxvYWRTaGFkZXI6ZS5wcm90b3R5cGV9LGUucHJvdG90eXBlLl9yZWdpc3RlcmVkTWV0aG9kcz17aW5pdDpbXSxwcmU6W10scG9zdDpbXSxyZW1vdmU6W119LGUucHJvdG90eXBlLl9yZWdpc3RlcmVkUHJlbG9hZE1ldGhvZHM9e30sZS5wcm90b3R5cGUucmVnaXN0ZXJQcmVsb2FkTWV0aG9kPWZ1bmN0aW9uKGEsYil7ZS5wcm90b3R5cGUuX3ByZWxvYWRNZXRob2RzLmhhc093blByb3BlcnR5KGEpfHwoZS5wcm90b3R5cGUuX3ByZWxvYWRNZXRob2RzW2FdPWIpfSxlLnByb3RvdHlwZS5yZWdpc3Rlck1ldGhvZD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXN8fGUucHJvdG90eXBlO2MuX3JlZ2lzdGVyZWRNZXRob2RzLmhhc093blByb3BlcnR5KGEpfHwoYy5fcmVnaXN0ZXJlZE1ldGhvZHNbYV09W10pLGMuX3JlZ2lzdGVyZWRNZXRob2RzW2FdLnB1c2goYil9LGUucHJvdG90eXBlLl9jcmVhdGVGcmllbmRseUdsb2JhbEZ1bmN0aW9uQmluZGVyPWZ1bmN0aW9uKGEpe2E9YXx8e307dmFyIGI9YS5nbG9iYWxPYmplY3R8fHdpbmRvdyxjPWEubG9nfHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLGQ9e3ByaW50OiEwfTtyZXR1cm4gZnVuY3Rpb24oYSxmKXtpZihlLmRpc2FibGVGcmllbmRseUVycm9ycywxKWJbYV09ZjtlbHNlIHRyeXtpZihhIGluIGImJiEoYSBpbiBkKSl0aHJvdyBuZXcgRXJyb3IoJ2dsb2JhbCBcIicrYSsnXCIgYWxyZWFkeSBleGlzdHMnKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYixhLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sc2V0OmZ1bmN0aW9uKGQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmQsd3JpdGFibGU6ITB9KSxjKCdZb3UganVzdCBjaGFuZ2VkIHRoZSB2YWx1ZSBvZiBcIicrYStcIlxcXCIsIHdoaWNoIHdhcyBhIHA1IGZ1bmN0aW9uLiBUaGlzIGNvdWxkIGNhdXNlIHByb2JsZW1zIGxhdGVyIGlmIHlvdSdyZSBub3QgY2FyZWZ1bC5cIil9fSl9Y2F0Y2goZCl7YygncDUgaGFkIHByb2JsZW1zIGNyZWF0aW5nIHRoZSBnbG9iYWwgZnVuY3Rpb24gXCInK2ErJ1wiLCBwb3NzaWJseSBiZWNhdXNlIHlvdXIgY29kZSBpcyBhbHJlYWR5IHVzaW5nIHRoYXQgbmFtZSBhcyBhIHZhcmlhYmxlLiBZb3UgbWF5IHdhbnQgdG8gcmVuYW1lIHlvdXIgdmFyaWFibGUgdG8gc29tZXRoaW5nIGVsc2UuJyksYlthXT1mfX19LGIuZXhwb3J0cz1lfSx7XCIuL2NvbnN0YW50c1wiOjE4LFwiLi9zaGltXCI6MzR9XSwyNTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMpe3JldHVybiExPT09Yj9mKGEsYyk6ZShhLGIsYyksdGhpc31mdW5jdGlvbiBlKGEsYixjKXtjLl9ldmVudHNbYV0mJmYoYSxjKTt2YXIgZD1iLmJpbmQoYyk7Yy5lbHQuYWRkRXZlbnRMaXN0ZW5lcihhLGQsITEpLGMuX2V2ZW50c1thXT1kfWZ1bmN0aW9uIGYoYSxiKXt2YXIgYz1iLl9ldmVudHNbYV07Yi5lbHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITEpLGIuX2V2ZW50c1thXT1udWxsfXZhciBnPWEoXCIuL21haW5cIik7Zy5FbGVtZW50PWZ1bmN0aW9uKGEsYil7dGhpcy5lbHQ9YSx0aGlzLl9wSW5zdD1iLHRoaXMuX2V2ZW50cz17fSx0aGlzLndpZHRoPXRoaXMuZWx0Lm9mZnNldFdpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuZWx0Lm9mZnNldEhlaWdodH0sZy5FbGVtZW50LnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/dGhpcy5lbHQucGFyZW50Tm9kZTooXCJzdHJpbmdcIj09dHlwZW9mIGE/KFwiI1wiPT09YVswXSYmKGE9YS5zdWJzdHJpbmcoMSkpLGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpOmEgaW5zdGFuY2VvZiBnLkVsZW1lbnQmJihhPWEuZWx0KSxhLmFwcGVuZENoaWxkKHRoaXMuZWx0KSx0aGlzKX0sZy5FbGVtZW50LnByb3RvdHlwZS5pZD1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT90aGlzLmVsdC5pZDoodGhpcy5lbHQuaWQ9YSx0aGlzLndpZHRoPXRoaXMuZWx0Lm9mZnNldFdpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuZWx0Lm9mZnNldEhlaWdodCx0aGlzKX0sZy5FbGVtZW50LnByb3RvdHlwZS5jbGFzcz1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT90aGlzLmVsdC5jbGFzc05hbWU6KHRoaXMuZWx0LmNsYXNzTmFtZT1hLHRoaXMpfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlUHJlc3NlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNlZG93blwiLGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCEwKSx0aGlzLl9wSW5zdC5fc2V0TW91c2VCdXR0b24oYiksYSgpfSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRvdWJsZUNsaWNrZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJkYmxjbGlja1wiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZVdoZWVsPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwid2hlZWxcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VSZWxlYXNlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNldXBcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VDbGlja2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiY2xpY2tcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VNb3ZlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNlbW92ZVwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZU92ZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJtb3VzZW92ZXJcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuY2hhbmdlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcImNoYW5nZVwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5pbnB1dD1mdW5jdGlvbihhKXtyZXR1cm4gZChcImlucHV0XCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlT3V0PWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2VvdXRcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUudG91Y2hTdGFydGVkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwidG91Y2hzdGFydFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS50b3VjaE1vdmVkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwidG91Y2htb3ZlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLnRvdWNoRW5kZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ0b3VjaGVuZFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5kcmFnT3Zlcj1mdW5jdGlvbihhKXtyZXR1cm4gZChcImRyYWdvdmVyXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRyYWdMZWF2ZT1mdW5jdGlvbihhKXtyZXR1cm4gZChcImRyYWdsZWF2ZVwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5kcm9wPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhiKXt2YXIgYz1uZXcgZy5GaWxlKGIpO3JldHVybiBmdW5jdGlvbihiKXtjLmRhdGE9Yi50YXJnZXQucmVzdWx0LGEoYyl9fXJldHVybiB3aW5kb3cuRmlsZSYmd2luZG93LkZpbGVSZWFkZXImJndpbmRvdy5GaWxlTGlzdCYmd2luZG93LkJsb2I/KGUoXCJkcmFnb3ZlclwiLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzKSxlKFwiZHJhZ2xlYXZlXCIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKSxhLnByZXZlbnREZWZhdWx0KCl9LHRoaXMpLHZvaWQgMCE9PWImJmUoXCJkcm9wXCIsYix0aGlzKSxlKFwiZHJvcFwiLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpO2Zvcih2YXIgYj1hLmRhdGFUcmFuc2Zlci5maWxlcyxkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBlPWJbZF0sZj1uZXcgRmlsZVJlYWRlcjtmLm9ubG9hZD1jKGUpLGUudHlwZS5pbmRleE9mKFwidGV4dFwiKT4tMT9mLnJlYWRBc1RleHQoZSk6Zi5yZWFkQXNEYXRhVVJMKGUpfX0sdGhpcykpOmNvbnNvbGUubG9nKFwiVGhlIEZpbGUgQVBJcyBhcmUgbm90IGZ1bGx5IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXIuXCIpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuX3NldFByb3BlcnR5PWZ1bmN0aW9uKGEsYil7dGhpc1thXT1ifSxiLmV4cG9ydHM9Zy5FbGVtZW50fSx7XCIuL21haW5cIjoyNH1dLDI2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKSxlPWEoXCIuL2NvbnN0YW50c1wiKTtkLkdyYXBoaWNzPWZ1bmN0aW9uKGEsYixjLGYpe3ZhciBnPWN8fGUuUDJEO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksKGYuX3VzZXJOb2RlfHxkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZCh0aGlzLmNhbnZhcyksZC5FbGVtZW50LmNhbGwodGhpcyx0aGlzLmNhbnZhcyxmLCExKTtmb3IodmFyIGggaW4gZC5wcm90b3R5cGUpdGhpc1toXXx8KFwiZnVuY3Rpb25cIj09dHlwZW9mIGQucHJvdG90eXBlW2hdP3RoaXNbaF09ZC5wcm90b3R5cGVbaF0uYmluZCh0aGlzKTp0aGlzW2hdPWQucHJvdG90eXBlW2hdKTtyZXR1cm4gZC5wcm90b3R5cGUuX2luaXRpYWxpemVJbnN0YW5jZVZhcmlhYmxlcy5hcHBseSh0aGlzKSx0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yix0aGlzLl9waXhlbERlbnNpdHk9Zi5fcGl4ZWxEZW5zaXR5LGc9PT1lLldFQkdMP3RoaXMuX3JlbmRlcmVyPW5ldyBkLlJlbmRlcmVyR0wodGhpcy5jYW52YXMsdGhpcywhMSk6dGhpcy5fcmVuZGVyZXI9bmV3IGQuUmVuZGVyZXIyRCh0aGlzLmNhbnZhcyx0aGlzLCExKSxmLl9lbGVtZW50cy5wdXNoKHRoaXMpLHRoaXMuX3JlbmRlcmVyLnJlc2l6ZShhLGIpLHRoaXMuX3JlbmRlcmVyLl9hcHBseURlZmF1bHRzKCksdGhpc30sZC5HcmFwaGljcy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLkVsZW1lbnQucHJvdG90eXBlKSxkLkdyYXBoaWNzLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLmVsdC5wYXJlbnROb2RlJiZ0aGlzLmVsdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWx0KTt2YXIgYT10aGlzLl9wSW5zdC5fZWxlbWVudHMuaW5kZXhPZih0aGlzKTstMSE9PWEmJnRoaXMuX3BJbnN0Ll9lbGVtZW50cy5zcGxpY2UoYSwxKTtmb3IodmFyIGIgaW4gdGhpcy5fZXZlbnRzKXRoaXMuZWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoYix0aGlzLl9ldmVudHNbYl0pfSxiLmV4cG9ydHM9ZC5HcmFwaGljc30se1wiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0fV0sMjc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEpe3ZhciBiPTAsYz0wO2lmKGEub2Zmc2V0UGFyZW50KWRve2IrPWEub2Zmc2V0TGVmdCxjKz1hLm9mZnNldFRvcH13aGlsZShhPWEub2Zmc2V0UGFyZW50KTtlbHNlIGIrPWEub2Zmc2V0TGVmdCxjKz1hLm9mZnNldFRvcDtyZXR1cm5bYixjXX12YXIgZT1hKFwiLi9tYWluXCIpLGY9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2UuUmVuZGVyZXI9ZnVuY3Rpb24oYSxiLGMpe2UuRWxlbWVudC5jYWxsKHRoaXMsYSxiKSx0aGlzLmNhbnZhcz1hLGM/KHRoaXMuX2lzTWFpbkNhbnZhcz0hMCx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJfY3VyRWxlbWVudFwiLHRoaXMpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcImNhbnZhc1wiLHRoaXMuY2FudmFzKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJ3aWR0aFwiLHRoaXMud2lkdGgpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcImhlaWdodFwiLHRoaXMuaGVpZ2h0KSk6KHRoaXMuY2FudmFzLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdGhpcy5fc3R5bGVzPVtdKSx0aGlzLl90ZXh0U2l6ZT0xMix0aGlzLl90ZXh0TGVhZGluZz0xNSx0aGlzLl90ZXh0Rm9udD1cInNhbnMtc2VyaWZcIix0aGlzLl90ZXh0U3R5bGU9Zi5OT1JNQUwsdGhpcy5fdGV4dEFzY2VudD1udWxsLHRoaXMuX3RleHREZXNjZW50PW51bGwsdGhpcy5fdGV4dEFsaWduPWYuTEVGVCx0aGlzLl90ZXh0QmFzZWxpbmU9Zi5CQVNFTElORSx0aGlzLl9yZWN0TW9kZT1mLkNPUk5FUix0aGlzLl9lbGxpcHNlTW9kZT1mLkNFTlRFUix0aGlzLl9jdXJ2ZVRpZ2h0bmVzcz0wLHRoaXMuX2ltYWdlTW9kZT1mLkNPUk5FUix0aGlzLl90aW50PW51bGwsdGhpcy5fZG9TdHJva2U9ITAsdGhpcy5fZG9GaWxsPSEwLHRoaXMuX3N0cm9rZVNldD0hMSx0aGlzLl9maWxsU2V0PSExfSxlLlJlbmRlcmVyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUuRWxlbWVudC5wcm90b3R5cGUpLGUuUmVuZGVyZXIucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXtyZXR1cm57cHJvcGVydGllczp7X2RvU3Ryb2tlOnRoaXMuX2RvU3Ryb2tlLF9zdHJva2VTZXQ6dGhpcy5fc3Ryb2tlU2V0LF9kb0ZpbGw6dGhpcy5fZG9GaWxsLF9maWxsU2V0OnRoaXMuX2ZpbGxTZXQsX3RpbnQ6dGhpcy5fdGludCxfaW1hZ2VNb2RlOnRoaXMuX2ltYWdlTW9kZSxfcmVjdE1vZGU6dGhpcy5fcmVjdE1vZGUsX2VsbGlwc2VNb2RlOnRoaXMuX2VsbGlwc2VNb2RlLF90ZXh0Rm9udDp0aGlzLl90ZXh0Rm9udCxfdGV4dExlYWRpbmc6dGhpcy5fdGV4dExlYWRpbmcsX3RleHRTaXplOnRoaXMuX3RleHRTaXplLF90ZXh0QWxpZ246dGhpcy5fdGV4dEFsaWduLF90ZXh0QmFzZWxpbmU6dGhpcy5fdGV4dEJhc2VsaW5lLF90ZXh0U3R5bGU6dGhpcy5fdGV4dFN0eWxlfX19LGUuUmVuZGVyZXIucHJvdG90eXBlLnBvcD1mdW5jdGlvbihhKXthLnByb3BlcnRpZXMmJk9iamVjdC5hc3NpZ24odGhpcyxhLnByb3BlcnRpZXMpfSxlLlJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oYSxiKXt0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yix0aGlzLmVsdC53aWR0aD1hKnRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksdGhpcy5lbHQuaGVpZ2h0PWIqdGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSx0aGlzLmVsdC5zdHlsZS53aWR0aD1hK1wicHhcIix0aGlzLmVsdC5zdHlsZS5oZWlnaHQ9YitcInB4XCIsdGhpcy5faXNNYWluQ2FudmFzJiYodGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwid2lkdGhcIix0aGlzLndpZHRoKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJoZWlnaHRcIix0aGlzLmhlaWdodCkpfSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0TGVhZGluZz1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYT8odGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dExlYWRpbmdcIixhKSx0aGlzLl9wSW5zdCk6dGhpcy5fdGV4dExlYWRpbmd9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRTaXplPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPyh0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0U2l6ZVwiLGEpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRMZWFkaW5nXCIsYSpmLl9ERUZBVUxUX0xFQURNVUxUKSx0aGlzLl9hcHBseVRleHRQcm9wZXJ0aWVzKCkpOnRoaXMuX3RleHRTaXplfSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0U3R5bGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGE/KGEhPT1mLk5PUk1BTCYmYSE9PWYuSVRBTElDJiZhIT09Zi5CT0xEfHx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0U3R5bGVcIixhKSx0aGlzLl9hcHBseVRleHRQcm9wZXJ0aWVzKCkpOnRoaXMuX3RleHRTdHlsZX0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dEFzY2VudD1mdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5fdGV4dEFzY2VudCYmdGhpcy5fdXBkYXRlVGV4dE1ldHJpY3MoKSx0aGlzLl90ZXh0QXNjZW50fSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0RGVzY2VudD1mdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5fdGV4dERlc2NlbnQmJnRoaXMuX3VwZGF0ZVRleHRNZXRyaWNzKCksdGhpcy5fdGV4dERlc2NlbnR9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRBbGlnbj1mdW5jdGlvbihhLGIpe3JldHVybiB2b2lkIDAhPT1hPyh0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QWxpZ25cIixhKSx2b2lkIDAhPT1iJiZ0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QmFzZWxpbmVcIixiKSx0aGlzLl9hcHBseVRleHRQcm9wZXJ0aWVzKCkpOntob3Jpem9udGFsOnRoaXMuX3RleHRBbGlnbix2ZXJ0aWNhbDp0aGlzLl90ZXh0QmFzZWxpbmV9fSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGcsaCxpLGosayxsLG0sbixvLHA9dGhpcy5fcEluc3QscT1OdW1iZXIuTUFYX1ZBTFVFO2lmKCh0aGlzLl9kb0ZpbGx8fHRoaXMuX2RvU3Ryb2tlKSYmdm9pZCAwIT09YSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPWEudG9TdHJpbmcoKSksYT1hLnJlcGxhY2UoLyhcXHQpL2csXCIgIFwiKSxnPWEuc3BsaXQoXCJcXG5cIiksdm9pZCAwIT09ZCl7Zm9yKG89MCxpPTA7aTxnLmxlbmd0aDtpKyspZm9yKGs9XCJcIixuPWdbaV0uc3BsaXQoXCIgXCIpLGg9MDtoPG4ubGVuZ3RoO2grKylsPWsrbltoXStcIiBcIixtPXRoaXMudGV4dFdpZHRoKGwpLG0+ZD8oaz1uW2hdK1wiIFwiLG8rPXAudGV4dExlYWRpbmcoKSk6az1sO3N3aXRjaCh0aGlzLl9yZWN0TW9kZT09PWYuQ0VOVEVSJiYoYi09ZC8yLGMtPWUvMiksdGhpcy5fdGV4dEFsaWduKXtjYXNlIGYuQ0VOVEVSOmIrPWQvMjticmVhaztjYXNlIGYuUklHSFQ6Yis9ZH12YXIgcj0hMTtpZih2b2lkIDAhPT1lKXtzd2l0Y2godGhpcy5fdGV4dEJhc2VsaW5lKXtjYXNlIGYuQk9UVE9NOmMrPWUtbzticmVhaztjYXNlIGYuQ0VOVEVSOmMrPShlLW8pLzI7YnJlYWs7Y2FzZSBmLkJBU0VMSU5FOnI9ITAsdGhpcy5fdGV4dEJhc2VsaW5lPWYuVE9QfXE9YytlLXAudGV4dEFzY2VudCgpfWZvcihpPTA7aTxnLmxlbmd0aDtpKyspe2ZvcihrPVwiXCIsbj1nW2ldLnNwbGl0KFwiIFwiKSxoPTA7aDxuLmxlbmd0aDtoKyspbD1rK25baF0rXCIgXCIsbT10aGlzLnRleHRXaWR0aChsKSxtPmQmJmsubGVuZ3RoPjA/KHRoaXMuX3JlbmRlclRleHQocCxrLGIsYyxxKSxrPW5baF0rXCIgXCIsYys9cC50ZXh0TGVhZGluZygpKTprPWw7dGhpcy5fcmVuZGVyVGV4dChwLGssYixjLHEpLGMrPXAudGV4dExlYWRpbmcoKSxyJiYodGhpcy5fdGV4dEJhc2VsaW5lPWYuQkFTRUxJTkUpfX1lbHNle3ZhciBzPTAsdD1wLnRleHRBbGlnbigpLnZlcnRpY2FsO2Zvcih0PT09Zi5DRU5URVI/cz0oZy5sZW5ndGgtMSkqcC50ZXh0TGVhZGluZygpLzI6dD09PWYuQk9UVE9NJiYocz0oZy5sZW5ndGgtMSkqcC50ZXh0TGVhZGluZygpKSxqPTA7ajxnLmxlbmd0aDtqKyspdGhpcy5fcmVuZGVyVGV4dChwLGdbal0sYixjLXMscSksYys9cC50ZXh0TGVhZGluZygpfXJldHVybiBwfX0sZS5SZW5kZXJlci5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5SZW5kZXJlci5wcm90b3R5cGUuX2lzT3BlblR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mKGE9YXx8dGhpcy5fdGV4dEZvbnQpJiZhLmZvbnQmJmEuZm9udC5zdXBwb3J0ZWR9LGUuUmVuZGVyZXIucHJvdG90eXBlLl91cGRhdGVUZXh0TWV0cmljcz1mdW5jdGlvbigpe2lmKHRoaXMuX2lzT3BlblR5cGUoKSlyZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEFzY2VudFwiLHRoaXMuX3RleHRGb250Ll90ZXh0QXNjZW50KCkpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHREZXNjZW50XCIsdGhpcy5fdGV4dEZvbnQuX3RleHREZXNjZW50KCkpLHRoaXM7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7YS5zdHlsZS5mb250RmFtaWx5PXRoaXMuX3RleHRGb250LGEuc3R5bGUuZm9udFNpemU9dGhpcy5fdGV4dFNpemUrXCJweFwiLGEuaW5uZXJIVE1MPVwiQUJDamdxfFwiO3ZhciBiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7Yi5zdHlsZS5kaXNwbGF5PVwiaW5saW5lLWJsb2NrXCIsYi5zdHlsZS53aWR0aD1cIjFweFwiLGIuc3R5bGUuaGVpZ2h0PVwiMHB4XCI7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtjLmFwcGVuZENoaWxkKGEpLGMuYXBwZW5kQ2hpbGQoYiksYy5zdHlsZS5oZWlnaHQ9XCIwcHhcIixjLnN0eWxlLm92ZXJmbG93PVwiaGlkZGVuXCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjKSxiLnN0eWxlLnZlcnRpY2FsQWxpZ249XCJiYXNlbGluZVwiO3ZhciBlPWQoYiksZj1kKGEpLGc9ZVsxXS1mWzFdO2Iuc3R5bGUudmVydGljYWxBbGlnbj1cImJvdHRvbVwiLGU9ZChiKSxmPWQoYSk7dmFyIGg9ZVsxXS1mWzFdLGk9aC1nO3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGMpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRBc2NlbnRcIixnKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0RGVzY2VudFwiLGkpLHRoaXN9LGIuZXhwb3J0cz1lLlJlbmRlcmVyfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjR9XSwyODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIiksZT1hKFwiLi9jb25zdGFudHNcIiksZj1hKFwiLi4vaW1hZ2UvZmlsdGVyc1wiKTthKFwiLi9wNS5SZW5kZXJlclwiKTt2YXIgZz1cInJnYmEoMCwwLDAsMClcIjtkLlJlbmRlcmVyMkQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBkLlJlbmRlcmVyLmNhbGwodGhpcyxhLGIsYyksdGhpcy5kcmF3aW5nQ29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIiksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiZHJhd2luZ0NvbnRleHRcIix0aGlzLmRyYXdpbmdDb250ZXh0KSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5SZW5kZXJlci5wcm90b3R5cGUpLGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdHM9ZnVuY3Rpb24oKXt0aGlzLl9jYWNoZWRGaWxsU3R5bGU9dGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGU9dm9pZCAwLHRoaXMuX3NldEZpbGwoZS5fREVGQVVMVF9GSUxMKSx0aGlzLl9zZXRTdHJva2UoZS5fREVGQVVMVF9TVFJPS0UpLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZUNhcD1lLlJPVU5ELHRoaXMuZHJhd2luZ0NvbnRleHQuZm9udD1cIm5vcm1hbCAxMnB4IHNhbnMtc2VyaWZcIn0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oYSxiKXtkLlJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLGEsYiksdGhpcy5kcmF3aW5nQ29udGV4dC5zY2FsZSh0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LHRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHkpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJhY2tncm91bmQ9ZnVuY3Rpb24oKXtpZih0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSx0aGlzLnJlc2V0TWF0cml4KCksYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkLkltYWdlKXRoaXMuX3BJbnN0LmltYWdlKGFyZ3VtZW50c1swXSwwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCk7ZWxzZXt2YXIgYT10aGlzLl9nZXRGaWxsKCksYj10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpLGM9Yi50b1N0cmluZygpO3RoaXMuX3NldEZpbGwoYyksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsUmVjdCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5fc2V0RmlsbChhKX10aGlzLmRyYXdpbmdDb250ZXh0LnJlc3RvcmUoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSx0aGlzLnJlc2V0TWF0cml4KCksdGhpcy5kcmF3aW5nQ29udGV4dC5jbGVhclJlY3QoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZHJhd2luZ0NvbnRleHQucmVzdG9yZSgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcEluc3QuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKTt0aGlzLl9zZXRGaWxsKGEudG9TdHJpbmcoKSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc3Ryb2tlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcEluc3QuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKTt0aGlzLl9zZXRTdHJva2UoYS50b1N0cmluZygpKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5pbWFnZT1mdW5jdGlvbihhLGIsYyxlLGYsZyxoLGksail7dmFyIGs7dHJ5e3RoaXMuX3RpbnQmJihkLk1lZGlhRWxlbWVudCYmYSBpbnN0YW5jZW9mIGQuTWVkaWFFbGVtZW50JiZhLmxvYWRQaXhlbHMoKSxhLmNhbnZhcyYmKGs9dGhpcy5fZ2V0VGludGVkSW1hZ2VDYW52YXMoYSkpKSxrfHwoaz1hLmNhbnZhc3x8YS5lbHQpO3ZhciBsPTE7YS53aWR0aCYmYS53aWR0aD4wJiYobD1rLndpZHRoL2Eud2lkdGgpLHRoaXMuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGssbCpiLGwqYyxsKmUsbCpmLGcsaCxpLGopfWNhdGNoKGEpe2lmKFwiTlNfRVJST1JfTk9UX0FWQUlMQUJMRVwiIT09YS5uYW1lKXRocm93IGF9dGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9nZXRUaW50ZWRJbWFnZUNhbnZhcz1mdW5jdGlvbihhKXtpZighYS5jYW52YXMpcmV0dXJuIGE7dmFyIGI9Zi5fdG9QaXhlbHMoYS5jYW52YXMpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtjLndpZHRoPWEuY2FudmFzLndpZHRoLGMuaGVpZ2h0PWEuY2FudmFzLmhlaWdodDtmb3IodmFyIGQ9Yy5nZXRDb250ZXh0KFwiMmRcIiksZT1kLmNyZWF0ZUltYWdlRGF0YShhLmNhbnZhcy53aWR0aCxhLmNhbnZhcy5oZWlnaHQpLGc9ZS5kYXRhLGg9MDtoPGIubGVuZ3RoO2grPTQpe3ZhciBpPWJbaF0saj1iW2grMV0saz1iW2grMl0sbD1iW2grM107Z1toXT1pKnRoaXMuX3RpbnRbMF0vMjU1LGdbaCsxXT1qKnRoaXMuX3RpbnRbMV0vMjU1LGdbaCsyXT1rKnRoaXMuX3RpbnRbMl0vMjU1LGdbaCszXT1sKnRoaXMuX3RpbnRbM10vMjU1fXJldHVybiBkLnB1dEltYWdlRGF0YShlLDAsMCksY30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5ibGVuZE1vZGU9ZnVuY3Rpb24oYSl7dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5ibGVuZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uLGI9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0sYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCxhcmd1bWVudHMubGVuZ3RoLTEpO3RoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWIsdGhpcy5fcEluc3Q/dGhpcy5fcEluc3QuY29weS5hcHBseSh0aGlzLl9wSW5zdCxjKTp0aGlzLmNvcHkuYXBwbHkodGhpcyxjKSx0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1hfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZSxmLGcsaCxpLGo7aWYoOT09PWFyZ3VtZW50cy5sZW5ndGgpYT1hcmd1bWVudHNbMF0sYj1hcmd1bWVudHNbMV0sYz1hcmd1bWVudHNbMl0sZT1hcmd1bWVudHNbM10sZj1hcmd1bWVudHNbNF0sZz1hcmd1bWVudHNbNV0saD1hcmd1bWVudHNbNl0saT1hcmd1bWVudHNbN10saj1hcmd1bWVudHNbOF07ZWxzZXtpZig4IT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJTaWduYXR1cmUgbm90IHN1cHBvcnRlZFwiKTthPXRoaXMuX3BJbnN0LGI9YXJndW1lbnRzWzBdLGM9YXJndW1lbnRzWzFdLGU9YXJndW1lbnRzWzJdLGY9YXJndW1lbnRzWzNdLGc9YXJndW1lbnRzWzRdLGg9YXJndW1lbnRzWzVdLGk9YXJndW1lbnRzWzZdLGo9YXJndW1lbnRzWzddfWQuUmVuZGVyZXIyRC5fY29weUhlbHBlcih0aGlzLGEsYixjLGUsZixnLGgsaSxqKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5fY29weUhlbHBlcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSxqKXtiLmxvYWRQaXhlbHMoKTt2YXIgaz1iLmNhbnZhcy53aWR0aC9iLndpZHRoO2EuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGIuY2FudmFzLGsqYyxrKmQsayplLGsqZixnLGgsaSxqKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiLGMsZSl7aWYodm9pZCAwPT09YyYmdm9pZCAwPT09ZSYmKHZvaWQgMD09PWEmJnZvaWQgMD09PWI/KGE9Yj0wLGM9dGhpcy53aWR0aCxlPXRoaXMuaGVpZ2h0KTpjPWU9MSksYStjPDB8fGIrZTwwfHxhPj10aGlzLndpZHRofHxiPj10aGlzLmhlaWdodClyZXR1cm5bMCwwLDAsMjU1XTt2YXIgZj10aGlzLl9wSW5zdHx8dGhpcyxnPWYuX3BpeGVsRGVuc2l0eTthPU1hdGguZmxvb3IoYSksYj1NYXRoLmZsb29yKGIpLGM9TWF0aC5mbG9vcihjKSxlPU1hdGguZmxvb3IoZSk7dmFyIGg9YSpnLGk9YipnO2lmKDEhPT1jfHwxIT09ZXx8dGhpcyBpbnN0YW5jZW9mIGQuUmVuZGVyZXJHTCl7dmFyIGo9TWF0aC5taW4oYyxmLndpZHRoKSxrPU1hdGgubWluKGUsZi5oZWlnaHQpLGw9aipnLG09aypnLG49bmV3IGQuSW1hZ2UoaixrKTtyZXR1cm4gbi5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLmRyYXdJbWFnZSh0aGlzLmNhbnZhcyxoLGksbCxtLDAsMCxqLGspLG59dmFyIG8scDtyZXR1cm4gZi5fcGl4ZWxzRGlydHk/KG89dGhpcy5kcmF3aW5nQ29udGV4dC5nZXRJbWFnZURhdGEoaCxpLDEsMSkuZGF0YSxwPTApOihvPWYucGl4ZWxzLHA9NCooaCtpKnRoaXMud2lkdGgqZykpLFtvW3ArMF0sb1twKzFdLG9bcCsyXSxvW3ArM11dfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmxvYWRQaXhlbHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdHx8dGhpcztpZihhLl9waXhlbHNEaXJ0eSl7YS5fcGl4ZWxzRGlydHk9ITE7dmFyIGI9YS5fcGl4ZWxEZW5zaXR5LGM9dGhpcy53aWR0aCpiLGQ9dGhpcy5oZWlnaHQqYixlPXRoaXMuZHJhd2luZ0NvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsMCxjLGQpO2EuX3NldFByb3BlcnR5KFwiaW1hZ2VEYXRhXCIsZSksYS5fc2V0UHJvcGVydHkoXCJwaXhlbHNcIixlLmRhdGEpfX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe2E9TWF0aC5mbG9vcihhKSxiPU1hdGguZmxvb3IoYik7dmFyIGU9dGhpcy5fcEluc3R8fHRoaXM7aWYoYyBpbnN0YW5jZW9mIGQuSW1hZ2UpdGhpcy5kcmF3aW5nQ29udGV4dC5zYXZlKCksdGhpcy5kcmF3aW5nQ29udGV4dC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRoaXMuZHJhd2luZ0NvbnRleHQuc2NhbGUoZS5fcGl4ZWxEZW5zaXR5LGUuX3BpeGVsRGVuc2l0eSksdGhpcy5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoYy5jYW52YXMsYSxiKSx0aGlzLmRyYXdpbmdDb250ZXh0LnJlc3RvcmUoKSxlLl9waXhlbHNEaXJ0eT0hMDtlbHNle3ZhciBmPTAsZz0wLGg9MCxpPTAsaj00KihiKmUuX3BpeGVsRGVuc2l0eSoodGhpcy53aWR0aCplLl9waXhlbERlbnNpdHkpK2EqZS5fcGl4ZWxEZW5zaXR5KTtpZihlLmltYWdlRGF0YSYmIWUuX3BpeGVsc0RpcnR5fHxlLmxvYWRQaXhlbHMuY2FsbChlKSxcIm51bWJlclwiPT10eXBlb2YgYylqPGUucGl4ZWxzLmxlbmd0aCYmKGY9YyxnPWMsaD1jLGk9MjU1KTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBBcnJheSl7aWYoYy5sZW5ndGg8NCl0aHJvdyBuZXcgRXJyb3IoXCJwaXhlbCBhcnJheSBtdXN0IGJlIG9mIHRoZSBmb3JtIFtSLCBHLCBCLCBBXVwiKTtqPGUucGl4ZWxzLmxlbmd0aCYmKGY9Y1swXSxnPWNbMV0saD1jWzJdLGk9Y1szXSl9ZWxzZSBjIGluc3RhbmNlb2YgZC5Db2xvciYmajxlLnBpeGVscy5sZW5ndGgmJihmPWMubGV2ZWxzWzBdLGc9Yy5sZXZlbHNbMV0saD1jLmxldmVsc1syXSxpPWMubGV2ZWxzWzNdKTtmb3IodmFyIGs9MDtrPGUuX3BpeGVsRGVuc2l0eTtrKyspZm9yKHZhciBsPTA7bDxlLl9waXhlbERlbnNpdHk7bCsrKWo9NCooKGIqZS5fcGl4ZWxEZW5zaXR5K2wpKnRoaXMud2lkdGgqZS5fcGl4ZWxEZW5zaXR5KyhhKmUuX3BpeGVsRGVuc2l0eStrKSksZS5waXhlbHNbal09ZixlLnBpeGVsc1tqKzFdPWcsZS5waXhlbHNbaisyXT1oLGUucGl4ZWxzW2orM109aX19LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudXBkYXRlUGl4ZWxzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuX3BJbnN0fHx0aGlzLGY9ZS5fcGl4ZWxEZW5zaXR5O3ZvaWQgMD09PWEmJnZvaWQgMD09PWImJnZvaWQgMD09PWMmJnZvaWQgMD09PWQmJihhPTAsYj0wLGM9dGhpcy53aWR0aCxkPXRoaXMuaGVpZ2h0KSxjKj1mLGQqPWYsdGhpcy5kcmF3aW5nQ29udGV4dC5wdXRJbWFnZURhdGEoZS5pbWFnZURhdGEsYSxiLDAsMCxjLGQpLDA9PT1hJiYwPT09YiYmYz09PXRoaXMud2lkdGgmJmQ9PT10aGlzLmhlaWdodHx8KGUuX3BpeGVsc0RpcnR5PSEwKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fYWN1dGVBcmNUb0Jlemllcj1mdW5jdGlvbihhLGIpe3ZhciBjPWIvMixkPU1hdGguY29zKGMpLGU9TWF0aC5zaW4oYyksZj0xL01hdGgudGFuKGMpLGc9YStjLGg9TWF0aC5jb3MoZyksaT1NYXRoLnNpbihnKSxqPSg0LWQpLzMsaz1lKyhkLWopKmY7cmV0dXJue2F4Ok1hdGguY29zKGEpLGF5Ok1hdGguc2luKGEpLGJ4OmoqaCtrKmksYnk6aippLWsqaCxjeDpqKmgtayppLGN5OmoqaStrKmgsZHg6TWF0aC5jb3MoYStiKSxkeTpNYXRoLnNpbihhK2IpfX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5hcmM9ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCl7dmFyIGk9dGhpcy5kcmF3aW5nQ29udGV4dCxqPWMvMixrPWQvMixsPTFlLTUsbT0wLG49W107Zm9yKGErPWosYis9aztnLWY+bDspbT1NYXRoLm1pbihnLWYsZS5IQUxGX1BJKSxuLnB1c2godGhpcy5fYWN1dGVBcmNUb0JlemllcihmLG0pKSxmKz1tO3JldHVybiB0aGlzLl9kb0ZpbGwmJihpLmJlZ2luUGF0aCgpLG4uZm9yRWFjaChmdW5jdGlvbihjLGQpezA9PT1kJiZpLm1vdmVUbyhhK2MuYXgqaixiK2MuYXkqayksaS5iZXppZXJDdXJ2ZVRvKGErYy5ieCpqLGIrYy5ieSprLGErYy5jeCpqLGIrYy5jeSprLGErYy5keCpqLGIrYy5keSprKX0pLGghPT1lLlBJRSYmbnVsbCE9aHx8aS5saW5lVG8oYSxiKSxpLmNsb3NlUGF0aCgpLGkuZmlsbCgpKSx0aGlzLl9kb1N0cm9rZSYmKGkuYmVnaW5QYXRoKCksbi5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7MD09PWQmJmkubW92ZVRvKGErYy5heCpqLGIrYy5heSprKSxpLmJlemllckN1cnZlVG8oYStjLmJ4KmosYitjLmJ5KmssYStjLmN4KmosYitjLmN5KmssYStjLmR4KmosYitjLmR5KmspfSksaD09PWUuUElFPyhpLmxpbmVUbyhhLGIpLGkuY2xvc2VQYXRoKCkpOmg9PT1lLkNIT1JEJiZpLmNsb3NlUGF0aCgpLGkuc3Ryb2tlKCkpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZWxsaXBzZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmRyYXdpbmdDb250ZXh0LGM9dGhpcy5fZG9GaWxsLGQ9dGhpcy5fZG9TdHJva2UsZT1hWzBdLGY9YVsxXSxoPWFbMl0saT1hWzNdO2lmKGMmJiFkKXtpZih0aGlzLl9nZXRGaWxsKCk9PT1nKXJldHVybiB0aGlzfWVsc2UgaWYoIWMmJmQmJnRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpczt2YXIgaj0uNTUyMjg0NzQ5OCxrPWgvMipqLGw9aS8yKmosbT1lK2gsbj1mK2ksbz1lK2gvMixwPWYraS8yO2IuYmVnaW5QYXRoKCksYi5tb3ZlVG8oZSxwKSxiLmJlemllckN1cnZlVG8oZSxwLWwsby1rLGYsbyxmKSxiLmJlemllckN1cnZlVG8obytrLGYsbSxwLWwsbSxwKSxiLmJlemllckN1cnZlVG8obSxwK2wsbytrLG4sbyxuKSxiLmJlemllckN1cnZlVG8oby1rLG4sZSxwK2wsZSxwKSxiLmNsb3NlUGF0aCgpLGMmJmIuZmlsbCgpLGQmJmIuc3Ryb2tlKCl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUubGluZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmRyYXdpbmdDb250ZXh0O3JldHVybiB0aGlzLl9kb1N0cm9rZT90aGlzLl9nZXRTdHJva2UoKT09PWc/dGhpczooZS5saW5lV2lkdGglMj09MSYmZS50cmFuc2xhdGUoLjUsLjUpLGUuYmVnaW5QYXRoKCksZS5tb3ZlVG8oYSxiKSxlLmxpbmVUbyhjLGQpLGUuc3Ryb2tlKCksZS5saW5lV2lkdGglMj09MSYmZS50cmFuc2xhdGUoLS41LC0uNSksdGhpcyk6dGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZHJhd2luZ0NvbnRleHQ7aWYoIXRoaXMuX2RvU3Ryb2tlKXJldHVybiB0aGlzO2lmKHRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpczt2YXIgZD10aGlzLl9nZXRTdHJva2UoKSxmPXRoaXMuX2dldEZpbGwoKTthPU1hdGgucm91bmQoYSksYj1NYXRoLnJvdW5kKGIpLHRoaXMuX3NldEZpbGwoZCksYy5saW5lV2lkdGg+MT8oYy5iZWdpblBhdGgoKSxjLmFyYyhhLGIsYy5saW5lV2lkdGgvMiwwLGUuVFdPX1BJLCExKSxjLmZpbGwoKSk6Yy5maWxsUmVjdChhLGIsMSwxKSx0aGlzLl9zZXRGaWxsKGYpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnF1YWQ9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsaCxpKXt2YXIgaj10aGlzLmRyYXdpbmdDb250ZXh0LGs9dGhpcy5fZG9GaWxsLGw9dGhpcy5fZG9TdHJva2U7aWYoayYmIWwpe2lmKHRoaXMuX2dldEZpbGwoKT09PWcpcmV0dXJuIHRoaXN9ZWxzZSBpZighayYmbCYmdGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO3JldHVybiBqLmJlZ2luUGF0aCgpLGoubW92ZVRvKGEsYiksai5saW5lVG8oYyxkKSxqLmxpbmVUbyhlLGYpLGoubGluZVRvKGgsaSksai5jbG9zZVBhdGgoKSxrJiZqLmZpbGwoKSxsJiZqLnN0cm9rZSgpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucmVjdD1mdW5jdGlvbihhKXt2YXIgYj1hWzBdLGM9YVsxXSxkPWFbMl0sZT1hWzNdLGY9YVs0XSxoPWFbNV0saT1hWzZdLGo9YVs3XSxrPXRoaXMuZHJhd2luZ0NvbnRleHQsbD10aGlzLl9kb0ZpbGwsbT10aGlzLl9kb1N0cm9rZTtpZihsJiYhbSl7aWYodGhpcy5fZ2V0RmlsbCgpPT09ZylyZXR1cm4gdGhpc31lbHNlIGlmKCFsJiZtJiZ0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7aWYodGhpcy5fZG9TdHJva2UmJmsubGluZVdpZHRoJTI9PTEmJmsudHJhbnNsYXRlKC41LC41KSxrLmJlZ2luUGF0aCgpLHZvaWQgMD09PWYpay5yZWN0KGIsYyxkLGUpO2Vsc2V7dm9pZCAwPT09aCYmKGg9Ziksdm9pZCAwPT09aSYmKGk9aCksdm9pZCAwPT09aiYmKGo9aSk7dmFyIG49ZC8yLG89ZS8yO2Q8MipmJiYoZj1uKSxlPDIqZiYmKGY9byksZDwyKmgmJihoPW4pLGU8MipoJiYoaD1vKSxkPDIqaSYmKGk9biksZTwyKmkmJihpPW8pLGQ8MipqJiYoaj1uKSxlPDIqaiYmKGo9byksay5iZWdpblBhdGgoKSxrLm1vdmVUbyhiK2YsYyksay5hcmNUbyhiK2QsYyxiK2QsYytlLGgpLGsuYXJjVG8oYitkLGMrZSxiLGMrZSxpKSxrLmFyY1RvKGIsYytlLGIsYyxqKSxrLmFyY1RvKGIsYyxiK2QsYyxmKSxrLmNsb3NlUGF0aCgpfXJldHVybiB0aGlzLl9kb0ZpbGwmJmsuZmlsbCgpLHRoaXMuX2RvU3Ryb2tlJiZrLnN0cm9rZSgpLHRoaXMuX2RvU3Ryb2tlJiZrLmxpbmVXaWR0aCUyPT0xJiZrLnRyYW5zbGF0ZSgtLjUsLS41KSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRyaWFuZ2xlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZHJhd2luZ0NvbnRleHQsYz10aGlzLl9kb0ZpbGwsZD10aGlzLl9kb1N0cm9rZSxlPWFbMF0sZj1hWzFdLGg9YVsyXSxpPWFbM10saj1hWzRdLGs9YVs1XTtpZihjJiYhZCl7aWYodGhpcy5fZ2V0RmlsbCgpPT09ZylyZXR1cm4gdGhpc31lbHNlIGlmKCFjJiZkJiZ0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7Yi5iZWdpblBhdGgoKSxiLm1vdmVUbyhlLGYpLGIubGluZVRvKGgsaSksYi5saW5lVG8oaixrKSxiLmNsb3NlUGF0aCgpLGMmJmIuZmlsbCgpLGQmJmIuc3Ryb2tlKCl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZW5kU2hhcGU9ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCl7aWYoMD09PWIubGVuZ3RoKXJldHVybiB0aGlzO2lmKCF0aGlzLl9kb1N0cm9rZSYmIXRoaXMuX2RvRmlsbClyZXR1cm4gdGhpczt2YXIgaSxqPWE9PT1lLkNMT1NFO2omJiFnJiZiLnB1c2goYlswXSk7dmFyIGssbCxtPWIubGVuZ3RoO2lmKCFjfHxoIT09ZS5QT0xZR09OJiZudWxsIT09aClpZighZHx8aCE9PWUuUE9MWUdPTiYmbnVsbCE9PWgpaWYoIWZ8fGghPT1lLlBPTFlHT04mJm51bGwhPT1oKWlmKGg9PT1lLlBPSU5UUylmb3Ioaz0wO2s8bTtrKyspaT1iW2tdLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoaVs2XSksdGhpcy5fcEluc3QucG9pbnQoaVswXSxpWzFdKTtlbHNlIGlmKGg9PT1lLkxJTkVTKWZvcihrPTA7aysxPG07ays9MilpPWJba10sdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srMV1bNl0pLHRoaXMuX3BJbnN0LmxpbmUoaVswXSxpWzFdLGJbaysxXVswXSxiW2srMV1bMV0pO2Vsc2UgaWYoaD09PWUuVFJJQU5HTEVTKWZvcihrPTA7aysyPG07ays9MylpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysyXVswXSxiW2srMl1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fZG9GaWxsJiYodGhpcy5fcEluc3QuZmlsbChiW2srMl1bNV0pLHRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbCgpKSx0aGlzLl9kb1N0cm9rZSYmKHRoaXMuX3BJbnN0LnN0cm9rZShiW2srMl1bNl0pLHRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlKCkpO2Vsc2UgaWYoaD09PWUuVFJJQU5HTEVfU1RSSVApZm9yKGs9MDtrKzE8bTtrKyspaT1iW2tdLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYltrKzFdWzBdLGJbaysxXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbaysxXVs2XSksXG50aGlzLl9kb0ZpbGwmJnRoaXMuX3BJbnN0LmZpbGwoYltrKzFdWzVdKSxrKzI8bSYmKHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysyXVswXSxiW2srMl1bMV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzJdWzZdKSx0aGlzLl9kb0ZpbGwmJnRoaXMuX3BJbnN0LmZpbGwoYltrKzJdWzVdKSksdGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKTtlbHNlIGlmKGg9PT1lLlRSSUFOR0xFX0ZBTil7aWYobT4yKXtmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSxrPTI7azxtO2srKylpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYlswXVswXSxiWzBdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2stMV1bMF0sYltrLTFdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbMF1bMF0sYlswXVsxXSksazxtLTEmJih0aGlzLl9kb0ZpbGwmJmlbNV0hPT1iW2srMV1bNV18fHRoaXMuX2RvU3Ryb2tlJiZpWzZdIT09YltrKzFdWzZdKSYmKHRoaXMuX2RvRmlsbCYmKHRoaXMuX3BJbnN0LmZpbGwoaVs1XSksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsKCksdGhpcy5fcEluc3QuZmlsbChiW2srMV1bNV0pKSx0aGlzLl9kb1N0cm9rZSYmKHRoaXMuX3BJbnN0LnN0cm9rZShpWzZdKSx0aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZSgpLHRoaXMuX3BJbnN0LnN0cm9rZShiW2srMV1bNl0pKSx0aGlzLmRyYXdpbmdDb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCkpO3RoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9fWVsc2UgaWYoaD09PWUuUVVBRFMpZm9yKGs9MDtrKzM8bTtrKz00KXtmb3IoaT1iW2tdLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oaVswXSxpWzFdKSxsPTE7bDw0O2wrKyl0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srbF1bMF0sYltrK2xdWzFdKTt0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srM11bNV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzNdWzZdKSx0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2UgaWYoaD09PWUuUVVBRF9TVFJJUCl7aWYobT4zKWZvcihrPTA7aysxPG07ays9MilpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSxrKzM8bT8odGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYltrKzJdWzBdLGJbaysyXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srMV1bMF0sYltrKzFdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srM11bMF0sYltrKzNdWzFdKSx0aGlzLl9kb0ZpbGwmJnRoaXMuX3BJbnN0LmZpbGwoYltrKzNdWzVdKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbayszXVs2XSkpOih0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pKSx0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2V7Zm9yKHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYlswXVswXSxiWzBdWzFdKSxrPTE7azxtO2srKylpPWJba10saS5pc1ZlcnQmJihpLm1vdmVUbz90aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSkpO3RoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZXtmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSxrPTA7azxtO2srKyliW2tdLmlzVmVydD9iW2tdLm1vdmVUbz90aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhbMF0sYltrXVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrXVswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oYltrXVswXSxiW2tdWzFdLGJba11bMl0sYltrXVszXSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNle2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGs9MDtrPG07aysrKWJba10uaXNWZXJ0P2Jba10ubW92ZVRvP3RoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJba11bMF0sYltrXVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrXVswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LmJlemllckN1cnZlVG8oYltrXVswXSxiW2tdWzFdLGJba11bMl0sYltrXVszXSxiW2tdWzRdLGJba11bNV0pO3RoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZSBpZihtPjMpe3ZhciBuPVtdLG89MS10aGlzLl9jdXJ2ZVRpZ2h0bmVzcztmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiWzFdWzBdLGJbMV1bMV0pLGs9MTtrKzI8bTtrKyspaT1iW2tdLG5bMF09W2lbMF0saVsxXV0sblsxXT1baVswXSsobypiW2srMV1bMF0tbypiW2stMV1bMF0pLzYsaVsxXSsobypiW2srMV1bMV0tbypiW2stMV1bMV0pLzZdLG5bMl09W2JbaysxXVswXSsobypiW2tdWzBdLW8qYltrKzJdWzBdKS82LGJbaysxXVsxXSsobypiW2tdWzFdLW8qYltrKzJdWzFdKS82XSxuWzNdPVtiW2srMV1bMF0sYltrKzFdWzFdXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlemllckN1cnZlVG8oblsxXVswXSxuWzFdWzFdLG5bMl1bMF0sblsyXVsxXSxuWzNdWzBdLG5bM11bMV0pO2omJnRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pLHRoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9cmV0dXJuIGM9ITEsZD0hMSxmPSExLGc9ITEsaiYmYi5wb3AoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5ub1Ntb290aD1mdW5jdGlvbigpe3JldHVyblwiaW1hZ2VTbW9vdGhpbmdFbmFibGVkXCJpbiB0aGlzLmRyYXdpbmdDb250ZXh0JiYodGhpcy5kcmF3aW5nQ29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITEpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuXCJpbWFnZVNtb290aGluZ0VuYWJsZWRcImluIHRoaXMuZHJhd2luZ0NvbnRleHQmJih0aGlzLmRyYXdpbmdDb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zdHJva2VDYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1lLlJPVU5EJiZhIT09ZS5TUVVBUkUmJmEhPT1lLlBST0pFQ1R8fCh0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVDYXA9YSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zdHJva2VKb2luPWZ1bmN0aW9uKGEpe3JldHVybiBhIT09ZS5ST1VORCYmYSE9PWUuQkVWRUwmJmEhPT1lLk1JVEVSfHwodGhpcy5kcmF3aW5nQ29udGV4dC5saW5lSm9pbj1hKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnN0cm9rZVdlaWdodD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lV2lkdGg9dm9pZCAwPT09YXx8MD09PWE/MWUtNDphLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2dldEZpbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FjaGVkRmlsbFN0eWxlfHwodGhpcy5fY2FjaGVkRmlsbFN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFN0eWxlKSx0aGlzLl9jYWNoZWRGaWxsU3R5bGV9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX3NldEZpbGw9ZnVuY3Rpb24oYSl7YSE9PXRoaXMuX2NhY2hlZEZpbGxTdHlsZSYmKHRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFN0eWxlPWEsdGhpcy5fY2FjaGVkRmlsbFN0eWxlPWEpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9nZXRTdHJva2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGV8fCh0aGlzLl9jYWNoZWRTdHJva2VTdHlsZT10aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZVN0eWxlKSx0aGlzLl9jYWNoZWRTdHJva2VTdHlsZX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fc2V0U3Ryb2tlPWZ1bmN0aW9uKGEpe2EhPT10aGlzLl9jYWNoZWRTdHJva2VTdHlsZSYmKHRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlU3R5bGU9YSx0aGlzLl9jYWNoZWRTdHJva2VTdHlsZT1hKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5iZXppZXI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXtyZXR1cm4gdGhpcy5fcEluc3QuYmVnaW5TaGFwZSgpLHRoaXMuX3BJbnN0LnZlcnRleChhLGIpLHRoaXMuX3BJbnN0LmJlemllclZlcnRleChjLGQsZSxmLGcsaCksdGhpcy5fcEluc3QuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmN1cnZlPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCl7cmV0dXJuIHRoaXMuX3BJbnN0LmJlZ2luU2hhcGUoKSx0aGlzLl9wSW5zdC5jdXJ2ZVZlcnRleChhLGIpLHRoaXMuX3BJbnN0LmN1cnZlVmVydGV4KGMsZCksdGhpcy5fcEluc3QuY3VydmVWZXJ0ZXgoZSxmKSx0aGlzLl9wSW5zdC5jdXJ2ZVZlcnRleChnLGgpLHRoaXMuX3BJbnN0LmVuZFNoYXBlKCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fZG9GaWxsU3Ryb2tlQ2xvc2U9ZnVuY3Rpb24oKXt0aGlzLl9kb0ZpbGwmJnRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbCgpLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZSgpLHRoaXMuZHJhd2luZ0NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmRyYXdpbmdDb250ZXh0LnRyYW5zZm9ybShhLGIsYyxkLGUsZil9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucmVzZXRNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRoaXMuZHJhd2luZ0NvbnRleHQuc2NhbGUodGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSx0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5KSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhKXt0aGlzLmRyYXdpbmdDb250ZXh0LnJvdGF0ZShhKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnNjYWxlKGEsYiksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zaGVhclg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNmb3JtKDEsMCxNYXRoLnRhbihhKSwxLDAsMCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zaGVhclk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNmb3JtKDEsTWF0aC50YW4oYSksMCwxLDAsMCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yJiYoYj1hLnksYT1hLngpLHRoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNsYXRlKGEsYiksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGEsYixjLGYsZyl7dmFyIGg7dm9pZCAwIT09ZiYmdm9pZCAwIT09ZyYmdGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QmFzZWxpbmU9PT1lLkJBU0VMSU5FJiYoaD0hMCx0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT1lLlRPUCk7dmFyIGk9ZC5SZW5kZXJlci5wcm90b3R5cGUudGV4dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGgmJih0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT1lLkJBU0VMSU5FKSxpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9yZW5kZXJUZXh0PWZ1bmN0aW9uKGEsYixjLGQsZil7aWYoIShkPj1mKSlyZXR1cm4gYS5wdXNoKCksdGhpcy5faXNPcGVuVHlwZSgpP3RoaXMuX3RleHRGb250Ll9yZW5kZXJQYXRoKGIsYyxkLHtyZW5kZXJlcjp0aGlzfSk6KHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9zdHJva2VTZXQmJnRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlVGV4dChiLGMsZCksdGhpcy5fZG9GaWxsJiYodGhpcy5fZmlsbFNldHx8dGhpcy5fc2V0RmlsbChlLl9ERUZBVUxUX1RFWFRfRklMTCksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsVGV4dChiLGMsZCkpKSxhLnBvcCgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCxhfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRleHRXaWR0aD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5faXNPcGVuVHlwZSgpP3RoaXMuX3RleHRGb250Ll90ZXh0V2lkdGgoYSx0aGlzLl90ZXh0U2l6ZSk6dGhpcy5kcmF3aW5nQ29udGV4dC5tZWFzdXJlVGV4dChhKS53aWR0aH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fYXBwbHlUZXh0UHJvcGVydGllcz1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5fcEluc3Q7cmV0dXJuIHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRBc2NlbnRcIixudWxsKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0RGVzY2VudFwiLG51bGwpLGE9dGhpcy5fdGV4dEZvbnQsdGhpcy5faXNPcGVuVHlwZSgpJiYoYT10aGlzLl90ZXh0Rm9udC5mb250LmZhbWlseU5hbWUsdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dFN0eWxlXCIsdGhpcy5fdGV4dEZvbnQuZm9udC5zdHlsZU5hbWUpKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZvbnQ9KHRoaXMuX3RleHRTdHlsZXx8XCJub3JtYWxcIikrXCIgXCIrKHRoaXMuX3RleHRTaXplfHwxMikrXCJweCBcIisoYXx8XCJzYW5zLXNlcmlmXCIpLHRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEFsaWduPXRoaXMuX3RleHRBbGlnbix0aGlzLl90ZXh0QmFzZWxpbmU9PT1lLkNFTlRFUj90aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT1lLl9DVFhfTUlERExFOnRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPXRoaXMuX3RleHRCYXNlbGluZSxifSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC5zYXZlKCksZC5SZW5kZXJlci5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oYSl7dGhpcy5kcmF3aW5nQ29udGV4dC5yZXN0b3JlKCksdGhpcy5fY2FjaGVkRmlsbFN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFN0eWxlLHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlU3R5bGUsZC5SZW5kZXJlci5wcm90b3R5cGUucG9wLmNhbGwodGhpcyxhKX0sYi5leHBvcnRzPWQuUmVuZGVyZXIyRH0se1wiLi4vaW1hZ2UvZmlsdGVyc1wiOjQyLFwiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0LFwiLi9wNS5SZW5kZXJlclwiOjI3fV0sMjk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpLGU9YShcIi4vY29uc3RhbnRzXCIpO2EoXCIuL3A1LkdyYXBoaWNzXCIpLGEoXCIuL3A1LlJlbmRlcmVyMkRcIiksYShcIi4uL3dlYmdsL3A1LlJlbmRlcmVyR0xcIik7dmFyIGY9XCJkZWZhdWx0Q2FudmFzMFwiLGc9XCJwNUNhbnZhc1wiO2QucHJvdG90eXBlLmNyZWF0ZUNhbnZhcz1mdW5jdGlvbihhLGIsYyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlQ2FudmFzXCIsYXJndW1lbnRzKTt2YXIgaCxpPWN8fGUuUDJEO2lmKGk9PT1lLldFQkdMKXtpZihoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpKXtoLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCk7dmFyIGo9dGhpcy5fcmVuZGVyZXI7dGhpcy5fZWxlbWVudHM9dGhpcy5fZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT09an0pfWg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxoLmlkPWYsaC5jbGFzc0xpc3QuYWRkKGcpfWVsc2UgaWYodGhpcy5fZGVmYXVsdEdyYXBoaWNzQ3JlYXRlZCloPXRoaXMuY2FudmFzO2Vsc2V7aD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Zvcih2YXIgaz0wO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGVmYXVsdENhbnZhc1wiK2spOylrKys7Zj1cImRlZmF1bHRDYW52YXNcIitrLGguaWQ9ZixoLmNsYXNzTGlzdC5hZGQoZyl9cmV0dXJuIHRoaXMuX3NldHVwRG9uZXx8KGguZGF0YXNldC5oaWRkZW49ITAsaC5zdHlsZS52aXNpYmlsaXR5PVwiaGlkZGVuXCIpLHRoaXMuX3VzZXJOb2RlP3RoaXMuX3VzZXJOb2RlLmFwcGVuZENoaWxkKGgpOmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaCksaT09PWUuV0VCR0w/KHRoaXMuX3NldFByb3BlcnR5KFwiX3JlbmRlcmVyXCIsbmV3IGQuUmVuZGVyZXJHTChoLHRoaXMsITApKSx0aGlzLl9lbGVtZW50cy5wdXNoKHRoaXMuX3JlbmRlcmVyKSk6dGhpcy5fZGVmYXVsdEdyYXBoaWNzQ3JlYXRlZHx8KHRoaXMuX3NldFByb3BlcnR5KFwiX3JlbmRlcmVyXCIsbmV3IGQuUmVuZGVyZXIyRChoLHRoaXMsITApKSx0aGlzLl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkPSEwLHRoaXMuX2VsZW1lbnRzLnB1c2godGhpcy5fcmVuZGVyZXIpKSx0aGlzLl9yZW5kZXJlci5yZXNpemUoYSxiKSx0aGlzLl9yZW5kZXJlci5fYXBwbHlEZWZhdWx0cygpLHRoaXMuX3JlbmRlcmVyfSxkLnByb3RvdHlwZS5yZXNpemVDYW52YXM9ZnVuY3Rpb24oYSxiLGMpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlc2l6ZUNhbnZhc1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIpe3ZhciBlPXt9O2Zvcih2YXIgZiBpbiB0aGlzLmRyYXdpbmdDb250ZXh0KXt2YXIgZz10aGlzLmRyYXdpbmdDb250ZXh0W2ZdO1wib2JqZWN0XCIhPXR5cGVvZiBnJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBnJiYoZVtmXT1nKX10aGlzLl9yZW5kZXJlci5yZXNpemUoYSxiKSx0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yjtmb3IodmFyIGggaW4gZSl0cnl7dGhpcy5kcmF3aW5nQ29udGV4dFtoXT1lW2hdfWNhdGNoKGEpe31jfHx0aGlzLnJlZHJhdygpfX0sZC5wcm90b3R5cGUubm9DYW52YXM9ZnVuY3Rpb24oKXt0aGlzLmNhbnZhcyYmdGhpcy5jYW52YXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNhbnZhcyl9LGQucHJvdG90eXBlLmNyZWF0ZUdyYXBoaWNzPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlR3JhcGhpY3NcIixhcmd1bWVudHMpLG5ldyBkLkdyYXBoaWNzKGEsYixjLHRoaXMpfSxkLnByb3RvdHlwZS5ibGVuZE1vZGU9ZnVuY3Rpb24oYSl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmxlbmRNb2RlXCIsYXJndW1lbnRzKSxhIT09ZS5CTEVORCYmYSE9PWUuREFSS0VTVCYmYSE9PWUuTElHSFRFU1QmJmEhPT1lLkRJRkZFUkVOQ0UmJmEhPT1lLk1VTFRJUExZJiZhIT09ZS5FWENMVVNJT04mJmEhPT1lLlNDUkVFTiYmYSE9PWUuUkVQTEFDRSYmYSE9PWUuT1ZFUkxBWSYmYSE9PWUuSEFSRF9MSUdIVCYmYSE9PWUuU09GVF9MSUdIVCYmYSE9PWUuRE9ER0UmJmEhPT1lLkJVUk4mJmEhPT1lLkFERCYmYSE9PWUuTk9STUFMKXRocm93IG5ldyBFcnJvcihcIk1vZGUgXCIrYStcIiBub3QgcmVjb2duaXplZC5cIik7dGhpcy5fcmVuZGVyZXIuYmxlbmRNb2RlKGEpfSxiLmV4cG9ydHM9ZH0se1wiLi4vd2ViZ2wvcDUuUmVuZGVyZXJHTFwiOjc0LFwiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0LFwiLi9wNS5HcmFwaGljc1wiOjI2LFwiLi9wNS5SZW5kZXJlcjJEXCI6Mjh9XSwzMDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9tYWluXCIpLGU9YShcIi4uL2NvbnN0YW50c1wiKSxmPWEoXCIuLi9oZWxwZXJzXCIpO2EoXCIuLi9lcnJvcl9oZWxwZXJzXCIpLGQucHJvdG90eXBlLmFyYz1mdW5jdGlvbihhLGIsYyxnLGgsaSxqLGspe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImFyY1wiLGFyZ3VtZW50cyksIXRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmIXRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpcmV0dXJuIHRoaXM7Zm9yKGg9dGhpcy5fdG9SYWRpYW5zKGgpLGk9dGhpcy5fdG9SYWRpYW5zKGkpO2g8MDspaCs9ZS5UV09fUEk7Zm9yKDtpPDA7KWkrPWUuVFdPX1BJO3ZvaWQgMCE9PWgmJnZvaWQgMCE9PWkmJihpLnRvRml4ZWQoMTApPT09aC50b0ZpeGVkKDEwKXx8TWF0aC5hYnMoaS1oKT09PWUuVFdPX1BJPyhoJT1lLlRXT19QSSxpJT1lLlRXT19QSSxoKz1lLlRXT19QSSk6TWF0aC5hYnMoaS1oKT5lLlRXT19QSSYmKGglPWUuVFdPX1BJLGklPWUuVFdPX1BJLGkrPWUuVFdPX1BJKSksaDw9ZS5IQUxGX1BJP2g9TWF0aC5hdGFuKGMvZypNYXRoLnRhbihoKSk6aD5lLkhBTEZfUEkmJmg8PTMqZS5IQUxGX1BJJiYoaD1NYXRoLmF0YW4oYy9nKk1hdGgudGFuKGgpKStlLlBJKSxpPD1lLkhBTEZfUEk/aT1NYXRoLmF0YW4oYy9nKk1hdGgudGFuKGkpKTppPmUuSEFMRl9QSSYmaTw9MyplLkhBTEZfUEkmJihpPU1hdGguYXRhbihjL2cqTWF0aC50YW4oaSkpK2UuUEkpLGg+aSYmKGkrPWUuVFdPX1BJKSxjPU1hdGguYWJzKGMpLGc9TWF0aC5hYnMoZyk7dmFyIGw9Zi5tb2RlQWRqdXN0KGEsYixjLGcsdGhpcy5fcmVuZGVyZXIuX2VsbGlwc2VNb2RlKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuYXJjKGwueCxsLnksbC53LGwuaCxoLGksaixrKSx0aGlzfSxkLnByb3RvdHlwZS5lbGxpcHNlPWZ1bmN0aW9uKGEsYixjLGUsZyl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZWxsaXBzZVwiLGFyZ3VtZW50cyksIXRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmIXRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpcmV0dXJuIHRoaXM7YzwwJiYoYz1NYXRoLmFicyhjKSksdm9pZCAwPT09ZT9lPWM6ZTwwJiYoZT1NYXRoLmFicyhlKSk7dmFyIGg9Zi5tb2RlQWRqdXN0KGEsYixjLGUsdGhpcy5fcmVuZGVyZXIuX2VsbGlwc2VNb2RlKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZWxsaXBzZShbaC54LGgueSxoLncsaC5oLGddKSx0aGlzfSxkLnByb3RvdHlwZS5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxpbmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmdGhpcy5fcmVuZGVyZXIubGluZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBvaW50XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJnRoaXMuX3JlbmRlcmVyLnBvaW50LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucXVhZD1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJxdWFkXCIsYXJndW1lbnRzKSwodGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlfHx0aGlzLl9yZW5kZXJlci5fZG9GaWxsKSYmdGhpcy5fcmVuZGVyZXIucXVhZC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLnJlY3Q9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyZWN0XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2V8fHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpe2Zvcih2YXIgYT1mLm1vZGVBZGp1c3QoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLHRoaXMuX3JlbmRlcmVyLl9yZWN0TW9kZSksYj1bYS54LGEueSxhLncsYS5oXSxjPTQ7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliW2NdPWFyZ3VtZW50c1tjXTt0aGlzLl9yZW5kZXJlci5yZWN0KGIpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS50cmlhbmdsZT1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0cmlhbmdsZVwiLGFyZ3VtZW50cyksKHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZXx8dGhpcy5fcmVuZGVyZXIuX2RvRmlsbCkmJnRoaXMuX3JlbmRlcmVyLnRyaWFuZ2xlKGFyZ3VtZW50cyksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4uL2NvbnN0YW50c1wiOjE4LFwiLi4vZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vaGVscGVyc1wiOjIxLFwiLi4vbWFpblwiOjI0fV0sMzE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vbWFpblwiKSxlPWEoXCIuLi9jb25zdGFudHNcIik7ZC5wcm90b3R5cGUuZWxsaXBzZU1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImVsbGlwc2VNb2RlXCIsYXJndW1lbnRzKSxhIT09ZS5DT1JORVImJmEhPT1lLkNPUk5FUlMmJmEhPT1lLlJBRElVUyYmYSE9PWUuQ0VOVEVSfHwodGhpcy5fcmVuZGVyZXIuX2VsbGlwc2VNb2RlPWEpLHRoaXN9LGQucHJvdG90eXBlLm5vU21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLm5vU21vb3RoKCksdGhpc30sZC5wcm90b3R5cGUucmVjdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlY3RNb2RlXCIsYXJndW1lbnRzKSxhIT09ZS5DT1JORVImJmEhPT1lLkNPUk5FUlMmJmEhPT1lLlJBRElVUyYmYSE9PWUuQ0VOVEVSfHwodGhpcy5fcmVuZGVyZXIuX3JlY3RNb2RlPWEpLHRoaXN9LGQucHJvdG90eXBlLnNtb290aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5zbW9vdGgoKSx0aGlzfSxkLnByb3RvdHlwZS5zdHJva2VDYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInN0cm9rZUNhcFwiLGFyZ3VtZW50cyksYSE9PWUuUk9VTkQmJmEhPT1lLlNRVUFSRSYmYSE9PWUuUFJPSkVDVHx8dGhpcy5fcmVuZGVyZXIuc3Ryb2tlQ2FwKGEpLHRoaXN9LGQucHJvdG90eXBlLnN0cm9rZUpvaW49ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInN0cm9rZUpvaW5cIixhcmd1bWVudHMpLGEhPT1lLlJPVU5EJiZhIT09ZS5CRVZFTCYmYSE9PWUuTUlURVJ8fHRoaXMuX3JlbmRlcmVyLnN0cm9rZUpvaW4oYSksdGhpc30sZC5wcm90b3R5cGUuc3Ryb2tlV2VpZ2h0PWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzdHJva2VXZWlnaHRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnN0cm9rZVdlaWdodChhKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29uc3RhbnRzXCI6MTgsXCIuLi9tYWluXCI6MjR9XSwzMjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9tYWluXCIpO2EoXCIuLi9lcnJvcl9oZWxwZXJzXCIpLGQucHJvdG90eXBlLmJlemllcj1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZXx8dGhpcy5fcmVuZGVyZXIuX2RvRmlsbD8odGhpcy5fcmVuZGVyZXIuYmV6aWVyLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpcyk6dGhpc30sZC5wcm90b3R5cGUuYmV6aWVyRGV0YWlsPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJEZXRhaWxcIixhcmd1bWVudHMpLHRoaXMuX2JlemllckRldGFpbD1hLHRoaXN9LGQucHJvdG90eXBlLmJlemllclBvaW50PWZ1bmN0aW9uKGEsYixjLGUsZil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmV6aWVyUG9pbnRcIixhcmd1bWVudHMpO3ZhciBnPTEtZjtyZXR1cm4gTWF0aC5wb3coZywzKSphKzMqTWF0aC5wb3coZywyKSpmKmIrMypnKk1hdGgucG93KGYsMikqYytNYXRoLnBvdyhmLDMpKmV9LGQucHJvdG90eXBlLmJlemllclRhbmdlbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJUYW5nZW50XCIsYXJndW1lbnRzKTt2YXIgZz0xLWY7cmV0dXJuIDMqZSpNYXRoLnBvdyhmLDIpLTMqYypNYXRoLnBvdyhmLDIpKzYqYypnKmYtNipiKmcqZiszKmIqTWF0aC5wb3coZywyKS0zKmEqTWF0aC5wb3coZywyKX0sZC5wcm90b3R5cGUuY3VydmU9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmdGhpcy5fcmVuZGVyZXIuY3VydmUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5jdXJ2ZURldGFpbD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVEZXRhaWxcIixhcmd1bWVudHMpLHRoaXMuX2N1cnZlRGV0YWlsPWE8Mz8zOmEsdGhpc30sZC5wcm90b3R5cGUuY3VydmVUaWdodG5lc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlVGlnaHRuZXNzXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fY3VydmVUaWdodG5lc3M9YSx0aGlzfSxkLnByb3RvdHlwZS5jdXJ2ZVBvaW50PWZ1bmN0aW9uKGEsYixjLGUsZil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVQb2ludFwiLGFyZ3VtZW50cyk7dmFyIGc9ZipmKmYsaD1mKmY7cmV0dXJuIGEqKC0uNSpnK2gtLjUqZikrYiooMS41KmctMi41KmgrMSkrYyooLTEuNSpnKzIqaCsuNSpmKStlKiguNSpnLS41KmgpfSxkLnByb3RvdHlwZS5jdXJ2ZVRhbmdlbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVRhbmdlbnRcIixhcmd1bWVudHMpO3ZhciBnPWYqZjtyZXR1cm4gYSooLTMqZy8yKzIqZi0uNSkrYiooOSpnLzItNSpmKStjKigtOSpnLzIrNCpmKy41KStlKigzKmcvMi1mKX0sYi5leHBvcnRzPWR9LHtcIi4uL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL21haW5cIjoyNH1dLDMzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL21haW5cIiksZT1hKFwiLi4vY29uc3RhbnRzXCIpLGY9bnVsbCxnPVtdLGg9W10saT0hMSxqPSExLGs9ITEsbD0hMSxtPSEwO2QucHJvdG90eXBlLmJlZ2luQ29udG91cj1mdW5jdGlvbigpe3JldHVybiBoPVtdLGw9ITAsdGhpc30sZC5wcm90b3R5cGUuYmVnaW5TaGFwZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmVnaW5TaGFwZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0Q/dGhpcy5fcmVuZGVyZXIuYmVnaW5TaGFwZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpOihmPWE9PT1lLlBPSU5UU3x8YT09PWUuTElORVN8fGE9PT1lLlRSSUFOR0xFU3x8YT09PWUuVFJJQU5HTEVfRkFOfHxhPT09ZS5UUklBTkdMRV9TVFJJUHx8YT09PWUuUVVBRFN8fGE9PT1lLlFVQURfU1RSSVA/YTpudWxsLGc9W10saD1bXSksdGhpc30sZC5wcm90b3R5cGUuYmV6aWVyVmVydGV4PWZ1bmN0aW9uKCl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmV6aWVyVmVydGV4XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRCl0aGlzLl9yZW5kZXJlci5iZXppZXJWZXJ0ZXguYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTtlbHNle2lmKDA9PT1nLmxlbmd0aCl0aHJvd1widmVydGV4KCkgbXVzdCBiZSB1c2VkIG9uY2UgYmVmb3JlIGNhbGxpbmcgYmV6aWVyVmVydGV4KClcIjtpPSEwO2Zvcih2YXIgYT1bXSxiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKylhW2JdPWFyZ3VtZW50c1tiXTthLmlzVmVydD0hMSxsP2gucHVzaChhKTpnLnB1c2goYSl9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLmN1cnZlVmVydGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlVmVydGV4XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRD90aGlzLl9yZW5kZXJlci5jdXJ2ZVZlcnRleC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpOihqPSEwLHRoaXMudmVydGV4KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pKSx0aGlzfSxkLnByb3RvdHlwZS5lbmRDb250b3VyPWZ1bmN0aW9uKCl7dmFyIGE9aFswXS5zbGljZSgpO2EuaXNWZXJ0PWhbMF0uaXNWZXJ0LGEubW92ZVRvPSExLGgucHVzaChhKSxtJiYoZy5wdXNoKGdbMF0pLG09ITEpO2Zvcih2YXIgYj0wO2I8aC5sZW5ndGg7YisrKWcucHVzaChoW2JdKTtyZXR1cm4gdGhpc30sZC5wcm90b3R5cGUuZW5kU2hhcGU9ZnVuY3Rpb24oYSl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZW5kU2hhcGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEKXRoaXMuX3JlbmRlcmVyLmVuZFNoYXBlKGEsaixpLGssbCxmKTtlbHNle2lmKDA9PT1nLmxlbmd0aClyZXR1cm4gdGhpcztpZighdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiYhdGhpcy5fcmVuZGVyZXIuX2RvRmlsbClyZXR1cm4gdGhpczt2YXIgYj1hPT09ZS5DTE9TRTtiJiYhbCYmZy5wdXNoKGdbMF0pLHRoaXMuX3JlbmRlcmVyLmVuZFNoYXBlKGEsZyxqLGksayxsLGYpLGo9ITEsaT0hMSxrPSExLGw9ITEsbT0hMCxiJiZnLnBvcCgpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS5xdWFkcmF0aWNWZXJ0ZXg9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJxdWFkcmF0aWNWZXJ0ZXhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEKXRoaXMuX3JlbmRlcmVyLnF1YWRyYXRpY1ZlcnRleC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpO2Vsc2V7aWYodGhpcy5fY29udG91ckluaXRlZCl7dmFyIGE9e307cmV0dXJuIGEueD1hcmd1bWVudHNbMF0sYS55PWFyZ3VtZW50c1sxXSxhLngzPWFyZ3VtZW50c1syXSxhLnkzPWFyZ3VtZW50c1szXSxhLnR5cGU9ZS5RVUFEUkFUSUMsdGhpcy5fY29udG91clZlcnRpY2VzLnB1c2goYSksdGhpc31pZighKGcubGVuZ3RoPjApKXRocm93IG5ldyBFcnJvcihcInZlcnRleCgpIG11c3QgYmUgdXNlZCBvbmNlIGJlZm9yZSBjYWxsaW5nIHF1YWRyYXRpY1ZlcnRleCgpXCIpO2s9ITA7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbY109YXJndW1lbnRzW2NdO2IuaXNWZXJ0PSExLGw/aC5wdXNoKGIpOmcucHVzaChiKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUudmVydGV4PWZ1bmN0aW9uKGEsYixjLGQsZSl7aWYodGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhpcy5fcmVuZGVyZXIudmVydGV4LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk7ZWxzZXt2YXIgZj1bXTtmLmlzVmVydD0hMCxmWzBdPWEsZlsxXT1iLGZbMl09MCxmWzNdPTAsZls0XT0wLGZbNV09dGhpcy5fcmVuZGVyZXIuX2dldEZpbGwoKSxmWzZdPXRoaXMuX3JlbmRlcmVyLl9nZXRTdHJva2UoKSxjJiYoZi5tb3ZlVG89YyksbD8oMD09PWgubGVuZ3RoJiYoZi5tb3ZlVG89ITApLGgucHVzaChmKSk6Zy5wdXNoKGYpfXJldHVybiB0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29uc3RhbnRzXCI6MTgsXCIuLi9tYWluXCI6MjR9XSwzNDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZXx8ZnVuY3Rpb24oYSxiKXt3aW5kb3cuc2V0VGltZW91dChhLDFlMy82MCl9fSgpLGZ1bmN0aW9uKCl7XCJ1bmRlZmluZWRcIj09dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHxVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGUuc2xpY2V8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGUsXCJzbGljZVwiLHt2YWx1ZTpBcnJheS5wcm90b3R5cGUuc2xpY2Usd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITF9KX0oKSxmdW5jdGlvbigpe2lmKCFPYmplY3QuYXNzaWduKXt2YXIgYT1PYmplY3Qua2V5cyxiPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxjPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDAhPT1hJiZudWxsIT09YX0sZD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2woKSxlPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsZj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGUuY2FsbChhLGIpfX0sZz1mdW5jdGlvbihiLGUpe2lmKCFjKGIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7dmFyIGcsaCxpLGosaz1PYmplY3QoYik7Zm9yKGc9MTtnPGFyZ3VtZW50cy5sZW5ndGg7KytnKWZvcihoPU9iamVjdChhcmd1bWVudHNbZ10pLGo9YShoKSxkJiZPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiZqLnB1c2guYXBwbHkoaixPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGgpLmZpbHRlcihmKGgpKSksaT0wO2k8ai5sZW5ndGg7KytpKWtbaltpXV09aFtqW2ldXTtyZXR1cm4ga307YihPYmplY3QsXCJhc3NpZ25cIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMH0pfX0oKX0se31dLDM1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKTtkLnByb3RvdHlwZS5ub0xvb3A9ZnVuY3Rpb24oKXt0aGlzLl9sb29wPSExfSxkLnByb3RvdHlwZS5sb29wPWZ1bmN0aW9uKCl7dGhpcy5fbG9vcD0hMCx0aGlzLl9kcmF3KCl9LGQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXt0aGlzLl9zdHlsZXMucHVzaCh7cHJvcHM6e19jb2xvck1vZGU6dGhpcy5fY29sb3JNb2RlfSxyZW5kZXJlcjp0aGlzLl9yZW5kZXJlci5wdXNoKCl9KX0sZC5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fc3R5bGVzLnBvcCgpO2E/KHRoaXMuX3JlbmRlcmVyLnBvcChhLnJlbmRlcmVyKSxPYmplY3QuYXNzaWduKHRoaXMsYS5wcm9wcykpOmNvbnNvbGUud2FybihcInBvcCgpIHdhcyBjYWxsZWQgd2l0aG91dCBtYXRjaGluZyBwdXNoKClcIil9LGQucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbihhKXt2YXIgYj1wYXJzZUludChhKTsoaXNOYU4oYil8fGI8MSkmJihiPTEpO3ZhciBjPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzLGQ9Yy5zZXR1cCxlPWMuZHJhdztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKXt2b2lkIDA9PT1kJiZjLnNjYWxlKGMuX3BpeGVsRGVuc2l0eSxjLl9waXhlbERlbnNpdHkpO2Zvcih2YXIgZj1mdW5jdGlvbihhKXthLmNhbGwoYyl9LGc9MDtnPGI7ZysrKWMucmVzZXRNYXRyaXgoKSxjLl9yZW5kZXJlci5pc1AzRCYmYy5fcmVuZGVyZXIuX3VwZGF0ZSgpLGMuX3NldFByb3BlcnR5KFwiZnJhbWVDb3VudFwiLGMuZnJhbWVDb3VudCsxKSxjLl9yZWdpc3RlcmVkTWV0aG9kcy5wcmUuZm9yRWFjaChmKSxlKCksYy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5mb3JFYWNoKGYpfX0sYi5leHBvcnRzPWR9LHtcIi4vbWFpblwiOjI0fV0sMzY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2QucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuYXBwbHlNYXRyaXgoYSxiLGMsZCxlLGYpLHRoaXN9LGQucHJvdG90eXBlLnBvcE1hdHJpeD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInBvcE1hdHJpeCgpIG5vdCB1c2VkLCBzZWUgcG9wKClcIil9LGQucHJvdG90eXBlLnByaW50TWF0cml4PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicHJpbnRNYXRyaXgoKSBub3QgaW1wbGVtZW50ZWRcIil9LGQucHJvdG90eXBlLnB1c2hNYXRyaXg9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJwdXNoTWF0cml4KCkgbm90IHVzZWQsIHNlZSBwdXNoKClcIil9LGQucHJvdG90eXBlLnJlc2V0TWF0cml4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLnJlc2V0TWF0cml4KCksdGhpc30sZC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJvdGF0ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIucm90YXRlKHRoaXMuX3RvUmFkaWFucyhhKSxiKSx0aGlzfSxkLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInJvdGF0ZVhcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicm90YXRlWFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIucm90YXRlWCh0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwicm90YXRlWVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyb3RhdGVZXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5yb3RhdGVZKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJyb3RhdGVaXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJvdGF0ZVpcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnJvdGF0ZVoodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihhLGIsYyl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2NhbGVcIixhcmd1bWVudHMpLGEgaW5zdGFuY2VvZiBkLlZlY3Rvcil7dmFyIGU9YTthPWUueCxiPWUueSxjPWUuen1lbHNlIGlmKGEgaW5zdGFuY2VvZiBBcnJheSl7dmFyIGY9YTthPWZbMF0sYj1mWzFdLGM9ZlsyXXx8MX1yZXR1cm4gaXNOYU4oYik/Yj1jPWE6aXNOYU4oYykmJihjPTEpLHRoaXMuX3JlbmRlcmVyLnNjYWxlLmNhbGwodGhpcy5fcmVuZGVyZXIsYSxiLGMpLHRoaXN9LGQucHJvdG90eXBlLnNoZWFyWD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2hlYXJYXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5zaGVhclgodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS5zaGVhclk9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNoZWFyWVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuc2hlYXJZKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidHJhbnNsYXRlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRD90aGlzLl9yZW5kZXJlci50cmFuc2xhdGUoYSxiLGMpOnRoaXMuX3JlbmRlcmVyLnRyYW5zbGF0ZShhLGIpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuL21haW5cIjoyNH1dLDM3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5jcmVhdGVTdHJpbmdEaWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZVN0cmluZ0RpY3RcIixhcmd1bWVudHMpLG5ldyBkLlN0cmluZ0RpY3QoYSxiKX0sZC5wcm90b3R5cGUuY3JlYXRlTnVtYmVyRGljdD1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVOdW1iZXJEaWN0XCIsYXJndW1lbnRzKSxuZXcgZC5OdW1iZXJEaWN0KGEsYil9LGQuVHlwZWREaWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEgaW5zdGFuY2VvZiBPYmplY3Q/dGhpcy5kYXRhPWE6KHRoaXMuZGF0YT17fSx0aGlzLmRhdGFbYV09YiksdGhpc30sZC5UeXBlZERpY3QucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGh9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5oYXNLZXk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtpZih0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSkpcmV0dXJuIHRoaXMuZGF0YVthXTtjb25zb2xlLmxvZyhhK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgRGljdGlvbmFyeVwiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe3RoaXMuX3ZhbGlkYXRlKGIpP3RoaXMuZGF0YVthXT1iOmNvbnNvbGUubG9nKFwiVGhvc2UgdmFsdWVzIGRvbnQgd29yayBmb3IgdGhpcyBkaWN0aW9uYXJ5IHR5cGUuXCIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuX2FkZE9iaj1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSl0aGlzLnNldChiLGFbYl0pfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKGEsYil7YSBpbnN0YW5jZW9mIE9iamVjdCYmdm9pZCAwPT09Yj90aGlzLl9hZGRPYmooYSk6dm9pZCAwIT09YT90aGlzLnNldChhLGIpOmNvbnNvbGUubG9nKFwiSW4gb3JkZXIgdG8gY3JlYXRlIGEgbmV3IERpY3Rpb25hcnkgZW50cnkgeW91IG11c3QgcGFzcyBhbiBvYmplY3Qgb3IgYSBrZXksIHZhbHVlIHBhaXJcIil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZGF0YT17fX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhKXtpZighdGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpKXRocm93IG5ldyBFcnJvcihhK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgRGljdGlvbmFyeVwiKTtkZWxldGUgdGhpcy5kYXRhW2FdfSxkLlR5cGVkRGljdC5wcm90b3R5cGUucHJpbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gdGhpcy5kYXRhKWNvbnNvbGUubG9nKFwia2V5OlwiK2ErXCIgdmFsdWU6XCIrdGhpcy5kYXRhW2FdKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnNhdmVUYWJsZT1mdW5jdGlvbihhKXt2YXIgYj1cIlwiO2Zvcih2YXIgYyBpbiB0aGlzLmRhdGEpYis9YytcIixcIit0aGlzLmRhdGFbY10rXCJcXG5cIjt2YXIgZT1uZXcgQmxvYihbYl0se3R5cGU6XCJ0ZXh0L2NzdlwifSk7ZC5wcm90b3R5cGUuZG93bmxvYWRGaWxlKGUsYXx8XCJteWNzdlwiLFwiY3N2XCIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2F2ZUpTT049ZnVuY3Rpb24oYSxiKXtkLnByb3RvdHlwZS5zYXZlSlNPTih0aGlzLmRhdGEsYSxiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihhKXtyZXR1cm4hMH0sZC5TdHJpbmdEaWN0PWZ1bmN0aW9uKCl7ZC5UeXBlZERpY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkLlN0cmluZ0RpY3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5UeXBlZERpY3QucHJvdG90eXBlKSxkLlN0cmluZ0RpY3QucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYX0sZC5OdW1iZXJEaWN0PWZ1bmN0aW9uKCl7ZC5UeXBlZERpY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkLk51bWJlckRpY3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5UeXBlZERpY3QucHJvdG90eXBlKSxkLk51bWJlckRpY3QucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSk/dGhpcy5kYXRhW2FdKz1iOmNvbnNvbGUubG9nKFwiVGhlIGtleSAtIFwiK2ErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkaWN0aW9uYXJ5LlwiKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYSxiKXt0aGlzLmFkZChhLC1iKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5tdWx0PWZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpP3RoaXMuZGF0YVthXSo9Yjpjb25zb2xlLmxvZyhcIlRoZSBrZXkgLSBcIithK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGljdGlvbmFyeS5cIil9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpP3RoaXMuZGF0YVthXS89Yjpjb25zb2xlLmxvZyhcIlRoZSBrZXkgLSBcIithK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGljdGlvbmFyeS5cIil9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuX3ZhbHVlVGVzdD1mdW5jdGlvbihhKXtpZigwPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHNlYXJjaCBmb3IgYSBtaW5pbXVtIG9yIG1heGltdW0gdmFsdWUgb24gYW4gZW1wdHkgTnVtYmVyRGljdFwiKTtpZigxPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpcmV0dXJuIHRoaXMuZGF0YVtPYmplY3Qua2V5cyh0aGlzLmRhdGEpWzBdXTt2YXIgYj10aGlzLmRhdGFbT2JqZWN0LmtleXModGhpcy5kYXRhKVswXV07Zm9yKHZhciBjIGluIHRoaXMuZGF0YSl0aGlzLmRhdGFbY10qYTxiKmEmJihiPXRoaXMuZGF0YVtjXSk7cmV0dXJuIGJ9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWluVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWVUZXN0KDEpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLm1heFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlVGVzdCgtMSl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuX2tleVRlc3Q9ZnVuY3Rpb24oYSl7aWYoMD09PU9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byB1c2UgbWluVmFsdWUgb24gYW4gZW1wdHkgTnVtYmVyRGljdFwiKTtpZigxPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGF0YSlbMF07Zm9yKHZhciBiPU9iamVjdC5rZXlzKHRoaXMuZGF0YSlbMF0sYz0xO2M8T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGg7YysrKU9iamVjdC5rZXlzKHRoaXMuZGF0YSlbY10qYTxiKmEmJihiPU9iamVjdC5rZXlzKHRoaXMuZGF0YSlbY10pO3JldHVybiBifSxkLk51bWJlckRpY3QucHJvdG90eXBlLm1pbktleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rZXlUZXN0KDEpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLm1heEtleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rZXlUZXN0KC0xKX0sYi5leHBvcnRzPWQuVHlwZWREaWN0fSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDM4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5kZXZpY2VPcmllbnRhdGlvbj12b2lkIDAsZC5wcm90b3R5cGUuYWNjZWxlcmF0aW9uWD0wLGQucHJvdG90eXBlLmFjY2VsZXJhdGlvblk9MCxkLnByb3RvdHlwZS5hY2NlbGVyYXRpb25aPTAsZC5wcm90b3R5cGUucEFjY2VsZXJhdGlvblg9MCxkLnByb3RvdHlwZS5wQWNjZWxlcmF0aW9uWT0wLGQucHJvdG90eXBlLnBBY2NlbGVyYXRpb25aPTAsZC5wcm90b3R5cGUuX3VwZGF0ZVBBY2NlbGVyYXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJwQWNjZWxlcmF0aW9uWFwiLHRoaXMuYWNjZWxlcmF0aW9uWCksdGhpcy5fc2V0UHJvcGVydHkoXCJwQWNjZWxlcmF0aW9uWVwiLHRoaXMuYWNjZWxlcmF0aW9uWSksdGhpcy5fc2V0UHJvcGVydHkoXCJwQWNjZWxlcmF0aW9uWlwiLHRoaXMuYWNjZWxlcmF0aW9uWil9LGQucHJvdG90eXBlLnJvdGF0aW9uWD0wLGQucHJvdG90eXBlLnJvdGF0aW9uWT0wLGQucHJvdG90eXBlLnJvdGF0aW9uWj0wLGQucHJvdG90eXBlLnBSb3RhdGlvblg9MCxkLnByb3RvdHlwZS5wUm90YXRpb25ZPTAsZC5wcm90b3R5cGUucFJvdGF0aW9uWj0wO3ZhciBlLGYsZyxoPTAsaT0wLGo9MCxrPVwiY2xvY2t3aXNlXCIsbD1cImNsb2Nrd2lzZVwiLG09XCJjbG9ja3dpc2VcIjtkLnByb3RvdHlwZS5fdXBkYXRlUFJvdGF0aW9ucz1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwicFJvdGF0aW9uWFwiLHRoaXMucm90YXRpb25YKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBSb3RhdGlvbllcIix0aGlzLnJvdGF0aW9uWSksdGhpcy5fc2V0UHJvcGVydHkoXCJwUm90YXRpb25aXCIsdGhpcy5yb3RhdGlvblopfSxkLnByb3RvdHlwZS50dXJuQXhpcz12b2lkIDA7dmFyIG49LjUsbz0zMDtkLnByb3RvdHlwZS5zZXRNb3ZlVGhyZXNob2xkPWZ1bmN0aW9uKGEpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNldE1vdmVUaHJlc2hvbGRcIixhcmd1bWVudHMpLG49YX0sZC5wcm90b3R5cGUuc2V0U2hha2VUaHJlc2hvbGQ9ZnVuY3Rpb24oYSl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2V0U2hha2VUaHJlc2hvbGRcIixhcmd1bWVudHMpLG89YX0sZC5wcm90b3R5cGUuX29uZGV2aWNlb3JpZW50YXRpb249ZnVuY3Rpb24oYSl7dGhpcy5fdXBkYXRlUFJvdGF0aW9ucygpLHRoaXMuX3NldFByb3BlcnR5KFwicm90YXRpb25YXCIsYS5iZXRhKSx0aGlzLl9zZXRQcm9wZXJ0eShcInJvdGF0aW9uWVwiLGEuZ2FtbWEpLHRoaXMuX3NldFByb3BlcnR5KFwicm90YXRpb25aXCIsYS5hbHBoYSksdGhpcy5faGFuZGxlTW90aW9uKCl9LGQucHJvdG90eXBlLl9vbmRldmljZW1vdGlvbj1mdW5jdGlvbihhKXt0aGlzLl91cGRhdGVQQWNjZWxlcmF0aW9ucygpLHRoaXMuX3NldFByb3BlcnR5KFwiYWNjZWxlcmF0aW9uWFwiLDIqYS5hY2NlbGVyYXRpb24ueCksdGhpcy5fc2V0UHJvcGVydHkoXCJhY2NlbGVyYXRpb25ZXCIsMiphLmFjY2VsZXJhdGlvbi55KSx0aGlzLl9zZXRQcm9wZXJ0eShcImFjY2VsZXJhdGlvblpcIiwyKmEuYWNjZWxlcmF0aW9uLnopLHRoaXMuX2hhbmRsZU1vdGlvbigpfSxkLnByb3RvdHlwZS5faGFuZGxlTW90aW9uPWZ1bmN0aW9uKCl7OTA9PT13aW5kb3cub3JpZW50YXRpb258fC05MD09PXdpbmRvdy5vcmllbnRhdGlvbj90aGlzLl9zZXRQcm9wZXJ0eShcImRldmljZU9yaWVudGF0aW9uXCIsXCJsYW5kc2NhcGVcIik6MD09PXdpbmRvdy5vcmllbnRhdGlvbj90aGlzLl9zZXRQcm9wZXJ0eShcImRldmljZU9yaWVudGF0aW9uXCIsXCJwb3J0cmFpdFwiKTp2b2lkIDA9PT13aW5kb3cub3JpZW50YXRpb24mJnRoaXMuX3NldFByb3BlcnR5KFwiZGV2aWNlT3JpZW50YXRpb25cIixcInVuZGVmaW5lZFwiKTt2YXIgYT10aGlzLmRldmljZU1vdmVkfHx3aW5kb3cuZGV2aWNlTW92ZWQ7XCJmdW5jdGlvblwiPT10eXBlb2YgYSYmKE1hdGguYWJzKHRoaXMuYWNjZWxlcmF0aW9uWC10aGlzLnBBY2NlbGVyYXRpb25YKT5ufHxNYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblktdGhpcy5wQWNjZWxlcmF0aW9uWSk+bnx8TWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25aLXRoaXMucEFjY2VsZXJhdGlvblopPm4pJiZhKCk7dmFyIGI9dGhpcy5kZXZpY2VUdXJuZWR8fHdpbmRvdy5kZXZpY2VUdXJuZWQ7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYil7dmFyIGM9dGhpcy5yb3RhdGlvblgrMTgwLGQ9dGhpcy5wUm90YXRpb25YKzE4MCxwPWgrMTgwO2MtZD4wJiZjLWQ8MjcwfHxjLWQ8LTI3MD9rPVwiY2xvY2t3aXNlXCI6KGMtZDwwfHxjLWQ+MjcwKSYmKGs9XCJjb3VudGVyLWNsb2Nrd2lzZVwiKSxrIT09ZSYmKHA9YyksTWF0aC5hYnMoYy1wKT45MCYmTWF0aC5hYnMoYy1wKTwyNzAmJihwPWMsdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLFwiWFwiKSxiKCkpLGU9ayxoPXAtMTgwO3ZhciBxPXRoaXMucm90YXRpb25ZKzE4MCxyPXRoaXMucFJvdGF0aW9uWSsxODAscz1pKzE4MDtxLXI+MCYmcS1yPDI3MHx8cS1yPC0yNzA/bD1cImNsb2Nrd2lzZVwiOihxLXI8MHx8cS10aGlzLnBSb3RhdGlvblk+MjcwKSYmKGw9XCJjb3VudGVyLWNsb2Nrd2lzZVwiKSxsIT09ZiYmKHM9cSksTWF0aC5hYnMocS1zKT45MCYmTWF0aC5hYnMocS1zKTwyNzAmJihzPXEsdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLFwiWVwiKSxiKCkpLGY9bCxpPXMtMTgwLHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWj4wJiZ0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo8MjcwfHx0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo8LTI3MD9tPVwiY2xvY2t3aXNlXCI6KHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWjwwfHx0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo+MjcwKSYmKG09XCJjb3VudGVyLWNsb2Nrd2lzZVwiKSxtIT09ZyYmKGo9dGhpcy5yb3RhdGlvblopLE1hdGguYWJzKHRoaXMucm90YXRpb25aLWopPjkwJiZNYXRoLmFicyh0aGlzLnJvdGF0aW9uWi1qKTwyNzAmJihqPXRoaXMucm90YXRpb25aLHRoaXMuX3NldFByb3BlcnR5KFwidHVybkF4aXNcIixcIlpcIiksYigpKSxnPW0sdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLHZvaWQgMCl9dmFyIHQ9dGhpcy5kZXZpY2VTaGFrZW58fHdpbmRvdy5kZXZpY2VTaGFrZW47aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl7dmFyIHUsdjtudWxsIT09dGhpcy5wQWNjZWxlcmF0aW9uWCYmKHU9TWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25YLXRoaXMucEFjY2VsZXJhdGlvblgpLHY9TWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25ZLXRoaXMucEFjY2VsZXJhdGlvblkpKSx1K3Y+byYmdCgpfX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMzk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKCl7Zm9yKHZhciBhIGluIGYpaWYoZi5oYXNPd25Qcm9wZXJ0eShhKSYmITA9PT1mW2FdKXJldHVybiEwO3JldHVybiExfXZhciBlPWEoXCIuLi9jb3JlL21haW5cIiksZj17fTtlLnByb3RvdHlwZS5pc0tleVByZXNzZWQ9ITEsZS5wcm90b3R5cGUua2V5SXNQcmVzc2VkPSExLGUucHJvdG90eXBlLmtleT1cIlwiLGUucHJvdG90eXBlLmtleUNvZGU9MCxlLnByb3RvdHlwZS5fb25rZXlkb3duPWZ1bmN0aW9uKGEpe2lmKCFmW2Eud2hpY2hdKXt0aGlzLl9zZXRQcm9wZXJ0eShcImlzS2V5UHJlc3NlZFwiLCEwKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleUlzUHJlc3NlZFwiLCEwKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleUNvZGVcIixhLndoaWNoKSxmW2Eud2hpY2hdPSEwLHRoaXMuX3NldFByb3BlcnR5KFwia2V5XCIsYS5rZXl8fFN0cmluZy5mcm9tQ2hhckNvZGUoYS53aGljaCl8fGEud2hpY2gpO3ZhciBiPXRoaXMua2V5UHJlc3NlZHx8d2luZG93LmtleVByZXNzZWQ7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYiYmIWEuY2hhckNvZGUpeyExPT09YihhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX19LGUucHJvdG90eXBlLl9vbmtleXVwPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMua2V5UmVsZWFzZWR8fHdpbmRvdy5rZXlSZWxlYXNlZDtpZihmW2Eud2hpY2hdPSExLGQoKXx8KHRoaXMuX3NldFByb3BlcnR5KFwiaXNLZXlQcmVzc2VkXCIsITEpLHRoaXMuX3NldFByb3BlcnR5KFwia2V5SXNQcmVzc2VkXCIsITEpKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9sYXN0S2V5Q29kZVR5cGVkXCIsbnVsbCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlcIixhLmtleXx8U3RyaW5nLmZyb21DaGFyQ29kZShhLndoaWNoKXx8YS53aGljaCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlDb2RlXCIsYS53aGljaCksXCJmdW5jdGlvblwiPT10eXBlb2YgYil7ITE9PT1iKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fSxlLnByb3RvdHlwZS5fb25rZXlwcmVzcz1mdW5jdGlvbihhKXtpZihhLndoaWNoIT09dGhpcy5fbGFzdEtleUNvZGVUeXBlZCl7dGhpcy5fc2V0UHJvcGVydHkoXCJrZXlDb2RlXCIsYS53aGljaCksdGhpcy5fc2V0UHJvcGVydHkoXCJfbGFzdEtleUNvZGVUeXBlZFwiLGEud2hpY2gpLHRoaXMuX3NldFByb3BlcnR5KFwia2V5XCIsU3RyaW5nLmZyb21DaGFyQ29kZShhLndoaWNoKSk7dmFyIGI9dGhpcy5rZXlUeXBlZHx8d2luZG93LmtleVR5cGVkO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGIpeyExPT09YihhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX19LGUucHJvdG90eXBlLl9vbmJsdXI9ZnVuY3Rpb24oYSl7Zj17fX0sZS5wcm90b3R5cGUua2V5SXNEb3duPWZ1bmN0aW9uKGEpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJrZXlJc0Rvd25cIixhcmd1bWVudHMpLGZbYV19LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyxkKXtkJiYhZC5jbGllbnRYJiYoZC50b3VjaGVzP2Q9ZC50b3VjaGVzWzBdOmQuY2hhbmdlZFRvdWNoZXMmJihkPWQuY2hhbmdlZFRvdWNoZXNbMF0pKTt2YXIgZT1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9YS5zY3JvbGxXaWR0aC9iLGc9YS5zY3JvbGxIZWlnaHQvYztyZXR1cm57eDooZC5jbGllbnRYLWUubGVmdCkvZix5OihkLmNsaWVudFktZS50b3ApL2csd2luWDpkLmNsaWVudFgsd2luWTpkLmNsaWVudFksaWQ6ZC5pZGVudGlmaWVyfX12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpLGY9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2UucHJvdG90eXBlLl9oYXNNb3VzZUludGVyYWN0ZWQ9ITEsZS5wcm90b3R5cGUubW91c2VYPTAsZS5wcm90b3R5cGUubW91c2VZPTAsZS5wcm90b3R5cGUucG1vdXNlWD0wLGUucHJvdG90eXBlLnBtb3VzZVk9MCxlLnByb3RvdHlwZS53aW5Nb3VzZVg9MCxlLnByb3RvdHlwZS53aW5Nb3VzZVk9MCxlLnByb3RvdHlwZS5wd2luTW91c2VYPTAsZS5wcm90b3R5cGUucHdpbk1vdXNlWT0wLGUucHJvdG90eXBlLm1vdXNlQnV0dG9uPTAsZS5wcm90b3R5cGUubW91c2VJc1ByZXNzZWQ9ITEsZS5wcm90b3R5cGUuX3VwZGF0ZU5leHRNb3VzZUNvb3Jkcz1mdW5jdGlvbihhKXtpZihudWxsIT09dGhpcy5fY3VyRWxlbWVudCYmKCFhLnRvdWNoZXN8fGEudG91Y2hlcy5sZW5ndGg+MCkpe3ZhciBiPWQodGhpcy5fY3VyRWxlbWVudC5lbHQsdGhpcy53aWR0aCx0aGlzLmhlaWdodCxhKTt0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlWFwiLGIueCksdGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZVlcIixiLnkpLHRoaXMuX3NldFByb3BlcnR5KFwid2luTW91c2VYXCIsYi53aW5YKSx0aGlzLl9zZXRQcm9wZXJ0eShcIndpbk1vdXNlWVwiLGIud2luWSl9dGhpcy5faGFzTW91c2VJbnRlcmFjdGVkfHwodGhpcy5fdXBkYXRlTW91c2VDb29yZHMoKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9oYXNNb3VzZUludGVyYWN0ZWRcIiwhMCkpfSxlLnByb3RvdHlwZS5fdXBkYXRlTW91c2VDb29yZHM9ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcInBtb3VzZVhcIix0aGlzLm1vdXNlWCksdGhpcy5fc2V0UHJvcGVydHkoXCJwbW91c2VZXCIsdGhpcy5tb3VzZVkpLHRoaXMuX3NldFByb3BlcnR5KFwicHdpbk1vdXNlWFwiLHRoaXMud2luTW91c2VYKSx0aGlzLl9zZXRQcm9wZXJ0eShcInB3aW5Nb3VzZVlcIix0aGlzLndpbk1vdXNlWSksdGhpcy5fc2V0UHJvcGVydHkoXCJfcG1vdXNlV2hlZWxEZWx0YVlcIix0aGlzLl9tb3VzZVdoZWVsRGVsdGFZKX0sZS5wcm90b3R5cGUuX3NldE1vdXNlQnV0dG9uPWZ1bmN0aW9uKGEpezE9PT1hLmJ1dHRvbj90aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlQnV0dG9uXCIsZi5DRU5URVIpOjI9PT1hLmJ1dHRvbj90aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlQnV0dG9uXCIsZi5SSUdIVCk6dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUJ1dHRvblwiLGYuTEVGVCl9LGUucHJvdG90eXBlLl9vbm1vdXNlbW92ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczt0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksdGhpcy5tb3VzZUlzUHJlc3NlZD9cImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlRHJhZ2dlZD8hMT09PWIubW91c2VEcmFnZ2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaE1vdmVkJiYhMT09PWIudG91Y2hNb3ZlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VNb3ZlZCYmITE9PT1iLm1vdXNlTW92ZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29ubW91c2Vkb3duPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMCksdGhpcy5fc2V0TW91c2VCdXR0b24oYSksdGhpcy5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzKGEpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VQcmVzc2VkPyExPT09Yi5tb3VzZVByZXNzZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoU3RhcnRlZCYmITE9PT1iLnRvdWNoU3RhcnRlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb25tb3VzZXVwPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMSksXG5cImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlUmVsZWFzZWQ/ITE9PT1iLm1vdXNlUmVsZWFzZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoRW5kZWQmJiExPT09Yi50b3VjaEVuZGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbmRyYWdlbmQ9ZS5wcm90b3R5cGUuX29ubW91c2V1cCxlLnByb3RvdHlwZS5fb25kcmFnb3Zlcj1lLnByb3RvdHlwZS5fb25tb3VzZW1vdmUsZS5wcm90b3R5cGUuX29uY2xpY2s9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZUNsaWNrZWQpeyExPT09Yi5tb3VzZUNsaWNrZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGUucHJvdG90eXBlLl9vbmRibGNsaWNrPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGIuZG91YmxlQ2xpY2tlZCl7ITE9PT1iLmRvdWJsZUNsaWNrZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGUucHJvdG90eXBlLl9tb3VzZVdoZWVsRGVsdGFZPTAsZS5wcm90b3R5cGUuX3Btb3VzZVdoZWVsRGVsdGFZPTAsZS5wcm90b3R5cGUuX29ud2hlZWw9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYodGhpcy5fc2V0UHJvcGVydHkoXCJfbW91c2VXaGVlbERlbHRhWVwiLGEuZGVsdGFZKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlV2hlZWwpe2EuZGVsdGE9YS5kZWx0YVk7ITE9PT1iLm1vdXNlV2hlZWwoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw0MTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMsZCxlKXtlPWV8fDA7dmFyIGY9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPWEuc2Nyb2xsV2lkdGgvYixoPWEuc2Nyb2xsSGVpZ2h0L2MsaT1kLnRvdWNoZXNbZV18fGQuY2hhbmdlZFRvdWNoZXNbZV07cmV0dXJue3g6KGkuY2xpZW50WC1mLmxlZnQpL2cseTooaS5jbGllbnRZLWYudG9wKS9oLHdpblg6aS5jbGllbnRYLHdpblk6aS5jbGllbnRZLGlkOmkuaWRlbnRpZmllcn19dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKTtlLnByb3RvdHlwZS50b3VjaGVzPVtdLGUucHJvdG90eXBlLl91cGRhdGVUb3VjaENvb3Jkcz1mdW5jdGlvbihhKXtpZihudWxsIT09dGhpcy5fY3VyRWxlbWVudCl7Zm9yKHZhciBiPVtdLGM9MDtjPGEudG91Y2hlcy5sZW5ndGg7YysrKWJbY109ZCh0aGlzLl9jdXJFbGVtZW50LmVsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LGEsYyk7dGhpcy5fc2V0UHJvcGVydHkoXCJ0b3VjaGVzXCIsYil9fSxlLnByb3RvdHlwZS5fb250b3VjaHN0YXJ0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMCksdGhpcy5fdXBkYXRlVG91Y2hDb29yZHMoYSksdGhpcy5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzKGEpLHRoaXMuX3VwZGF0ZU1vdXNlQ29vcmRzKCksXCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaFN0YXJ0ZWQ/ITE9PT1iLnRvdWNoU3RhcnRlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VQcmVzc2VkJiYhMT09PWIubW91c2VQcmVzc2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbnRvdWNobW92ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczt0aGlzLl91cGRhdGVUb3VjaENvb3JkcyhhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksXCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaE1vdmVkPyExPT09Yi50b3VjaE1vdmVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZURyYWdnZWQmJiExPT09Yi5tb3VzZURyYWdnZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29udG91Y2hlbmQ9ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCExKSx0aGlzLl91cGRhdGVUb3VjaENvb3JkcyhhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSk7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7XCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaEVuZGVkPyExPT09Yi50b3VjaEVuZGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVJlbGVhc2VkJiYhMT09PWIubW91c2VSZWxlYXNlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw0MjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSl7dmFyIGI9My41KmF8MDtpZihiPWI8MT8xOmI8MjQ4P2I6MjQ4LGchPT1iKXtnPWIsaD0xK2c8PDEsaT1uZXcgSW50MzJBcnJheShoKSxqPW5ldyBBcnJheShoKTtmb3IodmFyIGM9MDtjPGg7YysrKWpbY109bmV3IEludDMyQXJyYXkoMjU2KTtmb3IodmFyIGQsZSxmLGssbD0xLG09Yi0xO2w8YjtsKyspe2lbYitsXT1pW21dPWU9bSptLGY9altiK2xdLGs9alttLS1dO2Zvcih2YXIgbj0wO248MjU2O24rKylmW25dPWtbbl09ZSpufWQ9aVtiXT1iKmIsZj1qW2JdO2Zvcih2YXIgbz0wO288MjU2O28rKylmW29dPWQqb319ZnVuY3Rpb24gZShhLGIpe2Zvcih2YXIgYz1mLl90b1BpeGVscyhhKSxlPWEud2lkdGgsaz1hLmhlaWdodCxsPWUqayxtPW5ldyBJbnQzMkFycmF5KGwpLG49MDtuPGw7bisrKW1bbl09Zi5fZ2V0QVJHQihjLG4pO3ZhciBvLHAscSxyLHMsdCx1LHYsdyx4LHk9bmV3IEludDMyQXJyYXkobCksej1uZXcgSW50MzJBcnJheShsKSxBPW5ldyBJbnQzMkFycmF5KGwpLEI9bmV3IEludDMyQXJyYXkobCksQz0wO2QoYik7dmFyIEQsRSxGLEc7Zm9yKEU9MDtFPGs7RSsrKXtmb3IoRD0wO0Q8ZTtEKyspe2lmKHI9cT1wPXM9bz0wLCh0PUQtZyk8MCl4PS10LHQ9MDtlbHNle2lmKHQ+PWUpYnJlYWs7eD0wfWZvcihGPXg7RjxoJiYhKHQ+PWUpO0YrKyl7dmFyIEg9bVt0K0NdO0c9altGXSxzKz1HWygtMTY3NzcyMTYmSCk+Pj4yNF0scCs9R1soMTY3MTE2ODAmSCk+PjE2XSxxKz1HWyg2NTI4MCZIKT4+OF0scis9R1syNTUmSF0sbys9aVtGXSx0Kyt9dT1DK0QseVt1XT1zL28selt1XT1wL28sQVt1XT1xL28sQlt1XT1yL299Qys9ZX1mb3IoQz0wLHY9LWcsdz12KmUsRT0wO0U8aztFKyspe2ZvcihEPTA7RDxlO0QrKyl7aWYocj1xPXA9cz1vPTAsdjwwKXg9dT0tdix0PUQ7ZWxzZXtpZih2Pj1rKWJyZWFrO3g9MCx1PXYsdD1EK3d9Zm9yKEY9eDtGPGgmJiEodT49ayk7RisrKUc9altGXSxzKz1HW3lbdF1dLHArPUdbelt0XV0scSs9R1tBW3RdXSxyKz1HW0JbdF1dLG8rPWlbRl0sdSsrLHQrPWU7bVtEK0NdPXMvbzw8MjR8cC9vPDwxNnxxL288PDh8ci9vfUMrPWUsdys9ZSx2Kyt9Zi5fc2V0UGl4ZWxzKGMsbSl9dmFyIGY9e307Zi5fdG9QaXhlbHM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBJbWFnZURhdGE/YS5kYXRhOmEuZ2V0Q29udGV4dChcIjJkXCIpLmdldEltYWdlRGF0YSgwLDAsYS53aWR0aCxhLmhlaWdodCkuZGF0YX0sZi5fZ2V0QVJHQj1mdW5jdGlvbihhLGIpe3ZhciBjPTQqYjtyZXR1cm4gYVtjKzNdPDwyNCY0Mjc4MTkwMDgwfGFbY108PDE2JjE2NzExNjgwfGFbYysxXTw8OCY2NTI4MHwyNTUmYVtjKzJdfSxmLl9zZXRQaXhlbHM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MCxkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKWM9NCpkLGFbYyswXT0oMTY3MTE2ODAmYltkXSk+Pj4xNixhW2MrMV09KDY1MjgwJmJbZF0pPj4+OCxhW2MrMl09MjU1JmJbZF0sYVtjKzNdPSg0Mjc4MTkwMDgwJmJbZF0pPj4+MjR9LGYuX3RvSW1hZ2VEYXRhPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgSW1hZ2VEYXRhP2E6YS5nZXRDb250ZXh0KFwiMmRcIikuZ2V0SW1hZ2VEYXRhKDAsMCxhLndpZHRoLGEuaGVpZ2h0KX0sZi5fY3JlYXRlSW1hZ2VEYXRhPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGYuX3RtcENhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGYuX3RtcEN0eD1mLl90bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLHRoaXMuX3RtcEN0eC5jcmVhdGVJbWFnZURhdGEoYSxiKX0sZi5hcHBseT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRDb250ZXh0KFwiMmRcIiksZT1kLmdldEltYWdlRGF0YSgwLDAsYS53aWR0aCxhLmhlaWdodCksZj1iKGUsYyk7ZiBpbnN0YW5jZW9mIEltYWdlRGF0YT9kLnB1dEltYWdlRGF0YShmLDAsMCwwLDAsYS53aWR0aCxhLmhlaWdodCk6ZC5wdXRJbWFnZURhdGEoZSwwLDAsMCwwLGEud2lkdGgsYS5oZWlnaHQpfSxmLnRocmVzaG9sZD1mdW5jdGlvbihhLGIpe3ZhciBjPWYuX3RvUGl4ZWxzKGEpO3ZvaWQgMD09PWImJihiPS41KTtmb3IodmFyIGQ9TWF0aC5mbG9vcigyNTUqYiksZT0wO2U8Yy5sZW5ndGg7ZSs9NCl7dmFyIGcsaD1jW2VdLGk9Y1tlKzFdLGo9Y1tlKzJdLGs9LjIxMjYqaCsuNzE1MippKy4wNzIyKmo7Zz1rPj1kPzI1NTowLGNbZV09Y1tlKzFdPWNbZSsyXT1nfX0sZi5ncmF5PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1mLl90b1BpeGVscyhhKSxjPTA7YzxiLmxlbmd0aDtjKz00KXt2YXIgZD1iW2NdLGU9YltjKzFdLGc9YltjKzJdLGg9LjIxMjYqZCsuNzE1MiplKy4wNzIyKmc7YltjXT1iW2MrMV09YltjKzJdPWh9fSxmLm9wYXF1ZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9Zi5fdG9QaXhlbHMoYSksYz0wO2M8Yi5sZW5ndGg7Yys9NCliW2MrM109MjU1O3JldHVybiBifSxmLmludmVydD1mdW5jdGlvbihhKXtmb3IodmFyIGI9Zi5fdG9QaXhlbHMoYSksYz0wO2M8Yi5sZW5ndGg7Yys9NCliW2NdPTI1NS1iW2NdLGJbYysxXT0yNTUtYltjKzFdLGJbYysyXT0yNTUtYltjKzJdfSxmLnBvc3Rlcml6ZT1mdW5jdGlvbihhLGIpe3ZhciBjPWYuX3RvUGl4ZWxzKGEpO2lmKGI8Mnx8Yj4yNTUpdGhyb3cgbmV3IEVycm9yKFwiTGV2ZWwgbXVzdCBiZSBncmVhdGVyIHRoYW4gMiBhbmQgbGVzcyB0aGFuIDI1NSBmb3IgcG9zdGVyaXplXCIpO2Zvcih2YXIgZD1iLTEsZT0wO2U8Yy5sZW5ndGg7ZSs9NCl7dmFyIGc9Y1tlXSxoPWNbZSsxXSxpPWNbZSsyXTtjW2VdPTI1NSooZypiPj44KS9kLGNbZSsxXT0yNTUqKGgqYj4+OCkvZCxjW2UrMl09MjU1KihpKmI+PjgpL2R9fSxmLmRpbGF0ZT1mdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0PWYuX3RvUGl4ZWxzKGEpLHU9MCx2PXQubGVuZ3RoP3QubGVuZ3RoLzQ6MCx3PW5ldyBJbnQzMkFycmF5KHYpO3U8djspZm9yKGI9dSxjPXUrYS53aWR0aDt1PGM7KWQ9ZT1mLl9nZXRBUkdCKHQsdSksaT11LTEsaD11KzEsaj11LWEud2lkdGgsaz11K2Eud2lkdGgsaTxiJiYoaT11KSxoPj1jJiYoaD11KSxqPDAmJihqPTApLGs+PXYmJihrPXUpLG49Zi5fZ2V0QVJHQih0LGopLG09Zi5fZ2V0QVJHQih0LGkpLG89Zi5fZ2V0QVJHQih0LGspLGw9Zi5fZ2V0QVJHQih0LGgpLGc9NzcqKGQ+PjE2JjI1NSkrMTUxKihkPj44JjI1NSkrMjgqKDI1NSZkKSxxPTc3KihtPj4xNiYyNTUpKzE1MSoobT4+OCYyNTUpKzI4KigyNTUmbSkscD03NyoobD4+MTYmMjU1KSsxNTEqKGw+PjgmMjU1KSsyOCooMjU1JmwpLHI9NzcqKG4+PjE2JjI1NSkrMTUxKihuPj44JjI1NSkrMjgqKDI1NSZuKSxzPTc3KihvPj4xNiYyNTUpKzE1MSoobz4+OCYyNTUpKzI4KigyNTUmbykscT5nJiYoZT1tLGc9cSkscD5nJiYoZT1sLGc9cCkscj5nJiYoZT1uLGc9cikscz5nJiYoZT1vLGc9cyksd1t1KytdPWU7Zi5fc2V0UGl4ZWxzKHQsdyl9LGYuZXJvZGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZCxlLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdD1mLl90b1BpeGVscyhhKSx1PTAsdj10Lmxlbmd0aD90Lmxlbmd0aC80OjAsdz1uZXcgSW50MzJBcnJheSh2KTt1PHY7KWZvcihiPXUsYz11K2Eud2lkdGg7dTxjOylkPWU9Zi5fZ2V0QVJHQih0LHUpLGk9dS0xLGg9dSsxLGo9dS1hLndpZHRoLGs9dSthLndpZHRoLGk8YiYmKGk9dSksaD49YyYmKGg9dSksajwwJiYoaj0wKSxrPj12JiYoaz11KSxuPWYuX2dldEFSR0IodCxqKSxtPWYuX2dldEFSR0IodCxpKSxvPWYuX2dldEFSR0IodCxrKSxsPWYuX2dldEFSR0IodCxoKSxnPTc3KihkPj4xNiYyNTUpKzE1MSooZD4+OCYyNTUpKzI4KigyNTUmZCkscT03NyoobT4+MTYmMjU1KSsxNTEqKG0+PjgmMjU1KSsyOCooMjU1Jm0pLHA9NzcqKGw+PjE2JjI1NSkrMTUxKihsPj44JjI1NSkrMjgqKDI1NSZsKSxyPTc3KihuPj4xNiYyNTUpKzE1MSoobj4+OCYyNTUpKzI4KigyNTUmbikscz03Nyoobz4+MTYmMjU1KSsxNTEqKG8+PjgmMjU1KSsyOCooMjU1Jm8pLHE8ZyYmKGU9bSxnPXEpLHA8ZyYmKGU9bCxnPXApLHI8ZyYmKGU9bixnPXIpLHM8ZyYmKGU9byxnPXMpLHdbdSsrXT1lO2YuX3NldFBpeGVscyh0LHcpfTt2YXIgZyxoLGksajtmLmJsdXI9ZnVuY3Rpb24oYSxiKXtlKGEsYil9LGIuZXhwb3J0cz1mfSx7fV0sNDM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9W107ZC5wcm90b3R5cGUuY3JlYXRlSW1hZ2U9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlSW1hZ2VcIixhcmd1bWVudHMpLG5ldyBkLkltYWdlKGEsYil9LGQucHJvdG90eXBlLnNhdmVDYW52YXM9ZnVuY3Rpb24oKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlQ2FudmFzXCIsYXJndW1lbnRzKTt2YXIgYSxiLGMsZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7YXJndW1lbnRzWzBdaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudD8oYT1hcmd1bWVudHNbMF0sZS5zaGlmdCgpKTphcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQuRWxlbWVudD8oYT1hcmd1bWVudHNbMF0uZWx0LGUuc2hpZnQoKSk6YT10aGlzLl9jdXJFbGVtZW50JiZ0aGlzLl9jdXJFbGVtZW50LmVsdCxlLmxlbmd0aD49MSYmKGI9ZVswXSksZS5sZW5ndGg+PTImJihjPWVbMV0pLGM9Y3x8ZC5wcm90b3R5cGUuX2NoZWNrRmlsZUV4dGVuc2lvbihiLGMpWzFdfHxcInBuZ1wiO3ZhciBmO3N3aXRjaChjKXtkZWZhdWx0OmY9XCJpbWFnZS9wbmdcIjticmVhaztjYXNlXCJqcGVnXCI6Y2FzZVwianBnXCI6Zj1cImltYWdlL2pwZWdcIn1hLnRvQmxvYihmdW5jdGlvbihhKXtkLnByb3RvdHlwZS5kb3dubG9hZEZpbGUoYSxiLGMpfSxmKX0sZC5wcm90b3R5cGUuc2F2ZUZyYW1lcz1mdW5jdGlvbihhLGIsYyxmLGcpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVGcmFtZXNcIixhcmd1bWVudHMpO3ZhciBoPWN8fDM7aD1kLnByb3RvdHlwZS5jb25zdHJhaW4oaCwwLDE1KSxoKj0xZTM7dmFyIGk9Znx8MTU7aT1kLnByb3RvdHlwZS5jb25zdHJhaW4oaSwwLDIyKTt2YXIgaj0wLGs9ZC5wcm90b3R5cGUuX21ha2VGcmFtZSxsPXRoaXMuX2N1ckVsZW1lbnQuZWx0LG09c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtrKGEraixiLGwpLGorK30sMWUzL2kpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihjbGVhckludGVydmFsKG0pLGcpZyhlKTtlbHNlIGZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgYj1lW2FdO2QucHJvdG90eXBlLmRvd25sb2FkRmlsZShiLmltYWdlRGF0YSxiLmZpbGVuYW1lLGIuZXh0KX1lPVtdfSxoKy4wMSl9LGQucHJvdG90eXBlLl9tYWtlRnJhbWU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2Q9dGhpcz90aGlzLl9jdXJFbGVtZW50LmVsdDpjO3ZhciBmO2lmKGIpc3dpdGNoKGIudG9Mb3dlckNhc2UoKSl7Y2FzZVwicG5nXCI6Zj1cImltYWdlL3BuZ1wiO2JyZWFrO2Nhc2VcImpwZWdcIjpjYXNlXCJqcGdcIjpmPVwiaW1hZ2UvanBlZ1wiO2JyZWFrO2RlZmF1bHQ6Zj1cImltYWdlL3BuZ1wifWVsc2UgYj1cInBuZ1wiLGY9XCJpbWFnZS9wbmdcIjt2YXIgZz1kLnRvRGF0YVVSTChmKTtnPWcucmVwbGFjZShmLFwiaW1hZ2Uvb2N0ZXQtc3RyZWFtXCIpO3ZhciBoPXt9O2guaW1hZ2VEYXRhPWcsaC5maWxlbmFtZT1hLGguZXh0PWIsZS5wdXNoKGgpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw0NDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiKXtyZXR1cm4gYT4wJiZhPGI/YTpifXZhciBlPWEoXCIuLi9jb3JlL21haW5cIiksZj1hKFwiLi9maWx0ZXJzXCIpLGc9YShcIi4uL2NvcmUvaGVscGVyc1wiKSxoPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGUucHJvdG90eXBlLmxvYWRJbWFnZT1mdW5jdGlvbihhLGIsYyl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZEltYWdlXCIsYXJndW1lbnRzKTt2YXIgZD1uZXcgSW1hZ2UsZj1uZXcgZS5JbWFnZSgxLDEsdGhpcyksZz10aGlzO3JldHVybiBkLm9ubG9hZD1mdW5jdGlvbigpe2Yud2lkdGg9Zi5jYW52YXMud2lkdGg9ZC53aWR0aCxmLmhlaWdodD1mLmNhbnZhcy5oZWlnaHQ9ZC5oZWlnaHQsZi5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoZCwwLDApLGYubW9kaWZpZWQ9ITAsXCJmdW5jdGlvblwiPT10eXBlb2YgYiYmYihmKSxnLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGQub25lcnJvcj1mdW5jdGlvbihhKXtlLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoMCxkLnNyYyksXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmYyhhKX0sMCE9PWEuaW5kZXhPZihcImRhdGE6aW1hZ2UvXCIpJiYoZC5jcm9zc09yaWdpbj1cIkFub255bW91c1wiKSxkLnNyYz1hLGZ9LGUucHJvdG90eXBlLmltYWdlPWZ1bmN0aW9uKGEsYixjLGYsaCxpLGosayxsKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJpbWFnZVwiLGFyZ3VtZW50cyk7dmFyIG09YS53aWR0aCxuPWEuaGVpZ2h0O2EuZWx0JiZhLmVsdC52aWRlb1dpZHRoJiYhYS5jYW52YXMmJihtPWEuZWx0LnZpZGVvV2lkdGgsbj1hLmVsdC52aWRlb0hlaWdodCk7dmFyIG89YixwPWMscT1mfHxtLHI9aHx8bixzPWl8fDAsdD1qfHwwLHU9a3x8bSx2PWx8fG47dT1kKHUsbSksdj1kKHYsbik7dmFyIHc9MTthLmVsdCYmIWEuY2FudmFzJiZhLmVsdC5zdHlsZS53aWR0aCYmKHc9YS5lbHQudmlkZW9XaWR0aCYmIWY/YS5lbHQudmlkZW9XaWR0aDphLmVsdC53aWR0aCx3Lz1wYXJzZUludChhLmVsdC5zdHlsZS53aWR0aCwxMCkpLHMqPXcsdCo9dyx2Kj13LHUqPXc7dmFyIHg9Zy5tb2RlQWRqdXN0KG8scCxxLHIsdGhpcy5fcmVuZGVyZXIuX2ltYWdlTW9kZSk7dGhpcy5fcmVuZGVyZXIuaW1hZ2UoYSxzLHQsdSx2LHgueCx4LnkseC53LHguaCl9LGUucHJvdG90eXBlLnRpbnQ9ZnVuY3Rpb24oKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0aW50XCIsYXJndW1lbnRzKTt2YXIgYT10aGlzLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9yZW5kZXJlci5fdGludD1hLmxldmVsc30sZS5wcm90b3R5cGUubm9UaW50PWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3RpbnQ9bnVsbH0sZS5wcm90b3R5cGUuX2dldFRpbnRlZEltYWdlQ2FudmFzPWZ1bmN0aW9uKGEpe2lmKCFhLmNhbnZhcylyZXR1cm4gYTt2YXIgYj1mLl90b1BpeGVscyhhLmNhbnZhcyksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Mud2lkdGg9YS5jYW52YXMud2lkdGgsYy5oZWlnaHQ9YS5jYW52YXMuaGVpZ2h0O2Zvcih2YXIgZD1jLmdldENvbnRleHQoXCIyZFwiKSxlPWQuY3JlYXRlSW1hZ2VEYXRhKGEuY2FudmFzLndpZHRoLGEuY2FudmFzLmhlaWdodCksZz1lLmRhdGEsaD0wO2g8Yi5sZW5ndGg7aCs9NCl7dmFyIGk9YltoXSxqPWJbaCsxXSxrPWJbaCsyXSxsPWJbaCszXTtnW2hdPWkqdGhpcy5fcmVuZGVyZXIuX3RpbnRbMF0vMjU1LGdbaCsxXT1qKnRoaXMuX3JlbmRlcmVyLl90aW50WzFdLzI1NSxnW2grMl09ayp0aGlzLl9yZW5kZXJlci5fdGludFsyXS8yNTUsZ1toKzNdPWwqdGhpcy5fcmVuZGVyZXIuX3RpbnRbM10vMjU1fXJldHVybiBkLnB1dEltYWdlRGF0YShlLDAsMCksY30sZS5wcm90b3R5cGUuaW1hZ2VNb2RlPWZ1bmN0aW9uKGEpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImltYWdlTW9kZVwiLGFyZ3VtZW50cyksYSE9PWguQ09STkVSJiZhIT09aC5DT1JORVJTJiZhIT09aC5DRU5URVJ8fCh0aGlzLl9yZW5kZXJlci5faW1hZ2VNb2RlPWEpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9oZWxwZXJzXCI6MjEsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vZmlsdGVyc1wiOjQyfV0sNDU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4vZmlsdGVyc1wiKTtkLkltYWdlPWZ1bmN0aW9uKGEsYil7dGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSx0aGlzLmNhbnZhcy53aWR0aD10aGlzLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodD10aGlzLmhlaWdodCx0aGlzLmRyYXdpbmdDb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKSx0aGlzLl9waXhlbERlbnNpdHk9MSx0aGlzLl9tb2RpZmllZD0hMSx0aGlzLl9waXhlbHNEaXJ0eT0hMCx0aGlzLnBpeGVscz1bXX0sZC5JbWFnZS5wcm90b3R5cGUuX3NldFByb3BlcnR5PWZ1bmN0aW9uKGEsYil7dGhpc1thXT1iLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5sb2FkUGl4ZWxzPWZ1bmN0aW9uKCl7ZC5SZW5kZXJlcjJELnByb3RvdHlwZS5sb2FkUGl4ZWxzLmNhbGwodGhpcyksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLnVwZGF0ZVBpeGVscz1mdW5jdGlvbihhLGIsYyxlKXtkLlJlbmRlcmVyMkQucHJvdG90eXBlLnVwZGF0ZVBpeGVscy5jYWxsKHRoaXMsYSxiLGMsZSksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gZC5SZW5kZXJlcjJELnByb3RvdHlwZS5nZXQuY2FsbCh0aGlzLGEsYixjLGUpfSxkLkltYWdlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe2QuUmVuZGVyZXIyRC5wcm90b3R5cGUuc2V0LmNhbGwodGhpcyxhLGIsYyksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihhLGIpezA9PT1hJiYwPT09Yj8oYT10aGlzLmNhbnZhcy53aWR0aCxiPXRoaXMuY2FudmFzLmhlaWdodCk6MD09PWE/YT10aGlzLmNhbnZhcy53aWR0aCpiL3RoaXMuY2FudmFzLmhlaWdodDowPT09YiYmKGI9dGhpcy5jYW52YXMuaGVpZ2h0KmEvdGhpcy5jYW52YXMud2lkdGgpLGE9TWF0aC5mbG9vcihhKSxiPU1hdGguZmxvb3IoYik7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtjLndpZHRoPWEsYy5oZWlnaHQ9YixjLmdldENvbnRleHQoXCIyZFwiKS5kcmF3SW1hZ2UodGhpcy5jYW52YXMsMCwwLHRoaXMuY2FudmFzLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodCwwLDAsYy53aWR0aCxjLmhlaWdodCksdGhpcy5jYW52YXMud2lkdGg9dGhpcy53aWR0aD1hLHRoaXMuY2FudmFzLmhlaWdodD10aGlzLmhlaWdodD1iLHRoaXMuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGMsMCwwLGEsYiwwLDAsYSxiKSx0aGlzLnBpeGVscy5sZW5ndGg+MCYmdGhpcy5sb2FkUGl4ZWxzKCksdGhpcy5zZXRNb2RpZmllZCghMCksdGhpcy5fcGl4ZWxzRGlydHk9ITB9LGQuSW1hZ2UucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZSxmLGcsaCxpLGo7aWYoOT09PWFyZ3VtZW50cy5sZW5ndGgpYT1hcmd1bWVudHNbMF0sYj1hcmd1bWVudHNbMV0sYz1hcmd1bWVudHNbMl0sZT1hcmd1bWVudHNbM10sZj1hcmd1bWVudHNbNF0sZz1hcmd1bWVudHNbNV0saD1hcmd1bWVudHNbNl0saT1hcmd1bWVudHNbN10saj1hcmd1bWVudHNbOF07ZWxzZXtpZig4IT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJTaWduYXR1cmUgbm90IHN1cHBvcnRlZFwiKTthPXRoaXMsYj1hcmd1bWVudHNbMF0sYz1hcmd1bWVudHNbMV0sZT1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10sZz1hcmd1bWVudHNbNF0saD1hcmd1bWVudHNbNV0saT1hcmd1bWVudHNbNl0saj1hcmd1bWVudHNbN119ZC5SZW5kZXJlcjJELl9jb3B5SGVscGVyKHRoaXMsYSxiLGMsZSxmLGcsaCxpLGopLHRoaXMuX3BpeGVsc0RpcnR5PSEwfSxkLkltYWdlLnByb3RvdHlwZS5tYXNrPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMpO3ZhciBiPXRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uLGM9MTthIGluc3RhbmNlb2YgZC5SZW5kZXJlciYmKGM9YS5fcEluc3QuX3BpeGVsRGVuc2l0eSk7dmFyIGU9W2EsMCwwLGMqYS53aWR0aCxjKmEuaGVpZ2h0LDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0XTt0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1cImRlc3RpbmF0aW9uLWluXCIsZC5JbWFnZS5wcm90b3R5cGUuY29weS5hcHBseSh0aGlzLGUpLHRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWIsdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbihhLGIpe2UuYXBwbHkodGhpcy5jYW52YXMsZVthLnRvTG93ZXJDYXNlKCldLGIpLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5ibGVuZD1mdW5jdGlvbigpe2QucHJvdG90eXBlLmJsZW5kLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUuc2V0TW9kaWZpZWQ9ZnVuY3Rpb24oYSl7dGhpcy5fbW9kaWZpZWQ9YX0sZC5JbWFnZS5wcm90b3R5cGUuaXNNb2RpZmllZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb2RpZmllZH0sZC5JbWFnZS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbihhLGIpe2QucHJvdG90eXBlLnNhdmVDYW52YXModGhpcy5jYW52YXMsYSxiKX0sYi5leHBvcnRzPWQuSW1hZ2V9LHtcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9maWx0ZXJzXCI6NDJ9XSw0NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi9maWx0ZXJzXCIpO2EoXCIuLi9jb2xvci9wNS5Db2xvclwiKSxkLnByb3RvdHlwZS5waXhlbHM9W10sZC5wcm90b3R5cGUuYmxlbmQ9ZnVuY3Rpb24oKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJibGVuZFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXI/dGhpcy5fcmVuZGVyZXIuYmxlbmQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTpkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJsZW5kLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvcHlcIixhcmd1bWVudHMpLGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY29weS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24oYSxiKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJmaWx0ZXJcIixhcmd1bWVudHMpLHZvaWQgMCE9PXRoaXMuY2FudmFzP2UuYXBwbHkodGhpcy5jYW52YXMsZVthLnRvTG93ZXJDYXNlKCldLGIpOmUuYXBwbHkodGhpcy5lbHQsZVthLnRvTG93ZXJDYXNlKCldLGIpfSxkLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmdldChhLGIsYyxkKX0sZC5wcm90b3R5cGUubG9hZFBpeGVscz1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRQaXhlbHNcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmxvYWRQaXhlbHMoKX0sZC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLl9yZW5kZXJlci5zZXQoYSxiLGMpfSxkLnByb3RvdHlwZS51cGRhdGVQaXhlbHM9ZnVuY3Rpb24oYSxiLGMsZSl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidXBkYXRlUGl4ZWxzXCIsYXJndW1lbnRzKSwwIT09dGhpcy5waXhlbHMubGVuZ3RoJiZ0aGlzLl9yZW5kZXJlci51cGRhdGVQaXhlbHMoYSxiLGMsZSl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb2xvci9wNS5Db2xvclwiOjE2LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL2ZpbHRlcnNcIjo0Mn1dLDQ3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3ZhciBjPXt9O2lmKHZvaWQgMD09PShiPWJ8fFtdKSlmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliW2QudG9TdHJpbmcoKV09ZDtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKyl7dmFyIGY9YltlXSxnPWFbZV07Y1tmXT1nfXJldHVybiBjfWZ1bmN0aW9uIGUoYSl7dmFyIGI9bmV3IGkuWE1MLGM9YS5jaGlsZE5vZGVzO2lmKGMmJmMubGVuZ3RoKXtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGY9ZShjW2RdKTtiLmFkZENoaWxkKGYpfWIuc2V0TmFtZShhLm5vZGVOYW1lKSxiLl9zZXRDb250KGEudGV4dENvbnRlbnQpLGIuX3NldEF0dHJpYnV0ZXMoYSk7Zm9yKHZhciBnPTA7ZzxiLmNoaWxkcmVuLmxlbmd0aDtnKyspYi5jaGlsZHJlbltnXS5wYXJlbnQ9YjtyZXR1cm4gYn1yZXR1cm4gYi5zZXROYW1lKGEubm9kZU5hbWUpLGIuX3NldENvbnQoYS50ZXh0Q29udGVudCksYi5fc2V0QXR0cmlidXRlcyhhKSxifWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEucmVwbGFjZSgvJi9nLFwiJmFtcDtcIikucmVwbGFjZSgvPC9nLFwiJmx0O1wiKS5yZXBsYWNlKC8+L2csXCImZ3Q7XCIpLnJlcGxhY2UoL1wiL2csXCImcXVvdDtcIikucmVwbGFjZSgvJy9nLFwiJiMwMzk7XCIpfWZ1bmN0aW9uIGcoYSxiKXtiJiYhMCE9PWImJlwidHJ1ZVwiIT09Ynx8KGI9XCJcIiksYXx8KGE9XCJ1bnRpdGxlZFwiKTt2YXIgYz1cIlwiO3JldHVybiBhJiZhLmluZGV4T2YoXCIuXCIpPi0xJiYoYz1hLnNwbGl0KFwiLlwiKS5wb3AoKSksYiYmYyE9PWImJihjPWIsYT1hK1wiLlwiK2MpLFthLGNdfWZ1bmN0aW9uIGgoYSl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhLnRhcmdldCl9dmFyIGk9YShcIi4uL2NvcmUvbWFpblwiKTthKFwid2hhdHdnLWZldGNoXCIpLGEoXCJlczYtcHJvbWlzZVwiKS5wb2x5ZmlsbCgpO3ZhciBqPWEoXCJmZXRjaC1qc29ucFwiKTthKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGkucHJvdG90eXBlLmxvYWRKU09OPWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZEpTT05cIixhcmd1bWVudHMpO2Zvcih2YXIgYSxiLGMsZD1hcmd1bWVudHNbMF0sZT17fSxmPVwianNvblwiLGc9MTtnPGFyZ3VtZW50cy5sZW5ndGg7ZysrKXt2YXIgaD1hcmd1bWVudHNbZ107XCJzdHJpbmdcIj09dHlwZW9mIGg/XCJqc29ucFwiIT09aCYmXCJqc29uXCIhPT1ofHwoZj1oKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBoP2E/Yj1oOmE9aDpcIm9iamVjdFwiPT10eXBlb2YgaCYmaC5oYXNPd25Qcm9wZXJ0eShcImpzb25wQ2FsbGJhY2tcIikmJihmPVwianNvbnBcIixjPWgpfXZhciBqPXRoaXM7cmV0dXJuIHRoaXMuaHR0cERvKGQsXCJHRVRcIixjLGYsZnVuY3Rpb24oYil7Zm9yKHZhciBjIGluIGIpZVtjXT1iW2NdO3ZvaWQgMCE9PWEmJmEoYiksai5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihhKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoNSxkKSwhYil0aHJvdyBhO2IoYSl9KSxlfSxpLnByb3RvdHlwZS5sb2FkU3RyaW5ncz1mdW5jdGlvbigpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRTdHJpbmdzXCIsYXJndW1lbnRzKTtmb3IodmFyIGEsYixjPVtdLGQ9MTtkPGFyZ3VtZW50cy5sZW5ndGg7ZCsrKXt2YXIgZT1hcmd1bWVudHNbZF07XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKHZvaWQgMD09PWE/YT1lOnZvaWQgMD09PWImJihiPWUpKX12YXIgZj10aGlzO3JldHVybiBpLnByb3RvdHlwZS5odHRwRG8uY2FsbCh0aGlzLGFyZ3VtZW50c1swXSxcIkdFVFwiLFwidGV4dFwiLGZ1bmN0aW9uKGIpe3ZhciBkPWIucmVwbGFjZSgvXFxyXFxuL2csXCJcXHJcIikucmVwbGFjZSgvXFxuL2csXCJcXHJcIikuc3BsaXQoL1xcci8pO0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGMsZCksdm9pZCAwIT09YSYmYShjKSxmLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGEpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcigzLGFyZ3VtZW50c1swXSksIWIpdGhyb3cgYTtiKGEpfSksY30saS5wcm90b3R5cGUubG9hZFRhYmxlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZT1bXSxmPSExLGc9YS5zdWJzdHJpbmcoYS5sYXN0SW5kZXhPZihcIi5cIikrMSxhLmxlbmd0aCksaD1cIixcIixqPSExO1widHN2XCI9PT1nJiYoaD1cIlxcdFwiKTtmb3IodmFyIGs9MTtrPGFyZ3VtZW50cy5sZW5ndGg7aysrKWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGFyZ3VtZW50c1trXSl2b2lkIDA9PT1iP2I9YXJndW1lbnRzW2tdOnZvaWQgMD09PWMmJihjPWFyZ3VtZW50c1trXSk7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYXJndW1lbnRzW2tdKWlmKGUucHVzaChhcmd1bWVudHNba10pLFwiaGVhZGVyXCI9PT1hcmd1bWVudHNba10mJihmPSEwKSxcImNzdlwiPT09YXJndW1lbnRzW2tdKXtpZihqKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzZXQgbXVsdGlwbGUgc2VwYXJhdG9yIHR5cGVzLlwiKTtoPVwiLFwiLGo9ITB9ZWxzZSBpZihcInRzdlwiPT09YXJndW1lbnRzW2tdKXtpZihqKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzZXQgbXVsdGlwbGUgc2VwYXJhdG9yIHR5cGVzLlwiKTtoPVwiXFx0XCIsaj0hMH12YXIgbD1uZXcgaS5UYWJsZSxtPXRoaXM7cmV0dXJuIHRoaXMuaHR0cERvKGEsXCJHRVRcIixcInRhYmxlXCIsZnVuY3Rpb24oYSl7Zm9yKHZhciBjLGU9e30sZz0wLGo9MSxuPTIsbz00LHA9J1wiJyxxPVwiXFxyXCIscj1cIlxcblwiLHM9W10sdD0wLHU9bnVsbCx2PWZ1bmN0aW9uKCl7ZS5jdXJyZW50U3RhdGU9ZyxlLnRva2VuPVwiXCJ9LHc9ZnVuY3Rpb24oKXt1LnB1c2goZS50b2tlbiksdigpfSx4PWZ1bmN0aW9uKCl7ZS5lc2NhcGVkPSExLHU9W10sdigpfSx5PWZ1bmN0aW9uKCl7ZS5jdXJyZW50U3RhdGU9byxzLnB1c2godSksdT1udWxsfTs7KXtpZihudWxsPT0oYz1hW3QrK10pKXtpZihlLmVzY2FwZWQpdGhyb3cgbmV3IEVycm9yKFwiVW5jbG9zZWQgcXVvdGUgaW4gZmlsZS5cIik7aWYodSl7dygpLHkoKTticmVha319aWYobnVsbD09PXUmJngoKSxlLmN1cnJlbnRTdGF0ZT09PWcpe2lmKGM9PT1wKXtlLmVzY2FwZWQ9ITAsZS5jdXJyZW50U3RhdGU9ajtjb250aW51ZX1lLmN1cnJlbnRTdGF0ZT1qfWlmKGUuY3VycmVudFN0YXRlPT09aiYmZS5lc2NhcGVkKWlmKGM9PT1wKWFbdF09PT1wPyhlLnRva2VuKz1wLHQrKyk6KGUuZXNjYXBlZD0hMSxlLmN1cnJlbnRTdGF0ZT1uKTtlbHNle2lmKGM9PT1xKWNvbnRpbnVlO2UudG9rZW4rPWN9ZWxzZSBjPT09cT8oYVt0XT09PXImJnQrKyx3KCkseSgpKTpjPT09cj8odygpLHkoKSk6Yz09PWg/dygpOmUuY3VycmVudFN0YXRlPT09aiYmKGUudG9rZW4rPWMpfWlmKGYpbC5jb2x1bW5zPXMuc2hpZnQoKTtlbHNlIGZvcihrPTA7azxzWzBdLmxlbmd0aDtrKyspbC5jb2x1bW5zW2tdPVwibnVsbFwiO3ZhciB6O2ZvcihrPTA7azxzLmxlbmd0aDtrKyspKDEhPT1zW2tdLmxlbmd0aHx8XCJ1bmRlZmluZWRcIiE9PXNba11bMF0mJlwiXCIhPT1zW2tdWzBdKSYmKHo9bmV3IGkuVGFibGVSb3csei5hcnI9c1trXSx6Lm9iaj1kKHNba10sbC5jb2x1bW5zKSxsLmFkZFJvdyh6KSk7XCJmdW5jdGlvblwiPT10eXBlb2YgYiYmYihsKSxtLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGIpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcigyLGEpLCFjKXRocm93IGI7YyhiKX0pLGx9LGkucHJvdG90eXBlLmxvYWRYTUw9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYixjPXt9LGQ9MTtkPGFyZ3VtZW50cy5sZW5ndGg7ZCsrKXt2YXIgZT1hcmd1bWVudHNbZF07XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKHZvaWQgMD09PWE/YT1lOnZvaWQgMD09PWImJihiPWUpKX12YXIgZj10aGlzO3JldHVybiB0aGlzLmh0dHBEbyhhcmd1bWVudHNbMF0sXCJHRVRcIixcInhtbFwiLGZ1bmN0aW9uKGIpe2Zvcih2YXIgZCBpbiBiKWNbZF09YltkXTt2b2lkIDAhPT1hJiZhKGMpLGYuX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYSl7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDEsYXJndW1lbnRzWzBdKSwhYil0aHJvdyBhO2IoYSl9KSxjfSxpLnByb3RvdHlwZS5sb2FkQnl0ZXM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9LGU9dGhpcztyZXR1cm4gdGhpcy5odHRwRG8oYSxcIkdFVFwiLFwiYXJyYXlCdWZmZXJcIixmdW5jdGlvbihhKXtkLmJ5dGVzPW5ldyBVaW50OEFycmF5KGEpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGImJmIoZCksZS5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihiKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoNixhKSwhYyl0aHJvdyBiO2MoYil9KSxkfSxpLnByb3RvdHlwZS5odHRwR2V0PWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaHR0cEdldFwiLGFyZ3VtZW50cyk7dmFyIGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gYS5zcGxpY2UoMSwwLFwiR0VUXCIpLGkucHJvdG90eXBlLmh0dHBEby5hcHBseSh0aGlzLGEpfSxpLnByb3RvdHlwZS5odHRwUG9zdD1mdW5jdGlvbigpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImh0dHBQb3N0XCIsYXJndW1lbnRzKTt2YXIgYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBhLnNwbGljZSgxLDAsXCJQT1NUXCIpLGkucHJvdG90eXBlLmh0dHBEby5hcHBseSh0aGlzLGEpfSxpLnByb3RvdHlwZS5odHRwRG89ZnVuY3Rpb24oKXtmb3IodmFyIGEsYixjLGQsZixnPXt9LGg9MCxrPVwidGV4dC9wbGFpblwiLGw9YXJndW1lbnRzLmxlbmd0aC0xO2w+MCYmXCJmdW5jdGlvblwiPT10eXBlb2YgYXJndW1lbnRzW2xdO2wtLSloKys7dmFyIG09YXJndW1lbnRzLmxlbmd0aC1oLG49YXJndW1lbnRzWzBdO2lmKDI9PT1tJiZcInN0cmluZ1wiPT10eXBlb2YgbiYmXCJvYmplY3RcIj09dHlwZW9mIGFyZ3VtZW50c1sxXSlkPW5ldyBSZXF1ZXN0KG4sYXJndW1lbnRzWzFdKSxiPWFyZ3VtZW50c1syXSxjPWFyZ3VtZW50c1szXTtlbHNle2Zvcih2YXIgbyxwPVwiR0VUXCIscT0xO3E8YXJndW1lbnRzLmxlbmd0aDtxKyspe3ZhciByPWFyZ3VtZW50c1txXTtpZihcInN0cmluZ1wiPT10eXBlb2YgcilcIkdFVFwiPT09cnx8XCJQT1NUXCI9PT1yfHxcIlBVVFwiPT09cnx8XCJERUxFVEVcIj09PXI/cD1yOlwianNvblwiPT09cnx8XCJqc29ucFwiPT09cnx8XCJiaW5hcnlcIj09PXJ8fFwiYXJyYXlCdWZmZXJcIj09PXJ8fFwieG1sXCI9PT1yfHxcInRleHRcIj09PXJ8fFwidGFibGVcIj09PXI/YT1yOm89cjtlbHNlIGlmKFwibnVtYmVyXCI9PXR5cGVvZiByKW89ci50b1N0cmluZygpO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIHIpaWYoci5oYXNPd25Qcm9wZXJ0eShcImpzb25wQ2FsbGJhY2tcIikpZm9yKHZhciBzIGluIHIpZ1tzXT1yW3NdO2Vsc2Ugbz1KU09OLnN0cmluZ2lmeShyKSxrPVwiYXBwbGljYXRpb24vanNvblwiO2Vsc2VcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiYoYj9jPXI6Yj1yKX1kPW5ldyBSZXF1ZXN0KG4se21ldGhvZDpwLG1vZGU6XCJjb3JzXCIsYm9keTpvLGhlYWRlcnM6bmV3IEhlYWRlcnMoe1wiQ29udGVudC1UeXBlXCI6a30pfSl9cmV0dXJuIGF8fChhPS0xIT09bi5pbmRleE9mKFwianNvblwiKT9cImpzb25cIjotMSE9PW4uaW5kZXhPZihcInhtbFwiKT9cInhtbFwiOlwidGV4dFwiKSxmPVwianNvbnBcIj09PWE/aihuLGcpOmZldGNoKGQpLGY9Zi50aGVuKGZ1bmN0aW9uKGIpe2lmKCFiLm9rKXt2YXIgYz1uZXcgRXJyb3IoYi5ib2R5KTt0aHJvdyBjLnN0YXR1cz1iLnN0YXR1cyxjLm9rPSExLGN9dmFyIGQ9Yi5oZWFkZXJzLmdldChcImNvbnRlbnQtbGVuZ3RoXCIpO3N3aXRjaChkJiZkPjY0ZTYmJmkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig3LG4pLGEpe2Nhc2VcImpzb25cIjpjYXNlXCJqc29ucFwiOnJldHVybiBiLmpzb24oKTtjYXNlXCJiaW5hcnlcIjpyZXR1cm4gYi5ibG9iKCk7Y2FzZVwiYXJyYXlCdWZmZXJcIjpyZXR1cm4gYi5hcnJheUJ1ZmZlcigpO2Nhc2VcInhtbFwiOnJldHVybiBiLnRleHQoKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBlKChuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYSxcInRleHQveG1sXCIpLmRvY3VtZW50RWxlbWVudCl9KTtkZWZhdWx0OnJldHVybiBiLnRleHQoKX19KSxmLnRoZW4oYnx8ZnVuY3Rpb24oKXt9KSxmLmNhdGNoKGN8fGNvbnNvbGUuZXJyb3IpLGZ9LHdpbmRvdy5VUkw9d2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTCxpLnByb3RvdHlwZS5fcFdyaXRlcnM9W10saS5wcm90b3R5cGUuY3JlYXRlV3JpdGVyPWZ1bmN0aW9uKGEsYil7dmFyIGM7Zm9yKHZhciBkIGluIGkucHJvdG90eXBlLl9wV3JpdGVycylpZihpLnByb3RvdHlwZS5fcFdyaXRlcnNbZF0ubmFtZT09PWEpcmV0dXJuIGM9bmV3IGkuUHJpbnRXcml0ZXIoYSt0aGlzLm1pbGxpcygpLGIpLGkucHJvdG90eXBlLl9wV3JpdGVycy5wdXNoKGMpLGM7cmV0dXJuIGM9bmV3IGkuUHJpbnRXcml0ZXIoYSxiKSxpLnByb3RvdHlwZS5fcFdyaXRlcnMucHVzaChjKSxjfSxpLlByaW50V3JpdGVyPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpczt0aGlzLm5hbWU9YSx0aGlzLmNvbnRlbnQ9XCJcIix0aGlzLndyaXRlPWZ1bmN0aW9uKGEpe3RoaXMuY29udGVudCs9YX0sdGhpcy5wcmludD1mdW5jdGlvbihhKXt0aGlzLmNvbnRlbnQrPWErXCJcXG5cIn0sdGhpcy5jbGVhcj1mdW5jdGlvbigpe3RoaXMuY29udGVudD1cIlwifSx0aGlzLmNsb3NlPWZ1bmN0aW9uKCl7dmFyIGQ9W107ZC5wdXNoKHRoaXMuY29udGVudCksaS5wcm90b3R5cGUud3JpdGVGaWxlKGQsYSxiKTtmb3IodmFyIGUgaW4gaS5wcm90b3R5cGUuX3BXcml0ZXJzKWkucHJvdG90eXBlLl9wV3JpdGVyc1tlXS5uYW1lPT09dGhpcy5uYW1lJiZpLnByb3RvdHlwZS5fcFdyaXRlcnMuc3BsaWNlKGUsMSk7Yy5jbGVhcigpLGM9e319fSxpLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hcmd1bWVudHMsZT10aGlzLl9jdXJFbGVtZW50LmVsdDtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIHZvaWQgaS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhlKTtpZihkWzBdaW5zdGFuY2VvZiBpLlJlbmRlcmVyfHxkWzBdaW5zdGFuY2VvZiBpLkdyYXBoaWNzKXJldHVybiB2b2lkIGkucHJvdG90eXBlLnNhdmVDYW52YXMoZFswXS5lbHQsZFsxXSxkWzJdKTtpZigxPT09ZC5sZW5ndGgmJlwic3RyaW5nXCI9PXR5cGVvZiBkWzBdKWkucHJvdG90eXBlLnNhdmVDYW52YXMoZSxkWzBdKTtlbHNle3N3aXRjaChnKGRbMV0sZFsyXSlbMV0pe2Nhc2VcImpzb25cIjpyZXR1cm4gdm9pZCBpLnByb3RvdHlwZS5zYXZlSlNPTihkWzBdLGRbMV0sZFsyXSk7Y2FzZVwidHh0XCI6cmV0dXJuIHZvaWQgaS5wcm90b3R5cGUuc2F2ZVN0cmluZ3MoZFswXSxkWzFdLGRbMl0pO2RlZmF1bHQ6ZFswXWluc3RhbmNlb2YgQXJyYXk/aS5wcm90b3R5cGUuc2F2ZVN0cmluZ3MoZFswXSxkWzFdLGRbMl0pOmRbMF1pbnN0YW5jZW9mIGkuVGFibGU/aS5wcm90b3R5cGUuc2F2ZVRhYmxlKGRbMF0sZFsxXSxkWzJdKTpkWzBdaW5zdGFuY2VvZiBpLkltYWdlP2kucHJvdG90eXBlLnNhdmVDYW52YXMoZFswXS5jYW52YXMsZFsxXSk6ZFswXWluc3RhbmNlb2YgaS5Tb3VuZEZpbGUmJmkucHJvdG90eXBlLnNhdmVTb3VuZChkWzBdLGRbMV0sZFsyXSxkWzNdKX19fSxpLnByb3RvdHlwZS5zYXZlSlNPTj1mdW5jdGlvbihhLGIsYyl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZUpTT05cIixhcmd1bWVudHMpO3ZhciBkO2Q9Yz9KU09OLnN0cmluZ2lmeShhKTpKU09OLnN0cmluZ2lmeShhLHZvaWQgMCwyKSx0aGlzLnNhdmVTdHJpbmdzKGQuc3BsaXQoXCJcXG5cIiksYixcImpzb25cIil9LGkucHJvdG90eXBlLnNhdmVKU09OT2JqZWN0PWkucHJvdG90eXBlLnNhdmVKU09OLGkucHJvdG90eXBlLnNhdmVKU09OQXJyYXk9aS5wcm90b3R5cGUuc2F2ZUpTT04saS5wcm90b3R5cGUuc2F2ZVN0cmluZ3M9ZnVuY3Rpb24oYSxiLGMpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVTdHJpbmdzXCIsYXJndW1lbnRzKTtmb3IodmFyIGQ9Y3x8XCJ0eHRcIixlPXRoaXMuY3JlYXRlV3JpdGVyKGIsZCksZj0wO2Y8YS5sZW5ndGg7ZisrKWEubGVuZ3RoLGUucHJpbnQoYVtmXSk7ZS5jbG9zZSgpLGUuY2xlYXIoKX0saS5wcm90b3R5cGUuc2F2ZVRhYmxlPWZ1bmN0aW9uKGEsYixjKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlVGFibGVcIixhcmd1bWVudHMpO3ZhciBkO2Q9dm9pZCAwPT09Yz9iLnN1YnN0cmluZyhiLmxhc3RJbmRleE9mKFwiLlwiKSsxLGIubGVuZ3RoKTpjO3ZhciBlPXRoaXMuY3JlYXRlV3JpdGVyKGIsZCksZz1hLmNvbHVtbnMsaD1cIixcIjtpZihcInRzdlwiPT09ZCYmKGg9XCJcXHRcIiksXCJodG1sXCIhPT1kKXtpZihcIjBcIiE9PWdbMF0pe2Zvcih2YXIgaj0wO2o8Zy5sZW5ndGg7aisrKWo8Zy5sZW5ndGgtMT9lLndyaXRlKGdbal0raCk6ZS53cml0ZShnW2pdKTtlLndyaXRlKFwiXFxuXCIpfWZvcih2YXIgaz0wO2s8YS5yb3dzLmxlbmd0aDtrKyspe3ZhciBsO2ZvcihsPTA7bDxhLnJvd3Nba10uYXJyLmxlbmd0aDtsKyspbDxhLnJvd3Nba10uYXJyLmxlbmd0aC0xP2Uud3JpdGUoYS5yb3dzW2tdLmFycltsXStoKTooYS5yb3dzLmxlbmd0aCxlLndyaXRlKGEucm93c1trXS5hcnJbbF0pKTtlLndyaXRlKFwiXFxuXCIpfX1lbHNle2UucHJpbnQoXCI8aHRtbD5cIiksZS5wcmludChcIjxoZWFkPlwiKTt2YXIgbT0nICA8bWV0YSBodHRwLWVxdWl2PVwiY29udGVudC10eXBlXCIgY29udGVudCc7aWYobSs9Jz1cInRleHQvaHRtbDtjaGFyc2V0PXV0Zi04XCIgLz4nLGUucHJpbnQobSksZS5wcmludChcIjwvaGVhZD5cIiksZS5wcmludChcIjxib2R5PlwiKSxlLnByaW50KFwiICA8dGFibGU+XCIpLFwiMFwiIT09Z1swXSl7ZS5wcmludChcIiAgICA8dHI+XCIpO2Zvcih2YXIgbj0wO248Zy5sZW5ndGg7bisrKXt2YXIgbz1mKGdbbl0pO2UucHJpbnQoXCIgICAgICA8dGQ+XCIrbyksZS5wcmludChcIiAgICAgIDwvdGQ+XCIpfWUucHJpbnQoXCIgICAgPC90cj5cIil9Zm9yKHZhciBwPTA7cDxhLnJvd3MubGVuZ3RoO3ArKyl7ZS5wcmludChcIiAgICA8dHI+XCIpO2Zvcih2YXIgcT0wO3E8YS5jb2x1bW5zLmxlbmd0aDtxKyspe3ZhciByPWEucm93c1twXS5nZXRTdHJpbmcocSkscz1mKHIpO2UucHJpbnQoXCIgICAgICA8dGQ+XCIrcyksZS5wcmludChcIiAgICAgIDwvdGQ+XCIpfWUucHJpbnQoXCIgICAgPC90cj5cIil9ZS5wcmludChcIiAgPC90YWJsZT5cIiksZS5wcmludChcIjwvYm9keT5cIiksZS5wcmludChcIjwvaHRtbD5cIil9ZS5jbG9zZSgpLGUuY2xlYXIoKX0saS5wcm90b3R5cGUud3JpdGVGaWxlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1cImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO2kucHJvdG90eXBlLl9pc1NhZmFyaSgpJiYoZD1cInRleHQvcGxhaW5cIik7dmFyIGU9bmV3IEJsb2IoYSx7dHlwZTpkfSk7aS5wcm90b3R5cGUuZG93bmxvYWRGaWxlKGUsYixjKX0saS5wcm90b3R5cGUuZG93bmxvYWRGaWxlPWZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1nKGMsZCksZj1lWzBdO2lmKGIgaW5zdGFuY2VvZiBCbG9iKXtyZXR1cm4gdm9pZCBhKFwiZmlsZS1zYXZlclwiKS5zYXZlQXMoYixmKX12YXIgaj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtpZihqLmhyZWY9YixqLmRvd25sb2FkPWYsai5vbmNsaWNrPWZ1bmN0aW9uKGEpe2goYSksYS5zdG9wUHJvcGFnYXRpb24oKX0sai5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaiksaS5wcm90b3R5cGUuX2lzU2FmYXJpKCkpe3ZhciBrPVwiSGVsbG8sIFNhZmFyaSB1c2VyISBUbyBkb3dubG9hZCB0aGlzIGZpbGUuLi5cXG5cIjtrKz1cIjEuIEdvIHRvIEZpbGUgLS1cXHgzZSBTYXZlIEFzLlxcblwiLGsrPScyLiBDaG9vc2UgXCJQYWdlIFNvdXJjZVwiIGFzIHRoZSBGb3JtYXQuXFxuJyxrKz0nMy4gTmFtZSBpdCB3aXRoIHRoaXMgZXh0ZW5zaW9uOiAuXCInK2VbMV0rJ1wiJyxhbGVydChrKX1qLmNsaWNrKCl9LGkucHJvdG90eXBlLl9jaGVja0ZpbGVFeHRlbnNpb249ZyxpLnByb3RvdHlwZS5faXNTYWZhcmk9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5IVE1MRWxlbWVudCkuaW5kZXhPZihcIkNvbnN0cnVjdG9yXCIpPjB9LGIuZXhwb3J0cz1pfSx7XCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiZXM2LXByb21pc2VcIjo0LFwiZmV0Y2gtanNvbnBcIjo1LFwiZmlsZS1zYXZlclwiOjYsXCJ3aGF0d2ctZmV0Y2hcIjoxMn1dLDQ4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlRhYmxlPWZ1bmN0aW9uKGEpe3RoaXMuY29sdW1ucz1bXSx0aGlzLnJvd3M9W119LGQuVGFibGUucHJvdG90eXBlLmFkZFJvdz1mdW5jdGlvbihhKXt2YXIgYj1hfHxuZXcgZC5UYWJsZVJvdztpZih2b2lkIDA9PT1iLmFycnx8dm9pZCAwPT09Yi5vYmopdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBUYWJsZVJvdzogXCIrYik7cmV0dXJuIGIudGFibGU9dGhpcyx0aGlzLnJvd3MucHVzaChiKSxifSxkLlRhYmxlLnByb3RvdHlwZS5yZW1vdmVSb3c9ZnVuY3Rpb24oYSl7dGhpcy5yb3dzW2FdLnRhYmxlPW51bGw7dmFyIGI9dGhpcy5yb3dzLnNwbGljZShhKzEsdGhpcy5yb3dzLmxlbmd0aCk7dGhpcy5yb3dzLnBvcCgpLHRoaXMucm93cz10aGlzLnJvd3MuY29uY2F0KGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRSb3c9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm93c1thXX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0Um93cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvd3N9LGQuVGFibGUucHJvdG90eXBlLmZpbmRSb3c9ZnVuY3Rpb24oYSxiKXtpZihcInN0cmluZ1wiPT10eXBlb2YgYil7Zm9yKHZhciBjPTA7Yzx0aGlzLnJvd3MubGVuZ3RoO2MrKylpZih0aGlzLnJvd3NbY10ub2JqW2JdPT09YSlyZXR1cm4gdGhpcy5yb3dzW2NdfWVsc2UgZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKylpZih0aGlzLnJvd3NbZF0uYXJyW2JdPT09YSlyZXR1cm4gdGhpcy5yb3dzW2RdO3JldHVybiBudWxsfSxkLlRhYmxlLnByb3RvdHlwZS5maW5kUm93cz1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiKWZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspdGhpcy5yb3dzW2RdLm9ialtiXT09PWEmJmMucHVzaCh0aGlzLnJvd3NbZF0pO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLnJvd3MubGVuZ3RoO2UrKyl0aGlzLnJvd3NbZV0uYXJyW2JdPT09YSYmYy5wdXNoKHRoaXMucm93c1tlXSk7cmV0dXJuIGN9LGQuVGFibGUucHJvdG90eXBlLm1hdGNoUm93PWZ1bmN0aW9uKGEsYil7aWYoXCJudW1iZXJcIj09dHlwZW9mIGIpe2Zvcih2YXIgYz0wO2M8dGhpcy5yb3dzLmxlbmd0aDtjKyspaWYodGhpcy5yb3dzW2NdLmFycltiXS5tYXRjaChhKSlyZXR1cm4gdGhpcy5yb3dzW2NdfWVsc2UgZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKylpZih0aGlzLnJvd3NbZF0ub2JqW2JdLm1hdGNoKGEpKXJldHVybiB0aGlzLnJvd3NbZF07cmV0dXJuIG51bGx9LGQuVGFibGUucHJvdG90eXBlLm1hdGNoUm93cz1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBiKWZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspdGhpcy5yb3dzW2RdLmFycltiXS5tYXRjaChhKSYmYy5wdXNoKHRoaXMucm93c1tkXSk7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMucm93cy5sZW5ndGg7ZSsrKXRoaXMucm93c1tlXS5vYmpbYl0ubWF0Y2goYSkmJmMucHVzaCh0aGlzLnJvd3NbZV0pO3JldHVybiBjfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRDb2x1bW49ZnVuY3Rpb24oYSl7dmFyIGI9W107aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpZm9yKHZhciBjPTA7Yzx0aGlzLnJvd3MubGVuZ3RoO2MrKyliLnB1c2godGhpcy5yb3dzW2NdLm9ialthXSk7ZWxzZSBmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKWIucHVzaCh0aGlzLnJvd3NbZF0uYXJyW2FdKTtyZXR1cm4gYn0sZC5UYWJsZS5wcm90b3R5cGUuY2xlYXJSb3dzPWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMucm93cyx0aGlzLnJvd3M9W119LGQuVGFibGUucHJvdG90eXBlLmFkZENvbHVtbj1mdW5jdGlvbihhKXt2YXIgYj1hfHxudWxsO3RoaXMuY29sdW1ucy5wdXNoKGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRDb2x1bW5Db3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbHVtbnMubGVuZ3RofSxkLlRhYmxlLnByb3RvdHlwZS5nZXRSb3dDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvd3MubGVuZ3RofSxkLlRhYmxlLnByb3RvdHlwZS5yZW1vdmVUb2tlbnM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLFwiXFxcXCQmXCIpfSxkPVtdLGU9MDtlPGEubGVuZ3RoO2UrKylkLnB1c2goYyhhLmNoYXJBdChlKSkpO3ZhciBmPW5ldyBSZWdFeHAoZC5qb2luKFwifFwiKSxcImdcIik7aWYodm9pZCAwPT09Yilmb3IodmFyIGc9MDtnPHRoaXMuY29sdW1ucy5sZW5ndGg7ZysrKWZvcih2YXIgaD0wO2g8dGhpcy5yb3dzLmxlbmd0aDtoKyspe3ZhciBpPXRoaXMucm93c1toXS5hcnJbZ107aT1pLnJlcGxhY2UoZixcIlwiKSx0aGlzLnJvd3NbaF0uYXJyW2ddPWksdGhpcy5yb3dzW2hdLm9ialt0aGlzLmNvbHVtbnNbZ11dPWl9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYilmb3IodmFyIGo9MDtqPHRoaXMucm93cy5sZW5ndGg7aisrKXt2YXIgaz10aGlzLnJvd3Nbal0ub2JqW2JdO2s9ay5yZXBsYWNlKGYsXCJcIiksdGhpcy5yb3dzW2pdLm9ialtiXT1rO3ZhciBsPXRoaXMuY29sdW1ucy5pbmRleE9mKGIpO3RoaXMucm93c1tqXS5hcnJbbF09a31lbHNlIGZvcih2YXIgbT0wO208dGhpcy5yb3dzLmxlbmd0aDttKyspe3ZhciBuPXRoaXMucm93c1ttXS5hcnJbYl07bj1uLnJlcGxhY2UoZixcIlwiKSx0aGlzLnJvd3NbbV0uYXJyW2JdPW4sdGhpcy5yb3dzW21dLm9ialt0aGlzLmNvbHVtbnNbYl1dPW59fSxkLlRhYmxlLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBSZWdFeHAoXCIgXCIsXCJnXCIpO2lmKHZvaWQgMD09PWEpZm9yKHZhciBjPTA7Yzx0aGlzLmNvbHVtbnMubGVuZ3RoO2MrKylmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKXt2YXIgZT10aGlzLnJvd3NbZF0uYXJyW2NdO2U9ZS5yZXBsYWNlKGIsXCJcIiksdGhpcy5yb3dzW2RdLmFycltjXT1lLHRoaXMucm93c1tkXS5vYmpbdGhpcy5jb2x1bW5zW2NdXT1lfWVsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpZm9yKHZhciBmPTA7Zjx0aGlzLnJvd3MubGVuZ3RoO2YrKyl7dmFyIGc9dGhpcy5yb3dzW2ZdLm9ialthXTtnPWcucmVwbGFjZShiLFwiXCIpLHRoaXMucm93c1tmXS5vYmpbYV09Zzt2YXIgaD10aGlzLmNvbHVtbnMuaW5kZXhPZihhKTt0aGlzLnJvd3NbZl0uYXJyW2hdPWd9ZWxzZSBmb3IodmFyIGk9MDtpPHRoaXMucm93cy5sZW5ndGg7aSsrKXt2YXIgaj10aGlzLnJvd3NbaV0uYXJyW2FdO2o9ai5yZXBsYWNlKGIsXCJcIiksdGhpcy5yb3dzW2ldLmFyclthXT1qLHRoaXMucm93c1tpXS5vYmpbdGhpcy5jb2x1bW5zW2FdXT1qfX0sZC5UYWJsZS5wcm90b3R5cGUucmVtb3ZlQ29sdW1uPWZ1bmN0aW9uKGEpe3ZhciBiLGM7XCJzdHJpbmdcIj09dHlwZW9mIGE/KGI9YSxjPXRoaXMuY29sdW1ucy5pbmRleE9mKGEpKTooYz1hLGI9dGhpcy5jb2x1bW5zW2FdKTt2YXIgZD10aGlzLmNvbHVtbnMuc3BsaWNlKGMrMSx0aGlzLmNvbHVtbnMubGVuZ3RoKTt0aGlzLmNvbHVtbnMucG9wKCksdGhpcy5jb2x1bW5zPXRoaXMuY29sdW1ucy5jb25jYXQoZCk7Zm9yKHZhciBlPTA7ZTx0aGlzLnJvd3MubGVuZ3RoO2UrKyl7dmFyIGY9dGhpcy5yb3dzW2VdLmFycixnPWYuc3BsaWNlKGMrMSxmLmxlbmd0aCk7Zi5wb3AoKSx0aGlzLnJvd3NbZV0uYXJyPWYuY29uY2F0KGcpLGRlbGV0ZSB0aGlzLnJvd3NbZV0ub2JqW2JdfX0sZC5UYWJsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLnJvd3NbYV0uc2V0KGIsYyl9LGQuVGFibGUucHJvdG90eXBlLnNldE51bT1mdW5jdGlvbihhLGIsYyl7dGhpcy5yb3dzW2FdLnNldE51bShiLGMpfSxkLlRhYmxlLnByb3RvdHlwZS5zZXRTdHJpbmc9ZnVuY3Rpb24oYSxiLGMpe3RoaXMucm93c1thXS5zZXRTdHJpbmcoYixjKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucm93c1thXS5nZXQoYil9LGQuVGFibGUucHJvdG90eXBlLmdldE51bT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnJvd3NbYV0uZ2V0TnVtKGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5yb3dzW2FdLmdldFN0cmluZyhiKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0T2JqZWN0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQ9e30sZT0wO2U8dGhpcy5yb3dzLmxlbmd0aDtlKyspaWYoYj10aGlzLnJvd3NbZV0ub2JqLFwic3RyaW5nXCI9PXR5cGVvZiBhKXtpZighKHRoaXMuY29sdW1ucy5pbmRleE9mKGEpPj0wKSl0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgdGFibGUgaGFzIG5vIGNvbHVtbiBuYW1lZCBcIicrYSsnXCInKTtjPWJbYV0sZFtjXT1ifWVsc2UgZFtlXT10aGlzLnJvd3NbZV0ub2JqO3JldHVybiBkfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRBcnJheT1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPTA7Yjx0aGlzLnJvd3MubGVuZ3RoO2IrKylhLnB1c2godGhpcy5yb3dzW2JdLmFycik7cmV0dXJuIGF9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQ5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlRhYmxlUm93PWZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZD17fTthJiYoYj1ifHxcIixcIixjPWEuc3BsaXQoYikpO2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZj1lLGc9Y1tlXTtkW2ZdPWd9dGhpcy5hcnI9Yyx0aGlzLm9iaj1kLHRoaXMudGFibGU9bnVsbH0sZC5UYWJsZVJvdy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpe3ZhciBjPXRoaXMudGFibGUuY29sdW1ucy5pbmRleE9mKGEpO2lmKCEoYz49MCkpdGhyb3cgbmV3IEVycm9yKCdUaGlzIHRhYmxlIGhhcyBubyBjb2x1bW4gbmFtZWQgXCInK2ErJ1wiJyk7dGhpcy5vYmpbYV09Yix0aGlzLmFycltjXT1ifWVsc2V7aWYoIShhPHRoaXMudGFibGUuY29sdW1ucy5sZW5ndGgpKXRocm93IG5ldyBFcnJvcihcIkNvbHVtbiAjXCIrYStcIiBpcyBvdXQgb2YgdGhlIHJhbmdlIG9mIHRoaXMgdGFibGVcIik7dGhpcy5hcnJbYV09Yjt2YXIgZD10aGlzLnRhYmxlLmNvbHVtbnNbYV07dGhpcy5vYmpbZF09Yn19LGQuVGFibGVSb3cucHJvdG90eXBlLnNldE51bT1mdW5jdGlvbihhLGIpe3ZhciBjPXBhcnNlRmxvYXQoYik7dGhpcy5zZXQoYSxjKX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuc2V0U3RyaW5nPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi50b1N0cmluZygpO3RoaXMuc2V0KGEsYyl9LGQuVGFibGVSb3cucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYT90aGlzLm9ialthXTp0aGlzLmFyclthXX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuZ2V0TnVtPWZ1bmN0aW9uKGEpe3ZhciBiO2lmKGI9XCJzdHJpbmdcIj09dHlwZW9mIGE/cGFyc2VGbG9hdCh0aGlzLm9ialthXSk6cGFyc2VGbG9hdCh0aGlzLmFyclthXSksXCJOYU5cIj09PWIudG9TdHJpbmcoKSl0aHJvd1wiRXJyb3I6IFwiK3RoaXMub2JqW2FdK1wiIGlzIE5hTiAoTm90IGEgTnVtYmVyKVwiO3JldHVybiBifSxkLlRhYmxlUm93LnByb3RvdHlwZS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGE/dGhpcy5vYmpbYV0udG9TdHJpbmcoKTp0aGlzLmFyclthXS50b1N0cmluZygpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1MDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5YTUw9ZnVuY3Rpb24oKXt0aGlzLm5hbWU9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY29udGVudD1udWxsfSxkLlhNTC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSxkLlhNTC5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9LGQuWE1MLnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKGEpe3RoaXMubmFtZT1hfSxkLlhNTC5wcm90b3R5cGUuaGFzQ2hpbGRyZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg+MH0sZC5YTUwucHJvdG90eXBlLmxpc3RDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5uYW1lfSl9LGQuWE1MLnByb3RvdHlwZS5nZXRDaGlsZHJlbj1mdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4gYi5uYW1lPT09YX0pOnRoaXMuY2hpbGRyZW59LGQuWE1MLnByb3RvdHlwZS5nZXRDaGlsZD1mdW5jdGlvbihhKXtpZihcInN0cmluZ1wiIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5jaGlsZHJlblthXTtmb3IodmFyIGI9MDtiPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5jaGlsZHJlbltiXTtpZihjLm5hbWU9PT1hKXJldHVybiBjfX0sZC5YTUwucHJvdG90eXBlLmFkZENoaWxkPWZ1bmN0aW9uKGEpe2EgaW5zdGFuY2VvZiBkLlhNTCYmdGhpcy5jaGlsZHJlbi5wdXNoKGEpfSxkLlhNTC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oYSl7dmFyIGI9LTE7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpe2Zvcih2YXIgYz0wO2M8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YysrKWlmKHRoaXMuY2hpbGRyZW5bY10ubmFtZT09PWEpe2I9YzticmVha319ZWxzZSBiPWE7LTEhPT1iJiZ0aGlzLmNoaWxkcmVuLnNwbGljZShiLDEpfSxkLlhNTC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKS5sZW5ndGh9LGQuWE1MLnByb3RvdHlwZS5saXN0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpfSxkLlhNTC5wcm90b3R5cGUuaGFzQXR0cmlidXRlPWZ1bmN0aW9uKGEpe3JldHVybiEhdGhpcy5hdHRyaWJ1dGVzW2FdfSxkLlhNTC5wcm90b3R5cGUuZ2V0TnVtPWZ1bmN0aW9uKGEsYil7cmV0dXJuIE51bWJlcih0aGlzLmF0dHJpYnV0ZXNbYV0pfHxifHwwfSxkLlhNTC5wcm90b3R5cGUuZ2V0U3RyaW5nPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFN0cmluZyh0aGlzLmF0dHJpYnV0ZXNbYV0pfHxifHxudWxsfSxkLlhNTC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKGEsYil7dGhpcy5hdHRyaWJ1dGVzW2FdJiYodGhpcy5hdHRyaWJ1dGVzW2FdPWIpfSxkLlhNTC5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jb250ZW50fHxhfHxudWxsfSxkLlhNTC5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbihhKXt0aGlzLmNoaWxkcmVuLmxlbmd0aHx8KHRoaXMuY29udGVudD1hKX0sZC5YTUwucHJvdG90eXBlLl9zZXRDb250PWZ1bmN0aW9uKGEpe3ZhciBiO2I9YSxiPWIucmVwbGFjZSgvXFxzXFxzKy9nLFwiLFwiKSx0aGlzLmNvbnRlbnQ9Yn0sZC5YTUwucHJvdG90eXBlLl9zZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9YS5hdHRyaWJ1dGVzO2lmKGMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07YltlLm5vZGVOYW1lXT1lLm5vZGVWYWx1ZX10aGlzLmF0dHJpYnV0ZXM9Yn0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBNYXRoLmh5cG90KXJldHVybiBNYXRoLmh5cG90LmFwcGx5KG51bGwsYXJndW1lbnRzKTtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxlPVtdLGY9MCxnPTA7ZzxkO2crKyl7dmFyIGg9YXJndW1lbnRzW2ddXG47aWYoKGg9K2gpPT09MS8wfHxoPT09LTEvMClyZXR1cm4gMS8wO2g9TWF0aC5hYnMoaCksaD5mJiYoZj1oKSxlW2ddPWh9MD09PWYmJihmPTEpO2Zvcih2YXIgaT0wLGo9MCxrPTA7azxkO2srKyl7dmFyIGw9ZVtrXS9mLG09bCpsLWosbj1pK207aj1uLWktbSxpPW59cmV0dXJuIE1hdGguc3FydChpKSpmfXZhciBlPWEoXCIuLi9jb3JlL21haW5cIik7ZS5wcm90b3R5cGUuYWJzPU1hdGguYWJzLGUucHJvdG90eXBlLmNlaWw9TWF0aC5jZWlsLGUucHJvdG90eXBlLmNvbnN0cmFpbj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvbnN0cmFpblwiLGFyZ3VtZW50cyksTWF0aC5tYXgoTWF0aC5taW4oYSxjKSxiKX0sZS5wcm90b3R5cGUuZGlzdD1mdW5jdGlvbigpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJkaXN0XCIsYXJndW1lbnRzKSw0PT09YXJndW1lbnRzLmxlbmd0aD9kKGFyZ3VtZW50c1syXS1hcmd1bWVudHNbMF0sYXJndW1lbnRzWzNdLWFyZ3VtZW50c1sxXSk6Nj09PWFyZ3VtZW50cy5sZW5ndGg/ZChhcmd1bWVudHNbM10tYXJndW1lbnRzWzBdLGFyZ3VtZW50c1s0XS1hcmd1bWVudHNbMV0sYXJndW1lbnRzWzVdLWFyZ3VtZW50c1syXSk6dm9pZCAwfSxlLnByb3RvdHlwZS5leHA9TWF0aC5leHAsZS5wcm90b3R5cGUuZmxvb3I9TWF0aC5mbG9vcixlLnByb3RvdHlwZS5sZXJwPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibGVycFwiLGFyZ3VtZW50cyksYyooYi1hKSthfSxlLnByb3RvdHlwZS5sb2c9TWF0aC5sb2csZS5wcm90b3R5cGUubWFnPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1hZ1wiLGFyZ3VtZW50cyksZChhLGIpfSxlLnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1hcFwiLGFyZ3VtZW50cyk7dmFyIGg9KGEtYikvKGMtYikqKGYtZCkrZDtyZXR1cm4gZz9kPGY/dGhpcy5jb25zdHJhaW4oaCxkLGYpOnRoaXMuY29uc3RyYWluKGgsZixkKTpofSxlLnByb3RvdHlwZS5tYXg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWF4XCIsYXJndW1lbnRzKSxhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5P01hdGgubWF4LmFwcGx5KG51bGwsYXJndW1lbnRzWzBdKTpNYXRoLm1heC5hcHBseShudWxsLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlLm1pbj1mdW5jdGlvbigpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtaW5cIixhcmd1bWVudHMpLGFyZ3VtZW50c1swXWluc3RhbmNlb2YgQXJyYXk/TWF0aC5taW4uYXBwbHkobnVsbCxhcmd1bWVudHNbMF0pOk1hdGgubWluLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZS5wcm90b3R5cGUubm9ybT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5vcm1cIixhcmd1bWVudHMpLHRoaXMubWFwKGEsYixjLDAsMSl9LGUucHJvdG90eXBlLnBvdz1NYXRoLnBvdyxlLnByb3RvdHlwZS5yb3VuZD1NYXRoLnJvdW5kLGUucHJvdG90eXBlLnNxPWZ1bmN0aW9uKGEpe3JldHVybiBhKmF9LGUucHJvdG90eXBlLnNxcnQ9TWF0aC5zcXJ0LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDUyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5jcmVhdGVWZWN0b3I9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZD9uZXcgZC5WZWN0b3IodGhpcyxhcmd1bWVudHMpOm5ldyBkLlZlY3RvcihhLGIsYyl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDUzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQsZT1hKFwiLi4vY29yZS9tYWluXCIpLGY9NCxnPTE8PGYsaD04LGk9MTw8aCxqPTQwOTUsaz00LGw9LjUsbT1mdW5jdGlvbihhKXtyZXR1cm4uNSooMS1NYXRoLmNvcyhhKk1hdGguUEkpKX07ZS5wcm90b3R5cGUubm9pc2U9ZnVuY3Rpb24oYSxiLGMpe2lmKGI9Ynx8MCxjPWN8fDAsbnVsbD09ZCl7ZD1uZXcgQXJyYXkoaisxKTtmb3IodmFyIGU9MDtlPGorMTtlKyspZFtlXT1NYXRoLnJhbmRvbSgpfWE8MCYmKGE9LWEpLGI8MCYmKGI9LWIpLGM8MCYmKGM9LWMpO2Zvcih2YXIgbixvLHAscSxyLHM9TWF0aC5mbG9vcihhKSx0PU1hdGguZmxvb3IoYiksdT1NYXRoLmZsb29yKGMpLHY9YS1zLHc9Yi10LHg9Yy11LHk9MCx6PS41LEE9MDtBPGs7QSsrKXt2YXIgQj1zKyh0PDxmKSsodTw8aCk7bj1tKHYpLG89bSh3KSxwPWRbQiZqXSxwKz1uKihkW0IrMSZqXS1wKSxxPWRbQitnJmpdLHErPW4qKGRbQitnKzEmal0tcSkscCs9byoocS1wKSxCKz1pLHE9ZFtCJmpdLHErPW4qKGRbQisxJmpdLXEpLHI9ZFtCK2cmal0scis9biooZFtCK2crMSZqXS1yKSxxKz1vKihyLXEpLHArPW0oeCkqKHEtcCkseSs9cCp6LHoqPWwsczw8PTEsdio9Mix0PDw9MSx3Kj0yLHU8PD0xLHgqPTIsdj49MSYmKHMrKyx2LS0pLHc+PTEmJih0Kyssdy0tKSx4Pj0xJiYodSsrLHgtLSl9cmV0dXJuIHl9LGUucHJvdG90eXBlLm5vaXNlRGV0YWlsPWZ1bmN0aW9uKGEsYil7YT4wJiYoaz1hKSxiPjAmJihsPWIpfSxlLnByb3RvdHlwZS5ub2lzZVNlZWQ9ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXt2YXIgYSxiLGM9NDI5NDk2NzI5NixkPTE2NjQ1MjUsZT0xMDEzOTA0MjIzO3JldHVybntzZXRTZWVkOmZ1bmN0aW9uKGQpe2I9YT0obnVsbD09ZD9NYXRoLnJhbmRvbSgpKmM6ZCk+Pj4wfSxnZXRTZWVkOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHJhbmQ6ZnVuY3Rpb24oKXtyZXR1cm4oYj0oZCpiK2UpJWMpL2N9fX0oKTtiLnNldFNlZWQoYSksZD1uZXcgQXJyYXkoaisxKTtmb3IodmFyIGM9MDtjPGorMTtjKyspZFtjXT1iLnJhbmQoKX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QuVmVjdG9yPWZ1bmN0aW9uKCl7dmFyIGEsYixjO2FyZ3VtZW50c1swXWluc3RhbmNlb2YgZD8odGhpcy5wNT1hcmd1bWVudHNbMF0sYT1hcmd1bWVudHNbMV1bMF18fDAsYj1hcmd1bWVudHNbMV1bMV18fDAsYz1hcmd1bWVudHNbMV1bMl18fDApOihhPWFyZ3VtZW50c1swXXx8MCxiPWFyZ3VtZW50c1sxXXx8MCxjPWFyZ3VtZW50c1syXXx8MCksdGhpcy54PWEsdGhpcy55PWIsdGhpcy56PWN9LGQuVmVjdG9yLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwicDUuVmVjdG9yIE9iamVjdCA6IFtcIit0aGlzLngrXCIsIFwiK3RoaXMueStcIiwgXCIrdGhpcy56K1wiXVwifSxkLlZlY3Rvci5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyh0aGlzLng9YS54fHwwLHRoaXMueT1hLnl8fDAsdGhpcy56PWEuenx8MCx0aGlzKTphIGluc3RhbmNlb2YgQXJyYXk/KHRoaXMueD1hWzBdfHwwLHRoaXMueT1hWzFdfHwwLHRoaXMuej1hWzJdfHwwLHRoaXMpOih0aGlzLng9YXx8MCx0aGlzLnk9Ynx8MCx0aGlzLno9Y3x8MCx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wNT9uZXcgZC5WZWN0b3IodGhpcy5wNSxbdGhpcy54LHRoaXMueSx0aGlzLnpdKTpuZXcgZC5WZWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfSxkLlZlY3Rvci5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyh0aGlzLngrPWEueHx8MCx0aGlzLnkrPWEueXx8MCx0aGlzLnorPWEuenx8MCx0aGlzKTphIGluc3RhbmNlb2YgQXJyYXk/KHRoaXMueCs9YVswXXx8MCx0aGlzLnkrPWFbMV18fDAsdGhpcy56Kz1hWzJdfHwwLHRoaXMpOih0aGlzLngrPWF8fDAsdGhpcy55Kz1ifHwwLHRoaXMueis9Y3x8MCx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj8odGhpcy54LT1hLnh8fDAsdGhpcy55LT1hLnl8fDAsdGhpcy56LT1hLnp8fDAsdGhpcyk6YSBpbnN0YW5jZW9mIEFycmF5Pyh0aGlzLngtPWFbMF18fDAsdGhpcy55LT1hWzFdfHwwLHRoaXMuei09YVsyXXx8MCx0aGlzKToodGhpcy54LT1hfHwwLHRoaXMueS09Ynx8MCx0aGlzLnotPWN8fDAsdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5tdWx0PWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhJiZpc0Zpbml0ZShhKT8odGhpcy54Kj1hLHRoaXMueSo9YSx0aGlzLnoqPWEsdGhpcyk6KGNvbnNvbGUud2FybihcInA1LlZlY3Rvci5wcm90b3R5cGUubXVsdDpcIixcIm4gaXMgdW5kZWZpbmVkIG9yIG5vdCBhIGZpbml0ZSBudW1iZXJcIiksdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGEmJmlzRmluaXRlKGEpPzA9PT1hPyhjb25zb2xlLndhcm4oXCJwNS5WZWN0b3IucHJvdG90eXBlLmRpdjpcIixcImRpdmlkZSBieSAwXCIpLHRoaXMpOih0aGlzLngvPWEsdGhpcy55Lz1hLHRoaXMuei89YSx0aGlzKTooY29uc29sZS53YXJuKFwicDUuVmVjdG9yLnByb3RvdHlwZS5kaXY6XCIsXCJuIGlzIHVuZGVmaW5lZCBvciBub3QgYSBmaW5pdGUgbnVtYmVyXCIpLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUubWFnPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLm1hZ1NxKCkpfSxkLlZlY3Rvci5wcm90b3R5cGUubWFnU3E9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLngsYj10aGlzLnksYz10aGlzLno7cmV0dXJuIGEqYStiKmIrYypjfSxkLlZlY3Rvci5wcm90b3R5cGUuZG90PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yP3RoaXMuZG90KGEueCxhLnksYS56KTp0aGlzLngqKGF8fDApK3RoaXMueSooYnx8MCkrdGhpcy56KihjfHwwKX0sZC5WZWN0b3IucHJvdG90eXBlLmNyb3NzPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueSphLnotdGhpcy56KmEueSxjPXRoaXMueiphLngtdGhpcy54KmEueixlPXRoaXMueCphLnktdGhpcy55KmEueDtyZXR1cm4gdGhpcy5wNT9uZXcgZC5WZWN0b3IodGhpcy5wNSxbYixjLGVdKTpuZXcgZC5WZWN0b3IoYixjLGUpfSxkLlZlY3Rvci5wcm90b3R5cGUuZGlzdD1mdW5jdGlvbihhKXtyZXR1cm4gYS5jb3B5KCkuc3ViKHRoaXMpLm1hZygpfSxkLlZlY3Rvci5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5tYWcoKTtyZXR1cm4gMCE9PWEmJnRoaXMubXVsdCgxL2EpLHRoaXN9LGQuVmVjdG9yLnByb3RvdHlwZS5saW1pdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm1hZ1NxKCk7cmV0dXJuIGI+YSphJiZ0aGlzLmRpdihNYXRoLnNxcnQoYikpLm11bHQoYSksdGhpc30sZC5WZWN0b3IucHJvdG90eXBlLnNldE1hZz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0KGEpfSxkLlZlY3Rvci5wcm90b3R5cGUuaGVhZGluZz1mdW5jdGlvbigpe3ZhciBhPU1hdGguYXRhbjIodGhpcy55LHRoaXMueCk7cmV0dXJuIHRoaXMucDU/dGhpcy5wNS5fZnJvbVJhZGlhbnMoYSk6YX0sZC5WZWN0b3IucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmhlYWRpbmcoKSthO3RoaXMucDUmJihiPXRoaXMucDUuX3RvUmFkaWFucyhiKSk7dmFyIGM9dGhpcy5tYWcoKTtyZXR1cm4gdGhpcy54PU1hdGguY29zKGIpKmMsdGhpcy55PU1hdGguc2luKGIpKmMsdGhpc30sZC5WZWN0b3IucHJvdG90eXBlLmFuZ2xlQmV0d2Vlbj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmRvdChhKS8odGhpcy5tYWcoKSphLm1hZygpKSxjPU1hdGguYWNvcyhNYXRoLm1pbigxLE1hdGgubWF4KC0xLGIpKSk7cmV0dXJuIHRoaXMucDU/dGhpcy5wNS5fZnJvbVJhZGlhbnMoYyk6Y30sZC5WZWN0b3IucHJvdG90eXBlLmxlcnA9ZnVuY3Rpb24oYSxiLGMsZSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj90aGlzLmxlcnAoYS54LGEueSxhLnosYik6KHRoaXMueCs9KGEtdGhpcy54KSplfHwwLHRoaXMueSs9KGItdGhpcy55KSplfHwwLHRoaXMueis9KGMtdGhpcy56KSplfHwwLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUuYXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy54fHwwLHRoaXMueXx8MCx0aGlzLnp8fDBdfSxkLlZlY3Rvci5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZSxmLGc7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj8oZT1hLnh8fDAsZj1hLnl8fDAsZz1hLnp8fDApOmEgaW5zdGFuY2VvZiBBcnJheT8oZT1hWzBdfHwwLGY9YVsxXXx8MCxnPWFbMl18fDApOihlPWF8fDAsZj1ifHwwLGc9Y3x8MCksdGhpcy54PT09ZSYmdGhpcy55PT09ZiYmdGhpcy56PT09Z30sZC5WZWN0b3IuZnJvbUFuZ2xlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMD09PWImJihiPTEpLG5ldyBkLlZlY3RvcihiKk1hdGguY29zKGEpLGIqTWF0aC5zaW4oYSksMCl9LGQuVmVjdG9yLmZyb21BbmdsZXM9ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWMmJihjPTEpO3ZhciBlPU1hdGguY29zKGIpLGY9TWF0aC5zaW4oYiksZz1NYXRoLmNvcyhhKSxoPU1hdGguc2luKGEpO3JldHVybiBuZXcgZC5WZWN0b3IoYypoKmYsLWMqZyxjKmgqZSl9LGQuVmVjdG9yLnJhbmRvbTJEPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbUFuZ2xlKE1hdGgucmFuZG9tKCkqZS5UV09fUEkpfSxkLlZlY3Rvci5yYW5kb20zRD1mdW5jdGlvbigpe3ZhciBhPU1hdGgucmFuZG9tKCkqZS5UV09fUEksYj0yKk1hdGgucmFuZG9tKCktMSxjPU1hdGguc3FydCgxLWIqYiksZj1jKk1hdGguY29zKGEpLGc9YypNYXRoLnNpbihhKTtyZXR1cm4gbmV3IGQuVmVjdG9yKGYsZyxiKX0sZC5WZWN0b3IuYWRkPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz9jLnNldChhKTpjPWEuY29weSgpLGMuYWRkKGIpLGN9LGQuVmVjdG9yLnN1Yj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/Yy5zZXQoYSk6Yz1hLmNvcHkoKSxjLnN1YihiKSxjfSxkLlZlY3Rvci5tdWx0PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz9jLnNldChhKTpjPWEuY29weSgpLGMubXVsdChiKSxjfSxkLlZlY3Rvci5kaXY9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP2Muc2V0KGEpOmM9YS5jb3B5KCksYy5kaXYoYiksY30sZC5WZWN0b3IuZG90PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZG90KGIpfSxkLlZlY3Rvci5jcm9zcz1mdW5jdGlvbihhLGIpe3JldHVybiBhLmNyb3NzKGIpfSxkLlZlY3Rvci5kaXN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZGlzdChiKX0sZC5WZWN0b3IubGVycD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gZD9kLnNldChhKTpkPWEuY29weSgpLGQubGVycChiLGMpLGR9LGQuVmVjdG9yLm1hZz1mdW5jdGlvbihhKXt2YXIgYj1hLngsYz1hLnksZD1hLnosZT1iKmIrYypjK2QqZDtyZXR1cm4gTWF0aC5zcXJ0KGUpfSxiLmV4cG9ydHM9ZC5WZWN0b3J9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDU1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPSExLGY9ITEsZz0wLGg9ZnVuY3Rpb24oKXt2YXIgYSxiLGM9NDI5NDk2NzI5NixkPTE2NjQ1MjUsZT0xMDEzOTA0MjIzO3JldHVybntzZXRTZWVkOmZ1bmN0aW9uKGQpe2I9YT0obnVsbD09ZD9NYXRoLnJhbmRvbSgpKmM6ZCk+Pj4wfSxnZXRTZWVkOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHJhbmQ6ZnVuY3Rpb24oKXtyZXR1cm4oYj0oZCpiK2UpJWMpL2N9fX0oKTtkLnByb3RvdHlwZS5yYW5kb21TZWVkPWZ1bmN0aW9uKGEpe2guc2V0U2VlZChhKSxlPSEwLGY9ITF9LGQucHJvdG90eXBlLnJhbmRvbT1mdW5jdGlvbihhLGIpe3ZhciBjO2lmKGM9ZT9oLnJhbmQoKTpNYXRoLnJhbmRvbSgpLHZvaWQgMD09PWEpcmV0dXJuIGM7aWYodm9pZCAwPT09YilyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2FbTWF0aC5mbG9vcihjKmEubGVuZ3RoKV06YyphO2lmKGE+Yil7dmFyIGQ9YTthPWIsYj1kfXJldHVybiBjKihiLWEpK2F9LGQucHJvdG90eXBlLnJhbmRvbUdhdXNzaWFuPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGg7aWYoZiljPWcsZj0hMTtlbHNle2Rve2Q9dGhpcy5yYW5kb20oMiktMSxlPXRoaXMucmFuZG9tKDIpLTEsaD1kKmQrZSplfXdoaWxlKGg+PTEpO2g9TWF0aC5zcXJ0KC0yKk1hdGgubG9nKGgpL2gpLGM9ZCpoLGc9ZSpoLGY9ITB9dmFyIGk9YXx8MDtyZXR1cm4gYyooYnx8MSkraX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QucHJvdG90eXBlLl9hbmdsZU1vZGU9ZS5SQURJQU5TLGQucHJvdG90eXBlLmFjb3M9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYWNvcyhhKSl9LGQucHJvdG90eXBlLmFzaW49ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYXNpbihhKSl9LGQucHJvdG90eXBlLmF0YW49ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYXRhbihhKSl9LGQucHJvdG90eXBlLmF0YW4yPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYXRhbjIoYSxiKSl9LGQucHJvdG90eXBlLmNvcz1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5jb3ModGhpcy5fdG9SYWRpYW5zKGEpKX0sZC5wcm90b3R5cGUuc2luPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnNpbih0aGlzLl90b1JhZGlhbnMoYSkpfSxkLnByb3RvdHlwZS50YW49ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgudGFuKHRoaXMuX3RvUmFkaWFucyhhKSl9LGQucHJvdG90eXBlLmRlZ3JlZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEqZS5SQURfVE9fREVHfSxkLnByb3RvdHlwZS5yYWRpYW5zPWZ1bmN0aW9uKGEpe3JldHVybiBhKmUuREVHX1RPX1JBRH0sZC5wcm90b3R5cGUuYW5nbGVNb2RlPWZ1bmN0aW9uKGEpe2EhPT1lLkRFR1JFRVMmJmEhPT1lLlJBRElBTlN8fCh0aGlzLl9hbmdsZU1vZGU9YSl9LGQucHJvdG90eXBlLl90b1JhZGlhbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2FuZ2xlTW9kZT09PWUuREVHUkVFUz9hKmUuREVHX1RPX1JBRDphfSxkLnByb3RvdHlwZS5fdG9EZWdyZWVzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hbmdsZU1vZGU9PT1lLlJBRElBTlM/YSplLlJBRF9UT19ERUc6YX0sZC5wcm90b3R5cGUuX2Zyb21SYWRpYW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hbmdsZU1vZGU9PT1lLkRFR1JFRVM/YSplLlJBRF9UT19ERUc6YX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDU3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS50ZXh0QWxpZ249ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dEFsaWduXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0QWxpZ24uYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dExlYWRpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRMZWFkaW5nXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0TGVhZGluZy5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0U2l6ZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dFNpemVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRTaXplLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRTdHlsZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dFN0eWxlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0U3R5bGUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dFdpZHRoPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0V2lkdGhcIixhcmd1bWVudHMpLDA9PT1hLmxlbmd0aD8wOnRoaXMuX3JlbmRlcmVyLnRleHRXaWR0aC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0QXNjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRBc2NlbnRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRBc2NlbnQoKX0sZC5wcm90b3R5cGUudGV4dERlc2NlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dERlc2NlbnRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHREZXNjZW50KCl9LGQucHJvdG90eXBlLl91cGRhdGVUZXh0TWV0cmljcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fdXBkYXRlVGV4dE1ldHJpY3MoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpLGY9YShcIm9wZW50eXBlLmpzXCIpO2EoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUubG9hZEZvbnQ9ZnVuY3Rpb24oYSxiLGMpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRGb250XCIsYXJndW1lbnRzKTt2YXIgZT1uZXcgZC5Gb250KHRoaXMpLGc9dGhpcztyZXR1cm4gZi5sb2FkKGEsZnVuY3Rpb24oZixoKXtpZihmKXJldHVybiB2b2lkIDAhPT1jP2MoZik6KGQuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig0LGEpLHZvaWQgY29uc29sZS5lcnJvcihmLGEpKTtlLmZvbnQ9aCx2b2lkIDAhPT1iJiZiKGUpLGcuX2RlY3JlbWVudFByZWxvYWQoKTt2YXIgaSxqLGs9W1widHRmXCIsXCJvdGZcIixcIndvZmZcIixcIndvZmYyXCJdLGw9YS5zcGxpdChcIlxcXFxcIikucG9wKCkuc3BsaXQoXCIvXCIpLnBvcCgpLG09bC5sYXN0SW5kZXhPZihcIi5cIiksbj1tPDE/bnVsbDpsLnN1YnN0cihtKzEpO2suaW5kZXhPZihuKT4tMSYmKGk9bC5zdWJzdHIoMCxtKSxqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSxqLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXFxuQGZvbnQtZmFjZSB7XFxuZm9udC1mYW1pbHk6IFwiK2krXCI7XFxuc3JjOiB1cmwoXCIrYStcIik7XFxufVxcblwiKSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChqKSl9KSxlfSxkLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGEsYixjLGUsZil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGx8fHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZT90aGlzLl9yZW5kZXJlci50ZXh0LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk6dGhpc30sZC5wcm90b3R5cGUudGV4dEZvbnQ9ZnVuY3Rpb24oYSxiKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0Rm9udFwiLGFyZ3VtZW50cyksYXJndW1lbnRzLmxlbmd0aCl7aWYoIWEpdGhyb3cgbmV3IEVycm9yKFwibnVsbCBmb250IHBhc3NlZCB0byB0ZXh0Rm9udFwiKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX3RleHRGb250XCIsYSksYiYmKHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl90ZXh0U2l6ZVwiLGIpLHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl90ZXh0TGVhZGluZ1wiLGIqZS5fREVGQVVMVF9MRUFETVVMVCkpLHRoaXMuX3JlbmRlcmVyLl9hcHBseVRleHRQcm9wZXJ0aWVzKCl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl90ZXh0Rm9udH0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0LFwib3BlbnR5cGUuanNcIjoxMH1dLDU5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgYz1oKGIse3NhbXBsZUZhY3RvcjouMSxzaW1wbGlmeVRocmVzaG9sZDowfSksZD1uKGEsMCwxKSxmPWQvKGQqYy5zYW1wbGVGYWN0b3IpLGc9W10saT0wO2k8ZDtpKz1mKWcucHVzaChuKGEsaSkpO3JldHVybiBjLnNpbXBsaWZ5VGhyZXNob2xkJiZlKGcsYy5zaW1wbGlmeVRocmVzaG9sZCksZ31mdW5jdGlvbiBlKGEsYil7Yj12b2lkIDA9PT1iPzA6Yjtmb3IodmFyIGM9MCxkPWEubGVuZ3RoLTE7YS5sZW5ndGg+MyYmZD49MDstLWQpaihpKGEsZC0xKSxpKGEsZCksaShhLGQrMSksYikmJihhLnNwbGljZShkJWEubGVuZ3RoLDEpLGMrKyk7cmV0dXJuIGN9ZnVuY3Rpb24gZihhKXtmb3IodmFyIGIsYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKyspXCJNXCI9PT1hW2RdLnR5cGUmJihiJiZjLnB1c2goYiksYj1bXSksYi5wdXNoKGcoYVtkXSkpO3JldHVybiBjLnB1c2goYiksY31mdW5jdGlvbiBnKGEpe3ZhciBiPVthLnR5cGVdO3JldHVyblwiTVwiPT09YS50eXBlfHxcIkxcIj09PWEudHlwZT9iLnB1c2goYS54LGEueSk6XCJDXCI9PT1hLnR5cGU/Yi5wdXNoKGEueDEsYS55MSxhLngyLGEueTIsYS54LGEueSk6XCJRXCI9PT1hLnR5cGUmJmIucHVzaChhLngxLGEueTEsYS54LGEueSksYn1mdW5jdGlvbiBoKGEsYil7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGEpYT1iO2Vsc2UgZm9yKHZhciBjIGluIGIpdm9pZCAwPT09YVtjXSYmKGFbY109YltjXSk7cmV0dXJuIGF9ZnVuY3Rpb24gaShhLGIpe3ZhciBjPWEubGVuZ3RoO3JldHVybiBhW2I8MD9iJWMrYzpiJWNdfWZ1bmN0aW9uIGooYSxiLGMsZCl7aWYoIWQpcmV0dXJuIDA9PT1rKGEsYixjKTt2b2lkIDA9PT1qLnRtcFBvaW50MSYmKGoudG1wUG9pbnQxPVtdLGoudG1wUG9pbnQyPVtdKTt2YXIgZT1qLnRtcFBvaW50MSxmPWoudG1wUG9pbnQyO2UueD1iLngtYS54LGUueT1iLnktYS55LGYueD1jLngtYi54LGYueT1jLnktYi55O3ZhciBnPWUueCpmLngrZS55KmYueSxoPU1hdGguc3FydChlLngqZS54K2UueSplLnkpLGk9TWF0aC5zcXJ0KGYueCpmLngrZi55KmYueSk7cmV0dXJuIE1hdGguYWNvcyhnLyhoKmkpKTxkfWZ1bmN0aW9uIGsoYSxiLGMpe3JldHVybihiWzBdLWFbMF0pKihjWzFdLWFbMV0pLShjWzBdLWFbMF0pKihiWzFdLWFbMV0pfWZ1bmN0aW9uIGwoYSxiLGMsZCxlLGYsZyxoLGkpe3ZhciBqPTEtaSxrPU1hdGgucG93KGosMyksbD1NYXRoLnBvdyhqLDIpLG09aSppLG49bSppLG89ayphKzMqbCppKmMrMypqKmkqaSplK24qZyxwPWsqYiszKmwqaSpkKzMqaippKmkqZituKmgscT1hKzIqaSooYy1hKSttKihlLTIqYythKSxyPWIrMippKihkLWIpK20qKGYtMipkK2IpLHM9YysyKmkqKGUtYykrbSooZy0yKmUrYyksdD1kKzIqaSooZi1kKSttKihoLTIqZitkKSx1PWoqYStpKmMsdj1qKmIraSpkLHc9aiplK2kqZyx4PWoqZitpKmgseT05MC0xODAqTWF0aC5hdGFuMihxLXMsci10KS9NYXRoLlBJO3JldHVybihxPnN8fHI8dCkmJih5Kz0xODApLHt4Om8seTpwLG06e3g6cSx5OnJ9LG46e3g6cyx5OnR9LHN0YXJ0Ont4OnUseTp2fSxlbmQ6e3g6dyx5Onh9LGFscGhhOnl9fWZ1bmN0aW9uIG0oYSxiLGMsZCxlLGYsZyxoLGkpe3JldHVybiBudWxsPT1pP3UoYSxiLGMsZCxlLGYsZyxoKTpsKGEsYixjLGQsZSxmLGcsaCx2KGEsYixjLGQsZSxmLGcsaCxpKSl9ZnVuY3Rpb24gbihhLGIsYyl7YT1wKGEpO2Zvcih2YXIgZCxlLGYsZyxoLGk9XCJcIixqPXt9LGs9MCxuPTAsbz1hLmxlbmd0aDtuPG87bisrKXtpZihmPWFbbl0sXCJNXCI9PT1mWzBdKWQ9K2ZbMV0sZT0rZlsyXTtlbHNle2lmKGc9bShkLGUsZlsxXSxmWzJdLGZbM10sZls0XSxmWzVdLGZbNl0pLGsrZz5iJiYhYylyZXR1cm4gaD1tKGQsZSxmWzFdLGZbMl0sZlszXSxmWzRdLGZbNV0sZls2XSxiLWspLHt4OmgueCx5OmgueSxhbHBoYTpoLmFscGhhfTtrKz1nLGQ9K2ZbNV0sZT0rZls2XX1pKz1mLnNoaWZ0KCkrZn1yZXR1cm4gai5lbmQ9aSxoPWM/azpsKGQsZSxmWzBdLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSwxKSxoLmFscGhhJiYoaD17eDpoLngseTpoLnksYWxwaGE6aC5hbHBoYX0pLGh9ZnVuY3Rpb24gbyhhKXt2YXIgYj1bXSxjPTAsZD0wLGU9MCxmPTAsZz0wO2lmKCFhKXJldHVybiBiO1wiTVwiPT09YVswXVswXSYmKGM9K2FbMF1bMV0sZD0rYVswXVsyXSxlPWMsZj1kLGcrKyxiWzBdPVtcIk1cIixjLGRdKTtmb3IodmFyIGgsaSxqLGs9Mz09PWEubGVuZ3RoJiZcIk1cIj09PWFbMF1bMF0mJlwiUlwiPT09YVsxXVswXS50b1VwcGVyQ2FzZSgpJiZcIlpcIj09PWFbMl1bMF0udG9VcHBlckNhc2UoKSxsPWcsbT1hLmxlbmd0aDtsPG07bCsrKXtpZihiLnB1c2goaT1bXSksaj1hW2xdLGpbMF0hPT1TdHJpbmcucHJvdG90eXBlLnRvVXBwZXJDYXNlLmNhbGwoalswXSkpc3dpdGNoKGlbMF09U3RyaW5nLnByb3RvdHlwZS50b1VwcGVyQ2FzZS5jYWxsKGpbMF0pLGlbMF0pe2Nhc2VcIkFcIjppWzFdPWpbMV0saVsyXT1qWzJdLGlbM109alszXSxpWzRdPWpbNF0saVs1XT1qWzVdLGlbNl09KyhqWzZdK2MpLGlbN109KyhqWzddK2QpO2JyZWFrO2Nhc2VcIlZcIjppWzFdPStqWzFdK2Q7YnJlYWs7Y2FzZVwiSFwiOmlbMV09K2pbMV0rYzticmVhaztjYXNlXCJSXCI6aD1bYyxkXS5jb25jYXQoai5zbGljZSgxKSk7Zm9yKHZhciBuPTIsbz1oLmxlbmd0aDtuPG87bisrKWhbbl09K2hbbl0rYyxoWysrbl09K2hbbl0rZDtiLnBvcCgpLGI9Yi5jb25jYXQocihoLGspKTticmVhaztjYXNlXCJNXCI6ZT0ralsxXStjLGY9K2pbMl0rZDticmVhaztkZWZhdWx0OmZvcihuPTEsbz1qLmxlbmd0aDtuPG87bisrKWlbbl09K2pbbl0rKG4lMj9jOmQpfWVsc2UgaWYoXCJSXCI9PT1qWzBdKWg9W2MsZF0uY29uY2F0KGouc2xpY2UoMSkpLGIucG9wKCksYj1iLmNvbmNhdChyKGgsaykpLGk9W1wiUlwiXS5jb25jYXQoai5zbGljZSgtMikpO2Vsc2UgZm9yKHZhciBwPTAscT1qLmxlbmd0aDtwPHE7cCsrKWlbcF09altwXTtzd2l0Y2goaVswXSl7Y2FzZVwiWlwiOmM9ZSxkPWY7YnJlYWs7Y2FzZVwiSFwiOmM9aVsxXTticmVhaztjYXNlXCJWXCI6ZD1pWzFdO2JyZWFrO2Nhc2VcIk1cIjplPWlbaS5sZW5ndGgtMl0sZj1pW2kubGVuZ3RoLTFdO2JyZWFrO2RlZmF1bHQ6Yz1pW2kubGVuZ3RoLTJdLGQ9aVtpLmxlbmd0aC0xXX19cmV0dXJuIGJ9ZnVuY3Rpb24gcChhLGIpe3ZhciBjLGQ9byhhKSxlPWImJm8oYiksZj17eDowLHk6MCxieDowLGJ5OjAsWDowLFk6MCxxeDpudWxsLHF5Om51bGx9LGc9e3g6MCx5OjAsYng6MCxieTowLFg6MCxZOjAscXg6bnVsbCxxeTpudWxsfSxoPVtdLGk9W10saj1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXtUOjEsUToxfTtpZighYSlyZXR1cm5bXCJDXCIsYi54LGIueSxiLngsYi55LGIueCxiLnldO3N3aXRjaChhWzBdaW4gZnx8KGIucXg9Yi5xeT1udWxsKSxhWzBdKXtjYXNlXCJNXCI6Yi5YPWFbMV0sYi5ZPWFbMl07YnJlYWs7Y2FzZVwiQVwiOmE9W1wiQ1wiXS5jb25jYXQocS5hcHBseSgwLFtiLngsYi55XS5jb25jYXQoYS5zbGljZSgxKSkpKTticmVhaztjYXNlXCJTXCI6XCJDXCI9PT1jfHxcIlNcIj09PWM/KGQ9MipiLngtYi5ieCxlPTIqYi55LWIuYnkpOihkPWIueCxlPWIueSksYT1bXCJDXCIsZCxlXS5jb25jYXQoYS5zbGljZSgxKSk7YnJlYWs7Y2FzZVwiVFwiOlwiUVwiPT09Y3x8XCJUXCI9PT1jPyhiLnF4PTIqYi54LWIucXgsYi5xeT0yKmIueS1iLnF5KTooYi5xeD1iLngsYi5xeT1iLnkpLGE9W1wiQ1wiXS5jb25jYXQodChiLngsYi55LGIucXgsYi5xeSxhWzFdLGFbMl0pKTticmVhaztjYXNlXCJRXCI6Yi5xeD1hWzFdLGIucXk9YVsyXSxhPVtcIkNcIl0uY29uY2F0KHQoYi54LGIueSxhWzFdLGFbMl0sYVszXSxhWzRdKSk7YnJlYWs7Y2FzZVwiTFwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGFbMV0sYVsyXSkpO2JyZWFrO2Nhc2VcIkhcIjphPVtcIkNcIl0uY29uY2F0KHMoYi54LGIueSxhWzFdLGIueSkpO2JyZWFrO2Nhc2VcIlZcIjphPVtcIkNcIl0uY29uY2F0KHMoYi54LGIueSxiLngsYVsxXSkpO2JyZWFrO2Nhc2VcIlpcIjphPVtcIkNcIl0uY29uY2F0KHMoYi54LGIueSxiLlgsYi5ZKSl9cmV0dXJuIGF9LGs9ZnVuY3Rpb24oYSxiKXtpZihhW2JdLmxlbmd0aD43KXthW2JdLnNoaWZ0KCk7Zm9yKHZhciBmPWFbYl07Zi5sZW5ndGg7KWhbYl09XCJBXCIsZSYmKGlbYl09XCJBXCIpLGEuc3BsaWNlKGIrKywwLFtcIkNcIl0uY29uY2F0KGYuc3BsaWNlKDAsNikpKTthLnNwbGljZShiLDEpLGM9TWF0aC5tYXgoZC5sZW5ndGgsZSYmZS5sZW5ndGh8fDApfX0sbD1mdW5jdGlvbihhLGIsZixnLGgpe2EmJmImJlwiTVwiPT09YVtoXVswXSYmXCJNXCIhPT1iW2hdWzBdJiYoYi5zcGxpY2UoaCwwLFtcIk1cIixnLngsZy55XSksZi5ieD0wLGYuYnk9MCxmLng9YVtoXVsxXSxmLnk9YVtoXVsyXSxjPU1hdGgubWF4KGQubGVuZ3RoLGUmJmUubGVuZ3RofHwwKSl9LG09XCJcIixuPVwiXCI7Yz1NYXRoLm1heChkLmxlbmd0aCxlJiZlLmxlbmd0aHx8MCk7Zm9yKHZhciBwPTA7cDxjO3ArKyl7ZFtwXSYmKG09ZFtwXVswXSksXCJDXCIhPT1tJiYoaFtwXT1tLHAmJihuPWhbcC0xXSkpLGRbcF09aihkW3BdLGYsbiksXCJBXCIhPT1oW3BdJiZcIkNcIj09PW0mJihoW3BdPVwiQ1wiKSxrKGQscCksZSYmKGVbcF0mJihtPWVbcF1bMF0pLFwiQ1wiIT09bSYmKGlbcF09bSxwJiYobj1pW3AtMV0pKSxlW3BdPWooZVtwXSxnLG4pLFwiQVwiIT09aVtwXSYmXCJDXCI9PT1tJiYoaVtwXT1cIkNcIiksayhlLHApKSxsKGQsZSxmLGcscCksbChlLGQsZyxmLHApO3ZhciByPWRbcF0sdT1lJiZlW3BdLHY9ci5sZW5ndGgsdz1lJiZ1Lmxlbmd0aDtmLng9clt2LTJdLGYueT1yW3YtMV0sZi5ieD1wYXJzZUZsb2F0KHJbdi00XSl8fGYueCxmLmJ5PXBhcnNlRmxvYXQoclt2LTNdKXx8Zi55LGcuYng9ZSYmKHBhcnNlRmxvYXQodVt3LTRdKXx8Zy54KSxnLmJ5PWUmJihwYXJzZUZsb2F0KHVbdy0zXSl8fGcueSksZy54PWUmJnVbdy0yXSxnLnk9ZSYmdVt3LTFdfXJldHVybiBlP1tkLGVdOmR9ZnVuY3Rpb24gcShhLGIsYyxkLGUsZixnLGgsaSxqKXt2YXIgayxsLG0sbixvLHA9TWF0aC5QSSxyPTEyMCpwLzE4MCxzPXAvMTgwKigrZXx8MCksdD1bXSx1PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm57eDphKk1hdGguY29zKGMpLWIqTWF0aC5zaW4oYykseTphKk1hdGguc2luKGMpK2IqTWF0aC5jb3MoYyl9fTtpZihqKWs9alswXSxsPWpbMV0sbT1qWzJdLG49alszXTtlbHNle289dShhLGIsLXMpLGE9by54LGI9by55LG89dShoLGksLXMpLGg9by54LGk9by55O3ZhciB2PShhLWgpLzIsdz0oYi1pKS8yLHg9dip2LyhjKmMpK3cqdy8oZCpkKTt4PjEmJih4PU1hdGguc3FydCh4KSxjKj14LGQqPXgpO3ZhciB5PWMqYyx6PWQqZCxBPShmPT09Zz8tMToxKSpNYXRoLnNxcnQoTWF0aC5hYnMoKHkqei15Kncqdy16KnYqdikvKHkqdyp3K3oqdip2KSkpO209QSpjKncvZCsoYStoKS8yLG49QSotZCp2L2MrKGIraSkvMixrPU1hdGguYXNpbigoKGItbikvZCkudG9GaXhlZCg5KSksbD1NYXRoLmFzaW4oKChpLW4pL2QpLnRvRml4ZWQoOSkpLGs9YTxtP3AtazprLGw9aDxtP3AtbDpsLGs8MCYmKGs9MipwK2spLGw8MCYmKGw9MipwK2wpLGcmJms+bCYmKGstPTIqcCksIWcmJmw+ayYmKGwtPTIqcCl9dmFyIEI9bC1rO2lmKE1hdGguYWJzKEIpPnIpe3ZhciBDPWwsRD1oLEU9aTtsPWsrciooZyYmbD5rPzE6LTEpLGg9bStjKk1hdGguY29zKGwpLGk9bitkKk1hdGguc2luKGwpLHQ9cShoLGksYyxkLGUsMCxnLEQsRSxbbCxDLG0sbl0pfUI9bC1rO3ZhciBGPU1hdGguY29zKGspLEc9TWF0aC5zaW4oayksSD1NYXRoLmNvcyhsKSxJPU1hdGguc2luKGwpLEo9TWF0aC50YW4oQi80KSxLPTQvMypjKkosTD00LzMqZCpKLE09W2EsYl0sTj1bYStLKkcsYi1MKkZdLE89W2grSypJLGktTCpIXSxQPVtoLGldO2lmKE5bMF09MipNWzBdLU5bMF0sTlsxXT0yKk1bMV0tTlsxXSxqKXJldHVybltOLE8sUF0uY29uY2F0KHQpO3Q9W04sTyxQXS5jb25jYXQodCkuam9pbigpLnNwbGl0KFwiLFwiKTtmb3IodmFyIFE9W10sUj0wLFM9dC5sZW5ndGg7UjxTO1IrKylRW1JdPVIlMj91KHRbUi0xXSx0W1JdLHMpLnk6dSh0W1JdLHRbUisxXSxzKS54O3JldHVybiBRfWZ1bmN0aW9uIHIoYSxiKXtmb3IodmFyIGM9W10sZD0wLGU9YS5sZW5ndGg7ZS0yKiFiPmQ7ZCs9Mil7dmFyIGY9W3t4OithW2QtMl0seTorYVtkLTFdfSx7eDorYVtkXSx5OithW2QrMV19LHt4OithW2QrMl0seTorYVtkKzNdfSx7eDorYVtkKzRdLHk6K2FbZCs1XX1dO2I/ZD9lLTQ9PT1kP2ZbM109e3g6K2FbMF0seTorYVsxXX06ZS0yPT09ZCYmKGZbMl09e3g6K2FbMF0seTorYVsxXX0sZlszXT17eDorYVsyXSx5OithWzNdfSk6ZlswXT17eDorYVtlLTJdLHk6K2FbZS0xXX06ZS00PT09ZD9mWzNdPWZbMl06ZHx8KGZbMF09e3g6K2FbZF0seTorYVtkKzFdfSksYy5wdXNoKFtcIkNcIiwoLWZbMF0ueCs2KmZbMV0ueCtmWzJdLngpLzYsKC1mWzBdLnkrNipmWzFdLnkrZlsyXS55KS82LChmWzFdLngrNipmWzJdLngtZlszXS54KS82LChmWzFdLnkrNipmWzJdLnktZlszXS55KS82LGZbMl0ueCxmWzJdLnldKX1yZXR1cm4gY31mdW5jdGlvbiBzKGEsYixjLGQpe3JldHVyblthLGIsYyxkLGMsZF19ZnVuY3Rpb24gdChhLGIsYyxkLGUsZil7dmFyIGc9MS8zLGg9Mi8zO3JldHVybltnKmEraCpjLGcqYitoKmQsZyplK2gqYyxnKmYraCpkLGUsZl19ZnVuY3Rpb24gdShhLGIsYyxkLGUsZixnLGgsaSl7bnVsbD09aSYmKGk9MSksaT1pPjE/MTppPDA/MDppO2Zvcih2YXIgaj1pLzIsaz0xMixsPVstLjEyNTIsLjEyNTIsLS4zNjc4LC4zNjc4LC0uNTg3MywuNTg3MywtLjc2OTksLjc2OTksLS45MDQxLC45MDQxLC0uOTgxNiwuOTgxNl0sbT0wLG49Wy4yNDkxLC4yNDkxLC4yMzM1LC4yMzM1LC4yMDMyLC4yMDMyLC4xNjAxLC4xNjAxLC4xMDY5LC4xMDY5LC4wNDcyLC4wNDcyXSxvPTA7bzxrO28rKyl7dmFyIHA9aipsW29dK2oscT13KHAsYSxjLGUsZykscj13KHAsYixkLGYsaCkscz1xKnErcipyO20rPW5bb10qTWF0aC5zcXJ0KHMpfXJldHVybiBqKm19ZnVuY3Rpb24gdihhLGIsYyxkLGUsZixnLGgsaSl7aWYoIShpPDB8fHUoYSxiLGMsZCxlLGYsZyxoKTxpKSl7dmFyIGosaz0xLGw9ay8yLG09ay1sLG49LjAxO2ZvcihqPXUoYSxiLGMsZCxlLGYsZyxoLG0pO01hdGguYWJzKGotaSk+bjspbC89MixtKz0oajxpPzE6LTEpKmwsaj11KGEsYixjLGQsZSxmLGcsaCxtKTtyZXR1cm4gbX19ZnVuY3Rpb24gdyhhLGIsYyxkLGUpe3JldHVybiBhKihhKigtMypiKzkqYy05KmQrMyplKSs2KmItMTIqYys2KmQpLTMqYiszKmN9ZnVuY3Rpb24geCgpe2Zvcih2YXIgYT1cIlwiLGI9YXJndW1lbnRzLmxlbmd0aC0xO2I+PTA7LS1iKXt2YXIgYz1hcmd1bWVudHNbYl07YSs9Yz09PU9iamVjdChjKT9KU09OLnN0cmluZ2lmeShjKTpjfXJldHVybiBhfXZhciB5PWEoXCIuLi9jb3JlL21haW5cIiksej1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7eS5Gb250PWZ1bmN0aW9uKGEpe3RoaXMucGFyZW50PWEsdGhpcy5jYWNoZT17fSx0aGlzLmZvbnQ9dm9pZCAwfSx5LkZvbnQucHJvdG90eXBlLmxpc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJub3QgeWV0IGltcGxlbWVudGVkXCIpfSx5LkZvbnQucHJvdG90eXBlLnRleHRCb3VuZHM9ZnVuY3Rpb24oYSxiLGMsZCxlKXtiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD1kfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIuX3RleHRTaXplO3ZhciBmPWUmJmUucmVuZGVyZXImJmUucmVuZGVyZXIuX3BJbnN0fHx0aGlzLnBhcmVudCxnPWYuX3JlbmRlcmVyLGg9Zy5fdGV4dEFsaWdufHx6LkxFRlQsaT1nLl90ZXh0QmFzZWxpbmV8fHouQkFTRUxJTkUsaj14KFwidGV4dEJvdW5kc1wiLGEsYixjLGQsaCxpKSxrPXRoaXMuY2FjaGVbal07aWYoIWspe3ZhciBsLG0sbixvLHAscT1bXSxyPVtdLHM9dGhpcy5fc2NhbGUoZCk7dGhpcy5mb250LmZvckVhY2hHbHlwaChhLGIsYyxkLGUsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YS5nZXRNZXRyaWNzKCk7cS5wdXNoKGIrZS54TWluKnMpLHEucHVzaChiK2UueE1heCpzKSxyLnB1c2goYystZS55TWluKnMpLHIucHVzaChjKy1lLnlNYXgqcyl9KSxsPU1hdGgubWluLmFwcGx5KG51bGwscSksbT1NYXRoLm1pbi5hcHBseShudWxsLHIpLG49TWF0aC5tYXguYXBwbHkobnVsbCxxKSxvPU1hdGgubWF4LmFwcGx5KG51bGwsciksaz17eDpsLHk6bSxoOm8tbSx3Om4tbCxhZHZhbmNlOmwtYn0scD10aGlzLl9oYW5kbGVBbGlnbm1lbnQoZyxhLGsueCxrLnksay53K2suYWR2YW5jZSksay54PXAueCxrLnk9cC55LHRoaXMuY2FjaGVbeChcInRleHRCb3VuZHNcIixhLGIsYyxkLGgsaSldPWt9cmV0dXJuIGt9LHkuRm9udC5wcm90b3R5cGUudGV4dFRvUG9pbnRzPWZ1bmN0aW9uKGEsYixjLGUsZyl7ZnVuY3Rpb24gaChiKXtyZXR1cm4ga1tiXS5uYW1lJiZcInNwYWNlXCI9PT1rW2JdLm5hbWV8fGEubGVuZ3RoPT09ay5sZW5ndGgmJlwiIFwiPT09YVtiXXx8a1tiXS5pbmRleCYmMz09PWtbYl0uaW5kZXh9dmFyIGk9MCxqPVtdLGs9dGhpcy5fZ2V0R2x5cGhzKGEpO2U9ZXx8dGhpcy5wYXJlbnQuX3JlbmRlcmVyLl90ZXh0U2l6ZTtmb3IodmFyIGw9MDtsPGsubGVuZ3RoO2wrKyl7aWYoIWgobCkpZm9yKHZhciBtPWtbbF0uZ2V0UGF0aChiLGMsZSksbj1mKG0uY29tbWFuZHMpLG89MDtvPG4ubGVuZ3RoO28rKylmb3IodmFyIHA9ZChuW29dLGcpLHE9MDtxPHAubGVuZ3RoO3ErKylwW3FdLngrPWksai5wdXNoKHBbcV0pO2krPWtbbF0uYWR2YW5jZVdpZHRoKnRoaXMuX3NjYWxlKGUpfXJldHVybiBqfSx5LkZvbnQucHJvdG90eXBlLl9nZXRHbHlwaHM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZm9udC5zdHJpbmdUb0dseXBocyhhKX0seS5Gb250LnByb3RvdHlwZS5fZ2V0UGF0aD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kJiZkLnJlbmRlcmVyJiZkLnJlbmRlcmVyLl9wSW5zdHx8dGhpcy5wYXJlbnQsZj1lLl9yZW5kZXJlcixnPXRoaXMuX2hhbmRsZUFsaWdubWVudChmLGEsYixjKTtyZXR1cm4gdGhpcy5mb250LmdldFBhdGgoYSxnLngsZy55LGYuX3RleHRTaXplLGQpfSx5LkZvbnQucHJvdG90eXBlLl9nZXRQYXRoRGF0YT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0zO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhJiZhcmd1bWVudHMubGVuZ3RoPjI/YT10aGlzLl9nZXRQYXRoKGEsYixjLGQpOlwib2JqZWN0XCI9PXR5cGVvZiBiJiYoZD1iKSxkJiZcIm51bWJlclwiPT10eXBlb2YgZC5kZWNpbWFscyYmKGU9ZC5kZWNpbWFscyksYS50b1BhdGhEYXRhKGUpfSx5LkZvbnQucHJvdG90eXBlLl9nZXRTVkc9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9MztyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYSYmYXJndW1lbnRzLmxlbmd0aD4yP2E9dGhpcy5fZ2V0UGF0aChhLGIsYyxkKTpcIm9iamVjdFwiPT10eXBlb2YgYiYmKGQ9YiksZCYmKFwibnVtYmVyXCI9PXR5cGVvZiBkLmRlY2ltYWxzJiYoZT1kLmRlY2ltYWxzKSxcIm51bWJlclwiPT10eXBlb2YgZC5zdHJva2VXaWR0aCYmKGEuc3Ryb2tlV2lkdGg9ZC5zdHJva2VXaWR0aCksdm9pZCAwIT09ZC5maWxsJiYoYS5maWxsPWQuZmlsbCksdm9pZCAwIT09ZC5zdHJva2UmJihhLnN0cm9rZT1kLnN0cm9rZSkpLGEudG9TVkcoZSl9LHkuRm9udC5wcm90b3R5cGUuX3JlbmRlclBhdGg9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZj1kJiZkLnJlbmRlcmVyfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIsZz1mLmRyYXdpbmdDb250ZXh0O2U9XCJvYmplY3RcIj09dHlwZW9mIGEmJmEuY29tbWFuZHM/YS5jb21tYW5kczp0aGlzLl9nZXRQYXRoKGEsYixjLGQpLmNvbW1hbmRzLGcuYmVnaW5QYXRoKCk7Zm9yKHZhciBoPTA7aDxlLmxlbmd0aDtoKz0xKXt2YXIgaT1lW2hdO1wiTVwiPT09aS50eXBlP2cubW92ZVRvKGkueCxpLnkpOlwiTFwiPT09aS50eXBlP2cubGluZVRvKGkueCxpLnkpOlwiQ1wiPT09aS50eXBlP2cuYmV6aWVyQ3VydmVUbyhpLngxLGkueTEsaS54MixpLnkyLGkueCxpLnkpOlwiUVwiPT09aS50eXBlP2cucXVhZHJhdGljQ3VydmVUbyhpLngxLGkueTEsaS54LGkueSk6XCJaXCI9PT1pLnR5cGUmJmcuY2xvc2VQYXRoKCl9cmV0dXJuIGYuX2RvU3Ryb2tlJiZmLl9zdHJva2VTZXQmJmcuc3Ryb2tlKCksZi5fZG9GaWxsJiYoZi5fZmlsbFNldHx8Zi5fc2V0RmlsbCh6Ll9ERUZBVUxUX1RFWFRfRklMTCksZy5maWxsKCkpLHRoaXN9LHkuRm9udC5wcm90b3R5cGUuX3RleHRXaWR0aD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmZvbnQuZ2V0QWR2YW5jZVdpZHRoKGEsYil9LHkuRm9udC5wcm90b3R5cGUuX3RleHRBc2NlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZm9udC5hc2NlbmRlcip0aGlzLl9zY2FsZShhKX0seS5Gb250LnByb3RvdHlwZS5fdGV4dERlc2NlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuLXRoaXMuZm9udC5kZXNjZW5kZXIqdGhpcy5fc2NhbGUoYSl9LHkuRm9udC5wcm90b3R5cGUuX3NjYWxlPWZ1bmN0aW9uKGEpe3JldHVybiAxL3RoaXMuZm9udC51bml0c1BlckVtKihhfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIuX3RleHRTaXplKX0seS5Gb250LnByb3RvdHlwZS5faGFuZGxlQWxpZ25tZW50PWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9YS5fdGV4dFNpemU7c3dpdGNoKHZvaWQgMD09PWUmJihlPXRoaXMuX3RleHRXaWR0aChiLGYpKSxhLl90ZXh0QWxpZ24pe2Nhc2Ugei5DRU5URVI6Yy09ZS8yO2JyZWFrO2Nhc2Ugei5SSUdIVDpjLT1lfXN3aXRjaChhLl90ZXh0QmFzZWxpbmUpe2Nhc2Ugei5UT1A6ZCs9dGhpcy5fdGV4dEFzY2VudChmKTticmVhaztjYXNlIHouQ0VOVEVSOmQrPXRoaXMuX3RleHRBc2NlbnQoZikvMjticmVhaztjYXNlIHouQk9UVE9NOmQtPXRoaXMuX3RleHREZXNjZW50KGYpfXJldHVybnt4OmMseTpkfX0sYi5leHBvcnRzPXl9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDYwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5wdXNoKGIpLGF9LGQucHJvdG90eXBlLmFycmF5Q29weT1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7dm9pZCAwIT09ZT8oZz1NYXRoLm1pbihlLGEubGVuZ3RoKSxmPWQsYT1hLnNsaWNlKGIsZytiKSk6KHZvaWQgMCE9PWM/KGc9YyxnPU1hdGgubWluKGcsYS5sZW5ndGgpKTpnPWEubGVuZ3RoLGY9MCxjPWIsYT1hLnNsaWNlKDAsZykpLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoYyxbZixnXS5jb25jYXQoYSkpfSxkLnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5jb25jYXQoYil9LGQucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmV2ZXJzZSgpfSxkLnByb3RvdHlwZS5zaG9ydGVuPWZ1bmN0aW9uKGEpe3JldHVybiBhLnBvcCgpLGF9LGQucHJvdG90eXBlLnNodWZmbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1BcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3JiZBcnJheUJ1ZmZlci5pc1ZpZXcoYSk7YT1ifHxjP2E6YS5zbGljZSgpO2Zvcih2YXIgZCxlLGY9YS5sZW5ndGg7Zj4xOylkPU1hdGgucmFuZG9tKCkqZnwwLGU9YVstLWZdLGFbZl09YVtkXSxhW2RdPWU7cmV0dXJuIGF9LGQucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iP2Euc2xpY2UoMCxNYXRoLm1pbihiLGEubGVuZ3RoKSk6YSxkPWI/YS5zbGljZShNYXRoLm1pbihiLGEubGVuZ3RoKSk6W107cmV0dXJuIGM9XCJzdHJpbmdcIj09dHlwZW9mIGNbMF0/Yy5zb3J0KCk6Yy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEtYn0pLGMuY29uY2F0KGQpfSxkLnByb3RvdHlwZS5zcGxpY2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGEsW2MsMF0uY29uY2F0KGIpKSxhfSxkLnByb3RvdHlwZS5zdWJzZXQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB2b2lkIDAhPT1jP2Euc2xpY2UoYixiK2MpOmEuc2xpY2UoYixhLmxlbmd0aCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDYxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5mbG9hdD1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKHBhcnNlRmxvYXQpOnBhcnNlRmxvYXQoYSl9LGQucHJvdG90eXBlLmludD1mdW5jdGlvbihhLGIpe3JldHVybiBiPWJ8fDEwLFwic3RyaW5nXCI9PXR5cGVvZiBhP3BhcnNlSW50KGEsYik6XCJudW1iZXJcIj09dHlwZW9mIGE/MHxhOlwiYm9vbGVhblwiPT10eXBlb2YgYT9hPzE6MDphIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGQucHJvdG90eXBlLmludChhLGIpfSk6dm9pZCAwfSxkLnByb3RvdHlwZS5zdHI9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChkLnByb3RvdHlwZS5zdHIpOlN0cmluZyhhKX0sZC5wcm90b3R5cGUuYm9vbGVhbj1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYT8wIT09YTpcInN0cmluZ1wiPT10eXBlb2YgYT9cInRydWVcIj09PWEudG9Mb3dlckNhc2UoKTpcImJvb2xlYW5cIj09dHlwZW9mIGE/YTphIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUuYm9vbGVhbik6dm9pZCAwfSxkLnByb3RvdHlwZS5ieXRlPWZ1bmN0aW9uKGEpe3ZhciBiPWQucHJvdG90eXBlLmludChhLDEwKTtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYj8oYisxMjgpJTI1Ni0xMjg6YiBpbnN0YW5jZW9mIEFycmF5P2IubWFwKGQucHJvdG90eXBlLmJ5dGUpOnZvaWQgMH0sZC5wcm90b3R5cGUuY2hhcj1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgYXx8aXNOYU4oYSk/YSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLmNoYXIpOlwic3RyaW5nXCI9PXR5cGVvZiBhP2QucHJvdG90eXBlLmNoYXIocGFyc2VJbnQoYSwxMCkpOnZvaWQgMDpTdHJpbmcuZnJvbUNoYXJDb2RlKGEpfSxkLnByb3RvdHlwZS51bmNoYXI9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGEmJjE9PT1hLmxlbmd0aD9hLmNoYXJDb2RlQXQoMCk6YSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLnVuY2hhcik6dm9pZCAwfSxkLnByb3RvdHlwZS5oZXg9ZnVuY3Rpb24oYSxiKXtpZihiPXZvaWQgMD09PWJ8fG51bGw9PT1iP2I9ODpiLGEgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGQucHJvdG90eXBlLmhleChhLGIpfSk7aWYoXCJudW1iZXJcIj09dHlwZW9mIGEpe2E8MCYmKGE9NDI5NDk2NzI5NSthKzEpO2Zvcih2YXIgYz1OdW1iZXIoYSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7Yy5sZW5ndGg8YjspYz1cIjBcIitjO3JldHVybiBjLmxlbmd0aD49YiYmKGM9Yy5zdWJzdHJpbmcoYy5sZW5ndGgtYixjLmxlbmd0aCkpLGN9fSxkLnByb3RvdHlwZS51bmhleD1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLnVuaGV4KTpwYXJzZUludChcIjB4XCIrYSwxNil9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDYyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyl7dmFyIGQ9YTwwLGU9ZD9hLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDEpOmEudG9TdHJpbmcoKSxmPWUuaW5kZXhPZihcIi5cIiksZz0tMSE9PWY/ZS5zdWJzdHJpbmcoMCxmKTplLGg9LTEhPT1mP2Uuc3Vic3RyaW5nKGYrMSk6XCJcIixpPWQ/XCItXCI6XCJcIjtpZih2b2lkIDAhPT1jKXt2YXIgaj1cIlwiOygtMSE9PWZ8fGMtaC5sZW5ndGg+MCkmJihqPVwiLlwiKSxoLmxlbmd0aD5jJiYoaD1oLnN1YnN0cmluZygwLGMpKTtmb3IodmFyIGs9MDtrPGItZy5sZW5ndGg7aysrKWkrPVwiMFwiO2krPWcsaSs9aixpKz1oO2Zvcih2YXIgbD0wO2w8Yy1oLmxlbmd0aDtsKyspaSs9XCIwXCI7cmV0dXJuIGl9Zm9yKHZhciBtPTA7bTxNYXRoLm1heChiLWcubGVuZ3RoLDApO20rKylpKz1cIjBcIjtyZXR1cm4gaSs9ZX1mdW5jdGlvbiBlKGEsYil7YT1hLnRvU3RyaW5nKCk7dmFyIGM9YS5pbmRleE9mKFwiLlwiKSxkPS0xIT09Yz9hLnN1YnN0cmluZyhjKTpcIlwiLGU9LTEhPT1jP2Euc3Vic3RyaW5nKDAsYyk6YTtpZihlPWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLFwiLFwiKSwwPT09YilkPVwiXCI7ZWxzZSBpZih2b2lkIDAhPT1iKWlmKGI+ZC5sZW5ndGgpe2QrPS0xPT09Yz9cIi5cIjpcIlwiO2Zvcih2YXIgZj1iLWQubGVuZ3RoKzEsZz0wO2c8ZjtnKyspZCs9XCIwXCJ9ZWxzZSBkPWQuc3Vic3RyaW5nKDAsYisxKTtyZXR1cm4gZStkfWZ1bmN0aW9uIGYoYSl7cmV0dXJuIHBhcnNlRmxvYXQoYSk+MD9cIitcIithLnRvU3RyaW5nKCk6YS50b1N0cmluZygpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIHBhcnNlRmxvYXQoYSk+MD9cIiBcIithLnRvU3RyaW5nKCk6YS50b1N0cmluZygpfXZhciBoPWEoXCIuLi9jb3JlL21haW5cIik7YShcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxoLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcImpvaW5cIixhcmd1bWVudHMpLGEuam9pbihiKX0saC5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWF0Y2hcIixhcmd1bWVudHMpLGEubWF0Y2goYil9LGgucHJvdG90eXBlLm1hdGNoQWxsPWZ1bmN0aW9uKGEsYil7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWF0Y2hBbGxcIixhcmd1bWVudHMpO2Zvcih2YXIgYz1uZXcgUmVnRXhwKGIsXCJnXCIpLGQ9Yy5leGVjKGEpLGU9W107bnVsbCE9PWQ7KWUucHVzaChkKSxkPWMuZXhlYyhhKTtyZXR1cm4gZX0saC5wcm90b3R5cGUubmY9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJuZlwiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBkKGEsYixjKX0pOlwiW29iamVjdCBBcmd1bWVudHNdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk/Mz09PWEubGVuZ3RoP3RoaXMubmYoYVswXSxhWzFdLGFbMl0pOjI9PT1hLmxlbmd0aD90aGlzLm5mKGFbMF0sYVsxXSk6dGhpcy5uZihhWzBdKTpkKGEsYixjKX0saC5wcm90b3R5cGUubmZjPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5mY1wiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBlKGEsYil9KTplKGEsYil9LGgucHJvdG90eXBlLm5mcD1mdW5jdGlvbigpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5mcFwiLGFyZ3VtZW50cyk7dmFyIGE9aC5wcm90b3R5cGUubmYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZik6ZihhKX0saC5wcm90b3R5cGUubmZzPWZ1bmN0aW9uKCl7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibmZzXCIsYXJndW1lbnRzKTt2YXIgYT1oLnByb3RvdHlwZS5uZi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChnKTpnKGEpfSxoLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihhLGIpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzcGxpdFwiLGFyZ3VtZW50cyksYS5zcGxpdChiKX0saC5wcm90b3R5cGUuc3BsaXRUb2tlbnM9ZnVuY3Rpb24oYSxiKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzcGxpdFRva2Vuc1wiLGFyZ3VtZW50cyk7dmFyIGM7aWYodm9pZCAwIT09Yil7dmFyIGQ9YixlPS9cXF0vZy5leGVjKGQpLGY9L1xcWy9nLmV4ZWMoZCk7ZiYmZT8oZD1kLnNsaWNlKDAsZS5pbmRleCkrZC5zbGljZShlLmluZGV4KzEpLGY9L1xcWy9nLmV4ZWMoZCksZD1kLnNsaWNlKDAsZi5pbmRleCkrZC5zbGljZShmLmluZGV4KzEpLGM9bmV3IFJlZ0V4cChcIltcXFxcW1wiK2QrXCJcXFxcXV1cIixcImdcIikpOmU/KGQ9ZC5zbGljZSgwLGUuaW5kZXgpK2Quc2xpY2UoZS5pbmRleCsxKSxjPW5ldyBSZWdFeHAoXCJbXCIrZCtcIlxcXFxdXVwiLFwiZ1wiKSk6Zj8oZD1kLnNsaWNlKDAsZi5pbmRleCkrZC5zbGljZShmLmluZGV4KzEpLGM9bmV3IFJlZ0V4cChcIltcIitkK1wiXFxcXFtdXCIsXCJnXCIpKTpjPW5ldyBSZWdFeHAoXCJbXCIrZCtcIl1cIixcImdcIil9ZWxzZSBjPS9cXHMvZztyZXR1cm4gYS5zcGxpdChjKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGF9KX0saC5wcm90b3R5cGUudHJpbT1mdW5jdGlvbihhKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidHJpbVwiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKHRoaXMudHJpbSk6YS50cmltKCl9LGIuZXhwb3J0cz1ofSx7XCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmRheT1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0RGF0ZSgpfSxkLnByb3RvdHlwZS5ob3VyPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRIb3VycygpfSxkLnByb3RvdHlwZS5taW51dGU9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldE1pbnV0ZXMoKX0sZC5wcm90b3R5cGUubWlsbGlzPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKX0sZC5wcm90b3R5cGUubW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldE1vbnRoKCkrMX0sZC5wcm90b3R5cGUuc2Vjb25kPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRTZWNvbmRzKCl9LGQucHJvdG90eXBlLnllYXI9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldEZ1bGxZZWFyKCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDY0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTthKFwiLi9wNS5HZW9tZXRyeVwiKTt2YXIgZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJwbGFuZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwbGFuZVwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPTEpLHZvaWQgMD09PWUmJihlPTEpO3ZhciBmPVwicGxhbmV8XCIrYytcInxcIitlO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChmKSl7dmFyIGc9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYixjLGU9MDtlPD10aGlzLmRldGFpbFk7ZSsrKXtiPWUvdGhpcy5kZXRhaWxZO2Zvcih2YXIgZj0wO2Y8PXRoaXMuZGV0YWlsWDtmKyspYT1mL3RoaXMuZGV0YWlsWCxjPW5ldyBkLlZlY3RvcihhLS41LGItLjUsMCksdGhpcy52ZXJ0aWNlcy5wdXNoKGMpLHRoaXMudXZzLnB1c2goYSxiKX19LGg9bmV3IGQuR2VvbWV0cnkoYyxlLGcpO2guY29tcHV0ZUZhY2VzKCkuY29tcHV0ZU5vcm1hbHMoKSxjPD0xJiZlPD0xP2guX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlIG9uIHBsYW5lIG9iamVjdHMgd2l0aCBtb3JlIHRoYW4gMSBkZXRhaWxYIG9yIDEgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGYsaCl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGYsYSxiLDEpLHRoaXN9LGQucHJvdG90eXBlLmJveD1mdW5jdGlvbihhLGIsYyxlLGYpe3RoaXMuX2Fzc2VydDNkKFwiYm94XCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJveFwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPWIpO3ZhciBnPXRoaXMuX3JlbmRlcmVyLmF0dHJpYnV0ZXMmJnRoaXMuX3JlbmRlcmVyLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZzt2b2lkIDA9PT1lJiYoZT1nPzE6NCksdm9pZCAwPT09ZiYmKGY9Zz8xOjQpO3ZhciBoPVwiYm94fFwiK2UrXCJ8XCIrZjtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goaCkpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIGE9W1swLDQsMiw2XSxbMSwzLDUsN10sWzAsMSw0LDVdLFsyLDYsMyw3XSxbMCwyLDEsM10sWzQsNSw2LDddXTt0aGlzLnN0cm9rZUluZGljZXM9W1swLDFdLFsxLDNdLFszLDJdLFs2LDddLFs4LDldLFs5LDExXSxbMTQsMTVdLFsxNiwxN10sWzE3LDE5XSxbMTgsMTldLFsyMCwyMV0sWzIyLDIzXV07Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspe2Zvcih2YXIgYz1hW2JdLGU9NCpiLGY9MDtmPDQ7ZisrKXt2YXIgZz1jW2ZdLGg9bmV3IGQuVmVjdG9yKCgyKigxJmcpLTEpLzIsKCgyJmcpLTEpLzIsKCg0JmcpLzItMSkvMik7dGhpcy52ZXJ0aWNlcy5wdXNoKGgpLHRoaXMudXZzLnB1c2goMSZmLCgyJmYpLzIpfXRoaXMuZmFjZXMucHVzaChbZSxlKzEsZSsyXSksdGhpcy5mYWNlcy5wdXNoKFtlKzIsZSsxLGUrM10pfX0saj1uZXcgZC5HZW9tZXRyeShlLGYsaSk7ai5jb21wdXRlTm9ybWFscygpLGU8PTQmJmY8PTQ/ai5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gYm94IG9iamVjdHMgd2l0aCBtb3JlIHRoYW4gNCBkZXRhaWxYIG9yIDQgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGgsail9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGgsYSxiLGMpLHRoaXN9LGQucHJvdG90eXBlLnNwaGVyZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwic3BoZXJlXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwaGVyZVwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPTI0KSx2b2lkIDA9PT1jJiYoYz0xNiksdGhpcy5lbGxpcHNvaWQoYSxhLGEsYixjKSx0aGlzfTt2YXIgZj1mdW5jdGlvbihhLGIsYyxlLGYsZyxoKXthPWE8PTA/MTphLGI9YjwwPzA6YixjPWM8PTA/YTpjLGU9ZTwzPzM6ZSxmPWY8MT8xOmYsZz12b2lkIDA9PT1nfHxnLGg9dm9pZCAwPT09aD8wIT09YjpoO3ZhciBpLGosayxsLG0sbj1nPy0yOjAsbz1mKyhoPzI6MCkscD17fSxxPU1hdGguYXRhbjIoYS1iLGMpO2ZvcihpPW47aTw9bzsrK2kpe3ZhciByLHM9aS9mLHQ9YypzO2ZvcihpPDA/KHQ9MCxzPTAscj1hKTppPmY/KHQ9YyxzPTEscj1iKTpyPWErKGItYSkqcywtMiE9PWkmJmkhPT1mKzJ8fChyPTApLHQtPWMvMixwW2ldPTA9PT1yPzE6ZSxqPTA7ajxwW2ldOysrail7dmFyIHU9ai9lO3RoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoTWF0aC5zaW4oMip1Kk1hdGguUEkpKnIsdCxNYXRoLmNvcygyKnUqTWF0aC5QSSkqcikpLHRoaXMudmVydGV4Tm9ybWFscy5wdXNoKG5ldyBkLlZlY3RvcihpPDB8fGk+Zj8wOk1hdGguc2luKDIqdSpNYXRoLlBJKSpNYXRoLmNvcyhxKSxpPDA/LTE6aT5mPzE6TWF0aC5zaW4ocSksaTwwfHxpPmY/MDpNYXRoLmNvcygyKnUqTWF0aC5QSSkqTWF0aC5jb3MocSkpKSx0aGlzLnV2cy5wdXNoKHUscyl9fXZhciB2PTA7aWYoZyl7Zm9yKGs9MDtrPHBbLTFdOysrayltPShrKzEpJXBbLTFdLHRoaXMuZmFjZXMucHVzaChbdix2KzErbSx2KzEra10pO3YrPXBbLTJdK3BbLTFdfWZvcihpPTA7aTxmOysraSl7Zm9yKGo9MDtqPHBbaV07KytqKTE9PT1wW2krMV0/KGw9KGorMSklcFtpXSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K2wsditwW2ldXSkpOihsPShqKzEpJXBbaV0sdGhpcy5mYWNlcy5wdXNoKFt2K2osditsLHYrcFtpXStsXSksdGhpcy5mYWNlcy5wdXNoKFt2K2osditwW2ldK2wsditwW2ldK2pdKSk7dis9cFtpXX1pZihoKWZvcih2Kz1wW2ZdLGo9MDtqPHBbZisxXTsrK2opbD0oaisxKSVwW2YrMV0sdGhpcy5mYWNlcy5wdXNoKFt2K2osditsLHYrcFtmKzFdXSl9O2QucHJvdG90eXBlLmN5bGluZGVyPWZ1bmN0aW9uKGEsYixjLGUsZyxoKXt0aGlzLl9hc3NlcnQzZChcImN5bGluZGVyXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN5bGluZGVyXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9MjQpLHZvaWQgMD09PWUmJihlPTEpLHZvaWQgMD09PWgmJihoPSEwKSxcbnZvaWQgMD09PWcmJihnPSEwKTt2YXIgaT1cImN5bGluZGVyfFwiK2MrXCJ8XCIrZStcInxcIitnK1wifFwiK2g7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGkpKXt2YXIgaj1uZXcgZC5HZW9tZXRyeShjLGUpO2YuY2FsbChqLDEsMSwxLGMsZSxnLGgpLGouY29tcHV0ZU5vcm1hbHMoKSxjPD0yNCYmZTw9MTY/ai5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gY3lsaW5kZXIgb2JqZWN0cyB3aXRoIG1vcmUgdGhhbiAyNCBkZXRhaWxYIG9yIDE2IGRldGFpbFlcIiksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhpLGopfXJldHVybiB0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVyc1NjYWxlZChpLGEsYixhKSx0aGlzfSxkLnByb3RvdHlwZS5jb25lPWZ1bmN0aW9uKGEsYixjLGUsZyl7dGhpcy5fYXNzZXJ0M2QoXCJjb25lXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvbmVcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj1hKSx2b2lkIDA9PT1jJiYoYz0yNCksdm9pZCAwPT09ZSYmKGU9MSksdm9pZCAwPT09ZyYmKGc9ITApO3ZhciBoPVwiY29uZXxcIitjK1wifFwiK2UrXCJ8XCIrZztpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goaCkpe3ZhciBpPW5ldyBkLkdlb21ldHJ5KGMsZSk7Zi5jYWxsKGksMSwwLDEsYyxlLGcsITEpLGkuY29tcHV0ZU5vcm1hbHMoKSxjPD0yNCYmZTw9MTY/aS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gY29uZSBvYmplY3RzIHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMTYgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGgsaSl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGgsYSxiLGEpLHRoaXN9LGQucHJvdG90eXBlLmVsbGlwc29pZD1mdW5jdGlvbihhLGIsYyxlLGYpe3RoaXMuX2Fzc2VydDNkKFwiZWxsaXBzb2lkXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImVsbGlwc29pZFwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPWEpLHZvaWQgMD09PWUmJihlPTI0KSx2b2lkIDA9PT1mJiYoZj0xNik7dmFyIGc9XCJlbGxpcHNvaWR8XCIrZStcInxcIitmO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChnKSl7dmFyIGg9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD10aGlzLmRldGFpbFk7YSsrKWZvcih2YXIgYj1hL3RoaXMuZGV0YWlsWSxjPU1hdGguUEkqYi1NYXRoLlBJLzIsZT1NYXRoLmNvcyhjKSxmPU1hdGguc2luKGMpLGc9MDtnPD10aGlzLmRldGFpbFg7ZysrKXt2YXIgaD1nL3RoaXMuZGV0YWlsWCxpPTIqTWF0aC5QSSpoLGo9TWF0aC5jb3MoaSksaz1NYXRoLnNpbihpKSxsPW5ldyBkLlZlY3RvcihlKmssZixlKmopO3RoaXMudmVydGljZXMucHVzaChsKSx0aGlzLnZlcnRleE5vcm1hbHMucHVzaChsKSx0aGlzLnV2cy5wdXNoKGgsYil9fSxpPW5ldyBkLkdlb21ldHJ5KGUsZixoKTtpLmNvbXB1dGVGYWNlcygpLGU8PTI0JiZmPD0yND9pLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBlbGxpcHNvaWRzIHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMjQgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGcsaSl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGcsYSxiLGMpLHRoaXN9LGQucHJvdG90eXBlLnRvcnVzPWZ1bmN0aW9uKGEsYixjLGUpe2lmKHRoaXMuX2Fzc2VydDNkKFwidG9ydXNcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidG9ydXNcIixhcmd1bWVudHMpLHZvaWQgMD09PWEpYT01MDtlbHNlIGlmKCFhKXJldHVybjtpZih2b2lkIDA9PT1iKWI9MTA7ZWxzZSBpZighYilyZXR1cm47dm9pZCAwPT09YyYmKGM9MjQpLHZvaWQgMD09PWUmJihlPTE2KTt2YXIgZj0oYi9hKS50b1ByZWNpc2lvbig0KSxnPVwidG9ydXN8XCIrZitcInxcIitjK1wifFwiK2U7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGcpKXt2YXIgaD1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspZm9yKHZhciBiPWEvdGhpcy5kZXRhaWxZLGM9MipNYXRoLlBJKmIsZT1NYXRoLmNvcyhjKSxnPU1hdGguc2luKGMpLGg9MStmKmUsaT0wO2k8PXRoaXMuZGV0YWlsWDtpKyspe3ZhciBqPWkvdGhpcy5kZXRhaWxYLGs9MipNYXRoLlBJKmosbD1NYXRoLmNvcyhrKSxtPU1hdGguc2luKGspLG49bmV3IGQuVmVjdG9yKGgqbCxoKm0sZipnKSxvPW5ldyBkLlZlY3RvcihlKmwsZSptLGcpO3RoaXMudmVydGljZXMucHVzaChuKSx0aGlzLnZlcnRleE5vcm1hbHMucHVzaChvKSx0aGlzLnV2cy5wdXNoKGosYil9fSxpPW5ldyBkLkdlb21ldHJ5KGMsZSxoKTtpLmNvbXB1dGVGYWNlcygpLGM8PTI0JiZlPD0xNj9pLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZXMgb24gdG9ydXMgb2JqZWN0IHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMTYgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGcsaSl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGcsYSxhLGEpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3VzZVBvaW50U2hhZGVyKCksdGhpcy5jdXJQb2ludFNoYWRlci5iaW5kU2hhZGVyKCksdm9pZCAwPT09YyYmKGM9MCk7dmFyIGU9W107cmV0dXJuIGUucHVzaChuZXcgZC5WZWN0b3IoYSxiLGMpKSx0aGlzLl9kcmF3UG9pbnRzKGUsdGhpcy5fcG9pbnRWZXJ0ZXhCdWZmZXIpLHRoaXMuY3VyUG9pbnRTaGFkZXIudW5iaW5kU2hhZGVyKCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS50cmlhbmdsZT1mdW5jdGlvbihhKXt2YXIgYj1hWzBdLGM9YVsxXSxlPWFbMl0sZj1hWzNdLGc9YVs0XSxoPWFbNV0saT1cInRyaVwiO2lmKCF0aGlzLmdlb21ldHJ5SW5IYXNoKGkpKXt2YXIgaj1mdW5jdGlvbigpe3ZhciBhPVtdO2EucHVzaChuZXcgZC5WZWN0b3IoMCwwLDApKSxhLnB1c2gobmV3IGQuVmVjdG9yKDAsMSwwKSksYS5wdXNoKG5ldyBkLlZlY3RvcigxLDAsMCkpLHRoaXMuc3Ryb2tlSW5kaWNlcz1bWzAsMV0sWzEsMl0sWzIsMF1dLHRoaXMudmVydGljZXM9YSx0aGlzLmZhY2VzPVtbMCwxLDJdXSx0aGlzLnV2cz1bMCwwLDAsMSwxLDFdfSxrPW5ldyBkLkdlb21ldHJ5KDEsMSxqKTtrLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSxrLmNvbXB1dGVOb3JtYWxzKCksdGhpcy5jcmVhdGVCdWZmZXJzKGksayl9dmFyIGw9dGhpcy51TVZNYXRyaXguY29weSgpO3RyeXt2YXIgbT1uZXcgZC5NYXRyaXgoW2UtYixmLWMsMCwwLGctYixoLWMsMCwwLDAsMCwxLDAsYixjLDAsMV0pLm11bHQodGhpcy51TVZNYXRyaXgpO3RoaXMudU1WTWF0cml4PW0sdGhpcy5kcmF3QnVmZmVycyhpKX1maW5hbGx5e3RoaXMudU1WTWF0cml4PWx9cmV0dXJuIHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZWxsaXBzZT1mdW5jdGlvbihhKXt0aGlzLmFyYyhhWzBdLGFbMV0sYVsyXSxhWzNdLDAsZS5UV09fUEksZS5PUEVOLGFbNF0pfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmFyYz1mdW5jdGlvbihhKXt2YXIgYixjLGY9YXJndW1lbnRzWzBdLGc9YXJndW1lbnRzWzFdLGg9YXJndW1lbnRzWzJdLGk9YXJndW1lbnRzWzNdLGo9YXJndW1lbnRzWzRdLGs9YXJndW1lbnRzWzVdLGw9YXJndW1lbnRzWzZdLG09YXJndW1lbnRzWzddfHwyNTtpZihNYXRoLmFicyhrLWopPj1lLlRXT19QST8oYj1cImVsbGlwc2VcIixjPWIrXCJ8XCIrbStcInxcIik6KGI9XCJhcmNcIixjPWIrXCJ8XCIraitcInxcIitrK1wifFwiK2wrXCJ8XCIrbStcInxcIiksIXRoaXMuZ2VvbWV0cnlJbkhhc2goYykpe3ZhciBuPWZ1bmN0aW9uKCl7aWYodGhpcy5zdHJva2VJbmRpY2VzPVtdLGoudG9GaXhlZCgxMCkhPT1rLnRvRml4ZWQoMTApKXtsIT09ZS5QSUUmJnZvaWQgMCE9PWx8fCh0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKC41LC41LDApKSx0aGlzLnV2cy5wdXNoKFsuNSwuNV0pKTtmb3IodmFyIGE9MDthPD1tO2ErKyl7dmFyIGI9YS9tLGM9KGstaikqYitqLGY9LjUrTWF0aC5jb3MoYykvMixnPS41K01hdGguc2luKGMpLzI7dGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihmLGcsMCkpLHRoaXMudXZzLnB1c2goW2YsZ10pLGE8bS0xJiYodGhpcy5mYWNlcy5wdXNoKFswLGErMSxhKzJdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbYSsxLGErMl0pKX1zd2l0Y2gobCl7Y2FzZSBlLlBJRTp0aGlzLmZhY2VzLnB1c2goWzAsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMix0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFt0aGlzLnZlcnRpY2VzLmxlbmd0aC0yLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCx0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSk7YnJlYWs7Y2FzZSBlLkNIT1JEOnRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLDFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCx0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSk7YnJlYWs7Y2FzZSBlLk9QRU46dGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsMV0pO2JyZWFrO2RlZmF1bHQ6dGhpcy5mYWNlcy5wdXNoKFswLHRoaXMudmVydGljZXMubGVuZ3RoLTIsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFt0aGlzLnZlcnRpY2VzLmxlbmd0aC0yLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKX19fSxvPW5ldyBkLkdlb21ldHJ5KG0sMSxuKTtvLmNvbXB1dGVOb3JtYWxzKCksbTw9NTA/by5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKG8pOmNvbnNvbGUubG9nKFwiQ2Fubm90IHN0cm9rZSBcIitiK1wiIHdpdGggbW9yZSB0aGFuIDUwIGRldGFpbFwiKSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoYyxvKX12YXIgcD10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3RoaXMudU1WTWF0cml4LnRyYW5zbGF0ZShbZixnLDBdKSx0aGlzLnVNVk1hdHJpeC5zY2FsZShoLGksMSksdGhpcy5kcmF3QnVmZmVycyhjKX1maW5hbGx5e3RoaXMudU1WTWF0cml4PXB9cmV0dXJuIHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucmVjdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZyxjPWFbMF0sZT1hWzFdLGY9YVsyXSxnPWFbM10saD1hWzRdfHwoYj8xOjI0KSxpPWFbNV18fChiPzE6MTYpLGo9XCJyZWN0fFwiK2grXCJ8XCIraTtpZighdGhpcy5nZW9tZXRyeUluSGFzaChqKSl7dmFyIGs9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD10aGlzLmRldGFpbFk7YSsrKWZvcih2YXIgYj1hL3RoaXMuZGV0YWlsWSxjPTA7Yzw9dGhpcy5kZXRhaWxYO2MrKyl7dmFyIGU9Yy90aGlzLmRldGFpbFgsZj1uZXcgZC5WZWN0b3IoZSxiLDApO3RoaXMudmVydGljZXMucHVzaChmKSx0aGlzLnV2cy5wdXNoKGUsYil9aD4wJiZpPjAmJih0aGlzLnN0cm9rZUluZGljZXM9W1swLGhdLFtoLChoKzEpKihpKzEpLTFdLFsoaCsxKSooaSsxKS0xLChoKzEpKmldLFsoaCsxKSppLDBdXSl9LGw9bmV3IGQuR2VvbWV0cnkoaCxpLGspO2wuY29tcHV0ZUZhY2VzKCkuY29tcHV0ZU5vcm1hbHMoKS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCksdGhpcy5jcmVhdGVCdWZmZXJzKGosbCl9dmFyIG09dGhpcy51TVZNYXRyaXguY29weSgpO3RyeXt0aGlzLnVNVk1hdHJpeC50cmFuc2xhdGUoW2MsZSwwXSksdGhpcy51TVZNYXRyaXguc2NhbGUoZixnLDEpLHRoaXMuZHJhd0J1ZmZlcnMoail9ZmluYWxseXt0aGlzLnVNVk1hdHJpeD1tfXJldHVybiB0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnF1YWQ9ZnVuY3Rpb24oYSxiLGMsZSxmLGcsaCxpKXt2YXIgaj1cInF1YWR8XCIrYStcInxcIitiK1wifFwiK2MrXCJ8XCIrZStcInxcIitmK1wifFwiK2crXCJ8XCIraCtcInxcIitpO2lmKCF0aGlzLmdlb21ldHJ5SW5IYXNoKGopKXt2YXIgaz1mdW5jdGlvbigpe3RoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoYSxiLDApKSx0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGMsZSwwKSksdGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihmLGcsMCkpLHRoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoaCxpLDApKSx0aGlzLnV2cy5wdXNoKDAsMCwxLDAsMSwxLDAsMSksdGhpcy5zdHJva2VJbmRpY2VzPVtbMCwxXSxbMSwyXSxbMiwzXSxbMywwXV19LGw9bmV3IGQuR2VvbWV0cnkoMiwyLGspO2wuY29tcHV0ZU5vcm1hbHMoKS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCksbC5mYWNlcz1bWzAsMSwyXSxbMiwzLDBdXSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoaixsKX1yZXR1cm4gdGhpcy5kcmF3QnVmZmVycyhqKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmJlemllcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSxqLGssbCl7OD09PWFyZ3VtZW50cy5sZW5ndGgmJihqPWcsaz1oLGc9ZSxoPWQsZD1jLGU9ZCxjPWY9aT1sPTApO3ZhciBtPXRoaXMuX3BJbnN0Ll9iZXppZXJEZXRhaWx8fDIwO3RoaXMuYmVnaW5TaGFwZSgpO2Zvcih2YXIgbj0wO248PW07bisrKXt2YXIgbz1NYXRoLnBvdygxLW4vbSwzKSxwPW4vbSozKk1hdGgucG93KDEtbi9tLDIpLHE9MypNYXRoLnBvdyhuL20sMikqKDEtbi9tKSxyPU1hdGgucG93KG4vbSwzKTt0aGlzLnZlcnRleChhKm8rZCpwK2cqcStqKnIsYipvK2UqcCtoKnEraypyLGMqbytmKnAraSpxK2wqcil9cmV0dXJuIHRoaXMuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmN1cnZlPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpLGosayxsKXs4PT09YXJndW1lbnRzLmxlbmd0aCYmKGo9ZyxrPWgsZz1lLGg9ZCxkPWMsZT1kLGM9Zj1pPWw9MCk7dmFyIG09dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsO3RoaXMuYmVnaW5TaGFwZSgpO2Zvcih2YXIgbj0wO248PW07bisrKXt2YXIgbz0uNSpNYXRoLnBvdyhuL20sMykscD0uNSpNYXRoLnBvdyhuL20sMikscT1uL20qLjUscj0uNSxzPW8qKDMqZC1hLTMqZytqKStwKigyKmEtNSpkKzQqZy1qKStxKigtYStnKStyKigyKmQpLHQ9byooMyplLWItMypoK2spK3AqKDIqYi01KmUrNCpoLWspK3EqKC1iK2gpK3IqKDIqZSksdT1vKigzKmYtYy0zKmkrbCkrcCooMipjLTUqZis0KmktbCkrcSooLWMraSkrciooMipmKTt0aGlzLnZlcnRleChzLHQsdSl9cmV0dXJuIHRoaXMuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gNj09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuYmVnaW5TaGFwZSgpLHRoaXMudmVydGV4KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSx0aGlzLnZlcnRleChhcmd1bWVudHNbM10sYXJndW1lbnRzWzRdLGFyZ3VtZW50c1s1XSksdGhpcy5lbmRTaGFwZSgpKTo0PT09YXJndW1lbnRzLmxlbmd0aCYmKHRoaXMuYmVnaW5TaGFwZSgpLHRoaXMudmVydGV4KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sMCksdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSwwKSx0aGlzLmVuZFNoYXBlKCkpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuYmV6aWVyVmVydGV4PWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4Lmxlbmd0aCl0aHJvdyBFcnJvcihcInZlcnRleCgpIG11c3QgYmUgdXNlZCBvbmNlIGJlZm9yZSBjYWxsaW5nIGJlemllclZlcnRleCgpXCIpO3ZhciBhLGIsYyxkLGUsZj1bXSxnPVtdLGg9W10saT1hcmd1bWVudHMubGVuZ3RoO2lmKGE9MCwwPT09dGhpcy5fbG9va1VwVGFibGVCZXppZXIubGVuZ3RofHx0aGlzLl9sdXRCZXppZXJEZXRhaWwhPT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWwpe3RoaXMuX2xvb2tVcFRhYmxlQmV6aWVyPVtdLHRoaXMuX2x1dEJlemllckRldGFpbD10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7Zm9yKHZhciBqPTEvdGhpcy5fbHV0QmV6aWVyRGV0YWlsLGs9MCxsPTEsbT0wO2s8MTspe2lmKGE9cGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW21dPXRoaXMuX2JlemllckNvZWZmaWNpZW50cyhhKSxsLnRvRml4ZWQoNik9PT1qLnRvRml4ZWQoNikpe2E9cGFyc2VGbG9hdChsLnRvRml4ZWQoNikpK3BhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSwrK20sdGhpcy5fbG9va1VwVGFibGVCZXppZXJbbV09dGhpcy5fYmV6aWVyQ29lZmZpY2llbnRzKGEpO2JyZWFrfWsrPWosbC09aiwrK219fXZhciBuPXRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyLmxlbmd0aDtpZig2PT09aSl7Zm9yKHRoaXMuaXNCZXppZXI9ITAsZj1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF0sYXJndW1lbnRzWzBdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbNF1dLGc9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzVdXSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2ZbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStnWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyk7dGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF09YXJndW1lbnRzWzRdLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdPWFyZ3VtZW50c1s1XX1lbHNlIGlmKDk9PT1pKXtmb3IodGhpcy5pc0Jlemllcj0hMCxmPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXSxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s2XV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1s0XSxhcmd1bWVudHNbN11dLGg9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzJdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbNV0sYXJndW1lbnRzWzhdXSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2ZbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStnWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGQ9aFswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStoWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2hbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0raFszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSx0aGlzLnZlcnRleChiLGMsZCk7dGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF09YXJndW1lbnRzWzZdLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdPWFyZ3VtZW50c1s3XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsyXT1hcmd1bWVudHNbOF19fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnF1YWRyYXRpY1ZlcnRleD1mdW5jdGlvbigpe2lmKDA9PT10aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleC5sZW5ndGgpdGhyb3cgRXJyb3IoXCJ2ZXJ0ZXgoKSBtdXN0IGJlIHVzZWQgb25jZSBiZWZvcmUgY2FsbGluZyBxdWFkcmF0aWNWZXJ0ZXgoKVwiKTt2YXIgYSxiLGMsZCxlLGY9W10sZz1bXSxoPVtdLGk9YXJndW1lbnRzLmxlbmd0aDtpZihhPTAsMD09PXRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljLmxlbmd0aHx8dGhpcy5fbHV0UXVhZHJhdGljRGV0YWlsIT09dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsKXt0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpYz1bXSx0aGlzLl9sdXRRdWFkcmF0aWNEZXRhaWw9dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsO2Zvcih2YXIgaj0xL3RoaXMuX2x1dFF1YWRyYXRpY0RldGFpbCxrPTAsbD0xLG09MDtrPDE7KXtpZihhPXBhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSx0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1ttXT10aGlzLl9xdWFkcmF0aWNDb2VmZmljaWVudHMoYSksbC50b0ZpeGVkKDYpPT09ai50b0ZpeGVkKDYpKXthPXBhcnNlRmxvYXQobC50b0ZpeGVkKDYpKStwYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksKyttLHRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW21dPXRoaXMuX3F1YWRyYXRpY0NvZWZmaWNpZW50cyhhKTticmVha31rKz1qLGwtPWosKyttfX12YXIgbj10aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpYy5sZW5ndGg7aWYoND09PWkpe2Zvcih0aGlzLmlzUXVhZHJhdGljPSEwLGY9W3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMl1dLGc9W3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbM11dLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSx0aGlzLnZlcnRleChiLGMpO3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdPWFyZ3VtZW50c1syXSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXT1hcmd1bWVudHNbM119ZWxzZSBpZig2PT09aSl7Zm9yKHRoaXMuaXNRdWFkcmF0aWM9ITAsZj1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF0sYXJndW1lbnRzWzBdLGFyZ3VtZW50c1szXV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1s0XV0saD1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMl0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1s1XV0sZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLGQ9aFswXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStoWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2hbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sdGhpcy52ZXJ0ZXgoYixjLGQpO3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdPWFyZ3VtZW50c1szXSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXT1hcmd1bWVudHNbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMl09YXJndW1lbnRzWzVdfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5jdXJ2ZVZlcnRleD1mdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZj1bXSxnPVtdLGg9W107YT0wO3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg7aWYoMD09PXRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyLmxlbmd0aHx8dGhpcy5fbHV0QmV6aWVyRGV0YWlsIT09dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsKXt0aGlzLl9sb29rVXBUYWJsZUJlemllcj1bXSx0aGlzLl9sdXRCZXppZXJEZXRhaWw9dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsO2Zvcih2YXIgaj0xL3RoaXMuX2x1dEJlemllckRldGFpbCxrPTAsbD0xLG09MDtrPDE7KXtpZihhPXBhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSx0aGlzLl9sb29rVXBUYWJsZUJlemllclttXT10aGlzLl9iZXppZXJDb2VmZmljaWVudHMoYSksbC50b0ZpeGVkKDYpPT09ai50b0ZpeGVkKDYpKXthPXBhcnNlRmxvYXQobC50b0ZpeGVkKDYpKStwYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksKyttLHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW21dPXRoaXMuX2JlemllckNvZWZmaWNpZW50cyhhKTticmVha31rKz1qLGwtPWosKyttfX12YXIgbj10aGlzLl9sb29rVXBUYWJsZUJlemllci5sZW5ndGg7aWYoMj09PWkpe2lmKHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMF0pLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMV0pLDg9PT10aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4Lmxlbmd0aCl7Zm9yKHRoaXMuaXNDdXJ2ZT0hMCxmPXRoaXMuX2JlemllclRvQ2F0bXVsbChbdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFswXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzJdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs2XV0pLGc9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzFdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbM10sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs1XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzddXSksZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStmWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZ1szXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSx0aGlzLnZlcnRleChiLGMpO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnNoaWZ0KCl9fWVsc2UgaWYoMz09PWkmJih0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzBdKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzFdKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzJdKSwxMj09PXRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgubGVuZ3RoKSl7Zm9yKHRoaXMuaXNDdXJ2ZT0hMCxmPXRoaXMuX2JlemllclRvQ2F0bXVsbChbdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFswXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzNdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs5XV0pLGc9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzFdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs3XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzEwXV0pLGg9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzJdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNV0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs4XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzExXV0pLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZlszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2dbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sZD1oWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2hbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0raFsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStoWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyxkKTtmb3IoZT0wO2U8aTtlKyspdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5zaGlmdCgpfX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vcDUuR2VvbWV0cnlcIjo3MH1dLDY1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLnByb3RvdHlwZS5vcmJpdENvbnRyb2w9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLl9hc3NlcnQzZChcIm9yYml0Q29udHJvbFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJvcmJpdENvbnRyb2xcIixhcmd1bWVudHMpLHRoaXMubW91c2VYPHRoaXMud2lkdGgmJnRoaXMubW91c2VYPjAmJnRoaXMubW91c2VZPHRoaXMuaGVpZ2h0JiZ0aGlzLm1vdXNlWT4wKXt2YXIgYz10aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhO3ZvaWQgMD09PWEmJihhPTEpLHZvaWQgMD09PWImJihiPWEpLCEwIT09dGhpcy5jb250ZXh0TWVudURpc2FibGVkJiYodGhpcy5jYW52YXMub25jb250ZXh0bWVudT1mdW5jdGlvbigpe3JldHVybiExfSx0aGlzLl9zZXRQcm9wZXJ0eShcImNvbnRleHRNZW51RGlzYWJsZWRcIiwhMCkpLCEwIT09dGhpcy53aGVlbERlZmF1bHREaXNhYmxlZCYmKHRoaXMuY2FudmFzLm9ud2hlZWw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdGhpcy5fc2V0UHJvcGVydHkoXCJ3aGVlbERlZmF1bHREaXNhYmxlZFwiLCEwKSk7dmFyIGU9dGhpcy5oZWlnaHQ8dGhpcy53aWR0aD90aGlzLmhlaWdodDp0aGlzLndpZHRoO2lmKHRoaXMuX21vdXNlV2hlZWxEZWx0YVkhPT10aGlzLl9wbW91c2VXaGVlbERlbHRhWSYmKHRoaXMuX21vdXNlV2hlZWxEZWx0YVk+MD90aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLl9vcmJpdCgwLDAsLjUqZSk6dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5fb3JiaXQoMCwwLC0uNSplKSksdGhpcy5tb3VzZUlzUHJlc3NlZClpZih0aGlzLm1vdXNlQnV0dG9uPT09dGhpcy5MRUZUKXt2YXIgZj0tYSoodGhpcy5tb3VzZVgtdGhpcy5wbW91c2VYKS9lLGc9YioodGhpcy5tb3VzZVktdGhpcy5wbW91c2VZKS9lO3RoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuX29yYml0KGYsZywwKX1lbHNlIGlmKHRoaXMubW91c2VCdXR0b249PT10aGlzLlJJR0hUKXt2YXIgaD1jLl9nZXRMb2NhbEF4ZXMoKSxpPU1hdGguc3FydChoLnhbMF0qaC54WzBdK2gueFsyXSpoLnhbMl0pOzAhPT1pJiYoaC54WzBdLz1pLGgueFsyXS89aSk7dmFyIGo9TWF0aC5zcXJ0KGgueVswXSpoLnlbMF0raC55WzJdKmgueVsyXSk7MCE9PWomJihoLnlbMF0vPWosaC55WzJdLz1qKTt2YXIgaz0tMSphKih0aGlzLm1vdXNlWC10aGlzLnBtb3VzZVgpLGw9LTEqYioodGhpcy5tb3VzZVktdGhpcy5wbW91c2VZKTtjLnNldFBvc2l0aW9uKGMuZXllWCtrKmgueFswXStsKmguelswXSxjLmV5ZVksYy5leWVaK2sqaC54WzJdK2wqaC56WzJdKX1yZXR1cm4gdGhpc319LGQucHJvdG90eXBlLmRlYnVnTW9kZT1mdW5jdGlvbigpe3RoaXMuX2Fzc2VydDNkKFwiZGVidWdNb2RlXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImRlYnVnTW9kZVwiLGFyZ3VtZW50cyk7Zm9yKHZhciBhPXRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3QubGVuZ3RoLTE7YT49MDthLS0pdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdFthXS50b1N0cmluZygpIT09dGhpcy5fZ3JpZCgpLnRvU3RyaW5nKCkmJnRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3RbYV0udG9TdHJpbmcoKSE9PXRoaXMuX2F4ZXNJY29uKCkudG9TdHJpbmcoKXx8dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5zcGxpY2UoYSwxKTthcmd1bWVudHNbMF09PT1lLkdSSUQ/dGhpcy5yZWdpc3Rlck1ldGhvZChcInBvc3RcIix0aGlzLl9ncmlkLmNhbGwodGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNF0sYXJndW1lbnRzWzVdKSk6YXJndW1lbnRzWzBdPT09ZS5BWEVTP3RoaXMucmVnaXN0ZXJNZXRob2QoXCJwb3N0XCIsdGhpcy5fYXhlc0ljb24uY2FsbCh0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSkpOih0aGlzLnJlZ2lzdGVyTWV0aG9kKFwicG9zdFwiLHRoaXMuX2dyaWQuY2FsbCh0aGlzLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNF0pKSx0aGlzLnJlZ2lzdGVyTWV0aG9kKFwicG9zdFwiLHRoaXMuX2F4ZXNJY29uLmNhbGwodGhpcyxhcmd1bWVudHNbNV0sYXJndW1lbnRzWzZdLGFyZ3VtZW50c1s3XSxhcmd1bWVudHNbOF0pKSl9LGQucHJvdG90eXBlLm5vRGVidWdNb2RlPWZ1bmN0aW9uKCl7dGhpcy5fYXNzZXJ0M2QoXCJub0RlYnVnTW9kZVwiKTtmb3IodmFyIGE9dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5sZW5ndGgtMTthPj0wO2EtLSl0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0W2FdLnRvU3RyaW5nKCkhPT10aGlzLl9ncmlkKCkudG9TdHJpbmcoKSYmdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdFthXS50b1N0cmluZygpIT09dGhpcy5fYXhlc0ljb24oKS50b1N0cmluZygpfHx0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0LnNwbGljZShhLDEpfSxkLnByb3RvdHlwZS5fZ3JpZD1mdW5jdGlvbihhLGIsYyxkLGUpe3ZvaWQgMD09PWEmJihhPXRoaXMud2lkdGgvMiksdm9pZCAwPT09YiYmKGI9TWF0aC5yb3VuZChhLzMwKTw0PzQ6TWF0aC5yb3VuZChhLzMwKSksdm9pZCAwPT09YyYmKGM9MCksdm9pZCAwPT09ZCYmKGQ9MCksdm9pZCAwPT09ZSYmKGU9MCk7dmFyIGY9YS9iLGc9YS8yO3JldHVybiBmdW5jdGlvbigpe3RoaXMucHVzaCgpLHRoaXMuc3Ryb2tlKDI1NSp0aGlzLl9yZW5kZXJlci5jdXJTdHJva2VDb2xvclswXSwyNTUqdGhpcy5fcmVuZGVyZXIuY3VyU3Ryb2tlQ29sb3JbMV0sMjU1KnRoaXMuX3JlbmRlcmVyLmN1clN0cm9rZUNvbG9yWzJdKSx0aGlzLl9yZW5kZXJlci51TVZNYXRyaXguc2V0KHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzJdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbM10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs0XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzVdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs3XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzhdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxM10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNV0pO2Zvcih2YXIgYT0wO2E8PWI7YSsrKXRoaXMuYmVnaW5TaGFwZSh0aGlzLkxJTkVTKSx0aGlzLnZlcnRleCgtZytjLGQsYSpmLWcrZSksdGhpcy52ZXJ0ZXgoK2crYyxkLGEqZi1nK2UpLHRoaXMuZW5kU2hhcGUoKTtmb3IodmFyIGg9MDtoPD1iO2grKyl0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoaCpmLWcrYyxkLC1nK2UpLHRoaXMudmVydGV4KGgqZi1nK2MsZCwrZytlKSx0aGlzLmVuZFNoYXBlKCk7dGhpcy5wb3AoKX19LGQucHJvdG90eXBlLl9heGVzSWNvbj1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdm9pZCAwPT09YSYmKGE9dGhpcy53aWR0aC8yMD40MD90aGlzLndpZHRoLzIwOjQwKSx2b2lkIDA9PT1iJiYoYj0tdGhpcy53aWR0aC80KSx2b2lkIDA9PT1jJiYoYz1iKSx2b2lkIDA9PT1kJiYoZD1iKSxmdW5jdGlvbigpe3RoaXMucHVzaCgpLHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5zZXQodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzFdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzRdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzddLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEwXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEzXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSksdGhpcy5zdHJva2VXZWlnaHQoMiksdGhpcy5zdHJva2UoMjU1LDAsMCksdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KGIsYyxkKSx0aGlzLnZlcnRleChiK2EsYyxkKSx0aGlzLmVuZFNoYXBlKCksdGhpcy5zdHJva2UoMCwyNTUsMCksdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KGIsYyxkKSx0aGlzLnZlcnRleChiLGMrYSxkKSx0aGlzLmVuZFNoYXBlKCksdGhpcy5zdHJva2UoMCwwLDI1NSksdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KGIsYyxkKSx0aGlzLnZlcnRleChiLGMsZCthKSx0aGlzLmVuZFNoYXBlKCksdGhpcy5wb3AoKX19LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw2NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuYW1iaWVudExpZ2h0PWZ1bmN0aW9uKGEsYixjLGUpe3RoaXMuX2Fzc2VydDNkKFwiYW1iaWVudExpZ2h0XCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImFtYmllbnRMaWdodFwiLGFyZ3VtZW50cyk7dmFyIGY9dGhpcy5jb2xvci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZz10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gZy5zZXRVbmlmb3JtKFwidVVzZUxpZ2h0aW5nXCIsITApLGcuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSx0aGlzLl9yZW5kZXJlci5hbWJpZW50TGlnaHRDb2xvcnMucHVzaChmLl9hcnJheVswXSxmLl9hcnJheVsxXSxmLl9hcnJheVsyXSksZy5zZXRVbmlmb3JtKFwidUFtYmllbnRDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmFtYmllbnRMaWdodENvbG9ycyksZy5zZXRVbmlmb3JtKFwidUFtYmllbnRMaWdodENvdW50XCIsdGhpcy5fcmVuZGVyZXIuYW1iaWVudExpZ2h0Q29sb3JzLmxlbmd0aC8zKSx0aGlzfSxkLnByb3RvdHlwZS5kaXJlY3Rpb25hbExpZ2h0PWZ1bmN0aW9uKGEsYixjLGUsZixnKXt0aGlzLl9hc3NlcnQzZChcImRpcmVjdGlvbmFsTGlnaHRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZGlyZWN0aW9uYWxMaWdodFwiLGFyZ3VtZW50cyk7dmFyIGgsaT10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtoPWEgaW5zdGFuY2VvZiBkLkNvbG9yP2E6dGhpcy5jb2xvcihhLGIsYyk7dmFyIGosayxsLG09YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV07XCJudW1iZXJcIj09dHlwZW9mIG0/KGo9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtM10saz1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSxsPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKTooaj1tLngsaz1tLnksbD1tLnopLGkuc2V0VW5pZm9ybShcInVVc2VMaWdodGluZ1wiLCEwKSxpLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvcik7dmFyIG49TWF0aC5zcXJ0KGoqaitrKmsrbCpsKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbnMucHVzaChqL24say9uLGwvbiksaS5zZXRVbmlmb3JtKFwidUxpZ2h0aW5nRGlyZWN0aW9uXCIsdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbnMpLHRoaXMuX3JlbmRlcmVyLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnMucHVzaChoLl9hcnJheVswXSxoLl9hcnJheVsxXSxoLl9hcnJheVsyXSksaS5zZXRVbmlmb3JtKFwidURpcmVjdGlvbmFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzKSxpLnNldFVuaWZvcm0oXCJ1RGlyZWN0aW9uYWxMaWdodENvdW50XCIsdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodENvbG9ycy5sZW5ndGgvMyksdGhpc30sZC5wcm90b3R5cGUucG9pbnRMaWdodD1mdW5jdGlvbihhLGIsYyxlLGYsZyl7dGhpcy5fYXNzZXJ0M2QoXCJwb2ludExpZ2h0XCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBvaW50TGlnaHRcIixhcmd1bWVudHMpO3ZhciBoO2g9YSBpbnN0YW5jZW9mIGQuQ29sb3I/YTp0aGlzLmNvbG9yKGEsYixjKTt2YXIgaSxqLGssbD1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtcIm51bWJlclwiPT10eXBlb2YgbD8oaT1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0zXSxqPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTJdLGs9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pOihpPWwueCxqPWwueSxrPWwueik7dmFyIG09dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIG0uc2V0VW5pZm9ybShcInVVc2VMaWdodGluZ1wiLCEwKSxtLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvciksdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodFBvc2l0aW9ucy5wdXNoKGksaixrKSxtLnNldFVuaWZvcm0oXCJ1UG9pbnRMaWdodExvY2F0aW9uXCIsdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodFBvc2l0aW9ucyksdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodENvbG9ycy5wdXNoKGguX2FycmF5WzBdLGguX2FycmF5WzFdLGguX2FycmF5WzJdKSxtLnNldFVuaWZvcm0oXCJ1UG9pbnRMaWdodENvbG9yXCIsdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodENvbG9ycyksbS5zZXRVbmlmb3JtKFwidVBvaW50TGlnaHRDb3VudFwiLHRoaXMuX3JlbmRlcmVyLnBvaW50TGlnaHRDb2xvcnMubGVuZ3RoLzMpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDY3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgYz17djpbXSx2dDpbXSx2bjpbXX0sZD17fSxmPTA7ZjxiLmxlbmd0aDsrK2Ype3ZhciBnPWJbZl0udHJpbSgpLnNwbGl0KC9cXGJcXHMrLyk7aWYoZy5sZW5ndGg+MClpZihcInZcIj09PWdbMF18fFwidm5cIj09PWdbMF0pe3ZhciBoPW5ldyBlLlZlY3RvcihwYXJzZUZsb2F0KGdbMV0pLHBhcnNlRmxvYXQoZ1syXSkscGFyc2VGbG9hdChnWzNdKSk7Y1tnWzBdXS5wdXNoKGgpfWVsc2UgaWYoXCJ2dFwiPT09Z1swXSl7dmFyIGk9W3BhcnNlRmxvYXQoZ1sxXSkscGFyc2VGbG9hdChnWzJdKV07Y1tnWzBdXS5wdXNoKGkpfWVsc2UgaWYoXCJmXCI9PT1nWzBdKWZvcih2YXIgaj0zO2o8Zy5sZW5ndGg7KytqKXtmb3IodmFyIGs9W10sbD1bMSxqLTEsal0sbT0wO208bC5sZW5ndGg7KyttKXt2YXIgbj1nW2xbbV1dLG89MDtpZih2b2lkIDAhPT1kW25dKW89ZFtuXTtlbHNle2Zvcih2YXIgcD1uLnNwbGl0KFwiL1wiKSxxPTA7cTxwLmxlbmd0aDtxKyspcFtxXT1wYXJzZUludChwW3FdKS0xO289ZFtuXT1hLnZlcnRpY2VzLmxlbmd0aCxhLnZlcnRpY2VzLnB1c2goYy52W3BbMF1dLmNvcHkoKSksYy52dFtwWzFdXT9hLnV2cy5wdXNoKGMudnRbcFsxXV0uc2xpY2UoKSk6YS51dnMucHVzaChbMCwwXSksYy52bltwWzJdXSYmYS52ZXJ0ZXhOb3JtYWxzLnB1c2goYy52bltwWzJdXS5jb3B5KCkpfWsucHVzaChvKX1rWzBdIT09a1sxXSYma1swXSE9PWtbMl0mJmtbMV0hPT1rWzJdJiZhLmZhY2VzLnB1c2goayl9fXJldHVybiAwPT09YS52ZXJ0ZXhOb3JtYWxzLmxlbmd0aCYmYS5jb21wdXRlTm9ybWFscygpLGF9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKTthKFwiLi9wNS5HZW9tZXRyeVwiKSxlLnByb3RvdHlwZS5sb2FkTW9kZWw9ZnVuY3Rpb24oYSl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZE1vZGVsXCIsYXJndW1lbnRzKTt2YXIgYixjLGY7XCJib29sZWFuXCI9PXR5cGVvZiBhcmd1bWVudHNbMV0/KGI9YXJndW1lbnRzWzFdLGM9YXJndW1lbnRzWzJdLGY9YXJndW1lbnRzWzNdKTooYj0hMSxjPWFyZ3VtZW50c1sxXSxmPWFyZ3VtZW50c1syXSk7dmFyIGc9bmV3IGUuR2VvbWV0cnk7Zy5naWQ9YStcInxcIitiO3ZhciBoPXRoaXM7cmV0dXJuIHRoaXMubG9hZFN0cmluZ3MoYSxmdW5jdGlvbihhKXtkKGcsYSksYiYmZy5ub3JtYWxpemUoKSxoLl9kZWNyZW1lbnRQcmVsb2FkKCksXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmYyhnKX0uYmluZCh0aGlzKSxmKSxnfSxlLnByb3RvdHlwZS5tb2RlbD1mdW5jdGlvbihhKXt0aGlzLl9hc3NlcnQzZChcIm1vZGVsXCIpLGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1vZGVsXCIsYXJndW1lbnRzKSxhLnZlcnRpY2VzLmxlbmd0aD4wJiYodGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goYS5naWQpfHwoYS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhhLmdpZCxhKSksdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnMoYS5naWQpKX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5HZW9tZXRyeVwiOjcwfV0sNjg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuL3A1LlRleHR1cmVcIiksZC5wcm90b3R5cGUubG9hZFNoYWRlcj1mdW5jdGlvbihhLGIpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRTaGFkZXJcIixhcmd1bWVudHMpO3ZhciBjPW5ldyBkLlNoYWRlcixlPXRoaXMsZj0hMSxnPSExO3JldHVybiB0aGlzLmxvYWRTdHJpbmdzKGIsZnVuY3Rpb24oYSl7Yy5fZnJhZ1NyYz1hLmpvaW4oXCJcXG5cIiksZj0hMCxnJiZlLl9kZWNyZW1lbnRQcmVsb2FkKCl9KSx0aGlzLmxvYWRTdHJpbmdzKGEsZnVuY3Rpb24oYSl7Yy5fdmVydFNyYz1hLmpvaW4oXCJcXG5cIiksZz0hMCxmJiZlLl9kZWNyZW1lbnRQcmVsb2FkKCl9KSxjfSxkLnByb3RvdHlwZS5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJjcmVhdGVTaGFkZXJcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlU2hhZGVyXCIsYXJndW1lbnRzKSxuZXcgZC5TaGFkZXIodGhpcy5fcmVuZGVyZXIsYSxiKX0sZC5wcm90b3R5cGUuc2hhZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInNoYWRlclwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzaGFkZXJcIixhcmd1bWVudHMpLHZvaWQgMD09PWEuX3JlbmRlcmVyJiYoYS5fcmVuZGVyZXI9dGhpcy5fcmVuZGVyZXIpLGEuaXNTdHJva2VTaGFkZXIoKT90aGlzLl9yZW5kZXJlci5zZXRTdHJva2VTaGFkZXIoYSk6dGhpcy5fcmVuZGVyZXIuc2V0RmlsbFNoYWRlcihhKSx0aGlzfSxkLnByb3RvdHlwZS5ub3JtYWxNYXRlcmlhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcIm5vcm1hbE1hdGVyaWFsXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5vcm1hbE1hdGVyaWFsXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5kcmF3TW9kZT1lLkZJTEwsdGhpcy5fcmVuZGVyZXIuc2V0RmlsbFNoYWRlcih0aGlzLl9yZW5kZXJlci5fZ2V0Tm9ybWFsU2hhZGVyKCkpLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvcj1bMSwxLDEsMV0sdGhpcy5ub1N0cm9rZSgpLHRoaXN9LGQucHJvdG90eXBlLnRleHR1cmU9ZnVuY3Rpb24oYSl7dGhpcy5fYXNzZXJ0M2QoXCJ0ZXh0dXJlXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHR1cmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmRyYXdNb2RlPWUuVEVYVFVSRTt2YXIgYj10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gYi5zZXRVbmlmb3JtKFwidVNwZWN1bGFyXCIsITEpLGIuc2V0VW5pZm9ybShcImlzVGV4dHVyZVwiLCEwKSxiLnNldFVuaWZvcm0oXCJ1U2FtcGxlclwiLGEpLHRoaXMubm9TdHJva2UoKSx0aGlzfSxkLnByb3RvdHlwZS5hbWJpZW50TWF0ZXJpYWw9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJhbWJpZW50TWF0ZXJpYWxcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYW1iaWVudE1hdGVyaWFsXCIsYXJndW1lbnRzKTt2YXIgZj1kLnByb3RvdHlwZS5jb2xvci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yPWYuX2FycmF5O3ZhciBnPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBnLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvciksZy5zZXRVbmlmb3JtKFwidVNwZWN1bGFyXCIsITEpLGcuc2V0VW5pZm9ybShcImlzVGV4dHVyZVwiLCExKSx0aGlzfSxkLnByb3RvdHlwZS5zcGVjdWxhck1hdGVyaWFsPWZ1bmN0aW9uKGEsYixjLGUpe3RoaXMuX2Fzc2VydDNkKFwic3BlY3VsYXJNYXRlcmlhbFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzcGVjdWxhck1hdGVyaWFsXCIsYXJndW1lbnRzKTt2YXIgZj1kLnByb3RvdHlwZS5jb2xvci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yPWYuX2FycmF5O3ZhciBnPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBnLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvciksZy5zZXRVbmlmb3JtKFwidVNwZWN1bGFyXCIsITApLGcuc2V0VW5pZm9ybShcImlzVGV4dHVyZVwiLCExKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9hcHBseUNvbG9yQmxlbmQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5HTCxjPXRoaXMuZHJhd01vZGU9PT1lLlRFWFRVUkU7cmV0dXJuIGN8fGFbYS5sZW5ndGgtMV08MT8oYi5kZXB0aE1hc2soYyksYi5lbmFibGUoYi5CTEVORCksYi5ibGVuZEVxdWF0aW9uKGIuRlVOQ19BREQpLGIuYmxlbmRGdW5jKGIuU1JDX0FMUEhBLGIuT05FX01JTlVTX1NSQ19BTFBIQSkpOihiLmRlcHRoTWFzayghMCksYi5kaXNhYmxlKGIuQkxFTkQpKSxhfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5UZXh0dXJlXCI6NzZ9XSw2OTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuY2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwiY2FtZXJhXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNhbWVyYVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmEuYXBwbHkodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYSxhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLnBlcnNwZWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwicGVyc3BlY3RpdmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicGVyc3BlY3RpdmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEucGVyc3BlY3RpdmUuYXBwbHkodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYSxhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLm9ydGhvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwib3J0aG9cIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwib3J0aG9cIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEub3J0aG8uYXBwbHkodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYSxhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLmNyZWF0ZUNhbWVyYT1mdW5jdGlvbigpe3RoaXMuX2Fzc2VydDNkKFwiY3JlYXRlQ2FtZXJhXCIpO3ZhciBhPW5ldyBkLkNhbWVyYSh0aGlzLl9yZW5kZXJlcik7cmV0dXJuIGEuX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3MoKSxhLl9zZXREZWZhdWx0Q2FtZXJhKCksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYT1hLGF9LGQuQ2FtZXJhPWZ1bmN0aW9uKGEpe3RoaXMuX3JlbmRlcmVyPWEsdGhpcy5jYW1lcmFUeXBlPVwiZGVmYXVsdFwiLHRoaXMuY2FtZXJhTWF0cml4PW5ldyBkLk1hdHJpeCx0aGlzLnByb2pNYXRyaXg9bmV3IGQuTWF0cml4fSxkLkNhbWVyYS5wcm90b3R5cGUucGVyc3BlY3RpdmU9ZnVuY3Rpb24oYSxiLGMsZSl7dm9pZCAwPT09YT8oYT10aGlzLmRlZmF1bHRDYW1lcmFGT1YsdGhpcy5jYW1lcmFGT1Y9YSk6dGhpcy5jYW1lcmFGT1Y9dGhpcy5fcmVuZGVyZXIuX3BJbnN0Ll90b1JhZGlhbnMoYSksdm9pZCAwPT09YiYmKGI9dGhpcy5kZWZhdWx0QXNwZWN0UmF0aW8pLHZvaWQgMD09PWMmJihjPXRoaXMuZGVmYXVsdENhbWVyYU5lYXIpLHZvaWQgMD09PWUmJihlPXRoaXMuZGVmYXVsdENhbWVyYUZhciksYzw9MWUtNCYmKGM9LjAxLGNvbnNvbGUubG9nKFwiQXZvaWQgcGVyc3BlY3RpdmUgbmVhciBwbGFuZSB2YWx1ZXMgY2xvc2UgdG8gb3IgYmVsb3cgMC4gU2V0dGluZyB2YWx1ZSB0byAwLjAxLlwiKSksZTxjJiZjb25zb2xlLmxvZyhcIlBlcnNwZWN0aXZlIGZhciBwbGFuZSB2YWx1ZSBpcyBsZXNzIHRoYW4gbmVhciBwbGFuZSB2YWx1ZS4gTm90aGluZyB3aWxsIGJlIHNob3duLlwiKSx0aGlzLmNhbWVyYUZPVj10aGlzLl9yZW5kZXJlci5fcEluc3QuX3RvUmFkaWFucyhhKSx0aGlzLmFzcGVjdFJhdGlvPWIsdGhpcy5jYW1lcmFOZWFyPWMsdGhpcy5jYW1lcmFGYXI9ZSx0aGlzLnByb2pNYXRyaXg9ZC5NYXRyaXguaWRlbnRpdHkoKTt2YXIgZj0xL01hdGgudGFuKHRoaXMuY2FtZXJhRk9WLzIpLGc9MS8odGhpcy5jYW1lcmFOZWFyLXRoaXMuY2FtZXJhRmFyKTt0aGlzLnByb2pNYXRyaXguc2V0KGYvYiwwLDAsMCwwLC1mLDAsMCwwLDAsKGUrYykqZywtMSwwLDAsMiplKmMqZywwKSx0aGlzLl9pc0FjdGl2ZSgpJiZ0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5zZXQodGhpcy5wcm9qTWF0cml4Lm1hdDRbMF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbM10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbN10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTBdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzExXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTNdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzE0XSx0aGlzLnByb2pNYXRyaXgubWF0NFsxNV0pLHRoaXMuY2FtZXJhVHlwZT1cImN1c3RvbVwifSxkLkNhbWVyYS5wcm90b3R5cGUub3J0aG89ZnVuY3Rpb24oYSxiLGMsZSxmLGcpe3ZvaWQgMD09PWEmJihhPS10aGlzLl9yZW5kZXJlci53aWR0aC8yKSx2b2lkIDA9PT1iJiYoYj0rdGhpcy5fcmVuZGVyZXIud2lkdGgvMiksdm9pZCAwPT09YyYmKGM9LXRoaXMuX3JlbmRlcmVyLmhlaWdodC8yKSx2b2lkIDA9PT1lJiYoZT0rdGhpcy5fcmVuZGVyZXIuaGVpZ2h0LzIpLHZvaWQgMD09PWYmJihmPTApLHZvaWQgMD09PWcmJihnPU1hdGgubWF4KHRoaXMuX3JlbmRlcmVyLndpZHRoLHRoaXMuX3JlbmRlcmVyLmhlaWdodCkpO3ZhciBoPWItYSxpPWUtYyxqPWctZixrPTIvaCxsPTIvaSxtPS0yL2osbj0tKGIrYSkvaCxvPS0oZStjKS9pLHA9LShnK2YpL2o7dGhpcy5wcm9qTWF0cml4PWQuTWF0cml4LmlkZW50aXR5KCksdGhpcy5wcm9qTWF0cml4LnNldChrLDAsMCwwLDAsLWwsMCwwLDAsMCxtLDAsbixvLHAsMSksdGhpcy5faXNBY3RpdmUoKSYmdGhpcy5fcmVuZGVyZXIudVBNYXRyaXguc2V0KHRoaXMucHJvak1hdHJpeC5tYXQ0WzBdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzFdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzJdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzNdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzRdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzVdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzZdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzddLHRoaXMucHJvak1hdHJpeC5tYXQ0WzhdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzldLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEwXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTJdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEzXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxNF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTVdKSx0aGlzLmNhbWVyYVR5cGU9XCJjdXN0b21cIn0sZC5DYW1lcmEucHJvdG90eXBlLl9yb3RhdGVWaWV3PWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXRoaXMuY2VudGVyWCxnPXRoaXMuY2VudGVyWSxoPXRoaXMuY2VudGVyWjtmLT10aGlzLmV5ZVgsZy09dGhpcy5leWVZLGgtPXRoaXMuZXllWjt2YXIgaT1kLk1hdHJpeC5pZGVudGl0eSh0aGlzLl9yZW5kZXJlci5fcEluc3QpO2kucm90YXRlKGEsYixjLGUpO3ZhciBqPVtmKmkubWF0NFswXStnKmkubWF0NFs0XStoKmkubWF0NFs4XSxmKmkubWF0NFsxXStnKmkubWF0NFs1XStoKmkubWF0NFs5XSxmKmkubWF0NFsyXStnKmkubWF0NFs2XStoKmkubWF0NFsxMF1dO2pbMF0rPXRoaXMuZXllWCxqWzFdKz10aGlzLmV5ZVksalsyXSs9dGhpcy5leWVaLHRoaXMuY2FtZXJhKHRoaXMuZXllWCx0aGlzLmV5ZVksdGhpcy5leWVaLGpbMF0salsxXSxqWzJdLHRoaXMudXBYLHRoaXMudXBZLHRoaXMudXBaKX0sZC5DYW1lcmEucHJvdG90eXBlLnBhbj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9nZXRMb2NhbEF4ZXMoKTt0aGlzLl9yb3RhdGVWaWV3KGEsYi55WzBdLGIueVsxXSxiLnlbMl0pfSxkLkNhbWVyYS5wcm90b3R5cGUudGlsdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9nZXRMb2NhbEF4ZXMoKTt0aGlzLl9yb3RhdGVWaWV3KGEsYi54WzBdLGIueFsxXSxiLnhbMl0pfSxkLkNhbWVyYS5wcm90b3R5cGUubG9va0F0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLmNhbWVyYSh0aGlzLmV5ZVgsdGhpcy5leWVZLHRoaXMuZXllWixhLGIsYyx0aGlzLnVwWCx0aGlzLnVwWSx0aGlzLnVwWil9LGQuQ2FtZXJhLnByb3RvdHlwZS5jYW1lcmE9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGkpe3ZvaWQgMD09PWEmJihhPXRoaXMuZGVmYXVsdEV5ZVgsYj10aGlzLmRlZmF1bHRFeWVZLGM9dGhpcy5kZWZhdWx0RXllWixkPWEsZT1iLGY9MCxnPTAsaD0xLGk9MCksdGhpcy5leWVYPWEsdGhpcy5leWVZPWIsdGhpcy5leWVaPWMsdGhpcy5jZW50ZXJYPWQsdGhpcy5jZW50ZXJZPWUsdGhpcy5jZW50ZXJaPWYsdGhpcy51cFg9Zyx0aGlzLnVwWT1oLHRoaXMudXBaPWk7dmFyIGo9dGhpcy5fZ2V0TG9jYWxBeGVzKCk7dGhpcy5jYW1lcmFNYXRyaXguc2V0KGoueFswXSxqLnlbMF0sai56WzBdLDAsai54WzFdLGoueVsxXSxqLnpbMV0sMCxqLnhbMl0sai55WzJdLGouelsyXSwwLDAsMCwwLDEpO3ZhciBrPS1hLGw9LWIsbT0tYztyZXR1cm4gdGhpcy5jYW1lcmFNYXRyaXgudHJhbnNsYXRlKFtrLGwsbV0pLHRoaXMuX2lzQWN0aXZlKCkmJnRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5zZXQodGhpcy5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzFdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzRdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzddLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzEwXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzEzXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSksdGhpc30sZC5DYW1lcmEucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldExvY2FsQXhlcygpLGU9W2QueFswXSphLGQueFsxXSphLGQueFsyXSphXSxmPVtkLnlbMF0qYixkLnlbMV0qYixkLnlbMl0qYl0sZz1bZC56WzBdKmMsZC56WzFdKmMsZC56WzJdKmNdO3RoaXMuY2FtZXJhKHRoaXMuZXllWCtlWzBdK2ZbMF0rZ1swXSx0aGlzLmV5ZVkrZVsxXStmWzFdK2dbMV0sdGhpcy5leWVaK2VbMl0rZlsyXStnWzJdLHRoaXMuY2VudGVyWCtlWzBdK2ZbMF0rZ1swXSx0aGlzLmNlbnRlclkrZVsxXStmWzFdK2dbMV0sdGhpcy5jZW50ZXJaK2VbMl0rZlsyXStnWzJdLDAsMSwwKX0sZC5DYW1lcmEucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLXRoaXMuZXllWCxlPWItdGhpcy5leWVZLGY9Yy10aGlzLmV5ZVo7dGhpcy5jYW1lcmEoYSxiLGMsdGhpcy5jZW50ZXJYK2QsdGhpcy5jZW50ZXJZK2UsdGhpcy5jZW50ZXJaK2YsMCwxLDApfSxkLkNhbWVyYS5wcm90b3R5cGUuX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3M9ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRDYW1lcmFGT1Y9NjAvMTgwKk1hdGguUEksXG50aGlzLmRlZmF1bHRBc3BlY3RSYXRpbz10aGlzLl9yZW5kZXJlci53aWR0aC90aGlzLl9yZW5kZXJlci5oZWlnaHQsdGhpcy5kZWZhdWx0RXllWD0wLHRoaXMuZGVmYXVsdEV5ZVk9MCx0aGlzLmRlZmF1bHRFeWVaPXRoaXMuX3JlbmRlcmVyLmhlaWdodC8yL01hdGgudGFuKHRoaXMuZGVmYXVsdENhbWVyYUZPVi8yKSx0aGlzLmRlZmF1bHRDZW50ZXJYPTAsdGhpcy5kZWZhdWx0Q2VudGVyWT0wLHRoaXMuZGVmYXVsdENlbnRlclo9MCx0aGlzLmRlZmF1bHRDYW1lcmFOZWFyPS4xKnRoaXMuZGVmYXVsdEV5ZVosdGhpcy5kZWZhdWx0Q2FtZXJhRmFyPTEwKnRoaXMuZGVmYXVsdEV5ZVp9LGQuQ2FtZXJhLnByb3RvdHlwZS5fc2V0RGVmYXVsdENhbWVyYT1mdW5jdGlvbigpe3RoaXMuY2FtZXJhRk9WPXRoaXMuZGVmYXVsdENhbWVyYUZPVix0aGlzLmFzcGVjdFJhdGlvPXRoaXMuZGVmYXVsdEFzcGVjdFJhdGlvLHRoaXMuZXllWD10aGlzLmRlZmF1bHRFeWVYLHRoaXMuZXllWT10aGlzLmRlZmF1bHRFeWVZLHRoaXMuZXllWj10aGlzLmRlZmF1bHRFeWVaLHRoaXMuY2VudGVyWD10aGlzLmRlZmF1bHRDZW50ZXJYLHRoaXMuY2VudGVyWT10aGlzLmRlZmF1bHRDZW50ZXJZLHRoaXMuY2VudGVyWj10aGlzLmRlZmF1bHRDZW50ZXJaLHRoaXMudXBYPTAsdGhpcy51cFk9MSx0aGlzLnVwWj0wLHRoaXMuY2FtZXJhTmVhcj10aGlzLmRlZmF1bHRDYW1lcmFOZWFyLHRoaXMuY2FtZXJhRmFyPXRoaXMuZGVmYXVsdENhbWVyYUZhcix0aGlzLnBlcnNwZWN0aXZlKCksdGhpcy5jYW1lcmEoKSx0aGlzLmNhbWVyYVR5cGU9XCJkZWZhdWx0XCJ9LGQuQ2FtZXJhLnByb3RvdHlwZS5fcmVzaXplPWZ1bmN0aW9uKCl7XCJkZWZhdWx0XCI9PT10aGlzLmNhbWVyYVR5cGU/KHRoaXMuX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3MoKSx0aGlzLl9zZXREZWZhdWx0Q2FtZXJhKCkpOnRoaXMucGVyc3BlY3RpdmUodGhpcy5jYW1lcmFGT1YsdGhpcy5fcmVuZGVyZXIud2lkdGgvdGhpcy5fcmVuZGVyZXIuaGVpZ2h0KX0sZC5DYW1lcmEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZC5DYW1lcmEodGhpcy5fcmVuZGVyZXIpO3JldHVybiBhLmNhbWVyYUZPVj10aGlzLmNhbWVyYUZPVixhLmFzcGVjdFJhdGlvPXRoaXMuYXNwZWN0UmF0aW8sYS5leWVYPXRoaXMuZXllWCxhLmV5ZVk9dGhpcy5leWVZLGEuZXllWj10aGlzLmV5ZVosYS5jZW50ZXJYPXRoaXMuY2VudGVyWCxhLmNlbnRlclk9dGhpcy5jZW50ZXJZLGEuY2VudGVyWj10aGlzLmNlbnRlclosYS5jYW1lcmFOZWFyPXRoaXMuY2FtZXJhTmVhcixhLmNhbWVyYUZhcj10aGlzLmNhbWVyYUZhcixhLmNhbWVyYVR5cGU9dGhpcy5jYW1lcmFUeXBlLGEuY2FtZXJhTWF0cml4PXRoaXMuY2FtZXJhTWF0cml4LmNvcHkoKSxhLnByb2pNYXRyaXg9dGhpcy5wcm9qTWF0cml4LmNvcHkoKSxhfSxkLkNhbWVyYS5wcm90b3R5cGUuX2dldExvY2FsQXhlcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZXllWC10aGlzLmNlbnRlclgsYj10aGlzLmV5ZVktdGhpcy5jZW50ZXJZLGM9dGhpcy5leWVaLXRoaXMuY2VudGVyWixkPU1hdGguc3FydChhKmErYipiK2MqYyk7MCE9PWQmJihhLz1kLGIvPWQsYy89ZCk7dmFyIGU9dGhpcy51cFgsZj10aGlzLnVwWSxnPXRoaXMudXBaLGg9ZipjLWcqYixpPS1lKmMrZyphLGo9ZSpiLWYqYTtlPWIqai1jKmksZj0tYSpqK2MqaCxnPWEqaS1iKmg7dmFyIGs9TWF0aC5zcXJ0KGgqaCtpKmkraipqKTswIT09ayYmKGgvPWssaS89ayxqLz1rKTt2YXIgbD1NYXRoLnNxcnQoZSplK2YqZitnKmcpO3JldHVybiAwIT09bCYmKGUvPWwsZi89bCxnLz1sKSx7eDpbaCxpLGpdLHk6W2UsZixnXSx6OlthLGIsY119fSxkLkNhbWVyYS5wcm90b3R5cGUuX29yYml0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmV5ZVgtdGhpcy5jZW50ZXJYLGU9dGhpcy5leWVZLXRoaXMuY2VudGVyWSxmPXRoaXMuZXllWi10aGlzLmNlbnRlclosZz1NYXRoLnNxcnQoZCpkK2UqZStmKmYpLGg9TWF0aC5hdGFuMihkLGYpLGk9TWF0aC5hY29zKE1hdGgubWF4KC0xLE1hdGgubWluKDEsZS9nKSkpO2grPWEsaSs9YixnKz1jLGc8MCYmKGc9LjEpLGk+TWF0aC5QST9pPU1hdGguUEk6aTw9MCYmKGk9LjAwMSk7dmFyIGo9TWF0aC5zaW4oaSkqZypNYXRoLnNpbihoKSxrPU1hdGguY29zKGkpKmcsbD1NYXRoLnNpbihpKSpnKk1hdGguY29zKGgpO3RoaXMuY2FtZXJhKGordGhpcy5jZW50ZXJYLGsrdGhpcy5jZW50ZXJZLGwrdGhpcy5jZW50ZXJaLHRoaXMuY2VudGVyWCx0aGlzLmNlbnRlclksdGhpcy5jZW50ZXJaLDAsMSwwKX0sZC5DYW1lcmEucHJvdG90eXBlLl9pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzPT09dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYX0sZC5wcm90b3R5cGUuc2V0Q2FtZXJhPWZ1bmN0aW9uKGEpe3RoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmE9YSx0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5zZXQoYS5wcm9qTWF0cml4Lm1hdDRbMF0sYS5wcm9qTWF0cml4Lm1hdDRbMV0sYS5wcm9qTWF0cml4Lm1hdDRbMl0sYS5wcm9qTWF0cml4Lm1hdDRbM10sYS5wcm9qTWF0cml4Lm1hdDRbNF0sYS5wcm9qTWF0cml4Lm1hdDRbNV0sYS5wcm9qTWF0cml4Lm1hdDRbNl0sYS5wcm9qTWF0cml4Lm1hdDRbN10sYS5wcm9qTWF0cml4Lm1hdDRbOF0sYS5wcm9qTWF0cml4Lm1hdDRbOV0sYS5wcm9qTWF0cml4Lm1hdDRbMTBdLGEucHJvak1hdHJpeC5tYXQ0WzExXSxhLnByb2pNYXRyaXgubWF0NFsxMl0sYS5wcm9qTWF0cml4Lm1hdDRbMTNdLGEucHJvak1hdHJpeC5tYXQ0WzE0XSxhLnByb2pNYXRyaXgubWF0NFsxNV0pfSxiLmV4cG9ydHM9ZC5DYW1lcmF9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuR2VvbWV0cnk9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLnZlcnRpY2VzPVtdLHRoaXMubGluZVZlcnRpY2VzPVtdLHRoaXMubGluZU5vcm1hbHM9W10sdGhpcy52ZXJ0ZXhOb3JtYWxzPVtdLHRoaXMuZmFjZXM9W10sdGhpcy51dnM9W10sdGhpcy5lZGdlcz1bXSx0aGlzLmRldGFpbFg9dm9pZCAwIT09YT9hOjEsdGhpcy5kZXRhaWxZPXZvaWQgMCE9PWI/YjoxLGMgaW5zdGFuY2VvZiBGdW5jdGlvbiYmYy5jYWxsKHRoaXMpLHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLmNvbXB1dGVGYWNlcz1mdW5jdGlvbigpe3RoaXMuZmFjZXMubGVuZ3RoPTA7Zm9yKHZhciBhLGIsYyxkLGU9dGhpcy5kZXRhaWxYKzEsZj0wO2Y8dGhpcy5kZXRhaWxZO2YrKylmb3IodmFyIGc9MDtnPHRoaXMuZGV0YWlsWDtnKyspYT1mKmUrZyxiPWYqZStnKzEsYz0oZisxKSplK2crMSxkPShmKzEpKmUrZyx0aGlzLmZhY2VzLnB1c2goW2EsYixkXSksdGhpcy5mYWNlcy5wdXNoKFtkLGIsY10pO3JldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5fZ2V0RmFjZU5vcm1hbD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmZhY2VzW2FdLGM9dGhpcy52ZXJ0aWNlc1tiWzBdXSxlPXRoaXMudmVydGljZXNbYlsxXV0sZj10aGlzLnZlcnRpY2VzW2JbMl1dLGc9ZC5WZWN0b3Iuc3ViKGUsYyksaD1kLlZlY3Rvci5zdWIoZixjKSxpPWQuVmVjdG9yLmNyb3NzKGcsaCksaj1kLlZlY3Rvci5tYWcoaSksaz1qLyhkLlZlY3Rvci5tYWcoZykqZC5WZWN0b3IubWFnKGgpKTtyZXR1cm4gMD09PWt8fGlzTmFOKGspPyhjb25zb2xlLndhcm4oXCJwNS5HZW9tZXRyeS5wcm90b3R5cGUuX2dldEZhY2VOb3JtYWw6XCIsXCJmYWNlIGhhcyBjb2xpbmVhciBzaWRlcyBvciBhIHJlcGVhdGVkIHZlcnRleFwiKSxpKTooaz4xJiYoaz0xKSxpLm11bHQoTWF0aC5hc2luKGspL2opKX0sZC5HZW9tZXRyeS5wcm90b3R5cGUuY29tcHV0ZU5vcm1hbHM9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMudmVydGV4Tm9ybWFscyxjPXRoaXMudmVydGljZXMsZT10aGlzLmZhY2VzO2ZvcihiLmxlbmd0aD0wLGE9MDthPGMubGVuZ3RoOysrYSliLnB1c2gobmV3IGQuVmVjdG9yKTtmb3IodmFyIGY9MDtmPGUubGVuZ3RoOysrZilmb3IodmFyIGc9ZVtmXSxoPXRoaXMuX2dldEZhY2VOb3JtYWwoZiksaT0wO2k8MzsrK2kpe3ZhciBqPWdbaV07YltqXS5hZGQoaCl9Zm9yKGE9MDthPGMubGVuZ3RoOysrYSliW2FdLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5hdmVyYWdlTm9ybWFscz1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspe3ZhciBiPXRoaXMuZGV0YWlsWCsxLGM9ZC5WZWN0b3IuYWRkKHRoaXMudmVydGV4Tm9ybWFsc1thKmJdLHRoaXMudmVydGV4Tm9ybWFsc1thKmIrdGhpcy5kZXRhaWxYXSk7Yz1kLlZlY3Rvci5kaXYoYywyKSx0aGlzLnZlcnRleE5vcm1hbHNbYSpiXT1jLHRoaXMudmVydGV4Tm9ybWFsc1thKmIrdGhpcy5kZXRhaWxYXT1jfXJldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5hdmVyYWdlUG9sZU5vcm1hbHM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IGQuVmVjdG9yKDAsMCwwKSxiPTA7Yjx0aGlzLmRldGFpbFg7YisrKWEuYWRkKHRoaXMudmVydGV4Tm9ybWFsc1tiXSk7Zm9yKGE9ZC5WZWN0b3IuZGl2KGEsdGhpcy5kZXRhaWxYKSxiPTA7Yjx0aGlzLmRldGFpbFg7YisrKXRoaXMudmVydGV4Tm9ybWFsc1tiXT1hO2ZvcihhPW5ldyBkLlZlY3RvcigwLDAsMCksYj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xO2I+dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMS10aGlzLmRldGFpbFg7Yi0tKWEuYWRkKHRoaXMudmVydGV4Tm9ybWFsc1tiXSk7Zm9yKGE9ZC5WZWN0b3IuZGl2KGEsdGhpcy5kZXRhaWxYKSxiPXRoaXMudmVydGljZXMubGVuZ3RoLTE7Yj50aGlzLnZlcnRpY2VzLmxlbmd0aC0xLXRoaXMuZGV0YWlsWDtiLS0pdGhpcy52ZXJ0ZXhOb3JtYWxzW2JdPWE7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLl9tYWtlVHJpYW5nbGVFZGdlcz1mdW5jdGlvbigpe2lmKHRoaXMuZWRnZXMubGVuZ3RoPTAsQXJyYXkuaXNBcnJheSh0aGlzLnN0cm9rZUluZGljZXMpKWZvcih2YXIgYT0wLGI9dGhpcy5zdHJva2VJbmRpY2VzLmxlbmd0aDthPGI7YSsrKXRoaXMuZWRnZXMucHVzaCh0aGlzLnN0cm9rZUluZGljZXNbYV0pO2Vsc2UgZm9yKHZhciBjPTA7Yzx0aGlzLmZhY2VzLmxlbmd0aDtjKyspdGhpcy5lZGdlcy5wdXNoKFt0aGlzLmZhY2VzW2NdWzBdLHRoaXMuZmFjZXNbY11bMV1dKSx0aGlzLmVkZ2VzLnB1c2goW3RoaXMuZmFjZXNbY11bMV0sdGhpcy5mYWNlc1tjXVsyXV0pLHRoaXMuZWRnZXMucHVzaChbdGhpcy5mYWNlc1tjXVsyXSx0aGlzLmZhY2VzW2NdWzBdXSk7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLl9lZGdlc1RvVmVydGljZXM9ZnVuY3Rpb24oKXt0aGlzLmxpbmVWZXJ0aWNlcy5sZW5ndGg9MCx0aGlzLmxpbmVOb3JtYWxzLmxlbmd0aD0wO2Zvcih2YXIgYT0wO2E8dGhpcy5lZGdlcy5sZW5ndGg7YSsrKXt2YXIgYj10aGlzLnZlcnRpY2VzW3RoaXMuZWRnZXNbYV1bMF1dLGM9dGhpcy52ZXJ0aWNlc1t0aGlzLmVkZ2VzW2FdWzFdXSxkPWMuY29weSgpLnN1YihiKS5ub3JtYWxpemUoKSxlPWIuYXJyYXkoKSxmPWIuYXJyYXkoKSxnPWMuYXJyYXkoKSxoPWMuYXJyYXkoKSxpPWQuYXJyYXkoKSxqPWQuYXJyYXkoKTtpLnB1c2goMSksai5wdXNoKC0xKSx0aGlzLmxpbmVOb3JtYWxzLnB1c2goaSxqLGksaSxqLGopLHRoaXMubGluZVZlcnRpY2VzLnB1c2goZSxmLGcsZyxmLGgpfXJldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnZlcnRpY2VzLmxlbmd0aD4wKXtmb3IodmFyIGE9dGhpcy52ZXJ0aWNlc1swXS5jb3B5KCksYj10aGlzLnZlcnRpY2VzWzBdLmNvcHkoKSxjPTA7Yzx0aGlzLnZlcnRpY2VzLmxlbmd0aDtjKyspYS54PU1hdGgubWF4KGEueCx0aGlzLnZlcnRpY2VzW2NdLngpLGIueD1NYXRoLm1pbihiLngsdGhpcy52ZXJ0aWNlc1tjXS54KSxhLnk9TWF0aC5tYXgoYS55LHRoaXMudmVydGljZXNbY10ueSksYi55PU1hdGgubWluKGIueSx0aGlzLnZlcnRpY2VzW2NdLnkpLGEuej1NYXRoLm1heChhLnosdGhpcy52ZXJ0aWNlc1tjXS56KSxiLno9TWF0aC5taW4oYi56LHRoaXMudmVydGljZXNbY10ueik7dmFyIGU9ZC5WZWN0b3IubGVycChhLGIsLjUpLGY9ZC5WZWN0b3Iuc3ViKGEsYiksZz1NYXRoLm1heChNYXRoLm1heChmLngsZi55KSxmLnopLGg9MjAwL2c7Zm9yKGM9MDtjPHRoaXMudmVydGljZXMubGVuZ3RoO2MrKyl0aGlzLnZlcnRpY2VzW2NdLnN1YihlKSx0aGlzLnZlcnRpY2VzW2NdLm11bHQoaCl9cmV0dXJuIHRoaXN9LGIuZXhwb3J0cz1kLkdlb21ldHJ5fSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDcxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPUFycmF5LGY9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheX07XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEZsb2F0MzJBcnJheSYmKGU9RmxvYXQzMkFycmF5LGY9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheXx8YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheX0pLGQuTWF0cml4PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxiPTA7YjxhLmxlbmd0aDsrK2IpYVtiXT1hcmd1bWVudHNbYl07cmV0dXJuIGEubGVuZ3RoJiZhW2EubGVuZ3RoLTFdaW5zdGFuY2VvZiBkJiYodGhpcy5wNT1hW2EubGVuZ3RoLTFdKSxcIm1hdDNcIj09PWFbMF0/dGhpcy5tYXQzPUFycmF5LmlzQXJyYXkoYVsxXSk/YVsxXTpuZXcgZShbMSwwLDAsMCwxLDAsMCwwLDFdKTp0aGlzLm1hdDQ9QXJyYXkuaXNBcnJheShhWzBdKT9hWzBdOm5ldyBlKFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSksdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLnNldD1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuTWF0cml4Pyh0aGlzLm1hdDQ9YS5tYXQ0LHRoaXMpOmYoYSk/KHRoaXMubWF0ND1hLHRoaXMpOigxNj09PWFyZ3VtZW50cy5sZW5ndGgmJih0aGlzLm1hdDRbMF09YXJndW1lbnRzWzBdLHRoaXMubWF0NFsxXT1hcmd1bWVudHNbMV0sdGhpcy5tYXQ0WzJdPWFyZ3VtZW50c1syXSx0aGlzLm1hdDRbM109YXJndW1lbnRzWzNdLHRoaXMubWF0NFs0XT1hcmd1bWVudHNbNF0sdGhpcy5tYXQ0WzVdPWFyZ3VtZW50c1s1XSx0aGlzLm1hdDRbNl09YXJndW1lbnRzWzZdLHRoaXMubWF0NFs3XT1hcmd1bWVudHNbN10sdGhpcy5tYXQ0WzhdPWFyZ3VtZW50c1s4XSx0aGlzLm1hdDRbOV09YXJndW1lbnRzWzldLHRoaXMubWF0NFsxMF09YXJndW1lbnRzWzEwXSx0aGlzLm1hdDRbMTFdPWFyZ3VtZW50c1sxMV0sdGhpcy5tYXQ0WzEyXT1hcmd1bWVudHNbMTJdLHRoaXMubWF0NFsxM109YXJndW1lbnRzWzEzXSx0aGlzLm1hdDRbMTRdPWFyZ3VtZW50c1sxNF0sdGhpcy5tYXQ0WzE1XT1hcmd1bWVudHNbMTVdKSx0aGlzKX0sZC5NYXRyaXgucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgZC5NYXRyaXgodGhpcy5tYXQ0LHRoaXMucDUpfSxkLk1hdHJpeC5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkLk1hdHJpeCh0aGlzLnA1KTtyZXR1cm4gYS5tYXQ0WzBdPXRoaXMubWF0NFswXSxhLm1hdDRbMV09dGhpcy5tYXQ0WzFdLGEubWF0NFsyXT10aGlzLm1hdDRbMl0sYS5tYXQ0WzNdPXRoaXMubWF0NFszXSxhLm1hdDRbNF09dGhpcy5tYXQ0WzRdLGEubWF0NFs1XT10aGlzLm1hdDRbNV0sYS5tYXQ0WzZdPXRoaXMubWF0NFs2XSxhLm1hdDRbN109dGhpcy5tYXQ0WzddLGEubWF0NFs4XT10aGlzLm1hdDRbOF0sYS5tYXQ0WzldPXRoaXMubWF0NFs5XSxhLm1hdDRbMTBdPXRoaXMubWF0NFsxMF0sYS5tYXQ0WzExXT10aGlzLm1hdDRbMTFdLGEubWF0NFsxMl09dGhpcy5tYXQ0WzEyXSxhLm1hdDRbMTNdPXRoaXMubWF0NFsxM10sYS5tYXQ0WzE0XT10aGlzLm1hdDRbMTRdLGEubWF0NFsxNV09dGhpcy5tYXQ0WzE1XSxhfSxkLk1hdHJpeC5pZGVudGl0eT1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IGQuTWF0cml4KGEpfSxkLk1hdHJpeC5wcm90b3R5cGUudHJhbnNwb3NlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxnLGgsaTtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuTWF0cml4PyhiPWEubWF0NFsxXSxjPWEubWF0NFsyXSxlPWEubWF0NFszXSxnPWEubWF0NFs2XSxoPWEubWF0NFs3XSxpPWEubWF0NFsxMV0sdGhpcy5tYXQ0WzBdPWEubWF0NFswXSx0aGlzLm1hdDRbMV09YS5tYXQ0WzRdLHRoaXMubWF0NFsyXT1hLm1hdDRbOF0sdGhpcy5tYXQ0WzNdPWEubWF0NFsxMl0sdGhpcy5tYXQ0WzRdPWIsdGhpcy5tYXQ0WzVdPWEubWF0NFs1XSx0aGlzLm1hdDRbNl09YS5tYXQ0WzldLHRoaXMubWF0NFs3XT1hLm1hdDRbMTNdLHRoaXMubWF0NFs4XT1jLHRoaXMubWF0NFs5XT1nLHRoaXMubWF0NFsxMF09YS5tYXQ0WzEwXSx0aGlzLm1hdDRbMTFdPWEubWF0NFsxNF0sdGhpcy5tYXQ0WzEyXT1lLHRoaXMubWF0NFsxM109aCx0aGlzLm1hdDRbMTRdPWksdGhpcy5tYXQ0WzE1XT1hLm1hdDRbMTVdKTpmKGEpJiYoYj1hWzFdLGM9YVsyXSxlPWFbM10sZz1hWzZdLGg9YVs3XSxpPWFbMTFdLHRoaXMubWF0NFswXT1hWzBdLHRoaXMubWF0NFsxXT1hWzRdLHRoaXMubWF0NFsyXT1hWzhdLHRoaXMubWF0NFszXT1hWzEyXSx0aGlzLm1hdDRbNF09Yix0aGlzLm1hdDRbNV09YVs1XSx0aGlzLm1hdDRbNl09YVs5XSx0aGlzLm1hdDRbN109YVsxM10sdGhpcy5tYXQ0WzhdPWMsdGhpcy5tYXQ0WzldPWcsdGhpcy5tYXQ0WzEwXT1hWzEwXSx0aGlzLm1hdDRbMTFdPWFbMTRdLHRoaXMubWF0NFsxMl09ZSx0aGlzLm1hdDRbMTNdPWgsdGhpcy5tYXQ0WzE0XT1pLHRoaXMubWF0NFsxNV09YVsxNV0pLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHM7YSBpbnN0YW5jZW9mIGQuTWF0cml4PyhiPWEubWF0NFswXSxjPWEubWF0NFsxXSxlPWEubWF0NFsyXSxnPWEubWF0NFszXSxoPWEubWF0NFs0XSxpPWEubWF0NFs1XSxqPWEubWF0NFs2XSxrPWEubWF0NFs3XSxsPWEubWF0NFs4XSxtPWEubWF0NFs5XSxuPWEubWF0NFsxMF0sbz1hLm1hdDRbMTFdLHA9YS5tYXQ0WzEyXSxxPWEubWF0NFsxM10scj1hLm1hdDRbMTRdLHM9YS5tYXQ0WzE1XSk6ZihhKSYmKGI9YVswXSxjPWFbMV0sZT1hWzJdLGc9YVszXSxoPWFbNF0saT1hWzVdLGo9YVs2XSxrPWFbN10sbD1hWzhdLG09YVs5XSxuPWFbMTBdLG89YVsxMV0scD1hWzEyXSxxPWFbMTNdLHI9YVsxNF0scz1hWzE1XSk7dmFyIHQ9YippLWMqaCx1PWIqai1lKmgsdj1iKmstZypoLHc9YypqLWUqaSx4PWMqay1nKmkseT1lKmstZypqLHo9bCpxLW0qcCxBPWwqci1uKnAsQj1sKnMtbypwLEM9bSpyLW4qcSxEPW0qcy1vKnEsRT1uKnMtbypyLEY9dCpFLXUqRCt2KkMrdypCLXgqQSt5Kno7cmV0dXJuIEY/KEY9MS9GLHRoaXMubWF0NFswXT0oaSpFLWoqRCtrKkMpKkYsdGhpcy5tYXQ0WzFdPShlKkQtYypFLWcqQykqRix0aGlzLm1hdDRbMl09KHEqeS1yKngrcyp3KSpGLHRoaXMubWF0NFszXT0obip4LW0qeS1vKncpKkYsdGhpcy5tYXQ0WzRdPShqKkItaCpFLWsqQSkqRix0aGlzLm1hdDRbNV09KGIqRS1lKkIrZypBKSpGLHRoaXMubWF0NFs2XT0ocip2LXAqeS1zKnUpKkYsdGhpcy5tYXQ0WzddPShsKnktbip2K28qdSkqRix0aGlzLm1hdDRbOF09KGgqRC1pKkIrayp6KSpGLHRoaXMubWF0NFs5XT0oYypCLWIqRC1nKnopKkYsdGhpcy5tYXQ0WzEwXT0ocCp4LXEqditzKnQpKkYsdGhpcy5tYXQ0WzExXT0obSp2LWwqeC1vKnQpKkYsdGhpcy5tYXQ0WzEyXT0oaSpBLWgqQy1qKnopKkYsdGhpcy5tYXQ0WzEzXT0oYipDLWMqQStlKnopKkYsdGhpcy5tYXQ0WzE0XT0ocSp1LXAqdy1yKnQpKkYsdGhpcy5tYXQ0WzE1XT0obCp3LW0qdStuKnQpKkYsdGhpcyk6bnVsbH0sZC5NYXRyaXgucHJvdG90eXBlLmludmVydDN4Mz1mdW5jdGlvbigpe3ZhciBhPXRoaXMubWF0M1swXSxiPXRoaXMubWF0M1sxXSxjPXRoaXMubWF0M1syXSxkPXRoaXMubWF0M1szXSxlPXRoaXMubWF0M1s0XSxmPXRoaXMubWF0M1s1XSxnPXRoaXMubWF0M1s2XSxoPXRoaXMubWF0M1s3XSxpPXRoaXMubWF0M1s4XSxqPWkqZS1mKmgsaz0taSpkK2YqZyxsPWgqZC1lKmcsbT1hKmorYiprK2MqbDtyZXR1cm4gbT8obT0xL20sdGhpcy5tYXQzWzBdPWoqbSx0aGlzLm1hdDNbMV09KC1pKmIrYypoKSptLHRoaXMubWF0M1syXT0oZipiLWMqZSkqbSx0aGlzLm1hdDNbM109ayptLHRoaXMubWF0M1s0XT0oaSphLWMqZykqbSx0aGlzLm1hdDNbNV09KC1mKmErYypkKSptLHRoaXMubWF0M1s2XT1sKm0sdGhpcy5tYXQzWzddPSgtaCphK2IqZykqbSx0aGlzLm1hdDNbOF09KGUqYS1iKmQpKm0sdGhpcyk6bnVsbH0sZC5NYXRyaXgucHJvdG90eXBlLnRyYW5zcG9zZTN4Mz1mdW5jdGlvbihhKXt2YXIgYj1hWzFdLGM9YVsyXSxkPWFbNV07cmV0dXJuIHRoaXMubWF0M1sxXT1hWzNdLHRoaXMubWF0M1syXT1hWzZdLHRoaXMubWF0M1szXT1iLHRoaXMubWF0M1s1XT1hWzddLHRoaXMubWF0M1s2XT1jLHRoaXMubWF0M1s3XT1kLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5pbnZlcnNlVHJhbnNwb3NlPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PXRoaXMubWF0Mz9jb25zb2xlLmVycm9yKFwic29ycnksIHRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyB3aXRoIG1hdDNcIik6KHRoaXMubWF0M1swXT1hLm1hdDRbMF0sdGhpcy5tYXQzWzFdPWEubWF0NFsxXSx0aGlzLm1hdDNbMl09YS5tYXQ0WzJdLHRoaXMubWF0M1szXT1hLm1hdDRbNF0sdGhpcy5tYXQzWzRdPWEubWF0NFs1XSx0aGlzLm1hdDNbNV09YS5tYXQ0WzZdLHRoaXMubWF0M1s2XT1hLm1hdDRbOF0sdGhpcy5tYXQzWzddPWEubWF0NFs5XSx0aGlzLm1hdDNbOF09YS5tYXQ0WzEwXSk7dmFyIGI9dGhpcy5pbnZlcnQzeDMoKTtpZihiKWIudHJhbnNwb3NlM3gzKHRoaXMubWF0Myk7ZWxzZSBmb3IodmFyIGM9MDtjPDk7YysrKXRoaXMubWF0M1tjXT0wO3JldHVybiB0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuZGV0ZXJtaW5hbnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1hdDRbMF0qdGhpcy5tYXQ0WzVdLXRoaXMubWF0NFsxXSp0aGlzLm1hdDRbNF0sYj10aGlzLm1hdDRbMF0qdGhpcy5tYXQ0WzZdLXRoaXMubWF0NFsyXSp0aGlzLm1hdDRbNF0sYz10aGlzLm1hdDRbMF0qdGhpcy5tYXQ0WzddLXRoaXMubWF0NFszXSp0aGlzLm1hdDRbNF0sZD10aGlzLm1hdDRbMV0qdGhpcy5tYXQ0WzZdLXRoaXMubWF0NFsyXSp0aGlzLm1hdDRbNV0sZT10aGlzLm1hdDRbMV0qdGhpcy5tYXQ0WzddLXRoaXMubWF0NFszXSp0aGlzLm1hdDRbNV0sZj10aGlzLm1hdDRbMl0qdGhpcy5tYXQ0WzddLXRoaXMubWF0NFszXSp0aGlzLm1hdDRbNl0sZz10aGlzLm1hdDRbOF0qdGhpcy5tYXQ0WzEzXS10aGlzLm1hdDRbOV0qdGhpcy5tYXQ0WzEyXSxoPXRoaXMubWF0NFs4XSp0aGlzLm1hdDRbMTRdLXRoaXMubWF0NFsxMF0qdGhpcy5tYXQ0WzEyXSxpPXRoaXMubWF0NFs4XSp0aGlzLm1hdDRbMTVdLXRoaXMubWF0NFsxMV0qdGhpcy5tYXQ0WzEyXSxqPXRoaXMubWF0NFs5XSp0aGlzLm1hdDRbMTRdLXRoaXMubWF0NFsxMF0qdGhpcy5tYXQ0WzEzXSxrPXRoaXMubWF0NFs5XSp0aGlzLm1hdDRbMTVdLXRoaXMubWF0NFsxMV0qdGhpcy5tYXQ0WzEzXTtyZXR1cm4gYSoodGhpcy5tYXQ0WzEwXSp0aGlzLm1hdDRbMTVdLXRoaXMubWF0NFsxMV0qdGhpcy5tYXQ0WzE0XSktYiprK2MqaitkKmktZSpoK2YqZ30sZC5NYXRyaXgucHJvdG90eXBlLm11bHQ9ZnVuY3Rpb24oYSl7dmFyIGI7aWYoYT09PXRoaXN8fGE9PT10aGlzLm1hdDQpYj10aGlzLmNvcHkoKS5tYXQ0O2Vsc2UgaWYoYSBpbnN0YW5jZW9mIGQuTWF0cml4KWI9YS5tYXQ0O2Vsc2V7aWYoIWYoYSkpcmV0dXJuO2I9YX12YXIgYz10aGlzLm1hdDRbMF0sZT10aGlzLm1hdDRbMV0sZz10aGlzLm1hdDRbMl0saD10aGlzLm1hdDRbM107cmV0dXJuIHRoaXMubWF0NFswXT1jKmJbMF0rZSpiWzRdK2cqYls4XStoKmJbMTJdLHRoaXMubWF0NFsxXT1jKmJbMV0rZSpiWzVdK2cqYls5XStoKmJbMTNdLHRoaXMubWF0NFsyXT1jKmJbMl0rZSpiWzZdK2cqYlsxMF0raCpiWzE0XSx0aGlzLm1hdDRbM109YypiWzNdK2UqYls3XStnKmJbMTFdK2gqYlsxNV0sYz10aGlzLm1hdDRbNF0sZT10aGlzLm1hdDRbNV0sZz10aGlzLm1hdDRbNl0saD10aGlzLm1hdDRbN10sdGhpcy5tYXQ0WzRdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzVdPWMqYlsxXStlKmJbNV0rZypiWzldK2gqYlsxM10sdGhpcy5tYXQ0WzZdPWMqYlsyXStlKmJbNl0rZypiWzEwXStoKmJbMTRdLHRoaXMubWF0NFs3XT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSxjPXRoaXMubWF0NFs4XSxlPXRoaXMubWF0NFs5XSxnPXRoaXMubWF0NFsxMF0saD10aGlzLm1hdDRbMTFdLHRoaXMubWF0NFs4XT1jKmJbMF0rZSpiWzRdK2cqYls4XStoKmJbMTJdLHRoaXMubWF0NFs5XT1jKmJbMV0rZSpiWzVdK2cqYls5XStoKmJbMTNdLHRoaXMubWF0NFsxMF09YypiWzJdK2UqYls2XStnKmJbMTBdK2gqYlsxNF0sdGhpcy5tYXQ0WzExXT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSxjPXRoaXMubWF0NFsxMl0sZT10aGlzLm1hdDRbMTNdLGc9dGhpcy5tYXQ0WzE0XSxoPXRoaXMubWF0NFsxNV0sdGhpcy5tYXQ0WzEyXT1jKmJbMF0rZSpiWzRdK2cqYls4XStoKmJbMTJdLHRoaXMubWF0NFsxM109YypiWzFdK2UqYls1XStnKmJbOV0raCpiWzEzXSx0aGlzLm1hdDRbMTRdPWMqYlsyXStlKmJbNl0rZypiWzEwXStoKmJbMTRdLHRoaXMubWF0NFsxNV09YypiWzNdK2UqYls3XStnKmJbMTFdK2gqYlsxNV0sdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyhiPWEueSxjPWEueixhPWEueCk6YSBpbnN0YW5jZW9mIEFycmF5JiYoYj1hWzFdLGM9YVsyXSxhPWFbMF0pLHRoaXMubWF0NFswXSo9YSx0aGlzLm1hdDRbMV0qPWEsdGhpcy5tYXQ0WzJdKj1hLHRoaXMubWF0NFszXSo9YSx0aGlzLm1hdDRbNF0qPWIsdGhpcy5tYXQ0WzVdKj1iLHRoaXMubWF0NFs2XSo9Yix0aGlzLm1hdDRbN10qPWIsdGhpcy5tYXQ0WzhdKj1jLHRoaXMubWF0NFs5XSo9Yyx0aGlzLm1hdDRbMTBdKj1jLHRoaXMubWF0NFsxMV0qPWMsdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj10aGlzLnA1P3RoaXMucDUuX3RvUmFkaWFucyhhKTphO2IgaW5zdGFuY2VvZiBkLlZlY3Rvcj8oYz1iLnksZT1iLnosYj1iLngpOmIgaW5zdGFuY2VvZiBBcnJheSYmKGM9YlsxXSxlPWJbMl0sYj1iWzBdKTt2YXIgZz1NYXRoLnNxcnQoYipiK2MqYytlKmUpO2IqPTEvZyxjKj0xL2csZSo9MS9nO3ZhciBoPXRoaXMubWF0NFswXSxpPXRoaXMubWF0NFsxXSxqPXRoaXMubWF0NFsyXSxrPXRoaXMubWF0NFszXSxsPXRoaXMubWF0NFs0XSxtPXRoaXMubWF0NFs1XSxuPXRoaXMubWF0NFs2XSxvPXRoaXMubWF0NFs3XSxwPXRoaXMubWF0NFs4XSxxPXRoaXMubWF0NFs5XSxyPXRoaXMubWF0NFsxMF0scz10aGlzLm1hdDRbMTFdLHQ9TWF0aC5zaW4oZiksdT1NYXRoLmNvcyhmKSx2PTEtdSx3PWIqYip2K3UseD1jKmIqditlKnQseT1lKmIqdi1jKnQsej1iKmMqdi1lKnQsQT1jKmMqdit1LEI9ZSpjKnYrYip0LEM9YiplKnYrYyp0LEQ9YyplKnYtYip0LEU9ZSplKnYrdTtyZXR1cm4gdGhpcy5tYXQ0WzBdPWgqdytsKngrcCp5LHRoaXMubWF0NFsxXT1pKncrbSp4K3EqeSx0aGlzLm1hdDRbMl09aip3K24qeCtyKnksdGhpcy5tYXQ0WzNdPWsqdytvKngrcyp5LHRoaXMubWF0NFs0XT1oKnorbCpBK3AqQix0aGlzLm1hdDRbNV09aSp6K20qQStxKkIsdGhpcy5tYXQ0WzZdPWoqeituKkErcipCLHRoaXMubWF0NFs3XT1rKnorbypBK3MqQix0aGlzLm1hdDRbOF09aCpDK2wqRCtwKkUsdGhpcy5tYXQ0WzldPWkqQyttKkQrcSpFLHRoaXMubWF0NFsxMF09aipDK24qRCtyKkUsdGhpcy5tYXQ0WzExXT1rKkMrbypEK3MqRSx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGQ9YVsyXXx8MDt0aGlzLm1hdDRbMTJdKz10aGlzLm1hdDRbMF0qYit0aGlzLm1hdDRbNF0qYyt0aGlzLm1hdDRbOF0qZCx0aGlzLm1hdDRbMTNdKz10aGlzLm1hdDRbMV0qYit0aGlzLm1hdDRbNV0qYyt0aGlzLm1hdDRbOV0qZCx0aGlzLm1hdDRbMTRdKz10aGlzLm1hdDRbMl0qYit0aGlzLm1hdDRbNl0qYyt0aGlzLm1hdDRbMTBdKmQsdGhpcy5tYXQ0WzE1XSs9dGhpcy5tYXQ0WzNdKmIrdGhpcy5tYXQ0WzddKmMrdGhpcy5tYXQ0WzExXSpkfSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbihhKXt0aGlzLnJvdGF0ZShhLDEsMCwwKX0sZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oYSl7dGhpcy5yb3RhdGUoYSwwLDEsMCl9LGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKGEpe3RoaXMucm90YXRlKGEsMCwwLDEpfSxkLk1hdHJpeC5wcm90b3R5cGUucGVyc3BlY3RpdmU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9MS9NYXRoLnRhbihhLzIpLGY9MS8oYy1kKTtyZXR1cm4gdGhpcy5tYXQ0WzBdPWUvYix0aGlzLm1hdDRbMV09MCx0aGlzLm1hdDRbMl09MCx0aGlzLm1hdDRbM109MCx0aGlzLm1hdDRbNF09MCx0aGlzLm1hdDRbNV09ZSx0aGlzLm1hdDRbNl09MCx0aGlzLm1hdDRbN109MCx0aGlzLm1hdDRbOF09MCx0aGlzLm1hdDRbOV09MCx0aGlzLm1hdDRbMTBdPShkK2MpKmYsdGhpcy5tYXQ0WzExXT0tMSx0aGlzLm1hdDRbMTJdPTAsdGhpcy5tYXQ0WzEzXT0wLHRoaXMubWF0NFsxNF09MipkKmMqZix0aGlzLm1hdDRbMTVdPTAsdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLm9ydGhvPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz0xLyhhLWIpLGg9MS8oYy1kKSxpPTEvKGUtZik7cmV0dXJuIHRoaXMubWF0NFswXT0tMipnLHRoaXMubWF0NFsxXT0wLHRoaXMubWF0NFsyXT0wLHRoaXMubWF0NFszXT0wLHRoaXMubWF0NFs0XT0wLHRoaXMubWF0NFs1XT0tMipoLHRoaXMubWF0NFs2XT0wLHRoaXMubWF0NFs3XT0wLHRoaXMubWF0NFs4XT0wLHRoaXMubWF0NFs5XT0wLHRoaXMubWF0NFsxMF09MippLHRoaXMubWF0NFsxMV09MCx0aGlzLm1hdDRbMTJdPShhK2IpKmcsdGhpcy5tYXQ0WzEzXT0oZCtjKSpoLHRoaXMubWF0NFsxNF09KGYrZSkqaSx0aGlzLm1hdDRbMTVdPTEsdGhpc30sYi5leHBvcnRzPWQuTWF0cml4fSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDcyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLlJlbmRlcmVyR0wucHJvdG90eXBlLmJlZ2luU2hhcGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9dm9pZCAwIT09YT9hOmUuTElORV9TVFJJUCx2b2lkIDA9PT10aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXM/KHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUuZWRnZXM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0aWNlcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFscz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUudXZDb29yZHM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5jb2xvckJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS51dkJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGV4QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUucG9pbnRWZXJ0ZXhCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleD1bXSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleD1bXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4PVtdKToodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5lZGdlcy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFscy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcy5sZW5ndGg9MCksdGhpcy5pc0ltbWVkaWF0ZURyYXdpbmc9ITAsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS52ZXJ0ZXg9ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGY7Yz1lPWY9MCwzPT09YXJndW1lbnRzLmxlbmd0aD9jPWFyZ3VtZW50c1syXTo0PT09YXJndW1lbnRzLmxlbmd0aD8oZT1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10pOjU9PT1hcmd1bWVudHMubGVuZ3RoJiYoYz1hcmd1bWVudHNbMl0sZT1hcmd1bWVudHNbM10sZj1hcmd1bWVudHNbNF0pO3ZhciBnPW5ldyBkLlZlY3RvcihhLGIsYyk7dGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLnB1c2goZyk7dmFyIGg9dGhpcy5jdXJGaWxsQ29sb3J8fFsuNSwuNSwuNSwxXTtyZXR1cm4gdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleENvbG9ycy5wdXNoKGhbMF0saFsxXSxoWzJdLGhbM10pLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcy5wdXNoKGUsZiksdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF09YSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsxXT1iLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzJdPWMsdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF09YSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXT1iLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzJdPWMsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5lbmRTaGFwZT1mdW5jdGlvbihhLGIsYyxmLGcsaCl7aWYodGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT09PWUuUE9JTlRTKXRoaXMuX3VzZVBvaW50U2hhZGVyKCksdGhpcy5jdXJQb2ludFNoYWRlci5iaW5kU2hhZGVyKCksdGhpcy5fZHJhd1BvaW50cyh0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMsdGhpcy5pbW1lZGlhdGVNb2RlLnBvaW50VmVydGV4QnVmZmVyKSx0aGlzLmN1clBvaW50U2hhZGVyLnVuYmluZFNoYWRlcigpO2Vsc2UgaWYodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aD4xKXtpZih0aGlzLl91c2VJbW1lZGlhdGVNb2RlU2hhZGVyKCksdGhpcy5fZG9TdHJva2UmJnRoaXMuZHJhd01vZGUhPT1lLlRFWFRVUkUpe2Zvcih2YXIgaT0wO2k8dGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aC0xO2krKyl0aGlzLmltbWVkaWF0ZU1vZGUuZWRnZXMucHVzaChbaSxpKzFdKTthPT09ZS5DTE9TRSYmdGhpcy5pbW1lZGlhdGVNb2RlLmVkZ2VzLnB1c2goW3RoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGgtMSwwXSksZC5HZW9tZXRyeS5wcm90b3R5cGUuX2VkZ2VzVG9WZXJ0aWNlcy5jYWxsKHRoaXMuaW1tZWRpYXRlTW9kZSksdGhpcy5fZHJhd1N0cm9rZUltbWVkaWF0ZU1vZGUoKX1pZih0aGlzLl9kb0ZpbGwpe2lmKHRoaXMuaXNCZXppZXJ8fHRoaXMuaXNRdWFkcmF0aWN8fHRoaXMuaXNDdXJ2ZSl7dmFyIGo9W25ldyBGbG9hdDMyQXJyYXkodGhpcy5fdlRvTkFycmF5KHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcykpXSxrPXRoaXMuX3RyaWFuZ3VsYXRlKGopO3RoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcz1bXTtmb3IodmFyIGw9MCxtPWsubGVuZ3RoO2w8bTtsKz0zKXRoaXMudmVydGV4KGtbbF0sa1tsKzFdLGtbbCsyXSl9dGhpcy5fZHJhd0ZpbGxJbW1lZGlhdGVNb2RlKGEsYixjLGYsZyxoKX19cmV0dXJuIHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcy5sZW5ndGg9MCx0aGlzLmlzSW1tZWRpYXRlRHJhd2luZz0hMSx0aGlzLmlzQmV6aWVyPSExLHRoaXMuaXNRdWFkcmF0aWM9ITEsdGhpcy5pc0N1cnZlPSExLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4Lmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4Lmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgubGVuZ3RoPTAsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd0ZpbGxJbW1lZGlhdGVNb2RlPWZ1bmN0aW9uKGEsYixjLGQsZixnKXt2YXIgaD10aGlzLkdMO2lmKHRoaXMuY3VyRmlsbFNoYWRlci5iaW5kU2hhZGVyKCksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4QnVmZmVyLGguQVJSQVlfQlVGRkVSLHRoaXMuX3ZUb05BcnJheSh0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMpLEZsb2F0MzJBcnJheSxoLkRZTkFNSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxoLkZMT0FULCExLDAsMCkpLHRoaXMuZHJhd01vZGU9PT1lLkZJTEwmJnRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhDb2xvciYmKHRoaXMuX2JpbmRCdWZmZXIodGhpcy5pbW1lZGlhdGVNb2RlLmNvbG9yQnVmZmVyLGguQVJSQVlfQlVGRkVSLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnMsRmxvYXQzMkFycmF5LGguRFlOQU1JQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhDb2xvci5sb2NhdGlvbiw0LGguRkxPQVQsITEsMCwwKSksdGhpcy5kcmF3TW9kZT09PWUuVEVYVFVSRSYmdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVRleENvb3JkJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUudXZCdWZmZXIsaC5BUlJBWV9CVUZGRVIsdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLEZsb2F0MzJBcnJheSxoLkRZTkFNSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMixoLkZMT0FULCExLDAsMCkpLHRoaXMuZHJhd01vZGU9PT1lLkZJTEx8fHRoaXMuZHJhd01vZGU9PT1lLlRFWFRVUkUpc3dpdGNoKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGUpe2Nhc2UgZS5MSU5FX1NUUklQOmNhc2UgZS5MSU5FUzpjYXNlIGUuVFJJQU5HTEVTOnRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9dGhpcy5pc0Jlemllcnx8dGhpcy5pc1F1YWRyYXRpY3x8dGhpcy5pc0N1cnZlP2UuVFJJQU5HTEVTOmUuVFJJQU5HTEVfRkFOfWVsc2Ugc3dpdGNoKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGUpe2Nhc2UgZS5MSU5FX1NUUklQOmNhc2UgZS5MSU5FUzp0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPWUuTElORV9MT09QfWlmKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9PT1lLlFVQURTfHx0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPT09ZS5RVUFEX1NUUklQKXRocm93IG5ldyBFcnJvcihcInNvcnJ5LCBcIit0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlK1wiIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gd2ViZ2wgbW9kZS5cIik7dGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyRmlsbENvbG9yKSxoLmVuYWJsZShoLkJMRU5EKSxoLmRyYXdBcnJheXModGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZSwwLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCx0aGlzLmN1ckZpbGxTaGFkZXIudW5iaW5kU2hhZGVyKCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdTdHJva2VJbW1lZGlhdGVNb2RlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5HTDt0aGlzLmN1clN0cm9rZVNoYWRlci5iaW5kU2hhZGVyKCksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGV4QnVmZmVyLGEuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4odGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0aWNlcyksRmxvYXQzMkFycmF5LGEuU1RBVElDX0RSQVcpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGEuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUubGluZU5vcm1hbEJ1ZmZlcixhLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFscyksRmxvYXQzMkFycmF5LGEuU1RBVElDX0RSQVcpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24ubG9jYXRpb24sNCxhLkZMT0FULCExLDAsMCkpLHRoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1clN0cm9rZUNvbG9yKSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsMCx0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzLmxlbmd0aCksdGhpcy5jdXJTdHJva2VTaGFkZXIudW5iaW5kU2hhZGVyKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxiLmV4cG9ydHM9ZC5SZW5kZXJlckdMfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw3MzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT0wO2QuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2luaXRCdWZmZXJEZWZhdWx0cz1mdW5jdGlvbihhKXtpZih0aGlzLl9mcmVlQnVmZmVycyhhKSwrK2U+MWUzKXt2YXIgYj1PYmplY3Qua2V5cyh0aGlzLmdIYXNoKVswXTtkZWxldGUgdGhpcy5nSGFzaFtiXSxlLS19dGhpcy5nSGFzaFthXT17fX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZnJlZUJ1ZmZlcnM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5nSGFzaFthXTtpZihiKXtkZWxldGUgdGhpcy5nSGFzaFthXSxlLS07dmFyIGM9dGhpcy5HTDtiLnZlcnRleEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi52ZXJ0ZXhCdWZmZXIpLGIubm9ybWFsQnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLm5vcm1hbEJ1ZmZlciksYi5saW5lTm9ybWFsQnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLmxpbmVOb3JtYWxCdWZmZXIpLGIudXZCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIudXZCdWZmZXIpLGIuaW5kZXhCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIuaW5kZXhCdWZmZXIpLGIubGluZVZlcnRleEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi5saW5lVmVydGV4QnVmZmVyKX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuY3JlYXRlQnVmZmVycz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuR0w7dGhpcy5faW5pdEJ1ZmZlckRlZmF1bHRzKGEpO3ZhciBkPXRoaXMuZ0hhc2hbYV07cmV0dXJuIGQubnVtYmVyT2ZJdGVtcz0zKmIuZmFjZXMubGVuZ3RoLGQubGluZVZlcnRleENvdW50PWIubGluZVZlcnRpY2VzLmxlbmd0aCx0aGlzLl91c2VDb2xvclNoYWRlcigpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uJiYoZC5saW5lVmVydGV4QnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLmxpbmVWZXJ0ZXhCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbihiLmxpbmVWZXJ0aWNlcyksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGMuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uJiYoZC5saW5lTm9ybWFsQnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLmxpbmVOb3JtYWxCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbihiLmxpbmVOb3JtYWxzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYURpcmVjdGlvbi5sb2NhdGlvbiw0LGMuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uJiYoZC52ZXJ0ZXhCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQudmVydGV4QnVmZmVyLGMuQVJSQVlfQlVGRkVSLHRoaXMuX3ZUb05BcnJheShiLnZlcnRpY2VzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxjLkZMT0FULCExLDAsMCkpLGQuaW5kZXhCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQuaW5kZXhCdWZmZXIsYy5FTEVNRU5UX0FSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIuZmFjZXMpLFVpbnQxNkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFOb3JtYWwmJihkLm5vcm1hbEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC5ub3JtYWxCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KGIudmVydGV4Tm9ybWFscyksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYU5vcm1hbC5sb2NhdGlvbiwzLGMuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVRleENvb3JkJiYoZC51dkJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC51dkJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIudXZzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMixjLkZMT0FULCExLDAsMCkpLGR9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZHJhd0J1ZmZlcnM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5HTDt0aGlzLl91c2VDb2xvclNoYWRlcigpO3ZhciBjPXRoaXMuZ0hhc2hbYV07cmV0dXJuIHRoaXMuX2RvU3Ryb2tlJiZjLmxpbmVWZXJ0ZXhDb3VudD4wJiYodGhpcy5jdXJTdHJva2VTaGFkZXIuYmluZFNoYWRlcigpLGMubGluZVZlcnRleEJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy5saW5lVmVydGV4QnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxiLkZMT0FULCExLDAsMCkpLGMubGluZU5vcm1hbEJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy5saW5lTm9ybWFsQnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uLmxvY2F0aW9uLDQsYi5GTE9BVCwhMSwwLDApKSx0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJTdHJva2VDb2xvciksdGhpcy5fZHJhd0FycmF5cyhiLlRSSUFOR0xFUyxhKSx0aGlzLmN1clN0cm9rZVNoYWRlci51bmJpbmRTaGFkZXIoKSksITEhPT10aGlzLl9kb0ZpbGwmJih0aGlzLmN1ckZpbGxTaGFkZXIuYmluZFNoYWRlcigpLGMudmVydGV4QnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLnZlcnRleEJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxiLkZMT0FULCExLDAsMCkpLGMuaW5kZXhCdWZmZXImJnRoaXMuX2JpbmRCdWZmZXIoYy5pbmRleEJ1ZmZlcixiLkVMRU1FTlRfQVJSQVlfQlVGRkVSKSxjLm5vcm1hbEJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy5ub3JtYWxCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYU5vcm1hbC5sb2NhdGlvbiwzLGIuRkxPQVQsITEsMCwwKSksYy51dkJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy51dkJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMixiLkZMT0FULCExLDAsMCkpLHRoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1ckZpbGxDb2xvciksdGhpcy5fZHJhd0VsZW1lbnRzKGIuVFJJQU5HTEVTLGEpLHRoaXMuY3VyRmlsbFNoYWRlci51bmJpbmRTaGFkZXIoKSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5kcmF3QnVmZmVyc1NjYWxlZD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3RoaXMudU1WTWF0cml4LnNjYWxlKGIsYyxkKSx0aGlzLmRyYXdCdWZmZXJzKGEpfWZpbmFsbHl7dGhpcy51TVZNYXRyaXg9ZX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdBcnJheXM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5HTC5kcmF3QXJyYXlzKGEsMCx0aGlzLmdIYXNoW2JdLmxpbmVWZXJ0ZXhDb3VudCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdFbGVtZW50cz1mdW5jdGlvbihhLGIpe3RoaXMuR0wuZHJhd0VsZW1lbnRzKGEsdGhpcy5nSGFzaFtiXS5udW1iZXJPZkl0ZW1zLHRoaXMuR0wuVU5TSUdORURfU0hPUlQsMCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9kcmF3UG9pbnRzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5HTDt0aGlzLl9iaW5kQnVmZmVyKGIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KGEpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1clBvaW50U2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clBvaW50U2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYy5GTE9BVCwhMSwwLDApLGMuZHJhd0FycmF5cyhjLlBvaW50cywwLGEubGVuZ3RoKX0sYi5leHBvcnRzPWQuUmVuZGVyZXJHTH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3NDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIiksZj1hKFwibGlidGVzc1wiKTthKFwiLi9wNS5TaGFkZXJcIiksYShcIi4vcDUuQ2FtZXJhXCIpLGEoXCIuLi9jb3JlL3A1LlJlbmRlcmVyXCIpLGEoXCIuL3A1Lk1hdHJpeFwiKTt2YXIgZz17aW1tZWRpYXRlVmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBhVmVydGV4Q29sb3I7XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgdVJlc29sdXRpb247XFxudW5pZm9ybSBmbG9hdCB1UG9pbnRTaXplO1xcblxcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG4gIHZDb2xvciA9IGFWZXJ0ZXhDb2xvcjtcXG4gIGdsX1BvaW50U2l6ZSA9IHVQb2ludFNpemU7XFxufVxcblwiLHZlcnRleENvbG9yVmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBhVmVydGV4Q29sb3I7XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG4gIHZDb2xvciA9IGFWZXJ0ZXhDb2xvcjtcXG59XFxuXCIsdmVydGV4Q29sb3JGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yO1xcbn1cIixub3JtYWxWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMzIGFOb3JtYWw7XFxuYXR0cmlidXRlIHZlYzIgYVRleENvb3JkO1xcblxcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgdU5vcm1hbE1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG52YXJ5aW5nIGhpZ2hwIHZlYzIgdlZlcnRUZXhDb29yZDtcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdlZlcnRleE5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMzKCB1Tm9ybWFsTWF0cml4ICogYU5vcm1hbCApKTtcXG4gIHZWZXJ0VGV4Q29vcmQgPSBhVGV4Q29vcmQ7XFxufVxcblwiLG5vcm1hbEZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2VmVydGV4Tm9ybWFsLCAxLjApO1xcbn1cIixiYXNpY0ZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IHVNYXRlcmlhbENvbG9yO1xcbn1cIixsaWdodFZlcnQ6XCJhdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzMgYU5vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxuXFxudW5pZm9ybSBtYXQ0IHVWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgdU5vcm1hbE1hdHJpeDtcXG51bmlmb3JtIGludCB1QW1iaWVudExpZ2h0Q291bnQ7XFxudW5pZm9ybSBpbnQgdURpcmVjdGlvbmFsTGlnaHRDb3VudDtcXG51bmlmb3JtIGludCB1UG9pbnRMaWdodENvdW50O1xcblxcbnVuaWZvcm0gdmVjMyB1QW1iaWVudENvbG9yWzhdO1xcbnVuaWZvcm0gdmVjMyB1TGlnaHRpbmdEaXJlY3Rpb25bOF07XFxudW5pZm9ybSB2ZWMzIHVEaXJlY3Rpb25hbENvbG9yWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodExvY2F0aW9uWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodENvbG9yWzhdO1xcbnVuaWZvcm0gYm9vbCB1U3BlY3VsYXI7XFxuXFxudmFyeWluZyB2ZWMzIHZWZXJ0ZXhOb3JtYWw7XFxudmFyeWluZyB2ZWMyIHZWZXJ0VGV4Q29vcmQ7XFxudmFyeWluZyB2ZWMzIHZMaWdodFdlaWdodGluZztcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuXFxuICB2ZWMzIHZlcnRleE5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMzKCB1Tm9ybWFsTWF0cml4ICogYU5vcm1hbCApKTtcXG4gIHZWZXJ0ZXhOb3JtYWwgPSB2ZXJ0ZXhOb3JtYWw7XFxuICB2VmVydFRleENvb3JkID0gYVRleENvb3JkO1xcblxcbiAgdmVjNCBtdlBvc2l0aW9uID0gdU1vZGVsVmlld01hdHJpeCAqIHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgdmVjMyBleWVEaXJlY3Rpb24gPSBub3JtYWxpemUoLW12UG9zaXRpb24ueHl6KTtcXG5cXG4gIGZsb2F0IHNoaW5pbmVzcyA9IDMyLjA7XFxuICBmbG9hdCBzcGVjdWxhckZhY3RvciA9IDIuMDtcXG4gIGZsb2F0IGRpZmZ1c2VGYWN0b3IgPSAwLjM7XFxuXFxuICB2ZWMzIGFtYmllbnRMaWdodEZhY3RvciA9IHZlYzMoMC4wKTtcXG5cXG4gIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7XFxuICAgIGlmICh1QW1iaWVudExpZ2h0Q291bnQgPT0gaSkgYnJlYWs7XFxuICAgIGFtYmllbnRMaWdodEZhY3RvciArPSB1QW1iaWVudENvbG9yW2ldO1xcbiAgfVxcblxcblxcbiAgdmVjMyBkaXJlY3Rpb25hbExpZ2h0RmFjdG9yID0gdmVjMygwLjApO1xcblxcbiAgZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHtcXG4gICAgaWYgKHVEaXJlY3Rpb25hbExpZ2h0Q291bnQgPT0gaikgYnJlYWs7XFxuICAgIHZlYzMgZGlyID0gdUxpZ2h0aW5nRGlyZWN0aW9uW2pdO1xcbiAgICBmbG9hdCBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nID0gbWF4KGRvdCh2ZXJ0ZXhOb3JtYWwsIC1kaXIpLCAwLjApO1xcbiAgICBkaXJlY3Rpb25hbExpZ2h0RmFjdG9yICs9IHVEaXJlY3Rpb25hbENvbG9yW2pdICogZGlyZWN0aW9uYWxMaWdodFdlaWdodGluZztcXG4gIH1cXG5cXG5cXG4gIHZlYzMgcG9pbnRMaWdodEZhY3RvciA9IHZlYzMoMC4wKTtcXG5cXG4gIGZvciAoaW50IGsgPSAwOyBrIDwgODsgaysrKSB7XFxuICAgIGlmICh1UG9pbnRMaWdodENvdW50ID09IGspIGJyZWFrO1xcbiAgICB2ZWMzIGxvYyA9ICh1Vmlld01hdHJpeCAqIHZlYzQodVBvaW50TGlnaHRMb2NhdGlvbltrXSwgMS4wKSkueHl6O1xcbiAgICB2ZWMzIGxpZ2h0RGlyZWN0aW9uID0gbm9ybWFsaXplKGxvYyAtIG12UG9zaXRpb24ueHl6KTtcXG5cXG4gICAgZmxvYXQgZGlyZWN0aW9uYWxMaWdodFdlaWdodGluZyA9IG1heChkb3QodmVydGV4Tm9ybWFsLCBsaWdodERpcmVjdGlvbiksIDAuMCk7XFxuXFxuICAgIGZsb2F0IHNwZWN1bGFyTGlnaHRXZWlnaHRpbmcgPSAwLjA7XFxuICAgIGlmICh1U3BlY3VsYXIgKXtcXG4gICAgICB2ZWMzIHJlZmxlY3Rpb25EaXJlY3Rpb24gPSByZWZsZWN0KC1saWdodERpcmVjdGlvbiwgdmVydGV4Tm9ybWFsKTtcXG4gICAgICBzcGVjdWxhckxpZ2h0V2VpZ2h0aW5nID0gcG93KG1heChkb3QocmVmbGVjdGlvbkRpcmVjdGlvbiwgZXllRGlyZWN0aW9uKSwgMC4wKSwgc2hpbmluZXNzKTtcXG4gICAgfVxcblxcbiAgICBwb2ludExpZ2h0RmFjdG9yICs9IHVQb2ludExpZ2h0Q29sb3Jba10gKiAoc3BlY3VsYXJGYWN0b3IgKiBzcGVjdWxhckxpZ2h0V2VpZ2h0aW5nXFxuICAgICAgKyBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nICogZGlmZnVzZUZhY3Rvcik7XFxuICB9XFxuXFxuICB2TGlnaHRXZWlnaHRpbmcgPSAgYW1iaWVudExpZ2h0RmFjdG9yICsgZGlyZWN0aW9uYWxMaWdodEZhY3RvciArIHBvaW50TGlnaHRGYWN0b3I7XFxufVxcblwiLGxpZ2h0VGV4dHVyZUZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBib29sIGlzVGV4dHVyZTtcXG51bmlmb3JtIGJvb2wgdVVzZUxpZ2h0aW5nO1xcblxcbnZhcnlpbmcgdmVjMyB2TGlnaHRXZWlnaHRpbmc7XFxudmFyeWluZyBoaWdocCB2ZWMyIHZWZXJ0VGV4Q29vcmQ7XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IGlzVGV4dHVyZSA/IHRleHR1cmUyRCh1U2FtcGxlciwgdlZlcnRUZXhDb29yZCkgOiB1TWF0ZXJpYWxDb2xvcjtcXG4gIGlmICh1VXNlTGlnaHRpbmcpXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgKj0gdkxpZ2h0V2VpZ2h0aW5nO1xcbn1cIixwaG9uZ1ZlcnQ6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzMgYU5vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxuXFxudW5pZm9ybSB2ZWMzIHVBbWJpZW50Q29sb3JbOF07XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyB1Tm9ybWFsTWF0cml4O1xcbnVuaWZvcm0gaW50IHVBbWJpZW50TGlnaHRDb3VudDtcXG5cXG52YXJ5aW5nIHZlYzMgdk5vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2QW1iaWVudENvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG5cXG4gIHZlYzQgdmlld01vZGVsUG9zaXRpb24gPSB1TW9kZWxWaWV3TWF0cml4ICogdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuXFxuICAvLyBQYXNzIHZhcnlpbmdzIHRvIGZyYWdtZW50IHNoYWRlclxcbiAgdlZpZXdQb3NpdGlvbiA9IHZpZXdNb2RlbFBvc2l0aW9uLnh5ejtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB2aWV3TW9kZWxQb3NpdGlvbjsgIFxcblxcbiAgdk5vcm1hbCA9IG5vcm1hbGl6ZSh1Tm9ybWFsTWF0cml4ICogbm9ybWFsaXplKGFOb3JtYWwpKTtcXG4gIHZUZXhDb29yZCA9IGFUZXhDb29yZDtcXG5cXG4gIHZBbWJpZW50Q29sb3IgPSB2ZWMzKDAuMCk7XFxuICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykge1xcbiAgICBpZiAodUFtYmllbnRMaWdodENvdW50ID09IGkpIGJyZWFrO1xcbiAgICB2QW1iaWVudENvbG9yICs9IHVBbWJpZW50Q29sb3JbaV07XFxuICB9XFxufVxcblwiLFxucGhvbmdGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuLy91bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVZpZXdNYXRyaXg7XFxuXFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gYm9vbCBpc1RleHR1cmU7XFxudW5pZm9ybSBib29sIHVVc2VMaWdodGluZztcXG5cXG51bmlmb3JtIHZlYzMgdUxpZ2h0aW5nRGlyZWN0aW9uWzhdO1xcbnVuaWZvcm0gdmVjMyB1RGlyZWN0aW9uYWxDb2xvcls4XTtcXG51bmlmb3JtIHZlYzMgdVBvaW50TGlnaHRMb2NhdGlvbls4XTtcXG51bmlmb3JtIHZlYzMgdVBvaW50TGlnaHRDb2xvcls4XTtcXG51bmlmb3JtIGJvb2wgdVNwZWN1bGFyO1xcblxcbnVuaWZvcm0gaW50IHVEaXJlY3Rpb25hbExpZ2h0Q291bnQ7XFxudW5pZm9ybSBpbnQgdVBvaW50TGlnaHRDb3VudDtcXG5cXG52YXJ5aW5nIHZlYzMgdk5vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2QW1iaWVudENvbG9yO1xcblxcbnZlYzMgVjtcXG52ZWMzIE47XFxuXFxuY29uc3QgZmxvYXQgc2hpbmluZXNzID0gMzIuMDtcXG5jb25zdCBmbG9hdCBzcGVjdWxhckZhY3RvciA9IDIuMDtcXG5jb25zdCBmbG9hdCBkaWZmdXNlRmFjdG9yID0gMC43MztcXG5cXG5zdHJ1Y3QgTGlnaHRSZXN1bHQge1xcblxcdGZsb2F0IHNwZWN1bGFyO1xcblxcdGZsb2F0IGRpZmZ1c2U7XFxufTtcXG5cXG5mbG9hdCBwaG9uZ1NwZWN1bGFyKFxcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcXG4gIGZsb2F0IHNoaW5pbmVzcykge1xcblxcbiAgdmVjMyBSID0gbm9ybWFsaXplKHJlZmxlY3QoLWxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSk7ICBcXG4gIHJldHVybiBwb3cobWF4KDAuMCwgZG90KFIsIHZpZXdEaXJlY3Rpb24pKSwgc2hpbmluZXNzKTtcXG59XFxuXFxuZmxvYXQgbGFtYmVydERpZmZ1c2UoXFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxcbiAgdmVjMyBzdXJmYWNlTm9ybWFsKSB7XFxuICByZXR1cm4gbWF4KDAuMCwgZG90KC1saWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCkpO1xcbn1cXG5cXG5MaWdodFJlc3VsdCBsaWdodCh2ZWMzIGxpZ2h0VmVjdG9yKSB7XFxuXFxuICB2ZWMzIEwgPSBub3JtYWxpemUobGlnaHRWZWN0b3IpO1xcblxcbiAgLy9jb21wdXRlIG91ciBkaWZmdXNlICYgc3BlY3VsYXIgdGVybXNcXG4gIExpZ2h0UmVzdWx0IGxyO1xcbiAgaWYgKHVTcGVjdWxhcilcXG4gICAgbHIuc3BlY3VsYXIgPSBwaG9uZ1NwZWN1bGFyKEwsIFYsIE4sIHNoaW5pbmVzcyk7XFxuICBsci5kaWZmdXNlID0gbGFtYmVydERpZmZ1c2UoTCwgTik7XFxuICByZXR1cm4gbHI7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKSB7XFxuXFxuICBWID0gbm9ybWFsaXplKHZWaWV3UG9zaXRpb24pO1xcbiAgTiA9IHZOb3JtYWw7XFxuXFxuICB2ZWMzIGRpZmZ1c2UgPSB2ZWMzKDAuMCk7XFxuICBmbG9hdCBzcGVjdWxhciA9IDAuMDtcXG5cXG4gIGZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKSB7XFxuICAgIGlmICh1RGlyZWN0aW9uYWxMaWdodENvdW50ID09IGopIGJyZWFrO1xcblxcbiAgICBMaWdodFJlc3VsdCByZXN1bHQgPSBsaWdodCh1TGlnaHRpbmdEaXJlY3Rpb25bal0pO1xcbiAgICBkaWZmdXNlICs9IHJlc3VsdC5kaWZmdXNlICogdURpcmVjdGlvbmFsQ29sb3Jbal07XFxuICAgIHNwZWN1bGFyICs9IHJlc3VsdC5zcGVjdWxhcjtcXG4gIH1cXG5cXG4gIGZvciAoaW50IGsgPSAwOyBrIDwgODsgaysrKSB7XFxuICAgIGlmICh1UG9pbnRMaWdodENvdW50ID09IGspIGJyZWFrO1xcblxcbiAgICB2ZWMzIGxpZ2h0UG9zaXRpb24gPSAodVZpZXdNYXRyaXggKiB2ZWM0KHVQb2ludExpZ2h0TG9jYXRpb25ba10sIDEuMCkpLnh5ejtcXG4gICAgdmVjMyBsaWdodFZlY3RvciA9IHZWaWV3UG9zaXRpb24gLSBsaWdodFBvc2l0aW9uO1xcblxcdFxcbiAgICAvL2NhbGN1bGF0ZSBhdHRlbnVhdGlvblxcbiAgICBmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKGxpZ2h0VmVjdG9yKTtcXG4gICAgZmxvYXQgZmFsbG9mZiA9IDUwMC4wIC8gKGxpZ2h0RGlzdGFuY2UgKyA1MDAuMCk7XFxuXFxuICAgIExpZ2h0UmVzdWx0IHJlc3VsdCA9IGxpZ2h0KGxpZ2h0VmVjdG9yKTtcXG4gICAgZGlmZnVzZSArPSByZXN1bHQuZGlmZnVzZSAqIGZhbGxvZmYgKiB1UG9pbnRMaWdodENvbG9yW2tdO1xcbiAgICBzcGVjdWxhciArPSByZXN1bHQuc3BlY3VsYXIgKiBmYWxsb2ZmO1xcbiAgfVxcblxcbiAgZ2xfRnJhZ0NvbG9yID0gaXNUZXh0dXJlID8gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4Q29vcmQpIDogdU1hdGVyaWFsQ29sb3I7XFxuICBnbF9GcmFnQ29sb3IucmdiID0gZ2xfRnJhZ0NvbG9yLnJnYiAqIChkaWZmdXNlICogZGlmZnVzZUZhY3RvciArIHZBbWJpZW50Q29sb3IpICsgc3BlY3VsYXIgKiBzcGVjdWxhckZhY3RvcjtcXG59XCIsZm9udFZlcnQ6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleENvb3JkO1xcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG5cXG51bmlmb3JtIHZlYzQgdUdseXBoUmVjdDtcXG51bmlmb3JtIGZsb2F0IHVHbHlwaE9mZnNldDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcbnZhcnlpbmcgZmxvYXQgdztcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcblxcbiAgLy8gc2NhbGUgYnkgdGhlIHNpemUgb2YgdGhlIGdseXBoJ3MgcmVjdGFuZ2xlXFxuICBwb3NpdGlvblZlYzQueHkgKj0gdUdseXBoUmVjdC56dyAtIHVHbHlwaFJlY3QueHk7XFxuXFxuICAvLyBtb3ZlIHRvIHRoZSBjb3JuZXIgb2YgdGhlIGdseXBoXFxuICBwb3NpdGlvblZlYzQueHkgKz0gdUdseXBoUmVjdC54eTtcXG5cXG4gIC8vIG1vdmUgdG8gdGhlIGxldHRlcidzIGxpbmUgb2Zmc2V0XFxuICBwb3NpdGlvblZlYzQueCArPSB1R2x5cGhPZmZzZXQ7XFxuICBcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdlRleENvb3JkID0gYVRleENvb3JkO1xcbiAgdyA9IGdsX1Bvc2l0aW9uLnc7XFxufVxcblwiLGZvbnRGcmFnOlwiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG4jaWYgMFxcbiAgLy8gc2ltdWxhdGUgaW50ZWdlciBtYXRoIHVzaW5nIGZsb2F0c1xcblxcdCNkZWZpbmUgaW50IGZsb2F0XFxuXFx0I2RlZmluZSBpdmVjMiB2ZWMyXFxuXFx0I2RlZmluZSBJTlQoeCkgZmxvYXQoeClcXG5cXG5cXHRpbnQgaWZsb29yKGZsb2F0IHYpIHsgcmV0dXJuIGZsb29yKHYpOyB9XFxuXFx0aXZlYzIgaWZsb29yKHZlYzIgdikgeyByZXR1cm4gZmxvb3Iodik7IH1cXG5cXG4jZWxzZVxcbiAgLy8gdXNlIG5hdGl2ZSBpbnRlZ2VyIG1hdGhcXG5cXHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XFxuXFx0I2RlZmluZSBJTlQoeCkgeFxcblxcblxcdGludCBpZmxvb3IoZmxvYXQgdikgeyByZXR1cm4gaW50KHYpOyB9XFxuXFx0aW50IGlmbG9vcihpbnQgdikgeyByZXR1cm4gdjsgfVxcblxcdGl2ZWMyIGlmbG9vcih2ZWMyIHYpIHsgcmV0dXJuIGl2ZWMyKHYpOyB9XFxuXFxuI2VuZGlmXFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJTdHJva2VzO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyUm93U3Ryb2tlcztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlclJvd3M7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJDb2xTdHJva2VzO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyQ29scztcXG5cXG51bmlmb3JtIGl2ZWMyIHVTdHJva2VJbWFnZVNpemU7XFxudW5pZm9ybSBpdmVjMiB1Q2VsbHNJbWFnZVNpemU7XFxudW5pZm9ybSBpdmVjMiB1R3JpZEltYWdlU2l6ZTtcXG5cXG51bmlmb3JtIGl2ZWMyIHVHcmlkT2Zmc2V0O1xcbnVuaWZvcm0gaXZlYzIgdUdyaWRTaXplO1xcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcblxcbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9uc1xcbmludCByb3VuZChmbG9hdCB2KSB7IHJldHVybiBpZmxvb3IodiArIDAuNSk7IH1cXG5pdmVjMiByb3VuZCh2ZWMyIHYpIHsgcmV0dXJuIGlmbG9vcih2ICsgMC41KTsgfVxcbmZsb2F0IHNhdHVyYXRlKGZsb2F0IHYpIHsgcmV0dXJuIGNsYW1wKHYsIDAuMCwgMS4wKTsgfVxcbnZlYzIgc2F0dXJhdGUodmVjMiB2KSB7IHJldHVybiBjbGFtcCh2LCAwLjAsIDEuMCk7IH1cXG5cXG5pbnQgbXVsKGZsb2F0IHYxLCBpbnQgdjIpIHtcXG4gIHJldHVybiBpZmxvb3IodjEgKiBmbG9hdCh2MikpO1xcbn1cXG5cXG5pdmVjMiBtdWwodmVjMiB2MSwgaXZlYzIgdjIpIHtcXG4gIHJldHVybiBpZmxvb3IodjEgKiB2ZWMyKHYyKSArIDAuNSk7XFxufVxcblxcbi8vIHVucGFjayBhIDE2LWJpdCBpbnRlZ2VyIGZyb20gYSBmbG9hdCB2ZWMyXFxuaW50IGdldEludDE2KHZlYzIgdikge1xcbiAgaXZlYzIgaXYgPSByb3VuZCh2ICogMjU1LjApO1xcbiAgcmV0dXJuIGl2LnggKiBJTlQoMTI4KSArIGl2Lnk7XFxufVxcblxcbnZlYzIgcGl4ZWxTY2FsZTtcXG52ZWMyIGNvdmVyYWdlID0gdmVjMigwLjApO1xcbnZlYzIgd2VpZ2h0ID0gdmVjMigwLjUpO1xcbmNvbnN0IGZsb2F0IG1pbkRpc3RhbmNlID0gMS4wLzgxOTIuMDtcXG5jb25zdCBmbG9hdCBoYXJkbmVzcyA9IDEuMDU7IC8vIGFtb3VudCBvZiBhbnRpYWxpYXNcXG5cXG4vLyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY3VydmVzIGluIGEgZ2x5cGhcXG5jb25zdCBpbnQgTiA9IElOVCgyNTApO1xcblxcbi8vIHJldHJpZXZlcyBhbiBpbmRleGVkIHBpeGVsIGZyb20gYSBzYW1wbGVyXFxudmVjNCBnZXRUZXhlbChzYW1wbGVyMkQgc2FtcGxlciwgaW50IHBvcywgaXZlYzIgc2l6ZSkge1xcbiAgaW50IHdpZHRoID0gc2l6ZS54O1xcbiAgaW50IHkgPSBpZmxvb3IocG9zIC8gd2lkdGgpO1xcbiAgaW50IHggPSBwb3MgLSB5ICogd2lkdGg7ICAvLyBwb3MgJSB3aWR0aFxcblxcbiAgcmV0dXJuIHRleHR1cmUyRChzYW1wbGVyLCAodmVjMih4LCB5KSArIDAuNSkgLyB2ZWMyKHNpemUpKTtcXG59XFxuXFxudm9pZCBjYWx1bGF0ZUNyb3NzaW5ncyh2ZWMyIHAwLCB2ZWMyIHAxLCB2ZWMyIHAyLCBvdXQgdmVjMiBDMSwgb3V0IHZlYzIgQzIpIHtcXG5cXG4gIC8vIGdldCB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBxdWFkcmF0aWMgaW4gdFxcbiAgdmVjMiBhID0gcDAgLSBwMSAqIDIuMCArIHAyO1xcbiAgdmVjMiBiID0gcDAgLSBwMTtcXG4gIHZlYzIgYyA9IHAwIC0gdlRleENvb3JkO1xcblxcbiAgLy8gZm91bmQgb3V0IHdoaWNoIHZhbHVlcyBvZiAndCcgaXQgY3Jvc3NlcyB0aGUgYXhlc1xcbiAgdmVjMiBzdXJkID0gc3FydChtYXgodmVjMigwLjApLCBiICogYiAtIGEgKiBjKSk7XFxuICB2ZWMyIHQxID0gKChiIC0gc3VyZCkgLyBhKS55eDtcXG4gIHZlYzIgdDIgPSAoKGIgKyBzdXJkKSAvIGEpLnl4O1xcblxcbiAgLy8gYXBwcm94aW1hdGUgc3RyYWlnaHQgbGluZXMgdG8gYXZvaWQgcm91bmRpbmcgZXJyb3JzXFxuICBpZiAoYWJzKGEueSkgPCAwLjAwMSlcXG4gICAgdDEueCA9IHQyLnggPSBjLnkgLyAoMi4wICogYi55KTtcXG5cXG4gIGlmIChhYnMoYS54KSA8IDAuMDAxKVxcbiAgICB0MS55ID0gdDIueSA9IGMueCAvICgyLjAgKiBiLngpO1xcblxcbiAgLy8gcGx1ZyBpbnRvIHF1YWRyYXRpYyBmb3JtdWxhIHRvIGZpbmQgdGhlIGNvcnJkaW5hdGVzIG9mIHRoZSBjcm9zc2luZ3NcXG4gIEMxID0gKChhICogdDEgLSBiICogMi4wKSAqIHQxICsgYykgKiBwaXhlbFNjYWxlO1xcbiAgQzIgPSAoKGEgKiB0MiAtIGIgKiAyLjApICogdDIgKyBjKSAqIHBpeGVsU2NhbGU7XFxufVxcblxcbnZvaWQgY292ZXJhZ2VYKHZlYzIgcDAsIHZlYzIgcDEsIHZlYzIgcDIpIHtcXG5cXG4gIHZlYzIgQzEsIEMyO1xcbiAgY2FsdWxhdGVDcm9zc2luZ3MocDAsIHAxLCBwMiwgQzEsIEMyKTtcXG5cXG4gIC8vIGRldGVybWluZSBvbiB3aGljaCBzaWRlIG9mIHRoZSB4LWF4aXMgdGhlIHBvaW50cyBsaWVcXG4gIGJvb2wgeTAgPSBwMC55ID4gdlRleENvb3JkLnk7XFxuICBib29sIHkxID0gcDEueSA+IHZUZXhDb29yZC55O1xcbiAgYm9vbCB5MiA9IHAyLnkgPiB2VGV4Q29vcmQueTtcXG5cXG4gIC8vIGNvdWxkIHdlYiBiZSB1bmRlciB0aGUgY3VydmUgKGFmdGVyIHQxKT9cXG4gIGlmICh5MSA/ICF5MiA6IHkwKSB7XFxuICAgIC8vIGFkZCB0aGUgY292ZXJhZ2UgZm9yIHQxXFxuICAgIGNvdmVyYWdlLnggKz0gc2F0dXJhdGUoQzEueCArIDAuNSk7XFxuICAgIC8vIGNhbGN1bGF0ZSB0aGUgYW50aS1hbGlhc2luZyBmb3IgdDFcXG4gICAgd2VpZ2h0LnggPSBtaW4od2VpZ2h0LngsIGFicyhDMS54KSk7XFxuICB9XFxuXFxuICAvLyBhcmUgd2Ugb3V0c2lkZSB0aGUgY3VydmUgKGFmdGVyIHQyKT9cXG4gIGlmICh5MSA/ICF5MCA6IHkyKSB7XFxuICAgIC8vIHN1YnRyYWN0IHRoZSBjb3ZlcmFnZSBmb3IgdDJcXG4gICAgY292ZXJhZ2UueCAtPSBzYXR1cmF0ZShDMi54ICsgMC41KTtcXG4gICAgLy8gY2FsY3VsYXRlIHRoZSBhbnRpLWFsaWFzaW5nIGZvciB0MlxcbiAgICB3ZWlnaHQueCA9IG1pbih3ZWlnaHQueCwgYWJzKEMyLngpKTtcXG4gIH1cXG59XFxuXFxuLy8gdGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBjb3ZlcmFnZVgsIGJ1dCB3aXRoIHRoZSBheGVzIHN3YXBwZWRcXG52b2lkIGNvdmVyYWdlWSh2ZWMyIHAwLCB2ZWMyIHAxLCB2ZWMyIHAyKSB7XFxuXFxuICB2ZWMyIEMxLCBDMjtcXG4gIGNhbHVsYXRlQ3Jvc3NpbmdzKHAwLCBwMSwgcDIsIEMxLCBDMik7XFxuXFxuICBib29sIHgwID0gcDAueCA+IHZUZXhDb29yZC54O1xcbiAgYm9vbCB4MSA9IHAxLnggPiB2VGV4Q29vcmQueDtcXG4gIGJvb2wgeDIgPSBwMi54ID4gdlRleENvb3JkLng7XFxuXFxuICBpZiAoeDEgPyAheDIgOiB4MCkge1xcbiAgICBjb3ZlcmFnZS55IC09IHNhdHVyYXRlKEMxLnkgKyAwLjUpO1xcbiAgICB3ZWlnaHQueSA9IG1pbih3ZWlnaHQueSwgYWJzKEMxLnkpKTtcXG4gIH1cXG5cXG4gIGlmICh4MSA/ICF4MCA6IHgyKSB7XFxuICAgIGNvdmVyYWdlLnkgKz0gc2F0dXJhdGUoQzIueSArIDAuNSk7XFxuICAgIHdlaWdodC55ID0gbWluKHdlaWdodC55LCBhYnMoQzIueSkpO1xcbiAgfVxcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuXFxuICAvLyBjYWxjdWxhdGUgdGhlIHBpeGVsIHNjYWxlIGJhc2VkIG9uIHNjcmVlbi1jb29yZGluYXRlc1xcbiAgcGl4ZWxTY2FsZSA9IGhhcmRuZXNzIC8gZndpZHRoKHZUZXhDb29yZCk7XFxuXFxuICAvLyB3aGljaCBncmlkIGNlbGwgaXMgdGhpcyBwaXhlbCBpbj9cXG4gIGl2ZWMyIGdyaWRDb29yZCA9IGlmbG9vcih2VGV4Q29vcmQgKiB2ZWMyKHVHcmlkU2l6ZSkpO1xcblxcbiAgLy8gaW50ZXJzZWN0IGN1cnZlcyBpbiB0aGlzIHJvd1xcbiAge1xcbiAgICAvLyB0aGUgaW5kZXggaW50byB0aGUgcm93IGluZm8gYml0bWFwXFxuICAgIGludCByb3dJbmRleCA9IGdyaWRDb29yZC55ICsgdUdyaWRPZmZzZXQueTtcXG4gICAgLy8gZmV0Y2ggdGhlIGluZm8gdGV4ZWxcXG4gICAgdmVjNCByb3dJbmZvID0gZ2V0VGV4ZWwodVNhbXBsZXJSb3dzLCByb3dJbmRleCwgdUdyaWRJbWFnZVNpemUpO1xcbiAgICAvLyB1bnBhY2sgdGhlIHJvd0luZm9cXG4gICAgaW50IHJvd1N0cm9rZUluZGV4ID0gZ2V0SW50MTYocm93SW5mby54eSk7XFxuICAgIGludCByb3dTdHJva2VDb3VudCA9IGdldEludDE2KHJvd0luZm8uencpO1xcblxcbiAgICBmb3IgKGludCBpUm93U3Ryb2tlID0gSU5UKDApOyBpUm93U3Ryb2tlIDwgTjsgaVJvd1N0cm9rZSsrKSB7XFxuICAgICAgaWYgKGlSb3dTdHJva2UgPj0gcm93U3Ryb2tlQ291bnQpXFxuICAgICAgICBicmVhaztcXG5cXG4gICAgICAvLyBlYWNoIHN0cm9rZSBpcyBtYWRlIHVwIG9mIDMgcG9pbnRzOiB0aGUgc3RhcnQgYW5kIGNvbnRyb2wgcG9pbnRcXG4gICAgICAvLyBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGN1cnZlLlxcbiAgICAgIC8vIGZldGNoIHRoZSBpbmRpY2VzIG9mIHRoaXMgcGFpciBvZiBzdHJva2VzOlxcbiAgICAgIHZlYzQgc3Ryb2tlSW5kaWNlcyA9IGdldFRleGVsKHVTYW1wbGVyUm93U3Ryb2tlcywgcm93U3Ryb2tlSW5kZXgrKywgdUNlbGxzSW1hZ2VTaXplKTtcXG5cXG4gICAgICAvLyB1bnBhY2sgdGhlIHN0cm9rZSBpbmRleFxcbiAgICAgIGludCBzdHJva2VQb3MgPSBnZXRJbnQxNihzdHJva2VJbmRpY2VzLnh5KTtcXG5cXG4gICAgICAvLyBmZXRjaCB0aGUgdHdvIHN0cm9rZXNcXG4gICAgICB2ZWM0IHN0cm9rZTAgPSBnZXRUZXhlbCh1U2FtcGxlclN0cm9rZXMsIHN0cm9rZVBvcyArIElOVCgwKSwgdVN0cm9rZUltYWdlU2l6ZSk7XFxuICAgICAgdmVjNCBzdHJva2UxID0gZ2V0VGV4ZWwodVNhbXBsZXJTdHJva2VzLCBzdHJva2VQb3MgKyBJTlQoMSksIHVTdHJva2VJbWFnZVNpemUpO1xcblxcbiAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgY292ZXJhZ2VcXG4gICAgICBjb3ZlcmFnZVgoc3Ryb2tlMC54eSwgc3Ryb2tlMC56dywgc3Ryb2tlMS54eSk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC8vIGludGVyc2VjdCBjdXJ2ZXMgaW4gdGhpcyBjb2x1bW5cXG4gIHtcXG4gICAgaW50IGNvbEluZGV4ID0gZ3JpZENvb3JkLnggKyB1R3JpZE9mZnNldC54O1xcbiAgICB2ZWM0IGNvbEluZm8gPSBnZXRUZXhlbCh1U2FtcGxlckNvbHMsIGNvbEluZGV4LCB1R3JpZEltYWdlU2l6ZSk7XFxuICAgIGludCBjb2xTdHJva2VJbmRleCA9IGdldEludDE2KGNvbEluZm8ueHkpO1xcbiAgICBpbnQgY29sU3Ryb2tlQ291bnQgPSBnZXRJbnQxNihjb2xJbmZvLnp3KTtcXG4gICAgXFxuICAgIGZvciAoaW50IGlDb2xTdHJva2UgPSBJTlQoMCk7IGlDb2xTdHJva2UgPCBOOyBpQ29sU3Ryb2tlKyspIHtcXG4gICAgICBpZiAoaUNvbFN0cm9rZSA+PSBjb2xTdHJva2VDb3VudClcXG4gICAgICAgIGJyZWFrO1xcblxcbiAgICAgIHZlYzQgc3Ryb2tlSW5kaWNlcyA9IGdldFRleGVsKHVTYW1wbGVyQ29sU3Ryb2tlcywgY29sU3Ryb2tlSW5kZXgrKywgdUNlbGxzSW1hZ2VTaXplKTtcXG5cXG4gICAgICBpbnQgc3Ryb2tlUG9zID0gZ2V0SW50MTYoc3Ryb2tlSW5kaWNlcy54eSk7XFxuICAgICAgdmVjNCBzdHJva2UwID0gZ2V0VGV4ZWwodVNhbXBsZXJTdHJva2VzLCBzdHJva2VQb3MgKyBJTlQoMCksIHVTdHJva2VJbWFnZVNpemUpO1xcbiAgICAgIHZlYzQgc3Ryb2tlMSA9IGdldFRleGVsKHVTYW1wbGVyU3Ryb2tlcywgc3Ryb2tlUG9zICsgSU5UKDEpLCB1U3Ryb2tlSW1hZ2VTaXplKTtcXG4gICAgICBjb3ZlcmFnZVkoc3Ryb2tlMC54eSwgc3Ryb2tlMC56dywgc3Ryb2tlMS54eSk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIHdlaWdodCA9IHNhdHVyYXRlKDEuMCAtIHdlaWdodCAqIDIuMCk7XFxuICBmbG9hdCBkaXN0YW5jZSA9IG1heCh3ZWlnaHQueCArIHdlaWdodC55LCBtaW5EaXN0YW5jZSk7IC8vIG1hbmhhdHRhbiBhcHByb3guXFxuICBmbG9hdCBhbnRpYWxpYXMgPSBhYnMoZG90KGNvdmVyYWdlLCB3ZWlnaHQpIC8gZGlzdGFuY2UpO1xcbiAgZmxvYXQgY292ZXIgPSBtaW4oYWJzKGNvdmVyYWdlLngpLCBhYnMoY292ZXJhZ2UueSkpO1xcbiAgZ2xfRnJhZ0NvbG9yID0gdU1hdGVyaWFsQ29sb3I7XFxuICBnbF9GcmFnQ29sb3IuYSAqPSBzYXR1cmF0ZShtYXgoYW50aWFsaWFzLCBjb3ZlcikpO1xcbn1cIixsaW5lVmVydDpcIi8qXFxuICBQYXJ0IG9mIHRoZSBQcm9jZXNzaW5nIHByb2plY3QgLSBodHRwOi8vcHJvY2Vzc2luZy5vcmdcXG4gIENvcHlyaWdodCAoYykgMjAxMi0xNSBUaGUgUHJvY2Vzc2luZyBGb3VuZGF0aW9uXFxuICBDb3B5cmlnaHQgKGMpIDIwMDQtMTIgQmVuIEZyeSBhbmQgQ2FzZXkgUmVhc1xcbiAgQ29weXJpZ2h0IChjKSAyMDAxLTA0IE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3lcXG4gIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcXG4gIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcXG4gIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4xLlxcbiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXFxuICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxcbiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcXG4gIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXFxuICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWxcXG4gIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZVxcbiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCxcXG4gIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQVxcbiovXFxuXFxuI2RlZmluZSBQUk9DRVNTSU5HX0xJTkVfU0hBREVSXFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgdVN0cm9rZVdlaWdodDtcXG5cXG51bmlmb3JtIHZlYzQgdVZpZXdwb3J0O1xcblxcbi8vIHVzaW5nIGEgc2NhbGUgPDEgbW92ZXMgdGhlIGxpbmVzIHRvd2FyZHMgdGhlIGNhbWVyYVxcbi8vIGluIG9yZGVyIHRvIHByZXZlbnQgcG9wcGluZyBlZmZlY3RzIGR1ZSB0byBoYWxmIG9mXFxuLy8gdGhlIGxpbmUgZGlzYXBwZWFyaW5nIGJlaGluZCB0aGUgZ2VvbWV0cnkgZmFjZXMuXFxudmVjMyBzY2FsZSA9IHZlYzMoMC45OTk1KTtcXG5cXG5hdHRyaWJ1dGUgdmVjNCBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgYURpcmVjdGlvbjtcXG4gIFxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzQgcG9zcCA9IHVNb2RlbFZpZXdNYXRyaXggKiBhUG9zaXRpb247XFxuICB2ZWM0IHBvc3EgPSB1TW9kZWxWaWV3TWF0cml4ICogKGFQb3NpdGlvbiArIHZlYzQoYURpcmVjdGlvbi54eXosIDApKTtcXG5cXG4gIC8vIE1vdmluZyB2ZXJ0aWNlcyBzbGlnaHRseSB0b3dhcmQgdGhlIGNhbWVyYVxcbiAgLy8gdG8gYXZvaWQgZGVwdGgtZmlnaHRpbmcgd2l0aCB0aGUgZmlsbCB0cmlhbmdsZXMuXFxuICAvLyBEaXNjdXNzZWQgaGVyZTpcXG4gIC8vIGh0dHA6Ly93d3cub3BlbmdsLm9yZy9kaXNjdXNzaW9uX2JvYXJkcy91YmJ0aHJlYWRzLnBocD91YmI9c2hvd2ZsYXQmTnVtYmVyPTI1Mjg0OCAgXFxuICBwb3NwLnh5eiA9IHBvc3AueHl6ICogc2NhbGU7XFxuICBwb3NxLnh5eiA9IHBvc3EueHl6ICogc2NhbGU7XFxuXFxuICB2ZWM0IHAgPSB1UHJvamVjdGlvbk1hdHJpeCAqIHBvc3A7XFxuICB2ZWM0IHEgPSB1UHJvamVjdGlvbk1hdHJpeCAqIHBvc3E7XFxuXFxuICAvLyBmb3JtdWxhIHRvIGNvbnZlcnQgZnJvbSBjbGlwIHNwYWNlIChyYW5nZSAtMS4uMSkgdG8gc2NyZWVuIHNwYWNlIChyYW5nZSAwLi5bd2lkdGggb3IgaGVpZ2h0XSlcXG4gIC8vIHNjcmVlbl9wID0gKHAueHkvcC53ICsgPDEsMT4pICogMC41ICogdVZpZXdwb3J0Lnp3XFxuXFxuICAvLyBwcmV2ZW50IGRpdmlzaW9uIGJ5IFcgYnkgdHJhbnNmb3JtaW5nIHRoZSB0YW5nZW50IGZvcm11bGEgKGRpdiBieSAwIGNhdXNlc1xcbiAgLy8gdGhlIGxpbmUgdG8gZGlzYXBwZWFyLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb2Nlc3NpbmcvcHJvY2Vzc2luZy9pc3N1ZXMvNTE4MylcXG4gIC8vIHQgPSBzY3JlZW5fcSAtIHNjcmVlbl9wXFxuICAvL1xcbiAgLy8gdGFuZ2VudCBpcyBub3JtYWxpemVkIGFuZCB3ZSBkb24ndCBjYXJlIHdoaWNoIGFEaXJlY3Rpb24gaXQgcG9pbnRzIHRvICgrLSlcXG4gIC8vIHQgPSArLSBub3JtYWxpemUoIHNjcmVlbl9xIC0gc2NyZWVuX3AgKVxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKHEueHkvcS53KzwxLDE+KSowLjUqdVZpZXdwb3J0Lnp3IC0gKHAueHkvcC53KzwxLDE+KSowLjUqdVZpZXdwb3J0Lnp3IClcXG4gIC8vXFxuICAvLyBleHRyYWN0IGNvbW1vbiBmYWN0b3IsIDwxLDE+IC0gPDEsMT4gY2FuY2VscyBvdXRcXG4gIC8vIHQgPSArLSBub3JtYWxpemUoIChxLnh5L3EudyAtIHAueHkvcC53KSAqIDAuNSAqIHVWaWV3cG9ydC56dyApXFxuICAvL1xcbiAgLy8gY29udmVydCB0byBjb21tb24gZGl2aXNvclxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKChxLnh5KnAudyAtIHAueHkqcS53KSAvIChwLncqcS53KSkgKiAwLjUgKiB1Vmlld3BvcnQuencgKVxcbiAgLy9cXG4gIC8vIHJlbW92ZSB0aGUgY29tbW9uIHNjYWxhciBkaXZpc29yL2ZhY3Rvciwgbm90IG5lZWRlZCBkdWUgdG8gbm9ybWFsaXplIGFuZCArLVxcbiAgLy8gKGtlZXAgdVZpZXdwb3J0IC0gY2FuJ3QgcmVtb3ZlIGJlY2F1c2UgaXQgaGFzIGRpZmZlcmVudCBjb21wb25lbnRzIGZvciB4IGFuZCB5XFxuICAvLyAgYW5kIGNvcnJlY3RzIGZvciBhc3BlY3QgcmF0aW8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvY2Vzc2luZy9wcm9jZXNzaW5nL2lzc3Vlcy81MTgxKVxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKHEueHkqcC53IC0gcC54eSpxLncpICogdVZpZXdwb3J0Lnp3IClcXG5cXG4gIHZlYzIgdGFuZ2VudCA9IG5vcm1hbGl6ZSgocS54eSpwLncgLSBwLnh5KnEudykgKiB1Vmlld3BvcnQuencpO1xcblxcbiAgLy8gZmxpcCB0YW5nZW50IHRvIG5vcm1hbCAoaXQncyBhbHJlYWR5IG5vcm1hbGl6ZWQpXFxuICB2ZWMyIG5vcm1hbCA9IHZlYzIoLXRhbmdlbnQueSwgdGFuZ2VudC54KTtcXG5cXG4gIGZsb2F0IHRoaWNrbmVzcyA9IGFEaXJlY3Rpb24udyAqIHVTdHJva2VXZWlnaHQ7XFxuICB2ZWMyIG9mZnNldCA9IG5vcm1hbCAqIHRoaWNrbmVzcyAvIDIuMDtcXG5cXG4gIC8vIFBlcnNwZWN0aXZlIC0tLVxcbiAgLy8gY29udmVydCBmcm9tIHdvcmxkIHRvIGNsaXAgYnkgbXVsdGlwbHlpbmcgd2l0aCBwcm9qZWN0aW9uIHNjYWxpbmcgZmFjdG9yXFxuICAvLyB0byBnZXQgdGhlIHJpZ2h0IHRoaWNrbmVzcyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9jZXNzaW5nL3Byb2Nlc3NpbmcvaXNzdWVzLzUxODIpXFxuICAvLyBpbnZlcnQgWSwgcHJvamVjdGlvbnMgaW4gUHJvY2Vzc2luZyBpbnZlcnQgWVxcbiAgdmVjMiBwZXJzcFNjYWxlID0gKHVQcm9qZWN0aW9uTWF0cml4ICogdmVjNCgxLCAtMSwgMCwgMCkpLnh5O1xcblxcbiAgLy8gTm8gUGVyc3BlY3RpdmUgLS0tXFxuICAvLyBtdWx0aXBseSBieSBXICh0byBjYW5jZWwgb3V0IGRpdmlzaW9uIGJ5IFcgbGF0ZXIgaW4gdGhlIHBpcGVsaW5lKSBhbmRcXG4gIC8vIGNvbnZlcnQgZnJvbSBzY3JlZW4gdG8gY2xpcCAoZGVyaXZlZCBmcm9tIGNsaXAgdG8gc2NyZWVuIGFib3ZlKVxcbiAgdmVjMiBub1BlcnNwU2NhbGUgPSBwLncgLyAoMC41ICogdVZpZXdwb3J0Lnp3KTtcXG5cXG4gIC8vZ2xfUG9zaXRpb24ueHkgPSBwLnh5ICsgb2Zmc2V0Lnh5ICogbWl4KG5vUGVyc3BTY2FsZSwgcGVyc3BTY2FsZSwgZmxvYXQocGVyc3BlY3RpdmUgPiAwKSk7XFxuICBnbF9Qb3NpdGlvbi54eSA9IHAueHkgKyBvZmZzZXQueHkgKiBwZXJzcFNjYWxlO1xcbiAgZ2xfUG9zaXRpb24uencgPSBwLnp3O1xcbn1cXG5cIixsaW5lRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnByZWNpc2lvbiBtZWRpdW1wIGludDtcXG5cXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdU1hdGVyaWFsQ29sb3I7XFxufVwiLHBvaW50VmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG51bmlmb3JtIGZsb2F0IHVQb2ludFNpemU7XFxudmFyeWluZyBmbG9hdCB2U3Ryb2tlV2VpZ2h0O1xcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG52b2lkIG1haW4oKSB7XFxuXFx0dmVjNCBwb3NpdGlvblZlYzQgPSAgdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuXFx0Z2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuXFx0Z2xfUG9pbnRTaXplID0gdVBvaW50U2l6ZTtcXG5cXHR2U3Ryb2tlV2VpZ2h0ID0gdVBvaW50U2l6ZTtcXG59XCIscG9pbnRGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxucHJlY2lzaW9uIG1lZGl1bXAgaW50O1xcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZTdHJva2VXZWlnaHQ7XFxuXFxudm9pZCBtYWluKCl7XFxuXFx0ZmxvYXQgbWFzayA9IDAuMDtcXG5cXG5cXHQvLyBtYWtlIGEgY2lyY3VsYXIgbWFzayB1c2luZyB0aGUgZ2xfUG9pbnRDb29yZCAoZ29lcyBmcm9tIDAgLSAxIG9uIGEgcG9pbnQpXFxuICAgIC8vIG1pZ2h0IGJlIGFibGUgdG8gZ2V0IGEgbmljZXIgZWRnZSBvbiBiaWcgc3Ryb2tld2VpZ2h0cyB3aXRoIHNtb290aHN0ZXAgYnV0IHNsaWdodGx5IGxlc3MgcGVyZm9ybWFudFxcblxcblxcdG1hc2sgPSBzdGVwKDAuOTgsIGxlbmd0aChnbF9Qb2ludENvb3JkICogMi4wIC0gMS4wKSk7XFxuXFxuXFx0Ly8gaWYgc3Ryb2tlV2VpZ2h0IGlzIDEgb3IgbGVzcyBsZXRzIGp1c3QgZHJhdyBhIHNxdWFyZVxcblxcdC8vIHRoaXMgcHJldmVudHMgd2VpcmQgYXJ0aWZhY3RpbmcgZnJvbSBjYXJ2aW5nIGNpcmNsZXMgd2hlbiBvdXIgcG9pbnRzIGFyZSByZWFsbHkgc21hbGxcXG5cXHQvLyBpZiBzdHJva2VXZWlnaHQgaXMgbGFyZ2VyIHRoYW4gMSwgd2UganVzdCB1c2UgaXQgYXMgaXNcXG5cXG5cXHRtYXNrID0gbWl4KDAuMCwgbWFzaywgY2xhbXAoZmxvb3IodlN0cm9rZVdlaWdodCAtIDAuNSksMC4wLDEuMCkpO1xcblxcblxcdC8vIHRocm93IGF3YXkgdGhlIGJvcmRlcnMgb2YgdGhlIG1hc2tcXG4gICAgLy8gb3RoZXJ3aXNlIHdlIGdldCB3ZWlyZCBhbHBoYSBibGVuZGluZyBpc3N1ZXNcXG5cXG5cXHRpZihtYXNrID4gMC45OCl7XFxuICAgICAgZGlzY2FyZDtcXG4gIFxcdH1cXG5cXG4gIFxcdGdsX0ZyYWdDb2xvciA9IHZlYzQodU1hdGVyaWFsQ29sb3IucmdiICogKDEuMCAtIG1hc2spLCB1TWF0ZXJpYWxDb2xvci5hKSA7XFxufVwifTtkLlJlbmRlcmVyR0w9ZnVuY3Rpb24oYSxiLGMsZSl7cmV0dXJuIGQuUmVuZGVyZXIuY2FsbCh0aGlzLGEsYixjKSx0aGlzLmF0dHJpYnV0ZXM9e30sZT1lfHx7fSx0aGlzLmF0dHJpYnV0ZXMuYWxwaGE9dm9pZCAwPT09ZS5hbHBoYXx8ZS5hbHBoYSx0aGlzLmF0dHJpYnV0ZXMuZGVwdGg9dm9pZCAwPT09ZS5kZXB0aHx8ZS5kZXB0aCx0aGlzLmF0dHJpYnV0ZXMuc3RlbmNpbD12b2lkIDA9PT1lLnN0ZW5jaWx8fGUuc3RlbmNpbCx0aGlzLmF0dHJpYnV0ZXMuYW50aWFsaWFzPXZvaWQgMCE9PWUuYW50aWFsaWFzJiZlLmFudGlhbGlhcyx0aGlzLmF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhPXZvaWQgMCE9PWUucHJlbXVsdGlwbGllZEFscGhhJiZlLnByZW11bHRpcGxpZWRBbHBoYSx0aGlzLmF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyPXZvaWQgMD09PWUucHJlc2VydmVEcmF3aW5nQnVmZmVyfHxlLnByZXNlcnZlRHJhd2luZ0J1ZmZlcix0aGlzLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZz12b2lkIDAhPT1lLnBlclBpeGVsTGlnaHRpbmcmJmUucGVyUGl4ZWxMaWdodGluZyx0aGlzLl9pbml0Q29udGV4dCgpLHRoaXMuaXNQM0Q9ITAsdGhpcy5HTD10aGlzLmRyYXdpbmdDb250ZXh0LHRoaXMuYW1iaWVudExpZ2h0Q29sb3JzPVtdLHRoaXMuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbnM9W10sdGhpcy5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzPVtdLHRoaXMucG9pbnRMaWdodFBvc2l0aW9ucz1bXSx0aGlzLnBvaW50TGlnaHRDb2xvcnM9W10sdGhpcy51TVZNYXRyaXg9bmV3IGQuTWF0cml4LHRoaXMudVBNYXRyaXg9bmV3IGQuTWF0cml4LHRoaXMudU5NYXRyaXg9bmV3IGQuTWF0cml4KFwibWF0M1wiKSx0aGlzLl9jdXJDYW1lcmE9bmV3IGQuQ2FtZXJhKHRoaXMpLHRoaXMuX2N1ckNhbWVyYS5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncygpLHRoaXMuX2N1ckNhbWVyYS5fc2V0RGVmYXVsdENhbWVyYSgpLHRoaXMuZ0hhc2g9e30sdGhpcy5fZGVmYXVsdExpZ2h0U2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcj12b2lkIDAsdGhpcy5fZGVmYXVsdE5vcm1hbFNoYWRlcj12b2lkIDAsdGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXI9dm9pZCAwLHRoaXMuY3VyRmlsbFNoYWRlcj12b2lkIDAsdGhpcy5jdXJTdHJva2VTaGFkZXI9dm9pZCAwLHRoaXMuY3VyUG9pbnRTaGFkZXI9dm9pZCAwLHRoaXMuX3VzZUNvbG9yU2hhZGVyKCksdGhpcy5zZXRTdHJva2VTaGFkZXIodGhpcy5fZ2V0TGluZVNoYWRlcigpKSx0aGlzLl91c2VQb2ludFNoYWRlcigpLHRoaXMuX3BvaW50VmVydGV4QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pc0ltbWVkaWF0ZURyYXdpbmc9ITEsdGhpcy5pbW1lZGlhdGVNb2RlPXt9LHRoaXMuZmlsbCgyNTUsMjU1LDI1NSwyNTUpLHRoaXMucG9pbnRTaXplPTUsdGhpcy5zdHJva2VXZWlnaHQoMSksdGhpcy5zdHJva2UoMCwwLDApLHRoaXMudGV4dHVyZXM9W10sdGhpcy5fY3VydmVUaWdodG5lc3M9Nix0aGlzLl9sb29rVXBUYWJsZUJlemllcj1bXSx0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpYz1bXSx0aGlzLl9sdXRCZXppZXJEZXRhaWw9MCx0aGlzLl9sdXRRdWFkcmF0aWNEZXRhaWw9MCx0aGlzLl90ZXNzeT10aGlzLl9pbml0VGVzc3koKSx0aGlzLmZvbnRJbmZvcz17fSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5SZW5kZXJlci5wcm90b3R5cGUpLGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2luaXRDb250ZXh0PWZ1bmN0aW9uKCl7dHJ5e2lmKHRoaXMuZHJhd2luZ0NvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIndlYmdsXCIsdGhpcy5hdHRyaWJ1dGVzKXx8dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLHRoaXMuYXR0cmlidXRlcyksbnVsbD09PXRoaXMuZHJhd2luZ0NvbnRleHQpdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgY3JlYXRpbmcgd2ViZ2wgY29udGV4dFwiKTtjb25zb2xlLmxvZyhcInA1LlJlbmRlcmVyR0w6IGVuYWJsZWQgd2ViZ2wgY29udGV4dFwiKTt2YXIgYT10aGlzLmRyYXdpbmdDb250ZXh0O2EuZW5hYmxlKGEuREVQVEhfVEVTVCksYS5kZXB0aEZ1bmMoYS5MRVFVQUwpLGEudmlld3BvcnQoMCwwLGEuZHJhd2luZ0J1ZmZlcldpZHRoLGEuZHJhd2luZ0J1ZmZlckhlaWdodCksdGhpcy5fdmlld3BvcnQ9dGhpcy5kcmF3aW5nQ29udGV4dC5nZXRQYXJhbWV0ZXIodGhpcy5kcmF3aW5nQ29udGV4dC5WSUVXUE9SVCl9Y2F0Y2goYSl7dGhyb3cgYX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3Jlc2V0Q29udGV4dD1mdW5jdGlvbihhLGIsYyl7dmFyIGU9dGhpcy53aWR0aCxmPXRoaXMuaGVpZ2h0LGc9dGhpcy5jYW52YXMuaWQsaD10aGlzLmNhbnZhcztoJiZoLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCksaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGguaWQ9Zyx0aGlzLl9wSW5zdC5fdXNlck5vZGU/dGhpcy5fcEluc3QuX3VzZXJOb2RlLmFwcGVuZENoaWxkKGgpOmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaCksdGhpcy5fcEluc3QuY2FudmFzPWg7dmFyIGk9bmV3IGQuUmVuZGVyZXJHTCh0aGlzLl9wSW5zdC5jYW52YXMsdGhpcy5fcEluc3QsITAsYSk7dGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiX3JlbmRlcmVyXCIsaSksaS5yZXNpemUoZSxmKSxpLl9hcHBseURlZmF1bHRzKCksdGhpcy5fcEluc3QuX2VsZW1lbnRzLnB1c2goaSksXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmc2V0VGltZW91dChmdW5jdGlvbigpe2MuYXBwbHkod2luZG93Ll9yZW5kZXJlcixiKX0sMCl9LGQucHJvdG90eXBlLnNldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oYSxiKXt0aGlzLl9hc3NlcnQzZChcInNldEF0dHJpYnV0ZXNcIik7dmFyIGM7dm9pZCAwIT09Yj8oYz17fSxjW2FdPWIpOmEgaW5zdGFuY2VvZiBPYmplY3QmJihjPWEpLHRoaXMucHVzaCgpLHRoaXMuX3JlbmRlcmVyLl9yZXNldENvbnRleHQoYyksdGhpcy5wb3AoKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy51TVZNYXRyaXguc2V0KHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMV0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzJdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzVdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbN10sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzhdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTBdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMV0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTNdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSksdGhpcy5hbWJpZW50TGlnaHRDb2xvcnMubGVuZ3RoPTAsdGhpcy5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucy5sZW5ndGg9MCx0aGlzLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnMubGVuZ3RoPTAsdGhpcy5wb2ludExpZ2h0UG9zaXRpb25zLmxlbmd0aD0wLHRoaXMucG9pbnRMaWdodENvbG9ycy5sZW5ndGg9MH0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5iYWNrZ3JvdW5kPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcEluc3QuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKSxiPWEubGV2ZWxzWzBdLzI1NSxjPWEubGV2ZWxzWzFdLzI1NSxkPWEubGV2ZWxzWzJdLzI1NSxlPWEubGV2ZWxzWzNdLzI1NTt0aGlzLkdMLmNsZWFyQ29sb3IoYixjLGQsZSksdGhpcy5HTC5kZXB0aE1hc2soITApLHRoaXMuR0wuY2xlYXIodGhpcy5HTC5DT0xPUl9CVUZGRVJfQklUfHRoaXMuR0wuREVQVEhfQlVGRkVSX0JJVCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihhLGIsYyxmKXt2YXIgZz1kLnByb3RvdHlwZS5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpO3RoaXMuY3VyRmlsbENvbG9yPWcuX2FycmF5LHRoaXMuaXNJbW1lZGlhdGVEcmF3aW5nP3RoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRJbW1lZGlhdGVNb2RlU2hhZGVyKCkpOnRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRDb2xvclNoYWRlcigpKSx0aGlzLmRyYXdNb2RlPWUuRklMTCx0aGlzLmN1ckZpbGxTaGFkZXIuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5jdXJGaWxsQ29sb3IpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnN0cm9rZT1mdW5jdGlvbihhLGIsYyxlKXthcmd1bWVudHNbM109MjU1O3ZhciBmPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyk7dGhpcy5jdXJTdHJva2VDb2xvcj1mLl9hcnJheSx0aGlzLmN1clN0cm9rZVNoYWRlci5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLmN1clN0cm9rZUNvbG9yKSx0aGlzLmN1clBvaW50U2hhZGVyLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLGYuX2FycmF5KX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zdHJva2VXZWlnaHQ9ZnVuY3Rpb24oYSl7dGhpcy5jdXJTdHJva2VXZWlnaHQhPT1hJiYodGhpcy5wb2ludFNpemU9YSx0aGlzLmN1clN0cm9rZVdlaWdodD1hLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLnNldFVuaWZvcm0oXCJ1U3Ryb2tlV2VpZ2h0XCIsYSksdGhpcy5jdXJQb2ludFNoYWRlci5zZXRVbmlmb3JtKFwidVBvaW50U2l6ZVwiLGEpKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiLGMsZSl7cmV0dXJuIGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZ2V0LmFwcGx5KHRoaXMsW2EsYixjLGVdKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5sb2FkUGl4ZWxzPWZ1bmN0aW9uKCl7aWYoITAhPT10aGlzLmF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKXJldHVybiB2b2lkIGNvbnNvbGUubG9nKFwibG9hZFBpeGVscyBvbmx5IHdvcmtzIGluIFdlYkdMIHdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyIGlzIHRydWUuXCIpO3ZhciBhPXRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksYj10aGlzLndpZHRoLGM9dGhpcy5oZWlnaHQ7Yio9YSxjKj1hLHZvaWQgMD09PXRoaXMucGl4ZWxzJiYodGhpcy5waXhlbHM9bmV3IFVpbnQ4QXJyYXkodGhpcy5HTC5kcmF3aW5nQnVmZmVyV2lkdGgqdGhpcy5HTC5kcmF3aW5nQnVmZmVySGVpZ2h0KjQpKSx0aGlzLkdMLnJlYWRQaXhlbHMoMCwwLGIsYyx0aGlzLkdMLlJHQkEsdGhpcy5HTC5VTlNJR05FRF9CWVRFLHRoaXMucGl4ZWxzKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJwaXhlbHNcIix0aGlzLnBpeGVscyl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZ2VvbWV0cnlJbkhhc2g9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZ0hhc2hbYV19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGEsYil7ZC5SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcyxhLGIpLHRoaXMuR0wudmlld3BvcnQoMCwwLHRoaXMuR0wuZHJhd2luZ0J1ZmZlcldpZHRoLHRoaXMuR0wuZHJhd2luZ0J1ZmZlckhlaWdodCksdGhpcy5fdmlld3BvcnQ9dGhpcy5HTC5nZXRQYXJhbWV0ZXIodGhpcy5HTC5WSUVXUE9SVCksdGhpcy5fY3VyQ2FtZXJhLl9yZXNpemUoKSx2b2lkIDAhPT10aGlzLnBpeGVscyYmKHRoaXMucGl4ZWxzPW5ldyBVaW50OEFycmF5KHRoaXMuR0wuZHJhd2luZ0J1ZmZlcldpZHRoKnRoaXMuR0wuZHJhd2luZ0J1ZmZlckhlaWdodCo0KSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHNbMF18fDAsYj1hcmd1bWVudHNbMV18fDAsYz1hcmd1bWVudHNbMl18fDAsZD1hcmd1bWVudHNbM118fDA7dGhpcy5HTC5jbGVhckNvbG9yKGEsYixjLGQpLHRoaXMuR0wuY2xlYXIodGhpcy5HTC5DT0xPUl9CVUZGRVJfQklUfHRoaXMuR0wuREVQVEhfQlVGRkVSX0JJVCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yJiYoYz1hLnosYj1hLnksYT1hLngpLHRoaXMudU1WTWF0cml4LnRyYW5zbGF0ZShbYSxiLGNdKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy51TVZNYXRyaXguc2NhbGUoYSxiLGMpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMD09PWI/dGhpcy5yb3RhdGVaKGEpOihhcmd1bWVudHNbMF09dGhpcy5fcEluc3QuX2Zyb21SYWRpYW5zKGEpLGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUuYXBwbHkodGhpcy51TVZNYXRyaXgsYXJndW1lbnRzKSx0aGlzKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvdGF0ZShhLDEsMCwwKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm90YXRlKGEsMCwxLDApLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3RhdGUoYSwwLDAsMSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKCl7dmFyIGE9ZC5SZW5kZXJlci5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzKSxiPWEucHJvcGVydGllcztyZXR1cm4gYi51TVZNYXRyaXg9dGhpcy51TVZNYXRyaXguY29weSgpLGIudVBNYXRyaXg9dGhpcy51UE1hdHJpeC5jb3B5KCksYi5fY3VyQ2FtZXJhPXRoaXMuX2N1ckNhbWVyYSx0aGlzLl9jdXJDYW1lcmE9dGhpcy5fY3VyQ2FtZXJhLmNvcHkoKSxhfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJlc2V0TWF0cml4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudU1WTWF0cml4PWQuTWF0cml4LmlkZW50aXR5KHRoaXMuX3BJbnN0KSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNldEZpbGxTaGFkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciE9PWEmJih0aGlzLmN1ckZpbGxTaGFkZXI9YSx0aGlzLmN1ckZpbGxTaGFkZXIuaW5pdCgpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2V0UG9pbnRTaGFkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY3VyUG9pbnRTaGFkZXIhPT1hJiYodGhpcy5jdXJQb2ludFNoYWRlcj1hLHRoaXMuY3VyUG9pbnRTaGFkZXIuaW5pdCgpKSx0aGlzLmN1clBvaW50U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNldFN0cm9rZVNoYWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jdXJTdHJva2VTaGFkZXIhPT1hJiYodGhpcy5jdXJTdHJva2VTaGFkZXI9YSx0aGlzLmN1clN0cm9rZVNoYWRlci5pbml0KCkpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91c2VMaWdodFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1ckZpbGxTaGFkZXImJnRoaXMuY3VyRmlsbFNoYWRlci5pc0xpZ2h0U2hhZGVyKCl8fHRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRMaWdodFNoYWRlcigpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VzZUNvbG9yU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciYmdGhpcy5jdXJGaWxsU2hhZGVyIT09dGhpcy5fZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXJ8fHRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRDb2xvclNoYWRlcigpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VzZVBvaW50U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyUG9pbnRTaGFkZXJ8fHRoaXMuc2V0UG9pbnRTaGFkZXIodGhpcy5fZ2V0UG9pbnRTaGFkZXIoKSksdGhpcy5jdXJQb2ludFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXNlSW1tZWRpYXRlTW9kZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1ckZpbGxTaGFkZXImJnRoaXMuY3VyRmlsbFNoYWRlciE9PXRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcnx8dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldEltbWVkaWF0ZU1vZGVTaGFkZXIoKSksdGhpcy5jdXJGaWxsU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRMaWdodFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXJ8fCh0aGlzLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZz90aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5waG9uZ1ZlcnQsZy5waG9uZ0ZyYWcpOnRoaXMuX2RlZmF1bHRMaWdodFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLmxpZ2h0VmVydCxnLmxpZ2h0VGV4dHVyZUZyYWcpKSx0aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldEltbWVkaWF0ZU1vZGVTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLmltbWVkaWF0ZVZlcnQsZy52ZXJ0ZXhDb2xvckZyYWcpKSx0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0Tm9ybWFsU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHROb3JtYWxTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0Tm9ybWFsU2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcubm9ybWFsVmVydCxnLm5vcm1hbEZyYWcpKSx0aGlzLl9kZWZhdWx0Tm9ybWFsU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRDb2xvclNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5ub3JtYWxWZXJ0LGcuYmFzaWNGcmFnKSksdGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRQb2ludFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5wb2ludFZlcnQsZy5wb2ludEZyYWcpKSx0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldExpbmVTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdExpbmVTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0TGluZVNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLmxpbmVWZXJ0LGcubGluZUZyYWcpKSx0aGlzLl9kZWZhdWx0TGluZVNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0Rm9udFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNoYWRlcnx8KHRoaXMuR0wuZ2V0RXh0ZW5zaW9uKFwiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzXCIpLHRoaXMuX2RlZmF1bHRGb250U2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcuZm9udFZlcnQsZy5mb250RnJhZykpLHRoaXMuX2RlZmF1bHRGb250U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRFbXB0eVRleHR1cmU9ZnVuY3Rpb24oKXtpZighdGhpcy5fZW1wdHlUZXh0dXJlKXt2YXIgYT1uZXcgZC5JbWFnZSgxLDEpO2Euc2V0KDAsMCwyNTUpLHRoaXMuX2VtcHR5VGV4dHVyZT1uZXcgZC5UZXh0dXJlKHRoaXMsYSl9cmV0dXJuIHRoaXMuX2VtcHR5VGV4dHVyZX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5nZXRUZXh0dXJlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLnRleHR1cmVzLGM9MDtjPGIubGVuZ3RoOysrYyl7dmFyIGU9YltjXTtpZihlLnNyYz09PWEpcmV0dXJuIGV9dmFyIGY9bmV3IGQuVGV4dHVyZSh0aGlzLGEpO3JldHVybiB0aGlzLnRleHR1cmVzLnB1c2goZiksZn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fYmluZEJ1ZmZlcj1mdW5jdGlvbihhLGIsYyxkLGUpe2lmKHRoaXMuR0wuYmluZEJ1ZmZlcihiLGEpLHZvaWQgMCE9PWMpe3ZhciBmPW5ldyBkKGMpO3RoaXMuR0wuYnVmZmVyRGF0YShiLGYsZSl9fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNtb290aD1mdW5jdGlvbigpeyExPT09dGhpcy5hdHRyaWJ1dGVzLmFudGlhbGlhcyYmdGhpcy5fcEluc3Quc2V0QXR0cmlidXRlcyhcImFudGlhbGlhc1wiLCEwKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5ub1Ntb290aD1mdW5jdGlvbigpeyEwPT09dGhpcy5hdHRyaWJ1dGVzLmFudGlhbGlhcyYmdGhpcy5fcEluc3Quc2V0QXR0cmlidXRlcyhcImFudGlhbGlhc1wiLCExKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZmxhdHRlbj1mdW5jdGlvbihhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuW107aWYoYS5sZW5ndGg+MmU0KXt2YXIgYixjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsZD1cIltvYmplY3QgQXJyYXldXCIsZT1bXSxmPWEuc2xpY2UoKTtiPWYucG9wKCk7ZG97Yy5jYWxsKGIpPT09ZD9mLnB1c2guYXBwbHkoZixiKTplLnB1c2goYil9d2hpbGUoZi5sZW5ndGgmJnZvaWQgMCE9PShiPWYucG9wKCkpKTtyZXR1cm4gZS5yZXZlcnNlKCksZX1yZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sYSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3ZUb05BcnJheT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZmxhdHRlbihhLm1hcChmdW5jdGlvbihhKXtyZXR1cm5bYS54LGEueSxhLnpdfSkpfSxkLnByb3RvdHlwZS5fYXNzZXJ0M2Q9ZnVuY3Rpb24oYSl7aWYoIXRoaXMuX3JlbmRlcmVyLmlzUDNEKXRocm93IG5ldyBFcnJvcihhK1wiKCkgaXMgb25seSBzdXBwb3J0ZWQgaW4gV0VCR0wgbW9kZS4gSWYgeW91J2QgbGlrZSB0byB1c2UgM0QgZ3JhcGhpY3MgYW5kIFdlYkdMLCBzZWUgIGh0dHBzOi8vcDVqcy5vcmcvZXhhbXBsZXMvZm9ybS0zZC1wcmltaXRpdmVzLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9pbml0VGVzc3k9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7YltiLmxlbmd0aF09YVswXSxiW2IubGVuZ3RoXT1hWzFdLGJbYi5sZW5ndGhdPWFbMl19ZnVuY3Rpb24gYihhKXthIT09Zi5wcmltaXRpdmVUeXBlLkdMX1RSSUFOR0xFUyYmY29uc29sZS5sb2coXCJleHBlY3RlZCBUUklBTkdMRVMgYnV0IGdvdCB0eXBlOiBcIithKX1mdW5jdGlvbiBjKGEpe2NvbnNvbGUubG9nKFwiZXJyb3IgY2FsbGJhY2tcIiksY29uc29sZS5sb2coXCJlcnJvciBudW1iZXI6IFwiK2EpfWZ1bmN0aW9uIGQoYSxiLGMpe3JldHVyblthWzBdLGFbMV0sYVsyXV19ZnVuY3Rpb24gZShhKXt9dmFyIGc9bmV3IGYuR2x1VGVzc2VsYXRvcjtyZXR1cm4gZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX1ZFUlRFWF9EQVRBLGEpLGcuZ2x1VGVzc0NhbGxiYWNrKGYuZ2x1RW51bS5HTFVfVEVTU19CRUdJTixiKSxnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfRVJST1IsYyksZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX0NPTUJJTkUsZCksZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX0VER0VfRkxBRyxlKSxnfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl90cmlhbmd1bGF0ZT1mdW5jdGlvbihhKXt0aGlzLl90ZXNzeS5nbHVUZXNzTm9ybWFsKDAsMCwxKTt2YXIgYj1bXTt0aGlzLl90ZXNzeS5nbHVUZXNzQmVnaW5Qb2x5Z29uKGIpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt0aGlzLl90ZXNzeS5nbHVUZXNzQmVnaW5Db250b3VyKCk7Zm9yKHZhciBkPWFbY10sZT0wO2U8ZC5sZW5ndGg7ZSs9Myl7dmFyIGY9W2RbZV0sZFtlKzFdLGRbZSsyXV07dGhpcy5fdGVzc3kuZ2x1VGVzc1ZlcnRleChmLGYpfXRoaXMuX3Rlc3N5LmdsdVRlc3NFbmRDb250b3VyKCl9cmV0dXJuIHRoaXMuX3Rlc3N5LmdsdVRlc3NFbmRQb2x5Z29uKCksYn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fYmV6aWVyQ29lZmZpY2llbnRzPWZ1bmN0aW9uKGEpe3ZhciBiPWEqYSxjPWIqYSxkPTEtYSxlPWQqZDtyZXR1cm5bZSpkLDMqZSphLDMqZCpiLGNdfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9xdWFkcmF0aWNDb2VmZmljaWVudHM9ZnVuY3Rpb24oYSl7dmFyIGI9YSphLGM9MS1hO3JldHVybltjKmMsMipjKmEsYl19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2JlemllclRvQ2F0bXVsbD1mdW5jdGlvbihhKXtyZXR1cm5bYVsxXSxhWzFdKyhhWzJdLWFbMF0pL3RoaXMuX2N1cnZlVGlnaHRuZXNzLGFbMl0tKGFbM10tYVsxXSkvdGhpcy5fY3VydmVUaWdodG5lc3MsYVsyXV19LGIuZXhwb3J0cz1kLlJlbmRlcmVyR0x9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4uL2NvcmUvcDUuUmVuZGVyZXJcIjoyNyxcIi4vcDUuQ2FtZXJhXCI6NjksXCIuL3A1Lk1hdHJpeFwiOjcxLFwiLi9wNS5TaGFkZXJcIjo3NSxsaWJ0ZXNzOjl9XSw3NTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5TaGFkZXI9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3JlbmRlcmVyPWEsdGhpcy5fdmVydFNyYz1iLHRoaXMuX2ZyYWdTcmM9Yyx0aGlzLl92ZXJ0U2hhZGVyPS0xLHRoaXMuX2ZyYWdTaGFkZXI9LTEsdGhpcy5fZ2xQcm9ncmFtPTAsdGhpcy5fbG9hZGVkQXR0cmlidXRlcz0hMSx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5fbG9hZGVkVW5pZm9ybXM9ITEsdGhpcy51bmlmb3Jtcz17fSx0aGlzLl9ib3VuZD0hMSx0aGlzLnNhbXBsZXJzPVtdfSxkLlNoYWRlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2lmKDA9PT10aGlzLl9nbFByb2dyYW0pe3ZhciBhPXRoaXMuX3JlbmRlcmVyLkdMO2lmKHRoaXMuX3ZlcnRTaGFkZXI9YS5jcmVhdGVTaGFkZXIoYS5WRVJURVhfU0hBREVSKSxhLnNoYWRlclNvdXJjZSh0aGlzLl92ZXJ0U2hhZGVyLHRoaXMuX3ZlcnRTcmMpLGEuY29tcGlsZVNoYWRlcih0aGlzLl92ZXJ0U2hhZGVyKSwhYS5nZXRTaGFkZXJQYXJhbWV0ZXIodGhpcy5fdmVydFNoYWRlcixhLkNPTVBJTEVfU1RBVFVTKSlyZXR1cm4gY29uc29sZS5lcnJvcihcIllpa2VzISBBbiBlcnJvciBvY2N1cnJlZCBjb21waWxpbmcgdGhlIHZlcnRleCBzaGFkZXI6XCIrYS5nZXRTaGFkZXJJbmZvTG9nKHRoaXMuX3ZlcnRTaGFkZXIpKSxudWxsO2lmKHRoaXMuX2ZyYWdTaGFkZXI9YS5jcmVhdGVTaGFkZXIoYS5GUkFHTUVOVF9TSEFERVIpLGEuc2hhZGVyU291cmNlKHRoaXMuX2ZyYWdTaGFkZXIsdGhpcy5fZnJhZ1NyYyksYS5jb21waWxlU2hhZGVyKHRoaXMuX2ZyYWdTaGFkZXIpLCFhLmdldFNoYWRlclBhcmFtZXRlcih0aGlzLl9mcmFnU2hhZGVyLGEuQ09NUElMRV9TVEFUVVMpKXJldHVybiBjb25zb2xlLmVycm9yKFwiRGFybiEgQW4gZXJyb3Igb2NjdXJyZWQgY29tcGlsaW5nIHRoZSBmcmFnbWVudCBzaGFkZXI6XCIrYS5nZXRTaGFkZXJJbmZvTG9nKHRoaXMuX2ZyYWdTaGFkZXIpKSxudWxsO3RoaXMuX2dsUHJvZ3JhbT1hLmNyZWF0ZVByb2dyYW0oKSxhLmF0dGFjaFNoYWRlcih0aGlzLl9nbFByb2dyYW0sdGhpcy5fdmVydFNoYWRlciksYS5hdHRhY2hTaGFkZXIodGhpcy5fZ2xQcm9ncmFtLHRoaXMuX2ZyYWdTaGFkZXIpLGEubGlua1Byb2dyYW0odGhpcy5fZ2xQcm9ncmFtKSxhLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5fZ2xQcm9ncmFtLGEuTElOS19TVEFUVVMpfHxjb25zb2xlLmVycm9yKFwiU25hcCEgRXJyb3IgbGlua2luZyBzaGFkZXIgcHJvZ3JhbTogXCIrYS5nZXRQcm9ncmFtSW5mb0xvZyh0aGlzLl9nbFByb2dyYW0pKSx0aGlzLl9sb2FkQXR0cmlidXRlcygpLHRoaXMuX2xvYWRVbmlmb3JtcygpfXJldHVybiB0aGlzfSxkLlNoYWRlci5wcm90b3R5cGUuX2xvYWRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZEF0dHJpYnV0ZXMpe3RoaXMuYXR0cmlidXRlcz17fTtmb3IodmFyIGE9dGhpcy5fcmVuZGVyZXIuR0wsYj1hLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5fZ2xQcm9ncmFtLGEuQUNUSVZFX0FUVFJJQlVURVMpLGM9MDtjPGI7KytjKXt2YXIgZD1hLmdldEFjdGl2ZUF0dHJpYih0aGlzLl9nbFByb2dyYW0sYyksZT1kLm5hbWUsZj1hLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMuX2dsUHJvZ3JhbSxlKSxnPXt9O2cubmFtZT1lLGcubG9jYXRpb249ZixnLnR5cGU9ZC50eXBlLGcuc2l6ZT1kLnNpemUsdGhpcy5hdHRyaWJ1dGVzW2VdPWd9dGhpcy5fbG9hZGVkQXR0cmlidXRlcz0hMH19LGQuU2hhZGVyLnByb3RvdHlwZS5fbG9hZFVuaWZvcm1zPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZFVuaWZvcm1zKXtmb3IodmFyIGE9dGhpcy5fcmVuZGVyZXIuR0wsYj1hLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5fZ2xQcm9ncmFtLGEuQUNUSVZFX1VOSUZPUk1TKSxjPTAsZD0wO2Q8YjsrK2Qpe3ZhciBlPWEuZ2V0QWN0aXZlVW5pZm9ybSh0aGlzLl9nbFByb2dyYW0sZCksZj17fTtmLmxvY2F0aW9uPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMuX2dsUHJvZ3JhbSxlLm5hbWUpLGYuc2l6ZT1lLnNpemU7dmFyIGc9ZS5uYW1lO2Uuc2l6ZT4xJiYoZz1nLnN1YnN0cmluZygwLGcuaW5kZXhPZihcIlswXVwiKSkpLGYubmFtZT1nLGYudHlwZT1lLnR5cGUsZi50eXBlPT09YS5TQU1QTEVSXzJEJiYoZi5zYW1wbGVySW5kZXg9YyxjKyssdGhpcy5zYW1wbGVycy5wdXNoKGYpKSx0aGlzLnVuaWZvcm1zW2ddPWZ9dGhpcy5fbG9hZGVkVW5pZm9ybXM9ITB9fSxkLlNoYWRlci5wcm90b3R5cGUuY29tcGlsZT1mdW5jdGlvbigpe30sZC5TaGFkZXIucHJvdG90eXBlLmJpbmRTaGFkZXI9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLl9ib3VuZHx8KHRoaXMudXNlUHJvZ3JhbSgpLHRoaXMuX2JvdW5kPSEwLHRoaXMuYmluZFRleHR1cmVzKCksdGhpcy5fc2V0TWF0cml4VW5pZm9ybXMoKSx0aGlzPT09dGhpcy5fcmVuZGVyZXIuY3VyU3Ryb2tlU2hhZGVyJiZ0aGlzLl9zZXRWaWV3cG9ydFVuaWZvcm0oKSl9LGQuU2hhZGVyLnByb3RvdHlwZS51bmJpbmRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm91bmQmJih0aGlzLnVuYmluZFRleHR1cmVzKCksdGhpcy5fYm91bmQ9ITEpLHRoaXN9LGQuU2hhZGVyLnByb3RvdHlwZS5iaW5kVGV4dHVyZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5fcmVuZGVyZXIuR0wsYj0wO2I8dGhpcy5zYW1wbGVycy5sZW5ndGg7YisrKXt2YXIgYz10aGlzLnNhbXBsZXJzW2JdLGQ9Yy50ZXh0dXJlO3ZvaWQgMD09PWQmJihkPXRoaXMuX3JlbmRlcmVyLl9nZXRFbXB0eVRleHR1cmUoKSksYS5hY3RpdmVUZXh0dXJlKGEuVEVYVFVSRTArYy5zYW1wbGVySW5kZXgpLGQuYmluZFRleHR1cmUoKSxkLnVwZGF0ZSgpLGEudW5pZm9ybTFpKGMubG9jYXRpb24sYy5zYW1wbGVySW5kZXgpfX0sZC5TaGFkZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTx0aGlzLnNhbXBsZXJzLmxlbmd0aDthKyspe3ZhciBiPXRoaXMuc2FtcGxlcnNbYV0sYz1iLnRleHR1cmU7YyYmYy51cGRhdGUoKX19LGQuU2hhZGVyLnByb3RvdHlwZS51bmJpbmRUZXh0dXJlcz1mdW5jdGlvbigpe30sZC5TaGFkZXIucHJvdG90eXBlLl9zZXRNYXRyaXhVbmlmb3Jtcz1mdW5jdGlvbigpe3RoaXMuc2V0VW5pZm9ybShcInVQcm9qZWN0aW9uTWF0cml4XCIsdGhpcy5fcmVuZGVyZXIudVBNYXRyaXgubWF0NCksdGhpcy5zZXRVbmlmb3JtKFwidU1vZGVsVmlld01hdHJpeFwiLHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5tYXQ0KSx0aGlzLnNldFVuaWZvcm0oXCJ1Vmlld01hdHJpeFwiLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDQpLHRoaXM9PT10aGlzLl9yZW5kZXJlci5jdXJGaWxsU2hhZGVyJiYodGhpcy5fcmVuZGVyZXIudU5NYXRyaXguaW52ZXJzZVRyYW5zcG9zZSh0aGlzLl9yZW5kZXJlci51TVZNYXRyaXgpLHRoaXMuc2V0VW5pZm9ybShcInVOb3JtYWxNYXRyaXhcIix0aGlzLl9yZW5kZXJlci51Tk1hdHJpeC5tYXQzKSl9LGQuU2hhZGVyLnByb3RvdHlwZS5fc2V0Vmlld3BvcnRVbmlmb3JtPWZ1bmN0aW9uKCl7dGhpcy5zZXRVbmlmb3JtKFwidVZpZXdwb3J0XCIsdGhpcy5fcmVuZGVyZXIuX3ZpZXdwb3J0KX0sZC5TaGFkZXIucHJvdG90eXBlLnVzZVByb2dyYW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuR0wudXNlUHJvZ3JhbSh0aGlzLl9nbFByb2dyYW0pLHRoaXN9LGQuU2hhZGVyLnByb3RvdHlwZS5zZXRVbmlmb3JtPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy51bmlmb3Jtc1thXTtpZihjKXt2YXIgZD1jLmxvY2F0aW9uLGU9dGhpcy5fcmVuZGVyZXIuR0w7c3dpdGNoKHRoaXMudXNlUHJvZ3JhbSgpLGMudHlwZSl7Y2FzZSBlLkJPT0w6ITA9PT1iP2UudW5pZm9ybTFpKGQsMSk6ZS51bmlmb3JtMWkoZCwwKTticmVhaztjYXNlIGUuSU5UOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0xaXYoZCxiKTplLnVuaWZvcm0xaShkLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVDpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtMWZ2KGQsYik6ZS51bmlmb3JtMWYoZCxiKTticmVhaztjYXNlIGUuRkxPQVRfTUFUMzplLnVuaWZvcm1NYXRyaXgzZnYoZCwhMSxiKTticmVhaztjYXNlIGUuRkxPQVRfTUFUNDplLnVuaWZvcm1NYXRyaXg0ZnYoZCwhMSxiKTticmVhaztjYXNlIGUuRkxPQVRfVkVDMjpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtMmZ2KGQsYik6ZS51bmlmb3JtMmYoZCxiWzBdLGJbMV0pO2JyZWFrO2Nhc2UgZS5GTE9BVF9WRUMzOlxuYy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTNmdihkLGIpOmUudW5pZm9ybTNmKGQsYlswXSxiWzFdLGJbMl0pO2JyZWFrO2Nhc2UgZS5GTE9BVF9WRUM0OmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm00ZnYoZCxiKTplLnVuaWZvcm00ZihkLGJbMF0sYlsxXSxiWzJdLGJbM10pO2JyZWFrO2Nhc2UgZS5JTlRfVkVDMjpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtMml2KGQsYik6ZS51bmlmb3JtMmkoZCxiWzBdLGJbMV0pO2JyZWFrO2Nhc2UgZS5JTlRfVkVDMzpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtM2l2KGQsYik6ZS51bmlmb3JtM2koZCxiWzBdLGJbMV0sYlsyXSk7YnJlYWs7Y2FzZSBlLklOVF9WRUM0OmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm00aXYoZCxiKTplLnVuaWZvcm00aShkLGJbMF0sYlsxXSxiWzJdLGJbM10pO2JyZWFrO2Nhc2UgZS5TQU1QTEVSXzJEOmUuYWN0aXZlVGV4dHVyZShlLlRFWFRVUkUwK2Muc2FtcGxlckluZGV4KSxjLnRleHR1cmU9dGhpcy5fcmVuZGVyZXIuZ2V0VGV4dHVyZShiKSxlLnVuaWZvcm0xaShjLmxvY2F0aW9uLGMuc2FtcGxlckluZGV4KX1yZXR1cm4gdGhpc319LGQuU2hhZGVyLnByb3RvdHlwZS5pc0xpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVVzZUxpZ2h0aW5nfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVBbWJpZW50TGlnaHRDb3VudHx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51RGlyZWN0aW9uYWxMaWdodENvdW50fHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVQb2ludExpZ2h0Q291bnR8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudUFtYmllbnRDb2xvcnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51RGlyZWN0aW9uYWxDb2xvcnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51UG9pbnRMaWdodExvY2F0aW9ufHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVQb2ludExpZ2h0Q29sb3J8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudUxpZ2h0aW5nRGlyZWN0aW9ufHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVTcGVjdWxhcn0sZC5TaGFkZXIucHJvdG90eXBlLmlzVGV4dHVyZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNhbXBsZXJJbmRleD4wfSxkLlNoYWRlci5wcm90b3R5cGUuaXNDb2xvclNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmF0dHJpYnV0ZXMuYVZlcnRleENvbG9yfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVNYXRlcmlhbENvbG9yfSxkLlNoYWRlci5wcm90b3R5cGUuaXNUZXhMaWdodFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzTGlnaHRTaGFkZXIoKSYmdGhpcy5pc1RleHR1cmVTaGFkZXIoKX0sZC5TaGFkZXIucHJvdG90eXBlLmlzU3Ryb2tlU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVN0cm9rZVdlaWdodH0sZC5TaGFkZXIucHJvdG90eXBlLmVuYWJsZUF0dHJpYj1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9dGhpcy5fcmVuZGVyZXIuR0w7cmV0dXJuLTEhPT1hJiYoZy5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhKSxnLnZlcnRleEF0dHJpYlBvaW50ZXIoYSxiLGMsZCxlLGYpKSx0aGlzfSxiLmV4cG9ydHM9ZC5TaGFkZXJ9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QuVGV4dHVyZT1mdW5jdGlvbihhLGIpe3RoaXMuX3JlbmRlcmVyPWE7dmFyIGM9dGhpcy5fcmVuZGVyZXIuR0w7dGhpcy5zcmM9Yix0aGlzLmdsVGV4PXZvaWQgMCx0aGlzLmdsVGFyZ2V0PWMuVEVYVFVSRV8yRCx0aGlzLmdsRm9ybWF0PWMuUkdCQSx0aGlzLm1pcG1hcHM9ITEsdGhpcy5nbE1pbkZpbHRlcj1jLkxJTkVBUix0aGlzLmdsTWFnRmlsdGVyPWMuTElORUFSLHRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UsdGhpcy5nbFdyYXBUPWMuQ0xBTVBfVE9fRURHRSx0aGlzLmlzU3JjTWVkaWFFbGVtZW50PXZvaWQgMCE9PWQuTWVkaWFFbGVtZW50JiZiIGluc3RhbmNlb2YgZC5NZWRpYUVsZW1lbnQsdGhpcy5fdmlkZW9QcmV2VXBkYXRlVGltZT0wLHRoaXMuaXNTcmNIVE1MRWxlbWVudD12b2lkIDAhPT1kLkVsZW1lbnQmJmIgaW5zdGFuY2VvZiBkLkVsZW1lbnQmJiEoYiBpbnN0YW5jZW9mIGQuR3JhcGhpY3MpLHRoaXMuaXNTcmNQNUltYWdlPWIgaW5zdGFuY2VvZiBkLkltYWdlLHRoaXMuaXNTcmNQNUdyYXBoaWNzPWIgaW5zdGFuY2VvZiBkLkdyYXBoaWNzLHRoaXMuaXNJbWFnZURhdGE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEltYWdlRGF0YSYmYiBpbnN0YW5jZW9mIEltYWdlRGF0YTt2YXIgZT10aGlzLl9nZXRUZXh0dXJlRGF0YUZyb21Tb3VyY2UoKTtyZXR1cm4gdGhpcy53aWR0aD1lLndpZHRoLHRoaXMuaGVpZ2h0PWUuaGVpZ2h0LHRoaXMuaW5pdChlKSx0aGlzfSxkLlRleHR1cmUucHJvdG90eXBlLl9nZXRUZXh0dXJlRGF0YUZyb21Tb3VyY2U9ZnVuY3Rpb24oKXt2YXIgYTtyZXR1cm4gdGhpcy5pc1NyY1A1SW1hZ2U/YT10aGlzLnNyYy5jYW52YXM6dGhpcy5pc1NyY01lZGlhRWxlbWVudHx8dGhpcy5pc1NyY1A1R3JhcGhpY3N8fHRoaXMuaXNTcmNIVE1MRWxlbWVudD9hPXRoaXMuc3JjLmVsdDp0aGlzLmlzSW1hZ2VEYXRhJiYoYT10aGlzLnNyYyksYX0sZC5UZXh0dXJlLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX3JlbmRlcmVyLkdMO2lmKHRoaXMuZ2xUZXg9Yi5jcmVhdGVUZXh0dXJlKCksdGhpcy5iaW5kVGV4dHVyZSgpLGIudGV4UGFyYW1ldGVyaShiLlRFWFRVUkVfMkQsYi5URVhUVVJFX01BR19GSUxURVIsdGhpcy5nbE1hZ0ZpbHRlciksYi50ZXhQYXJhbWV0ZXJpKGIuVEVYVFVSRV8yRCxiLlRFWFRVUkVfTUlOX0ZJTFRFUix0aGlzLmdsTWluRmlsdGVyKSxiLnRleFBhcmFtZXRlcmkoYi5URVhUVVJFXzJELGIuVEVYVFVSRV9XUkFQX1MsdGhpcy5nbFdyYXBTKSxiLnRleFBhcmFtZXRlcmkoYi5URVhUVVJFXzJELGIuVEVYVFVSRV9XUkFQX1QsdGhpcy5nbFdyYXBUKSwwPT09dGhpcy53aWR0aHx8MD09PXRoaXMuaGVpZ2h0fHx0aGlzLmlzU3JjTWVkaWFFbGVtZW50JiYhdGhpcy5zcmMubG9hZGVkbWV0YWRhdGEpe3ZhciBjPW5ldyBVaW50OEFycmF5KFsxLDEsMSwxXSk7Yi50ZXhJbWFnZTJEKHRoaXMuZ2xUYXJnZXQsMCxiLlJHQkEsMSwxLDAsdGhpcy5nbEZvcm1hdCxiLlVOU0lHTkVEX0JZVEUsYyl9ZWxzZSBiLnRleEltYWdlMkQodGhpcy5nbFRhcmdldCwwLHRoaXMuZ2xGb3JtYXQsdGhpcy5nbEZvcm1hdCxiLlVOU0lHTkVEX0JZVEUsYSl9LGQuVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zcmM7aWYoMD09PWEud2lkdGh8fDA9PT1hLmhlaWdodClyZXR1cm4hMTt2YXIgYj10aGlzLl9nZXRUZXh0dXJlRGF0YUZyb21Tb3VyY2UoKSxjPSExLGQ9dGhpcy5fcmVuZGVyZXIuR0w7cmV0dXJuIGIud2lkdGghPT10aGlzLndpZHRofHxiLmhlaWdodCE9PXRoaXMuaGVpZ2h0PyhjPSEwLHRoaXMud2lkdGg9Yi53aWR0aCx0aGlzLmhlaWdodD1iLmhlaWdodCx0aGlzLmlzU3JjUDVJbWFnZT9hLnNldE1vZGlmaWVkKCExKToodGhpcy5pc1NyY01lZGlhRWxlbWVudHx8dGhpcy5pc1NyY0hUTUxFbGVtZW50KSYmYS5zZXRNb2RpZmllZCghMCkpOnRoaXMuaXNTcmNQNUltYWdlP2EuaXNNb2RpZmllZCgpJiYoYz0hMCxhLnNldE1vZGlmaWVkKCExKSk6dGhpcy5pc1NyY01lZGlhRWxlbWVudD9hLmlzTW9kaWZpZWQoKT8oYz0hMCxhLnNldE1vZGlmaWVkKCExKSk6YS5sb2FkZWRtZXRhZGF0YSYmdGhpcy5fdmlkZW9QcmV2VXBkYXRlVGltZSE9PWEudGltZSgpJiYodGhpcy5fdmlkZW9QcmV2VXBkYXRlVGltZT1hLnRpbWUoKSxjPSEwKTp0aGlzLmlzSW1hZ2VEYXRhP2EuX2RpcnR5JiYoYS5fZGlydHk9ITEsYz0hMCk6Yz0hMCxjJiYodGhpcy5iaW5kVGV4dHVyZSgpLGQudGV4SW1hZ2UyRCh0aGlzLmdsVGFyZ2V0LDAsdGhpcy5nbEZvcm1hdCx0aGlzLmdsRm9ybWF0LGQuVU5TSUdORURfQllURSxiKSksY30sZC5UZXh0dXJlLnByb3RvdHlwZS5iaW5kVGV4dHVyZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5HTC5iaW5kVGV4dHVyZSh0aGlzLmdsVGFyZ2V0LHRoaXMuZ2xUZXgpLHRoaXN9LGQuVGV4dHVyZS5wcm90b3R5cGUudW5iaW5kVGV4dHVyZT1mdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLkdMLmJpbmRUZXh0dXJlKHRoaXMuZ2xUYXJnZXQsbnVsbCl9LGQuVGV4dHVyZS5wcm90b3R5cGUuc2V0SW50ZXJwb2xhdGlvbj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX3JlbmRlcmVyLkdMO2E9PT1lLk5FQVJFU1Q/dGhpcy5nbE1pbkZpbHRlcj1jLk5FQVJFU1Q6dGhpcy5nbE1pbkZpbHRlcj1jLkxJTkVBUixiPT09ZS5ORUFSRVNUP3RoaXMuZ2xNYWdGaWx0ZXI9Yy5ORUFSRVNUOnRoaXMuZ2xNYWdGaWx0ZXI9Yy5MSU5FQVIsdGhpcy5iaW5kVGV4dHVyZSgpLGMudGV4UGFyYW1ldGVyaShjLlRFWFRVUkVfMkQsYy5URVhUVVJFX01JTl9GSUxURVIsdGhpcy5nbE1pbkZpbHRlciksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfTUFHX0ZJTFRFUix0aGlzLmdsTWFnRmlsdGVyKSx0aGlzLnVuYmluZFRleHR1cmUoKX0sZC5UZXh0dXJlLnByb3RvdHlwZS5zZXRXcmFwTW9kZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX3JlbmRlcmVyLkdMLGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PShhJmEtMSl9LGY9ZCh0aGlzLndpZHRoKSxnPWQodGhpcy53aWR0aCk7YT09PWUuUkVQRUFUP2YmJmc/dGhpcy5nbFdyYXBTPWMuUkVQRUFUOihjb25zb2xlLndhcm4oXCJZb3UgdHJpZWQgdG8gc2V0IHRoZSB3cmFwIG1vZGUgdG8gUkVQRUFUIGJ1dCB0aGUgdGV4dHVyZSBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIHR3by4gU2V0dGluZyB0byBDTEFNUCBpbnN0ZWFkXCIpLHRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UpOmE9PT1lLk1JUlJPUj9mJiZnP3RoaXMuZ2xXcmFwUz1jLk1JUlJPUkVEX1JFUEVBVDooY29uc29sZS53YXJuKFwiWW91IHRyaWVkIHRvIHNldCB0aGUgd3JhcCBtb2RlIHRvIE1JUlJPUiBidXQgdGhlIHRleHR1cmUgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uIFNldHRpbmcgdG8gQ0xBTVAgaW5zdGVhZFwiKSx0aGlzLmdsV3JhcFM9Yy5DTEFNUF9UT19FREdFKTp0aGlzLmdsV3JhcFM9Yy5DTEFNUF9UT19FREdFLGI9PT1lLlJFUEVBVD9mJiZnP3RoaXMuZ2xXcmFwVD1jLlJFUEVBVDooY29uc29sZS53YXJuKFwiWW91IHRyaWVkIHRvIHNldCB0aGUgd3JhcCBtb2RlIHRvIFJFUEVBVCBidXQgdGhlIHRleHR1cmUgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uIFNldHRpbmcgdG8gQ0xBTVAgaW5zdGVhZFwiKSx0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFKTpiPT09ZS5NSVJST1I/ZiYmZz90aGlzLmdsV3JhcFQ9Yy5NSVJST1JFRF9SRVBFQVQ6KGNvbnNvbGUud2FybihcIllvdSB0cmllZCB0byBzZXQgdGhlIHdyYXAgbW9kZSB0byBNSVJST1IgYnV0IHRoZSB0ZXh0dXJlIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgdHdvLiBTZXR0aW5nIHRvIENMQU1QIGluc3RlYWRcIiksdGhpcy5nbFdyYXBUPWMuQ0xBTVBfVE9fRURHRSk6dGhpcy5nbFdyYXBUPWMuQ0xBTVBfVE9fRURHRSx0aGlzLmJpbmRUZXh0dXJlKCksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfV1JBUF9TLHRoaXMuZ2xXcmFwUyksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfV1JBUF9ULHRoaXMuZ2xXcmFwVCksdGhpcy51bmJpbmRUZXh0dXJlKCl9LGIuZXhwb3J0cz1kLlRleHR1cmV9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDc3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3RoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iLHRoaXMuaW5mb3M9W10sdGhpcy5maW5kSW1hZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy53aWR0aCp0aGlzLmhlaWdodDtpZihhPmIpdGhyb3cgbmV3IEVycm9yKFwiZm9udCBpcyB0b28gY29tcGxleCB0byByZW5kZXIgaW4gM0RcIik7Zm9yKHZhciBjLGQsZT10aGlzLmluZm9zLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgZj10aGlzLmluZm9zW2VdO2lmKGYuaW5kZXgrYTxiKXtjPWYsZD1mLmltYWdlRGF0YTticmVha319aWYoIWMpe3RyeXtkPW5ldyBJbWFnZURhdGEodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9Y2F0Y2goYSl7dmFyIGc9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjYW52YXNcIilbMF0saD0hZztnfHwoZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGcuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGcpKTt2YXIgaT1nLmdldENvbnRleHQoXCIyZFwiKTtpJiYoZD1pLmNyZWF0ZUltYWdlRGF0YSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSksaCYmZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChnKX1jPXtpbmRleDowLGltYWdlRGF0YTpkfSx0aGlzLmluZm9zLnB1c2goYyl9dmFyIGo9Yy5pbmRleDtyZXR1cm4gYy5pbmRleCs9YSxkLl9kaXJ0eT0hMCx7aW1hZ2VEYXRhOmQsaW5kZXg6an19fWZ1bmN0aW9uIGUoYSxiLGMsZCxlKXt2YXIgZj1hLmltYWdlRGF0YSxnPWYuZGF0YSxoPTQqYS5pbmRleCsrO2dbaCsrXT1iLGdbaCsrXT1jLGdbaCsrXT1kLGdbaCsrXT1lfXZhciBmPWEoXCIuLi9jb3JlL21haW5cIiksZz1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4vcDUuU2hhZGVyXCIpLGEoXCIuL3A1LlJlbmRlcmVyR0xcIiksZi5SZW5kZXJlckdMLnByb3RvdHlwZS5fYXBwbHlUZXh0UHJvcGVydGllcz1mdW5jdGlvbigpe30sZi5SZW5kZXJlckdMLnByb3RvdHlwZS50ZXh0V2lkdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2lzT3BlblR5cGUoKT90aGlzLl90ZXh0Rm9udC5fdGV4dFdpZHRoKGEsdGhpcy5fdGV4dFNpemUpOjB9O3ZhciBoPTksaT1oLGo9NjQsaz02NCxsPTY0LG09NjQsbj02NCxvPTY0LHA9TWF0aC5zcXJ0KDMpLHE9ZnVuY3Rpb24oYSl7dGhpcy5mb250PWEsdGhpcy5zdHJva2VJbWFnZUluZm9zPW5ldyBkKGosayksdGhpcy5jb2xEaW1JbWFnZUluZm9zPW5ldyBkKGwsbSksdGhpcy5yb3dEaW1JbWFnZUluZm9zPW5ldyBkKGwsbSksdGhpcy5jb2xDZWxsSW1hZ2VJbmZvcz1uZXcgZChuLG8pLHRoaXMucm93Q2VsbEltYWdlSW5mb3M9bmV3IGQobixvKSx0aGlzLmdseXBoSW5mb3M9e30sdGhpcy5nZXRHbHlwaEluZm89ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhLGIsYyl7ZnVuY3Rpb24gZChhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoO2QtLSA+MDspe3ZhciBlPWFbZF07Yj5lJiYoYj1lKSxjPGUmJihjPWUpfXJldHVybnttaW46YixtYXg6Y319dmFyIGU9dy5sZW5ndGg7dy5wdXNoKGMpO2Zvcih2YXIgZj1kKGEsMSwwKSxnPU1hdGgubWF4KE1hdGguZmxvb3IoZi5taW4qaCksMCksaj1NYXRoLm1pbihNYXRoLmNlaWwoZi5tYXgqaCksaCksaz1nO2s8ajsrK2speVtrXS5wdXNoKGUpO2Zvcih2YXIgbD1kKGIsMSwwKSxtPU1hdGgubWF4KE1hdGguZmxvb3IobC5taW4qaSksMCksbj1NYXRoLm1pbihNYXRoLmNlaWwobC5tYXgqaSksaSksbz1tO288bjsrK28peFtvXS5wdXNoKGUpfWZ1bmN0aW9uIGMoYSxiLGMpe3JldHVybiBhPGI/YjphPmM/YzphfWZ1bmN0aW9uIGQoYSl7cmV0dXJuIGMoMjU1KmEsMCwyNTUpfWZ1bmN0aW9uIGcoYSxiLGMsZCl7dGhpcy5wMD1hLHRoaXMuYzA9Yix0aGlzLmMxPWMsdGhpcy5wMT1kLHRoaXMudG9RdWFkcmF0aWM9ZnVuY3Rpb24oKXtyZXR1cm57eDp0aGlzLnAwLngseTp0aGlzLnAwLnkseDE6dGhpcy5wMS54LHkxOnRoaXMucDEueSxjeDooMyoodGhpcy5jMC54K3RoaXMuYzEueCktKHRoaXMucDAueCt0aGlzLnAxLngpKS80LGN5OigzKih0aGlzLmMwLnkrdGhpcy5jMS55KS0odGhpcy5wMC55K3RoaXMucDEueSkpLzR9fSx0aGlzLnF1YWRFcnJvcj1mdW5jdGlvbigpe3JldHVybiBmLlZlY3Rvci5zdWIoZi5WZWN0b3Iuc3ViKHRoaXMucDEsdGhpcy5wMCksZi5WZWN0b3IubXVsdChmLlZlY3Rvci5zdWIodGhpcy5jMSx0aGlzLmMwKSwzKSkubWFnKCkvMn0sdGhpcy5zcGxpdD1mdW5jdGlvbihhKXt2YXIgYj1mLlZlY3Rvci5sZXJwKHRoaXMucDAsdGhpcy5jMCxhKSxjPWYuVmVjdG9yLmxlcnAodGhpcy5jMCx0aGlzLmMxLGEpLGQ9Zi5WZWN0b3IubGVycChiLGMsYSk7dGhpcy5jMT1mLlZlY3Rvci5sZXJwKHRoaXMuYzEsdGhpcy5wMSxhKSx0aGlzLmMwPWYuVmVjdG9yLmxlcnAoYyx0aGlzLmMxLGEpO3ZhciBlPWYuVmVjdG9yLmxlcnAoZCx0aGlzLmMwLGEpLGg9bmV3IGcodGhpcy5wMCxiLGQsZSk7cmV0dXJuIHRoaXMucDA9ZSxofSx0aGlzLnNwbGl0SW5mbGVjdGlvbnM9ZnVuY3Rpb24oKXt2YXIgYT1mLlZlY3Rvci5zdWIodGhpcy5jMCx0aGlzLnAwKSxiPWYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIodGhpcy5jMSx0aGlzLmMwKSxhKSxjPWYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIoZi5WZWN0b3Iuc3ViKHRoaXMucDEsdGhpcy5jMSksYSksZi5WZWN0b3IubXVsdChiLDIpKSxkPVtdLGU9Yi54KmMueS1iLnkqYy54O2lmKDAhPT1lKXt2YXIgZz1hLngqYy55LWEueSpjLngsaD1hLngqYi55LWEueSpiLngsaT1nKmctNCplKmg7aWYoaT49MCl7ZTwwJiYoZT0tZSxnPS1nLGg9LWgpO3ZhciBqPU1hdGguc3FydChpKSxrPSgtZy1qKS8oMiplKSxsPSgtZytqKS8oMiplKTtrPjAmJms8MSYmKGQucHVzaCh0aGlzLnNwbGl0KGspKSxsPTEtKDEtbCkvKDEtaykpLGw+MCYmbDwxJiZkLnB1c2godGhpcy5zcGxpdChsKSl9fXJldHVybiBkLnB1c2godGhpcyksZH19ZnVuY3Rpb24gaihhLGIsYyxkLGUsaCxpLGope2Zvcih2YXIgaz1uZXcgZyhuZXcgZi5WZWN0b3IoYSxiKSxuZXcgZi5WZWN0b3IoYyxkKSxuZXcgZi5WZWN0b3IoZSxoKSxuZXcgZi5WZWN0b3IoaSxqKSkuc3BsaXRJbmZsZWN0aW9ucygpLGw9W10sbT0zMC9wLG49MDtuPGsubGVuZ3RoO24rKyl7Zm9yKHZhciBvLHE9a1tuXSxyPVtdOyEoKG89bS9xLnF1YWRFcnJvcigpKT49LjEyNSk7KXt2YXIgcz1NYXRoLnBvdyhvLDEvMyksdD1xLnNwbGl0KHMpLHU9cS5zcGxpdCgxLXMvKDEtcykpO2wucHVzaCh0KSxyLnB1c2gocSkscT11fW88MSYmbC5wdXNoKHEuc3BsaXQoLjUpKSxsLnB1c2gocSksQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobCxyLnJldmVyc2UoKSl9cmV0dXJuIGx9ZnVuY3Rpb24gayhhLGMsZCxlKXtiKFthLGRdLFtjLGVdLHt4OmEseTpjLGN4OihhK2QpLzIsY3k6KGMrZSkvMn0pfWZ1bmN0aW9uIGwoYSxiLGMsZCl7cmV0dXJuIE1hdGguYWJzKGMtYSk8MWUtNSYmTWF0aC5hYnMoZC1iKTwxZS01fWZ1bmN0aW9uIG0oYSxiLGMpe2Zvcih2YXIgZD1hLmxlbmd0aCxmPWIuZmluZEltYWdlKGQpLGc9Zi5pbmRleCxoPTAsaT0wO2k8ZDsrK2kpaCs9YVtpXS5sZW5ndGg7Zm9yKHZhciBqPWMuZmluZEltYWdlKGgpLGs9MDtrPGQ7KytrKXt2YXIgbD1hW2tdLG09bC5sZW5ndGgsbj1qLmluZGV4O2UoZixuPj43LDEyNyZuLG0+PjcsMTI3Jm0pO2Zvcih2YXIgbz0wO288bTsrK28pe3ZhciBwPWxbb10rUztlKGoscD4+NywxMjcmcCwwLDApfX1yZXR1cm57Y2VsbEltYWdlSW5mbzpqLGRpbU9mZnNldDpnLGRpbUltYWdlSW5mbzpmfX12YXIgbj10aGlzLmdseXBoSW5mb3NbYS5pbmRleF07aWYobilyZXR1cm4gbjt2YXIgbz1hLmdldEJvdW5kaW5nQm94KCkscT1vLngxLHI9by55MSxzPW8ueDItcSx0PW8ueTItcix1PWEucGF0aC5jb21tYW5kcztpZigwPT09c3x8MD09PXR8fCF1Lmxlbmd0aClyZXR1cm4gdGhpcy5nbHlwaEluZm9zW2EuaW5kZXhdPXt9O3ZhciB2LHc9W10seD1bXSx5PVtdO2Zvcih2PWgtMTt2Pj0wOy0tdil5LnB1c2goW10pO2Zvcih2PWktMTt2Pj0wOy0tdil4LnB1c2goW10pO2Zvcih2YXIgeixBLEIsQyxEPTA7RDx1Lmxlbmd0aDsrK0Qpe3ZhciBFPXVbRF0sRj0oRS54LXEpL3MsRz0oRS55LXIpL3Q7aWYoIWwoeixBLEYsRykpe3N3aXRjaChFLnR5cGUpe2Nhc2VcIk1cIjpCPUYsQz1HO2JyZWFrO2Nhc2VcIkxcIjprKHosQSxGLEcpO2JyZWFrO2Nhc2VcIlFcIjp2YXIgSD0oRS54MS1xKS9zLEk9KEUueTEtcikvdDtiKFt6LEYsSF0sW0EsRyxJXSx7eDp6LHk6QSxjeDpILGN5Okl9KTticmVhaztjYXNlXCJaXCI6bCh6LEEsQixDKT93LnB1c2goe3g6eix5OkF9KTooayh6LEEsQixDKSx3LnB1c2goe3g6Qix5OkN9KSk7YnJlYWs7Y2FzZVwiQ1wiOmZvcih2YXIgSj0oRS54MS1xKS9zLEs9KEUueTEtcikvdCxMPShFLngyLXEpL3MsTT0oRS55Mi1yKS90LE49aih6LEEsSixLLEwsTSxGLEcpLE89MDtPPE4ubGVuZ3RoO08rKyl7dmFyIFA9TltPXS50b1F1YWRyYXRpYygpO2IoW1AueCxQLngxLFAuY3hdLFtQLnksUC55MSxQLmN5XSxQKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInVua25vd24gY29tbWFuZCB0eXBlOiBcIitFLnR5cGUpfXo9RixBPUd9fWZvcih2YXIgUT13Lmxlbmd0aCxSPXRoaXMuc3Ryb2tlSW1hZ2VJbmZvcy5maW5kSW1hZ2UoUSksUz1SLmluZGV4LFQ9MDtUPFE7KytUKXt2YXIgVT13W1RdO2UoUixkKFUueCksZChVLnkpLGQoVS5jeCksZChVLmN5KSl9cmV0dXJuIG49dGhpcy5nbHlwaEluZm9zW2EuaW5kZXhdPXtnbHlwaDphLHVHbHlwaFJlY3Q6W28ueDEsLW8ueTEsby54Miwtby55Ml0sc3Ryb2tlSW1hZ2VJbmZvOlIsc3Ryb2tlczp3LGNvbEluZm86bSh5LHRoaXMuY29sRGltSW1hZ2VJbmZvcyx0aGlzLmNvbENlbGxJbWFnZUluZm9zKSxyb3dJbmZvOm0oeCx0aGlzLnJvd0RpbUltYWdlSW5mb3MsdGhpcy5yb3dDZWxsSW1hZ2VJbmZvcyl9LG4udUdyaWRPZmZzZXQ9W24uY29sSW5mby5kaW1PZmZzZXQsbi5yb3dJbmZvLmRpbU9mZnNldF0sbn19O2YuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3JlbmRlclRleHQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZighKGQ+PWUpJiZ0aGlzLl9kb0ZpbGwpe2lmKCF0aGlzLl9pc09wZW5UeXBlKCkpcmV0dXJuIGNvbnNvbGUubG9nKFwiV0VCR0w6IG9ubHkgb3BlbnR5cGUgZm9udHMgYXJlIHN1cHBvcnRlZFwiKSxhO2EucHVzaCgpO3ZhciBwPXRoaXMuY3VyRmlsbFNoYWRlcixyPXRoaXMuX2RvU3Ryb2tlLHM9dGhpcy5kcmF3TW9kZTt0aGlzLmN1ckZpbGxTaGFkZXI9bnVsbCx0aGlzLl9kb1N0cm9rZT0hMSx0aGlzLmRyYXdNb2RlPWcuVEVYVFVSRTt2YXIgdD10aGlzLl90ZXh0Rm9udC5mb250LHU9dGhpcy5fdGV4dEZvbnQuX2ZvbnRJbmZvO3V8fCh1PXRoaXMuX3RleHRGb250Ll9mb250SW5mbz1uZXcgcSh0KSk7dmFyIHY9dGhpcy5fdGV4dEZvbnQuX2hhbmRsZUFsaWdubWVudCh0aGlzLGIsYyxkKSx3PXRoaXMuX3RleHRTaXplLHg9dy90LnVuaXRzUGVyRW07dGhpcy50cmFuc2xhdGUodi54LHYueSwwKSx0aGlzLnNjYWxlKHgseCwxKTt2YXIgeT10aGlzLkdMLHo9IXRoaXMuX2RlZmF1bHRGb250U2hhZGVyLEE9dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldEZvbnRTaGFkZXIoKSk7eiYmKEEuc2V0VW5pZm9ybShcInVHcmlkSW1hZ2VTaXplXCIsW2wsbV0pLEEuc2V0VW5pZm9ybShcInVDZWxsc0ltYWdlU2l6ZVwiLFtuLG9dKSxBLnNldFVuaWZvcm0oXCJ1U3Ryb2tlSW1hZ2VTaXplXCIsW2osa10pLEEuc2V0VW5pZm9ybShcInVHcmlkU2l6ZVwiLFtoLGldKSksdGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyRmlsbENvbG9yKTt2YXIgQj10aGlzLmdIYXNoLmdseXBoO2lmKCFCKXt2YXIgQz10aGlzLl90ZXh0R2VvbT1uZXcgZi5HZW9tZXRyeSgxLDEsZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD0xO2ErKylmb3IodmFyIGI9MDtiPD0xO2IrKyl0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGYuVmVjdG9yKGIsYSwwKSksdGhpcy51dnMucHVzaChiLGEpfSk7Qy5jb21wdXRlRmFjZXMoKS5jb21wdXRlTm9ybWFscygpLEI9dGhpcy5jcmVhdGVCdWZmZXJzKFwiZ2x5cGhcIixDKX10aGlzLl9iaW5kQnVmZmVyKEIudmVydGV4QnVmZmVyLHkuQVJSQVlfQlVGRkVSKSxBLmVuYWJsZUF0dHJpYihBLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMseS5GTE9BVCwhMSwwLDApLHRoaXMuX2JpbmRCdWZmZXIoQi5pbmRleEJ1ZmZlcix5LkVMRU1FTlRfQVJSQVlfQlVGRkVSKSx0aGlzLl9iaW5kQnVmZmVyKEIudXZCdWZmZXIseS5BUlJBWV9CVUZGRVIpLEEuZW5hYmxlQXR0cmliKEEuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMix5LkZMT0FULCExLDAsMCksQS5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLmN1ckZpbGxDb2xvcik7dHJ5e2Zvcih2YXIgRD0wLEU9bnVsbCxGPSExLEc9dC5zdHJpbmdUb0dseXBocyhiKSxIPTA7SDxHLmxlbmd0aDsrK0gpe3ZhciBJPUdbSF07RSYmKEQrPXQuZ2V0S2VybmluZ1ZhbHVlKEUsSSkpO3ZhciBKPXUuZ2V0R2x5cGhJbmZvKEkpO2lmKEoudUdseXBoUmVjdCl7dmFyIEs9Si5yb3dJbmZvLEw9Si5jb2xJbmZvO0Euc2V0VW5pZm9ybShcInVTYW1wbGVyU3Ryb2tlc1wiLEouc3Ryb2tlSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidVNhbXBsZXJSb3dTdHJva2VzXCIsSy5jZWxsSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidVNhbXBsZXJSb3dzXCIsSy5kaW1JbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlckNvbFN0cm9rZXNcIixMLmNlbGxJbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlckNvbHNcIixMLmRpbUltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVHcmlkT2Zmc2V0XCIsSi51R3JpZE9mZnNldCksQS5zZXRVbmlmb3JtKFwidUdseXBoUmVjdFwiLEoudUdseXBoUmVjdCksQS5zZXRVbmlmb3JtKFwidUdseXBoT2Zmc2V0XCIsRCksRj9BLmJpbmRUZXh0dXJlcygpOihGPSEwLEEuYmluZFNoYWRlcigpKSx5LmRyYXdFbGVtZW50cyh5LlRSSUFOR0xFUyw2LHRoaXMuR0wuVU5TSUdORURfU0hPUlQsMCl9RCs9SS5hZHZhbmNlV2lkdGgsRT1JfX1maW5hbGx5e0EudW5iaW5kU2hhZGVyKCksdGhpcy5jdXJGaWxsU2hhZGVyPXAsdGhpcy5fZG9TdHJva2U9cix0aGlzLmRyYXdNb2RlPXMsYS5wb3AoKX1yZXR1cm4gdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLGF9fX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5SZW5kZXJlckdMXCI6NzQsXCIuL3A1LlNoYWRlclwiOjc1fV19LHt9LFsxM10pKDEzKX0pOyIsImltcG9ydCBwNSBmcm9tICdwNS9saWIvcDUubWluJztcbmltcG9ydCBUb25lIGZyb20gJ3RvbmUnO1xuXG5jb25zdCBza2V0Y2ggPSAocCkgPT4ge1xuICAgIGxldCBwcmltZU51bWJlcnMgPSBbMiwgMywgNSwgNywgMTEsIDEzLCAxNywgMTksIDIzLCAyOSwgMzEsIDM3LCA0MSwgNDMsIDQ3LCA1MywgNTksIDYxLCA2NywgNzEsIDczLCA3OSwgODMsIDg5LCA5NywgMTAxLCAxMDMsIDEwNywgMTA5LCAxMTMsIDEyNywgMTMxLCAxMzcsIDEzOSwgMTQ5LCAxNTEsIDE1NywgMTYzLCAxNjcsIDE3MywgMTc5LCAxODEsIDE5MSwgMTkzLCAxOTcsIDE5OSwgMjExLCAyMjMsIDIyNywgMjI5LCAyMzMsIDIzOSwgMjQxLCAyNTEsIDI1NywgMjYzLCAyNjksIDI3MSwgMjc3LCAyODEsIDI4MywgMjkzLCAzMDcsIDMxMSwgMzEzLCAzMTcsIDMzMSwgMzM3LCAzNDcsIDM0OSwgMzUzLCAzNTksIDM2NywgMzczLCAzNzksIDM4MywgMzg5LCAzOTcsIDQwMSwgNDA5LCA0MTksIDQyMSwgNDMxLCA0MzMsIDQzOSwgNDQzLCA0NDksIDQ1NywgNDYxLCA0NjMsIDQ2NywgNDc5LCA0ODcsIDQ5MSwgNDk5LCA1MDMsIDUwOSwgNTIxLCA1MjMsIDU0MV07XG4gICAgXG4gICAgdmFyIGNob3J1cyA9IG5ldyBUb25lLkNob3J1cygwLjgsIDIuNSwgMC4yKS50b01hc3RlcigpO1xuXG4gICAgY2xhc3MgUHJpbWUge1xuICAgICAgICBjb25zdHJ1Y3RvcihudW0sIGlkKSB7XG4gICAgICAgICAgICB0aGlzLm51bSA9IG51bTtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgICAgIHRoaXMuY291bnRlciA9IDA7XG4gICAgICAgICAgICB0aGlzLmFscGhhID0gMDtcbiAgICAgICAgICAgIHRoaXMubGlmZXRpbWUgPSAwO1xuXG4gICAgICAgICAgICB0aGlzLmZtID0gbmV3IFRvbmUuRk1TeW50aCh7XG4gICAgICAgICAgICAgICAgXCJoYXJtb25pY2l0eVwiICA6IDEwICxcbiAgICAgICAgICAgICAgICBcIm1vZHVsYXRpb25JbmRleFwiICA6IDgwICxcbiAgICAgICAgICAgICAgICBcImRldHVuZVwiICA6IDAgLFxuICAgICAgICAgICAgICAgIFwib3NjaWxsYXRvclwiICA6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCIgIDogXCJzaW5lXCJcbiAgICAgICAgICAgICAgICB9ICAsXG4gICAgICAgICAgICAgICAgXCJlbnZlbG9wZVwiICA6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJhdHRhY2tcIiAgOiAwLjAwMSAsXG4gICAgICAgICAgICAgICAgICAgIFwiZGVjYXlcIiAgOiAwLjAwMyAsXG4gICAgICAgICAgICAgICAgICAgIFwic3VzdGFpblwiICA6IDAuMDYgLFxuICAgICAgICAgICAgICAgICAgICBcInJlbGVhc2VcIiAgOiAwLjNcbiAgICAgICAgICAgICAgICB9ICAsXG4gICAgICAgICAgICAgICAgXCJtb2R1bGF0aW9uXCIgIDoge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIiAgOiBcInNxdWFyZVwiXG4gICAgICAgICAgICAgICAgfSAgLFxuICAgICAgICAgICAgICAgIFwibW9kdWxhdGlvbkVudmVsb3BlXCIgIDoge1xuICAgICAgICAgICAgICAgICAgICBcImF0dGFja1wiICA6IDAuMDEgLFxuICAgICAgICAgICAgICAgICAgICBcImRlY2F5XCIgIDogMC4wMiAsXG4gICAgICAgICAgICAgICAgICAgIFwic3VzdGFpblwiICA6IDAuMDMgLFxuICAgICAgICAgICAgICAgICAgICBcInJlbGVhc2VcIiAgOiAwLjAzM1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJwb3J0YW1lbnRvXCIgOiAwLjAxIFxuICAgICAgICAgICAgfSkuY29ubmVjdChjaG9ydXMpO1xuXG4gICAgICAgICAgICB0aGlzLmZtLnZvbHVtZS52YWx1ZSA9IC02O1xuICAgICAgICB9XG4gICAgICAgIGRyYXcoKSB7XG4gICAgICAgICAgICBwLnB1c2goKTtcbiAgICAgICAgICAgIHAuc3Ryb2tlKDI1NSwxNDApO1xuICAgICAgICAgICAgcC5saW5lKDAsdGhpcy5pZCAqIDgsMCx0aGlzLm51bSx0aGlzLmlkICogOCwwKTtcbiAgICAgICAgICAgIHAudHJhbnNsYXRlKDAsdGhpcy5pZCAqIDgsMCk7XG4gICAgICAgICAgICAvL3Auc3Ryb2tlKDApO1xuICAgICAgICAgICAgcC5ub1N0cm9rZSgpO1xuICAgICAgICAgICAgcC5maWxsKDI1NSwxODApO1xuICAgICAgICAgICAgcC5zcGhlcmUoMyk7XG4gICAgICAgICAgICBwLnRyYW5zbGF0ZSh0aGlzLm51bSwwLDApO1xuICAgICAgICAgICAgcC5zcGhlcmUoMyk7XG4gICAgICAgICAgICBwLmZpbGwoMjU1LDAsMCx0aGlzLmFscGhhKTtcbiAgICAgICAgICAgIHAuc3BoZXJlKDUpO1xuICAgICAgICAgICAgcC5wb3AoKTtcblxuICAgICAgICAgICAgaWYodGhpcy5saWZldGltZTwxMCkge1xuICAgICAgICAgICAgICAgIHAucHVzaCgpO1xuICAgICAgICAgICAgICAgIHAuZmlsbCgyNTUsMTgwKTtcbiAgICAgICAgICAgICAgICBwLnRyYW5zbGF0ZSh0aGlzLmNvdW50ZXIsdGhpcy5pZCAqIDgsIDApO1xuICAgICAgICAgICAgICAgIHAuc3BoZXJlKDMpO1xuICAgICAgICAgICAgICAgIHAucG9wKCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hbHBoYSAtPSAxMDtcblxuICAgICAgICAgICAgaWYodGhpcy5jb3VudGVyID4gdGhpcy5udW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuYWxwaGEgPSAyNTU7XG4gICAgICAgICAgICAgICAgdGhpcy5saWZldGltZSsrO1xuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXIgc291bmQgaGVyZVxuICAgICAgICAgICAgICAgIHRoaXMuZm0udHJpZ2dlckF0dGFja1JlbGVhc2UoIFRvbmUuTWlkaSggKDU0MSAtIHRoaXMubnVtKS8xMCArIDYwICkudG9GcmVxdWVuY3koKSwgXCIxMjhuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwcmltZXMgPSBbXTtcbiAgICBwLnNldHVwID0gKCkgPT4ge1xuICAgICAgICBsZXQgY2FudmFzID0gcC5jcmVhdGVDYW52YXMoODAwLCA4MDAsIHAuV0VCR0wpO1xuICAgICAgICBmb3IobGV0IGk9MDsgaTxwcmltZU51bWJlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHByaW1lcy5wdXNoKCBuZXcgUHJpbWUocHJpbWVOdW1iZXJzW2ldLCBpKSApO1xuICAgICAgICB9ICBcbiAgICB9XG5cbiAgICBwLmRyYXcgPSAoKSA9PiB7XG4gICAgICAgIHAuY2FtZXJhKHAubW91c2VYIC0gcC53aWR0aC8yLDAsIDgwMCwgMCwgMCwgMCwgMCwgMSwgMCk7XG4gICAgICAgIHAuYmFja2dyb3VuZCgwKTtcbiAgICAgICAgcC5zbW9vdGgoKTtcblxuICAgICAgICBwLnRyYW5zbGF0ZSgtcC53aWR0aC8yLCBwLmhlaWdodC82LDApO1xuICAgICAgICBcbiAgICAgICAgcC5yb3RhdGVaKC1wLkhBTEZfUEkpO1xuICAgICAgICAvL3Aucm90YXRlWShwLmZyYW1lQ291bnQvMTAwMCk7XG4gICAgICAgIGZvcihsZXQgaT0wOyBpPHByaW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcC5yb3RhdGVZKHAucmFkaWFucyhpLzEwMCkpO1xuICAgICAgICAgICAgcHJpbWVzW2ldLmRyYXcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAua2V5UHJlc3NlZCA9ICgpID0+IHtcbiAgICAgICAgaWYocC5rZXkgPT0gJ20nKSB7XG4gICAgICAgICAgICBwLnNhdmUoRGF0ZS5ub3coKSArIFwiLmpwZ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IHNrZXRjaDtcbm5ldyBwNShza2V0Y2gpOyIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLCBldmFsKShcInRoaXNcIik7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file + */return function(e){t=e()}(function(){var t=function(){if(!(this instanceof t))throw new Error("constructor needs to be called with the 'new' keyword")};t.prototype.toString=function(){for(var e in t){var i=e[0].match(/^[A-Z]$/),r=t[e]===this.constructor;if(t.isFunction(t[e])&&i&&r)return e}return"Tone"},t.prototype.dispose=function(){return this},t.prototype.set=function(e,i,r){if(t.isObject(e))r=i;else if(t.isString(e)){var n={};n[e]=i,e=n}t:for(var o in e){i=e[o];var s=this;if(-1!==o.indexOf(".")){for(var a=o.split("."),h=0;hthis.memory){var r=this.length-this.memory;this._timeline.splice(0,r)}return this},t.Timeline.prototype.remove=function(t){var e=this._timeline.indexOf(t);return-1!==e&&this._timeline.splice(e,1),this},t.Timeline.prototype.get=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return-1!==r?this._timeline[r]:null},t.Timeline.prototype.peek=function(){return this._timeline[0]},t.Timeline.prototype.shift=function(){return this._timeline.shift()},t.Timeline.prototype.getAfter=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return r+10&&this._timeline[r-1][i]=0?this._timeline[n-1]:null},t.Timeline.prototype.cancel=function(t){if(this._timeline.length>1){var e=this._search(t);if(e>=0)if(this._timeline[e].time===t){for(var i=e;i>=0&&this._timeline[i].time===t;i--)e=i;this._timeline=this._timeline.slice(0,e)}else this._timeline=this._timeline.slice(0,e+1);else this._timeline=[]}else 1===this._timeline.length&&this._timeline[0].time>=t&&(this._timeline=[]);return this},t.Timeline.prototype.cancelBefore=function(t){var e=this._search(t);return e>=0&&(this._timeline=this._timeline.slice(e+1)),this},t.Timeline.prototype.previousEvent=function(t){var e=this._timeline.indexOf(t);return e>0?this._timeline[e-1]:null},t.Timeline.prototype._search=function(e,i){if(0===this._timeline.length)return-1;i=t.defaultArg(i,"time");var r=0,n=this._timeline.length,o=n;if(n>0&&this._timeline[n-1][i]<=e)return n-1;for(;re)return s;a[i]>e?o=s:r=s+1}return-1},t.Timeline.prototype._iterate=function(e,i,r){i=t.defaultArg(i,0),r=t.defaultArg(r,this._timeline.length-1),this._timeline.slice(i,r+1).forEach(function(t){e.call(this,t)}.bind(this))},t.Timeline.prototype.forEach=function(t){return this._iterate(t),this},t.Timeline.prototype.forEachBefore=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(e,0,i),this},t.Timeline.prototype.forEachAfter=function(t,e){var i=this._search(t);return this._iterate(e,i+1),this},t.Timeline.prototype.forEachBetween=function(t,e,i){var r=this._search(t),n=this._search(e);return-1!==r&&-1!==n?(this._timeline[r].time!==t&&(r+=1),this._timeline[n].time===e&&(n-=1),this._iterate(i,r,n)):-1===r&&this._iterate(i,0,n),this},t.Timeline.prototype.forEachFrom=function(t,e){for(var i=this._search(t);i>=0&&this._timeline[i].time>=t;)i--;return this._iterate(e,i+1),this},t.Timeline.prototype.forEachAtTime=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(function(i){i.time===t&&e.call(this,i)},0,i),this},t.Timeline.prototype.dispose=function(){return t.prototype.dispose.call(this),this._timeline=null,this},t.Timeline}),e(function(t){t.supported&&(!window.hasOwnProperty("OfflineAudioContext")&&window.hasOwnProperty("webkitOfflineAudioContext")&&(window.OfflineAudioContext=window.webkitOfflineAudioContext),new OfflineAudioContext(1,1,44100).startRendering()instanceof Promise||(OfflineAudioContext.prototype._native_startRendering=OfflineAudioContext.prototype.startRendering,OfflineAudioContext.prototype.startRendering=function(){return new Promise(function(t){this.oncomplete=function(e){t(e.renderedBuffer)},this._native_startRendering()}.bind(this))}))}),e(function(t){if(t.supported){!window.hasOwnProperty("AudioContext")&&window.hasOwnProperty("webkitAudioContext")&&(window.AudioContext=window.webkitAudioContext),AudioContext.prototype.close||(AudioContext.prototype.close=function(){return t.isFunction(this.suspend)&&this.suspend(),Promise.resolve()}),AudioContext.prototype.resume||(AudioContext.prototype.resume=function(){return Promise.resolve()}),!AudioContext.prototype.createGain&&AudioContext.prototype.createGainNode&&(AudioContext.prototype.createGain=AudioContext.prototype.createGainNode),!AudioContext.prototype.createDelay&&AudioContext.prototype.createDelayNode&&(AudioContext.prototype.createDelay=AudioContext.prototype.createDelayNode);var e=!1,i=new OfflineAudioContext(1,1,44100),r=new Uint32Array([1179011410,48,1163280727,544501094,16,131073,44100,176400,1048580,1635017060,8,0,0,0,0]).buffer;try{i.decodeAudioData(r)instanceof Promise&&(e=!0)}catch(t){e=!1}e||(AudioContext.prototype._native_decodeAudioData=AudioContext.prototype.decodeAudioData,AudioContext.prototype.decodeAudioData=function(t){return new Promise(function(e,i){this._native_decodeAudioData(t,e,i)}.bind(this))})}}),e(function(t){t.Context=function(){t.Emitter.call(this);var i=t.defaults(arguments,["context"],t.Context);if(!i.context&&(i.context=new window.AudioContext,!i.context))throw new Error("could not create AudioContext. Possibly too many AudioContexts running already.");for(var r in this._context=i.context,this._context)this._defineProperty(this._context,r);this._latencyHint=i.latencyHint,this._constants={},this.lookAhead=i.lookAhead,this._computedUpdateInterval=0,this._ticker=new e(this.emit.bind(this,"tick"),i.clockSource,i.updateInterval),this._timeouts=new t.Timeline,this._timeoutIds=0,this.on("tick",this._timeoutLoop.bind(this))},t.extend(t.Context,t.Emitter),t.Emitter.mixin(t.Context),t.Context.defaults={clockSource:"worker",latencyHint:"interactive",lookAhead:.1,updateInterval:.03},t.Context.prototype._defineProperty=function(e,i){t.isUndef(this[i])&&Object.defineProperty(this,i,{get:function(){return"function"==typeof e[i]?e[i].bind(e):e[i]},set:function(t){e[i]=t}})},t.Context.prototype.now=function(){return this._context.currentTime+this.lookAhead},t.Context.prototype.ready=function(){return new Promise(function(t){"running"===this._context.state?t():this._context.resume().then(function(){t()})}.bind(this))},t.Context.prototype.close=function(){return this._context.close().then(function(){t.Context.emit("close",this)}.bind(this))},t.Context.prototype.getConstant=function(t){if(this._constants[t])return this._constants[t];for(var e=this._context.createBuffer(1,128,this._context.sampleRate),i=e.getChannelData(0),r=0;r1&&(this.input=new Array(t)),1===e?this.output=this.context.createGain():e>1&&(this.output=new Array(e))},Object.defineProperty(t.AudioNode.prototype,"channelCount",{get:function(){return this.output.channelCount},set:function(t){return this.output.channelCount=t}}),Object.defineProperty(t.AudioNode.prototype,"channelCountMode",{get:function(){return this.output.channelCountMode},set:function(t){return this.output.channelCountMode=t}}),Object.defineProperty(t.AudioNode.prototype,"channelInterpretation",{get:function(){return this.output.channelInterpretation},set:function(t){return this.output.channelInterpretation=t}}),Object.defineProperty(t.AudioNode.prototype,"numberOfInputs",{get:function(){return this.input?t.isArray(this.input)?this.input.length:1:0}}),Object.defineProperty(t.AudioNode.prototype,"numberOfOutputs",{get:function(){return this.output?t.isArray(this.output)?this.output.length:1:0}}),t.AudioNode.prototype._onConnect=function(){},t.AudioNode.prototype.connect=function(e,i,r){return e._onConnect&&e._onConnect(this),t.isArray(this.output)?(i=t.defaultArg(i,0),this.output[i].connect(e,0,r)):this.output.connect(e,i,r),this},t.AudioNode.prototype.disconnect=function(e,i,r){t.isArray(this.output)?t.isNumber(e)?this.output[e].disconnect():(i=t.defaultArg(i,0),this.output[i].disconnect(e,0,r)):this.output.disconnect.apply(this.output,arguments)},t.AudioNode.prototype.chain=function(){for(var t=this,e=0;e3&&(r=parseFloat(parseFloat(r).toFixed(3))),[i,e,r].join(":")},t.Time.prototype.toTicks=function(){var t=this._beatsToUnits(1),e=this.valueOf()/t;return Math.round(e*this._getPPQ())},t.Time.prototype.toSeconds=function(){return this.valueOf()},t.Time.prototype.toMidi=function(){return t.Frequency.ftom(this.toFrequency())},t.Time}),e(function(t){return t.TransportTime=function(e,i){if(!(this instanceof t.TransportTime))return new t.TransportTime(e,i);t.Time.call(this,e,i)},t.extend(t.TransportTime,t.Time),t.TransportTime.prototype._now=function(){return t.Transport.seconds},t.TransportTime}),e(function(t){return t.Type={Default:"number",Time:"time",Frequency:"frequency",TransportTime:"transportTime",Ticks:"ticks",NormalRange:"normalRange",AudioRange:"audioRange",Decibels:"db",Interval:"interval",BPM:"bpm",Positive:"positive",Gain:"gain",Cents:"cents",Degrees:"degrees",MIDI:"midi",BarsBeatsSixteenths:"barsBeatsSixteenths",Samples:"samples",Hertz:"hertz",Note:"note",Milliseconds:"milliseconds",Seconds:"seconds",Notation:"notation"},t.prototype.toSeconds=function(e){return t.isNumber(e)?e:t.isUndef(e)?this.now():t.isString(e)?new t.Time(e).toSeconds():e instanceof t.TimeBase?e.toSeconds():void 0},t.prototype.toFrequency=function(e){return t.isNumber(e)?e:t.isString(e)||t.isUndef(e)?new t.Frequency(e).valueOf():e instanceof t.TimeBase?e.toFrequency():void 0},t.prototype.toTicks=function(e){return t.isNumber(e)||t.isString(e)?new t.TransportTime(e).toTicks():t.isUndef(e)?t.Transport.ticks:e instanceof t.TimeBase?e.toTicks():void 0},t}),e(function(t){return t.Param=function(){var e=t.defaults(arguments,["param","units","convert"],t.Param);t.AudioNode.call(this),this._param=this.input=e.param,this.units=e.units,this.convert=e.convert,this.overridden=!1,this._events=new t.Timeline(1e3),t.isDefined(e.value)&&this._param&&(this.value=e.value)},t.extend(t.Param,t.AudioNode),t.Param.defaults={units:t.Type.Default,convert:!0,param:void 0},Object.defineProperty(t.Param.prototype,"value",{get:function(){var t=this.now();return this._toUnits(this.getValueAtTime(t))},set:function(t){this._initialValue=this._fromUnits(t),this.cancelScheduledValues(this.context.currentTime),this.setValueAtTime(t,this.context.currentTime)}}),Object.defineProperty(t.Param.prototype,"minValue",{get:function(){return this.units===t.Type.Time||this.units===t.Type.Frequency||this.units===t.Type.NormalRange||this.units===t.Type.Positive||this.units===t.Type.BPM?0:this.units===t.Type.AudioRange?-1:this.units===t.Type.Decibels?-1/0:this._param.minValue}}),Object.defineProperty(t.Param.prototype,"maxValue",{get:function(){return this.units===t.Type.NormalRange||this.units===t.Type.AudioRange?1:this._param.maxValue}}),t.Param.prototype._fromUnits=function(e){if(!this.convert&&!t.isUndef(this.convert)||this.overridden)return e;switch(this.units){case t.Type.Time:return this.toSeconds(e);case t.Type.Frequency:return this.toFrequency(e);case t.Type.Decibels:return t.dbToGain(e);case t.Type.NormalRange:return Math.min(Math.max(e,0),1);case t.Type.AudioRange:return Math.min(Math.max(e,-1),1);case t.Type.Positive:return Math.max(e,0);default:return e}},t.Param.prototype._toUnits=function(e){if(!this.convert&&!t.isUndef(this.convert))return e;switch(this.units){case t.Type.Decibels:return t.gainToDb(e);default:return e}},t.Param.prototype._minOutput=1e-5,t.Param.AutomationType={Linear:"linearRampToValueAtTime",Exponential:"exponentialRampToValueAtTime",Target:"setTargetAtTime",SetValue:"setValueAtTime"},t.Param.prototype.setValueAtTime=function(e,i){return i=this.toSeconds(i),e=this._fromUnits(e),this._events.add({type:t.Param.AutomationType.SetValue,value:e,time:i}),this._param.setValueAtTime(e,i),this},t.Param.prototype.getValueAtTime=function(e){e=this.toSeconds(e);var i=this._events.getAfter(e),r=this._events.get(e),n=t.defaultArg(this._initialValue,this._param.defaultValue),o=n;if(null===r)o=n;else if(r.type===t.Param.AutomationType.Target){var s,a=this._events.getBefore(r.time);s=null===a?n:a.value,o=this._exponentialApproach(r.time,s,r.value,r.constant,e)}else o=null===i?r.value:i.type===t.Param.AutomationType.Linear?this._linearInterpolate(r.time,r.value,i.time,i.value,e):i.type===t.Param.AutomationType.Exponential?this._exponentialInterpolate(r.time,r.value,i.time,i.value,e):r.value;return o},t.Param.prototype.setRampPoint=function(t){t=this.toSeconds(t);var e=this.getValueAtTime(t);return this.cancelAndHoldAtTime(t),0===e&&(e=this._minOutput),this.setValueAtTime(this._toUnits(e),t),this},t.Param.prototype.linearRampToValueAtTime=function(e,i){return e=this._fromUnits(e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Linear,value:e,time:i}),this._param.linearRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampToValueAtTime=function(e,i){return e=this._fromUnits(e),e=Math.max(this._minOutput,e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Exponential,time:i,value:e}),this._param.exponentialRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.linearRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.linearRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.targetRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialApproachValueAtTime(t,i,e),this},t.Param.prototype.exponentialApproachValueAtTime=function(t,e,i){var r=Math.log(this.toSeconds(i)+1)/Math.log(200);return e=this.toSeconds(e),this.setTargetAtTime(t,e,r)},t.Param.prototype.setTargetAtTime=function(e,i,r){if(e=this._fromUnits(e),r<=0)throw new Error("timeConstant must be greater than 0");return i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Target,value:e,time:i,constant:r}),this._param.setTargetAtTime(e,i,r),this},t.Param.prototype.setValueCurveAtTime=function(e,i,r,n){n=t.defaultArg(n,1),r=this.toSeconds(r),i=this.toSeconds(i),this.setValueAtTime(e[0]*n,i);for(var o=r/(e.length-1),s=1;s=0;)this.emit("tick"),this._currentTime+=this.blockTime;return this._context.startRendering()},t.OfflineContext.prototype.close=function(){return this._context=null,Promise.resolve()},t.OfflineContext}),e(function(t){if(t.supported){var e=navigator.userAgent.toLowerCase();e.includes("safari")&&!e.includes("chrome")&&e.includes("mobile")&&(t.OfflineContext.prototype.createBufferSource=function(){var t=this._context.createBufferSource(),e=t.start;return t.start=function(i){this.setTimeout(function(){e.call(t,i)}.bind(this),0)}.bind(this),t})}}),e(function(t){return t.Gain=function(){var e=t.defaults(arguments,["gain","units"],t.Gain);t.AudioNode.call(this),this.input=this.output=this._gainNode=this.context.createGain(),this.gain=new t.Param({param:this._gainNode.gain,units:e.units,value:e.gain,convert:e.convert}),this._readOnly("gain")},t.extend(t.Gain,t.AudioNode),t.Gain.defaults={gain:1,convert:!0},t.Gain.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._gainNode.disconnect(),this._gainNode=null,this._writable("gain"),this.gain.dispose(),this.gain=null},t.Gain}),e(function(t){if(t.supported&&!AudioContext.prototype.createConstantSource){var e=function(t){this.context=t;for(var e=t.createBuffer(1,128,t.sampleRate),i=e.getChannelData(0),r=0;r0&&(n=(1-s)/(1/n)),"linear"===this._attackCurve)this._sig.linearRampTo(i,n,e);else if("exponential"===this._attackCurve)this._sig.targetRampTo(i,n,e);else if(n>0){this._sig.cancelAndHoldAtTime(e);var a=this._attackCurve;if(n0){var r=this.toSeconds(this.release);if("linear"===this._releaseCurve)this._sig.linearRampTo(0,r,e);else if("exponential"===this._releaseCurve)this._sig.targetRampTo(0,r,e);else{var n=this._releaseCurve;t.isArray(n)&&(this._sig.cancelAndHoldAtTime(e),this._sig.setValueCurveAtTime(n,e,r,i))}}return this},t.Envelope.prototype.getValueAtTime=function(t){return this._sig.getValueAtTime(t)},t.Envelope.prototype.triggerAttackRelease=function(t,e,i){return e=this.toSeconds(e),this.triggerAttack(e,i),this.triggerRelease(e+this.toSeconds(t)),this},t.Envelope.prototype.cancel=function(t){return this._sig.cancelScheduledValues(t),this},t.Envelope.prototype.connect=t.SignalBase.prototype.connect,function(){var e,i,r=[];for(e=0;e<128;e++)r[e]=Math.sin(e/127*(Math.PI/2));var n=[];for(e=0;e<127;e++){i=e/127;var o=Math.sin(i*(2*Math.PI)*6.4-Math.PI/2)+1;n[e]=o/10+.83*i}n[127]=1;var s=[];for(e=0;e<128;e++)s[e]=Math.ceil(e/127*5)/5;var a=[];for(e=0;e<128;e++)i=e/127,a[e]=.5*(1-Math.cos(Math.PI*i));var h=[];for(e=0;e<128;e++){i=e/127;var l=4*Math.pow(i,3)+.2,u=Math.cos(l*Math.PI*2*i);h[e]=Math.abs(u*(1-i))}function c(t){for(var e=new Array(t.length),i=0;i0?a:(-n-s)/o)+i.time}return i?0===i.value?1/0:i.time+(e-i.ticks)/i.value:e/this._initialValue},t.TickSignal.prototype.ticksToTime=function(e,i){return i=this.toSeconds(i),new t.Time(this.getDurationOfTicks(e,i))},t.TickSignal.prototype.timeToTicks=function(e,i){i=this.toSeconds(i),e=this.toSeconds(e);var r=this.getTicksAtTime(i),n=this.getTicksAtTime(i+e);return new t.Ticks(n-r)},t.TickSignal}),e(function(t){return t.TimelineState=function(e){t.Timeline.call(this),this._initial=e},t.extend(t.TimelineState,t.Timeline),t.TimelineState.prototype.getValueAtTime=function(t){var e=this.get(t);return null!==e?e.state:this._initial},t.TimelineState.prototype.setStateAtTime=function(t,e){return this.add({state:t,time:e}),this},t.TimelineState.prototype.getLastState=function(t,e){e=this.toSeconds(e);for(var i=this._search(e);i>=0;i--){var r=this._timeline[i];if(r.state===t)return r}},t.TimelineState.prototype.getNextState=function(t,e){e=this.toSeconds(e);var i=this._search(e);if(-1!==i)for(var r=i;r0&&(this._tickOffset.cancel(i.time),this._state.cancel(i.time))}return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this.setTicksAtTime(0,e),this},t.TickSource.prototype.pause=function(e){return e=this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started&&this._state.setStateAtTime(t.State.Paused,e),this},t.TickSource.prototype.cancel=function(t){return t=this.toSeconds(t),this._state.cancel(t),this._tickOffset.cancel(t),this},t.TickSource.prototype.getTicksAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.ticks,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=this.frequency.getTicksAtTime(e.time)-this.frequency.getTicksAtTime(i)),n=e}.bind(this)),this._state.remove(r),o},Object.defineProperty(t.TickSource.prototype,"ticks",{get:function(){return this.getTicksAtTime(this.now())},set:function(t){this.setTicksAtTime(t,this.now())}}),Object.defineProperty(t.TickSource.prototype,"seconds",{get:function(){return this.getSecondsAtTime(this.now())},set:function(t){var e=this.now(),i=this.frequency.timeToTicks(t,e);this.setTicksAtTime(i,e)}}),t.TickSource.prototype.getSecondsAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.seconds,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=e.time-i),n=e}.bind(this)),this._state.remove(r),o},t.TickSource.prototype.setTicksAtTime=function(t,e){return e=this.toSeconds(e),this._tickOffset.cancel(e),this._tickOffset.add({time:e,ticks:t,seconds:this.frequency.getDurationOfTicks(t,e)}),this},t.TickSource.prototype.getStateAtTime=function(t){return t=this.toSeconds(t),this._state.getValueAtTime(t)},t.TickSource.prototype.getTimeOfTick=function(e,i){i=t.defaultArg(i,this.now());var r=this._tickOffset.get(i),n=this._state.get(i),o=Math.max(r.time,n.time),s=this.frequency.getTicksAtTime(o)+e-r.ticks;return this.frequency.getTimeOfTick(s)},t.TickSource.prototype.forEachTickBetween=function(e,i,r){var n=this._state.get(e);if(this._state.forEachBetween(e,i,function(i){n.state===t.State.Started&&i.state!==t.State.Started&&this.forEachTickBetween(Math.max(n.time,e),i.time-this.sampleTime,r),n=i}.bind(this)),e=Math.max(n.time,e),n.state===t.State.Started&&this._state){var o=this.frequency.getTicksAtTime(e),s=(o-this.frequency.getTicksAtTime(n.time))%1;0!==s&&(s=1-s);for(var a=this.frequency.getTimeOfTick(o+s),h=null;a0)if(null===t.left.right)(e=t.left).right=t.right,i=e;else{for(e=t.left.right;null!==e.right;)e=e.right;e.parent.right=e.left,i=e.parent,e.left=t.left,e.right=t.right}else if(null===t.right.left)(e=t.right).left=t.left,i=e;else{for(e=t.right.left;null!==e.left;)e=e.left;e.parent=e.parent,e.parent.left=e.right,i=e.parent,e.left=t.left,e.right=t.right}null!==t.parent?t.isLeftChild()?t.parent.left=e:t.parent.right=e:this._setRoot(e),this._rebalance(i)}t.dispose()},t.IntervalTimeline.prototype._rotateLeft=function(t){var e=t.parent,i=t.isLeftChild(),r=t.right;t.right=r.left,r.left=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rotateRight=function(t){var e=t.parent,i=t.isLeftChild(),r=t.left;t.left=r.right,r.right=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rebalance=function(t){var e=t.getBalance();e>1?t.left.getBalance()<0?this._rotateLeft(t.left):this._rotateRight(t):e<-1&&(t.right.getBalance()>0?this._rotateRight(t.right):this._rotateLeft(t))},t.IntervalTimeline.prototype.get=function(t){if(null!==this._root){var e=[];if(this._root.search(t,e),e.length>0){for(var i=e[0],r=1;ri.low&&(i=e[r]);return i.event}}return null},t.IntervalTimeline.prototype.forEach=function(t){if(null!==this._root){var e=[];this._root.traverse(function(t){e.push(t)});for(var i=0;i=0;r--){var n=i[r].event;n&&e(n)}}return this},t.IntervalTimeline.prototype.forEachFrom=function(t,e){if(null!==this._root){var i=[];this._root.searchAfter(t,i);for(var r=i.length-1;r>=0;r--)e(i[r].event)}return this},t.IntervalTimeline.prototype.dispose=function(){var t=[];null!==this._root&&this._root.traverse(function(e){t.push(e)});for(var e=0;ethis.max||(null!==this.left&&this.left.search(t,e),this.low<=t&&this.high>t&&e.push(this),this.low>t||null!==this.right&&this.right.search(t,e))},e.prototype.searchAfter=function(t,e){this.low>=t&&(e.push(this),null!==this.left&&this.left.searchAfter(t,e)),null!==this.right&&this.right.searchAfter(t,e)},e.prototype.traverse=function(t){t(this),null!==this.left&&this.left.traverse(t),null!==this.right&&this.right.traverse(t)},e.prototype.updateHeight=function(){null!==this.left&&null!==this.right?this.height=Math.max(this.left.height,this.right.height)+1:null!==this.right?this.height=this.right.height+1:null!==this.left?this.height=this.left.height+1:this.height=0},e.prototype.updateMax=function(){this.max=this.high,null!==this.left&&(this.max=Math.max(this.max,this.left.max)),null!==this.right&&(this.max=Math.max(this.max,this.right.max))},e.prototype.getBalance=function(){var t=0;return null!==this.left&&null!==this.right?t=this.left.height-this.right.height:null!==this.left?t=this.left.height+1:null!==this.right&&(t=-(this.right.height+1)),t},e.prototype.isLeftChild=function(){return null!==this.parent&&this.parent.left===this},Object.defineProperty(e.prototype,"left",{get:function(){return this._left},set:function(t){this._left=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),Object.defineProperty(e.prototype,"right",{get:function(){return this._right},set:function(t){this._right=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),e.prototype.dispose=function(){this.parent=null,this._left=null,this._right=null,this.event=null},t.IntervalTimeline}),e(function(t){return t.Ticks=function(e,i){if(!(this instanceof t.Ticks))return new t.Ticks(e,i);t.TransportTime.call(this,e,i)},t.extend(t.Ticks,t.TransportTime),t.Ticks.prototype._defaultUnits="i",t.Ticks.prototype._now=function(){return t.Transport.ticks},t.Ticks.prototype._beatsToUnits=function(t){return this._getPPQ()*t},t.Ticks.prototype._secondsToUnits=function(t){return t/(60/this._getBpm())*this._getPPQ()},t.Ticks.prototype._ticksToUnits=function(t){return t},t.Ticks.prototype.toTicks=function(){return this.valueOf()},t.Ticks.prototype.toSeconds=function(){return this.valueOf()/this._getPPQ()*(60/this._getBpm())},t.Ticks}),e(function(t){return t.TransportEvent=function(e,i){i=t.defaultArg(i,t.TransportEvent.defaults),t.call(this),this.Transport=e,this.id=t.TransportEvent._eventId++,this.time=t.Ticks(i.time),this.callback=i.callback,this._once=i.once},t.extend(t.TransportEvent),t.TransportEvent.defaults={once:!1,callback:t.noOp},t.TransportEvent._eventId=0,t.TransportEvent.prototype.invoke=function(t){this.callback&&(this.callback(t),this._once&&this.Transport&&this.Transport.clear(this.id))},t.TransportEvent.prototype.dispose=function(){return t.prototype.dispose.call(this),this.Transport=null,this.callback=null,this.time=null,this},t.TransportEvent}),e(function(t){return t.TransportRepeatEvent=function(e,i){t.TransportEvent.call(this,e,i),i=t.defaultArg(i,t.TransportRepeatEvent.defaults),this.duration=t.Ticks(i.duration),this._interval=t.Ticks(i.interval),this._currentId=-1,this._nextId=-1,this._nextTick=this.time,this._boundRestart=this._restart.bind(this),this.Transport.on("start loopStart",this._boundRestart),this._restart()},t.extend(t.TransportRepeatEvent,t.TransportEvent),t.TransportRepeatEvent.defaults={duration:1/0,interval:1},t.TransportRepeatEvent.prototype.invoke=function(e){this._createEvents(e),t.TransportEvent.prototype.invoke.call(this,e)},t.TransportRepeatEvent.prototype._createEvents=function(e){var i=this.Transport.getTicksAtTime(e);i>=this.time&&i>=this._nextTick&&this._nextTick+this._intervalthis.time&&(this._nextTick=this.time+Math.ceil((i-this.time)/this._interval)*this._interval),this._currentId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick)),this._nextTick+=this._interval,this._nextId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick))},t.TransportRepeatEvent.prototype.dispose=function(){return this.Transport.clear(this._currentId),this.Transport.clear(this._nextId),this.Transport.off("start loopStart",this._boundRestart),this._boundCreateEvents=null,t.TransportEvent.prototype.dispose.call(this),this.duration=null,this._interval=null,this},t.TransportRepeatEvent}),e(function(t){t.Transport=function(){t.Emitter.call(this),t.getContext(function(){this.loop=!1,this._loopStart=0,this._loopEnd=0,this._ppq=e.defaults.PPQ,this._clock=new t.Clock({callback:this._processTick.bind(this),frequency:0}),this._bindClockEvents(),this.bpm=this._clock.frequency,this.bpm._toUnits=this._toUnits.bind(this),this.bpm._fromUnits=this._fromUnits.bind(this),this.bpm.units=t.Type.BPM,this.bpm.value=e.defaults.bpm,this._readOnly("bpm"),this._timeSignature=e.defaults.timeSignature,this._scheduledEvents={},this._timeline=new t.Timeline,this._repeatedEvents=new t.IntervalTimeline,this._syncedSignals=[],this._swingTicks=e.defaults.PPQ/2,this._swingAmount=0}.bind(this))},t.extend(t.Transport,t.Emitter),t.Transport.defaults={bpm:120,swing:0,swingSubdivision:"8n",timeSignature:4,loopStart:0,loopEnd:"4m",PPQ:192},t.Transport.prototype._processTick=function(e,i){if(this._swingAmount>0&&i%this._ppq!=0&&i%(2*this._swingTicks)!=0){var r=i%(2*this._swingTicks)/(2*this._swingTicks),n=Math.sin(r*Math.PI)*this._swingAmount;e+=t.Ticks(2*this._swingTicks/3).toSeconds()*n}this.loop&&i>=this._loopEnd&&(this.emit("loopEnd",e),this._clock.setTicksAtTime(this._loopStart,e),i=this._loopStart,this.emit("loopStart",e,this._clock.getSecondsAtTime(e)),this.emit("loop",e)),this._timeline.forEachAtTime(i,function(t){t.invoke(e)})},t.Transport.prototype.schedule=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e});return this._addEvent(r,this._timeline)},t.Transport.prototype.scheduleRepeat=function(e,i,r,n){var o=new t.TransportRepeatEvent(this,{callback:e,interval:t.Time(i),time:t.TransportTime(r),duration:t.Time(t.defaultArg(n,1/0))});return this._addEvent(o,this._repeatedEvents)},t.Transport.prototype.scheduleOnce=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e,once:!0});return this._addEvent(r,this._timeline)},t.Transport.prototype.clear=function(t){if(this._scheduledEvents.hasOwnProperty(t)){var e=this._scheduledEvents[t.toString()];e.timeline.remove(e.event),e.event.dispose(),delete this._scheduledEvents[t.toString()]}return this},t.Transport.prototype._addEvent=function(t,e){return this._scheduledEvents[t.id.toString()]={event:t,timeline:e},e.add(t),t.id},t.Transport.prototype.cancel=function(e){return e=t.defaultArg(e,0),e=this.toTicks(e),this._timeline.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this._repeatedEvents.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this},t.Transport.prototype._bindClockEvents=function(){this._clock.on("start",function(e,i){i=t.Ticks(i).toSeconds(),this.emit("start",e,i)}.bind(this)),this._clock.on("stop",function(t){this.emit("stop",t)}.bind(this)),this._clock.on("pause",function(t){this.emit("pause",t)}.bind(this))},Object.defineProperty(t.Transport.prototype,"state",{get:function(){return this._clock.getStateAtTime(this.now())}}),t.Transport.prototype.start=function(e,i){return t.isDefined(i)&&(i=this.toTicks(i)),this._clock.start(e,i),this},t.Transport.prototype.stop=function(t){return this._clock.stop(t),this},t.Transport.prototype.pause=function(t){return this._clock.pause(t),this},t.Transport.prototype.toggle=function(e){return e=this.toSeconds(e),this._clock.getStateAtTime(e)!==t.State.Started?this.start(e):this.stop(e),this},Object.defineProperty(t.Transport.prototype,"timeSignature",{get:function(){return this._timeSignature},set:function(e){t.isArray(e)&&(e=e[0]/e[1]*4),this._timeSignature=e}}),Object.defineProperty(t.Transport.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t)}}),t.Transport.prototype.setLoopPoints=function(t,e){return this.loopStart=t,this.loopEnd=e,this},Object.defineProperty(t.Transport.prototype,"swing",{get:function(){return this._swingAmount},set:function(t){this._swingAmount=t}}),Object.defineProperty(t.Transport.prototype,"swingSubdivision",{get:function(){return t.Ticks(this._swingTicks).toNotation()},set:function(t){this._swingTicks=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"position",{get:function(){var e=this.now(),i=this._clock.getTicksAtTime(e);return t.Ticks(i).toBarsBeatsSixteenths()},set:function(t){var e=this.toTicks(t);this.ticks=e}}),Object.defineProperty(t.Transport.prototype,"seconds",{get:function(){return this._clock.seconds},set:function(t){var e=this.now(),i=this.bpm.timeToTicks(t,e);this.ticks=i}}),Object.defineProperty(t.Transport.prototype,"progress",{get:function(){if(this.loop){var t=this.now();return(this._clock.getTicksAtTime(t)-this._loopStart)/(this._loopEnd-this._loopStart)}return 0}}),Object.defineProperty(t.Transport.prototype,"ticks",{get:function(){return this._clock.ticks},set:function(e){if(this._clock.ticks!==e){var i=this.now();this.state===t.State.Started?(this.emit("stop",i),this._clock.setTicksAtTime(e,i),this.emit("start",i,this.seconds)):this._clock.setTicksAtTime(e,i)}}}),t.Transport.prototype.getTicksAtTime=function(t){return Math.round(this._clock.getTicksAtTime(t))},t.Transport.prototype.getSecondsAtTime=function(t){return this._clock.getSecondsAtTime(t)},Object.defineProperty(t.Transport.prototype,"PPQ",{get:function(){return this._ppq},set:function(t){var e=this.bpm.value;this._ppq=t,this.bpm.value=e}}),t.Transport.prototype._fromUnits=function(t){return 1/(60/t/this.PPQ)},t.Transport.prototype._toUnits=function(t){return t/this.PPQ*60},t.Transport.prototype.nextSubdivision=function(e){if(e=this.toTicks(e),this.state!==t.State.Started)return 0;var i=this.now(),r=e-this.getTicksAtTime(i)%e;return this._clock.nextTickTime(r,i)},t.Transport.prototype.syncSignal=function(e,i){if(!i){var r=this.now();i=0!==e.getValueAtTime(r)?e.getValueAtTime(r)/this.bpm.getValueAtTime(r):0}var n=new t.Gain(i);return this.bpm.chain(n,e._param),this._syncedSignals.push({ratio:n,signal:e,initial:e.value}),e.value=0,this},t.Transport.prototype.unsyncSignal=function(t){for(var e=this._syncedSignals.length-1;e>=0;e--){var i=this._syncedSignals[e];i.signal===t&&(i.ratio.dispose(),i.signal.value=i.initial,this._syncedSignals.splice(e,1))}return this},t.Transport.prototype.dispose=function(){return t.Emitter.prototype.dispose.call(this),this._clock.dispose(),this._clock=null,this._writable("bpm"),this.bpm=null,this._timeline.dispose(),this._timeline=null,this._repeatedEvents.dispose(),this._repeatedEvents=null,this};var e=t.Transport;return t.Transport=new e,t.Context.on("init",function(i){i.Transport instanceof e?t.Transport=i.Transport:t.Transport=new e,i.Transport=t.Transport}),t.Context.on("close",function(t){t.Transport instanceof e&&t.Transport.dispose()}),t.Transport}),e(function(t){return t.Volume=function(){var e=t.defaults(arguments,["volume"],t.Volume);t.AudioNode.call(this),this.output=this.input=new t.Gain(e.volume,t.Type.Decibels),this._unmutedVolume=e.volume,this.volume=this.output.gain,this._readOnly("volume"),this.mute=e.mute},t.extend(t.Volume,t.AudioNode),t.Volume.defaults={volume:0,mute:!1},Object.defineProperty(t.Volume.prototype,"mute",{get:function(){return this.volume.value===-1/0},set:function(t){!this.mute&&t?(this._unmutedVolume=this.volume.value,this.volume.value=-1/0):this.mute&&!t&&(this.volume.value=this._unmutedVolume)}}),t.Volume.prototype.dispose=function(){return this.input.dispose(),t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this.volume.dispose(),this.volume=null,this},t.Volume}),e(function(t){t.Master=function(){t.AudioNode.call(this),t.getContext(function(){this.createInsOuts(1,0),this._volume=this.output=new t.Volume,this.volume=this._volume.volume,this._readOnly("volume"),this.input.chain(this.output,this.context.destination)}.bind(this))},t.extend(t.Master,t.AudioNode),t.Master.defaults={volume:0,mute:!1},Object.defineProperty(t.Master.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Master.prototype.chain=function(){this.input.disconnect(),this.input.chain.apply(this.input,arguments),arguments[arguments.length-1].connect(this.output)},t.Master.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null},t.AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this},window.AudioNode&&(AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this});var e=t.Master;return t.Master=new e,t.Context.on("init",function(i){i.Master instanceof e?t.Master=i.Master:t.Master=new e,i.Master=t.Master}),t.Context.on("close",function(t){t.Master instanceof e&&t.Master.dispose()}),t.Master}),e(function(t){return t.Source=function(e){e=t.defaultArg(e,t.Source.defaults),t.AudioNode.call(this),this._volume=this.output=new t.Volume(e.volume),this.volume=this._volume.volume,this._readOnly("volume"),this._state=new t.TimelineState(t.State.Stopped),this._state.memory=100,this._synced=!1,this._scheduled=[],this._volume.output.output.channelCount=2,this._volume.output.output.channelCountMode="explicit",this.mute=e.mute},t.extend(t.Source,t.AudioNode),t.Source.defaults={volume:0,mute:!1},Object.defineProperty(t.Source.prototype,"state",{get:function(){return this._synced?t.Transport.state===t.State.Started?this._state.getValueAtTime(t.Transport.seconds):t.State.Stopped:this._state.getValueAtTime(this.now())}}),Object.defineProperty(t.Source.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Source.prototype._start=t.noOp,t.Source.prototype.restart=t.noOp,t.Source.prototype._stop=t.noOp,t.Source.prototype.start=function(e,i,r){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started)this._state.cancel(e),this._state.setStateAtTime(t.State.Started,e),this.restart(e,i,r);else if(this._state.setStateAtTime(t.State.Started,e),this._synced){var n=this._state.get(e);n.offset=t.defaultArg(i,0),n.duration=r;var o=t.Transport.schedule(function(t){this._start(t,i,r)}.bind(this),e);this._scheduled.push(o),t.Transport.state===t.State.Started&&this._syncedStart(this.now(),t.Transport.seconds)}else this._start.apply(this,arguments);return this},t.Source.prototype.stop=function(e){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._synced){var i=t.Transport.schedule(this._stop.bind(this),e);this._scheduled.push(i)}else this._stop.apply(this,arguments);return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this},t.Source.prototype.sync=function(){return this._synced=!0,this._syncedStart=function(e,i){if(i>0){var r=this._state.get(i);if(r&&r.state===t.State.Started&&r.time!==i){var n,o=i-this.toSeconds(r.time);r.duration&&(n=this.toSeconds(r.duration)-o),this._start(e,this.toSeconds(r.offset)+o,n)}}}.bind(this),this._syncedStop=function(e){var i=t.Transport.getSecondsAtTime(Math.max(e-this.sampleTime,0));this._state.getValueAtTime(i)===t.State.Started&&this._stop(e)}.bind(this),t.Transport.on("start loopStart",this._syncedStart),t.Transport.on("stop pause loopEnd",this._syncedStop),this},t.Source.prototype.unsync=function(){this._synced&&(t.Transport.off("stop pause loopEnd",this._syncedStop),t.Transport.off("start loopStart",this._syncedStart)),this._synced=!1;for(var e=0;e0}}),Object.defineProperty(t.Buffer.prototype,"duration",{get:function(){return this._buffer?this._buffer.duration:0}}),Object.defineProperty(t.Buffer.prototype,"length",{get:function(){return this._buffer?this._buffer.length:0}}),Object.defineProperty(t.Buffer.prototype,"numberOfChannels",{get:function(){return this._buffer?this._buffer.numberOfChannels:0}}),t.Buffer.prototype.fromArray=function(t){var e=t[0].length>0,i=e?t.length:1,r=e?t[0].length:t.length,n=this.context.createBuffer(i,r,this.context.sampleRate);e||1!==i||(t=[t]);for(var o=0;o=this._startTime&&(-1===this._stopTime||e<=this._stopTime)?t.State.Started:t.State.Stopped},t.OscillatorNode.prototype.start=function(t){if(-1!==this._startTime)throw new Error("cannot call OscillatorNode.start more than once");this._startTime=this.toSeconds(t),this._oscillator.start(this._startTime);var e=this.context.currentTime;return this._gainNode.gain.cancelScheduledValues(e),this._gainNode.gain.setValueAtTime(0,e),this._gainNode.gain.setValueAtTime(1,this._startTime),this},t.OscillatorNode.prototype.setPeriodicWave=function(t){return this._oscillator.setPeriodicWave(t),this},t.OscillatorNode.prototype.stop=function(t){return this.cancelStop(),this._stopTime=this.toSeconds(t),this._gainNode.gain.setValueAtTime(0,this._stopTime),this.context.clearTimeout(this._timeout),this._timeout=this.context.setTimeout(function(){this._oscillator.stop(this.now()),this.onended()}.bind(this),this._stopTime-this.now()),this},t.OscillatorNode.prototype.cancelStop=function(){return-1!==this._startTime&&(this._gainNode.gain.cancelScheduledValues(this._startTime+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime)),this.context.clearTimeout(this._timeout),this._stopTime=-1),this},Object.defineProperty(t.OscillatorNode.prototype,"type",{get:function(){return this._oscillator.type},set:function(t){this._oscillator.type=t}}),t.OscillatorNode.prototype.dispose=function(){return this.context.clearTimeout(this._timeout),t.AudioNode.prototype.dispose.call(this),this.onended=null,this._oscillator.disconnect(),this._oscillator=null,this._gainNode.dispose(),this._gainNode=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this},t.OscillatorNode}),e(function(t){return t.Oscillator=function(){var e=t.defaults(arguments,["frequency","type"],t.Oscillator);t.Source.call(this,e),this._oscillator=null,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this._wave=null,this._partials=t.defaultArg(e.partials,[1]),this._phase=e.phase,this._type=null,this.type=e.type,this.phase=this._phase,this._readOnly(["frequency","detune"])},t.extend(t.Oscillator,t.Source),t.Oscillator.defaults={type:"sine",frequency:440,detune:0,phase:0,partials:[]},t.Oscillator.Type={Sine:"sine",Triangle:"triangle",Sawtooth:"sawtooth",Square:"square",Custom:"custom"},t.Oscillator.prototype._start=function(e){this._oscillator=new t.OscillatorNode,this._wave?this._oscillator.setPeriodicWave(this._wave):this._oscillator.type=this._type,this._oscillator.connect(this.output),this.frequency.connect(this._oscillator.frequency),this.detune.connect(this._oscillator.detune),e=this.toSeconds(e),this._oscillator.start(e)},t.Oscillator.prototype._stop=function(t){return this._oscillator&&(t=this.toSeconds(t),this._oscillator.stop(t)),this},t.Oscillator.prototype.restart=function(t){return this._oscillator.cancelStop(),this._state.cancel(this.toSeconds(t)),this},t.Oscillator.prototype.syncFrequency=function(){return t.Transport.syncSignal(this.frequency),this},t.Oscillator.prototype.unsyncFrequency=function(){return t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Oscillator.prototype,"type",{get:function(){return this._type},set:function(e){var i=[t.Oscillator.Type.Sine,t.Oscillator.Type.Square,t.Oscillator.Type.Triangle,t.Oscillator.Type.Sawtooth].includes(e);if(0===this._phase&&i)this._wave=null,null!==this._oscillator&&this._oscillator.type;else{var r=this._getRealImaginary(e,this._phase),n=this.context.createPeriodicWave(r[0],r[1]);this._wave=n,null!==this._oscillator&&this._oscillator.setPeriodicWave(this._wave)}this._type=e}}),t.Oscillator.prototype._getRealImaginary=function(e,i){var r=2048,n=new Float32Array(r),o=new Float32Array(r),s=1;if(e===t.Oscillator.Type.Custom)r=s=this._partials.length+1;else{var a=/^(sine|triangle|square|sawtooth)(\d+)$/.exec(e);a&&(s=parseInt(a[2])+1,e=a[1],r=s=Math.max(s,2))}for(var h=1;h>1&1?-1:1):0;break;case t.Oscillator.Type.Custom:l=this._partials[h-1];break;default:throw new TypeError("Tone.Oscillator: invalid type: "+e)}0!==l?(n[h]=-l*Math.sin(i*h),o[h]=l*Math.cos(i*h)):(n[h]=0,o[h]=0)}return[n,o]},t.Oscillator.prototype._inverseFFT=function(t,e,i){for(var r=0,n=t.length,o=0;on&&r=this.values.length&&(this.index=0)):e===t.CtrlPattern.Type.Down?(this.index--,this.index<0&&(this.index=this.values.length-1)):e===t.CtrlPattern.Type.UpDown||e===t.CtrlPattern.Type.DownUp?(this._direction===t.CtrlPattern.Type.Up?this.index++:this.index--,this.index<0?(this.index=1,this._direction=t.CtrlPattern.Type.Up):this.index>=this.values.length&&(this.index=this.values.length-2,this._direction=t.CtrlPattern.Type.Down)):e===t.CtrlPattern.Type.Random?this.index=Math.floor(Math.random()*this.values.length):e===t.CtrlPattern.Type.RandomWalk?Math.random()<.5?(this.index--,this.index=Math.max(this.index,0)):(this.index++,this.index=Math.min(this.index,this.values.length-1)):e===t.CtrlPattern.Type.RandomOnce?(this.index++,this.index>=this.values.length&&(this.index=0,this._shuffleValues())):e===t.CtrlPattern.Type.AlternateUp?(this._direction===t.CtrlPattern.Type.Up?(this.index+=2,this._direction=t.CtrlPattern.Type.Down):(this.index-=1,this._direction=t.CtrlPattern.Type.Up),this.index>=this.values.length&&(this.index=0,this._direction=t.CtrlPattern.Type.Up)):e===t.CtrlPattern.Type.AlternateDown&&(this._direction===t.CtrlPattern.Type.Up?(this.index+=1,this._direction=t.CtrlPattern.Type.Down):(this.index-=2,this._direction=t.CtrlPattern.Type.Up),this.index<0&&(this.index=this.values.length-1,this._direction=t.CtrlPattern.Type.Down)),this.value},t.CtrlPattern.prototype._shuffleValues=function(){var t=[];this._shuffled=[];for(var e=0;e0;){var i=t.splice(Math.floor(t.length*Math.random()),1);this._shuffled.push(i[0])}},t.CtrlPattern.prototype.dispose=function(){this._shuffled=null,this.values=null},t.CtrlPattern}),e(function(t){return t.CtrlRandom=function(){var e=t.defaults(arguments,["min","max"],t.CtrlRandom);t.call(this),this.min=e.min,this.max=e.max,this.integer=e.integer},t.extend(t.CtrlRandom),t.CtrlRandom.defaults={min:0,max:1,integer:!1},Object.defineProperty(t.CtrlRandom.prototype,"value",{get:function(){var t=this.toSeconds(this.min),e=this.toSeconds(this.max),i=Math.random(),r=i*t+(1-i)*e;return this.integer&&(r=Math.floor(r)),r}}),t.CtrlRandom}),e(function(t){return t.Buffers=function(e){var i=Array.prototype.slice.call(arguments);i.shift();var r=t.defaults(i,["onload","baseUrl"],t.Buffers);for(var n in t.call(this),this._buffers={},this.baseUrl=r.baseUrl,this._loadingCount=0,e)this._loadingCount++,this.add(n,e[n],this._bufferLoaded.bind(this,r.onload))},t.extend(t.Buffers),t.Buffers.defaults={onload:t.noOp,baseUrl:""},t.Buffers.prototype.has=function(t){return this._buffers.hasOwnProperty(t)},t.Buffers.prototype.get=function(t){if(this.has(t))return this._buffers[t];throw new Error("Tone.Buffers: no buffer named "+t)},t.Buffers.prototype._bufferLoaded=function(t){this._loadingCount--,0===this._loadingCount&&t&&t(this)},Object.defineProperty(t.Buffers.prototype,"loaded",{get:function(){var t=!0;for(var e in this._buffers){var i=this.get(e);t=t&&i.loaded}return t}}),t.Buffers.prototype.add=function(e,i,r){return r=t.defaultArg(r,t.noOp),i instanceof t.Buffer?(this._buffers[e]=i,r(this)):i instanceof AudioBuffer?(this._buffers[e]=new t.Buffer(i),r(this)):t.isString(i)&&(this._buffers[e]=new t.Buffer(this.baseUrl+i,r)),this},t.Buffers.prototype.dispose=function(){for(var e in t.prototype.dispose.call(this),this._buffers)this._buffers[e].dispose();return this._buffers=null,this},t.Buffers}),e(function(t){var e={};return t.prototype.send=function(i,r){e.hasOwnProperty(i)||(e[i]=this.context.createGain()),r=t.defaultArg(r,0);var n=new t.Gain(r,t.Type.Decibels);return this.connect(n),n.connect(e[i]),n},t.prototype.receive=function(t,i){return e.hasOwnProperty(t)||(e[t]=this.context.createGain()),e[t].connect(this,0,i),this},t.Context.on("init",function(t){t.Buses?e=t.Buses:(e={},t.Buses=e)}),t}),e(function(t){return t.Draw=function(){t.call(this),this._events=new t.Timeline,this.expiration=.25,this.anticipation=.008,this._boundDrawLoop=this._drawLoop.bind(this)},t.extend(t.Draw),t.Draw.prototype.schedule=function(t,e){return this._events.add({callback:t,time:this.toSeconds(e)}),1===this._events.length&&requestAnimationFrame(this._boundDrawLoop),this},t.Draw.prototype.cancel=function(t){return this._events.cancel(this.toSeconds(t)),this},t.Draw.prototype._drawLoop=function(){for(var e=t.now();this._events.length&&this._events.peek().time-this.anticipation<=e;){var i=this._events.shift();e-i.time<=this.expiration&&i.callback()}this._events.length>0&&requestAnimationFrame(this._boundDrawLoop)},t.Draw=new t.Draw,t.Draw}),e(function(t){t.Listener=function(){t.call(this),this._orientation=[0,0,0,0,0,0],this._position=[0,0,0],t.getContext(function(){this.set(e.defaults)}.bind(this))},t.extend(t.Listener),t.Listener.defaults={positionX:0,positionY:0,positionZ:0,forwardX:0,forwardY:0,forwardZ:1,upX:0,upY:1,upZ:0},t.Listener.prototype._rampTimeConstant=.01,t.Listener.prototype.setPosition=function(t,e,i){if(this.context.listener.positionX){var r=this.now();this.context.listener.positionX.setTargetAtTime(t,r,this._rampTimeConstant),this.context.listener.positionY.setTargetAtTime(e,r,this._rampTimeConstant),this.context.listener.positionZ.setTargetAtTime(i,r,this._rampTimeConstant)}else this.context.listener.setPosition(t,e,i);return this._position=Array.prototype.slice.call(arguments),this},t.Listener.prototype.setOrientation=function(t,e,i,r,n,o){if(this.context.listener.forwardX){var s=this.now();this.context.listener.forwardX.setTargetAtTime(t,s,this._rampTimeConstant),this.context.listener.forwardY.setTargetAtTime(e,s,this._rampTimeConstant),this.context.listener.forwardZ.setTargetAtTime(i,s,this._rampTimeConstant),this.context.listener.upX.setTargetAtTime(r,s,this._rampTimeConstant),this.context.listener.upY.setTargetAtTime(n,s,this._rampTimeConstant),this.context.listener.upZ.setTargetAtTime(o,s,this._rampTimeConstant)}else this.context.listener.setOrientation(t,e,i,r,n,o);return this._orientation=Array.prototype.slice.call(arguments),this},Object.defineProperty(t.Listener.prototype,"positionX",{set:function(t){this._position[0]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[0]}}),Object.defineProperty(t.Listener.prototype,"positionY",{set:function(t){this._position[1]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[1]}}),Object.defineProperty(t.Listener.prototype,"positionZ",{set:function(t){this._position[2]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[2]}}),Object.defineProperty(t.Listener.prototype,"forwardX",{set:function(t){this._orientation[0]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[0]}}),Object.defineProperty(t.Listener.prototype,"forwardY",{set:function(t){this._orientation[1]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[1]}}),Object.defineProperty(t.Listener.prototype,"forwardZ",{set:function(t){this._orientation[2]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[2]}}),Object.defineProperty(t.Listener.prototype,"upX",{set:function(t){this._orientation[3]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[3]}}),Object.defineProperty(t.Listener.prototype,"upY",{set:function(t){this._orientation[4]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[4]}}),Object.defineProperty(t.Listener.prototype,"upZ",{set:function(t){this._orientation[5]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[5]}}),t.Listener.prototype.dispose=function(){return this._orientation=null,this._position=null,this};var e=t.Listener;return t.Listener=new e,t.Context.on("init",function(i){i.Listener instanceof e?t.Listener=i.Listener:t.Listener=new e,i.Listener=t.Listener}),t.Listener}),e(function(t){return t.Offline=function(e,i){var r,n=t.context.sampleRate,o=t.context,s=function e(i,r,n,o){o=t.defaultArg(o,0);var s=new t.OfflineContext(2,r,n);t.context=s;var a=i(t.Transport);return s.currentTime>0&&o<1e3?e(i,r,n,++o):{response:a,context:s}}(e,i,n),a=s.response,h=s.context;return r=a instanceof Promise?a.then(function(){return h.render()}):h.render(),t.context=o,r.then(function(e){return new t.Buffer(e)})},t.Offline}),e(function(t){return t.Effect=function(){var e=t.defaults(arguments,["wet"],t.Effect);t.AudioNode.call(this),this.createInsOuts(1,1),this._dryWet=new t.CrossFade(e.wet),this.wet=this._dryWet.fade,this.effectSend=new t.Gain,this.effectReturn=new t.Gain,this.input.connect(this._dryWet.a),this.input.connect(this.effectSend),this.effectReturn.connect(this._dryWet.b),this._dryWet.connect(this.output),this._readOnly(["wet"])},t.extend(t.Effect,t.AudioNode),t.Effect.defaults={wet:1},t.Effect.prototype.connectEffect=function(t){return this.effectSend.chain(t,this.effectReturn),this},t.Effect.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this._dryWet.dispose(),this._dryWet=null,this.effectSend.dispose(),this.effectSend=null,this.effectReturn.dispose(),this.effectReturn=null,this._writable(["wet"]),this.wet=null,this},t.Effect}),e(function(t){return t.AutoFilter=function(){var e=t.defaults(arguments,["frequency","baseFrequency","octaves"],t.AutoFilter);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth}),this.depth=this._lfo.amplitude,this.frequency=this._lfo.frequency,this.filter=new t.Filter(e.filter),this._octaves=0,this.connectEffect(this.filter),this._lfo.connect(this.filter.frequency),this.type=e.type,this._readOnly(["frequency","depth"]),this.octaves=e.octaves,this.baseFrequency=e.baseFrequency},t.extend(t.AutoFilter,t.Effect),t.AutoFilter.defaults={frequency:1,type:"sine",depth:1,baseFrequency:200,octaves:2.6,filter:{type:"lowpass",rolloff:-12,Q:1}},t.AutoFilter.prototype.start=function(t){return this._lfo.start(t),this},t.AutoFilter.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoFilter.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoFilter.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoFilter.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),Object.defineProperty(t.AutoFilter.prototype,"baseFrequency",{get:function(){return this._lfo.min},set:function(t){this._lfo.min=this.toFrequency(t),this.octaves=this._octaves}}),Object.defineProperty(t.AutoFilter.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._lfo.max=this.baseFrequency*Math.pow(2,t)}}),t.AutoFilter.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this.filter.dispose(),this.filter=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null,this},t.AutoFilter}),e(function(t){return t.AutoPanner=function(){var e=t.defaults(arguments,["frequency"],t.AutoPanner);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth,min:-1,max:1}),this.depth=this._lfo.amplitude,this._panner=new t.Panner,this.frequency=this._lfo.frequency,this.connectEffect(this._panner),this._lfo.connect(this._panner.pan),this.type=e.type,this._readOnly(["depth","frequency"])},t.extend(t.AutoPanner,t.Effect),t.AutoPanner.defaults={frequency:1,type:"sine",depth:1},t.AutoPanner.prototype.start=function(t){return this._lfo.start(t),this},t.AutoPanner.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoPanner.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoPanner.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoPanner.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.AutoPanner.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this._panner.dispose(),this._panner=null,this._writable(["depth","frequency"]),this.frequency=null,this.depth=null,this},t.AutoPanner}),e(function(t){return t.AutoWah=function(){var e=t.defaults(arguments,["baseFrequency","octaves","sensitivity"],t.AutoWah);t.Effect.call(this,e),this.follower=new t.Follower(e.follower),this._sweepRange=new t.ScaleExp(0,1,.5),this._baseFrequency=e.baseFrequency,this._octaves=e.octaves,this._inputBoost=new t.Gain,this._bandpass=new t.Filter({rolloff:-48,frequency:0,Q:e.Q}),this._peaking=new t.Filter(0,"peaking"),this._peaking.gain.value=e.gain,this.gain=this._peaking.gain,this.Q=this._bandpass.Q,this.effectSend.chain(this._inputBoost,this.follower,this._sweepRange),this._sweepRange.connect(this._bandpass.frequency),this._sweepRange.connect(this._peaking.frequency),this.effectSend.chain(this._bandpass,this._peaking,this.effectReturn),this._setSweepRange(),this.sensitivity=e.sensitivity,this._readOnly(["gain","Q"])},t.extend(t.AutoWah,t.Effect),t.AutoWah.defaults={baseFrequency:100,octaves:6,sensitivity:0,Q:2,gain:2,follower:{attack:.3,release:.5}},Object.defineProperty(t.AutoWah.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"baseFrequency",{get:function(){return this._baseFrequency},set:function(t){this._baseFrequency=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"sensitivity",{get:function(){return t.gainToDb(1/this._inputBoost.gain.value)},set:function(e){this._inputBoost.gain.value=1/t.dbToGain(e)}}),t.AutoWah.prototype._setSweepRange=function(){this._sweepRange.min=this._baseFrequency,this._sweepRange.max=Math.min(this._baseFrequency*Math.pow(2,this._octaves),this.context.sampleRate/2)},t.AutoWah.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this.follower.dispose(),this.follower=null,this._sweepRange.dispose(),this._sweepRange=null,this._bandpass.dispose(),this._bandpass=null,this._peaking.dispose(),this._peaking=null,this._inputBoost.dispose(),this._inputBoost=null,this._writable(["gain","Q"]),this.gain=null,this.Q=null,this},t.AutoWah}),e(function(t){return t.Modulo=function(e){t.SignalBase.call(this),this.createInsOuts(1,0),this._shaper=new t.WaveShaper(Math.pow(2,16)),this._multiply=new t.Multiply,this._subtract=this.output=new t.Subtract,this._modSignal=new t.Signal(e),this.input.fan(this._shaper,this._subtract),this._modSignal.connect(this._multiply,0,0),this._shaper.connect(this._multiply,0,1),this._multiply.connect(this._subtract,0,1),this._setWaveShaper(e)},t.extend(t.Modulo,t.SignalBase),t.Modulo.prototype._setWaveShaper=function(t){this._shaper.setMap(function(e){return Math.floor((e+1e-4)/t)})},Object.defineProperty(t.Modulo.prototype,"value",{get:function(){return this._modSignal.value},set:function(t){this._modSignal.value=t,this._setWaveShaper(t)}}),t.Modulo.prototype.dispose=function(){return t.SignalBase.prototype.dispose.call(this),this._shaper.dispose(),this._shaper=null,this._multiply.dispose(),this._multiply=null,this._subtract.dispose(),this._subtract=null,this._modSignal.dispose(),this._modSignal=null,this},t.Modulo}),e(function(t){return t.BitCrusher=function(){var e=t.defaults(arguments,["bits"],t.BitCrusher);t.Effect.call(this,e);var i=1/Math.pow(2,e.bits-1);this._subtract=new t.Subtract,this._modulo=new t.Modulo(i),this._bits=e.bits,this.effectSend.fan(this._subtract,this._modulo),this._modulo.connect(this._subtract,0,1),this._subtract.connect(this.effectReturn)},t.extend(t.BitCrusher,t.Effect),t.BitCrusher.defaults={bits:4},Object.defineProperty(t.BitCrusher.prototype,"bits",{get:function(){return this._bits},set:function(t){this._bits=t;var e=1/Math.pow(2,t-1);this._modulo.value=e}}),t.BitCrusher.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._subtract.dispose(),this._subtract=null,this._modulo.dispose(),this._modulo=null,this},t.BitCrusher}),e(function(t){return t.Chebyshev=function(){var e=t.defaults(arguments,["order"],t.Chebyshev);t.Effect.call(this,e),this._shaper=new t.WaveShaper(4096),this._order=e.order,this.connectEffect(this._shaper),this.order=e.order,this.oversample=e.oversample},t.extend(t.Chebyshev,t.Effect),t.Chebyshev.defaults={order:1,oversample:"none"},t.Chebyshev.prototype._getCoefficient=function(t,e,i){return i.hasOwnProperty(e)?i[e]:(i[e]=0===e?0:1===e?t:2*t*this._getCoefficient(t,e-1,i)-this._getCoefficient(t,e-2,i),i[e])},Object.defineProperty(t.Chebyshev.prototype,"order",{get:function(){return this._order},set:function(t){this._order=t;for(var e=new Array(4096),i=e.length,r=0;r=this._startTime&&!this._sourceStopped?t.State.Started:t.State.Stopped},t.BufferSource.prototype.start=function(e,i,r,n,o){if(-1!==this._startTime)throw new Error("Tone.BufferSource can only be started once.");if(!this.buffer.loaded)throw new Error("Tone.BufferSource: buffer is either not set or not loaded.");e=this.toSeconds(e),i=this.loop?t.defaultArg(i,this.loopStart):t.defaultArg(i,0),i=this.toSeconds(i),n=t.defaultArg(n,1),this._gain=n,o=this.toSeconds(t.defaultArg(o,this.fadeIn)),this.fadeIn=o,o>0?(this._gainNode.gain.setValueAtTime(0,e),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(this._gain,e+o):this._gainNode.gain.exponentialApproachValueAtTime(this._gain,e,o)):this._gainNode.gain.setValueAtTime(n,e),this._startTime=e;var s=this.toSeconds(t.defaultArg(r,this.buffer.duration-i%this.buffer.duration));if(s=Math.max(s,0),t.isDefined(r)&&(this.loop||(s=Math.min(s,this.buffer.duration-i%this.buffer.duration)),this.stop(e+s,this.fadeOut)),this.loop){var a=this.loopEnd||this.buffer.duration,h=this.loopStart;i>=a&&(i=(i-h)%(a-h)+h)}return this._source.buffer=this.buffer.get(),this._source.loopEnd=this.loopEnd||this.buffer.duration,ithis.sampleTime?(this._gainNode.gain.setValueAtTime(this._gain,n),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(0,e):this._gainNode.gain.exponentialApproachValueAtTime(0,n,i)):this._gainNode.gain.setValueAtTime(0,e),t.context.clearTimeout(this._onendedTimeout),this._onendedTimeout=t.context.setTimeout(this._onended.bind(this),this._stopTime-this.now()),this}},t.BufferSource.prototype.cancelStop=function(){if(-1!==this._startTime&&!this._sourceStopped){var t=this.toSeconds(this.fadeIn);this._gainNode.gain.cancelScheduledValues(this._startTime+t+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime+t+this.sampleTime)),this.context.clearTimeout(this._onendedTimeout),this._stopTime=-1}return this},t.BufferSource.prototype._onended=function(){if(!this._sourceStopped){this._sourceStopped=!0;var t="exponential"===this.curve?2*this.fadeOut:0;this._sourceStarted&&-1!==this._stopTime&&this._source.stop(this._stopTime+t),this.onended(this)}},Object.defineProperty(t.BufferSource.prototype,"loopStart",{get:function(){return this._source.loopStart},set:function(t){this._source.loopStart=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"loopEnd",{get:function(){return this._source.loopEnd},set:function(t){this._source.loopEnd=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"buffer",{get:function(){return this._buffer},set:function(t){this._buffer.set(t)}}),Object.defineProperty(t.BufferSource.prototype,"loop",{get:function(){return this._source.loop},set:function(t){this._source.loop=t,this.cancelStop()}}),t.BufferSource.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.onended=null,this._source.onended=null,this._source.disconnect(),this._source=null,this._gainNode.dispose(),this._gainNode=null,this._buffer.dispose(),this._buffer=null,this._startTime=-1,this.playbackRate=null,t.context.clearTimeout(this._onendedTimeout),this},t.BufferSource}),e(function(t){t.Noise=function(){var e=t.defaults(arguments,["type"],t.Noise);t.Source.call(this,e),this._source=null,this._type=e.type,this._playbackRate=e.playbackRate},t.extend(t.Noise,t.Source),t.Noise.defaults={type:"white",playbackRate:1},Object.defineProperty(t.Noise.prototype,"type",{get:function(){return this._type},set:function(e){if(this._type!==e){if(!(e in i))throw new TypeError("Tone.Noise: invalid type: "+e);if(this._type=e,this.state===t.State.Started){var r=this.now();this._stop(r),this._start(r)}}}}),Object.defineProperty(t.Noise.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._source&&(this._source.playbackRate.value=t)}}),t.Noise.prototype._start=function(e){var r=i[this._type];this._source=new t.BufferSource(r).connect(this.output),this._source.loop=!0,this._source.playbackRate.value=this._playbackRate,this._source.start(this.toSeconds(e),Math.random()*(r.duration-.001))},t.Noise.prototype._stop=function(t){this._source&&(this._source.stop(this.toSeconds(t)),this._source=null)},t.Noise.prototype.restart=function(t){this._stop(t),this._start(t)},t.Noise.prototype.dispose=function(){return t.Source.prototype.dispose.call(this),null!==this._source&&(this._source.disconnect(),this._source=null),this._buffer=null,this};var e={pink:function(){for(var t=[],e=0;e<2;e++){var i,r,n,o,s,a,h,l=new Float32Array(220500);t[e]=l,i=r=n=o=s=a=h=0;for(var u=0;u<220500;u++){var c=2*Math.random()-1;i=.99886*i+.0555179*c,r=.99332*r+.0750759*c,n=.969*n+.153852*c,o=.8665*o+.3104856*c,s=.55*s+.5329522*c,a=-.7616*a-.016898*c,l[u]=i+r+n+o+s+a+h+.5362*c,l[u]*=.11,h=.115926*c}}return t}(),brown:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0,n=0;n<220500;n++){var o=2*Math.random()-1;i[n]=(r+.02*o)/1.02,r=i[n],i[n]*=3.5}}return t}(),white:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0;r<220500;r++)i[r]=2*Math.random()-1}return t}()},i={};function r(){for(var r in e)i[r]=(new t.Buffer).fromArray(e[r])}return t.getContext(r),t.Context.on("init",r),t.Noise}),e(function(t){return t.Reverb=function(){var e=t.defaults(arguments,["decay"],t.Reverb);t.Effect.call(this,e),this._convolver=this.context.createConvolver(),this.decay=e.decay,this.preDelay=e.preDelay,this.connectEffect(this._convolver)},t.extend(t.Reverb,t.Effect),t.Reverb.defaults={decay:1.5,preDelay:.01},t.Reverb.prototype.generate=function(){return t.Offline(function(){var e=new t.Noise,i=new t.Noise,r=new t.Merge;e.connect(r.left),i.connect(r.right);var n=(new t.Gain).toMaster();r.connect(n),e.start(0),i.start(0),n.gain.setValueAtTime(0,0),n.gain.linearRampToValueAtTime(1,this.preDelay),n.gain.exponentialApproachValueAtTime(0,this.preDelay,this.decay-this.preDelay)}.bind(this),this.decay).then(function(t){return this._convolver.buffer=t.get(),this}.bind(this))},t.Reverb.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._convolver.disconnect(),this._convolver=null,this},t.Reverb}),e(function(t){return t.StereoFeedbackEffect=function(){var e=t.defaults(arguments,["feedback"],t.FeedbackEffect);t.StereoEffect.call(this,e),this.feedback=new t.Signal(e.feedback,t.Type.NormalRange),this._feedbackL=new t.Gain,this._feedbackR=new t.Gain,this.effectReturnL.chain(this._feedbackL,this.effectSendL),this.effectReturnR.chain(this._feedbackR,this.effectSendR),this.feedback.fan(this._feedbackL.gain,this._feedbackR.gain),this._readOnly(["feedback"])},t.extend(t.StereoFeedbackEffect,t.StereoEffect),t.StereoFeedbackEffect.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["feedback"]),this.feedback.dispose(),this.feedback=null,this._feedbackL.dispose(),this._feedbackL=null,this._feedbackR.dispose(),this._feedbackR=null,this},t.StereoFeedbackEffect}),e(function(t){return t.StereoWidener=function(){var e=t.defaults(arguments,["width"],t.StereoWidener);t.MidSideEffect.call(this,e),this.width=new t.Signal(e.width,t.Type.NormalRange),this._readOnly(["width"]),this._twoTimesWidthMid=new t.Multiply(2),this._twoTimesWidthSide=new t.Multiply(2),this._midMult=new t.Multiply,this._twoTimesWidthMid.connect(this._midMult,0,1),this.midSend.chain(this._midMult,this.midReturn),this._oneMinusWidth=new t.Subtract,this._oneMinusWidth.connect(this._twoTimesWidthMid),this.context.getConstant(1).connect(this._oneMinusWidth,0,0),this.width.connect(this._oneMinusWidth,0,1),this._sideMult=new t.Multiply,this.width.connect(this._twoTimesWidthSide),this._twoTimesWidthSide.connect(this._sideMult,0,1),this.sideSend.chain(this._sideMult,this.sideReturn)},t.extend(t.StereoWidener,t.MidSideEffect),t.StereoWidener.defaults={width:.5},t.StereoWidener.prototype.dispose=function(){return t.MidSideEffect.prototype.dispose.call(this),this._writable(["width"]),this.width.dispose(),this.width=null,this._midMult.dispose(),this._midMult=null,this._sideMult.dispose(),this._sideMult=null,this._twoTimesWidthMid.dispose(),this._twoTimesWidthMid=null,this._twoTimesWidthSide.dispose(),this._twoTimesWidthSide=null,this._oneMinusWidth.dispose(),this._oneMinusWidth=null,this},t.StereoWidener}),e(function(t){return t.Tremolo=function(){var e=t.defaults(arguments,["frequency","depth"],t.Tremolo);t.StereoEffect.call(this,e),this._lfoL=new t.LFO({phase:e.spread,min:1,max:0}),this._lfoR=new t.LFO({phase:e.spread,min:1,max:0}),this._amplitudeL=new t.Gain,this._amplitudeR=new t.Gain,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.depth=new t.Signal(e.depth,t.Type.NormalRange),this._readOnly(["frequency","depth"]),this.effectSendL.chain(this._amplitudeL,this.effectReturnL),this.effectSendR.chain(this._amplitudeR,this.effectReturnR),this._lfoL.connect(this._amplitudeL.gain),this._lfoR.connect(this._amplitudeR.gain),this.frequency.fan(this._lfoL.frequency,this._lfoR.frequency),this.depth.fan(this._lfoR.amplitude,this._lfoL.amplitude),this.type=e.type,this.spread=e.spread},t.extend(t.Tremolo,t.StereoEffect),t.Tremolo.defaults={frequency:10,type:"sine",depth:.5,spread:180},t.Tremolo.prototype.start=function(t){return this._lfoL.start(t),this._lfoR.start(t),this},t.Tremolo.prototype.stop=function(t){return this._lfoL.stop(t),this._lfoR.stop(t),this},t.Tremolo.prototype.sync=function(e){return this._lfoL.sync(e),this._lfoR.sync(e),t.Transport.syncSignal(this.frequency),this},t.Tremolo.prototype.unsync=function(){return this._lfoL.unsync(),this._lfoR.unsync(),t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Tremolo.prototype,"type",{get:function(){return this._lfoL.type},set:function(t){this._lfoL.type=t,this._lfoR.type=t}}),Object.defineProperty(t.Tremolo.prototype,"spread",{get:function(){return this._lfoR.phase-this._lfoL.phase},set:function(t){this._lfoL.phase=90-t/2,this._lfoR.phase=t/2+90}}),t.Tremolo.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["frequency","depth"]),this._lfoL.dispose(),this._lfoL=null,this._lfoR.dispose(),this._lfoR=null,this._amplitudeL.dispose(),this._amplitudeL=null,this._amplitudeR.dispose(),this._amplitudeR=null,this.frequency=null,this.depth=null,this},t.Tremolo}),e(function(t){return t.Vibrato=function(){var e=t.defaults(arguments,["frequency","depth"],t.Vibrato);t.Effect.call(this,e),this._delayNode=new t.Delay(0,e.maxDelay),this._lfo=new t.LFO({type:e.type,min:0,max:e.maxDelay,frequency:e.frequency,phase:-90}).start().connect(this._delayNode.delayTime),this.frequency=this._lfo.frequency,this.depth=this._lfo.amplitude,this.depth.value=e.depth,this._readOnly(["frequency","depth"]),this.effectSend.chain(this._delayNode,this.effectReturn)},t.extend(t.Vibrato,t.Effect),t.Vibrato.defaults={maxDelay:.005,frequency:5,depth:.1,type:"sine"},Object.defineProperty(t.Vibrato.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.Vibrato.prototype.dispose=function(){t.Effect.prototype.dispose.call(this),this._delayNode.dispose(),this._delayNode=null,this._lfo.dispose(),this._lfo=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null},t.Vibrato}),e(function(t){return t.Event=function(){var e=t.defaults(arguments,["callback","value"],t.Event);t.call(this),this._loop=e.loop,this.callback=e.callback,this.value=e.value,this._loopStart=this.toTicks(e.loopStart),this._loopEnd=this.toTicks(e.loopEnd),this._state=new t.TimelineState(t.State.Stopped),this._playbackRate=1,this._startOffset=0,this._probability=e.probability,this._humanize=e.humanize,this.mute=e.mute,this.playbackRate=e.playbackRate},t.extend(t.Event),t.Event.defaults={callback:t.noOp,loop:!1,loopEnd:"1m",loopStart:0,playbackRate:1,value:null,probability:1,mute:!1,humanize:!1},t.Event.prototype._rescheduleEvents=function(e){return e=t.defaultArg(e,-1),this._state.forEachFrom(e,function(e){var i;if(e.state===t.State.Started){t.isDefined(e.id)&&t.Transport.clear(e.id);var r=e.time+Math.round(this.startOffset/this._playbackRate);if(this._loop){i=1/0,t.isNumber(this._loop)&&(i=this._loop*this._getLoopDuration());var n=this._state.getAfter(r);null!==n&&(i=Math.min(i,n.time-r)),i!==1/0&&(this._state.setStateAtTime(t.State.Stopped,r+i+1),i=t.Ticks(i));var o=t.Ticks(this._getLoopDuration());e.id=t.Transport.scheduleRepeat(this._tick.bind(this),o,t.Ticks(r),i)}else e.id=t.Transport.schedule(this._tick.bind(this),t.Ticks(r))}}.bind(this)),this},Object.defineProperty(t.Event.prototype,"state",{get:function(){return this._state.getValueAtTime(t.Transport.ticks)}}),Object.defineProperty(t.Event.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t}}),Object.defineProperty(t.Event.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t}}),Object.defineProperty(t.Event.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t}}),t.Event.prototype.start=function(e){return e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Stopped&&(this._state.add({state:t.State.Started,time:e,id:void 0}),this._rescheduleEvents(e)),this},t.Event.prototype.stop=function(e){if(this.cancel(e),e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Started){this._state.setStateAtTime(t.State.Stopped,e);var i=this._state.getBefore(e),r=e;null!==i&&(r=i.time),this._rescheduleEvents(r)}return this},t.Event.prototype.cancel=function(e){return e=t.defaultArg(e,-1/0),e=this.toTicks(e),this._state.forEachFrom(e,function(e){t.Transport.clear(e.id)}),this._state.cancel(e),this},t.Event.prototype._tick=function(e){var i=t.Transport.getTicksAtTime(e);if(!this.mute&&this._state.getValueAtTime(i)===t.State.Started){if(this.probability<1&&Math.random()>this.probability)return;if(this.humanize){var r=.02;t.isBoolean(this.humanize)||(r=this.toSeconds(this.humanize)),e+=(2*Math.random()-1)*r}this.callback(e,this.value)}},t.Event.prototype._getLoopDuration=function(){return Math.round((this._loopEnd-this._loopStart)/this._playbackRate)},Object.defineProperty(t.Event.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"progress",{get:function(){if(this._loop){var e=t.Transport.ticks,i=this._state.get(e);if(null!==i&&i.state===t.State.Started){var r=this._getLoopDuration();return(e-i.time)%r/r}return 0}return 0}}),t.Event.prototype.dispose=function(){this.cancel(),this._state.dispose(),this._state=null,this.callback=null,this.value=null},t.Event}),e(function(t){return t.Loop=function(){var e=t.defaults(arguments,["callback","interval"],t.Loop);t.call(this),this._event=new t.Event({callback:this._tick.bind(this),loop:!0,loopEnd:e.interval,playbackRate:e.playbackRate,probability:e.probability}),this.callback=e.callback,this.iterations=e.iterations},t.extend(t.Loop),t.Loop.defaults={interval:"4n",callback:t.noOp,playbackRate:1,iterations:1/0,probability:!0,mute:!1},t.Loop.prototype.start=function(t){return this._event.start(t),this},t.Loop.prototype.stop=function(t){return this._event.stop(t),this},t.Loop.prototype.cancel=function(t){return this._event.cancel(t),this},t.Loop.prototype._tick=function(t){this.callback(t)},Object.defineProperty(t.Loop.prototype,"state",{get:function(){return this._event.state}}),Object.defineProperty(t.Loop.prototype,"progress",{get:function(){return this._event.progress}}),Object.defineProperty(t.Loop.prototype,"interval",{get:function(){return this._event.loopEnd},set:function(t){this._event.loopEnd=t}}),Object.defineProperty(t.Loop.prototype,"playbackRate",{get:function(){return this._event.playbackRate},set:function(t){this._event.playbackRate=t}}),Object.defineProperty(t.Loop.prototype,"humanize",{get:function(){return this._event.humanize},set:function(t){this._event.humanize=t}}),Object.defineProperty(t.Loop.prototype,"probability",{get:function(){return this._event.probability},set:function(t){this._event.probability=t}}),Object.defineProperty(t.Loop.prototype,"mute",{get:function(){return this._event.mute},set:function(t){this._event.mute=t}}),Object.defineProperty(t.Loop.prototype,"iterations",{get:function(){return!0===this._event.loop?1/0:this._event.loop},set:function(t){this._event.loop=t===1/0||t}}),t.Loop.prototype.dispose=function(){this._event.dispose(),this._event=null,this.callback=null},t.Loop}),e(function(t){return t.Part=function(){var e=t.defaults(arguments,["callback","events"],t.Part);t.Event.call(this,e),this._events=[];for(var i=0;i=this._loopStart&&e.startOffset=r&&(e.loop=!1,e.start(t.Ticks(i))):e.startOffset>=r&&e.start(t.Ticks(i))},Object.defineProperty(t.Part.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t,this._forEach(function(t){t.startOffset+=this._startOffset})}}),t.Part.prototype.stop=function(e){var i=this.toTicks(e);return this._state.cancel(i),this._state.setStateAtTime(t.State.Stopped,i),this._forEach(function(t){t.stop(e)}),this},t.Part.prototype.at=function(e,i){e=t.TransportTime(e);for(var r=t.Ticks(1).toSeconds(),n=0;n=0;r--){var n=this._events[r];n instanceof t.Part?n.remove(e,i):n.startOffset===e&&(t.isUndef(i)||t.isDefined(i)&&n.value===i)&&(this._events.splice(r,1),n.dispose())}return this},t.Part.prototype.removeAll=function(){return this._forEach(function(t){t.dispose()}),this._events=[],this},t.Part.prototype.cancel=function(t){return this._forEach(function(e){e.cancel(t)}),this._state.cancel(this.toTicks(t)),this},t.Part.prototype._forEach=function(e,i){if(this._events){i=t.defaultArg(i,this);for(var r=this._events.length-1;r>=0;r--){var n=this._events[r];n instanceof t.Part?n._forEach(e,i):e.call(i,n)}}return this},t.Part.prototype._setAll=function(t,e){this._forEach(function(i){i[t]=e})},t.Part.prototype._tick=function(t,e){this.mute||this.callback(t,e)},t.Part.prototype._testLoopBoundries=function(e){e.startOffset=this._loopEnd?e.cancel(0):e.state===t.State.Stopped&&this._restartEvent(e)},Object.defineProperty(t.Part.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t,this._setAll("probability",t)}}),Object.defineProperty(t.Part.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t,this._setAll("humanize",t)}}),Object.defineProperty(t.Part.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._forEach(function(e){e._loopStart=this._loopStart,e._loopEnd=this._loopEnd,e.loop=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._forEach(function(e){e.loopEnd=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._forEach(function(t){t.loopStart=this.loopStart,this._testLoopBoundries(t)})}}),Object.defineProperty(t.Part.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._setAll("playbackRate",t)}}),Object.defineProperty(t.Part.prototype,"length",{get:function(){return this._events.length}}),t.Part.prototype.dispose=function(){return this.removeAll(),this._state.dispose(),this._state=null,this.callback=null,this._events=null,this},t.Part}),e(function(t){return t.Pattern=function(){var e=t.defaults(arguments,["callback","values","pattern"],t.Pattern);t.Loop.call(this,e),this._pattern=new t.CtrlPattern({values:e.values,type:e.pattern,index:e.index})},t.extend(t.Pattern,t.Loop),t.Pattern.defaults={pattern:t.CtrlPattern.Type.Up,callback:t.noOp,values:[]},t.Pattern.prototype._tick=function(t){this.callback(t,this._pattern.value),this._pattern.next()},Object.defineProperty(t.Pattern.prototype,"index",{get:function(){return this._pattern.index},set:function(t){this._pattern.index=t}}),Object.defineProperty(t.Pattern.prototype,"values",{get:function(){return this._pattern.values},set:function(t){this._pattern.values=t}}),Object.defineProperty(t.Pattern.prototype,"value",{get:function(){return this._pattern.value}}),Object.defineProperty(t.Pattern.prototype,"pattern",{get:function(){return this._pattern.type},set:function(t){this._pattern.type=t}}),t.Pattern.prototype.dispose=function(){t.Loop.prototype.dispose.call(this),this._pattern.dispose(),this._pattern=null},t.Pattern}),e(function(t){return t.Sequence=function(){var e=t.defaults(arguments,["callback","events","subdivision"],t.Sequence),i=e.events;if(delete e.events,t.Part.call(this,e),this._subdivision=this.toTicks(e.subdivision),t.isUndef(e.loopEnd)&&t.isDefined(i)&&(this._loopEnd=i.length*this._subdivision),this._loop=!0,t.isDefined(i))for(var r=0;r1){var e=-t/2,i=t/(this._oscillators.length-1);this._forEach(function(t,r){t.detune.value=e+i*r})}}}),Object.defineProperty(t.FatOscillator.prototype,"count",{get:function(){return this._oscillators.length},set:function(e){if(e=Math.max(e,1),this._oscillators.length!==e){this._forEach(function(t){t.dispose()}),this._oscillators=[];for(var i=0;i0&&this.getLevelAtTime(e)>.05){var i=this.toSeconds(this.portamento);this.frequency.exponentialRampTo(t,i,e)}else this.frequency.setValueAtTime(t,e);return this},t.Monophonic}),e(function(t){return t.Synth=function(e){e=t.defaultArg(e,t.Synth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","frequency","detune","envelope"])},t.extend(t.Synth,t.Monophonic),t.Synth.defaults={oscillator:{type:"triangle"},envelope:{attack:.005,decay:.1,sustain:.3,release:1}},t.Synth.prototype._triggerEnvelopeAttack=function(t,e){return this.envelope.triggerAttack(t,e),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.Synth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.Synth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.frequency=null,this.detune=null,this},t.Synth}),e(function(t){return t.AMSynth=function(e){e=t.defaultArg(e,t.AMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth,this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth,this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this._modulationScale=new t.AudioToGain,this._modulationNode=new t.Gain,this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.chain(this._modulationScale,this._modulationNode.gain),this._carrier.chain(this._modulationNode,this.output),this._readOnly(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.AMSynth,t.Monophonic),t.AMSynth.defaults={harmonicity:3,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.AMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.AMSynth.prototype._triggerEnvelopeRelease=function(t){return this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.AMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationScale.dispose(),this._modulationScale=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.AMSynth}),e(function(t){return t.MonoSynth=function(e){e=t.defaultArg(e,t.MonoSynth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.filter=new t.Filter(e.filter),this.filterEnvelope=new t.FrequencyEnvelope(e.filterEnvelope),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.filter,this.envelope,this.output),this.filterEnvelope.connect(this.filter.frequency),this._readOnly(["oscillator","frequency","detune","filter","filterEnvelope","envelope"])},t.extend(t.MonoSynth,t.Monophonic),t.MonoSynth.defaults={frequency:"C4",detune:0,oscillator:{type:"square"},filter:{Q:6,type:"lowpass",rolloff:-24},envelope:{attack:.005,decay:.1,sustain:.9,release:1},filterEnvelope:{attack:.06,decay:.2,sustain:.5,release:2,baseFrequency:200,octaves:7,exponent:2}},t.MonoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.envelope.triggerAttack(t,e),this.filterEnvelope.triggerAttack(t),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.MonoSynth.prototype._triggerEnvelopeRelease=function(t){return this.envelope.triggerRelease(t),this.filterEnvelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MonoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","filter","filterEnvelope","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.filterEnvelope.dispose(),this.filterEnvelope=null,this.filter.dispose(),this.filter=null,this.frequency=null,this.detune=null,this},t.MonoSynth}),e(function(t){return t.DuoSynth=function(e){e=t.defaultArg(e,t.DuoSynth.defaults),t.Monophonic.call(this,e),this.voice0=new t.MonoSynth(e.voice0),this.voice0.volume.value=-10,this.voice1=new t.MonoSynth(e.voice1),this.voice1.volume.value=-10,this._vibrato=new t.LFO(e.vibratoRate,-50,50),this._vibrato.start(),this.vibratoRate=this._vibrato.frequency,this._vibratoGain=new t.Gain(e.vibratoAmount,t.Type.Positive),this.vibratoAmount=this._vibratoGain.gain,this.frequency=new t.Signal(440,t.Type.Frequency),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.frequency.connect(this.voice0.frequency),this.frequency.chain(this.harmonicity,this.voice1.frequency),this._vibrato.connect(this._vibratoGain),this._vibratoGain.fan(this.voice0.detune,this.voice1.detune),this.voice0.connect(this.output),this.voice1.connect(this.output),this._readOnly(["voice0","voice1","frequency","vibratoAmount","vibratoRate"])},t.extend(t.DuoSynth,t.Monophonic),t.DuoSynth.defaults={vibratoAmount:.5,vibratoRate:5,harmonicity:1.5,voice0:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}},voice1:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}}},t.DuoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.voice0._triggerEnvelopeAttack(t,e),this.voice1._triggerEnvelopeAttack(t,e),this},t.DuoSynth.prototype._triggerEnvelopeRelease=function(t){return this.voice0._triggerEnvelopeRelease(t),this.voice1._triggerEnvelopeRelease(t),this},t.DuoSynth.prototype.getLevelAtTime=function(t){return(this.voice0.getLevelAtTime(t)+this.voice1.getLevelAtTime(t))/2},t.DuoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["voice0","voice1","frequency","vibratoAmount","vibratoRate"]),this.voice0.dispose(),this.voice0=null,this.voice1.dispose(),this.voice1=null,this.frequency.dispose(),this.frequency=null,this._vibratoGain.dispose(),this._vibratoGain=null,this._vibrato=null,this.harmonicity.dispose(),this.harmonicity=null,this.vibratoAmount.dispose(),this.vibratoAmount=null,this.vibratoRate=null,this},t.DuoSynth}),e(function(t){return t.FMSynth=function(e){e=t.defaultArg(e,t.FMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth(e.carrier),this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth(e.modulator),this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.modulationIndex=new t.Multiply(e.modulationIndex),this.modulationIndex.units=t.Type.Positive,this._modulationNode=new t.Gain(0),this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.frequency.chain(this.modulationIndex,this._modulationNode),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.connect(this._modulationNode.gain),this._modulationNode.connect(this._carrier.frequency),this._carrier.connect(this.output),this._readOnly(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.FMSynth,t.Monophonic),t.FMSynth.defaults={harmonicity:3,modulationIndex:10,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.FMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.FMSynth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.FMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.modulationIndex.dispose(),this.modulationIndex=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.FMSynth}),e(function(t){return t.MembraneSynth=function(e){e=t.defaultArg(e,t.MembraneSynth.defaults),t.Instrument.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.octaves=e.octaves,this.pitchDecay=e.pitchDecay,this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","envelope"])},t.extend(t.MembraneSynth,t.Instrument),t.MembraneSynth.defaults={pitchDecay:.05,octaves:10,oscillator:{type:"sine"},envelope:{attack:.001,decay:.4,sustain:.01,release:1.4,attackCurve:"exponential"}},t.MembraneSynth.prototype.triggerAttack=function(t,e,i){e=this.toSeconds(e);var r=(t=this.toFrequency(t))*this.octaves;return this.oscillator.frequency.setValueAtTime(r,e),this.oscillator.frequency.exponentialRampToValueAtTime(t,e+this.toSeconds(this.pitchDecay)),this.envelope.triggerAttack(e,i),this.oscillator.start(e),this},t.MembraneSynth.prototype.triggerRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MembraneSynth.prototype.dispose=function(){return t.Instrument.prototype.dispose.call(this),this._writable(["oscillator","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this},t.MembraneSynth}),e(function(t){var e=[1,1.483,1.932,2.546,2.63,3.897];return t.MetalSynth=function(i){i=t.defaultArg(i,t.MetalSynth.defaults),t.Instrument.call(this,i),this.frequency=new t.Signal(i.frequency,t.Type.Frequency),this._oscillators=[],this._freqMultipliers=[],this._amplitue=new t.Gain(0).connect(this.output),this._highpass=new t.Filter({type:"highpass",Q:-3.0102999566398125}).connect(this._amplitue),this._octaves=i.octaves,this._filterFreqScaler=new t.Scale(i.resonance,7e3),this.envelope=new t.Envelope({attack:i.envelope.attack,attackCurve:"linear",decay:i.envelope.decay,sustain:0,release:i.envelope.release}).chain(this._filterFreqScaler,this._highpass.frequency),this.envelope.connect(this._amplitue.gain);for(var r=0;re&&(o.voice.triggerRelease(e),o.release=e)}return this},t.PolySynth.prototype.sync=function(){return this._syncMethod("triggerAttack",1),this._syncMethod("triggerRelease",1),this},t.PolySynth.prototype.set=function(t,e,i){for(var r=0;rt&&(i.release=t,i.voice.triggerRelease(t))}return this},t.PolySynth.prototype.dispose=function(){t.Instrument.prototype.dispose.call(this);for(var e=0;e0)r=i[0];else if(!r&&t.isDefined(e))throw new Error("Tone.UserMedia: no matching device: "+e);this._device=r;var n={audio:{echoCancellation:!1,sampleRate:this.context.sampleRate}};return r&&(n.audio.deviceId=r.deviceId),navigator.mediaDevices.getUserMedia(n).then(function(t){return this._stream||(this._stream=t,this._mediaStream=this.context.createMediaStreamSource(t),this._mediaStream.connect(this.output)),this}.bind(this))}.bind(this))},t.UserMedia.prototype.close=function(){return this._stream&&(this._stream.getAudioTracks().forEach(function(t){t.stop()}),this._stream=null,this._mediaStream.disconnect(),this._mediaStream=null),this._device=null,this},t.UserMedia.enumerateDevices=function(){return navigator.mediaDevices.enumerateDevices().then(function(t){return t.filter(function(t){return"audioinput"===t.kind})})},Object.defineProperty(t.UserMedia.prototype,"state",{get:function(){return this._stream&&this._stream.active?t.State.Started:t.State.Stopped}}),Object.defineProperty(t.UserMedia.prototype,"deviceId",{get:function(){if(this._device)return this._device.deviceId}}),Object.defineProperty(t.UserMedia.prototype,"groupId",{get:function(){if(this._device)return this._device.groupId}}),Object.defineProperty(t.UserMedia.prototype,"label",{get:function(){if(this._device)return this._device.label}}),Object.defineProperty(t.UserMedia.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.UserMedia.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.close(),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null,this},Object.defineProperty(t.UserMedia,"supported",{get:function(){return t.isDefined(navigator.mediaDevices)&&t.isFunction(navigator.mediaDevices.getUserMedia)}}),t.UserMedia}),e(function(t){return t.Midi=function(e,i){if(!(this instanceof t.Midi))return new t.Midi(e,i);t.Frequency.call(this,e,i)},t.extend(t.Midi,t.Frequency),t.Midi.prototype._defaultUnits="midi",t.Midi.prototype._frequencyToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._frequencyToUnits.call(this,e))},t.Midi.prototype._ticksToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._ticksToUnits.call(this,e))},t.Midi.prototype._beatsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._beatsToUnits.call(this,e))},t.Midi.prototype._secondsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._secondsToUnits.call(this,e))},t.Midi.prototype.toMidi=function(){return this.valueOf()},t.Midi.prototype.toFrequency=function(){return t.Frequency.mtof(this.toMidi())},t.Midi.prototype.transpose=function(t){return new this.constructor(this.toMidi()+t)},t.Midi}),t}()}.call(e,i,e,t))||(t.exports=r)},function(t,e,i){(function(e){var i;t.exports=function t(e,r,n){function o(a,h){if(!r[a]){if(!e[a]){var l="function"==typeof i&&i;if(!h&&l)return i(a,!0);if(s)return s(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var c=r[a]={exports:{}};e[a][0].call(c.exports,function(t){var i=e[a][1][t];return o(i||t)},c,c.exports,t,e,r,n)}return r[a].exports}for(var s="function"==typeof i&&i,a=0;a0)throw new Error("Invalid string. Length must be a multiple of 4");var u=t.length;h="="===t.charAt(u-2)?2:"="===t.charAt(u-1)?1:0,l=new i(3*t.length/4-h),s=h>0?t.length-4:t.length;var c=0;for(n=0,o=0;n>16),r((65280&a)>>8),r(255&a);return 2===h?r(255&(a=e(t.charAt(n))<<2|e(t.charAt(n+1))>>4)):1===h&&(r((a=e(t.charAt(n))<<10|e(t.charAt(n+1))<<4|e(t.charAt(n+2))>>2)>>8&255),r(255&a)),l},t.fromByteArray=function(t){function e(t){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t)}function i(t){return e(t>>18&63)+e(t>>12&63)+e(t>>6&63)+e(63&t)}var r,n,o,s=t.length%3,a="";for(r=0,o=t.length-s;r>2),a+=e(n<<4&63),a+="==";break;case 2:n=(t[t.length-2]<<8)+t[t.length-1],a+=e(n>>10),a+=e(n>>4&63),a+=e(n<<2&63),a+="="}return a}}(void 0===i?this.base64js={}:i)},{}],2:[function(t,e,i){},{}],3:[function(t,i,r){(function(e){"use strict";function i(){return n.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function n(t){return this instanceof n?(n.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof t?function(t,e){if(t=s(t,e<0?0:0|a(e)),!n.TYPED_ARRAY_SUPPORT)for(var i=0;i1?arguments[1]:"utf8"):function(t,e){if(n.isBuffer(e))return function(t,e){var i=0|a(e.length);return t=s(t,i),e.copy(t,0,0,i),t}(t,e);if(F(e))return function(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r1?new n(t,arguments[1]):new n(t)}function o(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r>>1&&(t.parent=I),t}function a(t){if(t>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|t}function h(t,e){"string"!=typeof t&&(t=""+t);var i=t.length;if(0===i)return 0;for(var r=!1;;)switch(e){case"ascii":case"binary":case"raw":case"raws":return i;case"utf8":case"utf-8":return k(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return C(t).length;default:if(r)return k(t).length;e=(""+e).toLowerCase(),r=!0}}function l(t,e,i,r){i=Number(i)||0;var n=t.length-i;r?(r=Number(r))>n&&(r=n):r=n;var o=e.length;if(o%2!=0)throw new Error("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,n=i%256,o.push(n),o.push(r);return o}(e,t.length-i),t,i,r)}function m(t,e,i){return 0===e&&i===t.length?O.fromByteArray(t):O.fromByteArray(t.slice(e,i))}function y(t,e,i){i=Math.min(t.length,i);for(var r=[],n=e;n239?4:l>223?3:l>191?2:1;if(n+c<=i)switch(c){case 1:l<128&&(u=l);break;case 2:128==(192&(o=t[n+1]))&&(h=(31&l)<<6|63&o)>127&&(u=h);break;case 3:o=t[n+1],s=t[n+2],128==(192&o)&&128==(192&s)&&(h=(15&l)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(u=h);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&l)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(u=h)}null===u?(u=65533,c=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),n+=c}return function(t){var e=t.length;if(e<=D)return String.fromCharCode.apply(String,t);for(var i="",r=0;rr)&&(i=r);for(var n="",o=e;oi)throw new RangeError("Trying to access beyond buffer length")}function x(t,e,i,r,o,s){if(!n.isBuffer(t))throw new TypeError("buffer must be a Buffer instance");if(e>o||et.length)throw new RangeError("index out of range")}function w(t,e,i,r){e<0&&(e=65535+e+1);for(var n=0,o=Math.min(t.length-i,2);n>>8*(r?n:1-n)}function T(t,e,i,r){e<0&&(e=4294967295+e+1);for(var n=0,o=Math.min(t.length-i,4);n>>8*(r?n:3-n)&255}function A(t,e,i,r,n,o){if(e>n||et.length)throw new RangeError("index out of range");if(i<0)throw new RangeError("index out of range")}function M(t,e,i,r,n){return n||A(t,e,i,4,3.4028234663852886e38,-3.4028234663852886e38),L.write(t,e,i,r,23,4),i+4}function P(t,e,i,r,n){return n||A(t,e,i,8,1.7976931348623157e308,-1.7976931348623157e308),L.write(t,e,i,r,52,8),i+8}function E(t){return t<16?"0"+t.toString(16):t.toString(16)}function k(t,e){e=e||1/0;for(var i,r=t.length,n=null,o=[],s=0;s55295&&i<57344){if(!n){if(i>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}n=i;continue}if(i<56320){(e-=3)>-1&&o.push(239,191,189),n=i;continue}i=65536+(n-55296<<10|i-56320)}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,i<128){if((e-=1)<0)break;o.push(i)}else if(i<2048){if((e-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((e-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function C(t){return O.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(B,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function R(t,e,i,r){for(var n=0;n=e.length||n>=t.length);n++)e[n+i]=t[n];return n}var O=t("base64-js"),L=t("ieee754"),F=t("isarray");r.Buffer=n,r.SlowBuffer=function t(e,i){if(!(this instanceof t))return new t(e,i);var r=new n(e,i);return delete r.parent,r},r.INSPECT_MAX_BYTES=50,n.poolSize=8192;var I={};n.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){function t(){}try{var e=new Uint8Array(1);return e.foo=function(){return 42},e.constructor=t,42===e.foo()&&e.constructor===t&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}(),n.TYPED_ARRAY_SUPPORT?(n.prototype.__proto__=Uint8Array.prototype,n.__proto__=Uint8Array):(n.prototype.length=void 0,n.prototype.parent=void 0),n.isBuffer=function(t){return!(null==t||!t._isBuffer)},n.compare=function(t,e){if(!n.isBuffer(t)||!n.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var i=t.length,r=e.length,o=0,s=Math.min(i,r);othis.length&&(i=this.length),i<=e)return"";for(;;)switch(t){case"hex":return _(this,e,i);case"utf8":case"utf-8":return y(this,e,i);case"ascii":return v(this,e,i);case"binary":return g(this,e,i);case"base64":return m(this,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return b(this,e,i);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}.apply(this,arguments)},n.prototype.equals=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===n.compare(this,t)},n.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},n.prototype.compare=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?0:n.compare(this,t)},n.prototype.indexOf=function(t,e){function i(t,e,i){for(var r=-1,n=0;i+n2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e>>=0,0===this.length)return-1;if(e>=this.length)return-1;if(e<0&&(e=Math.max(this.length+e,0)),"string"==typeof t)return 0===t.length?-1:String.prototype.indexOf.call(this,t,e);if(n.isBuffer(t))return i(this,t,e);if("number"==typeof t)return n.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,t,e):i(this,[t],e);throw new TypeError("val must be string, number or Buffer")},n.prototype.get=function(t){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(t)},n.prototype.set=function(t,e){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(t,e)},n.prototype.write=function(t,e,i,r){if(void 0===e)r="utf8",i=this.length,e=0;else if(void 0===i&&"string"==typeof e)r=e,i=this.length,e=0;else if(isFinite(e))e|=0,isFinite(i)?(i|=0,void 0===r&&(r="utf8")):(r=i,i=void 0);else{var n=r;r=e,e=0|i,i=n}var o=this.length-e;if((void 0===i||i>o)&&(i=o),t.length>0&&(i<0||e<0)||e>this.length)throw new RangeError("attempt to write outside buffer bounds");r||(r="utf8");for(var s=!1;;)switch(r){case"hex":return l(this,t,e,i);case"utf8":case"utf-8":return u(this,t,e,i);case"ascii":return c(this,t,e,i);case"binary":return p(this,t,e,i);case"base64":return d(this,t,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return f(this,t,e,i);default:if(s)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),s=!0}},n.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var D=4096;n.prototype.slice=function(t,e){var i,r=this.length;if(t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(n*=256);)r+=this[t+--e]*n;return r},n.prototype.readUInt8=function(t,e){return e||S(t,1,this.length),this[t]},n.prototype.readUInt16LE=function(t,e){return e||S(t,2,this.length),this[t]|this[t+1]<<8},n.prototype.readUInt16BE=function(t,e){return e||S(t,2,this.length),this[t]<<8|this[t+1]},n.prototype.readUInt32LE=function(t,e){return e||S(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},n.prototype.readUInt32BE=function(t,e){return e||S(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},n.prototype.readIntLE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=this[t],n=1,o=0;++o=(n*=128)&&(r-=Math.pow(2,8*e)),r},n.prototype.readIntBE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=e,n=1,o=this[t+--r];r>0&&(n*=256);)o+=this[t+--r]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},n.prototype.readInt8=function(t,e){return e||S(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},n.prototype.readInt16LE=function(t,e){e||S(t,2,this.length);var i=this[t]|this[t+1]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt16BE=function(t,e){e||S(t,2,this.length);var i=this[t+1]|this[t]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt32LE=function(t,e){return e||S(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},n.prototype.readInt32BE=function(t,e){return e||S(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},n.prototype.readFloatLE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!0,23,4)},n.prototype.readFloatBE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!1,23,4)},n.prototype.readDoubleLE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!0,52,8)},n.prototype.readDoubleBE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!1,52,8)},n.prototype.writeUIntLE=function(t,e,i,r){t=+t,e|=0,i|=0,r||x(this,t,e,i,Math.pow(2,8*i),0);var n=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+n]=t/o&255;return e+i},n.prototype.writeUInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,255,0),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},n.prototype.writeUInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeUInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeUInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):T(this,t,e,!0),e+4},n.prototype.writeUInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeIntLE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=0,s=1,a=t<0?1:0;for(this[e]=255&t;++o>0)-a&255;return e+i},n.prototype.writeIntBE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=i-1,s=1,a=t<0?1:0;for(this[e+o]=255&t;--o>=0&&(s*=256);)this[e+o]=(t/s>>0)-a&255;return e+i},n.prototype.writeInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,127,-128),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},n.prototype.writeInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):T(this,t,e,!0),e+4},n.prototype.writeInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeFloatLE=function(t,e,i){return M(this,t,e,!0,i)},n.prototype.writeFloatBE=function(t,e,i){return M(this,t,e,!1,i)},n.prototype.writeDoubleLE=function(t,e,i){return P(this,t,e,!0,i)},n.prototype.writeDoubleBE=function(t,e,i){return P(this,t,e,!1,i)},n.prototype.copy=function(t,e,i,r){if(i||(i=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;o--)t[o+e]=this[o+i];else if(s<1e3||!n.TYPED_ARRAY_SUPPORT)for(o=0;o=this.length)throw new RangeError("start out of bounds");if(i<0||i>this.length)throw new RangeError("end out of bounds");var r;if("number"==typeof t)for(r=e;r>1,u=-7,c=i?n-1:0,p=i?-1:1,d=t[e+c];for(c+=p,o=d&(1<<-u)-1,d>>=-u,u+=a;u>0;o=256*o+t[e+c],c+=p,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=r;u>0;s=256*s+t[e+c],c+=p,u-=8);if(0===o)o=1-l;else{if(o===h)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,r),o-=l}return(d?-1:1)*s*Math.pow(2,o-r)},i.write=function(t,e,i,r,n,o){var s,a,h,l=8*o-n-1,u=(1<>1,p=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,f=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+c>=1?p/h:p*Math.pow(2,1-c))*h>=2&&(s++,h/=2),s+c>=u?(a=0,s=u):s+c>=1?(a=(e*h-1)*Math.pow(2,n),s+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,n),s=0));n>=8;t[i+d]=255&a,d+=f,a/=256,n-=8);for(s=s<0;t[i+d]=255&s,d+=f,s/=256,l-=8);t[i+d-f]|=128*m}},{}],8:[function(t,e,i){var r={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},{}],9:[function(t,e,i){"use strict";function r(t,e){return t.b===e.b&&t.a===e.a}function n(t,e){return t.bt?0:t)<=(i=0>i?0:i)?0===i?(e+r)/2:e+t/(t+i)*(r-e):r+i/(t+i)*(e-r)}function d(t){var e=g(t.b);return b(e,t.c),b(e.b,t.c),S(e,t.a),e}function f(t,e){var i=!1,r=!1;t!==e&&(e.a!==t.a&&(r=!0,w(e.a,t.a)),e.d!==t.d&&(i=!0,T(e.d,t.d)),_(e,t),r||(b(e,t.a),t.a.c=t),i||(S(e,t.d),t.d.a=t))}function m(t){var e=t.b,i=!1;t.d!==t.b.d&&(i=!0,T(t.d,t.b.d)),t.c===t?w(t.a,null):(t.b.d.a=J(t),t.a.c=t.c,_(t,J(t)),i||S(t,t.d)),e.c===e?(w(e.a,null),T(e.d,null)):(t.d.a=J(e),e.a.c=e.c,_(e,J(e))),x(t)}function y(t){var e=g(t),i=e.b;return _(e,t.e),e.a=t.b.a,b(i,e.a),e.d=i.d=t.d,e=e.b,_(t.b,J(t.b)),_(t.b,e),t.b.a=e.a,e.b.a.c=e.b,e.b.d=t.b.d,e.f=t.f,e.b.f=t.b.f,e}function v(t,e){var i=!1,r=g(t),n=r.b;return e.d!==t.d&&(i=!0,T(e.d,t.d)),_(r,t.e),_(n,e),r.a=t.b.a,n.a=e.a,r.d=n.d=t.d,t.d.a=n,i||S(r,t.d),r}function g(t){var e=new Z,i=new Z,r=t.b.h;return i.h=r,r.b.h=e,e.h=t,t.b.h=i,e.b=i,e.c=e,e.e=i,i.b=e,i.c=i,i.e=e}function _(t,e){var i=t.c,r=e.c;i.b.e=e,r.b.e=t,t.c=r,e.c=i}function b(t,e){var i=e.f,r=new K(e,i);i.e=r,e.f=r,i=r.c=t;do{i.a=r,i=i.c}while(i!==t)}function S(t,e){var i=e.d,r=new Q(e,i);i.b=r,e.d=r,r.a=t,r.c=e.c,i=t;do{i.d=r,i=i.e}while(i!==t)}function x(t){var e=t.h;t=t.b.h,e.b.h=t,t.b.h=e}function w(t,e){var i=t.c,r=i;do{r.a=e,r=r.c}while(r!==i);i=t.f,(r=t.e).f=i,i.e=r}function T(t,e){var i=t.a,r=i;do{r.d=e,r=r.e}while(r!==i);i=t.d,(r=t.b).d=i,i.b=r}function A(t){var e=0;return Math.abs(t[1])>Math.abs(t[0])&&(e=1),Math.abs(t[2])>Math.abs(t[e])&&(e=2),e}function M(t,e){t.f+=e.f,t.b.f+=e.b.f}function P(t,e,i){return t=t.a,e=e.a,i=i.a,e.b.a===t?i.b.a===t?n(e.a,i.a)?0>=s(i.b.a,e.a,i.a):0<=s(e.b.a,i.a,e.a):0>=s(i.b.a,t,i.a):i.b.a===t?0<=s(e.b.a,t,e.a):(e=o(e.b.a,t,e.a),t=o(i.b.a,t,i.a),e>=t)}function E(t){t.a.i=null;var e=t.e;e.a.c=e.c,e.c.a=e.a,t.e=null}function k(t,e){m(t.a),t.c=!1,t.a=e,e.i=t}function C(t){var e=t.a.a;do{t=ut(t)}while(t.a.a===e);return t.c&&(e=v(lt(t).a.b,t.a.e),k(t,e),t=ut(t)),t}function R(t,e,i){var r=new ht;return r.a=i,r.e=z(t.f,e.e,r),i.i=r}function O(t,e){switch(t.s){case 100130:return 0!=(1&e);case 100131:return 0!==e;case 100132:return 0e;case 100134:return 2<=e||-2>=e}return!1}function L(t){var e=t.a,i=e.d;i.c=t.d,i.a=e,E(t)}function F(t,e,i){for(t=e,e=e.a;t!==i;){t.c=!1;var r=lt(t),n=r.a;if(n.a!==e.a){if(!r.c){L(t);break}n=v(e.c.b,n.b),k(r,n)}e.c!==n&&(f(J(n),n),f(e,n)),L(t),e=r.a,t=r}return e}function I(t,e,i,r,n,o){var s=!0;do{R(t,e,i.b),i=i.c}while(i!==r);for(null===n&&(n=lt(e).a.b.c);r=lt(e),(i=r.a.b).a===n.a;)i.c!==n&&(f(J(i),i),f(J(n),i)),r.f=e.f-i.f,r.d=O(t,r.f),e.b=!0,!s&&N(t,e)&&(M(i,n),E(e),m(n)),s=!1,e=r,n=i;e.b=!0,o&&q(t,e)}function D(t,e,i,r,n){var o=[e.g[0],e.g[1],e.g[2]];e.d=null,e.d=t.o&&t.o(o,i,r,t.c)||null,null===e.d&&(n?t.n||(Y(t,100156),t.n=!0):e.d=i[0])}function U(t,e,i){var r=[null,null,null,null];r[0]=e.a.d,r[1]=i.a.d,D(t,e.a,r,[.5,.5,0,0],!1),f(e,i)}function B(t,e,i,r,n){var o=Math.abs(e.b-t.b)+Math.abs(e.a-t.a),s=Math.abs(i.b-t.b)+Math.abs(i.a-t.a),a=n+1;r[n]=.5*s/(o+s),r[a]=.5*o/(o+s),t.g[0]+=r[n]*e.g[0]+r[a]*i.g[0],t.g[1]+=r[n]*e.g[1]+r[a]*i.g[1],t.g[2]+=r[n]*e.g[2]+r[a]*i.g[2]}function N(t,e){var i=lt(e),o=e.a,a=i.a;if(n(o.a,a.a)){if(0=p?st(i,p):n(u[l[p>>1]],u[l[p]])?st(i,p):at(i,p)),u[h]=null,c[h]=i.b,i.b=h}else for(i.c[-(h+1)]=null;0s(o.b.a,a.a,o.a))return!1;ut(e).b=e.b=!0,y(o.b),f(J(a),o)}return!0}function G(t,e){var i=lt(e),u=e.a,c=i.a,d=u.a,m=c.a,v=u.b.a,g=c.b.a,_=new K;if(s(v,t.a,d),s(g,t.a,m),d===m||Math.min(d.a,v.a)>Math.max(m.a,g.a))return!1;if(n(d,m)){if(0s(v,m,d))return!1;var b,S,x=v,w=d,T=g,A=m;if(n(x,w)||(b=x,x=w,w=b),n(T,A)||(b=T,T=A,A=b),n(x,T)||(b=x,x=T,T=b,b=w,w=A,A=b),n(T,w)?n(w,A)?(b=o(x,T,w),S=o(T,w,A),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,w.b)):(b=s(x,T,w),S=-s(x,A,w),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,A.b)):_.b=(T.b+w.b)/2,a(x,w)||(b=x,x=w,w=b),a(T,A)||(b=T,T=A,A=b),a(x,T)||(b=x,x=T,T=b,b=w,w=A,A=b),a(T,w)?a(w,A)?(b=h(x,T,w),S=h(T,w,A),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,w.a)):(b=l(x,T,w),S=-l(x,A,w),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,A.a)):_.a=(T.a+w.a)/2,n(_,t.a)&&(_.b=t.a.b,_.a=t.a.a),n(x=n(d,m)?d:m,_)&&(_.b=x.b,_.a=x.a),r(_,d)||r(_,m))return N(t,e),!1;if(!r(v,t.a)&&0<=s(v,t.a,_)||!r(g,t.a)&&0>=s(g,t.a,_)){if(g===t.a)return y(u.b),f(c.b,u),e=C(e),u=lt(e).a,F(t,lt(e),i),I(t,e,J(u),u,u,!0),!0;if(v===t.a){y(c.b),f(u.e,J(c)),d=i=e,m=d.a.b.a;do{d=ut(d)}while(d.a.b.a===m);return d=lt(e=d).a.b.c,i.a=J(c),c=F(t,i,null),I(t,e,c.c,u.b.c,d,!0),!0}return 0<=s(v,t.a,_)&&(ut(e).b=e.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=s(g,t.a,_)&&(e.b=i.b=!0,y(c.b),c.a.b=t.a.b,c.a.a=t.a.a),!1}return y(u.b),y(c.b),f(J(c),u),u.a.b=_.b,u.a.a=_.a,u.a.h=et(t.e,u.a),u=u.a,c=[0,0,0,0],_=[d.d,v.d,m.d,g.d],u.g[0]=u.g[1]=u.g[2]=0,B(u,d,v,c,0),B(u,m,g,c,2),D(t,u,_,c,!0),ut(e).b=e.b=i.b=!0,!1}function q(t,e){for(var i=lt(e);;){for(;i.b;)e=i,i=lt(i);if(!e.b&&(i=e,null===(e=ut(e))||!e.b))break;e.b=!1;var r,o=e.a,a=i.a;if(r=o.b.a!==a.b.a)t:{var h=lt(r=e),l=r.a,u=h.a,c=void 0;if(n(l.b.a,u.b.a)){if(0>s(l.b.a,u.b.a,l.a)){r=!1;break t}ut(r).b=r.b=!0,c=y(l),f(u.b,c),c.d.c=r.d}else{if(0r.f&&(r.f*=2,r.c=rt(r.c,r.f+1)),0===r.b?i=n:(i=r.b,r.b=r.c[r.b]),r.e[i]=e,r.c[i]=n,r.d[n]=i,r.h&&at(r,n),i}return r=t.a++,t.c[r]=e,-(r+1)}function it(t){if(0===t.a)return ot(t.b);var e=t.c[t.d[t.a-1]];if(0!==t.b.a&&n(nt(t.b),e))return ot(t.b);do{--t.a}while(0t.a||n(r[a],r[l])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function at(t,e){for(var i=t.d,r=t.e,o=t.c,s=e,a=i[s];;){var h=s>>1,l=i[h];if(0===h||n(r[l],r[a])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function ht(){this.e=this.a=null,this.f=0,this.c=this.b=this.h=this.d=!1}function lt(t){return t.e.c.b}function ut(t){return t.e.a.b}var ct,pt=4e150,dt=0;(ct=H.prototype).x=function(){X(this,dt)},ct.B=function(t,e){switch(t){case 100142:return;case 100140:switch(e){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=e)}break;case 100141:return void(this.m=!!e);default:return void Y(this,100900)}Y(this,100901)},ct.y=function(t){switch(t){case 100142:return 0;case 100140:return this.s;case 100141:return this.m;default:Y(this,100900)}return!1},ct.A=function(t,e,i){this.j[0]=t,this.j[1]=e,this.j[2]=i},ct.z=function(t,e){var i=e||null;switch(t){case 100100:case 100106:this.h=i;break;case 100104:case 100110:this.l=i;break;case 100101:case 100107:this.k=i;break;case 100102:case 100108:this.i=i;break;case 100103:case 100109:this.p=i;break;case 100105:case 100111:this.o=i;break;case 100112:this.r=i;break;default:Y(this,100900)}},ct.C=function(t,e){var i=!1,r=[0,0,0];X(this,2);for(var n=0;3>n;++n){var o=t[n];-1e150>o&&(o=-1e150,i=!0),1e150p;++p){var d=t.g[p];de[p]&&(e[p]=d,i[p]=t)}if(t=0,e[1]-h[1]>e[0]-h[0]&&(t=1),e[2]-h[2]>e[t]-h[t]&&(t=2),h[t]>=e[t])a[0]=0,a[1]=0,a[2]=1;else{for(e=0,h=l[t],i=i[t],l=[0,0,0],h=[h.g[0]-i.g[0],h.g[1]-i.g[1],h.g[2]-i.g[2]],p=[0,0,0],t=o.e;t!==o;t=t.e)p[0]=t.g[0]-i.g[0],p[1]=t.g[1]-i.g[1],p[2]=t.g[2]-i.g[2],l[0]=h[1]*p[2]-h[2]*p[1],l[1]=h[2]*p[0]-h[0]*p[2],l[2]=h[0]*p[1]-h[1]*p[0],(d=l[0]*l[0]+l[1]*l[1]+l[2]*l[2])>e&&(e=d,a[0]=l[0],a[1]=l[1],a[2]=l[2]);0>=e&&(a[0]=a[1]=a[2]=0,a[A(h)]=1)}o=!0}for(l=A(a),t=this.b.c,e=(l+1)%3,i=(l+2)%3,l=0=(e=t.a).f))do{a+=(e.a.b-e.b.a.b)*(e.a.a+e.b.a.a),e=e.e}while(e!==t.a);if(0>a)for(a=this.b.c,o=a.e;o!==a;o=o.e)o.a=-o.a}for(this.n=!1,a=this.b.b,t=a.h;t!==a;t=o)o=t.h,e=t.e,r(t.a,t.b.a)&&t.e.e!==t&&(U(this,e,t),m(t),e=(t=e).e),e.e===t&&(e!==t&&(e!==o&&e!==o.b||(o=o.h),m(e)),t!==o&&t!==o.b||(o=o.h),m(t));for(this.e=a=new $,o=this.b.c,t=o.e;t!==o;t=t.e)t.h=et(a,t);for(tt(a),this.f=new function(t){this.a=new W,this.b=t,this.c=P}(this),j(this,-pt),j(this,pt);null!==(a=it(this.e));){for(;;){t:if(t=this.e,0===t.a)o=nt(t.b);else if(o=t.c[t.d[t.a-1]],0!==t.b.a&&(t=nt(t.b),n(t,o))){o=t;break t}if(null===o||!r(o,a))break;o=it(this.e),U(this,a.c,o.c)}V(this,a)}for(this.a=this.f.a.a.b.a.a,a=0;null!==(o=this.f.a.a.b);)o.h||++a,E(o);for(this.f=null,(a=this.e).b=null,a.d=null,this.e=a.c=null,a=this.b,t=a.a.b;t!==a.a;t=o)o=t.b,(t=t.a).e.e===t&&(M(t.c,t),m(t));if(!this.n){if(a=this.b,this.m)for(t=a.b.h;t!==a.b;t=o)o=t.h,t.b.d.c!==t.d.c?t.f=t.d.c?1:-1:m(t);else for(t=a.a.b;t!==a.a;t=o)if(o=t.b,t.c){for(t=t.a;n(t.b.a,t.a);t=t.c.b);for(;n(t.a,t.b.a);t=t.e);for(e=t.c.b,i=void 0;t.e!==e;)if(n(t.b.a,e.a)){for(;e.e!==t&&(u(e.e)||0>=s(e.a,e.b.a,e.e.b.a));)i=v(e.e,e),e=i.b;e=e.c.b}else{for(;e.e!==t&&(c(t.c.b)||0<=s(t.b.a,t.a,t.c.b.a));)i=v(t,t.c.b),t=i.b;t=t.e}for(;e.e.e!==t;)i=v(e.e,e),e=i.b}if(this.h||this.i||this.k||this.l)if(this.m){for(a=this.b,o=a.a.b;o!==a.a;o=o.b)if(o.c){this.h&&this.h(2,this.c),t=o.a;do{this.k&&this.k(t.a.d,this.c),t=t.e}while(t!==o.a);this.i&&this.i(this.c)}}else{for(a=this.b,o=!!this.l,t=!1,e=-1,i=a.a.d;i!==a.a;i=i.d)if(i.c){t||(this.h&&this.h(4,this.c),t=!0),l=i.a;do{o&&(h=l.b.d.c?0:1,e!==h&&(e=h,this.l&&this.l(!!e,this.c))),this.k&&this.k(l.a.d,this.c),l=l.e}while(l!==i.a)}t&&this.i&&this.i(this.c)}if(this.r){for(a=this.b,t=a.a.b;t!==a.a;t=o)if(o=t.b,!t.c){e=t.a,i=e.e,l=void 0;do{i=(l=i).e,l.d=null,null===l.b.d&&(l.c===l?w(l.a,null):(l.a.c=l.c,_(l,J(l))),(h=l.b).c===h?w(h.a,null):(h.a.c=h.c,_(h,J(h))),x(l))}while(l!==e);e=t.d,(t=t.b).d=e,e.b=t}return this.r(this.b),void(this.c=this.b=null)}}this.b=this.c=null},this.libtess={GluTesselator:H,windingRule:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},errorType:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156},gluEnum:{GLU_TESS_MESH:100112,GLU_TESS_TOLERANCE:100142,GLU_TESS_WINDING_RULE:100140,GLU_TESS_BOUNDARY_ONLY:100141,GLU_INVALID_ENUM:100900,GLU_INVALID_VALUE:100901,GLU_TESS_BEGIN:100100,GLU_TESS_VERTEX:100101,GLU_TESS_END:100102,GLU_TESS_ERROR:100103,GLU_TESS_EDGE_FLAG:100104,GLU_TESS_COMBINE:100105,GLU_TESS_BEGIN_DATA:100106,GLU_TESS_VERTEX_DATA:100107,GLU_TESS_END_DATA:100108,GLU_TESS_ERROR_DATA:100109,GLU_TESS_EDGE_FLAG_DATA:100110,GLU_TESS_COMBINE_DATA:100111}},H.prototype.gluDeleteTess=H.prototype.x,H.prototype.gluTessProperty=H.prototype.B,H.prototype.gluGetTessProperty=H.prototype.y,H.prototype.gluTessNormal=H.prototype.A,H.prototype.gluTessCallback=H.prototype.z,H.prototype.gluTessVertex=H.prototype.C,H.prototype.gluTessBeginPolygon=H.prototype.u,H.prototype.gluTessBeginContour=H.prototype.t,H.prototype.gluTessEndContour=H.prototype.v,H.prototype.gluTessEndPolygon=H.prototype.w,void 0!==e&&(e.exports=this.libtess)},{}],10:[function(t,e,i){(function(r){!function(t,r){r("object"==typeof i&&void 0!==e?i:t.opentype={})}(this,function(e){"use strict";function i(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function n(t,e){this.source=t,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=e,this.destLen=0,this.ltree=new i,this.dtree=new i}function o(t,e,i,r){var n,o;for(n=0;n>>=1,e}function h(t,e,i){if(!e)return i;for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>16-e;return t.tag>>>=e,t.bitcount-=e,r+i}function l(t,e){for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>=1,++n,i+=e.table[n],r-=e.table[n]}while(r>=0);return t.tag=o,t.bitcount-=n,e.trans[i+r]}function u(t,e,i){var r,n,o,a,u,c;for(r=h(t,5,257),n=h(t,5,1),o=h(t,4,4),a=0;a<19;++a)Le[a]=0;for(a=0;a8;)t.sourceIndex--,t.bitcount-=8;if(e=256*(e=t.source[t.sourceIndex+1])+t.source[t.sourceIndex],i=256*(i=t.source[t.sourceIndex+3])+t.source[t.sourceIndex+2],e!==(65535&~i))return Te;for(t.sourceIndex+=4,r=e;r;--r)t.dest[t.destLen++]=t.source[t.sourceIndex++];return t.bitcount=0,we}function d(t,e,i,r,n){return Math.pow(1-n,3)*t+3*Math.pow(1-n,2)*n*e+3*(1-n)*Math.pow(n,2)*i+Math.pow(n,3)*r}function f(){this.x1=Number.NaN,this.y1=Number.NaN,this.x2=Number.NaN,this.y2=Number.NaN}function m(){this.commands=[],this.fill="black",this.stroke=null,this.strokeWidth=1}function y(t){throw new Error(t)}function v(t,e){t||y(e)}function g(t){return function(){return t}}function _(t){return t>=-128&&t<=127}function b(t,e,i){for(var r=0,n=t.length;e>8&255,h+256&255)}return o}function w(t,e,i){for(var r=this,n=0;n>4,o=15&r;if(15===n)break;if(e+=i[n],15===o)break;e+=i[o]}return parseFloat(e)}(t);if(e>=32&&e<=246)return e-139;if(e>=247&&e<=250)return i=t.parseByte(),256*(e-247)+i+108;if(e>=251&&e<=254)return i=t.parseByte(),256*-(e-251)-i-108;throw new Error("Invalid b0 "+e)}function Y(t,e,i){e=void 0!==e?e:0;var r=new Ye.Parser(t,e),n=[],o=[];for(i=void 0!==i?i:t.length;r.relativeOffset>1,f.length=0,v=!0}var o,s,a,h,l,u,c,p,d=new m,f=[],y=0,v=!1,g=!1,_=0,b=0;if(t.isCIDFont){var S=t.tables.cff.topDict._fdSelect[e.index],x=t.tables.cff.topDict._fdArray[S];l=x._subrs,u=x._subrsBias,c=x._defaultWidthX,p=x._nominalWidthX}else l=t.tables.cff.topDict._subrs,u=t.tables.cff.topDict._subrsBias,c=t.tables.cff.topDict._defaultWidthX,p=t.tables.cff.topDict._nominalWidthX;var w=c;return function i(c){for(var m,S,x,T,A,M,P,E,k,C,R,O,L=0;L1&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_,b);break;case 5:for(;f.length>0;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 6:for(;f.length>0&&(_+=f.shift(),d.lineTo(_,b),0!==f.length);)b+=f.shift(),d.lineTo(_,b);break;case 7:for(;f.length>0&&(b+=f.shift(),d.lineTo(_,b),0!==f.length);)_+=f.shift(),d.lineTo(_,b);break;case 8:for(;f.length>0;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 10:A=f.pop()+u,(M=l[A])&&i(M);break;case 11:return;case 12:switch(F=c[L],L+=1,F){case 35:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h+f.shift(),k=P+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),b=O+f.shift(),f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;case 34:o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h,k=P+f.shift(),C=h,R=k+f.shift(),O=b,_=R+f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;case 36:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h,k=P+f.shift(),C=h,R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;case 37:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h+f.shift(),k=P+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),Math.abs(R-_)>Math.abs(O-b)?_=R+f.shift():b=O+f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;default:console.log("Glyph "+e.index+": unknown operator 1200"+F),f.length=0}break;case 14:f.length>0&&!v&&(w=f.shift()+p,v=!0),g&&(d.closePath(),g=!1);break;case 18:n();break;case 19:case 20:n(),L+=y+7>>3;break;case 21:f.length>2&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_+=f.pop(),b);break;case 22:f.length>1&&!v&&(w=f.shift()+p,v=!0),r(_+=f.pop(),b);break;case 23:n();break;case 24:for(;f.length>2;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 25:for(;f.length>6;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 26:for(f.length%2&&(_+=f.shift());f.length>0;)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a,b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 27:for(f.length%2&&(b+=f.shift());f.length>0;)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h,d.curveTo(o,s,a,h,_,b);break;case 28:m=c[L],S=c[L+1],f.push((m<<24|S<<16)>>16),L+=2;break;case 29:A=f.pop()+t.gsubrsBias,(M=t.gsubrs[A])&&i(M);break;case 30:for(;f.length>0&&(o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;case 31:for(;f.length>0&&(o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;default:F<32?console.log("Glyph "+e.index+": unknown operator "+F):F<247?f.push(F-139):F<251?(m=c[L],L+=1,f.push(256*(F-247)+m+108)):F<255?(m=c[L],L+=1,f.push(256*-(F-251)-m-108)):(m=c[L],S=c[L+1],x=c[L+2],T=c[L+3],L+=4,f.push((m<<24|S<<16|x<<8|T)/65536))}}}(i),e.advanceWidth=w,d}function et(t,e){var i,r=Ze.indexOf(t);return r>=0&&(i=r),(r=e.indexOf(t))>=0?i=r+Ze.length:(i=Ze.length+e.length,e.push(t)),i}function it(t,e,i){for(var r={},n=0;ne.value.tag?1:-1}),e.fields=e.fields.concat(r),e.fields=e.fields.concat(n),e}function mt(t,e,i){for(var r=0;r0)return t.glyphs.get(n).getMetrics()}return i}function yt(t,e){for(var i=0,r=t.length-1;i<=r;){var n=i+r>>>1,o=t[n].tag;if(o===e)return n;o>>1,o=t[n];if(o===e)return n;o>>1,s=(i=t[o]).start;if(s===e)return i;s0)return i=t[r-1],e>i.end?0:i}function _t(t,e){this.font=t,this.tableName=e}function bt(t){_t.call(this,t,"gpos")}function St(t){_t.call(this,t,"gsub")}function xt(t,e){var i=t.length;if(i!==e.length)return!1;for(var r=0;r0?(o=t.parseByte(),0==(e&n)&&(o=-o),o=i+o):o=(e&n)>0?i:i+t.parseShort(),o}function Et(t,e,i){var r,n,o=new Ye.Parser(e,i);if(t.numberOfContours=o.parseShort(),t._xMin=o.parseShort(),t._yMin=o.parseShort(),t._xMax=o.parseShort(),t._yMax=o.parseShort(),t.numberOfContours>0){for(var s=t.endPointIndices=[],a=0;a0)for(var c=o.parseByte(),p=0;p0){var d,f=[];if(l>0){for(var m=0;m=0,f.push(d);for(var y=0,v=0;v0?(2&r)>0?(S.dx=o.parseShort(),S.dy=o.parseShort()):S.matchedPoints=[o.parseUShort(),o.parseUShort()]:(2&r)>0?(S.dx=o.parseChar(),S.dy=o.parseChar()):S.matchedPoints=[o.parseByte(),o.parseByte()],(8&r)>0?S.xScale=S.yScale=o.parseF2Dot14():(64&r)>0?(S.xScale=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()):(128&r)>0&&(S.xScale=o.parseF2Dot14(),S.scale01=o.parseF2Dot14(),S.scale10=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()),t.components.push(S),b=!!(32&r)}if(256&r){t.instructionLength=o.parseUShort(),t.instructions=[];for(var x=0;xe.points.length-1||r.matchedPoints[1]>n.points.length-1)throw Error("Matched points out of range in "+e.name);var s=e.points[r.matchedPoints[0]],a=n.points[r.matchedPoints[1]],h={xScale:r.xScale,scale01:r.scale01,scale10:r.scale10,yScale:r.yScale,dx:0,dy:0};a=kt([a],h)[0],h.dx=s.x-a.x,h.dy=s.y-a.y,o=kt(n.points,h)}e.points=e.points.concat(o)}}return Ct(e.points)}function Ot(t){this.font=t,this.getCommands=function(t){return Ri.getPath(t).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function Lt(t){return t}function Ft(t){return Math.sign(t)*Math.round(Math.abs(t))}function It(t){return Math.sign(t)*Math.round(Math.abs(2*t))/2}function Dt(t){return Math.sign(t)*(Math.round(Math.abs(t)+.5)-.5)}function Ut(t){return Math.sign(t)*Math.ceil(Math.abs(t))}function Bt(t){return Math.sign(t)*Math.floor(Math.abs(t))}function Nt(t,e){this.x=t,this.y=e,this.axis=void 0,this.slope=e/t,this.normalSlope=-t/e,Object.freeze(this)}function Gt(t,e){var i=Math.sqrt(t*t+e*e);return e/=i,1==(t/=i)&&0===e?Li:0===t&&1===e?Fi:new Nt(t,e)}function qt(t,e,i,r){this.x=this.xo=Math.round(64*t)/64,this.y=this.yo=Math.round(64*e)/64,this.lastPointOfContour=i,this.onCurve=r,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}function Vt(t,e){switch(this.env=t,this.stack=[],this.prog=e,t){case"glyf":this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=Li,this.round=Ft}}function jt(t){for(var e=t.tZone=new Array(t.gZone.length),i=0;i=176&&i<=183)n+=i-176+1;else if(i>=184&&i<=191)n+=2*(i-184+1);else if(e&&1===o&&27===i)break}while(o>0);t.ip=n}function Wt(t,i){e.DEBUG&&console.log(i.step,"SVTCA["+t.axis+"]"),i.fv=i.pv=i.dpv=t}function Ht(t,i){e.DEBUG&&console.log(i.step,"SPVTCA["+t.axis+"]"),i.pv=i.dpv=t}function Xt(t,i){e.DEBUG&&console.log(i.step,"SFVTCA["+t.axis+"]"),i.fv=t}function Yt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.pv=i.dpv=Gt(r,n)}function Qt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SFVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.fv=Gt(r,n)}function Zt(t){e.DEBUG&&console.log(t.step,"POP[]"),t.stack.pop()}function Jt(t,i){var r=i.stack.pop(),n=i.z0[r],o=i.fv,s=i.pv;e.DEBUG&&console.log(i.step,"MDAP["+t+"]",r);var a=s.distance(n,Ii);t&&(a=i.round(a)),o.setRelative(n,Ii,a,s),o.touch(n),i.rp0=i.rp1=r}function Kt(t,i){var r,n,o,s=i.z2,a=s.length-2;e.DEBUG&&console.log(i.step,"IUP["+t.axis+"]");for(var h=0;h1?"loop "+(i.loop-h)+": ":"")+"SHP["+(t?"rp1":"rp2")+"]",u)}i.loop=1}function te(t,i){var r=i.stack,n=t?i.rp1:i.rp2,o=(t?i.z0:i.z1)[n],s=i.fv,a=i.pv,h=r.pop(),l=i.z2[i.contours[h]],u=l;e.DEBUG&&console.log(i.step,"SHC["+t+"]",h);var c=a.distance(o,o,!1,!0);do{u!==o&&s.setRelative(u,u,c,a),u=u.nextPointOnContour}while(u!==l)}function ee(t,i){var r,n=i.stack,o=t?i.rp1:i.rp2,s=(t?i.z0:i.z1)[o],a=i.fv,h=i.pv,l=n.pop();switch(e.DEBUG&&console.log(i.step,"SHZ["+t+"]",l),l){case 0:r=i.tZone;break;case 1:r=i.gZone;break;default:throw new Error("Invalid zone")}for(var u,c=h.distance(s,s,!1,!0),p=r.length-2,d=0;d",h),i.stack.push(Math.round(64*h))}function se(t,i){var r=i.stack,n=r.pop(),o=i.fv,s=i.pv,a=i.ppem,h=i.deltaBase+16*(t-1),l=i.deltaShift,u=i.z0;e.DEBUG&&console.log(i.step,"DELTAP["+t+"]",n,r);for(var c=0;c>4)===a){var f=(15&d)-8;f>=0&&f++,e.DEBUG&&console.log(i.step,"DELTAPFIX",p,"by",f*l);var m=u[p];o.setRelative(m,m,f*l,s)}}}function ae(t,i){var r=i.stack,n=r.pop();e.DEBUG&&console.log(i.step,"ROUND[]"),r.push(64*i.round(n/64))}function he(t,i){var r=i.stack,n=r.pop(),o=i.ppem,s=i.deltaBase+16*(t-1),a=i.deltaShift;e.DEBUG&&console.log(i.step,"DELTAC["+t+"]",n,r);for(var h=0;h>4)===o){var c=(15&u)-8;c>=0&&c++;var p=c*a;e.DEBUG&&console.log(i.step,"DELTACFIX",l,"by",p),i.cvt[l]+=p}}}function le(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log(i.step,"SDPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.dpv=Gt(r,n)}function ue(t,i){var r=i.stack,n=i.prog,o=i.ip;e.DEBUG&&console.log(i.step,"PUSHB["+t+"]");for(var s=0;s=0?1:-1,h=Math.abs(h),t&&(u=s.cvt[p],n&&Math.abs(h-u)":"_")+(n?"R":"_")+(0===o?"Gr":1===o?"Bl":2===o?"Wh":"")+"]",t?p+"("+s.cvt[p]+","+u+")":"",d,"(d =",a,"->",l*h,")"),s.rp1=s.rp0,s.rp2=d,i&&(s.rp0=d)}function de(t){(t=t||{}).empty||(Mt(t.familyName,"When creating a new Font object, familyName is required."),Mt(t.styleName,"When creating a new Font object, styleName is required."),Mt(t.unitsPerEm,"When creating a new Font object, unitsPerEm is required."),Mt(t.ascender,"When creating a new Font object, ascender is required."),Mt(t.descender,"When creating a new Font object, descender is required."),Mt(t.descender<0,"Descender should be negative (e.g. -512)."),this.names={fontFamily:{en:t.familyName||" "},fontSubfamily:{en:t.styleName||" "},fullName:{en:t.fullName||t.familyName+" "+t.styleName},postScriptName:{en:t.postScriptName||(t.familyName+t.styleName).replace(/\s/g,"")},designer:{en:t.designer||" "},designerURL:{en:t.designerURL||" "},manufacturer:{en:t.manufacturer||" "},manufacturerURL:{en:t.manufacturerURL||" "},license:{en:t.license||" "},licenseURL:{en:t.licenseURL||" "},version:{en:t.version||"Version 0.1"},description:{en:t.description||" "},copyright:{en:t.copyright||" "},trademark:{en:t.trademark||" "}},this.unitsPerEm=t.unitsPerEm||1e3,this.ascender=t.ascender,this.descender=t.descender,this.createdTimestamp=t.createdTimestamp,this.tables={os2:{usWeightClass:t.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:t.widthClass||this.usWidthClasses.MEDIUM,fsSelection:t.fsSelection||this.fsSelectionValues.REGULAR}}),this.supported=!0,this.glyphs=new ei.GlyphSet(this,t.glyphs||[]),this.encoding=new U(this),this.position=new bt(this),this.substitution=new St(this),this.tables=this.tables||{},Object.defineProperty(this,"hinting",{get:function(){return this._hinting?this._hinting:"truetype"===this.outlinesFormat?this._hinting=new Ot(this):void 0}})}function fe(t,e){var i=JSON.stringify(t),r=256;for(var n in e){var o=parseInt(n);if(o&&!(o<256)){if(JSON.stringify(e[n])===i)return o;r<=o&&(r=o+1)}}return e[r]=t,r}function me(t,e,i){var r=fe(e.name,i);return[{name:"tag_"+t,type:"TAG",value:e.tag},{name:"minValue_"+t,type:"FIXED",value:e.minValue<<16},{name:"defaultValue_"+t,type:"FIXED",value:e.defaultValue<<16},{name:"maxValue_"+t,type:"FIXED",value:e.maxValue<<16},{name:"flags_"+t,type:"USHORT",value:0},{name:"nameID_"+t,type:"USHORT",value:r}]}function ye(t,e,i){var r={},n=new Ye.Parser(t,e);return r.tag=n.parseTag(),r.minValue=n.parseFixed(),r.defaultValue=n.parseFixed(),r.maxValue=n.parseFixed(),n.skip("uShort",1),r.name=i[n.parseUShort()]||{},r}function ve(t,e,i,r){for(var n=fe(e.name,r),o=[{name:"nameID_"+t,type:"USHORT",value:n},{name:"flags_"+t,type:"USHORT",value:0}],s=0;s=i)){var n,o=e.charCodeAt(r);return o>=55296&&o<=56319&&i>r+1&&(n=e.charCodeAt(r+1))>=56320&&n<=57343?1024*(o-55296)+n-56320+65536:o}};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}();var we=0,Te=-3,Ae=new i,Me=new i,Pe=new Uint8Array(30),Ee=new Uint16Array(30),ke=new Uint8Array(30),Ce=new Uint16Array(30),Re=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Oe=new i,Le=new Uint8Array(320),Fe=new Uint16Array(16);(function(t,e){var i;for(i=0;i<7;++i)t.table[i]=0;for(t.table[7]=24,t.table[8]=152,t.table[9]=112,i=0;i<24;++i)t.trans[i]=256+i;for(i=0;i<144;++i)t.trans[24+i]=i;for(i=0;i<8;++i)t.trans[168+i]=280+i;for(i=0;i<112;++i)t.trans[176+i]=144+i;for(i=0;i<5;++i)e.table[i]=0;for(e.table[5]=32,i=0;i<32;++i)e.trans[i]=i})(Ae,Me),o(Pe,Ee,4,3),o(ke,Ce,2,1),Pe[28]=0,Ee[28]=258;var Ie=function(t,e){var i,r,o=new n(t,e);do{switch(i=a(o),h(o,2,0)){case 0:r=p(o);break;case 1:r=c(o,Ae,Me);break;case 2:u(o,o.ltree,o.dtree),r=c(o,o.ltree,o.dtree);break;default:r=Te}if(r!==we)throw new Error("Data error")}while(!i);return o.destLenthis.x2&&(this.x2=t)),"number"==typeof e&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),ethis.y2&&(this.y2=e))},f.prototype.addX=function(t){this.addPoint(t,null)},f.prototype.addY=function(t){this.addPoint(null,t)},f.prototype.addBezier=function(t,e,i,r,n,o,s,a){var h=this,l=[t,e],u=[i,r],c=[n,o],p=[s,a];this.addPoint(t,e),this.addPoint(s,a);for(var f=0;f<=1;f++){var m=6*l[f]-12*u[f]+6*c[f],y=-3*l[f]+9*u[f]-9*c[f]+3*p[f],v=3*u[f]-3*l[f];if(0!==y){var g=Math.pow(m,2)-4*v*y;if(!(g<0)){var _=(-m+Math.sqrt(g))/(2*y);0<_&&_<1&&(0===f&&h.addX(d(l[f],u[f],c[f],p[f],_)),1===f&&h.addY(d(l[f],u[f],c[f],p[f],_)));var b=(-m-Math.sqrt(g))/(2*y);0=0&&r>0&&(i+=" "),i+=e(n)}return i}t=void 0!==t?t:2;for(var r="",n=0;n=0&&t<=255,"Byte value should be between 0 and 255."),[t]},Ge.BYTE=g(1),Ne.CHAR=function(t){return[t.charCodeAt(0)]},Ge.CHAR=g(1),Ne.CHARARRAY=function(t){for(var e=[],i=0;i>8&255,255&t]},Ge.USHORT=g(2),Ne.SHORT=function(t){return t>=32768&&(t=-(65536-t)),[t>>8&255,255&t]},Ge.SHORT=g(2),Ne.UINT24=function(t){return[t>>16&255,t>>8&255,255&t]},Ge.UINT24=g(3),Ne.ULONG=function(t){return[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.ULONG=g(4),Ne.LONG=function(t){return t>=Ue&&(t=-(2*Ue-t)),[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONG=g(4),Ne.FIXED=Ne.ULONG,Ge.FIXED=Ge.ULONG,Ne.FWORD=Ne.SHORT,Ge.FWORD=Ge.SHORT,Ne.UFWORD=Ne.USHORT,Ge.UFWORD=Ge.USHORT,Ne.LONGDATETIME=function(t){return[0,0,0,0,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONGDATETIME=g(8),Ne.TAG=function(t){return De.argument(4===t.length,"Tag should be exactly 4 ASCII characters."),[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]},Ge.TAG=g(4),Ne.Card8=Ne.BYTE,Ge.Card8=Ge.BYTE,Ne.Card16=Ne.USHORT,Ge.Card16=Ge.USHORT,Ne.OffSize=Ne.BYTE,Ge.OffSize=Ge.BYTE,Ne.SID=Ne.USHORT,Ge.SID=Ge.USHORT,Ne.NUMBER=function(t){return t>=-107&&t<=107?[t+139]:t>=108&&t<=1131?[247+((t-=108)>>8),255&t]:t>=-1131&&t<=-108?[251+((t=-t-108)>>8),255&t]:t>=-32768&&t<=32767?Ne.NUMBER16(t):Ne.NUMBER32(t)},Ge.NUMBER=function(t){return Ne.NUMBER(t).length},Ne.NUMBER16=function(t){return[28,t>>8&255,255&t]},Ge.NUMBER16=g(3),Ne.NUMBER32=function(t){return[29,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.NUMBER32=g(5),Ne.REAL=function(t){var e=t.toString(),i=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(e);if(i){var r=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));e=(Math.round(t*r)/r).toString()}for(var n="",o=0,s=e.length;o>8&255,e[e.length]=255&r}return e},Ge.UTF16=function(t){return 2*t.length};var qe={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};Be.MACSTRING=function(t,e,i,r){var n=qe[r];if(void 0!==n){for(var o="",s=0;s=128&&void 0===(o=i[o]))return;r[n]=o}return r}},Ge.MACSTRING=function(t,e){var i=Ne.MACSTRING(t,e);return void 0!==i?i.length:0},Ne.VARDELTAS=function(t){for(var e=0,i=[];e=-128&&r<=127?S(t,e,i):x(t,e,i)}return i},Ne.INDEX=function(t){for(var e=1,i=[e],r=[],n=0;n>8,e[c+1]=255&p,e=e.concat(r[u])}return e},Ge.TABLE=function(t){for(var e=0,i=t.fields.length,r=0;r0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parsePointer32=function(t){var e=this.parseOffset32();if(e>0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parseListOfLists=function(t){for(var e=this,i=this.parseOffset16List(),r=i.length,n=this.relativeOffset,o=new Array(r),s=0;s=0;n-=1){var o=Ye.getUShort(t,e+4+8*n),s=Ye.getUShort(t,e+4+8*n+2);if(3===o&&(0===s||1===s||10===s)||0===o&&(0===s||1===s||2===s||3===s||4===s)){r=Ye.getULong(t,e+4+8*n+4);break}}if(-1===r)throw new Error("No valid cmap sub-tables found.");var a=new Ye.Parser(t,e+r);if(i.format=a.parseUShort(),12===i.format)!function(t,e){var i;e.parseUShort(),t.length=e.parseULong(),t.language=e.parseULong(),t.groupCount=i=e.parseULong(),t.glyphIndexMap={};for(var r=0;r>1,e.skip("uShort",3),t.glyphIndexMap={};for(var s=new Ye.Parser(i,r+n+14),a=new Ye.Parser(i,r+n+16+2*o),h=new Ye.Parser(i,r+n+16+4*o),l=new Ye.Parser(i,r+n+16+6*o),u=r+n+16+8*o,c=0;c0;e-=1)if(t.get(e).unicode>65535){console.log("Adding CMAP format 12 (needed!)"),i=!1;break}var r=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:i?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:i?12:20}];i||(r=r.concat([{name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}])),r=r.concat([{name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);var n=new We.Table("cmap",r);for(n.segments=[],e=0;e=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");o.push(n)}else{if(3!==a)throw new Error("CFF Table CID Font FDSelect table has unsupported format "+a);var l=s.parseCard16(),u=s.parseCard16();if(0!==u)throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+u);for(var c,p=0;p=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");if(c>i)throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+c);for(;u=1&&(i.ulCodePageRange1=r.parseULong(),i.ulCodePageRange2=r.parseULong()),i.version>=2&&(i.sxHeight=r.parseShort(),i.sCapHeight=r.parseShort(),i.usDefaultChar=r.parseUShort(),i.usBreakChar=r.parseUShort(),i.usMaxContent=r.parseUShort()),i},make:function(t){return new We.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],t)},unicodeRanges:gi,getUnicodeRange:function(t){for(var e=0;e=i.begin&&t=$e.length){var s=r.parseChar();i.names.push(r.parseString(s))}break;case 2.5:i.numberOfGlyphs=r.parseUShort(),i.offset=new Array(i.numberOfGlyphs);for(var a=0;ay||void 0===e)&&y>0&&(e=y),l 123 are reserved for internal usage");d|=1<0?hi.make(O):void 0,I=bi.make(),D=ni.make(t.glyphs,{version:t.getEnglishName("version"),fullName:E,familyName:M,weightName:P,postScriptName:k,unitsPerEm:t.unitsPerEm,fontBBox:[0,_.yMin,_.ascender,_.advanceWidthMax]}),U=t.metas&&Object.keys(t.metas).length>0?Ai.make(t.metas):void 0,B=[b,S,x,w,L,A,I,D,T];F&&B.push(F),t.tables.gsub&&B.push(Ti.make(t.tables.gsub)),U&&B.push(U);for(var N=ft(B),G=pt(N.encode()),q=N.fields,V=!1,j=0;j=0)return r[n].script;if(e){var o={tag:t,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return r.splice(-1-n,0,o),o.script}}},getLangSysTable:function(t,e,i){var r=this.getScriptTable(t,i);if(r){if(!e||"dflt"===e||"DFLT"===e)return r.defaultLangSys;var n=yt(r.langSysRecords,e);if(n>=0)return r.langSysRecords[n].langSys;if(i){var o={tag:e,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return r.langSysRecords.splice(-1-n,0,o),o.langSys}}},getFeatureTable:function(t,e,i,r){var n=this.getLangSysTable(t,e,r);if(n){for(var o,s=n.featureIndexes,a=this.font.tables[this.tableName].features,h=0;h=a[l-1].tag,"Features must be added in alphabetical order."),o={tag:i,feature:{params:0,lookupListIndexes:[]}},a.push(o),s.push(l),o.feature}}},getLookupTables:function(t,e,i,r,n){var o=this.getFeatureTable(t,e,i,n),s=[];if(o){for(var a,h=o.lookupListIndexes,l=this.font.tables[this.tableName].lookups,u=0;u=0?i:-1;case 2:var r=gt(t.ranges,e);return r?r.index+e-r.start:-1}},expandCoverage:function(t){if(1===t.format)return t.glyphs;for(var e=[],i=t.ranges,r=0;r=0){for(var u=o.ligatureSets[l],c=0;c2)){var r=this.font,n=this._prepState;if(!n||n.ppem!==i){var o=this._fpgmState;if(!o){Vt.prototype=Di,(o=this._fpgmState=new Vt("fpgm",r.tables.fpgm)).funcs=[],o.font=r,e.DEBUG&&(console.log("---EXEC FPGM---"),o.step=-1);try{Ei(o)}catch(t){return console.log("Hinting error in FPGM:"+t),void(this._errorState=3)}}Vt.prototype=o,(n=this._prepState=new Vt("prep",r.tables.prep)).ppem=i;var s=r.tables.cvt;if(s)for(var a=n.cvt=new Array(s.length),h=i/r.unitsPerEm,l=0;l1))try{return ki(t,n)}catch(t){return this._errorState<1&&(console.log("Hinting error:"+t),console.log("Note: further hinting errors are silenced")),void(this._errorState=1)}}},ki=function(t,i){var r,n,o,s=i.ppem/i.font.unitsPerEm,a=s,h=t.components;if(Vt.prototype=i,h){var l=i.font;n=[],r=[];for(var u=0;u1?"loop "+(t.loop-r)+": ":"")+"SHPIX[]",a,o),n.setRelative(h,h,o),n.touch(h)}t.loop=1},function(t){for(var i=t.stack,r=t.rp1,n=t.rp2,o=t.loop,s=t.z0[r],a=t.z1[n],h=t.fv,l=t.dpv,u=t.z2;o--;){var c=i.pop(),p=u[c];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"IP[]",c,r,"<->",n),h.interpolate(p,s,a,l),h.touch(p)}t.loop=1},ie.bind(void 0,0),ie.bind(void 0,1),function(t){for(var i=t.stack,r=t.rp0,n=t.z0[r],o=t.loop,s=t.fv,a=t.pv,h=t.z1;o--;){var l=i.pop(),u=h[l];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"ALIGNRP[]",l),s.setRelative(u,n,0,a),s.touch(u)}t.loop=1},function(t){e.DEBUG&&console.log(t.step,"RTDG[]"),t.round=It},re.bind(void 0,0),re.bind(void 0,1),function(t){var i=t.prog,r=t.ip,n=t.stack,o=i[++r];e.DEBUG&&console.log(t.step,"NPUSHB[]",o);for(var s=0;sr?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"GTEQ[]",r,n),i.push(n>=r?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"EQ[]",r,n),i.push(r===n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"NEQ[]",r,n),i.push(r!==n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ODD[]",r),i.push(Math.trunc(r)%2?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"EVEN[]",r),i.push(Math.trunc(r)%2?0:1)},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"IF[]",i),i||(zt(t,!0),e.DEBUG&&console.log(t.step,"EIF[]"))},function(t){e.DEBUG&&console.log(t.step,"EIF[]")},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"AND[]",r,n),i.push(r&&n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"OR[]",r,n),i.push(r||n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NOT[]",r),i.push(r?0:1)},se.bind(void 0,1),function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDB[]",i),t.deltaBase=i},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDS[]",i),t.deltaShift=Math.pow(.5,i)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"ADD[]",r,n),i.push(n+r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"SUB[]",r,n),i.push(n-r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"DIV[]",r,n),i.push(64*n/r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MUL[]",r,n),i.push(n*r/64)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ABS[]",r),i.push(Math.abs(r))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NEG[]",r),i.push(-r)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"FLOOR[]",r),i.push(64*Math.floor(r/64))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"CEILING[]",r),i.push(64*Math.ceil(r/64))},ae.bind(void 0,0),ae.bind(void 0,1),ae.bind(void 0,2),ae.bind(void 0,3),void 0,void 0,void 0,void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"WCVTF[]",r,n),t.cvt[n]=r*t.ppem/t.font.unitsPerEm},se.bind(void 0,2),se.bind(void 0,3),he.bind(void 0,1),he.bind(void 0,2),he.bind(void 0,3),function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"SROUND[]",r),t.round=Oi,192&r){case 0:i=.5;break;case 64:i=1;break;case 128:i=2;break;default:throw new Error("invalid SROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid SROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"S45ROUND[]",r),t.round=Oi,192&r){case 0:i=Math.sqrt(2)/2;break;case 64:i=Math.sqrt(2);break;case 128:i=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid S45ROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},void 0,void 0,function(t){e.DEBUG&&console.log(t.step,"ROFF[]"),t.round=Lt},void 0,function(t){e.DEBUG&&console.log(t.step,"RUTG[]"),t.round=Ut},function(t){e.DEBUG&&console.log(t.step,"RDTG[]"),t.round=Bt},Zt,Zt,void 0,void 0,void 0,void 0,void 0,function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANCTRL[]",i)},le.bind(void 0,0),le.bind(void 0,1),function(t){var i=t.stack,r=i.pop(),n=0;e.DEBUG&&console.log(t.step,"GETINFO[]",r),1&r&&(n=35),32&r&&(n|=4096),i.push(n)},void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop(),o=i.pop();e.DEBUG&&console.log(t.step,"ROLL[]"),i.push(n),i.push(r),i.push(o)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MAX[]",r,n),i.push(Math.max(n,r))},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MIN[]",r,n),i.push(Math.min(n,r))},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANTYPE[]",i)},function(t){var i=t.stack.pop(),r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"INSTCTRL[]",i,r),i){case 1:return void(t.inhibitGridFit=!!r);case 2:return void(t.ignoreCvt=!!r);default:throw new Error("invalid INSTCTRL[] selector")}},void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,ue.bind(void 0,1),ue.bind(void 0,2),ue.bind(void 0,3),ue.bind(void 0,4),ue.bind(void 0,5),ue.bind(void 0,6),ue.bind(void 0,7),ue.bind(void 0,8),ce.bind(void 0,1),ce.bind(void 0,2),ce.bind(void 0,3),ce.bind(void 0,4),ce.bind(void 0,5),ce.bind(void 0,6),ce.bind(void 0,7),ce.bind(void 0,8),pe.bind(void 0,0,0,0,0,0),pe.bind(void 0,0,0,0,0,1),pe.bind(void 0,0,0,0,0,2),pe.bind(void 0,0,0,0,0,3),pe.bind(void 0,0,0,0,1,0),pe.bind(void 0,0,0,0,1,1),pe.bind(void 0,0,0,0,1,2),pe.bind(void 0,0,0,0,1,3),pe.bind(void 0,0,0,1,0,0),pe.bind(void 0,0,0,1,0,1),pe.bind(void 0,0,0,1,0,2),pe.bind(void 0,0,0,1,0,3),pe.bind(void 0,0,0,1,1,0),pe.bind(void 0,0,0,1,1,1),pe.bind(void 0,0,0,1,1,2),pe.bind(void 0,0,0,1,1,3),pe.bind(void 0,0,1,0,0,0),pe.bind(void 0,0,1,0,0,1),pe.bind(void 0,0,1,0,0,2),pe.bind(void 0,0,1,0,0,3),pe.bind(void 0,0,1,0,1,0),pe.bind(void 0,0,1,0,1,1),pe.bind(void 0,0,1,0,1,2),pe.bind(void 0,0,1,0,1,3),pe.bind(void 0,0,1,1,0,0),pe.bind(void 0,0,1,1,0,1),pe.bind(void 0,0,1,1,0,2),pe.bind(void 0,0,1,1,0,3),pe.bind(void 0,0,1,1,1,0),pe.bind(void 0,0,1,1,1,1),pe.bind(void 0,0,1,1,1,2),pe.bind(void 0,0,1,1,1,3),pe.bind(void 0,1,0,0,0,0),pe.bind(void 0,1,0,0,0,1),pe.bind(void 0,1,0,0,0,2),pe.bind(void 0,1,0,0,0,3),pe.bind(void 0,1,0,0,1,0),pe.bind(void 0,1,0,0,1,1),pe.bind(void 0,1,0,0,1,2),pe.bind(void 0,1,0,0,1,3),pe.bind(void 0,1,0,1,0,0),pe.bind(void 0,1,0,1,0,1),pe.bind(void 0,1,0,1,0,2),pe.bind(void 0,1,0,1,0,3),pe.bind(void 0,1,0,1,1,0),pe.bind(void 0,1,0,1,1,1),pe.bind(void 0,1,0,1,1,2),pe.bind(void 0,1,0,1,1,3),pe.bind(void 0,1,1,0,0,0),pe.bind(void 0,1,1,0,0,1),pe.bind(void 0,1,1,0,0,2),pe.bind(void 0,1,1,0,0,3),pe.bind(void 0,1,1,0,1,0),pe.bind(void 0,1,1,0,1,1),pe.bind(void 0,1,1,0,1,2),pe.bind(void 0,1,1,0,1,3),pe.bind(void 0,1,1,1,0,0),pe.bind(void 0,1,1,1,0,1),pe.bind(void 0,1,1,1,0,2),pe.bind(void 0,1,1,1,0,3),pe.bind(void 0,1,1,1,1,0),pe.bind(void 0,1,1,1,1,1),pe.bind(void 0,1,1,1,1,2),pe.bind(void 0,1,1,1,1,3)];var Ui=Array.from||function(t){return t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]?|[^\uD800-\uDFFF]|./g)||[]};de.prototype.hasChar=function(t){return null!==this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyphIndex=function(t){return this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyph=function(t){var e=this.charToGlyphIndex(t),i=this.glyphs.get(e);return i||(i=this.glyphs.get(0)),i},de.prototype.stringToGlyphs=function(t,e){e=e||this.defaultRenderOptions;for(var i=Ui(t),r=[],n=0;n1&&console.warn("Only the first kern subtable is supported."),t.skip("uLong");var i=255&t.parseUShort();if(t.skip("uShort"),0===i){var r=t.parseUShort();t.skip("uShort",3);for(var n=0;n1)for(var i=1;i-1?e:t}(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(i)}function c(t){var e=new FormData;return t.trim().split("&").forEach(function(t){if(t){var i=t.split("="),r=i.shift().replace(/\+/g," "),n=i.join("=").replace(/\+/g," ");e.append(decodeURIComponent(r),decodeURIComponent(n))}}),e}function p(t){var e=new n;return t.split(/\r?\n/).forEach(function(t){var i=t.split(":"),r=i.shift().trim();if(r){var n=i.join(":").trim();e.append(r,n)}}),e}function d(t,e){e||(e={}),this.type="default",this.status="status"in e?e.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new n(e.headers),this.url=e.url||"",this._initBody(t)}if(!t.fetch){var f={searchParams:"URLSearchParams"in t,iterable:"Symbol"in t&&"iterator"in Symbol,blob:"FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in t,arrayBuffer:"ArrayBuffer"in t};if(f.arrayBuffer)var m=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],y=function(t){return t&&DataView.prototype.isPrototypeOf(t)},v=ArrayBuffer.isView||function(t){return t&&m.indexOf(Object.prototype.toString.call(t))>-1};n.prototype.append=function(t,r){t=e(t),r=i(r);var n=this.map[t];this.map[t]=n?n+","+r:r},n.prototype.delete=function(t){delete this.map[e(t)]},n.prototype.get=function(t){return t=e(t),this.has(t)?this.map[t]:null},n.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},n.prototype.set=function(t,r){this.map[e(t)]=i(r)},n.prototype.forEach=function(t,e){for(var i in this.map)this.map.hasOwnProperty(i)&&t.call(e,this.map[i],i,this)},n.prototype.keys=function(){var t=[];return this.forEach(function(e,i){t.push(i)}),r(t)},n.prototype.values=function(){var t=[];return this.forEach(function(e){t.push(e)}),r(t)},n.prototype.entries=function(){var t=[];return this.forEach(function(e,i){t.push([i,e])}),r(t)},f.iterable&&(n.prototype[Symbol.iterator]=n.prototype.entries);var g=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];u.prototype.clone=function(){return new u(this,{body:this._bodyInit})},l.call(u.prototype),l.call(d.prototype),d.prototype.clone=function(){return new d(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new n(this.headers),url:this.url})},d.error=function(){var t=new d(null,{status:0,statusText:""});return t.type="error",t};var _=[301,302,303,307,308];d.redirect=function(t,e){if(-1===_.indexOf(e))throw new RangeError("Invalid status code");return new d(null,{status:e,headers:{location:t}})},t.Headers=n,t.Request=u,t.Response=d,t.fetch=function(t,e){return new Promise(function(i,r){var n=new u(t,e),o=new XMLHttpRequest;o.onload=function(){var t={status:o.status,statusText:o.statusText,headers:p(o.getAllResponseHeaders()||"")};t.url="responseURL"in o?o.responseURL:t.headers.get("X-Request-URL");var e="response"in o?o.response:o.responseText;i(new d(e,t))},o.onerror=function(){r(new TypeError("Network request failed"))},o.ontimeout=function(){r(new TypeError("Network request failed"))},o.open(n.method,n.url,!0),"include"===n.credentials&&(o.withCredentials=!0),"responseType"in o&&f.blob&&(o.responseType="blob"),n.headers.forEach(function(t,e){o.setRequestHeader(e,t)}),o.send(void 0===n._bodyInit?null:n._bodyInit)})},t.fetch.polyfill=!0}}("undefined"!=typeof self?self:this)},{}],13:[function(t,e,i){"use strict";var r=t("./core/main");t("./core/constants"),t("./core/environment"),t("./core/error_helpers"),t("./core/helpers"),t("./core/legacy"),t("./core/p5.Element"),t("./core/p5.Graphics"),t("./core/p5.Renderer"),t("./core/p5.Renderer2D"),t("./core/rendering"),t("./core/shim"),t("./core/structure"),t("./core/transform"),t("./core/shape/2d_primitives"),t("./core/shape/attributes"),t("./core/shape/curves"),t("./core/shape/vertex"),t("./color/color_conversion"),t("./color/creating_reading"),t("./color/p5.Color"),t("./color/setting"),t("./data/p5.TypedDict"),t("./events/acceleration"),t("./events/keyboard"),t("./events/mouse"),t("./events/touch"),t("./image/filters"),t("./image/image"),t("./image/loading_displaying"),t("./image/p5.Image"),t("./image/pixels"),t("./io/files"),t("./io/p5.Table"),t("./io/p5.TableRow"),t("./io/p5.XML"),t("./math/calculation"),t("./math/math"),t("./math/noise"),t("./math/p5.Vector"),t("./math/random"),t("./math/trigonometry"),t("./typography/attributes"),t("./typography/loading_displaying"),t("./typography/p5.Font"),t("./utilities/array_functions"),t("./utilities/conversion"),t("./utilities/string_functions"),t("./utilities/time_date"),t("./webgl/3d_primitives"),t("./webgl/interaction"),t("./webgl/light"),t("./webgl/loading"),t("./webgl/material"),t("./webgl/p5.Camera"),t("./webgl/p5.Geometry"),t("./webgl/p5.Matrix"),t("./webgl/p5.RendererGL.Immediate"),t("./webgl/p5.RendererGL"),t("./webgl/p5.RendererGL.Retained"),t("./webgl/p5.Shader"),t("./webgl/p5.Texture"),t("./webgl/text"),t("./core/init"),e.exports=r},{"./color/color_conversion":14,"./color/creating_reading":15,"./color/p5.Color":16,"./color/setting":17,"./core/constants":18,"./core/environment":19,"./core/error_helpers":20,"./core/helpers":21,"./core/init":22,"./core/legacy":23,"./core/main":24,"./core/p5.Element":25,"./core/p5.Graphics":26,"./core/p5.Renderer":27,"./core/p5.Renderer2D":28,"./core/rendering":29,"./core/shape/2d_primitives":30,"./core/shape/attributes":31,"./core/shape/curves":32,"./core/shape/vertex":33,"./core/shim":34,"./core/structure":35,"./core/transform":36,"./data/p5.TypedDict":37,"./events/acceleration":38,"./events/keyboard":39,"./events/mouse":40,"./events/touch":41,"./image/filters":42,"./image/image":43,"./image/loading_displaying":44,"./image/p5.Image":45,"./image/pixels":46,"./io/files":47,"./io/p5.Table":48,"./io/p5.TableRow":49,"./io/p5.XML":50,"./math/calculation":51,"./math/math":52,"./math/noise":53,"./math/p5.Vector":54,"./math/random":55,"./math/trigonometry":56,"./typography/attributes":57,"./typography/loading_displaying":58,"./typography/p5.Font":59,"./utilities/array_functions":60,"./utilities/conversion":61,"./utilities/string_functions":62,"./utilities/time_date":63,"./webgl/3d_primitives":64,"./webgl/interaction":65,"./webgl/light":66,"./webgl/loading":67,"./webgl/material":68,"./webgl/p5.Camera":69,"./webgl/p5.Geometry":70,"./webgl/p5.Matrix":71,"./webgl/p5.RendererGL":74,"./webgl/p5.RendererGL.Immediate":72,"./webgl/p5.RendererGL.Retained":73,"./webgl/p5.Shader":75,"./webgl/p5.Texture":76,"./webgl/text":77}],14:[function(t,e,i){"use strict";var r=t("../core/main");r.ColorConversion={},r.ColorConversion._hsbaToHSLA=function(t){var e=t[0],i=t[1],r=t[2],n=(2-i)*r/2;return 0!==n&&(1===n?i=0:n<.5?i/=2-i:i=i*r/(2-2*n)),[e,i,n,t[3]]},r.ColorConversion._hsbaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s,a,h=Math.floor(e),l=r*(1-i),u=r*(1-i*(e-h)),c=r*(1-i*(1+h-e));1===h?(o=u,s=r,a=l):2===h?(o=l,s=r,a=c):3===h?(o=l,s=u,a=r):4===h?(o=c,s=l,a=r):5===h?(o=r,s=l,a=u):(o=r,s=c,a=l),n=[o,s,a,t[3]]}return n},r.ColorConversion._hslaToHSBA=function(t){var e,i=t[0],r=t[1],n=t[2];return[i,r=2*((e=n<.5?(1+r)*n:n+r-n*r)-n)/e,e,t[3]]},r.ColorConversion._hslaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s=2*r-(o=r<.5?(1+i)*r:r+i-r*i),a=function(t,e,i){return t<0?t+=6:t>=6&&(t-=6),t<1?e+(i-e)*t:t<3?i:t<4?e+(i-e)*(4-t):e};n=[a(e+2,s,o),a(e,s,o),a(e-2,s,o),t[3]]}return n},r.ColorConversion._rgbaToHSBA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=s-Math.min(r,n,o);return 0===a?(e=0,i=0):(i=a/s,r===s?e=(n-o)/a:n===s?e=2+(o-r)/a:o===s&&(e=4+(r-n)/a),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,s,t[3]]},r.ColorConversion._rgbaToHSLA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=Math.min(r,n,o),h=s+a,l=s-a;return 0===l?(e=0,i=0):(i=h<1?l/h:l/(2-h),r===s?e=(n-o)/l:n===s?e=2+(o-r)/l:o===s&&(e=4+(r-n)/l),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,h/2,t[3]]},e.exports=r.ColorConversion},{"../core/main":24}],15:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),t("../core/error_helpers"),r.prototype.alpha=function(t){return r._validateParameters("alpha",arguments),this.color(t)._getAlpha()},r.prototype.blue=function(t){return r._validateParameters("blue",arguments),this.color(t)._getBlue()},r.prototype.brightness=function(t){return r._validateParameters("brightness",arguments),this.color(t)._getBrightness()},r.prototype.color=function(){if(r._validateParameters("color",arguments),arguments[0]instanceof r.Color)return arguments[0];var t=arguments[0]instanceof Array?arguments[0]:arguments;return new r.Color(this,t)},r.prototype.green=function(t){return r._validateParameters("green",arguments),this.color(t)._getGreen()},r.prototype.hue=function(t){return r._validateParameters("hue",arguments),this.color(t)._getHue()},r.prototype.lerpColor=function(t,e,i){r._validateParameters("lerpColor",arguments);var o,s,a,h,l,u,c=this._colorMode,p=this._colorMaxes;if(c===n.RGB)l=t.levels.map(function(t){return t/255}),u=e.levels.map(function(t){return t/255});else if(c===n.HSB)t._getBrightness(),e._getBrightness(),l=t.hsba,u=e.hsba;else{if(c!==n.HSL)throw new Error(c+"cannot be used for interpolation.");t._getLightness(),e._getLightness(),l=t.hsla,u=e.hsla}return i=Math.max(Math.min(i,1),0),void 0===this.lerp&&(this.lerp=function(t,e,i){return i*(e-t)+t}),o=this.lerp(l[0],u[0],i),s=this.lerp(l[1],u[1],i),a=this.lerp(l[2],u[2],i),h=this.lerp(l[3],u[3],i),o*=p[c][0],s*=p[c][1],a*=p[c][2],h*=p[c][3],this.color(o,s,a,h)},r.prototype.lightness=function(t){return r._validateParameters("lightness",arguments),this.color(t)._getLightness()},r.prototype.red=function(t){return r._validateParameters("red",arguments),this.color(t)._getRed()},r.prototype.saturation=function(t){return r._validateParameters("saturation",arguments),this.color(t)._getSaturation()},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"./p5.Color":16}],16:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("./color_conversion");r.Color=function(t,e){if(this._storeModeAndMaxes(t._colorMode,t._colorMaxes),this.mode!==n.RGB&&this.mode!==n.HSL&&this.mode!==n.HSB)throw new Error(this.mode+" is an invalid colorMode.");return this._array=r.Color._parseInputs.apply(this,e),this._calculateLevels(),this},r.Color.prototype.toString=function(t){this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsla||(this.hsla=o._rgbaToHSLA(this._array));var e=this.levels,i=this._array,r=i[3];switch(t){case"#rrggbb":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16));case"#rrggbbaa":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16),e[3]<16?"0".concat(e[2].toString(16)):e[3].toString(16));case"#rgb":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16));case"#rgba":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16),Math.round(15*i[3]).toString(16));case"rgb":return"rgb(".concat(e[0],", ",e[1],", ",e[2],")");case"rgb%":return"rgb(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%)");case"rgba%":return"rgba(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%, ",(100*i[3]).toPrecision(3),"%)");case"hsb":case"hsv":return"hsb(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],")");case"hsb%":case"hsv%":return"hsb(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%)");case"hsba":case"hsva":return"hsba(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],", ",r,")");case"hsba%":case"hsva%":return"hsba(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"hsl":return"hsl(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],")");case"hsl%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%)");case"hsla":return"hsla(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],", ",r,")");case"hsla%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"rgba":default:return"rgba("+e[0]+","+e[1]+","+e[2]+","+r+")"}},r.Color.prototype.setRed=function(t){this._array[0]=t/this.maxes[n.RGB][0],this._calculateLevels()},r.Color.prototype.setGreen=function(t){this._array[1]=t/this.maxes[n.RGB][1],this._calculateLevels()},r.Color.prototype.setBlue=function(t){this._array[2]=t/this.maxes[n.RGB][2],this._calculateLevels()},r.Color.prototype.setAlpha=function(t){this._array[3]=t/this.maxes[this.mode][3],this._calculateLevels()},r.Color.prototype._calculateLevels=function(){for(var t=this._array,e=this.levels=new Array(t.length),i=t.length-1;i>=0;--i)e[i]=Math.round(255*t[i])},r.Color.prototype._getAlpha=function(){return this._array[3]*this.maxes[this.mode][3]},r.Color.prototype._storeModeAndMaxes=function(t,e){this.mode=t,this.maxes=e},r.Color.prototype._getMode=function(){return this.mode},r.Color.prototype._getMaxes=function(){return this.maxes},r.Color.prototype._getBlue=function(){return this._array[2]*this.maxes[n.RGB][2]},r.Color.prototype._getBrightness=function(){return this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[2]*this.maxes[n.HSB][2]},r.Color.prototype._getGreen=function(){return this._array[1]*this.maxes[n.RGB][1]},r.Color.prototype._getHue=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[0]*this.maxes[n.HSB][0]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[0]*this.maxes[n.HSL][0])},r.Color.prototype._getLightness=function(){return this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[2]*this.maxes[n.HSL][2]},r.Color.prototype._getRed=function(){return this._array[0]*this.maxes[n.RGB][0]},r.Color.prototype._getSaturation=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[1]*this.maxes[n.HSB][1]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[1]*this.maxes[n.HSL][1])};var s={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},a=/\s*/,h=/(\d{1,3})/,l=/((?:\d+(?:\.\d+)?)|(?:\.\d+))/,u=new RegExp(l.source+"%"),c={HEX3:/^#([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX4:/^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX6:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,HEX8:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,RGB:new RegExp(["^rgb\\(",h.source,",",h.source,",",h.source,"\\)$"].join(a.source),"i"),RGB_PERCENT:new RegExp(["^rgb\\(",u.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),RGBA:new RegExp(["^rgba\\(",h.source,",",h.source,",",h.source,",",l.source,"\\)$"].join(a.source),"i"),RGBA_PERCENT:new RegExp(["^rgba\\(",u.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSL:new RegExp(["^hsl\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSLA:new RegExp(["^hsla\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSB:new RegExp(["^hsb\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSBA:new RegExp(["^hsba\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i")};r.Color._parseInputs=function(t,e,i,a){var h,l=arguments.length,u=this.mode,p=this.maxes[u],d=[];if(l>=3){for(d[0]=t/p[0],d[1]=e/p[1],d[2]=i/p[2],d[3]="number"==typeof a?a/p[3]:1,h=d.length-1;h>=0;--h){var f=d[h];f<0?d[h]=0:f>1&&(d[h]=1)}return u===n.HSL?o._hslaToRGBA(d):u===n.HSB?o._hsbaToRGBA(d):d}if(1===l&&"string"==typeof t){var m=t.trim().toLowerCase();if(s[m])return r.Color._parseInputs.call(this,s[m]);if(c.HEX3.test(m))return(d=c.HEX3.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255}))[3]=1,d;if(c.HEX6.test(m))return(d=c.HEX6.exec(m).slice(1).map(function(t){return parseInt(t,16)/255}))[3]=1,d;if(c.HEX4.test(m))return d=c.HEX4.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255});if(c.HEX8.test(m))return d=c.HEX8.exec(m).slice(1).map(function(t){return parseInt(t,16)/255});if(c.RGB.test(m))return(d=c.RGB.exec(m).slice(1).map(function(t){return t/255}))[3]=1,d;if(c.RGB_PERCENT.test(m))return(d=c.RGB_PERCENT.exec(m).slice(1).map(function(t){return parseFloat(t)/100}))[3]=1,d;if(c.RGBA.test(m))return d=c.RGBA.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):t/255});if(c.RGBA_PERCENT.test(m))return d=c.RGBA_PERCENT.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):parseFloat(t)/100});if(c.HSL.test(m)?(d=c.HSL.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSLA.test(m)&&(d=c.HSLA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),(d=d.map(function(t){return Math.max(Math.min(t,1),0)})).length)return o._hslaToRGBA(d);if(c.HSB.test(m)?(d=c.HSB.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSBA.test(m)&&(d=c.HSBA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),d.length){for(h=d.length-1;h>=0;--h)d[h]=Math.max(Math.min(d[h],1),0);return o._hsbaToRGBA(d)}d=[1,1,1,1]}else{if(1!==l&&2!==l||"number"!=typeof t)throw new Error(arguments+"is not a valid color representation.");d[0]=t/p[2],d[1]=t/p[2],d[2]=t/p[2],d[3]="number"==typeof e?e/p[3]:1,d=d.map(function(t){return Math.max(Math.min(t,1),0)})}return d},e.exports=r.Color},{"../core/constants":18,"../core/main":24,"./color_conversion":14}],17:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),r.prototype.background=function(){return arguments[0]instanceof r.Image?this.image(arguments[0],0,0,this.width,this.height):this._renderer.background.apply(this._renderer,arguments),this},r.prototype.clear=function(){return this._renderer.clear(),this},r.prototype.colorMode=function(t,e,i,o,s){if(r._validateParameters("colorMode",arguments),t===n.RGB||t===n.HSB||t===n.HSL){this._colorMode=t;var a=this._colorMaxes[t];2===arguments.length?(a[0]=e,a[1]=e,a[2]=e,a[3]=e):4===arguments.length?(a[0]=e,a[1]=i,a[2]=o):5===arguments.length&&(a[0]=e,a[1]=i,a[2]=o,a[3]=s)}return this},r.prototype.fill=function(){return this._renderer._setProperty("_fillSet",!0),this._renderer._setProperty("_doFill",!0),this._renderer.fill.apply(this._renderer,arguments),this},r.prototype.noFill=function(){return this._renderer._setProperty("_doFill",!1),this},r.prototype.noStroke=function(){return this._renderer._setProperty("_doStroke",!1),this},r.prototype.stroke=function(){return this._renderer._setProperty("_strokeSet",!0),this._renderer._setProperty("_doStroke",!0),this._renderer.stroke.apply(this._renderer,arguments),this},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Color":16}],18:[function(t,e,i){"use strict";var r=Math.PI;e.exports={P2D:"p2d",WEBGL:"webgl",ARROW:"default",CROSS:"crosshair",HAND:"pointer",MOVE:"move",TEXT:"text",WAIT:"wait",HALF_PI:r/2,PI:r,QUARTER_PI:r/4,TAU:2*r,TWO_PI:2*r,DEGREES:"degrees",RADIANS:"radians",DEG_TO_RAD:r/180,RAD_TO_DEG:180/r,CORNER:"corner",CORNERS:"corners",RADIUS:"radius",RIGHT:"right",LEFT:"left",CENTER:"center",TOP:"top",BOTTOM:"bottom",BASELINE:"alphabetic",POINTS:0,LINES:1,LINE_STRIP:3,LINE_LOOP:2,TRIANGLES:4,TRIANGLE_FAN:6,TRIANGLE_STRIP:5,QUADS:"quads",QUAD_STRIP:"quad_strip",CLOSE:"close",OPEN:"open",CHORD:"chord",PIE:"pie",PROJECT:"square",SQUARE:"butt",ROUND:"round",BEVEL:"bevel",MITER:"miter",RGB:"rgb",HSB:"hsb",HSL:"hsl",AUTO:"auto",ALT:18,BACKSPACE:8,CONTROL:17,DELETE:46,DOWN_ARROW:40,ENTER:13,ESCAPE:27,LEFT_ARROW:37,OPTION:18,RETURN:13,RIGHT_ARROW:39,SHIFT:16,TAB:9,UP_ARROW:38,BLEND:"source-over",ADD:"lighter",DARKEST:"darken",LIGHTEST:"lighten",DIFFERENCE:"difference",EXCLUSION:"exclusion",MULTIPLY:"multiply",SCREEN:"screen",REPLACE:"copy",OVERLAY:"overlay",HARD_LIGHT:"hard-light",SOFT_LIGHT:"soft-light",DODGE:"color-dodge",BURN:"color-burn",THRESHOLD:"threshold",GRAY:"gray",OPAQUE:"opaque",INVERT:"invert",POSTERIZE:"posterize",DILATE:"dilate",ERODE:"erode",BLUR:"blur",NORMAL:"normal",ITALIC:"italic",BOLD:"bold",_DEFAULT_TEXT_FILL:"#000000",_DEFAULT_LEADMULT:1.25,_CTX_MIDDLE:"middle",LINEAR:"linear",QUADRATIC:"quadratic",BEZIER:"bezier",CURVE:"curve",STROKE:"stroke",FILL:"fill",TEXTURE:"texture",IMMEDIATE:"immediate",NEAREST:"nearest",REPEAT:"repeat",CLAMP:"clamp",MIRROR:"mirror",LANDSCAPE:"landscape",PORTRAIT:"portrait",_DEFAULT_STROKE:"#000000",_DEFAULT_FILL:"#FFFFFF",GRID:"grid",AXES:"axes"}},{}],19:[function(t,e,i){"use strict";function r(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth||0}function n(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight||0}var o=t("./main"),s=t("./constants"),a=[s.ARROW,s.CROSS,s.HAND,s.MOVE,s.TEXT,s.WAIT];o.prototype._frameRate=0,o.prototype._lastFrameTime=window.performance.now(),o.prototype._targetFrameRate=60;var h=window.print;o.prototype.print=function(){arguments.length?console.log.apply(console,arguments):h()},o.prototype.frameCount=0,o.prototype.focused=document.hasFocus(),o.prototype.cursor=function(t,e,i){var r="auto",n=this._curElement.elt;if(a.indexOf(t)>-1)r=t;else if("string"==typeof t){var o="";e&&i&&"number"==typeof e&&"number"==typeof i&&(o=e+" "+i),r="http://"===t.substring(0,7)||"https://"===t.substring(0,8)?"url("+t+") "+o+", auto":/\.(cur|jpg|jpeg|gif|png|CUR|JPG|JPEG|GIF|PNG)$/.test(t)?"url("+t+") "+o+", auto":t}n.style.cursor=r},o.prototype.frameRate=function(t){return o._validateParameters("frameRate",arguments),"number"!=typeof t||t<0?this._frameRate:(this._setProperty("_targetFrameRate",t),this._runFrames(),this)},o.prototype.getFrameRate=function(){return this.frameRate()},o.prototype.setFrameRate=function(t){return this.frameRate(t)},o.prototype.noCursor=function(){this._curElement.elt.style.cursor="none"},o.prototype.displayWidth=screen.width,o.prototype.displayHeight=screen.height,o.prototype.windowWidth=r(),o.prototype.windowHeight=n(),o.prototype._onresize=function(t){this._setProperty("windowWidth",r()),this._setProperty("windowHeight",n());var e,i=this._isGlobal?window:this;"function"==typeof i.windowResized&&(void 0===(e=i.windowResized(t))||e||t.preventDefault())},o.prototype.width=0,o.prototype.height=0,o.prototype.fullscreen=function(t){if(o._validateParameters("fullscreen",arguments),void 0===t)return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;t?function(t){if(!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled))throw new Error("Fullscreen not enabled in this browser.");t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.msRequestFullscreen&&t.msRequestFullscreen()}(document.documentElement):document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.msExitFullscreen&&document.msExitFullscreen()},o.prototype.pixelDensity=function(t){var e;return o._validateParameters("pixelDensity",arguments),"number"==typeof t?(t!==this._pixelDensity&&(this._pixelDensity=t,this._pixelsDirty=!0),e=this,this.resizeCanvas(this.width,this.height,!0)):e=this._pixelDensity,e},o.prototype.displayDensity=function(){return window.devicePixelRatio},o.prototype.getURL=function(){return location.href},o.prototype.getURLPath=function(){return location.pathname.split("/").filter(function(t){return""!==t})},o.prototype.getURLParams=function(){for(var t,e=/[?&]([^&=]+)(?:[&=])([^&=]+)/gim,i={};null!=(t=e.exec(location.search));)t.index===e.lastIndex&&e.lastIndex++,i[t[1]]=t[2];return i},e.exports=o},{"./constants":18,"./main":24}],20:[function(t,e,i){"use strict";var r=t("./main");t("./constants"),r._validateParameters=r._friendlyFileLoadError=function(){};var n=null,o=function(){var e={},i=function(t){return Object.getOwnPropertyNames(t).filter(function(t){return!("_"===t[0]||t in e||(e[t]=!0,0))}).map(function(e){var i;return i="function"==typeof t[e]?"function":e===e.toUpperCase()?"constant":"variable",{name:e,type:i}})};(n=[].concat(i(r.prototype),i(t("./constants")))).sort(function(t,e){return e.name.length-t.name.length})},s=function(t,e){e||(e=console.log.bind(console)),n||o(),n.some(function(i){if(t.message&&null!==t.message.match("\\W?"+i.name+"\\W"))return e("Did you just try to use p5.js's "+i.name+("function"===i.type?"() ":" ")+i.type+"? If so, you may want to move it into your sketch's setup() function.\n\nFor more details, see: https://github.com/processing/p5.js/wiki/p5.js-overview#why-cant-i-assign-variables-using-p5-functions-and-variables-before-setup"),!0})};r.prototype._helpForMisusedAtTopLevelCode=s,"complete"!==document.readyState&&(window.addEventListener("error",s,!1),window.addEventListener("load",function(){window.removeEventListener("error",s,!1)})),e.exports=r},{"../../docs/reference/data.json":void 0,"./constants":18,"./main":24}],21:[function(t,e,i){"use strict";var r=t("./constants");e.exports={modeAdjust:function(t,e,i,n,o){return o===r.CORNER?{x:t,y:e,w:i,h:n}:o===r.CORNERS?{x:t,y:e,w:i-t,h:n-e}:o===r.RADIUS?{x:t-i,y:e-n,w:2*i,h:2*n}:o===r.CENTER?{x:t-.5*i,y:e-.5*n,w:i,h:n}:void 0}}},{"./constants":18}],22:[function(t,e,i){"use strict";var r=t("../core/main"),n=function(){window.mocha||(window.setup&&"function"==typeof window.setup||window.draw&&"function"==typeof window.draw)&&!r.instance&&new r};"complete"===document.readyState?n():window.addEventListener("load",n,!1)},{"../core/main":24}],23:[function(t,e,i){"use strict";var r=t("./main");r.prototype.exit=function(){throw new Error("exit() not implemented, see remove()")},r.prototype.pushStyle=function(){throw new Error("pushStyle() not used, see push()")},r.prototype.popStyle=function(){throw new Error("popStyle() not used, see pop()")},r.prototype.size=function(){var t="size() is not a valid p5 function, to set the size of the ";throw new Error(t+="drawing canvas, please use createCanvas() instead")},e.exports=r},{"./main":24}],24:[function(t,e,i){"use strict";t("./shim");var r=t("./constants"),n=function(t,e,i){"boolean"==typeof e&&void 0===i&&(i=e,e=void 0),this._setupDone=!1,this._pixelDensity=Math.ceil(window.devicePixelRatio)||1,this._userNode=e,this._curElement=null,this._elements=[],this._requestAnimId=0,this._preloadCount=0,this._isGlobal=!1,this._loop=!0,this._initializeInstanceVariables(),this._defaultCanvasSize={width:100,height:100},this._events={mousemove:null,mousedown:null,mouseup:null,dragend:null,dragover:null,click:null,dblclick:null,mouseover:null,mouseout:null,keydown:null,keyup:null,keypress:null,touchstart:null,touchmove:null,touchend:null,resize:null,blur:null},this._events.wheel=null,this._loadingScreenId="p5_loading",this._registeredMethods={};for(var r=Object.getOwnPropertyNames(n.prototype._registeredMethods),o=0;o=i-5)&&(this.redraw(),this._frameRate=1e3/(t-this._lastFrameTime),this._lastFrameTime=t,void 0!==this._updateMouseCoords&&this._updateMouseCoords()),this._loop&&(this._requestAnimId=window.requestAnimationFrame(this._draw))}.bind(this),this._runFrames=function(){this._updateInterval&&clearInterval(this._updateInterval)}.bind(this),this._setProperty=function(t,e){this[t]=e,this._isGlobal&&(window[t]=e)}.bind(this),this.remove=function(){var t=document.getElementById(this._loadingScreenId);if(t&&(t.parentNode.removeChild(t),this._incrementPreload()),this._curElement){for(var e in this._loop=!1,this._requestAnimId&&window.cancelAnimationFrame(this._requestAnimId),this._events)window.removeEventListener(e,this._events[e]);for(var i=0;i-1?o.readAsText(n):o.readAsDataURL(n)}},this)):console.log("The File APIs are not fully supported in this browser."),this},s.Element.prototype._setProperty=function(t,e){this[t]=e},e.exports=s.Element},{"./main":24}],26:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");r.Graphics=function(t,e,i,o){var s=i||n.P2D;for(var a in this.canvas=document.createElement("canvas"),(o._userNode||document.body).appendChild(this.canvas),r.Element.call(this,this.canvas,o,!1),r.prototype)this[a]||("function"==typeof r.prototype[a]?this[a]=r.prototype[a].bind(this):this[a]=r.prototype[a]);return r.prototype._initializeInstanceVariables.apply(this),this.width=t,this.height=e,this._pixelDensity=o._pixelDensity,s===n.WEBGL?this._renderer=new r.RendererGL(this.canvas,this,!1):this._renderer=new r.Renderer2D(this.canvas,this,!1),o._elements.push(this),this._renderer.resize(t,e),this._renderer._applyDefaults(),this},r.Graphics.prototype=Object.create(r.Element.prototype),r.Graphics.prototype.remove=function(){this.elt.parentNode&&this.elt.parentNode.removeChild(this.elt);var t=this._pInst._elements.indexOf(this);for(var e in-1!==t&&this._pInst._elements.splice(t,1),this._events)this.elt.removeEventListener(e,this._events[e])},e.exports=r.Graphics},{"./constants":18,"./main":24}],27:[function(t,e,i){"use strict";function r(t){var e=0,i=0;if(t.offsetParent)do{e+=t.offsetLeft,i+=t.offsetTop}while(t=t.offsetParent);else e+=t.offsetLeft,i+=t.offsetTop;return[e,i]}var n=t("./main"),o=t("../core/constants");n.Renderer=function(t,e,i){n.Element.call(this,t,e),this.canvas=t,i?(this._isMainCanvas=!0,this._pInst._setProperty("_curElement",this),this._pInst._setProperty("canvas",this.canvas),this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height)):(this.canvas.style.display="none",this._styles=[]),this._textSize=12,this._textLeading=15,this._textFont="sans-serif",this._textStyle=o.NORMAL,this._textAscent=null,this._textDescent=null,this._textAlign=o.LEFT,this._textBaseline=o.BASELINE,this._rectMode=o.CORNER,this._ellipseMode=o.CENTER,this._curveTightness=0,this._imageMode=o.CORNER,this._tint=null,this._doStroke=!0,this._doFill=!0,this._strokeSet=!1,this._fillSet=!1},n.Renderer.prototype=Object.create(n.Element.prototype),n.Renderer.prototype.push=function(){return{properties:{_doStroke:this._doStroke,_strokeSet:this._strokeSet,_doFill:this._doFill,_fillSet:this._fillSet,_tint:this._tint,_imageMode:this._imageMode,_rectMode:this._rectMode,_ellipseMode:this._ellipseMode,_textFont:this._textFont,_textLeading:this._textLeading,_textSize:this._textSize,_textAlign:this._textAlign,_textBaseline:this._textBaseline,_textStyle:this._textStyle}}},n.Renderer.prototype.pop=function(t){t.properties&&Object.assign(this,t.properties)},n.Renderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.elt.width=t*this._pInst._pixelDensity,this.elt.height=e*this._pInst._pixelDensity,this.elt.style.width=t+"px",this.elt.style.height=e+"px",this._isMainCanvas&&(this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height))},n.Renderer.prototype.textLeading=function(t){return"number"==typeof t?(this._setProperty("_textLeading",t),this._pInst):this._textLeading},n.Renderer.prototype.textSize=function(t){return"number"==typeof t?(this._setProperty("_textSize",t),this._setProperty("_textLeading",t*o._DEFAULT_LEADMULT),this._applyTextProperties()):this._textSize},n.Renderer.prototype.textStyle=function(t){return t?(t!==o.NORMAL&&t!==o.ITALIC&&t!==o.BOLD||this._setProperty("_textStyle",t),this._applyTextProperties()):this._textStyle},n.Renderer.prototype.textAscent=function(){return null===this._textAscent&&this._updateTextMetrics(),this._textAscent},n.Renderer.prototype.textDescent=function(){return null===this._textDescent&&this._updateTextMetrics(),this._textDescent},n.Renderer.prototype.textAlign=function(t,e){return void 0!==t?(this._setProperty("_textAlign",t),void 0!==e&&this._setProperty("_textBaseline",e),this._applyTextProperties()):{horizontal:this._textAlign,vertical:this._textBaseline}},n.Renderer.prototype.text=function(t,e,i,r,n){var s,a,h,l,u,c,p,d,f=this._pInst,m=Number.MAX_VALUE;if((this._doFill||this._doStroke)&&void 0!==t){if("string"!=typeof t&&(t=t.toString()),t=t.replace(/(\t)/g," "),s=t.split("\n"),void 0!==r){for(d=0,h=0;hr?(u=p[a]+" ",d+=f.textLeading()):u=c;switch(this._rectMode===o.CENTER&&(e-=r/2,i-=n/2),this._textAlign){case o.CENTER:e+=r/2;break;case o.RIGHT:e+=r}var y=!1;if(void 0!==n){switch(this._textBaseline){case o.BOTTOM:i+=n-d;break;case o.CENTER:i+=(n-d)/2;break;case o.BASELINE:y=!0,this._textBaseline=o.TOP}m=i+n-f.textAscent()}for(h=0;hr&&u.length>0?(this._renderText(f,u,e,i,m),u=p[a]+" ",i+=f.textLeading()):u=c;this._renderText(f,u,e,i,m),i+=f.textLeading(),y&&(this._textBaseline=o.BASELINE)}}else{var v=0,g=f.textAlign().vertical;for(g===o.CENTER?v=(s.length-1)*f.textLeading()/2:g===o.BOTTOM&&(v=(s.length-1)*f.textLeading()),l=0;l0&&(c=u.width/t.width),this.drawingContext.drawImage(u,c*e,c*i,c*n,c*o,s,a,h,l)}catch(t){if("NS_ERROR_NOT_AVAILABLE"!==t.name)throw t}this._pInst._pixelsDirty=!0},r.Renderer2D.prototype._getTintedImageCanvas=function(t){if(!t.canvas)return t;var e=o._toPixels(t.canvas),i=document.createElement("canvas");i.width=t.canvas.width,i.height=t.canvas.height;for(var r=i.getContext("2d"),n=r.createImageData(t.canvas.width,t.canvas.height),s=n.data,a=0;a=this.width||e>=this.height)return[0,0,0,255];var o=this._pInst||this,s=o._pixelDensity;t=Math.floor(t),e=Math.floor(e),i=Math.floor(i),n=Math.floor(n);var a,h,l=t*s,u=e*s;if(1!==i||1!==n||this instanceof r.RendererGL){var c=Math.min(i,o.width),p=Math.min(n,o.height),d=c*s,f=p*s,m=new r.Image(c,p);return m.canvas.getContext("2d").drawImage(this.canvas,l,u,d,f,0,0,c,p),m}return o._pixelsDirty?(a=this.drawingContext.getImageData(l,u,1,1).data,h=0):(a=o.pixels,h=4*(l+u*this.width*s)),[a[h+0],a[h+1],a[h+2],a[h+3]]},r.Renderer2D.prototype.loadPixels=function(){var t=this._pInst||this;if(t._pixelsDirty){t._pixelsDirty=!1;var e=t._pixelDensity,i=this.width*e,r=this.height*e,n=this.drawingContext.getImageData(0,0,i,r);t._setProperty("imageData",n),t._setProperty("pixels",n.data)}},r.Renderer2D.prototype.set=function(t,e,i){t=Math.floor(t),e=Math.floor(e);var n=this._pInst||this;if(i instanceof r.Image)this.drawingContext.save(),this.drawingContext.setTransform(1,0,0,1,0,0),this.drawingContext.scale(n._pixelDensity,n._pixelDensity),this.drawingContext.drawImage(i.canvas,t,e),this.drawingContext.restore(),n._pixelsDirty=!0;else{var o=0,s=0,a=0,h=0,l=4*(e*n._pixelDensity*(this.width*n._pixelDensity)+t*n._pixelDensity);if(n.imageData&&!n._pixelsDirty||n.loadPixels.call(n),"number"==typeof i)l1e-5;)c=Math.min(s-o,n.HALF_PI),p.push(this._acuteArcToBezier(o,c)),o+=c;return this._doFill&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a!==n.PIE&&null!=a||h.lineTo(t,e),h.closePath(),h.fill()),this._doStroke&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a===n.PIE?(h.lineTo(t,e),h.closePath()):a===n.CHORD&&h.closePath(),h.stroke()),this},r.Renderer2D.prototype.ellipse=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;var l=.5522847498,u=a/2*l,c=h/2*l,p=n+a,d=o+h,f=n+a/2,m=o+h/2;e.beginPath(),e.moveTo(n,m),e.bezierCurveTo(n,m-c,f-u,o,f,o),e.bezierCurveTo(f+u,o,p,m-c,p,m),e.bezierCurveTo(p,m+c,f+u,d,f,d),e.bezierCurveTo(f-u,d,n,m+c,n,m),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.line=function(t,e,i,r){var n=this.drawingContext;return this._doStroke?this._getStroke()===s?this:(n.lineWidth%2==1&&n.translate(.5,.5),n.beginPath(),n.moveTo(t,e),n.lineTo(i,r),n.stroke(),n.lineWidth%2==1&&n.translate(-.5,-.5),this):this},r.Renderer2D.prototype.point=function(t,e){var i=this.drawingContext;if(!this._doStroke)return this;if(this._getStroke()===s)return this;var r=this._getStroke(),o=this._getFill();t=Math.round(t),e=Math.round(e),this._setFill(r),i.lineWidth>1?(i.beginPath(),i.arc(t,e,i.lineWidth/2,0,n.TWO_PI,!1),i.fill()):i.fillRect(t,e,1,1),this._setFill(o)},r.Renderer2D.prototype.quad=function(t,e,i,r,n,o,a,h){var l=this.drawingContext,u=this._doFill,c=this._doStroke;if(u&&!c){if(this._getFill()===s)return this}else if(!u&&c&&this._getStroke()===s)return this;return l.beginPath(),l.moveTo(t,e),l.lineTo(i,r),l.lineTo(n,o),l.lineTo(a,h),l.closePath(),u&&l.fill(),c&&l.stroke(),this},r.Renderer2D.prototype.rect=function(t){var e=t[0],i=t[1],r=t[2],n=t[3],o=t[4],a=t[5],h=t[6],l=t[7],u=this.drawingContext,c=this._doFill,p=this._doStroke;if(c&&!p){if(this._getFill()===s)return this}else if(!c&&p&&this._getStroke()===s)return this;if(this._doStroke&&u.lineWidth%2==1&&u.translate(.5,.5),u.beginPath(),void 0===o)u.rect(e,i,r,n);else{void 0===a&&(a=o),void 0===h&&(h=a),void 0===l&&(l=h);var d=r/2,f=n/2;r<2*o&&(o=d),n<2*o&&(o=f),r<2*a&&(a=d),n<2*a&&(a=f),r<2*h&&(h=d),n<2*h&&(h=f),r<2*l&&(l=d),n<2*l&&(l=f),u.beginPath(),u.moveTo(e+o,i),u.arcTo(e+r,i,e+r,i+n,a),u.arcTo(e+r,i+n,e,i+n,h),u.arcTo(e,i+n,e,i,l),u.arcTo(e,i,e+r,i,o),u.closePath()}return this._doFill&&u.fill(),this._doStroke&&u.stroke(),this._doStroke&&u.lineWidth%2==1&&u.translate(-.5,-.5),this},r.Renderer2D.prototype.triangle=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3],l=t[4],u=t[5];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;e.beginPath(),e.moveTo(n,o),e.lineTo(a,h),e.lineTo(l,u),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.endShape=function(t,e,i,r,o,s,a){if(0===e.length)return this;if(!this._doStroke&&!this._doFill)return this;var h,l=t===n.CLOSE;l&&!s&&e.push(e[0]);var u,c,p=e.length;if(!i||a!==n.POLYGON&&null!==a)if(!r||a!==n.POLYGON&&null!==a)if(!o||a!==n.POLYGON&&null!==a)if(a===n.POINTS)for(u=0;u2){for(this.drawingContext.beginPath(),u=2;u3)for(u=0;u+13){var d=[],f=1-this._curveTightness;for(this.drawingContext.beginPath(),this.drawingContext.moveTo(e[1][0],e[1][1]),u=1;u+2=o))return t.push(),this._isOpenType()?this._textFont._renderPath(e,i,r,{renderer:this}):(this._doStroke&&this._strokeSet&&this.drawingContext.strokeText(e,i,r),this._doFill&&(this._fillSet||this._setFill(n._DEFAULT_TEXT_FILL),this.drawingContext.fillText(e,i,r))),t.pop(),this._pInst._pixelsDirty=!0,t},r.Renderer2D.prototype.textWidth=function(t){return this._isOpenType()?this._textFont._textWidth(t,this._textSize):this.drawingContext.measureText(t).width},r.Renderer2D.prototype._applyTextProperties=function(){var t,e=this._pInst;return this._setProperty("_textAscent",null),this._setProperty("_textDescent",null),t=this._textFont,this._isOpenType()&&(t=this._textFont.font.familyName,this._setProperty("_textStyle",this._textFont.font.styleName)),this.drawingContext.font=(this._textStyle||"normal")+" "+(this._textSize||12)+"px "+(t||"sans-serif"),this.drawingContext.textAlign=this._textAlign,this._textBaseline===n.CENTER?this.drawingContext.textBaseline=n._CTX_MIDDLE:this.drawingContext.textBaseline=this._textBaseline,e},r.Renderer2D.prototype.push=function(){return this.drawingContext.save(),r.Renderer.prototype.push.apply(this)},r.Renderer2D.prototype.pop=function(t){this.drawingContext.restore(),this._cachedFillStyle=this.drawingContext.fillStyle,this._cachedStrokeStyle=this.drawingContext.strokeStyle,r.Renderer.prototype.pop.call(this,t)},e.exports=r.Renderer2D},{"../image/filters":42,"./constants":18,"./main":24,"./p5.Renderer":27}],29:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");t("./p5.Graphics"),t("./p5.Renderer2D"),t("../webgl/p5.RendererGL");var o="defaultCanvas0",s="p5Canvas";r.prototype.createCanvas=function(t,e,i){r._validateParameters("createCanvas",arguments);var a,h=i||n.P2D;if(h===n.WEBGL){if(a=document.getElementById(o)){a.parentNode.removeChild(a);var l=this._renderer;this._elements=this._elements.filter(function(t){return t!==l})}(a=document.createElement("canvas")).id=o,a.classList.add(s)}else if(this._defaultGraphicsCreated)a=this.canvas;else{a=document.createElement("canvas");for(var u=0;document.getElementById("defaultCanvas"+u);)u++;o="defaultCanvas"+u,a.id=o,a.classList.add(s)}return this._setupDone||(a.dataset.hidden=!0,a.style.visibility="hidden"),this._userNode?this._userNode.appendChild(a):document.body.appendChild(a),h===n.WEBGL?(this._setProperty("_renderer",new r.RendererGL(a,this,!0)),this._elements.push(this._renderer)):this._defaultGraphicsCreated||(this._setProperty("_renderer",new r.Renderer2D(a,this,!0)),this._defaultGraphicsCreated=!0,this._elements.push(this._renderer)),this._renderer.resize(t,e),this._renderer._applyDefaults(),this._renderer},r.prototype.resizeCanvas=function(t,e,i){if(r._validateParameters("resizeCanvas",arguments),this._renderer){var n={};for(var o in this.drawingContext){var s=this.drawingContext[o];"object"!=typeof s&&"function"!=typeof s&&(n[o]=s)}for(var a in this._renderer.resize(t,e),this.width=t,this.height=e,n)try{this.drawingContext[a]=n[a]}catch(t){}i||this.redraw()}},r.prototype.noCanvas=function(){this.canvas&&this.canvas.parentNode.removeChild(this.canvas)},r.prototype.createGraphics=function(t,e,i){return r._validateParameters("createGraphics",arguments),new r.Graphics(t,e,i,this)},r.prototype.blendMode=function(t){if(r._validateParameters("blendMode",arguments),t!==n.BLEND&&t!==n.DARKEST&&t!==n.LIGHTEST&&t!==n.DIFFERENCE&&t!==n.MULTIPLY&&t!==n.EXCLUSION&&t!==n.SCREEN&&t!==n.REPLACE&&t!==n.OVERLAY&&t!==n.HARD_LIGHT&&t!==n.SOFT_LIGHT&&t!==n.DODGE&&t!==n.BURN&&t!==n.ADD&&t!==n.NORMAL)throw new Error("Mode "+t+" not recognized.");this._renderer.blendMode(t)},e.exports=r},{"../webgl/p5.RendererGL":74,"./constants":18,"./main":24,"./p5.Graphics":26,"./p5.Renderer2D":28}],30:[function(t,e,i){"use strict";var r=t("../main"),n=t("../constants"),o=t("../helpers");t("../error_helpers"),r.prototype.arc=function(t,e,i,s,a,h,l,u){if(r._validateParameters("arc",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;for(a=this._toRadians(a),h=this._toRadians(h);a<0;)a+=n.TWO_PI;for(;h<0;)h+=n.TWO_PI;void 0!==a&&void 0!==h&&(h.toFixed(10)===a.toFixed(10)||Math.abs(h-a)===n.TWO_PI?(a%=n.TWO_PI,h%=n.TWO_PI,a+=n.TWO_PI):Math.abs(h-a)>n.TWO_PI&&(a%=n.TWO_PI,h%=n.TWO_PI,h+=n.TWO_PI)),a<=n.HALF_PI?a=Math.atan(i/s*Math.tan(a)):a>n.HALF_PI&&a<=3*n.HALF_PI&&(a=Math.atan(i/s*Math.tan(a))+n.PI),h<=n.HALF_PI?h=Math.atan(i/s*Math.tan(h)):h>n.HALF_PI&&h<=3*n.HALF_PI&&(h=Math.atan(i/s*Math.tan(h))+n.PI),a>h&&(h+=n.TWO_PI),i=Math.abs(i),s=Math.abs(s);var c=o.modeAdjust(t,e,i,s,this._renderer._ellipseMode);return this._renderer.arc(c.x,c.y,c.w,c.h,a,h,l,u),this},r.prototype.ellipse=function(t,e,i,n,s){if(r._validateParameters("ellipse",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;i<0&&(i=Math.abs(i)),void 0===n?n=i:n<0&&(n=Math.abs(n));var a=o.modeAdjust(t,e,i,n,this._renderer._ellipseMode);return this._renderer.ellipse([a.x,a.y,a.w,a.h,s]),this},r.prototype.line=function(){return r._validateParameters("line",arguments),this._renderer._doStroke&&this._renderer.line.apply(this._renderer,arguments),this},r.prototype.point=function(){return r._validateParameters("point",arguments),this._renderer._doStroke&&this._renderer.point.apply(this._renderer,arguments),this},r.prototype.quad=function(){return r._validateParameters("quad",arguments),(this._renderer._doStroke||this._renderer._doFill)&&this._renderer.quad.apply(this._renderer,arguments),this},r.prototype.rect=function(){if(r._validateParameters("rect",arguments),this._renderer._doStroke||this._renderer._doFill){for(var t=o.modeAdjust(arguments[0],arguments[1],arguments[2],arguments[3],this._renderer._rectMode),e=[t.x,t.y,t.w,t.h],i=4;i0))throw new Error("vertex() must be used once before calling quadraticVertex()");u=!0;for(var e=[],i=0;id||Math.abs(this.accelerationY-this.pAccelerationY)>d||Math.abs(this.accelerationZ-this.pAccelerationZ)>d)&&t();var e=this.deviceTurned||window.deviceTurned;if("function"==typeof e){var i=this.rotationX+180,r=this.pRotationX+180,m=a+180;i-r>0&&i-r<270||i-r<-270?u="clockwise":(i-r<0||i-r>270)&&(u="counter-clockwise"),u!==n&&(m=i),Math.abs(i-m)>90&&Math.abs(i-m)<270&&(m=i,this._setProperty("turnAxis","X"),e()),n=u,a=m-180;var y=this.rotationY+180,v=this.pRotationY+180,g=h+180;y-v>0&&y-v<270||y-v<-270?c="clockwise":(y-v<0||y-this.pRotationY>270)&&(c="counter-clockwise"),c!==o&&(g=y),Math.abs(y-g)>90&&Math.abs(y-g)<270&&(g=y,this._setProperty("turnAxis","Y"),e()),o=c,h=g-180,this.rotationZ-this.pRotationZ>0&&this.rotationZ-this.pRotationZ<270||this.rotationZ-this.pRotationZ<-270?p="clockwise":(this.rotationZ-this.pRotationZ<0||this.rotationZ-this.pRotationZ>270)&&(p="counter-clockwise"),p!==s&&(l=this.rotationZ),Math.abs(this.rotationZ-l)>90&&Math.abs(this.rotationZ-l)<270&&(l=this.rotationZ,this._setProperty("turnAxis","Z"),e()),s=p,this._setProperty("turnAxis",void 0)}var _,b,S=this.deviceShaken||window.deviceShaken;"function"==typeof S&&(null!==this.pAccelerationX&&(_=Math.abs(this.accelerationX-this.pAccelerationX),b=Math.abs(this.accelerationY-this.pAccelerationY)),_+b>f&&S())},e.exports=r},{"../core/main":24}],39:[function(t,e,i){"use strict";var r=t("../core/main"),n={};r.prototype.isKeyPressed=!1,r.prototype.keyIsPressed=!1,r.prototype.key="",r.prototype.keyCode=0,r.prototype._onkeydown=function(t){if(!n[t.which]){this._setProperty("isKeyPressed",!0),this._setProperty("keyIsPressed",!0),this._setProperty("keyCode",t.which),n[t.which]=!0,this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which);var e=this.keyPressed||window.keyPressed;"function"!=typeof e||t.charCode||!1===e(t)&&t.preventDefault()}},r.prototype._onkeyup=function(t){var e=this.keyReleased||window.keyReleased;n[t.which]=!1,function(){for(var t in n)if(n.hasOwnProperty(t)&&!0===n[t])return!0;return!1}()||(this._setProperty("isKeyPressed",!1),this._setProperty("keyIsPressed",!1)),this._setProperty("_lastKeyCodeTyped",null),this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which),this._setProperty("keyCode",t.which),"function"==typeof e&&!1===e(t)&&t.preventDefault()},r.prototype._onkeypress=function(t){if(t.which!==this._lastKeyCodeTyped){this._setProperty("keyCode",t.which),this._setProperty("_lastKeyCodeTyped",t.which),this._setProperty("key",String.fromCharCode(t.which));var e=this.keyTyped||window.keyTyped;"function"==typeof e&&!1===e(t)&&t.preventDefault()}},r.prototype._onblur=function(t){n={}},r.prototype.keyIsDown=function(t){return r._validateParameters("keyIsDown",arguments),n[t]},e.exports=r},{"../core/main":24}],40:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._hasMouseInteracted=!1,r.prototype.mouseX=0,r.prototype.mouseY=0,r.prototype.pmouseX=0,r.prototype.pmouseY=0,r.prototype.winMouseX=0,r.prototype.winMouseY=0,r.prototype.pwinMouseX=0,r.prototype.pwinMouseY=0,r.prototype.mouseButton=0,r.prototype.mouseIsPressed=!1,r.prototype._updateNextMouseCoords=function(t){if(null!==this._curElement&&(!t.touches||t.touches.length>0)){var e=function(t,e,i,r){r&&!r.clientX&&(r.touches?r=r.touches[0]:r.changedTouches&&(r=r.changedTouches[0]));var n=t.getBoundingClientRect(),o=t.scrollWidth/e,s=t.scrollHeight/i;return{x:(r.clientX-n.left)/o,y:(r.clientY-n.top)/s,winX:r.clientX,winY:r.clientY,id:r.identifier}}(this._curElement.elt,this.width,this.height,t);this._setProperty("mouseX",e.x),this._setProperty("mouseY",e.y),this._setProperty("winMouseX",e.winX),this._setProperty("winMouseY",e.winY)}this._hasMouseInteracted||(this._updateMouseCoords(),this._setProperty("_hasMouseInteracted",!0))},r.prototype._updateMouseCoords=function(){this._setProperty("pmouseX",this.mouseX),this._setProperty("pmouseY",this.mouseY),this._setProperty("pwinMouseX",this.winMouseX),this._setProperty("pwinMouseY",this.winMouseY),this._setProperty("_pmouseWheelDeltaY",this._mouseWheelDeltaY)},r.prototype._setMouseButton=function(t){1===t.button?this._setProperty("mouseButton",n.CENTER):2===t.button?this._setProperty("mouseButton",n.RIGHT):this._setProperty("mouseButton",n.LEFT)},r.prototype._onmousemove=function(t){var e=this._isGlobal?window:this;this._updateNextMouseCoords(t),this.mouseIsPressed?"function"==typeof e.mouseDragged?!1===e.mouseDragged(t)&&t.preventDefault():"function"==typeof e.touchMoved&&!1===e.touchMoved(t)&&t.preventDefault():"function"==typeof e.mouseMoved&&!1===e.mouseMoved(t)&&t.preventDefault()},r.prototype._onmousedown=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!0),this._setMouseButton(t),this._updateNextMouseCoords(t),"function"==typeof e.mousePressed?!1===e.mousePressed(t)&&t.preventDefault():"function"==typeof e.touchStarted&&!1===e.touchStarted(t)&&t.preventDefault()},r.prototype._onmouseup=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!1),"function"==typeof e.mouseReleased?!1===e.mouseReleased(t)&&t.preventDefault():"function"==typeof e.touchEnded&&!1===e.touchEnded(t)&&t.preventDefault()},r.prototype._ondragend=r.prototype._onmouseup,r.prototype._ondragover=r.prototype._onmousemove,r.prototype._onclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.mouseClicked&&!1===e.mouseClicked(t)&&t.preventDefault()},r.prototype._ondblclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.doubleClicked&&!1===e.doubleClicked(t)&&t.preventDefault()},r.prototype._mouseWheelDeltaY=0,r.prototype._pmouseWheelDeltaY=0,r.prototype._onwheel=function(t){var e=this._isGlobal?window:this;this._setProperty("_mouseWheelDeltaY",t.deltaY),"function"==typeof e.mouseWheel&&(t.delta=t.deltaY,!1===e.mouseWheel(t)&&t.preventDefault())},e.exports=r},{"../core/constants":18,"../core/main":24}],41:[function(t,e,i){"use strict";function r(t,e,i,r,n){n=n||0;var o=t.getBoundingClientRect(),s=t.scrollWidth/e,a=t.scrollHeight/i,h=r.touches[n]||r.changedTouches[n];return{x:(h.clientX-o.left)/s,y:(h.clientY-o.top)/a,winX:h.clientX,winY:h.clientY,id:h.identifier}}var n=t("../core/main");n.prototype.touches=[],n.prototype._updateTouchCoords=function(t){if(null!==this._curElement){for(var e=[],i=0;i=r)break;x=0}for(A=x;A=r);A++){var O=c[g+R];M=a[A],v+=M[(-16777216&O)>>>24],f+=M[(16711680&O)>>16],m+=M[(65280&O)>>8],y+=M[255&O],d+=s[A],g++}P[_=R+w]=v/d,E[_]=f/d,k[_]=m/d,C[_]=y/d}R+=r}for(R=0,S=(b=-n)*r,T=0;T=l)break;x=0,_=b,g=w+S}for(A=x;A=l);A++)M=a[A],v+=M[P[g]],f+=M[E[g]],m+=M[k[g]],y+=M[C[g]],d+=s[A],_++,g+=r;c[w+R]=v/d<<24|f/d<<16|m/d<<8|y/d}R+=r,S+=r,b++}h._setPixels(i,c)}var n,o,s,a,h={_toPixels:function(t){return t instanceof ImageData?t.data:t.getContext("2d").getImageData(0,0,t.width,t.height).data},_getARGB:function(t,e){var i=4*e;return t[i+3]<<24&4278190080|t[i]<<16&16711680|t[i+1]<<8&65280|255&t[i+2]},_setPixels:function(t,e){for(var i=0,r=0,n=t.length;r>>16,t[i+1]=(65280&e[r])>>>8,t[i+2]=255&e[r],t[i+3]=(4278190080&e[r])>>>24},_toImageData:function(t){return t instanceof ImageData?t:t.getContext("2d").getImageData(0,0,t.width,t.height)},_createImageData:function(t,e){return h._tmpCanvas=document.createElement("canvas"),h._tmpCtx=h._tmpCanvas.getContext("2d"),this._tmpCtx.createImageData(t,e)},apply:function(t,e,i){var r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),o=e(n,i);o instanceof ImageData?r.putImageData(o,0,0,0,0,t.width,t.height):r.putImageData(n,0,0,0,0,t.width,t.height)},threshold:function(t,e){var i=h._toPixels(t);void 0===e&&(e=.5);for(var r=Math.floor(255*e),n=0;n=r?255:0,i[n]=i[n+1]=i[n+2]=o}},gray:function(t){for(var e=h._toPixels(t),i=0;i255)throw new Error("Level must be greater than 2 and less than 255 for posterize");for(var r=e-1,n=0;n>8)/r,i[n+1]=255*(s*e>>8)/r,i[n+2]=255*(a*e>>8)/r}},dilate:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))>(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m>o&&(n=c,o=m),v>o&&(n=d,o=v),g>o&&(n=f,o=g),x[b++]=n;h._setPixels(_,x)},erode:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))<(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m=1&&(e=o[0]),o.length>=2&&(i=o[1]),i=i||r.prototype._checkFileExtension(e,i)[1]||"png"){default:n="image/png";break;case"jpeg":case"jpg":n="image/jpeg"}t.toBlob(function(t){r.prototype.downloadFile(t,e,i)},n)},r.prototype.saveFrames=function(t,e,i,o,s){r._validateParameters("saveFrames",arguments);var a=i||3;a=r.prototype.constrain(a,0,15),a*=1e3;var h=o||15;h=r.prototype.constrain(h,0,22);var l=0,u=r.prototype._makeFrame,c=this._curElement.elt,p=setInterval(function(){u(t+l,e,c),l++},1e3/h);setTimeout(function(){if(clearInterval(p),s)s(n);else for(var t=0;t0&&t0&&this.loadPixels(),this.setModified(!0),this._pixelsDirty=!0},r.Image.prototype.copy=function(){var t,e,i,n,o,s,a,h,l;if(9===arguments.length)t=arguments[0],e=arguments[1],i=arguments[2],n=arguments[3],o=arguments[4],s=arguments[5],a=arguments[6],h=arguments[7],l=arguments[8];else{if(8!==arguments.length)throw new Error("Signature not supported");t=this,e=arguments[0],i=arguments[1],n=arguments[2],o=arguments[3],s=arguments[4],a=arguments[5],h=arguments[6],l=arguments[7]}r.Renderer2D._copyHelper(this,t,e,i,n,o,s,a,h,l),this._pixelsDirty=!0},r.Image.prototype.mask=function(t){void 0===t&&(t=this);var e=this.drawingContext.globalCompositeOperation,i=1;t instanceof r.Renderer&&(i=t._pInst._pixelDensity);var n=[t,0,0,i*t.width,i*t.height,0,0,this.width,this.height];this.drawingContext.globalCompositeOperation="destination-in",r.Image.prototype.copy.apply(this,n),this.drawingContext.globalCompositeOperation=e,this.setModified(!0)},r.Image.prototype.filter=function(t,e){n.apply(this.canvas,n[t.toLowerCase()],e),this.setModified(!0)},r.Image.prototype.blend=function(){r.prototype.blend.apply(this,arguments),this.setModified(!0)},r.Image.prototype.setModified=function(t){this._modified=t},r.Image.prototype.isModified=function(){return this._modified},r.Image.prototype.save=function(t,e){r.prototype.saveCanvas(this.canvas,t,e)},e.exports=r.Image},{"../core/main":24,"./filters":42}],46:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("./filters");t("../color/p5.Color"),r.prototype.pixels=[],r.prototype.blend=function(){r._validateParameters("blend",arguments),this._renderer?this._renderer.blend.apply(this._renderer,arguments):r.Renderer2D.prototype.blend.apply(this,arguments)},r.prototype.copy=function(){r._validateParameters("copy",arguments),r.Renderer2D.prototype.copy.apply(this._renderer,arguments)},r.prototype.filter=function(t,e){r._validateParameters("filter",arguments),void 0!==this.canvas?n.apply(this.canvas,n[t.toLowerCase()],e):n.apply(this.elt,n[t.toLowerCase()],e)},r.prototype.get=function(t,e,i,r){return this._renderer.get(t,e,i,r)},r.prototype.loadPixels=function(){r._validateParameters("loadPixels",arguments),this._renderer.loadPixels()},r.prototype.set=function(t,e,i){this._renderer.set(t,e,i)},r.prototype.updatePixels=function(t,e,i,n){r._validateParameters("updatePixels",arguments),0!==this.pixels.length&&this._renderer.updatePixels(t,e,i,n)},e.exports=r},{"../color/p5.Color":16,"../core/main":24,"./filters":42}],47:[function(t,e,i){"use strict";function r(t,e){var i={};if(void 0===(e=e||[]))for(var r=0;r/g,">").replace(/"/g,""").replace(/'/g,"'")}function o(t,e){e&&!0!==e&&"true"!==e||(e=""),t||(t="untitled");var i="";return t&&t.indexOf(".")>-1&&(i=t.split(".").pop()),e&&i!==e&&(t=t+"."+(i=e)),[t,i]}var s=t("../core/main");t("whatwg-fetch"),t("es6-promise").polyfill();var a=t("fetch-jsonp");t("../core/error_helpers"),s.prototype.loadJSON=function(){s._validateParameters("loadJSON",arguments);for(var t,e,i,r=arguments[0],n={},o="json",a=1;a0&&"function"==typeof arguments[u];u--)h++;var c=arguments.length-h,p=arguments[0];if(2===c&&"string"==typeof p&&"object"==typeof arguments[1])r=new Request(p,arguments[1]),e=arguments[2],i=arguments[3];else{for(var d,f="GET",m=1;m64e6&&s._friendlyFileLoadError(7,p),t){case"json":case"jsonp":return e.json();case"binary":return e.blob();case"arrayBuffer":return e.arrayBuffer();case"xml":return e.text().then(function(t){return function t(e){var i=new s.XML,r=e.childNodes;if(r&&r.length){for(var n=0;n"),o.print("");var p=' "),o.print(""),o.print(" "),"0"!==a[0]){o.print(" ");for(var d=0;d"+f),o.print(" ")}o.print(" ")}for(var m=0;m");for(var y=0;y"+g),o.print(" ")}o.print(" ")}o.print("
"),o.print(""),o.print("")}o.close(),o.clear()},s.prototype.writeFile=function(t,e,i){var r="application/octet-stream";s.prototype._isSafari()&&(r="text/plain");var n=new Blob(t,{type:r});s.prototype.downloadFile(n,e,i)},s.prototype.downloadFile=function(e,i,r){var n=o(i,r),a=n[0];if(e instanceof Blob)t("file-saver").saveAs(e,a);else{var h=document.createElement("a");if(h.href=e,h.download=a,h.onclick=function(t){(function(t){document.body.removeChild(t.target)})(t),t.stopPropagation()},h.style.display="none",document.body.appendChild(h),s.prototype._isSafari()){var l="Hello, Safari user! To download this file...\n";l+="1. Go to File --\x3e Save As.\n",l+='2. Choose "Page Source" as the Format.\n',l+='3. Name it with this extension: ."'+n[1]+'"',alert(l)}h.click()}},s.prototype._checkFileExtension=o,s.prototype._isSafari=function(){return Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0},e.exports=s},{"../core/error_helpers":20,"../core/main":24,"es6-promise":4,"fetch-jsonp":5,"file-saver":6,"whatwg-fetch":12}],48:[function(t,e,i){"use strict";var r=t("../core/main");r.Table=function(t){this.columns=[],this.rows=[]},r.Table.prototype.addRow=function(t){var e=t||new r.TableRow;if(void 0===e.arr||void 0===e.obj)throw new Error("invalid TableRow: "+e);return e.table=this,this.rows.push(e),e},r.Table.prototype.removeRow=function(t){this.rows[t].table=null;var e=this.rows.splice(t+1,this.rows.length);this.rows.pop(),this.rows=this.rows.concat(e)},r.Table.prototype.getRow=function(t){return this.rows[t]},r.Table.prototype.getRows=function(){return this.rows},r.Table.prototype.findRow=function(t,e){if("string"==typeof e){for(var i=0;i=0))throw new Error('This table has no column named "'+t+'"');i=e[t],r[i]=e}else r[n]=this.rows[n].obj;return r},r.Table.prototype.getArray=function(){for(var t=[],e=0;e=0))throw new Error('This table has no column named "'+t+'"');this.obj[t]=e,this.arr[i]=e}else{if(!(t0},r.XML.prototype.listChildren=function(){return this.children.map(function(t){return t.name})},r.XML.prototype.getChildren=function(t){return t?this.children.filter(function(e){return e.name===t}):this.children},r.XML.prototype.getChild=function(t){if("string"!=typeof t)return this.children[t];for(var e=0;eo&&(o=a),n[s]=a}0===o&&(o=1);for(var h=0,l=0,u=0;u=1&&(f++,v--),g>=1&&(m++,g--),_>=1&&(y++,_--)}return b},n.prototype.noiseDetail=function(t,e){t>0&&(s=t),e>0&&(a=e)},n.prototype.noiseSeed=function(t){var e=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();e.setSeed(t),r=new Array(o+1);for(var i=0;it*t&&this.div(Math.sqrt(e)).mult(t),this},r.Vector.prototype.setMag=function(t){return this.normalize().mult(t)},r.Vector.prototype.heading=function(){var t=Math.atan2(this.y,this.x);return this.p5?this.p5._fromRadians(t):t},r.Vector.prototype.rotate=function(t){var e=this.heading()+t;this.p5&&(e=this.p5._toRadians(e));var i=this.mag();return this.x=Math.cos(e)*i,this.y=Math.sin(e)*i,this},r.Vector.prototype.angleBetween=function(t){var e=this.dot(t)/(this.mag()*t.mag()),i=Math.acos(Math.min(1,Math.max(-1,e)));return this.p5?this.p5._fromRadians(i):i},r.Vector.prototype.lerp=function(t,e,i,n){return t instanceof r.Vector?this.lerp(t.x,t.y,t.z,e):(this.x+=(t-this.x)*n||0,this.y+=(e-this.y)*n||0,this.z+=(i-this.z)*n||0,this)},r.Vector.prototype.array=function(){return[this.x||0,this.y||0,this.z||0]},r.Vector.prototype.equals=function(t,e,i){var n,o,s;return t instanceof r.Vector?(n=t.x||0,o=t.y||0,s=t.z||0):t instanceof Array?(n=t[0]||0,o=t[1]||0,s=t[2]||0):(n=t||0,o=e||0,s=i||0),this.x===n&&this.y===o&&this.z===s},r.Vector.fromAngle=function(t,e){return void 0===e&&(e=1),new r.Vector(e*Math.cos(t),e*Math.sin(t),0)},r.Vector.fromAngles=function(t,e,i){void 0===i&&(i=1);var n=Math.cos(e),o=Math.sin(e),s=Math.cos(t),a=Math.sin(t);return new r.Vector(i*a*o,-i*s,i*a*n)},r.Vector.random2D=function(){return this.fromAngle(Math.random()*n.TWO_PI)},r.Vector.random3D=function(){var t=Math.random()*n.TWO_PI,e=2*Math.random()-1,i=Math.sqrt(1-e*e),o=i*Math.cos(t),s=i*Math.sin(t);return new r.Vector(o,s,e)},r.Vector.add=function(t,e,i){return i?i.set(t):i=t.copy(),i.add(e),i},r.Vector.sub=function(t,e,i){return i?i.set(t):i=t.copy(),i.sub(e),i},r.Vector.mult=function(t,e,i){return i?i.set(t):i=t.copy(),i.mult(e),i},r.Vector.div=function(t,e,i){return i?i.set(t):i=t.copy(),i.div(e),i},r.Vector.dot=function(t,e){return t.dot(e)},r.Vector.cross=function(t,e){return t.cross(e)},r.Vector.dist=function(t,e){return t.dist(e)},r.Vector.lerp=function(t,e,i,r){return r?r.set(t):r=t.copy(),r.lerp(e,i),r},r.Vector.mag=function(t){var e=t.x,i=t.y,r=t.z,n=e*e+i*i+r*r;return Math.sqrt(n)},e.exports=r.Vector},{"../core/constants":18,"../core/main":24}],55:[function(t,e,i){"use strict";var r=t("../core/main"),n=!1,o=!1,s=0,a=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();r.prototype.randomSeed=function(t){a.setSeed(t),n=!0,o=!1},r.prototype.random=function(t,e){var i;if(i=n?a.rand():Math.random(),void 0===t)return i;if(void 0===e)return t instanceof Array?t[Math.floor(i*t.length)]:i*t;if(t>e){var r=t;t=e,e=r}return i*(e-t)+t},r.prototype.randomGaussian=function(t,e){var i,r,n,a;if(o)i=s,o=!1;else{do{r=this.random(2)-1,n=this.random(2)-1,a=r*r+n*n}while(a>=1);a=Math.sqrt(-2*Math.log(a)/a),i=r*a,s=n*a,o=!0}var h=t||0;return i*(e||1)+h},e.exports=r},{"../core/main":24}],56:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._angleMode=n.RADIANS,r.prototype.acos=function(t){return this._fromRadians(Math.acos(t))},r.prototype.asin=function(t){return this._fromRadians(Math.asin(t))},r.prototype.atan=function(t){return this._fromRadians(Math.atan(t))},r.prototype.atan2=function(t,e){return this._fromRadians(Math.atan2(t,e))},r.prototype.cos=function(t){return Math.cos(this._toRadians(t))},r.prototype.sin=function(t){return Math.sin(this._toRadians(t))},r.prototype.tan=function(t){return Math.tan(this._toRadians(t))},r.prototype.degrees=function(t){return t*n.RAD_TO_DEG},r.prototype.radians=function(t){return t*n.DEG_TO_RAD},r.prototype.angleMode=function(t){t!==n.DEGREES&&t!==n.RADIANS||(this._angleMode=t)},r.prototype._toRadians=function(t){return this._angleMode===n.DEGREES?t*n.DEG_TO_RAD:t},r.prototype._toDegrees=function(t){return this._angleMode===n.RADIANS?t*n.RAD_TO_DEG:t},r.prototype._fromRadians=function(t){return this._angleMode===n.DEGREES?t*n.RAD_TO_DEG:t},e.exports=r},{"../core/constants":18,"../core/main":24}],57:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.textAlign=function(t,e){return r._validateParameters("textAlign",arguments),this._renderer.textAlign.apply(this._renderer,arguments)},r.prototype.textLeading=function(t){return r._validateParameters("textLeading",arguments),this._renderer.textLeading.apply(this._renderer,arguments)},r.prototype.textSize=function(t){return r._validateParameters("textSize",arguments),this._renderer.textSize.apply(this._renderer,arguments)},r.prototype.textStyle=function(t){return r._validateParameters("textStyle",arguments),this._renderer.textStyle.apply(this._renderer,arguments)},r.prototype.textWidth=function(t){return r._validateParameters("textWidth",arguments),0===t.length?0:this._renderer.textWidth.apply(this._renderer,arguments)},r.prototype.textAscent=function(){return r._validateParameters("textAscent",arguments),this._renderer.textAscent()},r.prototype.textDescent=function(){return r._validateParameters("textDescent",arguments),this._renderer.textDescent()},r.prototype._updateTextMetrics=function(){return this._renderer._updateTextMetrics()},e.exports=r},{"../core/main":24}],58:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("opentype.js");t("../core/error_helpers"),r.prototype.loadFont=function(t,e,i){r._validateParameters("loadFont",arguments);var n=new r.Font(this),s=this;return o.load(t,function(o,a){if(o)return void 0!==i?i(o):(r._friendlyFileLoadError(4,t),void console.error(o,t));n.font=a,void 0!==e&&e(n),s._decrementPreload();var h,l,u=t.split("\\").pop().split("/").pop(),c=u.lastIndexOf("."),p=c<1?null:u.substr(c+1);["ttf","otf","woff","woff2"].indexOf(p)>-1&&(h=u.substr(0,c),(l=document.createElement("style")).appendChild(document.createTextNode("\n@font-face {\nfont-family: "+h+";\nsrc: url("+t+");\n}\n")),document.head.appendChild(l))}),n},r.prototype.text=function(t,e,i,n,o){return r._validateParameters("text",arguments),this._renderer._doFill||this._renderer._doStroke?this._renderer.text.apply(this._renderer,arguments):this},r.prototype.textFont=function(t,e){if(r._validateParameters("textFont",arguments),arguments.length){if(!t)throw new Error("null font passed to textFont");return this._renderer._setProperty("_textFont",t),e&&(this._renderer._setProperty("_textSize",e),this._renderer._setProperty("_textLeading",e*n._DEFAULT_LEADMULT)),this._renderer._applyTextProperties()}return this._renderer._textFont},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"opentype.js":10}],59:[function(t,e,i){"use strict";function r(t,e){for(var i=function(t,e){if("object"!=typeof t)t=e;else for(var i in e)void 0===t[i]&&(t[i]=e[i]);return t}(e,{sampleFactor:.1,simplifyThreshold:0}),r=c(t,0,1),o=r/(r*i.sampleFactor),s=[],a=0;a3&&r>=0;--r)h(a(t,r-1),a(t,r),a(t,r+1),e)&&(t.splice(r%t.length,1),i++);return i}function o(t){for(var e,i=[],r=0;rg||v<_)&&(T+=180),{x:f,y:m,m:{x:y,y:v},n:{x:g,y:_},start:{x:b,y:S},end:{x:x,y:w},alpha:T}}function u(t,e,i,r,n,o,s,a,h){return null==h?v(t,e,i,r,n,o,s,a):l(t,e,i,r,n,o,s,a,function(t,e,i,r,n,o,s,a,h){if(!(h<0||v(t,e,i,r,n,o,s,a).01;)u/=2,l=v(t,e,i,r,n,o,s,a,c+=(le&&!i)return{x:(a=u(r,n,o[1],o[2],o[3],o[4],o[5],o[6],e-h)).x,y:a.y,alpha:a.alpha};h+=s,r=+o[5],n=+o[6]}o.shift()}return(a=i?h:l(r,n,o[0],o[1],o[2],o[3],o[4],o[5],1)).alpha&&(a={x:a.x,y:a.y,alpha:a.alpha}),a}function p(t){var e=[],i=0,r=0,n=0,o=0,s=0;if(!t)return e;"M"===t[0][0]&&(i=+t[0][1],r=+t[0][2],n=i,o=r,s++,e[0]=["M",i,r]);for(var a,h,l,u=3===t.length&&"M"===t[0][0]&&"R"===t[1][0].toUpperCase()&&"Z"===t[2][0].toUpperCase(),c=s,p=t.length;c1&&(w=Math.sqrt(w),r*=w,n*=w);var T=r*r,A=n*n,M=(s===a?-1:1)*Math.sqrt(Math.abs((T*A-T*x*x-A*S*S)/(T*x*x+A*S*S)));d=M*r*x/n+(e+h)/2,f=M*-n*S/r+(i+l)/2,c=Math.asin(((i-f)/n).toFixed(9)),p=Math.asin(((l-f)/n).toFixed(9)),c=ep&&(c-=2*y),!a&&p>c&&(p-=2*y)}var P=p-c;if(Math.abs(P)>v){var E=p,k=h,C=l;p=c+v*(a&&p>c?1:-1),h=d+r*Math.cos(p),l=f+n*Math.sin(p),_=t(h,l,r,n,o,0,a,k,C,[p,E,d,f])}P=p-c;var R=Math.cos(c),O=Math.sin(c),L=Math.cos(p),F=Math.sin(p),I=Math.tan(P/4),D=4/3*r*I,U=4/3*n*I,B=[e,i],N=[e+D*O,i-U*R],G=[h+D*F,l-U*L],q=[h,l];if(N[0]=2*B[0]-N[0],N[1]=2*B[1]-N[1],u)return[N,G,q].concat(_);for(var V=[],j=0,z=(_=[N,G,q].concat(_).join().split(",")).length;j7){t[e].shift();for(var o=t[e];o.length;)a[e]="A",n&&(h[e]="A"),t.splice(e++,0,["C"].concat(o.splice(0,6)));t.splice(e,1),i=Math.max(r.length,n&&n.length||0)}},c=function(t,e,o,s,a){t&&e&&"M"===t[a][0]&&"M"!==e[a][0]&&(e.splice(a,0,["M",s.x,s.y]),o.bx=0,o.by=0,o.x=t[a][1],o.y=t[a][2],i=Math.max(r.length,n&&n.length||0))},d="",f="";i=Math.max(r.length,n&&n.length||0);for(var v=0;vr;r+=2){var o=[{x:+t[r-2],y:+t[r-1]},{x:+t[r],y:+t[r+1]},{x:+t[r+2],y:+t[r+3]},{x:+t[r+4],y:+t[r+5]}];e?r?n-4===r?o[3]={x:+t[0],y:+t[1]}:n-2===r&&(o[2]={x:+t[0],y:+t[1]},o[3]={x:+t[2],y:+t[3]}):o[0]={x:+t[n-2],y:+t[n-1]}:n-4===r?o[3]=o[2]:r||(o[0]={x:+t[r],y:+t[r+1]}),i.push(["C",(-o[0].x+6*o[1].x+o[2].x)/6,(-o[0].y+6*o[1].y+o[2].y)/6,(o[1].x+6*o[2].x-o[3].x)/6,(o[1].y+6*o[2].y-o[3].y)/6,o[2].x,o[2].y])}return i}function m(t,e,i,r){return[t,e,i,r,i,r]}function y(t,e,i,r,n,o){var s=1/3,a=2/3;return[s*t+a*i,s*e+a*r,s*n+a*i,s*o+a*r,n,o]}function v(t,e,i,r,n,o,s,a,h){null==h&&(h=1);for(var l=(h=h>1?1:h<0?0:h)/2,u=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],c=0,p=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],d=0;d<12;d++){var f=l*u[d]+l,m=g(f,t,i,n,s),y=g(f,e,r,o,a),v=m*m+y*y;c+=p[d]*Math.sqrt(v)}return l*c}function g(t,e,i,r,n){return t*(t*(-3*e+9*i-9*r+3*n)+6*e-12*i+6*r)-3*e+3*i}function _(){for(var t="",e=arguments.length-1;e>=0;--e){var i=arguments[e];t+=i===Object(i)?JSON.stringify(i):i}return t}var b=t("../core/main"),S=t("../core/constants");b.Font=function(t){this.parent=t,this.cache={},this.font=void 0},b.Font.prototype.list=function(){throw new Error("not yet implemented")},b.Font.prototype.textBounds=function(t,e,i,r,n){e=void 0!==e?e:0,i=void 0!==i?i:0,r=r||this.parent._renderer._textSize;var o=n&&n.renderer&&n.renderer._pInst||this.parent,s=o._renderer,a=s._textAlign||S.LEFT,h=s._textBaseline||S.BASELINE,l=_("textBounds",t,e,i,r,a,h),u=this.cache[l];if(!u){var c,p,d,f,m,y=[],v=[],g=this._scale(r);this.font.forEachGlyph(t,e,i,r,n,function(t,e,i,r){var n=t.getMetrics();y.push(e+n.xMin*g),y.push(e+n.xMax*g),v.push(i+-n.yMin*g),v.push(i+-n.yMax*g)}),c=Math.min.apply(null,y),p=Math.min.apply(null,v),d=Math.max.apply(null,y),f=Math.max.apply(null,v),u={x:c,y:p,h:f-p,w:d-c,advance:c-e},m=this._handleAlignment(s,t,u.x,u.y,u.w+u.advance),u.x=m.x,u.y=m.y,this.cache[_("textBounds",t,e,i,r,a,h)]=u}return u},b.Font.prototype.textToPoints=function(t,e,i,n,s){function a(e){return u[e].name&&"space"===u[e].name||t.length===u.length&&" "===t[e]||u[e].index&&3===u[e].index}var h=0,l=[],u=this._getGlyphs(t);n=n||this.parent._renderer._textSize;for(var c=0;c2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&"number"==typeof r.decimals&&(n=r.decimals),t.toPathData(n)},b.Font.prototype._getSVG=function(t,e,i,r){var n=3;return"string"==typeof t&&arguments.length>2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&("number"==typeof r.decimals&&(n=r.decimals),"number"==typeof r.strokeWidth&&(t.strokeWidth=r.strokeWidth),void 0!==r.fill&&(t.fill=r.fill),void 0!==r.stroke&&(t.stroke=r.stroke)),t.toSVG(n)},b.Font.prototype._renderPath=function(t,e,i,r){var n,o=r&&r.renderer||this.parent._renderer,s=o.drawingContext;n="object"==typeof t&&t.commands?t.commands:this._getPath(t,e,i,r).commands,s.beginPath();for(var a=0;a1;)i=Math.random()*o|0,r=t[--o],t[o]=t[i],t[i]=r;return t},r.prototype.sort=function(t,e){var i=e?t.slice(0,Math.min(e,t.length)):t,r=e?t.slice(Math.min(e,t.length)):[];return(i="string"==typeof i[0]?i.sort():i.sort(function(t,e){return t-e})).concat(r)},r.prototype.splice=function(t,e,i){return Array.prototype.splice.apply(t,[i,0].concat(e)),t},r.prototype.subset=function(t,e,i){return void 0!==i?t.slice(e,e+i):t.slice(e,t.length)},e.exports=r},{"../core/main":24}],61:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.float=function(t){return t instanceof Array?t.map(parseFloat):parseFloat(t)},r.prototype.int=function(t,e){return e=e||10,"string"==typeof t?parseInt(t,e):"number"==typeof t?0|t:"boolean"==typeof t?t?1:0:t instanceof Array?t.map(function(t){return r.prototype.int(t,e)}):void 0},r.prototype.str=function(t){return t instanceof Array?t.map(r.prototype.str):String(t)},r.prototype.boolean=function(t){return"number"==typeof t?0!==t:"string"==typeof t?"true"===t.toLowerCase():"boolean"==typeof t?t:t instanceof Array?t.map(r.prototype.boolean):void 0},r.prototype.byte=function(t){var e=r.prototype.int(t,10);return"number"==typeof e?(e+128)%256-128:e instanceof Array?e.map(r.prototype.byte):void 0},r.prototype.char=function(t){return"number"!=typeof t||isNaN(t)?t instanceof Array?t.map(r.prototype.char):"string"==typeof t?r.prototype.char(parseInt(t,10)):void 0:String.fromCharCode(t)},r.prototype.unchar=function(t){return"string"==typeof t&&1===t.length?t.charCodeAt(0):t instanceof Array?t.map(r.prototype.unchar):void 0},r.prototype.hex=function(t,e){if(e=void 0===e||null===e?e=8:e,t instanceof Array)return t.map(function(t){return r.prototype.hex(t,e)});if("number"==typeof t){t<0&&(t=4294967295+t+1);for(var i=Number(t).toString(16).toUpperCase();i.length=e&&(i=i.substring(i.length-e,i.length)),i}},r.prototype.unhex=function(t){return t instanceof Array?t.map(r.prototype.unhex):parseInt("0x"+t,16)},e.exports=r},{"../core/main":24}],62:[function(t,e,i){"use strict";function r(t,e,i){var r=t<0,n=r?t.toString().substring(1):t.toString(),o=n.indexOf("."),s=-1!==o?n.substring(0,o):n,a=-1!==o?n.substring(o+1):"",h=r?"-":"";if(void 0!==i){var l="";(-1!==o||i-a.length>0)&&(l="."),a.length>i&&(a=a.substring(0,i));for(var u=0;ur.length)for(var o=e-(r+=-1===i?".":"").length+1,s=0;s0?"+"+t.toString():t.toString()}function s(t){return parseFloat(t)>0?" "+t.toString():t.toString()}var a=t("../core/main");t("../core/error_helpers"),a.prototype.join=function(t,e){return a._validateParameters("join",arguments),t.join(e)},a.prototype.match=function(t,e){return a._validateParameters("match",arguments),t.match(e)},a.prototype.matchAll=function(t,e){a._validateParameters("matchAll",arguments);for(var i=new RegExp(e,"g"),r=i.exec(t),n=[];null!==r;)n.push(r),r=i.exec(t);return n},a.prototype.nf=function(t,e,i){return a._validateParameters("nf",arguments),t instanceof Array?t.map(function(t){return r(t,e,i)}):"[object Arguments]"===Object.prototype.toString.call(t)?3===t.length?this.nf(t[0],t[1],t[2]):2===t.length?this.nf(t[0],t[1]):this.nf(t[0]):r(t,e,i)},a.prototype.nfc=function(t,e){return a._validateParameters("nfc",arguments),t instanceof Array?t.map(function(t){return n(t,e)}):n(t,e)},a.prototype.nfp=function(){a._validateParameters("nfp",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(o):o(t)},a.prototype.nfs=function(){a._validateParameters("nfs",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(s):s(t)},a.prototype.split=function(t,e){return a._validateParameters("split",arguments),t.split(e)},a.prototype.splitTokens=function(t,e){var i;if(a._validateParameters("splitTokens",arguments),void 0!==e){var r=e,n=/\]/g.exec(r),o=/\[/g.exec(r);o&&n?(r=r.slice(0,n.index)+r.slice(n.index+1),o=/\[/g.exec(r),r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("[\\["+r+"\\]]","g")):n?(r=r.slice(0,n.index)+r.slice(n.index+1),i=new RegExp("["+r+"\\]]","g")):o?(r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("["+r+"\\[]","g")):i=new RegExp("["+r+"]","g")}else i=/\s/g;return t.split(i).filter(function(t){return t})},a.prototype.trim=function(t){return a._validateParameters("trim",arguments),t instanceof Array?t.map(this.trim):t.trim()},e.exports=a},{"../core/error_helpers":20,"../core/main":24}],63:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.day=function(){return(new Date).getDate()},r.prototype.hour=function(){return(new Date).getHours()},r.prototype.minute=function(){return(new Date).getMinutes()},r.prototype.millis=function(){return window.performance.now()},r.prototype.month=function(){return(new Date).getMonth()+1},r.prototype.second=function(){return(new Date).getSeconds()},r.prototype.year=function(){return(new Date).getFullYear()},e.exports=r},{"../core/main":24}],64:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry");var n=t("../core/constants");r.prototype.plane=function(t,e,i,n){this._assert3d("plane"),r._validateParameters("plane",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=1),void 0===n&&(n=1);var o="plane|"+i+"|"+n;if(!this._renderer.geometryInHash(o)){var s=new r.Geometry(i,n,function(){for(var t,e,i,n=0;n<=this.detailY;n++){e=n/this.detailY;for(var o=0;o<=this.detailX;o++)t=o/this.detailX,i=new r.Vector(t-.5,e-.5,0),this.vertices.push(i),this.uvs.push(t,e)}});s.computeFaces().computeNormals(),i<=1&&n<=1?s._makeTriangleEdges()._edgesToVertices():console.log("Cannot draw stroke on plane objects with more than 1 detailX or 1 detailY"),this._renderer.createBuffers(o,s)}return this._renderer.drawBuffersScaled(o,t,e,1),this},r.prototype.box=function(t,e,i,n,o){this._assert3d("box"),r._validateParameters("box",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=e);var s=this._renderer.attributes&&this._renderer.attributes.perPixelLighting;void 0===n&&(n=s?1:4),void 0===o&&(o=s?1:4);var a="box|"+n+"|"+o;if(!this._renderer.geometryInHash(a)){var h=new r.Geometry(n,o,function(){var t=[[0,4,2,6],[1,3,5,7],[0,1,4,5],[2,6,3,7],[0,2,1,3],[4,5,6,7]];this.strokeIndices=[[0,1],[1,3],[3,2],[6,7],[8,9],[9,11],[14,15],[16,17],[17,19],[18,19],[20,21],[22,23]];for(var e=0;eo?(_=i,g=1,v=e):v=t+(e-t)*g,-2!==h&&h!==o+2||(v=0),_-=i/2,m[h]=0===v?1:n,l=0;lo?0:Math.sin(2*b*Math.PI)*Math.cos(y),h<0?-1:h>o?1:Math.sin(y),h<0||h>o?0:Math.cos(2*b*Math.PI)*Math.cos(y))),this.uvs.push(b,g)}}var S=0;if(s){for(u=0;u=n.TWO_PI?(e="ellipse")+"|"+p+"|":(e="arc")+"|"+l+"|"+u+"|"+c+"|"+p+"|",!this.geometryInHash(i)){var d=new r.Geometry(p,1,function(){if(this.strokeIndices=[],l.toFixed(10)!==u.toFixed(10)){c!==n.PIE&&void 0!==c||(this.vertices.push(new r.Vector(.5,.5,0)),this.uvs.push([.5,.5]));for(var t=0;t<=p;t++){var e=t/p,i=(u-l)*e+l,o=.5+Math.cos(i)/2,s=.5+Math.sin(i)/2;this.vertices.push(new r.Vector(o,s,0)),this.uvs.push([o,s]),t0&&h>0&&(this.strokeIndices=[[0,a],[a,(a+1)*(h+1)-1],[(a+1)*(h+1)-1,(a+1)*h],[(a+1)*h,0]])});u.computeFaces().computeNormals()._makeTriangleEdges()._edgesToVertices(),this.createBuffers(l,u)}var c=this.uMVMatrix.copy();try{this.uMVMatrix.translate([i,n,0]),this.uMVMatrix.scale(o,s,1),this.drawBuffers(l)}finally{this.uMVMatrix=c}return this},r.RendererGL.prototype.quad=function(t,e,i,n,o,s,a,h){var l="quad|"+t+"|"+e+"|"+i+"|"+n+"|"+o+"|"+s+"|"+a+"|"+h;if(!this.geometryInHash(l)){var u=new r.Geometry(2,2,function(){this.vertices.push(new r.Vector(t,e,0)),this.vertices.push(new r.Vector(i,n,0)),this.vertices.push(new r.Vector(o,s,0)),this.vertices.push(new r.Vector(a,h,0)),this.uvs.push(0,0,1,0,1,1,0,1),this.strokeIndices=[[0,1],[1,2],[2,3],[3,0]]});u.computeNormals()._makeTriangleEdges()._edgesToVertices(),u.faces=[[0,1,2],[2,3,0]],this.createBuffers(l,u)}return this.drawBuffers(l),this},r.RendererGL.prototype.bezier=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._bezierDetail||20;this.beginShape();for(var d=0;d<=p;d++){var f=Math.pow(1-d/p,3),m=d/p*3*Math.pow(1-d/p,2),y=3*Math.pow(d/p,2)*(1-d/p),v=Math.pow(d/p,3);this.vertex(t*f+r*m+s*y+l*v,e*f+n*m+a*y+u*v,i*f+o*m+h*y+c*v)}return this.endShape(),this},r.RendererGL.prototype.curve=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._curveDetail;this.beginShape();for(var d=0;d<=p;d++){var f=.5*Math.pow(d/p,3),m=.5*Math.pow(d/p,2),y=d/p*.5,v=f*(3*r-t-3*s+l)+m*(2*t-5*r+4*s-l)+y*(-t+s)+2*r*.5,g=f*(3*n-e-3*a+u)+m*(2*e-5*n+4*a-u)+y*(-e+a)+2*n*.5,_=f*(3*o-i-3*h+c)+m*(2*i-5*o+4*h-c)+y*(-i+h)+2*o*.5;this.vertex(v,g,_)}return this.endShape(),this},r.RendererGL.prototype.line=function(){return 6===arguments.length?(this.beginShape(),this.vertex(arguments[0],arguments[1],arguments[2]),this.vertex(arguments[3],arguments[4],arguments[5]),this.endShape()):4===arguments.length&&(this.beginShape(),this.vertex(arguments[0],arguments[1],0),this.vertex(arguments[2],arguments[3],0),this.endShape()),this},r.RendererGL.prototype.bezierVertex=function(){if(0===this.immediateMode._bezierVertex.length)throw Error("vertex() must be used once before calling bezierVertex()");var t,e,i,r,n,o=[],s=[],a=[],h=arguments.length;if(t=0,0===this._lookUpTableBezier.length||this._lutBezierDetail!==this._pInst._curveDetail){this._lookUpTableBezier=[],this._lutBezierDetail=this._pInst._curveDetail;for(var l=1/this._lutBezierDetail,u=0,c=1,p=0;u<1;){if(t=parseFloat(u.toFixed(6)),this._lookUpTableBezier[p]=this._bezierCoefficients(t),c.toFixed(6)===l.toFixed(6)){t=parseFloat(c.toFixed(6))+parseFloat(u.toFixed(6)),++p,this._lookUpTableBezier[p]=this._bezierCoefficients(t);break}u+=l,c-=l,++p}}var d=this._lookUpTableBezier.length;if(6===h){for(this.isBezier=!0,o=[this.immediateMode._bezierVertex[0],arguments[0],arguments[2],arguments[4]],s=[this.immediateMode._bezierVertex[1],arguments[1],arguments[3],arguments[5]],n=0;n0&&this.mouseY0){var i=this._renderer._curCamera;void 0===t&&(t=1),void 0===e&&(e=t),!0!==this.contextMenuDisabled&&(this.canvas.oncontextmenu=function(){return!1},this._setProperty("contextMenuDisabled",!0)),!0!==this.wheelDefaultDisabled&&(this.canvas.onwheel=function(){return!1},this._setProperty("wheelDefaultDisabled",!0));var n=this.height0?this._renderer._curCamera._orbit(0,0,.5*n):this._renderer._curCamera._orbit(0,0,-.5*n)),this.mouseIsPressed)if(this.mouseButton===this.LEFT){var o=-t*(this.mouseX-this.pmouseX)/n,s=e*(this.mouseY-this.pmouseY)/n;this._renderer._curCamera._orbit(o,s,0)}else if(this.mouseButton===this.RIGHT){var a=i._getLocalAxes(),h=Math.sqrt(a.x[0]*a.x[0]+a.x[2]*a.x[2]);0!==h&&(a.x[0]/=h,a.x[2]/=h);var l=Math.sqrt(a.y[0]*a.y[0]+a.y[2]*a.y[2]);0!==l&&(a.y[0]/=l,a.y[2]/=l);var u=-1*t*(this.mouseX-this.pmouseX),c=-1*e*(this.mouseY-this.pmouseY);i.setPosition(i.eyeX+u*a.x[0]+c*a.z[0],i.eyeY,i.eyeZ+u*a.x[2]+c*a.z[2])}return this}},r.prototype.debugMode=function(){this._assert3d("debugMode"),r._validateParameters("debugMode",arguments);for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1);arguments[0]===n.GRID?this.registerMethod("post",this._grid.call(this,arguments[1],arguments[2],arguments[3],arguments[4],arguments[5])):arguments[0]===n.AXES?this.registerMethod("post",this._axesIcon.call(this,arguments[1],arguments[2],arguments[3],arguments[4])):(this.registerMethod("post",this._grid.call(this,arguments[0],arguments[1],arguments[2],arguments[3],arguments[4])),this.registerMethod("post",this._axesIcon.call(this,arguments[5],arguments[6],arguments[7],arguments[8])))},r.prototype.noDebugMode=function(){this._assert3d("noDebugMode");for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1)},r.prototype._grid=function(t,e,i,r,n){void 0===t&&(t=this.width/2),void 0===e&&(e=Math.round(t/30)<4?4:Math.round(t/30)),void 0===i&&(i=0),void 0===r&&(r=0),void 0===n&&(n=0);var o=t/e,s=t/2;return function(){this.push(),this.stroke(255*this._renderer.curStrokeColor[0],255*this._renderer.curStrokeColor[1],255*this._renderer.curStrokeColor[2]),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]);for(var t=0;t<=e;t++)this.beginShape(this.LINES),this.vertex(-s+i,r,t*o-s+n),this.vertex(+s+i,r,t*o-s+n),this.endShape();for(var a=0;a<=e;a++)this.beginShape(this.LINES),this.vertex(a*o-s+i,r,-s+n),this.vertex(a*o-s+i,r,+s+n),this.endShape();this.pop()}},r.prototype._axesIcon=function(t,e,i,r){return void 0===t&&(t=this.width/20>40?this.width/20:40),void 0===e&&(e=-this.width/4),void 0===i&&(i=e),void 0===r&&(r=e),function(){this.push(),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]),this.strokeWeight(2),this.stroke(255,0,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e+t,i,r),this.endShape(),this.stroke(0,255,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i+t,r),this.endShape(),this.stroke(0,0,255),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i,r+t),this.endShape(),this.pop()}},e.exports=r},{"../core/constants":18,"../core/main":24}],66:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.ambientLight=function(t,e,i,n){this._assert3d("ambientLight"),r._validateParameters("ambientLight",arguments);var o=this.color.apply(this,arguments),s=this._renderer._useLightShader();return s.setUniform("uUseLighting",!0),s.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.ambientLightColors.push(o._array[0],o._array[1],o._array[2]),s.setUniform("uAmbientColor",this._renderer.ambientLightColors),s.setUniform("uAmbientLightCount",this._renderer.ambientLightColors.length/3),this},r.prototype.directionalLight=function(t,e,i,n,o,s){this._assert3d("directionalLight"),r._validateParameters("directionalLight",arguments);var a,h=this._renderer._useLightShader();a=t instanceof r.Color?t:this.color(t,e,i);var l,u,c,p=arguments[arguments.length-1];"number"==typeof p?(l=arguments[arguments.length-3],u=arguments[arguments.length-2],c=arguments[arguments.length-1]):(l=p.x,u=p.y,c=p.z),h.setUniform("uUseLighting",!0),h.setUniform("uMaterialColor",this._renderer.curFillColor);var d=Math.sqrt(l*l+u*u+c*c);return this._renderer.directionalLightDirections.push(l/d,u/d,c/d),h.setUniform("uLightingDirection",this._renderer.directionalLightDirections),this._renderer.directionalLightColors.push(a._array[0],a._array[1],a._array[2]),h.setUniform("uDirectionalColor",this._renderer.directionalLightColors),h.setUniform("uDirectionalLightCount",this._renderer.directionalLightColors.length/3),this},r.prototype.pointLight=function(t,e,i,n,o,s){var a;this._assert3d("pointLight"),r._validateParameters("pointLight",arguments),a=t instanceof r.Color?t:this.color(t,e,i);var h,l,u,c=arguments[arguments.length-1];"number"==typeof c?(h=arguments[arguments.length-3],l=arguments[arguments.length-2],u=arguments[arguments.length-1]):(h=c.x,l=c.y,u=c.z);var p=this._renderer._useLightShader();return p.setUniform("uUseLighting",!0),p.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.pointLightPositions.push(h,l,u),p.setUniform("uPointLightLocation",this._renderer.pointLightPositions),this._renderer.pointLightColors.push(a._array[0],a._array[1],a._array[2]),p.setUniform("uPointLightColor",this._renderer.pointLightColors),p.setUniform("uPointLightCount",this._renderer.pointLightColors.length/3),this},e.exports=r},{"../core/main":24}],67:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry"),r.prototype.loadModel=function(t){var e,i,n;r._validateParameters("loadModel",arguments),"boolean"==typeof arguments[1]?(e=arguments[1],i=arguments[2],n=arguments[3]):(e=!1,i=arguments[1],n=arguments[2]);var o=new r.Geometry;o.gid=t+"|"+e;var s=this;return this.loadStrings(t,function(t){(function(t,e){for(var i={v:[],vt:[],vn:[]},n={},o=0;o0)if("v"===s[0]||"vn"===s[0]){var a=new r.Vector(parseFloat(s[1]),parseFloat(s[2]),parseFloat(s[3]));i[s[0]].push(a)}else if("vt"===s[0]){var h=[parseFloat(s[1]),parseFloat(s[2])];i[s[0]].push(h)}else if("f"===s[0])for(var l=3;l0&&(this._renderer.geometryInHash(t.gid)||(t._makeTriangleEdges()._edgesToVertices(),this._renderer.createBuffers(t.gid,t)),this._renderer.drawBuffers(t.gid))},e.exports=r},{"../core/main":24,"./p5.Geometry":70}],68:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Texture"),r.prototype.loadShader=function(t,e){r._validateParameters("loadShader",arguments);var i=new r.Shader,n=this,o=!1,s=!1;return this.loadStrings(e,function(t){i._fragSrc=t.join("\n"),o=!0,s&&n._decrementPreload()}),this.loadStrings(t,function(t){i._vertSrc=t.join("\n"),s=!0,o&&n._decrementPreload()}),i},r.prototype.createShader=function(t,e){return this._assert3d("createShader"),r._validateParameters("createShader",arguments),new r.Shader(this._renderer,t,e)},r.prototype.shader=function(t){return this._assert3d("shader"),r._validateParameters("shader",arguments),void 0===t._renderer&&(t._renderer=this._renderer),t.isStrokeShader()?this._renderer.setStrokeShader(t):this._renderer.setFillShader(t),this},r.prototype.normalMaterial=function(){return this._assert3d("normalMaterial"),r._validateParameters("normalMaterial",arguments),this._renderer.drawMode=n.FILL,this._renderer.setFillShader(this._renderer._getNormalShader()),this._renderer.curFillColor=[1,1,1,1],this.noStroke(),this},r.prototype.texture=function(t){this._assert3d("texture"),r._validateParameters("texture",arguments),this._renderer.drawMode=n.TEXTURE;var e=this._renderer._useLightShader();return e.setUniform("uSpecular",!1),e.setUniform("isTexture",!0),e.setUniform("uSampler",t),this.noStroke(),this},r.prototype.ambientMaterial=function(t,e,i,n){this._assert3d("ambientMaterial"),r._validateParameters("ambientMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!1),s.setUniform("isTexture",!1),this},r.prototype.specularMaterial=function(t,e,i,n){this._assert3d("specularMaterial"),r._validateParameters("specularMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!0),s.setUniform("isTexture",!1),this},r.RendererGL.prototype._applyColorBlend=function(t){var e=this.GL,i=this.drawMode===n.TEXTURE;return i||t[t.length-1]<1?(e.depthMask(i),e.enable(e.BLEND),e.blendEquation(e.FUNC_ADD),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA)):(e.depthMask(!0),e.disable(e.BLEND)),t},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Texture":76}],69:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.camera=function(){return this._assert3d("camera"),r._validateParameters("camera",arguments),this._renderer._curCamera.camera.apply(this._renderer._curCamera,arguments),this},r.prototype.perspective=function(){return this._assert3d("perspective"),r._validateParameters("perspective",arguments),this._renderer._curCamera.perspective.apply(this._renderer._curCamera,arguments),this},r.prototype.ortho=function(){return this._assert3d("ortho"),r._validateParameters("ortho",arguments),this._renderer._curCamera.ortho.apply(this._renderer._curCamera,arguments),this},r.prototype.createCamera=function(){this._assert3d("createCamera");var t=new r.Camera(this._renderer);return t._computeCameraDefaultSettings(),t._setDefaultCamera(),this._renderer._curCamera=t,t},r.Camera=function(t){this._renderer=t,this.cameraType="default",this.cameraMatrix=new r.Matrix,this.projMatrix=new r.Matrix},r.Camera.prototype.perspective=function(t,e,i,n){void 0===t?(t=this.defaultCameraFOV,this.cameraFOV=t):this.cameraFOV=this._renderer._pInst._toRadians(t),void 0===e&&(e=this.defaultAspectRatio),void 0===i&&(i=this.defaultCameraNear),void 0===n&&(n=this.defaultCameraFar),i<=1e-4&&(i=.01,console.log("Avoid perspective near plane values close to or below 0. Setting value to 0.01.")),nMath.PI?h=Math.PI:h<=0&&(h=.001);var l=Math.sin(h)*s*Math.sin(a),u=Math.cos(h)*s,c=Math.sin(h)*s*Math.cos(a);this.camera(l+this.centerX,u+this.centerY,c+this.centerZ,this.centerX,this.centerY,this.centerZ,0,1,0)},r.Camera.prototype._isActive=function(){return this===this._renderer._curCamera},r.prototype.setCamera=function(t){this._renderer._curCamera=t,this._renderer.uPMatrix.set(t.projMatrix.mat4[0],t.projMatrix.mat4[1],t.projMatrix.mat4[2],t.projMatrix.mat4[3],t.projMatrix.mat4[4],t.projMatrix.mat4[5],t.projMatrix.mat4[6],t.projMatrix.mat4[7],t.projMatrix.mat4[8],t.projMatrix.mat4[9],t.projMatrix.mat4[10],t.projMatrix.mat4[11],t.projMatrix.mat4[12],t.projMatrix.mat4[13],t.projMatrix.mat4[14],t.projMatrix.mat4[15])},e.exports=r.Camera},{"../core/main":24}],70:[function(t,e,i){"use strict";var r=t("../core/main");r.Geometry=function(t,e,i){return this.vertices=[],this.lineVertices=[],this.lineNormals=[],this.vertexNormals=[],this.faces=[],this.uvs=[],this.edges=[],this.detailX=void 0!==t?t:1,this.detailY=void 0!==e?e:1,i instanceof Function&&i.call(this),this},r.Geometry.prototype.computeFaces=function(){this.faces.length=0;for(var t,e,i,r,n=this.detailX+1,o=0;o1&&(u=1),h.mult(Math.asin(u)/l))},r.Geometry.prototype.computeNormals=function(){var t,e=this.vertexNormals,i=this.vertices,n=this.faces;for(e.length=0,t=0;tthis.vertices.length-1-this.detailX;e--)t.add(this.vertexNormals[e]);for(t=r.Vector.div(t,this.detailX),e=this.vertices.length-1;e>this.vertices.length-1-this.detailX;e--)this.vertexNormals[e]=t;return this},r.Geometry.prototype._makeTriangleEdges=function(){if(this.edges.length=0,Array.isArray(this.strokeIndices))for(var t=0,e=this.strokeIndices.length;t0){for(var t=this.vertices[0].copy(),e=this.vertices[0].copy(),i=0;i1){if(this._useImmediateModeShader(),this._doStroke&&this.drawMode!==n.TEXTURE){for(var h=0;h1e3){var e=Object.keys(this.gHash)[0];delete this.gHash[e],n--}this.gHash[t]={}},r.RendererGL.prototype._freeBuffers=function(t){var e=this.gHash[t];if(e){delete this.gHash[t],n--;var i=this.GL;e.vertexBuffer&&i.deleteBuffer(e.vertexBuffer),e.normalBuffer&&i.deleteBuffer(e.normalBuffer),e.lineNormalBuffer&&i.deleteBuffer(e.lineNormalBuffer),e.uvBuffer&&i.deleteBuffer(e.uvBuffer),e.indexBuffer&&i.deleteBuffer(e.indexBuffer),e.lineVertexBuffer&&i.deleteBuffer(e.lineVertexBuffer)}},r.RendererGL.prototype.createBuffers=function(t,e){var i=this.GL;this._initBufferDefaults(t);var r=this.gHash[t];return r.numberOfItems=3*e.faces.length,r.lineVertexCount=e.lineVertices.length,this._useColorShader(),this.curStrokeShader.attributes.aPosition&&(r.lineVertexBuffer=i.createBuffer(),this._bindBuffer(r.lineVertexBuffer,i.ARRAY_BUFFER,this._flatten(e.lineVertices),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),this.curStrokeShader.attributes.aDirection&&(r.lineNormalBuffer=i.createBuffer(),this._bindBuffer(r.lineNormalBuffer,i.ARRAY_BUFFER,this._flatten(e.lineNormals),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aPosition&&(r.vertexBuffer=i.createBuffer(),this._bindBuffer(r.vertexBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertices),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),r.indexBuffer=i.createBuffer(),this._bindBuffer(r.indexBuffer,i.ELEMENT_ARRAY_BUFFER,this._flatten(e.faces),Uint16Array,i.STATIC_DRAW),this.curFillShader.attributes.aNormal&&(r.normalBuffer=i.createBuffer(),this._bindBuffer(r.normalBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertexNormals),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aTexCoord&&(r.uvBuffer=i.createBuffer(),this._bindBuffer(r.uvBuffer,i.ARRAY_BUFFER,this._flatten(e.uvs),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,i.FLOAT,!1,0,0)),r},r.RendererGL.prototype.drawBuffers=function(t){var e=this.GL;this._useColorShader();var i=this.gHash[t];return this._doStroke&&i.lineVertexCount>0&&(this.curStrokeShader.bindShader(),i.lineVertexBuffer&&(this._bindBuffer(i.lineVertexBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.lineNormalBuffer&&(this._bindBuffer(i.lineNormalBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curStrokeColor),this._drawArrays(e.TRIANGLES,t),this.curStrokeShader.unbindShader()),!1!==this._doFill&&(this.curFillShader.bindShader(),i.vertexBuffer&&(this._bindBuffer(i.vertexBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.indexBuffer&&this._bindBuffer(i.indexBuffer,e.ELEMENT_ARRAY_BUFFER),i.normalBuffer&&(this._bindBuffer(i.normalBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,e.FLOAT,!1,0,0)),i.uvBuffer&&(this._bindBuffer(i.uvBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curFillColor),this._drawElements(e.TRIANGLES,t),this.curFillShader.unbindShader()),this},r.RendererGL.prototype.drawBuffersScaled=function(t,e,i,r){var n=this.uMVMatrix.copy();try{this.uMVMatrix.scale(e,i,r),this.drawBuffers(t)}finally{this.uMVMatrix=n}},r.RendererGL.prototype._drawArrays=function(t,e){return this.GL.drawArrays(t,0,this.gHash[e].lineVertexCount),this._pInst._pixelsDirty=!0,this},r.RendererGL.prototype._drawElements=function(t,e){this.GL.drawElements(t,this.gHash[e].numberOfItems,this.GL.UNSIGNED_SHORT,0),this._pInst._pixelsDirty=!0},r.RendererGL.prototype._drawPoints=function(t,e){var i=this.GL;this._bindBuffer(e,i.ARRAY_BUFFER,this._vToNArray(t),Float32Array,i.STATIC_DRAW),this.curPointShader.enableAttrib(this.curPointShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0),i.drawArrays(i.Points,0,t.length)},e.exports=r.RendererGL},{"../core/main":24}],74:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("libtess");t("./p5.Shader"),t("./p5.Camera"),t("../core/p5.Renderer"),t("./p5.Matrix");var s={immediateVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uResolution;\nuniform float uPointSize;\n\nvarying vec4 vColor;\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n gl_PointSize = uPointSize;\n}\n",vertexColorVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n}\n",vertexColorFrag:"precision mediump float;\nvarying vec4 vColor;\nvoid main(void) {\n gl_FragColor = vColor;\n}",normalVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\n\nvarying vec3 vVertexNormal;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vVertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertTexCoord = aTexCoord;\n}\n",normalFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nvoid main(void) {\n gl_FragColor = vec4(vVertexNormal, 1.0);\n}",basicFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nuniform vec4 uMaterialColor;\nvoid main(void) {\n gl_FragColor = uMaterialColor;\n}",lightVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uViewMatrix;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nuniform vec3 uAmbientColor[8];\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nvarying vec3 vVertexNormal;\nvarying vec2 vVertTexCoord;\nvarying vec3 vLightWeighting;\n\nvoid main(void){\n\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\n vec3 vertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertexNormal = vertexNormal;\n vVertTexCoord = aTexCoord;\n\n vec4 mvPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n vec3 eyeDirection = normalize(-mvPosition.xyz);\n\n float shininess = 32.0;\n float specularFactor = 2.0;\n float diffuseFactor = 0.3;\n\n vec3 ambientLightFactor = vec3(0.0);\n\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n ambientLightFactor += uAmbientColor[i];\n }\n\n\n vec3 directionalLightFactor = vec3(0.0);\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n vec3 dir = uLightingDirection[j];\n float directionalLightWeighting = max(dot(vertexNormal, -dir), 0.0);\n directionalLightFactor += uDirectionalColor[j] * directionalLightWeighting;\n }\n\n\n vec3 pointLightFactor = vec3(0.0);\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n vec3 loc = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightDirection = normalize(loc - mvPosition.xyz);\n\n float directionalLightWeighting = max(dot(vertexNormal, lightDirection), 0.0);\n\n float specularLightWeighting = 0.0;\n if (uSpecular ){\n vec3 reflectionDirection = reflect(-lightDirection, vertexNormal);\n specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess);\n }\n\n pointLightFactor += uPointLightColor[k] * (specularFactor * specularLightWeighting\n + directionalLightWeighting * diffuseFactor);\n }\n\n vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightFactor;\n}\n",lightTextureFrag:"precision mediump float;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nvarying vec3 vLightWeighting;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n gl_FragColor = isTexture ? texture2D(uSampler, vVertTexCoord) : uMaterialColor;\n if (uUseLighting)\n gl_FragColor.rgb *= vLightWeighting;\n}",phongVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform vec3 uAmbientColor[8];\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvoid main(void){\n\n vec4 viewModelPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n\n // Pass varyings to fragment shader\n vViewPosition = viewModelPosition.xyz;\n gl_Position = uProjectionMatrix * viewModelPosition; \n\n vNormal = normalize(uNormalMatrix * normalize(aNormal));\n vTexCoord = aTexCoord;\n\n vAmbientColor = vec3(0.0);\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n vAmbientColor += uAmbientColor[i];\n }\n}\n",phongFrag:"precision mediump float;\n\n//uniform mat4 uModelViewMatrix;\nuniform mat4 uViewMatrix;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvec3 V;\nvec3 N;\n\nconst float shininess = 32.0;\nconst float specularFactor = 2.0;\nconst float diffuseFactor = 0.73;\n\nstruct LightResult {\n\tfloat specular;\n\tfloat diffuse;\n};\n\nfloat phongSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float shininess) {\n\n vec3 R = normalize(reflect(-lightDirection, surfaceNormal)); \n return pow(max(0.0, dot(R, viewDirection)), shininess);\n}\n\nfloat lambertDiffuse(\n vec3 lightDirection,\n vec3 surfaceNormal) {\n return max(0.0, dot(-lightDirection, surfaceNormal));\n}\n\nLightResult light(vec3 lightVector) {\n\n vec3 L = normalize(lightVector);\n\n //compute our diffuse & specular terms\n LightResult lr;\n if (uSpecular)\n lr.specular = phongSpecular(L, V, N, shininess);\n lr.diffuse = lambertDiffuse(L, N);\n return lr;\n}\n\nvoid main(void) {\n\n V = normalize(vViewPosition);\n N = vNormal;\n\n vec3 diffuse = vec3(0.0);\n float specular = 0.0;\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n\n LightResult result = light(uLightingDirection[j]);\n diffuse += result.diffuse * uDirectionalColor[j];\n specular += result.specular;\n }\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n\n vec3 lightPosition = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightVector = vViewPosition - lightPosition;\n\t\n //calculate attenuation\n float lightDistance = length(lightVector);\n float falloff = 500.0 / (lightDistance + 500.0);\n\n LightResult result = light(lightVector);\n diffuse += result.diffuse * falloff * uPointLightColor[k];\n specular += result.specular * falloff;\n }\n\n gl_FragColor = isTexture ? texture2D(uSampler, vTexCoord) : uMaterialColor;\n gl_FragColor.rgb = gl_FragColor.rgb * (diffuse * diffuseFactor + vAmbientColor) + specular * specularFactor;\n}",fontVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nuniform vec4 uGlyphRect;\nuniform float uGlyphOffset;\n\nvarying vec2 vTexCoord;\nvarying float w;\n\nvoid main() {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n\n // scale by the size of the glyph's rectangle\n positionVec4.xy *= uGlyphRect.zw - uGlyphRect.xy;\n\n // move to the corner of the glyph\n positionVec4.xy += uGlyphRect.xy;\n\n // move to the letter's line offset\n positionVec4.x += uGlyphOffset;\n \n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vTexCoord = aTexCoord;\n w = gl_Position.w;\n}\n",fontFrag:"#extension GL_OES_standard_derivatives : enable\nprecision mediump float;\n\n#if 0\n // simulate integer math using floats\n\t#define int float\n\t#define ivec2 vec2\n\t#define INT(x) float(x)\n\n\tint ifloor(float v) { return floor(v); }\n\tivec2 ifloor(vec2 v) { return floor(v); }\n\n#else\n // use native integer math\n\tprecision mediump int;\n\t#define INT(x) x\n\n\tint ifloor(float v) { return int(v); }\n\tint ifloor(int v) { return v; }\n\tivec2 ifloor(vec2 v) { return ivec2(v); }\n\n#endif\n\nuniform sampler2D uSamplerStrokes;\nuniform sampler2D uSamplerRowStrokes;\nuniform sampler2D uSamplerRows;\nuniform sampler2D uSamplerColStrokes;\nuniform sampler2D uSamplerCols;\n\nuniform ivec2 uStrokeImageSize;\nuniform ivec2 uCellsImageSize;\nuniform ivec2 uGridImageSize;\n\nuniform ivec2 uGridOffset;\nuniform ivec2 uGridSize;\nuniform vec4 uMaterialColor;\n\nvarying vec2 vTexCoord;\n\n// some helper functions\nint round(float v) { return ifloor(v + 0.5); }\nivec2 round(vec2 v) { return ifloor(v + 0.5); }\nfloat saturate(float v) { return clamp(v, 0.0, 1.0); }\nvec2 saturate(vec2 v) { return clamp(v, 0.0, 1.0); }\n\nint mul(float v1, int v2) {\n return ifloor(v1 * float(v2));\n}\n\nivec2 mul(vec2 v1, ivec2 v2) {\n return ifloor(v1 * vec2(v2) + 0.5);\n}\n\n// unpack a 16-bit integer from a float vec2\nint getInt16(vec2 v) {\n ivec2 iv = round(v * 255.0);\n return iv.x * INT(128) + iv.y;\n}\n\nvec2 pixelScale;\nvec2 coverage = vec2(0.0);\nvec2 weight = vec2(0.5);\nconst float minDistance = 1.0/8192.0;\nconst float hardness = 1.05; // amount of antialias\n\n// the maximum number of curves in a glyph\nconst int N = INT(250);\n\n// retrieves an indexed pixel from a sampler\nvec4 getTexel(sampler2D sampler, int pos, ivec2 size) {\n int width = size.x;\n int y = ifloor(pos / width);\n int x = pos - y * width; // pos % width\n\n return texture2D(sampler, (vec2(x, y) + 0.5) / vec2(size));\n}\n\nvoid calulateCrossings(vec2 p0, vec2 p1, vec2 p2, out vec2 C1, out vec2 C2) {\n\n // get the coefficients of the quadratic in t\n vec2 a = p0 - p1 * 2.0 + p2;\n vec2 b = p0 - p1;\n vec2 c = p0 - vTexCoord;\n\n // found out which values of 't' it crosses the axes\n vec2 surd = sqrt(max(vec2(0.0), b * b - a * c));\n vec2 t1 = ((b - surd) / a).yx;\n vec2 t2 = ((b + surd) / a).yx;\n\n // approximate straight lines to avoid rounding errors\n if (abs(a.y) < 0.001)\n t1.x = t2.x = c.y / (2.0 * b.y);\n\n if (abs(a.x) < 0.001)\n t1.y = t2.y = c.x / (2.0 * b.x);\n\n // plug into quadratic formula to find the corrdinates of the crossings\n C1 = ((a * t1 - b * 2.0) * t1 + c) * pixelScale;\n C2 = ((a * t2 - b * 2.0) * t2 + c) * pixelScale;\n}\n\nvoid coverageX(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n // determine on which side of the x-axis the points lie\n bool y0 = p0.y > vTexCoord.y;\n bool y1 = p1.y > vTexCoord.y;\n bool y2 = p2.y > vTexCoord.y;\n\n // could web be under the curve (after t1)?\n if (y1 ? !y2 : y0) {\n // add the coverage for t1\n coverage.x += saturate(C1.x + 0.5);\n // calculate the anti-aliasing for t1\n weight.x = min(weight.x, abs(C1.x));\n }\n\n // are we outside the curve (after t2)?\n if (y1 ? !y0 : y2) {\n // subtract the coverage for t2\n coverage.x -= saturate(C2.x + 0.5);\n // calculate the anti-aliasing for t2\n weight.x = min(weight.x, abs(C2.x));\n }\n}\n\n// this is essentially the same as coverageX, but with the axes swapped\nvoid coverageY(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n bool x0 = p0.x > vTexCoord.x;\n bool x1 = p1.x > vTexCoord.x;\n bool x2 = p2.x > vTexCoord.x;\n\n if (x1 ? !x2 : x0) {\n coverage.y -= saturate(C1.y + 0.5);\n weight.y = min(weight.y, abs(C1.y));\n }\n\n if (x1 ? !x0 : x2) {\n coverage.y += saturate(C2.y + 0.5);\n weight.y = min(weight.y, abs(C2.y));\n }\n}\n\nvoid main() {\n\n // calculate the pixel scale based on screen-coordinates\n pixelScale = hardness / fwidth(vTexCoord);\n\n // which grid cell is this pixel in?\n ivec2 gridCoord = ifloor(vTexCoord * vec2(uGridSize));\n\n // intersect curves in this row\n {\n // the index into the row info bitmap\n int rowIndex = gridCoord.y + uGridOffset.y;\n // fetch the info texel\n vec4 rowInfo = getTexel(uSamplerRows, rowIndex, uGridImageSize);\n // unpack the rowInfo\n int rowStrokeIndex = getInt16(rowInfo.xy);\n int rowStrokeCount = getInt16(rowInfo.zw);\n\n for (int iRowStroke = INT(0); iRowStroke < N; iRowStroke++) {\n if (iRowStroke >= rowStrokeCount)\n break;\n\n // each stroke is made up of 3 points: the start and control point\n // and the start of the next curve.\n // fetch the indices of this pair of strokes:\n vec4 strokeIndices = getTexel(uSamplerRowStrokes, rowStrokeIndex++, uCellsImageSize);\n\n // unpack the stroke index\n int strokePos = getInt16(strokeIndices.xy);\n\n // fetch the two strokes\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n\n // calculate the coverage\n coverageX(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n // intersect curves in this column\n {\n int colIndex = gridCoord.x + uGridOffset.x;\n vec4 colInfo = getTexel(uSamplerCols, colIndex, uGridImageSize);\n int colStrokeIndex = getInt16(colInfo.xy);\n int colStrokeCount = getInt16(colInfo.zw);\n \n for (int iColStroke = INT(0); iColStroke < N; iColStroke++) {\n if (iColStroke >= colStrokeCount)\n break;\n\n vec4 strokeIndices = getTexel(uSamplerColStrokes, colStrokeIndex++, uCellsImageSize);\n\n int strokePos = getInt16(strokeIndices.xy);\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n coverageY(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n weight = saturate(1.0 - weight * 2.0);\n float distance = max(weight.x + weight.y, minDistance); // manhattan approx.\n float antialias = abs(dot(coverage, weight) / distance);\n float cover = min(abs(coverage.x), abs(coverage.y));\n gl_FragColor = uMaterialColor;\n gl_FragColor.a *= saturate(max(antialias, cover));\n}",lineVert:"/*\n Part of the Processing project - http://processing.org\n Copyright (c) 2012-15 The Processing Foundation\n Copyright (c) 2004-12 Ben Fry and Casey Reas\n Copyright (c) 2001-04 Massachusetts Institute of Technology\n This library is free software; you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, version 2.1.\n This library is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General\n Public License along with this library; if not, write to the\n Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n Boston, MA 02111-1307 USA\n*/\n\n#define PROCESSING_LINE_SHADER\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uStrokeWeight;\n\nuniform vec4 uViewport;\n\n// using a scale <1 moves the lines towards the camera\n// in order to prevent popping effects due to half of\n// the line disappearing behind the geometry faces.\nvec3 scale = vec3(0.9995);\n\nattribute vec4 aPosition;\nattribute vec4 aDirection;\n \nvoid main() {\n vec4 posp = uModelViewMatrix * aPosition;\n vec4 posq = uModelViewMatrix * (aPosition + vec4(aDirection.xyz, 0));\n\n // Moving vertices slightly toward the camera\n // to avoid depth-fighting with the fill triangles.\n // Discussed here:\n // http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=252848 \n posp.xyz = posp.xyz * scale;\n posq.xyz = posq.xyz * scale;\n\n vec4 p = uProjectionMatrix * posp;\n vec4 q = uProjectionMatrix * posq;\n\n // formula to convert from clip space (range -1..1) to screen space (range 0..[width or height])\n // screen_p = (p.xy/p.w + <1,1>) * 0.5 * uViewport.zw\n\n // prevent division by W by transforming the tangent formula (div by 0 causes\n // the line to disappear, see https://github.com/processing/processing/issues/5183)\n // t = screen_q - screen_p\n //\n // tangent is normalized and we don't care which aDirection it points to (+-)\n // t = +- normalize( screen_q - screen_p )\n // t = +- normalize( (q.xy/q.w+<1,1>)*0.5*uViewport.zw - (p.xy/p.w+<1,1>)*0.5*uViewport.zw )\n //\n // extract common factor, <1,1> - <1,1> cancels out\n // t = +- normalize( (q.xy/q.w - p.xy/p.w) * 0.5 * uViewport.zw )\n //\n // convert to common divisor\n // t = +- normalize( ((q.xy*p.w - p.xy*q.w) / (p.w*q.w)) * 0.5 * uViewport.zw )\n //\n // remove the common scalar divisor/factor, not needed due to normalize and +-\n // (keep uViewport - can't remove because it has different components for x and y\n // and corrects for aspect ratio, see https://github.com/processing/processing/issues/5181)\n // t = +- normalize( (q.xy*p.w - p.xy*q.w) * uViewport.zw )\n\n vec2 tangent = normalize((q.xy*p.w - p.xy*q.w) * uViewport.zw);\n\n // flip tangent to normal (it's already normalized)\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n float thickness = aDirection.w * uStrokeWeight;\n vec2 offset = normal * thickness / 2.0;\n\n // Perspective ---\n // convert from world to clip by multiplying with projection scaling factor\n // to get the right thickness (see https://github.com/processing/processing/issues/5182)\n // invert Y, projections in Processing invert Y\n vec2 perspScale = (uProjectionMatrix * vec4(1, -1, 0, 0)).xy;\n\n // No Perspective ---\n // multiply by W (to cancel out division by W later in the pipeline) and\n // convert from screen to clip (derived from clip to screen above)\n vec2 noPerspScale = p.w / (0.5 * uViewport.zw);\n\n //gl_Position.xy = p.xy + offset.xy * mix(noPerspScale, perspScale, float(perspective > 0));\n gl_Position.xy = p.xy + offset.xy * perspScale;\n gl_Position.zw = p.zw;\n}\n",lineFrag:"precision mediump float;\nprecision mediump int;\n\nuniform vec4 uMaterialColor;\n\nvoid main() {\n gl_FragColor = uMaterialColor;\n}",pointVert:"attribute vec3 aPosition;\nuniform float uPointSize;\nvarying float vStrokeWeight;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvoid main() {\n\tvec4 positionVec4 = vec4(aPosition, 1.0);\n\tgl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\tgl_PointSize = uPointSize;\n\tvStrokeWeight = uPointSize;\n}",pointFrag:"precision mediump float;\nprecision mediump int;\nuniform vec4 uMaterialColor;\nvarying float vStrokeWeight;\n\nvoid main(){\n\tfloat mask = 0.0;\n\n\t// make a circular mask using the gl_PointCoord (goes from 0 - 1 on a point)\n // might be able to get a nicer edge on big strokeweights with smoothstep but slightly less performant\n\n\tmask = step(0.98, length(gl_PointCoord * 2.0 - 1.0));\n\n\t// if strokeWeight is 1 or less lets just draw a square\n\t// this prevents weird artifacting from carving circles when our points are really small\n\t// if strokeWeight is larger than 1, we just use it as is\n\n\tmask = mix(0.0, mask, clamp(floor(vStrokeWeight - 0.5),0.0,1.0));\n\n\t// throw away the borders of the mask\n // otherwise we get weird alpha blending issues\n\n\tif(mask > 0.98){\n discard;\n \t}\n\n \tgl_FragColor = vec4(uMaterialColor.rgb * (1.0 - mask), uMaterialColor.a) ;\n}"};r.RendererGL=function(t,e,i,n){return r.Renderer.call(this,t,e,i),this.attributes={},n=n||{},this.attributes.alpha=void 0===n.alpha||n.alpha,this.attributes.depth=void 0===n.depth||n.depth,this.attributes.stencil=void 0===n.stencil||n.stencil,this.attributes.antialias=void 0!==n.antialias&&n.antialias,this.attributes.premultipliedAlpha=void 0!==n.premultipliedAlpha&&n.premultipliedAlpha,this.attributes.preserveDrawingBuffer=void 0===n.preserveDrawingBuffer||n.preserveDrawingBuffer,this.attributes.perPixelLighting=void 0!==n.perPixelLighting&&n.perPixelLighting,this._initContext(),this.isP3D=!0,this.GL=this.drawingContext,this.ambientLightColors=[],this.directionalLightDirections=[],this.directionalLightColors=[],this.pointLightPositions=[],this.pointLightColors=[],this.uMVMatrix=new r.Matrix,this.uPMatrix=new r.Matrix,this.uNMatrix=new r.Matrix("mat3"),this._curCamera=new r.Camera(this),this._curCamera._computeCameraDefaultSettings(),this._curCamera._setDefaultCamera(),this.gHash={},this._defaultLightShader=void 0,this._defaultImmediateModeShader=void 0,this._defaultNormalShader=void 0,this._defaultColorShader=void 0,this._defaultPointShader=void 0,this.curFillShader=void 0,this.curStrokeShader=void 0,this.curPointShader=void 0,this._useColorShader(),this.setStrokeShader(this._getLineShader()),this._usePointShader(),this._pointVertexBuffer=this.GL.createBuffer(),this.isImmediateDrawing=!1,this.immediateMode={},this.fill(255,255,255,255),this.pointSize=5,this.strokeWeight(1),this.stroke(0,0,0),this.textures=[],this._curveTightness=6,this._lookUpTableBezier=[],this._lookUpTableQuadratic=[],this._lutBezierDetail=0,this._lutQuadraticDetail=0,this._tessy=this._initTessy(),this.fontInfos={},this},r.RendererGL.prototype=Object.create(r.Renderer.prototype),r.RendererGL.prototype._initContext=function(){try{if(this.drawingContext=this.canvas.getContext("webgl",this.attributes)||this.canvas.getContext("experimental-webgl",this.attributes),null===this.drawingContext)throw new Error("Error creating webgl context");console.log("p5.RendererGL: enabled webgl context");var t=this.drawingContext;t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),this._viewport=this.drawingContext.getParameter(this.drawingContext.VIEWPORT)}catch(t){throw t}},r.RendererGL.prototype._resetContext=function(t,e,i){var n=this.width,o=this.height,s=this.canvas.id,a=this.canvas;a&&a.parentNode.removeChild(a),(a=document.createElement("canvas")).id=s,this._pInst._userNode?this._pInst._userNode.appendChild(a):document.body.appendChild(a),this._pInst.canvas=a;var h=new r.RendererGL(this._pInst.canvas,this._pInst,!0,t);this._pInst._setProperty("_renderer",h),h.resize(n,o),h._applyDefaults(),this._pInst._elements.push(h),"function"==typeof i&&setTimeout(function(){i.apply(window._renderer,e)},0)},r.prototype.setAttributes=function(t,e){var i;this._assert3d("setAttributes"),void 0!==e?(i={})[t]=e:t instanceof Object&&(i=t),this.push(),this._renderer._resetContext(i),this.pop()},r.RendererGL.prototype._update=function(){this.uMVMatrix.set(this._curCamera.cameraMatrix.mat4[0],this._curCamera.cameraMatrix.mat4[1],this._curCamera.cameraMatrix.mat4[2],this._curCamera.cameraMatrix.mat4[3],this._curCamera.cameraMatrix.mat4[4],this._curCamera.cameraMatrix.mat4[5],this._curCamera.cameraMatrix.mat4[6],this._curCamera.cameraMatrix.mat4[7],this._curCamera.cameraMatrix.mat4[8],this._curCamera.cameraMatrix.mat4[9],this._curCamera.cameraMatrix.mat4[10],this._curCamera.cameraMatrix.mat4[11],this._curCamera.cameraMatrix.mat4[12],this._curCamera.cameraMatrix.mat4[13],this._curCamera.cameraMatrix.mat4[14],this._curCamera.cameraMatrix.mat4[15]),this.ambientLightColors.length=0,this.directionalLightDirections.length=0,this.directionalLightColors.length=0,this.pointLightPositions.length=0,this.pointLightColors.length=0},r.RendererGL.prototype.background=function(){var t=this._pInst.color.apply(this._pInst,arguments),e=t.levels[0]/255,i=t.levels[1]/255,r=t.levels[2]/255,n=t.levels[3]/255;this.GL.clearColor(e,i,r,n),this.GL.depthMask(!0),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.fill=function(t,e,i,o){var s=r.prototype.color.apply(this._pInst,arguments);this.curFillColor=s._array,this.isImmediateDrawing?this.setFillShader(this._getImmediateModeShader()):this.setFillShader(this._getColorShader()),this.drawMode=n.FILL,this.curFillShader.setUniform("uMaterialColor",this.curFillColor)},r.RendererGL.prototype.stroke=function(t,e,i,n){arguments[3]=255;var o=r.prototype.color.apply(this._pInst,arguments);this.curStrokeColor=o._array,this.curStrokeShader.setUniform("uMaterialColor",this.curStrokeColor),this.curPointShader.setUniform("uMaterialColor",o._array)},r.RendererGL.prototype.strokeWeight=function(t){this.curStrokeWeight!==t&&(this.pointSize=t,this.curStrokeWeight=t,this.curStrokeShader.setUniform("uStrokeWeight",t),this.curPointShader.setUniform("uPointSize",t))},r.RendererGL.prototype.get=function(t,e,i,n){return r.Renderer2D.prototype.get.apply(this,[t,e,i,n])},r.RendererGL.prototype.loadPixels=function(){if(!0===this.attributes.preserveDrawingBuffer){var t=this._pInst._pixelDensity,e=this.width,i=this.height;e*=t,i*=t,void 0===this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4)),this.GL.readPixels(0,0,e,i,this.GL.RGBA,this.GL.UNSIGNED_BYTE,this.pixels),this._pInst._setProperty("pixels",this.pixels)}else console.log("loadPixels only works in WebGL when preserveDrawingBuffer is true.")},r.RendererGL.prototype.geometryInHash=function(t){return void 0!==this.gHash[t]},r.RendererGL.prototype.resize=function(t,e){r.Renderer.prototype.resize.call(this,t,e),this.GL.viewport(0,0,this.GL.drawingBufferWidth,this.GL.drawingBufferHeight),this._viewport=this.GL.getParameter(this.GL.VIEWPORT),this._curCamera._resize(),void 0!==this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4))},r.RendererGL.prototype.clear=function(){var t=arguments[0]||0,e=arguments[1]||0,i=arguments[2]||0,r=arguments[3]||0;this.GL.clearColor(t,e,i,r),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.translate=function(t,e,i){return t instanceof r.Vector&&(i=t.z,e=t.y,t=t.x),this.uMVMatrix.translate([t,e,i]),this},r.RendererGL.prototype.scale=function(t,e,i){return this.uMVMatrix.scale(t,e,i),this},r.RendererGL.prototype.rotate=function(t,e){return void 0===e?this.rotateZ(t):(arguments[0]=this._pInst._fromRadians(t),r.Matrix.prototype.rotate.apply(this.uMVMatrix,arguments),this)},r.RendererGL.prototype.rotateX=function(t){return this.rotate(t,1,0,0),this},r.RendererGL.prototype.rotateY=function(t){return this.rotate(t,0,1,0),this},r.RendererGL.prototype.rotateZ=function(t){return this.rotate(t,0,0,1),this},r.RendererGL.prototype.push=function(){var t=r.Renderer.prototype.push.apply(this),e=t.properties;return e.uMVMatrix=this.uMVMatrix.copy(),e.uPMatrix=this.uPMatrix.copy(),e._curCamera=this._curCamera,this._curCamera=this._curCamera.copy(),t},r.RendererGL.prototype.resetMatrix=function(){return this.uMVMatrix=r.Matrix.identity(this._pInst),this},r.RendererGL.prototype.setFillShader=function(t){return this.curFillShader!==t&&(this.curFillShader=t,this.curFillShader.init()),this.curFillShader},r.RendererGL.prototype.setPointShader=function(t){return this.curPointShader!==t&&(this.curPointShader=t,this.curPointShader.init()),this.curPointShader},r.RendererGL.prototype.setStrokeShader=function(t){return this.curStrokeShader!==t&&(this.curStrokeShader=t,this.curStrokeShader.init()),this.curStrokeShader},r.RendererGL.prototype._useLightShader=function(){return this.curFillShader&&this.curFillShader.isLightShader()||this.setFillShader(this._getLightShader()),this.curFillShader},r.RendererGL.prototype._useColorShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultImmediateModeShader||this.setFillShader(this._getColorShader()),this.curFillShader},r.RendererGL.prototype._usePointShader=function(){return this.curPointShader||this.setPointShader(this._getPointShader()),this.curPointShader},r.RendererGL.prototype._useImmediateModeShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultColorShader||this.setFillShader(this._getImmediateModeShader()),this.curFillShader},r.RendererGL.prototype._getLightShader=function(){return this._defaultLightShader||(this.attributes.perPixelLighting?this._defaultLightShader=new r.Shader(this,s.phongVert,s.phongFrag):this._defaultLightShader=new r.Shader(this,s.lightVert,s.lightTextureFrag)),this._defaultLightShader},r.RendererGL.prototype._getImmediateModeShader=function(){return this._defaultImmediateModeShader||(this._defaultImmediateModeShader=new r.Shader(this,s.immediateVert,s.vertexColorFrag)),this._defaultImmediateModeShader},r.RendererGL.prototype._getNormalShader=function(){return this._defaultNormalShader||(this._defaultNormalShader=new r.Shader(this,s.normalVert,s.normalFrag)),this._defaultNormalShader},r.RendererGL.prototype._getColorShader=function(){return this._defaultColorShader||(this._defaultColorShader=new r.Shader(this,s.normalVert,s.basicFrag)),this._defaultColorShader},r.RendererGL.prototype._getPointShader=function(){return this._defaultPointShader||(this._defaultPointShader=new r.Shader(this,s.pointVert,s.pointFrag)),this._defaultPointShader},r.RendererGL.prototype._getLineShader=function(){return this._defaultLineShader||(this._defaultLineShader=new r.Shader(this,s.lineVert,s.lineFrag)),this._defaultLineShader},r.RendererGL.prototype._getFontShader=function(){return this._defaultFontShader||(this.GL.getExtension("OES_standard_derivatives"),this._defaultFontShader=new r.Shader(this,s.fontVert,s.fontFrag)),this._defaultFontShader},r.RendererGL.prototype._getEmptyTexture=function(){if(!this._emptyTexture){var t=new r.Image(1,1);t.set(0,0,255),this._emptyTexture=new r.Texture(this,t)}return this._emptyTexture},r.RendererGL.prototype.getTexture=function(t){for(var e=this.textures,i=0;i2e4){var e,i=Object.prototype.toString,r=[],n=t.slice();e=n.pop();do{"[object Array]"===i.call(e)?n.push.apply(n,e):r.push(e)}while(n.length&&void 0!==(e=n.pop()));return r.reverse(),r}return[].concat.apply([],t)},r.RendererGL.prototype._vToNArray=function(t){return this._flatten(t.map(function(t){return[t.x,t.y,t.z]}))},r.prototype._assert3d=function(t){if(!this._renderer.isP3D)throw new Error(t+"() is only supported in WEBGL mode. If you'd like to use 3D graphics and WebGL, see https://p5js.org/examples/form-3d-primitives.html for more information.")},r.RendererGL.prototype._initTessy=function(){var t=new o.GluTesselator;return t.gluTessCallback(o.gluEnum.GLU_TESS_VERTEX_DATA,function(t,e){e[e.length]=t[0],e[e.length]=t[1],e[e.length]=t[2]}),t.gluTessCallback(o.gluEnum.GLU_TESS_BEGIN,function(t){t!==o.primitiveType.GL_TRIANGLES&&console.log("expected TRIANGLES but got type: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_ERROR,function(t){console.log("error callback"),console.log("error number: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_COMBINE,function(t,e,i){return[t[0],t[1],t[2]]}),t.gluTessCallback(o.gluEnum.GLU_TESS_EDGE_FLAG,function(t){}),t},r.RendererGL.prototype._triangulate=function(t){this._tessy.gluTessNormal(0,0,1);var e=[];this._tessy.gluTessBeginPolygon(e);for(var i=0;i1&&(s=s.substring(0,s.indexOf("[0]"))),o.name=s,o.type=n.type,o.type===t.SAMPLER_2D&&(o.samplerIndex=i,i++,this.samplers.push(o)),this.uniforms[s]=o}this._loadedUniforms=!0}},r.Shader.prototype.compile=function(){},r.Shader.prototype.bindShader=function(){this.init(),this._bound||(this.useProgram(),this._bound=!0,this.bindTextures(),this._setMatrixUniforms(),this===this._renderer.curStrokeShader&&this._setViewportUniform())},r.Shader.prototype.unbindShader=function(){return this._bound&&(this.unbindTextures(),this._bound=!1),this},r.Shader.prototype.bindTextures=function(){for(var t=this._renderer.GL,e=0;e1?e.length&&n.uniform1iv(r,e):n.uniform1i(r,e);break;case n.FLOAT:i.size>1?e.length&&n.uniform1fv(r,e):n.uniform1f(r,e);break;case n.FLOAT_MAT3:n.uniformMatrix3fv(r,!1,e);break;case n.FLOAT_MAT4:n.uniformMatrix4fv(r,!1,e);break;case n.FLOAT_VEC2:i.size>1?e.length&&n.uniform2fv(r,e):n.uniform2f(r,e[0],e[1]);break;case n.FLOAT_VEC3:i.size>1?e.length&&n.uniform3fv(r,e):n.uniform3f(r,e[0],e[1],e[2]);break;case n.FLOAT_VEC4:i.size>1?e.length&&n.uniform4fv(r,e):n.uniform4f(r,e[0],e[1],e[2],e[3]);break;case n.INT_VEC2:i.size>1?e.length&&n.uniform2iv(r,e):n.uniform2i(r,e[0],e[1]);break;case n.INT_VEC3:i.size>1?e.length&&n.uniform3iv(r,e):n.uniform3i(r,e[0],e[1],e[2]);break;case n.INT_VEC4:i.size>1?e.length&&n.uniform4iv(r,e):n.uniform4i(r,e[0],e[1],e[2],e[3]);break;case n.SAMPLER_2D:n.activeTexture(n.TEXTURE0+i.samplerIndex),i.texture=this._renderer.getTexture(e),n.uniform1i(i.location,i.samplerIndex)}return this}},r.Shader.prototype.isLightShader=function(){return void 0!==this.uniforms.uUseLighting||void 0!==this.uniforms.uAmbientLightCount||void 0!==this.uniforms.uDirectionalLightCount||void 0!==this.uniforms.uPointLightCount||void 0!==this.uniforms.uAmbientColor||void 0!==this.uniforms.uDirectionalColor||void 0!==this.uniforms.uPointLightLocation||void 0!==this.uniforms.uPointLightColor||void 0!==this.uniforms.uLightingDirection||void 0!==this.uniforms.uSpecular},r.Shader.prototype.isTextureShader=function(){return this.samplerIndex>0},r.Shader.prototype.isColorShader=function(){return void 0!==this.attributes.aVertexColor||void 0!==this.uniforms.uMaterialColor},r.Shader.prototype.isTexLightShader=function(){return this.isLightShader()&&this.isTextureShader()},r.Shader.prototype.isStrokeShader=function(){return void 0!==this.uniforms.uStrokeWeight},r.Shader.prototype.enableAttrib=function(t,e,i,r,n,o){var s=this._renderer.GL;return-1!==t&&(s.enableVertexAttribArray(t),s.vertexAttribPointer(t,e,i,r,n,o)),this},e.exports=r.Shader},{"../core/main":24}],76:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.Texture=function(t,e){this._renderer=t;var i=this._renderer.GL;this.src=e,this.glTex=void 0,this.glTarget=i.TEXTURE_2D,this.glFormat=i.RGBA,this.mipmaps=!1,this.glMinFilter=i.LINEAR,this.glMagFilter=i.LINEAR,this.glWrapS=i.CLAMP_TO_EDGE,this.glWrapT=i.CLAMP_TO_EDGE,this.isSrcMediaElement=void 0!==r.MediaElement&&e instanceof r.MediaElement,this._videoPrevUpdateTime=0,this.isSrcHTMLElement=void 0!==r.Element&&e instanceof r.Element&&!(e instanceof r.Graphics),this.isSrcP5Image=e instanceof r.Image,this.isSrcP5Graphics=e instanceof r.Graphics,this.isImageData="undefined"!=typeof ImageData&&e instanceof ImageData;var n=this._getTextureDataFromSource();return this.width=n.width,this.height=n.height,this.init(n),this},r.Texture.prototype._getTextureDataFromSource=function(){var t;return this.isSrcP5Image?t=this.src.canvas:this.isSrcMediaElement||this.isSrcP5Graphics||this.isSrcHTMLElement?t=this.src.elt:this.isImageData&&(t=this.src),t},r.Texture.prototype.init=function(t){var e=this._renderer.GL;if(this.glTex=e.createTexture(),this.bindTexture(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,this.glMagFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,this.glMinFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,this.glWrapS),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,this.glWrapT),0===this.width||0===this.height||this.isSrcMediaElement&&!this.src.loadedmetadata){var i=new Uint8Array([1,1,1,1]);e.texImage2D(this.glTarget,0,e.RGBA,1,1,0,this.glFormat,e.UNSIGNED_BYTE,i)}else e.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,e.UNSIGNED_BYTE,t)},r.Texture.prototype.update=function(){var t=this.src;if(0===t.width||0===t.height)return!1;var e=this._getTextureDataFromSource(),i=!1,r=this._renderer.GL;return e.width!==this.width||e.height!==this.height?(i=!0,this.width=e.width,this.height=e.height,this.isSrcP5Image?t.setModified(!1):(this.isSrcMediaElement||this.isSrcHTMLElement)&&t.setModified(!0)):this.isSrcP5Image?t.isModified()&&(i=!0,t.setModified(!1)):this.isSrcMediaElement?t.isModified()?(i=!0,t.setModified(!1)):t.loadedmetadata&&this._videoPrevUpdateTime!==t.time()&&(this._videoPrevUpdateTime=t.time(),i=!0):this.isImageData?t._dirty&&(t._dirty=!1,i=!0):i=!0,i&&(this.bindTexture(),r.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,r.UNSIGNED_BYTE,e)),i},r.Texture.prototype.bindTexture=function(){return this._renderer.GL.bindTexture(this.glTarget,this.glTex),this},r.Texture.prototype.unbindTexture=function(){this._renderer.GL.bindTexture(this.glTarget,null)},r.Texture.prototype.setInterpolation=function(t,e){var i=this._renderer.GL;t===n.NEAREST?this.glMinFilter=i.NEAREST:this.glMinFilter=i.LINEAR,e===n.NEAREST?this.glMagFilter=i.NEAREST:this.glMagFilter=i.LINEAR,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,this.glMinFilter),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,this.glMagFilter),this.unbindTexture()},r.Texture.prototype.setWrapMode=function(t,e){var i=this._renderer.GL,r=function(t){return 0==(t&t-1)},o=r(this.width),s=r(this.width);t===n.REPEAT?o&&s?this.glWrapS=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):t===n.MIRROR?o&&s?this.glWrapS=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):this.glWrapS=i.CLAMP_TO_EDGE,e===n.REPEAT?o&&s?this.glWrapT=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):e===n.MIRROR?o&&s?this.glWrapT=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):this.glWrapT=i.CLAMP_TO_EDGE,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,this.glWrapS),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,this.glWrapT),this.unbindTexture()},e.exports=r.Texture},{"../core/constants":18,"../core/main":24}],77:[function(t,e,i){"use strict";function r(t,e){this.width=t,this.height=e,this.infos=[],this.findImage=function(t){var e=this.width*this.height;if(t>e)throw new Error("font is too complex to render in 3D");for(var i,r,n=this.infos.length-1;n>=0;--n){var o=this.infos[n];if(o.index+t0;){var n=t[r];e>n&&(e=n),ii?i:t}(255*t,0,255)}function r(t,e,i,r,n,s,a,h){for(var u=new function t(e,i,r,n){this.p0=e,this.c0=i,this.c1=r,this.p1=n,this.toQuadratic=function(){return{x:this.p0.x,y:this.p0.y,x1:this.p1.x,y1:this.p1.y,cx:(3*(this.c0.x+this.c1.x)-(this.p0.x+this.p1.x))/4,cy:(3*(this.c0.y+this.c1.y)-(this.p0.y+this.p1.y))/4}},this.quadError=function(){return o.Vector.sub(o.Vector.sub(this.p1,this.p0),o.Vector.mult(o.Vector.sub(this.c1,this.c0),3)).mag()/2},this.split=function(e){var i=o.Vector.lerp(this.p0,this.c0,e),r=o.Vector.lerp(this.c0,this.c1,e),n=o.Vector.lerp(i,r,e);this.c1=o.Vector.lerp(this.c1,this.p1,e),this.c0=o.Vector.lerp(r,this.c1,e);var s=o.Vector.lerp(n,this.c0,e),a=new t(this.p0,i,n,s);return this.p0=s,a},this.splitInflections=function(){var t=o.Vector.sub(this.c0,this.p0),e=o.Vector.sub(o.Vector.sub(this.c1,this.c0),t),i=o.Vector.sub(o.Vector.sub(o.Vector.sub(this.p1,this.c1),t),o.Vector.mult(e,2)),r=[],n=e.x*i.y-e.y*i.x;if(0!==n){var s=t.x*i.y-t.y*i.x,a=t.x*e.y-t.y*e.x,h=s*s-4*n*a;if(h>=0){n<0&&(n=-n,s=-s,a=-a);var l=Math.sqrt(h),u=(-s-l)/(2*n),c=(-s+l)/(2*n);u>0&&u<1&&(r.push(this.split(u)),c=1-(1-c)/(1-u)),c>0&&c<1&&r.push(this.split(c))}}return r.push(this),r}}(new o.Vector(t,e),new o.Vector(i,r),new o.Vector(n,s),new o.Vector(a,h)).splitInflections(),c=[],p=30/l,d=0;d=.125);){var v=Math.pow(f,1/3),g=m.split(v),_=m.split(1-v/(1-v));c.push(g),y.push(m),m=_}f<1&&c.push(m.split(.5)),c.push(m),Array.prototype.push.apply(c,y.reverse())}return c}function s(t,i,r,n){e([t,r],[i,n],{x:t,y:i,cx:(t+r)/2,cy:(i+n)/2})}function u(t,e,i,r){return Math.abs(i-t)<1e-5&&Math.abs(r-e)<1e-5}function c(t,e,i){for(var r=t.length,o=e.findImage(r),s=o.index,a=0,h=0;h>7,127&d,p>>7,127&p);for(var f=0;f>7,127&m,0,0)}}return{cellImageInfo:l,dimOffset:s,dimImageInfo:o}}var p=this.glyphInfos[t.index];if(p)return p;var d=t.getBoundingBox(),f=d.x1,m=d.y1,y=d.x2-f,v=d.y2-m,g=t.path.commands;if(0===y||0===v||!g.length)return this.glyphInfos[t.index]={};var _,b=[],S=[],x=[];for(_=a-1;_>=0;--_)x.push([]);for(_=h-1;_>=0;--_)S.push([]);for(var w,T,A,M,P=0;P=n)&&this._doFill){if(!this._isOpenType())return console.log("WEBGL: only opentype fonts are supported"),t;t.push();var l=this.curFillShader,c=this._doStroke,p=this.drawMode;this.curFillShader=null,this._doStroke=!1,this.drawMode=s.TEXTURE;var d=this._textFont.font,f=this._textFont._fontInfo;f||(f=this._textFont._fontInfo=new u(d));var m=this._textFont._handleAlignment(this,e,i,r),y=this._textSize,v=y/d.unitsPerEm;this.translate(m.x,m.y,0),this.scale(v,v,1);var g=this.GL,_=!this._defaultFontShader,b=this.setFillShader(this._getFontShader());_&&(b.setUniform("uGridImageSize",[64,64]),b.setUniform("uCellsImageSize",[64,64]),b.setUniform("uStrokeImageSize",[64,64]),b.setUniform("uGridSize",[a,h])),this._applyColorBlend(this.curFillColor);var S=this.gHash.glyph;if(!S){var x=this._textGeom=new o.Geometry(1,1,function(){for(var t=0;t<=1;t++)for(var e=0;e<=1;e++)this.vertices.push(new o.Vector(e,t,0)),this.uvs.push(e,t)});x.computeFaces().computeNormals(),S=this.createBuffers("glyph",x)}this._bindBuffer(S.vertexBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aPosition.location,3,g.FLOAT,!1,0,0),this._bindBuffer(S.indexBuffer,g.ELEMENT_ARRAY_BUFFER),this._bindBuffer(S.uvBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aTexCoord.location,2,g.FLOAT,!1,0,0),b.setUniform("uMaterialColor",this.curFillColor);try{for(var w=0,T=null,A=!1,M=d.stringToGlyphs(e),P=0;P{let e=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541];var i=new s.a.Chorus(.8,2.5,.2).toMaster();class r{constructor(t,e){this.num=t,this.id=e,this.counter=0,this.alpha=0,this.lifetime=0,this.fm=new s.a.FMSynth({harmonicity:10,modulationIndex:80,detune:0,oscillator:{type:"sine"},envelope:{attack:.001,decay:.003,sustain:.06,release:.3},modulation:{type:"square"},modulationEnvelope:{attack:.01,decay:.02,sustain:.03,release:.033},portamento:.01}).connect(i),this.fm.volume.value=-6}draw(){t.push(),t.stroke(255,140),t.line(0,8*this.id,0,this.num,8*this.id,0),t.translate(0,8*this.id,0),t.noStroke(),t.fill(255,180),t.sphere(3),t.translate(this.num,0,0),t.sphere(3),t.fill(255,0,0,this.alpha),t.sphere(5),t.pop(),this.lifetime<10&&(t.push(),t.fill(255,180),t.translate(this.counter,8*this.id,0),t.sphere(3),t.pop(),this.counter++),this.alpha-=10,this.counter>this.num&&(this.counter=0,this.alpha=255,this.lifetime++,this.fm.triggerAttackRelease(s.a.Midi((541-this.num)/10+60).toFrequency(),"128n"))}}let n=[];t.setup=(()=>{t.createCanvas(800,800,t.WEBGL);for(let t=0;t{t.camera(t.mouseX-t.width/2,0,800,0,0,0,0,1,0),t.background(0),t.smooth(),t.translate(-t.width/2,t.height/6,0),t.rotateZ(-t.HALF_PI);for(let e=0;e{"m"==t.key&&t.save(Date.now()+".jpg")}),t.mousePressed=(()=>{h()(s.a.context).then(function(){})})};e.default=l,new n.a(l)},function(t,e){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i}]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RvbmUvYnVpbGQvVG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcDUvbGliL3A1Lm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3RhcnRhdWRpb2NvbnRleHQvU3RhcnRBdWRpb0NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiXSwibmFtZXMiOlsiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyIsInVuZGVmaW5lZCIsIlRvbmUiLCJNb2R1bGUiLCJmdW5jIiwiTWFpbiIsInRoaXMiLCJFcnJvciIsInRvU3RyaW5nIiwiY2xhc3NOYW1lIiwiaXNMZXR0ZXIiLCJtYXRjaCIsInNhbWVDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwiaXNGdW5jdGlvbiIsImRpc3Bvc2UiLCJzZXQiLCJwYXJhbXMiLCJyYW1wVGltZSIsImlzT2JqZWN0IiwiaXNTdHJpbmciLCJ0bXBPYmoiLCJwYXJhbUxvb3AiLCJhdHRyIiwicGFyZW50IiwiaW5kZXhPZiIsImF0dHJTcGxpdCIsInNwbGl0IiwibGVuZ3RoIiwic3BsaWNlIiwiaW5uZXJQYXJhbSIsImpvaW4iLCJwYXJhbSIsImlzVW5kZWYiLCJTaWduYWwiLCJQYXJhbSIsInJhbXBUbyIsIkF1ZGlvUGFyYW0iLCJUaW1lQmFzZSIsIl9jb2xsZWN0RGVmYXVsdHMiLCJyZXQiLCJzdWJSZXQiLCJqIiwic3ViQXR0ciIsImlzRGVmaW5lZCIsImNvbnN0ciIsImRlZmF1bHRzIiwia2V5cyIsIl9zdXBlciIsInN1cGVyRGVmcyIsInB1c2giLCJ2YWx1ZXMiLCJvcHRpb25zIiwiZGVmYXVsdEFyZyIsImdpdmVuIiwiZmFsbGJhY2siLCJnaXZlblByb3AiLCJmYWxsYmFja1Byb3AiLCJjb25uZWN0U2VyaWVzIiwiY3VycmVudFVuaXQiLCJhcmd1bWVudHMiLCJ0b1VuaXQiLCJjb25uZWN0IiwidmFsIiwiaXNOdW1iZXIiLCJhcmciLCJpc0Jvb2xlYW4iLCJpc0FycmF5IiwiQXJyYXkiLCJpc05vdGUiLCJ0ZXN0Iiwibm9PcCIsIl9yZWFkT25seSIsIndyaXRhYmxlIiwiX3dyaXRhYmxlIiwiU3RhdGUiLCJTdGFydGVkIiwiU3RvcHBlZCIsIlBhdXNlZCIsImVxdWFsUG93ZXJTY2FsZSIsInBlcmNlbnQiLCJwaUZhY3RvciIsIk1hdGgiLCJQSSIsInNpbiIsImRiVG9HYWluIiwiZGIiLCJwb3ciLCJnYWluVG9EYiIsImdhaW4iLCJsb2ciLCJMTjEwIiwiaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvIiwiaW50ZXJ2YWwiLCJub3ciLCJjb250ZXh0IiwiZXh0ZW5kIiwiY2hpbGQiLCJUZW1wQ29uc3RydWN0b3IiLCJhdWRpb0NvbnRleHQiLCJDb250ZXh0IiwiZW1pdCIsInNldENvbnRleHQiLCJjdHgiLCJzYW1wbGVSYXRlIiwiaGFzQXVkaW9Db250ZXh0Iiwid2luZG93IiwiaGFzUHJvbWlzZXMiLCJoYXNXb3JrZXJzIiwiZ2V0Q29udGV4dCIsInJlc29sdmUiLCJpbml0aWFsaXplZCIsInJlc0NhbGxiYWNrIiwib2ZmIiwib24iLCJ2ZXJzaW9uIiwiRW1pdHRlciIsIl9ldmVudHMiLCJldmVudCIsImNhbGxiYWNrIiwiZXZlbnRzIiwiZXZlbnROYW1lIiwib25jZSIsImJvdW5kQ2FsbGJhY2siLCJhcHBseSIsImV2IiwiZXZlbnRMaXN0IiwiYXJncyIsInNsaWNlIiwibGVuIiwibWl4aW4iLCJmdW5jdGlvbnMiLCJlbWl0dGVyRnVuYyIsIlRpbWVsaW5lIiwiX3RpbWVsaW5lIiwibWVtb3J5IiwiSW5maW5pdHkiLCJhZGQiLCJ0aW1lIiwidmFsdWVPZiIsImluZGV4IiwiX3NlYXJjaCIsImRpZmYiLCJyZW1vdmUiLCJjb21wYXJhdG9yIiwicGVlayIsInNoaWZ0IiwiZ2V0QWZ0ZXIiLCJnZXRCZWZvcmUiLCJjYW5jZWwiLCJhZnRlciIsImNhbmNlbEJlZm9yZSIsInByZXZpb3VzRXZlbnQiLCJiZWdpbm5pbmciLCJlbmQiLCJtaWRQb2ludCIsImZsb29yIiwibmV4dEV2ZW50IiwiX2l0ZXJhdGUiLCJsb3dlckJvdW5kIiwidXBwZXJCb3VuZCIsImZvckVhY2giLCJmb3JFYWNoQmVmb3JlIiwiZm9yRWFjaEFmdGVyIiwiZm9yRWFjaEJldHdlZW4iLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwiZm9yRWFjaEZyb20iLCJmb3JFYWNoQXRUaW1lIiwic3VwcG9ydGVkIiwiT2ZmbGluZUF1ZGlvQ29udGV4dCIsIndlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQiLCJzdGFydFJlbmRlcmluZyIsIlByb21pc2UiLCJfbmF0aXZlX3N0YXJ0UmVuZGVyaW5nIiwiZG9uZSIsIm9uY29tcGxldGUiLCJlIiwicmVuZGVyZWRCdWZmZXIiLCJBdWRpb0NvbnRleHQiLCJ3ZWJraXRBdWRpb0NvbnRleHQiLCJjbG9zZSIsInN1c3BlbmQiLCJyZXN1bWUiLCJjcmVhdGVHYWluIiwiY3JlYXRlR2Fpbk5vZGUiLCJjcmVhdGVEZWxheSIsImNyZWF0ZURlbGF5Tm9kZSIsImRlY29kZUF1ZGlvRGF0YVByb21pc2UiLCJvZmZsaW5lQ29udGV4dCIsImF1ZGlvRGF0YSIsIlVpbnQzMkFycmF5IiwiYnVmZmVyIiwiZGVjb2RlQXVkaW9EYXRhIiwiX25hdGl2ZV9kZWNvZGVBdWRpb0RhdGEiLCJzdWNjZXNzIiwiZXJyb3IiLCJwcm9wIiwiX2NvbnRleHQiLCJfZGVmaW5lUHJvcGVydHkiLCJfbGF0ZW5jeUhpbnQiLCJsYXRlbmN5SGludCIsIl9jb25zdGFudHMiLCJsb29rQWhlYWQiLCJfY29tcHV0ZWRVcGRhdGVJbnRlcnZhbCIsIl90aWNrZXIiLCJUaWNrZXIiLCJjbG9ja1NvdXJjZSIsInVwZGF0ZUludGVydmFsIiwiX3RpbWVvdXRzIiwiX3RpbWVvdXRJZHMiLCJfdGltZW91dExvb3AiLCJjdXJyZW50VGltZSIsInJlYWR5Iiwic3RhdGUiLCJ0aGVuIiwiZ2V0Q29uc3RhbnQiLCJjcmVhdGVCdWZmZXIiLCJhcnIiLCJnZXRDaGFubmVsRGF0YSIsImNvbnN0YW50IiwiY3JlYXRlQnVmZmVyU291cmNlIiwiY2hhbm5lbENvdW50IiwiY2hhbm5lbENvdW50TW9kZSIsImxvb3AiLCJzdGFydCIsInNldFRpbWVvdXQiLCJmbiIsInRpbWVvdXQiLCJpZCIsImNsZWFyVGltZW91dCIsInR5cGUiLCJoaW50IiwiY29uIiwiZGlzY29ubmVjdCIsIl90eXBlIiwiX3VwZGF0ZUludGVydmFsIiwiX2NhbGxiYWNrIiwiX2NyZWF0ZUNsb2NrIiwiVHlwZSIsIldvcmtlciIsIlRpbWVvdXQiLCJPZmZsaW5lIiwiX2NyZWF0ZVdvcmtlciIsIlVSTCIsIndlYmtpdFVSTCIsImJsb2IiLCJCbG9iIiwidG9GaXhlZCIsImJsb2JVcmwiLCJjcmVhdGVPYmplY3RVUkwiLCJ3b3JrZXIiLCJvbm1lc3NhZ2UiLCJfd29ya2VyIiwiX2NyZWF0ZVRpbWVvdXQiLCJfdGltZW91dCIsIm1heCIsInBvc3RNZXNzYWdlIiwiX2Rpc3Bvc2VDbG9jayIsInRlcm1pbmF0ZSIsIm5hdGl2ZUNvbm5lY3QiLCJBdWRpb05vZGUiLCJuYXRpdmVEaXNjb25uZWN0IiwidG9uZUNvbm5lY3QiLCJCIiwib3V0TnVtIiwiaW5OdW0iLCJpbnB1dCIsIlRPTkVfU0lMRU5DRV9WRVJTSU9OX0xPR0dJTkciLCJjb25zb2xlIiwid2FybiIsImNyZWF0ZUluc091dHMiLCJpbnB1dHMiLCJvdXRwdXRzIiwib3V0cHV0IiwiY2hhbm5lbEludGVycHJldGF0aW9uIiwiX29uQ29ubmVjdCIsInVuaXQiLCJvdXRwdXROdW0iLCJpbnB1dE51bSIsImRlc3RpbmF0aW9uIiwiY2hhaW4iLCJmYW4iLCJTaWduYWxCYXNlIiwibm9kZSIsIm91dHB1dE51bWJlciIsImlucHV0TnVtYmVyIiwiX3BhcmFtIiwiY2FuY2VsU2NoZWR1bGVkVmFsdWVzIiwib3ZlcnJpZGRlbiIsInVhIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsIldhdmVTaGFwZXJOb2RlIiwiX2ludGVybmFsTm9kZSIsIl9uYXRpdmVfY3JlYXRlV2F2ZVNoYXBlciIsIl9jdXJ2ZSIsImN1cnZlIiwiYXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJjcmVhdGVXYXZlU2hhcGVyIiwiV2F2ZVNoYXBlciIsIm1hcHBpbmciLCJidWZmZXJMZW4iLCJfc2hhcGVyIiwiaXNGaW5pdGUiLCJzZXRNYXAiLCJub3JtYWxpemVkIiwib3ZlcnNhbXBsZSIsIm92ZXJzYW1wbGluZyIsIlJhbmdlRXJyb3IiLCJ1bml0cyIsIl92YWwiLCJfdW5pdHMiLCJwYXJzZUZsb2F0IiwiY2hhckF0IiwiX2RlZmF1bHRVbml0cyIsInRvU2Vjb25kcyIsInRvVGlja3MiLCJ0b0ZyZXF1ZW5jeSIsInRvTWlkaSIsIl9leHByZXNzaW9ucyIsInJlZ2V4cCIsIm1ldGhvZCIsImRvdCIsInBhcnNlSW50Iiwic2NhbGFyIiwiX2JlYXRzVG9Vbml0cyIsIl9nZXRUaW1lU2lnbmF0dXJlIiwiX3RpY2tzVG9Vbml0cyIsImh6IiwiX2ZyZXF1ZW5jeVRvVW5pdHMiLCJ0ciIsInEiLCJ0b3RhbCIsIl9zZWNvbmRzVG9Vbml0cyIsInNhbXBsZXMiLCJkZWZhdWx0IiwiX2dldEJwbSIsIlRyYW5zcG9ydCIsImJwbSIsInRpbWVTaWduYXR1cmUiLCJfZ2V0UFBRIiwiUFBRIiwiX25vdyIsImZyZXEiLCJiZWF0cyIsInNlY29uZHMiLCJ0aWNrcyIsIl9ub0FyZyIsInRyaW0iLCJleHByIiwibWF0Y2hpbmciLCJ0b1NhbXBsZXMiLCJ0b01pbGxpc2Vjb25kcyIsIkZyZXF1ZW5jeSIsImFzc2lnbiIsIm1pZGkiLCJtdG9mIiwibm90ZSIsInBpdGNoIiwib2N0YXZlIiwibm90ZU51bWJlciIsIm5vdGVUb1NjYWxlSW5kZXgiLCJ0cmFuc3Bvc2UiLCJoYXJtb25pemUiLCJpbnRlcnZhbHMiLCJtYXAiLCJmdG9tIiwidG9Ob3RlIiwibG9nMiIsIkE0Iiwicm91bmQiLCJzY2FsZUluZGV4VG9Ob3RlIiwicXVhcnRlclRpbWUiLCJxdWFydGVycyIsImNiYiIsImNiIiwiYyMiLCJjeCIsImRiYiIsImQjIiwiZHgiLCJlYmIiLCJlYiIsImUjIiwiZXgiLCJmYmIiLCJmYiIsImYiLCJmIyIsImZ4IiwiZ2JiIiwiZ2IiLCJnIiwiZyMiLCJneCIsImFiYiIsImFiIiwiYSIsImEjIiwiYXgiLCJiYmIiLCJiYiIsImIiLCJiIyIsImJ4IiwiZnJlcXVlbmN5IiwiVGltZSIsInF1YW50aXplIiwiY2FwdHVyZSIsInF1YW50VG8iLCJuZXh0U3ViZGl2aXNpb24iLCJzdWJkaXYiLCJzdWJkaXZpc2lvbiIsInRvTm90YXRpb24iLCJ0ZXN0Tm90YXRpb25zIiwicG93ZXIiLCJjbG9zZXN0IiwiY2xvc2VzdFNlY29uZHMiLCJub3RhdGlvbiIsIm5vdGF0aW9uU2Vjb25kcyIsImFicyIsInRvQmFyc0JlYXRzU2l4dGVlbnRocyIsIm1lYXN1cmVzIiwic2l4dGVlbnRocyIsIlRyYW5zcG9ydFRpbWUiLCJEZWZhdWx0IiwiVGlja3MiLCJOb3JtYWxSYW5nZSIsIkF1ZGlvUmFuZ2UiLCJEZWNpYmVscyIsIkludGVydmFsIiwiQlBNIiwiUG9zaXRpdmUiLCJHYWluIiwiQ2VudHMiLCJEZWdyZWVzIiwiTUlESSIsIkJhcnNCZWF0c1NpeHRlZW50aHMiLCJTYW1wbGVzIiwiSGVydHoiLCJOb3RlIiwiTWlsbGlzZWNvbmRzIiwiU2Vjb25kcyIsIk5vdGF0aW9uIiwiY29udmVydCIsIl90b1VuaXRzIiwiZ2V0VmFsdWVBdFRpbWUiLCJfaW5pdGlhbFZhbHVlIiwiX2Zyb21Vbml0cyIsInNldFZhbHVlQXRUaW1lIiwibWluVmFsdWUiLCJtYXhWYWx1ZSIsIm1pbiIsIl9taW5PdXRwdXQiLCJBdXRvbWF0aW9uVHlwZSIsIkxpbmVhciIsIkV4cG9uZW50aWFsIiwiVGFyZ2V0IiwiU2V0VmFsdWUiLCJiZWZvcmUiLCJpbml0aWFsVmFsdWUiLCJkZWZhdWx0VmFsdWUiLCJwcmV2aW91c1ZhbCIsInByZXZpb3VzIiwiX2V4cG9uZW50aWFsQXBwcm9hY2giLCJfbGluZWFySW50ZXJwb2xhdGUiLCJfZXhwb25lbnRpYWxJbnRlcnBvbGF0ZSIsInNldFJhbXBQb2ludCIsImN1cnJlbnRWYWwiLCJjYW5jZWxBbmRIb2xkQXRUaW1lIiwibGluZWFyUmFtcFRvVmFsdWVBdFRpbWUiLCJleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lIiwiZXhwb25lbnRpYWxSYW1wVG8iLCJsaW5lYXJSYW1wVG8iLCJ0YXJnZXRSYW1wVG8iLCJleHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUiLCJ0aW1lQ29uc3RhbnQiLCJzZXRUYXJnZXRBdFRpbWUiLCJzZXRWYWx1ZUN1cnZlQXRUaW1lIiwiZHVyYXRpb24iLCJzY2FsaW5nIiwic2VnVGltZSIsInZhbHVlQXRUaW1lIiwidDAiLCJ2MCIsInYxIiwiZXhwIiwidDEiLCJPZmZsaW5lQ29udGV4dCIsImNoYW5uZWxzIiwiX2R1cmF0aW9uIiwiX2N1cnJlbnRUaW1lIiwicmVuZGVyIiwiYmxvY2tUaW1lIiwiYnVmZmVyU291cmNlIiwiX25hdGl2ZV9zdGFydCIsIl9nYWluTm9kZSIsImNyZWF0ZUNvbnN0YW50U291cmNlIiwiQ29uc3RhbnRTb3VyY2VOb2RlIiwiX2J1ZmZlclNvdXJjZSIsImdhaW5Ob2RlIiwiX291dHB1dCIsIm9mZnNldCIsInN0b3AiLCJfcHJveGllcyIsIl9zb3VyY2VTdGFydGVkIiwiX2NvbnN0YW50U291cmNlIiwiX2lzUGFyYW0iLCJfYXBwbHlBdXRvbWF0aW9ucyIsIl9jb25uZWN0UHJveGllcyIsInByb3h5IiwiZnJvbSIsInByZXZpb3VzTWV0aG9kIiwic2lnbmFsIiwiUG93IiwiX2V4cCIsIl9leHBTY2FsZXIiLCJfZXhwRnVuYyIsIkVudmVsb3BlIiwiYXR0YWNrIiwiZGVjYXkiLCJzdXN0YWluIiwicmVsZWFzZSIsIl9hdHRhY2tDdXJ2ZSIsIl9yZWxlYXNlQ3VydmUiLCJfc2lnIiwiYXR0YWNrQ3VydmUiLCJyZWxlYXNlQ3VydmUiLCJJbiIsImN1cnZlRGVmIiwiT3V0IiwidHJpZ2dlckF0dGFjayIsInZlbG9jaXR5Iiwib3JpZ2luYWxBdHRhY2siLCJjdXJyZW50VmFsdWUiLCJwZXJjZW50Q29tcGxldGUiLCJzbGljZUluZGV4IiwidHJpZ2dlclJlbGVhc2UiLCJ0cmlnZ2VyQXR0YWNrUmVsZWFzZSIsImsiLCJjb3NpbmVDdXJ2ZSIsInJpcHBsZUN1cnZlIiwiY3VydmVMZW4iLCJzaW5lV2F2ZSIsInN0YWlyc0N1cnZlIiwiY2VpbCIsInNpbmVDdXJ2ZSIsImNvcyIsImJvdW5jZUN1cnZlIiwiaW52ZXJ0Q3VydmUiLCJvdXQiLCJsaW5lYXIiLCJleHBvbmVudGlhbCIsImJvdW5jZSIsImNvc2luZSIsInJldmVyc2UiLCJyZXZlcnNlQ3VydmUiLCJzdGVwIiwicmlwcGxlIiwic2luZSIsIkFtcGxpdHVkZUVudmVsb3BlIiwiQW5hbHlzZXJOb2RlIiwiZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSIsInVpbnQ4IiwiVWludDhBcnJheSIsImdldEJ5dGVUaW1lRG9tYWluRGF0YSIsIkFuYWx5c2VyIiwiX2FuYWx5c2VyIiwiY3JlYXRlQW5hbHlzZXIiLCJfYnVmZmVyIiwic2l6ZSIsInNtb290aGluZyIsIldhdmVmb3JtIiwiRkZUIiwiZ2V0VmFsdWUiLCJnZXRGbG9hdEZyZXF1ZW5jeURhdGEiLCJmcmVxdWVuY3lCaW5Db3VudCIsImZmdFNpemUiLCJUeXBlRXJyb3IiLCJzbW9vdGhpbmdUaW1lQ29uc3RhbnQiLCJDb21wcmVzc29yIiwiX2NvbXByZXNzb3IiLCJjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IiLCJ0aHJlc2hvbGQiLCJrbmVlIiwicmF0aW8iLCJBZGQiLCJfc3VtIiwiTXVsdGlwbHkiLCJfbXVsdCIsIk5lZ2F0ZSIsIl9tdWx0aXBseSIsIlN1YnRyYWN0IiwiX25lZyIsIkVxdWFsUG93ZXJHYWluIiwiX2VxUG93ZXIiLCJDcm9zc0ZhZGUiLCJpbml0aWFsRmFkZSIsImZhZGUiLCJfZXF1YWxQb3dlckEiLCJfZXF1YWxQb3dlckIiLCJfb25lIiwiX2ludmVydCIsIkZpbHRlciIsIl9maWx0ZXJzIiwiZGV0dW5lIiwiUSIsIl9yb2xsb2ZmIiwicm9sbG9mZiIsImNhc2NhZGluZ0NvdW50IiwiY291bnQiLCJmaWx0ZXIiLCJjcmVhdGVCaXF1YWRGaWx0ZXIiLCJjb25uZWN0aW9uQ2hhaW4iLCJjb25jYXQiLCJNdWx0aWJhbmRTcGxpdCIsImxvdyIsIl9sb3dNaWRGaWx0ZXIiLCJtaWQiLCJoaWdoIiwibG93RnJlcXVlbmN5IiwiaGlnaEZyZXF1ZW5jeSIsIkVRMyIsIl9tdWx0aWJhbmRTcGxpdCIsIl9sb3dHYWluIiwiX21pZEdhaW4iLCJfaGlnaEdhaW4iLCJTY2FsZSIsIm91dHB1dE1pbiIsIm91dHB1dE1heCIsIl9vdXRwdXRNaW4iLCJfb3V0cHV0TWF4IiwiX3NjYWxlIiwiX2FkZCIsIl9zZXRSYW5nZSIsIlNjYWxlRXhwIiwiZXhwb25lbnQiLCJEZWxheSIsIl9tYXhEZWxheSIsIm1heERlbGF5IiwiZGVsYXlUaW1lIiwiX2RlbGF5Tm9kZSIsIkZlZWRiYWNrQ29tYkZpbHRlciIsIl9kZWxheSIsIl9mZWVkYmFjayIsInJlc29uYW5jZSIsIkFicyIsIl9hYnMiLCJGb2xsb3dlciIsIl9maWx0ZXIiLCJfZnJlcXVlbmN5VmFsdWVzIiwiX3N1YiIsIl9hdHRhY2siLCJfcmVsZWFzZSIsIl9zZXRBdHRhY2tSZWxlYXNlIiwibWluVGltZSIsIlNjYWxlZEVudmVsb3BlIiwiRnJlcXVlbmN5RW52ZWxvcGUiLCJfb2N0YXZlcyIsIm9jdGF2ZXMiLCJiYXNlRnJlcXVlbmN5IiwiR3JlYXRlclRoYW5aZXJvIiwiX3RocmVzaCIsIkdyZWF0ZXJUaGFuIiwiX2d0eiIsIkdhdGUiLCJfZm9sbG93ZXIiLCJfZ3QiLCJ0aHJlc2giLCJhdHRhY2tUaW1lIiwicmVsZWFzZVRpbWUiLCJfd3JhcFNjaGVkdWxlTWV0aG9kcyIsInRpY2tzVW50aWxUaW1lIiwiX2dldFRpY2tzVW50aWxFdmVudCIsIlRpY2tTaWduYWwiLCJwcmV2RXZlbnQiLCJzZWdtZW50cyIsInJhbXBWYWwiLCJzZWdtZW50RHVyIiwidmFsMCIsInZhbDEiLCJzYW1wbGVUaW1lIiwiZ2V0VGlja3NBdFRpbWUiLCJnZXREdXJhdGlvbk9mVGlja3MiLCJjdXJyZW50VGljayIsImdldFRpbWVPZlRpY2siLCJ0aWNrIiwiZGVsdGEiLCJzcXJ0Iiwic29sMSIsInRpY2tzVG9UaW1lIiwid2hlbiIsInRpbWVUb1RpY2tzIiwic3RhcnRUaWNrcyIsImVuZFRpY2tzIiwiVGltZWxpbmVTdGF0ZSIsImluaXRpYWwiLCJfaW5pdGlhbCIsInNldFN0YXRlQXRUaW1lIiwiZ2V0TGFzdFN0YXRlIiwiZ2V0TmV4dFN0YXRlIiwiVGlja1NvdXJjZSIsIl9zdGF0ZSIsIl90aWNrT2Zmc2V0Iiwic2V0VGlja3NBdFRpbWUiLCJwYXVzZSIsInN0b3BFdmVudCIsInRtcEV2ZW50IiwibGFzdFN0YXRlIiwiZWxhcHNlZFRpY2tzIiwicGVyaW9kU3RhcnRUaW1lIiwib2Zmc2V0RXZlbnQiLCJnZXRTZWNvbmRzQXRUaW1lIiwiZWxhcHNlZFNlY29uZHMiLCJnZXRTdGF0ZUF0VGltZSIsImFic29sdXRlVGlja3MiLCJmb3JFYWNoVGlja0JldHdlZW4iLCJsYXN0U3RhdGVFdmVudCIsIm5leHRUaWNrVGltZSIsIkNsb2NrIiwiX25leHRUaWNrIiwiX3RpY2tTb3VyY2UiLCJfbGFzdFVwZGF0ZSIsIl9ib3VuZExvb3AiLCJfbG9vcCIsIkludGVydmFsVGltZWxpbmUiLCJfcm9vdCIsIl9sZW5ndGgiLCJJbnRlcnZhbE5vZGUiLCJpbnNlcnQiLCJ1cGRhdGVIZWlnaHQiLCJ1cGRhdGVNYXgiLCJfcmViYWxhbmNlIiwicmVzdWx0cyIsInNlYXJjaCIsIl9yZW1vdmVOb2RlIiwiX3NldFJvb3QiLCJfcmVwbGFjZU5vZGVJblBhcmVudCIsInJlcGxhY2VtZW50IiwiaXNMZWZ0Q2hpbGQiLCJsZWZ0IiwicmlnaHQiLCJ0ZW1wIiwiZ2V0QmFsYW5jZSIsIl9yb3RhdGVMZWZ0IiwicGl2b3ROb2RlIiwiX3JvdGF0ZVJpZ2h0IiwiYmFsYW5jZSIsImFsbE5vZGVzIiwidHJhdmVyc2UiLCJzZWFyY2hBZnRlciIsIl9sZWZ0IiwiX3JpZ2h0IiwiaGVpZ2h0IiwicG9pbnQiLCJUcmFuc3BvcnRFdmVudCIsIl9ldmVudElkIiwiX29uY2UiLCJpbnZva2UiLCJjbGVhciIsIlRyYW5zcG9ydFJlcGVhdEV2ZW50IiwiX2ludGVydmFsIiwiX2N1cnJlbnRJZCIsIl9uZXh0SWQiLCJfYm91bmRSZXN0YXJ0IiwiX3Jlc3RhcnQiLCJfY3JlYXRlRXZlbnRzIiwic2NoZWR1bGVPbmNlIiwiX2JvdW5kQ3JlYXRlRXZlbnRzIiwiX2xvb3BTdGFydCIsIl9sb29wRW5kIiwiX3BwcSIsIlRyYW5zcG9ydENvbnN0cnVjdG9yIiwiX2Nsb2NrIiwiX3Byb2Nlc3NUaWNrIiwiX2JpbmRDbG9ja0V2ZW50cyIsIl90aW1lU2lnbmF0dXJlIiwiX3NjaGVkdWxlZEV2ZW50cyIsIl9yZXBlYXRlZEV2ZW50cyIsIl9zeW5jZWRTaWduYWxzIiwiX3N3aW5nVGlja3MiLCJfc3dpbmdBbW91bnQiLCJzd2luZyIsInN3aW5nU3ViZGl2aXNpb24iLCJsb29wU3RhcnQiLCJsb29wRW5kIiwidGlja1RpbWUiLCJwcm9ncmVzcyIsImFtb3VudCIsInNjaGVkdWxlIiwiX2FkZEV2ZW50Iiwic2NoZWR1bGVSZXBlYXQiLCJldmVudElkIiwiaXRlbSIsInRpbWVsaW5lIiwidG9nZ2xlIiwidGltZVNpZyIsInN0YXJ0UG9zaXRpb24iLCJlbmRQb3NpdGlvbiIsInNldExvb3BQb2ludHMiLCJwcHEiLCJyZW1haW5pbmdUaWNrcyIsInN5bmNTaWduYWwiLCJyYXRpb1NpZ25hbCIsInVuc3luY1NpZ25hbCIsInN5bmNlZFNpZ25hbCIsIlZvbHVtZSIsInZvbHVtZSIsIl91bm11dGVkVm9sdW1lIiwibXV0ZSIsIk1hc3RlciIsIl92b2x1bWUiLCJ0b01hc3RlciIsIk1hc3RlckNvbnN0cnVjdG9yIiwiU291cmNlIiwiX3N5bmNlZCIsIl9zY2hlZHVsZWQiLCJfc3RhcnQiLCJyZXN0YXJ0IiwiX3N0b3AiLCJzY2hlZCIsIl9zeW5jZWRTdGFydCIsInN5bmMiLCJzdGF0ZUV2ZW50Iiwic3RhcnRPZmZzZXQiLCJfc3luY2VkU3RvcCIsInVuc3luYyIsIkF1ZGlvQnVmZmVyIiwiY29weVRvQ2hhbm5lbCIsInNyYyIsImNoYW5OdW0iLCJjaGFubmVsIiwiY29weUZyb21DaGFubmVsIiwiZGVzdCIsIkJ1ZmZlciIsIl9yZXZlcnNlZCIsIl94aHIiLCJfb25sb2FkIiwidXJsIiwib25sb2FkIiwibG9hZGVkIiwibG9hZCIsImNhdGNoIiwib25lcnJvciIsImJ1ZmYiLCJlcnIiLCJfcmVtb3ZlRnJvbURvd25sb2FkUXVldWUiLCJhYm9ydCIsIm51bWJlck9mQ2hhbm5lbHMiLCJmcm9tQXJyYXkiLCJpc011bHRpZGltZW5zaW9uYWwiLCJ0b01vbm8iLCJ0b0FycmF5Iiwib3V0cHV0QXJyYXkiLCJudW1DaGFubmVscyIsImNoYW5uZWxBcnJheSIsInNhbXBsZSIsInN0YXJ0U2FtcGxlcyIsImVuZFNhbXBsZXMiLCJfcmV2ZXJzZSIsInJldiIsIl9kb3dubG9hZFF1ZXVlIiwiYmFzZVVybCIsImZyb21VcmwiLCJyZXF1ZXN0IiwibWF0Y2hlcyIsImV4dGVuc2lvbnMiLCJleHRlbnNpb24iLCJzdXBwb3J0c1R5cGUiLCJyZXBsYWNlIiwib25FcnJvciIsIm9uUHJvZ3Jlc3MiLCJ0b3RhbFByb2dyZXNzIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwicmVzcG9uc2VUeXBlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInN0YXR1cyIsInJlc3BvbnNlIiwibGVuZ3RoQ29tcHV0YWJsZSIsInNlbmQiLCJjYW5jZWxEb3dubG9hZHMiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjYW5QbGF5VHlwZSIsInJlbW92ZUV2ZW50cyIsImZhaWwiLCJPc2NpbGxhdG9yTm9kZSIsIm9uZW5kZWQiLCJfc3RhcnRUaW1lIiwiX3N0b3BUaW1lIiwiX29zY2lsbGF0b3IiLCJjcmVhdGVPc2NpbGxhdG9yIiwiX2dhaW4iLCJzZXRQZXJpb2RpY1dhdmUiLCJwZXJpb2RpY1dhdmUiLCJjYW5jZWxTdG9wIiwiT3NjaWxsYXRvciIsIl93YXZlIiwiX3BhcnRpYWxzIiwicGFydGlhbHMiLCJfcGhhc2UiLCJwaGFzZSIsIlNpbmUiLCJUcmlhbmdsZSIsIlNhd3Rvb3RoIiwiU3F1YXJlIiwiQ3VzdG9tIiwic3luY0ZyZXF1ZW5jeSIsInVuc3luY0ZyZXF1ZW5jeSIsImlzQmFzaWNUeXBlIiwiY29lZnMiLCJfZ2V0UmVhbEltYWdpbmFyeSIsImNyZWF0ZVBlcmlvZGljV2F2ZSIsInBlcmlvZGljV2F2ZVNpemUiLCJyZWFsIiwiaW1hZyIsInBhcnRpYWxDb3VudCIsInBhcnRpYWwiLCJleGVjIiwiX2ludmVyc2VGRlQiLCJzdW0iLCJfZ2V0SW5pdGlhbFZhbHVlIiwidHdvUGkiLCJBdWRpb1RvR2FpbiIsIl9ub3JtIiwieCIsIlplcm8iLCJMRk8iLCJhbXBsaXR1ZGUiLCJfc3RvcHBlZFNpZ25hbCIsIl96ZXJvcyIsIl9zdG9wcGVkVmFsdWUiLCJfYTJnIiwiX3NjYWxlciIsImN1cnJlbnRNaW4iLCJjdXJyZW50TWF4IiwiTGltaXRlciIsIkxvd3Bhc3NDb21iRmlsdGVyIiwiX2xvd3Bhc3MiLCJkYW1wZW5pbmciLCJNZXJnZSIsIl9tZXJnZXIiLCJjcmVhdGVDaGFubmVsTWVyZ2VyIiwiTWV0ZXIiLCJnZXRMZXZlbCIsIlNwbGl0IiwiX3NwbGl0dGVyIiwiY3JlYXRlQ2hhbm5lbFNwbGl0dGVyIiwiTWlkU2lkZVNwbGl0IiwiX3NwbGl0IiwiX21pZEFkZCIsIlNRUlQxXzIiLCJfc2lkZVN1YnRyYWN0Iiwic2lkZSIsIk1pZFNpZGVNZXJnZSIsIl90aW1lc1R3b0xlZnQiLCJfdGltZXNUd29SaWdodCIsIl9tZXJnZSIsIk1pZFNpZGVDb21wcmVzc29yIiwiX21pZFNpZGVTcGxpdCIsIl9taWRTaWRlTWVyZ2UiLCJNb25vIiwiTXVsdGliYW5kQ29tcHJlc3NvciIsIlN0ZXJlb1Bhbm5lck5vZGUiLCJwYW4iLCJyaWdodFdhdmVTaGFwZXIiLCJsZWZ0V2F2ZVNoYXBlciIsImxlZnRHYWluIiwicmlnaHRHYWluIiwibWVyZ2UiLCJjcmVhdGVTdGVyZW9QYW5uZXIiLCJQYW5uZXIiLCJpbml0aWFsUGFuIiwiX3Bhbm5lciIsIlBhbm5lcjNEIiwiY3JlYXRlUGFubmVyIiwicGFubmluZ01vZGVsIiwibWF4RGlzdGFuY2UiLCJkaXN0YW5jZU1vZGVsIiwiY29uZU91dGVyR2FpbiIsImNvbmVPdXRlckFuZ2xlIiwiY29uZUlubmVyQW5nbGUiLCJyZWZEaXN0YW5jZSIsInJvbGxvZmZGYWN0b3IiLCJfb3JpZW50YXRpb24iLCJvcmllbnRhdGlvblgiLCJvcmllbnRhdGlvblkiLCJvcmllbnRhdGlvbloiLCJfcG9zaXRpb24iLCJwb3NpdGlvblgiLCJwb3NpdGlvblkiLCJwb3NpdGlvbloiLCJfcmFtcFRpbWVDb25zdGFudCIsInNldFBvc2l0aW9uIiwieSIsInoiLCJzZXRPcmllbnRhdGlvbiIsInBvcyIsIl9hbGlhc1Byb3BlcnR5IiwiUGFuVm9sIiwiU29sbyIsIl9zb2xvQmluZCIsIl9zb2xvZWQiLCJzb2xvIiwiX2lzU29sb2VkIiwiX2FkZFNvbG8iLCJfcmVtb3ZlU29sbyIsIl9jdXJyZW50U29sbyIsIl9ub1NvbG9zIiwiQ3RybEludGVycG9sYXRlIiwibG93ZXJQb3NpdGlvbiIsImxvd2VyIiwidXBwZXIiLCJfaW50ZXJwb2xhdGUiLCJyZXRBcnJheSIsInJldE9iaiIsIl90b051bWJlciIsIkN0cmxNYXJrb3YiLCJuZXh0IiwiZGlzdHJpYnV0aW9uIiwiX2dldFByb2JEaXN0cmlidXRpb24iLCJyYW5kIiwicmFuZG9tIiwiZGlzdCIsImNob3NlbiIsIm5lZWRzTm9ybWFsaXppbmciLCJvcHRpb24iLCJwcm9iYWJpbGl0eSIsIkN0cmxQYXR0ZXJuIiwiX3NodWZmbGVkIiwiX2RpcmVjdGlvbiIsIlVwIiwiRG93biIsIlVwRG93biIsIkRvd25VcCIsIkFsdGVybmF0ZVVwIiwiQWx0ZXJuYXRlRG93biIsIlJhbmRvbSIsIlJhbmRvbVdhbGsiLCJSYW5kb21PbmNlIiwiX3NodWZmbGVWYWx1ZXMiLCJjb3B5IiwicmFuZFZhbCIsIkN0cmxSYW5kb20iLCJpbnRlZ2VyIiwiQnVmZmVycyIsInVybHMiLCJfYnVmZmVycyIsIl9sb2FkaW5nQ291bnQiLCJfYnVmZmVyTG9hZGVkIiwiaGFzIiwiaXNMb2FkZWQiLCJidWZmTmFtZSIsIkJ1c2VzIiwiY2hhbm5lbE5hbWUiLCJzZW5kS25vYiIsInJlY2VpdmUiLCJEcmF3IiwiZXhwaXJhdGlvbiIsImFudGljaXBhdGlvbiIsIl9ib3VuZERyYXdMb29wIiwiX2RyYXdMb29wIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiTGlzdGVuZXIiLCJMaXN0ZW5lckNvbnN0cnVjdG9yIiwiZm9yd2FyZFgiLCJmb3J3YXJkWSIsImZvcndhcmRaIiwidXBYIiwidXBZIiwidXBaIiwibGlzdGVuZXIiLCJvcmlnaW5hbENvbnRleHQiLCJyZW5kZXJSZXQiLCJhdHRlbXB0UmVuZGVyIiwidHJpZXMiLCJFZmZlY3QiLCJfZHJ5V2V0Iiwid2V0IiwiZWZmZWN0U2VuZCIsImVmZmVjdFJldHVybiIsImNvbm5lY3RFZmZlY3QiLCJlZmZlY3QiLCJBdXRvRmlsdGVyIiwiX2xmbyIsImRlcHRoIiwiZGVsYXkiLCJvY3QiLCJBdXRvUGFubmVyIiwiQXV0b1dhaCIsImZvbGxvd2VyIiwiX3N3ZWVwUmFuZ2UiLCJfYmFzZUZyZXF1ZW5jeSIsIl9pbnB1dEJvb3N0IiwiX2JhbmRwYXNzIiwiX3BlYWtpbmciLCJfc2V0U3dlZXBSYW5nZSIsInNlbnNpdGl2aXR5IiwiYmFzZUZyZXEiLCJzZW5zaXRpdnkiLCJNb2R1bG8iLCJtb2R1bHVzIiwiX3N1YnRyYWN0IiwiX21vZFNpZ25hbCIsIl9zZXRXYXZlU2hhcGVyIiwibW9kIiwiQml0Q3J1c2hlciIsImludlN0ZXBTaXplIiwiYml0cyIsIl9tb2R1bG8iLCJfYml0cyIsIkNoZWJ5c2hldiIsIl9vcmRlciIsIm9yZGVyIiwiX2dldENvZWZmaWNpZW50IiwiZGVncmVlIiwibWVtbyIsIlN0ZXJlb0VmZmVjdCIsImVmZmVjdFNlbmRMIiwiZWZmZWN0U2VuZFIiLCJlZmZlY3RSZXR1cm5MIiwiZWZmZWN0UmV0dXJuUiIsIkNob3J1cyIsIl9kZXB0aCIsIl9kZWxheVRpbWUiLCJfbGZvTCIsIl9sZm9SIiwiX2RlbGF5Tm9kZUwiLCJfZGVsYXlOb2RlUiIsInNwcmVhZCIsImRldmlhdGlvbiIsIkNvbnZvbHZlciIsIl9jb252b2x2ZXIiLCJjcmVhdGVDb252b2x2ZXIiLCJEaXN0b3J0aW9uIiwiX2Rpc3RvcnRpb24iLCJkaXN0b3J0aW9uIiwiZGVnIiwiRmVlZGJhY2tFZmZlY3QiLCJfZmVlZGJhY2tHYWluIiwiZmVlZGJhY2siLCJGZWVkYmFja0RlbGF5IiwiY29tYkZpbHRlclR1bmluZ3MiLCJhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMiLCJGcmVldmVyYiIsInJvb21TaXplIiwiX2NvbWJGaWx0ZXJzIiwiX2FsbHBhc3NGaWx0ZXJzTCIsIl9hbGxwYXNzRmlsdGVyc1IiLCJhbGxwYXNzTCIsImFsbHBhc3NSIiwibGZwZiIsImFsIiwiYXIiLCJjZiIsImNvbWJGaWx0ZXJEZWxheVRpbWVzIiwiY29tYkZpbHRlclJlc29uYW5jZXMiLCJhbGxwYXNzRmlsdGVyRnJlcXMiLCJKQ1JldmVyYiIsIl9zY2FsZVJvb21TaXplIiwiX2FsbHBhc3NGaWx0ZXJzIiwiX2ZlZWRiYWNrQ29tYkZpbHRlcnMiLCJhZiIsImFsbHBhc3MiLCJmYmNmIiwiYXBmIiwiTWlkU2lkZUVmZmVjdCIsIm1pZFNlbmQiLCJzaWRlU2VuZCIsIm1pZFJldHVybiIsInNpZGVSZXR1cm4iLCJQaGFzZXIiLCJfZmlsdGVyc0wiLCJfbWFrZUZpbHRlcnMiLCJzdGFnZXMiLCJfZmlsdGVyc1IiLCJjb25uZWN0VG9GcmVxIiwiZmlsdGVycyIsIlN0ZXJlb1hGZWVkYmFja0VmZmVjdCIsIl9mZWVkYmFja0xSIiwiX2ZlZWRiYWNrUkwiLCJQaW5nUG9uZ0RlbGF5IiwiX2xlZnREZWxheSIsIm1heERlbGF5VGltZSIsIl9yaWdodERlbGF5IiwiX3JpZ2h0UHJlRGVsYXkiLCJQaXRjaFNoaWZ0IiwiX2ZyZXF1ZW5jeSIsIl9kZWxheUEiLCJfbGZvQSIsIl9kZWxheUIiLCJfbGZvQiIsIl9jcm9zc0ZhZGUiLCJfY3Jvc3NGYWRlTEZPIiwiX2ZlZWRiYWNrRGVsYXkiLCJfcGl0Y2giLCJfd2luZG93U2l6ZSIsIndpbmRvd1NpemUiLCJmYWN0b3IiLCJCdWZmZXJTb3VyY2UiLCJfc291cmNlU3RvcHBlZCIsIl9zb3VyY2UiLCJfb25lbmRlZCIsInBsYXliYWNrUmF0ZSIsImZhZGVJbiIsImZhZGVPdXQiLCJfb25lbmRlZFRpbWVvdXQiLCJmYWRlSW5UaW1lIiwiY29tcHV0ZWREdXIiLCJmYWRlT3V0VGltZSIsImhlbGREdXJhdGlvbiIsInN0YXJ0RmFkZSIsImFkZGl0aW9uYWxUYWlsIiwiTm9pc2UiLCJfcGxheWJhY2tSYXRlIiwiX25vaXNlQnVmZmVycyIsInJhdGUiLCJfbm9pc2VBcnJheXMiLCJwaW5rIiwiY2hhbm5lbE51bSIsImIwIiwiYjEiLCJiMiIsImIzIiwiYjQiLCJiNSIsImI2Iiwid2hpdGUiLCJicm93biIsImxhc3RPdXQiLCJjcmVhdGVCdWZmZXJzIiwiUmV2ZXJiIiwicHJlRGVsYXkiLCJnZW5lcmF0ZSIsIm5vaXNlTCIsIm5vaXNlUiIsIlN0ZXJlb0ZlZWRiYWNrRWZmZWN0IiwiX2ZlZWRiYWNrTCIsIl9mZWVkYmFja1IiLCJTdGVyZW9XaWRlbmVyIiwid2lkdGgiLCJfdHdvVGltZXNXaWR0aE1pZCIsIl90d29UaW1lc1dpZHRoU2lkZSIsIl9taWRNdWx0IiwiX29uZU1pbnVzV2lkdGgiLCJfc2lkZU11bHQiLCJUcmVtb2xvIiwiX2FtcGxpdHVkZUwiLCJfYW1wbGl0dWRlUiIsIlZpYnJhdG8iLCJFdmVudCIsIl9zdGFydE9mZnNldCIsIl9wcm9iYWJpbGl0eSIsIl9odW1hbml6ZSIsImh1bWFuaXplIiwiX3Jlc2NoZWR1bGVFdmVudHMiLCJzdGFydFRpY2siLCJfZ2V0TG9vcER1cmF0aW9uIiwiX3RpY2siLCJwcm9iIiwidmFyaWF0aW9uIiwicmVzY2hlZHVsVGltZSIsImxhc3RFdmVudCIsImxvb3BEdXJhdGlvbiIsIkxvb3AiLCJfZXZlbnQiLCJpdGVyYXRpb25zIiwiaXRlcnMiLCJQYXJ0IiwiX2ZvckVhY2giLCJfc3RhcnROb3RlIiwiYXQiLCJfcmVzdGFydEV2ZW50IiwicmVtb3ZlQWxsIiwiX3NldEFsbCIsIl90ZXN0TG9vcEJvdW5kcmllcyIsIlBhdHRlcm4iLCJfcGF0dGVybiIsInBhdHRlcm4iLCJ2YWxzIiwiU2VxdWVuY2UiLCJfc3ViZGl2aXNpb24iLCJfaW5kZXhUaW1lIiwic3ViU3ViZGl2aXNpb24iLCJQdWxzZU9zY2lsbGF0b3IiLCJfd2lkdGhHYXRlIiwiX3Nhd3Rvb3RoIiwiUFdNT3NjaWxsYXRvciIsIl9wdWxzZSIsIm1vZHVsYXRpb25GcmVxdWVuY3kiLCJfbW9kdWxhdG9yIiwiRk1Pc2NpbGxhdG9yIiwiX2NhcnJpZXIiLCJtb2R1bGF0aW9uSW5kZXgiLCJtb2R1bGF0aW9uVHlwZSIsImhhcm1vbmljaXR5IiwiX21vZHVsYXRpb25Ob2RlIiwiQU1Pc2NpbGxhdG9yIiwiX21vZHVsYXRpb25TY2FsZSIsIkZhdE9zY2lsbGF0b3IiLCJfb3NjaWxsYXRvcnMiLCJfc3ByZWFkIiwib3NjIiwiaXRlcmF0b3IiLCJPbW5pT3NjaWxsYXRvciIsIl9zb3VyY2VUeXBlIiwiT21uaU9zY1R5cGUiLCJwcmVmaXgiLCJzdWJzdHIiLCJfY3JlYXRlTmV3T3NjaWxsYXRvciIsIm9zY1R5cGUiLCJPc2NpbGxhdG9yQ29uc3RydWN0b3IiLCJvbGRPc2MiLCJtVHlwZSIsIkluc3RydW1lbnQiLCJfc3luY01ldGhvZCIsInRpbWVQb3NpdGlvbiIsIm9yaWdpbmFsTWV0aG9kIiwiX29yaWdpbmFsX3RyaWdnZXJBdHRhY2siLCJfb3JpZ2luYWxfdHJpZ2dlclJlbGVhc2UiLCJNb25vcGhvbmljIiwicG9ydGFtZW50byIsIl90cmlnZ2VyRW52ZWxvcGVBdHRhY2siLCJzZXROb3RlIiwiX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UiLCJnZXRMZXZlbEF0VGltZSIsImVudmVsb3BlIiwicG9ydFRpbWUiLCJTeW50aCIsIm9zY2lsbGF0b3IiLCJBTVN5bnRoIiwibW9kdWxhdGlvbiIsIm1vZHVsYXRpb25FbnZlbG9wZSIsIk1vbm9TeW50aCIsImZpbHRlckVudmVsb3BlIiwiRHVvU3ludGgiLCJ2b2ljZTAiLCJ2b2ljZTEiLCJfdmlicmF0byIsInZpYnJhdG9SYXRlIiwiX3ZpYnJhdG9HYWluIiwidmlicmF0b0Ftb3VudCIsIkZNU3ludGgiLCJjYXJyaWVyIiwibW9kdWxhdG9yIiwiTWVtYnJhbmVTeW50aCIsInBpdGNoRGVjYXkiLCJtYXhOb3RlIiwiaW5oYXJtUmF0aW9zIiwiTWV0YWxTeW50aCIsIl9mcmVxTXVsdGlwbGllcnMiLCJfYW1wbGl0dWUiLCJfaGlnaHBhc3MiLCJfZmlsdGVyRnJlcVNjYWxlciIsIm11bHQiLCJ2ZWwiLCJvY3RzIiwiTm9pc2VTeW50aCIsIm5vaXNlIiwiUGx1Y2tTeW50aCIsIl9ub2lzZSIsImF0dGFja05vaXNlIiwiX2xmY2YiLCJkZWxheUFtb3VudCIsIlBvbHlTeW50aCIsInBvbHlwaG9ueSIsIk1BWF9QT0xZUEhPTlkiLCJ2b2ljZXMiLCJfdHJpZ2dlcnMiLCJ2Iiwidm9pY2UiLCJub3RlcyIsIm9sZGVzdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdHJpbmdpZmllZCIsImRlc2MiLCJyZWxlYXNlQWxsIiwiU2FtcGxlciIsInVybE1hcCIsImlzTmFOIiwiX2FjdGl2ZVNvdXJjZXMiLCJfZmluZENsb3Nlc3QiLCJkaWZmZXJlbmNlIiwiY2xvc2VzdE5vdGUiLCJzb3VyY2UiLCJzb3VyY2VzIiwic2V0V2F2ZVRhYmxlIiwiY3JlYXRlV2F2ZVRhYmxlIiwiR2FpblRvQXVkaW8iLCJOb3JtYWxpemUiLCJpbnB1dE1pbiIsImlucHV0TWF4IiwiX2lucHV0TWluIiwiX2lucHV0TWF4IiwiX2RpdiIsIlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsIiwiX291dHB1dFNpZyIsIl9sYXN0VmFsIiwiX29uVGljayIsIl9iaW5kQW5jaG9yVmFsdWUiLCJfYW5jaG9yVmFsdWUiLCJfc3luY2VkQ2FsbGJhY2siLCJHcmFpblBsYXllciIsImdyYWluU2l6ZSIsIl9ncmFpblNpemUiLCJfb3ZlcmxhcCIsIm92ZXJsYXAiLCJfb25zdG9wIiwiX29mZnNldCIsInNlZWsiLCJQbGF5ZXIiLCJhdXRvc3RhcnQiLCJfZWxhcHNlZFRpbWUiLCJyZXRyaWdnZXIiLCJfb25Tb3VyY2VFbmQiLCJjb21wdXRlZER1cmF0aW9uIiwiX3N0b3BBdE5leHRJdGVyYXRpb24iLCJuZXh0U3RvcCIsInBvc2l0aW9uIiwic3RvcFRpbWUiLCJQbGF5ZXJzIiwiX3BsYXllcnMiLCJfZmFkZUluIiwiX2ZhZGVPdXQiLCJwbGF5ZXIiLCJwbGF5aW5nIiwicGxheWVyTmFtZSIsInN0b3BBbGwiLCJVc2VyTWVkaWEiLCJfbWVkaWFTdHJlYW0iLCJfc3RyZWFtIiwiX2RldmljZSIsImxhYmVsT3JJZCIsImVudW1lcmF0ZURldmljZXMiLCJkZXZpY2VzIiwiZGV2aWNlIiwiZmluZCIsImxhYmVsIiwiZGV2aWNlSWQiLCJjb25zdHJhaW50cyIsImF1ZGlvIiwiZWNob0NhbmNlbGxhdGlvbiIsIm1lZGlhRGV2aWNlcyIsImdldFVzZXJNZWRpYSIsInN0cmVhbSIsImNyZWF0ZU1lZGlhU3RyZWFtU291cmNlIiwiZ2V0QXVkaW9UcmFja3MiLCJ0cmFjayIsImtpbmQiLCJhY3RpdmUiLCJncm91cElkIiwiTWlkaSIsImZhY3RvcnkiLCJnbG9iYWwiLCJyZXF1aXJlIiwiaCIsImNvZGUiLCIxIiwiY2hhckNvZGVBdCIsInRvQnl0ZUFycmF5IiwiZnJvbUJ5dGVBcnJheSIsImJhc2U2NGpzIiwiMiIsIjMiLCJUWVBFRF9BUlJBWV9TVVBQT1JUIiwid3JpdGUiLCJpc0J1ZmZlciIsIlkiLCJBcnJheUJ1ZmZlciIsImJ5dGVMZW5ndGgiLCJfYXVnbWVudCIsImRhdGEiLCJfX3Byb3RvX18iLCJfaXNCdWZmZXIiLCJwb29sU2l6ZSIsIloiLCJSIiwiVSIsInUiLCJOdW1iZXIiLCJWIiwidyIsIlMiLCJUIiwiQSIsIlciLCIkIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJYIiwiTiIsIlAiLCJhYSIsIk8iLCJTbG93QnVmZmVyIiwiSU5TUEVDVF9NQVhfQllURVMiLCJmb28iLCJzdWJhcnJheSIsImNvbXBhcmUiLCJpc0VuY29kaW5nIiwiZXF1YWxzIiwiaW5zcGVjdCIsInJlYWRVSW50OCIsIndyaXRlVUludDgiLCJ0b0pTT04iLCJfYXJyIiwicmVhZFVJbnRMRSIsInJlYWRVSW50QkUiLCJyZWFkVUludDE2TEUiLCJyZWFkVUludDE2QkUiLCJyZWFkVUludDMyTEUiLCJyZWFkVUludDMyQkUiLCJyZWFkSW50TEUiLCJyZWFkSW50QkUiLCJyZWFkSW50OCIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZEZsb2F0TEUiLCJyZWFkIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVJbnRMRSIsIndyaXRlVUludEJFIiwid3JpdGVVSW50MTZMRSIsIndyaXRlVUludDE2QkUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVSW50MzJCRSIsIndyaXRlSW50TEUiLCJ3cml0ZUludEJFIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkxFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVGbG9hdEJFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlRG91YmxlQkUiLCJfc2V0IiwiZmlsbCIsInRvQXJyYXlCdWZmZXIiLCJfIiwidG9Mb2NhbGVTdHJpbmciLCJzZWxmIiwiYmFzZTY0LWpzIiwiaWVlZTc1NCIsImlzYXJyYXkiLCI0IiwiRVM2UHJvbWlzZSIsImNhIiwiZWEiLCJfcmVzdWx0IiwiaWEiLCJnYSIsImhhIiwiX2xhYmVsIiwiX29uZXJyb3IiLCJmYSIsIl9zdWJzY3JpYmVycyIsImphIiwia2EiLCJfaW5zdGFuY2VDb25zdHJ1Y3RvciIsInByb21pc2UiLCJfcmVtYWluaW5nIiwiX2VudW1lcmF0ZSIsImRhIiwiTXV0YXRpb25PYnNlcnZlciIsIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiLCJiYSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiaW1wb3J0U2NyaXB0cyIsIk1lc3NhZ2VDaGFubmVsIiwibmV4dFRpY2siLCJjcmVhdGVUZXh0Tm9kZSIsIm9ic2VydmUiLCJjaGFyYWN0ZXJEYXRhIiwicG9ydDEiLCJwb3J0MiIsInJ1bk9uTG9vcCIsInJ1bk9uQ29udGV4dCIsInN1YnN0cmluZyIsIl9lYWNoRW50cnkiLCJfc2V0dGxlZEF0IiwiX3dpbGxTZXR0bGVBdCIsImFsbCIsInJhY2UiLCJyZWplY3QiLCJfc2V0U2NoZWR1bGVyIiwiX3NldEFzYXAiLCJfYXNhcCIsInBvbHlmaWxsIiwiRnVuY3Rpb24iLCJjYXN0IiwiX3Byb2Nlc3MiLCI1IiwiZmV0Y2hKc29ucCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJyZW1vdmVDaGlsZCIsImpzb25wQ2FsbGJhY2siLCJqc29ucENhbGxiYWNrRnVuY3Rpb24iLCJEYXRlIiwib2siLCJqc29uIiwic2V0QXR0cmlidXRlIiwiY2hhcnNldCIsImFwcGVuZENoaWxkIiwiNiIsImNyZWF0ZUVsZW1lbnROUyIsIkhUTUxFbGVtZW50Iiwic2FmYXJpIiwic2V0SW1tZWRpYXRlIiwicmV2b2tlT2JqZWN0VVJMIiwicmVhZHlTdGF0ZSIsIklOSVQiLCJocmVmIiwiZG93bmxvYWQiLCJNb3VzZUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsIkRPTkUiLCJGaWxlUmVhZGVyIiwib25sb2FkZW5kIiwicmVzdWx0IiwibG9jYXRpb24iLCJyZWFkQXNEYXRhVVJMIiwibXNTYXZlT3JPcGVuQmxvYiIsIldSSVRJTkciLCJvbndyaXRlc3RhcnQiLCJvbnByb2dyZXNzIiwib253cml0ZSIsIm9uYWJvcnQiLCJvbndyaXRlZW5kIiwiY29udGVudCIsInNhdmVBcyIsIjciLCJOYU4iLCJMTjIiLCI4IiwiOSIsIm9hIiwibmEiLCJtYSIsImxhIiwicWEiLCJyYSIsInNvcnQiLCJwYSIsImxpYnRlc3MiLCJHbHVUZXNzZWxhdG9yIiwid2luZGluZ1J1bGUiLCJHTFVfVEVTU19XSU5ESU5HX09ERCIsIkdMVV9URVNTX1dJTkRJTkdfTk9OWkVSTyIsIkdMVV9URVNTX1dJTkRJTkdfUE9TSVRJVkUiLCJHTFVfVEVTU19XSU5ESU5HX05FR0FUSVZFIiwiR0xVX1RFU1NfV0lORElOR19BQlNfR0VRX1RXTyIsInByaW1pdGl2ZVR5cGUiLCJHTF9MSU5FX0xPT1AiLCJHTF9UUklBTkdMRVMiLCJHTF9UUklBTkdMRV9TVFJJUCIsIkdMX1RSSUFOR0xFX0ZBTiIsImVycm9yVHlwZSIsIkdMVV9URVNTX01JU1NJTkdfQkVHSU5fUE9MWUdPTiIsIkdMVV9URVNTX01JU1NJTkdfRU5EX1BPTFlHT04iLCJHTFVfVEVTU19NSVNTSU5HX0JFR0lOX0NPTlRPVVIiLCJHTFVfVEVTU19NSVNTSU5HX0VORF9DT05UT1VSIiwiR0xVX1RFU1NfQ09PUkRfVE9PX0xBUkdFIiwiR0xVX1RFU1NfTkVFRF9DT01CSU5FX0NBTExCQUNLIiwiZ2x1RW51bSIsIkdMVV9URVNTX01FU0giLCJHTFVfVEVTU19UT0xFUkFOQ0UiLCJHTFVfVEVTU19XSU5ESU5HX1JVTEUiLCJHTFVfVEVTU19CT1VOREFSWV9PTkxZIiwiR0xVX0lOVkFMSURfRU5VTSIsIkdMVV9JTlZBTElEX1ZBTFVFIiwiR0xVX1RFU1NfQkVHSU4iLCJHTFVfVEVTU19WRVJURVgiLCJHTFVfVEVTU19FTkQiLCJHTFVfVEVTU19FUlJPUiIsIkdMVV9URVNTX0VER0VfRkxBRyIsIkdMVV9URVNTX0NPTUJJTkUiLCJHTFVfVEVTU19CRUdJTl9EQVRBIiwiR0xVX1RFU1NfVkVSVEVYX0RBVEEiLCJHTFVfVEVTU19FTkRfREFUQSIsIkdMVV9URVNTX0VSUk9SX0RBVEEiLCJHTFVfVEVTU19FREdFX0ZMQUdfREFUQSIsIkdMVV9URVNTX0NPTUJJTkVfREFUQSIsImdsdURlbGV0ZVRlc3MiLCJnbHVUZXNzUHJvcGVydHkiLCJnbHVHZXRUZXNzUHJvcGVydHkiLCJnbHVUZXNzTm9ybWFsIiwiZ2x1VGVzc0NhbGxiYWNrIiwiZ2x1VGVzc1ZlcnRleCIsImdsdVRlc3NCZWdpblBvbHlnb24iLCJnbHVUZXNzQmVnaW5Db250b3VyIiwiZ2x1VGVzc0VuZENvbnRvdXIiLCJnbHVUZXNzRW5kUG9seWdvbiIsIjEwIiwib3BlbnR5cGUiLCJ0YWJsZSIsIlVpbnQxNkFycmF5IiwidHJhbnMiLCJzb3VyY2VJbmRleCIsInRhZyIsImJpdGNvdW50IiwiZGVzdExlbiIsImx0cmVlIiwiZHRyZWUiLCJ2ZSIsInVlIiwic2UiLCJ0ZSIsImtlIiwib2UiLCJwZSIsInFlIiwicmUiLCJsZSIsIngxIiwieTEiLCJ4MiIsInkyIiwiY29tbWFuZHMiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsInRhYmxlTmFtZSIsImZpZWxkcyIsImZvcm1hdCIsImdseXBocyIsInhlIiwiYXNzZXJ0Iiwic2NyaXB0IiwiZGVmYXVsdExhbmdTeXMiLCJyZXFGZWF0dXJlSW5kZXgiLCJmZWF0dXJlSW5kZXhlcyIsImxhbmdTeXNSZWNvcmRzIiwibGFuZ1N5cyIsImZlYXR1cmUiLCJmZWF0dXJlUGFyYW1zIiwibG9va3VwTGlzdEluZGV4ZXMiLCJsb29rdXBUeXBlIiwibG9va3VwRmxhZyIsInN1YnRhYmxlcyIsImdldFVpbnQ4IiwiZ2V0VWludDE2IiwiZ2V0VWludDMyIiwiZ2V0SW50MTYiLCJyZWxhdGl2ZU9mZnNldCIsImdseXBoSW5kZXgiLCJmb250IiwiY21hcCIsImVuY29kaW5nIiwibmFtZXMiLCJRZSIsIm51bWJlck9mR2x5cGhzIiwiZ2x5cGhOYW1lSW5kZXgiLCJiaW5kQ29uc3RydWN0b3JWYWx1ZXMiLCJwYXRoIiwiY29uZmlndXJhYmxlIiwiTGUiLCJnZXRDYXJkMTYiLCJnZXRCeXRlIiwiZ2V0T2Zmc2V0IiwiZ2V0Qnl0ZXMiLCJvYmplY3RzIiwiZW5kT2Zmc2V0IiwicGFyc2VCeXRlIiwiUGFyc2VyIiwiTmUiLCJvcCIsInNhIiwiVGUiLCJ0YSIsIlVlIiwiRGF0YVZpZXciLCJfc3VicnMiLCJfc3VicnNCaWFzIiwicHJpdmF0ZSIsIl9kZWZhdWx0V2lkdGhYIiwiZGVmYXVsdFdpZHRoWCIsIl9ub21pbmFsV2lkdGhYIiwibm9taW5hbFdpZHRoWCIsInN1YnJzIiwiX3ByaXZhdGVEaWN0IiwieGEiLCJjbG9zZVBhdGgiLCJtb3ZlVG8iLCJpc0NJREZvbnQiLCJ0YWJsZXMiLCJjZmYiLCJ0b3BEaWN0IiwiX2ZkU2VsZWN0IiwiX2ZkQXJyYXkiLCJwb3AiLCJsaW5lVG8iLCJjdXJ2ZVRvIiwiZ3N1YnJzQmlhcyIsImdzdWJycyIsImFkdmFuY2VXaWR0aCIsIkFhIiwiRGEiLCJFYSIsIkllIiwiUmVjb3JkIiwiZGljdCIsIkZhIiwidG9wRGljdHMiLCJKYSIsIlhhIiwiWWEiLCJkZiIsImZmIiwiZWYiLCIkYSIsIl9hIiwibWIiLCJuYiIsIm9iIiwicGIiLCJUYWJsZSIsIm51bVRhYmxlcyIsInNlYXJjaFJhbmdlIiwiZW50cnlTZWxlY3RvciIsInJhbmdlU2hpZnQiLCJzaXplT2YiLCJhcmd1bWVudCIsImVuY29kZSIsInFiIiwiY2hhclRvR2x5cGhJbmRleCIsImdldE1ldHJpY3MiLCJ0YiIsInViIiwidmIiLCJ3YiIsInhiIiwieWIiLCJ6YiIsIkFiIiwic3Vic3RGb3JtYXQiLCJDYiIsIkRiIiwiRWIiLCJGYiIsInBhcnNlU2hvcnQiLCJHYiIsIm51bWJlck9mQ29udG91cnMiLCJfeE1pbiIsIl95TWluIiwiX3hNYXgiLCJfeU1heCIsImVuZFBvaW50SW5kaWNlcyIsInBhcnNlVVNob3J0IiwiaW5zdHJ1Y3Rpb25MZW5ndGgiLCJpbnN0cnVjdGlvbnMiLCJvbkN1cnZlIiwibGFzdFBvaW50T2ZDb250b3VyIiwicG9pbnRzIiwiaXNDb21wb3NpdGUiLCJjb21wb25lbnRzIiwieFNjYWxlIiwic2NhbGUwMSIsInNjYWxlMTAiLCJ5U2NhbGUiLCJkeSIsIm1hdGNoZWRQb2ludHMiLCJwYXJzZUNoYXIiLCJwYXJzZUYyRG90MTQiLCJIYiIsIkpiIiwiSWIiLCJxdWFkcmF0aWNDdXJ2ZVRvIiwiS2IiLCJnZXRQYXRoIiwiTWIiLCJnZXRDb21tYW5kcyIsInZmIiwiX2ZwZ21TdGF0ZSIsIl9wcmVwU3RhdGUiLCJfZXJyb3JTdGF0ZSIsIk5iIiwiT2IiLCJzaWduIiwiUGIiLCJRYiIsIlJiIiwiU2IiLCJUYiIsImF4aXMiLCJzbG9wZSIsIm5vcm1hbFNsb3BlIiwiZnJlZXplIiwiVWIiLCJ4ZiIsInlmIiwiVmIiLCJ4byIsInlvIiwicHJldlBvaW50T25Db250b3VyIiwibmV4dFBvaW50T25Db250b3VyIiwieFRvdWNoZWQiLCJ5VG91Y2hlZCIsInByZXZlbnRFeHRlbnNpb25zIiwiV2IiLCJlbnYiLCJzdGFjayIsInByb2ciLCJ6cDAiLCJ6cDEiLCJ6cDIiLCJycDAiLCJycDEiLCJycDIiLCJmdiIsInB2IiwiZHB2IiwiWGIiLCJ0Wm9uZSIsImdab25lIiwiWWIiLCJpcCIsIlpiIiwiREVCVUciLCIkYiIsIl9iIiwiYWMiLCJ6MiIsInoxIiwiYmMiLCJ4YyIsIkdjIiwiejAiLCJkaXN0YW5jZSIsInpmIiwic2V0UmVsYXRpdmUiLCJ0b3VjaCIsIkhjIiwidG91Y2hlZCIsInByZXZUb3VjaGVkIiwibmV4dFRvdWNoZWQiLCJpbnRlcnBvbGF0ZSIsIkljIiwiSmMiLCJjb250b3VycyIsIktjIiwiTmMiLCJRYyIsImN2dCIsImN2Q3V0SW4iLCJYYyIsIlljIiwibWQiLCJwcGVtIiwiZGVsdGFCYXNlIiwiZGVsdGFTaGlmdCIsInhkIiwiemQiLCJHZCIsIk5kIiwiT2QiLCJQZCIsIm1pbkRpcyIsIlFkIiwiZW1wdHkiLCJmYW1pbHlOYW1lIiwic3R5bGVOYW1lIiwidW5pdHNQZXJFbSIsImFzY2VuZGVyIiwiZGVzY2VuZGVyIiwiZm9udEZhbWlseSIsImVuIiwiZm9udFN1YmZhbWlseSIsImZ1bGxOYW1lIiwicG9zdFNjcmlwdE5hbWUiLCJkZXNpZ25lciIsImRlc2lnbmVyVVJMIiwibWFudWZhY3R1cmVyIiwibWFudWZhY3R1cmVyVVJMIiwibGljZW5zZSIsImxpY2Vuc2VVUkwiLCJkZXNjcmlwdGlvbiIsImNvcHlyaWdodCIsInRyYWRlbWFyayIsImNyZWF0ZWRUaW1lc3RhbXAiLCJvczIiLCJ1c1dlaWdodENsYXNzIiwid2VpZ2h0Q2xhc3MiLCJ1c1dlaWdodENsYXNzZXMiLCJNRURJVU0iLCJ1c1dpZHRoQ2xhc3MiLCJ3aWR0aENsYXNzIiwidXNXaWR0aENsYXNzZXMiLCJmc1NlbGVjdGlvbiIsImZzU2VsZWN0aW9uVmFsdWVzIiwiUkVHVUxBUiIsIlNlIiwiR2x5cGhTZXQiLCJzdWJzdGl0dXRpb24iLCJfaGludGluZyIsIm91dGxpbmVzRm9ybWF0IiwiUmQiLCJTZCIsIlRkIiwicGFyc2VUYWciLCJwYXJzZUZpeGVkIiwic2tpcCIsIlVkIiwiY29vcmRpbmF0ZXMiLCJWZCIsImNlIiwicmVhZEZpbGUiLCJtZXNzYWdlIiwiZWUiLCJnZXRUYWciLCJnZXRVTG9uZyIsImNoZWNrc3VtIiwiY29tcHJlc3Npb24iLCJnZSIsImNvbXByZXNzZWRMZW5ndGgiLCJ3ZSIsImhlIiwiZ2V0VVNob3J0IiwiZmUiLCJNZSIsInBhcnNlIiwicGFyc2VTaG9ydExpc3QiLCJmcGdtIiwicGFyc2VCeXRlTGlzdCIsImhlYWQiLCJXZSIsImluZGV4VG9Mb2NGb3JtYXQiLCJoaGVhIiwiWGUiLCJudW1iZXJPZkhNZXRyaWNzIiwiWmUiLCJtYXhwIiwiJGUiLCJudW1HbHlwaHMiLCJqZiIsInBvc3QiLCJrZiIsImdseXBoTmFtZXMiLCJwcmVwIiwiZ2YiLCJIZiIsIlZlIiwiWWUiLCJnbHlwaEluZGV4TWFwIiwiYWRkVW5pY29kZSIsImNmZkVuY29kaW5nIiwiZ2x5cGhJbmRleFRvTmFtZSIsImtlcm5pbmdQYWlycyIsIkdmIiwiZ3BvcyIsIkZmIiwiaW5pdCIsImdzdWIiLCJvZiIsImZ2YXIiLCJDZiIsIm1ldGEiLCJwZiIsIm1ldGFzIiwiY29kZVBvaW50QXQiLCJtZSIsIm5lIiwiaXNFbXB0eSIsImFkZFBvaW50IiwiYWRkWCIsImFkZFkiLCJhZGRCZXppZXIiLCJhZGRRdWFkIiwiYmV6aWVyQ3VydmVUbyIsInF1YWRUbyIsImdldEJvdW5kaW5nQm94IiwiZHJhdyIsImJlZ2luUGF0aCIsImZpbGxTdHlsZSIsInN0cm9rZVN0eWxlIiwibGluZVdpZHRoIiwidG9QYXRoRGF0YSIsInRvU1ZHIiwidG9ET01FbGVtZW50IiwiemUiLCJBZSIsIkJlIiwiQ2UiLCJCWVRFIiwiQ0hBUiIsIkNIQVJBUlJBWSIsIlVTSE9SVCIsIlNIT1JUIiwiVUlOVDI0IiwiVUxPTkciLCJMT05HIiwiRklYRUQiLCJGV09SRCIsIlVGV09SRCIsIkxPTkdEQVRFVElNRSIsIlRBRyIsIkNhcmQ4IiwiQ2FyZDE2IiwiT2ZmU2l6ZSIsIlNJRCIsIk5VTUJFUiIsIk5VTUJFUjE2IiwiTlVNQkVSMzIiLCJSRUFMIiwiTkFNRSIsIlNUUklORyIsIlVURjgiLCJVVEYxNiIsIkRlIiwieC1tYWMtY3JvYXRpYW4iLCJ4LW1hYy1jeXJpbGxpYyIsIngtbWFjLWdhZWxpYyIsIngtbWFjLWdyZWVrIiwieC1tYWMtaWNlbGFuZGljIiwieC1tYWMtaW51aXQiLCJ4LW1hYy1jZSIsIm1hY2ludG9zaCIsIngtbWFjLXJvbWFuaWFuIiwieC1tYWMtdHVya2lzaCIsIk1BQ1NUUklORyIsIkVlIiwiRmUiLCJXZWFrTWFwIiwiR2UiLCJWQVJERUxUQVMiLCJJTkRFWCIsIk9CSkVDVCIsIkRJQ1QiLCJPUEVSQU5EIiwiT1BFUkFUT1IiLCJPUCIsIkhlIiwiQ0hBUlNUUklORyIsIlRBQkxFIiwiUkVDT1JEIiwiTElURVJBTCIsIkNvdmVyYWdlIiwiU2NyaXB0TGlzdCIsIkZlYXR1cmVMaXN0IiwiTG9va3VwTGlzdCIsInVzaG9ydExpc3QiLCJ0YWJsZUxpc3QiLCJyZWNvcmRMaXN0IiwiSmUiLCJieXRlIiwidVNob3J0Iiwic2hvcnQiLCJ1TG9uZyIsImZpeGVkIiwibG9uZ0RhdGVUaW1lIiwiZ2V0SW50OCIsInBhcnNlQ2FyZDgiLCJwYXJzZUNhcmQxNiIsInBhcnNlU0lEIiwicGFyc2VPZmZzZXQxNiIsInBhcnNlVUxvbmciLCJwYXJzZU9mZnNldDMyIiwicGFyc2VTdHJpbmciLCJwYXJzZUxvbmdEYXRlVGltZSIsInBhcnNlVmVyc2lvbiIsInBhcnNlVUxvbmdMaXN0IiwicGFyc2VPZmZzZXQxNkxpc3QiLCJwYXJzZVVTaG9ydExpc3QiLCJwYXJzZUxpc3QiLCJwYXJzZUxpc3QzMiIsInBhcnNlUmVjb3JkTGlzdCIsInBhcnNlUmVjb3JkTGlzdDMyIiwicGFyc2VTdHJ1Y3QiLCJwYXJzZVZhbHVlUmVjb3JkIiwieFBsYWNlbWVudCIsInlQbGFjZW1lbnQiLCJ4QWR2YW5jZSIsInlBZHZhbmNlIiwieFBsYURldmljZSIsInlQbGFEZXZpY2UiLCJ4QWR2RGV2aWNlIiwieUFkdkRldmljZSIsInBhcnNlVmFsdWVSZWNvcmRMaXN0IiwicGFyc2VQb2ludGVyIiwicGFyc2VQb2ludGVyMzIiLCJwYXJzZUxpc3RPZkxpc3RzIiwicGFyc2VDb3ZlcmFnZSIsInJhbmdlcyIsInBhcnNlQ2xhc3NEZWYiLCJzdGFydEdseXBoIiwiY2xhc3NlcyIsImNsYXNzSWQiLCJsaXN0IiwibGlzdDMyIiwicmVjb3JkTGlzdDMyIiwicG9pbnRlciIsInBvaW50ZXIzMiIsIm9mZnNldDE2IiwidVNob3J0TGlzdCIsIm9mZnNldDMyIiwidUxvbmdMaXN0Iiwic3RydWN0IiwiY292ZXJhZ2UiLCJjbGFzc0RlZiIsIktlIiwicmVzZXJ2ZWQiLCJwYXJzZVNjcmlwdExpc3QiLCJwYXJzZUZlYXR1cmVMaXN0IiwicGFyc2VMb29rdXBMaXN0IiwibWFya0ZpbHRlcmluZ1NldCIsInBhcnNlRmVhdHVyZVZhcmlhdGlvbnNMaXN0IiwiY29uZGl0aW9uU2V0T2Zmc2V0IiwiZmVhdHVyZVRhYmxlU3Vic3RpdHV0aW9uT2Zmc2V0IiwiZ2V0Q2FyZDgiLCJnZXRTaG9ydCIsImdldEZpeGVkIiwiYnl0ZXNUb1N0cmluZyIsImxhbmd1YWdlIiwiZ3JvdXBDb3VudCIsInNlZ0NvdW50IiwibWFrZSIsInVuaWNvZGUiLCJ1bmljb2RlcyIsImdseXBoSWQiLCJzZWdDb3VudFgyIiwiY21hcDRMZW5ndGgiLCJjbWFwMTJPZmZzZXQiLCJPZSIsIlBlIiwibmFtZVRvR2x5cGhJbmRleCIsIlJlIiwibGluZSIsInhNaW4iLCJ5TWluIiwieE1heCIsInlNYXgiLCJoaW50aW5nIiwiZ2V0Q29udG91cnMiLCJsZWZ0U2lkZUJlYXJpbmciLCJyaWdodFNpZGVCZWFyaW5nIiwiZHJhd1BvaW50cyIsImFyYyIsImRyYXdNZXRyaWNzIiwiZ2x5cGhMb2FkZXIiLCJ0dGZHbHlwaExvYWRlciIsImNmZkdseXBoTG9hZGVyIiwiZm9ybWF0TWFqb3IiLCJmb3JtYXRNaW5vciIsIm9mZnNldFNpemUiLCJyb3MiLCJmZEFycmF5IiwiZmRTZWxlY3QiLCJ5YSIsInN1YnJzQmlhcyIsImNoYXJTdHJpbmdzIiwibkdseXBocyIsInZhIiwid2EiLCJ3ZWlnaHQiLCJ3ZWlnaHROYW1lIiwiZm9udEJCb3giLCJmb250TWF0cml4IiwiaGVhZGVyIiwibmFtZUluZGV4IiwiQ2EiLCJ0b3BEaWN0SW5kZXgiLCJnbG9iYWxTdWJySW5kZXgiLCJjaGFyc2V0cyIsIklhIiwiY2hhclN0cmluZ3NJbmRleCIsIkthIiwicHJpdmF0ZURpY3QiLCJMYSIsInN0cmluZ0luZGV4Iiwic3RyaW5ncyIsIkdhIiwiZm9udFJldmlzaW9uIiwiY2hlY2tTdW1BZGp1c3RtZW50IiwibWFnaWNOdW1iZXIiLCJmbGFncyIsImNyZWF0ZWQiLCJtb2RpZmllZCIsIm1hY1N0eWxlIiwibG93ZXN0UmVjUFBFTSIsImZvbnREaXJlY3Rpb25IaW50IiwiZ2x5cGhEYXRhRm9ybWF0IiwiZ2V0VGltZSIsImxpbmVHYXAiLCJhZHZhbmNlV2lkdGhNYXgiLCJtaW5MZWZ0U2lkZUJlYXJpbmciLCJtaW5SaWdodFNpZGVCZWFyaW5nIiwieE1heEV4dGVudCIsImNhcmV0U2xvcGVSaXNlIiwiY2FyZXRTbG9wZVJ1biIsImNhcmV0T2Zmc2V0IiwibWV0cmljRGF0YUZvcm1hdCIsIm1heFBvaW50cyIsIm1heENvbnRvdXJzIiwibWF4Q29tcG9zaXRlUG9pbnRzIiwibWF4Q29tcG9zaXRlQ29udG91cnMiLCJtYXhab25lcyIsIm1heFR3aWxpZ2h0UG9pbnRzIiwibWF4U3RvcmFnZSIsIm1heEZ1bmN0aW9uRGVmcyIsIm1heEluc3RydWN0aW9uRGVmcyIsIm1heFN0YWNrRWxlbWVudHMiLCJtYXhTaXplT2ZJbnN0cnVjdGlvbnMiLCJtYXhDb21wb25lbnRFbGVtZW50cyIsIm1heENvbXBvbmVudERlcHRoIiwiX2UiLCIwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5IiwiMjAiLCIyMSIsIjIyIiwiMjMiLCIyNCIsIjI1IiwiMjYiLCIyNyIsIjI4IiwiMjkiLCIzMCIsIjMxIiwiMzIiLCIzMyIsIjM0IiwiMzUiLCIzNiIsIjM3IiwiMzgiLCIzOSIsIjQwIiwiNDEiLCI0MiIsIjQzIiwiNDQiLCI0NSIsIjQ2IiwiNDciLCI0OCIsIjQ5IiwiNTAiLCI1MSIsIjUyIiwiNTMiLCI1NCIsIjU1IiwiNTYiLCI1NyIsIjU4IiwiNTkiLCI2MCIsIjYxIiwiNjIiLCI2MyIsIjY0IiwiNjUiLCI2NiIsIjY3IiwiNjgiLCI2OSIsIjcwIiwiNzEiLCI3MiIsIjczIiwiNzQiLCI3NSIsIjc2IiwiNzciLCI3OCIsIjc5IiwiODAiLCI4MSIsIjgyIiwiODMiLCI4NCIsIjg1IiwiODYiLCI4NyIsIjg4IiwiODkiLCI5MCIsIjkxIiwiOTIiLCI5MyIsIjk0IiwiMTI4IiwiMTI5IiwiMTMwIiwiMTMxIiwiMTMyIiwiMTMzIiwiMTM0IiwiMTM1IiwiMTM2IiwiMTM3IiwiMTM4IiwiMTM5IiwiMTQwIiwiMTQxIiwiMTQyIiwiMTQzIiwiMTQ0IiwiMTQ1IiwiMTQ2IiwiMTQ3IiwiMTQ4IiwiMTQ5IiwiMTUwIiwiMTUxIiwiYmYiLCIxMDc4IiwiMTA1MiIsIjExNTYiLCIxMTE4IiwiNTEyMSIsIjE1MzYxIiwiMzA3MyIsIjIwNDkiLCIxMTI2NSIsIjEzMzEzIiwiMTIyODkiLCI0MDk3IiwiNjE0NSIsIjgxOTMiLCIxNjM4NSIsIjEwMjUiLCIxMDI0MSIsIjcxNjkiLCIxNDMzNyIsIjkyMTciLCIxMDY3IiwiMTEwMSIsIjIwOTIiLCIxMDY4IiwiMTEzMyIsIjEwNjkiLCIxMDU5IiwiMjExNyIsIjEwOTMiLCI4MjE4IiwiNTE0NiIsIjExNTAiLCIxMDI2IiwiMTAyNyIsIjMwNzYiLCI1MTI0IiwiMjA1MiIsIjQxMDAiLCIxMDI4IiwiMTE1NSIsIjEwNTAiLCI0MTIyIiwiMTAyOSIsIjEwMzAiLCIxMTY0IiwiMTEyNSIsIjIwNjciLCIxMDQzIiwiMzA4MSIsIjEwMjQ5IiwiNDEwNSIsIjkyMjUiLCIxNjM5MyIsIjYxNTMiLCI4MjAxIiwiMTc0MTciLCI1MTI5IiwiMTMzMjEiLCIxODQ0MSIsIjcxNzciLCIxMTI3MyIsIjIwNTciLCIxMDMzIiwiMTIyOTciLCIxMDYxIiwiMTA4MCIsIjExMjQiLCIxMDM1IiwiMjA2MCIsIjMwODQiLCIxMDM2IiwiNTEzMiIsIjYxNTYiLCI0MTA4IiwiMTEyMiIsIjExMTAiLCIxMDc5IiwiMzA3OSIsIjEwMzEiLCI1MTI3IiwiNDEwMyIsIjIwNTUiLCIxMDMyIiwiMTEzNSIsIjEwOTUiLCIxMTI4IiwiMTAzNyIsIjEwODEiLCIxMDM4IiwiMTAzOSIsIjExMzYiLCIxMDU3IiwiMTExNyIsIjIxNDEiLCIyMTA4IiwiMTA3NiIsIjEwNzciLCIxMDQwIiwiMjA2NCIsIjEwNDEiLCIxMDk5IiwiMTA4NyIsIjExMDciLCIxMTU4IiwiMTE1OSIsIjEwODkiLCIxMTExIiwiMTA0MiIsIjEwODgiLCIxMTA4IiwiMTA2MiIsIjEwNjMiLCIyMDk0IiwiMTEzNCIsIjEwNzEiLCIyMTEwIiwiMTA4NiIsIjExMDAiLCIxMDgyIiwiMTE1MyIsIjExNDYiLCIxMTAyIiwiMTE0OCIsIjExMDQiLCIyMTI4IiwiMTEyMSIsIjEwNDQiLCIyMDY4IiwiMTE1NCIsIjEwOTYiLCIxMTIzIiwiMTA0NSIsIjEwNDYiLCIyMDcwIiwiMTA5NCIsIjExMzEiLCIyMTU1IiwiMzE3OSIsIjEwNDgiLCIxMDQ3IiwiMTA0OSIsIjkyNzUiLCI0MTU1IiwiNTE3OSIsIjMxMzEiLCIxMDgzIiwiMjEwNyIsIjgyNTEiLCI2MjAzIiwiNzIyNyIsIjExMDMiLCI3MTk0IiwiMzA5OCIsIjYxNzAiLCIyMDc0IiwiMTEzMiIsIjEwNzQiLCIxMTE1IiwiMTA1MSIsIjEwNjAiLCIxMTI3NCIsIjE2Mzk0IiwiMTMzMjIiLCI5MjI2IiwiNTEzMCIsIjcxNzgiLCIxMjI5OCIsIjE3NDE4IiwiNDEwNiIsIjE4NDQyIiwiMjA1OCIsIjE5NDY2IiwiNjE1NCIsIjE1MzcwIiwiMTAyNTAiLCIyMDQ5MCIsIjMwODIiLCIxMDM0IiwiMjE1MTQiLCIxNDM0NiIsIjgyMDIiLCIyMDc3IiwiMTA1MyIsIjExMTQiLCIxMDY0IiwiMjE0MyIsIjEwOTciLCIxMDkyIiwiMTA5OCIsIjEwNTQiLCIxMTA1IiwiMTA1NSIsIjEwOTAiLCIxMTUyIiwiMTA1OCIsIjEwNzAiLCIxMDU2IiwiMjExNSIsIjEwOTEiLCIxMDY2IiwiMTEwNiIsIjExNjAiLCIxMTU3IiwiMTE0NCIsIjExMzAiLCJwbGF0Zm9ybUlEIiwiZW5jb2RpbmdJRCIsImxhbmd1YWdlSUQiLCJuYW1lSUQiLCJoZiIsImJlZ2luIiwieEF2Z0NoYXJXaWR0aCIsImZzVHlwZSIsInlTdWJzY3JpcHRYU2l6ZSIsInlTdWJzY3JpcHRZU2l6ZSIsInlTdWJzY3JpcHRYT2Zmc2V0IiwieVN1YnNjcmlwdFlPZmZzZXQiLCJ5U3VwZXJzY3JpcHRYU2l6ZSIsInlTdXBlcnNjcmlwdFlTaXplIiwieVN1cGVyc2NyaXB0WE9mZnNldCIsInlTdXBlcnNjcmlwdFlPZmZzZXQiLCJ5U3RyaWtlb3V0U2l6ZSIsInlTdHJpa2VvdXRQb3NpdGlvbiIsInNGYW1pbHlDbGFzcyIsInBhbm9zZSIsInVsVW5pY29kZVJhbmdlMSIsInVsVW5pY29kZVJhbmdlMiIsInVsVW5pY29kZVJhbmdlMyIsInVsVW5pY29kZVJhbmdlNCIsImFjaFZlbmRJRCIsInVzRmlyc3RDaGFySW5kZXgiLCJ1c0xhc3RDaGFySW5kZXgiLCJzVHlwb0FzY2VuZGVyIiwic1R5cG9EZXNjZW5kZXIiLCJzVHlwb0xpbmVHYXAiLCJ1c1dpbkFzY2VudCIsInVzV2luRGVzY2VudCIsInVsQ29kZVBhZ2VSYW5nZTEiLCJ1bENvZGVQYWdlUmFuZ2UyIiwic3hIZWlnaHQiLCJzQ2FwSGVpZ2h0IiwidXNEZWZhdWx0Q2hhciIsInVzQnJlYWtDaGFyIiwidXNNYXhDb250ZW50IiwidW5pY29kZVJhbmdlcyIsImdldFVuaWNvZGVSYW5nZSIsIml0YWxpY0FuZ2xlIiwidW5kZXJsaW5lUG9zaXRpb24iLCJ1bmRlcmxpbmVUaGlja25lc3MiLCJpc0ZpeGVkUGl0Y2giLCJtaW5NZW1UeXBlNDIiLCJtYXhNZW1UeXBlNDIiLCJtaW5NZW1UeXBlMSIsIm1heE1lbVR5cGUxIiwibGYiLCJkZWx0YUdseXBoSWQiLCJzdWJzdGl0dXRlIiwic2VxdWVuY2VzIiwiYWx0ZXJuYXRlU2V0cyIsImxpZ2F0dXJlU2V0cyIsImxpZ0dseXBoIiwibWYiLCJzZXF1ZW5jZUluZGV4IiwibG9va3VwTGlzdEluZGV4IiwicnVsZVNldHMiLCJsb29rdXBSZWNvcmRzIiwiY2xhc3NTZXRzIiwiY292ZXJhZ2VzIiwiY2hhaW5SdWxlU2V0cyIsImJhY2t0cmFjayIsImxvb2thaGVhZCIsImJhY2t0cmFja0NsYXNzRGVmIiwiaW5wdXRDbGFzc0RlZiIsImxvb2thaGVhZENsYXNzRGVmIiwiY2hhaW5DbGFzc1NldCIsImJhY2t0cmFja0NvdmVyYWdlIiwiaW5wdXRDb3ZlcmFnZSIsImxvb2thaGVhZENvdmVyYWdlIiwic3Vic3RpdHV0ZXMiLCJuZiIsInNjcmlwdHMiLCJmZWF0dXJlcyIsImxvb2t1cHMiLCJ2YXJpYXRpb25zIiwicWYiLCJmb250VG9UYWJsZSIsImFkdmFuY2VXaWR0aEF2ZyIsInJiIiwibWF4TGVmdFNpZGVCZWFyaW5nIiwiaGFzQ2hhciIsImdldEVuZ2xpc2hOYW1lIiwidW5pcXVlSUQiLCJwcmVmZXJyZWRGYW1pbHkiLCJwcmVmZXJyZWRTdWJmYW1pbHkiLCJjb21wdXRlQ2hlY2tTdW0iLCJzZWFyY2hUYWciLCJiaW5TZWFyY2giLCJnZXRUYWJsZSIsImNyZWF0ZURlZmF1bHRUYWJsZSIsImdldFNjcmlwdE5hbWVzIiwiZ2V0RGVmYXVsdFNjcmlwdE5hbWUiLCJnZXRTY3JpcHRUYWJsZSIsImdldExhbmdTeXNUYWJsZSIsImdldEZlYXR1cmVUYWJsZSIsImdldExvb2t1cFRhYmxlcyIsImdldEdseXBoQ2xhc3MiLCJnZXRDb3ZlcmFnZUluZGV4IiwiZXhwYW5kQ292ZXJhZ2UiLCJkZWZhdWx0S2VybmluZ1RhYmxlcyIsImdldEtlcm5pbmdUYWJsZXMiLCJnZXRLZXJuaW5nVmFsdWUiLCJwb3NGb3JtYXQiLCJwYWlyU2V0cyIsInNlY29uZEdseXBoIiwidmFsdWUxIiwiY2xhc3NEZWYxIiwiY2xhc3NEZWYyIiwiY2xhc3NSZWNvcmRzIiwiZ2V0U2luZ2xlIiwic3ViIiwiYnkiLCJnZXRBbHRlcm5hdGVzIiwiZ2V0TGlnYXR1cmVzIiwiYWRkU2luZ2xlIiwiYWRkQWx0ZXJuYXRlIiwiYWRkTGlnYXR1cmUiLCJnZXRGZWF0dXJlIiwicmYiLCJzZiIsInRmIiwidWYiLCJ3ZiIsInNyUGVyaW9kIiwic3JQaGFzZSIsInNyVGhyZXNob2xkIiwidHJ1bmMiLCJORUdBVElWRV9JTkZJTklUWSIsInVudG91Y2giLCJQT1NJVElWRV9JTkZJTklUWSIsIkFmIiwiYXV0b0ZsaXAiLCJmdW5jcyIsImluaGliaXRHcmlkRml0Iiwic3RvcmUiLCJpZ25vcmVDdnQiLCJCZiIsImNoYXJUb0dseXBoIiwic3RyaW5nVG9HbHlwaHMiLCJkZWZhdWx0UmVuZGVyT3B0aW9ucyIsImxpZ2EiLCJybGlnIiwibmFtZVRvR2x5cGgiLCJrZXJuaW5nIiwiZm9yRWFjaEdseXBoIiwibGV0dGVyU3BhY2luZyIsInRyYWNraW5nIiwiZ2V0UGF0aHMiLCJnZXRBZHZhbmNlV2lkdGgiLCJ2YWxpZGF0ZSIsInRvVGFibGVzIiwidG9CdWZmZXIiLCJyZXF1ZXN0RmlsZVN5c3RlbSIsIndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtIiwiVEVNUE9SQVJZIiwicm9vdCIsImdldEZpbGUiLCJjcmVhdGVXcml0ZXIiLCJ0b1VSTCIsIndyaXRlRmlsZVN5bmMiLCJJVEFMSUMiLCJVTkRFUlNDT1JFIiwiTkVHQVRJVkUiLCJPVVRMSU5FRCIsIlNUUklLRU9VVCIsIkJPTEQiLCJVU0VSX1RZUE9fTUVUUklDUyIsIldXUyIsIk9CTElRVUUiLCJVTFRSQV9DT05ERU5TRUQiLCJFWFRSQV9DT05ERU5TRUQiLCJDT05ERU5TRUQiLCJTRU1JX0NPTkRFTlNFRCIsIlNFTUlfRVhQQU5ERUQiLCJFWFBBTkRFRCIsIkVYVFJBX0VYUEFOREVEIiwiVUxUUkFfRVhQQU5ERUQiLCJUSElOIiwiRVhUUkFfTElHSFQiLCJMSUdIVCIsIk5PUk1BTCIsIlNFTUlfQk9MRCIsIkVYVFJBX0JPTEQiLCJCTEFDSyIsImF4ZXMiLCJpbnN0YW5jZXMiLCJvZmZzZXRUb0RhdGEiLCJEZiIsInZhbHVlRm9ybWF0MSIsInZhbHVlRm9ybWF0MiIsInZhbHVlMiIsImNsYXNzMUNvdW50IiwiY2xhc3MyQ291bnQiLCJFZiIsIiRkIiwiX2QiLCJGb250IiwiR2x5cGgiLCJQYXRoIiwiQm91bmRpbmdCb3giLCJfcGFyc2UiLCJzdGF0dXNUZXh0IiwibG9hZFN5bmMiLCJyZWFkRmlsZVN5bmMiLCJmcyIsInJ1biIsImZ1biIsInRpdGxlIiwiYnJvd3NlciIsImFyZ3YiLCJ2ZXJzaW9ucyIsImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwibGlzdGVuZXJzIiwiYmluZGluZyIsImN3ZCIsImNoZGlyIiwidW1hc2siLCJpdGVyYWJsZSIsImFwcGVuZCIsImdldE93blByb3BlcnR5TmFtZXMiLCJib2R5VXNlZCIsInJlYWRBc0FycmF5QnVmZmVyIiwiX2luaXRCb2R5IiwiX2JvZHlJbml0IiwiX2JvZHlUZXh0IiwiaXNQcm90b3R5cGVPZiIsIl9ib2R5QmxvYiIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJfYm9keUZvcm1EYXRhIiwic2VhcmNoUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXJyYXlCdWZmZXIiLCJfYm9keUFycmF5QnVmZmVyIiwiaGVhZGVycyIsInRleHQiLCJyZWFkQXNUZXh0IiwiYm9keSIsImNyZWRlbnRpYWxzIiwidG9VcHBlckNhc2UiLCJyZWZlcnJlciIsImRlY29kZVVSSUNvbXBvbmVudCIsImZldGNoIiwiaXNWaWV3IiwiZGVsZXRlIiwiZW50cmllcyIsImNsb25lIiwicmVkaXJlY3QiLCJIZWFkZXJzIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VVUkwiLCJyZXNwb25zZVRleHQiLCJvbnRpbWVvdXQiLCJ3aXRoQ3JlZGVudGlhbHMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiLi9jb2xvci9jb2xvcl9jb252ZXJzaW9uIiwiLi9jb2xvci9jcmVhdGluZ19yZWFkaW5nIiwiLi9jb2xvci9wNS5Db2xvciIsIi4vY29sb3Ivc2V0dGluZyIsIi4vY29yZS9jb25zdGFudHMiLCIuL2NvcmUvZW52aXJvbm1lbnQiLCIuL2NvcmUvZXJyb3JfaGVscGVycyIsIi4vY29yZS9oZWxwZXJzIiwiLi9jb3JlL2luaXQiLCIuL2NvcmUvbGVnYWN5IiwiLi9jb3JlL21haW4iLCIuL2NvcmUvcDUuRWxlbWVudCIsIi4vY29yZS9wNS5HcmFwaGljcyIsIi4vY29yZS9wNS5SZW5kZXJlciIsIi4vY29yZS9wNS5SZW5kZXJlcjJEIiwiLi9jb3JlL3JlbmRlcmluZyIsIi4vY29yZS9zaGFwZS8yZF9wcmltaXRpdmVzIiwiLi9jb3JlL3NoYXBlL2F0dHJpYnV0ZXMiLCIuL2NvcmUvc2hhcGUvY3VydmVzIiwiLi9jb3JlL3NoYXBlL3ZlcnRleCIsIi4vY29yZS9zaGltIiwiLi9jb3JlL3N0cnVjdHVyZSIsIi4vY29yZS90cmFuc2Zvcm0iLCIuL2RhdGEvcDUuVHlwZWREaWN0IiwiLi9ldmVudHMvYWNjZWxlcmF0aW9uIiwiLi9ldmVudHMva2V5Ym9hcmQiLCIuL2V2ZW50cy9tb3VzZSIsIi4vZXZlbnRzL3RvdWNoIiwiLi9pbWFnZS9maWx0ZXJzIiwiLi9pbWFnZS9pbWFnZSIsIi4vaW1hZ2UvbG9hZGluZ19kaXNwbGF5aW5nIiwiLi9pbWFnZS9wNS5JbWFnZSIsIi4vaW1hZ2UvcGl4ZWxzIiwiLi9pby9maWxlcyIsIi4vaW8vcDUuVGFibGUiLCIuL2lvL3A1LlRhYmxlUm93IiwiLi9pby9wNS5YTUwiLCIuL21hdGgvY2FsY3VsYXRpb24iLCIuL21hdGgvbWF0aCIsIi4vbWF0aC9ub2lzZSIsIi4vbWF0aC9wNS5WZWN0b3IiLCIuL21hdGgvcmFuZG9tIiwiLi9tYXRoL3RyaWdvbm9tZXRyeSIsIi4vdHlwb2dyYXBoeS9hdHRyaWJ1dGVzIiwiLi90eXBvZ3JhcGh5L2xvYWRpbmdfZGlzcGxheWluZyIsIi4vdHlwb2dyYXBoeS9wNS5Gb250IiwiLi91dGlsaXRpZXMvYXJyYXlfZnVuY3Rpb25zIiwiLi91dGlsaXRpZXMvY29udmVyc2lvbiIsIi4vdXRpbGl0aWVzL3N0cmluZ19mdW5jdGlvbnMiLCIuL3V0aWxpdGllcy90aW1lX2RhdGUiLCIuL3dlYmdsLzNkX3ByaW1pdGl2ZXMiLCIuL3dlYmdsL2ludGVyYWN0aW9uIiwiLi93ZWJnbC9saWdodCIsIi4vd2ViZ2wvbG9hZGluZyIsIi4vd2ViZ2wvbWF0ZXJpYWwiLCIuL3dlYmdsL3A1LkNhbWVyYSIsIi4vd2ViZ2wvcDUuR2VvbWV0cnkiLCIuL3dlYmdsL3A1Lk1hdHJpeCIsIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTCIsIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5JbW1lZGlhdGUiLCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuUmV0YWluZWQiLCIuL3dlYmdsL3A1LlNoYWRlciIsIi4vd2ViZ2wvcDUuVGV4dHVyZSIsIi4vd2ViZ2wvdGV4dCIsIkNvbG9yQ29udmVyc2lvbiIsIl9oc2JhVG9IU0xBIiwiX2hzYmFUb1JHQkEiLCJfaHNsYVRvSFNCQSIsIl9oc2xhVG9SR0JBIiwiX3JnYmFUb0hTQkEiLCJfcmdiYVRvSFNMQSIsIi4uL2NvcmUvbWFpbiIsImFscGhhIiwiX3ZhbGlkYXRlUGFyYW1ldGVycyIsImNvbG9yIiwiX2dldEFscGhhIiwiYmx1ZSIsIl9nZXRCbHVlIiwiYnJpZ2h0bmVzcyIsIl9nZXRCcmlnaHRuZXNzIiwiQ29sb3IiLCJncmVlbiIsIl9nZXRHcmVlbiIsImh1ZSIsIl9nZXRIdWUiLCJsZXJwQ29sb3IiLCJfY29sb3JNb2RlIiwiX2NvbG9yTWF4ZXMiLCJSR0IiLCJsZXZlbHMiLCJIU0IiLCJoc2JhIiwiSFNMIiwiX2dldExpZ2h0bmVzcyIsImhzbGEiLCJsZXJwIiwibGlnaHRuZXNzIiwicmVkIiwiX2dldFJlZCIsInNhdHVyYXRpb24iLCJfZ2V0U2F0dXJhdGlvbiIsIi4uL2NvcmUvY29uc3RhbnRzIiwiLi4vY29yZS9lcnJvcl9oZWxwZXJzIiwiLi9wNS5Db2xvciIsIl9zdG9yZU1vZGVBbmRNYXhlcyIsIl9hcnJheSIsIl9wYXJzZUlucHV0cyIsIl9jYWxjdWxhdGVMZXZlbHMiLCJ0b1ByZWNpc2lvbiIsIm1heGVzIiwic2V0UmVkIiwic2V0R3JlZW4iLCJzZXRCbHVlIiwic2V0QWxwaGEiLCJfZ2V0TW9kZSIsIl9nZXRNYXhlcyIsImFsaWNlYmx1ZSIsImFudGlxdWV3aGl0ZSIsImFxdWEiLCJhcXVhbWFyaW5lIiwiYXp1cmUiLCJiZWlnZSIsImJpc3F1ZSIsImJsYWNrIiwiYmxhbmNoZWRhbG1vbmQiLCJibHVldmlvbGV0IiwiYnVybHl3b29kIiwiY2FkZXRibHVlIiwiY2hhcnRyZXVzZSIsImNob2NvbGF0ZSIsImNvcmFsIiwiY29ybmZsb3dlcmJsdWUiLCJjb3Juc2lsayIsImNyaW1zb24iLCJjeWFuIiwiZGFya2JsdWUiLCJkYXJrY3lhbiIsImRhcmtnb2xkZW5yb2QiLCJkYXJrZ3JheSIsImRhcmtncmVlbiIsImRhcmtncmV5IiwiZGFya2toYWtpIiwiZGFya21hZ2VudGEiLCJkYXJrb2xpdmVncmVlbiIsImRhcmtvcmFuZ2UiLCJkYXJrb3JjaGlkIiwiZGFya3JlZCIsImRhcmtzYWxtb24iLCJkYXJrc2VhZ3JlZW4iLCJkYXJrc2xhdGVibHVlIiwiZGFya3NsYXRlZ3JheSIsImRhcmtzbGF0ZWdyZXkiLCJkYXJrdHVycXVvaXNlIiwiZGFya3Zpb2xldCIsImRlZXBwaW5rIiwiZGVlcHNreWJsdWUiLCJkaW1ncmF5IiwiZGltZ3JleSIsImRvZGdlcmJsdWUiLCJmaXJlYnJpY2siLCJmbG9yYWx3aGl0ZSIsImZvcmVzdGdyZWVuIiwiZnVjaHNpYSIsImdhaW5zYm9ybyIsImdob3N0d2hpdGUiLCJnb2xkIiwiZ29sZGVucm9kIiwiZ3JheSIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBsdW0iLCJwb3dkZXJibHVlIiwicHVycGxlIiwicm9zeWJyb3duIiwicm95YWxibHVlIiwic2FkZGxlYnJvd24iLCJzYWxtb24iLCJzYW5keWJyb3duIiwic2VhZ3JlZW4iLCJzZWFzaGVsbCIsInNpZW5uYSIsInNpbHZlciIsInNreWJsdWUiLCJzbGF0ZWJsdWUiLCJzbGF0ZWdyYXkiLCJzbGF0ZWdyZXkiLCJzbm93Iiwic3ByaW5nZ3JlZW4iLCJzdGVlbGJsdWUiLCJ0YW4iLCJ0ZWFsIiwidGhpc3RsZSIsInRvbWF0byIsInR1cnF1b2lzZSIsInZpb2xldCIsIndoZWF0Iiwid2hpdGVzbW9rZSIsInllbGxvdyIsInllbGxvd2dyZWVuIiwiUmVnRXhwIiwiSEVYMyIsIkhFWDQiLCJIRVg2IiwiSEVYOCIsIlJHQl9QRVJDRU5UIiwiUkdCQSIsIlJHQkFfUEVSQ0VOVCIsIkhTTEEiLCJIU0JBIiwiLi9jb2xvcl9jb252ZXJzaW9uIiwiYmFja2dyb3VuZCIsIkltYWdlIiwiaW1hZ2UiLCJfcmVuZGVyZXIiLCJjb2xvck1vZGUiLCJfc2V0UHJvcGVydHkiLCJub0ZpbGwiLCJub1N0cm9rZSIsIlAyRCIsIldFQkdMIiwiQVJST1ciLCJDUk9TUyIsIkhBTkQiLCJNT1ZFIiwiVEVYVCIsIldBSVQiLCJIQUxGX1BJIiwiUVVBUlRFUl9QSSIsIlRBVSIsIlRXT19QSSIsIkRFR1JFRVMiLCJSQURJQU5TIiwiREVHX1RPX1JBRCIsIlJBRF9UT19ERUciLCJDT1JORVIiLCJDT1JORVJTIiwiUkFESVVTIiwiUklHSFQiLCJMRUZUIiwiQ0VOVEVSIiwiVE9QIiwiQk9UVE9NIiwiQkFTRUxJTkUiLCJQT0lOVFMiLCJMSU5FUyIsIkxJTkVfU1RSSVAiLCJMSU5FX0xPT1AiLCJUUklBTkdMRVMiLCJUUklBTkdMRV9GQU4iLCJUUklBTkdMRV9TVFJJUCIsIlFVQURTIiwiUVVBRF9TVFJJUCIsIkNMT1NFIiwiT1BFTiIsIkNIT1JEIiwiUElFIiwiUFJPSkVDVCIsIlNRVUFSRSIsIlJPVU5EIiwiQkVWRUwiLCJNSVRFUiIsIkFVVE8iLCJBTFQiLCJCQUNLU1BBQ0UiLCJDT05UUk9MIiwiREVMRVRFIiwiRE9XTl9BUlJPVyIsIkVOVEVSIiwiRVNDQVBFIiwiTEVGVF9BUlJPVyIsIk9QVElPTiIsIlJFVFVSTiIsIlJJR0hUX0FSUk9XIiwiU0hJRlQiLCJUQUIiLCJVUF9BUlJPVyIsIkJMRU5EIiwiQUREIiwiREFSS0VTVCIsIkxJR0hURVNUIiwiRElGRkVSRU5DRSIsIkVYQ0xVU0lPTiIsIk1VTFRJUExZIiwiU0NSRUVOIiwiUkVQTEFDRSIsIk9WRVJMQVkiLCJIQVJEX0xJR0hUIiwiU09GVF9MSUdIVCIsIkRPREdFIiwiQlVSTiIsIlRIUkVTSE9MRCIsIkdSQVkiLCJPUEFRVUUiLCJJTlZFUlQiLCJQT1NURVJJWkUiLCJESUxBVEUiLCJFUk9ERSIsIkJMVVIiLCJfREVGQVVMVF9URVhUX0ZJTEwiLCJfREVGQVVMVF9MRUFETVVMVCIsIl9DVFhfTUlERExFIiwiTElORUFSIiwiUVVBRFJBVElDIiwiQkVaSUVSIiwiQ1VSVkUiLCJTVFJPS0UiLCJGSUxMIiwiVEVYVFVSRSIsIklNTUVESUFURSIsIk5FQVJFU1QiLCJSRVBFQVQiLCJDTEFNUCIsIk1JUlJPUiIsIkxBTkRTQ0FQRSIsIlBPUlRSQUlUIiwiX0RFRkFVTFRfU1RST0tFIiwiX0RFRkFVTFRfRklMTCIsIkdSSUQiLCJBWEVTIiwiaW5uZXJXaWR0aCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiaW5uZXJIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJfZnJhbWVSYXRlIiwiX2xhc3RGcmFtZVRpbWUiLCJwZXJmb3JtYW5jZSIsIl90YXJnZXRGcmFtZVJhdGUiLCJwcmludCIsImZyYW1lQ291bnQiLCJmb2N1c2VkIiwiaGFzRm9jdXMiLCJjdXJzb3IiLCJfY3VyRWxlbWVudCIsImVsdCIsInN0eWxlIiwiZnJhbWVSYXRlIiwiX3J1bkZyYW1lcyIsImdldEZyYW1lUmF0ZSIsInNldEZyYW1lUmF0ZSIsIm5vQ3Vyc29yIiwiZGlzcGxheVdpZHRoIiwic2NyZWVuIiwiZGlzcGxheUhlaWdodCIsIndpbmRvd1dpZHRoIiwid2luZG93SGVpZ2h0IiwiX29ucmVzaXplIiwiX2lzR2xvYmFsIiwid2luZG93UmVzaXplZCIsInByZXZlbnREZWZhdWx0IiwiZnVsbHNjcmVlbiIsImZ1bGxzY3JlZW5FbGVtZW50Iiwid2Via2l0RnVsbHNjcmVlbkVsZW1lbnQiLCJtb3pGdWxsU2NyZWVuRWxlbWVudCIsIm1zRnVsbHNjcmVlbkVsZW1lbnQiLCJmdWxsc2NyZWVuRW5hYmxlZCIsIndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkIiwibW96RnVsbFNjcmVlbkVuYWJsZWQiLCJtc0Z1bGxzY3JlZW5FbmFibGVkIiwicmVxdWVzdEZ1bGxzY3JlZW4iLCJtb3pSZXF1ZXN0RnVsbFNjcmVlbiIsIndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuIiwibXNSZXF1ZXN0RnVsbHNjcmVlbiIsImV4aXRGdWxsc2NyZWVuIiwibW96Q2FuY2VsRnVsbFNjcmVlbiIsIndlYmtpdEV4aXRGdWxsc2NyZWVuIiwibXNFeGl0RnVsbHNjcmVlbiIsInBpeGVsRGVuc2l0eSIsIl9waXhlbERlbnNpdHkiLCJfcGl4ZWxzRGlydHkiLCJyZXNpemVDYW52YXMiLCJkaXNwbGF5RGVuc2l0eSIsImRldmljZVBpeGVsUmF0aW8iLCJnZXRVUkwiLCJnZXRVUkxQYXRoIiwicGF0aG5hbWUiLCJnZXRVUkxQYXJhbXMiLCJsYXN0SW5kZXgiLCIuL2NvbnN0YW50cyIsIi4vbWFpbiIsIl9mcmllbmRseUZpbGVMb2FkRXJyb3IiLCJzb21lIiwiX2hlbHBGb3JNaXN1c2VkQXRUb3BMZXZlbENvZGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiLi4vLi4vZG9jcy9yZWZlcmVuY2UvZGF0YS5qc29uIiwibW9kZUFkanVzdCIsIm1vY2hhIiwic2V0dXAiLCJpbnN0YW5jZSIsImV4aXQiLCJwdXNoU3R5bGUiLCJwb3BTdHlsZSIsIl9zZXR1cERvbmUiLCJfdXNlck5vZGUiLCJfZWxlbWVudHMiLCJfcmVxdWVzdEFuaW1JZCIsIl9wcmVsb2FkQ291bnQiLCJfaW5pdGlhbGl6ZUluc3RhbmNlVmFyaWFibGVzIiwiX2RlZmF1bHRDYW52YXNTaXplIiwibW91c2Vtb3ZlIiwibW91c2Vkb3duIiwibW91c2V1cCIsImRyYWdlbmQiLCJkcmFnb3ZlciIsImNsaWNrIiwiZGJsY2xpY2siLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImtleWRvd24iLCJrZXl1cCIsImtleXByZXNzIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIiwicmVzaXplIiwiYmx1ciIsIndoZWVsIiwiX2xvYWRpbmdTY3JlZW5JZCIsIl9yZWdpc3RlcmVkTWV0aG9kcyIsIkRldmljZU9yaWVudGF0aW9uRXZlbnQiLCJkZXZpY2VvcmllbnRhdGlvbiIsIkRldmljZU1vdGlvbkV2ZW50IiwiX2lzTm9kZVdlYmtpdCIsImRldmljZW1vdGlvbiIsInByZWxvYWQiLCJpbm5lckhUTUwiLCJfcHJlbG9hZE1ldGhvZHMiLCJfd3JhcFByZWxvYWQiLCJfcmVnaXN0ZXJlZFByZWxvYWRNZXRob2RzIiwiX3J1bklmUHJlbG9hZHNBcmVEb25lIiwiX3NldHVwIiwiX2RyYXciLCJwYXJlbnROb2RlIiwiX2RlY3JlbWVudFByZWxvYWQiLCJfaW5jcmVtZW50UHJlbG9hZCIsImNyZWF0ZUNhbnZhcyIsImRhdGFzZXQiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5IiwicmVkcmF3IiwiX3VwZGF0ZU1vdXNlQ29vcmRzIiwiY2xlYXJJbnRlcnZhbCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiX2NyZWF0ZUZyaWVuZGx5R2xvYmFsRnVuY3Rpb25CaW5kZXIiLCJwYXNzaXZlIiwicmVnaXN0ZXJNZXRob2QiLCJfc3R5bGVzIiwiX2JlemllckRldGFpbCIsIl9jdXJ2ZURldGFpbCIsInJnYiIsImhzYiIsImhzbCIsImRpc2FibGVGcmllbmRseUVycm9ycyIsImxvYWRKU09OIiwibG9hZEltYWdlIiwibG9hZFN0cmluZ3MiLCJsb2FkWE1MIiwibG9hZEJ5dGVzIiwibG9hZFRhYmxlIiwibG9hZEZvbnQiLCJsb2FkTW9kZWwiLCJsb2FkU2hhZGVyIiwicHJlIiwicmVnaXN0ZXJQcmVsb2FkTWV0aG9kIiwiZ2xvYmFsT2JqZWN0IiwiLi9zaGltIiwiRWxlbWVudCIsIl9wSW5zdCIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiY2xhc3MiLCJtb3VzZVByZXNzZWQiLCJfc2V0TW91c2VCdXR0b24iLCJkb3VibGVDbGlja2VkIiwibW91c2VXaGVlbCIsIm1vdXNlUmVsZWFzZWQiLCJtb3VzZUNsaWNrZWQiLCJtb3VzZU1vdmVkIiwibW91c2VPdmVyIiwiY2hhbmdlZCIsIm1vdXNlT3V0IiwidG91Y2hTdGFydGVkIiwidG91Y2hNb3ZlZCIsInRvdWNoRW5kZWQiLCJkcmFnT3ZlciIsImRyYWdMZWF2ZSIsImRyb3AiLCJGaWxlIiwidGFyZ2V0IiwiRmlsZUxpc3QiLCJzdG9wUHJvcGFnYXRpb24iLCJkYXRhVHJhbnNmZXIiLCJmaWxlcyIsIkdyYXBoaWNzIiwiY2FudmFzIiwiUmVuZGVyZXJHTCIsIlJlbmRlcmVyMkQiLCJfYXBwbHlEZWZhdWx0cyIsIm9mZnNldFBhcmVudCIsIm9mZnNldExlZnQiLCJvZmZzZXRUb3AiLCJSZW5kZXJlciIsIl9pc01haW5DYW52YXMiLCJkaXNwbGF5IiwiX3RleHRTaXplIiwiX3RleHRMZWFkaW5nIiwiX3RleHRGb250IiwiX3RleHRTdHlsZSIsIl90ZXh0QXNjZW50IiwiX3RleHREZXNjZW50IiwiX3RleHRBbGlnbiIsIl90ZXh0QmFzZWxpbmUiLCJfcmVjdE1vZGUiLCJfZWxsaXBzZU1vZGUiLCJfY3VydmVUaWdodG5lc3MiLCJfaW1hZ2VNb2RlIiwiX3RpbnQiLCJfZG9TdHJva2UiLCJfZG9GaWxsIiwiX3N0cm9rZVNldCIsIl9maWxsU2V0IiwicHJvcGVydGllcyIsInRleHRMZWFkaW5nIiwidGV4dFNpemUiLCJfYXBwbHlUZXh0UHJvcGVydGllcyIsInRleHRTdHlsZSIsInRleHRBc2NlbnQiLCJfdXBkYXRlVGV4dE1ldHJpY3MiLCJ0ZXh0RGVzY2VudCIsInRleHRBbGlnbiIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIk1BWF9WQUxVRSIsInRleHRXaWR0aCIsIl9yZW5kZXJUZXh0IiwiX2lzT3BlblR5cGUiLCJmb250U2l6ZSIsIm92ZXJmbG93IiwidmVydGljYWxBbGlnbiIsImRyYXdpbmdDb250ZXh0IiwiX2NhY2hlZEZpbGxTdHlsZSIsIl9jYWNoZWRTdHJva2VTdHlsZSIsIl9zZXRGaWxsIiwiX3NldFN0cm9rZSIsImxpbmVDYXAiLCJzY2FsZSIsInNhdmUiLCJyZXNldE1hdHJpeCIsIl9nZXRGaWxsIiwiZmlsbFJlY3QiLCJyZXN0b3JlIiwiY2xlYXJSZWN0IiwiTWVkaWFFbGVtZW50IiwibG9hZFBpeGVscyIsIl9nZXRUaW50ZWRJbWFnZUNhbnZhcyIsImRyYXdJbWFnZSIsIl90b1BpeGVscyIsImNyZWF0ZUltYWdlRGF0YSIsInB1dEltYWdlRGF0YSIsImJsZW5kTW9kZSIsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsImJsZW5kIiwiX2NvcHlIZWxwZXIiLCJnZXRJbWFnZURhdGEiLCJwaXhlbHMiLCJzZXRUcmFuc2Zvcm0iLCJpbWFnZURhdGEiLCJ1cGRhdGVQaXhlbHMiLCJfYWN1dGVBcmNUb0JlemllciIsImF5IiwiY3kiLCJlbGxpcHNlIiwiX2dldFN0cm9rZSIsInRyYW5zbGF0ZSIsInF1YWQiLCJyZWN0IiwiYXJjVG8iLCJ0cmlhbmdsZSIsImVuZFNoYXBlIiwiUE9MWUdPTiIsIl9kb0ZpbGxTdHJva2VDbG9zZSIsImlzVmVydCIsIm5vU21vb3RoIiwiaW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwic21vb3RoIiwic3Ryb2tlQ2FwIiwic3Ryb2tlSm9pbiIsImxpbmVKb2luIiwic3Ryb2tlV2VpZ2h0IiwiYmV6aWVyIiwiYmVnaW5TaGFwZSIsInZlcnRleCIsImJlemllclZlcnRleCIsImN1cnZlVmVydGV4IiwiYXBwbHlNYXRyaXgiLCJ0cmFuc2Zvcm0iLCJyb3RhdGUiLCJzaGVhclgiLCJzaGVhclkiLCJWZWN0b3IiLCJ0ZXh0QmFzZWxpbmUiLCJfcmVuZGVyUGF0aCIsInJlbmRlcmVyIiwic3Ryb2tlVGV4dCIsImZpbGxUZXh0IiwiX3RleHRXaWR0aCIsIm1lYXN1cmVUZXh0IiwiLi4vaW1hZ2UvZmlsdGVycyIsIi4vcDUuUmVuZGVyZXIiLCJjbGFzc0xpc3QiLCJfZGVmYXVsdEdyYXBoaWNzQ3JlYXRlZCIsIm5vQ2FudmFzIiwiY3JlYXRlR3JhcGhpY3MiLCIuLi93ZWJnbC9wNS5SZW5kZXJlckdMIiwiLi9wNS5HcmFwaGljcyIsIi4vcDUuUmVuZGVyZXIyRCIsIl90b1JhZGlhbnMiLCJhdGFuIiwiLi4vY29uc3RhbnRzIiwiLi4vZXJyb3JfaGVscGVycyIsIi4uL2hlbHBlcnMiLCIuLi9tYWluIiwiZWxsaXBzZU1vZGUiLCJyZWN0TW9kZSIsImJlemllckRldGFpbCIsImJlemllclBvaW50IiwiYmV6aWVyVGFuZ2VudCIsImN1cnZlRGV0YWlsIiwiY3VydmVUaWdodG5lc3MiLCJjdXJ2ZVBvaW50IiwiY3VydmVUYW5nZW50IiwiYmVnaW5Db250b3VyIiwiaXNQM0QiLCJlbmRDb250b3VyIiwicXVhZHJhdGljVmVydGV4IiwiX2NvbnRvdXJJbml0ZWQiLCJ4MyIsInkzIiwiX2NvbnRvdXJWZXJ0aWNlcyIsIndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm1velJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtc1JlcXVlc3RBbmltYXRpb25GcmFtZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibm9Mb29wIiwicHJvcHMiLCJfdXBkYXRlIiwicG9wTWF0cml4IiwicHJpbnRNYXRyaXgiLCJwdXNoTWF0cml4Iiwicm90YXRlWCIsIl9hc3NlcnQzZCIsInJvdGF0ZVkiLCJyb3RhdGVaIiwiY3JlYXRlU3RyaW5nRGljdCIsIlN0cmluZ0RpY3QiLCJjcmVhdGVOdW1iZXJEaWN0IiwiTnVtYmVyRGljdCIsIlR5cGVkRGljdCIsImhhc0tleSIsIl92YWxpZGF0ZSIsIl9hZGRPYmoiLCJzYXZlVGFibGUiLCJkb3dubG9hZEZpbGUiLCJzYXZlSlNPTiIsImRpdiIsIl92YWx1ZVRlc3QiLCJfa2V5VGVzdCIsIm1pbktleSIsIm1heEtleSIsImRldmljZU9yaWVudGF0aW9uIiwiYWNjZWxlcmF0aW9uWCIsImFjY2VsZXJhdGlvblkiLCJhY2NlbGVyYXRpb25aIiwicEFjY2VsZXJhdGlvblgiLCJwQWNjZWxlcmF0aW9uWSIsInBBY2NlbGVyYXRpb25aIiwiX3VwZGF0ZVBBY2NlbGVyYXRpb25zIiwicm90YXRpb25YIiwicm90YXRpb25ZIiwicm90YXRpb25aIiwicFJvdGF0aW9uWCIsInBSb3RhdGlvblkiLCJwUm90YXRpb25aIiwiX3VwZGF0ZVBSb3RhdGlvbnMiLCJ0dXJuQXhpcyIsInNldE1vdmVUaHJlc2hvbGQiLCJzZXRTaGFrZVRocmVzaG9sZCIsIl9vbmRldmljZW9yaWVudGF0aW9uIiwiYmV0YSIsImdhbW1hIiwiX2hhbmRsZU1vdGlvbiIsIl9vbmRldmljZW1vdGlvbiIsImFjY2VsZXJhdGlvbiIsIm9yaWVudGF0aW9uIiwiZGV2aWNlTW92ZWQiLCJkZXZpY2VUdXJuZWQiLCJkZXZpY2VTaGFrZW4iLCJpc0tleVByZXNzZWQiLCJrZXlJc1ByZXNzZWQiLCJrZXlDb2RlIiwiX29ua2V5ZG93biIsIndoaWNoIiwia2V5UHJlc3NlZCIsImNoYXJDb2RlIiwiX29ua2V5dXAiLCJrZXlSZWxlYXNlZCIsIl9vbmtleXByZXNzIiwiX2xhc3RLZXlDb2RlVHlwZWQiLCJrZXlUeXBlZCIsIl9vbmJsdXIiLCJrZXlJc0Rvd24iLCJfaGFzTW91c2VJbnRlcmFjdGVkIiwibW91c2VYIiwibW91c2VZIiwicG1vdXNlWCIsInBtb3VzZVkiLCJ3aW5Nb3VzZVgiLCJ3aW5Nb3VzZVkiLCJwd2luTW91c2VYIiwicHdpbk1vdXNlWSIsIm1vdXNlQnV0dG9uIiwibW91c2VJc1ByZXNzZWQiLCJfdXBkYXRlTmV4dE1vdXNlQ29vcmRzIiwidG91Y2hlcyIsImNsaWVudFgiLCJjaGFuZ2VkVG91Y2hlcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFdpZHRoIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50WSIsInRvcCIsIndpblgiLCJ3aW5ZIiwiaWRlbnRpZmllciIsIl9tb3VzZVdoZWVsRGVsdGFZIiwiYnV0dG9uIiwiX29ubW91c2Vtb3ZlIiwibW91c2VEcmFnZ2VkIiwiX29ubW91c2Vkb3duIiwiX29ubW91c2V1cCIsIl9vbmRyYWdlbmQiLCJfb25kcmFnb3ZlciIsIl9vbmNsaWNrIiwiX29uZGJsY2xpY2siLCJfcG1vdXNlV2hlZWxEZWx0YVkiLCJfb253aGVlbCIsImRlbHRhWSIsIl91cGRhdGVUb3VjaENvb3JkcyIsIl9vbnRvdWNoc3RhcnQiLCJfb250b3VjaG1vdmUiLCJfb250b3VjaGVuZCIsIkludDMyQXJyYXkiLCJfZ2V0QVJHQiIsIl9zZXRQaXhlbHMiLCJJbWFnZURhdGEiLCJfdG9JbWFnZURhdGEiLCJfY3JlYXRlSW1hZ2VEYXRhIiwiX3RtcENhbnZhcyIsIl90bXBDdHgiLCJvcGFxdWUiLCJpbnZlcnQiLCJwb3N0ZXJpemUiLCJkaWxhdGUiLCJlcm9kZSIsImNyZWF0ZUltYWdlIiwic2F2ZUNhbnZhcyIsIkhUTUxDYW52YXNFbGVtZW50IiwiX2NoZWNrRmlsZUV4dGVuc2lvbiIsInRvQmxvYiIsInNhdmVGcmFtZXMiLCJjb25zdHJhaW4iLCJfbWFrZUZyYW1lIiwic2V0SW50ZXJ2YWwiLCJmaWxlbmFtZSIsImV4dCIsInRvRGF0YVVSTCIsImNyb3NzT3JpZ2luIiwidmlkZW9XaWR0aCIsInZpZGVvSGVpZ2h0IiwidGludCIsIm5vVGludCIsImltYWdlTW9kZSIsIi4uL2NvcmUvaGVscGVycyIsIi4vZmlsdGVycyIsIl9tb2RpZmllZCIsInNldE1vZGlmaWVkIiwibWFzayIsImlzTW9kaWZpZWQiLCIuLi9jb2xvci9wNS5Db2xvciIsImh0dHBEbyIsImxhc3RJbmRleE9mIiwiY3VycmVudFN0YXRlIiwidG9rZW4iLCJlc2NhcGVkIiwiY29sdW1ucyIsIlRhYmxlUm93Iiwib2JqIiwiYWRkUm93IiwiYnl0ZXMiLCJodHRwR2V0IiwiaHR0cFBvc3QiLCJDb250ZW50LVR5cGUiLCJYTUwiLCJjaGlsZE5vZGVzIiwiYWRkQ2hpbGQiLCJzZXROYW1lIiwibm9kZU5hbWUiLCJfc2V0Q29udCIsInRleHRDb250ZW50IiwiX3NldEF0dHJpYnV0ZXMiLCJjaGlsZHJlbiIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsIl9wV3JpdGVycyIsIlByaW50V3JpdGVyIiwibWlsbGlzIiwid3JpdGVGaWxlIiwic2F2ZVN0cmluZ3MiLCJTb3VuZEZpbGUiLCJzYXZlU291bmQiLCJzYXZlSlNPTk9iamVjdCIsInNhdmVKU09OQXJyYXkiLCJyb3dzIiwiZ2V0U3RyaW5nIiwiX2lzU2FmYXJpIiwib25jbGljayIsImFsZXJ0IiwiZXM2LXByb21pc2UiLCJmZXRjaC1qc29ucCIsImZpbGUtc2F2ZXIiLCJ3aGF0d2ctZmV0Y2giLCJyZW1vdmVSb3ciLCJnZXRSb3ciLCJnZXRSb3dzIiwiZmluZFJvdyIsImZpbmRSb3dzIiwibWF0Y2hSb3ciLCJtYXRjaFJvd3MiLCJnZXRDb2x1bW4iLCJjbGVhclJvd3MiLCJhZGRDb2x1bW4iLCJnZXRDb2x1bW5Db3VudCIsImdldFJvd0NvdW50IiwicmVtb3ZlVG9rZW5zIiwicmVtb3ZlQ29sdW1uIiwic2V0TnVtIiwic2V0U3RyaW5nIiwiZ2V0TnVtIiwiZ2V0T2JqZWN0IiwiZ2V0QXJyYXkiLCJhdHRyaWJ1dGVzIiwiZ2V0UGFyZW50IiwiZ2V0TmFtZSIsImhhc0NoaWxkcmVuIiwibGlzdENoaWxkcmVuIiwiZ2V0Q2hpbGRyZW4iLCJnZXRDaGlsZCIsImdldEF0dHJpYnV0ZUNvdW50IiwibGlzdEF0dHJpYnV0ZXMiLCJoYXNBdHRyaWJ1dGUiLCJnZXRDb250ZW50Iiwic2V0Q29udGVudCIsIm5vZGVWYWx1ZSIsImh5cG90IiwibWFnIiwibm9ybSIsInNxIiwiY3JlYXRlVmVjdG9yIiwibm9pc2VEZXRhaWwiLCJub2lzZVNlZWQiLCJzZXRTZWVkIiwiZ2V0U2VlZCIsInA1IiwibWFnU3EiLCJjcm9zcyIsIm5vcm1hbGl6ZSIsImxpbWl0Iiwic2V0TWFnIiwiaGVhZGluZyIsImF0YW4yIiwiX2Zyb21SYWRpYW5zIiwiYW5nbGVCZXR3ZWVuIiwiYWNvcyIsImZyb21BbmdsZSIsImZyb21BbmdsZXMiLCJyYW5kb20yRCIsInJhbmRvbTNEIiwicmFuZG9tU2VlZCIsInJhbmRvbUdhdXNzaWFuIiwiX2FuZ2xlTW9kZSIsImFzaW4iLCJkZWdyZWVzIiwicmFkaWFucyIsImFuZ2xlTW9kZSIsIl90b0RlZ3JlZXMiLCJ0ZXh0Rm9udCIsIm9wZW50eXBlLmpzIiwic2FtcGxlRmFjdG9yIiwic2ltcGxpZnlUaHJlc2hvbGQiLCJ0bXBQb2ludDEiLCJ0bXBQb2ludDIiLCJxeCIsInF5IiwiY2FjaGUiLCJ0ZXh0Qm91bmRzIiwiYWR2YW5jZSIsIl9oYW5kbGVBbGlnbm1lbnQiLCJ0ZXh0VG9Qb2ludHMiLCJfZ2V0R2x5cGhzIiwiX2dldFBhdGgiLCJfZ2V0UGF0aERhdGEiLCJkZWNpbWFscyIsIl9nZXRTVkciLCJhcnJheUNvcHkiLCJzaG9ydGVuIiwic2h1ZmZsZSIsInN1YnNldCIsImZsb2F0IiwiaW50Iiwic3RyIiwiYm9vbGVhbiIsImNoYXIiLCJ1bmNoYXIiLCJoZXgiLCJ1bmhleCIsIm1hdGNoQWxsIiwibmZjIiwibmZwIiwibmZzIiwic3BsaXRUb2tlbnMiLCJkYXkiLCJnZXREYXRlIiwiaG91ciIsImdldEhvdXJzIiwibWludXRlIiwiZ2V0TWludXRlcyIsIm1vbnRoIiwiZ2V0TW9udGgiLCJzZWNvbmQiLCJnZXRTZWNvbmRzIiwieWVhciIsImdldEZ1bGxZZWFyIiwicGxhbmUiLCJnZW9tZXRyeUluSGFzaCIsIkdlb21ldHJ5IiwiZGV0YWlsWSIsImRldGFpbFgiLCJ2ZXJ0aWNlcyIsInV2cyIsImNvbXB1dGVGYWNlcyIsImNvbXB1dGVOb3JtYWxzIiwiX21ha2VUcmlhbmdsZUVkZ2VzIiwiX2VkZ2VzVG9WZXJ0aWNlcyIsImRyYXdCdWZmZXJzU2NhbGVkIiwiYm94IiwicGVyUGl4ZWxMaWdodGluZyIsInN0cm9rZUluZGljZXMiLCJmYWNlcyIsInNwaGVyZSIsImVsbGlwc29pZCIsInZlcnRleE5vcm1hbHMiLCJjeWxpbmRlciIsImNvbmUiLCJ0b3J1cyIsIl91c2VQb2ludFNoYWRlciIsImN1clBvaW50U2hhZGVyIiwiYmluZFNoYWRlciIsIl9kcmF3UG9pbnRzIiwiX3BvaW50VmVydGV4QnVmZmVyIiwidW5iaW5kU2hhZGVyIiwidU1WTWF0cml4IiwiTWF0cml4IiwiZHJhd0J1ZmZlcnMiLCJpbW1lZGlhdGVNb2RlIiwiX2JlemllclZlcnRleCIsIl9sb29rVXBUYWJsZUJlemllciIsIl9sdXRCZXppZXJEZXRhaWwiLCJfYmV6aWVyQ29lZmZpY2llbnRzIiwiaXNCZXppZXIiLCJfcXVhZHJhdGljVmVydGV4IiwiX2xvb2tVcFRhYmxlUXVhZHJhdGljIiwiX2x1dFF1YWRyYXRpY0RldGFpbCIsIl9xdWFkcmF0aWNDb2VmZmljaWVudHMiLCJpc1F1YWRyYXRpYyIsIl9jdXJ2ZVZlcnRleCIsImlzQ3VydmUiLCJfYmV6aWVyVG9DYXRtdWxsIiwiLi9wNS5HZW9tZXRyeSIsIm9yYml0Q29udHJvbCIsIl9jdXJDYW1lcmEiLCJjb250ZXh0TWVudURpc2FibGVkIiwib25jb250ZXh0bWVudSIsIndoZWVsRGVmYXVsdERpc2FibGVkIiwib253aGVlbCIsIl9vcmJpdCIsIl9nZXRMb2NhbEF4ZXMiLCJleWVYIiwiZXllWSIsImV5ZVoiLCJkZWJ1Z01vZGUiLCJfZ3JpZCIsIl9heGVzSWNvbiIsIm5vRGVidWdNb2RlIiwiY3VyU3Ryb2tlQ29sb3IiLCJjYW1lcmFNYXRyaXgiLCJtYXQ0IiwiYW1iaWVudExpZ2h0IiwiX3VzZUxpZ2h0U2hhZGVyIiwic2V0VW5pZm9ybSIsImN1ckZpbGxDb2xvciIsImFtYmllbnRMaWdodENvbG9ycyIsImRpcmVjdGlvbmFsTGlnaHQiLCJkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucyIsImRpcmVjdGlvbmFsTGlnaHRDb2xvcnMiLCJwb2ludExpZ2h0IiwicG9pbnRMaWdodFBvc2l0aW9ucyIsInBvaW50TGlnaHRDb2xvcnMiLCJnaWQiLCJ2dCIsInZuIiwibW9kZWwiLCJTaGFkZXIiLCJfZnJhZ1NyYyIsIl92ZXJ0U3JjIiwiY3JlYXRlU2hhZGVyIiwic2hhZGVyIiwiaXNTdHJva2VTaGFkZXIiLCJzZXRTdHJva2VTaGFkZXIiLCJzZXRGaWxsU2hhZGVyIiwibm9ybWFsTWF0ZXJpYWwiLCJkcmF3TW9kZSIsIl9nZXROb3JtYWxTaGFkZXIiLCJ0ZXh0dXJlIiwiYW1iaWVudE1hdGVyaWFsIiwic3BlY3VsYXJNYXRlcmlhbCIsIl9hcHBseUNvbG9yQmxlbmQiLCJHTCIsImRlcHRoTWFzayIsImVuYWJsZSIsImJsZW5kRXF1YXRpb24iLCJGVU5DX0FERCIsImJsZW5kRnVuYyIsIlNSQ19BTFBIQSIsIk9ORV9NSU5VU19TUkNfQUxQSEEiLCJkaXNhYmxlIiwiLi9wNS5UZXh0dXJlIiwiY2FtZXJhIiwicGVyc3BlY3RpdmUiLCJvcnRobyIsImNyZWF0ZUNhbWVyYSIsIkNhbWVyYSIsIl9jb21wdXRlQ2FtZXJhRGVmYXVsdFNldHRpbmdzIiwiX3NldERlZmF1bHRDYW1lcmEiLCJjYW1lcmFUeXBlIiwicHJvak1hdHJpeCIsImRlZmF1bHRDYW1lcmFGT1YiLCJjYW1lcmFGT1YiLCJkZWZhdWx0QXNwZWN0UmF0aW8iLCJkZWZhdWx0Q2FtZXJhTmVhciIsImRlZmF1bHRDYW1lcmFGYXIiLCJhc3BlY3RSYXRpbyIsImNhbWVyYU5lYXIiLCJjYW1lcmFGYXIiLCJpZGVudGl0eSIsIl9pc0FjdGl2ZSIsInVQTWF0cml4IiwiX3JvdGF0ZVZpZXciLCJjZW50ZXJYIiwiY2VudGVyWSIsImNlbnRlcloiLCJ0aWx0IiwibG9va0F0IiwiZGVmYXVsdEV5ZVgiLCJkZWZhdWx0RXllWSIsImRlZmF1bHRFeWVaIiwibW92ZSIsImRlZmF1bHRDZW50ZXJYIiwiZGVmYXVsdENlbnRlclkiLCJkZWZhdWx0Q2VudGVyWiIsIl9yZXNpemUiLCJzZXRDYW1lcmEiLCJsaW5lVmVydGljZXMiLCJsaW5lTm9ybWFscyIsImVkZ2VzIiwiX2dldEZhY2VOb3JtYWwiLCJhdmVyYWdlTm9ybWFscyIsImF2ZXJhZ2VQb2xlTm9ybWFscyIsIm1hdDMiLCJpbnZlcnQzeDMiLCJ0cmFuc3Bvc2UzeDMiLCJpbnZlcnNlVHJhbnNwb3NlIiwiZGV0ZXJtaW5hbnQiLCJzaGFwZU1vZGUiLCJ2ZXJ0ZXhDb2xvcnMiLCJ1dkNvb3JkcyIsInZlcnRleEJ1ZmZlciIsImNvbG9yQnVmZmVyIiwidXZCdWZmZXIiLCJsaW5lVmVydGV4QnVmZmVyIiwibGluZU5vcm1hbEJ1ZmZlciIsInBvaW50VmVydGV4QnVmZmVyIiwiaXNJbW1lZGlhdGVEcmF3aW5nIiwiX3VzZUltbWVkaWF0ZU1vZGVTaGFkZXIiLCJfZHJhd1N0cm9rZUltbWVkaWF0ZU1vZGUiLCJfdlRvTkFycmF5IiwiX3RyaWFuZ3VsYXRlIiwiX2RyYXdGaWxsSW1tZWRpYXRlTW9kZSIsImN1ckZpbGxTaGFkZXIiLCJhUG9zaXRpb24iLCJfYmluZEJ1ZmZlciIsIkFSUkFZX0JVRkZFUiIsIkRZTkFNSUNfRFJBVyIsImVuYWJsZUF0dHJpYiIsIkZMT0FUIiwiYVZlcnRleENvbG9yIiwiYVRleENvb3JkIiwiZHJhd0FycmF5cyIsImN1clN0cm9rZVNoYWRlciIsIl9mbGF0dGVuIiwiU1RBVElDX0RSQVciLCJhRGlyZWN0aW9uIiwiX2luaXRCdWZmZXJEZWZhdWx0cyIsIl9mcmVlQnVmZmVycyIsImdIYXNoIiwiZGVsZXRlQnVmZmVyIiwibm9ybWFsQnVmZmVyIiwiaW5kZXhCdWZmZXIiLCJudW1iZXJPZkl0ZW1zIiwibGluZVZlcnRleENvdW50IiwiX3VzZUNvbG9yU2hhZGVyIiwiRUxFTUVOVF9BUlJBWV9CVUZGRVIiLCJhTm9ybWFsIiwiX2RyYXdBcnJheXMiLCJfZHJhd0VsZW1lbnRzIiwiZHJhd0VsZW1lbnRzIiwiVU5TSUdORURfU0hPUlQiLCJQb2ludHMiLCJpbW1lZGlhdGVWZXJ0IiwidmVydGV4Q29sb3JWZXJ0IiwidmVydGV4Q29sb3JGcmFnIiwibm9ybWFsVmVydCIsIm5vcm1hbEZyYWciLCJiYXNpY0ZyYWciLCJsaWdodFZlcnQiLCJsaWdodFRleHR1cmVGcmFnIiwicGhvbmdWZXJ0IiwicGhvbmdGcmFnIiwiZm9udFZlcnQiLCJmb250RnJhZyIsImxpbmVWZXJ0IiwibGluZUZyYWciLCJwb2ludFZlcnQiLCJwb2ludEZyYWciLCJzdGVuY2lsIiwiYW50aWFsaWFzIiwicHJlbXVsdGlwbGllZEFscGhhIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwiX2luaXRDb250ZXh0IiwidU5NYXRyaXgiLCJfZGVmYXVsdExpZ2h0U2hhZGVyIiwiX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyIiwiX2RlZmF1bHROb3JtYWxTaGFkZXIiLCJfZGVmYXVsdENvbG9yU2hhZGVyIiwiX2RlZmF1bHRQb2ludFNoYWRlciIsIl9nZXRMaW5lU2hhZGVyIiwicG9pbnRTaXplIiwidGV4dHVyZXMiLCJfdGVzc3kiLCJfaW5pdFRlc3N5IiwiZm9udEluZm9zIiwiREVQVEhfVEVTVCIsImRlcHRoRnVuYyIsIkxFUVVBTCIsInZpZXdwb3J0IiwiZHJhd2luZ0J1ZmZlcldpZHRoIiwiZHJhd2luZ0J1ZmZlckhlaWdodCIsIl92aWV3cG9ydCIsImdldFBhcmFtZXRlciIsIlZJRVdQT1JUIiwiX3Jlc2V0Q29udGV4dCIsInNldEF0dHJpYnV0ZXMiLCJjbGVhckNvbG9yIiwiQ09MT1JfQlVGRkVSX0JJVCIsIkRFUFRIX0JVRkZFUl9CSVQiLCJfZ2V0SW1tZWRpYXRlTW9kZVNoYWRlciIsIl9nZXRDb2xvclNoYWRlciIsImN1clN0cm9rZVdlaWdodCIsInJlYWRQaXhlbHMiLCJVTlNJR05FRF9CWVRFIiwic2V0UG9pbnRTaGFkZXIiLCJpc0xpZ2h0U2hhZGVyIiwiX2dldExpZ2h0U2hhZGVyIiwiX2dldFBvaW50U2hhZGVyIiwiX2RlZmF1bHRMaW5lU2hhZGVyIiwiX2dldEZvbnRTaGFkZXIiLCJfZGVmYXVsdEZvbnRTaGFkZXIiLCJnZXRFeHRlbnNpb24iLCJfZ2V0RW1wdHlUZXh0dXJlIiwiX2VtcHR5VGV4dHVyZSIsIlRleHR1cmUiLCJnZXRUZXh0dXJlIiwiYmluZEJ1ZmZlciIsImJ1ZmZlckRhdGEiLCIuLi9jb3JlL3A1LlJlbmRlcmVyIiwiLi9wNS5DYW1lcmEiLCIuL3A1Lk1hdHJpeCIsIi4vcDUuU2hhZGVyIiwiX3ZlcnRTaGFkZXIiLCJfZnJhZ1NoYWRlciIsIl9nbFByb2dyYW0iLCJfbG9hZGVkQXR0cmlidXRlcyIsIl9sb2FkZWRVbmlmb3JtcyIsInVuaWZvcm1zIiwiX2JvdW5kIiwic2FtcGxlcnMiLCJWRVJURVhfU0hBREVSIiwic2hhZGVyU291cmNlIiwiY29tcGlsZVNoYWRlciIsImdldFNoYWRlclBhcmFtZXRlciIsIkNPTVBJTEVfU1RBVFVTIiwiZ2V0U2hhZGVySW5mb0xvZyIsIkZSQUdNRU5UX1NIQURFUiIsImNyZWF0ZVByb2dyYW0iLCJhdHRhY2hTaGFkZXIiLCJsaW5rUHJvZ3JhbSIsImdldFByb2dyYW1QYXJhbWV0ZXIiLCJMSU5LX1NUQVRVUyIsImdldFByb2dyYW1JbmZvTG9nIiwiX2xvYWRBdHRyaWJ1dGVzIiwiX2xvYWRVbmlmb3JtcyIsIkFDVElWRV9BVFRSSUJVVEVTIiwiZ2V0QWN0aXZlQXR0cmliIiwiZ2V0QXR0cmliTG9jYXRpb24iLCJBQ1RJVkVfVU5JRk9STVMiLCJnZXRBY3RpdmVVbmlmb3JtIiwiZ2V0VW5pZm9ybUxvY2F0aW9uIiwiU0FNUExFUl8yRCIsInNhbXBsZXJJbmRleCIsImNvbXBpbGUiLCJ1c2VQcm9ncmFtIiwiYmluZFRleHR1cmVzIiwiX3NldE1hdHJpeFVuaWZvcm1zIiwiX3NldFZpZXdwb3J0VW5pZm9ybSIsInVuYmluZFRleHR1cmVzIiwiYWN0aXZlVGV4dHVyZSIsIlRFWFRVUkUwIiwiYmluZFRleHR1cmUiLCJ1cGRhdGUiLCJ1bmlmb3JtMWkiLCJ1cGRhdGVUZXh0dXJlcyIsIkJPT0wiLCJJTlQiLCJ1bmlmb3JtMWl2IiwidW5pZm9ybTFmdiIsInVuaWZvcm0xZiIsIkZMT0FUX01BVDMiLCJ1bmlmb3JtTWF0cml4M2Z2IiwiRkxPQVRfTUFUNCIsInVuaWZvcm1NYXRyaXg0ZnYiLCJGTE9BVF9WRUMyIiwidW5pZm9ybTJmdiIsInVuaWZvcm0yZiIsIkZMT0FUX1ZFQzMiLCJ1bmlmb3JtM2Z2IiwidW5pZm9ybTNmIiwiRkxPQVRfVkVDNCIsInVuaWZvcm00ZnYiLCJ1bmlmb3JtNGYiLCJJTlRfVkVDMiIsInVuaWZvcm0yaXYiLCJ1bmlmb3JtMmkiLCJJTlRfVkVDMyIsInVuaWZvcm0zaXYiLCJ1bmlmb3JtM2kiLCJJTlRfVkVDNCIsInVuaWZvcm00aXYiLCJ1bmlmb3JtNGkiLCJ1VXNlTGlnaHRpbmciLCJ1QW1iaWVudExpZ2h0Q291bnQiLCJ1RGlyZWN0aW9uYWxMaWdodENvdW50IiwidVBvaW50TGlnaHRDb3VudCIsInVBbWJpZW50Q29sb3IiLCJ1RGlyZWN0aW9uYWxDb2xvciIsInVQb2ludExpZ2h0TG9jYXRpb24iLCJ1UG9pbnRMaWdodENvbG9yIiwidUxpZ2h0aW5nRGlyZWN0aW9uIiwidVNwZWN1bGFyIiwiaXNUZXh0dXJlU2hhZGVyIiwiaXNDb2xvclNoYWRlciIsInVNYXRlcmlhbENvbG9yIiwiaXNUZXhMaWdodFNoYWRlciIsInVTdHJva2VXZWlnaHQiLCJlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSIsInZlcnRleEF0dHJpYlBvaW50ZXIiLCJnbFRleCIsImdsVGFyZ2V0IiwiVEVYVFVSRV8yRCIsImdsRm9ybWF0IiwibWlwbWFwcyIsImdsTWluRmlsdGVyIiwiZ2xNYWdGaWx0ZXIiLCJnbFdyYXBTIiwiQ0xBTVBfVE9fRURHRSIsImdsV3JhcFQiLCJpc1NyY01lZGlhRWxlbWVudCIsIl92aWRlb1ByZXZVcGRhdGVUaW1lIiwiaXNTcmNIVE1MRWxlbWVudCIsImlzU3JjUDVJbWFnZSIsImlzU3JjUDVHcmFwaGljcyIsImlzSW1hZ2VEYXRhIiwiX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZSIsImNyZWF0ZVRleHR1cmUiLCJ0ZXhQYXJhbWV0ZXJpIiwiVEVYVFVSRV9NQUdfRklMVEVSIiwiVEVYVFVSRV9NSU5fRklMVEVSIiwiVEVYVFVSRV9XUkFQX1MiLCJURVhUVVJFX1dSQVBfVCIsImxvYWRlZG1ldGFkYXRhIiwidGV4SW1hZ2UyRCIsIl9kaXJ0eSIsInVuYmluZFRleHR1cmUiLCJzZXRJbnRlcnBvbGF0aW9uIiwic2V0V3JhcE1vZGUiLCJNSVJST1JFRF9SRVBFQVQiLCJpbmZvcyIsImZpbmRJbWFnZSIsInN0cm9rZUltYWdlSW5mb3MiLCJjb2xEaW1JbWFnZUluZm9zIiwicm93RGltSW1hZ2VJbmZvcyIsImNvbENlbGxJbWFnZUluZm9zIiwicm93Q2VsbEltYWdlSW5mb3MiLCJnbHlwaEluZm9zIiwiZ2V0R2x5cGhJbmZvIiwicDAiLCJjMCIsImMxIiwicDEiLCJ0b1F1YWRyYXRpYyIsInF1YWRFcnJvciIsInNwbGl0SW5mbGVjdGlvbnMiLCJjZWxsSW1hZ2VJbmZvIiwiZGltT2Zmc2V0IiwiZGltSW1hZ2VJbmZvIiwiZ2x5cGgiLCJ1R2x5cGhSZWN0Iiwic3Ryb2tlSW1hZ2VJbmZvIiwic3Ryb2tlcyIsImNvbEluZm8iLCJyb3dJbmZvIiwidUdyaWRPZmZzZXQiLCJfZm9udEluZm8iLCJfdGV4dEdlb20iLCIuL3A1LlJlbmRlcmVyR0wiLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18iLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fIiwiVGFwTGlzdGVuZXIiLCJlbGVtZW50IiwiX2RyYWdnZWQiLCJfZWxlbWVudCIsIl9iaW5kZWRNb3ZlIiwiX21vdmVkIiwiX2JpbmRlZEVuZCIsIl9lbmRlZCIsImlzU3RhcnRlZCIsInN0YXJ0Q29udGV4dCIsImVsZW1lbnRzIiwiY2hlY2tMb29wIiwib25TdGFydGVkIiwidGFwTGlzdGVuZXJzIiwiYmluZFRhcExpc3RlbmVyIiwiTm9kZUxpc3QiLCJxdWVyeVNlbGVjdG9yQWxsIiwianF1ZXJ5IiwidGFwIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsInA1X2xpYl9wNV9taW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyIsInA1X2xpYl9wNV9taW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0IiwidG9uZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fIiwidG9uZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQiLCJzdGFydGF1ZGlvY29udGV4dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fIiwic3RhcnRhdWRpb2NvbnRleHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0Iiwic2tldGNoIiwicHJpbWVOdW1iZXJzIiwiY2hvcnVzIiwiUHJpbWUiLCJbb2JqZWN0IE9iamVjdF0iLCJudW0iLCJjb3VudGVyIiwibGlmZXRpbWUiLCJmbSIsInByaW1lcyIsImV2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LEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsVUFBQUMsR0FBQSxVQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLFFBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLFVBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsYUFBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsTUFBdytCQyxJQUFLN0csRUFBQSxFQUFBaDJCLEVBQUEsRUFBQUssRUFBQSxFQUFBQyxFQUFBLEVBQUFrRyxFQUFBLEVBQUErQyxFQUFBLEVBQUFhLEVBQUEsRUFBQTJCLEVBQUEsRUFBQUcsRUFBQSxFQUFBQyxFQUFBLEVBQUEwRCxHQUFBLEVBQUFvbUIsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUM3cCtCQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxHQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxHQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsR0FBa2lCNXZDLElBQUs4dkMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxNQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsTUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFVBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsVUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxTQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsTUFBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxVQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLFNBQUFDLEtBQUEsTUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxNQUFBQyxLQUFBLFNBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLGFBQUFDLEtBQUEsS0FBQUMsS0FBQSxhQUFBQyxLQUFBLFVBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsVUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUF5ekU1eUIsR0FBQSxTQUFBRSxJQUFpQmdmLEVBQUEsWUFBQWgyQixFQUFBLGlCQUFBSyxFQUFBLG9CQUFBQyxFQUFBLGVB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LE1BQUE4aUIsRUFBQW03QixLQUE0QyxPQUFBMWUsRUFBQXl1QixPQUFBL3BELE1BQXNCM0UsS0FBQSxVQUFBZ1EsS0FBQSxVQUFBdFAsTUFBQWhCLElBQXNDdWdDLElBR3R1WjhtRCxLQUFNQyxNQUFBLEVBQUE3N0UsSUFBQSxNQUFrQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxNQUFvQjY3RSxNQUFBLElBQUE3N0UsSUFBQSxPQUFxQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxRQUF1QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLFFBQUE3N0UsSUFBQSxVQUE0QjY3RSxNQUFBLE1BQUE3N0UsSUFBQSxRQUF3QjY3RSxNQUFBLE9BQUE3N0UsSUFBQSxTQUEwQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3RSxNQUFBLEtBQUE3N0UsSUFBQSxPQUFzQjY3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QyxtQkFBQWdiLEVBQUF1MEUsWUFBQXZ2RixHQUFvQyxrQkFBQWlDLE1BQUEsc0NBRXk2UCxrT0FBQWk3RCxHQUFBaDhELFVBQUEsS0FBQWc4RCxHQUFBaDhELFVBQUEsS0FBQWc4RCxHQUFBaDhELFVBQUEsS0FBQWc4RCxHQUFBaDhELFVBQUEsS0FBQWc4RCxHQUFBaDhELFVBQUEsS0FBQWc4RCxHQUFBaDhELFVBQUEsS0FBQWc4RCxHQUFBaDhELFVBQUEsS0FBQWc4RCxHQUFBaDhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWk4RCxHQUFBajhELFVBQUEsS0FBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsYUFBQWs4RCxHQUFBbDhELFVBQUEsY0FBc3ZHLElBQUFzdUYsR0FBQTFwRixNQUFBK2IsTUFBQSxTQUFBbEgsR0FBK0IsT0FBQUEsRUFBQXRZLE1BQUEs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U0FBQSxVQUFBQyxjQUFBLFVBQUFDLFNBQUEsVUFBQUMsVUFBQSxVQUFBQyxTQUFBLFVBQUFDLFVBQUEsVUFBQUMsWUFBQSxVQUFBQyxlQUFBLFVBQUFDLFdBQUEsVUFBQUMsV0FBQSxVQUFBQyxRQUFBLFVBQUFDLFdBQUEsVUFBQUMsYUFBQSxVQUFBQyxjQUFBLFVBQUFDLGNBQUEsVUFBQUMsY0FBQSxVQUFBQyxjQUFBLFVBQUFDLFdBQUEsVUFBQUMsU0FBQSxVQUFBQyxZQUFBLFVBQUFDLFFBQUEsVUFBQUMsUUFBQSxVQUFBQyxXQUFBLFVBQUFDLFVBQUEsVUFBQUMsWUFBQSxVQUFBQyxZQUFBLFVBQUFDLFFBQUEsVUFBQUMsVUFBQSxVQUFBQyxXQUFBLFVBQUFDLEtBQUEsVUFBQUMsVUFBQSxVQUFBQyxLQUFBLFVBQUF0RixNQUFBLFVBQUF1RixZQUFBLFVBQUFDLEtBQUEsVUFBQUMsU0FBQSxVQUFBQyxRQUFBLFVBQUFDLFVBQUEsVUFBQUMsT0FBQSxVQUFBQyxNQUFBLFVBQUFDLE1BQUEsVUFBQUMsU0FBQSxVQUFBQyxjQUFBLFVBQUFDLFVBQUEsVUFBQUMsYUFBQSxVQUFBQyxVQUFBLFVBQUFDLFdBQUEsVUFBQUMsVUFBQSxVQUFBQyxxQkFBQSxVQUFBQyxVQUFBLFVBQUFDLFdBQUEsVUFBQUMsVUFBQSxVQUFBQyxVQUFBLFVBQUFDLFlBQUEsVUFBQUMsY0FBQSxVQUFBQyxhQUFBLFVBQUFDLGVBQUEsVUFBQUMsZUFBQSxVQUFBQyxlQUFBLFVBQUFDLFlBQUEsVUFBQUMsS0FBQSxVQUFBQyxVQUFBLFVBQUFDLE1BQUEsVUFBQUMsUUFBQSxVQUFBQyxPQUFBLFVBQUFDLGlCQUFBLFVBQUFDLFdBQUEsVUFBQUMsYUFBQSxVQUFBQyxhQUFBLFVBQUFDLGVBQUEsVUFBQUMsZ0JBQUEsVUFBQUMsa0JBQUEsVUFBQUMsZ0JBQUEsVUFBQUMsZ0JBQUEsVUFBQUMsYUFBQSxVQUFBQyxVQUFBLFVBQUFDLFVBQUEsVUFBQUMsU0FBQSxVQUFBQyxZQUFBLFVBQUFDLEtBQUEsVUFBQUMsUUFBQSxVQUFBQyxN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ekgsRUFBQSxNQUNBcXlJLEVBQUFyeUksR0FBQTZrRSxTQUlBL2lFLEVBQUF1bEgsV0FBQSxNQUNBLEtBQUF2bEgsRUFBQVAsS0FDQU8sRUFBQXk3RyxLQUFBbDJELEtBQUF2L0MsTUFBQSxVQUlBaEcsRUFBQTgyRyxhQUFBLE1BQ1ErNEIsSUFBa0JGLEVBQUF4MkgsRUFBSWxULFNBQUF3SCxLQUFBLGlCQUdmOGhJLEVBQUEsVUFDZixJQUFJRSxFQUFBdDJILEVBQUUyMkgsa0JDcEhOLElBQUFoM0gsRUFHQUEsRUFBQSxXQUNBLE9BQUF0WSxLQURBLEdBSUEsSUFFQXNZLEtBQUErckMsU0FBQSxjQUFBQSxLQUFBLEVBQUEyckYsTUFBQSxRQUNDLE1BQUFybEksR0FFRCxpQkFBQXZFLFNBQUFrUyxFQUFBbFMsUUFPQTNJLEVBQUFELFFBQUE4YSIsImZpbGUiOiJtYWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDMpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3Rvcnkpe1xuXG5cdC8vVU1EXG5cdGlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdFx0ZGVmaW5lKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGZhY3RvcnkoKTtcblx0XHR9KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gXHR9IGVsc2Uge1xuXHRcdHJvb3QuVG9uZSA9IGZhY3RvcnkoKTtcblx0fVxuXG59KHRoaXMsIGZ1bmN0aW9uKCl7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgVG9uZTtcblx0Ly9jb25zdHJ1Y3RzIHRoZSBtYWluIFRvbmUgb2JqZWN0XG5cdGZ1bmN0aW9uIE1haW4oZnVuYyl7XG5cdFx0VG9uZSA9IGZ1bmMoKTtcblx0fVxuXHQvL2ludm9rZXMgZWFjaCBvZiB0aGUgbW9kdWxlcyB3aXRoIHRoZSBtYWluIFRvbmUgb2JqZWN0IGFzIHRoZSBhcmd1bWVudFxuXHRmdW5jdGlvbiBNb2R1bGUoZnVuYyl7XG5cdFx0ZnVuYyhUb25lKTtcblx0fVx0LyoqXG5cdCAqICBUb25lLmpzXG5cdCAqICBAYXV0aG9yIFlvdGFtIE1hbm5cblx0ICogIEBsaWNlbnNlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQgTUlUIExpY2Vuc2Vcblx0ICogIEBjb3B5cmlnaHQgMjAxNC0yMDE4IFlvdGFtIE1hbm5cblx0ICovXG5cdE1haW4oZnVuY3Rpb24gKCkge1xuXHQgICAgXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUT05FXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIG90aGVyIGNsYXNzZXMuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgdmFyIFRvbmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRvbmUpKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY29uc3RydWN0b3IgbmVlZHMgdG8gYmUgY2FsbGVkIHdpdGggdGhlIFxcJ25ld1xcJyBrZXl3b3JkJyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQHJldHVybnMge1N0cmluZ30gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgYXMgYSBzdHJpbmdcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGNsYXNzTmFtZSBpbiBUb25lKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0xldHRlciA9IGNsYXNzTmFtZVswXS5tYXRjaCgvXltBLVpdJC8pO1xuXHQgICAgICAgICAgICB2YXIgc2FtZUNvbnN0cnVjdG9yID0gVG9uZVtjbGFzc05hbWVdID09PSB0aGlzLmNvbnN0cnVjdG9yO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc0Z1bmN0aW9uKFRvbmVbY2xhc3NOYW1lXSkgJiYgaXNMZXR0ZXIgJiYgc2FtZUNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAnVG9uZSc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBkaXNjb25uZWN0IGFuZCBkaXNwb3NlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEdFVC9TRVRcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgcGFyYW1ldGVycyBhdCBvbmNlLiBFaXRoZXIgcGFzcyBpbiBhblxuXHRcdCAqICBvYmplY3QgbWFwcGluZyBwYXJhbWV0ZXJzIHRvIHZhbHVlcywgb3IgdG8gc2V0IGFcblx0XHQgKiAgc2luZ2xlIHBhcmFtZXRlciwgYnkgcGFzc2luZyBpbiBhIHN0cmluZyBhbmQgdmFsdWUuXG5cdFx0ICogIFRoZSBsYXN0IGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIHJhbXAgdGltZSB3aGljaFxuXHRcdCAqICB3aWxsIHJhbXAgYW55IHNpZ25hbCB2YWx1ZXMgdG8gdGhlaXIgZGVzdGluYXRpb24gdmFsdWVcblx0XHQgKiAgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqICBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHBhcmFtc1xuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJhbXBUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfSB0aGlzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHZhbHVlcyB1c2luZyBhbiBvYmplY3Rcblx0XHQgKiBmaWx0ZXIuc2V0KHtcblx0XHQgKiBcdFwiZnJlcXVlbmN5XCIgOiAzMDAsXG5cdFx0ICogXHRcInR5cGVcIiA6IGhpZ2hwYXNzXG5cdFx0ICogfSk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogZmlsdGVyLnNldChcInR5cGVcIiwgXCJoaWdocGFzc1wiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JhbXAgdG8gdGhlIHZhbHVlIDIyMCBvdmVyIDMgc2Vjb25kcy5cblx0XHQgKiBvc2NpbGxhdG9yLnNldCh7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogMjIwXG5cdFx0ICogfSwgMyk7XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocGFyYW1zLCB2YWx1ZSwgcmFtcFRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc09iamVjdChwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHJhbXBUaW1lID0gdmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgdmFyIHRtcE9iaiA9IHt9O1xuXHQgICAgICAgICAgICB0bXBPYmpbcGFyYW1zXSA9IHZhbHVlO1xuXHQgICAgICAgICAgICBwYXJhbXMgPSB0bXBPYmo7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHBhcmFtTG9vcDpcblx0ICAgICAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBwYXJhbXMpIHtcblx0ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW1zW2F0dHJdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgICAgICBpZiAoYXR0ci5pbmRleE9mKCcuJykgIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJTcGxpdCA9IGF0dHIuc3BsaXQoJy4nKTtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJTcGxpdC5sZW5ndGggLSAxOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50W2F0dHJTcGxpdFtpXV07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBUb25lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyU3BsaXQuc3BsaWNlKDAsIGkgKyAxKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbm5lclBhcmFtID0gYXR0clNwbGl0LmpvaW4oJy4nKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5zZXQoaW5uZXJQYXJhbSwgdmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgcGFyYW1Mb29wO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGF0dHIgPSBhdHRyU3BsaXRbYXR0clNwbGl0Lmxlbmd0aCAtIDFdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdmFyIHBhcmFtID0gcGFyZW50W2F0dHJdO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihwYXJhbSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlNpZ25hbCAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuU2lnbmFsIHx8IFRvbmUuUGFyYW0gJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlBhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnZhbHVlICE9PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHJhbXBUaW1lKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0udmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnJhbXBUbyh2YWx1ZSwgcmFtcFRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0udmFsdWUgIT09IHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLlRpbWVCYXNlICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHBhcmVudFthdHRyXSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIFRvbmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJhbS5zZXQodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSAhPT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJlbnRbYXR0cl0gPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIG9iamVjdCdzIGF0dHJpYnV0ZXMuIEdpdmVuIG5vIGFyZ3VtZW50cyBnZXRcblx0XHQgKiAgd2lsbCByZXR1cm4gYWxsIGF2YWlsYWJsZSBvYmplY3QgcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZ1xuXHRcdCAqICB2YWx1ZXMuIFBhc3MgaW4gYSBzaW5nbGUgYXR0cmlidXRlIHRvIHJldHJpZXZlIG9yIGFuIGFycmF5XG5cdFx0ICogIG9mIGF0dHJpYnV0ZXMuIFRoZSBhdHRyaWJ1dGUgc3RyaW5ncyBjYW4gYWxzbyBpbmNsdWRlIGEgXCIuXCJcblx0XHQgKiAgdG8gYWNjZXNzIGRlZXBlciBwcm9wZXJ0aWVzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBvc2MuZ2V0KCk7XG5cdFx0ICogLy9yZXR1cm5zIHtcInR5cGVcIiA6IFwic2luZVwiLCBcImZyZXF1ZW5jeVwiIDogNDQwLCAuLi5ldGN9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogb3NjLmdldChcInR5cGVcIik7XG5cdFx0ICogLy9yZXR1cm5zIHsgXCJ0eXBlXCIgOiBcInNpbmVcIn1cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vdXNlIGRvdCBub3RhdGlvbiB0byBhY2Nlc3MgZGVlcCBwcm9wZXJ0aWVzXG5cdFx0ICogc3ludGguZ2V0KFtcImVudmVsb3BlLmF0dGFja1wiLCBcImVudmVsb3BlLnJlbGVhc2VcIl0pO1xuXHRcdCAqIC8vcmV0dXJucyB7XCJlbnZlbG9wZVwiIDoge1wiYXR0YWNrXCIgOiAwLjIsIFwicmVsZWFzZVwiIDogMC40fX1cblx0XHQgKiAgQHBhcmFtIHtBcnJheT18c3RyaW5nfHVuZGVmaW5lZH0gcGFyYW1zIHRoZSBwYXJhbWV0ZXJzIHRvIGdldCwgb3RoZXJ3aXNlIHdpbGwgcmV0dXJuXG5cdFx0ICogIFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICBhbGwgYXZhaWxhYmxlLlxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYocGFyYW1zKSkge1xuXHQgICAgICAgICAgICBwYXJhbXMgPSB0aGlzLl9jb2xsZWN0RGVmYXVsdHModGhpcy5jb25zdHJ1Y3Rvcik7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgcGFyYW1zID0gW3BhcmFtc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciByZXQgPSB7fTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgYXR0ciA9IHBhcmFtc1tpXTtcblx0ICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgIHZhciBzdWJSZXQgPSByZXQ7XG5cdCAgICAgICAgICAgIGlmIChhdHRyLmluZGV4T2YoJy4nKSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBhdHRyU3BsaXQgPSBhdHRyLnNwbGl0KCcuJyk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHJTcGxpdC5sZW5ndGggLSAxOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgc3ViQXR0ciA9IGF0dHJTcGxpdFtqXTtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJSZXRbc3ViQXR0cl0gPSBzdWJSZXRbc3ViQXR0cl0gfHwge307XG5cdCAgICAgICAgICAgICAgICAgICAgc3ViUmV0ID0gc3ViUmV0W3N1YkF0dHJdO1xuXHQgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFtzdWJBdHRyXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGF0dHIgPSBhdHRyU3BsaXRbYXR0clNwbGl0Lmxlbmd0aCAtIDFdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBwYXJhbSA9IHBhcmVudFthdHRyXTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QocGFyYW1zW2F0dHJdKSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0uZ2V0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5TaWduYWwgJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0udmFsdWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5QYXJhbSAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLnZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgQXVkaW9QYXJhbSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0udmFsdWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBUb25lKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS5nZXQoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICghVG9uZS5pc0Z1bmN0aW9uKHBhcmFtKSAmJiBUb25lLmlzRGVmaW5lZChwYXJhbSkpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbGxlY3QgYWxsIG9mIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgaW4gb25lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0ciB0aGUgY29uc3RydWN0b3IgdG8gZmluZCB0aGUgZGVmYXVsdHMgZnJvbVxuXHRcdCAqICBAcmV0dXJuIHtBcnJheX0gYWxsIG9mIHRoZSBhdHRyaWJ1dGVzIHdoaWNoIGJlbG9uZyB0byB0aGUgY2xhc3Ncblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLl9jb2xsZWN0RGVmYXVsdHMgPSBmdW5jdGlvbiAoY29uc3RyKSB7XG5cdCAgICAgICAgdmFyIHJldCA9IFtdO1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChjb25zdHIuZGVmYXVsdHMpKSB7XG5cdCAgICAgICAgICAgIHJldCA9IE9iamVjdC5rZXlzKGNvbnN0ci5kZWZhdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChjb25zdHIuX3N1cGVyKSkge1xuXHQgICAgICAgICAgICB2YXIgc3VwZXJEZWZzID0gdGhpcy5fY29sbGVjdERlZmF1bHRzKGNvbnN0ci5fc3VwZXIpO1xuXHQgICAgICAgICAgICAvL2ZpbHRlciBvdXQgcmVwZWF0c1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1cGVyRGVmcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKHJldC5pbmRleE9mKHN1cGVyRGVmc1tpXSkgPT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goc3VwZXJEZWZzW2ldKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdERFRkFVTFRTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIHZhbHVlcyAgVGhlIGFyZ3VtZW50cyBhcnJheVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIGtleXMgICAgVGhlIG5hbWVzIG9mIHRoZSBhcmd1bWVudHNcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R9IGNvbnN0ciBUaGUgY2xhc3MgY29uc3RydWN0b3Jcblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIEFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgIGRlZmF1bHRzIGJldHdlZW4gdGhlIGNsYXNzJyBkZWZhdWx0c1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBwYXNzZWQgaW4gYXJndW1lbnRzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5kZWZhdWx0cyA9IGZ1bmN0aW9uICh2YWx1ZXMsIGtleXMsIGNvbnN0cikge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0ge307XG5cdCAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDEgJiYgVG9uZS5pc09iamVjdCh2YWx1ZXNbMF0pKSB7XG5cdCAgICAgICAgICAgIG9wdGlvbnMgPSB2YWx1ZXNbMF07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBvcHRpb25zW2tleXNbaV1dID0gdmFsdWVzW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChjb25zdHIuZGVmYXVsdHMpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgY29uc3RyLmRlZmF1bHRzKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNPYmplY3QoY29uc3RyKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIGNvbnN0cik7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgYGdpdmVuYCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCB1c2UgdGhlIGBmYWxsYmFja2AuXG5cdFx0ICogIElmIGJvdGggYGdpdmVuYCBhbmQgYGZhbGxiYWNrYCBhcmUgb2JqZWN0IGxpdGVyYWxzLCBpdCB3aWxsXG5cdFx0ICogIHJldHVybiBhIGRlZXAgY29weSB3aGljaCBpbmNsdWRlcyBhbGwgb2YgdGhlIHBhcmFtZXRlcnMgZnJvbSBib3RoXG5cdFx0ICogIG9iamVjdHMuIElmIGEgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBpbiBnaXZlbiwgaXQgd2lsbCByZXR1cm5cblx0XHQgKiAgdGhlIGZhbGxiYWNrIHByb3BlcnR5LlxuXHRcdCAqICA8YnI+PGJyPlxuXHRcdCAqICBXQVJOSU5HOiBpZiBvYmplY3QgaXMgc2VsZiByZWZlcmVudGlhbCwgaXQgd2lsbCBnbyBpbnRvIGFuIGFuXG5cdFx0ICogIGluZmluaXRlIHJlY3Vyc2l2ZSBsb29wLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAcGFyYW0gIHsqfSBnaXZlblxuXHRcdCAqICBAcGFyYW0gIHsqfSBmYWxsYmFja1xuXHRcdCAqICBAcmV0dXJuIHsqfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5kZWZhdWx0QXJnID0gZnVuY3Rpb24gKGdpdmVuLCBmYWxsYmFjaykge1xuXHQgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGdpdmVuKSAmJiBUb25lLmlzT2JqZWN0KGZhbGxiYWNrKSkge1xuXHQgICAgICAgICAgICB2YXIgcmV0ID0ge307XG5cdCAgICAgICAgICAgIC8vbWFrZSBhIGRlZXAgY29weSBvZiB0aGUgZ2l2ZW4gb2JqZWN0XG5cdCAgICAgICAgICAgIGZvciAodmFyIGdpdmVuUHJvcCBpbiBnaXZlbikge1xuXHQgICAgICAgICAgICAgICAgcmV0W2dpdmVuUHJvcF0gPSBUb25lLmRlZmF1bHRBcmcoZmFsbGJhY2tbZ2l2ZW5Qcm9wXSwgZ2l2ZW5bZ2l2ZW5Qcm9wXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZm9yICh2YXIgZmFsbGJhY2tQcm9wIGluIGZhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgICAgICByZXRbZmFsbGJhY2tQcm9wXSA9IFRvbmUuZGVmYXVsdEFyZyhnaXZlbltmYWxsYmFja1Byb3BdLCBmYWxsYmFja1tmYWxsYmFja1Byb3BdKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmlzVW5kZWYoZ2l2ZW4pID8gZmFsbGJhY2sgOiBnaXZlbjtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0Q09OTkVDVElPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdG9nZXRoZXIgYWxsIG9mIHRoZSBhcmd1bWVudHMgaW4gc2VyaWVzXG5cdFx0ICogIEBwYXJhbSB7Li4uQXVkaW9QYXJhbXxUb25lfEF1ZGlvTm9kZX0gbm9kZXNcblx0XHQgKiAgQHJldHVybnMge1RvbmV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuY29ubmVjdFNlcmllcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY3VycmVudFVuaXQgPSBhcmd1bWVudHNbMF07XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHRvVW5pdCA9IGFyZ3VtZW50c1tpXTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQuY29ubmVjdCh0b1VuaXQpO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdCA9IHRvVW5pdDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmU7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBUWVBFIENIRUNLSU5HXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmcgaXMgdW5kZWZpbmVkXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgdW5kZWZpbmVkXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNVbmRlZiA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZyBpcyBub3QgdW5kZWZpbmVkXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgdW5kZWZpbmVkXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNEZWZpbmVkID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIHJldHVybiAhVG9uZS5pc1VuZGVmKHZhbCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZyBpcyBhIGZ1bmN0aW9uXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBmdW5jdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbic7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgbnVtYmVyXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNOdW1iZXIgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBnaXZlbiBhcmd1bWVudCBpcyBhbiBvYmplY3QgbGl0ZXJhbCAoaS5lLiBge31gKTtcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhbiBvYmplY3QgbGl0ZXJhbC5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc09iamVjdCA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmIGFyZy5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIGJvb2xlYW4uXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBib29sZWFuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNCb29sZWFuID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGFuIEFycmF5XG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYW4gYXJyYXlcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc0FycmF5ID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGEgc3RyaW5nLlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgc3RyaW5nXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNTdHJpbmcgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBpbiB0aGUgZm9ybSBvZiBhIG5vdGUgaW4gc2NpZW50aWZpYyBwaXRjaCBub3RhdGlvbi5cblx0XHQgKiAgZS5nLiBcIkM0XCJcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIHN0cmluZ1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzTm90ZSA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5pc1N0cmluZyhhcmcpICYmIC9eKFthLWddezF9KD86YnwjfHh8YmIpPykoLT9bMC05XSspL2kudGVzdChhcmcpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBbiBlbXB0eSBmdW5jdGlvbi5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5ub09wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBNYWtlIHRoZSBwcm9wZXJ0eSBub3Qgd3JpdGFibGUuIEludGVybmFsIHVzZSBvbmx5LlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wZXJ0eSAgdGhlIHByb3BlcnR5IHRvIG1ha2Ugbm90IHdyaXRhYmxlXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5fcmVhZE9ubHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0eS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVhZE9ubHkocHJvcGVydHlbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB7XG5cdCAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG5cdCAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTWFrZSBhbiBhdHRyaWJ1dGUgd3JpdGVhYmxlLiBJbnRlcmFsIHVzZSBvbmx5LlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wZXJ0eSAgdGhlIHByb3BlcnR5IHRvIG1ha2Ugd3JpdGFibGVcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLl93cml0YWJsZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5KSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93cml0YWJsZShwcm9wZXJ0eVtpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHksIHsgd3JpdGFibGU6IHRydWUgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFBvc3NpYmxlIHBsYXkgc3RhdGVzLlxuXHRcdCAqIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0YXRlID0ge1xuXHQgICAgICAgIFN0YXJ0ZWQ6ICdzdGFydGVkJyxcblx0ICAgICAgICBTdG9wcGVkOiAnc3RvcHBlZCcsXG5cdCAgICAgICAgUGF1c2VkOiAncGF1c2VkJ1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEVxdWFsIHBvd2VyIGdhaW4gc2NhbGUuIEdvb2QgZm9yIGNyb3NzLWZhZGluZy5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9IHBlcmNlbnQgKDAtMSlcblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSAgICAgICAgIG91dHB1dCBnYWluICgwLTEpXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZXF1YWxQb3dlclNjYWxlID0gZnVuY3Rpb24gKHBlcmNlbnQpIHtcblx0ICAgICAgICB2YXIgcGlGYWN0b3IgPSAwLjUgKiBNYXRoLlBJO1xuXHQgICAgICAgIHJldHVybiBNYXRoLnNpbihwZXJjZW50ICogcGlGYWN0b3IpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGRlY2liZWxzIGludG8gZ2Fpbi5cblx0XHQgKiAgQHBhcmFtICB7RGVjaWJlbHN9IGRiXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5kYlRvR2FpbiA9IGZ1bmN0aW9uIChkYikge1xuXHQgICAgICAgIHJldHVybiBNYXRoLnBvdygxMCwgZGIgLyAyMCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZ2FpbiB0byBkZWNpYmVscy5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSBnYWluICgwLTEpXG5cdFx0ICogIEByZXR1cm4ge0RlY2liZWxzfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmdhaW5Ub0RiID0gZnVuY3Rpb24gKGdhaW4pIHtcblx0ICAgICAgICByZXR1cm4gMjAgKiAoTWF0aC5sb2coZ2FpbikgLyBNYXRoLkxOMTApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGFuIGludGVydmFsIChpbiBzZW1pdG9uZXMpIHRvIGEgZnJlcXVlbmN5IHJhdGlvLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbH0gaW50ZXJ2YWwgdGhlIG51bWJlciBvZiBzZW1pdG9uZXMgYWJvdmUgdGhlIGJhc2Ugbm90ZVxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgIHRoZSBmcmVxdWVuY3kgcmF0aW9cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKDApOyAvLyAxXG5cdFx0ICogdG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oMTIpOyAvLyAyXG5cdFx0ICogdG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oLTEyKTsgLy8gMC41XG5cdFx0ICovXG5cdCAgICBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyA9IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgIHJldHVybiBNYXRoLnBvdygyLCBpbnRlcnZhbCAvIDEyKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUSU1JTkdcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSBBdWRpb0NvbnRleHQgY2xvY2suXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gdGhlIGN1cnJlbnRUaW1lIGZyb20gdGhlIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5jb250ZXh0Lm5vdygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBvZiB0aGUgQXVkaW9Db250ZXh0IGNsb2NrLlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBjdXJyZW50VGltZSBmcm9tIHRoZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuY29udGV4dC5ub3coKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRJTkhFUklUQU5DRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgaGF2ZSBhIGNoaWxkIGluaGVyaXQgYWxsIG9mIFRvbmUncyAob3IgYSBwYXJlbnQncykgcHJvdG90eXBlXG5cdFx0ICogIHRvIGluaGVyaXQgdGhlIHBhcmVudCdzIHByb3BlcnRpZXMsIG1ha2Ugc3VyZSB0byBjYWxsXG5cdFx0ICogIFBhcmVudC5jYWxsKHRoaXMpIGluIHRoZSBjaGlsZCdzIGNvbnN0cnVjdG9yXG5cdFx0ICpcblx0XHQgKiAgYmFzZWQgb24gY2xvc3VyZSBsaWJyYXJ5J3MgaW5oZXJpdCBmdW5jdGlvblxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259IFx0Y2hpbGRcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSBwYXJlbnQgKG9wdGlvbmFsKSBwYXJlbnQgdG8gaW5oZXJpdCBmcm9tXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vIHBhcmVudCBpcyBzdXBwbGllZCwgdGhlIGNoaWxkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgaW5oZXJpdCBmcm9tIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZXh0ZW5kID0gZnVuY3Rpb24gKGNoaWxkLCBwYXJlbnQpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHBhcmVudCkpIHtcblx0ICAgICAgICAgICAgcGFyZW50ID0gVG9uZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gVGVtcENvbnN0cnVjdG9yKCkge1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUZW1wQ29uc3RydWN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTtcblx0ICAgICAgICBjaGlsZC5wcm90b3R5cGUgPSBuZXcgVGVtcENvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgLyoqIEBvdmVycmlkZSAqL1xuXHQgICAgICAgIGNoaWxkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuXHQgICAgICAgIGNoaWxkLl9zdXBlciA9IHBhcmVudDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRDT05URVhUXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBQcml2YXRlIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAdHlwZSB7QXVkaW9Db250ZXh0fVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIGF1ZGlvQ29udGV4dCA9IG51bGw7XG5cdCAgICAvKipcblx0XHQgKiAgQSBzdGF0aWMgcG9pbnRlciB0byB0aGUgYXVkaW8gY29udGV4dCBhY2Nlc3NpYmxlIGFzIFRvbmUuY29udGV4dC5cblx0XHQgKiAgQHR5cGUge1RvbmUuQ29udGV4dH1cblx0XHQgKiAgQG5hbWUgY29udGV4dFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUsICdjb250ZXh0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYXVkaW9Db250ZXh0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5Db250ZXh0ICYmIGNvbnRleHQgaW5zdGFuY2VvZiBUb25lLkNvbnRleHQpIHtcblx0ICAgICAgICAgICAgICAgIGF1ZGlvQ29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBhdWRpb0NvbnRleHQgPSBuZXcgVG9uZS5Db250ZXh0KGNvbnRleHQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vaW5pdGlhbGl6ZSB0aGUgbmV3IGF1ZGlvIGNvbnRleHRcblx0ICAgICAgICAgICAgVG9uZS5Db250ZXh0LmVtaXQoJ2luaXQnLCBhdWRpb0NvbnRleHQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHR5cGUge1RvbmUuQ29udGV4dH1cblx0XHQgKiAgQG5hbWUgY29udGV4dFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5wcm90b3R5cGUsICdjb250ZXh0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5jb250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRvbmUgYXV0b21hdGljYWxseSBjcmVhdGVzIGEgY29udGV4dCBvbiBpbml0LCBidXQgaWYgeW91IGFyZSB3b3JraW5nXG5cdFx0ICogIHdpdGggb3RoZXIgbGlicmFyaWVzIHdoaWNoIGFsc28gY3JlYXRlIGFuIEF1ZGlvQ29udGV4dCwgaXQgY2FuIGJlXG5cdFx0ICogIHVzZWZ1bCB0byBzZXQgeW91ciBvd24uIElmIHlvdSBhcmUgZ29pbmcgdG8gc2V0IHlvdXIgb3duIGNvbnRleHQsXG5cdFx0ICogIGJlIHN1cmUgdG8gZG8gaXQgYXQgdGhlIHN0YXJ0IG9mIHlvdXIgY29kZSwgYmVmb3JlIGNyZWF0aW5nIGFueSBvYmplY3RzLlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9Db250ZXh0fSBjdHggVGhlIG5ldyBhdWRpbyBjb250ZXh0IHRvIHNldFxuXHRcdCAqL1xuXHQgICAgVG9uZS5zZXRDb250ZXh0ID0gZnVuY3Rpb24gKGN0eCkge1xuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IGN0eDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBVFRSSUJVVEVTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIHNlY29uZHMgb2YgMSBwcm9jZXNzaW5nIGJsb2NrICgxMjggc2FtcGxlcylcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgYmxvY2tUaW1lXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5wcm90b3R5cGUsICdibG9ja1RpbWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxMjggLyB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBvZiBvbmUgc2FtcGxlLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzYW1wbGVUaW1lXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5wcm90b3R5cGUsICdzYW1wbGVUaW1lJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gMSAvIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFdoZXRoZXIgb3Igbm90IGFsbCB0aGUgdGVjaG5vbG9naWVzIHRoYXQgVG9uZS5qcyByZWxpZXMgb24gYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyLlxuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgc3VwcG9ydGVkXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZSwgJ3N1cHBvcnRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGhhc0F1ZGlvQ29udGV4dCA9IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnQXVkaW9Db250ZXh0JykgfHwgd2luZG93Lmhhc093blByb3BlcnR5KCd3ZWJraXRBdWRpb0NvbnRleHQnKTtcblx0ICAgICAgICAgICAgdmFyIGhhc1Byb21pc2VzID0gd2luZG93Lmhhc093blByb3BlcnR5KCdQcm9taXNlJyk7XG5cdCAgICAgICAgICAgIHZhciBoYXNXb3JrZXJzID0gd2luZG93Lmhhc093blByb3BlcnR5KCdXb3JrZXInKTtcblx0ICAgICAgICAgICAgcmV0dXJuIGhhc0F1ZGlvQ29udGV4dCAmJiBoYXNQcm9taXNlcyAmJiBoYXNXb3JrZXJzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEJvb2xlYW4gdmFsdWUgaWYgdGhlIGF1ZGlvIGNvbnRleHQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBuYW1lIGluaXRpYWxpemVkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZSwgJ2luaXRpYWxpemVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYXVkaW9Db250ZXh0ICE9PSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgY29udGV4dCB3aGVuIGl0IGJlY29tZXMgYXZhaWxhYmxlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgcmVzb2x2ZSAgQ2FsbGJhY2sgd2hlbiB0aGUgY29udGV4dCBpcyBpbml0aWFsaXplZFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaW5pdGlhbGl6ZWQpIHtcblx0ICAgICAgICAgICAgcmVzb2x2ZShUb25lLmNvbnRleHQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciByZXNDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJlc29sdmUoVG9uZS5jb250ZXh0KTtcblx0ICAgICAgICAgICAgICAgIFRvbmUuQ29udGV4dC5vZmYoJ2luaXQnLCByZXNDYWxsYmFjayk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIHJlc0NhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHZlcnNpb24gbnVtYmVyXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLnZlcnNpb24gPSAncjEyJztcblx0ICAgIHJldHVybiBUb25lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5FbWl0dGVyIGdpdmVzIGNsYXNzZXMgd2hpY2ggZXh0ZW5kIGl0XG5cdFx0ICogICAgICAgICB0aGUgYWJpbGl0eSB0byBsaXN0ZW4gZm9yIGFuZCBlbWl0IGV2ZW50cy5cblx0XHQgKiAgICAgICAgIEluc3BpcmF0aW9uIGFuZCByZWZlcmVuY2UgZnJvbSBKZXJvbWUgRXRpZW5uZSdzIFtNaWNyb0V2ZW50XShodHRwczovL2dpdGh1Yi5jb20vamVyb21lZXRpZW5uZS9taWNyb2V2ZW50LmpzKS5cblx0XHQgKiAgICAgICAgIE1JVCAoYykgMjAxMSBKZXJvbWUgRXRpZW5uZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQ29udGFpbnMgYWxsIG9mIHRoZSBldmVudHMuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRW1pdHRlcik7XG5cdCAgICAvKipcblx0XHQgKiAgQmluZCBhIGNhbGxiYWNrIHRvIGEgc3BlY2lmaWMgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgZXZlbnQgICAgIFRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBsaXN0ZW4gZm9yLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50IGlzIGVtaXR0ZWRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL3NwbGl0IHRoZSBldmVudFxuXHQgICAgICAgIHZhciBldmVudHMgPSBldmVudC5zcGxpdCgvXFxXKy8pO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudE5hbWUgPSBldmVudHNbaV07XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudE5hbWVdID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0ucHVzaChjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBCaW5kIGEgY2FsbGJhY2sgd2hpY2ggaXMgb25seSBpbnZva2VkIG9uY2Vcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBldmVudCAgICAgVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGxpc3RlbiBmb3IuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgaXMgZW1pdHRlZFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdmFyIGJvdW5kQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vaW52b2tlIHRoZSBjYWxsYmFja1xuXHQgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB0aGlzLm9mZihldmVudCwgYm91bmRDYWxsYmFjayk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIHRoaXMub24oZXZlbnQsIGJvdW5kQ2FsbGJhY2spO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIGV2ZW50ICAgICBUaGUgZXZlbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdG8uXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgd2hpY2ggd2FzIGJvdW5kIHRvXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBldmVudCB3aXRoIFRvbmUuRW1pdHRlci5vbi5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm8gY2FsbGJhY2sgaXMgZ2l2ZW4sIGFsbCBjYWxsYmFja3Ncblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzIGFyZSByZW1vdmVkLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcblx0ICAgICAgICB2YXIgZXZlbnRzID0gZXZlbnQuc3BsaXQoL1xcVysvKTtcblx0ICAgICAgICBmb3IgKHZhciBldiA9IDA7IGV2IDwgZXZlbnRzLmxlbmd0aDsgZXYrKykge1xuXHQgICAgICAgICAgICBldmVudCA9IGV2ZW50c1tldl07XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9ldmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnQpKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKGNhbGxiYWNrKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudF0gPSBbXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGV2ZW50TGlzdCA9IHRoaXMuX2V2ZW50c1tldmVudF07XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudExpc3QubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50TGlzdFtpXSA9PT0gY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TGlzdC5zcGxpY2UoaSwgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludm9rZSBhbGwgb2YgdGhlIGNhbGxiYWNrcyBib3VuZCB0byB0aGUgZXZlbnRcblx0XHQgKiAgd2l0aCBhbnkgYXJndW1lbnRzIHBhc3NlZCBpbi5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgZXZlbnQgIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmdzLi4uIFRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb25zIGxpc3RlbmluZy5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpLnNsaWNlKDEpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ZW50TGlzdCA9IHRoaXMuX2V2ZW50c1tldmVudF0uc2xpY2UoMCk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXZlbnRMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnRMaXN0W2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgRW1pdHRlciBmdW5jdGlvbnMgKG9uL29mZi9lbWl0KSB0byB0aGUgb2JqZWN0XG5cdFx0ICogIEBwYXJhbSAge09iamVjdHxGdW5jdGlvbn0gIG9iamVjdCAgVGhlIG9iamVjdCBvciBjbGFzcyB0byBleHRlbmQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIubWl4aW4gPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdCAgICAgICAgdmFyIGZ1bmN0aW9ucyA9IFtcblx0ICAgICAgICAgICAgJ29uJyxcblx0ICAgICAgICAgICAgJ29uY2UnLFxuXHQgICAgICAgICAgICAnb2ZmJyxcblx0ICAgICAgICAgICAgJ2VtaXQnXG5cdCAgICAgICAgXTtcblx0ICAgICAgICBvYmplY3QuX2V2ZW50cyA9IHt9O1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBmdW5jID0gZnVuY3Rpb25zW2ldO1xuXHQgICAgICAgICAgICB2YXIgZW1pdHRlckZ1bmMgPSBUb25lLkVtaXR0ZXIucHJvdG90eXBlW2Z1bmNdO1xuXHQgICAgICAgICAgICBvYmplY3RbZnVuY10gPSBlbWl0dGVyRnVuYztcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRW1pdHRlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FbWl0dGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBUaW1lbGluZSBjbGFzcyBmb3Igc2NoZWR1bGluZyBhbmQgbWFpbnRhaW5pbmcgc3RhdGVcblx0XHQgKiAgICAgICAgIGFsb25nIGEgdGltZWxpbmUuIEFsbCBldmVudHMgbXVzdCBoYXZlIGEgXCJ0aW1lXCIgcHJvcGVydHkuXG5cdFx0ICogICAgICAgICBJbnRlcm5hbGx5LCBldmVudHMgYXJlIHN0b3JlZCBpbiB0aW1lIG9yZGVyIGZvciBmYXN0XG5cdFx0ICogICAgICAgICByZXRyaWV2YWwuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfSBbbWVtb3J5PUluZmluaXR5XSBUaGUgbnVtYmVyIG9mIHByZXZpb3VzIGV2ZW50cyB0aGF0IGFyZSByZXRhaW5lZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydtZW1vcnknXSwgVG9uZS5UaW1lbGluZSk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiBzY2hlZHVsZWQgdGltZWxpbmUgZXZlbnRzXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWVtb3J5IG9mIHRoZSB0aW1lbGluZSwgaS5lLlxuXHRcdFx0ICogIGhvdyBtYW55IGV2ZW50cyBpbiB0aGUgcGFzdCBpdCB3aWxsIHJldGFpblxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWVtb3J5ID0gb3B0aW9ucy5tZW1vcnk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaW1lbGluZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5kZWZhdWx0cyA9IHsgJ21lbW9yeSc6IEluZmluaXR5IH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpbWVsaW5lI1xuXHRcdCAqICBAbmFtZSBsZW5ndGhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaW1lbGluZS5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZS5sZW5ndGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSW5zZXJ0IGFuIGV2ZW50IG9iamVjdCBvbnRvIHRoZSB0aW1lbGluZS4gRXZlbnRzIG11c3QgaGF2ZSBhIFwidGltZVwiIGF0dHJpYnV0ZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCBvYmplY3QgdG8gaW5zZXJ0IGludG8gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIC8vdGhlIGV2ZW50IG5lZWRzIHRvIGhhdmUgYSB0aW1lIGF0dHJpYnV0ZVxuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYoZXZlbnQudGltZSkpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlRpbWVsaW5lOiBldmVudHMgbXVzdCBoYXZlIGEgdGltZSBhdHRyaWJ1dGUnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZXZlbnQudGltZSA9IGV2ZW50LnRpbWUudmFsdWVPZigpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaChldmVudC50aW1lKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBldmVudCk7XG5cdCAgICAgICAgLy9pZiB0aGUgbGVuZ3RoIGlzIG1vcmUgdGhhbiB0aGUgbWVtb3J5LCByZW1vdmUgdGhlIHByZXZpb3VzIG9uZXNcblx0ICAgICAgICBpZiAodGhpcy5sZW5ndGggPiB0aGlzLm1lbW9yeSkge1xuXHQgICAgICAgICAgICB2YXIgZGlmZiA9IHRoaXMubGVuZ3RoIC0gdGhpcy5tZW1vcnk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNwbGljZSgwLCBkaWZmKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCBvYmplY3QgdG8gcmVtb3ZlIGZyb20gdGhlIGxpc3QuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl90aW1lbGluZS5pbmRleE9mKGV2ZW50KTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIG5lYXJlc3QgZXZlbnQgd2hvc2UgdGltZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBjb21wYXJhdG9yIFdoaWNoIHZhbHVlIGluIHRoZSBvYmplY3QgdG8gY29tcGFyZVxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXZlbnQgb2JqZWN0IHNldCBhZnRlciB0aGF0IHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSwgY29tcGFyYXRvcik7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXhdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBmaXJzdCBldmVudCBpbiB0aGUgdGltZWxpbmUgd2l0aG91dCByZW1vdmluZyBpdFxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZmlyc3QgZXZlbnQgb2JqZWN0XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5wZWVrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVswXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBmaXJzdCBldmVudCBpbiB0aGUgdGltZWxpbmUgYW5kIHJlbW92ZSBpdFxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZmlyc3QgZXZlbnQgb2JqZWN0XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmUuc2hpZnQoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBldmVudCB3aGljaCBpcyBzY2hlZHVsZWQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBjb21wYXJhdG9yIFdoaWNoIHZhbHVlIGluIHRoZSBvYmplY3QgdG8gY29tcGFyZVxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXZlbnQgb2JqZWN0IGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5nZXRBZnRlciA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgY29tcGFyYXRvciA9IFRvbmUuZGVmYXVsdEFyZyhjb21wYXJhdG9yLCAndGltZScpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lLCBjb21wYXJhdG9yKTtcblx0ICAgICAgICBpZiAoaW5kZXggKyAxIDwgdGhpcy5fdGltZWxpbmUubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtpbmRleCArIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBldmVudCBiZWZvcmUgdGhlIGV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGV2ZW50IG9iamVjdCBiZWZvcmUgdGhlIGdpdmVuIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmdldEJlZm9yZSA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgY29tcGFyYXRvciA9IFRvbmUuZGVmYXVsdEFyZyhjb21wYXJhdG9yLCAndGltZScpO1xuXHQgICAgICAgIHZhciBsZW4gPSB0aGlzLl90aW1lbGluZS5sZW5ndGg7XG5cdCAgICAgICAgLy9pZiBpdCdzIGFmdGVyIHRoZSBsYXN0IGl0ZW0sIHJldHVybiB0aGUgbGFzdCBpdGVtXG5cdCAgICAgICAgaWYgKGxlbiA+IDAgJiYgdGhpcy5fdGltZWxpbmVbbGVuIC0gMV1bY29tcGFyYXRvcl0gPCB0aW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtsZW4gLSAxXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUsIGNvbXBhcmF0b3IpO1xuXHQgICAgICAgIGlmIChpbmRleCAtIDEgPj0gMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXggLSAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBldmVudHMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdGltZWxpbmUubGVuZ3RoID4gMSkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2goYWZ0ZXIpO1xuXHQgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW2luZGV4XS50aW1lID09PSBhZnRlcikge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vZ2V0IHRoZSBmaXJzdCBpdGVtIHdpdGggdGhhdCB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4OyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbaV0udGltZSA9PT0gYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gdGhpcy5fdGltZWxpbmUuc2xpY2UoMCwgaW5kZXgpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IHRoaXMuX3RpbWVsaW5lLnNsaWNlKDAsIGluZGV4ICsgMSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90aW1lbGluZS5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICAgICAgLy90aGUgZmlyc3QgaXRlbSdzIHRpbWVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lWzBdLnRpbWUgPj0gYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBldmVudHMgYmVmb3JlIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBjYW5jZWwgYmVmb3JlLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuY2FuY2VsQmVmb3JlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKGluZGV4ID49IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSB0aGlzLl90aW1lbGluZS5zbGljZShpbmRleCArIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBldmVudCBpZiB0aGVyZSBpcyBvbmUuIG51bGwgb3RoZXJ3aXNlXG5cdFx0ICogQHBhcmFtICB7T2JqZWN0fSBldmVudCBUaGUgZXZlbnQgdG8gZmluZCB0aGUgcHJldmlvdXMgb25lIG9mXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSAgICAgICBUaGUgZXZlbnQgcmlnaHQgYmVmb3JlIHRoZSBnaXZlbiBldmVudFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUucHJldmlvdXNFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3RpbWVsaW5lLmluZGV4T2YoZXZlbnQpO1xuXHQgICAgICAgIGlmIChpbmRleCA+IDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4IC0gMV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEb2VzIGEgYmluYXJ5IHNlYXJjaCBvbiB0aGUgdGltZWxpbmUgYXJyYXkgYW5kIHJldHVybnMgdGhlXG5cdFx0ICogIG5lYXJlc3QgZXZlbnQgaW5kZXggd2hvc2UgdGltZSBpcyBhZnRlciBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgSWYgYSB0aW1lIGlzIHNlYXJjaGVkIGJlZm9yZSB0aGUgZmlyc3QgaW5kZXggaW4gdGhlIHRpbWVsaW5lLCAtMSBpcyByZXR1cm5lZC5cblx0XHQgKiAgSWYgdGhlIHRpbWUgaXMgYWZ0ZXIgdGhlIGVuZCwgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGl0ZW0gaXMgcmV0dXJuZWQuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gdGhlIGluZGV4IGluIHRoZSB0aW1lbGluZSBhcnJheVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuX3NlYXJjaCA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gLTE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgYmVnaW5uaW5nID0gMDtcblx0ICAgICAgICB2YXIgbGVuID0gdGhpcy5fdGltZWxpbmUubGVuZ3RoO1xuXHQgICAgICAgIHZhciBlbmQgPSBsZW47XG5cdCAgICAgICAgaWYgKGxlbiA+IDAgJiYgdGhpcy5fdGltZWxpbmVbbGVuIC0gMV1bY29tcGFyYXRvcl0gPD0gdGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbGVuIC0gMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgd2hpbGUgKGJlZ2lubmluZyA8IGVuZCkge1xuXHQgICAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIG1pZHBvaW50IGZvciByb3VnaGx5IGVxdWFsIHBhcnRpdGlvblxuXHQgICAgICAgICAgICB2YXIgbWlkUG9pbnQgPSBNYXRoLmZsb29yKGJlZ2lubmluZyArIChlbmQgLSBiZWdpbm5pbmcpIC8gMik7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3RpbWVsaW5lW21pZFBvaW50XTtcblx0ICAgICAgICAgICAgdmFyIG5leHRFdmVudCA9IHRoaXMuX3RpbWVsaW5lW21pZFBvaW50ICsgMV07XG5cdCAgICAgICAgICAgIGlmIChldmVudFtjb21wYXJhdG9yXSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgLy9jaG9vc2UgdGhlIGxhc3Qgb25lIHRoYXQgaGFzIHRoZSBzYW1lIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBtaWRQb2ludDsgaSA8IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHRlc3RFdmVudCA9IHRoaXMuX3RpbWVsaW5lW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0RXZlbnRbY29tcGFyYXRvcl0gPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbWlkUG9pbnQgPSBpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBtaWRQb2ludDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFtjb21wYXJhdG9yXSA8IHRpbWUgJiYgbmV4dEV2ZW50W2NvbXBhcmF0b3JdID4gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG1pZFBvaW50O1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50W2NvbXBhcmF0b3JdID4gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgLy9zZWFyY2ggbG93ZXJcblx0ICAgICAgICAgICAgICAgIGVuZCA9IG1pZFBvaW50O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy9zZWFyY2ggdXBwZXJcblx0ICAgICAgICAgICAgICAgIGJlZ2lubmluZyA9IG1pZFBvaW50ICsgMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gLTE7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGl0ZXJhdG9yLiBBcHBsaWVzIGV4dHJhIHNhZmV0eSBjaGVja3MgZm9yXG5cdFx0ICogIHJlbW92aW5nIGl0ZW1zIGZyb20gdGhlIGFycmF5LlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrXG5cdFx0ICogIEBwYXJhbSAge051bWJlcj19ICAgIGxvd2VyQm91bmRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gICAgdXBwZXJCb3VuZFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuX2l0ZXJhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGxvd2VyQm91bmQsIHVwcGVyQm91bmQpIHtcblx0ICAgICAgICBsb3dlckJvdW5kID0gVG9uZS5kZWZhdWx0QXJnKGxvd2VyQm91bmQsIDApO1xuXHQgICAgICAgIHVwcGVyQm91bmQgPSBUb25lLmRlZmF1bHRBcmcodXBwZXJCb3VuZCwgdGhpcy5fdGltZWxpbmUubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuc2xpY2UobG93ZXJCb3VuZCwgdXBwZXJCb3VuZCArIDEpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjayk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhdCBvciBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQmVmb3JlID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKHVwcGVyQm91bmQgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIDAsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEFmdGVyID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIGxvd2VyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgbG93ZXJCb3VuZCArIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYmV0d2VlbiB0aGUgc3RhcnRUaW1lIGFuZCBlbmRUaW1lLiBcblx0XHQgKiAgVGhlIHRpbWVyYW5nZSBpcyBpbmNsdXNpdmUgb2YgdGhlIHN0YXJ0VGltZSwgYnV0IGV4Y2x1c2l2ZSBvZiB0aGUgZW5kVGltZS4gXG5cdFx0ICogIHJhbmdlID0gW3N0YXJ0VGltZSwgZW5kVGltZSkuIFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBzdGFydFRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBlbmRUaW1lIFRoZSBlbmQgb2YgdGhlIHRlc3QgaW50ZXJ2YWwuIFxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQmV0d2VlbiA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdmFyIGxvd2VyQm91bmQgPSB0aGlzLl9zZWFyY2goc3RhcnRUaW1lKTtcblx0ICAgICAgICB2YXIgdXBwZXJCb3VuZCA9IHRoaXMuX3NlYXJjaChlbmRUaW1lKTtcblx0ICAgICAgICBpZiAobG93ZXJCb3VuZCAhPT0gLTEgJiYgdXBwZXJCb3VuZCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW2xvd2VyQm91bmRdLnRpbWUgIT09IHN0YXJ0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgbG93ZXJCb3VuZCArPSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vZXhjbHVzaXZlIG9mIHRoZSBlbmQgdGltZVxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbdXBwZXJCb3VuZF0udGltZSA9PT0gZW5kVGltZSkge1xuXHQgICAgICAgICAgICAgICAgdXBwZXJCb3VuZCAtPSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIGxvd2VyQm91bmQsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobG93ZXJCb3VuZCA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgMCwgdXBwZXJCb3VuZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYXQgb3IgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuIFNpbWlsYXIgdG9cblx0XHQgKiAgZm9yRWFjaEFmdGVyLCBidXQgaW5jbHVkZXMgdGhlIGl0ZW0ocykgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoRnJvbSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciBsb3dlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIC8vd29yayBiYWNrd2FyZHMgdW50aWwgdGhlIGV2ZW50IHRpbWUgaXMgbGVzcyB0aGFuIHRpbWVcblx0ICAgICAgICB3aGlsZSAobG93ZXJCb3VuZCA+PSAwICYmIHRoaXMuX3RpbWVsaW5lW2xvd2VyQm91bmRdLnRpbWUgPj0gdGltZSkge1xuXHQgICAgICAgICAgICBsb3dlckJvdW5kLS07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIGxvd2VyQm91bmQgKyAxKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKHVwcGVyQm91bmQgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoZXZlbnQudGltZSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LCAwLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5UaW1lbGluZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaW1lbGluZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCF3aW5kb3cuaGFzT3duUHJvcGVydHkoJ09mZmxpbmVBdWRpb0NvbnRleHQnKSAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3dlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQnKSkge1xuXHQgICAgICAgICAgICB3aW5kb3cuT2ZmbGluZUF1ZGlvQ29udGV4dCA9IHdpbmRvdy53ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JldHVybnMgcHJvbWlzZT9cblx0ICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDEsIDEsIDQ0MTAwKTtcblx0ICAgICAgICB2YXIgcmV0ID0gY29udGV4dC5zdGFydFJlbmRlcmluZygpO1xuXHQgICAgICAgIGlmICghKHJldCBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG5cdCAgICAgICAgICAgIE9mZmxpbmVBdWRpb0NvbnRleHQucHJvdG90eXBlLl9uYXRpdmVfc3RhcnRSZW5kZXJpbmcgPSBPZmZsaW5lQXVkaW9Db250ZXh0LnByb3RvdHlwZS5zdGFydFJlbmRlcmluZztcblx0ICAgICAgICAgICAgT2ZmbGluZUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuc3RhcnRSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGRvbmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUucmVuZGVyZWRCdWZmZXIpO1xuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmF0aXZlX3N0YXJ0UmVuZGVyaW5nKCk7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCF3aW5kb3cuaGFzT3duUHJvcGVydHkoJ0F1ZGlvQ29udGV4dCcpICYmIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnd2Via2l0QXVkaW9Db250ZXh0JykpIHtcblx0ICAgICAgICAgICAgd2luZG93LkF1ZGlvQ29udGV4dCA9IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vbm90IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LCBidXQgb25seSBhbiBBUEkgcGxhY2Vob2xkZXJcblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY2xvc2UpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzRnVuY3Rpb24odGhpcy5zdXNwZW5kKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VzcGVuZCgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL25vdCBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudFxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5yZXN1bWUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY3JlYXRlR2FpblxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluICYmIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2Fpbk5vZGUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluTm9kZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jcmVhdGVEZWxheVxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheSAmJiBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5Tm9kZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5ID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheU5vZGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vdGVzdCBkZWNvZGVBdWRpb0RhdGEgcmV0dXJucyBhIHByb21pc2Vcblx0ICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9oYXlvbmFvL3dlYi1hdWRpby1hcGktc2hpbS9ibG9iL21hc3Rlci9zcmMvQXVkaW9Db250ZXh0LmpzXG5cdCAgICAgICAgLy8gTUlUIExpY2Vuc2UgKGMpIDIwMTUgQG1vaGF5b25hb1xuXHQgICAgICAgIHZhciBkZWNvZGVBdWRpb0RhdGFQcm9taXNlID0gZmFsc2U7XG5cdCAgICAgICAgdmFyIG9mZmxpbmVDb250ZXh0ID0gbmV3IE9mZmxpbmVBdWRpb0NvbnRleHQoMSwgMSwgNDQxMDApO1xuXHQgICAgICAgIHZhciBhdWRpb0RhdGEgPSBuZXcgVWludDMyQXJyYXkoW1xuXHQgICAgICAgICAgICAxMTc5MDExNDEwLFxuXHQgICAgICAgICAgICA0OCxcblx0ICAgICAgICAgICAgMTE2MzI4MDcyNyxcblx0ICAgICAgICAgICAgNTQ0NTAxMDk0LFxuXHQgICAgICAgICAgICAxNixcblx0ICAgICAgICAgICAgMTMxMDczLFxuXHQgICAgICAgICAgICA0NDEwMCxcblx0ICAgICAgICAgICAgMTc2NDAwLFxuXHQgICAgICAgICAgICAxMDQ4NTgwLFxuXHQgICAgICAgICAgICAxNjM1MDE3MDYwLFxuXHQgICAgICAgICAgICA4LFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwXG5cdCAgICAgICAgXSkuYnVmZmVyO1xuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgIHZhciByZXQgPSBvZmZsaW5lQ29udGV4dC5kZWNvZGVBdWRpb0RhdGEoYXVkaW9EYXRhKTtcblx0ICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0ICAgICAgICAgICAgICAgIGRlY29kZUF1ZGlvRGF0YVByb21pc2UgPSB0cnVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICBkZWNvZGVBdWRpb0RhdGFQcm9taXNlID0gZmFsc2U7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLl9uYXRpdmVfZGVjb2RlQXVkaW9EYXRhID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5kZWNvZGVBdWRpb0RhdGE7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuZGVjb2RlQXVkaW9EYXRhID0gZnVuY3Rpb24gKGF1ZGlvRGF0YSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChzdWNjZXNzLCBlcnJvcikge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX25hdGl2ZV9kZWNvZGVBdWRpb0RhdGEoYXVkaW9EYXRhLCBzdWNjZXNzLCBlcnJvcik7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIEF1ZGlvQ29udGV4dC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW1pdHRlcn1cblx0XHQgKiAgQHBhcmFtIHtBdWRpb0NvbnRleHQ9fSBjb250ZXh0IG9wdGlvbmFsbHkgcGFzcyBpbiBhIGNvbnRleHRcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2NvbnRleHQnXSwgVG9uZS5Db250ZXh0KTtcblx0ICAgICAgICBpZiAoIW9wdGlvbnMuY29udGV4dCkge1xuXHQgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQgPSBuZXcgd2luZG93LkF1ZGlvQ29udGV4dCgpO1xuXHQgICAgICAgICAgICBpZiAoIW9wdGlvbnMuY29udGV4dCkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgY3JlYXRlIEF1ZGlvQ29udGV4dC4gUG9zc2libHkgdG9vIG1hbnkgQXVkaW9Db250ZXh0cyBydW5uaW5nIGFscmVhZHkuJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG9wdGlvbnMuY29udGV4dDtcblx0ICAgICAgICAvLyBleHRlbmQgYWxsIG9mIHRoZSBtZXRob2RzXG5cdCAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB0aGlzLl9jb250ZXh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlZmluZVByb3BlcnR5KHRoaXMuX2NvbnRleHQsIHByb3ApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVmYXVsdCBsYXRlbmN5IGhpbnRcblx0XHRcdCAqICBAdHlwZSAge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGF0ZW5jeUhpbnQgPSBvcHRpb25zLmxhdGVuY3lIaW50O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuIG9iamVjdCBjb250YWluaW5nIGFsbCBvZiB0aGUgY29uc3RhbnRzIEF1ZGlvQnVmZmVyU291cmNlTm9kZXNcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRzID0ge307XG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvLyBXT1JLRVJcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSBldmVudHMgYXJlIHNjaGVkdWxlZFxuXHRcdFx0ICogIGludG8gdGhlIGZ1dHVyZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb29rQWhlYWQgPSBvcHRpb25zLmxvb2tBaGVhZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHJlZmVyZW5jZSB0byB0aGUgYWN0dWFsIGNvbXB1dGVkIHVwZGF0ZSBpbnRlcnZhbFxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21wdXRlZFVwZGF0ZUludGVydmFsID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHJlbGlhYmxlIGNhbGxiYWNrIG1ldGhvZFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtUaWNrZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aWNrZXIgPSBuZXcgVGlja2VyKHRoaXMuZW1pdC5iaW5kKHRoaXMsICd0aWNrJyksIG9wdGlvbnMuY2xvY2tTb3VyY2UsIG9wdGlvbnMudXBkYXRlSW50ZXJ2YWwpO1xuXHQgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgLy8gVElNRU9VVFNcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgc2V0VGltZW91dCBldmVudHMuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lb3V0cyA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpbWVvdXQgaWQgY291bnRlclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRJZHMgPSAwO1xuXHQgICAgICAgIHRoaXMub24oJ3RpY2snLCB0aGlzLl90aW1lb3V0TG9vcC5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNvbnRleHQsIFRvbmUuRW1pdHRlcik7XG5cdCAgICBUb25lLkVtaXR0ZXIubWl4aW4oVG9uZS5Db250ZXh0KTtcblx0ICAgIC8qKlxuXHRcdCAqIGRlZmF1bHRzXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Nsb2NrU291cmNlJzogJ3dvcmtlcicsXG5cdCAgICAgICAgJ2xhdGVuY3lIaW50JzogJ2ludGVyYWN0aXZlJyxcblx0ICAgICAgICAnbG9va0FoZWFkJzogMC4xLFxuXHQgICAgICAgICd1cGRhdGVJbnRlcnZhbCc6IDAuMDNcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRGVmaW5lIGEgcHJvcGVydHkgb24gdGhpcyBUb25lLkNvbnRleHQuXG5cdFx0ICogIFRoaXMgaXMgdXNlZCB0byBleHRlbmQgdGhlIG5hdGl2ZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHBhcmFtICB7QXVkaW9Db250ZXh0fSAgY29udGV4dFxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLl9kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChjb250ZXh0LCBwcm9wKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aGlzW3Byb3BdKSkge1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcCwge1xuXHQgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0W3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdLmJpbmQoY29udGV4dCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRbcHJvcF07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbcHJvcF0gPSB2YWw7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgYXVkaW8gY29udGV4dCB0aW1lXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dC5jdXJyZW50VGltZSArIHRoaXMubG9va0FoZWFkO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQcm9taXNlIHdoaWNoIGlzIGludm9rZWQgd2hlbiB0aGUgY29udGV4dCBpcyBydW5uaW5nLlxuXHRcdCAqICBUcmllcyB0byByZXN1bWUgdGhlIGNvbnRleHQgaWYgaXQncyBub3Qgc3RhcnRlZC5cblx0XHQgKiAgQHJldHVybiAge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLnJlYWR5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoZG9uZSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fY29udGV4dC5zdGF0ZSA9PT0gJ3J1bm5pbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBkb25lKCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LnJlc3VtZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUHJvbWlzZSB3aGljaCBpcyBpbnZva2VkIHdoZW4gdGhlIGNvbnRleHQgaXMgcnVubmluZy5cblx0XHQgKiAgVHJpZXMgdG8gcmVzdW1lIHRoZSBjb250ZXh0IGlmIGl0J3Mgbm90IHN0YXJ0ZWQuXG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dC5jbG9zZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBUb25lLkNvbnRleHQuZW1pdCgnY2xvc2UnLCB0aGlzKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZW5lcmF0ZSBhIGxvb3BlZCBidWZmZXIgYXQgc29tZSBjb25zdGFudCB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdmFsXG5cdFx0ICogIEByZXR1cm4gIHtCdWZmZXJTb3VyY2VOb2RlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5nZXRDb25zdGFudCA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAodGhpcy5fY29uc3RhbnRzW3ZhbF0pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN0YW50c1t2YWxdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9jb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCAxMjgsIHRoaXMuX2NvbnRleHQuc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgICAgIHZhciBhcnIgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBhcnJbaV0gPSB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIGNvbnN0YW50ID0gdGhpcy5fY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICAgICAgY29uc3RhbnQuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICAgICAgY29uc3RhbnQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LmJ1ZmZlciA9IGJ1ZmZlcjtcblx0ICAgICAgICAgICAgY29uc3RhbnQubG9vcCA9IHRydWU7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LnN0YXJ0KDApO1xuXHQgICAgICAgICAgICB0aGlzLl9jb25zdGFudHNbdmFsXSA9IGNvbnN0YW50O1xuXHQgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJpdmF0ZSBsb29wIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHRoZSBjb250ZXh0IHNjaGVkdWxlZCB0aW1lb3V0c1xuXHRcdCAqICBJcyBpbnZva2VkIGZyb20gdGhlIGNsb2NrIHNvdXJjZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5fdGltZW91dExvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgd2hpbGUgKHRoaXMuX3RpbWVvdXRzICYmIHRoaXMuX3RpbWVvdXRzLmxlbmd0aCAmJiB0aGlzLl90aW1lb3V0cy5wZWVrKCkudGltZSA8PSBub3cpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dHMuc2hpZnQoKS5jYWxsYmFjaygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQSBzZXRUaW1lb3V0IHdoaWNoIGlzIGdhdXJlbnRlZWQgYnkgdGhlIGNsb2NrIHNvdXJjZS5cblx0XHQgKiAgQWxzbyBydW5zIGluIHRoZSBvZmZsaW5lIGNvbnRleHQuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgZm4gICAgICAgVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdCAqICBAcGFyYW0gIHtTZWNvbmRzfSAgICB0aW1lb3V0ICBUaGUgdGltZW91dCBpbiBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm5zIHtOdW1iZXJ9IElEIHRvIHVzZSB3aGVuIGludm9raW5nIFRvbmUuQ29udGV4dC5jbGVhclRpbWVvdXRcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuc2V0VGltZW91dCA9IGZ1bmN0aW9uIChmbiwgdGltZW91dCkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRJZHMrKztcblx0ICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0cy5hZGQoe1xuXHQgICAgICAgICAgICBjYWxsYmFjazogZm4sXG5cdCAgICAgICAgICAgIHRpbWU6IG5vdyArIHRpbWVvdXQsXG5cdCAgICAgICAgICAgIGlkOiB0aGlzLl90aW1lb3V0SWRzXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVvdXRJZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFycyBhIHByZXZpb3VzbHkgc2NoZWR1bGVkIHRpbWVvdXQgd2l0aCBUb25lLmNvbnRleHQuc2V0VGltZW91dFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBpZCAgVGhlIElEIHJldHVybmVkIGZyb20gc2V0VGltZW91dFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Db250ZXh0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbiAoaWQpIHtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuaWQgPT09IGlkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShldmVudCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSG93IG9mdGVuIHRoZSBXZWIgV29ya2VyIGNhbGxiYWNrIGlzIGludm9rZWQuXG5cdFx0ICogIFRoaXMgbnVtYmVyIGNvcnJlc3BvbmRzIHRvIGhvdyByZXNwb25zaXZlIHRoZSBzY2hlZHVsaW5nXG5cdFx0ICogIGNhbiBiZS4gQ29udGV4dC51cGRhdGVJbnRlcnZhbCArIENvbnRleHQubG9va0FoZWFkIGdpdmVzIHlvdSB0aGVcblx0XHQgKiAgdG90YWwgbGF0ZW5jeSBiZXR3ZWVuIHNjaGVkdWxpbmcgYW4gZXZlbnQgYW5kIGhlYXJpbmcgaXQuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnRleHQjXG5cdFx0ICogIEBuYW1lIHVwZGF0ZUludGVydmFsXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db250ZXh0LnByb3RvdHlwZSwgJ3VwZGF0ZUludGVydmFsJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja2VyLnVwZGF0ZUludGVydmFsO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja2VyLnVwZGF0ZUludGVydmFsID0gaW50ZXJ2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgV2hhdCB0aGUgc291cmNlIG9mIHRoZSBjbG9jayBpcywgZWl0aGVyIFwid29ya2VyXCIgKFdlYiBXb3JrZXIgW2RlZmF1bHRdKSxcblx0XHQgKiAgXCJ0aW1lb3V0XCIgKHNldFRpbWVvdXQpLCBvciBcIm9mZmxpbmVcIiAobm9uZSkuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnRleHQjXG5cdFx0ICogIEBuYW1lIGNsb2NrU291cmNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db250ZXh0LnByb3RvdHlwZSwgJ2Nsb2NrU291cmNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja2VyLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdHlwZSBvZiBwbGF5YmFjaywgd2hpY2ggYWZmZWN0cyB0cmFkZW9mZnMgYmV0d2VlbiBhdWRpb1xuXHRcdCAqICBvdXRwdXQgbGF0ZW5jeSBhbmQgcmVzcG9uc2l2ZW5lc3MuXG5cdFx0ICpcblx0XHQgKiAgSW4gYWRkaXRpb24gdG8gc2V0dGluZyB0aGUgdmFsdWUgaW4gc2Vjb25kcywgdGhlIGxhdGVuY3lIaW50IGFsc29cblx0XHQgKiAgYWNjZXB0cyB0aGUgc3RyaW5ncyBcImludGVyYWN0aXZlXCIgKHByaW9yaXRpemVzIGxvdyBsYXRlbmN5KSxcblx0XHQgKiAgXCJwbGF5YmFja1wiIChwcmlvcml0aXplcyBzdXN0YWluZWQgcGxheWJhY2spLCBcImJhbGFuY2VkXCIgKGJhbGFuY2VzXG5cdFx0ICogIGxhdGVuY3kgYW5kIHBlcmZvcm1hbmNlKSwgYW5kIFwiZmFzdGVzdFwiIChsb3dlc3QgbGF0ZW5jeSwgbWlnaHQgZ2xpdGNoIG1vcmUgb2Z0ZW4pLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfFNlY29uZHN9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnRleHQjXG5cdFx0ICogIEBuYW1lIGxhdGVuY3lIaW50XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdGhlIGxvb2tBaGVhZCB0byAwLjMgc2Vjb25kc1xuXHRcdCAqIFRvbmUuY29udGV4dC5sYXRlbmN5SGludCA9IDAuMztcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNvbnRleHQucHJvdG90eXBlLCAnbGF0ZW5jeUhpbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sYXRlbmN5SGludDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGhpbnQpIHtcblx0ICAgICAgICAgICAgdmFyIGxvb2tBaGVhZCA9IGhpbnQ7XG5cdCAgICAgICAgICAgIHRoaXMuX2xhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNTdHJpbmcoaGludCkpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAoaGludCkge1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnaW50ZXJhY3RpdmUnOlxuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuMTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ3BsYXliYWNrJzpcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjg7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdiYWxhbmNlZCc6XG5cdCAgICAgICAgICAgICAgICAgICAgbG9va0FoZWFkID0gMC4yNTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2Zhc3Rlc3QnOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubGF0ZW5jeUhpbnQgPSAnaW50ZXJhY3RpdmUnO1xuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuMDE7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlSW50ZXJ2YWwgPSBsb29rQWhlYWQgLyAzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFVubGlrZSBvdGhlciBkaXNwb3NlIG1ldGhvZHMsIHRoaXMgcmV0dXJucyBhIFByb21pc2Vcblx0XHQgKiAgd2hpY2ggZXhlY3V0ZXMgd2hlbiB0aGUgY29udGV4dCBpcyBjbG9zZWQgYW5kIGRpc3Bvc2VkXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlciA9IG51bGw7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRzLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dHMgPSBudWxsO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjb24gaW4gdGhpcy5fY29uc3RhbnRzKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jb25zdGFudHNbY29uXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzID0gbnVsbDtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBBIGNsYXNzIHdoaWNoIHByb3ZpZGVzIGEgcmVsaWFibGUgY2FsbGJhY2sgdXNpbmcgZWl0aGVyXG5cdFx0ICogICAgICAgIGEgV2ViIFdvcmtlciwgb3IgaWYgdGhhdCBpc24ndCBzdXBwb3J0ZWQsIGZhbGxzIGJhY2sgdG8gc2V0VGltZW91dC5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIFRpY2tlciA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdHlwZSwgdXBkYXRlSW50ZXJ2YWwpIHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEVpdGhlciBcIndvcmtlclwiIG9yIFwidGltZW91dFwiXG5cdFx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHVwZGF0ZSBpbnRlcnZhbCBvZiB0aGUgd29ya2VyXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3VwZGF0ZUludGVydmFsID0gdXBkYXRlSW50ZXJ2YWw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBUb25lLmRlZmF1bHRBcmcoY2FsbGJhY2ssIFRvbmUubm9PcCk7XG5cdCAgICAgICAgLy9jcmVhdGUgdGhlIGNsb2NrIHNvdXJjZSBmb3IgdGhlIGZpcnN0IHRpbWVcblx0ICAgICAgICB0aGlzLl9jcmVhdGVDbG9jaygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwb3NzaWJsZSB0aWNrZXIgdHlwZXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUaWNrZXIuVHlwZSA9IHtcblx0ICAgICAgICBXb3JrZXI6ICd3b3JrZXInLFxuXHQgICAgICAgIFRpbWVvdXQ6ICd0aW1lb3V0Jyxcblx0ICAgICAgICBPZmZsaW5lOiAnb2ZmbGluZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2VuZXJhdGUgYSB3ZWIgd29ya2VyXG5cdFx0ICogIEByZXR1cm4gIHtXZWJXb3JrZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9VUkwgU2hpbVxuXHQgICAgICAgIHdpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cdCAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbLy90aGUgaW5pdGlhbCB0aW1lb3V0IHRpbWVcblx0ICAgICAgICAgICAgJ3ZhciB0aW1lb3V0VGltZSA9ICcgKyAodGhpcy5fdXBkYXRlSW50ZXJ2YWwgKiAxMDAwKS50b0ZpeGVkKDEpICsgJzsnICsgLy9vbm1lc3NhZ2UgY2FsbGJhY2tcblx0ICAgICAgICAgICAgJ3NlbGYub25tZXNzYWdlID0gZnVuY3Rpb24obXNnKXsnICsgJ1xcdHRpbWVvdXRUaW1lID0gcGFyc2VJbnQobXNnLmRhdGEpOycgKyAnfTsnICsgLy90aGUgdGljayBmdW5jdGlvbiB3aGljaCBwb3N0cyBhIG1lc3NhZ2Vcblx0ICAgICAgICAgICAgLy9hbmQgc2NoZWR1bGVzIGEgbmV3IHRpY2tcblx0ICAgICAgICAgICAgJ2Z1bmN0aW9uIHRpY2soKXsnICsgJ1xcdHNldFRpbWVvdXQodGljaywgdGltZW91dFRpbWUpOycgKyAnXFx0c2VsZi5wb3N0TWVzc2FnZShcXCd0aWNrXFwnKTsnICsgJ30nICsgLy9jYWxsIHRpY2sgaW5pdGlhbGx5XG5cdCAgICAgICAgICAgICd0aWNrKCk7J10pO1xuXHQgICAgICAgIHZhciBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0ICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcihibG9iVXJsKTtcblx0ICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gdGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93b3JrZXIgPSB3b3JrZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ3JlYXRlIGEgdGltZW91dCBsb29wXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuX2NyZWF0ZVRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jcmVhdGVUaW1lb3V0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpLCB0aGlzLl91cGRhdGVJbnRlcnZhbCAqIDEwMDApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENyZWF0ZSB0aGUgY2xvY2sgc291cmNlLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9jcmVhdGVDbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVGlja2VyLlR5cGUuV29ya2VyKSB7XG5cdCAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVXb3JrZXIoKTtcblx0ICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgLy8gd29ya2VycyBub3Qgc3VwcG9ydGVkLCBmYWxsYmFjayB0byB0aW1lb3V0XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90eXBlID0gVGlja2VyLlR5cGUuVGltZW91dDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNsb2NrKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRpY2tlci5UeXBlLlRpbWVvdXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGltZW91dCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAbWVtYmVyT2YgVGlja2VyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdXBkYXRlSW50ZXJ2YWxcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRpY2tlci5wcm90b3R5cGUsICd1cGRhdGVJbnRlcnZhbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZUludGVydmFsO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJ2YWwgPSBNYXRoLm1heChpbnRlcnZhbCwgMTI4IC8gNDQxMDApO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVGlja2VyLlR5cGUuV29ya2VyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93b3JrZXIucG9zdE1lc3NhZ2UoTWF0aC5tYXgoaW50ZXJ2YWwgKiAxMDAwLCAxKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSB0aWNrZXIsIGVpdGhlciBhIHdvcmtlciBvciBhIHRpbWVvdXRcblx0XHQgKiBAbWVtYmVyT2YgVGlja2VyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGlja2VyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9kaXNwb3NlQ2xvY2soKTtcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNsb2NrKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cCB0aGUgY3VycmVudCBjbG9jayBzb3VyY2Vcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fZGlzcG9zZUNsb2NrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl90aW1lb3V0KSB7XG5cdCAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLl93b3JrZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fd29ya2VyLnRlcm1pbmF0ZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl93b3JrZXIub25tZXNzYWdlID0gbnVsbDtcblx0ICAgICAgICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2Rpc3Bvc2VDbG9jaygpO1xuXHQgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2hpbSBhbGwgY29ubmVjdC9kaXNjb25uZWN0IGFuZCBzb21lIGRlcHJlY2F0ZWQgbWV0aG9kcyB3aGljaCBhcmUgc3RpbGwgaW5cblx0XHQgKiAgc29tZSBvbGRlciBpbXBsZW1lbnRhdGlvbnMuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBuYXRpdmVDb25uZWN0ID0gQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0O1xuXHQgICAgICAgIHZhciBuYXRpdmVEaXNjb25uZWN0ID0gQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNjb25uZWN0O1xuXHQgICAgICAgIC8vcmVwbGFjZSB0aGUgb2xkIGNvbm5lY3QgbWV0aG9kXG5cdCAgICAgICAgZnVuY3Rpb24gdG9uZUNvbm5lY3QoQiwgb3V0TnVtLCBpbk51bSkge1xuXHQgICAgICAgICAgICBpZiAoQi5pbnB1dCkge1xuXHQgICAgICAgICAgICAgICAgaW5OdW0gPSBUb25lLmRlZmF1bHRBcmcoaW5OdW0sIDApO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheShCLmlucHV0KSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3QoQi5pbnB1dFtpbk51bV0pO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0KEIuaW5wdXQsIG91dE51bSwgaW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoQiBpbnN0YW5jZW9mIEF1ZGlvTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVDb25uZWN0LmNhbGwodGhpcywgQiwgb3V0TnVtLCBpbk51bSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUNvbm5lY3QuY2FsbCh0aGlzLCBCLCBvdXROdW0pO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQjtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlcnJvciBjb25uZWN0aW5nIHRvIG5vZGU6ICcgKyBCICsgJ1xcbicgKyBlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JlcGxhY2UgdGhlIG9sZCBkaXNjb25uZWN0IG1ldGhvZFxuXHQgICAgICAgIGZ1bmN0aW9uIHRvbmVEaXNjb25uZWN0KEIsIG91dE51bSwgaW5OdW0pIHtcblx0ICAgICAgICAgICAgaWYgKEIgJiYgQi5pbnB1dCAmJiBUb25lLmlzQXJyYXkoQi5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgICAgIGluTnVtID0gVG9uZS5kZWZhdWx0QXJnKGluTnVtLCAwKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdChCLmlucHV0W2luTnVtXSwgb3V0TnVtLCAwKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChCICYmIEIuaW5wdXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdChCLmlucHV0LCBvdXROdW0sIGluTnVtKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGlzY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXJyb3IgZGlzY29ubmVjdGluZyBub2RlOiAnICsgQiArICdcXG4nICsgZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCAhPT0gdG9uZUNvbm5lY3QpIHtcblx0ICAgICAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0ID0gdG9uZUNvbm5lY3Q7XG5cdCAgICAgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IHRvbmVEaXNjb25uZWN0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy8gc2V0IHRoZSBhdWRpbyBjb250ZXh0IGluaXRpYWxseSwgYW5kIGlmIG9uZSBpcyBub3QgYWxyZWFkeSBjcmVhdGVkXG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQgJiYgIVRvbmUuaW5pdGlhbGl6ZWQpIHtcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBuZXcgVG9uZS5Db250ZXh0KCk7XG5cdCAgICAgICAgLy8gbG9nIG9uIGZpcnN0IGluaXRpYWxpemF0aW9uXG5cdCAgICAgICAgLy8gYWxsb3cgb3B0aW9uYWwgc2lsZW5jaW5nIG9mIHRoaXMgbG9nXG5cdCAgICAgICAgaWYgKCF3aW5kb3cuVE9ORV9TSUxFTkNFX1ZFUlNJT05fTE9HR0lORykge1xuXHQgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXHQgICAgICAgICAgICBjb25zb2xlLmxvZygnJWMgKiBUb25lLmpzICcgKyBUb25lLnZlcnNpb24gKyAnICogJywgJ2JhY2tncm91bmQ6ICMwMDA7IGNvbG9yOiAjZmZmJyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSBlbHNlIGlmICghVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXHQgICAgICAgIGNvbnNvbGUud2FybignVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgVG9uZS5qcycpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIFRvbmUuQ29udGV4dDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkF1ZGlvTm9kZSBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY2xhc3NlcyB3aGljaCBwcm9jZXNzIGF1ZGlvLlxuXHRcdCAqICAgICAgICAgQXVkaW9Ob2RlcyBoYXZlIGlucHV0cyBhbmQgb3V0cHV0cy5cblx0XHQgKiAgQHBhcmFtXHR7QXVkaW9Db250ZXh0PX0gY29udGV4dFx0VGhlIGF1ZGlvIGNvbnRleHQgdG8gdXNlIHdpdGggdGhlIGNsYXNzXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8vdXNlIHRoZSBkZWZhdWx0IGNvbnRleHQgaWYgb25lIGlzIG5vdCBwYXNzZWQgaW5cblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2NvbnRleHQnXSwgeyAnY29udGV4dCc6IFRvbmUuY29udGV4dCB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBBdWRpb0NvbnRleHQgb2YgdGhpcyBpbnN0YW5jZVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtBdWRpb0NvbnRleHR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgYXVkaW8gY29udGV4dCBiZWxvbmdpbmcgdG8gdGhpcyBpbnN0YW5jZS5cblx0XHQgKiBAdHlwZSB7VG9uZS5Db250ZXh0fVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiBAbmFtZSBjb250ZXh0XG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnY29udGV4dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ3JlYXRlIGlucHV0IGFuZCBvdXRwdXRzIGZvciB0aGlzIG9iamVjdC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgW2lucHV0PTBdICAgVGhlIG51bWJlciBvZiBpbnB1dHNcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgW291dHB1dHM9MF0gIFRoZSBudW1iZXIgb2Ygb3V0cHV0c1xuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5BdWRpb05vZGV9ICB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY3JlYXRlSW5zT3V0cyA9IGZ1bmN0aW9uIChpbnB1dHMsIG91dHB1dHMpIHtcblx0ICAgICAgICBpZiAoaW5wdXRzID09PSAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRzID4gMSkge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0ID0gbmV3IEFycmF5KGlucHV0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChvdXRwdXRzID09PSAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKG91dHB1dHMgPiAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0ID0gbmV3IEFycmF5KG91dHB1dHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2hhbm5lbENvdW50IGlzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdXNlZCB3aGVuIHVwLW1peGluZyBhbmQgZG93bi1taXhpbmdcblx0XHQgKiAgY29ubmVjdGlvbnMgdG8gYW55IGlucHV0cyB0byB0aGUgbm9kZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMiBleGNlcHQgZm9yXG5cdFx0ICogIHNwZWNpZmljIG5vZGVzIHdoZXJlIGl0cyB2YWx1ZSBpcyBzcGVjaWFsbHkgZGV0ZXJtaW5lZC5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIGNoYW5uZWxDb3VudFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjaGFubmVsQ291bnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnQgPSBjO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYW5uZWxDb3VudE1vZGUgZGV0ZXJtaW5lcyBob3cgY2hhbm5lbHMgd2lsbCBiZSBjb3VudGVkIHdoZW4gdXAtbWl4aW5nIGFuZFxuXHRcdCAqICBkb3duLW1peGluZyBjb25uZWN0aW9ucyB0byBhbnkgaW5wdXRzIHRvIHRoZSBub2RlLlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcIm1heFwiLiBUaGlzIGF0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0IGZvciBub2RlcyB3aXRoIG5vIGlucHV0cy5cblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSBjaGFubmVsQ291bnRNb2RlXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NoYW5uZWxDb3VudE1vZGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnRNb2RlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50TW9kZSA9IG07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2hhbm5lbEludGVycHJldGF0aW9uIGRldGVybWluZXMgaG93IGluZGl2aWR1YWwgY2hhbm5lbHMgd2lsbCBiZSB0cmVhdGVkXG5cdFx0ICogIHdoZW4gdXAtbWl4aW5nIGFuZCBkb3duLW1peGluZyBjb25uZWN0aW9ucyB0byBhbnkgaW5wdXRzIHRvIHRoZSBub2RlLlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcInNwZWFrZXJzXCIuXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgY2hhbm5lbEludGVycHJldGF0aW9uXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NoYW5uZWxJbnRlcnByZXRhdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxJbnRlcnByZXRhdGlvbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxJbnRlcnByZXRhdGlvbiA9IGk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpbnB1dHMgZmVlZGluZyBpbnRvIHRoZSBBdWRpb05vZGUuXG5cdFx0ICogIEZvciBzb3VyY2Ugbm9kZXMsIHRoaXMgd2lsbCBiZSAwLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBudW1iZXJPZklucHV0c1xuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ251bWJlck9mSW5wdXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbnB1dCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLmlucHV0KSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0Lmxlbmd0aDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2Ygb3V0cHV0cyBjb21pbmcgb3V0IG9mIHRoZSBBdWRpb05vZGUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIG51bWJlck9mT3V0cHV0c1xuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ251bWJlck9mT3V0cHV0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5sZW5ndGg7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENhbGxlZCB3aGVuIGFuIGF1ZGlvIHBhcmFtIGNvbm5lY3RzIHRvIHRoaXMgbm9kZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuX29uQ29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0aGUgb3V0cHV0IG9mIGEgVG9uZU5vZGUgdG8gYW4gQXVkaW9QYXJhbSwgQXVkaW9Ob2RlLCBvciBUb25lTm9kZVxuXHRcdCAqICBAcGFyYW0gIHtUb25lIHwgQXVkaW9QYXJhbSB8IEF1ZGlvTm9kZX0gdW5pdFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bT0wXSBvcHRpb25hbGx5IHdoaWNoIG91dHB1dCB0byBjb25uZWN0IGZyb21cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtpbnB1dE51bT0wXSBvcHRpb25hbGx5IHdoaWNoIGlucHV0IHRvIGNvbm5lY3QgdG9cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICh1bml0LCBvdXRwdXROdW0sIGlucHV0TnVtKSB7XG5cdCAgICAgICAgaWYgKHVuaXQuX29uQ29ubmVjdCkge1xuXHQgICAgICAgICAgICB1bml0Ll9vbkNvbm5lY3QodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5vdXRwdXQpKSB7XG5cdCAgICAgICAgICAgIG91dHB1dE51bSA9IFRvbmUuZGVmYXVsdEFyZyhvdXRwdXROdW0sIDApO1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dFtvdXRwdXROdW1dLmNvbm5lY3QodW5pdCwgMCwgaW5wdXROdW0pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmNvbm5lY3QodW5pdCwgb3V0cHV0TnVtLCBpbnB1dE51bSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNjb25uZWN0IHRoZSBvdXRwdXRcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8QXVkaW9Ob2RlfSBvdXRwdXQgRWl0aGVyIHRoZSBvdXRwdXQgaW5kZXggdG8gZGlzY29ubmVjdFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgb3V0cHV0IGlzIGFuIGFycmF5LCBvciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSB0byBkaXNjb25uZWN0IGZyb20uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIG91dHB1dE51bSwgaW5wdXROdW0pIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc051bWJlcihkZXN0aW5hdGlvbikpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0W2Rlc3RpbmF0aW9uXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBvdXRwdXROdW0gPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TnVtLCAwKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0W291dHB1dE51bV0uZGlzY29ubmVjdChkZXN0aW5hdGlvbiwgMCwgaW5wdXROdW0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuZGlzY29ubmVjdC5hcHBseSh0aGlzLm91dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGlzIG5vZGUgdG8gdGhlIHJlc3Qgb2YgdGhlIG5vZGVzIGluIHNlcmllcy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy9jb25uZWN0IGEgbm9kZSB0byBhbiBlZmZlY3QsIHBhblZvbCBhbmQgdGhlbiB0byB0aGUgbWFzdGVyIG91dHB1dFxuXHRcdCAqICBub2RlLmNoYWluKGVmZmVjdCwgcGFuVm9sLCBUb25lLk1hc3Rlcik7XG5cdFx0ICogIEBwYXJhbSB7Li4uQXVkaW9QYXJhbXxUb25lfEF1ZGlvTm9kZX0gbm9kZXNcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY2hhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRVbml0ID0gdGhpcztcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgdG9Vbml0ID0gYXJndW1lbnRzW2ldO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdC5jb25uZWN0KHRvVW5pdCk7XG5cdCAgICAgICAgICAgIGN1cnJlbnRVbml0ID0gdG9Vbml0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0aGUgb3V0cHV0IG9mIHRoaXMgbm9kZSB0byB0aGUgcmVzdCBvZiB0aGUgbm9kZXMgaW4gcGFyYWxsZWwuXG5cdFx0ICogIEBwYXJhbSB7Li4uQXVkaW9QYXJhbXxUb25lfEF1ZGlvTm9kZX0gbm9kZXNcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZmFuID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29ubmVjdChhcmd1bWVudHNbaV0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICBpZiAod2luZG93LkF1ZGlvTm9kZSkge1xuXHQgICAgICAgIC8vZ2l2ZSBuYXRpdmUgbm9kZXMgY2hhaW4gYW5kIGZhbiBtZXRob2RzXG5cdCAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5jaGFpbiA9IFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jaGFpbjtcblx0ICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLmZhbiA9IFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5mYW47XG5cdCAgICB9XG5cdCAgICAvKipcblx0XHQgKiBEaXNwb3NlIGFuZCBkaXNjb25uZWN0XG5cdFx0ICogQHJldHVybiB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh0aGlzLmlucHV0KSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbnB1dCBpbnN0YW5jZW9mIEF1ZGlvTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5pbnB1dCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0IGluc3RhbmNlb2YgQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm91dHB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jb250ZXh0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdWRpb05vZGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQmFzZSBjbGFzcyBmb3IgYWxsIFNpZ25hbHMuIFVzZWQgSW50ZXJuYWxseS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbEJhc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNpZ25hbEJhc2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGVuIHNpZ25hbHMgY29ubmVjdCB0byBvdGhlciBzaWduYWxzIG9yIEF1ZGlvUGFyYW1zLFxuXHRcdCAqICB0aGV5IHRha2Ugb3ZlciB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoYXQgc2lnbmFsIG9yIEF1ZGlvUGFyYW0uXG5cdFx0ICogIEZvciBhbGwgb3RoZXIgbm9kZXMsIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBhIGRlZmF1bHQgPGNvZGU+Y29ubmVjdDwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQG92ZXJyaWRlXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9QYXJhbXxBdWRpb05vZGV8VG9uZS5TaWduYWx8VG9uZX0gbm9kZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bWJlcj0wXSBUaGUgb3V0cHV0IG51bWJlciB0byBjb25uZWN0IGZyb20uXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW1iZXI9MF0gVGhlIGlucHV0IG51bWJlciB0byBjb25uZWN0IHRvLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWxCYXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSwgb3V0cHV0TnVtYmVyLCBpbnB1dE51bWJlcikge1xuXHQgICAgICAgIC8vemVybyBpdCBvdXQgc28gdGhhdCB0aGUgc2lnbmFsIGNhbiBoYXZlIGZ1bGwgY29udHJvbFxuXHQgICAgICAgIGlmIChUb25lLlNpZ25hbCAmJiBUb25lLlNpZ25hbCA9PT0gbm9kZS5jb25zdHJ1Y3RvciB8fCBUb25lLlBhcmFtICYmIFRvbmUuUGFyYW0gPT09IG5vZGUuY29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgLy9jYW5jZWwgY2hhbmdlc1xuXHQgICAgICAgICAgICBub2RlLl9wYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoMCk7XG5cdCAgICAgICAgICAgIC8vcmVzZXQgdGhlIHZhbHVlXG5cdCAgICAgICAgICAgIG5vZGUuX3BhcmFtLnZhbHVlID0gMDtcblx0ICAgICAgICAgICAgLy9tYXJrIHRoZSB2YWx1ZSBhcyBvdmVycmlkZGVuXG5cdCAgICAgICAgICAgIG5vZGUub3ZlcnJpZGRlbiA9IHRydWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQXVkaW9QYXJhbSkge1xuXHQgICAgICAgICAgICBub2RlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcygwKTtcblx0ICAgICAgICAgICAgbm9kZS52YWx1ZSA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0LmNhbGwodGhpcywgbm9kZSwgb3V0cHV0TnVtYmVyLCBpbnB1dE51bWJlcik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2lnbmFsQmFzZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgLy9maXhlcyBzYWZhcmkgb25seSBidWcgd2hpY2ggaXMgc3RpbGwgcHJlc2VudCBpbiAxMVxuXHQgICAgICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcblx0ICAgICAgICB2YXIgaXNTYWZhcmkgPSB1YS5pbmNsdWRlcygnc2FmYXJpJykgJiYgIXVhLmluY2x1ZGVzKCdjaHJvbWUnKTtcblx0ICAgICAgICBpZiAoaXNTYWZhcmkpIHtcblx0ICAgICAgICAgICAgdmFyIFdhdmVTaGFwZXJOb2RlID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTm9kZSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IGNvbnRleHQuX25hdGl2ZV9jcmVhdGVXYXZlU2hhcGVyKCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHRoaXMuX2ludGVybmFsTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmluZVByb3BlcnR5KHRoaXMuX2ludGVybmFsTm9kZSwgcHJvcCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXYXZlU2hhcGVyTm9kZS5wcm90b3R5cGUsICdjdXJ2ZScsIHtcblx0ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJ2ZTtcblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjdXJ2ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gY3VydmU7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShjdXJ2ZS5sZW5ndGggKyAxKTtcblx0ICAgICAgICAgICAgICAgICAgICBhcnJheS5zZXQoY3VydmUsIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgIGFycmF5WzBdID0gY3VydmVbMF07XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxOb2RlLmN1cnZlID0gYXJyYXk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBXYXZlU2hhcGVyTm9kZS5wcm90b3R5cGUuX2RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKGNvbnRleHQsIHByb3ApIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpc1twcm9wXSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcCwge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGV4dFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdLmJpbmQoY29udGV4dCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbcHJvcF0gPSB2YWw7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5fbmF0aXZlX2NyZWF0ZVdhdmVTaGFwZXIgPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVdhdmVTaGFwZXI7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlV2F2ZVNoYXBlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV2F2ZVNoYXBlck5vZGUodGhpcyk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHMgdGhlIG5hdGl2ZSBXZWIgQXVkaW8gQVBJXG5cdFx0ICogICAgICAgICBbV2F2ZVNoYXBlck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLXdhdmVzaGFwZXJub2RlLWludGVyZmFjZSkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb258QXJyYXl8TnVtYmVyfSBtYXBwaW5nIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGRlZmluZSB0aGUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1hcHBpbmcgZnVuY3Rpb24gc2hvdWxkIHRha2UgdHdvIGFyZ3VtZW50czpcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBpcyB0aGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBhcnJheSBwb3NpdGlvbi5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBhbiBhcnJheSwgdGhhdCBhcnJheSB3aWxsIGJlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgYXMgdGhlIHdhdmUgc2hhcGluZyBmdW5jdGlvbi4gVGhlIGlucHV0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwgaXMgYW4gQXVkaW9SYW5nZSBbLTEsIDFdIHZhbHVlIGFuZCB0aGUgb3V0cHV0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwgY2FuIHRha2Ugb24gYW55IG51bWVyaWNhbCB2YWx1ZXMuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IFtidWZmZXJMZW49MTAyNF0gVGhlIGxlbmd0aCBvZiB0aGUgV2F2ZVNoYXBlck5vZGUgYnVmZmVyLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB0aW1lc1R3byA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24odmFsKXtcblx0XHQgKiBcdHJldHVybiB2YWwgKiAyO1xuXHRcdCAqIH0sIDIwNDgpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSB3YXZlc2hhcGVyIGNhbiBhbHNvIGJlIGNvbnN0cnVjdGVkIHdpdGggYW4gYXJyYXkgb2YgdmFsdWVzXG5cdFx0ICogdmFyIGludmVydCA9IG5ldyBUb25lLldhdmVTaGFwZXIoWzEsIC0xXSk7XG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVTaGFwZXIgPSBmdW5jdGlvbiAobWFwcGluZywgYnVmZmVyTGVuKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHdhdmVzaGFwZXJcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVXYXZlU2hhcGVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHdhdmVzaGFwZXJzIGN1cnZlXG5cdFx0XHQgKiAgQHR5cGUge0Zsb2F0MzJBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hcHBpbmcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY3VydmUgPSBtYXBwaW5nO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoaXNGaW5pdGUobWFwcGluZykgfHwgVG9uZS5pc1VuZGVmKG1hcHBpbmcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gbmV3IEZsb2F0MzJBcnJheShUb25lLmRlZmF1bHRBcmcobWFwcGluZywgMTAyNCkpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0Z1bmN0aW9uKG1hcHBpbmcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gbmV3IEZsb2F0MzJBcnJheShUb25lLmRlZmF1bHRBcmcoYnVmZmVyTGVuLCAxMDI0KSk7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0TWFwKG1hcHBpbmcpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLldhdmVTaGFwZXIsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVXNlcyBhIG1hcHBpbmcgZnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgY3VydmUuXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb259IG1hcHBpbmcgVGhlIGZ1bmN0aW9uIHVzZWQgdG8gZGVmaW5lIHRoZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1hcHBpbmcgZnVuY3Rpb24gdGFrZSB0d28gYXJndW1lbnRzOlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBpcyB0aGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBnb2VzIGZyb20gLTEgdG8gMSBvdmVyIHRoZSBudW1iZXIgb2YgZWxlbWVudHNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgY3VydmUgYXJyYXkuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGFycmF5IHBvc2l0aW9uLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5XYXZlU2hhcGVyfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9tYXAgdGhlIGlucHV0IHNpZ25hbCBmcm9tIFstMSwgMV0gdG8gWzAsIDEwXVxuXHRcdCAqIHNoYXBlci5zZXRNYXAoZnVuY3Rpb24odmFsLCBpbmRleCl7XG5cdFx0ICogXHRyZXR1cm4gKHZhbCArIDEpICogNTtcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZS5zZXRNYXAgPSBmdW5jdGlvbiAobWFwcGluZykge1xuXHQgICAgICAgIHZhciBhcnJheSA9IG5ldyBBcnJheSh0aGlzLl9jdXJ2ZS5sZW5ndGgpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLl9jdXJ2ZS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgbm9ybWFsaXplZCA9IGkgLyAobGVuIC0gMSkgKiAyIC0gMTtcblx0ICAgICAgICAgICAgYXJyYXlbaV0gPSBtYXBwaW5nKG5vcm1hbGl6ZWQsIGkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmN1cnZlID0gYXJyYXk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGFycmF5IHRvIHNldCBhcyB0aGUgd2F2ZXNoYXBlciBjdXJ2ZS4gRm9yIGxpbmVhciBjdXJ2ZXNcblx0XHQgKiBhcnJheSBsZW5ndGggZG9lcyBub3QgbWFrZSBtdWNoIGRpZmZlcmVuY2UsIGJ1dCBmb3IgY29tcGxleCBjdXJ2ZXNcblx0XHQgKiBsb25nZXIgYXJyYXlzIHdpbGwgcHJvdmlkZSBzbW9vdGhlciBpbnRlcnBvbGF0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLldhdmVTaGFwZXIjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIGN1cnZlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZSwgJ2N1cnZlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLmN1cnZlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWFwcGluZykge1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG5ldyBGbG9hdDMyQXJyYXkobWFwcGluZyk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5jdXJ2ZSA9IHRoaXMuX2N1cnZlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogU3BlY2lmaWVzIHdoYXQgdHlwZSBvZiBvdmVyc2FtcGxpbmcgKGlmIGFueSkgc2hvdWxkIGJlIHVzZWQgd2hlblxuXHRcdCAqIGFwcGx5aW5nIHRoZSBzaGFwaW5nIGN1cnZlLiBDYW4gZWl0aGVyIGJlIFwibm9uZVwiLCBcIjJ4XCIgb3IgXCI0eFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLldhdmVTaGFwZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSBvdmVyc2FtcGxlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZSwgJ292ZXJzYW1wbGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG92ZXJzYW1wbGluZykge1xuXHQgICAgICAgICAgICBpZiAoW1xuXHQgICAgICAgICAgICAgICAgICAgICdub25lJyxcblx0ICAgICAgICAgICAgICAgICAgICAnMngnLFxuXHQgICAgICAgICAgICAgICAgICAgICc0eCdcblx0ICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMob3ZlcnNhbXBsaW5nKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGUgPSBvdmVyc2FtcGxpbmc7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVG9uZS5XYXZlU2hhcGVyOiBvdmVyc2FtcGxpbmcgbXVzdCBiZSBlaXRoZXIgXFwnbm9uZVxcJywgXFwnMnhcXCcsIG9yIFxcJzR4XFwnJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuV2F2ZVNoYXBlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuV2F2ZVNoYXBlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRpbWVCYXNlIGlzIGEgZmxleGlibGUgZW5jb2Rpbmcgb2YgdGltZVxuXHRcdCAqICAgICAgICAgd2hpY2ggY2FuIGJlIGV2YWx1YXRlZCB0byBhbmQgZnJvbSBhIHN0cmluZy5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUgYXMgYSBudW1iZXIgb3Igc3RyaW5nXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVW5pdCB2YWx1ZXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRpbWVCYXNlKDQsIFwiblwiKVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoMiwgXCJ0XCIpXG5cdFx0ICogVG9uZS5UaW1lQmFzZShcIjJ0XCIpXG5cdFx0ICogVG9uZS5UaW1lQmFzZShcIjJ0XCIpICsgVG9uZS5UaW1lQmFzZShcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgLy9hbGxvd3MgaXQgdG8gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0ICduZXcnXG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHZhbHVlXG5cdFx0XHRcdCAqICBAdHlwZSAge051bWJlcnxTdHJpbmd8VG9uZS5UaW1lQmFzZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWw7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgdW5pdHNcblx0XHRcdFx0ICogQHR5cGUge1N0cmluZz99XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl91bml0cyA9IHVuaXRzO1xuXHQgICAgICAgICAgICAvL3Rlc3QgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbnVtYmVyXG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpcy5fdW5pdHMpICYmIFRvbmUuaXNTdHJpbmcodGhpcy5fdmFsKSAmJiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdCAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMuX3ZhbCkgPT0gdGhpcy5fdmFsICYmIHRoaXMuX3ZhbC5jaGFyQXQoMCkgIT09ICcrJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gcGFyc2VGbG9hdCh0aGlzLl92YWwpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB0aGlzLl9kZWZhdWx0VW5pdHM7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsICYmIHZhbC5jb25zdHJ1Y3RvciA9PT0gdGhpcy5jb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAgICAgLy9pZiB0aGV5J3JlIHRoZSBzYW1lIHR5cGUsIGp1c3QgY29weSB2YWx1ZXMgb3ZlclxuXHQgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLl92YWw7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl91bml0cyA9IHZhbC5fdW5pdHM7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9kZWZhdWx0VW5pdHMpIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b1NlY29uZHMoKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2knOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b1RpY2tzKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdoeic6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdtaWRpJzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9NaWRpKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIGRlZmF1bHQgdW5pdHMgJyArIHRoaXMuX2RlZmF1bHRVbml0cyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZUJhc2UodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZUJhc2UpO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QUJTVFJBQ1QgU1lOVEFYIFRSRUUgUEFSU0VSXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBBbGwgdGhlIHByaW1hcnkgZXhwcmVzc2lvbnMuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zID0ge1xuXHQgICAgICAgICduJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspbihcXC4/KSQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUsIGRvdCkge1xuXHQgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2NhbGFyID0gZG90ID09PSAnLicgPyAxLjUgOiAxO1xuXHQgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyh0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkpICogc2NhbGFyO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmVhdHNUb1VuaXRzKDQgLyB2YWx1ZSkgKiBzY2FsYXI7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICd0Jzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspdCQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyg4IC8gKHBhcnNlSW50KHZhbHVlKSAqIDMpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ20nOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyltJC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUludCh2YWx1ZSkgKiB0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnaSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKWkkL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja3NUb1VuaXRzKHBhcnNlSW50KHZhbHVlKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdoeic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KWh6JC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyZXF1ZW5jeVRvVW5pdHMocGFyc2VGbG9hdCh2YWx1ZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndHInOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPyk6KFxcZCsoPzpcXC5cXGQrKT8pOj8oXFxkKyg/OlxcLlxcZCspPyk/JC8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKG0sIHEsIHMpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IDA7XG5cdCAgICAgICAgICAgICAgICBpZiAobSAmJiBtICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLl9iZWF0c1RvVW5pdHModGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpICogcGFyc2VGbG9hdChtKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAocSAmJiBxICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VGbG9hdChxKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAocyAmJiBzICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VGbG9hdChzKSAvIDQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAncyc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KXMkLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWNvbmRzVG9Vbml0cyhwYXJzZUZsb2F0KHZhbHVlKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdzYW1wbGVzJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspc2FtcGxlcyQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKSAvIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnZGVmYXVsdCc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KSQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cHJlc3Npb25zW3RoaXMuX2RlZmF1bHRVbml0c10ubWV0aG9kLmNhbGwodGhpcywgdmFsdWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB1bml0cyBpZiBub25lIGFyZSBnaXZlbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAncyc7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUUkFOU1BPUlQgRkFMTEJBQ0tTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgYnBtLCBvciAxMjAgaWYgVHJhbnNwb3J0IGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZ2V0QnBtID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxMjA7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgdGltZVNpZ25hdHVyZSBvciA0IGlmIFRyYW5zcG9ydCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2dldFRpbWVTaWduYXR1cmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC50aW1lU2lnbmF0dXJlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiA0O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIFBQUSBvciAxOTIgaWYgVHJhbnNwb3J0IGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZ2V0UFBRID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQuUFBRO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxOTI7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgY3VycmVudCB0aW1lIGluIHdoaWNoZXZlciBjb250ZXh0IGlzIHJlbGV2YW50XG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX25vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5ub3coKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRVTklUIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIGZyZXF1ZW5jeSBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiAxIC8gZnJlcTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIDYwIC8gdGhpcy5fZ2V0QnBtKCkgKiBiZWF0cztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzZWNvbmQgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtTZWNvbmRzfSBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiBzZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiB0aWNrcyAqICh0aGlzLl9iZWF0c1RvVW5pdHMoMSkgLyB0aGlzLl9nZXRQUFEoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiAnbm93J1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX25vQXJnID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9ub3coKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRFWFBSRVNTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgRXZhbHVhdGUgdGhlIHRpbWUgdmFsdWUuIFJldHVybnMgdGhlIHRpbWVcblx0XHQgKiAgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpcy5fdmFsKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9BcmcoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcodGhpcy5fdmFsKSAmJiBUb25lLmlzVW5kZWYodGhpcy5fdW5pdHMpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIHVuaXRzIGluIHRoaXMuX2V4cHJlc3Npb25zKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbnNbdW5pdHNdLnJlZ2V4cC50ZXN0KHRoaXMuX3ZhbC50cmltKCkpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB1bml0cztcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodGhpcy5fdW5pdHMpKSB7XG5cdCAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5fZXhwcmVzc2lvbnNbdGhpcy5fdW5pdHNdO1xuXHQgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSB0aGlzLl92YWwudG9TdHJpbmcoKS50cmltKCkubWF0Y2goZXhwci5yZWdleHApO1xuXHQgICAgICAgICAgICBpZiAobWF0Y2hpbmcpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBleHByLm1ldGhvZC5hcHBseSh0aGlzLCBtYXRjaGluZy5zbGljZSgxKSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXhwci5tZXRob2QuY2FsbCh0aGlzLCBwYXJzZUZsb2F0KHRoaXMuX3ZhbCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBpbiBoZXJ0elxuXHRcdCAqICBAcmV0dXJuIHtGcmVxdWVuY3l9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIHRoaXMudG9TZWNvbmRzKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiBzYW1wbGVzXG5cdFx0ICogIEByZXR1cm4gIHtTYW1wbGVzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9TYW1wbGVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcygpICogdGhpcy5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiBtaWxsaXNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtNaWxsaXNlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b01pbGxpc2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHMoKSAqIDEwMDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuVGltZUJhc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fdmFsID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl91bml0cyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZUJhc2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GcmVxdWVuY3kgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgRnJlcXVlbmN5IHZhbHVlcy5cblx0XHQgKiAgICAgICAgIEV2ZW50dWFsbHkgYWxsIHRpbWUgdmFsdWVzIGFyZSBldmFsdWF0ZWQgdG8gaGVydHpcblx0XHQgKiAgICAgICAgIHVzaW5nIHRoZSBgZXZhbGAgbWV0aG9kLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZUJhc2V9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkMzXCIpIC8vIDI2MVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KDM4LCBcIm1pZGlcIikgLy9cblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkMzXCIpLnRyYW5zcG9zZSg0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5ID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuRnJlcXVlbmN5KSB7XG5cdCAgICAgICAgICAgIFRvbmUuVGltZUJhc2UuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuRnJlcXVlbmN5KHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZyZXF1ZW5jeSwgVG9uZS5UaW1lQmFzZSk7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBVUdNRU5UIEJBU0UgRVhQUkVTU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9leHByZXNzaW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9leHByZXNzaW9ucywge1xuXHQgICAgICAgICdtaWRpJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT9taWRpKS8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVsdFVuaXRzID09PSAnbWlkaScpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5tdG9mKHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ25vdGUnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oW2EtZ117MX0oPzpifCN8eHxiYik/KSgtP1swLTldKykvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAocGl0Y2gsIG9jdGF2ZSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gbm90ZVRvU2NhbGVJbmRleFtwaXRjaC50b0xvd2VyQ2FzZSgpXTtcblx0ICAgICAgICAgICAgICAgIHZhciBub3RlTnVtYmVyID0gaW5kZXggKyAocGFyc2VJbnQob2N0YXZlKSArIDEpICogMTI7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVsdFVuaXRzID09PSAnbWlkaScpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm90ZU51bWJlcjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5Lm10b2Yobm90ZU51bWJlcik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICd0cic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KTooXFxkKyg/OlxcLlxcZCspPyk6PyhcXGQrKD86XFwuXFxkKyk/KT8vLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChtLCBxLCBzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAxO1xuXHQgICAgICAgICAgICAgICAgaWYgKG0gJiYgbSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKj0gdGhpcy5fYmVhdHNUb1VuaXRzKHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSAqIHBhcnNlRmxvYXQobSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHEgJiYgcSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKj0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHMgJiYgcyAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKj0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocykgLyA0KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RVhQUkVTU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFRyYW5zcG9zZXMgdGhlIGZyZXF1ZW5jeSBieSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlbWl0b25lcy5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWx9ICBpbnRlcnZhbFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5GcmVxdWVuY3l9IEEgbmV3IHRyYW5zcG9zZWQgZnJlcXVlbmN5XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJBNFwiKS50cmFuc3Bvc2UoMyk7IC8vXCJDNVwiXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudHJhbnNwb3NlID0gZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMudmFsdWVPZigpICogVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oaW50ZXJ2YWwpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGFrZXMgYW4gYXJyYXkgb2Ygc2VtaXRvbmUgaW50ZXJ2YWxzIGFuZCByZXR1cm5zXG5cdFx0ICogIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzIHRyYW5zcG9zZWQgYnkgdGhvc2UgaW50ZXJ2YWxzLlxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIGludGVydmFsc1xuXHRcdCAqICBAcmV0dXJuICB7QXJyYXk8VG9uZS5GcmVxdWVuY3k+fSBSZXR1cm5zIGFuIGFycmF5IG9mIEZyZXF1ZW5jaWVzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJBNFwiKS5oYXJtb25pemUoWzAsIDMsIDddKTsgLy9bXCJBNFwiLCBcIkM1XCIsIFwiRTVcIl1cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5oYXJtb25pemUgPSBmdW5jdGlvbiAoaW50ZXJ2YWxzKSB7XG5cdCAgICAgICAgcmV0dXJuIGludGVydmFscy5tYXAoZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9zZShpbnRlcnZhbCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRVTklUIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgYXMgYSBNSURJIG5vdGVcblx0XHQgKiAgQHJldHVybiAge01JREl9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJDNFwiKS50b01pZGkoKTsgLy82MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvTWlkaSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbSh0aGlzLnZhbHVlT2YoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBpbiBTY2llbnRpZmljIFBpdGNoIE5vdGF0aW9uXG5cdFx0ICogIEByZXR1cm4gIHtOb3RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KDY5LCBcIm1pZGlcIikudG9Ob3RlKCk7IC8vXCJBNFwiXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9Ob3RlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBmcmVxID0gdGhpcy50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHZhciBsb2cgPSBNYXRoLmxvZzIoZnJlcSAvIFRvbmUuRnJlcXVlbmN5LkE0KTtcblx0ICAgICAgICB2YXIgbm90ZU51bWJlciA9IE1hdGgucm91bmQoMTIgKiBsb2cpICsgNTc7XG5cdCAgICAgICAgdmFyIG9jdGF2ZSA9IE1hdGguZmxvb3Iobm90ZU51bWJlciAvIDEyKTtcblx0ICAgICAgICBpZiAob2N0YXZlIDwgMCkge1xuXHQgICAgICAgICAgICBub3RlTnVtYmVyICs9IC0xMiAqIG9jdGF2ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIG5vdGVOYW1lID0gc2NhbGVJbmRleFRvTm90ZVtub3RlTnVtYmVyICUgMTJdO1xuXHQgICAgICAgIHJldHVybiBub3RlTmFtZSArIG9jdGF2ZS50b1N0cmluZygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGR1cmF0aW9uIG9mIG9uZSBjeWNsZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b1NlY29uZHMuY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBpbiBIZXJ0elxuXHRcdCAqICBAcmV0dXJuICB7RnJlcXVlbmN5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b0ZyZXF1ZW5jeS5jYWxsKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGR1cmF0aW9uIG9mIG9uZSBjeWNsZSBpbiB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcXVhcnRlclRpbWUgPSB0aGlzLl9iZWF0c1RvVW5pdHMoMSk7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJzID0gdGhpcy52YWx1ZU9mKCkgLyBxdWFydGVyVGltZTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihxdWFydGVycyAqIFRvbmUuVHJhbnNwb3J0LlBQUSk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VU5JVCBDT05WRVJTSU9OUyBIRUxQRVJTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBXaXRoIG5vIGFyZ3VtZW50cywgcmV0dXJuIDBcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fbm9BcmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgZnJlcXVlbmN5IGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiBmcmVxO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gMSAvICh0aWNrcyAqIDYwIC8gKFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZSAqIFRvbmUuVHJhbnNwb3J0LlBQUSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBiZWF0cyBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gYmVhdHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzLmNhbGwodGhpcywgYmVhdHMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiAxIC8gc2Vjb25kcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2RlZmF1bHRVbml0cyA9ICdoeic7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRGUkVRVUVOQ1kgQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIE5vdGUgdG8gc2NhbGUgaW5kZXhcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICB2YXIgbm90ZVRvU2NhbGVJbmRleCA9IHtcblx0ICAgICAgICAnY2JiJzogLTIsXG5cdCAgICAgICAgJ2NiJzogLTEsXG5cdCAgICAgICAgJ2MnOiAwLFxuXHQgICAgICAgICdjIyc6IDEsXG5cdCAgICAgICAgJ2N4JzogMixcblx0ICAgICAgICAnZGJiJzogMCxcblx0ICAgICAgICAnZGInOiAxLFxuXHQgICAgICAgICdkJzogMixcblx0ICAgICAgICAnZCMnOiAzLFxuXHQgICAgICAgICdkeCc6IDQsXG5cdCAgICAgICAgJ2ViYic6IDIsXG5cdCAgICAgICAgJ2ViJzogMyxcblx0ICAgICAgICAnZSc6IDQsXG5cdCAgICAgICAgJ2UjJzogNSxcblx0ICAgICAgICAnZXgnOiA2LFxuXHQgICAgICAgICdmYmInOiAzLFxuXHQgICAgICAgICdmYic6IDQsXG5cdCAgICAgICAgJ2YnOiA1LFxuXHQgICAgICAgICdmIyc6IDYsXG5cdCAgICAgICAgJ2Z4JzogNyxcblx0ICAgICAgICAnZ2JiJzogNSxcblx0ICAgICAgICAnZ2InOiA2LFxuXHQgICAgICAgICdnJzogNyxcblx0ICAgICAgICAnZyMnOiA4LFxuXHQgICAgICAgICdneCc6IDksXG5cdCAgICAgICAgJ2FiYic6IDcsXG5cdCAgICAgICAgJ2FiJzogOCxcblx0ICAgICAgICAnYSc6IDksXG5cdCAgICAgICAgJ2EjJzogMTAsXG5cdCAgICAgICAgJ2F4JzogMTEsXG5cdCAgICAgICAgJ2JiYic6IDksXG5cdCAgICAgICAgJ2JiJzogMTAsXG5cdCAgICAgICAgJ2InOiAxMSxcblx0ICAgICAgICAnYiMnOiAxMixcblx0ICAgICAgICAnYngnOiAxM1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzY2FsZSBpbmRleCB0byBub3RlIChzaGFycHMpXG5cdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgc2NhbGVJbmRleFRvTm90ZSA9IFtcblx0ICAgICAgICAnQycsXG5cdCAgICAgICAgJ0MjJyxcblx0ICAgICAgICAnRCcsXG5cdCAgICAgICAgJ0QjJyxcblx0ICAgICAgICAnRScsXG5cdCAgICAgICAgJ0YnLFxuXHQgICAgICAgICdGIycsXG5cdCAgICAgICAgJ0cnLFxuXHQgICAgICAgICdHIycsXG5cdCAgICAgICAgJ0EnLFxuXHQgICAgICAgICdBIycsXG5cdCAgICAgICAgJ0InXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBbY29uY2VydCBwaXRjaF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29uY2VydF9waXRjaClcblx0XHQgKiAgQTQncyB2YWx1ZXMgaW4gSGVydHouXG5cdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LkE0ID0gNDQwO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBNSURJIG5vdGUgdG8gZnJlcXVlbmN5IHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtNSURJfSBtaWRpIFRoZSBtaWRpIG51bWJlciB0byBjb252ZXJ0LlxuXHRcdCAqICBAcmV0dXJuIHtGcmVxdWVuY3l9IHRoZSBjb3JyZXNwb25kaW5nIGZyZXF1ZW5jeSB2YWx1ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3kubXRvZig2OSk7IC8vIHJldHVybnMgNDQwXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5tdG9mID0gZnVuY3Rpb24gKG1pZGkpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuQTQgKiBNYXRoLnBvdygyLCAobWlkaSAtIDY5KSAvIDEyKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIGZyZXF1ZW5jeSB2YWx1ZSB0byBhIE1JREkgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgdmFsdWUgdG8gZnJlcXVlbmN5IHZhbHVlIHRvIGNvbnZlcnQuXG5cdFx0ICogIEByZXR1cm5zICB7TUlESX1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5LmZ0b20oNDQwKTsgLy8gcmV0dXJucyA2OVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kuZnRvbSA9IGZ1bmN0aW9uIChmcmVxdWVuY3kpIHtcblx0ICAgICAgICByZXR1cm4gNjkgKyBNYXRoLnJvdW5kKDEyICogTWF0aC5sb2cyKGZyZXF1ZW5jeSAvIFRvbmUuRnJlcXVlbmN5LkE0KSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVGltZSBpcyBhIHByaW1pdGl2ZSB0eXBlIGZvciBlbmNvZGluZyBUaW1lIHZhbHVlcy5cblx0XHQgKiAgICAgICAgIFRvbmUuVGltZSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0IHRoZSBgbmV3YCBrZXl3b3JkLiBUb25lLlRpbWUgY2FuIGJlIHBhc3NlZFxuXHRcdCAqICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIG9mIGFueSBtZXRob2Qgd2hpY2ggdGFrZXMgdGltZSBhcyBhbiBhcmd1bWVudC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWVCYXNlfVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHQgPSBUb25lLlRpbWUoXCI0blwiKTsvL2EgcXVhcnRlciBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UaW1lKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVGltZUJhc2UuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaW1lLCBUb25lLlRpbWVCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIEV4dGVuZCB0aGUgYmFzZSBleHByZXNzaW9uc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMsIHtcblx0ICAgICAgICAncXVhbnRpemUnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL15AKC4rKS8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKGNhcHR1cmUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBxdWFudFRvID0gbmV3IHRoaXMuY29uc3RydWN0b3IoY2FwdHVyZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0Lm5leHRTdWJkaXZpc2lvbihxdWFudFRvKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdub3cnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL15cXCsoLispLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAoY2FwdHVyZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdygpICsgbmV3IHRoaXMuY29uc3RydWN0b3IoY2FwdHVyZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBRdWFudGl6ZSB0aGUgdGltZSBieSB0aGUgZ2l2ZW4gc3ViZGl2aXNpb24uIE9wdGlvbmFsbHkgYWRkIGFcblx0XHQgKiAgcGVyY2VudGFnZSB3aGljaCB3aWxsIG1vdmUgdGhlIHRpbWUgdmFsdWUgdG93YXJkcyB0aGUgaWRlYWxcblx0XHQgKiAgcXVhbnRpemVkIHZhbHVlIGJ5IHRoYXQgcGVyY2VudGFnZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfFRpbWV9ICB2YWwgICAgVGhlIHN1YmRpdmlzaW9uIHRvIHF1YW50aXplIHRvXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSAgW3BlcmNlbnQ9MV0gIE1vdmUgdGhlIHRpbWUgdmFsdWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG93YXJkcyB0aGUgcXVhbnRpemVkIHZhbHVlIGJ5XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcGVyY2VudGFnZS5cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRpbWUoMjEpLnF1YW50aXplKDIpIC8vcmV0dXJucyAyMlxuXHRcdCAqIFRvbmUuVGltZSgwLjYpLnF1YW50aXplKFwiNG5cIiwgMC41KSAvL3JldHVybnMgMC41NVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS5xdWFudGl6ZSA9IGZ1bmN0aW9uIChzdWJkaXYsIHBlcmNlbnQpIHtcblx0ICAgICAgICBwZXJjZW50ID0gVG9uZS5kZWZhdWx0QXJnKHBlcmNlbnQsIDEpO1xuXHQgICAgICAgIHZhciBzdWJkaXZpc2lvbiA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHN1YmRpdik7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICAgICAgdmFyIG11bHRpcGxlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHN1YmRpdmlzaW9uKTtcblx0ICAgICAgICB2YXIgaWRlYWwgPSBtdWx0aXBsZSAqIHN1YmRpdmlzaW9uO1xuXHQgICAgICAgIHZhciBkaWZmID0gaWRlYWwgLSB2YWx1ZTtcblx0ICAgICAgICByZXR1cm4gdmFsdWUgKyBkaWZmICogcGVyY2VudDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgVGltZSB0byBOb3RhdGlvbi4gVGhlIG5vdGF0aW9uIHZhbHVlcyBhcmUgd2lsbCBiZSB0aGVcblx0XHQgKiAgY2xvc2VzdCByZXByZXNlbnRhdGlvbiBiZXR3ZWVuIDFtIHRvIDEyOHRoIG5vdGUuXG5cdFx0ICogIEByZXR1cm4ge05vdGF0aW9ufVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaWYgdGhlIFRyYW5zcG9ydCBpcyBhdCAxMjBicG06XG5cdFx0ICogVG9uZS5UaW1lKDIpLnRvTm90YXRpb24oKTsvL3JldHVybnMgXCIxbVwiXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvTm90YXRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHRpbWUgPSB0aGlzLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIHZhciB0ZXN0Tm90YXRpb25zID0gWycxbSddO1xuXHQgICAgICAgIGZvciAodmFyIHBvd2VyID0gMTsgcG93ZXIgPCA4OyBwb3dlcisrKSB7XG5cdCAgICAgICAgICAgIHZhciBzdWJkaXYgPSBNYXRoLnBvdygyLCBwb3dlcik7XG5cdCAgICAgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaChzdWJkaXYgKyAnbi4nKTtcblx0ICAgICAgICAgICAgdGVzdE5vdGF0aW9ucy5wdXNoKHN1YmRpdiArICduJyk7XG5cdCAgICAgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaChzdWJkaXYgKyAndCcpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goJzAnKTtcblx0ICAgICAgICAvL2ZpbmQgdGhlIGNsb3NldHMgbm90YXRpb24gcmVwcmVzZW50YXRpb25cblx0ICAgICAgICB2YXIgY2xvc2VzdCA9IHRlc3ROb3RhdGlvbnNbMF07XG5cdCAgICAgICAgdmFyIGNsb3Nlc3RTZWNvbmRzID0gVG9uZS5UaW1lKHRlc3ROb3RhdGlvbnNbMF0pLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIHRlc3ROb3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobm90YXRpb24pIHtcblx0ICAgICAgICAgICAgdmFyIG5vdGF0aW9uU2Vjb25kcyA9IFRvbmUuVGltZShub3RhdGlvbikudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyhub3RhdGlvblNlY29uZHMgLSB0aW1lKSA8IE1hdGguYWJzKGNsb3Nlc3RTZWNvbmRzIC0gdGltZSkpIHtcblx0ICAgICAgICAgICAgICAgIGNsb3Nlc3QgPSBub3RhdGlvbjtcblx0ICAgICAgICAgICAgICAgIGNsb3Nlc3RTZWNvbmRzID0gbm90YXRpb25TZWNvbmRzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIGNsb3Nlc3Q7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBlbmNvZGVkIGFzIEJhcnM6QmVhdHM6U2l4dGVlbnRocy5cblx0XHQgKiAgQHJldHVybiAge0JhcnNCZWF0c1NpeHRlZW50aHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvQmFyc0JlYXRzU2l4dGVlbnRocyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcXVhcnRlclRpbWUgPSB0aGlzLl9iZWF0c1RvVW5pdHMoMSk7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJzID0gdGhpcy52YWx1ZU9mKCkgLyBxdWFydGVyVGltZTtcblx0ICAgICAgICB2YXIgbWVhc3VyZXMgPSBNYXRoLmZsb29yKHF1YXJ0ZXJzIC8gdGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpKTtcblx0ICAgICAgICB2YXIgc2l4dGVlbnRocyA9IHF1YXJ0ZXJzICUgMSAqIDQ7XG5cdCAgICAgICAgcXVhcnRlcnMgPSBNYXRoLmZsb29yKHF1YXJ0ZXJzKSAlIHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKTtcblx0ICAgICAgICBzaXh0ZWVudGhzID0gc2l4dGVlbnRocy50b1N0cmluZygpO1xuXHQgICAgICAgIGlmIChzaXh0ZWVudGhzLmxlbmd0aCA+IDMpIHtcblx0ICAgICAgICAgICAgLy8gdGhlIGFkZGl0aW9uYWwgcGFyc2VGbG9hdCByZW1vdmVzIGluc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb2VzXG5cdCAgICAgICAgICAgIHNpeHRlZW50aHMgPSBwYXJzZUZsb2F0KHBhcnNlRmxvYXQoc2l4dGVlbnRocykudG9GaXhlZCgzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBwcm9ncmVzcyA9IFtcblx0ICAgICAgICAgICAgbWVhc3VyZXMsXG5cdCAgICAgICAgICAgIHF1YXJ0ZXJzLFxuXHQgICAgICAgICAgICBzaXh0ZWVudGhzXG5cdCAgICAgICAgXTtcblx0ICAgICAgICByZXR1cm4gcHJvZ3Jlc3Muam9pbignOicpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gdGlja3MuXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcXVhcnRlclRpbWUgPSB0aGlzLl9iZWF0c1RvVW5pdHMoMSk7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJzID0gdGhpcy52YWx1ZU9mKCkgLyBxdWFydGVyVGltZTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChxdWFydGVycyAqIHRoaXMuX2dldFBQUSgpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIGFzIGEgbWlkaSBub3RlLlxuXHRcdCAqICBAcmV0dXJuICB7TWlkaX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9NaWRpID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKHRoaXMudG9GcmVxdWVuY3koKSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyYW5zcG9ydFRpbWUgaXMgYSB0aGUgdGltZSBhbG9uZyB0aGUgVHJhbnNwb3J0J3Ncblx0XHQgKiAgICAgICAgIHRpbWVsaW5lLiBJdCBpcyBzaW1pbGFyIHRvIFRvbmUuVGltZSwgYnV0IGluc3RlYWQgb2YgZXZhbHVhdGluZ1xuXHRcdCAqICAgICAgICAgYWdhaW5zdCB0aGUgQXVkaW9Db250ZXh0J3MgY2xvY2ssIGl0IGlzIGV2YWx1YXRlZCBhZ2FpbnN0XG5cdFx0ICogICAgICAgICB0aGUgVHJhbnNwb3J0J3MgcG9zaXRpb24uIFNlZSBbVHJhbnNwb3J0VGltZSB3aWtpXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9UcmFuc3BvcnRUaW1lKS5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUgYXMgYSBudW1iZXIgb3Igc3RyaW5nXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVW5pdCB2YWx1ZXNcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRyYW5zcG9ydFRpbWUpIHtcblx0ICAgICAgICAgICAgVG9uZS5UaW1lLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRyYW5zcG9ydFRpbWUodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0VGltZSwgVG9uZS5UaW1lKTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgY3VycmVudCB0aW1lIGluIHdoaWNoZXZlciBjb250ZXh0IGlzIHJlbGV2YW50XG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lLnByb3RvdHlwZS5fbm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC5zZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydFRpbWU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRZUEVTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqIFVuaXRzIHdoaWNoIGEgdmFsdWUgY2FuIHRha2Ugb24uXG5cdFx0ICogQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuVHlwZSA9IHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBEZWZhdWx0IHVuaXRzXG5cdFx0XHQgKiAgQHR5cGVkZWYge0RlZmF1bHR9XG5cdFx0XHQgKi9cblx0ICAgICAgICBEZWZhdWx0OiAnbnVtYmVyJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaW1lIGNhbiBiZSBkZXNjcmliZWQgaW4gYSBudW1iZXIgb2Ygd2F5cy4gUmVhZCBtb3JlIFtUaW1lXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9UaW1lKS5cblx0XHRcdCAqXG5cdFx0XHQgKiAgKiBOdW1iZXJzLCB3aGljaCB3aWxsIGJlIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgdGltZSAoaW4gc2Vjb25kcykuXG5cdFx0XHQgKiAgKiBOb3RhdGlvbiwgKFwiNG5cIiwgXCI4dFwiKSBkZXNjcmliZXMgdGltZSBpbiBCUE0gYW5kIHRpbWUgc2lnbmF0dXJlIHJlbGF0aXZlIHZhbHVlcy5cblx0XHRcdCAqICAqIFRyYW5zcG9ydFRpbWUsIChcIjQ6MzoyXCIpIHdpbGwgYWxzbyBwcm92aWRlIHRlbXBvIGFuZCB0aW1lIHNpZ25hdHVyZSByZWxhdGl2ZSB0aW1lc1xuXHRcdFx0ICogIGluIHRoZSBmb3JtIEJBUlM6UVVBUlRFUlM6U0lYVEVFTlRIUy5cblx0XHRcdCAqICAqIEZyZXF1ZW5jeSwgKFwiOGh6XCIpIGlzIGNvbnZlcnRlZCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjeWNsZSBpbiBzZWNvbmRzLlxuXHRcdFx0ICogICogTm93LVJlbGF0aXZlLCAoXCIrMVwiKSBwcmVmaXggYW55IG9mIHRoZSBhYm92ZSB3aXRoIFwiK1wiIGFuZCBpdCB3aWxsIGJlIGludGVycHJldGVkIGFzXG5cdFx0XHQgKiAgXCJ0aGUgY3VycmVudCB0aW1lIHBsdXMgd2hhdGV2ZXIgZXhwcmVzc2lvbiBmb2xsb3dzXCIuXG5cdFx0XHQgKiAgKiBFeHByZXNzaW9ucywgKFwiMzowICsgMiAtICgxbSAvIDcpXCIpIGFueSBvZiB0aGUgYWJvdmUgY2FuIGFsc28gYmUgY29tYmluZWRcblx0XHRcdCAqICBpbnRvIGEgbWF0aGVtYXRpY2FsIGV4cHJlc3Npb24gd2hpY2ggd2lsbCBiZSBldmFsdWF0ZWQgdG8gY29tcHV0ZSB0aGUgZGVzaXJlZCB0aW1lLlxuXHRcdFx0ICogICogTm8gQXJndW1lbnQsIGZvciBtZXRob2RzIHdoaWNoIGFjY2VwdCB0aW1lLCBubyBhcmd1bWVudCB3aWxsIGJlIGludGVycHJldGVkIGFzXG5cdFx0XHQgKiAgXCJub3dcIiAoaS5lLiB0aGUgY3VycmVudFRpbWUpLlxuXHRcdFx0ICpcblx0XHRcdCAqICBAdHlwZWRlZiB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIFRpbWU6ICd0aW1lJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBGcmVxdWVuY3kgY2FuIGJlIGRlc2NyaWJlZCBzaW1pbGFyIHRvIHRpbWUsIGV4Y2VwdCB1bHRpbWF0ZWx5IHRoZVxuXHRcdFx0ICogIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIGZyZXF1ZW5jeSBpbnN0ZWFkIG9mIHNlY29uZHMuIEEgbnVtYmVyXG5cdFx0XHQgKiAgaXMgdGFrZW4gbGl0ZXJhbGx5IGFzIHRoZSB2YWx1ZSBpbiBoZXJ0ei4gQWRkaXRpb25hbGx5IGFueSBvZiB0aGVcblx0XHRcdCAqICBUaW1lIGVuY29kaW5ncyBjYW4gYmUgdXNlZC4gTm90ZSBuYW1lcyBpbiB0aGUgZm9ybVxuXHRcdFx0ICogIG9mIE5PVEUgT0NUQVZFIChpLmUuIEM0KSBhcmUgYWxzbyBhY2NlcHRlZCBhbmQgY29udmVydGVkIHRvIHRoZWlyXG5cdFx0XHQgKiAgZnJlcXVlbmN5IHZhbHVlLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtGcmVxdWVuY3l9XG5cdFx0XHQgKi9cblx0ICAgICAgICBGcmVxdWVuY3k6ICdmcmVxdWVuY3knLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRyYW5zcG9ydFRpbWUgZGVzY3JpYmVzIGEgcG9zaXRpb24gYWxvbmcgdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lLiBJdCBpc1xuXHRcdFx0ICogIHNpbWlsYXIgdG8gVGltZSBpbiB0aGF0IGl0IHVzZXMgYWxsIHRoZSBzYW1lIGVuY29kaW5ncywgYnV0IFRyYW5zcG9ydFRpbWUgc3BlY2lmaWNhbGx5XG5cdFx0XHQgKiAgcGVydGFpbnMgdG8gdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lLCB3aGljaCBpcyBzdGFydGFibGUsIHN0b3BwYWJsZSwgbG9vcGFibGUsIGFuZCBzZWVrYWJsZS5cblx0XHRcdCAqICBbUmVhZCBtb3JlXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9UcmFuc3BvcnRUaW1lKVxuXHRcdFx0ICogIEB0eXBlZGVmIHtUcmFuc3BvcnRUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgVHJhbnNwb3J0VGltZTogJ3RyYW5zcG9ydFRpbWUnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRpY2tzIGFyZSB0aGUgYmFzaWMgc3VidW5pdCBvZiB0aGUgVHJhbnNwb3J0LiBUaGV5IGFyZVxuXHRcdFx0ICogIHRoZSBzbWFsbGVzdCB1bml0IG9mIHRpbWUgdGhhdCB0aGUgVHJhbnNwb3J0IHN1cHBvcnRzLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtUaWNrc31cblx0XHRcdCAqL1xuXHQgICAgICAgIFRpY2tzOiAndGlja3MnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE5vcm1hbCB2YWx1ZXMgYXJlIHdpdGhpbiB0aGUgcmFuZ2UgWzAsIDFdLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIE5vcm1hbFJhbmdlOiAnbm9ybWFsUmFuZ2UnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEF1ZGlvUmFuZ2UgdmFsdWVzIGFyZSBiZXR3ZWVuIFstMSwgMV0uXG5cdFx0XHQgKiAgQHR5cGVkZWYge0F1ZGlvUmFuZ2V9XG5cdFx0XHQgKi9cblx0ICAgICAgICBBdWRpb1JhbmdlOiAnYXVkaW9SYW5nZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRGVjaWJlbHMgYXJlIGEgbG9nYXJpdGhtaWMgdW5pdCBvZiBtZWFzdXJlbWVudCB3aGljaCBpcyB1c2VmdWwgZm9yIHZvbHVtZVxuXHRcdFx0ICogIGJlY2F1c2Ugb2YgdGhlIGxvZ2FyaXRobWljIHdheSB0aGF0IHdlIHBlcmNlaXZlIGxvdWRuZXNzLiAwIGRlY2liZWxzXG5cdFx0XHQgKiAgbWVhbnMgbm8gY2hhbmdlIGluIHZvbHVtZS4gLTEwZGIgaXMgYXBwcm94aW1hdGVseSBoYWxmIGFzIGxvdWQgYW5kIDEwZGJcblx0XHRcdCAqICBpcyB0d2ljZSBpcyBsb3VkLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtEZWNpYmVsc31cblx0XHRcdCAqL1xuXHQgICAgICAgIERlY2liZWxzOiAnZGInLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhbGYtc3RlcCBub3RlIGluY3JlbWVudHMsIGkuZS4gMTIgaXMgYW4gb2N0YXZlIGFib3ZlIHRoZSByb290LiBhbmQgMSBpcyBhIGhhbGYtc3RlcCB1cC5cblx0XHRcdCAqICBAdHlwZWRlZiB7SW50ZXJ2YWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICBJbnRlcnZhbDogJ2ludGVydmFsJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBCZWF0cyBwZXIgbWludXRlLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtCUE19XG5cdFx0XHQgKi9cblx0ICAgICAgICBCUE06ICdicG0nLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIFBvc2l0aXZlOiAncG9zaXRpdmUnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEdhaW4gaXMgdGhlIHJhdGlvIGJldHdlZW4gaW5wdXQgYW5kIG91dHB1dCBvZiBhIHNpZ25hbC5cblx0XHRcdCAqICBBIGdhaW4gb2YgMCBpcyB0aGUgc2FtZSBhcyBzaWxlbmNpbmcgdGhlIHNpZ25hbC4gQSBnYWluIG9mXG5cdFx0XHQgKiAgMSwgY2F1c2VzIG5vIGNoYW5nZSB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtHYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgR2FpbjogJ2dhaW4nLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgY2VudCBpcyBhIGh1bmRyZWR0aCBvZiBhIHNlbWl0b25lLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtDZW50c31cblx0XHRcdCAqL1xuXHQgICAgICAgIENlbnRzOiAnY2VudHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuZ2xlIGJldHdlZW4gMCBhbmQgMzYwLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtEZWdyZWVzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgRGVncmVlczogJ2RlZ3JlZXMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgbnVtYmVyIHJlcHJlc2VudGluZyBhIG1pZGkgbm90ZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7TUlESX1cblx0XHRcdCAqL1xuXHQgICAgICAgIE1JREk6ICdtaWRpJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGNvbG9uLXNlcGFyYXRlZCByZXByZXNlbnRhdGlvbiBvZiB0aW1lIGluIHRoZSBmb3JtIG9mXG5cdFx0XHQgKiAgQmFyczpCZWF0czpTaXh0ZWVudGhzLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtCYXJzQmVhdHNTaXh0ZWVudGhzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQmFyc0JlYXRzU2l4dGVlbnRoczogJ2JhcnNCZWF0c1NpeHRlZW50aHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNhbXBsaW5nIGlzIHRoZSByZWR1Y3Rpb24gb2YgYSBjb250aW51b3VzIHNpZ25hbCB0byBhIGRpc2NyZXRlIHNpZ25hbC5cblx0XHRcdCAqICBBdWRpbyBpcyB0eXBpY2FsbHkgc2FtcGxlZCA0NDEwMCB0aW1lcyBwZXIgc2Vjb25kLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtTYW1wbGVzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgU2FtcGxlczogJ3NhbXBsZXMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhlcnR6IGFyZSBhIGZyZXF1ZW5jeSByZXByZXNlbnRhdGlvbiBkZWZpbmVkIGFzIG9uZSBjeWNsZSBwZXIgc2Vjb25kLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtIZXJ0en1cblx0XHRcdCAqL1xuXHQgICAgICAgIEhlcnR6OiAnaGVydHonLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgZnJlcXVlbmN5IHJlcHJlc2VudGVkIGJ5IGEgbGV0dGVyIG5hbWUsXG5cdFx0XHQgKiAgYWNjaWRlbnRhbCBhbmQgb2N0YXZlLiBUaGlzIHN5c3RlbSBpcyBrbm93biBhc1xuXHRcdFx0ICogIFtTY2llbnRpZmljIFBpdGNoIE5vdGF0aW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TY2llbnRpZmljX3BpdGNoX25vdGF0aW9uKS5cblx0XHRcdCAqICBAdHlwZWRlZiB7Tm90ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIE5vdGU6ICdub3RlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBPbmUgbWlsbGlzZWNvbmQgaXMgYSB0aG91c2FuZHRoIG9mIGEgc2Vjb25kLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtNaWxsaXNlY29uZHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBNaWxsaXNlY29uZHM6ICdtaWxsaXNlY29uZHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNlY29uZHMgYXJlIHRoZSB0aW1lIHVuaXQgb2YgdGhlIEF1ZGlvQ29udGV4dC4gSW4gdGhlIGVuZCxcblx0XHRcdCAqICBhbGwgdmFsdWVzIG5lZWQgdG8gYmUgZXZhbHVhdGVkIHRvIHNlY29uZHMuXG5cdFx0XHQgKiAgQHR5cGVkZWYge1NlY29uZHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBTZWNvbmRzOiAnc2Vjb25kcycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZHVyYXRpb24gcmVsYXRpdmUgdG8gYSBtZWFzdXJlLlxuXHRcdFx0ICogICogXCI0blwiID0gcXVhcnRlciBub3RlXG5cdFx0XHQgKiAgKiBcIjJtXCIgPSB0d28gbWVhc3VyZXNcblx0XHRcdCAqICAqIFwiOHRcIiA9IGVpZ2h0aC1ub3RlIHRyaXBsZXRcblx0XHRcdCAqICBAdHlwZWRlZiB7Tm90YXRpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICBOb3RhdGlvbjogJ25vdGF0aW9uJ1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gQVVHTUVOVCBUT05FJ3MgUFJPVE9UWVBFXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IFRpbWUgaW50byBzZWNvbmRzLlxuXHRcdCAqXG5cdFx0ICogIFVubGlrZSB0aGUgbWV0aG9kIHdoaWNoIGl0IG92ZXJyaWRlcywgdGhpcyB0YWtlcyBpbnRvIGFjY291bnRcblx0XHQgKiAgdHJhbnNwb3J0dGltZSBhbmQgbXVzaWNhbCBub3RhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBUaW1lIDogMS40MFxuXHRcdCAqICBOb3RhdGlvbjogNG4gb3IgMW0gb3IgMnRcblx0XHQgKiAgTm93IFJlbGF0aXZlOiArM25cblx0XHQgKiAgTWF0aDogM24rMTZuIG9yIGV2ZW4gY29tcGxpY2F0ZWQgZXhwcmVzc2lvbnMgKCgzbioyKS82ICsgMSlcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm4ge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aW1lO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1VuZGVmKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm5vdygpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyh0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZSh0aW1lKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRpbWUgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aW1lLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIGZyZXF1ZW5jeSByZXByZXNlbnRhdGlvbiBpbnRvIGEgbnVtYmVyLlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiB7SGVydHp9ICAgICAgdGhlIGZyZXF1ZW5jeSBpbiBoZXJ0elxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9GcmVxdWVuY3kgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGZyZXEpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmcmVxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhmcmVxKSB8fCBUb25lLmlzVW5kZWYoZnJlcSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLkZyZXF1ZW5jeShmcmVxKS52YWx1ZU9mKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChmcmVxIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gZnJlcS50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIHRpbWUgcmVwcmVzZW50YXRpb24gaW50byB0aWNrcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJuIHtUaWNrc30gIHRoZSB0aW1lIGluIHRpY2tzXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b1RpY2tzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcih0aW1lKSB8fCBUb25lLmlzU3RyaW5nKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpLnRvVGlja3MoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQudGlja3M7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aW1lIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGltZS50b1RpY2tzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYXJhbSB3cmFwcyB0aGUgbmF0aXZlIFdlYiBBdWRpbydzIEF1ZGlvUGFyYW0gdG8gcHJvdmlkZVxuXHRcdCAqICAgICAgICAgYWRkaXRpb25hbCB1bml0IGNvbnZlcnNpb24gZnVuY3Rpb25hbGl0eS4gSXQgYWxzb1xuXHRcdCAqICAgICAgICAgc2VydmVzIGFzIGEgYmFzZS1jbGFzcyBmb3IgY2xhc3NlcyB3aGljaCBoYXZlIGEgc2luZ2xlLFxuXHRcdCAqICAgICAgICAgYXV0b21hdGFibGUgcGFyYW1ldGVyLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvUGFyYW19ICBwYXJhbSAgVGhlIHBhcmFtZXRlciB0byB3cmFwLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlR5cGV9IHVuaXRzIFRoZSB1bml0cyBvZiB0aGUgYXVkaW8gcGFyYW0uXG5cdFx0ICogIEBwYXJhbSAge0Jvb2xlYW59IGNvbnZlcnQgSWYgdGhlIHBhcmFtIHNob3VsZCBiZSBjb252ZXJ0ZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3BhcmFtJyxcblx0ICAgICAgICAgICAgJ3VuaXRzJyxcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnXG5cdCAgICAgICAgXSwgVG9uZS5QYXJhbSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbmF0aXZlIHBhcmFtZXRlciB0byBjb250cm9sXG5cdFx0XHQgKiAgQHR5cGUgIHtBdWRpb1BhcmFtfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXQgPSBvcHRpb25zLnBhcmFtO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB1bml0cyBvZiB0aGUgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVHlwZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudW5pdHMgPSBvcHRpb25zLnVuaXRzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIHRoZSB2YWx1ZSBzaG91bGQgYmUgY29udmVydGVkIG9yIG5vdFxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jb252ZXJ0ID0gb3B0aW9ucy5jb252ZXJ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRydWUgaWYgdGhlIHNpZ25hbCB2YWx1ZSBpcyBiZWluZyBvdmVycmlkZGVuIGJ5XG5cdFx0XHQgKiAgYSBjb25uZWN0ZWQgc2lnbmFsLlxuXHRcdFx0ICogIEByZWFkT25seVxuXHRcdFx0ICogIEB0eXBlICB7Ym9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdmVycmlkZGVuID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdGltZWxpbmUgd2hpY2ggdHJhY2tzIGFsbCBvZiB0aGUgYXV0b21hdGlvbnMuXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBuZXcgVG9uZS5UaW1lbGluZSgxMDAwKTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQob3B0aW9ucy52YWx1ZSkgJiYgdGhpcy5fcGFyYW0pIHtcblx0ICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFyYW0sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWZhdWx0LFxuXHQgICAgICAgICdjb252ZXJ0JzogdHJ1ZSxcblx0ICAgICAgICAncGFyYW0nOiB1bmRlZmluZWRcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhcmFtI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcmFtLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvVW5pdHModGhpcy5nZXRWYWx1ZUF0VGltZShub3cpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2luaXRpYWxWYWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgICAgIHRoaXMuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRoaXMuY29udGV4dC5jdXJyZW50VGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVBdFRpbWUodmFsdWUsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSBvdXRwdXQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhcmFtI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcmFtLnByb3RvdHlwZSwgJ21pblZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLlRpbWUgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkZyZXF1ZW5jeSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuTm9ybWFsUmFuZ2UgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLlBvc2l0aXZlIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5CUE0pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5BdWRpb1JhbmdlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkRlY2liZWxzKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLUluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmFtLm1pblZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhcmFtI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcmFtLnByb3RvdHlwZSwgJ21heFZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLk5vcm1hbFJhbmdlIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5BdWRpb1JhbmdlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJhbS5tYXhWYWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIHR5cGUgc3BlY2lmaWVkIGJ5IFRvbmUuUGFyYW0udW5pdHNcblx0XHQgKiAgaW50byB0aGUgZGVzdGluYXRpb24gdmFsdWUgKHN1Y2ggYXMgR2FpbiBvciBGcmVxdWVuY3kpLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHsqfSB2YWwgdGhlIHZhbHVlIHRvIGNvbnZlcnRcblx0XHQgKiAgQHJldHVybiB7bnVtYmVyfSAgICAgdGhlIG51bWJlciB3aGljaCB0aGUgdmFsdWUgc2hvdWxkIGJlIHNldCB0b1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2Zyb21Vbml0cyA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAoKHRoaXMuY29udmVydCB8fCBUb25lLmlzVW5kZWYodGhpcy5jb252ZXJ0KSkgJiYgIXRoaXMub3ZlcnJpZGRlbikge1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudW5pdHMpIHtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuVGltZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcyh2YWwpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5GcmVxdWVuY3k6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0ZyZXF1ZW5jeSh2YWwpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5EZWNpYmVsczpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmRiVG9HYWluKHZhbCk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLk5vcm1hbFJhbmdlOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbCwgMCksIDEpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5BdWRpb1JhbmdlOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbCwgLTEpLCAxKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuUG9zaXRpdmU6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodmFsLCAwKTtcblx0ICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDb252ZXJ0IHRoZSBwYXJhbWV0ZXJzIHZhbHVlIGludG8gdGhlIHVuaXRzIHNwZWNpZmllZCBieSBUb25lLlBhcmFtLnVuaXRzLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtICB7bnVtYmVyfSB2YWwgdGhlIHZhbHVlIHRvIGNvbnZlcnRcblx0XHQgKiBAcmV0dXJuIHtudW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fdG9Vbml0cyA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAodGhpcy5jb252ZXJ0IHx8IFRvbmUuaXNVbmRlZih0aGlzLmNvbnZlcnQpKSB7XG5cdCAgICAgICAgICAgIHN3aXRjaCAodGhpcy51bml0cykge1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5EZWNpYmVsczpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmdhaW5Ub0RiKHZhbCk7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZVxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX21pbk91dHB1dCA9IDAuMDAwMDE7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGV2ZW50IHR5cGVzXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlID0ge1xuXHQgICAgICAgIExpbmVhcjogJ2xpbmVhclJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICBFeHBvbmVudGlhbDogJ2V4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgIFRhcmdldDogJ3NldFRhcmdldEF0VGltZScsXG5cdCAgICAgICAgU2V0VmFsdWU6ICdzZXRWYWx1ZUF0VGltZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGEgcGFyYW1ldGVyIHZhbHVlIGNoYW5nZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtIHsqfVx0dmFsdWUgVGhlIHZhbHVlIHRvIHNldCB0aGUgc2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9ICB0aW1lIFRoZSB0aW1lIHdoZW4gdGhlIGNoYW5nZSBzaG91bGQgb2NjdXIuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdGhlIGZyZXF1ZW5jeSB0byBcIkc0XCIgaW4gZXhhY3RseSAxIHNlY29uZCBmcm9tIG5vdy5cblx0XHQgKiBmcmVxLnNldFZhbHVlQXRUaW1lKFwiRzRcIiwgXCIrMVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uc2V0VmFsdWVBdFRpbWUodmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNpZ25hbHMgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFN1YnNlcXVlbnQgc2NoZWR1bGluZ1xuXHRcdCAqICBtYXkgaW52YWxpZGF0ZSB0aGUgcmV0dXJuZWQgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBXaGVuIHRvIGdldCB0aGUgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge051bWJlcn0gVGhlIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBhZnRlciA9IHRoaXMuX2V2ZW50cy5nZXRBZnRlcih0aW1lKTtcblx0ICAgICAgICB2YXIgYmVmb3JlID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICB2YXIgaW5pdGlhbFZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKHRoaXMuX2luaXRpYWxWYWx1ZSwgdGhpcy5fcGFyYW0uZGVmYXVsdFZhbHVlKTtcblx0ICAgICAgICB2YXIgdmFsdWUgPSBpbml0aWFsVmFsdWU7XG5cdCAgICAgICAgLy9pZiBpdCB3YXMgc2V0IGJ5XG5cdCAgICAgICAgaWYgKGJlZm9yZSA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZS50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlRhcmdldCkge1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXMgPSB0aGlzLl9ldmVudHMuZ2V0QmVmb3JlKGJlZm9yZS50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzVmFsO1xuXHQgICAgICAgICAgICBpZiAocHJldmlvdXMgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsID0gaW5pdGlhbFZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcHJldmlvdXNWYWwgPSBwcmV2aW91cy52YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2V4cG9uZW50aWFsQXBwcm9hY2goYmVmb3JlLnRpbWUsIHByZXZpb3VzVmFsLCBiZWZvcmUudmFsdWUsIGJlZm9yZS5jb25zdGFudCwgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlciA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGJlZm9yZS52YWx1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fbGluZWFySW50ZXJwb2xhdGUoYmVmb3JlLnRpbWUsIGJlZm9yZS52YWx1ZSwgYWZ0ZXIudGltZSwgYWZ0ZXIudmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5FeHBvbmVudGlhbCkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUoYmVmb3JlLnRpbWUsIGJlZm9yZS52YWx1ZSwgYWZ0ZXIudGltZSwgYWZ0ZXIudmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gYmVmb3JlLnZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENyZWF0ZXMgYSBzY2hlZHVsZSBwb2ludCB3aXRoIHRoZSBjdXJyZW50IHZhbHVlIGF0IHRoZSBjdXJyZW50IHRpbWUuXG5cdFx0ICogIFRoaXMgaXMgdXNlZnVsIGZvciBjcmVhdGluZyBhbiBhdXRvbWF0aW9uIGFuY2hvciBwb2ludCBpbiBvcmRlciB0b1xuXHRcdCAqICBzY2hlZHVsZSBjaGFuZ2VzIGZyb20gdGhlIGN1cnJlbnQgdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSBub3cgKE9wdGlvbmFsbHkpIHBhc3MgdGhlIG5vdyB2YWx1ZSBpbi5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFJhbXBQb2ludCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKGN1cnJlbnRWYWwgPT09IDApIHtcblx0ICAgICAgICAgICAgY3VycmVudFZhbCA9IHRoaXMuX21pbk91dHB1dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5zZXRWYWx1ZUF0VGltZSh0aGlzLl90b1VuaXRzKGN1cnJlbnRWYWwpLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGEgbGluZWFyIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tIHRoZVxuXHRcdCAqICBwcmV2aW91cyBzY2hlZHVsZWQgcGFyYW1ldGVyIHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGVuZFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBlbmRUaW1lKSB7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIGVuZFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhlbmRUaW1lKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcixcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogZW5kVGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBlbmRUaW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGV4cG9uZW50aWFsIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcGFyYW1ldGVyIHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGVuZFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIGVuZFRpbWUpIHtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgdmFsdWUgPSBNYXRoLm1heCh0aGlzLl9taW5PdXRwdXQsIHZhbHVlKTtcblx0ICAgICAgICBlbmRUaW1lID0gdGhpcy50b1NlY29uZHMoZW5kVGltZSk7XG5cdCAgICAgICAgLy9zdG9yZSB0aGUgZXZlbnRcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsLFxuXHQgICAgICAgICAgICAndGltZSc6IGVuZFRpbWUsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgZW5kVGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhbiBleHBvbmVudGlhbCBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgY3VycmVudCB0aW1lIGFuZCBjdXJyZW50IHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZSBvdmVyIHRoZVxuXHRcdCAqICBkdXJhdGlvbiBvZiB0aGUgcmFtcFRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0W3N0YXJ0VGltZT1ub3ddIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9leHBvbmVudGlhbGx5IHJhbXAgdG8gdGhlIHZhbHVlIDIgb3ZlciA0IHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmV4cG9uZW50aWFsUmFtcFRvKDIsIDQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBzdGFydFRpbWUgKyB0aGlzLnRvU2Vjb25kcyhyYW1wVGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gbGluZWFyIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBjdXJyZW50IHRpbWUgYW5kIGN1cnJlbnQgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlIG92ZXIgdGhlXG5cdFx0ICogIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xpbmVhcmx5IHJhbXAgdG8gdGhlIHZhbHVlIDQgb3ZlciAzIHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmxpbmVhclJhbXBUbyg0LCAzKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmxpbmVhclJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBzdGFydFRpbWUgKyB0aGlzLnRvU2Vjb25kcyhyYW1wVGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFNpbmNlIGl0XG5cdFx0ICogIGlzIGFuIGV4cG9uZW50aWFsIGFwcHJvYWNoIGl0IHdpbGwgY29udGludWUgYXBwcm9hY2hpbmcgYWZ0ZXIgdGhlIHJhbXAgZHVyYXRpb24uIFRoZVxuXHRcdCAqICByYW1wVGltZSBpcyB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRvIHJlYWNoIG92ZXIgOTklIG9mIHRoZSB3YXkgdG93YXJkcyB0aGUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWUgICBUaGUgdmFsdWUgdG8gcmFtcCB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vZXhwb25lbnRpYWxseSByYW1wIHRvIHRoZSB2YWx1ZSAyIG92ZXIgNCBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5leHBvbmVudGlhbFJhbXBUbygyLCA0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnRhcmdldFJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lLCByYW1wVGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gU2luY2UgaXRcblx0XHQgKiAgaXMgYW4gZXhwb25lbnRpYWwgYXBwcm9hY2ggaXQgd2lsbCBjb250aW51ZSBhcHByb2FjaGluZyBhZnRlciB0aGUgcmFtcCBkdXJhdGlvbi4gVGhlXG5cdFx0ICogIHJhbXBUaW1lIGlzIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdG8gcmVhY2ggb3ZlciA5OSUgb2YgdGhlIHdheSB0b3dhcmRzIHRoZSB2YWx1ZS4gVGhpcyBtZXRob2RzXG5cdFx0ICogIGlzIHNpbWlsYXIgdG8gc2V0VGFyZ2V0QXRUaW1lIGV4Y2VwdCB0aGUgdGhpcmQgYXJndW1lbnQgaXMgYSB0aW1lIGluc3RlYWQgb2YgYSAndGltZUNvbnN0YW50J1xuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdHRpbWUgXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9leHBvbmVudGlhbGx5IHJhbXAgdG8gdGhlIHZhbHVlIDIgb3ZlciA0IHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmV4cG9uZW50aWFsUmFtcFRvKDIsIDQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lLCByYW1wVGltZSkge1xuXHQgICAgICAgIHZhciB0aW1lQ29uc3RhbnQgPSBNYXRoLmxvZyh0aGlzLnRvU2Vjb25kcyhyYW1wVGltZSkgKyAxKSAvIE1hdGgubG9nKDIwMCk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLnNldFRhcmdldEF0VGltZSh2YWx1ZSwgdGltZSwgdGltZUNvbnN0YW50KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lIHdpdGhcblx0XHQgKiAgYSByYXRlIGhhdmluZyB0aGUgZ2l2ZW4gdGltZSBjb25zdGFudC5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB0aW1lQ29uc3RhbnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFRhcmdldEF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpIHtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgLy8gVGhlIHZhbHVlIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBhcHByb2FjaCB3aXRob3V0IHRpbWVDb25zdGFudCA+IDAuXG5cdCAgICAgICAgaWYgKHRpbWVDb25zdGFudCA8PSAwKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGltZUNvbnN0YW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlRhcmdldCxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogc3RhcnRUaW1lLFxuXHQgICAgICAgICAgICAnY29uc3RhbnQnOiB0aW1lQ29uc3RhbnRcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5zZXRUYXJnZXRBdFRpbWUodmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyBhbiBhcnJheSBvZiBhcmJpdHJhcnkgcGFyYW1ldGVyIHZhbHVlcyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7QXJyYXl9IHZhbHVlc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGR1cmF0aW9uXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzY2FsaW5nPTFdIElmIHRoZSB2YWx1ZXMgaW4gdGhlIGN1cnZlIHNob3VsZCBiZSBzY2FsZWQgYnkgc29tZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuc2V0VmFsdWVDdXJ2ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZXMsIHN0YXJ0VGltZSwgZHVyYXRpb24sIHNjYWxpbmcpIHtcblx0ICAgICAgICBzY2FsaW5nID0gVG9uZS5kZWZhdWx0QXJnKHNjYWxpbmcsIDEpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRWYWx1ZUF0VGltZSh2YWx1ZXNbMF0gKiBzY2FsaW5nLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIHZhciBzZWdUaW1lID0gZHVyYXRpb24gLyAodmFsdWVzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWVzW2ldICogc2NhbGluZywgc3RhcnRUaW1lICsgaSAqIHNlZ1RpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VscyBhbGwgc2NoZWR1bGVkIHBhcmFtZXRlciBjaGFuZ2VzIHdpdGggdGltZXMgZ3JlYXRlciB0aGFuIG9yXG5cdFx0ICogIGVxdWFsIHRvIHN0YXJ0VGltZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhpcyBpcyBzaW1pbGFyIHRvIFtjYW5jZWxTY2hlZHVsZWRWYWx1ZXNdKCNjYW5jZWxTY2hlZHVsZWRWYWx1ZXMpIGV4Y2VwdFxuXHRcdCAqICBpdCBob2xkcyB0aGUgYXV0b21hdGVkIHZhbHVlIGF0IHRpbWUgdW50aWwgdGhlIG5leHQgYXV0b21hdGVkIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5jYW5jZWxBbmRIb2xkQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdmFsdWVBdFRpbWUgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIC8vaWYgdGhlcmUgaXMgYW4gZXZlbnQgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAgICAvL2FuZCB0aGF0IGV2ZW4gaXMgbm90IGEgXCJzZXRcIlxuXHQgICAgICAgIHZhciBiZWZvcmUgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHZhciBhZnRlciA9IHRoaXMuX2V2ZW50cy5nZXRBZnRlcih0aW1lKTtcblx0ICAgICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aW1lID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIGV2ZXJ5dGhpbmcgYWZ0ZXJcblx0ICAgICAgICAgICAgaWYgKGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKGFmdGVyLnRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCh0aW1lICsgMC4wMDAwMDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlcikge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCB0aGUgbmV4dCBldmVudChzKVxuXHQgICAgICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKGFmdGVyLnRpbWUpO1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3BhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAoYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIpIHtcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWVBdFRpbWUsIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcixcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVBdFRpbWUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwpIHtcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZUF0VGltZSwgdGltZSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlQXRUaW1lLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3NldCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZUF0VGltZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSh0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJhbS5zZXRWYWx1ZUF0VGltZSh2YWx1ZUF0VGltZSwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSYW1wcyB0byB0aGUgZ2l2ZW4gdmFsdWUgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqICBBdXRvbWF0aWNhbGx5IHNlbGVjdHMgdGhlIGJlc3QgcmFtcCB0eXBlIChleHBvbmVudGlhbCBvciBsaW5lYXIpXG5cdFx0ICogIGRlcGVuZGluZyBvbiB0aGUgYHVuaXRzYCBvZiB0aGUgc2lnbmFsXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSBcdFRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcmFtcCB0byB0aGUgdmFsdWUgZWl0aGVyIGxpbmVhcmx5IG9yIGV4cG9uZW50aWFsbHlcblx0XHQgKiAvL2RlcGVuZGluZyBvbiB0aGUgXCJ1bml0c1wiIHZhbHVlIG9mIHRoZSBzaWduYWxcblx0XHQgKiBzaWduYWwucmFtcFRvKDAsIDEwKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NjaGVkdWxlIGl0IHRvIHJhbXAgc3RhcnRpbmcgYXQgYSBzcGVjaWZpYyB0aW1lXG5cdFx0ICogc2lnbmFsLnJhbXBUbygwLCAxMCwgNSlcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHJhbXBUaW1lID0gVG9uZS5kZWZhdWx0QXJnKHJhbXBUaW1lLCAwLjEpO1xuXHQgICAgICAgIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuRnJlcXVlbmN5IHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5CUE0gfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkRlY2liZWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZXhwb25lbnRpYWxSYW1wVG8odmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVVUT01BVElPTiBDVVJWRSBDQUxDVUxBVElPTlNcblx0ICAgIC8vXHRNSVQgTGljZW5zZSwgY29weXJpZ2h0IChjKSAyMDE0IEpvcmRhbiBTYW50ZWxsXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHRoZSB2YWx1ZSBhbG9uZyB0aGUgY3VydmUgcHJvZHVjZWQgYnkgc2V0VGFyZ2V0QXRUaW1lXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fZXhwb25lbnRpYWxBcHByb2FjaCA9IGZ1bmN0aW9uICh0MCwgdjAsIHYxLCB0aW1lQ29uc3RhbnQsIHQpIHtcblx0ICAgICAgICByZXR1cm4gdjEgKyAodjAgLSB2MSkgKiBNYXRoLmV4cCgtKHQgLSB0MCkgLyB0aW1lQ29uc3RhbnQpO1xuXHQgICAgfTtcblx0ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHRoZSB2YWx1ZSBhbG9uZyB0aGUgY3VydmUgcHJvZHVjZWQgYnkgbGluZWFyUmFtcFRvVmFsdWVBdFRpbWVcblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9saW5lYXJJbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uICh0MCwgdjAsIHQxLCB2MSwgdCkge1xuXHQgICAgICAgIHJldHVybiB2MCArICh2MSAtIHYwKSAqICgodCAtIHQwKSAvICh0MSAtIHQwKSk7XG5cdCAgICB9O1xuXHQgICAgLy8gQ2FsY3VsYXRlcyB0aGUgdGhlIHZhbHVlIGFsb25nIHRoZSBjdXJ2ZSBwcm9kdWNlZCBieSBleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fZXhwb25lbnRpYWxJbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uICh0MCwgdjAsIHQxLCB2MSwgdCkge1xuXHQgICAgICAgIHJldHVybiB2MCAqIE1hdGgucG93KHYxIC8gdjAsICh0IC0gdDApIC8gKHQxIC0gdDApKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYXJhbTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgT2ZmbGluZUF1ZGlvQ29udGV4dFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Db250ZXh0fVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBjaGFubmVscyAgVGhlIG51bWJlciBvZiBjaGFubmVscyB0byByZW5kZXJcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgZHVyYXRpb24gIFRoZSBkdXJhdGlvbiB0byByZW5kZXIgaW4gc2FtcGxlc1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gc2FtcGxlUmF0ZSB0aGUgc2FtcGxlIHJhdGUgdG8gcmVuZGVyIGF0XG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmVDb250ZXh0ID0gZnVuY3Rpb24gKGNoYW5uZWxzLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSkge1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvZmZsaW5lIGNvbnRleHRcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7T2ZmbGluZUF1ZGlvQ29udGV4dH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHZhciBvZmZsaW5lQ29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KGNoYW5uZWxzLCBkdXJhdGlvbiAqIHNhbXBsZVJhdGUsIHNhbXBsZVJhdGUpO1xuXHQgICAgICAgIC8vd3JhcCB0aGUgbWV0aG9kcy9tZW1iZXJzXG5cdCAgICAgICAgVG9uZS5Db250ZXh0LmNhbGwodGhpcywge1xuXHQgICAgICAgICAgICAnY29udGV4dCc6IG9mZmxpbmVDb250ZXh0LFxuXHQgICAgICAgICAgICAnY2xvY2tTb3VyY2UnOiAnb2ZmbGluZScsXG5cdCAgICAgICAgICAgICdsb29rQWhlYWQnOiAwLFxuXHQgICAgICAgICAgICAndXBkYXRlSW50ZXJ2YWwnOiAxMjggLyBzYW1wbGVSYXRlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBwcml2YXRlIHJlZmVyZW5jZSB0byB0aGUgZHVyYXRpb25cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBhcnRpZmljaWFsIGNsb2NrIHNvdXJjZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5PZmZsaW5lQ29udGV4dCwgVG9uZS5Db250ZXh0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBPdmVycmlkZSB0aGUgbm93IG1ldGhvZCB0byBwb2ludCB0byB0aGUgaW50ZXJuYWwgY2xvY2sgdGltZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUubm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VGltZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVuZGVyIHRoZSBvdXRwdXQgb2YgdGhlIE9mZmxpbmVDb250ZXh0XG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHdoaWxlICh0aGlzLl9kdXJhdGlvbiAtIHRoaXMuX2N1cnJlbnRUaW1lID49IDApIHtcblx0ICAgICAgICAgICAgLy9pbnZva2UgYWxsIHRoZSBjYWxsYmFja3Mgb24gdGhhdCB0aW1lXG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgndGljaycpO1xuXHQgICAgICAgICAgICAvL2luY3JlbWVudCB0aGUgY2xvY2tcblx0ICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gdGhpcy5ibG9ja1RpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsb3NlIHRoZSBjb250ZXh0XG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9mZmxpbmVDb250ZXh0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG5cdCAgICAgICAgdmFyIGlzTW9iaWxlU2FmYXJpID0gdWEuaW5jbHVkZXMoJ3NhZmFyaScpICYmICF1YS5pbmNsdWRlcygnY2hyb21lJykgJiYgdWEuaW5jbHVkZXMoJ21vYmlsZScpO1xuXHQgICAgICAgIGlmIChpc01vYmlsZVNhZmFyaSkge1xuXHQgICAgICAgICAgICAvL21vYmlsZSBzYWZhcmkgaGFzIGEgYml6YXJyZSBidWcgd2l0aCB0aGUgb2ZmbGluZSBjb250ZXh0XG5cdCAgICAgICAgICAgIC8vd2hlbiBhIEJ1ZmZlclNvdXJjZU5vZGUgaXMgc3RhcnRlZCwgaXQgc3RhcnRzIHRoZSBvZmZsaW5lIGNvbnRleHRcblx0ICAgICAgICAgICAgLy9cblx0ICAgICAgICAgICAgLy9kZWZlcnJpbmcgYWxsIEJ1ZmZlclNvdXJjZSBzdGFydHMgdGlsbCB0aGUgbGFzdCBwb3NzaWJsZSBtb21lbnRcblx0ICAgICAgICAgICAgLy9yZWR1Y2VzIHRoZSBsaWtlbGlob29kIG9mIHRoaXMgaGFwcGVuaW5nXG5cdCAgICAgICAgICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLmNyZWF0ZUJ1ZmZlclNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBidWZmZXJTb3VyY2UgPSB0aGlzLl9jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgICAgICAgICAgdmFyIF9uYXRpdmVfc3RhcnQgPSBidWZmZXJTb3VyY2Uuc3RhcnQ7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJTb3VyY2Uuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIF9uYXRpdmVfc3RhcnQuY2FsbChidWZmZXJTb3VyY2UsIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMCk7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyU291cmNlO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgdGhpbiB3cmFwcGVyIGFyb3VuZCB0aGUgTmF0aXZlIFdlYiBBdWRpbyBHYWluTm9kZS5cblx0XHQgKiAgICAgICAgIFRoZSBHYWluTm9kZSBpcyBhIGJhc2ljIGJ1aWxkaW5nIGJsb2NrIG9mIHRoZSBXZWIgQXVkaW9cblx0XHQgKiAgICAgICAgIEFQSSBhbmQgaXMgdXNlZnVsIGZvciByb3V0aW5nIGF1ZGlvIGFuZCBhZGp1c3RpbmcgZ2FpbnMuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSAgZ2FpbiAgVGhlIGluaXRpYWwgZ2FpbiBvZiB0aGUgR2Fpbk5vZGVcblx0XHQgKiAgQHBhcmFtIHtUb25lLlR5cGU9fSB1bml0cyBUaGUgdW5pdHMgb2YgdGhlIGdhaW4gcGFyYW1ldGVyLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAndW5pdHMnXG5cdCAgICAgICAgXSwgVG9uZS5HYWluKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBHYWluTm9kZVxuXHRcdFx0ICogIEB0eXBlICB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuX2dhaW5Ob2RlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBwYXJhbWV0ZXIgb2YgdGhlIGdhaW4gbm9kZS5cblx0XHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmdhaW4gPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2dhaW5Ob2RlLmdhaW4sXG5cdCAgICAgICAgICAgICd1bml0cyc6IG9wdGlvbnMudW5pdHMsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZ2Fpbixcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBvcHRpb25zLmNvbnZlcnRcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZ2FpbicpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR2FpbiwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW4uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2dhaW4nOiAxLFxuXHQgICAgICAgICdjb252ZXJ0JzogdHJ1ZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuR2Fpbn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR2Fpbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2dhaW4nKTtcblx0ICAgICAgICB0aGlzLmdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR2Fpbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkICYmICFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnN0YW50U291cmNlKSB7XG5cdCAgICAgICAgdmFyIENvbnN0YW50U291cmNlTm9kZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCAxMjgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgICAgIHZhciBhcnIgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBhcnJbaV0gPSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5sb29wID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdmFyIGdhaW5Ob2RlID0gdGhpcy5fb3V0cHV0ID0gY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgICAgIHRoaXMub2Zmc2V0ID0gZ2Fpbk5vZGUuZ2Fpbjtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmNvbm5lY3QoZ2Fpbk5vZGUpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5zdGFydCh0aW1lKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2Uuc3RvcCh0aW1lKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dC5jb25uZWN0LmFwcGx5KHRoaXMuX291dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dC5kaXNjb25uZWN0LmFwcGx5KHRoaXMuX291dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnN0YW50U291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50U291cmNlTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlQ29uc3RhbnRTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnRTb3VyY2VOb2RlKHRoaXMpO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBzaWduYWwgaXMgYW4gYXVkaW8tcmF0ZSB2YWx1ZS4gVG9uZS5TaWduYWwgaXMgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGUgbGlicmFyeS5cblx0XHQgKiAgICAgICAgICBVbmxpa2UgYSBudW1iZXIsIFNpZ25hbHMgY2FuIGJlIHNjaGVkdWxlZCB3aXRoIHNhbXBsZS1sZXZlbCBhY2N1cmFjeS4gVG9uZS5TaWduYWxcblx0XHQgKiAgICAgICAgICBoYXMgYWxsIG9mIHRoZSBtZXRob2RzIGF2YWlsYWJsZSB0byBuYXRpdmUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICAgW0F1ZGlvUGFyYW1dKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWF1ZGlvcGFyYW0taW50ZXJmYWNlKVxuXHRcdCAqICAgICAgICAgIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBjb252ZW5pZW5jZXMuIFJlYWQgbW9yZSBhYm91dCB3b3JraW5nIHdpdGggc2lnbmFsc1xuXHRcdCAqICAgICAgICAgIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9TaWduYWxzKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuUGFyYW19XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfEF1ZGlvUGFyYW19IFt2YWx1ZV0gSW5pdGlhbCB2YWx1ZSBvZiB0aGUgc2lnbmFsLiBJZiBhbiBBdWRpb1BhcmFtXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcGFzc2VkIGluLCB0aGF0IHBhcmFtZXRlciB3aWxsIGJlIHdyYXBwZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgY29udHJvbGxlZCBieSB0aGUgU2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPU51bWJlcl0gdW5pdCBUaGUgdW5pdHMgdGhlIHNpZ25hbCBpcyBpbi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDEwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3ZhbHVlJyxcblx0ICAgICAgICAgICAgJ3VuaXRzJ1xuXHQgICAgICAgIF0sIFRvbmUuU2lnbmFsKTtcblx0ICAgICAgICBUb25lLlBhcmFtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQqIFdoZW4gYSBzaWduYWwgaXMgY29ubmVjdGVkIHRvIGFub3RoZXIgc2lnbmFsIG9yIGF1ZGlvIHBhcmFtLFxuXHRcdFx0KiB0aGlzIHNpZ25hbCBiZWNvbWVzIGEgcHJveHkgZm9yIGl0XG5cdFx0XHQqIEB0eXBlIHtBcnJheX1cblx0XHRcdCogQHByaXZhdGVcblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5fcHJveGllcyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiBJbmRpY2F0ZXMgaWYgdGhlIGNvbnN0YW50IHNvdXJjZSB3YXMgc3RhcnRlZCBvciBub3Rcblx0XHRcdCogQHByaXZhdGVcblx0XHRcdCogQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjb25zdGFudCBzb3VyY2Ugbm9kZSB3aGljaCBnZW5lcmF0ZXMgdGhlIHNpZ25hbFxuXHRcdFx0ICogQHR5cGUge0NvbnN0YW50U291cmNlTm9kZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZSA9IHRoaXMuY29udGV4dC5jcmVhdGVDb25zdGFudFNvdXJjZSgpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5fY29uc3RhbnRTb3VyY2Uub2Zmc2V0O1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG5vZGUgd2hlcmUgdGhlIGNvbnN0YW50IHNpZ25hbCB2YWx1ZSBpcyBzY2FsZWQuXG5cdFx0XHQgKiBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLl9jb25zdGFudFNvdXJjZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBub2RlIHdoZXJlIHRoZSB2YWx1ZSBpcyBzZXQuXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5QYXJhbX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5fcGFyYW0gPSB0aGlzLm91dHB1dC5vZmZzZXQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TaWduYWwsIFRvbmUuUGFyYW0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2YWx1ZSc6IDAsXG5cdCAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlZmF1bHQsXG5cdCAgICAgICAgJ2NvbnZlcnQnOiB0cnVlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFdoZW4gc2lnbmFscyBjb25uZWN0IHRvIG90aGVyIHNpZ25hbHMgb3IgQXVkaW9QYXJhbXMsXG5cdFx0ICogIHRoZXkgdGFrZSBvdmVyIHRoZSBvdXRwdXQgdmFsdWUgb2YgdGhhdCBzaWduYWwgb3IgQXVkaW9QYXJhbS5cblx0XHQgKiAgRm9yIGFsbCBvdGhlciBub2RlcywgdGhlIGJlaGF2aW9yIGlzIHRoZSBzYW1lIGFzIGEgZGVmYXVsdCA8Y29kZT5jb25uZWN0PC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAb3ZlcnJpZGVcblx0XHQgKiAgQHBhcmFtIHtBdWRpb1BhcmFtfEF1ZGlvTm9kZXxUb25lLlNpZ25hbHxUb25lfSBub2RlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TnVtYmVyPTBdIFRoZSBvdXRwdXQgbnVtYmVyIHRvIGNvbm5lY3QgZnJvbS5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtpbnB1dE51bWJlcj0wXSBUaGUgaW5wdXQgbnVtYmVyIHRvIGNvbm5lY3QgdG8uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNpZ25hbH0gdGhpc1xuXHRcdCAqICBAbWV0aG9kXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgLy90aGlzIGlzIGFuIG9wdGltaXphdGlvbiB3aGVyZSB0aGlzIG5vZGUgd2lsbCBmb3J3YXJkIGF1dG9tYXRpb25zXG5cdCAgICAgICAgLy90byBjb25uZWN0ZWQgbm9kZXMgd2l0aG91dCBhbnkgc2lnbmFsIGlmIHBvc3NpYmxlLlxuXHQgICAgICAgIGlmICh0aGlzLl9pc1BhcmFtKG5vZGUpICYmICF0aGlzLl9zb3VyY2VTdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMucHVzaChub2RlKTtcblx0ICAgICAgICAgICAgbm9kZS5vdmVycmlkZGVuID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fYXBwbHlBdXRvbWF0aW9ucyhub2RlKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VTdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlLnN0YXJ0KDApO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRha2VzIGEgbm9kZSBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBpZiBpdCBpcyBhIFBhcmFtIG9yIEF1ZGlvUGFyYW1cblx0XHQgKiBAcGFyYW0gIHsqfSBub2RlIFRoZSBub2RlIHRvIHRlc3Rcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX2lzUGFyYW0gPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlBhcmFtICYmIFRvbmUuUGFyYW0gPT09IG5vZGUuY29uc3RydWN0b3IgfHwgbm9kZSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRGlzY2FyZCB0aGUgb3B0aW1pemF0aW9uIGFuZCBjb25uZWN0IGFsbCBvZiB0aGUgcHJveGllc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX2Nvbm5lY3RQcm94aWVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5fc291cmNlU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2Uuc3RhcnQoMCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3Byb3hpZXMuZm9yRWFjaChmdW5jdGlvbiAocHJveHkpIHtcblx0ICAgICAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0LmNhbGwodGhpcywgcHJveHkpO1xuXHQgICAgICAgICAgICBpZiAocHJveHkuX3Byb3hpZXMpIHtcblx0ICAgICAgICAgICAgICAgIHByb3h5Ll9jb25uZWN0UHJveGllcygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2VkIHdoZW4gYSBub2RlIGlzIGNvbm5lY3RlZCB0byB0aGlzXG5cdFx0ICogQHBhcmFtICB7QXVkaW9Ob2RlfSBmcm9tXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5fb25Db25uZWN0ID0gZnVuY3Rpb24gKGZyb20pIHtcblx0ICAgICAgICBpZiAoIXRoaXMuX2lzUGFyYW0oZnJvbSkpIHtcblx0ICAgICAgICAgICAgLy9jb25uZWN0IGFsbCB0aGUgcHJveGllc1xuXHQgICAgICAgICAgICB0aGlzLl9jb25uZWN0UHJveGllcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBBcHBseSBhbGwgdGhlIGN1cnJlbnQgYXV0b21hdGlvbnMgdG8gdGhlIGdpdmVuIHBhcmFtZXRlclxuXHRcdCAqIEBwYXJhbSAge0F1ZGlvUGFyYW19IHBhcmFtXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5fYXBwbHlBdXRvbWF0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbSkge1xuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XG5cdCAgICAgICAgcGFyYW0uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKG5vdyk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWwgPSB0aGlzLmdldFZhbHVlQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgcGFyYW0uc2V0VmFsdWVBdFRpbWUoY3VycmVudFZhbCwgbm93KTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuZm9yRWFjaEZyb20obm93LCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgcGFyYW1bZXZlbnQudHlwZV0oZXZlbnQudmFsdWUsIGV2ZW50LnRpbWUsIGV2ZW50LmNvbnN0YW50KTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBEaXNjb25uZWN0IGZyb20gdGhlIGdpdmVuIG5vZGUgb3IgYWxsIG5vZGVzIGlmIG5vIHBhcmFtIGlzIGdpdmVuLlxuXHRcdCAqIEBwYXJhbSAge0F1ZGlvTm9kZXxBdWRpb1BhcmFtfSBub2RlXG5cdFx0ICogQHJldHVybiB7VG9uZS5TaWduYWx9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9wcm94aWVzLmluY2x1ZGVzKG5vZGUpKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3Byb3hpZXMuaW5kZXhPZihub2RlKTtcblx0ICAgICAgICAgICAgdGhpcy5fcHJveGllcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoIW5vZGUpIHtcblx0ICAgICAgICAgICAgLy9ubyBhcmd1bWVudCwgZGlzY29ubmVjdCBldmVyeXRoaW5nXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBbXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgY3VycmVudCBzaWduYWwgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBXaGVuIHRvIGdldCB0aGUgc2lnbmFsIHZhbHVlXG5cdFx0ICogQHJldHVybiB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fcGFyYW0uZ2V0VmFsdWVBdFRpbWUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmFtLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlBhcmFtLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvL3dyYXAgYWxsIG9mIHRoZSBhdXRvbWF0aW9uIG1ldGhvZHNcblx0ICAgIFtcblx0ICAgICAgICAnc2V0VmFsdWVBdFRpbWUnLFxuXHQgICAgICAgICdsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZScsXG5cdCAgICAgICAgJ2V4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgICdzZXRUYXJnZXRBdFRpbWUnXG5cdCAgICBdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuXHQgICAgICAgIHZhciBwcmV2aW91c01ldGhvZCA9IFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0ICAgICAgICAgICAgcHJldmlvdXNNZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgYXJnc1swXSA9IHRoaXMuX2Zyb21Vbml0cyhhcmdzWzBdKTtcblx0ICAgICAgICAgICAgYXJnc1sxXSA9IHRoaXMudG9TZWNvbmRzKGFyZ3NbMV0pO1xuXHQgICAgICAgICAgICAvL2FwcGx5IGl0IHRvIHRoZSBwcm94aWVzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMuZm9yRWFjaChmdW5jdGlvbiAoc2lnbmFsKSB7XG5cdCAgICAgICAgICAgICAgICBzaWduYWxbbWV0aG9kXS5hcHBseShzaWduYWwsIGFyZ3MpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9O1xuXHQgICAgfSk7XG5cdCAgICBbXG5cdCAgICAgICAgJ2NhbmNlbFNjaGVkdWxlZFZhbHVlcycsXG5cdCAgICAgICAgJ2NhbmNlbEFuZEhvbGRBdFRpbWUnXG5cdCAgICBdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuXHQgICAgICAgIHZhciBwcmV2aW91c01ldGhvZCA9IFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0ICAgICAgICAgICAgcHJldmlvdXNNZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgYXJnc1swXSA9IHRoaXMudG9TZWNvbmRzKGFyZ3NbMF0pO1xuXHQgICAgICAgICAgICAvL2FwcGx5IGl0IHRvIHRoZSBwcm94aWVzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMuZm9yRWFjaChmdW5jdGlvbiAoc2lnbmFsKSB7XG5cdCAgICAgICAgICAgICAgICBzaWduYWxbbWV0aG9kXS5hcHBseShzaWduYWwsIGFyZ3MpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9O1xuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNpZ25hbDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFBvdyBhcHBsaWVzIGFuIGV4cG9uZW50IHRvIHRoZSBpbmNvbWluZyBzaWduYWwuIFRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgICAgICAgIG11c3QgYmUgQXVkaW9SYW5nZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gZXhwIFRoZSBleHBvbmVudCB0byBhcHBseSB0byB0aGUgaW5jb21pbmcgc2lnbmFsLCBtdXN0IGJlIGF0IGxlYXN0IDIuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwb3cgPSBuZXcgVG9uZS5Qb3coMik7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgwLjUpLmNvbm5lY3QocG93KTtcblx0XHQgKiAvL291dHB1dCBvZiBwb3cgaXMgMC4yNS4gXG5cdFx0ICovXG5cdCAgICBUb25lLlBvdyA9IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSBleHBvbmVudFxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHAgPSBUb25lLmRlZmF1bHRBcmcoZXhwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V4cFNjYWxlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIodGhpcy5fZXhwRnVuYyh0aGlzLl9leHApLCA4MTkyKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBvdywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB2YWx1ZSBvZiB0aGUgZXhwb25lbnQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUG93I1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBvdy5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAgPSBleHA7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cFNjYWxlci5zZXRNYXAodGhpcy5fZXhwRnVuYyh0aGlzLl9leHApKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZnVuY3Rpb24gd2hpY2ggbWFwcyB0aGUgd2F2ZXNoYXBlclxuXHRcdCAqICBAcGFyYW0gICB7bnVtYmVyfSBleHBcblx0XHQgKiAgQHJldHVybiB7ZnVuY3Rpb259XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBvdy5wcm90b3R5cGUuX2V4cEZ1bmMgPSBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIE1hdGgucG93KE1hdGguYWJzKHZhbCksIGV4cCk7XG5cdCAgICAgICAgfTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvd30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb3cucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZXhwU2NhbGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9leHBTY2FsZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBvdztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkVudmVsb3BlIGlzIGFuIFtBRFNSXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW50aGVzaXplciNBRFNSX2VudmVsb3BlKVxuXHRcdCAqICAgICAgICAgIGVudmVsb3BlIGdlbmVyYXRvci4gVG9uZS5FbnZlbG9wZSBvdXRwdXRzIGEgc2lnbmFsIHdoaWNoXG5cdFx0ICogICAgICAgICAgY2FuIGJlIGNvbm5lY3RlZCB0byBhbiBBdWRpb1BhcmFtIG9yIFRvbmUuU2lnbmFsLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy9lL2VhL0FEU1JfcGFyYW1ldGVyLnN2Z1wiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2F0dGFja10gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGUgdG8gZ28gZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIDAgdG8gaXQncyBtYXhpbXVtIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdFRoZSBwZXJpb2Qgb2YgdGltZSBhZnRlciB0aGUgYXR0YWNrIHRoYXQgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICBcdHRvIGZhbGwgdG8gdGhlIHN1c3RhaW4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzdXN0YWluXVx0VGhlIHBlcmNlbnQgb2YgdGhlIG1heGltdW0gdmFsdWUgdGhhdCB0aGUgZW52ZWxvcGUgcmVzdHMgYXQgdW50aWxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR0aGUgcmVsZWFzZSBpcyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHRUaGUgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkIGl0IHRha2VzIHRvIHJlYWNoIDAuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hbiBhbXBsaXR1ZGUgZW52ZWxvcGVcblx0XHQgKiB2YXIgZ2Fpbk5vZGUgPSBUb25lLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHRcdCAqIHZhciBlbnYgPSBuZXcgVG9uZS5FbnZlbG9wZSh7XG5cdFx0ICogXHRcImF0dGFja1wiIDogMC4xLFxuXHRcdCAqIFx0XCJkZWNheVwiIDogMC4yLFxuXHRcdCAqIFx0XCJzdXN0YWluXCIgOiAxLFxuXHRcdCAqIFx0XCJyZWxlYXNlXCIgOiAwLjgsXG5cdFx0ICogfSk7XG5cdFx0ICogZW52LmNvbm5lY3QoZ2Fpbk5vZGUuZ2Fpbik7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vZ2V0IGFsbCBvZiB0aGUgZGVmYXVsdHNcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAnZGVjYXknLFxuXHQgICAgICAgICAgICAnc3VzdGFpbicsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlbiB0cmlnZ2VyQXR0YWNrIGlzIGNhbGxlZCwgdGhlIGF0dGFjayB0aW1lIGlzIHRoZSBhbW91bnQgb2Zcblx0XHRcdCAqICB0aW1lIGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGUgdG8gcmVhY2ggaXQncyBtYXhpbXVtIHZhbHVlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBvcHRpb25zLmF0dGFjaztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBZnRlciB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlLCB0aGUgdmFsdWUgd2lsbCBmYWxsXG5cdFx0XHQgKiAgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIGRlY2F5IHRpbWUgdG8gaXQncyBzdXN0YWluIHZhbHVlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWNheSA9IG9wdGlvbnMuZGVjYXk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBcdFRoZSBzdXN0YWluIHZhbHVlIGlzIHRoZSB2YWx1ZVxuXHRcdFx0ICogXHR3aGljaCB0aGUgZW52ZWxvcGUgcmVzdHMgYXQgYWZ0ZXIgdHJpZ2dlckF0dGFjayBpc1xuXHRcdFx0ICogXHRjYWxsZWQsIGJ1dCBiZWZvcmUgdHJpZ2dlclJlbGVhc2UgaXMgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnN1c3RhaW4gPSBvcHRpb25zLnN1c3RhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWZ0ZXIgdHJpZ2dlclJlbGVhc2UgaXMgY2FsbGVkLCB0aGUgZW52ZWxvcGUnc1xuXHRcdFx0ICogIHZhbHVlIHdpbGwgZmFsbCB0byBpdCdzIG1pbWludW0gdmFsdWUgb3ZlciB0aGVcblx0XHRcdCAqICBkdXJhdGlvbiBvZiB0aGUgcmVsZWFzZSB0aW1lLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gb3B0aW9ucy5yZWxlYXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBuZXh0IHRpbWUgdGhlIGVudmVsb3BlIGlzIGF0IHN0YW5kYnlcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9ICdsaW5lYXInO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBuZXh0IHRpbWUgdGhlIGVudmVsb3BlIGlzIGF0IHN0YW5kYnlcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSAnZXhwb25lbnRpYWwnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NpZyA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2lnbmFsKDApO1xuXHQgICAgICAgIC8vc2V0IHRoZSBhdHRhY2tDdXJ2ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLmF0dGFja0N1cnZlID0gb3B0aW9ucy5hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICB0aGlzLnJlbGVhc2VDdXJ2ZSA9IG9wdGlvbnMucmVsZWFzZUN1cnZlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRW52ZWxvcGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAnc3VzdGFpbic6IDAuNSxcblx0ICAgICAgICAncmVsZWFzZSc6IDEsXG5cdCAgICAgICAgJ2F0dGFja0N1cnZlJzogJ2xpbmVhcicsXG5cdCAgICAgICAgJ3JlbGVhc2VDdXJ2ZSc6ICdleHBvbmVudGlhbCdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBlbnZlbG9wZS4gVXNlZnVsIGZvclxuXHRcdCAqIHN5bmNyb25pemluZyB2aXN1YWwgb3V0cHV0IHRvIHRoZSBlbnZlbG9wZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5FbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2hhcGUgb2YgdGhlIGF0dGFjay5cblx0XHQgKiBDYW4gYmUgYW55IG9mIHRoZXNlIHN0cmluZ3M6XG5cdFx0ICogPHVsPlxuXHRcdCAqICAgPGxpPmxpbmVhcjwvbGk+XG5cdFx0ICogICA8bGk+ZXhwb25lbnRpYWw8L2xpPlxuXHRcdCAqICAgPGxpPnNpbmU8L2xpPlxuXHRcdCAqICAgPGxpPmNvc2luZTwvbGk+XG5cdFx0ICogICA8bGk+Ym91bmNlPC9saT5cblx0XHQgKiAgIDxsaT5yaXBwbGU8L2xpPlxuXHRcdCAqICAgPGxpPnN0ZXA8L2xpPlxuXHRcdCAqIDwvdWw+XG5cdFx0ICogQ2FuIGFsc28gYmUgYW4gYXJyYXkgd2hpY2ggZGVzY3JpYmVzIHRoZSBjdXJ2ZS4gVmFsdWVzXG5cdFx0ICogaW4gdGhlIGFycmF5IGFyZSBldmVubHkgc3ViZGl2aWRlZCBhbmQgbGluZWFybHlcblx0XHQgKiBpbnRlcnBvbGF0ZWQgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIGF0dGFjay5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5FbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfEFycmF5fVxuXHRcdCAqIEBuYW1lIGF0dGFja0N1cnZlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBlbnYuYXR0YWNrQ3VydmUgPSBcImxpbmVhclwiO1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gYWxzbyBiZSBhbiBhcnJheVxuXHRcdCAqIGVudi5hdHRhY2tDdXJ2ZSA9IFswLCAwLjIsIDAuMywgMC40LCAxXVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLCAnYXR0YWNrQ3VydmUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzU3RyaW5nKHRoaXMuX2F0dGFja0N1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFja0N1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNBcnJheSh0aGlzLl9hdHRhY2tDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vbG9vayB1cCB0aGUgbmFtZSBpbiB0aGUgY3VydmVzIGFycmF5XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB0eXBlIGluIFRvbmUuRW52ZWxvcGUuVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGVbdHlwZV0uSW4gPT09IHRoaXMuX2F0dGFja0N1cnZlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZSBhcnJheVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFja0N1cnZlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjdXJ2ZSkge1xuXHQgICAgICAgICAgICAvL2NoZWNrIGlmIGl0J3MgYSB2YWxpZCB0eXBlXG5cdCAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGUuaGFzT3duUHJvcGVydHkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY3VydmVEZWYgPSBUb25lLkVudmVsb3BlLlR5cGVbY3VydmVdO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QoY3VydmVEZWYpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBjdXJ2ZURlZi5Jbjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBjdXJ2ZURlZjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkVudmVsb3BlOiBpbnZhbGlkIGN1cnZlOiAnICsgY3VydmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2hhcGUgb2YgdGhlIHJlbGVhc2UuIFNlZSB0aGUgYXR0YWNrIGN1cnZlIHR5cGVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd8QXJyYXl9XG5cdFx0ICogQG5hbWUgcmVsZWFzZUN1cnZlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBlbnYucmVsZWFzZUN1cnZlID0gXCJsaW5lYXJcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkVudmVsb3BlLnByb3RvdHlwZSwgJ3JlbGVhc2VDdXJ2ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNTdHJpbmcodGhpcy5fcmVsZWFzZUN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbGVhc2VDdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkodGhpcy5fcmVsZWFzZUN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgLy9sb29rIHVwIHRoZSBuYW1lIGluIHRoZSBjdXJ2ZXMgYXJyYXlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHR5cGUgaW4gVG9uZS5FbnZlbG9wZS5UeXBlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuRW52ZWxvcGUuVHlwZVt0eXBlXS5PdXQgPT09IHRoaXMuX3JlbGVhc2VDdXJ2ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvL290aGVyd2lzZSBqdXN0IHJldHVybiB0aGUgYXJyYXlcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlQ3VydmU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIC8vY2hlY2sgaWYgaXQncyBhIHZhbGlkIHR5cGVcblx0ICAgICAgICAgICAgaWYgKFRvbmUuRW52ZWxvcGUuVHlwZS5oYXNPd25Qcm9wZXJ0eShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjdXJ2ZURlZiA9IFRvbmUuRW52ZWxvcGUuVHlwZVtjdXJ2ZV07XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChjdXJ2ZURlZikpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBjdXJ2ZURlZi5PdXQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IGN1cnZlRGVmO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNBcnJheShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkVudmVsb3BlOiBpbnZhbGlkIGN1cnZlOiAnICsgY3VydmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrL2RlY2F5IHBvcnRpb24gb2YgdGhlIEFEU1IgZW52ZWxvcGUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgYXR0YWNrIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgZW52ZWxvcGUgc2NhbGVzIHRoZSB2YWxlcy5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgYmV0d2VlbiAwLTFcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy90cmlnZ2VyIHRoZSBhdHRhY2sgMC41IHNlY29uZHMgZnJvbSBub3cgd2l0aCBhIHZlbG9jaXR5IG9mIDAuMlxuXHRcdCAqICBlbnYudHJpZ2dlckF0dGFjayhcIiswLjVcIiwgMC4yKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsQXR0YWNrID0gdGhpcy50b1NlY29uZHModGhpcy5hdHRhY2spO1xuXHQgICAgICAgIHZhciBhdHRhY2sgPSBvcmlnaW5hbEF0dGFjaztcblx0ICAgICAgICB2YXIgZGVjYXkgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLmRlY2F5KTtcblx0ICAgICAgICB2ZWxvY2l0eSA9IFRvbmUuZGVmYXVsdEFyZyh2ZWxvY2l0eSwgMSk7XG5cdCAgICAgICAgLy9jaGVjayBpZiBpdCdzIG5vdCBhIGNvbXBsZXRlIGF0dGFja1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPiAwKSB7XG5cdCAgICAgICAgICAgIC8vc3VidHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgZnJvbSB0aGUgYXR0YWNrIHRpbWVcblx0ICAgICAgICAgICAgdmFyIGF0dGFja1JhdGUgPSAxIC8gYXR0YWNrO1xuXHQgICAgICAgICAgICB2YXIgcmVtYWluaW5nRGlzdGFuY2UgPSAxIC0gY3VycmVudFZhbHVlO1xuXHQgICAgICAgICAgICAvL3RoZSBhdHRhY2sgaXMgbm93IHRoZSByZW1haW5pbmcgdGltZVxuXHQgICAgICAgICAgICBhdHRhY2sgPSByZW1haW5pbmdEaXN0YW5jZSAvIGF0dGFja1JhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYXR0YWNrXG5cdCAgICAgICAgaWYgKHRoaXMuX2F0dGFja0N1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICB0aGlzLl9zaWcubGluZWFyUmFtcFRvKHZlbG9jaXR5LCBhdHRhY2ssIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYXR0YWNrQ3VydmUgPT09ICdleHBvbmVudGlhbCcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLnRhcmdldFJhbXBUbyh2ZWxvY2l0eSwgYXR0YWNrLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGF0dGFjayA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgICAgIHZhciBjdXJ2ZSA9IHRoaXMuX2F0dGFja0N1cnZlO1xuXHQgICAgICAgICAgICAvL3Rha2Ugb25seSBhIHBvcnRpb24gb2YgdGhlIGN1cnZlXG5cdCAgICAgICAgICAgIGlmIChhdHRhY2sgPCBvcmlnaW5hbEF0dGFjaykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnRDb21wbGV0ZSA9IDEgLSBhdHRhY2sgLyBvcmlnaW5hbEF0dGFjaztcblx0ICAgICAgICAgICAgICAgIHZhciBzbGljZUluZGV4ID0gTWF0aC5mbG9vcihwZXJjZW50Q29tcGxldGUgKiB0aGlzLl9hdHRhY2tDdXJ2ZS5sZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgY3VydmUgPSB0aGlzLl9hdHRhY2tDdXJ2ZS5zbGljZShzbGljZUluZGV4KTtcblx0ICAgICAgICAgICAgICAgIC8vdGhlIGZpcnN0IGluZGV4IGlzIHRoZSBjdXJyZW50IHZhbHVlXG5cdCAgICAgICAgICAgICAgICBjdXJ2ZVswXSA9IGN1cnJlbnRWYWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9zaWcuc2V0VmFsdWVDdXJ2ZUF0VGltZShjdXJ2ZSwgdGltZSwgYXR0YWNrLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vZGVjYXlcblx0ICAgICAgICBpZiAoZGVjYXkpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLnRhcmdldFJhbXBUbyh2ZWxvY2l0eSAqIHRoaXMuc3VzdGFpbiwgZGVjYXksIGF0dGFjayArIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlcnMgdGhlIHJlbGVhc2Ugb2YgdGhlIGVudmVsb3BlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICAvL3RyaWdnZXIgcmVsZWFzZSBpbW1lZGlhdGVseVxuXHRcdCAqICBlbnYudHJpZ2dlclJlbGVhc2UoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA+IDApIHtcblx0ICAgICAgICAgICAgdmFyIHJlbGVhc2UgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLnJlbGVhc2UpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fcmVsZWFzZUN1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2lnLmxpbmVhclJhbXBUbygwLCByZWxlYXNlLCB0aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9yZWxlYXNlQ3VydmUgPT09ICdleHBvbmVudGlhbCcpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NpZy50YXJnZXRSYW1wVG8oMCwgcmVsZWFzZSwgdGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY3VydmUgPSB0aGlzLl9yZWxlYXNlQ3VydmU7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZy5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZy5zZXRWYWx1ZUN1cnZlQXRUaW1lKGN1cnZlLCB0aW1lLCByZWxlYXNlLCBjdXJyZW50VmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gVGhpcyB3aWxsXG5cdFx0ICogIHJldHVybiB0aGUgdW5jb252ZXJ0ZWQgKHJhdykgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBUaGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zaWcuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRyaWdnZXJBdHRhY2tSZWxlYXNlIGlzIHNob3J0aGFuZCBmb3IgdHJpZ2dlckF0dGFjaywgdGhlbiB3YWl0aW5nXG5cdFx0ICogIHNvbWUgZHVyYXRpb24sIHRoZW4gdHJpZ2dlclJlbGVhc2UuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gZHVyYXRpb24gVGhlIGR1cmF0aW9uIG9mIHRoZSBzdXN0YWluLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgYXR0YWNrIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgdGhlIGF0dGFjayBhbmQgdGhlbiB0aGUgcmVsZWFzZSBhZnRlciAwLjYgc2Vjb25kcy5cblx0XHQgKiBlbnYudHJpZ2dlckF0dGFja1JlbGVhc2UoMC42KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbHMgYWxsIHNjaGVkdWxlZCBlbnZlbG9wZSBjaGFuZ2VzIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBhZnRlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5fc2lnLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhhZnRlcik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEJvcnJvd3MgdGhlIGNvbm5lY3QgbWV0aG9kIGZyb20gVG9uZS5TaWduYWwuXG5cdFx0ICogIEBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuY29ubmVjdCA9IFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdDtcblx0ICAgIC8qKlxuXHQgXHQgKiAgR2VuZXJhdGUgc29tZSBjb21wbGV4IGVudmVsb3BlIGN1cnZlcy5cblx0IFx0ICovXG5cdCAgICAoZnVuY3Rpb24gX2NyZWF0ZUN1cnZlcygpIHtcblx0ICAgICAgICB2YXIgY3VydmVMZW4gPSAxMjg7XG5cdCAgICAgICAgdmFyIGksIGs7XG5cdCAgICAgICAgLy9jb3NpbmUgY3VydmVcblx0ICAgICAgICB2YXIgY29zaW5lQ3VydmUgPSBbXTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBjb3NpbmVDdXJ2ZVtpXSA9IE1hdGguc2luKGkgLyAoY3VydmVMZW4gLSAxKSAqIChNYXRoLlBJIC8gMikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JpcHBsZSBjdXJ2ZVxuXHQgICAgICAgIHZhciByaXBwbGVDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIHZhciByaXBwbGVDdXJ2ZUZyZXEgPSA2LjQ7XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuIC0gMTsgaSsrKSB7XG5cdCAgICAgICAgICAgIGsgPSBpIC8gKGN1cnZlTGVuIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciBzaW5lV2F2ZSA9IE1hdGguc2luKGsgKiAoTWF0aC5QSSAqIDIpICogcmlwcGxlQ3VydmVGcmVxIC0gTWF0aC5QSSAvIDIpICsgMTtcblx0ICAgICAgICAgICAgcmlwcGxlQ3VydmVbaV0gPSBzaW5lV2F2ZSAvIDEwICsgayAqIDAuODM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJpcHBsZUN1cnZlW2N1cnZlTGVuIC0gMV0gPSAxO1xuXHQgICAgICAgIC8vc3RhaXJzIGN1cnZlXG5cdCAgICAgICAgdmFyIHN0YWlyc0N1cnZlID0gW107XG5cdCAgICAgICAgdmFyIHN0ZXBzID0gNTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBzdGFpcnNDdXJ2ZVtpXSA9IE1hdGguY2VpbChpIC8gKGN1cnZlTGVuIC0gMSkgKiBzdGVwcykgLyBzdGVwcztcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9pbi1vdXQgZWFzaW5nIGN1cnZlXG5cdCAgICAgICAgdmFyIHNpbmVDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGsgPSBpIC8gKGN1cnZlTGVuIC0gMSk7XG5cdCAgICAgICAgICAgIHNpbmVDdXJ2ZVtpXSA9IDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hIGJvdW5jZSBjdXJ2ZVxuXHQgICAgICAgIHZhciBib3VuY2VDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGsgPSBpIC8gKGN1cnZlTGVuIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciBmcmVxID0gTWF0aC5wb3coaywgMykgKiA0ICsgMC4yO1xuXHQgICAgICAgICAgICB2YXIgdmFsID0gTWF0aC5jb3MoZnJlcSAqIE1hdGguUEkgKiAyICogayk7XG5cdCAgICAgICAgICAgIGJvdW5jZUN1cnZlW2ldID0gTWF0aC5hYnModmFsICogKDEgLSBrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEludmVydCBhIHZhbHVlIGN1cnZlIHRvIG1ha2UgaXQgd29yayBmb3IgdGhlIHJlbGVhc2Vcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgZnVuY3Rpb24gaW52ZXJ0Q3VydmUoY3VydmUpIHtcblx0ICAgICAgICAgICAgdmFyIG91dCA9IG5ldyBBcnJheShjdXJ2ZS5sZW5ndGgpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGN1cnZlLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICBvdXRbal0gPSAxIC0gY3VydmVbal07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIG91dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcmV2ZXJzZSB0aGUgY3VydmVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgZnVuY3Rpb24gcmV2ZXJzZUN1cnZlKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBjdXJ2ZS5zbGljZSgwKS5yZXZlcnNlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGF0dGFjayBhbmQgcmVsZWFzZSBjdXJ2ZSBhcnJheXNcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5UeXBlID0ge1xuXHQgICAgICAgICAgICAnbGluZWFyJzogJ2xpbmVhcicsXG5cdCAgICAgICAgICAgICdleHBvbmVudGlhbCc6ICdleHBvbmVudGlhbCcsXG5cdCAgICAgICAgICAgICdib3VuY2UnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogaW52ZXJ0Q3VydmUoYm91bmNlQ3VydmUpLFxuXHQgICAgICAgICAgICAgICAgT3V0OiBib3VuY2VDdXJ2ZVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnY29zaW5lJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IGNvc2luZUN1cnZlLFxuXHQgICAgICAgICAgICAgICAgT3V0OiByZXZlcnNlQ3VydmUoY29zaW5lQ3VydmUpXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdzdGVwJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IHN0YWlyc0N1cnZlLFxuXHQgICAgICAgICAgICAgICAgT3V0OiBpbnZlcnRDdXJ2ZShzdGFpcnNDdXJ2ZSlcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ3JpcHBsZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiByaXBwbGVDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogaW52ZXJ0Q3VydmUocmlwcGxlQ3VydmUpXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdzaW5lJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IHNpbmVDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogaW52ZXJ0Q3VydmUoc2luZUN1cnZlKVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfTtcblx0ICAgIH0oKSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGlzY29ubmVjdCBhbmQgZGlzcG9zZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaWcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NpZyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSBpcyBhIFRvbmUuRW52ZWxvcGUgY29ubmVjdGVkIHRvIGEgZ2FpbiBub2RlLlxuXHRcdCAqICAgICAgICAgIFVubGlrZSBUb25lLkVudmVsb3BlLCB3aGljaCBvdXRwdXRzIHRoZSBlbnZlbG9wZSdzIHZhbHVlLCBUb25lLkFtcGxpdHVkZUVudmVsb3BlIGFjY2VwdHNcblx0XHQgKiAgICAgICAgICBhbiBhdWRpbyBzaWduYWwgYXMgdGhlIGlucHV0IGFuZCB3aWxsIGFwcGx5IHRoZSBlbnZlbG9wZSB0byB0aGUgYW1wbGl0dWRlXG5cdFx0ICogICAgICAgICAgb2YgdGhlIHNpZ25hbC4gUmVhZCBtb3JlIGFib3V0IEFEU1IgRW52ZWxvcGVzIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5bnRoZXNpemVyI0FEU1JfZW52ZWxvcGUpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbnZlbG9wZX1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja10gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGUgdG8gZ28gZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgdG8gaXQncyBtYXhpbXVtIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdFRoZSBwZXJpb2Qgb2YgdGltZSBhZnRlciB0aGUgYXR0YWNrIHRoYXQgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICBcdHRvIGZhbGwgdG8gdGhlIHN1c3RhaW4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzdXN0YWluXVx0VGhlIHBlcmNlbnQgb2YgdGhlIG1heGltdW0gdmFsdWUgdGhhdCB0aGUgZW52ZWxvcGUgcmVzdHMgYXQgdW50aWxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR0aGUgcmVsZWFzZSBpcyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHRUaGUgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkIGl0IHRha2VzIHRvIHJlYWNoIDAuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGFtcEVudiA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKHtcblx0XHQgKiBcdFwiYXR0YWNrXCI6IDAuMSxcblx0XHQgKiBcdFwiZGVjYXlcIjogMC4yLFxuXHRcdCAqIFx0XCJzdXN0YWluXCI6IDEuMCxcblx0XHQgKiBcdFwicmVsZWFzZVwiOiAwLjhcblx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdCAqIC8vY3JlYXRlIGFuIG9zY2lsbGF0b3IgYW5kIGNvbm5lY3QgaXRcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QoYW1wRW52KS5zdGFydCgpO1xuXHRcdCAqIC8vdHJpZ2dlciB0aGUgZW52ZWxvcGVzIGF0dGFjayBhbmQgcmVsZWFzZSBcIjh0XCIgYXBhcnRcblx0XHQgKiBhbXBFbnYudHJpZ2dlckF0dGFja1JlbGVhc2UoXCI4dFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dCBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgdGhpcy5fc2lnLmNvbm5lY3QodGhpcy5vdXRwdXQuZ2Fpbik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFtcGxpdHVkZUVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEFuYWx5c2VyTm9kZS5nZXRGbG9hdFRpbWVEb21haW5EYXRhIHBvbHlmaWxsXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIUFuYWx5c2VyTm9kZS5wcm90b3R5cGUuZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSkge1xuXHQgICAgICAgICAgICAvL3JlZmVyZW5jZWQgaHR0cHM6Ly9naXRodWIuY29tL21vaGF5b25hby9nZXQtZmxvYXQtdGltZS1kb21haW4tZGF0YVxuXHQgICAgICAgICAgICBBbmFseXNlck5vZGUucHJvdG90eXBlLmdldEZsb2F0VGltZURvbWFpbkRhdGEgPSBmdW5jdGlvbiAoYXJyYXkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB1aW50OCA9IG5ldyBVaW50OEFycmF5KGFycmF5Lmxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmdldEJ5dGVUaW1lRG9tYWluRGF0YSh1aW50OCk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVpbnQ4Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSAodWludDhbaV0gLSAxMjgpIC8gMTI4O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIFdlYiBBdWRpbydzXG5cdFx0ICogICAgICAgICAgW0FuYWx5c2VyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyNpZGwtZGVmLUFuYWx5c2VyTm9kZSkuXG5cdFx0ICogICAgICAgICAgRXh0cmFjdHMgRkZUIG9yIFdhdmVmb3JtIGRhdGEgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nPX0gdHlwZSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGFuYWx5c2lzLCBlaXRoZXIgXCJmZnRcIiwgb3IgXCJ3YXZlZm9ybVwiLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHNpemUgVGhlIHNpemUgb2YgdGhlIEZGVC4gVmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnc2l6ZSdcblx0ICAgICAgICBdLCBUb25lLkFuYWx5c2VyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0FuYWx5c2VyTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFuYWx5c2lzIHR5cGVcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBidWZmZXIgdGhhdCB0aGUgRkZUIGRhdGEgaXMgd3JpdHRlbiB0b1xuXHRcdFx0ICogIEB0eXBlIHtUeXBlZEFycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIC8vc2V0IHRoZSB2YWx1ZXMgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5zaXplID0gb3B0aW9ucy5zaXplO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFuYWx5c2VyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3NpemUnOiAxMDI0LFxuXHQgICAgICAgICd0eXBlJzogJ2ZmdCcsXG5cdCAgICAgICAgJ3Ntb290aGluZyc6IDAuOFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQb3NzaWJsZSByZXR1cm4gdHlwZXMgb2YgYW5hbHlzZXIuZ2V0VmFsdWUoKVxuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlci5UeXBlID0ge1xuXHQgICAgICAgIFdhdmVmb3JtOiAnd2F2ZWZvcm0nLFxuXHQgICAgICAgIEZGVDogJ2ZmdCdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUnVuIHRoZSBhbmFseXNpcyBnaXZlbiB0aGUgY3VycmVudCBzZXR0aW5ncyBhbmQgcmV0dXJuIHRoZVxuXHRcdCAqICByZXN1bHQgYXMgYSBUeXBlZEFycmF5LlxuXHRcdCAqICBAcmV0dXJucyB7VHlwZWRBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkFuYWx5c2VyLlR5cGUuRkZUKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLmdldEZsb2F0RnJlcXVlbmN5RGF0YSh0aGlzLl9idWZmZXIpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5BbmFseXNlci5UeXBlLldhdmVmb3JtKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLmdldEZsb2F0VGltZURvbWFpbkRhdGEodGhpcy5fYnVmZmVyKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNpemUgb2YgYW5hbHlzaXMuIFRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkFuYWx5c2VyI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BbmFseXNlci5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291bnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLmZmdFNpemUgPSBzaXplICogMjtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShzaXplKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYW5hbHlzaXMgZnVuY3Rpb24gcmV0dXJuZWQgYnkgYW5hbHlzZXIuZ2V0VmFsdWUoKSwgZWl0aGVyIFwiZmZ0XCIgb3IgXCJ3YXZlZm9ybVwiLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5BbmFseXNlciNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlICE9PSBUb25lLkFuYWx5c2VyLlR5cGUuV2F2ZWZvcm0gJiYgdHlwZSAhPT0gVG9uZS5BbmFseXNlci5UeXBlLkZGVCkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5BbmFseXNlcjogaW52YWxpZCB0eXBlOiAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgMCByZXByZXNlbnRzIG5vIHRpbWUgYXZlcmFnaW5nIHdpdGggdGhlIGxhc3QgYW5hbHlzaXMgZnJhbWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkFuYWx5c2VyI1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHNtb290aGluZ1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLCAnc21vb3RoaW5nJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc21vb3RoaW5nVGltZUNvbnN0YW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudCA9IHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQW5hbHlzZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFuYWx5c2VyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Db21wcmVzc29yIGlzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCB0aGUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICBbRHluYW1pY3NDb21wcmVzc29yTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtZHluYW1pY3Njb21wcmVzc29ybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICAgICAgICAgQ29tcHJlc3Npb24gcmVkdWNlcyB0aGUgdm9sdW1lIG9mIGxvdWQgc291bmRzIG9yIGFtcGxpZmllcyBxdWlldCBzb3VuZHNcblx0XHQgKiAgICAgICAgIGJ5IG5hcnJvd2luZyBvciBcImNvbXByZXNzaW5nXCIgYW4gYXVkaW8gc2lnbmFsJ3MgZHluYW1pYyByYW5nZS5cblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EeW5hbWljX3JhbmdlX2NvbXByZXNzaW9uKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfE9iamVjdH0gW3RocmVzaG9sZF0gVGhlIHZhbHVlIGFib3ZlIHdoaWNoIHRoZSBjb21wcmVzc2lvbiBzdGFydHMgdG8gYmUgYXBwbGllZC5cblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gW3JhdGlvXSBUaGUgZ2FpbiByZWR1Y3Rpb24gcmF0aW8uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNvbXAgPSBuZXcgVG9uZS5Db21wcmVzc29yKC0zMCwgMyk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbXByZXNzb3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndGhyZXNob2xkJyxcblx0ICAgICAgICAgICAgJ3JhdGlvJ1xuXHQgICAgICAgIF0sIFRvbmUuQ29tcHJlc3Nvcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29tcHJlc3NvciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0R5bmFtaWNzQ29tcHJlc3Nvck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHRocmVzaG9sZCB2YXVlXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9jb21wcmVzc29yLnRocmVzaG9sZCxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlY2liZWxzLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGF0dGFjayBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX2NvbXByZXNzb3IuYXR0YWNrLCBUb25lLlR5cGUuVGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJlbGVhc2UgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fY29tcHJlc3Nvci5yZWxlYXNlLCBUb25lLlR5cGUuVGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGtuZWUgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMua25lZSA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fY29tcHJlc3Nvci5rbmVlLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVjaWJlbHMsXG5cdCAgICAgICAgICAgICdjb252ZXJ0JzogZmFsc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmF0aW8gdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmF0aW8gPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2NvbXByZXNzb3IucmF0aW8sXG5cdCAgICAgICAgICAgICdjb252ZXJ0JzogZmFsc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL3NldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdrbmVlJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnLFxuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JhdGlvJyxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnNldChvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNvbXByZXNzb3IsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db21wcmVzc29yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdyYXRpbyc6IDEyLFxuXHQgICAgICAgICd0aHJlc2hvbGQnOiAtMjQsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAwLjI1LFxuXHQgICAgICAgICdhdHRhY2snOiAwLjAwMyxcblx0ICAgICAgICAna25lZSc6IDMwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNvbXByZXNzb3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29tcHJlc3Nvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2tuZWUnLFxuXHQgICAgICAgICAgICAncmVsZWFzZScsXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAncmF0aW8nLFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuYXR0YWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJlbGVhc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yYXRpby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yYXRpbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5rbmVlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmtuZWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNvbXByZXNzb3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBZGQgYSBzaWduYWwgYW5kIGEgbnVtYmVyIG9yIHR3byBzaWduYWxzLiBXaGVuIG5vIHZhbHVlIGlzXG5cdFx0ICogICAgICAgICBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IsIFRvbmUuQWRkIHdpbGwgc3VtIDxjb2RlPmlucHV0WzBdPC9jb2RlPlxuXHRcdCAqICAgICAgICAgYW5kIDxjb2RlPmlucHV0WzFdPC9jb2RlPi4gSWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IsIFxuXHRcdCAqICAgICAgICAgdGhlIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGlucHV0LlxuXHRcdCAqICBcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZSBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgVG9uZS5BZGQgd2lsbCBzdW0gdGhlIGZpcnN0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNlY29uZCBpbnB1dHMuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMik7XG5cdFx0ICogdmFyIGFkZCA9IG5ldyBUb25lLkFkZCgyKTtcblx0XHQgKiBzaWduYWwuY29ubmVjdChhZGQpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBhZGQgZXF1YWxzIDRcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2lmIGNvbnN0cnVjdGVkIHdpdGggbm8gYXJndW1lbnRzXG5cdFx0ICogLy9pdCB3aWxsIGFkZCB0aGUgZmlyc3QgYW5kIHNlY29uZCBpbnB1dHNcblx0XHQgKiB2YXIgYWRkID0gbmV3IFRvbmUuQWRkKCk7XG5cdFx0ICogdmFyIHNpZzAgPSBuZXcgVG9uZS5TaWduYWwoMykuY29ubmVjdChhZGQsIDAsIDApO1xuXHRcdCAqIHZhciBzaWcxID0gbmV3IFRvbmUuU2lnbmFsKDQpLmNvbm5lY3QoYWRkLCAwLCAxKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgYWRkIGVxdWFscyA3LiBcblx0XHQgKi9cblx0ICAgIFRvbmUuQWRkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHN1bW1pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VtID0gdGhpcy5pbnB1dFswXSA9IHRoaXMuaW5wdXRbMV0gPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLlNpZ25hbCh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uY29ubmVjdCh0aGlzLl9zdW0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQWRkLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFkZH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BZGQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdW0uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQWRkO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIE11bHRpcGx5IHR3byBpbmNvbWluZyBzaWduYWxzLiBPciwgaWYgYSBudW1iZXIgaXMgZ2l2ZW4gaW4gdGhlIGNvbnN0cnVjdG9yLFxuXHRcdCAqICAgICAgICAgIG11bHRpcGxpZXMgdGhlIGluY29taW5nIHNpZ25hbCBieSB0aGF0IHZhbHVlLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWUgQ29uc3RhbnQgdmFsdWUgdG8gbXVsdGlwbGUuIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgcmV0dXJuIHRoZSBwcm9kdWN0IG9mIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGlucHV0c1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0XHQgKiB2YXIgc2lnQSA9IG5ldyBUb25lLlNpZ25hbCgzKTtcblx0XHQgKiB2YXIgc2lnQiA9IG5ldyBUb25lLlNpZ25hbCg0KTtcblx0XHQgKiBzaWdBLmNvbm5lY3QobXVsdCwgMCwgMCk7XG5cdFx0ICogc2lnQi5jb25uZWN0KG11bHQsIDAsIDEpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIG11bHQgaXMgMTIuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgxMCk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgyKS5jb25uZWN0KG11bHQpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBtdWx0IGlzIDIwLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aXBseSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dCBub2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvdXRwdXQgbm9kZVxuXHRcdFx0ICogIGl0IGlzIGFsc28gdGhlIEdhaW5Ob2RlIHdoaWNoIGhhbmRsZXMgdGhlIHNjYWxpbmcgb2YgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKlxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdCA9IHRoaXMuaW5wdXRbMF0gPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2NhbGluZyBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9QYXJhbX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0WzFdID0gdGhpcy5vdXRwdXQuZ2Fpbjtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKHZhbHVlLCAwKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk11bHRpcGx5LCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTXVsdGlwbHl9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGlwbHkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9tdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTXVsdGlwbHk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBOZWdhdGUgdGhlIGluY29taW5nIHNpZ25hbC4gaS5lLiBhbiBpbnB1dCBzaWduYWwgb2YgMTAgd2lsbCBvdXRwdXQgLTEwXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG5lZyA9IG5ldyBUb25lLk5lZ2F0ZSgpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoLTIpLmNvbm5lY3QobmVnKTtcblx0XHQgKiAvL291dHB1dCBvZiBuZWcgaXMgcG9zaXRpdmUgMi4gXG5cdFx0ICovXG5cdCAgICBUb25lLk5lZ2F0ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBuZWdhdGlvbiBpcyBkb25lIGJ5IG11bHRpcGx5aW5nIGJ5IC0xXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTXVsdGlwbHkoLTEpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTmVnYXRlLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5lZ2F0ZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5OZWdhdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5OZWdhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTdWJ0cmFjdCB0aGUgc2lnbmFsIGNvbm5lY3RlZCB0byA8Y29kZT5pbnB1dFsxXTwvY29kZT4gZnJvbSB0aGUgc2lnbmFsIGNvbm5lY3RlZCBcblx0XHQgKiAgICAgICAgIHRvIDxjb2RlPmlucHV0WzBdPC9jb2RlPi4gSWYgYW4gYXJndW1lbnQgaXMgcHJvdmlkZWQgaW4gdGhlIGNvbnN0cnVjdG9yLCB0aGUgXG5cdFx0ICogICAgICAgICBzaWduYWxzIDxjb2RlPi52YWx1ZTwvY29kZT4gd2lsbCBiZSBzdWJ0cmFjdGVkIGZyb20gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlIFRoZSB2YWx1ZSB0byBzdWJ0cmFjdCBmcm9tIHRoZSBpbmNvbWluZyBzaWduYWwuIElmIHRoZSB2YWx1ZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG9taXR0ZWQsIGl0IHdpbGwgc3VidHJhY3QgdGhlIHNlY29uZCBzaWduYWwgZnJvbSB0aGUgZmlyc3QuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN1YiA9IG5ldyBUb25lLlN1YnRyYWN0KDEpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoNCkuY29ubmVjdChzdWIpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBzdWIgaXMgMy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN1YiA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdFx0ICogdmFyIHNpZ0EgPSBuZXcgVG9uZS5TaWduYWwoMTApO1xuXHRcdCAqIHZhciBzaWdCID0gbmV3IFRvbmUuU2lnbmFsKDIuNSk7XG5cdFx0ICogc2lnQS5jb25uZWN0KHN1YiwgMCwgMCk7XG5cdFx0ICogc2lnQi5jb25uZWN0KHN1YiwgMCwgMSk7XG5cdFx0ICogLy9vdXRwdXQgb2Ygc3ViIGlzIDcuNVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdWJ0cmFjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzdW1taW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IHRoaXMuaW5wdXRbMF0gPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBuZWdhdGUgdGhlIGlucHV0IG9mIHRoZSBzZWNvbmQgaW5wdXQgYmVmb3JlIGNvbm5lY3RpbmcgaXRcblx0XHRcdCAqICB0byB0aGUgc3VtbWluZyBub2RlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk5lZ2F0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbmVnID0gbmV3IFRvbmUuTmVnYXRlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIHZhbHVlIGlzIHNldFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuU2lnbmFsKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jaGFpbih0aGlzLl9uZWcsIHRoaXMuX3N1bSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdWJ0cmFjdCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWxCYXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN1YnRyYWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbmVnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9uZWcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N1bS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc3VtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdWJ0cmFjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIENvbnZlcnQgYW4gaW5jb21pbmcgc2lnbmFsIGJldHdlZW4gMCwgMSB0byBhbiBlcXVhbCBwb3dlciBnYWluIHNjYWxlLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBlcVBvd0dhaW4gPSBuZXcgVG9uZS5FcXVhbFBvd2VyR2FpbigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FcXVhbFBvd2VyR2FpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lcVBvd2VyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyh2YWwpIDwgMC4wMDEpIHtcblx0ICAgICAgICAgICAgICAgIC8vc2hvdWxkIG91dHB1dCAwIHdoZW4gaW5wdXQgaXMgMFxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5lcXVhbFBvd2VyU2NhbGUodmFsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgNDA5Nik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FcXVhbFBvd2VyR2FpbiwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FcXVhbFBvd2VyR2Fpbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FcXVhbFBvd2VyR2Fpbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9lcVBvd2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lcVBvd2VyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FcXVhbFBvd2VyR2Fpbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgIFRvbmUuQ3Jvc3NmYWRlIHByb3ZpZGVzIGVxdWFsIHBvd2VyIGZhZGluZyBiZXR3ZWVuIHR3byBpbnB1dHMuXG5cdFx0ICogICAgICAgICBNb3JlIG9uIGNyb3NzZmFkaW5nIHRlY2huaXF1ZSBbaGVyZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmFkZV8oYXVkaW9fZW5naW5lZXJpbmcpI0Nyb3NzZmFkaW5nKS5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiBAcGFyYW0ge05vcm1hbFJhbmdlfSBbaW5pdGlhbEZhZGU9MC41XVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIGNyb3NzRmFkZSA9IG5ldyBUb25lLkNyb3NzRmFkZSgwLjUpO1xuXHRcdCAqIC8vY29ubmVjdCBlZmZlY3QgQSB0byBjcm9zc2ZhZGUgZnJvbVxuXHRcdCAqIC8vZWZmZWN0IG91dHB1dCAwIHRvIGNyb3NzZmFkZSBpbnB1dCAwXG5cdFx0ICogZWZmZWN0QS5jb25uZWN0KGNyb3NzRmFkZSwgMCwgMCk7XG5cdFx0ICogLy9jb25uZWN0IGVmZmVjdCBCIHRvIGNyb3NzZmFkZSBmcm9tXG5cdFx0ICogLy9lZmZlY3Qgb3V0cHV0IDAgdG8gY3Jvc3NmYWRlIGlucHV0IDFcblx0XHQgKiBlZmZlY3RCLmNvbm5lY3QoY3Jvc3NGYWRlLCAwLCAxKTtcblx0XHQgKiBjcm9zc0ZhZGUuZmFkZS52YWx1ZSA9IDA7XG5cdFx0ICogLy8gXiBvbmx5IGVmZmVjdEEgaXMgb3V0cHV0XG5cdFx0ICogY3Jvc3NGYWRlLmZhZGUudmFsdWUgPSAxO1xuXHRcdCAqIC8vIF4gb25seSBlZmZlY3RCIGlzIG91dHB1dFxuXHRcdCAqIGNyb3NzRmFkZS5mYWRlLnZhbHVlID0gMC41O1xuXHRcdCAqIC8vIF4gdGhlIHR3byBzaWduYWxzIGFyZSBtaXhlZCBlcXVhbGx5LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Dcm9zc0ZhZGUgPSBmdW5jdGlvbiAoaW5pdGlhbEZhZGUpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+aW5wdXRbMF08L2NvZGU+LlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmEgPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFsxXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYiA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBcdFRoZSBtaXggYmV0d2VlbiB0aGUgdHdvIGlucHV0cy4gQSBmYWRlIHZhbHVlIG9mIDBcblx0XHRcdCAqIFx0d2lsbCBvdXRwdXQgMTAwJSA8Y29kZT5pbnB1dFswXTwvY29kZT4gYW5kXG5cdFx0XHQgKiBcdGEgdmFsdWUgb2YgMSB3aWxsIG91dHB1dCAxMDAlIDxjb2RlPmlucHV0WzFdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlID0gbmV3IFRvbmUuU2lnbmFsKFRvbmUuZGVmYXVsdEFyZyhpbml0aWFsRmFkZSwgMC41KSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBlcXVhbCBwb3dlciBnYWluIGNyb3NzIGZhZGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkVxdWFsUG93ZXJHYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckEgPSBuZXcgVG9uZS5FcXVhbFBvd2VyR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGVxdWFsIHBvd2VyIGdhaW4gY3Jvc3MgZmFkZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRXF1YWxQb3dlckdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQiA9IG5ldyBUb25lLkVxdWFsUG93ZXJHYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaW52ZXJ0IHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25lID0gdGhpcy5jb250ZXh0LmdldENvbnN0YW50KDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGludmVydCB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ludmVydCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuYS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLmIuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5mYWRlLmNoYWluKHRoaXMuX2VxdWFsUG93ZXJCLCB0aGlzLmIuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fb25lLmNvbm5lY3QodGhpcy5faW52ZXJ0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLmZhZGUuY29ubmVjdCh0aGlzLl9pbnZlcnQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2ludmVydC5jaGFpbih0aGlzLl9lcXVhbFBvd2VyQSwgdGhpcy5hLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdmYWRlJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Dcm9zc0ZhZGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Dcm9zc0ZhZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3Jvc3NGYWRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2ZhZGUnKTtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJCLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mYWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZhZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ludmVydC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faW52ZXJ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vbmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuYS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5hID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ3Jvc3NGYWRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRmlsdGVyIGlzIGEgZmlsdGVyIHdoaWNoIGFsbG93cyBmb3IgYWxsIG9mIHRoZSBzYW1lIG5hdGl2ZSBtZXRob2RzXG5cdFx0ICogICAgICAgICAgYXMgdGhlIFtCaXF1YWRGaWx0ZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1iaXF1YWRmaWx0ZXJub2RlLWludGVyZmFjZSkuXG5cdFx0ICogICAgICAgICAgVG9uZS5GaWx0ZXIgaGFzIHRoZSBhZGRlZCBhYmlsaXR5IHRvIHNldCB0aGUgZmlsdGVyIHJvbGxvZmYgYXQgLTEyXG5cdFx0ICogICAgICAgICAgKGRlZmF1bHQpLCAtMjQgYW5kIC00OC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nPX0gdHlwZSBUaGUgdHlwZSBvZiBmaWx0ZXIuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gcm9sbG9mZiBUaGUgZHJvcCBpbiBkZWNpYmVscyBwZXIgb2N0YXZlIGFmdGVyIHRoZSBjdXRvZmYgZnJlcXVlbmN5LlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgY2hvaWNlczogLTEyLCAtMjQsIGFuZCAtNDhcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGZpbHRlciA9IG5ldyBUb25lLkZpbHRlcigyMDAsIFwiaGlnaHBhc3NcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdyb2xsb2ZmJ1xuXHQgICAgICAgIF0sIFRvbmUuRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmlsdGVyKHMpXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbCgwLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIG9mIHRoZSBmaWx0ZXIsIG9ubHkgdXNlZCBpbiBjZXJ0YWluIGZpbHRlciB0eXBlc1xuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5nYWluID0gbmV3IFRvbmUuU2lnbmFsKHtcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5nYWluLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIFEgb3IgUXVhbGl0eSBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLlEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0eXBlIG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7c3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSByb2xsb2ZmIHZhbHVlIG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yb2xsb2ZmID0gb3B0aW9ucy5yb2xsb2ZmO1xuXHQgICAgICAgIC8vc2V0IHRoZSByb2xsb2ZmO1xuXHQgICAgICAgIHRoaXMucm9sbG9mZiA9IG9wdGlvbnMucm9sbG9mZjtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZpbHRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICdsb3dwYXNzJyxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMzUwLFxuXHQgICAgICAgICdyb2xsb2ZmJzogLTEyLFxuXHQgICAgICAgICdRJzogMSxcblx0ICAgICAgICAnZ2Fpbic6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgZmlsdGVyLiBUeXBlczogXCJsb3dwYXNzXCIsIFwiaGlnaHBhc3NcIixcblx0XHQgKiBcImJhbmRwYXNzXCIsIFwibG93c2hlbGZcIiwgXCJoaWdoc2hlbGZcIiwgXCJub3RjaFwiLCBcImFsbHBhc3NcIiwgb3IgXCJwZWFraW5nXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmlsdGVyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB2YXIgdHlwZXMgPSBbXG5cdCAgICAgICAgICAgICAgICAnbG93cGFzcycsXG5cdCAgICAgICAgICAgICAgICAnaGlnaHBhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ2JhbmRwYXNzJyxcblx0ICAgICAgICAgICAgICAgICdsb3dzaGVsZicsXG5cdCAgICAgICAgICAgICAgICAnaGlnaHNoZWxmJyxcblx0ICAgICAgICAgICAgICAgICdub3RjaCcsXG5cdCAgICAgICAgICAgICAgICAnYWxscGFzcycsXG5cdCAgICAgICAgICAgICAgICAncGVha2luZydcblx0ICAgICAgICAgICAgXTtcblx0ICAgICAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLkZpbHRlcjogaW52YWxpZCB0eXBlICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcm9sbG9mZiBvZiB0aGUgZmlsdGVyIHdoaWNoIGlzIHRoZSBkcm9wIGluIGRiXG5cdFx0ICogcGVyIG9jdGF2ZS4gSW1wbGVtZW50ZWQgaW50ZXJuYWxseSBieSBjYXNjYWRpbmcgZmlsdGVycy5cblx0XHQgKiBPbmx5IGFjY2VwdHMgdGhlIHZhbHVlcyAtMTIsIC0yNCwgLTQ4IGFuZCAtOTYuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcm9sbG9mZlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmlsdGVyLnByb3RvdHlwZSwgJ3JvbGxvZmYnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb2xsb2ZmO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocm9sbG9mZikge1xuXHQgICAgICAgICAgICByb2xsb2ZmID0gcGFyc2VJbnQocm9sbG9mZiwgMTApO1xuXHQgICAgICAgICAgICB2YXIgcG9zc2liaWxpdGllcyA9IFtcblx0ICAgICAgICAgICAgICAgIC0xMixcblx0ICAgICAgICAgICAgICAgIC0yNCxcblx0ICAgICAgICAgICAgICAgIC00OCxcblx0ICAgICAgICAgICAgICAgIC05NlxuXHQgICAgICAgICAgICBdO1xuXHQgICAgICAgICAgICB2YXIgY2FzY2FkaW5nQ291bnQgPSBwb3NzaWJpbGl0aWVzLmluZGV4T2Yocm9sbG9mZik7XG5cdCAgICAgICAgICAgIC8vY2hlY2sgdGhlIHJvbGxvZmYgaXMgdmFsaWRcblx0ICAgICAgICAgICAgaWYgKGNhc2NhZGluZ0NvdW50ID09PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RvbmUuRmlsdGVyOiByb2xsb2ZmIGNhbiBvbmx5IGJlIC0xMiwgLTI0LCAtNDggb3IgLTk2Jyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgY2FzY2FkaW5nQ291bnQgKz0gMTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9sbG9mZiA9IHJvbGxvZmY7XG5cdCAgICAgICAgICAgIC8vZmlyc3QgZGlzY29ubmVjdCB0aGUgZmlsdGVycyBhbmQgdGhyb3cgdGhlbSBhd2F5XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXSA9IG51bGw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IG5ldyBBcnJheShjYXNjYWRpbmdDb3VudCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNvdW50ID0gMDsgY291bnQgPCBjYXNjYWRpbmdDb3VudDsgY291bnQrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGZpbHRlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgICAgIGZpbHRlci50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QoZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KGZpbHRlci5kZXR1bmUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5RLmNvbm5lY3QoZmlsdGVyLlEpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5nYWluLmNvbm5lY3QoZmlsdGVyLmdhaW4pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tjb3VudF0gPSBmaWx0ZXI7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9jb25uZWN0IHRoZW0gdXBcblx0ICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb25DaGFpbiA9IFt0aGlzLmlucHV0XS5jb25jYXQodGhpcy5fZmlsdGVycykuY29uY2F0KFt0aGlzLm91dHB1dF0pO1xuXHQgICAgICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgY29ubmVjdGlvbkNoYWluKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuUS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU3BsaXQgdGhlIGluY29taW5nIHNpZ25hbCBpbnRvIHRocmVlIGJhbmRzIChsb3csIG1pZCwgaGlnaClcblx0XHQgKiAgICAgICAgIHdpdGggdHdvIGNyb3Nzb3ZlciBmcmVxdWVuY3kgY29udHJvbHMuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbbG93RnJlcXVlbmN5XSB0aGUgbG93L21pZCBjcm9zc292ZXIgZnJlcXVlbmN5XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbaGlnaEZyZXF1ZW5jeV0gdGhlIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3lcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kU3BsaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5NdWx0aWJhbmRTcGxpdCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvdXRwdXRzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBBcnJheSgzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbG93IGJhbmQuIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3cgPSB0aGlzLm91dHB1dFswXSA9IG5ldyBUb25lLkZpbHRlcigwLCAnbG93cGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsb3dlciBmaWx0ZXIgb2YgdGhlIG1pZCBiYW5kXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb3dNaWRGaWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2hpZ2hwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBiYW5kIG91dHB1dC4gQWxpYXMgZm9yIDxjb2RlPm91dHB1dFsxXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMub3V0cHV0WzFdID0gbmV3IFRvbmUuRmlsdGVyKDAsICdsb3dwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGhpZ2ggYmFuZCBvdXRwdXQuIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMl08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoID0gdGhpcy5vdXRwdXRbMl0gPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2hpZ2hwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMubG93RnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL2hpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmhpZ2hGcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBxdWFsaXR5IG9mIGFsbCB0aGUgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuUSk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5mYW4odGhpcy5sb3csIHRoaXMuaGlnaCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLl9sb3dNaWRGaWx0ZXIsIHRoaXMubWlkKTtcblx0ICAgICAgICAvL3RoZSBmcmVxdWVuY3kgY29udHJvbCBzaWduYWxcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeS5jb25uZWN0KHRoaXMubG93LmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9sb3dNaWRGaWx0ZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kuY29ubmVjdCh0aGlzLm1pZC5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuaGlnaC5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vdGhlIFEgdmFsdWVcblx0ICAgICAgICB0aGlzLlEuY29ubmVjdCh0aGlzLmxvdy5RKTtcblx0ICAgICAgICB0aGlzLlEuY29ubmVjdCh0aGlzLl9sb3dNaWRGaWx0ZXIuUSk7XG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5taWQuUSk7XG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5oaWdoLlEpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk11bHRpYmFuZFNwbGl0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRTcGxpdC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbG93RnJlcXVlbmN5JzogNDAwLFxuXHQgICAgICAgICdoaWdoRnJlcXVlbmN5JzogMjUwMCxcblx0ICAgICAgICAnUSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk11bHRpYmFuZFNwbGl0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZFNwbGl0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubG93LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxvdyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbG93TWlkRmlsdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sb3dNaWRGaWx0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhpZ2ggPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NdWx0aWJhbmRTcGxpdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRVEzIGlzIGEgdGhyZWUgYmFuZCBFUSB3aXRoIGNvbnRyb2wgb3ZlciBsb3csIG1pZCwgYW5kIGhpZ2ggZ2FpbiBhc1xuXHRcdCAqICAgICAgICAgd2VsbCBhcyB0aGUgbG93IGFuZCBoaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY2llcy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN8T2JqZWN0fSBbbG93TGV2ZWxdIFRoZSBnYWluIGFwcGxpZWQgdG8gdGhlIGxvd3MuXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFttaWRMZXZlbF0gVGhlIGdhaW4gYXBwbGllZCB0byB0aGUgbWlkLlxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbaGlnaExldmVsXSBUaGUgZ2FpbiBhcHBsaWVkIHRvIHRoZSBoaWdoLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBlcSA9IG5ldyBUb25lLkVRMygtMTAsIDMsIC0yMCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkVRMyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2hpZ2gnXG5cdCAgICAgICAgXSwgVG9uZS5FUTMpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG91dHB1dCBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbXVsdGliYW5kIHNwbGl0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGliYW5kU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpYmFuZFNwbGl0KHtcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IG9wdGlvbnMubG93RnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IG9wdGlvbnMuaGlnaEZyZXF1ZW5jeVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIGZvciB0aGUgbG93ZXIgc2lnbmFsc1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb3dHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLmxvdywgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBmb3IgdGhlIG1pZCBzaWduYWxzXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZEdhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMubWlkLCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIGhpZ2ggcGFydFxuXHRcdFx0ICogQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9oaWdoR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5oaWdoLCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIGxvdyBwYXJ0XG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvdyA9IHRoaXMuX2xvd0dhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBtaWQgcGFydFxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLl9taWRHYWluLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBpbiBkZWNpYmVscyBvZiB0aGUgaGlnaCBwYXJ0XG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2ggPSB0aGlzLl9oaWdoR2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBRIHZhbHVlIGZvciBhbGwgb2YgdGhlIGZpbHRlcnMuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IHRoaXMuX211bHRpYmFuZFNwbGl0LlE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gdGhpcy5fbXVsdGliYW5kU3BsaXQubG93RnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gdGhpcy5fbXVsdGliYW5kU3BsaXQuaGlnaEZyZXF1ZW5jeTtcblx0ICAgICAgICAvL3RoZSBmcmVxdWVuY3kgYmFuZHNcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdC5sb3cuY2hhaW4odGhpcy5fbG93R2FpbiwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0Lm1pZC5jaGFpbih0aGlzLl9taWRHYWluLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQuaGlnaC5jaGFpbih0aGlzLl9oaWdoR2FpbiwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVRMywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FUTMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2xvdyc6IDAsXG5cdCAgICAgICAgJ21pZCc6IDAsXG5cdCAgICAgICAgJ2hpZ2gnOiAwLFxuXHQgICAgICAgICdsb3dGcmVxdWVuY3knOiA0MDAsXG5cdCAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiAyNTAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVRM30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FUTMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sb3dHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sb3dHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9oaWdoR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faGlnaEdhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVRMztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBQZXJmb3JtcyBhIGxpbmVhciBzY2FsaW5nIG9uIGFuIGlucHV0IHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBTY2FsZXMgYSBOb3JtYWxSYW5nZSBpbnB1dCB0byBiZXR3ZWVuXG5cdFx0ICogICAgICAgICAgb3V0cHV0TWluIGFuZCBvdXRwdXRNYXguXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWluPTBdIFRoZSBvdXRwdXQgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgMC4gXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWF4PTFdXHRUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDEuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzY2FsZSA9IG5ldyBUb25lLlNjYWxlKDUwLCAxMDApO1xuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KHNjYWxlKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2Ygc2NhbGUgZXF1YWxzIDc1XG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlID0gZnVuY3Rpb24gKG91dHB1dE1pbiwgb3V0cHV0TWF4KSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX291dHB1dE1pbiA9IFRvbmUuZGVmYXVsdEFyZyhvdXRwdXRNaW4sIDApO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vdXRwdXRNYXggPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TWF4LCAxKTtcblx0ICAgICAgICAvKiogXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMSk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWRkfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hZGQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkFkZCgwKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5jb25uZWN0KHRoaXMuX2FkZCk7XG5cdCAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNjYWxlLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlbiBcblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMC4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dE1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXRNaW4gPSBtaW47XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgdmFsdWUuIFRoaXMgbnVtYmVyIGlzIG91dHB1dCB3aGVuIFxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAxLiBcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGUucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0TWF4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dE1heCA9IG1heDtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXQgdGhlIHZhbHVlc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZS5wcm90b3R5cGUuX3NldFJhbmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2FkZC52YWx1ZSA9IHRoaXMuX291dHB1dE1pbjtcblx0ICAgICAgICB0aGlzLl9zY2FsZS52YWx1ZSA9IHRoaXMuX291dHB1dE1heCAtIHRoaXMuX291dHB1dE1pbjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNjYWxlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FkZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYWRkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNjYWxlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBQZXJmb3JtcyBhbiBleHBvbmVudGlhbCBzY2FsaW5nIG9uIGFuIGlucHV0IHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBTY2FsZXMgYSBOb3JtYWxSYW5nZSB2YWx1ZSBbMCwxXSBleHBvbmVudGlhbGx5XG5cdFx0ICogICAgICAgICAgdG8gdGhlIG91dHB1dCByYW5nZSBvZiBvdXRwdXRNaW4gdG8gb3V0cHV0TWF4LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1pbj0wXSBUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDAuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWF4PTFdXHRUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDEuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbZXhwb25lbnQ9Ml0gVGhlIGV4cG9uZW50IHdoaWNoIHNjYWxlcyB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzY2FsZUV4cCA9IG5ldyBUb25lLlNjYWxlRXhwKDAsIDEwMCwgMik7XG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgwLjUpLmNvbm5lY3Qoc2NhbGVFeHApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZUV4cCA9IGZ1bmN0aW9uIChvdXRwdXRNaW4sIG91dHB1dE1heCwgZXhwb25lbnQpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgaW5wdXQgdG8gdGhlIG91dHB1dCByYW5nZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNjYWxlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2NhbGUob3V0cHV0TWluLCBvdXRwdXRNYXgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUG93fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHAgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuUG93KFRvbmUuZGVmYXVsdEFyZyhleHBvbmVudCwgMikpO1xuXHQgICAgICAgIHRoaXMuX2V4cC5jb25uZWN0KHRoaXMuX3NjYWxlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNjYWxlRXhwLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogSW5zdGVhZCBvZiBpbnRlcnBvbGF0aW5nIGxpbmVhcmx5IGJldHdlZW4gdGhlIDxjb2RlPm1pbjwvY29kZT4gYW5kXG5cdFx0ICogPGNvZGU+bWF4PC9jb2RlPiB2YWx1ZXMsIHNldHRpbmcgdGhlIGV4cG9uZW50IHdpbGwgaW50ZXJwb2xhdGUgYmV0d2VlblxuXHRcdCAqIHRoZSB0d28gdmFsdWVzIHdpdGggYW4gZXhwb25lbnRpYWwgY3VydmUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVFeHAjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBleHBvbmVudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLCAnZXhwb25lbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHAudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwLnZhbHVlID0gZXhwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlblxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAwLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlRXhwI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWluID0gbWluO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlblxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAxLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlRXhwI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5tYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TY2FsZUV4cH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V4cC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXhwID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TY2FsZUV4cDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIFdlYiBBdWRpbydzIG5hdGl2ZSBbRGVsYXlOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1kZWxheW5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGRlbGF5VGltZSBUaGUgZGVsYXkgYXBwbGllZCB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBtYXhEZWxheSBUaGUgbWF4aW11bSBkZWxheSB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5EZWxheSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnbWF4RGVsYXknXG5cdCAgICAgICAgXSwgVG9uZS5EZWxheSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBtYXhpbXVtIGRlbGF5IHRpbWUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgbm9kZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tYXhEZWxheSA9IE1hdGgubWF4KHRoaXMudG9TZWNvbmRzKG9wdGlvbnMubWF4RGVsYXkpLCB0aGlzLnRvU2Vjb25kcyhvcHRpb25zLmRlbGF5VGltZSkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBuYXRpdmUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVEZWxheSh0aGlzLl9tYXhEZWxheSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBpbmNvbWluZyBzaWduYWwgaXNcblx0XHRcdCAqICBkZWxheWVkLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9kZWxheU5vZGUuZGVsYXlUaW1lLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuVGltZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5kZWxheVRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZGVsYXlUaW1lJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5EZWxheSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkRlbGF5LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtYXhEZWxheSc6IDEsXG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBkZWxheSB0aW1lLiBUaGlzIGNhbm5vdCBiZSBjaGFuZ2VkLiBUaGUgdmFsdWUgaXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLlxuXHRcdCAqIEBtZW1iZXJvZiBUb25lLkRlbGF5I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIG1heERlbGF5XG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5EZWxheS5wcm90b3R5cGUsICdtYXhEZWxheScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heERlbGF5O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5EZWxheX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRGVsYXkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2RlbGF5VGltZScpO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5EZWxheTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIENvbWIgZmlsdGVycyBhcmUgYmFzaWMgYnVpbGRpbmcgYmxvY2tzIGZvciBwaHlzaWNhbCBtb2RlbGluZy4gUmVhZCBtb3JlXG5cdFx0ICogICAgICAgICBhYm91dCBjb21iIGZpbHRlcnMgb24gW0NDUk1BJ3Mgd2Vic2l0ZV0oaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvfmpvcy9wYXNwL0ZlZWRiYWNrX0NvbWJfRmlsdGVycy5odG1sKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgdGltZSBvZiB0aGUgZmlsdGVyLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gcmVzb25hbmNlIFRoZSBhbW91bnQgb2YgZmVlZGJhY2sgdGhlIGZpbHRlciBoYXMuXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5EZWxheShvcHRpb25zLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBkZWxheSBvZiB0aGUgY29tYiBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9kZWxheS5kZWxheVRpbWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZlZWRiYWNrIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnJlc29uYW5jZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIG9mIHRoZSBkZWxheWVkIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSB0aGlzLl9mZWVkYmFjay5nYWluO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmNoYWluKHRoaXMuX2ZlZWRiYWNrLCB0aGlzLl9kZWxheSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZlZWRiYWNrQ29tYkZpbHRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjEsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDAuNVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GZWVkYmFja0NvbWJGaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9kZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEdldCB0aGUgY3VycmVudCB3YXZlZm9ybSBkYXRhIG9mIHRoZSBjb25uZWN0ZWQgYXVkaW8gc291cmNlLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgRkZULiBWYWx1ZSBtdXN0IGJlIGEgcG93ZXIgb2Zcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKi9cblx0ICAgIFRvbmUuRkZUID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnc2l6ZSddLCBUb25lLkZGVCk7XG5cdCAgICAgICAgb3B0aW9ucy50eXBlID0gVG9uZS5BbmFseXNlci5UeXBlLkZGVDtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW5hbHlzZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkFuYWx5c2VyKG9wdGlvbnMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRkZULCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRkZULmRlZmF1bHRzID0geyAnc2l6ZSc6IDEwMjQgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXRzIHRoZSB3YXZlZm9ybSBvZiB0aGUgYXVkaW8gc291cmNlLiBSZXR1cm5zIHRoZSB3YXZlZm9ybSBkYXRhXG5cdFx0ICogIG9mIGxlbmd0aCBbc2l6ZV0oI3NpemUpIGFzIGEgRmxvYXQzMkFycmF5IHdpdGggdmFsdWVzIGJldHdlZW4gLTEgYW5kIDEuXG5cdFx0ICogIEByZXR1cm5zIHtUeXBlZEFycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GRlQucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2l6ZSBvZiBhbmFseXNpcy4gVGhpcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRkZUI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GRlQucHJvdG90eXBlLCAnc2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNpemUgPSBzaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5GRlR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZGVC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRkZUO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgUmV0dXJuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBhbiBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgtMSk7XG5cdFx0ICogdmFyIGFicyA9IG5ldyBUb25lLkFicygpO1xuXHRcdCAqIHNpZ25hbC5jb25uZWN0KGFicyk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGFicyBpcyAxLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5BYnMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTGVzc1RoYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FicyA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnModmFsKSA8IDAuMDAxKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh2YWwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSwgMTAyNCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BYnMsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBtZXRob2Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQWJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFicy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hYnMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FicyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQWJzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRm9sbG93ZXIgaXMgYSAgY3J1ZGUgZW52ZWxvcGUgZm9sbG93ZXIgd2hpY2ggd2lsbCBmb2xsb3dcblx0XHQgKiAgICAgICAgICB0aGUgYW1wbGl0dWRlIG9mIGFuIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBUYWtlIGNhcmUgd2l0aCBzbWFsbCAoPCAwLjAyKSBhdHRhY2sgb3IgZGVjYXkgdmFsdWVzXG5cdFx0ICogICAgICAgICAgYXMgZm9sbG93ZXIgaGFzIHNvbWUgcmlwcGxlIHdoaWNoIGlzIGV4YWdnZXJhdGVkXG5cdFx0ICogICAgICAgICAgYXQgdGhlc2UgdmFsdWVzLiBSZWFkIG1vcmUgYWJvdXQgZW52ZWxvcGUgZm9sbG93ZXJzIChhbHNvIGtub3duXG5cdFx0ICogICAgICAgICAgYXMgZW52ZWxvcGUgZGV0ZWN0b3JzKSBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbnZlbG9wZV9kZXRlY3RvcikuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja10gVGhlIHJhdGUgYXQgd2hpY2ggdGhlIGZvbGxvd2VyIHJpc2VzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByZWxlYXNlIFRoZSByYXRlIGF0IHdoaWNoIHRoZSBmb2xvd2VyIGZhbGxzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBmb2xsb3dlciA9IG5ldyBUb25lLkZvbGxvd2VyKDAuMiwgMC40KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5Gb2xsb3dlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWJzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hYnMgPSBuZXcgVG9uZS5BYnMoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbG93cGFzcyBmaWx0ZXIgd2hpY2ggc21vb3RocyB0aGUgaW5wdXRcblx0XHRcdCAqICBAdHlwZSB7QmlxdWFkRmlsdGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci50eXBlID0gJ2xvd3Bhc3MnO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5mcmVxdWVuY3kudmFsdWUgPSAwO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5RLnZhbHVlID0gLTEwMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcyA9IG5ldyBUb25lLldhdmVTaGFwZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ViID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSBuZXcgVG9uZS5EZWxheSh0aGlzLmJsb2NrVGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhpcyBrZWVwcyBpdCBmYXIgZnJvbSAwLCBldmVuIGZvciB2ZXJ5IHNtYWxsIGRpZmZlcmVuY2VzXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgxMDAwMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYXR0YWNrID0gb3B0aW9ucy5hdHRhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZTtcblx0ICAgICAgICAvL3RoZSBzbW9vdGhlZCBzaWduYWwgdG8gZ2V0IHRoZSB2YWx1ZXNcblx0ICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMuX2FicywgdGhpcy5fZmlsdGVyLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLy90aGUgZGlmZmVyZW5jZSBwYXRoXG5cdCAgICAgICAgdGhpcy5fYWJzLmNvbm5lY3QodGhpcy5fc3ViLCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuY2hhaW4odGhpcy5fZGVsYXksIHRoaXMuX3N1Yik7XG5cdCAgICAgICAgLy90aHJlc2hvbGQgdGhlIGRpZmZlcmVuY2UgYW5kIHVzZSB0aGUgdGhyZXNoIHRvIHNldCB0aGUgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5fc3ViLmNoYWluKHRoaXMuX211bHQsIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcywgdGhpcy5fZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSB2YWx1ZXMgaW4gdGhlIHRhYmxlXG5cdCAgICAgICAgdGhpcy5fc2V0QXR0YWNrUmVsZWFzZSh0aGlzLl9hdHRhY2ssIHRoaXMuX3JlbGVhc2UpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRm9sbG93ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2snOiAwLjA1LFxuXHQgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHNldHMgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSB0aW1lcyBpbiB0aGUgd2F2ZSBzaGFwZXJcblx0XHQgKiAgQHBhcmFtICAge1RpbWV9IGF0dGFja1xuXHRcdCAqICBAcGFyYW0gICB7VGltZX0gcmVsZWFzZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUuX3NldEF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAoYXR0YWNrLCByZWxlYXNlKSB7XG5cdCAgICAgICAgdmFyIG1pblRpbWUgPSB0aGlzLmJsb2NrVGltZTtcblx0ICAgICAgICBhdHRhY2sgPSBUb25lLlRpbWUoYXR0YWNrKS50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHJlbGVhc2UgPSBUb25lLlRpbWUocmVsZWFzZSkudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICBhdHRhY2sgPSBNYXRoLm1heChhdHRhY2ssIG1pblRpbWUpO1xuXHQgICAgICAgIHJlbGVhc2UgPSBNYXRoLm1heChyZWxlYXNlLCBtaW5UaW1lKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMuc2V0TWFwKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKHZhbCA8PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gYXR0YWNrO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2U7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXR0YWNrIHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRm9sbG93ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgYXR0YWNrXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUsICdhdHRhY2snLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2s7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhdHRhY2spIHtcblx0ICAgICAgICAgICAgdGhpcy5fYXR0YWNrID0gYXR0YWNrO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBdHRhY2tSZWxlYXNlKHRoaXMuX2F0dGFjaywgdGhpcy5fcmVsZWFzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcmVsZWFzZSB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZvbGxvd2VyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHJlbGVhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZvbGxvd2VyLnByb3RvdHlwZSwgJ3JlbGVhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmVsZWFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZWxlYXNlID0gcmVsZWFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QXR0YWNrUmVsZWFzZSh0aGlzLl9hdHRhY2ssIHRoaXMuX3JlbGVhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEJvcnJvd3MgdGhlIGNvbm5lY3QgbWV0aG9kIGZyb20gU2lnbmFsIHNvIHRoYXQgdGhlIG91dHB1dCBjYW4gYmUgdXNlZFxuXHRcdCAqICBhcyBhIFRvbmUuU2lnbmFsIGNvbnRyb2wgc2lnbmFsLlxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLmNvbm5lY3QgPSBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3Q7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Gb2xsb3dlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdWIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYWJzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hYnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX211bHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2N1cnZlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Gb2xsb3dlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuU2NhbGVkRW52ZWxvcCBpcyBhbiBlbnZlbG9wZSB3aGljaCBjYW4gYmUgc2NhbGVkXG5cdFx0ICogICAgICAgICB0byBhbnkgcmFuZ2UuIEl0J3MgdXNlZnVsIGZvciBhcHBseWluZyBhbiBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgdG8gYSBmcmVxdWVuY3kgb3IgYW55IG90aGVyIG5vbi1Ob3JtYWxSYW5nZSBzaWduYWxcblx0XHQgKiAgICAgICAgIHBhcmFtZXRlci5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbnZlbG9wZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdXHR0aGUgYXR0YWNrIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdHRoZSBkZWNheSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtzdXN0YWluXSBcdGEgcGVyY2VudGFnZSAoMC0xKSBvZiB0aGUgZnVsbCBhbXBsaXR1ZGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbcmVsZWFzZV1cdHRoZSByZWxlYXNlIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgc2NhbGVkRW52ID0gbmV3IFRvbmUuU2NhbGVkRW52ZWxvcGUoe1xuXHRcdCAqICBcdFwiYXR0YWNrXCIgOiAwLjIsXG5cdFx0ICogIFx0XCJtaW5cIiA6IDIwMCxcblx0XHQgKiAgXHRcIm1heFwiIDogMjAwMFxuXHRcdCAqICB9KTtcblx0XHQgKiAgc2NhbGVkRW52LmNvbm5lY3Qob3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZWRFbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2dldCBhbGwgb2YgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ2RlY2F5Jyxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkVudmVsb3BlKTtcblx0ICAgICAgICBUb25lLkVudmVsb3BlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlNjYWxlZEVudmVsb3BlLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgaW5jb21pbmcgc2lnbmFsIGJ5IGFuIGV4cG9uZW50XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUG93fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHAgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlBvdyhvcHRpb25zLmV4cG9uZW50KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgc2lnbmFsIHRvIHRoZSBkZXNpcmVkIHJhbmdlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TY2FsZShvcHRpb25zLm1pbiwgb3B0aW9ucy5tYXgpO1xuXHQgICAgICAgIHRoaXMuX3NpZy5jaGFpbih0aGlzLl9leHAsIHRoaXMuX3NjYWxlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNjYWxlZEVudmVsb3BlLCBUb25lLkVudmVsb3BlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgJ2V4cG9uZW50JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIG1pbiBvdXRwdXQgdmFsdWUuIFRoaXMgaXMgdGhlIHZhbHVlIHdoaWNoIGl0XG5cdFx0ICogc3RhcnRzIGF0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlZEVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWluID0gbWluO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgbWF4IG91dHB1dCB2YWx1ZS4gSW4gb3RoZXIgd29yZHMsIHRoZSB2YWx1ZVxuXHRcdCAqIGF0IHRoZSBwZWFrIG9mIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVkRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5tYXggPSBtYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBleHBvbmVudCB2YWx1ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZWRFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGV4cG9uZW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUsICdleHBvbmVudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAudmFsdWUgPSBleHA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2NhbGVkRW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXhwLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9leHAgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNjYWxlZEVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSBpcyBhIFRvbmUuU2NhbGVkRW52ZWxvcGUsIGJ1dCBpbnN0ZWFkIG9mIGBtaW5gIGFuZCBgbWF4YFxuXHRcdCAqICAgICAgICAgaXQncyBnb3QgYSBgYmFzZUZyZXF1ZW5jeWAgYW5kIGBvY3RhdmVzYCBwYXJhbWV0ZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW52ZWxvcGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbYXR0YWNrXVx0dGhlIGF0dGFjayB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHR0aGUgZGVjYXkgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbc3VzdGFpbl0gXHRhIHBlcmNlbnRhZ2UgKDAtMSkgb2YgdGhlIGZ1bGwgYW1wbGl0dWRlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHR0aGUgcmVsZWFzZSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGZyZXFFbnYgPSBuZXcgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSh7XG5cdFx0ICogIFx0XCJhdHRhY2tcIiA6IDAuMixcblx0XHQgKiAgXHRcImJhc2VGcmVxdWVuY3lcIiA6IFwiQzJcIixcblx0XHQgKiAgXHRcIm9jdGF2ZXNcIiA6IDRcblx0XHQgKiAgfSk7XG5cdFx0ICogIGZyZXFFbnYuY29ubmVjdChvc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeUVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdkZWNheScsXG5cdCAgICAgICAgICAgICdzdXN0YWluJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAgICAgVG9uZS5TY2FsZWRFbnZlbG9wZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8vbWVyZ2UgaXQgd2l0aCB0aGUgZnJlcXVlbmN5IGVudmVsb3BlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkZyZXF1ZW5jeUVudmVsb3BlLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTdG9yZXMgdGhlIG9jdGF2ZSB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvL3NldHVwXG5cdCAgICAgICAgdGhpcy5iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZyZXF1ZW5jeUVudmVsb3BlLCBUb25lLkVudmVsb3BlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiA0LFxuXHQgICAgICAgICdleHBvbmVudCc6IDJcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBtaW5pbnVtIG91dHB1dCB2YWx1ZS4gVGhpcyBpcyB0aGUgdmFsdWUgd2hpY2ggaXRcblx0XHQgKiBzdGFydHMgYXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAbmFtZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1pbiA9IHRoaXMudG9GcmVxdWVuY3kobWluKTtcblx0ICAgICAgICAgICAgLy9hbHNvIHVwZGF0ZSB0aGUgb2N0YXZlc1xuXHQgICAgICAgICAgICB0aGlzLm9jdGF2ZXMgPSB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBvY3RhdmVzIGFib3ZlIHRoZSBiYXNlRnJlcXVlbmN5IHRoYXQgdGhlXG5cdFx0ICogZW52ZWxvcGUgd2lsbCBzY2FsZSB0by5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3RhdmVzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3RhdmVzO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5tYXggPSB0aGlzLmJhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCBvY3RhdmVzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIGV4cG9uZW50IHZhbHVlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgZXhwb25lbnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZyZXF1ZW5jeUVudmVsb3BlLnByb3RvdHlwZSwgJ2V4cG9uZW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwLnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cC52YWx1ZSA9IGV4cDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GcmVxdWVuY3lFbnZlbG9wZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgR3JlYXRlclRoYW5aZXJvIG91dHB1dHMgMSB3aGVuIHRoZSBpbnB1dCBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4gemVyb1xuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBndDAgPSBuZXcgVG9uZS5HcmVhdGVyVGhhblplcm8oKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDAuMDEpLmNvbm5lY3QoZ3QwKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgZ3QwIGlzIDEuXG5cdFx0ICogc2lnLnZhbHVlID0gMDtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgZ3QwIGlzIDAuXG5cdFx0ICovXG5cdCAgICBUb25lLkdyZWF0ZXJUaGFuWmVybyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAodmFsIDw9IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LCAxMjcpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSBmaXJzdCB0aHJlc2hvbGRlZCBzaWduYWwgYnkgYSBsYXJnZSB2YWx1ZS5cblx0XHRcdCAqICB0aGlzIHdpbGwgaGVscCB3aXRoIHZhbHVlcyB3aGljaCBhcmUgdmVyeSBjbG9zZSB0byAwXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpcGx5KDEwMDAwKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fc2NhbGUuY29ubmVjdCh0aGlzLl90aHJlc2gpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR3JlYXRlclRoYW5aZXJvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgbWV0aG9kXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdyZWF0ZXJUaGFuWmVyb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhblplcm8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aHJlc2guZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR3JlYXRlclRoYW5aZXJvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIE91dHB1dCAxIGlmIHRoZSBzaWduYWwgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSwgb3RoZXJ3aXNlIG91dHB1dHMgMC5cblx0XHQgKiAgICAgICAgICBjYW4gY29tcGFyZSB0d28gc2lnbmFscyBvciBhIHNpZ25hbCBhbmQgYSBudW1iZXIuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0wXSB0aGUgdmFsdWUgdG8gY29tcGFyZSB0byB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGd0ID0gbmV3IFRvbmUuR3JlYXRlclRoYW4oMik7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCg0KS5jb25uZWN0KGd0KTtcblx0XHQgKiAvL291dHB1dCBvZiBndCBpcyBlcXVhbCAxLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHN1YnRyYWN0IHRoZSBhbW91bnQgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFswXSA9IG5ldyBUb25lLlN1YnRyYWN0KHZhbHVlKTtcblx0ICAgICAgICB0aGlzLmlucHV0WzFdID0gdGhpcy5fcGFyYW0uaW5wdXRbMV07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29tcGFyZSB0aGF0IGFtb3VudCB0byB6ZXJvXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR3JlYXRlclRoYW5aZXJvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ndHogPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuWmVybygpO1xuXHQgICAgICAgIC8vY29ubmVjdFxuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNvbm5lY3QodGhpcy5fZ3R6KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdyZWF0ZXJUaGFuLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBtZXRob2Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR3JlYXRlclRoYW59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ndHouZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2d0eiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR3JlYXRlclRoYW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5HYXRlIG9ubHkgcGFzc2VzIGEgc2lnbmFsIHRocm91Z2ggd2hlbiB0aGUgaW5jb21pbmdcblx0XHQgKiAgICAgICAgICBzaWduYWwgZXhjZWVkcyBhIHNwZWNpZmllZCB0aHJlc2hvbGQuIFRvIGRvIHRoaXMsIEdhdGUgdXNlc1xuXHRcdCAqICAgICAgICAgIGEgVG9uZS5Gb2xsb3dlciB0byBmb2xsb3cgdGhlIGFtcGxpdHVkZSBvZiB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgIEEgY29tbW9uIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2xhc3MgaXMgYSBbTm9pc2UgR2F0ZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTm9pc2VfZ2F0ZSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc3xPYmplY3R9IFt0aHJlc2hvbGRdIFRoZSB0aHJlc2hvbGQgYWJvdmUgd2hpY2ggdGhlIGdhdGUgd2lsbCBvcGVuLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBhdHRhY2sgVGhlIGZvbGxvd2VyJ3MgYXR0YWNrIHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmVsZWFzZSBUaGUgZm9sbG93ZXIncyByZWxlYXNlIHRpbWVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZ2F0ZSA9IG5ldyBUb25lLkdhdGUoLTMwLCAwLjIsIDAuMykudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgbWljID0gbmV3IFRvbmUuVXNlck1lZGlhKCkuY29ubmVjdChnYXRlKTtcblx0XHQgKiAvL3RoZSBnYXRlIHdpbGwgb25seSBwYXNzIHRocm91Z2ggdGhlIGluY29taW5nXG5cdFx0ICogLy9zaWduYWwgd2hlbiBpdCdzIGxvdWRlciB0aGFuIC0zMGRiXG5cdFx0ICovXG5cdCAgICBUb25lLkdhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndGhyZXNob2xkJyxcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuR2F0ZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRm9sbG93ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZvbGxvd2VyID0gbmV3IFRvbmUuRm9sbG93ZXIob3B0aW9ucy5hdHRhY2ssIG9wdGlvbnMucmVsZWFzZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR3JlYXRlclRoYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2d0ID0gbmV3IFRvbmUuR3JlYXRlclRoYW4oVG9uZS5kYlRvR2FpbihvcHRpb25zLnRocmVzaG9sZCkpO1xuXHQgICAgICAgIC8vdGhlIGNvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL3RoZSBjb250cm9sIHNpZ25hbFxuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4odGhpcy5fZ3QsIHRoaXMuX2ZvbGxvd2VyLCB0aGlzLm91dHB1dC5nYWluKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdhdGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYXRlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2snOiAwLjEsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAwLjEsXG5cdCAgICAgICAgJ3RocmVzaG9sZCc6IC00MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0aHJlc2hvbGQgb2YgdGhlIGdhdGUgaW4gZGVjaWJlbHNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HYXRlI1xuXHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHQgKiBAbmFtZSB0aHJlc2hvbGRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdhdGUucHJvdG90eXBlLCAndGhyZXNob2xkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5nYWluVG9EYih0aGlzLl9ndC52YWx1ZSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aHJlc2gpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ3QudmFsdWUgPSBUb25lLmRiVG9HYWluKHRocmVzaCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXR0YWNrIHNwZWVkIG9mIHRoZSBnYXRlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR2F0ZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBhdHRhY2tcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdhdGUucHJvdG90eXBlLCAnYXR0YWNrJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9sbG93ZXIuYXR0YWNrO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYXR0YWNrVGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9mb2xsb3dlci5hdHRhY2sgPSBhdHRhY2tUaW1lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJlbGVhc2Ugc3BlZWQgb2YgdGhlIGdhdGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HYXRlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHJlbGVhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdhdGUucHJvdG90eXBlLCAncmVsZWFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbGxvd2VyLnJlbGVhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyZWxlYXNlVGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9mb2xsb3dlci5yZWxlYXNlID0gcmVsZWFzZVRpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdhdGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR2F0ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2ZvbGxvd2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ndC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZm9sbG93ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2d0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HYXRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgVG9uZS5UaWNrU2lnbmFsIGV4dGVuZHMgVG9uZS5TaWduYWwsIGJ1dCBhZGRzIHRoZSBjYXBhYmlsaXR5XG5cdFx0ICogICAgICAgIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGVsYXBzZWQgdGlja3MuIGV4cG9uZW50aWFsIGFuZCB0YXJnZXQgY3VydmVzXG5cdFx0ICogICAgICAgIGFyZSBhcHByb3hpbWF0ZWQgd2l0aCBtdWx0aXBsZSBsaW5lYXIgcmFtcHMuXG5cdFx0ICpcblx0XHQgKiAgICAgICAgVGhhbmsgeW91IEJydW5vIERpYXMsIEguIFNvZmlhIFBpbnRvLCBhbmQgRGF2aWQgTS4gTWF0b3MsIGZvciB5b3VyIFtXQUMgcGFwZXJdKGh0dHBzOi8vc21hcnRlY2guZ2F0ZWNoLmVkdS9iaXRzdHJlYW0vaGFuZGxlLzE4NTMvNTQ1ODgvV0FDMjAxNi00OS5wZGYpXG5cdFx0ICogICAgICAgIGRlc2NyaWJpbmcgaW50ZWdyYXRpbmcgdGltaW5nIGZ1bmN0aW9ucyBmb3IgdGVtcG8gY2FsY3VsYXRpb25zLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBzaWduYWxcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICB2YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyh2YWx1ZSwgMSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzLCB7XG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5UaWNrcyxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL2V4dGVuZCB0aGUgbWVtb3J5XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLm1lbW9yeSA9IEluZmluaXR5O1xuXHQgICAgICAgIC8vY2xlYXIgdGhlIGNsb2NrIGZyb20gdGhlIGJlZ2lubmluZ1xuXHQgICAgICAgIHRoaXMuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKDApO1xuXHQgICAgICAgIC8vc2V0IGFuIGluaXRpYWwgZXZlbnRcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IDAsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaWNrU2lnbmFsLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiBXcmFwcyBUb25lLlNpZ25hbCBtZXRob2RzIHNvIHRoYXQgdGhleSBhbHNvXG5cdFx0ICogcmVjb3JkIHRoZSB0aWNrcy5cblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gbWV0aG9kXG5cdFx0ICogQHJldHVybiB7RnVuY3Rpb259XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIGZ1bmN0aW9uIF93cmFwU2NoZWR1bGVNZXRob2RzKG1ldGhvZCkge1xuXHQgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzRXZlbnQgPSB0aGlzLl9ldmVudHMucHJldmlvdXNFdmVudChldmVudCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrc1VudGlsVGltZSA9IHRoaXMuX2dldFRpY2tzVW50aWxFdmVudChwcmV2aW91c0V2ZW50LCB0aW1lKTtcblx0ICAgICAgICAgICAgZXZlbnQudGlja3MgPSBNYXRoLm1heCh0aWNrc1VudGlsVGltZSwgMCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lID0gX3dyYXBTY2hlZHVsZU1ldGhvZHMoVG9uZS5TaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lKTtcblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUgPSBfd3JhcFNjaGVkdWxlTWV0aG9kcyhUb25lLlNpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoXG5cdFx0ICogIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRpbWUgY29uc3RhbnQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGltZUNvbnN0YW50XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lLCBjb25zdGFudCkge1xuXHQgICAgICAgIC8vYXByb3hpbWF0ZSBpdCB3aXRoIG11bHRpcGxlIGxpbmVhciByYW1wc1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnNldFJhbXBQb2ludCh0aW1lKTtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgLy9zdGFydCBmcm9tIHByZXZpb3VzbHkgc2NoZWR1bGVkIHZhbHVlXG5cdCAgICAgICAgdmFyIHByZXZFdmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgdmFyIHNlZ21lbnRzID0gTWF0aC5yb3VuZChNYXRoLm1heCgxIC8gY29uc3RhbnQsIDEpKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBzZWdtZW50czsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBzZWdUaW1lID0gY29uc3RhbnQgKiBpICsgdGltZTtcblx0ICAgICAgICAgICAgdmFyIHJhbXBWYWwgPSB0aGlzLl9leHBvbmVudGlhbEFwcHJvYWNoKHByZXZFdmVudC50aW1lLCBwcmV2RXZlbnQudmFsdWUsIHZhbHVlLCBjb25zdGFudCwgc2VnVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodGhpcy5fdG9Vbml0cyhyYW1wVmFsKSwgc2VnVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gZXhwb25lbnRpYWwgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb21cblx0XHQgKiAgdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwYXJhbWV0ZXIgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGVuZFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgLy9hcHJveGltYXRlIGl0IHdpdGggbXVsdGlwbGUgbGluZWFyIHJhbXBzXG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICAvL3N0YXJ0IGZyb20gcHJldmlvdXNseSBzY2hlZHVsZWQgdmFsdWVcblx0ICAgICAgICB2YXIgcHJldkV2ZW50ID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICBpZiAocHJldkV2ZW50ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHByZXZFdmVudCA9IHtcblx0ICAgICAgICAgICAgICAgICd2YWx1ZSc6IHRoaXMuX2luaXRpYWxWYWx1ZSxcblx0ICAgICAgICAgICAgICAgICd0aW1lJzogMFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2FwcHJveCAxMCBzZWdtZW50cyBwZXIgc2Vjb25kXG5cdCAgICAgICAgdmFyIHNlZ21lbnRzID0gTWF0aC5yb3VuZChNYXRoLm1heCgodGltZSAtIHByZXZFdmVudC50aW1lKSAqIDEwLCAxKSk7XG5cdCAgICAgICAgdmFyIHNlZ21lbnREdXIgPSAodGltZSAtIHByZXZFdmVudC50aW1lKSAvIHNlZ21lbnRzO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IHNlZ21lbnRzOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHNlZ1RpbWUgPSBzZWdtZW50RHVyICogaSArIHByZXZFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB2YXIgcmFtcFZhbCA9IHRoaXMuX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUocHJldkV2ZW50LnRpbWUsIHByZXZFdmVudC52YWx1ZSwgdGltZSwgdmFsdWUsIHNlZ1RpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMuX3RvVW5pdHMocmFtcFZhbCksIHNlZ1RpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSB0aWNrIHZhbHVlIGF0IHRoZSB0aW1lLiBUYWtlcyBpbnRvIGFjY291bnRcblx0XHQgKiBhbnkgYXV0b21hdGlvbiBjdXJ2ZXMgc2NoZWR1bGVkIG9uIHRoZSBzaWduYWwuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIGdldCB0aGUgdGljayBjb3VudCBhdFxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgIFRoZSBudW1iZXIgb2YgdGlja3Mgd2hpY2ggaGF2ZSBlbGFwc2VkIGF0IHRoZSB0aW1lXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGFueSBhdXRvbWF0aW9ucy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuX2dldFRpY2tzVW50aWxFdmVudCA9IGZ1bmN0aW9uIChldmVudCwgdGltZSkge1xuXHQgICAgICAgIGlmIChldmVudCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICBldmVudCA9IHtcblx0ICAgICAgICAgICAgICAgICd0aWNrcyc6IDAsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IDBcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNVbmRlZihldmVudC50aWNrcykpIHtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzRXZlbnQgPSB0aGlzLl9ldmVudHMucHJldmlvdXNFdmVudChldmVudCk7XG5cdCAgICAgICAgICAgIGV2ZW50LnRpY2tzID0gdGhpcy5fZ2V0VGlja3NVbnRpbEV2ZW50KHByZXZpb3VzRXZlbnQsIGV2ZW50LnRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgdmFsMCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoZXZlbnQudGltZSk7XG5cdCAgICAgICAgdmFyIHZhbDEgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIC8vaWYgaXQncyByaWdodCBvbiB0aGUgbGluZSwgdGFrZSB0aGUgcHJldmlvdXMgdmFsdWVcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmdldCh0aW1lKS50aW1lID09PSB0aW1lICYmIHRoaXMuX2V2ZW50cy5nZXQodGltZSkudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSkge1xuXHQgICAgICAgICAgICB2YWwxID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lIC0gdGhpcy5zYW1wbGVUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIDAuNSAqICh0aW1lIC0gZXZlbnQudGltZSkgKiAodmFsMCArIHZhbDEpICsgZXZlbnQudGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgdGljayB2YWx1ZSBhdCB0aGUgdGltZS4gVGFrZXMgaW50byBhY2NvdW50XG5cdFx0ICogYW55IGF1dG9tYXRpb24gY3VydmVzIHNjaGVkdWxlZCBvbiB0aGUgc2lnbmFsLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gZ2V0IHRoZSB0aWNrIGNvdW50IGF0XG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgVGhlIG51bWJlciBvZiB0aWNrcyB3aGljaCBoYXZlIGVsYXBzZWQgYXQgdGhlIHRpbWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gYW55IGF1dG9tYXRpb25zLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuX2dldFRpY2tzVW50aWxFdmVudChldmVudCwgdGltZSksIDApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBudW1iZXIgb2YgdGlja3MgZnJvbSB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSB7VGlja3N9IHRpY2tzIFRoZSBudW1iZXIgb2YgdGlja3MgdG8gY2FsY3VsYXRlXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBUaGUgdGltZSB0byBnZXQgdGhlIG5leHQgdGljayBmcm9tXG5cdFx0ICogQHJldHVybiB7U2Vjb25kc30gVGhlIGR1cmF0aW9uIG9mIHRoZSBudW1iZXIgb2YgdGlja3MgZnJvbSB0aGUgZ2l2ZW4gdGltZSBpbiBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmdldER1cmF0aW9uT2ZUaWNrcyA9IGZ1bmN0aW9uICh0aWNrcywgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgY3VycmVudFRpY2sgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmdldFRpbWVPZlRpY2soY3VycmVudFRpY2sgKyB0aWNrcykgLSB0aW1lO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdpdmVuIGEgdGljaywgcmV0dXJucyB0aGUgdGltZSB0aGF0IHRpY2sgb2NjdXJzIGF0LlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrXG5cdFx0ICogQHJldHVybiB7VGltZX0gICAgICBUaGUgdGltZSB0aGF0IHRoZSB0aWNrIG9jY3Vycy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZ2V0VGltZU9mVGljayA9IGZ1bmN0aW9uICh0aWNrKSB7XG5cdCAgICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuX2V2ZW50cy5nZXQodGljaywgJ3RpY2tzJyk7XG5cdCAgICAgICAgdmFyIGFmdGVyID0gdGhpcy5fZXZlbnRzLmdldEFmdGVyKHRpY2ssICd0aWNrcycpO1xuXHQgICAgICAgIGlmIChiZWZvcmUgJiYgYmVmb3JlLnRpY2tzID09PSB0aWNrKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBiZWZvcmUudGltZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZSAmJiBhZnRlciAmJiBhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhciAmJiBiZWZvcmUudmFsdWUgIT09IGFmdGVyLnZhbHVlKSB7XG5cdCAgICAgICAgICAgIHZhciB2YWwwID0gdGhpcy5nZXRWYWx1ZUF0VGltZShiZWZvcmUudGltZSk7XG5cdCAgICAgICAgICAgIHZhciB2YWwxID0gdGhpcy5nZXRWYWx1ZUF0VGltZShhZnRlci50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGRlbHRhID0gKHZhbDEgLSB2YWwwKSAvIChhZnRlci50aW1lIC0gYmVmb3JlLnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgayA9IE1hdGguc3FydChNYXRoLnBvdyh2YWwwLCAyKSAtIDIgKiBkZWx0YSAqIChiZWZvcmUudGlja3MgLSB0aWNrKSk7XG5cdCAgICAgICAgICAgIHZhciBzb2wxID0gKC12YWwwICsgaykgLyBkZWx0YTtcblx0ICAgICAgICAgICAgdmFyIHNvbDIgPSAoLXZhbDAgLSBrKSAvIGRlbHRhO1xuXHQgICAgICAgICAgICByZXR1cm4gKHNvbDEgPiAwID8gc29sMSA6IHNvbDIpICsgYmVmb3JlLnRpbWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUpIHtcblx0ICAgICAgICAgICAgaWYgKGJlZm9yZS52YWx1ZSA9PT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGJlZm9yZS50aW1lICsgKHRpY2sgLSBiZWZvcmUudGlja3MpIC8gYmVmb3JlLnZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRpY2sgLyB0aGlzLl9pbml0aWFsVmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENvbnZlcnQgc29tZSBudW1iZXIgb2YgdGlja3MgdGhlaXIgdGhlIGR1cmF0aW9uIGluIHNlY29uZHMgYWNjb3VudGluZ1xuXHRcdCAqIGZvciBhbnkgYXV0b21hdGlvbiBjdXJ2ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSBudW1iZXIgb2YgdGlja3MgdG8gY29udmVydCB0byBzZWNvbmRzLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IFt3aGVuPW5vd10gIFdoZW4gYWxvbmcgdGhlIGF1dG9tYXRpb24gdGltZWxpbmUgdG8gY29udmVydCB0aGUgdGlja3MuXG5cdFx0ICogQHJldHVybiB7VG9uZS5UaW1lfSAgICAgICBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBvZiB0aGUgdGlja3MuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnRpY2tzVG9UaW1lID0gZnVuY3Rpb24gKHRpY2tzLCB3aGVuKSB7XG5cdCAgICAgICAgd2hlbiA9IHRoaXMudG9TZWNvbmRzKHdoZW4pO1xuXHQgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaW1lKHRoaXMuZ2V0RHVyYXRpb25PZlRpY2tzKHRpY2tzLCB3aGVuKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGludmVyc2Ugb2YgW3RpY2tzVG9UaW1lXSgjdGlja3N0b3RpbWUpLiBDb252ZXJ0IGEgZHVyYXRpb24gaW5cblx0XHQgKiBzZWNvbmRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIG51bWJlciBvZiB0aWNrcyBhY2NvdW50aW5nIGZvciBhbnlcblx0XHQgKiBhdXRvbWF0aW9uIGN1cnZlcyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiBUaGUgdGltZSBpbnRlcnZhbCB0byBjb252ZXJ0IHRvIHRpY2tzLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IFt3aGVuPW5vd10gICAgIFdoZW4gYWxvbmcgdGhlIGF1dG9tYXRpb24gdGltZWxpbmUgdG8gY29udmVydCB0aGUgdGlja3MuXG5cdFx0ICogQHJldHVybiB7VG9uZS5UaWNrc30gICAgICAgICAgVGhlIGR1cmF0aW9uIGluIHRpY2tzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS50aW1lVG9UaWNrcyA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgd2hlbikge1xuXHQgICAgICAgIHdoZW4gPSB0aGlzLnRvU2Vjb25kcyh3aGVuKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB2YXIgc3RhcnRUaWNrcyA9IHRoaXMuZ2V0VGlja3NBdFRpbWUod2hlbik7XG5cdCAgICAgICAgdmFyIGVuZFRpY2tzID0gdGhpcy5nZXRUaWNrc0F0VGltZSh3aGVuICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaWNrcyhlbmRUaWNrcyAtIHN0YXJ0VGlja3MpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpY2tTaWduYWw7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBUaW1lbGluZSBTdGF0ZS4gUHJvdmlkZXMgdGhlIG1ldGhvZHM6IDxjb2RlPnNldFN0YXRlQXRUaW1lKFwic3RhdGVcIiwgdGltZSk8L2NvZGU+XG5cdFx0ICogICAgICAgICAgYW5kIDxjb2RlPmdldFZhbHVlQXRUaW1lKHRpbWUpPC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UaW1lbGluZX1cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IGluaXRpYWwgVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIFRpbWVsaW5lU3RhdGUuIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byA8Y29kZT51bmRlZmluZWQ8L2NvZGU+XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUgPSBmdW5jdGlvbiAoaW5pdGlhbCkge1xuXHQgICAgICAgIFRvbmUuVGltZWxpbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgaW5pdGlhbCBzdGF0ZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2luaXRpYWwgPSBpbml0aWFsO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZWxpbmVTdGF0ZSwgVG9uZS5UaW1lbGluZSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgc2NoZWR1bGVkIHN0YXRlIHNjaGVkdWxlZCBiZWZvcmUgb3IgYXRcblx0XHQgKiAgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJuICB7U3RyaW5nfSAgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIGlucHV0IGluIHNldFN0YXRlQXRUaW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5nZXQodGltZSk7XG5cdCAgICAgICAgaWYgKGV2ZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBldmVudC5zdGF0ZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdGlhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIHN0YXRlIHRvIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgc3RhdGUgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIHRvIHNldC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lU3RhdGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuc2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAoc3RhdGUsIHRpbWUpIHtcblx0ICAgICAgICAvL2FsbCBzdGF0ZSBjaGFuZ2VzIG5lZWQgdG8gYmUgPj0gdGhlIHByZXZpb3VzIHN0YXRlIHRpbWVcblx0ICAgICAgICAvL1RPRE8gdGhyb3cgZXJyb3IgaWYgdGltZSA8IHRoZSBwcmV2aW91cyBldmVudCB0aW1lXG5cdCAgICAgICAgdGhpcy5hZGQoe1xuXHQgICAgICAgICAgICAnc3RhdGUnOiBzdGF0ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZXZlbnQgYmVmb3JlIHRoZSB0aW1lIHdpdGggdGhlIGdpdmVuIHN0YXRlXG5cdFx0ICogIEBwYXJhbSB7VG9uZS5TdGF0ZX0gc3RhdGUgVGhlIHN0YXRlIHRvIGxvb2sgZm9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGNoZWNrIGJlZm9yZVx0XHRcdFxuXHRcdCAqICBAcmV0dXJuICB7T2JqZWN0fSAgVGhlIGV2ZW50IHdpdGggdGhlIGdpdmVuIHN0YXRlIGJlZm9yZSB0aGUgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlLnByb3RvdHlwZS5nZXRMYXN0U3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fdGltZWxpbmVbaV07XG5cdCAgICAgICAgICAgIGlmIChldmVudC5zdGF0ZSA9PT0gc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBldmVudCBhZnRlciB0aGUgdGltZSB3aXRoIHRoZSBnaXZlbiBzdGF0ZVxuXHRcdCAqICBAcGFyYW0ge1RvbmUuU3RhdGV9IHN0YXRlIFRoZSBzdGF0ZSB0byBsb29rIGZvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBjaGVjayBmcm9tXG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBUaGUgZXZlbnQgd2l0aCB0aGUgZ2l2ZW4gc3RhdGUgYWZ0ZXIgdGhlIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuZ2V0TmV4dFN0YXRlID0gZnVuY3Rpb24gKHN0YXRlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA8IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl90aW1lbGluZVtpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChldmVudC5zdGF0ZSA9PT0gc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZWxpbmVTdGF0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBVc2VzIFtUb25lLlRpY2tTaWduYWxdKFRpY2tTaWduYWwpIHRvIHRyYWNrIGVsYXBzZWQgdGlja3Mgd2l0aFxuXHRcdCAqICBcdFx0Y29tcGxleCBhdXRvbWF0aW9uIGN1cnZlcy5cblx0XHQgKlxuXHRcdCAqIFx0QGNvbnN0cnVjdG9yXG5cdCAgICAgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgaW5pdGlhbCBmcmVxdWVuY3kgdGhhdCB0aGUgc2lnbmFsIHRpY2tzIGF0XG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZnJlcXVlbmN5J10sIFRvbmUuVGlja1NvdXJjZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gc2hvdWxkIGJlIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5UaWNrU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHN0YXRlIHRpbWVsaW5lXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBvZmZzZXQgdmFsdWVzIG9mIHRoZSB0aWNrc1xuXHRcdFx0ICogQHR5cGUge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldCA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgLy9hZGQgdGhlIGZpcnN0IGV2ZW50XG5cdCAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSgwLCAwKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpY2tTb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UuZGVmYXVsdHMgPSB7ICdmcmVxdWVuY3knOiAxIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiLCBcInN0b3BwZWRcIiBvciBcInBhdXNlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpY2tTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGNsb2NrIGF0IHRoZSBnaXZlbiB0aW1lLiBPcHRpb25hbGx5IHBhc3MgaW4gYW4gb2Zmc2V0XG5cdFx0ICogIG9mIHdoZXJlIHRvIHN0YXJ0IHRoZSB0aWNrIGNvdW50ZXIgZnJvbS5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICB0aW1lICAgIFRoZSB0aW1lIHRoZSBjbG9jayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtUaWNrcz0wfSBvZmZzZXQgVGhlIG51bWJlciBvZiB0aWNrcyB0byBzdGFydCB0aGUgc291cmNlIGF0XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlRpY2tTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQob2Zmc2V0KSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZShvZmZzZXQsIHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBjbG9jay4gU3RvcHBpbmcgdGhlIGNsb2NrIHJlc2V0cyB0aGUgdGljayBjb3VudGVyIHRvIDAuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBjbG9jayBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NvdXJjZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGNsb2NrLnN0b3AoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vY2FuY2VsIHRoZSBwcmV2aW91cyBzdG9wXG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQudGltZSA+IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuY2FuY2VsKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhdXNlIHRoZSBjbG9jay4gUGF1c2luZyBkb2VzIG5vdCByZXNldCB0aGUgdGljayBjb3VudGVyLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlBhdXNlZCwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgc3RhcnQvc3RvcC9wYXVzZSBhbmQgc2V0VGlja0F0VGltZSBldmVudHMgc2NoZWR1bGVkIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0byBjbGVhciB0aGUgZXZlbnRzIGFmdGVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgZWxhcHNlZCB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICBUaGUgbnVtYmVyIG9mIHRpY2tzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIHN0b3BFdmVudCA9IHRoaXMuX3N0YXRlLmdldExhc3RTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIC8vdGhpcyBldmVudCBhbGxvd3MgZm9yRWFjaEJldHdlZW4gdG8gaXRlcmF0ZSB1bnRpbCB0aGUgY3VycmVudCB0aW1lXG5cdCAgICAgICAgdmFyIHRtcEV2ZW50ID0ge1xuXHQgICAgICAgICAgICBzdGF0ZTogVG9uZS5TdGF0ZS5QYXVzZWQsXG5cdCAgICAgICAgICAgIHRpbWU6IHRpbWVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9rZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBvZmZzZXQgZXZlbnRcblx0ICAgICAgICB2YXIgbGFzdFN0YXRlID0gc3RvcEV2ZW50O1xuXHQgICAgICAgIHZhciBlbGFwc2VkVGlja3MgPSAwO1xuXHQgICAgICAgIC8vaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgZXZlbnRzIHNpbmNlIHRoZSBsYXN0IHN0b3Bcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdG9wRXZlbnQudGltZSwgdGltZSArIHRoaXMuc2FtcGxlVGltZSwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgdmFyIHBlcmlvZFN0YXJ0VGltZSA9IGxhc3RTdGF0ZS50aW1lO1xuXHQgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGFuIG9mZnNldCBldmVudCBpbiB0aGlzIHBlcmlvZCB1c2UgdGhhdFxuXHQgICAgICAgICAgICB2YXIgb2Zmc2V0RXZlbnQgPSB0aGlzLl90aWNrT2Zmc2V0LmdldChlLnRpbWUpO1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0RXZlbnQudGltZSA+PSBsYXN0U3RhdGUudGltZSkge1xuXHQgICAgICAgICAgICAgICAgZWxhcHNlZFRpY2tzID0gb2Zmc2V0RXZlbnQudGlja3M7XG5cdCAgICAgICAgICAgICAgICBwZXJpb2RTdGFydFRpbWUgPSBvZmZzZXRFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChsYXN0U3RhdGUuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBlLnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRUaWNrcyArPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShlLnRpbWUpIC0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUocGVyaW9kU3RhcnRUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBsYXN0U3RhdGUgPSBlO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIHRlbXBvcmFyeSBldmVudFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLnJlbW92ZSh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIHRpY2tzXG5cdCAgICAgICAgcmV0dXJuIGVsYXBzZWRUaWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuIFN0YXJ0cyBjb3VudGluZyBhdCAwXG5cdFx0ICogIGFuZCBpbmNyZW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC4gUmV0dXJucyAtMSB3aGVuIHN0b3BwZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpY2tTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHRpY2tzXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLCAndGlja3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRpY2tzQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKHQsIHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHNpbmNlIHRpY2tzPTAgdGhhdCB0aGUgVGlja1NvdXJjZSBoYXMgYmVlbiBydW5uaW5nLiBBY2NvdW50c1xuXHRcdCAqICBmb3IgdGVtcG8gY3VydmVzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpY2tTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHNlY29uZHNcblx0XHQgKiAgQHR5cGUge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZSwgJ3NlY29uZHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNlY29uZHNBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLmZyZXF1ZW5jeS50aW1lVG9UaWNrcyhzLCBub3cpO1xuXHQgICAgICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKHRpY2tzLCBub3cpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZWxhcHNlZCBzZWNvbmRzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBnZXQgdGhlIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc30gIFRoZSBudW1iZXIgb2YgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFNlY29uZHNBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgc3RvcEV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0TGFzdFN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgLy90aGlzIGV2ZW50IGFsbG93cyBmb3JFYWNoQmV0d2VlbiB0byBpdGVyYXRlIHVudGlsIHRoZSBjdXJyZW50IHRpbWVcblx0ICAgICAgICB2YXIgdG1wRXZlbnQgPSB7XG5cdCAgICAgICAgICAgIHN0YXRlOiBUb25lLlN0YXRlLlBhdXNlZCxcblx0ICAgICAgICAgICAgdGltZTogdGltZVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuYWRkKHRtcEV2ZW50KTtcblx0ICAgICAgICAvL2tlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIG9mZnNldCBldmVudFxuXHQgICAgICAgIHZhciBsYXN0U3RhdGUgPSBzdG9wRXZlbnQ7XG5cdCAgICAgICAgdmFyIGVsYXBzZWRTZWNvbmRzID0gMDtcblx0ICAgICAgICAvL2l0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIGV2ZW50cyBzaW5jZSB0aGUgbGFzdCBzdG9wXG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RvcEV2ZW50LnRpbWUsIHRpbWUgKyB0aGlzLnNhbXBsZVRpbWUsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIHZhciBwZXJpb2RTdGFydFRpbWUgPSBsYXN0U3RhdGUudGltZTtcblx0ICAgICAgICAgICAgLy9pZiB0aGVyZSBpcyBhbiBvZmZzZXQgZXZlbnQgaW4gdGhpcyBwZXJpb2QgdXNlIHRoYXRcblx0ICAgICAgICAgICAgdmFyIG9mZnNldEV2ZW50ID0gdGhpcy5fdGlja09mZnNldC5nZXQoZS50aW1lKTtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldEV2ZW50LnRpbWUgPj0gbGFzdFN0YXRlLnRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRTZWNvbmRzID0gb2Zmc2V0RXZlbnQuc2Vjb25kcztcblx0ICAgICAgICAgICAgICAgIHBlcmlvZFN0YXJ0VGltZSA9IG9mZnNldEV2ZW50LnRpbWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKGxhc3RTdGF0ZS5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIGUuc3RhdGUgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgZWxhcHNlZFNlY29uZHMgKz0gZS50aW1lIC0gcGVyaW9kU3RhcnRUaW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGxhc3RTdGF0ZSA9IGU7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgdGVtcG9yYXJ5IGV2ZW50XG5cdCAgICAgICAgdGhpcy5fc3RhdGUucmVtb3ZlKHRtcEV2ZW50KTtcblx0ICAgICAgICAvL3JldHVybiB0aGUgdGlja3Ncblx0ICAgICAgICByZXR1cm4gZWxhcHNlZFNlY29uZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgdGljayB2YWx1ZSB0byBzZXRcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIHNldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVGlja1NvdXJjZX0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5zZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aWNrcywgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmFkZCh7XG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZSxcblx0ICAgICAgICAgICAgJ3RpY2tzJzogdGlja3MsXG5cdCAgICAgICAgICAgICdzZWNvbmRzJzogdGhpcy5mcmVxdWVuY3kuZ2V0RHVyYXRpb25PZlRpY2tzKHRpY2tzLCB0aW1lKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBzY2hlZHVsZWQgc3RhdGUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybiAge1N0cmluZ30gIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBpbnB1dCBpbiBzZXRTdGF0ZUF0VGltZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RhcnQoXCIrMC4xXCIpO1xuXHRcdCAqIHNvdXJjZS5nZXRTdGF0ZUF0VGltZShcIiswLjFcIik7IC8vcmV0dXJucyBcInN0YXJ0ZWRcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIHRpbWUgb2YgdGhlIGdpdmVuIHRpY2suIFRoZSBzZWNvbmQgYXJndW1lbnRcblx0XHQgKiBpcyB3aGVuIHRvIHRlc3QgYmVmb3JlLiBTaW5jZSB0aWNrcyBjYW4gYmUgc2V0ICh3aXRoIHNldFRpY2tzQXRUaW1lKVxuXHRcdCAqIHRoZXJlIG1heSBiZSBtdWx0aXBsZSB0aW1lcyBmb3IgYSBnaXZlbiB0aWNrIHZhbHVlLiBcblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgbnVtYmVyLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSBiZWZvcmUgV2hlbiB0byBtZWFzdXJlIHRoZSB0aWNrIHZhbHVlIGZyb20uIFxuXHRcdCAqIEByZXR1cm4ge1RpbWV9ICAgICAgIFRoZSB0aW1lIG9mIHRoZSB0aWNrXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFRpbWVPZlRpY2sgPSBmdW5jdGlvbiAodGljaywgYmVmb3JlKSB7XG5cdCAgICAgICAgYmVmb3JlID0gVG9uZS5kZWZhdWx0QXJnKGJlZm9yZSwgdGhpcy5ub3coKSk7XG5cdCAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX3RpY2tPZmZzZXQuZ2V0KGJlZm9yZSk7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KGJlZm9yZSk7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGltZSA9IE1hdGgubWF4KG9mZnNldC50aW1lLCBldmVudC50aW1lKTtcblx0ICAgICAgICB2YXIgYWJzb2x1dGVUaWNrcyA9IHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKHN0YXJ0VGltZSkgKyB0aWNrIC0gb2Zmc2V0LnRpY2tzO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZyZXF1ZW5jeS5nZXRUaW1lT2ZUaWNrKGFic29sdXRlVGlja3MpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2UgdGhlIGNhbGxiYWNrIGV2ZW50IGF0IGFsbCBzY2hlZHVsZWQgdGlja3MgYmV0d2VlbiB0aGUgXG5cdFx0ICogIHN0YXJ0IHRpbWUgYW5kIHRoZSBlbmQgdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICBzdGFydFRpbWUgIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlYXJjaCByYW5nZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICBlbmRUaW1lICAgIFRoZSBlbmQgb2YgdGhlIHNlYXJjaCByYW5nZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbjxUaW1lLFRpY2tzPn0gIGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGVhY2ggdGlja1xuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5UaWNrU291cmNlfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmZvckVhY2hUaWNrQmV0d2VlbiA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9vbmx5IGl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VjdGlvbnMgd2hlcmUgaXQgaXMgXCJzdGFydGVkXCJcblx0ICAgICAgICB2YXIgbGFzdFN0YXRlRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdGFydFRpbWUsIGVuZFRpbWUsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBpZiAobGFzdFN0YXRlRXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBldmVudC5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmZvckVhY2hUaWNrQmV0d2VlbihNYXRoLm1heChsYXN0U3RhdGVFdmVudC50aW1lLCBzdGFydFRpbWUpLCBldmVudC50aW1lIC0gdGhpcy5zYW1wbGVUaW1lLCBjYWxsYmFjayk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbGFzdFN0YXRlRXZlbnQgPSBldmVudDtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IE1hdGgubWF4KGxhc3RTdGF0ZUV2ZW50LnRpbWUsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgaWYgKGxhc3RTdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgdGhpcy5fc3RhdGUpIHtcblx0ICAgICAgICAgICAgLy9maWd1cmUgb3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGZyZXF1ZW5jeSB0aWNrcyBhbmQgdGhlIFxuXHQgICAgICAgICAgICB2YXIgc3RhcnRUaWNrcyA9IHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrc0F0U3RhcnQgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShsYXN0U3RhdGVFdmVudC50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGRpZmYgPSBzdGFydFRpY2tzIC0gdGlja3NBdFN0YXJ0O1xuXHQgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gZGlmZiAlIDE7XG5cdCAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgIG9mZnNldCA9IDEgLSBvZmZzZXQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIG5leHRUaWNrVGltZSA9IHRoaXMuZnJlcXVlbmN5LmdldFRpbWVPZlRpY2soc3RhcnRUaWNrcyArIG9mZnNldCk7XG5cdCAgICAgICAgICAgIHZhciBlcnJvciA9IG51bGw7XG5cdCAgICAgICAgICAgIHdoaWxlIChuZXh0VGlja1RpbWUgPCBlbmRUaW1lICYmIHRoaXMuX3N0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5leHRUaWNrVGltZSwgTWF0aC5yb3VuZCh0aGlzLmdldFRpY2tzQXRUaW1lKG5leHRUaWNrVGltZSkpKTtcblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBuZXh0VGlja1RpbWUgKz0gdGhpcy5mcmVxdWVuY3kuZ2V0RHVyYXRpb25PZlRpY2tzKDEsIG5leHRUaWNrVGltZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKGVycm9yKSB7XG5cdCAgICAgICAgICAgIHRocm93IGVycm9yO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmcmVxdWVuY3knKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpY2tTb3VyY2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBzYW1wbGUgYWNjdXJhdGUgY2xvY2sgd2hpY2ggcHJvdmlkZXMgYSBjYWxsYmFjayBhdCB0aGUgZ2l2ZW4gcmF0ZS5cblx0XHQgKiAgICAgICAgICBXaGlsZSB0aGUgY2FsbGJhY2sgaXMgbm90IHNhbXBsZS1hY2N1cmF0ZSAoaXQgaXMgc3RpbGwgc3VzY2VwdGlibGUgdG9cblx0XHQgKiAgICAgICAgICBsb29zZSBKUyB0aW1pbmcpLCB0aGUgdGltZSBwYXNzZWQgaW4gYXMgdGhlIGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFja1xuXHRcdCAqICAgICAgICAgIGlzIHByZWNpc2UuIEZvciBtb3N0IGFwcGxpY2F0aW9ucywgaXQgaXMgYmV0dGVyIHRvIHVzZSBUb25lLlRyYW5zcG9ydFxuXHRcdCAqICAgICAgICAgIGluc3RlYWQgb2YgdGhlIENsb2NrIGJ5IGl0c2VsZiBzaW5jZSB5b3UgY2FuIHN5bmNocm9uaXplIG11bHRpcGxlIGNhbGxiYWNrcy5cblx0XHQgKlxuXHRcdCAqIFx0QGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICogXHRAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aXRoIHRoZSB0aW1lIG9mIHRoZSBhdWRpbyBldmVudFxuXHRcdCAqIFx0QHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgcmF0ZSBvZiB0aGUgY2FsbGJhY2tcblx0XHQgKiBcdEBleGFtcGxlXG5cdFx0ICogLy90aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGFwcHJveGltYXRlbHkgb25jZSBhIHNlY29uZFxuXHRcdCAqIC8vYW5kIHdpbGwgcHJpbnQgdGhlIHRpbWUgZXhhY3RseSBvbmNlIGEgc2Vjb25kIGFwYXJ0LlxuXHRcdCAqIHZhciBjbG9jayA9IG5ldyBUb25lLkNsb2NrKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2codGltZSk7XG5cdFx0ICogfSwgMSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdLCBUb25lLkNsb2NrKTtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gaW52b2tlIGF0IHRoZSBzY2hlZHVsZWQgdGljay5cblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG5leHQgdGltZSB0aGUgY2FsbGJhY2sgaXMgc2NoZWR1bGVkLlxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGljayBjb3VudGVyXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlRpY2tTb3VyY2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UgPSBuZXcgVG9uZS5UaWNrU291cmNlKG9wdGlvbnMuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbGFzdCB0aW1lIHRoZSBsb29wIGNhbGxiYWNrIHdhcyBpbnZva2VkXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJhdGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBiZSBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlICB7QlBNfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fdGlja1NvdXJjZS5mcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzdGF0ZSB0aW1lbGluZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIC8vYWRkIGFuIGluaXRpYWwgc3RhdGVcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb29wIGZ1bmN0aW9uIGJvdW5kIHRvIGl0cyBjb250ZXh0LlxuXHRcdFx0ICogIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHJlbW92ZSB0aGUgZXZlbnQgaW4gdGhlIGVuZC5cblx0XHRcdCAqICBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JvdW5kTG9vcCA9IHRoaXMuX2xvb3AuYmluZCh0aGlzKTtcblx0ICAgICAgICAvL2JpbmQgYSBjYWxsYmFjayB0byB0aGUgd29ya2VyIHRocmVhZFxuXHQgICAgICAgIHRoaXMuY29udGV4dC5vbigndGljaycsIHRoaXMuX2JvdW5kTG9vcCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DbG9jaywgVG9uZS5FbWl0dGVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiLCBcInN0b3BwZWRcIiBvciBcInBhdXNlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNsb2NrI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2xvY2sucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgY2xvY2sgYXQgdGhlIGdpdmVuIHRpbWUuIE9wdGlvbmFsbHkgcGFzcyBpbiBhbiBvZmZzZXRcblx0XHQgKiAgb2Ygd2hlcmUgdG8gc3RhcnQgdGhlIHRpY2sgY291bnRlciBmcm9tLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIHRpbWUgICAgVGhlIHRpbWUgdGhlIGNsb2NrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0gIHtUaWNrcz19ICBvZmZzZXQgIFdoZXJlIHRoZSB0aWNrIGNvdW50ZXIgc3RhcnRzIGNvdW50aW5nIGZyb20uXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkNsb2NrfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RhcnRlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9sYXN0VXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgY2xvY2suIFN0b3BwaW5nIHRoZSBjbG9jayByZXNldHMgdGhlIHRpY2sgY291bnRlciB0byAwLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNsb2NrfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogY2xvY2suc3RvcCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc3RvcCh0aW1lKTtcblx0ICAgICAgICBpZiAodGltZSA8IHRoaXMuX2xhc3RVcGRhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXVzZSB0aGUgY2xvY2suIFBhdXNpbmcgZG9lcyBub3QgcmVzZXQgdGhlIHRpY2sgY291bnRlci5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DbG9ja30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlBhdXNlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UucGF1c2UodGltZSk7XG5cdCAgICAgICAgICAgIGlmICh0aW1lIDwgdGhpcy5fbGFzdFVwZGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdwYXVzZScsIHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC4gU3RhcnRzIGNvdW50aW5nIGF0IDBcblx0XHQgKiAgYW5kIGluY3JlbWVudHMgYWZ0ZXIgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkLlxuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DbG9jay5wcm90b3R5cGUsICd0aWNrcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmdldFRpY2tzQXRUaW1lKHRoaXMubm93KCkpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS50aWNrcyA9IHQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgc2luY2UgdGlja3M9MCB0aGF0IHRoZSBDbG9jayBoYXMgYmVlbiBydW5uaW5nLiBBY2NvdW50c1xuXHRcdCAqICBmb3IgdGVtcG8gY3VydmVzXG5cdFx0ICogIEB0eXBlIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2xvY2sucHJvdG90eXBlLCAnc2Vjb25kcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2Uuc2Vjb25kcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5zZWNvbmRzID0gcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGVsYXBzZWQgc2Vjb25kcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSBlbGFwc2VkIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9ICBUaGUgbnVtYmVyIG9mIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZ2V0U2Vjb25kc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2UuZ2V0U2Vjb25kc0F0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTZXQgdGhlIGNsb2NrJ3MgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIHZhbHVlIHRvIHNldFxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gc2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VG9uZS5DbG9ja30gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuc2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGlja3MsIHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlLnNldFRpY2tzQXRUaW1lKHRpY2tzLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGNsb2NrJ3MgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBnZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgICAgVGhlIHRpY2sgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2UuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSB0aW1lIG9mIHRoZSBuZXh0IHRpY2tcblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgbnVtYmVyLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IGJlZm9yZSBcblx0XHQgKiBAcmV0dXJuIHtUb25lLkNsb2NrfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5uZXh0VGlja1RpbWUgPSBmdW5jdGlvbiAob2Zmc2V0LCB3aGVuKSB7XG5cdCAgICAgICAgd2hlbiA9IHRoaXMudG9TZWNvbmRzKHdoZW4pO1xuXHQgICAgICAgIHZhciBjdXJyZW50VGljayA9IHRoaXMuZ2V0VGlja3NBdFRpbWUod2hlbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2UuZ2V0VGltZU9mVGljayhjdXJyZW50VGljayArIG9mZnNldCwgd2hlbik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzY2hlZHVsaW5nIGxvb3AuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5fbG9vcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgc3RhcnRUaW1lID0gdGhpcy5fbGFzdFVwZGF0ZTtcblx0ICAgICAgICB2YXIgZW5kVGltZSA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IGVuZFRpbWU7XG5cdCAgICAgICAgaWYgKHN0YXJ0VGltZSAhPT0gZW5kVGltZSkge1xuXHQgICAgICAgICAgICAvL3RoZSBzdGF0ZSBjaGFuZ2UgZXZlbnRzXG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hCZXR3ZWVuKHN0YXJ0VGltZSwgZW5kVGltZSwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5zdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgY2FzZSBUb25lLlN0YXRlLlN0YXJ0ZWQ6XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX3RpY2tTb3VyY2UuZ2V0VGlja3NBdFRpbWUoZS50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgZS50aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSBUb25lLlN0YXRlLlN0b3BwZWQ6XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKGUudGltZSAhPT0gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0b3AnLCBlLnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgVG9uZS5TdGF0ZS5QYXVzZWQ6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdwYXVzZScsIGUudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgICAgIC8vdGhlIHRpY2sgY2FsbGJhY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UuZm9yRWFjaFRpY2tCZXR3ZWVuKHN0YXJ0VGltZSwgZW5kVGltZSwgZnVuY3Rpb24gKHRpbWUsIHRpY2tzKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHRpY2tzKTtcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHNjaGVkdWxlZCBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJuICB7U3RyaW5nfSAgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIGlucHV0IGluIHNldFN0YXRlQXRUaW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGNsb2NrLnN0YXJ0KFwiKzAuMVwiKTtcblx0XHQgKiBjbG9jay5nZXRTdGF0ZUF0VGltZShcIiswLjFcIik7IC8vcmV0dXJucyBcInN0YXJ0ZWRcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNsb2NrfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5vZmYoJ3RpY2snLCB0aGlzLl9ib3VuZExvb3ApO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmcmVxdWVuY3knKTtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYm91bmRMb29wID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IEluZmluaXR5O1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ2xvY2s7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTaW1pbGFyIHRvIFRvbmUuVGltZWxpbmUsIGJ1dCBhbGwgZXZlbnRzIHJlcHJlc2VudFxuXHRcdCAqICAgICAgICAgaW50ZXJ2YWxzIHdpdGggYm90aCBcInRpbWVcIiBhbmQgXCJkdXJhdGlvblwiIHRpbWVzLiBUaGVcblx0XHQgKiAgICAgICAgIGV2ZW50cyBhcmUgcGxhY2VkIGluIGEgdHJlZSBzdHJ1Y3R1cmUgb3B0aW1pemVkXG5cdFx0ICogICAgICAgICBmb3IgcXVlcnlpbmcgYW4gaW50ZXJzZWN0aW9uIHBvaW50IHdpdGggdGhlIHRpbWVsaW5lXG5cdFx0ICogICAgICAgICBldmVudHMuIEludGVybmFsbHkgdXNlcyBhbiBbSW50ZXJ2YWwgVHJlZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW50ZXJ2YWxfdHJlZSlcblx0XHQgKiAgICAgICAgIHRvIHJlcHJlc2VudCB0aGUgZGF0YS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByb290IG5vZGUgb2YgdGhlIGludGV2YWwgdHJlZVxuXHRcdFx0ICogIEB0eXBlICB7SW50ZXJ2YWxOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yb290ID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBLZWVwIHRyYWNrIG9mIHRoZSBsZW5ndGggb2YgdGhlIHRpbWVsaW5lLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZW5ndGggPSAwO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuSW50ZXJ2YWxUaW1lbGluZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGV2ZW50IHRvIGFkZCB0byB0aGUgdGltZWxpbmUuIEFsbCBldmVudHMgbXVzdFxuXHRcdCAqICBoYXZlIGEgdGltZSBhbmQgZHVyYXRpb24gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCB0byBhZGQgdG8gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkludGVydmFsVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYoZXZlbnQudGltZSkgfHwgVG9uZS5pc1VuZGVmKGV2ZW50LmR1cmF0aW9uKSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuSW50ZXJ2YWxUaW1lbGluZTogZXZlbnRzIG11c3QgaGF2ZSB0aW1lIGFuZCBkdXJhdGlvbiBwYXJhbWV0ZXJzJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGV2ZW50LnRpbWUgPSBldmVudC50aW1lLnZhbHVlT2YoKTtcblx0ICAgICAgICB2YXIgbm9kZSA9IG5ldyBJbnRlcnZhbE5vZGUoZXZlbnQudGltZSwgZXZlbnQudGltZSArIGV2ZW50LmR1cmF0aW9uLCBldmVudCk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdCA9IG5vZGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5pbnNlcnQobm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2xlbmd0aCsrO1xuXHQgICAgICAgIC8vIFJlc3RydWN0dXJlIHRyZWUgdG8gYmUgYmFsYW5jZWRcblx0ICAgICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBub2RlLnVwZGF0ZUhlaWdodCgpO1xuXHQgICAgICAgICAgICBub2RlLnVwZGF0ZU1heCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWJhbGFuY2Uobm9kZSk7XG5cdCAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCB0byByZW1vdmUgZnJvbSB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHJldHVybiAge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2goZXZlbnQudGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSByZXN1bHRzW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKG5vZGUuZXZlbnQgPT09IGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlTm9kZShub2RlKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZW5ndGgtLTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkludGVydmFsVGltZWxpbmUjXG5cdFx0ICogIEBuYW1lIGxlbmd0aFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBldmVudHMgd2hvc2UgdGltZSB0aW1lIGlzIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIHRoaXMuZm9yRWFjaEZyb20oYWZ0ZXIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICB0aGlzLnJlbW92ZShldmVudCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSByb290IG5vZGUgYXMgdGhlIGdpdmVuIG5vZGVcblx0XHQgKiAgQHBhcmFtIHtJbnRlcnZhbE5vZGV9IG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3NldFJvb3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHRoaXMuX3Jvb3QgPSBub2RlO1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QucGFyZW50ID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlcGxhY2UgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIG5vZGUgaW4gdGhlIG5vZGUncyBwYXJlbnRcblx0XHQgKiAgd2l0aCB0aGUgcmVwbGFjZW1lbnQgbm9kZS5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICByZXBsYWNlbWVudFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcmVwbGFjZU5vZGVJblBhcmVudCA9IGZ1bmN0aW9uIChub2RlLCByZXBsYWNlbWVudCkge1xuXHQgICAgICAgIGlmIChub2RlLnBhcmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBpZiAobm9kZS5pc0xlZnRDaGlsZCgpKSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5sZWZ0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5yaWdodCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYmFsYW5jZShub2RlLnBhcmVudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0Um9vdChyZXBsYWNlbWVudCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgdGhlIG5vZGUgZnJvbSB0aGUgdHJlZSBhbmQgcmVwbGFjZSBpdCB3aXRoXG5cdFx0ICogIGEgc3VjY2Vzc29yIHdoaWNoIGZvbGxvd3MgdGhlIHNjaGVtYS5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcmVtb3ZlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgaWYgKG5vZGUubGVmdCA9PT0gbnVsbCAmJiBub2RlLnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgbnVsbCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlLnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgbm9kZS5sZWZ0KTtcblx0ICAgICAgICB9IGVsc2UgaWYgKG5vZGUubGVmdCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIG5vZGUucmlnaHQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBiYWxhbmNlID0gbm9kZS5nZXRCYWxhbmNlKCk7XG5cdCAgICAgICAgICAgIHZhciByZXBsYWNlbWVudCwgdGVtcDtcblx0ICAgICAgICAgICAgaWYgKGJhbGFuY2UgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLmxlZnQucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlcGxhY2VtZW50LnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnBhcmVudC5yaWdodCA9IHJlcGxhY2VtZW50LmxlZnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHJlcGxhY2VtZW50LnBhcmVudDtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5sZWZ0ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnJpZ2h0ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLnJpZ2h0LmxlZnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LmxlZnQgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IG5vZGUucmlnaHQubGVmdDtcblx0ICAgICAgICAgICAgICAgIHdoaWxlIChyZXBsYWNlbWVudC5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucGFyZW50ID0gcmVwbGFjZW1lbnQucGFyZW50O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucGFyZW50LmxlZnQgPSByZXBsYWNlbWVudC5yaWdodDtcblx0ICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudC5wYXJlbnQ7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5sZWZ0ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChub2RlLnBhcmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKG5vZGUuaXNMZWZ0Q2hpbGQoKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50LmxlZnQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQucmlnaHQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocmVwbGFjZW1lbnQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgcmVwbGFjZW1lbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWJhbGFuY2UodGVtcCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIG5vZGUuZGlzcG9zZSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSb3RhdGUgdGhlIHRyZWUgdG8gdGhlIGxlZnRcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcm90YXRlTGVmdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50O1xuXHQgICAgICAgIHZhciBpc0xlZnRDaGlsZCA9IG5vZGUuaXNMZWZ0Q2hpbGQoKTtcblx0ICAgICAgICAvLyBNYWtlIG5vZGUucmlnaHQgdGhlIG5ldyByb290IG9mIHRoaXMgc3ViIHRyZWUgKGluc3RlYWQgb2Ygbm9kZSlcblx0ICAgICAgICB2YXIgcGl2b3ROb2RlID0gbm9kZS5yaWdodDtcblx0ICAgICAgICBub2RlLnJpZ2h0ID0gcGl2b3ROb2RlLmxlZnQ7XG5cdCAgICAgICAgcGl2b3ROb2RlLmxlZnQgPSBub2RlO1xuXHQgICAgICAgIGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKGlzTGVmdENoaWxkKSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQubGVmdCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHBhcmVudC5yaWdodCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocGl2b3ROb2RlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJvdGF0ZSB0aGUgdHJlZSB0byB0aGUgcmlnaHRcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcm90YXRlUmlnaHQgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcblx0ICAgICAgICB2YXIgaXNMZWZ0Q2hpbGQgPSBub2RlLmlzTGVmdENoaWxkKCk7XG5cdCAgICAgICAgLy8gTWFrZSBub2RlLmxlZnQgdGhlIG5ldyByb290IG9mIHRoaXMgc3ViIHRyZWUgKGluc3RlYWQgb2Ygbm9kZSlcblx0ICAgICAgICB2YXIgcGl2b3ROb2RlID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgIG5vZGUubGVmdCA9IHBpdm90Tm9kZS5yaWdodDtcblx0ICAgICAgICBwaXZvdE5vZGUucmlnaHQgPSBub2RlO1xuXHQgICAgICAgIGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKGlzTGVmdENoaWxkKSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQubGVmdCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHBhcmVudC5yaWdodCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocGl2b3ROb2RlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEJhbGFuY2UgdGhlIEJTVFxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9yZWJhbGFuY2UgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHZhciBiYWxhbmNlID0gbm9kZS5nZXRCYWxhbmNlKCk7XG5cdCAgICAgICAgaWYgKGJhbGFuY2UgPiAxKSB7XG5cdCAgICAgICAgICAgIGlmIChub2RlLmxlZnQuZ2V0QmFsYW5jZSgpIDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlTGVmdChub2RlLmxlZnQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlUmlnaHQobm9kZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKGJhbGFuY2UgPCAtMSkge1xuXHQgICAgICAgICAgICBpZiAobm9kZS5yaWdodC5nZXRCYWxhbmNlKCkgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVSaWdodChub2RlLnJpZ2h0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZUxlZnQobm9kZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCBhbiBldmVudCB3aG9zZSB0aW1lIGFuZCBkdXJhdGlvbiBzcGFuIHRoZSBnaXZlIHRpbWUuIFdpbGxcblx0XHQgKiAgcmV0dXJuIHRoZSBtYXRjaCB3aG9zZSBcInRpbWVcIiB2YWx1ZSBpcyBjbG9zZXN0IHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R9ICBldmVudCAgVGhlIGV2ZW50IHRvIGFkZCB0byB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIFRoZSBldmVudCB3aGljaCBzcGFucyB0aGUgZGVzaXJlZCB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2godGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgICAgIHZhciBtYXggPSByZXN1bHRzWzBdO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdHNbaV0ubG93ID4gbWF4Lmxvdykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBtYXggPSByZXN1bHRzW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBtYXguZXZlbnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgYWxsTm9kZXMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC50cmF2ZXJzZShmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICAgICAgYWxsTm9kZXMucHVzaChub2RlKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldiA9IGFsbE5vZGVzW2ldLmV2ZW50O1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgaW4gd2hpY2ggdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgb3ZlcmxhcHMgd2l0aCB0aGUgdGltZSBhbmQgZHVyYXRpb24gdGltZSBvZiB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIG92ZXJsYXBwaW5nXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2godGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSByZXN1bHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXYgPSByZXN1bHRzW2ldLmV2ZW50O1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgaW4gd2hpY2ggdGhlIHRpbWUgaXMgZ3JlYXRlclxuXHRcdCAqICB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hGcm9tID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2hBZnRlcih0aW1lLCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IHJlc3VsdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldiA9IHJlc3VsdHNbaV0uZXZlbnQ7XG5cdCAgICAgICAgICAgICAgICBjYWxsYmFjayhldik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkludGVydmFsVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGFsbE5vZGVzID0gW107XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC50cmF2ZXJzZShmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICAgICAgYWxsTm9kZXMucHVzaChub2RlKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgYWxsTm9kZXNbaV0uZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBhbGxOb2RlcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcm9vdCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0SU5URVJWQUwgTk9ERSBIRUxQRVJcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJlcHJlc2VudHMgYSBub2RlIGluIHRoZSBiaW5hcnkgc2VhcmNoIHRyZWUsIHdpdGggdGhlIGFkZGl0aW9uXG5cdFx0ICogIG9mIGEgXCJoaWdoXCIgdmFsdWUgd2hpY2gga2VlcHMgdHJhY2sgb2YgdGhlIGhpZ2hlc3QgdmFsdWUgb2Zcblx0XHQgKiAgaXRzIGNoaWxkcmVuLlxuXHRcdCAqICBSZWZlcmVuY2VzOlxuXHRcdCAqICBodHRwczovL2Jyb29rbm92YWsud29yZHByZXNzLmNvbS8yMDEzLzEyLzA3L2F1Z21lbnRlZC1pbnRlcnZhbC10cmVlLWluLWMvXG5cdFx0ICogIGh0dHA6Ly93d3cubWlmLnZ1Lmx0L352YWxkYXMvQUxHT1JJVE1BSS9MSVRFUkFUVVJBL0Nvcm1lbi9Db3JtZW4ucGRmXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBsb3dcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBJbnRlcnZhbE5vZGUgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBldmVudCkge1xuXHQgICAgICAgIC8vdGhlIGV2ZW50IGNvbnRhaW5lclxuXHQgICAgICAgIHRoaXMuZXZlbnQgPSBldmVudDtcblx0ICAgICAgICAvL3RoZSBsb3cgdmFsdWVcblx0ICAgICAgICB0aGlzLmxvdyA9IGxvdztcblx0ICAgICAgICAvL3RoZSBoaWdoIHZhbHVlXG5cdCAgICAgICAgdGhpcy5oaWdoID0gaGlnaDtcblx0ICAgICAgICAvL3RoZSBoaWdoIHZhbHVlIGZvciB0aGlzIGFuZCBhbGwgY2hpbGQgbm9kZXNcblx0ICAgICAgICB0aGlzLm1heCA9IHRoaXMuaGlnaDtcblx0ICAgICAgICAvL3RoZSBub2RlcyB0byB0aGUgbGVmdFxuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBudWxsO1xuXHQgICAgICAgIC8vdGhlIG5vZGVzIHRvIHRoZSByaWdodFxuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICAvL3RoZSBwYXJlbnQgbm9kZVxuXHQgICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblx0ICAgICAgICAvL3RoZSBudW1iZXIgb2YgY2hpbGQgbm9kZXNcblx0ICAgICAgICB0aGlzLmhlaWdodCA9IDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEluc2VydCBhIG5vZGUgaW50byB0aGUgY29ycmVjdCBzcG90IGluIHRoZSB0cmVlXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAobm9kZS5sb3cgPD0gdGhpcy5sb3cpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubGVmdCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbm9kZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGVmdC5pbnNlcnQobm9kZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmlnaHQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodCA9IG5vZGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC5pbnNlcnQobm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZWFyY2ggdGhlIHRyZWUgZm9yIG5vZGVzIHdoaWNoIG92ZXJsYXBcblx0XHQgKiAgd2l0aCB0aGUgZ2l2ZW4gcG9pbnRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgcG9pbnQgIFRoZSBwb2ludCB0byBxdWVyeVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIHJlc3VsdHMgIFRoZSBhcnJheSB0byBwdXQgdGhlIHJlc3VsdHNcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuc2VhcmNoID0gZnVuY3Rpb24gKHBvaW50LCByZXN1bHRzKSB7XG5cdCAgICAgICAgLy8gSWYgcCBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIHJpZ2h0bW9zdCBwb2ludCBvZiBhbnkgaW50ZXJ2YWxcblx0ICAgICAgICAvLyBpbiB0aGlzIG5vZGUgYW5kIGFsbCBjaGlsZHJlbiwgdGhlcmUgd29uJ3QgYmUgYW55IG1hdGNoZXMuXG5cdCAgICAgICAgaWYgKHBvaW50ID4gdGhpcy5tYXgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBTZWFyY2ggbGVmdCBjaGlsZHJlblxuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5sZWZ0LnNlYXJjaChwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIENoZWNrIHRoaXMgbm9kZVxuXHQgICAgICAgIGlmICh0aGlzLmxvdyA8PSBwb2ludCAmJiB0aGlzLmhpZ2ggPiBwb2ludCkge1xuXHQgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIElmIHAgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIHRpbWUgb2YgdGhpcyBpbnRlcnZhbCxcblx0ICAgICAgICAvLyB0aGVuIGl0IGNhbid0IGJlIGluIGFueSBjaGlsZCB0byB0aGUgcmlnaHQuXG5cdCAgICAgICAgaWYgKHRoaXMubG93ID4gcG9pbnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBTZWFyY2ggcmlnaHQgY2hpbGRyZW5cblx0ICAgICAgICBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0LnNlYXJjaChwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZWFyY2ggdGhlIHRyZWUgZm9yIG5vZGVzIHdoaWNoIGFyZSBsZXNzXG5cdFx0ICogIHRoYW4gdGhlIGdpdmVuIHBvaW50XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHBvaW50ICBUaGUgcG9pbnQgdG8gcXVlcnlcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICByZXN1bHRzICBUaGUgYXJyYXkgdG8gcHV0IHRoZSByZXN1bHRzXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnNlYXJjaEFmdGVyID0gZnVuY3Rpb24gKHBvaW50LCByZXN1bHRzKSB7XG5cdCAgICAgICAgLy8gQ2hlY2sgdGhpcyBub2RlXG5cdCAgICAgICAgaWYgKHRoaXMubG93ID49IHBvaW50KSB7XG5cdCAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5sZWZ0LnNlYXJjaEFmdGVyKHBvaW50LCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBzZWFyY2ggdGhlIHJpZ2h0IHNpZGVcblx0ICAgICAgICBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0LnNlYXJjaEFmdGVyKHBvaW50LCByZXN1bHRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludm9rZSB0aGUgY2FsbGJhY2sgb24gdGhpcyBlbGVtZW50IGFuZCBib3RoIGl0J3MgYnJhbmNoZXNcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFja1xuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5sZWZ0LnRyYXZlcnNlKGNhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC50cmF2ZXJzZShjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVcGRhdGUgdGhlIGhlaWdodCBvZiB0aGUgbm9kZVxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS51cGRhdGVIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCAmJiB0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gTWF0aC5tYXgodGhpcy5sZWZ0LmhlaWdodCwgdGhpcy5yaWdodC5oZWlnaHQpICsgMTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJpZ2h0LmhlaWdodCArIDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmxlZnQuaGVpZ2h0ICsgMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmhlaWdodCA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVcGRhdGUgdGhlIGhlaWdodCBvZiB0aGUgbm9kZVxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS51cGRhdGVNYXggPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5tYXggPSB0aGlzLmhpZ2g7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLm1heCA9IE1hdGgubWF4KHRoaXMubWF4LCB0aGlzLmxlZnQubWF4KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5tYXggPSBNYXRoLm1heCh0aGlzLm1heCwgdGhpcy5yaWdodC5tYXgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGJhbGFuY2UgaXMgaG93IHRoZSBsZWFmcyBhcmUgZGlzdHJpYnV0ZWQgb24gdGhlIG5vZGVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIE5lZ2F0aXZlIG51bWJlcnMgYXJlIGJhbGFuY2VkIHRvIHRoZSByaWdodFxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5nZXRCYWxhbmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBiYWxhbmNlID0gMDtcblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsICYmIHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgYmFsYW5jZSA9IHRoaXMubGVmdC5oZWlnaHQgLSB0aGlzLnJpZ2h0LmhlaWdodDtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBiYWxhbmNlID0gdGhpcy5sZWZ0LmhlaWdodCArIDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGJhbGFuY2UgPSAtKHRoaXMucmlnaHQuaGVpZ2h0ICsgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBiYWxhbmNlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGlzIG5vZGUgaXMgdGhlIGxlZnQgY2hpbGRcblx0XHQgKiAgb2YgaXRzIHBhcmVudFxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5pc0xlZnRDaGlsZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgIT09IG51bGwgJiYgdGhpcy5wYXJlbnQubGVmdCA9PT0gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZ2V0L3NldCB0aGUgbGVmdCBub2RlXG5cdFx0ICogIEB0eXBlIHtJbnRlcnZhbE5vZGV9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxOb2RlLnByb3RvdHlwZSwgJ2xlZnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZWZ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZWZ0ID0gbm9kZTtcblx0ICAgICAgICAgICAgaWYgKG5vZGUgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gdGhpcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZUhlaWdodCgpO1xuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZU1heCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGdldC9zZXQgdGhlIHJpZ2h0IG5vZGVcblx0XHQgKiAgQHR5cGUge0ludGVydmFsTm9kZX1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRlcnZhbE5vZGUucHJvdG90eXBlLCAncmlnaHQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yaWdodDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmlnaHQgPSBub2RlO1xuXHQgICAgICAgICAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlSGVpZ2h0KCk7XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlTWF4KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgbnVsbCBvdXQgcmVmZXJlbmNlcy5cblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZXZlbnQgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEVORCBJTlRFUlZBTCBOT0RFIEhFTFBFUlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICByZXR1cm4gVG9uZS5JbnRlcnZhbFRpbWVsaW5lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVGlja3MgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgVGltZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBUb25lLlRpY2tzIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIG9yIHdpdGhvdXQgdGhlIGBuZXdgIGtleXdvcmQuIFRvbmUuVGlja3MgY2FuIGJlIHBhc3NlZFxuXHRcdCAqICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIG9mIGFueSBtZXRob2Qgd2hpY2ggdGFrZXMgdGltZSBhcyBhbiBhcmd1bWVudC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRyYW5zcG9ydFRpbWV9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdCA9IFRvbmUuVGlja3MoXCI0blwiKTsvL2EgcXVhcnRlciBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuVGlja3MpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnRUaW1lLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpY2tzKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpY2tzLCBUb25lLlRyYW5zcG9ydFRpbWUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX2RlZmF1bHRVbml0cyA9ICdpJztcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgY3VycmVudCB0aW1lIGluIHRoZSBnaXZlbiB1bml0c1xuXHRcdCAqIEByZXR1cm4ge1RpY2tzfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fbm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC50aWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2dldFBQUSgpICogYmVhdHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gc2Vjb25kcyAvICg2MCAvIHRoaXMuX2dldEJwbSgpKSAqIHRoaXMuX2dldFBQUSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiB0aWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSAvIHRoaXMuX2dldFBQUSgpICogKDYwIC8gdGhpcy5fZ2V0QnBtKCkpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpY2tzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVHJhbnNwb3J0RXZlbnQgaXMgYW4gaW50ZXJuYWwgY2xhc3MgdXNlZCBieSAoVG9uZS5UcmFuc3BvcnQpW1RyYW5zcG9ydF1cblx0XHQgKiAgICAgICAgIHRvIHNjaGVkdWxlIGV2ZW50cy4gRG8gbm8gaW52b2tlIHRoaXMgY2xhc3MgZGlyZWN0bHksIGl0IGlzXG5cdFx0ICogICAgICAgICBoYW5kbGVkIGZyb20gd2l0aGluIFRvbmUuVHJhbnNwb3J0LlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQgPSBmdW5jdGlvbiAoVHJhbnNwb3J0LCBvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlRyYW5zcG9ydEV2ZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBSZWZlcmVuY2UgdG8gdGhlIFRyYW5zcG9ydCB0aGF0IGNyZWF0ZWQgaXRcblx0XHRcdCAqIEB0eXBlIHtUb25lLlRyYW5zcG9ydH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0ID0gVHJhbnNwb3J0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHVuaXF1ZSBpZCBvZiB0aGUgZXZlbnRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlkID0gVG9uZS5UcmFuc3BvcnRFdmVudC5fZXZlbnRJZCsrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHRpbWUgdGhlIGV2ZW50IHN0YXJ0c1xuXHRcdFx0ICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy50aW1lID0gVG9uZS5UaWNrcyhvcHRpb25zLnRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBJZiB0aGUgZXZlbnQgc2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgYmVpbmcgY3JlYXRlZC5cblx0XHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uY2UgPSBvcHRpb25zLm9uY2U7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRFdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29uY2UnOiBmYWxzZSxcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3Bcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDdXJyZW50IElEIGNvdW50ZXJcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5fZXZlbnRJZCA9IDA7XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2UgdGhlIGV2ZW50IGNhbGxiYWNrLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFRoZSBBdWRpb0NvbnRleHQgdGltZSBpbiBzZWNvbmRzIG9mIHRoZSBldmVudFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5wcm90b3R5cGUuaW52b2tlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5jYWxsYmFjaykge1xuXHQgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fb25jZSAmJiB0aGlzLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5pZCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydEV2ZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy50aW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnRFdmVudDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50IGlzIGFuIGludGVybmFsIGNsYXNzIHVzZWQgYnkgVG9uZS5UcmFuc3BvcnRcblx0XHQgKiAgICAgICAgIHRvIHNjaGVkdWxlIHJlcGVhdCBldmVudHMuIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRyYW5zcG9ydEV2ZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCA9IGZ1bmN0aW9uIChUcmFuc3BvcnQsIG9wdGlvbnMpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydEV2ZW50LmNhbGwodGhpcywgVHJhbnNwb3J0LCBvcHRpb25zKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogV2hlbiB0aGUgZXZlbnQgc2hvdWxkIHN0b3AgcmVwZWF0aW5nXG5cdFx0XHQgKiBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kdXJhdGlvbiA9IFRvbmUuVGlja3Mob3B0aW9ucy5kdXJhdGlvbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgaW50ZXJ2YWwgb2YgdGhlIHJlcGVhdGVkIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBUb25lLlRpY2tzKG9wdGlvbnMuaW50ZXJ2YWwpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIElEIG9mIHRoZSBjdXJyZW50IHRpbWVsaW5lIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2N1cnJlbnRJZCA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIElEIG9mIHRoZSBuZXh0IHRpbWVsaW5lIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25leHRJZCA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICAqIFRoZSB0aW1lIG9mIHRoZSBuZXh0IGV2ZW50XG5cdFx0XHQgICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICAqIEBwcml2YXRlXG5cdFx0XHQgICovXG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSB0aGlzLnRpbWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBhIHJlZmVyZW5jZSB0byB0aGUgYm91bmQgc3RhcnQgbWV0aG9kXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYm91bmRSZXN0YXJ0ID0gdGhpcy5fcmVzdGFydC5iaW5kKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0Lm9uKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9ib3VuZFJlc3RhcnQpO1xuXHQgICAgICAgIHRoaXMuX3Jlc3RhcnQoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LCBUb25lLlRyYW5zcG9ydEV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZHVyYXRpb24nOiBJbmZpbml0eSxcblx0ICAgICAgICAnaW50ZXJ2YWwnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlIHRoZSBjYWxsYmFjay4gUmV0dXJucyB0aGUgdGljayB0aW1lIHdoaWNoXG5cdFx0ICogdGhlIG5leHQgZXZlbnQgc2hvdWxkIGJlIHNjaGVkdWxlZCBhdC5cblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWUgIFRoZSBBdWRpb0NvbnRleHQgdGltZSBpbiBzZWNvbmRzIG9mIHRoZSBldmVudFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuaW52b2tlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL2NyZWF0ZSBtb3JlIGV2ZW50cyBpZiBuZWNlc3Nhcnlcblx0ICAgICAgICB0aGlzLl9jcmVhdGVFdmVudHModGltZSk7XG5cdCAgICAgICAgLy9jYWxsIHRoZSBzdXBlciBjbGFzc1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmludm9rZS5jYWxsKHRoaXMsIHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFB1c2ggbW9yZSBldmVudHMgb250byB0aGUgdGltZWxpbmUgdG8ga2VlcCB1cCB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGltZWxpbmVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuX2NyZWF0ZUV2ZW50cyA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy8gc2NoZWR1bGUgdGhlIG5leHQgZXZlbnRcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLlRyYW5zcG9ydC5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAodGlja3MgPj0gdGhpcy50aW1lICYmIHRpY2tzID49IHRoaXMuX25leHRUaWNrICYmIHRoaXMuX25leHRUaWNrICsgdGhpcy5faW50ZXJ2YWwgPCB0aGlzLnRpbWUgKyB0aGlzLmR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX25leHRUaWNrICs9IHRoaXMuX2ludGVydmFsO1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJyZW50SWQgPSB0aGlzLl9uZXh0SWQ7XG5cdCAgICAgICAgICAgIHRoaXMuX25leHRJZCA9IHRoaXMuVHJhbnNwb3J0LnNjaGVkdWxlT25jZSh0aGlzLmludm9rZS5iaW5kKHRoaXMpLCBUb25lLlRpY2tzKHRoaXMuX25leHRUaWNrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFB1c2ggbW9yZSBldmVudHMgb250byB0aGUgdGltZWxpbmUgdG8ga2VlcCB1cCB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGltZWxpbmVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuX3Jlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX2N1cnJlbnRJZCk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5fbmV4dElkKTtcblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IHRoaXMudGltZTtcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLlRyYW5zcG9ydC5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAodGlja3MgPiB0aGlzLnRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSB0aGlzLnRpbWUgKyBNYXRoLmNlaWwoKHRpY2tzIC0gdGhpcy50aW1lKSAvIHRoaXMuX2ludGVydmFsKSAqIHRoaXMuX2ludGVydmFsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jdXJyZW50SWQgPSB0aGlzLlRyYW5zcG9ydC5zY2hlZHVsZU9uY2UodGhpcy5pbnZva2UuYmluZCh0aGlzKSwgVG9uZS5UaWNrcyh0aGlzLl9uZXh0VGljaykpO1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrICs9IHRoaXMuX2ludGVydmFsO1xuXHQgICAgICAgIHRoaXMuX25leHRJZCA9IHRoaXMuVHJhbnNwb3J0LnNjaGVkdWxlT25jZSh0aGlzLmludm9rZS5iaW5kKHRoaXMpLCBUb25lLlRpY2tzKHRoaXMuX25leHRUaWNrKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX2N1cnJlbnRJZCk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5fbmV4dElkKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5vZmYoJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX2JvdW5kUmVzdGFydCk7XG5cdCAgICAgICAgdGhpcy5fYm91bmRDcmVhdGVFdmVudHMgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmR1cmF0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVHJhbnNwb3J0IGZvciB0aW1pbmcgbXVzaWNhbCBldmVudHMuXG5cdFx0ICogICAgICAgICAgU3VwcG9ydHMgdGVtcG8gY3VydmVzIGFuZCB0aW1lIGNoYW5nZXMuIFVubGlrZSBicm93c2VyLWJhc2VkIHRpbWluZyAoc2V0SW50ZXJ2YWwsIHJlcXVlc3RBbmltYXRpb25GcmFtZSlcblx0XHQgKiAgICAgICAgICBUb25lLlRyYW5zcG9ydCB0aW1pbmcgZXZlbnRzIHBhc3MgaW4gdGhlIGV4YWN0IHRpbWUgb2YgdGhlIHNjaGVkdWxlZCBldmVudFxuXHRcdCAqICAgICAgICAgIGluIHRoZSBhcmd1bWVudCBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uIFBhc3MgdGhhdCB0aW1lIHZhbHVlIHRvIHRoZSBvYmplY3Rcblx0XHQgKiAgICAgICAgICB5b3UncmUgc2NoZWR1bGluZy4gPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBBIHNpbmdsZSB0cmFuc3BvcnQgaXMgY3JlYXRlZCBmb3IgeW91IHdoZW4gdGhlIGxpYnJhcnkgaXMgaW5pdGlhbGl6ZWQuXG5cdFx0ICogICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBUaGUgdHJhbnNwb3J0IGVtaXRzIHRoZSBldmVudHM6IFwic3RhcnRcIiwgXCJzdG9wXCIsIFwicGF1c2VcIiwgYW5kIFwibG9vcFwiIHdoaWNoIGFyZVxuXHRcdCAqICAgICAgICAgIGNhbGxlZCB3aXRoIHRoZSB0aW1lIG9mIHRoYXQgZXZlbnQgYXMgdGhlIGFyZ3VtZW50LlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JlcGVhdGVkIGV2ZW50IGV2ZXJ5IDh0aCBub3RlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSB0aW1lXG5cdFx0ICogfSwgXCI4blwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NjaGVkdWxlIGFuIGV2ZW50IG9uIHRoZSAxNnRoIG1lYXN1cmVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdC8vZG8gc29tZXRoaW5nIHdpdGggdGhlIHRpbWVcblx0XHQgKiB9LCBcIjE2OjA6MFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5jYWxsKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8vXHRMT09QSU5HXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0SWYgdGhlIHRyYW5zcG9ydCBsb29wcyBvciBub3QuXG5cdFx0XHRcdCAqICBAdHlwZSB7Ym9vbGVhbn1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMubG9vcCA9IGZhbHNlO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogXHRUaGUgbG9vcCBzdGFydCBwb3NpdGlvbiBpbiB0aWNrc1xuXHRcdFx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IDA7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdFRoZSBsb29wIGVuZCBwb3NpdGlvbiBpbiB0aWNrc1xuXHRcdFx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSAwO1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0Q0xPQ0svVEVNUE9cblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFB1bHNlcyBwZXIgcXVhcnRlciBpcyB0aGUgbnVtYmVyIG9mIHRpY2tzIHBlciBxdWFydGVyIG5vdGUuXG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9wcHEgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy5QUFE7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgd2F0Y2hlcyB0aGUgbWFpbiBvc2NpbGxhdG9yIGZvciB0aW1pbmcgdGlja3Ncblx0XHRcdFx0ICogIGluaXRpYWxseSBzdGFydHMgYXQgMTIwYnBtXG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKiAgQHR5cGUge1RvbmUuQ2xvY2t9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9jbG9jayA9IG5ldyBUb25lLkNsb2NrKHtcblx0ICAgICAgICAgICAgICAgICdjYWxsYmFjayc6IHRoaXMuX3Byb2Nlc3NUaWNrLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICAgICAnZnJlcXVlbmN5JzogMFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fYmluZENsb2NrRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIEJlYXRzIFBlciBNaW51dGUgb2YgdGhlIFRyYW5zcG9ydC5cblx0XHRcdFx0ICogIEB0eXBlIHtCUE19XG5cdFx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgPSA4MDtcblx0XHRcdFx0ICogLy9yYW1wIHRoZSBicG0gdG8gMTIwIG92ZXIgMTAgc2Vjb25kc1xuXHRcdFx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0ucmFtcFRvKDEyMCwgMTApO1xuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5icG0gPSB0aGlzLl9jbG9jay5mcmVxdWVuY3k7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLl90b1VuaXRzID0gdGhpcy5fdG9Vbml0cy5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLmJwbS5fZnJvbVVuaXRzID0gdGhpcy5fZnJvbVVuaXRzLmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLnVuaXRzID0gVG9uZS5UeXBlLkJQTTtcblx0ICAgICAgICAgICAgdGhpcy5icG0udmFsdWUgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy5icG07XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdicG0nKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgdGltZSBzaWduYXR1cmUsIG9yIG1vcmUgYWNjdXJhdGVseSB0aGUgbnVtZXJhdG9yXG5cdFx0XHRcdCAqICBvZiB0aGUgdGltZSBzaWduYXR1cmUgb3ZlciBhIGRlbm9taW5hdG9yIG9mIDQuXG5cdFx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVTaWduYXR1cmUgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy50aW1lU2lnbmF0dXJlO1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0VElNRUxJTkUgRVZFTlRTXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBBbGwgdGhlIGV2ZW50cyBpbiBhbiBvYmplY3QgdG8ga2VlcCB0cmFjayBieSBJRFxuXHRcdFx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSB7fTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0VGhlIHNjaGVkdWxlZCBldmVudHMuXG5cdFx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgUmVwZWF0ZWQgZXZlbnRzXG5cdFx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMgPSBuZXcgVG9uZS5JbnRlcnZhbFRpbWVsaW5lKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgQWxsIG9mIHRoZSBzeW5jZWQgU2lnbmFsc1xuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3N5bmNlZFNpZ25hbHMgPSBbXTtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdFNXSU5HXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgc3ViZGl2aXNpb24gb2YgdGhlIHN3aW5nXG5cdFx0XHRcdCAqICBAdHlwZSAge1RpY2tzfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nVGlja3MgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy5QUFEgLyAyO1xuXHQgICAgICAgICAgICAvLzhuXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHN3aW5nIGFtb3VudFxuXHRcdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nQW1vdW50ID0gMDtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0LCBUb25lLkVtaXR0ZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2JwbSc6IDEyMCxcblx0ICAgICAgICAnc3dpbmcnOiAwLFxuXHQgICAgICAgICdzd2luZ1N1YmRpdmlzaW9uJzogJzhuJyxcblx0ICAgICAgICAndGltZVNpZ25hdHVyZSc6IDQsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAnNG0nLFxuXHQgICAgICAgICdQUFEnOiAxOTJcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VElDS1Ncblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBjYWxsZWQgb24gZXZlcnkgdGlja1xuXHRcdCAqICBAcGFyYW0gICB7bnVtYmVyfSB0aWNrVGltZSBjbG9jayByZWxhdGl2ZSB0aWNrIHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fcHJvY2Vzc1RpY2sgPSBmdW5jdGlvbiAodGlja1RpbWUsIHRpY2tzKSB7XG5cdCAgICAgICAgLy9oYW5kbGUgc3dpbmdcblx0ICAgICAgICBpZiAodGhpcy5fc3dpbmdBbW91bnQgPiAwICYmIHRpY2tzICUgdGhpcy5fcHBxICE9PSAwICYmIC8vbm90IG9uIGEgZG93bmJlYXRcblx0ICAgICAgICAgICAgdGlja3MgJSAodGhpcy5fc3dpbmdUaWNrcyAqIDIpICE9PSAwKSB7XG5cdCAgICAgICAgICAgIC8vYWRkIHNvbWUgc3dpbmdcblx0ICAgICAgICAgICAgdmFyIHByb2dyZXNzID0gdGlja3MgJSAodGhpcy5fc3dpbmdUaWNrcyAqIDIpIC8gKHRoaXMuX3N3aW5nVGlja3MgKiAyKTtcblx0ICAgICAgICAgICAgdmFyIGFtb3VudCA9IE1hdGguc2luKHByb2dyZXNzICogTWF0aC5QSSkgKiB0aGlzLl9zd2luZ0Ftb3VudDtcblx0ICAgICAgICAgICAgdGlja1RpbWUgKz0gVG9uZS5UaWNrcyh0aGlzLl9zd2luZ1RpY2tzICogMiAvIDMpLnRvU2Vjb25kcygpICogYW1vdW50O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2RvIHRoZSBsb29wIHRlc3Rcblx0ICAgICAgICBpZiAodGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgIGlmICh0aWNrcyA+PSB0aGlzLl9sb29wRW5kKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvb3BFbmQnLCB0aWNrVGltZSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jbG9jay5zZXRUaWNrc0F0VGltZSh0aGlzLl9sb29wU3RhcnQsIHRpY2tUaW1lKTtcblx0ICAgICAgICAgICAgICAgIHRpY2tzID0gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb29wU3RhcnQnLCB0aWNrVGltZSwgdGhpcy5fY2xvY2suZ2V0U2Vjb25kc0F0VGltZSh0aWNrVGltZSkpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb29wJywgdGlja1RpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaW52b2tlIHRoZSB0aW1lbGluZSBldmVudHMgc2NoZWR1bGVkIG9uIHRoaXMgdGlja1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLmZvckVhY2hBdFRpbWUodGlja3MsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5pbnZva2UodGlja1RpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRTQ0hFRFVMQUJMRSBFVkVOVFNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZSBhbiBldmVudCBhbG9uZyB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGF0IHRoZSB0aW1lLlxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9ICB0aW1lIFRoZSB0aW1lIHRvIGludm9rZSB0aGUgY2FsbGJhY2sgYXQuXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gVGhlIGlkIG9mIHRoZSBldmVudCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgY2FuY2VsaW5nIHRoZSBldmVudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgdGhlIGNhbGxiYWNrIHdoZW4gdGhlIFRyYW5zcG9ydCByZWFjaGVzIHRoZSBkZXNpcmVkIHRpbWVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdGVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSk7XG5cdFx0ICogfSwgXCIxMjhpXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aW1lKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFRvbmUuVHJhbnNwb3J0RXZlbnQodGhpcywge1xuXHQgICAgICAgICAgICAndGltZSc6IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKSxcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogY2FsbGJhY2tcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYWRkRXZlbnQoZXZlbnQsIHRoaXMuX3RpbWVsaW5lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYSByZXBlYXRlZCBldmVudCBhbG9uZyB0aGUgdGltZWxpbmUuIFRoZSBldmVudCB3aWxsIGZpcmVcblx0XHQgKiAgYXQgdGhlIGBpbnRlcnZhbGAgc3RhcnRpbmcgYXQgdGhlIGBzdGFydFRpbWVgIGFuZCBmb3IgdGhlIHNwZWNpZmllZFxuXHRcdCAqICBgZHVyYXRpb25gLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRvIGludm9rZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgaW50ZXJ2YWwgICBUaGUgZHVyYXRpb24gYmV0d2VlbiBzdWNjZXNzaXZlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLiBNdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lPX0gICAgc3RhcnRUaW1lICBXaGVuIGFsb25nIHRoZSB0aW1lbGluZSB0aGUgZXZlbnRzIHNob3VsZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IGJlaW5nIGludm9rZWQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2R1cmF0aW9uPUluZmluaXR5XSBIb3cgbG9uZyB0aGUgZXZlbnQgc2hvdWxkIHJlcGVhdC5cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gICAgVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQuIFVzZSB0aGlzIHRvIGNhbmNlbFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGV2ZW50LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBjYWxsYmFjayBpbnZva2VkIGV2ZXJ5IGVpZ2h0aCBub3RlIGFmdGVyIHRoZSBmaXJzdCBtZWFzdXJlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQoY2FsbGJhY2ssIFwiOG5cIiwgXCIxbVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zY2hlZHVsZVJlcGVhdCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgaW50ZXJ2YWwsIHN0YXJ0VGltZSwgZHVyYXRpb24pIHtcblx0ICAgICAgICB2YXIgZXZlbnQgPSBuZXcgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCh0aGlzLCB7XG5cdCAgICAgICAgICAgICdjYWxsYmFjayc6IGNhbGxiYWNrLFxuXHQgICAgICAgICAgICAnaW50ZXJ2YWwnOiBUb25lLlRpbWUoaW50ZXJ2YWwpLFxuXHQgICAgICAgICAgICAndGltZSc6IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpLFxuXHQgICAgICAgICAgICAnZHVyYXRpb24nOiBUb25lLlRpbWUoVG9uZS5kZWZhdWx0QXJnKGR1cmF0aW9uLCBJbmZpbml0eSkpXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9raWNrIGl0IG9mZiBpZiB0aGUgVHJhbnNwb3J0IGlzIHN0YXJ0ZWRcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYWRkRXZlbnQoZXZlbnQsIHRoaXMuX3JlcGVhdGVkRXZlbnRzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYW4gZXZlbnQgdGhhdCB3aWxsIGJlIHJlbW92ZWQgYWZ0ZXIgaXQgaXMgaW52b2tlZC5cblx0XHQgKiAgTm90ZSB0aGF0IGlmIHRoZSBnaXZlbiB0aW1lIGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCB0cmFuc3BvcnQgdGltZSxcblx0XHQgKiAgdGhlIGV2ZW50IHdpbGwgYmUgaW52b2tlZCBpbW1lZGlhdGVseS5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBvbmNlLlxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IHRpbWUgVGhlIHRpbWUgdGhlIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkLlxuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfSBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudC5cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zY2hlZHVsZU9uY2UgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRpbWUpIHtcblx0ICAgICAgICB2YXIgZXZlbnQgPSBuZXcgVG9uZS5UcmFuc3BvcnRFdmVudCh0aGlzLCB7XG5cdCAgICAgICAgICAgICd0aW1lJzogVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpLFxuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiBjYWxsYmFjayxcblx0ICAgICAgICAgICAgJ29uY2UnOiB0cnVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEV2ZW50KGV2ZW50LCB0aGlzLl90aW1lbGluZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFyIHRoZSBwYXNzZWQgaW4gZXZlbnQgaWQgZnJvbSB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGV2ZW50SWQgVGhlIGlkIG9mIHRoZSBldmVudC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZXZlbnRJZCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zY2hlZHVsZWRFdmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnRJZCkpIHtcblx0ICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLl9zY2hlZHVsZWRFdmVudHNbZXZlbnRJZC50b1N0cmluZygpXTtcblx0ICAgICAgICAgICAgaXRlbS50aW1lbGluZS5yZW1vdmUoaXRlbS5ldmVudCk7XG5cdCAgICAgICAgICAgIGl0ZW0uZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICBkZWxldGUgdGhpcy5fc2NoZWR1bGVkRXZlbnRzW2V2ZW50SWQudG9TdHJpbmcoKV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEFkZCBhbiBldmVudCB0byB0aGUgY29ycmVjdCB0aW1lbGluZS4gS2VlcCB0cmFjayBvZiB0aGVcblx0XHQgKiB0aW1lbGluZSBpdCB3YXMgYWRkZWQgdG8uXG5cdFx0ICogQHBhcmFtIHtUb25lLlRyYW5zcG9ydEV2ZW50fVx0ZXZlbnRcblx0XHQgKiBAcGFyYW0ge1RvbmUuVGltZWxpbmV9IHRpbWVsaW5lXG5cdFx0ICogQHJldHVybnMge051bWJlcn0gdGhlIGV2ZW50IGlkIHdoaWNoIHdhcyBqdXN0IGFkZGVkXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fYWRkRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIHRpbWVsaW5lKSB7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzW2V2ZW50LmlkLnRvU3RyaW5nKCldID0ge1xuXHQgICAgICAgICAgICAnZXZlbnQnOiBldmVudCxcblx0ICAgICAgICAgICAgJ3RpbWVsaW5lJzogdGltZWxpbmVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRpbWVsaW5lLmFkZChldmVudCk7XG5cdCAgICAgICAgcmV0dXJuIGV2ZW50LmlkO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgc2NoZWR1bGVkIGV2ZW50cyBmcm9tIHRoZSB0aW1lbGluZSBhZnRlclxuXHRcdCAqICB0aGUgZ2l2ZW4gdGltZS4gUmVwZWF0ZWQgZXZlbnRzIHdpbGwgYmUgcmVtb3ZlZFxuXHRcdCAqICBpZiB0aGVpciBzdGFydFRpbWUgaXMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBbYWZ0ZXI9MF0gQ2xlYXIgYWxsIGV2ZW50cyBhZnRlclxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHRpbWUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIGFmdGVyID0gVG9uZS5kZWZhdWx0QXJnKGFmdGVyLCAwKTtcblx0ICAgICAgICBhZnRlciA9IHRoaXMudG9UaWNrcyhhZnRlcik7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuZm9yRWFjaEZyb20oYWZ0ZXIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICB0aGlzLmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U1RBUlQvU1RPUC9QQVVTRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEJpbmQgc3RhcnQvc3RvcC9wYXVzZSBldmVudHMgZnJvbSB0aGUgY2xvY2sgYW5kIGVtaXQgdGhlbS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fYmluZENsb2NrRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdzdGFydCcsIGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5UaWNrcyhvZmZzZXQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdzdG9wJywgZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgdGltZSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbigncGF1c2UnLCBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3BhdXNlJywgdGltZSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiLCBcInN0b3BwZWRcIiwgb3IgXCJwYXVzZWRcIlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLmdldFN0YXRlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSB0cmFuc3BvcnQgYW5kIGFsbCBzb3VyY2VzIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIHRyYW5zcG9ydCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWU9fSBvZmZzZXQgVGhlIHRpbWVsaW5lIG9mZnNldCB0byBzdGFydCB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgaW4gb25lIHNlY29uZCBzdGFydGluZyBhdCBiZWdpbm5pbmcgb2YgdGhlIDV0aCBtZWFzdXJlLlxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KFwiKzFcIiwgXCI0OjA6MFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBjbG9ja1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChvZmZzZXQpKSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9UaWNrcyhvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jbG9jay5zdGFydCh0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSB0cmFuc3BvcnQgYW5kIGFsbCBzb3VyY2VzIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIHRyYW5zcG9ydCBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RvcCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhdXNlIHRoZSB0cmFuc3BvcnQgYW5kIGFsbCBzb3VyY2VzIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5wYXVzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUb2dnbGUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRyYW5zcG9ydC4gSWYgaXQgaXNcblx0XHQgKiBzdGFydGVkLCBpdCB3aWxsIHN0b3AgaXQsIG90aGVyd2lzZSBpdCB3aWxsIHN0YXJ0IHRoZSBUcmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgVGhlIHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnR9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9jbG9jay5nZXRTdGF0ZUF0VGltZSh0aW1lKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U0VUVEVSUy9HRVRURVJTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgc2lnbmF0dXJlIGFzIGp1c3QgdGhlIG51bWVyYXRvciBvdmVyIDQuXG5cdFx0ICogIEZvciBleGFtcGxlIDQvNCB3b3VsZCBiZSBqdXN0IDQgYW5kIDYvOCB3b3VsZCBiZSAzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ8QXJyYXl9XG5cdFx0ICogIEBuYW1lIHRpbWVTaWduYXR1cmVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NvbW1vbiB0aW1lXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZSA9IDQ7XG5cdFx0ICogLy8gNy84XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZSA9IFs3LCA4XTtcblx0XHQgKiAvL3RoaXMgd2lsbCBiZSByZWR1Y2VkIHRvIGEgc2luZ2xlIG51bWJlclxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmU7IC8vcmV0dXJucyAzLjVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICd0aW1lU2lnbmF0dXJlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZVNpZ25hdHVyZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRpbWVTaWcpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aW1lU2lnKSkge1xuXHQgICAgICAgICAgICAgICAgdGltZVNpZyA9IHRpbWVTaWdbMF0gLyB0aW1lU2lnWzFdICogNDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90aW1lU2lnbmF0dXJlID0gdGltZVNpZztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFdoZW4gdGhlIFRvbmUuVHJhbnNwb3J0Lmxvb3AgPSB0cnVlLCB0aGlzIGlzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbG9vcC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wU3RhcnQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3RhcnRQb3NpdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3Moc3RhcnRQb3NpdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBXaGVuIHRoZSBUb25lLlRyYW5zcG9ydC5sb29wID0gdHJ1ZSwgdGhpcyBpcyB0aGUgZW5kaW5nIHBvc2l0aW9uIG9mIHRoZSBsb29wLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcEVuZCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChlbmRQb3NpdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKGVuZFBvc2l0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGxvb3Agc3RhcnQgYW5kIHN0b3AgYXQgdGhlIHNhbWUgdGltZS5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBzdGFydFBvc2l0aW9uXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gZW5kUG9zaXRpb25cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9sb29wIG92ZXIgdGhlIGZpcnN0IG1lYXN1cmVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zZXRMb29wUG9pbnRzKDAsIFwiMW1cIik7XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQubG9vcCA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2V0TG9vcFBvaW50cyA9IGZ1bmN0aW9uIChzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikge1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gc3RhcnRQb3NpdGlvbjtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBlbmRQb3NpdGlvbjtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN3aW5nIHZhbHVlLiBCZXR3ZWVuIDAtMSB3aGVyZSAxIGVxdWFsIHRvXG5cdFx0ICogIHRoZSBub3RlICsgaGFsZiB0aGUgc3ViZGl2aXNpb24uXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBzd2luZ1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3N3aW5nJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3dpbmdBbW91bnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhbW91bnQpIHtcblx0ICAgICAgICAgICAgLy9zY2FsZSB0aGUgdmFsdWVzIHRvIGEgbm9ybWFsIHJhbmdlXG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nQW1vdW50ID0gYW1vdW50O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgc3ViZGl2aXNpb24gd2hpY2ggdGhlIHN3aW5nIHdpbGwgYmUgYXBwbGllZCB0by5cblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYW4gOHRoIG5vdGUuIFZhbHVlIG11c3QgYmUgbGVzc1xuXHRcdCAqICB0aGFuIGEgcXVhcnRlciBub3RlLlxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIHN3aW5nU3ViZGl2aXNpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzd2luZ1N1YmRpdmlzaW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9zd2luZ1RpY2tzKS50b05vdGF0aW9uKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdWJkaXZpc2lvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ1RpY2tzID0gdGhpcy50b1RpY2tzKHN1YmRpdmlzaW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgVHJhbnNwb3J0J3MgcG9zaXRpb24gaW4gQmFyczpCZWF0czpTaXh0ZWVudGhzLlxuXHRcdCAqICBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIGp1bXAgdG8gdGhhdCBwb3NpdGlvbiByaWdodCBhd2F5LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtCYXJzQmVhdHNTaXh0ZWVudGhzfVxuXHRcdCAqICBAbmFtZSBwb3NpdGlvblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3Bvc2l0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5fY2xvY2suZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGlja3MpLnRvQmFyc0JlYXRzU2l4dGVlbnRocygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvZ3Jlc3MpIHtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy50b1RpY2tzKHByb2dyZXNzKTtcblx0ICAgICAgICAgICAgdGhpcy50aWNrcyA9IHRpY2tzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBUcmFuc3BvcnQncyBwb3NpdGlvbiBpbiBzZWNvbmRzXG5cdFx0ICogIFNldHRpbmcgdGhlIHZhbHVlIHdpbGwganVtcCB0byB0aGF0IHBvc2l0aW9uIHJpZ2h0IGF3YXkuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge1NlY29uZHN9XG5cdFx0ICogIEBuYW1lIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzZWNvbmRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2suc2Vjb25kcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHMpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuYnBtLnRpbWVUb1RpY2tzKHMsIG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMudGlja3MgPSB0aWNrcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgVHJhbnNwb3J0J3MgbG9vcCBwb3NpdGlvbiBhcyBhIG5vcm1hbGl6ZWQgdmFsdWUuIEFsd2F5c1xuXHRcdCAqICByZXR1cm5zIDAgaWYgdGhlIHRyYW5zcG9ydCBpZiBsb29wIGlzIG5vdCB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEBuYW1lIHByb2dyZXNzXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdwcm9ncmVzcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLl9jbG9jay5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuICh0aWNrcyAtIHRoaXMuX2xvb3BTdGFydCkgLyAodGhpcy5fbG9vcEVuZCAtIHRoaXMuX2xvb3BTdGFydCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0cmFuc3BvcnRzIGN1cnJlbnQgdGljayBwb3NpdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKiAgQG5hbWUgdGlja3Ncblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICd0aWNrcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLnRpY2tzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fY2xvY2sudGlja3MgIT09IHQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAgICAgLy9zdG9wIGV2ZXJ5dGhpbmcgc3luY2VkIHRvIHRoZSB0cmFuc3BvcnRcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0b3AnLCBub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb2NrLnNldFRpY2tzQXRUaW1lKHQsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9yZXN0YXJ0IGl0IHdpdGggdGhlIG5ldyB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIG5vdywgdGhpcy5zZWNvbmRzKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvY2suc2V0VGlja3NBdFRpbWUodCwgbm93KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgIFRoZSB0aWNrIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmdldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLl9jbG9jay5nZXRUaWNrc0F0VGltZSh0aW1lKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZWxhcHNlZCBzZWNvbmRzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBnZXQgdGhlIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc30gIFRoZSBudW1iZXIgb2YgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuZ2V0U2Vjb25kc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLmdldFNlY29uZHNBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFB1bHNlcyBQZXIgUXVhcnRlciBub3RlLiBUaGlzIGlzIHRoZSBzbWFsbGVzdCByZXNvbHV0aW9uXG5cdFx0ICogIHRoZSBUcmFuc3BvcnQgdGltaW5nIHN1cHBvcnRzLiBUaGlzIHNob3VsZCBiZSBzZXQgb25jZVxuXHRcdCAqICBvbiBpbml0aWFsaXphdGlvbiBhbmQgbm90IHNldCBhZ2Fpbi4gQ2hhbmdpbmcgdGhpcyB2YWx1ZVxuXHRcdCAqICBhZnRlciBvdGhlciBvYmplY3RzIGhhdmUgYmVlbiBjcmVhdGVkIGNhbiBjYXVzZSBwcm9ibGVtcy5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIFBQUVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ1BQUScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BwcTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBwcSkge1xuXHQgICAgICAgICAgICB2YXIgYnBtID0gdGhpcy5icG0udmFsdWU7XG5cdCAgICAgICAgICAgIHRoaXMuX3BwcSA9IHBwcTtcblx0ICAgICAgICAgICAgdGhpcy5icG0udmFsdWUgPSBicG07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBmcm9tIEJQTSB0byBmcmVxdWVuY3kgKGZhY3RvcmluZyBpbiBQUFEpXG5cdFx0ICogIEBwYXJhbSAge0JQTX0gIGJwbSBUaGUgQlBNIHZhbHVlIHRvIGNvbnZlcnQgdG8gZnJlcXVlbmN5XG5cdFx0ICogIEByZXR1cm4gIHtGcmVxdWVuY3l9ICBUaGUgQlBNIGFzIGEgZnJlcXVlbmN5IHdpdGggUFBRIGZhY3RvcmVkIGluLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLl9mcm9tVW5pdHMgPSBmdW5jdGlvbiAoYnBtKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyAoNjAgLyBicG0gLyB0aGlzLlBQUSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZnJvbSBmcmVxdWVuY3kgKHdpdGggUFBRKSBpbnRvIEJQTVxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9ICBmcmVxIFRoZSBjbG9ja3MgZnJlcXVlbmN5IHRvIGNvbnZlcnQgdG8gQlBNXG5cdFx0ICogIEByZXR1cm4gIHtCUE19ICBUaGUgZnJlcXVlbmN5IHZhbHVlIGFzIEJQTS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fdG9Vbml0cyA9IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgcmV0dXJuIGZyZXEgLyB0aGlzLlBQUSAqIDYwO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRTWU5DSU5HXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdGltZSBhbGlnbmVkIHRvIHRoZSBuZXh0IHN1YmRpdmlzaW9uXG5cdFx0ICogIG9mIHRoZSBUcmFuc3BvcnQuIElmIHRoZSBUcmFuc3BvcnQgaXMgbm90IHN0YXJ0ZWQsXG5cdFx0ICogIGl0IHdpbGwgcmV0dXJuIDAuXG5cdFx0ICogIE5vdGU6IHRoaXMgd2lsbCBub3Qgd29yayBwcmVjaXNlbHkgZHVyaW5nIHRlbXBvIHJhbXBzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgc3ViZGl2aXNpb24gIFRoZSBzdWJkaXZpc2lvbiB0byBxdWFudGl6ZSB0b1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgVGhlIGNvbnRleHQgdGltZSBvZiB0aGUgbmV4dCBzdWJkaXZpc2lvbi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydCgpOyAvL3RoZSB0cmFuc3BvcnQgbXVzdCBiZSBzdGFydGVkXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQubmV4dFN1YmRpdmlzaW9uKFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUubmV4dFN1YmRpdmlzaW9uID0gZnVuY3Rpb24gKHN1YmRpdmlzaW9uKSB7XG5cdCAgICAgICAgc3ViZGl2aXNpb24gPSB0aGlzLnRvVGlja3Moc3ViZGl2aXNpb24pO1xuXHQgICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgLy9pZiB0aGUgdHJhbnNwb3J0J3Mgbm90IHN0YXJ0ZWQsIHJldHVybiAwXG5cdCAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAvL3RoZSByZW1haW5kZXIgb2YgdGhlIGN1cnJlbnQgdGlja3MgYW5kIHRoZSBzdWJkaXZpc2lvblxuXHQgICAgICAgICAgICB2YXIgdHJhbnNwb3J0UG9zID0gdGhpcy5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICB2YXIgcmVtYWluaW5nVGlja3MgPSBzdWJkaXZpc2lvbiAtIHRyYW5zcG9ydFBvcyAlIHN1YmRpdmlzaW9uO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2submV4dFRpY2tUaW1lKHJlbWFpbmluZ1RpY2tzLCBub3cpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQXR0YWNoZXMgdGhlIHNpZ25hbCB0byB0aGUgdGVtcG8gY29udHJvbCBzaWduYWwgc28gdGhhdFxuXHRcdCAqICBhbnkgY2hhbmdlcyBpbiB0aGUgdGVtcG8gd2lsbCBjaGFuZ2UgdGhlIHNpZ25hbCBpbiB0aGUgc2FtZVxuXHRcdCAqICByYXRpby5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlNpZ25hbH0gc2lnbmFsXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gcmF0aW8gT3B0aW9uYWxseSBwYXNzIGluIHRoZSByYXRpbyBiZXR3ZWVuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHR3byBzaWduYWxzLiBPdGhlcndpc2UgaXQgd2lsbCBiZSBjb21wdXRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZWlyIGN1cnJlbnQgdmFsdWVzLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zeW5jU2lnbmFsID0gZnVuY3Rpb24gKHNpZ25hbCwgcmF0aW8pIHtcblx0ICAgICAgICBpZiAoIXJhdGlvKSB7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSBzeW5jIHJhdGlvXG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAoc2lnbmFsLmdldFZhbHVlQXRUaW1lKG5vdykgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgIHJhdGlvID0gc2lnbmFsLmdldFZhbHVlQXRUaW1lKG5vdykgLyB0aGlzLmJwbS5nZXRWYWx1ZUF0VGltZShub3cpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmF0aW8gPSAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciByYXRpb1NpZ25hbCA9IG5ldyBUb25lLkdhaW4ocmF0aW8pO1xuXHQgICAgICAgIHRoaXMuYnBtLmNoYWluKHJhdGlvU2lnbmFsLCBzaWduYWwuX3BhcmFtKTtcblx0ICAgICAgICB0aGlzLl9zeW5jZWRTaWduYWxzLnB1c2goe1xuXHQgICAgICAgICAgICAncmF0aW8nOiByYXRpb1NpZ25hbCxcblx0ICAgICAgICAgICAgJ3NpZ25hbCc6IHNpZ25hbCxcblx0ICAgICAgICAgICAgJ2luaXRpYWwnOiBzaWduYWwudmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBzaWduYWwudmFsdWUgPSAwO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbnN5bmNzIGEgcHJldmlvdXNseSBzeW5jZWQgc2lnbmFsIGZyb20gdGhlIHRyYW5zcG9ydCdzIGNvbnRyb2wuXG5cdFx0ICogIFNlZSBUb25lLlRyYW5zcG9ydC5zeW5jU2lnbmFsLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlNpZ25hbH0gc2lnbmFsXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnVuc3luY1NpZ25hbCA9IGZ1bmN0aW9uIChzaWduYWwpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fc3luY2VkU2lnbmFscy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICB2YXIgc3luY2VkU2lnbmFsID0gdGhpcy5fc3luY2VkU2lnbmFsc1tpXTtcblx0ICAgICAgICAgICAgaWYgKHN5bmNlZFNpZ25hbC5zaWduYWwgPT09IHNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc3luY2VkU2lnbmFsLnJhdGlvLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgICAgIHN5bmNlZFNpZ25hbC5zaWduYWwudmFsdWUgPSBzeW5jZWRTaWduYWwuaW5pdGlhbDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNlZFNpZ25hbHMuc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdicG0nKTtcblx0ICAgICAgICB0aGlzLmJwbSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yZXBlYXRlZEV2ZW50cy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRJTklUSUFMSVpBVElPTlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgdmFyIFRyYW5zcG9ydENvbnN0cnVjdG9yID0gVG9uZS5UcmFuc3BvcnQ7XG5cdCAgICBUb25lLlRyYW5zcG9ydCA9IG5ldyBUcmFuc3BvcnRDb25zdHJ1Y3RvcigpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5UcmFuc3BvcnQgaW5zdGFuY2VvZiBUcmFuc3BvcnRDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydCA9IGNvbnRleHQuVHJhbnNwb3J0O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0ID0gbmV3IFRyYW5zcG9ydENvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc3RvcmUgdGhlIFRyYW5zcG9ydCBvbiB0aGUgY29udGV4dCBzbyBpdCBjYW4gYmUgcmV0cmlldmVkIGxhdGVyXG5cdCAgICAgICAgY29udGV4dC5UcmFuc3BvcnQgPSBUb25lLlRyYW5zcG9ydDtcblx0ICAgIH0pO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdjbG9zZScsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuVHJhbnNwb3J0IGluc3RhbmNlb2YgVHJhbnNwb3J0Q29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgY29udGV4dC5UcmFuc3BvcnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Wb2x1bWUgaXMgYSBzaW1wbGUgdm9sdW1lIG5vZGUsIHVzZWZ1bCBmb3IgY3JlYXRpbmcgYSB2b2x1bWUgZmFkZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc30gW3ZvbHVtZT0wXSB0aGUgaW5pdGlhbCB2b2x1bWVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdm9sID0gbmV3IFRvbmUuVm9sdW1lKC0xMik7XG5cdFx0ICogaW5zdHJ1bWVudC5jaGFpbih2b2wsIFRvbmUuTWFzdGVyKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVm9sdW1lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndm9sdW1lJ10sIFRvbmUuVm9sdW1lKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIG91dHB1dCBub2RlXG5cdFx0XHQgKiBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnZvbHVtZSwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB1bm11dGVkIHZvbHVtZVxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3VubXV0ZWRWb2x1bWUgPSBvcHRpb25zLnZvbHVtZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdm9sdW1lIGNvbnRyb2wgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5vdXRwdXQuZ2Fpbjtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLy9zZXQgdGhlIG11dGUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVm9sdW1lLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlZvbHVtZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlZvbHVtZSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHZvbHVtZS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlZvbHVtZS5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy52b2x1bWUudmFsdWUgPT09IC1JbmZpbml0eTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLm11dGUgJiYgbXV0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdW5tdXRlZFZvbHVtZSA9IHRoaXMudm9sdW1lLnZhbHVlO1xuXHQgICAgICAgICAgICAgICAgLy9tYXliZSBpdCBzaG91bGQgcmFtcCBoZXJlP1xuXHQgICAgICAgICAgICAgICAgdGhpcy52b2x1bWUudmFsdWUgPSAtSW5maW5pdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tdXRlICYmICFtdXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZvbHVtZS52YWx1ZSA9IHRoaXMuX3VubXV0ZWRWb2x1bWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Wb2x1bWV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVm9sdW1lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMudm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVm9sdW1lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc2luZ2xlIG1hc3RlciBvdXRwdXQgd2hpY2ggaXMgY29ubmVjdGVkIHRvIHRoZVxuXHRcdCAqICAgICAgICAgIEF1ZGlvRGVzdGluYXRpb25Ob2RlIChha2EgeW91ciBzcGVha2VycykuXG5cdFx0ICogICAgICAgICAgSXQgcHJvdmlkZXMgdXNlZnVsIGNvbnZlbmllbmNlcyBzdWNoIGFzIHRoZSBhYmlsaXR5XG5cdFx0ICogICAgICAgICAgdG8gc2V0IHRoZSB2b2x1bWUgYW5kIG11dGUgdGhlIGVudGlyZSBhcHBsaWNhdGlvbi5cblx0XHQgKiAgICAgICAgICBJdCBhbHNvIGdpdmVzIHlvdSB0aGUgYWJpbGl0eSB0byBhcHBseSBtYXN0ZXIgZWZmZWN0cyB0byB5b3VyIGFwcGxpY2F0aW9uLlxuXHRcdCAqICAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgTGlrZSBUb25lLlRyYW5zcG9ydCwgQSBzaW5nbGUgVG9uZS5NYXN0ZXIgaXMgY3JlYXRlZFxuXHRcdCAqICAgICAgICAgIG9uIGluaXRpYWxpemF0aW9uIGFuZCB5b3UgZG8gbm90IG5lZWQgdG8gZXhwbGljaXRseSBjb25zdHJ1Y3Qgb25lLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHNpbmdsZXRvblxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdGhlIGF1ZGlvIHdpbGwgZ28gZnJvbSB0aGUgb3NjaWxsYXRvciB0byB0aGUgc3BlYWtlcnNcblx0XHQgKiBvc2NpbGxhdG9yLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHRcdCAqIC8vYSBjb252ZW5pZW5jZSBmb3IgY29ubmVjdGluZyB0byB0aGUgbWFzdGVyIG91dHB1dCBpcyBhbHNvIHByb3ZpZGVkOlxuXHRcdCAqIG9zY2lsbGF0b3IudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3RoZSBhYm92ZSB0d28gZXhhbXBsZXMgYXJlIGVxdWl2YWxlbnQuXG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3RlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAwKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgcHJpdmF0ZSB2b2x1bWUgbm9kZVxuXHRcdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZSgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgbWFzdGVyIG91dHB1dC5cblx0XHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMub3V0cHV0LCB0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NYXN0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuTWFzdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTWFzdGVyI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogVG9uZS5NYXN0ZXIubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NYXN0ZXIucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgbWFzdGVyIGVmZmVjdHMgY2hhaW4uIE5PVEU6IHRoaXMgd2lsbCBkaXNjb25uZWN0IGFueSBub2RlcyB3aGljaCB3ZXJlIHByZXZpb3VzbHlcblx0XHQgKiAgY2hhaW5lZCBpbiB0aGUgbWFzdGVyIGVmZmVjdHMgY2hhaW4uXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9Ob2RlfFRvbmV9IGFyZ3MuLi4gQWxsIGFyZ3VtZW50cyB3aWxsIGJlIGNvbm5lY3RlZCBpbiBhIHJvd1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgTWFzdGVyIHdpbGwgYmUgcm91dGVkIHRocm91Z2ggaXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1hc3Rlcn0gIHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NvbWUgb3ZlcmFsbCBjb21wcmVzc2lvbiB0byBrZWVwIHRoZSBsZXZlbHMgaW4gY2hlY2tcblx0XHQgKiB2YXIgbWFzdGVyQ29tcHJlc3NvciA9IG5ldyBUb25lLkNvbXByZXNzb3Ioe1xuXHRcdCAqIFx0XCJ0aHJlc2hvbGRcIiA6IC02LFxuXHRcdCAqIFx0XCJyYXRpb1wiIDogMyxcblx0XHQgKiBcdFwiYXR0YWNrXCIgOiAwLjUsXG5cdFx0ICogXHRcInJlbGVhc2VcIiA6IDAuMVxuXHRcdCAqIH0pO1xuXHRcdCAqIC8vZ2l2ZSBhIGxpdHRsZSBib29zdCB0byB0aGUgbG93c1xuXHRcdCAqIHZhciBsb3dCdW1wID0gbmV3IFRvbmUuRmlsdGVyKDIwMCwgXCJsb3dzaGVsZlwiKTtcblx0XHQgKiAvL3JvdXRlIGV2ZXJ5dGhpbmcgdGhyb3VnaCB0aGUgZmlsdGVyXG5cdFx0ICogLy9hbmQgY29tcHJlc3NvciBiZWZvcmUgZ29pbmcgdG8gdGhlIHNwZWFrZXJzXG5cdFx0ICogVG9uZS5NYXN0ZXIuY2hhaW4obG93QnVtcCwgbWFzdGVyQ29tcHJlc3Nvcik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3Rlci5wcm90b3R5cGUuY2hhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbi5hcHBseSh0aGlzLmlucHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0uY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1hc3Rlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWFzdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVVHTUVOVCBUT05FJ3MgUFJPVE9UWVBFXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBDb25uZWN0ICd0aGlzJyB0byB0aGUgbWFzdGVyIG91dHB1dC4gU2hvcnRoYW5kIGZvciB0aGlzLmNvbm5lY3QoVG9uZS5NYXN0ZXIpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY29ubmVjdCBhbiBvc2NpbGxhdG9yIHRvIHRoZSBtYXN0ZXIgb3V0cHV0XG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS50b01hc3RlcigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLnRvTWFzdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgaWYgKHdpbmRvdy5BdWRpb05vZGUpIHtcblx0ICAgICAgICAvLyBBbHNvIGF1Z21lbnQgQXVkaW9Ob2RlJ3MgcHJvdG90eXBlIHRvIGluY2x1ZGUgdG9NYXN0ZXIgYXMgYSBjb252ZW5pZW5jZVxuXHQgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUudG9NYXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdCAgICAvKipcblx0XHQgKiAgaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFuZCBsaXN0ZW4gZm9yIG5ldyBhdWRpbyBjb250ZXh0c1xuXHRcdCAqL1xuXHQgICAgdmFyIE1hc3RlckNvbnN0cnVjdG9yID0gVG9uZS5NYXN0ZXI7XG5cdCAgICBUb25lLk1hc3RlciA9IG5ldyBNYXN0ZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAvLyBpZiBpdCBhbHJlYWR5IGV4aXN0cywganVzdCByZXN0b3JlIGl0XG5cdCAgICAgICAgaWYgKGNvbnRleHQuTWFzdGVyIGluc3RhbmNlb2YgTWFzdGVyQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgVG9uZS5NYXN0ZXIgPSBjb250ZXh0Lk1hc3Rlcjtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBUb25lLk1hc3RlciA9IG5ldyBNYXN0ZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb250ZXh0Lk1hc3RlciA9IFRvbmUuTWFzdGVyO1xuXHQgICAgfSk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2Nsb3NlJywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5NYXN0ZXIgaW5zdGFuY2VvZiBNYXN0ZXJDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICBjb250ZXh0Lk1hc3Rlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5NYXN0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQmFzZSBjbGFzcyBmb3Igc291cmNlcy4gU291cmNlcyBoYXZlIHN0YXJ0L3N0b3AgbWV0aG9kc1xuXHRcdCAqICAgICAgICAgIGFuZCB0aGUgYWJpbGl0eSB0byBiZSBzeW5jZWQgdG8gdGhlXG5cdFx0ICogICAgICAgICAgc3RhcnQvc3RvcCBvZiBUb25lLlRyYW5zcG9ydC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vTXVsdGlwbGUgc3RhdGUgY2hhbmdlIGV2ZW50cyBjYW4gYmUgY2hhaW5lZCB0b2dldGhlcixcblx0XHQgKiAvL2J1dCBtdXN0IGJlIHNldCBpbiB0aGUgY29ycmVjdCBvcmRlciBhbmQgd2l0aCBhc2NlbmRpbmcgdGltZXNcblx0XHQgKlxuXHRcdCAqIC8vIE9LXG5cdFx0ICogc3RhdGUuc3RhcnQoKS5zdG9wKFwiKzAuMlwiKTtcblx0XHQgKiAvLyBBTkRcblx0XHQgKiBzdGF0ZS5zdGFydCgpLnN0b3AoXCIrMC4yXCIpLnN0YXJ0KFwiKzAuNFwiKS5zdG9wKFwiKzAuN1wiKVxuXHRcdCAqXG5cdFx0ICogLy8gQkFEXG5cdFx0ICogc3RhdGUuc3RvcChcIiswLjJcIikuc3RhcnQoKTtcblx0XHQgKiAvLyBPUlxuXHRcdCAqIHN0YXRlLnN0YXJ0KFwiKzAuM1wiKS5zdG9wKFwiKzAuMlwiKTtcblx0XHQgKlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Tb3VyY2UuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBzb3VyY2Uudm9sdW1lLnZhbHVlID0gLTY7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogXHRLZWVwIHRyYWNrIG9mIHRoZSBzY2hlZHVsZWQgc3RhdGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUubWVtb3J5ID0gMTAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzeW5jZWQgYHN0YXJ0YCBjYWxsYmFjayBmdW5jdGlvbiBmcm9tIHRoZSB0cmFuc3BvcnRcblx0XHRcdCAqICBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEtlZXAgdHJhY2sgb2YgYWxsIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgaWRzXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gW107XG5cdCAgICAgICAgLy9tYWtlIHRoZSBvdXRwdXQgZXhwbGljaXRseSBzdGVyZW9cblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnQgPSAyO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIC8vbXV0ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Tb3VyY2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Tb3VyY2UucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnNlY29uZHMpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogc291cmNlLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU291cmNlLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy9vdmVyd3JpdGUgdGhlc2UgZnVuY3Rpb25zXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuX3N0YXJ0ID0gVG9uZS5ub09wO1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnJlc3RhcnQgPSBUb25lLm5vT3A7XG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuX3N0b3AgPSBUb25lLm5vT3A7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIHNvdXJjZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuIElmIG5vIHRpbWUgaXMgZ2l2ZW4sXG5cdFx0ICogIHN0YXJ0IHRoZSBzb3VyY2Ugbm93LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHNvdXJjZSBzaG91bGQgYmUgc3RhcnRlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0YXJ0KFwiKzAuNVwiKTsgLy9zdGFydHMgdGhlIHNvdXJjZSAwLjUgc2Vjb25kcyBmcm9tIG5vd1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRpbWUpICYmIHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnQuc2Vjb25kcztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaWYgaXQncyBzdGFydGVkLCBzdG9wIGl0IGFuZCByZXN0YXJ0IGl0XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLnJlc3RhcnQodGltZSwgb2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBvZmZzZXQgdGltZSB0byB0aGUgZXZlbnRcblx0ICAgICAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3N0YXRlLmdldCh0aW1lKTtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Lm9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuZHVyYXRpb24gPSBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgIHZhciBzY2hlZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodCwgb2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkLnB1c2goc2NoZWQpO1xuXHQgICAgICAgICAgICAgICAgLy9pZiBpdCdzIGFscmVhZHkgc3RhcnRlZFxuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jZWRTdGFydCh0aGlzLm5vdygpLCBUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIHNvdXJjZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuIElmIG5vIHRpbWUgaXMgZ2l2ZW4sXG5cdFx0ICogIHN0b3AgdGhlIHNvdXJjZSBub3cuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgc291cmNlIHNob3VsZCBiZSBzdG9wcGVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RvcCgpOyAvLyBzdG9wcyB0aGUgc291cmNlIGltbWVkaWF0ZWx5XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSAmJiB0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0LnNlY29uZHM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIXRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHNjaGVkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUodGhpcy5fc3RvcC5iaW5kKHRoaXMpLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkLnB1c2goc2NoZWQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3luYyB0aGUgc291cmNlIHRvIHRoZSBUcmFuc3BvcnQgc28gdGhhdCBhbGwgc3Vic2VxdWVudFxuXHRcdCAqICBjYWxscyB0byBgc3RhcnRgIGFuZCBgc3RvcGAgYXJlIHN5bmNlZCB0byB0aGUgVHJhbnNwb3J0VGltZVxuXHRcdCAqICBpbnN0ZWFkIG9mIHRoZSBBdWRpb0NvbnRleHQgdGltZS5cblx0XHQgKlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3N5bmMgdGhlIHNvdXJjZSBzbyB0aGF0IGl0IHBsYXlzIGJldHdlZW4gMCBhbmQgMC4zIG9uIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZVxuXHRcdCAqIHNvdXJjZS5zeW5jKCkuc3RhcnQoMCkuc3RvcCgwLjMpO1xuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydCgpO1xuXHRcdCAqXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHdpdGggYW4gb2Zmc2V0IGFuZCB0aGUgc3luYydlZCBzb3VyY2VzXG5cdFx0ICogLy93aWxsIHN0YXJ0IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG5cdFx0ICogc291cmNlLnN5bmMoKS5zdGFydCgwLjEpO1xuXHRcdCAqIC8vdGhlIHNvdXJjZSB3aWxsIGJlIGludm9rZWQgd2l0aCBhbiBvZmZzZXQgb2YgMC40XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoXCIrMC41XCIsIDAuNSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZFN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuXHQgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBwbGF5YmFjayBzdGF0ZSBhdCB0aGF0IHRpbWVcblx0ICAgICAgICAgICAgICAgIHZhciBzdGF0ZUV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KG9mZnNldCk7XG5cdCAgICAgICAgICAgICAgICAvLyBsaXN0ZW4gZm9yIHN0YXJ0IGV2ZW50cyB3aGljaCBtYXkgb2NjdXIgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc3luYydlZCB0aW1lXG5cdCAgICAgICAgICAgICAgICBpZiAoc3RhdGVFdmVudCAmJiBzdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgc3RhdGVFdmVudC50aW1lICE9PSBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIG9mZnNldFxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydE9mZnNldCA9IG9mZnNldCAtIHRoaXMudG9TZWNvbmRzKHN0YXRlRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZUV2ZW50LmR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoc3RhdGVFdmVudC5kdXJhdGlvbikgLSBzdGFydE9mZnNldDtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodGltZSwgdGhpcy50b1NlY29uZHMoc3RhdGVFdmVudC5vZmZzZXQpICsgc3RhcnRPZmZzZXQsIGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zeW5jZWRTdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdmFyIHNlY29uZHMgPSBUb25lLlRyYW5zcG9ydC5nZXRTZWNvbmRzQXRUaW1lKE1hdGgubWF4KHRpbWUgLSB0aGlzLnNhbXBsZVRpbWUsIDApKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHNlY29uZHMpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0b3AodGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub24oJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX3N5bmNlZFN0YXJ0KTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5vbignc3RvcCBwYXVzZSBsb29wRW5kJywgdGhpcy5fc3luY2VkU3RvcCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVuc3luYyB0aGUgc291cmNlIHRvIHRoZSBUcmFuc3BvcnQuIFNlZSBUb25lLlNvdXJjZS5zeW5jXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9mZignc3RvcCBwYXVzZSBsb29wRW5kJywgdGhpcy5fc3luY2VkU3RvcCk7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9mZignc3RhcnQgbG9vcFN0YXJ0JywgdGhpcy5fc3luY2VkU3RhcnQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSBmYWxzZTtcblx0ICAgICAgICAvLyBjbGVhciBhbGwgb2YgdGhlIHNjaGVkdWxlZCBpZHNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NjaGVkdWxlZC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLl9zY2hlZHVsZWRbaV07XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGlkKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gW107XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqXHRDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy51bnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU291cmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQXVkaW9CdWZmZXIuY29weVRvL0Zyb21DaGFubmVsIHBvbHlmaWxsXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIUF1ZGlvQnVmZmVyLnByb3RvdHlwZS5jb3B5VG9DaGFubmVsKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQnVmZmVyLnByb3RvdHlwZS5jb3B5VG9DaGFubmVsID0gZnVuY3Rpb24gKHNyYywgY2hhbk51bSwgc3RhcnQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gdGhpcy5nZXRDaGFubmVsRGF0YShjaGFuTnVtKTtcblx0ICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaSArIHN0YXJ0XSA9IHNyY1tpXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgQXVkaW9CdWZmZXIucHJvdG90eXBlLmNvcHlGcm9tQ2hhbm5lbCA9IGZ1bmN0aW9uIChkZXN0LCBjaGFuTnVtLCBzdGFydCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSB0aGlzLmdldENoYW5uZWxEYXRhKGNoYW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydCB8fCAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXN0Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZGVzdFtpXSA9IGNoYW5uZWxbaSArIHN0YXJ0XTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQnVmZmVyIGxvYWRpbmcgYW5kIHN0b3JhZ2UuIFRvbmUuQnVmZmVyIGlzIHVzZWQgaW50ZXJuYWxseSBieSBhbGxcblx0XHQgKiAgICAgICAgICBjbGFzc2VzIHRoYXQgbWFrZSByZXF1ZXN0cyBmb3IgYXVkaW8gZmlsZXMgc3VjaCBhcyBUb25lLlBsYXllcixcblx0XHQgKiAgICAgICAgICBUb25lLlNhbXBsZXIgYW5kIFRvbmUuQ29udm9sdmVyLlxuXHRcdCAqXG5cdFx0ICogICAgICAgICAgQXNpZGUgZnJvbSBsb2FkIGNhbGxiYWNrcyBmcm9tIGluZGl2aWR1YWwgYnVmZmVycywgVG9uZS5CdWZmZXJcblx0XHQgKiAgXHRcdHByb3ZpZGVzIGV2ZW50cyB3aGljaCBrZWVwIHRyYWNrIG9mIHRoZSBsb2FkaW5nIHByb2dyZXNzXG5cdFx0ICogIFx0XHRvZiBfYWxsXyBvZiB0aGUgYnVmZmVycy4gVGhlc2UgYXJlIFRvbmUuQnVmZmVyLm9uKFwibG9hZFwiIC8gXCJwcm9ncmVzc1wiIC8gXCJlcnJvclwiKVxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtBdWRpb0J1ZmZlcnxTdHJpbmd9IHVybCBUaGUgdXJsIHRvIGxvYWQsIG9yIHRoZSBhdWRpbyBidWZmZXIgdG8gc2V0LlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIEEgY2FsbGJhY2sgd2hpY2ggaXMgaW52b2tlZCBhZnRlciB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBgVG9uZS5CdWZmZXIub24oJ2xvYWQnLCBjYWxsYmFjaylgIGluc3RlYWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5jZSBpdCB3aWxsIGdpdmUgeW91IGEgY2FsbGJhY2sgd2hlbiBfYWxsXyBidWZmZXJzIGFyZSBsb2FkZWQuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb249fSBvbmVycm9yIFRoZSBjYWxsYmFjayB0byBpbnZva2UgaWYgdGhlcmUgaXMgYW4gZXJyb3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKFwicGF0aC90by9zb3VuZC5tcDNcIiwgZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vdGhlIGJ1ZmZlciBpcyBub3cgYXZhaWxhYmxlLlxuXHRcdCAqIFx0dmFyIGJ1ZmYgPSBidWZmZXIuZ2V0KCk7XG5cdFx0ICogfSk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gbG9hZCBwcm92aWRlIGZhbGxiYWNrIGV4dGVuc2lvbiB0eXBlcyBpZiB0aGUgZmlyc3QgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLlxuXHRcdCAqIHZhciBidWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIoXCJwYXRoL3RvL3NvdW5kLlttcDN8b2dnfHdhdl1cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAnb25sb2FkJyxcblx0ICAgICAgICAgICAgJ29uZXJyb3InXG5cdCAgICAgICAgXSwgVG9uZS5CdWZmZXIpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzdG9yZXMgdGhlIGxvYWRlZCBBdWRpb0J1ZmZlclxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb0J1ZmZlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpbmRpY2F0ZXMgaWYgdGhlIGJ1ZmZlciBzaG91bGQgYmUgcmV2ZXJzZWQgb3Igbm90XG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JldmVyc2VkID0gb3B0aW9ucy5yZXZlcnNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBYSFJcblx0XHRcdCAqICBAdHlwZSAge1hNTEh0dHBSZXF1ZXN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogUHJpdmF0ZSBjYWxsYmFjayB3aGVuIHRoZSBidWZmZXIgaXMgbG9hZGVkLlxuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29ubG9hZCA9IFRvbmUubm9PcDtcblx0ICAgICAgICBpZiAob3B0aW9ucy51cmwgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlciB8fCBvcHRpb25zLnVybCBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0KG9wdGlvbnMudXJsKTtcblx0ICAgICAgICAgICAgLy8gaW52b2tlIHRoZSBvbmxvYWQgY2FsbGJhY2tcblx0ICAgICAgICAgICAgaWYgKG9wdGlvbnMub25sb2FkKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25sb2FkID0gb3B0aW9ucy5vbmxvYWQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcob3B0aW9ucy51cmwpKSB7XG5cdCAgICAgICAgICAgIHRoaXMubG9hZChvcHRpb25zLnVybCkudGhlbihvcHRpb25zLm9ubG9hZCkuY2F0Y2gob3B0aW9ucy5vbmVycm9yKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CdWZmZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd1cmwnOiB1bmRlZmluZWQsXG5cdCAgICAgICAgJ3JldmVyc2UnOiBmYWxzZSxcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdvbmVycm9yJzogVG9uZS5ub09wXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhc3MgaW4gYW4gQXVkaW9CdWZmZXIgb3IgVG9uZS5CdWZmZXIgdG8gc2V0IHRoZSB2YWx1ZVxuXHRcdCAqICBvZiB0aGlzIGJ1ZmZlci5cblx0XHQgKiAgQHBhcmFtIHtBdWRpb0J1ZmZlcnxUb25lLkJ1ZmZlcn0gYnVmZmVyIHRoZSBidWZmZXJcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgIGlmIChidWZmZXIgaW5zdGFuY2VvZiBUb25lLkJ1ZmZlcikge1xuXHQgICAgICAgICAgICBpZiAoYnVmZmVyLmxvYWRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyLmdldCgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyLl9vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoYnVmZmVyKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcmV0dXJuIHtBdWRpb0J1ZmZlcn0gVGhlIGF1ZGlvIGJ1ZmZlciBzdG9yZWQgaW4gdGhlIG9iamVjdC5cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTWFrZXMgYW4geGhyIHJlcWVzdCBmb3IgdGhlIHNlbGVjdGVkIHVybCB0aGVuIGRlY29kZXNcblx0XHQgKiAgdGhlIGZpbGUgYXMgYW4gYXVkaW8gYnVmZmVyLiBJbnZva2VzXG5cdFx0ICogIHRoZSBjYWxsYmFjayBvbmNlIHRoZSBhdWRpbyBidWZmZXIgbG9hZHMuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgYnVmZmVyIHRvIGxvYWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgZmlsZXR5cGUgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIuXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfSByZXR1cm5zIGEgUHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIHRoZSBUb25lLkJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBvbmxvYWQsIG9uZXJyb3IpIHtcblx0ICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChsb2FkLCBlcnJvcikge1xuXHQgICAgICAgICAgICB0aGlzLl94aHIgPSBUb25lLkJ1ZmZlci5sb2FkKHVybCwgLy9zdWNjZXNzXG5cdCAgICAgICAgICAgIGZ1bmN0aW9uIChidWZmKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zZXQoYnVmZik7XG5cdCAgICAgICAgICAgICAgICBsb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb25sb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgaWYgKG9ubG9hZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAvL2Vycm9yXG5cdCAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3hociA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICBlcnJvcihlcnIpO1xuXHQgICAgICAgICAgICAgICAgaWYgKG9uZXJyb3IpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbmVycm9yKGVycik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gcHJvbWlzZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIGlmICh0aGlzLl94aHIpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHRoaXMuX3hocik7XG5cdCAgICAgICAgICAgIHRoaXMuX3hoci5hYm9ydCgpO1xuXHQgICAgICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVyIGlzIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPiAwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGR1cmF0aW9uIG9mIHRoZSBidWZmZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgZHVyYXRpb25cblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdkdXJhdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5kdXJhdGlvbjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gc2FtcGxlc1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGxlbmd0aFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBkaXNjcmV0ZSBhdWRpbyBjaGFubmVscy4gUmV0dXJucyAwIGlmIG5vIGJ1ZmZlclxuXHRcdCAqIGlzIGxvYWRlZC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBudW1iZXJPZkNoYW5uZWxzXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnbnVtYmVyT2ZDaGFubmVscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGF1ZGlvIGJ1ZmZlciBmcm9tIHRoZSBhcnJheS4gVG8gY3JlYXRlIGEgbXVsdGljaGFubmVsIEF1ZGlvQnVmZmVyLFxuXHRcdCAqICBwYXNzIGluIGEgbXVsdGlkaW1lbnNpb25hbCBhcnJheS5cblx0XHQgKiAgQHBhcmFtIHtGbG9hdDMyQXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsIHRoZSBhdWRpbyBidWZmZXJcblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHtcblx0ICAgICAgICB2YXIgaXNNdWx0aWRpbWVuc2lvbmFsID0gYXJyYXlbMF0ubGVuZ3RoID4gMDtcblx0ICAgICAgICB2YXIgY2hhbm5lbHMgPSBpc011bHRpZGltZW5zaW9uYWwgPyBhcnJheS5sZW5ndGggOiAxO1xuXHQgICAgICAgIHZhciBsZW4gPSBpc011bHRpZGltZW5zaW9uYWwgPyBhcnJheVswXS5sZW5ndGggOiBhcnJheS5sZW5ndGg7XG5cdCAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXIoY2hhbm5lbHMsIGxlbiwgdGhpcy5jb250ZXh0LnNhbXBsZVJhdGUpO1xuXHQgICAgICAgIGlmICghaXNNdWx0aWRpbWVuc2lvbmFsICYmIGNoYW5uZWxzID09PSAxKSB7XG5cdCAgICAgICAgICAgIGFycmF5ID0gW2FycmF5XTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjaGFubmVsczsgYysrKSB7XG5cdCAgICAgICAgICAgIGJ1ZmZlci5jb3B5VG9DaGFubmVsKGFycmF5W2NdLCBjKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0U3VtcyBtdWxpcGxlIGNoYW5uZWxzIGludG8gMSBjaGFubmVsXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gY2hhbm5lbCBPcHRpb25hbGx5IG9ubHkgY29weSBhIHNpbmdsZSBjaGFubmVsIGZyb20gdGhlIGFycmF5LlxuXHRcdCAqICBAcmV0dXJuIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS50b01vbm8gPSBmdW5jdGlvbiAoY2hhbk51bSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGNoYW5OdW0pKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZnJvbUFycmF5KHRoaXMudG9BcnJheShjaGFuTnVtKSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIG91dHB1dEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmxlbmd0aCk7XG5cdCAgICAgICAgICAgIHZhciBudW1DaGFubmVscyA9IHRoaXMubnVtYmVyT2ZDaGFubmVscztcblx0ICAgICAgICAgICAgZm9yICh2YXIgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBudW1DaGFubmVsczsgY2hhbm5lbCsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbEFycmF5ID0gdGhpcy50b0FycmF5KGNoYW5uZWwpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFubmVsQXJyYXkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBvdXRwdXRBcnJheVtpXSArPSBjaGFubmVsQXJyYXlbaV07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9kaXZpZGUgYnkgdGhlIG51bWJlciBvZiBjaGFubmVsc1xuXHQgICAgICAgICAgICBvdXRwdXRBcnJheSA9IG91dHB1dEFycmF5Lm1hcChmdW5jdGlvbiAoc2FtcGxlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gc2FtcGxlIC8gbnVtQ2hhbm5lbHM7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB0aGlzLmZyb21BcnJheShvdXRwdXRBcnJheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0R2V0IHRoZSBidWZmZXIgYXMgYW4gYXJyYXkuIFNpbmdsZSBjaGFubmVsIGJ1ZmZlcnMgd2lsbCByZXR1cm4gYSAxLWRpbWVuc2lvbmFsXG5cdFx0ICogXHRGbG9hdDMyQXJyYXksIGFuZCBtdWx0aWNoYW5uZWwgYnVmZmVycyB3aWxsIHJldHVybiBtdWx0aWRpbWVuc2lvbmFsIGFycmF5cy5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBjaGFubmVsIE9wdGlvbmFsbHkgb25seSBjb3B5IGEgc2luZ2xlIGNoYW5uZWwgZnJvbSB0aGUgYXJyYXkuXG5cdFx0ICogIEByZXR1cm4ge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoY2hhbm5lbCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGNoYW5uZWwpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENoYW5uZWxEYXRhKGNoYW5uZWwpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5udW1iZXJPZkNoYW5uZWxzID09PSAxKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnRvQXJyYXkoMCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHJldCA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IHRoaXMubnVtYmVyT2ZDaGFubmVsczsgYysrKSB7XG5cdCAgICAgICAgICAgICAgICByZXRbY10gPSB0aGlzLmdldENoYW5uZWxEYXRhKGMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBGbG9hdDMyQXJyYXkgcmVwcmVzZW50aW5nIHRoZSBQQ00gYXVkaW8gZGF0YSBmb3IgdGhlIHNwZWNpZmljIGNoYW5uZWwuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGNoYW5uZWwgIFRoZSBjaGFubmVsIG51bWJlciB0byByZXR1cm5cblx0XHQgKiAgQHJldHVybiAge0Zsb2F0MzJBcnJheX0gIFRoZSBhdWRpbyBhcyBhIFR5cGVkQXJyYXlcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5nZXRDaGFubmVsRGF0YSA9IGZ1bmN0aW9uIChjaGFubmVsKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5nZXRDaGFubmVsRGF0YShjaGFubmVsKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ3V0IGEgc3Vic2VjdGlvbiBvZiB0aGUgYXJyYXkgYW5kIHJldHVybiBhIGJ1ZmZlciBvZiB0aGVcblx0XHQgKiAgc3Vic2VjdGlvbi4gRG9lcyBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBidWZmZXJcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydCBUaGUgdGltZSB0byBzdGFydCB0aGUgc2xpY2Vcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gZW5kIFRoZSBlbmQgdGltZSB0byBzbGljZS4gSWYgbm9uZSBpcyBnaXZlblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgd2lsbCBkZWZhdWx0IHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gKHN0YXJ0LCBlbmQpIHtcblx0ICAgICAgICBlbmQgPSBUb25lLmRlZmF1bHRBcmcoZW5kLCB0aGlzLmR1cmF0aW9uKTtcblx0ICAgICAgICB2YXIgc3RhcnRTYW1wbGVzID0gTWF0aC5mbG9vcih0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSAqIHRoaXMudG9TZWNvbmRzKHN0YXJ0KSk7XG5cdCAgICAgICAgdmFyIGVuZFNhbXBsZXMgPSBNYXRoLmZsb29yKHRoaXMuY29udGV4dC5zYW1wbGVSYXRlICogdGhpcy50b1NlY29uZHMoZW5kKSk7XG5cdCAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm51bWJlck9mQ2hhbm5lbHM7IGkrKykge1xuXHQgICAgICAgICAgICByZXBsYWNlbWVudFtpXSA9IHRoaXMudG9BcnJheShpKS5zbGljZShzdGFydFNhbXBsZXMsIGVuZFNhbXBsZXMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmV0QnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKCkuZnJvbUFycmF5KHJlcGxhY2VtZW50KTtcblx0ICAgICAgICByZXR1cm4gcmV0QnVmZmVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXZlcnNlIHRoZSBidWZmZXIuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuX3JldmVyc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1iZXJPZkNoYW5uZWxzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwodGhpcy5nZXRDaGFubmVsRGF0YShpKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV2ZXJzZSB0aGUgYnVmZmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSByZXZlcnNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAncmV2ZXJzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldmVyc2VkO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmV2KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9yZXZlcnNlZCAhPT0gcmV2KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXZlcnNlZCA9IHJldjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JldmVyc2UoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBTVEFUSUMgTUVUSE9EU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL3N0YXRpY2FsbHkgaW5oZXJpdHMgRW1pdHRlciBtZXRob2RzXG5cdCAgICBUb25lLkVtaXR0ZXIubWl4aW4oVG9uZS5CdWZmZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBzdGF0aWMgcXVldWUgZm9yIGFsbCBvZiB0aGUgeGhyIHJlcXVlc3RzXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlID0gW107XG5cdCAgICAvKipcblx0XHQgKiAgQSBwYXRoIHdoaWNoIGlzIHByZWZpeGVkIGJlZm9yZSBldmVyeSB1cmwuXG5cdFx0ICogIEB0eXBlICB7U3RyaW5nfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5iYXNlVXJsID0gJyc7XG5cdCAgICAvKipcblx0XHQgKiAgQ3JlYXRlIGEgVG9uZS5CdWZmZXIgZnJvbSB0aGUgYXJyYXkuIFRvIGNyZWF0ZSBhIG11bHRpY2hhbm5lbCBBdWRpb0J1ZmZlcixcblx0XHQgKiAgcGFzcyBpbiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkuXG5cdFx0ICogIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbCB0aGUgYXVkaW8gYnVmZmVyXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSBBIFRvbmUuQnVmZmVyIGNyZWF0ZWQgZnJvbSB0aGUgYXJyYXlcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSkge1xuXHQgICAgICAgIHJldHVybiBuZXcgVG9uZS5CdWZmZXIoKS5mcm9tQXJyYXkoYXJyYXkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENyZWF0ZXMgYSBUb25lLkJ1ZmZlciBmcm9tIGEgVVJMLCByZXR1cm5zIGEgcHJvbWlzZVxuXHRcdCAqIHdoaWNoIHJlc29sdmVzIHRvIGEgVG9uZS5CdWZmZXJcblx0XHQgKiBAcGFyYW0gIHtTdHJpbmd9IHVybCBUaGUgdXJsIHRvIGxvYWQuXG5cdFx0ICogQHJldHVybiB7UHJvbWlzZTxUb25lLkJ1ZmZlcj59ICAgICBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gYSBUb25lLkJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuZnJvbVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcblx0ICAgICAgICB2YXIgYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKCk7XG5cdCAgICAgICAgcmV0dXJuIGJ1ZmZlci5sb2FkKHVybCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVtb3ZlIGFuIHhociByZXF1ZXN0IGZyb20gdGhlIGRvd25sb2FkIHF1ZXVlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZSA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUuaW5kZXhPZihyZXF1ZXN0KTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBMb2FkcyBhIHVybCB1c2luZyBYTUxIdHRwUmVxdWVzdC5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHVybFxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBvbmxvYWRcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gb25lcnJvclxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBvbnByb2dyZXNzXG5cdFx0ICogIEByZXR1cm4ge1hNTEh0dHBSZXF1ZXN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIubG9hZCA9IGZ1bmN0aW9uICh1cmwsIG9ubG9hZCwgb25lcnJvcikge1xuXHQgICAgICAgIC8vZGVmYXVsdFxuXHQgICAgICAgIG9ubG9hZCA9IFRvbmUuZGVmYXVsdEFyZyhvbmxvYWQsIFRvbmUubm9PcCk7XG5cdCAgICAgICAgLy8gdGVzdCBpZiB0aGUgdXJsIGNvbnRhaW5zIG11bHRpcGxlIGV4dGVuc2lvbnNcblx0ICAgICAgICB2YXIgbWF0Y2hlcyA9IHVybC5tYXRjaCgvXFxbKC4rXFx8PykrXFxdJC8pO1xuXHQgICAgICAgIGlmIChtYXRjaGVzKSB7XG5cdCAgICAgICAgICAgIHZhciBleHRlbnNpb25zID0gbWF0Y2hlc1sxXS5zcGxpdCgnfCcpO1xuXHQgICAgICAgICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uc1swXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRlbnNpb25zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlKGV4dGVuc2lvbnNbaV0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uc1tpXTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShtYXRjaGVzWzBdLCBleHRlbnNpb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGUpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5lbWl0KCdlcnJvcicsIGUpO1xuXHQgICAgICAgICAgICBpZiAob25lcnJvcikge1xuXHQgICAgICAgICAgICAgICAgb25lcnJvcihlKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gb25Qcm9ncmVzcygpIHtcblx0ICAgICAgICAgICAgLy9jYWxjdWxhdGUgdGhlIHByb2dyZXNzXG5cdCAgICAgICAgICAgIHZhciB0b3RhbFByb2dyZXNzID0gMDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdG90YWxQcm9ncmVzcyArPSBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZVtpXS5wcm9ncmVzcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5lbWl0KCdwcm9ncmVzcycsIHRvdGFsUHJvZ3Jlc3MgLyBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5sZW5ndGgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHQgICAgICAgIHJlcXVlc3Qub3BlbignR0VUJywgVG9uZS5CdWZmZXIuYmFzZVVybCArIHVybCwgdHJ1ZSk7XG5cdCAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xuXHQgICAgICAgIC8vc3RhcnQgb3V0IGFzIDBcblx0ICAgICAgICByZXF1ZXN0LnByb2dyZXNzID0gMDtcblx0ICAgICAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5wdXNoKHJlcXVlc3QpO1xuXHQgICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcblx0ICAgICAgICAgICAgICAgIFRvbmUuY29udGV4dC5kZWNvZGVBdWRpb0RhdGEocmVxdWVzdC5yZXNwb25zZSkudGhlbihmdW5jdGlvbiAoYnVmZikge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucHJvZ3Jlc3MgPSAxO1xuXHQgICAgICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3MoKTtcblx0ICAgICAgICAgICAgICAgICAgICBvbmxvYWQoYnVmZik7XG5cdCAgICAgICAgICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy9lbWl0IHRoZSBldmVudCBhdCB0aGUgZW5kXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIFRvbmUuQnVmZmVyLmVtaXQoJ2xvYWQnKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoJ1RvbmUuQnVmZmVyOiBjb3VsZCBub3QgZGVjb2RlIGF1ZGlvIGRhdGE6ICcgKyB1cmwpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBvbkVycm9yKCdUb25lLkJ1ZmZlcjogY291bGQgbm90IGxvY2F0ZSBmaWxlOiAnICsgdXJsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcblx0ICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG5cdCAgICAgICAgICAgICAgICAvL29ubHkgZ28gdG8gOTUlLCB0aGUgbGFzdCA1JSBpcyB3aGVuIHRoZSBhdWRpbyBpcyBkZWNvZGVkXG5cdCAgICAgICAgICAgICAgICByZXF1ZXN0LnByb2dyZXNzID0gZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwgKiAwLjk1O1xuXHQgICAgICAgICAgICAgICAgb25Qcm9ncmVzcygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmVxdWVzdC5zZW5kKCk7XG5cdCAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgYWxsIG9mIHRoZSBkb3dubG9hZHMgaW4gcHJvZ3Jlc3Ncblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmNhbmNlbERvd25sb2FkcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKHJlcXVlc3QpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuQnVmZmVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDaGVja3MgYSB1cmwncyBleHRlbnNpb24gdG8gc2VlIGlmIHRoZSBjdXJyZW50IGJyb3dzZXIgY2FuIHBsYXkgdGhhdCBmaWxlIHR5cGUuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIHVybC9leHRlbnNpb24gdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJuIHtCb29sZWFufSBJZiB0aGUgZmlsZSBleHRlbnNpb24gY2FuIGJlIHBsYXllZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlKFwid2F2XCIpOyAvL3JldHVybnMgdHJ1ZVxuXHRcdCAqIFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZShcInBhdGgvdG8vZmlsZS53YXZcIik7IC8vcmV0dXJucyB0cnVlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5zdXBwb3J0c1R5cGUgPSBmdW5jdGlvbiAodXJsKSB7XG5cdCAgICAgICAgdmFyIGV4dGVuc2lvbiA9IHVybC5zcGxpdCgnLicpO1xuXHQgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbltleHRlbnNpb24ubGVuZ3RoIC0gMV07XG5cdCAgICAgICAgdmFyIHJlc3BvbnNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXVkaW8nKS5jYW5QbGF5VHlwZSgnYXVkaW8vJyArIGV4dGVuc2lvbik7XG5cdCAgICAgICAgcmV0dXJuIHJlc3BvbnNlICE9PSAnJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyBhIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2hlbiBhbGwgb2YgdGhlIGJ1ZmZlcnMgaGF2ZSBsb2FkZWRcblx0XHQgKiAgQHJldHVybiB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUubG9hZGVkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvbmxvYWQsIG9uZXJyb3I7XG5cdCAgICAgICAgZnVuY3Rpb24gcmVtb3ZlRXZlbnRzKCkge1xuXHQgICAgICAgICAgICAvL3JlbW92ZSB0aGUgZXZlbnRzIHdoZW4gaXQncyByZXNvbHZlZFxuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vZmYoJ2xvYWQnLCBvbmxvYWQpO1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vZmYoJ2Vycm9yJywgb25lcnJvcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoc3VjY2VzcywgZmFpbCkge1xuXHQgICAgICAgICAgICBvbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICBzdWNjZXNzKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIG9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICBmYWlsKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIC8vYWRkIHRoZSBldmVudCBsaXN0ZW5lcnNcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub24oJ2xvYWQnLCBvbmxvYWQpO1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vbignZXJyb3InLCBvbmVycm9yKTtcblx0ICAgICAgICB9KS50aGVuKHJlbW92ZUV2ZW50cykuY2F0Y2goZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgcmVtb3ZlRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CdWZmZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBmaXJlLWFuZC1mb3JnZXQgT3NjaWxsYXRvck5vZGUuIEFkZHMgdGhlXG5cdFx0ICogICAgIGFiaWxpdHkgdG8gcmVzY2hlZHVsZSB0aGUgc3RvcCBtZXRob2QuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtICB7QXVkaW9CdWZmZXJ8VG9uZS5CdWZmZXJ9ICBidWZmZXIgICBUaGUgYnVmZmVyIHRvIHBsYXlcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBvbmxvYWQgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLk9zY2lsbGF0b3JOb2RlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlXG5cdFx0XHQgKiAgYnVmZmVyIHNvdXJjZSBpcyBkb25lIHBsYXlpbmcuXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG9wdGlvbnMub25lbmRlZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvciBzdGFydCB0aW1lXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yIHN0b3AgdGltZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIG5vZGUgd2hpY2ggZW52ZWxvcGVzIHRoZSBPc2NpbGxhdG9yTm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlICB7T3NjaWxsYXRvck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSB0aGlzLmNvbnRleHQuY3JlYXRlT3NjaWxsYXRvcigpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY29ubmVjdCh0aGlzLl9nYWluTm9kZSk7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LnZhbHVlID0gb3B0aW9ucy5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9vc2NpbGxhdG9yLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS52YWx1ZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB0aGF0IHRoZSBidWZmZXIgcmFtcHMgdG9cblx0XHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IDE7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Pc2NpbGxhdG9yTm9kZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ29uZW5kZWQnOiBUb25lLm5vT3Bcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIG9zY2lsbGF0b3IsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yTm9kZSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHBsYXliYWNrIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byB0ZXN0IHRoZSBzdGF0ZSBhdFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5TdGF0ZX0gIFRoZSBwbGF5YmFjayBzdGF0ZS4gXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5nZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xICYmIHRpbWUgPj0gdGhpcy5fc3RhcnRUaW1lICYmICh0aGlzLl9zdG9wVGltZSA9PT0gLTEgfHwgdGltZSA8PSB0aGlzLl9zdG9wVGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RhcnRlZDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0ICAgICAqIFN0YXJ0IHRoZSBvc2NpbGxhdG9yIG5vZGUgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAqIEBwYXJhbSAge1RpbWU9fSB0aW1lIFdoZW4gdG8gc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAqIEByZXR1cm4ge09zY2lsbGF0b3JOb2RlfSAgICAgIHRoaXNcblx0ICAgICAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgPT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRoaXMuX3N0YXJ0VGltZSk7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgbm93KTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCB0aGlzLl9zdGFydFRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGNhbGwgT3NjaWxsYXRvck5vZGUuc3RhcnQgbW9yZSB0aGFuIG9uY2UnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdCAgICAgKiBTZXRzIGFuIGFyYml0cmFyeSBjdXN0b20gcGVyaW9kaWMgd2F2ZWZvcm0gZ2l2ZW4gYSBQZXJpb2RpY1dhdmUuXG5cdCAgICAgKiBAcGFyYW0gIHtQZXJpb2RpY1dhdmV9IHBlcmlvZGljV2F2ZSBQZXJpb2RpY1dhdmUgc2hvdWxkIGJlIGNyZWF0ZWQgd2l0aCBjb250ZXh0LmNyZWF0ZVBlcmlvZGljV2F2ZVxuXHQgICAgICogQHJldHVybiB7T3NjaWxsYXRvck5vZGV9IHRoaXNcblx0ICAgICAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0UGVyaW9kaWNXYXZlID0gZnVuY3Rpb24gKHBlcmlvZGljV2F2ZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc2V0UGVyaW9kaWNXYXZlKHBlcmlvZGljV2F2ZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdCAgICAgKiBTdG9wIHRoZSBvc2NpbGxhdG9yIG5vZGUgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAqIEBwYXJhbSAge1RpbWU9fSB0aW1lIFdoZW4gdG8gc3RvcCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICogQHJldHVybiB7T3NjaWxsYXRvck5vZGV9ICAgICAgdGhpc1xuXHQgICAgICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL2NhbmNlbCB0aGUgcHJldmlvdXMgc3RvcFxuXHQgICAgICAgIHRoaXMuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIC8vcmVzY2hlZHVsZSBpdFxuXHQgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aGlzLl9zdG9wVGltZSk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0ID0gdGhpcy5jb250ZXh0LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGhpcy5ub3coKSk7XG5cdCAgICAgICAgICAgIHRoaXMub25lbmRlZCgpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5fc3RvcFRpbWUgLSB0aGlzLm5vdygpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGEgc2NoZWR1bGVkIHN0b3AgZXZlbnRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuT3NjaWxsYXRvck5vZGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5jYW5jZWxTdG9wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIHRoZSBzdG9wIGVudmVsb3BlXG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRoaXMuX3N0YXJ0VGltZSArIHRoaXMuc2FtcGxlVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgTWF0aC5tYXgodGhpcy5ub3coKSwgdGhpcy5fc3RhcnRUaW1lKSk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gLTE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvc2NpbGxhdG9yIHR5cGUuIEVpdGhlciAnc2luZScsICdzYXd0b290aCcsICdzcXVhcmUnLCBvciAndHJpYW5nbGUnXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvck5vZGUjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuT3NjaWxsYXRvck5vZGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9zY2lsbGF0b3JOb2RlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Pc2NpbGxhdG9yIHN1cHBvcnRzIGEgbnVtYmVyIG9mIGZlYXR1cmVzIGluY2x1ZGluZ1xuXHRcdCAqICAgICAgICAgcGhhc2Ugcm90YXRpb24sIG11bHRpcGxlIG9zY2lsbGF0b3IgdHlwZXMgKHNlZSBUb25lLk9zY2lsbGF0b3IudHlwZSksXG5cdFx0ICogICAgICAgICBhbmQgVHJhbnNwb3J0IHN5bmNpbmcgKHNlZSBUb25lLk9zY2lsbGF0b3Iuc3luY0ZyZXF1ZW5jeSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtmcmVxdWVuY3ldIFN0YXJ0aW5nIGZyZXF1ZW5jeVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gW3R5cGVdIFRoZSBvc2NpbGxhdG9yIHR5cGUuIFJlYWQgbW9yZSBhYm91dCB0eXBlIGJlbG93LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbWFrZSBhbmQgc3RhcnQgYSA0NDBoeiBzaW5lIHRvbmVcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcig0NDAsIFwic2luZVwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtYWluIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7T3NjaWxsYXRvck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcGVyaW9kaWMgd2F2ZVxuXHRcdFx0ICogIEB0eXBlIHtQZXJpb2RpY1dhdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3dhdmUgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYXJ0aWFscyBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucy5wYXJ0aWFscywgWzFdKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBiZXR3ZWVuIDAgLSAzNjBcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7c3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gbnVsbDtcblx0ICAgICAgICAvL3NldHVwXG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLl9waGFzZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ3BhcnRpYWxzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIE9zY2lsbGF0b3IgdHlwZXNcblx0XHQgKiAgQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlID0ge1xuXHQgICAgICAgIFNpbmU6ICdzaW5lJyxcblx0ICAgICAgICBUcmlhbmdsZTogJ3RyaWFuZ2xlJyxcblx0ICAgICAgICBTYXd0b290aDogJ3Nhd3Rvb3RoJyxcblx0ICAgICAgICBTcXVhcmU6ICdzcXVhcmUnLFxuXHQgICAgICAgIEN1c3RvbTogJ2N1c3RvbSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vbmV3IG9zY2lsbGF0b3Igd2l0aCBwcmV2aW91cyB2YWx1ZXNcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvck5vZGUoKTtcblx0ICAgICAgICBpZiAodGhpcy5fd2F2ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNldFBlcmlvZGljV2F2ZSh0aGlzLl93YXZlKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGNvbnRyb2wgc2lnbmFsIHRvIHRoZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSAmIGRldHVuZVxuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXN0YXJ0IHRoZSBvc2NpbGxhdG9yLiBEb2VzIG5vdCBzdG9wIHRoZSBvc2NpbGxhdG9yLCBidXQgaW5zdGVhZFxuXHRcdCAqIGp1c3QgY2FuY2VscyBhbnkgc2NoZWR1bGVkICdzdG9wJyBmcm9tIGJlaW5nIGludm9rZWQuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLk9zY2lsbGF0b3J9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGhpcy50b1NlY29uZHModGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTeW5jIHRoZSBzaWduYWwgdG8gdGhlIFRyYW5zcG9ydCdzIGJwbS4gQW55IGNoYW5nZXMgdG8gdGhlIHRyYW5zcG9ydHMgYnBtLFxuXHRcdCAqICB3aWxsIGFsc28gYWZmZWN0IHRoZSBvc2NpbGxhdG9ycyBmcmVxdWVuY3kuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgPSAxMjA7XG5cdFx0ICogb3NjLmZyZXF1ZW5jeS52YWx1ZSA9IDQ0MDtcblx0XHQgKiAvL3RoZSByYXRpb24gYmV0d2VlbiB0aGUgYnBtIGFuZCB0aGUgZnJlcXVlbmN5IHdpbGwgYmUgbWFpbnRhaW5lZFxuXHRcdCAqIG9zYy5zeW5jRnJlcXVlbmN5KCk7XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gMjQwO1xuXHRcdCAqIC8vIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IgaXMgZG91YmxlZCB0byA4ODBcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuc3luY0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVW5zeW5jIHRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5IGZyb20gdGhlIFRyYW5zcG9ydC5cblx0XHQgKiAgU2VlIFRvbmUuT3NjaWxsYXRvci5zeW5jRnJlcXVlbmN5XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUudW5zeW5jRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LnVuc3luY1NpZ25hbCh0aGlzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3I6IGVpdGhlciBzaW5lLCBzcXVhcmUsIHRyaWFuZ2xlLCBvciBzYXd0b290aC4gQWxzbyBjYXBhYmxlIG9mXG5cdFx0ICogc2V0dGluZyB0aGUgZmlyc3QgeCBudW1iZXIgb2YgcGFydGlhbHMgb2YgdGhlIG9zY2lsbGF0b3IuIEZvciBleGFtcGxlOiBcInNpbmU0XCIgd291bGRcblx0XHQgKiBzZXQgYmUgdGhlIGZpcnN0IDQgcGFydGlhbHMgb2YgdGhlIHNpbmUgd2F2ZSBhbmQgXCJ0cmlhbmdsZThcIiB3b3VsZCBzZXQgdGhlIGZpcnN0XG5cdFx0ICogOCBwYXJ0aWFscyBvZiB0aGUgdHJpYW5nbGUgd2F2ZS5cblx0XHQgKiA8YnI+PGJyPlxuXHRcdCAqIFVzZXMgUGVyaW9kaWNXYXZlIGludGVybmFsbHkgZXZlbiBmb3IgbmF0aXZlIHR5cGVzIHNvIHRoYXQgaXQgY2FuIHNldCB0aGUgcGhhc2UuXG5cdFx0ICogUGVyaW9kaWNXYXZlIGVxdWF0aW9ucyBhcmUgZnJvbSB0aGVcblx0XHQgKiBbV2Via2l0IFdlYiBBdWRpbyBpbXBsZW1lbnRhdGlvbl0oaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9jb2Rlc2VhcmNoI2Nocm9taXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvU291cmNlL21vZHVsZXMvd2ViYXVkaW8vUGVyaW9kaWNXYXZlLmNwcCZzcT1wYWNrYWdlOmNocm9taXVtKS5cblx0XHQgKlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL3NldCBpdCB0byBhIHNxdWFyZSB3YXZlXG5cdFx0ICogb3NjLnR5cGUgPSBcInNxdWFyZVwiO1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdGhlIGZpcnN0IDYgcGFydGlhbHMgb2YgYSBzYXd0b290aCB3YXZlXG5cdFx0ICogb3NjLnR5cGUgPSBcInNhd3Rvb3RoNlwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdmFyIGlzQmFzaWNUeXBlID0gW1xuXHQgICAgICAgICAgICAgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2luZSxcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNxdWFyZSxcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlRyaWFuZ2xlLFxuXHQgICAgICAgICAgICAgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2F3dG9vdGhcblx0ICAgICAgICAgICAgXS5pbmNsdWRlcyh0eXBlKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3BoYXNlID09PSAwICYmIGlzQmFzaWNUeXBlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93YXZlID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIC8vanVzdCBnbyB3aXRoIHRoZSBiYXNpYyBhcHByb2FjaFxuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPT09IHR5cGU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29lZnMgPSB0aGlzLl9nZXRSZWFsSW1hZ2luYXJ5KHR5cGUsIHRoaXMuX3BoYXNlKTtcblx0ICAgICAgICAgICAgICAgIHZhciBwZXJpb2RpY1dhdmUgPSB0aGlzLmNvbnRleHQuY3JlYXRlUGVyaW9kaWNXYXZlKGNvZWZzWzBdLCBjb2Vmc1sxXSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93YXZlID0gcGVyaW9kaWNXYXZlO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNldFBlcmlvZGljV2F2ZSh0aGlzLl93YXZlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSByZWFsIGFuZCBpbWFnaW5hcnkgY29tcG9uZW50cyBiYXNlZFxuXHRcdCAqICBvbiB0aGUgb3NjaWxsYXRvciB0eXBlLlxuXHRcdCAqICBAcmV0dXJucyB7QXJyYXl9IFtyZWFsLCBpbWFnaW5hcnldXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9nZXRSZWFsSW1hZ2luYXJ5ID0gZnVuY3Rpb24gKHR5cGUsIHBoYXNlKSB7XG5cdCAgICAgICAgdmFyIGZmdFNpemUgPSA0MDk2O1xuXHQgICAgICAgIHZhciBwZXJpb2RpY1dhdmVTaXplID0gZmZ0U2l6ZSAvIDI7XG5cdCAgICAgICAgdmFyIHJlYWwgPSBuZXcgRmxvYXQzMkFycmF5KHBlcmlvZGljV2F2ZVNpemUpO1xuXHQgICAgICAgIHZhciBpbWFnID0gbmV3IEZsb2F0MzJBcnJheShwZXJpb2RpY1dhdmVTaXplKTtcblx0ICAgICAgICB2YXIgcGFydGlhbENvdW50ID0gMTtcblx0ICAgICAgICBpZiAodHlwZSA9PT0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tKSB7XG5cdCAgICAgICAgICAgIHBhcnRpYWxDb3VudCA9IHRoaXMuX3BhcnRpYWxzLmxlbmd0aCArIDE7XG5cdCAgICAgICAgICAgIHBlcmlvZGljV2F2ZVNpemUgPSBwYXJ0aWFsQ291bnQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHBhcnRpYWwgPSAvXihzaW5lfHRyaWFuZ2xlfHNxdWFyZXxzYXd0b290aCkoXFxkKykkLy5leGVjKHR5cGUpO1xuXHQgICAgICAgICAgICBpZiAocGFydGlhbCkge1xuXHQgICAgICAgICAgICAgICAgcGFydGlhbENvdW50ID0gcGFyc2VJbnQocGFydGlhbFsyXSkgKyAxO1xuXHQgICAgICAgICAgICAgICAgdHlwZSA9IHBhcnRpYWxbMV07XG5cdCAgICAgICAgICAgICAgICBwYXJ0aWFsQ291bnQgPSBNYXRoLm1heChwYXJ0aWFsQ291bnQsIDIpO1xuXHQgICAgICAgICAgICAgICAgcGVyaW9kaWNXYXZlU2l6ZSA9IHBhcnRpYWxDb3VudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBmb3IgKHZhciBuID0gMTsgbiA8IHBlcmlvZGljV2F2ZVNpemU7ICsrbikge1xuXHQgICAgICAgICAgICB2YXIgcGlGYWN0b3IgPSAyIC8gKG4gKiBNYXRoLlBJKTtcblx0ICAgICAgICAgICAgdmFyIGI7XG5cdCAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNpbmU6XG5cdCAgICAgICAgICAgICAgICBiID0gbiA8PSBwYXJ0aWFsQ291bnQgPyAxIDogMDtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNxdWFyZTpcblx0ICAgICAgICAgICAgICAgIGIgPSBuICYgMSA/IDIgKiBwaUZhY3RvciA6IDA7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5TYXd0b290aDpcblx0ICAgICAgICAgICAgICAgIGIgPSBwaUZhY3RvciAqIChuICYgMSA/IDEgOiAtMSk7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5UcmlhbmdsZTpcblx0ICAgICAgICAgICAgICAgIGlmIChuICYgMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGIgPSAyICogKHBpRmFjdG9yICogcGlGYWN0b3IpICogKG4gLSAxID4+IDEgJiAxID8gLTEgOiAxKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYiA9IDA7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b206XG5cdCAgICAgICAgICAgICAgICBiID0gdGhpcy5fcGFydGlhbHNbbiAtIDFdO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLk9zY2lsbGF0b3I6IGludmFsaWQgdHlwZTogJyArIHR5cGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChiICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZWFsW25dID0gLWIgKiBNYXRoLnNpbihwaGFzZSAqIG4pO1xuXHQgICAgICAgICAgICAgICAgaW1hZ1tuXSA9IGIgKiBNYXRoLmNvcyhwaGFzZSAqIG4pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmVhbFtuXSA9IDA7XG5cdCAgICAgICAgICAgICAgICBpbWFnW25dID0gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gW1xuXHQgICAgICAgICAgICByZWFsLFxuXHQgICAgICAgICAgICBpbWFnXG5cdCAgICAgICAgXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29tcHV0ZSB0aGUgaW52ZXJzZSBGRlQgZm9yIGEgZ2l2ZW4gcGhhc2UuXG5cdFx0ICogIEBwYXJhbSAge0Zsb2F0MzJBcnJheX0gIHJlYWxcblx0XHQgKiAgQHBhcmFtICB7RmxvYXQzMkFycmF5fSAgaW1hZ1xuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIHBoYXNlXG5cdFx0ICogIEByZXR1cm4gIHtBdWRpb1JhbmdlfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5faW52ZXJzZUZGVCA9IGZ1bmN0aW9uIChyZWFsLCBpbWFnLCBwaGFzZSkge1xuXHQgICAgICAgIHZhciBzdW0gPSAwO1xuXHQgICAgICAgIHZhciBsZW4gPSByZWFsLmxlbmd0aDtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIHN1bSArPSByZWFsW2ldICogTWF0aC5jb3MoaSAqIHBoYXNlKSArIGltYWdbaV0gKiBNYXRoLnNpbihpICogcGhhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gc3VtO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcmV0dXJuICB7QXVkaW9SYW5nZX1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX2dldEluaXRpYWxWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY29lZnMgPSB0aGlzLl9nZXRSZWFsSW1hZ2luYXJ5KHRoaXMuX3R5cGUsIDApO1xuXHQgICAgICAgIHZhciByZWFsID0gY29lZnNbMF07XG5cdCAgICAgICAgdmFyIGltYWcgPSBjb2Vmc1sxXTtcblx0ICAgICAgICB2YXIgbWF4VmFsdWUgPSAwO1xuXHQgICAgICAgIHZhciB0d29QaSA9IE1hdGguUEkgKiAyO1xuXHQgICAgICAgIC8vY2hlY2sgZm9yIHBlYWtzIGluIDggcGxhY2VzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgbWF4VmFsdWUgPSBNYXRoLm1heCh0aGlzLl9pbnZlcnNlRkZUKHJlYWwsIGltYWcsIGkgLyA4ICogdHdvUGkpLCBtYXhWYWx1ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAtdGhpcy5faW52ZXJzZUZGVChyZWFsLCBpbWFnLCB0aGlzLl9waGFzZSkgLyBtYXhWYWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgIT09IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnRpYWxzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgICAgICB0aGlzLnR5cGUgPSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b207XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGhhc2UgPSAxODA7IC8vZmxpcHMgdGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGhhc2UgKiAoMTgwIC8gTWF0aC5QSSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9waGFzZSA9IHBoYXNlICogTWF0aC5QSSAvIDE4MDtcblx0ICAgICAgICAgICAgLy9yZXNldCB0aGUgdHlwZVxuXHQgICAgICAgICAgICB0aGlzLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3QuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl93YXZlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEF1ZGlvVG9HYWluIGNvbnZlcnRzIGFuIGlucHV0IGluIEF1ZGlvUmFuZ2UgWy0xLDFdIHRvIE5vcm1hbFJhbmdlIFswLDFdLiBcblx0XHQgKiAgICAgICAgIFNlZSBUb25lLkdhaW5Ub0F1ZGlvLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgYTJnID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ub0dhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ub3JtID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAoeCkge1xuXHQgICAgICAgICAgICByZXR1cm4gKHggKyAxKSAvIDI7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdWRpb1RvR2FpbiwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb1RvR2Fpbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb1RvR2Fpbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ub3JtLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ub3JtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdWRpb1RvR2Fpbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlplcm8gb3V0cHV0cyAwJ3MgYXQgYXVkaW8tcmF0ZS4gVGhlIHJlYXNvbiB0aGlzIGhhcyB0byBiZVxuXHRcdCAqICAgICAgICAgaXQncyBvd24gY2xhc3MgaXMgdGhhdCBtYW55IGJyb3dzZXJzIG9wdGltaXplIG91dCBUb25lLlNpZ25hbFxuXHRcdCAqICAgICAgICAgd2l0aCBhIHZhbHVlIG9mIDAgYW5kIHdpbGwgbm90IHByb2Nlc3Mgbm9kZXMgZnVydGhlciBkb3duIHRoZSBncmFwaC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuWmVybyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmdldENvbnN0YW50KDApLmNvbm5lY3QodGhpcy5fZ2Fpbik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5aZXJvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlplcm99ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlplcm8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuWmVybztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBMRk8gc3RhbmRzIGZvciBsb3cgZnJlcXVlbmN5IG9zY2lsbGF0b3IuIFRvbmUuTEZPIHByb2R1Y2VzIGFuIG91dHB1dCBzaWduYWxcblx0XHQgKiAgICAgICAgICB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gQXVkaW9QYXJhbSBvciBUb25lLlNpZ25hbFxuXHRcdCAqICAgICAgICAgIGluIG9yZGVyIHRvIG1vZHVsYXRlIHRoYXQgcGFyYW1ldGVyIHdpdGggYW4gb3NjaWxsYXRvci4gVGhlIExGTyBjYW5cblx0XHQgKiAgICAgICAgICBhbHNvIGJlIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0IHRvIHN0YXJ0L3N0b3AgYW5kIGNoYW5nZSB3aGVuIHRoZSB0ZW1wbyBjaGFuZ2VzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRpb24uIFR5cGljYWxseSwgTEZPcyB3aWxsIGJlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZyZXF1ZW5jeSByYW5nZSBvZiAwLjEgdG8gMTAgaGVydHouXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gbWluIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZSBvZiB0aGUgTEZPLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IG1heCBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgTEZPLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBsZm8gPSBuZXcgVG9uZS5MRk8oXCI0blwiLCA0MDAsIDQwMDApO1xuXHRcdCAqIGxmby5jb25uZWN0KGZpbHRlci5mcmVxdWVuY3kpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ21pbicsXG5cdCAgICAgICAgICAgICdtYXgnXG5cdCAgICAgICAgXSwgVG9uZS5MRk8pO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICd0eXBlJzogb3B0aW9ucy50eXBlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbydzIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbXBsaXR1ZGUgb2YgdGhlIExGTywgd2hpY2ggY29udHJvbHMgdGhlIG91dHB1dCByYW5nZSBiZXR3ZWVuXG5cdFx0XHQgKiB0aGUgbWluIGFuZCBtYXggb3V0cHV0LiBGb3IgZXhhbXBsZSBpZiB0aGUgbWluIGlzIC0xMCBhbmQgdGhlIG1heFxuXHRcdFx0ICogaXMgMTAsIHNldHRpbmcgdGhlIGFtcGxpdHVkZSB0byAwLjUgd291bGQgbWFrZSB0aGUgTEZPIG1vZHVsYXRlXG5cdFx0XHQgKiBiZXR3ZWVuIC01IGFuZCA1LlxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlID0gdGhpcy5fb3NjaWxsYXRvci52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUudW5pdHMgPSBUb25lLlR5cGUuTm9ybWFsUmFuZ2U7XG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUudmFsdWUgPSBvcHRpb25zLmFtcGxpdHVkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lnbmFsIHdoaWNoIGlzIG91dHB1dCB3aGVuIHRoZSBMRk8gaXMgc3RvcHBlZFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMCwgVG9uZS5UeXBlLkF1ZGlvUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEp1c3Qgb3V0cHV0cyB6ZXJvcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5aZXJvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl96ZXJvcyA9IG5ldyBUb25lLlplcm8oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgdGhhdCB0aGUgTEZPIG91dHB1dHMgd2hlbiBpdCdzIHN0b3BwZWRcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFZhbHVlID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BdWRpb1RvR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYTJnID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGVyID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TY2FsZShvcHRpb25zLm1pbiwgb3B0aW9ucy5tYXgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB1bml0cyBvZiB0aGUgTEZPICh1c2VkIGZvciBjb252ZXJ0aW5nKVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlR5cGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3VuaXRzID0gVG9uZS5UeXBlLkRlZmF1bHQ7XG5cdCAgICAgICAgdGhpcy51bml0cyA9IG9wdGlvbnMudW5pdHM7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jaGFpbih0aGlzLl9hMmcsIHRoaXMuX3NjYWxlcik7XG5cdCAgICAgICAgdGhpcy5femVyb3MuY29ubmVjdCh0aGlzLl9hMmcpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuY29ubmVjdCh0aGlzLl9hMmcpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5MRk8sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICpcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6ICc0bicsXG5cdCAgICAgICAgJ2FtcGxpdHVkZSc6IDEsXG5cdCAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlZmF1bHRcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgTEZPIHdpbGwgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnNldFZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgTEZPIHdpbGwgc3RvcFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5zZXRWYWx1ZUF0VGltZSh0aGlzLl9zdG9wcGVkVmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3luYyB0aGUgc3RhcnQvc3RvcC9wYXVzZSB0byB0aGUgdHJhbnNwb3J0XG5cdFx0ICogIGFuZCB0aGUgZnJlcXVlbmN5IHRvIHRoZSBicG0gb2YgdGhlIHRyYW5zcG9ydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgbGZvLmZyZXF1ZW5jeS52YWx1ZSA9IFwiOG5cIjtcblx0XHQgKiAgbGZvLnN5bmMoKS5zdGFydCgwKVxuXHRcdCAqICAvL3RoZSByYXRlIG9mIHRoZSBMRk8gd2lsbCBhbHdheXMgYmUgYW4gZWlnaHRoIG5vdGUsXG5cdFx0ICogIC8vZXZlbiBhcyB0aGUgdGVtcG8gY2hhbmdlc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zeW5jRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHVuc3luYyB0aGUgTEZPIGZyb20gdHJhbnNwb3J0IGNvbnRyb2xcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci51bnN5bmNGcmVxdWVuY3koKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaXVtdW0gb3V0cHV0IG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdG9Vbml0cyh0aGlzLl9zY2FsZXIubWluKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICBtaW4gPSB0aGlzLl9mcm9tVW5pdHMobWluKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGVyLm1pbiA9IG1pbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIG91dHB1dCBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvVW5pdHModGhpcy5fc2NhbGVyLm1heCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgbWF4ID0gdGhpcy5fZnJvbVVuaXRzKG1heCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlci5tYXggPSBtYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvcjogc2luZSwgc3F1YXJlLCBzYXd0b290aCwgdHJpYW5nbGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BwZWRWYWx1ZSA9IHRoaXMuX29zY2lsbGF0b3IuX2dldEluaXRpYWxWYWx1ZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnZhbHVlID0gdGhpcy5fc3RvcHBlZFZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BwZWRWYWx1ZSA9IHRoaXMuX29zY2lsbGF0b3IuX2dldEluaXRpYWxWYWx1ZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnZhbHVlID0gdGhpcy5fc3RvcHBlZFZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG91dHB1dCB1bml0cyBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7VG9uZS5UeXBlfVxuXHRcdCAqIEBuYW1lIHVuaXRzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAndW5pdHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl91bml0cztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB2YXIgY3VycmVudE1pbiA9IHRoaXMubWluO1xuXHQgICAgICAgICAgICB2YXIgY3VycmVudE1heCA9IHRoaXMubWF4O1xuXHQgICAgICAgICAgICAvL2NvbnZlcnQgdGhlIG1pbiBhbmQgdGhlIG1heFxuXHQgICAgICAgICAgICB0aGlzLl91bml0cyA9IHZhbDtcblx0ICAgICAgICAgICAgdGhpcy5taW4gPSBjdXJyZW50TWluO1xuXHQgICAgICAgICAgICB0aGlzLm1heCA9IGN1cnJlbnRNYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnN0YXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGUgTEZPIHRvIGFuIEF1ZGlvUGFyYW0sIEF1ZGlvTm9kZSwgb3IgVG9uZSBOb2RlLlxuXHRcdCAqICBUb25lLkxGTyB3aWxsIGF1dG9tYXRpY2FsbHkgY29udmVydCB0byB0aGUgZGVzdGluYXRpb24gdW5pdHMgb2YgdGhlXG5cdFx0ICogIHdpbGwgZ2V0IHRoZSB1bml0cyBmcm9tIHRoZSBjb25uZWN0ZWQgbm9kZS5cblx0XHQgKiAgQHBhcmFtICB7VG9uZSB8IEF1ZGlvUGFyYW0gfCBBdWRpb05vZGV9IG5vZGVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBvdXRwdXQgdG8gY29ubmVjdCBmcm9tXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBpbnB1dCB0byBjb25uZWN0IHRvXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmIChub2RlLmNvbnN0cnVjdG9yID09PSBUb25lLlNpZ25hbCB8fCBub2RlLmNvbnN0cnVjdG9yID09PSBUb25lLlBhcmFtKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udmVydCA9IG5vZGUuY29udmVydDtcblx0ICAgICAgICAgICAgdGhpcy51bml0cyA9IG5vZGUudW5pdHM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBwcml2YXRlIG1ldGhvZCBib3Jyb3dlZCBmcm9tIFBhcmFtIGNvbnZlcnRzXG5cdFx0ICogIHVuaXRzIGZyb20gdGhlaXIgZGVzdGluYXRpb24gdmFsdWVcblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuX2Zyb21Vbml0cyA9IFRvbmUuUGFyYW0ucHJvdG90eXBlLl9mcm9tVW5pdHM7XG5cdCAgICAvKipcblx0XHQgKiAgcHJpdmF0ZSBtZXRob2QgYm9ycm93ZWQgZnJvbSBQYXJhbSBjb252ZXJ0c1xuXHRcdCAqICB1bml0cyB0byB0aGVpciBkZXN0aW5hdGlvbiB2YWx1ZVxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5fdG9Vbml0cyA9IFRvbmUuUGFyYW0ucHJvdG90eXBlLl90b1VuaXRzO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc2Nvbm5lY3QgYW5kIGRpc3Bvc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5femVyb3MuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3plcm9zID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYTJnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hMmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmFtcGxpdHVkZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTEZPO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5MaW1pdGVyIHdpbGwgbGltaXQgdGhlIGxvdWRuZXNzIG9mIGFuIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgIEl0IGlzIGNvbXBvc2VkIG9mIGEgVG9uZS5Db21wcmVzc29yIHdpdGggYSBmYXN0IGF0dGFja1xuXHRcdCAqICAgICAgICAgYW5kIHJlbGVhc2UuIExpbWl0ZXJzIGFyZSBjb21tb25seSB1c2VkIHRvIHNhZmVndWFyZCBhZ2FpbnN0XG5cdFx0ICogICAgICAgICBzaWduYWwgY2xpcHBpbmcuIFVubGlrZSBhIGNvbXByZXNzb3IsIGxpbWl0ZXJzIGRvIG5vdCBwcm92aWRlXG5cdFx0ICogICAgICAgICBzbW9vdGggZ2FpbiByZWR1Y3Rpb24gYW5kIGFsbW9zdCBjb21wbGV0ZWx5IHByZXZlbnRcblx0XHQgKiAgICAgICAgIGFkZGl0aW9uYWwgZ2FpbiBhYm92ZSB0aGUgdGhyZXNob2xkLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB0aHJlc2hvbGQgVGhlIHRoZXNob2xkIGFib3ZlIHdoaWNoIHRoZSBsaW1pdGluZyBpcyBhcHBsaWVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgbGltaXRlciA9IG5ldyBUb25lLkxpbWl0ZXIoLTYpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaW1pdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndGhyZXNob2xkJ10sIFRvbmUuTGltaXRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29tcHJlc3NvclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Db21wcmVzc29yKHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCc6IG9wdGlvbnMudGhyZXNob2xkXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdGhyZXNob2xkIG9mIG9mIHRoZSBsaW1pdGVyXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbH1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gdGhpcy5fY29tcHJlc3Nvci50aHJlc2hvbGQ7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3RocmVzaG9sZCcpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTGltaXRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkxpbWl0ZXIuZGVmYXVsdHMgPSB7ICd0aHJlc2hvbGQnOiAtMTIgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTGltaXRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaW1pdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3Nvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3NvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3RocmVzaG9sZCcpO1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5MaW1pdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Mb3dwYXNzIGlzIGEgbG93cGFzcyBmZWVkYmFjayBjb21iIGZpbHRlci4gSXQgaXMgc2ltaWxhciB0b1xuXHRcdCAqICAgICAgICAgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIsIGJ1dCBpbmNsdWRlcyBhIGxvd3Bhc3MgZmlsdGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtkZWxheVRpbWVdIFRoZSBkZWxheSB0aW1lIG9mIHRoZSBjb21iIGZpbHRlclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gcmVzb25hbmNlIFRoZSByZXNvbmFuY2UgKGZlZWRiYWNrKSBvZiB0aGUgY29tYiBmaWx0ZXJcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3k9fSBkYW1wZW5pbmcgVGhlIGN1dG9mZiBvZiB0aGUgbG93cGFzcyBmaWx0ZXIgZGFtcGVucyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGFzIGl0IGlzIGZlZGJhY2suXG5cdFx0ICovXG5cdCAgICBUb25lLkxvd3Bhc3NDb21iRmlsdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0sIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheVRpbWUgb2YgdGhlIGNvbWIgZmlsdGVyLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZGVsYXkuZGVsYXlUaW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsb3dwYXNzIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlICB7QmlxdWFkRmlsdGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG93cGFzcyA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MuUS52YWx1ZSA9IC0zLjAxMDI5OTk1NjYzOTgxMjU7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcy50eXBlID0gJ2xvd3Bhc3MnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkYW1wZW5pbmcgY29udHJvbCBvZiB0aGUgZmVlZGJhY2tcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9sb3dwYXNzLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5kYW1wZW5pbmdcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmVlZGJhY2sgZ2FpblxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnJlc29uYW5jZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIG9mIHRoZSBkZWxheWVkIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSB0aGlzLl9mZWVkYmFjay5nYWluO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9kZWxheS5jaGFpbih0aGlzLl9sb3dwYXNzLCB0aGlzLl9mZWVkYmFjaywgdGhpcy5fZGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZycsXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxvd3Bhc3NDb21iRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjEsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDAuNSxcblx0ICAgICAgICAnZGFtcGVuaW5nJzogMzAwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTG93cGFzc0NvbWJGaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcy5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2suZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Mb3dwYXNzQ29tYkZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1lcmdlIGJyaW5ncyB0d28gc2lnbmFscyBpbnRvIHRoZSBsZWZ0IGFuZCByaWdodFxuXHRcdCAqICAgICAgICAgIGNoYW5uZWxzIG9mIGEgc2luZ2xlIHN0ZXJlbyBjaGFubmVsLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG1lcmdlID0gbmV3IFRvbmUuTWVyZ2UoKS50b01hc3RlcigpO1xuXHRcdCAqIC8vcm91dGluZyBhIHNpbmUgdG9uZSBpbiB0aGUgbGVmdCBjaGFubmVsXG5cdFx0ICogLy9hbmQgbm9pc2UgaW4gdGhlIHJpZ2h0IGNoYW5uZWxcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QobWVyZ2UubGVmdCk7XG5cdFx0ICogdmFyIG5vaXNlID0gbmV3IFRvbmUuTm9pc2UoKS5jb25uZWN0KG1lcmdlLnJpZ2h0KTtcblx0XHQgKiAvL3N0YXJ0aW5nIG91ciBvc2NpbGxhdG9yc1xuXHRcdCAqIG5vaXNlLnN0YXJ0KCk7XG5cdFx0ICogb3NjLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1lcmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsZWZ0IGlucHV0IGNoYW5uZWwuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubGVmdCA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJpZ2h0IGlucHV0IGNoYW5uZWwuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzFdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWVyZ2VyIG5vZGUgZm9yIHRoZSB0d28gY2hhbm5lbHNcblx0XHRcdCAqICBAdHlwZSB7Q2hhbm5lbE1lcmdlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlciA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNoYW5uZWxNZXJnZXIoMik7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMubGVmdC5jb25uZWN0KHRoaXMuX21lcmdlciwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5yaWdodC5jb25uZWN0KHRoaXMuX21lcmdlciwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmNoYW5uZWxDb3VudCA9IDE7XG5cdCAgICAgICAgdGhpcy5yaWdodC5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgIHRoaXMubGVmdC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICB0aGlzLnJpZ2h0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWVyZ2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVyZ2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVyZ2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmxlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yaWdodC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yaWdodCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2VyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1lcmdlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTWV0ZXIgZ2V0cyB0aGUgW1JNU10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUm9vdF9tZWFuX3NxdWFyZSlcblx0XHQgKiAgICAgICAgICBvZiBhbiBpbnB1dCBzaWduYWwgd2l0aCBzb21lIGF2ZXJhZ2luZyBhcHBsaWVkLiBJdCBjYW4gYWxzbyBnZXQgdGhlIHJhd1xuXHRcdCAqICAgICAgICAgIHZhbHVlIG9mIHRoZSBpbnB1dCBzaWduYWwuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHNtb290aGluZyBUaGUgYW1vdW50IG9mIHNtb290aGluZyBhcHBsaWVkIGJldHdlZW4gZnJhbWVzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtZXRlciA9IG5ldyBUb25lLk1ldGVyKCk7XG5cdFx0ICogdmFyIG1pYyA9IG5ldyBUb25lLlVzZXJNZWRpYSgpLm9wZW4oKTtcblx0XHQgKiAvL2Nvbm5lY3QgbWljIHRvIHRoZSBtZXRlclxuXHRcdCAqIG1pYy5jb25uZWN0KG1ldGVyKTtcblx0XHQgKiAvL3RoZSBjdXJyZW50IGxldmVsIG9mIHRoZSBtaWMgaW5wdXQgaW4gZGVjaWJlbHNcblx0XHQgKiB2YXIgbGV2ZWwgPSBtZXRlci5nZXRWYWx1ZSgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3Ntb290aGluZyddLCBUb25lLk1ldGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlIHdoaWNoIGNvbXB1dGVzIHRoZSBsZXZlbHMuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQW5hbHlzZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLl9hbmFseXNlciA9IG5ldyBUb25lLkFuYWx5c2VyKCd3YXZlZm9ybScsIDEwMjQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgY2FycnlvdmVyIGJldHdlZW4gdGhlIGN1cnJlbnQgYW5kIGxhc3QgZnJhbWUuXG5cdFx0XHQgKiAgT25seSBhcHBsaWVkIG1ldGVyIGZvciBcImxldmVsXCIgdHlwZS5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc21vb3RoaW5nID0gb3B0aW9ucy5zbW9vdGhpbmc7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NZXRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5kZWZhdWx0cyA9IHsgJ3Ntb290aGluZyc6IDAuOCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgY3VycmVudCBkZWNpYmVsIHZhbHVlIG9mIHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgQHJldHVybnMge0RlY2liZWxzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5wcm90b3R5cGUuZ2V0TGV2ZWwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIudHlwZSA9ICdmZnQnO1xuXHQgICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgICAgIHZhciBvZmZzZXQgPSAyODtcblx0ICAgICAgICAvLyBub3JtYWxpemVzIG1vc3Qgc2lnbmFsIGxldmVsc1xuXHQgICAgICAgIC8vIFRPRE86IGNvbXB1dGUgbG91ZG5lc3MgZnJvbSBGRlRcblx0ICAgICAgICByZXR1cm4gTWF0aC5tYXguYXBwbHkodGhpcywgdmFsdWVzKSArIG9mZnNldDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzaWduYWwgdmFsdWUgb2YgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIudHlwZSA9ICd3YXZlZm9ybSc7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgICAgICByZXR1cm4gdmFsdWVbMF07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQSB2YWx1ZSBmcm9tIDAgLT4gMSB3aGVyZSAwIHJlcHJlc2VudHMgbm8gdGltZSBhdmVyYWdpbmcgd2l0aCB0aGUgbGFzdCBhbmFseXNpcyBmcmFtZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5NZXRlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHNtb290aGluZ1xuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0ZXIucHJvdG90eXBlLCAnc21vb3RoaW5nJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc21vb3RoaW5nO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZyA9IHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWV0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1ldGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqXHRAY2xhc3MgIFRvbmUuU3BsaXQgc3BsaXRzIGFuIGluY29taW5nIHNpZ25hbCBpbnRvIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNwbGl0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0XHQgKiBzdGVyZW9TaWduYWwuY29ubmVjdChzcGxpdCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNwbGl0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDAsIDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtDaGFubmVsU3BsaXR0ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IHRoaXMuaW5wdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKDIpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNoYW5uZWxDb3VudCA9IDI7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTGVmdCBjaGFubmVsIG91dHB1dC5cblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLm91dHB1dFswXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBSaWdodCBjaGFubmVsIG91dHB1dC5cblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzFdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gdGhpcy5vdXRwdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNvbm5lY3QodGhpcy5sZWZ0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jb25uZWN0KHRoaXMucmlnaHQsIDEsIDApO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3BsaXQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3BsaXR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3BsaXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TcGxpdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1pZC9TaWRlIHByb2Nlc3Npbmcgc2VwYXJhdGVzIHRoZSB0aGUgJ21pZCcgc2lnbmFsXG5cdFx0ICogICAgICAgICAod2hpY2ggY29tZXMgb3V0IG9mIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBjaGFubmVsKVxuXHRcdCAqICAgICAgICAgYW5kIHRoZSAnc2lkZScgKHdoaWNoIG9ubHkgY29tZXMgb3V0IG9mIHRoZSB0aGUgc2lkZSBjaGFubmVscykuIDxicj48YnI+XG5cdFx0ICogICAgICAgICA8Y29kZT5cblx0XHQgKiAgICAgICAgIE1pZCA9IChMZWZ0K1JpZ2h0KS9zcXJ0KDIpOyAgIC8vIG9idGFpbiBtaWQtc2lnbmFsIGZyb20gbGVmdCBhbmQgcmlnaHQ8YnI+XG5cdFx0ICogICAgICAgICBTaWRlID0gKExlZnQtUmlnaHQpL3NxcnQoMik7ICAgLy8gb2J0YWluIHNpZGUtc2lnbmFsIGZyb20gbGVmdCBhbmQgcmlnaDxicj5cblx0XHQgKiAgICAgICAgIDwvY29kZT5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlU3BsaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMCwgMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3BsaXQgdGhlIGluY29taW5nIHNpZ25hbCBpbnRvIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgc2VuZC4gQ29ubmVjdCB0byBtaWQgcHJvY2Vzc2luZy4gQWxpYXMgZm9yXG5cdFx0XHQgKiAgPGNvZGU+b3V0cHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZEFkZCA9IG5ldyBUb25lLkFkZCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIF9taWRBZGQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gdGhpcy5vdXRwdXRbMF0gPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIG91dHB1dC4gQ29ubmVjdCB0byBzaWRlIHByb2Nlc3NpbmcuIEFsc28gT3V0cHV0IDFcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgX21pZEFkZCBieSBzcXJ0KDEvMilcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlID0gdGhpcy5vdXRwdXRbMV0gPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fbWlkQWRkLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX21pZEFkZCwgMSwgMSk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuY29ubmVjdCh0aGlzLl9zaWRlU3VidHJhY3QsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fc2lkZVN1YnRyYWN0LCAxLCAxKTtcblx0ICAgICAgICB0aGlzLl9taWRBZGQuY29ubmVjdCh0aGlzLm1pZCk7XG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0LmNvbm5lY3QodGhpcy5zaWRlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVTcGxpdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1pZFNpZGVTcGxpdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlU3BsaXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5zaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRBZGQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZEFkZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaWRlU3VidHJhY3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZVNwbGl0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTWlkL1NpZGUgcHJvY2Vzc2luZyBzZXBhcmF0ZXMgdGhlIHRoZSAnbWlkJyBzaWduYWxcblx0XHQgKiAgICAgICAgICh3aGljaCBjb21lcyBvdXQgb2YgYm90aCB0aGUgbGVmdCBhbmQgdGhlIHJpZ2h0IGNoYW5uZWwpXG5cdFx0ICogICAgICAgICBhbmQgdGhlICdzaWRlJyAod2hpY2ggb25seSBjb21lcyBvdXQgb2YgdGhlIHRoZSBzaWRlIGNoYW5uZWxzKS5cblx0XHQgKiAgICAgICAgIE1pZFNpZGVNZXJnZSBtZXJnZXMgdGhlIG1pZCBhbmQgc2lkZSBzaWduYWwgYWZ0ZXIgdGhleSd2ZSBiZWVuIHNlcGVyYXRlZFxuXHRcdCAqICAgICAgICAgYnkgVG9uZS5NaWRTaWRlU3BsaXQuPGJyPjxicj5cblx0XHQgKiAgICAgICAgIDxjb2RlPlxuXHRcdCAqICAgICAgICAgTGVmdCA9IChNaWQrU2lkZSkvc3FydCgyKTsgICAvLyBvYnRhaW4gbGVmdCBzaWduYWwgZnJvbSBtaWQgYW5kIHNpZGU8YnI+XG5cdFx0ICogICAgICAgICBSaWdodCA9IChNaWQtU2lkZSkvc3FydCgyKTsgICAvLyBvYnRhaW4gcmlnaHQgc2lnbmFsIGZyb20gbWlkIGFuZCBzaWRlPGJyPlxuXHRcdCAqICAgICAgICAgPC9jb2RlPlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVNZXJnZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHNpZ25hbCBpbnB1dC4gQWxpYXMgZm9yXG5cdFx0XHQgKiAgPGNvZGU+aW5wdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcmVjb21iaW5lIHRoZSBtaWQvc2lkZSBpbnRvIExlZnRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBuZXcgVG9uZS5BZGQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIE11bHRpcGx5IHRoZSBsZWZ0IGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQgPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIHNpZ25hbCBpbnB1dC4gQWxpYXMgZm9yXG5cdFx0XHQgKiAgPGNvZGU+aW5wdXRbMV08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGUgPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJlY29tYmluZSB0aGUgbWlkL3NpZGUgaW50byBSaWdodFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yaWdodCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgcmlnaHQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQgPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE1lcmdlIHRoZSBsZWZ0L3JpZ2h0IHNpZ25hbCBiYWNrIGludG8gYSBzdGVyZW8gc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICB0aGlzLm1pZC5jb25uZWN0KHRoaXMuX2xlZnQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuc2lkZS5jb25uZWN0KHRoaXMuX2xlZnQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMubWlkLmNvbm5lY3QodGhpcy5fcmlnaHQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuc2lkZS5jb25uZWN0KHRoaXMuX3JpZ2h0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0LmNvbm5lY3QodGhpcy5fdGltZXNUd29MZWZ0KTtcblx0ICAgICAgICB0aGlzLl9yaWdodC5jb25uZWN0KHRoaXMuX3RpbWVzVHdvUmlnaHQpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0LmNvbm5lY3QodGhpcy5fbWVyZ2UsIDAsIDEpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkU2lkZU1lcmdlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZU1lcmdlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVNZXJnZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnNpZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29MZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yaWdodC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZU1lcmdlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5NaWRTaWRlQ29tcHJlc3NvciBhcHBsaWVzIHR3byBkaWZmZXJlbnQgY29tcHJlc3NvcnMgdG8gdGhlIG1pZFxuXHRcdCAqICAgICAgICAgYW5kIHNpZGUgc2lnbmFsIGNvbXBvbmVudHMuIFNlZSBUb25lLk1pZFNpZGVTcGxpdC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgbWlkIGFuZCBzaWRlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3JzLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1pZFNpZGVDb21wcmVzc29yLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWlkL3NpZGUgc3BsaXRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZVNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTWlkU2lkZVNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1pZC9zaWRlIHJlY29tYmluYXRpb25cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZU1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1pZFNpZGVNZXJnZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIG1pZCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLm1pZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgc2lkZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5zaWRlKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQubWlkLmNoYWluKHRoaXMubWlkLCB0aGlzLl9taWRTaWRlTWVyZ2UubWlkKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQuc2lkZS5jaGFpbih0aGlzLnNpZGUsIHRoaXMuX21pZFNpZGVNZXJnZS5zaWRlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnc2lkZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVDb21wcmVzc29yLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21pZCc6IHtcblx0ICAgICAgICAgICAgJ3JhdGlvJzogMyxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCc6IC0yNCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjAzLFxuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMixcblx0ICAgICAgICAgICAgJ2tuZWUnOiAxNlxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3NpZGUnOiB7XG5cdCAgICAgICAgICAgICdyYXRpbyc6IDYsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnOiAtMzAsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC4yNSxcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDMsXG5cdCAgICAgICAgICAgICdrbmVlJzogMTBcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlQ29tcHJlc3Nvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlQ29tcHJlc3Nvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdzaWRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnNpZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZUNvbXByZXNzb3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk1vbm8gY29lcmNlcyB0aGUgaW5jb21pbmcgbW9ubyBvciBzdGVyZW8gc2lnbmFsIGludG8gYSBtb25vIHNpZ25hbFxuXHRcdCAqICAgICAgICAgd2hlcmUgYm90aCBsZWZ0IGFuZCByaWdodCBjaGFubmVscyBoYXZlIHRoZSBzYW1lIHZhbHVlLiBUaGlzIGNhbiBiZSB1c2VmdWxcblx0XHQgKiAgICAgICAgIGZvciBbc3RlcmVvIGltYWdpbmddKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N0ZXJlb19pbWFnaW5nKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIG1lcmdlIHRoZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fbWVyZ2UsIDAsIDEpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9ubywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9uby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9ubztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgY29tcHJlc3NvciB3aXRoIHNlcGVyYXRlIGNvbnRyb2xzIG92ZXIgbG93L21pZC9oaWdoIGR5bmFtaWNzXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIGxvdy9taWQvaGlnaCBjb21wcmVzc29yIHNldHRpbmdzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgbXVsdGliYW5kID0gbmV3IFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvcih7XG5cdFx0ICogIFx0XCJsb3dGcmVxdWVuY3lcIiA6IDIwMCxcblx0XHQgKiAgXHRcImhpZ2hGcmVxdWVuY3lcIiA6IDEzMDBcblx0XHQgKiAgXHRcImxvd1wiIDoge1xuXHRcdCAqICBcdFx0XCJ0aHJlc2hvbGRcIiA6IC0xMlxuXHRcdCAqICBcdH1cblx0XHQgKiAgfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kQ29tcHJlc3NvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKGFyZ3VtZW50cywgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzcGxpdCB0aGUgaW5jb21pbmcgc2lnbmFsIGludG8gaGlnaC9taWQvbG93XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGliYW5kU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpYmFuZFNwbGl0KHtcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IG9wdGlvbnMubG93RnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IG9wdGlvbnMuaGlnaEZyZXF1ZW5jeVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gdGhpcy5fc3BsaXR0ZXIubG93RnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSB0aGlzLl9zcGxpdHRlci5oaWdoRnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvdXRwdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBsb3cgZnJlcXVlbmNpZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93ID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLmxvdyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgbWlkIGZyZXF1ZW5jaWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5taWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIGhpZ2ggZnJlcXVlbmNpZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5oaWdoKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGNvbXByZXNzb3Jcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5sb3cuY2hhaW4odGhpcy5sb3csIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5taWQuY2hhaW4odGhpcy5taWQsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5oaWdoLmNoYWluKHRoaXMuaGlnaCwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk11bHRpYmFuZENvbXByZXNzb3IsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdsb3cnOiBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMsXG5cdCAgICAgICAgJ21pZCc6IFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyxcblx0ICAgICAgICAnaGlnaCc6IFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyxcblx0ICAgICAgICAnbG93RnJlcXVlbmN5JzogMjUwLFxuXHQgICAgICAgICdoaWdoRnJlcXVlbmN5JzogMjAwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NdWx0aWJhbmRDb21wcmVzc29yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZENvbXByZXNzb3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubG93LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oaWdoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3cgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2ggPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk11bHRpYmFuZENvbXByZXNzb3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCAmJiAhd2luZG93LlN0ZXJlb1Bhbm5lck5vZGUpIHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEBjbGFzcyBTaGltbWVkIFN0ZXJlb1Bhbm5lck5vZGVcblx0XHRcdCAqIEBwYXJhbSAge0F1ZGlvQ29udGV4dH0gY29udGV4dFxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHZhciBTdGVyZW9QYW5uZXJOb2RlID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSBhdWRpbyBjb250ZXh0XG5cdFx0XHRcdCAqIEB0eXBlIHtBdWRpb0NvbnRleHR9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIGxlZnQvcmlnaHQgcGFubmluZy4gWy0xLCAxXVxuXHRcdFx0XHQgKiBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5wYW4gPSBuZXcgVG9uZS5TaWduYWwoMCwgVG9uZS5UeXBlLkF1ZGlvUmFuZ2UpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogRXF1YWwgcG93ZXIgc2NhbGluZyBvZiB0aGUgcmlnaHQgZ2FpblxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHJpZ2h0V2F2ZVNoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZXF1YWxQb3dlclNjYWxlKCh2YWwgKyAxKSAvIDIpO1xuXHQgICAgICAgICAgICB9LCA0MDk2KTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIEVxdWFsIHBvd2VyIHNjYWxpbmcgb2YgdGhlIGxlZnQgZ2FpblxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIGxlZnRXYXZlU2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5lcXVhbFBvd2VyU2NhbGUoMSAtICh2YWwgKyAxKSAvIDIpO1xuXHQgICAgICAgICAgICB9LCA0MDk2KTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSBsZWZ0IGdhaW4gdmFsdWVcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBsZWZ0R2FpbiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSByaWdodCBnYWluIHZhbHVlXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgcmlnaHRHYWluID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogU3BsaXQgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5TcGxpdH1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBzcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogS2VlcHMgdGhlIHdhdmVzaGFwZXJzIGZyb20gb3B0aW1pemluZyAwc1xuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5aZXJvfVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHplcm8gPSBuZXcgVG9uZS5aZXJvKCk7XG5cdCAgICAgICAgICAgIHplcm8uZmFuKHJpZ2h0V2F2ZVNoYXBlciwgbGVmdFdhdmVTaGFwZXIpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogTWVyZ2UgdGhlIG91dGdvaW5nIHNpZ25hbFxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBtZXJnZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgICAgICBzcGxpdC5sZWZ0LmNoYWluKGxlZnRHYWluLCBtZXJnZS5sZWZ0KTtcblx0ICAgICAgICAgICAgc3BsaXQucmlnaHQuY2hhaW4ocmlnaHRHYWluLCBtZXJnZS5yaWdodCk7XG5cdCAgICAgICAgICAgIHRoaXMucGFuLmNoYWluKGxlZnRXYXZlU2hhcGVyLCBsZWZ0R2Fpbi5nYWluKTtcblx0ICAgICAgICAgICAgdGhpcy5wYW4uY2hhaW4ocmlnaHRXYXZlU2hhcGVyLCByaWdodEdhaW4uZ2Fpbik7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBTdGVyZW9QYW5uZXJOb2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dC5kaXNjb25uZWN0LmFwcGx5KHRoaXMub3V0cHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgU3RlcmVvUGFubmVyTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuY29ubmVjdC5hcHBseSh0aGlzLm91dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIC8vYWRkIGl0IHRvIHRoZSBBdWRpb0NvbnRleHRcblx0ICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVN0ZXJlb1Bhbm5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGVyZW9QYW5uZXJOb2RlKHRoaXMpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVTdGVyZW9QYW5uZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgU3RlcmVvUGFubmVyTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGFubmVyIGlzIGFuIGVxdWFsIHBvd2VyIExlZnQvUmlnaHQgUGFubmVyIGFuZCBkb2VzIG5vdFxuXHRcdCAqICAgICAgICAgIHN1cHBvcnQgM0QuIFBhbm5lciB1c2VzIHRoZSBTdGVyZW9QYW5uZXJOb2RlIHdoZW4gYXZhaWxhYmxlLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtpbml0aWFsUGFuPTBdIFRoZSBpbml0YWlsIHBhbm5lciB2YWx1ZSAoY2VudGVyKS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy9wYW4gdGhlIGlucHV0IHNpZ25hbCBoYXJkIHJpZ2h0LlxuXHRcdCAqICB2YXIgcGFubmVyID0gbmV3IFRvbmUuUGFubmVyKDEpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIgPSBmdW5jdGlvbiAoaW5pdGlhbFBhbikge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQqICB0aGUgcGFubmVyIG5vZGVcblx0XHRcdCogIEB0eXBlIHtTdGVyZW9QYW5uZXJOb2RlfVxuXHRcdFx0KiAgQHByaXZhdGVcblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZVN0ZXJlb1Bhbm5lcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiAgVGhlIHBhbiBjb250cm9sLiAtMSA9IGhhcmQgbGVmdCwgMSA9IGhhcmQgcmlnaHQuXG5cdFx0XHQqICBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdCogIEBzaWduYWxcblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5wYW4gPSB0aGlzLl9wYW5uZXIucGFuO1xuXHQgICAgICAgIC8vaW5pdGlhbCB2YWx1ZVxuXHQgICAgICAgIHRoaXMucGFuLnZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKGluaXRpYWxQYW4sIDApO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdwYW4nKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhbm5lciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3BhbicpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnBhbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFubmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc3BhdGlhbGl6ZWQgcGFubmVyIG5vZGUgd2hpY2ggc3VwcG9ydHMgZXF1YWxwb3dlciBvciBIUlRGIHBhbm5pbmcuXG5cdFx0ICogICAgICAgICAgVHJpZXMgdG8gbm9ybWFsaXplIHRoZSBBUEkgYWNyb3NzIHZhcmlvdXMgYnJvd3NlcnMuIFNlZSBUb25lLkxpc3RlbmVyXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHBvc2l0aW9uWCBUaGUgaW5pdGlhbCB4IHBvc2l0aW9uLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gcG9zaXRpb25ZIFRoZSBpbml0aWFsIHkgcG9zaXRpb24uXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBwb3NpdGlvblogVGhlIGluaXRpYWwgeiBwb3NpdGlvbi5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncG9zaXRpb25YJyxcblx0ICAgICAgICAgICAgJ3Bvc2l0aW9uWScsXG5cdCAgICAgICAgICAgICdwb3NpdGlvblonXG5cdCAgICAgICAgXSwgVG9uZS5QYW5uZXIzRCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGFubmVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7UGFubmVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5lcigpO1xuXHQgICAgICAgIC8vc2V0IHNvbWUgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5fcGFubmVyLnBhbm5pbmdNb2RlbCA9IG9wdGlvbnMucGFubmluZ01vZGVsO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5tYXhEaXN0YW5jZSA9IG9wdGlvbnMubWF4RGlzdGFuY2U7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc3RhbmNlTW9kZWwgPSBvcHRpb25zLmRpc3RhbmNlTW9kZWw7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbmVPdXRlckdhaW4gPSBvcHRpb25zLmNvbmVPdXRlckdhaW47XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbmVPdXRlckFuZ2xlID0gb3B0aW9ucy5jb25lT3V0ZXJBbmdsZTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuY29uZUlubmVyQW5nbGUgPSBvcHRpb25zLmNvbmVJbm5lckFuZ2xlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5yZWZEaXN0YW5jZSA9IG9wdGlvbnMucmVmRGlzdGFuY2U7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLnJvbGxvZmZGYWN0b3IgPSBvcHRpb25zLnJvbGxvZmZGYWN0b3I7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgb3JpZW50YXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IFtcblx0ICAgICAgICAgICAgb3B0aW9ucy5vcmllbnRhdGlvblgsXG5cdCAgICAgICAgICAgIG9wdGlvbnMub3JpZW50YXRpb25ZLFxuXHQgICAgICAgICAgICBvcHRpb25zLm9yaWVudGF0aW9uWlxuXHQgICAgICAgIF07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IFtcblx0ICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvblgsXG5cdCAgICAgICAgICAgIG9wdGlvbnMucG9zaXRpb25ZLFxuXHQgICAgICAgICAgICBvcHRpb25zLnBvc2l0aW9uWlxuXHQgICAgICAgIF07XG5cdCAgICAgICAgLy8gc2V0IHRoZSBkZWZhdWx0IHBvc2l0aW9uL29yaWVudGF0aW9uXG5cdCAgICAgICAgdGhpcy5vcmllbnRhdGlvblggPSBvcHRpb25zLm9yaWVudGF0aW9uWDtcblx0ICAgICAgICB0aGlzLm9yaWVudGF0aW9uWSA9IG9wdGlvbnMub3JpZW50YXRpb25ZO1xuXHQgICAgICAgIHRoaXMub3JpZW50YXRpb25aID0gb3B0aW9ucy5vcmllbnRhdGlvblo7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvblggPSBvcHRpb25zLnBvc2l0aW9uWDtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uWSA9IG9wdGlvbnMucG9zaXRpb25ZO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb25aID0gb3B0aW9ucy5wb3NpdGlvblo7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYW5uZXIzRCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncG9zaXRpb25YJzogMCxcblx0ICAgICAgICAncG9zaXRpb25ZJzogMCxcblx0ICAgICAgICAncG9zaXRpb25aJzogMCxcblx0ICAgICAgICAnb3JpZW50YXRpb25YJzogMCxcblx0ICAgICAgICAnb3JpZW50YXRpb25ZJzogMCxcblx0ICAgICAgICAnb3JpZW50YXRpb25aJzogMCxcblx0ICAgICAgICAncGFubmluZ01vZGVsJzogJ2VxdWFscG93ZXInLFxuXHQgICAgICAgICdtYXhEaXN0YW5jZSc6IDEwMDAwLFxuXHQgICAgICAgICdkaXN0YW5jZU1vZGVsJzogJ2ludmVyc2UnLFxuXHQgICAgICAgICdjb25lT3V0ZXJHYWluJzogMCxcblx0ICAgICAgICAnY29uZU91dGVyQW5nbGUnOiAzNjAsXG5cdCAgICAgICAgJ2NvbmVJbm5lckFuZ2xlJzogMzYwLFxuXHQgICAgICAgICdyZWZEaXN0YW5jZSc6IDEsXG5cdCAgICAgICAgJ3JvbGxvZmZGYWN0b3InOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJhbXAgdGltZSB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBzZXRUYXJnZXRBdFRpbWVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELnByb3RvdHlwZS5fcmFtcFRpbWVDb25zdGFudCA9IDAuMDE7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIHNvdXJjZSBpbiAzZCBzcGFjZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB5XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHpcblx0XHQgKiAgQHJldHVybiB7VG9uZS5QYW5uZXIzRH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuc2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeikge1xuXHQgICAgICAgIGlmICh0aGlzLl9wYW5uZXIucG9zaXRpb25YKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIucG9zaXRpb25YLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIucG9zaXRpb25ZLnNldFRhcmdldEF0VGltZSh5LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIucG9zaXRpb25aLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5zZXRQb3NpdGlvbih4LCB5LCB6KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgc291cmNlIGluIDNkIHNwYWNlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBhbm5lcjNEfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELnByb3RvdHlwZS5zZXRPcmllbnRhdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblouc2V0VGFyZ2V0QXRUaW1lKHosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnNldE9yaWVudGF0aW9uKHgsIHksIHopO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25YXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdwb3NpdGlvblgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvbllcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ3Bvc2l0aW9uWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAncG9zaXRpb25aJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblsyXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzJdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IG9yaWVudGF0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgb3JpZW50YXRpb25YXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdvcmllbnRhdGlvblgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgb3JpZW50YXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBvcmllbnRhdGlvbllcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ29yaWVudGF0aW9uWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBvcmllbnRhdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG9yaWVudGF0aW9uWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAnb3JpZW50YXRpb25aJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblsyXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzJdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFByb3h5IGEgcHJvcGVydHkgb24gdGhlIHBhbm5lciB0byBhbiBleHBvc2VkIHB1YmxpYyBwcm9wZXJ5XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHByb3Bcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcCkge1xuXHQgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgcHJvcCwge1xuXHQgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Bhbm5lcltwcm9wXSA9IHZhbDtcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFubmVyW3Byb3BdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwYW5uaW5nIG1vZGVsLiBFaXRoZXIgXCJlcXVhbHBvd2VyXCIgb3IgXCJIUlRGXCIuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwYW5uaW5nTW9kZWxcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ3Bhbm5pbmdNb2RlbCcpO1xuXHQgICAgLyoqXG5cdFx0ICogIEEgcmVmZXJlbmNlIGRpc3RhbmNlIGZvciByZWR1Y2luZyB2b2x1bWUgYXMgc291cmNlIG1vdmUgZnVydGhlciBmcm9tIHRoZSBsaXN0ZW5lclxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcmVmRGlzdGFuY2Vcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ3JlZkRpc3RhbmNlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVzY3JpYmVzIGhvdyBxdWlja2x5IHRoZSB2b2x1bWUgaXMgcmVkdWNlZCBhcyBzb3VyY2UgbW92ZXMgYXdheSBmcm9tIGxpc3RlbmVyLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcm9sbG9mZkZhY3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgncm9sbG9mZkZhY3RvcicpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkaXN0YW5jZSBtb2RlbCB1c2VkIGJ5LCAgXCJsaW5lYXJcIiwgXCJpbnZlcnNlXCIsIG9yIFwiZXhwb25lbnRpYWxcIi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIGRpc3RhbmNlTW9kZWxcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2Rpc3RhbmNlTW9kZWwnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYW5nbGUsIGluIGRlZ3JlZXMsIGluc2lkZSBvZiB3aGljaCB0aGVyZSB3aWxsIGJlIG5vIHZvbHVtZSByZWR1Y3Rpb25cblx0XHQgKiAgQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBjb25lSW5uZXJBbmdsZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnY29uZUlubmVyQW5nbGUnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYW5nbGUsIGluIGRlZ3JlZXMsIG91dHNpZGUgb2Ygd2hpY2ggdGhlIHZvbHVtZSB3aWxsIGJlIHJlZHVjZWRcblx0XHQgKiAgdG8gYSBjb25zdGFudCB2YWx1ZSBvZiBjb25lT3V0ZXJHYWluXG5cdFx0ICogIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgY29uZU91dGVyQW5nbGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2NvbmVPdXRlckFuZ2xlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGdhaW4gb3V0c2lkZSBvZiB0aGUgY29uZU91dGVyQW5nbGVcblx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBjb25lT3V0ZXJHYWluXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdjb25lT3V0ZXJHYWluJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG1heGltdW0gZGlzdGFuY2UgYmV0d2VlbiBzb3VyY2UgYW5kIGxpc3RlbmVyLFxuXHRcdCAqICBhZnRlciB3aGljaCB0aGUgdm9sdW1lIHdpbGwgbm90IGJlIHJlZHVjZWQgYW55IGZ1cnRoZXIuXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG1heERpc3RhbmNlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdtYXhEaXN0YW5jZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYW5uZXIzRH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhbm5lcjNEO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYW5Wb2wgaXMgYSBUb25lLlBhbm5lciBhbmQgVG9uZS5Wb2x1bWUgaW4gb25lLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9SYW5nZX0gcGFuIHRoZSBpbml0aWFsIHBhblxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdm9sdW1lIFRoZSBvdXRwdXQgdm9sdW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcGFuIHRoZSBpbmNvbWluZyBzaWduYWwgbGVmdCBhbmQgZHJvcCB0aGUgdm9sdW1lXG5cdFx0ICogdmFyIHBhblZvbCA9IG5ldyBUb25lLlBhblZvbCgtMC4yNSwgLTEyKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFuVm9sID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3BhbicsXG5cdCAgICAgICAgICAgICd2b2x1bWUnXG5cdCAgICAgICAgXSwgVG9uZS5QYW5Wb2wpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhbm5pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBhbm5lcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLlBhbm5lcihvcHRpb25zLnBhbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIEwvUiBwYW5uaW5nIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wYW4gPSB0aGlzLl9wYW5uZXIucGFuO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2b2x1bWUgY29udHJvbCBpbiBkZWNpYmVscy5cblx0XHRcdCAqICBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuY29ubmVjdCh0aGlzLl92b2x1bWUpO1xuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdwYW4nLFxuXHQgICAgICAgICAgICAndm9sdW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFuVm9sLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5Wb2wuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Bhbic6IDAsXG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUvdW5tdXRlIHRoZSB2b2x1bWVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYW5Wb2wjXG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFuVm9sLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhblZvbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5Wb2wucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdwYW4nLFxuXHQgICAgICAgICAgICAndm9sdW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnBhbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYW5Wb2w7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Tb2xvIGxldHMgeW91IGlzb2xhdGUgYSBzcGVjaWZpYyBhdWRpbyBzdHJlYW0uIFdoZW5cblx0XHQgKiAgICAgICAgIGFuIGluc3RhbmNlIGlzIHNldCB0byBgc29sbz10cnVlYCwgaXQgd2lsbCBtdXRlIGFsbCBvdGhlciBpbnN0YW5jZXMuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc29sb0EgPSBuZXcgVG9uZS5Tb2xvKClcblx0XHQgKiB2YXIgc29sb0IgPSBuZXcgVG9uZS5Tb2xvKClcblx0XHQgKiBzb2xvQS5zb2xvID0gdHJ1ZVxuXHRcdCAqIC8vbm8gYXVkaW8gd2lsbCBwYXNzIHRocm91Z2ggc29sb0Jcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3NvbG8nXSwgVG9uZS5Tb2xvKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBpbnB1dCBhbmQgb3V0cHV0IG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGJvdW5kIF9zb2xvZWQgbWV0aG9kXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc29sb0JpbmQgPSB0aGlzLl9zb2xvZWQuYmluZCh0aGlzKTtcblx0ICAgICAgICAvL2xpc3RlbiBmb3Igc29sbyBldmVudHMgY2xhc3Mtd2lkZS5cblx0ICAgICAgICB0aGlzLmNvbnRleHQub24oJ3NvbG8nLCB0aGlzLl9zb2xvQmluZCk7XG5cdCAgICAgICAgLy9zZXQgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5zb2xvID0gb3B0aW9ucy5zb2xvO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU29sbywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLmRlZmF1bHRzID0geyBzb2xvOiBmYWxzZSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIElzb2xhdGVzIHRoaXMgaW5zdGFuY2UgYW5kIG11dGVzIGFsbCBvdGhlciBpbnN0YW5jZXMgb2YgVG9uZS5Tb2xvLlxuXHRcdCAqICBPbmx5IG9uZSBpbnN0YW5jZSBjYW4gYmUgc29sb2VkIGF0IGEgdGltZS4gQSBzb2xvZWRcblx0XHQgKiAgaW5zdGFuY2Ugd2lsbCByZXBvcnQgYHNvbG89ZmFsc2VgIHdoZW4gYW5vdGhlciBpbnN0YW5jZSBpcyBzb2xvZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNvbG8jXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBzb2xvXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Tb2xvLnByb3RvdHlwZSwgJ3NvbG8nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1NvbG9lZCgpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc29sbykge1xuXHQgICAgICAgICAgICBpZiAoc29sbykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYWRkU29sbygpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU29sbygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5lbWl0KCdzb2xvJywgdGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIGN1cnJlbnQgaW5zdGFuY2UgaXMgbXV0ZWQsIGkuZS4gYW5vdGhlciBpbnN0YW5jZSBpcyBzb2xvZWRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuU29sbyNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBuYW1lIG11dGVkXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU29sby5wcm90b3R5cGUsICdtdXRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQuZ2Fpbi52YWx1ZSA9PT0gMDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEFkZCB0aGlzIHRvIHRoZSBzb2xvZWQgYXJyYXlcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5fYWRkU29sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoIVRvbmUuaXNBcnJheSh0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvKSkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvID0gW107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghdGhpcy5faXNTb2xvZWQoKSkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLnB1c2godGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlbW92ZSB0aGlzIGZyb20gdGhlIHNvbG9lZCBhcnJheVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9yZW1vdmVTb2xvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9pc1NvbG9lZCgpKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8uaW5kZXhPZih0aGlzKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBJcyB0aGlzIG9uIHRoZSBzb2xvZWQgYXJyYXlcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5faXNTb2xvZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5sZW5ndGggIT09IDAgJiYgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5pbmRleE9mKHRoaXMpICE9PSAtMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBubyBvbmUgaXMgc29sb2VkXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX25vU29sb3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuICFUb25lLmlzQXJyYXkodGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbykgfHwgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5sZW5ndGggPT09IDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNvbG8gdGhlIGN1cnJlbnQgaW5zdGFuY2UgYW5kIHVuc29sbyBhbGwgb3RoZXIgaW5zdGFuY2VzLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlNvbG99ICBpbnN0YW5jZSAgVGhlIGluc3RhbmNlIHdoaWNoIGlzIGJlaW5nIHNvbG9lZC91bnNvbG9lZC5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX3NvbG9lZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5faXNTb2xvZWQoKSkge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmdhaW4udmFsdWUgPSAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbm9Tb2xvcygpKSB7XG5cdCAgICAgICAgICAgIC8vbm8gb25lIGlzIHNvbG9lZFxuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmdhaW4udmFsdWUgPSAxO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuZ2Fpbi52YWx1ZSA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Tb2xvfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5vZmYoJ3NvbG8nLCB0aGlzLl9zb2xvQmluZCk7XG5cdCAgICAgICAgdGhpcy5fcmVtb3ZlU29sbygpO1xuXHQgICAgICAgIHRoaXMuX3NvbG9CaW5kID0gbnVsbDtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNvbG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEdldCB0aGUgY3VycmVudCB3YXZlZm9ybSBkYXRhIG9mIHRoZSBjb25uZWN0ZWQgYXVkaW8gc291cmNlLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgRkZULiBWYWx1ZSBtdXN0IGJlIGEgcG93ZXIgb2Zcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzaXplJ10sIFRvbmUuV2F2ZWZvcm0pO1xuXHQgICAgICAgIG9wdGlvbnMudHlwZSA9IFRvbmUuQW5hbHlzZXIuVHlwZS5XYXZlZm9ybTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW5hbHlzZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkFuYWx5c2VyKG9wdGlvbnMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuV2F2ZWZvcm0sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlZm9ybS5kZWZhdWx0cyA9IHsgJ3NpemUnOiAxMDI0IH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0cyB0aGUgd2F2ZWZvcm0gb2YgdGhlIGF1ZGlvIHNvdXJjZS4gUmV0dXJucyB0aGUgd2F2ZWZvcm0gZGF0YVxuXHRcdCAqICBvZiBsZW5ndGggW3NpemVdKCNzaXplKSBhcyBhIEZsb2F0MzJBcnJheSB3aXRoIHZhbHVlcyBiZXR3ZWVuIC0xIGFuZCAxLlxuXHRcdCAqICBAcmV0dXJucyB7VHlwZWRBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0ucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2l6ZSBvZiBhbmFseXNpcy4gVGhpcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuV2F2ZWZvcm0jXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIHNpemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLldhdmVmb3JtLnByb3RvdHlwZSwgJ3NpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5zaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zaXplID0gc2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuV2F2ZWZvcm19ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5XYXZlZm9ybTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ3RybEludGVycG9sYXRlIHdpbGwgaW50ZXJwb2xhdGUgYmV0d2VlbiBnaXZlbiB2YWx1ZXMgYmFzZWRcblx0XHQgKiAgICAgICAgIG9uIHRoZSBcImluZGV4XCIgcHJvcGVydHkuIFBhc3NpbmcgaW4gYW4gYXJyYXkgb3Igb2JqZWN0IGxpdGVyYWxcblx0XHQgKiAgICAgICAgIHdpbGwgaW50ZXJwb2xhdGUgZWFjaCBvZiB0aGUgcGFyYW1ldGVycy4gTm90ZSAoaS5lLiBcIkMzXCIpXG5cdFx0ICogICAgICAgICBhbmQgVGltZSAoaS5lLiBcIjRuICsgMlwiKSBjYW4gYmUgaW50ZXJwb2xhdGVkLiBBbGwgb3RoZXIgdmFsdWVzIGFyZVxuXHRcdCAqICAgICAgICAgYXNzdW1lZCB0byBiZSBudW1iZXJzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgaW50ZXJwID0gbmV3IFRvbmUuQ3RybEludGVycG9sYXRlKFswLCAyLCA5LCA0XSk7XG5cdFx0ICogaW50ZXJwLmluZGV4ID0gMC43NTtcblx0XHQgKiBpbnRlcnAudmFsdWU7IC8vcmV0dXJucyAxLjVcblx0XHQgKlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBpbnRlcnAgPSBuZXcgVG9uZS5DdHJsSW50ZXJwb2xhdGUoW1xuXHRcdCAqIFx0WzIsIDQsIDVdLFxuXHRcdCAqIFx0WzksIDMsIDJdLFxuXHRcdCAqIF0pO1xuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgYXJyYXkgb2YgdmFsdWVzIHRvIGludGVycG9sYXRlIG92ZXJcblx0XHQgKiBAcGFyYW0ge1Bvc2l0aXZlfSBpbmRleCBUaGUgaW5pdGlhbCBpbnRlcnBvbGF0aW9uIGluZGV4LlxuXHRcdCAqIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndmFsdWVzJyxcblx0ICAgICAgICAgICAgJ2luZGV4J1xuXHQgICAgICAgIF0sIFRvbmUuQ3RybEludGVycG9sYXRlKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlcyB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gb3B0aW9ucy52YWx1ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGludGVycG9sYXRlZCBpbmRleCBiZXR3ZWVuIHZhbHVlcy4gRm9yIGV4YW1wbGU6IGEgdmFsdWUgb2YgMS41XG5cdFx0XHQgKiAgd291bGQgaW50ZXJwb2xhdGUgZXF1YWxseSBiZXR3ZWVuIHRoZSB2YWx1ZSBhdCBpbmRleCAxXG5cdFx0XHQgKiAgYW5kIHRoZSB2YWx1ZSBhdCBpbmRleCAyLiBcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogaW50ZXJwLmluZGV4ID0gMDsgXG5cdFx0XHQgKiBpbnRlcnAudmFsdWU7IC8vcmV0dXJucyB0aGUgdmFsdWUgYXQgMFxuXHRcdFx0ICogaW50ZXJwLmluZGV4ID0gMC41O1xuXHRcdFx0ICogaW50ZXJwLnZhbHVlOyAvL3JldHVybnMgdGhlIHZhbHVlIGJldHdlZW4gaW5kaWNlcyAwIGFuZCAxLiBcblx0XHRcdCAqICBAdHlwZSAge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsSW50ZXJwb2xhdGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnaW5kZXgnOiAwLFxuXHQgICAgICAgICd2YWx1ZXMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCBpbnRlcnBvbGF0ZWQgdmFsdWUgYmFzZWQgb24gdGhlIGluZGV4XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsSW50ZXJwb2xhdGUjXG5cdFx0ICogIEB0eXBlIHsqfVxuXHRcdCAqICBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgdmFyIGxvd2VyUG9zaXRpb24gPSBNYXRoLmZsb29yKGluZGV4KTtcblx0ICAgICAgICAgICAgdmFyIGxvd2VyID0gdGhpcy52YWx1ZXNbbG93ZXJQb3NpdGlvbl07XG5cdCAgICAgICAgICAgIHZhciB1cHBlciA9IHRoaXMudmFsdWVzW01hdGguY2VpbChpbmRleCldO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJwb2xhdGUoaW5kZXggLSBsb3dlclBvc2l0aW9uLCBsb3dlciwgdXBwZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGludGVycG9sYXRpb24gcm91dGluZVxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIGluZGV4ICBUaGUgaW5kZXggYmV0d2VlbiB0aGUgbG93ZXIgYW5kIHVwcGVyXG5cdFx0ICogIEBwYXJhbSAgeyp9ICBsb3dlciBcblx0XHQgKiAgQHBhcmFtICB7Kn0gIHVwcGVyIFxuXHRcdCAqICBAcmV0dXJuICB7Kn0gIFRoZSBpbnRlcnBvbGF0ZWQgdmFsdWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZS5faW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAoaW5kZXgsIGxvd2VyLCB1cHBlcikge1xuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkobG93ZXIpKSB7XG5cdCAgICAgICAgICAgIHZhciByZXRBcnJheSA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvd2VyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICByZXRBcnJheVtpXSA9IHRoaXMuX2ludGVycG9sYXRlKGluZGV4LCBsb3dlcltpXSwgdXBwZXJbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXRBcnJheTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNPYmplY3QobG93ZXIpKSB7XG5cdCAgICAgICAgICAgIHZhciByZXRPYmogPSB7fTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBsb3dlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0T2JqW2F0dHJdID0gdGhpcy5faW50ZXJwb2xhdGUoaW5kZXgsIGxvd2VyW2F0dHJdLCB1cHBlclthdHRyXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHJldE9iajtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBsb3dlciA9IHRoaXMuX3RvTnVtYmVyKGxvd2VyKTtcblx0ICAgICAgICAgICAgdXBwZXIgPSB0aGlzLl90b051bWJlcih1cHBlcik7XG5cdCAgICAgICAgICAgIHJldHVybiAoMSAtIGluZGV4KSAqIGxvd2VyICsgaW5kZXggKiB1cHBlcjtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZnJvbSB0aGUgZ2l2ZW4gdHlwZSBpbnRvIGEgbnVtYmVyXG5cdFx0ICogIEBwYXJhbSAge051bWJlcnxTdHJpbmd9ICB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUucHJvdG90eXBlLl90b051bWJlciA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcih2YWwpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9vdGhlcndpc2UgYXNzdW1lIHRoYXQgaXQncyBUaW1lLi4uXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcyh2YWwpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ3RybEludGVycG9sYXRlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxJbnRlcnBvbGF0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ3RybE1hcmtvdiByZXByZXNlbnRzIGEgTWFya292IENoYWluIHdoZXJlIGVhY2ggY2FsbFxuXHRcdCAqICAgICAgICAgdG8gVG9uZS5DdHJsTWFya292Lm5leHQgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlLiBJZiB0aGUgbmV4dFxuXHRcdCAqICAgICAgICAgc3RhdGUgY2hvaWNlIGlzIGFuIGFycmF5LCB0aGUgbmV4dCBzdGF0ZSBpcyBjaG9zZW4gcmFuZG9tbHkgd2l0aFxuXHRcdCAqICAgICAgICAgZXZlbiBwcm9iYWJpbGl0eSBmb3IgYWxsIG9mIHRoZSBjaG9pY2VzLiBGb3IgYSB3ZWlnaHRlZCBwcm9iYWJpbGl0eVxuXHRcdCAqICAgICAgICAgb2YgdGhlIG5leHQgY2hvaWNlcywgcGFzcyBpbiBhbiBvYmplY3Qgd2l0aCBcInN0YXRlXCIgYW5kIFwicHJvYmFiaWxpdHlcIiBhdHRyaWJ1dGVzLiBcblx0XHQgKiAgICAgICAgIFRoZSBwcm9iYWJpbGl0aWVzIHdpbGwgYmUgbm9ybWFsaXplZCBhbmQgdGhlbiBjaG9zZW4uIElmIG5vIG5leHQgb3B0aW9uc1xuXHRcdCAqICAgICAgICAgYXJlIGdpdmVuIGZvciB0aGUgY3VycmVudCBzdGF0ZSwgdGhlIHN0YXRlIHdpbGwgc3RheSB0aGVyZS4gXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjaGFpbiA9IG5ldyBUb25lLkN0cmxNYXJrb3Yoe1xuXHRcdCAqIFx0XCJiZWdpbm5pbmdcIiA6IFtcImVuZFwiLCBcIm1pZGRsZVwiXSxcblx0XHQgKiBcdFwibWlkZGxlXCIgOiBcImVuZFwiXG5cdFx0ICogfSk7XG5cdFx0ICogY2hhaW4udmFsdWUgPSBcImJlZ2lubmluZ1wiO1xuXHRcdCAqIGNoYWluLm5leHQoKTsgLy9yZXR1cm5zIFwiZW5kXCIgb3IgXCJtaWRkbGVcIiB3aXRoIDUwJSBwcm9iYWJpbGl0eVxuXHRcdCAqXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNoYWluID0gbmV3IFRvbmUuQ3RybE1hcmtvdih7XG5cdFx0ICogXHRcImJlZ2lubmluZ1wiIDogW3tcInZhbHVlXCIgOiBcImVuZFwiLCBcInByb2JhYmlsaXR5XCIgOiAwLjh9LCBcblx0XHQgKiBcdFx0XHRcdFx0e1widmFsdWVcIiA6IFwibWlkZGxlXCIsIFwicHJvYmFiaWxpdHlcIiA6IDAuMn1dLFxuXHRcdCAqIFx0XCJtaWRkbGVcIiA6IFwiZW5kXCJcblx0XHQgKiB9KTtcblx0XHQgKiBjaGFpbi52YWx1ZSA9IFwiYmVnaW5uaW5nXCI7XG5cdFx0ICogY2hhaW4ubmV4dCgpOyAvL3JldHVybnMgXCJlbmRcIiB3aXRoIDgwJSBwcm9iYWJpbGl0eSBvciBcIm1pZGRsZVwiIHdpdGggMjAlLlxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gdmFsdWVzIEFuIG9iamVjdCB3aXRoIHRoZSBzdGF0ZSBuYW1lcyBhcyB0aGUga2V5c1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgbmV4dCBzdGF0ZShzKSBhcyB0aGUgdmFsdWVzLiBcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdiA9IGZ1bmN0aW9uICh2YWx1ZXMsIGluaXRpYWwpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIE1hcmtvdiB2YWx1ZXMgd2l0aCBzdGF0ZXMgYXMgdGhlIGtleXNcblx0XHRcdCAqICBhbmQgbmV4dCBzdGF0ZShzKSBhcyB0aGUgdmFsdWVzLiBcblx0XHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBUb25lLmRlZmF1bHRBcmcodmFsdWVzLCB7fSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIE1hcmtvdiB2YWx1ZXMuIFRoZSBuZXh0XG5cdFx0XHQgKiAgc3RhdGUgd2lsbCBiZSBldmFsdWF0ZWQgYW5kIHJldHVybmVkIHdoZW4gVG9uZS5DdHJsTWFya292Lm5leHRcblx0XHRcdCAqICBpcyBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKGluaXRpYWwsIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKVswXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsTWFya292KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBuZXh0IHN0YXRlIG9mIHRoZSBNYXJrb3YgdmFsdWVzLiBcblx0XHQgKiAgQHJldHVybiAge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy52YWx1ZXMuaGFzT3duUHJvcGVydHkodGhpcy52YWx1ZSkpIHtcblx0ICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnZhbHVlc1t0aGlzLnZhbHVlXTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheShuZXh0KSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGRpc3RyaWJ1dGlvbiA9IHRoaXMuX2dldFByb2JEaXN0cmlidXRpb24obmV4dCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgcmFuZCA9IE1hdGgucmFuZG9tKCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXN0cmlidXRpb24ubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZGlzdCA9IGRpc3RyaWJ1dGlvbltpXTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocmFuZCA+IHRvdGFsICYmIHJhbmQgPCB0b3RhbCArIGRpc3QpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNob3NlbiA9IG5leHRbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGNob3NlbikpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjaG9zZW4udmFsdWU7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gY2hvc2VuO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IGRpc3Q7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV4dDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2hvb3NlIHJhbmRvbWx5IGZyb20gYW4gYXJyYXkgd2VpZ2h0ZWQgb3B0aW9ucyBpbiB0aGUgZm9ybSBcblx0XHQgKiAge1wic3RhdGVcIiA6IHN0cmluZywgXCJwcm9iYWJpbGl0eVwiIDogbnVtYmVyfSBvciBhbiBhcnJheSBvZiB2YWx1ZXNcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICBvcHRpb25zIFxuXHRcdCAqICBAcmV0dXJuICB7QXJyYXl9ICBUaGUgcmFuZG9tbHkgc2VsZWN0ZWQgY2hvaWNlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YucHJvdG90eXBlLl9nZXRQcm9iRGlzdHJpYnV0aW9uID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICB2YXIgZGlzdHJpYnV0aW9uID0gW107XG5cdCAgICAgICAgdmFyIHRvdGFsID0gMDtcblx0ICAgICAgICB2YXIgbmVlZHNOb3JtYWxpemluZyA9IGZhbHNlO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgb3B0aW9uID0gb3B0aW9uc1tpXTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3Qob3B0aW9uKSkge1xuXHQgICAgICAgICAgICAgICAgbmVlZHNOb3JtYWxpemluZyA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25baV0gPSBvcHRpb24ucHJvYmFiaWxpdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25baV0gPSAxIC8gb3B0aW9ucy5sZW5ndGg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdG90YWwgKz0gZGlzdHJpYnV0aW9uW2ldO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAobmVlZHNOb3JtYWxpemluZykge1xuXHQgICAgICAgICAgICAvL25vcm1hbGl6ZSB0aGUgdmFsdWVzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGlzdHJpYnV0aW9uLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25bal0gPSBkaXN0cmlidXRpb25bal0gLyB0b3RhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gZGlzdHJpYnV0aW9uO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5DdHJsTWFya292fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsTWFya292LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsTWFya292O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgR2VuZXJhdGUgcGF0dGVybnMgZnJvbSBhbiBhcnJheSBvZiB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBIYXMgYSBudW1iZXIgb2YgYXJwZWdnaWF0aW9uIGFuZCByYW5kb21pemVkXG5cdFx0ICogICAgICAgICBzZWxlY3Rpb24gcGF0dGVybnMuIFxuXHRcdCAqICAgICAgICAgICA8dWw+XG5cdFx0ICogIFx0ICAgICAgICA8bGk+XCJ1cFwiIC0gY3ljbGVzIHVwd2FyZDwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImRvd25cIiAtIGN5Y2xlcyBkb3dud2FyZDwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInVwRG93blwiIC0gdXAgdGhlbiBhbmQgZG93bjwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImRvd25VcFwiIC0gY3ljbGVzIGRvd24gdGhlbiBhbmQgdXA8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJhbHRlcm5hdGVVcFwiIC0ganVtcCB1cCB0d28gYW5kIGRvd24gb25lPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwiYWx0ZXJuYXRlRG93blwiIC0ganVtcCBkb3duIHR3byBhbmQgdXAgb25lPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwicmFuZG9tXCIgLSByYW5kb21seSBzZWxlY3QgYW4gaW5kZXg8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJyYW5kb21XYWxrXCIgLSByYW5kb21seSBtb3ZlcyBvbmUgaW5kZXggYXdheSBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwicmFuZG9tT25jZVwiIC0gcmFuZG9tbHkgc2VsZWN0IGFuIGluZGV4IHdpdGhvdXQgcmVwZWF0aW5nIHVudGlsIGFsbCB2YWx1ZXMgaGF2ZSBiZWVuIGNob3Nlbi48L2xpPlxuXHRcdCAqICAgICBcdFx0PC91bD5cblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICB2YWx1ZXMgICBBbiBhcnJheSBvZiBvcHRpb25zIHRvIGNob29zZSBmcm9tLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkN0cmxQYXR0ZXJuLlR5cGU9fSAgdHlwZSAgVGhlIG5hbWUgb2YgdGhlIHBhdHRlcm4uXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd2YWx1ZXMnLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLkN0cmxQYXR0ZXJuKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIHZhbHVlcyB0byBhcnBlZ2dpYXRlIG92ZXJcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG9wdGlvbnMudmFsdWVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSB2YWx1ZXMgYXJyYXlcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0eXBlIHBsYWNlaG9sZGVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3RybFBhdHRlcm4uVHlwZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2h1ZmZsZWQgdmFsdWVzIGZvciB0aGUgUmFuZG9tT25jZSB0eXBlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRpcmVjdGlvbiBvZiB0aGUgbW92ZW1lbnRcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkN0cmxQYXR0ZXJuKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgQ29udHJvbCBQYXR0ZXJuc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5UeXBlID0ge1xuXHQgICAgICAgIFVwOiAndXAnLFxuXHQgICAgICAgIERvd246ICdkb3duJyxcblx0ICAgICAgICBVcERvd246ICd1cERvd24nLFxuXHQgICAgICAgIERvd25VcDogJ2Rvd25VcCcsXG5cdCAgICAgICAgQWx0ZXJuYXRlVXA6ICdhbHRlcm5hdGVVcCcsXG5cdCAgICAgICAgQWx0ZXJuYXRlRG93bjogJ2FsdGVybmF0ZURvd24nLFxuXHQgICAgICAgIFJhbmRvbTogJ3JhbmRvbScsXG5cdCAgICAgICAgUmFuZG9tV2FsazogJ3JhbmRvbVdhbGsnLFxuXHQgICAgICAgIFJhbmRvbU9uY2U6ICdyYW5kb21PbmNlJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuIFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXAsXG5cdCAgICAgICAgJ3ZhbHVlcyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB2YWx1ZSBhdCB0aGUgY3VycmVudCBpbmRleCBvZiB0aGUgcGF0dGVybi5cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkN0cmxQYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvL3NvbWUgc2FmZWd1YXJkc1xuXHQgICAgICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMF07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5pbmRleCA9IE1hdGgubWluKHRoaXMuaW5kZXgsIHRoaXMudmFsdWVzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZXNbdGhpcy5pbmRleF07XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoICE9PSB0aGlzLl9zaHVmZmxlZC5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaHVmZmxlVmFsdWVzKCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB2YWwgPSB0aGlzLnZhbHVlc1t0aGlzLl9zaHVmZmxlZFt0aGlzLmluZGV4XV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGF0dGVybiB1c2VkIHRvIHNlbGVjdCB0aGUgbmV4dFxuXHRcdCAqICBpdGVtIGZyb20gdGhlIHZhbHVlcyBhcnJheVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge1RvbmUuQ3RybFBhdHRlcm4uVHlwZX1cblx0XHQgKiAgQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IG51bGw7XG5cdCAgICAgICAgICAgIC8vdGhlIGZpcnN0IGluZGV4XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXAgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwRG93biB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duVXAgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZURvd24pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnZhbHVlcy5sZW5ndGggLSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vdGhlIGRpcmVjdGlvblxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwRG93biB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93blVwIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVEb3duKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL3JhbmRvbXNcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaHVmZmxlVmFsdWVzKCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5SYW5kb20pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnZhbHVlcy5sZW5ndGgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBuZXh0IHZhbHVlIGdpdmVuIHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0ICogIGFuZCBwYXR0ZXJuLlxuXHRcdCAqICBAcmV0dXJuIHsqfSBUaGUgbmV4dCB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0ICAgICAgICAvL2Nob29zZSB0aGUgbmV4dCBpbmRleFxuXHQgICAgICAgIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bikge1xuXHQgICAgICAgICAgICB0aGlzLmluZGV4LS07XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcERvd24gfHwgdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd25VcCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgtLTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnZhbHVlcy5sZW5ndGgpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbVdhbGspIHtcblx0ICAgICAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPCAwLjUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgtLTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLm1heCh0aGlzLmluZGV4LCAwKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLm1pbih0aGlzLmluZGV4LCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbU9uY2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICAgICAgLy9yZXNodWZmbGUgdGhlIHZhbHVlcyBmb3IgbmV4dCB0aW1lXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaHVmZmxlVmFsdWVzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVVcCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCAtPSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID49IHRoaXMudmFsdWVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVEb3duKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kaXJlY3Rpb24gPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4IC09IDI7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTaHVmZmxlcyB0aGUgdmFsdWVzIGFuZCBwbGFjZXMgdGhlIHJlc3VsdHMgaW50byB0aGUgX3NodWZmbGVkXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZS5fc2h1ZmZsZVZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY29weSA9IFtdO1xuXHQgICAgICAgIHRoaXMuX3NodWZmbGVkID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBjb3B5W2ldID0gaTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgd2hpbGUgKGNvcHkubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICB2YXIgcmFuZFZhbCA9IGNvcHkuc3BsaWNlKE1hdGguZmxvb3IoY29weS5sZW5ndGggKiBNYXRoLnJhbmRvbSgpKSwgMSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NodWZmbGVkLnB1c2gocmFuZFZhbFswXSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DdHJsUGF0dGVybn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxQYXR0ZXJuO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIENob29zZSBhIHJhbmRvbSB2YWx1ZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHJhbmRvbVdhbGsgPSBuZXcgVG9uZS5DdHJsUmFuZG9tKHtcblx0XHQgKiBcdFwibWluXCIgOiAwLFxuXHRcdCAqIFx0XCJtYXhcIiA6IDEwLFxuXHRcdCAqIFx0XCJpbnRlZ2VyXCIgOiB0cnVlXG5cdFx0ICogfSk7XG5cdFx0ICogcmFuZG9tV2Fsay5ldmFsKCk7XG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8VGltZT19IG1pbiBUaGUgbWluaW11bSByZXR1cm4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfFRpbWU9fSBtYXggVGhlIG1heGltdW0gcmV0dXJuIHZhbHVlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUmFuZG9tID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ21pbicsXG5cdCAgICAgICAgICAgICdtYXgnXG5cdCAgICAgICAgXSwgVG9uZS5DdHJsUmFuZG9tKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pbmltdW0gcmV0dXJuIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ8VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWluID0gb3B0aW9ucy5taW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1heGltdW0gcmV0dXJuIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ8VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWF4ID0gb3B0aW9ucy5tYXg7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSWYgdGhlIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgYW4gaW50ZWdlclxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW50ZWdlciA9IG9wdGlvbnMuaW50ZWdlcjtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkN0cmxSYW5kb20pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxSYW5kb20uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgJ2ludGVnZXInOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gYSByYW5kb20gdmFsdWUgYmV0d2VlbiBtaW4gYW5kIG1heC4gXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsUmFuZG9tI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxSYW5kb20ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLnRvU2Vjb25kcyh0aGlzLm1pbik7XG5cdCAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLnRvU2Vjb25kcyh0aGlzLm1heCk7XG5cdCAgICAgICAgICAgIHZhciByYW5kID0gTWF0aC5yYW5kb20oKTtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IHJhbmQgKiBtaW4gKyAoMSAtIHJhbmQpICogbWF4O1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbnRlZ2VyKSB7XG5cdCAgICAgICAgICAgICAgICB2YWwgPSBNYXRoLmZsb29yKHZhbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxSYW5kb207XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBkYXRhIHN0cnVjdHVyZSBmb3IgaG9sZGluZyBtdWx0aXBsZSBidWZmZXJzLlxuXHRcdCAqICBcblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fEFycmF5fSAgICB1cmxzICAgICAgQW4gb2JqZWN0IGxpdGVyYWwgb3IgYXJyYXlcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdXJscyB0byBsb2FkLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVmZmVycyBhcmUgbG9hZGVkLiBcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9sb2FkIGEgd2hvbGUgYmFuayBvZiBwaWFubyBzYW1wbGVzXG5cdFx0ICogdmFyIHBpYW5vU2FtcGxlcyA9IG5ldyBUb25lLkJ1ZmZlcnMoe1xuXHRcdCAqIFx0XCJDNFwiIDogXCJwYXRoL3RvL0M0Lm1wM1wiXG5cdFx0ICogXHRcIkMjNFwiIDogXCJwYXRoL3RvL0MjNC5tcDNcIlxuXHRcdCAqIFx0XCJENFwiIDogXCJwYXRoL3RvL0Q0Lm1wM1wiXG5cdFx0ICogXHRcIkQjNFwiIDogXCJwYXRoL3RvL0QjNC5tcDNcIlxuXHRcdCAqIFx0Li4uXG5cdFx0ICogfSwgZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vcGxheSBvbmUgb2YgdGhlIHNhbXBsZXMgd2hlbiB0aGV5IGFsbCBsb2FkXG5cdFx0ICogXHRwbGF5ZXIuYnVmZmVyID0gcGlhbm9TYW1wbGVzLmdldChcIkM0XCIpO1xuXHRcdCAqIFx0cGxheWVyLnN0YXJ0KCk7XG5cdFx0ICogfSk7XG5cdFx0ICogXHRAZXhhbXBsZVxuXHRcdCAqIC8vVG8gcGFzcyBpbiBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXJcblx0XHQgKiB2YXIgYnVmZmVycyA9IG5ldyBUb25lLkJ1ZmZlcnModXJscywge1xuXHRcdCAqIFx0XCJvbmxvYWRcIiA6IGNhbGxiYWNrLFxuXHRcdCAqIFx0XCJiYXNlVXJsXCIgOiBcIi4uL3BhdGgvdG8vYXVkaW8vXCJcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzID0gZnVuY3Rpb24gKHVybHMpIHtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgdXJscyBmcm9tIHRoZSBvcHRpb25zXG5cdCAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIGFyZ3Muc2hpZnQoKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJncywgW1xuXHQgICAgICAgICAgICAnb25sb2FkJyxcblx0ICAgICAgICAgICAgJ2Jhc2VVcmwnXG5cdCAgICAgICAgXSwgVG9uZS5CdWZmZXJzKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxsIG9mIHRoZSBidWZmZXJzXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSB7fTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHBhdGggd2hpY2ggaXMgcHJlZml4ZWQgYmVmb3JlIGV2ZXJ5IHVybC5cblx0XHRcdCAqICBAdHlwZSAge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcblx0ICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQgPSAwO1xuXHQgICAgICAgIC8vYWRkIGVhY2ggb25lXG5cdCAgICAgICAgZm9yICh2YXIga2V5IGluIHVybHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50Kys7XG5cdCAgICAgICAgICAgIHRoaXMuYWRkKGtleSwgdXJsc1trZXldLCB0aGlzLl9idWZmZXJMb2FkZWQuYmluZCh0aGlzLCBvcHRpb25zLm9ubG9hZCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJ1ZmZlcnMpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2Jhc2VVcmwnOiAnJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcnVlIGlmIHRoZSBidWZmZXJzIG9iamVjdCBoYXMgYSBidWZmZXIgYnkgdGhhdCBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgbmFtZSAgVGhlIGtleSBvciBpbmRleCBvZiB0aGUgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuXG5cdFx0ICogIEByZXR1cm4gIHtCb29sZWFufVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXJzLmhhc093blByb3BlcnR5KG5hbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgYSBidWZmZXIgYnkgbmFtZS4gSWYgYW4gYXJyYXkgd2FzIGxvYWRlZCwgXG5cdFx0ICogIHRoZW4gdXNlIHRoZSBhcnJheSBpbmRleC5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIG5hbWUgIFRoZSBrZXkgb3IgaW5kZXggb2YgdGhlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuaGFzKG5hbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXJzW25hbWVdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJzOiBubyBidWZmZXIgbmFtZWQgJyArIG5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQSBidWZmZXIgd2FzIGxvYWRlZC4gZGVjcmVtZW50IHRoZSBjb3VudGVyLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5fYnVmZmVyTG9hZGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50LS07XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmdDb3VudCA9PT0gMCAmJiBjYWxsYmFjaykge1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJzI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVycy5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0xvYWRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGJ1ZmZOYW1lIGluIHRoaXMuX2J1ZmZlcnMpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBidWZmID0gdGhpcy5nZXQoYnVmZk5hbWUpO1xuXHQgICAgICAgICAgICAgICAgaXNMb2FkZWQgPSBpc0xvYWRlZCAmJiBidWZmLmxvYWRlZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gaXNMb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgYnVmZmVyIGJ5IG5hbWUgYW5kIHVybCB0byB0aGUgQnVmZmVyc1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIG5hbWUgICAgICBBIHVuaXF1ZSBuYW1lIHRvIGdpdmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8VG9uZS5CdWZmZXJ8QXVkaW9idWZmZXJ9ICB1cmwgIEVpdGhlciB0aGUgdXJsIG9mIHRoZSBidWZlciwgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhZGRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICBjYWxsYmFjayA9IFRvbmUuZGVmYXVsdEFyZyhjYWxsYmFjaywgVG9uZS5ub09wKTtcblx0ICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXSA9IHVybDtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh1cmwgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzW25hbWVdID0gbmV3IFRvbmUuQnVmZmVyKHVybCk7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyh1cmwpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0gPSBuZXcgVG9uZS5CdWZmZXIodGhpcy5iYXNlVXJsICsgdXJsLCBjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyc30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuX2J1ZmZlcnMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkJ1ZmZlcnM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIGJ1c2VzIGFyZSBhbm90aGVyIHdheSBvZiByb3V0aW5nIGF1ZGlvXG5cdFx0ICpcblx0XHQgKiAgYXVnbWVudHMgVG9uZS5wcm90b3R5cGUgdG8gaW5jbHVkZSBzZW5kIGFuZCByZWNpZXZlXG5cdFx0ICovXG5cdCAgICAvKipcblx0XHQgKiAgQWxsIG9mIHRoZSByb3V0ZXNcblx0XHQgKlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgQnVzZXMgPSB7fTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZW5kIHRoaXMgc2lnbmFsIHRvIHRoZSBjaGFubmVsIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gY2hhbm5lbE5hbWUgQSBuYW1lZCBjaGFubmVsIHRvIHNlbmQgdGhlIHNpZ25hbCB0by5cblx0XHQgKiAgQHBhcmFtICB7RGVjaWJlbHN9IGFtb3VudCBUaGUgYW1vdW50IG9mIHRoZSBzb3VyY2UgdG8gc2VuZCB0byB0aGUgYnVzLlxuXHRcdCAqICBAcmV0dXJuIHtHYWluTm9kZX0gVGhlIGdhaW4gbm9kZSB3aGljaCBjb25uZWN0cyB0aGlzIG5vZGUgdG8gdGhlIGRlc2lyZWQgY2hhbm5lbC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIHRvIGFkanVzdCB0aGUgbGV2ZWxzIG9mIHRoZSBzZW5kLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zZW5kKFwicmV2ZXJiXCIsIC0xMik7XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKGNoYW5uZWxOYW1lLCBhbW91bnQpIHtcblx0ICAgICAgICBpZiAoIUJ1c2VzLmhhc093blByb3BlcnR5KGNoYW5uZWxOYW1lKSkge1xuXHQgICAgICAgICAgICBCdXNlc1tjaGFubmVsTmFtZV0gPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBhbW91bnQgPSBUb25lLmRlZmF1bHRBcmcoYW1vdW50LCAwKTtcblx0ICAgICAgICB2YXIgc2VuZEtub2IgPSBuZXcgVG9uZS5HYWluKGFtb3VudCwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICB0aGlzLmNvbm5lY3Qoc2VuZEtub2IpO1xuXHQgICAgICAgIHNlbmRLbm9iLmNvbm5lY3QoQnVzZXNbY2hhbm5lbE5hbWVdKTtcblx0ICAgICAgICByZXR1cm4gc2VuZEtub2I7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlY2lldmUgdGhlIGlucHV0IGZyb20gdGhlIGRlc2lyZWQgY2hhbm5lbE5hbWUgdG8gdGhlIGlucHV0XG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSBjaGFubmVsTmFtZSBBIG5hbWVkIGNoYW5uZWwgdG8gc2VuZCB0aGUgc2lnbmFsIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSBjaGFubmVsTnVtYmVyIFRoZSBjaGFubmVsIHRvIGNvbm5lY3QgdG9cblx0XHQgKiAgQHJldHVybnMge1RvbmV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiByZXZlcmJFZmZlY3QucmVjZWl2ZShcInJldmVyYlwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnJlY2VpdmUgPSBmdW5jdGlvbiAoY2hhbm5lbE5hbWUsIGlucHV0TnVtKSB7XG5cdCAgICAgICAgaWYgKCFCdXNlcy5oYXNPd25Qcm9wZXJ0eShjaGFubmVsTmFtZSkpIHtcblx0ICAgICAgICAgICAgQnVzZXNbY2hhbm5lbE5hbWVdID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgQnVzZXNbY2hhbm5lbE5hbWVdLmNvbm5lY3QodGhpcywgMCwgaW5wdXROdW0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vcmVtb3ZlIGFsbCB0aGUgc2VuZC9yZWNlaXZlcyB3aGVuIGEgbmV3IGF1ZGlvIGNvbnRleHQgaXMgcGFzc2VkIGluXG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0LkJ1c2VzKSB7XG5cdCAgICAgICAgICAgIEJ1c2VzID0gY29udGV4dC5CdXNlcztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBCdXNlcyA9IHt9O1xuXHQgICAgICAgICAgICBjb250ZXh0LkJ1c2VzID0gQnVzZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRHJhdyBpcyB1c2VmdWwgZm9yIHN5bmNocm9uaXppbmcgdmlzdWFscyBhbmQgYXVkaW8gZXZlbnRzLlxuXHRcdCAqICAgICAgICAgQ2FsbGJhY2tzIGZyb20gVG9uZS5UcmFuc3BvcnQgb3IgYW55IG9mIHRoZSBUb25lLkV2ZW50IGNsYXNzZXNcblx0XHQgKiAgICAgICAgIGFsd2F5cyBoYXBwZW4gX2JlZm9yZV8gdGhlIHNjaGVkdWxlZCB0aW1lIGFuZCBhcmUgbm90IHN5bmNocm9uaXplZFxuXHRcdCAqICAgICAgICAgdG8gdGhlIGFuaW1hdGlvbiBmcmFtZSBzbyB0aGV5IGFyZSBub3QgZ29vZCBmb3IgdHJpZ2dlcmluZyB0aWdodGx5XG5cdFx0ICogICAgICAgICBzeW5jaHJvbml6ZWQgdmlzdWFscyBhbmQgc291bmQuIFRvbmUuRHJhdyBtYWtlcyBpdCBlYXN5IHRvIHNjaGVkdWxlXG5cdFx0ICogICAgICAgICBjYWxsYmFja3MgdXNpbmcgdGhlIEF1ZGlvQ29udGV4dCB0aW1lIGFuZCB1c2VzIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cblx0XHQgKiAgICAgICAgIFxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly91c2UgdGhlIHRpbWUgYXJndW1lbnQgdG8gc2NoZWR1bGUgYSBjYWxsYmFjayB3aXRoIFRvbmUuRHJhd1xuXHRcdCAqIFx0VG9uZS5EcmF3LnNjaGVkdWxlKGZ1bmN0aW9uKCl7XG5cdFx0ICogXHRcdC8vZG8gZHJhd2luZyBvciBET00gbWFuaXB1bGF0aW9uIGhlcmVcblx0XHQgKiBcdH0sIHRpbWUpXG5cdFx0ICogfSwgXCIrMC41XCIpXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgZXZlbnRzLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFRvbmUuVGltZWxpbmUoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZHVyYXRpb24gYWZ0ZXIgd2hpY2ggZXZlbnRzIGFyZSBub3QgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAZGVmYXVsdCAwLjI1XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmV4cGlyYXRpb24gPSAwLjI1O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSBiZWZvcmUgdGhlIHNjaGVkdWxlZCB0aW1lIFxuXHRcdFx0ICogIHRoYXQgdGhlIGNhbGxiYWNrIGNhbiBiZSBpbnZva2VkLiBEZWZhdWx0IGlzXG5cdFx0XHQgKiAgaGFsZiB0aGUgdGltZSBvZiBhbiBhbmltYXRpb24gZnJhbWUgKDAuMDA4IHNlY29uZHMpLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBkZWZhdWx0IDAuMDA4XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmFudGljaXBhdGlvbiA9IDAuMDA4O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkcmF3IGxvb3Bcblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ib3VuZERyYXdMb29wID0gdGhpcy5fZHJhd0xvb3AuYmluZCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkRyYXcpO1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGEgZnVuY3Rpb24gYXQgdGhlIGdpdmVuIHRpbWUgdG8gYmUgaW52b2tlZFxuXHRcdCAqICBvbiB0aGUgbmVhcmVzdCBhbmltYXRpb24gZnJhbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIENhbGxiYWNrIGlzIGludm9rZWQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICAgIHRpbWUgICAgICBUaGUgdGltZSByZWxhdGl2ZSB0byB0aGUgQXVkaW9Db250ZXh0IHRpbWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGludm9rZSB0aGUgY2FsbGJhY2suXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkRyYXd9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdy5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuXHQgICAgICAgICAgICB0aW1lOiB0aGlzLnRvU2Vjb25kcyh0aW1lKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGRyYXcgbG9vcCBvbiB0aGUgZmlyc3QgZXZlbnRcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYm91bmREcmF3TG9vcCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgZXZlbnRzIHNjaGVkdWxlZCBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIGFmdGVyICBUaW1lIGFmdGVyIHdoaWNoIHNjaGVkdWxlZCBldmVudHMgd2lsbCBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzY2hlZHVsaW5nIHRpbWVsaW5lLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5EcmF3fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EcmF3LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKHRoaXMudG9TZWNvbmRzKGFmdGVyKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkcmF3IGxvb3Bcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdy5wcm90b3R5cGUuX2RyYXdMb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub3cgPSBUb25lLm5vdygpO1xuXHQgICAgICAgIHdoaWxlICh0aGlzLl9ldmVudHMubGVuZ3RoICYmIHRoaXMuX2V2ZW50cy5wZWVrKCkudGltZSAtIHRoaXMuYW50aWNpcGF0aW9uIDw9IG5vdykge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHMuc2hpZnQoKTtcblx0ICAgICAgICAgICAgaWYgKG5vdyAtIGV2ZW50LnRpbWUgPD0gdGhpcy5leHBpcmF0aW9uKSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5jYWxsYmFjaygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYm91bmREcmF3TG9vcCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8vbWFrZSBhIHNpbmdsZXRvblxuXHQgICAgVG9uZS5EcmF3ID0gbmV3IFRvbmUuRHJhdygpO1xuXHQgICAgcmV0dXJuIFRvbmUuRHJhdztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCb3RoIFRvbmUuUGFubmVyM0QgYW5kIFRvbmUuTGlzdGVuZXIgaGF2ZSBhIHBvc2l0aW9uIGluIDNEIHNwYWNlXG5cdFx0ICogICAgICAgICAgdXNpbmcgYSByaWdodC1oYW5kZWQgY2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtLlxuXHRcdCAqICAgICAgICAgIFRoZSB1bml0cyB1c2VkIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBhcmUgbm90IGRlZmluZWQ7XG5cdFx0ICogICAgICAgICAgdGhlc2UgY29vcmRpbmF0ZXMgYXJlIGluZGVwZW5kZW50L2ludmFyaWFudCBvZiBhbnkgcGFydGljdWxhclxuXHRcdCAqICAgICAgICAgIHVuaXRzIHN1Y2ggYXMgbWV0ZXJzIG9yIGZlZXQuIFRvbmUuUGFubmVyM0Qgb2JqZWN0cyBoYXZlIGFuIGZvcndhcmRcblx0XHQgKiAgICAgICAgICB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBkaXJlY3Rpb24gdGhlIHNvdW5kIGlzIHByb2plY3RpbmcuIEFkZGl0aW9uYWxseSxcblx0XHQgKiAgICAgICAgICB0aGV5IGhhdmUgYSBzb3VuZCBjb25lIHJlcHJlc2VudGluZyBob3cgZGlyZWN0aW9uYWwgdGhlIHNvdW5kIGlzLlxuXHRcdCAqICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgc291bmQgY291bGQgYmUgb21uaWRpcmVjdGlvbmFsLCBpbiB3aGljaCBjYXNlIGl0IHdvdWxkXG5cdFx0ICogICAgICAgICAgYmUgaGVhcmQgYW55d2hlcmUgcmVnYXJkbGVzcyBvZiBpdHMgZm9yd2FyZCwgb3IgaXQgY2FuIGJlIG1vcmUgZGlyZWN0aW9uYWxcblx0XHQgKiAgICAgICAgICBhbmQgaGVhcmQgb25seSBpZiBpdCBpcyBmYWNpbmcgdGhlIGxpc3RlbmVyLiBUb25lLkxpc3RlbmVyIG9iamVjdHNcblx0XHQgKiAgICAgICAgICAocmVwcmVzZW50aW5nIGEgcGVyc29uJ3MgZWFycykgaGF2ZSBhbiBmb3J3YXJkIGFuZCB1cCB2ZWN0b3Jcblx0XHQgKiAgICAgICAgICByZXByZXNlbnRpbmcgaW4gd2hpY2ggZGlyZWN0aW9uIHRoZSBwZXJzb24gaXMgZmFjaW5nLiBCZWNhdXNlIGJvdGggdGhlXG5cdFx0ICogICAgICAgICAgc291cmNlIHN0cmVhbSBhbmQgdGhlIGxpc3RlbmVyIGNhbiBiZSBtb3ZpbmcsIHRoZXkgYm90aCBoYXZlIGEgdmVsb2NpdHlcblx0XHQgKiAgICAgICAgICB2ZWN0b3IgcmVwcmVzZW50aW5nIGJvdGggdGhlIHNwZWVkIGFuZCBkaXJlY3Rpb24gb2YgbW92ZW1lbnQuIFRha2VuIHRvZ2V0aGVyLFxuXHRcdCAqICAgICAgICAgIHRoZXNlIHR3byB2ZWxvY2l0aWVzIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgZG9wcGxlciBzaGlmdCBlZmZlY3Qgd2hpY2ggY2hhbmdlcyB0aGUgcGl0Y2guXG5cdFx0ICogICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBOb3RlOiB0aGUgcG9zaXRpb24gb2YgdGhlIExpc3RlbmVyIHdpbGwgaGF2ZSBubyBlZmZlY3Qgb24gbm9kZXMgbm90IGNvbm5lY3RlZCB0byBhIFRvbmUuUGFubmVyM0Rcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IGZvcndhcmQgb3JpZW50YXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IFtcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMFxuXHQgICAgICAgIF07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IFtcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMFxuXHQgICAgICAgIF07XG5cdCAgICAgICAgVG9uZS5nZXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gc2V0IHRoZSBkZWZhdWx0IHBvc2l0aW9uL2ZvcndhcmRcblx0ICAgICAgICAgICAgdGhpcy5zZXQoTGlzdGVuZXJDb25zdHJ1Y3Rvci5kZWZhdWx0cyk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxpc3RlbmVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0cyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Bvc2l0aW9uWCc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWSc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWic6IDAsXG5cdCAgICAgICAgJ2ZvcndhcmRYJzogMCxcblx0ICAgICAgICAnZm9yd2FyZFknOiAwLFxuXHQgICAgICAgICdmb3J3YXJkWic6IDEsXG5cdCAgICAgICAgJ3VwWCc6IDAsXG5cdCAgICAgICAgJ3VwWSc6IDEsXG5cdCAgICAgICAgJ3VwWic6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcmFtcCB0aW1lIHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIHNldFRhcmdldEF0VGltZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLl9yYW1wVGltZUNvbnN0YW50ID0gMC4wMTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGlzdGVuZXIgaW4gM2Qgc3BhY2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEByZXR1cm4ge1RvbmUuTGlzdGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24gKHgsIHksIHopIHtcblx0ICAgICAgICBpZiAodGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWC5zZXRUYXJnZXRBdFRpbWUoeCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuc2V0UG9zaXRpb24oeCwgeSwgeik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGxpc3RlbmVyIHVzaW5nIHR3byB2ZWN0b3JzLCB0aGUgZm9yd2FyZFxuXHRcdCAqICB2ZWN0b3IgKHdoaWNoIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgZmFjaW5nKSBhbmQgdGhlIHVwIHZlY3RvclxuXHRcdCAqICAod2hpY2ggdGhlIHVwIGRpcmVjdGlvbiBvZiB0aGUgbGlzdGVuZXIpLiBBbiB1cCB2ZWN0b3Jcblx0XHQgKiAgb2YgMCwgMCwgMSBpcyBlcXVpdmFsZW50IHRvIHRoZSBsaXN0ZW5lciBzdGFuZGluZyB1cCBpbiB0aGUgWiBkaXJlY3Rpb24uXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHVwWFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB1cFlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdXBaXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuTGlzdGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLnNldE9yaWVudGF0aW9uID0gZnVuY3Rpb24gKHgsIHksIHosIHVwWCwgdXBZLCB1cFopIHtcblx0ICAgICAgICBpZiAodGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRYKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuZm9yd2FyZFguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRaLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIudXBYLnNldFRhcmdldEF0VGltZSh1cFgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci51cFkuc2V0VGFyZ2V0QXRUaW1lKHVwWSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnVwWi5zZXRUYXJnZXRBdFRpbWUodXBaLCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5zZXRPcmllbnRhdGlvbih4LCB5LCB6LCB1cFgsIHVwWSwgdXBaKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAncG9zaXRpb25YJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25ZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdwb3NpdGlvblknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3Bvc2l0aW9uWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcnMgZnJvbnQgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHdoaWNoIHdheSB0aGV5IGFyZSBmYWNpbmcuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBmb3J3YXJkWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAnZm9yd2FyZFgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXJzIGZyb250IGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB3aGljaCB3YXkgdGhleSBhcmUgZmFjaW5nLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgZm9yd2FyZFlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ2ZvcndhcmRZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblsxXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzFdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVycyBmcm9udCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgd2hpY2ggd2F5IHRoZXkgYXJlIGZhY2luZy5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIGZvcndhcmRaXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdmb3J3YXJkWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcidzIHVwIGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB0aGUgZGlyZWN0aW9uIHRoZSBsaXN0ZW5lciBpcyBzdGFuZGluZyBpbi5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHVwWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAndXBYJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblszXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzNdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVyJ3MgdXAgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHRoZSBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIHN0YW5kaW5nIGluLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgdXBZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICd1cFknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzRdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bNF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXIncyB1cCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgdGhlIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgc3RhbmRpbmcgaW4uXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSB1cFpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3VwWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bNV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvbls1XTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTGlzdGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvL1NJTkdMRVRPTiBTRVRVUFxuXHQgICAgdmFyIExpc3RlbmVyQ29uc3RydWN0b3IgPSBUb25lLkxpc3RlbmVyO1xuXHQgICAgVG9uZS5MaXN0ZW5lciA9IG5ldyBMaXN0ZW5lckNvbnN0cnVjdG9yKCk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0Lkxpc3RlbmVyIGluc3RhbmNlb2YgTGlzdGVuZXJDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAvL2Egc2luZ2xlIGxpc3RlbmVyIG9iamVjdFxuXHQgICAgICAgICAgICBUb25lLkxpc3RlbmVyID0gY29udGV4dC5MaXN0ZW5lcjtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL21ha2UgbmV3IExpc3RlbmVyIGluc2lkZXNcblx0ICAgICAgICAgICAgVG9uZS5MaXN0ZW5lciA9IG5ldyBMaXN0ZW5lckNvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGNvbnRleHQuTGlzdGVuZXIgPSBUb25lLkxpc3RlbmVyO1xuXHQgICAgfSk7XG5cdCAgICAvL0VORCBTSU5HTEVUT04gU0VUVVBcblx0ICAgIHJldHVybiBUb25lLkxpc3RlbmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBCZWNhdXNlIG9mIGEgYnVnIGluIGlPUyBjYXVzaW5nIHRoZSBjdXJyZW50VGltZSB0byBpbmNyZW1lbnRcblx0XHQgKiBiZWZvcmUgdGhlIHJlbmRlcmluZyBpcyBzdGFydGVkLCBzb21ldGltZXMgaXQgdGFrZXMgbXVsdGlwbGVcblx0XHQgKiBhdHRlbXB0cyB0byByZW5kZXIgdGhlIGF1ZGlvIGNvcnJlY3RseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgZnVuY3Rpb24gYXR0ZW1wdFJlbmRlcihjYWxsYmFjaywgZHVyYXRpb24sIHNhbXBsZVJhdGUsIHRyaWVzKSB7XG5cdCAgICAgICAgdHJpZXMgPSBUb25lLmRlZmF1bHRBcmcodHJpZXMsIDApO1xuXHQgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IFRvbmUuT2ZmbGluZUNvbnRleHQoMiwgZHVyYXRpb24sIHNhbXBsZVJhdGUpO1xuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgLy9pbnZva2UgdGhlIGNhbGxiYWNrL3NjaGVkdWxpbmdcblx0ICAgICAgICB2YXIgcmVzcG9uc2UgPSBjYWxsYmFjayhUb25lLlRyYW5zcG9ydCk7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuY3VycmVudFRpbWUgPiAwICYmIHRyaWVzIDwgMTAwMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFJlbmRlcihjYWxsYmFjaywgZHVyYXRpb24sIHNhbXBsZVJhdGUsICsrdHJpZXMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgICAgICAncmVzcG9uc2UnOiByZXNwb25zZSxcblx0ICAgICAgICAgICAgICAgICdjb250ZXh0JzogY29udGV4dFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0ICAgIC8qKlxuXHRcdCAqICBHZW5lcmF0ZSBhIGJ1ZmZlciBieSByZW5kZXJpbmcgYWxsIG9mIHRoZSBUb25lLmpzIGNvZGUgd2l0aGluIHRoZSBjYWxsYmFjayB1c2luZyB0aGUgT2ZmbGluZUF1ZGlvQ29udGV4dC5cblx0XHQgKiAgVGhlIE9mZmxpbmVBdWRpb0NvbnRleHQgaXMgY2FwYWJsZSBvZiByZW5kZXJpbmcgbXVjaCBmYXN0ZXIgdGhhbiByZWFsIHRpbWUgaW4gbWFueSBjYXNlcy5cblx0XHQgKiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFsc28gcGFzc2VzIGluIGFuIG9mZmxpbmUgaW5zdGFuY2Ugb2YgVG9uZS5UcmFuc3BvcnQgd2hpY2ggY2FuIGJlIHVzZWRcblx0XHQgKiAgdG8gc2NoZWR1bGUgZXZlbnRzIGFsb25nIHRoZSBUcmFuc3BvcnQuICoqTk9URSoqIE9mZmxpbmVBdWRpb0NvbnRleHQgaGFzIHRoZSBzYW1lIHJlc3RyaWN0aW9uc1xuXHRcdCAqICBhcyB0aGUgQXVkaW9Db250ZXh0IGluIHRoYXQgb24gY2VydGFpbiBwbGF0Zm9ybXMgKGxpa2UgaU9TKSBpdCBtdXN0IGJlIGludm9rZWQgYnkgYW4gZXhwbGljaXRcblx0XHQgKiAgdXNlciBhY3Rpb24gbGlrZSBhIGNsaWNrIG9yIHRhcC4gXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIEFsbCBUb25lLmpzIG5vZGVzIHdoaWNoIGFyZSBjcmVhdGVkIGFuZCBzY2hlZHVsZWQgd2l0aGluIHRoaXMgY2FsbGJhY2sgYXJlIHJlY29yZGVkIGludG8gdGhlIG91dHB1dCBCdWZmZXIuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICBkdXJhdGlvbiAgICAgdGhlIGFtb3VudCBvZiB0aW1lIHRvIHJlY29yZCBmb3IuXG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfSAgVGhlIHByb21pc2Ugd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBUb25lLkJ1ZmZlciBvZiB0aGUgcmVjb3JkZWQgb3V0cHV0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcmVuZGVyIDIgc2Vjb25kcyBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqIFRvbmUuT2ZmbGluZShmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly9vbmx5IG5vZGVzIGNyZWF0ZWQgaW4gdGhpcyBjYWxsYmFjayB3aWxsIGJlIHJlY29yZGVkXG5cdFx0ICogXHR2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS50b01hc3RlcigpLnN0YXJ0KDApXG5cdFx0ICogXHQvL3NjaGVkdWxlIHRoZWlyIGV2ZW50c1xuXHRcdCAqIH0sIDIpLnRoZW4oZnVuY3Rpb24oYnVmZmVyKXtcblx0XHQgKiBcdC8vZG8gc29tZXRoaW5nIHdpdGggdGhlIG91dHB1dCBidWZmZXJcblx0XHQgKiB9KVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gYWxzbyBzY2hlZHVsZSBldmVudHMgYWxvbmcgdGhlIFRyYW5zcG9ydFxuXHRcdCAqIC8vdXNpbmcgdGhlIHBhc3NlZCBpbiBPZmZsaW5lIFRyYW5zcG9ydFxuXHRcdCAqIFRvbmUuT2ZmbGluZShmdW5jdGlvbihUcmFuc3BvcnQpe1xuXHRcdCAqIFx0dmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS50b01hc3RlcigpXG5cdFx0ICogXHRUcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHRcdG9zYy5zdGFydCh0aW1lKS5zdG9wKHRpbWUgKyAwLjEpXG5cdFx0ICogXHR9LCAxKVxuXHRcdCAqIFx0VHJhbnNwb3J0LnN0YXJ0KDAuMilcblx0XHQgKiB9LCA0KS50aGVuKGZ1bmN0aW9uKGJ1ZmZlcil7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSBvdXRwdXQgYnVmZmVyXG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgZHVyYXRpb24pIHtcblx0ICAgICAgICAvL3NldCB0aGUgT2ZmbGluZUF1ZGlvQ29udGV4dFxuXHQgICAgICAgIHZhciBzYW1wbGVSYXRlID0gVG9uZS5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsQ29udGV4dCA9IFRvbmUuY29udGV4dDtcblx0ICAgICAgICB2YXIgcmVuZGVyUmV0ID0gYXR0ZW1wdFJlbmRlcihjYWxsYmFjaywgZHVyYXRpb24sIHNhbXBsZVJhdGUpO1xuXHQgICAgICAgIHZhciByZXNwb25zZSA9IHJlbmRlclJldC5yZXNwb25zZTtcblx0ICAgICAgICB2YXIgY29udGV4dCA9IHJlbmRlclJldC5jb250ZXh0O1xuXHQgICAgICAgIHZhciByZXQ7XG5cdCAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHQgICAgICAgICAgICAvL3dhaXQgZm9yIHRoZSBwcm9taXNlIHRvIHJlc29sdmVcblx0ICAgICAgICAgICAgcmV0ID0gcmVzcG9uc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAvL3RoZW4gcmVuZGVyIHRoZSBhdWRpb1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQucmVuZGVyKCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vcHJvY2VzcyB0aGUgYXVkaW9cblx0ICAgICAgICAgICAgcmV0ID0gY29udGV4dC5yZW5kZXIoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIG9yaWdpbmFsIEF1ZGlvQ29udGV4dFxuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IG9yaWdpbmFsQ29udGV4dDtcblx0ICAgICAgICAvL3JldHVybiB0aGUgYXVkaW9cblx0ICAgICAgICByZXR1cm4gcmV0LnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICAvL3dyYXAgaXQgaW4gYSBUb25lLkJ1ZmZlclxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuQnVmZmVyKGJ1ZmZlcik7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT2ZmbGluZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiBcdEBjbGFzcyAgVG9uZS5FZmZlY3QgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGVmZmVjdHMuIENvbm5lY3QgdGhlIGVmZmVjdCBiZXR3ZWVuXG5cdFx0ICogXHQgICAgICAgIHRoZSBlZmZlY3RTZW5kIGFuZCBlZmZlY3RSZXR1cm4gR2Fpbk5vZGVzLCB0aGVuIGNvbnRyb2wgdGhlIGFtb3VudCBvZlxuXHRcdCAqIFx0ICAgICAgICBlZmZlY3Qgd2hpY2ggZ29lcyB0byB0aGUgb3V0cHV0IHVzaW5nIHRoZSB3ZXQgY29udHJvbC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3dldF0gVGhlIHN0YXJ0aW5nIHdldCB2YWx1ZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnd2V0J10sIFRvbmUuRWZmZWN0KTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZHJ5d2V0IGtub2IgdG8gY29udHJvbCB0aGUgYW1vdW50IG9mIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNyb3NzRmFkZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0ID0gbmV3IFRvbmUuQ3Jvc3NGYWRlKG9wdGlvbnMud2V0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgd2V0IGNvbnRyb2wgaXMgaG93IG11Y2ggb2YgdGhlIGVmZmVjdGVkXG5cdFx0XHQgKiAgd2lsbCBwYXNzIHRocm91Z2ggdG8gdGhlIG91dHB1dC4gMSA9IDEwMCUgZWZmZWN0ZWRcblx0XHRcdCAqICBzaWduYWwsIDAgPSAxMDAlIGRyeSBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2V0ID0gdGhpcy5fZHJ5V2V0LmZhZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29ubmVjdCB0aGUgZWZmZWN0U2VuZCB0byB0aGUgaW5wdXQgb2YgaHRlIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhlIGVmZmVjdCB0byB0aGUgZWZmZWN0UmV0dXJuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9kcnlXZXQuYSk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuZWZmZWN0U2VuZCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4uY29ubmVjdCh0aGlzLl9kcnlXZXQuYik7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnd2V0J10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRWZmZWN0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FZmZlY3QuZGVmYXVsdHMgPSB7ICd3ZXQnOiAxIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2hhaW5zIHRoZSBlZmZlY3QgaW4gYmV0d2VlbiB0aGUgZWZmZWN0U2VuZCBhbmQgZWZmZWN0UmV0dXJuXG5cdFx0ICogIEBwYXJhbSAge1RvbmV9IGVmZmVjdFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5jb25uZWN0RWZmZWN0ID0gZnVuY3Rpb24gKGVmZmVjdCkge1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbihlZmZlY3QsIHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd3ZXQnXSk7XG5cdCAgICAgICAgdGhpcy53ZXQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQXV0b0ZpbHRlciBpcyBhIFRvbmUuRmlsdGVyIHdpdGggYSBUb25lLkxGTyBjb25uZWN0ZWQgdG8gdGhlIGZpbHRlciBjdXRvZmYgZnJlcXVlbmN5LlxuXHRcdCAqICAgICAgICAgU2V0dGluZyB0aGUgTEZPIHJhdGUgYW5kIGRlcHRoIGFsbG93cyBmb3IgY29udHJvbCBvdmVyIHRoZSBmaWx0ZXIgbW9kdWxhdGlvbiByYXRlIFxuXHRcdCAqICAgICAgICAgYW5kIGRlcHRoLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSByYXRlIG9mIHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5PX0gYmFzZUZyZXF1ZW5jeSBUaGUgbG93ZXIgdmFsdWUgb2YgdGhlIExGT3Mgb3NjaWxsYXRpb25cblx0IFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5PX0gb2N0YXZlcyBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIGJhc2VGcmVxdWVuY3lcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhbiBhdXRvZmlsdGVyIGFuZCBzdGFydCBpdCdzIExGT1xuXHRcdCAqIHZhciBhdXRvRmlsdGVyID0gbmV3IFRvbmUuQXV0b0ZpbHRlcihcIjRuXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKiAvL3JvdXRlIGFuIG9zY2lsbGF0b3IgdGhyb3VnaCB0aGUgZmlsdGVyIGFuZCBzdGFydCBpdFxuXHRcdCAqIHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QoYXV0b0ZpbHRlcikuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJ1xuXHQgICAgICAgIF0sIFRvbmUuQXV0b0ZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGRyaXZlcyB0aGUgZmlsdGVyIGN1dG9mZlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnYW1wbGl0dWRlJzogb3B0aW9ucy5kZXB0aFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHJhbmdlIG9mIHRoZSBmaWx0ZXIgbW9kdWxhdGluZyBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCBmcmVxdWVuY3kuIFxuXHRcdFx0ICogMCA9IG5vIG1vZHVsYXRpb24uIDEgPSBmdWxsIG1vZHVsYXRpb24uXG5cdFx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fbGZvLmFtcGxpdHVkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEhvdyBmYXN0IHRoZSBmaWx0ZXIgbW9kdWxhdGVzIGJldHdlZW4gbWluIGFuZCBtYXguIFxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlsdGVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG5ldyBUb25lLkZpbHRlcihvcHRpb25zLmZpbHRlcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9jdGF2ZXMgcGxhY2Vob2xkZXJcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSAwO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5maWx0ZXIpO1xuXHQgICAgICAgIHRoaXMuX2xmby5jb25uZWN0KHRoaXMuZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgdGhpcy5iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgfTtcblx0ICAgIC8vZXh0ZW5kIEVmZmVjdFxuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdXRvRmlsdGVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdHNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdkZXB0aCc6IDEsXG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAyLjYsXG5cdCAgICAgICAgJ2ZpbHRlcic6IHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnbG93cGFzcycsXG5cdCAgICAgICAgICAgICdyb2xsb2ZmJzogLTEyLFxuXHQgICAgICAgICAgICAnUSc6IDFcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RhcnQgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RhcnQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0b3AuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgZmlsdGVyIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbZGVsYXk9MF0gRGVsYXkgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIGVmZmVjdCBhZnRlciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgaGFzIHN0YXJ0ZWQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uIChkZWxheSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zeW5jKGRlbGF5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIGZpbHRlciBmcm9tIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnVuc3luYygpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFR5cGUgb2Ygb3NjaWxsYXRvciBhdHRhY2hlZCB0byB0aGUgQXV0b0ZpbHRlci4gXG5cdFx0ICogUG9zc2libGUgdmFsdWVzOiBcInNpbmVcIiwgXCJzcXVhcmVcIiwgXCJ0cmlhbmdsZVwiLCBcInNhd3Rvb3RoXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmby50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8udHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgZmlsdGVyJ3MgY3V0b2ZmIGZyZXF1ZW5jeS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8ubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8ubWluID0gdGhpcy50b0ZyZXF1ZW5jeShmcmVxKTtcblx0ICAgICAgICAgICAgLy9hbmQgc2V0IHRoZSBtYXhcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBmaWx0ZXIncyBjdXRvZmYgZnJlcXVlbmN5LiBcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3Q7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby5tYXggPSB0aGlzLmJhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCBvY3QpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGZvLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdXRvRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BdXRvUGFubmVyIGlzIGEgVG9uZS5QYW5uZXIgd2l0aCBhbiBMRk8gY29ubmVjdGVkIHRvIHRoZSBwYW4gYW1vdW50LiBcblx0XHQgKiAgICAgICAgIE1vcmUgb24gdXNpbmcgYXV0b3Bhbm5lcnMgW2hlcmVdKGh0dHBzOi8vd3d3LmFibGV0b24uY29tL2VuL2Jsb2cvYXV0b3Bhbi1jaG9wcGVyLWVmZmVjdC1hbmQtbW9yZS1saXZlc2Nob29sLykuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBSYXRlIG9mIGxlZnQtcmlnaHQgb3NjaWxsYXRpb24uIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY3JlYXRlIGFuIGF1dG9wYW5uZXIgYW5kIHN0YXJ0IGl0J3MgTEZPXG5cdFx0ICogdmFyIGF1dG9QYW5uZXIgPSBuZXcgVG9uZS5BdXRvUGFubmVyKFwiNG5cIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqIC8vcm91dGUgYW4gb3NjaWxsYXRvciB0aHJvdWdoIHRoZSBwYW5uZXIgYW5kIHN0YXJ0IGl0XG5cdFx0ICogdmFyIG9zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkuY29ubmVjdChhdXRvUGFubmVyKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZnJlcXVlbmN5J10sIFRvbmUuQXV0b1Bhbm5lcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGRyaXZlcyB0aGUgcGFubmluZ1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnYW1wbGl0dWRlJzogb3B0aW9ucy5kZXB0aCxcblx0ICAgICAgICAgICAgJ21pbic6IC0xLFxuXHQgICAgICAgICAgICAnbWF4JzogMVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtb3VudCBvZiBwYW5uaW5nIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQuIFxuXHRcdFx0ICogMCA9IGFsd2F5cyBjZW50ZXIuIDEgPSBmdWxsIHJhbmdlIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQuIFxuXHRcdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2xmby5hbXBsaXR1ZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBhbm5lciBub2RlIHdoaWNoIGRvZXMgdGhlIHBhbm5pbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5QYW5uZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG5ldyBUb25lLlBhbm5lcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogSG93IGZhc3QgdGhlIHBhbm5lciBtb2R1bGF0ZXMgYmV0d2VlbiBsZWZ0IGFuZCByaWdodC4gXG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fcGFubmVyKTtcblx0ICAgICAgICB0aGlzLl9sZm8uY29ubmVjdCh0aGlzLl9wYW5uZXIucGFuKTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZGVwdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIC8vZXh0ZW5kIEVmZmVjdFxuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdXRvUGFubmVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdHNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdkZXB0aCc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdGFydCB0aGUgZWZmZWN0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBMRk8gd2lsbCBzdGFydC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RvcC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBwYW5uZXIgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFtkZWxheT0wXSBEZWxheSB0aW1lIGJlZm9yZSBzdGFydGluZyB0aGUgZWZmZWN0IGFmdGVyIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zcG9ydCBoYXMgc3RhcnRlZC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKGRlbGF5KSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN5bmMoZGVsYXkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgcGFubmVyIGZyb20gdGhlIHRyYW5zcG9ydFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2xmby51bnN5bmMoKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUeXBlIG9mIG9zY2lsbGF0b3IgYXR0YWNoZWQgdG8gdGhlIEF1dG9GaWx0ZXIuIFxuXHRcdCAqIFBvc3NpYmxlIHZhbHVlczogXCJzaW5lXCIsIFwic3F1YXJlXCIsIFwidHJpYW5nbGVcIiwgXCJzYXd0b290aFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9GaWx0ZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xmby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZGVwdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdXRvUGFubmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuQXV0b1dhaCBjb25uZWN0cyBhIFRvbmUuRm9sbG93ZXIgdG8gYSBiYW5kcGFzcyBmaWx0ZXIgKFRvbmUuRmlsdGVyKS5cblx0XHQgKiAgICAgICAgICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIgaXMgYWRqdXN0ZWQgcHJvcG9ydGlvbmFsbHkgdG8gdGhlXG5cdFx0ICogICAgICAgICAgaW5jb21pbmcgc2lnbmFsJ3MgYW1wbGl0dWRlLiBJbnNwaXJhdGlvbiBmcm9tIFtUdW5hLmpzXShodHRwczovL2dpdGh1Yi5jb20vRGluYWhtb2UvdHVuYSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbYmFzZUZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSB0aGUgZmlsdGVyIGlzIHNldFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhdCB0aGUgbG93IHBvaW50IG9mIHRoZSB3YWhcblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gW29jdGF2ZXNdIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlsdGVyIHdpbGwgc3dlZXAgdG8gd2hlbiBmdWxseSBvcGVuXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFtzZW5zaXRpdml0eV0gVGhlIGRlY2liZWwgdGhyZXNob2xkIHNlbnNpdGl2aXR5IGZvclxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5jb21pbmcgc2lnbmFsLiBOb3JtYWwgcmFuZ2Ugb2YgLTQwIHRvIDAuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGF1dG9XYWggPSBuZXcgVG9uZS5BdXRvV2FoKDUwLCA2LCAtMzApLnRvTWFzdGVyKCk7XG5cdFx0ICogLy9pbml0aWFsaXplIHRoZSBzeW50aCBhbmQgY29ubmVjdCB0byBhdXRvd2FoXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFN5bnRoLmNvbm5lY3QoYXV0b1dhaCk7XG5cdFx0ICogLy9RIHZhbHVlIGluZmx1ZW5jZXMgdGhlIGVmZmVjdCBvZiB0aGUgd2FoIC0gZGVmYXVsdCBpcyAyXG5cdFx0ICogYXV0b1dhaC5RLnZhbHVlID0gNjtcblx0XHQgKiAvL21vcmUgYXVkaWJsZSBvbiBoaWdoZXIgbm90ZXNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiOG5cIilcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdiYXNlRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnLFxuXHQgICAgICAgICAgICAnc2Vuc2l0aXZpdHknXG5cdCAgICAgICAgXSwgVG9uZS5BdXRvV2FoKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBlbnZlbG9wZSBmb2xsb3dlci4gU2V0IHRoZSBhdHRhY2svcmVsZWFzZVxuXHRcdFx0ICogIHRpbWluZyB0byBhZGp1c3QgaG93IHRoZSBlbnZlbG9wZSBpcyBmb2xsb3dlZC5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Gb2xsb3dlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mb2xsb3dlciA9IG5ldyBUb25lLkZvbGxvd2VyKG9wdGlvbnMuZm9sbG93ZXIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlcyB0aGUgZm9sbG93ZXIgdmFsdWUgdG8gdGhlIGZyZXF1ZW5jeSBkb21haW5cblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZSA9IG5ldyBUb25lLlNjYWxlRXhwKDAsIDEsIDAuNSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dCBnYWluIHRvIGFkanVzdCB0aGUgc2Vuc2l0aXZpdHlcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnB1dEJvb3N0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtCaXF1YWRGaWx0ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iYW5kcGFzcyA9IG5ldyBUb25lLkZpbHRlcih7XG5cdCAgICAgICAgICAgICdyb2xsb2ZmJzogLTQ4LFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5JzogMCxcblx0ICAgICAgICAgICAgJ1EnOiBvcHRpb25zLlFcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcgPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ3BlYWtpbmcnKTtcblx0ICAgICAgICB0aGlzLl9wZWFraW5nLmdhaW4udmFsdWUgPSBvcHRpb25zLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBvZiB0aGUgZmlsdGVyLlxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IHRoaXMuX3BlYWtpbmcuZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBxdWFsaXR5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSB0aGlzLl9iYW5kcGFzcy5RO1xuXHQgICAgICAgIC8vdGhlIGNvbnRyb2wgc2lnbmFsIHBhdGhcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4odGhpcy5faW5wdXRCb29zdCwgdGhpcy5mb2xsb3dlciwgdGhpcy5fc3dlZXBSYW5nZSk7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5jb25uZWN0KHRoaXMuX2JhbmRwYXNzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5jb25uZWN0KHRoaXMuX3BlYWtpbmcuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3RoZSBmaWx0ZXJlZCBwYXRoXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNoYWluKHRoaXMuX2JhbmRwYXNzLCB0aGlzLl9wZWFraW5nLCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVcblx0ICAgICAgICB0aGlzLl9zZXRTd2VlcFJhbmdlKCk7XG5cdCAgICAgICAgdGhpcy5zZW5zaXRpdml0eSA9IG9wdGlvbnMuc2Vuc2l0aXZpdHk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXV0b1dhaCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDEwMCxcblx0ICAgICAgICAnb2N0YXZlcyc6IDYsXG5cdCAgICAgICAgJ3NlbnNpdGl2aXR5JzogMCxcblx0ICAgICAgICAnUSc6IDIsXG5cdCAgICAgICAgJ2dhaW4nOiAyLFxuXHQgICAgICAgICdmb2xsb3dlcic6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoYXQgdGhlIGZpbHRlciB3aWxsIHN3ZWVwIGFib3ZlIHRoZVxuXHRcdCAqIGJhc2VGcmVxdWVuY3kuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b1dhaCNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9XYWgucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3RhdmVzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3RhdmVzO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRTd2VlcFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYmFzZSBmcmVxdWVuY3kgZnJvbSB3aGljaCB0aGUgc3dlZXAgd2lsbCBzdGFydCBmcm9tLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9XYWgjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAbmFtZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvV2FoLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYmFzZUZyZXEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IGJhc2VGcmVxO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRTd2VlcFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2Vuc2l0aXZpdHkgdG8gY29udHJvbCBob3cgcmVzcG9uc2l2ZSB0byB0aGUgaW5wdXQgc2lnbmFsIHRoZSBmaWx0ZXIgaXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b1dhaCNcblx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0ICogQG5hbWUgc2Vuc2l0aXZpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9XYWgucHJvdG90eXBlLCAnc2Vuc2l0aXZpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmdhaW5Ub0RiKDEgLyB0aGlzLl9pbnB1dEJvb3N0LmdhaW4udmFsdWUpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2Vuc2l0aXZ5KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QuZ2Fpbi52YWx1ZSA9IDEgLyBUb25lLmRiVG9HYWluKHNlbnNpdGl2eSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgc2V0cyB0aGUgc3dlZXAgcmFuZ2Ugb2YgdGhlIHNjYWxlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvV2FoLnByb3RvdHlwZS5fc2V0U3dlZXBSYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLm1pbiA9IHRoaXMuX2Jhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5tYXggPSBNYXRoLm1pbih0aGlzLl9iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgdGhpcy5fb2N0YXZlcyksIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlIC8gMik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdXRvV2FofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmZvbGxvd2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZvbGxvd2VyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9iYW5kcGFzcy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYmFuZHBhc3MgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmdhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXV0b1dhaDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFNpZ25hbC1yYXRlIG1vZHVsbyBvcGVyYXRvci4gT25seSB3b3JrcyBpbiBBdWRpb1JhbmdlIFstMSwgMV0gYW5kIGZvciBtb2R1bHVzXG5cdFx0ICogICAgICAgICB2YWx1ZXMgaW4gdGhlIE5vcm1hbFJhbmdlLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBtb2R1bHVzIFRoZSBtb2R1bHVzIHRvIGFwcGx5LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtb2QgPSBuZXcgVG9uZS5Nb2R1bG8oMC4yKVxuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KG1vZCk7XG5cdFx0ICogLy9tb2Qgb3V0cHV0cyAwLjFcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9kdWxvID0gZnVuY3Rpb24gKG1vZHVsdXMpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSB3YXZlc2hhcGVyIGdldHMgdGhlIGludGVnZXIgbXVsdGlwbGUgb2Zcblx0XHRcdCAqICB0aGUgaW5wdXQgc2lnbmFsIGFuZCB0aGUgbW9kdWx1cy5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKE1hdGgucG93KDIsIDE2KSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGludGVnZXIgbXVsdGlwbGUgaXMgbXVsdGlwbGllZCBieSB0aGUgbW9kdWx1c1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGFuZCBzdWJ0cmFjdGVkIGZyb20gdGhlIGlucHV0IHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1vZHVsdXMgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKG1vZHVsdXMpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmZhbih0aGlzLl9zaGFwZXIsIHRoaXMuX3N1YnRyYWN0KTtcblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwuY29ubmVjdCh0aGlzLl9tdWx0aXBseSwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmNvbm5lY3QodGhpcy5fbXVsdGlwbHksIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5LmNvbm5lY3QodGhpcy5fc3VidHJhY3QsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX3NldFdhdmVTaGFwZXIobW9kdWx1cyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb2R1bG8sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSAgbW9kICB0aGUgbW9kdWx1cyB0byBhcHBseVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb2R1bG8ucHJvdG90eXBlLl9zZXRXYXZlU2hhcGVyID0gZnVuY3Rpb24gKG1vZCkge1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5zZXRNYXAoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB2YXIgbXVsdGlwbGUgPSBNYXRoLmZsb29yKCh2YWwgKyAwLjAwMDEpIC8gbW9kKTtcblx0ICAgICAgICAgICAgcmV0dXJuIG11bHRpcGxlO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtb2R1bHVzIHZhbHVlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk1vZHVsbyNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1vZHVsby5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZFNpZ25hbC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1vZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2RTaWduYWwudmFsdWUgPSBtb2Q7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFdhdmVTaGFwZXIobW9kKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vZHVsb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb2R1bG8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZFNpZ25hbCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9kdWxvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5CaXRjcnVzaGVyIGRvd25zYW1wbGVzIHRoZSBpbmNvbWluZyBzaWduYWwgdG8gYSBkaWZmZXJlbnQgYml0ZGVwdGguXG5cdFx0ICogICAgICAgICBMb3dlcmluZyB0aGUgYml0ZGVwdGggb2YgdGhlIHNpZ25hbCBjcmVhdGVzIGRpc3RvcnRpb24uIFJlYWQgbW9yZSBhYm91dCBCaXRjcnVzaGluZ1xuXHRcdCAqICAgICAgICAgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQml0Y3J1c2hlcikuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJpdHMgVGhlIG51bWJlciBvZiBiaXRzIHRvIGRvd25zYW1wbGUgdGhlIHNpZ25hbC4gTm9taW5hbCByYW5nZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICBvZiAxIHRvIDguXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pbml0aWFsaXplIGNydXNoZXIgYW5kIHJvdXRlIGEgc3ludGggdGhyb3VnaCBpdFxuXHRcdCAqIHZhciBjcnVzaGVyID0gbmV3IFRvbmUuQml0Q3J1c2hlcig0KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLk1vbm9TeW50aCgpLmNvbm5lY3QoY3J1c2hlcik7XG5cdFx0ICovXG5cdCAgICBUb25lLkJpdENydXNoZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydiaXRzJ10sIFRvbmUuQml0Q3J1c2hlcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICB2YXIgaW52U3RlcFNpemUgPSAxIC8gTWF0aC5wb3coMiwgb3B0aW9ucy5iaXRzIC0gMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU3VidHJhY3QgdGhlIGlucHV0IHNpZ25hbCBhbmQgdGhlIG1vZHVsdXMgb2YgdGhlIGlucHV0IHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZCBmdW5jdGlvblxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Nb2R1bG99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsbyA9IG5ldyBUb25lLk1vZHVsbyhpbnZTdGVwU2l6ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAga2VlcHMgdHJhY2sgb2YgdGhlIGJpdHNcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iaXRzID0gb3B0aW9ucy5iaXRzO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5mYW4odGhpcy5fc3VidHJhY3QsIHRoaXMuX21vZHVsbyk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxvLmNvbm5lY3QodGhpcy5fc3VidHJhY3QsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0LmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQml0Q3J1c2hlciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJpdENydXNoZXIuZGVmYXVsdHMgPSB7ICdiaXRzJzogNCB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGJpdCBkZXB0aCBvZiB0aGUgZWZmZWN0LiBOb21pbmFsIHJhbmdlIG9mIDEtOC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CaXRDcnVzaGVyI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgYml0c1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQml0Q3J1c2hlci5wcm90b3R5cGUsICdiaXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYml0cztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJpdHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYml0cyA9IGJpdHM7XG5cdCAgICAgICAgICAgIHZhciBpbnZTdGVwU2l6ZSA9IDEgLyBNYXRoLnBvdygyLCBiaXRzIC0gMSk7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsby52YWx1ZSA9IGludlN0ZXBTaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5CaXRDcnVzaGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJpdENydXNoZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxvID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CaXRDcnVzaGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5DaGVieVNoZXYgaXMgYSBDaGVieXNoZXYgd2F2ZXNoYXBlciwgYW4gZWZmZWN0IHdoaWNoIGlzIGdvb2QgXG5cdFx0ICogICAgICAgICBmb3IgbWFraW5nIGRpZmZlcmVudCB0eXBlcyBvZiBkaXN0b3J0aW9uIHNvdW5kcy5cblx0XHQgKiAgICAgICAgIE5vdGUgdGhhdCBvZGQgb3JkZXJzIHNvdW5kIHZlcnkgZGlmZmVyZW50IGZyb20gZXZlbiBvbmVzLCBcblx0XHQgKiAgICAgICAgIGFuZCBvcmRlciA9IDEgaXMgbm8gY2hhbmdlLiBcblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBhdCBbbXVzaWMuY29sdW1iaWEuZWR1XShodHRwOi8vbXVzaWMuY29sdW1iaWEuZWR1L2NtYy9tdXNpY2FuZGNvbXB1dGVycy9jaGFwdGVyNC8wNF8wNi5waHApLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV8T2JqZWN0fSBbb3JkZXJdIFRoZSBvcmRlciBvZiB0aGUgY2hlYnlzaGV2IHBvbHlub21pYWwuIE5vcm1hbCByYW5nZSBiZXR3ZWVuIDEtMTAwLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhIG5ldyBjaGVieVxuXHRcdCAqIHZhciBjaGVieSA9IG5ldyBUb25lLkNoZWJ5c2hldig1MCk7XG5cdFx0ICogLy9jcmVhdGUgYSBtb25vc3ludGggY29ubmVjdGVkIHRvIG91ciBjaGVieVxuXHRcdCAqIHN5bnRoID0gbmV3IFRvbmUuTW9ub1N5bnRoKCkuY29ubmVjdChjaGVieSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ29yZGVyJ10sIFRvbmUuQ2hlYnlzaGV2KTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcig0MDk2KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIGhvbGRzIG9udG8gdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3JkZXIgPSBvcHRpb25zLm9yZGVyO1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9zaGFwZXIpO1xuXHQgICAgICAgIHRoaXMub3JkZXIgPSBvcHRpb25zLm9yZGVyO1xuXHQgICAgICAgIHRoaXMub3ZlcnNhbXBsZSA9IG9wdGlvbnMub3ZlcnNhbXBsZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNoZWJ5c2hldiwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb3JkZXInOiAxLFxuXHQgICAgICAgICdvdmVyc2FtcGxlJzogJ25vbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGdldCB0aGUgY29lZmZpY2llbnQgZm9yIHRoYXQgZGVncmVlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB4IHRoZSB4IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAgIHtudW1iZXJ9IGRlZ3JlZSBcblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG1lbW8gbWVtb2l6ZSB0aGUgY29tcHV0ZWQgdmFsdWUuIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHNwZWVkcyB1cCBjb21wdXRhdGlvbiBncmVhdGx5LiBcblx0XHQgKiAgQHJldHVybiAge251bWJlcn0gICAgICAgdGhlIGNvZWZmaWNpZW50IFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLl9nZXRDb2VmZmljaWVudCA9IGZ1bmN0aW9uICh4LCBkZWdyZWUsIG1lbW8pIHtcblx0ICAgICAgICBpZiAobWVtby5oYXNPd25Qcm9wZXJ0eShkZWdyZWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBtZW1vW2RlZ3JlZV07XG5cdCAgICAgICAgfSBlbHNlIGlmIChkZWdyZWUgPT09IDApIHtcblx0ICAgICAgICAgICAgbWVtb1tkZWdyZWVdID0gMDtcblx0ICAgICAgICB9IGVsc2UgaWYgKGRlZ3JlZSA9PT0gMSkge1xuXHQgICAgICAgICAgICBtZW1vW2RlZ3JlZV0gPSB4O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIG1lbW9bZGVncmVlXSA9IDIgKiB4ICogdGhpcy5fZ2V0Q29lZmZpY2llbnQoeCwgZGVncmVlIC0gMSwgbWVtbykgLSB0aGlzLl9nZXRDb2VmZmljaWVudCh4LCBkZWdyZWUgLSAyLCBtZW1vKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG1lbW9bZGVncmVlXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3JkZXIgb2YgdGhlIENoZWJ5c2hldiBwb2x5bm9taWFsIHdoaWNoIGNyZWF0ZXNcblx0XHQgKiB0aGUgZXF1YXRpb24gd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgaW5jb21pbmcgXG5cdFx0ICogc2lnbmFsIHRocm91Z2ggYSBUb25lLldhdmVTaGFwZXIuIFRoZSBlcXVhdGlvbnNcblx0XHQgKiBhcmUgaW4gdGhlIGZvcm06PGJyPlxuXHRcdCAqIG9yZGVyIDI6IDJ4XjIgKyAxPGJyPlxuXHRcdCAqIG9yZGVyIDM6IDR4XjMgKyAzeCA8YnI+XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hlYnlzaGV2I1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBvcmRlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZSwgJ29yZGVyJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JkZXI7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvcmRlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmRlciA9IG9yZGVyO1xuXHQgICAgICAgICAgICB2YXIgY3VydmUgPSBuZXcgQXJyYXkoNDA5Nik7XG5cdCAgICAgICAgICAgIHZhciBsZW4gPSBjdXJ2ZS5sZW5ndGg7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB4ID0gaSAqIDIgLyBsZW4gLSAxO1xuXHQgICAgICAgICAgICAgICAgaWYgKHggPT09IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL3Nob3VsZCBvdXRwdXQgMCB3aGVuIGlucHV0IGlzIDBcblx0ICAgICAgICAgICAgICAgICAgICBjdXJ2ZVtpXSA9IDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGN1cnZlW2ldID0gdGhpcy5fZ2V0Q29lZmZpY2llbnQoeCwgb3JkZXIsIHt9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIuY3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvdmVyc2FtcGxpbmcgb2YgdGhlIGVmZmVjdC4gQ2FuIGVpdGhlciBiZSBcIm5vbmVcIiwgXCIyeFwiIG9yIFwiNHhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaGVieXNoZXYjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSBvdmVyc2FtcGxlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLCAnb3ZlcnNhbXBsZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3ZlcnNhbXBsaW5nKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlID0gb3ZlcnNhbXBsaW5nO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2hlYnlzaGV2fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DaGVieXNoZXY7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBCYXNlIGNsYXNzIGZvciBTdGVyZW8gZWZmZWN0cy4gUHJvdmlkZXMgZWZmZWN0U2VuZEwvUiBhbmQgZWZmZWN0UmV0dXJuTC9SLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnd2V0J10sIFRvbmUuRWZmZWN0KTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRyeXdldCBrbm9iIHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Dcm9zc0ZhZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG5ldyBUb25lLkNyb3NzRmFkZShvcHRpb25zLndldCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdldCBjb250cm9sLCBpLmUuIGhvdyBtdWNoIG9mIHRoZSBlZmZlY3RlZFxuXHRcdFx0ICogIHdpbGwgcGFzcyB0aHJvdWdoIHRvIHRoZSBvdXRwdXQuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2V0ID0gdGhpcy5fZHJ5V2V0LmZhZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlbiBzcGxpdCBpdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IG5ldyBUb25lLlNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdHMgc2VuZCBMRUZUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMID0gdGhpcy5fc3BsaXQubGVmdDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0cyBzZW5kIFJJR0hUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSID0gdGhpcy5fc3BsaXQucmlnaHQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHN0ZXJlbyBlZmZlY3QgbWVyZ2VyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0IHJldHVybiBMRUZUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwgPSB0aGlzLl9tZXJnZS5sZWZ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBlZmZlY3QgcmV0dXJuIFJJR0hUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIgPSB0aGlzLl9tZXJnZS5yaWdodDtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX3NwbGl0KTtcblx0ICAgICAgICAvL2RyeSB3ZXQgY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fZHJ5V2V0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5jb25uZWN0KHRoaXMuX2RyeVdldCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnd2V0J10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3RlcmVvRWZmZWN0LCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb0VmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3dldCddKTtcblx0ICAgICAgICB0aGlzLndldCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5DaG9ydXMgaXMgYSBzdGVyZW8gY2hvcnVzIGVmZmVjdCBjb21wb3NlZCBvZlxuXHRcdCAqICAgICAgICAgYSBsZWZ0IGFuZCByaWdodCBkZWxheSB3aXRoIGEgVG9uZS5MRk8gYXBwbGllZCB0byB0aGUgZGVsYXlUaW1lIG9mIGVhY2ggY2hhbm5lbC5cblx0XHQgKiAgICAgICAgIEluc3BpcmF0aW9uIGZyb20gW1R1bmEuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9EaW5haG1vZS90dW5hL2Jsb2IvbWFzdGVyL3R1bmEuanMpLlxuXHRcdCAqICAgICAgICAgUmVhZCBtb3JlIG9uIHRoZSBjaG9ydXMgZWZmZWN0IG9uIFtTb3VuZE9uU291bmRdKGh0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvanVuMDQvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmh0bSkuXG5cdFx0ICpcblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKlx0QHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgZnJlcXVlbmN5IG9mIHRoZSBMRk8uXG5cdFx0ICpcdEBwYXJhbSB7TWlsbGlzZWNvbmRzfSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgb2YgdGhlIGNob3J1cyBlZmZlY3QgaW4gbXMuXG5cdFx0ICpcdEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtkZXB0aF0gVGhlIGRlcHRoIG9mIHRoZSBjaG9ydXMuXG5cdFx0ICpcdEBleGFtcGxlXG5cdFx0ICogdmFyIGNob3J1cyA9IG5ldyBUb25lLkNob3J1cyg0LCAyLjUsIDAuNSk7XG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuUG9seVN5bnRoKDQsIFRvbmUuTW9ub1N5bnRoKS5jb25uZWN0KGNob3J1cyk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoW1wiQzNcIixcIkUzXCIsXCJHM1wiXSwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hvcnVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSwgVG9uZS5DaG9ydXMpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlcHRoIG9mIHRoZSBjaG9ydXNcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZXB0aCA9IG9wdGlvbnMuZGVwdGg7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5VGltZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5VGltZSA9IG9wdGlvbnMuZGVsYXlUaW1lIC8gMTAwMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGNvbnRyb2xzIHRoZSBkZWxheVRpbWVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGFub3RoZXIgTEZPIGZvciB0aGUgcmlnaHQgc2lkZSB3aXRoIGEgMTgwIGRlZ3JlZSBwaGFzZSBkaWZmXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9SID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgICAgICdwaGFzZSc6IDE4MFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGRlbGF5IGZvciBsZWZ0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZUwgPSBuZXcgVG9uZS5EZWxheSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGRlbGF5IGZvciByaWdodFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVSID0gbmV3IFRvbmUuRGVsYXkoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBmcmVxdWVuY3kgb2YgdGhlIExGTyB3aGljaCBtb2R1bGF0ZXMgdGhlIGRlbGF5VGltZS5cblx0XHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmb0wuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNoYWluKHRoaXMuX2RlbGF5Tm9kZUwsIHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbih0aGlzLl9kZWxheU5vZGVSLCB0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIC8vYW5kIHBhc3MgdGhyb3VnaCB0byBtYWtlIHRoZSBkZXR1bmUgYXBwYXJlbnRcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAvL2xmbyBzZXR1cFxuXHQgICAgICAgIHRoaXMuX2xmb0wuY29ubmVjdCh0aGlzLl9kZWxheU5vZGVMLmRlbGF5VGltZSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5jb25uZWN0KHRoaXMuX2RlbGF5Tm9kZVIuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBsZm9cblx0ICAgICAgICB0aGlzLl9sZm9MLnN0YXJ0KCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdGFydCgpO1xuXHQgICAgICAgIC8vaGF2ZSBvbmUgTEZPIGZyZXF1ZW5jeSBjb250cm9sIHRoZSBvdGhlclxuXHQgICAgICAgIHRoaXMuX2xmb0wuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fbGZvUi5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9kZXB0aDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS52YWx1ZSA9IG9wdGlvbnMuZnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZyZXF1ZW5jeSddKTtcblx0ICAgICAgICB0aGlzLnNwcmVhZCA9IG9wdGlvbnMuc3ByZWFkO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ2hvcnVzLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DaG9ydXMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDEuNSxcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMy41LFxuXHQgICAgICAgICdkZXB0aCc6IDAuNyxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnc3ByZWFkJzogMTgwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlcHRoIG9mIHRoZSBlZmZlY3QuIEEgZGVwdGggb2YgMSBtYWtlcyB0aGUgZGVsYXlUaW1lXG5cdFx0ICogbW9kdWxhdGUgYmV0d2VlbiAwIGFuZCAyKmRlbGF5VGltZSAoY2VudGVyZWQgYXJvdW5kIHRoZSBkZWxheVRpbWUpLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNob3J1cyNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQG5hbWUgZGVwdGhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICdkZXB0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlcHRoO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGVwdGgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGVwdGggPSBkZXB0aDtcblx0ICAgICAgICAgICAgdmFyIGRldmlhdGlvbiA9IHRoaXMuX2RlbGF5VGltZSAqIGRlcHRoO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1pbiA9IE1hdGgubWF4KHRoaXMuX2RlbGF5VGltZSAtIGRldmlhdGlvbiwgMCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wubWF4ID0gdGhpcy5fZGVsYXlUaW1lICsgZGV2aWF0aW9uO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1pbiA9IE1hdGgubWF4KHRoaXMuX2RlbGF5VGltZSAtIGRldmlhdGlvbiwgMCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWF4ID0gdGhpcy5fZGVsYXlUaW1lICsgZGV2aWF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlbGF5VGltZSBpbiBtaWxsaXNlY29uZHMgb2YgdGhlIGNob3J1cy4gQSBsYXJnZXIgZGVsYXlUaW1lXG5cdFx0ICogd2lsbCBnaXZlIGEgbW9yZSBwcm9ub3VuY2VkIGVmZmVjdC4gTm9taW5hbCByYW5nZSBhIGRlbGF5VGltZVxuXHRcdCAqIGlzIGJldHdlZW4gMiBhbmQgMjBtcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge01pbGxpc2Vjb25kc31cblx0XHQgKiBAbmFtZSBkZWxheVRpbWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICdkZWxheVRpbWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWxheVRpbWUgKiAxMDAwO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGVsYXlUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlbGF5VGltZSA9IGRlbGF5VGltZSAvIDEwMDA7XG5cdCAgICAgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9kZXB0aDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvc2NpbGxhdG9yIHR5cGUgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmb0wudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEFtb3VudCBvZiBzdGVyZW8gc3ByZWFkLiBXaGVuIHNldCB0byAwLCBib3RoIExGTydzIHdpbGwgYmUgcGFubmVkIGNlbnRyYWxseS5cblx0XHQgKiBXaGVuIHNldCB0byAxODAsIExGTydzIHdpbGwgYmUgcGFubmVkIGhhcmQgbGVmdCBhbmQgcmlnaHQgcmVzcGVjdGl2ZWx5LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNob3J1cyNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9SLnBoYXNlIC0gdGhpcy5fbGZvTC5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnBoYXNlID0gOTAgLSBzcHJlYWQgLyAyO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnBoYXNlID0gc3ByZWFkIC8gMiArIDkwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DaG9ydXN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hvcnVzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DaG9ydXM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Db252b2x2ZXIgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgTmF0aXZlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgIFtDb252b2x2ZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1jb252b2x2ZXJub2RlLWludGVyZmFjZSkuXG5cdFx0ICogICAgICAgICAgQ29udm9sdXRpb24gaXMgdXNlZnVsIGZvciByZXZlcmIgYW5kIGZpbHRlciBlbXVsYXRpb24uIFJlYWQgbW9yZSBhYm91dCBjb252b2x1dGlvbiByZXZlcmIgb25cblx0XHQgKiAgICAgICAgICBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db252b2x1dGlvbl9yZXZlcmIpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfFRvbmUuQnVmZmVyfE9iamVjdH0gW3VybF0gVGhlIFVSTCBvZiB0aGUgaW1wdWxzZSByZXNwb25zZSBvciB0aGUgVG9uZS5CdWZmZXJcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aWFuaW5nIHRoZSBpbXB1bHNlIHJlc3BvbnNlLlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2luaXRpYWxpemluZyB0aGUgY29udm9sdmVyIHdpdGggYW4gaW1wdWxzZSByZXNwb25zZVxuXHRcdCAqIHZhciBjb252b2x2ZXIgPSBuZXcgVG9uZS5Db252b2x2ZXIoXCIuL3BhdGgvdG8vaXIud2F2XCIpLnRvTWFzdGVyKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgIF0sIFRvbmUuQ29udm9sdmVyKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnZvbHZlciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0NvbnZvbHZlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVDb252b2x2ZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29udm9sdXRpb24gYnVmZmVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIob3B0aW9ucy51cmwsIGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY29udm9sdmVyLmJ1ZmZlciA9IGJ1ZmZlci5nZXQoKTtcblx0ICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQoKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9jb252b2x2ZXIpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ29udm9sdmVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlci5kZWZhdWx0cyA9IHsgJ29ubG9hZCc6IFRvbmUubm9PcCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjb252b2x2ZXIncyBidWZmZXJcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ29udm9sdmVyI1xuXHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJ9XG5cdFx0ICogIEBuYW1lIGJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udm9sdmVyLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5nZXQoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnZvbHZlci5idWZmZXIgPSB0aGlzLl9idWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgTG9hZCBhbiBpbXB1bHNlIHJlc3BvbnNlIHVybCBhcyBhbiBhdWRpbyBidWZmZXIuXG5cdFx0ICogIERlY29kZXMgdGhlIGF1ZGlvIGFzeW5jaHJvbm91c2x5IGFuZCBpbnZva2VzXG5cdFx0ICogIHRoZSBjYWxsYmFjayBvbmNlIHRoZSBhdWRpbyBidWZmZXIgbG9hZHMuXG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgYnVmZmVyIHRvIGxvYWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgZmlsZXR5cGUgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIuXG5cdFx0ICogIEBwYXJhbSAge2Z1bmN0aW9uPX0gY2FsbGJhY2tcblx0XHQgKiAgQHJldHVybnMge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sb2FkKHVybCwgZnVuY3Rpb24gKGJ1ZmYpIHtcblx0ICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBidWZmO1xuXHQgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ29udm9sdmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ29udm9sdmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5EaXN0b3J0aW9uIGlzIGEgc2ltcGxlIGRpc3RvcnRpb24gZWZmZWN0IHVzaW5nIFRvbmUuV2F2ZVNoYXBlci5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmcm9tIFthIHN0YWNrb3ZlcmZsb3cgYW5zd2VyXShodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjMxMzQwOCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8T2JqZWN0fSBbZGlzdG9ydGlvbl0gVGhlIGFtb3VudCBvZiBkaXN0b3J0aW9uIChub21pbmFsIHJhbmdlIG9mIDAtMSlcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZGlzdCA9IG5ldyBUb25lLkRpc3RvcnRpb24oMC44KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBmbSA9IG5ldyBUb25lLlNpbXBsZUZNKCkuY29ubmVjdChkaXN0KTtcblx0XHQgKiAvL3RoaXMgc291bmRzIGdvb2Qgb24gYmFzcyBub3Rlc1xuXHRcdCAqIGZtLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQTFcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRGlzdG9ydGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2Rpc3RvcnRpb24nXSwgVG9uZS5EaXN0b3J0aW9uKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoNDA5Nik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBob2xkcyB0aGUgZGlzdG9ydGlvbiBhbW91bnRcblx0XHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGlzdG9ydGlvbiA9IG9wdGlvbnMuZGlzdG9ydGlvbjtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fc2hhcGVyKTtcblx0ICAgICAgICB0aGlzLmRpc3RvcnRpb24gPSBvcHRpb25zLmRpc3RvcnRpb247XG5cdCAgICAgICAgdGhpcy5vdmVyc2FtcGxlID0gb3B0aW9ucy5vdmVyc2FtcGxlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRGlzdG9ydGlvbiwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkRpc3RvcnRpb24uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Rpc3RvcnRpb24nOiAwLjQsXG5cdCAgICAgICAgJ292ZXJzYW1wbGUnOiAnbm9uZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYW1vdW50IG9mIGRpc3RvcnRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRGlzdG9ydGlvbiNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQG5hbWUgZGlzdG9ydGlvblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRGlzdG9ydGlvbi5wcm90b3R5cGUsICdkaXN0b3J0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzdG9ydGlvbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGFtb3VudCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kaXN0b3J0aW9uID0gYW1vdW50O1xuXHQgICAgICAgICAgICB2YXIgayA9IGFtb3VudCAqIDEwMDtcblx0ICAgICAgICAgICAgdmFyIGRlZyA9IE1hdGguUEkgLyAxODA7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5zZXRNYXAoZnVuY3Rpb24gKHgpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyh4KSA8IDAuMDAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9zaG91bGQgb3V0cHV0IDAgd2hlbiBpbnB1dCBpcyAwXG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMyArIGspICogeCAqIDIwICogZGVnIC8gKE1hdGguUEkgKyBrICogTWF0aC5hYnMoeCkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvdmVyc2FtcGxpbmcgb2YgdGhlIGVmZmVjdC4gQ2FuIGVpdGhlciBiZSBcIm5vbmVcIiwgXCIyeFwiIG9yIFwiNHhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5EaXN0b3J0aW9uI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgb3ZlcnNhbXBsZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRGlzdG9ydGlvbi5wcm90b3R5cGUsICdvdmVyc2FtcGxlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvdmVyc2FtcGxpbmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGUgPSBvdmVyc2FtcGxpbmc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EaXN0b3J0aW9ufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRpc3RvcnRpb24ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRGlzdG9ydGlvbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiBcdEBjbGFzcyAgVG9uZS5GZWVkYmFja0VmZmVjdCBwcm92aWRlcyBhIGxvb3AgYmV0d2VlbiBhbiBcblx0XHQgKiBcdCAgICAgICAgYXVkaW8gc291cmNlIGFuZCBpdHMgb3duIG91dHB1dC4gVGhpcyBpcyBhIGJhc2UtY2xhc3Ncblx0XHQgKiBcdCAgICAgICAgZm9yIGZlZWRiYWNrIGVmZmVjdHMuIFxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbZmVlZGJhY2tdIFRoZSBpbml0aWFsIGZlZWRiYWNrIHZhbHVlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZlZWRiYWNrJ10sIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGdhaW4gd2hpY2ggY29udHJvbHMgdGhlIGZlZWRiYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLmZlZWRiYWNrLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2Ygc2lnbmFsIHdoaWNoIGlzIGZlZCBiYWNrIGludG8gdGhlIGVmZmVjdCBpbnB1dC4gXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSB0aGlzLl9mZWVkYmFja0dhaW4uZ2Fpbjtcblx0ICAgICAgICAvL3RoZSBmZWVkYmFjayBsb29wXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4uY2hhaW4odGhpcy5fZmVlZGJhY2tHYWluLCB0aGlzLmVmZmVjdFNlbmQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZmVlZGJhY2snXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GZWVkYmFja0VmZmVjdCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QuZGVmYXVsdHMgPSB7ICdmZWVkYmFjayc6IDAuMTI1IH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GZWVkYmFja0VmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZmVlZGJhY2snXSk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0dhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZlZWRiYWNrRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRmVlZGJhY2tEZWxheSBpcyBhIERlbGF5Tm9kZSBpbiB3aGljaCBwYXJ0IG9mIG91dHB1dFxuXHRcdCAqICAgICAgICAgIHNpZ25hbCBpcyBmZWQgYmFjayBpbnRvIHRoZSBkZWxheS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRmVlZGJhY2tFZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtkZWxheVRpbWVdIFRoZSBkZWxheSBhcHBsaWVkIHRvIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2U9fSBmZWVkYmFjayBUaGUgYW1vdW50IG9mIHRoZSBlZmZlY3RlZCBzaWduYWwgd2hpY2hcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmZWQgYmFjayB0aHJvdWdoIHRoZSBkZWxheS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZmVlZGJhY2tEZWxheSA9IG5ldyBUb25lLkZlZWRiYWNrRGVsYXkoXCI4blwiLCAwLjUpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIHRvbSA9IG5ldyBUb25lLkRydW1TeW50aCh7XG5cdFx0ICogXHRcIm9jdGF2ZXNcIiA6IDQsXG5cdFx0ICogXHRcInBpdGNoRGVjYXlcIiA6IDAuMVxuXHRcdCAqIH0pLmNvbm5lY3QoZmVlZGJhY2tEZWxheSk7XG5cdFx0ICogdG9tLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQTJcIixcIjMyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tEZWxheSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnZmVlZGJhY2snXG5cdCAgICAgICAgXSwgVG9uZS5GZWVkYmFja0RlbGF5KTtcblx0ICAgICAgICBUb25lLkZlZWRiYWNrRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUsIG9wdGlvbnMubWF4RGVsYXkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheVRpbWUgb2YgdGhlIERlbGF5Tm9kZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IHRoaXMuX2RlbGF5Tm9kZS5kZWxheVRpbWU7XG5cdCAgICAgICAgLy8gY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9kZWxheU5vZGUpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmVlZGJhY2tEZWxheSwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0RlbGF5LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjI1LFxuXHQgICAgICAgICdtYXhEZWxheSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRmVlZGJhY2tEZWxheX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0RlbGF5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydkZWxheVRpbWUnXSk7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZlZWRiYWNrRGVsYXk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIGFuIGFycmF5IG9mIGNvbWIgZmlsdGVyIGRlbGF5IHZhbHVlcyBmcm9tIEZyZWV2ZXJiIGltcGxlbWVudGF0aW9uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGNvbWJGaWx0ZXJUdW5pbmdzID0gW1xuXHQgICAgICAgIDE1NTcgLyA0NDEwMCxcblx0ICAgICAgICAxNjE3IC8gNDQxMDAsXG5cdCAgICAgICAgMTQ5MSAvIDQ0MTAwLFxuXHQgICAgICAgIDE0MjIgLyA0NDEwMCxcblx0ICAgICAgICAxMjc3IC8gNDQxMDAsXG5cdCAgICAgICAgMTM1NiAvIDQ0MTAwLFxuXHQgICAgICAgIDExODggLyA0NDEwMCxcblx0ICAgICAgICAxMTE2IC8gNDQxMDBcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgYW4gYXJyYXkgb2YgYWxscGFzcyBmaWx0ZXIgZnJlcXVlbmN5IHZhbHVlcyBmcm9tIEZyZWV2ZXJiIGltcGxlbWVudGF0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcyA9IFtcblx0ICAgICAgICAyMjUsXG5cdCAgICAgICAgNTU2LFxuXHQgICAgICAgIDQ0MSxcblx0ICAgICAgICAzNDFcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRnJlZXZlcmIgaXMgYSByZXZlcmIgYmFzZWQgb24gW0ZyZWV2ZXJiXShodHRwczovL2Njcm1hLnN0YW5mb3JkLmVkdS9+am9zL3Bhc3AvRnJlZXZlcmIuaHRtbCkuXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgb24gcmV2ZXJiIG9uIFtTb3VuZCBPbiBTb3VuZF0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDA0MDgzOTAyL2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbTo4MC9zb3MvZmViMDEvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmFzcCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFtyb29tU2l6ZV0gQ29ycmVsYXRlZCB0byB0aGUgZGVjYXkgdGltZS5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtkYW1wZW5pbmddIFRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIGEgbG93cGFzcyBmaWx0ZXIgYXMgcGFydFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJldmVyYi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZnJlZXZlcmIgPSBuZXcgVG9uZS5GcmVldmVyYigpLnRvTWFzdGVyKCk7XG5cdFx0ICogZnJlZXZlcmIuZGFtcGVuaW5nLnZhbHVlID0gMTAwMDtcblx0XHQgKiAvL3JvdXRpbmcgc3ludGggdGhyb3VnaCB0aGUgcmV2ZXJiXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuQU1TeW50aCgpLmNvbm5lY3QoZnJlZXZlcmIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVldmVyYiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdyb29tU2l6ZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSwgVG9uZS5GcmVldmVyYik7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcm9vbVNpemUgdmFsdWUgYmV0d2Vlbi4gQSBsYXJnZXIgcm9vbVNpemVcblx0XHRcdCAqICB3aWxsIHJlc3VsdCBpbiBhIGxvbmdlciBkZWNheS5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLnJvb21TaXplLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZGFtcGVuaW5nIG9mIHRoZSByZXZlcmJlcmFudCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRhbXBlbmluZywgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbWIgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29tYkZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSBsZWZ0XG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0wgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSByaWdodFxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSID0gW107XG5cdCAgICAgICAgLy9tYWtlIHRoZSBhbGxwYXNzIGZpbHRlcnMgb24gdGhlIHJpZ2h0XG5cdCAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMubGVuZ3RoOyBsKyspIHtcblx0ICAgICAgICAgICAgdmFyIGFsbHBhc3NMID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBhbGxwYXNzTC50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBhbGxwYXNzTC5mcmVxdWVuY3kudmFsdWUgPSBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXNbbF07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTC5wdXNoKGFsbHBhc3NMKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9tYWtlIHRoZSBhbGxwYXNzIGZpbHRlcnMgb24gdGhlIGxlZnRcblx0ICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcy5sZW5ndGg7IHIrKykge1xuXHQgICAgICAgICAgICB2YXIgYWxscGFzc1IgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgIGFsbHBhc3NSLnR5cGUgPSAnYWxscGFzcyc7XG5cdCAgICAgICAgICAgIGFsbHBhc3NSLmZyZXF1ZW5jeS52YWx1ZSA9IGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llc1tyXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSLnB1c2goYWxscGFzc1IpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL21ha2UgdGhlIGNvbWIgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29tYkZpbHRlclR1bmluZ3MubGVuZ3RoOyBjKyspIHtcblx0ICAgICAgICAgICAgdmFyIGxmcGYgPSBuZXcgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlcihjb21iRmlsdGVyVHVuaW5nc1tjXSk7XG5cdCAgICAgICAgICAgIGlmIChjIDwgY29tYkZpbHRlclR1bmluZ3MubGVuZ3RoIC8gMikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbihsZnBmLCB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbMF0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbihsZnBmLCB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbMF0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMucm9vbVNpemUuY29ubmVjdChsZnBmLnJlc29uYW5jZSk7XG5cdCAgICAgICAgICAgIHRoaXMuZGFtcGVuaW5nLmNvbm5lY3QobGZwZi5kYW1wZW5pbmcpO1xuXHQgICAgICAgICAgICB0aGlzLl9jb21iRmlsdGVycy5wdXNoKGxmcGYpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NoYWluIHRoZSBhbGxwYXNzIGZpbHRlcnMgdG9nZXRlaHJcblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgdGhpcy5fYWxscGFzc0ZpbHRlcnNMKTtcblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgdGhpcy5fYWxscGFzc0ZpbHRlcnNSKTtcblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbdGhpcy5fYWxscGFzc0ZpbHRlcnNMLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbdGhpcy5fYWxscGFzc0ZpbHRlcnNSLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdyb29tU2l6ZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GcmVldmVyYiwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlZXZlcmIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Jvb21TaXplJzogMC43LFxuXHQgICAgICAgICdkYW1wZW5pbmcnOiAzMDAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GcmVldmVyYn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVldmVyYi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGFsID0gMDsgYWwgPCB0aGlzLl9hbGxwYXNzRmlsdGVyc0wubGVuZ3RoOyBhbCsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTFthbF0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbYWxdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBhciA9IDA7IGFyIDwgdGhpcy5fYWxscGFzc0ZpbHRlcnNSLmxlbmd0aDsgYXIrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbYXJdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSW2FyXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUiA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgY2YgPSAwOyBjZiA8IHRoaXMuX2NvbWJGaWx0ZXJzLmxlbmd0aDsgY2YrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9jb21iRmlsdGVyc1tjZl0uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9jb21iRmlsdGVyc1tjZl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jb21iRmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncm9vbVNpemUnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRnJlZXZlcmI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIGFuIGFycmF5IG9mIHRoZSBjb21iIGZpbHRlciBkZWxheSB0aW1lIHZhbHVlc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBjb21iRmlsdGVyRGVsYXlUaW1lcyA9IFtcblx0ICAgICAgICAxNjg3IC8gMjUwMDAsXG5cdCAgICAgICAgMTYwMSAvIDI1MDAwLFxuXHQgICAgICAgIDIwNTMgLyAyNTAwMCxcblx0ICAgICAgICAyMjUxIC8gMjUwMDBcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIHJlc29uYW5jZXMgb2YgZWFjaCBvZiB0aGUgY29tYiBmaWx0ZXJzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGNvbWJGaWx0ZXJSZXNvbmFuY2VzID0gW1xuXHQgICAgICAgIDAuNzczLFxuXHQgICAgICAgIDAuODAyLFxuXHQgICAgICAgIDAuNzUzLFxuXHQgICAgICAgIDAuNzMzXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBhbGxwYXNzIGZpbHRlciBmcmVxdWVuY2llc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBhbGxwYXNzRmlsdGVyRnJlcXMgPSBbXG5cdCAgICAgICAgMzQ3LFxuXHQgICAgICAgIDExMyxcblx0ICAgICAgICAzN1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5KQ1JldmVyYiBpcyBhIHNpbXBsZSBbU2Nocm9lZGVyIFJldmVyYmVyYXRvcl0oaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvfmpvcy9wYXNwL1NjaHJvZWRlcl9SZXZlcmJlcmF0b3JzLmh0bWwpXG5cdFx0ICogICAgICAgICB0dW5lZCBieSBKb2huIENob3duaW5nIGluIDE5NzAuXG5cdFx0ICogICAgICAgICBJdCBpcyBtYWRlIHVwIG9mIHRocmVlIGFsbHBhc3MgZmlsdGVycyBhbmQgZm91ciBUb25lLkZlZWRiYWNrQ29tYkZpbHRlci5cblx0XHQgKlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbcm9vbVNpemVdIENvb3JlbGF0ZXMgdG8gdGhlIGRlY2F5IHRpbWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHJldmVyYiA9IG5ldyBUb25lLkpDUmV2ZXJiKDAuNCkuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdFx0ICogdmFyIGRlbGF5ID0gbmV3IFRvbmUuRmVlZGJhY2tEZWxheSgwLjUpO1xuXHRcdCAqIC8vY29ubmVjdGluZyB0aGUgc3ludGggdG8gcmV2ZXJiIHRocm91Z2ggZGVsYXlcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5EdW9TeW50aCgpLmNoYWluKGRlbGF5LCByZXZlcmIpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQTRcIixcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5KQ1JldmVyYiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3Jvb21TaXplJ10sIFRvbmUuSkNSZXZlcmIpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcm9vbSBzaXplIGNvbnRyb2wgdmFsdWVzIGJldHdlZW4gWzAsMV1cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLnJvb21TaXplLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSByb29tIHNpemVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZSA9IG5ldyBUb25lLlNjYWxlKC0wLjczMywgMC4xOTcpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGEgc2VyaWVzIG9mIGFsbHBhc3MgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBwYXJhbGxlbCBmZWVkYmFjayBjb21iIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvL21ha2UgdGhlIGFsbHBhc3MgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGFmID0gMDsgYWYgPCBhbGxwYXNzRmlsdGVyRnJlcXMubGVuZ3RoOyBhZisrKSB7XG5cdCAgICAgICAgICAgIHZhciBhbGxwYXNzID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBhbGxwYXNzLnR5cGUgPSAnYWxscGFzcyc7XG5cdCAgICAgICAgICAgIGFsbHBhc3MuZnJlcXVlbmN5LnZhbHVlID0gYWxscGFzc0ZpbHRlckZyZXFzW2FmXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnMucHVzaChhbGxwYXNzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hbmQgdGhlIGNvbWIgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGNmID0gMDsgY2YgPCBjb21iRmlsdGVyRGVsYXlUaW1lcy5sZW5ndGg7IGNmKyspIHtcblx0ICAgICAgICAgICAgdmFyIGZiY2YgPSBuZXcgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIoY29tYkZpbHRlckRlbGF5VGltZXNbY2ZdLCAwLjEpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplLmNvbm5lY3QoZmJjZi5yZXNvbmFuY2UpO1xuXHQgICAgICAgICAgICBmYmNmLnJlc29uYW5jZS52YWx1ZSA9IGNvbWJGaWx0ZXJSZXNvbmFuY2VzW2NmXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNbdGhpcy5fYWxscGFzc0ZpbHRlcnMubGVuZ3RoIC0gMV0uY29ubmVjdChmYmNmKTtcblx0ICAgICAgICAgICAgaWYgKGNmIDwgY29tYkZpbHRlckRlbGF5VGltZXMubGVuZ3RoIC8gMikge1xuXHQgICAgICAgICAgICAgICAgZmJjZi5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBmYmNmLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzLnB1c2goZmJjZik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY2hhaW4gdGhlIGFsbHBhc3MgZmlsdGVycyB0b2dldGhlclxuXHQgICAgICAgIHRoaXMucm9vbVNpemUuY29ubmVjdCh0aGlzLl9zY2FsZVJvb21TaXplKTtcblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgdGhpcy5fYWxscGFzc0ZpbHRlcnMpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY29ubmVjdCh0aGlzLl9hbGxwYXNzRmlsdGVyc1swXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jb25uZWN0KHRoaXMuX2FsbHBhc3NGaWx0ZXJzWzBdKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3Jvb21TaXplJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuSkNSZXZlcmIsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuSkNSZXZlcmIuZGVmYXVsdHMgPSB7ICdyb29tU2l6ZSc6IDAuNSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5KQ1JldmVyYn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5KQ1JldmVyYi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGFwZiA9IDA7IGFwZiA8IHRoaXMuX2FsbHBhc3NGaWx0ZXJzLmxlbmd0aDsgYXBmKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNbYXBmXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzW2FwZl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgZmJjZiA9IDA7IGZiY2YgPCB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzLmxlbmd0aDsgZmJjZisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnNbZmJjZl0uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzW2ZiY2ZdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydyb29tU2l6ZSddKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5KQ1JldmVyYjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1pZC9TaWRlIHByb2Nlc3Npbmcgc2VwYXJhdGVzIHRoZSB0aGUgJ21pZCcgc2lnbmFsXG5cdFx0ICogICAgICAgICAod2hpY2ggY29tZXMgb3V0IG9mIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBjaGFubmVsKVxuXHRcdCAqICAgICAgICAgYW5kIHRoZSAnc2lkZScgKHdoaWNoIG9ubHkgY29tZXMgb3V0IG9mIHRoZSB0aGUgc2lkZSBjaGFubmVscylcblx0XHQgKiAgICAgICAgIGFuZCBlZmZlY3RzIHRoZW0gc2VwYXJhdGVseSBiZWZvcmUgYmVpbmcgcmVjb21iaW5lZC5cblx0XHQgKiAgICAgICAgIEFwcGxpZXMgYSBNaWQvU2lkZSBzZXBlcmF0aW9uIGFuZCByZWNvbWJpbmF0aW9uLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZvdW5kIGluIFtrdnJhdWRpbyBmb3J1bXNdKGh0dHA6Ly93d3cua3ZyYXVkaW8uY29tL2ZvcnVtL3ZpZXd0b3BpYy5waHA/dD0yMTI1ODcpLlxuXHRcdCAqICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgIFRoaXMgaXMgYSBiYXNlLWNsYXNzIGZvciBNaWQvU2lkZSBFZmZlY3RzLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL3NpZGUgc3BsaXRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZVNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSBuZXcgVG9uZS5NaWRTaWRlU3BsaXQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL3NpZGUgbWVyZ2Vcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZU1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSBuZXcgVG9uZS5NaWRTaWRlTWVyZ2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHNlbmQuIENvbm5lY3QgdG8gbWlkIHByb2Nlc3Npbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWRTZW5kID0gdGhpcy5fbWlkU2lkZVNwbGl0Lm1pZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSBzZW5kLiBDb25uZWN0IHRvIHNpZGUgcHJvY2Vzc2luZ1xuXHRcdFx0ICogIEB0eXBlIHtUb25lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGVTZW5kID0gdGhpcy5fbWlkU2lkZVNwbGl0LnNpZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCByZXR1cm4gY29ubmVjdGlvblxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWRSZXR1cm4gPSB0aGlzLl9taWRTaWRlTWVyZ2UubWlkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIHJldHVybiBjb25uZWN0aW9uXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGVSZXR1cm4gPSB0aGlzLl9taWRTaWRlTWVyZ2Uuc2lkZTtcblx0ICAgICAgICAvL3RoZSBjb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jb25uZWN0KHRoaXMuX21pZFNpZGVTcGxpdCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkU2lkZUVmZmVjdCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkU2VuZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlU2VuZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWRSZXR1cm4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZVJldHVybiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZUVmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGhhc2VyIGlzIGEgcGhhc2VyIGVmZmVjdC4gUGhhc2VycyB3b3JrIGJ5IGNoYW5naW5nIHRoZSBwaGFzZVxuXHRcdCAqICAgICAgICAgb2YgZGlmZmVyZW50IGZyZXF1ZW5jeSBjb21wb25lbnRzIG9mIGFuIGluY29taW5nIHNpZ25hbC4gUmVhZCBtb3JlIG9uXG5cdFx0ICogICAgICAgICBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QaGFzZXJfKGVmZmVjdCkpLlxuXHRcdCAqICAgICAgICAgSW5zcGlyYXRpb24gZm9yIHRoaXMgcGhhc2VyIGNvbWVzIGZyb20gW1R1bmEuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9EaW5haG1vZS90dW5hLykuXG5cdFx0ICpcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgc3BlZWQgb2YgdGhlIHBoYXNpbmcuXG5cdFx0ICpcdEBwYXJhbSB7bnVtYmVyfSBbb2N0YXZlc10gVGhlIG9jdGF2ZXMgb2YgdGhlIGVmZmVjdC5cblx0XHQgKlx0QHBhcmFtIHtGcmVxdWVuY3l9IFtiYXNlRnJlcXVlbmN5XSBUaGUgYmFzZSBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlcnMuXG5cdFx0ICpcdEBleGFtcGxlXG5cdFx0ICogdmFyIHBoYXNlciA9IG5ldyBUb25lLlBoYXNlcih7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogMTUsXG5cdFx0ICogXHRcIm9jdGF2ZXNcIiA6IDUsXG5cdFx0ICogXHRcImJhc2VGcmVxdWVuY3lcIiA6IDEwMDBcblx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkZNU3ludGgoKS5jb25uZWN0KHBoYXNlcik7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJFM1wiLCBcIjJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaGFzZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9zZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnLFxuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeSdcblx0ICAgICAgICBdLCBUb25lLlBoYXNlcik7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGNvbnRyb2xzIHRoZSBmcmVxdWVuY3kgb24gdGhlIGxlZnQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG5ldyBUb25lLkxGTyhvcHRpb25zLmZyZXF1ZW5jeSwgMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBjb250cm9scyB0aGUgZnJlcXVlbmN5IG9uIHRoZSByaWdodCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9SID0gbmV3IFRvbmUuTEZPKG9wdGlvbnMuZnJlcXVlbmN5LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnBoYXNlID0gMTgwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBiYXNlIG1vZHVsYXRpb24gZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb2N0YXZlcyBvZiB0aGUgcGhhc2luZ1xuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHF1YWxpdHkgZmFjdG9yIG9mIHRoZSBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLlEsIFRvbmUuVHlwZS5Qb3NpdGl2ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFycmF5IG9mIGZpbHRlcnMgZm9yIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNMID0gdGhpcy5fbWFrZUZpbHRlcnMob3B0aW9ucy5zdGFnZXMsIHRoaXMuX2xmb0wsIHRoaXMuUSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFycmF5IG9mIGZpbHRlcnMgZm9yIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNSID0gdGhpcy5fbWFrZUZpbHRlcnMob3B0aW9ucy5zdGFnZXMsIHRoaXMuX2xmb1IsIHRoaXMuUSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiB0aGUgZnJlcXVlbmN5IG9mIHRoZSBlZmZlY3Rcblx0XHRcdCAqIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvTC5mcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kudmFsdWUgPSBvcHRpb25zLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlbSB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY29ubmVjdCh0aGlzLl9maWx0ZXJzTFswXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jb25uZWN0KHRoaXMuX2ZpbHRlcnNSWzBdKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJzTFtvcHRpb25zLnN0YWdlcyAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJzUltvcHRpb25zLnN0YWdlcyAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIGZyZXF1ZW5jeSB3aXRoIG9uZSBMRk9cblx0ICAgICAgICB0aGlzLl9sZm9MLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2xmb1IuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3NldCB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHRoaXMuYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgbGZvXG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdGFydCgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RhcnQoKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBoYXNlciwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHRzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge29iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAwLjUsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAzLFxuXHQgICAgICAgICdzdGFnZXMnOiAxMCxcblx0ICAgICAgICAnUSc6IDEwLFxuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMzUwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBzdGFnZXNcblx0XHQgKiAgQHJldHVybnMge0FycmF5fSB0aGUgbnVtYmVyIG9mIGZpbHRlcnMgYWxsIGNvbm5lY3RlZCB0b2dldGhlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaGFzZXIucHJvdG90eXBlLl9tYWtlRmlsdGVycyA9IGZ1bmN0aW9uIChzdGFnZXMsIGNvbm5lY3RUb0ZyZXEsIFEpIHtcblx0ICAgICAgICB2YXIgZmlsdGVycyA9IG5ldyBBcnJheShzdGFnZXMpO1xuXHQgICAgICAgIC8vbWFrZSBhbGwgdGhlIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWdlczsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBmaWx0ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgIGZpbHRlci50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBRLmNvbm5lY3QoZmlsdGVyLlEpO1xuXHQgICAgICAgICAgICBjb25uZWN0VG9GcmVxLmNvbm5lY3QoZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgIGZpbHRlcnNbaV0gPSBmaWx0ZXI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuY29ubmVjdFNlcmllcy5hcHBseShUb25lLCBmaWx0ZXJzKTtcblx0ICAgICAgICByZXR1cm4gZmlsdGVycztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhlIHBoYXNlIGdvZXMgYWJvdmVcblx0XHQgKiB0aGUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBoYXNlciNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGhhc2VyLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0YXZlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0YXZlcztcblx0ICAgICAgICAgICAgdmFyIG1heCA9IHRoaXMuX2Jhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCBvY3RhdmVzKTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5tYXggPSBtYXg7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHRoZSBiYXNlIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVycy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaGFzZXIjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QaGFzZXIucHJvdG90eXBlLCAnYmFzZUZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBmcmVxO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1pbiA9IGZyZXE7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWluID0gZnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QaGFzZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5RLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVyc0wubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc0xbaV0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzTFtpXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNMID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX2ZpbHRlcnNSLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNSW2pdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1Jbal0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBoYXNlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEp1c3QgbGlrZSBhIHN0ZXJlbyBmZWVkYmFjayBlZmZlY3QsIGJ1dCB0aGUgZmVlZGJhY2sgaXMgcm91dGVkIGZyb20gbGVmdCB0byByaWdodFxuXHRcdCAqICAgICAgICAgYW5kIHJpZ2h0IHRvIGxlZnQgaW5zdGVhZCBvZiBvbiB0aGUgc2FtZSBjaGFubmVsLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZlZWRiYWNrJ10sIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBmZWVkYmFjayBmcm9tIHRoZSBvdXRwdXRcblx0XHRcdCAqICBiYWNrIGludG8gdGhlIGlucHV0IG9mIHRoZSBlZmZlY3QgKHJvdXRlZFxuXHRcdFx0ICogIGFjcm9zcyBsZWZ0IGFuZCByaWdodCBjaGFubmVscykuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mZWVkYmFjaywgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGVmdCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSByaWdodCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1JMID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTC5jaGFpbih0aGlzLl9mZWVkYmFja0xSLCB0aGlzLmVmZmVjdFNlbmRSKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIuY2hhaW4odGhpcy5fZmVlZGJhY2tSTCwgdGhpcy5lZmZlY3RTZW5kTCk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjay5mYW4odGhpcy5fZmVlZGJhY2tMUi5nYWluLCB0aGlzLl9mZWVkYmFja1JMLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZmVlZGJhY2snXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydmZWVkYmFjayddKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1JMLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1JMID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5QaW5nUG9uZ0RlbGF5IGlzIGEgZmVlZGJhY2sgZGVsYXkgZWZmZWN0IHdoZXJlIHRoZSBlY2hvIGlzIGhlYXJkXG5cdFx0ICogICAgICAgICAgZmlyc3QgaW4gb25lIGNoYW5uZWwgYW5kIG5leHQgaW4gdGhlIG9wcG9zaXRlIGNoYW5uZWwuIEluIGEgc3RlcmVvXG5cdFx0ICogICAgICAgICAgc3lzdGVtIHRoZXNlIGFyZSB0aGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMuXG5cdFx0ICogICAgICAgICAgUGluZ1BvbmdEZWxheSBpbiBtb3JlIHNpbXBsaWZpZWQgdGVybXMgaXMgdHdvIFRvbmUuRmVlZGJhY2tEZWxheXNcblx0XHQgKiAgICAgICAgICB3aXRoIGluZGVwZW5kZW50IGRlbGF5IHZhbHVlcy4gRWFjaCBkZWxheSBpcyByb3V0ZWQgdG8gb25lIGNoYW5uZWxcblx0XHQgKiAgICAgICAgICAobGVmdCBvciByaWdodCksIGFuZCB0aGUgY2hhbm5lbCB0cmlnZ2VyZWQgc2Vjb25kIHdpbGwgYWx3YXlzXG5cdFx0ICogICAgICAgICAgdHJpZ2dlciBhdCB0aGUgc2FtZSBpbnRlcnZhbCBhZnRlciB0aGUgZmlyc3QuXG5cdFx0ICpcblx0XHQgKiBcdEBjb25zdHJ1Y3RvclxuXHRcdCAqIFx0QGV4dGVuZHMge1RvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXlUaW1lIGJldHdlZW4gY29uc2VjdXRpdmUgZWNob3MuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2U9fSBmZWVkYmFjayBUaGUgYW1vdW50IG9mIHRoZSBlZmZlY3RlZCBzaWduYWwgd2hpY2hcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZlZCBiYWNrIHRocm91Z2ggdGhlIGRlbGF5LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwaW5nUG9uZyA9IG5ldyBUb25lLlBpbmdQb25nRGVsYXkoXCI0blwiLCAwLjIpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIGRydW0gPSBuZXcgVG9uZS5EcnVtU3ludGgoKS5jb25uZWN0KHBpbmdQb25nKTtcblx0XHQgKiBkcnVtLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCIzMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBpbmdQb25nRGVsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ2ZlZWRiYWNrJ1xuXHQgICAgICAgIF0sIFRvbmUuUGluZ1BvbmdEZWxheSk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZSBvbiB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xlZnREZWxheSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZSBvbiB0aGUgcmlnaHQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yaWdodERlbGF5ID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwcmVkZWxheSBvbiB0aGUgcmlnaHQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yaWdodFByZURlbGF5ID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSB0aW1lIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGVsYXlUaW1lLCBUb25lLlR5cGUuVGltZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbih0aGlzLl9sZWZ0RGVsYXksIHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbih0aGlzLl9yaWdodFByZURlbGF5LCB0aGlzLl9yaWdodERlbGF5LCB0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lLmZhbih0aGlzLl9sZWZ0RGVsYXkuZGVsYXlUaW1lLCB0aGlzLl9yaWdodERlbGF5LmRlbGF5VGltZSwgdGhpcy5fcmlnaHRQcmVEZWxheS5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8vcmVhcnJhbmdlZCB0aGUgZmVlZGJhY2sgdG8gYmUgYWZ0ZXIgdGhlIHJpZ2h0UHJlRGVsYXlcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSLmNvbm5lY3QodGhpcy5fcmlnaHREZWxheSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydkZWxheVRpbWUnXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QaW5nUG9uZ0RlbGF5LCBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaW5nUG9uZ0RlbGF5LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjI1LFxuXHQgICAgICAgICdtYXhEZWxheVRpbWUnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QaW5nUG9uZ0RlbGF5fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBpbmdQb25nRGVsYXkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0RGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xlZnREZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHREZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHREZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHRQcmVEZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHRQcmVEZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydkZWxheVRpbWUnXSk7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QaW5nUG9uZ0RlbGF5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QaXRjaFNoaWZ0IGRvZXMgbmVhci1yZWFsdGltZSBwaXRjaCBzaGlmdGluZyB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgVGhlIGVmZmVjdCBpcyBhY2hpZXZlZCBieSBzcGVlZGluZyB1cCBvciBzbG93aW5nIGRvd24gdGhlIGRlbGF5VGltZVxuXHRcdCAqICAgICAgICAgb2YgYSBEZWxheU5vZGUgdXNpbmcgYSBzYXd0b290aCB3YXZlLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZvdW5kIGluIFt0aGlzIHBkZl0oaHR0cDovL2RzcC1ib29rLm5hcm9kLnJ1L3NvdW5kcHJvYy5wZGYpLlxuXHRcdCAqICAgICAgICAgQWRkaXRpb25hbCByZWZlcmVuY2UgYnkgW01pbGxlciBQdWNrZXRdKGh0dHA6Ly9tc3AudWNzZC5lZHUvdGVjaG5pcXVlcy92MC4xMS9ib29rLWh0bWwvbm9kZTExNS5odG1sKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5GZWVkYmFja0VmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtJbnRlcnZhbD19IHBpdGNoIFRoZSBpbnRlcnZhbCB0byB0cmFuc3Bvc2UgdGhlIGluY29taW5nIHNpZ25hbCBieS5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGl0Y2hTaGlmdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3BpdGNoJ10sIFRvbmUuUGl0Y2hTaGlmdCk7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwaXRjaCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVXNlcyB0d28gRGVsYXlOb2RlcyB0byBjb3ZlciB1cCB0aGUganVtcCBpblxuXHRcdFx0ICogIHRoZSBzYXd0b290aCB3YXZlLlxuXHRcdFx0ICogIEB0eXBlICB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheUEgPSBuZXcgVG9uZS5EZWxheSgwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlyc3QgTEZPLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0EgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDAuMSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnc2F3dG9vdGgnXG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9kZWxheUEuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2Vjb25kIERlbGF5Tm9kZVxuXHRcdFx0ICogIEB0eXBlICB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheUIgPSBuZXcgVG9uZS5EZWxheSgwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlyc3QgTEZPLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0IgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDAuMSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnc2F3dG9vdGgnLFxuXHQgICAgICAgICAgICAncGhhc2UnOiAxODBcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2RlbGF5Qi5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENyb3NzZmFkZSBxdWlja2x5IGJldHdlZW4gdGhlIHR3byBkZWxheSBsaW5lc1xuXHRcdFx0ICogIHRvIGNvdmVyIHVwIHRoZSBqdW1wIGluIHRoZSBzYXd0b290aCB3YXZlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNyb3NzRmFkZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlID0gbmV3IFRvbmUuQ3Jvc3NGYWRlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTEZPIHdoaWNoIGFsdGVybmF0ZXMgYmV0d2VlbiB0aGUgdHdvXG5cdFx0XHQgKiAgZGVsYXkgbGluZXMgdG8gY292ZXIgdXAgdGhlIGRpc3Bhcml0eSBpbiB0aGVcblx0XHRcdCAqICBzYXd0b290aCB3YXZlLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZUxGTyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiAndHJpYW5nbGUnLFxuXHQgICAgICAgICAgICAncGhhc2UnOiA5MFxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5fY3Jvc3NGYWRlLmZhZGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrRGVsYXkgPSBuZXcgVG9uZS5EZWxheShvcHRpb25zLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBkZWxheSBvbiB0aGUgaW5wdXQgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9mZWVkYmFja0RlbGF5LmRlbGF5VGltZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZGVsYXlUaW1lJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZCB0aGUgY3VycmVudCBwaXRjaFxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BpdGNoID0gb3B0aW9ucy5waXRjaDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkIHRoZSBjdXJyZW50IHdpbmRvd1NpemVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl93aW5kb3dTaXplID0gb3B0aW9ucy53aW5kb3dTaXplO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgdHdvIGRlbGF5IGxpbmVzIHVwXG5cdCAgICAgICAgdGhpcy5fZGVsYXlBLmNvbm5lY3QodGhpcy5fY3Jvc3NGYWRlLmEpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Qi5jb25uZWN0KHRoaXMuX2Nyb3NzRmFkZS5iKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeS5mYW4odGhpcy5fbGZvQS5mcmVxdWVuY3ksIHRoaXMuX2xmb0IuZnJlcXVlbmN5LCB0aGlzLl9jcm9zc0ZhZGVMRk8uZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3JvdXRlIHRoZSBpbnB1dFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5mYW4odGhpcy5fZGVsYXlBLCB0aGlzLl9kZWxheUIpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZS5jaGFpbih0aGlzLl9mZWVkYmFja0RlbGF5LCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgTEZPcyBhdCB0aGUgc2FtZSB0aW1lXG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgdGhpcy5fbGZvQS5zdGFydChub3cpO1xuXHQgICAgICAgIHRoaXMuX2xmb0Iuc3RhcnQobm93KTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8uc3RhcnQobm93KTtcblx0ICAgICAgICAvL3NldCB0aGUgaW5pdGlhbCB2YWx1ZVxuXHQgICAgICAgIHRoaXMud2luZG93U2l6ZSA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QaXRjaFNoaWZ0LCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaXRjaFNoaWZ0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwaXRjaCc6IDAsXG5cdCAgICAgICAgJ3dpbmRvd1NpemUnOiAwLjEsXG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDAsXG5cdCAgICAgICAgJ2ZlZWRiYWNrJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlcGl0Y2ggdGhlIGluY29taW5nIHNpZ25hbCBieSBzb21lIGludGVydmFsIChtZWFzdXJlZFxuXHRcdCAqIGluIHNlbWktdG9uZXMpLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBpdGNoU2hpZnQjXG5cdFx0ICogQHR5cGUge0ludGVydmFsfVxuXHRcdCAqIEBuYW1lIHBpdGNoXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBwaXRjaFNoaWZ0LnBpdGNoID0gLTEyOyAvL2Rvd24gb25lIG9jdGF2ZVxuXHRcdCAqIHBpdGNoU2hpZnQucGl0Y2ggPSA3OyAvL3VwIGEgZmlmdGhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBpdGNoU2hpZnQucHJvdG90eXBlLCAncGl0Y2gnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9waXRjaDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BpdGNoID0gaW50ZXJ2YWw7XG5cdCAgICAgICAgICAgIHZhciBmYWN0b3IgPSAwO1xuXHQgICAgICAgICAgICBpZiAoaW50ZXJ2YWwgPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1pbiA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1heCA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1pbiA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1heCA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICBmYWN0b3IgPSBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhpbnRlcnZhbCAtIDEpICsgMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0EubWluID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0EubWF4ID0gMDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0IubWluID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0IubWF4ID0gMDtcblx0ICAgICAgICAgICAgICAgIGZhY3RvciA9IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGludGVydmFsKSAtIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZnJlcXVlbmN5LnZhbHVlID0gZmFjdG9yICogKDEuMiAvIHRoaXMuX3dpbmRvd1NpemUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHdpbmRvdyBzaXplIGNvcnJlc3BvbmRzIHJvdWdobHkgdG8gdGhlIHNhbXBsZSBsZW5ndGggaW4gYSBsb29waW5nIHNhbXBsZXIuXG5cdFx0ICogU21hbGxlciB2YWx1ZXMgYXJlIGRlc2lyYWJsZSBmb3IgYSBsZXNzIG5vdGljZWFibGUgZGVsYXkgdGltZSBvZiB0aGUgcGl0Y2ggc2hpZnRlZFxuXHRcdCAqIHNpZ25hbCwgYnV0IGxhcmdlciB2YWx1ZXMgd2lsbCByZXN1bHQgaW4gc21vb3RoZXIgcGl0Y2ggc2hpZnRpbmcgZm9yIGxhcmdlciBpbnRlcnZhbHMuXG5cdFx0ICogQSBub21pbmFsIHJhbmdlIG9mIDAuMDMgdG8gMC4xIGlzIHJlY29tbWVuZGVkLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBpdGNoU2hpZnQjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgd2luZG93U2l6ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogcGl0Y2hTaGlmdC53aW5kb3dTaXplID0gMC4xO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGl0Y2hTaGlmdC5wcm90b3R5cGUsICd3aW5kb3dTaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fd2luZG93U2l6ZSA9IHRoaXMudG9TZWNvbmRzKHNpemUpO1xuXHQgICAgICAgICAgICB0aGlzLnBpdGNoID0gdGhpcy5fcGl0Y2g7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBpdGNoU2hpZnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBpdGNoU2hpZnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kZWxheUEuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5QSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlCLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheUIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb0EuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0EgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb0IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZUxGTyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2RlbGF5VGltZScpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrRGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrRGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QaXRjaFNoaWZ0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgQnVmZmVyU291cmNlTm9kZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0gIHtBdWRpb0J1ZmZlcnxUb25lLkJ1ZmZlcn0gIGJ1ZmZlciAgIFRoZSBidWZmZXIgdG8gcGxheVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIG9ubG9hZCAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBpcyBkb25lIHBsYXlpbmcuXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdidWZmZXInLFxuXHQgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgIF0sIFRvbmUuQnVmZmVyU291cmNlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlXG5cdFx0XHQgKiAgYnVmZmVyIHNvdXJjZSBpcyBkb25lIHBsYXlpbmcuXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG9wdGlvbnMub25lbmRlZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGltZSB0aGF0IHRoZSBidWZmZXIgd2FzIHN0YXJ0ZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuIGFkZGl0aW9uYWwgZmxhZyBpZiB0aGUgYWN0dWFsIEJ1ZmZlclNvdXJjZU5vZGVcblx0XHRcdCAqICBoYXMgYmVlbiBzdGFydGVkLiBiL2Mgc3RvcHBpbmcgYW4gdW5zdGFydGVkIGJ1ZmZlclxuXHRcdFx0ICogIHdpbGwgdGhyb3cgaXQgaW50byBhbiBpbnZhbGlkIHN0YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtCb29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRmxhZyBpZiB0aGUgc291cmNlIGhhcyBhbHJlYWR5IGJlZW4gc3RvcHBlZFxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlU3RvcHBlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0aW1lIHRoYXQgdGhlIGJ1ZmZlciBpcyBzY2hlZHVsZWQgdG8gc3RvcC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBub2RlIHdoaWNoIGVudmVsb3BlcyB0aGUgQnVmZmVyU291cmNlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGJ1ZmZlciBzb3VyY2Vcblx0XHRcdCAqICBAdHlwZSAge0F1ZGlvQnVmZmVyU291cmNlTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5jb25uZWN0KHRoaXMuX2dhaW5Ob2RlKTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2Uub25lbmRlZCA9IHRoaXMuX29uZW5kZWQuYmluZCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBwcml2YXRlIGJ1ZmZlciBpbnN0YW5jZVxuXHRcdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihvcHRpb25zLmJ1ZmZlciwgb3B0aW9ucy5vbmxvYWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwbGF5YmFja1JhdGUgb2YgdGhlIGJ1ZmZlclxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX3NvdXJjZS5wbGF5YmFja1JhdGUsIFRvbmUuVHlwZS5Qb3NpdGl2ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZhZGVJbiB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVJbiA9IG9wdGlvbnMuZmFkZUluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlT3V0IHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZU91dCA9IG9wdGlvbnMuZmFkZU91dDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjdXJ2ZSBhcHBsaWVkIHRvIHRoZSBmYWRlcywgZWl0aGVyIFwibGluZWFyXCIgb3IgXCJleHBvbmVudGlhbFwiXG5cdFx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jdXJ2ZSA9IG9wdGlvbnMuY3VydmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHRoYXQgdGhlIGJ1ZmZlciByYW1wcyB0b1xuXHRcdFx0ICogIEB0eXBlIHtHYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluID0gMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBvbmVuZGVkIHRpbWVvdXRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25lbmRlZFRpbWVvdXQgPSAtMTtcblx0ICAgICAgICAvL3NldCBzb21lIHZhbHVlcyBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLmxvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBvcHRpb25zLmxvb3BTdGFydDtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBvcHRpb25zLmxvb3BFbmQ7XG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUudmFsdWUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJ1ZmZlclNvdXJjZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25lbmRlZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAwLFxuXHQgICAgICAgICdmYWRlSW4nOiAwLFxuXHQgICAgICAgICdmYWRlT3V0JzogMCxcblx0ICAgICAgICAnY3VydmUnOiAnbGluZWFyJyxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHBsYXliYWNrIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byB0ZXN0IHRoZSBzdGF0ZSBhdFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5TdGF0ZX0gIFRoZSBwbGF5YmFjayBzdGF0ZS4gXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSAmJiB0aW1lID49IHRoaXMuX3N0YXJ0VGltZSAmJiAhdGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdGFydGVkO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgYnVmZmVyXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHBhcmFtICB7R2Fpbn0gIFtnYWluPTFdICBUaGUgZ2FpbiB0byBwbGF5IHRoZSBidWZmZXIgYmFjayBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBmYWRlSW5UaW1lICBUaGUgb3B0aW9uYWwgZmFkZUluIHJhbXAgdGltZS5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24sIGdhaW4sIGZhZGVJblRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyU291cmNlIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgb25jZS4nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCF0aGlzLmJ1ZmZlci5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkJ1ZmZlclNvdXJjZTogYnVmZmVyIGlzIGVpdGhlciBub3Qgc2V0IG9yIG5vdCBsb2FkZWQuJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL2lmIGl0J3MgYSBsb29wIHRoZSBkZWZhdWx0IG9mZnNldCBpcyB0aGUgbG9vcHN0YXJ0IHBvaW50XG5cdCAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCB0aGlzLmxvb3BTdGFydCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9vdGhlcndpc2UgdGhlIGRlZmF1bHQgb2Zmc2V0IGlzIDBcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgZ2FpbiA9IFRvbmUuZGVmYXVsdEFyZyhnYWluLCAxKTtcblx0ICAgICAgICB0aGlzLl9nYWluID0gZ2Fpbjtcblx0ICAgICAgICBmYWRlSW5UaW1lID0gdGhpcy50b1NlY29uZHMoVG9uZS5kZWZhdWx0QXJnKGZhZGVJblRpbWUsIHRoaXMuZmFkZUluKSk7XG5cdCAgICAgICAgdGhpcy5mYWRlSW4gPSBmYWRlSW5UaW1lO1xuXHQgICAgICAgIGlmIChmYWRlSW5UaW1lID4gMCkge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5jdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodGhpcy5fZ2FpbiwgdGltZSArIGZhZGVJblRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUodGhpcy5fZ2FpbiwgdGltZSwgZmFkZUluVGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKGdhaW4sIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lO1xuXHQgICAgICAgIHZhciBjb21wdXRlZER1ciA9IHRoaXMudG9TZWNvbmRzKFRvbmUuZGVmYXVsdEFyZyhkdXJhdGlvbiwgdGhpcy5idWZmZXIuZHVyYXRpb24gLSBvZmZzZXQgJSB0aGlzLmJ1ZmZlci5kdXJhdGlvbikpO1xuXHQgICAgICAgIGNvbXB1dGVkRHVyID0gTWF0aC5tYXgoY29tcHV0ZWREdXIsIDApO1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChkdXJhdGlvbikpIHtcblx0ICAgICAgICAgICAgLy9jbGlwIHRoZSBkdXJhdGlvbiB3aGVuIG5vdCBsb29waW5nXG5cdCAgICAgICAgICAgIGlmICghdGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgICAgICBjb21wdXRlZER1ciA9IE1hdGgubWluKGNvbXB1dGVkRHVyLCB0aGlzLmJ1ZmZlci5kdXJhdGlvbiAtIG9mZnNldCAlIHRoaXMuYnVmZmVyLmR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnN0b3AodGltZSArIGNvbXB1dGVkRHVyLCB0aGlzLmZhZGVPdXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3N0YXJ0IHRoZSBidWZmZXIgc291cmNlXG5cdCAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAvL21vZGlmeSB0aGUgb2Zmc2V0IGlmIGl0J3MgZ3JlYXRlciB0aGFuIHRoZSBsb29wIHRpbWVcblx0ICAgICAgICAgICAgdmFyIGxvb3BFbmQgPSB0aGlzLmxvb3BFbmQgfHwgdGhpcy5idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgICAgIHZhciBsb29wU3RhcnQgPSB0aGlzLmxvb3BTdGFydDtcblx0ICAgICAgICAgICAgdmFyIGxvb3BEdXJhdGlvbiA9IGxvb3BFbmQgLSBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIC8vbW92ZSB0aGUgb2Zmc2V0IGJhY2tcblx0ICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBsb29wRW5kKSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSAob2Zmc2V0IC0gbG9vcFN0YXJ0KSAlIGxvb3BEdXJhdGlvbiArIGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zb3VyY2UuYnVmZmVyID0gdGhpcy5idWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmxvb3BFbmQgPSB0aGlzLmxvb3BFbmQgfHwgdGhpcy5idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgaWYgKG9mZnNldCA8IHRoaXMuYnVmZmVyLmR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2Uuc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGJ1ZmZlci4gT3B0aW9uYWxseSBhZGQgYSByYW1wIHRpbWUgdG8gZmFkZSB0aGVcblx0XHQgKiAgYnVmZmVyIG91dC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICB0aW1lICAgICAgICAgVGhlIHRpbWUgdGhlIGJ1ZmZlciBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBmYWRlT3V0VGltZSAgSG93IGxvbmcgdGhlIGdhaW4gc2hvdWxkIGZhZGUgb3V0IGZvclxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lLCBmYWRlT3V0VGltZSkge1xuXHQgICAgICAgIGlmICghdGhpcy5idWZmZXIubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJTb3VyY2U6IGJ1ZmZlciBpcyBlaXRoZXIgbm90IHNldCBvciBub3QgbG9hZGVkLicpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL2lmIHRoZSBldmVudCBoYXMgYWxyZWFkeSBiZWVuIHNjaGVkdWxlZCwgY2xlYXIgaXRcblx0ICAgICAgICBpZiAodGhpcy5fc3RvcFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3N0b3AgaWYgaXQncyBzY2hlZHVsZSBiZWZvcmUgdGhlIHN0YXJ0IHRpbWVcblx0ICAgICAgICBpZiAodGltZSA8PSB0aGlzLl9zdGFydFRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4udmFsdWUgPSAwO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IE1hdGgubWF4KHRoaXMuX3N0YXJ0VGltZSArIHRoaXMuZmFkZUluICsgdGhpcy5zYW1wbGVUaW1lLCB0aW1lKTtcblx0ICAgICAgICAvL2NhbmNlbCB0aGUgcHJldmlvdXMgY3VydmVcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IHRpbWU7XG5cdCAgICAgICAgLy90aGUgZmFkZU91dCB0aW1lXG5cdCAgICAgICAgZmFkZU91dFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhUb25lLmRlZmF1bHRBcmcoZmFkZU91dFRpbWUsIHRoaXMuZmFkZU91dCkpO1xuXHQgICAgICAgIHZhciBoZWxkRHVyYXRpb24gPSB0aW1lIC0gdGhpcy5fc3RhcnRUaW1lIC0gdGhpcy5mYWRlSW4gLSB0aGlzLnNhbXBsZVRpbWU7XG5cdCAgICAgICAgaWYgKCF0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgLy9tYWtlIHN1cmUgdGhlIGZhZGUgZG9lcyBub3QgZ28gYmV5b25kIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlclxuXHQgICAgICAgICAgICBoZWxkRHVyYXRpb24gPSBNYXRoLm1pbihoZWxkRHVyYXRpb24sIHRoaXMuYnVmZmVyLmR1cmF0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZmFkZU91dFRpbWUgPSBNYXRoLm1pbihoZWxkRHVyYXRpb24sIGZhZGVPdXRUaW1lKTtcblx0ICAgICAgICB2YXIgc3RhcnRGYWRlID0gdGltZSAtIGZhZGVPdXRUaW1lO1xuXHQgICAgICAgIGlmIChmYWRlT3V0VGltZSA+IHRoaXMuc2FtcGxlVGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKHRoaXMuX2dhaW4sIHN0YXJ0RmFkZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmN1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKDAsIHN0YXJ0RmFkZSwgZmFkZU91dFRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl9vbmVuZGVkVGltZW91dCk7XG5cdCAgICAgICAgdGhpcy5fb25lbmRlZFRpbWVvdXQgPSBUb25lLmNvbnRleHQuc2V0VGltZW91dCh0aGlzLl9vbmVuZGVkLmJpbmQodGhpcyksIHRoaXMuX3N0b3BUaW1lIC0gdGhpcy5ub3coKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBhIHNjaGVkdWxlZCBzdG9wIGV2ZW50XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlclNvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5jYW5jZWxTdG9wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xICYmICF0aGlzLl9zb3VyY2VTdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIHRoZSBzdG9wIGVudmVsb3BlXG5cdCAgICAgICAgICAgIHZhciBmYWRlSW5UaW1lID0gdGhpcy50b1NlY29uZHModGhpcy5mYWRlSW4pO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aGlzLl9zdGFydFRpbWUgKyBmYWRlSW5UaW1lICsgdGhpcy5zYW1wbGVUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCBNYXRoLm1heCh0aGlzLm5vdygpLCB0aGlzLl9zdGFydFRpbWUgKyBmYWRlSW5UaW1lICsgdGhpcy5zYW1wbGVUaW1lKSk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fb25lbmRlZFRpbWVvdXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGVuZGVkLlxuXHRcdCAqICBJbnZva2VzIGBvbmVuZGVkYCBhbmQgZGlzcG9zZXMgdGhlIG5vZGUuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuX29uZW5kZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VTdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN0b3BwZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICAvL2FsbG93IGFkZGl0aW9uYWwgdGltZSBmb3IgdGhlIGV4cG9uZW50aWFsIGN1cnZlIHRvIGZ1bGx5IGRlY2F5XG5cdCAgICAgICAgICAgIHZhciBhZGRpdGlvbmFsVGFpbCA9IHRoaXMuY3VydmUgPT09ICdleHBvbmVudGlhbCcgPyB0aGlzLmZhZGVPdXQgKiAyIDogMDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVN0YXJ0ZWQgJiYgdGhpcy5fc3RvcFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2Uuc3RvcCh0aGlzLl9zdG9wVGltZSArIGFkZGl0aW9uYWxUYWlsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLm9uZW5kZWQodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBzdGFydCBhdCB0aGlzIHBvc2l0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UubG9vcFN0YXJ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wU3RhcnQgPSB0aGlzLnRvU2Vjb25kcyhsb29wU3RhcnQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgbG9vcCBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIGVuZCBhdCB0aGlzIHBvc2l0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UubG9vcEVuZCA9IHRoaXMudG9TZWNvbmRzKGxvb3BFbmQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF1ZGlvIGJ1ZmZlciBiZWxvbmdpbmcgdG8gdGhlIHBsYXllci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdCAqIEBuYW1lIGJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVyIHNob3VsZCBsb29wIG9uY2UgaXQncyBvdmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb29wXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UubG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHRoaXMuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLm9uZW5kZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTtcblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG51bGw7XG5cdCAgICAgICAgVG9uZS5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl9vbmVuZGVkVGltZW91dCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQnVmZmVyU291cmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTm9pc2UgaXMgYSBub2lzZSBnZW5lcmF0b3IuIEl0IHVzZXMgbG9vcGVkIG5vaXNlIGJ1ZmZlcnMgdG8gc2F2ZSBvbiBwZXJmb3JtYW5jZS5cblx0XHQgKiAgICAgICAgICBUb25lLk5vaXNlIHN1cHBvcnRzIHRoZSBub2lzZSB0eXBlczogXCJwaW5rXCIsIFwid2hpdGVcIiwgYW5kIFwiYnJvd25cIi4gUmVhZCBtb3JlIGFib3V0XG5cdFx0ICogICAgICAgICAgY29sb3JzIG9mIG5vaXNlIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbG9yc19vZl9ub2lzZSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IHR5cGUgdGhlIG5vaXNlIHR5cGUgKHdoaXRlfHBpbmt8YnJvd24pXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pbml0aWFsaXplIHRoZSBub2lzZSBhbmQgc3RhcnRcblx0XHQgKiB2YXIgbm9pc2UgPSBuZXcgVG9uZS5Ob2lzZShcInBpbmtcIikuc3RhcnQoKTtcblx0XHQgKlxuXHRcdCAqIC8vbWFrZSBhbiBhdXRvZmlsdGVyIHRvIHNoYXBlIHRoZSBub2lzZVxuXHRcdCAqIHZhciBhdXRvRmlsdGVyID0gbmV3IFRvbmUuQXV0b0ZpbHRlcih7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogXCI4bVwiLFxuXHRcdCAqIFx0XCJtaW5cIiA6IDgwMCxcblx0XHQgKiBcdFwibWF4XCIgOiAxNTAwMFxuXHRcdCAqIH0pLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHRcdCAqXG5cdFx0ICogLy9jb25uZWN0IHRoZSBub2lzZVxuXHRcdCAqIG5vaXNlLmNvbm5lY3QoYXV0b0ZpbHRlcik7XG5cdFx0ICogLy9zdGFydCB0aGUgYXV0b2ZpbHRlciBMRk9cblx0XHQgKiBhdXRvRmlsdGVyLnN0YXJ0KClcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd0eXBlJ10sIFRvbmUuTm9pc2UpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJTb3VyY2VOb2RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYnVmZmVyXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBub2lzZS4gQWZmZWN0c1xuXHRcdFx0ICogIHRoZSBcImZyZXF1ZW5jeVwiIG9mIHRoZSBub2lzZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Ob2lzZSwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICd3aGl0ZScsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgbm9pc2UuIENhbiBiZSBcIndoaXRlXCIsIFwiYnJvd25cIiwgb3IgXCJwaW5rXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTm9pc2UjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBub2lzZS50eXBlID0gXCJ3aGl0ZVwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTm9pc2UucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlICE9PSB0eXBlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodHlwZSBpbiBfbm9pc2VCdWZmZXJzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9pZiBpdCdzIHBsYXlpbmcsIHN0b3AgYW5kIHJlc3RhcnQgaXRcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9wKG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLk5vaXNlOiBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBub2lzZS4gQWZmZWN0c1xuXHRcdCAqICB0aGUgXCJmcmVxdWVuY3lcIiBvZiB0aGUgbm9pc2UuXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQHNpZ25hbFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTm9pc2UucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2UucGxheWJhY2tSYXRlLnZhbHVlID0gcmF0ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgYnVmZmVyID0gX25vaXNlQnVmZmVyc1t0aGlzLl90eXBlXTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2UoYnVmZmVyKS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UubG9vcCA9IHRydWU7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZSA9IHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2Uuc3RhcnQodGhpcy50b1NlY29uZHModGltZSksIE1hdGgucmFuZG9tKCkgKiAoYnVmZmVyLmR1cmF0aW9uIC0gMC4wMDEpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgaW50ZXJuYWwgc3RvcCBtZXRob2Rcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5zdG9wKHRoaXMudG9TZWNvbmRzKHRpbWUpKTtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVzdGFydHMgdGhlIG5vaXNlLlxuXHRcdCAqIEBwYXJhbSAge1t0eXBlXX0gdGltZSBbZGVzY3JpcHRpb25dXG5cdFx0ICogQHJldHVybiB7W3R5cGVdfSAgICAgIFtkZXNjcmlwdGlvbl1cblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vVE9ETyBjb3VsZCBiZSBvcHRpbWl6ZWQgYnkgY2FuY2VsbGluZyB0aGUgYnVmZmVyIHNvdXJjZSAnc3RvcCdcblx0ICAgICAgICAvL3N0b3AgYW5kIHJlc3RhcnRcblx0ICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5fc291cmNlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBUSEUgQlVGRkVSU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL05vaXNlIGJ1ZmZlciBzdGF0c1xuXHQgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IDQ0MTAwICogNTtcblx0ICAgIHZhciBjaGFubmVscyA9IDI7XG5cdCAgICAvKipcblx0XHQgKlx0VGhlIG5vaXNlIGFycmF5cy4gR2VuZXJhdGVkIG9uIGluaXRpYWxpemF0aW9uLlxuXHRcdCAqICBib3Jyb3dlZCBoZWF2aWx5IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3phY2hhcnlkZW50b24vbm9pc2UuanNcblx0XHQgKiAgKGMpIDIwMTMgWmFjaCBEZW50b24gKE1JVClcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgX25vaXNlQXJyYXlzID0ge1xuXHQgICAgICAgICdwaW5rJzogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWxOdW0gPSAwOyBjaGFubmVsTnVtIDwgY2hhbm5lbHM7IGNoYW5uZWxOdW0rKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJbY2hhbm5lbE51bV0gPSBjaGFubmVsO1xuXHQgICAgICAgICAgICAgICAgdmFyIGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2O1xuXHQgICAgICAgICAgICAgICAgYjAgPSBiMSA9IGIyID0gYjMgPSBiNCA9IGI1ID0gYjYgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB3aGl0ZSA9IE1hdGgucmFuZG9tKCkgKiAyIC0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBiMCA9IDAuOTk4ODYgKiBiMCArIHdoaXRlICogMC4wNTU1MTc5O1xuXHQgICAgICAgICAgICAgICAgICAgIGIxID0gMC45OTMzMiAqIGIxICsgd2hpdGUgKiAwLjA3NTA3NTk7XG5cdCAgICAgICAgICAgICAgICAgICAgYjIgPSAwLjk2OSAqIGIyICsgd2hpdGUgKiAwLjE1Mzg1Mjtcblx0ICAgICAgICAgICAgICAgICAgICBiMyA9IDAuODY2NSAqIGIzICsgd2hpdGUgKiAwLjMxMDQ4NTY7XG5cdCAgICAgICAgICAgICAgICAgICAgYjQgPSAwLjU1ICogYjQgKyB3aGl0ZSAqIDAuNTMyOTUyMjtcblx0ICAgICAgICAgICAgICAgICAgICBiNSA9IC0wLjc2MTYgKiBiNSAtIHdoaXRlICogMC4wMTY4OTg7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSA9IGIwICsgYjEgKyBiMiArIGIzICsgYjQgKyBiNSArIGI2ICsgd2hpdGUgKiAwLjUzNjI7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSAqPSAwLjExO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIChyb3VnaGx5KSBjb21wZW5zYXRlIGZvciBnYWluXG5cdCAgICAgICAgICAgICAgICAgICAgYjYgPSB3aGl0ZSAqIDAuMTE1OTI2O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSgpLFxuXHQgICAgICAgICdicm93bic6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsTnVtID0gMDsgY2hhbm5lbE51bSA8IGNoYW5uZWxzOyBjaGFubmVsTnVtKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJMZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyW2NoYW5uZWxOdW1dID0gY2hhbm5lbDtcblx0ICAgICAgICAgICAgICAgIHZhciBsYXN0T3V0ID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgd2hpdGUgPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSA9IChsYXN0T3V0ICsgMC4wMiAqIHdoaXRlKSAvIDEuMDI7XG5cdCAgICAgICAgICAgICAgICAgICAgbGFzdE91dCA9IGNoYW5uZWxbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSAqPSAzLjU7ICAgIC8vIChyb3VnaGx5KSBjb21wZW5zYXRlIGZvciBnYWluXG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcblx0ICAgICAgICB9KCksXG5cdCAgICAgICAgJ3doaXRlJzogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWxOdW0gPSAwOyBjaGFubmVsTnVtIDwgY2hhbm5lbHM7IGNoYW5uZWxOdW0rKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJbY2hhbm5lbE51bV0gPSBjaGFubmVsO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcblx0ICAgICAgICB9KClcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKlx0c3RhdGljIG5vaXNlIGJ1ZmZlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSB7VG9uZS5CdWZmZXJ9XG5cdFx0ICovXG5cdCAgICB2YXIgX25vaXNlQnVmZmVycyA9IHt9O1xuXHQgICAgLy9jcmVhdGUgdGhlIFRvbmUuQnVmZmVyc1xuXHQgICAgZnVuY3Rpb24gY3JlYXRlQnVmZmVycygpIHtcblx0ICAgICAgICBmb3IgKHZhciB0eXBlIGluIF9ub2lzZUFycmF5cykge1xuXHQgICAgICAgICAgICBfbm9pc2VCdWZmZXJzW3R5cGVdID0gbmV3IFRvbmUuQnVmZmVyKCkuZnJvbUFycmF5KF9ub2lzZUFycmF5c1t0eXBlXSk7XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHQgICAgLy9jcmVhdGUgdGhlIG5vaXNlIGJ1ZmZlcnNcblx0ICAgIFRvbmUuZ2V0Q29udGV4dChjcmVhdGVCdWZmZXJzKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGNyZWF0ZUJ1ZmZlcnMpO1xuXHQgICAgcmV0dXJuIFRvbmUuTm9pc2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTaW1wbGUgY29udm9sdXRpb24gY3JlYXRlZCB3aXRoIGRlY2F5aW5nIG5vaXNlLlxuXHRcdCAqICBcdFx0R2VuZXJhdGVzIGFuIEltcHVsc2UgUmVzcG9uc2UgQnVmZmVyXG5cdFx0ICogXHRcdFx0d2l0aCBUb25lLk9mZmxpbmUgdGhlbiBmZWVkcyB0aGUgSVIgaW50byBDb252b2x2ZXJOb2RlLlxuXHRcdCAqIFx0XHRcdE5vdGU6IHRoZSBSZXZlcmIgd2lsbCBub3QgbWFrZSBhbnkgc291bmQgdW50aWwgW2dlbmVyYXRlXSgjZ2VuZXJhdGUpXG5cdFx0ICogXHRcdFx0aGFzIGJlZW4gaW52b2tlZCBhbmQgcmVzb2x2ZWQuXG5cdFx0ICpcblx0XHQgKiBcdFx0XHRJbnNwaXJhdGlvbiBmcm9tIFtSZXZlcmJHZW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9hZGVsZXNwaW5hc3NlL3JldmVyYkdlbikuXG5cdFx0ICogXHRcdFx0Q29weXJpZ2h0IChjKSAyMDE0IEFsYW4gZGVMZXNwaW5hc3NlIEFwYWNoZSAyLjAgTGljZW5zZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Db252b2x2ZXJ9XG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGRlY2F5IFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHJldmVyYmVyYXRlIGZvci5cblx0XHQgKi9cblx0ICAgIFRvbmUuUmV2ZXJiID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZGVjYXknXSwgVG9uZS5SZXZlcmIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQ29udm9sdmVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7Q29udm9sdmVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNvbnZvbHZlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGR1cmF0aW9uIG9mIHRoZSByZXZlcmJcblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWNheSA9IG9wdGlvbnMuZGVjYXk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgYW1vdW50IG9mIHRpbWUgYmVmb3JlIHRoZSByZXZlcmIgaXMgZnVsbHlcblx0XHRcdCAqIHJhbXBlZCBpbi5cblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wcmVEZWxheSA9IG9wdGlvbnMucHJlRGVsYXk7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX2NvbnZvbHZlcik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5SZXZlcmIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2RlY2F5JzogMS41LFxuXHQgICAgICAgICdwcmVEZWxheSc6IDAuMDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZW5lcmF0ZSB0aGUgSW1wdWxzZSBSZXNwb25zZS4gUmV0dXJucyBhIHByb21pc2Ugd2hpbGUgdGhlIElSIGlzIGJlaW5nXG5cdFx0ICogZ2VuZXJhdGVkLlxuXHRcdCAqIEByZXR1cm4ge1Byb21pc2U8VG9uZS5SZXZlcmI+fSBQcm9taXNlIHdoaWNoIHJldHVybnMgdGhpcyBvYmplY3QuXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYi5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuT2ZmbGluZShmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vY3JlYXRlIGEgbm9pc2UgYnVyc3Qgd2hpY2ggZGVjYXlzIG92ZXIgdGhlIGR1cmF0aW9uXG5cdCAgICAgICAgICAgIHZhciBub2lzZUwgPSBuZXcgVG9uZS5Ob2lzZSgpO1xuXHQgICAgICAgICAgICB2YXIgbm9pc2VSID0gbmV3IFRvbmUuTm9pc2UoKTtcblx0ICAgICAgICAgICAgdmFyIG1lcmdlID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICAgICAgbm9pc2VMLmNvbm5lY3QobWVyZ2UubGVmdCk7XG5cdCAgICAgICAgICAgIG5vaXNlUi5jb25uZWN0KG1lcmdlLnJpZ2h0KTtcblx0ICAgICAgICAgICAgdmFyIGdhaW5Ob2RlID0gbmV3IFRvbmUuR2FpbigpLnRvTWFzdGVyKCk7XG5cdCAgICAgICAgICAgIG1lcmdlLmNvbm5lY3QoZ2Fpbk5vZGUpO1xuXHQgICAgICAgICAgICBub2lzZUwuc3RhcnQoMCk7XG5cdCAgICAgICAgICAgIG5vaXNlUi5zdGFydCgwKTtcblx0ICAgICAgICAgICAgLy9zaG9ydCBmYWRlIGluXG5cdCAgICAgICAgICAgIGdhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgMCk7XG5cdCAgICAgICAgICAgIGdhaW5Ob2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMSwgdGhpcy5wcmVEZWxheSk7XG5cdCAgICAgICAgICAgIC8vZGVjYXlcblx0ICAgICAgICAgICAgZ2Fpbk5vZGUuZ2Fpbi5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUoMCwgdGhpcy5wcmVEZWxheSwgdGhpcy5kZWNheSAtIHRoaXMucHJlRGVsYXkpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5kZWNheSkudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnZvbHZlci5idWZmZXIgPSBidWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5SZXZlcmJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5SZXZlcmI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBCYXNlIGNsYXNzIGZvciBzdGVyZW8gZmVlZGJhY2sgZWZmZWN0cyB3aGVyZSB0aGUgZWZmZWN0UmV0dXJuXG5cdFx0ICogICAgICAgICBpcyBmZWQgYmFjayBpbnRvIHRoZSBzYW1lIGNoYW5uZWwuXG5cdFx0ICpcblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmZWVkYmFjayddLCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgZmVlZGJhY2tcblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZlZWRiYWNrLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZWZ0IHNpZGUgZmVlYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcmlnaHQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTC5jaGFpbih0aGlzLl9mZWVkYmFja0wsIHRoaXMuZWZmZWN0U2VuZEwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuUi5jaGFpbih0aGlzLl9mZWVkYmFja1IsIHRoaXMuZWZmZWN0U2VuZFIpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZmFuKHRoaXMuX2ZlZWRiYWNrTC5nYWluLCB0aGlzLl9mZWVkYmFja1IuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydmZWVkYmFjayddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0LCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBcHBsaWVzIGEgd2lkdGggZmFjdG9yIHRvIHRoZSBtaWQvc2lkZSBzZXBlcmF0aW9uLlxuXHRcdCAqICAgICAgICAgMCBpcyBhbGwgbWlkIGFuZCAxIGlzIGFsbCBzaWRlLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZvdW5kIGluIFtrdnJhdWRpbyBmb3J1bXNdKGh0dHA6Ly93d3cua3ZyYXVkaW8uY29tL2ZvcnVtL3ZpZXd0b3BpYy5waHA/dD0yMTI1ODcpLlxuXHRcdCAqICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgIDxjb2RlPlxuXHRcdCAqICAgICAgICAgTWlkICo9IDIqKDEtd2lkdGgpPGJyPlxuXHRcdCAqICAgICAgICAgU2lkZSAqPSAyKndpZHRoXG5cdFx0ICogICAgICAgICA8L2NvZGU+XG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTWlkU2lkZUVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbd2lkdGhdIFRoZSBzdGVyZW8gd2lkdGguIEEgd2lkdGggb2YgMCBpcyBtb25vIGFuZCAxIGlzIHN0ZXJlby4gMC41IGlzIG5vIGNoYW5nZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvV2lkZW5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3dpZHRoJ10sIFRvbmUuU3RlcmVvV2lkZW5lcik7XG5cdCAgICAgICAgVG9uZS5NaWRTaWRlRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdpZHRoIGNvbnRyb2wuIDAgPSAxMDAlIG1pZC4gMSA9IDEwMCUgc2lkZS4gMC41ID0gbm8gY2hhbmdlLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndpZHRoID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMud2lkdGgsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWyd3aWR0aCddKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFR3byB0aW1lcyB0aGUgKDEtd2lkdGgpIGZvciB0aGUgbWlkIGNoYW5uZWxcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQgPSBuZXcgVG9uZS5NdWx0aXBseSgyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFR3byB0aW1lcyB0aGUgd2lkdGggZm9yIHRoZSBzaWRlIGNoYW5uZWxcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlID0gbmV3IFRvbmUuTXVsdGlwbHkoMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTWlkIG11bHRpcGxpZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkTXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KCk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZC5jb25uZWN0KHRoaXMuX21pZE11bHQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMubWlkU2VuZC5jaGFpbih0aGlzLl9taWRNdWx0LCB0aGlzLm1pZFJldHVybik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAxIC0gd2lkdGhcblx0XHRcdCAqIEB0eXBlIHtUb25lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aC5jb25uZWN0KHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5nZXRDb25zdGFudCgxKS5jb25uZWN0KHRoaXMuX29uZU1pbnVzV2lkdGgsIDAsIDApO1xuXHQgICAgICAgIHRoaXMud2lkdGguY29ubmVjdCh0aGlzLl9vbmVNaW51c1dpZHRoLCAwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTaWRlIG11bHRpcGxpZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2lkZU11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHQgICAgICAgIHRoaXMud2lkdGguY29ubmVjdCh0aGlzLl90d29UaW1lc1dpZHRoU2lkZSk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aFNpZGUuY29ubmVjdCh0aGlzLl9zaWRlTXVsdCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5zaWRlU2VuZC5jaGFpbih0aGlzLl9zaWRlTXVsdCwgdGhpcy5zaWRlUmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb1dpZGVuZXIsIFRvbmUuTWlkU2lkZUVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvV2lkZW5lci5kZWZhdWx0cyA9IHsgJ3dpZHRoJzogMC41IH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb1dpZGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvV2lkZW5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1pZFNpZGVFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3dpZHRoJ10pO1xuXHQgICAgICAgIHRoaXMud2lkdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZE11bHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZE11bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NpZGVNdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaWRlTXVsdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aFNpZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vbmVNaW51c1dpZHRoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vbmVNaW51c1dpZHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdGVyZW9XaWRlbmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmVtb2xvIG1vZHVsYXRlcyB0aGUgYW1wbGl0dWRlIG9mIGFuIGluY29taW5nIHNpZ25hbCB1c2luZyBhIFRvbmUuTEZPLlxuXHRcdCAqICAgICAgICAgVGhlIHR5cGUsIGZyZXF1ZW5jeSwgYW5kIGRlcHRoIG9mIHRoZSBMRk8gaXMgY29udHJvbGxhYmxlLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZnJlcXVlbmN5XSBUaGUgcmF0ZSBvZiB0aGUgZWZmZWN0LlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbZGVwdGhdIFRoZSBkZXB0aCBvZiB0aGUgZWZmZWN0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY3JlYXRlIGEgdHJlbW9sbyBhbmQgc3RhcnQgaXQncyBMRk9cblx0XHQgKiB2YXIgdHJlbW9sbyA9IG5ldyBUb25lLlRyZW1vbG8oOSwgMC43NSkudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqIC8vcm91dGUgYW4gb3NjaWxsYXRvciB0aHJvdWdoIHRoZSB0cmVtb2xvIGFuZCBzdGFydCBpdFxuXHRcdCAqIHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QodHJlbW9sbykuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSwgVG9uZS5UcmVtb2xvKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0cmVtZWxvIExGTyBpbiB0aGUgbGVmdCBjaGFubmVsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdwaGFzZSc6IG9wdGlvbnMuc3ByZWFkLFxuXHQgICAgICAgICAgICAnbWluJzogMSxcblx0ICAgICAgICAgICAgJ21heCc6IDBcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHJlbWVsbyBMRk8gaW4gdGhlIGxlZnQgY2hhbm5lbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAncGhhc2UnOiBvcHRpb25zLnNwcmVhZCxcblx0ICAgICAgICAgICAgJ21pbic6IDEsXG5cdCAgICAgICAgICAgICdtYXgnOiAwXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlcmUgdGhlIGdhaW4gaXMgbXVsdGlwbGllZFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVMID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZXJlIHRoZSBnYWluIGlzIG11bHRpcGxpZWRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlUiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSB0cmVtb2xvLlxuXHRcdFx0ICogIEB0eXBlICB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVwdGggb2YgdGhlIGVmZmVjdC4gQSBkZXB0aCBvZiAwLCBoYXMgbm8gZWZmZWN0XG5cdFx0XHQgKiAgb24gdGhlIGFtcGxpdHVkZSwgYW5kIGEgZGVwdGggb2YgMSBtYWtlcyB0aGUgYW1wbGl0dWRlXG5cdFx0XHQgKiAgbW9kdWxhdGUgZnVsbHkgYmV0d2VlbiAwIGFuZCAxLlxuXHRcdFx0ICogIEB0eXBlICB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRlcHRoLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNoYWluKHRoaXMuX2FtcGxpdHVkZUwsIHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbih0aGlzLl9hbXBsaXR1ZGVSLCB0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZGVMLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZGVSLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmZhbih0aGlzLl9sZm9MLmZyZXF1ZW5jeSwgdGhpcy5fbGZvUi5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGVwdGguZmFuKHRoaXMuX2xmb1IuYW1wbGl0dWRlLCB0aGlzLl9sZm9MLmFtcGxpdHVkZSk7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuc3ByZWFkID0gb3B0aW9ucy5zcHJlYWQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmVtb2xvLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMTAsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ2RlcHRoJzogMC41LFxuXHQgICAgICAgICdzcHJlYWQnOiAxODBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdGFydCB0aGUgdHJlbW9sby5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgdHJlbW9sbyBiZWdpbnMuXG5cdFx0ICogQHJldHVybnMge1RvbmUuVHJlbW9sb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgdGhlIHRyZW1vbG8uXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHRyZW1vbG8gc3RvcHMuXG5cdFx0ICogQHJldHVybnMge1RvbmUuVHJlbW9sb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm9MLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGVmZmVjdCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW2RlbGF5PTBdIERlbGF5IHRpbWUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBlZmZlY3QgYWZ0ZXIgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgaGFzIHN0YXJ0ZWQuXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKGRlbGF5KSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5zeW5jKGRlbGF5KTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN5bmMoZGVsYXkpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgZmlsdGVyIGZyb20gdGhlIHRyYW5zcG9ydFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi51bnN5bmMoKTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC51bnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBUcmVtb2xvJ3Mgb3NjaWxsYXRvciB0eXBlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlRyZW1vbG8jXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmVtb2xvLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9MLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBBbW91bnQgb2Ygc3RlcmVvIHNwcmVhZC4gV2hlbiBzZXQgdG8gMCwgYm90aCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBjZW50cmFsbHkuXG5cdFx0ICogV2hlbiBzZXQgdG8gMTgwLCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBoYXJkIGxlZnQgYW5kIHJpZ2h0IHJlc3BlY3RpdmVseS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmVtb2xvI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHNwcmVhZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJlbW9sby5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9SLnBoYXNlIC0gdGhpcy5fbGZvTC5waGFzZTsgICAgLy8xODBcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnBoYXNlID0gOTAgLSBzcHJlYWQgLyAyO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnBoYXNlID0gc3ByZWFkIC8gMiArIDkwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9sZm9MLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9MID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9SLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVMLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJlbW9sbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgVmlicmF0byBlZmZlY3QgY29tcG9zZWQgb2YgYSBUb25lLkRlbGF5IGFuZCBhIFRvbmUuTEZPLiBUaGUgTEZPXG5cdFx0ICogICAgICAgICBtb2R1bGF0ZXMgdGhlIGRlbGF5VGltZSBvZiB0aGUgZGVsYXksIGNhdXNpbmcgdGhlIHBpdGNoIHRvIHJpc2Vcblx0XHQgKiAgICAgICAgIGFuZCBmYWxsLiBcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBmcmVxdWVuY3kgb2YgdGhlIHZpYnJhdG8uXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IGRlcHRoIFRoZSBhbW91bnQgdGhlIHBpdGNoIGlzIG1vZHVsYXRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuVmlicmF0byA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSwgVG9uZS5WaWJyYXRvKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheSBub2RlIHVzZWQgZm9yIHRoZSB2aWJyYXRvIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBuZXcgVG9uZS5EZWxheSgwLCBvcHRpb25zLm1heERlbGF5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgTEZPIHVzZWQgdG8gY29udHJvbCB0aGUgdmlicmF0b1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBvcHRpb25zLnR5cGUsXG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4Jzogb3B0aW9ucy5tYXhEZWxheSxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAncGhhc2UnOiAtOTAgICAgLy9vZmZzZSB0aGUgcGhhc2Ugc28gdGhlIHJlc3RpbmcgcG9zaXRpb24gaXMgaW4gdGhlIGNlbnRlclxuXHQgICAgICAgIH0pLnN0YXJ0KCkuY29ubmVjdCh0aGlzLl9kZWxheU5vZGUuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSB2aWJyYXRvXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmby5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlcHRoIG9mIHRoZSB2aWJyYXRvLiBcblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2xmby5hbXBsaXR1ZGU7XG5cdCAgICAgICAgdGhpcy5kZXB0aC52YWx1ZSA9IG9wdGlvbnMuZGVwdGg7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbih0aGlzLl9kZWxheU5vZGUsIHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlZpYnJhdG8sIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5WaWJyYXRvLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtYXhEZWxheSc6IDAuMDA1LFxuXHQgICAgICAgICdmcmVxdWVuY3knOiA1LFxuXHQgICAgICAgICdkZXB0aCc6IDAuMSxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFR5cGUgb2Ygb3NjaWxsYXRvciBhdHRhY2hlZCB0byB0aGUgVmlicmF0by5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5WaWJyYXRvI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVmlicmF0by5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVmlicmF0b30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5WaWJyYXRvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlZpYnJhdG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5FdmVudCBhYnN0cmFjdHMgYXdheSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZSBhbmQgcHJvdmlkZXMgYSBzY2hlZHVsYWJsZVxuXHRcdCAqICAgICAgICAgIGNhbGxiYWNrIGZvciBhIHNpbmdsZSBvciByZXBlYXRhYmxlIGV2ZW50cyBhbG9uZyB0aGUgdGltZWxpbmUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYXQgdGhlIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIG9yIHZhbHVlcyB3aGljaCBzaG91bGQgYmUgcGFzc2VkIHRvXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIGludm9jYXRpb24uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNob3JkID0gbmV3IFRvbmUuRXZlbnQoZnVuY3Rpb24odGltZSwgY2hvcmQpe1xuXHRcdCAqIFx0Ly90aGUgY2hvcmQgYXMgd2VsbCBhcyB0aGUgZXhhY3QgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiBcdC8vYXJlIHBhc3NlZCBpbiBhcyBhcmd1bWVudHMgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG5cdFx0ICogfSwgW1wiRDRcIiwgXCJFNFwiLCBcIkY0XCJdKTtcblx0XHQgKiAvL3N0YXJ0IHRoZSBjaG9yZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cmFuc3BvcnQgdGltZWxpbmVcblx0XHQgKiBjaG9yZC5zdGFydCgpO1xuXHRcdCAqIC8vbG9vcCBpdCBldmVyeSBtZWFzdXJlIGZvciA4IG1lYXN1cmVzXG5cdFx0ICogY2hvcmQubG9vcCA9IDg7XG5cdFx0ICogY2hvcmQubG9vcEVuZCA9IFwiMW1cIjtcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAndmFsdWUnXG5cdCAgICAgICAgXSwgVG9uZS5FdmVudCk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIExvb3AgdmFsdWVcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW58UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIHRvIGludm9rZS5cblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHdoaWNoIGlzIHBhc3NlZCB0byB0aGVcblx0XHRcdCAqICBjYWxsYmFjayBmdW5jdGlvbi5cblx0XHRcdCAqICBAdHlwZSAgeyp9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZW4gdGhlIG5vdGUgaXMgc2NoZWR1bGVkIHRvIHN0YXJ0LlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3Mob3B0aW9ucy5sb29wU3RhcnQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZW4gdGhlIG5vdGUgaXMgc2NoZWR1bGVkIHRvIHN0YXJ0LlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKG9wdGlvbnMubG9vcEVuZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVHJhY2tzIHRoZSBzY2hlZHVsZWQgZXZlbnRzXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBsYXliYWNrIHNwZWVkIG9mIHRoZSBub3RlLiBBIHNwZWVkIG9mIDFcblx0XHRcdCAqICBpcyBubyBjaGFuZ2UuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSAxO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgZGVsYXkgdGltZSBmcm9tIHdoZW4gdGhlIGV2ZW50IGlzIHNjaGVkdWxlZCB0byBzdGFydFxuXHRcdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHByaXZhdGUgaG9sZGVyIG9mIHByb2JhYmlsaXR5IHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wcm9iYWJpbGl0eSA9IG9wdGlvbnMucHJvYmFiaWxpdHk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFtb3VudCBvZiB2YXJpYXRpb24gZnJvbSB0aGVcblx0XHRcdCAqICBnaXZlbiB0aW1lLlxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2h1bWFuaXplID0gb3B0aW9ucy5odW1hbml6ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiBtdXRlIGlzIHRydWUsIHRoZSBjYWxsYmFjayB3b24ndCBiZVxuXHRcdFx0ICogIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcEVuZCc6ICcxbScsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ3ZhbHVlJzogbnVsbCxcblx0ICAgICAgICAncHJvYmFiaWxpdHknOiAxLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2UsXG5cdCAgICAgICAgJ2h1bWFuaXplJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVzY2hlZHVsZSBhbGwgb2YgdGhlIGV2ZW50cyBhbG9uZyB0aGUgdGltZWxpbmVcblx0XHQgKiAgd2l0aCB0aGUgdXBkYXRlZCB2YWx1ZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gYWZ0ZXIgT25seSByZXNjaGVkdWxlcyBldmVudHMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuX3Jlc2NoZWR1bGVFdmVudHMgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICAvL2lmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCBzY2hlZHVsZXMgYWxsIG9mIHRoZSBldmVudHNcblx0ICAgICAgICBhZnRlciA9IFRvbmUuZGVmYXVsdEFyZyhhZnRlciwgLTEpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdmFyIGR1cmF0aW9uO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGV2ZW50LmlkKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHZhciBzdGFydFRpY2sgPSBldmVudC50aW1lICsgTWF0aC5yb3VuZCh0aGlzLnN0YXJ0T2Zmc2V0IC8gdGhpcy5fcGxheWJhY2tSYXRlKTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBJbmZpbml0eTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc051bWJlcih0aGlzLl9sb29wKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHRoaXMuX2xvb3AgKiB0aGlzLl9nZXRMb29wRHVyYXRpb24oKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRFdmVudCA9IHRoaXMuX3N0YXRlLmdldEFmdGVyKHN0YXJ0VGljayk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRFdmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IE1hdGgubWluKGR1cmF0aW9uLCBuZXh0RXZlbnQudGltZSAtIHN0YXJ0VGljayk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChkdXJhdGlvbiAhPT0gSW5maW5pdHkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy9zY2hlZHVsZSBhIHN0b3Agc2luY2UgaXQncyBmaW5pdGUgZHVyYXRpb25cblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBzdGFydFRpY2sgKyBkdXJhdGlvbiArIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IFRvbmUuVGlja3MoZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJ2YWwgPSBUb25lLlRpY2tzKHRoaXMuX2dldExvb3BEdXJhdGlvbigpKTtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5pZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KHRoaXMuX3RpY2suYmluZCh0aGlzKSwgaW50ZXJ2YWwsIFRvbmUuVGlja3Moc3RhcnRUaWNrKSwgZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5pZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKHRoaXMuX3RpY2suYmluZCh0aGlzKSwgVG9uZS5UaWNrcyhzdGFydFRpY2spKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBub3RlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUoVG9uZS5UcmFuc3BvcnQudGlja3MpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdGFydCBmcm9tIHRoZSBzY2hlZHVsZWQgc3RhcnQgdGltZVxuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAbmFtZSBzdGFydE9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnc3RhcnRPZmZzZXQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydE9mZnNldDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGFydE9mZnNldCA9IG9mZnNldDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJvYmFiaWxpdHkgb2YgdGhlIG5vdGVzIGJlaW5nIHRyaWdnZXJlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvYmFiaWxpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3Byb2JhYmlsaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvYmFiaWxpdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9iKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2JhYmlsaXR5ID0gcHJvYjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiBzZXQgdG8gdHJ1ZSwgd2lsbCBhcHBseSBzbWFsbCByYW5kb20gdmFyaWF0aW9uXG5cdFx0ICogIHRvIHRoZSBjYWxsYmFjayB0aW1lLiBJZiB0aGUgdmFsdWUgaXMgZ2l2ZW4gYXMgYSB0aW1lLCBpdCB3aWxsIHJhbmRvbWl6ZVxuXHRcdCAqICBieSB0aGF0IGFtb3VudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBldmVudC5odW1hbml6ZSA9IHRydWU7XG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0ICogIEBuYW1lIGh1bWFuaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdodW1hbml6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2h1bWFuaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFyaWF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2h1bWFuaXplID0gdmFyaWF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBub3RlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgdGltZSAgV2hlbiB0aGUgbm90ZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuYWRkKHtcblx0ICAgICAgICAgICAgICAgICdzdGF0ZSc6IFRvbmUuU3RhdGUuU3RhcnRlZCxcblx0ICAgICAgICAgICAgICAgICd0aW1lJzogdGltZSxcblx0ICAgICAgICAgICAgICAgICdpZCc6IHVuZGVmaW5lZFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIEV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgdGltZSAgV2hlbiB0aGUgbm90ZSBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0QmVmb3JlKHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgcmVzY2hlZHVsVGltZSA9IHRpbWU7XG5cdCAgICAgICAgICAgIGlmIChwcmV2aW91c0V2ZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICByZXNjaGVkdWxUaW1lID0gcHJldmlvdXNFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMocmVzY2hlZHVsVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYWxsIHNjaGVkdWxlZCBldmVudHMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICBbdGltZT0wXSAgVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggZXZlbnRzIHdpbGwgYmUgY2FuY2VsLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuZGVmYXVsdEFyZyh0aW1lLCAtSW5maW5pdHkpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEZyb20odGltZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VyLiBBbHNvXG5cdFx0ICogIGNoZWNrcyBpZiB0aGUgRXZlbnQgaXMgZG9uZSBwbGF5aW5nXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIG9mIHRoZSBldmVudCBpbiBzZWNvbmRzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gVG9uZS5UcmFuc3BvcnQuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKCF0aGlzLm11dGUgJiYgdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGlja3MpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMucHJvYmFiaWxpdHkgPCAxICYmIE1hdGgucmFuZG9tKCkgPiB0aGlzLnByb2JhYmlsaXR5KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaHVtYW5pemUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB2YXJpYXRpb24gPSAwLjAyO1xuXHQgICAgICAgICAgICAgICAgaWYgKCFUb25lLmlzQm9vbGVhbih0aGlzLmh1bWFuaXplKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbiA9IHRoaXMudG9TZWNvbmRzKHRoaXMuaHVtYW5pemUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdGltZSArPSAoTWF0aC5yYW5kb20oKSAqIDIgLSAxKSAqIHZhcmlhdGlvbjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHRoaXMudmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBkdXJhdGlvbiBvZiB0aGUgbG9vcC5cblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuX2dldExvb3BEdXJhdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgodGhpcy5fbG9vcEVuZCAtIHRoaXMuX2xvb3BTdGFydCkgLyB0aGlzLl9wbGF5YmFja1JhdGUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgbm90ZSBzaG91bGQgbG9vcCBvciBub3Rcblx0XHQgKiAgYmV0d2VlbiBUb25lLkV2ZW50Lmxvb3BTdGFydCBhbmRcblx0XHQgKiAgVG9uZS5FdmVudC5sb29wRW5kLiBBbiBpbnRlZ2VyXG5cdFx0ICogIHZhbHVlIGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2Zcblx0XHQgKiAgbG9vcHMgdGhlIEV2ZW50IGRvZXMgYWZ0ZXIgaXQgc3RhcnRzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGxvb3Bcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbm90ZS4gRGVmYXVsdHMgdG8gMS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogbm90ZS5sb29wID0gdHJ1ZTtcblx0XHQgKiAvL3JlcGVhdCB0aGUgbm90ZSB0d2ljZSBhcyBmYXN0XG5cdFx0ICogbm90ZS5wbGF5YmFja1JhdGUgPSAyO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGxvb3BFbmQgcG9pbnQgaXMgdGhlIHRpbWUgdGhlIGV2ZW50IHdpbGwgbG9vcFxuXHRcdCAqICBpZiBUb25lLkV2ZW50Lmxvb3AgaXMgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wRW5kKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhsb29wRW5kKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHdoZW4gdGhlIGxvb3Agc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wU3RhcnQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9UaWNrcyhsb29wU3RhcnQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGxvb3AgaW50ZXJ2YWwuXG5cdFx0ICogIFJldHVybnMgMCBpZiB0aGUgZXZlbnQgaXMgbm90IHN0YXJ0ZWQgeWV0IG9yXG5cdFx0ICogIGl0IGlzIG5vdCBzZXQgdG8gbG9vcC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvZ3Jlc3Ncblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdwcm9ncmVzcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHZhciB0aWNrcyA9IFRvbmUuVHJhbnNwb3J0LnRpY2tzO1xuXHQgICAgICAgICAgICAgICAgdmFyIGxhc3RFdmVudCA9IHRoaXMuX3N0YXRlLmdldCh0aWNrcyk7XG5cdCAgICAgICAgICAgICAgICBpZiAobGFzdEV2ZW50ICE9PSBudWxsICYmIGxhc3RFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGxvb3BEdXJhdGlvbiA9IHRoaXMuX2dldExvb3BEdXJhdGlvbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9ICh0aWNrcyAtIGxhc3RFdmVudC50aW1lKSAlIGxvb3BEdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgLyBsb29wRHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5jYW5jZWwoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkV2ZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTG9vcCBjcmVhdGVzIGEgbG9vcGVkIGNhbGxiYWNrIGF0IHRoZSBcblx0XHQgKiAgICAgICAgIHNwZWNpZmllZCBpbnRlcnZhbC4gVGhlIGNhbGxiYWNrIGNhbiBiZSBcblx0XHQgKiAgICAgICAgIHN0YXJ0ZWQsIHN0b3BwZWQgYW5kIHNjaGVkdWxlZCBhbG9uZ1xuXHRcdCAqICAgICAgICAgdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbG9vcCA9IG5ldyBUb25lLkxvb3AoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL3RyaWdnZXJlZCBldmVyeSBlaWdodGggbm90ZS4gXG5cdFx0ICogXHRjb25zb2xlLmxvZyh0aW1lKTtcblx0XHQgKiB9LCBcIjhuXCIpLnN0YXJ0KDApO1xuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KCk7XG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggdGhlIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGludGVydmFsIFRoZSB0aW1lIGJldHdlZW4gc3VjY2Vzc2l2ZSBjYWxsYmFjayBjYWxscy4gXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAnaW50ZXJ2YWwnXG5cdCAgICAgICAgXSwgVG9uZS5Mb29wKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGV2ZW50IHdoaWNoIHByb2R1Y2VzIHRoZSBjYWxsYmFja3Ncblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50ID0gbmV3IFRvbmUuRXZlbnQoe1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiB0aGlzLl90aWNrLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICdsb29wJzogdHJ1ZSxcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiBvcHRpb25zLmludGVydmFsLFxuXHQgICAgICAgICAgICAncGxheWJhY2tSYXRlJzogb3B0aW9ucy5wbGF5YmFja1JhdGUsXG5cdCAgICAgICAgICAgICdwcm9iYWJpbGl0eSc6IG9wdGlvbnMucHJvYmFiaWxpdHlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggdGhlIG5leHQgZXZlbnQgaW4gdGhlIHBhdHRlcm5cblx0XHRcdCAqICBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcblx0ICAgICAgICAvL3NldCB0aGUgaXRlcmF0aW9uc1xuXHQgICAgICAgIHRoaXMuaXRlcmF0aW9ucyA9IG9wdGlvbnMuaXRlcmF0aW9ucztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxvb3ApO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ludGVydmFsJzogJzRuJyxcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ2l0ZXJhdGlvbnMnOiBJbmZpbml0eSxcblx0ICAgICAgICAncHJvYmFiaWxpdHknOiB0cnVlLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGxvb3AgYXQgdGhlIHNwZWNpZmllZCB0aW1lIGFsb25nIHRoZSBUcmFuc3BvcnQnc1xuXHRcdCAqICB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbj19ICB0aW1lICBXaGVuIHRvIHN0YXJ0IHRoZSBMb29wLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGxvb3AgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb249fSAgdGltZSAgV2hlbiB0byBzdG9wIHRoZSBBcnBlZ2dpb1xuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYWxsIHNjaGVkdWxlZCBldmVudHMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICBbdGltZT0wXSAgVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggZXZlbnRzIHdpbGwgYmUgY2FuY2VsLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIG5vdGVzIHNob3VsZCBiZSBjYWxsZWRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdGhlIGV2ZW50IG9jY3Vyc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN0YXRlIG9mIHRoZSBMb29wLCBlaXRoZXIgc3RhcnRlZCBvciBzdG9wcGVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5zdGF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJvZ3Jlc3Mgb2YgdGhlIGxvb3AgYXMgYSB2YWx1ZSBiZXR3ZWVuIDAtMS4gMCwgd2hlblxuXHRcdCAqICB0aGUgbG9vcCBpcyBzdG9wcGVkIG9yIGRvbmUgaXRlcmF0aW5nLiBcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9ncmVzc1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAncHJvZ3Jlc3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5wcm9ncmVzcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbGJhY2tzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBsb29wLmludGVydmFsID0gXCI4blwiOyAvL2xvb3AgZXZlcnkgOG5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGludGVydmFsXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ2ludGVydmFsJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQubG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmxvb3BFbmQgPSBpbnRlcnZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbG9vcC4gVGhlIG5vcm1hbCBwbGF5YmFjayByYXRlIGlzIDEgKG5vIGNoYW5nZSkuIFxuXHRcdCAqICBBIGBwbGF5YmFja1JhdGVgIG9mIDIgd291bGQgYmUgdHdpY2UgYXMgZmFzdC4gXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQucGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJhbmRvbSB2YXJpYXRpb24gKy8tMC4wMXMgdG8gdGhlIHNjaGVkdWxlZCB0aW1lLiBcblx0XHQgKiAgT3IgZ2l2ZSBpdCBhIHRpbWUgdmFsdWUgd2hpY2ggaXQgd2lsbCByYW5kb21pemUgYnkuXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEBuYW1lIGh1bWFuaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ2h1bWFuaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQuaHVtYW5pemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YXJpYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQuaHVtYW5pemUgPSB2YXJpYXRpb247XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2JhYmx5IG9mIHRoZSBjYWxsYmFjayBiZWluZyBpbnZva2VkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2JhYmlsaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3Byb2JhYmlsaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQucHJvYmFiaWxpdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9iKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50LnByb2JhYmlsaXR5ID0gcHJvYjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBNdXRpbmcgdGhlIExvb3AgbWVhbnMgdGhhdCBubyBjYWxsYmFja3MgYXJlIGludm9rZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBtdXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgdGhlIGxvb3AuIFRoZSBkZWZhdWx0XG5cdFx0ICogIHZhbHVlIGlzIEluZmluaXR5IChsb29wIGZvcmV2ZXIpLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGl0ZXJhdGlvbnNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnaXRlcmF0aW9ucycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2V2ZW50Lmxvb3AgPT09IHRydWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5sb29wO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpdGVycykge1xuXHQgICAgICAgICAgICBpZiAoaXRlcnMgPT09IEluZmluaXR5KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudC5sb29wID0gdHJ1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmxvb3AgPSBpdGVycztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkxvb3B9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Mb29wO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYXJ0IGlzIGEgY29sbGVjdGlvbiBUb25lLkV2ZW50cyB3aGljaCBjYW4gYmVcblx0XHQgKiAgICAgICAgIHN0YXJ0ZWQvc3RvcHBlZCBhbmQgbG9vcGVkIGFzIGEgc2luZ2xlIHVuaXQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRXZlbnR9XG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugb24gZWFjaCBldmVudFxuXHRcdCAqICBAcGFyYW0ge0FycmF5fSBldmVudHMgdGhlIGFycmF5IG9mIGV2ZW50c1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwYXJ0ID0gbmV3IFRvbmUuUGFydChmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiBcdC8vdGhlIG5vdGVzIGdpdmVuIGFzIHRoZSBzZWNvbmQgZWxlbWVudCBpbiB0aGUgYXJyYXlcblx0XHQgKiBcdC8vd2lsbCBiZSBwYXNzZWQgaW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudFxuXHRcdCAqIFx0c3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2Uobm90ZSwgXCI4blwiLCB0aW1lKTtcblx0XHQgKiB9LCBbWzAsIFwiQzJcIl0sIFtcIjA6MlwiLCBcIkMzXCJdLCBbXCIwOjM6MlwiLCBcIkcyXCJdXSk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy91c2UgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhcyBsb25nIGFzIHRoZSBvYmplY3QgaGFzIGEgXCJ0aW1lXCIgYXR0cmlidXRlXG5cdFx0ICogdmFyIHBhcnQgPSBuZXcgVG9uZS5QYXJ0KGZ1bmN0aW9uKHRpbWUsIHZhbHVlKXtcblx0XHQgKiBcdC8vdGhlIHZhbHVlIGlzIGFuIG9iamVjdCB3aGljaCBjb250YWlucyBib3RoIHRoZSBub3RlIGFuZCB0aGUgdmVsb2NpdHlcblx0XHQgKiBcdHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKHZhbHVlLm5vdGUsIFwiOG5cIiwgdGltZSwgdmFsdWUudmVsb2NpdHkpO1xuXHRcdCAqIH0sIFt7XCJ0aW1lXCIgOiAwLCBcIm5vdGVcIiA6IFwiQzNcIiwgXCJ2ZWxvY2l0eVwiOiAwLjl9LFxuXHRcdCAqIFx0ICAge1widGltZVwiIDogXCIwOjJcIiwgXCJub3RlXCIgOiBcIkM0XCIsIFwidmVsb2NpdHlcIjogMC41fVxuXHRcdCAqIF0pLnN0YXJ0KDApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2V2ZW50cydcblx0ICAgICAgICBdLCBUb25lLlBhcnQpO1xuXHQgICAgICAgIFRvbmUuRXZlbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBhcnJheSBvZiBPYmplY3RzLlxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IFtdO1xuXHQgICAgICAgIC8vYWRkIHRoZSBldmVudHNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMuZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuZXZlbnRzW2ldKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5hZGQob3B0aW9ucy5ldmVudHNbaV1bMF0sIG9wdGlvbnMuZXZlbnRzW2ldWzFdKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYWRkKG9wdGlvbnMuZXZlbnRzW2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhcnQsIFRvbmUuRXZlbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAnMW0nLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdwcm9iYWJpbGl0eSc6IDEsXG5cdCAgICAgICAgJ2h1bWFuaXplJzogZmFsc2UsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZSxcblx0ICAgICAgICAnZXZlbnRzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIHBhcnQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9ICB0aW1lICAgIFdoZW4gdG8gc3RhcnQgdGhlIHBhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgb2Zmc2V0ICBUaGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZWdpbiBwbGF5aW5nIGF0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpY2tzKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCB0aGlzLl9sb29wU3RhcnQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1RpY2tzKG9mZnNldCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAnc3RhdGUnOiBUb25lLlN0YXRlLlN0YXJ0ZWQsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IHRpY2tzLFxuXHQgICAgICAgICAgICAgICAgJ29mZnNldCc6IG9mZnNldFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0Tm90ZShldmVudCwgdGlja3MsIG9mZnNldCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGV2ZW50IGluIHRoZSBnaXZlbiBldmVudCBhdCB0aGUgY29ycmVjdCB0aW1lIGdpdmVuXG5cdFx0ICogIHRoZSB0aWNrcyBhbmQgb2Zmc2V0IGFuZCBsb29waW5nLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fSAgZXZlbnRcblx0XHQgKiAgQHBhcmFtICB7VGlja3N9ICB0aWNrc1xuXHRcdCAqICBAcGFyYW0gIHtUaWNrc30gIG9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fc3RhcnROb3RlID0gZnVuY3Rpb24gKGV2ZW50LCB0aWNrcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgdGlja3MgLT0gb2Zmc2V0O1xuXHQgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgIGlmIChldmVudC5zdGFydE9mZnNldCA+PSB0aGlzLl9sb29wU3RhcnQgJiYgZXZlbnQuc3RhcnRPZmZzZXQgPCB0aGlzLl9sb29wRW5kKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL3N0YXJ0IGl0IG9uIHRoZSBuZXh0IGxvb3Bcblx0ICAgICAgICAgICAgICAgICAgICB0aWNrcyArPSB0aGlzLl9nZXRMb29wRHVyYXRpb24oKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0KFRvbmUuVGlja3ModGlja3MpKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGFydE9mZnNldCA8IHRoaXMuX2xvb3BTdGFydCAmJiBldmVudC5zdGFydE9mZnNldCA+PSBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3AgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0KFRvbmUuVGlja3ModGlja3MpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPj0gb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LnN0YXJ0KFRvbmUuVGlja3ModGlja3MpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdGFydCBmcm9tIHRoZSBzY2hlZHVsZWQgc3RhcnQgdGltZVxuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEBuYW1lIHN0YXJ0T2Zmc2V0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ3N0YXJ0T2Zmc2V0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5zdGFydE9mZnNldCArPSB0aGlzLl9zdGFydE9mZnNldDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgcGFydCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIHRpbWUgIFdoZW4gdG8gc3RvcCB0aGUgcGFydC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aWNrcyk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aWNrcyk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0L1NldCBhbiBFdmVudCdzIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBJZiBhIHZhbHVlIGlzIHBhc3NlZCBpbiBhbmQgbm8gZXZlbnQgZXhpc3RzIGF0XG5cdFx0ICogIHRoZSBnaXZlbiB0aW1lLCBvbmUgd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhhdCB2YWx1ZS5cblx0XHQgKiAgSWYgdHdvIGV2ZW50cyBhcmUgYXQgdGhlIHNhbWUgdGltZSwgdGhlIGZpcnN0IG9uZSB3aWxsXG5cdFx0ICogIGJlIHJldHVybmVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHBhcnQuYXQoXCIxbVwiKTsgLy9yZXR1cm5zIHRoZSBwYXJ0IGF0IHRoZSBmaXJzdCBtZWFzdXJlXG5cdFx0ICpcblx0XHQgKiBwYXJ0LmF0KFwiMm1cIiwgXCJDMlwiKTsgLy9zZXQgdGhlIHZhbHVlIGF0IFwiMm1cIiB0byBDMi5cblx0XHQgKiAvL2lmIGFuIGV2ZW50IGRpZG4ndCBleGlzdCBhdCB0aGF0IHRpbWUsIGl0IHdpbGwgYmUgY3JlYXRlZC5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudCB0byBnZXQgb3Igc2V0LlxuXHRcdCAqICBAcGFyYW0geyo9fSB2YWx1ZSBJZiBhIHZhbHVlIGlzIHBhc3NlZCBpbiwgdGhlIHZhbHVlIG9mIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICBldmVudCBhdCB0aGUgZ2l2ZW4gdGltZSB3aWxsIGJlIHNldCB0byBpdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5FdmVudH0gdGhlIGV2ZW50IGF0IHRoZSB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICB2YXIgdGlja1RpbWUgPSBUb25lLlRpY2tzKDEpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50c1tpXTtcblx0ICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRpbWUudG9UaWNrcygpIC0gZXZlbnQuc3RhcnRPZmZzZXQpIDwgdGlja1RpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh2YWx1ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaWYgdGhlcmUgd2FzIG5vIGV2ZW50IGF0IHRoYXQgdGltZSwgY3JlYXRlIG9uZVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh2YWx1ZSkpIHtcblx0ICAgICAgICAgICAgdGhpcy5hZGQodGltZSwgdmFsdWUpO1xuXHQgICAgICAgICAgICAvL3JldHVybiB0aGUgbmV3IGV2ZW50XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudHNbdGhpcy5fZXZlbnRzLmxlbmd0aCAtIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgYW4gZXZlbnQgdG8gdGhlIHBhcnQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0aGUgbm90ZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYW4gb2JqZWN0IGlzIHBhc3NlZCBpbiwgaXQgc2hvdWxkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBhICd0aW1lJyBhdHRyaWJ1dGUgYW5kIHRoZSByZXN0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIG9iamVjdCB3aWxsIGJlIHVzZWQgYXMgdGhlICd2YWx1ZScuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuRXZlbnR8Kn0gIHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwYXJ0LmFkZChcIjFtXCIsIFwiQyMrMTFcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIC8vZXh0cmFjdCB0aGUgcGFyYW1ldGVyc1xuXHQgICAgICAgIGlmICh0aW1lLmhhc093blByb3BlcnR5KCd0aW1lJykpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aW1lO1xuXHQgICAgICAgICAgICB0aW1lID0gdmFsdWUudGltZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICB2YXIgZXZlbnQ7XG5cdCAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVG9uZS5FdmVudCkge1xuXHQgICAgICAgICAgICBldmVudCA9IHZhbHVlO1xuXHQgICAgICAgICAgICBldmVudC5jYWxsYmFjayA9IHRoaXMuX3RpY2suYmluZCh0aGlzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBldmVudCA9IG5ldyBUb25lLkV2ZW50KHtcblx0ICAgICAgICAgICAgICAgICdjYWxsYmFjayc6IHRoaXMuX3RpY2suYmluZCh0aGlzKSxcblx0ICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3RoZSBzdGFydCBvZmZzZXRcblx0ICAgICAgICBldmVudC5zdGFydE9mZnNldCA9IHRpbWU7XG5cdCAgICAgICAgLy9pbml0aWFsaXplIHRoZSB2YWx1ZXNcblx0ICAgICAgICBldmVudC5zZXQoe1xuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IHRoaXMubG9vcEVuZCxcblx0ICAgICAgICAgICAgJ2xvb3BTdGFydCc6IHRoaXMubG9vcFN0YXJ0LFxuXHQgICAgICAgICAgICAnbG9vcCc6IHRoaXMubG9vcCxcblx0ICAgICAgICAgICAgJ2h1bWFuaXplJzogdGhpcy5odW1hbml6ZSxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IHRoaXMucGxheWJhY2tSYXRlLFxuXHQgICAgICAgICAgICAncHJvYmFiaWxpdHknOiB0aGlzLnByb2JhYmlsaXR5XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLnB1c2goZXZlbnQpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIG5vdGUgaWYgaXQgc2hvdWxkIGJlIHBsYXllZCByaWdodCBub3dcblx0ICAgICAgICB0aGlzLl9yZXN0YXJ0RXZlbnQoZXZlbnQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXN0YXJ0IHRoZSBnaXZlbiBldmVudFxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fSAgZXZlbnRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3Jlc3RhcnRFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2goZnVuY3Rpb24gKHN0YXRlRXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKHN0YXRlRXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnROb3RlKGV2ZW50LCBzdGF0ZUV2ZW50LnRpbWUsIHN0YXRlRXZlbnQub2Zmc2V0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vc3RvcCB0aGUgbm90ZVxuXHQgICAgICAgICAgICAgICAgZXZlbnQuc3RvcChUb25lLlRpY2tzKHN0YXRlRXZlbnQudGltZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGFuIGV2ZW50IGZyb20gdGhlIHBhcnQuIFdpbGwgcmVjdXJzaXZlbHkgaXRlcmF0ZVxuXHRcdCAqICBpbnRvIG5lc3RlZCBwYXJ0cyB0byBmaW5kIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudFxuXHRcdCAqICBAcGFyYW0geyp9IHZhbHVlIE9wdGlvbmFsbHkgc2VsZWN0IG9ubHkgYSBzcGVjaWZpYyBldmVudCB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGltZSwgdmFsdWUpIHtcblx0ICAgICAgICAvL2V4dHJhY3QgdGhlIHBhcmFtZXRlcnNcblx0ICAgICAgICBpZiAodGltZS5oYXNPd25Qcm9wZXJ0eSgndGltZScpKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGltZTtcblx0ICAgICAgICAgICAgdGltZSA9IHZhbHVlLnRpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2V2ZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHNbaV07XG5cdCAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIFRvbmUuUGFydCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQucmVtb3ZlKHRpbWUsIHZhbHVlKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGFydE9mZnNldCA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih2YWx1ZSkgfHwgVG9uZS5pc0RlZmluZWQodmFsdWUpICYmIGV2ZW50LnZhbHVlID09PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5zcGxpY2UoaSwgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYWxsIG9mIHRoZSBub3RlcyBmcm9tIHRoZSBncm91cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBbXTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIHNjaGVkdWxlZCBzdGF0ZSBjaGFuZ2UgZXZlbnRzOiBpLmUuIFwic3RhcnRcIiBhbmQgXCJzdG9wXCIuXG5cdFx0ICogIEBwYXJhbSB7VGltZWxpbmVQb3NpdGlvbn0gYWZ0ZXIgVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggdG8gY2FuY2VsIHRoZSBzY2hlZHVsZWQgZXZlbnRzLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5jYW5jZWwoYWZ0ZXIpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aGlzLnRvVGlja3MoYWZ0ZXIpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgZXZlbnRzXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBjdHggVGhlIGNvbnRleHRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX2ZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGN0eCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMpIHtcblx0ICAgICAgICAgICAgY3R4ID0gVG9uZS5kZWZhdWx0QXJnKGN0eCwgdGhpcyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9ldmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIHZhciBlID0gdGhpcy5fZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBUb25lLlBhcnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBlLl9mb3JFYWNoKGNhbGxiYWNrLCBjdHgpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGN0eCwgZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgYXR0cmlidXRlIG9mIGFsbCBvZiB0aGUgZXZlbnRzXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGF0dHIgIHRoZSBhdHRyaWJ1dGUgdG8gc2V0XG5cdFx0ICogIEBwYXJhbSAgeyp9ICB2YWx1ZSAgICAgIFRoZSB2YWx1ZSB0byBzZXQgaXQgdG9cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3NldEFsbCA9IGZ1bmN0aW9uIChhdHRyLCB2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50W2F0dHJdID0gdmFsdWU7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHRpY2sgbWV0aG9kXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIG9mIHRoZSBldmVudCBpbiBzZWNvbmRzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLm11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB2YWx1ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZXRlcm1pbmUgaWYgdGhlIGV2ZW50IHNob3VsZCBiZSBjdXJyZW50bHkgbG9vcGluZ1xuXHRcdCAqICBnaXZlbiB0aGUgbG9vcCBib3VuZHJpZXMgb2YgdGhpcyBQYXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fSAgZXZlbnQgIFRoZSBldmVudCB0byB0ZXN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl90ZXN0TG9vcEJvdW5kcmllcyA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmIChldmVudC5zdGFydE9mZnNldCA8IHRoaXMuX2xvb3BTdGFydCB8fCBldmVudC5zdGFydE9mZnNldCA+PSB0aGlzLl9sb29wRW5kKSB7XG5cdCAgICAgICAgICAgIGV2ZW50LmNhbmNlbCgwKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgLy9yZXNjaGVkdWxlIGl0IGlmIGl0J3Mgc3RvcHBlZFxuXHQgICAgICAgICAgICB0aGlzLl9yZXN0YXJ0RXZlbnQoZXZlbnQpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2JhYmlsaXR5IG9mIHRoZSBub3RlcyBiZWluZyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvYmFiaWxpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAncHJvYmFiaWxpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9iYWJpbGl0eTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2IpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcHJvYmFiaWxpdHkgPSBwcm9iO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBbGwoJ3Byb2JhYmlsaXR5JywgcHJvYik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgc2V0IHRvIHRydWUsIHdpbGwgYXBwbHkgc21hbGwgcmFuZG9tIHZhcmlhdGlvblxuXHRcdCAqICB0byB0aGUgY2FsbGJhY2sgdGltZS4gSWYgdGhlIHZhbHVlIGlzIGdpdmVuIGFzIGEgdGltZSwgaXQgd2lsbCByYW5kb21pemVcblx0XHQgKiAgYnkgdGhhdCBhbW91bnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogZXZlbnQuaHVtYW5pemUgPSB0cnVlO1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdCAqICBAbmFtZSBodW1hbml6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdodW1hbml6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2h1bWFuaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFyaWF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2h1bWFuaXplID0gdmFyaWF0aW9uO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBbGwoJ2h1bWFuaXplJywgdmFyaWF0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgcGFydCBzaG91bGQgbG9vcCBvciBub3Rcblx0XHQgKiAgYmV0d2VlbiBUb25lLlBhcnQubG9vcFN0YXJ0IGFuZFxuXHRcdCAqICBUb25lLlBhcnQubG9vcEVuZC4gQW4gaW50ZWdlclxuXHRcdCAqICB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mXG5cdFx0ICogIGxvb3BzIHRoZSBQYXJ0IGRvZXMgYWZ0ZXIgaXQgc3RhcnRzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgbG9vcFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9vcCB0aGUgcGFydCA4IHRpbWVzXG5cdFx0ICogcGFydC5sb29wID0gODtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3A7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuX2xvb3BTdGFydCA9IHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Ll9sb29wRW5kID0gdGhpcy5fbG9vcEVuZDtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdGVzdExvb3BCb3VuZHJpZXMoZXZlbnQpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbG9vcEVuZCBwb2ludCBkZXRlcm1pbmVzIHdoZW4gaXQgd2lsbFxuXHRcdCAqICBsb29wIGlmIFRvbmUuUGFydC5sb29wIGlzIHRydWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BFbmQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKGxvb3BFbmQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXN0TG9vcEJvdW5kcmllcyhldmVudCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBsb29wU3RhcnQgcG9pbnQgZGV0ZXJtaW5lcyB3aGVuIGl0IHdpbGxcblx0XHQgKiAgbG9vcCBpZiBUb25lLlBhcnQubG9vcCBpcyB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcFN0YXJ0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3MobG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQubG9vcFN0YXJ0ID0gdGhpcy5sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGVzdExvb3BCb3VuZHJpZXMoZXZlbnQpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0VGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIHBhcnRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBbGwoJ3BsYXliYWNrUmF0ZScsIHJhdGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRUaGUgbnVtYmVyIG9mIHNjaGVkdWxlZCBub3RlcyBpbiB0aGUgcGFydC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBsZW5ndGhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50cy5sZW5ndGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnJlbW92ZUFsbCgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYXJ0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGF0dGVybiBhcnBlZ2dpYXRlcyBiZXR3ZWVuIHRoZSBnaXZlbiBub3Rlc1xuXHRcdCAqICAgICAgICAgaW4gYSBudW1iZXIgb2YgcGF0dGVybnMuIFNlZSBUb25lLkN0cmxQYXR0ZXJuIGZvclxuXHRcdCAqICAgICAgICAgYSBmdWxsIGxpc3Qgb2YgcGF0dGVybnMuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBhdHRlcm4gPSBuZXcgVG9uZS5QYXR0ZXJuKGZ1bmN0aW9uKHRpbWUsIG5vdGUpe1xuXHRcdCAqICAgLy90aGUgb3JkZXIgb2YgdGhlIG5vdGVzIHBhc3NlZCBpbiBkZXBlbmRzIG9uIHRoZSBwYXR0ZXJuXG5cdFx0ICogfSwgW1wiQzJcIiwgXCJENFwiLCBcIkU1XCIsIFwiQTZcIl0sIFwidXBEb3duXCIpO1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Mb29wfVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcnBlZ2dpYXRlIG92ZXIuXG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAndmFsdWVzJyxcblx0ICAgICAgICAgICAgJ3BhdHRlcm4nXG5cdCAgICAgICAgXSwgVG9uZS5QYXR0ZXJuKTtcblx0ICAgICAgICBUb25lLkxvb3AuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGF0dGVybiBtYW5hZ2VyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3RybFBhdHRlcm59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4gPSBuZXcgVG9uZS5DdHJsUGF0dGVybih7XG5cdCAgICAgICAgICAgICd2YWx1ZXMnOiBvcHRpb25zLnZhbHVlcyxcblx0ICAgICAgICAgICAgJ3R5cGUnOiBvcHRpb25zLnBhdHRlcm4sXG5cdCAgICAgICAgICAgICdpbmRleCc6IG9wdGlvbnMuaW5kZXhcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhdHRlcm4sIFRvbmUuTG9vcCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGF0dGVybi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGF0dGVybic6IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCxcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ3ZhbHVlcyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBub3RlcyBzaG91bGQgYmUgY2FsbGVkXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRoZSBldmVudCBvY2N1cnNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGF0dGVybi5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgdGhpcy5fcGF0dGVybi52YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fcGF0dGVybi5uZXh0KCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IGluZGV4IGluIHRoZSB2YWx1ZXMgYXJyYXkuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgaW5kZXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAnaW5kZXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuLmluZGV4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXR0ZXJuLmluZGV4ID0gaTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYXJyYXkgb2YgZXZlbnRzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICogIEBuYW1lIHZhbHVlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICd2YWx1ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuLnZhbHVlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGF0dGVybi52YWx1ZXMgPSB2YWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwYXR0ZXJuLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXR0ZXJuLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi52YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGF0dGVybiB0eXBlLiBTZWUgVG9uZS5DdHJsUGF0dGVybiBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBwYXR0ZXJucy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgcGF0dGVyblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICdwYXR0ZXJuJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGF0dGVybikge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXR0ZXJuLnR5cGUgPSBwYXR0ZXJuO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhdHRlcm59ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcGF0dGVybi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcGF0dGVybiA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGF0dGVybjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgc2VxdWVuY2UgaXMgYW4gYWx0ZXJuYXRlIG5vdGF0aW9uIG9mIGEgcGFydC4gSW5zdGVhZFxuXHRcdCAqICAgICAgICAgb2YgcGFzc2luZyBpbiBhbiBhcnJheSBvZiBbdGltZSwgZXZlbnRdIHBhaXJzLCBwYXNzXG5cdFx0ICogICAgICAgICBpbiBhbiBhcnJheSBvZiBldmVudHMgd2hpY2ggd2lsbCBiZSBzcGFjZWQgYXQgdGhlXG5cdFx0ICogICAgICAgICBnaXZlbiBzdWJkaXZpc2lvbi4gU3ViLWFycmF5cyB3aWxsIHN1YmRpdmlkZSB0aGF0IGJlYXRcblx0XHQgKiAgICAgICAgIGJ5IHRoZSBudW1iZXIgb2YgaXRlbXMgYXJlIGluIHRoZSBhcnJheS5cblx0XHQgKiAgICAgICAgIFNlcXVlbmNlIG5vdGF0aW9uIGluc3BpcmF0aW9uIGZyb20gW1RpZGFsXShodHRwOi8veWF4dS5vcmcvdGlkYWwvKVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gICAgZXZlbnRzICBUaGUgc2VxdWVuY2Vcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gc3ViZGl2aXNpb24gIFRoZSBzdWJkaXZpc2lvbiBiZXR3ZWVuIHdoaWNoIGV2ZW50cyBhcmUgcGxhY2VkLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5QYXJ0fVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzZXEgPSBuZXcgVG9uZS5TZXF1ZW5jZShmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKG5vdGUpO1xuXHRcdCAqIC8vc3RyYWlnaHQgcXVhdGVyIG5vdGVzXG5cdFx0ICogfSwgW1wiQzRcIiwgXCJFNFwiLCBcIkc0XCIsIFwiQTRcIl0sIFwiNG5cIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNlcSA9IG5ldyBUb25lLlNlcXVlbmNlKGZ1bmN0aW9uKHRpbWUsIG5vdGUpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2cobm90ZSk7XG5cdFx0ICogLy9zdWJkaXZpc2lvbnMgYXJlIGdpdmVuIGFzIHN1YmFycmF5c1xuXHRcdCAqIH0sIFtcIkM0XCIsIFtcIkU0XCIsIFwiRDRcIiwgXCJFNFwiXSwgXCJHNFwiLCBbXCJBNFwiLCBcIkc0XCJdXSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2V2ZW50cycsXG5cdCAgICAgICAgICAgICdzdWJkaXZpc2lvbidcblx0ICAgICAgICBdLCBUb25lLlNlcXVlbmNlKTtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgZXZlbnRzXG5cdCAgICAgICAgdmFyIGV2ZW50cyA9IG9wdGlvbnMuZXZlbnRzO1xuXHQgICAgICAgIGRlbGV0ZSBvcHRpb25zLmV2ZW50cztcblx0ICAgICAgICBUb25lLlBhcnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3ViZGl2aXNvbiBvZiBlYWNoIG5vdGVcblx0XHRcdCAqICBAdHlwZSAge1RpY2tzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWJkaXZpc2lvbiA9IHRoaXMudG9UaWNrcyhvcHRpb25zLnN1YmRpdmlzaW9uKTtcblx0ICAgICAgICAvL2lmIG5vIHRpbWUgd2FzIHBhc3NlZCBpbiwgdGhlIGxvb3AgZW5kIGlzIHRoZSBlbmQgb2YgdGhlIGN5Y2xlXG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihvcHRpb25zLmxvb3BFbmQpICYmIFRvbmUuaXNEZWZpbmVkKGV2ZW50cykpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IGV2ZW50cy5sZW5ndGggKiB0aGlzLl9zdWJkaXZpc2lvbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9kZWZhdWx0cyB0byBsb29waW5nXG5cdCAgICAgICAgdGhpcy5fbG9vcCA9IHRydWU7XG5cdCAgICAgICAgLy9hZGQgYWxsIG9mIHRoZSBldmVudHNcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoZXZlbnRzKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5hZGQoaSwgZXZlbnRzW2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNlcXVlbmNlLCBUb25lLlBhcnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLmRlZmF1bHRzID0geyAnc3ViZGl2aXNpb24nOiAnNG4nIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN1YmRpdmlzaW9uIG9mIHRoZSBzZXF1ZW5jZS4gVGhpcyBjYW4gb25seSBiZVxuXHRcdCAqICBzZXQgaW4gdGhlIGNvbnN0cnVjdG9yLiBUaGUgc3ViZGl2aXNpb24gaXMgdGhlXG5cdFx0ICogIGludGVydmFsIGJldHdlZW4gc3VjY2Vzc2l2ZSBzdGVwcy5cblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNlcXVlbmNlI1xuXHRcdCAqICBAbmFtZSBzdWJkaXZpc2lvblxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNlcXVlbmNlLnByb3RvdHlwZSwgJ3N1YmRpdmlzaW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9zdWJkaXZpc2lvbikudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0L1NldCBhbiBpbmRleCBvZiB0aGUgc2VxdWVuY2UuIElmIHRoZSBpbmRleCBjb250YWlucyBhIHN1YmFycmF5LFxuXHRcdCAqICBhIFRvbmUuU2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoYXQgc3ViLWFycmF5IHdpbGwgYmUgcmV0dXJuZWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNlcXVlbmNlID0gbmV3IFRvbmUuU2VxdWVuY2UocGxheU5vdGUsIFtcIkU0XCIsIFwiQzRcIiwgXCJGIzRcIiwgW1wiQTRcIiwgXCJCYjNcIl1dKVxuXHRcdCAqIHNlcXVlbmNlLmF0KDApLy8gPT4gcmV0dXJucyBcIkU0XCJcblx0XHQgKiAvL3NldCBhIHZhbHVlXG5cdFx0ICogc2VxdWVuY2UuYXQoMCwgXCJHM1wiKTtcblx0XHQgKiAvL2dldCBhIG5lc3RlZCBzZXF1ZW5jZVxuXHRcdCAqIHNlcXVlbmNlLmF0KDMpLmF0KDEpLy8gPT4gcmV0dXJucyBcIkJiM1wiXG5cdFx0ICogQHBhcmFtIHtQb3NpdGl2ZX0gaW5kZXggVGhlIGluZGV4IHRvIGdldCBvciBzZXRcblx0XHQgKiBAcGFyYW0geyp9IHZhbHVlIE9wdGlvbmFsbHkgcGFzcyBpbiB0aGUgdmFsdWUgdG8gc2V0IGF0IHRoZSBnaXZlbiBpbmRleC5cblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuXHQgICAgICAgIC8vaWYgdGhlIHZhbHVlIGlzIGFuIGFycmF5LFxuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBjdXJyZW50IGV2ZW50IGF0IHRoYXQgaW5kZXhcblx0ICAgICAgICAgICAgdGhpcy5yZW1vdmUoaW5kZXgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NhbGwgdGhlIHBhcmVudCdzIG1ldGhvZFxuXHQgICAgICAgIHJldHVybiBUb25lLlBhcnQucHJvdG90eXBlLmF0LmNhbGwodGhpcywgdGhpcy5faW5kZXhUaW1lKGluZGV4KSwgdmFsdWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYW4gZXZlbnQgYXQgYW4gaW5kZXgsIGlmIHRoZXJlJ3MgYWxyZWFkeSBzb21ldGhpbmdcblx0XHQgKiAgYXQgdGhhdCBpbmRleCwgb3ZlcndyaXRlIGl0LiBJZiBgdmFsdWVgIGlzIGFuIGFycmF5LFxuXHRcdCAqICBpdCB3aWxsIGJlIHBhcnNlZCBhcyBhIHN1YnNlcXVlbmNlLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gaW5kZXggVGhlIGluZGV4IHRvIGFkZCB0aGUgZXZlbnQgdG9cblx0XHQgKiAgQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYWRkIGF0IHRoYXQgaW5kZXhcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2VxdWVuY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcblx0ICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIC8vbWFrZSBhIHN1YnNlcXVlbmNlIGFuZCBhZGQgdGhhdCB0byB0aGUgc2VxdWVuY2Vcblx0ICAgICAgICAgICAgdmFyIHN1YlN1YmRpdmlzaW9uID0gTWF0aC5yb3VuZCh0aGlzLl9zdWJkaXZpc2lvbiAvIHZhbHVlLmxlbmd0aCk7XG5cdCAgICAgICAgICAgIHZhbHVlID0gbmV3IFRvbmUuU2VxdWVuY2UodGhpcy5fdGljay5iaW5kKHRoaXMpLCB2YWx1ZSwgVG9uZS5UaWNrcyhzdWJTdWJkaXZpc2lvbikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLlBhcnQucHJvdG90eXBlLmFkZC5jYWxsKHRoaXMsIHRoaXMuX2luZGV4VGltZShpbmRleCksIHZhbHVlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGEgdmFsdWUgZnJvbSB0aGUgc2VxdWVuY2UgYnkgaW5kZXhcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZXZlbnQgdG8gcmVtb3ZlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNlcXVlbmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5yZW1vdmUuY2FsbCh0aGlzLCB0aGlzLl9pbmRleFRpbWUoaW5kZXgpLCB2YWx1ZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgdGltZSBvZiB0aGUgaW5kZXggZ2l2ZW4gdGhlIFNlcXVlbmNlJ3Mgc3ViZGl2aXNpb25cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgaW5kZXhcblx0XHQgKiAgQHJldHVybiAge1RpbWV9ICBUaGUgdGltZSBvZiB0aGF0IGluZGV4XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5faW5kZXhUaW1lID0gZnVuY3Rpb24gKGluZGV4KSB7XG5cdCAgICAgICAgaWYgKGluZGV4IGluc3RhbmNlb2YgVG9uZS5UcmFuc3BvcnRUaW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBpbmRleDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyhpbmRleCAqIHRoaXMuX3N1YmRpdmlzaW9uICsgdGhpcy5zdGFydE9mZnNldCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5TZXF1ZW5jZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlBhcnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TZXF1ZW5jZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUHVsc2VPc2NpbGxhdG9yIGlzIGEgcHVsc2Ugb3NjaWxsYXRvciB3aXRoIGNvbnRyb2wgb3ZlciBwdWxzZSB3aWR0aCxcblx0XHQgKiAgICAgICAgIGFsc28ga25vd24gYXMgdGhlIGR1dHkgY3ljbGUuIEF0IDUwJSBkdXR5IGN5Y2xlICh3aWR0aCA9IDAuNSkgdGhlIHdhdmUgaXNcblx0XHQgKiAgICAgICAgIGEgc3F1YXJlIGFuZCBvbmx5IG9kZC1udW1iZXJlZCBoYXJtb25pY3MgYXJlIHByZXNlbnQuIEF0IGFsbCBvdGhlciB3aWR0aHNcblx0XHQgKiAgICAgICAgIGV2ZW4tbnVtYmVyZWQgaGFybW9uaWNzIGFyZSBwcmVzZW50LiBSZWFkIG1vcmVcblx0XHQgKiAgICAgICAgIFtoZXJlXShodHRwczovL3dpZ2dsZXdhdmUud29yZHByZXNzLmNvbS8yMDE0LzA4LzE2L3B1bHNlLXdhdmVmb3Jtcy1hbmQtaGFybW9uaWNzLykuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtmcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3dpZHRoXSBUaGUgd2lkdGggb2YgdGhlIHB1bHNlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHB1bHNlID0gbmV3IFRvbmUuUHVsc2VPc2NpbGxhdG9yKFwiRTVcIiwgMC40KS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnd2lkdGgnXG5cdCAgICAgICAgXSwgVG9uZS5Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3aWR0aCBvZiB0aGUgcHVsc2UuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy53aWR0aCwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBnYXRlIHRoZSB3aWR0aCBhbW91bnRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHNhd3Rvb3RoIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zYXd0b290aCA9IG5ldyBUb25lLk9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICBmcmVxdWVuY3k6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICBkZXR1bmU6IG9wdGlvbnMuZGV0dW5lLFxuXHQgICAgICAgICAgICB0eXBlOiAnc2F3dG9vdGgnLFxuXHQgICAgICAgICAgICBwaGFzZTogb3B0aW9ucy5waGFzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fc2F3dG9vdGguZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHMuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fc2F3dG9vdGguZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRocmVzaG9sZCB0aGUgc2lnbmFsIHRvIHR1cm4gaXQgaW50byBhIHNxdWFyZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAodmFsIDwgMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguY2hhaW4odGhpcy5fdGhyZXNoLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5jaGFpbih0aGlzLl93aWR0aEdhdGUsIHRoaXMuX3RocmVzaCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnd2lkdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlB1bHNlT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHBhcmFtZXRlcnMuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ3dpZHRoJzogMC4yXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIC8vdGhlIHdpZHRoIGlzIHN0aWxsIGNvbm5lY3RlZCB0byB0aGUgb3V0cHV0LlxuXHQgICAgICAgIC8vdGhhdCBuZWVkcyB0byBiZSBzdG9wcGVkIGFsc29cblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUHVsc2VPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zYXd0b290aC5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvci4gQWx3YXlzIHJldHVybnMgXCJwdWxzZVwiLlxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlB1bHNlT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gJ3B1bHNlJztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgd2F2ZWZvcm0uIENhbm5vdCBzZXQgcGFydGlhbHMgZm9yIHRoaXMgd2F2ZWZvcm0gdHlwZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlB1bHNlT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gW107XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAgbWV0aG9kLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlB1bHNlT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3dpZHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy53aWR0aCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGhyZXNoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlB1bHNlT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUFdNT3NjaWxsYXRvciBtb2R1bGF0ZXMgdGhlIHdpZHRoIG9mIGEgVG9uZS5QdWxzZU9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgIGF0IHRoZSBtb2R1bGF0aW9uRnJlcXVlbmN5LiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIGNvbnRpbnVvdXNseVxuXHRcdCAqICAgICAgICAgY2hhbmdpbmcgdGhlIHRpbWJyZSBvZiB0aGUgb3NjaWxsYXRvciBieSBhbHRlcmluZyB0aGUgaGFybW9uaWNzXG5cdFx0ICogICAgICAgICBnZW5lcmF0ZWQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gbW9kdWxhdGlvbkZyZXF1ZW5jeSBUaGUgbW9kdWxhdGlvbiBmcmVxdWVuY3kgb2YgdGhlIHdpZHRoIG9mIHRoZSBwdWxzZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIHB3bSA9IG5ldyBUb25lLlBXTU9zY2lsbGF0b3IoXCJBYjNcIiwgMC4zKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25GcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5QV01Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwdWxzZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUHVsc2VPc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wdWxzZSA9IG5ldyBUb25lLlB1bHNlT3NjaWxsYXRvcihvcHRpb25zLm1vZHVsYXRpb25GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vY2hhbmdlIHRoZSBwdWxzZSBvc2NpbGxhdG9yIHR5cGVcblx0ICAgICAgICB0aGlzLl9wdWxzZS5fc2F3dG9vdGgudHlwZSA9ICdzaW5lJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbW9kdWxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcih7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2RldHVuZSc6IG9wdGlvbnMuZGV0dW5lLFxuXHQgICAgICAgICAgICAncGhhc2UnOiBvcHRpb25zLnBoYXNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2NhbGUgdGhlIG9zY2lsbGF0b3Igc28gaXQgZG9lc24ndCBnbyBzaWxlbnRcblx0XHRcdCAqICBhdCB0aGUgZXh0cmVtZSB2YWx1ZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbmV3IFRvbmUuTXVsdGlwbHkoMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fbW9kdWxhdG9yLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGlvbiByYXRlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRnJlcXVlbmN5ID0gdGhpcy5fcHVsc2UuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY2hhaW4odGhpcy5fc2NhbGUsIHRoaXMuX3B1bHNlLndpZHRoKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QV01Pc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ21vZHVsYXRpb25GcmVxdWVuY3knOiAwLjRcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2Uuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuIEFsd2F5cyByZXR1cm5zIFwicHdtXCIuXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUFdNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICdwd20nO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQ2Fubm90IHNldCBwYXJ0aWFscyBmb3IgdGhpcyB3YXZlZm9ybSB0eXBlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUFdNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUFdNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9kdWxhdG9yLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUFdNT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25GcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBXTU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZNT3NjaWxsYXRvclxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IG1vZHVsYXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egc2luZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeS1tb2R1bGF0ZWQgYnkgYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIHZhciBmbU9zYyA9IG5ldyBUb25lLkZNT3NjaWxsYXRvcihcIkFiM1wiLCBcInNpbmVcIiwgXCJzcXVhcmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvblR5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5GTU9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKG9wdGlvbnMuZnJlcXVlbmN5LCBvcHRpb25zLnR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLl9jYXJyaWVyLmRldHVuZTtcblx0ICAgICAgICB0aGlzLmRldHVuZS52YWx1ZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW9uIGluZGV4IHdoaWNoIGlzIGluIGVzc2VuY2UgdGhlIGRlcHRoIG9yIGFtb3VudCBvZiB0aGUgbW9kdWxhdGlvbi4gSW4gb3RoZXIgdGVybXMgaXQgaXMgdGhlXG5cdFx0XHQgKiAgcmF0aW8gb2YgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxhdGluZyBzaWduYWwgKG1mKSB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZVxuXHRcdFx0ICogIG1vZHVsYXRpbmcgc2lnbmFsIChtYSkgLS0gYXMgaW4gbWEvbWYuXG5cdFx0XHQgKlx0QHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICpcdEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5tb2R1bGF0aW9uSW5kZXgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW5nIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy5tb2R1bGF0aW9uVHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSBjYXJyaWVyIGFuZCB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3JzLlxuXHRcdFx0ICogIEEgaGFybW9uaWNpdHkgb2YgMSBnaXZlcyBib3RoIG9zY2lsbGF0b3JzIHRoZSBzYW1lIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdGhlIG1vZHVsYXRvciBhbiBvY3RhdmUgYmVsb3cgY2FycmllclxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKDApO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLm1vZHVsYXRpb25JbmRleCwgdGhpcy5fbW9kdWxhdGlvbk5vZGUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jb25uZWN0KHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZNT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IDIsXG5cdCAgICAgICAgJ21vZHVsYXRpb25UeXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvblR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uVHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIGNhcnJpZXIgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRk1Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRk1Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BTU9zY2lsbGF0b3Jcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gbW9kdWxhdGlvblR5cGUgVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBzaW5lIG9zY2lsbGF0b3IgZnJlcXVlbmN5LW1vZHVsYXRlZCBieSBhIHNxdWFyZSB3YXZlXG5cdFx0ICogdmFyIGZtT3NjID0gbmV3IFRvbmUuQU1Pc2NpbGxhdG9yKFwiQWIzXCIsIFwic2luZVwiLCBcInNxdWFyZVwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uVHlwZSdcblx0ICAgICAgICBdLCBUb25lLkFNT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMudHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fY2Fycmllci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLl9jYXJyaWVyLmRldHVuZTtcblx0ICAgICAgICB0aGlzLmRldHVuZS52YWx1ZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW5nIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy5tb2R1bGF0aW9uVHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29udmVydCB0aGUgLTEsMSBvdXRwdXQgdG8gMCwxXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQXVkaW9Ub0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSBjYXJyaWVyIGFuZCB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3JzLlxuXHRcdFx0ICogIEEgaGFybW9uaWNpdHkgb2YgMSBnaXZlcyBib3RoIG9zY2lsbGF0b3JzIHRoZSBzYW1lIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdGhlIG1vZHVsYXRvciBhbiBvY3RhdmUgYmVsb3cgY2FycmllclxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKDApO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHRoaXMuX21vZHVsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jaGFpbih0aGlzLl9tb2R1bGF0aW9uU2NhbGUsIHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY2hhaW4odGhpcy5fbW9kdWxhdGlvbk5vZGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQU1Pc2NpbGxhdG9yLCBUb25lLk9zY2lsbGF0b3IpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ21vZHVsYXRpb25UeXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHJlc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkFNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvblR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uVHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIGNhcnJpZXIgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQU1Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQU1Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GYXRPc2NpbGxhdG9yXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gbW9kdWxhdGlvblR5cGUgVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBzaW5lIG9zY2lsbGF0b3IgZnJlcXVlbmN5LW1vZHVsYXRlZCBieSBhIHNxdWFyZSB3YXZlXG5cdFx0ICogdmFyIGZtT3NjID0gbmV3IFRvbmUuRmF0T3NjaWxsYXRvcihcIkFiM1wiLCBcInNpbmVcIiwgXCJzcXVhcmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ3NwcmVhZCdcblx0ICAgICAgICBdLCBUb25lLkZhdE9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXJyYXkgb2Ygb3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRvdGFsIHNwcmVhZCBvZiB0aGUgb3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSAge0NlbnRzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcHJlYWQgPSBvcHRpb25zLnNwcmVhZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yc1xuXHRcdFx0ICogIEB0eXBlIHtEZWdyZWVzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhcnRpYWxzIGFycmF5XG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLnBhcnRpYWxzLCBbXSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGNvdW50IGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuY291bnQgPSBvcHRpb25zLmNvdW50O1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GYXRPc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ3NwcmVhZCc6IDIwLFxuXHQgICAgICAgICdjb3VudCc6IDMsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2F3dG9vdGgnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdGFydCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIG9zY2lsbGF0b3JzXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgaXRlcmF0b3IgIFRoZSBpdGVyYXRvciBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5fZm9yRWFjaCA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgaXRlcmF0b3IuY2FsbCh0aGlzLCB0aGlzLl9vc2NpbGxhdG9yc1tpXSwgaSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZXR1bmUgc3ByZWFkIGJldHdlZW4gdGhlIG9zY2lsbGF0b3JzLiBJZiBcImNvdW50XCIgaXNcblx0XHQgKiBzZXQgdG8gMyBvc2NpbGxhdG9ycyBhbmQgdGhlIFwic3ByZWFkXCIgaXMgc2V0IHRvIDQwLFxuXHRcdCAqIHRoZSB0aHJlZSBvc2NpbGxhdG9ycyB3b3VsZCBiZSBkZXR1bmVkIGxpa2UgdGhpczogWy0yMCwgMCwgMjBdXG5cdFx0ICogZm9yIGEgdG90YWwgZGV0dW5lIHNwcmVhZCBvZiA0MCBjZW50cy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtDZW50c31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3ByZWFkO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ByZWFkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NwcmVhZCA9IHNwcmVhZDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aCA+IDEpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IC1zcHJlYWQgLyAyO1xuXHQgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSBzcHJlYWQgLyAodGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MsIGkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvc2MuZGV0dW5lLnZhbHVlID0gc3RhcnQgKyBzdGVwICogaTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIGRldHVuZWQgb3NjaWxsYXRvcnNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgY291bnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAnY291bnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjb3VudCkge1xuXHQgICAgICAgICAgICBjb3VudCA9IE1hdGgubWF4KGNvdW50LCAxKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aCAhPT0gY291bnQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBwYXJ0aWFscyA9IHRoaXMucGFydGlhbHM7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0ICAgICAgICAgICAgICAgIC8vZGlzcG9zZSB0aGUgcHJldmlvdXMgb3NjaWxsYXRvcnNcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgICAgIG9zYy5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gW107XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBvc2MucGFydGlhbHMgPSB0aGlzLl9wYXJ0aWFscztcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBvc2MudHlwZSA9IHRoaXMuX3R5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIG9zYy5waGFzZSA9IHRoaXMuX3BoYXNlO1xuXHQgICAgICAgICAgICAgICAgICAgIG9zYy52b2x1bWUudmFsdWUgPSAtNiAtIGNvdW50ICogMS4xO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3Qob3NjLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdChvc2MuZGV0dW5lKTtcblx0ICAgICAgICAgICAgICAgICAgICBvc2MuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0gPSBvc2M7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvL3NldCB0aGUgc3ByZWFkXG5cdCAgICAgICAgICAgICAgICB0aGlzLnNwcmVhZCA9IHRoaXMuX3NwcmVhZDtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3NjLnN0YXJ0KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZhdE9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICBvc2MucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIGNhcnJpZXIgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5GYXRPc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZhdE9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk9tbmlPc2NpbGxhdG9yIGFnZ3JlZ2F0ZXMgVG9uZS5Pc2NpbGxhdG9yLCBUb25lLlB1bHNlT3NjaWxsYXRvcixcblx0XHQgKiAgICAgICAgIFRvbmUuUFdNT3NjaWxsYXRvciwgVG9uZS5GTU9zY2lsbGF0b3IsIFRvbmUuQU1Pc2NpbGxhdG9yLCBhbmQgVG9uZS5GYXRPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICBpbnRvIG9uZSBjbGFzcy4gVGhlIG9zY2lsbGF0b3IgY2xhc3MgY2FuIGJlIGNoYW5nZWQgYnkgc2V0dGluZyB0aGUgYHR5cGVgLlxuXHRcdCAqICAgICAgICAgYG9tbmlPc2MudHlwZSA9IFwicHdtXCJgIHdpbGwgc2V0IGl0IHRvIHRoZSBUb25lLlBXTU9zY2lsbGF0b3IuIFByZWZpeGluZ1xuXHRcdCAqICAgICAgICAgYW55IG9mIHRoZSBiYXNpYyB0eXBlcyAoXCJzaW5lXCIsIFwic3F1YXJlNFwiLCBldGMuKSB3aXRoIFwiZm1cIiwgXCJhbVwiLCBvciBcImZhdFwiXG5cdFx0ICogICAgICAgICB3aWxsIHVzZSB0aGUgRk1Pc2NpbGxhdG9yLCBBTU9zY2lsbGF0b3Igb3IgRmF0T3NjaWxsYXRvciByZXNwZWN0aXZlbHkuXG5cdFx0ICogICAgICAgICBGb3IgZXhhbXBsZTogYG9tbmlPc2MudHlwZSA9IFwiZmF0c2F3dG9vdGhcImAgd2lsbCBjcmVhdGUgc2V0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICB0byBhIEZhdE9zY2lsbGF0b3Igb2YgdHlwZSBcInNhd3Rvb3RoXCIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgaW5pdGlhbCBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgb21uaU9zYyA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKFwiQyM0XCIsIFwicHdtXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLk9tbmlPc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2xcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3Igc291cmNlXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlVHlwZSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIC8vc2V0IHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIG9wdGlvbnNcblx0ICAgICAgICB0aGlzLnNldChvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk9tbmlPc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAncGhhc2UnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgT21uaU9zY1R5cGUgPSB7XG5cdCAgICAgICAgUHVsc2U6ICdQdWxzZU9zY2lsbGF0b3InLFxuXHQgICAgICAgIFBXTTogJ1BXTU9zY2lsbGF0b3InLFxuXHQgICAgICAgIE9zYzogJ09zY2lsbGF0b3InLFxuXHQgICAgICAgIEZNOiAnRk1Pc2NpbGxhdG9yJyxcblx0ICAgICAgICBBTTogJ0FNT3NjaWxsYXRvcicsXG5cdCAgICAgICAgRmF0OiAnRmF0T3NjaWxsYXRvcidcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRvIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0byBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuIENhbiBiZSBhbnkgb2YgdGhlIGJhc2ljIHR5cGVzOiBzaW5lLCBzcXVhcmUsIHRyaWFuZ2xlLCBzYXd0b290aC4gT3Jcblx0XHQgKiBwcmVmaXggdGhlIGJhc2ljIHR5cGVzIHdpdGggXCJmbVwiLCBcImFtXCIsIG9yIFwiZmF0XCIgdG8gdXNlIHRoZSBGTU9zY2lsbGF0b3IsIEFNT3NjaWxsYXRvciBvciBGYXRPc2NpbGxhdG9yXG5cdFx0ICogdHlwZXMuIFRoZSBvc2NpbGxhdG9yIGNvdWxkIGFsc28gYmUgc2V0IHRvIFwicHdtXCIgb3IgXCJwdWxzZVwiLiBBbGwgb2YgdGhlIHBhcmFtZXRlcnMgb2YgdGhlXG5cdFx0ICogb3NjaWxsYXRvcidzIGNsYXNzIGFyZSBhY2Nlc3NpYmxlIHdoZW4gdGhlIG9zY2lsbGF0b3IgaXMgc2V0IHRvIHRoYXQgdHlwZSwgYnV0IHRocm93cyBhbiBlcnJvclxuXHRcdCAqIHdoZW4gaXQncyBub3QuXG5cdFx0ICpcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9tbmlPc2MudHlwZSA9IFwicHdtXCI7XG5cdFx0ICogLy9tb2R1bGF0aW9uRnJlcXVlbmN5IGlzIHBhcmFtZXRlciB3aGljaCBpcyBhdmFpbGFibGVcblx0XHQgKiAvL29ubHkgd2hlbiB0aGUgdHlwZSBpcyBcInB3bVwiLlxuXHRcdCAqIG9tbmlPc2MubW9kdWxhdGlvbkZyZXF1ZW5jeS52YWx1ZSA9IDAuNTtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vYW4gc3F1YXJlIHdhdmUgZnJlcXVlbmN5IG1vZHVsYXRlZCBieSBhIHNhd3Rvb3RoXG5cdFx0ICogb21uaU9zYy50eXBlID0gXCJmbXNxdWFyZVwiO1xuXHRcdCAqIG9tbmlPc2MubW9kdWxhdGlvblR5cGUgPSBcInNhd3Rvb3RoXCI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgcHJlZml4ID0gJyc7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSkge1xuXHQgICAgICAgICAgICAgICAgcHJlZml4ID0gJ2ZtJztcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgcHJlZml4ID0gJ2FtJztcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHByZWZpeCA9ICdmYXQnO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyB0aGlzLl9vc2NpbGxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlLnN1YnN0cigwLCAyKSA9PT0gJ2ZtJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5GTSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlLnN1YnN0cigyKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLnN1YnN0cigwLCAyKSA9PT0gJ2FtJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5BTSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlLnN1YnN0cigyKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLnN1YnN0cigwLCAzKSA9PT0gJ2ZhdCcpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuRmF0KTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGUuc3Vic3RyKDMpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwd20nKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLlBXTSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3B1bHNlJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5QdWxzZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLk9zYyk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogVGhpcyBpcyBub3QgYXZhaWxhYmxlIG9uIFwicHdtXCIgYW5kIFwicHVsc2VcIiBvc2NpbGxhdG9yIHR5cGVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IucGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IGEgbWVtYmVyL2F0dHJpYnV0ZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBwYXJhbXNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByYW1wVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5PbW5pT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgdmFsdWUpIHtcblx0ICAgICAgICAvL21ha2Ugc3VyZSB0aGUgdHlwZSBpcyBzZXQgZmlyc3Rcblx0ICAgICAgICBpZiAocGFyYW1zID09PSAndHlwZScpIHtcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gdmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzT2JqZWN0KHBhcmFtcykgJiYgcGFyYW1zLmhhc093blByb3BlcnR5KCd0eXBlJykpIHtcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gcGFyYW1zLnR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vdGhlbiBzZXQgdGhlIHJlc3Rcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5zZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0aGUgb3NjaWxsYXRvciB0byB0aGUgZnJlcXVlbmN5IGFuZCBkZXR1bmUgc2lnbmFsc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuX2NyZWF0ZU5ld09zY2lsbGF0b3IgPSBmdW5jdGlvbiAob3NjVHlwZSkge1xuXHQgICAgICAgIGlmIChvc2NUeXBlICE9PSB0aGlzLl9zb3VyY2VUeXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVR5cGUgPSBvc2NUeXBlO1xuXHQgICAgICAgICAgICB2YXIgT3NjaWxsYXRvckNvbnN0cnVjdG9yID0gVG9uZVtvc2NUeXBlXTtcblx0ICAgICAgICAgICAgLy9zaG9ydCBkZWxheSB0byBhdm9pZCBjbGlja3Mgb24gdGhlIGNoYW5nZVxuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBvbGRPc2MgPSB0aGlzLl9vc2NpbGxhdG9yO1xuXHQgICAgICAgICAgICAgICAgb2xkT3NjLnN0b3Aobm93KTtcblx0ICAgICAgICAgICAgICAgIC8vZGlzcG9zZSB0aGUgb2xkIG9uZVxuXHQgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9sZE9zYy5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgb2xkT3NjID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIH0sIHRoaXMuYmxvY2tUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbmV3IE9zY2lsbGF0b3JDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX29zY2lsbGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQobm93KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHdpZHRoIG9mIHRoZSBvc2NpbGxhdG9yIChvbmx5IGlmIHRoZSBvc2NpbGxhdG9yIGlzIHNldCB0byBcInB1bHNlXCIpXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBzaWduYWxcblx0XHQgKiBAbmFtZSB3aWR0aFxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIG9tbmlPc2MgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcig0NDAsIFwicHVsc2VcIik7XG5cdFx0ICogLy9jYW4gYWNjZXNzIHRoZSB3aWR0aCBhdHRyaWJ1dGUgb25seSBpZiB0eXBlID09PSBcInB1bHNlXCJcblx0XHQgKiBvbW5pT3NjLndpZHRoLnZhbHVlID0gMC4yO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnd2lkdGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5QdWxzZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3Iud2lkdGg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2YgZGV0dW5lZCBvc2NpbGxhdG9yc1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgY291bnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ2NvdW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5jb3VudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY291bnQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jb3VudCA9IGNvdW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGV0dW5lIHNwcmVhZCBiZXR3ZWVuIHRoZSBvc2NpbGxhdG9ycy4gSWYgXCJjb3VudFwiIGlzXG5cdFx0ICogc2V0IHRvIDMgb3NjaWxsYXRvcnMgYW5kIHRoZSBcInNwcmVhZFwiIGlzIHNldCB0byA0MCxcblx0XHQgKiB0aGUgdGhyZWUgb3NjaWxsYXRvcnMgd291bGQgYmUgZGV0dW5lZCBsaWtlIHRoaXM6IFstMjAsIDAsIDIwXVxuXHRcdCAqIGZvciBhIHRvdGFsIGRldHVuZSBzcHJlYWQgb2YgNDAgY2VudHMuIFNlZSBUb25lLkZhdE9zY2lsbGF0b3Jcblx0XHQgKiBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtDZW50c31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3NwcmVhZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3Iuc3ByZWFkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zcHJlYWQgPSBzcHJlYWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci4gT25seSBpZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqIGlzIHNldCB0byBcImFtXCIgb3IgXCJmbVwiIHR5cGVzLiBzZWUuIFRvbmUuQU1Pc2NpbGxhdG9yIG9yIFRvbmUuRk1Pc2NpbGxhdG9yXG5cdFx0ICogZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25UeXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uVHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNIHx8IHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uVHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobVR5cGUpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNIHx8IHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLm1vZHVsYXRpb25UeXBlID0gbVR5cGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtb2R1bGF0aW9uIGluZGV4IHdoaWNoIGlzIGluIGVzc2VuY2UgdGhlIGRlcHRoIG9yIGFtb3VudCBvZiB0aGUgbW9kdWxhdGlvbi4gSW4gb3RoZXIgdGVybXMgaXQgaXMgdGhlXG5cdFx0ICogcmF0aW8gb2YgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxhdGluZyBzaWduYWwgKG1mKSB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZVxuXHRcdCAqIG1vZHVsYXRpbmcgc2lnbmFsIChtYSkgLS0gYXMgaW4gbWEvbWYuXG5cdFx0ICogU2VlIFRvbmUuRk1Pc2NpbGxhdG9yIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBzaWduYWxcblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uSW5kZXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ21vZHVsYXRpb25JbmRleCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uSW5kZXg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgZnJlcXVlbmN5IHJhdGlvIGJldHdlZW4gdGhlIGNhcnJpZXIgYW5kIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvcnMuXG5cdFx0ICogIEEgaGFybW9uaWNpdHkgb2YgMSBnaXZlcyBib3RoIG9zY2lsbGF0b3JzIHRoZSBzYW1lIGZyZXF1ZW5jeS5cblx0XHQgKiAgSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS4gU2VlIFRvbmUuQU1Pc2NpbGxhdG9yIG9yIFRvbmUuRk1Pc2NpbGxhdG9yXG5cdFx0ICogIGZvciBtb3JlIGluZm8uXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqICBAc2lnbmFsXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgaGFybW9uaWNpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ2hhcm1vbmljaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0gfHwgdGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuQU0pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLmhhcm1vbmljaXR5O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbW9kdWxhdGlvbkZyZXF1ZW5jeSBTaWduYWwgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAob25seSBpZiB0aGUgb3NjaWxsYXRvciB0eXBlIGlzIHNldCB0byBwd20pLiBTZWVcblx0XHQgKiBUb25lLlBXTU9zY2lsbGF0b3IgZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqIEBzaWduYWxcblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uRnJlcXVlbmN5XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgb21uaU9zYyA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKDQ0MCwgXCJwd21cIik7XG5cdFx0ICogLy9jYW4gYWNjZXNzIHRoZSBtb2R1bGF0aW9uRnJlcXVlbmN5IGF0dHJpYnV0ZSBvbmx5IGlmIHR5cGUgPT09IFwicHdtXCJcblx0XHQgKiBvbW5pT3NjLm1vZHVsYXRpb25GcmVxdWVuY3kudmFsdWUgPSAwLjI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuUFdNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uRnJlcXVlbmN5O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuT21uaU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zb3VyY2VUeXBlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5PbW5pT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCYXNlLWNsYXNzIGZvciBhbGwgaW5zdHJ1bWVudHNcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuSW5zdHJ1bWVudC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IGFuZCB2b2x1bWUgdHJpbWluZyBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIHNvdXJjZS52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBLZWVwIHRyYWNrIG9mIGFsbCBldmVudHMgc2NoZWR1bGVkIHRvIHRoZSB0cmFuc3BvcnRcblx0XHRcdCAqIHdoZW4gdGhlIGluc3RydW1lbnQgaXMgJ3N5bmNlZCdcblx0XHRcdCAqIEB0eXBlIHtBcnJheTxOdW1iZXI+fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cyA9IFtdO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuSW5zdHJ1bWVudCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXNcblx0XHQgKiAgQHR5cGUge29iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAvKiogdGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzICovXG5cdCAgICAgICAgJ3ZvbHVtZSc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbm90ZSB0aGUgbm90ZSB0byB0cmlnZ2VyXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0byB0cmlnZ2VyIHRoZSBudG9lXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IHRvIHRyaWdnZXIgdGhlIG5vdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IFRvbmUubm9PcDtcblx0ICAgIC8qKlxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHdoZW4gdG8gdHJpZ2dlciB0aGUgcmVsZWFzZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IFRvbmUubm9PcDtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogaW5zdHJ1bWVudC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIGluc3RydW1lbnQudHJpZ2dlckF0dGFja1JlbGVhc2UoJ0M0JywgJzhuJywgMClcblx0XHQgKiBpbnN0cnVtZW50LnRyaWdnZXJBdHRhY2tSZWxlYXNlKCdFNCcsICc4bicsICc4bicpXG5cdFx0ICogaW5zdHJ1bWVudC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnRzQnLCAnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAxKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFdyYXAgdGhlIGdpdmVuIG1ldGhvZCBzbyB0aGF0IGl0IGNhbiBiZSBzeW5jaHJvbml6ZWRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kIFdoaWNoIG1ldGhvZCB0byB3cmFwIGFuZCBzeW5jXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lUG9zaXRpb24gV2hhdCBwb3NpdGlvbiB0aGUgdGltZSBhcmd1bWVudCBhcHBlYXJzIGluXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuX3N5bmNNZXRob2QgPSBmdW5jdGlvbiAobWV0aG9kLCB0aW1lUG9zaXRpb24pIHtcblx0ICAgICAgICB2YXIgb3JpZ2luYWxNZXRob2QgPSB0aGlzWydfb3JpZ2luYWxfJyArIG1ldGhvZF0gPSB0aGlzW21ldGhvZF07XG5cdCAgICAgICAgdGhpc1ttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHZhciB0aW1lID0gYXJnc1t0aW1lUG9zaXRpb25dO1xuXHQgICAgICAgICAgICB2YXIgaWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICAgICAgYXJnc1t0aW1lUG9zaXRpb25dID0gdDtcblx0ICAgICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHQgICAgICAgICAgICB9LmJpbmQodGhpcyksIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMucHVzaChpZCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgaW5zdHJ1bWVudCBmcm9tIHRoZSBUcmFuc3BvcnRcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQuY2xlYXIoaWQpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cyA9IFtdO1xuXHQgICAgICAgIGlmICh0aGlzLl9vcmlnaW5hbF90cmlnZ2VyQXR0YWNrKSB7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayA9IHRoaXMuX29yaWdpbmFsX3RyaWdnZXJBdHRhY2s7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UgPSB0aGlzLl9vcmlnaW5hbF90cmlnZ2VyUmVsZWFzZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgdGhlbiB0aGUgcmVsZWFzZSBhZnRlciB0aGUgZHVyYXRpb24uXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gdHJpZ2dlci5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIG5vdGUgc2hvdWxkIGJlIGhlbGQgZm9yIGJlZm9yZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyaW5nIHRoZSByZWxlYXNlLiBUaGlzIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSAgV2hlbiB0aGUgbm90ZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSB0aGUgbm90ZSBzaG91bGQgYmUgdHJpZ2dlcmVkIGF0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIFwiQzRcIiBmb3IgdGhlIGR1cmF0aW9uIG9mIGFuIDh0aCBub3RlXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlLCBkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKG5vdGUsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3ZvbHVtZSddKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy51bnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkluc3RydW1lbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVGhpcyBpcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBvdGhlciBtb25vcGhvbmljIGluc3RydW1lbnRzIHRvIFxuXHRcdCAqICAgICAgICAgIGV4dGVuZC4gSU1QT1JUQU5UOiBJdCBkb2VzIG5vdCBtYWtlIGFueSBzb3VuZCBvbiBpdHMgb3duIGFuZFxuXHRcdCAqICAgICAgICAgIHNob3VsZG4ndCBiZSBkaXJlY3RseSBpbnN0YW50aWF0ZWQuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTW9ub3Bob25pYy5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdsaWRlIHRpbWUgYmV0d2VlbiBub3Rlcy4gXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBvcnRhbWVudG8gPSBvcHRpb25zLnBvcnRhbWVudG87XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb25vcGhvbmljLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMuZGVmYXVsdHMgPSB7ICdwb3J0YW1lbnRvJzogMCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBvZiB0aGUgbm90ZSBvcHRpb25hbGx5IHdpdGggYSBnaXZlbiB2ZWxvY2l0eS4gXG5cdFx0ICogIFxuXHRcdCAqICBcblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byB0cmlnZ2VyLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICAgICBXaGVuIHRoZSBub3RlIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdmVsb2NpdHkgVGhlIHZlbG9jaXR5IHNjYWxlciBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lcyBob3cgXCJsb3VkXCIgdGhlIG5vdGUgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vcGhvbmljfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFjayhcIkM0XCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciB0aGUgbm90ZSBhIGhhbGYgc2Vjb25kIGZyb20gbm93IGF0IGhhbGYgdmVsb2NpdHlcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrKFwiQzRcIiwgXCIrMC41XCIsIDAuNSk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnNldE5vdGUobm90ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBJZiBubyB0aW1lIGlzIGdpdmVuLCB0aGUgcmVsZWFzZSBoYXBwZW5zIGltbWVkaWF0bHlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub3Bob25pY30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJSZWxlYXNlKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCB0aGUgYWN0dWFsIG1ldGhvZFxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCB0aGUgYWN0dWFsIG1ldGhvZFxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgbGV2ZWwgb2YgdGhlIG91dHB1dCBhdCB0aGUgZ2l2ZW4gdGltZS4gTWVhc3VyZXNcblx0XHQgKiAgdGhlIGVudmVsb3BlKHMpIHZhbHVlIGF0IHRoZSB0aW1lLiBcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIHF1ZXJ5IHRoZSBlbnZlbG9wZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuIHtOb3JtYWxSYW5nZX0gVGhlIG91dHB1dCBsZXZlbCBiZXR3ZWVuIDAtMVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5nZXRMZXZlbEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmVudmVsb3BlLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHRpbWUuIElmIG5vIHRpbWUgaXMgZ2l2ZW4sIHRoZSBub3RlXG5cdFx0ICogIHdpbGwgc2V0IGltbWVkaWF0ZWx5LiBcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IG5vdGUgVGhlIG5vdGUgdG8gY2hhbmdlIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIG5vdGUgc2hvdWxkIGJlIHNldC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9waG9uaWN9IHRoaXNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2hhbmdlIHRvIEYjNiBpbiBvbmUgcXVhcnRlciBub3RlIGZyb20gbm93LlxuXHRcdCAqIHN5bnRoLnNldE5vdGUoXCJGIzZcIiwgXCIrNG5cIik7XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2NoYW5nZSB0byBCYjQgcmlnaHQgbm93XG5cdFx0ICogc3ludGguc2V0Tm90ZShcIkJiNFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuc2V0Tm90ZSA9IGZ1bmN0aW9uIChub3RlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLnBvcnRhbWVudG8gPiAwICYmIHRoaXMuZ2V0TGV2ZWxBdFRpbWUodGltZSkgPiAwLjA1KSB7XG5cdCAgICAgICAgICAgIHZhciBwb3J0VGltZSA9IHRoaXMudG9TZWNvbmRzKHRoaXMucG9ydGFtZW50byk7XG5cdCAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmV4cG9uZW50aWFsUmFtcFRvKG5vdGUsIHBvcnRUaW1lLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZShub3RlLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9ub3Bob25pYztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlN5bnRoIGlzIGNvbXBvc2VkIHNpbXBseSBvZiBhIFRvbmUuT21uaU9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgICByb3V0ZWQgdGhyb3VnaCBhIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzEtMV8wWVcyWjFKMkVQSTM2UDhmTkNNY1pHN04xdzFHWmx1UHM0b2c0ZXZvL3B1Yj93PTExNjMmaD0yMzFcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5PbW5pT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKG9wdGlvbnMub3NjaWxsYXRvcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLm9zY2lsbGF0b3IuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBvc2NpbGxhdG9ycyB0byB0aGUgb3V0cHV0XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmNoYWluKHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAndHJpYW5nbGUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjMsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICAvL2lmIHRoZXJlIGlzIG5vIHJlbGVhc2UgcG9ydGlvbiwgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICAgIGlmICh0aGlzLmVudmVsb3BlLnN1c3RhaW4gPT09IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBTVN5bnRoIHVzZXMgdGhlIG91dHB1dCBvZiBvbmUgVG9uZS5TeW50aCB0byBtb2R1bGF0ZSB0aGVcblx0XHQgKiAgICAgICAgICBhbXBsaXR1ZGUgb2YgYW5vdGhlciBUb25lLlN5bnRoLiBUaGUgaGFybW9uaWNpdHkgKHRoZSByYXRpbyBiZXR3ZWVuXG5cdFx0ICogICAgICAgICAgdGhlIHR3byBzaWduYWxzKSBhZmZlY3RzIHRoZSB0aW1icmUgb2YgdGhlIG91dHB1dCBzaWduYWwgZ3JlYXRseS5cblx0XHQgKiAgICAgICAgICBSZWFkIG1vcmUgYWJvdXQgQW1wbGl0dWRlIE1vZHVsYXRpb24gU3ludGhlc2lzIG9uXG5cdFx0ICogICAgICAgICAgW1NvdW5kT25Tb3VuZF0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDA0MTAzNjUzL2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbTo4MC9zb3MvbWFyMDAvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmh0bSkuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFUUXU4RWQ0aUZyMVlUTEtwQjNVMV9odXItVXdCcmg1Z2RCWGM4QnhmR0t3L3B1Yj93PTEwMDkmaD00NTdcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkFNU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkFNU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuU3ludGgoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gdGhpcy5fY2Fycmllci5vc2NpbGxhdG9yO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSB0aGlzLl9jYXJyaWVyLmVudmVsb3BlLnNldChvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5TeW50aCgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvcidzIG9zY2lsbGF0b3Igd2hpY2ggaXMgYXBwbGllZFxuXHRcdFx0ICogIHRvIHRoZSBhbXBsaXR1ZGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uID0gdGhpcy5fbW9kdWxhdG9yLm9zY2lsbGF0b3Iuc2V0KG9wdGlvbnMubW9kdWxhdGlvbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25FbnZlbG9wZSA9IHRoaXMuX21vZHVsYXRvci5lbnZlbG9wZS5zZXQob3B0aW9ucy5tb2R1bGF0aW9uRW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbCg0NDAsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHNcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMuIEEgaGFybW9uaWNpdHkgb2Zcblx0XHRcdCAqICAxIGlzIG5vIGNoYW5nZS4gSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHZvaWNlMSBhbiBvY3RhdmUgYmVsb3cgdm9pY2UwXG5cdFx0XHQgKiBzeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnZlcnQgdGhlIC0xLDEgb3V0cHV0IHRvIDAsMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkF1ZGlvVG9HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBuZXcgVG9uZS5BdWRpb1RvR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSBtb2R1bGF0aW9uIGhhcHBlbnNcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIHR3byB2b2ljZXMgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZmFuKHRoaXMuX2NhcnJpZXIuZGV0dW5lLCB0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY2hhaW4odGhpcy5fbW9kdWxhdGlvblNjYWxlLCB0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNoYWluKHRoaXMuX21vZHVsYXRpb25Ob2RlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbicsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQU1TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMyxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjAxLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbic6IHsgJ3R5cGUnOiAnc3F1YXJlJyB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRyaWdnZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIG9jY3VyXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQU1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgLy90aGUgcG9ydCBnbGlkZVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgcmVsZWFzZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BTVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQU1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQU1TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1vbm9TeW50aCBpcyBjb21wb3NlZCBvZiBvbmUgb3NjaWxsYXRvciwgb25lIGZpbHRlciwgYW5kIHR3byBlbnZlbG9wZXMuXG5cdFx0ICogICAgICAgICAgVGhlIGFtcGxpdHVkZSBvZiB0aGUgVG9uZS5Pc2NpbGxhdG9yIGFuZCB0aGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiB0aGVcblx0XHQgKiAgICAgICAgICBUb25lLkZpbHRlciBhcmUgY29udHJvbGxlZCBieSBUb25lLkVudmVsb3Blcy5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMWdhWTFERjlfSHprb2RxZjhKSTFDZzJWWmZ3U0VscEZRZkk5NElRd2FkMzgvcHViP3c9OTI0Jmg9MjQwXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuTW9ub1N5bnRoKHtcblx0XHQgKiBcdFwib3NjaWxsYXRvclwiIDoge1xuXHRcdCAqIFx0XHRcInR5cGVcIiA6IFwic3F1YXJlXCJcblx0XHQgKiAgfSxcblx0XHQgKiAgXCJlbnZlbG9wZVwiIDoge1xuXHRcdCAqICBcdFwiYXR0YWNrXCIgOiAwLjFcblx0XHQgKiAgfVxuXHRcdCAqIH0pLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Nb25vU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9tbmlPc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3Iob3B0aW9ucy5vc2NpbGxhdG9yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMub3NjaWxsYXRvci5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG5ldyBUb25lLkZpbHRlcihvcHRpb25zLmZpbHRlcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpbHRlciBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GcmVxdWVuY3lFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUgPSBuZXcgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZShvcHRpb25zLmZpbHRlckVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgb3NjaWxsYXRvcnMgdG8gdGhlIG91dHB1dFxuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5jaGFpbih0aGlzLmZpbHRlciwgdGhpcy5lbnZlbG9wZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgZmlsdGVyIGVudmVsb3BlXG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS5jb25uZWN0KHRoaXMuZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZpbHRlcicsXG5cdCAgICAgICAgICAgICdmaWx0ZXJFbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1vbm9TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6ICdDNCcsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NxdWFyZScgfSxcblx0ICAgICAgICAnZmlsdGVyJzoge1xuXHQgICAgICAgICAgICAnUSc6IDYsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ2xvd3Bhc3MnLFxuXHQgICAgICAgICAgICAncm9sbG9mZic6IC0yNFxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjksXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2ZpbHRlckVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wNixcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4yLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAuNSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAyLFxuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDIwMCxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnOiA3LFxuXHQgICAgICAgICAgICAnZXhwb25lbnQnOiAyXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLmVudmVsb3BlLnN1c3RhaW4gPT09IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZpbHRlcicsXG5cdCAgICAgICAgICAgICdmaWx0ZXJFbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5maWx0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vbm9TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkR1b1N5bnRoIGlzIGEgbW9ub3Bob25pYyBzeW50aCBjb21wb3NlZCBvZiB0d29cblx0XHQgKiAgICAgICAgICBNb25vU3ludGhzIHJ1biBpbiBwYXJhbGxlbCB3aXRoIGNvbnRyb2wgb3ZlciB0aGVcblx0XHQgKiAgICAgICAgICBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcyBhbmQgdmlicmF0byBlZmZlY3QuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFiTDRHWHZmUk1NbHFTN1h5Qm05Q2pMOUtKUFNVS2JjZEJOcHFPbGtGTHhrL3B1Yj93PTEwMTImaD00NDhcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZHVvU3ludGggPSBuZXcgVG9uZS5EdW9TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogZHVvU3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkR1b1N5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmlyc3Qgdm9pY2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Nb25vU3ludGh9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvaWNlMCA9IG5ldyBUb25lLk1vbm9TeW50aChvcHRpb25zLnZvaWNlMCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzZWNvbmQgdm9pY2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Nb25vU3ludGh9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvaWNlMSA9IG5ldyBUb25lLk1vbm9TeW50aChvcHRpb25zLnZvaWNlMSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2aWJyYXRvIExGTy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8gPSBuZXcgVG9uZS5MRk8ob3B0aW9ucy52aWJyYXRvUmF0ZSwgLTUwLCA1MCk7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0by5zdGFydCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIHZpYnJhdG8gZnJlcXVlbmN5XG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52aWJyYXRvUmF0ZSA9IHRoaXMuX3ZpYnJhdG8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB2aWJyYXRvIGdhaW5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy52aWJyYXRvQW1vdW50LCBUb25lLlR5cGUuUG9zaXRpdmUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtb3VudCBvZiB2aWJyYXRvXG5cdFx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZpYnJhdG9BbW91bnQgPSB0aGlzLl92aWJyYXRvR2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmcmVxdWVuY3kgY29udHJvbFxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoNDQwLCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcy4gQSBoYXJtb25pY2l0eSBvZlxuXHRcdFx0ICogIDEgaXMgbm8gY2hhbmdlLiBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdm9pY2UxIGFuIG9jdGF2ZSBiZWxvdyB2b2ljZTBcblx0XHRcdCAqIGR1b1N5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSB0d28gdm9pY2VzIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy52b2ljZTAuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLnZvaWNlMS5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8uY29ubmVjdCh0aGlzLl92aWJyYXRvR2Fpbik7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4uZmFuKHRoaXMudm9pY2UwLmRldHVuZSwgdGhpcy52b2ljZTEuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLnZvaWNlMS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICd2b2ljZTAnLFxuXHQgICAgICAgICAgICAndm9pY2UxJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd2aWJyYXRvQW1vdW50Jyxcblx0ICAgICAgICAgICAgJ3ZpYnJhdG9SYXRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRHVvU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndmlicmF0b0Ftb3VudCc6IDAuNSxcblx0ICAgICAgICAndmlicmF0b1JhdGUnOiA1LFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDEuNSxcblx0ICAgICAgICAndm9pY2UwJzoge1xuXHQgICAgICAgICAgICAndm9sdW1lJzogLTEwLFxuXHQgICAgICAgICAgICAncG9ydGFtZW50byc6IDAsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndm9pY2UxJzoge1xuXHQgICAgICAgICAgICAndm9sdW1lJzogLTEwLFxuXHQgICAgICAgICAgICAncG9ydGFtZW50byc6IDAsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3Blc1xuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkR1b1N5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXNcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkR1b1N5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy52b2ljZTAuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgbGV2ZWwgb2YgdGhlIG91dHB1dCBhdCB0aGUgZ2l2ZW4gdGltZS4gTWVhc3VyZXNcblx0XHQgKiAgdGhlIGVudmVsb3BlKHMpIHZhbHVlIGF0IHRoZSB0aW1lLiBcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIHF1ZXJ5IHRoZSBlbnZlbG9wZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuIHtOb3JtYWxSYW5nZX0gVGhlIG91dHB1dCBsZXZlbCBiZXR3ZWVuIDAtMVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuZ2V0TGV2ZWxBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiAodGhpcy52b2ljZTAuZ2V0TGV2ZWxBdFRpbWUodGltZSkgKyB0aGlzLnZvaWNlMS5nZXRMZXZlbEF0VGltZSh0aW1lKSkgLyAyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EdW9TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICd2b2ljZTAnLFxuXHQgICAgICAgICAgICAndm9pY2UxJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd2aWJyYXRvQW1vdW50Jyxcblx0ICAgICAgICAgICAgJ3ZpYnJhdG9SYXRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG9HYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0byA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52aWJyYXRvQW1vdW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZpYnJhdG9BbW91bnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmlicmF0b1JhdGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkR1b1N5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEZNU3ludGggaXMgY29tcG9zZWQgb2YgdHdvIFRvbmUuU3ludGhzIHdoZXJlIG9uZSBUb25lLlN5bnRoIG1vZHVsYXRlc1xuXHRcdCAqICAgICAgICAgIHRoZSBmcmVxdWVuY3kgb2YgYSBzZWNvbmQgVG9uZS5TeW50aC4gQSBsb3Qgb2Ygc3BlY3RyYWwgY29udGVudFxuXHRcdCAqICAgICAgICAgIGNhbiBiZSBleHBsb3JlZCB1c2luZyB0aGUgbW9kdWxhdGlvbkluZGV4IHBhcmFtZXRlci4gUmVhZCBtb3JlIGFib3V0XG5cdFx0ICogICAgICAgICAgZnJlcXVlbmN5IG1vZHVsYXRpb24gc3ludGhlc2lzIG9uIFNvdW5kIE9uIFNvdW5kOiBbUGFydCAxXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA0MDMxMjM3MDQvaHR0cDovL3d3dy5zb3VuZG9uc291bmQuY29tL3Nvcy9hcHIwMC9hcnRpY2xlcy9zeW50aHNlY3JldHMuaHRtKSwgW1BhcnQgMl0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDAzMTE1ODM1L2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvbWF5MDAvYXJ0aWNsZXMvc3ludGguaHRtKS5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMWgwUFVEWlhQZ2k0SWt4NmJWVDZvbmNyWVBMbHVGS3k3bGo1M3B1eGotRE0vcHViP3c9OTAyJmg9NDYyXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZtU3ludGggPSBuZXcgVG9uZS5GTVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBmbVN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzVcIiwgXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkZNU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuU3ludGgob3B0aW9ucy5jYXJyaWVyKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gdGhpcy5fY2Fycmllci5vc2NpbGxhdG9yO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IHRoaXMuX2NhcnJpZXIuZW52ZWxvcGUuc2V0KG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3Igdm9pY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3ludGh9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLlN5bnRoKG9wdGlvbnMubW9kdWxhdG9yKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBvc2NpbGxhdG9yIHdoaWNoIGlzIGFwcGxpZWRcblx0XHRcdCAqICB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IHRoaXMuX21vZHVsYXRvci5vc2NpbGxhdG9yLnNldChvcHRpb25zLm1vZHVsYXRpb24pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBlbnZlbG9wZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25FbnZlbG9wZSA9IHRoaXMuX21vZHVsYXRvci5lbnZlbG9wZS5zZXQob3B0aW9ucy5tb2R1bGF0aW9uRW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDQ0MCwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBpbiBjZW50c1xuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcy4gQSBoYXJtb25pY2l0eSBvZlxuXHRcdFx0ICogIDEgaXMgbm8gY2hhbmdlLiBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdm9pY2UxIGFuIG9jdGF2ZSBiZWxvdyB2b2ljZTBcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpb24gaW5kZXggd2hpY2ggZXNzZW50aWFsbHkgdGhlIGRlcHRoIG9yIGFtb3VudCBvZiB0aGUgbW9kdWxhdGlvbi4gSXQgaXMgdGhlXG5cdFx0XHQgKiAgcmF0aW8gb2YgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxhdGluZyBzaWduYWwgKG1mKSB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZVxuXHRcdFx0ICogIG1vZHVsYXRpbmcgc2lnbmFsIChtYSkgLS0gYXMgaW4gbWEvbWYuXG5cdFx0XHQgKlx0QHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICpcdEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5tb2R1bGF0aW9uSW5kZXgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSBtb2R1bGF0aW9uIGhhcHBlbnNcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigwKTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIHR3byB2b2ljZXMgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5tb2R1bGF0aW9uSW5kZXgsIHRoaXMuX21vZHVsYXRpb25Ob2RlKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5mYW4odGhpcy5fY2Fycmllci5kZXR1bmUsIHRoaXMuX21vZHVsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jb25uZWN0KHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZNU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDMsXG5cdCAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IDEwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMDEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uJzogeyAndHlwZSc6ICdzcXVhcmUnIH0sXG5cdCAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMCxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBcdHRyaWdnZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIG9jY3VyXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZNU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgcmVsZWFzZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GTVN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jyxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbicsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRk1TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1lbWJyYW5lU3ludGggbWFrZXMga2ljayBhbmQgdG9tIHNvdW5kcyB1c2luZyBhIHNpbmdsZSBvc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICAgd2l0aCBhbiBhbXBsaXR1ZGUgZW52ZWxvcGUgYW5kIGZyZXF1ZW5jeSByYW1wLiBBIFRvbmUuT21uaU9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgICBpcyByb3V0ZWQgdGhyb3VnaCBhIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgdG8gdGhlIG91dHB1dC4gVGhlIGRydW1cblx0XHQgKiAgICAgICAgICBxdWFsaXR5IG9mIHRoZSBzb3VuZCBjb21lcyBmcm9tIHRoZSBmcmVxdWVuY3kgZW52ZWxvcGUgYXBwbGllZFxuXHRcdCAqICAgICAgICAgIGR1cmluZyBUb25lLk1lbWJyYW5lU3ludGgudHJpZ2dlckF0dGFjayhub3RlKS4gVGhlIGZyZXF1ZW5jeSBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgIHN0YXJ0cyBhdCA8Y29kZT5ub3RlICogLm9jdGF2ZXM8L2NvZGU+IGFuZCByYW1wcyB0byA8Y29kZT5ub3RlPC9jb2RlPlxuXHRcdCAqICAgICAgICAgIG92ZXIgdGhlIGR1cmF0aW9uIG9mIDxjb2RlPi5waXRjaERlY2F5PC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5NZW1icmFuZVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkMyXCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5NZW1icmFuZVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5PbW5pT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKG9wdGlvbnMub3NjaWxsYXRvcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhlIHBpdGNoIGVudmVsb3BlIHJhbXBzLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIGZyZXF1ZW5jeSBlbnZlbG9wZSB0YWtlcy5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucGl0Y2hEZWNheSA9IG9wdGlvbnMucGl0Y2hEZWNheTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuY2hhaW4odGhpcy5lbnZlbG9wZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NZW1icmFuZVN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGl0Y2hEZWNheSc6IDAuMDUsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAxMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC40LFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAuMDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMS40LFxuXHQgICAgICAgICAgICAnYXR0YWNrQ3VydmUnOiAnZXhwb25lbnRpYWwnXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBub3RlIGF0IHRoZSBnaXZlbiB0aW1lIHdpdGggdGhlIGdpdmVuIHZlbG9jaXR5LlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgdGhlIG5vdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgdGhlIHRpbWUsIGlmIG5vdCBnaXZlbiBpcyBub3dcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdmVsb2NpdHkgZGVmYXVsdHMgdG8gMVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZW1icmFuZVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIGtpY2sudHJpZ2dlckF0dGFjayg2MCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgbm90ZSA9IHRoaXMudG9GcmVxdWVuY3kobm90ZSk7XG5cdCAgICAgICAgdmFyIG1heE5vdGUgPSBub3RlICogdGhpcy5vY3RhdmVzO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUobWF4Tm90ZSwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmZyZXF1ZW5jeS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKG5vdGUsIHRpbWUgKyB0aGlzLnRvU2Vjb25kcyh0aGlzLnBpdGNoRGVjYXkpKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBub3RlLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCByZWxlYXNlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lbWJyYW5lU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVtYnJhbmVTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1lbWJyYW5lU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBJbmhhcm1vbmljIHJhdGlvIG9mIGZyZXF1ZW5jaWVzIGJhc2VkIG9uIHRoZSBSb2xhbmQgVFItODA4XG5cdFx0ICogIFRha2VuIGZyb20gaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvcGFwZXJzL3RyLTgwOC1jeW1iYWwtcGh5c2ljYWxseS1pbmZvcm1lZC1jaXJjdWl0LWJlbmRhYmxlLWRpZ2l0YWwtbW9kZWxcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgaW5oYXJtUmF0aW9zID0gW1xuXHQgICAgICAgIDEsXG5cdCAgICAgICAgMS40ODMsXG5cdCAgICAgICAgMS45MzIsXG5cdCAgICAgICAgMi41NDYsXG5cdCAgICAgICAgMi42Myxcblx0ICAgICAgICAzLjg5N1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgaGlnaGx5IGluaGFybW9uaWMgYW5kIHNwZWN0cmFsbHkgY29tcGxleCBzb3VyY2Ugd2l0aCBhIGhpZ2hwYXNzIGZpbHRlclxuXHRcdCAqICAgICAgICAgIGFuZCBhbXBsaXR1ZGUgZW52ZWxvcGUgd2hpY2ggaXMgZ29vZCBmb3IgbWFraW5nIG1ldGFsb3Bob25lIHNvdW5kcy4gQmFzZWRcblx0XHQgKiAgICAgICAgICBvbiBDeW1iYWxTeW50aCBieSBbQHBvbHlyaHl0aG1hdGljXShodHRwczovL2dpdGh1Yi5jb20vcG9seXJoeXRobWF0aWMpLlxuXHRcdCAqICAgICAgICAgIEluc3BpcmF0aW9uIGZyb20gW1NvdW5kIG9uIFNvdW5kXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA2MTAxNDM5MjQvaHR0cHM6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvanVsMDIvYXJ0aWNsZXMvc3ludGhzZWNyZXRzMDcwMi5hc3ApLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFRoZSBvcHRpb25zIGF2YWlsYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5NZXRhbFN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBjeW1iYWxcblx0XHRcdCAqICBAdHlwZSAge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIEZNT3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgbXVsdGlwbGllcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZm9yIHRoZSBib2R5XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWUgPSBuZXcgVG9uZS5HYWluKDApLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGhpZ2hwYXNzIHRoZSBvdXRwdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2hpZ2hwYXNzID0gbmV3IFRvbmUuRmlsdGVyKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnaGlnaHBhc3MnLFxuXHQgICAgICAgICAgICAnUSc6IC0zLjAxMDI5OTk1NjYzOTgxMjVcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2FtcGxpdHVlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhlIGhpZ2hwYXNzXG5cdFx0XHQgKiAgZmlsdGVyIGZyZXF1ZW5jeSByYW1wc1xuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2NhbGUgdGhlIGJvZHkgZW52ZWxvcGVcblx0XHRcdCAqICBmb3IgdGhlIGJhbmRwYXNzXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIgPSBuZXcgVG9uZS5TY2FsZShvcHRpb25zLnJlc29uYW5jZSwgNzAwMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGVudmVsb3BlIHdoaWNoIGlzIGNvbm5lY3RlZCBib3RoIHRvIHRoZVxuXHRcdFx0ICogIGFtcGxpdHVkZSBhbmQgaGlnaHBhc3MgZmlsdGVyJ3MgY3V0b2ZmIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5FbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5FbnZlbG9wZSh7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiBvcHRpb25zLmVudmVsb3BlLmF0dGFjayxcblx0ICAgICAgICAgICAgJ2F0dGFja0N1cnZlJzogJ2xpbmVhcicsXG5cdCAgICAgICAgICAgICdkZWNheSc6IG9wdGlvbnMuZW52ZWxvcGUuZGVjYXksXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiBvcHRpb25zLmVudmVsb3BlLnJlbGVhc2Vcblx0ICAgICAgICB9KS5jaGFpbih0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLCB0aGlzLl9oaWdocGFzcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZS5nYWluKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaGFybVJhdGlvcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgb3NjID0gbmV3IFRvbmUuRk1Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgICAgICd0eXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgICAgICAgICAnbW9kdWxhdGlvblR5cGUnOiAnc3F1YXJlJyxcblx0ICAgICAgICAgICAgICAgICdoYXJtb25pY2l0eSc6IG9wdGlvbnMuaGFybW9uaWNpdHksXG5cdCAgICAgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jzogb3B0aW9ucy5tb2R1bGF0aW9uSW5kZXhcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIG9zYy5jb25uZWN0KHRoaXMuX2hpZ2hwYXNzKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0gPSBvc2M7XG5cdCAgICAgICAgICAgIHZhciBtdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoaW5oYXJtUmF0aW9zW2ldKTtcblx0ICAgICAgICAgICAgdGhpcy5fZnJlcU11bHRpcGxpZXJzW2ldID0gbXVsdDtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4obXVsdCwgb3NjLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc2V0IHRoZSBvY3RhdmVzXG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWV0YWxTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDEuNCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjJcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDUuMSxcblx0ICAgICAgICAnbW9kdWxhdGlvbkluZGV4JzogMzIsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDQwMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAxLjVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgICAgIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIFt2ZWxvY2l0eT0xXSAgVGhlIHZlbG9jaXR5IHRoYXQgdGhlIGVudmVsb3BlIHNob3VsZCBiZSB0cmlnZ2VyZWQgYXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1ldGFsU3ludGh9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZlbCA9IFRvbmUuZGVmYXVsdEFyZyh2ZWwsIDEpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWwpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzLmZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9pZiB0aGUgc3VzdGFpbiBpcyAwLCBzdG9wIHRoZSBvc2NpbGxhdG9yIGFzIHdlbGxcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzLmZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgICAgICBXaGVuIHRoZSByZWxlYXNlIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1ldGFsU3ludGh9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDApO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSBvZiB0aGUgZW52ZWxvcGUgYWZ0ZXIgdGhlIGdpdmVuXG5cdFx0ICogIGR1cmF0aW9uLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgZHVyYXRpb24gIFRoZSBkdXJhdGlvbiBiZWZvcmUgdHJpZ2dlcmluZyB0aGUgcmVsZWFzZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgICAgIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIFt2ZWxvY2l0eT0xXSAgVGhlIHZlbG9jaXR5IHRoYXQgdGhlIGVudmVsb3BlIHNob3VsZCBiZSB0cmlnZ2VyZWQgYXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1ldGFsU3ludGh9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG1vZHVsYXRpb25JbmRleCBvZiB0aGUgb3NjaWxsYXRvcnMgd2hpY2ggbWFrZSB1cCB0aGUgc291cmNlLlxuXHRcdCAqICBzZWUgVG9uZS5GTU9zY2lsbGF0b3IubW9kdWxhdGlvbkluZGV4XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk1ldGFsU3ludGgjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgIG1vZHVsYXRpb25JbmRleFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdtb2R1bGF0aW9uSW5kZXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yc1swXS5tb2R1bGF0aW9uSW5kZXgudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0ubW9kdWxhdGlvbkluZGV4LnZhbHVlID0gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGhhcm1vbmljaXR5IG9mIHRoZSBvc2NpbGxhdG9ycyB3aGljaCBtYWtlIHVwIHRoZSBzb3VyY2UuXG5cdFx0ICogIHNlZSBUb25lLkZNT3NjaWxsYXRvci5oYXJtb25pY2l0eVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lICBoYXJtb25pY2l0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdoYXJtb25pY2l0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3JzWzBdLmhhcm1vbmljaXR5LnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldLmhhcm1vbmljaXR5LnZhbHVlID0gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgaGlnaHBhc3MgZmlsdGVyIGF0dGFjaGVkIHRvIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqICBAbmFtZSAgcmVzb25hbmNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZSwgJ3Jlc29uYW5jZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWluID0gdmFsO1xuXHQgICAgICAgICAgICB0aGlzLm9jdGF2ZXMgPSB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgXCJyZXNvbmFuY2VcIiBmcmVxdWVuY3lcblx0XHQgKiAgdGhhdCB0aGUgZmlsdGVyIHJhbXBzIGR1cmluZyB0aGUgYXR0YWNrL2RlY2F5IGVudmVsb3BlXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk1ldGFsU3ludGgjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lICBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0cykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0cztcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5tYXggPSB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1pbiAqIE1hdGgucG93KDIsIG9jdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1ldGFsU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZnJlcU11bHRpcGxpZXJzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2hpZ2hwYXNzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9oaWdocGFzcyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWV0YWxTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk5vaXNlU3ludGggaXMgY29tcG9zZWQgb2YgYSBub2lzZSBnZW5lcmF0b3IgKFRvbmUuTm9pc2UpLCBvbmUgZmlsdGVyIChUb25lLkZpbHRlciksXG5cdFx0ICogICAgICAgICAgYW5kIHR3byBlbnZlbG9wZXMgKFRvbmUuRW52ZWxvcCkuIE9uZSBlbnZlbG9wZSBjb250cm9scyB0aGUgYW1wbGl0dWRlXG5cdFx0ICogICAgICAgICAgb2YgdGhlIG5vaXNlIGFuZCB0aGUgb3RoZXIgaXMgY29udHJvbHMgdGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlci5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMXJxenVYOXJCbGhUNTBNUnZEMlRLbWw5Ym5aaGNabXpYRjFyZl9vN3ZkbkUvcHViP3c9OTE4Jmg9MjQyXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgbm9pc2VTeW50aCA9IG5ldyBUb25lLk5vaXNlU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIG5vaXNlU3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk5vaXNlU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBub2lzZSBzb3VyY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTm9pc2V9XG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIG5vaXNlU3ludGguc2V0KFwibm9pc2UudHlwZVwiLCBcImJyb3duXCIpO1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5ub2lzZSA9IG5ldyBUb25lLk5vaXNlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIG5vaXNlIHRvIHRoZSBvdXRwdXRcblx0ICAgICAgICB0aGlzLm5vaXNlLmNoYWluKHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdub2lzZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5vaXNlU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbm9pc2UnOiB7ICd0eXBlJzogJ3doaXRlJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDA1LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMFxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXMuIFVubGlrZSBvdGhlclxuXHRcdCAqICBpbnN0cnVtZW50cywgVG9uZS5Ob2lzZVN5bnRoIGRvZXNuJ3QgaGF2ZSBhIG5vdGUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogbm9pc2VTeW50aC50cmlnZ2VyQXR0YWNrKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIG5vaXNlXG5cdCAgICAgICAgdGhpcy5ub2lzZS5zdGFydCh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMubm9pc2Uuc3RvcCh0aW1lID0gdGhpcy5lbnZlbG9wZS5hdHRhY2sgKyB0aGlzLmVudmVsb3BlLmRlY2F5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3Blcy5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMubm9pc2Uuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDApO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgdGhlbiB0aGUgcmVsZWFzZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZHVyYXRpb24gdGhlIGR1cmF0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIHRoZSB0aW1lIG9mIHRoZSBhdHRhY2tcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAoZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSh0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ25vaXNlJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubm9pc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubm9pc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk5vaXNlU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBLYXJwbHVzLVN0cmluZyBzdHJpbmcgc3ludGhlc2lzLiBPZnRlbiBvdXQgb2YgdHVuZS5cblx0XHQgKiAgICAgICAgIFdpbGwgY2hhbmdlIHdoZW4gdGhlIEF1ZGlvV29ya2VyTm9kZSBpcyBhdmFpbGFibGUgYWNyb3NzXG5cdFx0ICogICAgICAgICBicm93c2Vycy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBzZWUgdGhlIGRlZmF1bHRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBsdWNreSA9IG5ldyBUb25lLlBsdWNrU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHBsdWNreS50cmlnZ2VyQXR0YWNrKFwiQzRcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5QbHVja1N5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Ob2lzZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbm9pc2UgPSBuZXcgVG9uZS5Ob2lzZSgncGluaycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2Ygbm9pc2UgYXQgdGhlIGF0dGFjay5cblx0XHRcdCAqICBOb21pbmFsIHJhbmdlIG9mIFswLjEsIDIwXVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFja05vaXNlID0gb3B0aW9ucy5hdHRhY2tOb2lzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgTEZDRlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxvd3Bhc3NDb21iRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZmNmID0gbmV3IFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIoe1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJzogb3B0aW9ucy5yZXNvbmFuY2UsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnOiBvcHRpb25zLmRhbXBlbmluZ1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByZXNvbmFuY2UgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSB0aGlzLl9sZmNmLnJlc29uYW5jZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGFtcGVuaW5nIGNvbnRyb2wuIGkuZS4gdGhlIGxvd3Bhc3MgZmlsdGVyIGZyZXF1ZW5jeSBvZiB0aGUgY29tYiBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gdGhpcy5fbGZjZi5kYW1wZW5pbmc7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX25vaXNlLmNvbm5lY3QodGhpcy5fbGZjZik7XG5cdCAgICAgICAgdGhpcy5fbGZjZi5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGx1Y2tTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2tOb2lzZSc6IDEsXG5cdCAgICAgICAgJ2RhbXBlbmluZyc6IDQwMDAsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDAuN1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gbm90ZSBUaGUgbm90ZSB0byB0cmlnZ2VyLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgbm90ZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbHVja1N5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSkge1xuXHQgICAgICAgIG5vdGUgPSB0aGlzLnRvRnJlcXVlbmN5KG5vdGUpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgZGVsYXlBbW91bnQgPSAxIC8gbm90ZTtcblx0ICAgICAgICB0aGlzLl9sZmNmLmRlbGF5VGltZS5zZXRWYWx1ZUF0VGltZShkZWxheUFtb3VudCwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2Uuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2Uuc3RvcCh0aW1lICsgZGVsYXlBbW91bnQgKiB0aGlzLmF0dGFja05vaXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsdWNrU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGx1Y2tTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ub2lzZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZjZi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmY2YgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QbHVja1N5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUG9seVN5bnRoIGhhbmRsZXMgdm9pY2UgY3JlYXRpb24gYW5kIGFsbG9jYXRpb24gZm9yIGFueVxuXHRcdCAqICAgICAgICAgIGluc3RydW1lbnRzIHBhc3NlZCBpbiBhcyB0aGUgc2Vjb25kIHBhcmFtdGVyLiBQb2x5U3ludGggaXNcblx0XHQgKiAgICAgICAgICBub3QgYSBzeW50aGVzaXplciBieSBpdHNlbGYsIGl0IG1lcmVseSBtYW5hZ2VzIHZvaWNlcyBvZlxuXHRcdCAqICAgICAgICAgIG9uZSBvZiB0aGUgb3RoZXIgdHlwZXMgb2Ygc3ludGhzLCBhbGxvd2luZyBhbnkgb2YgdGhlXG5cdFx0ICogICAgICAgICAgbW9ub3Bob25pYyBzeW50aGVzaXplcnMgdG8gYmUgcG9seXBob25pYy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ8T2JqZWN0fSBbcG9seXBob255PTRdIFRoZSBudW1iZXIgb2Ygdm9pY2VzIHRvIGNyZWF0ZVxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufSBbdm9pY2U9VG9uZS5TeW50aF0gVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSB2b2ljZXNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBUb25lLlN5bnRoIGJ5IGRlZmF1bHQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHBvbHlzeW50aCBjb21wb3NlZCBvZiA2IFZvaWNlcyBvZiBTeW50aFxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLlBvbHlTeW50aCg2LCBUb25lLlN5bnRoKS50b01hc3RlcigpO1xuXHRcdCAqIC8vc2V0IHRoZSBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBzZXQgaW50ZXJmYWNlXG5cdFx0ICogc3ludGguc2V0KFwiZGV0dW5lXCIsIC0xMjAwKTtcblx0XHQgKiAvL3BsYXkgYSBjaG9yZFxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkM0XCIsIFwiRTRcIiwgXCJBNFwiXSwgXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3BvbHlwaG9ueScsXG5cdCAgICAgICAgICAgICd2b2ljZSdcblx0ICAgICAgICBdLCBUb25lLlBvbHlTeW50aCk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkluc3RydW1lbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8vbWF4IHBvbHlwaG9ueVxuXHQgICAgICAgIG9wdGlvbnMucG9seXBob255ID0gTWF0aC5taW4oVG9uZS5Qb2x5U3ludGguTUFYX1BPTFlQSE9OWSwgb3B0aW9ucy5wb2x5cGhvbnkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhcnJheSBvZiB2b2ljZXNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvaWNlcyA9IG5ldyBBcnJheShvcHRpb25zLnBvbHlwaG9ueSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHF1ZXVlIG9mIHZvaWNlcyB3aXRoIGRhdGEgYWJvdXQgbGFzdCB0cmlnZ2VyXG5cdFx0XHQgKiAgYW5kIHRoZSB0cmlnZ2VyZWQgbm90ZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlcnMgPSBuZXcgQXJyYXkob3B0aW9ucy5wb2x5cGhvbnkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHNcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2RldHVuZScpO1xuXHQgICAgICAgIC8vY3JlYXRlIHRoZSB2b2ljZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMucG9seXBob255OyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHYgPSBuZXcgb3B0aW9ucy52b2ljZShhcmd1bWVudHNbMl0sIGFyZ3VtZW50c1szXSk7XG5cdCAgICAgICAgICAgIGlmICghKHYgaW5zdGFuY2VvZiBUb25lLk1vbm9waG9uaWMpKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5bnRoIGNvbnN0cnVjdG9yIG11c3QgYmUgaW5zdGFuY2Ugb2YgVG9uZS5Nb25vcGhvbmljJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy52b2ljZXNbaV0gPSB2O1xuXHQgICAgICAgICAgICB2LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICBpZiAodi5oYXNPd25Qcm9wZXJ0eSgnZGV0dW5lJykpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3Qodi5kZXR1bmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJzW2ldID0ge1xuXHQgICAgICAgICAgICAgICAgcmVsZWFzZTogLTEsXG5cdCAgICAgICAgICAgICAgICBub3RlOiBudWxsLFxuXHQgICAgICAgICAgICAgICAgdm9pY2U6IHZcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Qb2x5U3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncG9seXBob255JzogNCxcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAndm9pY2UnOiBUb25lLlN5bnRoXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeXxBcnJheX0gbm90ZXMgVGhlIG5vdGVzIHRvIHBsYXkuIEFjY2VwdHMgYSBzaW5nbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVxdWVuY3kgb3IgYW4gYXJyYXkgb2YgZnJlcXVlbmNpZXMuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gIFRoZSBzdGFydCB0aW1lIG9mIHRoZSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIGEgY2hvcmQgaW1tZWRpYXRlbHkgd2l0aCBhIHZlbG9jaXR5IG9mIDAuMlxuXHRcdCAqIHBvbHkudHJpZ2dlckF0dGFjayhbXCJBYjNcIiwgXCJDNFwiLCBcIkY1XCJdLCB1bmRlZmluZWQsIDAuMik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlcywgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobm90ZXMpKSB7XG5cdCAgICAgICAgICAgIG5vdGVzID0gW25vdGVzXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IG5vdGVzW2ldO1xuXHQgICAgICAgICAgICAvL3RyaWdnZXIgdGhlIG9sZGVzdCB2b2ljZVxuXHQgICAgICAgICAgICB2YXIgb2xkZXN0ID0gdGhpcy5fdHJpZ2dlcnNbMF07XG5cdCAgICAgICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgdGhpcy5fdHJpZ2dlcnMubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl90cmlnZ2Vyc1tqXS5yZWxlYXNlIDwgb2xkZXN0LnJlbGVhc2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbGRlc3QgPSB0aGlzLl90cmlnZ2Vyc1tqXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBvbGRlc3QucmVsZWFzZSA9IEluZmluaXR5O1xuXHQgICAgICAgICAgICBvbGRlc3Qubm90ZSA9IEpTT04uc3RyaW5naWZ5KHZhbCk7XG5cdCAgICAgICAgICAgIG9sZGVzdC52b2ljZS50cmlnZ2VyQXR0YWNrKHZhbCwgdGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIGFmdGVyIHRoZSBzcGVjaWZpZWQgZHVyYXRpb25cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l8QXJyYXl9IG5vdGVzIFRoZSBub3RlcyB0byBwbGF5LiBBY2NlcHRzIGEgc2luZ2xlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlcXVlbmN5IG9yIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiB0aGUgZHVyYXRpb24gb2YgdGhlIG5vdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgaWYgbm8gdGltZSBpcyBnaXZlbiwgZGVmYXVsdHMgdG8gbm93XG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgYXR0YWNrICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciBhIGNob3JkIGZvciBhIGR1cmF0aW9uIG9mIGEgaGFsZiBub3RlXG5cdFx0ICogcG9seS50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJFYjNcIiwgXCJHNFwiLCBcIkM1XCJdLCBcIjJuXCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIHBhc3MgaW4gYW4gYXJyYXkgb2YgZHVyYXRpb25zIGFzIHdlbGxcblx0XHQgKiBwb2x5LnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkViM1wiLCBcIkc0XCIsIFwiQzVcIl0sIFtcIjJuXCIsIFwiNG5cIiwgXCI0blwiXSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAobm90ZXMsIGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sobm90ZXMsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KGR1cmF0aW9uKSAmJiBUb25lLmlzQXJyYXkobm90ZXMpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkID0gZHVyYXRpb25bTWF0aC5taW4oaSwgZHVyYXRpb24ubGVuZ3RoIC0gMSldO1xuXHQgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZShub3Rlc1tpXSwgdGltZSArIHRoaXMudG9TZWNvbmRzKGQpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2Uobm90ZXMsIHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBvZiB0aGUgbm90ZS4gVW5saWtlIG1vbm9waG9uaWMgaW5zdHJ1bWVudHMsXG5cdFx0ICogIGEgbm90ZSAob3IgYXJyYXkgb2Ygbm90ZXMpIG5lZWRzIHRvIGJlIHBhc3NlZCBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeXxBcnJheX0gbm90ZXMgVGhlIG5vdGVzIHRvIHBsYXkuIEFjY2VwdHMgYSBzaW5nbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVxdWVuY3kgb3IgYW4gYXJyYXkgb2YgZnJlcXVlbmNpZXMuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gIFdoZW4gdGhlIHJlbGVhc2Ugd2lsbCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHBvbHkudHJpZ2dlclJlbGVhc2UoW1wiQWIzXCIsIFwiQzRcIiwgXCJGNVwiXSwgXCIrMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAobm90ZXMsIHRpbWUpIHtcblx0ICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobm90ZXMpKSB7XG5cdCAgICAgICAgICAgIG5vdGVzID0gW25vdGVzXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIHZvaWNlXG5cdCAgICAgICAgICAgIHZhciBzdHJpbmdpZmllZCA9IEpTT04uc3RyaW5naWZ5KG5vdGVzW2ldKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgdiA9IDA7IHYgPCB0aGlzLl90cmlnZ2Vycy5sZW5ndGg7IHYrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSB0aGlzLl90cmlnZ2Vyc1t2XTtcblx0ICAgICAgICAgICAgICAgIGlmIChkZXNjLm5vdGUgPT09IHN0cmluZ2lmaWVkICYmIGRlc2MucmVsZWFzZSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBkZXNjLnZvaWNlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIGRlc2MucmVsZWFzZSA9IHRpbWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCBhIG1lbWJlci9hdHRyaWJ1dGUgb2YgdGhlIHZvaWNlcy5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R8c3RyaW5nfSBwYXJhbXNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByYW1wVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwb2x5LnNldCh7XG5cdFx0ICogXHRcImZpbHRlclwiIDoge1xuXHRcdCAqIFx0XHRcInR5cGVcIiA6IFwiaGlnaHBhc3NcIlxuXHRcdCAqIFx0fSxcblx0XHQgKiBcdFwiZW52ZWxvcGVcIiA6IHtcblx0XHQgKiBcdFx0XCJhdHRhY2tcIiA6IDAuMjVcblx0XHQgKiBcdH1cblx0XHQgKiB9KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocGFyYW1zLCB2YWx1ZSwgcmFtcFRpbWUpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudm9pY2VzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldLnNldChwYXJhbXMsIHZhbHVlLCByYW1wVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHN5bnRoJ3MgYXR0cmlidXRlcy4gR2l2ZW4gbm8gYXJndW1lbnRzIGdldFxuXHRcdCAqICB3aWxsIHJldHVybiBhbGwgYXZhaWxhYmxlIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nXG5cdFx0ICogIHZhbHVlcy4gUGFzcyBpbiBhIHNpbmdsZSBhdHRyaWJ1dGUgdG8gcmV0cmlldmUgb3IgYW4gYXJyYXlcblx0XHQgKiAgb2YgYXR0cmlidXRlcy4gVGhlIGF0dHJpYnV0ZSBzdHJpbmdzIGNhbiBhbHNvIGluY2x1ZGUgYSBcIi5cIlxuXHRcdCAqICB0byBhY2Nlc3MgZGVlcGVyIHByb3BlcnRpZXMuXG5cdFx0ICogIEBwYXJhbSB7QXJyYXk9fSBwYXJhbXMgdGhlIHBhcmFtZXRlcnMgdG8gZ2V0LCBvdGhlcndpc2Ugd2lsbCByZXR1cm5cblx0XHQgKiAgXHRcdFx0XHRcdCAgIGFsbCBhdmFpbGFibGUuXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZvaWNlc1swXS5nZXQocGFyYW1zKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIGFsbCB0aGUgY3VycmVudGx5IGFjdGl2ZSB2b2ljZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBub3RlcyBzaG91bGQgYmUgcmVsZWFzZWQuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUucmVsZWFzZUFsbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdHJpZ2dlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGRlc2MgPSB0aGlzLl90cmlnZ2Vyc1tpXTtcblx0ICAgICAgICAgICAgaWYgKGRlc2MucmVsZWFzZSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGRlc2MucmVsZWFzZSA9IHRpbWU7XG5cdCAgICAgICAgICAgICAgICBkZXNjLnZvaWNlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudm9pY2VzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy52b2ljZXNbaV0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZGV0dW5lJyk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvaWNlcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlcnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbWF4aW11bSBudW1iZXIgb2Ygbm90ZXMgdGhhdCBjYW4gYmUgYWxsb2NhdGVkXG5cdFx0ICogIHRvIGEgcG9seXN5bnRoLlxuXHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGguTUFYX1BPTFlQSE9OWSA9IDIwO1xuXHQgICAgcmV0dXJuIFRvbmUuUG9seVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgQXV0b21hdGljYWxseSBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIHNldCBvZiBwaXRjaGVkIHNhbXBsZXMuIFBhc3MgaW4gYW4gb2JqZWN0IHdoaWNoIG1hcHMgdGhlIG5vdGUncyBwaXRjaCBvciBtaWRpIHZhbHVlIHRvIHRoZSB1cmwsIHRoZW4geW91IGNhbiB0cmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2Ugb2YgdGhhdCBub3RlIGxpa2Ugb3RoZXIgaW5zdHJ1bWVudHMuIEJ5IGF1dG9tYXRpY2FsbHkgcmVwaXRjaGluZyB0aGUgc2FtcGxlcywgaXQgaXMgcG9zc2libGUgdG8gcGxheSBwaXRjaGVzIHdoaWNoIHdlcmUgbm90IGV4cGxpY2l0bHkgaW5jbHVkZWQgd2hpY2ggY2FuIHNhdmUgbG9hZGluZyB0aW1lLlxuXHRcdCAqICAgICAgICBGb3Igc2FtcGxlIG9yIGJ1ZmZlciBwbGF5YmFjayB3aGVyZSByZXBpdGNoaW5nIGlzIG5vdCBuZWNlc3NhcnksIHVzZSBbVG9uZS5QbGF5ZXJdKGh0dHBzOi8vdG9uZWpzLmdpdGh1Yi5pby9kb2NzL1BsYXllcikuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNhbXBsZXMgQW4gb2JqZWN0IG9mIHNhbXBsZXMgbWFwcGluZyBlaXRoZXIgTWlkaVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgTnVtYmVycyBvciBTY2llbnRpZmljIFBpdGNoIE5vdGF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHVybCBvZiB0aGF0IHNhbXBsZS5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhbGwgb2YgdGhlIHNhbXBsZXMgYXJlIGxvYWRlZC5cblx0XHQgKiBAcGFyYW0ge1N0cmluZz19IGJhc2VVcmwgVGhlIHJvb3QgVVJMIG9mIGFsbCBvZiB0aGUgc2FtcGxlcywgd2hpY2ggaXMgcHJlcGVuZGVkIHRvIGFsbCB0aGUgVVJMcy5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBzYW1wbGVyID0gbmV3IFRvbmUuU2FtcGxlcih7XG5cdFx0ICogXHRcIkMzXCIgOiBcInBhdGgvdG8vQzMubXAzXCIsXG5cdFx0ICogXHRcIkQjM1wiIDogXCJwYXRoL3RvL0RzaGFycDMubXAzXCIsXG5cdFx0ICogXHRcIkYjM1wiIDogXCJwYXRoL3RvL0ZzaGFycDMubXAzXCIsXG5cdFx0ICogXHRcIkEzXCIgOiBcInBhdGgvdG8vQTMubXAzXCIsXG5cdFx0ICogfSwgZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vc2FtcGxlciB3aWxsIHJlcGl0Y2ggdGhlIGNsb3Nlc3Qgc2FtcGxlXG5cdFx0ICogXHRzYW1wbGVyLnRyaWdnZXJBdHRhY2soXCJEM1wiKVxuXHRcdCAqIH0pXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlciA9IGZ1bmN0aW9uICh1cmxzKSB7XG5cdCAgICAgICAgLy8gc2hpZnQgYXJndW1lbnRzIG92ZXIgb25lLiBUaG9zZSBhcmUgdGhlIHJlbWFpbmRlciBvZiB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3MsIFtcblx0ICAgICAgICAgICAgJ29ubG9hZCcsXG5cdCAgICAgICAgICAgICdiYXNlVXJsJ1xuXHQgICAgICAgIF0sIFRvbmUuU2FtcGxlcik7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgdmFyIHVybE1hcCA9IHt9O1xuXHQgICAgICAgIGZvciAodmFyIG5vdGUgaW4gdXJscykge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc05vdGUobm90ZSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vY29udmVydCB0aGUgbm90ZSBuYW1lIHRvIE1JRElcblx0ICAgICAgICAgICAgICAgIHZhciBtaWQgPSBUb25lLkZyZXF1ZW5jeShub3RlKS50b01pZGkoKTtcblx0ICAgICAgICAgICAgICAgIHVybE1hcFttaWRdID0gdXJsc1tub3RlXTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICghaXNOYU4ocGFyc2VGbG9hdChub3RlKSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGlmIGl0J3MgbnVtYmVycyBhc3N1bWUgaXQncyBtaWRpXG5cdCAgICAgICAgICAgICAgICB1cmxNYXBbbm90ZV0gPSB1cmxzW25vdGVdO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlNhbXBsZXI6IHVybCBrZXlzIG11c3QgYmUgdGhlIG5vdGVcXCdzIHBpdGNoJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgc3RvcmVkIGFuZCBsb2FkZWQgYnVmZmVyc1xuXHRcdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyc31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0gbmV3IFRvbmUuQnVmZmVycyh1cmxNYXAsIG9wdGlvbnMub25sb2FkLCBvcHRpb25zLmJhc2VVcmwpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG9iamVjdCBvZiBhbGwgY3VycmVudGx5IHBsYXlpbmcgQnVmZmVyU291cmNlc1xuXHRcdFx0ICogQHR5cGUge09iamVjdH1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0ge307XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZW52ZWxvcGUgYXBwbGllZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGUuXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXR0YWNrID0gb3B0aW9ucy5hdHRhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZW52ZWxvcGUgYXBwbGllZCB0byB0aGUgZW5kIG9mIHRoZSBlbnZlbG9wZS5cblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gb3B0aW9ucy5yZWxlYXNlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2FtcGxlciwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEBjb25zdFxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgYXR0YWNrOiAwLFxuXHQgICAgICAgIHJlbGVhc2U6IDAuMSxcblx0ICAgICAgICBvbmxvYWQ6IFRvbmUubm9PcCxcblx0ICAgICAgICBiYXNlVXJsOiAnJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2UgaW4gc3RlcHMgYmV0d2VlbiB0aGUgZ2l2ZW4gbWlkaSBub3RlIGF0IHRoZSBjbG9zZXRzIHNhbXBsZS5cblx0XHQgKiBAcGFyYW0gIHtNaWRpfSBtaWRpXG5cdFx0ICogQHJldHVybiB7SW50ZXJ2YWx9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUuX2ZpbmRDbG9zZXN0ID0gZnVuY3Rpb24gKG1pZGkpIHtcblx0ICAgICAgICAvL3NlYXJjaGVzIHdpdGhpbiA4IG9jdGF2ZXMgb2YgdGhlIGdpdmVuIG1pZGkgbm90ZVxuXHQgICAgICAgIHZhciBNQVhfSU5URVJWQUwgPSA5Njtcblx0ICAgICAgICB2YXIgaW50ZXJ2YWwgPSAwO1xuXHQgICAgICAgIHdoaWxlIChpbnRlcnZhbCA8IE1BWF9JTlRFUlZBTCkge1xuXHQgICAgICAgICAgICAvLyBjaGVjayBhYm92ZSBhbmQgYmVsb3dcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcnMuaGFzKG1pZGkgKyBpbnRlcnZhbCkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAtaW50ZXJ2YWw7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYnVmZmVycy5oYXMobWlkaSAtIGludGVydmFsKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGludGVydmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGludGVydmFsKys7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gcGxheVxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBXaGVuIHRvIHBsYXkgdGhlIG5vdGVcblx0XHQgKiBAcGFyYW0gIHtOb3JtYWxSYW5nZT19IHZlbG9jaXR5IFRoZSB2ZWxvY2l0eSB0byBwbGF5IHRoZSBzYW1wbGUgYmFjay5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9ICAgICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHZhciBtaWRpID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgLy8gZmluZCB0aGUgY2xvc2VzdCBub3RlIHBpdGNoXG5cdCAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSB0aGlzLl9maW5kQ2xvc2VzdChtaWRpKTtcblx0ICAgICAgICBpZiAoZGlmZmVyZW5jZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvc2VzdE5vdGUgPSBtaWRpIC0gZGlmZmVyZW5jZTtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuX2J1ZmZlcnMuZ2V0KGNsb3Nlc3ROb3RlKTtcblx0ICAgICAgICAgICAgLy8gcGxheSB0aGF0IG5vdGVcblx0ICAgICAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBUb25lLkJ1ZmZlclNvdXJjZSh7XG5cdCAgICAgICAgICAgICAgICAnYnVmZmVyJzogYnVmZmVyLFxuXHQgICAgICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGRpZmZlcmVuY2UpLFxuXHQgICAgICAgICAgICAgICAgJ2ZhZGVJbic6IHRoaXMuYXR0YWNrLFxuXHQgICAgICAgICAgICAgICAgJ2ZhZGVPdXQnOiB0aGlzLnJlbGVhc2UsXG5cdCAgICAgICAgICAgICAgICAnY3VydmUnOiAnZXhwb25lbnRpYWwnXG5cdCAgICAgICAgICAgIH0pLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RhcnQodGltZSwgMCwgYnVmZmVyLmR1cmF0aW9uLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgYWN0aXZlIHNvdXJjZXNcblx0ICAgICAgICAgICAgaWYgKCFUb25lLmlzQXJyYXkodGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0gPSBbXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLnB1c2goe1xuXHQgICAgICAgICAgICAgICAgbm90ZTogbWlkaSxcblx0ICAgICAgICAgICAgICAgIHNvdXJjZTogc291cmNlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHJlbGVhc2UuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFx0V2hlbiB0byByZWxlYXNlIHRoZSBub3RlLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn1cdHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAobm90ZSwgdGltZSkge1xuXHQgICAgICAgIHZhciBtaWRpID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgLy8gZmluZCB0aGUgbm90ZVxuXHQgICAgICAgIGlmICh0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldICYmIHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0ubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLnNoaWZ0KCkuc291cmNlO1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUgKyB0aGlzLnJlbGVhc2UsIHRoaXMucmVsZWFzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlbGVhc2UgYWxsIGN1cnJlbnRseSBhY3RpdmUgbm90ZXMuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFx0V2hlbiB0byByZWxlYXNlIHRoZSBub3Rlcy5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9XHR0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnJlbGVhc2VBbGwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBub3RlIGluIHRoaXMuX2FjdGl2ZVNvdXJjZXMpIHtcblx0ICAgICAgICAgICAgdmFyIHNvdXJjZXMgPSB0aGlzLl9hY3RpdmVTb3VyY2VzW25vdGVdO1xuXHQgICAgICAgICAgICB3aGlsZSAoc291cmNlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzLnNoaWZ0KCkuc291cmNlO1xuXHQgICAgICAgICAgICAgICAgc291cmNlLnN0b3AodGltZSArIHRoaXMucmVsZWFzZSwgdGhpcy5yZWxlYXNlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlIHRoZSBhdHRhY2sgcGhhc2UsIHRoZW4gYWZ0ZXIgdGhlIGR1cmF0aW9uLCBpbnZva2UgdGhlIHJlbGVhc2UuXG5cdFx0ICogQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byBwbGF5XG5cdFx0ICogQHBhcmFtICB7VGltZX0gZHVyYXRpb24gVGhlIHRpbWUgdGhlIG5vdGUgc2hvdWxkIGJlIGhlbGRcblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSAgICAgV2hlbiB0byBzdGFydCB0aGUgYXR0YWNrXG5cdFx0ICogQHBhcmFtICB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIGF0dGFja1xuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn0gICAgICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlLCBkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKG5vdGUsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKG5vdGUsIHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIG5vdGUgdG8gdGhlIHNhbXBsZXIuXG5cdFx0ICogIEBwYXJhbSAge05vdGV8TWlkaX0gICBub3RlICAgICAgVGhlIGJ1ZmZlcidzIHBpdGNoLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8VG9uZS5CdWZmZXJ8QXVkaW9idWZmZXJ9ICB1cmwgIEVpdGhlciB0aGUgdXJsIG9mIHRoZSBidWZlcixcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGFkZGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChub3RlLCB1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOb3RlKG5vdGUpKSB7XG5cdCAgICAgICAgICAgIC8vY29udmVydCB0aGUgbm90ZSBuYW1lIHRvIE1JRElcblx0ICAgICAgICAgICAgdmFyIG1pZCA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzLmFkZChtaWQsIHVybCwgY2FsbGJhY2spO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKHBhcnNlRmxvYXQobm90ZSkpKSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGlmIGl0J3MgbnVtYmVycyBhc3N1bWUgaXQncyBtaWRpXG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnMuYWRkKG5vdGUsIHVybCwgY2FsbGJhY2spO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5TYW1wbGVyOiBub3RlIG11c3QgYmUgdGhlIG5vdGVcXCdzIHBpdGNoLiBJbnN0ZWFkIGdvdCAnICsgbm90ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2FtcGxlciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNhbXBsZXIucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVycy5sb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIG1pZGkgaW4gdGhpcy5fYWN0aXZlU291cmNlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5zb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2FtcGxlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCFPc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0UGVyaW9kaWNXYXZlKSB7XG5cdCAgICAgICAgICAgIE9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zZXRQZXJpb2RpY1dhdmUgPSBPc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0V2F2ZVRhYmxlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlUGVyaW9kaWNXYXZlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlUGVyaW9kaWNXYXZlID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVXYXZlVGFibGU7XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTWFwcyBhIE5vcm1hbFJhbmdlIFswLCAxXSB0byBhbiBBdWRpb1JhbmdlIFstMSwgMV0uIFxuXHRcdCAqICAgICAgICAgU2VlIGFsc28gVG9uZS5BdWRpb1RvR2Fpbi4gXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGcyYSA9IG5ldyBUb25lLkdhaW5Ub0F1ZGlvKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW5Ub0F1ZGlvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHgpICogMiAtIDE7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HYWluVG9BdWRpbywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HYWluVG9BdWRpb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluVG9BdWRpby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ub3JtLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ub3JtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HYWluVG9BdWRpbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE5vcm1hbGl6ZSB0YWtlcyBhbiBpbnB1dCBtaW4gYW5kIG1heCBhbmQgbWFwcyBpdCBsaW5lYXJseSB0byBOb3JtYWxSYW5nZSBbMCwxXVxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gaW5wdXRNaW4gdGhlIG1pbiBpbnB1dCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gaW5wdXRNYXggdGhlIG1heCBpbnB1dCB2YWx1ZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBub3JtID0gbmV3IFRvbmUuTm9ybWFsaXplKDIsIDQpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMykuY29ubmVjdChub3JtKTtcblx0XHQgKiAvL291dHB1dCBvZiBub3JtIGlzIDAuNS4gXG5cdFx0ICovXG5cdCAgICBUb25lLk5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChpbnB1dE1pbiwgaW5wdXRNYXgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWluIGlucHV0IHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5wdXRNaW4gPSBUb25lLmRlZmF1bHRBcmcoaW5wdXRNaW4sIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtYXggaW5wdXQgdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnB1dE1heCA9IFRvbmUuZGVmYXVsdEFyZyhpbnB1dE1heCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3VidHJhY3QgdGhlIG1pbiBmcm9tIHRoZSBpbnB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ViID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLkFkZCgwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBkaXZpZGUgYnkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgaW5wdXQgYW5kIG91dHB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kaXYgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk11bHRpcGx5KDEpO1xuXHQgICAgICAgIHRoaXMuX3N1Yi5jb25uZWN0KHRoaXMuX2Rpdik7XG5cdCAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5vcm1hbGl6ZSwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIHZhbHVlIHRoZSBpbnB1dCBzaWduYWwgd2lsbCByZWFjaC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Ob3JtYWxpemUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dE1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9pbnB1dE1pbiA9IG1pbjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIHZhbHVlIHRoZSBpbnB1dCBzaWduYWwgd2lsbCByZWFjaC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Ob3JtYWxpemUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dE1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9pbnB1dE1heCA9IG1heDtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXQgdGhlIHZhbHVlc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLl9zZXRSYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zdWIudmFsdWUgPSAtdGhpcy5faW5wdXRNaW47XG5cdCAgICAgICAgdGhpcy5fZGl2LnZhbHVlID0gMSAvICh0aGlzLl9pbnB1dE1heCAtIHRoaXMuX2lucHV0TWluKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9ybWFsaXplfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdWIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGl2LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kaXYgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk5vcm1hbGl6ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwgZXh0ZW5kcyBUb25lLlNpZ25hbCwgYnV0IGFkZHMgdGhlIGFiaWxpdHkgdG8gc3luY2hyb25pemUgdGhlIHNpZ25hbCB0byB0aGUgc2lnbmFsIHRvIHRoZSBUb25lLlRyYW5zcG9ydFxuXHRcdCAqIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSByZWFsIHNpZ25hbCBvdXRwdXRcblx0XHRcdCAqIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IHRoaXMuX291dHB1dFNpZyA9IG5ldyBUb25lLlNpZ25hbCh0aGlzLl9pbml0aWFsVmFsdWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogS2VlcCB0cmFjayBvZiB0aGUgbGFzdCB2YWx1ZS4gKHNtYWxsIG9wdGltaXphdGlvbilcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGFzdFZhbCA9IHRoaXMudmFsdWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZXZlbnQgaWQgb2YgdGhlIHRpY2sgdXBkYXRlIGxvb3Bcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQodGhpcy5fb25UaWNrLmJpbmQodGhpcyksICcxaScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogQSBib3VuZCB2ZXJzaW9uIG9mIHRoZSBhbmNob3IgdmFsdWUgbWV0aG9kc1xuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JpbmRBbmNob3JWYWx1ZSA9IHRoaXMuX2FuY2hvclZhbHVlLmJpbmQodGhpcyk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub24oJ3N0YXJ0IHN0b3AgcGF1c2UnLCB0aGlzLl9iaW5kQW5jaG9yVmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5tZW1vcnkgPSBJbmZpbml0eTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiBDYWxsYmFjayB3aGljaCBpcyBpbnZva2VkIGV2ZXJ5IHRpY2suXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLl9vblRpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB2YWwgPSB0aGlzLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnNlY29uZHMpO1xuXHQgICAgICAgIGlmICh0aGlzLl9sYXN0VmFsICE9PSB2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGFzdFZhbCA9IHZhbDtcblx0ICAgICAgICAgICAgLy9hcHByb3hpbWF0ZSByYW1wIGN1cnZlcyB3aXRoIGxpbmVhciByYW1wc1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXRTaWcubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQW5jaG9yIHRoZSB2YWx1ZSBhdCB0aGUgc3RhcnQgYW5kIHN0b3Agb2YgdGhlIFRyYW5zcG9ydFxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgIHRoaXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuX2FuY2hvclZhbHVlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICB0aGlzLl9sYXN0VmFsID0gdmFsO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZy5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3V0cHV0U2lnLnNldFZhbHVlQXRUaW1lKHZhbCwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBUaGlzIHdpbGxcblx0XHQgKiAgcmV0dXJuIHRoZSB1bmNvbnZlcnRlZCAocmF3KSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gIHRpbWUgIFRoZSB0aW1lIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBUaGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFNldCB0aGUgb3V0cHV0IG9mIHRoZSBzaWduYWwgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGFuZ2UgdG8gYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSB0aW1lICBUaGUgdGltZSB0byBjaGFuZ2UgdGhlIHNpZ25hbFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTGluZWFyIHJhbXAgdG8gdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwb2ludCB0byB0aGUgZ2l2ZW4gdmFsdWVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGFuZ2UgdG8gYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSB0aW1lICBUaGUgdGltZSB0byBjaGFuZ2UgdGhlIHNpZ25hbFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRXhwb25lbnRpYWwgcmFtcCB0byB0aGUgZ2l2ZW4gdmFsdWUgZnJvbSB0aGUgcHJldmlvdXMgc2NoZWR1bGVkIHBvaW50IHRvIHRoZSBnaXZlbiB2YWx1ZVxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoYW5nZSB0byBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9IHRpbWUgIFRoZSB0aW1lIHRvIGNoYW5nZSB0aGUgc2lnbmFsXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoXG5cdFx0ICogIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRpbWUgY29uc3RhbnQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGltZUNvbnN0YW50XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25zdGFudCkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRUYXJnZXRBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWxzIGFsbCBzY2hlZHVsZWQgcGFyYW1ldGVyIGNoYW5nZXMgd2l0aCB0aW1lcyBncmVhdGVyIHRoYW4gb3Jcblx0XHQgKiAgZXF1YWwgdG8gc3RhcnRUaW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyA9IGZ1bmN0aW9uIChzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVkVmFsdWVzLmNhbGwodGhpcywgc3RhcnRUaW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IGFuIGFycmF5IG9mIGFyYml0cmFyeSB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWUgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKiAgQHBhcmFtIHtGbG9hdDMyQXJyYXl9IHZhbHVlc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGR1cmF0aW9uXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzY2FsaW5nPTFdIElmIHRoZSB2YWx1ZXMgaW4gdGhlIGN1cnZlIHNob3VsZCBiZSBzY2FsZWQgYnkgc29tZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLnNldFZhbHVlQ3VydmVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWVzLCBzdGFydFRpbWUsIGR1cmF0aW9uLCBzY2FsaW5nKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSBUb25lLlRyYW5zcG9ydFRpbWUoZHVyYXRpb24pO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUN1cnZlQXRUaW1lLmNhbGwodGhpcywgdmFsdWVzLCBzdGFydFRpbWUsIGR1cmF0aW9uLCBzY2FsaW5nKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhpcyBpcyBzaW1pbGFyIHRvIFtjYW5jZWxTY2hlZHVsZWRWYWx1ZXNdKCNjYW5jZWxTY2hlZHVsZWRWYWx1ZXMpIGV4Y2VwdFxuXHRcdCAqICBpdCBob2xkcyB0aGUgYXV0b21hdGVkIHZhbHVlIGF0IHRpbWUgdW50aWwgdGhlIG5leHQgYXV0b21hdGVkIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxBbmRIb2xkQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5TaWduYWwucHJvdG90eXBlLmNhbmNlbEFuZEhvbGRBdFRpbWUuY2FsbCh0aGlzLCBUb25lLlRyYW5zcG9ydFRpbWUodGltZSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX3N5bmNlZCk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub2ZmKCdzdGFydCBzdG9wIHBhdXNlJywgdGhpcy5fc3luY2VkQ2FsbGJhY2spO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwoMCk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWw7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBUb25lLkdyYWluUGxheWVyIGltcGxlbWVudHMgW2dyYW51bGFyIHN5bnRoZXNpc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JhbnVsYXJfc3ludGhlc2lzKS5cblx0XHQgKiAgICAgICAgR3JhbnVsYXIgU3ludGhlc2lzIGVuYWJsZXMgeW91IHRvIGFkanVzdCBwaXRjaCBhbmQgcGxheWJhY2sgcmF0ZSBpbmRlcGVuZGVudGx5LiBUaGUgZ3JhaW5TaXplIGlzIHRoZVxuXHRcdCAqICAgICAgICBhbW91bnQgb2YgdGltZSBlYWNoIHNtYWxsIGNodW5rIG9mIGF1ZGlvIGlzIHBsYXllZCBmb3IgYW5kIHRoZSBvdmVybGFwIGlzIHRoZVxuXHRcdCAqICAgICAgICBhbW91bnQgb2YgY3Jvc3NmYWRpbmcgdHJhbnNpdGlvbiB0aW1lIGJldHdlZW4gc3VjY2Vzc2l2ZSBncmFpbnMuXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfFRvbmUuQnVmZmVyfSB1cmxcdFRoZSB1cmwgdG8gbG9hZCwgb3IgdGhlIFRvbmUuQnVmZmVyIHRvIHBsYXkuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3VybCcsXG5cdCAgICAgICAgICAgICdvbmxvYWQnXG5cdCAgICAgICAgXSwgVG9uZS5HcmFpblBsYXllcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXVkaW8gYnVmZmVyIGJlbG9uZ2luZyB0byB0aGUgcGxheWVyLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5CdWZmZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihvcHRpb25zLnVybCwgb3B0aW9ucy5vbmxvYWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENyZWF0ZSBhIHJlcGVhdGluZyB0aWNrIHRvIHNjaGVkdWxlXG5cdFx0XHQgKiAgdGhlIGdyYWlucy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ2xvY2t9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrID0gbmV3IFRvbmUuQ2xvY2sodGhpcy5fdGljay5iaW5kKHRoaXMpLCBvcHRpb25zLmdyYWluU2l6ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BFbmQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogQWxsIG9mIHRoZSBjdXJyZW50bHkgcGxheWluZyBCdWZmZXJTb3VyY2VzXG5cdFx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ3JhaW5TaXplID0gb3B0aW9ucy5ncmFpblNpemU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3ZlcmxhcCA9IG9wdGlvbnMub3ZlcmxhcDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBZGp1c3QgdGhlIHBpdGNoIGluZGVwZW5kZW50bHkgb2YgdGhlIHBsYXliYWNrUmF0ZS5cblx0XHRcdCAqICBAdHlwZSAge0NlbnRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvL3NldHVwXG5cdCAgICAgICAgdGhpcy5vdmVybGFwID0gb3B0aW9ucy5vdmVybGFwO1xuXHQgICAgICAgIHRoaXMubG9vcCA9IG9wdGlvbnMubG9vcDtcblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgICAgIHRoaXMuZ3JhaW5TaXplID0gb3B0aW9ucy5ncmFpblNpemU7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBvcHRpb25zLmxvb3BTdGFydDtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBvcHRpb25zLmxvb3BFbmQ7XG5cdCAgICAgICAgdGhpcy5yZXZlcnNlID0gb3B0aW9ucy5yZXZlcnNlO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdzdG9wJywgdGhpcy5fb25zdG9wLmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR3JhaW5QbGF5ZXIsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ292ZXJsYXAnOiAwLjEsXG5cdCAgICAgICAgJ2dyYWluU2l6ZSc6IDAuMixcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogMCxcblx0ICAgICAgICAncmV2ZXJzZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBsYXkgdGhlIGJ1ZmZlciBhdCB0aGUgZ2l2ZW4gc3RhcnRUaW1lLiBPcHRpb25hbGx5IGFkZCBhbiBvZmZzZXRcblx0XHQgKiAgYW5kL29yIGR1cmF0aW9uIHdoaWNoIHdpbGwgcGxheSB0aGUgYnVmZmVyIGZyb20gYSBwb3NpdGlvblxuXHRcdCAqICB3aXRoaW4gdGhlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR3JhaW5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogIEBtZXRob2Qgc3RhcnRcblx0XHQgKiAgQG5hbWUgc3RhcnRcblx0XHQgKi9cblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBzdGFydCBtZXRob2Rcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gb2Zmc2V0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0LCBkdXJhdGlvbikge1xuXHQgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29mZnNldCA9IG9mZnNldDtcblx0ICAgICAgICB0aGlzLl9jbG9jay5zdGFydCh0aW1lKTtcblx0ICAgICAgICBpZiAoZHVyYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbikpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlZCB3aGVuIHRoZSBjbG9jayBpcyBzdG9wcGVkXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl9vbnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vc3RvcCB0aGUgcGxheWVyc1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUsIDApO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2VkIG9uIGVhY2ggY2xvY2sgdGljay4gc2NoZWR1bGVkIGEgbmV3XG5cdFx0ICogIGdyYWluIGF0IHRoaXMgdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgZmFkZUluID0gdGhpcy5fb2Zmc2V0IDwgdGhpcy5fb3ZlcmxhcCA/IDAgOiB0aGlzLl9vdmVybGFwO1xuXHQgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2Uoe1xuXHQgICAgICAgICAgICAnYnVmZmVyJzogdGhpcy5idWZmZXIsXG5cdCAgICAgICAgICAgICdmYWRlSW4nOiBmYWRlSW4sXG5cdCAgICAgICAgICAgICdmYWRlT3V0JzogdGhpcy5fb3ZlcmxhcCxcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0aGlzLmxvb3AsXG5cdCAgICAgICAgICAgICdsb29wU3RhcnQnOiB0aGlzLl9sb29wU3RhcnQsXG5cdCAgICAgICAgICAgICdsb29wRW5kJzogdGhpcy5fbG9vcEVuZCxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKHRoaXMuZGV0dW5lIC8gMTAwKVxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHNvdXJjZS5zdGFydCh0aW1lLCB0aGlzLl9vZmZzZXQpO1xuXHQgICAgICAgIHRoaXMuX29mZnNldCArPSB0aGlzLmdyYWluU2l6ZTtcblx0ICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lICsgdGhpcy5ncmFpblNpemUpO1xuXHQgICAgICAgIC8vYWRkIGl0IHRvIHRoZSBhY3RpdmUgc291cmNlc1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMucHVzaChzb3VyY2UpO1xuXHQgICAgICAgIC8vcmVtb3ZlIGl0IHdoZW4gaXQncyBkb25lXG5cdCAgICAgICAgc291cmNlLm9uZW5kZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2FjdGl2ZVNvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXHQgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEp1bXAgdG8gYSBzcGVjaWZpYyB0aW1lIGFuZCBwbGF5IGl0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgb2Zmc2V0ICBUaGUgb2Zmc2V0IHRvIGp1bXAgdG8uXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHRpbWUgV2hlbiB0byBtYWtlIHRoZSBqdW1wLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5HcmFpblBsYXllcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLnNlZWsgPSBmdW5jdGlvbiAob2Zmc2V0LCB0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLl90aWNrKHRoaXMudG9TZWNvbmRzKHRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgc2FtcGxlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB0aGlzLmdyYWluU2l6ZSA9IHRoaXMuX2dyYWluU2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBsb29wIHN0YXJ0IHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wU3RhcnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGxvb3AgZW5kIHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3BFbmQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkaXJlY3Rpb24gdGhlIGJ1ZmZlciBzaG91bGQgcGxheSBpblxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIHJldmVyc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ3JldmVyc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlci5yZXZlcnNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmV2KSB7XG5cdCAgICAgICAgICAgIHRoaXMuYnVmZmVyLnJldmVyc2UgPSByZXY7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2l6ZSBvZiBlYWNoIGNodW5rIG9mIGF1ZGlvIHRoYXQgdGhlXG5cdFx0ICogYnVmZmVyIGlzIGNob3BwZWQgaW50byBhbmQgcGxheWVkIGJhY2sgYXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgZ3JhaW5TaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdncmFpblNpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ncmFpblNpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dyYWluU2l6ZSA9IHRoaXMudG9TZWNvbmRzKHNpemUpO1xuXHQgICAgICAgICAgICB0aGlzLl9jbG9jay5mcmVxdWVuY3kudmFsdWUgPSB0aGlzLl9wbGF5YmFja1JhdGUgLyB0aGlzLl9ncmFpblNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGlzIGlzIHRoZSBkdXJhdGlvbiBvZiB0aGUgY3Jvc3MtZmFkZSBiZXR3ZWVuXG5cdFx0ICogc3VjZXNzaXZlIGdyYWlucy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBvdmVybGFwXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdvdmVybGFwJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxhcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3ZlcmxhcCA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLkdyYWluUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jbG9jay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR3JhaW5QbGF5ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5QbGF5ZXIgaXMgYW4gYXVkaW8gZmlsZSBwbGF5ZXIgd2l0aCBzdGFydCwgbG9vcCwgYW5kIHN0b3AgZnVuY3Rpb25zLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfEF1ZGlvQnVmZmVyfSB1cmwgRWl0aGVyIHRoZSBBdWRpb0J1ZmZlciBvciB0aGUgdXJsIGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0byBsb2FkIHRoZSBBdWRpb0J1ZmZlclxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIFRoZSBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWNvbW1lbmRlZCB0byB1c2UgVG9uZS5CdWZmZXIub24oJ2xvYWQnKSBpbnN0ZWFkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwbGF5ZXIgPSBuZXcgVG9uZS5QbGF5ZXIoXCIuL3BhdGgvdG8vc2FtcGxlLm1wM1wiKS50b01hc3RlcigpO1xuXHRcdCAqIC8vcGxheSBhcyBzb29uIGFzIHRoZSBidWZmZXIgaXMgbG9hZGVkXG5cdFx0ICogcGxheWVyLmF1dG9zdGFydCA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllciA9IGZ1bmN0aW9uICh1cmwpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucztcblx0ICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIgJiYgdXJsLmxvYWRlZCkge1xuXHQgICAgICAgICAgICB1cmwgPSB1cmwuZ2V0KCk7XG5cdCAgICAgICAgICAgIG9wdGlvbnMgPSBUb25lLlBsYXllci5kZWZhdWx0cztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICAgICAgXSwgVG9uZS5QbGF5ZXIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIHRoZSBmaWxlIHNob3VsZCBwbGF5IGFzIHNvb25cblx0XHRcdCAqICBhcyB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy93aWxsIHBsYXkgYXMgc29vbiBhcyBpdCdzIGxvYWRlZFxuXHRcdFx0ICogdmFyIHBsYXllciA9IG5ldyBUb25lLlBsYXllcih7XG5cdFx0XHQgKiBcdFwidXJsXCIgOiBcIi4vcGF0aC90by9zYW1wbGUubXAzXCIsXG5cdFx0XHQgKiBcdFwiYXV0b3N0YXJ0XCIgOiB0cnVlLFxuXHRcdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXV0b3N0YXJ0ID0gb3B0aW9ucy5hdXRvc3RhcnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGJ1ZmZlclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKHtcblx0ICAgICAgICAgICAgJ3VybCc6IG9wdGlvbnMudXJsLFxuXHQgICAgICAgICAgICAnb25sb2FkJzogdGhpcy5fb25sb2FkLmJpbmQodGhpcywgb3B0aW9ucy5vbmxvYWQpLFxuXHQgICAgICAgICAgICAncmV2ZXJzZSc6IG9wdGlvbnMucmV2ZXJzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmICh1cmwgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KHVybCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGlmIHRoZSBidWZmZXIgc2hvdWxkIGxvb3Agb25jZSBpdCdzIG92ZXJcblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcCA9IG9wdGlvbnMubG9vcDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpZiAnbG9vcCcgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBzdGFydCBhdCB0aGlzIHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IG9wdGlvbnMubG9vcFN0YXJ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGlmICdsb29wJyBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIGVuZCBhdCB0aGlzIHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BFbmQgPSBvcHRpb25zLmxvb3BFbmQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBsYXliYWNrIHJhdGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIGFjdGl2ZSBidWZmZXIgc291cmNlIG5vZGVzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5PFRvbmUuQnVmZmVyU291cmNlPn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBlbGFwc2VkIHRpbWUgY291bnRlci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaWNrU291cmNlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IG5ldyBUb25lLlRpY2tTb3VyY2Uob3B0aW9ucy5wbGF5YmFja1JhdGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlSW4gdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlSW4gPSBvcHRpb25zLmZhZGVJbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZU91dCB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVPdXQgPSBvcHRpb25zLmZhZGVPdXQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QbGF5ZXIsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2F1dG9zdGFydCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogMCxcblx0ICAgICAgICAncmV0cmlnZ2VyJzogZmFsc2UsXG5cdCAgICAgICAgJ3JldmVyc2UnOiBmYWxzZSxcblx0ICAgICAgICAnZmFkZUluJzogMCxcblx0ICAgICAgICAnZmFkZU91dCc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTG9hZCB0aGUgYXVkaW8gZmlsZSBhcyBhbiBhdWRpbyBidWZmZXIuXG5cdFx0ICogIERlY29kZXMgdGhlIGF1ZGlvIGFzeW5jaHJvbm91c2x5IGFuZCBpbnZva2VzXG5cdFx0ICogIHRoZSBjYWxsYmFjayBvbmNlIHRoZSBhdWRpbyBidWZmZXIgbG9hZHMuXG5cdFx0ICogIE5vdGU6IHRoaXMgZG9lcyBub3QgbmVlZCB0byBiZSBjYWxsZWQgaWYgYSB1cmxcblx0XHQgKiAgd2FzIHBhc3NlZCBpbiB0byB0aGUgY29uc3RydWN0b3IuIE9ubHkgdXNlIHRoaXNcblx0XHQgKiAgaWYgeW91IHdhbnQgdG8gbWFudWFsbHkgbG9hZCBhIG5ldyB1cmwuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgdXJsIG9mIHRoZSBidWZmZXIgdG8gbG9hZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIEZpbGV0eXBlIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGludm9rZSBvbmNlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNhbXBsZSBpcyBsb2FkZWQuXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubG9hZCh1cmwsIHRoaXMuX29ubG9hZC5iaW5kKHRoaXMsIGNhbGxiYWNrKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW50ZXJuYWwgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9vbmxvYWQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBjYWxsYmFjayA9IFRvbmUuZGVmYXVsdEFyZyhjYWxsYmFjaywgVG9uZS5ub09wKTtcblx0ICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5hdXRvc3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5zdGFydCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnRlcm5hbCBjYWxsYmFjayB3aGVuIHRoZSBidWZmZXIgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX29uU291cmNlRW5kID0gZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2FjdGl2ZVNvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGxheSB0aGUgYnVmZmVyIGF0IHRoZSBnaXZlbiBzdGFydFRpbWUuIE9wdGlvbmFsbHkgYWRkIGFuIG9mZnNldFxuXHRcdCAqICBhbmQvb3IgZHVyYXRpb24gd2hpY2ggd2lsbCBwbGF5IHRoZSBidWZmZXIgZnJvbSBhIHBvc2l0aW9uXG5cdFx0ICogIHdpdGhpbiB0aGUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb24uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3N0YXJ0VGltZT1ub3ddIFdoZW4gdGhlIHBsYXllciBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtvZmZzZXQ9MF0gVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgc2FtcGxlIHNob3VsZCBwbGF5LiBJZiBubyBkdXJhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnaXZlbiwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmdWxsIGxlbmd0aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2FtcGxlIChtaW51cyBhbnkgb2Zmc2V0KVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqICBAbWV0aG9kIHN0YXJ0XG5cdFx0ICogIEBuYW1lIHN0YXJ0XG5cdFx0ICovXG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgb2Zmc2V0LCBkdXJhdGlvbikge1xuXHQgICAgICAgIC8vaWYgaXQncyBhIGxvb3AgdGhlIGRlZmF1bHQgb2Zmc2V0IGlzIHRoZSBsb29wc3RhcnQgcG9pbnRcblx0ICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCB0aGlzLl9sb29wU3RhcnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IG9mZnNldCBpcyAwXG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NvbXB1dGUgdGhlIHZhbHVlcyBpbiBzZWNvbmRzXG5cdCAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICB2YXIgY29tcHV0ZWREdXJhdGlvbiA9IFRvbmUuZGVmYXVsdEFyZyhkdXJhdGlvbiwgTWF0aC5tYXgodGhpcy5fYnVmZmVyLmR1cmF0aW9uIC0gb2Zmc2V0LCAwKSk7XG5cdCAgICAgICAgY29tcHV0ZWREdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGNvbXB1dGVkRHVyYXRpb24pO1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgZWxhcHNlZCB0aW1lIGNvdW50ZXJcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5zdGFydChzdGFydFRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgLy9tYWtlIHRoZSBzb3VyY2Vcblx0ICAgICAgICB2YXIgc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKHtcblx0ICAgICAgICAgICAgJ2J1ZmZlcic6IHRoaXMuX2J1ZmZlcixcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0aGlzLl9sb29wLFxuXHQgICAgICAgICAgICAnbG9vcFN0YXJ0JzogdGhpcy5fbG9vcFN0YXJ0LFxuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IHRoaXMuX2xvb3BFbmQsXG5cdCAgICAgICAgICAgICdvbmVuZGVkJzogdGhpcy5fb25Tb3VyY2VFbmQuYmluZCh0aGlzKSxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IHRoaXMuX3BsYXliYWNrUmF0ZSxcblx0ICAgICAgICAgICAgJ2ZhZGVJbic6IHRoaXMuZmFkZUluLFxuXHQgICAgICAgICAgICAnZmFkZU91dCc6IHRoaXMuZmFkZU91dFxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBsb29waW5nIHByb3BlcnRpZXNcblx0ICAgICAgICBpZiAoIXRoaXMuX2xvb3AgJiYgIXRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICAvL2lmIGl0J3Mgbm90IGxvb3BpbmcsIHNldCB0aGUgc3RhdGUgY2hhbmdlIGF0IHRoZSBlbmQgb2YgdGhlIHNhbXBsZVxuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHN0YXJ0VGltZSArIGNvbXB1dGVkRHVyYXRpb24gLyB0aGlzLl9wbGF5YmFja1JhdGUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2FkZCBpdCB0byB0aGUgYXJyYXkgb2YgYWN0aXZlIHNvdXJjZXNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnB1c2goc291cmNlKTtcblx0ICAgICAgICAvL3N0YXJ0IGl0XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvb3AgJiYgVG9uZS5pc1VuZGVmKGR1cmF0aW9uKSkge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RhcnQoc3RhcnRUaW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdGFydChzdGFydFRpbWUsIG9mZnNldCwgY29tcHV0ZWREdXJhdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHBsYXliYWNrLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIGFuZCB0aGVuIHJlc3RhcnQgdGhlIHBsYXllciBmcm9tIHRoZSBiZWdpbm5pbmcgKG9yIG9mZnNldClcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3N0YXJ0VGltZT1ub3ddIFdoZW4gdGhlIHBsYXllciBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtvZmZzZXQ9MF0gVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgc2FtcGxlIHNob3VsZCBwbGF5LiBJZiBubyBkdXJhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnaXZlbiwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmdWxsIGxlbmd0aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2FtcGxlIChtaW51cyBhbnkgb2Zmc2V0KVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUsIG9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZWVrIHRvIGEgc3BlY2lmaWMgdGltZSBpbiB0aGUgcGxheWVyJ3MgYnVmZmVyLiBJZiB0aGVcblx0XHQgKiAgc291cmNlIGlzIG5vIGxvbmdlciBwbGF5aW5nIGF0IHRoYXQgdGltZSwgaXQgd2lsbCBzdG9wLlxuXHRcdCAqICBJZiB5b3Ugc2VlayB0byBhIHRpbWUgdGhhdFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IG9mZnNldCBUaGUgdGltZSB0byBzZWVrIHRvLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSB0aW1lIFRoZSB0aW1lIGZvciB0aGUgc2VlayBldmVudCB0byBvY2N1ci5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RhcnQoMC4yKTtcblx0XHQgKiBzb3VyY2Uuc3RvcCgwLjQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLnNlZWsgPSBmdW5jdGlvbiAob2Zmc2V0LCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgICAgIC8vIGlmIGl0J3MgY3VycmVudGx5IHBsYXlpbmcsIHN0b3AgaXRcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICAgICAgLy9yZXN0YXJ0IGl0IGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGxvb3Agc3RhcnQgYW5kIGVuZC4gV2lsbCBvbmx5IGxvb3AgaWYgbG9vcCBpc1xuXHRcdCAqICBzZXQgdG8gdHJ1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBsb29wU3RhcnQgVGhlIGxvb3AgZW5kIHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBsb29wRW5kIFRoZSBsb29wIGVuZCB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9vcCAwLjEgc2Vjb25kcyBvZiB0aGUgZmlsZS5cblx0XHQgKiBwbGF5ZXIuc2V0TG9vcFBvaW50cygwLjIsIDAuMyk7XG5cdFx0ICogcGxheWVyLmxvb3AgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLnNldExvb3BQb2ludHMgPSBmdW5jdGlvbiAobG9vcFN0YXJ0LCBsb29wRW5kKSB7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBsb29wU3RhcnQ7XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgc3RhcnQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIGN1cnJlbnQgc291cmNlXG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2UubG9vcFN0YXJ0ID0gbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBlbmQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIGN1cnJlbnQgc291cmNlXG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2UubG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF1ZGlvIGJ1ZmZlciBiZWxvbmdpbmcgdG8gdGhlIHBsYXllci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdCAqIEBuYW1lIGJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVyIHNob3VsZCBsb29wIG9uY2UgaXQncyBvdmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb29wXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3A7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wKSB7XG5cdCAgICAgICAgICAgIC8vaWYgbm8gY2hhbmdlLCBkbyBub3RoaW5nXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wID09PSBsb29wKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fbG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAoIWxvb3ApIHtcblx0ICAgICAgICAgICAgICAgIC8vc3RvcCB0aGUgcGxheWJhY2sgb24gdGhlIG5leHQgY3ljbGVcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BBdE5leHRJdGVyYXRpb24obm93KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBuZXh0IHN0b3BFdmVudFxuXHQgICAgICAgICAgICAgICAgdmFyIHN0b3BFdmVudCA9IHRoaXMuX3N0YXRlLmdldE5leHRTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICBpZiAoc3RvcEV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmxvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbChzdG9wRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuY2FuY2VsKHN0b3BFdmVudC50aW1lKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhIHN0b3AgZXZlbnQgYXQgdGhlIG5leHQgZnVsbCBpdGVyYXRpb24uIFVzZWRcblx0XHQgKiAgZm9yIHNjaGVkdWxpbmcgc3RvcCB3aGVuIHRoZSBsb29wIHN0YXRlIG9yIHBsYXliYWNrUmF0ZSBjaGFuZ2VzXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIG5vdyAgVGhlIGN1cnJlbnQgdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9zdG9wQXROZXh0SXRlcmF0aW9uID0gZnVuY3Rpb24gKG5vdykge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShub3cpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdmFyIG5leHRTdG9wID0gdGhpcy5fc3RhdGUuZ2V0TmV4dFN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCwgbm93KTtcblx0ICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fZWxhcHNlZFRpbWUuZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbnMgPSBNYXRoLm1heChNYXRoLmNlaWwocG9zaXRpb24gLyB0aGlzLmJ1ZmZlci5kdXJhdGlvbiksIDEpO1xuXHQgICAgICAgICAgICB2YXIgc3RvcFRpbWUgPSB0aGlzLl9lbGFwc2VkVGltZS5nZXRUaW1lT2ZUaWNrKGl0ZXJhdGlvbnMgKiB0aGlzLmJ1ZmZlci5kdXJhdGlvbiwgbmV4dFN0b3AgPyBuZXh0U3RvcC50aW1lIC0gdGhpcy5zYW1wbGVUaW1lIDogSW5maW5pdHkpO1xuXHQgICAgICAgICAgICB0aGlzLnN0b3Aoc3RvcFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGxheWJhY2sgc3BlZWQuIDEgaXMgbm9ybWFsIHNwZWVkLiBUaGlzIGlzIG5vdCBhIHNpZ25hbCBiZWNhdXNlXG5cdFx0ICogU2FmYXJpIGFuZCBpT1MgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgcGxheWJhY2tSYXRlIGFzIGEgc2lnbmFsLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZShyYXRlLCBub3cpO1xuXHQgICAgICAgICAgICAvL2lmIGl0J3Mgbm90IGxvb3Bpbmdcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdG9wQXROZXh0SXRlcmF0aW9uKG5vdyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9zZXQgYWxsIHRoZSBzb3VyY2VzXG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2UucGxheWJhY2tSYXRlLnNldFZhbHVlQXRUaW1lKHJhdGUsIG5vdyk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gb2YgdGhlIGJ1ZmZlci4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgcG9zaXRpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdwb3NpdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShub3cpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgdGhpcy5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IHRoaXMuYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fZWxhcHNlZFRpbWUuZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiAlIGR1cmF0aW9uO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkaXJlY3Rpb24gdGhlIGJ1ZmZlciBzaG91bGQgcGxheSBpblxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSByZXZlcnNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAncmV2ZXJzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5yZXZlcnNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmV2KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlci5yZXZlcnNlID0gcmV2O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgYWxsIHRoZSBidWZmZXIgaXMgbG9hZGVkXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGlzcG9zZSBhbmQgZGlzY29ubmVjdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vZGlzY29ubmVjdCBhbGwgb2YgdGhlIHBsYXllcnNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGxheWVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGxheWVycyBjb21iaW5lcyBtdWx0aXBsZSBbVG9uZS5QbGF5ZXJdKFBsYXllcikgb2JqZWN0cy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gdXJscyBBbiBvYmplY3QgbWFwcGluZyBhIG5hbWUgdG8gYSB1cmwuXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb249fSBvbmxvYWQgVGhlIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIGFsbCBidWZmZXJzIGFyZSBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMgPSBmdW5jdGlvbiAodXJscykge1xuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3MsIFsnb25sb2FkJ10sIFRvbmUuUGxheWVycyk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvdXRwdXQgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogc291cmNlLnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAvL21ha2UgdGhlIG91dHB1dCBleHBsaWNpdGx5IHN0ZXJlb1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudCA9IDI7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLm91dHB1dC5vdXRwdXQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgLy9tdXRlIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjb250YWluZXIgb2YgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdFx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnMgPSB7fTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBsb2FkaW5nIGNvdW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBwcml2YXRlIGhvbGRlciBvZiB0aGUgZmFkZUluIHRpbWVcblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZhZGVJbiA9IG9wdGlvbnMuZmFkZUluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogcHJpdmF0ZSBob2xkZXIgb2YgdGhlIGZhZGVPdXQgdGltZVxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmFkZU91dCA9IG9wdGlvbnMuZmFkZU91dDtcblx0ICAgICAgICAvL2FkZCBhbGwgb2YgdGhlIHBsYXllcnNcblx0ICAgICAgICBmb3IgKHZhciBuYW1lIGluIHVybHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50Kys7XG5cdCAgICAgICAgICAgIHRoaXMuYWRkKG5hbWUsIHVybHNbbmFtZV0sIHRoaXMuX2J1ZmZlckxvYWRlZC5iaW5kKHRoaXMsIG9wdGlvbnMub25sb2FkKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGxheWVycywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlLFxuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2ZhZGVJbic6IDAsXG5cdCAgICAgICAgJ2ZhZGVPdXQnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEEgYnVmZmVyIHdhcyBsb2FkZWQuIGRlY3JlbWVudCB0aGUgY291bnRlci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFja1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5fYnVmZmVyTG9hZGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50LS07XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmdDb3VudCA9PT0gMCAmJiBjYWxsYmFjaykge1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHNvdXJjZS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZmFkZUluIHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgZmFkZUluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ2ZhZGVJbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZhZGVJbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGZhZGVJbikge1xuXHQgICAgICAgICAgICB0aGlzLl9mYWRlSW4gPSBmYWRlSW47XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgcGxheWVyLmZhZGVJbiA9IGZhZGVJbjtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZmFkZU91dCB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGZhZGVPdXRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnZmFkZU91dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZhZGVPdXQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmYWRlT3V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZhZGVPdXQgPSBmYWRlT3V0O1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHBsYXllci5mYWRlT3V0ID0gZmFkZU91dDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc3RhdGUgb2YgdGhlIHBsYXllcnMgb2JqZWN0LiBSZXR1cm5zIFwic3RhcnRlZFwiIGlmIGFueSBvZiB0aGUgcGxheWVycyBhcmUgcGxheWluZy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXJzI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQG5hbWUgc3RhdGVcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBwbGF5aW5nID0gZmFsc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgcGxheWluZyA9IHBsYXlpbmcgfHwgcGxheWVyLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICByZXR1cm4gcGxheWluZyA/IFRvbmUuU3RhdGUuU3RhcnRlZCA6IFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcnVlIGlmIHRoZSBidWZmZXJzIG9iamVjdCBoYXMgYSBidWZmZXIgYnkgdGhhdCBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgbmFtZSAgVGhlIGtleSBvciBpbmRleCBvZiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5cblx0XHQgKiAgQHJldHVybiAge0Jvb2xlYW59XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcnMuaGFzT3duUHJvcGVydHkobmFtZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCBhIHBsYXllciBieSBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBuYW1lICBUaGUgcGxheWVycyBuYW1lIGFzIGRlZmluZWQgaW5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnN0cnVjdG9yIG9iamVjdCBvciBgYWRkYCBtZXRob2QuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBsYXllcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5oYXMobmFtZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcnNbbmFtZV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlBsYXllcnM6IG5vIHBsYXllciBuYW1lZCAnICsgbmFtZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIHBsYXllcnNcblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcblx0XHQgKiBAcmV0dXJuIHtUb25lLlBsYXllcnN9ICAgICAgICAgICAgdGhpc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLl9mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgZm9yICh2YXIgcGxheWVyTmFtZSBpbiB0aGlzLl9wbGF5ZXJzKSB7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX3BsYXllcnNbcGxheWVyTmFtZV0sIHBsYXllck5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiBhbGwgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXJzI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0xvYWRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgaXNMb2FkZWQgPSBpc0xvYWRlZCAmJiBwbGF5ZXIubG9hZGVkO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIHBsYXllciBieSBuYW1lIGFuZCB1cmwgdG8gdGhlIFBsYXllcnNcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBuYW1lICAgICAgQSB1bmlxdWUgbmFtZSB0byBnaXZlIHRoZSBwbGF5ZXJcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfFRvbmUuQnVmZmVyfEF1ZGlvYnVmZmVyfSAgdXJsICBFaXRoZXIgdGhlIHVybCBvZiB0aGUgYnVmZXIsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhZGRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobmFtZSwgdXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnNbbmFtZV0gPSBuZXcgVG9uZS5QbGF5ZXIodXJsLCBjYWxsYmFjaykuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcGxheWVyc1tuYW1lXS5mYWRlSW4gPSB0aGlzLl9mYWRlSW47XG5cdCAgICAgICAgdGhpcy5fcGxheWVyc1tuYW1lXS5mYWRlT3V0ID0gdGhpcy5fZmFkZU91dDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIGFsbCBvZiB0aGUgcGxheWVycyBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0byBzdG9wIGFsbCBvZiB0aGUgcGxheWVycy5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlBsYXllcnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuc3RvcEFsbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgIHBsYXllci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEaXNwb3NlIGFuZCBkaXNjb25uZWN0LlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBsYXllcnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgcGxheWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QbGF5ZXJzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuVXNlck1lZGlhIHVzZXMgTWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSB0byBvcGVuIHVwXG5cdFx0ICogICAgICAgICAgYW5kIGV4dGVybmFsIG1pY3JvcGhvbmUgb3IgYXVkaW8gaW5wdXQuIENoZWNrXG5cdFx0ICogICAgICAgICAgW01lZGlhRGV2aWNlcyBBUEkgU3VwcG9ydF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL01lZGlhRGV2aWNlcy9nZXRVc2VyTWVkaWEpXG5cdFx0ICogICAgICAgICAgdG8gc2VlIHdoaWNoIGJyb3dzZXJzIGFyZSBzdXBwb3J0ZWQuIEFjY2VzcyB0byBhbiBleHRlcm5hbCBpbnB1dFxuXHRcdCAqICAgICAgICAgIGlzIGxpbWl0ZWQgdG8gc2VjdXJlIChIVFRQUykgY29ubmVjdGlvbnMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVscz19IHZvbHVtZSBUaGUgbGV2ZWwgb2YgdGhlIGlucHV0XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9saXN0IHRoZSBpbnB1dHMgYW5kIG9wZW4gdGhlIHRoaXJkIG9uZVxuXHRcdCAqIHZhciBtb3R1ID0gbmV3IFRvbmUuVXNlck1lZGlhKCk7XG5cdFx0ICpcblx0XHQgKiAvL29wZW5pbmcgdGhlIGlucHV0IGFza3MgdGhlIHVzZXIgdG8gYWN0aXZhdGUgdGhlaXIgbWljXG5cdFx0ICogbW90dS5vcGVuKCkudGhlbihmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly9wcm9taXNlIHJlc29sdmVzIHdoZW4gaW5wdXQgaXMgYXZhaWxhYmxlXG5cdFx0ICogfSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3ZvbHVtZSddLCBUb25lLlVzZXJNZWRpYSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgTWVkaWFTdHJlYW1Ob2RlXG5cdFx0XHQgKiAgQHR5cGUge01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1lZGlhIHN0cmVhbSBjcmVhdGVkIGJ5IGdldFVzZXJNZWRpYS5cblx0XHRcdCAqICBAdHlwZSB7TG9jYWxNZWRpYVN0cmVhbX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RyZWFtID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3BlbiBkZXZpY2Vcblx0XHRcdCAqICBAdHlwZSAge01lZGlhRGV2aWNlSW5mb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGV2aWNlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IHZvbHVtZSBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIGlucHV0LnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Vc2VyTWVkaWEsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBPcGVuIHRoZSBtZWRpYSBzdHJlYW0uIElmIGEgc3RyaW5nIGlzIHBhc3NlZCBpbiwgaXQgaXMgYXNzdW1lZFxuXHRcdCAqICB0byBiZSB0aGUgbGFiZWwgb3IgaWQgb2YgdGhlIHN0cmVhbSwgaWYgYSBudW1iZXIgaXMgcGFzc2VkIGluLFxuXHRcdCAqICBpdCBpcyB0aGUgaW5wdXQgbnVtYmVyIG9mIHRoZSBzdHJlYW0uXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9IFtsYWJlbE9ySWQ9XCJkZWZhdWx0XCJdIFRoZSBsYWJlbCBvciBpZCBvZiB0aGUgYXVkaW8gaW5wdXQgbWVkaWEgZGV2aWNlLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2l0aCBubyBhcmd1bWVudCwgdGhlIGRlZmF1bHQgc3RyZWFtIGlzIG9wZW5lZC5cblx0XHQgKiAgQHJldHVybiB7UHJvbWlzZX0gVGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgc3RyZWFtIGlzIG9wZW4uXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uIChsYWJlbE9ySWQpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5Vc2VyTWVkaWEuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oZnVuY3Rpb24gKGRldmljZXMpIHtcblx0ICAgICAgICAgICAgdmFyIGRldmljZTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIobGFiZWxPcklkKSkge1xuXHQgICAgICAgICAgICAgICAgZGV2aWNlID0gZGV2aWNlc1tsYWJlbE9ySWRdO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZGV2aWNlID0gZGV2aWNlcy5maW5kKGZ1bmN0aW9uIChkZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlLmxhYmVsID09PSBsYWJlbE9ySWQgfHwgZGV2aWNlLmRldmljZUlkID09PSBsYWJlbE9ySWQ7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIC8vZGlkbid0IGZpbmQgYSBtYXRjaGluZyBkZXZpY2Vcblx0ICAgICAgICAgICAgICAgIGlmICghZGV2aWNlICYmIGRldmljZXMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZXNbMF07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFkZXZpY2UgJiYgVG9uZS5pc0RlZmluZWQobGFiZWxPcklkKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5Vc2VyTWVkaWE6IG5vIG1hdGNoaW5nIGRldmljZTogJyArIGxhYmVsT3JJZCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZGV2aWNlID0gZGV2aWNlO1xuXHQgICAgICAgICAgICAvL2RvIGdldFVzZXJNZWRpYVxuXHQgICAgICAgICAgICB2YXIgY29uc3RyYWludHMgPSB7XG5cdCAgICAgICAgICAgICAgICBhdWRpbzoge1xuXHQgICAgICAgICAgICAgICAgICAgICdlY2hvQ2FuY2VsbGF0aW9uJzogZmFsc2UsXG5cdCAgICAgICAgICAgICAgICAgICAgJ3NhbXBsZVJhdGUnOiB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICBjb25zdHJhaW50cy5hdWRpby5kZXZpY2VJZCA9IGRldmljZS5kZXZpY2VJZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoY29uc3RyYWludHMpLnRoZW4oZnVuY3Rpb24gKHN0cmVhbSkge1xuXHQgICAgICAgICAgICAgICAgLy9zdGFydCBhIG5ldyBzb3VyY2Ugb25seSBpZiB0aGUgcHJldmlvdXMgb25lIGlzIGNsb3NlZFxuXHQgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9zdHJlYW0pIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG5cdCAgICAgICAgICAgICAgICAgICAgLy9XcmFwIGEgTWVkaWFTdHJlYW1Tb3VyY2VOb2RlIGFyb3VuZCB0aGUgbGl2ZSBpbnB1dCBzdHJlYW0uXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0gPSB0aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2Uoc3RyZWFtKTtcblx0ICAgICAgICAgICAgICAgICAgICAvL0Nvbm5lY3QgdGhlIE1lZGlhU3RyZWFtU291cmNlTm9kZSB0byBhIGdhdGUgZ2FpbiBub2RlXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0uY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbG9zZSB0aGUgbWVkaWEgc3RyZWFtXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuVXNlck1lZGlhfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0cmVhbSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdHJlYW0uZ2V0QXVkaW9UcmFja3MoKS5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuXHQgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RyZWFtID0gbnVsbDtcblx0ICAgICAgICAgICAgLy9yZW1vdmUgdGhlIG9sZCBtZWRpYSBzdHJlYW1cblx0ICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2RldmljZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggdGhlIGxpc3Qgb2YgYXVkaW8gaW5wdXQgZGV2aWNlcyBhdmFpbGFibGUuXG5cdFx0ICogIEByZXR1cm4ge1Byb21pc2V9IFRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgZGV2aWNlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5Vc2VyTWVkaWEuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oZnVuY3Rpb24oZGV2aWNlcyl7XG5cdFx0ICogXHRjb25zb2xlLmxvZyhkZXZpY2VzKVxuXHRcdCAqIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5lbnVtZXJhdGVEZXZpY2VzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uIChkZXZpY2VzKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBkZXZpY2VzLmZpbHRlcihmdW5jdGlvbiAoZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlLmtpbmQgPT09ICdhdWRpb2lucHV0Jztcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIFwic3RhcnRlZFwiIHdoZW4gdGhlIG1pY3JvcGhvbmUgaXMgb3BlblxuXHRcdCAqICBhbmQgXCJzdG9wcGVkXCIgd2hlbiB0aGUgbWljIGlzIGNsb3NlZC5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW0gJiYgdGhpcy5fc3RyZWFtLmFjdGl2ZSA/IFRvbmUuU3RhdGUuU3RhcnRlZCA6IFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0UmV0dXJucyBhbiBpZGVudGlmaWVyIGZvciB0aGUgcmVwcmVzZW50ZWQgZGV2aWNlIHRoYXQgaXNcblx0XHQgKiBcdHBlcnNpc3RlZCBhY3Jvc3Mgc2Vzc2lvbnMuIEl0IGlzIHVuLWd1ZXNzYWJsZSBieSBvdGhlciBhcHBsaWNhdGlvbnMgYW5kXG5cdFx0ICogXHR1bmlxdWUgdG8gdGhlIG9yaWdpbiBvZiB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4gSXQgaXMgcmVzZXQgd2hlbiB0aGVcblx0XHQgKiBcdHVzZXIgY2xlYXJzIGNvb2tpZXMgKGZvciBQcml2YXRlIEJyb3dzaW5nLCBhIGRpZmZlcmVudCBpZGVudGlmaWVyIGlzXG5cdFx0ICogXHR1c2VkIHRoYXQgaXMgbm90IHBlcnNpc3RlZCBhY3Jvc3Mgc2Vzc2lvbnMpLiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZVxuXHRcdCAqIFx0ZGV2aWNlIGlzIG5vdCBvcGVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBkZXZpY2VJZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ2RldmljZUlkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlLmRldmljZUlkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFJldHVybnMgYSBncm91cCBpZGVudGlmaWVyLiBUd28gZGV2aWNlcyBoYXZlIHRoZVxuXHRcdCAqIFx0c2FtZSBncm91cCBpZGVudGlmaWVyIGlmIHRoZXkgYmVsb25nIHRvIHRoZSBzYW1lIHBoeXNpY2FsIGRldmljZS5cblx0XHQgKiBcdFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlIGRldmljZSBpcyBub3Qgb3Blbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgZ3JvdXBJZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ2dyb3VwSWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2UuZ3JvdXBJZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRSZXR1cm5zIGEgbGFiZWwgZGVzY3JpYmluZyB0aGlzIGRldmljZSAoZm9yIGV4YW1wbGUgXCJCdWlsdC1pbiBNaWNyb3Bob25lXCIpLlxuXHRcdCAqIFx0UmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgZGV2aWNlIGlzIG5vdCBvcGVuIG9yIGxhYmVsIGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBcdGJlY2F1c2Ugb2YgcGVybWlzc2lvbnMuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIGdyb3VwSWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdsYWJlbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZS5sYWJlbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHVzZXJNZWRpYS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVXNlck1lZGlhfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY2xvc2UoKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSWYgZ2V0VXNlck1lZGlhIGlzIHN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci5cblx0XHQgKiAgQHR5cGUgIHtCb29sZWFufVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIHN1cHBvcnRlZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLCAnc3VwcG9ydGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5pc0RlZmluZWQobmF2aWdhdG9yLm1lZGlhRGV2aWNlcykgJiYgVG9uZS5pc0Z1bmN0aW9uKG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLlVzZXJNZWRpYTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk1pZGkgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgVGltZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBUb25lLk1pZGkgY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCB0aGUgYG5ld2Aga2V5d29yZC4gVG9uZS5NaWRpIGNhbiBiZSBwYXNzZWRcblx0XHQgKiAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBvZiBhbnkgbWV0aG9kIHdoaWNoIHRha2VzIHRpbWUgYXMgYW4gYXJndW1lbnQuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5GcmVxdWVuY3l9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdCA9IFRvbmUuTWlkaShcIjRuXCIpOy8vYSBxdWFydGVyIG5vdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLk1pZGkpIHtcblx0ICAgICAgICAgICAgVG9uZS5GcmVxdWVuY3kuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuTWlkaSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRpLCBUb25lLkZyZXF1ZW5jeSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAnbWlkaSc7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBmcmVxdWVuY3kgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fZnJlcXVlbmN5VG9Vbml0cy5jYWxsKHRoaXMsIGZyZXEpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fdGlja3NUb1VuaXRzLmNhbGwodGhpcywgdGlja3MpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMgPSBmdW5jdGlvbiAoYmVhdHMpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cy5jYWxsKHRoaXMsIGJlYXRzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMuY2FsbCh0aGlzLCBzZWNvbmRzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBhcyBhIE1JREkgbm90ZVxuXHRcdCAqICBAcmV0dXJuICB7TUlESX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLk1pZGkoNjApLnRvTWlkaSgpOyAvLzYwXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLnRvTWlkaSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBhcyBhIE1JREkgbm90ZVxuXHRcdCAqICBAcmV0dXJuICB7TUlESX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLk1pZGkoNjApLnRvTWlkaSgpOyAvLzYwXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5tdG9mKHRoaXMudG9NaWRpKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmFuc3Bvc2VzIHRoZSBmcmVxdWVuY3kgYnkgdGhlIGdpdmVuIG51bWJlciBvZiBzZW1pdG9uZXMuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsfSAgaW50ZXJ2YWxcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRnJlcXVlbmN5fSBBIG5ldyB0cmFuc3Bvc2VkIGZyZXF1ZW5jeVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQTRcIikudHJhbnNwb3NlKDMpOyAvL1wiQzVcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS50cmFuc3Bvc2UgPSBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy50b01pZGkoKSArIGludGVydmFsKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NaWRpO1xuXHR9KTtcblx0XG5cdHJldHVybiBUb25lO1xufSkpOyIsIi8qISBwNS5qcyB2MC43LjIgU2VwdGVtYmVyIDAyLCAyMDE4ICovICFmdW5jdGlvbihhKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1hKCk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLGEpO2Vsc2V7dmFyIGI7Yj1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMsYi5wNT1hKCl9fShmdW5jdGlvbigpe3ZhciBhO3JldHVybiBmdW5jdGlvbiBhKGIsYyxkKXtmdW5jdGlvbiBlKGcsaCl7aWYoIWNbZ10pe2lmKCFiW2ddKXt2YXIgaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dmFyIGo9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitnK1wiJ1wiKTt0aHJvdyBqLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsan12YXIgaz1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoay5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoY3x8YSl9LGssay5leHBvcnRzLGEsYixjLGQpfXJldHVybiBjW2ddLmV4cG9ydHN9Zm9yKHZhciBmPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsZz0wO2c8ZC5sZW5ndGg7ZysrKWUoZFtnXSk7cmV0dXJuIGV9KHsxOltmdW5jdGlvbihhLGIsYyl7IWZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYSl7dmFyIGI9YS5jaGFyQ29kZUF0KDApO3JldHVybiBiPT09Znx8Yj09PWs/NjI6Yj09PWd8fGI9PT1sPzYzOmI8aD8tMTpiPGgrMTA/Yi1oKzI2KzI2OmI8aisyNj9iLWo6YjxpKzI2P2ItaSsyNjp2b2lkIDB9ZnVuY3Rpb24gYyhhKXtmdW5jdGlvbiBjKGEpe2pbbCsrXT1hfXZhciBkLGYsZyxoLGksajtpZihhLmxlbmd0aCU0PjApdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNFwiKTt2YXIgaz1hLmxlbmd0aDtpPVwiPVwiPT09YS5jaGFyQXQoay0yKT8yOlwiPVwiPT09YS5jaGFyQXQoay0xKT8xOjAsaj1uZXcgZSgzKmEubGVuZ3RoLzQtaSksZz1pPjA/YS5sZW5ndGgtNDphLmxlbmd0aDt2YXIgbD0wO2ZvcihkPTAsZj0wO2Q8ZztkKz00LGYrPTMpaD1iKGEuY2hhckF0KGQpKTw8MTh8YihhLmNoYXJBdChkKzEpKTw8MTJ8YihhLmNoYXJBdChkKzIpKTw8NnxiKGEuY2hhckF0KGQrMykpLGMoKDE2NzExNjgwJmgpPj4xNiksYygoNjUyODAmaCk+PjgpLGMoMjU1JmgpO3JldHVybiAyPT09aT8oaD1iKGEuY2hhckF0KGQpKTw8MnxiKGEuY2hhckF0KGQrMSkpPj40LGMoMjU1JmgpKToxPT09aSYmKGg9YihhLmNoYXJBdChkKSk8PDEwfGIoYS5jaGFyQXQoZCsxKSk8PDR8YihhLmNoYXJBdChkKzIpKT4+MixjKGg+PjgmMjU1KSxjKDI1NSZoKSksan1mdW5jdGlvbiBkKGEpe2Z1bmN0aW9uIGIoYSl7cmV0dXJuXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIuY2hhckF0KGEpfWZ1bmN0aW9uIGMoYSl7cmV0dXJuIGIoYT4+MTgmNjMpK2IoYT4+MTImNjMpK2IoYT4+NiY2MykrYig2MyZhKX12YXIgZCxlLGYsZz1hLmxlbmd0aCUzLGg9XCJcIjtmb3IoZD0wLGY9YS5sZW5ndGgtZztkPGY7ZCs9MyllPShhW2RdPDwxNikrKGFbZCsxXTw8OCkrYVtkKzJdLGgrPWMoZSk7c3dpdGNoKGcpe2Nhc2UgMTplPWFbYS5sZW5ndGgtMV0saCs9YihlPj4yKSxoKz1iKGU8PDQmNjMpLGgrPVwiPT1cIjticmVhaztjYXNlIDI6ZT0oYVthLmxlbmd0aC0yXTw8OCkrYVthLmxlbmd0aC0xXSxoKz1iKGU+PjEwKSxoKz1iKGU+PjQmNjMpLGgrPWIoZTw8MiY2MyksaCs9XCI9XCJ9cmV0dXJuIGh9dmFyIGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxmPVwiK1wiLmNoYXJDb2RlQXQoMCksZz1cIi9cIi5jaGFyQ29kZUF0KDApLGg9XCIwXCIuY2hhckNvZGVBdCgwKSxpPVwiYVwiLmNoYXJDb2RlQXQoMCksaj1cIkFcIi5jaGFyQ29kZUF0KDApLGs9XCItXCIuY2hhckNvZGVBdCgwKSxsPVwiX1wiLmNoYXJDb2RlQXQoMCk7YS50b0J5dGVBcnJheT1jLGEuZnJvbUJ5dGVBcnJheT1kfSh2b2lkIDA9PT1jP3RoaXMuYmFzZTY0anM9e306Yyl9LHt9XSwyOltmdW5jdGlvbihhLGIsYyl7fSx7fV0sMzpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihiKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKCl7ZnVuY3Rpb24gYSgpe310cnl7dmFyIGI9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIGIuZm9vPWZ1bmN0aW9uKCl7cmV0dXJuIDQyfSxiLmNvbnN0cnVjdG9yPWEsNDI9PT1iLmZvbygpJiZiLmNvbnN0cnVjdG9yPT09YSYmXCJmdW5jdGlvblwiPT10eXBlb2YgYi5zdWJhcnJheSYmMD09PWIuc3ViYXJyYXkoMSwxKS5ieXRlTGVuZ3RofWNhdGNoKGEpe3JldHVybiExfX1mdW5jdGlvbiBlKCl7cmV0dXJuIGYuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gZihhKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGY/KGYuVFlQRURfQVJSQVlfU1VQUE9SVHx8KHRoaXMubGVuZ3RoPTAsdGhpcy5wYXJlbnQ9dm9pZCAwKSxcIm51bWJlclwiPT10eXBlb2YgYT9nKHRoaXMsYSk6XCJzdHJpbmdcIj09dHlwZW9mIGE/aCh0aGlzLGEsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTpcInV0ZjhcIik6aSh0aGlzLGEpKTphcmd1bWVudHMubGVuZ3RoPjE/bmV3IGYoYSxhcmd1bWVudHNbMV0pOm5ldyBmKGEpfWZ1bmN0aW9uIGcoYSxiKXtpZihhPXAoYSxiPDA/MDowfHEoYikpLCFmLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciBjPTA7YzxiO2MrKylhW2NdPTA7cmV0dXJuIGF9ZnVuY3Rpb24gaChhLGIsYyl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGMmJlwiXCIhPT1jfHwoYz1cInV0ZjhcIiksYT1wKGEsMHxzKGIsYykpLGEud3JpdGUoYixjKSxhfWZ1bmN0aW9uIGkoYSxiKXtpZihmLmlzQnVmZmVyKGIpKXJldHVybiBqKGEsYik7aWYoWShiKSlyZXR1cm4gayhhLGIpO2lmKG51bGw9PWIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm11c3Qgc3RhcnQgd2l0aCBudW1iZXIsIGJ1ZmZlciwgYXJyYXkgb3Igc3RyaW5nXCIpO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlcil7aWYoYi5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gbChhLGIpO2lmKGIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gbShhLGIpfXJldHVybiBiLmxlbmd0aD9uKGEsYik6byhhLGIpfWZ1bmN0aW9uIGooYSxiKXt2YXIgYz0wfHEoYi5sZW5ndGgpO3JldHVybiBhPXAoYSxjKSxiLmNvcHkoYSwwLDAsYyksYX1mdW5jdGlvbiBrKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTthPXAoYSxjKTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlhW2RdPTI1NSZiW2RdO3JldHVybiBhfWZ1bmN0aW9uIGwoYSxiKXt2YXIgYz0wfHEoYi5sZW5ndGgpO2E9cChhLGMpO2Zvcih2YXIgZD0wO2Q8YztkKz0xKWFbZF09MjU1JmJbZF07cmV0dXJuIGF9ZnVuY3Rpb24gbShhLGIpe3JldHVybiBmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGIuYnl0ZUxlbmd0aCxhPWYuX2F1Z21lbnQobmV3IFVpbnQ4QXJyYXkoYikpKTphPWwoYSxuZXcgVWludDhBcnJheShiKSksYX1mdW5jdGlvbiBuKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTthPXAoYSxjKTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlhW2RdPTI1NSZiW2RdO3JldHVybiBhfWZ1bmN0aW9uIG8oYSxiKXt2YXIgYyxkPTA7XCJCdWZmZXJcIj09PWIudHlwZSYmWShiLmRhdGEpJiYoYz1iLmRhdGEsZD0wfHEoYy5sZW5ndGgpKSxhPXAoYSxkKTtmb3IodmFyIGU9MDtlPGQ7ZSs9MSlhW2VdPTI1NSZjW2VdO3JldHVybiBhfWZ1bmN0aW9uIHAoYSxiKXtyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyhhPWYuX2F1Z21lbnQobmV3IFVpbnQ4QXJyYXkoYikpLGEuX19wcm90b19fPWYucHJvdG90eXBlKTooYS5sZW5ndGg9YixhLl9pc0J1ZmZlcj0hMCksMCE9PWImJmI8PWYucG9vbFNpemU+Pj4xJiYoYS5wYXJlbnQ9WiksYX1mdW5jdGlvbiBxKGEpe2lmKGE+PWUoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHhcIitlKCkudG9TdHJpbmcoMTYpK1wiIGJ5dGVzXCIpO3JldHVybiAwfGF9ZnVuY3Rpb24gcihhLGIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcihhLGIpO3ZhciBjPW5ldyBmKGEsYik7cmV0dXJuIGRlbGV0ZSBjLnBhcmVudCxjfWZ1bmN0aW9uIHMoYSxiKXtcInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9XCJcIithKTt2YXIgYz1hLmxlbmd0aDtpZigwPT09YylyZXR1cm4gMDtmb3IodmFyIGQ9ITE7Oylzd2l0Y2goYil7Y2FzZVwiYXNjaWlcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJyYXdcIjpjYXNlXCJyYXdzXCI6cmV0dXJuIGM7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIFIoYSkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAyKmM7Y2FzZVwiaGV4XCI6cmV0dXJuIGM+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBVKGEpLmxlbmd0aDtkZWZhdWx0OmlmKGQpcmV0dXJuIFIoYSkubGVuZ3RoO2I9KFwiXCIrYikudG9Mb3dlckNhc2UoKSxkPSEwfX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD0hMTtpZihifD0wLGM9dm9pZCAwPT09Y3x8Yz09PTEvMD90aGlzLmxlbmd0aDowfGMsYXx8KGE9XCJ1dGY4XCIpLGI8MCYmKGI9MCksYz50aGlzLmxlbmd0aCYmKGM9dGhpcy5sZW5ndGgpLGM8PWIpcmV0dXJuXCJcIjtmb3IoOzspc3dpdGNoKGEpe2Nhc2VcImhleFwiOnJldHVybiBGKHRoaXMsYixjKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gQih0aGlzLGIsYyk7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gRCh0aGlzLGIsYyk7Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIEUodGhpcyxiLGMpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBBKHRoaXMsYixjKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gRyh0aGlzLGIsYyk7ZGVmYXVsdDppZihkKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIithKTthPShhK1wiXCIpLnRvTG93ZXJDYXNlKCksZD0hMH19ZnVuY3Rpb24gdShhLGIsYyxkKXtjPU51bWJlcihjKXx8MDt2YXIgZT1hLmxlbmd0aC1jO2Q/KGQ9TnVtYmVyKGQpKT5lJiYoZD1lKTpkPWU7dmFyIGY9Yi5sZW5ndGg7aWYoZiUyIT0wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGV4IHN0cmluZ1wiKTtkPmYvMiYmKGQ9Zi8yKTtmb3IodmFyIGc9MDtnPGQ7ZysrKXt2YXIgaD1wYXJzZUludChiLnN1YnN0cigyKmcsMiksMTYpO2lmKGlzTmFOKGgpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGV4IHN0cmluZ1wiKTthW2MrZ109aH1yZXR1cm4gZ31mdW5jdGlvbiB2KGEsYixjLGQpe3JldHVybiBWKFIoYixhLmxlbmd0aC1jKSxhLGMsZCl9ZnVuY3Rpb24gdyhhLGIsYyxkKXtyZXR1cm4gVihTKGIpLGEsYyxkKX1mdW5jdGlvbiB4KGEsYixjLGQpe3JldHVybiB3KGEsYixjLGQpfWZ1bmN0aW9uIHkoYSxiLGMsZCl7cmV0dXJuIFYoVShiKSxhLGMsZCl9ZnVuY3Rpb24geihhLGIsYyxkKXtyZXR1cm4gVihUKGIsYS5sZW5ndGgtYyksYSxjLGQpfWZ1bmN0aW9uIEEoYSxiLGMpe3JldHVybiAwPT09YiYmYz09PWEubGVuZ3RoP1cuZnJvbUJ5dGVBcnJheShhKTpXLmZyb21CeXRlQXJyYXkoYS5zbGljZShiLGMpKX1mdW5jdGlvbiBCKGEsYixjKXtjPU1hdGgubWluKGEubGVuZ3RoLGMpO2Zvcih2YXIgZD1bXSxlPWI7ZTxjOyl7dmFyIGY9YVtlXSxnPW51bGwsaD1mPjIzOT80OmY+MjIzPzM6Zj4xOTE/MjoxO2lmKGUraDw9Yyl7dmFyIGksaixrLGw7c3dpdGNoKGgpe2Nhc2UgMTpmPDEyOCYmKGc9Zik7YnJlYWs7Y2FzZSAyOmk9YVtlKzFdLDEyOD09KDE5MiZpKSYmKGw9KDMxJmYpPDw2fDYzJmkpPjEyNyYmKGc9bCk7YnJlYWs7Y2FzZSAzOmk9YVtlKzFdLGo9YVtlKzJdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJmopJiYobD0oMTUmZik8PDEyfCg2MyZpKTw8Nnw2MyZqKT4yMDQ3JiYobDw1NTI5Nnx8bD41NzM0MykmJihnPWwpO2JyZWFrO2Nhc2UgNDppPWFbZSsxXSxqPWFbZSsyXSxrPWFbZSszXSwxMjg9PSgxOTImaSkmJjEyOD09KDE5MiZqKSYmMTI4PT0oMTkyJmspJiYobD0oMTUmZik8PDE4fCg2MyZpKTw8MTJ8KDYzJmopPDw2fDYzJmspPjY1NTM1JiZsPDExMTQxMTImJihnPWwpfX1udWxsPT09Zz8oZz02NTUzMyxoPTEpOmc+NjU1MzUmJihnLT02NTUzNixkLnB1c2goZz4+PjEwJjEwMjN8NTUyOTYpLGc9NTYzMjB8MTAyMyZnKSxkLnB1c2goZyksZSs9aH1yZXR1cm4gQyhkKX1mdW5jdGlvbiBDKGEpe3ZhciBiPWEubGVuZ3RoO2lmKGI8PSQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGEpO2Zvcih2YXIgYz1cIlwiLGQ9MDtkPGI7KWMrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGEuc2xpY2UoZCxkKz0kKSk7cmV0dXJuIGN9ZnVuY3Rpb24gRChhLGIsYyl7dmFyIGQ9XCJcIjtjPU1hdGgubWluKGEubGVuZ3RoLGMpO2Zvcih2YXIgZT1iO2U8YztlKyspZCs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmYVtlXSk7cmV0dXJuIGR9ZnVuY3Rpb24gRShhLGIsYyl7dmFyIGQ9XCJcIjtjPU1hdGgubWluKGEubGVuZ3RoLGMpO2Zvcih2YXIgZT1iO2U8YztlKyspZCs9U3RyaW5nLmZyb21DaGFyQ29kZShhW2VdKTtyZXR1cm4gZH1mdW5jdGlvbiBGKGEsYixjKXt2YXIgZD1hLmxlbmd0aDsoIWJ8fGI8MCkmJihiPTApLCghY3x8YzwwfHxjPmQpJiYoYz1kKTtmb3IodmFyIGU9XCJcIixmPWI7ZjxjO2YrKyllKz1RKGFbZl0pO3JldHVybiBlfWZ1bmN0aW9uIEcoYSxiLGMpe2Zvcih2YXIgZD1hLnNsaWNlKGIsYyksZT1cIlwiLGY9MDtmPGQubGVuZ3RoO2YrPTIpZSs9U3RyaW5nLmZyb21DaGFyQ29kZShkW2ZdKzI1NipkW2YrMV0pO3JldHVybiBlfWZ1bmN0aW9uIEgoYSxiLGMpe2lmKGElMSE9MHx8YTwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwib2Zmc2V0IGlzIG5vdCB1aW50XCIpO2lmKGErYj5jKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aFwiKX1mdW5jdGlvbiBJKGEsYixjLGQsZSxnKXtpZighZi5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYnVmZmVyIG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2VcIik7aWYoYj5lfHxiPGcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ2YWx1ZSBpcyBvdXQgb2YgYm91bmRzXCIpO2lmKGMrZD5hLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBKKGEsYixjLGQpe2I8MCYmKGI9NjU1MzUrYisxKTtmb3IodmFyIGU9MCxmPU1hdGgubWluKGEubGVuZ3RoLWMsMik7ZTxmO2UrKylhW2MrZV09KGImMjU1PDw4KihkP2U6MS1lKSk+Pj44KihkP2U6MS1lKX1mdW5jdGlvbiBLKGEsYixjLGQpe2I8MCYmKGI9NDI5NDk2NzI5NStiKzEpO2Zvcih2YXIgZT0wLGY9TWF0aC5taW4oYS5sZW5ndGgtYyw0KTtlPGY7ZSsrKWFbYytlXT1iPj4+OCooZD9lOjMtZSkmMjU1fWZ1bmN0aW9uIEwoYSxiLGMsZCxlLGYpe2lmKGI+ZXx8YjxmKXRocm93IG5ldyBSYW5nZUVycm9yKFwidmFsdWUgaXMgb3V0IG9mIGJvdW5kc1wiKTtpZihjK2Q+YS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYoYzwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwiaW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIE0oYSxiLGMsZCxlKXtyZXR1cm4gZXx8TChhLGIsYyw0LDMuNDAyODIzNDY2Mzg1Mjg4NmUzOCwtMy40MDI4MjM0NjYzODUyODg2ZTM4KSxYLndyaXRlKGEsYixjLGQsMjMsNCksYys0fWZ1bmN0aW9uIE4oYSxiLGMsZCxlKXtyZXR1cm4gZXx8TChhLGIsYyw4LDEuNzk3NjkzMTM0ODYyMzE1N2UzMDgsLTEuNzk3NjkzMTM0ODYyMzE1N2UzMDgpLFgud3JpdGUoYSxiLGMsZCw1Miw4KSxjKzh9ZnVuY3Rpb24gTyhhKXtpZihhPVAoYSkucmVwbGFjZShhYSxcIlwiKSxhLmxlbmd0aDwyKXJldHVyblwiXCI7Zm9yKDthLmxlbmd0aCU0IT0wOylhKz1cIj1cIjtyZXR1cm4gYX1mdW5jdGlvbiBQKGEpe3JldHVybiBhLnRyaW0/YS50cmltKCk6YS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLFwiXCIpfWZ1bmN0aW9uIFEoYSl7cmV0dXJuIGE8MTY/XCIwXCIrYS50b1N0cmluZygxNik6YS50b1N0cmluZygxNil9ZnVuY3Rpb24gUihhLGIpe2I9Ynx8MS8wO2Zvcih2YXIgYyxkPWEubGVuZ3RoLGU9bnVsbCxmPVtdLGc9MDtnPGQ7ZysrKXtpZigoYz1hLmNoYXJDb2RlQXQoZykpPjU1Mjk1JiZjPDU3MzQ0KXtpZighZSl7aWYoYz41NjMxOSl7KGItPTMpPi0xJiZmLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKGcrMT09PWQpeyhiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1lPWM7Y29udGludWV9aWYoYzw1NjMyMCl7KGItPTMpPi0xJiZmLnB1c2goMjM5LDE5MSwxODkpLGU9Yztjb250aW51ZX1jPTY1NTM2KyhlLTU1Mjk2PDwxMHxjLTU2MzIwKX1lbHNlIGUmJihiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtpZihlPW51bGwsYzwxMjgpe2lmKChiLT0xKTwwKWJyZWFrO2YucHVzaChjKX1lbHNlIGlmKGM8MjA0OCl7aWYoKGItPTIpPDApYnJlYWs7Zi5wdXNoKGM+PjZ8MTkyLDYzJmN8MTI4KX1lbHNlIGlmKGM8NjU1MzYpe2lmKChiLT0zKTwwKWJyZWFrO2YucHVzaChjPj4xMnwyMjQsYz4+NiY2M3wxMjgsNjMmY3wxMjgpfWVsc2V7aWYoIShjPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29kZSBwb2ludFwiKTtpZigoYi09NCk8MClicmVhaztmLnB1c2goYz4+MTh8MjQwLGM+PjEyJjYzfDEyOCxjPj42JjYzfDEyOCw2MyZjfDEyOCl9fXJldHVybiBmfWZ1bmN0aW9uIFMoYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyliLnB1c2goMjU1JmEuY2hhckNvZGVBdChjKSk7cmV0dXJuIGJ9ZnVuY3Rpb24gVChhLGIpe2Zvcih2YXIgYyxkLGUsZj1bXSxnPTA7ZzxhLmxlbmd0aCYmISgoYi09Mik8MCk7ZysrKWM9YS5jaGFyQ29kZUF0KGcpLGQ9Yz4+OCxlPWMlMjU2LGYucHVzaChlKSxmLnB1c2goZCk7cmV0dXJuIGZ9ZnVuY3Rpb24gVShhKXtyZXR1cm4gVy50b0J5dGVBcnJheShPKGEpKX1mdW5jdGlvbiBWKGEsYixjLGQpe2Zvcih2YXIgZT0wO2U8ZCYmIShlK2M+PWIubGVuZ3RofHxlPj1hLmxlbmd0aCk7ZSsrKWJbZStjXT1hW2VdO3JldHVybiBlfXZhciBXPWEoXCJiYXNlNjQtanNcIiksWD1hKFwiaWVlZTc1NFwiKSxZPWEoXCJpc2FycmF5XCIpO2MuQnVmZmVyPWYsYy5TbG93QnVmZmVyPXIsYy5JTlNQRUNUX01BWF9CWVRFUz01MCxmLnBvb2xTaXplPTgxOTI7dmFyIFo9e307Zi5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMCE9PWIuVFlQRURfQVJSQVlfU1VQUE9SVD9iLlRZUEVEX0FSUkFZX1NVUFBPUlQ6ZCgpLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8oZi5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGYuX19wcm90b19fPVVpbnQ4QXJyYXkpOihmLnByb3RvdHlwZS5sZW5ndGg9dm9pZCAwLGYucHJvdG90eXBlLnBhcmVudD12b2lkIDApLGYuaXNCdWZmZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIShudWxsPT1hfHwhYS5faXNCdWZmZXIpfSxmLmNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtpZighZi5pc0J1ZmZlcihhKXx8IWYuaXNCdWZmZXIoYikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnNcIik7aWYoYT09PWIpcmV0dXJuIDA7Zm9yKHZhciBjPWEubGVuZ3RoLGQ9Yi5sZW5ndGgsZT0wLGc9TWF0aC5taW4oYyxkKTtlPGcmJmFbZV09PT1iW2VdOykrK2U7cmV0dXJuIGUhPT1nJiYoYz1hW2VdLGQ9YltlXSksYzxkPy0xOmQ8Yz8xOjB9LGYuaXNFbmNvZGluZz1mdW5jdGlvbihhKXtzd2l0Y2goU3RyaW5nKGEpLnRvTG93ZXJDYXNlKCkpe2Nhc2VcImhleFwiOmNhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOmNhc2VcImFzY2lpXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwiYmFzZTY0XCI6Y2FzZVwicmF3XCI6Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LGYuY29uY2F0PWZ1bmN0aW9uKGEsYil7aWYoIVkoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImxpc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzLlwiKTtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG5ldyBmKDApO3ZhciBjO2lmKHZvaWQgMD09PWIpZm9yKGI9MCxjPTA7YzxhLmxlbmd0aDtjKyspYis9YVtjXS5sZW5ndGg7dmFyIGQ9bmV3IGYoYiksZT0wO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBnPWFbY107Zy5jb3B5KGQsZSksZSs9Zy5sZW5ndGh9cmV0dXJuIGR9LGYuYnl0ZUxlbmd0aD1zLGYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PWE/XCJcIjowPT09YXJndW1lbnRzLmxlbmd0aD9CKHRoaXMsMCxhKTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGEpe2lmKCFmLmlzQnVmZmVyKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09YXx8MD09PWYuY29tcGFyZSh0aGlzLGEpfSxmLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGE9XCJcIixiPWMuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihhPXRoaXMudG9TdHJpbmcoXCJoZXhcIiwwLGIpLm1hdGNoKC8uezJ9L2cpLmpvaW4oXCIgXCIpLHRoaXMubGVuZ3RoPmImJihhKz1cIiAuLi4gXCIpKSxcIjxCdWZmZXIgXCIrYStcIj5cIn0sZi5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihhKXtpZighZi5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PWE/MDpmLmNvbXBhcmUodGhpcyxhKX0sZi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGMpe2Zvcih2YXIgZD0tMSxlPTA7YytlPGEubGVuZ3RoO2UrKylpZihhW2MrZV09PT1iWy0xPT09ZD8wOmUtZF0pe2lmKC0xPT09ZCYmKGQ9ZSksZS1kKzE9PT1iLmxlbmd0aClyZXR1cm4gYytkfWVsc2UgZD0tMTtyZXR1cm4tMX1pZihiPjIxNDc0ODM2NDc/Yj0yMTQ3NDgzNjQ3OmI8LTIxNDc0ODM2NDgmJihiPS0yMTQ3NDgzNjQ4KSxiPj49MCwwPT09dGhpcy5sZW5ndGgpcmV0dXJuLTE7aWYoYj49dGhpcy5sZW5ndGgpcmV0dXJuLTE7aWYoYjwwJiYoYj1NYXRoLm1heCh0aGlzLmxlbmd0aCtiLDApKSxcInN0cmluZ1wiPT10eXBlb2YgYSlyZXR1cm4gMD09PWEubGVuZ3RoPy0xOlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsYSxiKTtpZihmLmlzQnVmZmVyKGEpKXJldHVybiBjKHRoaXMsYSxiKTtpZihcIm51bWJlclwiPT10eXBlb2YgYSlyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUJiZcImZ1bmN0aW9uXCI9PT1VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLGEsYik6Yyh0aGlzLFthXSxiKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfSxmLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGNvbnNvbGUubG9nKFwiLmdldCgpIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB1c2luZyBhcnJheSBpbmRleGVzIGluc3RlYWQuXCIpLHRoaXMucmVhZFVJbnQ4KGEpfSxmLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gY29uc29sZS5sb2coXCIuc2V0KCkgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHVzaW5nIGFycmF5IGluZGV4ZXMgaW5zdGVhZC5cIiksdGhpcy53cml0ZVVJbnQ4KGEsYil9LGYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGEsYixjLGQpe2lmKHZvaWQgMD09PWIpZD1cInV0ZjhcIixjPXRoaXMubGVuZ3RoLGI9MDtlbHNlIGlmKHZvaWQgMD09PWMmJlwic3RyaW5nXCI9PXR5cGVvZiBiKWQ9YixjPXRoaXMubGVuZ3RoLGI9MDtlbHNlIGlmKGlzRmluaXRlKGIpKWJ8PTAsaXNGaW5pdGUoYyk/KGN8PTAsdm9pZCAwPT09ZCYmKGQ9XCJ1dGY4XCIpKTooZD1jLGM9dm9pZCAwKTtlbHNle3ZhciBlPWQ7ZD1iLGI9MHxjLGM9ZX12YXIgZj10aGlzLmxlbmd0aC1iO2lmKCh2b2lkIDA9PT1jfHxjPmYpJiYoYz1mKSxhLmxlbmd0aD4wJiYoYzwwfHxiPDApfHxiPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiYXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIik7ZHx8KGQ9XCJ1dGY4XCIpO2Zvcih2YXIgZz0hMTs7KXN3aXRjaChkKXtjYXNlXCJoZXhcIjpyZXR1cm4gdSh0aGlzLGEsYixjKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gdih0aGlzLGEsYixjKTtjYXNlXCJhc2NpaVwiOnJldHVybiB3KHRoaXMsYSxiLGMpO2Nhc2VcImJpbmFyeVwiOnJldHVybiB4KHRoaXMsYSxiLGMpO2Nhc2VcImJhc2U2NFwiOnJldHVybiB5KHRoaXMsYSxiLGMpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiB6KHRoaXMsYSxiLGMpO2RlZmF1bHQ6aWYoZyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrZCk7ZD0oXCJcIitkKS50b0xvd2VyQ2FzZSgpLGc9ITB9fSxmLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcIkJ1ZmZlclwiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyICQ9NDA5NjtmLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMubGVuZ3RoO2E9fn5hLGI9dm9pZCAwPT09Yj9jOn5+YixhPDA/KGErPWMpPDAmJihhPTApOmE+YyYmKGE9YyksYjwwPyhiKz1jKTwwJiYoYj0wKTpiPmMmJihiPWMpLGI8YSYmKGI9YSk7dmFyIGQ7aWYoZi5UWVBFRF9BUlJBWV9TVVBQT1JUKWQ9Zi5fYXVnbWVudCh0aGlzLnN1YmFycmF5KGEsYikpO2Vsc2V7dmFyIGU9Yi1hO2Q9bmV3IGYoZSx2b2lkIDApO2Zvcih2YXIgZz0wO2c8ZTtnKyspZFtnXT10aGlzW2crYV19cmV0dXJuIGQubGVuZ3RoJiYoZC5wYXJlbnQ9dGhpcy5wYXJlbnR8fHRoaXMpLGR9LGYucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oYSxiLGMpe2F8PTAsYnw9MCxjfHxIKGEsYix0aGlzLmxlbmd0aCk7Zm9yKHZhciBkPXRoaXNbYV0sZT0xLGY9MDsrK2Y8YiYmKGUqPTI1Nik7KWQrPXRoaXNbYStmXSplO3JldHVybiBkfSxmLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGEsYixjKXthfD0wLGJ8PTAsY3x8SChhLGIsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZD10aGlzW2ErLS1iXSxlPTE7Yj4wJiYoZSo9MjU2KTspZCs9dGhpc1thKy0tYl0qZTtyZXR1cm4gZH0sZi5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwxLHRoaXMubGVuZ3RoKSx0aGlzW2FdfSxmLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDIsdGhpcy5sZW5ndGgpLHRoaXNbYV18dGhpc1thKzFdPDw4fSxmLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDIsdGhpcy5sZW5ndGgpLHRoaXNbYV08PDh8dGhpc1thKzFdfSxmLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2FdfHRoaXNbYSsxXTw8OHx0aGlzW2ErMl08PDE2KSsxNjc3NzIxNip0aGlzW2ErM119LGYucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1thXSsodGhpc1thKzFdPDwxNnx0aGlzW2ErMl08PDh8dGhpc1thKzNdKX0sZi5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGEsYixjKXthfD0wLGJ8PTAsY3x8SChhLGIsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZD10aGlzW2FdLGU9MSxmPTA7KytmPGImJihlKj0yNTYpOylkKz10aGlzW2ErZl0qZTtyZXR1cm4gZSo9MTI4LGQ+PWUmJihkLT1NYXRoLnBvdygyLDgqYikpLGR9LGYucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihhLGIsYyl7YXw9MCxifD0wLGN8fEgoYSxiLHRoaXMubGVuZ3RoKTtmb3IodmFyIGQ9YixlPTEsZj10aGlzW2ErLS1kXTtkPjAmJihlKj0yNTYpOylmKz10aGlzW2ErLS1kXSplO3JldHVybiBlKj0xMjgsZj49ZSYmKGYtPU1hdGgucG93KDIsOCpiKSksZn0sZi5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2FdPy0xKigyNTUtdGhpc1thXSsxKTp0aGlzW2FdfSxmLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihhLGIpe2J8fEgoYSwyLHRoaXMubGVuZ3RoKTt2YXIgYz10aGlzW2FdfHRoaXNbYSsxXTw8ODtyZXR1cm4gMzI3NjgmYz80Mjk0OTAxNzYwfGM6Y30sZi5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oYSxiKXtifHxIKGEsMix0aGlzLmxlbmd0aCk7dmFyIGM9dGhpc1thKzFdfHRoaXNbYV08PDg7cmV0dXJuIDMyNzY4JmM/NDI5NDkwMTc2MHxjOmN9LGYucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSx0aGlzW2FdfHRoaXNbYSsxXTw8OHx0aGlzW2ErMl08PDE2fHRoaXNbYSszXTw8MjR9LGYucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSx0aGlzW2FdPDwyNHx0aGlzW2ErMV08PDE2fHRoaXNbYSsyXTw8OHx0aGlzW2ErM119LGYucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSxYLnJlYWQodGhpcyxhLCEwLDIzLDQpfSxmLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksWC5yZWFkKHRoaXMsYSwhMSwyMyw0KX0sZi5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw4LHRoaXMubGVuZ3RoKSxYLnJlYWQodGhpcyxhLCEwLDUyLDgpfSxmLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDgsdGhpcy5sZW5ndGgpLFgucmVhZCh0aGlzLGEsITEsNTIsOCl9LGYucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGEsYixjLGQpe2E9K2EsYnw9MCxjfD0wLGR8fEkodGhpcyxhLGIsYyxNYXRoLnBvdygyLDgqYyksMCk7dmFyIGU9MSxmPTA7Zm9yKHRoaXNbYl09MjU1JmE7KytmPGMmJihlKj0yNTYpOyl0aGlzW2IrZl09YS9lJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihhLGIsYyxkKXthPSthLGJ8PTAsY3w9MCxkfHxJKHRoaXMsYSxiLGMsTWF0aC5wb3coMiw4KmMpLDApO3ZhciBlPWMtMSxmPTE7Zm9yKHRoaXNbYitlXT0yNTUmYTstLWU+PTAmJihmKj0yNTYpOyl0aGlzW2IrZV09YS9mJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMSwyNTUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoYT1NYXRoLmZsb29yKGEpKSx0aGlzW2JdPTI1NSZhLGIrMX0sZi5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsNjU1MzUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPTI1NSZhLHRoaXNbYisxXT1hPj4+OCk6Sih0aGlzLGEsYiwhMCksYisyfSxmLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMiw2NTUzNSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjgsdGhpc1tiKzFdPTI1NSZhKTpKKHRoaXMsYSxiLCExKSxiKzJ9LGYucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiw0LDQyOTQ5NjcyOTUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2IrM109YT4+PjI0LHRoaXNbYisyXT1hPj4+MTYsdGhpc1tiKzFdPWE+Pj44LHRoaXNbYl09MjU1JmEpOksodGhpcyxhLGIsITApLGIrNH0sZi5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDQsNDI5NDk2NzI5NSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjI0LHRoaXNbYisxXT1hPj4+MTYsdGhpc1tiKzJdPWE+Pj44LHRoaXNbYiszXT0yNTUmYSk6Syh0aGlzLGEsYiwhMSksYis0fSxmLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGEsYixjLGQpe2lmKGE9K2EsYnw9MCwhZCl7dmFyIGU9TWF0aC5wb3coMiw4KmMtMSk7SSh0aGlzLGEsYixjLGUtMSwtZSl9dmFyIGY9MCxnPTEsaD1hPDA/MTowO2Zvcih0aGlzW2JdPTI1NSZhOysrZjxjJiYoZyo9MjU2KTspdGhpc1tiK2ZdPShhL2c+PjApLWgmMjU1O3JldHVybiBiK2N9LGYucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYT0rYSxifD0wLCFkKXt2YXIgZT1NYXRoLnBvdygyLDgqYy0xKTtJKHRoaXMsYSxiLGMsZS0xLC1lKX12YXIgZj1jLTEsZz0xLGg9YTwwPzE6MDtmb3IodGhpc1tiK2ZdPTI1NSZhOy0tZj49MCYmKGcqPTI1Nik7KXRoaXNbYitmXT0oYS9nPj4wKS1oJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwxLDEyNywtMTI4KSxmLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChhPU1hdGguZmxvb3IoYSkpLGE8MCYmKGE9MjU1K2ErMSksdGhpc1tiXT0yNTUmYSxiKzF9LGYucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsMzI3NjcsLTMyNzY4KSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09MjU1JmEsdGhpc1tiKzFdPWE+Pj44KTpKKHRoaXMsYSxiLCEwKSxiKzJ9LGYucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsMzI3NjcsLTMyNzY4KSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjgsdGhpc1tiKzFdPTI1NSZhKTpKKHRoaXMsYSxiLCExKSxiKzJ9LGYucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPTI1NSZhLHRoaXNbYisxXT1hPj4+OCx0aGlzW2IrMl09YT4+PjE2LHRoaXNbYiszXT1hPj4+MjQpOksodGhpcyxhLGIsITApLGIrNH0sZi5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxhPDAmJihhPTQyOTQ5NjcyOTUrYSsxKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjI0LHRoaXNbYisxXT1hPj4+MTYsdGhpc1tiKzJdPWE+Pj44LHRoaXNbYiszXT0yNTUmYSk6Syh0aGlzLGEsYiwhMSksYis0fSxmLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBNKHRoaXMsYSxiLCEwLGMpfSxmLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBNKHRoaXMsYSxiLCExLGMpfSxmLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTih0aGlzLGEsYiwhMCxjKX0sZi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIE4odGhpcyxhLGIsITEsYyl9LGYucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoY3x8KGM9MCksZHx8MD09PWR8fChkPXRoaXMubGVuZ3RoKSxiPj1hLmxlbmd0aCYmKGI9YS5sZW5ndGgpLGJ8fChiPTApLGQ+MCYmZDxjJiYoZD1jKSxkPT09YylyZXR1cm4gMDtpZigwPT09YS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihiPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKGM8MHx8Yz49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKGQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzXCIpO2Q+dGhpcy5sZW5ndGgmJihkPXRoaXMubGVuZ3RoKSxhLmxlbmd0aC1iPGQtYyYmKGQ9YS5sZW5ndGgtYitjKTt2YXIgZSxnPWQtYztpZih0aGlzPT09YSYmYzxiJiZiPGQpZm9yKGU9Zy0xO2U+PTA7ZS0tKWFbZStiXT10aGlzW2UrY107ZWxzZSBpZihnPDFlM3x8IWYuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoZT0wO2U8ZztlKyspYVtlK2JdPXRoaXNbZStjXTtlbHNlIGEuX3NldCh0aGlzLnN1YmFycmF5KGMsYytnKSxiKTtyZXR1cm4gZ30sZi5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihhLGIsYyl7aWYoYXx8KGE9MCksYnx8KGI9MCksY3x8KGM9dGhpcy5sZW5ndGgpLGM8Yil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImVuZCA8IHN0YXJ0XCIpO2lmKGMhPT1iJiYwIT09dGhpcy5sZW5ndGgpe2lmKGI8MHx8Yj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKGM8MHx8Yz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImVuZCBvdXQgb2YgYm91bmRzXCIpO3ZhciBkO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBhKWZvcihkPWI7ZDxjO2QrKyl0aGlzW2RdPWE7ZWxzZXt2YXIgZT1SKGEudG9TdHJpbmcoKSksZj1lLmxlbmd0aDtmb3IoZD1iO2Q8YztkKyspdGhpc1tkXT1lW2QlZl19cmV0dXJuIHRoaXN9fSxmLnByb3RvdHlwZS50b0FycmF5QnVmZmVyPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXkpe2lmKGYuVFlQRURfQVJSQVlfU1VQUE9SVClyZXR1cm4gbmV3IGYodGhpcykuYnVmZmVyO2Zvcih2YXIgYT1uZXcgVWludDhBcnJheSh0aGlzLmxlbmd0aCksYj0wLGM9YS5sZW5ndGg7YjxjO2IrPTEpYVtiXT10aGlzW2JdO3JldHVybiBhLmJ1ZmZlcn10aHJvdyBuZXcgVHlwZUVycm9yKFwiQnVmZmVyLnRvQXJyYXlCdWZmZXIgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIil9O3ZhciBfPWYucHJvdG90eXBlO2YuX2F1Z21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY29uc3RydWN0b3I9ZixhLl9pc0J1ZmZlcj0hMCxhLl9zZXQ9YS5zZXQsYS5nZXQ9Xy5nZXQsYS5zZXQ9Xy5zZXQsYS53cml0ZT1fLndyaXRlLGEudG9TdHJpbmc9Xy50b1N0cmluZyxhLnRvTG9jYWxlU3RyaW5nPV8udG9TdHJpbmcsYS50b0pTT049Xy50b0pTT04sYS5lcXVhbHM9Xy5lcXVhbHMsYS5jb21wYXJlPV8uY29tcGFyZSxhLmluZGV4T2Y9Xy5pbmRleE9mLGEuY29weT1fLmNvcHksYS5zbGljZT1fLnNsaWNlLGEucmVhZFVJbnRMRT1fLnJlYWRVSW50TEUsYS5yZWFkVUludEJFPV8ucmVhZFVJbnRCRSxhLnJlYWRVSW50OD1fLnJlYWRVSW50OCxhLnJlYWRVSW50MTZMRT1fLnJlYWRVSW50MTZMRSxhLnJlYWRVSW50MTZCRT1fLnJlYWRVSW50MTZCRSxhLnJlYWRVSW50MzJMRT1fLnJlYWRVSW50MzJMRSxhLnJlYWRVSW50MzJCRT1fLnJlYWRVSW50MzJCRSxhLnJlYWRJbnRMRT1fLnJlYWRJbnRMRSxhLnJlYWRJbnRCRT1fLnJlYWRJbnRCRSxhLnJlYWRJbnQ4PV8ucmVhZEludDgsYS5yZWFkSW50MTZMRT1fLnJlYWRJbnQxNkxFLGEucmVhZEludDE2QkU9Xy5yZWFkSW50MTZCRSxhLnJlYWRJbnQzMkxFPV8ucmVhZEludDMyTEUsYS5yZWFkSW50MzJCRT1fLnJlYWRJbnQzMkJFLGEucmVhZEZsb2F0TEU9Xy5yZWFkRmxvYXRMRSxhLnJlYWRGbG9hdEJFPV8ucmVhZEZsb2F0QkUsYS5yZWFkRG91YmxlTEU9Xy5yZWFkRG91YmxlTEUsYS5yZWFkRG91YmxlQkU9Xy5yZWFkRG91YmxlQkUsYS53cml0ZVVJbnQ4PV8ud3JpdGVVSW50OCxhLndyaXRlVUludExFPV8ud3JpdGVVSW50TEUsYS53cml0ZVVJbnRCRT1fLndyaXRlVUludEJFLGEud3JpdGVVSW50MTZMRT1fLndyaXRlVUludDE2TEUsYS53cml0ZVVJbnQxNkJFPV8ud3JpdGVVSW50MTZCRSxhLndyaXRlVUludDMyTEU9Xy53cml0ZVVJbnQzMkxFLGEud3JpdGVVSW50MzJCRT1fLndyaXRlVUludDMyQkUsYS53cml0ZUludExFPV8ud3JpdGVJbnRMRSxhLndyaXRlSW50QkU9Xy53cml0ZUludEJFLGEud3JpdGVJbnQ4PV8ud3JpdGVJbnQ4LGEud3JpdGVJbnQxNkxFPV8ud3JpdGVJbnQxNkxFLGEud3JpdGVJbnQxNkJFPV8ud3JpdGVJbnQxNkJFLGEud3JpdGVJbnQzMkxFPV8ud3JpdGVJbnQzMkxFLGEud3JpdGVJbnQzMkJFPV8ud3JpdGVJbnQzMkJFLGEud3JpdGVGbG9hdExFPV8ud3JpdGVGbG9hdExFLGEud3JpdGVGbG9hdEJFPV8ud3JpdGVGbG9hdEJFLGEud3JpdGVEb3VibGVMRT1fLndyaXRlRG91YmxlTEUsYS53cml0ZURvdWJsZUJFPV8ud3JpdGVEb3VibGVCRSxhLmZpbGw9Xy5maWxsLGEuaW5zcGVjdD1fLmluc3BlY3QsYS50b0FycmF5QnVmZmVyPV8udG9BcnJheUJ1ZmZlcixhfTt2YXIgYWE9L1teK1xcLzAtOUEtWmEtei1fXS9nfSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7XCJiYXNlNjQtanNcIjoxLGllZWU3NTQ6Nyxpc2FycmF5Ojh9XSw0OltmdW5jdGlvbihiLGMsZCl7KGZ1bmN0aW9uKGUsZil7IWZ1bmN0aW9uKGIsZSl7XCJvYmplY3RcIj09dHlwZW9mIGQmJnZvaWQgMCE9PWM/Yy5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiZhLmFtZD9hKGUpOmIuRVM2UHJvbWlzZT1lKCl9KHRoaXMsZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBhKGEpe3ZhciBiPXR5cGVvZiBhO3JldHVybiBudWxsIT09YSYmKFwib2JqZWN0XCI9PT1ifHxcImZ1bmN0aW9uXCI9PT1iKX1mdW5jdGlvbiBjKGEpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGF9ZnVuY3Rpb24gZChhKXtYPWF9ZnVuY3Rpb24gZyhhKXtZPWF9ZnVuY3Rpb24gaCgpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLm5leHRUaWNrKG0pfX1mdW5jdGlvbiBpKCl7cmV0dXJuIHZvaWQgMCE9PVc/ZnVuY3Rpb24oKXtXKG0pfTpsKCl9ZnVuY3Rpb24gaigpe3ZhciBhPTAsYj1uZXcgXyhtKSxjPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO3JldHVybiBiLm9ic2VydmUoYyx7Y2hhcmFjdGVyRGF0YTohMH0pLGZ1bmN0aW9uKCl7Yy5kYXRhPWE9KythJTJ9fWZ1bmN0aW9uIGsoKXt2YXIgYT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGEucG9ydDEub25tZXNzYWdlPW0sZnVuY3Rpb24oKXtyZXR1cm4gYS5wb3J0Mi5wb3N0TWVzc2FnZSgwKX19ZnVuY3Rpb24gbCgpe3ZhciBhPXNldFRpbWVvdXQ7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEobSwxKX19ZnVuY3Rpb24gbSgpe2Zvcih2YXIgYT0wO2E8VjthKz0yKXsoMCxjYVthXSkoY2FbYSsxXSksY2FbYV09dm9pZCAwLGNhW2ErMV09dm9pZCAwfVY9MH1mdW5jdGlvbiBuKCl7dHJ5e3ZhciBhPWIsYz1hKFwidmVydHhcIik7cmV0dXJuIFc9Yy5ydW5Pbkxvb3B8fGMucnVuT25Db250ZXh0LGkoKX1jYXRjaChhKXtyZXR1cm4gbCgpfX1mdW5jdGlvbiBvKGEsYil7dmFyIGM9YXJndW1lbnRzLGQ9dGhpcyxlPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHEpO3ZvaWQgMD09PWVbZWFdJiZKKGUpO3ZhciBmPWQuX3N0YXRlO3JldHVybiBmP2Z1bmN0aW9uKCl7dmFyIGE9Y1tmLTFdO1koZnVuY3Rpb24oKXtyZXR1cm4gRyhmLGUsYSxkLl9yZXN1bHQpfSl9KCk6QyhkLGUsYSxiKSxlfWZ1bmN0aW9uIHAoYSl7dmFyIGI9dGhpcztpZihhJiZcIm9iamVjdFwiPT10eXBlb2YgYSYmYS5jb25zdHJ1Y3Rvcj09PWIpcmV0dXJuIGE7dmFyIGM9bmV3IGIocSk7cmV0dXJuIHkoYyxhKSxjfWZ1bmN0aW9uIHEoKXt9ZnVuY3Rpb24gcigpe3JldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZlwiKX1mdW5jdGlvbiBzKCl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJBIHByb21pc2VzIGNhbGxiYWNrIGNhbm5vdCByZXR1cm4gdGhhdCBzYW1lIHByb21pc2UuXCIpfWZ1bmN0aW9uIHQoYSl7dHJ5e3JldHVybiBhLnRoZW59Y2F0Y2goYSl7cmV0dXJuIGlhLmVycm9yPWEsaWF9fWZ1bmN0aW9uIHUoYSxiLGMsZCl7dHJ5e2EuY2FsbChiLGMsZCl9Y2F0Y2goYSl7cmV0dXJuIGF9fWZ1bmN0aW9uIHYoYSxiLGMpe1koZnVuY3Rpb24oYSl7dmFyIGQ9ITEsZT11KGMsYixmdW5jdGlvbihjKXtkfHwoZD0hMCxiIT09Yz95KGEsYyk6QShhLGMpKX0sZnVuY3Rpb24oYil7ZHx8KGQ9ITAsQihhLGIpKX0sXCJTZXR0bGU6IFwiKyhhLl9sYWJlbHx8XCIgdW5rbm93biBwcm9taXNlXCIpKTshZCYmZSYmKGQ9ITAsQihhLGUpKX0sYSl9ZnVuY3Rpb24gdyhhLGIpe2IuX3N0YXRlPT09Z2E/QShhLGIuX3Jlc3VsdCk6Yi5fc3RhdGU9PT1oYT9CKGEsYi5fcmVzdWx0KTpDKGIsdm9pZCAwLGZ1bmN0aW9uKGIpe3JldHVybiB5KGEsYil9LGZ1bmN0aW9uKGIpe3JldHVybiBCKGEsYil9KX1mdW5jdGlvbiB4KGEsYixkKXtiLmNvbnN0cnVjdG9yPT09YS5jb25zdHJ1Y3RvciYmZD09PW8mJmIuY29uc3RydWN0b3IucmVzb2x2ZT09PXA/dyhhLGIpOmQ9PT1pYT8oQihhLGlhLmVycm9yKSxpYS5lcnJvcj1udWxsKTp2b2lkIDA9PT1kP0EoYSxiKTpjKGQpP3YoYSxiLGQpOkEoYSxiKX1mdW5jdGlvbiB5KGIsYyl7Yj09PWM/QihiLHIoKSk6YShjKT94KGIsYyx0KGMpKTpBKGIsYyl9ZnVuY3Rpb24geihhKXthLl9vbmVycm9yJiZhLl9vbmVycm9yKGEuX3Jlc3VsdCksRChhKX1mdW5jdGlvbiBBKGEsYil7YS5fc3RhdGU9PT1mYSYmKGEuX3Jlc3VsdD1iLGEuX3N0YXRlPWdhLDAhPT1hLl9zdWJzY3JpYmVycy5sZW5ndGgmJlkoRCxhKSl9ZnVuY3Rpb24gQihhLGIpe2EuX3N0YXRlPT09ZmEmJihhLl9zdGF0ZT1oYSxhLl9yZXN1bHQ9YixZKHosYSkpfWZ1bmN0aW9uIEMoYSxiLGMsZCl7dmFyIGU9YS5fc3Vic2NyaWJlcnMsZj1lLmxlbmd0aDthLl9vbmVycm9yPW51bGwsZVtmXT1iLGVbZitnYV09YyxlW2YraGFdPWQsMD09PWYmJmEuX3N0YXRlJiZZKEQsYSl9ZnVuY3Rpb24gRChhKXt2YXIgYj1hLl9zdWJzY3JpYmVycyxjPWEuX3N0YXRlO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBkPXZvaWQgMCxlPXZvaWQgMCxmPWEuX3Jlc3VsdCxnPTA7ZzxiLmxlbmd0aDtnKz0zKWQ9YltnXSxlPWJbZytjXSxkP0coYyxkLGUsZik6ZShmKTthLl9zdWJzY3JpYmVycy5sZW5ndGg9MH19ZnVuY3Rpb24gRSgpe3RoaXMuZXJyb3I9bnVsbH1mdW5jdGlvbiBGKGEsYil7dHJ5e3JldHVybiBhKGIpfWNhdGNoKGEpe3JldHVybiBqYS5lcnJvcj1hLGphfX1mdW5jdGlvbiBHKGEsYixkLGUpe3ZhciBmPWMoZCksZz12b2lkIDAsaD12b2lkIDAsaT12b2lkIDAsaj12b2lkIDA7aWYoZil7aWYoZz1GKGQsZSksZz09PWphPyhqPSEwLGg9Zy5lcnJvcixnLmVycm9yPW51bGwpOmk9ITAsYj09PWcpcmV0dXJuIHZvaWQgQihiLHMoKSl9ZWxzZSBnPWUsaT0hMDtiLl9zdGF0ZSE9PWZhfHwoZiYmaT95KGIsZyk6aj9CKGIsaCk6YT09PWdhP0EoYixnKTphPT09aGEmJkIoYixnKSl9ZnVuY3Rpb24gSChhLGIpe3RyeXtiKGZ1bmN0aW9uKGIpe3koYSxiKX0sZnVuY3Rpb24oYil7QihhLGIpfSl9Y2F0Y2goYil7QihhLGIpfX1mdW5jdGlvbiBJKCl7cmV0dXJuIGthKyt9ZnVuY3Rpb24gSihhKXthW2VhXT1rYSsrLGEuX3N0YXRlPXZvaWQgMCxhLl9yZXN1bHQ9dm9pZCAwLGEuX3N1YnNjcmliZXJzPVtdfWZ1bmN0aW9uIEsoYSxiKXt0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yPWEsdGhpcy5wcm9taXNlPW5ldyBhKHEpLHRoaXMucHJvbWlzZVtlYV18fEoodGhpcy5wcm9taXNlKSxVKGIpPyh0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLl9yZW1haW5pbmc9Yi5sZW5ndGgsdGhpcy5fcmVzdWx0PW5ldyBBcnJheSh0aGlzLmxlbmd0aCksMD09PXRoaXMubGVuZ3RoP0EodGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCk6KHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RofHwwLHRoaXMuX2VudW1lcmF0ZShiKSwwPT09dGhpcy5fcmVtYWluaW5nJiZBKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpKSk6Qih0aGlzLnByb21pc2UsTCgpKX1mdW5jdGlvbiBMKCl7cmV0dXJuIG5ldyBFcnJvcihcIkFycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheVwiKX1mdW5jdGlvbiBNKGEpe3JldHVybiBuZXcgSyh0aGlzLGEpLnByb21pc2V9ZnVuY3Rpb24gTihhKXt2YXIgYj10aGlzO3JldHVybiBuZXcgYihVKGEpP2Z1bmN0aW9uKGMsZCl7Zm9yKHZhciBlPWEubGVuZ3RoLGY9MDtmPGU7ZisrKWIucmVzb2x2ZShhW2ZdKS50aGVuKGMsZCl9OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIobmV3IFR5cGVFcnJvcihcIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS5cIikpfSl9ZnVuY3Rpb24gTyhhKXt2YXIgYj10aGlzLGM9bmV3IGIocSk7cmV0dXJuIEIoYyxhKSxjfWZ1bmN0aW9uIFAoKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvclwiKX1mdW5jdGlvbiBRKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKX1mdW5jdGlvbiBSKGEpe3RoaXNbZWFdPUkoKSx0aGlzLl9yZXN1bHQ9dGhpcy5fc3RhdGU9dm9pZCAwLHRoaXMuX3N1YnNjcmliZXJzPVtdLHEhPT1hJiYoXCJmdW5jdGlvblwiIT10eXBlb2YgYSYmUCgpLHRoaXMgaW5zdGFuY2VvZiBSP0godGhpcyxhKTpRKCkpfWZ1bmN0aW9uIFMoKXt2YXIgYT12b2lkIDA7aWYodm9pZCAwIT09ZilhPWY7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZilhPXNlbGY7ZWxzZSB0cnl7YT1GdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goYSl7dGhyb3cgbmV3IEVycm9yKFwicG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50XCIpfXZhciBiPWEuUHJvbWlzZTtpZihiKXt2YXIgYz1udWxsO3RyeXtjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChiLnJlc29sdmUoKSl9Y2F0Y2goYSl7fWlmKFwiW29iamVjdCBQcm9taXNlXVwiPT09YyYmIWIuY2FzdClyZXR1cm59YS5Qcm9taXNlPVJ9dmFyIFQ9dm9pZCAwO1Q9QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5OmZ1bmN0aW9uKGEpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKX07dmFyIFU9VCxWPTAsVz12b2lkIDAsWD12b2lkIDAsWT1mdW5jdGlvbihhLGIpe2NhW1ZdPWEsY2FbVisxXT1iLDI9PT0oVis9MikmJihYP1gobSk6ZGEoKSl9LFo9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwLCQ9Wnx8e30sXz0kLk11dGF0aW9uT2JzZXJ2ZXJ8fCQuV2ViS2l0TXV0YXRpb25PYnNlcnZlcixhYT1cInVuZGVmaW5lZFwiPT10eXBlb2Ygc2VsZiYmdm9pZCAwIT09ZSYmXCJbb2JqZWN0IHByb2Nlc3NdXCI9PT17fS50b1N0cmluZy5jYWxsKGUpLGJhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGltcG9ydFNjcmlwdHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCxjYT1uZXcgQXJyYXkoMWUzKSxkYT12b2lkIDA7ZGE9YWE/aCgpOl8/aigpOmJhP2soKTp2b2lkIDA9PT1aJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBiP24oKTpsKCk7dmFyIGVhPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygxNiksZmE9dm9pZCAwLGdhPTEsaGE9MixpYT1uZXcgRSxqYT1uZXcgRSxrYT0wO3JldHVybiBLLnByb3RvdHlwZS5fZW51bWVyYXRlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wO3RoaXMuX3N0YXRlPT09ZmEmJmI8YS5sZW5ndGg7YisrKXRoaXMuX2VhY2hFbnRyeShhW2JdLGIpfSxLLnByb3RvdHlwZS5fZWFjaEVudHJ5PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcixkPWMucmVzb2x2ZTtpZihkPT09cCl7dmFyIGU9dChhKTtpZihlPT09byYmYS5fc3RhdGUhPT1mYSl0aGlzLl9zZXR0bGVkQXQoYS5fc3RhdGUsYixhLl9yZXN1bHQpO2Vsc2UgaWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aGlzLl9yZW1haW5pbmctLSx0aGlzLl9yZXN1bHRbYl09YTtlbHNlIGlmKGM9PT1SKXt2YXIgZj1uZXcgYyhxKTt4KGYsYSxlKSx0aGlzLl93aWxsU2V0dGxlQXQoZixiKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgYyhmdW5jdGlvbihiKXtyZXR1cm4gYihhKX0pLGIpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KGQoYSksYil9LEsucHJvdG90eXBlLl9zZXR0bGVkQXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMucHJvbWlzZTtkLl9zdGF0ZT09PWZhJiYodGhpcy5fcmVtYWluaW5nLS0sYT09PWhhP0IoZCxjKTp0aGlzLl9yZXN1bHRbYl09YyksMD09PXRoaXMuX3JlbWFpbmluZyYmQShkLHRoaXMuX3Jlc3VsdCl9LEsucHJvdG90eXBlLl93aWxsU2V0dGxlQXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO0MoYSx2b2lkIDAsZnVuY3Rpb24oYSl7cmV0dXJuIGMuX3NldHRsZWRBdChnYSxiLGEpfSxmdW5jdGlvbihhKXtyZXR1cm4gYy5fc2V0dGxlZEF0KGhhLGIsYSl9KX0sUi5hbGw9TSxSLnJhY2U9TixSLnJlc29sdmU9cCxSLnJlamVjdD1PLFIuX3NldFNjaGVkdWxlcj1kLFIuX3NldEFzYXA9ZyxSLl9hc2FwPVksUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlIsdGhlbjpvLGNhdGNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnRoZW4obnVsbCxhKX19LFIucG9seWZpbGw9UyxSLlByb21pc2U9UixSfSl9KS5jYWxsKHRoaXMsYihcIl9wcm9jZXNzXCIpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7X3Byb2Nlc3M6MTF9XSw1OltmdW5jdGlvbihiLGMsZCl7IWZ1bmN0aW9uKGIsZSl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSYmYS5hbWQpYShbXCJleHBvcnRzXCIsXCJtb2R1bGVcIl0sZSk7ZWxzZSBpZih2b2lkIDAhPT1kJiZ2b2lkIDAhPT1jKWUoZCxjKTtlbHNle3ZhciBmPXtleHBvcnRzOnt9fTtlKGYuZXhwb3J0cyxmKSxiLmZldGNoSnNvbnA9Zi5leHBvcnRzfX0odGhpcyxmdW5jdGlvbihhLGIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGMoKXtyZXR1cm5cImpzb25wX1wiK0RhdGUubm93KCkrXCJfXCIrTWF0aC5jZWlsKDFlNSpNYXRoLnJhbmRvbSgpKX1mdW5jdGlvbiBkKGEpe3RyeXtkZWxldGUgd2luZG93W2FdfWNhdGNoKGIpe3dpbmRvd1thXT12b2lkIDB9fWZ1bmN0aW9uIGUoYSl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSk7YiYmZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLnJlbW92ZUNoaWxkKGIpfWZ1bmN0aW9uIGYoYSl7dmFyIGI9YXJndW1lbnRzLmxlbmd0aDw9MXx8dm9pZCAwPT09YXJndW1lbnRzWzFdP3t9OmFyZ3VtZW50c1sxXSxmPWEsaD1iLnRpbWVvdXR8fGcudGltZW91dCxpPWIuanNvbnBDYWxsYmFja3x8Zy5qc29ucENhbGxiYWNrLGo9dm9pZCAwO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihnLGspe3ZhciBsPWIuanNvbnBDYWxsYmFja0Z1bmN0aW9ufHxjKCksbT1pK1wiX1wiK2w7d2luZG93W2xdPWZ1bmN0aW9uKGEpe2coe29rOiEwLGpzb246ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGEpfX0pLGomJmNsZWFyVGltZW91dChqKSxlKG0pLGQobCl9LGYrPS0xPT09Zi5pbmRleE9mKFwiP1wiKT9cIj9cIjpcIiZcIjt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO24uc2V0QXR0cmlidXRlKFwic3JjXCIsXCJcIitmK2krXCI9XCIrbCksYi5jaGFyc2V0JiZuLnNldEF0dHJpYnV0ZShcImNoYXJzZXRcIixiLmNoYXJzZXQpLG4uaWQ9bSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQobiksaj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ayhuZXcgRXJyb3IoXCJKU09OUCByZXF1ZXN0IHRvIFwiK2ErXCIgdGltZWQgb3V0XCIpKSxkKGwpLGUobSksd2luZG93W2xdPWZ1bmN0aW9uKCl7ZChsKX19LGgpLG4ub25lcnJvcj1mdW5jdGlvbigpe2sobmV3IEVycm9yKFwiSlNPTlAgcmVxdWVzdCB0byBcIithK1wiIGZhaWxlZFwiKSksZChsKSxlKG0pLGomJmNsZWFyVGltZW91dChqKX19KX12YXIgZz17dGltZW91dDo1ZTMsanNvbnBDYWxsYmFjazpcImNhbGxiYWNrXCIsanNvbnBDYWxsYmFja0Z1bmN0aW9uOm51bGx9O2IuZXhwb3J0cz1mfSl9LHt9XSw2OltmdW5jdGlvbihiLGMsZCl7dmFyIGU9ZXx8ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7aWYoISh2b2lkIDA9PT1hfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiYvTVNJRSBbMS05XVxcLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkpe3ZhciBiPWEuZG9jdW1lbnQsYz1mdW5jdGlvbigpe3JldHVybiBhLlVSTHx8YS53ZWJraXRVUkx8fGF9LGQ9Yi5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXCJhXCIpLGU9XCJkb3dubG9hZFwiaW4gZCxmPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIik7YS5kaXNwYXRjaEV2ZW50KGIpfSxnPS9jb25zdHJ1Y3Rvci9pLnRlc3QoYS5IVE1MRWxlbWVudCl8fGEuc2FmYXJpLGg9L0NyaU9TXFwvW1xcZF0rLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGk9ZnVuY3Rpb24oYil7KGEuc2V0SW1tZWRpYXRlfHxhLnNldFRpbWVvdXQpKGZ1bmN0aW9uKCl7dGhyb3cgYn0sMCl9LGo9XCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixrPTRlNCxsPWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKCl7XCJzdHJpbmdcIj09dHlwZW9mIGE/YygpLnJldm9rZU9iamVjdFVSTChhKTphLnJlbW92ZSgpfTtzZXRUaW1lb3V0KGIsayl9LG09ZnVuY3Rpb24oYSxiLGMpe2I9W10uY29uY2F0KGIpO2Zvcih2YXIgZD1iLmxlbmd0aDtkLS07KXt2YXIgZT1hW1wib25cIitiW2RdXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKXRyeXtlLmNhbGwoYSxjfHxhKX1jYXRjaChhKXtpKGEpfX19LG49ZnVuY3Rpb24oYSl7cmV0dXJuL15cXHMqKD86dGV4dFxcL1xcUyp8YXBwbGljYXRpb25cXC94bWx8XFxTKlxcL1xcUypcXCt4bWwpXFxzKjsuKmNoYXJzZXRcXHMqPVxccyp1dGYtOC9pLnRlc3QoYS50eXBlKT9uZXcgQmxvYihbU3RyaW5nLmZyb21DaGFyQ29kZSg2NTI3OSksYV0se3R5cGU6YS50eXBlfSk6YX0sbz1mdW5jdGlvbihiLGksayl7a3x8KGI9bihiKSk7dmFyIG8scD10aGlzLHE9Yi50eXBlLHI9cT09PWoscz1mdW5jdGlvbigpe20ocCxcIndyaXRlc3RhcnQgcHJvZ3Jlc3Mgd3JpdGUgd3JpdGVlbmRcIi5zcGxpdChcIiBcIikpfSx0PWZ1bmN0aW9uKCl7aWYoKGh8fHImJmcpJiZhLkZpbGVSZWFkZXIpe3ZhciBkPW5ldyBGaWxlUmVhZGVyO3JldHVybiBkLm9ubG9hZGVuZD1mdW5jdGlvbigpe3ZhciBiPWg/ZC5yZXN1bHQ6ZC5yZXN1bHQucmVwbGFjZSgvXmRhdGE6W147XSo7LyxcImRhdGE6YXR0YWNobWVudC9maWxlO1wiKTthLm9wZW4oYixcIl9ibGFua1wiKXx8KGEubG9jYXRpb24uaHJlZj1iKSxiPXZvaWQgMCxwLnJlYWR5U3RhdGU9cC5ET05FLHMoKX0sZC5yZWFkQXNEYXRhVVJMKGIpLHZvaWQocC5yZWFkeVN0YXRlPXAuSU5JVCl9aWYob3x8KG89YygpLmNyZWF0ZU9iamVjdFVSTChiKSkscilhLmxvY2F0aW9uLmhyZWY9bztlbHNle2Eub3BlbihvLFwiX2JsYW5rXCIpfHwoYS5sb2NhdGlvbi5ocmVmPW8pfXAucmVhZHlTdGF0ZT1wLkRPTkUscygpLGwobyl9O2lmKHAucmVhZHlTdGF0ZT1wLklOSVQsZSlyZXR1cm4gbz1jKCkuY3JlYXRlT2JqZWN0VVJMKGIpLHZvaWQgc2V0VGltZW91dChmdW5jdGlvbigpe2QuaHJlZj1vLGQuZG93bmxvYWQ9aSxmKGQpLHMoKSxsKG8pLHAucmVhZHlTdGF0ZT1wLkRPTkV9KTt0KCl9LHA9by5wcm90b3R5cGUscT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG5ldyBvKGEsYnx8YS5uYW1lfHxcImRvd25sb2FkXCIsYyl9O3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iP2Z1bmN0aW9uKGEsYixjKXtyZXR1cm4gYj1ifHxhLm5hbWV8fFwiZG93bmxvYWRcIixjfHwoYT1uKGEpKSxuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihhLGIpfToocC5hYm9ydD1mdW5jdGlvbigpe30scC5yZWFkeVN0YXRlPXAuSU5JVD0wLHAuV1JJVElORz0xLHAuRE9ORT0yLHAuZXJyb3I9cC5vbndyaXRlc3RhcnQ9cC5vbnByb2dyZXNzPXAub253cml0ZT1wLm9uYWJvcnQ9cC5vbmVycm9yPXAub253cml0ZWVuZD1udWxsLHEpfX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGZ8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd3x8dGhpcy5jb250ZW50KTt2b2lkIDAhPT1jJiZjLmV4cG9ydHM/Yy5leHBvcnRzLnNhdmVBcz1lOnZvaWQgMCE9PWEmJm51bGwhPT1hJiZudWxsIT09YS5hbWQmJmEoXCJGaWxlU2F2ZXIuanNcIixmdW5jdGlvbigpe3JldHVybiBlfSl9LHt9XSw3OltmdW5jdGlvbihhLGIsYyl7Yy5yZWFkPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoPTgqZS1kLTEsaT0oMTw8aCktMSxqPWk+PjEsaz0tNyxsPWM/ZS0xOjAsbT1jPy0xOjEsbj1hW2IrbF07Zm9yKGwrPW0sZj1uJigxPDwtayktMSxuPj49LWssays9aDtrPjA7Zj0yNTYqZithW2IrbF0sbCs9bSxrLT04KTtmb3IoZz1mJigxPDwtayktMSxmPj49LWssays9ZDtrPjA7Zz0yNTYqZythW2IrbF0sbCs9bSxrLT04KTtpZigwPT09ZilmPTEtajtlbHNle2lmKGY9PT1pKXJldHVybiBnP05hTjoxLzAqKG4/LTE6MSk7Zys9TWF0aC5wb3coMixkKSxmLT1qfXJldHVybihuPy0xOjEpKmcqTWF0aC5wb3coMixmLWQpfSxjLndyaXRlPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZyxoLGksaj04KmYtZS0xLGs9KDE8PGopLTEsbD1rPj4xLG09MjM9PT1lP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxuPWQ/MDpmLTEsbz1kPzE6LTEscD1iPDB8fDA9PT1iJiYxL2I8MD8xOjA7Zm9yKGI9TWF0aC5hYnMoYiksaXNOYU4oYil8fGI9PT0xLzA/KGg9aXNOYU4oYik/MTowLGc9ayk6KGc9TWF0aC5mbG9vcihNYXRoLmxvZyhiKS9NYXRoLkxOMiksYiooaT1NYXRoLnBvdygyLC1nKSk8MSYmKGctLSxpKj0yKSxiKz1nK2w+PTE/bS9pOm0qTWF0aC5wb3coMiwxLWwpLGIqaT49MiYmKGcrKyxpLz0yKSxnK2w+PWs/KGg9MCxnPWspOmcrbD49MT8oaD0oYippLTEpKk1hdGgucG93KDIsZSksZys9bCk6KGg9YipNYXRoLnBvdygyLGwtMSkqTWF0aC5wb3coMixlKSxnPTApKTtlPj04O2FbYytuXT0yNTUmaCxuKz1vLGgvPTI1NixlLT04KTtmb3IoZz1nPDxlfGgsais9ZTtqPjA7YVtjK25dPTI1NSZnLG4rPW8sZy89MjU2LGotPTgpO2FbYytuLW9dfD0xMjgqcH19LHt9XSw4OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9e30udG9TdHJpbmc7Yi5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09ZC5jYWxsKGEpfX0se31dLDk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7cmV0dXJuIGEuYj09PWIuYiYmYS5hPT09Yi5hfWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gYS5iPGIuYnx8YS5iPT09Yi5iJiZhLmE8PWIuYX1mdW5jdGlvbiBmKGEsYixjKXt2YXIgZD1iLmItYS5iLGU9Yy5iLWIuYlxuO3JldHVybiAwPGQrZT9kPGU/Yi5hLWEuYStkLyhkK2UpKihhLmEtYy5hKTpiLmEtYy5hK2UvKGQrZSkqKGMuYS1hLmEpOjB9ZnVuY3Rpb24gZyhhLGIsYyl7dmFyIGQ9Yi5iLWEuYixlPWMuYi1iLmI7cmV0dXJuIDA8ZCtlPyhiLmEtYy5hKSpkKyhiLmEtYS5hKSplOjB9ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhLmE8Yi5hfHxhLmE9PT1iLmEmJmEuYjw9Yi5ifWZ1bmN0aW9uIGkoYSxiLGMpe3ZhciBkPWIuYS1hLmEsZT1jLmEtYi5hO3JldHVybiAwPGQrZT9kPGU/Yi5iLWEuYitkLyhkK2UpKihhLmItYy5iKTpiLmItYy5iK2UvKGQrZSkqKGMuYi1hLmIpOjB9ZnVuY3Rpb24gaihhLGIsYyl7dmFyIGQ9Yi5hLWEuYSxlPWMuYS1iLmE7cmV0dXJuIDA8ZCtlPyhiLmItYy5iKSpkKyhiLmItYS5iKSplOjB9ZnVuY3Rpb24gayhhKXtyZXR1cm4gZShhLmIuYSxhLmEpfWZ1bmN0aW9uIGwoYSl7cmV0dXJuIGUoYS5hLGEuYi5hKX1mdW5jdGlvbiBtKGEsYixjLGQpe3JldHVybiBhPTA+YT8wOmEsYz0wPmM/MDpjLGE8PWM/MD09PWM/KGIrZCkvMjpiK2EvKGErYykqKGQtYik6ZCtjLyhhK2MpKihiLWQpfWZ1bmN0aW9uIG4oYSl7dmFyIGI9cyhhLmIpO3JldHVybiB1KGIsYS5jKSx1KGIuYixhLmMpLHYoYixhLmEpLGJ9ZnVuY3Rpb24gbyhhLGIpe3ZhciBjPSExLGQ9ITE7YSE9PWImJihiLmEhPT1hLmEmJihkPSEwLHgoYi5hLGEuYSkpLGIuZCE9PWEuZCYmKGM9ITAseShiLmQsYS5kKSksdChiLGEpLGR8fCh1KGIsYS5hKSxhLmEuYz1hKSxjfHwodihiLGEuZCksYS5kLmE9YSkpfWZ1bmN0aW9uIHAoYSl7dmFyIGI9YS5iLGM9ITE7YS5kIT09YS5iLmQmJihjPSEwLHkoYS5kLGEuYi5kKSksYS5jPT09YT94KGEuYSxudWxsKTooYS5iLmQuYT0kKGEpLGEuYS5jPWEuYyx0KGEsJChhKSksY3x8dihhLGEuZCkpLGIuYz09PWI/KHgoYi5hLG51bGwpLHkoYi5kLG51bGwpKTooYS5kLmE9JChiKSxiLmEuYz1iLmMsdChiLCQoYikpKSx3KGEpfWZ1bmN0aW9uIHEoYSl7dmFyIGI9cyhhKSxjPWIuYjtyZXR1cm4gdChiLGEuZSksYi5hPWEuYi5hLHUoYyxiLmEpLGIuZD1jLmQ9YS5kLGI9Yi5iLHQoYS5iLCQoYS5iKSksdChhLmIsYiksYS5iLmE9Yi5hLGIuYi5hLmM9Yi5iLGIuYi5kPWEuYi5kLGIuZj1hLmYsYi5iLmY9YS5iLmYsYn1mdW5jdGlvbiByKGEsYil7dmFyIGM9ITEsZD1zKGEpLGU9ZC5iO3JldHVybiBiLmQhPT1hLmQmJihjPSEwLHkoYi5kLGEuZCkpLHQoZCxhLmUpLHQoZSxiKSxkLmE9YS5iLmEsZS5hPWIuYSxkLmQ9ZS5kPWEuZCxhLmQuYT1lLGN8fHYoZCxhLmQpLGR9ZnVuY3Rpb24gcyhhKXt2YXIgYj1uZXcgWixjPW5ldyBaLGQ9YS5iLmg7cmV0dXJuIGMuaD1kLGQuYi5oPWIsYi5oPWEsYS5iLmg9YyxiLmI9YyxiLmM9YixiLmU9YyxjLmI9YixjLmM9YyxjLmU9Yn1mdW5jdGlvbiB0KGEsYil7dmFyIGM9YS5jLGQ9Yi5jO2MuYi5lPWIsZC5iLmU9YSxhLmM9ZCxiLmM9Y31mdW5jdGlvbiB1KGEsYil7dmFyIGM9Yi5mLGQ9bmV3IGFhKGIsYyk7Yy5lPWQsYi5mPWQsYz1kLmM9YTtkb3tjLmE9ZCxjPWMuY313aGlsZShjIT09YSl9ZnVuY3Rpb24gdihhLGIpe3ZhciBjPWIuZCxkPW5ldyBZKGIsYyk7Yy5iPWQsYi5kPWQsZC5hPWEsZC5jPWIuYyxjPWE7ZG97Yy5kPWQsYz1jLmV9d2hpbGUoYyE9PWEpfWZ1bmN0aW9uIHcoYSl7dmFyIGI9YS5oO2E9YS5iLmgsYi5iLmg9YSxhLmIuaD1ifWZ1bmN0aW9uIHgoYSxiKXt2YXIgYz1hLmMsZD1jO2Rve2QuYT1iLGQ9ZC5jfXdoaWxlKGQhPT1jKTtjPWEuZixkPWEuZSxkLmY9YyxjLmU9ZH1mdW5jdGlvbiB5KGEsYil7dmFyIGM9YS5hLGQ9Yztkb3tkLmQ9YixkPWQuZX13aGlsZShkIT09Yyk7Yz1hLmQsZD1hLmIsZC5kPWMsYy5iPWR9ZnVuY3Rpb24geihhKXt2YXIgYj0wO3JldHVybiBNYXRoLmFicyhhWzFdKT5NYXRoLmFicyhhWzBdKSYmKGI9MSksTWF0aC5hYnMoYVsyXSk+TWF0aC5hYnMoYVtiXSkmJihiPTIpLGJ9ZnVuY3Rpb24gQShhLGIpe2EuZis9Yi5mLGEuYi5mKz1iLmIuZn1mdW5jdGlvbiBCKGEsYixjKXtyZXR1cm4gYT1hLmEsYj1iLmEsYz1jLmEsYi5iLmE9PT1hP2MuYi5hPT09YT9lKGIuYSxjLmEpPzA+PWcoYy5iLmEsYi5hLGMuYSk6MDw9ZyhiLmIuYSxjLmEsYi5hKTowPj1nKGMuYi5hLGEsYy5hKTpjLmIuYT09PWE/MDw9ZyhiLmIuYSxhLGIuYSk6KGI9ZihiLmIuYSxhLGIuYSksYT1mKGMuYi5hLGEsYy5hKSxiPj1hKX1mdW5jdGlvbiBDKGEpe2EuYS5pPW51bGw7dmFyIGI9YS5lO2IuYS5jPWIuYyxiLmMuYT1iLmEsYS5lPW51bGx9ZnVuY3Rpb24gRChhLGIpe3AoYS5hKSxhLmM9ITEsYS5hPWIsYi5pPWF9ZnVuY3Rpb24gRShhKXt2YXIgYj1hLmEuYTtkb3thPW9hKGEpfXdoaWxlKGEuYS5hPT09Yik7cmV0dXJuIGEuYyYmKGI9cihuYShhKS5hLmIsYS5hLmUpLEQoYSxiKSxhPW9hKGEpKSxhfWZ1bmN0aW9uIEYoYSxiLGMpe3ZhciBkPW5ldyBtYTtyZXR1cm4gZC5hPWMsZC5lPVQoYS5mLGIuZSxkKSxjLmk9ZH1mdW5jdGlvbiBHKGEsYil7c3dpdGNoKGEucyl7Y2FzZSAxMDAxMzA6cmV0dXJuIDAhPSgxJmIpO2Nhc2UgMTAwMTMxOnJldHVybiAwIT09YjtjYXNlIDEwMDEzMjpyZXR1cm4gMDxiO2Nhc2UgMTAwMTMzOnJldHVybiAwPmI7Y2FzZSAxMDAxMzQ6cmV0dXJuIDI8PWJ8fC0yPj1ifXJldHVybiExfWZ1bmN0aW9uIEgoYSl7dmFyIGI9YS5hLGM9Yi5kO2MuYz1hLmQsYy5hPWIsQyhhKX1mdW5jdGlvbiBJKGEsYixjKXtmb3IoYT1iLGI9Yi5hO2EhPT1jOyl7YS5jPSExO3ZhciBkPW5hKGEpLGU9ZC5hO2lmKGUuYSE9PWIuYSl7aWYoIWQuYyl7SChhKTticmVha31lPXIoYi5jLmIsZS5iKSxEKGQsZSl9Yi5jIT09ZSYmKG8oJChlKSxlKSxvKGIsZSkpLEgoYSksYj1kLmEsYT1kfXJldHVybiBifWZ1bmN0aW9uIEooYSxiLGMsZCxlLGYpe3ZhciBnPSEwO2Rve0YoYSxiLGMuYiksYz1jLmN9d2hpbGUoYyE9PWQpO2ZvcihudWxsPT09ZSYmKGU9bmEoYikuYS5iLmMpO2Q9bmEoYiksYz1kLmEuYixjLmE9PT1lLmE7KWMuYyE9PWUmJihvKCQoYyksYyksbygkKGUpLGMpKSxkLmY9Yi5mLWMuZixkLmQ9RyhhLGQuZiksYi5iPSEwLCFnJiZOKGEsYikmJihBKGMsZSksQyhiKSxwKGUpKSxnPSExLGI9ZCxlPWM7Yi5iPSEwLGYmJlAoYSxiKX1mdW5jdGlvbiBLKGEsYixjLGQsZSl7dmFyIGY9W2IuZ1swXSxiLmdbMV0sYi5nWzJdXTtiLmQ9bnVsbCxiLmQ9YS5vP2EubyhmLGMsZCxhLmMpfHxudWxsOm51bGwsbnVsbD09PWIuZCYmKGU/YS5ufHwoWChhLDEwMDE1NiksYS5uPSEwKTpiLmQ9Y1swXSl9ZnVuY3Rpb24gTChhLGIsYyl7dmFyIGQ9W251bGwsbnVsbCxudWxsLG51bGxdO2RbMF09Yi5hLmQsZFsxXT1jLmEuZCxLKGEsYi5hLGQsWy41LC41LDAsMF0sITEpLG8oYixjKX1mdW5jdGlvbiBNKGEsYixjLGQsZSl7dmFyIGY9TWF0aC5hYnMoYi5iLWEuYikrTWF0aC5hYnMoYi5hLWEuYSksZz1NYXRoLmFicyhjLmItYS5iKStNYXRoLmFicyhjLmEtYS5hKSxoPWUrMTtkW2VdPS41KmcvKGYrZyksZFtoXT0uNSpmLyhmK2cpLGEuZ1swXSs9ZFtlXSpiLmdbMF0rZFtoXSpjLmdbMF0sYS5nWzFdKz1kW2VdKmIuZ1sxXStkW2hdKmMuZ1sxXSxhLmdbMl0rPWRbZV0qYi5nWzJdK2RbaF0qYy5nWzJdfWZ1bmN0aW9uIE4oYSxiKXt2YXIgYz1uYShiKSxmPWIuYSxoPWMuYTtpZihlKGYuYSxoLmEpKXtpZigwPGcoaC5iLmEsZi5hLGguYSkpcmV0dXJuITE7aWYoZChmLmEsaC5hKSl7aWYoZi5hIT09aC5hKXt2YXIgYz1hLmUsaT1mLmEuaDtpZigwPD1pKXt2YXIgYz1jLmIsaj1jLmQsaz1jLmUsbD1jLmMsbT1sW2ldO2pbbV09altjLmFdLGxbalttXV09bSxtPD0tLWMuYSYmKDE+PW0/a2EoYyxtKTplKGtbalttPj4xXV0sa1tqW21dXSk/a2EoYyxtKTpsYShjLG0pKSxrW2ldPW51bGwsbFtpXT1jLmIsYy5iPWl9ZWxzZSBmb3IoYy5jWy0oaSsxKV09bnVsbDswPGMuYSYmbnVsbD09PWMuY1tjLmRbYy5hLTFdXTspLS1jLmE7TChhLCQoaCksZil9fWVsc2UgcShoLmIpLG8oZiwkKGgpKSxiLmI9Yy5iPSEwfWVsc2V7aWYoMD5nKGYuYi5hLGguYSxmLmEpKXJldHVybiExO29hKGIpLmI9Yi5iPSEwLHEoZi5iKSxvKCQoaCksZil9cmV0dXJuITB9ZnVuY3Rpb24gTyhhLGIpe3ZhciBjPW5hKGIpLGs9Yi5hLGw9Yy5hLG49ay5hLHA9bC5hLHI9ay5iLmEscz1sLmIuYSx0PW5ldyBhYTtpZihnKHIsYS5hLG4pLGcocyxhLmEscCksbj09PXB8fE1hdGgubWluKG4uYSxyLmEpPk1hdGgubWF4KHAuYSxzLmEpKXJldHVybiExO2lmKGUobixwKSl7aWYoMDxnKHMsbixwKSlyZXR1cm4hMX1lbHNlIGlmKDA+ZyhyLHAsbikpcmV0dXJuITE7dmFyIHUsdix3PXIseD1uLHk9cyx6PXA7aWYoZSh3LHgpfHwodT13LHc9eCx4PXUpLGUoeSx6KXx8KHU9eSx5PXosej11KSxlKHcseSl8fCh1PXcsdz15LHk9dSx1PXgseD16LHo9dSksZSh5LHgpP2UoeCx6KT8odT1mKHcseSx4KSx2PWYoeSx4LHopLDA+dSt2JiYodT0tdSx2PS12KSx0LmI9bSh1LHkuYix2LHguYikpOih1PWcodyx5LHgpLHY9LWcodyx6LHgpLDA+dSt2JiYodT0tdSx2PS12KSx0LmI9bSh1LHkuYix2LHouYikpOnQuYj0oeS5iK3guYikvMixoKHcseCl8fCh1PXcsdz14LHg9dSksaCh5LHopfHwodT15LHk9eix6PXUpLGgodyx5KXx8KHU9dyx3PXkseT11LHU9eCx4PXosej11KSxoKHkseCk/aCh4LHopPyh1PWkodyx5LHgpLHY9aSh5LHgseiksMD51K3YmJih1PS11LHY9LXYpLHQuYT1tKHUseS5hLHYseC5hKSk6KHU9aih3LHkseCksdj0taih3LHoseCksMD51K3YmJih1PS11LHY9LXYpLHQuYT1tKHUseS5hLHYsei5hKSk6dC5hPSh5LmEreC5hKS8yLGUodCxhLmEpJiYodC5iPWEuYS5iLHQuYT1hLmEuYSksdz1lKG4scCk/bjpwLGUodyx0KSYmKHQuYj13LmIsdC5hPXcuYSksZCh0LG4pfHxkKHQscCkpcmV0dXJuIE4oYSxiKSwhMTtpZighZChyLGEuYSkmJjA8PWcocixhLmEsdCl8fCFkKHMsYS5hKSYmMD49ZyhzLGEuYSx0KSl7aWYocz09PWEuYSlyZXR1cm4gcShrLmIpLG8obC5iLGspLGI9RShiKSxrPW5hKGIpLmEsSShhLG5hKGIpLGMpLEooYSxiLCQoayksayxrLCEwKSwhMDtpZihyPT09YS5hKXtxKGwuYiksbyhrLmUsJChsKSksbj1jPWIscD1uLmEuYi5hO2Rve249b2Eobil9d2hpbGUobi5hLmIuYT09PXApO3JldHVybiBiPW4sbj1uYShiKS5hLmIuYyxjLmE9JChsKSxsPUkoYSxjLG51bGwpLEooYSxiLGwuYyxrLmIuYyxuLCEwKSwhMH1yZXR1cm4gMDw9ZyhyLGEuYSx0KSYmKG9hKGIpLmI9Yi5iPSEwLHEoay5iKSxrLmEuYj1hLmEuYixrLmEuYT1hLmEuYSksMD49ZyhzLGEuYSx0KSYmKGIuYj1jLmI9ITAscShsLmIpLGwuYS5iPWEuYS5iLGwuYS5hPWEuYS5hKSwhMX1yZXR1cm4gcShrLmIpLHEobC5iKSxvKCQobCksayksay5hLmI9dC5iLGsuYS5hPXQuYSxrLmEuaD1kYShhLmUsay5hKSxrPWsuYSxsPVswLDAsMCwwXSx0PVtuLmQsci5kLHAuZCxzLmRdLGsuZ1swXT1rLmdbMV09ay5nWzJdPTAsTShrLG4scixsLDApLE0oayxwLHMsbCwyKSxLKGEsayx0LGwsITApLG9hKGIpLmI9Yi5iPWMuYj0hMCwhMX1mdW5jdGlvbiBQKGEsYil7Zm9yKHZhciBjPW5hKGIpOzspe2Zvcig7Yy5iOyliPWMsYz1uYShjKTtpZighYi5iJiYoYz1iLG51bGw9PT0oYj1vYShiKSl8fCFiLmIpKWJyZWFrO2IuYj0hMTt2YXIgZCxmPWIuYSxoPWMuYTtpZihkPWYuYi5hIT09aC5iLmEpYTp7ZD1iO3ZhciBpPW5hKGQpLGo9ZC5hLGs9aS5hLGw9dm9pZCAwO2lmKGUoai5iLmEsay5iLmEpKXtpZigwPmcoai5iLmEsay5iLmEsai5hKSl7ZD0hMTticmVhayBhfW9hKGQpLmI9ZC5iPSEwLGw9cShqKSxvKGsuYixsKSxsLmQuYz1kLmR9ZWxzZXtpZigwPGcoay5iLmEsai5iLmEsay5hKSl7ZD0hMTticmVhayBhfWQuYj1pLmI9ITAsbD1xKGspLG8oai5lLGsuYiksbC5iLmQuYz1kLmR9ZD0hMH1pZihkJiYoYy5jPyhDKGMpLHAoaCksYz1uYShiKSxoPWMuYSk6Yi5jJiYoQyhiKSxwKGYpLGI9b2EoYyksZj1iLmEpKSxmLmEhPT1oLmEpaWYoZi5iLmE9PT1oLmIuYXx8Yi5jfHxjLmN8fGYuYi5hIT09YS5hJiZoLmIuYSE9PWEuYSlOKGEsYik7ZWxzZSBpZihPKGEsYikpYnJlYWs7Zi5hPT09aC5hJiZmLmIuYT09PWguYi5hJiYoQShoLGYpLEMoYikscChmKSxiPW9hKGMpKX19ZnVuY3Rpb24gUShhLGIpe2EuYT1iO2Zvcih2YXIgYz1iLmM7bnVsbD09PWMuaTspaWYoKGM9Yy5jKT09PWIuYyl7dmFyIGM9YSxmPWIsaD1uZXcgbWE7aC5hPWYuYy5iO3ZhciBpPWMuZixqPWkuYTtkb3tqPWouYX13aGlsZShudWxsIT09ai5iJiYhaS5jKGkuYixoLGouYikpO3ZhciBpPWouYixrPW5hKGkpLGg9aS5hLGo9ay5hO2lmKDA9PT1nKGguYi5hLGYsaC5hKSloPWkuYSxkKGguYSxmKXx8ZChoLmIuYSxmKXx8KHEoaC5iKSxpLmMmJihwKGguYyksaS5jPSExKSxvKGYuYyxoKSxRKGMsZikpO2Vsc2V7dmFyIGw9ZShqLmIuYSxoLmIuYSk/aTprLGs9dm9pZCAwO2kuZHx8bC5jPyhrPWw9PT1pP3IoZi5jLmIsaC5lKTpyKGouYi5jLmIsZi5jKS5iLGwuYz9EKGwsayk6KGg9YyxpPUYoYyxpLGspLGkuZj1vYShpKS5mK2kuYS5mLGkuZD1HKGgsaS5mKSksUShjLGYpKTpKKGMsaSxmLmMsZi5jLG51bGwsITApfXJldHVybn1pZihjPUUoYy5pKSxoPW5hKGMpLGk9aC5hLGg9SShhLGgsbnVsbCksaC5jPT09aSl7dmFyIGk9aCxoPWkuYyxqPW5hKGMpLGs9Yy5hLGw9ai5hLG09ITE7ay5iLmEhPT1sLmIuYSYmTyhhLGMpLGQoay5hLGEuYSkmJihvKCQoaCksayksYz1FKGMpLGg9bmEoYykuYSxJKGEsbmEoYyksaiksbT0hMCksZChsLmEsYS5hKSYmKG8oaSwkKGwpKSxpPUkoYSxqLG51bGwpLG09ITApLG0/SihhLGMsaS5jLGgsaCwhMCk6KGY9ZShsLmEsay5hKT8kKGwpOmssZj1yKGkuYy5iLGYpLEooYSxjLGYsZi5jLGYuYywhMSksZi5iLmkuYz0hMCxQKGEsYykpfWVsc2UgSihhLGMsaC5jLGksaSwhMCl9ZnVuY3Rpb24gUihhLGIpe3ZhciBjPW5ldyBtYSxkPW4oYS5iKTtkLmEuYj1xYSxkLmEuYT1iLGQuYi5hLmI9LXFhLGQuYi5hLmE9YixhLmE9ZC5iLmEsYy5hPWQsYy5mPTAsYy5kPSExLGMuYz0hMSxjLmg9ITAsYy5iPSExLGQ9YS5mLGQ9VChkLGQuYSxjKSxjLmU9ZH1mdW5jdGlvbiBTKGEpe3RoaXMuYT1uZXcgVSx0aGlzLmI9YSx0aGlzLmM9Qn1mdW5jdGlvbiBUKGEsYixjKXtkb3tiPWIuY313aGlsZShudWxsIT09Yi5iJiYhYS5jKGEuYixiLmIsYykpO3JldHVybiBhPW5ldyBVKGMsYi5hLGIpLGIuYS5jPWEsYi5hPWF9ZnVuY3Rpb24gVShhLGIsYyl7dGhpcy5iPWF8fG51bGwsdGhpcy5hPWJ8fHRoaXMsdGhpcy5jPWN8fHRoaXN9ZnVuY3Rpb24gVigpe3RoaXMuZD1yYSx0aGlzLnA9dGhpcy5iPXRoaXMucT1udWxsLHRoaXMuaj1bMCwwLDBdLHRoaXMucz0xMDAxMzAsdGhpcy5uPSExLHRoaXMubz10aGlzLmE9dGhpcy5lPXRoaXMuZj1udWxsLHRoaXMubT0hMSx0aGlzLmM9dGhpcy5yPXRoaXMuaT10aGlzLms9dGhpcy5sPXRoaXMuaD1udWxsfWZ1bmN0aW9uIFcoYSxiKXtpZihhLmQhPT1iKWZvcig7YS5kIT09YjspaWYoYS5kPGIpc3dpdGNoKGEuZCl7Y2FzZSByYTpYKGEsMTAwMTUxKSxhLnUobnVsbCk7YnJlYWs7Y2FzZSAxOlgoYSwxMDAxNTIpLGEudCgpfWVsc2Ugc3dpdGNoKGEuZCl7Y2FzZSAyOlgoYSwxMDAxNTQpLGEudigpO2JyZWFrO2Nhc2UgMTpYKGEsMTAwMTUzKSxhLncoKX19ZnVuY3Rpb24gWChhLGIpe2EucCYmYS5wKGIsYS5jKX1mdW5jdGlvbiBZKGEsYil7dGhpcy5iPWF8fHRoaXMsdGhpcy5kPWJ8fHRoaXMsdGhpcy5hPW51bGwsdGhpcy5jPSExfWZ1bmN0aW9uIFooKXt0aGlzLmg9dGhpcyx0aGlzLmk9dGhpcy5kPXRoaXMuYT10aGlzLmU9dGhpcy5jPXRoaXMuYj1udWxsLHRoaXMuZj0wfWZ1bmN0aW9uICQoYSl7cmV0dXJuIGEuYi5lfWZ1bmN0aW9uIF8oKXt0aGlzLmM9bmV3IGFhLHRoaXMuYT1uZXcgWSx0aGlzLmI9bmV3IFosdGhpcy5kPW5ldyBaLHRoaXMuYi5iPXRoaXMuZCx0aGlzLmQuYj10aGlzLmJ9ZnVuY3Rpb24gYWEoYSxiKXt0aGlzLmU9YXx8dGhpcyx0aGlzLmY9Ynx8dGhpcyx0aGlzLmQ9dGhpcy5jPW51bGwsdGhpcy5nPVswLDAsMF0sdGhpcy5oPXRoaXMuYT10aGlzLmI9MH1mdW5jdGlvbiBiYSgpe3RoaXMuYz1bXSx0aGlzLmQ9bnVsbCx0aGlzLmE9MCx0aGlzLmU9ITEsdGhpcy5iPW5ldyBmYX1mdW5jdGlvbiBjYShhKXthLmQ9W107Zm9yKHZhciBiPTA7YjxhLmE7YisrKWEuZFtiXT1iO2EuZC5zb3J0KGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3JldHVybiBlKGFbYl0sYVtjXSk/MTotMX19KGEuYykpLGEuZT0hMCxoYShhLmIpfWZ1bmN0aW9uIGRhKGEsYil7aWYoYS5lKXt2YXIgYz1hLmIsZD0rK2MuYTsyKmQ+Yy5mJiYoYy5mKj0yLGMuYz1nYShjLmMsYy5mKzEpKTt2YXIgZTtyZXR1cm4gMD09PWMuYj9lPWQ6KGU9Yy5iLGMuYj1jLmNbYy5iXSksYy5lW2VdPWIsYy5jW2VdPWQsYy5kW2RdPWUsYy5oJiZsYShjLGQpLGV9cmV0dXJuIGM9YS5hKyssYS5jW2NdPWIsLShjKzEpfWZ1bmN0aW9uIGVhKGEpe2lmKDA9PT1hLmEpcmV0dXJuIGphKGEuYik7dmFyIGI9YS5jW2EuZFthLmEtMV1dO2lmKDAhPT1hLmIuYSYmZShpYShhLmIpLGIpKXJldHVybiBqYShhLmIpO2Rvey0tYS5hfXdoaWxlKDA8YS5hJiZudWxsPT09YS5jW2EuZFthLmEtMV1dKTtyZXR1cm4gYn1mdW5jdGlvbiBmYSgpe3RoaXMuZD1nYShbMF0sMzMpLHRoaXMuZT1bbnVsbCxudWxsXSx0aGlzLmM9WzAsMF0sdGhpcy5hPTAsdGhpcy5mPTMyLHRoaXMuYj0wLHRoaXMuaD0hMSx0aGlzLmRbMV09MX1mdW5jdGlvbiBnYShhLGIpe2Zvcih2YXIgYz1BcnJheShiKSxkPTA7ZDxhLmxlbmd0aDtkKyspY1tkXT1hW2RdO2Zvcig7ZDxiO2QrKyljW2RdPTA7cmV0dXJuIGN9ZnVuY3Rpb24gaGEoYSl7Zm9yKHZhciBiPWEuYTsxPD1iOy0tYilrYShhLGIpO2EuaD0hMH1mdW5jdGlvbiBpYShhKXtyZXR1cm4gYS5lW2EuZFsxXV19ZnVuY3Rpb24gamEoYSl7dmFyIGI9YS5kLGM9YS5lLGQ9YS5jLGU9YlsxXSxmPWNbZV07cmV0dXJuIDA8YS5hJiYoYlsxXT1iW2EuYV0sZFtiWzFdXT0xLGNbZV09bnVsbCxkW2VdPWEuYixhLmI9ZSwwPC0tYS5hJiZrYShhLDEpKSxmfWZ1bmN0aW9uIGthKGEsYil7Zm9yKHZhciBjPWEuZCxkPWEuZSxmPWEuYyxnPWIsaD1jW2ddOzspe3ZhciBpPWc8PDE7aTxhLmEmJmUoZFtjW2krMV1dLGRbY1tpXV0pJiYoaSs9MSk7dmFyIGo9Y1tpXTtpZihpPmEuYXx8ZShkW2hdLGRbal0pKXtjW2ddPWgsZltoXT1nO2JyZWFrfWNbZ109aixmW2pdPWcsZz1pfX1mdW5jdGlvbiBsYShhLGIpe2Zvcih2YXIgYz1hLmQsZD1hLmUsZj1hLmMsZz1iLGg9Y1tnXTs7KXt2YXIgaT1nPj4xLGo9Y1tpXTtpZigwPT09aXx8ZShkW2pdLGRbaF0pKXtjW2ddPWgsZltoXT1nO2JyZWFrfWNbZ109aixmW2pdPWcsZz1pfX1mdW5jdGlvbiBtYSgpe3RoaXMuZT10aGlzLmE9bnVsbCx0aGlzLmY9MCx0aGlzLmM9dGhpcy5iPXRoaXMuaD10aGlzLmQ9ITF9ZnVuY3Rpb24gbmEoYSl7cmV0dXJuIGEuZS5jLmJ9ZnVuY3Rpb24gb2EoYSl7cmV0dXJuIGEuZS5hLmJ9dmFyIHBhLHFhPTRlMTUwLHJhPTA7cGE9Vi5wcm90b3R5cGUscGEueD1mdW5jdGlvbigpe1codGhpcyxyYSl9LHBhLkI9ZnVuY3Rpb24oYSxiKXtzd2l0Y2goYSl7Y2FzZSAxMDAxNDI6cmV0dXJuO2Nhc2UgMTAwMTQwOnN3aXRjaChiKXtjYXNlIDEwMDEzMDpjYXNlIDEwMDEzMTpjYXNlIDEwMDEzMjpjYXNlIDEwMDEzMzpjYXNlIDEwMDEzNDpyZXR1cm4gdm9pZCh0aGlzLnM9Yil9YnJlYWs7Y2FzZSAxMDAxNDE6cmV0dXJuIHZvaWQodGhpcy5tPSEhYik7ZGVmYXVsdDpyZXR1cm4gdm9pZCBYKHRoaXMsMTAwOTAwKX1YKHRoaXMsMTAwOTAxKX0scGEueT1mdW5jdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAxMDAxNDI6cmV0dXJuIDA7Y2FzZSAxMDAxNDA6cmV0dXJuIHRoaXMucztjYXNlIDEwMDE0MTpyZXR1cm4gdGhpcy5tO2RlZmF1bHQ6WCh0aGlzLDEwMDkwMCl9cmV0dXJuITF9LHBhLkE9ZnVuY3Rpb24oYSxiLGMpe3RoaXMualswXT1hLHRoaXMualsxXT1iLHRoaXMualsyXT1jfSxwYS56PWZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8bnVsbDtzd2l0Y2goYSl7Y2FzZSAxMDAxMDA6Y2FzZSAxMDAxMDY6dGhpcy5oPWM7YnJlYWs7Y2FzZSAxMDAxMDQ6Y2FzZSAxMDAxMTA6dGhpcy5sPWM7YnJlYWs7Y2FzZSAxMDAxMDE6Y2FzZSAxMDAxMDc6dGhpcy5rPWM7YnJlYWs7Y2FzZSAxMDAxMDI6Y2FzZSAxMDAxMDg6dGhpcy5pPWM7YnJlYWs7Y2FzZSAxMDAxMDM6Y2FzZSAxMDAxMDk6dGhpcy5wPWM7YnJlYWs7Y2FzZSAxMDAxMDU6Y2FzZSAxMDAxMTE6dGhpcy5vPWM7YnJlYWs7Y2FzZSAxMDAxMTI6dGhpcy5yPWM7YnJlYWs7ZGVmYXVsdDpYKHRoaXMsMTAwOTAwKX19LHBhLkM9ZnVuY3Rpb24oYSxiKXt2YXIgYz0hMSxkPVswLDAsMF07Vyh0aGlzLDIpO2Zvcih2YXIgZT0wOzM+ZTsrK2Upe3ZhciBmPWFbZV07LTFlMTUwPmYmJihmPS0xZTE1MCxjPSEwKSwxZTE1MDxmJiYoZj0xZTE1MCxjPSEwKSxkW2VdPWZ9YyYmWCh0aGlzLDEwMDE1NSksYz10aGlzLnEsbnVsbD09PWM/KGM9bih0aGlzLmIpLG8oYyxjLmIpKToocShjKSxjPWMuZSksYy5hLmQ9YixjLmEuZ1swXT1kWzBdLGMuYS5nWzFdPWRbMV0sYy5hLmdbMl09ZFsyXSxjLmY9MSxjLmIuZj0tMSx0aGlzLnE9Y30scGEudT1mdW5jdGlvbihhKXtXKHRoaXMscmEpLHRoaXMuZD0xLHRoaXMuYj1uZXcgXyx0aGlzLmM9YX0scGEudD1mdW5jdGlvbigpe1codGhpcywxKSx0aGlzLmQ9Mix0aGlzLnE9bnVsbH0scGEudj1mdW5jdGlvbigpe1codGhpcywyKSx0aGlzLmQ9MX0scGEudz1mdW5jdGlvbigpe1codGhpcywxKSx0aGlzLmQ9cmE7dmFyIGE9dGhpcy5qWzBdLGI9dGhpcy5qWzFdLGM9dGhpcy5qWzJdLGY9ITEsaD1bYSxiLGNdO2lmKDA9PT1hJiYwPT09YiYmMD09PWMpe2Zvcih2YXIgYj1bLTJlMTUwLC0yZTE1MCwtMmUxNTBdLGk9WzJlMTUwLDJlMTUwLDJlMTUwXSxjPVtdLGo9W10sZj10aGlzLmIuYyxhPWYuZTthIT09ZjthPWEuZSlmb3IodmFyIG09MDszPm07KyttKXt2YXIgbj1hLmdbbV07bjxpW21dJiYoaVttXT1uLGpbbV09YSksbj5iW21dJiYoYlttXT1uLGNbbV09YSl9aWYoYT0wLGJbMV0taVsxXT5iWzBdLWlbMF0mJihhPTEpLGJbMl0taVsyXT5iW2FdLWlbYV0mJihhPTIpLGlbYV0+PWJbYV0paFswXT0wLGhbMV09MCxoWzJdPTE7ZWxzZXtmb3IoYj0wLGk9althXSxjPWNbYV0saj1bMCwwLDBdLGk9W2kuZ1swXS1jLmdbMF0saS5nWzFdLWMuZ1sxXSxpLmdbMl0tYy5nWzJdXSxtPVswLDAsMF0sYT1mLmU7YSE9PWY7YT1hLmUpbVswXT1hLmdbMF0tYy5nWzBdLG1bMV09YS5nWzFdLWMuZ1sxXSxtWzJdPWEuZ1syXS1jLmdbMl0salswXT1pWzFdKm1bMl0taVsyXSptWzFdLGpbMV09aVsyXSptWzBdLWlbMF0qbVsyXSxqWzJdPWlbMF0qbVsxXS1pWzFdKm1bMF0sKG49alswXSpqWzBdK2pbMV0qalsxXStqWzJdKmpbMl0pPmImJihiPW4saFswXT1qWzBdLGhbMV09alsxXSxoWzJdPWpbMl0pOzA+PWImJihoWzBdPWhbMV09aFsyXT0wLGhbeihpKV09MSl9Zj0hMH1mb3Ioaj16KGgpLGE9dGhpcy5iLmMsYj0oaisxKSUzLGM9KGorMiklMyxqPTA8aFtqXT8xOi0xLGg9YS5lO2ghPT1hO2g9aC5lKWguYj1oLmdbYl0saC5hPWoqaC5nW2NdO2lmKGYpe2ZvcihoPTAsZj10aGlzLmIuYSxhPWYuYjthIT09ZjthPWEuYilpZihiPWEuYSwhKDA+PWIuZikpZG97aCs9KGIuYS5iLWIuYi5hLmIpKihiLmEuYStiLmIuYS5hKSxiPWIuZX13aGlsZShiIT09YS5hKTtpZigwPmgpZm9yKGg9dGhpcy5iLmMsZj1oLmU7ZiE9PWg7Zj1mLmUpZi5hPS1mLmF9Zm9yKHRoaXMubj0hMSxoPXRoaXMuYi5iLGE9aC5oO2EhPT1oO2E9ZilmPWEuaCxiPWEuZSxkKGEuYSxhLmIuYSkmJmEuZS5lIT09YSYmKEwodGhpcyxiLGEpLHAoYSksYT1iLGI9YS5lKSxiLmU9PT1hJiYoYiE9PWEmJihiIT09ZiYmYiE9PWYuYnx8KGY9Zi5oKSxwKGIpKSxhIT09ZiYmYSE9PWYuYnx8KGY9Zi5oKSxwKGEpKTtmb3IodGhpcy5lPWg9bmV3IGJhLGY9dGhpcy5iLmMsYT1mLmU7YSE9PWY7YT1hLmUpYS5oPWRhKGgsYSk7Zm9yKGNhKGgpLHRoaXMuZj1uZXcgUyh0aGlzKSxSKHRoaXMsLXFhKSxSKHRoaXMscWEpO251bGwhPT0oaD1lYSh0aGlzLmUpKTspe2Zvcig7Oyl7YTppZihhPXRoaXMuZSwwPT09YS5hKWY9aWEoYS5iKTtlbHNlIGlmKGY9YS5jW2EuZFthLmEtMV1dLDAhPT1hLmIuYSYmKGE9aWEoYS5iKSxlKGEsZikpKXtmPWE7YnJlYWsgYX1pZihudWxsPT09Znx8IWQoZixoKSlicmVhaztmPWVhKHRoaXMuZSksTCh0aGlzLGguYyxmLmMpfVEodGhpcyxoKX1mb3IodGhpcy5hPXRoaXMuZi5hLmEuYi5hLmEsaD0wO251bGwhPT0oZj10aGlzLmYuYS5hLmIpOylmLmh8fCsraCxDKGYpO2Zvcih0aGlzLmY9bnVsbCxoPXRoaXMuZSxoLmI9bnVsbCxoLmQ9bnVsbCx0aGlzLmU9aC5jPW51bGwsaD10aGlzLmIsYT1oLmEuYjthIT09aC5hO2E9ZilmPWEuYixhPWEuYSxhLmUuZT09PWEmJihBKGEuYyxhKSxwKGEpKTtpZighdGhpcy5uKXtpZihoPXRoaXMuYix0aGlzLm0pZm9yKGE9aC5iLmg7YSE9PWguYjthPWYpZj1hLmgsYS5iLmQuYyE9PWEuZC5jP2EuZj1hLmQuYz8xOi0xOnAoYSk7ZWxzZSBmb3IoYT1oLmEuYjthIT09aC5hO2E9ZilpZihmPWEuYixhLmMpe2ZvcihhPWEuYTtlKGEuYi5hLGEuYSk7YT1hLmMuYik7Zm9yKDtlKGEuYSxhLmIuYSk7YT1hLmUpO2ZvcihiPWEuYy5iLGM9dm9pZCAwO2EuZSE9PWI7KWlmKGUoYS5iLmEsYi5hKSl7Zm9yKDtiLmUhPT1hJiYoayhiLmUpfHwwPj1nKGIuYSxiLmIuYSxiLmUuYi5hKSk7KWM9cihiLmUsYiksYj1jLmI7Yj1iLmMuYn1lbHNle2Zvcig7Yi5lIT09YSYmKGwoYS5jLmIpfHwwPD1nKGEuYi5hLGEuYSxhLmMuYi5hKSk7KWM9cihhLGEuYy5iKSxhPWMuYjthPWEuZX1mb3IoO2IuZS5lIT09YTspYz1yKGIuZSxiKSxiPWMuYn1pZih0aGlzLmh8fHRoaXMuaXx8dGhpcy5rfHx0aGlzLmwpaWYodGhpcy5tKXtmb3IoaD10aGlzLmIsZj1oLmEuYjtmIT09aC5hO2Y9Zi5iKWlmKGYuYyl7dGhpcy5oJiZ0aGlzLmgoMix0aGlzLmMpLGE9Zi5hO2Rve3RoaXMuayYmdGhpcy5rKGEuYS5kLHRoaXMuYyksYT1hLmV9d2hpbGUoYSE9PWYuYSk7dGhpcy5pJiZ0aGlzLmkodGhpcy5jKX19ZWxzZXtmb3IoaD10aGlzLmIsZj0hIXRoaXMubCxhPSExLGI9LTEsYz1oLmEuZDtjIT09aC5hO2M9Yy5kKWlmKGMuYyl7YXx8KHRoaXMuaCYmdGhpcy5oKDQsdGhpcy5jKSxhPSEwKSxqPWMuYTtkb3tmJiYoaT1qLmIuZC5jPzA6MSxiIT09aSYmKGI9aSx0aGlzLmwmJnRoaXMubCghIWIsdGhpcy5jKSkpLHRoaXMuayYmdGhpcy5rKGouYS5kLHRoaXMuYyksaj1qLmV9d2hpbGUoaiE9PWMuYSl9YSYmdGhpcy5pJiZ0aGlzLmkodGhpcy5jKX1pZih0aGlzLnIpe2ZvcihoPXRoaXMuYixhPWguYS5iO2EhPT1oLmE7YT1mKWlmKGY9YS5iLCFhLmMpe2I9YS5hLGM9Yi5lLGo9dm9pZCAwO2Rve2o9YyxjPWouZSxqLmQ9bnVsbCxudWxsPT09ai5iLmQmJihqLmM9PT1qP3goai5hLG51bGwpOihqLmEuYz1qLmMsdChqLCQoaikpKSxpPWouYixpLmM9PT1pP3goaS5hLG51bGwpOihpLmEuYz1pLmMsdChpLCQoaSkpKSx3KGopKX13aGlsZShqIT09Yik7Yj1hLmQsYT1hLmIsYS5kPWIsYi5iPWF9cmV0dXJuIHRoaXMucih0aGlzLmIpLHZvaWQodGhpcy5jPXRoaXMuYj1udWxsKX19dGhpcy5iPXRoaXMuYz1udWxsfSx0aGlzLmxpYnRlc3M9e0dsdVRlc3NlbGF0b3I6Vix3aW5kaW5nUnVsZTp7R0xVX1RFU1NfV0lORElOR19PREQ6MTAwMTMwLEdMVV9URVNTX1dJTkRJTkdfTk9OWkVSTzoxMDAxMzEsR0xVX1RFU1NfV0lORElOR19QT1NJVElWRToxMDAxMzIsR0xVX1RFU1NfV0lORElOR19ORUdBVElWRToxMDAxMzMsR0xVX1RFU1NfV0lORElOR19BQlNfR0VRX1RXTzoxMDAxMzR9LHByaW1pdGl2ZVR5cGU6e0dMX0xJTkVfTE9PUDoyLEdMX1RSSUFOR0xFUzo0LEdMX1RSSUFOR0xFX1NUUklQOjUsR0xfVFJJQU5HTEVfRkFOOjZ9LGVycm9yVHlwZTp7R0xVX1RFU1NfTUlTU0lOR19CRUdJTl9QT0xZR09OOjEwMDE1MSxHTFVfVEVTU19NSVNTSU5HX0VORF9QT0xZR09OOjEwMDE1MyxHTFVfVEVTU19NSVNTSU5HX0JFR0lOX0NPTlRPVVI6MTAwMTUyLEdMVV9URVNTX01JU1NJTkdfRU5EX0NPTlRPVVI6MTAwMTU0LEdMVV9URVNTX0NPT1JEX1RPT19MQVJHRToxMDAxNTUsR0xVX1RFU1NfTkVFRF9DT01CSU5FX0NBTExCQUNLOjEwMDE1Nn0sZ2x1RW51bTp7R0xVX1RFU1NfTUVTSDoxMDAxMTIsR0xVX1RFU1NfVE9MRVJBTkNFOjEwMDE0MixHTFVfVEVTU19XSU5ESU5HX1JVTEU6MTAwMTQwLEdMVV9URVNTX0JPVU5EQVJZX09OTFk6MTAwMTQxLEdMVV9JTlZBTElEX0VOVU06MTAwOTAwLEdMVV9JTlZBTElEX1ZBTFVFOjEwMDkwMSxHTFVfVEVTU19CRUdJTjoxMDAxMDAsR0xVX1RFU1NfVkVSVEVYOjEwMDEwMSxHTFVfVEVTU19FTkQ6MTAwMTAyLEdMVV9URVNTX0VSUk9SOjEwMDEwMyxHTFVfVEVTU19FREdFX0ZMQUc6MTAwMTA0LEdMVV9URVNTX0NPTUJJTkU6MTAwMTA1LEdMVV9URVNTX0JFR0lOX0RBVEE6MTAwMTA2LEdMVV9URVNTX1ZFUlRFWF9EQVRBOjEwMDEwNyxHTFVfVEVTU19FTkRfREFUQToxMDAxMDgsR0xVX1RFU1NfRVJST1JfREFUQToxMDAxMDksR0xVX1RFU1NfRURHRV9GTEFHX0RBVEE6MTAwMTEwLEdMVV9URVNTX0NPTUJJTkVfREFUQToxMDAxMTF9fSxWLnByb3RvdHlwZS5nbHVEZWxldGVUZXNzPVYucHJvdG90eXBlLngsVi5wcm90b3R5cGUuZ2x1VGVzc1Byb3BlcnR5PVYucHJvdG90eXBlLkIsVi5wcm90b3R5cGUuZ2x1R2V0VGVzc1Byb3BlcnR5PVYucHJvdG90eXBlLnksVi5wcm90b3R5cGUuZ2x1VGVzc05vcm1hbD1WLnByb3RvdHlwZS5BLFYucHJvdG90eXBlLmdsdVRlc3NDYWxsYmFjaz1WLnByb3RvdHlwZS56LFYucHJvdG90eXBlLmdsdVRlc3NWZXJ0ZXg9Vi5wcm90b3R5cGUuQyxWLnByb3RvdHlwZS5nbHVUZXNzQmVnaW5Qb2x5Z29uPVYucHJvdG90eXBlLnUsVi5wcm90b3R5cGUuZ2x1VGVzc0JlZ2luQ29udG91cj1WLnByb3RvdHlwZS50LFYucHJvdG90eXBlLmdsdVRlc3NFbmRDb250b3VyPVYucHJvdG90eXBlLnYsVi5wcm90b3R5cGUuZ2x1VGVzc0VuZFBvbHlnb249Vi5wcm90b3R5cGUudyx2b2lkIDAhPT1iJiYoYi5leHBvcnRzPXRoaXMubGlidGVzcyl9LHt9XSwxMDpbZnVuY3Rpb24oYixjLGQpeyhmdW5jdGlvbihlKXshZnVuY3Rpb24oYixlKXtcIm9iamVjdFwiPT10eXBlb2YgZCYmdm9pZCAwIT09Yz9lKGQpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJmEuYW1kP2EoW1wiZXhwb3J0c1wiXSxlKTplKGIub3BlbnR5cGU9e30pfSh0aGlzLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGMoKXt0aGlzLnRhYmxlPW5ldyBVaW50MTZBcnJheSgxNiksdGhpcy50cmFucz1uZXcgVWludDE2QXJyYXkoMjg4KX1mdW5jdGlvbiBkKGEsYil7dGhpcy5zb3VyY2U9YSx0aGlzLnNvdXJjZUluZGV4PTAsdGhpcy50YWc9MCx0aGlzLmJpdGNvdW50PTAsdGhpcy5kZXN0PWIsdGhpcy5kZXN0TGVuPTAsdGhpcy5sdHJlZT1uZXcgYyx0aGlzLmR0cmVlPW5ldyBjfWZ1bmN0aW9uIGYoYSxiLGMsZCl7dmFyIGUsZjtmb3IoZT0wO2U8YzsrK2UpYVtlXT0wO2ZvcihlPTA7ZTwzMC1jOysrZSlhW2UrY109ZS9jfDA7Zm9yKGY9ZCxlPTA7ZTwzMDsrK2UpYltlXT1mLGYrPTE8PGFbZV19ZnVuY3Rpb24gZyhhLGIpe3ZhciBjO2ZvcihjPTA7Yzw3OysrYylhLnRhYmxlW2NdPTA7Zm9yKGEudGFibGVbN109MjQsYS50YWJsZVs4XT0xNTIsYS50YWJsZVs5XT0xMTIsYz0wO2M8MjQ7KytjKWEudHJhbnNbY109MjU2K2M7Zm9yKGM9MDtjPDE0NDsrK2MpYS50cmFuc1syNCtjXT1jO2ZvcihjPTA7Yzw4OysrYylhLnRyYW5zWzE2OCtjXT0yODArYztmb3IoYz0wO2M8MTEyOysrYylhLnRyYW5zWzE3NitjXT0xNDQrYztmb3IoYz0wO2M8NTsrK2MpYi50YWJsZVtjXT0wO2ZvcihiLnRhYmxlWzVdPTMyLGM9MDtjPDMyOysrYyliLnRyYW5zW2NdPWN9ZnVuY3Rpb24gaChhLGIsYyxkKXt2YXIgZSxmO2ZvcihlPTA7ZTwxNjsrK2UpYS50YWJsZVtlXT0wO2ZvcihlPTA7ZTxkOysrZSlhLnRhYmxlW2JbYytlXV0rKztmb3IoYS50YWJsZVswXT0wLGY9MCxlPTA7ZTwxNjsrK2UpdmVbZV09ZixmKz1hLnRhYmxlW2VdO2ZvcihlPTA7ZTxkOysrZSliW2MrZV0mJihhLnRyYW5zW3ZlW2JbYytlXV0rK109ZSl9ZnVuY3Rpb24gaShhKXthLmJpdGNvdW50LS18fChhLnRhZz1hLnNvdXJjZVthLnNvdXJjZUluZGV4KytdLGEuYml0Y291bnQ9Nyk7dmFyIGI9MSZhLnRhZztyZXR1cm4gYS50YWc+Pj49MSxifWZ1bmN0aW9uIGooYSxiLGMpe2lmKCFiKXJldHVybiBjO2Zvcig7YS5iaXRjb3VudDwyNDspYS50YWd8PWEuc291cmNlW2Euc291cmNlSW5kZXgrK108PGEuYml0Y291bnQsYS5iaXRjb3VudCs9ODt2YXIgZD1hLnRhZyY2NTUzNT4+PjE2LWI7cmV0dXJuIGEudGFnPj4+PWIsYS5iaXRjb3VudC09YixkK2N9ZnVuY3Rpb24gayhhLGIpe2Zvcig7YS5iaXRjb3VudDwyNDspYS50YWd8PWEuc291cmNlW2Euc291cmNlSW5kZXgrK108PGEuYml0Y291bnQsYS5iaXRjb3VudCs9ODt2YXIgYz0wLGQ9MCxlPTAsZj1hLnRhZztkb3tkPTIqZCsoMSZmKSxmPj4+PTEsKytlLGMrPWIudGFibGVbZV0sZC09Yi50YWJsZVtlXX13aGlsZShkPj0wKTtyZXR1cm4gYS50YWc9ZixhLmJpdGNvdW50LT1lLGIudHJhbnNbYytkXX1mdW5jdGlvbiBsKGEsYixjKXt2YXIgZCxlLGYsZyxpLGw7Zm9yKGQ9aihhLDUsMjU3KSxlPWooYSw1LDEpLGY9aihhLDQsNCksZz0wO2c8MTk7KytnKXVlW2ddPTA7Zm9yKGc9MDtnPGY7KytnKXt2YXIgbT1qKGEsMywwKTt1ZVtzZVtnXV09bX1mb3IoaCh0ZSx1ZSwwLDE5KSxpPTA7aTxkK2U7KXt2YXIgbj1rKGEsdGUpO3N3aXRjaChuKXtjYXNlIDE2OnZhciBvPXVlW2ktMV07Zm9yKGw9aihhLDIsMyk7bDstLWwpdWVbaSsrXT1vO2JyZWFrO2Nhc2UgMTc6Zm9yKGw9aihhLDMsMyk7bDstLWwpdWVbaSsrXT0wO2JyZWFrO2Nhc2UgMTg6Zm9yKGw9aihhLDcsMTEpO2w7LS1sKXVlW2krK109MDticmVhaztkZWZhdWx0OnVlW2krK109bn19aChiLHVlLDAsZCksaChjLHVlLGQsZSl9ZnVuY3Rpb24gbShhLGIsYyl7Zm9yKDs7KXt2YXIgZD1rKGEsYik7aWYoMjU2PT09ZClyZXR1cm4ga2U7aWYoZDwyNTYpYS5kZXN0W2EuZGVzdExlbisrXT1kO2Vsc2V7dmFyIGUsZixnLGg7Zm9yKGQtPTI1NyxlPWooYSxvZVtkXSxwZVtkXSksZj1rKGEsYyksZz1hLmRlc3RMZW4taihhLHFlW2ZdLHJlW2ZdKSxoPWc7aDxnK2U7KytoKWEuZGVzdFthLmRlc3RMZW4rK109YS5kZXN0W2hdfX19ZnVuY3Rpb24gbihhKXtmb3IodmFyIGIsYyxkO2EuYml0Y291bnQ+ODspYS5zb3VyY2VJbmRleC0tLGEuYml0Y291bnQtPTg7aWYoYj1hLnNvdXJjZVthLnNvdXJjZUluZGV4KzFdLGI9MjU2KmIrYS5zb3VyY2VbYS5zb3VyY2VJbmRleF0sYz1hLnNvdXJjZVthLnNvdXJjZUluZGV4KzNdLGM9MjU2KmMrYS5zb3VyY2VbYS5zb3VyY2VJbmRleCsyXSxiIT09KDY1NTM1Jn5jKSlyZXR1cm4gbGU7Zm9yKGEuc291cmNlSW5kZXgrPTQsZD1iO2Q7LS1kKWEuZGVzdFthLmRlc3RMZW4rK109YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsrXTtyZXR1cm4gYS5iaXRjb3VudD0wLGtlfWZ1bmN0aW9uIG8oYSxiKXt2YXIgYyxlLGY9bmV3IGQoYSxiKTtkb3tzd2l0Y2goYz1pKGYpLGooZiwyLDApKXtjYXNlIDA6ZT1uKGYpO2JyZWFrO2Nhc2UgMTplPW0oZixtZSxuZSk7YnJlYWs7Y2FzZSAyOmwoZixmLmx0cmVlLGYuZHRyZWUpLGU9bShmLGYubHRyZWUsZi5kdHJlZSk7YnJlYWs7ZGVmYXVsdDplPWxlfWlmKGUhPT1rZSl0aHJvdyBuZXcgRXJyb3IoXCJEYXRhIGVycm9yXCIpfXdoaWxlKCFjKTtyZXR1cm4gZi5kZXN0TGVuPGYuZGVzdC5sZW5ndGg/XCJmdW5jdGlvblwiPT10eXBlb2YgZi5kZXN0LnNsaWNlP2YuZGVzdC5zbGljZSgwLGYuZGVzdExlbik6Zi5kZXN0LnN1YmFycmF5KDAsZi5kZXN0TGVuKTpmLmRlc3R9ZnVuY3Rpb24gcChhLGIsYyxkLGUpe3JldHVybiBNYXRoLnBvdygxLWUsMykqYSszKk1hdGgucG93KDEtZSwyKSplKmIrMyooMS1lKSpNYXRoLnBvdyhlLDIpKmMrTWF0aC5wb3coZSwzKSpkfWZ1bmN0aW9uIHEoKXt0aGlzLngxPU51bWJlci5OYU4sdGhpcy55MT1OdW1iZXIuTmFOLHRoaXMueDI9TnVtYmVyLk5hTix0aGlzLnkyPU51bWJlci5OYU59ZnVuY3Rpb24gcigpe3RoaXMuY29tbWFuZHM9W10sdGhpcy5maWxsPVwiYmxhY2tcIix0aGlzLnN0cm9rZT1udWxsLHRoaXMuc3Ryb2tlV2lkdGg9MX1mdW5jdGlvbiBzKGEpe3Rocm93IG5ldyBFcnJvcihhKX1mdW5jdGlvbiB0KGEsYil7YXx8cyhiKX1mdW5jdGlvbiB1KGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhfX1mdW5jdGlvbiB2KGEpe3JldHVybiBhPj0tMTI4JiZhPD0xMjd9ZnVuY3Rpb24gdyhhLGIsYyl7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aDtiPGUmJmQ8NjQmJjA9PT1hW2JdOykrK2IsKytkO3JldHVybiBjLnB1c2goMTI4fGQtMSksYn1mdW5jdGlvbiB4KGEsYixjKXtmb3IodmFyIGQ9MCxlPWEubGVuZ3RoLGY9YjtmPGUmJmQ8NjQ7KXt2YXIgZz1hW2ZdO2lmKCF2KGcpKWJyZWFrO2lmKDA9PT1nJiZmKzE8ZSYmMD09PWFbZisxXSlicmVhazsrK2YsKytkfWMucHVzaChkLTEpO2Zvcih2YXIgaD1iO2g8ZjsrK2gpYy5wdXNoKGFbaF0rMjU2JjI1NSk7cmV0dXJuIGZ9ZnVuY3Rpb24geShhLGIsYyl7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aCxmPWI7ZjxlJiZkPDY0Oyl7dmFyIGc9YVtmXTtpZigwPT09ZylicmVhaztpZih2KGcpJiZmKzE8ZSYmdihhW2YrMV0pKWJyZWFrOysrZiwrK2R9Yy5wdXNoKDY0fGQtMSk7Zm9yKHZhciBoPWI7aDxmOysraCl7dmFyIGk9YVtoXTtjLnB1c2goaSs2NTUzNj4+OCYyNTUsaSsyNTYmMjU1KX1yZXR1cm4gZn1mdW5jdGlvbiB6KGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPTA7ZTxiLmxlbmd0aDtlKz0xKXt2YXIgZj1iW2VdO2RbZi5uYW1lXT1mLnZhbHVlfWlmKHRoaXMudGFibGVOYW1lPWEsdGhpcy5maWVsZHM9YixjKWZvcih2YXIgZz1PYmplY3Qua2V5cyhjKSxoPTA7aDxnLmxlbmd0aDtoKz0xKXt2YXIgaT1nW2hdLGo9Y1tpXTt2b2lkIDAhPT1kW2ldJiYoZFtpXT1qKX19ZnVuY3Rpb24gQShhLGIsYyl7dm9pZCAwPT09YyYmKGM9Yi5sZW5ndGgpO3ZhciBkPW5ldyBBcnJheShiLmxlbmd0aCsxKTtkWzBdPXtuYW1lOmErXCJDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjfTtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKylkW2UrMV09e25hbWU6YStlLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpiW2VdfTtyZXR1cm4gZH1mdW5jdGlvbiBCKGEsYixjKXt2YXIgZD1iLmxlbmd0aCxlPW5ldyBBcnJheShkKzEpO2VbMF09e25hbWU6YStcIkNvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmR9O2Zvcih2YXIgZj0wO2Y8ZDtmKyspZVtmKzFdPXtuYW1lOmErZix0eXBlOlwiVEFCTEVcIix2YWx1ZTpjKGJbZl0sZil9O3JldHVybiBlfWZ1bmN0aW9uIEMoYSxiLGMpe3ZhciBkPWIubGVuZ3RoLGU9W107ZVswXT17bmFtZTphK1wiQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZH07Zm9yKHZhciBmPTA7ZjxkO2YrKyllPWUuY29uY2F0KGMoYltmXSxmKSk7cmV0dXJuIGV9ZnVuY3Rpb24gRChhKXsxPT09YS5mb3JtYXQ/ei5jYWxsKHRoaXMsXCJjb3ZlcmFnZVRhYmxlXCIsW3tuYW1lOlwiY292ZXJhZ2VGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX1dLmNvbmNhdChBKFwiZ2x5cGhcIixhLmdseXBocykpKTp4ZS5hc3NlcnQoITEsXCJDYW4ndCBjcmVhdGUgY292ZXJhZ2UgdGFibGUgZm9ybWF0IDIgeWV0LlwiKX1mdW5jdGlvbiBFKGEpe3ouY2FsbCh0aGlzLFwic2NyaXB0TGlzdFRhYmxlXCIsQyhcInNjcmlwdFJlY29yZFwiLGEsZnVuY3Rpb24oYSxiKXt2YXIgYz1hLnNjcmlwdCxkPWMuZGVmYXVsdExhbmdTeXM7cmV0dXJuIHhlLmFzc2VydCghIWQsXCJVbmFibGUgdG8gd3JpdGUgR1NVQjogc2NyaXB0IFwiK2EudGFnK1wiIGhhcyBubyBkZWZhdWx0IGxhbmd1YWdlIHN5c3RlbS5cIiksW3tuYW1lOlwic2NyaXB0VGFnXCIrYix0eXBlOlwiVEFHXCIsdmFsdWU6YS50YWd9LHtuYW1lOlwic2NyaXB0XCIrYix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcInNjcmlwdFRhYmxlXCIsW3tuYW1lOlwiZGVmYXVsdExhbmdTeXNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcImRlZmF1bHRMYW5nU3lzXCIsW3tuYW1lOlwibG9va3VwT3JkZXJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXFGZWF0dXJlSW5kZXhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZC5yZXFGZWF0dXJlSW5kZXh9XS5jb25jYXQoQShcImZlYXR1cmVJbmRleFwiLGQuZmVhdHVyZUluZGV4ZXMpKSl9XS5jb25jYXQoQyhcImxhbmdTeXNcIixjLmxhbmdTeXNSZWNvcmRzLGZ1bmN0aW9uKGEsYil7dmFyIGM9YS5sYW5nU3lzO3JldHVyblt7bmFtZTpcImxhbmdTeXNUYWdcIitiLHR5cGU6XCJUQUdcIix2YWx1ZTphLnRhZ30se25hbWU6XCJsYW5nU3lzXCIrYix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcImxhbmdTeXNcIixbe25hbWU6XCJsb29rdXBPcmRlclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlcUZlYXR1cmVJbmRleFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjLnJlcUZlYXR1cmVJbmRleH1dLmNvbmNhdChBKFwiZmVhdHVyZUluZGV4XCIsYy5mZWF0dXJlSW5kZXhlcykpKX1dfSkpKX1dfSkpfWZ1bmN0aW9uIEYoYSl7ei5jYWxsKHRoaXMsXCJmZWF0dXJlTGlzdFRhYmxlXCIsQyhcImZlYXR1cmVSZWNvcmRcIixhLGZ1bmN0aW9uKGEsYil7dmFyIGM9YS5mZWF0dXJlO3JldHVyblt7bmFtZTpcImZlYXR1cmVUYWdcIitiLHR5cGU6XCJUQUdcIix2YWx1ZTphLnRhZ30se25hbWU6XCJmZWF0dXJlXCIrYix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcImZlYXR1cmVUYWJsZVwiLFt7bmFtZTpcImZlYXR1cmVQYXJhbXNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Yy5mZWF0dXJlUGFyYW1zfV0uY29uY2F0KEEoXCJsb29rdXBMaXN0SW5kZXhcIixjLmxvb2t1cExpc3RJbmRleGVzKSkpfV19KSl9ZnVuY3Rpb24gRyhhLGIpe3ouY2FsbCh0aGlzLFwibG9va3VwTGlzdFRhYmxlXCIsQihcImxvb2t1cFwiLGEsZnVuY3Rpb24oYSl7dmFyIGM9YlthLmxvb2t1cFR5cGVdO3JldHVybiB4ZS5hc3NlcnQoISFjLFwiVW5hYmxlIHRvIHdyaXRlIEdTVUIgbG9va3VwIHR5cGUgXCIrYS5sb29rdXBUeXBlK1wiIHRhYmxlcy5cIiksbmV3IHooXCJsb29rdXBUYWJsZVwiLFt7bmFtZTpcImxvb2t1cFR5cGVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5sb29rdXBUeXBlfSx7bmFtZTpcImxvb2t1cEZsYWdcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5sb29rdXBGbGFnfV0uY29uY2F0KEIoXCJzdWJ0YWJsZVwiLGEuc3VidGFibGVzLGMpKSl9KSl9ZnVuY3Rpb24gSChhLGIpe3JldHVybiBhLmdldFVpbnQ4KGIpfWZ1bmN0aW9uIEkoYSxiKXtyZXR1cm4gYS5nZXRVaW50MTYoYiwhMSl9ZnVuY3Rpb24gSihhLGIpe3JldHVybiBhLmdldEludDE2KGIsITEpfWZ1bmN0aW9uIEsoYSxiKXtyZXR1cm4gYS5nZXRVaW50MzIoYiwhMSl9ZnVuY3Rpb24gTChhLGIpe3JldHVybiBhLmdldEludDE2KGIsITEpK2EuZ2V0VWludDE2KGIrMiwhMSkvNjU1MzV9ZnVuY3Rpb24gTShhLGIpe2Zvcih2YXIgYz1cIlwiLGQ9YjtkPGIrNDtkKz0xKWMrPVN0cmluZy5mcm9tQ2hhckNvZGUoYS5nZXRJbnQ4KGQpKTtyZXR1cm4gY31mdW5jdGlvbiBOKGEsYixjKXtmb3IodmFyIGQ9MCxlPTA7ZTxjO2UrPTEpZDw8PTgsZCs9YS5nZXRVaW50OChiK2UpO3JldHVybiBkfWZ1bmN0aW9uIE8oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPWI7ZTxjO2UrPTEpZC5wdXNoKGEuZ2V0VWludDgoZSkpO3JldHVybiBkfWZ1bmN0aW9uIFAoYSl7Zm9yKHZhciBiPVwiXCIsYz0wO2M8YS5sZW5ndGg7Yys9MSliKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGFbY10pO3JldHVybiBifWZ1bmN0aW9uIFEoYSxiKXt0aGlzLmRhdGE9YSx0aGlzLm9mZnNldD1iLHRoaXMucmVsYXRpdmVPZmZzZXQ9MH1mdW5jdGlvbiBSKGEsYil7Yi5wYXJzZVVTaG9ydCgpLGEubGVuZ3RoPWIucGFyc2VVTG9uZygpLGEubGFuZ3VhZ2U9Yi5wYXJzZVVMb25nKCk7dmFyIGM7YS5ncm91cENvdW50PWM9Yi5wYXJzZVVMb25nKCksYS5nbHlwaEluZGV4TWFwPXt9O2Zvcih2YXIgZD0wO2Q8YztkKz0xKWZvcih2YXIgZT1iLnBhcnNlVUxvbmcoKSxmPWIucGFyc2VVTG9uZygpLGc9Yi5wYXJzZVVMb25nKCksaD1lO2g8PWY7aCs9MSlhLmdseXBoSW5kZXhNYXBbaF09ZyxnKyt9ZnVuY3Rpb24gUyhhLGIsYyxkLGUpe2EubGVuZ3RoPWIucGFyc2VVU2hvcnQoKSxhLmxhbmd1YWdlPWIucGFyc2VVU2hvcnQoKTt2YXIgZjthLnNlZ0NvdW50PWY9Yi5wYXJzZVVTaG9ydCgpPj4xLGIuc2tpcChcInVTaG9ydFwiLDMpLGEuZ2x5cGhJbmRleE1hcD17fTtmb3IodmFyIGc9bmV3IExlLlBhcnNlcihjLGQrZSsxNCksaD1uZXcgTGUuUGFyc2VyKGMsZCtlKzE2KzIqZiksaT1uZXcgTGUuUGFyc2VyKGMsZCtlKzE2KzQqZiksaj1uZXcgTGUuUGFyc2VyKGMsZCtlKzE2KzYqZiksaz1kK2UrMTYrOCpmLGw9MDtsPGYtMTtsKz0xKWZvcih2YXIgbT12b2lkIDAsbj1nLnBhcnNlVVNob3J0KCksbz1oLnBhcnNlVVNob3J0KCkscD1pLnBhcnNlU2hvcnQoKSxxPWoucGFyc2VVU2hvcnQoKSxyPW87cjw9bjtyKz0xKTAhPT1xPyhrPWoub2Zmc2V0K2oucmVsYXRpdmVPZmZzZXQtMixrKz1xLGsrPTIqKHItbyksMCE9PShtPUxlLmdldFVTaG9ydChjLGspKSYmKG09bStwJjY1NTM1KSk6bT1yK3AmNjU1MzUsYS5nbHlwaEluZGV4TWFwW3JdPW19ZnVuY3Rpb24gVChhLGIpe3ZhciBjPXt9O2MudmVyc2lvbj1MZS5nZXRVU2hvcnQoYSxiKSx4ZS5hcmd1bWVudCgwPT09Yy52ZXJzaW9uLFwiY21hcCB0YWJsZSB2ZXJzaW9uIHNob3VsZCBiZSAwLlwiKSxjLm51bVRhYmxlcz1MZS5nZXRVU2hvcnQoYSxiKzIpO2Zvcih2YXIgZD0tMSxlPWMubnVtVGFibGVzLTE7ZT49MDtlLT0xKXt2YXIgZj1MZS5nZXRVU2hvcnQoYSxiKzQrOCplKSxnPUxlLmdldFVTaG9ydChhLGIrNCs4KmUrMik7aWYoMz09PWYmJigwPT09Z3x8MT09PWd8fDEwPT09Zyl8fDA9PT1mJiYoMD09PWd8fDE9PT1nfHwyPT09Z3x8Mz09PWd8fDQ9PT1nKSl7ZD1MZS5nZXRVTG9uZyhhLGIrNCs4KmUrNCk7YnJlYWt9fWlmKC0xPT09ZCl0aHJvdyBuZXcgRXJyb3IoXCJObyB2YWxpZCBjbWFwIHN1Yi10YWJsZXMgZm91bmQuXCIpO3ZhciBoPW5ldyBMZS5QYXJzZXIoYSxiK2QpO2lmKGMuZm9ybWF0PWgucGFyc2VVU2hvcnQoKSwxMj09PWMuZm9ybWF0KVIoYyxoKTtlbHNle2lmKDQhPT1jLmZvcm1hdCl0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IGZvcm1hdCA0IGFuZCAxMiBjbWFwIHRhYmxlcyBhcmUgc3VwcG9ydGVkIChmb3VuZCBmb3JtYXQgXCIrYy5mb3JtYXQrXCIpLlwiKTtTKGMsaCxhLGIsZCl9cmV0dXJuIGN9ZnVuY3Rpb24gVShhLGIsYyl7YS5zZWdtZW50cy5wdXNoKHtlbmQ6YixzdGFydDpiLGRlbHRhOi0oYi1jKSxvZmZzZXQ6MCxnbHlwaEluZGV4OmN9KX1mdW5jdGlvbiBWKGEpe2Euc2VnbWVudHMucHVzaCh7ZW5kOjY1NTM1LHN0YXJ0OjY1NTM1LGRlbHRhOjEsb2Zmc2V0OjB9KX1mdW5jdGlvbiBXKGEpe3ZhciBiLGM9ITA7Zm9yKGI9YS5sZW5ndGgtMTtiPjA7Yi09MSl7aWYoYS5nZXQoYikudW5pY29kZT42NTUzNSl7Y29uc29sZS5sb2coXCJBZGRpbmcgQ01BUCBmb3JtYXQgMTIgKG5lZWRlZCEpXCIpLGM9ITE7YnJlYWt9fXZhciBkPVt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJudW1UYWJsZXNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Yz8xOjJ9LHtuYW1lOlwicGxhdGZvcm1JRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTozfSx7bmFtZTpcImVuY29kaW5nSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJvZmZzZXRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTpjPzEyOjIwfV07Y3x8KGQ9ZC5jb25jYXQoW3tuYW1lOlwiY21hcDEyUGxhdGZvcm1JRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTozfSx7bmFtZTpcImNtYXAxMkVuY29kaW5nSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MTB9LHtuYW1lOlwiY21hcDEyT2Zmc2V0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH1dKSksZD1kLmNvbmNhdChbe25hbWU6XCJmb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6NH0se25hbWU6XCJjbWFwNExlbmd0aFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImxhbmd1YWdlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic2VnQ291bnRYMlwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNlYXJjaFJhbmdlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZW50cnlTZWxlY3RvclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJhbmdlU2hpZnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dKTt2YXIgZT1uZXcgSWUuVGFibGUoXCJjbWFwXCIsZCk7Zm9yKGUuc2VnbWVudHM9W10sYj0wO2I8YS5sZW5ndGg7Yis9MSl7Zm9yKHZhciBmPWEuZ2V0KGIpLGc9MDtnPGYudW5pY29kZXMubGVuZ3RoO2crPTEpVShlLGYudW5pY29kZXNbZ10sYik7ZS5zZWdtZW50cz1lLnNlZ21lbnRzLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdGFydC1iLnN0YXJ0fSl9VihlKTt2YXIgaD1lLnNlZ21lbnRzLmxlbmd0aCxpPTAsaj1bXSxrPVtdLGw9W10sbT1bXSxuPVtdLG89W107Zm9yKGI9MDtiPGg7Yis9MSl7dmFyIHA9ZS5zZWdtZW50c1tiXTtwLmVuZDw9NjU1MzUmJnAuc3RhcnQ8PTY1NTM1PyhqPWouY29uY2F0KHtuYW1lOlwiZW5kX1wiK2IsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOnAuZW5kfSksaz1rLmNvbmNhdCh7bmFtZTpcInN0YXJ0X1wiK2IsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOnAuc3RhcnR9KSxsPWwuY29uY2F0KHtuYW1lOlwiaWREZWx0YV9cIitiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOnAuZGVsdGF9KSxtPW0uY29uY2F0KHtuYW1lOlwiaWRSYW5nZU9mZnNldF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLm9mZnNldH0pLHZvaWQgMCE9PXAuZ2x5cGhJZCYmKG49bi5jb25jYXQoe25hbWU6XCJnbHlwaF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLmdseXBoSWR9KSkpOmkrPTEsY3x8dm9pZCAwPT09cC5nbHlwaEluZGV4fHwobz1vLmNvbmNhdCh7bmFtZTpcImNtYXAxMlN0YXJ0X1wiK2IsdHlwZTpcIlVMT05HXCIsdmFsdWU6cC5zdGFydH0pLG89by5jb25jYXQoe25hbWU6XCJjbWFwMTJFbmRfXCIrYix0eXBlOlwiVUxPTkdcIix2YWx1ZTpwLmVuZH0pLG89by5jb25jYXQoe25hbWU6XCJjbWFwMTJHbHlwaF9cIitiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnAuZ2x5cGhJbmRleH0pKX1pZihlLnNlZ0NvdW50WDI9MiooaC1pKSxlLnNlYXJjaFJhbmdlPTIqTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKGgtaSkvTWF0aC5sb2coMikpKSxlLmVudHJ5U2VsZWN0b3I9TWF0aC5sb2coZS5zZWFyY2hSYW5nZS8yKS9NYXRoLmxvZygyKSxlLnJhbmdlU2hpZnQ9ZS5zZWdDb3VudFgyLWUuc2VhcmNoUmFuZ2UsZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KGopLGUuZmllbGRzLnB1c2goe25hbWU6XCJyZXNlcnZlZFBhZFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KGspLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChsKSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQobSksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KG4pLGUuY21hcDRMZW5ndGg9MTQrMipqLmxlbmd0aCsyKzIqay5sZW5ndGgrMipsLmxlbmd0aCsyKm0ubGVuZ3RoKzIqbi5sZW5ndGgsIWMpe3ZhciBxPTE2KzQqby5sZW5ndGg7ZS5jbWFwMTJPZmZzZXQ9MjArZS5jbWFwNExlbmd0aCxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQoW3tuYW1lOlwiY21hcDEyRm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjEyfSx7bmFtZTpcImNtYXAxMlJlc2VydmVkXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiY21hcDEyTGVuZ3RoXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6cX0se25hbWU6XCJjbWFwMTJMYW5ndWFnZVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwiY21hcDEybkdyb3Vwc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOm8ubGVuZ3RoLzN9XSksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KG8pfXJldHVybiBlfWZ1bmN0aW9uIFgoYSl7dGhpcy5mb250PWF9ZnVuY3Rpb24gWShhKXt0aGlzLmNtYXA9YX1mdW5jdGlvbiBaKGEsYil7dGhpcy5lbmNvZGluZz1hLHRoaXMuY2hhcnNldD1ifWZ1bmN0aW9uICQoYSl7dmFyIGI9dGhpcztzd2l0Y2goYS52ZXJzaW9uKXtjYXNlIDE6dGhpcy5uYW1lcz1RZS5zbGljZSgpO2JyZWFrO2Nhc2UgMjp0aGlzLm5hbWVzPW5ldyBBcnJheShhLm51bWJlck9mR2x5cGhzKTtmb3IodmFyIGM9MDtjPGEubnVtYmVyT2ZHbHlwaHM7YysrKWEuZ2x5cGhOYW1lSW5kZXhbY108UWUubGVuZ3RoP2IubmFtZXNbY109UWVbYS5nbHlwaE5hbWVJbmRleFtjXV06Yi5uYW1lc1tjXT1hLm5hbWVzW2EuZ2x5cGhOYW1lSW5kZXhbY10tUWUubGVuZ3RoXTticmVhaztjYXNlIDIuNTp0aGlzLm5hbWVzPW5ldyBBcnJheShhLm51bWJlck9mR2x5cGhzKTtmb3IodmFyIGQ9MDtkPGEubnVtYmVyT2ZHbHlwaHM7ZCsrKWIubmFtZXNbZF09UWVbZCthLmdseXBoTmFtZUluZGV4W2RdXTticmVhaztjYXNlIDM6ZGVmYXVsdDp0aGlzLm5hbWVzPVtdfX1mdW5jdGlvbiBfKGEpe2Zvcih2YXIgYixjPWEudGFibGVzLmNtYXAuZ2x5cGhJbmRleE1hcCxkPU9iamVjdC5rZXlzKGMpLGU9MDtlPGQubGVuZ3RoO2UrPTEpe3ZhciBmPWRbZV0sZz1jW2ZdO2I9YS5nbHlwaHMuZ2V0KGcpLGIuYWRkVW5pY29kZShwYXJzZUludChmKSl9Zm9yKHZhciBoPTA7aDxhLmdseXBocy5sZW5ndGg7aCs9MSliPWEuZ2x5cGhzLmdldChoKSxhLmNmZkVuY29kaW5nP2EuaXNDSURGb250P2IubmFtZT1cImdpZFwiK2g6Yi5uYW1lPWEuY2ZmRW5jb2RpbmcuY2hhcnNldFtoXTphLmdseXBoTmFtZXMubmFtZXMmJihiLm5hbWU9YS5nbHlwaE5hbWVzLmdseXBoSW5kZXhUb05hbWUoaCkpfWZ1bmN0aW9uIGFhKGEsYixjLGQsZSl7YS5iZWdpblBhdGgoKSxhLm1vdmVUbyhiLGMpLGEubGluZVRvKGQsZSksYS5zdHJva2UoKX1mdW5jdGlvbiBiYShhLGIpe3ZhciBjPWJ8fG5ldyByO3JldHVybntjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmKGM9YygpKSxjfSxzZXQ6ZnVuY3Rpb24oYSl7Yz1hfX19ZnVuY3Rpb24gY2EoYSl7dGhpcy5iaW5kQ29uc3RydWN0b3JWYWx1ZXMoYSl9ZnVuY3Rpb24gZGEoYSxiLGMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse2dldDpmdW5jdGlvbigpe3JldHVybiBhLnBhdGgsYVtjXX0sc2V0OmZ1bmN0aW9uKGIpe2FbY109Yn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBlYShhLGIpe3ZhciBjPXRoaXM7aWYodGhpcy5mb250PWEsdGhpcy5nbHlwaHM9e30sQXJyYXkuaXNBcnJheShiKSlmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrKyljLmdseXBoc1tkXT1iW2RdO3RoaXMubGVuZ3RoPWImJmIubGVuZ3RofHwwfWZ1bmN0aW9uIGZhKGEsYil7cmV0dXJuIG5ldyBjYSh7aW5kZXg6Yixmb250OmF9KX1mdW5jdGlvbiBnYShhLGIsYyxkLGUsZil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGc9bmV3IGNhKHtpbmRleDpiLGZvbnQ6YX0pO3JldHVybiBnLnBhdGg9ZnVuY3Rpb24oKXtjKGcsZCxlKTt2YXIgYj1mKGEuZ2x5cGhzLGcpO3JldHVybiBiLnVuaXRzUGVyRW09YS51bml0c1BlckVtLGJ9LGRhKGcsXCJ4TWluXCIsXCJfeE1pblwiKSxkYShnLFwieE1heFwiLFwiX3hNYXhcIiksZGEoZyxcInlNaW5cIixcIl95TWluXCIpLGRhKGcsXCJ5TWF4XCIsXCJfeU1heFwiKSxnfX1mdW5jdGlvbiBoYShhLGIsYyxkKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uZXcgY2Eoe2luZGV4OmIsZm9udDphfSk7cmV0dXJuIGUucGF0aD1mdW5jdGlvbigpe3ZhciBiPWMoYSxlLGQpO3JldHVybiBiLnVuaXRzUGVyRW09YS51bml0c1BlckVtLGJ9LGV9fWZ1bmN0aW9uIGlhKGEsYil7aWYoYT09PWIpcmV0dXJuITA7aWYoQXJyYXkuaXNBcnJheShhKSYmQXJyYXkuaXNBcnJheShiKSl7aWYoYS5sZW5ndGghPT1iLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrPTEpaWYoIWlhKGFbY10sYltjXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gamEoYSl7cmV0dXJuIGEubGVuZ3RoPDEyNDA/MTA3OmEubGVuZ3RoPDMzOTAwPzExMzE6MzI3Njh9ZnVuY3Rpb24ga2EoYSxiLGMpe3ZhciBkLGUsZj1bXSxnPVtdLGg9TGUuZ2V0Q2FyZDE2KGEsYik7aWYoMCE9PWgpe3ZhciBpPUxlLmdldEJ5dGUoYSxiKzIpO2Q9YisoaCsxKSppKzI7Zm9yKHZhciBqPWIrMyxrPTA7azxoKzE7ays9MSlmLnB1c2goTGUuZ2V0T2Zmc2V0KGEsaixpKSksais9aTtlPWQrZltoXX1lbHNlIGU9YisyO2Zvcih2YXIgbD0wO2w8Zi5sZW5ndGgtMTtsKz0xKXt2YXIgbT1MZS5nZXRCeXRlcyhhLGQrZltsXSxkK2ZbbCsxXSk7YyYmKG09YyhtKSksZy5wdXNoKG0pfXJldHVybntvYmplY3RzOmcsc3RhcnRPZmZzZXQ6YixlbmRPZmZzZXQ6ZX19ZnVuY3Rpb24gbGEoYSl7Zm9yKHZhciBiPVwiXCIsYz0xNSxkPVtcIjBcIixcIjFcIixcIjJcIixcIjNcIixcIjRcIixcIjVcIixcIjZcIixcIjdcIixcIjhcIixcIjlcIixcIi5cIixcIkVcIixcIkUtXCIsbnVsbCxcIi1cIl07Oyl7dmFyIGU9YS5wYXJzZUJ5dGUoKSxmPWU+PjQsZz0xNSZlO2lmKGY9PT1jKWJyZWFrO2lmKGIrPWRbZl0sZz09PWMpYnJlYWs7Yis9ZFtnXX1yZXR1cm4gcGFyc2VGbG9hdChiKX1mdW5jdGlvbiBtYShhLGIpe3ZhciBjLGQsZSxmO2lmKDI4PT09YilyZXR1cm4gYz1hLnBhcnNlQnl0ZSgpLGQ9YS5wYXJzZUJ5dGUoKSxjPDw4fGQ7aWYoMjk9PT1iKXJldHVybiBjPWEucGFyc2VCeXRlKCksZD1hLnBhcnNlQnl0ZSgpLGU9YS5wYXJzZUJ5dGUoKSxmPWEucGFyc2VCeXRlKCksYzw8MjR8ZDw8MTZ8ZTw8OHxmO2lmKDMwPT09YilyZXR1cm4gbGEoYSk7aWYoYj49MzImJmI8PTI0NilyZXR1cm4gYi0xMzk7aWYoYj49MjQ3JiZiPD0yNTApcmV0dXJuIGM9YS5wYXJzZUJ5dGUoKSwyNTYqKGItMjQ3KStjKzEwODtpZihiPj0yNTEmJmI8PTI1NClyZXR1cm4gYz1hLnBhcnNlQnl0ZSgpLDI1NiotKGItMjUxKS1jLTEwODt0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGIwIFwiK2IpfWZ1bmN0aW9uIG5hKGEpe2Zvcih2YXIgYj17fSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hW2NdWzBdLGU9YVtjXVsxXSxmPXZvaWQgMDtpZihmPTE9PT1lLmxlbmd0aD9lWzBdOmUsYi5oYXNPd25Qcm9wZXJ0eShkKSYmIWlzTmFOKGJbZF0pKXRocm93IG5ldyBFcnJvcihcIk9iamVjdCBcIitiK1wiIGFscmVhZHkgaGFzIGtleSBcIitkKTtiW2RdPWZ9cmV0dXJuIGJ9ZnVuY3Rpb24gb2EoYSxiLGMpe2I9dm9pZCAwIT09Yj9iOjA7dmFyIGQ9bmV3IExlLlBhcnNlcihhLGIpLGU9W10sZj1bXTtmb3IoYz12b2lkIDAhPT1jP2M6YS5sZW5ndGg7ZC5yZWxhdGl2ZU9mZnNldDxjOyl7dmFyIGc9ZC5wYXJzZUJ5dGUoKTtnPD0yMT8oMTI9PT1nJiYoZz0xMjAwK2QucGFyc2VCeXRlKCkpLGUucHVzaChbZyxmXSksZj1bXSk6Zi5wdXNoKG1hKGQsZykpfXJldHVybiBuYShlKX1mdW5jdGlvbiBwYShhLGIpe3JldHVybiBiPWI8PTM5MD9OZVtiXTphW2ItMzkxXX1mdW5jdGlvbiBxYShhLGIsYyl7Zm9yKHZhciBkLGU9e30sZj0wO2Y8Yi5sZW5ndGg7Zis9MSl7dmFyIGc9YltmXTtpZihBcnJheS5pc0FycmF5KGcudHlwZSkpe3ZhciBoPVtdO2gubGVuZ3RoPWcudHlwZS5sZW5ndGg7Zm9yKHZhciBpPTA7aTxnLnR5cGUubGVuZ3RoO2krKylkPXZvaWQgMCE9PWFbZy5vcF0/YVtnLm9wXVtpXTp2b2lkIDAsdm9pZCAwPT09ZCYmKGQ9dm9pZCAwIT09Zy52YWx1ZSYmdm9pZCAwIT09Zy52YWx1ZVtpXT9nLnZhbHVlW2ldOm51bGwpLFwiU0lEXCI9PT1nLnR5cGVbaV0mJihkPXBhKGMsZCkpLGhbaV09ZDtlW2cubmFtZV09aH1lbHNlIGQ9YVtnLm9wXSx2b2lkIDA9PT1kJiYoZD12b2lkIDAhPT1nLnZhbHVlP2cudmFsdWU6bnVsbCksXCJTSURcIj09PWcudHlwZSYmKGQ9cGEoYyxkKSksZVtnLm5hbWVdPWR9cmV0dXJuIGV9ZnVuY3Rpb24gcmEoYSxiKXt2YXIgYz17fTtyZXR1cm4gYy5mb3JtYXRNYWpvcj1MZS5nZXRDYXJkOChhLGIpLGMuZm9ybWF0TWlub3I9TGUuZ2V0Q2FyZDgoYSxiKzEpLGMuc2l6ZT1MZS5nZXRDYXJkOChhLGIrMiksYy5vZmZzZXRTaXplPUxlLmdldENhcmQ4KGEsYiszKSxjLnN0YXJ0T2Zmc2V0PWIsYy5lbmRPZmZzZXQ9Yis0LGN9ZnVuY3Rpb24gc2EoYSxiKXtyZXR1cm4gcWEob2EoYSwwLGEuYnl0ZUxlbmd0aCksVGUsYil9ZnVuY3Rpb24gdGEoYSxiLGMsZCl7cmV0dXJuIHFhKG9hKGEsYixjKSxVZSxkKX1mdW5jdGlvbiB1YShhLGIsYyxkKXtmb3IodmFyIGU9W10sZj0wO2Y8Yy5sZW5ndGg7Zis9MSl7dmFyIGc9bmV3IERhdGFWaWV3KG5ldyBVaW50OEFycmF5KGNbZl0pLmJ1ZmZlciksaD1zYShnLGQpO2guX3N1YnJzPVtdLGguX3N1YnJzQmlhcz0wO3ZhciBpPWgucHJpdmF0ZVswXSxqPWgucHJpdmF0ZVsxXTtpZigwIT09aSYmMCE9PWope3ZhciBrPXRhKGEsaitiLGksZCk7aWYoaC5fZGVmYXVsdFdpZHRoWD1rLmRlZmF1bHRXaWR0aFgsaC5fbm9taW5hbFdpZHRoWD1rLm5vbWluYWxXaWR0aFgsMCE9PWsuc3VicnMpe3ZhciBsPWoray5zdWJycyxtPWthKGEsbCtiKTtoLl9zdWJycz1tLm9iamVjdHMsaC5fc3VicnNCaWFzPWphKGguX3N1YnJzKX1oLl9wcml2YXRlRGljdD1rfWUucHVzaChoKX1yZXR1cm4gZX1mdW5jdGlvbiB2YShhLGIsYyxkKXt2YXIgZSxmLGc9bmV3IExlLlBhcnNlcihhLGIpO2MtPTE7dmFyIGg9W1wiLm5vdGRlZlwiXSxpPWcucGFyc2VDYXJkOCgpO2lmKDA9PT1pKWZvcih2YXIgaj0wO2o8YztqKz0xKWU9Zy5wYXJzZVNJRCgpLGgucHVzaChwYShkLGUpKTtlbHNlIGlmKDE9PT1pKWZvcig7aC5sZW5ndGg8PWM7KXtlPWcucGFyc2VTSUQoKSxmPWcucGFyc2VDYXJkOCgpO2Zvcih2YXIgaz0wO2s8PWY7ays9MSloLnB1c2gocGEoZCxlKSksZSs9MX1lbHNle2lmKDIhPT1pKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gY2hhcnNldCBmb3JtYXQgXCIraSk7Zm9yKDtoLmxlbmd0aDw9Yzspe2U9Zy5wYXJzZVNJRCgpLGY9Zy5wYXJzZUNhcmQxNigpO2Zvcih2YXIgbD0wO2w8PWY7bCs9MSloLnB1c2gocGEoZCxlKSksZSs9MX19cmV0dXJuIGh9ZnVuY3Rpb24gd2EoYSxiLGMpe3ZhciBkLGU9e30sZj1uZXcgTGUuUGFyc2VyKGEsYiksZz1mLnBhcnNlQ2FyZDgoKTtpZigwPT09Zylmb3IodmFyIGg9Zi5wYXJzZUNhcmQ4KCksaT0wO2k8aDtpKz0xKWQ9Zi5wYXJzZUNhcmQ4KCksZVtkXT1pO2Vsc2V7aWYoMSE9PWcpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBlbmNvZGluZyBmb3JtYXQgXCIrZyk7dmFyIGo9Zi5wYXJzZUNhcmQ4KCk7ZD0xO2Zvcih2YXIgaz0wO2s8ajtrKz0xKWZvcih2YXIgbD1mLnBhcnNlQ2FyZDgoKSxtPWYucGFyc2VDYXJkOCgpLG49bDtuPD1sK207bis9MSllW25dPWQsZCs9MX1yZXR1cm4gbmV3IFooZSxjKX1mdW5jdGlvbiB4YShhLGIsYyl7ZnVuY3Rpb24gZChhLGIpe3QmJm8uY2xvc2VQYXRoKCksby5tb3ZlVG8oYSxiKSx0PSEwfWZ1bmN0aW9uIGUoKXt2YXIgYTthPXAubGVuZ3RoJTIhPTAsYSYmIXMmJih5PXAuc2hpZnQoKStuKSxxKz1wLmxlbmd0aD4+MSxwLmxlbmd0aD0wLHM9ITB9ZnVuY3Rpb24gZihjKXtmb3IodmFyIG0scix3LHgseixBLEIsQyxELEUsRixHLEg9MDtIPGMubGVuZ3RoOyl7dmFyIEk9Y1tIXTtzd2l0Y2goSCs9MSxJKXtjYXNlIDE6Y2FzZSAzOmUoKTticmVhaztjYXNlIDQ6cC5sZW5ndGg+MSYmIXMmJih5PXAuc2hpZnQoKStuLHM9ITApLHYrPXAucG9wKCksZCh1LHYpO2JyZWFrO2Nhc2UgNTpmb3IoO3AubGVuZ3RoPjA7KXUrPXAuc2hpZnQoKSx2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTticmVhaztjYXNlIDY6Zm9yKDtwLmxlbmd0aD4wJiYodSs9cC5zaGlmdCgpLG8ubGluZVRvKHUsdiksMCE9PXAubGVuZ3RoKTspdis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7YnJlYWs7Y2FzZSA3OmZvcig7cC5sZW5ndGg+MCYmKHYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpLDAhPT1wLmxlbmd0aCk7KXUrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2JyZWFrO2Nhc2UgODpmb3IoO3AubGVuZ3RoPjA7KWc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksXG51PWkrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztjYXNlIDEwOno9cC5wb3AoKStsLEE9a1t6XSxBJiZmKEEpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuO2Nhc2UgMTI6c3dpdGNoKEk9Y1tIXSxIKz0xLEkpe2Nhc2UgMzU6Zz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxCPWkrcC5zaGlmdCgpLEM9aitwLnNoaWZ0KCksRD1CK3Auc2hpZnQoKSxFPUMrcC5zaGlmdCgpLEY9RCtwLnNoaWZ0KCksRz1FK3Auc2hpZnQoKSx1PUYrcC5zaGlmdCgpLHY9RytwLnNoaWZ0KCkscC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztjYXNlIDM0Omc9dStwLnNoaWZ0KCksaD12LGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxCPWkrcC5zaGlmdCgpLEM9aixEPUIrcC5zaGlmdCgpLEU9aixGPUQrcC5zaGlmdCgpLEc9dix1PUYrcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztjYXNlIDM2Omc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWosRD1CK3Auc2hpZnQoKSxFPWosRj1EK3Auc2hpZnQoKSxHPUUrcC5zaGlmdCgpLHU9RitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosQixDKSxvLmN1cnZlVG8oRCxFLEYsRyx1LHYpO2JyZWFrO2Nhc2UgMzc6Zz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxCPWkrcC5zaGlmdCgpLEM9aitwLnNoaWZ0KCksRD1CK3Auc2hpZnQoKSxFPUMrcC5zaGlmdCgpLEY9RCtwLnNoaWZ0KCksRz1FK3Auc2hpZnQoKSxNYXRoLmFicyhGLXUpPk1hdGguYWJzKEctdik/dT1GK3Auc2hpZnQoKTp2PUcrcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztkZWZhdWx0OmNvbnNvbGUubG9nKFwiR2x5cGggXCIrYi5pbmRleCtcIjogdW5rbm93biBvcGVyYXRvciAxMjAwXCIrSSkscC5sZW5ndGg9MH1icmVhaztjYXNlIDE0OnAubGVuZ3RoPjAmJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx0JiYoby5jbG9zZVBhdGgoKSx0PSExKTticmVhaztjYXNlIDE4OmUoKTticmVhaztjYXNlIDE5OmNhc2UgMjA6ZSgpLEgrPXErNz4+MzticmVhaztjYXNlIDIxOnAubGVuZ3RoPjImJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx2Kz1wLnBvcCgpLHUrPXAucG9wKCksZCh1LHYpO2JyZWFrO2Nhc2UgMjI6cC5sZW5ndGg+MSYmIXMmJih5PXAuc2hpZnQoKStuLHM9ITApLHUrPXAucG9wKCksZCh1LHYpO2JyZWFrO2Nhc2UgMjM6ZSgpO2JyZWFrO2Nhc2UgMjQ6Zm9yKDtwLmxlbmd0aD4yOylnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO3UrPXAuc2hpZnQoKSx2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTticmVhaztjYXNlIDI1OmZvcig7cC5sZW5ndGg+NjspdSs9cC5zaGlmdCgpLHYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2c9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAyNjpmb3IocC5sZW5ndGglMiYmKHUrPXAuc2hpZnQoKSk7cC5sZW5ndGg+MDspZz11LGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aSx2PWorcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAyNzpmb3IocC5sZW5ndGglMiYmKHYrPXAuc2hpZnQoKSk7cC5sZW5ndGg+MDspZz11K3Auc2hpZnQoKSxoPXYsaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAyODptPWNbSF0scj1jW0grMV0scC5wdXNoKChtPDwyNHxyPDwxNik+PjE2KSxIKz0yO2JyZWFrO2Nhc2UgMjk6ej1wLnBvcCgpK2EuZ3N1YnJzQmlhcyxBPWEuZ3N1YnJzW3pdLEEmJmYoQSk7YnJlYWs7Y2FzZSAzMDpmb3IoO3AubGVuZ3RoPjAmJihnPXUsaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWorKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KSwwIT09cC5sZW5ndGgpOylnPXUrcC5zaGlmdCgpLGg9dixpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSx1PWkrKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztjYXNlIDMxOmZvcig7cC5sZW5ndGg+MCYmKGc9dStwLnNoaWZ0KCksaD12LGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLHU9aSsoMT09PXAubGVuZ3RoP3Auc2hpZnQoKTowKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpLDAhPT1wLmxlbmd0aCk7KWc9dSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aisoMT09PXAubGVuZ3RoP3Auc2hpZnQoKTowKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2RlZmF1bHQ6STwzMj9jb25zb2xlLmxvZyhcIkdseXBoIFwiK2IuaW5kZXgrXCI6IHVua25vd24gb3BlcmF0b3IgXCIrSSk6STwyNDc/cC5wdXNoKEktMTM5KTpJPDI1MT8obT1jW0hdLEgrPTEscC5wdXNoKDI1NiooSS0yNDcpK20rMTA4KSk6STwyNTU/KG09Y1tIXSxIKz0xLHAucHVzaCgyNTYqLShJLTI1MSktbS0xMDgpKToobT1jW0hdLHI9Y1tIKzFdLHc9Y1tIKzJdLHg9Y1tIKzNdLEgrPTQscC5wdXNoKChtPDwyNHxyPDwxNnx3PDw4fHgpLzY1NTM2KSl9fX12YXIgZyxoLGksaixrLGwsbSxuLG89bmV3IHIscD1bXSxxPTAscz0hMSx0PSExLHU9MCx2PTA7aWYoYS5pc0NJREZvbnQpe3ZhciB3PWEudGFibGVzLmNmZi50b3BEaWN0Ll9mZFNlbGVjdFtiLmluZGV4XSx4PWEudGFibGVzLmNmZi50b3BEaWN0Ll9mZEFycmF5W3ddO2s9eC5fc3VicnMsbD14Ll9zdWJyc0JpYXMsbT14Ll9kZWZhdWx0V2lkdGhYLG49eC5fbm9taW5hbFdpZHRoWH1lbHNlIGs9YS50YWJsZXMuY2ZmLnRvcERpY3QuX3N1YnJzLGw9YS50YWJsZXMuY2ZmLnRvcERpY3QuX3N1YnJzQmlhcyxtPWEudGFibGVzLmNmZi50b3BEaWN0Ll9kZWZhdWx0V2lkdGhYLG49YS50YWJsZXMuY2ZmLnRvcERpY3QuX25vbWluYWxXaWR0aFg7dmFyIHk9bTtyZXR1cm4gZihjKSxiLmFkdmFuY2VXaWR0aD15LG99ZnVuY3Rpb24geWEoYSxiLGMsZCl7dmFyIGUsZj1bXSxnPW5ldyBMZS5QYXJzZXIoYSxiKSxoPWcucGFyc2VDYXJkOCgpO2lmKDA9PT1oKWZvcih2YXIgaT0wO2k8YztpKyspe2lmKChlPWcucGFyc2VDYXJkOCgpKT49ZCl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgdGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgaGFzIGJhZCBGRCBpbmRleCB2YWx1ZSBcIitlK1wiIChGRCBjb3VudCBcIitkK1wiKVwiKTtmLnB1c2goZSl9ZWxzZXtpZigzIT09aCl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgVGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgdGFibGUgaGFzIHVuc3VwcG9ydGVkIGZvcm1hdCBcIitoKTt2YXIgaj1nLnBhcnNlQ2FyZDE2KCksaz1nLnBhcnNlQ2FyZDE2KCk7aWYoMCE9PWspdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIFRhYmxlIENJRCBGb250IEZEU2VsZWN0IGZvcm1hdCAzIHJhbmdlIGhhcyBiYWQgaW5pdGlhbCBHSUQgXCIrayk7Zm9yKHZhciBsLG09MDttPGo7bSsrKXtpZihlPWcucGFyc2VDYXJkOCgpLGw9Zy5wYXJzZUNhcmQxNigpLGU+PWQpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIHRhYmxlIENJRCBGb250IEZEU2VsZWN0IGhhcyBiYWQgRkQgaW5kZXggdmFsdWUgXCIrZStcIiAoRkQgY291bnQgXCIrZCtcIilcIik7aWYobD5jKXRocm93IG5ldyBFcnJvcihcIkNGRiBUYWJsZSBDSUQgRm9udCBGRFNlbGVjdCBmb3JtYXQgMyByYW5nZSBoYXMgYmFkIEdJRCBcIitsKTtmb3IoO2s8bDtrKyspZi5wdXNoKGUpO2s9bH1pZihsIT09Yyl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgVGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgZm9ybWF0IDMgcmFuZ2UgaGFzIGJhZCBmaW5hbCBHSUQgXCIrbCl9cmV0dXJuIGZ9ZnVuY3Rpb24gemEoYSxiLGMpe2MudGFibGVzLmNmZj17fTt2YXIgZD1yYShhLGIpLGU9a2EoYSxkLmVuZE9mZnNldCxMZS5ieXRlc1RvU3RyaW5nKSxmPWthKGEsZS5lbmRPZmZzZXQpLGc9a2EoYSxmLmVuZE9mZnNldCxMZS5ieXRlc1RvU3RyaW5nKSxoPWthKGEsZy5lbmRPZmZzZXQpO2MuZ3N1YnJzPWgub2JqZWN0cyxjLmdzdWJyc0JpYXM9amEoYy5nc3VicnMpO3ZhciBpPXVhKGEsYixmLm9iamVjdHMsZy5vYmplY3RzKTtpZigxIT09aS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIHRhYmxlIGhhcyB0b28gbWFueSBmb250cyBpbiAnRm9udFNldCcgLSBjb3VudCBvZiBmb250cyBOYW1lSW5kZXgubGVuZ3RoID0gXCIraS5sZW5ndGgpO3ZhciBqPWlbMF07aWYoYy50YWJsZXMuY2ZmLnRvcERpY3Q9aixqLl9wcml2YXRlRGljdCYmKGMuZGVmYXVsdFdpZHRoWD1qLl9wcml2YXRlRGljdC5kZWZhdWx0V2lkdGhYLGMubm9taW5hbFdpZHRoWD1qLl9wcml2YXRlRGljdC5ub21pbmFsV2lkdGhYKSx2b2lkIDAhPT1qLnJvc1swXSYmdm9pZCAwIT09ai5yb3NbMV0mJihjLmlzQ0lERm9udD0hMCksYy5pc0NJREZvbnQpe3ZhciBrPWouZmRBcnJheSxsPWouZmRTZWxlY3Q7aWYoMD09PWt8fDA9PT1sKXRocm93IG5ldyBFcnJvcihcIkZvbnQgaXMgbWFya2VkIGFzIGEgQ0lEIGZvbnQsIGJ1dCBGREFycmF5IGFuZC9vciBGRFNlbGVjdCBpbmZvcm1hdGlvbiBpcyBtaXNzaW5nXCIpO2srPWI7dmFyIG09a2EoYSxrKSxuPXVhKGEsYixtLm9iamVjdHMsZy5vYmplY3RzKTtqLl9mZEFycmF5PW4sbCs9YixqLl9mZFNlbGVjdD15YShhLGwsYy5udW1HbHlwaHMsbi5sZW5ndGgpfXZhciBvPWIrai5wcml2YXRlWzFdLHA9dGEoYSxvLGoucHJpdmF0ZVswXSxnLm9iamVjdHMpO2lmKGMuZGVmYXVsdFdpZHRoWD1wLmRlZmF1bHRXaWR0aFgsYy5ub21pbmFsV2lkdGhYPXAubm9taW5hbFdpZHRoWCwwIT09cC5zdWJycyl7dmFyIHE9bytwLnN1YnJzLHI9a2EoYSxxKTtjLnN1YnJzPXIub2JqZWN0cyxjLnN1YnJzQmlhcz1qYShjLnN1YnJzKX1lbHNlIGMuc3VicnM9W10sYy5zdWJyc0JpYXM9MDt2YXIgcz1rYShhLGIrai5jaGFyU3RyaW5ncyk7Yy5uR2x5cGhzPXMub2JqZWN0cy5sZW5ndGg7dmFyIHQ9dmEoYSxiK2ouY2hhcnNldCxjLm5HbHlwaHMsZy5vYmplY3RzKTswPT09ai5lbmNvZGluZz9jLmNmZkVuY29kaW5nPW5ldyBaKE9lLHQpOjE9PT1qLmVuY29kaW5nP2MuY2ZmRW5jb2Rpbmc9bmV3IFooUGUsdCk6Yy5jZmZFbmNvZGluZz13YShhLGIrai5lbmNvZGluZyx0KSxjLmVuY29kaW5nPWMuZW5jb2Rpbmd8fGMuY2ZmRW5jb2RpbmcsYy5nbHlwaHM9bmV3IFNlLkdseXBoU2V0KGMpO2Zvcih2YXIgdT0wO3U8Yy5uR2x5cGhzO3UrPTEpe3ZhciB2PXMub2JqZWN0c1t1XTtjLmdseXBocy5wdXNoKHUsU2UuY2ZmR2x5cGhMb2FkZXIoYyx1LHhhLHYpKX19ZnVuY3Rpb24gQWEoYSxiKXt2YXIgYyxkPU5lLmluZGV4T2YoYSk7cmV0dXJuIGQ+PTAmJihjPWQpLGQ9Yi5pbmRleE9mKGEpLGQ+PTA/Yz1kK05lLmxlbmd0aDooYz1OZS5sZW5ndGgrYi5sZW5ndGgsYi5wdXNoKGEpKSxjfWZ1bmN0aW9uIEJhKCl7cmV0dXJuIG5ldyBJZS5SZWNvcmQoXCJIZWFkZXJcIixbe25hbWU6XCJtYWpvclwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjF9LHtuYW1lOlwibWlub3JcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZTowfSx7bmFtZTpcImhkclNpemVcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZTo0fSx7bmFtZTpcIm1ham9yXCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6MX1dKX1mdW5jdGlvbiBDYShhKXt2YXIgYj1uZXcgSWUuUmVjb3JkKFwiTmFtZSBJTkRFWFwiLFt7bmFtZTpcIm5hbWVzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSk7Yi5uYW1lcz1bXTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrPTEpYi5uYW1lcy5wdXNoKHtuYW1lOlwibmFtZV9cIitjLHR5cGU6XCJOQU1FXCIsdmFsdWU6YVtjXX0pO3JldHVybiBifWZ1bmN0aW9uIERhKGEsYixjKXtmb3IodmFyIGQ9e30sZT0wO2U8YS5sZW5ndGg7ZSs9MSl7dmFyIGY9YVtlXSxnPWJbZi5uYW1lXTt2b2lkIDA9PT1nfHxpYShnLGYudmFsdWUpfHwoXCJTSURcIj09PWYudHlwZSYmKGc9QWEoZyxjKSksZFtmLm9wXT17bmFtZTpmLm5hbWUsdHlwZTpmLnR5cGUsdmFsdWU6Z30pfXJldHVybiBkfWZ1bmN0aW9uIEVhKGEsYil7dmFyIGM9bmV3IEllLlJlY29yZChcIlRvcCBESUNUXCIsW3tuYW1lOlwiZGljdFwiLHR5cGU6XCJESUNUXCIsdmFsdWU6e319XSk7cmV0dXJuIGMuZGljdD1EYShUZSxhLGIpLGN9ZnVuY3Rpb24gRmEoYSl7dmFyIGI9bmV3IEllLlJlY29yZChcIlRvcCBESUNUIElOREVYXCIsW3tuYW1lOlwidG9wRGljdHNcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKTtyZXR1cm4gYi50b3BEaWN0cz1be25hbWU6XCJ0b3BEaWN0XzBcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTphfV0sYn1mdW5jdGlvbiBHYShhKXt2YXIgYj1uZXcgSWUuUmVjb3JkKFwiU3RyaW5nIElOREVYXCIsW3tuYW1lOlwic3RyaW5nc1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pO2Iuc3RyaW5ncz1bXTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrPTEpYi5zdHJpbmdzLnB1c2goe25hbWU6XCJzdHJpbmdfXCIrYyx0eXBlOlwiU1RSSU5HXCIsdmFsdWU6YVtjXX0pO3JldHVybiBifWZ1bmN0aW9uIEhhKCl7cmV0dXJuIG5ldyBJZS5SZWNvcmQoXCJHbG9iYWwgU3ViciBJTkRFWFwiLFt7bmFtZTpcInN1YnJzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSl9ZnVuY3Rpb24gSWEoYSxiKXtmb3IodmFyIGM9bmV3IEllLlJlY29yZChcIkNoYXJzZXRzXCIsW3tuYW1lOlwiZm9ybWF0XCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6MH1dKSxkPTA7ZDxhLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdLGY9QWEoZSxiKTtjLmZpZWxkcy5wdXNoKHtuYW1lOlwiZ2x5cGhfXCIrZCx0eXBlOlwiU0lEXCIsdmFsdWU6Zn0pfXJldHVybiBjfWZ1bmN0aW9uIEphKGEpe3ZhciBiPVtdLGM9YS5wYXRoO2IucHVzaCh7bmFtZTpcIndpZHRoXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmEuYWR2YW5jZVdpZHRofSk7Zm9yKHZhciBkPTAsZT0wLGY9MDtmPGMuY29tbWFuZHMubGVuZ3RoO2YrPTEpe3ZhciBnPXZvaWQgMCxoPXZvaWQgMCxpPWMuY29tbWFuZHNbZl07aWYoXCJRXCI9PT1pLnR5cGUpe3ZhciBqPTEvMyxrPTIvMztpPXt0eXBlOlwiQ1wiLHg6aS54LHk6aS55LHgxOmoqZCtrKmkueDEseTE6aiplK2sqaS55MSx4MjpqKmkueCtrKmkueDEseTI6aippLnkrayppLnkxfX1pZihcIk1cIj09PWkudHlwZSlnPU1hdGgucm91bmQoaS54LWQpLGg9TWF0aC5yb3VuZChpLnktZSksYi5wdXNoKHtuYW1lOlwiZHhcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6Z30pLGIucHVzaCh7bmFtZTpcImR5XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmh9KSxiLnB1c2goe25hbWU6XCJybW92ZXRvXCIsdHlwZTpcIk9QXCIsdmFsdWU6MjF9KSxkPU1hdGgucm91bmQoaS54KSxlPU1hdGgucm91bmQoaS55KTtlbHNlIGlmKFwiTFwiPT09aS50eXBlKWc9TWF0aC5yb3VuZChpLngtZCksaD1NYXRoLnJvdW5kKGkueS1lKSxiLnB1c2goe25hbWU6XCJkeFwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpnfSksYi5wdXNoKHtuYW1lOlwiZHlcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6aH0pLGIucHVzaCh7bmFtZTpcInJsaW5ldG9cIix0eXBlOlwiT1BcIix2YWx1ZTo1fSksZD1NYXRoLnJvdW5kKGkueCksZT1NYXRoLnJvdW5kKGkueSk7ZWxzZSBpZihcIkNcIj09PWkudHlwZSl7dmFyIGw9TWF0aC5yb3VuZChpLngxLWQpLG09TWF0aC5yb3VuZChpLnkxLWUpLG49TWF0aC5yb3VuZChpLngyLWkueDEpLG89TWF0aC5yb3VuZChpLnkyLWkueTEpO2c9TWF0aC5yb3VuZChpLngtaS54MiksaD1NYXRoLnJvdW5kKGkueS1pLnkyKSxiLnB1c2goe25hbWU6XCJkeDFcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6bH0pLGIucHVzaCh7bmFtZTpcImR5MVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTptfSksYi5wdXNoKHtuYW1lOlwiZHgyXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOm59KSxiLnB1c2goe25hbWU6XCJkeTJcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6b30pLGIucHVzaCh7bmFtZTpcImR4XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmd9KSxiLnB1c2goe25hbWU6XCJkeVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpofSksYi5wdXNoKHtuYW1lOlwicnJjdXJ2ZXRvXCIsdHlwZTpcIk9QXCIsdmFsdWU6OH0pLGQ9TWF0aC5yb3VuZChpLngpLGU9TWF0aC5yb3VuZChpLnkpfX1yZXR1cm4gYi5wdXNoKHtuYW1lOlwiZW5kY2hhclwiLHR5cGU6XCJPUFwiLHZhbHVlOjE0fSksYn1mdW5jdGlvbiBLYShhKXtmb3IodmFyIGI9bmV3IEllLlJlY29yZChcIkNoYXJTdHJpbmdzIElOREVYXCIsW3tuYW1lOlwiY2hhclN0cmluZ3NcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hLmdldChjKSxlPUphKGQpO2IuY2hhclN0cmluZ3MucHVzaCh7bmFtZTpkLm5hbWUsdHlwZTpcIkNIQVJTVFJJTkdcIix2YWx1ZTplfSl9cmV0dXJuIGJ9ZnVuY3Rpb24gTGEoYSxiKXt2YXIgYz1uZXcgSWUuUmVjb3JkKFwiUHJpdmF0ZSBESUNUXCIsW3tuYW1lOlwiZGljdFwiLHR5cGU6XCJESUNUXCIsdmFsdWU6e319XSk7cmV0dXJuIGMuZGljdD1EYShVZSxhLGIpLGN9ZnVuY3Rpb24gTWEoYSxiKXtmb3IodmFyIGMsZD1uZXcgSWUuVGFibGUoXCJDRkYgXCIsW3tuYW1lOlwiaGVhZGVyXCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcIm5hbWVJbmRleFwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJ0b3BEaWN0SW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwic3RyaW5nSW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwiZ2xvYmFsU3VickluZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcImNoYXJzZXRzXCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcImNoYXJTdHJpbmdzSW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwicHJpdmF0ZURpY3RcIix0eXBlOlwiUkVDT1JEXCJ9XSksZT0xL2IudW5pdHNQZXJFbSxmPXt2ZXJzaW9uOmIudmVyc2lvbixmdWxsTmFtZTpiLmZ1bGxOYW1lLGZhbWlseU5hbWU6Yi5mYW1pbHlOYW1lLHdlaWdodDpiLndlaWdodE5hbWUsZm9udEJCb3g6Yi5mb250QkJveHx8WzAsMCwwLDBdLGZvbnRNYXRyaXg6W2UsMCwwLGUsMCwwXSxjaGFyc2V0Ojk5OSxlbmNvZGluZzowLGNoYXJTdHJpbmdzOjk5OSxwcml2YXRlOlswLDk5OV19LGc9e30saD1bXSxpPTE7aTxhLmxlbmd0aDtpKz0xKWM9YS5nZXQoaSksaC5wdXNoKGMubmFtZSk7dmFyIGo9W107ZC5oZWFkZXI9QmEoKSxkLm5hbWVJbmRleD1DYShbYi5wb3N0U2NyaXB0TmFtZV0pO3ZhciBrPUVhKGYsaik7ZC50b3BEaWN0SW5kZXg9RmEoayksZC5nbG9iYWxTdWJySW5kZXg9SGEoKSxkLmNoYXJzZXRzPUlhKGgsaiksZC5jaGFyU3RyaW5nc0luZGV4PUthKGEpLGQucHJpdmF0ZURpY3Q9TGEoZyxqKSxkLnN0cmluZ0luZGV4PUdhKGopO3ZhciBsPWQuaGVhZGVyLnNpemVPZigpK2QubmFtZUluZGV4LnNpemVPZigpK2QudG9wRGljdEluZGV4LnNpemVPZigpK2Quc3RyaW5nSW5kZXguc2l6ZU9mKCkrZC5nbG9iYWxTdWJySW5kZXguc2l6ZU9mKCk7cmV0dXJuIGYuY2hhcnNldD1sLGYuZW5jb2Rpbmc9MCxmLmNoYXJTdHJpbmdzPWYuY2hhcnNldCtkLmNoYXJzZXRzLnNpemVPZigpLGYucHJpdmF0ZVsxXT1mLmNoYXJTdHJpbmdzK2QuY2hhclN0cmluZ3NJbmRleC5zaXplT2YoKSxrPUVhKGYsaiksZC50b3BEaWN0SW5kZXg9RmEoayksZH1mdW5jdGlvbiBOYShhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3JldHVybiBjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLmZvbnRSZXZpc2lvbj1NYXRoLnJvdW5kKDFlMypkLnBhcnNlRml4ZWQoKSkvMWUzLGMuY2hlY2tTdW1BZGp1c3RtZW50PWQucGFyc2VVTG9uZygpLGMubWFnaWNOdW1iZXI9ZC5wYXJzZVVMb25nKCkseGUuYXJndW1lbnQoMTU5NDgzNDE2NT09PWMubWFnaWNOdW1iZXIsXCJGb250IGhlYWRlciBoYXMgd3JvbmcgbWFnaWMgbnVtYmVyLlwiKSxjLmZsYWdzPWQucGFyc2VVU2hvcnQoKSxjLnVuaXRzUGVyRW09ZC5wYXJzZVVTaG9ydCgpLGMuY3JlYXRlZD1kLnBhcnNlTG9uZ0RhdGVUaW1lKCksYy5tb2RpZmllZD1kLnBhcnNlTG9uZ0RhdGVUaW1lKCksYy54TWluPWQucGFyc2VTaG9ydCgpLGMueU1pbj1kLnBhcnNlU2hvcnQoKSxjLnhNYXg9ZC5wYXJzZVNob3J0KCksYy55TWF4PWQucGFyc2VTaG9ydCgpLGMubWFjU3R5bGU9ZC5wYXJzZVVTaG9ydCgpLGMubG93ZXN0UmVjUFBFTT1kLnBhcnNlVVNob3J0KCksYy5mb250RGlyZWN0aW9uSGludD1kLnBhcnNlU2hvcnQoKSxjLmluZGV4VG9Mb2NGb3JtYXQ9ZC5wYXJzZVNob3J0KCksYy5nbHlwaERhdGFGb3JtYXQ9ZC5wYXJzZVNob3J0KCksY31mdW5jdGlvbiBPYShhKXt2YXIgYj1NYXRoLnJvdW5kKChuZXcgRGF0ZSkuZ2V0VGltZSgpLzFlMykrMjA4Mjg0NDgwMCxjPWI7cmV0dXJuIGEuY3JlYXRlZFRpbWVzdGFtcCYmKGM9YS5jcmVhdGVkVGltZXN0YW1wKzIwODI4NDQ4MDApLG5ldyBJZS5UYWJsZShcImhlYWRcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwiZm9udFJldmlzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwiY2hlY2tTdW1BZGp1c3RtZW50XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtYWdpY051bWJlclwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjE1OTQ4MzQxNjV9LHtuYW1lOlwiZmxhZ3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1bml0c1BlckVtXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjFlM30se25hbWU6XCJjcmVhdGVkXCIsdHlwZTpcIkxPTkdEQVRFVElNRVwiLHZhbHVlOmN9LHtuYW1lOlwibW9kaWZpZWRcIix0eXBlOlwiTE9OR0RBVEVUSU1FXCIsdmFsdWU6Yn0se25hbWU6XCJ4TWluXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5TWluXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ4TWF4XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5TWF4XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJtYWNTdHlsZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImxvd2VzdFJlY1BQRU1cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJmb250RGlyZWN0aW9uSGludFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjJ9LHtuYW1lOlwiaW5kZXhUb0xvY0Zvcm1hdFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZ2x5cGhEYXRhRm9ybWF0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH1dLGEpfWZ1bmN0aW9uIFBhKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7cmV0dXJuIGMudmVyc2lvbj1kLnBhcnNlVmVyc2lvbigpLGMuYXNjZW5kZXI9ZC5wYXJzZVNob3J0KCksYy5kZXNjZW5kZXI9ZC5wYXJzZVNob3J0KCksYy5saW5lR2FwPWQucGFyc2VTaG9ydCgpLGMuYWR2YW5jZVdpZHRoTWF4PWQucGFyc2VVU2hvcnQoKSxjLm1pbkxlZnRTaWRlQmVhcmluZz1kLnBhcnNlU2hvcnQoKSxjLm1pblJpZ2h0U2lkZUJlYXJpbmc9ZC5wYXJzZVNob3J0KCksYy54TWF4RXh0ZW50PWQucGFyc2VTaG9ydCgpLGMuY2FyZXRTbG9wZVJpc2U9ZC5wYXJzZVNob3J0KCksYy5jYXJldFNsb3BlUnVuPWQucGFyc2VTaG9ydCgpLGMuY2FyZXRPZmZzZXQ9ZC5wYXJzZVNob3J0KCksZC5yZWxhdGl2ZU9mZnNldCs9OCxjLm1ldHJpY0RhdGFGb3JtYXQ9ZC5wYXJzZVNob3J0KCksYy5udW1iZXJPZkhNZXRyaWNzPWQucGFyc2VVU2hvcnQoKSxjfWZ1bmN0aW9uIFFhKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJoaGVhXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjY1NTM2fSx7bmFtZTpcImFzY2VuZGVyXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJkZXNjZW5kZXJcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImxpbmVHYXBcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImFkdmFuY2VXaWR0aE1heFwiLHR5cGU6XCJVRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcIm1pbkxlZnRTaWRlQmVhcmluZ1wiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwibWluUmlnaHRTaWRlQmVhcmluZ1wiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwieE1heEV4dGVudFwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwiY2FyZXRTbG9wZVJpc2VcIix0eXBlOlwiU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcImNhcmV0U2xvcGVSdW5cIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImNhcmV0T2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXNlcnZlZDFcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlc2VydmVkMlwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVzZXJ2ZWQzXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXNlcnZlZDRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcIm1ldHJpY0RhdGFGb3JtYXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcIm51bWJlck9mSE1ldHJpY3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dLGEpfWZ1bmN0aW9uIFJhKGEsYixjLGQsZSl7Zm9yKHZhciBmLGcsaD1uZXcgTGUuUGFyc2VyKGEsYiksaT0wO2k8ZDtpKz0xKXtpPGMmJihmPWgucGFyc2VVU2hvcnQoKSxnPWgucGFyc2VTaG9ydCgpKTt2YXIgaj1lLmdldChpKTtqLmFkdmFuY2VXaWR0aD1mLGoubGVmdFNpZGVCZWFyaW5nPWd9fWZ1bmN0aW9uIFNhKGEpe2Zvcih2YXIgYj1uZXcgSWUuVGFibGUoXCJobXR4XCIsW10pLGM9MDtjPGEubGVuZ3RoO2MrPTEpe3ZhciBkPWEuZ2V0KGMpLGU9ZC5hZHZhbmNlV2lkdGh8fDAsZj1kLmxlZnRTaWRlQmVhcmluZ3x8MDtiLmZpZWxkcy5wdXNoKHtuYW1lOlwiYWR2YW5jZVdpZHRoX1wiK2MsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmV9KSxiLmZpZWxkcy5wdXNoKHtuYW1lOlwibGVmdFNpZGVCZWFyaW5nX1wiK2MsdHlwZTpcIlNIT1JUXCIsdmFsdWU6Zn0pfXJldHVybiBifWZ1bmN0aW9uIFRhKGEpe2Zvcih2YXIgYj1uZXcgSWUuVGFibGUoXCJsdGFnXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjF9LHtuYW1lOlwiZmxhZ3NcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm51bVRhZ3NcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTphLmxlbmd0aH1dKSxjPVwiXCIsZD0xMis0KmEubGVuZ3RoLGU9MDtlPGEubGVuZ3RoOysrZSl7dmFyIGY9Yy5pbmRleE9mKGFbZV0pO2Y8MCYmKGY9Yy5sZW5ndGgsYys9YVtlXSksYi5maWVsZHMucHVzaCh7bmFtZTpcIm9mZnNldCBcIitlLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkK2Z9KSxiLmZpZWxkcy5wdXNoKHtuYW1lOlwibGVuZ3RoIFwiK2UsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmFbZV0ubGVuZ3RofSl9cmV0dXJuIGIuZmllbGRzLnB1c2goe25hbWU6XCJzdHJpbmdQb29sXCIsdHlwZTpcIkNIQVJBUlJBWVwiLHZhbHVlOmN9KSxifWZ1bmN0aW9uIFVhKGEsYil7dmFyIGM9bmV3IExlLlBhcnNlcihhLGIpLGQ9Yy5wYXJzZVVMb25nKCk7eGUuYXJndW1lbnQoMT09PWQsXCJVbnN1cHBvcnRlZCBsdGFnIHRhYmxlIHZlcnNpb24uXCIpLGMuc2tpcChcInVMb25nXCIsMSk7Zm9yKHZhciBlPWMucGFyc2VVTG9uZygpLGY9W10sZz0wO2c8ZTtnKyspe2Zvcih2YXIgaD1cIlwiLGk9YitjLnBhcnNlVVNob3J0KCksaj1jLnBhcnNlVVNob3J0KCksaz1pO2s8aStqOysrayloKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEuZ2V0SW50OChrKSk7Zi5wdXNoKGgpfXJldHVybiBmfWZ1bmN0aW9uIFZhKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7cmV0dXJuIGMudmVyc2lvbj1kLnBhcnNlVmVyc2lvbigpLGMubnVtR2x5cGhzPWQucGFyc2VVU2hvcnQoKSwxPT09Yy52ZXJzaW9uJiYoYy5tYXhQb2ludHM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29udG91cnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29tcG9zaXRlUG9pbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbXBvc2l0ZUNvbnRvdXJzPWQucGFyc2VVU2hvcnQoKSxjLm1heFpvbmVzPWQucGFyc2VVU2hvcnQoKSxjLm1heFR3aWxpZ2h0UG9pbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heFN0b3JhZ2U9ZC5wYXJzZVVTaG9ydCgpLGMubWF4RnVuY3Rpb25EZWZzPWQucGFyc2VVU2hvcnQoKSxjLm1heEluc3RydWN0aW9uRGVmcz1kLnBhcnNlVVNob3J0KCksYy5tYXhTdGFja0VsZW1lbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heFNpemVPZkluc3RydWN0aW9ucz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb21wb25lbnRFbGVtZW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb21wb25lbnREZXB0aD1kLnBhcnNlVVNob3J0KCkpLGN9ZnVuY3Rpb24gV2EoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcIm1heHBcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6MjA0ODB9LHtuYW1lOlwibnVtR2x5cGhzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmF9XSl9ZnVuY3Rpb24gWGEoYSxiLGMpe3N3aXRjaChhKXtjYXNlIDA6aWYoNjU1MzU9PT1iKXJldHVyblwidW5kXCI7aWYoYylyZXR1cm4gY1tiXTticmVhaztjYXNlIDE6cmV0dXJuIGFmW2JdO2Nhc2UgMzpyZXR1cm4gY2ZbYl19fWZ1bmN0aW9uIFlhKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiBkZjtjYXNlIDE6cmV0dXJuIGZmW2NdfHxlZltiXTtjYXNlIDM6aWYoMT09PWJ8fDEwPT09YilyZXR1cm4gZGZ9fWZ1bmN0aW9uIFphKGEsYixjKXtmb3IodmFyIGQ9e30sZT1uZXcgTGUuUGFyc2VyKGEsYiksZj1lLnBhcnNlVVNob3J0KCksZz1lLnBhcnNlVVNob3J0KCksaD1lLm9mZnNldCtlLnBhcnNlVVNob3J0KCksaT0wO2k8ZztpKyspe3ZhciBqPWUucGFyc2VVU2hvcnQoKSxrPWUucGFyc2VVU2hvcnQoKSxsPWUucGFyc2VVU2hvcnQoKSxtPWUucGFyc2VVU2hvcnQoKSxuPV9lW21dfHxtLG89ZS5wYXJzZVVTaG9ydCgpLHA9ZS5wYXJzZVVTaG9ydCgpLHE9WGEoaixsLGMpLHI9WWEoaixrLGwpO2lmKHZvaWQgMCE9PXImJnZvaWQgMCE9PXEpe3ZhciBzPXZvaWQgMDtpZihzPXI9PT1kZj9BZS5VVEYxNihhLGgrcCxvKTpBZS5NQUNTVFJJTkcoYSxoK3AsbyxyKSl7dmFyIHQ9ZFtuXTt2b2lkIDA9PT10JiYodD1kW25dPXt9KSx0W3FdPXN9fX1yZXR1cm4gMT09PWYmJmUucGFyc2VVU2hvcnQoKSxkfWZ1bmN0aW9uICRhKGEpe3ZhciBiPXt9O2Zvcih2YXIgYyBpbiBhKWJbYVtjXV09cGFyc2VJbnQoYyk7cmV0dXJuIGJ9ZnVuY3Rpb24gX2EoYSxiLGMsZCxlLGYpe3JldHVybiBuZXcgSWUuUmVjb3JkKFwiTmFtZVJlY29yZFwiLFt7bmFtZTpcInBsYXRmb3JtSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YX0se25hbWU6XCJlbmNvZGluZ0lEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmJ9LHtuYW1lOlwibGFuZ3VhZ2VJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjfSx7bmFtZTpcIm5hbWVJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkfSx7bmFtZTpcImxlbmd0aFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTplfSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpmfV0pfWZ1bmN0aW9uIGFiKGEsYil7dmFyIGM9YS5sZW5ndGgsZD1iLmxlbmd0aC1jKzE7YTpmb3IodmFyIGU9MDtlPGQ7ZSsrKWZvcig7ZTxkO2UrKyl7Zm9yKHZhciBmPTA7ZjxjO2YrKylpZihiW2UrZl0hPT1hW2ZdKWNvbnRpbnVlIGE7cmV0dXJuIGV9cmV0dXJuLTF9ZnVuY3Rpb24gYmIoYSxiKXt2YXIgYz1hYihhLGIpO2lmKGM8MCl7Yz1iLmxlbmd0aDtmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2Q8ZTsrK2QpYi5wdXNoKGFbZF0pfXJldHVybiBjfWZ1bmN0aW9uIGNiKGEsYil7dmFyIGMsZD1bXSxlPXt9LGY9JGEoX2UpO2Zvcih2YXIgZyBpbiBhKXt2YXIgaD1mW2ddO2lmKHZvaWQgMD09PWgmJihoPWcpLGM9cGFyc2VJbnQoaCksaXNOYU4oYykpdGhyb3cgbmV3IEVycm9yKCdOYW1lIHRhYmxlIGVudHJ5IFwiJytnKydcIiBkb2VzIG5vdCBleGlzdCwgc2VlIG5hbWVUYWJsZU5hbWVzIGZvciBjb21wbGV0ZSBsaXN0LicpO2VbY109YVtnXSxkLnB1c2goYyl9Zm9yKHZhciBpPSRhKGFmKSxqPSRhKGNmKSxrPVtdLGw9W10sbT0wO208ZC5sZW5ndGg7bSsrKXtjPWRbbV07dmFyIG49ZVtjXTtmb3IodmFyIG8gaW4gbil7dmFyIHA9bltvXSxxPTEscj1pW29dLHM9YmZbcl0sdD1ZYShxLHMsciksdT1CZS5NQUNTVFJJTkcocCx0KTt2b2lkIDA9PT11JiYocT0wLHI9Yi5pbmRleE9mKG8pLHI8MCYmKHI9Yi5sZW5ndGgsYi5wdXNoKG8pKSxzPTQsdT1CZS5VVEYxNihwKSk7dmFyIHY9YmIodSxsKTtrLnB1c2goX2EocSxzLHIsYyx1Lmxlbmd0aCx2KSk7dmFyIHc9altvXTtpZih2b2lkIDAhPT13KXt2YXIgeD1CZS5VVEYxNihwKSx5PWJiKHgsbCk7ay5wdXNoKF9hKDMsMSx3LGMseC5sZW5ndGgseSkpfX19ay5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEucGxhdGZvcm1JRC1iLnBsYXRmb3JtSUR8fGEuZW5jb2RpbmdJRC1iLmVuY29kaW5nSUR8fGEubGFuZ3VhZ2VJRC1iLmxhbmd1YWdlSUR8fGEubmFtZUlELWIubmFtZUlEfSk7Zm9yKHZhciB6PW5ldyBJZS5UYWJsZShcIm5hbWVcIixbe25hbWU6XCJmb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJjb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTprLmxlbmd0aH0se25hbWU6XCJzdHJpbmdPZmZzZXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6NisxMiprLmxlbmd0aH1dKSxBPTA7QTxrLmxlbmd0aDtBKyspei5maWVsZHMucHVzaCh7bmFtZTpcInJlY29yZF9cIitBLHR5cGU6XCJSRUNPUkRcIix2YWx1ZTprW0FdfSk7cmV0dXJuIHouZmllbGRzLnB1c2goe25hbWU6XCJzdHJpbmdzXCIsdHlwZTpcIkxJVEVSQUxcIix2YWx1ZTpsfSksen1mdW5jdGlvbiBkYihhKXtmb3IodmFyIGI9MDtiPGhmLmxlbmd0aDtiKz0xKXt2YXIgYz1oZltiXTtpZihhPj1jLmJlZ2luJiZhPGMuZW5kKXJldHVybiBifXJldHVybi0xfWZ1bmN0aW9uIGViKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7Yy52ZXJzaW9uPWQucGFyc2VVU2hvcnQoKSxjLnhBdmdDaGFyV2lkdGg9ZC5wYXJzZVNob3J0KCksYy51c1dlaWdodENsYXNzPWQucGFyc2VVU2hvcnQoKSxjLnVzV2lkdGhDbGFzcz1kLnBhcnNlVVNob3J0KCksYy5mc1R5cGU9ZC5wYXJzZVVTaG9ydCgpLGMueVN1YnNjcmlwdFhTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1YnNjcmlwdFlTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1YnNjcmlwdFhPZmZzZXQ9ZC5wYXJzZVNob3J0KCksYy55U3Vic2NyaXB0WU9mZnNldD1kLnBhcnNlU2hvcnQoKSxjLnlTdXBlcnNjcmlwdFhTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1cGVyc2NyaXB0WVNpemU9ZC5wYXJzZVNob3J0KCksYy55U3VwZXJzY3JpcHRYT2Zmc2V0PWQucGFyc2VTaG9ydCgpLGMueVN1cGVyc2NyaXB0WU9mZnNldD1kLnBhcnNlU2hvcnQoKSxjLnlTdHJpa2VvdXRTaXplPWQucGFyc2VTaG9ydCgpLGMueVN0cmlrZW91dFBvc2l0aW9uPWQucGFyc2VTaG9ydCgpLGMuc0ZhbWlseUNsYXNzPWQucGFyc2VTaG9ydCgpLGMucGFub3NlPVtdO2Zvcih2YXIgZT0wO2U8MTA7ZSsrKWMucGFub3NlW2VdPWQucGFyc2VCeXRlKCk7cmV0dXJuIGMudWxVbmljb2RlUmFuZ2UxPWQucGFyc2VVTG9uZygpLGMudWxVbmljb2RlUmFuZ2UyPWQucGFyc2VVTG9uZygpLGMudWxVbmljb2RlUmFuZ2UzPWQucGFyc2VVTG9uZygpLGMudWxVbmljb2RlUmFuZ2U0PWQucGFyc2VVTG9uZygpLGMuYWNoVmVuZElEPVN0cmluZy5mcm9tQ2hhckNvZGUoZC5wYXJzZUJ5dGUoKSxkLnBhcnNlQnl0ZSgpLGQucGFyc2VCeXRlKCksZC5wYXJzZUJ5dGUoKSksYy5mc1NlbGVjdGlvbj1kLnBhcnNlVVNob3J0KCksYy51c0ZpcnN0Q2hhckluZGV4PWQucGFyc2VVU2hvcnQoKSxjLnVzTGFzdENoYXJJbmRleD1kLnBhcnNlVVNob3J0KCksYy5zVHlwb0FzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMuc1R5cG9EZXNjZW5kZXI9ZC5wYXJzZVNob3J0KCksYy5zVHlwb0xpbmVHYXA9ZC5wYXJzZVNob3J0KCksYy51c1dpbkFzY2VudD1kLnBhcnNlVVNob3J0KCksYy51c1dpbkRlc2NlbnQ9ZC5wYXJzZVVTaG9ydCgpLGMudmVyc2lvbj49MSYmKGMudWxDb2RlUGFnZVJhbmdlMT1kLnBhcnNlVUxvbmcoKSxjLnVsQ29kZVBhZ2VSYW5nZTI9ZC5wYXJzZVVMb25nKCkpLGMudmVyc2lvbj49MiYmKGMuc3hIZWlnaHQ9ZC5wYXJzZVNob3J0KCksYy5zQ2FwSGVpZ2h0PWQucGFyc2VTaG9ydCgpLGMudXNEZWZhdWx0Q2hhcj1kLnBhcnNlVVNob3J0KCksYy51c0JyZWFrQ2hhcj1kLnBhcnNlVVNob3J0KCksYy51c01heENvbnRlbnQ9ZC5wYXJzZVVTaG9ydCgpKSxjfWZ1bmN0aW9uIGZiKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJPUy8yXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTozfSx7bmFtZTpcInhBdmdDaGFyV2lkdGhcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzV2VpZ2h0Q2xhc3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c1dpZHRoQ2xhc3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJmc1R5cGVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5U3Vic2NyaXB0WFNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo2NTB9LHtuYW1lOlwieVN1YnNjcmlwdFlTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6Njk5fSx7bmFtZTpcInlTdWJzY3JpcHRYT2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5U3Vic2NyaXB0WU9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjE0MH0se25hbWU6XCJ5U3VwZXJzY3JpcHRYU2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjY1MH0se25hbWU6XCJ5U3VwZXJzY3JpcHRZU2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjY5OX0se25hbWU6XCJ5U3VwZXJzY3JpcHRYT2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5U3VwZXJzY3JpcHRZT2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6NDc5fSx7bmFtZTpcInlTdHJpa2VvdXRTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6NDl9LHtuYW1lOlwieVN0cmlrZW91dFBvc2l0aW9uXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MjU4fSx7bmFtZTpcInNGYW1pbHlDbGFzc1wiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiYkZhbWlseVR5cGVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlNlcmlmU3R5bGVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYldlaWdodFwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiUHJvcG9ydGlvblwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiQ29udHJhc3RcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlN0cm9rZVZhcmlhdGlvblwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiQXJtU3R5bGVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYkxldHRlcmZvcm1cIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYk1pZGxpbmVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlhIZWlnaHRcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwidWxVbmljb2RlUmFuZ2UxXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJ1bFVuaWNvZGVSYW5nZTJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcInVsVW5pY29kZVJhbmdlM1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwidWxVbmljb2RlUmFuZ2U0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJhY2hWZW5kSURcIix0eXBlOlwiQ0hBUkFSUkFZXCIsdmFsdWU6XCJYWFhYXCJ9LHtuYW1lOlwiZnNTZWxlY3Rpb25cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c0ZpcnN0Q2hhckluZGV4XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNMYXN0Q2hhckluZGV4XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic1R5cG9Bc2NlbmRlclwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic1R5cG9EZXNjZW5kZXJcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNUeXBvTGluZUdhcFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNXaW5Bc2NlbnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c1dpbkRlc2NlbnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1bENvZGVQYWdlUmFuZ2UxXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJ1bENvZGVQYWdlUmFuZ2UyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJzeEhlaWdodFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic0NhcEhlaWdodFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNEZWZhdWx0Q2hhclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzQnJlYWtDaGFyXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNNYXhDb250ZXh0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSxhKX1mdW5jdGlvbiBnYihhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3N3aXRjaChjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLml0YWxpY0FuZ2xlPWQucGFyc2VGaXhlZCgpLGMudW5kZXJsaW5lUG9zaXRpb249ZC5wYXJzZVNob3J0KCksYy51bmRlcmxpbmVUaGlja25lc3M9ZC5wYXJzZVNob3J0KCksYy5pc0ZpeGVkUGl0Y2g9ZC5wYXJzZVVMb25nKCksYy5taW5NZW1UeXBlNDI9ZC5wYXJzZVVMb25nKCksYy5tYXhNZW1UeXBlNDI9ZC5wYXJzZVVMb25nKCksYy5taW5NZW1UeXBlMT1kLnBhcnNlVUxvbmcoKSxjLm1heE1lbVR5cGUxPWQucGFyc2VVTG9uZygpLGMudmVyc2lvbil7Y2FzZSAxOmMubmFtZXM9UWUuc2xpY2UoKTticmVhaztjYXNlIDI6Yy5udW1iZXJPZkdseXBocz1kLnBhcnNlVVNob3J0KCksYy5nbHlwaE5hbWVJbmRleD1uZXcgQXJyYXkoYy5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBlPTA7ZTxjLm51bWJlck9mR2x5cGhzO2UrKyljLmdseXBoTmFtZUluZGV4W2VdPWQucGFyc2VVU2hvcnQoKTtjLm5hbWVzPVtdO2Zvcih2YXIgZj0wO2Y8Yy5udW1iZXJPZkdseXBocztmKyspaWYoYy5nbHlwaE5hbWVJbmRleFtmXT49UWUubGVuZ3RoKXt2YXIgZz1kLnBhcnNlQ2hhcigpO2MubmFtZXMucHVzaChkLnBhcnNlU3RyaW5nKGcpKX1icmVhaztjYXNlIDIuNTpjLm51bWJlck9mR2x5cGhzPWQucGFyc2VVU2hvcnQoKSxjLm9mZnNldD1uZXcgQXJyYXkoYy5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBoPTA7aDxjLm51bWJlck9mR2x5cGhzO2grKyljLm9mZnNldFtoXT1kLnBhcnNlQ2hhcigpfXJldHVybiBjfWZ1bmN0aW9uIGhiKCl7cmV0dXJuIG5ldyBJZS5UYWJsZShcInBvc3RcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6MTk2NjA4fSx7bmFtZTpcIml0YWxpY0FuZ2xlXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6MH0se25hbWU6XCJ1bmRlcmxpbmVQb3NpdGlvblwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwidW5kZXJsaW5lVGhpY2tuZXNzXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJpc0ZpeGVkUGl0Y2hcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1pbk1lbVR5cGU0MlwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWF4TWVtVHlwZTQyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtaW5NZW1UeXBlMVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWF4TWVtVHlwZTFcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfV0pfWZ1bmN0aW9uIGliKGEsYil7Yj1ifHwwO3ZhciBjPW5ldyBRKGEsYiksZD1jLnBhcnNlVmVyc2lvbigxKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWR8fDEuMT09PWQsXCJVbnN1cHBvcnRlZCBHU1VCIHRhYmxlIHZlcnNpb24uXCIpLDE9PT1kP3t2ZXJzaW9uOmQsc2NyaXB0czpjLnBhcnNlU2NyaXB0TGlzdCgpLGZlYXR1cmVzOmMucGFyc2VGZWF0dXJlTGlzdCgpLGxvb2t1cHM6Yy5wYXJzZUxvb2t1cExpc3QobGYpfTp7dmVyc2lvbjpkLHNjcmlwdHM6Yy5wYXJzZVNjcmlwdExpc3QoKSxmZWF0dXJlczpjLnBhcnNlRmVhdHVyZUxpc3QoKSxsb29rdXBzOmMucGFyc2VMb29rdXBMaXN0KGxmKSx2YXJpYXRpb25zOmMucGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3QoKX19ZnVuY3Rpb24gamIoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcIkdTVUJcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwic2NyaXB0c1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5TY3JpcHRMaXN0KGEuc2NyaXB0cyl9LHtuYW1lOlwiZmVhdHVyZXNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuRmVhdHVyZUxpc3QoYS5mZWF0dXJlcyl9LHtuYW1lOlwibG9va3Vwc1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Mb29rdXBMaXN0KGEubG9va3VwcyxuZil9XSl9ZnVuY3Rpb24ga2IoYSxiKXt2YXIgYz1uZXcgTGUuUGFyc2VyKGEsYiksZD1jLnBhcnNlVUxvbmcoKTt4ZS5hcmd1bWVudCgxPT09ZCxcIlVuc3VwcG9ydGVkIE1FVEEgdGFibGUgdmVyc2lvbi5cIiksYy5wYXJzZVVMb25nKCksYy5wYXJzZVVMb25nKCk7Zm9yKHZhciBlPWMucGFyc2VVTG9uZygpLGY9e30sZz0wO2c8ZTtnKyspe3ZhciBoPWMucGFyc2VUYWcoKSxpPWMucGFyc2VVTG9uZygpLGo9Yy5wYXJzZVVMb25nKCksaz1BZS5VVEY4KGEsYitpLGopO2ZbaF09a31yZXR1cm4gZn1mdW5jdGlvbiBsYihhKXt2YXIgYj1PYmplY3Qua2V5cyhhKS5sZW5ndGgsYz1cIlwiLGQ9MTYrMTIqYixlPW5ldyBJZS5UYWJsZShcIm1ldGFcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MX0se25hbWU6XCJmbGFnc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwib2Zmc2V0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6ZH0se25hbWU6XCJudW1UYWdzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6Yn1dKTtmb3IodmFyIGYgaW4gYSl7dmFyIGc9Yy5sZW5ndGg7Yys9YVtmXSxlLmZpZWxkcy5wdXNoKHtuYW1lOlwidGFnIFwiK2YsdHlwZTpcIlRBR1wiLHZhbHVlOmZ9KSxlLmZpZWxkcy5wdXNoKHtuYW1lOlwib2Zmc2V0IFwiK2YsdHlwZTpcIlVMT05HXCIsdmFsdWU6ZCtnfSksZS5maWVsZHMucHVzaCh7bmFtZTpcImxlbmd0aCBcIitmLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmFbZl0ubGVuZ3RofSl9cmV0dXJuIGUuZmllbGRzLnB1c2goe25hbWU6XCJzdHJpbmdQb29sXCIsdHlwZTpcIkNIQVJBUlJBWVwiLHZhbHVlOmN9KSxlfWZ1bmN0aW9uIG1iKGEpe3JldHVybiBNYXRoLmxvZyhhKS9NYXRoLmxvZygyKXwwfWZ1bmN0aW9uIG5iKGEpe2Zvcig7YS5sZW5ndGglNCE9MDspYS5wdXNoKDApO2Zvcih2YXIgYj0wLGM9MDtjPGEubGVuZ3RoO2MrPTQpYis9KGFbY108PDI0KSsoYVtjKzFdPDwxNikrKGFbYysyXTw8OCkrYVtjKzNdO3JldHVybiBiJT1NYXRoLnBvdygyLDMyKX1mdW5jdGlvbiBvYihhLGIsYyxkKXtyZXR1cm4gbmV3IEllLlJlY29yZChcIlRhYmxlIFJlY29yZFwiLFt7bmFtZTpcInRhZ1wiLHR5cGU6XCJUQUdcIix2YWx1ZTp2b2lkIDAhPT1hP2E6XCJcIn0se25hbWU6XCJjaGVja1N1bVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnZvaWQgMCE9PWI/YjowfSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnZvaWQgMCE9PWM/YzowfSx7bmFtZTpcImxlbmd0aFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnZvaWQgMCE9PWQ/ZDowfV0pfWZ1bmN0aW9uIHBiKGEpe3ZhciBiPW5ldyBJZS5UYWJsZShcInNmbnRcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlRBR1wiLHZhbHVlOlwiT1RUT1wifSx7bmFtZTpcIm51bVRhYmxlc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNlYXJjaFJhbmdlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZW50cnlTZWxlY3RvclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJhbmdlU2hpZnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dKTtiLnRhYmxlcz1hLGIubnVtVGFibGVzPWEubGVuZ3RoO3ZhciBjPU1hdGgucG93KDIsbWIoYi5udW1UYWJsZXMpKTtiLnNlYXJjaFJhbmdlPTE2KmMsYi5lbnRyeVNlbGVjdG9yPW1iKGMpLGIucmFuZ2VTaGlmdD0xNipiLm51bVRhYmxlcy1iLnNlYXJjaFJhbmdlO2Zvcih2YXIgZD1bXSxlPVtdLGY9Yi5zaXplT2YoKStvYigpLnNpemVPZigpKmIubnVtVGFibGVzO2YlNCE9MDspZis9MSxlLnB1c2goe25hbWU6XCJwYWRkaW5nXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSk7Zm9yKHZhciBnPTA7ZzxhLmxlbmd0aDtnKz0xKXt2YXIgaD1hW2ddO3hlLmFyZ3VtZW50KDQ9PT1oLnRhYmxlTmFtZS5sZW5ndGgsXCJUYWJsZSBuYW1lXCIraC50YWJsZU5hbWUrXCIgaXMgaW52YWxpZC5cIik7dmFyIGk9aC5zaXplT2YoKSxqPW9iKGgudGFibGVOYW1lLG5iKGguZW5jb2RlKCkpLGYsaSk7Zm9yKGQucHVzaCh7bmFtZTpqLnRhZytcIiBUYWJsZSBSZWNvcmRcIix0eXBlOlwiUkVDT1JEXCIsdmFsdWU6an0pLGUucHVzaCh7bmFtZTpoLnRhYmxlTmFtZStcIiB0YWJsZVwiLHR5cGU6XCJSRUNPUkRcIix2YWx1ZTpofSksZis9aSx4ZS5hcmd1bWVudCghaXNOYU4oZiksXCJTb21ldGhpbmcgd2VudCB3cm9uZyBjYWxjdWxhdGluZyB0aGUgb2Zmc2V0LlwiKTtmJTQhPTA7KWYrPTEsZS5wdXNoKHtuYW1lOlwicGFkZGluZ1wiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0pfXJldHVybiBkLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS52YWx1ZS50YWc+Yi52YWx1ZS50YWc/MTotMX0pLGIuZmllbGRzPWIuZmllbGRzLmNvbmNhdChkKSxiLmZpZWxkcz1iLmZpZWxkcy5jb25jYXQoZSksYn1mdW5jdGlvbiBxYihhLGIsYyl7Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKz0xKXt2YXIgZT1hLmNoYXJUb0dseXBoSW5kZXgoYltkXSk7aWYoZT4wKXtyZXR1cm4gYS5nbHlwaHMuZ2V0KGUpLmdldE1ldHJpY3MoKX19cmV0dXJuIGN9ZnVuY3Rpb24gcmIoYSl7Zm9yKHZhciBiPTAsYz0wO2M8YS5sZW5ndGg7Yys9MSliKz1hW2NdO3JldHVybiBiL2EubGVuZ3RofWZ1bmN0aW9uIHNiKGEpe2Zvcih2YXIgYixjPVtdLGQ9W10sZT1bXSxmPVtdLGc9W10saD1bXSxpPVtdLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wO288YS5nbHlwaHMubGVuZ3RoO28rPTEpe3ZhciBwPWEuZ2x5cGhzLmdldChvKSxxPTB8cC51bmljb2RlO2lmKGlzTmFOKHAuYWR2YW5jZVdpZHRoKSl0aHJvdyBuZXcgRXJyb3IoXCJHbHlwaCBcIitwLm5hbWUrXCIgKFwiK28rXCIpOiBhZHZhbmNlV2lkdGggaXMgbm90IGEgbnVtYmVyLlwiKTsoYj5xfHx2b2lkIDA9PT1iKSYmcT4wJiYoYj1xKSxqPHEmJihqPXEpO3ZhciByPWpmLmdldFVuaWNvZGVSYW5nZShxKTtpZihyPDMyKWt8PTE8PHI7ZWxzZSBpZihyPDY0KWx8PTE8PHItMzI7ZWxzZSBpZihyPDk2KW18PTE8PHItNjQ7ZWxzZXtpZighKHI8MTIzKSl0aHJvdyBuZXcgRXJyb3IoXCJVbmljb2RlIHJhbmdlcyBiaXRzID4gMTIzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2VcIik7bnw9MTw8ci05Nn1pZihcIi5ub3RkZWZcIiE9PXAubmFtZSl7dmFyIHM9cC5nZXRNZXRyaWNzKCk7Yy5wdXNoKHMueE1pbiksZC5wdXNoKHMueU1pbiksZS5wdXNoKHMueE1heCksZi5wdXNoKHMueU1heCksaC5wdXNoKHMubGVmdFNpZGVCZWFyaW5nKSxpLnB1c2gocy5yaWdodFNpZGVCZWFyaW5nKSxnLnB1c2gocC5hZHZhbmNlV2lkdGgpfX12YXIgdD17eE1pbjpNYXRoLm1pbi5hcHBseShudWxsLGMpLHlNaW46TWF0aC5taW4uYXBwbHkobnVsbCxkKSx4TWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsZSkseU1heDpNYXRoLm1heC5hcHBseShudWxsLGYpLGFkdmFuY2VXaWR0aE1heDpNYXRoLm1heC5hcHBseShudWxsLGcpLGFkdmFuY2VXaWR0aEF2ZzpyYihnKSxtaW5MZWZ0U2lkZUJlYXJpbmc6TWF0aC5taW4uYXBwbHkobnVsbCxoKSxtYXhMZWZ0U2lkZUJlYXJpbmc6TWF0aC5tYXguYXBwbHkobnVsbCxoKSxtaW5SaWdodFNpZGVCZWFyaW5nOk1hdGgubWluLmFwcGx5KG51bGwsaSl9O3QuYXNjZW5kZXI9YS5hc2NlbmRlcix0LmRlc2NlbmRlcj1hLmRlc2NlbmRlcjt2YXIgdT1XZS5tYWtlKHtmbGFnczozLHVuaXRzUGVyRW06YS51bml0c1BlckVtLHhNaW46dC54TWluLHlNaW46dC55TWluLHhNYXg6dC54TWF4LHlNYXg6dC55TWF4LGxvd2VzdFJlY1BQRU06MyxjcmVhdGVkVGltZXN0YW1wOmEuY3JlYXRlZFRpbWVzdGFtcH0pLHY9WGUubWFrZSh7YXNjZW5kZXI6dC5hc2NlbmRlcixkZXNjZW5kZXI6dC5kZXNjZW5kZXIsYWR2YW5jZVdpZHRoTWF4OnQuYWR2YW5jZVdpZHRoTWF4LG1pbkxlZnRTaWRlQmVhcmluZzp0Lm1pbkxlZnRTaWRlQmVhcmluZyxtaW5SaWdodFNpZGVCZWFyaW5nOnQubWluUmlnaHRTaWRlQmVhcmluZyx4TWF4RXh0ZW50OnQubWF4TGVmdFNpZGVCZWFyaW5nKyh0LnhNYXgtdC54TWluKSxudW1iZXJPZkhNZXRyaWNzOmEuZ2x5cGhzLmxlbmd0aH0pLHc9JGUubWFrZShhLmdseXBocy5sZW5ndGgpLHg9amYubWFrZSh7eEF2Z0NoYXJXaWR0aDpNYXRoLnJvdW5kKHQuYWR2YW5jZVdpZHRoQXZnKSx1c1dlaWdodENsYXNzOmEudGFibGVzLm9zMi51c1dlaWdodENsYXNzLHVzV2lkdGhDbGFzczphLnRhYmxlcy5vczIudXNXaWR0aENsYXNzLHVzRmlyc3RDaGFySW5kZXg6Yix1c0xhc3RDaGFySW5kZXg6aix1bFVuaWNvZGVSYW5nZTE6ayx1bFVuaWNvZGVSYW5nZTI6bCx1bFVuaWNvZGVSYW5nZTM6bSx1bFVuaWNvZGVSYW5nZTQ6bixmc1NlbGVjdGlvbjphLnRhYmxlcy5vczIuZnNTZWxlY3Rpb24sc1R5cG9Bc2NlbmRlcjp0LmFzY2VuZGVyLHNUeXBvRGVzY2VuZGVyOnQuZGVzY2VuZGVyLHNUeXBvTGluZUdhcDowLHVzV2luQXNjZW50OnQueU1heCx1c1dpbkRlc2NlbnQ6TWF0aC5hYnModC55TWluKSx1bENvZGVQYWdlUmFuZ2UxOjEsc3hIZWlnaHQ6cWIoYSxcInh5dndcIix7eU1heDpNYXRoLnJvdW5kKHQuYXNjZW5kZXIvMil9KS55TWF4LHNDYXBIZWlnaHQ6cWIoYSxcIkhJS0xFRkpNTlRaQkRQUkFHT1FTVVZXWFlcIix0KS55TWF4LHVzRGVmYXVsdENoYXI6YS5oYXNDaGFyKFwiIFwiKT8zMjowLHVzQnJlYWtDaGFyOmEuaGFzQ2hhcihcIiBcIik/MzI6MH0pLHk9WWUubWFrZShhLmdseXBocyksej1NZS5tYWtlKGEuZ2x5cGhzKSxBPWEuZ2V0RW5nbGlzaE5hbWUoXCJmb250RmFtaWx5XCIpLEI9YS5nZXRFbmdsaXNoTmFtZShcImZvbnRTdWJmYW1pbHlcIiksQz1BK1wiIFwiK0IsRD1hLmdldEVuZ2xpc2hOYW1lKFwicG9zdFNjcmlwdE5hbWVcIik7RHx8KEQ9QS5yZXBsYWNlKC9cXHMvZyxcIlwiKStcIi1cIitCKTt2YXIgRT17fTtmb3IodmFyIEYgaW4gYS5uYW1lcylFW0ZdPWEubmFtZXNbRl07RS51bmlxdWVJRHx8KEUudW5pcXVlSUQ9e2VuOmEuZ2V0RW5nbGlzaE5hbWUoXCJtYW51ZmFjdHVyZXJcIikrXCI6XCIrQ30pLEUucG9zdFNjcmlwdE5hbWV8fChFLnBvc3RTY3JpcHROYW1lPXtlbjpEfSksRS5wcmVmZXJyZWRGYW1pbHl8fChFLnByZWZlcnJlZEZhbWlseT1hLm5hbWVzLmZvbnRGYW1pbHkpLEUucHJlZmVycmVkU3ViZmFtaWx5fHwoRS5wcmVmZXJyZWRTdWJmYW1pbHk9YS5uYW1lcy5mb250U3ViZmFtaWx5KTt2YXIgRz1bXSxIPWdmLm1ha2UoRSxHKSxJPUcubGVuZ3RoPjA/WmUubWFrZShHKTp2b2lkIDAsSj1rZi5tYWtlKCksSz1WZS5tYWtlKGEuZ2x5cGhzLHt2ZXJzaW9uOmEuZ2V0RW5nbGlzaE5hbWUoXCJ2ZXJzaW9uXCIpLGZ1bGxOYW1lOkMsZmFtaWx5TmFtZTpBLHdlaWdodE5hbWU6Qixwb3N0U2NyaXB0TmFtZTpELHVuaXRzUGVyRW06YS51bml0c1BlckVtLGZvbnRCQm94OlswLHQueU1pbix0LmFzY2VuZGVyLHQuYWR2YW5jZVdpZHRoTWF4XX0pLEw9YS5tZXRhcyYmT2JqZWN0LmtleXMoYS5tZXRhcykubGVuZ3RoPjA/cGYubWFrZShhLm1ldGFzKTp2b2lkIDAsTT1bdSx2LHcseCxILHosSixLLHldO0kmJk0ucHVzaChJKSxhLnRhYmxlcy5nc3ViJiZNLnB1c2gob2YubWFrZShhLnRhYmxlcy5nc3ViKSksTCYmTS5wdXNoKEwpO2Zvcih2YXIgTj1wYihNKSxPPU4uZW5jb2RlKCksUD1uYihPKSxRPU4uZmllbGRzLFI9ITEsUz0wO1M8US5sZW5ndGg7Uys9MSlpZihcImhlYWQgdGFibGVcIj09PVFbU10ubmFtZSl7UVtTXS52YWx1ZS5jaGVja1N1bUFkanVzdG1lbnQ9Mjk4MTE0NjU1NC1QLFI9ITA7YnJlYWt9aWYoIVIpdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgaGVhZCB0YWJsZSB3aXRoIGNoZWNrU3VtIHRvIGFkanVzdC5cIik7cmV0dXJuIE59ZnVuY3Rpb24gdGIoYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoLTE7Yzw9ZDspe3ZhciBlPWMrZD4+PjEsZj1hW2VdLnRhZztpZihmPT09YilyZXR1cm4gZTtmPGI/Yz1lKzE6ZD1lLTF9cmV0dXJuLWMtMX1mdW5jdGlvbiB1YihhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGgtMTtjPD1kOyl7dmFyIGU9YytkPj4+MSxmPWFbZV07aWYoZj09PWIpcmV0dXJuIGU7ZjxiP2M9ZSsxOmQ9ZS0xfXJldHVybi1jLTF9ZnVuY3Rpb24gdmIoYSxiKXtmb3IodmFyIGMsZD0wLGU9YS5sZW5ndGgtMTtkPD1lOyl7dmFyIGY9ZCtlPj4+MTtjPWFbZl07dmFyIGc9Yy5zdGFydDtpZihnPT09YilyZXR1cm4gYztnPGI/ZD1mKzE6ZT1mLTF9aWYoZD4wKXJldHVybiBjPWFbZC0xXSxiPmMuZW5kPzA6Y31mdW5jdGlvbiB3YihhLGIpe3RoaXMuZm9udD1hLHRoaXMudGFibGVOYW1lPWJ9ZnVuY3Rpb24geGIoYSl7d2IuY2FsbCh0aGlzLGEsXCJncG9zXCIpfWZ1bmN0aW9uIHliKGEpe3diLmNhbGwodGhpcyxhLFwiZ3N1YlwiKX1mdW5jdGlvbiB6YihhLGIpe3ZhciBjPWEubGVuZ3RoO2lmKGMhPT1iLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGQ9MDtkPGM7ZCsrKWlmKGFbZF0hPT1iW2RdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEFiKGEsYixjKXtmb3IodmFyIGQ9YS5zdWJ0YWJsZXMsZT0wO2U8ZC5sZW5ndGg7ZSsrKXt2YXIgZj1kW2VdO2lmKGYuc3Vic3RGb3JtYXQ9PT1iKXJldHVybiBmfWlmKGMpcmV0dXJuIGQucHVzaChjKSxjfWZ1bmN0aW9uIEJiKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvd31mdW5jdGlvbiBDYihhKXtmb3IodmFyIGI9bmV3IEFycmF5QnVmZmVyKGEubGVuZ3RoKSxjPW5ldyBVaW50OEFycmF5KGIpLGQ9MDtkPGEubGVuZ3RoOysrZCljW2RdPWFbZF07cmV0dXJuIGJ9ZnVuY3Rpb24gRGIoYSl7Zm9yKHZhciBiPW5ldyBlKGEuYnl0ZUxlbmd0aCksYz1uZXcgVWludDhBcnJheShhKSxkPTA7ZDxiLmxlbmd0aDsrK2QpYltkXT1jW2RdO3JldHVybiBifWZ1bmN0aW9uIEViKGEsYil7aWYoIWEpdGhyb3cgYn1mdW5jdGlvbiBGYihhLGIsYyxkLGUpe3ZhciBmO3JldHVybihiJmQpPjA/KGY9YS5wYXJzZUJ5dGUoKSwwPT0oYiZlKSYmKGY9LWYpLGY9YytmKTpmPShiJmUpPjA/YzpjK2EucGFyc2VTaG9ydCgpLGZ9ZnVuY3Rpb24gR2IoYSxiLGMpe3ZhciBkPW5ldyBMZS5QYXJzZXIoYixjKTthLm51bWJlck9mQ29udG91cnM9ZC5wYXJzZVNob3J0KCksYS5feE1pbj1kLnBhcnNlU2hvcnQoKSxhLl95TWluPWQucGFyc2VTaG9ydCgpLGEuX3hNYXg9ZC5wYXJzZVNob3J0KCksYS5feU1heD1kLnBhcnNlU2hvcnQoKTt2YXIgZSxmO2lmKGEubnVtYmVyT2ZDb250b3Vycz4wKXtmb3IodmFyIGc9YS5lbmRQb2ludEluZGljZXM9W10saD0wO2g8YS5udW1iZXJPZkNvbnRvdXJzO2grPTEpZy5wdXNoKGQucGFyc2VVU2hvcnQoKSk7YS5pbnN0cnVjdGlvbkxlbmd0aD1kLnBhcnNlVVNob3J0KCksYS5pbnN0cnVjdGlvbnM9W107Zm9yKHZhciBpPTA7aTxhLmluc3RydWN0aW9uTGVuZ3RoO2krPTEpYS5pbnN0cnVjdGlvbnMucHVzaChkLnBhcnNlQnl0ZSgpKTt2YXIgaj1nW2cubGVuZ3RoLTFdKzE7ZT1bXTtmb3IodmFyIGs9MDtrPGo7ays9MSlpZihmPWQucGFyc2VCeXRlKCksZS5wdXNoKGYpLCg4JmYpPjApZm9yKHZhciBsPWQucGFyc2VCeXRlKCksbT0wO208bDttKz0xKWUucHVzaChmKSxrKz0xO2lmKHhlLmFyZ3VtZW50KGUubGVuZ3RoPT09aixcIkJhZCBmbGFncy5cIiksZy5sZW5ndGg+MCl7dmFyIG4sbz1bXTtpZihqPjApe2Zvcih2YXIgcD0wO3A8ajtwKz0xKWY9ZVtwXSxuPXt9LG4ub25DdXJ2ZT0hISgxJmYpLG4ubGFzdFBvaW50T2ZDb250b3VyPWcuaW5kZXhPZihwKT49MCxvLnB1c2gobik7Zm9yKHZhciBxPTAscj0wO3I8ajtyKz0xKWY9ZVtyXSxuPW9bcl0sbi54PUZiKGQsZixxLDIsMTYpLHE9bi54O2Zvcih2YXIgcz0wLHQ9MDt0PGo7dCs9MSlmPWVbdF0sbj1vW3RdLG4ueT1GYihkLGYscyw0LDMyKSxzPW4ueX1hLnBvaW50cz1vfWVsc2UgYS5wb2ludHM9W119ZWxzZSBpZigwPT09YS5udW1iZXJPZkNvbnRvdXJzKWEucG9pbnRzPVtdO2Vsc2V7YS5pc0NvbXBvc2l0ZT0hMCxhLnBvaW50cz1bXSxhLmNvbXBvbmVudHM9W107Zm9yKHZhciB1PSEwO3U7KXtlPWQucGFyc2VVU2hvcnQoKTt2YXIgdj17Z2x5cGhJbmRleDpkLnBhcnNlVVNob3J0KCkseFNjYWxlOjEsc2NhbGUwMTowLHNjYWxlMTA6MCx5U2NhbGU6MSxkeDowLGR5OjB9OygxJmUpPjA/KDImZSk+MD8odi5keD1kLnBhcnNlU2hvcnQoKSx2LmR5PWQucGFyc2VTaG9ydCgpKTp2Lm1hdGNoZWRQb2ludHM9W2QucGFyc2VVU2hvcnQoKSxkLnBhcnNlVVNob3J0KCldOigyJmUpPjA/KHYuZHg9ZC5wYXJzZUNoYXIoKSx2LmR5PWQucGFyc2VDaGFyKCkpOnYubWF0Y2hlZFBvaW50cz1bZC5wYXJzZUJ5dGUoKSxkLnBhcnNlQnl0ZSgpXSwoOCZlKT4wP3YueFNjYWxlPXYueVNjYWxlPWQucGFyc2VGMkRvdDE0KCk6KDY0JmUpPjA/KHYueFNjYWxlPWQucGFyc2VGMkRvdDE0KCksdi55U2NhbGU9ZC5wYXJzZUYyRG90MTQoKSk6KDEyOCZlKT4wJiYodi54U2NhbGU9ZC5wYXJzZUYyRG90MTQoKSx2LnNjYWxlMDE9ZC5wYXJzZUYyRG90MTQoKSx2LnNjYWxlMTA9ZC5wYXJzZUYyRG90MTQoKSx2LnlTY2FsZT1kLnBhcnNlRjJEb3QxNCgpKSxhLmNvbXBvbmVudHMucHVzaCh2KSx1PSEhKDMyJmUpfWlmKDI1NiZlKXthLmluc3RydWN0aW9uTGVuZ3RoPWQucGFyc2VVU2hvcnQoKSxhLmluc3RydWN0aW9ucz1bXTtmb3IodmFyIHc9MDt3PGEuaW5zdHJ1Y3Rpb25MZW5ndGg7dys9MSlhLmluc3RydWN0aW9ucy5wdXNoKGQucGFyc2VCeXRlKCkpfX19ZnVuY3Rpb24gSGIoYSxiKXtmb3IodmFyIGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXSxmPXt4OmIueFNjYWxlKmUueCtiLnNjYWxlMDEqZS55K2IuZHgseTpiLnNjYWxlMTAqZS54K2IueVNjYWxlKmUueStiLmR5LG9uQ3VydmU6ZS5vbkN1cnZlLGxhc3RQb2ludE9mQ29udG91cjplLmxhc3RQb2ludE9mQ29udG91cn07Yy5wdXNoKGYpfXJldHVybiBjfWZ1bmN0aW9uIEliKGEpe2Zvcih2YXIgYj1bXSxjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF07Yy5wdXNoKGUpLGUubGFzdFBvaW50T2ZDb250b3VyJiYoYi5wdXNoKGMpLGM9W10pfXJldHVybiB4ZS5hcmd1bWVudCgwPT09Yy5sZW5ndGgsXCJUaGVyZSBhcmUgc3RpbGwgcG9pbnRzIGxlZnQgaW4gdGhlIGN1cnJlbnQgY29udG91ci5cIiksYn1mdW5jdGlvbiBKYihhKXt2YXIgYj1uZXcgcjtpZighYSlyZXR1cm4gYjtmb3IodmFyIGM9SWIoYSksZD0wO2Q8Yy5sZW5ndGg7KytkKXt2YXIgZT1jW2RdLGY9bnVsbCxnPWVbZS5sZW5ndGgtMV0saD1lWzBdO2lmKGcub25DdXJ2ZSliLm1vdmVUbyhnLngsZy55KTtlbHNlIGlmKGgub25DdXJ2ZSliLm1vdmVUbyhoLngsaC55KTtlbHNle3ZhciBpPXt4Oi41KihnLngraC54KSx5Oi41KihnLnkraC55KX07Yi5tb3ZlVG8oaS54LGkueSl9Zm9yKHZhciBqPTA7ajxlLmxlbmd0aDsrK2opaWYoZj1nLGc9aCxoPWVbKGorMSklZS5sZW5ndGhdLGcub25DdXJ2ZSliLmxpbmVUbyhnLngsZy55KTtlbHNle3ZhciBrPWg7Zi5vbkN1cnZlfHx7eDouNSooZy54K2YueCkseTouNSooZy55K2YueSl9LGgub25DdXJ2ZXx8KGs9e3g6LjUqKGcueCtoLngpLHk6LjUqKGcueStoLnkpfSksYi5xdWFkcmF0aWNDdXJ2ZVRvKGcueCxnLnksay54LGsueSl9Yi5jbG9zZVBhdGgoKX1yZXR1cm4gYn1mdW5jdGlvbiBLYihhLGIpe2lmKGIuaXNDb21wb3NpdGUpZm9yKHZhciBjPTA7YzxiLmNvbXBvbmVudHMubGVuZ3RoO2MrPTEpe3ZhciBkPWIuY29tcG9uZW50c1tjXSxlPWEuZ2V0KGQuZ2x5cGhJbmRleCk7aWYoZS5nZXRQYXRoKCksZS5wb2ludHMpe3ZhciBmPXZvaWQgMDtpZih2b2lkIDA9PT1kLm1hdGNoZWRQb2ludHMpZj1IYihlLnBvaW50cyxkKTtlbHNle1xuaWYoZC5tYXRjaGVkUG9pbnRzWzBdPmIucG9pbnRzLmxlbmd0aC0xfHxkLm1hdGNoZWRQb2ludHNbMV0+ZS5wb2ludHMubGVuZ3RoLTEpdGhyb3cgRXJyb3IoXCJNYXRjaGVkIHBvaW50cyBvdXQgb2YgcmFuZ2UgaW4gXCIrYi5uYW1lKTt2YXIgZz1iLnBvaW50c1tkLm1hdGNoZWRQb2ludHNbMF1dLGg9ZS5wb2ludHNbZC5tYXRjaGVkUG9pbnRzWzFdXSxpPXt4U2NhbGU6ZC54U2NhbGUsc2NhbGUwMTpkLnNjYWxlMDEsc2NhbGUxMDpkLnNjYWxlMTAseVNjYWxlOmQueVNjYWxlLGR4OjAsZHk6MH07aD1IYihbaF0saSlbMF0saS5keD1nLngtaC54LGkuZHk9Zy55LWgueSxmPUhiKGUucG9pbnRzLGkpfWIucG9pbnRzPWIucG9pbnRzLmNvbmNhdChmKX19cmV0dXJuIEpiKGIucG9pbnRzKX1mdW5jdGlvbiBMYihhLGIsYyxkKXtmb3IodmFyIGU9bmV3IFNlLkdseXBoU2V0KGQpLGY9MDtmPGMubGVuZ3RoLTE7Zis9MSl7dmFyIGc9Y1tmXTtnIT09Y1tmKzFdP2UucHVzaChmLFNlLnR0ZkdseXBoTG9hZGVyKGQsZixHYixhLGIrZyxLYikpOmUucHVzaChmLFNlLmdseXBoTG9hZGVyKGQsZikpfXJldHVybiBlfWZ1bmN0aW9uIE1iKGEpe3RoaXMuZm9udD1hLHRoaXMuZ2V0Q29tbWFuZHM9ZnVuY3Rpb24oYSl7cmV0dXJuIHZmLmdldFBhdGgoYSkuY29tbWFuZHN9LHRoaXMuX2ZwZ21TdGF0ZT10aGlzLl9wcmVwU3RhdGU9dm9pZCAwLHRoaXMuX2Vycm9yU3RhdGU9MH1mdW5jdGlvbiBOYihhKXtyZXR1cm4gYX1mdW5jdGlvbiBPYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKk1hdGgucm91bmQoTWF0aC5hYnMoYSkpfWZ1bmN0aW9uIFBiKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqTWF0aC5yb3VuZChNYXRoLmFicygyKmEpKS8yfWZ1bmN0aW9uIFFiKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqKE1hdGgucm91bmQoTWF0aC5hYnMoYSkrLjUpLS41KX1mdW5jdGlvbiBSYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKk1hdGguY2VpbChNYXRoLmFicyhhKSl9ZnVuY3Rpb24gU2IoYSl7cmV0dXJuIE1hdGguc2lnbihhKSpNYXRoLmZsb29yKE1hdGguYWJzKGEpKX1mdW5jdGlvbiBUYihhLGIpe3RoaXMueD1hLHRoaXMueT1iLHRoaXMuYXhpcz12b2lkIDAsdGhpcy5zbG9wZT1iL2EsdGhpcy5ub3JtYWxTbG9wZT0tYS9iLE9iamVjdC5mcmVlemUodGhpcyl9ZnVuY3Rpb24gVWIoYSxiKXt2YXIgYz1NYXRoLnNxcnQoYSphK2IqYik7cmV0dXJuIGEvPWMsYi89YywxPT09YSYmMD09PWI/eGY6MD09PWEmJjE9PT1iP3lmOm5ldyBUYihhLGIpfWZ1bmN0aW9uIFZiKGEsYixjLGQpe3RoaXMueD10aGlzLnhvPU1hdGgucm91bmQoNjQqYSkvNjQsdGhpcy55PXRoaXMueW89TWF0aC5yb3VuZCg2NCpiKS82NCx0aGlzLmxhc3RQb2ludE9mQ29udG91cj1jLHRoaXMub25DdXJ2ZT1kLHRoaXMucHJldlBvaW50T25Db250b3VyPXZvaWQgMCx0aGlzLm5leHRQb2ludE9uQ29udG91cj12b2lkIDAsdGhpcy54VG91Y2hlZD0hMSx0aGlzLnlUb3VjaGVkPSExLE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzKX1mdW5jdGlvbiBXYihhLGIpe3N3aXRjaCh0aGlzLmVudj1hLHRoaXMuc3RhY2s9W10sdGhpcy5wcm9nPWIsYSl7Y2FzZVwiZ2x5ZlwiOnRoaXMuenAwPXRoaXMuenAxPXRoaXMuenAyPTEsdGhpcy5ycDA9dGhpcy5ycDE9dGhpcy5ycDI9MDtjYXNlXCJwcmVwXCI6dGhpcy5mdj10aGlzLnB2PXRoaXMuZHB2PXhmLHRoaXMucm91bmQ9T2J9fWZ1bmN0aW9uIFhiKGEpe2Zvcih2YXIgYj1hLnRab25lPW5ldyBBcnJheShhLmdab25lLmxlbmd0aCksYz0wO2M8Yi5sZW5ndGg7YysrKWJbY109bmV3IFZiKDAsMCl9ZnVuY3Rpb24gWWIoYSxiKXt2YXIgYyxkPWEucHJvZyxlPWEuaXAsZj0xO2Rve2lmKDg4PT09KGM9ZFsrK2VdKSlmKys7ZWxzZSBpZig4OT09PWMpZi0tO2Vsc2UgaWYoNjQ9PT1jKWUrPWRbZSsxXSsxO2Vsc2UgaWYoNjU9PT1jKWUrPTIqZFtlKzFdKzE7ZWxzZSBpZihjPj0xNzYmJmM8PTE4MyllKz1jLTE3NisxO2Vsc2UgaWYoYz49MTg0JiZjPD0xOTEpZSs9MiooYy0xODQrMSk7ZWxzZSBpZihiJiYxPT09ZiYmMjc9PT1jKWJyZWFrfXdoaWxlKGY+MCk7YS5pcD1lfWZ1bmN0aW9uIFpiKGIsYyl7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU1ZUQ0FbXCIrYi5heGlzK1wiXVwiKSxjLmZ2PWMucHY9Yy5kcHY9Yn1mdW5jdGlvbiAkYihiLGMpe2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNQVlRDQVtcIitiLmF4aXMrXCJdXCIpLGMucHY9Yy5kcHY9Yn1mdW5jdGlvbiBfYihiLGMpe2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNGVlRDQVtcIitiLmF4aXMrXCJdXCIpLGMuZnY9Yn1mdW5jdGlvbiBhYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejJbZV0saD1jLnoxW2ZdO2EuREVCVUcmJmNvbnNvbGUubG9nKFwiU1BWVExbXCIrYitcIl1cIixlLGYpO3ZhciBpLGo7Yj8oaT1nLnktaC55LGo9aC54LWcueCk6KGk9aC54LWcueCxqPWgueS1nLnkpLGMucHY9Yy5kcHY9VWIoaSxqKX1mdW5jdGlvbiBiYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejJbZV0saD1jLnoxW2ZdO2EuREVCVUcmJmNvbnNvbGUubG9nKFwiU0ZWVExbXCIrYitcIl1cIixlLGYpO3ZhciBpLGo7Yj8oaT1nLnktaC55LGo9aC54LWcueCk6KGk9aC54LWcueCxqPWgueS1nLnkpLGMuZnY9VWIoaSxqKX1mdW5jdGlvbiBjYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1BWRlNbXVwiLGQsZSksYi5wdj1iLmRwdj1VYihlLGQpfWZ1bmN0aW9uIGRjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUFZGU1tdXCIsZCxlKSxiLmZ2PVViKGUsZCl9ZnVuY3Rpb24gZWMoYil7dmFyIGM9Yi5zdGFjayxkPWIucHY7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR1BWW11cIiksYy5wdXNoKDE2Mzg0KmQueCksYy5wdXNoKDE2Mzg0KmQueSl9ZnVuY3Rpb24gZmMoYil7dmFyIGM9Yi5zdGFjayxkPWIuZnY7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR0ZWW11cIiksYy5wdXNoKDE2Mzg0KmQueCksYy5wdXNoKDE2Mzg0KmQueSl9ZnVuY3Rpb24gZ2MoYil7Yi5mdj1iLnB2LGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNGVlRQVltdXCIpfWZ1bmN0aW9uIGhjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKSxmPWMucG9wKCksZz1jLnBvcCgpLGg9Yy5wb3AoKSxpPWIuejAsaj1iLnoxLGs9aVtkXSxsPWlbZV0sbT1qW2ZdLG49altnXSxvPWIuejJbaF07YS5ERUJVRyYmY29uc29sZS5sb2coXCJJU0VDVFtdLCBcIixkLGUsZixnLGgpO3ZhciBwPWsueCxxPWsueSxyPWwueCxzPWwueSx0PW0ueCx1PW0ueSx2PW4ueCx3PW4ueSx4PShwLXIpKih1LXcpLShxLXMpKih0LXYpLHk9cCpzLXEqcix6PXQqdy11KnY7by54PSh5Kih0LXYpLXoqKHAtcikpL3gsby55PSh5Kih1LXcpLXoqKHEtcykpL3h9ZnVuY3Rpb24gaWMoYil7Yi5ycDA9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUlAwW11cIixiLnJwMCl9ZnVuY3Rpb24gamMoYil7Yi5ycDE9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUlAxW11cIixiLnJwMSl9ZnVuY3Rpb24ga2MoYil7Yi5ycDI9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUlAyW11cIixiLnJwMil9ZnVuY3Rpb24gbGMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQMFtdXCIsYyksYi56cDA9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56MD1iLnRab25lO2JyZWFrO2Nhc2UgMTpiLnowPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gbWMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQMVtdXCIsYyksYi56cDE9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56MT1iLnRab25lO2JyZWFrO2Nhc2UgMTpiLnoxPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gbmMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQMltdXCIsYyksYi56cDI9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56Mj1iLnRab25lO2JyZWFrO2Nhc2UgMTpiLnoyPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gb2MoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQU1tdXCIsYyksYi56cDA9Yi56cDE9Yi56cDI9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56MD1iLnoxPWIuejI9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56MD1iLnoxPWIuejI9Yi5nWm9uZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgem9uZSBwb2ludGVyXCIpfX1mdW5jdGlvbiBwYyhiKXtiLmxvb3A9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTTE9PUFtdXCIsYi5sb29wKX1mdW5jdGlvbiBxYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSVEdbXVwiKSxiLnJvdW5kPU9ifWZ1bmN0aW9uIHJjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJUSEdbXVwiKSxiLnJvdW5kPVFifWZ1bmN0aW9uIHNjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU01EW11cIixjKSxiLm1pbkRpcz1jLzY0fWZ1bmN0aW9uIHRjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVMU0VbXVwiKSxZYihiLCExKX1mdW5jdGlvbiB1YyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkpNUFJbXVwiLGMpLGIuaXArPWMtMX1mdW5jdGlvbiB2YyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNDVlRDSVtdXCIsYyksYi5jdkN1dEluPWMvNjR9ZnVuY3Rpb24gd2MoYil7dmFyIGM9Yi5zdGFjazthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJEVVBbXVwiKSxjLnB1c2goY1tjLmxlbmd0aC0xXSl9ZnVuY3Rpb24geGMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUE9QW11cIiksYi5zdGFjay5wb3AoKX1mdW5jdGlvbiB5YyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJDTEVBUltdXCIpLGIuc3RhY2subGVuZ3RoPTB9ZnVuY3Rpb24gemMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNXQVBbXVwiKSxjLnB1c2goZCksYy5wdXNoKGUpfWZ1bmN0aW9uIEFjKGIpe3ZhciBjPWIuc3RhY2s7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiREVQVEhbXVwiKSxjLnB1c2goYy5sZW5ndGgpfWZ1bmN0aW9uIEJjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJMT09QQ0FMTFtdXCIsZCxlKTt2YXIgZj1iLmlwLGc9Yi5wcm9nO2IucHJvZz1iLmZ1bmNzW2RdO2Zvcih2YXIgaD0wO2g8ZTtoKyspc2YoYiksYS5ERUJVRyYmY29uc29sZS5sb2coKytiLnN0ZXAsaCsxPGU/XCJuZXh0IGxvb3BjYWxsXCI6XCJkb25lIGxvb3BjYWxsXCIsaCk7Yi5pcD1mLGIucHJvZz1nfWZ1bmN0aW9uIENjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQ0FMTFtdXCIsYyk7dmFyIGQ9Yi5pcCxlPWIucHJvZztiLnByb2c9Yi5mdW5jc1tjXSxzZihiKSxiLmlwPWQsYi5wcm9nPWUsYS5ERUJVRyYmY29uc29sZS5sb2coKytiLnN0ZXAsXCJyZXR1cm5pbmcgZnJvbVwiLGMpfWZ1bmN0aW9uIERjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkNJTkRFWFtdXCIsZCksYy5wdXNoKGNbYy5sZW5ndGgtZF0pfWZ1bmN0aW9uIEVjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk1JTkRFWFtdXCIsZCksYy5wdXNoKGMuc3BsaWNlKGMubGVuZ3RoLWQsMSlbMF0pfWZ1bmN0aW9uIEZjKGIpe2lmKFwiZnBnbVwiIT09Yi5lbnYpdGhyb3cgbmV3IEVycm9yKFwiRkRFRiBub3QgYWxsb3dlZCBoZXJlXCIpO3ZhciBjPWIuc3RhY2ssZD1iLnByb2csZT1iLmlwLGY9Yy5wb3AoKSxnPWU7Zm9yKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkZERUZbXVwiLGYpOzQ1IT09ZFsrK2VdOyk7Yi5pcD1lLGIuZnVuY3NbZl09ZC5zbGljZShnKzEsZSl9ZnVuY3Rpb24gR2MoYixjKXt2YXIgZD1jLnN0YWNrLnBvcCgpLGU9Yy56MFtkXSxmPWMuZnYsZz1jLnB2O2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIk1EQVBbXCIrYitcIl1cIixkKTt2YXIgaD1nLmRpc3RhbmNlKGUsemYpO2ImJihoPWMucm91bmQoaCkpLGYuc2V0UmVsYXRpdmUoZSx6ZixoLGcpLGYudG91Y2goZSksYy5ycDA9Yy5ycDE9ZH1mdW5jdGlvbiBIYyhiLGMpe3ZhciBkLGUsZixnPWMuejIsaD1nLmxlbmd0aC0yO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIklVUFtcIitiLmF4aXMrXCJdXCIpO2Zvcih2YXIgaT0wO2k8aDtpKyspZD1nW2ldLGIudG91Y2hlZChkKXx8KGU9ZC5wcmV2VG91Y2hlZChiKSkhPT1kJiYoZj1kLm5leHRUb3VjaGVkKGIpLGU9PT1mJiZiLnNldFJlbGF0aXZlKGQsZCxiLmRpc3RhbmNlKGUsZSwhMSwhMCksYiwhMCksYi5pbnRlcnBvbGF0ZShkLGUsZixiKSl9ZnVuY3Rpb24gSWMoYixjKXtmb3IodmFyIGQ9Yy5zdGFjayxlPWI/Yy5ycDE6Yy5ycDIsZj0oYj9jLnowOmMuejEpW2VdLGc9Yy5mdixoPWMucHYsaT1jLmxvb3Asaj1jLnoyO2ktLTspe3ZhciBrPWQucG9wKCksbD1qW2tdLG09aC5kaXN0YW5jZShmLGYsITEsITApO2cuc2V0UmVsYXRpdmUobCxsLG0saCksZy50b3VjaChsKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsKGMubG9vcD4xP1wibG9vcCBcIisoYy5sb29wLWkpK1wiOiBcIjpcIlwiKStcIlNIUFtcIisoYj9cInJwMVwiOlwicnAyXCIpK1wiXVwiLGspfWMubG9vcD0xfWZ1bmN0aW9uIEpjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWI/Yy5ycDE6Yy5ycDIsZj0oYj9jLnowOmMuejEpW2VdLGc9Yy5mdixoPWMucHYsaT1kLnBvcCgpLGo9Yy56MltjLmNvbnRvdXJzW2ldXSxrPWo7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU0hDW1wiK2IrXCJdXCIsaSk7dmFyIGw9aC5kaXN0YW5jZShmLGYsITEsITApO2Rve2shPT1mJiZnLnNldFJlbGF0aXZlKGssayxsLGgpLGs9ay5uZXh0UG9pbnRPbkNvbnRvdXJ9d2hpbGUoayE9PWopfWZ1bmN0aW9uIEtjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWI/Yy5ycDE6Yy5ycDIsZj0oYj9jLnowOmMuejEpW2VdLGc9Yy5mdixoPWMucHYsaT1kLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNIWltcIitiK1wiXVwiLGkpO3ZhciBqO3N3aXRjaChpKXtjYXNlIDA6aj1jLnRab25lO2JyZWFrO2Nhc2UgMTpqPWMuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmVcIil9Zm9yKHZhciBrLGw9aC5kaXN0YW5jZShmLGYsITEsITApLG09ai5sZW5ndGgtMixuPTA7bjxtO24rKylrPWpbbl0sZy5zZXRSZWxhdGl2ZShrLGssbCxoKX1mdW5jdGlvbiBMYyhiKXtmb3IodmFyIGM9Yi5zdGFjayxkPWIubG9vcCxlPWIuZnYsZj1jLnBvcCgpLzY0LGc9Yi56MjtkLS07KXt2YXIgaD1jLnBvcCgpLGk9Z1toXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsKGIubG9vcD4xP1wibG9vcCBcIisoYi5sb29wLWQpK1wiOiBcIjpcIlwiKStcIlNIUElYW11cIixoLGYpLGUuc2V0UmVsYXRpdmUoaSxpLGYpLGUudG91Y2goaSl9Yi5sb29wPTF9ZnVuY3Rpb24gTWMoYil7Zm9yKHZhciBjPWIuc3RhY2ssZD1iLnJwMSxlPWIucnAyLGY9Yi5sb29wLGc9Yi56MFtkXSxoPWIuejFbZV0saT1iLmZ2LGo9Yi5kcHYsaz1iLnoyO2YtLTspe3ZhciBsPWMucG9wKCksbT1rW2xdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCwoYi5sb29wPjE/XCJsb29wIFwiKyhiLmxvb3AtZikrXCI6IFwiOlwiXCIpK1wiSVBbXVwiLGwsZCxcIjwtPlwiLGUpLGkuaW50ZXJwb2xhdGUobSxnLGgsaiksaS50b3VjaChtKX1iLmxvb3A9MX1mdW5jdGlvbiBOYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLzY0LGY9ZC5wb3AoKSxnPWMuejFbZl0saD1jLnowW2MucnAwXSxpPWMuZnYsaj1jLnB2O2kuc2V0UmVsYXRpdmUoZyxoLGUsaiksaS50b3VjaChnKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNU0lSUFtcIitiK1wiXVwiLGUsZiksYy5ycDE9Yy5ycDAsYy5ycDI9ZixiJiYoYy5ycDA9Zil9ZnVuY3Rpb24gT2MoYil7Zm9yKHZhciBjPWIuc3RhY2ssZD1iLnJwMCxlPWIuejBbZF0sZj1iLmxvb3AsZz1iLmZ2LGg9Yi5wdixpPWIuejE7Zi0tOyl7dmFyIGo9Yy5wb3AoKSxrPWlbal07YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLChiLmxvb3A+MT9cImxvb3AgXCIrKGIubG9vcC1mKStcIjogXCI6XCJcIikrXCJBTElHTlJQW11cIixqKSxnLnNldFJlbGF0aXZlKGssZSwwLGgpLGcudG91Y2goayl9Yi5sb29wPTF9ZnVuY3Rpb24gUGMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlRER1tdXCIpLGIucm91bmQ9UGJ9ZnVuY3Rpb24gUWMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnowW2ZdLGg9Yy5mdixpPWMucHYsaj1jLmN2dFtlXTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNSUFQW1wiK2IrXCJdXCIsZSxcIihcIixqLFwiKVwiLGYpO3ZhciBrPWkuZGlzdGFuY2UoZyx6Zik7YiYmKE1hdGguYWJzKGstaik8Yy5jdkN1dEluJiYoaz1qKSxrPWMucm91bmQoaykpLGguc2V0UmVsYXRpdmUoZyx6ZixrLGkpLDA9PT1jLnpwMCYmKGcueG89Zy54LGcueW89Zy55KSxoLnRvdWNoKGcpLGMucnAwPWMucnAxPWZ9ZnVuY3Rpb24gUmMoYil7dmFyIGM9Yi5wcm9nLGQ9Yi5pcCxlPWIuc3RhY2ssZj1jWysrZF07YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTlBVU0hCW11cIixmKTtmb3IodmFyIGc9MDtnPGY7ZysrKWUucHVzaChjWysrZF0pO2IuaXA9ZH1mdW5jdGlvbiBTYyhiKXt2YXIgYz1iLmlwLGQ9Yi5wcm9nLGU9Yi5zdGFjayxmPWRbKytjXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJOUFVTSFdbXVwiLGYpO2Zvcih2YXIgZz0wO2c8ZjtnKyspe3ZhciBoPWRbKytjXTw8OHxkWysrY107MzI3NjgmaCYmKGg9LSgxKyg2NTUzNV5oKSkpLGUucHVzaChoKX1iLmlwPWN9ZnVuY3Rpb24gVGMoYil7dmFyIGM9Yi5zdGFjayxkPWIuc3RvcmU7ZHx8KGQ9Yi5zdG9yZT1bXSk7dmFyIGU9Yy5wb3AoKSxmPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiV1NcIixlLGYpLGRbZl09ZX1mdW5jdGlvbiBVYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yi5zdG9yZSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlNcIixlKTt2YXIgZj1kJiZkW2VdfHwwO2MucHVzaChmKX1mdW5jdGlvbiBWYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiV0NWVFBcIixkLGUpLGIuY3Z0W2VdPWQvNjR9ZnVuY3Rpb24gV2MoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUkNWVFwiLGQpLGMucHVzaCg2NCpiLmN2dFtkXSl9ZnVuY3Rpb24gWGMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWMuejJbZV07YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiR0NbXCIrYitcIl1cIixlKSxkLnB1c2goNjQqYy5kcHYuZGlzdGFuY2UoZix6ZixiLCExKSl9ZnVuY3Rpb24gWWMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnoxW2VdLGg9Yy56MFtmXSxpPWMuZHB2LmRpc3RhbmNlKGgsZyxiLGIpO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIk1EW1wiK2IrXCJdXCIsZSxmLFwiLT5cIixpKSxjLnN0YWNrLnB1c2goTWF0aC5yb3VuZCg2NCppKSl9ZnVuY3Rpb24gWmMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTVBQRU1bXVwiKSxiLnN0YWNrLnB1c2goYi5wcGVtKX1mdW5jdGlvbiAkYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJGTElQT05bXVwiKSxiLmF1dG9GbGlwPSEwfWZ1bmN0aW9uIF9jKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJMVFtdXCIsZCxlKSxjLnB1c2goZTxkPzE6MCl9ZnVuY3Rpb24gYWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkxURVFbXVwiLGQsZSksYy5wdXNoKGU8PWQ/MTowKX1mdW5jdGlvbiBiZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR1RbXVwiLGQsZSksYy5wdXNoKGU+ZD8xOjApfWZ1bmN0aW9uIGNkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJHVEVRW11cIixkLGUpLGMucHVzaChlPj1kPzE6MCl9ZnVuY3Rpb24gZGQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVRW11cIixkLGUpLGMucHVzaChkPT09ZT8xOjApfWZ1bmN0aW9uIGVkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJORVFbXVwiLGQsZSksYy5wdXNoKGQhPT1lPzE6MCl9ZnVuY3Rpb24gZmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiT0REW11cIixkKSxjLnB1c2goTWF0aC50cnVuYyhkKSUyPzE6MCl9ZnVuY3Rpb24gZ2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRVZFTltdXCIsZCksYy5wdXNoKE1hdGgudHJ1bmMoZCklMj8wOjEpfWZ1bmN0aW9uIGhkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiSUZbXVwiLGMpLGN8fChZYihiLCEwKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFSUZbXVwiKSl9ZnVuY3Rpb24gaWQoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRUlGW11cIil9ZnVuY3Rpb24gamQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkFORFtdXCIsZCxlKSxjLnB1c2goZCYmZT8xOjApfWZ1bmN0aW9uIGtkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJPUltdXCIsZCxlKSxjLnB1c2goZHx8ZT8xOjApfWZ1bmN0aW9uIGxkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5PVFtdXCIsZCksYy5wdXNoKGQ/MDoxKX1mdW5jdGlvbiBtZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9Yy5mdixnPWMucHYsaD1jLnBwZW0saT1jLmRlbHRhQmFzZSsxNiooYi0xKSxqPWMuZGVsdGFTaGlmdCxrPWMuejA7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFQW1wiK2IrXCJdXCIsZSxkKTtmb3IodmFyIGw9MDtsPGU7bCsrKXt2YXIgbT1kLnBvcCgpLG49ZC5wb3AoKTtpZihpKygoMjQwJm4pPj40KT09PWgpe3ZhciBvPSgxNSZuKS04O28+PTAmJm8rKyxhLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJERUxUQVBGSVhcIixtLFwiYnlcIixvKmopO3ZhciBwPWtbbV07Zi5zZXRSZWxhdGl2ZShwLHAsbypqLGcpfX19ZnVuY3Rpb24gbmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0RCW11cIixkKSxiLmRlbHRhQmFzZT1kfWZ1bmN0aW9uIG9kKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNEU1tdXCIsZCksYi5kZWx0YVNoaWZ0PU1hdGgucG93KC41LGQpfWZ1bmN0aW9uIHBkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJBRERbXVwiLGQsZSksYy5wdXNoKGUrZCl9ZnVuY3Rpb24gcWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNVQltdXCIsZCxlKSxjLnB1c2goZS1kKX1mdW5jdGlvbiByZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRElWW11cIixkLGUpLGMucHVzaCg2NCplL2QpfWZ1bmN0aW9uIHNkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNVUxbXVwiLGQsZSksYy5wdXNoKGUqZC82NCl9ZnVuY3Rpb24gdGQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQUJTW11cIixkKSxjLnB1c2goTWF0aC5hYnMoZCkpfWZ1bmN0aW9uIHVkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5FR1tdXCIsZCksYy5wdXNoKC1kKX1mdW5jdGlvbiB2ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJGTE9PUltdXCIsZCksYy5wdXNoKDY0Kk1hdGguZmxvb3IoZC82NCkpfWZ1bmN0aW9uIHdkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkNFSUxJTkdbXVwiLGQpLGMucHVzaCg2NCpNYXRoLmNlaWwoZC82NCkpfWZ1bmN0aW9uIHhkKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiUk9VTkRbXVwiKSxkLnB1c2goNjQqYy5yb3VuZChlLzY0KSl9ZnVuY3Rpb24geWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIldDVlRGW11cIixkLGUpLGIuY3Z0W2VdPWQqYi5wcGVtL2IuZm9udC51bml0c1BlckVtfWZ1bmN0aW9uIHpkKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1jLnBwZW0sZz1jLmRlbHRhQmFzZSsxNiooYi0xKSxoPWMuZGVsdGFTaGlmdDthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJERUxUQUNbXCIrYitcIl1cIixlLGQpO2Zvcih2YXIgaT0wO2k8ZTtpKyspe3ZhciBqPWQucG9wKCksaz1kLnBvcCgpO2lmKGcrKCgyNDAmayk+PjQpPT09Zil7dmFyIGw9KDE1JmspLTg7bD49MCYmbCsrO3ZhciBtPWwqaDthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJERUxUQUNGSVhcIixqLFwiYnlcIixtKSxjLmN2dFtqXSs9bX19fWZ1bmN0aW9uIEFkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JPVU5EW11cIixjKSxiLnJvdW5kPXdmO3ZhciBkO3N3aXRjaCgxOTImYyl7Y2FzZSAwOmQ9LjU7YnJlYWs7Y2FzZSA2NDpkPTE7YnJlYWs7Y2FzZSAxMjg6ZD0yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBTUk9VTkQgdmFsdWVcIil9c3dpdGNoKGIuc3JQZXJpb2Q9ZCw0OCZjKXtjYXNlIDA6Yi5zclBoYXNlPTA7YnJlYWs7Y2FzZSAxNjpiLnNyUGhhc2U9LjI1KmQ7YnJlYWs7Y2FzZSAzMjpiLnNyUGhhc2U9LjUqZDticmVhaztjYXNlIDQ4OmIuc3JQaGFzZT0uNzUqZDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgU1JPVU5EIHZhbHVlXCIpfWMmPTE1LGIuc3JUaHJlc2hvbGQ9MD09PWM/MDooYy84LS41KSpkfWZ1bmN0aW9uIEJkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUzQ1Uk9VTkRbXVwiLGMpLGIucm91bmQ9d2Y7dmFyIGQ7c3dpdGNoKDE5MiZjKXtjYXNlIDA6ZD1NYXRoLnNxcnQoMikvMjticmVhaztjYXNlIDY0OmQ9TWF0aC5zcXJ0KDIpO2JyZWFrO2Nhc2UgMTI4OmQ9MipNYXRoLnNxcnQoMik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFM0NVJPVU5EIHZhbHVlXCIpfXN3aXRjaChiLnNyUGVyaW9kPWQsNDgmYyl7Y2FzZSAwOmIuc3JQaGFzZT0wO2JyZWFrO2Nhc2UgMTY6Yi5zclBoYXNlPS4yNSpkO2JyZWFrO2Nhc2UgMzI6Yi5zclBoYXNlPS41KmQ7YnJlYWs7Y2FzZSA0ODpiLnNyUGhhc2U9Ljc1KmQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFM0NVJPVU5EIHZhbHVlXCIpfWMmPTE1LGIuc3JUaHJlc2hvbGQ9MD09PWM/MDooYy84LS41KSpkfWZ1bmN0aW9uIENkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJPRkZbXVwiKSxiLnJvdW5kPU5ifWZ1bmN0aW9uIERkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJVVEdbXVwiKSxiLnJvdW5kPVJifWZ1bmN0aW9uIEVkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJEVEdbXVwiKSxiLnJvdW5kPVNifWZ1bmN0aW9uIEZkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0NBTkNUUkxbXVwiLGMpfWZ1bmN0aW9uIEdkKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MltlXSxoPWMuejFbZl07YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU0RQVlRMW1wiK2IrXCJdXCIsZSxmKTt2YXIgaSxqO2I/KGk9Zy55LWgueSxqPWgueC1nLngpOihpPWgueC1nLngsaj1oLnktZy55KSxjLmRwdj1VYihpLGopfWZ1bmN0aW9uIEhkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9MDthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJHRVRJTkZPW11cIixkKSwxJmQmJihlPTM1KSwzMiZkJiYoZXw9NDA5NiksYy5wdXNoKGUpfWZ1bmN0aW9uIElkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKSxmPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUk9MTFtdXCIpLGMucHVzaChlKSxjLnB1c2goZCksYy5wdXNoKGYpfWZ1bmN0aW9uIEpkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNQVhbXVwiLGQsZSksYy5wdXNoKE1hdGgubWF4KGUsZCkpfWZ1bmN0aW9uIEtkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNSU5bXVwiLGQsZSksYy5wdXNoKE1hdGgubWluKGUsZCkpfWZ1bmN0aW9uIExkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0NBTlRZUEVbXVwiLGMpfWZ1bmN0aW9uIE1kKGIpe3ZhciBjPWIuc3RhY2sucG9wKCksZD1iLnN0YWNrLnBvcCgpO3N3aXRjaChhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJJTlNUQ1RSTFtdXCIsYyxkKSxjKXtjYXNlIDE6cmV0dXJuIHZvaWQoYi5pbmhpYml0R3JpZEZpdD0hIWQpO2Nhc2UgMjpyZXR1cm4gdm9pZChiLmlnbm9yZUN2dD0hIWQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBJTlNUQ1RSTFtdIHNlbGVjdG9yXCIpfX1mdW5jdGlvbiBOZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1jLnByb2csZj1jLmlwO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlBVU0hCW1wiK2IrXCJdXCIpO2Zvcih2YXIgZz0wO2c8YjtnKyspZC5wdXNoKGVbKytmXSk7Yy5pcD1mfWZ1bmN0aW9uIE9kKGIsYyl7dmFyIGQ9Yy5pcCxlPWMucHJvZyxmPWMuc3RhY2s7YS5ERUJVRyYmY29uc29sZS5sb2coYy5pcCxcIlBVU0hXW1wiK2IrXCJdXCIpO2Zvcih2YXIgZz0wO2c8YjtnKyspe3ZhciBoPWVbKytkXTw8OHxlWysrZF07MzI3NjgmaCYmKGg9LSgxKyg2NTUzNV5oKSkpLGYucHVzaChoKX1jLmlwPWR9ZnVuY3Rpb24gUGQoYixjLGQsZSxmLGcpe3ZhciBoLGksaixrLGw9Zy5zdGFjayxtPWImJmwucG9wKCksbj1sLnBvcCgpLG89Zy5ycDAscD1nLnowW29dLHE9Zy56MVtuXSxyPWcubWluRGlzLHM9Zy5mdix0PWcuZHB2O2k9aD10LmRpc3RhbmNlKHEscCwhMCwhMCksaj1pPj0wPzE6LTEsaT1NYXRoLmFicyhpKSxiJiYoaz1nLmN2dFttXSxlJiZNYXRoLmFicyhpLWspPGcuY3ZDdXRJbiYmKGk9aykpLGQmJmk8ciYmKGk9ciksZSYmKGk9Zy5yb3VuZChpKSkscy5zZXRSZWxhdGl2ZShxLHAsaippLHQpLHMudG91Y2gocSksYS5ERUJVRyYmY29uc29sZS5sb2coZy5zdGVwLChiP1wiTUlSUFtcIjpcIk1EUlBbXCIpKyhjP1wiTVwiOlwibVwiKSsoZD9cIj5cIjpcIl9cIikrKGU/XCJSXCI6XCJfXCIpKygwPT09Zj9cIkdyXCI6MT09PWY/XCJCbFwiOjI9PT1mP1wiV2hcIjpcIlwiKStcIl1cIixiP20rXCIoXCIrZy5jdnRbbV0rXCIsXCIraytcIilcIjpcIlwiLG4sXCIoZCA9XCIsaCxcIi0+XCIsaippLFwiKVwiKSxnLnJwMT1nLnJwMCxnLnJwMj1uLGMmJihnLnJwMD1uKX1mdW5jdGlvbiBRZChhKXthPWF8fHt9LGEuZW1wdHl8fChFYihhLmZhbWlseU5hbWUsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBmYW1pbHlOYW1lIGlzIHJlcXVpcmVkLlwiKSxFYihhLnN0eWxlTmFtZSxcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIHN0eWxlTmFtZSBpcyByZXF1aXJlZC5cIiksRWIoYS51bml0c1BlckVtLFwiV2hlbiBjcmVhdGluZyBhIG5ldyBGb250IG9iamVjdCwgdW5pdHNQZXJFbSBpcyByZXF1aXJlZC5cIiksRWIoYS5hc2NlbmRlcixcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIGFzY2VuZGVyIGlzIHJlcXVpcmVkLlwiKSxFYihhLmRlc2NlbmRlcixcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIGRlc2NlbmRlciBpcyByZXF1aXJlZC5cIiksRWIoYS5kZXNjZW5kZXI8MCxcIkRlc2NlbmRlciBzaG91bGQgYmUgbmVnYXRpdmUgKGUuZy4gLTUxMikuXCIpLHRoaXMubmFtZXM9e2ZvbnRGYW1pbHk6e2VuOmEuZmFtaWx5TmFtZXx8XCIgXCJ9LGZvbnRTdWJmYW1pbHk6e2VuOmEuc3R5bGVOYW1lfHxcIiBcIn0sZnVsbE5hbWU6e2VuOmEuZnVsbE5hbWV8fGEuZmFtaWx5TmFtZStcIiBcIithLnN0eWxlTmFtZX0scG9zdFNjcmlwdE5hbWU6e2VuOmEucG9zdFNjcmlwdE5hbWV8fChhLmZhbWlseU5hbWUrYS5zdHlsZU5hbWUpLnJlcGxhY2UoL1xccy9nLFwiXCIpfSxkZXNpZ25lcjp7ZW46YS5kZXNpZ25lcnx8XCIgXCJ9LGRlc2lnbmVyVVJMOntlbjphLmRlc2lnbmVyVVJMfHxcIiBcIn0sbWFudWZhY3R1cmVyOntlbjphLm1hbnVmYWN0dXJlcnx8XCIgXCJ9LG1hbnVmYWN0dXJlclVSTDp7ZW46YS5tYW51ZmFjdHVyZXJVUkx8fFwiIFwifSxsaWNlbnNlOntlbjphLmxpY2Vuc2V8fFwiIFwifSxsaWNlbnNlVVJMOntlbjphLmxpY2Vuc2VVUkx8fFwiIFwifSx2ZXJzaW9uOntlbjphLnZlcnNpb258fFwiVmVyc2lvbiAwLjFcIn0sZGVzY3JpcHRpb246e2VuOmEuZGVzY3JpcHRpb258fFwiIFwifSxjb3B5cmlnaHQ6e2VuOmEuY29weXJpZ2h0fHxcIiBcIn0sdHJhZGVtYXJrOntlbjphLnRyYWRlbWFya3x8XCIgXCJ9fSx0aGlzLnVuaXRzUGVyRW09YS51bml0c1BlckVtfHwxZTMsdGhpcy5hc2NlbmRlcj1hLmFzY2VuZGVyLHRoaXMuZGVzY2VuZGVyPWEuZGVzY2VuZGVyLHRoaXMuY3JlYXRlZFRpbWVzdGFtcD1hLmNyZWF0ZWRUaW1lc3RhbXAsdGhpcy50YWJsZXM9e29zMjp7dXNXZWlnaHRDbGFzczphLndlaWdodENsYXNzfHx0aGlzLnVzV2VpZ2h0Q2xhc3Nlcy5NRURJVU0sdXNXaWR0aENsYXNzOmEud2lkdGhDbGFzc3x8dGhpcy51c1dpZHRoQ2xhc3Nlcy5NRURJVU0sZnNTZWxlY3Rpb246YS5mc1NlbGVjdGlvbnx8dGhpcy5mc1NlbGVjdGlvblZhbHVlcy5SRUdVTEFSfX0pLHRoaXMuc3VwcG9ydGVkPSEwLHRoaXMuZ2x5cGhzPW5ldyBTZS5HbHlwaFNldCh0aGlzLGEuZ2x5cGhzfHxbXSksdGhpcy5lbmNvZGluZz1uZXcgWCh0aGlzKSx0aGlzLnBvc2l0aW9uPW5ldyB4Yih0aGlzKSx0aGlzLnN1YnN0aXR1dGlvbj1uZXcgeWIodGhpcyksdGhpcy50YWJsZXM9dGhpcy50YWJsZXN8fHt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiaGludGluZ1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGludGluZz90aGlzLl9oaW50aW5nOlwidHJ1ZXR5cGVcIj09PXRoaXMub3V0bGluZXNGb3JtYXQ/dGhpcy5faGludGluZz1uZXcgTWIodGhpcyk6dm9pZCAwfX0pfWZ1bmN0aW9uIFJkKGEsYil7dmFyIGM9SlNPTi5zdHJpbmdpZnkoYSksZD0yNTY7Zm9yKHZhciBlIGluIGIpe3ZhciBmPXBhcnNlSW50KGUpO2lmKGYmJiEoZjwyNTYpKXtpZihKU09OLnN0cmluZ2lmeShiW2VdKT09PWMpcmV0dXJuIGY7ZDw9ZiYmKGQ9ZisxKX19cmV0dXJuIGJbZF09YSxkfWZ1bmN0aW9uIFNkKGEsYixjKXt2YXIgZD1SZChiLm5hbWUsYyk7cmV0dXJuW3tuYW1lOlwidGFnX1wiK2EsdHlwZTpcIlRBR1wiLHZhbHVlOmIudGFnfSx7bmFtZTpcIm1pblZhbHVlX1wiK2EsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5taW5WYWx1ZTw8MTZ9LHtuYW1lOlwiZGVmYXVsdFZhbHVlX1wiK2EsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5kZWZhdWx0VmFsdWU8PDE2fSx7bmFtZTpcIm1heFZhbHVlX1wiK2EsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5tYXhWYWx1ZTw8MTZ9LHtuYW1lOlwiZmxhZ3NfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJuYW1lSURfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZH1dfWZ1bmN0aW9uIFRkKGEsYixjKXt2YXIgZD17fSxlPW5ldyBMZS5QYXJzZXIoYSxiKTtyZXR1cm4gZC50YWc9ZS5wYXJzZVRhZygpLGQubWluVmFsdWU9ZS5wYXJzZUZpeGVkKCksZC5kZWZhdWx0VmFsdWU9ZS5wYXJzZUZpeGVkKCksZC5tYXhWYWx1ZT1lLnBhcnNlRml4ZWQoKSxlLnNraXAoXCJ1U2hvcnRcIiwxKSxkLm5hbWU9Y1tlLnBhcnNlVVNob3J0KCldfHx7fSxkfWZ1bmN0aW9uIFVkKGEsYixjLGQpe2Zvcih2YXIgZT1SZChiLm5hbWUsZCksZj1be25hbWU6XCJuYW1lSURfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZX0se25hbWU6XCJmbGFnc19cIithLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfV0sZz0wO2c8Yy5sZW5ndGg7KytnKXt2YXIgaD1jW2ddLnRhZztmLnB1c2goe25hbWU6XCJheGlzX1wiK2ErXCIgXCIraCx0eXBlOlwiRklYRURcIix2YWx1ZTpiLmNvb3JkaW5hdGVzW2hdPDwxNn0pfXJldHVybiBmfWZ1bmN0aW9uIFZkKGEsYixjLGQpe3ZhciBlPXt9LGY9bmV3IExlLlBhcnNlcihhLGIpO2UubmFtZT1kW2YucGFyc2VVU2hvcnQoKV18fHt9LGYuc2tpcChcInVTaG9ydFwiLDEpLGUuY29vcmRpbmF0ZXM9e307Zm9yKHZhciBnPTA7ZzxjLmxlbmd0aDsrK2cpZS5jb29yZGluYXRlc1tjW2ddLnRhZ109Zi5wYXJzZUZpeGVkKCk7cmV0dXJuIGV9ZnVuY3Rpb24gV2QoYSxiKXt2YXIgYz1uZXcgSWUuVGFibGUoXCJmdmFyXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjY1NTM2fSx7bmFtZTpcIm9mZnNldFRvRGF0YVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImNvdW50U2l6ZVBhaXJzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjJ9LHtuYW1lOlwiYXhpc0NvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEuYXhlcy5sZW5ndGh9LHtuYW1lOlwiYXhpc1NpemVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MjB9LHtuYW1lOlwiaW5zdGFuY2VDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmluc3RhbmNlcy5sZW5ndGh9LHtuYW1lOlwiaW5zdGFuY2VTaXplXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjQrNCphLmF4ZXMubGVuZ3RofV0pO2Mub2Zmc2V0VG9EYXRhPWMuc2l6ZU9mKCk7Zm9yKHZhciBkPTA7ZDxhLmF4ZXMubGVuZ3RoO2QrKyljLmZpZWxkcz1jLmZpZWxkcy5jb25jYXQoU2QoZCxhLmF4ZXNbZF0sYikpO2Zvcih2YXIgZT0wO2U8YS5pbnN0YW5jZXMubGVuZ3RoO2UrKyljLmZpZWxkcz1jLmZpZWxkcy5jb25jYXQoVWQoZSxhLmluc3RhbmNlc1tlXSxhLmF4ZXMsYikpO3JldHVybiBjfWZ1bmN0aW9uIFhkKGEsYixjKXt2YXIgZD1uZXcgTGUuUGFyc2VyKGEsYiksZT1kLnBhcnNlVUxvbmcoKTt4ZS5hcmd1bWVudCg2NTUzNj09PWUsXCJVbnN1cHBvcnRlZCBmdmFyIHRhYmxlIHZlcnNpb24uXCIpO3ZhciBmPWQucGFyc2VPZmZzZXQxNigpO2Quc2tpcChcInVTaG9ydFwiLDEpO2Zvcih2YXIgZz1kLnBhcnNlVVNob3J0KCksaD1kLnBhcnNlVVNob3J0KCksaT1kLnBhcnNlVVNob3J0KCksaj1kLnBhcnNlVVNob3J0KCksaz1bXSxsPTA7bDxnO2wrKylrLnB1c2goVGQoYSxiK2YrbCpoLGMpKTtmb3IodmFyIG09W10sbj1iK2YrZypoLG89MDtvPGk7bysrKW0ucHVzaChWZChhLG4rbypqLGssYykpO3JldHVybntheGVzOmssaW5zdGFuY2VzOm19fWZ1bmN0aW9uIFlkKGEsYil7Yj1ifHwwO3ZhciBjPW5ldyBRKGEsYiksZD1jLnBhcnNlVmVyc2lvbigxKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWR8fDEuMT09PWQsXCJVbnN1cHBvcnRlZCBHUE9TIHRhYmxlIHZlcnNpb24gXCIrZCksMT09PWQ/e3ZlcnNpb246ZCxzY3JpcHRzOmMucGFyc2VTY3JpcHRMaXN0KCksZmVhdHVyZXM6Yy5wYXJzZUZlYXR1cmVMaXN0KCksbG9va3VwczpjLnBhcnNlTG9va3VwTGlzdChEZil9Ont2ZXJzaW9uOmQsc2NyaXB0czpjLnBhcnNlU2NyaXB0TGlzdCgpLGZlYXR1cmVzOmMucGFyc2VGZWF0dXJlTGlzdCgpLGxvb2t1cHM6Yy5wYXJzZUxvb2t1cExpc3QoRGYpLHZhcmlhdGlvbnM6Yy5wYXJzZUZlYXR1cmVWYXJpYXRpb25zTGlzdCgpfX1mdW5jdGlvbiBaZChhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiR1BPU1wiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJzY3JpcHRzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLlNjcmlwdExpc3QoYS5zY3JpcHRzKX0se25hbWU6XCJmZWF0dXJlc1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5GZWF0dXJlTGlzdChhLmZlYXR1cmVzKX0se25hbWU6XCJsb29rdXBzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkxvb2t1cExpc3QoYS5sb29rdXBzLEVmKX1dKX1mdW5jdGlvbiAkZChhKXt2YXIgYj17fTthLnNraXAoXCJ1U2hvcnRcIik7dmFyIGM9YS5wYXJzZVVTaG9ydCgpO3hlLmFyZ3VtZW50KDA9PT1jLFwiVW5zdXBwb3J0ZWQga2VybiBzdWItdGFibGUgdmVyc2lvbi5cIiksYS5za2lwKFwidVNob3J0XCIsMik7dmFyIGQ9YS5wYXJzZVVTaG9ydCgpO2Euc2tpcChcInVTaG9ydFwiLDMpO2Zvcih2YXIgZT0wO2U8ZDtlKz0xKXt2YXIgZj1hLnBhcnNlVVNob3J0KCksZz1hLnBhcnNlVVNob3J0KCksaD1hLnBhcnNlU2hvcnQoKTtiW2YrXCIsXCIrZ109aH1yZXR1cm4gYn1mdW5jdGlvbiBfZChhKXt2YXIgYj17fTthLnNraXAoXCJ1U2hvcnRcIiksYS5wYXJzZVVMb25nKCk+MSYmY29uc29sZS53YXJuKFwiT25seSB0aGUgZmlyc3Qga2VybiBzdWJ0YWJsZSBpcyBzdXBwb3J0ZWQuXCIpLGEuc2tpcChcInVMb25nXCIpO3ZhciBjPWEucGFyc2VVU2hvcnQoKSxkPTI1NSZjO2lmKGEuc2tpcChcInVTaG9ydFwiKSwwPT09ZCl7dmFyIGU9YS5wYXJzZVVTaG9ydCgpO2Euc2tpcChcInVTaG9ydFwiLDMpO2Zvcih2YXIgZj0wO2Y8ZTtmKz0xKXt2YXIgZz1hLnBhcnNlVVNob3J0KCksaD1hLnBhcnNlVVNob3J0KCksaT1hLnBhcnNlU2hvcnQoKTtiW2crXCIsXCIraF09aX19cmV0dXJuIGJ9ZnVuY3Rpb24gYWUoYSxiKXt2YXIgYz1uZXcgTGUuUGFyc2VyKGEsYiksZD1jLnBhcnNlVVNob3J0KCk7aWYoMD09PWQpcmV0dXJuICRkKGMpO2lmKDE9PT1kKXJldHVybiBfZChjKTt0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBrZXJuIHRhYmxlIHZlcnNpb24gKFwiK2QrXCIpLlwiKX1mdW5jdGlvbiBiZShhLGIsYyxkKXtmb3IodmFyIGU9bmV3IExlLlBhcnNlcihhLGIpLGY9ZD9lLnBhcnNlVVNob3J0OmUucGFyc2VVTG9uZyxnPVtdLGg9MDtoPGMrMTtoKz0xKXt2YXIgaT1mLmNhbGwoZSk7ZCYmKGkqPTIpLGcucHVzaChpKX1yZXR1cm4gZ31mdW5jdGlvbiBjZShhLGMpe2IoXCJmc1wiKS5yZWFkRmlsZShhLGZ1bmN0aW9uKGEsYil7aWYoYSlyZXR1cm4gYyhhLm1lc3NhZ2UpO2MobnVsbCxDYihiKSl9KX1mdW5jdGlvbiBkZShhLGIpe3ZhciBjPW5ldyBYTUxIdHRwUmVxdWVzdDtjLm9wZW4oXCJnZXRcIixhLCEwKSxjLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCIsYy5vbmxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gYy5yZXNwb25zZT9iKG51bGwsYy5yZXNwb25zZSk6YihcIkZvbnQgY291bGQgbm90IGJlIGxvYWRlZDogXCIrYy5zdGF0dXNUZXh0KX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7YihcIkZvbnQgY291bGQgbm90IGJlIGxvYWRlZFwiKX0sYy5zZW5kKCl9ZnVuY3Rpb24gZWUoYSxiKXtmb3IodmFyIGM9W10sZD0xMixlPTA7ZTxiO2UrPTEpe3ZhciBmPUxlLmdldFRhZyhhLGQpLGc9TGUuZ2V0VUxvbmcoYSxkKzQpLGg9TGUuZ2V0VUxvbmcoYSxkKzgpLGk9TGUuZ2V0VUxvbmcoYSxkKzEyKTtjLnB1c2goe3RhZzpmLGNoZWNrc3VtOmcsb2Zmc2V0OmgsbGVuZ3RoOmksY29tcHJlc3Npb246ITF9KSxkKz0xNn1yZXR1cm4gY31mdW5jdGlvbiBmZShhLGIpe2Zvcih2YXIgYz1bXSxkPTQ0LGU9MDtlPGI7ZSs9MSl7dmFyIGY9TGUuZ2V0VGFnKGEsZCksZz1MZS5nZXRVTG9uZyhhLGQrNCksaD1MZS5nZXRVTG9uZyhhLGQrOCksaT1MZS5nZXRVTG9uZyhhLGQrMTIpLGo9dm9pZCAwO2o9aDxpJiZcIldPRkZcIixjLnB1c2goe3RhZzpmLG9mZnNldDpnLGNvbXByZXNzaW9uOmosY29tcHJlc3NlZExlbmd0aDpoLGxlbmd0aDppfSksZCs9MjB9cmV0dXJuIGN9ZnVuY3Rpb24gZ2UoYSxiKXtpZihcIldPRkZcIj09PWIuY29tcHJlc3Npb24pe3ZhciBjPW5ldyBVaW50OEFycmF5KGEuYnVmZmVyLGIub2Zmc2V0KzIsYi5jb21wcmVzc2VkTGVuZ3RoLTIpLGQ9bmV3IFVpbnQ4QXJyYXkoYi5sZW5ndGgpO2lmKHdlKGMsZCksZC5ieXRlTGVuZ3RoIT09Yi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiRGVjb21wcmVzc2lvbiBlcnJvcjogXCIrYi50YWcrXCIgZGVjb21wcmVzc2VkIGxlbmd0aCBkb2Vzbid0IG1hdGNoIHJlY29yZGVkIGxlbmd0aFwiKTtyZXR1cm57ZGF0YTpuZXcgRGF0YVZpZXcoZC5idWZmZXIsMCksb2Zmc2V0OjB9fXJldHVybntkYXRhOmEsb2Zmc2V0OmIub2Zmc2V0fX1mdW5jdGlvbiBoZShhKXt2YXIgYixjLGQsZT1uZXcgUWQoe2VtcHR5OiEwfSksZj1uZXcgRGF0YVZpZXcoYSwwKSxnPVtdLGg9TGUuZ2V0VGFnKGYsMCk7aWYoaD09PVN0cmluZy5mcm9tQ2hhckNvZGUoMCwxLDAsMCl8fFwidHJ1ZVwiPT09aHx8XCJ0eXAxXCI9PT1oKWUub3V0bGluZXNGb3JtYXQ9XCJ0cnVldHlwZVwiLGQ9TGUuZ2V0VVNob3J0KGYsNCksZz1lZShmLGQpO2Vsc2UgaWYoXCJPVFRPXCI9PT1oKWUub3V0bGluZXNGb3JtYXQ9XCJjZmZcIixkPUxlLmdldFVTaG9ydChmLDQpLGc9ZWUoZixkKTtlbHNle2lmKFwid09GRlwiIT09aCl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBPcGVuVHlwZSBzaWduYXR1cmUgXCIraCk7dmFyIGk9TGUuZ2V0VGFnKGYsNCk7aWYoaT09PVN0cmluZy5mcm9tQ2hhckNvZGUoMCwxLDAsMCkpZS5vdXRsaW5lc0Zvcm1hdD1cInRydWV0eXBlXCI7ZWxzZXtpZihcIk9UVE9cIiE9PWkpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgT3BlblR5cGUgZmxhdm9yIFwiK2gpO2Uub3V0bGluZXNGb3JtYXQ9XCJjZmZcIn1kPUxlLmdldFVTaG9ydChmLDEyKSxnPWZlKGYsZCl9Zm9yKHZhciBqLGssbCxtLG4sbyxwLHEscixzLHQsdT0wO3U8ZDt1Kz0xKXt2YXIgdj1nW3VdLHc9dm9pZCAwO3N3aXRjaCh2LnRhZyl7Y2FzZVwiY21hcFwiOnc9Z2UoZix2KSxlLnRhYmxlcy5jbWFwPU1lLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS5lbmNvZGluZz1uZXcgWShlLnRhYmxlcy5jbWFwKTticmVhaztjYXNlXCJjdnQgXCI6dz1nZShmLHYpLHQ9bmV3IExlLlBhcnNlcih3LmRhdGEsdy5vZmZzZXQpLGUudGFibGVzLmN2dD10LnBhcnNlU2hvcnRMaXN0KHYubGVuZ3RoLzIpO2JyZWFrO2Nhc2VcImZ2YXJcIjprPXY7YnJlYWs7Y2FzZVwiZnBnbVwiOnc9Z2UoZix2KSx0PW5ldyBMZS5QYXJzZXIody5kYXRhLHcub2Zmc2V0KSxlLnRhYmxlcy5mcGdtPXQucGFyc2VCeXRlTGlzdCh2Lmxlbmd0aCk7YnJlYWs7Y2FzZVwiaGVhZFwiOnc9Z2UoZix2KSxlLnRhYmxlcy5oZWFkPVdlLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS51bml0c1BlckVtPWUudGFibGVzLmhlYWQudW5pdHNQZXJFbSxiPWUudGFibGVzLmhlYWQuaW5kZXhUb0xvY0Zvcm1hdDticmVhaztjYXNlXCJoaGVhXCI6dz1nZShmLHYpLGUudGFibGVzLmhoZWE9WGUucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLmFzY2VuZGVyPWUudGFibGVzLmhoZWEuYXNjZW5kZXIsZS5kZXNjZW5kZXI9ZS50YWJsZXMuaGhlYS5kZXNjZW5kZXIsZS5udW1iZXJPZkhNZXRyaWNzPWUudGFibGVzLmhoZWEubnVtYmVyT2ZITWV0cmljczticmVhaztjYXNlXCJobXR4XCI6bz12O2JyZWFrO2Nhc2VcImx0YWdcIjp3PWdlKGYsdiksYz1aZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpO2JyZWFrO2Nhc2VcIm1heHBcIjp3PWdlKGYsdiksZS50YWJsZXMubWF4cD0kZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUubnVtR2x5cGhzPWUudGFibGVzLm1heHAubnVtR2x5cGhzO2JyZWFrO2Nhc2VcIm5hbWVcIjpyPXY7YnJlYWs7Y2FzZVwiT1MvMlwiOnc9Z2UoZix2KSxlLnRhYmxlcy5vczI9amYucGFyc2Uody5kYXRhLHcub2Zmc2V0KTticmVhaztjYXNlXCJwb3N0XCI6dz1nZShmLHYpLGUudGFibGVzLnBvc3Q9a2YucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLmdseXBoTmFtZXM9bmV3ICQoZS50YWJsZXMucG9zdCk7YnJlYWs7Y2FzZVwicHJlcFwiOnc9Z2UoZix2KSx0PW5ldyBMZS5QYXJzZXIody5kYXRhLHcub2Zmc2V0KSxlLnRhYmxlcy5wcmVwPXQucGFyc2VCeXRlTGlzdCh2Lmxlbmd0aCk7YnJlYWs7Y2FzZVwiZ2x5ZlwiOmw9djticmVhaztjYXNlXCJsb2NhXCI6cT12O2JyZWFrO2Nhc2VcIkNGRiBcIjpqPXY7YnJlYWs7Y2FzZVwia2VyblwiOnA9djticmVhaztjYXNlXCJHUE9TXCI6bT12O2JyZWFrO2Nhc2VcIkdTVUJcIjpuPXY7YnJlYWs7Y2FzZVwibWV0YVwiOnM9dn19dmFyIHg9Z2UoZixyKTtpZihlLnRhYmxlcy5uYW1lPWdmLnBhcnNlKHguZGF0YSx4Lm9mZnNldCxjKSxlLm5hbWVzPWUudGFibGVzLm5hbWUsbCYmcSl7dmFyIHk9MD09PWIsej1nZShmLHEpLEE9SGYucGFyc2Uoei5kYXRhLHoub2Zmc2V0LGUubnVtR2x5cGhzLHkpLEI9Z2UoZixsKTtlLmdseXBocz12Zi5wYXJzZShCLmRhdGEsQi5vZmZzZXQsQSxlKX1lbHNle2lmKCFqKXRocm93IG5ldyBFcnJvcihcIkZvbnQgZG9lc24ndCBjb250YWluIFRydWVUeXBlIG9yIENGRiBvdXRsaW5lcy5cIik7dmFyIEM9Z2UoZixqKTtWZS5wYXJzZShDLmRhdGEsQy5vZmZzZXQsZSl9dmFyIEQ9Z2UoZixvKTtpZihZZS5wYXJzZShELmRhdGEsRC5vZmZzZXQsZS5udW1iZXJPZkhNZXRyaWNzLGUubnVtR2x5cGhzLGUuZ2x5cGhzKSxfKGUpLHApe3ZhciBFPWdlKGYscCk7ZS5rZXJuaW5nUGFpcnM9R2YucGFyc2UoRS5kYXRhLEUub2Zmc2V0KX1lbHNlIGUua2VybmluZ1BhaXJzPXt9O2lmKG0pe3ZhciBGPWdlKGYsbSk7ZS50YWJsZXMuZ3Bvcz1GZi5wYXJzZShGLmRhdGEsRi5vZmZzZXQpLGUucG9zaXRpb24uaW5pdCgpfWlmKG4pe3ZhciBHPWdlKGYsbik7ZS50YWJsZXMuZ3N1Yj1vZi5wYXJzZShHLmRhdGEsRy5vZmZzZXQpfWlmKGspe3ZhciBIPWdlKGYsayk7ZS50YWJsZXMuZnZhcj1DZi5wYXJzZShILmRhdGEsSC5vZmZzZXQsZS5uYW1lcyl9aWYocyl7dmFyIEk9Z2UoZixzKTtlLnRhYmxlcy5tZXRhPXBmLnBhcnNlKEkuZGF0YSxJLm9mZnNldCksZS5tZXRhcz1lLnRhYmxlcy5tZXRhfXJldHVybiBlfWZ1bmN0aW9uIGllKGEsYil7KFwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3c/Y2U6ZGUpKGEsZnVuY3Rpb24oYSxjKXtpZihhKXJldHVybiBiKGEpO3ZhciBkO3RyeXtkPWhlKGMpfWNhdGNoKGEpe3JldHVybiBiKGEsbnVsbCl9cmV0dXJuIGIobnVsbCxkKX0pfWZ1bmN0aW9uIGplKGEpe3JldHVybiBoZShDYihiKFwiZnNcIikucmVhZEZpbGVTeW5jKGEpKSl9U3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdHx8ZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbigpe3RyeXt2YXIgYT17fSxiPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxjPWIoYSxhLGEpJiZifWNhdGNoKGEpe31yZXR1cm4gY30oKSxiPWZ1bmN0aW9uKGEpe2lmKG51bGw9PXRoaXMpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGI9U3RyaW5nKHRoaXMpLGM9Yi5sZW5ndGgsZD1hP051bWJlcihhKTowO2lmKGQhPWQmJihkPTApLCEoZDwwfHxkPj1jKSl7dmFyIGUsZj1iLmNoYXJDb2RlQXQoZCk7cmV0dXJuIGY+PTU1Mjk2JiZmPD01NjMxOSYmYz5kKzEmJihlPWIuY2hhckNvZGVBdChkKzEpKT49NTYzMjAmJmU8PTU3MzQzPzEwMjQqKGYtNTUyOTYpK2UtNTYzMjArNjU1MzY6Zn19O2E/YShTdHJpbmcucHJvdG90eXBlLFwiY29kZVBvaW50QXRcIix7dmFsdWU6Yixjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0PWJ9KCk7dmFyIGtlPTAsbGU9LTMsbWU9bmV3IGMsbmU9bmV3IGMsb2U9bmV3IFVpbnQ4QXJyYXkoMzApLHBlPW5ldyBVaW50MTZBcnJheSgzMCkscWU9bmV3IFVpbnQ4QXJyYXkoMzApLHJlPW5ldyBVaW50MTZBcnJheSgzMCksc2U9bmV3IFVpbnQ4QXJyYXkoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSx0ZT1uZXcgYyx1ZT1uZXcgVWludDhBcnJheSgzMjApLHZlPW5ldyBVaW50MTZBcnJheSgxNik7ZyhtZSxuZSksZihvZSxwZSw0LDMpLGYocWUscmUsMiwxKSxvZVsyOF09MCxwZVsyOF09MjU4O3ZhciB3ZT1vO3EucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gaXNOYU4odGhpcy54MSl8fGlzTmFOKHRoaXMueTEpfHxpc05hTih0aGlzLngyKXx8aXNOYU4odGhpcy55Mil9LHEucHJvdG90eXBlLmFkZFBvaW50PWZ1bmN0aW9uKGEsYil7XCJudW1iZXJcIj09dHlwZW9mIGEmJigoaXNOYU4odGhpcy54MSl8fGlzTmFOKHRoaXMueDIpKSYmKHRoaXMueDE9YSx0aGlzLngyPWEpLGE8dGhpcy54MSYmKHRoaXMueDE9YSksYT50aGlzLngyJiYodGhpcy54Mj1hKSksXCJudW1iZXJcIj09dHlwZW9mIGImJigoaXNOYU4odGhpcy55MSl8fGlzTmFOKHRoaXMueTIpKSYmKHRoaXMueTE9Yix0aGlzLnkyPWIpLGI8dGhpcy55MSYmKHRoaXMueTE9YiksYj50aGlzLnkyJiYodGhpcy55Mj1iKSl9LHEucHJvdG90eXBlLmFkZFg9ZnVuY3Rpb24oYSl7dGhpcy5hZGRQb2ludChhLG51bGwpfSxxLnByb3RvdHlwZS5hZGRZPWZ1bmN0aW9uKGEpe3RoaXMuYWRkUG9pbnQobnVsbCxhKX0scS5wcm90b3R5cGUuYWRkQmV6aWVyPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCl7dmFyIGk9dGhpcyxqPVthLGJdLGs9W2MsZF0sbD1bZSxmXSxtPVtnLGhdO3RoaXMuYWRkUG9pbnQoYSxiKSx0aGlzLmFkZFBvaW50KGcsaCk7Zm9yKHZhciBuPTA7bjw9MTtuKyspe3ZhciBvPTYqaltuXS0xMiprW25dKzYqbFtuXSxxPS0zKmpbbl0rOSprW25dLTkqbFtuXSszKm1bbl0scj0zKmtbbl0tMypqW25dO2lmKDAhPT1xKXt2YXIgcz1NYXRoLnBvdyhvLDIpLTQqcipxO2lmKCEoczwwKSl7dmFyIHQ9KC1vK01hdGguc3FydChzKSkvKDIqcSk7MDx0JiZ0PDEmJigwPT09biYmaS5hZGRYKHAoaltuXSxrW25dLGxbbl0sbVtuXSx0KSksMT09PW4mJmkuYWRkWShwKGpbbl0sa1tuXSxsW25dLG1bbl0sdCkpKTt2YXIgdT0oLW8tTWF0aC5zcXJ0KHMpKS8oMipxKTswPHUmJnU8MSYmKDA9PT1uJiZpLmFkZFgocChqW25dLGtbbl0sbFtuXSxtW25dLHUpKSwxPT09biYmaS5hZGRZKHAoaltuXSxrW25dLGxbbl0sbVtuXSx1KSkpfX1lbHNle2lmKDA9PT1vKWNvbnRpbnVlO3ZhciB2PS1yL287MDx2JiZ2PDEmJigwPT09biYmaS5hZGRYKHAoaltuXSxrW25dLGxbbl0sbVtuXSx2KSksMT09PW4mJmkuYWRkWShwKGpbbl0sa1tuXSxsW25dLG1bbl0sdikpKX19fSxxLnByb3RvdHlwZS5hZGRRdWFkPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1hKzIvMyooYy1hKSxoPWIrMi8zKihkLWIpLGk9ZysxLzMqKGUtYSksaj1oKzEvMyooZi1iKTt0aGlzLmFkZEJlemllcihhLGIsZyxoLGksaixlLGYpfSxyLnByb3RvdHlwZS5tb3ZlVG89ZnVuY3Rpb24oYSxiKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJNXCIseDphLHk6Yn0pfSxyLnByb3RvdHlwZS5saW5lVG89ZnVuY3Rpb24oYSxiKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJMXCIseDphLHk6Yn0pfSxyLnByb3RvdHlwZS5jdXJ2ZVRvPXIucHJvdG90eXBlLmJlemllckN1cnZlVG89ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIkNcIix4MTphLHkxOmIseDI6Yyx5MjpkLHg6ZSx5OmZ9KX0sci5wcm90b3R5cGUucXVhZFRvPXIucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG89ZnVuY3Rpb24oYSxiLGMsZCl7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiUVwiLHgxOmEseTE6Yix4OmMseTpkfSl9LHIucHJvdG90eXBlLmNsb3NlPXIucHJvdG90eXBlLmNsb3NlUGF0aD1mdW5jdGlvbigpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIlpcIn0pfSxyLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24oYSl7aWYoYS5jb21tYW5kcylhPWEuY29tbWFuZHM7ZWxzZSBpZihhIGluc3RhbmNlb2YgcSl7dmFyIGI9YTtyZXR1cm4gdGhpcy5tb3ZlVG8oYi54MSxiLnkxKSx0aGlzLmxpbmVUbyhiLngyLGIueTEpLHRoaXMubGluZVRvKGIueDIsYi55MiksdGhpcy5saW5lVG8oYi54MSxiLnkyKSx2b2lkIHRoaXMuY2xvc2UoKX1BcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLmNvbW1hbmRzLGEpfSxyLnByb3RvdHlwZS5nZXRCb3VuZGluZ0JveD1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLGI9bmV3IHEsYz0wLGQ9MCxlPTAsZj0wLGc9MDtnPHRoaXMuY29tbWFuZHMubGVuZ3RoO2crKyl7dmFyIGg9YS5jb21tYW5kc1tnXTtzd2l0Y2goaC50eXBlKXtjYXNlXCJNXCI6Yi5hZGRQb2ludChoLngsaC55KSxjPWU9aC54LGQ9Zj1oLnk7YnJlYWs7Y2FzZVwiTFwiOmIuYWRkUG9pbnQoaC54LGgueSksZT1oLngsZj1oLnk7YnJlYWs7Y2FzZVwiUVwiOmIuYWRkUXVhZChlLGYsaC54MSxoLnkxLGgueCxoLnkpLGU9aC54LGY9aC55O2JyZWFrO2Nhc2VcIkNcIjpiLmFkZEJlemllcihlLGYsaC54MSxoLnkxLGgueDIsaC55MixoLngsaC55KSxlPWgueCxmPWgueTticmVhaztjYXNlXCJaXCI6ZT1jLGY9ZDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgcGF0aCBjb21tYW5kIFwiK2gudHlwZSl9fXJldHVybiBiLmlzRW1wdHkoKSYmYi5hZGRQb2ludCgwLDApLGJ9LHIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpczthLmJlZ2luUGF0aCgpO2Zvcih2YXIgYz0wO2M8dGhpcy5jb21tYW5kcy5sZW5ndGg7Yys9MSl7dmFyIGQ9Yi5jb21tYW5kc1tjXTtcIk1cIj09PWQudHlwZT9hLm1vdmVUbyhkLngsZC55KTpcIkxcIj09PWQudHlwZT9hLmxpbmVUbyhkLngsZC55KTpcIkNcIj09PWQudHlwZT9hLmJlemllckN1cnZlVG8oZC54MSxkLnkxLGQueDIsZC55MixkLngsZC55KTpcIlFcIj09PWQudHlwZT9hLnF1YWRyYXRpY0N1cnZlVG8oZC54MSxkLnkxLGQueCxkLnkpOlwiWlwiPT09ZC50eXBlJiZhLmNsb3NlUGF0aCgpfXRoaXMuZmlsbCYmKGEuZmlsbFN0eWxlPXRoaXMuZmlsbCxhLmZpbGwoKSksdGhpcy5zdHJva2UmJihhLnN0cm9rZVN0eWxlPXRoaXMuc3Ryb2tlLGEubGluZVdpZHRoPXRoaXMuc3Ryb2tlV2lkdGgsYS5zdHJva2UoKSl9LHIucHJvdG90eXBlLnRvUGF0aERhdGE9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtyZXR1cm4gTWF0aC5yb3VuZChiKT09PWI/XCJcIitNYXRoLnJvdW5kKGIpOmIudG9GaXhlZChhKX1mdW5jdGlvbiBjKCl7Zm9yKHZhciBhPWFyZ3VtZW50cyxjPVwiXCIsZD0wO2Q8YXJndW1lbnRzLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdO2U+PTAmJmQ+MCYmKGMrPVwiIFwiKSxjKz1iKGUpfXJldHVybiBjfXZhciBkPXRoaXM7YT12b2lkIDAhPT1hP2E6Mjtmb3IodmFyIGU9XCJcIixmPTA7Zjx0aGlzLmNvbW1hbmRzLmxlbmd0aDtmKz0xKXt2YXIgZz1kLmNvbW1hbmRzW2ZdO1wiTVwiPT09Zy50eXBlP2UrPVwiTVwiK2MoZy54LGcueSk6XCJMXCI9PT1nLnR5cGU/ZSs9XCJMXCIrYyhnLngsZy55KTpcIkNcIj09PWcudHlwZT9lKz1cIkNcIitjKGcueDEsZy55MSxnLngyLGcueTIsZy54LGcueSk6XCJRXCI9PT1nLnR5cGU/ZSs9XCJRXCIrYyhnLngxLGcueTEsZy54LGcueSk6XCJaXCI9PT1nLnR5cGUmJihlKz1cIlpcIil9cmV0dXJuIGV9LHIucHJvdG90eXBlLnRvU1ZHPWZ1bmN0aW9uKGEpe3ZhciBiPSc8cGF0aCBkPVwiJztyZXR1cm4gYis9dGhpcy50b1BhdGhEYXRhKGEpLGIrPSdcIicsdGhpcy5maWxsJiZcImJsYWNrXCIhPT10aGlzLmZpbGwmJihudWxsPT09dGhpcy5maWxsP2IrPScgZmlsbD1cIm5vbmVcIic6Yis9JyBmaWxsPVwiJyt0aGlzLmZpbGwrJ1wiJyksdGhpcy5zdHJva2UmJihiKz0nIHN0cm9rZT1cIicrdGhpcy5zdHJva2UrJ1wiIHN0cm9rZS13aWR0aD1cIicrdGhpcy5zdHJva2VXaWR0aCsnXCInKSxiKz1cIi8+XCJ9LHIucHJvdG90eXBlLnRvRE9NRWxlbWVudD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnRvUGF0aERhdGEoYSksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwicGF0aFwiKTtyZXR1cm4gYy5zZXRBdHRyaWJ1dGUoXCJkXCIsYiksY307dmFyIHhlPXtmYWlsOnMsYXJndW1lbnQ6dCxhc3NlcnQ6dH0seWU9MzI3NjgsemU9MjE0NzQ4MzY0OCxBZT17fSxCZT17fSxDZT17fTtCZS5CWVRFPWZ1bmN0aW9uKGEpe3JldHVybiB4ZS5hcmd1bWVudChhPj0wJiZhPD0yNTUsXCJCeXRlIHZhbHVlIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDI1NS5cIiksW2FdfSxDZS5CWVRFPXUoMSksQmUuQ0hBUj1mdW5jdGlvbihhKXtyZXR1cm5bYS5jaGFyQ29kZUF0KDApXX0sQ2UuQ0hBUj11KDEpLEJlLkNIQVJBUlJBWT1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YS5sZW5ndGg7Yys9MSliW2NdPWEuY2hhckNvZGVBdChjKTtyZXR1cm4gYn0sQ2UuQ0hBUkFSUkFZPWZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0sQmUuVVNIT1JUPWZ1bmN0aW9uKGEpe3JldHVyblthPj44JjI1NSwyNTUmYV19LENlLlVTSE9SVD11KDIpLEJlLlNIT1JUPWZ1bmN0aW9uKGEpe3JldHVybiBhPj15ZSYmKGE9LSgyKnllLWEpKSxbYT4+OCYyNTUsMjU1JmFdfSxDZS5TSE9SVD11KDIpLEJlLlVJTlQyND1mdW5jdGlvbihhKXtyZXR1cm5bYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuVUlOVDI0PXUoMyksQmUuVUxPTkc9ZnVuY3Rpb24oYSl7cmV0dXJuW2E+PjI0JjI1NSxhPj4xNiYyNTUsYT4+OCYyNTUsMjU1JmFdfSxDZS5VTE9ORz11KDQpLEJlLkxPTkc9ZnVuY3Rpb24oYSl7cmV0dXJuIGE+PXplJiYoYT0tKDIqemUtYSkpLFthPj4yNCYyNTUsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuTE9ORz11KDQpLEJlLkZJWEVEPUJlLlVMT05HLENlLkZJWEVEPUNlLlVMT05HLEJlLkZXT1JEPUJlLlNIT1JULENlLkZXT1JEPUNlLlNIT1JULEJlLlVGV09SRD1CZS5VU0hPUlQsQ2UuVUZXT1JEPUNlLlVTSE9SVCxCZS5MT05HREFURVRJTUU9ZnVuY3Rpb24oYSl7cmV0dXJuWzAsMCwwLDAsYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLkxPTkdEQVRFVElNRT11KDgpLEJlLlRBRz1mdW5jdGlvbihhKXtyZXR1cm4geGUuYXJndW1lbnQoND09PWEubGVuZ3RoLFwiVGFnIHNob3VsZCBiZSBleGFjdGx5IDQgQVNDSUkgY2hhcmFjdGVycy5cIiksW2EuY2hhckNvZGVBdCgwKSxhLmNoYXJDb2RlQXQoMSksYS5jaGFyQ29kZUF0KDIpLGEuY2hhckNvZGVBdCgzKV19LENlLlRBRz11KDQpLEJlLkNhcmQ4PUJlLkJZVEUsQ2UuQ2FyZDg9Q2UuQllURSxCZS5DYXJkMTY9QmUuVVNIT1JULENlLkNhcmQxNj1DZS5VU0hPUlQsQmUuT2ZmU2l6ZT1CZS5CWVRFLENlLk9mZlNpemU9Q2UuQllURSxCZS5TSUQ9QmUuVVNIT1JULENlLlNJRD1DZS5VU0hPUlQsQmUuTlVNQkVSPWZ1bmN0aW9uKGEpe3JldHVybiBhPj0tMTA3JiZhPD0xMDc/W2ErMTM5XTphPj0xMDgmJmE8PTExMzE/KGEtPTEwOCxbMjQ3KyhhPj44KSwyNTUmYV0pOmE+PS0xMTMxJiZhPD0tMTA4PyhhPS1hLTEwOCxbMjUxKyhhPj44KSwyNTUmYV0pOmE+PS0zMjc2OCYmYTw9MzI3Njc/QmUuTlVNQkVSMTYoYSk6QmUuTlVNQkVSMzIoYSlcbn0sQ2UuTlVNQkVSPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5OVU1CRVIoYSkubGVuZ3RofSxCZS5OVU1CRVIxNj1mdW5jdGlvbihhKXtyZXR1cm5bMjgsYT4+OCYyNTUsMjU1JmFdfSxDZS5OVU1CRVIxNj11KDMpLEJlLk5VTUJFUjMyPWZ1bmN0aW9uKGEpe3JldHVyblsyOSxhPj4yNCYyNTUsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuTlVNQkVSMzI9dSg1KSxCZS5SRUFMPWZ1bmN0aW9uKGEpe3ZhciBiPWEudG9TdHJpbmcoKSxjPS9cXC4oXFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxcZHswLDJ9KD86ZSguKyl8JCkvLmV4ZWMoYik7aWYoYyl7dmFyIGQ9cGFyc2VGbG9hdChcIjFlXCIrKChjWzJdPytjWzJdOjApK2NbMV0ubGVuZ3RoKSk7Yj0oTWF0aC5yb3VuZChhKmQpL2QpLnRvU3RyaW5nKCl9Zm9yKHZhciBlPVwiXCIsZj0wLGc9Yi5sZW5ndGg7ZjxnO2YrPTEpe3ZhciBoPWJbZl07ZSs9XCJlXCI9PT1oP1wiLVwiPT09YlsrK2ZdP1wiY1wiOlwiYlwiOlwiLlwiPT09aD9cImFcIjpcIi1cIj09PWg/XCJlXCI6aH1lKz0xJmUubGVuZ3RoP1wiZlwiOlwiZmZcIjtmb3IodmFyIGk9WzMwXSxqPTAsaz1lLmxlbmd0aDtqPGs7ais9MilpLnB1c2gocGFyc2VJbnQoZS5zdWJzdHIoaiwyKSwxNikpO3JldHVybiBpfSxDZS5SRUFMPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5SRUFMKGEpLmxlbmd0aH0sQmUuTkFNRT1CZS5DSEFSQVJSQVksQ2UuTkFNRT1DZS5DSEFSQVJSQVksQmUuU1RSSU5HPUJlLkNIQVJBUlJBWSxDZS5TVFJJTkc9Q2UuQ0hBUkFSUkFZLEFlLlVURjg9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPWMsZj0wO2Y8ZTtmKyssYis9MSlkW2ZdPWEuZ2V0VWludDgoYik7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxkKX0sQWUuVVRGMTY9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPWMvMixmPTA7ZjxlO2YrKyxiKz0yKWRbZl09YS5nZXRVaW50MTYoYik7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxkKX0sQmUuVVRGMTY9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrPTEpe3ZhciBkPWEuY2hhckNvZGVBdChjKTtiW2IubGVuZ3RoXT1kPj44JjI1NSxiW2IubGVuZ3RoXT0yNTUmZH1yZXR1cm4gYn0sQ2UuVVRGMTY9ZnVuY3Rpb24oYSl7cmV0dXJuIDIqYS5sZW5ndGh9O3ZhciBEZT17XCJ4LW1hYy1jcm9hdGlhblwiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuxaDihKLCtMKo4omgxb3DmOKInsKx4omk4oml4oiGwrXiiILiiJHiiI/FoeKIq8KqwrrOqcW+w7jCv8KhwqziiJrGkuKJiMSGwqvEjOKApsKgw4DDg8OVxZLFk8SQ4oCU4oCc4oCd4oCY4oCZw7fil4rvo7/CqeKBhOKCrOKAueKAusOGwrvigJPCt+KAmuKAnuKAsMOCxIfDgcSNw4jDjcOOw4/DjMOTw5TEkcOSw5rDm8OZxLHLhsucwq/PgMOLy5rCuMOKw6bLh1wiLFwieC1tYWMtY3lyaWxsaWNcIjpcItCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/igKDCsNKQwqPCp+KAosK20IbCrsKp4oSi0ILRkuKJoNCD0ZPiiJ7CseKJpOKJpdGWwrXSkdCI0ITRlNCH0ZfQidGZ0IrRmtGY0IXCrOKImsaS4omI4oiGwqvCu+KApsKg0IvRm9CM0ZzRleKAk+KAlOKAnOKAneKAmOKAmcO34oCe0I7RntCP0Z/ihJbQgdGR0Y/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjlwiLFwieC1tYWMtZ2FlbGljXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4biCwrHiiaTiiaXhuIPEisSL4biK4biL4bie4bifxKDEoeG5gMOmw7jhuYHhuZbhuZfJvMaSxb/huaDCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZ4bmh4bqbw7/FuOG5quKCrOKAueKAusW2xbfhuavCt+G7suG7s+KBisOCw4rDgcOLw4jDjcOOw4/DjMOTw5TimaPDksOaw5vDmcSxw53DvcW0xbXhuoThuoXhuoDhuoHhuoLhuoNcIixcIngtbWFjLWdyZWVrXCI6XCLDhMK5wrLDicKzw5bDnM6Fw6DDosOkzoTCqMOnw6nDqMOqw6vCo+KEosOuw6/igKLCveKAsMO0w7bCpuKCrMO5w7vDvOKAoM6TzpTOmM6bzp7OoMOfwq7Cqc6jzqrCp+KJoMKwwrfOkcKx4omk4omlwqXOks6VzpbOl86ZzprOnM6mzqvOqM6pzqzOncKszp/OoeKJiM6kwqvCu+KApsKgzqXOp86GzojFk+KAk+KAleKAnOKAneKAmOKAmcO3zonOis6Mzo7Orc6uzq/PjM6Pz43Osc6yz4jOtM61z4bOs863zrnOvs66zrvOvM69zr/PgM+Oz4HPg8+EzrjPic+Cz4fPhc62z4rPi86QzrDCrVwiLFwieC1tYWMtaWNlbGFuZGljXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O8w53CsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrOqcOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTigqzDkMOww57DvsO9wrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU76O/w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCIsXCJ4LW1hYy1pbnVpdFwiOlwi4ZCD4ZCE4ZCF4ZCG4ZCK4ZCL4ZCx4ZCy4ZCz4ZC04ZC44ZC54ZGJ4ZGO4ZGP4ZGQ4ZGR4ZGV4ZGW4ZGm4ZGt4ZGu4ZGv4ZGw4ZGy4ZGz4ZKD4ZKL4ZKM4ZKN4ZKO4ZKQ4ZKRwrDhkqHhkqXhkqbigKLCtuGSp8KuwqnihKLhkqjhkqrhkqvhkrvhk4Lhk4Phk4Thk4Xhk4fhk4jhk5Dhk6/hk7Dhk7Hhk7Lhk7Thk7XhlIXhk5Xhk5bhk5fhk5jhk5rhk5vhk6rhlKjhlKnhlKrhlKvhlK3igKbCoOGUruGUvuGVleGVluGVl+KAk+KAlOKAnOKAneKAmOKAmeGVmOGVmeGVmuGVneGVhuGVh+GViOGVieGVi+GVjOGVkOGVv+GWgOGWgeGWguGWg+GWhOGWheGWj+GWkOGWkeGWkuGWk+GWlOGWleGZseGZsuGZs+GZtOGZteGZtuGWluGWoOGWoeGWouGWo+GWpOGWpeGWpuGVvMWBxYJcIixcIngtbWFjLWNlXCI6XCLDhMSAxIHDicSEw5bDnMOhxIXEjMOkxI3EhsSHw6nFucW6xI7DrcSPxJLEk8SWw7PEl8O0w7bDtcO6xJrEm8O84oCgwrDEmMKjwqfigKLCtsOfwq7CqeKEosSZwqjiiaDEo8SuxK/EquKJpOKJpcSrxLbiiILiiJHFgsS7xLzEvcS+xLnEusWFxYbFg8Ks4oiaxYTFh+KIhsKrwrvigKbCoMWIxZDDlcWRxYzigJPigJTigJzigJ3igJjigJnDt+KXisWNxZTFlcWY4oC54oC6xZnFlsWXxaDigJrigJ7FocWaxZvDgcWkxaXDjcW9xb7FqsOTw5TFq8Wuw5rFr8WwxbHFssWzw53DvcS3xbvFgcW8xKLLh1wiLG1hY2ludG9zaDpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrOqcOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTigqzigLnigLrvrIHvrILigKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvo7/DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIixcIngtbWFjLXJvbWFuaWFuXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDEgsiY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK6zqnEg8iZwr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGE4oKs4oC54oC6yJrIm+KAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+jv8OSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiLFwieC1tYWMtdHVya2lzaFwiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCus6pw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuMSexJ/EsMSxxZ7Fn+KAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+jv8OSw5rDm8OZ76Kgy4bLnMKvy5jLmcuawrjLncuby4dcIn07QWUuTUFDU1RSSU5HPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPURlW2RdO2lmKHZvaWQgMCE9PWUpe2Zvcih2YXIgZj1cIlwiLGc9MDtnPGM7ZysrKXt2YXIgaD1hLmdldFVpbnQ4KGIrZyk7Zis9aDw9MTI3P1N0cmluZy5mcm9tQ2hhckNvZGUoaCk6ZVsxMjcmaF19cmV0dXJuIGZ9fTt2YXIgRWUsRmU9XCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha01hcCYmbmV3IFdlYWtNYXAsR2U9ZnVuY3Rpb24oYSl7aWYoIUVlKXtFZT17fTtmb3IodmFyIGIgaW4gRGUpRWVbYl09bmV3IFN0cmluZyhiKX12YXIgYz1FZVthXTtpZih2b2lkIDAhPT1jKXtpZihGZSl7dmFyIGQ9RmUuZ2V0KGMpO2lmKHZvaWQgMCE9PWQpcmV0dXJuIGR9dmFyIGU9RGVbYV07aWYodm9pZCAwIT09ZSl7Zm9yKHZhciBmPXt9LGc9MDtnPGUubGVuZ3RoO2crKylmW2UuY2hhckNvZGVBdChnKV09ZysxMjg7cmV0dXJuIEZlJiZGZS5zZXQoYyxmKSxmfX19O0JlLk1BQ1NUUklORz1mdW5jdGlvbihhLGIpe3ZhciBjPUdlKGIpO2lmKHZvaWQgMCE9PWMpe2Zvcih2YXIgZD1bXSxlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBmPWEuY2hhckNvZGVBdChlKTtpZihmPj0xMjgmJnZvaWQgMD09PShmPWNbZl0pKXJldHVybjtkW2VdPWZ9cmV0dXJuIGR9fSxDZS5NQUNTVFJJTkc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1CZS5NQUNTVFJJTkcoYSxiKTtyZXR1cm4gdm9pZCAwIT09Yz9jLmxlbmd0aDowfSxCZS5WQVJERUxUQVM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz1bXTtiPGEubGVuZ3RoOyl7dmFyIGQ9YVtiXTtiPTA9PT1kP3coYSxiLGMpOmQ+PS0xMjgmJmQ8PTEyNz94KGEsYixjKTp5KGEsYixjKX1yZXR1cm4gY30sQmUuSU5ERVg9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTEsYz1bYl0sZD1bXSxlPTA7ZTxhLmxlbmd0aDtlKz0xKXt2YXIgZj1CZS5PQkpFQ1QoYVtlXSk7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZCxmKSxiKz1mLmxlbmd0aCxjLnB1c2goYil9aWYoMD09PWQubGVuZ3RoKXJldHVyblswLDBdO2Zvcih2YXIgZz1bXSxoPTErTWF0aC5mbG9vcihNYXRoLmxvZyhiKS9NYXRoLmxvZygyKSkvOHwwLGk9W3ZvaWQgMCxCZS5CWVRFLEJlLlVTSE9SVCxCZS5VSU5UMjQsQmUuVUxPTkddW2hdLGo9MDtqPGMubGVuZ3RoO2orPTEpe3ZhciBrPWkoY1tqXSk7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZyxrKX1yZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdChCZS5DYXJkMTYoYS5sZW5ndGgpLEJlLk9mZlNpemUoaCksZyxkKX0sQ2UuSU5ERVg9ZnVuY3Rpb24oYSl7cmV0dXJuIEJlLklOREVYKGEpLmxlbmd0aH0sQmUuRElDVD1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz1PYmplY3Qua2V5cyhhKSxkPWMubGVuZ3RoLGU9MDtlPGQ7ZSs9MSl7dmFyIGY9cGFyc2VJbnQoY1tlXSwwKSxnPWFbZl07Yj1iLmNvbmNhdChCZS5PUEVSQU5EKGcudmFsdWUsZy50eXBlKSksYj1iLmNvbmNhdChCZS5PUEVSQVRPUihmKSl9cmV0dXJuIGJ9LENlLkRJQ1Q9ZnVuY3Rpb24oYSl7cmV0dXJuIEJlLkRJQ1QoYSkubGVuZ3RofSxCZS5PUEVSQVRPUj1mdW5jdGlvbihhKXtyZXR1cm4gYTwxMjAwP1thXTpbMTIsYS0xMjAwXX0sQmUuT1BFUkFORD1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2lmKEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKz0xKXhlLmFyZ3VtZW50KGEubGVuZ3RoPT09Yi5sZW5ndGgsXCJOb3QgZW5vdWdoIGFyZ3VtZW50cyBnaXZlbiBmb3IgdHlwZVwiK2IpLGM9Yy5jb25jYXQoQmUuT1BFUkFORChhW2RdLGJbZF0pKTtlbHNlIGlmKFwiU0lEXCI9PT1iKWM9Yy5jb25jYXQoQmUuTlVNQkVSKGEpKTtlbHNlIGlmKFwib2Zmc2V0XCI9PT1iKWM9Yy5jb25jYXQoQmUuTlVNQkVSMzIoYSkpO2Vsc2UgaWYoXCJudW1iZXJcIj09PWIpYz1jLmNvbmNhdChCZS5OVU1CRVIoYSkpO2Vsc2V7aWYoXCJyZWFsXCIhPT1iKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3BlcmFuZCB0eXBlIFwiK2IpO2M9Yy5jb25jYXQoQmUuUkVBTChhKSl9cmV0dXJuIGN9LEJlLk9QPUJlLkJZVEUsQ2UuT1A9Q2UuQllURTt2YXIgSGU9XCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha01hcCYmbmV3IFdlYWtNYXA7QmUuQ0hBUlNUUklORz1mdW5jdGlvbihhKXtpZihIZSl7dmFyIGI9SGUuZ2V0KGEpO2lmKHZvaWQgMCE9PWIpcmV0dXJuIGJ9Zm9yKHZhciBjPVtdLGQ9YS5sZW5ndGgsZT0wO2U8ZDtlKz0xKXt2YXIgZj1hW2VdO2M9Yy5jb25jYXQoQmVbZi50eXBlXShmLnZhbHVlKSl9cmV0dXJuIEhlJiZIZS5zZXQoYSxjKSxjfSxDZS5DSEFSU1RSSU5HPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5DSEFSU1RSSU5HKGEpLmxlbmd0aH0sQmUuT0JKRUNUPWZ1bmN0aW9uKGEpe3ZhciBiPUJlW2EudHlwZV07cmV0dXJuIHhlLmFyZ3VtZW50KHZvaWQgMCE9PWIsXCJObyBlbmNvZGluZyBmdW5jdGlvbiBmb3IgdHlwZSBcIithLnR5cGUpLGIoYS52YWx1ZSl9LENlLk9CSkVDVD1mdW5jdGlvbihhKXt2YXIgYj1DZVthLnR5cGVdO3JldHVybiB4ZS5hcmd1bWVudCh2b2lkIDAhPT1iLFwiTm8gc2l6ZU9mIGZ1bmN0aW9uIGZvciB0eXBlIFwiK2EudHlwZSksYihhLnZhbHVlKX0sQmUuVEFCTEU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9YS5maWVsZHMubGVuZ3RoLGQ9W10sZT1bXSxmPTA7ZjxjO2YrPTEpe3ZhciBnPWEuZmllbGRzW2ZdLGg9QmVbZy50eXBlXTt4ZS5hcmd1bWVudCh2b2lkIDAhPT1oLFwiTm8gZW5jb2RpbmcgZnVuY3Rpb24gZm9yIGZpZWxkIHR5cGUgXCIrZy50eXBlK1wiIChcIitnLm5hbWUrXCIpXCIpO3ZhciBpPWFbZy5uYW1lXTt2b2lkIDA9PT1pJiYoaT1nLnZhbHVlKTt2YXIgaj1oKGkpO1wiVEFCTEVcIj09PWcudHlwZT8oZS5wdXNoKGIubGVuZ3RoKSxiPWIuY29uY2F0KFswLDBdKSxkLnB1c2goaikpOmI9Yi5jb25jYXQoail9Zm9yKHZhciBrPTA7azxkLmxlbmd0aDtrKz0xKXt2YXIgbD1lW2tdLG09Yi5sZW5ndGg7eGUuYXJndW1lbnQobTw2NTUzNixcIlRhYmxlIFwiK2EudGFibGVOYW1lK1wiIHRvbyBiaWcuXCIpLGJbbF09bT4+OCxiW2wrMV09MjU1Jm0sYj1iLmNvbmNhdChkW2tdKX1yZXR1cm4gYn0sQ2UuVEFCTEU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz1hLmZpZWxkcy5sZW5ndGgsZD0wO2Q8YztkKz0xKXt2YXIgZT1hLmZpZWxkc1tkXSxmPUNlW2UudHlwZV07eGUuYXJndW1lbnQodm9pZCAwIT09ZixcIk5vIHNpemVPZiBmdW5jdGlvbiBmb3IgZmllbGQgdHlwZSBcIitlLnR5cGUrXCIgKFwiK2UubmFtZStcIilcIik7dmFyIGc9YVtlLm5hbWVdO3ZvaWQgMD09PWcmJihnPWUudmFsdWUpLGIrPWYoZyksXCJUQUJMRVwiPT09ZS50eXBlJiYoYis9Mil9cmV0dXJuIGJ9LEJlLlJFQ09SRD1CZS5UQUJMRSxDZS5SRUNPUkQ9Q2UuVEFCTEUsQmUuTElURVJBTD1mdW5jdGlvbihhKXtyZXR1cm4gYX0sQ2UuTElURVJBTD1mdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LHoucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbigpe3JldHVybiBCZS5UQUJMRSh0aGlzKX0sei5wcm90b3R5cGUuc2l6ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIENlLlRBQkxFKHRoaXMpfSxELnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHoucHJvdG90eXBlKSxELnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ELEUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoei5wcm90b3R5cGUpLEUucHJvdG90eXBlLmNvbnN0cnVjdG9yPUUsRi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6LnByb3RvdHlwZSksRi5wcm90b3R5cGUuY29uc3RydWN0b3I9RixHLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHoucHJvdG90eXBlKSxHLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HO3ZhciBJZT17VGFibGU6eixSZWNvcmQ6eixDb3ZlcmFnZTpELFNjcmlwdExpc3Q6RSxGZWF0dXJlTGlzdDpGLExvb2t1cExpc3Q6Ryx1c2hvcnRMaXN0OkEsdGFibGVMaXN0OkIscmVjb3JkTGlzdDpDfSxKZT17Ynl0ZToxLHVTaG9ydDoyLHNob3J0OjIsdUxvbmc6NCxmaXhlZDo0LGxvbmdEYXRlVGltZTo4LHRhZzo0fTtRLnByb3RvdHlwZS5wYXJzZUJ5dGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0VWludDgodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTEsYX0sUS5wcm90b3R5cGUucGFyc2VDaGFyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldEludDgodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTEsYX0sUS5wcm90b3R5cGUucGFyc2VDYXJkOD1RLnByb3RvdHlwZS5wYXJzZUJ5dGUsUS5wcm90b3R5cGUucGFyc2VVU2hvcnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0VWludDE2KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yLGF9LFEucHJvdG90eXBlLnBhcnNlQ2FyZDE2PVEucHJvdG90eXBlLnBhcnNlVVNob3J0LFEucHJvdG90eXBlLnBhcnNlU0lEPVEucHJvdG90eXBlLnBhcnNlVVNob3J0LFEucHJvdG90eXBlLnBhcnNlT2Zmc2V0MTY9US5wcm90b3R5cGUucGFyc2VVU2hvcnQsUS5wcm90b3R5cGUucGFyc2VTaG9ydD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YS5nZXRJbnQxNih0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MixhfSxRLnByb3RvdHlwZS5wYXJzZUYyRG90MTQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0SW50MTYodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCkvMTYzODQ7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIsYX0sUS5wcm90b3R5cGUucGFyc2VVTG9uZz1mdW5jdGlvbigpe3ZhciBhPUsodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz00LGF9LFEucHJvdG90eXBlLnBhcnNlT2Zmc2V0MzI9US5wcm90b3R5cGUucGFyc2VVTG9uZyxRLnByb3RvdHlwZS5wYXJzZUZpeGVkPWZ1bmN0aW9uKCl7dmFyIGE9TCh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTQsYX0sUS5wcm90b3R5cGUucGFyc2VTdHJpbmc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kYXRhLGM9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxkPVwiXCI7dGhpcy5yZWxhdGl2ZU9mZnNldCs9YTtmb3IodmFyIGU9MDtlPGE7ZSsrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYi5nZXRVaW50OChjK2UpKTtyZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VUYWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVN0cmluZyg0KX0sUS5wcm90b3R5cGUucGFyc2VMb25nRGF0ZVRpbWU9ZnVuY3Rpb24oKXt2YXIgYT1LKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KzQpO3JldHVybiBhLT0yMDgyODQ0ODAwLHRoaXMucmVsYXRpdmVPZmZzZXQrPTgsYX0sUS5wcm90b3R5cGUucGFyc2VWZXJzaW9uPWZ1bmN0aW9uKGEpe3ZhciBiPUkodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpLGM9SSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCsyKTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9NCx2b2lkIDA9PT1hJiYoYT00MDk2KSxiK2MvYS8xMH0sUS5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTEpLHRoaXMucmVsYXRpdmVPZmZzZXQrPUplW2FdKmJ9LFEucHJvdG90eXBlLnBhcnNlVUxvbmdMaXN0PWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMucGFyc2VVTG9uZygpKTtmb3IodmFyIGI9bmV3IEFycmF5KGEpLGM9dGhpcy5kYXRhLGQ9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxlPTA7ZTxhO2UrKyliW2VdPWMuZ2V0VWludDMyKGQpLGQrPTQ7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTQqYSxifSxRLnByb3RvdHlwZS5wYXJzZU9mZnNldDE2TGlzdD1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydExpc3Q9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9dGhpcy5wYXJzZVVTaG9ydCgpKTtmb3IodmFyIGI9bmV3IEFycmF5KGEpLGM9dGhpcy5kYXRhLGQ9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxlPTA7ZTxhO2UrKyliW2VdPWMuZ2V0VWludDE2KGQpLGQrPTI7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIqYSxifSxRLnByb3RvdHlwZS5wYXJzZVNob3J0TGlzdD1mdW5jdGlvbihhKXtmb3IodmFyIGI9bmV3IEFycmF5KGEpLGM9dGhpcy5kYXRhLGQ9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxlPTA7ZTxhO2UrKyliW2VdPWMuZ2V0SW50MTYoZCksZCs9MjtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MiphLGJ9LFEucHJvdG90eXBlLnBhcnNlQnl0ZUxpc3Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldFVpbnQ4KGQrKyk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPWEsYn0sUS5wcm90b3R5cGUucGFyc2VMaXN0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztifHwoYj1hLGE9dGhpcy5wYXJzZVVTaG9ydCgpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9MDtlPGE7ZSsrKWRbZV09Yi5jYWxsKGMpO3JldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZUxpc3QzMj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Ynx8KGI9YSxhPXRoaXMucGFyc2VVTG9uZygpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9MDtlPGE7ZSsrKWRbZV09Yi5jYWxsKGMpO3JldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVJlY29yZExpc3Q9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2J8fChiPWEsYT10aGlzLnBhcnNlVVNob3J0KCkpO2Zvcih2YXIgZD1uZXcgQXJyYXkoYSksZT1PYmplY3Qua2V5cyhiKSxmPTA7ZjxhO2YrKyl7Zm9yKHZhciBnPXt9LGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGk9ZVtoXSxqPWJbaV07Z1tpXT1qLmNhbGwoYyl9ZFtmXT1nfXJldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVJlY29yZExpc3QzMj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Ynx8KGI9YSxhPXRoaXMucGFyc2VVTG9uZygpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9T2JqZWN0LmtleXMoYiksZj0wO2Y8YTtmKyspe2Zvcih2YXIgZz17fSxoPTA7aDxlLmxlbmd0aDtoKyspe3ZhciBpPWVbaF0saj1iW2ldO2dbaV09ai5jYWxsKGMpfWRbZl09Z31yZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VTdHJ1Y3Q9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhKXJldHVybiBhLmNhbGwodGhpcyk7Zm9yKHZhciBjPU9iamVjdC5rZXlzKGEpLGQ9e30sZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZj1jW2VdLGc9YVtmXTtkW2ZdPWcuY2FsbChiKX1yZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VWYWx1ZVJlY29yZD1mdW5jdGlvbihhKXtpZih2b2lkIDA9PT1hJiYoYT10aGlzLnBhcnNlVVNob3J0KCkpLDAhPT1hKXt2YXIgYj17fTtyZXR1cm4gMSZhJiYoYi54UGxhY2VtZW50PXRoaXMucGFyc2VTaG9ydCgpKSwyJmEmJihiLnlQbGFjZW1lbnQ9dGhpcy5wYXJzZVNob3J0KCkpLDQmYSYmKGIueEFkdmFuY2U9dGhpcy5wYXJzZVNob3J0KCkpLDgmYSYmKGIueUFkdmFuY2U9dGhpcy5wYXJzZVNob3J0KCkpLDE2JmEmJihiLnhQbGFEZXZpY2U9dm9pZCAwLHRoaXMucGFyc2VTaG9ydCgpKSwzMiZhJiYoYi55UGxhRGV2aWNlPXZvaWQgMCx0aGlzLnBhcnNlU2hvcnQoKSksNjQmYSYmKGIueEFkdkRldmljZT12b2lkIDAsdGhpcy5wYXJzZVNob3J0KCkpLDEyOCZhJiYoYi55QWR2RGV2aWNlPXZvaWQgMCx0aGlzLnBhcnNlU2hvcnQoKSksYn19LFEucHJvdG90eXBlLnBhcnNlVmFsdWVSZWNvcmRMaXN0PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMsYj10aGlzLnBhcnNlVVNob3J0KCksYz10aGlzLnBhcnNlVVNob3J0KCksZD1uZXcgQXJyYXkoYyksZT0wO2U8YztlKyspZFtlXT1hLnBhcnNlVmFsdWVSZWNvcmQoYik7cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlUG9pbnRlcj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnBhcnNlT2Zmc2V0MTYoKTtpZihiPjApcmV0dXJuIG5ldyBRKHRoaXMuZGF0YSx0aGlzLm9mZnNldCtiKS5wYXJzZVN0cnVjdChhKX0sUS5wcm90b3R5cGUucGFyc2VQb2ludGVyMzI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wYXJzZU9mZnNldDMyKCk7aWYoYj4wKXJldHVybiBuZXcgUSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrYikucGFyc2VTdHJ1Y3QoYSl9LFEucHJvdG90eXBlLnBhcnNlTGlzdE9mTGlzdHM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMsYz10aGlzLnBhcnNlT2Zmc2V0MTZMaXN0KCksZD1jLmxlbmd0aCxlPXRoaXMucmVsYXRpdmVPZmZzZXQsZj1uZXcgQXJyYXkoZCksZz0wO2c8ZDtnKyspe3ZhciBoPWNbZ107aWYoMCE9PWgpaWYoYi5yZWxhdGl2ZU9mZnNldD1oLGEpe2Zvcih2YXIgaT1iLnBhcnNlT2Zmc2V0MTZMaXN0KCksaj1uZXcgQXJyYXkoaS5sZW5ndGgpLGs9MDtrPGkubGVuZ3RoO2srKyliLnJlbGF0aXZlT2Zmc2V0PWgraVtrXSxqW2tdPWEuY2FsbChiKTtmW2ddPWp9ZWxzZSBmW2ddPWIucGFyc2VVU2hvcnRMaXN0KCk7ZWxzZSBmW2ddPXZvaWQgMH1yZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldD1lLGZ9LFEucHJvdG90eXBlLnBhcnNlQ292ZXJhZ2U9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxjPXRoaXMucGFyc2VVU2hvcnQoKSxkPXRoaXMucGFyc2VVU2hvcnQoKTtpZigxPT09YylyZXR1cm57Zm9ybWF0OjEsZ2x5cGhzOnRoaXMucGFyc2VVU2hvcnRMaXN0KGQpfTtpZigyPT09Yyl7Zm9yKHZhciBlPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyllW2ZdPXtzdGFydDphLnBhcnNlVVNob3J0KCksZW5kOmEucGFyc2VVU2hvcnQoKSxpbmRleDphLnBhcnNlVVNob3J0KCl9O3JldHVybntmb3JtYXQ6MixyYW5nZXM6ZX19dGhyb3cgbmV3IEVycm9yKFwiMHhcIitiLnRvU3RyaW5nKDE2KStcIjogQ292ZXJhZ2UgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKX0sUS5wcm90b3R5cGUucGFyc2VDbGFzc0RlZj1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWIpcmV0dXJue2Zvcm1hdDoxLHN0YXJ0R2x5cGg6dGhpcy5wYXJzZVVTaG9ydCgpLGNsYXNzZXM6dGhpcy5wYXJzZVVTaG9ydExpc3QoKX07aWYoMj09PWIpcmV0dXJue2Zvcm1hdDoyLHJhbmdlczp0aGlzLnBhcnNlUmVjb3JkTGlzdCh7c3RhcnQ6US51U2hvcnQsZW5kOlEudVNob3J0LGNsYXNzSWQ6US51U2hvcnR9KX07dGhyb3cgbmV3IEVycm9yKFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogQ2xhc3NEZWYgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKX0sUS5saXN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VMaXN0KGEsYil9fSxRLmxpc3QzMj1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlTGlzdDMyKGEsYil9fSxRLnJlY29yZExpc3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVJlY29yZExpc3QoYSxiKX19LFEucmVjb3JkTGlzdDMyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VSZWNvcmRMaXN0MzIoYSxiKX19LFEucG9pbnRlcj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoYSl9fSxRLnBvaW50ZXIzMj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIzMihhKX19LFEudGFnPVEucHJvdG90eXBlLnBhcnNlVGFnLFEuYnl0ZT1RLnByb3RvdHlwZS5wYXJzZUJ5dGUsUS51U2hvcnQ9US5vZmZzZXQxNj1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydCxRLnVTaG9ydExpc3Q9US5wcm90b3R5cGUucGFyc2VVU2hvcnRMaXN0LFEudUxvbmc9US5vZmZzZXQzMj1RLnByb3RvdHlwZS5wYXJzZVVMb25nLFEudUxvbmdMaXN0PVEucHJvdG90eXBlLnBhcnNlVUxvbmdMaXN0LFEuc3RydWN0PVEucHJvdG90eXBlLnBhcnNlU3RydWN0LFEuY292ZXJhZ2U9US5wcm90b3R5cGUucGFyc2VDb3ZlcmFnZSxRLmNsYXNzRGVmPVEucHJvdG90eXBlLnBhcnNlQ2xhc3NEZWY7dmFyIEtlPXtyZXNlcnZlZDpRLnVTaG9ydCxyZXFGZWF0dXJlSW5kZXg6US51U2hvcnQsZmVhdHVyZUluZGV4ZXM6US51U2hvcnRMaXN0fTtRLnByb3RvdHlwZS5wYXJzZVNjcmlwdExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoUS5yZWNvcmRMaXN0KHt0YWc6US50YWcsc2NyaXB0OlEucG9pbnRlcih7ZGVmYXVsdExhbmdTeXM6US5wb2ludGVyKEtlKSxsYW5nU3lzUmVjb3JkczpRLnJlY29yZExpc3Qoe3RhZzpRLnRhZyxsYW5nU3lzOlEucG9pbnRlcihLZSl9KX0pfSkpfHxbXX0sUS5wcm90b3R5cGUucGFyc2VGZWF0dXJlTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcihRLnJlY29yZExpc3Qoe3RhZzpRLnRhZyxmZWF0dXJlOlEucG9pbnRlcih7ZmVhdHVyZVBhcmFtczpRLm9mZnNldDE2LGxvb2t1cExpc3RJbmRleGVzOlEudVNob3J0TGlzdH0pfSkpfHxbXX0sUS5wcm90b3R5cGUucGFyc2VMb29rdXBMaXN0PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcihRLmxpc3QoUS5wb2ludGVyKGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wYXJzZVVTaG9ydCgpO3hlLmFyZ3VtZW50KDE8PWImJmI8PTksXCJHUE9TL0dTVUIgbG9va3VwIHR5cGUgXCIrYitcIiB1bmtub3duLlwiKTt2YXIgYz10aGlzLnBhcnNlVVNob3J0KCksZD0xNiZjO3JldHVybntsb29rdXBUeXBlOmIsbG9va3VwRmxhZzpjLHN1YnRhYmxlczp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoYVtiXSkpLG1hcmtGaWx0ZXJpbmdTZXQ6ZD90aGlzLnBhcnNlVVNob3J0KCk6dm9pZCAwfX0pKSl8fFtdfSxRLnByb3RvdHlwZS5wYXJzZUZlYXR1cmVWYXJpYXRpb25zTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcjMyKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpLGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSYmYjwxLFwiR1BPUy9HU1VCIGZlYXR1cmUgdmFyaWF0aW9ucyB0YWJsZSB1bmtub3duLlwiKSx0aGlzLnBhcnNlUmVjb3JkTGlzdDMyKHtjb25kaXRpb25TZXRPZmZzZXQ6US5vZmZzZXQzMixmZWF0dXJlVGFibGVTdWJzdGl0dXRpb25PZmZzZXQ6US5vZmZzZXQzMn0pfSl8fFtdfTt2YXIgTGU9e2dldEJ5dGU6SCxnZXRDYXJkODpILGdldFVTaG9ydDpJLGdldENhcmQxNjpJLGdldFNob3J0OkosZ2V0VUxvbmc6SyxnZXRGaXhlZDpMLGdldFRhZzpNLGdldE9mZnNldDpOLGdldEJ5dGVzOk8sYnl0ZXNUb1N0cmluZzpQLFBhcnNlcjpRfSxNZT17cGFyc2U6VCxtYWtlOld9LE5lPVtcIi5ub3RkZWZcIixcInNwYWNlXCIsXCJleGNsYW1cIixcInF1b3RlZGJsXCIsXCJudW1iZXJzaWduXCIsXCJkb2xsYXJcIixcInBlcmNlbnRcIixcImFtcGVyc2FuZFwiLFwicXVvdGVyaWdodFwiLFwicGFyZW5sZWZ0XCIsXCJwYXJlbnJpZ2h0XCIsXCJhc3Rlcmlza1wiLFwicGx1c1wiLFwiY29tbWFcIixcImh5cGhlblwiLFwicGVyaW9kXCIsXCJzbGFzaFwiLFwiemVyb1wiLFwib25lXCIsXCJ0d29cIixcInRocmVlXCIsXCJmb3VyXCIsXCJmaXZlXCIsXCJzaXhcIixcInNldmVuXCIsXCJlaWdodFwiLFwibmluZVwiLFwiY29sb25cIixcInNlbWljb2xvblwiLFwibGVzc1wiLFwiZXF1YWxcIixcImdyZWF0ZXJcIixcInF1ZXN0aW9uXCIsXCJhdFwiLFwiQVwiLFwiQlwiLFwiQ1wiLFwiRFwiLFwiRVwiLFwiRlwiLFwiR1wiLFwiSFwiLFwiSVwiLFwiSlwiLFwiS1wiLFwiTFwiLFwiTVwiLFwiTlwiLFwiT1wiLFwiUFwiLFwiUVwiLFwiUlwiLFwiU1wiLFwiVFwiLFwiVVwiLFwiVlwiLFwiV1wiLFwiWFwiLFwiWVwiLFwiWlwiLFwiYnJhY2tldGxlZnRcIixcImJhY2tzbGFzaFwiLFwiYnJhY2tldHJpZ2h0XCIsXCJhc2NpaWNpcmN1bVwiLFwidW5kZXJzY29yZVwiLFwicXVvdGVsZWZ0XCIsXCJhXCIsXCJiXCIsXCJjXCIsXCJkXCIsXCJlXCIsXCJmXCIsXCJnXCIsXCJoXCIsXCJpXCIsXCJqXCIsXCJrXCIsXCJsXCIsXCJtXCIsXCJuXCIsXCJvXCIsXCJwXCIsXCJxXCIsXCJyXCIsXCJzXCIsXCJ0XCIsXCJ1XCIsXCJ2XCIsXCJ3XCIsXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJicmFjZWxlZnRcIixcImJhclwiLFwiYnJhY2VyaWdodFwiLFwiYXNjaWl0aWxkZVwiLFwiZXhjbGFtZG93blwiLFwiY2VudFwiLFwic3RlcmxpbmdcIixcImZyYWN0aW9uXCIsXCJ5ZW5cIixcImZsb3JpblwiLFwic2VjdGlvblwiLFwiY3VycmVuY3lcIixcInF1b3Rlc2luZ2xlXCIsXCJxdW90ZWRibGxlZnRcIixcImd1aWxsZW1vdGxlZnRcIixcImd1aWxzaW5nbGxlZnRcIixcImd1aWxzaW5nbHJpZ2h0XCIsXCJmaVwiLFwiZmxcIixcImVuZGFzaFwiLFwiZGFnZ2VyXCIsXCJkYWdnZXJkYmxcIixcInBlcmlvZGNlbnRlcmVkXCIsXCJwYXJhZ3JhcGhcIixcImJ1bGxldFwiLFwicXVvdGVzaW5nbGJhc2VcIixcInF1b3RlZGJsYmFzZVwiLFwicXVvdGVkYmxyaWdodFwiLFwiZ3VpbGxlbW90cmlnaHRcIixcImVsbGlwc2lzXCIsXCJwZXJ0aG91c2FuZFwiLFwicXVlc3Rpb25kb3duXCIsXCJncmF2ZVwiLFwiYWN1dGVcIixcImNpcmN1bWZsZXhcIixcInRpbGRlXCIsXCJtYWNyb25cIixcImJyZXZlXCIsXCJkb3RhY2NlbnRcIixcImRpZXJlc2lzXCIsXCJyaW5nXCIsXCJjZWRpbGxhXCIsXCJodW5nYXJ1bWxhdXRcIixcIm9nb25la1wiLFwiY2Fyb25cIixcImVtZGFzaFwiLFwiQUVcIixcIm9yZGZlbWluaW5lXCIsXCJMc2xhc2hcIixcIk9zbGFzaFwiLFwiT0VcIixcIm9yZG1hc2N1bGluZVwiLFwiYWVcIixcImRvdGxlc3NpXCIsXCJsc2xhc2hcIixcIm9zbGFzaFwiLFwib2VcIixcImdlcm1hbmRibHNcIixcIm9uZXN1cGVyaW9yXCIsXCJsb2dpY2Fsbm90XCIsXCJtdVwiLFwidHJhZGVtYXJrXCIsXCJFdGhcIixcIm9uZWhhbGZcIixcInBsdXNtaW51c1wiLFwiVGhvcm5cIixcIm9uZXF1YXJ0ZXJcIixcImRpdmlkZVwiLFwiYnJva2VuYmFyXCIsXCJkZWdyZWVcIixcInRob3JuXCIsXCJ0aHJlZXF1YXJ0ZXJzXCIsXCJ0d29zdXBlcmlvclwiLFwicmVnaXN0ZXJlZFwiLFwibWludXNcIixcImV0aFwiLFwibXVsdGlwbHlcIixcInRocmVlc3VwZXJpb3JcIixcImNvcHlyaWdodFwiLFwiQWFjdXRlXCIsXCJBY2lyY3VtZmxleFwiLFwiQWRpZXJlc2lzXCIsXCJBZ3JhdmVcIixcIkFyaW5nXCIsXCJBdGlsZGVcIixcIkNjZWRpbGxhXCIsXCJFYWN1dGVcIixcIkVjaXJjdW1mbGV4XCIsXCJFZGllcmVzaXNcIixcIkVncmF2ZVwiLFwiSWFjdXRlXCIsXCJJY2lyY3VtZmxleFwiLFwiSWRpZXJlc2lzXCIsXCJJZ3JhdmVcIixcIk50aWxkZVwiLFwiT2FjdXRlXCIsXCJPY2lyY3VtZmxleFwiLFwiT2RpZXJlc2lzXCIsXCJPZ3JhdmVcIixcIk90aWxkZVwiLFwiU2Nhcm9uXCIsXCJVYWN1dGVcIixcIlVjaXJjdW1mbGV4XCIsXCJVZGllcmVzaXNcIixcIlVncmF2ZVwiLFwiWWFjdXRlXCIsXCJZZGllcmVzaXNcIixcIlpjYXJvblwiLFwiYWFjdXRlXCIsXCJhY2lyY3VtZmxleFwiLFwiYWRpZXJlc2lzXCIsXCJhZ3JhdmVcIixcImFyaW5nXCIsXCJhdGlsZGVcIixcImNjZWRpbGxhXCIsXCJlYWN1dGVcIixcImVjaXJjdW1mbGV4XCIsXCJlZGllcmVzaXNcIixcImVncmF2ZVwiLFwiaWFjdXRlXCIsXCJpY2lyY3VtZmxleFwiLFwiaWRpZXJlc2lzXCIsXCJpZ3JhdmVcIixcIm50aWxkZVwiLFwib2FjdXRlXCIsXCJvY2lyY3VtZmxleFwiLFwib2RpZXJlc2lzXCIsXCJvZ3JhdmVcIixcIm90aWxkZVwiLFwic2Nhcm9uXCIsXCJ1YWN1dGVcIixcInVjaXJjdW1mbGV4XCIsXCJ1ZGllcmVzaXNcIixcInVncmF2ZVwiLFwieWFjdXRlXCIsXCJ5ZGllcmVzaXNcIixcInpjYXJvblwiLFwiZXhjbGFtc21hbGxcIixcIkh1bmdhcnVtbGF1dHNtYWxsXCIsXCJkb2xsYXJvbGRzdHlsZVwiLFwiZG9sbGFyc3VwZXJpb3JcIixcImFtcGVyc2FuZHNtYWxsXCIsXCJBY3V0ZXNtYWxsXCIsXCJwYXJlbmxlZnRzdXBlcmlvclwiLFwicGFyZW5yaWdodHN1cGVyaW9yXCIsXCIyNjYgZmZcIixcIm9uZWRvdGVubGVhZGVyXCIsXCJ6ZXJvb2xkc3R5bGVcIixcIm9uZW9sZHN0eWxlXCIsXCJ0d29vbGRzdHlsZVwiLFwidGhyZWVvbGRzdHlsZVwiLFwiZm91cm9sZHN0eWxlXCIsXCJmaXZlb2xkc3R5bGVcIixcInNpeG9sZHN0eWxlXCIsXCJzZXZlbm9sZHN0eWxlXCIsXCJlaWdodG9sZHN0eWxlXCIsXCJuaW5lb2xkc3R5bGVcIixcImNvbW1hc3VwZXJpb3JcIixcInRocmVlcXVhcnRlcnNlbWRhc2hcIixcInBlcmlvZHN1cGVyaW9yXCIsXCJxdWVzdGlvbnNtYWxsXCIsXCJhc3VwZXJpb3JcIixcImJzdXBlcmlvclwiLFwiY2VudHN1cGVyaW9yXCIsXCJkc3VwZXJpb3JcIixcImVzdXBlcmlvclwiLFwiaXN1cGVyaW9yXCIsXCJsc3VwZXJpb3JcIixcIm1zdXBlcmlvclwiLFwibnN1cGVyaW9yXCIsXCJvc3VwZXJpb3JcIixcInJzdXBlcmlvclwiLFwic3N1cGVyaW9yXCIsXCJ0c3VwZXJpb3JcIixcImZmXCIsXCJmZmlcIixcImZmbFwiLFwicGFyZW5sZWZ0aW5mZXJpb3JcIixcInBhcmVucmlnaHRpbmZlcmlvclwiLFwiQ2lyY3VtZmxleHNtYWxsXCIsXCJoeXBoZW5zdXBlcmlvclwiLFwiR3JhdmVzbWFsbFwiLFwiQXNtYWxsXCIsXCJCc21hbGxcIixcIkNzbWFsbFwiLFwiRHNtYWxsXCIsXCJFc21hbGxcIixcIkZzbWFsbFwiLFwiR3NtYWxsXCIsXCJIc21hbGxcIixcIklzbWFsbFwiLFwiSnNtYWxsXCIsXCJLc21hbGxcIixcIkxzbWFsbFwiLFwiTXNtYWxsXCIsXCJOc21hbGxcIixcIk9zbWFsbFwiLFwiUHNtYWxsXCIsXCJRc21hbGxcIixcIlJzbWFsbFwiLFwiU3NtYWxsXCIsXCJUc21hbGxcIixcIlVzbWFsbFwiLFwiVnNtYWxsXCIsXCJXc21hbGxcIixcIlhzbWFsbFwiLFwiWXNtYWxsXCIsXCJac21hbGxcIixcImNvbG9ubW9uZXRhcnlcIixcIm9uZWZpdHRlZFwiLFwicnVwaWFoXCIsXCJUaWxkZXNtYWxsXCIsXCJleGNsYW1kb3duc21hbGxcIixcImNlbnRvbGRzdHlsZVwiLFwiTHNsYXNoc21hbGxcIixcIlNjYXJvbnNtYWxsXCIsXCJaY2Fyb25zbWFsbFwiLFwiRGllcmVzaXNzbWFsbFwiLFwiQnJldmVzbWFsbFwiLFwiQ2Fyb25zbWFsbFwiLFwiRG90YWNjZW50c21hbGxcIixcIk1hY3JvbnNtYWxsXCIsXCJmaWd1cmVkYXNoXCIsXCJoeXBoZW5pbmZlcmlvclwiLFwiT2dvbmVrc21hbGxcIixcIlJpbmdzbWFsbFwiLFwiQ2VkaWxsYXNtYWxsXCIsXCJxdWVzdGlvbmRvd25zbWFsbFwiLFwib25lZWlnaHRoXCIsXCJ0aHJlZWVpZ2h0aHNcIixcImZpdmVlaWdodGhzXCIsXCJzZXZlbmVpZ2h0aHNcIixcIm9uZXRoaXJkXCIsXCJ0d290aGlyZHNcIixcInplcm9zdXBlcmlvclwiLFwiZm91cnN1cGVyaW9yXCIsXCJmaXZlc3VwZXJpb3JcIixcInNpeHN1cGVyaW9yXCIsXCJzZXZlbnN1cGVyaW9yXCIsXCJlaWdodHN1cGVyaW9yXCIsXCJuaW5lc3VwZXJpb3JcIixcInplcm9pbmZlcmlvclwiLFwib25laW5mZXJpb3JcIixcInR3b2luZmVyaW9yXCIsXCJ0aHJlZWluZmVyaW9yXCIsXCJmb3VyaW5mZXJpb3JcIixcImZpdmVpbmZlcmlvclwiLFwic2l4aW5mZXJpb3JcIixcInNldmVuaW5mZXJpb3JcIixcImVpZ2h0aW5mZXJpb3JcIixcIm5pbmVpbmZlcmlvclwiLFwiY2VudGluZmVyaW9yXCIsXCJkb2xsYXJpbmZlcmlvclwiLFwicGVyaW9kaW5mZXJpb3JcIixcImNvbW1haW5mZXJpb3JcIixcIkFncmF2ZXNtYWxsXCIsXCJBYWN1dGVzbWFsbFwiLFwiQWNpcmN1bWZsZXhzbWFsbFwiLFwiQXRpbGRlc21hbGxcIixcIkFkaWVyZXNpc3NtYWxsXCIsXCJBcmluZ3NtYWxsXCIsXCJBRXNtYWxsXCIsXCJDY2VkaWxsYXNtYWxsXCIsXCJFZ3JhdmVzbWFsbFwiLFwiRWFjdXRlc21hbGxcIixcIkVjaXJjdW1mbGV4c21hbGxcIixcIkVkaWVyZXNpc3NtYWxsXCIsXCJJZ3JhdmVzbWFsbFwiLFwiSWFjdXRlc21hbGxcIixcIkljaXJjdW1mbGV4c21hbGxcIixcIklkaWVyZXNpc3NtYWxsXCIsXCJFdGhzbWFsbFwiLFwiTnRpbGRlc21hbGxcIixcIk9ncmF2ZXNtYWxsXCIsXCJPYWN1dGVzbWFsbFwiLFwiT2NpcmN1bWZsZXhzbWFsbFwiLFwiT3RpbGRlc21hbGxcIixcIk9kaWVyZXNpc3NtYWxsXCIsXCJPRXNtYWxsXCIsXCJPc2xhc2hzbWFsbFwiLFwiVWdyYXZlc21hbGxcIixcIlVhY3V0ZXNtYWxsXCIsXCJVY2lyY3VtZmxleHNtYWxsXCIsXCJVZGllcmVzaXNzbWFsbFwiLFwiWWFjdXRlc21hbGxcIixcIlRob3Juc21hbGxcIixcIllkaWVyZXNpc3NtYWxsXCIsXCIwMDEuMDAwXCIsXCIwMDEuMDAxXCIsXCIwMDEuMDAyXCIsXCIwMDEuMDAzXCIsXCJCbGFja1wiLFwiQm9sZFwiLFwiQm9va1wiLFwiTGlnaHRcIixcIk1lZGl1bVwiLFwiUmVndWxhclwiLFwiUm9tYW5cIixcIlNlbWlib2xkXCJdLE9lPVtcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJzcGFjZVwiLFwiZXhjbGFtXCIsXCJxdW90ZWRibFwiLFwibnVtYmVyc2lnblwiLFwiZG9sbGFyXCIsXCJwZXJjZW50XCIsXCJhbXBlcnNhbmRcIixcInF1b3RlcmlnaHRcIixcInBhcmVubGVmdFwiLFwicGFyZW5yaWdodFwiLFwiYXN0ZXJpc2tcIixcInBsdXNcIixcImNvbW1hXCIsXCJoeXBoZW5cIixcInBlcmlvZFwiLFwic2xhc2hcIixcInplcm9cIixcIm9uZVwiLFwidHdvXCIsXCJ0aHJlZVwiLFwiZm91clwiLFwiZml2ZVwiLFwic2l4XCIsXCJzZXZlblwiLFwiZWlnaHRcIixcIm5pbmVcIixcImNvbG9uXCIsXCJzZW1pY29sb25cIixcImxlc3NcIixcImVxdWFsXCIsXCJncmVhdGVyXCIsXCJxdWVzdGlvblwiLFwiYXRcIixcIkFcIixcIkJcIixcIkNcIixcIkRcIixcIkVcIixcIkZcIixcIkdcIixcIkhcIixcIklcIixcIkpcIixcIktcIixcIkxcIixcIk1cIixcIk5cIixcIk9cIixcIlBcIixcIlFcIixcIlJcIixcIlNcIixcIlRcIixcIlVcIixcIlZcIixcIldcIixcIlhcIixcIllcIixcIlpcIixcImJyYWNrZXRsZWZ0XCIsXCJiYWNrc2xhc2hcIixcImJyYWNrZXRyaWdodFwiLFwiYXNjaWljaXJjdW1cIixcInVuZGVyc2NvcmVcIixcInF1b3RlbGVmdFwiLFwiYVwiLFwiYlwiLFwiY1wiLFwiZFwiLFwiZVwiLFwiZlwiLFwiZ1wiLFwiaFwiLFwiaVwiLFwialwiLFwia1wiLFwibFwiLFwibVwiLFwiblwiLFwib1wiLFwicFwiLFwicVwiLFwiclwiLFwic1wiLFwidFwiLFwidVwiLFwidlwiLFwid1wiLFwieFwiLFwieVwiLFwielwiLFwiYnJhY2VsZWZ0XCIsXCJiYXJcIixcImJyYWNlcmlnaHRcIixcImFzY2lpdGlsZGVcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiZXhjbGFtZG93blwiLFwiY2VudFwiLFwic3RlcmxpbmdcIixcImZyYWN0aW9uXCIsXCJ5ZW5cIixcImZsb3JpblwiLFwic2VjdGlvblwiLFwiY3VycmVuY3lcIixcInF1b3Rlc2luZ2xlXCIsXCJxdW90ZWRibGxlZnRcIixcImd1aWxsZW1vdGxlZnRcIixcImd1aWxzaW5nbGxlZnRcIixcImd1aWxzaW5nbHJpZ2h0XCIsXCJmaVwiLFwiZmxcIixcIlwiLFwiZW5kYXNoXCIsXCJkYWdnZXJcIixcImRhZ2dlcmRibFwiLFwicGVyaW9kY2VudGVyZWRcIixcIlwiLFwicGFyYWdyYXBoXCIsXCJidWxsZXRcIixcInF1b3Rlc2luZ2xiYXNlXCIsXCJxdW90ZWRibGJhc2VcIixcInF1b3RlZGJscmlnaHRcIixcImd1aWxsZW1vdHJpZ2h0XCIsXCJlbGxpcHNpc1wiLFwicGVydGhvdXNhbmRcIixcIlwiLFwicXVlc3Rpb25kb3duXCIsXCJcIixcImdyYXZlXCIsXCJhY3V0ZVwiLFwiY2lyY3VtZmxleFwiLFwidGlsZGVcIixcIm1hY3JvblwiLFwiYnJldmVcIixcImRvdGFjY2VudFwiLFwiZGllcmVzaXNcIixcIlwiLFwicmluZ1wiLFwiY2VkaWxsYVwiLFwiXCIsXCJodW5nYXJ1bWxhdXRcIixcIm9nb25la1wiLFwiY2Fyb25cIixcImVtZGFzaFwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJBRVwiLFwiXCIsXCJvcmRmZW1pbmluZVwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJMc2xhc2hcIixcIk9zbGFzaFwiLFwiT0VcIixcIm9yZG1hc2N1bGluZVwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcImFlXCIsXCJcIixcIlwiLFwiXCIsXCJkb3RsZXNzaVwiLFwiXCIsXCJcIixcImxzbGFzaFwiLFwib3NsYXNoXCIsXCJvZVwiLFwiZ2VybWFuZGJsc1wiXSxQZT1bXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwic3BhY2VcIixcImV4Y2xhbXNtYWxsXCIsXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLFwiXCIsXCJkb2xsYXJvbGRzdHlsZVwiLFwiZG9sbGFyc3VwZXJpb3JcIixcImFtcGVyc2FuZHNtYWxsXCIsXCJBY3V0ZXNtYWxsXCIsXCJwYXJlbmxlZnRzdXBlcmlvclwiLFwicGFyZW5yaWdodHN1cGVyaW9yXCIsXCJ0d29kb3RlbmxlYWRlclwiLFwib25lZG90ZW5sZWFkZXJcIixcImNvbW1hXCIsXCJoeXBoZW5cIixcInBlcmlvZFwiLFwiZnJhY3Rpb25cIixcInplcm9vbGRzdHlsZVwiLFwib25lb2xkc3R5bGVcIixcInR3b29sZHN0eWxlXCIsXCJ0aHJlZW9sZHN0eWxlXCIsXCJmb3Vyb2xkc3R5bGVcIixcImZpdmVvbGRzdHlsZVwiLFwic2l4b2xkc3R5bGVcIixcInNldmVub2xkc3R5bGVcIixcImVpZ2h0b2xkc3R5bGVcIixcIm5pbmVvbGRzdHlsZVwiLFwiY29sb25cIixcInNlbWljb2xvblwiLFwiY29tbWFzdXBlcmlvclwiLFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLFwicGVyaW9kc3VwZXJpb3JcIixcInF1ZXN0aW9uc21hbGxcIixcIlwiLFwiYXN1cGVyaW9yXCIsXCJic3VwZXJpb3JcIixcImNlbnRzdXBlcmlvclwiLFwiZHN1cGVyaW9yXCIsXCJlc3VwZXJpb3JcIixcIlwiLFwiXCIsXCJpc3VwZXJpb3JcIixcIlwiLFwiXCIsXCJsc3VwZXJpb3JcIixcIm1zdXBlcmlvclwiLFwibnN1cGVyaW9yXCIsXCJvc3VwZXJpb3JcIixcIlwiLFwiXCIsXCJyc3VwZXJpb3JcIixcInNzdXBlcmlvclwiLFwidHN1cGVyaW9yXCIsXCJcIixcImZmXCIsXCJmaVwiLFwiZmxcIixcImZmaVwiLFwiZmZsXCIsXCJwYXJlbmxlZnRpbmZlcmlvclwiLFwiXCIsXCJwYXJlbnJpZ2h0aW5mZXJpb3JcIixcIkNpcmN1bWZsZXhzbWFsbFwiLFwiaHlwaGVuc3VwZXJpb3JcIixcIkdyYXZlc21hbGxcIixcIkFzbWFsbFwiLFwiQnNtYWxsXCIsXCJDc21hbGxcIixcIkRzbWFsbFwiLFwiRXNtYWxsXCIsXCJGc21hbGxcIixcIkdzbWFsbFwiLFwiSHNtYWxsXCIsXCJJc21hbGxcIixcIkpzbWFsbFwiLFwiS3NtYWxsXCIsXCJMc21hbGxcIixcIk1zbWFsbFwiLFwiTnNtYWxsXCIsXCJPc21hbGxcIixcIlBzbWFsbFwiLFwiUXNtYWxsXCIsXCJSc21hbGxcIixcIlNzbWFsbFwiLFwiVHNtYWxsXCIsXCJVc21hbGxcIixcIlZzbWFsbFwiLFwiV3NtYWxsXCIsXCJYc21hbGxcIixcIllzbWFsbFwiLFwiWnNtYWxsXCIsXCJjb2xvbm1vbmV0YXJ5XCIsXCJvbmVmaXR0ZWRcIixcInJ1cGlhaFwiLFwiVGlsZGVzbWFsbFwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJleGNsYW1kb3duc21hbGxcIixcImNlbnRvbGRzdHlsZVwiLFwiTHNsYXNoc21hbGxcIixcIlwiLFwiXCIsXCJTY2Fyb25zbWFsbFwiLFwiWmNhcm9uc21hbGxcIixcIkRpZXJlc2lzc21hbGxcIixcIkJyZXZlc21hbGxcIixcIkNhcm9uc21hbGxcIixcIlwiLFwiRG90YWNjZW50c21hbGxcIixcIlwiLFwiXCIsXCJNYWNyb25zbWFsbFwiLFwiXCIsXCJcIixcImZpZ3VyZWRhc2hcIixcImh5cGhlbmluZmVyaW9yXCIsXCJcIixcIlwiLFwiT2dvbmVrc21hbGxcIixcIlJpbmdzbWFsbFwiLFwiQ2VkaWxsYXNtYWxsXCIsXCJcIixcIlwiLFwiXCIsXCJvbmVxdWFydGVyXCIsXCJvbmVoYWxmXCIsXCJ0aHJlZXF1YXJ0ZXJzXCIsXCJxdWVzdGlvbmRvd25zbWFsbFwiLFwib25lZWlnaHRoXCIsXCJ0aHJlZWVpZ2h0aHNcIixcImZpdmVlaWdodGhzXCIsXCJzZXZlbmVpZ2h0aHNcIixcIm9uZXRoaXJkXCIsXCJ0d290aGlyZHNcIixcIlwiLFwiXCIsXCJ6ZXJvc3VwZXJpb3JcIixcIm9uZXN1cGVyaW9yXCIsXCJ0d29zdXBlcmlvclwiLFwidGhyZWVzdXBlcmlvclwiLFwiZm91cnN1cGVyaW9yXCIsXCJmaXZlc3VwZXJpb3JcIixcInNpeHN1cGVyaW9yXCIsXCJzZXZlbnN1cGVyaW9yXCIsXCJlaWdodHN1cGVyaW9yXCIsXCJuaW5lc3VwZXJpb3JcIixcInplcm9pbmZlcmlvclwiLFwib25laW5mZXJpb3JcIixcInR3b2luZmVyaW9yXCIsXCJ0aHJlZWluZmVyaW9yXCIsXCJmb3VyaW5mZXJpb3JcIixcImZpdmVpbmZlcmlvclwiLFwic2l4aW5mZXJpb3JcIixcInNldmVuaW5mZXJpb3JcIixcImVpZ2h0aW5mZXJpb3JcIixcIm5pbmVpbmZlcmlvclwiLFwiY2VudGluZmVyaW9yXCIsXCJkb2xsYXJpbmZlcmlvclwiLFwicGVyaW9kaW5mZXJpb3JcIixcImNvbW1haW5mZXJpb3JcIixcIkFncmF2ZXNtYWxsXCIsXCJBYWN1dGVzbWFsbFwiLFwiQWNpcmN1bWZsZXhzbWFsbFwiLFwiQXRpbGRlc21hbGxcIixcIkFkaWVyZXNpc3NtYWxsXCIsXCJBcmluZ3NtYWxsXCIsXCJBRXNtYWxsXCIsXCJDY2VkaWxsYXNtYWxsXCIsXCJFZ3JhdmVzbWFsbFwiLFwiRWFjdXRlc21hbGxcIixcIkVjaXJjdW1mbGV4c21hbGxcIixcIkVkaWVyZXNpc3NtYWxsXCIsXCJJZ3JhdmVzbWFsbFwiLFwiSWFjdXRlc21hbGxcIixcIkljaXJjdW1mbGV4c21hbGxcIixcIklkaWVyZXNpc3NtYWxsXCIsXCJFdGhzbWFsbFwiLFwiTnRpbGRlc21hbGxcIixcIk9ncmF2ZXNtYWxsXCIsXCJPYWN1dGVzbWFsbFwiLFwiT2NpcmN1bWZsZXhzbWFsbFwiLFwiT3RpbGRlc21hbGxcIixcIk9kaWVyZXNpc3NtYWxsXCIsXCJPRXNtYWxsXCIsXCJPc2xhc2hzbWFsbFwiLFwiVWdyYXZlc21hbGxcIixcIlVhY3V0ZXNtYWxsXCIsXCJVY2lyY3VtZmxleHNtYWxsXCIsXCJVZGllcmVzaXNzbWFsbFwiLFwiWWFjdXRlc21hbGxcIixcIlRob3Juc21hbGxcIixcIllkaWVyZXNpc3NtYWxsXCJdLFFlPVtcIi5ub3RkZWZcIixcIi5udWxsXCIsXCJub25tYXJraW5ncmV0dXJuXCIsXCJzcGFjZVwiLFwiZXhjbGFtXCIsXCJxdW90ZWRibFwiLFwibnVtYmVyc2lnblwiLFwiZG9sbGFyXCIsXCJwZXJjZW50XCIsXCJhbXBlcnNhbmRcIixcInF1b3Rlc2luZ2xlXCIsXCJwYXJlbmxlZnRcIixcInBhcmVucmlnaHRcIixcImFzdGVyaXNrXCIsXCJwbHVzXCIsXCJjb21tYVwiLFwiaHlwaGVuXCIsXCJwZXJpb2RcIixcInNsYXNoXCIsXCJ6ZXJvXCIsXCJvbmVcIixcInR3b1wiLFwidGhyZWVcIixcImZvdXJcIixcImZpdmVcIixcInNpeFwiLFwic2V2ZW5cIixcImVpZ2h0XCIsXCJuaW5lXCIsXCJjb2xvblwiLFwic2VtaWNvbG9uXCIsXCJsZXNzXCIsXCJlcXVhbFwiLFwiZ3JlYXRlclwiLFwicXVlc3Rpb25cIixcImF0XCIsXCJBXCIsXCJCXCIsXCJDXCIsXCJEXCIsXCJFXCIsXCJGXCIsXCJHXCIsXCJIXCIsXCJJXCIsXCJKXCIsXCJLXCIsXCJMXCIsXCJNXCIsXCJOXCIsXCJPXCIsXCJQXCIsXCJRXCIsXCJSXCIsXCJTXCIsXCJUXCIsXCJVXCIsXCJWXCIsXCJXXCIsXCJYXCIsXCJZXCIsXCJaXCIsXCJicmFja2V0bGVmdFwiLFwiYmFja3NsYXNoXCIsXCJicmFja2V0cmlnaHRcIixcImFzY2lpY2lyY3VtXCIsXCJ1bmRlcnNjb3JlXCIsXCJncmF2ZVwiLFwiYVwiLFwiYlwiLFwiY1wiLFwiZFwiLFwiZVwiLFwiZlwiLFwiZ1wiLFwiaFwiLFwiaVwiLFwialwiLFwia1wiLFwibFwiLFwibVwiLFwiblwiLFwib1wiLFwicFwiLFwicVwiLFwiclwiLFwic1wiLFwidFwiLFwidVwiLFwidlwiLFwid1wiLFwieFwiLFwieVwiLFwielwiLFwiYnJhY2VsZWZ0XCIsXCJiYXJcIixcImJyYWNlcmlnaHRcIixcImFzY2lpdGlsZGVcIixcIkFkaWVyZXNpc1wiLFwiQXJpbmdcIixcIkNjZWRpbGxhXCIsXCJFYWN1dGVcIixcIk50aWxkZVwiLFwiT2RpZXJlc2lzXCIsXCJVZGllcmVzaXNcIixcImFhY3V0ZVwiLFwiYWdyYXZlXCIsXCJhY2lyY3VtZmxleFwiLFwiYWRpZXJlc2lzXCIsXCJhdGlsZGVcIixcImFyaW5nXCIsXCJjY2VkaWxsYVwiLFwiZWFjdXRlXCIsXCJlZ3JhdmVcIixcImVjaXJjdW1mbGV4XCIsXCJlZGllcmVzaXNcIixcImlhY3V0ZVwiLFwiaWdyYXZlXCIsXCJpY2lyY3VtZmxleFwiLFwiaWRpZXJlc2lzXCIsXCJudGlsZGVcIixcIm9hY3V0ZVwiLFwib2dyYXZlXCIsXCJvY2lyY3VtZmxleFwiLFwib2RpZXJlc2lzXCIsXCJvdGlsZGVcIixcInVhY3V0ZVwiLFwidWdyYXZlXCIsXCJ1Y2lyY3VtZmxleFwiLFwidWRpZXJlc2lzXCIsXCJkYWdnZXJcIixcImRlZ3JlZVwiLFwiY2VudFwiLFwic3RlcmxpbmdcIixcInNlY3Rpb25cIixcImJ1bGxldFwiLFwicGFyYWdyYXBoXCIsXCJnZXJtYW5kYmxzXCIsXCJyZWdpc3RlcmVkXCIsXCJjb3B5cmlnaHRcIixcInRyYWRlbWFya1wiLFwiYWN1dGVcIixcImRpZXJlc2lzXCIsXCJub3RlcXVhbFwiLFwiQUVcIixcIk9zbGFzaFwiLFwiaW5maW5pdHlcIixcInBsdXNtaW51c1wiLFwibGVzc2VxdWFsXCIsXCJncmVhdGVyZXF1YWxcIixcInllblwiLFwibXVcIixcInBhcnRpYWxkaWZmXCIsXCJzdW1tYXRpb25cIixcInByb2R1Y3RcIixcInBpXCIsXCJpbnRlZ3JhbFwiLFwib3JkZmVtaW5pbmVcIixcIm9yZG1hc2N1bGluZVwiLFwiT21lZ2FcIixcImFlXCIsXCJvc2xhc2hcIixcInF1ZXN0aW9uZG93blwiLFwiZXhjbGFtZG93blwiLFwibG9naWNhbG5vdFwiLFwicmFkaWNhbFwiLFwiZmxvcmluXCIsXCJhcHByb3hlcXVhbFwiLFwiRGVsdGFcIixcImd1aWxsZW1vdGxlZnRcIixcImd1aWxsZW1vdHJpZ2h0XCIsXCJlbGxpcHNpc1wiLFwibm9uYnJlYWtpbmdzcGFjZVwiLFwiQWdyYXZlXCIsXCJBdGlsZGVcIixcIk90aWxkZVwiLFwiT0VcIixcIm9lXCIsXCJlbmRhc2hcIixcImVtZGFzaFwiLFwicXVvdGVkYmxsZWZ0XCIsXCJxdW90ZWRibHJpZ2h0XCIsXCJxdW90ZWxlZnRcIixcInF1b3RlcmlnaHRcIixcImRpdmlkZVwiLFwibG96ZW5nZVwiLFwieWRpZXJlc2lzXCIsXCJZZGllcmVzaXNcIixcImZyYWN0aW9uXCIsXCJjdXJyZW5jeVwiLFwiZ3VpbHNpbmdsbGVmdFwiLFwiZ3VpbHNpbmdscmlnaHRcIixcImZpXCIsXCJmbFwiLFwiZGFnZ2VyZGJsXCIsXCJwZXJpb2RjZW50ZXJlZFwiLFwicXVvdGVzaW5nbGJhc2VcIixcInF1b3RlZGJsYmFzZVwiLFwicGVydGhvdXNhbmRcIixcIkFjaXJjdW1mbGV4XCIsXCJFY2lyY3VtZmxleFwiLFwiQWFjdXRlXCIsXCJFZGllcmVzaXNcIixcIkVncmF2ZVwiLFwiSWFjdXRlXCIsXCJJY2lyY3VtZmxleFwiLFwiSWRpZXJlc2lzXCIsXCJJZ3JhdmVcIixcIk9hY3V0ZVwiLFwiT2NpcmN1bWZsZXhcIixcImFwcGxlXCIsXCJPZ3JhdmVcIixcIlVhY3V0ZVwiLFwiVWNpcmN1bWZsZXhcIixcIlVncmF2ZVwiLFwiZG90bGVzc2lcIixcImNpcmN1bWZsZXhcIixcInRpbGRlXCIsXCJtYWNyb25cIixcImJyZXZlXCIsXCJkb3RhY2NlbnRcIixcInJpbmdcIixcImNlZGlsbGFcIixcImh1bmdhcnVtbGF1dFwiLFwib2dvbmVrXCIsXCJjYXJvblwiLFwiTHNsYXNoXCIsXCJsc2xhc2hcIixcIlNjYXJvblwiLFwic2Nhcm9uXCIsXCJaY2Fyb25cIixcInpjYXJvblwiLFwiYnJva2VuYmFyXCIsXCJFdGhcIixcImV0aFwiLFwiWWFjdXRlXCIsXCJ5YWN1dGVcIixcIlRob3JuXCIsXCJ0aG9yblwiLFwibWludXNcIixcIm11bHRpcGx5XCIsXCJvbmVzdXBlcmlvclwiLFwidHdvc3VwZXJpb3JcIixcInRocmVlc3VwZXJpb3JcIixcIm9uZWhhbGZcIixcIm9uZXF1YXJ0ZXJcIixcInRocmVlcXVhcnRlcnNcIixcImZyYW5jXCIsXCJHYnJldmVcIixcImdicmV2ZVwiLFwiSWRvdGFjY2VudFwiLFwiU2NlZGlsbGFcIixcInNjZWRpbGxhXCIsXCJDYWN1dGVcIixcImNhY3V0ZVwiLFwiQ2Nhcm9uXCIsXCJjY2Fyb25cIixcImRjcm9hdFwiXTtYLnByb3RvdHlwZS5jaGFyVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3ZhciBiPWEuY29kZVBvaW50QXQoMCksYz10aGlzLmZvbnQuZ2x5cGhzO2lmKGMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKz0xKWZvcih2YXIgZT1jLmdldChkKSxmPTA7ZjxlLnVuaWNvZGVzLmxlbmd0aDtmKz0xKWlmKGUudW5pY29kZXNbZl09PT1iKXJldHVybiBkO3JldHVybiBudWxsfSxZLnByb3RvdHlwZS5jaGFyVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNtYXAuZ2x5cGhJbmRleE1hcFthLmNvZGVQb2ludEF0KDApXXx8MH0sWi5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXt2YXIgYj1hLmNvZGVQb2ludEF0KDApLGM9dGhpcy5lbmNvZGluZ1tiXTtyZXR1cm4gdGhpcy5jaGFyc2V0LmluZGV4T2YoYyl9LCQucHJvdG90eXBlLm5hbWVUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubmFtZXMuaW5kZXhPZihhKX0sJC5wcm90b3R5cGUuZ2x5cGhJbmRleFRvTmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5uYW1lc1thXX07dmFyIFJlPXtsaW5lOmFhfTtjYS5wcm90b3R5cGUuYmluZENvbnN0cnVjdG9yVmFsdWVzPWZ1bmN0aW9uKGEpe3RoaXMuaW5kZXg9YS5pbmRleHx8MCx0aGlzLm5hbWU9YS5uYW1lfHxudWxsLHRoaXMudW5pY29kZT1hLnVuaWNvZGV8fHZvaWQgMCx0aGlzLnVuaWNvZGVzPWEudW5pY29kZXN8fHZvaWQgMCE9PWEudW5pY29kZT9bYS51bmljb2RlXTpbXSxhLnhNaW4mJih0aGlzLnhNaW49YS54TWluKSxhLnlNaW4mJih0aGlzLnlNaW49YS55TWluKSxhLnhNYXgmJih0aGlzLnhNYXg9YS54TWF4KSxhLnlNYXgmJih0aGlzLnlNYXg9YS55TWF4KSxhLmFkdmFuY2VXaWR0aCYmKHRoaXMuYWR2YW5jZVdpZHRoPWEuYWR2YW5jZVdpZHRoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInBhdGhcIixiYSh0aGlzLGEucGF0aCkpfSxjYS5wcm90b3R5cGUuYWRkVW5pY29kZT1mdW5jdGlvbihhKXswPT09dGhpcy51bmljb2Rlcy5sZW5ndGgmJih0aGlzLnVuaWNvZGU9YSksdGhpcy51bmljb2Rlcy5wdXNoKGEpfSxjYS5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoLmdldEJvdW5kaW5nQm94KCl9LGNhLnByb3RvdHlwZS5nZXRQYXRoPWZ1bmN0aW9uKGEsYixjLGQsZSl7YT12b2lkIDAhPT1hP2E6MCxiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjcyO3ZhciBmLGc7ZHx8KGQ9e30pO3ZhciBoPWQueFNjYWxlLGk9ZC55U2NhbGU7aWYoZC5oaW50aW5nJiZlJiZlLmhpbnRpbmcmJihnPXRoaXMucGF0aCYmZS5oaW50aW5nLmV4ZWModGhpcyxjKSksZylmPWUuaGludGluZy5nZXRDb21tYW5kcyhnKSxhPU1hdGgucm91bmQoYSksYj1NYXRoLnJvdW5kKGIpLGg9aT0xO2Vsc2V7Zj10aGlzLnBhdGguY29tbWFuZHM7dmFyIGo9MS90aGlzLnBhdGgudW5pdHNQZXJFbSpjO3ZvaWQgMD09PWgmJihoPWopLHZvaWQgMD09PWkmJihpPWopfWZvcih2YXIgaz1uZXcgcixsPTA7bDxmLmxlbmd0aDtsKz0xKXt2YXIgbT1mW2xdO1wiTVwiPT09bS50eXBlP2subW92ZVRvKGErbS54KmgsYistbS55KmkpOlwiTFwiPT09bS50eXBlP2subGluZVRvKGErbS54KmgsYistbS55KmkpOlwiUVwiPT09bS50eXBlP2sucXVhZHJhdGljQ3VydmVUbyhhK20ueDEqaCxiKy1tLnkxKmksYSttLngqaCxiKy1tLnkqaSk6XCJDXCI9PT1tLnR5cGU/ay5jdXJ2ZVRvKGErbS54MSpoLGIrLW0ueTEqaSxhK20ueDIqaCxiKy1tLnkyKmksYSttLngqaCxiKy1tLnkqaSk6XCJaXCI9PT1tLnR5cGUmJmsuY2xvc2VQYXRoKCl9cmV0dXJuIGt9LGNhLnByb3RvdHlwZS5nZXRDb250b3Vycz1mdW5jdGlvbigpe3ZhciBhPXRoaXM7aWYodm9pZCAwPT09dGhpcy5wb2ludHMpcmV0dXJuW107Zm9yKHZhciBiPVtdLGM9W10sZD0wO2Q8dGhpcy5wb2ludHMubGVuZ3RoO2QrPTEpe3ZhciBlPWEucG9pbnRzW2RdO2MucHVzaChlKSxlLmxhc3RQb2ludE9mQ29udG91ciYmKGIucHVzaChjKSxjPVtdKX1yZXR1cm4geGUuYXJndW1lbnQoMD09PWMubGVuZ3RoLFwiVGhlcmUgYXJlIHN0aWxsIHBvaW50cyBsZWZ0IGluIHRoZSBjdXJyZW50IGNvbnRvdXIuXCIpLGJ9LGNhLnByb3RvdHlwZS5nZXRNZXRyaWNzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMucGF0aC5jb21tYW5kcyxiPVtdLGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXTtcIlpcIiE9PWUudHlwZSYmKGIucHVzaChlLngpLGMucHVzaChlLnkpKSxcIlFcIiE9PWUudHlwZSYmXCJDXCIhPT1lLnR5cGV8fChiLnB1c2goZS54MSksYy5wdXNoKGUueTEpKSxcIkNcIj09PWUudHlwZSYmKGIucHVzaChlLngyKSxjLnB1c2goZS55MikpfXZhciBmPXt4TWluOk1hdGgubWluLmFwcGx5KG51bGwsYikseU1pbjpNYXRoLm1pbi5hcHBseShudWxsLGMpLHhNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxiKSx5TWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsYyksbGVmdFNpZGVCZWFyaW5nOnRoaXMubGVmdFNpZGVCZWFyaW5nfTtyZXR1cm4gaXNGaW5pdGUoZi54TWluKXx8KGYueE1pbj0wKSxpc0Zpbml0ZShmLnhNYXgpfHwoZi54TWF4PXRoaXMuYWR2YW5jZVdpZHRoKSxpc0Zpbml0ZShmLnlNaW4pfHwoZi55TWluPTApLGlzRmluaXRlKGYueU1heCl8fChmLnlNYXg9MCksZi5yaWdodFNpZGVCZWFyaW5nPXRoaXMuYWR2YW5jZVdpZHRoLWYubGVmdFNpZGVCZWFyaW5nLShmLnhNYXgtZi54TWluKSxmfSxjYS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihhLGIsYyxkLGUpe3RoaXMuZ2V0UGF0aChiLGMsZCxlKS5kcmF3KGEpfSxjYS5wcm90b3R5cGUuZHJhd1BvaW50cz1mdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBlKGIsYyxkLGUpe3ZhciBmPTIqTWF0aC5QSTthLmJlZ2luUGF0aCgpO2Zvcih2YXIgZz0wO2c8Yi5sZW5ndGg7Zys9MSlhLm1vdmVUbyhjK2JbZ10ueCplLGQrYltnXS55KmUpLGEuYXJjKGMrYltnXS54KmUsZCtiW2ddLnkqZSwyLDAsZiwhMSk7YS5jbG9zZVBhdGgoKSxhLmZpbGwoKX1iPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD12b2lkIDAhPT1kP2Q6MjQ7Zm9yKHZhciBmPTEvdGhpcy5wYXRoLnVuaXRzUGVyRW0qZCxnPVtdLGg9W10saT10aGlzLnBhdGgsaj0wO2o8aS5jb21tYW5kcy5sZW5ndGg7ais9MSl7dmFyIGs9aS5jb21tYW5kc1tqXTt2b2lkIDAhPT1rLngmJmcucHVzaCh7eDprLngseTotay55fSksdm9pZCAwIT09ay54MSYmaC5wdXNoKHt4OmsueDEseTotay55MX0pLHZvaWQgMCE9PWsueDImJmgucHVzaCh7eDprLngyLHk6LWsueTJ9KX1hLmZpbGxTdHlsZT1cImJsdWVcIixlKGcsYixjLGYpLGEuZmlsbFN0eWxlPVwicmVkXCIsZShoLGIsYyxmKX0sY2EucHJvdG90eXBlLmRyYXdNZXRyaWNzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlO2I9dm9pZCAwIT09Yj9iOjAsYz12b2lkIDAhPT1jP2M6MCxkPXZvaWQgMCE9PWQ/ZDoyNCxlPTEvdGhpcy5wYXRoLnVuaXRzUGVyRW0qZCxhLmxpbmVXaWR0aD0xLGEuc3Ryb2tlU3R5bGU9XCJibGFja1wiLFJlLmxpbmUoYSxiLC0xZTQsYiwxZTQpLFJlLmxpbmUoYSwtMWU0LGMsMWU0LGMpO3ZhciBmPXRoaXMueE1pbnx8MCxnPXRoaXMueU1pbnx8MCxoPXRoaXMueE1heHx8MCxpPXRoaXMueU1heHx8MCxqPXRoaXMuYWR2YW5jZVdpZHRofHwwO2Euc3Ryb2tlU3R5bGU9XCJibHVlXCIsUmUubGluZShhLGIrZiplLC0xZTQsYitmKmUsMWU0KSxSZS5saW5lKGEsYitoKmUsLTFlNCxiK2gqZSwxZTQpLFJlLmxpbmUoYSwtMWU0LGMrLWcqZSwxZTQsYystZyplKSxSZS5saW5lKGEsLTFlNCxjKy1pKmUsMWU0LGMrLWkqZSksYS5zdHJva2VTdHlsZT1cImdyZWVuXCIsUmUubGluZShhLGIraiplLC0xZTQsYitqKmUsMWU0KX0sZWEucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmdseXBoc1thXSYmKHRoaXMuZ2x5cGhzW2FdPXRoaXMuZ2x5cGhzW2FdKCkpLHRoaXMuZ2x5cGhzW2FdfSxlYS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihhLGIpe3RoaXMuZ2x5cGhzW2FdPWIsdGhpcy5sZW5ndGgrK307dmFyIFNlPXtHbHlwaFNldDplYSxnbHlwaExvYWRlcjpmYSx0dGZHbHlwaExvYWRlcjpnYSxjZmZHbHlwaExvYWRlcjpoYX0sVGU9W3tuYW1lOlwidmVyc2lvblwiLG9wOjAsdHlwZTpcIlNJRFwifSx7bmFtZTpcIm5vdGljZVwiLG9wOjEsdHlwZTpcIlNJRFwifSx7bmFtZTpcImNvcHlyaWdodFwiLG9wOjEyMDAsdHlwZTpcIlNJRFwifSx7bmFtZTpcImZ1bGxOYW1lXCIsb3A6Mix0eXBlOlwiU0lEXCJ9LHtuYW1lOlwiZmFtaWx5TmFtZVwiLG9wOjMsdHlwZTpcIlNJRFwifSx7bmFtZTpcIndlaWdodFwiLG9wOjQsdHlwZTpcIlNJRFwifSx7bmFtZTpcImlzRml4ZWRQaXRjaFwiLG9wOjEyMDEsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwiaXRhbGljQW5nbGVcIixvcDoxMjAyLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcInVuZGVybGluZVBvc2l0aW9uXCIsb3A6MTIwMyx0eXBlOlwibnVtYmVyXCIsdmFsdWU6LTEwMH0se25hbWU6XCJ1bmRlcmxpbmVUaGlja25lc3NcIixvcDoxMjA0LHR5cGU6XCJudW1iZXJcIix2YWx1ZTo1MH0se25hbWU6XCJwYWludFR5cGVcIixvcDoxMjA1LHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNoYXJzdHJpbmdUeXBlXCIsb3A6MTIwNix0eXBlOlwibnVtYmVyXCIsdmFsdWU6Mn0se25hbWU6XCJmb250TWF0cml4XCIsb3A6MTIwNyx0eXBlOltcInJlYWxcIixcInJlYWxcIixcInJlYWxcIixcInJlYWxcIixcInJlYWxcIixcInJlYWxcIl0sdmFsdWU6Wy4wMDEsMCwwLC4wMDEsMCwwXX0se25hbWU6XCJ1bmlxdWVJZFwiLG9wOjEzLHR5cGU6XCJudW1iZXJcIn0se25hbWU6XCJmb250QkJveFwiLG9wOjUsdHlwZTpbXCJudW1iZXJcIixcIm51bWJlclwiLFwibnVtYmVyXCIsXCJudW1iZXJcIl0sdmFsdWU6WzAsMCwwLDBdfSx7bmFtZTpcInN0cm9rZVdpZHRoXCIsb3A6MTIwOCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJ4dWlkXCIsb3A6MTQsdHlwZTpbXSx2YWx1ZTpudWxsfSx7bmFtZTpcImNoYXJzZXRcIixvcDoxNSx0eXBlOlwib2Zmc2V0XCIsdmFsdWU6MH0se25hbWU6XCJlbmNvZGluZ1wiLG9wOjE2LHR5cGU6XCJvZmZzZXRcIix2YWx1ZTowfSx7bmFtZTpcImNoYXJTdHJpbmdzXCIsb3A6MTcsdHlwZTpcIm9mZnNldFwiLHZhbHVlOjB9LHtuYW1lOlwicHJpdmF0ZVwiLG9wOjE4LHR5cGU6W1wibnVtYmVyXCIsXCJvZmZzZXRcIl0sdmFsdWU6WzAsMF19LHtuYW1lOlwicm9zXCIsb3A6MTIzMCx0eXBlOltcIlNJRFwiLFwiU0lEXCIsXCJudW1iZXJcIl19LHtuYW1lOlwiY2lkRm9udFZlcnNpb25cIixvcDoxMjMxLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNpZEZvbnRSZXZpc2lvblwiLG9wOjEyMzIsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwiY2lkRm9udFR5cGVcIixvcDoxMjMzLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNpZENvdW50XCIsb3A6MTIzNCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6ODcyMH0se25hbWU6XCJ1aWRCYXNlXCIsb3A6MTIzNSx0eXBlOlwibnVtYmVyXCJ9LHtuYW1lOlwiZmRBcnJheVwiLG9wOjEyMzYsdHlwZTpcIm9mZnNldFwifSx7bmFtZTpcImZkU2VsZWN0XCIsb3A6MTIzNyx0eXBlOlwib2Zmc2V0XCJ9LHtuYW1lOlwiZm9udE5hbWVcIixvcDoxMjM4LHR5cGU6XCJTSURcIn1dLFVlPVt7bmFtZTpcInN1YnJzXCIsb3A6MTksdHlwZTpcIm9mZnNldFwiLHZhbHVlOjB9LHtuYW1lOlwiZGVmYXVsdFdpZHRoWFwiLG9wOjIwLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcIm5vbWluYWxXaWR0aFhcIixvcDoyMSx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH1dLFZlPXtwYXJzZTp6YSxtYWtlOk1hfSxXZT17cGFyc2U6TmEsbWFrZTpPYX0sWGU9e3BhcnNlOlBhLG1ha2U6UWF9LFllPXtwYXJzZTpSYSxtYWtlOlNhfSxaZT17bWFrZTpUYSxwYXJzZTpVYX0sJGU9e3BhcnNlOlZhLG1ha2U6V2F9LF9lPVtcImNvcHlyaWdodFwiLFwiZm9udEZhbWlseVwiLFwiZm9udFN1YmZhbWlseVwiLFwidW5pcXVlSURcIixcImZ1bGxOYW1lXCIsXCJ2ZXJzaW9uXCIsXCJwb3N0U2NyaXB0TmFtZVwiLFwidHJhZGVtYXJrXCIsXCJtYW51ZmFjdHVyZXJcIixcImRlc2lnbmVyXCIsXCJkZXNjcmlwdGlvblwiLFwibWFudWZhY3R1cmVyVVJMXCIsXCJkZXNpZ25lclVSTFwiLFwibGljZW5zZVwiLFwibGljZW5zZVVSTFwiLFwicmVzZXJ2ZWRcIixcInByZWZlcnJlZEZhbWlseVwiLFwicHJlZmVycmVkU3ViZmFtaWx5XCIsXCJjb21wYXRpYmxlRnVsbE5hbWVcIixcInNhbXBsZVRleHRcIixcInBvc3RTY3JpcHRGaW5kRm9udE5hbWVcIixcInd3c0ZhbWlseVwiLFwid3dzU3ViZmFtaWx5XCJdLGFmPXswOlwiZW5cIiwxOlwiZnJcIiwyOlwiZGVcIiwzOlwiaXRcIiw0OlwibmxcIiw1Olwic3ZcIiw2OlwiZXNcIiw3OlwiZGFcIiw4OlwicHRcIiw5Olwibm9cIiwxMDpcImhlXCIsMTE6XCJqYVwiLDEyOlwiYXJcIiwxMzpcImZpXCIsMTQ6XCJlbFwiLDE1OlwiaXNcIiwxNjpcIm10XCIsMTc6XCJ0clwiLDE4OlwiaHJcIiwxOTpcInpoLUhhbnRcIiwyMDpcInVyXCIsMjE6XCJoaVwiLDIyOlwidGhcIiwyMzpcImtvXCIsMjQ6XCJsdFwiLDI1OlwicGxcIiwyNjpcImh1XCIsMjc6XCJlc1wiLDI4OlwibHZcIiwyOTpcInNlXCIsMzA6XCJmb1wiLDMxOlwiZmFcIiwzMjpcInJ1XCIsMzM6XCJ6aFwiLDM0OlwibmwtQkVcIiwzNTpcImdhXCIsMzY6XCJzcVwiLDM3Olwicm9cIiwzODpcImN6XCIsMzk6XCJza1wiLDQwOlwic2lcIiw0MTpcInlpXCIsNDI6XCJzclwiLDQzOlwibWtcIiw0NDpcImJnXCIsNDU6XCJ1a1wiLDQ2OlwiYmVcIiw0NzpcInV6XCIsNDg6XCJra1wiLDQ5OlwiYXotQ3lybFwiLDUwOlwiYXotQXJhYlwiLDUxOlwiaHlcIiw1MjpcImthXCIsNTM6XCJtb1wiLDU0Olwia3lcIiw1NTpcInRnXCIsNTY6XCJ0a1wiLDU3OlwibW4tQ05cIiw1ODpcIm1uXCIsNTk6XCJwc1wiLDYwOlwia3NcIiw2MTpcImt1XCIsNjI6XCJzZFwiLDYzOlwiYm9cIiw2NDpcIm5lXCIsNjU6XCJzYVwiLDY2OlwibXJcIiw2NzpcImJuXCIsNjg6XCJhc1wiLDY5OlwiZ3VcIiw3MDpcInBhXCIsNzE6XCJvclwiLDcyOlwibWxcIiw3MzpcImtuXCIsNzQ6XCJ0YVwiLDc1OlwidGVcIiw3NjpcInNpXCIsNzc6XCJteVwiLDc4Olwia21cIiw3OTpcImxvXCIsODA6XCJ2aVwiLDgxOlwiaWRcIiw4MjpcInRsXCIsODM6XCJtc1wiLDg0OlwibXMtQXJhYlwiLDg1OlwiYW1cIiw4NjpcInRpXCIsODc6XCJvbVwiLDg4Olwic29cIiw4OTpcInN3XCIsOTA6XCJyd1wiLDkxOlwicm5cIiw5MjpcIm55XCIsOTM6XCJtZ1wiLDk0OlwiZW9cIiwxMjg6XCJjeVwiLDEyOTpcImV1XCIsMTMwOlwiY2FcIiwxMzE6XCJsYVwiLDEzMjpcInF1XCIsMTMzOlwiZ25cIiwxMzQ6XCJheVwiLDEzNTpcInR0XCIsMTM2OlwidWdcIiwxMzc6XCJkelwiLDEzODpcImp2XCIsMTM5Olwic3VcIiwxNDA6XCJnbFwiLDE0MTpcImFmXCIsMTQyOlwiYnJcIiwxNDM6XCJpdVwiLDE0NDpcImdkXCIsMTQ1OlwiZ3ZcIiwxNDY6XCJnYVwiLDE0NzpcInRvXCIsMTQ4OlwiZWwtcG9seXRvblwiLDE0OTpcImtsXCIsMTUwOlwiYXpcIiwxNTE6XCJublwifSxiZj17MDowLDE6MCwyOjAsMzowLDQ6MCw1OjAsNjowLDc6MCw4OjAsOTowLDEwOjUsMTE6MSwxMjo0LDEzOjAsMTQ6NiwxNTowLDE2OjAsMTc6MCwxODowLDE5OjIsMjA6NCxcbjIxOjksMjI6MjEsMjM6MywyNDoyOSwyNToyOSwyNjoyOSwyNzoyOSwyODoyOSwyOTowLDMwOjAsMzE6NCwzMjo3LDMzOjI1LDM0OjAsMzU6MCwzNjowLDM3OjAsMzg6MjksMzk6MjksNDA6MCw0MTo1LDQyOjcsNDM6Nyw0NDo3LDQ1OjcsNDY6Nyw0Nzo3LDQ4OjcsNDk6Nyw1MDo0LDUxOjI0LDUyOjIzLDUzOjcsNTQ6Nyw1NTo3LDU2OjcsNTc6MjcsNTg6Nyw1OTo0LDYwOjQsNjE6NCw2Mjo0LDYzOjI2LDY0OjksNjU6OSw2Njo5LDY3OjEzLDY4OjEzLDY5OjExLDcwOjEwLDcxOjEyLDcyOjE3LDczOjE2LDc0OjE0LDc1OjE1LDc2OjE4LDc3OjE5LDc4OjIwLDc5OjIyLDgwOjMwLDgxOjAsODI6MCw4MzowLDg0OjQsODU6MjgsODY6MjgsODc6MjgsODg6MCw4OTowLDkwOjAsOTE6MCw5MjowLDkzOjAsOTQ6MCwxMjg6MCwxMjk6MCwxMzA6MCwxMzE6MCwxMzI6MCwxMzM6MCwxMzQ6MCwxMzU6NywxMzY6NCwxMzc6MjYsMTM4OjAsMTM5OjAsMTQwOjAsMTQxOjAsMTQyOjAsMTQzOjI4LDE0NDowLDE0NTowLDE0NjowLDE0NzowLDE0ODo2LDE0OTowLDE1MDowLDE1MTowfSxjZj17MTA3ODpcImFmXCIsMTA1MjpcInNxXCIsMTE1NjpcImdzd1wiLDExMTg6XCJhbVwiLDUxMjE6XCJhci1EWlwiLDE1MzYxOlwiYXItQkhcIiwzMDczOlwiYXJcIiwyMDQ5OlwiYXItSVFcIiwxMTI2NTpcImFyLUpPXCIsMTMzMTM6XCJhci1LV1wiLDEyMjg5OlwiYXItTEJcIiw0MDk3OlwiYXItTFlcIiw2MTQ1OlwiYXJ5XCIsODE5MzpcImFyLU9NXCIsMTYzODU6XCJhci1RQVwiLDEwMjU6XCJhci1TQVwiLDEwMjQxOlwiYXItU1lcIiw3MTY5OlwiYWViXCIsMTQzMzc6XCJhci1BRVwiLDkyMTc6XCJhci1ZRVwiLDEwNjc6XCJoeVwiLDExMDE6XCJhc1wiLDIwOTI6XCJhei1DeXJsXCIsMTA2ODpcImF6XCIsMTEzMzpcImJhXCIsMTA2OTpcImV1XCIsMTA1OTpcImJlXCIsMjExNzpcImJuXCIsMTA5MzpcImJuLUlOXCIsODIxODpcImJzLUN5cmxcIiw1MTQ2OlwiYnNcIiwxMTUwOlwiYnJcIiwxMDI2OlwiYmdcIiwxMDI3OlwiY2FcIiwzMDc2OlwiemgtSEtcIiw1MTI0OlwiemgtTU9cIiwyMDUyOlwiemhcIiw0MTAwOlwiemgtU0dcIiwxMDI4OlwiemgtVFdcIiwxMTU1OlwiY29cIiwxMDUwOlwiaHJcIiw0MTIyOlwiaHItQkFcIiwxMDI5OlwiY3NcIiwxMDMwOlwiZGFcIiwxMTY0OlwicHJzXCIsMTEyNTpcImR2XCIsMjA2NzpcIm5sLUJFXCIsMTA0MzpcIm5sXCIsMzA4MTpcImVuLUFVXCIsMTAyNDk6XCJlbi1CWlwiLDQxMDU6XCJlbi1DQVwiLDkyMjU6XCJlbi0wMjlcIiwxNjM5MzpcImVuLUlOXCIsNjE1MzpcImVuLUlFXCIsODIwMTpcImVuLUpNXCIsMTc0MTc6XCJlbi1NWVwiLDUxMjk6XCJlbi1OWlwiLDEzMzIxOlwiZW4tUEhcIiwxODQ0MTpcImVuLVNHXCIsNzE3NzpcImVuLVpBXCIsMTEyNzM6XCJlbi1UVFwiLDIwNTc6XCJlbi1HQlwiLDEwMzM6XCJlblwiLDEyMjk3OlwiZW4tWldcIiwxMDYxOlwiZXRcIiwxMDgwOlwiZm9cIiwxMTI0OlwiZmlsXCIsMTAzNTpcImZpXCIsMjA2MDpcImZyLUJFXCIsMzA4NDpcImZyLUNBXCIsMTAzNjpcImZyXCIsNTEzMjpcImZyLUxVXCIsNjE1NjpcImZyLU1DXCIsNDEwODpcImZyLUNIXCIsMTEyMjpcImZ5XCIsMTExMDpcImdsXCIsMTA3OTpcImthXCIsMzA3OTpcImRlLUFUXCIsMTAzMTpcImRlXCIsNTEyNzpcImRlLUxJXCIsNDEwMzpcImRlLUxVXCIsMjA1NTpcImRlLUNIXCIsMTAzMjpcImVsXCIsMTEzNTpcImtsXCIsMTA5NTpcImd1XCIsMTEyODpcImhhXCIsMTAzNzpcImhlXCIsMTA4MTpcImhpXCIsMTAzODpcImh1XCIsMTAzOTpcImlzXCIsMTEzNjpcImlnXCIsMTA1NzpcImlkXCIsMTExNzpcIml1XCIsMjE0MTpcIml1LUxhdG5cIiwyMTA4OlwiZ2FcIiwxMDc2OlwieGhcIiwxMDc3OlwienVcIiwxMDQwOlwiaXRcIiwyMDY0OlwiaXQtQ0hcIiwxMDQxOlwiamFcIiwxMDk5Olwia25cIiwxMDg3Olwia2tcIiwxMTA3Olwia21cIiwxMTU4OlwicXVjXCIsMTE1OTpcInJ3XCIsMTA4OTpcInN3XCIsMTExMTpcImtva1wiLDEwNDI6XCJrb1wiLDEwODg6XCJreVwiLDExMDg6XCJsb1wiLDEwNjI6XCJsdlwiLDEwNjM6XCJsdFwiLDIwOTQ6XCJkc2JcIiwxMTM0OlwibGJcIiwxMDcxOlwibWtcIiwyMTEwOlwibXMtQk5cIiwxMDg2OlwibXNcIiwxMTAwOlwibWxcIiwxMDgyOlwibXRcIiwxMTUzOlwibWlcIiwxMTQ2OlwiYXJuXCIsMTEwMjpcIm1yXCIsMTE0ODpcIm1vaFwiLDExMDQ6XCJtblwiLDIxMjg6XCJtbi1DTlwiLDExMjE6XCJuZVwiLDEwNDQ6XCJuYlwiLDIwNjg6XCJublwiLDExNTQ6XCJvY1wiLDEwOTY6XCJvclwiLDExMjM6XCJwc1wiLDEwNDU6XCJwbFwiLDEwNDY6XCJwdFwiLDIwNzA6XCJwdC1QVFwiLDEwOTQ6XCJwYVwiLDExMzE6XCJxdS1CT1wiLDIxNTU6XCJxdS1FQ1wiLDMxNzk6XCJxdVwiLDEwNDg6XCJyb1wiLDEwNDc6XCJybVwiLDEwNDk6XCJydVwiLDkyNzU6XCJzbW5cIiw0MTU1Olwic21qLU5PXCIsNTE3OTpcInNtalwiLDMxMzE6XCJzZS1GSVwiLDEwODM6XCJzZVwiLDIxMDc6XCJzZS1TRVwiLDgyNTE6XCJzbXNcIiw2MjAzOlwic21hLU5PXCIsNzIyNzpcInNtc1wiLDExMDM6XCJzYVwiLDcxOTQ6XCJzci1DeXJsLUJBXCIsMzA5ODpcInNyXCIsNjE3MDpcInNyLUxhdG4tQkFcIiwyMDc0Olwic3ItTGF0blwiLDExMzI6XCJuc29cIiwxMDc0OlwidG5cIiwxMTE1Olwic2lcIiwxMDUxOlwic2tcIiwxMDYwOlwic2xcIiwxMTI3NDpcImVzLUFSXCIsMTYzOTQ6XCJlcy1CT1wiLDEzMzIyOlwiZXMtQ0xcIiw5MjI2OlwiZXMtQ09cIiw1MTMwOlwiZXMtQ1JcIiw3MTc4OlwiZXMtRE9cIiwxMjI5ODpcImVzLUVDXCIsMTc0MTg6XCJlcy1TVlwiLDQxMDY6XCJlcy1HVFwiLDE4NDQyOlwiZXMtSE5cIiwyMDU4OlwiZXMtTVhcIiwxOTQ2NjpcImVzLU5JXCIsNjE1NDpcImVzLVBBXCIsMTUzNzA6XCJlcy1QWVwiLDEwMjUwOlwiZXMtUEVcIiwyMDQ5MDpcImVzLVBSXCIsMzA4MjpcImVzXCIsMTAzNDpcImVzXCIsMjE1MTQ6XCJlcy1VU1wiLDE0MzQ2OlwiZXMtVVlcIiw4MjAyOlwiZXMtVkVcIiwyMDc3Olwic3YtRklcIiwxMDUzOlwic3ZcIiwxMTE0Olwic3lyXCIsMTA2NDpcInRnXCIsMjE0MzpcInR6bVwiLDEwOTc6XCJ0YVwiLDEwOTI6XCJ0dFwiLDEwOTg6XCJ0ZVwiLDEwNTQ6XCJ0aFwiLDExMDU6XCJib1wiLDEwNTU6XCJ0clwiLDEwOTA6XCJ0a1wiLDExNTI6XCJ1Z1wiLDEwNTg6XCJ1a1wiLDEwNzA6XCJoc2JcIiwxMDU2OlwidXJcIiwyMTE1OlwidXotQ3lybFwiLDEwOTE6XCJ1elwiLDEwNjY6XCJ2aVwiLDExMDY6XCJjeVwiLDExNjA6XCJ3b1wiLDExNTc6XCJzYWhcIiwxMTQ0OlwiaWlcIiwxMTMwOlwieW9cIn0sZGY9XCJ1dGYtMTZcIixlZj17MDpcIm1hY2ludG9zaFwiLDE6XCJ4LW1hYy1qYXBhbmVzZVwiLDI6XCJ4LW1hYy1jaGluZXNldHJhZFwiLDM6XCJ4LW1hYy1rb3JlYW5cIiw2OlwieC1tYWMtZ3JlZWtcIiw3OlwieC1tYWMtY3lyaWxsaWNcIiw5OlwieC1tYWMtZGV2YW5hZ2FpXCIsMTA6XCJ4LW1hYy1ndXJtdWtoaVwiLDExOlwieC1tYWMtZ3VqYXJhdGlcIiwxMjpcIngtbWFjLW9yaXlhXCIsMTM6XCJ4LW1hYy1iZW5nYWxpXCIsMTQ6XCJ4LW1hYy10YW1pbFwiLDE1OlwieC1tYWMtdGVsdWd1XCIsMTY6XCJ4LW1hYy1rYW5uYWRhXCIsMTc6XCJ4LW1hYy1tYWxheWFsYW1cIiwxODpcIngtbWFjLXNpbmhhbGVzZVwiLDE5OlwieC1tYWMtYnVybWVzZVwiLDIwOlwieC1tYWMta2htZXJcIiwyMTpcIngtbWFjLXRoYWlcIiwyMjpcIngtbWFjLWxhb1wiLDIzOlwieC1tYWMtZ2VvcmdpYW5cIiwyNDpcIngtbWFjLWFybWVuaWFuXCIsMjU6XCJ4LW1hYy1jaGluZXNlc2ltcFwiLDI2OlwieC1tYWMtdGliZXRhblwiLDI3OlwieC1tYWMtbW9uZ29saWFuXCIsMjg6XCJ4LW1hYy1ldGhpb3BpY1wiLDI5OlwieC1tYWMtY2VcIiwzMDpcIngtbWFjLXZpZXRuYW1lc2VcIiwzMTpcIngtbWFjLWV4dGFyYWJpY1wifSxmZj17MTU6XCJ4LW1hYy1pY2VsYW5kaWNcIiwxNzpcIngtbWFjLXR1cmtpc2hcIiwxODpcIngtbWFjLWNyb2F0aWFuXCIsMjQ6XCJ4LW1hYy1jZVwiLDI1OlwieC1tYWMtY2VcIiwyNjpcIngtbWFjLWNlXCIsMjc6XCJ4LW1hYy1jZVwiLDI4OlwieC1tYWMtY2VcIiwzMDpcIngtbWFjLWljZWxhbmRpY1wiLDM3OlwieC1tYWMtcm9tYW5pYW5cIiwzODpcIngtbWFjLWNlXCIsMzk6XCJ4LW1hYy1jZVwiLDQwOlwieC1tYWMtY2VcIiwxNDM6XCJ4LW1hYy1pbnVpdFwiLDE0NjpcIngtbWFjLWdhZWxpY1wifSxnZj17cGFyc2U6WmEsbWFrZTpjYn0saGY9W3tiZWdpbjowLGVuZDoxMjd9LHtiZWdpbjoxMjgsZW5kOjI1NX0se2JlZ2luOjI1NixlbmQ6MzgzfSx7YmVnaW46Mzg0LGVuZDo1OTF9LHtiZWdpbjo1OTIsZW5kOjY4N30se2JlZ2luOjY4OCxlbmQ6NzY3fSx7YmVnaW46NzY4LGVuZDo4Nzl9LHtiZWdpbjo4ODAsZW5kOjEwMjN9LHtiZWdpbjoxMTM5MixlbmQ6MTE1MTl9LHtiZWdpbjoxMDI0LGVuZDoxMjc5fSx7YmVnaW46MTMyOCxlbmQ6MTQyM30se2JlZ2luOjE0MjQsZW5kOjE1MzV9LHtiZWdpbjo0MjI0MCxlbmQ6NDI1NTl9LHtiZWdpbjoxNTM2LGVuZDoxNzkxfSx7YmVnaW46MTk4NCxlbmQ6MjA0N30se2JlZ2luOjIzMDQsZW5kOjI0MzF9LHtiZWdpbjoyNDMyLGVuZDoyNTU5fSx7YmVnaW46MjU2MCxlbmQ6MjY4N30se2JlZ2luOjI2ODgsZW5kOjI4MTV9LHtiZWdpbjoyODE2LGVuZDoyOTQzfSx7YmVnaW46Mjk0NCxlbmQ6MzA3MX0se2JlZ2luOjMwNzIsZW5kOjMxOTl9LHtiZWdpbjozMjAwLGVuZDozMzI3fSx7YmVnaW46MzMyOCxlbmQ6MzQ1NX0se2JlZ2luOjM1ODQsZW5kOjM3MTF9LHtiZWdpbjozNzEyLGVuZDozODM5fSx7YmVnaW46NDI1NixlbmQ6NDM1MX0se2JlZ2luOjY5MTIsZW5kOjcwMzl9LHtiZWdpbjo0MzUyLGVuZDo0NjA3fSx7YmVnaW46NzY4MCxlbmQ6NzkzNX0se2JlZ2luOjc5MzYsZW5kOjgxOTF9LHtiZWdpbjo4MTkyLGVuZDo4MzAzfSx7YmVnaW46ODMwNCxlbmQ6ODM1MX0se2JlZ2luOjgzNTIsZW5kOjgzOTl9LHtiZWdpbjo4NDAwLGVuZDo4NDQ3fSx7YmVnaW46ODQ0OCxlbmQ6ODUyN30se2JlZ2luOjg1MjgsZW5kOjg1OTF9LHtiZWdpbjo4NTkyLGVuZDo4NzAzfSx7YmVnaW46ODcwNCxlbmQ6ODk1OX0se2JlZ2luOjg5NjAsZW5kOjkyMTV9LHtiZWdpbjo5MjE2LGVuZDo5Mjc5fSx7YmVnaW46OTI4MCxlbmQ6OTMxMX0se2JlZ2luOjkzMTIsZW5kOjk0NzF9LHtiZWdpbjo5NDcyLGVuZDo5NTk5fSx7YmVnaW46OTYwMCxlbmQ6OTYzMX0se2JlZ2luOjk2MzIsZW5kOjk3Mjd9LHtiZWdpbjo5NzI4LGVuZDo5OTgzfSx7YmVnaW46OTk4NCxlbmQ6MTAxNzV9LHtiZWdpbjoxMjI4OCxlbmQ6MTIzNTF9LHtiZWdpbjoxMjM1MixlbmQ6MTI0NDd9LHtiZWdpbjoxMjQ0OCxlbmQ6MTI1NDN9LHtiZWdpbjoxMjU0NCxlbmQ6MTI1OTF9LHtiZWdpbjoxMjU5MixlbmQ6MTI2ODd9LHtiZWdpbjo0MzA3MixlbmQ6NDMxMzV9LHtiZWdpbjoxMjgwMCxlbmQ6MTMwNTV9LHtiZWdpbjoxMzA1NixlbmQ6MTMzMTF9LHtiZWdpbjo0NDAzMixlbmQ6NTUyMTV9LHtiZWdpbjo1NTI5NixlbmQ6NTczNDN9LHtiZWdpbjo2Nzg0MCxlbmQ6Njc4NzF9LHtiZWdpbjoxOTk2OCxlbmQ6NDA5NTl9LHtiZWdpbjo1NzM0NCxlbmQ6NjM3NDN9LHtiZWdpbjoxMjczNixlbmQ6MTI3ODN9LHtiZWdpbjo2NDI1NixlbmQ6NjQzMzV9LHtiZWdpbjo2NDMzNixlbmQ6NjUwMjN9LHtiZWdpbjo2NTA1NixlbmQ6NjUwNzF9LHtiZWdpbjo2NTA0MCxlbmQ6NjUwNTV9LHtiZWdpbjo2NTEwNCxlbmQ6NjUxMzV9LHtiZWdpbjo2NTEzNixlbmQ6NjUyNzl9LHtiZWdpbjo2NTI4MCxlbmQ6NjU1MTl9LHtiZWdpbjo2NTUyMCxlbmQ6NjU1MzV9LHtiZWdpbjozODQwLGVuZDo0MDk1fSx7YmVnaW46MTc5MixlbmQ6MTg3MX0se2JlZ2luOjE5MjAsZW5kOjE5ODN9LHtiZWdpbjozNDU2LGVuZDozNTgzfSx7YmVnaW46NDA5NixlbmQ6NDI1NX0se2JlZ2luOjQ2MDgsZW5kOjQ5OTF9LHtiZWdpbjo1MDI0LGVuZDo1MTE5fSx7YmVnaW46NTEyMCxlbmQ6NTc1OX0se2JlZ2luOjU3NjAsZW5kOjU3OTF9LHtiZWdpbjo1NzkyLGVuZDo1ODg3fSx7YmVnaW46NjAxNixlbmQ6NjE0M30se2JlZ2luOjYxNDQsZW5kOjYzMTl9LHtiZWdpbjoxMDI0MCxlbmQ6MTA0OTV9LHtiZWdpbjo0MDk2MCxlbmQ6NDIxMjd9LHtiZWdpbjo1ODg4LGVuZDo1OTE5fSx7YmVnaW46NjYzMDQsZW5kOjY2MzUxfSx7YmVnaW46NjYzNTIsZW5kOjY2MzgzfSx7YmVnaW46NjY1NjAsZW5kOjY2NjM5fSx7YmVnaW46MTE4Nzg0LGVuZDoxMTkwMzl9LHtiZWdpbjoxMTk4MDgsZW5kOjEyMDgzMX0se2JlZ2luOjEwNDQ0ODAsZW5kOjEwNDg1NzN9LHtiZWdpbjo2NTAyNCxlbmQ6NjUwMzl9LHtiZWdpbjo5MTc1MDQsZW5kOjkxNzYzMX0se2JlZ2luOjY0MDAsZW5kOjY0Nzl9LHtiZWdpbjo2NDgwLGVuZDo2NTI3fSx7YmVnaW46NjUyOCxlbmQ6NjYyM30se2JlZ2luOjY2NTYsZW5kOjY2ODd9LHtiZWdpbjoxMTI2NCxlbmQ6MTEzNTl9LHtiZWdpbjoxMTU2OCxlbmQ6MTE2NDd9LHtiZWdpbjoxOTkwNCxlbmQ6MTk5Njd9LHtiZWdpbjo0MzAwOCxlbmQ6NDMwNTV9LHtiZWdpbjo2NTUzNixlbmQ6NjU2NjN9LHtiZWdpbjo2NTg1NixlbmQ6NjU5MzV9LHtiZWdpbjo2NjQzMixlbmQ6NjY0NjN9LHtiZWdpbjo2NjQ2NCxlbmQ6NjY1Mjd9LHtiZWdpbjo2NjY0MCxlbmQ6NjY2ODd9LHtiZWdpbjo2NjY4OCxlbmQ6NjY3MzV9LHtiZWdpbjo2NzU4NCxlbmQ6Njc2NDd9LHtiZWdpbjo2ODA5NixlbmQ6NjgxOTF9LHtiZWdpbjoxMTk1NTIsZW5kOjExOTY0N30se2JlZ2luOjczNzI4LGVuZDo3NDc1MX0se2JlZ2luOjExOTY0OCxlbmQ6MTE5Njc5fSx7YmVnaW46NzA0MCxlbmQ6NzEwM30se2JlZ2luOjcxNjgsZW5kOjcyNDd9LHtiZWdpbjo3MjQ4LGVuZDo3Mjk1fSx7YmVnaW46NDMxMzYsZW5kOjQzMjMxfSx7YmVnaW46NDMyNjQsZW5kOjQzMzExfSx7YmVnaW46NDMzMTIsZW5kOjQzMzU5fSx7YmVnaW46NDM1MjAsZW5kOjQzNjE1fSx7YmVnaW46NjU5MzYsZW5kOjY1OTk5fSx7YmVnaW46NjZlMyxlbmQ6NjYwNDd9LHtiZWdpbjo2NjIwOCxlbmQ6NjYyNzF9LHtiZWdpbjoxMjcwMjQsZW5kOjEyNzEzNX1dLGpmPXtwYXJzZTplYixtYWtlOmZiLHVuaWNvZGVSYW5nZXM6aGYsZ2V0VW5pY29kZVJhbmdlOmRifSxrZj17cGFyc2U6Z2IsbWFrZTpoYn0sbGY9bmV3IEFycmF5KDkpO2xmWzFdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4gMT09PWI/e3N1YnN0Rm9ybWF0OjEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksZGVsdGFHbHlwaElkOnRoaXMucGFyc2VVU2hvcnQoKX06Mj09PWI/e3N1YnN0Rm9ybWF0OjIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksc3Vic3RpdHV0ZTp0aGlzLnBhcnNlT2Zmc2V0MTZMaXN0KCl9OnZvaWQgeGUuYXNzZXJ0KCExLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogbG9va3VwIHR5cGUgMSBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpfSxsZlsyXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWEsXCJHU1VCIE11bHRpcGxlIFN1YnN0aXR1dGlvbiBTdWJ0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksc2VxdWVuY2VzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cygpfX0sbGZbM109ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBBbHRlcm5hdGUgU3Vic3RpdHV0aW9uIFN1YnRhYmxlIGlkZW50aWZpZXItZm9ybWF0IG11c3QgYmUgMVwiKSx7c3Vic3RGb3JtYXQ6YSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxhbHRlcm5hdGVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cygpfX0sbGZbNF09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBsaWdhdHVyZSB0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksbGlnYXR1cmVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3JldHVybntsaWdHbHlwaDp0aGlzLnBhcnNlVVNob3J0KCksY29tcG9uZW50czp0aGlzLnBhcnNlVVNob3J0TGlzdCh0aGlzLnBhcnNlVVNob3J0KCktMSl9fSl9fTt2YXIgbWY9e3NlcXVlbmNlSW5kZXg6US51U2hvcnQsbG9va3VwTGlzdEluZGV4OlEudVNob3J0fTtsZls1XT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWIpcmV0dXJue3N1YnN0Rm9ybWF0OmIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSkscnVsZVNldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpLGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntpbnB1dDp0aGlzLnBhcnNlVVNob3J0TGlzdChhLTEpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QoYixtZil9fSl9O2lmKDI9PT1iKXJldHVybntzdWJzdEZvcm1hdDpiLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGNsYXNzRGVmOnRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGNsYXNzU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCksYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJue2NsYXNzZXM6dGhpcy5wYXJzZVVTaG9ydExpc3QoYS0xKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KGIsbWYpfX0pfTtpZigzPT09Yil7dmFyIGM9dGhpcy5wYXJzZVVTaG9ydCgpLGQ9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntzdWJzdEZvcm1hdDpiLGNvdmVyYWdlczp0aGlzLnBhcnNlTGlzdChjLFEucG9pbnRlcihRLmNvdmVyYWdlKSksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChkLG1mKX19eGUuYXNzZXJ0KCExLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogbG9va3VwIHR5cGUgNSBmb3JtYXQgbXVzdCBiZSAxLCAyIG9yIDMuXCIpfSxsZls2XT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIDE9PT1iP3tzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGNoYWluUnVsZVNldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7cmV0dXJue2JhY2t0cmFjazp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGlucHV0OnRoaXMucGFyc2VVU2hvcnRMaXN0KHRoaXMucGFyc2VTaG9ydCgpLTEpLGxvb2thaGVhZDp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QobWYpfX0pfToyPT09Yj97c3Vic3RGb3JtYXQ6Mixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxiYWNrdHJhY2tDbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxpbnB1dENsYXNzRGVmOnRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGxvb2thaGVhZENsYXNzRGVmOnRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGNoYWluQ2xhc3NTZXQ6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7cmV0dXJue2JhY2t0cmFjazp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGlucHV0OnRoaXMucGFyc2VVU2hvcnRMaXN0KHRoaXMucGFyc2VTaG9ydCgpLTEpLGxvb2thaGVhZDp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QobWYpfX0pfTozPT09Yj97c3Vic3RGb3JtYXQ6MyxiYWNrdHJhY2tDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGlucHV0Q292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxsb29rYWhlYWRDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QobWYpfTp2b2lkIHhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IGxvb2t1cCB0eXBlIDYgZm9ybWF0IG11c3QgYmUgMSwgMiBvciAzLlwiKX0sbGZbN109ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7eGUuYXJndW1lbnQoMT09PWEsXCJHU1VCIEV4dGVuc2lvbiBTdWJzdGl0dXRpb24gc3VidGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpO3ZhciBiPXRoaXMucGFyc2VVU2hvcnQoKSxjPW5ldyBRKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnBhcnNlVUxvbmcoKSk7cmV0dXJue3N1YnN0Rm9ybWF0OjEsbG9va3VwVHlwZTpiLGV4dGVuc2lvbjpsZltiXS5jYWxsKGMpfX0sbGZbOF09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBSZXZlcnNlIENoYWluaW5nIENvbnRleHR1YWwgU2luZ2xlIFN1YnN0aXR1dGlvbiBTdWJ0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksYmFja3RyYWNrQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxsb29rYWhlYWRDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLHN1YnN0aXR1dGVzOnRoaXMucGFyc2VVU2hvcnRMaXN0KCl9fTt2YXIgbmY9bmV3IEFycmF5KDkpO25mWzFdPWZ1bmN0aW9uKGEpe3JldHVybiAxPT09YS5zdWJzdEZvcm1hdD9uZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9LHtuYW1lOlwiZGVsdGFHbHlwaElEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEuZGVsdGFHbHlwaElkfV0pOm5ldyBJZS5UYWJsZShcInN1YnN0aXR1dGlvblRhYmxlXCIsW3tuYW1lOlwic3Vic3RGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Mn0se25hbWU6XCJjb3ZlcmFnZVwiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Db3ZlcmFnZShhLmNvdmVyYWdlKX1dLmNvbmNhdChJZS51c2hvcnRMaXN0KFwic3Vic3RpdHV0ZVwiLGEuc3Vic3RpdHV0ZSkpKX0sbmZbM109ZnVuY3Rpb24oYSl7cmV0dXJuIHhlLmFzc2VydCgxPT09YS5zdWJzdEZvcm1hdCxcIkxvb2t1cCB0eXBlIDMgc3Vic3RGb3JtYXQgbXVzdCBiZSAxLlwiKSxuZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9XS5jb25jYXQoSWUudGFibGVMaXN0KFwiYWx0U2V0XCIsYS5hbHRlcm5hdGVTZXRzLGZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJhbHRlcm5hdGVTZXRUYWJsZVwiLEllLnVzaG9ydExpc3QoXCJhbHRlcm5hdGVcIixhKSl9KSkpfSxuZls0XT1mdW5jdGlvbihhKXtyZXR1cm4geGUuYXNzZXJ0KDE9PT1hLnN1YnN0Rm9ybWF0LFwiTG9va3VwIHR5cGUgNCBzdWJzdEZvcm1hdCBtdXN0IGJlIDEuXCIpLG5ldyBJZS5UYWJsZShcInN1YnN0aXR1dGlvblRhYmxlXCIsW3tuYW1lOlwic3Vic3RGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJjb3ZlcmFnZVwiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Db3ZlcmFnZShhLmNvdmVyYWdlKX1dLmNvbmNhdChJZS50YWJsZUxpc3QoXCJsaWdTZXRcIixhLmxpZ2F0dXJlU2V0cyxmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwibGlnYXR1cmVTZXRUYWJsZVwiLEllLnRhYmxlTGlzdChcImxpZ2F0dXJlXCIsYSxmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwibGlnYXR1cmVUYWJsZVwiLFt7bmFtZTpcImxpZ0dseXBoXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEubGlnR2x5cGh9XS5jb25jYXQoSWUudXNob3J0TGlzdChcImNvbXBvbmVudFwiLGEuY29tcG9uZW50cyxhLmNvbXBvbmVudHMubGVuZ3RoKzEpKSl9KSl9KSkpfTt2YXIgb2Y9e3BhcnNlOmliLG1ha2U6amJ9LHBmPXtwYXJzZTprYixtYWtlOmxifSxxZj17bWFrZTpwYixmb250VG9UYWJsZTpzYixjb21wdXRlQ2hlY2tTdW06bmJ9O3diLnByb3RvdHlwZT17c2VhcmNoVGFnOnRiLGJpblNlYXJjaDp1YixnZXRUYWJsZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmZvbnQudGFibGVzW3RoaXMudGFibGVOYW1lXTtyZXR1cm4hYiYmYSYmKGI9dGhpcy5mb250LnRhYmxlc1t0aGlzLnRhYmxlTmFtZV09dGhpcy5jcmVhdGVEZWZhdWx0VGFibGUoKSksYn0sZ2V0U2NyaXB0TmFtZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFRhYmxlKCk7cmV0dXJuIGE/YS5zY3JpcHRzLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS50YWd9KTpbXX0sZ2V0RGVmYXVsdFNjcmlwdE5hbWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFRhYmxlKCk7aWYoYSl7Zm9yKHZhciBiPSExLGM9MDtjPGEuc2NyaXB0cy5sZW5ndGg7YysrKXt2YXIgZD1hLnNjcmlwdHNbY10udGFnO2lmKFwiREZMVFwiPT09ZClyZXR1cm4gZDtcImxhdG5cIj09PWQmJihiPSEwKX1yZXR1cm4gYj9cImxhdG5cIjp2b2lkIDB9fSxnZXRTY3JpcHRUYWJsZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0VGFibGUoYik7aWYoYyl7YT1hfHxcIkRGTFRcIjt2YXIgZD1jLnNjcmlwdHMsZT10YihjLnNjcmlwdHMsYSk7aWYoZT49MClyZXR1cm4gZFtlXS5zY3JpcHQ7aWYoYil7dmFyIGY9e3RhZzphLHNjcmlwdDp7ZGVmYXVsdExhbmdTeXM6e3Jlc2VydmVkOjAscmVxRmVhdHVyZUluZGV4OjY1NTM1LGZlYXR1cmVJbmRleGVzOltdfSxsYW5nU3lzUmVjb3JkczpbXX19O3JldHVybiBkLnNwbGljZSgtMS1lLDAsZiksZi5zY3JpcHR9fX0sZ2V0TGFuZ1N5c1RhYmxlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmdldFNjcmlwdFRhYmxlKGEsYyk7aWYoZCl7aWYoIWJ8fFwiZGZsdFwiPT09Ynx8XCJERkxUXCI9PT1iKXJldHVybiBkLmRlZmF1bHRMYW5nU3lzO3ZhciBlPXRiKGQubGFuZ1N5c1JlY29yZHMsYik7aWYoZT49MClyZXR1cm4gZC5sYW5nU3lzUmVjb3Jkc1tlXS5sYW5nU3lzO2lmKGMpe3ZhciBmPXt0YWc6YixsYW5nU3lzOntyZXNlcnZlZDowLHJlcUZlYXR1cmVJbmRleDo2NTUzNSxmZWF0dXJlSW5kZXhlczpbXX19O3JldHVybiBkLmxhbmdTeXNSZWNvcmRzLnNwbGljZSgtMS1lLDAsZiksZi5sYW5nU3lzfX19LGdldEZlYXR1cmVUYWJsZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldExhbmdTeXNUYWJsZShhLGIsZCk7aWYoZSl7Zm9yKHZhciBmLGc9ZS5mZWF0dXJlSW5kZXhlcyxoPXRoaXMuZm9udC50YWJsZXNbdGhpcy50YWJsZU5hbWVdLmZlYXR1cmVzLGk9MDtpPGcubGVuZ3RoO2krKylpZihmPWhbZ1tpXV0sZi50YWc9PT1jKXJldHVybiBmLmZlYXR1cmU7aWYoZCl7dmFyIGo9aC5sZW5ndGg7cmV0dXJuIHhlLmFzc2VydCgwPT09anx8Yz49aFtqLTFdLnRhZyxcIkZlYXR1cmVzIG11c3QgYmUgYWRkZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLlwiKSxmPXt0YWc6YyxmZWF0dXJlOntwYXJhbXM6MCxsb29rdXBMaXN0SW5kZXhlczpbXX19LGgucHVzaChmKSxnLnB1c2goaiksZi5mZWF0dXJlfX19LGdldExvb2t1cFRhYmxlczpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPXRoaXMuZ2V0RmVhdHVyZVRhYmxlKGEsYixjLGUpLGc9W107aWYoZil7Zm9yKHZhciBoLGk9Zi5sb29rdXBMaXN0SW5kZXhlcyxqPXRoaXMuZm9udC50YWJsZXNbdGhpcy50YWJsZU5hbWVdLmxvb2t1cHMsaz0wO2s8aS5sZW5ndGg7aysrKWg9altpW2tdXSxoLmxvb2t1cFR5cGU9PT1kJiZnLnB1c2goaCk7aWYoMD09PWcubGVuZ3RoJiZlKXtoPXtsb29rdXBUeXBlOmQsbG9va3VwRmxhZzowLHN1YnRhYmxlczpbXSxtYXJrRmlsdGVyaW5nU2V0OnZvaWQgMH07dmFyIGw9ai5sZW5ndGg7cmV0dXJuIGoucHVzaChoKSxpLnB1c2gobCksW2hdfX1yZXR1cm4gZ30sZ2V0R2x5cGhDbGFzczpmdW5jdGlvbihhLGIpe3N3aXRjaChhLmZvcm1hdCl7Y2FzZSAxOnJldHVybiBhLnN0YXJ0R2x5cGg8PWImJmI8YS5zdGFydEdseXBoK2EuY2xhc3Nlcy5sZW5ndGg/YS5jbGFzc2VzW2ItYS5zdGFydEdseXBoXTowO2Nhc2UgMjp2YXIgYz12YihhLnJhbmdlcyxiKTtyZXR1cm4gYz9jLmNsYXNzSWQ6MH19LGdldENvdmVyYWdlSW5kZXg6ZnVuY3Rpb24oYSxiKXtzd2l0Y2goYS5mb3JtYXQpe2Nhc2UgMTp2YXIgYz11YihhLmdseXBocyxiKTtyZXR1cm4gYz49MD9jOi0xO2Nhc2UgMjp2YXIgZD12YihhLnJhbmdlcyxiKTtyZXR1cm4gZD9kLmluZGV4K2ItZC5zdGFydDotMX19LGV4cGFuZENvdmVyYWdlOmZ1bmN0aW9uKGEpe2lmKDE9PT1hLmZvcm1hdClyZXR1cm4gYS5nbHlwaHM7Zm9yKHZhciBiPVtdLGM9YS5yYW5nZXMsZD0wO2Q8Yy5sZW5ndGg7ZCsrKWZvcih2YXIgZT1jW2RdLGY9ZS5zdGFydCxnPWUuZW5kLGg9ZjtoPD1nO2grKyliLnB1c2goaCk7cmV0dXJuIGJ9fSx4Yi5wcm90b3R5cGU9d2IucHJvdG90eXBlLHhiLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXREZWZhdWx0U2NyaXB0TmFtZSgpO3RoaXMuZGVmYXVsdEtlcm5pbmdUYWJsZXM9dGhpcy5nZXRLZXJuaW5nVGFibGVzKGEpfSx4Yi5wcm90b3R5cGUuZ2V0S2VybmluZ1ZhbHVlPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPTA7ZTxhLmxlbmd0aDtlKyspZm9yKHZhciBmPWFbZV0uc3VidGFibGVzLGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGg9ZltnXSxpPWQuZ2V0Q292ZXJhZ2VJbmRleChoLmNvdmVyYWdlLGIpO2lmKCEoaTwwKSlzd2l0Y2goaC5wb3NGb3JtYXQpe2Nhc2UgMTpmb3IodmFyIGo9aC5wYWlyU2V0c1tpXSxrPTA7azxqLmxlbmd0aDtrKyspe3ZhciBsPWpba107aWYobC5zZWNvbmRHbHlwaD09PWMpcmV0dXJuIGwudmFsdWUxJiZsLnZhbHVlMS54QWR2YW5jZXx8MH1icmVhaztjYXNlIDI6dmFyIG09ZC5nZXRHbHlwaENsYXNzKGguY2xhc3NEZWYxLGIpLG49ZC5nZXRHbHlwaENsYXNzKGguY2xhc3NEZWYyLGMpLG89aC5jbGFzc1JlY29yZHNbbV1bbl07cmV0dXJuIG8udmFsdWUxJiZvLnZhbHVlMS54QWR2YW5jZXx8MH19cmV0dXJuIDB9LHhiLnByb3RvdHlwZS5nZXRLZXJuaW5nVGFibGVzPWZ1bmN0aW9uKGEsYil7aWYodGhpcy5mb250LnRhYmxlcy5ncG9zKXJldHVybiB0aGlzLmdldExvb2t1cFRhYmxlcyhhLGIsXCJrZXJuXCIsMil9LHliLnByb3RvdHlwZT13Yi5wcm90b3R5cGUseWIucHJvdG90eXBlLmNyZWF0ZURlZmF1bHRUYWJsZT1mdW5jdGlvbigpe3JldHVybnt2ZXJzaW9uOjEsc2NyaXB0czpbe3RhZzpcIkRGTFRcIixzY3JpcHQ6e2RlZmF1bHRMYW5nU3lzOntyZXNlcnZlZDowLHJlcUZlYXR1cmVJbmRleDo2NTUzNSxmZWF0dXJlSW5kZXhlczpbXX0sbGFuZ1N5c1JlY29yZHM6W119fV0sZmVhdHVyZXM6W10sbG9va3VwczpbXX19LHliLnByb3RvdHlwZS5nZXRTaW5nbGU9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD10aGlzLGU9W10sZj10aGlzLmdldExvb2t1cFRhYmxlcyhiLGMsYSwxKSxnPTA7ZzxmLmxlbmd0aDtnKyspZm9yKHZhciBoPWZbZ10uc3VidGFibGVzLGk9MDtpPGgubGVuZ3RoO2krKyl7dmFyIGo9aFtpXSxrPWQuZXhwYW5kQ292ZXJhZ2Uoai5jb3ZlcmFnZSksbD12b2lkIDA7aWYoMT09PWouc3Vic3RGb3JtYXQpe3ZhciBtPWouZGVsdGFHbHlwaElkO2ZvcihsPTA7bDxrLmxlbmd0aDtsKyspe3ZhciBuPWtbbF07ZS5wdXNoKHtzdWI6bixieTpuK219KX19ZWxzZXt2YXIgbz1qLnN1YnN0aXR1dGU7Zm9yKGw9MDtsPGsubGVuZ3RoO2wrKyllLnB1c2goe3N1YjprW2xdLGJ5Om9bbF19KX19cmV0dXJuIGV9LHliLnByb3RvdHlwZS5nZXRBbHRlcm5hdGVzPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPVtdLGY9dGhpcy5nZXRMb29rdXBUYWJsZXMoYixjLGEsMyksZz0wO2c8Zi5sZW5ndGg7ZysrKWZvcih2YXIgaD1mW2ddLnN1YnRhYmxlcyxpPTA7aTxoLmxlbmd0aDtpKyspZm9yKHZhciBqPWhbaV0saz1kLmV4cGFuZENvdmVyYWdlKGouY292ZXJhZ2UpLGw9ai5hbHRlcm5hdGVTZXRzLG09MDttPGsubGVuZ3RoO20rKyllLnB1c2goe3N1YjprW21dLGJ5OmxbbV19KTtyZXR1cm4gZX0seWIucHJvdG90eXBlLmdldExpZ2F0dXJlcz1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT1bXSxmPXRoaXMuZ2V0TG9va3VwVGFibGVzKGIsYyxhLDQpLGc9MDtnPGYubGVuZ3RoO2crKylmb3IodmFyIGg9ZltnXS5zdWJ0YWJsZXMsaT0wO2k8aC5sZW5ndGg7aSsrKWZvcih2YXIgaj1oW2ldLGs9ZC5leHBhbmRDb3ZlcmFnZShqLmNvdmVyYWdlKSxsPWoubGlnYXR1cmVTZXRzLG09MDttPGsubGVuZ3RoO20rKylmb3IodmFyIG49a1ttXSxvPWxbbV0scD0wO3A8by5sZW5ndGg7cCsrKXt2YXIgcT1vW3BdO2UucHVzaCh7c3ViOltuXS5jb25jYXQocS5jb21wb25lbnRzKSxieTpxLmxpZ0dseXBofSl9cmV0dXJuIGV9LHliLnByb3RvdHlwZS5hZGRTaW5nbGU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5nZXRMb29rdXBUYWJsZXMoYyxkLGEsMSwhMClbMF0sZj1BYihlLDIse3N1YnN0Rm9ybWF0OjIsY292ZXJhZ2U6e2Zvcm1hdDoxLGdseXBoczpbXX0sc3Vic3RpdHV0ZTpbXX0pO3hlLmFzc2VydCgxPT09Zi5jb3ZlcmFnZS5mb3JtYXQsXCJMaWdhdHVyZTogdW5hYmxlIHRvIG1vZGlmeSBjb3ZlcmFnZSB0YWJsZSBmb3JtYXQgXCIrZi5jb3ZlcmFnZS5mb3JtYXQpO3ZhciBnPWIuc3ViLGg9dGhpcy5iaW5TZWFyY2goZi5jb3ZlcmFnZS5nbHlwaHMsZyk7aDwwJiYoaD0tMS1oLGYuY292ZXJhZ2UuZ2x5cGhzLnNwbGljZShoLDAsZyksZi5zdWJzdGl0dXRlLnNwbGljZShoLDAsMCkpLGYuc3Vic3RpdHV0ZVtoXT1iLmJ5fSx5Yi5wcm90b3R5cGUuYWRkQWx0ZXJuYXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZ2V0TG9va3VwVGFibGVzKGMsZCxhLDMsITApWzBdLGY9QWIoZSwxLHtzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOntmb3JtYXQ6MSxnbHlwaHM6W119LGFsdGVybmF0ZVNldHM6W119KTt4ZS5hc3NlcnQoMT09PWYuY292ZXJhZ2UuZm9ybWF0LFwiTGlnYXR1cmU6IHVuYWJsZSB0byBtb2RpZnkgY292ZXJhZ2UgdGFibGUgZm9ybWF0IFwiK2YuY292ZXJhZ2UuZm9ybWF0KTt2YXIgZz1iLnN1YixoPXRoaXMuYmluU2VhcmNoKGYuY292ZXJhZ2UuZ2x5cGhzLGcpO2g8MCYmKGg9LTEtaCxmLmNvdmVyYWdlLmdseXBocy5zcGxpY2UoaCwwLGcpLGYuYWx0ZXJuYXRlU2V0cy5zcGxpY2UoaCwwLDApKSxmLmFsdGVybmF0ZVNldHNbaF09Yi5ieX0seWIucHJvdG90eXBlLmFkZExpZ2F0dXJlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZ2V0TG9va3VwVGFibGVzKGMsZCxhLDQsITApWzBdLGY9ZS5zdWJ0YWJsZXNbMF07Znx8KGY9e3N1YnN0Rm9ybWF0OjEsY292ZXJhZ2U6e2Zvcm1hdDoxLGdseXBoczpbXX0sbGlnYXR1cmVTZXRzOltdfSxlLnN1YnRhYmxlc1swXT1mKSx4ZS5hc3NlcnQoMT09PWYuY292ZXJhZ2UuZm9ybWF0LFwiTGlnYXR1cmU6IHVuYWJsZSB0byBtb2RpZnkgY292ZXJhZ2UgdGFibGUgZm9ybWF0IFwiK2YuY292ZXJhZ2UuZm9ybWF0KTt2YXIgZz1iLnN1YlswXSxoPWIuc3ViLnNsaWNlKDEpLGk9e2xpZ0dseXBoOmIuYnksY29tcG9uZW50czpofSxqPXRoaXMuYmluU2VhcmNoKGYuY292ZXJhZ2UuZ2x5cGhzLGcpO2lmKGo+PTApe2Zvcih2YXIgaz1mLmxpZ2F0dXJlU2V0c1tqXSxsPTA7bDxrLmxlbmd0aDtsKyspaWYoemIoa1tsXS5jb21wb25lbnRzLGgpKXJldHVybjtrLnB1c2goaSl9ZWxzZSBqPS0xLWosZi5jb3ZlcmFnZS5nbHlwaHMuc3BsaWNlKGosMCxnKSxmLmxpZ2F0dXJlU2V0cy5zcGxpY2UoaiwwLFtpXSl9LHliLnByb3RvdHlwZS5nZXRGZWF0dXJlPWZ1bmN0aW9uKGEsYixjKXtpZigvc3NcXGRcXGQvLnRlc3QoYSkpcmV0dXJuIHRoaXMuZ2V0U2luZ2xlKGEsYixjKTtzd2l0Y2goYSl7Y2FzZVwiYWFsdFwiOmNhc2VcInNhbHRcIjpyZXR1cm4gdGhpcy5nZXRTaW5nbGUoYSxiLGMpLmNvbmNhdCh0aGlzLmdldEFsdGVybmF0ZXMoYSxiLGMpKTtjYXNlXCJkbGlnXCI6Y2FzZVwibGlnYVwiOmNhc2VcInJsaWdcIjpyZXR1cm4gdGhpcy5nZXRMaWdhdHVyZXMoYSxiLGMpfX0seWIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhLGIsYyxkKXtpZigvc3NcXGRcXGQvLnRlc3QoYSkpcmV0dXJuIHRoaXMuYWRkU2luZ2xlKGEsYixjLGQpO3N3aXRjaChhKXtjYXNlXCJhYWx0XCI6Y2FzZVwic2FsdFwiOnJldHVyblwibnVtYmVyXCI9PXR5cGVvZiBiLmJ5P3RoaXMuYWRkU2luZ2xlKGEsYixjLGQpOnRoaXMuYWRkQWx0ZXJuYXRlKGEsYixjLGQpO2Nhc2VcImRsaWdcIjpjYXNlXCJsaWdhXCI6Y2FzZVwicmxpZ1wiOnJldHVybiB0aGlzLmFkZExpZ2F0dXJlKGEsYixjLGQpfX07dmFyIHJmLHNmLHRmLHVmLHZmPXtnZXRQYXRoOkpiLHBhcnNlOkxifSx3Zj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnNyUGVyaW9kLGM9dGhpcy5zclBoYXNlLGQ9dGhpcy5zclRocmVzaG9sZCxlPTE7cmV0dXJuIGE8MCYmKGE9LWEsZT0tMSksYSs9ZC1jLGE9TWF0aC50cnVuYyhhL2IpKmIsYSs9YyxhPDA/YyplOmEqZX0seGY9e3g6MSx5OjAsYXhpczpcInhcIixkaXN0YW5jZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYz9hLnhvOmEueCktKGQ/Yi54bzpiLngpfSxpbnRlcnBvbGF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztyZXR1cm4gZCYmZCE9PXRoaXM/KGU9ZC5kaXN0YW5jZShhLGIsITAsITApLGY9ZC5kaXN0YW5jZShhLGMsITAsITApLGk9ZC5kaXN0YW5jZShiLGIsITEsITApLGo9ZC5kaXN0YW5jZShjLGMsITEsITApLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkIHhmLnNldFJlbGF0aXZlKGEsYSwoaStqKS8yLGQsITApOnZvaWQgeGYuc2V0UmVsYXRpdmUoYSxhLChpKmgraipnKS9rLGQsITApKTooZT1hLnhvLWIueG8sZj1hLnhvLWMueG8saT1iLngtYi54byxqPWMueC1jLnhvLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkKGEueD1hLnhvKyhpK2opLzIpOnZvaWQoYS54PWEueG8rKGkqaCtqKmcpL2spKX0sbm9ybWFsU2xvcGU6TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHNldFJlbGF0aXZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoIWR8fGQ9PT10aGlzKXJldHVybiB2b2lkKGEueD0oZT9iLnhvOmIueCkrYyk7dmFyIGY9ZT9iLnhvOmIueCxnPWU/Yi55bzpiLnksaD1mK2MqZC54LGk9ZytjKmQueTthLng9aCsoYS55LWkpL2Qubm9ybWFsU2xvcGV9LHNsb3BlOjAsdG91Y2g6ZnVuY3Rpb24oYSl7YS54VG91Y2hlZD0hMH0sdG91Y2hlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS54VG91Y2hlZH0sdW50b3VjaDpmdW5jdGlvbihhKXthLnhUb3VjaGVkPSExfX0seWY9e3g6MCx5OjEsYXhpczpcInlcIixkaXN0YW5jZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYz9hLnlvOmEueSktKGQ/Yi55bzpiLnkpfSxpbnRlcnBvbGF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztyZXR1cm4gZCYmZCE9PXRoaXM/KGU9ZC5kaXN0YW5jZShhLGIsITAsITApLGY9ZC5kaXN0YW5jZShhLGMsITAsITApLGk9ZC5kaXN0YW5jZShiLGIsITEsITApLGo9ZC5kaXN0YW5jZShjLGMsITEsITApLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkIHlmLnNldFJlbGF0aXZlKGEsYSwoaStqKS8yLGQsITApOnZvaWQgeWYuc2V0UmVsYXRpdmUoYSxhLChpKmgraipnKS9rLGQsITApKTooZT1hLnlvLWIueW8sZj1hLnlvLWMueW8saT1iLnktYi55byxqPWMueS1jLnlvLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkKGEueT1hLnlvKyhpK2opLzIpOnZvaWQoYS55PWEueW8rKGkqaCtqKmcpL2spKX0sbm9ybWFsU2xvcGU6MCxzZXRSZWxhdGl2ZTpmdW5jdGlvbihhLGIsYyxkLGUpe2lmKCFkfHxkPT09dGhpcylyZXR1cm4gdm9pZChhLnk9KGU/Yi55bzpiLnkpK2MpO3ZhciBmPWU/Yi54bzpiLngsZz1lP2IueW86Yi55LGg9ZitjKmQueCxpPWcrYypkLnk7YS55PWkrZC5ub3JtYWxTbG9wZSooYS54LWgpfSxzbG9wZTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdG91Y2g6ZnVuY3Rpb24oYSl7YS55VG91Y2hlZD0hMH0sdG91Y2hlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS55VG91Y2hlZH0sdW50b3VjaDpmdW5jdGlvbihhKXthLnlUb3VjaGVkPSExfX07T2JqZWN0LmZyZWV6ZSh4ZiksT2JqZWN0LmZyZWV6ZSh5ZiksVGIucHJvdG90eXBlLmRpc3RhbmNlPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLngqeGYuZGlzdGFuY2UoYSxiLGMsZCkrdGhpcy55KnlmLmRpc3RhbmNlKGEsYixjLGQpfSxUYi5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7aWYoZz1kLmRpc3RhbmNlKGEsYiwhMCwhMCksaD1kLmRpc3RhbmNlKGEsYywhMCwhMCksZT1kLmRpc3RhbmNlKGIsYiwhMSwhMCksZj1kLmRpc3RhbmNlKGMsYywhMSwhMCksaT1NYXRoLmFicyhnKSxqPU1hdGguYWJzKGgpLDA9PT0oaz1pK2opKXJldHVybiB2b2lkIHRoaXMuc2V0UmVsYXRpdmUoYSxhLChlK2YpLzIsZCwhMCk7dGhpcy5zZXRSZWxhdGl2ZShhLGEsKGUqaitmKmkpL2ssZCwhMCl9LFRiLnByb3RvdHlwZS5zZXRSZWxhdGl2ZT1mdW5jdGlvbihhLGIsYyxkLGUpe2Q9ZHx8dGhpczt2YXIgZj1lP2IueG86Yi54LGc9ZT9iLnlvOmIueSxoPWYrYypkLngsaT1nK2MqZC55LGo9ZC5ub3JtYWxTbG9wZSxrPXRoaXMuc2xvcGUsbD1hLngsbT1hLnk7YS54PShrKmwtaipoK2ktbSkvKGstaiksYS55PWsqKGEueC1sKSttfSxUYi5wcm90b3R5cGUudG91Y2g9ZnVuY3Rpb24oYSl7YS54VG91Y2hlZD0hMCxhLnlUb3VjaGVkPSEwfSxWYi5wcm90b3R5cGUubmV4dFRvdWNoZWQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMubmV4dFBvaW50T25Db250b3VyOyFhLnRvdWNoZWQoYikmJmIhPT10aGlzOyliPWIubmV4dFBvaW50T25Db250b3VyO3JldHVybiBifSxWYi5wcm90b3R5cGUucHJldlRvdWNoZWQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMucHJldlBvaW50T25Db250b3VyOyFhLnRvdWNoZWQoYikmJmIhPT10aGlzOyliPWIucHJldlBvaW50T25Db250b3VyO3JldHVybiBifTt2YXIgemY9T2JqZWN0LmZyZWV6ZShuZXcgVmIoMCwwKSksQWY9e2N2Q3V0SW46MTcvMTYsZGVsdGFCYXNlOjksZGVsdGFTaGlmdDouMTI1LGxvb3A6MSxtaW5EaXM6MSxhdXRvRmxpcDohMH07TWIucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oYixjKXtpZihcIm51bWJlclwiIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3IoXCJQb2ludCBzaXplIGlzIG5vdCBhIG51bWJlciFcIik7aWYoISh0aGlzLl9lcnJvclN0YXRlPjIpKXt2YXIgZD10aGlzLmZvbnQsZT10aGlzLl9wcmVwU3RhdGU7aWYoIWV8fGUucHBlbSE9PWMpe3ZhciBmPXRoaXMuX2ZwZ21TdGF0ZTtpZighZil7V2IucHJvdG90eXBlPUFmLGY9dGhpcy5fZnBnbVN0YXRlPW5ldyBXYihcImZwZ21cIixkLnRhYmxlcy5mcGdtKSxmLmZ1bmNzPVtdLGYuZm9udD1kLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgRlBHTS0tLVwiKSxmLnN0ZXA9LTEpO3RyeXtzZihmKX1jYXRjaChhKXtyZXR1cm4gY29uc29sZS5sb2coXCJIaW50aW5nIGVycm9yIGluIEZQR006XCIrYSksdm9pZCh0aGlzLl9lcnJvclN0YXRlPTMpfX1XYi5wcm90b3R5cGU9ZixlPXRoaXMuX3ByZXBTdGF0ZT1uZXcgV2IoXCJwcmVwXCIsZC50YWJsZXMucHJlcCksZS5wcGVtPWM7dmFyIGc9ZC50YWJsZXMuY3Z0O2lmKGcpZm9yKHZhciBoPWUuY3Z0PW5ldyBBcnJheShnLmxlbmd0aCksaT1jL2QudW5pdHNQZXJFbSxqPTA7ajxnLmxlbmd0aDtqKyspaFtqXT1nW2pdKmk7ZWxzZSBlLmN2dD1bXTthLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIFBSRVAtLS1cIiksZS5zdGVwPS0xKTt0cnl7c2YoZSl9Y2F0Y2goYSl7dGhpcy5fZXJyb3JTdGF0ZTwyJiZjb25zb2xlLmxvZyhcIkhpbnRpbmcgZXJyb3IgaW4gUFJFUDpcIithKSx0aGlzLl9lcnJvclN0YXRlPTJ9fWlmKCEodGhpcy5fZXJyb3JTdGF0ZT4xKSl0cnl7cmV0dXJuIHRmKGIsZSl9Y2F0Y2goYSl7cmV0dXJuIHRoaXMuX2Vycm9yU3RhdGU8MSYmKGNvbnNvbGUubG9nKFwiSGludGluZyBlcnJvcjpcIithKSxjb25zb2xlLmxvZyhcIk5vdGU6IGZ1cnRoZXIgaGludGluZyBlcnJvcnMgYXJlIHNpbGVuY2VkXCIpKSx2b2lkKHRoaXMuX2Vycm9yU3RhdGU9MSl9fX0sdGY9ZnVuY3Rpb24oYixjKXt2YXIgZCxlLGYsZz1jLnBwZW0vYy5mb250LnVuaXRzUGVyRW0saD1nLGk9Yi5jb21wb25lbnRzO2lmKFdiLnByb3RvdHlwZT1jLGkpe3ZhciBqPWMuZm9udDtlPVtdLGQ9W107Zm9yKHZhciBrPTA7azxpLmxlbmd0aDtrKyspe3ZhciBsPWlba10sbT1qLmdseXBocy5nZXQobC5nbHlwaEluZGV4KTtmPW5ldyBXYihcImdseWZcIixtLmluc3RydWN0aW9ucyksYS5ERUJVRyYmKGNvbnNvbGUubG9nKFwiLS0tRVhFQyBDT01QIFwiK2srXCItLS1cIiksZi5zdGVwPS0xKSx1ZihtLGYsZyxoKTtmb3IodmFyIG49TWF0aC5yb3VuZChsLmR4KmcpLG89TWF0aC5yb3VuZChsLmR5KmgpLHA9Zi5nWm9uZSxxPWYuY29udG91cnMscj0wO3I8cC5sZW5ndGg7cisrKXt2YXIgcz1wW3JdO3MueFRvdWNoZWQ9cy55VG91Y2hlZD0hMSxzLnhvPXMueD1zLngrbixzLnlvPXMueT1zLnkrb312YXIgdD1lLmxlbmd0aDtlLnB1c2guYXBwbHkoZSxwKTtmb3IodmFyIHU9MDt1PHEubGVuZ3RoO3UrKylkLnB1c2gocVt1XSt0KX1iLmluc3RydWN0aW9ucyYmIWYuaW5oaWJpdEdyaWRGaXQmJihmPW5ldyBXYihcImdseWZcIixiLmluc3RydWN0aW9ucyksZi5nWm9uZT1mLnowPWYuejE9Zi56Mj1lLGYuY29udG91cnM9ZCxlLnB1c2gobmV3IFZiKDAsMCksbmV3IFZiKE1hdGgucm91bmQoYi5hZHZhbmNlV2lkdGgqZyksMCkpLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgQ09NUE9TSVRFLS0tXCIpLGYuc3RlcD0tMSksc2YoZiksZS5sZW5ndGgtPTIpfWVsc2UgZj1uZXcgV2IoXCJnbHlmXCIsYi5pbnN0cnVjdGlvbnMpLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgR0xZUEgtLS1cIiksZi5zdGVwPS0xKSx1ZihiLGYsZyxoKSxlPWYuZ1pvbmU7cmV0dXJuIGV9LHVmPWZ1bmN0aW9uKGIsYyxkLGUpe2Zvcih2YXIgZixnPWIucG9pbnRzfHxbXSxoPWcubGVuZ3RoLGk9Yy5nWm9uZT1jLnowPWMuejE9Yy56Mj1bXSxqPWMuY29udG91cnM9W10saz0wO2s8aDtrKyspZj1nW2tdLGlba109bmV3IFZiKGYueCpkLGYueSplLGYubGFzdFBvaW50T2ZDb250b3VyLGYub25DdXJ2ZSk7Zm9yKHZhciBsLG0sbj0wO248aDtuKyspZj1pW25dLGx8fChsPWYsai5wdXNoKG4pKSxmLmxhc3RQb2ludE9mQ29udG91cj8oZi5uZXh0UG9pbnRPbkNvbnRvdXI9bCxsLnByZXZQb2ludE9uQ29udG91cj1mLGw9dm9pZCAwKToobT1pW24rMV0sZi5uZXh0UG9pbnRPbkNvbnRvdXI9bSxtLnByZXZQb2ludE9uQ29udG91cj1mKTtpZighYy5pbmhpYml0R3JpZEZpdCl7aWYoYS5ERUJVRyl7Y29uc29sZS5sb2coXCJQUk9DRVNTSU5HIEdMWVBIXCIsYy5zdGFjayk7Zm9yKHZhciBvPTA7bzxoO28rKyljb25zb2xlLmxvZyhvLGlbb10ueCxpW29dLnkpfWlmKGkucHVzaChuZXcgVmIoMCwwKSxuZXcgVmIoTWF0aC5yb3VuZChiLmFkdmFuY2VXaWR0aCpkKSwwKSksc2YoYyksaS5sZW5ndGgtPTIsYS5ERUJVRyl7Y29uc29sZS5sb2coXCJGSU5JU0hFRCBHTFlQSFwiLGMuc3RhY2spO2Zvcih2YXIgcD0wO3A8aDtwKyspY29uc29sZS5sb2cocCxpW3BdLngsaVtwXS55KX19fSxzZj1mdW5jdGlvbihiKXt2YXIgYz1iLnByb2c7aWYoYyl7dmFyIGQsZT1jLmxlbmd0aDtmb3IoYi5pcD0wO2IuaXA8ZTtiLmlwKyspe2lmKGEuREVCVUcmJmIuc3RlcCsrLCEoZD1yZltjW2IuaXBdXSkpdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBpbnN0cnVjdGlvbjogMHhcIitOdW1iZXIoY1tiLmlwXSkudG9TdHJpbmcoMTYpKTtkKGIpfX19LHJmPVtaYi5iaW5kKHZvaWQgMCx5ZiksWmIuYmluZCh2b2lkIDAseGYpLCRiLmJpbmQodm9pZCAwLHlmKSwkYi5iaW5kKHZvaWQgMCx4ZiksX2IuYmluZCh2b2lkIDAseWYpLF9iLmJpbmQodm9pZCAwLHhmKSxhYy5iaW5kKHZvaWQgMCwwKSxhYy5iaW5kKHZvaWQgMCwxKSxiYy5iaW5kKHZvaWQgMCwwKSxiYy5iaW5kKHZvaWQgMCwxKSxjYyxkYyxlYyxmYyxnYyxoYyxpYyxqYyxrYyxsYyxtYyxuYyxvYyxwYyxxYyxyYyxzYyx0Yyx1Yyx2Yyx2b2lkIDAsdm9pZCAwLHdjLHhjLHljLHpjLEFjLERjLEVjLHZvaWQgMCx2b2lkIDAsdm9pZCAwLEJjLENjLEZjLHZvaWQgMCxHYy5iaW5kKHZvaWQgMCwwKSxHYy5iaW5kKHZvaWQgMCwxKSxIYy5iaW5kKHZvaWQgMCx5ZiksSGMuYmluZCh2b2lkIDAseGYpLEljLmJpbmQodm9pZCAwLDApLEljLmJpbmQodm9pZCAwLDEpLEpjLmJpbmQodm9pZCAwLDApLEpjLmJpbmQodm9pZCAwLDEpLEtjLmJpbmQodm9pZCAwLDApLEtjLmJpbmQodm9pZCAwLDEpLExjLE1jLE5jLmJpbmQodm9pZCAwLDApLE5jLmJpbmQodm9pZCAwLDEpLE9jLFBjLFFjLmJpbmQodm9pZCAwLDApLFFjLmJpbmQodm9pZCAwLDEpLFJjLFNjLFRjLFVjLFZjLFdjLFhjLmJpbmQodm9pZCAwLDApLFhjLmJpbmQodm9pZCAwLDEpLHZvaWQgMCxZYy5iaW5kKHZvaWQgMCwwKSxZYy5iaW5kKHZvaWQgMCwxKSxaYyx2b2lkIDAsJGMsdm9pZCAwLHZvaWQgMCxfYyxhZCxiZCxjZCxkZCxlZCxmZCxnZCxoZCxpZCxqZCxrZCxsZCxtZC5iaW5kKHZvaWQgMCwxKSxuZCxvZCxwZCxxZCxyZCxzZCx0ZCx1ZCx2ZCx3ZCx4ZC5iaW5kKHZvaWQgMCwwKSx4ZC5iaW5kKHZvaWQgMCwxKSx4ZC5iaW5kKHZvaWQgMCwyKSx4ZC5iaW5kKHZvaWQgMCwzKSx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAseWQsbWQuYmluZCh2b2lkIDAsMiksbWQuYmluZCh2b2lkIDAsMyksemQuYmluZCh2b2lkIDAsMSksemQuYmluZCh2b2lkIDAsMiksemQuYmluZCh2b2lkIDAsMyksQWQsQmQsdm9pZCAwLHZvaWQgMCxDZCx2b2lkIDAsRGQsRWQseGMseGMsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxGZCxHZC5iaW5kKHZvaWQgMCwwKSxHZC5iaW5kKHZvaWQgMCwxKSxIZCx2b2lkIDAsSWQsSmQsS2QsTGQsTWQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsTmQuYmluZCh2b2lkIDAsMSksTmQuYmluZCh2b2lkIDAsMiksTmQuYmluZCh2b2lkIDAsMyksTmQuYmluZCh2b2lkIDAsNCksTmQuYmluZCh2b2lkIDAsNSksTmQuYmluZCh2b2lkIDAsNiksTmQuYmluZCh2b2lkIDAsNyksTmQuYmluZCh2b2lkIDAsOCksT2QuYmluZCh2b2lkIDAsMSksT2QuYmluZCh2b2lkIDAsMiksT2QuYmluZCh2b2lkIDAsMyksT2QuYmluZCh2b2lkIDAsNCksT2QuYmluZCh2b2lkIDAsNSksT2QuYmluZCh2b2lkIDAsNiksT2QuYmluZCh2b2lkIDAsNyksT2QuYmluZCh2b2lkIDAsOCksUGQuYmluZCh2b2lkIDAsMCwwLDAsMCwwKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwwLDEpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDAsMiksUGQuYmluZCh2b2lkIDAsMCwwLDAsMCwzKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwxLDApLFBkLmJpbmQodm9pZCAwLDAsMCwwLDEsMSksUGQuYmluZCh2b2lkIDAsMCwwLDAsMSwyKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwxLDMpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDAsMCksUGQuYmluZCh2b2lkIDAsMCwwLDEsMCwxKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwwLDIpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDAsMyksUGQuYmluZCh2b2lkIDAsMCwwLDEsMSwwKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwxLDEpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDEsMiksUGQuYmluZCh2b2lkIDAsMCwwLDEsMSwzKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwwLDApLFBkLmJpbmQodm9pZCAwLDAsMSwwLDAsMSksUGQuYmluZCh2b2lkIDAsMCwxLDAsMCwyKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwwLDMpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDEsMCksUGQuYmluZCh2b2lkIDAsMCwxLDAsMSwxKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwxLDIpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDEsMyksUGQuYmluZCh2b2lkIDAsMCwxLDEsMCwwKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwwLDEpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDAsMiksUGQuYmluZCh2b2lkIDAsMCwxLDEsMCwzKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwxLDApLFBkLmJpbmQodm9pZCAwLDAsMSwxLDEsMSksUGQuYmluZCh2b2lkIDAsMCwxLDEsMSwyKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwxLDMpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDAsMCksUGQuYmluZCh2b2lkIDAsMSwwLDAsMCwxKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwwLDIpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDAsMyksUGQuYmluZCh2b2lkIDAsMSwwLDAsMSwwKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwxLDEpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDEsMiksUGQuYmluZCh2b2lkIDAsMSwwLDAsMSwzKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwwLDApLFBkLmJpbmQodm9pZCAwLDEsMCwxLDAsMSksUGQuYmluZCh2b2lkIDAsMSwwLDEsMCwyKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwwLDMpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDEsMCksUGQuYmluZCh2b2lkIDAsMSwwLDEsMSwxKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwxLDIpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDEsMyksUGQuYmluZCh2b2lkIDAsMSwxLDAsMCwwKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwwLDEpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDAsMiksUGQuYmluZCh2b2lkIDAsMSwxLDAsMCwzKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwxLDApLFBkLmJpbmQodm9pZCAwLDEsMSwwLDEsMSksUGQuYmluZCh2b2lkIDAsMSwxLDAsMSwyKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwxLDMpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDAsMCksUGQuYmluZCh2b2lkIDAsMSwxLDEsMCwxKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwwLDIpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDAsMyksUGQuYmluZCh2b2lkIDAsMSwxLDEsMSwwKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwxLDEpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDEsMiksUGQuYmluZCh2b2lkIDAsMSwxLDEsMSwzKV07dmFyIEJmPUFycmF5LmZyb218fGZ1bmN0aW9uKGEpe3JldHVybiBhLm1hdGNoKC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdP3xbXlxcdUQ4MDAtXFx1REZGRl18Li9nKXx8W119O1FkLnByb3RvdHlwZS5oYXNDaGFyPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09dGhpcy5lbmNvZGluZy5jaGFyVG9HbHlwaEluZGV4KGEpfSxRZC5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lbmNvZGluZy5jaGFyVG9HbHlwaEluZGV4KGEpfSxRZC5wcm90b3R5cGUuY2hhclRvR2x5cGg9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jaGFyVG9HbHlwaEluZGV4KGEpLGM9dGhpcy5nbHlwaHMuZ2V0KGIpO3JldHVybiBjfHwoYz10aGlzLmdseXBocy5nZXQoMCkpLGN9LFFkLnByb3RvdHlwZS5zdHJpbmdUb0dseXBocz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Yj1ifHx0aGlzLmRlZmF1bHRSZW5kZXJPcHRpb25zO2Zvcih2YXIgZD1CZihhKSxlPVtdLGY9MDtmPGQubGVuZ3RoO2YrPTEpe3ZhciBnPWRbZl07ZS5wdXNoKGMuY2hhclRvR2x5cGhJbmRleChnKSl9dmFyIGg9ZS5sZW5ndGg7aWYoYi5mZWF0dXJlcyl7dmFyIGk9Yi5zY3JpcHR8fHRoaXMuc3Vic3RpdHV0aW9uLmdldERlZmF1bHRTY3JpcHROYW1lKCksaj1bXTtiLmZlYXR1cmVzLmxpZ2EmJihqPWouY29uY2F0KHRoaXMuc3Vic3RpdHV0aW9uLmdldEZlYXR1cmUoXCJsaWdhXCIsaSxiLmxhbmd1YWdlKSkpLGIuZmVhdHVyZXMucmxpZyYmKGo9ai5jb25jYXQodGhpcy5zdWJzdGl0dXRpb24uZ2V0RmVhdHVyZShcInJsaWdcIixpLGIubGFuZ3VhZ2UpKSk7Zm9yKHZhciBrPTA7azxoO2srPTEpZm9yKHZhciBsPTA7bDxqLmxlbmd0aDtsKyspe2Zvcih2YXIgbT1qW2xdLG49bS5zdWIsbz1uLmxlbmd0aCxwPTA7cDxvJiZuW3BdPT09ZVtrK3BdOylwKys7cD09PW8mJihlLnNwbGljZShrLG8sbS5ieSksaD1oLW8rMSl9fWZvcih2YXIgcT1uZXcgQXJyYXkoaCkscj10aGlzLmdseXBocy5nZXQoMCkscz0wO3M8aDtzKz0xKXFbc109Yy5nbHlwaHMuZ2V0KGVbc10pfHxyO3JldHVybiBxfSxRZC5wcm90b3R5cGUubmFtZVRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nbHlwaE5hbWVzLm5hbWVUb0dseXBoSW5kZXgoYSl9LFFkLnByb3RvdHlwZS5uYW1lVG9HbHlwaD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm5hbWVUb0dseXBoSW5kZXgoYSksYz10aGlzLmdseXBocy5nZXQoYik7cmV0dXJuIGN8fChjPXRoaXMuZ2x5cGhzLmdldCgwKSksY30sUWQucHJvdG90eXBlLmdseXBoSW5kZXhUb05hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ2x5cGhOYW1lcy5nbHlwaEluZGV4VG9OYW1lP3RoaXMuZ2x5cGhOYW1lcy5nbHlwaEluZGV4VG9OYW1lKGEpOlwiXCJ9LFFkLnByb3RvdHlwZS5nZXRLZXJuaW5nVmFsdWU9ZnVuY3Rpb24oYSxiKXthPWEuaW5kZXh8fGEsYj1iLmluZGV4fHxiO3ZhciBjPXRoaXMucG9zaXRpb24uZGVmYXVsdEtlcm5pbmdUYWJsZXM7cmV0dXJuIGM/dGhpcy5wb3NpdGlvbi5nZXRLZXJuaW5nVmFsdWUoYyxhLGIpOnRoaXMua2VybmluZ1BhaXJzW2ErXCIsXCIrYl18fDB9LFFkLnByb3RvdHlwZS5kZWZhdWx0UmVuZGVyT3B0aW9ucz17a2VybmluZzohMCxmZWF0dXJlczp7bGlnYTohMCxybGlnOiEwfX0sUWQucHJvdG90eXBlLmZvckVhY2hHbHlwaD1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9dGhpcztiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD12b2lkIDAhPT1kP2Q6NzIsZT1lfHx0aGlzLmRlZmF1bHRSZW5kZXJPcHRpb25zO3ZhciBoLGk9MS90aGlzLnVuaXRzUGVyRW0qZCxqPXRoaXMuc3RyaW5nVG9HbHlwaHMoYSxlKTtpZihlLmtlcm5pbmcpe3ZhciBrPWUuc2NyaXB0fHx0aGlzLnBvc2l0aW9uLmdldERlZmF1bHRTY3JpcHROYW1lKCk7aD10aGlzLnBvc2l0aW9uLmdldEtlcm5pbmdUYWJsZXMoayxlLmxhbmd1YWdlKX1mb3IodmFyIGw9MDtsPGoubGVuZ3RoO2wrPTEpe3ZhciBtPWpbbF07aWYoZi5jYWxsKGcsbSxiLGMsZCxlKSxtLmFkdmFuY2VXaWR0aCYmKGIrPW0uYWR2YW5jZVdpZHRoKmkpLGUua2VybmluZyYmbDxqLmxlbmd0aC0xKXtiKz0oaD9nLnBvc2l0aW9uLmdldEtlcm5pbmdWYWx1ZShoLG0uaW5kZXgsaltsKzFdLmluZGV4KTpnLmdldEtlcm5pbmdWYWx1ZShtLGpbbCsxXSkpKml9ZS5sZXR0ZXJTcGFjaW5nP2IrPWUubGV0dGVyU3BhY2luZypkOmUudHJhY2tpbmcmJihiKz1lLnRyYWNraW5nLzFlMypkKX1yZXR1cm4gYn0sUWQucHJvdG90eXBlLmdldFBhdGg9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1uZXcgcjtyZXR1cm4gdGhpcy5mb3JFYWNoR2x5cGgoYSxiLGMsZCxlLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBnPWEuZ2V0UGF0aChiLGMsZCxlLHRoaXMpO2YuZXh0ZW5kKGcpfSksZn0sUWQucHJvdG90eXBlLmdldFBhdGhzPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9W107cmV0dXJuIHRoaXMuZm9yRWFjaEdseXBoKGEsYixjLGQsZSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZz1hLmdldFBhdGgoYixjLGQsZSx0aGlzKTtmLnB1c2goZyl9KSxmfSxRZC5wcm90b3R5cGUuZ2V0QWR2YW5jZVdpZHRoPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5mb3JFYWNoR2x5cGgoYSwwLDAsYixjLGZ1bmN0aW9uKCl7fSl9LFFkLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmdldFBhdGgoYixjLGQsZSxmKS5kcmF3KGEpfSxRZC5wcm90b3R5cGUuZHJhd1BvaW50cz1mdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5mb3JFYWNoR2x5cGgoYixjLGQsZSxmLGZ1bmN0aW9uKGIsYyxkLGUpe2IuZHJhd1BvaW50cyhhLGMsZCxlKX0pfSxRZC5wcm90b3R5cGUuZHJhd01ldHJpY3M9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZm9yRWFjaEdseXBoKGIsYyxkLGUsZixmdW5jdGlvbihiLGMsZCxlKXtiLmRyYXdNZXRyaWNzKGEsYyxkLGUpfSl9LFFkLnByb3RvdHlwZS5nZXRFbmdsaXNoTmFtZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm5hbWVzW2FdO2lmKGIpcmV0dXJuIGIuZW59LFFkLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXt9ZnVuY3Rpb24gYihiKXt2YXIgZD1jLmdldEVuZ2xpc2hOYW1lKGIpO2EoZCYmZC50cmltKCkubGVuZ3RoPjAsXCJObyBFbmdsaXNoIFwiK2IrXCIgc3BlY2lmaWVkLlwiKX12YXIgYz10aGlzO2IoXCJmb250RmFtaWx5XCIpLGIoXCJ3ZWlnaHROYW1lXCIpLGIoXCJtYW51ZmFjdHVyZXJcIiksYihcImNvcHlyaWdodFwiKSxiKFwidmVyc2lvblwiKSxhKHRoaXMudW5pdHNQZXJFbT4wLFwiTm8gdW5pdHNQZXJFbSBzcGVjaWZpZWQuXCIpfSxRZC5wcm90b3R5cGUudG9UYWJsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gcWYuZm9udFRvVGFibGUodGhpcyl9LFFkLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oXCJGb250LnRvQnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBGb250LnRvQXJyYXlCdWZmZXIgaW5zdGVhZC5cIiksdGhpcy50b0FycmF5QnVmZmVyKCl9LFFkLnByb3RvdHlwZS50b0FycmF5QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMudG9UYWJsZXMoKSxiPWEuZW5jb2RlKCksYz1uZXcgQXJyYXlCdWZmZXIoYi5sZW5ndGgpLGQ9bmV3IFVpbnQ4QXJyYXkoYyksZT0wO2U8Yi5sZW5ndGg7ZSsrKWRbZV09YltlXTtyZXR1cm4gY30sUWQucHJvdG90eXBlLmRvd25sb2FkPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuZ2V0RW5nbGlzaE5hbWUoXCJmb250RmFtaWx5XCIpLGQ9dGhpcy5nZXRFbmdsaXNoTmFtZShcImZvbnRTdWJmYW1pbHlcIik7YT1hfHxjLnJlcGxhY2UoL1xccy9nLFwiXCIpK1wiLVwiK2QrXCIub3RmXCI7dmFyIGU9dGhpcy50b0FycmF5QnVmZmVyKCk7aWYoQmIoKSl3aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW09d2luZG93LnJlcXVlc3RGaWxlU3lzdGVtfHx3aW5kb3cud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0sd2luZG93LnJlcXVlc3RGaWxlU3lzdGVtKHdpbmRvdy5URU1QT1JBUlksZS5ieXRlTGVuZ3RoLGZ1bmN0aW9uKGIpe2Iucm9vdC5nZXRGaWxlKGEse2NyZWF0ZTohMH0sZnVuY3Rpb24oYSl7YS5jcmVhdGVXcml0ZXIoZnVuY3Rpb24oYil7dmFyIGM9bmV3IERhdGFWaWV3KGUpLGQ9bmV3IEJsb2IoW2NdLHt0eXBlOlwiZm9udC9vcGVudHlwZVwifSk7Yi53cml0ZShkKSxiLmFkZEV2ZW50TGlzdGVuZXIoXCJ3cml0ZWVuZFwiLGZ1bmN0aW9uKCl7bG9jYXRpb24uaHJlZj1hLnRvVVJMKCl9LCExKX0pfSl9LGZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihhLm5hbWUrXCI6IFwiK2EubWVzc2FnZSl9KTtlbHNle3ZhciBmPWIoXCJmc1wiKSxnPURiKGUpO2Yud3JpdGVGaWxlU3luYyhhLGcpfX0sUWQucHJvdG90eXBlLmZzU2VsZWN0aW9uVmFsdWVzPXtJVEFMSUM6MSxVTkRFUlNDT1JFOjIsTkVHQVRJVkU6NCxPVVRMSU5FRDo4LFNUUklLRU9VVDoxNixCT0xEOjMyLFJFR1VMQVI6NjQsVVNFUl9UWVBPX01FVFJJQ1M6MTI4LFdXUzoyNTYsT0JMSVFVRTo1MTJ9LFFkLnByb3RvdHlwZS51c1dpZHRoQ2xhc3Nlcz17VUxUUkFfQ09OREVOU0VEOjEsRVhUUkFfQ09OREVOU0VEOjIsQ09OREVOU0VEOjMsU0VNSV9DT05ERU5TRUQ6NCxNRURJVU06NSxTRU1JX0VYUEFOREVEOjYsRVhQQU5ERUQ6NyxFWFRSQV9FWFBBTkRFRDo4LFVMVFJBX0VYUEFOREVEOjl9LFFkLnByb3RvdHlwZS51c1dlaWdodENsYXNzZXM9e1RISU46MTAwLEVYVFJBX0xJR0hUOjIwMCxMSUdIVDozMDAsTk9STUFMOjQwMCxNRURJVU06NTAwLFNFTUlfQk9MRDo2MDAsQk9MRDo3MDAsRVhUUkFfQk9MRDo4MDAsQkxBQ0s6OTAwfTt2YXIgQ2Y9e21ha2U6V2QscGFyc2U6WGR9LERmPW5ldyBBcnJheSgxMCk7RGZbMV09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiAxPT09Yj97cG9zRm9ybWF0OjEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksdmFsdWU6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKCl9OjI9PT1iP3tcbnBvc0Zvcm1hdDoyLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHZhbHVlczp0aGlzLnBhcnNlVmFsdWVSZWNvcmRMaXN0KCl9OnZvaWQgeGUuYXNzZXJ0KCExLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogR1BPUyBsb29rdXAgdHlwZSAxIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIil9LERmWzJdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTt4ZS5hc3NlcnQoMT09PWJ8fDI9PT1iLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogR1BPUyBsb29rdXAgdHlwZSAyIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIik7dmFyIGM9dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksZD10aGlzLnBhcnNlVVNob3J0KCksZT10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWIpcmV0dXJue3Bvc0Zvcm1hdDpiLGNvdmVyYWdlOmMsdmFsdWVGb3JtYXQxOmQsdmFsdWVGb3JtYXQyOmUscGFpclNldHM6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEubGlzdChmdW5jdGlvbigpe3JldHVybntzZWNvbmRHbHlwaDp0aGlzLnBhcnNlVVNob3J0KCksdmFsdWUxOnRoaXMucGFyc2VWYWx1ZVJlY29yZChkKSx2YWx1ZTI6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKGUpfX0pKSl9O2lmKDI9PT1iKXt2YXIgZj10aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxnPXRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGg9dGhpcy5wYXJzZVVTaG9ydCgpLGk9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntwb3NGb3JtYXQ6Yixjb3ZlcmFnZTpjLHZhbHVlRm9ybWF0MTpkLHZhbHVlRm9ybWF0MjplLGNsYXNzRGVmMTpmLGNsYXNzRGVmMjpnLGNsYXNzMUNvdW50OmgsY2xhc3MyQ291bnQ6aSxjbGFzc1JlY29yZHM6dGhpcy5wYXJzZUxpc3QoaCxRLmxpc3QoaSxmdW5jdGlvbigpe3JldHVybnt2YWx1ZTE6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKGQpLHZhbHVlMjp0aGlzLnBhcnNlVmFsdWVSZWNvcmQoZSl9fSkpfX19LERmWzNdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgMyBub3Qgc3VwcG9ydGVkXCJ9fSxEZls0XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDQgbm90IHN1cHBvcnRlZFwifX0sRGZbNV09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA1IG5vdCBzdXBwb3J0ZWRcIn19LERmWzZdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgNiBub3Qgc3VwcG9ydGVkXCJ9fSxEZls3XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDcgbm90IHN1cHBvcnRlZFwifX0sRGZbOF09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA4IG5vdCBzdXBwb3J0ZWRcIn19LERmWzldPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgOSBub3Qgc3VwcG9ydGVkXCJ9fTt2YXIgRWY9bmV3IEFycmF5KDEwKSxGZj17cGFyc2U6WWQsbWFrZTpaZH0sR2Y9e3BhcnNlOmFlfSxIZj17cGFyc2U6YmV9O2EuRm9udD1RZCxhLkdseXBoPWNhLGEuUGF0aD1yLGEuQm91bmRpbmdCb3g9cSxhLl9wYXJzZT1MZSxhLnBhcnNlPWhlLGEubG9hZD1pZSxhLmxvYWRTeW5jPWplLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSl9KS5jYWxsKHRoaXMsYihcImJ1ZmZlclwiKS5CdWZmZXIpfSx7YnVmZmVyOjMsZnM6Mn1dLDExOltmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZCgpe3Rocm93IG5ldyBFcnJvcihcInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gZSgpe3Rocm93IG5ldyBFcnJvcihcImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBmKGEpe2lmKGw9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGEsMCk7aWYoKGw9PT1kfHwhbCkmJnNldFRpbWVvdXQpcmV0dXJuIGw9c2V0VGltZW91dCxzZXRUaW1lb3V0KGEsMCk7dHJ5e3JldHVybiBsKGEsMCl9Y2F0Y2goYil7dHJ5e3JldHVybiBsLmNhbGwobnVsbCxhLDApfWNhdGNoKGIpe3JldHVybiBsLmNhbGwodGhpcyxhLDApfX19ZnVuY3Rpb24gZyhhKXtpZihtPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoYSk7aWYoKG09PT1lfHwhbSkmJmNsZWFyVGltZW91dClyZXR1cm4gbT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGEpO3RyeXtyZXR1cm4gbShhKX1jYXRjaChiKXt0cnl7cmV0dXJuIG0uY2FsbChudWxsLGEpfWNhdGNoKGIpe3JldHVybiBtLmNhbGwodGhpcyxhKX19fWZ1bmN0aW9uIGgoKXtxJiZvJiYocT0hMSxvLmxlbmd0aD9wPW8uY29uY2F0KHApOnI9LTEscC5sZW5ndGgmJmkoKSl9ZnVuY3Rpb24gaSgpe2lmKCFxKXt2YXIgYT1mKGgpO3E9ITA7Zm9yKHZhciBiPXAubGVuZ3RoO2I7KXtmb3Iobz1wLHA9W107KytyPGI7KW8mJm9bcl0ucnVuKCk7cj0tMSxiPXAubGVuZ3RofW89bnVsbCxxPSExLGcoYSl9fWZ1bmN0aW9uIGooYSxiKXt0aGlzLmZ1bj1hLHRoaXMuYXJyYXk9Yn1mdW5jdGlvbiBrKCl7fXZhciBsLG0sbj1iLmV4cG9ydHM9e307IWZ1bmN0aW9uKCl7dHJ5e2w9XCJmdW5jdGlvblwiPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OmR9Y2F0Y2goYSl7bD1kfXRyeXttPVwiZnVuY3Rpb25cIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6ZX1jYXRjaChhKXttPWV9fSgpO3ZhciBvLHA9W10scT0hMSxyPS0xO24ubmV4dFRpY2s9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYltjLTFdPWFyZ3VtZW50c1tjXTtwLnB1c2gobmV3IGooYSxiKSksMSE9PXAubGVuZ3RofHxxfHxmKGkpfSxqLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxuLnRpdGxlPVwiYnJvd3NlclwiLG4uYnJvd3Nlcj0hMCxuLmVudj17fSxuLmFyZ3Y9W10sbi52ZXJzaW9uPVwiXCIsbi52ZXJzaW9ucz17fSxuLm9uPWssbi5hZGRMaXN0ZW5lcj1rLG4ub25jZT1rLG4ub2ZmPWssbi5yZW1vdmVMaXN0ZW5lcj1rLG4ucmVtb3ZlQWxsTGlzdGVuZXJzPWssbi5lbWl0PWssbi5wcmVwZW5kTGlzdGVuZXI9ayxuLnByZXBlbmRPbmNlTGlzdGVuZXI9ayxuLmxpc3RlbmVycz1mdW5jdGlvbihhKXtyZXR1cm5bXX0sbi5iaW5kaW5nPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpfSxuLmN3ZD1mdW5jdGlvbigpe3JldHVyblwiL1wifSxuLmNoZGlyPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZFwiKX0sbi51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0se31dLDEyOltmdW5jdGlvbihhLGIsYyl7IWZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPVN0cmluZyhhKSksL1teYS16MC05XFwtIyQlJicqKy5cXF5fYHx+XS9pLnRlc3QoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lXCIpO3JldHVybiBhLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gYyhhKXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9U3RyaW5nKGEpKSxhfWZ1bmN0aW9uIGQoYSl7dmFyIGI9e25leHQ6ZnVuY3Rpb24oKXt2YXIgYj1hLnNoaWZ0KCk7cmV0dXJue2RvbmU6dm9pZCAwPT09Yix2YWx1ZTpifX19O3JldHVybiByLml0ZXJhYmxlJiYoYltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxifWZ1bmN0aW9uIGUoYSl7dGhpcy5tYXA9e30sYSBpbnN0YW5jZW9mIGU/YS5mb3JFYWNoKGZ1bmN0aW9uKGEsYil7dGhpcy5hcHBlbmQoYixhKX0sdGhpcyk6QXJyYXkuaXNBcnJheShhKT9hLmZvckVhY2goZnVuY3Rpb24oYSl7dGhpcy5hcHBlbmQoYVswXSxhWzFdKX0sdGhpcyk6YSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZm9yRWFjaChmdW5jdGlvbihiKXt0aGlzLmFwcGVuZChiLGFbYl0pfSx0aGlzKX1mdW5jdGlvbiBmKGEpe2lmKGEuYm9keVVzZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoXCJBbHJlYWR5IHJlYWRcIikpO2EuYm9keVVzZWQ9ITB9ZnVuY3Rpb24gZyhhKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYixjKXthLm9ubG9hZD1mdW5jdGlvbigpe2IoYS5yZXN1bHQpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXtjKGEuZXJyb3IpfX0pfWZ1bmN0aW9uIGgoYSl7dmFyIGI9bmV3IEZpbGVSZWFkZXIsYz1nKGIpO3JldHVybiBiLnJlYWRBc0FycmF5QnVmZmVyKGEpLGN9ZnVuY3Rpb24gaShhKXt2YXIgYj1uZXcgRmlsZVJlYWRlcixjPWcoYik7cmV0dXJuIGIucmVhZEFzVGV4dChhKSxjfWZ1bmN0aW9uIGooYSl7Zm9yKHZhciBiPW5ldyBVaW50OEFycmF5KGEpLGM9bmV3IEFycmF5KGIubGVuZ3RoKSxkPTA7ZDxiLmxlbmd0aDtkKyspY1tkXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGJbZF0pO3JldHVybiBjLmpvaW4oXCJcIil9ZnVuY3Rpb24gayhhKXtpZihhLnNsaWNlKXJldHVybiBhLnNsaWNlKDApO3ZhciBiPW5ldyBVaW50OEFycmF5KGEuYnl0ZUxlbmd0aCk7cmV0dXJuIGIuc2V0KG5ldyBVaW50OEFycmF5KGEpKSxiLmJ1ZmZlcn1mdW5jdGlvbiBsKCl7cmV0dXJuIHRoaXMuYm9keVVzZWQ9ITEsdGhpcy5faW5pdEJvZHk9ZnVuY3Rpb24oYSl7aWYodGhpcy5fYm9keUluaXQ9YSxhKWlmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXRoaXMuX2JvZHlUZXh0PWE7ZWxzZSBpZihyLmJsb2ImJkJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkpdGhpcy5fYm9keUJsb2I9YTtlbHNlIGlmKHIuZm9ybURhdGEmJkZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpKXRoaXMuX2JvZHlGb3JtRGF0YT1hO2Vsc2UgaWYoci5zZWFyY2hQYXJhbXMmJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSl0aGlzLl9ib2R5VGV4dD1hLnRvU3RyaW5nKCk7ZWxzZSBpZihyLmFycmF5QnVmZmVyJiZyLmJsb2ImJnQoYSkpdGhpcy5fYm9keUFycmF5QnVmZmVyPWsoYS5idWZmZXIpLHRoaXMuX2JvZHlJbml0PW5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKTtlbHNle2lmKCFyLmFycmF5QnVmZmVyfHwhQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkmJiF1KGEpKXRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIEJvZHlJbml0IHR5cGVcIik7dGhpcy5fYm9keUFycmF5QnVmZmVyPWsoYSl9ZWxzZSB0aGlzLl9ib2R5VGV4dD1cIlwiO3RoaXMuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIil8fChcInN0cmluZ1wiPT10eXBlb2YgYT90aGlzLmhlYWRlcnMuc2V0KFwiY29udGVudC10eXBlXCIsXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLThcIik6dGhpcy5fYm9keUJsb2ImJnRoaXMuX2JvZHlCbG9iLnR5cGU/dGhpcy5oZWFkZXJzLnNldChcImNvbnRlbnQtdHlwZVwiLHRoaXMuX2JvZHlCbG9iLnR5cGUpOnIuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkmJnRoaXMuaGVhZGVycy5zZXQoXCJjb250ZW50LXR5cGVcIixcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04XCIpKX0sci5ibG9iJiYodGhpcy5ibG9iPWZ1bmN0aW9uKCl7dmFyIGE9Zih0aGlzKTtpZihhKXJldHVybiBhO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcihcImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYlwiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKX0sdGhpcy5hcnJheUJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib2R5QXJyYXlCdWZmZXI/Zih0aGlzKXx8UHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcik6dGhpcy5ibG9iKCkudGhlbihoKX0pLHRoaXMudGV4dD1mdW5jdGlvbigpe3ZhciBhPWYodGhpcyk7aWYoYSlyZXR1cm4gYTtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gaSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUoaih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKFwiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0XCIpO3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpfSxyLmZvcm1EYXRhJiYodGhpcy5mb3JtRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKG8pfSksdGhpcy5qc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSl9LHRoaXN9ZnVuY3Rpb24gbShhKXt2YXIgYj1hLnRvVXBwZXJDYXNlKCk7cmV0dXJuIHYuaW5kZXhPZihiKT4tMT9iOmF9ZnVuY3Rpb24gbihhLGIpe2I9Ynx8e307dmFyIGM9Yi5ib2R5O2lmKGEgaW5zdGFuY2VvZiBuKXtpZihhLmJvZHlVc2VkKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBbHJlYWR5IHJlYWRcIik7dGhpcy51cmw9YS51cmwsdGhpcy5jcmVkZW50aWFscz1hLmNyZWRlbnRpYWxzLGIuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgZShhLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1hLm1ldGhvZCx0aGlzLm1vZGU9YS5tb2RlLGN8fG51bGw9PWEuX2JvZHlJbml0fHwoYz1hLl9ib2R5SW5pdCxhLmJvZHlVc2VkPSEwKX1lbHNlIHRoaXMudXJsPVN0cmluZyhhKTtpZih0aGlzLmNyZWRlbnRpYWxzPWIuY3JlZGVudGlhbHN8fHRoaXMuY3JlZGVudGlhbHN8fFwib21pdFwiLCFiLmhlYWRlcnMmJnRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgZShiLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1tKGIubWV0aG9kfHx0aGlzLm1ldGhvZHx8XCJHRVRcIiksdGhpcy5tb2RlPWIubW9kZXx8dGhpcy5tb2RlfHxudWxsLHRoaXMucmVmZXJyZXI9bnVsbCwoXCJHRVRcIj09PXRoaXMubWV0aG9kfHxcIkhFQURcIj09PXRoaXMubWV0aG9kKSYmYyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHNcIik7dGhpcy5faW5pdEJvZHkoYyl9ZnVuY3Rpb24gbyhhKXt2YXIgYj1uZXcgRm9ybURhdGE7cmV0dXJuIGEudHJpbSgpLnNwbGl0KFwiJlwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBjPWEuc3BsaXQoXCI9XCIpLGQ9Yy5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSxlPWMuam9pbihcIj1cIikucmVwbGFjZSgvXFwrL2csXCIgXCIpO2IuYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChkKSxkZWNvZGVVUklDb21wb25lbnQoZSkpfX0pLGJ9ZnVuY3Rpb24gcChhKXt2YXIgYj1uZXcgZTtyZXR1cm4gYS5zcGxpdCgvXFxyP1xcbi8pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGM9YS5zcGxpdChcIjpcIiksZD1jLnNoaWZ0KCkudHJpbSgpO2lmKGQpe3ZhciBlPWMuam9pbihcIjpcIikudHJpbSgpO2IuYXBwZW5kKGQsZSl9fSksYn1mdW5jdGlvbiBxKGEsYil7Ynx8KGI9e30pLHRoaXMudHlwZT1cImRlZmF1bHRcIix0aGlzLnN0YXR1cz1cInN0YXR1c1wiaW4gYj9iLnN0YXR1czoyMDAsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNUZXh0PVwic3RhdHVzVGV4dFwiaW4gYj9iLnN0YXR1c1RleHQ6XCJPS1wiLHRoaXMuaGVhZGVycz1uZXcgZShiLmhlYWRlcnMpLHRoaXMudXJsPWIudXJsfHxcIlwiLHRoaXMuX2luaXRCb2R5KGEpfWlmKCFhLmZldGNoKXt2YXIgcj17c2VhcmNoUGFyYW1zOlwiVVJMU2VhcmNoUGFyYW1zXCJpbiBhLGl0ZXJhYmxlOlwiU3ltYm9sXCJpbiBhJiZcIml0ZXJhdG9yXCJpbiBTeW1ib2wsYmxvYjpcIkZpbGVSZWFkZXJcImluIGEmJlwiQmxvYlwiaW4gYSYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBCbG9iLCEwfWNhdGNoKGEpe3JldHVybiExfX0oKSxmb3JtRGF0YTpcIkZvcm1EYXRhXCJpbiBhLGFycmF5QnVmZmVyOlwiQXJyYXlCdWZmZXJcImluIGF9O2lmKHIuYXJyYXlCdWZmZXIpdmFyIHM9W1wiW29iamVjdCBJbnQ4QXJyYXldXCIsXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCIsXCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiLFwiW29iamVjdCBJbnQxNkFycmF5XVwiLFwiW29iamVjdCBVaW50MTZBcnJheV1cIixcIltvYmplY3QgSW50MzJBcnJheV1cIixcIltvYmplY3QgVWludDMyQXJyYXldXCIsXCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIixcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiXSx0PWZ1bmN0aW9uKGEpe3JldHVybiBhJiZEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKX0sdT1BcnJheUJ1ZmZlci5pc1ZpZXd8fGZ1bmN0aW9uKGEpe3JldHVybiBhJiZzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpKT4tMX07ZS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGEsZCl7YT1iKGEpLGQ9YyhkKTt2YXIgZT10aGlzLm1hcFthXTt0aGlzLm1hcFthXT1lP2UrXCIsXCIrZDpkfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMubWFwW2IoYSldfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YihhKSx0aGlzLmhhcyhhKT90aGlzLm1hcFthXTpudWxsfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KGIoYSkpfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxkKXt0aGlzLm1hcFtiKGEpXT1jKGQpfSxlLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjIGluIHRoaXMubWFwKXRoaXMubWFwLmhhc093blByb3BlcnR5KGMpJiZhLmNhbGwoYix0aGlzLm1hcFtjXSxjLHRoaXMpfSxlLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihiLGMpe2EucHVzaChjKX0pLGQoYSl9LGUucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oYil7YS5wdXNoKGIpfSksZChhKX0sZS5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oYixjKXthLnB1c2goW2MsYl0pfSksZChhKX0sci5pdGVyYWJsZSYmKGUucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09ZS5wcm90b3R5cGUuZW50cmllcyk7dmFyIHY9W1wiREVMRVRFXCIsXCJHRVRcIixcIkhFQURcIixcIk9QVElPTlNcIixcIlBPU1RcIixcIlBVVFwiXTtuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHtib2R5OnRoaXMuX2JvZHlJbml0fSl9LGwuY2FsbChuLnByb3RvdHlwZSksbC5jYWxsKHEucHJvdG90eXBlKSxxLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcSh0aGlzLl9ib2R5SW5pdCx7c3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dGhpcy5zdGF0dXNUZXh0LGhlYWRlcnM6bmV3IGUodGhpcy5oZWFkZXJzKSx1cmw6dGhpcy51cmx9KX0scS5lcnJvcj1mdW5jdGlvbigpe3ZhciBhPW5ldyBxKG51bGwse3N0YXR1czowLHN0YXR1c1RleHQ6XCJcIn0pO3JldHVybiBhLnR5cGU9XCJlcnJvclwiLGF9O3ZhciB3PVszMDEsMzAyLDMwMywzMDcsMzA4XTtxLnJlZGlyZWN0PWZ1bmN0aW9uKGEsYil7aWYoLTE9PT13LmluZGV4T2YoYikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHN0YXR1cyBjb2RlXCIpO3JldHVybiBuZXcgcShudWxsLHtzdGF0dXM6YixoZWFkZXJzOntsb2NhdGlvbjphfX0pfSxhLkhlYWRlcnM9ZSxhLlJlcXVlc3Q9bixhLlJlc3BvbnNlPXEsYS5mZXRjaD1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLGQpe3ZhciBlPW5ldyBuKGEsYiksZj1uZXcgWE1MSHR0cFJlcXVlc3Q7Zi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgYT17c3RhdHVzOmYuc3RhdHVzLHN0YXR1c1RleHQ6Zi5zdGF0dXNUZXh0LGhlYWRlcnM6cChmLmdldEFsbFJlc3BvbnNlSGVhZGVycygpfHxcIlwiKX07YS51cmw9XCJyZXNwb25zZVVSTFwiaW4gZj9mLnJlc3BvbnNlVVJMOmEuaGVhZGVycy5nZXQoXCJYLVJlcXVlc3QtVVJMXCIpO3ZhciBiPVwicmVzcG9uc2VcImluIGY/Zi5yZXNwb25zZTpmLnJlc3BvbnNlVGV4dDtjKG5ldyBxKGIsYSkpfSxmLm9uZXJyb3I9ZnVuY3Rpb24oKXtkKG5ldyBUeXBlRXJyb3IoXCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkXCIpKX0sZi5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtkKG5ldyBUeXBlRXJyb3IoXCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkXCIpKX0sZi5vcGVuKGUubWV0aG9kLGUudXJsLCEwKSxcImluY2x1ZGVcIj09PWUuY3JlZGVudGlhbHMmJihmLndpdGhDcmVkZW50aWFscz0hMCksXCJyZXNwb25zZVR5cGVcImluIGYmJnIuYmxvYiYmKGYucmVzcG9uc2VUeXBlPVwiYmxvYlwiKSxlLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihhLGIpe2Yuc2V0UmVxdWVzdEhlYWRlcihiLGEpfSksZi5zZW5kKHZvaWQgMD09PWUuX2JvZHlJbml0P251bGw6ZS5fYm9keUluaXQpfSl9LGEuZmV0Y2gucG9seWZpbGw9ITB9fShcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpfSx7fV0sMTM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9jb3JlL21haW5cIik7YShcIi4vY29yZS9jb25zdGFudHNcIiksYShcIi4vY29yZS9lbnZpcm9ubWVudFwiKSxhKFwiLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksYShcIi4vY29yZS9oZWxwZXJzXCIpLGEoXCIuL2NvcmUvbGVnYWN5XCIpLGEoXCIuL2NvcmUvcDUuRWxlbWVudFwiKSxhKFwiLi9jb3JlL3A1LkdyYXBoaWNzXCIpLGEoXCIuL2NvcmUvcDUuUmVuZGVyZXJcIiksYShcIi4vY29yZS9wNS5SZW5kZXJlcjJEXCIpLGEoXCIuL2NvcmUvcmVuZGVyaW5nXCIpLGEoXCIuL2NvcmUvc2hpbVwiKSxhKFwiLi9jb3JlL3N0cnVjdHVyZVwiKSxhKFwiLi9jb3JlL3RyYW5zZm9ybVwiKSxhKFwiLi9jb3JlL3NoYXBlLzJkX3ByaW1pdGl2ZXNcIiksYShcIi4vY29yZS9zaGFwZS9hdHRyaWJ1dGVzXCIpLGEoXCIuL2NvcmUvc2hhcGUvY3VydmVzXCIpLGEoXCIuL2NvcmUvc2hhcGUvdmVydGV4XCIpLGEoXCIuL2NvbG9yL2NvbG9yX2NvbnZlcnNpb25cIiksYShcIi4vY29sb3IvY3JlYXRpbmdfcmVhZGluZ1wiKSxhKFwiLi9jb2xvci9wNS5Db2xvclwiKSxhKFwiLi9jb2xvci9zZXR0aW5nXCIpLGEoXCIuL2RhdGEvcDUuVHlwZWREaWN0XCIpLGEoXCIuL2V2ZW50cy9hY2NlbGVyYXRpb25cIiksYShcIi4vZXZlbnRzL2tleWJvYXJkXCIpLGEoXCIuL2V2ZW50cy9tb3VzZVwiKSxhKFwiLi9ldmVudHMvdG91Y2hcIiksYShcIi4vaW1hZ2UvZmlsdGVyc1wiKSxhKFwiLi9pbWFnZS9pbWFnZVwiKSxhKFwiLi9pbWFnZS9sb2FkaW5nX2Rpc3BsYXlpbmdcIiksYShcIi4vaW1hZ2UvcDUuSW1hZ2VcIiksYShcIi4vaW1hZ2UvcGl4ZWxzXCIpLGEoXCIuL2lvL2ZpbGVzXCIpLGEoXCIuL2lvL3A1LlRhYmxlXCIpLGEoXCIuL2lvL3A1LlRhYmxlUm93XCIpLGEoXCIuL2lvL3A1LlhNTFwiKSxhKFwiLi9tYXRoL2NhbGN1bGF0aW9uXCIpLGEoXCIuL21hdGgvbWF0aFwiKSxhKFwiLi9tYXRoL25vaXNlXCIpLGEoXCIuL21hdGgvcDUuVmVjdG9yXCIpLGEoXCIuL21hdGgvcmFuZG9tXCIpLGEoXCIuL21hdGgvdHJpZ29ub21ldHJ5XCIpLGEoXCIuL3R5cG9ncmFwaHkvYXR0cmlidXRlc1wiKSxhKFwiLi90eXBvZ3JhcGh5L2xvYWRpbmdfZGlzcGxheWluZ1wiKSxhKFwiLi90eXBvZ3JhcGh5L3A1LkZvbnRcIiksYShcIi4vdXRpbGl0aWVzL2FycmF5X2Z1bmN0aW9uc1wiKSxhKFwiLi91dGlsaXRpZXMvY29udmVyc2lvblwiKSxhKFwiLi91dGlsaXRpZXMvc3RyaW5nX2Z1bmN0aW9uc1wiKSxhKFwiLi91dGlsaXRpZXMvdGltZV9kYXRlXCIpLGEoXCIuL3dlYmdsLzNkX3ByaW1pdGl2ZXNcIiksYShcIi4vd2ViZ2wvaW50ZXJhY3Rpb25cIiksYShcIi4vd2ViZ2wvbGlnaHRcIiksYShcIi4vd2ViZ2wvbG9hZGluZ1wiKSxhKFwiLi93ZWJnbC9tYXRlcmlhbFwiKSxhKFwiLi93ZWJnbC9wNS5DYW1lcmFcIiksYShcIi4vd2ViZ2wvcDUuR2VvbWV0cnlcIiksYShcIi4vd2ViZ2wvcDUuTWF0cml4XCIpLGEoXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuSW1tZWRpYXRlXCIpLGEoXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0xcIiksYShcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5SZXRhaW5lZFwiKSxhKFwiLi93ZWJnbC9wNS5TaGFkZXJcIiksYShcIi4vd2ViZ2wvcDUuVGV4dHVyZVwiKSxhKFwiLi93ZWJnbC90ZXh0XCIpLGEoXCIuL2NvcmUvaW5pdFwiKSxiLmV4cG9ydHM9ZH0se1wiLi9jb2xvci9jb2xvcl9jb252ZXJzaW9uXCI6MTQsXCIuL2NvbG9yL2NyZWF0aW5nX3JlYWRpbmdcIjoxNSxcIi4vY29sb3IvcDUuQ29sb3JcIjoxNixcIi4vY29sb3Ivc2V0dGluZ1wiOjE3LFwiLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi9jb3JlL2Vudmlyb25tZW50XCI6MTksXCIuL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi9jb3JlL2hlbHBlcnNcIjoyMSxcIi4vY29yZS9pbml0XCI6MjIsXCIuL2NvcmUvbGVnYWN5XCI6MjMsXCIuL2NvcmUvbWFpblwiOjI0LFwiLi9jb3JlL3A1LkVsZW1lbnRcIjoyNSxcIi4vY29yZS9wNS5HcmFwaGljc1wiOjI2LFwiLi9jb3JlL3A1LlJlbmRlcmVyXCI6MjcsXCIuL2NvcmUvcDUuUmVuZGVyZXIyRFwiOjI4LFwiLi9jb3JlL3JlbmRlcmluZ1wiOjI5LFwiLi9jb3JlL3NoYXBlLzJkX3ByaW1pdGl2ZXNcIjozMCxcIi4vY29yZS9zaGFwZS9hdHRyaWJ1dGVzXCI6MzEsXCIuL2NvcmUvc2hhcGUvY3VydmVzXCI6MzIsXCIuL2NvcmUvc2hhcGUvdmVydGV4XCI6MzMsXCIuL2NvcmUvc2hpbVwiOjM0LFwiLi9jb3JlL3N0cnVjdHVyZVwiOjM1LFwiLi9jb3JlL3RyYW5zZm9ybVwiOjM2LFwiLi9kYXRhL3A1LlR5cGVkRGljdFwiOjM3LFwiLi9ldmVudHMvYWNjZWxlcmF0aW9uXCI6MzgsXCIuL2V2ZW50cy9rZXlib2FyZFwiOjM5LFwiLi9ldmVudHMvbW91c2VcIjo0MCxcIi4vZXZlbnRzL3RvdWNoXCI6NDEsXCIuL2ltYWdlL2ZpbHRlcnNcIjo0MixcIi4vaW1hZ2UvaW1hZ2VcIjo0MyxcIi4vaW1hZ2UvbG9hZGluZ19kaXNwbGF5aW5nXCI6NDQsXCIuL2ltYWdlL3A1LkltYWdlXCI6NDUsXCIuL2ltYWdlL3BpeGVsc1wiOjQ2LFwiLi9pby9maWxlc1wiOjQ3LFwiLi9pby9wNS5UYWJsZVwiOjQ4LFwiLi9pby9wNS5UYWJsZVJvd1wiOjQ5LFwiLi9pby9wNS5YTUxcIjo1MCxcIi4vbWF0aC9jYWxjdWxhdGlvblwiOjUxLFwiLi9tYXRoL21hdGhcIjo1MixcIi4vbWF0aC9ub2lzZVwiOjUzLFwiLi9tYXRoL3A1LlZlY3RvclwiOjU0LFwiLi9tYXRoL3JhbmRvbVwiOjU1LFwiLi9tYXRoL3RyaWdvbm9tZXRyeVwiOjU2LFwiLi90eXBvZ3JhcGh5L2F0dHJpYnV0ZXNcIjo1NyxcIi4vdHlwb2dyYXBoeS9sb2FkaW5nX2Rpc3BsYXlpbmdcIjo1OCxcIi4vdHlwb2dyYXBoeS9wNS5Gb250XCI6NTksXCIuL3V0aWxpdGllcy9hcnJheV9mdW5jdGlvbnNcIjo2MCxcIi4vdXRpbGl0aWVzL2NvbnZlcnNpb25cIjo2MSxcIi4vdXRpbGl0aWVzL3N0cmluZ19mdW5jdGlvbnNcIjo2MixcIi4vdXRpbGl0aWVzL3RpbWVfZGF0ZVwiOjYzLFwiLi93ZWJnbC8zZF9wcmltaXRpdmVzXCI6NjQsXCIuL3dlYmdsL2ludGVyYWN0aW9uXCI6NjUsXCIuL3dlYmdsL2xpZ2h0XCI6NjYsXCIuL3dlYmdsL2xvYWRpbmdcIjo2NyxcIi4vd2ViZ2wvbWF0ZXJpYWxcIjo2OCxcIi4vd2ViZ2wvcDUuQ2FtZXJhXCI6NjksXCIuL3dlYmdsL3A1Lkdlb21ldHJ5XCI6NzAsXCIuL3dlYmdsL3A1Lk1hdHJpeFwiOjcxLFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMXCI6NzQsXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuSW1tZWRpYXRlXCI6NzIsXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuUmV0YWluZWRcIjo3MyxcIi4vd2ViZ2wvcDUuU2hhZGVyXCI6NzUsXCIuL3dlYmdsL3A1LlRleHR1cmVcIjo3NixcIi4vd2ViZ2wvdGV4dFwiOjc3fV0sMTQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuQ29sb3JDb252ZXJzaW9uPXt9LGQuQ29sb3JDb252ZXJzaW9uLl9oc2JhVG9IU0xBPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGQ9YVsyXSxlPSgyLWMpKmQvMjtyZXR1cm4gMCE9PWUmJigxPT09ZT9jPTA6ZTwuNT9jLz0yLWM6Yz1jKmQvKDItMiplKSksW2IsYyxlLGFbM11dfSxkLkNvbG9yQ29udmVyc2lvbi5faHNiYVRvUkdCQT1mdW5jdGlvbihhKXt2YXIgYj02KmFbMF0sYz1hWzFdLGQ9YVsyXSxlPVtdO2lmKDA9PT1jKWU9W2QsZCxkLGFbM11dO2Vsc2V7dmFyIGYsZyxoLGk9TWF0aC5mbG9vcihiKSxqPWQqKDEtYyksaz1kKigxLWMqKGItaSkpLGw9ZCooMS1jKigxK2ktYikpOzE9PT1pPyhmPWssZz1kLGg9aik6Mj09PWk/KGY9aixnPWQsaD1sKTozPT09aT8oZj1qLGc9ayxoPWQpOjQ9PT1pPyhmPWwsZz1qLGg9ZCk6NT09PWk/KGY9ZCxnPWosaD1rKTooZj1kLGc9bCxoPWopLGU9W2YsZyxoLGFbM11dfXJldHVybiBlfSxkLkNvbG9yQ29udmVyc2lvbi5faHNsYVRvSFNCQT1mdW5jdGlvbihhKXt2YXIgYixjPWFbMF0sZD1hWzFdLGU9YVsyXTtyZXR1cm4gYj1lPC41PygxK2QpKmU6ZStkLWUqZCxkPTIqKGItZSkvYixbYyxkLGIsYVszXV19LGQuQ29sb3JDb252ZXJzaW9uLl9oc2xhVG9SR0JBPWZ1bmN0aW9uKGEpe3ZhciBiPTYqYVswXSxjPWFbMV0sZD1hWzJdLGU9W107aWYoMD09PWMpZT1bZCxkLGQsYVszXV07ZWxzZXt2YXIgZjtmPWQ8LjU/KDErYykqZDpkK2MtZCpjO3ZhciBnPTIqZC1mLGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPDA/YSs9NjphPj02JiYoYS09NiksYTwxP2IrKGMtYikqYTphPDM/YzphPDQ/YisoYy1iKSooNC1hKTpifTtlPVtoKGIrMixnLGYpLGgoYixnLGYpLGgoYi0yLGcsZiksYVszXV19cmV0dXJuIGV9LGQuQ29sb3JDb252ZXJzaW9uLl9yZ2JhVG9IU0JBPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hWzBdLGU9YVsxXSxmPWFbMl0sZz1NYXRoLm1heChkLGUsZiksaD1nLU1hdGgubWluKGQsZSxmKTtyZXR1cm4gMD09PWg/KGI9MCxjPTApOihjPWgvZyxkPT09Zz9iPShlLWYpL2g6ZT09PWc/Yj0yKyhmLWQpL2g6Zj09PWcmJihiPTQrKGQtZSkvaCksYjwwP2IrPTY6Yj49NiYmKGItPTYpKSxbYi82LGMsZyxhWzNdXX0sZC5Db2xvckNvbnZlcnNpb24uX3JnYmFUb0hTTEE9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPWFbMF0sZT1hWzFdLGY9YVsyXSxnPU1hdGgubWF4KGQsZSxmKSxoPU1hdGgubWluKGQsZSxmKSxpPWcraCxqPWctaDtyZXR1cm4gMD09PWo/KGI9MCxjPTApOihjPWk8MT9qL2k6ai8oMi1pKSxkPT09Zz9iPShlLWYpL2o6ZT09PWc/Yj0yKyhmLWQpL2o6Zj09PWcmJihiPTQrKGQtZSkvaiksYjwwP2IrPTY6Yj49NiYmKGItPTYpKSxbYi82LGMsaS8yLGFbM11dfSxiLmV4cG9ydHM9ZC5Db2xvckNvbnZlcnNpb259LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMTU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuL3A1LkNvbG9yXCIpLGEoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUuYWxwaGE9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImFscGhhXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRBbHBoYSgpfSxkLnByb3RvdHlwZS5ibHVlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJibHVlXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRCbHVlKCl9LGQucHJvdG90eXBlLmJyaWdodG5lc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJyaWdodG5lc3NcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldEJyaWdodG5lc3MoKX0sZC5wcm90b3R5cGUuY29sb3I9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjb2xvclwiLGFyZ3VtZW50cyksYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkLkNvbG9yKXJldHVybiBhcmd1bWVudHNbMF07dmFyIGE9YXJndW1lbnRzWzBdaW5zdGFuY2VvZiBBcnJheT9hcmd1bWVudHNbMF06YXJndW1lbnRzO3JldHVybiBuZXcgZC5Db2xvcih0aGlzLGEpfSxkLnByb3RvdHlwZS5ncmVlbj1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZ3JlZW5cIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldEdyZWVuKCl9LGQucHJvdG90eXBlLmh1ZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaHVlXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRIdWUoKX0sZC5wcm90b3R5cGUubGVycENvbG9yPWZ1bmN0aW9uKGEsYixjKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsZXJwQ29sb3JcIixhcmd1bWVudHMpO3ZhciBmLGcsaCxpLGosayxsPXRoaXMuX2NvbG9yTW9kZSxtPXRoaXMuX2NvbG9yTWF4ZXM7aWYobD09PWUuUkdCKWo9YS5sZXZlbHMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLzI1NX0pLGs9Yi5sZXZlbHMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLzI1NX0pO2Vsc2UgaWYobD09PWUuSFNCKWEuX2dldEJyaWdodG5lc3MoKSxiLl9nZXRCcmlnaHRuZXNzKCksaj1hLmhzYmEsaz1iLmhzYmE7ZWxzZXtpZihsIT09ZS5IU0wpdGhyb3cgbmV3IEVycm9yKGwrXCJjYW5ub3QgYmUgdXNlZCBmb3IgaW50ZXJwb2xhdGlvbi5cIik7YS5fZ2V0TGlnaHRuZXNzKCksYi5fZ2V0TGlnaHRuZXNzKCksaj1hLmhzbGEsaz1iLmhzbGF9cmV0dXJuIGM9TWF0aC5tYXgoTWF0aC5taW4oYywxKSwwKSx2b2lkIDA9PT10aGlzLmxlcnAmJih0aGlzLmxlcnA9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjKihiLWEpK2F9KSxmPXRoaXMubGVycChqWzBdLGtbMF0sYyksZz10aGlzLmxlcnAoalsxXSxrWzFdLGMpLGg9dGhpcy5sZXJwKGpbMl0sa1syXSxjKSxpPXRoaXMubGVycChqWzNdLGtbM10sYyksZio9bVtsXVswXSxnKj1tW2xdWzFdLGgqPW1bbF1bMl0saSo9bVtsXVszXSx0aGlzLmNvbG9yKGYsZyxoLGkpfSxkLnByb3RvdHlwZS5saWdodG5lc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxpZ2h0bmVzc1wiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0TGlnaHRuZXNzKCl9LGQucHJvdG90eXBlLnJlZD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicmVkXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRSZWQoKX0sZC5wcm90b3R5cGUuc2F0dXJhdGlvbj1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F0dXJhdGlvblwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0U2F0dXJhdGlvbigpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LkNvbG9yXCI6MTZ9XSwxNjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIiksZj1hKFwiLi9jb2xvcl9jb252ZXJzaW9uXCIpO2QuQ29sb3I9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLl9zdG9yZU1vZGVBbmRNYXhlcyhhLl9jb2xvck1vZGUsYS5fY29sb3JNYXhlcyksdGhpcy5tb2RlIT09ZS5SR0ImJnRoaXMubW9kZSE9PWUuSFNMJiZ0aGlzLm1vZGUhPT1lLkhTQil0aHJvdyBuZXcgRXJyb3IodGhpcy5tb2RlK1wiIGlzIGFuIGludmFsaWQgY29sb3JNb2RlLlwiKTtyZXR1cm4gdGhpcy5fYXJyYXk9ZC5Db2xvci5fcGFyc2VJbnB1dHMuYXBwbHkodGhpcyxiKSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKSx0aGlzfSxkLkNvbG9yLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihhKXt0aGlzLmhzYmF8fCh0aGlzLmhzYmE9Zi5fcmdiYVRvSFNCQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNsYXx8KHRoaXMuaHNsYT1mLl9yZ2JhVG9IU0xBKHRoaXMuX2FycmF5KSk7dmFyIGI9dGhpcy5sZXZlbHMsYz10aGlzLl9hcnJheSxkPWNbM107c3dpdGNoKGEpe2Nhc2VcIiNycmdnYmJcIjpyZXR1cm5cIiNcIi5jb25jYXQoYlswXTwxNj9cIjBcIi5jb25jYXQoYlswXS50b1N0cmluZygxNikpOmJbMF0udG9TdHJpbmcoMTYpLGJbMV08MTY/XCIwXCIuY29uY2F0KGJbMV0udG9TdHJpbmcoMTYpKTpiWzFdLnRvU3RyaW5nKDE2KSxiWzJdPDE2P1wiMFwiLmNvbmNhdChiWzJdLnRvU3RyaW5nKDE2KSk6YlsyXS50b1N0cmluZygxNikpO2Nhc2VcIiNycmdnYmJhYVwiOnJldHVyblwiI1wiLmNvbmNhdChiWzBdPDE2P1wiMFwiLmNvbmNhdChiWzBdLnRvU3RyaW5nKDE2KSk6YlswXS50b1N0cmluZygxNiksYlsxXTwxNj9cIjBcIi5jb25jYXQoYlsxXS50b1N0cmluZygxNikpOmJbMV0udG9TdHJpbmcoMTYpLGJbMl08MTY/XCIwXCIuY29uY2F0KGJbMl0udG9TdHJpbmcoMTYpKTpiWzJdLnRvU3RyaW5nKDE2KSxiWzNdPDE2P1wiMFwiLmNvbmNhdChiWzJdLnRvU3RyaW5nKDE2KSk6YlszXS50b1N0cmluZygxNikpO2Nhc2VcIiNyZ2JcIjpyZXR1cm5cIiNcIi5jb25jYXQoTWF0aC5yb3VuZCgxNSpjWzBdKS50b1N0cmluZygxNiksTWF0aC5yb3VuZCgxNSpjWzFdKS50b1N0cmluZygxNiksTWF0aC5yb3VuZCgxNSpjWzJdKS50b1N0cmluZygxNikpO2Nhc2VcIiNyZ2JhXCI6cmV0dXJuXCIjXCIuY29uY2F0KE1hdGgucm91bmQoMTUqY1swXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1sxXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1syXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1szXSkudG9TdHJpbmcoMTYpKTtjYXNlXCJyZ2JcIjpyZXR1cm5cInJnYihcIi5jb25jYXQoYlswXSxcIiwgXCIsYlsxXSxcIiwgXCIsYlsyXSxcIilcIik7Y2FzZVwicmdiJVwiOnJldHVyblwicmdiKFwiLmNvbmNhdCgoMTAwKmNbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1syXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJyZ2JhJVwiOnJldHVyblwicmdiYShcIi5jb25jYXQoKDEwMCpjWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1sxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzNdKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcImhzYlwiOmNhc2VcImhzdlwiOnJldHVyblwiaHNiKFwiLmNvbmNhdCh0aGlzLmhzYmFbMF0qdGhpcy5tYXhlc1tlLkhTQl1bMF0sXCIsIFwiLHRoaXMuaHNiYVsxXSp0aGlzLm1heGVzW2UuSFNCXVsxXSxcIiwgXCIsdGhpcy5oc2JhWzJdKnRoaXMubWF4ZXNbZS5IU0JdWzJdLFwiKVwiKTtjYXNlXCJoc2IlXCI6Y2FzZVwiaHN2JVwiOnJldHVyblwiaHNiKFwiLmNvbmNhdCgoMTAwKnRoaXMuaHNiYVswXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNiYVsxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNiYVsyXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2JhXCI6Y2FzZVwiaHN2YVwiOnJldHVyblwiaHNiYShcIi5jb25jYXQodGhpcy5oc2JhWzBdKnRoaXMubWF4ZXNbZS5IU0JdWzBdLFwiLCBcIix0aGlzLmhzYmFbMV0qdGhpcy5tYXhlc1tlLkhTQl1bMV0sXCIsIFwiLHRoaXMuaHNiYVsyXSp0aGlzLm1heGVzW2UuSFNCXVsyXSxcIiwgXCIsZCxcIilcIik7Y2FzZVwiaHNiYSVcIjpjYXNlXCJoc3ZhJVwiOnJldHVyblwiaHNiYShcIi5jb25jYXQoKDEwMCp0aGlzLmhzYmFbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpkKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcImhzbFwiOnJldHVyblwiaHNsKFwiLmNvbmNhdCh0aGlzLmhzbGFbMF0qdGhpcy5tYXhlc1tlLkhTTF1bMF0sXCIsIFwiLHRoaXMuaHNsYVsxXSp0aGlzLm1heGVzW2UuSFNMXVsxXSxcIiwgXCIsdGhpcy5oc2xhWzJdKnRoaXMubWF4ZXNbZS5IU0xdWzJdLFwiKVwiKTtjYXNlXCJoc2wlXCI6cmV0dXJuXCJoc2woXCIuY29uY2F0KCgxMDAqdGhpcy5oc2xhWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzJdKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcImhzbGFcIjpyZXR1cm5cImhzbGEoXCIuY29uY2F0KHRoaXMuaHNsYVswXSp0aGlzLm1heGVzW2UuSFNMXVswXSxcIiwgXCIsdGhpcy5oc2xhWzFdKnRoaXMubWF4ZXNbZS5IU0xdWzFdLFwiLCBcIix0aGlzLmhzbGFbMl0qdGhpcy5tYXhlc1tlLkhTTF1bMl0sXCIsIFwiLGQsXCIpXCIpO2Nhc2VcImhzbGElXCI6cmV0dXJuXCJoc2woXCIuY29uY2F0KCgxMDAqdGhpcy5oc2xhWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzJdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqZCkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJyZ2JhXCI6ZGVmYXVsdDpyZXR1cm5cInJnYmEoXCIrYlswXStcIixcIitiWzFdK1wiLFwiK2JbMl0rXCIsXCIrZCtcIilcIn19LGQuQ29sb3IucHJvdG90eXBlLnNldFJlZD1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVswXT1hL3RoaXMubWF4ZXNbZS5SR0JdWzBdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5zZXRHcmVlbj1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVsxXT1hL3RoaXMubWF4ZXNbZS5SR0JdWzFdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5zZXRCbHVlPWZ1bmN0aW9uKGEpe3RoaXMuX2FycmF5WzJdPWEvdGhpcy5tYXhlc1tlLlJHQl1bMl0sdGhpcy5fY2FsY3VsYXRlTGV2ZWxzKCl9LGQuQ29sb3IucHJvdG90eXBlLnNldEFscGhhPWZ1bmN0aW9uKGEpe3RoaXMuX2FycmF5WzNdPWEvdGhpcy5tYXhlc1t0aGlzLm1vZGVdWzNdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5fY2FsY3VsYXRlTGV2ZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuX2FycmF5LGI9dGhpcy5sZXZlbHM9bmV3IEFycmF5KGEubGVuZ3RoKSxjPWEubGVuZ3RoLTE7Yz49MDstLWMpYltjXT1NYXRoLnJvdW5kKDI1NSphW2NdKX0sZC5Db2xvci5wcm90b3R5cGUuX2dldEFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5WzNdKnRoaXMubWF4ZXNbdGhpcy5tb2RlXVszXX0sZC5Db2xvci5wcm90b3R5cGUuX3N0b3JlTW9kZUFuZE1heGVzPWZ1bmN0aW9uKGEsYil7dGhpcy5tb2RlPWEsdGhpcy5tYXhlcz1ifSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0TW9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGV9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRNYXhlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1heGVzfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0Qmx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheVsyXSp0aGlzLm1heGVzW2UuUkdCXVsyXX0sZC5Db2xvci5wcm90b3R5cGUuX2dldEJyaWdodG5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzYmFbMl0qdGhpcy5tYXhlc1tlLkhTQl1bMl19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRHcmVlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheVsxXSp0aGlzLm1heGVzW2UuUkdCXVsxXX0sZC5Db2xvci5wcm90b3R5cGUuX2dldEh1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGU9PT1lLkhTQj8odGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzYmFbMF0qdGhpcy5tYXhlc1tlLkhTQl1bMF0pOih0aGlzLmhzbGF8fCh0aGlzLmhzbGE9Zi5fcmdiYVRvSFNMQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNsYVswXSp0aGlzLm1heGVzW2UuSFNMXVswXSl9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRMaWdodG5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oc2xhfHwodGhpcy5oc2xhPWYuX3JnYmFUb0hTTEEodGhpcy5fYXJyYXkpKSx0aGlzLmhzbGFbMl0qdGhpcy5tYXhlc1tlLkhTTF1bMl19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRSZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXlbMF0qdGhpcy5tYXhlc1tlLlJHQl1bMF19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRTYXR1cmF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZT09PWUuSFNCPyh0aGlzLmhzYmF8fCh0aGlzLmhzYmE9Zi5fcmdiYVRvSFNCQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNiYVsxXSp0aGlzLm1heGVzW2UuSFNCXVsxXSk6KHRoaXMuaHNsYXx8KHRoaXMuaHNsYT1mLl9yZ2JhVG9IU0xBKHRoaXMuX2FycmF5KSksdGhpcy5oc2xhWzFdKnRoaXMubWF4ZXNbZS5IU0xdWzFdKX07dmFyIGc9e2FsaWNlYmx1ZTpcIiNmMGY4ZmZcIixhbnRpcXVld2hpdGU6XCIjZmFlYmQ3XCIsYXF1YTpcIiMwMGZmZmZcIixhcXVhbWFyaW5lOlwiIzdmZmZkNFwiLGF6dXJlOlwiI2YwZmZmZlwiLGJlaWdlOlwiI2Y1ZjVkY1wiLGJpc3F1ZTpcIiNmZmU0YzRcIixibGFjazpcIiMwMDAwMDBcIixibGFuY2hlZGFsbW9uZDpcIiNmZmViY2RcIixibHVlOlwiIzAwMDBmZlwiLGJsdWV2aW9sZXQ6XCIjOGEyYmUyXCIsYnJvd246XCIjYTUyYTJhXCIsYnVybHl3b29kOlwiI2RlYjg4N1wiLGNhZGV0Ymx1ZTpcIiM1ZjllYTBcIixjaGFydHJldXNlOlwiIzdmZmYwMFwiLGNob2NvbGF0ZTpcIiNkMjY5MWVcIixjb3JhbDpcIiNmZjdmNTBcIixjb3JuZmxvd2VyYmx1ZTpcIiM2NDk1ZWRcIixjb3Juc2lsazpcIiNmZmY4ZGNcIixjcmltc29uOlwiI2RjMTQzY1wiLGN5YW46XCIjMDBmZmZmXCIsZGFya2JsdWU6XCIjMDAwMDhiXCIsZGFya2N5YW46XCIjMDA4YjhiXCIsZGFya2dvbGRlbnJvZDpcIiNiODg2MGJcIixkYXJrZ3JheTpcIiNhOWE5YTlcIixkYXJrZ3JlZW46XCIjMDA2NDAwXCIsZGFya2dyZXk6XCIjYTlhOWE5XCIsZGFya2toYWtpOlwiI2JkYjc2YlwiLGRhcmttYWdlbnRhOlwiIzhiMDA4YlwiLGRhcmtvbGl2ZWdyZWVuOlwiIzU1NmIyZlwiLGRhcmtvcmFuZ2U6XCIjZmY4YzAwXCIsZGFya29yY2hpZDpcIiM5OTMyY2NcIixkYXJrcmVkOlwiIzhiMDAwMFwiLGRhcmtzYWxtb246XCIjZTk5NjdhXCIsZGFya3NlYWdyZWVuOlwiIzhmYmM4ZlwiLGRhcmtzbGF0ZWJsdWU6XCIjNDgzZDhiXCIsZGFya3NsYXRlZ3JheTpcIiMyZjRmNGZcIixkYXJrc2xhdGVncmV5OlwiIzJmNGY0ZlwiLGRhcmt0dXJxdW9pc2U6XCIjMDBjZWQxXCIsZGFya3Zpb2xldDpcIiM5NDAwZDNcIixkZWVwcGluazpcIiNmZjE0OTNcIixkZWVwc2t5Ymx1ZTpcIiMwMGJmZmZcIixkaW1ncmF5OlwiIzY5Njk2OVwiLGRpbWdyZXk6XCIjNjk2OTY5XCIsZG9kZ2VyYmx1ZTpcIiMxZTkwZmZcIixmaXJlYnJpY2s6XCIjYjIyMjIyXCIsZmxvcmFsd2hpdGU6XCIjZmZmYWYwXCIsZm9yZXN0Z3JlZW46XCIjMjI4YjIyXCIsZnVjaHNpYTpcIiNmZjAwZmZcIixnYWluc2Jvcm86XCIjZGNkY2RjXCIsZ2hvc3R3aGl0ZTpcIiNmOGY4ZmZcIixnb2xkOlwiI2ZmZDcwMFwiLGdvbGRlbnJvZDpcIiNkYWE1MjBcIixncmF5OlwiIzgwODA4MFwiLGdyZWVuOlwiIzAwODAwMFwiLGdyZWVueWVsbG93OlwiI2FkZmYyZlwiLGdyZXk6XCIjODA4MDgwXCIsaG9uZXlkZXc6XCIjZjBmZmYwXCIsaG90cGluazpcIiNmZjY5YjRcIixpbmRpYW5yZWQ6XCIjY2Q1YzVjXCIsaW5kaWdvOlwiIzRiMDA4MlwiLGl2b3J5OlwiI2ZmZmZmMFwiLGtoYWtpOlwiI2YwZTY4Y1wiLGxhdmVuZGVyOlwiI2U2ZTZmYVwiLGxhdmVuZGVyYmx1c2g6XCIjZmZmMGY1XCIsbGF3bmdyZWVuOlwiIzdjZmMwMFwiLGxlbW9uY2hpZmZvbjpcIiNmZmZhY2RcIixsaWdodGJsdWU6XCIjYWRkOGU2XCIsbGlnaHRjb3JhbDpcIiNmMDgwODBcIixsaWdodGN5YW46XCIjZTBmZmZmXCIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6XCIjZmFmYWQyXCIsbGlnaHRncmF5OlwiI2QzZDNkM1wiLGxpZ2h0Z3JlZW46XCIjOTBlZTkwXCIsbGlnaHRncmV5OlwiI2QzZDNkM1wiLGxpZ2h0cGluazpcIiNmZmI2YzFcIixsaWdodHNhbG1vbjpcIiNmZmEwN2FcIixsaWdodHNlYWdyZWVuOlwiIzIwYjJhYVwiLGxpZ2h0c2t5Ymx1ZTpcIiM4N2NlZmFcIixsaWdodHNsYXRlZ3JheTpcIiM3Nzg4OTlcIixsaWdodHNsYXRlZ3JleTpcIiM3Nzg4OTlcIixsaWdodHN0ZWVsYmx1ZTpcIiNiMGM0ZGVcIixsaWdodHllbGxvdzpcIiNmZmZmZTBcIixsaW1lOlwiIzAwZmYwMFwiLGxpbWVncmVlbjpcIiMzMmNkMzJcIixsaW5lbjpcIiNmYWYwZTZcIixtYWdlbnRhOlwiI2ZmMDBmZlwiLG1hcm9vbjpcIiM4MDAwMDBcIixtZWRpdW1hcXVhbWFyaW5lOlwiIzY2Y2RhYVwiLG1lZGl1bWJsdWU6XCIjMDAwMGNkXCIsbWVkaXVtb3JjaGlkOlwiI2JhNTVkM1wiLG1lZGl1bXB1cnBsZTpcIiM5MzcwZGJcIixtZWRpdW1zZWFncmVlbjpcIiMzY2IzNzFcIixtZWRpdW1zbGF0ZWJsdWU6XCIjN2I2OGVlXCIsbWVkaXVtc3ByaW5nZ3JlZW46XCIjMDBmYTlhXCIsbWVkaXVtdHVycXVvaXNlOlwiIzQ4ZDFjY1wiLG1lZGl1bXZpb2xldHJlZDpcIiNjNzE1ODVcIixtaWRuaWdodGJsdWU6XCIjMTkxOTcwXCIsbWludGNyZWFtOlwiI2Y1ZmZmYVwiLG1pc3R5cm9zZTpcIiNmZmU0ZTFcIixtb2NjYXNpbjpcIiNmZmU0YjVcIixuYXZham93aGl0ZTpcIiNmZmRlYWRcIixuYXZ5OlwiIzAwMDA4MFwiLG9sZGxhY2U6XCIjZmRmNWU2XCIsb2xpdmU6XCIjODA4MDAwXCIsb2xpdmVkcmFiOlwiIzZiOGUyM1wiLG9yYW5nZTpcIiNmZmE1MDBcIixvcmFuZ2VyZWQ6XCIjZmY0NTAwXCIsb3JjaGlkOlwiI2RhNzBkNlwiLHBhbGVnb2xkZW5yb2Q6XCIjZWVlOGFhXCIscGFsZWdyZWVuOlwiIzk4ZmI5OFwiLHBhbGV0dXJxdW9pc2U6XCIjYWZlZWVlXCIscGFsZXZpb2xldHJlZDpcIiNkYjcwOTNcIixwYXBheWF3aGlwOlwiI2ZmZWZkNVwiLHBlYWNocHVmZjpcIiNmZmRhYjlcIixwZXJ1OlwiI2NkODUzZlwiLHBpbms6XCIjZmZjMGNiXCIscGx1bTpcIiNkZGEwZGRcIixwb3dkZXJibHVlOlwiI2IwZTBlNlwiLHB1cnBsZTpcIiM4MDAwODBcIixyZWQ6XCIjZmYwMDAwXCIscm9zeWJyb3duOlwiI2JjOGY4ZlwiLHJveWFsYmx1ZTpcIiM0MTY5ZTFcIixzYWRkbGVicm93bjpcIiM4YjQ1MTNcIixzYWxtb246XCIjZmE4MDcyXCIsc2FuZHlicm93bjpcIiNmNGE0NjBcIixzZWFncmVlbjpcIiMyZThiNTdcIixzZWFzaGVsbDpcIiNmZmY1ZWVcIixzaWVubmE6XCIjYTA1MjJkXCIsc2lsdmVyOlwiI2MwYzBjMFwiLHNreWJsdWU6XCIjODdjZWViXCIsc2xhdGVibHVlOlwiIzZhNWFjZFwiLHNsYXRlZ3JheTpcIiM3MDgwOTBcIixzbGF0ZWdyZXk6XCIjNzA4MDkwXCIsc25vdzpcIiNmZmZhZmFcIixzcHJpbmdncmVlbjpcIiMwMGZmN2ZcIixzdGVlbGJsdWU6XCIjNDY4MmI0XCIsdGFuOlwiI2QyYjQ4Y1wiLHRlYWw6XCIjMDA4MDgwXCIsdGhpc3RsZTpcIiNkOGJmZDhcIix0b21hdG86XCIjZmY2MzQ3XCIsdHVycXVvaXNlOlwiIzQwZTBkMFwiLHZpb2xldDpcIiNlZTgyZWVcIix3aGVhdDpcIiNmNWRlYjNcIix3aGl0ZTpcIiNmZmZmZmZcIix3aGl0ZXNtb2tlOlwiI2Y1ZjVmNVwiLHllbGxvdzpcIiNmZmZmMDBcIix5ZWxsb3dncmVlbjpcIiM5YWNkMzJcIn0saD0vXFxzKi8saT0vKFxcZHsxLDN9KS8saj0vKCg/OlxcZCsoPzpcXC5cXGQrKT8pfCg/OlxcLlxcZCspKS8saz1uZXcgUmVnRXhwKGouc291cmNlK1wiJVwiKSxsPXtIRVgzOi9eIyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKSQvaSxIRVg0Oi9eIyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkkL2ksSEVYNjovXiMoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkkL2ksSEVYODovXiMoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pJC9pLFJHQjpuZXcgUmVnRXhwKFtcIl5yZ2JcXFxcKFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxSR0JfUEVSQ0VOVDpuZXcgUmVnRXhwKFtcIl5yZ2JcXFxcKFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxSR0JBOm5ldyBSZWdFeHAoW1wiXnJnYmFcXFxcKFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiLFwiLGouc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxSR0JBX1BFUkNFTlQ6bmV3IFJlZ0V4cChbXCJecmdiYVxcXFwoXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsai5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLEhTTDpuZXcgUmVnRXhwKFtcIl5oc2xcXFxcKFwiLGkuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxIU0xBOm5ldyBSZWdFeHAoW1wiXmhzbGFcXFxcKFwiLGkuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGouc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxIU0I6bmV3IFJlZ0V4cChbXCJeaHNiXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksSFNCQTpuZXcgUmVnRXhwKFtcIl5oc2JhXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixqLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIil9O2QuQ29sb3IuX3BhcnNlSW5wdXRzPWZ1bmN0aW9uKGEsYixjLGgpe3ZhciBpLGo9YXJndW1lbnRzLmxlbmd0aCxrPXRoaXMubW9kZSxtPXRoaXMubWF4ZXNba10sbj1bXTtpZihqPj0zKXtmb3IoblswXT1hL21bMF0sblsxXT1iL21bMV0sblsyXT1jL21bMl0sblszXT1cIm51bWJlclwiPT10eXBlb2YgaD9oL21bM106MSxpPW4ubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBvPW5baV07bzwwP25baV09MDpvPjEmJihuW2ldPTEpfXJldHVybiBrPT09ZS5IU0w/Zi5faHNsYVRvUkdCQShuKTprPT09ZS5IU0I/Zi5faHNiYVRvUkdCQShuKTpufWlmKDE9PT1qJiZcInN0cmluZ1wiPT10eXBlb2YgYSl7dmFyIHA9YS50cmltKCkudG9Mb3dlckNhc2UoKTtpZihnW3BdKXJldHVybiBkLkNvbG9yLl9wYXJzZUlucHV0cy5jYWxsKHRoaXMsZ1twXSk7aWYobC5IRVgzLnRlc3QocCkpcmV0dXJuIG49bC5IRVgzLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUludChhK2EsMTYpLzI1NX0pLG5bM109MSxuO2lmKGwuSEVYNi50ZXN0KHApKXJldHVybiBuPWwuSEVYNi5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSwxNikvMjU1fSksblszXT0xLG47aWYobC5IRVg0LnRlc3QocCkpcmV0dXJuIG49bC5IRVg0LmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUludChhK2EsMTYpLzI1NX0pO2lmKGwuSEVYOC50ZXN0KHApKXJldHVybiBuPWwuSEVYOC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSwxNikvMjU1fSk7aWYobC5SR0IudGVzdChwKSlyZXR1cm4gbj1sLlJHQi5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS8yNTV9KSxuWzNdPTEsbjtpZihsLlJHQl9QRVJDRU5ULnRlc3QocCkpcmV0dXJuIG49bC5SR0JfUEVSQ0VOVC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VGbG9hdChhKS8xMDB9KSxuWzNdPTEsbjtpZihsLlJHQkEudGVzdChwKSlyZXR1cm4gbj1sLlJHQkEuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMz09PWI/cGFyc2VGbG9hdChhKTphLzI1NX0pO2lmKGwuUkdCQV9QRVJDRU5ULnRlc3QocCkpcmV0dXJuIG49bC5SR0JBX1BFUkNFTlQuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMz09PWI/cGFyc2VGbG9hdChhKTpwYXJzZUZsb2F0KGEpLzEwMH0pO2lmKGwuSFNMLnRlc3QocCk/KG49bC5IU0wuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOnBhcnNlSW50KGEsMTApLzEwMH0pLG5bM109MSk6bC5IU0xBLnRlc3QocCkmJihuPWwuSFNMQS5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAwPT09Yj9wYXJzZUludChhLDEwKS8zNjA6Mz09PWI/cGFyc2VGbG9hdChhKTpwYXJzZUludChhLDEwKS8xMDB9KSksbj1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oYSwxKSwwKX0pLG4ubGVuZ3RoKXJldHVybiBmLl9oc2xhVG9SR0JBKG4pO2lmKGwuSFNCLnRlc3QocCk/KG49bC5IU0IuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOnBhcnNlSW50KGEsMTApLzEwMH0pLG5bM109MSk6bC5IU0JBLnRlc3QocCkmJihuPWwuSFNCQS5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAwPT09Yj9wYXJzZUludChhLDEwKS8zNjA6Mz09PWI/cGFyc2VGbG9hdChhKTpwYXJzZUludChhLDEwKS8xMDB9KSksbi5sZW5ndGgpe2ZvcihpPW4ubGVuZ3RoLTE7aT49MDstLWkpbltpXT1NYXRoLm1heChNYXRoLm1pbihuW2ldLDEpLDApO3JldHVybiBmLl9oc2JhVG9SR0JBKG4pfW49WzEsMSwxLDFdfWVsc2V7aWYoMSE9PWomJjIhPT1qfHxcIm51bWJlclwiIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoYXJndW1lbnRzK1wiaXMgbm90IGEgdmFsaWQgY29sb3IgcmVwcmVzZW50YXRpb24uXCIpO25bMF09YS9tWzJdLG5bMV09YS9tWzJdLG5bMl09YS9tWzJdLG5bM109XCJudW1iZXJcIj09dHlwZW9mIGI/Yi9tWzNdOjEsbj1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oYSwxKSwwKX0pfXJldHVybiBufSxiLmV4cG9ydHM9ZC5Db2xvcn0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9jb2xvcl9jb252ZXJzaW9uXCI6MTR9XSwxNzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4vcDUuQ29sb3JcIiksZC5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQuSW1hZ2U/dGhpcy5pbWFnZShhcmd1bWVudHNbMF0sMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpOnRoaXMuX3JlbmRlcmVyLmJhY2tncm91bmQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5jbGVhcigpLHRoaXN9LGQucHJvdG90eXBlLmNvbG9yTW9kZT1mdW5jdGlvbihhLGIsYyxmLGcpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvbG9yTW9kZVwiLGFyZ3VtZW50cyksYT09PWUuUkdCfHxhPT09ZS5IU0J8fGE9PT1lLkhTTCl7dGhpcy5fY29sb3JNb2RlPWE7dmFyIGg9dGhpcy5fY29sb3JNYXhlc1thXTsyPT09YXJndW1lbnRzLmxlbmd0aD8oaFswXT1iLGhbMV09YixoWzJdPWIsaFszXT1iKTo0PT09YXJndW1lbnRzLmxlbmd0aD8oaFswXT1iLGhbMV09YyxoWzJdPWYpOjU9PT1hcmd1bWVudHMubGVuZ3RoJiYoaFswXT1iLGhbMV09YyxoWzJdPWYsaFszXT1nKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZmlsbFNldFwiLCEwKSx0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZG9GaWxsXCIsITApLHRoaXMuX3JlbmRlcmVyLmZpbGwuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5ub0ZpbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvRmlsbFwiLCExKSx0aGlzfSxkLnByb3RvdHlwZS5ub1N0cm9rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZG9TdHJva2VcIiwhMSksdGhpc30sZC5wcm90b3R5cGUuc3Ryb2tlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9zdHJva2VTZXRcIiwhMCksdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvU3Ryb2tlXCIsITApLHRoaXMuX3JlbmRlcmVyLnN0cm9rZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LkNvbG9yXCI6MTZ9XSwxODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPU1hdGguUEk7Yi5leHBvcnRzPXtQMkQ6XCJwMmRcIixXRUJHTDpcIndlYmdsXCIsQVJST1c6XCJkZWZhdWx0XCIsQ1JPU1M6XCJjcm9zc2hhaXJcIixIQU5EOlwicG9pbnRlclwiLE1PVkU6XCJtb3ZlXCIsVEVYVDpcInRleHRcIixXQUlUOlwid2FpdFwiLEhBTEZfUEk6ZC8yLFBJOmQsUVVBUlRFUl9QSTpkLzQsVEFVOjIqZCxUV09fUEk6MipkLERFR1JFRVM6XCJkZWdyZWVzXCIsUkFESUFOUzpcInJhZGlhbnNcIixERUdfVE9fUkFEOmQvMTgwLFJBRF9UT19ERUc6MTgwL2QsQ09STkVSOlwiY29ybmVyXCIsQ09STkVSUzpcImNvcm5lcnNcIixSQURJVVM6XCJyYWRpdXNcIixSSUdIVDpcInJpZ2h0XCIsTEVGVDpcImxlZnRcIixDRU5URVI6XCJjZW50ZXJcIixUT1A6XCJ0b3BcIixCT1RUT006XCJib3R0b21cIixCQVNFTElORTpcImFscGhhYmV0aWNcIixQT0lOVFM6MCxMSU5FUzoxLExJTkVfU1RSSVA6MyxMSU5FX0xPT1A6MixUUklBTkdMRVM6NCxUUklBTkdMRV9GQU46NixUUklBTkdMRV9TVFJJUDo1LFFVQURTOlwicXVhZHNcIixRVUFEX1NUUklQOlwicXVhZF9zdHJpcFwiLENMT1NFOlwiY2xvc2VcIixPUEVOOlwib3BlblwiLENIT1JEOlwiY2hvcmRcIixQSUU6XCJwaWVcIixQUk9KRUNUOlwic3F1YXJlXCIsU1FVQVJFOlwiYnV0dFwiLFJPVU5EOlwicm91bmRcIixCRVZFTDpcImJldmVsXCIsTUlURVI6XCJtaXRlclwiLFJHQjpcInJnYlwiLEhTQjpcImhzYlwiLEhTTDpcImhzbFwiLEFVVE86XCJhdXRvXCIsQUxUOjE4LEJBQ0tTUEFDRTo4LENPTlRST0w6MTcsREVMRVRFOjQ2LERPV05fQVJST1c6NDAsRU5URVI6MTMsRVNDQVBFOjI3LExFRlRfQVJST1c6MzcsT1BUSU9OOjE4LFJFVFVSTjoxMyxSSUdIVF9BUlJPVzozOSxTSElGVDoxNixUQUI6OSxVUF9BUlJPVzozOCxCTEVORDpcInNvdXJjZS1vdmVyXCIsQUREOlwibGlnaHRlclwiLERBUktFU1Q6XCJkYXJrZW5cIixMSUdIVEVTVDpcImxpZ2h0ZW5cIixESUZGRVJFTkNFOlwiZGlmZmVyZW5jZVwiLEVYQ0xVU0lPTjpcImV4Y2x1c2lvblwiLE1VTFRJUExZOlwibXVsdGlwbHlcIixTQ1JFRU46XCJzY3JlZW5cIixSRVBMQUNFOlwiY29weVwiLE9WRVJMQVk6XCJvdmVybGF5XCIsSEFSRF9MSUdIVDpcImhhcmQtbGlnaHRcIixTT0ZUX0xJR0hUOlwic29mdC1saWdodFwiLERPREdFOlwiY29sb3ItZG9kZ2VcIixCVVJOOlwiY29sb3ItYnVyblwiLFRIUkVTSE9MRDpcInRocmVzaG9sZFwiLEdSQVk6XCJncmF5XCIsT1BBUVVFOlwib3BhcXVlXCIsSU5WRVJUOlwiaW52ZXJ0XCIsUE9TVEVSSVpFOlwicG9zdGVyaXplXCIsRElMQVRFOlwiZGlsYXRlXCIsRVJPREU6XCJlcm9kZVwiLEJMVVI6XCJibHVyXCIsTk9STUFMOlwibm9ybWFsXCIsSVRBTElDOlwiaXRhbGljXCIsQk9MRDpcImJvbGRcIixfREVGQVVMVF9URVhUX0ZJTEw6XCIjMDAwMDAwXCIsX0RFRkFVTFRfTEVBRE1VTFQ6MS4yNSxfQ1RYX01JRERMRTpcIm1pZGRsZVwiLExJTkVBUjpcImxpbmVhclwiLFFVQURSQVRJQzpcInF1YWRyYXRpY1wiLEJFWklFUjpcImJlemllclwiLENVUlZFOlwiY3VydmVcIixTVFJPS0U6XCJzdHJva2VcIixGSUxMOlwiZmlsbFwiLFRFWFRVUkU6XCJ0ZXh0dXJlXCIsSU1NRURJQVRFOlwiaW1tZWRpYXRlXCIsTkVBUkVTVDpcIm5lYXJlc3RcIixSRVBFQVQ6XCJyZXBlYXRcIixDTEFNUDpcImNsYW1wXCIsTUlSUk9SOlwibWlycm9yXCIsTEFORFNDQVBFOlwibGFuZHNjYXBlXCIsUE9SVFJBSVQ6XCJwb3J0cmFpdFwiLF9ERUZBVUxUX1NUUk9LRTpcIiMwMDAwMDBcIixfREVGQVVMVF9GSUxMOlwiI0ZGRkZGRlwiLEdSSUQ6XCJncmlkXCIsQVhFUzpcImF4ZXNcIn19LHt9XSwxOTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoKXtyZXR1cm4gd2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRofHxkb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRofHwwfWZ1bmN0aW9uIGUoKXtyZXR1cm4gd2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHR8fGRvY3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0fHwwfWZ1bmN0aW9uIGYoYSl7aWYoIShkb2N1bWVudC5mdWxsc2NyZWVuRW5hYmxlZHx8ZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVuYWJsZWR8fGRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbmFibGVkfHxkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbmFibGVkKSl0aHJvdyBuZXcgRXJyb3IoXCJGdWxsc2NyZWVuIG5vdCBlbmFibGVkIGluIHRoaXMgYnJvd3Nlci5cIilcbjthLnJlcXVlc3RGdWxsc2NyZWVuP2EucmVxdWVzdEZ1bGxzY3JlZW4oKTphLm1velJlcXVlc3RGdWxsU2NyZWVuP2EubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTphLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuP2Eud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTphLm1zUmVxdWVzdEZ1bGxzY3JlZW4mJmEubXNSZXF1ZXN0RnVsbHNjcmVlbigpfWZ1bmN0aW9uIGcoKXtkb2N1bWVudC5leGl0RnVsbHNjcmVlbj9kb2N1bWVudC5leGl0RnVsbHNjcmVlbigpOmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4/ZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpOmRvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuP2RvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuKCk6ZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbiYmZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpfXZhciBoPWEoXCIuL21haW5cIiksaT1hKFwiLi9jb25zdGFudHNcIiksaj1baS5BUlJPVyxpLkNST1NTLGkuSEFORCxpLk1PVkUsaS5URVhULGkuV0FJVF07aC5wcm90b3R5cGUuX2ZyYW1lUmF0ZT0wLGgucHJvdG90eXBlLl9sYXN0RnJhbWVUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSxoLnByb3RvdHlwZS5fdGFyZ2V0RnJhbWVSYXRlPTYwO3ZhciBrPXdpbmRvdy5wcmludDtoLnByb3RvdHlwZS5wcmludD1mdW5jdGlvbigpe2FyZ3VtZW50cy5sZW5ndGg/Y29uc29sZS5sb2cuYXBwbHkoY29uc29sZSxhcmd1bWVudHMpOmsoKX0saC5wcm90b3R5cGUuZnJhbWVDb3VudD0wLGgucHJvdG90eXBlLmZvY3VzZWQ9ZG9jdW1lbnQuaGFzRm9jdXMoKSxoLnByb3RvdHlwZS5jdXJzb3I9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVwiYXV0b1wiLGU9dGhpcy5fY3VyRWxlbWVudC5lbHQ7aWYoai5pbmRleE9mKGEpPi0xKWQ9YTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXt2YXIgZj1cIlwiO2ImJmMmJlwibnVtYmVyXCI9PXR5cGVvZiBiJiZcIm51bWJlclwiPT10eXBlb2YgYyYmKGY9YitcIiBcIitjKSxkPVwiaHR0cDovL1wiPT09YS5zdWJzdHJpbmcoMCw3KXx8XCJodHRwczovL1wiPT09YS5zdWJzdHJpbmcoMCw4KT9cInVybChcIithK1wiKSBcIitmK1wiLCBhdXRvXCI6L1xcLihjdXJ8anBnfGpwZWd8Z2lmfHBuZ3xDVVJ8SlBHfEpQRUd8R0lGfFBORykkLy50ZXN0KGEpP1widXJsKFwiK2ErXCIpIFwiK2YrXCIsIGF1dG9cIjphfWUuc3R5bGUuY3Vyc29yPWR9LGgucHJvdG90eXBlLmZyYW1lUmF0ZT1mdW5jdGlvbihhKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZnJhbWVSYXRlXCIsYXJndW1lbnRzKSxcIm51bWJlclwiIT10eXBlb2YgYXx8YTwwP3RoaXMuX2ZyYW1lUmF0ZToodGhpcy5fc2V0UHJvcGVydHkoXCJfdGFyZ2V0RnJhbWVSYXRlXCIsYSksdGhpcy5fcnVuRnJhbWVzKCksdGhpcyl9LGgucHJvdG90eXBlLmdldEZyYW1lUmF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZyYW1lUmF0ZSgpfSxoLnByb3RvdHlwZS5zZXRGcmFtZVJhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZnJhbWVSYXRlKGEpfSxoLnByb3RvdHlwZS5ub0N1cnNvcj1mdW5jdGlvbigpe3RoaXMuX2N1ckVsZW1lbnQuZWx0LnN0eWxlLmN1cnNvcj1cIm5vbmVcIn0saC5wcm90b3R5cGUuZGlzcGxheVdpZHRoPXNjcmVlbi53aWR0aCxoLnByb3RvdHlwZS5kaXNwbGF5SGVpZ2h0PXNjcmVlbi5oZWlnaHQsaC5wcm90b3R5cGUud2luZG93V2lkdGg9ZCgpLGgucHJvdG90eXBlLndpbmRvd0hlaWdodD1lKCksaC5wcm90b3R5cGUuX29ucmVzaXplPWZ1bmN0aW9uKGEpe3RoaXMuX3NldFByb3BlcnR5KFwid2luZG93V2lkdGhcIixkKCkpLHRoaXMuX3NldFByb3BlcnR5KFwid2luZG93SGVpZ2h0XCIsZSgpKTt2YXIgYixjPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO1wiZnVuY3Rpb25cIj09dHlwZW9mIGMud2luZG93UmVzaXplZCYmKHZvaWQgMD09PShiPWMud2luZG93UmVzaXplZChhKSl8fGJ8fGEucHJldmVudERlZmF1bHQoKSl9LGgucHJvdG90eXBlLndpZHRoPTAsaC5wcm90b3R5cGUuaGVpZ2h0PTAsaC5wcm90b3R5cGUuZnVsbHNjcmVlbj1mdW5jdGlvbihhKXtpZihoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJmdWxsc2NyZWVuXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hKXJldHVybiBkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fGRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50O2E/Zihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOmcoKX0saC5wcm90b3R5cGUucGl4ZWxEZW5zaXR5PWZ1bmN0aW9uKGEpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBpeGVsRGVuc2l0eVwiLGFyZ3VtZW50cyk7dmFyIGI7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGE/KGEhPT10aGlzLl9waXhlbERlbnNpdHkmJih0aGlzLl9waXhlbERlbnNpdHk9YSx0aGlzLl9waXhlbHNEaXJ0eT0hMCksYj10aGlzLHRoaXMucmVzaXplQ2FudmFzKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsITApKTpiPXRoaXMuX3BpeGVsRGVuc2l0eSxifSxoLnByb3RvdHlwZS5kaXNwbGF5RGVuc2l0eT1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb30saC5wcm90b3R5cGUuZ2V0VVJMPWZ1bmN0aW9uKCl7cmV0dXJuIGxvY2F0aW9uLmhyZWZ9LGgucHJvdG90eXBlLmdldFVSTFBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gbG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm5cIlwiIT09YX0pfSxoLnByb3RvdHlwZS5nZXRVUkxQYXJhbXM9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0vWz8mXShbXiY9XSspKD86WyY9XSkoW14mPV0rKS9naW0sYz17fTtudWxsIT0oYT1iLmV4ZWMobG9jYXRpb24uc2VhcmNoKSk7KWEuaW5kZXg9PT1iLmxhc3RJbmRleCYmYi5sYXN0SW5kZXgrKyxjW2FbMV1dPWFbMl07cmV0dXJuIGN9LGIuZXhwb3J0cz1ofSx7XCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjR9XSwyMDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIik7YShcIi4vY29uc3RhbnRzXCIpO2QuX3ZhbGlkYXRlUGFyYW1ldGVycz1kLl9mcmllbmRseUZpbGVMb2FkRXJyb3I9ZnVuY3Rpb24oKXt9O3ZhciBlPW51bGwsZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9wcm9jZXNzaW5nL3A1LmpzL3dpa2kvcDUuanMtb3ZlcnZpZXcjd2h5LWNhbnQtaS1hc3NpZ24tdmFyaWFibGVzLXVzaW5nLXA1LWZ1bmN0aW9ucy1hbmQtdmFyaWFibGVzLWJlZm9yZS1zZXR1cFwiLGc9ZnVuY3Rpb24oKXt2YXIgYj17fSxjPWZ1bmN0aW9uKGEpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuXCJfXCIhPT1hWzBdJiYoIShhIGluIGIpJiYoYlthXT0hMCwhMCkpfSkubWFwKGZ1bmN0aW9uKGIpe3ZhciBjO3JldHVybiBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIGFbYl0/XCJmdW5jdGlvblwiOmI9PT1iLnRvVXBwZXJDYXNlKCk/XCJjb25zdGFudFwiOlwidmFyaWFibGVcIix7bmFtZTpiLHR5cGU6Y319KX07ZT1bXS5jb25jYXQoYyhkLnByb3RvdHlwZSksYyhhKFwiLi9jb25zdGFudHNcIikpKSxlLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5uYW1lLmxlbmd0aC1hLm5hbWUubGVuZ3RofSl9LGg9ZnVuY3Rpb24oYSxiKXtifHwoYj1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpKSxlfHxnKCksZS5zb21lKGZ1bmN0aW9uKGMpe2lmKGEubWVzc2FnZSYmbnVsbCE9PWEubWVzc2FnZS5tYXRjaChcIlxcXFxXP1wiK2MubmFtZStcIlxcXFxXXCIpKXJldHVybiBiKFwiRGlkIHlvdSBqdXN0IHRyeSB0byB1c2UgcDUuanMncyBcIitjLm5hbWUrKFwiZnVuY3Rpb25cIj09PWMudHlwZT9cIigpIFwiOlwiIFwiKStjLnR5cGUrXCI/IElmIHNvLCB5b3UgbWF5IHdhbnQgdG8gbW92ZSBpdCBpbnRvIHlvdXIgc2tldGNoJ3Mgc2V0dXAoKSBmdW5jdGlvbi5cXG5cXG5Gb3IgbW9yZSBkZXRhaWxzLCBzZWU6IFwiK2YpLCEwfSl9O2QucHJvdG90eXBlLl9oZWxwRm9yTWlzdXNlZEF0VG9wTGV2ZWxDb2RlPWgsXCJjb21wbGV0ZVwiIT09ZG9jdW1lbnQucmVhZHlTdGF0ZSYmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIixoLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIixoLCExKX0pKSxiLmV4cG9ydHM9ZH0se1wiLi4vLi4vZG9jcy9yZWZlcmVuY2UvZGF0YS5qc29uXCI6dm9pZCAwLFwiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0fV0sMjE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9jb25zdGFudHNcIik7Yi5leHBvcnRzPXttb2RlQWRqdXN0OmZ1bmN0aW9uKGEsYixjLGUsZil7cmV0dXJuIGY9PT1kLkNPUk5FUj97eDphLHk6Yix3OmMsaDplfTpmPT09ZC5DT1JORVJTP3t4OmEseTpiLHc6Yy1hLGg6ZS1ifTpmPT09ZC5SQURJVVM/e3g6YS1jLHk6Yi1lLHc6MipjLGg6MiplfTpmPT09ZC5DRU5URVI/e3g6YS0uNSpjLHk6Yi0uNSplLHc6YyxoOmV9OnZvaWQgMH19fSx7XCIuL2NvbnN0YW50c1wiOjE4fV0sMjI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9ZnVuY3Rpb24oKXt3aW5kb3cubW9jaGF8fCh3aW5kb3cuc2V0dXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHdpbmRvdy5zZXR1cHx8d2luZG93LmRyYXcmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHdpbmRvdy5kcmF3KSYmIWQuaW5zdGFuY2UmJm5ldyBkfTtcImNvbXBsZXRlXCI9PT1kb2N1bWVudC5yZWFkeVN0YXRlP2UoKTp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixlLCExKX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSwyMzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIik7ZC5wcm90b3R5cGUuZXhpdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcImV4aXQoKSBub3QgaW1wbGVtZW50ZWQsIHNlZSByZW1vdmUoKVwiKX0sZC5wcm90b3R5cGUucHVzaFN0eWxlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicHVzaFN0eWxlKCkgbm90IHVzZWQsIHNlZSBwdXNoKClcIil9LGQucHJvdG90eXBlLnBvcFN0eWxlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicG9wU3R5bGUoKSBub3QgdXNlZCwgc2VlIHBvcCgpXCIpfSxkLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7dmFyIGE9XCJzaXplKCkgaXMgbm90IGEgdmFsaWQgcDUgZnVuY3Rpb24sIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgXCI7dGhyb3cgYSs9XCJkcmF3aW5nIGNhbnZhcywgcGxlYXNlIHVzZSBjcmVhdGVDYW52YXMoKSBpbnN0ZWFkXCIsbmV3IEVycm9yKGEpfSxiLmV4cG9ydHM9ZH0se1wiLi9tYWluXCI6MjR9XSwyNDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2EoXCIuL3NoaW1cIik7dmFyIGQ9YShcIi4vY29uc3RhbnRzXCIpLGU9ZnVuY3Rpb24oYSxiLGMpe1wiYm9vbGVhblwiPT10eXBlb2YgYiYmdm9pZCAwPT09YyYmKGM9YixiPXZvaWQgMCksdGhpcy5fc2V0dXBEb25lPSExLHRoaXMuX3BpeGVsRGVuc2l0eT1NYXRoLmNlaWwod2luZG93LmRldmljZVBpeGVsUmF0aW8pfHwxLHRoaXMuX3VzZXJOb2RlPWIsdGhpcy5fY3VyRWxlbWVudD1udWxsLHRoaXMuX2VsZW1lbnRzPVtdLHRoaXMuX3JlcXVlc3RBbmltSWQ9MCx0aGlzLl9wcmVsb2FkQ291bnQ9MCx0aGlzLl9pc0dsb2JhbD0hMSx0aGlzLl9sb29wPSEwLHRoaXMuX2luaXRpYWxpemVJbnN0YW5jZVZhcmlhYmxlcygpLHRoaXMuX2RlZmF1bHRDYW52YXNTaXplPXt3aWR0aDoxMDAsaGVpZ2h0OjEwMH0sdGhpcy5fZXZlbnRzPXttb3VzZW1vdmU6bnVsbCxtb3VzZWRvd246bnVsbCxtb3VzZXVwOm51bGwsZHJhZ2VuZDpudWxsLGRyYWdvdmVyOm51bGwsY2xpY2s6bnVsbCxkYmxjbGljazpudWxsLG1vdXNlb3ZlcjpudWxsLG1vdXNlb3V0Om51bGwsa2V5ZG93bjpudWxsLGtleXVwOm51bGwsa2V5cHJlc3M6bnVsbCx0b3VjaHN0YXJ0Om51bGwsdG91Y2htb3ZlOm51bGwsdG91Y2hlbmQ6bnVsbCxyZXNpemU6bnVsbCxibHVyOm51bGx9LHRoaXMuX2V2ZW50cy53aGVlbD1udWxsLHRoaXMuX2xvYWRpbmdTY3JlZW5JZD1cInA1X2xvYWRpbmdcIix0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcz17fTtmb3IodmFyIGQ9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRNZXRob2RzKSxmPTA7ZjxkLmxlbmd0aDtmKyspe3ZhciBnPWRbZl07dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHNbZ109ZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRNZXRob2RzW2ddLnNsaWNlKCl9d2luZG93LkRldmljZU9yaWVudGF0aW9uRXZlbnQmJih0aGlzLl9ldmVudHMuZGV2aWNlb3JpZW50YXRpb249bnVsbCksd2luZG93LkRldmljZU1vdGlvbkV2ZW50JiYhd2luZG93Ll9pc05vZGVXZWJraXQmJih0aGlzLl9ldmVudHMuZGV2aWNlbW90aW9uPW51bGwpLHRoaXMuX3N0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fdXNlck5vZGUmJlwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLl91c2VyTm9kZSYmKHRoaXMuX3VzZXJOb2RlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX3VzZXJOb2RlKSk7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXMsYj1hLnByZWxvYWQ7aWYoYil7dmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fbG9hZGluZ1NjcmVlbklkKTtpZighYyl7Yz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGMuaW5uZXJIVE1MPVwiTG9hZGluZy4uLlwiLGMuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLGMuaWQ9dGhpcy5fbG9hZGluZ1NjcmVlbklkOyh0aGlzLl91c2VyTm9kZXx8ZG9jdW1lbnQuYm9keSkuYXBwZW5kQ2hpbGQoYyl9dmFyIGQ9dGhpcy5fcHJlbG9hZE1ldGhvZHM7Zm9yKHZhciBmIGluIGQpe2RbZl09ZFtmXXx8ZTt2YXIgZz1kW2ZdO2chPT1lLnByb3RvdHlwZSYmZyE9PWV8fCh0aGlzLl9pc0dsb2JhbCYmKHdpbmRvd1tmXT10aGlzLl93cmFwUHJlbG9hZCh0aGlzLGYpKSxnPXRoaXMpLHRoaXMuX3JlZ2lzdGVyZWRQcmVsb2FkTWV0aG9kc1tmXT1nW2ZdLGdbZl09dGhpcy5fd3JhcFByZWxvYWQoZyxmKX1iKCksdGhpcy5fcnVuSWZQcmVsb2Fkc0FyZURvbmUoKX1lbHNlIHRoaXMuX3NldHVwKCksdGhpcy5fcnVuRnJhbWVzKCksdGhpcy5fZHJhdygpfS5iaW5kKHRoaXMpLHRoaXMuX3J1bklmUHJlbG9hZHNBcmVEb25lPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoMD09PWEuX3ByZWxvYWRDb3VudCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYS5fbG9hZGluZ1NjcmVlbklkKTtiJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksYS5fc2V0dXAoKSxhLl9ydW5GcmFtZXMoKSxhLl9kcmF3KCl9fSx0aGlzLl9kZWNyZW1lbnRQcmVsb2FkPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7XCJmdW5jdGlvblwiPT10eXBlb2YgYS5wcmVsb2FkJiYoYS5fc2V0UHJvcGVydHkoXCJfcHJlbG9hZENvdW50XCIsYS5fcHJlbG9hZENvdW50LTEpLGEuX3J1bklmUHJlbG9hZHNBcmVEb25lKCkpfSx0aGlzLl93cmFwUHJlbG9hZD1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbmNyZW1lbnRQcmVsb2FkKCksdGhpcy5fcmVnaXN0ZXJlZFByZWxvYWRNZXRob2RzW2JdLmFwcGx5KGEsYXJndW1lbnRzKX0uYmluZCh0aGlzKX0sdGhpcy5faW5jcmVtZW50UHJlbG9hZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2EuX3NldFByb3BlcnR5KFwiX3ByZWxvYWRDb3VudFwiLGEuX3ByZWxvYWRDb3VudCsxKX0sdGhpcy5fc2V0dXA9ZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZUNhbnZhcyh0aGlzLl9kZWZhdWx0Q2FudmFzU2l6ZS53aWR0aCx0aGlzLl9kZWZhdWx0Q2FudmFzU2l6ZS5oZWlnaHQsXCJwMmRcIik7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYS5wcmVsb2FkKWZvcih2YXIgYiBpbiB0aGlzLl9wcmVsb2FkTWV0aG9kcylhW2JdPXRoaXMuX3ByZWxvYWRNZXRob2RzW2JdW2JdLGFbYl0mJnRoaXMmJihhW2JdPWFbYl0uYmluZCh0aGlzKSk7XCJmdW5jdGlvblwiPT10eXBlb2YgYS5zZXR1cCYmYS5zZXR1cCgpO2Zvcih2YXIgYz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNhbnZhc1wiKSxkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07XCJ0cnVlXCI9PT1lLmRhdGFzZXQuaGlkZGVuJiYoZS5zdHlsZS52aXNpYmlsaXR5PVwiXCIsZGVsZXRlIGUuZGF0YXNldC5oaWRkZW4pfXRoaXMuX3NldHVwRG9uZT0hMH0uYmluZCh0aGlzKSx0aGlzLl9kcmF3PWZ1bmN0aW9uKCl7dmFyIGE9d2luZG93LnBlcmZvcm1hbmNlLm5vdygpLGI9YS10aGlzLl9sYXN0RnJhbWVUaW1lLGM9MWUzL3RoaXMuX3RhcmdldEZyYW1lUmF0ZTsoIXRoaXMuX2xvb3B8fGI+PWMtNSkmJih0aGlzLnJlZHJhdygpLHRoaXMuX2ZyYW1lUmF0ZT0xZTMvKGEtdGhpcy5fbGFzdEZyYW1lVGltZSksdGhpcy5fbGFzdEZyYW1lVGltZT1hLHZvaWQgMCE9PXRoaXMuX3VwZGF0ZU1vdXNlQ29vcmRzJiZ0aGlzLl91cGRhdGVNb3VzZUNvb3JkcygpKSx0aGlzLl9sb29wJiYodGhpcy5fcmVxdWVzdEFuaW1JZD13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2RyYXcpKX0uYmluZCh0aGlzKSx0aGlzLl9ydW5GcmFtZXM9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVJbnRlcnZhbCYmY2xlYXJJbnRlcnZhbCh0aGlzLl91cGRhdGVJbnRlcnZhbCl9LmJpbmQodGhpcyksdGhpcy5fc2V0UHJvcGVydHk9ZnVuY3Rpb24oYSxiKXt0aGlzW2FdPWIsdGhpcy5faXNHbG9iYWwmJih3aW5kb3dbYV09Yil9LmJpbmQodGhpcyksdGhpcy5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9sb2FkaW5nU2NyZWVuSWQpO2lmKGEmJihhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSksdGhpcy5faW5jcmVtZW50UHJlbG9hZCgpKSx0aGlzLl9jdXJFbGVtZW50KXt0aGlzLl9sb29wPSExLHRoaXMuX3JlcXVlc3RBbmltSWQmJndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0QW5pbUlkKTtmb3IodmFyIGIgaW4gdGhpcy5fZXZlbnRzKXdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGIsdGhpcy5fZXZlbnRzW2JdKTtmb3IodmFyIGM9MDtjPHRoaXMuX2VsZW1lbnRzLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuX2VsZW1lbnRzW2NdO2QuZWx0LnBhcmVudE5vZGUmJmQuZWx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZC5lbHQpO2Zvcih2YXIgZiBpbiBkLl9ldmVudHMpZC5lbHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihmLGQuX2V2ZW50c1tmXSl9dmFyIGc9dGhpczt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5yZW1vdmUuZm9yRWFjaChmdW5jdGlvbihhKXt2b2lkIDAhPT1hJiZhLmNhbGwoZyl9KX1pZih0aGlzLl9pc0dsb2JhbCl7Zm9yKHZhciBoIGluIGUucHJvdG90eXBlKXRyeXtkZWxldGUgd2luZG93W2hdfWNhdGNoKGEpe3dpbmRvd1toXT12b2lkIDB9Zm9yKHZhciBpIGluIHRoaXMpaWYodGhpcy5oYXNPd25Qcm9wZXJ0eShpKSl0cnl7ZGVsZXRlIHdpbmRvd1tpXX1jYXRjaChhKXt3aW5kb3dbaV09dm9pZCAwfWUuaW5zdGFuY2U9bnVsbH19LmJpbmQodGhpcyksdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaW5pdC5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEmJmEuY2FsbCh0aGlzKX0sdGhpcyk7dmFyIGg9dGhpcy5fY3JlYXRlRnJpZW5kbHlHbG9iYWxGdW5jdGlvbkJpbmRlcigpO2lmKGEpYSh0aGlzKTtlbHNle3RoaXMuX2lzR2xvYmFsPSEwLGUuaW5zdGFuY2U9dGhpcztmb3IodmFyIGkgaW4gZS5wcm90b3R5cGUpaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5wcm90b3R5cGVbaV0pe3ZhciBqPWkuc3Vic3RyaW5nKDIpO3RoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShqKXx8KE1hdGguaGFzT3duUHJvcGVydHkoaSkmJk1hdGhbaV09PT1lLnByb3RvdHlwZVtpXT9oKGksZS5wcm90b3R5cGVbaV0pOmgoaSxlLnByb3RvdHlwZVtpXS5iaW5kKHRoaXMpKSl9ZWxzZSBoKGksZS5wcm90b3R5cGVbaV0pO2Zvcih2YXIgayBpbiB0aGlzKXRoaXMuaGFzT3duUHJvcGVydHkoaykmJmgoayx0aGlzW2tdKX1mb3IodmFyIGwgaW4gdGhpcy5fZXZlbnRzKXt2YXIgbT10aGlzW1wiX29uXCIrbF07aWYobSl7dmFyIG49bS5iaW5kKHRoaXMpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKGwsbix7cGFzc2l2ZTohMX0pLHRoaXMuX2V2ZW50c1tsXT1ufX12YXIgbz1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwiZm9jdXNlZFwiLCEwKX0uYmluZCh0aGlzKSxwPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJmb2N1c2VkXCIsITEpfS5iaW5kKHRoaXMpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIixvKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIixwKSx0aGlzLnJlZ2lzdGVyTWV0aG9kKFwicmVtb3ZlXCIsZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsbyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIscCl9KSxjP3RoaXMuX3N0YXJ0KCk6XCJjb21wbGV0ZVwiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZT90aGlzLl9zdGFydCgpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLHRoaXMuX3N0YXJ0LmJpbmQodGhpcyksITEpfTtlLnByb3RvdHlwZS5faW5pdGlhbGl6ZUluc3RhbmNlVmFyaWFibGVzPWZ1bmN0aW9uKCl7dGhpcy5fc3R5bGVzPVtdLHRoaXMuX2JlemllckRldGFpbD0yMCx0aGlzLl9jdXJ2ZURldGFpbD0yMCx0aGlzLl9jb2xvck1vZGU9ZC5SR0IsdGhpcy5fY29sb3JNYXhlcz17cmdiOlsyNTUsMjU1LDI1NSwyNTVdLGhzYjpbMzYwLDEwMCwxMDAsMV0saHNsOlszNjAsMTAwLDEwMCwxXX0sdGhpcy5fcGl4ZWxzRGlydHk9ITB9LGUuaW5zdGFuY2U9bnVsbCxlLmRpc2FibGVGcmllbmRseUVycm9ycz0hMTtmb3IodmFyIGYgaW4gZCllLnByb3RvdHlwZVtmXT1kW2ZdO2UucHJvdG90eXBlLl9wcmVsb2FkTWV0aG9kcz17bG9hZEpTT046ZS5wcm90b3R5cGUsbG9hZEltYWdlOmUucHJvdG90eXBlLGxvYWRTdHJpbmdzOmUucHJvdG90eXBlLGxvYWRYTUw6ZS5wcm90b3R5cGUsbG9hZEJ5dGVzOmUucHJvdG90eXBlLGxvYWRUYWJsZTplLnByb3RvdHlwZSxsb2FkRm9udDplLnByb3RvdHlwZSxsb2FkTW9kZWw6ZS5wcm90b3R5cGUsbG9hZFNoYWRlcjplLnByb3RvdHlwZX0sZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRNZXRob2RzPXtpbml0OltdLHByZTpbXSxwb3N0OltdLHJlbW92ZTpbXX0sZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRQcmVsb2FkTWV0aG9kcz17fSxlLnByb3RvdHlwZS5yZWdpc3RlclByZWxvYWRNZXRob2Q9ZnVuY3Rpb24oYSxiKXtlLnByb3RvdHlwZS5fcHJlbG9hZE1ldGhvZHMuaGFzT3duUHJvcGVydHkoYSl8fChlLnByb3RvdHlwZS5fcHJlbG9hZE1ldGhvZHNbYV09Yil9LGUucHJvdG90eXBlLnJlZ2lzdGVyTWV0aG9kPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpc3x8ZS5wcm90b3R5cGU7Yy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzT3duUHJvcGVydHkoYSl8fChjLl9yZWdpc3RlcmVkTWV0aG9kc1thXT1bXSksYy5fcmVnaXN0ZXJlZE1ldGhvZHNbYV0ucHVzaChiKX0sZS5wcm90b3R5cGUuX2NyZWF0ZUZyaWVuZGx5R2xvYmFsRnVuY3Rpb25CaW5kZXI9ZnVuY3Rpb24oYSl7YT1hfHx7fTt2YXIgYj1hLmdsb2JhbE9iamVjdHx8d2luZG93LGM9YS5sb2d8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksZD17cHJpbnQ6ITB9O3JldHVybiBmdW5jdGlvbihhLGYpe2lmKGUuZGlzYWJsZUZyaWVuZGx5RXJyb3JzLDEpYlthXT1mO2Vsc2UgdHJ5e2lmKGEgaW4gYiYmIShhIGluIGQpKXRocm93IG5ldyBFcnJvcignZ2xvYmFsIFwiJythKydcIiBhbHJlYWR5IGV4aXN0cycpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmfSxzZXQ6ZnVuY3Rpb24oZCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsYSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZCx3cml0YWJsZTohMH0pLGMoJ1lvdSBqdXN0IGNoYW5nZWQgdGhlIHZhbHVlIG9mIFwiJythK1wiXFxcIiwgd2hpY2ggd2FzIGEgcDUgZnVuY3Rpb24uIFRoaXMgY291bGQgY2F1c2UgcHJvYmxlbXMgbGF0ZXIgaWYgeW91J3JlIG5vdCBjYXJlZnVsLlwiKX19KX1jYXRjaChkKXtjKCdwNSBoYWQgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIGdsb2JhbCBmdW5jdGlvbiBcIicrYSsnXCIsIHBvc3NpYmx5IGJlY2F1c2UgeW91ciBjb2RlIGlzIGFscmVhZHkgdXNpbmcgdGhhdCBuYW1lIGFzIGEgdmFyaWFibGUuIFlvdSBtYXkgd2FudCB0byByZW5hbWUgeW91ciB2YXJpYWJsZSB0byBzb21ldGhpbmcgZWxzZS4nKSxiW2FdPWZ9fX0sYi5leHBvcnRzPWV9LHtcIi4vY29uc3RhbnRzXCI6MTgsXCIuL3NoaW1cIjozNH1dLDI1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyl7cmV0dXJuITE9PT1iP2YoYSxjKTplKGEsYixjKSx0aGlzfWZ1bmN0aW9uIGUoYSxiLGMpe2MuX2V2ZW50c1thXSYmZihhLGMpO3ZhciBkPWIuYmluZChjKTtjLmVsdC5hZGRFdmVudExpc3RlbmVyKGEsZCwhMSksYy5fZXZlbnRzW2FdPWR9ZnVuY3Rpb24gZihhLGIpe3ZhciBjPWIuX2V2ZW50c1thXTtiLmVsdC5yZW1vdmVFdmVudExpc3RlbmVyKGEsYywhMSksYi5fZXZlbnRzW2FdPW51bGx9dmFyIGc9YShcIi4vbWFpblwiKTtnLkVsZW1lbnQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmVsdD1hLHRoaXMuX3BJbnN0PWIsdGhpcy5fZXZlbnRzPXt9LHRoaXMud2lkdGg9dGhpcy5lbHQub2Zmc2V0V2lkdGgsdGhpcy5oZWlnaHQ9dGhpcy5lbHQub2Zmc2V0SGVpZ2h0fSxnLkVsZW1lbnQucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT90aGlzLmVsdC5wYXJlbnROb2RlOihcInN0cmluZ1wiPT10eXBlb2YgYT8oXCIjXCI9PT1hWzBdJiYoYT1hLnN1YnN0cmluZygxKSksYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSk6YSBpbnN0YW5jZW9mIGcuRWxlbWVudCYmKGE9YS5lbHQpLGEuYXBwZW5kQ2hpbGQodGhpcy5lbHQpLHRoaXMpfSxnLkVsZW1lbnQucHJvdG90eXBlLmlkPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hP3RoaXMuZWx0LmlkOih0aGlzLmVsdC5pZD1hLHRoaXMud2lkdGg9dGhpcy5lbHQub2Zmc2V0V2lkdGgsdGhpcy5oZWlnaHQ9dGhpcy5lbHQub2Zmc2V0SGVpZ2h0LHRoaXMpfSxnLkVsZW1lbnQucHJvdG90eXBlLmNsYXNzPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hP3RoaXMuZWx0LmNsYXNzTmFtZToodGhpcy5lbHQuY2xhc3NOYW1lPWEsdGhpcyl9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VQcmVzc2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2Vkb3duXCIsZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIm1vdXNlSXNQcmVzc2VkXCIsITApLHRoaXMuX3BJbnN0Ll9zZXRNb3VzZUJ1dHRvbihiKSxhKCl9LHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuZG91YmxlQ2xpY2tlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcImRibGNsaWNrXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlV2hlZWw9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ3aGVlbFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZVJlbGVhc2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2V1cFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZUNsaWNrZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJjbGlja1wiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZU1vdmVkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2Vtb3ZlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlT3Zlcj1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNlb3ZlclwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5jaGFuZ2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiY2hhbmdlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmlucHV0PWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiaW5wdXRcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VPdXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJtb3VzZW91dFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS50b3VjaFN0YXJ0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ0b3VjaHN0YXJ0XCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLnRvdWNoTW92ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ0b3VjaG1vdmVcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUudG91Y2hFbmRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcInRvdWNoZW5kXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRyYWdPdmVyPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiZHJhZ292ZXJcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuZHJhZ0xlYXZlPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiZHJhZ2xlYXZlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRyb3A9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPW5ldyBnLkZpbGUoYik7cmV0dXJuIGZ1bmN0aW9uKGIpe2MuZGF0YT1iLnRhcmdldC5yZXN1bHQsYShjKX19cmV0dXJuIHdpbmRvdy5GaWxlJiZ3aW5kb3cuRmlsZVJlYWRlciYmd2luZG93LkZpbGVMaXN0JiZ3aW5kb3cuQmxvYj8oZShcImRyYWdvdmVyXCIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKSxhLnByZXZlbnREZWZhdWx0KCl9LHRoaXMpLGUoXCJkcmFnbGVhdmVcIixmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpLGEucHJldmVudERlZmF1bHQoKX0sdGhpcyksdm9pZCAwIT09YiYmZShcImRyb3BcIixiLHRoaXMpLGUoXCJkcm9wXCIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKSxhLnByZXZlbnREZWZhdWx0KCk7Zm9yKHZhciBiPWEuZGF0YVRyYW5zZmVyLmZpbGVzLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGU9YltkXSxmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPWMoZSksZS50eXBlLmluZGV4T2YoXCJ0ZXh0XCIpPi0xP2YucmVhZEFzVGV4dChlKTpmLnJlYWRBc0RhdGFVUkwoZSl9fSx0aGlzKSk6Y29uc29sZS5sb2coXCJUaGUgRmlsZSBBUElzIGFyZSBub3QgZnVsbHkgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci5cIiksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5fc2V0UHJvcGVydHk9ZnVuY3Rpb24oYSxiKXt0aGlzW2FdPWJ9LGIuZXhwb3J0cz1nLkVsZW1lbnR9LHtcIi4vbWFpblwiOjI0fV0sMjY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpLGU9YShcIi4vY29uc3RhbnRzXCIpO2QuR3JhcGhpY3M9ZnVuY3Rpb24oYSxiLGMsZil7dmFyIGc9Y3x8ZS5QMkQ7dGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSwoZi5fdXNlck5vZGV8fGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzKSxkLkVsZW1lbnQuY2FsbCh0aGlzLHRoaXMuY2FudmFzLGYsITEpO2Zvcih2YXIgaCBpbiBkLnByb3RvdHlwZSl0aGlzW2hdfHwoXCJmdW5jdGlvblwiPT10eXBlb2YgZC5wcm90b3R5cGVbaF0/dGhpc1toXT1kLnByb3RvdHlwZVtoXS5iaW5kKHRoaXMpOnRoaXNbaF09ZC5wcm90b3R5cGVbaF0pO3JldHVybiBkLnByb3RvdHlwZS5faW5pdGlhbGl6ZUluc3RhbmNlVmFyaWFibGVzLmFwcGx5KHRoaXMpLHRoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iLHRoaXMuX3BpeGVsRGVuc2l0eT1mLl9waXhlbERlbnNpdHksZz09PWUuV0VCR0w/dGhpcy5fcmVuZGVyZXI9bmV3IGQuUmVuZGVyZXJHTCh0aGlzLmNhbnZhcyx0aGlzLCExKTp0aGlzLl9yZW5kZXJlcj1uZXcgZC5SZW5kZXJlcjJEKHRoaXMuY2FudmFzLHRoaXMsITEpLGYuX2VsZW1lbnRzLnB1c2godGhpcyksdGhpcy5fcmVuZGVyZXIucmVzaXplKGEsYiksdGhpcy5fcmVuZGVyZXIuX2FwcGx5RGVmYXVsdHMoKSx0aGlzfSxkLkdyYXBoaWNzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQuRWxlbWVudC5wcm90b3R5cGUpLGQuR3JhcGhpY3MucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuZWx0LnBhcmVudE5vZGUmJnRoaXMuZWx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbHQpO3ZhciBhPXRoaXMuX3BJbnN0Ll9lbGVtZW50cy5pbmRleE9mKHRoaXMpOy0xIT09YSYmdGhpcy5fcEluc3QuX2VsZW1lbnRzLnNwbGljZShhLDEpO2Zvcih2YXIgYiBpbiB0aGlzLl9ldmVudHMpdGhpcy5lbHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLHRoaXMuX2V2ZW50c1tiXSl9LGIuZXhwb3J0cz1kLkdyYXBoaWNzfSx7XCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjR9XSwyNzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSl7dmFyIGI9MCxjPTA7aWYoYS5vZmZzZXRQYXJlbnQpZG97Yis9YS5vZmZzZXRMZWZ0LGMrPWEub2Zmc2V0VG9wfXdoaWxlKGE9YS5vZmZzZXRQYXJlbnQpO2Vsc2UgYis9YS5vZmZzZXRMZWZ0LGMrPWEub2Zmc2V0VG9wO3JldHVybltiLGNdfXZhciBlPWEoXCIuL21haW5cIiksZj1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZS5SZW5kZXJlcj1mdW5jdGlvbihhLGIsYyl7ZS5FbGVtZW50LmNhbGwodGhpcyxhLGIpLHRoaXMuY2FudmFzPWEsYz8odGhpcy5faXNNYWluQ2FudmFzPSEwLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIl9jdXJFbGVtZW50XCIsdGhpcyksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiY2FudmFzXCIsdGhpcy5jYW52YXMpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIndpZHRoXCIsdGhpcy53aWR0aCksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiaGVpZ2h0XCIsdGhpcy5oZWlnaHQpKToodGhpcy5jYW52YXMuc3R5bGUuZGlzcGxheT1cIm5vbmVcIix0aGlzLl9zdHlsZXM9W10pLHRoaXMuX3RleHRTaXplPTEyLHRoaXMuX3RleHRMZWFkaW5nPTE1LHRoaXMuX3RleHRGb250PVwic2Fucy1zZXJpZlwiLHRoaXMuX3RleHRTdHlsZT1mLk5PUk1BTCx0aGlzLl90ZXh0QXNjZW50PW51bGwsdGhpcy5fdGV4dERlc2NlbnQ9bnVsbCx0aGlzLl90ZXh0QWxpZ249Zi5MRUZULHRoaXMuX3RleHRCYXNlbGluZT1mLkJBU0VMSU5FLHRoaXMuX3JlY3RNb2RlPWYuQ09STkVSLHRoaXMuX2VsbGlwc2VNb2RlPWYuQ0VOVEVSLHRoaXMuX2N1cnZlVGlnaHRuZXNzPTAsdGhpcy5faW1hZ2VNb2RlPWYuQ09STkVSLHRoaXMuX3RpbnQ9bnVsbCx0aGlzLl9kb1N0cm9rZT0hMCx0aGlzLl9kb0ZpbGw9ITAsdGhpcy5fc3Ryb2tlU2V0PSExLHRoaXMuX2ZpbGxTZXQ9ITF9LGUuUmVuZGVyZXIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5FbGVtZW50LnByb3RvdHlwZSksZS5SZW5kZXJlci5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3JldHVybntwcm9wZXJ0aWVzOntfZG9TdHJva2U6dGhpcy5fZG9TdHJva2UsX3N0cm9rZVNldDp0aGlzLl9zdHJva2VTZXQsX2RvRmlsbDp0aGlzLl9kb0ZpbGwsX2ZpbGxTZXQ6dGhpcy5fZmlsbFNldCxfdGludDp0aGlzLl90aW50LF9pbWFnZU1vZGU6dGhpcy5faW1hZ2VNb2RlLF9yZWN0TW9kZTp0aGlzLl9yZWN0TW9kZSxfZWxsaXBzZU1vZGU6dGhpcy5fZWxsaXBzZU1vZGUsX3RleHRGb250OnRoaXMuX3RleHRGb250LF90ZXh0TGVhZGluZzp0aGlzLl90ZXh0TGVhZGluZyxfdGV4dFNpemU6dGhpcy5fdGV4dFNpemUsX3RleHRBbGlnbjp0aGlzLl90ZXh0QWxpZ24sX3RleHRCYXNlbGluZTp0aGlzLl90ZXh0QmFzZWxpbmUsX3RleHRTdHlsZTp0aGlzLl90ZXh0U3R5bGV9fX0sZS5SZW5kZXJlci5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKGEpe2EucHJvcGVydGllcyYmT2JqZWN0LmFzc2lnbih0aGlzLGEucHJvcGVydGllcyl9LGUuUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihhLGIpe3RoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iLHRoaXMuZWx0LndpZHRoPWEqdGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSx0aGlzLmVsdC5oZWlnaHQ9Yip0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LHRoaXMuZWx0LnN0eWxlLndpZHRoPWErXCJweFwiLHRoaXMuZWx0LnN0eWxlLmhlaWdodD1iK1wicHhcIix0aGlzLl9pc01haW5DYW52YXMmJih0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJ3aWR0aFwiLHRoaXMud2lkdGgpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcImhlaWdodFwiLHRoaXMuaGVpZ2h0KSl9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRMZWFkaW5nPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPyh0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0TGVhZGluZ1wiLGEpLHRoaXMuX3BJbnN0KTp0aGlzLl90ZXh0TGVhZGluZ30sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dFNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGE/KHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRTaXplXCIsYSksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dExlYWRpbmdcIixhKmYuX0RFRkFVTFRfTEVBRE1VTFQpLHRoaXMuX2FwcGx5VGV4dFByb3BlcnRpZXMoKSk6dGhpcy5fdGV4dFNpemV9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRTdHlsZT1mdW5jdGlvbihhKXtyZXR1cm4gYT8oYSE9PWYuTk9STUFMJiZhIT09Zi5JVEFMSUMmJmEhPT1mLkJPTER8fHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRTdHlsZVwiLGEpLHRoaXMuX2FwcGx5VGV4dFByb3BlcnRpZXMoKSk6dGhpcy5fdGV4dFN0eWxlfSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0QXNjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl90ZXh0QXNjZW50JiZ0aGlzLl91cGRhdGVUZXh0TWV0cmljcygpLHRoaXMuX3RleHRBc2NlbnR9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHREZXNjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl90ZXh0RGVzY2VudCYmdGhpcy5fdXBkYXRlVGV4dE1ldHJpY3MoKSx0aGlzLl90ZXh0RGVzY2VudH0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dEFsaWduPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMCE9PWE/KHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRBbGlnblwiLGEpLHZvaWQgMCE9PWImJnRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRCYXNlbGluZVwiLGIpLHRoaXMuX2FwcGx5VGV4dFByb3BlcnRpZXMoKSk6e2hvcml6b250YWw6dGhpcy5fdGV4dEFsaWduLHZlcnRpY2FsOnRoaXMuX3RleHRCYXNlbGluZX19LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZyxoLGksaixrLGwsbSxuLG8scD10aGlzLl9wSW5zdCxxPU51bWJlci5NQVhfVkFMVUU7aWYoKHRoaXMuX2RvRmlsbHx8dGhpcy5fZG9TdHJva2UpJiZ2b2lkIDAhPT1hKXtpZihcInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSxhPWEucmVwbGFjZSgvKFxcdCkvZyxcIiAgXCIpLGc9YS5zcGxpdChcIlxcblwiKSx2b2lkIDAhPT1kKXtmb3Iobz0wLGk9MDtpPGcubGVuZ3RoO2krKylmb3Ioaz1cIlwiLG49Z1tpXS5zcGxpdChcIiBcIiksaD0wO2g8bi5sZW5ndGg7aCsrKWw9aytuW2hdK1wiIFwiLG09dGhpcy50ZXh0V2lkdGgobCksbT5kPyhrPW5baF0rXCIgXCIsbys9cC50ZXh0TGVhZGluZygpKTprPWw7c3dpdGNoKHRoaXMuX3JlY3RNb2RlPT09Zi5DRU5URVImJihiLT1kLzIsYy09ZS8yKSx0aGlzLl90ZXh0QWxpZ24pe2Nhc2UgZi5DRU5URVI6Yis9ZC8yO2JyZWFrO2Nhc2UgZi5SSUdIVDpiKz1kfXZhciByPSExO2lmKHZvaWQgMCE9PWUpe3N3aXRjaCh0aGlzLl90ZXh0QmFzZWxpbmUpe2Nhc2UgZi5CT1RUT006Yys9ZS1vO2JyZWFrO2Nhc2UgZi5DRU5URVI6Yys9KGUtbykvMjticmVhaztjYXNlIGYuQkFTRUxJTkU6cj0hMCx0aGlzLl90ZXh0QmFzZWxpbmU9Zi5UT1B9cT1jK2UtcC50ZXh0QXNjZW50KCl9Zm9yKGk9MDtpPGcubGVuZ3RoO2krKyl7Zm9yKGs9XCJcIixuPWdbaV0uc3BsaXQoXCIgXCIpLGg9MDtoPG4ubGVuZ3RoO2grKylsPWsrbltoXStcIiBcIixtPXRoaXMudGV4dFdpZHRoKGwpLG0+ZCYmay5sZW5ndGg+MD8odGhpcy5fcmVuZGVyVGV4dChwLGssYixjLHEpLGs9bltoXStcIiBcIixjKz1wLnRleHRMZWFkaW5nKCkpOms9bDt0aGlzLl9yZW5kZXJUZXh0KHAsayxiLGMscSksYys9cC50ZXh0TGVhZGluZygpLHImJih0aGlzLl90ZXh0QmFzZWxpbmU9Zi5CQVNFTElORSl9fWVsc2V7dmFyIHM9MCx0PXAudGV4dEFsaWduKCkudmVydGljYWw7Zm9yKHQ9PT1mLkNFTlRFUj9zPShnLmxlbmd0aC0xKSpwLnRleHRMZWFkaW5nKCkvMjp0PT09Zi5CT1RUT00mJihzPShnLmxlbmd0aC0xKSpwLnRleHRMZWFkaW5nKCkpLGo9MDtqPGcubGVuZ3RoO2orKyl0aGlzLl9yZW5kZXJUZXh0KHAsZ1tqXSxiLGMtcyxxKSxjKz1wLnRleHRMZWFkaW5nKCl9cmV0dXJuIHB9fSxlLlJlbmRlcmVyLnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLlJlbmRlcmVyLnByb3RvdHlwZS5faXNPcGVuVHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YoYT1hfHx0aGlzLl90ZXh0Rm9udCkmJmEuZm9udCYmYS5mb250LnN1cHBvcnRlZH0sZS5SZW5kZXJlci5wcm90b3R5cGUuX3VwZGF0ZVRleHRNZXRyaWNzPWZ1bmN0aW9uKCl7aWYodGhpcy5faXNPcGVuVHlwZSgpKXJldHVybiB0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QXNjZW50XCIsdGhpcy5fdGV4dEZvbnQuX3RleHRBc2NlbnQoKSksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dERlc2NlbnRcIix0aGlzLl90ZXh0Rm9udC5fdGV4dERlc2NlbnQoKSksdGhpczt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTthLnN0eWxlLmZvbnRGYW1pbHk9dGhpcy5fdGV4dEZvbnQsYS5zdHlsZS5mb250U2l6ZT10aGlzLl90ZXh0U2l6ZStcInB4XCIsYS5pbm5lckhUTUw9XCJBQkNqZ3F8XCI7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtiLnN0eWxlLmRpc3BsYXk9XCJpbmxpbmUtYmxvY2tcIixiLnN0eWxlLndpZHRoPVwiMXB4XCIsYi5zdHlsZS5oZWlnaHQ9XCIwcHhcIjt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2MuYXBwZW5kQ2hpbGQoYSksYy5hcHBlbmRDaGlsZChiKSxjLnN0eWxlLmhlaWdodD1cIjBweFwiLGMuc3R5bGUub3ZlcmZsb3c9XCJoaWRkZW5cIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpLGIuc3R5bGUudmVydGljYWxBbGlnbj1cImJhc2VsaW5lXCI7dmFyIGU9ZChiKSxmPWQoYSksZz1lWzFdLWZbMV07Yi5zdHlsZS52ZXJ0aWNhbEFsaWduPVwiYm90dG9tXCIsZT1kKGIpLGY9ZChhKTt2YXIgaD1lWzFdLWZbMV0saT1oLWc7cmV0dXJuIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYyksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEFzY2VudFwiLGcpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHREZXNjZW50XCIsaSksdGhpc30sYi5leHBvcnRzPWUuUmVuZGVyZXJ9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNH1dLDI4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKSxlPWEoXCIuL2NvbnN0YW50c1wiKSxmPWEoXCIuLi9pbWFnZS9maWx0ZXJzXCIpO2EoXCIuL3A1LlJlbmRlcmVyXCIpO3ZhciBnPVwicmdiYSgwLDAsMCwwKVwiO2QuUmVuZGVyZXIyRD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGQuUmVuZGVyZXIuY2FsbCh0aGlzLGEsYixjKSx0aGlzLmRyYXdpbmdDb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJkcmF3aW5nQ29udGV4dFwiLHRoaXMuZHJhd2luZ0NvbnRleHQpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlJlbmRlcmVyLnByb3RvdHlwZSksZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0cz1mdW5jdGlvbigpe3RoaXMuX2NhY2hlZEZpbGxTdHlsZT10aGlzLl9jYWNoZWRTdHJva2VTdHlsZT12b2lkIDAsdGhpcy5fc2V0RmlsbChlLl9ERUZBVUxUX0ZJTEwpLHRoaXMuX3NldFN0cm9rZShlLl9ERUZBVUxUX1NUUk9LRSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lQ2FwPWUuUk9VTkQsdGhpcy5kcmF3aW5nQ29udGV4dC5mb250PVwibm9ybWFsIDEycHggc2Fucy1zZXJpZlwifSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihhLGIpe2QuUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsYSxiKSx0aGlzLmRyYXdpbmdDb250ZXh0LnNjYWxlKHRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksdGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe2lmKHRoaXMuZHJhd2luZ0NvbnRleHQuc2F2ZSgpLHRoaXMucmVzZXRNYXRyaXgoKSxhcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQuSW1hZ2UpdGhpcy5fcEluc3QuaW1hZ2UoYXJndW1lbnRzWzBdLDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTtlbHNle3ZhciBhPXRoaXMuX2dldEZpbGwoKSxiPXRoaXMuX3BJbnN0LmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyksYz1iLnRvU3RyaW5nKCk7dGhpcy5fc2V0RmlsbChjKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGxSZWN0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLl9zZXRGaWxsKGEpfXRoaXMuZHJhd2luZ0NvbnRleHQucmVzdG9yZSgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZHJhd2luZ0NvbnRleHQuc2F2ZSgpLHRoaXMucmVzZXRNYXRyaXgoKSx0aGlzLmRyYXdpbmdDb250ZXh0LmNsZWFyUmVjdCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5kcmF3aW5nQ29udGV4dC5yZXN0b3JlKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpO3RoaXMuX3NldEZpbGwoYS50b1N0cmluZygpKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zdHJva2U9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpO3RoaXMuX3NldFN0cm9rZShhLnRvU3RyaW5nKCkpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmltYWdlPWZ1bmN0aW9uKGEsYixjLGUsZixnLGgsaSxqKXt2YXIgazt0cnl7dGhpcy5fdGludCYmKGQuTWVkaWFFbGVtZW50JiZhIGluc3RhbmNlb2YgZC5NZWRpYUVsZW1lbnQmJmEubG9hZFBpeGVscygpLGEuY2FudmFzJiYoaz10aGlzLl9nZXRUaW50ZWRJbWFnZUNhbnZhcyhhKSkpLGt8fChrPWEuY2FudmFzfHxhLmVsdCk7dmFyIGw9MTthLndpZHRoJiZhLndpZHRoPjAmJihsPWsud2lkdGgvYS53aWR0aCksdGhpcy5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoayxsKmIsbCpjLGwqZSxsKmYsZyxoLGksail9Y2F0Y2goYSl7aWYoXCJOU19FUlJPUl9OT1RfQVZBSUxBQkxFXCIhPT1hLm5hbWUpdGhyb3cgYX10aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2dldFRpbnRlZEltYWdlQ2FudmFzPWZ1bmN0aW9uKGEpe2lmKCFhLmNhbnZhcylyZXR1cm4gYTt2YXIgYj1mLl90b1BpeGVscyhhLmNhbnZhcyksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Mud2lkdGg9YS5jYW52YXMud2lkdGgsYy5oZWlnaHQ9YS5jYW52YXMuaGVpZ2h0O2Zvcih2YXIgZD1jLmdldENvbnRleHQoXCIyZFwiKSxlPWQuY3JlYXRlSW1hZ2VEYXRhKGEuY2FudmFzLndpZHRoLGEuY2FudmFzLmhlaWdodCksZz1lLmRhdGEsaD0wO2g8Yi5sZW5ndGg7aCs9NCl7dmFyIGk9YltoXSxqPWJbaCsxXSxrPWJbaCsyXSxsPWJbaCszXTtnW2hdPWkqdGhpcy5fdGludFswXS8yNTUsZ1toKzFdPWoqdGhpcy5fdGludFsxXS8yNTUsZ1toKzJdPWsqdGhpcy5fdGludFsyXS8yNTUsZ1toKzNdPWwqdGhpcy5fdGludFszXS8yNTV9cmV0dXJuIGQucHV0SW1hZ2VEYXRhKGUsMCwwKSxjfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJsZW5kTW9kZT1mdW5jdGlvbihhKXt0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1hfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJsZW5kPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24sYj1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSxjPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwLGFyZ3VtZW50cy5sZW5ndGgtMSk7dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249Yix0aGlzLl9wSW5zdD90aGlzLl9wSW5zdC5jb3B5LmFwcGx5KHRoaXMuX3BJbnN0LGMpOnRoaXMuY29weS5hcHBseSh0aGlzLGMpLHRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWF9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhLGIsYyxlLGYsZyxoLGksajtpZig5PT09YXJndW1lbnRzLmxlbmd0aClhPWFyZ3VtZW50c1swXSxiPWFyZ3VtZW50c1sxXSxjPWFyZ3VtZW50c1syXSxlPWFyZ3VtZW50c1szXSxmPWFyZ3VtZW50c1s0XSxnPWFyZ3VtZW50c1s1XSxoPWFyZ3VtZW50c1s2XSxpPWFyZ3VtZW50c1s3XSxqPWFyZ3VtZW50c1s4XTtlbHNle2lmKDghPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlNpZ25hdHVyZSBub3Qgc3VwcG9ydGVkXCIpO2E9dGhpcy5fcEluc3QsYj1hcmd1bWVudHNbMF0sYz1hcmd1bWVudHNbMV0sZT1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10sZz1hcmd1bWVudHNbNF0saD1hcmd1bWVudHNbNV0saT1hcmd1bWVudHNbNl0saj1hcmd1bWVudHNbN119ZC5SZW5kZXJlcjJELl9jb3B5SGVscGVyKHRoaXMsYSxiLGMsZSxmLGcsaCxpLGopLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELl9jb3B5SGVscGVyPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpLGope2IubG9hZFBpeGVscygpO3ZhciBrPWIuY2FudmFzLndpZHRoL2Iud2lkdGg7YS5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoYi5jYW52YXMsaypjLGsqZCxrKmUsaypmLGcsaCxpLGopfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxlKXtpZih2b2lkIDA9PT1jJiZ2b2lkIDA9PT1lJiYodm9pZCAwPT09YSYmdm9pZCAwPT09Yj8oYT1iPTAsYz10aGlzLndpZHRoLGU9dGhpcy5oZWlnaHQpOmM9ZT0xKSxhK2M8MHx8YitlPDB8fGE+PXRoaXMud2lkdGh8fGI+PXRoaXMuaGVpZ2h0KXJldHVyblswLDAsMCwyNTVdO3ZhciBmPXRoaXMuX3BJbnN0fHx0aGlzLGc9Zi5fcGl4ZWxEZW5zaXR5O2E9TWF0aC5mbG9vcihhKSxiPU1hdGguZmxvb3IoYiksYz1NYXRoLmZsb29yKGMpLGU9TWF0aC5mbG9vcihlKTt2YXIgaD1hKmcsaT1iKmc7aWYoMSE9PWN8fDEhPT1lfHx0aGlzIGluc3RhbmNlb2YgZC5SZW5kZXJlckdMKXt2YXIgaj1NYXRoLm1pbihjLGYud2lkdGgpLGs9TWF0aC5taW4oZSxmLmhlaWdodCksbD1qKmcsbT1rKmcsbj1uZXcgZC5JbWFnZShqLGspO3JldHVybiBuLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIikuZHJhd0ltYWdlKHRoaXMuY2FudmFzLGgsaSxsLG0sMCwwLGosayksbn12YXIgbyxwO3JldHVybiBmLl9waXhlbHNEaXJ0eT8obz10aGlzLmRyYXdpbmdDb250ZXh0LmdldEltYWdlRGF0YShoLGksMSwxKS5kYXRhLHA9MCk6KG89Zi5waXhlbHMscD00KihoK2kqdGhpcy53aWR0aCpnKSksW29bcCswXSxvW3ArMV0sb1twKzJdLG9bcCszXV19LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUubG9hZFBpeGVscz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX3BJbnN0fHx0aGlzO2lmKGEuX3BpeGVsc0RpcnR5KXthLl9waXhlbHNEaXJ0eT0hMTt2YXIgYj1hLl9waXhlbERlbnNpdHksYz10aGlzLndpZHRoKmIsZD10aGlzLmhlaWdodCpiLGU9dGhpcy5kcmF3aW5nQ29udGV4dC5nZXRJbWFnZURhdGEoMCwwLGMsZCk7YS5fc2V0UHJvcGVydHkoXCJpbWFnZURhdGFcIixlKSxhLl9zZXRQcm9wZXJ0eShcInBpeGVsc1wiLGUuZGF0YSl9fSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7YT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihiKTt2YXIgZT10aGlzLl9wSW5zdHx8dGhpcztpZihjIGluc3RhbmNlb2YgZC5JbWFnZSl0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSx0aGlzLmRyYXdpbmdDb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5kcmF3aW5nQ29udGV4dC5zY2FsZShlLl9waXhlbERlbnNpdHksZS5fcGl4ZWxEZW5zaXR5KSx0aGlzLmRyYXdpbmdDb250ZXh0LmRyYXdJbWFnZShjLmNhbnZhcyxhLGIpLHRoaXMuZHJhd2luZ0NvbnRleHQucmVzdG9yZSgpLGUuX3BpeGVsc0RpcnR5PSEwO2Vsc2V7dmFyIGY9MCxnPTAsaD0wLGk9MCxqPTQqKGIqZS5fcGl4ZWxEZW5zaXR5Kih0aGlzLndpZHRoKmUuX3BpeGVsRGVuc2l0eSkrYSplLl9waXhlbERlbnNpdHkpO2lmKGUuaW1hZ2VEYXRhJiYhZS5fcGl4ZWxzRGlydHl8fGUubG9hZFBpeGVscy5jYWxsKGUpLFwibnVtYmVyXCI9PXR5cGVvZiBjKWo8ZS5waXhlbHMubGVuZ3RoJiYoZj1jLGc9YyxoPWMsaT0yNTUpO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIEFycmF5KXtpZihjLmxlbmd0aDw0KXRocm93IG5ldyBFcnJvcihcInBpeGVsIGFycmF5IG11c3QgYmUgb2YgdGhlIGZvcm0gW1IsIEcsIEIsIEFdXCIpO2o8ZS5waXhlbHMubGVuZ3RoJiYoZj1jWzBdLGc9Y1sxXSxoPWNbMl0saT1jWzNdKX1lbHNlIGMgaW5zdGFuY2VvZiBkLkNvbG9yJiZqPGUucGl4ZWxzLmxlbmd0aCYmKGY9Yy5sZXZlbHNbMF0sZz1jLmxldmVsc1sxXSxoPWMubGV2ZWxzWzJdLGk9Yy5sZXZlbHNbM10pO2Zvcih2YXIgaz0wO2s8ZS5fcGl4ZWxEZW5zaXR5O2srKylmb3IodmFyIGw9MDtsPGUuX3BpeGVsRGVuc2l0eTtsKyspaj00KigoYiplLl9waXhlbERlbnNpdHkrbCkqdGhpcy53aWR0aCplLl9waXhlbERlbnNpdHkrKGEqZS5fcGl4ZWxEZW5zaXR5K2spKSxlLnBpeGVsc1tqXT1mLGUucGl4ZWxzW2orMV09ZyxlLnBpeGVsc1tqKzJdPWgsZS5waXhlbHNbaiszXT1pfX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS51cGRhdGVQaXhlbHM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5fcEluc3R8fHRoaXMsZj1lLl9waXhlbERlbnNpdHk7dm9pZCAwPT09YSYmdm9pZCAwPT09YiYmdm9pZCAwPT09YyYmdm9pZCAwPT09ZCYmKGE9MCxiPTAsYz10aGlzLndpZHRoLGQ9dGhpcy5oZWlnaHQpLGMqPWYsZCo9Zix0aGlzLmRyYXdpbmdDb250ZXh0LnB1dEltYWdlRGF0YShlLmltYWdlRGF0YSxhLGIsMCwwLGMsZCksMD09PWEmJjA9PT1iJiZjPT09dGhpcy53aWR0aCYmZD09PXRoaXMuaGVpZ2h0fHwoZS5fcGl4ZWxzRGlydHk9ITApfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9hY3V0ZUFyY1RvQmV6aWVyPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi8yLGQ9TWF0aC5jb3MoYyksZT1NYXRoLnNpbihjKSxmPTEvTWF0aC50YW4oYyksZz1hK2MsaD1NYXRoLmNvcyhnKSxpPU1hdGguc2luKGcpLGo9KDQtZCkvMyxrPWUrKGQtaikqZjtyZXR1cm57YXg6TWF0aC5jb3MoYSksYXk6TWF0aC5zaW4oYSksYng6aipoK2sqaSxieTpqKmktaypoLGN4OmoqaC1rKmksY3k6aippK2sqaCxkeDpNYXRoLmNvcyhhK2IpLGR5Ok1hdGguc2luKGErYil9fSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmFyYz1mdW5jdGlvbihhLGIsYyxkLGYsZyxoKXt2YXIgaT10aGlzLmRyYXdpbmdDb250ZXh0LGo9Yy8yLGs9ZC8yLGw9MWUtNSxtPTAsbj1bXTtmb3IoYSs9aixiKz1rO2ctZj5sOyltPU1hdGgubWluKGctZixlLkhBTEZfUEkpLG4ucHVzaCh0aGlzLl9hY3V0ZUFyY1RvQmV6aWVyKGYsbSkpLGYrPW07cmV0dXJuIHRoaXMuX2RvRmlsbCYmKGkuYmVnaW5QYXRoKCksbi5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7MD09PWQmJmkubW92ZVRvKGErYy5heCpqLGIrYy5heSprKSxpLmJlemllckN1cnZlVG8oYStjLmJ4KmosYitjLmJ5KmssYStjLmN4KmosYitjLmN5KmssYStjLmR4KmosYitjLmR5KmspfSksaCE9PWUuUElFJiZudWxsIT1ofHxpLmxpbmVUbyhhLGIpLGkuY2xvc2VQYXRoKCksaS5maWxsKCkpLHRoaXMuX2RvU3Ryb2tlJiYoaS5iZWdpblBhdGgoKSxuLmZvckVhY2goZnVuY3Rpb24oYyxkKXswPT09ZCYmaS5tb3ZlVG8oYStjLmF4KmosYitjLmF5KmspLGkuYmV6aWVyQ3VydmVUbyhhK2MuYngqaixiK2MuYnkqayxhK2MuY3gqaixiK2MuY3kqayxhK2MuZHgqaixiK2MuZHkqayl9KSxoPT09ZS5QSUU/KGkubGluZVRvKGEsYiksaS5jbG9zZVBhdGgoKSk6aD09PWUuQ0hPUkQmJmkuY2xvc2VQYXRoKCksaS5zdHJva2UoKSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5lbGxpcHNlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZHJhd2luZ0NvbnRleHQsYz10aGlzLl9kb0ZpbGwsZD10aGlzLl9kb1N0cm9rZSxlPWFbMF0sZj1hWzFdLGg9YVsyXSxpPWFbM107aWYoYyYmIWQpe2lmKHRoaXMuX2dldEZpbGwoKT09PWcpcmV0dXJuIHRoaXN9ZWxzZSBpZighYyYmZCYmdGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO3ZhciBqPS41NTIyODQ3NDk4LGs9aC8yKmosbD1pLzIqaixtPWUraCxuPWYraSxvPWUraC8yLHA9ZitpLzI7Yi5iZWdpblBhdGgoKSxiLm1vdmVUbyhlLHApLGIuYmV6aWVyQ3VydmVUbyhlLHAtbCxvLWssZixvLGYpLGIuYmV6aWVyQ3VydmVUbyhvK2ssZixtLHAtbCxtLHApLGIuYmV6aWVyQ3VydmVUbyhtLHArbCxvK2ssbixvLG4pLGIuYmV6aWVyQ3VydmVUbyhvLWssbixlLHArbCxlLHApLGIuY2xvc2VQYXRoKCksYyYmYi5maWxsKCksZCYmYi5zdHJva2UoKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5saW5lPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZHJhd2luZ0NvbnRleHQ7cmV0dXJuIHRoaXMuX2RvU3Ryb2tlP3RoaXMuX2dldFN0cm9rZSgpPT09Zz90aGlzOihlLmxpbmVXaWR0aCUyPT0xJiZlLnRyYW5zbGF0ZSguNSwuNSksZS5iZWdpblBhdGgoKSxlLm1vdmVUbyhhLGIpLGUubGluZVRvKGMsZCksZS5zdHJva2UoKSxlLmxpbmVXaWR0aCUyPT0xJiZlLnRyYW5zbGF0ZSgtLjUsLS41KSx0aGlzKTp0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5kcmF3aW5nQ29udGV4dDtpZighdGhpcy5fZG9TdHJva2UpcmV0dXJuIHRoaXM7aWYodGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO3ZhciBkPXRoaXMuX2dldFN0cm9rZSgpLGY9dGhpcy5fZ2V0RmlsbCgpO2E9TWF0aC5yb3VuZChhKSxiPU1hdGgucm91bmQoYiksdGhpcy5fc2V0RmlsbChkKSxjLmxpbmVXaWR0aD4xPyhjLmJlZ2luUGF0aCgpLGMuYXJjKGEsYixjLmxpbmVXaWR0aC8yLDAsZS5UV09fUEksITEpLGMuZmlsbCgpKTpjLmZpbGxSZWN0KGEsYiwxLDEpLHRoaXMuX3NldEZpbGwoZil9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucXVhZD1mdW5jdGlvbihhLGIsYyxkLGUsZixoLGkpe3ZhciBqPXRoaXMuZHJhd2luZ0NvbnRleHQsaz10aGlzLl9kb0ZpbGwsbD10aGlzLl9kb1N0cm9rZTtpZihrJiYhbCl7aWYodGhpcy5fZ2V0RmlsbCgpPT09ZylyZXR1cm4gdGhpc31lbHNlIGlmKCFrJiZsJiZ0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7cmV0dXJuIGouYmVnaW5QYXRoKCksai5tb3ZlVG8oYSxiKSxqLmxpbmVUbyhjLGQpLGoubGluZVRvKGUsZiksai5saW5lVG8oaCxpKSxqLmNsb3NlUGF0aCgpLGsmJmouZmlsbCgpLGwmJmouc3Ryb2tlKCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5yZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGQ9YVsyXSxlPWFbM10sZj1hWzRdLGg9YVs1XSxpPWFbNl0saj1hWzddLGs9dGhpcy5kcmF3aW5nQ29udGV4dCxsPXRoaXMuX2RvRmlsbCxtPXRoaXMuX2RvU3Ryb2tlO2lmKGwmJiFtKXtpZih0aGlzLl9nZXRGaWxsKCk9PT1nKXJldHVybiB0aGlzfWVsc2UgaWYoIWwmJm0mJnRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpcztpZih0aGlzLl9kb1N0cm9rZSYmay5saW5lV2lkdGglMj09MSYmay50cmFuc2xhdGUoLjUsLjUpLGsuYmVnaW5QYXRoKCksdm9pZCAwPT09ZilrLnJlY3QoYixjLGQsZSk7ZWxzZXt2b2lkIDA9PT1oJiYoaD1mKSx2b2lkIDA9PT1pJiYoaT1oKSx2b2lkIDA9PT1qJiYoaj1pKTt2YXIgbj1kLzIsbz1lLzI7ZDwyKmYmJihmPW4pLGU8MipmJiYoZj1vKSxkPDIqaCYmKGg9biksZTwyKmgmJihoPW8pLGQ8MippJiYoaT1uKSxlPDIqaSYmKGk9byksZDwyKmomJihqPW4pLGU8MipqJiYoaj1vKSxrLmJlZ2luUGF0aCgpLGsubW92ZVRvKGIrZixjKSxrLmFyY1RvKGIrZCxjLGIrZCxjK2UsaCksay5hcmNUbyhiK2QsYytlLGIsYytlLGkpLGsuYXJjVG8oYixjK2UsYixjLGopLGsuYXJjVG8oYixjLGIrZCxjLGYpLGsuY2xvc2VQYXRoKCl9cmV0dXJuIHRoaXMuX2RvRmlsbCYmay5maWxsKCksdGhpcy5fZG9TdHJva2UmJmsuc3Ryb2tlKCksdGhpcy5fZG9TdHJva2UmJmsubGluZVdpZHRoJTI9PTEmJmsudHJhbnNsYXRlKC0uNSwtLjUpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudHJpYW5nbGU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kcmF3aW5nQ29udGV4dCxjPXRoaXMuX2RvRmlsbCxkPXRoaXMuX2RvU3Ryb2tlLGU9YVswXSxmPWFbMV0saD1hWzJdLGk9YVszXSxqPWFbNF0saz1hWzVdO2lmKGMmJiFkKXtpZih0aGlzLl9nZXRGaWxsKCk9PT1nKXJldHVybiB0aGlzfWVsc2UgaWYoIWMmJmQmJnRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpcztiLmJlZ2luUGF0aCgpLGIubW92ZVRvKGUsZiksYi5saW5lVG8oaCxpKSxiLmxpbmVUbyhqLGspLGIuY2xvc2VQYXRoKCksYyYmYi5maWxsKCksZCYmYi5zdHJva2UoKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5lbmRTaGFwZT1mdW5jdGlvbihhLGIsYyxkLGYsZyxoKXtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIHRoaXM7aWYoIXRoaXMuX2RvU3Ryb2tlJiYhdGhpcy5fZG9GaWxsKXJldHVybiB0aGlzO3ZhciBpLGo9YT09PWUuQ0xPU0U7aiYmIWcmJmIucHVzaChiWzBdKTt2YXIgayxsLG09Yi5sZW5ndGg7aWYoIWN8fGghPT1lLlBPTFlHT04mJm51bGwhPT1oKWlmKCFkfHxoIT09ZS5QT0xZR09OJiZudWxsIT09aClpZighZnx8aCE9PWUuUE9MWUdPTiYmbnVsbCE9PWgpaWYoaD09PWUuUE9JTlRTKWZvcihrPTA7azxtO2srKylpPWJba10sdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShpWzZdKSx0aGlzLl9wSW5zdC5wb2ludChpWzBdLGlbMV0pO2Vsc2UgaWYoaD09PWUuTElORVMpZm9yKGs9MDtrKzE8bTtrKz0yKWk9YltrXSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbaysxXVs2XSksdGhpcy5fcEluc3QubGluZShpWzBdLGlbMV0sYltrKzFdWzBdLGJbaysxXVsxXSk7ZWxzZSBpZihoPT09ZS5UUklBTkdMRVMpZm9yKGs9MDtrKzI8bTtrKz0zKWk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGlbMF0saVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzFdWzBdLGJbaysxXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzJdWzBdLGJbaysyXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9kb0ZpbGwmJih0aGlzLl9wSW5zdC5maWxsKGJbaysyXVs1XSksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsKCkpLHRoaXMuX2RvU3Ryb2tlJiYodGhpcy5fcEluc3Quc3Ryb2tlKGJbaysyXVs2XSksdGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2UoKSk7ZWxzZSBpZihoPT09ZS5UUklBTkdMRV9TVFJJUClmb3Ioaz0wO2srMTxtO2srKylpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiW2srMV1bMF0sYltrKzFdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzFdWzZdKSxcbnRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srMV1bNV0pLGsrMjxtJiYodGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzJdWzBdLGJbaysyXVsxXSksdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srMl1bNl0pLHRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srMl1bNV0pKSx0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpO2Vsc2UgaWYoaD09PWUuVFJJQU5HTEVfRkFOKXtpZihtPjIpe2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGs9MjtrPG07aysrKWk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiWzBdWzBdLGJbMF1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbay0xXVswXSxiW2stMV1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYlswXVswXSxiWzBdWzFdKSxrPG0tMSYmKHRoaXMuX2RvRmlsbCYmaVs1XSE9PWJbaysxXVs1XXx8dGhpcy5fZG9TdHJva2UmJmlbNl0hPT1iW2srMV1bNl0pJiYodGhpcy5fZG9GaWxsJiYodGhpcy5fcEluc3QuZmlsbChpWzVdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGwoKSx0aGlzLl9wSW5zdC5maWxsKGJbaysxXVs1XSkpLHRoaXMuX2RvU3Ryb2tlJiYodGhpcy5fcEluc3Quc3Ryb2tlKGlbNl0pLHRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlKCksdGhpcy5fcEluc3Quc3Ryb2tlKGJbaysxXVs2XSkpLHRoaXMuZHJhd2luZ0NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX19ZWxzZSBpZihoPT09ZS5RVUFEUylmb3Ioaz0wO2srMzxtO2srPTQpe2ZvcihpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pLGw9MTtsPDQ7bCsrKXRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaytsXVswXSxiW2srbF1bMV0pO3RoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSksdGhpcy5fZG9GaWxsJiZ0aGlzLl9wSW5zdC5maWxsKGJbayszXVs1XSksdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srM11bNl0pLHRoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZSBpZihoPT09ZS5RVUFEX1NUUklQKXtpZihtPjMpZm9yKGs9MDtrKzE8bTtrKz0yKWk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGsrMzxtPyh0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiW2srMl1bMF0sYltrKzJdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbayszXVswXSxiW2srM11bMV0pLHRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srM11bNV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzNdWzZdKSk6KHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGlbMF0saVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzFdWzBdLGJbaysxXVsxXSkpLHRoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZXtmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiWzBdWzBdLGJbMF1bMV0pLGs9MTtrPG07aysrKWk9YltrXSxpLmlzVmVydCYmKGkubW92ZVRvP3RoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGlbMF0saVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNle2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGs9MDtrPG07aysrKWJba10uaXNWZXJ0P2Jba10ubW92ZVRvP3RoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKFswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2tdWzBdLGJba11bMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQucXVhZHJhdGljQ3VydmVUbyhiW2tdWzBdLGJba11bMV0sYltrXVsyXSxiW2tdWzNdKTt0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2V7Zm9yKHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksaz0wO2s8bTtrKyspYltrXS5pc1ZlcnQ/YltrXS5tb3ZlVG8/dGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYltrXVswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2tdWzBdLGJba11bMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQuYmV6aWVyQ3VydmVUbyhiW2tdWzBdLGJba11bMV0sYltrXVsyXSxiW2tdWzNdLGJba11bNF0sYltrXVs1XSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNlIGlmKG0+Myl7dmFyIG49W10sbz0xLXRoaXMuX2N1cnZlVGlnaHRuZXNzO2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJbMV1bMF0sYlsxXVsxXSksaz0xO2srMjxtO2srKylpPWJba10sblswXT1baVswXSxpWzFdXSxuWzFdPVtpWzBdKyhvKmJbaysxXVswXS1vKmJbay0xXVswXSkvNixpWzFdKyhvKmJbaysxXVsxXS1vKmJbay0xXVsxXSkvNl0sblsyXT1bYltrKzFdWzBdKyhvKmJba11bMF0tbypiW2srMl1bMF0pLzYsYltrKzFdWzFdKyhvKmJba11bMV0tbypiW2srMl1bMV0pLzZdLG5bM109W2JbaysxXVswXSxiW2srMV1bMV1dLHRoaXMuZHJhd2luZ0NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzFdWzBdLG5bMV1bMV0sblsyXVswXSxuWzJdWzFdLG5bM11bMF0sblszXVsxXSk7aiYmdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzFdWzBdLGJbaysxXVsxXSksdGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1yZXR1cm4gYz0hMSxkPSExLGY9ITEsZz0hMSxqJiZiLnBvcCgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLm5vU21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuXCJpbWFnZVNtb290aGluZ0VuYWJsZWRcImluIHRoaXMuZHJhd2luZ0NvbnRleHQmJih0aGlzLmRyYXdpbmdDb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zbW9vdGg9ZnVuY3Rpb24oKXtyZXR1cm5cImltYWdlU21vb3RoaW5nRW5hYmxlZFwiaW4gdGhpcy5kcmF3aW5nQ29udGV4dCYmKHRoaXMuZHJhd2luZ0NvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSEwKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnN0cm9rZUNhcD1mdW5jdGlvbihhKXtyZXR1cm4gYSE9PWUuUk9VTkQmJmEhPT1lLlNRVUFSRSYmYSE9PWUuUFJPSkVDVHx8KHRoaXMuZHJhd2luZ0NvbnRleHQubGluZUNhcD1hKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnN0cm9rZUpvaW49ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1lLlJPVU5EJiZhIT09ZS5CRVZFTCYmYSE9PWUuTUlURVJ8fCh0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVKb2luPWEpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc3Ryb2tlV2VpZ2h0PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVXaWR0aD12b2lkIDA9PT1hfHwwPT09YT8xZS00OmEsdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fZ2V0RmlsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRGaWxsU3R5bGV8fCh0aGlzLl9jYWNoZWRGaWxsU3R5bGU9dGhpcy5kcmF3aW5nQ29udGV4dC5maWxsU3R5bGUpLHRoaXMuX2NhY2hlZEZpbGxTdHlsZX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fc2V0RmlsbD1mdW5jdGlvbihhKXthIT09dGhpcy5fY2FjaGVkRmlsbFN0eWxlJiYodGhpcy5kcmF3aW5nQ29udGV4dC5maWxsU3R5bGU9YSx0aGlzLl9jYWNoZWRGaWxsU3R5bGU9YSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2dldFN0cm9rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRTdHJva2VTdHlsZXx8KHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlU3R5bGUpLHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9zZXRTdHJva2U9ZnVuY3Rpb24oYSl7YSE9PXRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlJiYodGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2VTdHlsZT1hLHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlPWEpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJlemllcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3JldHVybiB0aGlzLl9wSW5zdC5iZWdpblNoYXBlKCksdGhpcy5fcEluc3QudmVydGV4KGEsYiksdGhpcy5fcEluc3QuYmV6aWVyVmVydGV4KGMsZCxlLGYsZyxoKSx0aGlzLl9wSW5zdC5lbmRTaGFwZSgpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY3VydmU9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXtyZXR1cm4gdGhpcy5fcEluc3QuYmVnaW5TaGFwZSgpLHRoaXMuX3BJbnN0LmN1cnZlVmVydGV4KGEsYiksdGhpcy5fcEluc3QuY3VydmVWZXJ0ZXgoYyxkKSx0aGlzLl9wSW5zdC5jdXJ2ZVZlcnRleChlLGYpLHRoaXMuX3BJbnN0LmN1cnZlVmVydGV4KGcsaCksdGhpcy5fcEluc3QuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9kb0ZpbGxTdHJva2VDbG9zZT1mdW5jdGlvbigpe3RoaXMuX2RvRmlsbCYmdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsKCksdGhpcy5fZG9TdHJva2UmJnRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlKCksdGhpcy5kcmF3aW5nQ29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNmb3JtKGEsYixjLGQsZSxmKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5yZXNldE1hdHJpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5kcmF3aW5nQ29udGV4dC5zY2FsZSh0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LHRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHkpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEpe3RoaXMuZHJhd2luZ0NvbnRleHQucm90YXRlKGEpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQuc2NhbGUoYSxiKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNoZWFyWD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC50cmFuc2Zvcm0oMSwwLE1hdGgudGFuKGEpLDEsMCwwKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNoZWFyWT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC50cmFuc2Zvcm0oMSxNYXRoLnRhbihhKSwwLDEsMCwwKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihhLGIpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3ImJihiPWEueSxhPWEueCksdGhpcy5kcmF3aW5nQ29udGV4dC50cmFuc2xhdGUoYSxiKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oYSxiLGMsZixnKXt2YXIgaDt2b2lkIDAhPT1mJiZ2b2lkIDAhPT1nJiZ0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT09PWUuQkFTRUxJTkUmJihoPSEwLHRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPWUuVE9QKTt2YXIgaT1kLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaCYmKHRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPWUuQkFTRUxJTkUpLGl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX3JlbmRlclRleHQ9ZnVuY3Rpb24oYSxiLGMsZCxmKXtpZighKGQ+PWYpKXJldHVybiBhLnB1c2goKSx0aGlzLl9pc09wZW5UeXBlKCk/dGhpcy5fdGV4dEZvbnQuX3JlbmRlclBhdGgoYixjLGQse3JlbmRlcmVyOnRoaXN9KToodGhpcy5fZG9TdHJva2UmJnRoaXMuX3N0cm9rZVNldCYmdGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2VUZXh0KGIsYyxkKSx0aGlzLl9kb0ZpbGwmJih0aGlzLl9maWxsU2V0fHx0aGlzLl9zZXRGaWxsKGUuX0RFRkFVTFRfVEVYVF9GSUxMKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGxUZXh0KGIsYyxkKSkpLGEucG9wKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLGF9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudGV4dFdpZHRoPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9pc09wZW5UeXBlKCk/dGhpcy5fdGV4dEZvbnQuX3RleHRXaWR0aChhLHRoaXMuX3RleHRTaXplKTp0aGlzLmRyYXdpbmdDb250ZXh0Lm1lYXN1cmVUZXh0KGEpLndpZHRofSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9hcHBseVRleHRQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLl9wSW5zdDtyZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEFzY2VudFwiLG51bGwpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHREZXNjZW50XCIsbnVsbCksYT10aGlzLl90ZXh0Rm9udCx0aGlzLl9pc09wZW5UeXBlKCkmJihhPXRoaXMuX3RleHRGb250LmZvbnQuZmFtaWx5TmFtZSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0U3R5bGVcIix0aGlzLl90ZXh0Rm9udC5mb250LnN0eWxlTmFtZSkpLHRoaXMuZHJhd2luZ0NvbnRleHQuZm9udD0odGhpcy5fdGV4dFN0eWxlfHxcIm5vcm1hbFwiKStcIiBcIisodGhpcy5fdGV4dFNpemV8fDEyKStcInB4IFwiKyhhfHxcInNhbnMtc2VyaWZcIiksdGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QWxpZ249dGhpcy5fdGV4dEFsaWduLHRoaXMuX3RleHRCYXNlbGluZT09PWUuQ0VOVEVSP3RoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPWUuX0NUWF9NSURETEU6dGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QmFzZWxpbmU9dGhpcy5fdGV4dEJhc2VsaW5lLGJ9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSxkLlJlbmRlcmVyLnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnBvcD1mdW5jdGlvbihhKXt0aGlzLmRyYXdpbmdDb250ZXh0LnJlc3RvcmUoKSx0aGlzLl9jYWNoZWRGaWxsU3R5bGU9dGhpcy5kcmF3aW5nQ29udGV4dC5maWxsU3R5bGUsdGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGU9dGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2VTdHlsZSxkLlJlbmRlcmVyLnByb3RvdHlwZS5wb3AuY2FsbCh0aGlzLGEpfSxiLmV4cG9ydHM9ZC5SZW5kZXJlcjJEfSx7XCIuLi9pbWFnZS9maWx0ZXJzXCI6NDIsXCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjQsXCIuL3A1LlJlbmRlcmVyXCI6Mjd9XSwyOTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIiksZT1hKFwiLi9jb25zdGFudHNcIik7YShcIi4vcDUuR3JhcGhpY3NcIiksYShcIi4vcDUuUmVuZGVyZXIyRFwiKSxhKFwiLi4vd2ViZ2wvcDUuUmVuZGVyZXJHTFwiKTt2YXIgZj1cImRlZmF1bHRDYW52YXMwXCIsZz1cInA1Q2FudmFzXCI7ZC5wcm90b3R5cGUuY3JlYXRlQ2FudmFzPWZ1bmN0aW9uKGEsYixjKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVDYW52YXNcIixhcmd1bWVudHMpO3ZhciBoLGk9Y3x8ZS5QMkQ7aWYoaT09PWUuV0VCR0wpe2lmKGg9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZikpe2gucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKTt2YXIgaj10aGlzLl9yZW5kZXJlcjt0aGlzLl9lbGVtZW50cz10aGlzLl9lbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1qfSl9aD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGguaWQ9ZixoLmNsYXNzTGlzdC5hZGQoZyl9ZWxzZSBpZih0aGlzLl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkKWg9dGhpcy5jYW52YXM7ZWxzZXtoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7Zm9yKHZhciBrPTA7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkZWZhdWx0Q2FudmFzXCIrayk7KWsrKztmPVwiZGVmYXVsdENhbnZhc1wiK2ssaC5pZD1mLGguY2xhc3NMaXN0LmFkZChnKX1yZXR1cm4gdGhpcy5fc2V0dXBEb25lfHwoaC5kYXRhc2V0LmhpZGRlbj0hMCxoLnN0eWxlLnZpc2liaWxpdHk9XCJoaWRkZW5cIiksdGhpcy5fdXNlck5vZGU/dGhpcy5fdXNlck5vZGUuYXBwZW5kQ2hpbGQoaCk6ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSxpPT09ZS5XRUJHTD8odGhpcy5fc2V0UHJvcGVydHkoXCJfcmVuZGVyZXJcIixuZXcgZC5SZW5kZXJlckdMKGgsdGhpcywhMCkpLHRoaXMuX2VsZW1lbnRzLnB1c2godGhpcy5fcmVuZGVyZXIpKTp0aGlzLl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkfHwodGhpcy5fc2V0UHJvcGVydHkoXCJfcmVuZGVyZXJcIixuZXcgZC5SZW5kZXJlcjJEKGgsdGhpcywhMCkpLHRoaXMuX2RlZmF1bHRHcmFwaGljc0NyZWF0ZWQ9ITAsdGhpcy5fZWxlbWVudHMucHVzaCh0aGlzLl9yZW5kZXJlcikpLHRoaXMuX3JlbmRlcmVyLnJlc2l6ZShhLGIpLHRoaXMuX3JlbmRlcmVyLl9hcHBseURlZmF1bHRzKCksdGhpcy5fcmVuZGVyZXJ9LGQucHJvdG90eXBlLnJlc2l6ZUNhbnZhcz1mdW5jdGlvbihhLGIsYyl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicmVzaXplQ2FudmFzXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlcil7dmFyIGU9e307Zm9yKHZhciBmIGluIHRoaXMuZHJhd2luZ0NvbnRleHQpe3ZhciBnPXRoaXMuZHJhd2luZ0NvbnRleHRbZl07XCJvYmplY3RcIiE9dHlwZW9mIGcmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGcmJihlW2ZdPWcpfXRoaXMuX3JlbmRlcmVyLnJlc2l6ZShhLGIpLHRoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iO2Zvcih2YXIgaCBpbiBlKXRyeXt0aGlzLmRyYXdpbmdDb250ZXh0W2hdPWVbaF19Y2F0Y2goYSl7fWN8fHRoaXMucmVkcmF3KCl9fSxkLnByb3RvdHlwZS5ub0NhbnZhcz1mdW5jdGlvbigpe3RoaXMuY2FudmFzJiZ0aGlzLmNhbnZhcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY2FudmFzKX0sZC5wcm90b3R5cGUuY3JlYXRlR3JhcGhpY3M9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVHcmFwaGljc1wiLGFyZ3VtZW50cyksbmV3IGQuR3JhcGhpY3MoYSxiLGMsdGhpcyl9LGQucHJvdG90eXBlLmJsZW5kTW9kZT1mdW5jdGlvbihhKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJibGVuZE1vZGVcIixhcmd1bWVudHMpLGEhPT1lLkJMRU5EJiZhIT09ZS5EQVJLRVNUJiZhIT09ZS5MSUdIVEVTVCYmYSE9PWUuRElGRkVSRU5DRSYmYSE9PWUuTVVMVElQTFkmJmEhPT1lLkVYQ0xVU0lPTiYmYSE9PWUuU0NSRUVOJiZhIT09ZS5SRVBMQUNFJiZhIT09ZS5PVkVSTEFZJiZhIT09ZS5IQVJEX0xJR0hUJiZhIT09ZS5TT0ZUX0xJR0hUJiZhIT09ZS5ET0RHRSYmYSE9PWUuQlVSTiYmYSE9PWUuQUREJiZhIT09ZS5OT1JNQUwpdGhyb3cgbmV3IEVycm9yKFwiTW9kZSBcIithK1wiIG5vdCByZWNvZ25pemVkLlwiKTt0aGlzLl9yZW5kZXJlci5ibGVuZE1vZGUoYSl9LGIuZXhwb3J0cz1kfSx7XCIuLi93ZWJnbC9wNS5SZW5kZXJlckdMXCI6NzQsXCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjQsXCIuL3A1LkdyYXBoaWNzXCI6MjYsXCIuL3A1LlJlbmRlcmVyMkRcIjoyOH1dLDMwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL21haW5cIiksZT1hKFwiLi4vY29uc3RhbnRzXCIpLGY9YShcIi4uL2hlbHBlcnNcIik7YShcIi4uL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUuYXJjPWZ1bmN0aW9uKGEsYixjLGcsaCxpLGosayl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYXJjXCIsYXJndW1lbnRzKSwhdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiYhdGhpcy5fcmVuZGVyZXIuX2RvRmlsbClyZXR1cm4gdGhpcztmb3IoaD10aGlzLl90b1JhZGlhbnMoaCksaT10aGlzLl90b1JhZGlhbnMoaSk7aDwwOyloKz1lLlRXT19QSTtmb3IoO2k8MDspaSs9ZS5UV09fUEk7dm9pZCAwIT09aCYmdm9pZCAwIT09aSYmKGkudG9GaXhlZCgxMCk9PT1oLnRvRml4ZWQoMTApfHxNYXRoLmFicyhpLWgpPT09ZS5UV09fUEk/KGglPWUuVFdPX1BJLGklPWUuVFdPX1BJLGgrPWUuVFdPX1BJKTpNYXRoLmFicyhpLWgpPmUuVFdPX1BJJiYoaCU9ZS5UV09fUEksaSU9ZS5UV09fUEksaSs9ZS5UV09fUEkpKSxoPD1lLkhBTEZfUEk/aD1NYXRoLmF0YW4oYy9nKk1hdGgudGFuKGgpKTpoPmUuSEFMRl9QSSYmaDw9MyplLkhBTEZfUEkmJihoPU1hdGguYXRhbihjL2cqTWF0aC50YW4oaCkpK2UuUEkpLGk8PWUuSEFMRl9QST9pPU1hdGguYXRhbihjL2cqTWF0aC50YW4oaSkpOmk+ZS5IQUxGX1BJJiZpPD0zKmUuSEFMRl9QSSYmKGk9TWF0aC5hdGFuKGMvZypNYXRoLnRhbihpKSkrZS5QSSksaD5pJiYoaSs9ZS5UV09fUEkpLGM9TWF0aC5hYnMoYyksZz1NYXRoLmFicyhnKTt2YXIgbD1mLm1vZGVBZGp1c3QoYSxiLGMsZyx0aGlzLl9yZW5kZXJlci5fZWxsaXBzZU1vZGUpO3JldHVybiB0aGlzLl9yZW5kZXJlci5hcmMobC54LGwueSxsLncsbC5oLGgsaSxqLGspLHRoaXN9LGQucHJvdG90eXBlLmVsbGlwc2U9ZnVuY3Rpb24oYSxiLGMsZSxnKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJlbGxpcHNlXCIsYXJndW1lbnRzKSwhdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiYhdGhpcy5fcmVuZGVyZXIuX2RvRmlsbClyZXR1cm4gdGhpcztjPDAmJihjPU1hdGguYWJzKGMpKSx2b2lkIDA9PT1lP2U9YzplPDAmJihlPU1hdGguYWJzKGUpKTt2YXIgaD1mLm1vZGVBZGp1c3QoYSxiLGMsZSx0aGlzLl9yZW5kZXJlci5fZWxsaXBzZU1vZGUpO3JldHVybiB0aGlzLl9yZW5kZXJlci5lbGxpcHNlKFtoLngsaC55LGgudyxoLmgsZ10pLHRoaXN9LGQucHJvdG90eXBlLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibGluZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiZ0aGlzLl9yZW5kZXJlci5saW5lLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicG9pbnRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmdGhpcy5fcmVuZGVyZXIucG9pbnQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5xdWFkPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInF1YWRcIixhcmd1bWVudHMpLCh0aGlzLl9yZW5kZXJlci5fZG9TdHJva2V8fHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpJiZ0aGlzLl9yZW5kZXJlci5xdWFkLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucmVjdD1mdW5jdGlvbigpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlY3RcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZXx8dGhpcy5fcmVuZGVyZXIuX2RvRmlsbCl7Zm9yKHZhciBhPWYubW9kZUFkanVzdChhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10sdGhpcy5fcmVuZGVyZXIuX3JlY3RNb2RlKSxiPVthLngsYS55LGEudyxhLmhdLGM9NDtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbY109YXJndW1lbnRzW2NdO3RoaXMuX3JlbmRlcmVyLnJlY3QoYil9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLnRyaWFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRyaWFuZ2xlXCIsYXJndW1lbnRzKSwodGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlfHx0aGlzLl9yZW5kZXJlci5fZG9GaWxsKSYmdGhpcy5fcmVuZGVyZXIudHJpYW5nbGUoYXJndW1lbnRzKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29uc3RhbnRzXCI6MTgsXCIuLi9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9oZWxwZXJzXCI6MjEsXCIuLi9tYWluXCI6MjR9XSwzMTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9tYWluXCIpLGU9YShcIi4uL2NvbnN0YW50c1wiKTtkLnByb3RvdHlwZS5lbGxpcHNlTW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZWxsaXBzZU1vZGVcIixhcmd1bWVudHMpLGEhPT1lLkNPUk5FUiYmYSE9PWUuQ09STkVSUyYmYSE9PWUuUkFESVVTJiZhIT09ZS5DRU5URVJ8fCh0aGlzLl9yZW5kZXJlci5fZWxsaXBzZU1vZGU9YSksdGhpc30sZC5wcm90b3R5cGUubm9TbW9vdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIubm9TbW9vdGgoKSx0aGlzfSxkLnByb3RvdHlwZS5yZWN0TW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicmVjdE1vZGVcIixhcmd1bWVudHMpLGEhPT1lLkNPUk5FUiYmYSE9PWUuQ09STkVSUyYmYSE9PWUuUkFESVVTJiZhIT09ZS5DRU5URVJ8fCh0aGlzLl9yZW5kZXJlci5fcmVjdE1vZGU9YSksdGhpc30sZC5wcm90b3R5cGUuc21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLnNtb290aCgpLHRoaXN9LGQucHJvdG90eXBlLnN0cm9rZUNhcD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3Ryb2tlQ2FwXCIsYXJndW1lbnRzKSxhIT09ZS5ST1VORCYmYSE9PWUuU1FVQVJFJiZhIT09ZS5QUk9KRUNUfHx0aGlzLl9yZW5kZXJlci5zdHJva2VDYXAoYSksdGhpc30sZC5wcm90b3R5cGUuc3Ryb2tlSm9pbj1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3Ryb2tlSm9pblwiLGFyZ3VtZW50cyksYSE9PWUuUk9VTkQmJmEhPT1lLkJFVkVMJiZhIT09ZS5NSVRFUnx8dGhpcy5fcmVuZGVyZXIuc3Ryb2tlSm9pbihhKSx0aGlzfSxkLnByb3RvdHlwZS5zdHJva2VXZWlnaHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInN0cm9rZVdlaWdodFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuc3Ryb2tlV2VpZ2h0KGEpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb25zdGFudHNcIjoxOCxcIi4uL21haW5cIjoyNH1dLDMyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL21haW5cIik7YShcIi4uL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUuYmV6aWVyPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllclwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlfHx0aGlzLl9yZW5kZXJlci5fZG9GaWxsPyh0aGlzLl9yZW5kZXJlci5iZXppZXIuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzKTp0aGlzfSxkLnByb3RvdHlwZS5iZXppZXJEZXRhaWw9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllckRldGFpbFwiLGFyZ3VtZW50cyksdGhpcy5fYmV6aWVyRGV0YWlsPWEsdGhpc30sZC5wcm90b3R5cGUuYmV6aWVyUG9pbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJQb2ludFwiLGFyZ3VtZW50cyk7dmFyIGc9MS1mO3JldHVybiBNYXRoLnBvdyhnLDMpKmErMypNYXRoLnBvdyhnLDIpKmYqYiszKmcqTWF0aC5wb3coZiwyKSpjK01hdGgucG93KGYsMykqZX0sZC5wcm90b3R5cGUuYmV6aWVyVGFuZ2VudD1mdW5jdGlvbihhLGIsYyxlLGYpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllclRhbmdlbnRcIixhcmd1bWVudHMpO3ZhciBnPTEtZjtyZXR1cm4gMyplKk1hdGgucG93KGYsMiktMypjKk1hdGgucG93KGYsMikrNipjKmcqZi02KmIqZypmKzMqYipNYXRoLnBvdyhnLDIpLTMqYSpNYXRoLnBvdyhnLDIpfSxkLnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiZ0aGlzLl9yZW5kZXJlci5jdXJ2ZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLmN1cnZlRGV0YWlsPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZURldGFpbFwiLGFyZ3VtZW50cyksdGhpcy5fY3VydmVEZXRhaWw9YTwzPzM6YSx0aGlzfSxkLnByb3RvdHlwZS5jdXJ2ZVRpZ2h0bmVzcz1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVUaWdodG5lc3NcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9jdXJ2ZVRpZ2h0bmVzcz1hLHRoaXN9LGQucHJvdG90eXBlLmN1cnZlUG9pbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVBvaW50XCIsYXJndW1lbnRzKTt2YXIgZz1mKmYqZixoPWYqZjtyZXR1cm4gYSooLS41KmcraC0uNSpmKStiKigxLjUqZy0yLjUqaCsxKStjKigtMS41KmcrMipoKy41KmYpK2UqKC41KmctLjUqaCl9LGQucHJvdG90eXBlLmN1cnZlVGFuZ2VudD1mdW5jdGlvbihhLGIsYyxlLGYpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlVGFuZ2VudFwiLGFyZ3VtZW50cyk7dmFyIGc9ZipmO3JldHVybiBhKigtMypnLzIrMipmLS41KStiKig5KmcvMi01KmYpK2MqKC05KmcvMis0KmYrLjUpK2UqKDMqZy8yLWYpfSxiLmV4cG9ydHM9ZH0se1wiLi4vZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vbWFpblwiOjI0fV0sMzM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vbWFpblwiKSxlPWEoXCIuLi9jb25zdGFudHNcIiksZj1udWxsLGc9W10saD1bXSxpPSExLGo9ITEsaz0hMSxsPSExLG09ITA7ZC5wcm90b3R5cGUuYmVnaW5Db250b3VyPWZ1bmN0aW9uKCl7cmV0dXJuIGg9W10sbD0hMCx0aGlzfSxkLnByb3RvdHlwZS5iZWdpblNoYXBlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZWdpblNoYXBlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRD90aGlzLl9yZW5kZXJlci5iZWdpblNoYXBlLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk6KGY9YT09PWUuUE9JTlRTfHxhPT09ZS5MSU5FU3x8YT09PWUuVFJJQU5HTEVTfHxhPT09ZS5UUklBTkdMRV9GQU58fGE9PT1lLlRSSUFOR0xFX1NUUklQfHxhPT09ZS5RVUFEU3x8YT09PWUuUVVBRF9TVFJJUD9hOm51bGwsZz1bXSxoPVtdKSx0aGlzfSxkLnByb3RvdHlwZS5iZXppZXJWZXJ0ZXg9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJWZXJ0ZXhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEKXRoaXMuX3JlbmRlcmVyLmJlemllclZlcnRleC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpO2Vsc2V7aWYoMD09PWcubGVuZ3RoKXRocm93XCJ2ZXJ0ZXgoKSBtdXN0IGJlIHVzZWQgb25jZSBiZWZvcmUgY2FsbGluZyBiZXppZXJWZXJ0ZXgoKVwiO2k9ITA7Zm9yKHZhciBhPVtdLGI9MDtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKWFbYl09YXJndW1lbnRzW2JdO2EuaXNWZXJ0PSExLGw/aC5wdXNoKGEpOmcucHVzaChhKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUuY3VydmVWZXJ0ZXg9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVWZXJ0ZXhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEP3RoaXMuX3JlbmRlcmVyLmN1cnZlVmVydGV4LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk6KGo9ITAsdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSkpLHRoaXN9LGQucHJvdG90eXBlLmVuZENvbnRvdXI9ZnVuY3Rpb24oKXt2YXIgYT1oWzBdLnNsaWNlKCk7YS5pc1ZlcnQ9aFswXS5pc1ZlcnQsYS5tb3ZlVG89ITEsaC5wdXNoKGEpLG0mJihnLnB1c2goZ1swXSksbT0hMSk7Zm9yKHZhciBiPTA7YjxoLmxlbmd0aDtiKyspZy5wdXNoKGhbYl0pO3JldHVybiB0aGlzfSxkLnByb3RvdHlwZS5lbmRTaGFwZT1mdW5jdGlvbihhKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJlbmRTaGFwZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhpcy5fcmVuZGVyZXIuZW5kU2hhcGUoYSxqLGksayxsLGYpO2Vsc2V7aWYoMD09PWcubGVuZ3RoKXJldHVybiB0aGlzO2lmKCF0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJiF0aGlzLl9yZW5kZXJlci5fZG9GaWxsKXJldHVybiB0aGlzO3ZhciBiPWE9PT1lLkNMT1NFO2ImJiFsJiZnLnB1c2goZ1swXSksdGhpcy5fcmVuZGVyZXIuZW5kU2hhcGUoYSxnLGosaSxrLGwsZiksaj0hMSxpPSExLGs9ITEsbD0hMSxtPSEwLGImJmcucG9wKCl9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLnF1YWRyYXRpY1ZlcnRleD1mdW5jdGlvbigpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInF1YWRyYXRpY1ZlcnRleFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhpcy5fcmVuZGVyZXIucXVhZHJhdGljVmVydGV4LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk7ZWxzZXtpZih0aGlzLl9jb250b3VySW5pdGVkKXt2YXIgYT17fTtyZXR1cm4gYS54PWFyZ3VtZW50c1swXSxhLnk9YXJndW1lbnRzWzFdLGEueDM9YXJndW1lbnRzWzJdLGEueTM9YXJndW1lbnRzWzNdLGEudHlwZT1lLlFVQURSQVRJQyx0aGlzLl9jb250b3VyVmVydGljZXMucHVzaChhKSx0aGlzfWlmKCEoZy5sZW5ndGg+MCkpdGhyb3cgbmV3IEVycm9yKFwidmVydGV4KCkgbXVzdCBiZSB1c2VkIG9uY2UgYmVmb3JlIGNhbGxpbmcgcXVhZHJhdGljVmVydGV4KClcIik7az0hMDtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYltjXT1hcmd1bWVudHNbY107Yi5pc1ZlcnQ9ITEsbD9oLnB1c2goYik6Zy5wdXNoKGIpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS52ZXJ0ZXg9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZih0aGlzLl9yZW5kZXJlci5pc1AzRCl0aGlzLl9yZW5kZXJlci52ZXJ0ZXguYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTtlbHNle3ZhciBmPVtdO2YuaXNWZXJ0PSEwLGZbMF09YSxmWzFdPWIsZlsyXT0wLGZbM109MCxmWzRdPTAsZls1XT10aGlzLl9yZW5kZXJlci5fZ2V0RmlsbCgpLGZbNl09dGhpcy5fcmVuZGVyZXIuX2dldFN0cm9rZSgpLGMmJihmLm1vdmVUbz1jKSxsPygwPT09aC5sZW5ndGgmJihmLm1vdmVUbz0hMCksaC5wdXNoKGYpKTpnLnB1c2goZil9cmV0dXJuIHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb25zdGFudHNcIjoxOCxcIi4uL21haW5cIjoyNH1dLDM0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cub1JlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxmdW5jdGlvbihhLGIpe3dpbmRvdy5zZXRUaW1lb3V0KGEsMWUzLzYwKX19KCksZnVuY3Rpb24oKXtcInVuZGVmaW5lZFwiPT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXl8fFVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZS5zbGljZXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KFVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZSxcInNsaWNlXCIse3ZhbHVlOkFycmF5LnByb3RvdHlwZS5zbGljZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMX0pfSgpLGZ1bmN0aW9uKCl7aWYoIU9iamVjdC5hc3NpZ24pe3ZhciBhPU9iamVjdC5rZXlzLGI9T2JqZWN0LmRlZmluZVByb3BlcnR5LGM9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMCE9PWEmJm51bGwhPT1hfSxkPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbCgpLGU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxmPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZS5jYWxsKGEsYil9fSxnPWZ1bmN0aW9uKGIsZSl7aWYoIWMoYikpdGhyb3cgbmV3IFR5cGVFcnJvcihcInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdFwiKTt2YXIgZyxoLGksaixrPU9iamVjdChiKTtmb3IoZz0xO2c8YXJndW1lbnRzLmxlbmd0aDsrK2cpZm9yKGg9T2JqZWN0KGFyZ3VtZW50c1tnXSksaj1hKGgpLGQmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJmoucHVzaC5hcHBseShqLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaCkuZmlsdGVyKGYoaCkpKSxpPTA7aTxqLmxlbmd0aDsrK2kpa1tqW2ldXT1oW2pbaV1dO3JldHVybiBrfTtiKE9iamVjdCxcImFzc2lnblwiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwfSl9fSgpfSx7fV0sMzU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2QucHJvdG90eXBlLm5vTG9vcD1mdW5jdGlvbigpe3RoaXMuX2xvb3A9ITF9LGQucHJvdG90eXBlLmxvb3A9ZnVuY3Rpb24oKXt0aGlzLl9sb29wPSEwLHRoaXMuX2RyYXcoKX0sZC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3RoaXMuX3N0eWxlcy5wdXNoKHtwcm9wczp7X2NvbG9yTW9kZTp0aGlzLl9jb2xvck1vZGV9LHJlbmRlcmVyOnRoaXMuX3JlbmRlcmVyLnB1c2goKX0pfSxkLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9zdHlsZXMucG9wKCk7YT8odGhpcy5fcmVuZGVyZXIucG9wKGEucmVuZGVyZXIpLE9iamVjdC5hc3NpZ24odGhpcyxhLnByb3BzKSk6Y29uc29sZS53YXJuKFwicG9wKCkgd2FzIGNhbGxlZCB3aXRob3V0IG1hdGNoaW5nIHB1c2goKVwiKX0sZC5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKGEpe3ZhciBiPXBhcnNlSW50KGEpOyhpc05hTihiKXx8YjwxKSYmKGI9MSk7dmFyIGM9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXMsZD1jLnNldHVwLGU9Yy5kcmF3O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpe3ZvaWQgMD09PWQmJmMuc2NhbGUoYy5fcGl4ZWxEZW5zaXR5LGMuX3BpeGVsRGVuc2l0eSk7Zm9yKHZhciBmPWZ1bmN0aW9uKGEpe2EuY2FsbChjKX0sZz0wO2c8YjtnKyspYy5yZXNldE1hdHJpeCgpLGMuX3JlbmRlcmVyLmlzUDNEJiZjLl9yZW5kZXJlci5fdXBkYXRlKCksYy5fc2V0UHJvcGVydHkoXCJmcmFtZUNvdW50XCIsYy5mcmFtZUNvdW50KzEpLGMuX3JlZ2lzdGVyZWRNZXRob2RzLnByZS5mb3JFYWNoKGYpLGUoKSxjLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0LmZvckVhY2goZil9fSxiLmV4cG9ydHM9ZH0se1wiLi9tYWluXCI6MjR9XSwzNjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIik7ZC5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3JldHVybiB0aGlzLl9yZW5kZXJlci5hcHBseU1hdHJpeChhLGIsYyxkLGUsZiksdGhpc30sZC5wcm90b3R5cGUucG9wTWF0cml4PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicG9wTWF0cml4KCkgbm90IHVzZWQsIHNlZSBwb3AoKVwiKX0sZC5wcm90b3R5cGUucHJpbnRNYXRyaXg9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJwcmludE1hdHJpeCgpIG5vdCBpbXBsZW1lbnRlZFwiKX0sZC5wcm90b3R5cGUucHVzaE1hdHJpeD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInB1c2hNYXRyaXgoKSBub3QgdXNlZCwgc2VlIHB1c2goKVwiKX0sZC5wcm90b3R5cGUucmVzZXRNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIucmVzZXRNYXRyaXgoKSx0aGlzfSxkLnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicm90YXRlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5yb3RhdGUodGhpcy5fdG9SYWRpYW5zKGEpLGIpLHRoaXN9LGQucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwicm90YXRlWFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyb3RhdGVYXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5yb3RhdGVYKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJyb3RhdGVZXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJvdGF0ZVlcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnJvdGF0ZVkodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInJvdGF0ZVpcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicm90YXRlWlwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIucm90YXRlWih0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYixjKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzY2FsZVwiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIGQuVmVjdG9yKXt2YXIgZT1hO2E9ZS54LGI9ZS55LGM9ZS56fWVsc2UgaWYoYSBpbnN0YW5jZW9mIEFycmF5KXt2YXIgZj1hO2E9ZlswXSxiPWZbMV0sYz1mWzJdfHwxfXJldHVybiBpc05hTihiKT9iPWM9YTppc05hTihjKSYmKGM9MSksdGhpcy5fcmVuZGVyZXIuc2NhbGUuY2FsbCh0aGlzLl9yZW5kZXJlcixhLGIsYyksdGhpc30sZC5wcm90b3R5cGUuc2hlYXJYPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzaGVhclhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnNoZWFyWCh0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnNoZWFyWT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2hlYXJZXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5zaGVhclkodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0cmFuc2xhdGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEP3RoaXMuX3JlbmRlcmVyLnRyYW5zbGF0ZShhLGIsYyk6dGhpcy5fcmVuZGVyZXIudHJhbnNsYXRlKGEsYiksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4vbWFpblwiOjI0fV0sMzc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmNyZWF0ZVN0cmluZ0RpY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlU3RyaW5nRGljdFwiLGFyZ3VtZW50cyksbmV3IGQuU3RyaW5nRGljdChhLGIpfSxkLnByb3RvdHlwZS5jcmVhdGVOdW1iZXJEaWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZU51bWJlckRpY3RcIixhcmd1bWVudHMpLG5ldyBkLk51bWJlckRpY3QoYSxiKX0sZC5UeXBlZERpY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSBpbnN0YW5jZW9mIE9iamVjdD90aGlzLmRhdGE9YToodGhpcy5kYXRhPXt9LHRoaXMuZGF0YVthXT1iKSx0aGlzfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aH0sZC5UeXBlZERpY3QucHJvdG90eXBlLmhhc0tleT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe2lmKHRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKSlyZXR1cm4gdGhpcy5kYXRhW2FdO2NvbnNvbGUubG9nKGErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBEaWN0aW9uYXJ5XCIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5fdmFsaWRhdGUoYik/dGhpcy5kYXRhW2FdPWI6Y29uc29sZS5sb2coXCJUaG9zZSB2YWx1ZXMgZG9udCB3b3JrIGZvciB0aGlzIGRpY3Rpb25hcnkgdHlwZS5cIil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5fYWRkT2JqPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXRoaXMuc2V0KGIsYVtiXSl9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24oYSxiKXthIGluc3RhbmNlb2YgT2JqZWN0JiZ2b2lkIDA9PT1iP3RoaXMuX2FkZE9iaihhKTp2b2lkIDAhPT1hP3RoaXMuc2V0KGEsYik6Y29uc29sZS5sb2coXCJJbiBvcmRlciB0byBjcmVhdGUgYSBuZXcgRGljdGlvbmFyeSBlbnRyeSB5b3UgbXVzdCBwYXNzIGFuIG9iamVjdCBvciBhIGtleSwgdmFsdWUgcGFpclwiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5kYXRhPXt9fSxkLlR5cGVkRGljdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGEpe2lmKCF0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSkpdGhyb3cgbmV3IEVycm9yKGErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBEaWN0aW9uYXJ5XCIpO2RlbGV0ZSB0aGlzLmRhdGFbYV19LGQuVHlwZWREaWN0LnByb3RvdHlwZS5wcmludD1mdW5jdGlvbigpe2Zvcih2YXIgYSBpbiB0aGlzLmRhdGEpY29uc29sZS5sb2coXCJrZXk6XCIrYStcIiB2YWx1ZTpcIit0aGlzLmRhdGFbYV0pfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2F2ZVRhYmxlPWZ1bmN0aW9uKGEpe3ZhciBiPVwiXCI7Zm9yKHZhciBjIGluIHRoaXMuZGF0YSliKz1jK1wiLFwiK3RoaXMuZGF0YVtjXStcIlxcblwiO3ZhciBlPW5ldyBCbG9iKFtiXSx7dHlwZTpcInRleHQvY3N2XCJ9KTtkLnByb3RvdHlwZS5kb3dubG9hZEZpbGUoZSxhfHxcIm15Y3N2XCIsXCJjc3ZcIil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5zYXZlSlNPTj1mdW5jdGlvbihhLGIpe2QucHJvdG90eXBlLnNhdmVKU09OKHRoaXMuZGF0YSxhLGIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGEpe3JldHVybiEwfSxkLlN0cmluZ0RpY3Q9ZnVuY3Rpb24oKXtkLlR5cGVkRGljdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGQuU3RyaW5nRGljdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlR5cGVkRGljdC5wcm90b3R5cGUpLGQuU3RyaW5nRGljdC5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhfSxkLk51bWJlckRpY3Q9ZnVuY3Rpb24oKXtkLlR5cGVkRGljdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlR5cGVkRGljdC5wcm90b3R5cGUpLGQuTnVtYmVyRGljdC5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhfSxkLk51bWJlckRpY3QucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhLGIpe3RoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKT90aGlzLmRhdGFbYV0rPWI6Y29uc29sZS5sb2coXCJUaGUga2V5IC0gXCIrYStcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGRpY3Rpb25hcnkuXCIpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihhLGIpe3RoaXMuYWRkKGEsLWIpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLm11bHQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSk/dGhpcy5kYXRhW2FdKj1iOmNvbnNvbGUubG9nKFwiVGhlIGtleSAtIFwiK2ErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkaWN0aW9uYXJ5LlwiKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSk/dGhpcy5kYXRhW2FdLz1iOmNvbnNvbGUubG9nKFwiVGhlIGtleSAtIFwiK2ErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkaWN0aW9uYXJ5LlwiKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5fdmFsdWVUZXN0PWZ1bmN0aW9uKGEpe2lmKDA9PT1PYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gc2VhcmNoIGZvciBhIG1pbmltdW0gb3IgbWF4aW11bSB2YWx1ZSBvbiBhbiBlbXB0eSBOdW1iZXJEaWN0XCIpO2lmKDE9PT1PYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aClyZXR1cm4gdGhpcy5kYXRhW09iamVjdC5rZXlzKHRoaXMuZGF0YSlbMF1dO3ZhciBiPXRoaXMuZGF0YVtPYmplY3Qua2V5cyh0aGlzLmRhdGEpWzBdXTtmb3IodmFyIGMgaW4gdGhpcy5kYXRhKXRoaXMuZGF0YVtjXSphPGIqYSYmKGI9dGhpcy5kYXRhW2NdKTtyZXR1cm4gYn0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5taW5WYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZVRlc3QoMSl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWF4VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWVUZXN0KC0xKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5fa2V5VGVzdD1mdW5jdGlvbihhKXtpZigwPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHVzZSBtaW5WYWx1ZSBvbiBhbiBlbXB0eSBOdW1iZXJEaWN0XCIpO2lmKDE9PT1PYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aClyZXR1cm4gT2JqZWN0LmtleXModGhpcy5kYXRhKVswXTtmb3IodmFyIGI9T2JqZWN0LmtleXModGhpcy5kYXRhKVswXSxjPTE7YzxPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aDtjKyspT2JqZWN0LmtleXModGhpcy5kYXRhKVtjXSphPGIqYSYmKGI9T2JqZWN0LmtleXModGhpcy5kYXRhKVtjXSk7cmV0dXJuIGJ9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWluS2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleVRlc3QoMSl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWF4S2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleVRlc3QoLTEpfSxiLmV4cG9ydHM9ZC5UeXBlZERpY3R9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMzg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmRldmljZU9yaWVudGF0aW9uPXZvaWQgMCxkLnByb3RvdHlwZS5hY2NlbGVyYXRpb25YPTAsZC5wcm90b3R5cGUuYWNjZWxlcmF0aW9uWT0wLGQucHJvdG90eXBlLmFjY2VsZXJhdGlvblo9MCxkLnByb3RvdHlwZS5wQWNjZWxlcmF0aW9uWD0wLGQucHJvdG90eXBlLnBBY2NlbGVyYXRpb25ZPTAsZC5wcm90b3R5cGUucEFjY2VsZXJhdGlvblo9MCxkLnByb3RvdHlwZS5fdXBkYXRlUEFjY2VsZXJhdGlvbnM9ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcInBBY2NlbGVyYXRpb25YXCIsdGhpcy5hY2NlbGVyYXRpb25YKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBBY2NlbGVyYXRpb25ZXCIsdGhpcy5hY2NlbGVyYXRpb25ZKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBBY2NlbGVyYXRpb25aXCIsdGhpcy5hY2NlbGVyYXRpb25aKX0sZC5wcm90b3R5cGUucm90YXRpb25YPTAsZC5wcm90b3R5cGUucm90YXRpb25ZPTAsZC5wcm90b3R5cGUucm90YXRpb25aPTAsZC5wcm90b3R5cGUucFJvdGF0aW9uWD0wLGQucHJvdG90eXBlLnBSb3RhdGlvblk9MCxkLnByb3RvdHlwZS5wUm90YXRpb25aPTA7dmFyIGUsZixnLGg9MCxpPTAsaj0wLGs9XCJjbG9ja3dpc2VcIixsPVwiY2xvY2t3aXNlXCIsbT1cImNsb2Nrd2lzZVwiO2QucHJvdG90eXBlLl91cGRhdGVQUm90YXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJwUm90YXRpb25YXCIsdGhpcy5yb3RhdGlvblgpLHRoaXMuX3NldFByb3BlcnR5KFwicFJvdGF0aW9uWVwiLHRoaXMucm90YXRpb25ZKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBSb3RhdGlvblpcIix0aGlzLnJvdGF0aW9uWil9LGQucHJvdG90eXBlLnR1cm5BeGlzPXZvaWQgMDt2YXIgbj0uNSxvPTMwO2QucHJvdG90eXBlLnNldE1vdmVUaHJlc2hvbGQ9ZnVuY3Rpb24oYSl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2V0TW92ZVRocmVzaG9sZFwiLGFyZ3VtZW50cyksbj1hfSxkLnByb3RvdHlwZS5zZXRTaGFrZVRocmVzaG9sZD1mdW5jdGlvbihhKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzZXRTaGFrZVRocmVzaG9sZFwiLGFyZ3VtZW50cyksbz1hfSxkLnByb3RvdHlwZS5fb25kZXZpY2VvcmllbnRhdGlvbj1mdW5jdGlvbihhKXt0aGlzLl91cGRhdGVQUm90YXRpb25zKCksdGhpcy5fc2V0UHJvcGVydHkoXCJyb3RhdGlvblhcIixhLmJldGEpLHRoaXMuX3NldFByb3BlcnR5KFwicm90YXRpb25ZXCIsYS5nYW1tYSksdGhpcy5fc2V0UHJvcGVydHkoXCJyb3RhdGlvblpcIixhLmFscGhhKSx0aGlzLl9oYW5kbGVNb3Rpb24oKX0sZC5wcm90b3R5cGUuX29uZGV2aWNlbW90aW9uPWZ1bmN0aW9uKGEpe3RoaXMuX3VwZGF0ZVBBY2NlbGVyYXRpb25zKCksdGhpcy5fc2V0UHJvcGVydHkoXCJhY2NlbGVyYXRpb25YXCIsMiphLmFjY2VsZXJhdGlvbi54KSx0aGlzLl9zZXRQcm9wZXJ0eShcImFjY2VsZXJhdGlvbllcIiwyKmEuYWNjZWxlcmF0aW9uLnkpLHRoaXMuX3NldFByb3BlcnR5KFwiYWNjZWxlcmF0aW9uWlwiLDIqYS5hY2NlbGVyYXRpb24ueiksdGhpcy5faGFuZGxlTW90aW9uKCl9LGQucHJvdG90eXBlLl9oYW5kbGVNb3Rpb249ZnVuY3Rpb24oKXs5MD09PXdpbmRvdy5vcmllbnRhdGlvbnx8LTkwPT09d2luZG93Lm9yaWVudGF0aW9uP3RoaXMuX3NldFByb3BlcnR5KFwiZGV2aWNlT3JpZW50YXRpb25cIixcImxhbmRzY2FwZVwiKTowPT09d2luZG93Lm9yaWVudGF0aW9uP3RoaXMuX3NldFByb3BlcnR5KFwiZGV2aWNlT3JpZW50YXRpb25cIixcInBvcnRyYWl0XCIpOnZvaWQgMD09PXdpbmRvdy5vcmllbnRhdGlvbiYmdGhpcy5fc2V0UHJvcGVydHkoXCJkZXZpY2VPcmllbnRhdGlvblwiLFwidW5kZWZpbmVkXCIpO3ZhciBhPXRoaXMuZGV2aWNlTW92ZWR8fHdpbmRvdy5kZXZpY2VNb3ZlZDtcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiYoTWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25YLXRoaXMucEFjY2VsZXJhdGlvblgpPm58fE1hdGguYWJzKHRoaXMuYWNjZWxlcmF0aW9uWS10aGlzLnBBY2NlbGVyYXRpb25ZKT5ufHxNYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblotdGhpcy5wQWNjZWxlcmF0aW9uWik+bikmJmEoKTt2YXIgYj10aGlzLmRldmljZVR1cm5lZHx8d2luZG93LmRldmljZVR1cm5lZDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiKXt2YXIgYz10aGlzLnJvdGF0aW9uWCsxODAsZD10aGlzLnBSb3RhdGlvblgrMTgwLHA9aCsxODA7Yy1kPjAmJmMtZDwyNzB8fGMtZDwtMjcwP2s9XCJjbG9ja3dpc2VcIjooYy1kPDB8fGMtZD4yNzApJiYoaz1cImNvdW50ZXItY2xvY2t3aXNlXCIpLGshPT1lJiYocD1jKSxNYXRoLmFicyhjLXApPjkwJiZNYXRoLmFicyhjLXApPDI3MCYmKHA9Yyx0aGlzLl9zZXRQcm9wZXJ0eShcInR1cm5BeGlzXCIsXCJYXCIpLGIoKSksZT1rLGg9cC0xODA7dmFyIHE9dGhpcy5yb3RhdGlvblkrMTgwLHI9dGhpcy5wUm90YXRpb25ZKzE4MCxzPWkrMTgwO3Etcj4wJiZxLXI8MjcwfHxxLXI8LTI3MD9sPVwiY2xvY2t3aXNlXCI6KHEtcjwwfHxxLXRoaXMucFJvdGF0aW9uWT4yNzApJiYobD1cImNvdW50ZXItY2xvY2t3aXNlXCIpLGwhPT1mJiYocz1xKSxNYXRoLmFicyhxLXMpPjkwJiZNYXRoLmFicyhxLXMpPDI3MCYmKHM9cSx0aGlzLl9zZXRQcm9wZXJ0eShcInR1cm5BeGlzXCIsXCJZXCIpLGIoKSksZj1sLGk9cy0xODAsdGhpcy5yb3RhdGlvblotdGhpcy5wUm90YXRpb25aPjAmJnRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWjwyNzB8fHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWjwtMjcwP209XCJjbG9ja3dpc2VcIjoodGhpcy5yb3RhdGlvblotdGhpcy5wUm90YXRpb25aPDB8fHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWj4yNzApJiYobT1cImNvdW50ZXItY2xvY2t3aXNlXCIpLG0hPT1nJiYoaj10aGlzLnJvdGF0aW9uWiksTWF0aC5hYnModGhpcy5yb3RhdGlvblotaik+OTAmJk1hdGguYWJzKHRoaXMucm90YXRpb25aLWopPDI3MCYmKGo9dGhpcy5yb3RhdGlvblosdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLFwiWlwiKSxiKCkpLGc9bSx0aGlzLl9zZXRQcm9wZXJ0eShcInR1cm5BeGlzXCIsdm9pZCAwKX12YXIgdD10aGlzLmRldmljZVNoYWtlbnx8d2luZG93LmRldmljZVNoYWtlbjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXt2YXIgdSx2O251bGwhPT10aGlzLnBBY2NlbGVyYXRpb25YJiYodT1NYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblgtdGhpcy5wQWNjZWxlcmF0aW9uWCksdj1NYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblktdGhpcy5wQWNjZWxlcmF0aW9uWSkpLHUrdj5vJiZ0KCl9fSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSwzOTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoKXtmb3IodmFyIGEgaW4gZilpZihmLmhhc093blByb3BlcnR5KGEpJiYhMD09PWZbYV0pcmV0dXJuITA7cmV0dXJuITF9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKSxmPXt9O2UucHJvdG90eXBlLmlzS2V5UHJlc3NlZD0hMSxlLnByb3RvdHlwZS5rZXlJc1ByZXNzZWQ9ITEsZS5wcm90b3R5cGUua2V5PVwiXCIsZS5wcm90b3R5cGUua2V5Q29kZT0wLGUucHJvdG90eXBlLl9vbmtleWRvd249ZnVuY3Rpb24oYSl7aWYoIWZbYS53aGljaF0pe3RoaXMuX3NldFByb3BlcnR5KFwiaXNLZXlQcmVzc2VkXCIsITApLHRoaXMuX3NldFByb3BlcnR5KFwia2V5SXNQcmVzc2VkXCIsITApLHRoaXMuX3NldFByb3BlcnR5KFwia2V5Q29kZVwiLGEud2hpY2gpLGZbYS53aGljaF09ITAsdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlcIixhLmtleXx8U3RyaW5nLmZyb21DaGFyQ29kZShhLndoaWNoKXx8YS53aGljaCk7dmFyIGI9dGhpcy5rZXlQcmVzc2VkfHx3aW5kb3cua2V5UHJlc3NlZDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiJiYhYS5jaGFyQ29kZSl7ITE9PT1iKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fX0sZS5wcm90b3R5cGUuX29ua2V5dXA9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5rZXlSZWxlYXNlZHx8d2luZG93LmtleVJlbGVhc2VkO2lmKGZbYS53aGljaF09ITEsZCgpfHwodGhpcy5fc2V0UHJvcGVydHkoXCJpc0tleVByZXNzZWRcIiwhMSksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlJc1ByZXNzZWRcIiwhMSkpLHRoaXMuX3NldFByb3BlcnR5KFwiX2xhc3RLZXlDb2RlVHlwZWRcIixudWxsKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleVwiLGEua2V5fHxTdHJpbmcuZnJvbUNoYXJDb2RlKGEud2hpY2gpfHxhLndoaWNoKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleUNvZGVcIixhLndoaWNoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiKXshMT09PWIoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGUucHJvdG90eXBlLl9vbmtleXByZXNzPWZ1bmN0aW9uKGEpe2lmKGEud2hpY2ghPT10aGlzLl9sYXN0S2V5Q29kZVR5cGVkKXt0aGlzLl9zZXRQcm9wZXJ0eShcImtleUNvZGVcIixhLndoaWNoKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9sYXN0S2V5Q29kZVR5cGVkXCIsYS53aGljaCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlcIixTdHJpbmcuZnJvbUNoYXJDb2RlKGEud2hpY2gpKTt2YXIgYj10aGlzLmtleVR5cGVkfHx3aW5kb3cua2V5VHlwZWQ7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYil7ITE9PT1iKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fX0sZS5wcm90b3R5cGUuX29uYmx1cj1mdW5jdGlvbihhKXtmPXt9fSxlLnByb3RvdHlwZS5rZXlJc0Rvd249ZnVuY3Rpb24oYSl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImtleUlzRG93blwiLGFyZ3VtZW50cyksZlthXX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNDA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjLGQpe2QmJiFkLmNsaWVudFgmJihkLnRvdWNoZXM/ZD1kLnRvdWNoZXNbMF06ZC5jaGFuZ2VkVG91Y2hlcyYmKGQ9ZC5jaGFuZ2VkVG91Y2hlc1swXSkpO3ZhciBlPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZj1hLnNjcm9sbFdpZHRoL2IsZz1hLnNjcm9sbEhlaWdodC9jO3JldHVybnt4OihkLmNsaWVudFgtZS5sZWZ0KS9mLHk6KGQuY2xpZW50WS1lLnRvcCkvZyx3aW5YOmQuY2xpZW50WCx3aW5ZOmQuY2xpZW50WSxpZDpkLmlkZW50aWZpZXJ9fXZhciBlPWEoXCIuLi9jb3JlL21haW5cIiksZj1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZS5wcm90b3R5cGUuX2hhc01vdXNlSW50ZXJhY3RlZD0hMSxlLnByb3RvdHlwZS5tb3VzZVg9MCxlLnByb3RvdHlwZS5tb3VzZVk9MCxlLnByb3RvdHlwZS5wbW91c2VYPTAsZS5wcm90b3R5cGUucG1vdXNlWT0wLGUucHJvdG90eXBlLndpbk1vdXNlWD0wLGUucHJvdG90eXBlLndpbk1vdXNlWT0wLGUucHJvdG90eXBlLnB3aW5Nb3VzZVg9MCxlLnByb3RvdHlwZS5wd2luTW91c2VZPTAsZS5wcm90b3R5cGUubW91c2VCdXR0b249MCxlLnByb3RvdHlwZS5tb3VzZUlzUHJlc3NlZD0hMSxlLnByb3RvdHlwZS5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzPWZ1bmN0aW9uKGEpe2lmKG51bGwhPT10aGlzLl9jdXJFbGVtZW50JiYoIWEudG91Y2hlc3x8YS50b3VjaGVzLmxlbmd0aD4wKSl7dmFyIGI9ZCh0aGlzLl9jdXJFbGVtZW50LmVsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LGEpO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VYXCIsYi54KSx0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlWVwiLGIueSksdGhpcy5fc2V0UHJvcGVydHkoXCJ3aW5Nb3VzZVhcIixiLndpblgpLHRoaXMuX3NldFByb3BlcnR5KFwid2luTW91c2VZXCIsYi53aW5ZKX10aGlzLl9oYXNNb3VzZUludGVyYWN0ZWR8fCh0aGlzLl91cGRhdGVNb3VzZUNvb3JkcygpLHRoaXMuX3NldFByb3BlcnR5KFwiX2hhc01vdXNlSW50ZXJhY3RlZFwiLCEwKSl9LGUucHJvdG90eXBlLl91cGRhdGVNb3VzZUNvb3Jkcz1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwicG1vdXNlWFwiLHRoaXMubW91c2VYKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBtb3VzZVlcIix0aGlzLm1vdXNlWSksdGhpcy5fc2V0UHJvcGVydHkoXCJwd2luTW91c2VYXCIsdGhpcy53aW5Nb3VzZVgpLHRoaXMuX3NldFByb3BlcnR5KFwicHdpbk1vdXNlWVwiLHRoaXMud2luTW91c2VZKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9wbW91c2VXaGVlbERlbHRhWVwiLHRoaXMuX21vdXNlV2hlZWxEZWx0YVkpfSxlLnByb3RvdHlwZS5fc2V0TW91c2VCdXR0b249ZnVuY3Rpb24oYSl7MT09PWEuYnV0dG9uP3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VCdXR0b25cIixmLkNFTlRFUik6Mj09PWEuYnV0dG9uP3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VCdXR0b25cIixmLlJJR0hUKTp0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlQnV0dG9uXCIsZi5MRUZUKX0sZS5wcm90b3R5cGUuX29ubW91c2Vtb3ZlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKSx0aGlzLm1vdXNlSXNQcmVzc2VkP1wiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VEcmFnZ2VkPyExPT09Yi5tb3VzZURyYWdnZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoTW92ZWQmJiExPT09Yi50b3VjaE1vdmVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZU1vdmVkJiYhMT09PWIubW91c2VNb3ZlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb25tb3VzZWRvd249ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCEwKSx0aGlzLl9zZXRNb3VzZUJ1dHRvbihhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksXCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVByZXNzZWQ/ITE9PT1iLm1vdXNlUHJlc3NlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hTdGFydGVkJiYhMT09PWIudG91Y2hTdGFydGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbm1vdXNldXA9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCExKSxcblwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VSZWxlYXNlZD8hMT09PWIubW91c2VSZWxlYXNlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hFbmRlZCYmITE9PT1iLnRvdWNoRW5kZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29uZHJhZ2VuZD1lLnByb3RvdHlwZS5fb25tb3VzZXVwLGUucHJvdG90eXBlLl9vbmRyYWdvdmVyPWUucHJvdG90eXBlLl9vbm1vdXNlbW92ZSxlLnByb3RvdHlwZS5fb25jbGljaz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlQ2xpY2tlZCl7ITE9PT1iLm1vdXNlQ2xpY2tlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX0sZS5wcm90b3R5cGUuX29uZGJsY2xpY2s9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYi5kb3VibGVDbGlja2VkKXshMT09PWIuZG91YmxlQ2xpY2tlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX0sZS5wcm90b3R5cGUuX21vdXNlV2hlZWxEZWx0YVk9MCxlLnByb3RvdHlwZS5fcG1vdXNlV2hlZWxEZWx0YVk9MCxlLnByb3RvdHlwZS5fb253aGVlbD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztpZih0aGlzLl9zZXRQcm9wZXJ0eShcIl9tb3VzZVdoZWVsRGVsdGFZXCIsYS5kZWx0YVkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VXaGVlbCl7YS5kZWx0YT1hLmRlbHRhWTshMT09PWIubW91c2VXaGVlbChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDQxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyxkLGUpe2U9ZXx8MDt2YXIgZj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGc9YS5zY3JvbGxXaWR0aC9iLGg9YS5zY3JvbGxIZWlnaHQvYyxpPWQudG91Y2hlc1tlXXx8ZC5jaGFuZ2VkVG91Y2hlc1tlXTtyZXR1cm57eDooaS5jbGllbnRYLWYubGVmdCkvZyx5OihpLmNsaWVudFktZi50b3ApL2gsd2luWDppLmNsaWVudFgsd2luWTppLmNsaWVudFksaWQ6aS5pZGVudGlmaWVyfX12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpO2UucHJvdG90eXBlLnRvdWNoZXM9W10sZS5wcm90b3R5cGUuX3VwZGF0ZVRvdWNoQ29vcmRzPWZ1bmN0aW9uKGEpe2lmKG51bGwhPT10aGlzLl9jdXJFbGVtZW50KXtmb3IodmFyIGI9W10sYz0wO2M8YS50b3VjaGVzLmxlbmd0aDtjKyspYltjXT1kKHRoaXMuX2N1ckVsZW1lbnQuZWx0LHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsYSxjKTt0aGlzLl9zZXRQcm9wZXJ0eShcInRvdWNoZXNcIixiKX19LGUucHJvdG90eXBlLl9vbnRvdWNoc3RhcnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCEwKSx0aGlzLl91cGRhdGVUb3VjaENvb3JkcyhhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksdGhpcy5fdXBkYXRlTW91c2VDb29yZHMoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoU3RhcnRlZD8hMT09PWIudG91Y2hTdGFydGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVByZXNzZWQmJiExPT09Yi5tb3VzZVByZXNzZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29udG91Y2htb3ZlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3VwZGF0ZVRvdWNoQ29vcmRzKGEpLHRoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoTW92ZWQ/ITE9PT1iLnRvdWNoTW92ZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlRHJhZ2dlZCYmITE9PT1iLm1vdXNlRHJhZ2dlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb250b3VjaGVuZD1mdW5jdGlvbihhKXt0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlSXNQcmVzc2VkXCIsITEpLHRoaXMuX3VwZGF0ZVRvdWNoQ29vcmRzKGEpLHRoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKTt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoRW5kZWQ/ITE9PT1iLnRvdWNoRW5kZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlUmVsZWFzZWQmJiExPT09Yi5tb3VzZVJlbGVhc2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhKXt2YXIgYj0zLjUqYXwwO2lmKGI9YjwxPzE6YjwyNDg/YjoyNDgsZyE9PWIpe2c9YixoPTErZzw8MSxpPW5ldyBJbnQzMkFycmF5KGgpLGo9bmV3IEFycmF5KGgpO2Zvcih2YXIgYz0wO2M8aDtjKyspaltjXT1uZXcgSW50MzJBcnJheSgyNTYpO2Zvcih2YXIgZCxlLGYsayxsPTEsbT1iLTE7bDxiO2wrKyl7aVtiK2xdPWlbbV09ZT1tKm0sZj1qW2IrbF0saz1qW20tLV07Zm9yKHZhciBuPTA7bjwyNTY7bisrKWZbbl09a1tuXT1lKm59ZD1pW2JdPWIqYixmPWpbYl07Zm9yKHZhciBvPTA7bzwyNTY7bysrKWZbb109ZCpvfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPWYuX3RvUGl4ZWxzKGEpLGU9YS53aWR0aCxrPWEuaGVpZ2h0LGw9ZSprLG09bmV3IEludDMyQXJyYXkobCksbj0wO248bDtuKyspbVtuXT1mLl9nZXRBUkdCKGMsbik7dmFyIG8scCxxLHIscyx0LHUsdix3LHgseT1uZXcgSW50MzJBcnJheShsKSx6PW5ldyBJbnQzMkFycmF5KGwpLEE9bmV3IEludDMyQXJyYXkobCksQj1uZXcgSW50MzJBcnJheShsKSxDPTA7ZChiKTt2YXIgRCxFLEYsRztmb3IoRT0wO0U8aztFKyspe2ZvcihEPTA7RDxlO0QrKyl7aWYocj1xPXA9cz1vPTAsKHQ9RC1nKTwwKXg9LXQsdD0wO2Vsc2V7aWYodD49ZSlicmVhazt4PTB9Zm9yKEY9eDtGPGgmJiEodD49ZSk7RisrKXt2YXIgSD1tW3QrQ107Rz1qW0ZdLHMrPUdbKC0xNjc3NzIxNiZIKT4+PjI0XSxwKz1HWygxNjcxMTY4MCZIKT4+MTZdLHErPUdbKDY1MjgwJkgpPj44XSxyKz1HWzI1NSZIXSxvKz1pW0ZdLHQrK311PUMrRCx5W3VdPXMvbyx6W3VdPXAvbyxBW3VdPXEvbyxCW3VdPXIvb31DKz1lfWZvcihDPTAsdj0tZyx3PXYqZSxFPTA7RTxrO0UrKyl7Zm9yKEQ9MDtEPGU7RCsrKXtpZihyPXE9cD1zPW89MCx2PDApeD11PS12LHQ9RDtlbHNle2lmKHY+PWspYnJlYWs7eD0wLHU9dix0PUQrd31mb3IoRj14O0Y8aCYmISh1Pj1rKTtGKyspRz1qW0ZdLHMrPUdbeVt0XV0scCs9R1t6W3RdXSxxKz1HW0FbdF1dLHIrPUdbQlt0XV0sbys9aVtGXSx1KyssdCs9ZTttW0QrQ109cy9vPDwyNHxwL288PDE2fHEvbzw8OHxyL299Qys9ZSx3Kz1lLHYrK31mLl9zZXRQaXhlbHMoYyxtKX12YXIgZj17fTtmLl90b1BpeGVscz1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEltYWdlRGF0YT9hLmRhdGE6YS5nZXRDb250ZXh0KFwiMmRcIikuZ2V0SW1hZ2VEYXRhKDAsMCxhLndpZHRoLGEuaGVpZ2h0KS5kYXRhfSxmLl9nZXRBUkdCPWZ1bmN0aW9uKGEsYil7dmFyIGM9NCpiO3JldHVybiBhW2MrM108PDI0JjQyNzgxOTAwODB8YVtjXTw8MTYmMTY3MTE2ODB8YVtjKzFdPDw4JjY1MjgwfDI1NSZhW2MrMl19LGYuX3NldFBpeGVscz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspYz00KmQsYVtjKzBdPSgxNjcxMTY4MCZiW2RdKT4+PjE2LGFbYysxXT0oNjUyODAmYltkXSk+Pj44LGFbYysyXT0yNTUmYltkXSxhW2MrM109KDQyNzgxOTAwODAmYltkXSk+Pj4yNH0sZi5fdG9JbWFnZURhdGE9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBJbWFnZURhdGE/YTphLmdldENvbnRleHQoXCIyZFwiKS5nZXRJbWFnZURhdGEoMCwwLGEud2lkdGgsYS5oZWlnaHQpfSxmLl9jcmVhdGVJbWFnZURhdGE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5fdG1wQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksZi5fdG1wQ3R4PWYuX3RtcENhbnZhcy5nZXRDb250ZXh0KFwiMmRcIiksdGhpcy5fdG1wQ3R4LmNyZWF0ZUltYWdlRGF0YShhLGIpfSxmLmFwcGx5PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldENvbnRleHQoXCIyZFwiKSxlPWQuZ2V0SW1hZ2VEYXRhKDAsMCxhLndpZHRoLGEuaGVpZ2h0KSxmPWIoZSxjKTtmIGluc3RhbmNlb2YgSW1hZ2VEYXRhP2QucHV0SW1hZ2VEYXRhKGYsMCwwLDAsMCxhLndpZHRoLGEuaGVpZ2h0KTpkLnB1dEltYWdlRGF0YShlLDAsMCwwLDAsYS53aWR0aCxhLmhlaWdodCl9LGYudGhyZXNob2xkPWZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5fdG9QaXhlbHMoYSk7dm9pZCAwPT09YiYmKGI9LjUpO2Zvcih2YXIgZD1NYXRoLmZsb29yKDI1NSpiKSxlPTA7ZTxjLmxlbmd0aDtlKz00KXt2YXIgZyxoPWNbZV0saT1jW2UrMV0saj1jW2UrMl0saz0uMjEyNipoKy43MTUyKmkrLjA3MjIqajtnPWs+PWQ/MjU1OjAsY1tlXT1jW2UrMV09Y1tlKzJdPWd9fSxmLmdyYXk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWYuX3RvUGl4ZWxzKGEpLGM9MDtjPGIubGVuZ3RoO2MrPTQpe3ZhciBkPWJbY10sZT1iW2MrMV0sZz1iW2MrMl0saD0uMjEyNipkKy43MTUyKmUrLjA3MjIqZztiW2NdPWJbYysxXT1iW2MrMl09aH19LGYub3BhcXVlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1mLl90b1BpeGVscyhhKSxjPTA7YzxiLmxlbmd0aDtjKz00KWJbYyszXT0yNTU7cmV0dXJuIGJ9LGYuaW52ZXJ0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1mLl90b1BpeGVscyhhKSxjPTA7YzxiLmxlbmd0aDtjKz00KWJbY109MjU1LWJbY10sYltjKzFdPTI1NS1iW2MrMV0sYltjKzJdPTI1NS1iW2MrMl19LGYucG9zdGVyaXplPWZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5fdG9QaXhlbHMoYSk7aWYoYjwyfHxiPjI1NSl0aHJvdyBuZXcgRXJyb3IoXCJMZXZlbCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAyIGFuZCBsZXNzIHRoYW4gMjU1IGZvciBwb3N0ZXJpemVcIik7Zm9yKHZhciBkPWItMSxlPTA7ZTxjLmxlbmd0aDtlKz00KXt2YXIgZz1jW2VdLGg9Y1tlKzFdLGk9Y1tlKzJdO2NbZV09MjU1KihnKmI+PjgpL2QsY1tlKzFdPTI1NSooaCpiPj44KS9kLGNbZSsyXT0yNTUqKGkqYj4+OCkvZH19LGYuZGlsYXRlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQsZSxnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ9Zi5fdG9QaXhlbHMoYSksdT0wLHY9dC5sZW5ndGg/dC5sZW5ndGgvNDowLHc9bmV3IEludDMyQXJyYXkodik7dTx2Oylmb3IoYj11LGM9dSthLndpZHRoO3U8YzspZD1lPWYuX2dldEFSR0IodCx1KSxpPXUtMSxoPXUrMSxqPXUtYS53aWR0aCxrPXUrYS53aWR0aCxpPGImJihpPXUpLGg+PWMmJihoPXUpLGo8MCYmKGo9MCksaz49diYmKGs9dSksbj1mLl9nZXRBUkdCKHQsaiksbT1mLl9nZXRBUkdCKHQsaSksbz1mLl9nZXRBUkdCKHQsayksbD1mLl9nZXRBUkdCKHQsaCksZz03NyooZD4+MTYmMjU1KSsxNTEqKGQ+PjgmMjU1KSsyOCooMjU1JmQpLHE9NzcqKG0+PjE2JjI1NSkrMTUxKihtPj44JjI1NSkrMjgqKDI1NSZtKSxwPTc3KihsPj4xNiYyNTUpKzE1MSoobD4+OCYyNTUpKzI4KigyNTUmbCkscj03Nyoobj4+MTYmMjU1KSsxNTEqKG4+PjgmMjU1KSsyOCooMjU1Jm4pLHM9NzcqKG8+PjE2JjI1NSkrMTUxKihvPj44JjI1NSkrMjgqKDI1NSZvKSxxPmcmJihlPW0sZz1xKSxwPmcmJihlPWwsZz1wKSxyPmcmJihlPW4sZz1yKSxzPmcmJihlPW8sZz1zKSx3W3UrK109ZTtmLl9zZXRQaXhlbHModCx3KX0sZi5lcm9kZT1mdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0PWYuX3RvUGl4ZWxzKGEpLHU9MCx2PXQubGVuZ3RoP3QubGVuZ3RoLzQ6MCx3PW5ldyBJbnQzMkFycmF5KHYpO3U8djspZm9yKGI9dSxjPXUrYS53aWR0aDt1PGM7KWQ9ZT1mLl9nZXRBUkdCKHQsdSksaT11LTEsaD11KzEsaj11LWEud2lkdGgsaz11K2Eud2lkdGgsaTxiJiYoaT11KSxoPj1jJiYoaD11KSxqPDAmJihqPTApLGs+PXYmJihrPXUpLG49Zi5fZ2V0QVJHQih0LGopLG09Zi5fZ2V0QVJHQih0LGkpLG89Zi5fZ2V0QVJHQih0LGspLGw9Zi5fZ2V0QVJHQih0LGgpLGc9NzcqKGQ+PjE2JjI1NSkrMTUxKihkPj44JjI1NSkrMjgqKDI1NSZkKSxxPTc3KihtPj4xNiYyNTUpKzE1MSoobT4+OCYyNTUpKzI4KigyNTUmbSkscD03NyoobD4+MTYmMjU1KSsxNTEqKGw+PjgmMjU1KSsyOCooMjU1JmwpLHI9NzcqKG4+PjE2JjI1NSkrMTUxKihuPj44JjI1NSkrMjgqKDI1NSZuKSxzPTc3KihvPj4xNiYyNTUpKzE1MSoobz4+OCYyNTUpKzI4KigyNTUmbykscTxnJiYoZT1tLGc9cSkscDxnJiYoZT1sLGc9cCkscjxnJiYoZT1uLGc9ciksczxnJiYoZT1vLGc9cyksd1t1KytdPWU7Zi5fc2V0UGl4ZWxzKHQsdyl9O3ZhciBnLGgsaSxqO2YuYmx1cj1mdW5jdGlvbihhLGIpe2UoYSxiKX0sYi5leHBvcnRzPWZ9LHt9XSw0MzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1bXTtkLnByb3RvdHlwZS5jcmVhdGVJbWFnZT1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVJbWFnZVwiLGFyZ3VtZW50cyksbmV3IGQuSW1hZ2UoYSxiKX0sZC5wcm90b3R5cGUuc2F2ZUNhbnZhcz1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVDYW52YXNcIixhcmd1bWVudHMpO3ZhciBhLGIsYyxlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTthcmd1bWVudHNbMF1pbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50PyhhPWFyZ3VtZW50c1swXSxlLnNoaWZ0KCkpOmFyZ3VtZW50c1swXWluc3RhbmNlb2YgZC5FbGVtZW50PyhhPWFyZ3VtZW50c1swXS5lbHQsZS5zaGlmdCgpKTphPXRoaXMuX2N1ckVsZW1lbnQmJnRoaXMuX2N1ckVsZW1lbnQuZWx0LGUubGVuZ3RoPj0xJiYoYj1lWzBdKSxlLmxlbmd0aD49MiYmKGM9ZVsxXSksYz1jfHxkLnByb3RvdHlwZS5fY2hlY2tGaWxlRXh0ZW5zaW9uKGIsYylbMV18fFwicG5nXCI7dmFyIGY7c3dpdGNoKGMpe2RlZmF1bHQ6Zj1cImltYWdlL3BuZ1wiO2JyZWFrO2Nhc2VcImpwZWdcIjpjYXNlXCJqcGdcIjpmPVwiaW1hZ2UvanBlZ1wifWEudG9CbG9iKGZ1bmN0aW9uKGEpe2QucHJvdG90eXBlLmRvd25sb2FkRmlsZShhLGIsYyl9LGYpfSxkLnByb3RvdHlwZS5zYXZlRnJhbWVzPWZ1bmN0aW9uKGEsYixjLGYsZyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZUZyYW1lc1wiLGFyZ3VtZW50cyk7dmFyIGg9Y3x8MztoPWQucHJvdG90eXBlLmNvbnN0cmFpbihoLDAsMTUpLGgqPTFlMzt2YXIgaT1mfHwxNTtpPWQucHJvdG90eXBlLmNvbnN0cmFpbihpLDAsMjIpO3ZhciBqPTAsaz1kLnByb3RvdHlwZS5fbWFrZUZyYW1lLGw9dGhpcy5fY3VyRWxlbWVudC5lbHQsbT1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2soYStqLGIsbCksaisrfSwxZTMvaSk7c2V0VGltZW91dChmdW5jdGlvbigpe2lmKGNsZWFySW50ZXJ2YWwobSksZylnKGUpO2Vsc2UgZm9yKHZhciBhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBiPWVbYV07ZC5wcm90b3R5cGUuZG93bmxvYWRGaWxlKGIuaW1hZ2VEYXRhLGIuZmlsZW5hbWUsYi5leHQpfWU9W119LGgrLjAxKX0sZC5wcm90b3R5cGUuX21ha2VGcmFtZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7ZD10aGlzP3RoaXMuX2N1ckVsZW1lbnQuZWx0OmM7dmFyIGY7aWYoYilzd2l0Y2goYi50b0xvd2VyQ2FzZSgpKXtjYXNlXCJwbmdcIjpmPVwiaW1hZ2UvcG5nXCI7YnJlYWs7Y2FzZVwianBlZ1wiOmNhc2VcImpwZ1wiOmY9XCJpbWFnZS9qcGVnXCI7YnJlYWs7ZGVmYXVsdDpmPVwiaW1hZ2UvcG5nXCJ9ZWxzZSBiPVwicG5nXCIsZj1cImltYWdlL3BuZ1wiO3ZhciBnPWQudG9EYXRhVVJMKGYpO2c9Zy5yZXBsYWNlKGYsXCJpbWFnZS9vY3RldC1zdHJlYW1cIik7dmFyIGg9e307aC5pbWFnZURhdGE9ZyxoLmZpbGVuYW1lPWEsaC5leHQ9YixlLnB1c2goaCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQ0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhPjAmJmE8Yj9hOmJ9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKSxmPWEoXCIuL2ZpbHRlcnNcIiksZz1hKFwiLi4vY29yZS9oZWxwZXJzXCIpLGg9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksZS5wcm90b3R5cGUubG9hZEltYWdlPWZ1bmN0aW9uKGEsYixjKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkSW1hZ2VcIixhcmd1bWVudHMpO3ZhciBkPW5ldyBJbWFnZSxmPW5ldyBlLkltYWdlKDEsMSx0aGlzKSxnPXRoaXM7cmV0dXJuIGQub25sb2FkPWZ1bmN0aW9uKCl7Zi53aWR0aD1mLmNhbnZhcy53aWR0aD1kLndpZHRoLGYuaGVpZ2h0PWYuY2FudmFzLmhlaWdodD1kLmhlaWdodCxmLmRyYXdpbmdDb250ZXh0LmRyYXdJbWFnZShkLDAsMCksZi5tb2RpZmllZD0hMCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiJiZiKGYpLGcuX2RlY3JlbWVudFByZWxvYWQoKX0sZC5vbmVycm9yPWZ1bmN0aW9uKGEpe2UuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcigwLGQuc3JjKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiZjKGEpfSwwIT09YS5pbmRleE9mKFwiZGF0YTppbWFnZS9cIikmJihkLmNyb3NzT3JpZ2luPVwiQW5vbnltb3VzXCIpLGQuc3JjPWEsZn0sZS5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oYSxiLGMsZixoLGksaixrLGwpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImltYWdlXCIsYXJndW1lbnRzKTt2YXIgbT1hLndpZHRoLG49YS5oZWlnaHQ7YS5lbHQmJmEuZWx0LnZpZGVvV2lkdGgmJiFhLmNhbnZhcyYmKG09YS5lbHQudmlkZW9XaWR0aCxuPWEuZWx0LnZpZGVvSGVpZ2h0KTt2YXIgbz1iLHA9YyxxPWZ8fG0scj1ofHxuLHM9aXx8MCx0PWp8fDAsdT1rfHxtLHY9bHx8bjt1PWQodSxtKSx2PWQodixuKTt2YXIgdz0xO2EuZWx0JiYhYS5jYW52YXMmJmEuZWx0LnN0eWxlLndpZHRoJiYodz1hLmVsdC52aWRlb1dpZHRoJiYhZj9hLmVsdC52aWRlb1dpZHRoOmEuZWx0LndpZHRoLHcvPXBhcnNlSW50KGEuZWx0LnN0eWxlLndpZHRoLDEwKSkscyo9dyx0Kj13LHYqPXcsdSo9dzt2YXIgeD1nLm1vZGVBZGp1c3QobyxwLHEscix0aGlzLl9yZW5kZXJlci5faW1hZ2VNb2RlKTt0aGlzLl9yZW5kZXJlci5pbWFnZShhLHMsdCx1LHYseC54LHgueSx4LncseC5oKX0sZS5wcm90b3R5cGUudGludD1mdW5jdGlvbigpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRpbnRcIixhcmd1bWVudHMpO3ZhciBhPXRoaXMuY29sb3IuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX3JlbmRlcmVyLl90aW50PWEubGV2ZWxzfSxlLnByb3RvdHlwZS5ub1RpbnQ9ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdGludD1udWxsfSxlLnByb3RvdHlwZS5fZ2V0VGludGVkSW1hZ2VDYW52YXM9ZnVuY3Rpb24oYSl7aWYoIWEuY2FudmFzKXJldHVybiBhO3ZhciBiPWYuX3RvUGl4ZWxzKGEuY2FudmFzKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7Yy53aWR0aD1hLmNhbnZhcy53aWR0aCxjLmhlaWdodD1hLmNhbnZhcy5oZWlnaHQ7Zm9yKHZhciBkPWMuZ2V0Q29udGV4dChcIjJkXCIpLGU9ZC5jcmVhdGVJbWFnZURhdGEoYS5jYW52YXMud2lkdGgsYS5jYW52YXMuaGVpZ2h0KSxnPWUuZGF0YSxoPTA7aDxiLmxlbmd0aDtoKz00KXt2YXIgaT1iW2hdLGo9YltoKzFdLGs9YltoKzJdLGw9YltoKzNdO2dbaF09aSp0aGlzLl9yZW5kZXJlci5fdGludFswXS8yNTUsZ1toKzFdPWoqdGhpcy5fcmVuZGVyZXIuX3RpbnRbMV0vMjU1LGdbaCsyXT1rKnRoaXMuX3JlbmRlcmVyLl90aW50WzJdLzI1NSxnW2grM109bCp0aGlzLl9yZW5kZXJlci5fdGludFszXS8yNTV9cmV0dXJuIGQucHV0SW1hZ2VEYXRhKGUsMCwwKSxjfSxlLnByb3RvdHlwZS5pbWFnZU1vZGU9ZnVuY3Rpb24oYSl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaW1hZ2VNb2RlXCIsYXJndW1lbnRzKSxhIT09aC5DT1JORVImJmEhPT1oLkNPUk5FUlMmJmEhPT1oLkNFTlRFUnx8KHRoaXMuX3JlbmRlcmVyLl9pbWFnZU1vZGU9YSl9LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9jb3JlL2hlbHBlcnNcIjoyMSxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9maWx0ZXJzXCI6NDJ9XSw0NTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi9maWx0ZXJzXCIpO2QuSW1hZ2U9ZnVuY3Rpb24oYSxiKXt0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yix0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaGVpZ2h0LHRoaXMuZHJhd2luZ0NvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLHRoaXMuX3BpeGVsRGVuc2l0eT0xLHRoaXMuX21vZGlmaWVkPSExLHRoaXMuX3BpeGVsc0RpcnR5PSEwLHRoaXMucGl4ZWxzPVtdfSxkLkltYWdlLnByb3RvdHlwZS5fc2V0UHJvcGVydHk9ZnVuY3Rpb24oYSxiKXt0aGlzW2FdPWIsdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmxvYWRQaXhlbHM9ZnVuY3Rpb24oKXtkLlJlbmRlcmVyMkQucHJvdG90eXBlLmxvYWRQaXhlbHMuY2FsbCh0aGlzKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUudXBkYXRlUGl4ZWxzPWZ1bmN0aW9uKGEsYixjLGUpe2QuUmVuZGVyZXIyRC5wcm90b3R5cGUudXBkYXRlUGl4ZWxzLmNhbGwodGhpcyxhLGIsYyxlKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEsYixjLGUpe3JldHVybiBkLlJlbmRlcmVyMkQucHJvdG90eXBlLmdldC5jYWxsKHRoaXMsYSxiLGMsZSl9LGQuSW1hZ2UucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7ZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zZXQuY2FsbCh0aGlzLGEsYixjKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGEsYil7MD09PWEmJjA9PT1iPyhhPXRoaXMuY2FudmFzLndpZHRoLGI9dGhpcy5jYW52YXMuaGVpZ2h0KTowPT09YT9hPXRoaXMuY2FudmFzLndpZHRoKmIvdGhpcy5jYW52YXMuaGVpZ2h0OjA9PT1iJiYoYj10aGlzLmNhbnZhcy5oZWlnaHQqYS90aGlzLmNhbnZhcy53aWR0aCksYT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihiKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Mud2lkdGg9YSxjLmhlaWdodD1iLGMuZ2V0Q29udGV4dChcIjJkXCIpLmRyYXdJbWFnZSh0aGlzLmNhbnZhcywwLDAsdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0LDAsMCxjLndpZHRoLGMuaGVpZ2h0KSx0aGlzLmNhbnZhcy53aWR0aD10aGlzLndpZHRoPWEsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaGVpZ2h0PWIsdGhpcy5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoYywwLDAsYSxiLDAsMCxhLGIpLHRoaXMucGl4ZWxzLmxlbmd0aD4wJiZ0aGlzLmxvYWRQaXhlbHMoKSx0aGlzLnNldE1vZGlmaWVkKCEwKSx0aGlzLl9waXhlbHNEaXJ0eT0hMH0sZC5JbWFnZS5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhLGIsYyxlLGYsZyxoLGksajtpZig5PT09YXJndW1lbnRzLmxlbmd0aClhPWFyZ3VtZW50c1swXSxiPWFyZ3VtZW50c1sxXSxjPWFyZ3VtZW50c1syXSxlPWFyZ3VtZW50c1szXSxmPWFyZ3VtZW50c1s0XSxnPWFyZ3VtZW50c1s1XSxoPWFyZ3VtZW50c1s2XSxpPWFyZ3VtZW50c1s3XSxqPWFyZ3VtZW50c1s4XTtlbHNle2lmKDghPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlNpZ25hdHVyZSBub3Qgc3VwcG9ydGVkXCIpO2E9dGhpcyxiPWFyZ3VtZW50c1swXSxjPWFyZ3VtZW50c1sxXSxlPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXSxnPWFyZ3VtZW50c1s0XSxoPWFyZ3VtZW50c1s1XSxpPWFyZ3VtZW50c1s2XSxqPWFyZ3VtZW50c1s3XX1kLlJlbmRlcmVyMkQuX2NvcHlIZWxwZXIodGhpcyxhLGIsYyxlLGYsZyxoLGksaiksdGhpcy5fcGl4ZWxzRGlydHk9ITB9LGQuSW1hZ2UucHJvdG90eXBlLm1hc2s9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9dGhpcyk7dmFyIGI9dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24sYz0xO2EgaW5zdGFuY2VvZiBkLlJlbmRlcmVyJiYoYz1hLl9wSW5zdC5fcGl4ZWxEZW5zaXR5KTt2YXIgZT1bYSwwLDAsYyphLndpZHRoLGMqYS5oZWlnaHQsMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHRdO3RoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVwiZGVzdGluYXRpb24taW5cIixkLkltYWdlLnByb3RvdHlwZS5jb3B5LmFwcGx5KHRoaXMsZSksdGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249Yix0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKGEsYil7ZS5hcHBseSh0aGlzLmNhbnZhcyxlW2EudG9Mb3dlckNhc2UoKV0sYiksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmJsZW5kPWZ1bmN0aW9uKCl7ZC5wcm90b3R5cGUuYmxlbmQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5zZXRNb2RpZmllZD1mdW5jdGlvbihhKXt0aGlzLl9tb2RpZmllZD1hfSxkLkltYWdlLnByb3RvdHlwZS5pc01vZGlmaWVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGlmaWVkfSxkLkltYWdlLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKGEsYil7ZC5wcm90b3R5cGUuc2F2ZUNhbnZhcyh0aGlzLmNhbnZhcyxhLGIpfSxiLmV4cG9ydHM9ZC5JbWFnZX0se1wiLi4vY29yZS9tYWluXCI6MjQsXCIuL2ZpbHRlcnNcIjo0Mn1dLDQ2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuL2ZpbHRlcnNcIik7YShcIi4uL2NvbG9yL3A1LkNvbG9yXCIpLGQucHJvdG90eXBlLnBpeGVscz1bXSxkLnByb3RvdHlwZS5ibGVuZD1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJsZW5kXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlcj90aGlzLl9yZW5kZXJlci5ibGVuZC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpOmQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYmxlbmQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29weVwiLGFyZ3VtZW50cyksZC5SZW5kZXJlcjJELnByb3RvdHlwZS5jb3B5LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbihhLGIpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImZpbHRlclwiLGFyZ3VtZW50cyksdm9pZCAwIT09dGhpcy5jYW52YXM/ZS5hcHBseSh0aGlzLmNhbnZhcyxlW2EudG9Mb3dlckNhc2UoKV0sYik6ZS5hcHBseSh0aGlzLmVsdCxlW2EudG9Mb3dlckNhc2UoKV0sYil9LGQucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZ2V0KGEsYixjLGQpfSxkLnByb3RvdHlwZS5sb2FkUGl4ZWxzPWZ1bmN0aW9uKCl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZFBpeGVsc1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIubG9hZFBpeGVscygpfSxkLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3JlbmRlcmVyLnNldChhLGIsYyl9LGQucHJvdG90eXBlLnVwZGF0ZVBpeGVscz1mdW5jdGlvbihhLGIsYyxlKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ1cGRhdGVQaXhlbHNcIixhcmd1bWVudHMpLDAhPT10aGlzLnBpeGVscy5sZW5ndGgmJnRoaXMuX3JlbmRlcmVyLnVwZGF0ZVBpeGVscyhhLGIsYyxlKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvbG9yL3A1LkNvbG9yXCI6MTYsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vZmlsdGVyc1wiOjQyfV0sNDc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7dmFyIGM9e307aWYodm9pZCAwPT09KGI9Ynx8W10pKWZvcih2YXIgZD0wO2Q8YS5sZW5ndGg7ZCsrKWJbZC50b1N0cmluZygpXT1kO2Zvcih2YXIgZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1iW2VdLGc9YVtlXTtjW2ZdPWd9cmV0dXJuIGN9ZnVuY3Rpb24gZShhKXt2YXIgYj1uZXcgaS5YTUwsYz1hLmNoaWxkTm9kZXM7aWYoYyYmYy5sZW5ndGgpe2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZj1lKGNbZF0pO2IuYWRkQ2hpbGQoZil9Yi5zZXROYW1lKGEubm9kZU5hbWUpLGIuX3NldENvbnQoYS50ZXh0Q29udGVudCksYi5fc2V0QXR0cmlidXRlcyhhKTtmb3IodmFyIGc9MDtnPGIuY2hpbGRyZW4ubGVuZ3RoO2crKyliLmNoaWxkcmVuW2ddLnBhcmVudD1iO3JldHVybiBifXJldHVybiBiLnNldE5hbWUoYS5ub2RlTmFtZSksYi5fc2V0Q29udChhLnRleHRDb250ZW50KSxiLl9zZXRBdHRyaWJ1dGVzKGEpLGJ9ZnVuY3Rpb24gZihhKXtyZXR1cm4gYS5yZXBsYWNlKC8mL2csXCImYW1wO1wiKS5yZXBsYWNlKC88L2csXCImbHQ7XCIpLnJlcGxhY2UoLz4vZyxcIiZndDtcIikucmVwbGFjZSgvXCIvZyxcIiZxdW90O1wiKS5yZXBsYWNlKC8nL2csXCImIzAzOTtcIil9ZnVuY3Rpb24gZyhhLGIpe2ImJiEwIT09YiYmXCJ0cnVlXCIhPT1ifHwoYj1cIlwiKSxhfHwoYT1cInVudGl0bGVkXCIpO3ZhciBjPVwiXCI7cmV0dXJuIGEmJmEuaW5kZXhPZihcIi5cIik+LTEmJihjPWEuc3BsaXQoXCIuXCIpLnBvcCgpKSxiJiZjIT09YiYmKGM9YixhPWErXCIuXCIrYyksW2EsY119ZnVuY3Rpb24gaChhKXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEudGFyZ2V0KX12YXIgaT1hKFwiLi4vY29yZS9tYWluXCIpO2EoXCJ3aGF0d2ctZmV0Y2hcIiksYShcImVzNi1wcm9taXNlXCIpLnBvbHlmaWxsKCk7dmFyIGo9YShcImZldGNoLWpzb25wXCIpO2EoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksaS5wcm90b3R5cGUubG9hZEpTT049ZnVuY3Rpb24oKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkSlNPTlwiLGFyZ3VtZW50cyk7Zm9yKHZhciBhLGIsYyxkPWFyZ3VtZW50c1swXSxlPXt9LGY9XCJqc29uXCIsZz0xO2c8YXJndW1lbnRzLmxlbmd0aDtnKyspe3ZhciBoPWFyZ3VtZW50c1tnXTtcInN0cmluZ1wiPT10eXBlb2YgaD9cImpzb25wXCIhPT1oJiZcImpzb25cIiE9PWh8fChmPWgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGg/YT9iPWg6YT1oOlwib2JqZWN0XCI9PXR5cGVvZiBoJiZoLmhhc093blByb3BlcnR5KFwianNvbnBDYWxsYmFja1wiKSYmKGY9XCJqc29ucFwiLGM9aCl9dmFyIGo9dGhpcztyZXR1cm4gdGhpcy5odHRwRG8oZCxcIkdFVFwiLGMsZixmdW5jdGlvbihiKXtmb3IodmFyIGMgaW4gYillW2NdPWJbY107dm9pZCAwIT09YSYmYShiKSxqLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGEpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig1LGQpLCFiKXRocm93IGE7YihhKX0pLGV9LGkucHJvdG90eXBlLmxvYWRTdHJpbmdzPWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZFN0cmluZ3NcIixhcmd1bWVudHMpO2Zvcih2YXIgYSxiLGM9W10sZD0xO2Q8YXJndW1lbnRzLmxlbmd0aDtkKyspe3ZhciBlPWFyZ3VtZW50c1tkXTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYodm9pZCAwPT09YT9hPWU6dm9pZCAwPT09YiYmKGI9ZSkpfXZhciBmPXRoaXM7cmV0dXJuIGkucHJvdG90eXBlLmh0dHBEby5jYWxsKHRoaXMsYXJndW1lbnRzWzBdLFwiR0VUXCIsXCJ0ZXh0XCIsZnVuY3Rpb24oYil7dmFyIGQ9Yi5yZXBsYWNlKC9cXHJcXG4vZyxcIlxcclwiKS5yZXBsYWNlKC9cXG4vZyxcIlxcclwiKS5zcGxpdCgvXFxyLyk7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYyxkKSx2b2lkIDAhPT1hJiZhKGMpLGYuX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYSl7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDMsYXJndW1lbnRzWzBdKSwhYil0aHJvdyBhO2IoYSl9KSxjfSxpLnByb3RvdHlwZS5sb2FkVGFibGU9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlPVtdLGY9ITEsZz1hLnN1YnN0cmluZyhhLmxhc3RJbmRleE9mKFwiLlwiKSsxLGEubGVuZ3RoKSxoPVwiLFwiLGo9ITE7XCJ0c3ZcIj09PWcmJihoPVwiXFx0XCIpO2Zvcih2YXIgaz0xO2s8YXJndW1lbnRzLmxlbmd0aDtrKyspaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYXJndW1lbnRzW2tdKXZvaWQgMD09PWI/Yj1hcmd1bWVudHNba106dm9pZCAwPT09YyYmKGM9YXJndW1lbnRzW2tdKTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBhcmd1bWVudHNba10paWYoZS5wdXNoKGFyZ3VtZW50c1trXSksXCJoZWFkZXJcIj09PWFyZ3VtZW50c1trXSYmKGY9ITApLFwiY3N2XCI9PT1hcmd1bWVudHNba10pe2lmKGopdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNldCBtdWx0aXBsZSBzZXBhcmF0b3IgdHlwZXMuXCIpO2g9XCIsXCIsaj0hMH1lbHNlIGlmKFwidHN2XCI9PT1hcmd1bWVudHNba10pe2lmKGopdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNldCBtdWx0aXBsZSBzZXBhcmF0b3IgdHlwZXMuXCIpO2g9XCJcXHRcIixqPSEwfXZhciBsPW5ldyBpLlRhYmxlLG09dGhpcztyZXR1cm4gdGhpcy5odHRwRG8oYSxcIkdFVFwiLFwidGFibGVcIixmdW5jdGlvbihhKXtmb3IodmFyIGMsZT17fSxnPTAsaj0xLG49MixvPTQscD0nXCInLHE9XCJcXHJcIixyPVwiXFxuXCIscz1bXSx0PTAsdT1udWxsLHY9ZnVuY3Rpb24oKXtlLmN1cnJlbnRTdGF0ZT1nLGUudG9rZW49XCJcIn0sdz1mdW5jdGlvbigpe3UucHVzaChlLnRva2VuKSx2KCl9LHg9ZnVuY3Rpb24oKXtlLmVzY2FwZWQ9ITEsdT1bXSx2KCl9LHk9ZnVuY3Rpb24oKXtlLmN1cnJlbnRTdGF0ZT1vLHMucHVzaCh1KSx1PW51bGx9Ozspe2lmKG51bGw9PShjPWFbdCsrXSkpe2lmKGUuZXNjYXBlZCl0aHJvdyBuZXcgRXJyb3IoXCJVbmNsb3NlZCBxdW90ZSBpbiBmaWxlLlwiKTtpZih1KXt3KCkseSgpO2JyZWFrfX1pZihudWxsPT09dSYmeCgpLGUuY3VycmVudFN0YXRlPT09Zyl7aWYoYz09PXApe2UuZXNjYXBlZD0hMCxlLmN1cnJlbnRTdGF0ZT1qO2NvbnRpbnVlfWUuY3VycmVudFN0YXRlPWp9aWYoZS5jdXJyZW50U3RhdGU9PT1qJiZlLmVzY2FwZWQpaWYoYz09PXApYVt0XT09PXA/KGUudG9rZW4rPXAsdCsrKTooZS5lc2NhcGVkPSExLGUuY3VycmVudFN0YXRlPW4pO2Vsc2V7aWYoYz09PXEpY29udGludWU7ZS50b2tlbis9Y31lbHNlIGM9PT1xPyhhW3RdPT09ciYmdCsrLHcoKSx5KCkpOmM9PT1yPyh3KCkseSgpKTpjPT09aD93KCk6ZS5jdXJyZW50U3RhdGU9PT1qJiYoZS50b2tlbis9Yyl9aWYoZilsLmNvbHVtbnM9cy5zaGlmdCgpO2Vsc2UgZm9yKGs9MDtrPHNbMF0ubGVuZ3RoO2srKylsLmNvbHVtbnNba109XCJudWxsXCI7dmFyIHo7Zm9yKGs9MDtrPHMubGVuZ3RoO2srKykoMSE9PXNba10ubGVuZ3RofHxcInVuZGVmaW5lZFwiIT09c1trXVswXSYmXCJcIiE9PXNba11bMF0pJiYoej1uZXcgaS5UYWJsZVJvdyx6LmFycj1zW2tdLHoub2JqPWQoc1trXSxsLmNvbHVtbnMpLGwuYWRkUm93KHopKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBiJiZiKGwpLG0uX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYil7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDIsYSksIWMpdGhyb3cgYjtjKGIpfSksbH0saS5wcm90b3R5cGUubG9hZFhNTD1mdW5jdGlvbigpe2Zvcih2YXIgYSxiLGM9e30sZD0xO2Q8YXJndW1lbnRzLmxlbmd0aDtkKyspe3ZhciBlPWFyZ3VtZW50c1tkXTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYodm9pZCAwPT09YT9hPWU6dm9pZCAwPT09YiYmKGI9ZSkpfXZhciBmPXRoaXM7cmV0dXJuIHRoaXMuaHR0cERvKGFyZ3VtZW50c1swXSxcIkdFVFwiLFwieG1sXCIsZnVuY3Rpb24oYil7Zm9yKHZhciBkIGluIGIpY1tkXT1iW2RdO3ZvaWQgMCE9PWEmJmEoYyksZi5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihhKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoMSxhcmd1bWVudHNbMF0pLCFiKXRocm93IGE7YihhKX0pLGN9LGkucHJvdG90eXBlLmxvYWRCeXRlcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9e30sZT10aGlzO3JldHVybiB0aGlzLmh0dHBEbyhhLFwiR0VUXCIsXCJhcnJheUJ1ZmZlclwiLGZ1bmN0aW9uKGEpe2QuYnl0ZXM9bmV3IFVpbnQ4QXJyYXkoYSksXCJmdW5jdGlvblwiPT10eXBlb2YgYiYmYihkKSxlLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGIpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig2LGEpLCFjKXRocm93IGI7YyhiKX0pLGR9LGkucHJvdG90eXBlLmh0dHBHZXQ9ZnVuY3Rpb24oKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJodHRwR2V0XCIsYXJndW1lbnRzKTt2YXIgYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBhLnNwbGljZSgxLDAsXCJHRVRcIiksaS5wcm90b3R5cGUuaHR0cERvLmFwcGx5KHRoaXMsYSl9LGkucHJvdG90eXBlLmh0dHBQb3N0PWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaHR0cFBvc3RcIixhcmd1bWVudHMpO3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGEuc3BsaWNlKDEsMCxcIlBPU1RcIiksaS5wcm90b3R5cGUuaHR0cERvLmFwcGx5KHRoaXMsYSl9LGkucHJvdG90eXBlLmh0dHBEbz1mdW5jdGlvbigpe2Zvcih2YXIgYSxiLGMsZCxmLGc9e30saD0wLGs9XCJ0ZXh0L3BsYWluXCIsbD1hcmd1bWVudHMubGVuZ3RoLTE7bD4wJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhcmd1bWVudHNbbF07bC0tKWgrKzt2YXIgbT1hcmd1bWVudHMubGVuZ3RoLWgsbj1hcmd1bWVudHNbMF07aWYoMj09PW0mJlwic3RyaW5nXCI9PXR5cGVvZiBuJiZcIm9iamVjdFwiPT10eXBlb2YgYXJndW1lbnRzWzFdKWQ9bmV3IFJlcXVlc3Qobixhcmd1bWVudHNbMV0pLGI9YXJndW1lbnRzWzJdLGM9YXJndW1lbnRzWzNdO2Vsc2V7Zm9yKHZhciBvLHA9XCJHRVRcIixxPTE7cTxhcmd1bWVudHMubGVuZ3RoO3ErKyl7dmFyIHI9YXJndW1lbnRzW3FdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiByKVwiR0VUXCI9PT1yfHxcIlBPU1RcIj09PXJ8fFwiUFVUXCI9PT1yfHxcIkRFTEVURVwiPT09cj9wPXI6XCJqc29uXCI9PT1yfHxcImpzb25wXCI9PT1yfHxcImJpbmFyeVwiPT09cnx8XCJhcnJheUJ1ZmZlclwiPT09cnx8XCJ4bWxcIj09PXJ8fFwidGV4dFwiPT09cnx8XCJ0YWJsZVwiPT09cj9hPXI6bz1yO2Vsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIHIpbz1yLnRvU3RyaW5nKCk7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgcilpZihyLmhhc093blByb3BlcnR5KFwianNvbnBDYWxsYmFja1wiKSlmb3IodmFyIHMgaW4gcilnW3NdPXJbc107ZWxzZSBvPUpTT04uc3RyaW5naWZ5KHIpLGs9XCJhcHBsaWNhdGlvbi9qc29uXCI7ZWxzZVwiZnVuY3Rpb25cIj09dHlwZW9mIHImJihiP2M9cjpiPXIpfWQ9bmV3IFJlcXVlc3Qobix7bWV0aG9kOnAsbW9kZTpcImNvcnNcIixib2R5Om8saGVhZGVyczpuZXcgSGVhZGVycyh7XCJDb250ZW50LVR5cGVcIjprfSl9KX1yZXR1cm4gYXx8KGE9LTEhPT1uLmluZGV4T2YoXCJqc29uXCIpP1wianNvblwiOi0xIT09bi5pbmRleE9mKFwieG1sXCIpP1wieG1sXCI6XCJ0ZXh0XCIpLGY9XCJqc29ucFwiPT09YT9qKG4sZyk6ZmV0Y2goZCksZj1mLnRoZW4oZnVuY3Rpb24oYil7aWYoIWIub2spe3ZhciBjPW5ldyBFcnJvcihiLmJvZHkpO3Rocm93IGMuc3RhdHVzPWIuc3RhdHVzLGMub2s9ITEsY312YXIgZD1iLmhlYWRlcnMuZ2V0KFwiY29udGVudC1sZW5ndGhcIik7c3dpdGNoKGQmJmQ+NjRlNiYmaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDcsbiksYSl7Y2FzZVwianNvblwiOmNhc2VcImpzb25wXCI6cmV0dXJuIGIuanNvbigpO2Nhc2VcImJpbmFyeVwiOnJldHVybiBiLmJsb2IoKTtjYXNlXCJhcnJheUJ1ZmZlclwiOnJldHVybiBiLmFycmF5QnVmZmVyKCk7Y2FzZVwieG1sXCI6cmV0dXJuIGIudGV4dCgpLnRoZW4oZnVuY3Rpb24oYSl7cmV0dXJuIGUoKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhhLFwidGV4dC94bWxcIikuZG9jdW1lbnRFbGVtZW50KX0pO2RlZmF1bHQ6cmV0dXJuIGIudGV4dCgpfX0pLGYudGhlbihifHxmdW5jdGlvbigpe30pLGYuY2F0Y2goY3x8Y29uc29sZS5lcnJvciksZn0sd2luZG93LlVSTD13aW5kb3cuVVJMfHx3aW5kb3cud2Via2l0VVJMLGkucHJvdG90eXBlLl9wV3JpdGVycz1bXSxpLnByb3RvdHlwZS5jcmVhdGVXcml0ZXI9ZnVuY3Rpb24oYSxiKXt2YXIgYztmb3IodmFyIGQgaW4gaS5wcm90b3R5cGUuX3BXcml0ZXJzKWlmKGkucHJvdG90eXBlLl9wV3JpdGVyc1tkXS5uYW1lPT09YSlyZXR1cm4gYz1uZXcgaS5QcmludFdyaXRlcihhK3RoaXMubWlsbGlzKCksYiksaS5wcm90b3R5cGUuX3BXcml0ZXJzLnB1c2goYyksYztyZXR1cm4gYz1uZXcgaS5QcmludFdyaXRlcihhLGIpLGkucHJvdG90eXBlLl9wV3JpdGVycy5wdXNoKGMpLGN9LGkuUHJpbnRXcml0ZXI9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO3RoaXMubmFtZT1hLHRoaXMuY29udGVudD1cIlwiLHRoaXMud3JpdGU9ZnVuY3Rpb24oYSl7dGhpcy5jb250ZW50Kz1hfSx0aGlzLnByaW50PWZ1bmN0aW9uKGEpe3RoaXMuY29udGVudCs9YStcIlxcblwifSx0aGlzLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5jb250ZW50PVwiXCJ9LHRoaXMuY2xvc2U9ZnVuY3Rpb24oKXt2YXIgZD1bXTtkLnB1c2godGhpcy5jb250ZW50KSxpLnByb3RvdHlwZS53cml0ZUZpbGUoZCxhLGIpO2Zvcih2YXIgZSBpbiBpLnByb3RvdHlwZS5fcFdyaXRlcnMpaS5wcm90b3R5cGUuX3BXcml0ZXJzW2VdLm5hbWU9PT10aGlzLm5hbWUmJmkucHJvdG90eXBlLl9wV3JpdGVycy5zcGxpY2UoZSwxKTtjLmNsZWFyKCksYz17fX19LGkucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWFyZ3VtZW50cyxlPXRoaXMuX2N1ckVsZW1lbnQuZWx0O2lmKDA9PT1kLmxlbmd0aClyZXR1cm4gdm9pZCBpLnByb3RvdHlwZS5zYXZlQ2FudmFzKGUpO2lmKGRbMF1pbnN0YW5jZW9mIGkuUmVuZGVyZXJ8fGRbMF1pbnN0YW5jZW9mIGkuR3JhcGhpY3MpcmV0dXJuIHZvaWQgaS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhkWzBdLmVsdCxkWzFdLGRbMl0pO2lmKDE9PT1kLmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIGRbMF0paS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhlLGRbMF0pO2Vsc2V7c3dpdGNoKGcoZFsxXSxkWzJdKVsxXSl7Y2FzZVwianNvblwiOnJldHVybiB2b2lkIGkucHJvdG90eXBlLnNhdmVKU09OKGRbMF0sZFsxXSxkWzJdKTtjYXNlXCJ0eHRcIjpyZXR1cm4gdm9pZCBpLnByb3RvdHlwZS5zYXZlU3RyaW5ncyhkWzBdLGRbMV0sZFsyXSk7ZGVmYXVsdDpkWzBdaW5zdGFuY2VvZiBBcnJheT9pLnByb3RvdHlwZS5zYXZlU3RyaW5ncyhkWzBdLGRbMV0sZFsyXSk6ZFswXWluc3RhbmNlb2YgaS5UYWJsZT9pLnByb3RvdHlwZS5zYXZlVGFibGUoZFswXSxkWzFdLGRbMl0pOmRbMF1pbnN0YW5jZW9mIGkuSW1hZ2U/aS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhkWzBdLmNhbnZhcyxkWzFdKTpkWzBdaW5zdGFuY2VvZiBpLlNvdW5kRmlsZSYmaS5wcm90b3R5cGUuc2F2ZVNvdW5kKGRbMF0sZFsxXSxkWzJdLGRbM10pfX19LGkucHJvdG90eXBlLnNhdmVKU09OPWZ1bmN0aW9uKGEsYixjKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlSlNPTlwiLGFyZ3VtZW50cyk7dmFyIGQ7ZD1jP0pTT04uc3RyaW5naWZ5KGEpOkpTT04uc3RyaW5naWZ5KGEsdm9pZCAwLDIpLHRoaXMuc2F2ZVN0cmluZ3MoZC5zcGxpdChcIlxcblwiKSxiLFwianNvblwiKX0saS5wcm90b3R5cGUuc2F2ZUpTT05PYmplY3Q9aS5wcm90b3R5cGUuc2F2ZUpTT04saS5wcm90b3R5cGUuc2F2ZUpTT05BcnJheT1pLnByb3RvdHlwZS5zYXZlSlNPTixpLnByb3RvdHlwZS5zYXZlU3RyaW5ncz1mdW5jdGlvbihhLGIsYyl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZVN0cmluZ3NcIixhcmd1bWVudHMpO2Zvcih2YXIgZD1jfHxcInR4dFwiLGU9dGhpcy5jcmVhdGVXcml0ZXIoYixkKSxmPTA7ZjxhLmxlbmd0aDtmKyspYS5sZW5ndGgsZS5wcmludChhW2ZdKTtlLmNsb3NlKCksZS5jbGVhcigpfSxpLnByb3RvdHlwZS5zYXZlVGFibGU9ZnVuY3Rpb24oYSxiLGMpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVUYWJsZVwiLGFyZ3VtZW50cyk7dmFyIGQ7ZD12b2lkIDA9PT1jP2Iuc3Vic3RyaW5nKGIubGFzdEluZGV4T2YoXCIuXCIpKzEsYi5sZW5ndGgpOmM7dmFyIGU9dGhpcy5jcmVhdGVXcml0ZXIoYixkKSxnPWEuY29sdW1ucyxoPVwiLFwiO2lmKFwidHN2XCI9PT1kJiYoaD1cIlxcdFwiKSxcImh0bWxcIiE9PWQpe2lmKFwiMFwiIT09Z1swXSl7Zm9yKHZhciBqPTA7ajxnLmxlbmd0aDtqKyspajxnLmxlbmd0aC0xP2Uud3JpdGUoZ1tqXStoKTplLndyaXRlKGdbal0pO2Uud3JpdGUoXCJcXG5cIil9Zm9yKHZhciBrPTA7azxhLnJvd3MubGVuZ3RoO2srKyl7dmFyIGw7Zm9yKGw9MDtsPGEucm93c1trXS5hcnIubGVuZ3RoO2wrKylsPGEucm93c1trXS5hcnIubGVuZ3RoLTE/ZS53cml0ZShhLnJvd3Nba10uYXJyW2xdK2gpOihhLnJvd3MubGVuZ3RoLGUud3JpdGUoYS5yb3dzW2tdLmFycltsXSkpO2Uud3JpdGUoXCJcXG5cIil9fWVsc2V7ZS5wcmludChcIjxodG1sPlwiKSxlLnByaW50KFwiPGhlYWQ+XCIpO3ZhciBtPScgIDxtZXRhIGh0dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50JztpZihtKz0nPVwidGV4dC9odG1sO2NoYXJzZXQ9dXRmLThcIiAvPicsZS5wcmludChtKSxlLnByaW50KFwiPC9oZWFkPlwiKSxlLnByaW50KFwiPGJvZHk+XCIpLGUucHJpbnQoXCIgIDx0YWJsZT5cIiksXCIwXCIhPT1nWzBdKXtlLnByaW50KFwiICAgIDx0cj5cIik7Zm9yKHZhciBuPTA7bjxnLmxlbmd0aDtuKyspe3ZhciBvPWYoZ1tuXSk7ZS5wcmludChcIiAgICAgIDx0ZD5cIitvKSxlLnByaW50KFwiICAgICAgPC90ZD5cIil9ZS5wcmludChcIiAgICA8L3RyPlwiKX1mb3IodmFyIHA9MDtwPGEucm93cy5sZW5ndGg7cCsrKXtlLnByaW50KFwiICAgIDx0cj5cIik7Zm9yKHZhciBxPTA7cTxhLmNvbHVtbnMubGVuZ3RoO3ErKyl7dmFyIHI9YS5yb3dzW3BdLmdldFN0cmluZyhxKSxzPWYocik7ZS5wcmludChcIiAgICAgIDx0ZD5cIitzKSxlLnByaW50KFwiICAgICAgPC90ZD5cIil9ZS5wcmludChcIiAgICA8L3RyPlwiKX1lLnByaW50KFwiICA8L3RhYmxlPlwiKSxlLnByaW50KFwiPC9ib2R5PlwiKSxlLnByaW50KFwiPC9odG1sPlwiKX1lLmNsb3NlKCksZS5jbGVhcigpfSxpLnByb3RvdHlwZS53cml0ZUZpbGU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7aS5wcm90b3R5cGUuX2lzU2FmYXJpKCkmJihkPVwidGV4dC9wbGFpblwiKTt2YXIgZT1uZXcgQmxvYihhLHt0eXBlOmR9KTtpLnByb3RvdHlwZS5kb3dubG9hZEZpbGUoZSxiLGMpfSxpLnByb3RvdHlwZS5kb3dubG9hZEZpbGU9ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWcoYyxkKSxmPWVbMF07aWYoYiBpbnN0YW5jZW9mIEJsb2Ipe3JldHVybiB2b2lkIGEoXCJmaWxlLXNhdmVyXCIpLnNhdmVBcyhiLGYpfXZhciBqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO2lmKGouaHJlZj1iLGouZG93bmxvYWQ9ZixqLm9uY2xpY2s9ZnVuY3Rpb24oYSl7aChhKSxhLnN0b3BQcm9wYWdhdGlvbigpfSxqLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChqKSxpLnByb3RvdHlwZS5faXNTYWZhcmkoKSl7dmFyIGs9XCJIZWxsbywgU2FmYXJpIHVzZXIhIFRvIGRvd25sb2FkIHRoaXMgZmlsZS4uLlxcblwiO2srPVwiMS4gR28gdG8gRmlsZSAtLVxceDNlIFNhdmUgQXMuXFxuXCIsays9JzIuIENob29zZSBcIlBhZ2UgU291cmNlXCIgYXMgdGhlIEZvcm1hdC5cXG4nLGsrPSczLiBOYW1lIGl0IHdpdGggdGhpcyBleHRlbnNpb246IC5cIicrZVsxXSsnXCInLGFsZXJ0KGspfWouY2xpY2soKX0saS5wcm90b3R5cGUuX2NoZWNrRmlsZUV4dGVuc2lvbj1nLGkucHJvdG90eXBlLl9pc1NhZmFyaT1mdW5jdGlvbigpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2luZG93LkhUTUxFbGVtZW50KS5pbmRleE9mKFwiQ29uc3RydWN0b3JcIik+MH0sYi5leHBvcnRzPWl9LHtcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjQsXCJlczYtcHJvbWlzZVwiOjQsXCJmZXRjaC1qc29ucFwiOjUsXCJmaWxlLXNhdmVyXCI6NixcIndoYXR3Zy1mZXRjaFwiOjEyfV0sNDg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuVGFibGU9ZnVuY3Rpb24oYSl7dGhpcy5jb2x1bW5zPVtdLHRoaXMucm93cz1bXX0sZC5UYWJsZS5wcm90b3R5cGUuYWRkUm93PWZ1bmN0aW9uKGEpe3ZhciBiPWF8fG5ldyBkLlRhYmxlUm93O2lmKHZvaWQgMD09PWIuYXJyfHx2b2lkIDA9PT1iLm9iail0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFRhYmxlUm93OiBcIitiKTtyZXR1cm4gYi50YWJsZT10aGlzLHRoaXMucm93cy5wdXNoKGIpLGJ9LGQuVGFibGUucHJvdG90eXBlLnJlbW92ZVJvdz1mdW5jdGlvbihhKXt0aGlzLnJvd3NbYV0udGFibGU9bnVsbDt2YXIgYj10aGlzLnJvd3Muc3BsaWNlKGErMSx0aGlzLnJvd3MubGVuZ3RoKTt0aGlzLnJvd3MucG9wKCksdGhpcy5yb3dzPXRoaXMucm93cy5jb25jYXQoYil9LGQuVGFibGUucHJvdG90eXBlLmdldFJvdz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3dzW2FdfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm93c30sZC5UYWJsZS5wcm90b3R5cGUuZmluZFJvdz1mdW5jdGlvbihhLGIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiKXtmb3IodmFyIGM9MDtjPHRoaXMucm93cy5sZW5ndGg7YysrKWlmKHRoaXMucm93c1tjXS5vYmpbYl09PT1hKXJldHVybiB0aGlzLnJvd3NbY119ZWxzZSBmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKWlmKHRoaXMucm93c1tkXS5hcnJbYl09PT1hKXJldHVybiB0aGlzLnJvd3NbZF07cmV0dXJuIG51bGx9LGQuVGFibGUucHJvdG90eXBlLmZpbmRSb3dzPWZ1bmN0aW9uKGEsYil7dmFyIGM9W107aWYoXCJzdHJpbmdcIj09dHlwZW9mIGIpZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKyl0aGlzLnJvd3NbZF0ub2JqW2JdPT09YSYmYy5wdXNoKHRoaXMucm93c1tkXSk7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMucm93cy5sZW5ndGg7ZSsrKXRoaXMucm93c1tlXS5hcnJbYl09PT1hJiZjLnB1c2godGhpcy5yb3dzW2VdKTtyZXR1cm4gY30sZC5UYWJsZS5wcm90b3R5cGUubWF0Y2hSb3c9ZnVuY3Rpb24oYSxiKXtpZihcIm51bWJlclwiPT10eXBlb2YgYil7Zm9yKHZhciBjPTA7Yzx0aGlzLnJvd3MubGVuZ3RoO2MrKylpZih0aGlzLnJvd3NbY10uYXJyW2JdLm1hdGNoKGEpKXJldHVybiB0aGlzLnJvd3NbY119ZWxzZSBmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKWlmKHRoaXMucm93c1tkXS5vYmpbYl0ubWF0Y2goYSkpcmV0dXJuIHRoaXMucm93c1tkXTtyZXR1cm4gbnVsbH0sZC5UYWJsZS5wcm90b3R5cGUubWF0Y2hSb3dzPWZ1bmN0aW9uKGEsYil7dmFyIGM9W107aWYoXCJudW1iZXJcIj09dHlwZW9mIGIpZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKyl0aGlzLnJvd3NbZF0uYXJyW2JdLm1hdGNoKGEpJiZjLnB1c2godGhpcy5yb3dzW2RdKTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5yb3dzLmxlbmd0aDtlKyspdGhpcy5yb3dzW2VdLm9ialtiXS5tYXRjaChhKSYmYy5wdXNoKHRoaXMucm93c1tlXSk7cmV0dXJuIGN9LGQuVGFibGUucHJvdG90eXBlLmdldENvbHVtbj1mdW5jdGlvbihhKXt2YXIgYj1bXTtpZihcInN0cmluZ1wiPT10eXBlb2YgYSlmb3IodmFyIGM9MDtjPHRoaXMucm93cy5sZW5ndGg7YysrKWIucHVzaCh0aGlzLnJvd3NbY10ub2JqW2FdKTtlbHNlIGZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspYi5wdXNoKHRoaXMucm93c1tkXS5hcnJbYV0pO3JldHVybiBifSxkLlRhYmxlLnByb3RvdHlwZS5jbGVhclJvd3M9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5yb3dzLHRoaXMucm93cz1bXX0sZC5UYWJsZS5wcm90b3R5cGUuYWRkQ29sdW1uPWZ1bmN0aW9uKGEpe3ZhciBiPWF8fG51bGw7dGhpcy5jb2x1bW5zLnB1c2goYil9LGQuVGFibGUucHJvdG90eXBlLmdldENvbHVtbkNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5sZW5ndGh9LGQuVGFibGUucHJvdG90eXBlLmdldFJvd0NvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm93cy5sZW5ndGh9LGQuVGFibGUucHJvdG90eXBlLnJlbW92ZVRva2Vucz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csXCJcXFxcJCZcIil9LGQ9W10sZT0wO2U8YS5sZW5ndGg7ZSsrKWQucHVzaChjKGEuY2hhckF0KGUpKSk7dmFyIGY9bmV3IFJlZ0V4cChkLmpvaW4oXCJ8XCIpLFwiZ1wiKTtpZih2b2lkIDA9PT1iKWZvcih2YXIgZz0wO2c8dGhpcy5jb2x1bW5zLmxlbmd0aDtnKyspZm9yKHZhciBoPTA7aDx0aGlzLnJvd3MubGVuZ3RoO2grKyl7dmFyIGk9dGhpcy5yb3dzW2hdLmFycltnXTtpPWkucmVwbGFjZShmLFwiXCIpLHRoaXMucm93c1toXS5hcnJbZ109aSx0aGlzLnJvd3NbaF0ub2JqW3RoaXMuY29sdW1uc1tnXV09aX1lbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBiKWZvcih2YXIgaj0wO2o8dGhpcy5yb3dzLmxlbmd0aDtqKyspe3ZhciBrPXRoaXMucm93c1tqXS5vYmpbYl07az1rLnJlcGxhY2UoZixcIlwiKSx0aGlzLnJvd3Nbal0ub2JqW2JdPWs7dmFyIGw9dGhpcy5jb2x1bW5zLmluZGV4T2YoYik7dGhpcy5yb3dzW2pdLmFycltsXT1rfWVsc2UgZm9yKHZhciBtPTA7bTx0aGlzLnJvd3MubGVuZ3RoO20rKyl7dmFyIG49dGhpcy5yb3dzW21dLmFycltiXTtuPW4ucmVwbGFjZShmLFwiXCIpLHRoaXMucm93c1ttXS5hcnJbYl09bix0aGlzLnJvd3NbbV0ub2JqW3RoaXMuY29sdW1uc1tiXV09bn19LGQuVGFibGUucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IFJlZ0V4cChcIiBcIixcImdcIik7aWYodm9pZCAwPT09YSlmb3IodmFyIGM9MDtjPHRoaXMuY29sdW1ucy5sZW5ndGg7YysrKWZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspe3ZhciBlPXRoaXMucm93c1tkXS5hcnJbY107ZT1lLnJlcGxhY2UoYixcIlwiKSx0aGlzLnJvd3NbZF0uYXJyW2NdPWUsdGhpcy5yb3dzW2RdLm9ialt0aGlzLmNvbHVtbnNbY11dPWV9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYSlmb3IodmFyIGY9MDtmPHRoaXMucm93cy5sZW5ndGg7ZisrKXt2YXIgZz10aGlzLnJvd3NbZl0ub2JqW2FdO2c9Zy5yZXBsYWNlKGIsXCJcIiksdGhpcy5yb3dzW2ZdLm9ialthXT1nO3ZhciBoPXRoaXMuY29sdW1ucy5pbmRleE9mKGEpO3RoaXMucm93c1tmXS5hcnJbaF09Z31lbHNlIGZvcih2YXIgaT0wO2k8dGhpcy5yb3dzLmxlbmd0aDtpKyspe3ZhciBqPXRoaXMucm93c1tpXS5hcnJbYV07aj1qLnJlcGxhY2UoYixcIlwiKSx0aGlzLnJvd3NbaV0uYXJyW2FdPWosdGhpcy5yb3dzW2ldLm9ialt0aGlzLmNvbHVtbnNbYV1dPWp9fSxkLlRhYmxlLnByb3RvdHlwZS5yZW1vdmVDb2x1bW49ZnVuY3Rpb24oYSl7dmFyIGIsYztcInN0cmluZ1wiPT10eXBlb2YgYT8oYj1hLGM9dGhpcy5jb2x1bW5zLmluZGV4T2YoYSkpOihjPWEsYj10aGlzLmNvbHVtbnNbYV0pO3ZhciBkPXRoaXMuY29sdW1ucy5zcGxpY2UoYysxLHRoaXMuY29sdW1ucy5sZW5ndGgpO3RoaXMuY29sdW1ucy5wb3AoKSx0aGlzLmNvbHVtbnM9dGhpcy5jb2x1bW5zLmNvbmNhdChkKTtmb3IodmFyIGU9MDtlPHRoaXMucm93cy5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLnJvd3NbZV0uYXJyLGc9Zi5zcGxpY2UoYysxLGYubGVuZ3RoKTtmLnBvcCgpLHRoaXMucm93c1tlXS5hcnI9Zi5jb25jYXQoZyksZGVsZXRlIHRoaXMucm93c1tlXS5vYmpbYl19fSxkLlRhYmxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMucm93c1thXS5zZXQoYixjKX0sZC5UYWJsZS5wcm90b3R5cGUuc2V0TnVtPWZ1bmN0aW9uKGEsYixjKXt0aGlzLnJvd3NbYV0uc2V0TnVtKGIsYyl9LGQuVGFibGUucHJvdG90eXBlLnNldFN0cmluZz1mdW5jdGlvbihhLGIsYyl7dGhpcy5yb3dzW2FdLnNldFN0cmluZyhiLGMpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5yb3dzW2FdLmdldChiKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0TnVtPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucm93c1thXS5nZXROdW0oYil9LGQuVGFibGUucHJvdG90eXBlLmdldFN0cmluZz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnJvd3NbYV0uZ2V0U3RyaW5nKGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRPYmplY3Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZD17fSxlPTA7ZTx0aGlzLnJvd3MubGVuZ3RoO2UrKylpZihiPXRoaXMucm93c1tlXS5vYmosXCJzdHJpbmdcIj09dHlwZW9mIGEpe2lmKCEodGhpcy5jb2x1bW5zLmluZGV4T2YoYSk+PTApKXRocm93IG5ldyBFcnJvcignVGhpcyB0YWJsZSBoYXMgbm8gY29sdW1uIG5hbWVkIFwiJythKydcIicpO2M9YlthXSxkW2NdPWJ9ZWxzZSBkW2VdPXRoaXMucm93c1tlXS5vYmo7cmV0dXJuIGR9LGQuVGFibGUucHJvdG90eXBlLmdldEFycmF5PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPVtdLGI9MDtiPHRoaXMucm93cy5sZW5ndGg7YisrKWEucHVzaCh0aGlzLnJvd3NbYl0uYXJyKTtyZXR1cm4gYX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNDk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuVGFibGVSb3c9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkPXt9O2EmJihiPWJ8fFwiLFwiLGM9YS5zcGxpdChiKSk7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWUsZz1jW2VdO2RbZl09Z310aGlzLmFycj1jLHRoaXMub2JqPWQsdGhpcy50YWJsZT1udWxsfSxkLlRhYmxlUm93LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXtpZihcInN0cmluZ1wiPT10eXBlb2YgYSl7dmFyIGM9dGhpcy50YWJsZS5jb2x1bW5zLmluZGV4T2YoYSk7aWYoIShjPj0wKSl0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgdGFibGUgaGFzIG5vIGNvbHVtbiBuYW1lZCBcIicrYSsnXCInKTt0aGlzLm9ialthXT1iLHRoaXMuYXJyW2NdPWJ9ZWxzZXtpZighKGE8dGhpcy50YWJsZS5jb2x1bW5zLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKFwiQ29sdW1uICNcIithK1wiIGlzIG91dCBvZiB0aGUgcmFuZ2Ugb2YgdGhpcyB0YWJsZVwiKTt0aGlzLmFyclthXT1iO3ZhciBkPXRoaXMudGFibGUuY29sdW1uc1thXTt0aGlzLm9ialtkXT1ifX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuc2V0TnVtPWZ1bmN0aW9uKGEsYil7dmFyIGM9cGFyc2VGbG9hdChiKTt0aGlzLnNldChhLGMpfSxkLlRhYmxlUm93LnByb3RvdHlwZS5zZXRTdHJpbmc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLnRvU3RyaW5nKCk7dGhpcy5zZXQoYSxjKX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhP3RoaXMub2JqW2FdOnRoaXMuYXJyW2FdfSxkLlRhYmxlUm93LnByb3RvdHlwZS5nZXROdW09ZnVuY3Rpb24oYSl7dmFyIGI7aWYoYj1cInN0cmluZ1wiPT10eXBlb2YgYT9wYXJzZUZsb2F0KHRoaXMub2JqW2FdKTpwYXJzZUZsb2F0KHRoaXMuYXJyW2FdKSxcIk5hTlwiPT09Yi50b1N0cmluZygpKXRocm93XCJFcnJvcjogXCIrdGhpcy5vYmpbYV0rXCIgaXMgTmFOIChOb3QgYSBOdW1iZXIpXCI7cmV0dXJuIGJ9LGQuVGFibGVSb3cucHJvdG90eXBlLmdldFN0cmluZz1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYT90aGlzLm9ialthXS50b1N0cmluZygpOnRoaXMuYXJyW2FdLnRvU3RyaW5nKCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDUwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlhNTD1mdW5jdGlvbigpe3RoaXMubmFtZT1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLmNoaWxkcmVuPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy5jb250ZW50PW51bGx9LGQuWE1MLnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnR9LGQuWE1MLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZX0sZC5YTUwucHJvdG90eXBlLnNldE5hbWU9ZnVuY3Rpb24oYSl7dGhpcy5uYW1lPWF9LGQuWE1MLnByb3RvdHlwZS5oYXNDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD4wfSxkLlhNTC5wcm90b3R5cGUubGlzdENoaWxkcmVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLm5hbWV9KX0sZC5YTUwucHJvdG90eXBlLmdldENoaWxkcmVuPWZ1bmN0aW9uKGEpe3JldHVybiBhP3RoaXMuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBiLm5hbWU9PT1hfSk6dGhpcy5jaGlsZHJlbn0sZC5YTUwucHJvdG90eXBlLmdldENoaWxkPWZ1bmN0aW9uKGEpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBhKXJldHVybiB0aGlzLmNoaWxkcmVuW2FdO2Zvcih2YXIgYj0wO2I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YisrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2JdO2lmKGMubmFtZT09PWEpcmV0dXJuIGN9fSxkLlhNTC5wcm90b3R5cGUuYWRkQ2hpbGQ9ZnVuY3Rpb24oYSl7YSBpbnN0YW5jZW9mIGQuWE1MJiZ0aGlzLmNoaWxkcmVuLnB1c2goYSl9LGQuWE1MLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbihhKXt2YXIgYj0tMTtpZihcInN0cmluZ1wiPT10eXBlb2YgYSl7Zm9yKHZhciBjPTA7Yzx0aGlzLmNoaWxkcmVuLmxlbmd0aDtjKyspaWYodGhpcy5jaGlsZHJlbltjXS5uYW1lPT09YSl7Yj1jO2JyZWFrfX1lbHNlIGI9YTstMSE9PWImJnRoaXMuY2hpbGRyZW4uc3BsaWNlKGIsMSl9LGQuWE1MLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVDb3VudD1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpLmxlbmd0aH0sZC5YTUwucHJvdG90eXBlLmxpc3RBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcyl9LGQuWE1MLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGU9ZnVuY3Rpb24oYSl7cmV0dXJuISF0aGlzLmF0dHJpYnV0ZXNbYV19LGQuWE1MLnByb3RvdHlwZS5nZXROdW09ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTnVtYmVyKHRoaXMuYXR0cmlidXRlc1thXSl8fGJ8fDB9LGQuWE1MLnByb3RvdHlwZS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gU3RyaW5nKHRoaXMuYXR0cmlidXRlc1thXSl8fGJ8fG51bGx9LGQuWE1MLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXt0aGlzLmF0dHJpYnV0ZXNbYV0mJih0aGlzLmF0dHJpYnV0ZXNbYV09Yil9LGQuWE1MLnByb3RvdHlwZS5nZXRDb250ZW50PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNvbnRlbnR8fGF8fG51bGx9LGQuWE1MLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKGEpe3RoaXMuY2hpbGRyZW4ubGVuZ3RofHwodGhpcy5jb250ZW50PWEpfSxkLlhNTC5wcm90b3R5cGUuX3NldENvbnQ9ZnVuY3Rpb24oYSl7dmFyIGI7Yj1hLGI9Yi5yZXBsYWNlKC9cXHNcXHMrL2csXCIsXCIpLHRoaXMuY29udGVudD1ifSxkLlhNTC5wcm90b3R5cGUuX3NldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oYSl7dmFyIGI9e30sYz1hLmF0dHJpYnV0ZXM7aWYoYylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXTtiW2Uubm9kZU5hbWVdPWUubm9kZVZhbHVlfXRoaXMuYXR0cmlidXRlcz1ifSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1MTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIE1hdGguaHlwb3QpcmV0dXJuIE1hdGguaHlwb3QuYXBwbHkobnVsbCxhcmd1bWVudHMpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGU9W10sZj0wLGc9MDtnPGQ7ZysrKXt2YXIgaD1hcmd1bWVudHNbZ11cbjtpZigoaD0raCk9PT0xLzB8fGg9PT0tMS8wKXJldHVybiAxLzA7aD1NYXRoLmFicyhoKSxoPmYmJihmPWgpLGVbZ109aH0wPT09ZiYmKGY9MSk7Zm9yKHZhciBpPTAsaj0wLGs9MDtrPGQ7aysrKXt2YXIgbD1lW2tdL2YsbT1sKmwtaixuPWkrbTtqPW4taS1tLGk9bn1yZXR1cm4gTWF0aC5zcXJ0KGkpKmZ9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKTtlLnByb3RvdHlwZS5hYnM9TWF0aC5hYnMsZS5wcm90b3R5cGUuY2VpbD1NYXRoLmNlaWwsZS5wcm90b3R5cGUuY29uc3RyYWluPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29uc3RyYWluXCIsYXJndW1lbnRzKSxNYXRoLm1heChNYXRoLm1pbihhLGMpLGIpfSxlLnByb3RvdHlwZS5kaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImRpc3RcIixhcmd1bWVudHMpLDQ9PT1hcmd1bWVudHMubGVuZ3RoP2QoYXJndW1lbnRzWzJdLWFyZ3VtZW50c1swXSxhcmd1bWVudHNbM10tYXJndW1lbnRzWzFdKTo2PT09YXJndW1lbnRzLmxlbmd0aD9kKGFyZ3VtZW50c1szXS1hcmd1bWVudHNbMF0sYXJndW1lbnRzWzRdLWFyZ3VtZW50c1sxXSxhcmd1bWVudHNbNV0tYXJndW1lbnRzWzJdKTp2b2lkIDB9LGUucHJvdG90eXBlLmV4cD1NYXRoLmV4cCxlLnByb3RvdHlwZS5mbG9vcj1NYXRoLmZsb29yLGUucHJvdG90eXBlLmxlcnA9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsZXJwXCIsYXJndW1lbnRzKSxjKihiLWEpK2F9LGUucHJvdG90eXBlLmxvZz1NYXRoLmxvZyxlLnByb3RvdHlwZS5tYWc9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWFnXCIsYXJndW1lbnRzKSxkKGEsYil9LGUucHJvdG90eXBlLm1hcD1mdW5jdGlvbihhLGIsYyxkLGYsZyl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWFwXCIsYXJndW1lbnRzKTt2YXIgaD0oYS1iKS8oYy1iKSooZi1kKStkO3JldHVybiBnP2Q8Zj90aGlzLmNvbnN0cmFpbihoLGQsZik6dGhpcy5jb25zdHJhaW4oaCxmLGQpOmh9LGUucHJvdG90eXBlLm1heD1mdW5jdGlvbigpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYXhcIixhcmd1bWVudHMpLGFyZ3VtZW50c1swXWluc3RhbmNlb2YgQXJyYXk/TWF0aC5tYXguYXBwbHkobnVsbCxhcmd1bWVudHNbMF0pOk1hdGgubWF4LmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZS5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1pblwiLGFyZ3VtZW50cyksYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBBcnJheT9NYXRoLm1pbi5hcHBseShudWxsLGFyZ3VtZW50c1swXSk6TWF0aC5taW4uYXBwbHkobnVsbCxhcmd1bWVudHMpfSxlLnByb3RvdHlwZS5ub3JtPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibm9ybVwiLGFyZ3VtZW50cyksdGhpcy5tYXAoYSxiLGMsMCwxKX0sZS5wcm90b3R5cGUucG93PU1hdGgucG93LGUucHJvdG90eXBlLnJvdW5kPU1hdGgucm91bmQsZS5wcm90b3R5cGUuc3E9ZnVuY3Rpb24oYSl7cmV0dXJuIGEqYX0sZS5wcm90b3R5cGUuc3FydD1NYXRoLnNxcnQsYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmNyZWF0ZVZlY3Rvcj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBkP25ldyBkLlZlY3Rvcih0aGlzLGFyZ3VtZW50cyk6bmV3IGQuVmVjdG9yKGEsYixjKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZCxlPWEoXCIuLi9jb3JlL21haW5cIiksZj00LGc9MTw8ZixoPTgsaT0xPDxoLGo9NDA5NSxrPTQsbD0uNSxtPWZ1bmN0aW9uKGEpe3JldHVybi41KigxLU1hdGguY29zKGEqTWF0aC5QSSkpfTtlLnByb3RvdHlwZS5ub2lzZT1mdW5jdGlvbihhLGIsYyl7aWYoYj1ifHwwLGM9Y3x8MCxudWxsPT1kKXtkPW5ldyBBcnJheShqKzEpO2Zvcih2YXIgZT0wO2U8aisxO2UrKylkW2VdPU1hdGgucmFuZG9tKCl9YTwwJiYoYT0tYSksYjwwJiYoYj0tYiksYzwwJiYoYz0tYyk7Zm9yKHZhciBuLG8scCxxLHIscz1NYXRoLmZsb29yKGEpLHQ9TWF0aC5mbG9vcihiKSx1PU1hdGguZmxvb3IoYyksdj1hLXMsdz1iLXQseD1jLXUseT0wLHo9LjUsQT0wO0E8aztBKyspe3ZhciBCPXMrKHQ8PGYpKyh1PDxoKTtuPW0odiksbz1tKHcpLHA9ZFtCJmpdLHArPW4qKGRbQisxJmpdLXApLHE9ZFtCK2cmal0scSs9biooZFtCK2crMSZqXS1xKSxwKz1vKihxLXApLEIrPWkscT1kW0Imal0scSs9biooZFtCKzEmal0tcSkscj1kW0IrZyZqXSxyKz1uKihkW0IrZysxJmpdLXIpLHErPW8qKHItcSkscCs9bSh4KSoocS1wKSx5Kz1wKnoseio9bCxzPDw9MSx2Kj0yLHQ8PD0xLHcqPTIsdTw8PTEseCo9Mix2Pj0xJiYocysrLHYtLSksdz49MSYmKHQrKyx3LS0pLHg+PTEmJih1KysseC0tKX1yZXR1cm4geX0sZS5wcm90b3R5cGUubm9pc2VEZXRhaWw9ZnVuY3Rpb24oYSxiKXthPjAmJihrPWEpLGI+MCYmKGw9Yil9LGUucHJvdG90eXBlLm5vaXNlU2VlZD1mdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbigpe3ZhciBhLGIsYz00Mjk0OTY3Mjk2LGQ9MTY2NDUyNSxlPTEwMTM5MDQyMjM7cmV0dXJue3NldFNlZWQ6ZnVuY3Rpb24oZCl7Yj1hPShudWxsPT1kP01hdGgucmFuZG9tKCkqYzpkKT4+PjB9LGdldFNlZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0scmFuZDpmdW5jdGlvbigpe3JldHVybihiPShkKmIrZSklYykvY319fSgpO2Iuc2V0U2VlZChhKSxkPW5ldyBBcnJheShqKzEpO2Zvcih2YXIgYz0wO2M8aisxO2MrKylkW2NdPWIucmFuZCgpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1NDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5WZWN0b3I9ZnVuY3Rpb24oKXt2YXIgYSxiLGM7YXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkPyh0aGlzLnA1PWFyZ3VtZW50c1swXSxhPWFyZ3VtZW50c1sxXVswXXx8MCxiPWFyZ3VtZW50c1sxXVsxXXx8MCxjPWFyZ3VtZW50c1sxXVsyXXx8MCk6KGE9YXJndW1lbnRzWzBdfHwwLGI9YXJndW1lbnRzWzFdfHwwLGM9YXJndW1lbnRzWzJdfHwwKSx0aGlzLng9YSx0aGlzLnk9Yix0aGlzLno9Y30sZC5WZWN0b3IucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJwNS5WZWN0b3IgT2JqZWN0IDogW1wiK3RoaXMueCtcIiwgXCIrdGhpcy55K1wiLCBcIit0aGlzLnorXCJdXCJ9LGQuVmVjdG9yLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KHRoaXMueD1hLnh8fDAsdGhpcy55PWEueXx8MCx0aGlzLno9YS56fHwwLHRoaXMpOmEgaW5zdGFuY2VvZiBBcnJheT8odGhpcy54PWFbMF18fDAsdGhpcy55PWFbMV18fDAsdGhpcy56PWFbMl18fDAsdGhpcyk6KHRoaXMueD1hfHwwLHRoaXMueT1ifHwwLHRoaXMuej1jfHwwLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnA1P25ldyBkLlZlY3Rvcih0aGlzLnA1LFt0aGlzLngsdGhpcy55LHRoaXMuel0pOm5ldyBkLlZlY3Rvcih0aGlzLngsdGhpcy55LHRoaXMueil9LGQuVmVjdG9yLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KHRoaXMueCs9YS54fHwwLHRoaXMueSs9YS55fHwwLHRoaXMueis9YS56fHwwLHRoaXMpOmEgaW5zdGFuY2VvZiBBcnJheT8odGhpcy54Kz1hWzBdfHwwLHRoaXMueSs9YVsxXXx8MCx0aGlzLnorPWFbMl18fDAsdGhpcyk6KHRoaXMueCs9YXx8MCx0aGlzLnkrPWJ8fDAsdGhpcy56Kz1jfHwwLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyh0aGlzLngtPWEueHx8MCx0aGlzLnktPWEueXx8MCx0aGlzLnotPWEuenx8MCx0aGlzKTphIGluc3RhbmNlb2YgQXJyYXk/KHRoaXMueC09YVswXXx8MCx0aGlzLnktPWFbMV18fDAsdGhpcy56LT1hWzJdfHwwLHRoaXMpOih0aGlzLngtPWF8fDAsdGhpcy55LT1ifHwwLHRoaXMuei09Y3x8MCx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLm11bHQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGEmJmlzRmluaXRlKGEpPyh0aGlzLngqPWEsdGhpcy55Kj1hLHRoaXMueio9YSx0aGlzKTooY29uc29sZS53YXJuKFwicDUuVmVjdG9yLnByb3RvdHlwZS5tdWx0OlwiLFwibiBpcyB1bmRlZmluZWQgb3Igbm90IGEgZmluaXRlIG51bWJlclwiKSx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLmRpdj1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYSYmaXNGaW5pdGUoYSk/MD09PWE/KGNvbnNvbGUud2FybihcInA1LlZlY3Rvci5wcm90b3R5cGUuZGl2OlwiLFwiZGl2aWRlIGJ5IDBcIiksdGhpcyk6KHRoaXMueC89YSx0aGlzLnkvPWEsdGhpcy56Lz1hLHRoaXMpOihjb25zb2xlLndhcm4oXCJwNS5WZWN0b3IucHJvdG90eXBlLmRpdjpcIixcIm4gaXMgdW5kZWZpbmVkIG9yIG5vdCBhIGZpbml0ZSBudW1iZXJcIiksdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5tYWc9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMubWFnU3EoKSl9LGQuVmVjdG9yLnByb3RvdHlwZS5tYWdTcT1mdW5jdGlvbigpe3ZhciBhPXRoaXMueCxiPXRoaXMueSxjPXRoaXMuejtyZXR1cm4gYSphK2IqYitjKmN9LGQuVmVjdG9yLnByb3RvdHlwZS5kb3Q9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/dGhpcy5kb3QoYS54LGEueSxhLnopOnRoaXMueCooYXx8MCkrdGhpcy55KihifHwwKSt0aGlzLnoqKGN8fDApfSxkLlZlY3Rvci5wcm90b3R5cGUuY3Jvc3M9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy55KmEuei10aGlzLnoqYS55LGM9dGhpcy56KmEueC10aGlzLngqYS56LGU9dGhpcy54KmEueS10aGlzLnkqYS54O3JldHVybiB0aGlzLnA1P25ldyBkLlZlY3Rvcih0aGlzLnA1LFtiLGMsZV0pOm5ldyBkLlZlY3RvcihiLGMsZSl9LGQuVmVjdG9yLnByb3RvdHlwZS5kaXN0PWZ1bmN0aW9uKGEpe3JldHVybiBhLmNvcHkoKS5zdWIodGhpcykubWFnKCl9LGQuVmVjdG9yLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1hZygpO3JldHVybiAwIT09YSYmdGhpcy5tdWx0KDEvYSksdGhpc30sZC5WZWN0b3IucHJvdG90eXBlLmxpbWl0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubWFnU3EoKTtyZXR1cm4gYj5hKmEmJnRoaXMuZGl2KE1hdGguc3FydChiKSkubXVsdChhKSx0aGlzfSxkLlZlY3Rvci5wcm90b3R5cGUuc2V0TWFnPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHQoYSl9LGQuVmVjdG9yLnByb3RvdHlwZS5oZWFkaW5nPWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5hdGFuMih0aGlzLnksdGhpcy54KTtyZXR1cm4gdGhpcy5wNT90aGlzLnA1Ll9mcm9tUmFkaWFucyhhKTphfSxkLlZlY3Rvci5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaGVhZGluZygpK2E7dGhpcy5wNSYmKGI9dGhpcy5wNS5fdG9SYWRpYW5zKGIpKTt2YXIgYz10aGlzLm1hZygpO3JldHVybiB0aGlzLng9TWF0aC5jb3MoYikqYyx0aGlzLnk9TWF0aC5zaW4oYikqYyx0aGlzfSxkLlZlY3Rvci5wcm90b3R5cGUuYW5nbGVCZXR3ZWVuPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZG90KGEpLyh0aGlzLm1hZygpKmEubWFnKCkpLGM9TWF0aC5hY29zKE1hdGgubWluKDEsTWF0aC5tYXgoLTEsYikpKTtyZXR1cm4gdGhpcy5wNT90aGlzLnA1Ll9mcm9tUmFkaWFucyhjKTpjfSxkLlZlY3Rvci5wcm90b3R5cGUubGVycD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yP3RoaXMubGVycChhLngsYS55LGEueixiKToodGhpcy54Kz0oYS10aGlzLngpKmV8fDAsdGhpcy55Kz0oYi10aGlzLnkpKmV8fDAsdGhpcy56Kz0oYy10aGlzLnopKmV8fDAsdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5hcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLnh8fDAsdGhpcy55fHwwLHRoaXMuenx8MF19LGQuVmVjdG9yLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlLGYsZztyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyhlPWEueHx8MCxmPWEueXx8MCxnPWEuenx8MCk6YSBpbnN0YW5jZW9mIEFycmF5PyhlPWFbMF18fDAsZj1hWzFdfHwwLGc9YVsyXXx8MCk6KGU9YXx8MCxmPWJ8fDAsZz1jfHwwKSx0aGlzLng9PT1lJiZ0aGlzLnk9PT1mJiZ0aGlzLno9PT1nfSxkLlZlY3Rvci5mcm9tQW5nbGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9MSksbmV3IGQuVmVjdG9yKGIqTWF0aC5jb3MoYSksYipNYXRoLnNpbihhKSwwKX0sZC5WZWN0b3IuZnJvbUFuZ2xlcz1mdW5jdGlvbihhLGIsYyl7dm9pZCAwPT09YyYmKGM9MSk7dmFyIGU9TWF0aC5jb3MoYiksZj1NYXRoLnNpbihiKSxnPU1hdGguY29zKGEpLGg9TWF0aC5zaW4oYSk7cmV0dXJuIG5ldyBkLlZlY3RvcihjKmgqZiwtYypnLGMqaCplKX0sZC5WZWN0b3IucmFuZG9tMkQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tQW5nbGUoTWF0aC5yYW5kb20oKSplLlRXT19QSSl9LGQuVmVjdG9yLnJhbmRvbTNEPWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5yYW5kb20oKSplLlRXT19QSSxiPTIqTWF0aC5yYW5kb20oKS0xLGM9TWF0aC5zcXJ0KDEtYipiKSxmPWMqTWF0aC5jb3MoYSksZz1jKk1hdGguc2luKGEpO3JldHVybiBuZXcgZC5WZWN0b3IoZixnLGIpfSxkLlZlY3Rvci5hZGQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP2Muc2V0KGEpOmM9YS5jb3B5KCksYy5hZGQoYiksY30sZC5WZWN0b3Iuc3ViPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz9jLnNldChhKTpjPWEuY29weSgpLGMuc3ViKGIpLGN9LGQuVmVjdG9yLm11bHQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP2Muc2V0KGEpOmM9YS5jb3B5KCksYy5tdWx0KGIpLGN9LGQuVmVjdG9yLmRpdj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/Yy5zZXQoYSk6Yz1hLmNvcHkoKSxjLmRpdihiKSxjfSxkLlZlY3Rvci5kb3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5kb3QoYil9LGQuVmVjdG9yLmNyb3NzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuY3Jvc3MoYil9LGQuVmVjdG9yLmRpc3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5kaXN0KGIpfSxkLlZlY3Rvci5sZXJwPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBkP2Quc2V0KGEpOmQ9YS5jb3B5KCksZC5sZXJwKGIsYyksZH0sZC5WZWN0b3IubWFnPWZ1bmN0aW9uKGEpe3ZhciBiPWEueCxjPWEueSxkPWEueixlPWIqYitjKmMrZCpkO3JldHVybiBNYXRoLnNxcnQoZSl9LGIuZXhwb3J0cz1kLlZlY3Rvcn0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9ITEsZj0hMSxnPTAsaD1mdW5jdGlvbigpe3ZhciBhLGIsYz00Mjk0OTY3Mjk2LGQ9MTY2NDUyNSxlPTEwMTM5MDQyMjM7cmV0dXJue3NldFNlZWQ6ZnVuY3Rpb24oZCl7Yj1hPShudWxsPT1kP01hdGgucmFuZG9tKCkqYzpkKT4+PjB9LGdldFNlZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0scmFuZDpmdW5jdGlvbigpe3JldHVybihiPShkKmIrZSklYykvY319fSgpO2QucHJvdG90eXBlLnJhbmRvbVNlZWQ9ZnVuY3Rpb24oYSl7aC5zZXRTZWVkKGEpLGU9ITAsZj0hMX0sZC5wcm90b3R5cGUucmFuZG9tPWZ1bmN0aW9uKGEsYil7dmFyIGM7aWYoYz1lP2gucmFuZCgpOk1hdGgucmFuZG9tKCksdm9pZCAwPT09YSlyZXR1cm4gYztpZih2b2lkIDA9PT1iKXJldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YVtNYXRoLmZsb29yKGMqYS5sZW5ndGgpXTpjKmE7aWYoYT5iKXt2YXIgZD1hO2E9YixiPWR9cmV0dXJuIGMqKGItYSkrYX0sZC5wcm90b3R5cGUucmFuZG9tR2F1c3NpYW49ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsaDtpZihmKWM9ZyxmPSExO2Vsc2V7ZG97ZD10aGlzLnJhbmRvbSgyKS0xLGU9dGhpcy5yYW5kb20oMiktMSxoPWQqZCtlKmV9d2hpbGUoaD49MSk7aD1NYXRoLnNxcnQoLTIqTWF0aC5sb2coaCkvaCksYz1kKmgsZz1lKmgsZj0hMH12YXIgaT1hfHwwO3JldHVybiBjKihifHwxKStpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5wcm90b3R5cGUuX2FuZ2xlTW9kZT1lLlJBRElBTlMsZC5wcm90b3R5cGUuYWNvcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hY29zKGEpKX0sZC5wcm90b3R5cGUuYXNpbj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hc2luKGEpKX0sZC5wcm90b3R5cGUuYXRhbj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hdGFuKGEpKX0sZC5wcm90b3R5cGUuYXRhbjI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hdGFuMihhLGIpKX0sZC5wcm90b3R5cGUuY29zPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLmNvcyh0aGlzLl90b1JhZGlhbnMoYSkpfSxkLnByb3RvdHlwZS5zaW49ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguc2luKHRoaXMuX3RvUmFkaWFucyhhKSl9LGQucHJvdG90eXBlLnRhbj1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC50YW4odGhpcy5fdG9SYWRpYW5zKGEpKX0sZC5wcm90b3R5cGUuZGVncmVlcz1mdW5jdGlvbihhKXtyZXR1cm4gYSplLlJBRF9UT19ERUd9LGQucHJvdG90eXBlLnJhZGlhbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEqZS5ERUdfVE9fUkFEfSxkLnByb3RvdHlwZS5hbmdsZU1vZGU9ZnVuY3Rpb24oYSl7YSE9PWUuREVHUkVFUyYmYSE9PWUuUkFESUFOU3x8KHRoaXMuX2FuZ2xlTW9kZT1hKX0sZC5wcm90b3R5cGUuX3RvUmFkaWFucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYW5nbGVNb2RlPT09ZS5ERUdSRUVTP2EqZS5ERUdfVE9fUkFEOmF9LGQucHJvdG90eXBlLl90b0RlZ3JlZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2FuZ2xlTW9kZT09PWUuUkFESUFOUz9hKmUuUkFEX1RPX0RFRzphfSxkLnByb3RvdHlwZS5fZnJvbVJhZGlhbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2FuZ2xlTW9kZT09PWUuREVHUkVFUz9hKmUuUkFEX1RPX0RFRzphfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLnRleHRBbGlnbj1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0QWxpZ25cIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRBbGlnbi5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0TGVhZGluZz1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dExlYWRpbmdcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRMZWFkaW5nLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRTaXplPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0U2l6ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dFNpemUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dFN0eWxlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0U3R5bGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRTdHlsZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0V2lkdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRXaWR0aFwiLGFyZ3VtZW50cyksMD09PWEubGVuZ3RoPzA6dGhpcy5fcmVuZGVyZXIudGV4dFdpZHRoLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRBc2NlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dEFzY2VudFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dEFzY2VudCgpfSxkLnByb3RvdHlwZS50ZXh0RGVzY2VudD1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0RGVzY2VudFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dERlc2NlbnQoKX0sZC5wcm90b3R5cGUuX3VwZGF0ZVRleHRNZXRyaWNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl91cGRhdGVUZXh0TWV0cmljcygpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1ODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIiksZj1hKFwib3BlbnR5cGUuanNcIik7YShcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxkLnByb3RvdHlwZS5sb2FkRm9udD1mdW5jdGlvbihhLGIsYyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZEZvbnRcIixhcmd1bWVudHMpO3ZhciBlPW5ldyBkLkZvbnQodGhpcyksZz10aGlzO3JldHVybiBmLmxvYWQoYSxmdW5jdGlvbihmLGgpe2lmKGYpcmV0dXJuIHZvaWQgMCE9PWM/YyhmKTooZC5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDQsYSksdm9pZCBjb25zb2xlLmVycm9yKGYsYSkpO2UuZm9udD1oLHZvaWQgMCE9PWImJmIoZSksZy5fZGVjcmVtZW50UHJlbG9hZCgpO3ZhciBpLGosaz1bXCJ0dGZcIixcIm90ZlwiLFwid29mZlwiLFwid29mZjJcIl0sbD1hLnNwbGl0KFwiXFxcXFwiKS5wb3AoKS5zcGxpdChcIi9cIikucG9wKCksbT1sLmxhc3RJbmRleE9mKFwiLlwiKSxuPW08MT9udWxsOmwuc3Vic3RyKG0rMSk7ay5pbmRleE9mKG4pPi0xJiYoaT1sLnN1YnN0cigwLG0pLGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpLGouYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcXG5AZm9udC1mYWNlIHtcXG5mb250LWZhbWlseTogXCIraStcIjtcXG5zcmM6IHVybChcIithK1wiKTtcXG59XFxuXCIpKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGopKX0pLGV9LGQucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvRmlsbHx8dGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlP3RoaXMuX3JlbmRlcmVyLnRleHQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTp0aGlzfSxkLnByb3RvdHlwZS50ZXh0Rm9udD1mdW5jdGlvbihhLGIpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRGb250XCIsYXJndW1lbnRzKSxhcmd1bWVudHMubGVuZ3RoKXtpZighYSl0aHJvdyBuZXcgRXJyb3IoXCJudWxsIGZvbnQgcGFzc2VkIHRvIHRleHRGb250XCIpO3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfdGV4dEZvbnRcIixhKSxiJiYodGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX3RleHRTaXplXCIsYiksdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX3RleHRMZWFkaW5nXCIsYiplLl9ERUZBVUxUX0xFQURNVUxUKSksdGhpcy5fcmVuZGVyZXIuX2FwcGx5VGV4dFByb3BlcnRpZXMoKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3RleHRGb250fSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjQsXCJvcGVudHlwZS5qc1wiOjEwfV0sNTk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7Zm9yKHZhciBjPWgoYix7c2FtcGxlRmFjdG9yOi4xLHNpbXBsaWZ5VGhyZXNob2xkOjB9KSxkPW4oYSwwLDEpLGY9ZC8oZCpjLnNhbXBsZUZhY3RvciksZz1bXSxpPTA7aTxkO2krPWYpZy5wdXNoKG4oYSxpKSk7cmV0dXJuIGMuc2ltcGxpZnlUaHJlc2hvbGQmJmUoZyxjLnNpbXBsaWZ5VGhyZXNob2xkKSxnfWZ1bmN0aW9uIGUoYSxiKXtiPXZvaWQgMD09PWI/MDpiO2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGgtMTthLmxlbmd0aD4zJiZkPj0wOy0tZClqKGkoYSxkLTEpLGkoYSxkKSxpKGEsZCsxKSxiKSYmKGEuc3BsaWNlKGQlYS5sZW5ndGgsMSksYysrKTtyZXR1cm4gY31mdW5jdGlvbiBmKGEpe2Zvcih2YXIgYixjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrKylcIk1cIj09PWFbZF0udHlwZSYmKGImJmMucHVzaChiKSxiPVtdKSxiLnB1c2goZyhhW2RdKSk7cmV0dXJuIGMucHVzaChiKSxjfWZ1bmN0aW9uIGcoYSl7dmFyIGI9W2EudHlwZV07cmV0dXJuXCJNXCI9PT1hLnR5cGV8fFwiTFwiPT09YS50eXBlP2IucHVzaChhLngsYS55KTpcIkNcIj09PWEudHlwZT9iLnB1c2goYS54MSxhLnkxLGEueDIsYS55MixhLngsYS55KTpcIlFcIj09PWEudHlwZSYmYi5wdXNoKGEueDEsYS55MSxhLngsYS55KSxifWZ1bmN0aW9uIGgoYSxiKXtpZihcIm9iamVjdFwiIT10eXBlb2YgYSlhPWI7ZWxzZSBmb3IodmFyIGMgaW4gYil2b2lkIDA9PT1hW2NdJiYoYVtjXT1iW2NdKTtyZXR1cm4gYX1mdW5jdGlvbiBpKGEsYil7dmFyIGM9YS5sZW5ndGg7cmV0dXJuIGFbYjwwP2IlYytjOmIlY119ZnVuY3Rpb24gaihhLGIsYyxkKXtpZighZClyZXR1cm4gMD09PWsoYSxiLGMpO3ZvaWQgMD09PWoudG1wUG9pbnQxJiYoai50bXBQb2ludDE9W10sai50bXBQb2ludDI9W10pO3ZhciBlPWoudG1wUG9pbnQxLGY9ai50bXBQb2ludDI7ZS54PWIueC1hLngsZS55PWIueS1hLnksZi54PWMueC1iLngsZi55PWMueS1iLnk7dmFyIGc9ZS54KmYueCtlLnkqZi55LGg9TWF0aC5zcXJ0KGUueCplLngrZS55KmUueSksaT1NYXRoLnNxcnQoZi54KmYueCtmLnkqZi55KTtyZXR1cm4gTWF0aC5hY29zKGcvKGgqaSkpPGR9ZnVuY3Rpb24gayhhLGIsYyl7cmV0dXJuKGJbMF0tYVswXSkqKGNbMV0tYVsxXSktKGNbMF0tYVswXSkqKGJbMV0tYVsxXSl9ZnVuY3Rpb24gbChhLGIsYyxkLGUsZixnLGgsaSl7dmFyIGo9MS1pLGs9TWF0aC5wb3coaiwzKSxsPU1hdGgucG93KGosMiksbT1pKmksbj1tKmksbz1rKmErMypsKmkqYyszKmoqaSppKmUrbipnLHA9aypiKzMqbCppKmQrMypqKmkqaSpmK24qaCxxPWErMippKihjLWEpK20qKGUtMipjK2EpLHI9YisyKmkqKGQtYikrbSooZi0yKmQrYikscz1jKzIqaSooZS1jKSttKihnLTIqZStjKSx0PWQrMippKihmLWQpK20qKGgtMipmK2QpLHU9aiphK2kqYyx2PWoqYitpKmQsdz1qKmUraSpnLHg9aipmK2kqaCx5PTkwLTE4MCpNYXRoLmF0YW4yKHEtcyxyLXQpL01hdGguUEk7cmV0dXJuKHE+c3x8cjx0KSYmKHkrPTE4MCkse3g6byx5OnAsbTp7eDpxLHk6cn0sbjp7eDpzLHk6dH0sc3RhcnQ6e3g6dSx5OnZ9LGVuZDp7eDp3LHk6eH0sYWxwaGE6eX19ZnVuY3Rpb24gbShhLGIsYyxkLGUsZixnLGgsaSl7cmV0dXJuIG51bGw9PWk/dShhLGIsYyxkLGUsZixnLGgpOmwoYSxiLGMsZCxlLGYsZyxoLHYoYSxiLGMsZCxlLGYsZyxoLGkpKX1mdW5jdGlvbiBuKGEsYixjKXthPXAoYSk7Zm9yKHZhciBkLGUsZixnLGgsaT1cIlwiLGo9e30saz0wLG49MCxvPWEubGVuZ3RoO248bztuKyspe2lmKGY9YVtuXSxcIk1cIj09PWZbMF0pZD0rZlsxXSxlPStmWzJdO2Vsc2V7aWYoZz1tKGQsZSxmWzFdLGZbMl0sZlszXSxmWzRdLGZbNV0sZls2XSksaytnPmImJiFjKXJldHVybiBoPW0oZCxlLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSxmWzZdLGItaykse3g6aC54LHk6aC55LGFscGhhOmguYWxwaGF9O2srPWcsZD0rZls1XSxlPStmWzZdfWkrPWYuc2hpZnQoKStmfXJldHVybiBqLmVuZD1pLGg9Yz9rOmwoZCxlLGZbMF0sZlsxXSxmWzJdLGZbM10sZls0XSxmWzVdLDEpLGguYWxwaGEmJihoPXt4OmgueCx5OmgueSxhbHBoYTpoLmFscGhhfSksaH1mdW5jdGlvbiBvKGEpe3ZhciBiPVtdLGM9MCxkPTAsZT0wLGY9MCxnPTA7aWYoIWEpcmV0dXJuIGI7XCJNXCI9PT1hWzBdWzBdJiYoYz0rYVswXVsxXSxkPSthWzBdWzJdLGU9YyxmPWQsZysrLGJbMF09W1wiTVwiLGMsZF0pO2Zvcih2YXIgaCxpLGosaz0zPT09YS5sZW5ndGgmJlwiTVwiPT09YVswXVswXSYmXCJSXCI9PT1hWzFdWzBdLnRvVXBwZXJDYXNlKCkmJlwiWlwiPT09YVsyXVswXS50b1VwcGVyQ2FzZSgpLGw9ZyxtPWEubGVuZ3RoO2w8bTtsKyspe2lmKGIucHVzaChpPVtdKSxqPWFbbF0salswXSE9PVN0cmluZy5wcm90b3R5cGUudG9VcHBlckNhc2UuY2FsbChqWzBdKSlzd2l0Y2goaVswXT1TdHJpbmcucHJvdG90eXBlLnRvVXBwZXJDYXNlLmNhbGwoalswXSksaVswXSl7Y2FzZVwiQVwiOmlbMV09alsxXSxpWzJdPWpbMl0saVszXT1qWzNdLGlbNF09als0XSxpWzVdPWpbNV0saVs2XT0rKGpbNl0rYyksaVs3XT0rKGpbN10rZCk7YnJlYWs7Y2FzZVwiVlwiOmlbMV09K2pbMV0rZDticmVhaztjYXNlXCJIXCI6aVsxXT0ralsxXStjO2JyZWFrO2Nhc2VcIlJcIjpoPVtjLGRdLmNvbmNhdChqLnNsaWNlKDEpKTtmb3IodmFyIG49MixvPWgubGVuZ3RoO248bztuKyspaFtuXT0raFtuXStjLGhbKytuXT0raFtuXStkO2IucG9wKCksYj1iLmNvbmNhdChyKGgsaykpO2JyZWFrO2Nhc2VcIk1cIjplPStqWzFdK2MsZj0ralsyXStkO2JyZWFrO2RlZmF1bHQ6Zm9yKG49MSxvPWoubGVuZ3RoO248bztuKyspaVtuXT0raltuXSsobiUyP2M6ZCl9ZWxzZSBpZihcIlJcIj09PWpbMF0paD1bYyxkXS5jb25jYXQoai5zbGljZSgxKSksYi5wb3AoKSxiPWIuY29uY2F0KHIoaCxrKSksaT1bXCJSXCJdLmNvbmNhdChqLnNsaWNlKC0yKSk7ZWxzZSBmb3IodmFyIHA9MCxxPWoubGVuZ3RoO3A8cTtwKyspaVtwXT1qW3BdO3N3aXRjaChpWzBdKXtjYXNlXCJaXCI6Yz1lLGQ9ZjticmVhaztjYXNlXCJIXCI6Yz1pWzFdO2JyZWFrO2Nhc2VcIlZcIjpkPWlbMV07YnJlYWs7Y2FzZVwiTVwiOmU9aVtpLmxlbmd0aC0yXSxmPWlbaS5sZW5ndGgtMV07YnJlYWs7ZGVmYXVsdDpjPWlbaS5sZW5ndGgtMl0sZD1pW2kubGVuZ3RoLTFdfX1yZXR1cm4gYn1mdW5jdGlvbiBwKGEsYil7dmFyIGMsZD1vKGEpLGU9YiYmbyhiKSxmPXt4OjAseTowLGJ4OjAsYnk6MCxYOjAsWTowLHF4Om51bGwscXk6bnVsbH0sZz17eDowLHk6MCxieDowLGJ5OjAsWDowLFk6MCxxeDpudWxsLHF5Om51bGx9LGg9W10saT1bXSxqPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9e1Q6MSxROjF9O2lmKCFhKXJldHVybltcIkNcIixiLngsYi55LGIueCxiLnksYi54LGIueV07c3dpdGNoKGFbMF1pbiBmfHwoYi5xeD1iLnF5PW51bGwpLGFbMF0pe2Nhc2VcIk1cIjpiLlg9YVsxXSxiLlk9YVsyXTticmVhaztjYXNlXCJBXCI6YT1bXCJDXCJdLmNvbmNhdChxLmFwcGx5KDAsW2IueCxiLnldLmNvbmNhdChhLnNsaWNlKDEpKSkpO2JyZWFrO2Nhc2VcIlNcIjpcIkNcIj09PWN8fFwiU1wiPT09Yz8oZD0yKmIueC1iLmJ4LGU9MipiLnktYi5ieSk6KGQ9Yi54LGU9Yi55KSxhPVtcIkNcIixkLGVdLmNvbmNhdChhLnNsaWNlKDEpKTticmVhaztjYXNlXCJUXCI6XCJRXCI9PT1jfHxcIlRcIj09PWM/KGIucXg9MipiLngtYi5xeCxiLnF5PTIqYi55LWIucXkpOihiLnF4PWIueCxiLnF5PWIueSksYT1bXCJDXCJdLmNvbmNhdCh0KGIueCxiLnksYi5xeCxiLnF5LGFbMV0sYVsyXSkpO2JyZWFrO2Nhc2VcIlFcIjpiLnF4PWFbMV0sYi5xeT1hWzJdLGE9W1wiQ1wiXS5jb25jYXQodChiLngsYi55LGFbMV0sYVsyXSxhWzNdLGFbNF0pKTticmVhaztjYXNlXCJMXCI6YT1bXCJDXCJdLmNvbmNhdChzKGIueCxiLnksYVsxXSxhWzJdKSk7YnJlYWs7Y2FzZVwiSFwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGFbMV0sYi55KSk7YnJlYWs7Y2FzZVwiVlwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGIueCxhWzFdKSk7YnJlYWs7Y2FzZVwiWlwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGIuWCxiLlkpKX1yZXR1cm4gYX0saz1mdW5jdGlvbihhLGIpe2lmKGFbYl0ubGVuZ3RoPjcpe2FbYl0uc2hpZnQoKTtmb3IodmFyIGY9YVtiXTtmLmxlbmd0aDspaFtiXT1cIkFcIixlJiYoaVtiXT1cIkFcIiksYS5zcGxpY2UoYisrLDAsW1wiQ1wiXS5jb25jYXQoZi5zcGxpY2UoMCw2KSkpO2Euc3BsaWNlKGIsMSksYz1NYXRoLm1heChkLmxlbmd0aCxlJiZlLmxlbmd0aHx8MCl9fSxsPWZ1bmN0aW9uKGEsYixmLGcsaCl7YSYmYiYmXCJNXCI9PT1hW2hdWzBdJiZcIk1cIiE9PWJbaF1bMF0mJihiLnNwbGljZShoLDAsW1wiTVwiLGcueCxnLnldKSxmLmJ4PTAsZi5ieT0wLGYueD1hW2hdWzFdLGYueT1hW2hdWzJdLGM9TWF0aC5tYXgoZC5sZW5ndGgsZSYmZS5sZW5ndGh8fDApKX0sbT1cIlwiLG49XCJcIjtjPU1hdGgubWF4KGQubGVuZ3RoLGUmJmUubGVuZ3RofHwwKTtmb3IodmFyIHA9MDtwPGM7cCsrKXtkW3BdJiYobT1kW3BdWzBdKSxcIkNcIiE9PW0mJihoW3BdPW0scCYmKG49aFtwLTFdKSksZFtwXT1qKGRbcF0sZixuKSxcIkFcIiE9PWhbcF0mJlwiQ1wiPT09bSYmKGhbcF09XCJDXCIpLGsoZCxwKSxlJiYoZVtwXSYmKG09ZVtwXVswXSksXCJDXCIhPT1tJiYoaVtwXT1tLHAmJihuPWlbcC0xXSkpLGVbcF09aihlW3BdLGcsbiksXCJBXCIhPT1pW3BdJiZcIkNcIj09PW0mJihpW3BdPVwiQ1wiKSxrKGUscCkpLGwoZCxlLGYsZyxwKSxsKGUsZCxnLGYscCk7dmFyIHI9ZFtwXSx1PWUmJmVbcF0sdj1yLmxlbmd0aCx3PWUmJnUubGVuZ3RoO2YueD1yW3YtMl0sZi55PXJbdi0xXSxmLmJ4PXBhcnNlRmxvYXQoclt2LTRdKXx8Zi54LGYuYnk9cGFyc2VGbG9hdChyW3YtM10pfHxmLnksZy5ieD1lJiYocGFyc2VGbG9hdCh1W3ctNF0pfHxnLngpLGcuYnk9ZSYmKHBhcnNlRmxvYXQodVt3LTNdKXx8Zy55KSxnLng9ZSYmdVt3LTJdLGcueT1lJiZ1W3ctMV19cmV0dXJuIGU/W2QsZV06ZH1mdW5jdGlvbiBxKGEsYixjLGQsZSxmLGcsaCxpLGope3ZhciBrLGwsbSxuLG8scD1NYXRoLlBJLHI9MTIwKnAvMTgwLHM9cC8xODAqKCtlfHwwKSx0PVtdLHU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybnt4OmEqTWF0aC5jb3MoYyktYipNYXRoLnNpbihjKSx5OmEqTWF0aC5zaW4oYykrYipNYXRoLmNvcyhjKX19O2lmKGopaz1qWzBdLGw9alsxXSxtPWpbMl0sbj1qWzNdO2Vsc2V7bz11KGEsYiwtcyksYT1vLngsYj1vLnksbz11KGgsaSwtcyksaD1vLngsaT1vLnk7dmFyIHY9KGEtaCkvMix3PShiLWkpLzIseD12KnYvKGMqYykrdyp3LyhkKmQpO3g+MSYmKHg9TWF0aC5zcXJ0KHgpLGMqPXgsZCo9eCk7dmFyIHk9YypjLHo9ZCpkLEE9KGY9PT1nPy0xOjEpKk1hdGguc3FydChNYXRoLmFicygoeSp6LXkqdyp3LXoqdip2KS8oeSp3Kncreip2KnYpKSk7bT1BKmMqdy9kKyhhK2gpLzIsbj1BKi1kKnYvYysoYitpKS8yLGs9TWF0aC5hc2luKCgoYi1uKS9kKS50b0ZpeGVkKDkpKSxsPU1hdGguYXNpbigoKGktbikvZCkudG9GaXhlZCg5KSksaz1hPG0/cC1rOmssbD1oPG0/cC1sOmwsazwwJiYoaz0yKnArayksbDwwJiYobD0yKnArbCksZyYmaz5sJiYoay09MipwKSwhZyYmbD5rJiYobC09MipwKX12YXIgQj1sLWs7aWYoTWF0aC5hYnMoQik+cil7dmFyIEM9bCxEPWgsRT1pO2w9aytyKihnJiZsPms/MTotMSksaD1tK2MqTWF0aC5jb3MobCksaT1uK2QqTWF0aC5zaW4obCksdD1xKGgsaSxjLGQsZSwwLGcsRCxFLFtsLEMsbSxuXSl9Qj1sLWs7dmFyIEY9TWF0aC5jb3MoayksRz1NYXRoLnNpbihrKSxIPU1hdGguY29zKGwpLEk9TWF0aC5zaW4obCksSj1NYXRoLnRhbihCLzQpLEs9NC8zKmMqSixMPTQvMypkKkosTT1bYSxiXSxOPVthK0sqRyxiLUwqRl0sTz1baCtLKkksaS1MKkhdLFA9W2gsaV07aWYoTlswXT0yKk1bMF0tTlswXSxOWzFdPTIqTVsxXS1OWzFdLGopcmV0dXJuW04sTyxQXS5jb25jYXQodCk7dD1bTixPLFBdLmNvbmNhdCh0KS5qb2luKCkuc3BsaXQoXCIsXCIpO2Zvcih2YXIgUT1bXSxSPTAsUz10Lmxlbmd0aDtSPFM7UisrKVFbUl09UiUyP3UodFtSLTFdLHRbUl0scykueTp1KHRbUl0sdFtSKzFdLHMpLng7cmV0dXJuIFF9ZnVuY3Rpb24gcihhLGIpe2Zvcih2YXIgYz1bXSxkPTAsZT1hLmxlbmd0aDtlLTIqIWI+ZDtkKz0yKXt2YXIgZj1be3g6K2FbZC0yXSx5OithW2QtMV19LHt4OithW2RdLHk6K2FbZCsxXX0se3g6K2FbZCsyXSx5OithW2QrM119LHt4OithW2QrNF0seTorYVtkKzVdfV07Yj9kP2UtND09PWQ/ZlszXT17eDorYVswXSx5OithWzFdfTplLTI9PT1kJiYoZlsyXT17eDorYVswXSx5OithWzFdfSxmWzNdPXt4OithWzJdLHk6K2FbM119KTpmWzBdPXt4OithW2UtMl0seTorYVtlLTFdfTplLTQ9PT1kP2ZbM109ZlsyXTpkfHwoZlswXT17eDorYVtkXSx5OithW2QrMV19KSxjLnB1c2goW1wiQ1wiLCgtZlswXS54KzYqZlsxXS54K2ZbMl0ueCkvNiwoLWZbMF0ueSs2KmZbMV0ueStmWzJdLnkpLzYsKGZbMV0ueCs2KmZbMl0ueC1mWzNdLngpLzYsKGZbMV0ueSs2KmZbMl0ueS1mWzNdLnkpLzYsZlsyXS54LGZbMl0ueV0pfXJldHVybiBjfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuW2EsYixjLGQsYyxkXX1mdW5jdGlvbiB0KGEsYixjLGQsZSxmKXt2YXIgZz0xLzMsaD0yLzM7cmV0dXJuW2cqYStoKmMsZypiK2gqZCxnKmUraCpjLGcqZitoKmQsZSxmXX1mdW5jdGlvbiB1KGEsYixjLGQsZSxmLGcsaCxpKXtudWxsPT1pJiYoaT0xKSxpPWk+MT8xOmk8MD8wOmk7Zm9yKHZhciBqPWkvMixrPTEyLGw9Wy0uMTI1MiwuMTI1MiwtLjM2NzgsLjM2NzgsLS41ODczLC41ODczLC0uNzY5OSwuNzY5OSwtLjkwNDEsLjkwNDEsLS45ODE2LC45ODE2XSxtPTAsbj1bLjI0OTEsLjI0OTEsLjIzMzUsLjIzMzUsLjIwMzIsLjIwMzIsLjE2MDEsLjE2MDEsLjEwNjksLjEwNjksLjA0NzIsLjA0NzJdLG89MDtvPGs7bysrKXt2YXIgcD1qKmxbb10raixxPXcocCxhLGMsZSxnKSxyPXcocCxiLGQsZixoKSxzPXEqcStyKnI7bSs9bltvXSpNYXRoLnNxcnQocyl9cmV0dXJuIGoqbX1mdW5jdGlvbiB2KGEsYixjLGQsZSxmLGcsaCxpKXtpZighKGk8MHx8dShhLGIsYyxkLGUsZixnLGgpPGkpKXt2YXIgaixrPTEsbD1rLzIsbT1rLWwsbj0uMDE7Zm9yKGo9dShhLGIsYyxkLGUsZixnLGgsbSk7TWF0aC5hYnMoai1pKT5uOylsLz0yLG0rPShqPGk/MTotMSkqbCxqPXUoYSxiLGMsZCxlLGYsZyxoLG0pO3JldHVybiBtfX1mdW5jdGlvbiB3KGEsYixjLGQsZSl7cmV0dXJuIGEqKGEqKC0zKmIrOSpjLTkqZCszKmUpKzYqYi0xMipjKzYqZCktMypiKzMqY31mdW5jdGlvbiB4KCl7Zm9yKHZhciBhPVwiXCIsYj1hcmd1bWVudHMubGVuZ3RoLTE7Yj49MDstLWIpe3ZhciBjPWFyZ3VtZW50c1tiXTthKz1jPT09T2JqZWN0KGMpP0pTT04uc3RyaW5naWZ5KGMpOmN9cmV0dXJuIGF9dmFyIHk9YShcIi4uL2NvcmUvbWFpblwiKSx6PWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTt5LkZvbnQ9ZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnQ9YSx0aGlzLmNhY2hlPXt9LHRoaXMuZm9udD12b2lkIDB9LHkuRm9udC5wcm90b3R5cGUubGlzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIm5vdCB5ZXQgaW1wbGVtZW50ZWRcIil9LHkuRm9udC5wcm90b3R5cGUudGV4dEJvdW5kcz1mdW5jdGlvbihhLGIsYyxkLGUpe2I9dm9pZCAwIT09Yj9iOjAsYz12b2lkIDAhPT1jP2M6MCxkPWR8fHRoaXMucGFyZW50Ll9yZW5kZXJlci5fdGV4dFNpemU7dmFyIGY9ZSYmZS5yZW5kZXJlciYmZS5yZW5kZXJlci5fcEluc3R8fHRoaXMucGFyZW50LGc9Zi5fcmVuZGVyZXIsaD1nLl90ZXh0QWxpZ258fHouTEVGVCxpPWcuX3RleHRCYXNlbGluZXx8ei5CQVNFTElORSxqPXgoXCJ0ZXh0Qm91bmRzXCIsYSxiLGMsZCxoLGkpLGs9dGhpcy5jYWNoZVtqXTtpZighayl7dmFyIGwsbSxuLG8scCxxPVtdLHI9W10scz10aGlzLl9zY2FsZShkKTt0aGlzLmZvbnQuZm9yRWFjaEdseXBoKGEsYixjLGQsZSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1hLmdldE1ldHJpY3MoKTtxLnB1c2goYitlLnhNaW4qcykscS5wdXNoKGIrZS54TWF4KnMpLHIucHVzaChjKy1lLnlNaW4qcyksci5wdXNoKGMrLWUueU1heCpzKX0pLGw9TWF0aC5taW4uYXBwbHkobnVsbCxxKSxtPU1hdGgubWluLmFwcGx5KG51bGwsciksbj1NYXRoLm1heC5hcHBseShudWxsLHEpLG89TWF0aC5tYXguYXBwbHkobnVsbCxyKSxrPXt4OmwseTptLGg6by1tLHc6bi1sLGFkdmFuY2U6bC1ifSxwPXRoaXMuX2hhbmRsZUFsaWdubWVudChnLGEsay54LGsueSxrLncray5hZHZhbmNlKSxrLng9cC54LGsueT1wLnksdGhpcy5jYWNoZVt4KFwidGV4dEJvdW5kc1wiLGEsYixjLGQsaCxpKV09a31yZXR1cm4ga30seS5Gb250LnByb3RvdHlwZS50ZXh0VG9Qb2ludHM9ZnVuY3Rpb24oYSxiLGMsZSxnKXtmdW5jdGlvbiBoKGIpe3JldHVybiBrW2JdLm5hbWUmJlwic3BhY2VcIj09PWtbYl0ubmFtZXx8YS5sZW5ndGg9PT1rLmxlbmd0aCYmXCIgXCI9PT1hW2JdfHxrW2JdLmluZGV4JiYzPT09a1tiXS5pbmRleH12YXIgaT0wLGo9W10saz10aGlzLl9nZXRHbHlwaHMoYSk7ZT1lfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIuX3RleHRTaXplO2Zvcih2YXIgbD0wO2w8ay5sZW5ndGg7bCsrKXtpZighaChsKSlmb3IodmFyIG09a1tsXS5nZXRQYXRoKGIsYyxlKSxuPWYobS5jb21tYW5kcyksbz0wO288bi5sZW5ndGg7bysrKWZvcih2YXIgcD1kKG5bb10sZykscT0wO3E8cC5sZW5ndGg7cSsrKXBbcV0ueCs9aSxqLnB1c2gocFtxXSk7aSs9a1tsXS5hZHZhbmNlV2lkdGgqdGhpcy5fc2NhbGUoZSl9cmV0dXJuIGp9LHkuRm9udC5wcm90b3R5cGUuX2dldEdseXBocz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5mb250LnN0cmluZ1RvR2x5cGhzKGEpfSx5LkZvbnQucHJvdG90eXBlLl9nZXRQYXRoPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWQmJmQucmVuZGVyZXImJmQucmVuZGVyZXIuX3BJbnN0fHx0aGlzLnBhcmVudCxmPWUuX3JlbmRlcmVyLGc9dGhpcy5faGFuZGxlQWxpZ25tZW50KGYsYSxiLGMpO3JldHVybiB0aGlzLmZvbnQuZ2V0UGF0aChhLGcueCxnLnksZi5fdGV4dFNpemUsZCl9LHkuRm9udC5wcm90b3R5cGUuX2dldFBhdGhEYXRhPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPTM7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGEmJmFyZ3VtZW50cy5sZW5ndGg+Mj9hPXRoaXMuX2dldFBhdGgoYSxiLGMsZCk6XCJvYmplY3RcIj09dHlwZW9mIGImJihkPWIpLGQmJlwibnVtYmVyXCI9PXR5cGVvZiBkLmRlY2ltYWxzJiYoZT1kLmRlY2ltYWxzKSxhLnRvUGF0aERhdGEoZSl9LHkuRm9udC5wcm90b3R5cGUuX2dldFNWRz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0zO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhJiZhcmd1bWVudHMubGVuZ3RoPjI/YT10aGlzLl9nZXRQYXRoKGEsYixjLGQpOlwib2JqZWN0XCI9PXR5cGVvZiBiJiYoZD1iKSxkJiYoXCJudW1iZXJcIj09dHlwZW9mIGQuZGVjaW1hbHMmJihlPWQuZGVjaW1hbHMpLFwibnVtYmVyXCI9PXR5cGVvZiBkLnN0cm9rZVdpZHRoJiYoYS5zdHJva2VXaWR0aD1kLnN0cm9rZVdpZHRoKSx2b2lkIDAhPT1kLmZpbGwmJihhLmZpbGw9ZC5maWxsKSx2b2lkIDAhPT1kLnN0cm9rZSYmKGEuc3Ryb2tlPWQuc3Ryb2tlKSksYS50b1NWRyhlKX0seS5Gb250LnByb3RvdHlwZS5fcmVuZGVyUGF0aD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmPWQmJmQucmVuZGVyZXJ8fHRoaXMucGFyZW50Ll9yZW5kZXJlcixnPWYuZHJhd2luZ0NvbnRleHQ7ZT1cIm9iamVjdFwiPT10eXBlb2YgYSYmYS5jb21tYW5kcz9hLmNvbW1hbmRzOnRoaXMuX2dldFBhdGgoYSxiLGMsZCkuY29tbWFuZHMsZy5iZWdpblBhdGgoKTtmb3IodmFyIGg9MDtoPGUubGVuZ3RoO2grPTEpe3ZhciBpPWVbaF07XCJNXCI9PT1pLnR5cGU/Zy5tb3ZlVG8oaS54LGkueSk6XCJMXCI9PT1pLnR5cGU/Zy5saW5lVG8oaS54LGkueSk6XCJDXCI9PT1pLnR5cGU/Zy5iZXppZXJDdXJ2ZVRvKGkueDEsaS55MSxpLngyLGkueTIsaS54LGkueSk6XCJRXCI9PT1pLnR5cGU/Zy5xdWFkcmF0aWNDdXJ2ZVRvKGkueDEsaS55MSxpLngsaS55KTpcIlpcIj09PWkudHlwZSYmZy5jbG9zZVBhdGgoKX1yZXR1cm4gZi5fZG9TdHJva2UmJmYuX3N0cm9rZVNldCYmZy5zdHJva2UoKSxmLl9kb0ZpbGwmJihmLl9maWxsU2V0fHxmLl9zZXRGaWxsKHouX0RFRkFVTFRfVEVYVF9GSUxMKSxnLmZpbGwoKSksdGhpc30seS5Gb250LnByb3RvdHlwZS5fdGV4dFdpZHRoPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZm9udC5nZXRBZHZhbmNlV2lkdGgoYSxiKX0seS5Gb250LnByb3RvdHlwZS5fdGV4dEFzY2VudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5mb250LmFzY2VuZGVyKnRoaXMuX3NjYWxlKGEpfSx5LkZvbnQucHJvdG90eXBlLl90ZXh0RGVzY2VudD1mdW5jdGlvbihhKXtyZXR1cm4tdGhpcy5mb250LmRlc2NlbmRlcip0aGlzLl9zY2FsZShhKX0seS5Gb250LnByb3RvdHlwZS5fc2NhbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIDEvdGhpcy5mb250LnVuaXRzUGVyRW0qKGF8fHRoaXMucGFyZW50Ll9yZW5kZXJlci5fdGV4dFNpemUpfSx5LkZvbnQucHJvdG90eXBlLl9oYW5kbGVBbGlnbm1lbnQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1hLl90ZXh0U2l6ZTtzd2l0Y2godm9pZCAwPT09ZSYmKGU9dGhpcy5fdGV4dFdpZHRoKGIsZikpLGEuX3RleHRBbGlnbil7Y2FzZSB6LkNFTlRFUjpjLT1lLzI7YnJlYWs7Y2FzZSB6LlJJR0hUOmMtPWV9c3dpdGNoKGEuX3RleHRCYXNlbGluZSl7Y2FzZSB6LlRPUDpkKz10aGlzLl90ZXh0QXNjZW50KGYpO2JyZWFrO2Nhc2Ugei5DRU5URVI6ZCs9dGhpcy5fdGV4dEFzY2VudChmKS8yO2JyZWFrO2Nhc2Ugei5CT1RUT006ZC09dGhpcy5fdGV4dERlc2NlbnQoZil9cmV0dXJue3g6Yyx5OmR9fSxiLmV4cG9ydHM9eX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihhLGIpe3JldHVybiBhLnB1c2goYiksYX0sZC5wcm90b3R5cGUuYXJyYXlDb3B5PWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZzt2b2lkIDAhPT1lPyhnPU1hdGgubWluKGUsYS5sZW5ndGgpLGY9ZCxhPWEuc2xpY2UoYixnK2IpKToodm9pZCAwIT09Yz8oZz1jLGc9TWF0aC5taW4oZyxhLmxlbmd0aCkpOmc9YS5sZW5ndGgsZj0wLGM9YixhPWEuc2xpY2UoMCxnKSksQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShjLFtmLGddLmNvbmNhdChhKSl9LGQucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihhLGIpe3JldHVybiBhLmNvbmNhdChiKX0sZC5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXZlcnNlKCl9LGQucHJvdG90eXBlLnNob3J0ZW49ZnVuY3Rpb24oYSl7cmV0dXJuIGEucG9wKCksYX0sZC5wcm90b3R5cGUuc2h1ZmZsZT1mdW5jdGlvbihhLGIpe3ZhciBjPUFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJkFycmF5QnVmZmVyLmlzVmlldyhhKTthPWJ8fGM/YTphLnNsaWNlKCk7Zm9yKHZhciBkLGUsZj1hLmxlbmd0aDtmPjE7KWQ9TWF0aC5yYW5kb20oKSpmfDAsZT1hWy0tZl0sYVtmXT1hW2RdLGFbZF09ZTtyZXR1cm4gYX0sZC5wcm90b3R5cGUuc29ydD1mdW5jdGlvbihhLGIpe3ZhciBjPWI/YS5zbGljZSgwLE1hdGgubWluKGIsYS5sZW5ndGgpKTphLGQ9Yj9hLnNsaWNlKE1hdGgubWluKGIsYS5sZW5ndGgpKTpbXTtyZXR1cm4gYz1cInN0cmluZ1wiPT10eXBlb2YgY1swXT9jLnNvcnQoKTpjLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS1ifSksYy5jb25jYXQoZCl9LGQucHJvdG90eXBlLnNwbGljZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoYSxbYywwXS5jb25jYXQoYikpLGF9LGQucHJvdG90eXBlLnN1YnNldD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHZvaWQgMCE9PWM/YS5zbGljZShiLGIrYyk6YS5zbGljZShiLGEubGVuZ3RoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmZsb2F0PWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAocGFyc2VGbG9hdCk6cGFyc2VGbG9hdChhKX0sZC5wcm90b3R5cGUuaW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9Ynx8MTAsXCJzdHJpbmdcIj09dHlwZW9mIGE/cGFyc2VJbnQoYSxiKTpcIm51bWJlclwiPT10eXBlb2YgYT8wfGE6XCJib29sZWFuXCI9PXR5cGVvZiBhP2E/MTowOmEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gZC5wcm90b3R5cGUuaW50KGEsYil9KTp2b2lkIDB9LGQucHJvdG90eXBlLnN0cj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLnN0cik6U3RyaW5nKGEpfSxkLnByb3RvdHlwZS5ib29sZWFuPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPzAhPT1hOlwic3RyaW5nXCI9PXR5cGVvZiBhP1widHJ1ZVwiPT09YS50b0xvd2VyQ2FzZSgpOlwiYm9vbGVhblwiPT10eXBlb2YgYT9hOmEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChkLnByb3RvdHlwZS5ib29sZWFuKTp2b2lkIDB9LGQucHJvdG90eXBlLmJ5dGU9ZnVuY3Rpb24oYSl7dmFyIGI9ZC5wcm90b3R5cGUuaW50KGEsMTApO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBiPyhiKzEyOCklMjU2LTEyODpiIGluc3RhbmNlb2YgQXJyYXk/Yi5tYXAoZC5wcm90b3R5cGUuYnl0ZSk6dm9pZCAwfSxkLnByb3RvdHlwZS5jaGFyPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiBhfHxpc05hTihhKT9hIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUuY2hhcik6XCJzdHJpbmdcIj09dHlwZW9mIGE/ZC5wcm90b3R5cGUuY2hhcihwYXJzZUludChhLDEwKSk6dm9pZCAwOlN0cmluZy5mcm9tQ2hhckNvZGUoYSl9LGQucHJvdG90eXBlLnVuY2hhcj1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYSYmMT09PWEubGVuZ3RoP2EuY2hhckNvZGVBdCgwKTphIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUudW5jaGFyKTp2b2lkIDB9LGQucHJvdG90eXBlLmhleD1mdW5jdGlvbihhLGIpe2lmKGI9dm9pZCAwPT09Ynx8bnVsbD09PWI/Yj04OmIsYSBpbnN0YW5jZW9mIEFycmF5KXJldHVybiBhLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gZC5wcm90b3R5cGUuaGV4KGEsYil9KTtpZihcIm51bWJlclwiPT10eXBlb2YgYSl7YTwwJiYoYT00Mjk0OTY3Mjk1K2ErMSk7Zm9yKHZhciBjPU51bWJlcihhKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtjLmxlbmd0aDxiOyljPVwiMFwiK2M7cmV0dXJuIGMubGVuZ3RoPj1iJiYoYz1jLnN1YnN0cmluZyhjLmxlbmd0aC1iLGMubGVuZ3RoKSksY319LGQucHJvdG90eXBlLnVuaGV4PWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUudW5oZXgpOnBhcnNlSW50KFwiMHhcIithLDE2KX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjKXt2YXIgZD1hPDAsZT1kP2EudG9TdHJpbmcoKS5zdWJzdHJpbmcoMSk6YS50b1N0cmluZygpLGY9ZS5pbmRleE9mKFwiLlwiKSxnPS0xIT09Zj9lLnN1YnN0cmluZygwLGYpOmUsaD0tMSE9PWY/ZS5zdWJzdHJpbmcoZisxKTpcIlwiLGk9ZD9cIi1cIjpcIlwiO2lmKHZvaWQgMCE9PWMpe3ZhciBqPVwiXCI7KC0xIT09Znx8Yy1oLmxlbmd0aD4wKSYmKGo9XCIuXCIpLGgubGVuZ3RoPmMmJihoPWguc3Vic3RyaW5nKDAsYykpO2Zvcih2YXIgaz0wO2s8Yi1nLmxlbmd0aDtrKyspaSs9XCIwXCI7aSs9ZyxpKz1qLGkrPWg7Zm9yKHZhciBsPTA7bDxjLWgubGVuZ3RoO2wrKylpKz1cIjBcIjtyZXR1cm4gaX1mb3IodmFyIG09MDttPE1hdGgubWF4KGItZy5sZW5ndGgsMCk7bSsrKWkrPVwiMFwiO3JldHVybiBpKz1lfWZ1bmN0aW9uIGUoYSxiKXthPWEudG9TdHJpbmcoKTt2YXIgYz1hLmluZGV4T2YoXCIuXCIpLGQ9LTEhPT1jP2Euc3Vic3RyaW5nKGMpOlwiXCIsZT0tMSE9PWM/YS5zdWJzdHJpbmcoMCxjKTphO2lmKGU9ZS50b1N0cmluZygpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csXCIsXCIpLDA9PT1iKWQ9XCJcIjtlbHNlIGlmKHZvaWQgMCE9PWIpaWYoYj5kLmxlbmd0aCl7ZCs9LTE9PT1jP1wiLlwiOlwiXCI7Zm9yKHZhciBmPWItZC5sZW5ndGgrMSxnPTA7ZzxmO2crKylkKz1cIjBcIn1lbHNlIGQ9ZC5zdWJzdHJpbmcoMCxiKzEpO3JldHVybiBlK2R9ZnVuY3Rpb24gZihhKXtyZXR1cm4gcGFyc2VGbG9hdChhKT4wP1wiK1wiK2EudG9TdHJpbmcoKTphLnRvU3RyaW5nKCl9ZnVuY3Rpb24gZyhhKXtyZXR1cm4gcGFyc2VGbG9hdChhKT4wP1wiIFwiK2EudG9TdHJpbmcoKTphLnRvU3RyaW5nKCl9dmFyIGg9YShcIi4uL2NvcmUvbWFpblwiKTthKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGgucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiam9pblwiLGFyZ3VtZW50cyksYS5qb2luKGIpfSxoLnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbihhLGIpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYXRjaFwiLGFyZ3VtZW50cyksYS5tYXRjaChiKX0saC5wcm90b3R5cGUubWF0Y2hBbGw9ZnVuY3Rpb24oYSxiKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYXRjaEFsbFwiLGFyZ3VtZW50cyk7Zm9yKHZhciBjPW5ldyBSZWdFeHAoYixcImdcIiksZD1jLmV4ZWMoYSksZT1bXTtudWxsIT09ZDspZS5wdXNoKGQpLGQ9Yy5leGVjKGEpO3JldHVybiBlfSxoLnByb3RvdHlwZS5uZj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5mXCIsYXJndW1lbnRzKSxhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGQoYSxiLGMpfSk6XCJbb2JqZWN0IEFyZ3VtZW50c11cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKT8zPT09YS5sZW5ndGg/dGhpcy5uZihhWzBdLGFbMV0sYVsyXSk6Mj09PWEubGVuZ3RoP3RoaXMubmYoYVswXSxhWzFdKTp0aGlzLm5mKGFbMF0pOmQoYSxiLGMpfSxoLnByb3RvdHlwZS5uZmM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibmZjXCIsYXJndW1lbnRzKSxhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSxiKX0pOmUoYSxiKX0saC5wcm90b3R5cGUubmZwPWZ1bmN0aW9uKCl7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibmZwXCIsYXJndW1lbnRzKTt2YXIgYT1oLnByb3RvdHlwZS5uZi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChmKTpmKGEpfSxoLnByb3RvdHlwZS5uZnM9ZnVuY3Rpb24oKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJuZnNcIixhcmd1bWVudHMpO3ZhciBhPWgucHJvdG90eXBlLm5mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGcpOmcoYSl9LGgucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwbGl0XCIsYXJndW1lbnRzKSxhLnNwbGl0KGIpfSxoLnByb3RvdHlwZS5zcGxpdFRva2Vucz1mdW5jdGlvbihhLGIpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwbGl0VG9rZW5zXCIsYXJndW1lbnRzKTt2YXIgYztpZih2b2lkIDAhPT1iKXt2YXIgZD1iLGU9L1xcXS9nLmV4ZWMoZCksZj0vXFxbL2cuZXhlYyhkKTtmJiZlPyhkPWQuc2xpY2UoMCxlLmluZGV4KStkLnNsaWNlKGUuaW5kZXgrMSksZj0vXFxbL2cuZXhlYyhkKSxkPWQuc2xpY2UoMCxmLmluZGV4KStkLnNsaWNlKGYuaW5kZXgrMSksYz1uZXcgUmVnRXhwKFwiW1xcXFxbXCIrZCtcIlxcXFxdXVwiLFwiZ1wiKSk6ZT8oZD1kLnNsaWNlKDAsZS5pbmRleCkrZC5zbGljZShlLmluZGV4KzEpLGM9bmV3IFJlZ0V4cChcIltcIitkK1wiXFxcXF1dXCIsXCJnXCIpKTpmPyhkPWQuc2xpY2UoMCxmLmluZGV4KStkLnNsaWNlKGYuaW5kZXgrMSksYz1uZXcgUmVnRXhwKFwiW1wiK2QrXCJcXFxcW11cIixcImdcIikpOmM9bmV3IFJlZ0V4cChcIltcIitkK1wiXVwiLFwiZ1wiKX1lbHNlIGM9L1xccy9nO3JldHVybiBhLnNwbGl0KGMpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYX0pfSxoLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKGEpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0cmltXCIsYXJndW1lbnRzKSxhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAodGhpcy50cmltKTphLnRyaW0oKX0sYi5leHBvcnRzPWh9LHtcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjR9XSw2MzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuZGF5PWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXREYXRlKCl9LGQucHJvdG90eXBlLmhvdXI9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldEhvdXJzKCl9LGQucHJvdG90eXBlLm1pbnV0ZT1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0TWludXRlcygpfSxkLnByb3RvdHlwZS5taWxsaXM9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpfSxkLnByb3RvdHlwZS5tb250aD1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0TW9udGgoKSsxfSxkLnByb3RvdHlwZS5zZWNvbmQ9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFNlY29uZHMoKX0sZC5wcm90b3R5cGUueWVhcj1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2EoXCIuL3A1Lkdlb21ldHJ5XCIpO3ZhciBlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLnByb3RvdHlwZS5wbGFuZT1mdW5jdGlvbihhLGIsYyxlKXt0aGlzLl9hc3NlcnQzZChcInBsYW5lXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBsYW5lXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9MSksdm9pZCAwPT09ZSYmKGU9MSk7dmFyIGY9XCJwbGFuZXxcIitjK1wifFwiK2U7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGYpKXt2YXIgZz1mdW5jdGlvbigpe2Zvcih2YXIgYSxiLGMsZT0wO2U8PXRoaXMuZGV0YWlsWTtlKyspe2I9ZS90aGlzLmRldGFpbFk7Zm9yKHZhciBmPTA7Zjw9dGhpcy5kZXRhaWxYO2YrKylhPWYvdGhpcy5kZXRhaWxYLGM9bmV3IGQuVmVjdG9yKGEtLjUsYi0uNSwwKSx0aGlzLnZlcnRpY2VzLnB1c2goYyksdGhpcy51dnMucHVzaChhLGIpfX0saD1uZXcgZC5HZW9tZXRyeShjLGUsZyk7aC5jb21wdXRlRmFjZXMoKS5jb21wdXRlTm9ybWFscygpLGM8PTEmJmU8PTE/aC5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gcGxhbmUgb2JqZWN0cyB3aXRoIG1vcmUgdGhhbiAxIGRldGFpbFggb3IgMSBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoZixoKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoZixhLGIsMSksdGhpc30sZC5wcm90b3R5cGUuYm94PWZ1bmN0aW9uKGEsYixjLGUsZil7dGhpcy5fYXNzZXJ0M2QoXCJib3hcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYm94XCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9Yik7dmFyIGc9dGhpcy5fcmVuZGVyZXIuYXR0cmlidXRlcyYmdGhpcy5fcmVuZGVyZXIuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nO3ZvaWQgMD09PWUmJihlPWc/MTo0KSx2b2lkIDA9PT1mJiYoZj1nPzE6NCk7dmFyIGg9XCJib3h8XCIrZStcInxcIitmO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChoKSl7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgYT1bWzAsNCwyLDZdLFsxLDMsNSw3XSxbMCwxLDQsNV0sWzIsNiwzLDddLFswLDIsMSwzXSxbNCw1LDYsN11dO3RoaXMuc3Ryb2tlSW5kaWNlcz1bWzAsMV0sWzEsM10sWzMsMl0sWzYsN10sWzgsOV0sWzksMTFdLFsxNCwxNV0sWzE2LDE3XSxbMTcsMTldLFsxOCwxOV0sWzIwLDIxXSxbMjIsMjNdXTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl7Zm9yKHZhciBjPWFbYl0sZT00KmIsZj0wO2Y8NDtmKyspe3ZhciBnPWNbZl0saD1uZXcgZC5WZWN0b3IoKDIqKDEmZyktMSkvMiwoKDImZyktMSkvMiwoKDQmZykvMi0xKS8yKTt0aGlzLnZlcnRpY2VzLnB1c2goaCksdGhpcy51dnMucHVzaCgxJmYsKDImZikvMil9dGhpcy5mYWNlcy5wdXNoKFtlLGUrMSxlKzJdKSx0aGlzLmZhY2VzLnB1c2goW2UrMixlKzEsZSszXSl9fSxqPW5ldyBkLkdlb21ldHJ5KGUsZixpKTtqLmNvbXB1dGVOb3JtYWxzKCksZTw9NCYmZjw9ND9qLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBib3ggb2JqZWN0cyB3aXRoIG1vcmUgdGhhbiA0IGRldGFpbFggb3IgNCBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoaCxqKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoaCxhLGIsYyksdGhpc30sZC5wcm90b3R5cGUuc3BoZXJlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJzcGhlcmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3BoZXJlXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9MjQpLHZvaWQgMD09PWMmJihjPTE2KSx0aGlzLmVsbGlwc29pZChhLGEsYSxiLGMpLHRoaXN9O3ZhciBmPWZ1bmN0aW9uKGEsYixjLGUsZixnLGgpe2E9YTw9MD8xOmEsYj1iPDA/MDpiLGM9Yzw9MD9hOmMsZT1lPDM/MzplLGY9ZjwxPzE6ZixnPXZvaWQgMD09PWd8fGcsaD12b2lkIDA9PT1oPzAhPT1iOmg7dmFyIGksaixrLGwsbSxuPWc/LTI6MCxvPWYrKGg/MjowKSxwPXt9LHE9TWF0aC5hdGFuMihhLWIsYyk7Zm9yKGk9bjtpPD1vOysraSl7dmFyIHIscz1pL2YsdD1jKnM7Zm9yKGk8MD8odD0wLHM9MCxyPWEpOmk+Zj8odD1jLHM9MSxyPWIpOnI9YSsoYi1hKSpzLC0yIT09aSYmaSE9PWYrMnx8KHI9MCksdC09Yy8yLHBbaV09MD09PXI/MTplLGo9MDtqPHBbaV07KytqKXt2YXIgdT1qL2U7dGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihNYXRoLnNpbigyKnUqTWF0aC5QSSkqcix0LE1hdGguY29zKDIqdSpNYXRoLlBJKSpyKSksdGhpcy52ZXJ0ZXhOb3JtYWxzLnB1c2gobmV3IGQuVmVjdG9yKGk8MHx8aT5mPzA6TWF0aC5zaW4oMip1Kk1hdGguUEkpKk1hdGguY29zKHEpLGk8MD8tMTppPmY/MTpNYXRoLnNpbihxKSxpPDB8fGk+Zj8wOk1hdGguY29zKDIqdSpNYXRoLlBJKSpNYXRoLmNvcyhxKSkpLHRoaXMudXZzLnB1c2godSxzKX19dmFyIHY9MDtpZihnKXtmb3Ioaz0wO2s8cFstMV07KytrKW09KGsrMSklcFstMV0sdGhpcy5mYWNlcy5wdXNoKFt2LHYrMSttLHYrMStrXSk7dis9cFstMl0rcFstMV19Zm9yKGk9MDtpPGY7KytpKXtmb3Ioaj0wO2o8cFtpXTsrK2opMT09PXBbaSsxXT8obD0oaisxKSVwW2ldLHRoaXMuZmFjZXMucHVzaChbditqLHYrbCx2K3BbaV1dKSk6KGw9KGorMSklcFtpXSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K2wsditwW2ldK2xdKSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K3BbaV0rbCx2K3BbaV0ral0pKTt2Kz1wW2ldfWlmKGgpZm9yKHYrPXBbZl0saj0wO2o8cFtmKzFdOysrailsPShqKzEpJXBbZisxXSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K2wsditwW2YrMV1dKX07ZC5wcm90b3R5cGUuY3lsaW5kZXI9ZnVuY3Rpb24oYSxiLGMsZSxnLGgpe3RoaXMuX2Fzc2VydDNkKFwiY3lsaW5kZXJcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3lsaW5kZXJcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj1hKSx2b2lkIDA9PT1jJiYoYz0yNCksdm9pZCAwPT09ZSYmKGU9MSksdm9pZCAwPT09aCYmKGg9ITApLFxudm9pZCAwPT09ZyYmKGc9ITApO3ZhciBpPVwiY3lsaW5kZXJ8XCIrYytcInxcIitlK1wifFwiK2crXCJ8XCIraDtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goaSkpe3ZhciBqPW5ldyBkLkdlb21ldHJ5KGMsZSk7Zi5jYWxsKGosMSwxLDEsYyxlLGcsaCksai5jb21wdXRlTm9ybWFscygpLGM8PTI0JiZlPD0xNj9qLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBjeWxpbmRlciBvYmplY3RzIHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMTYgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGksail9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGksYSxiLGEpLHRoaXN9LGQucHJvdG90eXBlLmNvbmU9ZnVuY3Rpb24oYSxiLGMsZSxnKXt0aGlzLl9hc3NlcnQzZChcImNvbmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29uZVwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPTI0KSx2b2lkIDA9PT1lJiYoZT0xKSx2b2lkIDA9PT1nJiYoZz0hMCk7dmFyIGg9XCJjb25lfFwiK2MrXCJ8XCIrZStcInxcIitnO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChoKSl7dmFyIGk9bmV3IGQuR2VvbWV0cnkoYyxlKTtmLmNhbGwoaSwxLDAsMSxjLGUsZywhMSksaS5jb21wdXRlTm9ybWFscygpLGM8PTI0JiZlPD0xNj9pLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBjb25lIG9iamVjdHMgd2l0aCBtb3JlIHRoYW4gMjQgZGV0YWlsWCBvciAxNiBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoaCxpKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoaCxhLGIsYSksdGhpc30sZC5wcm90b3R5cGUuZWxsaXBzb2lkPWZ1bmN0aW9uKGEsYixjLGUsZil7dGhpcy5fYXNzZXJ0M2QoXCJlbGxpcHNvaWRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZWxsaXBzb2lkXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9YSksdm9pZCAwPT09ZSYmKGU9MjQpLHZvaWQgMD09PWYmJihmPTE2KTt2YXIgZz1cImVsbGlwc29pZHxcIitlK1wifFwiK2Y7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGcpKXt2YXIgaD1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspZm9yKHZhciBiPWEvdGhpcy5kZXRhaWxZLGM9TWF0aC5QSSpiLU1hdGguUEkvMixlPU1hdGguY29zKGMpLGY9TWF0aC5zaW4oYyksZz0wO2c8PXRoaXMuZGV0YWlsWDtnKyspe3ZhciBoPWcvdGhpcy5kZXRhaWxYLGk9MipNYXRoLlBJKmgsaj1NYXRoLmNvcyhpKSxrPU1hdGguc2luKGkpLGw9bmV3IGQuVmVjdG9yKGUqayxmLGUqaik7dGhpcy52ZXJ0aWNlcy5wdXNoKGwpLHRoaXMudmVydGV4Tm9ybWFscy5wdXNoKGwpLHRoaXMudXZzLnB1c2goaCxiKX19LGk9bmV3IGQuR2VvbWV0cnkoZSxmLGgpO2kuY29tcHV0ZUZhY2VzKCksZTw9MjQmJmY8PTI0P2kuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlIG9uIGVsbGlwc29pZHMgd2l0aCBtb3JlIHRoYW4gMjQgZGV0YWlsWCBvciAyNCBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoZyxpKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoZyxhLGIsYyksdGhpc30sZC5wcm90b3R5cGUudG9ydXM9ZnVuY3Rpb24oYSxiLGMsZSl7aWYodGhpcy5fYXNzZXJ0M2QoXCJ0b3J1c1wiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0b3J1c1wiLGFyZ3VtZW50cyksdm9pZCAwPT09YSlhPTUwO2Vsc2UgaWYoIWEpcmV0dXJuO2lmKHZvaWQgMD09PWIpYj0xMDtlbHNlIGlmKCFiKXJldHVybjt2b2lkIDA9PT1jJiYoYz0yNCksdm9pZCAwPT09ZSYmKGU9MTYpO3ZhciBmPShiL2EpLnRvUHJlY2lzaW9uKDQpLGc9XCJ0b3J1c3xcIitmK1wifFwiK2MrXCJ8XCIrZTtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goZykpe3ZhciBoPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTw9dGhpcy5kZXRhaWxZO2ErKylmb3IodmFyIGI9YS90aGlzLmRldGFpbFksYz0yKk1hdGguUEkqYixlPU1hdGguY29zKGMpLGc9TWF0aC5zaW4oYyksaD0xK2YqZSxpPTA7aTw9dGhpcy5kZXRhaWxYO2krKyl7dmFyIGo9aS90aGlzLmRldGFpbFgsaz0yKk1hdGguUEkqaixsPU1hdGguY29zKGspLG09TWF0aC5zaW4oayksbj1uZXcgZC5WZWN0b3IoaCpsLGgqbSxmKmcpLG89bmV3IGQuVmVjdG9yKGUqbCxlKm0sZyk7dGhpcy52ZXJ0aWNlcy5wdXNoKG4pLHRoaXMudmVydGV4Tm9ybWFscy5wdXNoKG8pLHRoaXMudXZzLnB1c2goaixiKX19LGk9bmV3IGQuR2VvbWV0cnkoYyxlLGgpO2kuY29tcHV0ZUZhY2VzKCksYzw9MjQmJmU8PTE2P2kuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlcyBvbiB0b3J1cyBvYmplY3Qgd2l0aCBtb3JlIHRoYW4gMjQgZGV0YWlsWCBvciAxNiBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoZyxpKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoZyxhLGEsYSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihhLGIsYyl7dGhpcy5fdXNlUG9pbnRTaGFkZXIoKSx0aGlzLmN1clBvaW50U2hhZGVyLmJpbmRTaGFkZXIoKSx2b2lkIDA9PT1jJiYoYz0wKTt2YXIgZT1bXTtyZXR1cm4gZS5wdXNoKG5ldyBkLlZlY3RvcihhLGIsYykpLHRoaXMuX2RyYXdQb2ludHMoZSx0aGlzLl9wb2ludFZlcnRleEJ1ZmZlciksdGhpcy5jdXJQb2ludFNoYWRlci51bmJpbmRTaGFkZXIoKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnRyaWFuZ2xlPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGU9YVsyXSxmPWFbM10sZz1hWzRdLGg9YVs1XSxpPVwidHJpXCI7aWYoIXRoaXMuZ2VvbWV0cnlJbkhhc2goaSkpe3ZhciBqPWZ1bmN0aW9uKCl7dmFyIGE9W107YS5wdXNoKG5ldyBkLlZlY3RvcigwLDAsMCkpLGEucHVzaChuZXcgZC5WZWN0b3IoMCwxLDApKSxhLnB1c2gobmV3IGQuVmVjdG9yKDEsMCwwKSksdGhpcy5zdHJva2VJbmRpY2VzPVtbMCwxXSxbMSwyXSxbMiwwXV0sdGhpcy52ZXJ0aWNlcz1hLHRoaXMuZmFjZXM9W1swLDEsMl1dLHRoaXMudXZzPVswLDAsMCwxLDEsMV19LGs9bmV3IGQuR2VvbWV0cnkoMSwxLGopO2suX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpLGsuY29tcHV0ZU5vcm1hbHMoKSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoaSxrKX12YXIgbD10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3ZhciBtPW5ldyBkLk1hdHJpeChbZS1iLGYtYywwLDAsZy1iLGgtYywwLDAsMCwwLDEsMCxiLGMsMCwxXSkubXVsdCh0aGlzLnVNVk1hdHJpeCk7dGhpcy51TVZNYXRyaXg9bSx0aGlzLmRyYXdCdWZmZXJzKGkpfWZpbmFsbHl7dGhpcy51TVZNYXRyaXg9bH1yZXR1cm4gdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5lbGxpcHNlPWZ1bmN0aW9uKGEpe3RoaXMuYXJjKGFbMF0sYVsxXSxhWzJdLGFbM10sMCxlLlRXT19QSSxlLk9QRU4sYVs0XSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuYXJjPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZj1hcmd1bWVudHNbMF0sZz1hcmd1bWVudHNbMV0saD1hcmd1bWVudHNbMl0saT1hcmd1bWVudHNbM10saj1hcmd1bWVudHNbNF0saz1hcmd1bWVudHNbNV0sbD1hcmd1bWVudHNbNl0sbT1hcmd1bWVudHNbN118fDI1O2lmKE1hdGguYWJzKGstaik+PWUuVFdPX1BJPyhiPVwiZWxsaXBzZVwiLGM9YitcInxcIittK1wifFwiKTooYj1cImFyY1wiLGM9YitcInxcIitqK1wifFwiK2srXCJ8XCIrbCtcInxcIittK1wifFwiKSwhdGhpcy5nZW9tZXRyeUluSGFzaChjKSl7dmFyIG49ZnVuY3Rpb24oKXtpZih0aGlzLnN0cm9rZUluZGljZXM9W10sai50b0ZpeGVkKDEwKSE9PWsudG9GaXhlZCgxMCkpe2whPT1lLlBJRSYmdm9pZCAwIT09bHx8KHRoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoLjUsLjUsMCkpLHRoaXMudXZzLnB1c2goWy41LC41XSkpO2Zvcih2YXIgYT0wO2E8PW07YSsrKXt2YXIgYj1hL20sYz0oay1qKSpiK2osZj0uNStNYXRoLmNvcyhjKS8yLGc9LjUrTWF0aC5zaW4oYykvMjt0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGYsZywwKSksdGhpcy51dnMucHVzaChbZixnXSksYTxtLTEmJih0aGlzLmZhY2VzLnB1c2goWzAsYSsxLGErMl0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFthKzEsYSsyXSkpfXN3aXRjaChsKXtjYXNlIGUuUElFOnRoaXMuZmFjZXMucHVzaChbMCx0aGlzLnZlcnRpY2VzLmxlbmd0aC0yLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCwxXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goW3RoaXMudmVydGljZXMubGVuZ3RoLTIsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKTticmVhaztjYXNlIGUuQ0hPUkQ6dGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKTticmVhaztjYXNlIGUuT1BFTjp0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCwxXSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmZhY2VzLnB1c2goWzAsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMix0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goW3RoaXMudmVydGljZXMubGVuZ3RoLTIsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pfX19LG89bmV3IGQuR2VvbWV0cnkobSwxLG4pO28uY29tcHV0ZU5vcm1hbHMoKSxtPD01MD9vLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMobyk6Y29uc29sZS5sb2coXCJDYW5ub3Qgc3Ryb2tlIFwiK2IrXCIgd2l0aCBtb3JlIHRoYW4gNTAgZGV0YWlsXCIpLHRoaXMuY3JlYXRlQnVmZmVycyhjLG8pfXZhciBwPXRoaXMudU1WTWF0cml4LmNvcHkoKTt0cnl7dGhpcy51TVZNYXRyaXgudHJhbnNsYXRlKFtmLGcsMF0pLHRoaXMudU1WTWF0cml4LnNjYWxlKGgsaSwxKSx0aGlzLmRyYXdCdWZmZXJzKGMpfWZpbmFsbHl7dGhpcy51TVZNYXRyaXg9cH1yZXR1cm4gdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nLGM9YVswXSxlPWFbMV0sZj1hWzJdLGc9YVszXSxoPWFbNF18fChiPzE6MjQpLGk9YVs1XXx8KGI/MToxNiksaj1cInJlY3R8XCIraCtcInxcIitpO2lmKCF0aGlzLmdlb21ldHJ5SW5IYXNoKGopKXt2YXIgaz1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspZm9yKHZhciBiPWEvdGhpcy5kZXRhaWxZLGM9MDtjPD10aGlzLmRldGFpbFg7YysrKXt2YXIgZT1jL3RoaXMuZGV0YWlsWCxmPW5ldyBkLlZlY3RvcihlLGIsMCk7dGhpcy52ZXJ0aWNlcy5wdXNoKGYpLHRoaXMudXZzLnB1c2goZSxiKX1oPjAmJmk+MCYmKHRoaXMuc3Ryb2tlSW5kaWNlcz1bWzAsaF0sW2gsKGgrMSkqKGkrMSktMV0sWyhoKzEpKihpKzEpLTEsKGgrMSkqaV0sWyhoKzEpKmksMF1dKX0sbD1uZXcgZC5HZW9tZXRyeShoLGksayk7bC5jb21wdXRlRmFjZXMoKS5jb21wdXRlTm9ybWFscygpLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoaixsKX12YXIgbT10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3RoaXMudU1WTWF0cml4LnRyYW5zbGF0ZShbYyxlLDBdKSx0aGlzLnVNVk1hdHJpeC5zY2FsZShmLGcsMSksdGhpcy5kcmF3QnVmZmVycyhqKX1maW5hbGx5e3RoaXMudU1WTWF0cml4PW19cmV0dXJuIHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucXVhZD1mdW5jdGlvbihhLGIsYyxlLGYsZyxoLGkpe3ZhciBqPVwicXVhZHxcIithK1wifFwiK2IrXCJ8XCIrYytcInxcIitlK1wifFwiK2YrXCJ8XCIrZytcInxcIitoK1wifFwiK2k7aWYoIXRoaXMuZ2VvbWV0cnlJbkhhc2goaikpe3ZhciBrPWZ1bmN0aW9uKCl7dGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihhLGIsMCkpLHRoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoYyxlLDApKSx0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGYsZywwKSksdGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihoLGksMCkpLHRoaXMudXZzLnB1c2goMCwwLDEsMCwxLDEsMCwxKSx0aGlzLnN0cm9rZUluZGljZXM9W1swLDFdLFsxLDJdLFsyLDNdLFszLDBdXX0sbD1uZXcgZC5HZW9tZXRyeSgyLDIsayk7bC5jb21wdXRlTm9ybWFscygpLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSxsLmZhY2VzPVtbMCwxLDJdLFsyLDMsMF1dLHRoaXMuY3JlYXRlQnVmZmVycyhqLGwpfXJldHVybiB0aGlzLmRyYXdCdWZmZXJzKGopLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuYmV6aWVyPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpLGosayxsKXs4PT09YXJndW1lbnRzLmxlbmd0aCYmKGo9ZyxrPWgsZz1lLGg9ZCxkPWMsZT1kLGM9Zj1pPWw9MCk7dmFyIG09dGhpcy5fcEluc3QuX2JlemllckRldGFpbHx8MjA7dGhpcy5iZWdpblNoYXBlKCk7Zm9yKHZhciBuPTA7bjw9bTtuKyspe3ZhciBvPU1hdGgucG93KDEtbi9tLDMpLHA9bi9tKjMqTWF0aC5wb3coMS1uL20sMikscT0zKk1hdGgucG93KG4vbSwyKSooMS1uL20pLHI9TWF0aC5wb3cobi9tLDMpO3RoaXMudmVydGV4KGEqbytkKnArZypxK2oqcixiKm8rZSpwK2gqcStrKnIsYypvK2YqcCtpKnErbCpyKX1yZXR1cm4gdGhpcy5lbmRTaGFwZSgpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuY3VydmU9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGksaixrLGwpezg9PT1hcmd1bWVudHMubGVuZ3RoJiYoaj1nLGs9aCxnPWUsaD1kLGQ9YyxlPWQsYz1mPWk9bD0wKTt2YXIgbT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7dGhpcy5iZWdpblNoYXBlKCk7Zm9yKHZhciBuPTA7bjw9bTtuKyspe3ZhciBvPS41Kk1hdGgucG93KG4vbSwzKSxwPS41Kk1hdGgucG93KG4vbSwyKSxxPW4vbSouNSxyPS41LHM9byooMypkLWEtMypnK2opK3AqKDIqYS01KmQrNCpnLWopK3EqKC1hK2cpK3IqKDIqZCksdD1vKigzKmUtYi0zKmgraykrcCooMipiLTUqZSs0KmgtaykrcSooLWIraCkrciooMiplKSx1PW8qKDMqZi1jLTMqaStsKStwKigyKmMtNSpmKzQqaS1sKStxKigtYytpKStyKigyKmYpO3RoaXMudmVydGV4KHMsdCx1KX1yZXR1cm4gdGhpcy5lbmRTaGFwZSgpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUubGluZT1mdW5jdGlvbigpe3JldHVybiA2PT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5iZWdpblNoYXBlKCksdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pLHRoaXMudmVydGV4KGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNF0sYXJndW1lbnRzWzVdKSx0aGlzLmVuZFNoYXBlKCkpOjQ9PT1hcmd1bWVudHMubGVuZ3RoJiYodGhpcy5iZWdpblNoYXBlKCksdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSwwKSx0aGlzLnZlcnRleChhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLDApLHRoaXMuZW5kU2hhcGUoKSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5iZXppZXJWZXJ0ZXg9ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXgubGVuZ3RoKXRocm93IEVycm9yKFwidmVydGV4KCkgbXVzdCBiZSB1c2VkIG9uY2UgYmVmb3JlIGNhbGxpbmcgYmV6aWVyVmVydGV4KClcIik7dmFyIGEsYixjLGQsZSxmPVtdLGc9W10saD1bXSxpPWFyZ3VtZW50cy5sZW5ndGg7aWYoYT0wLDA9PT10aGlzLl9sb29rVXBUYWJsZUJlemllci5sZW5ndGh8fHRoaXMuX2x1dEJlemllckRldGFpbCE9PXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbCl7dGhpcy5fbG9va1VwVGFibGVCZXppZXI9W10sdGhpcy5fbHV0QmV6aWVyRGV0YWlsPXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbDtmb3IodmFyIGo9MS90aGlzLl9sdXRCZXppZXJEZXRhaWwsaz0wLGw9MSxtPTA7azwxOyl7aWYoYT1wYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksdGhpcy5fbG9va1VwVGFibGVCZXppZXJbbV09dGhpcy5fYmV6aWVyQ29lZmZpY2llbnRzKGEpLGwudG9GaXhlZCg2KT09PWoudG9GaXhlZCg2KSl7YT1wYXJzZUZsb2F0KGwudG9GaXhlZCg2KSkrcGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLCsrbSx0aGlzLl9sb29rVXBUYWJsZUJlemllclttXT10aGlzLl9iZXppZXJDb2VmZmljaWVudHMoYSk7YnJlYWt9ays9aixsLT1qLCsrbX19dmFyIG49dGhpcy5fbG9va1VwVGFibGVCZXppZXIubGVuZ3RoO2lmKDY9PT1pKXtmb3IodGhpcy5pc0Jlemllcj0hMCxmPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXSxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1s0XV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNV1dLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZlszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2dbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sdGhpcy52ZXJ0ZXgoYixjKTt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXT1hcmd1bWVudHNbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV09YXJndW1lbnRzWzVdfWVsc2UgaWYoOT09PWkpe2Zvcih0aGlzLmlzQmV6aWVyPSEwLGY9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzBdLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzZdXSxnPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsxXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzRdLGFyZ3VtZW50c1s3XV0saD1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMl0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1s1XSxhcmd1bWVudHNbOF1dLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZlszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2dbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sZD1oWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2hbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0raFsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStoWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyxkKTt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXT1hcmd1bWVudHNbNl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV09YXJndW1lbnRzWzddLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzJdPWFyZ3VtZW50c1s4XX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucXVhZHJhdGljVmVydGV4PWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4Lmxlbmd0aCl0aHJvdyBFcnJvcihcInZlcnRleCgpIG11c3QgYmUgdXNlZCBvbmNlIGJlZm9yZSBjYWxsaW5nIHF1YWRyYXRpY1ZlcnRleCgpXCIpO3ZhciBhLGIsYyxkLGUsZj1bXSxnPVtdLGg9W10saT1hcmd1bWVudHMubGVuZ3RoO2lmKGE9MCwwPT09dGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWMubGVuZ3RofHx0aGlzLl9sdXRRdWFkcmF0aWNEZXRhaWwhPT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWwpe3RoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljPVtdLHRoaXMuX2x1dFF1YWRyYXRpY0RldGFpbD10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7Zm9yKHZhciBqPTEvdGhpcy5fbHV0UXVhZHJhdGljRGV0YWlsLGs9MCxsPTEsbT0wO2s8MTspe2lmKGE9cGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLHRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW21dPXRoaXMuX3F1YWRyYXRpY0NvZWZmaWNpZW50cyhhKSxsLnRvRml4ZWQoNik9PT1qLnRvRml4ZWQoNikpe2E9cGFyc2VGbG9hdChsLnRvRml4ZWQoNikpK3BhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSwrK20sdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbbV09dGhpcy5fcXVhZHJhdGljQ29lZmZpY2llbnRzKGEpO2JyZWFrfWsrPWosbC09aiwrK219fXZhciBuPXRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljLmxlbmd0aDtpZig0PT09aSl7Zm9yKHRoaXMuaXNRdWFkcmF0aWM9ITAsZj1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF0sYXJndW1lbnRzWzBdLGFyZ3VtZW50c1syXV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1szXV0sZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLHRoaXMudmVydGV4KGIsYyk7dGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF09YXJndW1lbnRzWzJdLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdPWFyZ3VtZW50c1szXX1lbHNlIGlmKDY9PT1pKXtmb3IodGhpcy5pc1F1YWRyYXRpYz0hMCxmPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFswXSxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzNdXSxnPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzRdXSxoPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsyXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzVdXSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sZD1oWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2hbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0raFsyXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSx0aGlzLnZlcnRleChiLGMsZCk7dGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF09YXJndW1lbnRzWzNdLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdPWFyZ3VtZW50c1s0XSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsyXT1hcmd1bWVudHNbNV19fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmN1cnZlVmVydGV4PWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmPVtdLGc9W10saD1bXTthPTA7dmFyIGk9YXJndW1lbnRzLmxlbmd0aDtpZigwPT09dGhpcy5fbG9va1VwVGFibGVCZXppZXIubGVuZ3RofHx0aGlzLl9sdXRCZXppZXJEZXRhaWwhPT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWwpe3RoaXMuX2xvb2tVcFRhYmxlQmV6aWVyPVtdLHRoaXMuX2x1dEJlemllckRldGFpbD10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7Zm9yKHZhciBqPTEvdGhpcy5fbHV0QmV6aWVyRGV0YWlsLGs9MCxsPTEsbT0wO2s8MTspe2lmKGE9cGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW21dPXRoaXMuX2JlemllckNvZWZmaWNpZW50cyhhKSxsLnRvRml4ZWQoNik9PT1qLnRvRml4ZWQoNikpe2E9cGFyc2VGbG9hdChsLnRvRml4ZWQoNikpK3BhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSwrK20sdGhpcy5fbG9va1VwVGFibGVCZXppZXJbbV09dGhpcy5fYmV6aWVyQ29lZmZpY2llbnRzKGEpO2JyZWFrfWsrPWosbC09aiwrK219fXZhciBuPXRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyLmxlbmd0aDtpZigyPT09aSl7aWYodGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5wdXNoKGFyZ3VtZW50c1swXSksdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5wdXNoKGFyZ3VtZW50c1sxXSksOD09PXRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgubGVuZ3RoKXtmb3IodGhpcy5pc0N1cnZlPSEwLGY9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzBdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs0XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzZdXSksZz10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMV0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFszXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzVdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbN11dKSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2ZbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStnWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyk7Zm9yKGU9MDtlPGk7ZSsrKXRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXguc2hpZnQoKX19ZWxzZSBpZigzPT09aSYmKHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMF0pLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMV0pLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMl0pLDEyPT09dGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5sZW5ndGgpKXtmb3IodGhpcy5pc0N1cnZlPSEwLGY9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzBdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbM10sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs2XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzldXSksZz10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMV0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs0XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzddLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMTBdXSksaD10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs1XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzhdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMTFdXSksZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStmWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZ1szXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxkPWhbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0raFsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStoWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2hbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sdGhpcy52ZXJ0ZXgoYixjLGQpO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnNoaWZ0KCl9fSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5HZW9tZXRyeVwiOjcwfV0sNjU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QucHJvdG90eXBlLm9yYml0Q29udHJvbD1mdW5jdGlvbihhLGIpe2lmKHRoaXMuX2Fzc2VydDNkKFwib3JiaXRDb250cm9sXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm9yYml0Q29udHJvbFwiLGFyZ3VtZW50cyksdGhpcy5tb3VzZVg8dGhpcy53aWR0aCYmdGhpcy5tb3VzZVg+MCYmdGhpcy5tb3VzZVk8dGhpcy5oZWlnaHQmJnRoaXMubW91c2VZPjApe3ZhciBjPXRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmE7dm9pZCAwPT09YSYmKGE9MSksdm9pZCAwPT09YiYmKGI9YSksITAhPT10aGlzLmNvbnRleHRNZW51RGlzYWJsZWQmJih0aGlzLmNhbnZhcy5vbmNvbnRleHRtZW51PWZ1bmN0aW9uKCl7cmV0dXJuITF9LHRoaXMuX3NldFByb3BlcnR5KFwiY29udGV4dE1lbnVEaXNhYmxlZFwiLCEwKSksITAhPT10aGlzLndoZWVsRGVmYXVsdERpc2FibGVkJiYodGhpcy5jYW52YXMub253aGVlbD1mdW5jdGlvbigpe3JldHVybiExfSx0aGlzLl9zZXRQcm9wZXJ0eShcIndoZWVsRGVmYXVsdERpc2FibGVkXCIsITApKTt2YXIgZT10aGlzLmhlaWdodDx0aGlzLndpZHRoP3RoaXMuaGVpZ2h0OnRoaXMud2lkdGg7aWYodGhpcy5fbW91c2VXaGVlbERlbHRhWSE9PXRoaXMuX3Btb3VzZVdoZWVsRGVsdGFZJiYodGhpcy5fbW91c2VXaGVlbERlbHRhWT4wP3RoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuX29yYml0KDAsMCwuNSplKTp0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLl9vcmJpdCgwLDAsLS41KmUpKSx0aGlzLm1vdXNlSXNQcmVzc2VkKWlmKHRoaXMubW91c2VCdXR0b249PT10aGlzLkxFRlQpe3ZhciBmPS1hKih0aGlzLm1vdXNlWC10aGlzLnBtb3VzZVgpL2UsZz1iKih0aGlzLm1vdXNlWS10aGlzLnBtb3VzZVkpL2U7dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5fb3JiaXQoZixnLDApfWVsc2UgaWYodGhpcy5tb3VzZUJ1dHRvbj09PXRoaXMuUklHSFQpe3ZhciBoPWMuX2dldExvY2FsQXhlcygpLGk9TWF0aC5zcXJ0KGgueFswXSpoLnhbMF0raC54WzJdKmgueFsyXSk7MCE9PWkmJihoLnhbMF0vPWksaC54WzJdLz1pKTt2YXIgaj1NYXRoLnNxcnQoaC55WzBdKmgueVswXStoLnlbMl0qaC55WzJdKTswIT09aiYmKGgueVswXS89aixoLnlbMl0vPWopO3ZhciBrPS0xKmEqKHRoaXMubW91c2VYLXRoaXMucG1vdXNlWCksbD0tMSpiKih0aGlzLm1vdXNlWS10aGlzLnBtb3VzZVkpO2Muc2V0UG9zaXRpb24oYy5leWVYK2sqaC54WzBdK2wqaC56WzBdLGMuZXllWSxjLmV5ZVoraypoLnhbMl0rbCpoLnpbMl0pfXJldHVybiB0aGlzfX0sZC5wcm90b3R5cGUuZGVidWdNb2RlPWZ1bmN0aW9uKCl7dGhpcy5fYXNzZXJ0M2QoXCJkZWJ1Z01vZGVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZGVidWdNb2RlXCIsYXJndW1lbnRzKTtmb3IodmFyIGE9dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5sZW5ndGgtMTthPj0wO2EtLSl0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0W2FdLnRvU3RyaW5nKCkhPT10aGlzLl9ncmlkKCkudG9TdHJpbmcoKSYmdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdFthXS50b1N0cmluZygpIT09dGhpcy5fYXhlc0ljb24oKS50b1N0cmluZygpfHx0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0LnNwbGljZShhLDEpO2FyZ3VtZW50c1swXT09PWUuR1JJRD90aGlzLnJlZ2lzdGVyTWV0aG9kKFwicG9zdFwiLHRoaXMuX2dyaWQuY2FsbCh0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSxhcmd1bWVudHNbNV0pKTphcmd1bWVudHNbMF09PT1lLkFYRVM/dGhpcy5yZWdpc3Rlck1ldGhvZChcInBvc3RcIix0aGlzLl9heGVzSWNvbi5jYWxsKHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzRdKSk6KHRoaXMucmVnaXN0ZXJNZXRob2QoXCJwb3N0XCIsdGhpcy5fZ3JpZC5jYWxsKHRoaXMsYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSkpLHRoaXMucmVnaXN0ZXJNZXRob2QoXCJwb3N0XCIsdGhpcy5fYXhlc0ljb24uY2FsbCh0aGlzLGFyZ3VtZW50c1s1XSxhcmd1bWVudHNbNl0sYXJndW1lbnRzWzddLGFyZ3VtZW50c1s4XSkpKX0sZC5wcm90b3R5cGUubm9EZWJ1Z01vZGU9ZnVuY3Rpb24oKXt0aGlzLl9hc3NlcnQzZChcIm5vRGVidWdNb2RlXCIpO2Zvcih2YXIgYT10aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0Lmxlbmd0aC0xO2E+PTA7YS0tKXRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3RbYV0udG9TdHJpbmcoKSE9PXRoaXMuX2dyaWQoKS50b1N0cmluZygpJiZ0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0W2FdLnRvU3RyaW5nKCkhPT10aGlzLl9heGVzSWNvbigpLnRvU3RyaW5nKCl8fHRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3Quc3BsaWNlKGEsMSl9LGQucHJvdG90eXBlLl9ncmlkPWZ1bmN0aW9uKGEsYixjLGQsZSl7dm9pZCAwPT09YSYmKGE9dGhpcy53aWR0aC8yKSx2b2lkIDA9PT1iJiYoYj1NYXRoLnJvdW5kKGEvMzApPDQ/NDpNYXRoLnJvdW5kKGEvMzApKSx2b2lkIDA9PT1jJiYoYz0wKSx2b2lkIDA9PT1kJiYoZD0wKSx2b2lkIDA9PT1lJiYoZT0wKTt2YXIgZj1hL2IsZz1hLzI7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5wdXNoKCksdGhpcy5zdHJva2UoMjU1KnRoaXMuX3JlbmRlcmVyLmN1clN0cm9rZUNvbG9yWzBdLDI1NSp0aGlzLl9yZW5kZXJlci5jdXJTdHJva2VDb2xvclsxXSwyNTUqdGhpcy5fcmVuZGVyZXIuY3VyU3Ryb2tlQ29sb3JbMl0pLHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5zZXQodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzFdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzRdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzddLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEwXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEzXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSk7Zm9yKHZhciBhPTA7YTw9YjthKyspdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KC1nK2MsZCxhKmYtZytlKSx0aGlzLnZlcnRleCgrZytjLGQsYSpmLWcrZSksdGhpcy5lbmRTaGFwZSgpO2Zvcih2YXIgaD0wO2g8PWI7aCsrKXRoaXMuYmVnaW5TaGFwZSh0aGlzLkxJTkVTKSx0aGlzLnZlcnRleChoKmYtZytjLGQsLWcrZSksdGhpcy52ZXJ0ZXgoaCpmLWcrYyxkLCtnK2UpLHRoaXMuZW5kU2hhcGUoKTt0aGlzLnBvcCgpfX0sZC5wcm90b3R5cGUuX2F4ZXNJY29uPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB2b2lkIDA9PT1hJiYoYT10aGlzLndpZHRoLzIwPjQwP3RoaXMud2lkdGgvMjA6NDApLHZvaWQgMD09PWImJihiPS10aGlzLndpZHRoLzQpLHZvaWQgMD09PWMmJihjPWIpLHZvaWQgMD09PWQmJihkPWIpLGZ1bmN0aW9uKCl7dGhpcy5wdXNoKCksdGhpcy5fcmVuZGVyZXIudU1WTWF0cml4LnNldCh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzBdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsyXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzNdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs1XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzZdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbN10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs4XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzldLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTBdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTFdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTJdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTNdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTRdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTVdKSx0aGlzLnN0cm9rZVdlaWdodCgyKSx0aGlzLnN0cm9rZSgyNTUsMCwwKSx0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoYixjLGQpLHRoaXMudmVydGV4KGIrYSxjLGQpLHRoaXMuZW5kU2hhcGUoKSx0aGlzLnN0cm9rZSgwLDI1NSwwKSx0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoYixjLGQpLHRoaXMudmVydGV4KGIsYythLGQpLHRoaXMuZW5kU2hhcGUoKSx0aGlzLnN0cm9rZSgwLDAsMjU1KSx0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoYixjLGQpLHRoaXMudmVydGV4KGIsYyxkK2EpLHRoaXMuZW5kU2hhcGUoKSx0aGlzLnBvcCgpfX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDY2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5hbWJpZW50TGlnaHQ9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJhbWJpZW50TGlnaHRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYW1iaWVudExpZ2h0XCIsYXJndW1lbnRzKTt2YXIgZj10aGlzLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxnPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBnLnNldFVuaWZvcm0oXCJ1VXNlTGlnaHRpbmdcIiwhMCksZy5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3IpLHRoaXMuX3JlbmRlcmVyLmFtYmllbnRMaWdodENvbG9ycy5wdXNoKGYuX2FycmF5WzBdLGYuX2FycmF5WzFdLGYuX2FycmF5WzJdKSxnLnNldFVuaWZvcm0oXCJ1QW1iaWVudENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuYW1iaWVudExpZ2h0Q29sb3JzKSxnLnNldFVuaWZvcm0oXCJ1QW1iaWVudExpZ2h0Q291bnRcIix0aGlzLl9yZW5kZXJlci5hbWJpZW50TGlnaHRDb2xvcnMubGVuZ3RoLzMpLHRoaXN9LGQucHJvdG90eXBlLmRpcmVjdGlvbmFsTGlnaHQ9ZnVuY3Rpb24oYSxiLGMsZSxmLGcpe3RoaXMuX2Fzc2VydDNkKFwiZGlyZWN0aW9uYWxMaWdodFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJkaXJlY3Rpb25hbExpZ2h0XCIsYXJndW1lbnRzKTt2YXIgaCxpPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO2g9YSBpbnN0YW5jZW9mIGQuQ29sb3I/YTp0aGlzLmNvbG9yKGEsYixjKTt2YXIgaixrLGwsbT1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtcIm51bWJlclwiPT10eXBlb2YgbT8oaj1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0zXSxrPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTJdLGw9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pOihqPW0ueCxrPW0ueSxsPW0ueiksaS5zZXRVbmlmb3JtKFwidVVzZUxpZ2h0aW5nXCIsITApLGkuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKTt2YXIgbj1NYXRoLnNxcnQoaipqK2sqaytsKmwpO3JldHVybiB0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucy5wdXNoKGovbixrL24sbC9uKSxpLnNldFVuaWZvcm0oXCJ1TGlnaHRpbmdEaXJlY3Rpb25cIix0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucyksdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodENvbG9ycy5wdXNoKGguX2FycmF5WzBdLGguX2FycmF5WzFdLGguX2FycmF5WzJdKSxpLnNldFVuaWZvcm0oXCJ1RGlyZWN0aW9uYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnMpLGkuc2V0VW5pZm9ybShcInVEaXJlY3Rpb25hbExpZ2h0Q291bnRcIix0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzLmxlbmd0aC8zKSx0aGlzfSxkLnByb3RvdHlwZS5wb2ludExpZ2h0PWZ1bmN0aW9uKGEsYixjLGUsZixnKXt0aGlzLl9hc3NlcnQzZChcInBvaW50TGlnaHRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicG9pbnRMaWdodFwiLGFyZ3VtZW50cyk7dmFyIGg7aD1hIGluc3RhbmNlb2YgZC5Db2xvcj9hOnRoaXMuY29sb3IoYSxiLGMpO3ZhciBpLGosayxsPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdO1wibnVtYmVyXCI9PXR5cGVvZiBsPyhpPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTNdLGo9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMl0saz1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSk6KGk9bC54LGo9bC55LGs9bC56KTt2YXIgbT10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gbS5zZXRVbmlmb3JtKFwidVVzZUxpZ2h0aW5nXCIsITApLG0uc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSx0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0UG9zaXRpb25zLnB1c2goaSxqLGspLG0uc2V0VW5pZm9ybShcInVQb2ludExpZ2h0TG9jYXRpb25cIix0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0UG9zaXRpb25zKSx0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0Q29sb3JzLnB1c2goaC5fYXJyYXlbMF0saC5fYXJyYXlbMV0saC5fYXJyYXlbMl0pLG0uc2V0VW5pZm9ybShcInVQb2ludExpZ2h0Q29sb3JcIix0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0Q29sb3JzKSxtLnNldFVuaWZvcm0oXCJ1UG9pbnRMaWdodENvdW50XCIsdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodENvbG9ycy5sZW5ndGgvMyksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7Zm9yKHZhciBjPXt2OltdLHZ0OltdLHZuOltdfSxkPXt9LGY9MDtmPGIubGVuZ3RoOysrZil7dmFyIGc9YltmXS50cmltKCkuc3BsaXQoL1xcYlxccysvKTtpZihnLmxlbmd0aD4wKWlmKFwidlwiPT09Z1swXXx8XCJ2blwiPT09Z1swXSl7dmFyIGg9bmV3IGUuVmVjdG9yKHBhcnNlRmxvYXQoZ1sxXSkscGFyc2VGbG9hdChnWzJdKSxwYXJzZUZsb2F0KGdbM10pKTtjW2dbMF1dLnB1c2goaCl9ZWxzZSBpZihcInZ0XCI9PT1nWzBdKXt2YXIgaT1bcGFyc2VGbG9hdChnWzFdKSxwYXJzZUZsb2F0KGdbMl0pXTtjW2dbMF1dLnB1c2goaSl9ZWxzZSBpZihcImZcIj09PWdbMF0pZm9yKHZhciBqPTM7ajxnLmxlbmd0aDsrK2ope2Zvcih2YXIgaz1bXSxsPVsxLGotMSxqXSxtPTA7bTxsLmxlbmd0aDsrK20pe3ZhciBuPWdbbFttXV0sbz0wO2lmKHZvaWQgMCE9PWRbbl0pbz1kW25dO2Vsc2V7Zm9yKHZhciBwPW4uc3BsaXQoXCIvXCIpLHE9MDtxPHAubGVuZ3RoO3ErKylwW3FdPXBhcnNlSW50KHBbcV0pLTE7bz1kW25dPWEudmVydGljZXMubGVuZ3RoLGEudmVydGljZXMucHVzaChjLnZbcFswXV0uY29weSgpKSxjLnZ0W3BbMV1dP2EudXZzLnB1c2goYy52dFtwWzFdXS5zbGljZSgpKTphLnV2cy5wdXNoKFswLDBdKSxjLnZuW3BbMl1dJiZhLnZlcnRleE5vcm1hbHMucHVzaChjLnZuW3BbMl1dLmNvcHkoKSl9ay5wdXNoKG8pfWtbMF0hPT1rWzFdJiZrWzBdIT09a1syXSYma1sxXSE9PWtbMl0mJmEuZmFjZXMucHVzaChrKX19cmV0dXJuIDA9PT1hLnZlcnRleE5vcm1hbHMubGVuZ3RoJiZhLmNvbXB1dGVOb3JtYWxzKCksYX12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpO2EoXCIuL3A1Lkdlb21ldHJ5XCIpLGUucHJvdG90eXBlLmxvYWRNb2RlbD1mdW5jdGlvbihhKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkTW9kZWxcIixhcmd1bWVudHMpO3ZhciBiLGMsZjtcImJvb2xlYW5cIj09dHlwZW9mIGFyZ3VtZW50c1sxXT8oYj1hcmd1bWVudHNbMV0sYz1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10pOihiPSExLGM9YXJndW1lbnRzWzFdLGY9YXJndW1lbnRzWzJdKTt2YXIgZz1uZXcgZS5HZW9tZXRyeTtnLmdpZD1hK1wifFwiK2I7dmFyIGg9dGhpcztyZXR1cm4gdGhpcy5sb2FkU3RyaW5ncyhhLGZ1bmN0aW9uKGEpe2QoZyxhKSxiJiZnLm5vcm1hbGl6ZSgpLGguX2RlY3JlbWVudFByZWxvYWQoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiZjKGcpfS5iaW5kKHRoaXMpLGYpLGd9LGUucHJvdG90eXBlLm1vZGVsPWZ1bmN0aW9uKGEpe3RoaXMuX2Fzc2VydDNkKFwibW9kZWxcIiksZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibW9kZWxcIixhcmd1bWVudHMpLGEudmVydGljZXMubGVuZ3RoPjAmJih0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChhLmdpZCl8fChhLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGEuZ2lkLGEpKSx0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVycyhhLmdpZCkpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1Lkdlb21ldHJ5XCI6NzB9XSw2ODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4vcDUuVGV4dHVyZVwiKSxkLnByb3RvdHlwZS5sb2FkU2hhZGVyPWZ1bmN0aW9uKGEsYil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZFNoYWRlclwiLGFyZ3VtZW50cyk7dmFyIGM9bmV3IGQuU2hhZGVyLGU9dGhpcyxmPSExLGc9ITE7cmV0dXJuIHRoaXMubG9hZFN0cmluZ3MoYixmdW5jdGlvbihhKXtjLl9mcmFnU3JjPWEuam9pbihcIlxcblwiKSxmPSEwLGcmJmUuX2RlY3JlbWVudFByZWxvYWQoKX0pLHRoaXMubG9hZFN0cmluZ3MoYSxmdW5jdGlvbihhKXtjLl92ZXJ0U3JjPWEuam9pbihcIlxcblwiKSxnPSEwLGYmJmUuX2RlY3JlbWVudFByZWxvYWQoKX0pLGN9LGQucHJvdG90eXBlLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcImNyZWF0ZVNoYWRlclwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVTaGFkZXJcIixhcmd1bWVudHMpLG5ldyBkLlNoYWRlcih0aGlzLl9yZW5kZXJlcixhLGIpfSxkLnByb3RvdHlwZS5zaGFkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwic2hhZGVyXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNoYWRlclwiLGFyZ3VtZW50cyksdm9pZCAwPT09YS5fcmVuZGVyZXImJihhLl9yZW5kZXJlcj10aGlzLl9yZW5kZXJlciksYS5pc1N0cm9rZVNoYWRlcigpP3RoaXMuX3JlbmRlcmVyLnNldFN0cm9rZVNoYWRlcihhKTp0aGlzLl9yZW5kZXJlci5zZXRGaWxsU2hhZGVyKGEpLHRoaXN9LGQucHJvdG90eXBlLm5vcm1hbE1hdGVyaWFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwibm9ybWFsTWF0ZXJpYWxcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibm9ybWFsTWF0ZXJpYWxcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmRyYXdNb2RlPWUuRklMTCx0aGlzLl9yZW5kZXJlci5zZXRGaWxsU2hhZGVyKHRoaXMuX3JlbmRlcmVyLl9nZXROb3JtYWxTaGFkZXIoKSksdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yPVsxLDEsMSwxXSx0aGlzLm5vU3Ryb2tlKCksdGhpc30sZC5wcm90b3R5cGUudGV4dHVyZT1mdW5jdGlvbihhKXt0aGlzLl9hc3NlcnQzZChcInRleHR1cmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dHVyZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuZHJhd01vZGU9ZS5URVhUVVJFO3ZhciBiPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBiLnNldFVuaWZvcm0oXCJ1U3BlY3VsYXJcIiwhMSksYi5zZXRVbmlmb3JtKFwiaXNUZXh0dXJlXCIsITApLGIuc2V0VW5pZm9ybShcInVTYW1wbGVyXCIsYSksdGhpcy5ub1N0cm9rZSgpLHRoaXN9LGQucHJvdG90eXBlLmFtYmllbnRNYXRlcmlhbD1mdW5jdGlvbihhLGIsYyxlKXt0aGlzLl9hc3NlcnQzZChcImFtYmllbnRNYXRlcmlhbFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJhbWJpZW50TWF0ZXJpYWxcIixhcmd1bWVudHMpO3ZhciBmPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3I9Zi5fYXJyYXk7dmFyIGc9dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIGcuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSxnLnNldFVuaWZvcm0oXCJ1U3BlY3VsYXJcIiwhMSksZy5zZXRVbmlmb3JtKFwiaXNUZXh0dXJlXCIsITEpLHRoaXN9LGQucHJvdG90eXBlLnNwZWN1bGFyTWF0ZXJpYWw9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJzcGVjdWxhck1hdGVyaWFsXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwZWN1bGFyTWF0ZXJpYWxcIixhcmd1bWVudHMpO3ZhciBmPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3I9Zi5fYXJyYXk7dmFyIGc9dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIGcuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSxnLnNldFVuaWZvcm0oXCJ1U3BlY3VsYXJcIiwhMCksZy5zZXRVbmlmb3JtKFwiaXNUZXh0dXJlXCIsITEpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2FwcGx5Q29sb3JCbGVuZD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLkdMLGM9dGhpcy5kcmF3TW9kZT09PWUuVEVYVFVSRTtyZXR1cm4gY3x8YVthLmxlbmd0aC0xXTwxPyhiLmRlcHRoTWFzayhjKSxiLmVuYWJsZShiLkJMRU5EKSxiLmJsZW5kRXF1YXRpb24oYi5GVU5DX0FERCksYi5ibGVuZEZ1bmMoYi5TUkNfQUxQSEEsYi5PTkVfTUlOVVNfU1JDX0FMUEhBKSk6KGIuZGVwdGhNYXNrKCEwKSxiLmRpc2FibGUoYi5CTEVORCkpLGF9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LlRleHR1cmVcIjo3Nn1dLDY5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5jYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJjYW1lcmFcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY2FtZXJhXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYS5hcHBseSh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucGVyc3BlY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJwZXJzcGVjdGl2ZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwZXJzcGVjdGl2ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5wZXJzcGVjdGl2ZS5hcHBseSh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUub3J0aG89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJvcnRob1wiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJvcnRob1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5vcnRoby5hcHBseSh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUuY3JlYXRlQ2FtZXJhPWZ1bmN0aW9uKCl7dGhpcy5fYXNzZXJ0M2QoXCJjcmVhdGVDYW1lcmFcIik7dmFyIGE9bmV3IGQuQ2FtZXJhKHRoaXMuX3JlbmRlcmVyKTtyZXR1cm4gYS5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncygpLGEuX3NldERlZmF1bHRDYW1lcmEoKSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhPWEsYX0sZC5DYW1lcmE9ZnVuY3Rpb24oYSl7dGhpcy5fcmVuZGVyZXI9YSx0aGlzLmNhbWVyYVR5cGU9XCJkZWZhdWx0XCIsdGhpcy5jYW1lcmFNYXRyaXg9bmV3IGQuTWF0cml4LHRoaXMucHJvak1hdHJpeD1uZXcgZC5NYXRyaXh9LGQuQ2FtZXJhLnByb3RvdHlwZS5wZXJzcGVjdGl2ZT1mdW5jdGlvbihhLGIsYyxlKXt2b2lkIDA9PT1hPyhhPXRoaXMuZGVmYXVsdENhbWVyYUZPVix0aGlzLmNhbWVyYUZPVj1hKTp0aGlzLmNhbWVyYUZPVj10aGlzLl9yZW5kZXJlci5fcEluc3QuX3RvUmFkaWFucyhhKSx2b2lkIDA9PT1iJiYoYj10aGlzLmRlZmF1bHRBc3BlY3RSYXRpbyksdm9pZCAwPT09YyYmKGM9dGhpcy5kZWZhdWx0Q2FtZXJhTmVhciksdm9pZCAwPT09ZSYmKGU9dGhpcy5kZWZhdWx0Q2FtZXJhRmFyKSxjPD0xZS00JiYoYz0uMDEsY29uc29sZS5sb2coXCJBdm9pZCBwZXJzcGVjdGl2ZSBuZWFyIHBsYW5lIHZhbHVlcyBjbG9zZSB0byBvciBiZWxvdyAwLiBTZXR0aW5nIHZhbHVlIHRvIDAuMDEuXCIpKSxlPGMmJmNvbnNvbGUubG9nKFwiUGVyc3BlY3RpdmUgZmFyIHBsYW5lIHZhbHVlIGlzIGxlc3MgdGhhbiBuZWFyIHBsYW5lIHZhbHVlLiBOb3RoaW5nIHdpbGwgYmUgc2hvd24uXCIpLHRoaXMuY2FtZXJhRk9WPXRoaXMuX3JlbmRlcmVyLl9wSW5zdC5fdG9SYWRpYW5zKGEpLHRoaXMuYXNwZWN0UmF0aW89Yix0aGlzLmNhbWVyYU5lYXI9Yyx0aGlzLmNhbWVyYUZhcj1lLHRoaXMucHJvak1hdHJpeD1kLk1hdHJpeC5pZGVudGl0eSgpO3ZhciBmPTEvTWF0aC50YW4odGhpcy5jYW1lcmFGT1YvMiksZz0xLyh0aGlzLmNhbWVyYU5lYXItdGhpcy5jYW1lcmFGYXIpO3RoaXMucHJvak1hdHJpeC5zZXQoZi9iLDAsMCwwLDAsLWYsMCwwLDAsMCwoZStjKSpnLC0xLDAsMCwyKmUqYypnLDApLHRoaXMuX2lzQWN0aXZlKCkmJnRoaXMuX3JlbmRlcmVyLnVQTWF0cml4LnNldCh0aGlzLnByb2pNYXRyaXgubWF0NFswXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxXSx0aGlzLnByb2pNYXRyaXgubWF0NFsyXSx0aGlzLnByb2pNYXRyaXgubWF0NFszXSx0aGlzLnByb2pNYXRyaXgubWF0NFs0XSx0aGlzLnByb2pNYXRyaXgubWF0NFs1XSx0aGlzLnByb2pNYXRyaXgubWF0NFs2XSx0aGlzLnByb2pNYXRyaXgubWF0NFs3XSx0aGlzLnByb2pNYXRyaXgubWF0NFs4XSx0aGlzLnByb2pNYXRyaXgubWF0NFs5XSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTFdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEyXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxM10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTRdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzE1XSksdGhpcy5jYW1lcmFUeXBlPVwiY3VzdG9tXCJ9LGQuQ2FtZXJhLnByb3RvdHlwZS5vcnRobz1mdW5jdGlvbihhLGIsYyxlLGYsZyl7dm9pZCAwPT09YSYmKGE9LXRoaXMuX3JlbmRlcmVyLndpZHRoLzIpLHZvaWQgMD09PWImJihiPSt0aGlzLl9yZW5kZXJlci53aWR0aC8yKSx2b2lkIDA9PT1jJiYoYz0tdGhpcy5fcmVuZGVyZXIuaGVpZ2h0LzIpLHZvaWQgMD09PWUmJihlPSt0aGlzLl9yZW5kZXJlci5oZWlnaHQvMiksdm9pZCAwPT09ZiYmKGY9MCksdm9pZCAwPT09ZyYmKGc9TWF0aC5tYXgodGhpcy5fcmVuZGVyZXIud2lkdGgsdGhpcy5fcmVuZGVyZXIuaGVpZ2h0KSk7dmFyIGg9Yi1hLGk9ZS1jLGo9Zy1mLGs9Mi9oLGw9Mi9pLG09LTIvaixuPS0oYithKS9oLG89LShlK2MpL2kscD0tKGcrZikvajt0aGlzLnByb2pNYXRyaXg9ZC5NYXRyaXguaWRlbnRpdHkoKSx0aGlzLnByb2pNYXRyaXguc2V0KGssMCwwLDAsMCwtbCwwLDAsMCwwLG0sMCxuLG8scCwxKSx0aGlzLl9pc0FjdGl2ZSgpJiZ0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5zZXQodGhpcy5wcm9qTWF0cml4Lm1hdDRbMF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbM10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbN10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTBdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzExXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTNdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzE0XSx0aGlzLnByb2pNYXRyaXgubWF0NFsxNV0pLHRoaXMuY2FtZXJhVHlwZT1cImN1c3RvbVwifSxkLkNhbWVyYS5wcm90b3R5cGUuX3JvdGF0ZVZpZXc9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9dGhpcy5jZW50ZXJYLGc9dGhpcy5jZW50ZXJZLGg9dGhpcy5jZW50ZXJaO2YtPXRoaXMuZXllWCxnLT10aGlzLmV5ZVksaC09dGhpcy5leWVaO3ZhciBpPWQuTWF0cml4LmlkZW50aXR5KHRoaXMuX3JlbmRlcmVyLl9wSW5zdCk7aS5yb3RhdGUoYSxiLGMsZSk7dmFyIGo9W2YqaS5tYXQ0WzBdK2cqaS5tYXQ0WzRdK2gqaS5tYXQ0WzhdLGYqaS5tYXQ0WzFdK2cqaS5tYXQ0WzVdK2gqaS5tYXQ0WzldLGYqaS5tYXQ0WzJdK2cqaS5tYXQ0WzZdK2gqaS5tYXQ0WzEwXV07alswXSs9dGhpcy5leWVYLGpbMV0rPXRoaXMuZXllWSxqWzJdKz10aGlzLmV5ZVosdGhpcy5jYW1lcmEodGhpcy5leWVYLHRoaXMuZXllWSx0aGlzLmV5ZVosalswXSxqWzFdLGpbMl0sdGhpcy51cFgsdGhpcy51cFksdGhpcy51cFopfSxkLkNhbWVyYS5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldExvY2FsQXhlcygpO3RoaXMuX3JvdGF0ZVZpZXcoYSxiLnlbMF0sYi55WzFdLGIueVsyXSl9LGQuQ2FtZXJhLnByb3RvdHlwZS50aWx0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldExvY2FsQXhlcygpO3RoaXMuX3JvdGF0ZVZpZXcoYSxiLnhbMF0sYi54WzFdLGIueFsyXSl9LGQuQ2FtZXJhLnByb3RvdHlwZS5sb29rQXQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuY2FtZXJhKHRoaXMuZXllWCx0aGlzLmV5ZVksdGhpcy5leWVaLGEsYixjLHRoaXMudXBYLHRoaXMudXBZLHRoaXMudXBaKX0sZC5DYW1lcmEucHJvdG90eXBlLmNhbWVyYT1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSl7dm9pZCAwPT09YSYmKGE9dGhpcy5kZWZhdWx0RXllWCxiPXRoaXMuZGVmYXVsdEV5ZVksYz10aGlzLmRlZmF1bHRFeWVaLGQ9YSxlPWIsZj0wLGc9MCxoPTEsaT0wKSx0aGlzLmV5ZVg9YSx0aGlzLmV5ZVk9Yix0aGlzLmV5ZVo9Yyx0aGlzLmNlbnRlclg9ZCx0aGlzLmNlbnRlclk9ZSx0aGlzLmNlbnRlclo9Zix0aGlzLnVwWD1nLHRoaXMudXBZPWgsdGhpcy51cFo9aTt2YXIgaj10aGlzLl9nZXRMb2NhbEF4ZXMoKTt0aGlzLmNhbWVyYU1hdHJpeC5zZXQoai54WzBdLGoueVswXSxqLnpbMF0sMCxqLnhbMV0sai55WzFdLGouelsxXSwwLGoueFsyXSxqLnlbMl0sai56WzJdLDAsMCwwLDAsMSk7dmFyIGs9LWEsbD0tYixtPS1jO3JldHVybiB0aGlzLmNhbWVyYU1hdHJpeC50cmFuc2xhdGUoW2ssbCxtXSksdGhpcy5faXNBY3RpdmUoKSYmdGhpcy5fcmVuZGVyZXIudU1WTWF0cml4LnNldCh0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzBdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMV0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsyXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzNdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbNF0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs1XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzZdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbN10sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs4XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzldLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTBdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTFdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTJdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTNdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTRdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTVdKSx0aGlzfSxkLkNhbWVyYS5wcm90b3R5cGUubW92ZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fZ2V0TG9jYWxBeGVzKCksZT1bZC54WzBdKmEsZC54WzFdKmEsZC54WzJdKmFdLGY9W2QueVswXSpiLGQueVsxXSpiLGQueVsyXSpiXSxnPVtkLnpbMF0qYyxkLnpbMV0qYyxkLnpbMl0qY107dGhpcy5jYW1lcmEodGhpcy5leWVYK2VbMF0rZlswXStnWzBdLHRoaXMuZXllWStlWzFdK2ZbMV0rZ1sxXSx0aGlzLmV5ZVorZVsyXStmWzJdK2dbMl0sdGhpcy5jZW50ZXJYK2VbMF0rZlswXStnWzBdLHRoaXMuY2VudGVyWStlWzFdK2ZbMV0rZ1sxXSx0aGlzLmNlbnRlclorZVsyXStmWzJdK2dbMl0sMCwxLDApfSxkLkNhbWVyYS5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEtdGhpcy5leWVYLGU9Yi10aGlzLmV5ZVksZj1jLXRoaXMuZXllWjt0aGlzLmNhbWVyYShhLGIsYyx0aGlzLmNlbnRlclgrZCx0aGlzLmNlbnRlclkrZSx0aGlzLmNlbnRlclorZiwwLDEsMCl9LGQuQ2FtZXJhLnByb3RvdHlwZS5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncz1mdW5jdGlvbigpe3RoaXMuZGVmYXVsdENhbWVyYUZPVj02MC8xODAqTWF0aC5QSSxcbnRoaXMuZGVmYXVsdEFzcGVjdFJhdGlvPXRoaXMuX3JlbmRlcmVyLndpZHRoL3RoaXMuX3JlbmRlcmVyLmhlaWdodCx0aGlzLmRlZmF1bHRFeWVYPTAsdGhpcy5kZWZhdWx0RXllWT0wLHRoaXMuZGVmYXVsdEV5ZVo9dGhpcy5fcmVuZGVyZXIuaGVpZ2h0LzIvTWF0aC50YW4odGhpcy5kZWZhdWx0Q2FtZXJhRk9WLzIpLHRoaXMuZGVmYXVsdENlbnRlclg9MCx0aGlzLmRlZmF1bHRDZW50ZXJZPTAsdGhpcy5kZWZhdWx0Q2VudGVyWj0wLHRoaXMuZGVmYXVsdENhbWVyYU5lYXI9LjEqdGhpcy5kZWZhdWx0RXllWix0aGlzLmRlZmF1bHRDYW1lcmFGYXI9MTAqdGhpcy5kZWZhdWx0RXllWn0sZC5DYW1lcmEucHJvdG90eXBlLl9zZXREZWZhdWx0Q2FtZXJhPWZ1bmN0aW9uKCl7dGhpcy5jYW1lcmFGT1Y9dGhpcy5kZWZhdWx0Q2FtZXJhRk9WLHRoaXMuYXNwZWN0UmF0aW89dGhpcy5kZWZhdWx0QXNwZWN0UmF0aW8sdGhpcy5leWVYPXRoaXMuZGVmYXVsdEV5ZVgsdGhpcy5leWVZPXRoaXMuZGVmYXVsdEV5ZVksdGhpcy5leWVaPXRoaXMuZGVmYXVsdEV5ZVosdGhpcy5jZW50ZXJYPXRoaXMuZGVmYXVsdENlbnRlclgsdGhpcy5jZW50ZXJZPXRoaXMuZGVmYXVsdENlbnRlclksdGhpcy5jZW50ZXJaPXRoaXMuZGVmYXVsdENlbnRlclosdGhpcy51cFg9MCx0aGlzLnVwWT0xLHRoaXMudXBaPTAsdGhpcy5jYW1lcmFOZWFyPXRoaXMuZGVmYXVsdENhbWVyYU5lYXIsdGhpcy5jYW1lcmFGYXI9dGhpcy5kZWZhdWx0Q2FtZXJhRmFyLHRoaXMucGVyc3BlY3RpdmUoKSx0aGlzLmNhbWVyYSgpLHRoaXMuY2FtZXJhVHlwZT1cImRlZmF1bHRcIn0sZC5DYW1lcmEucHJvdG90eXBlLl9yZXNpemU9ZnVuY3Rpb24oKXtcImRlZmF1bHRcIj09PXRoaXMuY2FtZXJhVHlwZT8odGhpcy5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncygpLHRoaXMuX3NldERlZmF1bHRDYW1lcmEoKSk6dGhpcy5wZXJzcGVjdGl2ZSh0aGlzLmNhbWVyYUZPVix0aGlzLl9yZW5kZXJlci53aWR0aC90aGlzLl9yZW5kZXJlci5oZWlnaHQpfSxkLkNhbWVyYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkLkNhbWVyYSh0aGlzLl9yZW5kZXJlcik7cmV0dXJuIGEuY2FtZXJhRk9WPXRoaXMuY2FtZXJhRk9WLGEuYXNwZWN0UmF0aW89dGhpcy5hc3BlY3RSYXRpbyxhLmV5ZVg9dGhpcy5leWVYLGEuZXllWT10aGlzLmV5ZVksYS5leWVaPXRoaXMuZXllWixhLmNlbnRlclg9dGhpcy5jZW50ZXJYLGEuY2VudGVyWT10aGlzLmNlbnRlclksYS5jZW50ZXJaPXRoaXMuY2VudGVyWixhLmNhbWVyYU5lYXI9dGhpcy5jYW1lcmFOZWFyLGEuY2FtZXJhRmFyPXRoaXMuY2FtZXJhRmFyLGEuY2FtZXJhVHlwZT10aGlzLmNhbWVyYVR5cGUsYS5jYW1lcmFNYXRyaXg9dGhpcy5jYW1lcmFNYXRyaXguY29weSgpLGEucHJvak1hdHJpeD10aGlzLnByb2pNYXRyaXguY29weSgpLGF9LGQuQ2FtZXJhLnByb3RvdHlwZS5fZ2V0TG9jYWxBeGVzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5leWVYLXRoaXMuY2VudGVyWCxiPXRoaXMuZXllWS10aGlzLmNlbnRlclksYz10aGlzLmV5ZVotdGhpcy5jZW50ZXJaLGQ9TWF0aC5zcXJ0KGEqYStiKmIrYypjKTswIT09ZCYmKGEvPWQsYi89ZCxjLz1kKTt2YXIgZT10aGlzLnVwWCxmPXRoaXMudXBZLGc9dGhpcy51cFosaD1mKmMtZypiLGk9LWUqYytnKmEsaj1lKmItZiphO2U9YipqLWMqaSxmPS1hKmorYypoLGc9YSppLWIqaDt2YXIgaz1NYXRoLnNxcnQoaCpoK2kqaStqKmopOzAhPT1rJiYoaC89ayxpLz1rLGovPWspO3ZhciBsPU1hdGguc3FydChlKmUrZipmK2cqZyk7cmV0dXJuIDAhPT1sJiYoZS89bCxmLz1sLGcvPWwpLHt4OltoLGksal0seTpbZSxmLGddLHo6W2EsYixjXX19LGQuQ2FtZXJhLnByb3RvdHlwZS5fb3JiaXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuZXllWC10aGlzLmNlbnRlclgsZT10aGlzLmV5ZVktdGhpcy5jZW50ZXJZLGY9dGhpcy5leWVaLXRoaXMuY2VudGVyWixnPU1hdGguc3FydChkKmQrZSplK2YqZiksaD1NYXRoLmF0YW4yKGQsZiksaT1NYXRoLmFjb3MoTWF0aC5tYXgoLTEsTWF0aC5taW4oMSxlL2cpKSk7aCs9YSxpKz1iLGcrPWMsZzwwJiYoZz0uMSksaT5NYXRoLlBJP2k9TWF0aC5QSTppPD0wJiYoaT0uMDAxKTt2YXIgaj1NYXRoLnNpbihpKSpnKk1hdGguc2luKGgpLGs9TWF0aC5jb3MoaSkqZyxsPU1hdGguc2luKGkpKmcqTWF0aC5jb3MoaCk7dGhpcy5jYW1lcmEoait0aGlzLmNlbnRlclgsayt0aGlzLmNlbnRlclksbCt0aGlzLmNlbnRlclosdGhpcy5jZW50ZXJYLHRoaXMuY2VudGVyWSx0aGlzLmNlbnRlclosMCwxLDApfSxkLkNhbWVyYS5wcm90b3R5cGUuX2lzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT10aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhfSxkLnByb3RvdHlwZS5zZXRDYW1lcmE9ZnVuY3Rpb24oYSl7dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYT1hLHRoaXMuX3JlbmRlcmVyLnVQTWF0cml4LnNldChhLnByb2pNYXRyaXgubWF0NFswXSxhLnByb2pNYXRyaXgubWF0NFsxXSxhLnByb2pNYXRyaXgubWF0NFsyXSxhLnByb2pNYXRyaXgubWF0NFszXSxhLnByb2pNYXRyaXgubWF0NFs0XSxhLnByb2pNYXRyaXgubWF0NFs1XSxhLnByb2pNYXRyaXgubWF0NFs2XSxhLnByb2pNYXRyaXgubWF0NFs3XSxhLnByb2pNYXRyaXgubWF0NFs4XSxhLnByb2pNYXRyaXgubWF0NFs5XSxhLnByb2pNYXRyaXgubWF0NFsxMF0sYS5wcm9qTWF0cml4Lm1hdDRbMTFdLGEucHJvak1hdHJpeC5tYXQ0WzEyXSxhLnByb2pNYXRyaXgubWF0NFsxM10sYS5wcm9qTWF0cml4Lm1hdDRbMTRdLGEucHJvak1hdHJpeC5tYXQ0WzE1XSl9LGIuZXhwb3J0cz1kLkNhbWVyYX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3MDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5HZW9tZXRyeT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMudmVydGljZXM9W10sdGhpcy5saW5lVmVydGljZXM9W10sdGhpcy5saW5lTm9ybWFscz1bXSx0aGlzLnZlcnRleE5vcm1hbHM9W10sdGhpcy5mYWNlcz1bXSx0aGlzLnV2cz1bXSx0aGlzLmVkZ2VzPVtdLHRoaXMuZGV0YWlsWD12b2lkIDAhPT1hP2E6MSx0aGlzLmRldGFpbFk9dm9pZCAwIT09Yj9iOjEsYyBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZjLmNhbGwodGhpcyksdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuY29tcHV0ZUZhY2VzPWZ1bmN0aW9uKCl7dGhpcy5mYWNlcy5sZW5ndGg9MDtmb3IodmFyIGEsYixjLGQsZT10aGlzLmRldGFpbFgrMSxmPTA7Zjx0aGlzLmRldGFpbFk7ZisrKWZvcih2YXIgZz0wO2c8dGhpcy5kZXRhaWxYO2crKylhPWYqZStnLGI9ZiplK2crMSxjPShmKzEpKmUrZysxLGQ9KGYrMSkqZStnLHRoaXMuZmFjZXMucHVzaChbYSxiLGRdKSx0aGlzLmZhY2VzLnB1c2goW2QsYixjXSk7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLl9nZXRGYWNlTm9ybWFsPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZmFjZXNbYV0sYz10aGlzLnZlcnRpY2VzW2JbMF1dLGU9dGhpcy52ZXJ0aWNlc1tiWzFdXSxmPXRoaXMudmVydGljZXNbYlsyXV0sZz1kLlZlY3Rvci5zdWIoZSxjKSxoPWQuVmVjdG9yLnN1YihmLGMpLGk9ZC5WZWN0b3IuY3Jvc3MoZyxoKSxqPWQuVmVjdG9yLm1hZyhpKSxrPWovKGQuVmVjdG9yLm1hZyhnKSpkLlZlY3Rvci5tYWcoaCkpO3JldHVybiAwPT09a3x8aXNOYU4oayk/KGNvbnNvbGUud2FybihcInA1Lkdlb21ldHJ5LnByb3RvdHlwZS5fZ2V0RmFjZU5vcm1hbDpcIixcImZhY2UgaGFzIGNvbGluZWFyIHNpZGVzIG9yIGEgcmVwZWF0ZWQgdmVydGV4XCIpLGkpOihrPjEmJihrPTEpLGkubXVsdChNYXRoLmFzaW4oaykvaikpfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5jb21wdXRlTm9ybWFscz1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy52ZXJ0ZXhOb3JtYWxzLGM9dGhpcy52ZXJ0aWNlcyxlPXRoaXMuZmFjZXM7Zm9yKGIubGVuZ3RoPTAsYT0wO2E8Yy5sZW5ndGg7KythKWIucHVzaChuZXcgZC5WZWN0b3IpO2Zvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7KytmKWZvcih2YXIgZz1lW2ZdLGg9dGhpcy5fZ2V0RmFjZU5vcm1hbChmKSxpPTA7aTwzOysraSl7dmFyIGo9Z1tpXTtiW2pdLmFkZChoKX1mb3IoYT0wO2E8Yy5sZW5ndGg7KythKWJbYV0ubm9ybWFsaXplKCk7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLmF2ZXJhZ2VOb3JtYWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTw9dGhpcy5kZXRhaWxZO2ErKyl7dmFyIGI9dGhpcy5kZXRhaWxYKzEsYz1kLlZlY3Rvci5hZGQodGhpcy52ZXJ0ZXhOb3JtYWxzW2EqYl0sdGhpcy52ZXJ0ZXhOb3JtYWxzW2EqYit0aGlzLmRldGFpbFhdKTtjPWQuVmVjdG9yLmRpdihjLDIpLHRoaXMudmVydGV4Tm9ybWFsc1thKmJdPWMsdGhpcy52ZXJ0ZXhOb3JtYWxzW2EqYit0aGlzLmRldGFpbFhdPWN9cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLmF2ZXJhZ2VQb2xlTm9ybWFscz1mdW5jdGlvbigpe2Zvcih2YXIgYT1uZXcgZC5WZWN0b3IoMCwwLDApLGI9MDtiPHRoaXMuZGV0YWlsWDtiKyspYS5hZGQodGhpcy52ZXJ0ZXhOb3JtYWxzW2JdKTtmb3IoYT1kLlZlY3Rvci5kaXYoYSx0aGlzLmRldGFpbFgpLGI9MDtiPHRoaXMuZGV0YWlsWDtiKyspdGhpcy52ZXJ0ZXhOb3JtYWxzW2JdPWE7Zm9yKGE9bmV3IGQuVmVjdG9yKDAsMCwwKSxiPXRoaXMudmVydGljZXMubGVuZ3RoLTE7Yj50aGlzLnZlcnRpY2VzLmxlbmd0aC0xLXRoaXMuZGV0YWlsWDtiLS0pYS5hZGQodGhpcy52ZXJ0ZXhOb3JtYWxzW2JdKTtmb3IoYT1kLlZlY3Rvci5kaXYoYSx0aGlzLmRldGFpbFgpLGI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMTtiPnRoaXMudmVydGljZXMubGVuZ3RoLTEtdGhpcy5kZXRhaWxYO2ItLSl0aGlzLnZlcnRleE5vcm1hbHNbYl09YTtyZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuX21ha2VUcmlhbmdsZUVkZ2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5lZGdlcy5sZW5ndGg9MCxBcnJheS5pc0FycmF5KHRoaXMuc3Ryb2tlSW5kaWNlcykpZm9yKHZhciBhPTAsYj10aGlzLnN0cm9rZUluZGljZXMubGVuZ3RoO2E8YjthKyspdGhpcy5lZGdlcy5wdXNoKHRoaXMuc3Ryb2tlSW5kaWNlc1thXSk7ZWxzZSBmb3IodmFyIGM9MDtjPHRoaXMuZmFjZXMubGVuZ3RoO2MrKyl0aGlzLmVkZ2VzLnB1c2goW3RoaXMuZmFjZXNbY11bMF0sdGhpcy5mYWNlc1tjXVsxXV0pLHRoaXMuZWRnZXMucHVzaChbdGhpcy5mYWNlc1tjXVsxXSx0aGlzLmZhY2VzW2NdWzJdXSksdGhpcy5lZGdlcy5wdXNoKFt0aGlzLmZhY2VzW2NdWzJdLHRoaXMuZmFjZXNbY11bMF1dKTtyZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuX2VkZ2VzVG9WZXJ0aWNlcz1mdW5jdGlvbigpe3RoaXMubGluZVZlcnRpY2VzLmxlbmd0aD0wLHRoaXMubGluZU5vcm1hbHMubGVuZ3RoPTA7Zm9yKHZhciBhPTA7YTx0aGlzLmVkZ2VzLmxlbmd0aDthKyspe3ZhciBiPXRoaXMudmVydGljZXNbdGhpcy5lZGdlc1thXVswXV0sYz10aGlzLnZlcnRpY2VzW3RoaXMuZWRnZXNbYV1bMV1dLGQ9Yy5jb3B5KCkuc3ViKGIpLm5vcm1hbGl6ZSgpLGU9Yi5hcnJheSgpLGY9Yi5hcnJheSgpLGc9Yy5hcnJheSgpLGg9Yy5hcnJheSgpLGk9ZC5hcnJheSgpLGo9ZC5hcnJheSgpO2kucHVzaCgxKSxqLnB1c2goLTEpLHRoaXMubGluZU5vcm1hbHMucHVzaChpLGosaSxpLGosaiksdGhpcy5saW5lVmVydGljZXMucHVzaChlLGYsZyxnLGYsaCl9cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMudmVydGljZXMubGVuZ3RoPjApe2Zvcih2YXIgYT10aGlzLnZlcnRpY2VzWzBdLmNvcHkoKSxiPXRoaXMudmVydGljZXNbMF0uY29weSgpLGM9MDtjPHRoaXMudmVydGljZXMubGVuZ3RoO2MrKylhLng9TWF0aC5tYXgoYS54LHRoaXMudmVydGljZXNbY10ueCksYi54PU1hdGgubWluKGIueCx0aGlzLnZlcnRpY2VzW2NdLngpLGEueT1NYXRoLm1heChhLnksdGhpcy52ZXJ0aWNlc1tjXS55KSxiLnk9TWF0aC5taW4oYi55LHRoaXMudmVydGljZXNbY10ueSksYS56PU1hdGgubWF4KGEueix0aGlzLnZlcnRpY2VzW2NdLnopLGIuej1NYXRoLm1pbihiLnosdGhpcy52ZXJ0aWNlc1tjXS56KTt2YXIgZT1kLlZlY3Rvci5sZXJwKGEsYiwuNSksZj1kLlZlY3Rvci5zdWIoYSxiKSxnPU1hdGgubWF4KE1hdGgubWF4KGYueCxmLnkpLGYueiksaD0yMDAvZztmb3IoYz0wO2M8dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YysrKXRoaXMudmVydGljZXNbY10uc3ViKGUpLHRoaXMudmVydGljZXNbY10ubXVsdChoKX1yZXR1cm4gdGhpc30sYi5leHBvcnRzPWQuR2VvbWV0cnl9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9QXJyYXksZj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5fTtcInVuZGVmaW5lZFwiIT10eXBlb2YgRmxvYXQzMkFycmF5JiYoZT1GbG9hdDMyQXJyYXksZj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5fHxhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fSksZC5NYXRyaXg9ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGI9MDtiPGEubGVuZ3RoOysrYilhW2JdPWFyZ3VtZW50c1tiXTtyZXR1cm4gYS5sZW5ndGgmJmFbYS5sZW5ndGgtMV1pbnN0YW5jZW9mIGQmJih0aGlzLnA1PWFbYS5sZW5ndGgtMV0pLFwibWF0M1wiPT09YVswXT90aGlzLm1hdDM9QXJyYXkuaXNBcnJheShhWzFdKT9hWzFdOm5ldyBlKFsxLDAsMCwwLDEsMCwwLDAsMV0pOnRoaXMubWF0ND1BcnJheS5pc0FycmF5KGFbMF0pP2FbMF06bmV3IGUoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKSx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgZC5NYXRyaXg/KHRoaXMubWF0ND1hLm1hdDQsdGhpcyk6ZihhKT8odGhpcy5tYXQ0PWEsdGhpcyk6KDE2PT09YXJndW1lbnRzLmxlbmd0aCYmKHRoaXMubWF0NFswXT1hcmd1bWVudHNbMF0sdGhpcy5tYXQ0WzFdPWFyZ3VtZW50c1sxXSx0aGlzLm1hdDRbMl09YXJndW1lbnRzWzJdLHRoaXMubWF0NFszXT1hcmd1bWVudHNbM10sdGhpcy5tYXQ0WzRdPWFyZ3VtZW50c1s0XSx0aGlzLm1hdDRbNV09YXJndW1lbnRzWzVdLHRoaXMubWF0NFs2XT1hcmd1bWVudHNbNl0sdGhpcy5tYXQ0WzddPWFyZ3VtZW50c1s3XSx0aGlzLm1hdDRbOF09YXJndW1lbnRzWzhdLHRoaXMubWF0NFs5XT1hcmd1bWVudHNbOV0sdGhpcy5tYXQ0WzEwXT1hcmd1bWVudHNbMTBdLHRoaXMubWF0NFsxMV09YXJndW1lbnRzWzExXSx0aGlzLm1hdDRbMTJdPWFyZ3VtZW50c1sxMl0sdGhpcy5tYXQ0WzEzXT1hcmd1bWVudHNbMTNdLHRoaXMubWF0NFsxNF09YXJndW1lbnRzWzE0XSx0aGlzLm1hdDRbMTVdPWFyZ3VtZW50c1sxNV0pLHRoaXMpfSxkLk1hdHJpeC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkLk1hdHJpeCh0aGlzLm1hdDQsdGhpcy5wNSl9LGQuTWF0cml4LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGQuTWF0cml4KHRoaXMucDUpO3JldHVybiBhLm1hdDRbMF09dGhpcy5tYXQ0WzBdLGEubWF0NFsxXT10aGlzLm1hdDRbMV0sYS5tYXQ0WzJdPXRoaXMubWF0NFsyXSxhLm1hdDRbM109dGhpcy5tYXQ0WzNdLGEubWF0NFs0XT10aGlzLm1hdDRbNF0sYS5tYXQ0WzVdPXRoaXMubWF0NFs1XSxhLm1hdDRbNl09dGhpcy5tYXQ0WzZdLGEubWF0NFs3XT10aGlzLm1hdDRbN10sYS5tYXQ0WzhdPXRoaXMubWF0NFs4XSxhLm1hdDRbOV09dGhpcy5tYXQ0WzldLGEubWF0NFsxMF09dGhpcy5tYXQ0WzEwXSxhLm1hdDRbMTFdPXRoaXMubWF0NFsxMV0sYS5tYXQ0WzEyXT10aGlzLm1hdDRbMTJdLGEubWF0NFsxM109dGhpcy5tYXQ0WzEzXSxhLm1hdDRbMTRdPXRoaXMubWF0NFsxNF0sYS5tYXQ0WzE1XT10aGlzLm1hdDRbMTVdLGF9LGQuTWF0cml4LmlkZW50aXR5PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgZC5NYXRyaXgoYSl9LGQuTWF0cml4LnByb3RvdHlwZS50cmFuc3Bvc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGcsaCxpO3JldHVybiBhIGluc3RhbmNlb2YgZC5NYXRyaXg/KGI9YS5tYXQ0WzFdLGM9YS5tYXQ0WzJdLGU9YS5tYXQ0WzNdLGc9YS5tYXQ0WzZdLGg9YS5tYXQ0WzddLGk9YS5tYXQ0WzExXSx0aGlzLm1hdDRbMF09YS5tYXQ0WzBdLHRoaXMubWF0NFsxXT1hLm1hdDRbNF0sdGhpcy5tYXQ0WzJdPWEubWF0NFs4XSx0aGlzLm1hdDRbM109YS5tYXQ0WzEyXSx0aGlzLm1hdDRbNF09Yix0aGlzLm1hdDRbNV09YS5tYXQ0WzVdLHRoaXMubWF0NFs2XT1hLm1hdDRbOV0sdGhpcy5tYXQ0WzddPWEubWF0NFsxM10sdGhpcy5tYXQ0WzhdPWMsdGhpcy5tYXQ0WzldPWcsdGhpcy5tYXQ0WzEwXT1hLm1hdDRbMTBdLHRoaXMubWF0NFsxMV09YS5tYXQ0WzE0XSx0aGlzLm1hdDRbMTJdPWUsdGhpcy5tYXQ0WzEzXT1oLHRoaXMubWF0NFsxNF09aSx0aGlzLm1hdDRbMTVdPWEubWF0NFsxNV0pOmYoYSkmJihiPWFbMV0sYz1hWzJdLGU9YVszXSxnPWFbNl0saD1hWzddLGk9YVsxMV0sdGhpcy5tYXQ0WzBdPWFbMF0sdGhpcy5tYXQ0WzFdPWFbNF0sdGhpcy5tYXQ0WzJdPWFbOF0sdGhpcy5tYXQ0WzNdPWFbMTJdLHRoaXMubWF0NFs0XT1iLHRoaXMubWF0NFs1XT1hWzVdLHRoaXMubWF0NFs2XT1hWzldLHRoaXMubWF0NFs3XT1hWzEzXSx0aGlzLm1hdDRbOF09Yyx0aGlzLm1hdDRbOV09Zyx0aGlzLm1hdDRbMTBdPWFbMTBdLHRoaXMubWF0NFsxMV09YVsxNF0sdGhpcy5tYXQ0WzEyXT1lLHRoaXMubWF0NFsxM109aCx0aGlzLm1hdDRbMTRdPWksdGhpcy5tYXQ0WzE1XT1hWzE1XSksdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihhKXt2YXIgYixjLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIsczthIGluc3RhbmNlb2YgZC5NYXRyaXg/KGI9YS5tYXQ0WzBdLGM9YS5tYXQ0WzFdLGU9YS5tYXQ0WzJdLGc9YS5tYXQ0WzNdLGg9YS5tYXQ0WzRdLGk9YS5tYXQ0WzVdLGo9YS5tYXQ0WzZdLGs9YS5tYXQ0WzddLGw9YS5tYXQ0WzhdLG09YS5tYXQ0WzldLG49YS5tYXQ0WzEwXSxvPWEubWF0NFsxMV0scD1hLm1hdDRbMTJdLHE9YS5tYXQ0WzEzXSxyPWEubWF0NFsxNF0scz1hLm1hdDRbMTVdKTpmKGEpJiYoYj1hWzBdLGM9YVsxXSxlPWFbMl0sZz1hWzNdLGg9YVs0XSxpPWFbNV0saj1hWzZdLGs9YVs3XSxsPWFbOF0sbT1hWzldLG49YVsxMF0sbz1hWzExXSxwPWFbMTJdLHE9YVsxM10scj1hWzE0XSxzPWFbMTVdKTt2YXIgdD1iKmktYypoLHU9YipqLWUqaCx2PWIqay1nKmgsdz1jKmotZSppLHg9YyprLWcqaSx5PWUqay1nKmosej1sKnEtbSpwLEE9bCpyLW4qcCxCPWwqcy1vKnAsQz1tKnItbipxLEQ9bSpzLW8qcSxFPW4qcy1vKnIsRj10KkUtdSpEK3YqQyt3KkIteCpBK3kqejtyZXR1cm4gRj8oRj0xL0YsdGhpcy5tYXQ0WzBdPShpKkUtaipEK2sqQykqRix0aGlzLm1hdDRbMV09KGUqRC1jKkUtZypDKSpGLHRoaXMubWF0NFsyXT0ocSp5LXIqeCtzKncpKkYsdGhpcy5tYXQ0WzNdPShuKngtbSp5LW8qdykqRix0aGlzLm1hdDRbNF09KGoqQi1oKkUtaypBKSpGLHRoaXMubWF0NFs1XT0oYipFLWUqQitnKkEpKkYsdGhpcy5tYXQ0WzZdPShyKnYtcCp5LXMqdSkqRix0aGlzLm1hdDRbN109KGwqeS1uKnYrbyp1KSpGLHRoaXMubWF0NFs4XT0oaCpELWkqQitrKnopKkYsdGhpcy5tYXQ0WzldPShjKkItYipELWcqeikqRix0aGlzLm1hdDRbMTBdPShwKngtcSp2K3MqdCkqRix0aGlzLm1hdDRbMTFdPShtKnYtbCp4LW8qdCkqRix0aGlzLm1hdDRbMTJdPShpKkEtaCpDLWoqeikqRix0aGlzLm1hdDRbMTNdPShiKkMtYypBK2UqeikqRix0aGlzLm1hdDRbMTRdPShxKnUtcCp3LXIqdCkqRix0aGlzLm1hdDRbMTVdPShsKnctbSp1K24qdCkqRix0aGlzKTpudWxsfSxkLk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0M3gzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5tYXQzWzBdLGI9dGhpcy5tYXQzWzFdLGM9dGhpcy5tYXQzWzJdLGQ9dGhpcy5tYXQzWzNdLGU9dGhpcy5tYXQzWzRdLGY9dGhpcy5tYXQzWzVdLGc9dGhpcy5tYXQzWzZdLGg9dGhpcy5tYXQzWzddLGk9dGhpcy5tYXQzWzhdLGo9aSplLWYqaCxrPS1pKmQrZipnLGw9aCpkLWUqZyxtPWEqaitiKmsrYypsO3JldHVybiBtPyhtPTEvbSx0aGlzLm1hdDNbMF09aiptLHRoaXMubWF0M1sxXT0oLWkqYitjKmgpKm0sdGhpcy5tYXQzWzJdPShmKmItYyplKSptLHRoaXMubWF0M1szXT1rKm0sdGhpcy5tYXQzWzRdPShpKmEtYypnKSptLHRoaXMubWF0M1s1XT0oLWYqYStjKmQpKm0sdGhpcy5tYXQzWzZdPWwqbSx0aGlzLm1hdDNbN109KC1oKmErYipnKSptLHRoaXMubWF0M1s4XT0oZSphLWIqZCkqbSx0aGlzKTpudWxsfSxkLk1hdHJpeC5wcm90b3R5cGUudHJhbnNwb3NlM3gzPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMV0sYz1hWzJdLGQ9YVs1XTtyZXR1cm4gdGhpcy5tYXQzWzFdPWFbM10sdGhpcy5tYXQzWzJdPWFbNl0sdGhpcy5tYXQzWzNdPWIsdGhpcy5tYXQzWzVdPWFbN10sdGhpcy5tYXQzWzZdPWMsdGhpcy5tYXQzWzddPWQsdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLmludmVyc2VUcmFuc3Bvc2U9ZnVuY3Rpb24oYSl7dm9pZCAwPT09dGhpcy5tYXQzP2NvbnNvbGUuZXJyb3IoXCJzb3JyeSwgdGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIHdpdGggbWF0M1wiKToodGhpcy5tYXQzWzBdPWEubWF0NFswXSx0aGlzLm1hdDNbMV09YS5tYXQ0WzFdLHRoaXMubWF0M1syXT1hLm1hdDRbMl0sdGhpcy5tYXQzWzNdPWEubWF0NFs0XSx0aGlzLm1hdDNbNF09YS5tYXQ0WzVdLHRoaXMubWF0M1s1XT1hLm1hdDRbNl0sdGhpcy5tYXQzWzZdPWEubWF0NFs4XSx0aGlzLm1hdDNbN109YS5tYXQ0WzldLHRoaXMubWF0M1s4XT1hLm1hdDRbMTBdKTt2YXIgYj10aGlzLmludmVydDN4MygpO2lmKGIpYi50cmFuc3Bvc2UzeDModGhpcy5tYXQzKTtlbHNlIGZvcih2YXIgYz0wO2M8OTtjKyspdGhpcy5tYXQzW2NdPTA7cmV0dXJuIHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5kZXRlcm1pbmFudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMubWF0NFswXSp0aGlzLm1hdDRbNV0tdGhpcy5tYXQ0WzFdKnRoaXMubWF0NFs0XSxiPXRoaXMubWF0NFswXSp0aGlzLm1hdDRbNl0tdGhpcy5tYXQ0WzJdKnRoaXMubWF0NFs0XSxjPXRoaXMubWF0NFswXSp0aGlzLm1hdDRbN10tdGhpcy5tYXQ0WzNdKnRoaXMubWF0NFs0XSxkPXRoaXMubWF0NFsxXSp0aGlzLm1hdDRbNl0tdGhpcy5tYXQ0WzJdKnRoaXMubWF0NFs1XSxlPXRoaXMubWF0NFsxXSp0aGlzLm1hdDRbN10tdGhpcy5tYXQ0WzNdKnRoaXMubWF0NFs1XSxmPXRoaXMubWF0NFsyXSp0aGlzLm1hdDRbN10tdGhpcy5tYXQ0WzNdKnRoaXMubWF0NFs2XSxnPXRoaXMubWF0NFs4XSp0aGlzLm1hdDRbMTNdLXRoaXMubWF0NFs5XSp0aGlzLm1hdDRbMTJdLGg9dGhpcy5tYXQ0WzhdKnRoaXMubWF0NFsxNF0tdGhpcy5tYXQ0WzEwXSp0aGlzLm1hdDRbMTJdLGk9dGhpcy5tYXQ0WzhdKnRoaXMubWF0NFsxNV0tdGhpcy5tYXQ0WzExXSp0aGlzLm1hdDRbMTJdLGo9dGhpcy5tYXQ0WzldKnRoaXMubWF0NFsxNF0tdGhpcy5tYXQ0WzEwXSp0aGlzLm1hdDRbMTNdLGs9dGhpcy5tYXQ0WzldKnRoaXMubWF0NFsxNV0tdGhpcy5tYXQ0WzExXSp0aGlzLm1hdDRbMTNdO3JldHVybiBhKih0aGlzLm1hdDRbMTBdKnRoaXMubWF0NFsxNV0tdGhpcy5tYXQ0WzExXSp0aGlzLm1hdDRbMTRdKS1iKmsrYypqK2QqaS1lKmgrZipnfSxkLk1hdHJpeC5wcm90b3R5cGUubXVsdD1mdW5jdGlvbihhKXt2YXIgYjtpZihhPT09dGhpc3x8YT09PXRoaXMubWF0NCliPXRoaXMuY29weSgpLm1hdDQ7ZWxzZSBpZihhIGluc3RhbmNlb2YgZC5NYXRyaXgpYj1hLm1hdDQ7ZWxzZXtpZighZihhKSlyZXR1cm47Yj1hfXZhciBjPXRoaXMubWF0NFswXSxlPXRoaXMubWF0NFsxXSxnPXRoaXMubWF0NFsyXSxoPXRoaXMubWF0NFszXTtyZXR1cm4gdGhpcy5tYXQ0WzBdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzFdPWMqYlsxXStlKmJbNV0rZypiWzldK2gqYlsxM10sdGhpcy5tYXQ0WzJdPWMqYlsyXStlKmJbNl0rZypiWzEwXStoKmJbMTRdLHRoaXMubWF0NFszXT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSxjPXRoaXMubWF0NFs0XSxlPXRoaXMubWF0NFs1XSxnPXRoaXMubWF0NFs2XSxoPXRoaXMubWF0NFs3XSx0aGlzLm1hdDRbNF09YypiWzBdK2UqYls0XStnKmJbOF0raCpiWzEyXSx0aGlzLm1hdDRbNV09YypiWzFdK2UqYls1XStnKmJbOV0raCpiWzEzXSx0aGlzLm1hdDRbNl09YypiWzJdK2UqYls2XStnKmJbMTBdK2gqYlsxNF0sdGhpcy5tYXQ0WzddPWMqYlszXStlKmJbN10rZypiWzExXStoKmJbMTVdLGM9dGhpcy5tYXQ0WzhdLGU9dGhpcy5tYXQ0WzldLGc9dGhpcy5tYXQ0WzEwXSxoPXRoaXMubWF0NFsxMV0sdGhpcy5tYXQ0WzhdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzldPWMqYlsxXStlKmJbNV0rZypiWzldK2gqYlsxM10sdGhpcy5tYXQ0WzEwXT1jKmJbMl0rZSpiWzZdK2cqYlsxMF0raCpiWzE0XSx0aGlzLm1hdDRbMTFdPWMqYlszXStlKmJbN10rZypiWzExXStoKmJbMTVdLGM9dGhpcy5tYXQ0WzEyXSxlPXRoaXMubWF0NFsxM10sZz10aGlzLm1hdDRbMTRdLGg9dGhpcy5tYXQ0WzE1XSx0aGlzLm1hdDRbMTJdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzEzXT1jKmJbMV0rZSpiWzVdK2cqYls5XStoKmJbMTNdLHRoaXMubWF0NFsxNF09YypiWzJdK2UqYls2XStnKmJbMTBdK2gqYlsxNF0sdGhpcy5tYXQ0WzE1XT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KGI9YS55LGM9YS56LGE9YS54KTphIGluc3RhbmNlb2YgQXJyYXkmJihiPWFbMV0sYz1hWzJdLGE9YVswXSksdGhpcy5tYXQ0WzBdKj1hLHRoaXMubWF0NFsxXSo9YSx0aGlzLm1hdDRbMl0qPWEsdGhpcy5tYXQ0WzNdKj1hLHRoaXMubWF0NFs0XSo9Yix0aGlzLm1hdDRbNV0qPWIsdGhpcy5tYXQ0WzZdKj1iLHRoaXMubWF0NFs3XSo9Yix0aGlzLm1hdDRbOF0qPWMsdGhpcy5tYXQ0WzldKj1jLHRoaXMubWF0NFsxMF0qPWMsdGhpcy5tYXQ0WzExXSo9Yyx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXRoaXMucDU/dGhpcy5wNS5fdG9SYWRpYW5zKGEpOmE7YiBpbnN0YW5jZW9mIGQuVmVjdG9yPyhjPWIueSxlPWIueixiPWIueCk6YiBpbnN0YW5jZW9mIEFycmF5JiYoYz1iWzFdLGU9YlsyXSxiPWJbMF0pO3ZhciBnPU1hdGguc3FydChiKmIrYypjK2UqZSk7Yio9MS9nLGMqPTEvZyxlKj0xL2c7dmFyIGg9dGhpcy5tYXQ0WzBdLGk9dGhpcy5tYXQ0WzFdLGo9dGhpcy5tYXQ0WzJdLGs9dGhpcy5tYXQ0WzNdLGw9dGhpcy5tYXQ0WzRdLG09dGhpcy5tYXQ0WzVdLG49dGhpcy5tYXQ0WzZdLG89dGhpcy5tYXQ0WzddLHA9dGhpcy5tYXQ0WzhdLHE9dGhpcy5tYXQ0WzldLHI9dGhpcy5tYXQ0WzEwXSxzPXRoaXMubWF0NFsxMV0sdD1NYXRoLnNpbihmKSx1PU1hdGguY29zKGYpLHY9MS11LHc9YipiKnYrdSx4PWMqYip2K2UqdCx5PWUqYip2LWMqdCx6PWIqYyp2LWUqdCxBPWMqYyp2K3UsQj1lKmMqditiKnQsQz1iKmUqditjKnQsRD1jKmUqdi1iKnQsRT1lKmUqdit1O3JldHVybiB0aGlzLm1hdDRbMF09aCp3K2wqeCtwKnksdGhpcy5tYXQ0WzFdPWkqdyttKngrcSp5LHRoaXMubWF0NFsyXT1qKncrbip4K3IqeSx0aGlzLm1hdDRbM109ayp3K28qeCtzKnksdGhpcy5tYXQ0WzRdPWgqeitsKkErcCpCLHRoaXMubWF0NFs1XT1pKnorbSpBK3EqQix0aGlzLm1hdDRbNl09aip6K24qQStyKkIsdGhpcy5tYXQ0WzddPWsqeitvKkErcypCLHRoaXMubWF0NFs4XT1oKkMrbCpEK3AqRSx0aGlzLm1hdDRbOV09aSpDK20qRCtxKkUsdGhpcy5tYXQ0WzEwXT1qKkMrbipEK3IqRSx0aGlzLm1hdDRbMTFdPWsqQytvKkQrcypFLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSl7dmFyIGI9YVswXSxjPWFbMV0sZD1hWzJdfHwwO3RoaXMubWF0NFsxMl0rPXRoaXMubWF0NFswXSpiK3RoaXMubWF0NFs0XSpjK3RoaXMubWF0NFs4XSpkLHRoaXMubWF0NFsxM10rPXRoaXMubWF0NFsxXSpiK3RoaXMubWF0NFs1XSpjK3RoaXMubWF0NFs5XSpkLHRoaXMubWF0NFsxNF0rPXRoaXMubWF0NFsyXSpiK3RoaXMubWF0NFs2XSpjK3RoaXMubWF0NFsxMF0qZCx0aGlzLm1hdDRbMTVdKz10aGlzLm1hdDRbM10qYit0aGlzLm1hdDRbN10qYyt0aGlzLm1hdDRbMTFdKmR9LGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKGEpe3RoaXMucm90YXRlKGEsMSwwLDApfSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbihhKXt0aGlzLnJvdGF0ZShhLDAsMSwwKX0sZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oYSl7dGhpcy5yb3RhdGUoYSwwLDAsMSl9LGQuTWF0cml4LnByb3RvdHlwZS5wZXJzcGVjdGl2ZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0xL01hdGgudGFuKGEvMiksZj0xLyhjLWQpO3JldHVybiB0aGlzLm1hdDRbMF09ZS9iLHRoaXMubWF0NFsxXT0wLHRoaXMubWF0NFsyXT0wLHRoaXMubWF0NFszXT0wLHRoaXMubWF0NFs0XT0wLHRoaXMubWF0NFs1XT1lLHRoaXMubWF0NFs2XT0wLHRoaXMubWF0NFs3XT0wLHRoaXMubWF0NFs4XT0wLHRoaXMubWF0NFs5XT0wLHRoaXMubWF0NFsxMF09KGQrYykqZix0aGlzLm1hdDRbMTFdPS0xLHRoaXMubWF0NFsxMl09MCx0aGlzLm1hdDRbMTNdPTAsdGhpcy5tYXQ0WzE0XT0yKmQqYypmLHRoaXMubWF0NFsxNV09MCx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUub3J0aG89ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPTEvKGEtYiksaD0xLyhjLWQpLGk9MS8oZS1mKTtyZXR1cm4gdGhpcy5tYXQ0WzBdPS0yKmcsdGhpcy5tYXQ0WzFdPTAsdGhpcy5tYXQ0WzJdPTAsdGhpcy5tYXQ0WzNdPTAsdGhpcy5tYXQ0WzRdPTAsdGhpcy5tYXQ0WzVdPS0yKmgsdGhpcy5tYXQ0WzZdPTAsdGhpcy5tYXQ0WzddPTAsdGhpcy5tYXQ0WzhdPTAsdGhpcy5tYXQ0WzldPTAsdGhpcy5tYXQ0WzEwXT0yKmksdGhpcy5tYXQ0WzExXT0wLHRoaXMubWF0NFsxMl09KGErYikqZyx0aGlzLm1hdDRbMTNdPShkK2MpKmgsdGhpcy5tYXQ0WzE0XT0oZitlKSppLHRoaXMubWF0NFsxNV09MSx0aGlzfSxiLmV4cG9ydHM9ZC5NYXRyaXh9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QuUmVuZGVyZXJHTC5wcm90b3R5cGUuYmVnaW5TaGFwZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT12b2lkIDAhPT1hP2E6ZS5MSU5FX1NUUklQLHZvaWQgMD09PXRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcz8odGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5lZGdlcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLmNvbG9yQnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLnV2QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0ZXhCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUubGluZU5vcm1hbEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5wb2ludFZlcnRleEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4PVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4PVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXg9W10pOih0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLmVkZ2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGljZXMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLmxlbmd0aD0wKSx0aGlzLmlzSW1tZWRpYXRlRHJhd2luZz0hMCx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnZlcnRleD1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZjtjPWU9Zj0wLDM9PT1hcmd1bWVudHMubGVuZ3RoP2M9YXJndW1lbnRzWzJdOjQ9PT1hcmd1bWVudHMubGVuZ3RoPyhlPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXSk6NT09PWFyZ3VtZW50cy5sZW5ndGgmJihjPWFyZ3VtZW50c1syXSxlPWFyZ3VtZW50c1szXSxmPWFyZ3VtZW50c1s0XSk7dmFyIGc9bmV3IGQuVmVjdG9yKGEsYixjKTt0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMucHVzaChnKTt2YXIgaD10aGlzLmN1ckZpbGxDb2xvcnx8Wy41LC41LC41LDFdO3JldHVybiB0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzLnB1c2goaFswXSxoWzFdLGhbMl0saFszXSksdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLnB1c2goZSxmKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXT1hLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdPWIsdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMl09Yyx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFswXT1hLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdPWIsdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMl09Yyx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmVuZFNoYXBlPWZ1bmN0aW9uKGEsYixjLGYsZyxoKXtpZih0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPT09ZS5QT0lOVFMpdGhpcy5fdXNlUG9pbnRTaGFkZXIoKSx0aGlzLmN1clBvaW50U2hhZGVyLmJpbmRTaGFkZXIoKSx0aGlzLl9kcmF3UG9pbnRzKHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcyx0aGlzLmltbWVkaWF0ZU1vZGUucG9pbnRWZXJ0ZXhCdWZmZXIpLHRoaXMuY3VyUG9pbnRTaGFkZXIudW5iaW5kU2hhZGVyKCk7ZWxzZSBpZih0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoPjEpe2lmKHRoaXMuX3VzZUltbWVkaWF0ZU1vZGVTaGFkZXIoKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5kcmF3TW9kZSE9PWUuVEVYVFVSRSl7Zm9yKHZhciBpPTA7aTx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoLTE7aSsrKXRoaXMuaW1tZWRpYXRlTW9kZS5lZGdlcy5wdXNoKFtpLGkrMV0pO2E9PT1lLkNMT1NFJiZ0aGlzLmltbWVkaWF0ZU1vZGUuZWRnZXMucHVzaChbdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aC0xLDBdKSxkLkdlb21ldHJ5LnByb3RvdHlwZS5fZWRnZXNUb1ZlcnRpY2VzLmNhbGwodGhpcy5pbW1lZGlhdGVNb2RlKSx0aGlzLl9kcmF3U3Ryb2tlSW1tZWRpYXRlTW9kZSgpfWlmKHRoaXMuX2RvRmlsbCl7aWYodGhpcy5pc0Jlemllcnx8dGhpcy5pc1F1YWRyYXRpY3x8dGhpcy5pc0N1cnZlKXt2YXIgaj1bbmV3IEZsb2F0MzJBcnJheSh0aGlzLl92VG9OQXJyYXkodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzKSldLGs9dGhpcy5fdHJpYW5ndWxhdGUoaik7dGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzPVtdO2Zvcih2YXIgbD0wLG09ay5sZW5ndGg7bDxtO2wrPTMpdGhpcy52ZXJ0ZXgoa1tsXSxrW2wrMV0sa1tsKzJdKX10aGlzLl9kcmF3RmlsbEltbWVkaWF0ZU1vZGUoYSxiLGMsZixnLGgpfX1yZXR1cm4gdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLmxlbmd0aD0wLHRoaXMuaXNJbW1lZGlhdGVEcmF3aW5nPSExLHRoaXMuaXNCZXppZXI9ITEsdGhpcy5pc1F1YWRyYXRpYz0hMSx0aGlzLmlzQ3VydmU9ITEsdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXgubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXgubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5sZW5ndGg9MCx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9kcmF3RmlsbEltbWVkaWF0ZU1vZGU9ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe3ZhciBoPXRoaXMuR0w7aWYodGhpcy5jdXJGaWxsU2hhZGVyLmJpbmRTaGFkZXIoKSx0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhCdWZmZXIsaC5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcyksRmxvYXQzMkFycmF5LGguRFlOQU1JQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGguRkxPQVQsITEsMCwwKSksdGhpcy5kcmF3TW9kZT09PWUuRklMTCYmdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleENvbG9yJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUuY29sb3JCdWZmZXIsaC5BUlJBWV9CVUZGRVIsdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleENvbG9ycyxGbG9hdDMyQXJyYXksaC5EWU5BTUlDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleENvbG9yLmxvY2F0aW9uLDQsaC5GTE9BVCwhMSwwLDApKSx0aGlzLmRyYXdNb2RlPT09ZS5URVhUVVJFJiZ0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQmJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS51dkJ1ZmZlcixoLkFSUkFZX0JVRkZFUix0aGlzLmltbWVkaWF0ZU1vZGUudXZDb29yZHMsRmxvYXQzMkFycmF5LGguRFlOQU1JQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLGguRkxPQVQsITEsMCwwKSksdGhpcy5kcmF3TW9kZT09PWUuRklMTHx8dGhpcy5kcmF3TW9kZT09PWUuVEVYVFVSRSlzd2l0Y2godGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZSl7Y2FzZSBlLkxJTkVfU1RSSVA6Y2FzZSBlLkxJTkVTOmNhc2UgZS5UUklBTkdMRVM6dGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT10aGlzLmlzQmV6aWVyfHx0aGlzLmlzUXVhZHJhdGljfHx0aGlzLmlzQ3VydmU/ZS5UUklBTkdMRVM6ZS5UUklBTkdMRV9GQU59ZWxzZSBzd2l0Y2godGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZSl7Y2FzZSBlLkxJTkVfU1RSSVA6Y2FzZSBlLkxJTkVTOnRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9ZS5MSU5FX0xPT1B9aWYodGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT09PWUuUVVBRFN8fHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9PT1lLlFVQURfU1RSSVApdGhyb3cgbmV3IEVycm9yKFwic29ycnksIFwiK3RoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGUrXCIgbm90IHlldCBpbXBsZW1lbnRlZCBpbiB3ZWJnbCBtb2RlLlwiKTt0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJGaWxsQ29sb3IpLGguZW5hYmxlKGguQkxFTkQpLGguZHJhd0FycmF5cyh0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlLDAsdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLHRoaXMuY3VyRmlsbFNoYWRlci51bmJpbmRTaGFkZXIoKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd1N0cm9rZUltbWVkaWF0ZU1vZGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLkdMO3RoaXMuY3VyU3Ryb2tlU2hhZGVyLmJpbmRTaGFkZXIoKSx0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbiYmKHRoaXMuX2JpbmRCdWZmZXIodGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0ZXhCdWZmZXIsYS5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbih0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzKSxGbG9hdDMyQXJyYXksYS5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYS5GTE9BVCwhMSwwLDApKSx0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24mJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFsQnVmZmVyLGEuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4odGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxzKSxGbG9hdDMyQXJyYXksYS5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYURpcmVjdGlvbi5sb2NhdGlvbiw0LGEuRkxPQVQsITEsMCwwKSksdGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyU3Ryb2tlQ29sb3IpLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUywwLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGljZXMubGVuZ3RoKSx0aGlzLmN1clN0cm9rZVNoYWRlci51bmJpbmRTaGFkZXIoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGIuZXhwb3J0cz1kLlJlbmRlcmVyR0x9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDczOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPTA7ZC5SZW5kZXJlckdMLnByb3RvdHlwZS5faW5pdEJ1ZmZlckRlZmF1bHRzPWZ1bmN0aW9uKGEpe2lmKHRoaXMuX2ZyZWVCdWZmZXJzKGEpLCsrZT4xZTMpe3ZhciBiPU9iamVjdC5rZXlzKHRoaXMuZ0hhc2gpWzBdO2RlbGV0ZSB0aGlzLmdIYXNoW2JdLGUtLX10aGlzLmdIYXNoW2FdPXt9fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9mcmVlQnVmZmVycz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmdIYXNoW2FdO2lmKGIpe2RlbGV0ZSB0aGlzLmdIYXNoW2FdLGUtLTt2YXIgYz10aGlzLkdMO2IudmVydGV4QnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLnZlcnRleEJ1ZmZlciksYi5ub3JtYWxCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIubm9ybWFsQnVmZmVyKSxiLmxpbmVOb3JtYWxCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIubGluZU5vcm1hbEJ1ZmZlciksYi51dkJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi51dkJ1ZmZlciksYi5pbmRleEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi5pbmRleEJ1ZmZlciksYi5saW5lVmVydGV4QnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLmxpbmVWZXJ0ZXhCdWZmZXIpfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5jcmVhdGVCdWZmZXJzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5HTDt0aGlzLl9pbml0QnVmZmVyRGVmYXVsdHMoYSk7dmFyIGQ9dGhpcy5nSGFzaFthXTtyZXR1cm4gZC5udW1iZXJPZkl0ZW1zPTMqYi5mYWNlcy5sZW5ndGgsZC5saW5lVmVydGV4Q291bnQ9Yi5saW5lVmVydGljZXMubGVuZ3RoLHRoaXMuX3VzZUNvbG9yU2hhZGVyKCksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJihkLmxpbmVWZXJ0ZXhCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQubGluZVZlcnRleEJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIubGluZVZlcnRpY2VzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYy5GTE9BVCwhMSwwLDApKSx0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24mJihkLmxpbmVOb3JtYWxCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQubGluZU5vcm1hbEJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIubGluZU5vcm1hbHMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uLmxvY2F0aW9uLDQsYy5GTE9BVCwhMSwwLDApKSx0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJihkLnZlcnRleEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC52ZXJ0ZXhCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KGIudmVydGljZXMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGMuRkxPQVQsITEsMCwwKSksZC5pbmRleEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC5pbmRleEJ1ZmZlcixjLkVMRU1FTlRfQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4oYi5mYWNlcyksVWludDE2QXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYU5vcm1hbCYmKGQubm9ybWFsQnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLm5vcm1hbEJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl92VG9OQXJyYXkoYi52ZXJ0ZXhOb3JtYWxzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hTm9ybWFsLmxvY2F0aW9uLDMsYy5GTE9BVCwhMSwwLDApKSx0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQmJihkLnV2QnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLnV2QnVmZmVyLGMuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4oYi51dnMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLGMuRkxPQVQsITEsMCwwKSksZH0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5kcmF3QnVmZmVycz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLkdMO3RoaXMuX3VzZUNvbG9yU2hhZGVyKCk7dmFyIGM9dGhpcy5nSGFzaFthXTtyZXR1cm4gdGhpcy5fZG9TdHJva2UmJmMubGluZVZlcnRleENvdW50PjAmJih0aGlzLmN1clN0cm9rZVNoYWRlci5iaW5kU2hhZGVyKCksYy5saW5lVmVydGV4QnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLmxpbmVWZXJ0ZXhCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGIuRkxPQVQsITEsMCwwKSksYy5saW5lTm9ybWFsQnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLmxpbmVOb3JtYWxCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24ubG9jYXRpb24sNCxiLkZMT0FULCExLDAsMCkpLHRoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1clN0cm9rZUNvbG9yKSx0aGlzLl9kcmF3QXJyYXlzKGIuVFJJQU5HTEVTLGEpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLnVuYmluZFNoYWRlcigpKSwhMSE9PXRoaXMuX2RvRmlsbCYmKHRoaXMuY3VyRmlsbFNoYWRlci5iaW5kU2hhZGVyKCksYy52ZXJ0ZXhCdWZmZXImJih0aGlzLl9iaW5kQnVmZmVyKGMudmVydGV4QnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGIuRkxPQVQsITEsMCwwKSksYy5pbmRleEJ1ZmZlciYmdGhpcy5fYmluZEJ1ZmZlcihjLmluZGV4QnVmZmVyLGIuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLGMubm9ybWFsQnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLm5vcm1hbEJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hTm9ybWFsLmxvY2F0aW9uLDMsYi5GTE9BVCwhMSwwLDApKSxjLnV2QnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLnV2QnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLGIuRkxPQVQsITEsMCwwKSksdGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyRmlsbENvbG9yKSx0aGlzLl9kcmF3RWxlbWVudHMoYi5UUklBTkdMRVMsYSksdGhpcy5jdXJGaWxsU2hhZGVyLnVuYmluZFNoYWRlcigpKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmRyYXdCdWZmZXJzU2NhbGVkPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMudU1WTWF0cml4LmNvcHkoKTt0cnl7dGhpcy51TVZNYXRyaXguc2NhbGUoYixjLGQpLHRoaXMuZHJhd0J1ZmZlcnMoYSl9ZmluYWxseXt0aGlzLnVNVk1hdHJpeD1lfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd0FycmF5cz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLkdMLmRyYXdBcnJheXMoYSwwLHRoaXMuZ0hhc2hbYl0ubGluZVZlcnRleENvdW50KSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd0VsZW1lbnRzPWZ1bmN0aW9uKGEsYil7dGhpcy5HTC5kcmF3RWxlbWVudHMoYSx0aGlzLmdIYXNoW2JdLm51bWJlck9mSXRlbXMsdGhpcy5HTC5VTlNJR05FRF9TSE9SVCwwKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdQb2ludHM9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLkdMO3RoaXMuX2JpbmRCdWZmZXIoYixjLkFSUkFZX0JVRkZFUix0aGlzLl92VG9OQXJyYXkoYSksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyUG9pbnRTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyUG9pbnRTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxjLkZMT0FULCExLDAsMCksYy5kcmF3QXJyYXlzKGMuUG9pbnRzLDAsYS5sZW5ndGgpfSxiLmV4cG9ydHM9ZC5SZW5kZXJlckdMfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDc0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKSxmPWEoXCJsaWJ0ZXNzXCIpO2EoXCIuL3A1LlNoYWRlclwiKSxhKFwiLi9wNS5DYW1lcmFcIiksYShcIi4uL2NvcmUvcDUuUmVuZGVyZXJcIiksYShcIi4vcDUuTWF0cml4XCIpO3ZhciBnPXtpbW1lZGlhdGVWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGFWZXJ0ZXhDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBmbG9hdCB1UmVzb2x1dGlvbjtcXG51bmlmb3JtIGZsb2F0IHVQb2ludFNpemU7XFxuXFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdkNvbG9yID0gYVZlcnRleENvbG9yO1xcbiAgZ2xfUG9pbnRTaXplID0gdVBvaW50U2l6ZTtcXG59XFxuXCIsdmVydGV4Q29sb3JWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGFWZXJ0ZXhDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdkNvbG9yID0gYVZlcnRleENvbG9yO1xcbn1cXG5cIix2ZXJ0ZXhDb2xvckZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZvaWQgbWFpbih2b2lkKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7XFxufVwiLG5vcm1hbFZlcnQ6XCJhdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzMgYU5vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyB1Tm9ybWFsTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMyB2VmVydGV4Tm9ybWFsO1xcbnZhcnlpbmcgaGlnaHAgdmVjMiB2VmVydFRleENvb3JkO1xcblxcbnZvaWQgbWFpbih2b2lkKSB7XFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuICB2VmVydGV4Tm9ybWFsID0gbm9ybWFsaXplKHZlYzMoIHVOb3JtYWxNYXRyaXggKiBhTm9ybWFsICkpO1xcbiAgdlZlcnRUZXhDb29yZCA9IGFUZXhDb29yZDtcXG59XFxuXCIsbm9ybWFsRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnZhcnlpbmcgdmVjMyB2VmVydGV4Tm9ybWFsO1xcbnZvaWQgbWFpbih2b2lkKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZWZXJ0ZXhOb3JtYWwsIDEuMCk7XFxufVwiLGJhc2ljRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnZhcnlpbmcgdmVjMyB2VmVydGV4Tm9ybWFsO1xcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdU1hdGVyaWFsQ29sb3I7XFxufVwiLGxpZ2h0VmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMyBhTm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXhDb29yZDtcXG5cXG51bmlmb3JtIG1hdDQgdVZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyB1Tm9ybWFsTWF0cml4O1xcbnVuaWZvcm0gaW50IHVBbWJpZW50TGlnaHRDb3VudDtcXG51bmlmb3JtIGludCB1RGlyZWN0aW9uYWxMaWdodENvdW50O1xcbnVuaWZvcm0gaW50IHVQb2ludExpZ2h0Q291bnQ7XFxuXFxudW5pZm9ybSB2ZWMzIHVBbWJpZW50Q29sb3JbOF07XFxudW5pZm9ybSB2ZWMzIHVMaWdodGluZ0RpcmVjdGlvbls4XTtcXG51bmlmb3JtIHZlYzMgdURpcmVjdGlvbmFsQ29sb3JbOF07XFxudW5pZm9ybSB2ZWMzIHVQb2ludExpZ2h0TG9jYXRpb25bOF07XFxudW5pZm9ybSB2ZWMzIHVQb2ludExpZ2h0Q29sb3JbOF07XFxudW5pZm9ybSBib29sIHVTcGVjdWxhcjtcXG5cXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdlZlcnRUZXhDb29yZDtcXG52YXJ5aW5nIHZlYzMgdkxpZ2h0V2VpZ2h0aW5nO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG5cXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG5cXG4gIHZlYzMgdmVydGV4Tm9ybWFsID0gbm9ybWFsaXplKHZlYzMoIHVOb3JtYWxNYXRyaXggKiBhTm9ybWFsICkpO1xcbiAgdlZlcnRleE5vcm1hbCA9IHZlcnRleE5vcm1hbDtcXG4gIHZWZXJ0VGV4Q29vcmQgPSBhVGV4Q29vcmQ7XFxuXFxuICB2ZWM0IG12UG9zaXRpb24gPSB1TW9kZWxWaWV3TWF0cml4ICogdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICB2ZWMzIGV5ZURpcmVjdGlvbiA9IG5vcm1hbGl6ZSgtbXZQb3NpdGlvbi54eXopO1xcblxcbiAgZmxvYXQgc2hpbmluZXNzID0gMzIuMDtcXG4gIGZsb2F0IHNwZWN1bGFyRmFjdG9yID0gMi4wO1xcbiAgZmxvYXQgZGlmZnVzZUZhY3RvciA9IDAuMztcXG5cXG4gIHZlYzMgYW1iaWVudExpZ2h0RmFjdG9yID0gdmVjMygwLjApO1xcblxcbiAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHtcXG4gICAgaWYgKHVBbWJpZW50TGlnaHRDb3VudCA9PSBpKSBicmVhaztcXG4gICAgYW1iaWVudExpZ2h0RmFjdG9yICs9IHVBbWJpZW50Q29sb3JbaV07XFxuICB9XFxuXFxuXFxuICB2ZWMzIGRpcmVjdGlvbmFsTGlnaHRGYWN0b3IgPSB2ZWMzKDAuMCk7XFxuXFxuICBmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykge1xcbiAgICBpZiAodURpcmVjdGlvbmFsTGlnaHRDb3VudCA9PSBqKSBicmVhaztcXG4gICAgdmVjMyBkaXIgPSB1TGlnaHRpbmdEaXJlY3Rpb25bal07XFxuICAgIGZsb2F0IGRpcmVjdGlvbmFsTGlnaHRXZWlnaHRpbmcgPSBtYXgoZG90KHZlcnRleE5vcm1hbCwgLWRpciksIDAuMCk7XFxuICAgIGRpcmVjdGlvbmFsTGlnaHRGYWN0b3IgKz0gdURpcmVjdGlvbmFsQ29sb3Jbal0gKiBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nO1xcbiAgfVxcblxcblxcbiAgdmVjMyBwb2ludExpZ2h0RmFjdG9yID0gdmVjMygwLjApO1xcblxcbiAgZm9yIChpbnQgayA9IDA7IGsgPCA4OyBrKyspIHtcXG4gICAgaWYgKHVQb2ludExpZ2h0Q291bnQgPT0gaykgYnJlYWs7XFxuICAgIHZlYzMgbG9jID0gKHVWaWV3TWF0cml4ICogdmVjNCh1UG9pbnRMaWdodExvY2F0aW9uW2tdLCAxLjApKS54eXo7XFxuICAgIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBub3JtYWxpemUobG9jIC0gbXZQb3NpdGlvbi54eXopO1xcblxcbiAgICBmbG9hdCBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nID0gbWF4KGRvdCh2ZXJ0ZXhOb3JtYWwsIGxpZ2h0RGlyZWN0aW9uKSwgMC4wKTtcXG5cXG4gICAgZmxvYXQgc3BlY3VsYXJMaWdodFdlaWdodGluZyA9IDAuMDtcXG4gICAgaWYgKHVTcGVjdWxhciApe1xcbiAgICAgIHZlYzMgcmVmbGVjdGlvbkRpcmVjdGlvbiA9IHJlZmxlY3QoLWxpZ2h0RGlyZWN0aW9uLCB2ZXJ0ZXhOb3JtYWwpO1xcbiAgICAgIHNwZWN1bGFyTGlnaHRXZWlnaHRpbmcgPSBwb3cobWF4KGRvdChyZWZsZWN0aW9uRGlyZWN0aW9uLCBleWVEaXJlY3Rpb24pLCAwLjApLCBzaGluaW5lc3MpO1xcbiAgICB9XFxuXFxuICAgIHBvaW50TGlnaHRGYWN0b3IgKz0gdVBvaW50TGlnaHRDb2xvcltrXSAqIChzcGVjdWxhckZhY3RvciAqIHNwZWN1bGFyTGlnaHRXZWlnaHRpbmdcXG4gICAgICArIGRpcmVjdGlvbmFsTGlnaHRXZWlnaHRpbmcgKiBkaWZmdXNlRmFjdG9yKTtcXG4gIH1cXG5cXG4gIHZMaWdodFdlaWdodGluZyA9ICBhbWJpZW50TGlnaHRGYWN0b3IgKyBkaXJlY3Rpb25hbExpZ2h0RmFjdG9yICsgcG9pbnRMaWdodEZhY3RvcjtcXG59XFxuXCIsbGlnaHRUZXh0dXJlRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGJvb2wgaXNUZXh0dXJlO1xcbnVuaWZvcm0gYm9vbCB1VXNlTGlnaHRpbmc7XFxuXFxudmFyeWluZyB2ZWMzIHZMaWdodFdlaWdodGluZztcXG52YXJ5aW5nIGhpZ2hwIHZlYzIgdlZlcnRUZXhDb29yZDtcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gaXNUZXh0dXJlID8gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VmVydFRleENvb3JkKSA6IHVNYXRlcmlhbENvbG9yO1xcbiAgaWYgKHVVc2VMaWdodGluZylcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAqPSB2TGlnaHRXZWlnaHRpbmc7XFxufVwiLHBob25nVmVydDpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbmF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMyBhTm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXhDb29yZDtcXG5cXG51bmlmb3JtIHZlYzMgdUFtYmllbnRDb2xvcls4XTtcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIHVOb3JtYWxNYXRyaXg7XFxudW5pZm9ybSBpbnQgdUFtYmllbnRMaWdodENvdW50O1xcblxcbnZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZBbWJpZW50Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgdmVjNCB2aWV3TW9kZWxQb3NpdGlvbiA9IHVNb2RlbFZpZXdNYXRyaXggKiB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG5cXG4gIC8vIFBhc3MgdmFyeWluZ3MgdG8gZnJhZ21lbnQgc2hhZGVyXFxuICB2Vmlld1Bvc2l0aW9uID0gdmlld01vZGVsUG9zaXRpb24ueHl6O1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHZpZXdNb2RlbFBvc2l0aW9uOyAgXFxuXFxuICB2Tm9ybWFsID0gbm9ybWFsaXplKHVOb3JtYWxNYXRyaXggKiBub3JtYWxpemUoYU5vcm1hbCkpO1xcbiAgdlRleENvb3JkID0gYVRleENvb3JkO1xcblxcbiAgdkFtYmllbnRDb2xvciA9IHZlYzMoMC4wKTtcXG4gIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7XFxuICAgIGlmICh1QW1iaWVudExpZ2h0Q291bnQgPT0gaSkgYnJlYWs7XFxuICAgIHZBbWJpZW50Q29sb3IgKz0gdUFtYmllbnRDb2xvcltpXTtcXG4gIH1cXG59XFxuXCIsXG5waG9uZ0ZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG4vL3VuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1Vmlld01hdHJpeDtcXG5cXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBib29sIGlzVGV4dHVyZTtcXG51bmlmb3JtIGJvb2wgdVVzZUxpZ2h0aW5nO1xcblxcbnVuaWZvcm0gdmVjMyB1TGlnaHRpbmdEaXJlY3Rpb25bOF07XFxudW5pZm9ybSB2ZWMzIHVEaXJlY3Rpb25hbENvbG9yWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodExvY2F0aW9uWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodENvbG9yWzhdO1xcbnVuaWZvcm0gYm9vbCB1U3BlY3VsYXI7XFxuXFxudW5pZm9ybSBpbnQgdURpcmVjdGlvbmFsTGlnaHRDb3VudDtcXG51bmlmb3JtIGludCB1UG9pbnRMaWdodENvdW50O1xcblxcbnZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZBbWJpZW50Q29sb3I7XFxuXFxudmVjMyBWO1xcbnZlYzMgTjtcXG5cXG5jb25zdCBmbG9hdCBzaGluaW5lc3MgPSAzMi4wO1xcbmNvbnN0IGZsb2F0IHNwZWN1bGFyRmFjdG9yID0gMi4wO1xcbmNvbnN0IGZsb2F0IGRpZmZ1c2VGYWN0b3IgPSAwLjczO1xcblxcbnN0cnVjdCBMaWdodFJlc3VsdCB7XFxuXFx0ZmxvYXQgc3BlY3VsYXI7XFxuXFx0ZmxvYXQgZGlmZnVzZTtcXG59O1xcblxcbmZsb2F0IHBob25nU3BlY3VsYXIoXFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxcbiAgZmxvYXQgc2hpbmluZXNzKSB7XFxuXFxuICB2ZWMzIFIgPSBub3JtYWxpemUocmVmbGVjdCgtbGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpKTsgIFxcbiAgcmV0dXJuIHBvdyhtYXgoMC4wLCBkb3QoUiwgdmlld0RpcmVjdGlvbikpLCBzaGluaW5lc3MpO1xcbn1cXG5cXG5mbG9hdCBsYW1iZXJ0RGlmZnVzZShcXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwpIHtcXG4gIHJldHVybiBtYXgoMC4wLCBkb3QoLWxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSk7XFxufVxcblxcbkxpZ2h0UmVzdWx0IGxpZ2h0KHZlYzMgbGlnaHRWZWN0b3IpIHtcXG5cXG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShsaWdodFZlY3Rvcik7XFxuXFxuICAvL2NvbXB1dGUgb3VyIGRpZmZ1c2UgJiBzcGVjdWxhciB0ZXJtc1xcbiAgTGlnaHRSZXN1bHQgbHI7XFxuICBpZiAodVNwZWN1bGFyKVxcbiAgICBsci5zcGVjdWxhciA9IHBob25nU3BlY3VsYXIoTCwgViwgTiwgc2hpbmluZXNzKTtcXG4gIGxyLmRpZmZ1c2UgPSBsYW1iZXJ0RGlmZnVzZShMLCBOKTtcXG4gIHJldHVybiBscjtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG5cXG4gIFYgPSBub3JtYWxpemUodlZpZXdQb3NpdGlvbik7XFxuICBOID0gdk5vcm1hbDtcXG5cXG4gIHZlYzMgZGlmZnVzZSA9IHZlYzMoMC4wKTtcXG4gIGZsb2F0IHNwZWN1bGFyID0gMC4wO1xcblxcbiAgZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHtcXG4gICAgaWYgKHVEaXJlY3Rpb25hbExpZ2h0Q291bnQgPT0gaikgYnJlYWs7XFxuXFxuICAgIExpZ2h0UmVzdWx0IHJlc3VsdCA9IGxpZ2h0KHVMaWdodGluZ0RpcmVjdGlvbltqXSk7XFxuICAgIGRpZmZ1c2UgKz0gcmVzdWx0LmRpZmZ1c2UgKiB1RGlyZWN0aW9uYWxDb2xvcltqXTtcXG4gICAgc3BlY3VsYXIgKz0gcmVzdWx0LnNwZWN1bGFyO1xcbiAgfVxcblxcbiAgZm9yIChpbnQgayA9IDA7IGsgPCA4OyBrKyspIHtcXG4gICAgaWYgKHVQb2ludExpZ2h0Q291bnQgPT0gaykgYnJlYWs7XFxuXFxuICAgIHZlYzMgbGlnaHRQb3NpdGlvbiA9ICh1Vmlld01hdHJpeCAqIHZlYzQodVBvaW50TGlnaHRMb2NhdGlvbltrXSwgMS4wKSkueHl6O1xcbiAgICB2ZWMzIGxpZ2h0VmVjdG9yID0gdlZpZXdQb3NpdGlvbiAtIGxpZ2h0UG9zaXRpb247XFxuXFx0XFxuICAgIC8vY2FsY3VsYXRlIGF0dGVudWF0aW9uXFxuICAgIGZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgobGlnaHRWZWN0b3IpO1xcbiAgICBmbG9hdCBmYWxsb2ZmID0gNTAwLjAgLyAobGlnaHREaXN0YW5jZSArIDUwMC4wKTtcXG5cXG4gICAgTGlnaHRSZXN1bHQgcmVzdWx0ID0gbGlnaHQobGlnaHRWZWN0b3IpO1xcbiAgICBkaWZmdXNlICs9IHJlc3VsdC5kaWZmdXNlICogZmFsbG9mZiAqIHVQb2ludExpZ2h0Q29sb3Jba107XFxuICAgIHNwZWN1bGFyICs9IHJlc3VsdC5zcGVjdWxhciAqIGZhbGxvZmY7XFxuICB9XFxuXFxuICBnbF9GcmFnQ29sb3IgPSBpc1RleHR1cmUgPyB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXhDb29yZCkgOiB1TWF0ZXJpYWxDb2xvcjtcXG4gIGdsX0ZyYWdDb2xvci5yZ2IgPSBnbF9GcmFnQ29sb3IucmdiICogKGRpZmZ1c2UgKiBkaWZmdXNlRmFjdG9yICsgdkFtYmllbnRDb2xvcikgKyBzcGVjdWxhciAqIHNwZWN1bGFyRmFjdG9yO1xcbn1cIixmb250VmVydDpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbmF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcblxcbnVuaWZvcm0gdmVjNCB1R2x5cGhSZWN0O1xcbnVuaWZvcm0gZmxvYXQgdUdseXBoT2Zmc2V0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxudmFyeWluZyBmbG9hdCB3O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuXFxuICAvLyBzY2FsZSBieSB0aGUgc2l6ZSBvZiB0aGUgZ2x5cGgncyByZWN0YW5nbGVcXG4gIHBvc2l0aW9uVmVjNC54eSAqPSB1R2x5cGhSZWN0Lnp3IC0gdUdseXBoUmVjdC54eTtcXG5cXG4gIC8vIG1vdmUgdG8gdGhlIGNvcm5lciBvZiB0aGUgZ2x5cGhcXG4gIHBvc2l0aW9uVmVjNC54eSArPSB1R2x5cGhSZWN0Lnh5O1xcblxcbiAgLy8gbW92ZSB0byB0aGUgbGV0dGVyJ3MgbGluZSBvZmZzZXRcXG4gIHBvc2l0aW9uVmVjNC54ICs9IHVHbHlwaE9mZnNldDtcXG4gIFxcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuICB2VGV4Q29vcmQgPSBhVGV4Q29vcmQ7XFxuICB3ID0gZ2xfUG9zaXRpb24udztcXG59XFxuXCIsZm9udEZyYWc6XCIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbiNpZiAwXFxuICAvLyBzaW11bGF0ZSBpbnRlZ2VyIG1hdGggdXNpbmcgZmxvYXRzXFxuXFx0I2RlZmluZSBpbnQgZmxvYXRcXG5cXHQjZGVmaW5lIGl2ZWMyIHZlYzJcXG5cXHQjZGVmaW5lIElOVCh4KSBmbG9hdCh4KVxcblxcblxcdGludCBpZmxvb3IoZmxvYXQgdikgeyByZXR1cm4gZmxvb3Iodik7IH1cXG5cXHRpdmVjMiBpZmxvb3IodmVjMiB2KSB7IHJldHVybiBmbG9vcih2KTsgfVxcblxcbiNlbHNlXFxuICAvLyB1c2UgbmF0aXZlIGludGVnZXIgbWF0aFxcblxcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcXG5cXHQjZGVmaW5lIElOVCh4KSB4XFxuXFxuXFx0aW50IGlmbG9vcihmbG9hdCB2KSB7IHJldHVybiBpbnQodik7IH1cXG5cXHRpbnQgaWZsb29yKGludCB2KSB7IHJldHVybiB2OyB9XFxuXFx0aXZlYzIgaWZsb29yKHZlYzIgdikgeyByZXR1cm4gaXZlYzIodik7IH1cXG5cXG4jZW5kaWZcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlclN0cm9rZXM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJSb3dTdHJva2VzO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyUm93cztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlckNvbFN0cm9rZXM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJDb2xzO1xcblxcbnVuaWZvcm0gaXZlYzIgdVN0cm9rZUltYWdlU2l6ZTtcXG51bmlmb3JtIGl2ZWMyIHVDZWxsc0ltYWdlU2l6ZTtcXG51bmlmb3JtIGl2ZWMyIHVHcmlkSW1hZ2VTaXplO1xcblxcbnVuaWZvcm0gaXZlYzIgdUdyaWRPZmZzZXQ7XFxudW5pZm9ybSBpdmVjMiB1R3JpZFNpemU7XFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxuXFxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zXFxuaW50IHJvdW5kKGZsb2F0IHYpIHsgcmV0dXJuIGlmbG9vcih2ICsgMC41KTsgfVxcbml2ZWMyIHJvdW5kKHZlYzIgdikgeyByZXR1cm4gaWZsb29yKHYgKyAwLjUpOyB9XFxuZmxvYXQgc2F0dXJhdGUoZmxvYXQgdikgeyByZXR1cm4gY2xhbXAodiwgMC4wLCAxLjApOyB9XFxudmVjMiBzYXR1cmF0ZSh2ZWMyIHYpIHsgcmV0dXJuIGNsYW1wKHYsIDAuMCwgMS4wKTsgfVxcblxcbmludCBtdWwoZmxvYXQgdjEsIGludCB2Mikge1xcbiAgcmV0dXJuIGlmbG9vcih2MSAqIGZsb2F0KHYyKSk7XFxufVxcblxcbml2ZWMyIG11bCh2ZWMyIHYxLCBpdmVjMiB2Mikge1xcbiAgcmV0dXJuIGlmbG9vcih2MSAqIHZlYzIodjIpICsgMC41KTtcXG59XFxuXFxuLy8gdW5wYWNrIGEgMTYtYml0IGludGVnZXIgZnJvbSBhIGZsb2F0IHZlYzJcXG5pbnQgZ2V0SW50MTYodmVjMiB2KSB7XFxuICBpdmVjMiBpdiA9IHJvdW5kKHYgKiAyNTUuMCk7XFxuICByZXR1cm4gaXYueCAqIElOVCgxMjgpICsgaXYueTtcXG59XFxuXFxudmVjMiBwaXhlbFNjYWxlO1xcbnZlYzIgY292ZXJhZ2UgPSB2ZWMyKDAuMCk7XFxudmVjMiB3ZWlnaHQgPSB2ZWMyKDAuNSk7XFxuY29uc3QgZmxvYXQgbWluRGlzdGFuY2UgPSAxLjAvODE5Mi4wO1xcbmNvbnN0IGZsb2F0IGhhcmRuZXNzID0gMS4wNTsgLy8gYW1vdW50IG9mIGFudGlhbGlhc1xcblxcbi8vIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjdXJ2ZXMgaW4gYSBnbHlwaFxcbmNvbnN0IGludCBOID0gSU5UKDI1MCk7XFxuXFxuLy8gcmV0cmlldmVzIGFuIGluZGV4ZWQgcGl4ZWwgZnJvbSBhIHNhbXBsZXJcXG52ZWM0IGdldFRleGVsKHNhbXBsZXIyRCBzYW1wbGVyLCBpbnQgcG9zLCBpdmVjMiBzaXplKSB7XFxuICBpbnQgd2lkdGggPSBzaXplLng7XFxuICBpbnQgeSA9IGlmbG9vcihwb3MgLyB3aWR0aCk7XFxuICBpbnQgeCA9IHBvcyAtIHkgKiB3aWR0aDsgIC8vIHBvcyAlIHdpZHRoXFxuXFxuICByZXR1cm4gdGV4dHVyZTJEKHNhbXBsZXIsICh2ZWMyKHgsIHkpICsgMC41KSAvIHZlYzIoc2l6ZSkpO1xcbn1cXG5cXG52b2lkIGNhbHVsYXRlQ3Jvc3NpbmdzKHZlYzIgcDAsIHZlYzIgcDEsIHZlYzIgcDIsIG91dCB2ZWMyIEMxLCBvdXQgdmVjMiBDMikge1xcblxcbiAgLy8gZ2V0IHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIHF1YWRyYXRpYyBpbiB0XFxuICB2ZWMyIGEgPSBwMCAtIHAxICogMi4wICsgcDI7XFxuICB2ZWMyIGIgPSBwMCAtIHAxO1xcbiAgdmVjMiBjID0gcDAgLSB2VGV4Q29vcmQ7XFxuXFxuICAvLyBmb3VuZCBvdXQgd2hpY2ggdmFsdWVzIG9mICd0JyBpdCBjcm9zc2VzIHRoZSBheGVzXFxuICB2ZWMyIHN1cmQgPSBzcXJ0KG1heCh2ZWMyKDAuMCksIGIgKiBiIC0gYSAqIGMpKTtcXG4gIHZlYzIgdDEgPSAoKGIgLSBzdXJkKSAvIGEpLnl4O1xcbiAgdmVjMiB0MiA9ICgoYiArIHN1cmQpIC8gYSkueXg7XFxuXFxuICAvLyBhcHByb3hpbWF0ZSBzdHJhaWdodCBsaW5lcyB0byBhdm9pZCByb3VuZGluZyBlcnJvcnNcXG4gIGlmIChhYnMoYS55KSA8IDAuMDAxKVxcbiAgICB0MS54ID0gdDIueCA9IGMueSAvICgyLjAgKiBiLnkpO1xcblxcbiAgaWYgKGFicyhhLngpIDwgMC4wMDEpXFxuICAgIHQxLnkgPSB0Mi55ID0gYy54IC8gKDIuMCAqIGIueCk7XFxuXFxuICAvLyBwbHVnIGludG8gcXVhZHJhdGljIGZvcm11bGEgdG8gZmluZCB0aGUgY29ycmRpbmF0ZXMgb2YgdGhlIGNyb3NzaW5nc1xcbiAgQzEgPSAoKGEgKiB0MSAtIGIgKiAyLjApICogdDEgKyBjKSAqIHBpeGVsU2NhbGU7XFxuICBDMiA9ICgoYSAqIHQyIC0gYiAqIDIuMCkgKiB0MiArIGMpICogcGl4ZWxTY2FsZTtcXG59XFxuXFxudm9pZCBjb3ZlcmFnZVgodmVjMiBwMCwgdmVjMiBwMSwgdmVjMiBwMikge1xcblxcbiAgdmVjMiBDMSwgQzI7XFxuICBjYWx1bGF0ZUNyb3NzaW5ncyhwMCwgcDEsIHAyLCBDMSwgQzIpO1xcblxcbiAgLy8gZGV0ZXJtaW5lIG9uIHdoaWNoIHNpZGUgb2YgdGhlIHgtYXhpcyB0aGUgcG9pbnRzIGxpZVxcbiAgYm9vbCB5MCA9IHAwLnkgPiB2VGV4Q29vcmQueTtcXG4gIGJvb2wgeTEgPSBwMS55ID4gdlRleENvb3JkLnk7XFxuICBib29sIHkyID0gcDIueSA+IHZUZXhDb29yZC55O1xcblxcbiAgLy8gY291bGQgd2ViIGJlIHVuZGVyIHRoZSBjdXJ2ZSAoYWZ0ZXIgdDEpP1xcbiAgaWYgKHkxID8gIXkyIDogeTApIHtcXG4gICAgLy8gYWRkIHRoZSBjb3ZlcmFnZSBmb3IgdDFcXG4gICAgY292ZXJhZ2UueCArPSBzYXR1cmF0ZShDMS54ICsgMC41KTtcXG4gICAgLy8gY2FsY3VsYXRlIHRoZSBhbnRpLWFsaWFzaW5nIGZvciB0MVxcbiAgICB3ZWlnaHQueCA9IG1pbih3ZWlnaHQueCwgYWJzKEMxLngpKTtcXG4gIH1cXG5cXG4gIC8vIGFyZSB3ZSBvdXRzaWRlIHRoZSBjdXJ2ZSAoYWZ0ZXIgdDIpP1xcbiAgaWYgKHkxID8gIXkwIDogeTIpIHtcXG4gICAgLy8gc3VidHJhY3QgdGhlIGNvdmVyYWdlIGZvciB0MlxcbiAgICBjb3ZlcmFnZS54IC09IHNhdHVyYXRlKEMyLnggKyAwLjUpO1xcbiAgICAvLyBjYWxjdWxhdGUgdGhlIGFudGktYWxpYXNpbmcgZm9yIHQyXFxuICAgIHdlaWdodC54ID0gbWluKHdlaWdodC54LCBhYnMoQzIueCkpO1xcbiAgfVxcbn1cXG5cXG4vLyB0aGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIGNvdmVyYWdlWCwgYnV0IHdpdGggdGhlIGF4ZXMgc3dhcHBlZFxcbnZvaWQgY292ZXJhZ2VZKHZlYzIgcDAsIHZlYzIgcDEsIHZlYzIgcDIpIHtcXG5cXG4gIHZlYzIgQzEsIEMyO1xcbiAgY2FsdWxhdGVDcm9zc2luZ3MocDAsIHAxLCBwMiwgQzEsIEMyKTtcXG5cXG4gIGJvb2wgeDAgPSBwMC54ID4gdlRleENvb3JkLng7XFxuICBib29sIHgxID0gcDEueCA+IHZUZXhDb29yZC54O1xcbiAgYm9vbCB4MiA9IHAyLnggPiB2VGV4Q29vcmQueDtcXG5cXG4gIGlmICh4MSA/ICF4MiA6IHgwKSB7XFxuICAgIGNvdmVyYWdlLnkgLT0gc2F0dXJhdGUoQzEueSArIDAuNSk7XFxuICAgIHdlaWdodC55ID0gbWluKHdlaWdodC55LCBhYnMoQzEueSkpO1xcbiAgfVxcblxcbiAgaWYgKHgxID8gIXgwIDogeDIpIHtcXG4gICAgY292ZXJhZ2UueSArPSBzYXR1cmF0ZShDMi55ICsgMC41KTtcXG4gICAgd2VpZ2h0LnkgPSBtaW4od2VpZ2h0LnksIGFicyhDMi55KSk7XFxuICB9XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG5cXG4gIC8vIGNhbGN1bGF0ZSB0aGUgcGl4ZWwgc2NhbGUgYmFzZWQgb24gc2NyZWVuLWNvb3JkaW5hdGVzXFxuICBwaXhlbFNjYWxlID0gaGFyZG5lc3MgLyBmd2lkdGgodlRleENvb3JkKTtcXG5cXG4gIC8vIHdoaWNoIGdyaWQgY2VsbCBpcyB0aGlzIHBpeGVsIGluP1xcbiAgaXZlYzIgZ3JpZENvb3JkID0gaWZsb29yKHZUZXhDb29yZCAqIHZlYzIodUdyaWRTaXplKSk7XFxuXFxuICAvLyBpbnRlcnNlY3QgY3VydmVzIGluIHRoaXMgcm93XFxuICB7XFxuICAgIC8vIHRoZSBpbmRleCBpbnRvIHRoZSByb3cgaW5mbyBiaXRtYXBcXG4gICAgaW50IHJvd0luZGV4ID0gZ3JpZENvb3JkLnkgKyB1R3JpZE9mZnNldC55O1xcbiAgICAvLyBmZXRjaCB0aGUgaW5mbyB0ZXhlbFxcbiAgICB2ZWM0IHJvd0luZm8gPSBnZXRUZXhlbCh1U2FtcGxlclJvd3MsIHJvd0luZGV4LCB1R3JpZEltYWdlU2l6ZSk7XFxuICAgIC8vIHVucGFjayB0aGUgcm93SW5mb1xcbiAgICBpbnQgcm93U3Ryb2tlSW5kZXggPSBnZXRJbnQxNihyb3dJbmZvLnh5KTtcXG4gICAgaW50IHJvd1N0cm9rZUNvdW50ID0gZ2V0SW50MTYocm93SW5mby56dyk7XFxuXFxuICAgIGZvciAoaW50IGlSb3dTdHJva2UgPSBJTlQoMCk7IGlSb3dTdHJva2UgPCBOOyBpUm93U3Ryb2tlKyspIHtcXG4gICAgICBpZiAoaVJvd1N0cm9rZSA+PSByb3dTdHJva2VDb3VudClcXG4gICAgICAgIGJyZWFrO1xcblxcbiAgICAgIC8vIGVhY2ggc3Ryb2tlIGlzIG1hZGUgdXAgb2YgMyBwb2ludHM6IHRoZSBzdGFydCBhbmQgY29udHJvbCBwb2ludFxcbiAgICAgIC8vIGFuZCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY3VydmUuXFxuICAgICAgLy8gZmV0Y2ggdGhlIGluZGljZXMgb2YgdGhpcyBwYWlyIG9mIHN0cm9rZXM6XFxuICAgICAgdmVjNCBzdHJva2VJbmRpY2VzID0gZ2V0VGV4ZWwodVNhbXBsZXJSb3dTdHJva2VzLCByb3dTdHJva2VJbmRleCsrLCB1Q2VsbHNJbWFnZVNpemUpO1xcblxcbiAgICAgIC8vIHVucGFjayB0aGUgc3Ryb2tlIGluZGV4XFxuICAgICAgaW50IHN0cm9rZVBvcyA9IGdldEludDE2KHN0cm9rZUluZGljZXMueHkpO1xcblxcbiAgICAgIC8vIGZldGNoIHRoZSB0d28gc3Ryb2tlc1xcbiAgICAgIHZlYzQgc3Ryb2tlMCA9IGdldFRleGVsKHVTYW1wbGVyU3Ryb2tlcywgc3Ryb2tlUG9zICsgSU5UKDApLCB1U3Ryb2tlSW1hZ2VTaXplKTtcXG4gICAgICB2ZWM0IHN0cm9rZTEgPSBnZXRUZXhlbCh1U2FtcGxlclN0cm9rZXMsIHN0cm9rZVBvcyArIElOVCgxKSwgdVN0cm9rZUltYWdlU2l6ZSk7XFxuXFxuICAgICAgLy8gY2FsY3VsYXRlIHRoZSBjb3ZlcmFnZVxcbiAgICAgIGNvdmVyYWdlWChzdHJva2UwLnh5LCBzdHJva2UwLnp3LCBzdHJva2UxLnh5KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLy8gaW50ZXJzZWN0IGN1cnZlcyBpbiB0aGlzIGNvbHVtblxcbiAge1xcbiAgICBpbnQgY29sSW5kZXggPSBncmlkQ29vcmQueCArIHVHcmlkT2Zmc2V0Lng7XFxuICAgIHZlYzQgY29sSW5mbyA9IGdldFRleGVsKHVTYW1wbGVyQ29scywgY29sSW5kZXgsIHVHcmlkSW1hZ2VTaXplKTtcXG4gICAgaW50IGNvbFN0cm9rZUluZGV4ID0gZ2V0SW50MTYoY29sSW5mby54eSk7XFxuICAgIGludCBjb2xTdHJva2VDb3VudCA9IGdldEludDE2KGNvbEluZm8uencpO1xcbiAgICBcXG4gICAgZm9yIChpbnQgaUNvbFN0cm9rZSA9IElOVCgwKTsgaUNvbFN0cm9rZSA8IE47IGlDb2xTdHJva2UrKykge1xcbiAgICAgIGlmIChpQ29sU3Ryb2tlID49IGNvbFN0cm9rZUNvdW50KVxcbiAgICAgICAgYnJlYWs7XFxuXFxuICAgICAgdmVjNCBzdHJva2VJbmRpY2VzID0gZ2V0VGV4ZWwodVNhbXBsZXJDb2xTdHJva2VzLCBjb2xTdHJva2VJbmRleCsrLCB1Q2VsbHNJbWFnZVNpemUpO1xcblxcbiAgICAgIGludCBzdHJva2VQb3MgPSBnZXRJbnQxNihzdHJva2VJbmRpY2VzLnh5KTtcXG4gICAgICB2ZWM0IHN0cm9rZTAgPSBnZXRUZXhlbCh1U2FtcGxlclN0cm9rZXMsIHN0cm9rZVBvcyArIElOVCgwKSwgdVN0cm9rZUltYWdlU2l6ZSk7XFxuICAgICAgdmVjNCBzdHJva2UxID0gZ2V0VGV4ZWwodVNhbXBsZXJTdHJva2VzLCBzdHJva2VQb3MgKyBJTlQoMSksIHVTdHJva2VJbWFnZVNpemUpO1xcbiAgICAgIGNvdmVyYWdlWShzdHJva2UwLnh5LCBzdHJva2UwLnp3LCBzdHJva2UxLnh5KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgd2VpZ2h0ID0gc2F0dXJhdGUoMS4wIC0gd2VpZ2h0ICogMi4wKTtcXG4gIGZsb2F0IGRpc3RhbmNlID0gbWF4KHdlaWdodC54ICsgd2VpZ2h0LnksIG1pbkRpc3RhbmNlKTsgLy8gbWFuaGF0dGFuIGFwcHJveC5cXG4gIGZsb2F0IGFudGlhbGlhcyA9IGFicyhkb3QoY292ZXJhZ2UsIHdlaWdodCkgLyBkaXN0YW5jZSk7XFxuICBmbG9hdCBjb3ZlciA9IG1pbihhYnMoY292ZXJhZ2UueCksIGFicyhjb3ZlcmFnZS55KSk7XFxuICBnbF9GcmFnQ29sb3IgPSB1TWF0ZXJpYWxDb2xvcjtcXG4gIGdsX0ZyYWdDb2xvci5hICo9IHNhdHVyYXRlKG1heChhbnRpYWxpYXMsIGNvdmVyKSk7XFxufVwiLGxpbmVWZXJ0OlwiLypcXG4gIFBhcnQgb2YgdGhlIFByb2Nlc3NpbmcgcHJvamVjdCAtIGh0dHA6Ly9wcm9jZXNzaW5nLm9yZ1xcbiAgQ29weXJpZ2h0IChjKSAyMDEyLTE1IFRoZSBQcm9jZXNzaW5nIEZvdW5kYXRpb25cXG4gIENvcHlyaWdodCAoYykgMjAwNC0xMiBCZW4gRnJ5IGFuZCBDYXNleSBSZWFzXFxuICBDb3B5cmlnaHQgKGMpIDIwMDEtMDQgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neVxcbiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxcbiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xcbiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLjEuXFxuICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcXG4gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXFxuICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxcbiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cXG4gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbFxcbiAgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlXFxuICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLFxcbiAgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBXFxuKi9cXG5cXG4jZGVmaW5lIFBST0NFU1NJTkdfTElORV9TSEFERVJcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBmbG9hdCB1U3Ryb2tlV2VpZ2h0O1xcblxcbnVuaWZvcm0gdmVjNCB1Vmlld3BvcnQ7XFxuXFxuLy8gdXNpbmcgYSBzY2FsZSA8MSBtb3ZlcyB0aGUgbGluZXMgdG93YXJkcyB0aGUgY2FtZXJhXFxuLy8gaW4gb3JkZXIgdG8gcHJldmVudCBwb3BwaW5nIGVmZmVjdHMgZHVlIHRvIGhhbGYgb2ZcXG4vLyB0aGUgbGluZSBkaXNhcHBlYXJpbmcgYmVoaW5kIHRoZSBnZW9tZXRyeSBmYWNlcy5cXG52ZWMzIHNjYWxlID0gdmVjMygwLjk5OTUpO1xcblxcbmF0dHJpYnV0ZSB2ZWM0IGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBhRGlyZWN0aW9uO1xcbiAgXFxudm9pZCBtYWluKCkge1xcbiAgdmVjNCBwb3NwID0gdU1vZGVsVmlld01hdHJpeCAqIGFQb3NpdGlvbjtcXG4gIHZlYzQgcG9zcSA9IHVNb2RlbFZpZXdNYXRyaXggKiAoYVBvc2l0aW9uICsgdmVjNChhRGlyZWN0aW9uLnh5eiwgMCkpO1xcblxcbiAgLy8gTW92aW5nIHZlcnRpY2VzIHNsaWdodGx5IHRvd2FyZCB0aGUgY2FtZXJhXFxuICAvLyB0byBhdm9pZCBkZXB0aC1maWdodGluZyB3aXRoIHRoZSBmaWxsIHRyaWFuZ2xlcy5cXG4gIC8vIERpc2N1c3NlZCBoZXJlOlxcbiAgLy8gaHR0cDovL3d3dy5vcGVuZ2wub3JnL2Rpc2N1c3Npb25fYm9hcmRzL3ViYnRocmVhZHMucGhwP3ViYj1zaG93ZmxhdCZOdW1iZXI9MjUyODQ4ICBcXG4gIHBvc3AueHl6ID0gcG9zcC54eXogKiBzY2FsZTtcXG4gIHBvc3EueHl6ID0gcG9zcS54eXogKiBzY2FsZTtcXG5cXG4gIHZlYzQgcCA9IHVQcm9qZWN0aW9uTWF0cml4ICogcG9zcDtcXG4gIHZlYzQgcSA9IHVQcm9qZWN0aW9uTWF0cml4ICogcG9zcTtcXG5cXG4gIC8vIGZvcm11bGEgdG8gY29udmVydCBmcm9tIGNsaXAgc3BhY2UgKHJhbmdlIC0xLi4xKSB0byBzY3JlZW4gc3BhY2UgKHJhbmdlIDAuLlt3aWR0aCBvciBoZWlnaHRdKVxcbiAgLy8gc2NyZWVuX3AgPSAocC54eS9wLncgKyA8MSwxPikgKiAwLjUgKiB1Vmlld3BvcnQuendcXG5cXG4gIC8vIHByZXZlbnQgZGl2aXNpb24gYnkgVyBieSB0cmFuc2Zvcm1pbmcgdGhlIHRhbmdlbnQgZm9ybXVsYSAoZGl2IGJ5IDAgY2F1c2VzXFxuICAvLyB0aGUgbGluZSB0byBkaXNhcHBlYXIsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvY2Vzc2luZy9wcm9jZXNzaW5nL2lzc3Vlcy81MTgzKVxcbiAgLy8gdCA9IHNjcmVlbl9xIC0gc2NyZWVuX3BcXG4gIC8vXFxuICAvLyB0YW5nZW50IGlzIG5vcm1hbGl6ZWQgYW5kIHdlIGRvbid0IGNhcmUgd2hpY2ggYURpcmVjdGlvbiBpdCBwb2ludHMgdG8gKCstKVxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggc2NyZWVuX3EgLSBzY3JlZW5fcCApXFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCAocS54eS9xLncrPDEsMT4pKjAuNSp1Vmlld3BvcnQuencgLSAocC54eS9wLncrPDEsMT4pKjAuNSp1Vmlld3BvcnQuencgKVxcbiAgLy9cXG4gIC8vIGV4dHJhY3QgY29tbW9uIGZhY3RvciwgPDEsMT4gLSA8MSwxPiBjYW5jZWxzIG91dFxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKHEueHkvcS53IC0gcC54eS9wLncpICogMC41ICogdVZpZXdwb3J0Lnp3IClcXG4gIC8vXFxuICAvLyBjb252ZXJ0IHRvIGNvbW1vbiBkaXZpc29yXFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCAoKHEueHkqcC53IC0gcC54eSpxLncpIC8gKHAudypxLncpKSAqIDAuNSAqIHVWaWV3cG9ydC56dyApXFxuICAvL1xcbiAgLy8gcmVtb3ZlIHRoZSBjb21tb24gc2NhbGFyIGRpdmlzb3IvZmFjdG9yLCBub3QgbmVlZGVkIGR1ZSB0byBub3JtYWxpemUgYW5kICstXFxuICAvLyAoa2VlcCB1Vmlld3BvcnQgLSBjYW4ndCByZW1vdmUgYmVjYXVzZSBpdCBoYXMgZGlmZmVyZW50IGNvbXBvbmVudHMgZm9yIHggYW5kIHlcXG4gIC8vICBhbmQgY29ycmVjdHMgZm9yIGFzcGVjdCByYXRpbywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9jZXNzaW5nL3Byb2Nlc3NpbmcvaXNzdWVzLzUxODEpXFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCAocS54eSpwLncgLSBwLnh5KnEudykgKiB1Vmlld3BvcnQuencgKVxcblxcbiAgdmVjMiB0YW5nZW50ID0gbm9ybWFsaXplKChxLnh5KnAudyAtIHAueHkqcS53KSAqIHVWaWV3cG9ydC56dyk7XFxuXFxuICAvLyBmbGlwIHRhbmdlbnQgdG8gbm9ybWFsIChpdCdzIGFscmVhZHkgbm9ybWFsaXplZClcXG4gIHZlYzIgbm9ybWFsID0gdmVjMigtdGFuZ2VudC55LCB0YW5nZW50LngpO1xcblxcbiAgZmxvYXQgdGhpY2tuZXNzID0gYURpcmVjdGlvbi53ICogdVN0cm9rZVdlaWdodDtcXG4gIHZlYzIgb2Zmc2V0ID0gbm9ybWFsICogdGhpY2tuZXNzIC8gMi4wO1xcblxcbiAgLy8gUGVyc3BlY3RpdmUgLS0tXFxuICAvLyBjb252ZXJ0IGZyb20gd29ybGQgdG8gY2xpcCBieSBtdWx0aXBseWluZyB3aXRoIHByb2plY3Rpb24gc2NhbGluZyBmYWN0b3JcXG4gIC8vIHRvIGdldCB0aGUgcmlnaHQgdGhpY2tuZXNzIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb2Nlc3NpbmcvcHJvY2Vzc2luZy9pc3N1ZXMvNTE4MilcXG4gIC8vIGludmVydCBZLCBwcm9qZWN0aW9ucyBpbiBQcm9jZXNzaW5nIGludmVydCBZXFxuICB2ZWMyIHBlcnNwU2NhbGUgPSAodVByb2plY3Rpb25NYXRyaXggKiB2ZWM0KDEsIC0xLCAwLCAwKSkueHk7XFxuXFxuICAvLyBObyBQZXJzcGVjdGl2ZSAtLS1cXG4gIC8vIG11bHRpcGx5IGJ5IFcgKHRvIGNhbmNlbCBvdXQgZGl2aXNpb24gYnkgVyBsYXRlciBpbiB0aGUgcGlwZWxpbmUpIGFuZFxcbiAgLy8gY29udmVydCBmcm9tIHNjcmVlbiB0byBjbGlwIChkZXJpdmVkIGZyb20gY2xpcCB0byBzY3JlZW4gYWJvdmUpXFxuICB2ZWMyIG5vUGVyc3BTY2FsZSA9IHAudyAvICgwLjUgKiB1Vmlld3BvcnQuencpO1xcblxcbiAgLy9nbF9Qb3NpdGlvbi54eSA9IHAueHkgKyBvZmZzZXQueHkgKiBtaXgobm9QZXJzcFNjYWxlLCBwZXJzcFNjYWxlLCBmbG9hdChwZXJzcGVjdGl2ZSA+IDApKTtcXG4gIGdsX1Bvc2l0aW9uLnh5ID0gcC54eSArIG9mZnNldC54eSAqIHBlcnNwU2NhbGU7XFxuICBnbF9Qb3NpdGlvbi56dyA9IHAuenc7XFxufVxcblwiLGxpbmVGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxucHJlY2lzaW9uIG1lZGl1bXAgaW50O1xcblxcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB1TWF0ZXJpYWxDb2xvcjtcXG59XCIscG9pbnRWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbnVuaWZvcm0gZmxvYXQgdVBvaW50U2l6ZTtcXG52YXJ5aW5nIGZsb2F0IHZTdHJva2VXZWlnaHQ7XFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnZvaWQgbWFpbigpIHtcXG5cXHR2ZWM0IHBvc2l0aW9uVmVjNCA9ICB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG5cXHRnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG5cXHRnbF9Qb2ludFNpemUgPSB1UG9pbnRTaXplO1xcblxcdHZTdHJva2VXZWlnaHQgPSB1UG9pbnRTaXplO1xcbn1cIixwb2ludEZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5wcmVjaXNpb24gbWVkaXVtcCBpbnQ7XFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcbnZhcnlpbmcgZmxvYXQgdlN0cm9rZVdlaWdodDtcXG5cXG52b2lkIG1haW4oKXtcXG5cXHRmbG9hdCBtYXNrID0gMC4wO1xcblxcblxcdC8vIG1ha2UgYSBjaXJjdWxhciBtYXNrIHVzaW5nIHRoZSBnbF9Qb2ludENvb3JkIChnb2VzIGZyb20gMCAtIDEgb24gYSBwb2ludClcXG4gICAgLy8gbWlnaHQgYmUgYWJsZSB0byBnZXQgYSBuaWNlciBlZGdlIG9uIGJpZyBzdHJva2V3ZWlnaHRzIHdpdGggc21vb3Roc3RlcCBidXQgc2xpZ2h0bHkgbGVzcyBwZXJmb3JtYW50XFxuXFxuXFx0bWFzayA9IHN0ZXAoMC45OCwgbGVuZ3RoKGdsX1BvaW50Q29vcmQgKiAyLjAgLSAxLjApKTtcXG5cXG5cXHQvLyBpZiBzdHJva2VXZWlnaHQgaXMgMSBvciBsZXNzIGxldHMganVzdCBkcmF3IGEgc3F1YXJlXFxuXFx0Ly8gdGhpcyBwcmV2ZW50cyB3ZWlyZCBhcnRpZmFjdGluZyBmcm9tIGNhcnZpbmcgY2lyY2xlcyB3aGVuIG91ciBwb2ludHMgYXJlIHJlYWxseSBzbWFsbFxcblxcdC8vIGlmIHN0cm9rZVdlaWdodCBpcyBsYXJnZXIgdGhhbiAxLCB3ZSBqdXN0IHVzZSBpdCBhcyBpc1xcblxcblxcdG1hc2sgPSBtaXgoMC4wLCBtYXNrLCBjbGFtcChmbG9vcih2U3Ryb2tlV2VpZ2h0IC0gMC41KSwwLjAsMS4wKSk7XFxuXFxuXFx0Ly8gdGhyb3cgYXdheSB0aGUgYm9yZGVycyBvZiB0aGUgbWFza1xcbiAgICAvLyBvdGhlcndpc2Ugd2UgZ2V0IHdlaXJkIGFscGhhIGJsZW5kaW5nIGlzc3Vlc1xcblxcblxcdGlmKG1hc2sgPiAwLjk4KXtcXG4gICAgICBkaXNjYXJkO1xcbiAgXFx0fVxcblxcbiAgXFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCh1TWF0ZXJpYWxDb2xvci5yZ2IgKiAoMS4wIC0gbWFzayksIHVNYXRlcmlhbENvbG9yLmEpIDtcXG59XCJ9O2QuUmVuZGVyZXJHTD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gZC5SZW5kZXJlci5jYWxsKHRoaXMsYSxiLGMpLHRoaXMuYXR0cmlidXRlcz17fSxlPWV8fHt9LHRoaXMuYXR0cmlidXRlcy5hbHBoYT12b2lkIDA9PT1lLmFscGhhfHxlLmFscGhhLHRoaXMuYXR0cmlidXRlcy5kZXB0aD12b2lkIDA9PT1lLmRlcHRofHxlLmRlcHRoLHRoaXMuYXR0cmlidXRlcy5zdGVuY2lsPXZvaWQgMD09PWUuc3RlbmNpbHx8ZS5zdGVuY2lsLHRoaXMuYXR0cmlidXRlcy5hbnRpYWxpYXM9dm9pZCAwIT09ZS5hbnRpYWxpYXMmJmUuYW50aWFsaWFzLHRoaXMuYXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGE9dm9pZCAwIT09ZS5wcmVtdWx0aXBsaWVkQWxwaGEmJmUucHJlbXVsdGlwbGllZEFscGhhLHRoaXMuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9dm9pZCAwPT09ZS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJ8fGUucHJlc2VydmVEcmF3aW5nQnVmZmVyLHRoaXMuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nPXZvaWQgMCE9PWUucGVyUGl4ZWxMaWdodGluZyYmZS5wZXJQaXhlbExpZ2h0aW5nLHRoaXMuX2luaXRDb250ZXh0KCksdGhpcy5pc1AzRD0hMCx0aGlzLkdMPXRoaXMuZHJhd2luZ0NvbnRleHQsdGhpcy5hbWJpZW50TGlnaHRDb2xvcnM9W10sdGhpcy5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucz1bXSx0aGlzLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnM9W10sdGhpcy5wb2ludExpZ2h0UG9zaXRpb25zPVtdLHRoaXMucG9pbnRMaWdodENvbG9ycz1bXSx0aGlzLnVNVk1hdHJpeD1uZXcgZC5NYXRyaXgsdGhpcy51UE1hdHJpeD1uZXcgZC5NYXRyaXgsdGhpcy51Tk1hdHJpeD1uZXcgZC5NYXRyaXgoXCJtYXQzXCIpLHRoaXMuX2N1ckNhbWVyYT1uZXcgZC5DYW1lcmEodGhpcyksdGhpcy5fY3VyQ2FtZXJhLl9jb21wdXRlQ2FtZXJhRGVmYXVsdFNldHRpbmdzKCksdGhpcy5fY3VyQ2FtZXJhLl9zZXREZWZhdWx0Q2FtZXJhKCksdGhpcy5nSGFzaD17fSx0aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXI9dm9pZCAwLHRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9ybWFsU2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXI9dm9pZCAwLHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcj12b2lkIDAsdGhpcy5jdXJGaWxsU2hhZGVyPXZvaWQgMCx0aGlzLmN1clN0cm9rZVNoYWRlcj12b2lkIDAsdGhpcy5jdXJQb2ludFNoYWRlcj12b2lkIDAsdGhpcy5fdXNlQ29sb3JTaGFkZXIoKSx0aGlzLnNldFN0cm9rZVNoYWRlcih0aGlzLl9nZXRMaW5lU2hhZGVyKCkpLHRoaXMuX3VzZVBvaW50U2hhZGVyKCksdGhpcy5fcG9pbnRWZXJ0ZXhCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmlzSW1tZWRpYXRlRHJhd2luZz0hMSx0aGlzLmltbWVkaWF0ZU1vZGU9e30sdGhpcy5maWxsKDI1NSwyNTUsMjU1LDI1NSksdGhpcy5wb2ludFNpemU9NSx0aGlzLnN0cm9rZVdlaWdodCgxKSx0aGlzLnN0cm9rZSgwLDAsMCksdGhpcy50ZXh0dXJlcz1bXSx0aGlzLl9jdXJ2ZVRpZ2h0bmVzcz02LHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyPVtdLHRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljPVtdLHRoaXMuX2x1dEJlemllckRldGFpbD0wLHRoaXMuX2x1dFF1YWRyYXRpY0RldGFpbD0wLHRoaXMuX3Rlc3N5PXRoaXMuX2luaXRUZXNzeSgpLHRoaXMuZm9udEluZm9zPXt9LHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlJlbmRlcmVyLnByb3RvdHlwZSksZC5SZW5kZXJlckdMLnByb3RvdHlwZS5faW5pdENvbnRleHQ9ZnVuY3Rpb24oKXt0cnl7aWYodGhpcy5kcmF3aW5nQ29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwid2ViZ2xcIix0aGlzLmF0dHJpYnV0ZXMpfHx0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiZXhwZXJpbWVudGFsLXdlYmdsXCIsdGhpcy5hdHRyaWJ1dGVzKSxudWxsPT09dGhpcy5kcmF3aW5nQ29udGV4dCl0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciBjcmVhdGluZyB3ZWJnbCBjb250ZXh0XCIpO2NvbnNvbGUubG9nKFwicDUuUmVuZGVyZXJHTDogZW5hYmxlZCB3ZWJnbCBjb250ZXh0XCIpO3ZhciBhPXRoaXMuZHJhd2luZ0NvbnRleHQ7YS5lbmFibGUoYS5ERVBUSF9URVNUKSxhLmRlcHRoRnVuYyhhLkxFUVVBTCksYS52aWV3cG9ydCgwLDAsYS5kcmF3aW5nQnVmZmVyV2lkdGgsYS5kcmF3aW5nQnVmZmVySGVpZ2h0KSx0aGlzLl92aWV3cG9ydD10aGlzLmRyYXdpbmdDb250ZXh0LmdldFBhcmFtZXRlcih0aGlzLmRyYXdpbmdDb250ZXh0LlZJRVdQT1JUKX1jYXRjaChhKXt0aHJvdyBhfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fcmVzZXRDb250ZXh0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZT10aGlzLndpZHRoLGY9dGhpcy5oZWlnaHQsZz10aGlzLmNhbnZhcy5pZCxoPXRoaXMuY2FudmFzO2gmJmgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKSxoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksaC5pZD1nLHRoaXMuX3BJbnN0Ll91c2VyTm9kZT90aGlzLl9wSW5zdC5fdXNlck5vZGUuYXBwZW5kQ2hpbGQoaCk6ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSx0aGlzLl9wSW5zdC5jYW52YXM9aDt2YXIgaT1uZXcgZC5SZW5kZXJlckdMKHRoaXMuX3BJbnN0LmNhbnZhcyx0aGlzLl9wSW5zdCwhMCxhKTt0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJfcmVuZGVyZXJcIixpKSxpLnJlc2l6ZShlLGYpLGkuX2FwcGx5RGVmYXVsdHMoKSx0aGlzLl9wSW5zdC5fZWxlbWVudHMucHVzaChpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5hcHBseSh3aW5kb3cuX3JlbmRlcmVyLGIpfSwwKX0sZC5wcm90b3R5cGUuc2V0QXR0cmlidXRlcz1mdW5jdGlvbihhLGIpe3RoaXMuX2Fzc2VydDNkKFwic2V0QXR0cmlidXRlc1wiKTt2YXIgYzt2b2lkIDAhPT1iPyhjPXt9LGNbYV09Yik6YSBpbnN0YW5jZW9mIE9iamVjdCYmKGM9YSksdGhpcy5wdXNoKCksdGhpcy5fcmVuZGVyZXIuX3Jlc2V0Q29udGV4dChjKSx0aGlzLnBvcCgpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLnVNVk1hdHJpeC5zZXQodGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzBdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzNdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs0XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzZdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs3XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzldLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTJdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxM10sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTVdKSx0aGlzLmFtYmllbnRMaWdodENvbG9ycy5sZW5ndGg9MCx0aGlzLmRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25zLmxlbmd0aD0wLHRoaXMuZGlyZWN0aW9uYWxMaWdodENvbG9ycy5sZW5ndGg9MCx0aGlzLnBvaW50TGlnaHRQb3NpdGlvbnMubGVuZ3RoPTAsdGhpcy5wb2ludExpZ2h0Q29sb3JzLmxlbmd0aD0wfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmJhY2tncm91bmQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpLGI9YS5sZXZlbHNbMF0vMjU1LGM9YS5sZXZlbHNbMV0vMjU1LGQ9YS5sZXZlbHNbMl0vMjU1LGU9YS5sZXZlbHNbM10vMjU1O3RoaXMuR0wuY2xlYXJDb2xvcihiLGMsZCxlKSx0aGlzLkdMLmRlcHRoTWFzayghMCksdGhpcy5HTC5jbGVhcih0aGlzLkdMLkNPTE9SX0JVRkZFUl9CSVR8dGhpcy5HTC5ERVBUSF9CVUZGRVJfQklUKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGEsYixjLGYpe3ZhciBnPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyk7dGhpcy5jdXJGaWxsQ29sb3I9Zy5fYXJyYXksdGhpcy5pc0ltbWVkaWF0ZURyYXdpbmc/dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldEltbWVkaWF0ZU1vZGVTaGFkZXIoKSk6dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldENvbG9yU2hhZGVyKCkpLHRoaXMuZHJhd01vZGU9ZS5GSUxMLHRoaXMuY3VyRmlsbFNoYWRlci5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLmN1ckZpbGxDb2xvcil9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc3Ryb2tlPWZ1bmN0aW9uKGEsYixjLGUpe2FyZ3VtZW50c1szXT0yNTU7dmFyIGY9ZC5wcm90b3R5cGUuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKTt0aGlzLmN1clN0cm9rZUNvbG9yPWYuX2FycmF5LHRoaXMuY3VyU3Ryb2tlU2hhZGVyLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuY3VyU3Ryb2tlQ29sb3IpLHRoaXMuY3VyUG9pbnRTaGFkZXIuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsZi5fYXJyYXkpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnN0cm9rZVdlaWdodD1mdW5jdGlvbihhKXt0aGlzLmN1clN0cm9rZVdlaWdodCE9PWEmJih0aGlzLnBvaW50U2l6ZT1hLHRoaXMuY3VyU3Ryb2tlV2VpZ2h0PWEsdGhpcy5jdXJTdHJva2VTaGFkZXIuc2V0VW5pZm9ybShcInVTdHJva2VXZWlnaHRcIixhKSx0aGlzLmN1clBvaW50U2hhZGVyLnNldFVuaWZvcm0oXCJ1UG9pbnRTaXplXCIsYSkpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gZC5SZW5kZXJlcjJELnByb3RvdHlwZS5nZXQuYXBwbHkodGhpcyxbYSxiLGMsZV0pfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmxvYWRQaXhlbHM9ZnVuY3Rpb24oKXtpZighMCE9PXRoaXMuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpcmV0dXJuIHZvaWQgY29uc29sZS5sb2coXCJsb2FkUGl4ZWxzIG9ubHkgd29ya3MgaW4gV2ViR0wgd2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgaXMgdHJ1ZS5cIik7dmFyIGE9dGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSxiPXRoaXMud2lkdGgsYz10aGlzLmhlaWdodDtiKj1hLGMqPWEsdm9pZCAwPT09dGhpcy5waXhlbHMmJih0aGlzLnBpeGVscz1uZXcgVWludDhBcnJheSh0aGlzLkdMLmRyYXdpbmdCdWZmZXJXaWR0aCp0aGlzLkdMLmRyYXdpbmdCdWZmZXJIZWlnaHQqNCkpLHRoaXMuR0wucmVhZFBpeGVscygwLDAsYixjLHRoaXMuR0wuUkdCQSx0aGlzLkdMLlVOU0lHTkVEX0JZVEUsdGhpcy5waXhlbHMpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcInBpeGVsc1wiLHRoaXMucGl4ZWxzKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5nZW9tZXRyeUluSGFzaD1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5nSGFzaFthXX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oYSxiKXtkLlJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLGEsYiksdGhpcy5HTC52aWV3cG9ydCgwLDAsdGhpcy5HTC5kcmF3aW5nQnVmZmVyV2lkdGgsdGhpcy5HTC5kcmF3aW5nQnVmZmVySGVpZ2h0KSx0aGlzLl92aWV3cG9ydD10aGlzLkdMLmdldFBhcmFtZXRlcih0aGlzLkdMLlZJRVdQT1JUKSx0aGlzLl9jdXJDYW1lcmEuX3Jlc2l6ZSgpLHZvaWQgMCE9PXRoaXMucGl4ZWxzJiYodGhpcy5waXhlbHM9bmV3IFVpbnQ4QXJyYXkodGhpcy5HTC5kcmF3aW5nQnVmZmVyV2lkdGgqdGhpcy5HTC5kcmF3aW5nQnVmZmVySGVpZ2h0KjQpKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50c1swXXx8MCxiPWFyZ3VtZW50c1sxXXx8MCxjPWFyZ3VtZW50c1syXXx8MCxkPWFyZ3VtZW50c1szXXx8MDt0aGlzLkdMLmNsZWFyQ29sb3IoYSxiLGMsZCksdGhpcy5HTC5jbGVhcih0aGlzLkdMLkNPTE9SX0JVRkZFUl9CSVR8dGhpcy5HTC5ERVBUSF9CVUZGRVJfQklUKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3ImJihjPWEueixiPWEueSxhPWEueCksdGhpcy51TVZNYXRyaXgudHJhbnNsYXRlKFthLGIsY10pLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLnVNVk1hdHJpeC5zY2FsZShhLGIsYyksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwPT09Yj90aGlzLnJvdGF0ZVooYSk6KGFyZ3VtZW50c1swXT10aGlzLl9wSW5zdC5fZnJvbVJhZGlhbnMoYSksZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZS5hcHBseSh0aGlzLnVNVk1hdHJpeCxhcmd1bWVudHMpLHRoaXMpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm90YXRlKGEsMSwwLDApLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3RhdGUoYSwwLDEsMCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvdGF0ZShhLDAsMCwxKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXt2YXIgYT1kLlJlbmRlcmVyLnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMpLGI9YS5wcm9wZXJ0aWVzO3JldHVybiBiLnVNVk1hdHJpeD10aGlzLnVNVk1hdHJpeC5jb3B5KCksYi51UE1hdHJpeD10aGlzLnVQTWF0cml4LmNvcHkoKSxiLl9jdXJDYW1lcmE9dGhpcy5fY3VyQ2FtZXJhLHRoaXMuX2N1ckNhbWVyYT10aGlzLl9jdXJDYW1lcmEuY29weSgpLGF9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucmVzZXRNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51TVZNYXRyaXg9ZC5NYXRyaXguaWRlbnRpdHkodGhpcy5fcEluc3QpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2V0RmlsbFNoYWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jdXJGaWxsU2hhZGVyIT09YSYmKHRoaXMuY3VyRmlsbFNoYWRlcj1hLHRoaXMuY3VyRmlsbFNoYWRlci5pbml0KCkpLHRoaXMuY3VyRmlsbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zZXRQb2ludFNoYWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jdXJQb2ludFNoYWRlciE9PWEmJih0aGlzLmN1clBvaW50U2hhZGVyPWEsdGhpcy5jdXJQb2ludFNoYWRlci5pbml0KCkpLHRoaXMuY3VyUG9pbnRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2V0U3Ryb2tlU2hhZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmN1clN0cm9rZVNoYWRlciE9PWEmJih0aGlzLmN1clN0cm9rZVNoYWRlcj1hLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmluaXQoKSksdGhpcy5jdXJTdHJva2VTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VzZUxpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciYmdGhpcy5jdXJGaWxsU2hhZGVyLmlzTGlnaHRTaGFkZXIoKXx8dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldExpZ2h0U2hhZGVyKCkpLHRoaXMuY3VyRmlsbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXNlQ29sb3JTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJGaWxsU2hhZGVyJiZ0aGlzLmN1ckZpbGxTaGFkZXIhPT10aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcnx8dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldENvbG9yU2hhZGVyKCkpLHRoaXMuY3VyRmlsbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXNlUG9pbnRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJQb2ludFNoYWRlcnx8dGhpcy5zZXRQb2ludFNoYWRlcih0aGlzLl9nZXRQb2ludFNoYWRlcigpKSx0aGlzLmN1clBvaW50U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91c2VJbW1lZGlhdGVNb2RlU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciYmdGhpcy5jdXJGaWxsU2hhZGVyIT09dGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyfHx0aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0SW1tZWRpYXRlTW9kZVNoYWRlcigpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldExpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRMaWdodFNoYWRlcnx8KHRoaXMuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nP3RoaXMuX2RlZmF1bHRMaWdodFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLnBob25nVmVydCxnLnBob25nRnJhZyk6dGhpcy5fZGVmYXVsdExpZ2h0U2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcubGlnaHRWZXJ0LGcubGlnaHRUZXh0dXJlRnJhZykpLHRoaXMuX2RlZmF1bHRMaWdodFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0SW1tZWRpYXRlTW9kZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcnx8KHRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcuaW1tZWRpYXRlVmVydCxnLnZlcnRleENvbG9yRnJhZykpLHRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXROb3JtYWxTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdE5vcm1hbFNoYWRlcnx8KHRoaXMuX2RlZmF1bHROb3JtYWxTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5ub3JtYWxWZXJ0LGcubm9ybWFsRnJhZykpLHRoaXMuX2RlZmF1bHROb3JtYWxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldENvbG9yU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcnx8KHRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLm5vcm1hbFZlcnQsZy5iYXNpY0ZyYWcpKSx0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldFBvaW50U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcnx8KHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLnBvaW50VmVydCxnLnBvaW50RnJhZykpLHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0TGluZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0TGluZVNoYWRlcnx8KHRoaXMuX2RlZmF1bHRMaW5lU2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcubGluZVZlcnQsZy5saW5lRnJhZykpLHRoaXMuX2RlZmF1bHRMaW5lU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRGb250U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2hhZGVyfHwodGhpcy5HTC5nZXRFeHRlbnNpb24oXCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXNcIiksdGhpcy5fZGVmYXVsdEZvbnRTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5mb250VmVydCxnLmZvbnRGcmFnKSksdGhpcy5fZGVmYXVsdEZvbnRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldEVtcHR5VGV4dHVyZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9lbXB0eVRleHR1cmUpe3ZhciBhPW5ldyBkLkltYWdlKDEsMSk7YS5zZXQoMCwwLDI1NSksdGhpcy5fZW1wdHlUZXh0dXJlPW5ldyBkLlRleHR1cmUodGhpcyxhKX1yZXR1cm4gdGhpcy5fZW1wdHlUZXh0dXJlfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmdldFRleHR1cmU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMudGV4dHVyZXMsYz0wO2M8Yi5sZW5ndGg7KytjKXt2YXIgZT1iW2NdO2lmKGUuc3JjPT09YSlyZXR1cm4gZX12YXIgZj1uZXcgZC5UZXh0dXJlKHRoaXMsYSk7cmV0dXJuIHRoaXMudGV4dHVyZXMucHVzaChmKSxmfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9iaW5kQnVmZmVyPWZ1bmN0aW9uKGEsYixjLGQsZSl7aWYodGhpcy5HTC5iaW5kQnVmZmVyKGIsYSksdm9pZCAwIT09Yyl7dmFyIGY9bmV3IGQoYyk7dGhpcy5HTC5idWZmZXJEYXRhKGIsZixlKX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc21vb3RoPWZ1bmN0aW9uKCl7ITE9PT10aGlzLmF0dHJpYnV0ZXMuYW50aWFsaWFzJiZ0aGlzLl9wSW5zdC5zZXRBdHRyaWJ1dGVzKFwiYW50aWFsaWFzXCIsITApfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLm5vU21vb3RoPWZ1bmN0aW9uKCl7ITA9PT10aGlzLmF0dHJpYnV0ZXMuYW50aWFsaWFzJiZ0aGlzLl9wSW5zdC5zZXRBdHRyaWJ1dGVzKFwiYW50aWFsaWFzXCIsITEpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9mbGF0dGVuPWZ1bmN0aW9uKGEpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm5bXTtpZihhLmxlbmd0aD4yZTQpe3ZhciBiLGM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxkPVwiW29iamVjdCBBcnJheV1cIixlPVtdLGY9YS5zbGljZSgpO2I9Zi5wb3AoKTtkb3tjLmNhbGwoYik9PT1kP2YucHVzaC5hcHBseShmLGIpOmUucHVzaChiKX13aGlsZShmLmxlbmd0aCYmdm9pZCAwIT09KGI9Zi5wb3AoKSkpO3JldHVybiBlLnJldmVyc2UoKSxlfXJldHVybltdLmNvbmNhdC5hcHBseShbXSxhKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdlRvTkFycmF5PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9mbGF0dGVuKGEubWFwKGZ1bmN0aW9uKGEpe3JldHVyblthLngsYS55LGEuel19KSl9LGQucHJvdG90eXBlLl9hc3NlcnQzZD1mdW5jdGlvbihhKXtpZighdGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhyb3cgbmV3IEVycm9yKGErXCIoKSBpcyBvbmx5IHN1cHBvcnRlZCBpbiBXRUJHTCBtb2RlLiBJZiB5b3UnZCBsaWtlIHRvIHVzZSAzRCBncmFwaGljcyBhbmQgV2ViR0wsIHNlZSAgaHR0cHM6Ly9wNWpzLm9yZy9leGFtcGxlcy9mb3JtLTNkLXByaW1pdGl2ZXMuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIil9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2luaXRUZXNzeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtiW2IubGVuZ3RoXT1hWzBdLGJbYi5sZW5ndGhdPWFbMV0sYltiLmxlbmd0aF09YVsyXX1mdW5jdGlvbiBiKGEpe2EhPT1mLnByaW1pdGl2ZVR5cGUuR0xfVFJJQU5HTEVTJiZjb25zb2xlLmxvZyhcImV4cGVjdGVkIFRSSUFOR0xFUyBidXQgZ290IHR5cGU6IFwiK2EpfWZ1bmN0aW9uIGMoYSl7Y29uc29sZS5sb2coXCJlcnJvciBjYWxsYmFja1wiKSxjb25zb2xlLmxvZyhcImVycm9yIG51bWJlcjogXCIrYSl9ZnVuY3Rpb24gZChhLGIsYyl7cmV0dXJuW2FbMF0sYVsxXSxhWzJdXX1mdW5jdGlvbiBlKGEpe312YXIgZz1uZXcgZi5HbHVUZXNzZWxhdG9yO3JldHVybiBnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfVkVSVEVYX0RBVEEsYSksZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX0JFR0lOLGIpLGcuZ2x1VGVzc0NhbGxiYWNrKGYuZ2x1RW51bS5HTFVfVEVTU19FUlJPUixjKSxnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfQ09NQklORSxkKSxnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfRURHRV9GTEFHLGUpLGd9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3RyaWFuZ3VsYXRlPWZ1bmN0aW9uKGEpe3RoaXMuX3Rlc3N5LmdsdVRlc3NOb3JtYWwoMCwwLDEpO3ZhciBiPVtdO3RoaXMuX3Rlc3N5LmdsdVRlc3NCZWdpblBvbHlnb24oYik7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3RoaXMuX3Rlc3N5LmdsdVRlc3NCZWdpbkNvbnRvdXIoKTtmb3IodmFyIGQ9YVtjXSxlPTA7ZTxkLmxlbmd0aDtlKz0zKXt2YXIgZj1bZFtlXSxkW2UrMV0sZFtlKzJdXTt0aGlzLl90ZXNzeS5nbHVUZXNzVmVydGV4KGYsZil9dGhpcy5fdGVzc3kuZ2x1VGVzc0VuZENvbnRvdXIoKX1yZXR1cm4gdGhpcy5fdGVzc3kuZ2x1VGVzc0VuZFBvbHlnb24oKSxifSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9iZXppZXJDb2VmZmljaWVudHM9ZnVuY3Rpb24oYSl7dmFyIGI9YSphLGM9YiphLGQ9MS1hLGU9ZCpkO3JldHVybltlKmQsMyplKmEsMypkKmIsY119LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3F1YWRyYXRpY0NvZWZmaWNpZW50cz1mdW5jdGlvbihhKXt2YXIgYj1hKmEsYz0xLWE7cmV0dXJuW2MqYywyKmMqYSxiXX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fYmV6aWVyVG9DYXRtdWxsPWZ1bmN0aW9uKGEpe3JldHVyblthWzFdLGFbMV0rKGFbMl0tYVswXSkvdGhpcy5fY3VydmVUaWdodG5lc3MsYVsyXS0oYVszXS1hWzFdKS90aGlzLl9jdXJ2ZVRpZ2h0bmVzcyxhWzJdXX0sYi5leHBvcnRzPWQuUmVuZGVyZXJHTH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi4vY29yZS9wNS5SZW5kZXJlclwiOjI3LFwiLi9wNS5DYW1lcmFcIjo2OSxcIi4vcDUuTWF0cml4XCI6NzEsXCIuL3A1LlNoYWRlclwiOjc1LGxpYnRlc3M6OX1dLDc1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlNoYWRlcj1mdW5jdGlvbihhLGIsYyl7dGhpcy5fcmVuZGVyZXI9YSx0aGlzLl92ZXJ0U3JjPWIsdGhpcy5fZnJhZ1NyYz1jLHRoaXMuX3ZlcnRTaGFkZXI9LTEsdGhpcy5fZnJhZ1NoYWRlcj0tMSx0aGlzLl9nbFByb2dyYW09MCx0aGlzLl9sb2FkZWRBdHRyaWJ1dGVzPSExLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLl9sb2FkZWRVbmlmb3Jtcz0hMSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMuX2JvdW5kPSExLHRoaXMuc2FtcGxlcnM9W119LGQuU2hhZGVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuX2dsUHJvZ3JhbSl7dmFyIGE9dGhpcy5fcmVuZGVyZXIuR0w7aWYodGhpcy5fdmVydFNoYWRlcj1hLmNyZWF0ZVNoYWRlcihhLlZFUlRFWF9TSEFERVIpLGEuc2hhZGVyU291cmNlKHRoaXMuX3ZlcnRTaGFkZXIsdGhpcy5fdmVydFNyYyksYS5jb21waWxlU2hhZGVyKHRoaXMuX3ZlcnRTaGFkZXIpLCFhLmdldFNoYWRlclBhcmFtZXRlcih0aGlzLl92ZXJ0U2hhZGVyLGEuQ09NUElMRV9TVEFUVVMpKXJldHVybiBjb25zb2xlLmVycm9yKFwiWWlrZXMhIEFuIGVycm9yIG9jY3VycmVkIGNvbXBpbGluZyB0aGUgdmVydGV4IHNoYWRlcjpcIithLmdldFNoYWRlckluZm9Mb2codGhpcy5fdmVydFNoYWRlcikpLG51bGw7aWYodGhpcy5fZnJhZ1NoYWRlcj1hLmNyZWF0ZVNoYWRlcihhLkZSQUdNRU5UX1NIQURFUiksYS5zaGFkZXJTb3VyY2UodGhpcy5fZnJhZ1NoYWRlcix0aGlzLl9mcmFnU3JjKSxhLmNvbXBpbGVTaGFkZXIodGhpcy5fZnJhZ1NoYWRlciksIWEuZ2V0U2hhZGVyUGFyYW1ldGVyKHRoaXMuX2ZyYWdTaGFkZXIsYS5DT01QSUxFX1NUQVRVUykpcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJEYXJuISBBbiBlcnJvciBvY2N1cnJlZCBjb21waWxpbmcgdGhlIGZyYWdtZW50IHNoYWRlcjpcIithLmdldFNoYWRlckluZm9Mb2codGhpcy5fZnJhZ1NoYWRlcikpLG51bGw7dGhpcy5fZ2xQcm9ncmFtPWEuY3JlYXRlUHJvZ3JhbSgpLGEuYXR0YWNoU2hhZGVyKHRoaXMuX2dsUHJvZ3JhbSx0aGlzLl92ZXJ0U2hhZGVyKSxhLmF0dGFjaFNoYWRlcih0aGlzLl9nbFByb2dyYW0sdGhpcy5fZnJhZ1NoYWRlciksYS5saW5rUHJvZ3JhbSh0aGlzLl9nbFByb2dyYW0pLGEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLl9nbFByb2dyYW0sYS5MSU5LX1NUQVRVUyl8fGNvbnNvbGUuZXJyb3IoXCJTbmFwISBFcnJvciBsaW5raW5nIHNoYWRlciBwcm9ncmFtOiBcIithLmdldFByb2dyYW1JbmZvTG9nKHRoaXMuX2dsUHJvZ3JhbSkpLHRoaXMuX2xvYWRBdHRyaWJ1dGVzKCksdGhpcy5fbG9hZFVuaWZvcm1zKCl9cmV0dXJuIHRoaXN9LGQuU2hhZGVyLnByb3RvdHlwZS5fbG9hZEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkQXR0cmlidXRlcyl7dGhpcy5hdHRyaWJ1dGVzPXt9O2Zvcih2YXIgYT10aGlzLl9yZW5kZXJlci5HTCxiPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLl9nbFByb2dyYW0sYS5BQ1RJVkVfQVRUUklCVVRFUyksYz0wO2M8YjsrK2Mpe3ZhciBkPWEuZ2V0QWN0aXZlQXR0cmliKHRoaXMuX2dsUHJvZ3JhbSxjKSxlPWQubmFtZSxmPWEuZ2V0QXR0cmliTG9jYXRpb24odGhpcy5fZ2xQcm9ncmFtLGUpLGc9e307Zy5uYW1lPWUsZy5sb2NhdGlvbj1mLGcudHlwZT1kLnR5cGUsZy5zaXplPWQuc2l6ZSx0aGlzLmF0dHJpYnV0ZXNbZV09Z310aGlzLl9sb2FkZWRBdHRyaWJ1dGVzPSEwfX0sZC5TaGFkZXIucHJvdG90eXBlLl9sb2FkVW5pZm9ybXM9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkVW5pZm9ybXMpe2Zvcih2YXIgYT10aGlzLl9yZW5kZXJlci5HTCxiPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLl9nbFByb2dyYW0sYS5BQ1RJVkVfVU5JRk9STVMpLGM9MCxkPTA7ZDxiOysrZCl7dmFyIGU9YS5nZXRBY3RpdmVVbmlmb3JtKHRoaXMuX2dsUHJvZ3JhbSxkKSxmPXt9O2YubG9jYXRpb249YS5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5fZ2xQcm9ncmFtLGUubmFtZSksZi5zaXplPWUuc2l6ZTt2YXIgZz1lLm5hbWU7ZS5zaXplPjEmJihnPWcuc3Vic3RyaW5nKDAsZy5pbmRleE9mKFwiWzBdXCIpKSksZi5uYW1lPWcsZi50eXBlPWUudHlwZSxmLnR5cGU9PT1hLlNBTVBMRVJfMkQmJihmLnNhbXBsZXJJbmRleD1jLGMrKyx0aGlzLnNhbXBsZXJzLnB1c2goZikpLHRoaXMudW5pZm9ybXNbZ109Zn10aGlzLl9sb2FkZWRVbmlmb3Jtcz0hMH19LGQuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlPWZ1bmN0aW9uKCl7fSxkLlNoYWRlci5wcm90b3R5cGUuYmluZFNoYWRlcj1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuX2JvdW5kfHwodGhpcy51c2VQcm9ncmFtKCksdGhpcy5fYm91bmQ9ITAsdGhpcy5iaW5kVGV4dHVyZXMoKSx0aGlzLl9zZXRNYXRyaXhVbmlmb3JtcygpLHRoaXM9PT10aGlzLl9yZW5kZXJlci5jdXJTdHJva2VTaGFkZXImJnRoaXMuX3NldFZpZXdwb3J0VW5pZm9ybSgpKX0sZC5TaGFkZXIucHJvdG90eXBlLnVuYmluZFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib3VuZCYmKHRoaXMudW5iaW5kVGV4dHVyZXMoKSx0aGlzLl9ib3VuZD0hMSksdGhpc30sZC5TaGFkZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlcz1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9yZW5kZXJlci5HTCxiPTA7Yjx0aGlzLnNhbXBsZXJzLmxlbmd0aDtiKyspe3ZhciBjPXRoaXMuc2FtcGxlcnNbYl0sZD1jLnRleHR1cmU7dm9pZCAwPT09ZCYmKGQ9dGhpcy5fcmVuZGVyZXIuX2dldEVtcHR5VGV4dHVyZSgpKSxhLmFjdGl2ZVRleHR1cmUoYS5URVhUVVJFMCtjLnNhbXBsZXJJbmRleCksZC5iaW5kVGV4dHVyZSgpLGQudXBkYXRlKCksYS51bmlmb3JtMWkoYy5sb2NhdGlvbixjLnNhbXBsZXJJbmRleCl9fSxkLlNoYWRlci5wcm90b3R5cGUudXBkYXRlVGV4dHVyZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPHRoaXMuc2FtcGxlcnMubGVuZ3RoO2ErKyl7dmFyIGI9dGhpcy5zYW1wbGVyc1thXSxjPWIudGV4dHVyZTtjJiZjLnVwZGF0ZSgpfX0sZC5TaGFkZXIucHJvdG90eXBlLnVuYmluZFRleHR1cmVzPWZ1bmN0aW9uKCl7fSxkLlNoYWRlci5wcm90b3R5cGUuX3NldE1hdHJpeFVuaWZvcm1zPWZ1bmN0aW9uKCl7dGhpcy5zZXRVbmlmb3JtKFwidVByb2plY3Rpb25NYXRyaXhcIix0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5tYXQ0KSx0aGlzLnNldFVuaWZvcm0oXCJ1TW9kZWxWaWV3TWF0cml4XCIsdGhpcy5fcmVuZGVyZXIudU1WTWF0cml4Lm1hdDQpLHRoaXMuc2V0VW5pZm9ybShcInVWaWV3TWF0cml4XCIsdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NCksdGhpcz09PXRoaXMuX3JlbmRlcmVyLmN1ckZpbGxTaGFkZXImJih0aGlzLl9yZW5kZXJlci51Tk1hdHJpeC5pbnZlcnNlVHJhbnNwb3NlKHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeCksdGhpcy5zZXRVbmlmb3JtKFwidU5vcm1hbE1hdHJpeFwiLHRoaXMuX3JlbmRlcmVyLnVOTWF0cml4Lm1hdDMpKX0sZC5TaGFkZXIucHJvdG90eXBlLl9zZXRWaWV3cG9ydFVuaWZvcm09ZnVuY3Rpb24oKXt0aGlzLnNldFVuaWZvcm0oXCJ1Vmlld3BvcnRcIix0aGlzLl9yZW5kZXJlci5fdmlld3BvcnQpfSxkLlNoYWRlci5wcm90b3R5cGUudXNlUHJvZ3JhbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5HTC51c2VQcm9ncmFtKHRoaXMuX2dsUHJvZ3JhbSksdGhpc30sZC5TaGFkZXIucHJvdG90eXBlLnNldFVuaWZvcm09ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLnVuaWZvcm1zW2FdO2lmKGMpe3ZhciBkPWMubG9jYXRpb24sZT10aGlzLl9yZW5kZXJlci5HTDtzd2l0Y2godGhpcy51c2VQcm9ncmFtKCksYy50eXBlKXtjYXNlIGUuQk9PTDohMD09PWI/ZS51bmlmb3JtMWkoZCwxKTplLnVuaWZvcm0xaShkLDApO2JyZWFrO2Nhc2UgZS5JTlQ6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTFpdihkLGIpOmUudW5pZm9ybTFpKGQsYik7YnJlYWs7Y2FzZSBlLkZMT0FUOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0xZnYoZCxiKTplLnVuaWZvcm0xZihkLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVF9NQVQzOmUudW5pZm9ybU1hdHJpeDNmdihkLCExLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVF9NQVQ0OmUudW5pZm9ybU1hdHJpeDRmdihkLCExLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVF9WRUMyOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0yZnYoZCxiKTplLnVuaWZvcm0yZihkLGJbMF0sYlsxXSk7YnJlYWs7Y2FzZSBlLkZMT0FUX1ZFQzM6XG5jLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtM2Z2KGQsYik6ZS51bmlmb3JtM2YoZCxiWzBdLGJbMV0sYlsyXSk7YnJlYWs7Y2FzZSBlLkZMT0FUX1ZFQzQ6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTRmdihkLGIpOmUudW5pZm9ybTRmKGQsYlswXSxiWzFdLGJbMl0sYlszXSk7YnJlYWs7Y2FzZSBlLklOVF9WRUMyOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0yaXYoZCxiKTplLnVuaWZvcm0yaShkLGJbMF0sYlsxXSk7YnJlYWs7Y2FzZSBlLklOVF9WRUMzOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0zaXYoZCxiKTplLnVuaWZvcm0zaShkLGJbMF0sYlsxXSxiWzJdKTticmVhaztjYXNlIGUuSU5UX1ZFQzQ6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTRpdihkLGIpOmUudW5pZm9ybTRpKGQsYlswXSxiWzFdLGJbMl0sYlszXSk7YnJlYWs7Y2FzZSBlLlNBTVBMRVJfMkQ6ZS5hY3RpdmVUZXh0dXJlKGUuVEVYVFVSRTArYy5zYW1wbGVySW5kZXgpLGMudGV4dHVyZT10aGlzLl9yZW5kZXJlci5nZXRUZXh0dXJlKGIpLGUudW5pZm9ybTFpKGMubG9jYXRpb24sYy5zYW1wbGVySW5kZXgpfXJldHVybiB0aGlzfX0sZC5TaGFkZXIucHJvdG90eXBlLmlzTGlnaHRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy51bmlmb3Jtcy51VXNlTGlnaHRpbmd8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudUFtYmllbnRMaWdodENvdW50fHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVEaXJlY3Rpb25hbExpZ2h0Q291bnR8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVBvaW50TGlnaHRDb3VudHx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51QW1iaWVudENvbG9yfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVEaXJlY3Rpb25hbENvbG9yfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVQb2ludExpZ2h0TG9jYXRpb258fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVBvaW50TGlnaHRDb2xvcnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51TGlnaHRpbmdEaXJlY3Rpb258fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVNwZWN1bGFyfSxkLlNoYWRlci5wcm90b3R5cGUuaXNUZXh0dXJlU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2FtcGxlckluZGV4PjB9LGQuU2hhZGVyLnByb3RvdHlwZS5pc0NvbG9yU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuYXR0cmlidXRlcy5hVmVydGV4Q29sb3J8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudU1hdGVyaWFsQ29sb3J9LGQuU2hhZGVyLnByb3RvdHlwZS5pc1RleExpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNMaWdodFNoYWRlcigpJiZ0aGlzLmlzVGV4dHVyZVNoYWRlcigpfSxkLlNoYWRlci5wcm90b3R5cGUuaXNTdHJva2VTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy51bmlmb3Jtcy51U3Ryb2tlV2VpZ2h0fSxkLlNoYWRlci5wcm90b3R5cGUuZW5hYmxlQXR0cmliPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz10aGlzLl9yZW5kZXJlci5HTDtyZXR1cm4tMSE9PWEmJihnLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGEpLGcudmVydGV4QXR0cmliUG9pbnRlcihhLGIsYyxkLGUsZikpLHRoaXN9LGIuZXhwb3J0cz1kLlNoYWRlcn0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5UZXh0dXJlPWZ1bmN0aW9uKGEsYil7dGhpcy5fcmVuZGVyZXI9YTt2YXIgYz10aGlzLl9yZW5kZXJlci5HTDt0aGlzLnNyYz1iLHRoaXMuZ2xUZXg9dm9pZCAwLHRoaXMuZ2xUYXJnZXQ9Yy5URVhUVVJFXzJELHRoaXMuZ2xGb3JtYXQ9Yy5SR0JBLHRoaXMubWlwbWFwcz0hMSx0aGlzLmdsTWluRmlsdGVyPWMuTElORUFSLHRoaXMuZ2xNYWdGaWx0ZXI9Yy5MSU5FQVIsdGhpcy5nbFdyYXBTPWMuQ0xBTVBfVE9fRURHRSx0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFLHRoaXMuaXNTcmNNZWRpYUVsZW1lbnQ9dm9pZCAwIT09ZC5NZWRpYUVsZW1lbnQmJmIgaW5zdGFuY2VvZiBkLk1lZGlhRWxlbWVudCx0aGlzLl92aWRlb1ByZXZVcGRhdGVUaW1lPTAsdGhpcy5pc1NyY0hUTUxFbGVtZW50PXZvaWQgMCE9PWQuRWxlbWVudCYmYiBpbnN0YW5jZW9mIGQuRWxlbWVudCYmIShiIGluc3RhbmNlb2YgZC5HcmFwaGljcyksdGhpcy5pc1NyY1A1SW1hZ2U9YiBpbnN0YW5jZW9mIGQuSW1hZ2UsdGhpcy5pc1NyY1A1R3JhcGhpY3M9YiBpbnN0YW5jZW9mIGQuR3JhcGhpY3MsdGhpcy5pc0ltYWdlRGF0YT1cInVuZGVmaW5lZFwiIT10eXBlb2YgSW1hZ2VEYXRhJiZiIGluc3RhbmNlb2YgSW1hZ2VEYXRhO3ZhciBlPXRoaXMuX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZSgpO3JldHVybiB0aGlzLndpZHRoPWUud2lkdGgsdGhpcy5oZWlnaHQ9ZS5oZWlnaHQsdGhpcy5pbml0KGUpLHRoaXN9LGQuVGV4dHVyZS5wcm90b3R5cGUuX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZT1mdW5jdGlvbigpe3ZhciBhO3JldHVybiB0aGlzLmlzU3JjUDVJbWFnZT9hPXRoaXMuc3JjLmNhbnZhczp0aGlzLmlzU3JjTWVkaWFFbGVtZW50fHx0aGlzLmlzU3JjUDVHcmFwaGljc3x8dGhpcy5pc1NyY0hUTUxFbGVtZW50P2E9dGhpcy5zcmMuZWx0OnRoaXMuaXNJbWFnZURhdGEmJihhPXRoaXMuc3JjKSxhfSxkLlRleHR1cmUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fcmVuZGVyZXIuR0w7aWYodGhpcy5nbFRleD1iLmNyZWF0ZVRleHR1cmUoKSx0aGlzLmJpbmRUZXh0dXJlKCksYi50ZXhQYXJhbWV0ZXJpKGIuVEVYVFVSRV8yRCxiLlRFWFRVUkVfTUFHX0ZJTFRFUix0aGlzLmdsTWFnRmlsdGVyKSxiLnRleFBhcmFtZXRlcmkoYi5URVhUVVJFXzJELGIuVEVYVFVSRV9NSU5fRklMVEVSLHRoaXMuZ2xNaW5GaWx0ZXIpLGIudGV4UGFyYW1ldGVyaShiLlRFWFRVUkVfMkQsYi5URVhUVVJFX1dSQVBfUyx0aGlzLmdsV3JhcFMpLGIudGV4UGFyYW1ldGVyaShiLlRFWFRVUkVfMkQsYi5URVhUVVJFX1dSQVBfVCx0aGlzLmdsV3JhcFQpLDA9PT10aGlzLndpZHRofHwwPT09dGhpcy5oZWlnaHR8fHRoaXMuaXNTcmNNZWRpYUVsZW1lbnQmJiF0aGlzLnNyYy5sb2FkZWRtZXRhZGF0YSl7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoWzEsMSwxLDFdKTtiLnRleEltYWdlMkQodGhpcy5nbFRhcmdldCwwLGIuUkdCQSwxLDEsMCx0aGlzLmdsRm9ybWF0LGIuVU5TSUdORURfQllURSxjKX1lbHNlIGIudGV4SW1hZ2UyRCh0aGlzLmdsVGFyZ2V0LDAsdGhpcy5nbEZvcm1hdCx0aGlzLmdsRm9ybWF0LGIuVU5TSUdORURfQllURSxhKX0sZC5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNyYztpZigwPT09YS53aWR0aHx8MD09PWEuaGVpZ2h0KXJldHVybiExO3ZhciBiPXRoaXMuX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZSgpLGM9ITEsZD10aGlzLl9yZW5kZXJlci5HTDtyZXR1cm4gYi53aWR0aCE9PXRoaXMud2lkdGh8fGIuaGVpZ2h0IT09dGhpcy5oZWlnaHQ/KGM9ITAsdGhpcy53aWR0aD1iLndpZHRoLHRoaXMuaGVpZ2h0PWIuaGVpZ2h0LHRoaXMuaXNTcmNQNUltYWdlP2Euc2V0TW9kaWZpZWQoITEpOih0aGlzLmlzU3JjTWVkaWFFbGVtZW50fHx0aGlzLmlzU3JjSFRNTEVsZW1lbnQpJiZhLnNldE1vZGlmaWVkKCEwKSk6dGhpcy5pc1NyY1A1SW1hZ2U/YS5pc01vZGlmaWVkKCkmJihjPSEwLGEuc2V0TW9kaWZpZWQoITEpKTp0aGlzLmlzU3JjTWVkaWFFbGVtZW50P2EuaXNNb2RpZmllZCgpPyhjPSEwLGEuc2V0TW9kaWZpZWQoITEpKTphLmxvYWRlZG1ldGFkYXRhJiZ0aGlzLl92aWRlb1ByZXZVcGRhdGVUaW1lIT09YS50aW1lKCkmJih0aGlzLl92aWRlb1ByZXZVcGRhdGVUaW1lPWEudGltZSgpLGM9ITApOnRoaXMuaXNJbWFnZURhdGE/YS5fZGlydHkmJihhLl9kaXJ0eT0hMSxjPSEwKTpjPSEwLGMmJih0aGlzLmJpbmRUZXh0dXJlKCksZC50ZXhJbWFnZTJEKHRoaXMuZ2xUYXJnZXQsMCx0aGlzLmdsRm9ybWF0LHRoaXMuZ2xGb3JtYXQsZC5VTlNJR05FRF9CWVRFLGIpKSxjfSxkLlRleHR1cmUucHJvdG90eXBlLmJpbmRUZXh0dXJlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLkdMLmJpbmRUZXh0dXJlKHRoaXMuZ2xUYXJnZXQsdGhpcy5nbFRleCksdGhpc30sZC5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmRUZXh0dXJlPWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuR0wuYmluZFRleHR1cmUodGhpcy5nbFRhcmdldCxudWxsKX0sZC5UZXh0dXJlLnByb3RvdHlwZS5zZXRJbnRlcnBvbGF0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fcmVuZGVyZXIuR0w7YT09PWUuTkVBUkVTVD90aGlzLmdsTWluRmlsdGVyPWMuTkVBUkVTVDp0aGlzLmdsTWluRmlsdGVyPWMuTElORUFSLGI9PT1lLk5FQVJFU1Q/dGhpcy5nbE1hZ0ZpbHRlcj1jLk5FQVJFU1Q6dGhpcy5nbE1hZ0ZpbHRlcj1jLkxJTkVBUix0aGlzLmJpbmRUZXh0dXJlKCksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfTUlOX0ZJTFRFUix0aGlzLmdsTWluRmlsdGVyKSxjLnRleFBhcmFtZXRlcmkoYy5URVhUVVJFXzJELGMuVEVYVFVSRV9NQUdfRklMVEVSLHRoaXMuZ2xNYWdGaWx0ZXIpLHRoaXMudW5iaW5kVGV4dHVyZSgpfSxkLlRleHR1cmUucHJvdG90eXBlLnNldFdyYXBNb2RlPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fcmVuZGVyZXIuR0wsZD1mdW5jdGlvbihhKXtyZXR1cm4gMD09KGEmYS0xKX0sZj1kKHRoaXMud2lkdGgpLGc9ZCh0aGlzLndpZHRoKTthPT09ZS5SRVBFQVQ/ZiYmZz90aGlzLmdsV3JhcFM9Yy5SRVBFQVQ6KGNvbnNvbGUud2FybihcIllvdSB0cmllZCB0byBzZXQgdGhlIHdyYXAgbW9kZSB0byBSRVBFQVQgYnV0IHRoZSB0ZXh0dXJlIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgdHdvLiBTZXR0aW5nIHRvIENMQU1QIGluc3RlYWRcIiksdGhpcy5nbFdyYXBTPWMuQ0xBTVBfVE9fRURHRSk6YT09PWUuTUlSUk9SP2YmJmc/dGhpcy5nbFdyYXBTPWMuTUlSUk9SRURfUkVQRUFUOihjb25zb2xlLndhcm4oXCJZb3UgdHJpZWQgdG8gc2V0IHRoZSB3cmFwIG1vZGUgdG8gTUlSUk9SIGJ1dCB0aGUgdGV4dHVyZSBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIHR3by4gU2V0dGluZyB0byBDTEFNUCBpbnN0ZWFkXCIpLHRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UpOnRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UsYj09PWUuUkVQRUFUP2YmJmc/dGhpcy5nbFdyYXBUPWMuUkVQRUFUOihjb25zb2xlLndhcm4oXCJZb3UgdHJpZWQgdG8gc2V0IHRoZSB3cmFwIG1vZGUgdG8gUkVQRUFUIGJ1dCB0aGUgdGV4dHVyZSBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIHR3by4gU2V0dGluZyB0byBDTEFNUCBpbnN0ZWFkXCIpLHRoaXMuZ2xXcmFwVD1jLkNMQU1QX1RPX0VER0UpOmI9PT1lLk1JUlJPUj9mJiZnP3RoaXMuZ2xXcmFwVD1jLk1JUlJPUkVEX1JFUEVBVDooY29uc29sZS53YXJuKFwiWW91IHRyaWVkIHRvIHNldCB0aGUgd3JhcCBtb2RlIHRvIE1JUlJPUiBidXQgdGhlIHRleHR1cmUgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uIFNldHRpbmcgdG8gQ0xBTVAgaW5zdGVhZFwiKSx0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFKTp0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFLHRoaXMuYmluZFRleHR1cmUoKSxjLnRleFBhcmFtZXRlcmkoYy5URVhUVVJFXzJELGMuVEVYVFVSRV9XUkFQX1MsdGhpcy5nbFdyYXBTKSxjLnRleFBhcmFtZXRlcmkoYy5URVhUVVJFXzJELGMuVEVYVFVSRV9XUkFQX1QsdGhpcy5nbFdyYXBUKSx0aGlzLnVuYmluZFRleHR1cmUoKX0sYi5leHBvcnRzPWQuVGV4dHVyZX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7dGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5pbmZvcz1bXSx0aGlzLmZpbmRJbWFnZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLndpZHRoKnRoaXMuaGVpZ2h0O2lmKGE+Yil0aHJvdyBuZXcgRXJyb3IoXCJmb250IGlzIHRvbyBjb21wbGV4IHRvIHJlbmRlciBpbiAzRFwiKTtmb3IodmFyIGMsZCxlPXRoaXMuaW5mb3MubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBmPXRoaXMuaW5mb3NbZV07aWYoZi5pbmRleCthPGIpe2M9ZixkPWYuaW1hZ2VEYXRhO2JyZWFrfX1pZighYyl7dHJ5e2Q9bmV3IEltYWdlRGF0YSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX1jYXRjaChhKXt2YXIgZz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNhbnZhc1wiKVswXSxoPSFnO2d8fChnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksZy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZykpO3ZhciBpPWcuZ2V0Q29udGV4dChcIjJkXCIpO2kmJihkPWkuY3JlYXRlSW1hZ2VEYXRhKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKSxoJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGcpfWM9e2luZGV4OjAsaW1hZ2VEYXRhOmR9LHRoaXMuaW5mb3MucHVzaChjKX12YXIgaj1jLmluZGV4O3JldHVybiBjLmluZGV4Kz1hLGQuX2RpcnR5PSEwLHtpbWFnZURhdGE6ZCxpbmRleDpqfX19ZnVuY3Rpb24gZShhLGIsYyxkLGUpe3ZhciBmPWEuaW1hZ2VEYXRhLGc9Zi5kYXRhLGg9NCphLmluZGV4Kys7Z1toKytdPWIsZ1toKytdPWMsZ1toKytdPWQsZ1toKytdPWV9dmFyIGY9YShcIi4uL2NvcmUvbWFpblwiKSxnPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi9wNS5TaGFkZXJcIiksYShcIi4vcDUuUmVuZGVyZXJHTFwiKSxmLlJlbmRlcmVyR0wucHJvdG90eXBlLl9hcHBseVRleHRQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7fSxmLlJlbmRlcmVyR0wucHJvdG90eXBlLnRleHRXaWR0aD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5faXNPcGVuVHlwZSgpP3RoaXMuX3RleHRGb250Ll90ZXh0V2lkdGgoYSx0aGlzLl90ZXh0U2l6ZSk6MH07dmFyIGg9OSxpPWgsaj02NCxrPTY0LGw9NjQsbT02NCxuPTY0LG89NjQscD1NYXRoLnNxcnQoMykscT1mdW5jdGlvbihhKXt0aGlzLmZvbnQ9YSx0aGlzLnN0cm9rZUltYWdlSW5mb3M9bmV3IGQoaixrKSx0aGlzLmNvbERpbUltYWdlSW5mb3M9bmV3IGQobCxtKSx0aGlzLnJvd0RpbUltYWdlSW5mb3M9bmV3IGQobCxtKSx0aGlzLmNvbENlbGxJbWFnZUluZm9zPW5ldyBkKG4sbyksdGhpcy5yb3dDZWxsSW1hZ2VJbmZvcz1uZXcgZChuLG8pLHRoaXMuZ2x5cGhJbmZvcz17fSx0aGlzLmdldEdseXBoSW5mbz1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYixjKXtmdW5jdGlvbiBkKGEsYixjKXtmb3IodmFyIGQ9YS5sZW5ndGg7ZC0tID4wOyl7dmFyIGU9YVtkXTtiPmUmJihiPWUpLGM8ZSYmKGM9ZSl9cmV0dXJue21pbjpiLG1heDpjfX12YXIgZT13Lmxlbmd0aDt3LnB1c2goYyk7Zm9yKHZhciBmPWQoYSwxLDApLGc9TWF0aC5tYXgoTWF0aC5mbG9vcihmLm1pbipoKSwwKSxqPU1hdGgubWluKE1hdGguY2VpbChmLm1heCpoKSxoKSxrPWc7azxqOysrayl5W2tdLnB1c2goZSk7Zm9yKHZhciBsPWQoYiwxLDApLG09TWF0aC5tYXgoTWF0aC5mbG9vcihsLm1pbippKSwwKSxuPU1hdGgubWluKE1hdGguY2VpbChsLm1heCppKSxpKSxvPW07bzxuOysrbyl4W29dLnB1c2goZSl9ZnVuY3Rpb24gYyhhLGIsYyl7cmV0dXJuIGE8Yj9iOmE+Yz9jOmF9ZnVuY3Rpb24gZChhKXtyZXR1cm4gYygyNTUqYSwwLDI1NSl9ZnVuY3Rpb24gZyhhLGIsYyxkKXt0aGlzLnAwPWEsdGhpcy5jMD1iLHRoaXMuYzE9Yyx0aGlzLnAxPWQsdGhpcy50b1F1YWRyYXRpYz1mdW5jdGlvbigpe3JldHVybnt4OnRoaXMucDAueCx5OnRoaXMucDAueSx4MTp0aGlzLnAxLngseTE6dGhpcy5wMS55LGN4OigzKih0aGlzLmMwLngrdGhpcy5jMS54KS0odGhpcy5wMC54K3RoaXMucDEueCkpLzQsY3k6KDMqKHRoaXMuYzAueSt0aGlzLmMxLnkpLSh0aGlzLnAwLnkrdGhpcy5wMS55KSkvNH19LHRoaXMucXVhZEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIGYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIodGhpcy5wMSx0aGlzLnAwKSxmLlZlY3Rvci5tdWx0KGYuVmVjdG9yLnN1Yih0aGlzLmMxLHRoaXMuYzApLDMpKS5tYWcoKS8yfSx0aGlzLnNwbGl0PWZ1bmN0aW9uKGEpe3ZhciBiPWYuVmVjdG9yLmxlcnAodGhpcy5wMCx0aGlzLmMwLGEpLGM9Zi5WZWN0b3IubGVycCh0aGlzLmMwLHRoaXMuYzEsYSksZD1mLlZlY3Rvci5sZXJwKGIsYyxhKTt0aGlzLmMxPWYuVmVjdG9yLmxlcnAodGhpcy5jMSx0aGlzLnAxLGEpLHRoaXMuYzA9Zi5WZWN0b3IubGVycChjLHRoaXMuYzEsYSk7dmFyIGU9Zi5WZWN0b3IubGVycChkLHRoaXMuYzAsYSksaD1uZXcgZyh0aGlzLnAwLGIsZCxlKTtyZXR1cm4gdGhpcy5wMD1lLGh9LHRoaXMuc3BsaXRJbmZsZWN0aW9ucz1mdW5jdGlvbigpe3ZhciBhPWYuVmVjdG9yLnN1Yih0aGlzLmMwLHRoaXMucDApLGI9Zi5WZWN0b3Iuc3ViKGYuVmVjdG9yLnN1Yih0aGlzLmMxLHRoaXMuYzApLGEpLGM9Zi5WZWN0b3Iuc3ViKGYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIodGhpcy5wMSx0aGlzLmMxKSxhKSxmLlZlY3Rvci5tdWx0KGIsMikpLGQ9W10sZT1iLngqYy55LWIueSpjLng7aWYoMCE9PWUpe3ZhciBnPWEueCpjLnktYS55KmMueCxoPWEueCpiLnktYS55KmIueCxpPWcqZy00KmUqaDtpZihpPj0wKXtlPDAmJihlPS1lLGc9LWcsaD0taCk7dmFyIGo9TWF0aC5zcXJ0KGkpLGs9KC1nLWopLygyKmUpLGw9KC1nK2opLygyKmUpO2s+MCYmazwxJiYoZC5wdXNoKHRoaXMuc3BsaXQoaykpLGw9MS0oMS1sKS8oMS1rKSksbD4wJiZsPDEmJmQucHVzaCh0aGlzLnNwbGl0KGwpKX19cmV0dXJuIGQucHVzaCh0aGlzKSxkfX1mdW5jdGlvbiBqKGEsYixjLGQsZSxoLGksail7Zm9yKHZhciBrPW5ldyBnKG5ldyBmLlZlY3RvcihhLGIpLG5ldyBmLlZlY3RvcihjLGQpLG5ldyBmLlZlY3RvcihlLGgpLG5ldyBmLlZlY3RvcihpLGopKS5zcGxpdEluZmxlY3Rpb25zKCksbD1bXSxtPTMwL3Asbj0wO248ay5sZW5ndGg7bisrKXtmb3IodmFyIG8scT1rW25dLHI9W107ISgobz1tL3EucXVhZEVycm9yKCkpPj0uMTI1KTspe3ZhciBzPU1hdGgucG93KG8sMS8zKSx0PXEuc3BsaXQocyksdT1xLnNwbGl0KDEtcy8oMS1zKSk7bC5wdXNoKHQpLHIucHVzaChxKSxxPXV9bzwxJiZsLnB1c2gocS5zcGxpdCguNSkpLGwucHVzaChxKSxBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsLHIucmV2ZXJzZSgpKX1yZXR1cm4gbH1mdW5jdGlvbiBrKGEsYyxkLGUpe2IoW2EsZF0sW2MsZV0se3g6YSx5OmMsY3g6KGErZCkvMixjeTooYytlKS8yfSl9ZnVuY3Rpb24gbChhLGIsYyxkKXtyZXR1cm4gTWF0aC5hYnMoYy1hKTwxZS01JiZNYXRoLmFicyhkLWIpPDFlLTV9ZnVuY3Rpb24gbShhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoLGY9Yi5maW5kSW1hZ2UoZCksZz1mLmluZGV4LGg9MCxpPTA7aTxkOysraSloKz1hW2ldLmxlbmd0aDtmb3IodmFyIGo9Yy5maW5kSW1hZ2UoaCksaz0wO2s8ZDsrK2spe3ZhciBsPWFba10sbT1sLmxlbmd0aCxuPWouaW5kZXg7ZShmLG4+PjcsMTI3Jm4sbT4+NywxMjcmbSk7Zm9yKHZhciBvPTA7bzxtOysrbyl7dmFyIHA9bFtvXStTO2UoaixwPj43LDEyNyZwLDAsMCl9fXJldHVybntjZWxsSW1hZ2VJbmZvOmosZGltT2Zmc2V0OmcsZGltSW1hZ2VJbmZvOmZ9fXZhciBuPXRoaXMuZ2x5cGhJbmZvc1thLmluZGV4XTtpZihuKXJldHVybiBuO3ZhciBvPWEuZ2V0Qm91bmRpbmdCb3goKSxxPW8ueDEscj1vLnkxLHM9by54Mi1xLHQ9by55Mi1yLHU9YS5wYXRoLmNvbW1hbmRzO2lmKDA9PT1zfHwwPT09dHx8IXUubGVuZ3RoKXJldHVybiB0aGlzLmdseXBoSW5mb3NbYS5pbmRleF09e307dmFyIHYsdz1bXSx4PVtdLHk9W107Zm9yKHY9aC0xO3Y+PTA7LS12KXkucHVzaChbXSk7Zm9yKHY9aS0xO3Y+PTA7LS12KXgucHVzaChbXSk7Zm9yKHZhciB6LEEsQixDLEQ9MDtEPHUubGVuZ3RoOysrRCl7dmFyIEU9dVtEXSxGPShFLngtcSkvcyxHPShFLnktcikvdDtpZighbCh6LEEsRixHKSl7c3dpdGNoKEUudHlwZSl7Y2FzZVwiTVwiOkI9RixDPUc7YnJlYWs7Y2FzZVwiTFwiOmsoeixBLEYsRyk7YnJlYWs7Y2FzZVwiUVwiOnZhciBIPShFLngxLXEpL3MsST0oRS55MS1yKS90O2IoW3osRixIXSxbQSxHLEldLHt4OnoseTpBLGN4OkgsY3k6SX0pO2JyZWFrO2Nhc2VcIlpcIjpsKHosQSxCLEMpP3cucHVzaCh7eDp6LHk6QX0pOihrKHosQSxCLEMpLHcucHVzaCh7eDpCLHk6Q30pKTticmVhaztjYXNlXCJDXCI6Zm9yKHZhciBKPShFLngxLXEpL3MsSz0oRS55MS1yKS90LEw9KEUueDItcSkvcyxNPShFLnkyLXIpL3QsTj1qKHosQSxKLEssTCxNLEYsRyksTz0wO088Ti5sZW5ndGg7TysrKXt2YXIgUD1OW09dLnRvUXVhZHJhdGljKCk7YihbUC54LFAueDEsUC5jeF0sW1AueSxQLnkxLFAuY3ldLFApfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBjb21tYW5kIHR5cGU6IFwiK0UudHlwZSl9ej1GLEE9R319Zm9yKHZhciBRPXcubGVuZ3RoLFI9dGhpcy5zdHJva2VJbWFnZUluZm9zLmZpbmRJbWFnZShRKSxTPVIuaW5kZXgsVD0wO1Q8UTsrK1Qpe3ZhciBVPXdbVF07ZShSLGQoVS54KSxkKFUueSksZChVLmN4KSxkKFUuY3kpKX1yZXR1cm4gbj10aGlzLmdseXBoSW5mb3NbYS5pbmRleF09e2dseXBoOmEsdUdseXBoUmVjdDpbby54MSwtby55MSxvLngyLC1vLnkyXSxzdHJva2VJbWFnZUluZm86UixzdHJva2VzOncsY29sSW5mbzptKHksdGhpcy5jb2xEaW1JbWFnZUluZm9zLHRoaXMuY29sQ2VsbEltYWdlSW5mb3MpLHJvd0luZm86bSh4LHRoaXMucm93RGltSW1hZ2VJbmZvcyx0aGlzLnJvd0NlbGxJbWFnZUluZm9zKX0sbi51R3JpZE9mZnNldD1bbi5jb2xJbmZvLmRpbU9mZnNldCxuLnJvd0luZm8uZGltT2Zmc2V0XSxufX07Zi5SZW5kZXJlckdMLnByb3RvdHlwZS5fcmVuZGVyVGV4dD1mdW5jdGlvbihhLGIsYyxkLGUpe2lmKCEoZD49ZSkmJnRoaXMuX2RvRmlsbCl7aWYoIXRoaXMuX2lzT3BlblR5cGUoKSlyZXR1cm4gY29uc29sZS5sb2coXCJXRUJHTDogb25seSBvcGVudHlwZSBmb250cyBhcmUgc3VwcG9ydGVkXCIpLGE7YS5wdXNoKCk7dmFyIHA9dGhpcy5jdXJGaWxsU2hhZGVyLHI9dGhpcy5fZG9TdHJva2Uscz10aGlzLmRyYXdNb2RlO3RoaXMuY3VyRmlsbFNoYWRlcj1udWxsLHRoaXMuX2RvU3Ryb2tlPSExLHRoaXMuZHJhd01vZGU9Zy5URVhUVVJFO3ZhciB0PXRoaXMuX3RleHRGb250LmZvbnQsdT10aGlzLl90ZXh0Rm9udC5fZm9udEluZm87dXx8KHU9dGhpcy5fdGV4dEZvbnQuX2ZvbnRJbmZvPW5ldyBxKHQpKTt2YXIgdj10aGlzLl90ZXh0Rm9udC5faGFuZGxlQWxpZ25tZW50KHRoaXMsYixjLGQpLHc9dGhpcy5fdGV4dFNpemUseD13L3QudW5pdHNQZXJFbTt0aGlzLnRyYW5zbGF0ZSh2Lngsdi55LDApLHRoaXMuc2NhbGUoeCx4LDEpO3ZhciB5PXRoaXMuR0wsej0hdGhpcy5fZGVmYXVsdEZvbnRTaGFkZXIsQT10aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0Rm9udFNoYWRlcigpKTt6JiYoQS5zZXRVbmlmb3JtKFwidUdyaWRJbWFnZVNpemVcIixbbCxtXSksQS5zZXRVbmlmb3JtKFwidUNlbGxzSW1hZ2VTaXplXCIsW24sb10pLEEuc2V0VW5pZm9ybShcInVTdHJva2VJbWFnZVNpemVcIixbaixrXSksQS5zZXRVbmlmb3JtKFwidUdyaWRTaXplXCIsW2gsaV0pKSx0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJGaWxsQ29sb3IpO3ZhciBCPXRoaXMuZ0hhc2guZ2x5cGg7aWYoIUIpe3ZhciBDPXRoaXMuX3RleHRHZW9tPW5ldyBmLkdlb21ldHJ5KDEsMSxmdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PTE7YSsrKWZvcih2YXIgYj0wO2I8PTE7YisrKXRoaXMudmVydGljZXMucHVzaChuZXcgZi5WZWN0b3IoYixhLDApKSx0aGlzLnV2cy5wdXNoKGIsYSl9KTtDLmNvbXB1dGVGYWNlcygpLmNvbXB1dGVOb3JtYWxzKCksQj10aGlzLmNyZWF0ZUJ1ZmZlcnMoXCJnbHlwaFwiLEMpfXRoaXMuX2JpbmRCdWZmZXIoQi52ZXJ0ZXhCdWZmZXIseS5BUlJBWV9CVUZGRVIpLEEuZW5hYmxlQXR0cmliKEEuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyx5LkZMT0FULCExLDAsMCksdGhpcy5fYmluZEJ1ZmZlcihCLmluZGV4QnVmZmVyLHkuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLHRoaXMuX2JpbmRCdWZmZXIoQi51dkJ1ZmZlcix5LkFSUkFZX0JVRkZFUiksQS5lbmFibGVBdHRyaWIoQS5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLHkuRkxPQVQsITEsMCwwKSxBLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuY3VyRmlsbENvbG9yKTt0cnl7Zm9yKHZhciBEPTAsRT1udWxsLEY9ITEsRz10LnN0cmluZ1RvR2x5cGhzKGIpLEg9MDtIPEcubGVuZ3RoOysrSCl7dmFyIEk9R1tIXTtFJiYoRCs9dC5nZXRLZXJuaW5nVmFsdWUoRSxJKSk7dmFyIEo9dS5nZXRHbHlwaEluZm8oSSk7aWYoSi51R2x5cGhSZWN0KXt2YXIgSz1KLnJvd0luZm8sTD1KLmNvbEluZm87QS5zZXRVbmlmb3JtKFwidVNhbXBsZXJTdHJva2VzXCIsSi5zdHJva2VJbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlclJvd1N0cm9rZXNcIixLLmNlbGxJbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlclJvd3NcIixLLmRpbUltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVTYW1wbGVyQ29sU3Ryb2tlc1wiLEwuY2VsbEltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVTYW1wbGVyQ29sc1wiLEwuZGltSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidUdyaWRPZmZzZXRcIixKLnVHcmlkT2Zmc2V0KSxBLnNldFVuaWZvcm0oXCJ1R2x5cGhSZWN0XCIsSi51R2x5cGhSZWN0KSxBLnNldFVuaWZvcm0oXCJ1R2x5cGhPZmZzZXRcIixEKSxGP0EuYmluZFRleHR1cmVzKCk6KEY9ITAsQS5iaW5kU2hhZGVyKCkpLHkuZHJhd0VsZW1lbnRzKHkuVFJJQU5HTEVTLDYsdGhpcy5HTC5VTlNJR05FRF9TSE9SVCwwKX1EKz1JLmFkdmFuY2VXaWR0aCxFPUl9fWZpbmFsbHl7QS51bmJpbmRTaGFkZXIoKSx0aGlzLmN1ckZpbGxTaGFkZXI9cCx0aGlzLl9kb1N0cm9rZT1yLHRoaXMuZHJhd01vZGU9cyxhLnBvcCgpfXJldHVybiB0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsYX19fSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LlJlbmRlcmVyR0xcIjo3NCxcIi4vcDUuU2hhZGVyXCI6NzV9XX0se30sWzEzXSkoMTMpfSk7IiwiLyoqXG4gKiAgU3RhcnRBdWRpb0NvbnRleHQuanNcbiAqICBAYXV0aG9yIFlvdGFtIE1hbm5cbiAqICBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVCBMaWNlbnNlXG4gKiAgQGNvcHlyaWdodCAyMDE2IFlvdGFtIE1hbm5cbiAqL1xuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdGRlZmluZShbXSwgZmFjdG9yeSlcblx0IH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKVxuXHR9IGVsc2Uge1xuXHRcdHJvb3QuU3RhcnRBdWRpb0NvbnRleHQgPSBmYWN0b3J5KClcbiAgfVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG5cblx0Ly9UQVAgTElTVEVORVIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblx0LyoqXG5cdCAqIEBjbGFzcyAgTGlzdGVucyBmb3Igbm9uLWRyYWdnaW5nIHRhcCBlbmRzIG9uIHRoZSBnaXZlbiBlbGVtZW50XG5cdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHZhciBUYXBMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRleHQpe1xuXG5cdFx0dGhpcy5fZHJhZ2dlZCA9IGZhbHNlXG5cblx0XHR0aGlzLl9lbGVtZW50ID0gZWxlbWVudFxuXG5cdFx0dGhpcy5fYmluZGVkTW92ZSA9IHRoaXMuX21vdmVkLmJpbmQodGhpcylcblx0XHR0aGlzLl9iaW5kZWRFbmQgPSB0aGlzLl9lbmRlZC5iaW5kKHRoaXMsIGNvbnRleHQpXG5cblx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIHRoaXMuX2JpbmRlZEVuZClcblx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgdGhpcy5fYmluZGVkTW92ZSlcblx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCB0aGlzLl9iaW5kZWRFbmQpXG5cdFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCB0aGlzLl9iaW5kZWRFbmQpXG5cdH1cblxuXHQvKipcblx0ICogZHJhZyBtb3ZlIGV2ZW50XG5cdCAqL1xuXHRUYXBMaXN0ZW5lci5wcm90b3R5cGUuX21vdmVkID0gZnVuY3Rpb24oZSl7XG5cdFx0dGhpcy5fZHJhZ2dlZCA9IHRydWVcblx0fTtcblxuXHQvKipcblx0ICogdGFwIGVuZGVkIGxpc3RlbmVyXG5cdCAqL1xuXHRUYXBMaXN0ZW5lci5wcm90b3R5cGUuX2VuZGVkID0gZnVuY3Rpb24oY29udGV4dCl7XG5cdFx0aWYgKCF0aGlzLl9kcmFnZ2VkKXtcblx0XHRcdHN0YXJ0Q29udGV4dChjb250ZXh0KVxuXHRcdH1cblx0XHR0aGlzLl9kcmFnZ2VkID0gZmFsc2Vcblx0fTtcblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCB0aGUgYm91bmQgZXZlbnRzXG5cdCAqL1xuXHRUYXBMaXN0ZW5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLCB0aGlzLl9iaW5kZWRFbmQpXG5cdFx0dGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIHRoaXMuX2JpbmRlZE1vdmUpXG5cdFx0dGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgdGhpcy5fYmluZGVkRW5kKVxuXHRcdHRoaXMuX2VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgdGhpcy5fYmluZGVkRW5kKVxuXHRcdHRoaXMuX2JpbmRlZE1vdmUgPSBudWxsXG5cdFx0dGhpcy5fYmluZGVkRW5kID0gbnVsbFxuXHRcdHRoaXMuX2VsZW1lbnQgPSBudWxsXG5cdH07XG5cblx0Ly9FTkQgVEFQIExJU1RFTkVSLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblx0LyoqXG5cdCAqIFBsYXlzIGEgc2lsZW50IHNvdW5kIGFuZCBhbHNvIGludm9rZSB0aGUgXCJyZXN1bWVcIiBtZXRob2Rcblx0ICogQHBhcmFtIHtBdWRpb0NvbnRleHR9IGNvbnRleHRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIHN0YXJ0Q29udGV4dChjb250ZXh0KXtcblx0XHQvLyB0aGlzIGFjY29tcGxpc2hlcyB0aGUgaU9TIHNwZWNpZmljIHJlcXVpcmVtZW50XG5cdFx0dmFyIGJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDEsIDEsIGNvbnRleHQuc2FtcGxlUmF0ZSlcblx0XHR2YXIgc291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKVxuXHRcdHNvdXJjZS5idWZmZXIgPSBidWZmZXJcblx0XHRzb3VyY2UuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKVxuXHRcdHNvdXJjZS5zdGFydCgwKVxuXG5cdFx0Ly8gcmVzdW1lIHRoZSBhdWRpbyBjb250ZXh0XG5cdFx0aWYgKGNvbnRleHQucmVzdW1lKXtcblx0XHRcdGNvbnRleHQucmVzdW1lKClcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBhdWRpbyBjb250ZXh0IGlzIHN0YXJ0ZWRcblx0ICogQHBhcmFtICB7QXVkaW9Db250ZXh0fSAgY29udGV4dFxuXHQgKiBAcmV0dXJuIHtCb29sZWFufVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gaXNTdGFydGVkKGNvbnRleHQpe1xuXHRcdCByZXR1cm4gY29udGV4dC5zdGF0ZSA9PT0gXCJydW5uaW5nXCJcblx0fVxuXG5cdC8qKlxuXHQgKiBJbnZva2VzIHRoZSBjYWxsYmFjayBhcyBzb29uIGFzIHRoZSBBdWRpb0NvbnRleHRcblx0ICogaXMgc3RhcnRlZFxuXHQgKiBAcGFyYW0gIHtBdWRpb0NvbnRleHR9ICAgY29udGV4dFxuXHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcblx0ICovXG5cdGZ1bmN0aW9uIG9uU3RhcnRlZChjb250ZXh0LCBjYWxsYmFjayl7XG5cblx0XHRmdW5jdGlvbiBjaGVja0xvb3AoKXtcblx0XHRcdGlmIChpc1N0YXJ0ZWQoY29udGV4dCkpe1xuXHRcdFx0XHRjYWxsYmFjaygpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2hlY2tMb29wKVxuXHRcdFx0XHRpZiAoY29udGV4dC5yZXN1bWUpe1xuXHRcdFx0XHRcdGNvbnRleHQucmVzdW1lKClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpc1N0YXJ0ZWQoY29udGV4dCkpe1xuXHRcdFx0Y2FsbGJhY2soKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjaGVja0xvb3AoKVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSB0YXAgbGlzdGVuZXIgdG8gdGhlIGF1ZGlvIGNvbnRleHRcblx0ICogQHBhcmFtICB7QXJyYXl8RWxlbWVudHxTdHJpbmd8alF1ZXJ5fSBlbGVtZW50XG5cdCAqIEBwYXJhbSB7QXJyYXl9IHRhcExpc3RlbmVyc1xuXHQgKi9cblx0ZnVuY3Rpb24gYmluZFRhcExpc3RlbmVyKGVsZW1lbnQsIHRhcExpc3RlbmVycywgY29udGV4dCl7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudCkgfHwgKE5vZGVMaXN0ICYmIGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGlzdCkpe1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50Lmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0YmluZFRhcExpc3RlbmVyKGVsZW1lbnRbaV0sIHRhcExpc3RlbmVycywgY29udGV4dClcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09PSBcInN0cmluZ1wiKXtcblx0XHRcdGJpbmRUYXBMaXN0ZW5lcihkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGVsZW1lbnQpLCB0YXBMaXN0ZW5lcnMsIGNvbnRleHQpXG5cdFx0fSBlbHNlIGlmIChlbGVtZW50LmpxdWVyeSAmJiB0eXBlb2YgZWxlbWVudC50b0FycmF5ID09PSBcImZ1bmN0aW9uXCIpe1xuXHRcdFx0YmluZFRhcExpc3RlbmVyKGVsZW1lbnQudG9BcnJheSgpLCB0YXBMaXN0ZW5lcnMsIGNvbnRleHQpXG5cdFx0fSBlbHNlIGlmIChFbGVtZW50ICYmIGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KXtcblx0XHRcdC8vaWYgaXQncyBhbiBlbGVtZW50LCBjcmVhdGUgYSBUYXBMaXN0ZW5lclxuXHRcdFx0dmFyIHRhcCA9IG5ldyBUYXBMaXN0ZW5lcihlbGVtZW50LCBjb250ZXh0KVxuXHRcdFx0dGFwTGlzdGVuZXJzLnB1c2godGFwKVxuXHRcdH0gXG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtBdWRpb0NvbnRleHR9IGNvbnRleHQgVGhlIEF1ZGlvQ29udGV4dCB0byBzdGFydC5cblx0ICogQHBhcmFtIHtBcnJheXxTdHJpbmd8RWxlbWVudHxqUXVlcnk9fSBlbGVtZW50cyBGb3IgaU9TLCB0aGUgbGlzdCBvZiBlbGVtZW50c1xuXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmluZCB0YXAgZXZlbnQgbGlzdGVuZXJzXG5cdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB3aWxsIHN0YXJ0IHRoZSBBdWRpb0NvbnRleHQuIElmXG5cdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubyBlbGVtZW50cyBhcmUgZ2l2ZW4sIGl0IHdpbGwgYmluZFxuXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGRvY3VtZW50LmJvZHkuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIEF1ZGlvQ29udGV4dCBpcyBzdGFydGVkLlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfSBUaGUgcHJvbWlzZSBpcyBpbnZva2VkIHdoZW4gdGhlIEF1ZGlvQ29udGV4dFxuXHQgKiAgICAgICAgICAgICAgICAgICAgICAgaXMgc3RhcnRlZC5cblx0ICovXG5cdGZ1bmN0aW9uIFN0YXJ0QXVkaW9Db250ZXh0KGNvbnRleHQsIGVsZW1lbnRzLCBjYWxsYmFjayl7XG5cblx0XHQvL3RoZSBwcm9taXNlIGlzIGludm9rZWQgd2hlbiB0aGUgQXVkaW9Db250ZXh0IGlzIHN0YXJ0ZWRcblx0XHR2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHN1Y2Nlc3MpIHtcblx0XHRcdG9uU3RhcnRlZChjb250ZXh0LCBzdWNjZXNzKVxuXHRcdH0pXG5cblx0XHQvLyBUaGUgVGFwTGlzdGVuZXJzIGJvdW5kIHRvIHRoZSBlbGVtZW50c1xuXHRcdHZhciB0YXBMaXN0ZW5lcnMgPSBbXVxuXG5cdFx0Ly8gYWRkIGFsbCB0aGUgdGFwIGxpc3RlbmVyc1xuXHRcdGlmICghZWxlbWVudHMpe1xuXHRcdFx0ZWxlbWVudHMgPSBkb2N1bWVudC5ib2R5XG5cdFx0fVxuXHRcdGJpbmRUYXBMaXN0ZW5lcihlbGVtZW50cywgdGFwTGlzdGVuZXJzLCBjb250ZXh0KVxuXG5cdFx0Ly9kaXNwb3NlIGFsbCB0aGVzZSB0YXAgbGlzdGVuZXJzIHdoZW4gdGhlIGNvbnRleHQgaXMgc3RhcnRlZFxuXHRcdHByb21pc2UudGhlbihmdW5jdGlvbigpe1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0YXBMaXN0ZW5lcnMubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHR0YXBMaXN0ZW5lcnNbaV0uZGlzcG9zZSgpXG5cdFx0XHR9XG5cdFx0XHR0YXBMaXN0ZW5lcnMgPSBudWxsXG5cblx0XHRcdGlmIChjYWxsYmFjayl7XG5cdFx0XHRcdGNhbGxiYWNrKClcblx0XHRcdH1cblx0XHR9KVxuXG5cdFx0cmV0dXJuIHByb21pc2Vcblx0fVxuXG5cdHJldHVybiBTdGFydEF1ZGlvQ29udGV4dFxufSkpIiwiaW1wb3J0IHA1IGZyb20gJ3A1L2xpYi9wNS5taW4nO1xuaW1wb3J0IFRvbmUgZnJvbSAndG9uZSc7XG5pbXBvcnQgU3RhcnRBdWRpb0NvbnRleHQgZnJvbSAnc3RhcnRhdWRpb2NvbnRleHQnO1xuXG5jb25zdCBza2V0Y2ggPSAocCkgPT4ge1xuICAgIGxldCBwcmltZU51bWJlcnMgPSBbMiwgMywgNSwgNywgMTEsIDEzLCAxNywgMTksIDIzLCAyOSwgMzEsIDM3LCA0MSwgNDMsIDQ3LCA1MywgNTksIDYxLCA2NywgNzEsIDczLCA3OSwgODMsIDg5LCA5NywgMTAxLCAxMDMsIDEwNywgMTA5LCAxMTMsIDEyNywgMTMxLCAxMzcsIDEzOSwgMTQ5LCAxNTEsIDE1NywgMTYzLCAxNjcsIDE3MywgMTc5LCAxODEsIDE5MSwgMTkzLCAxOTcsIDE5OSwgMjExLCAyMjMsIDIyNywgMjI5LCAyMzMsIDIzOSwgMjQxLCAyNTEsIDI1NywgMjYzLCAyNjksIDI3MSwgMjc3LCAyODEsIDI4MywgMjkzLCAzMDcsIDMxMSwgMzEzLCAzMTcsIDMzMSwgMzM3LCAzNDcsIDM0OSwgMzUzLCAzNTksIDM2NywgMzczLCAzNzksIDM4MywgMzg5LCAzOTcsIDQwMSwgNDA5LCA0MTksIDQyMSwgNDMxLCA0MzMsIDQzOSwgNDQzLCA0NDksIDQ1NywgNDYxLCA0NjMsIDQ2NywgNDc5LCA0ODcsIDQ5MSwgNDk5LCA1MDMsIDUwOSwgNTIxLCA1MjMsIDU0MV07XG4gICAgXG4gICAgdmFyIGNob3J1cyA9IG5ldyBUb25lLkNob3J1cygwLjgsIDIuNSwgMC4yKS50b01hc3RlcigpO1xuXG4gICAgY2xhc3MgUHJpbWUge1xuICAgICAgICBjb25zdHJ1Y3RvcihudW0sIGlkKSB7XG4gICAgICAgICAgICB0aGlzLm51bSA9IG51bTtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgICAgIHRoaXMuY291bnRlciA9IDA7XG4gICAgICAgICAgICB0aGlzLmFscGhhID0gMDtcbiAgICAgICAgICAgIHRoaXMubGlmZXRpbWUgPSAwO1xuXG4gICAgICAgICAgICB0aGlzLmZtID0gbmV3IFRvbmUuRk1TeW50aCh7XG4gICAgICAgICAgICAgICAgXCJoYXJtb25pY2l0eVwiICA6IDEwICxcbiAgICAgICAgICAgICAgICBcIm1vZHVsYXRpb25JbmRleFwiICA6IDgwICxcbiAgICAgICAgICAgICAgICBcImRldHVuZVwiICA6IDAgLFxuICAgICAgICAgICAgICAgIFwib3NjaWxsYXRvclwiICA6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCIgIDogXCJzaW5lXCJcbiAgICAgICAgICAgICAgICB9ICAsXG4gICAgICAgICAgICAgICAgXCJlbnZlbG9wZVwiICA6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJhdHRhY2tcIiAgOiAwLjAwMSAsXG4gICAgICAgICAgICAgICAgICAgIFwiZGVjYXlcIiAgOiAwLjAwMyAsXG4gICAgICAgICAgICAgICAgICAgIFwic3VzdGFpblwiICA6IDAuMDYgLFxuICAgICAgICAgICAgICAgICAgICBcInJlbGVhc2VcIiAgOiAwLjNcbiAgICAgICAgICAgICAgICB9ICAsXG4gICAgICAgICAgICAgICAgXCJtb2R1bGF0aW9uXCIgIDoge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIiAgOiBcInNxdWFyZVwiXG4gICAgICAgICAgICAgICAgfSAgLFxuICAgICAgICAgICAgICAgIFwibW9kdWxhdGlvbkVudmVsb3BlXCIgIDoge1xuICAgICAgICAgICAgICAgICAgICBcImF0dGFja1wiICA6IDAuMDEgLFxuICAgICAgICAgICAgICAgICAgICBcImRlY2F5XCIgIDogMC4wMiAsXG4gICAgICAgICAgICAgICAgICAgIFwic3VzdGFpblwiICA6IDAuMDMgLFxuICAgICAgICAgICAgICAgICAgICBcInJlbGVhc2VcIiAgOiAwLjAzM1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJwb3J0YW1lbnRvXCIgOiAwLjAxIFxuICAgICAgICAgICAgfSkuY29ubmVjdChjaG9ydXMpO1xuXG4gICAgICAgICAgICB0aGlzLmZtLnZvbHVtZS52YWx1ZSA9IC02O1xuICAgICAgICB9XG4gICAgICAgIGRyYXcoKSB7XG4gICAgICAgICAgICBwLnB1c2goKTtcbiAgICAgICAgICAgIHAuc3Ryb2tlKDI1NSwxNDApO1xuICAgICAgICAgICAgcC5saW5lKDAsdGhpcy5pZCAqIDgsMCx0aGlzLm51bSx0aGlzLmlkICogOCwwKTtcbiAgICAgICAgICAgIHAudHJhbnNsYXRlKDAsdGhpcy5pZCAqIDgsMCk7XG4gICAgICAgICAgICAvL3Auc3Ryb2tlKDApO1xuICAgICAgICAgICAgcC5ub1N0cm9rZSgpO1xuICAgICAgICAgICAgcC5maWxsKDI1NSwxODApO1xuICAgICAgICAgICAgcC5zcGhlcmUoMyk7XG4gICAgICAgICAgICBwLnRyYW5zbGF0ZSh0aGlzLm51bSwwLDApO1xuICAgICAgICAgICAgcC5zcGhlcmUoMyk7XG4gICAgICAgICAgICBwLmZpbGwoMjU1LDAsMCx0aGlzLmFscGhhKTtcbiAgICAgICAgICAgIHAuc3BoZXJlKDUpO1xuICAgICAgICAgICAgcC5wb3AoKTtcblxuICAgICAgICAgICAgaWYodGhpcy5saWZldGltZTwxMCkge1xuICAgICAgICAgICAgICAgIHAucHVzaCgpO1xuICAgICAgICAgICAgICAgIHAuZmlsbCgyNTUsMTgwKTtcbiAgICAgICAgICAgICAgICBwLnRyYW5zbGF0ZSh0aGlzLmNvdW50ZXIsdGhpcy5pZCAqIDgsIDApO1xuICAgICAgICAgICAgICAgIHAuc3BoZXJlKDMpO1xuICAgICAgICAgICAgICAgIHAucG9wKCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hbHBoYSAtPSAxMDtcblxuICAgICAgICAgICAgaWYodGhpcy5jb3VudGVyID4gdGhpcy5udW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuYWxwaGEgPSAyNTU7XG4gICAgICAgICAgICAgICAgdGhpcy5saWZldGltZSsrO1xuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXIgc291bmQgaGVyZVxuICAgICAgICAgICAgICAgIHRoaXMuZm0udHJpZ2dlckF0dGFja1JlbGVhc2UoIFRvbmUuTWlkaSggKDU0MSAtIHRoaXMubnVtKS8xMCArIDYwICkudG9GcmVxdWVuY3koKSwgXCIxMjhuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwcmltZXMgPSBbXTtcbiAgICBwLnNldHVwID0gKCkgPT4ge1xuICAgICAgICBsZXQgY2FudmFzID0gcC5jcmVhdGVDYW52YXMoODAwLCA4MDAsIHAuV0VCR0wpO1xuICAgICAgICBmb3IobGV0IGk9MDsgaTxwcmltZU51bWJlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHByaW1lcy5wdXNoKCBuZXcgUHJpbWUocHJpbWVOdW1iZXJzW2ldLCBpKSApO1xuICAgICAgICB9ICBcbiAgICB9XG5cbiAgICBwLmRyYXcgPSAoKSA9PiB7XG4gICAgICAgIHAuY2FtZXJhKHAubW91c2VYIC0gcC53aWR0aC8yLDAsIDgwMCwgMCwgMCwgMCwgMCwgMSwgMCk7XG4gICAgICAgIHAuYmFja2dyb3VuZCgwKTtcbiAgICAgICAgcC5zbW9vdGgoKTtcblxuICAgICAgICBwLnRyYW5zbGF0ZSgtcC53aWR0aC8yLCBwLmhlaWdodC82LDApO1xuICAgICAgICBcbiAgICAgICAgcC5yb3RhdGVaKC1wLkhBTEZfUEkpO1xuICAgICAgICAvL3Aucm90YXRlWShwLmZyYW1lQ291bnQvMTAwMCk7XG4gICAgICAgIGZvcihsZXQgaT0wOyBpPHByaW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcC5yb3RhdGVZKHAucmFkaWFucyhpLzEwMCkpO1xuICAgICAgICAgICAgcHJpbWVzW2ldLmRyYXcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAua2V5UHJlc3NlZCA9ICgpID0+IHtcbiAgICAgICAgaWYocC5rZXkgPT0gJ20nKSB7XG4gICAgICAgICAgICBwLnNhdmUoRGF0ZS5ub3coKSArIFwiLmpwZ1wiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAubW91c2VQcmVzc2VkID0gKCkgPT4ge1xuICAgICAgICBTdGFydEF1ZGlvQ29udGV4dChUb25lLmNvbnRleHQpLnRoZW4oZnVuY3Rpb24oKXt9KTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBza2V0Y2g7XG5uZXcgcDUoc2tldGNoKTsiLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSwgZXZhbCkoXCJ0aGlzXCIpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/Day-23-Prime-Distribution/package-lock.json b/Day-23-Prime-Distribution/package-lock.json index f09a1a4..d2a2255 100644 --- a/Day-23-Prime-Distribution/package-lock.json +++ b/Day-23-Prime-Distribution/package-lock.json @@ -29,8 +29,8 @@ "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", "requires": { - "@protobufjs/aspromise": "1.1.2", - "@protobufjs/inquire": "1.1.0" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, "@protobufjs/float": { @@ -73,8 +73,8 @@ "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-0.6.6.tgz", "integrity": "sha512-zDpDY6hyoXw6yEHd8CZrs7VL1Kl/kFhW5JcJWC7h2xqsMxk09v7OSNa4YQfJWJQeCXVStjK9VOqLSkwTETwPrw==", "requires": { - "@types/long": "3.0.32", - "protobufjs": "6.8.8" + "@types/long": "~3.0.32", + "protobufjs": "~6.8.6" } }, "@tensorflow/tfjs-core": { @@ -192,7 +192,7 @@ "integrity": "sha512-HRcWcY+YWt4+s/CvQn+vnSPfRaD4KkuzQFt5MNaELXXHSjelHlSEA8ZcqT69q0GTIuLWZ6JaoKar4yWHVpZHsQ==", "dev": true, "requires": { - "@xtuc/ieee754": "1.2.0" + "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { @@ -308,7 +308,7 @@ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "2.1.21", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -324,7 +324,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "5.7.3" + "acorn": "^5.0.0" } }, "ajv": { @@ -333,10 +333,10 @@ "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", "dev": true, "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-errors": { @@ -375,7 +375,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.3" + "color-convert": "^1.9.0" } }, "anymatch": { @@ -384,8 +384,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "aproba": { @@ -424,7 +424,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -445,9 +445,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -512,13 +512,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -527,7 +527,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -536,7 +536,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -545,7 +545,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -554,9 +554,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -604,15 +604,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", + "depd": "~1.1.2", + "http-errors": "~1.6.3", "iconv-lite": "0.4.23", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.2", "raw-body": "2.3.3", - "type-is": "1.6.16" + "type-is": "~1.6.16" } }, "bonjour": { @@ -621,12 +621,12 @@ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "array-flatten": "2.1.1", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, "brace-expansion": { @@ -635,7 +635,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -645,16 +645,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -663,7 +663,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -680,12 +680,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -694,9 +694,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -705,10 +705,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -717,8 +717,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -727,13 +727,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.1", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -742,7 +742,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "buffer": { @@ -751,9 +751,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-from": { @@ -792,19 +792,19 @@ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { - "bluebird": "3.5.2", - "chownr": "1.1.1", - "glob": "7.1.3", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.3", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.3.0", - "unique-filename": "1.1.1", - "y18n": "4.0.0" + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" } }, "cache-base": { @@ -813,15 +813,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "camelcase": { @@ -836,9 +836,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chokidar": { @@ -847,19 +847,19 @@ "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.4", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "lodash.debounce": "4.0.8", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.1.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, "chownr": { @@ -874,7 +874,7 @@ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", "dev": true, "requires": { - "tslib": "1.9.3" + "tslib": "^1.9.0" } }, "cipher-base": { @@ -883,8 +883,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "class-utils": { @@ -893,10 +893,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -905,7 +905,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -916,9 +916,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "code-point-at": { @@ -933,8 +933,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { @@ -976,7 +976,7 @@ "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", "dev": true, "requires": { - "mime-db": "1.37.0" + "mime-db": ">= 1.36.0 < 2" } }, "compression": { @@ -985,13 +985,13 @@ "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "2.0.15", + "compressible": "~2.0.14", "debug": "2.6.9", - "on-headers": "1.0.1", + "on-headers": "~1.0.1", "safe-buffer": "5.1.2", - "vary": "1.1.2" + "vary": "~1.1.2" } }, "concat-map": { @@ -1006,10 +1006,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "connect-history-api-fallback": { @@ -1024,7 +1024,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -1063,12 +1063,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -1089,8 +1089,8 @@ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -1099,11 +1099,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -1112,12 +1112,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -1126,11 +1126,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { @@ -1139,17 +1139,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.17", - "public-encrypt": "4.0.3", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "cyclist": { @@ -1200,8 +1200,8 @@ "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", "dev": true, "requires": { - "execa": "0.10.0", - "ip-regex": "2.1.0" + "execa": "^0.10.0", + "ip-regex": "^2.1.0" } }, "define-property": { @@ -1210,8 +1210,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -1220,7 +1220,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1229,7 +1229,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1238,9 +1238,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1251,12 +1251,12 @@ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" } }, "depd": { @@ -1271,8 +1271,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "destroy": { @@ -1293,9 +1293,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "dns-equal": { @@ -1310,8 +1310,8 @@ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "dev": true, "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.2" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, "dns-txt": { @@ -1320,7 +1320,7 @@ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { - "buffer-indexof": "1.1.1" + "buffer-indexof": "^1.0.0" } }, "domain-browser": { @@ -1335,10 +1335,10 @@ "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "ee-first": { @@ -1353,13 +1353,13 @@ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.5", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -1380,7 +1380,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "enhanced-resolve": { @@ -1389,9 +1389,9 @@ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.1.0" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "errno": { @@ -1400,7 +1400,7 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "escape-html": { @@ -1421,8 +1421,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "esrecurse": { @@ -1431,7 +1431,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -1464,7 +1464,7 @@ "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "original": "1.0.2" + "original": "^1.0.0" } }, "evp_bytestokey": { @@ -1473,8 +1473,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -1483,13 +1483,13 @@ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "6.0.5", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "expand-brackets": { @@ -1498,13 +1498,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1513,7 +1513,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -1522,7 +1522,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1533,36 +1533,36 @@ "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.3", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", + "proxy-addr": "~2.0.4", "qs": "6.5.2", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.2", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "array-flatten": { @@ -1579,8 +1579,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -1589,7 +1589,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -1600,14 +1600,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1616,7 +1616,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -1625,7 +1625,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -1634,7 +1634,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1643,7 +1643,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1652,9 +1652,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1677,7 +1677,7 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "fill-range": { @@ -1686,10 +1686,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -1698,7 +1698,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1710,12 +1710,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" } }, "find-cache-dir": { @@ -1724,9 +1724,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { @@ -1735,7 +1735,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "flush-write-stream": { @@ -1744,8 +1744,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "follow-redirects": { @@ -1754,7 +1754,7 @@ "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==", "dev": true, "requires": { - "debug": "3.1.0" + "debug": "=3.1.0" }, "dependencies": { "debug": { @@ -1786,7 +1786,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -1801,8 +1801,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-write-stream-atomic": { @@ -1811,10 +1811,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -1830,8 +1830,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.11.1", - "node-pre-gyp": "0.10.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -1857,8 +1857,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -1871,7 +1871,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1935,7 +1935,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -1950,14 +1950,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -1966,12 +1966,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -1986,7 +1986,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { @@ -1995,7 +1995,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -2004,8 +2004,8 @@ "dev": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2024,7 +2024,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -2038,7 +2038,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -2051,8 +2051,8 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, "minizlib": { @@ -2061,7 +2061,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -2084,9 +2084,9 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -2095,16 +2095,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -2113,8 +2113,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -2129,8 +2129,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -2139,10 +2139,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -2161,7 +2161,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -2182,8 +2182,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -2204,10 +2204,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -2224,13 +2224,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -2239,7 +2239,7 @@ "dev": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -2282,9 +2282,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -2293,7 +2293,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -2301,7 +2301,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -2316,13 +2316,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -2337,7 +2337,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -2376,12 +2376,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { @@ -2390,8 +2390,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -2400,7 +2400,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -2417,11 +2417,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.3", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "pify": { @@ -2461,9 +2461,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -2472,8 +2472,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -2482,7 +2482,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2493,8 +2493,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { @@ -2503,8 +2503,8 @@ "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "hmac-drbg": { @@ -2513,9 +2513,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.5", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hpack.js": { @@ -2524,10 +2524,10 @@ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { - "inherits": "2.0.3", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "wbuf": "1.7.3" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, "html-entities": { @@ -2548,10 +2548,10 @@ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.4.0" + "statuses": ">= 1.4.0 < 2" } }, "http-parser-js": { @@ -2566,9 +2566,9 @@ "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "dev": true, "requires": { - "eventemitter3": "3.1.0", - "follow-redirects": "1.5.9", - "requires-port": "1.0.0" + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, "http-proxy-middleware": { @@ -2577,10 +2577,10 @@ "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", "dev": true, "requires": { - "http-proxy": "1.17.0", - "is-glob": "4.0.0", - "lodash": "4.17.11", - "micromatch": "3.1.10" + "http-proxy": "^1.16.2", + "is-glob": "^4.0.0", + "lodash": "^4.17.5", + "micromatch": "^3.1.9" } }, "https-browserify": { @@ -2595,7 +2595,7 @@ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { @@ -2616,8 +2616,8 @@ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "3.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" }, "dependencies": { "find-up": { @@ -2626,7 +2626,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -2635,8 +2635,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -2645,7 +2645,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -2654,7 +2654,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.0.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -2669,7 +2669,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "3.0.0" + "find-up": "^3.0.0" } } } @@ -2692,8 +2692,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2708,8 +2708,8 @@ "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", "dev": true, "requires": { - "default-gateway": "2.7.2", - "ipaddr.js": "1.8.0" + "default-gateway": "^2.6.0", + "ipaddr.js": "^1.5.2" } }, "interpret": { @@ -2748,7 +2748,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2757,7 +2757,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2768,7 +2768,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.12.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -2783,7 +2783,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2792,7 +2792,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2803,9 +2803,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -2840,7 +2840,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -2849,7 +2849,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2858,7 +2858,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2875,7 +2875,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -2884,7 +2884,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-object": { @@ -2893,7 +2893,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-stream": { @@ -2974,7 +2974,7 @@ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "2.0.0" + "invert-kv": "^2.0.0" } }, "loader-runner": { @@ -2989,9 +2989,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -3000,8 +3000,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -3032,8 +3032,8 @@ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "make-dir": { @@ -3042,7 +3042,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "map-age-cleaner": { @@ -3051,7 +3051,7 @@ "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", "dev": true, "requires": { - "p-defer": "1.0.0" + "p-defer": "^1.0.0" } }, "map-cache": { @@ -3066,7 +3066,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "md5.js": { @@ -3075,9 +3075,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "media-typer": { @@ -3092,9 +3092,9 @@ "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "dev": true, "requires": { - "map-age-cleaner": "0.1.2", - "mimic-fn": "1.2.0", - "p-is-promise": "1.1.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" } }, "memory-fs": { @@ -3103,8 +3103,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "merge-descriptors": { @@ -3125,19 +3125,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "miller-rabin": { @@ -3146,8 +3146,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { @@ -3168,7 +3168,7 @@ "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "dev": true, "requires": { - "mime-db": "1.37.0" + "mime-db": "~1.37.0" } }, "mimic-fn": { @@ -3195,7 +3195,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3210,16 +3210,16 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.1", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.3" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -3228,8 +3228,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -3238,7 +3238,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -3258,12 +3258,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -3278,8 +3278,8 @@ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "dns-packet": "1.3.1", - "thunky": "1.0.3" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, "multicast-dns-service-types": { @@ -3301,17 +3301,17 @@ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "negotiator": { @@ -3344,28 +3344,28 @@ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.4", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" }, "dependencies": { @@ -3383,7 +3383,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "npm-run-path": { @@ -3392,7 +3392,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { @@ -3413,9 +3413,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -3424,7 +3424,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -3433,7 +3433,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3444,7 +3444,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.pick": { @@ -3453,7 +3453,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "obuf": { @@ -3483,7 +3483,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "opn": { @@ -3492,7 +3492,7 @@ "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", "dev": true, "requires": { - "is-wsl": "1.1.0" + "is-wsl": "^1.1.0" } }, "original": { @@ -3501,7 +3501,7 @@ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "requires": { - "url-parse": "1.4.3" + "url-parse": "^1.4.3" } }, "os-browserify": { @@ -3516,9 +3516,9 @@ "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", "dev": true, "requires": { - "execa": "0.10.0", - "lcid": "2.0.0", - "mem": "4.0.0" + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "p-defer": { @@ -3545,7 +3545,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -3554,7 +3554,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.3.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -3586,9 +3586,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "parse-asn1": { @@ -3597,11 +3597,11 @@ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.17" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parseurl": { @@ -3664,11 +3664,11 @@ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "pify": { @@ -3689,7 +3689,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -3698,7 +3698,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "portfinder": { @@ -3707,9 +3707,9 @@ "integrity": "sha512-23aeQKW9KgHe6citUrG3r9HjeX6vls0h713TAa+CwTKZwNIr/pD2ApaxYF4Um3ZZyq4ar+Siv3+fhoHaIwSOSw==", "dev": true, "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" } }, "posix-character-classes": { @@ -3741,19 +3741,19 @@ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", "requires": { - "@protobufjs/aspromise": "1.1.2", - "@protobufjs/base64": "1.1.2", - "@protobufjs/codegen": "2.0.4", - "@protobufjs/eventemitter": "1.1.0", - "@protobufjs/fetch": "1.1.0", - "@protobufjs/float": "1.0.2", - "@protobufjs/inquire": "1.1.0", - "@protobufjs/path": "1.1.2", - "@protobufjs/pool": "1.1.0", - "@protobufjs/utf8": "1.1.0", - "@types/long": "4.0.0", - "@types/node": "10.12.6", - "long": "4.0.0" + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" }, "dependencies": { "@types/long": { @@ -3769,7 +3769,7 @@ "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "dev": true, "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.8.0" } }, @@ -3791,12 +3791,12 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pump": { @@ -3805,8 +3805,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -3815,9 +3815,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "3.6.1", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, "punycode": { @@ -3856,7 +3856,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -3865,8 +3865,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -3893,13 +3893,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -3908,9 +3908,9 @@ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "micromatch": "3.1.10", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "regex-not": { @@ -3919,8 +3919,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "remove-trailing-separator": { @@ -3965,7 +3965,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "resolve-from": { @@ -3992,7 +3992,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.3" + "glob": "^7.0.5" } }, "ripemd160": { @@ -4001,8 +4001,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-queue": { @@ -4011,7 +4011,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "safe-buffer": { @@ -4026,7 +4026,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "safer-buffer": { @@ -4041,8 +4041,8 @@ "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "dev": true, "requires": { - "ajv": "6.5.4", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, "seedrandom": { @@ -4078,18 +4078,18 @@ "dev": true, "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" } }, "serialize-javascript": { @@ -4104,13 +4104,13 @@ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.21", - "parseurl": "1.3.2" + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" } }, "serve-static": { @@ -4119,9 +4119,9 @@ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.2" } }, @@ -4137,10 +4137,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -4149,7 +4149,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -4172,8 +4172,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shebang-command": { @@ -4182,7 +4182,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -4203,14 +4203,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -4219,7 +4219,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -4228,7 +4228,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -4239,9 +4239,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -4250,7 +4250,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -4259,7 +4259,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -4268,7 +4268,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -4277,9 +4277,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -4290,7 +4290,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -4299,7 +4299,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4310,8 +4310,8 @@ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", "dev": true, "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.3.2" + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" } }, "sockjs-client": { @@ -4320,12 +4320,12 @@ "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "dev": true, "requires": { - "debug": "3.2.6", - "eventsource": "1.0.7", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.4.3" + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" }, "dependencies": { "debug": { @@ -4334,7 +4334,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "faye-websocket": { @@ -4343,7 +4343,7 @@ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "ms": { @@ -4372,11 +4372,11 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { @@ -4391,12 +4391,12 @@ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", "dev": true, "requires": { - "debug": "2.6.9", - "handle-thing": "1.2.5", - "http-deceiver": "1.2.7", - "safe-buffer": "5.1.2", - "select-hose": "2.0.0", - "spdy-transport": "2.1.0" + "debug": "^2.6.8", + "handle-thing": "^1.2.5", + "http-deceiver": "^1.2.7", + "safe-buffer": "^5.0.1", + "select-hose": "^2.0.0", + "spdy-transport": "^2.0.18" } }, "spdy-transport": { @@ -4405,13 +4405,13 @@ "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", "dev": true, "requires": { - "debug": "2.6.9", - "detect-node": "2.0.4", - "hpack.js": "2.1.6", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2", - "wbuf": "1.7.3" + "debug": "^2.6.8", + "detect-node": "^2.0.3", + "hpack.js": "^2.1.6", + "obuf": "^1.1.1", + "readable-stream": "^2.2.9", + "safe-buffer": "^5.0.1", + "wbuf": "^1.7.2" } }, "split-string": { @@ -4420,7 +4420,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "ssri": { @@ -4429,17 +4429,22 @@ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.1" } }, + "startaudiocontext": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/startaudiocontext/-/startaudiocontext-1.2.1.tgz", + "integrity": "sha1-RtLKtUYseRGArMciPju7wycshZU=" + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -4448,7 +4453,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -4465,8 +4470,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-each": { @@ -4475,8 +4480,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { @@ -4485,11 +4490,11 @@ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -4504,8 +4509,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string_decoder": { @@ -4514,7 +4519,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -4523,7 +4528,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "strip-eof": { @@ -4538,7 +4543,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "tapable": { @@ -4552,8 +4557,8 @@ "resolved": "https://registry.npmjs.org/tensorjs/-/tensorjs-0.2.0.tgz", "integrity": "sha1-zjSJN6Cj+j6M6IW7S0ErUFT5abs=", "requires": { - "google-protobuf": "3.6.1", - "lodash": "4.17.11" + "google-protobuf": "^3.2.0-rc.2", + "lodash": "^4.17.4" } }, "tfjs": { @@ -4561,7 +4566,7 @@ "resolved": "https://registry.npmjs.org/tfjs/-/tfjs-0.6.0.tgz", "integrity": "sha1-Nw7l0hEvVz5ju7cM01C5BnfhGcw=", "requires": { - "tensorjs": "0.2.0" + "tensorjs": "^0.2.0" } }, "through2": { @@ -4570,8 +4575,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "thunky": { @@ -4586,7 +4591,7 @@ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "to-arraybuffer": { @@ -4601,7 +4606,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4610,7 +4615,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4621,10 +4626,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -4633,8 +4638,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "tone": { @@ -4661,7 +4666,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.21" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -4676,8 +4681,8 @@ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "dev": true, "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" + "commander": "~2.13.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -4694,14 +4699,14 @@ "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", "dev": true, "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.7", - "serialize-javascript": "1.5.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.3.0", - "worker-farm": "1.6.0" + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { "source-map": { @@ -4718,10 +4723,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -4730,7 +4735,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -4739,10 +4744,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -4753,7 +4758,7 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "2.0.1" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -4762,7 +4767,7 @@ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "unpipe": { @@ -4777,8 +4782,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -4787,9 +4792,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -4823,7 +4828,7 @@ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "urix": { @@ -4856,8 +4861,8 @@ "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==", "dev": true, "requires": { - "querystringify": "2.1.0", - "requires-port": "1.0.0" + "querystringify": "^2.0.0", + "requires-port": "^1.0.0" } }, "use": { @@ -4920,9 +4925,9 @@ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "dev": true, "requires": { - "chokidar": "2.0.4", - "graceful-fs": "4.1.11", - "neo-async": "2.6.0" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" } }, "wbuf": { @@ -4931,7 +4936,7 @@ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { - "minimalistic-assert": "1.0.1" + "minimalistic-assert": "^1.0.0" } }, "webpack": { @@ -4944,26 +4949,26 @@ "@webassemblyjs/helper-module-context": "1.7.10", "@webassemblyjs/wasm-edit": "1.7.10", "@webassemblyjs/wasm-parser": "1.7.10", - "acorn": "5.7.3", - "acorn-dynamic-import": "3.0.0", - "ajv": "6.5.4", - "ajv-keywords": "3.2.0", - "chrome-trace-event": "1.0.0", - "enhanced-resolve": "4.1.0", - "eslint-scope": "4.0.0", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.3.1", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "neo-async": "2.6.0", - "node-libs-browser": "2.1.0", - "schema-utils": "0.4.7", - "tapable": "1.1.0", - "uglifyjs-webpack-plugin": "1.3.0", - "watchpack": "1.6.0", - "webpack-sources": "1.3.0" + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.1.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" } }, "webpack-cli": { @@ -4972,16 +4977,16 @@ "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", "dev": true, "requires": { - "chalk": "2.4.1", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "global-modules-path": "2.3.0", - "import-local": "2.0.0", - "interpret": "1.1.0", - "loader-utils": "1.1.0", - "supports-color": "5.5.0", - "v8-compile-cache": "2.0.2", - "yargs": "12.0.2" + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.0", + "global-modules-path": "^2.3.0", + "import-local": "^2.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.2" } }, "webpack-dev-middleware": { @@ -4990,10 +4995,10 @@ "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", "dev": true, "requires": { - "memory-fs": "0.4.1", - "mime": "2.3.1", - "range-parser": "1.2.0", - "webpack-log": "2.0.0" + "memory-fs": "~0.4.1", + "mime": "^2.3.1", + "range-parser": "^1.0.3", + "webpack-log": "^2.0.0" }, "dependencies": { "mime": { @@ -5011,32 +5016,32 @@ "dev": true, "requires": { "ansi-html": "0.0.7", - "bonjour": "3.5.0", - "chokidar": "2.0.4", - "compression": "1.7.3", - "connect-history-api-fallback": "1.5.0", - "debug": "3.2.6", - "del": "3.0.0", - "express": "4.16.4", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.18.0", - "import-local": "2.0.0", - "internal-ip": "3.0.1", - "ip": "1.1.5", - "killable": "1.0.1", - "loglevel": "1.6.1", - "opn": "5.4.0", - "portfinder": "1.0.19", - "schema-utils": "1.0.0", - "selfsigned": "1.10.4", - "serve-index": "1.9.1", + "bonjour": "^3.5.0", + "chokidar": "^2.0.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "~0.18.0", + "import-local": "^2.0.0", + "internal-ip": "^3.0.1", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "schema-utils": "^1.0.0", + "selfsigned": "^1.9.1", + "serve-index": "^1.7.2", "sockjs": "0.3.19", "sockjs-client": "1.3.0", - "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "5.5.0", + "spdy": "^3.4.1", + "strip-ansi": "^3.0.0", + "supports-color": "^5.1.0", "webpack-dev-middleware": "3.4.0", - "webpack-log": "2.0.0", + "webpack-log": "^2.0.0", "yargs": "12.0.2" }, "dependencies": { @@ -5052,7 +5057,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "ms": { @@ -5067,9 +5072,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.5.4", - "ajv-errors": "1.0.0", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, "strip-ansi": { @@ -5078,7 +5083,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -5089,8 +5094,8 @@ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "ansi-colors": "3.2.1", - "uuid": "3.3.2" + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" } }, "webpack-sources": { @@ -5099,8 +5104,8 @@ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { - "source-list-map": "2.0.1", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -5117,8 +5122,8 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": "0.5.0", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -5133,7 +5138,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -5148,7 +5153,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -5157,8 +5162,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -5173,7 +5178,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -5182,9 +5187,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -5193,7 +5198,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -5234,18 +5239,18 @@ "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "2.0.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "10.1.0" + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" }, "dependencies": { "find-up": { @@ -5254,7 +5259,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -5263,8 +5268,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -5273,7 +5278,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -5282,7 +5287,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.0.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -5299,7 +5304,7 @@ "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } diff --git a/Day-23-Prime-Distribution/package.json b/Day-23-Prime-Distribution/package.json index 693e879..f0c01cf 100644 --- a/Day-23-Prime-Distribution/package.json +++ b/Day-23-Prime-Distribution/package.json @@ -19,6 +19,7 @@ "dependencies": { "@tensorflow/tfjs": "^0.13.4", "p5": "^0.7.2", + "startaudiocontext": "^1.2.1", "tfjs": "^0.6.0", "tone": "^0.12.80" } diff --git a/Day-23-Prime-Distribution/src/index.js b/Day-23-Prime-Distribution/src/index.js index 7cafd46..d6dcdc6 100644 --- a/Day-23-Prime-Distribution/src/index.js +++ b/Day-23-Prime-Distribution/src/index.js @@ -1,5 +1,6 @@ import p5 from 'p5/lib/p5.min'; import Tone from 'tone'; +import StartAudioContext from 'startaudiocontext'; const sketch = (p) => { let primeNumbers = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541]; @@ -107,6 +108,10 @@ const sketch = (p) => { p.save(Date.now() + ".jpg"); } } + + p.mousePressed = () => { + StartAudioContext(Tone.context).then(function(){}); + } } export default sketch; new p5(sketch); \ No newline at end of file diff --git a/Day-24-Noise-Pianist/dist/main.js b/Day-24-Noise-Pianist/dist/main.js index 72a2701..cbe4bf3 100644 --- a/Day-24-Noise-Pianist/dist/main.js +++ b/Day-24-Noise-Pianist/dist/main.js @@ -1,8 +1,14 @@ -!function(t){var e={};function i(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=t,i.c=e,i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)i.d(r,n,function(e){return t[e]}.bind(null,n));return r},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=2)}([function(t,e,i){var r;void 0===(r=function(){return function(){"use strict";var t;function e(e){e(t)} +!function(t){var e={};function i(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=t,i.c=e,i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)i.d(r,n,function(e){return t[e]}.bind(null,n));return r},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=3)}([function(t,e,i){var r;void 0===(r=function(){return function(){"use strict";var t;function e(e){e(t)} /** * Tone.js * @author Yotam Mann * @license http://opensource.org/licenses/MIT MIT License * @copyright 2014-2018 Yotam Mann - */return function(e){t=e()}(function(){var t=function(){if(!(this instanceof t))throw new Error("constructor needs to be called with the 'new' keyword")};t.prototype.toString=function(){for(var e in t){var i=e[0].match(/^[A-Z]$/),r=t[e]===this.constructor;if(t.isFunction(t[e])&&i&&r)return e}return"Tone"},t.prototype.dispose=function(){return this},t.prototype.set=function(e,i,r){if(t.isObject(e))r=i;else if(t.isString(e)){var n={};n[e]=i,e=n}t:for(var o in e){i=e[o];var s=this;if(-1!==o.indexOf(".")){for(var a=o.split("."),h=0;hthis.memory){var r=this.length-this.memory;this._timeline.splice(0,r)}return this},t.Timeline.prototype.remove=function(t){var e=this._timeline.indexOf(t);return-1!==e&&this._timeline.splice(e,1),this},t.Timeline.prototype.get=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return-1!==r?this._timeline[r]:null},t.Timeline.prototype.peek=function(){return this._timeline[0]},t.Timeline.prototype.shift=function(){return this._timeline.shift()},t.Timeline.prototype.getAfter=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return r+10&&this._timeline[r-1][i]=0?this._timeline[n-1]:null},t.Timeline.prototype.cancel=function(t){if(this._timeline.length>1){var e=this._search(t);if(e>=0)if(this._timeline[e].time===t){for(var i=e;i>=0&&this._timeline[i].time===t;i--)e=i;this._timeline=this._timeline.slice(0,e)}else this._timeline=this._timeline.slice(0,e+1);else this._timeline=[]}else 1===this._timeline.length&&this._timeline[0].time>=t&&(this._timeline=[]);return this},t.Timeline.prototype.cancelBefore=function(t){var e=this._search(t);return e>=0&&(this._timeline=this._timeline.slice(e+1)),this},t.Timeline.prototype.previousEvent=function(t){var e=this._timeline.indexOf(t);return e>0?this._timeline[e-1]:null},t.Timeline.prototype._search=function(e,i){if(0===this._timeline.length)return-1;i=t.defaultArg(i,"time");var r=0,n=this._timeline.length,o=n;if(n>0&&this._timeline[n-1][i]<=e)return n-1;for(;re)return s;a[i]>e?o=s:r=s+1}return-1},t.Timeline.prototype._iterate=function(e,i,r){i=t.defaultArg(i,0),r=t.defaultArg(r,this._timeline.length-1),this._timeline.slice(i,r+1).forEach(function(t){e.call(this,t)}.bind(this))},t.Timeline.prototype.forEach=function(t){return this._iterate(t),this},t.Timeline.prototype.forEachBefore=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(e,0,i),this},t.Timeline.prototype.forEachAfter=function(t,e){var i=this._search(t);return this._iterate(e,i+1),this},t.Timeline.prototype.forEachBetween=function(t,e,i){var r=this._search(t),n=this._search(e);return-1!==r&&-1!==n?(this._timeline[r].time!==t&&(r+=1),this._timeline[n].time===e&&(n-=1),this._iterate(i,r,n)):-1===r&&this._iterate(i,0,n),this},t.Timeline.prototype.forEachFrom=function(t,e){for(var i=this._search(t);i>=0&&this._timeline[i].time>=t;)i--;return this._iterate(e,i+1),this},t.Timeline.prototype.forEachAtTime=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(function(i){i.time===t&&e.call(this,i)},0,i),this},t.Timeline.prototype.dispose=function(){return t.prototype.dispose.call(this),this._timeline=null,this},t.Timeline}),e(function(t){t.supported&&(!window.hasOwnProperty("OfflineAudioContext")&&window.hasOwnProperty("webkitOfflineAudioContext")&&(window.OfflineAudioContext=window.webkitOfflineAudioContext),new OfflineAudioContext(1,1,44100).startRendering()instanceof Promise||(OfflineAudioContext.prototype._native_startRendering=OfflineAudioContext.prototype.startRendering,OfflineAudioContext.prototype.startRendering=function(){return new Promise(function(t){this.oncomplete=function(e){t(e.renderedBuffer)},this._native_startRendering()}.bind(this))}))}),e(function(t){if(t.supported){!window.hasOwnProperty("AudioContext")&&window.hasOwnProperty("webkitAudioContext")&&(window.AudioContext=window.webkitAudioContext),AudioContext.prototype.close||(AudioContext.prototype.close=function(){return t.isFunction(this.suspend)&&this.suspend(),Promise.resolve()}),AudioContext.prototype.resume||(AudioContext.prototype.resume=function(){return Promise.resolve()}),!AudioContext.prototype.createGain&&AudioContext.prototype.createGainNode&&(AudioContext.prototype.createGain=AudioContext.prototype.createGainNode),!AudioContext.prototype.createDelay&&AudioContext.prototype.createDelayNode&&(AudioContext.prototype.createDelay=AudioContext.prototype.createDelayNode);var e=!1,i=new OfflineAudioContext(1,1,44100),r=new Uint32Array([1179011410,48,1163280727,544501094,16,131073,44100,176400,1048580,1635017060,8,0,0,0,0]).buffer;try{i.decodeAudioData(r)instanceof Promise&&(e=!0)}catch(t){e=!1}e||(AudioContext.prototype._native_decodeAudioData=AudioContext.prototype.decodeAudioData,AudioContext.prototype.decodeAudioData=function(t){return new Promise(function(e,i){this._native_decodeAudioData(t,e,i)}.bind(this))})}}),e(function(t){t.Context=function(){t.Emitter.call(this);var i=t.defaults(arguments,["context"],t.Context);if(!i.context&&(i.context=new window.AudioContext,!i.context))throw new Error("could not create AudioContext. Possibly too many AudioContexts running already.");for(var r in this._context=i.context,this._context)this._defineProperty(this._context,r);this._latencyHint=i.latencyHint,this._constants={},this.lookAhead=i.lookAhead,this._computedUpdateInterval=0,this._ticker=new e(this.emit.bind(this,"tick"),i.clockSource,i.updateInterval),this._timeouts=new t.Timeline,this._timeoutIds=0,this.on("tick",this._timeoutLoop.bind(this))},t.extend(t.Context,t.Emitter),t.Emitter.mixin(t.Context),t.Context.defaults={clockSource:"worker",latencyHint:"interactive",lookAhead:.1,updateInterval:.03},t.Context.prototype._defineProperty=function(e,i){t.isUndef(this[i])&&Object.defineProperty(this,i,{get:function(){return"function"==typeof e[i]?e[i].bind(e):e[i]},set:function(t){e[i]=t}})},t.Context.prototype.now=function(){return this._context.currentTime+this.lookAhead},t.Context.prototype.ready=function(){return new Promise(function(t){"running"===this._context.state?t():this._context.resume().then(function(){t()})}.bind(this))},t.Context.prototype.close=function(){return this._context.close().then(function(){t.Context.emit("close",this)}.bind(this))},t.Context.prototype.getConstant=function(t){if(this._constants[t])return this._constants[t];for(var e=this._context.createBuffer(1,128,this._context.sampleRate),i=e.getChannelData(0),r=0;r1&&(this.input=new Array(t)),1===e?this.output=this.context.createGain():e>1&&(this.output=new Array(e))},Object.defineProperty(t.AudioNode.prototype,"channelCount",{get:function(){return this.output.channelCount},set:function(t){return this.output.channelCount=t}}),Object.defineProperty(t.AudioNode.prototype,"channelCountMode",{get:function(){return this.output.channelCountMode},set:function(t){return this.output.channelCountMode=t}}),Object.defineProperty(t.AudioNode.prototype,"channelInterpretation",{get:function(){return this.output.channelInterpretation},set:function(t){return this.output.channelInterpretation=t}}),Object.defineProperty(t.AudioNode.prototype,"numberOfInputs",{get:function(){return this.input?t.isArray(this.input)?this.input.length:1:0}}),Object.defineProperty(t.AudioNode.prototype,"numberOfOutputs",{get:function(){return this.output?t.isArray(this.output)?this.output.length:1:0}}),t.AudioNode.prototype._onConnect=function(){},t.AudioNode.prototype.connect=function(e,i,r){return e._onConnect&&e._onConnect(this),t.isArray(this.output)?(i=t.defaultArg(i,0),this.output[i].connect(e,0,r)):this.output.connect(e,i,r),this},t.AudioNode.prototype.disconnect=function(e,i,r){t.isArray(this.output)?t.isNumber(e)?this.output[e].disconnect():(i=t.defaultArg(i,0),this.output[i].disconnect(e,0,r)):this.output.disconnect.apply(this.output,arguments)},t.AudioNode.prototype.chain=function(){for(var t=this,e=0;e3&&(r=parseFloat(parseFloat(r).toFixed(3))),[i,e,r].join(":")},t.Time.prototype.toTicks=function(){var t=this._beatsToUnits(1),e=this.valueOf()/t;return Math.round(e*this._getPPQ())},t.Time.prototype.toSeconds=function(){return this.valueOf()},t.Time.prototype.toMidi=function(){return t.Frequency.ftom(this.toFrequency())},t.Time}),e(function(t){return t.TransportTime=function(e,i){if(!(this instanceof t.TransportTime))return new t.TransportTime(e,i);t.Time.call(this,e,i)},t.extend(t.TransportTime,t.Time),t.TransportTime.prototype._now=function(){return t.Transport.seconds},t.TransportTime}),e(function(t){return t.Type={Default:"number",Time:"time",Frequency:"frequency",TransportTime:"transportTime",Ticks:"ticks",NormalRange:"normalRange",AudioRange:"audioRange",Decibels:"db",Interval:"interval",BPM:"bpm",Positive:"positive",Gain:"gain",Cents:"cents",Degrees:"degrees",MIDI:"midi",BarsBeatsSixteenths:"barsBeatsSixteenths",Samples:"samples",Hertz:"hertz",Note:"note",Milliseconds:"milliseconds",Seconds:"seconds",Notation:"notation"},t.prototype.toSeconds=function(e){return t.isNumber(e)?e:t.isUndef(e)?this.now():t.isString(e)?new t.Time(e).toSeconds():e instanceof t.TimeBase?e.toSeconds():void 0},t.prototype.toFrequency=function(e){return t.isNumber(e)?e:t.isString(e)||t.isUndef(e)?new t.Frequency(e).valueOf():e instanceof t.TimeBase?e.toFrequency():void 0},t.prototype.toTicks=function(e){return t.isNumber(e)||t.isString(e)?new t.TransportTime(e).toTicks():t.isUndef(e)?t.Transport.ticks:e instanceof t.TimeBase?e.toTicks():void 0},t}),e(function(t){return t.Param=function(){var e=t.defaults(arguments,["param","units","convert"],t.Param);t.AudioNode.call(this),this._param=this.input=e.param,this.units=e.units,this.convert=e.convert,this.overridden=!1,this._events=new t.Timeline(1e3),t.isDefined(e.value)&&this._param&&(this.value=e.value)},t.extend(t.Param,t.AudioNode),t.Param.defaults={units:t.Type.Default,convert:!0,param:void 0},Object.defineProperty(t.Param.prototype,"value",{get:function(){var t=this.now();return this._toUnits(this.getValueAtTime(t))},set:function(t){this._initialValue=this._fromUnits(t),this.cancelScheduledValues(this.context.currentTime),this.setValueAtTime(t,this.context.currentTime)}}),Object.defineProperty(t.Param.prototype,"minValue",{get:function(){return this.units===t.Type.Time||this.units===t.Type.Frequency||this.units===t.Type.NormalRange||this.units===t.Type.Positive||this.units===t.Type.BPM?0:this.units===t.Type.AudioRange?-1:this.units===t.Type.Decibels?-1/0:this._param.minValue}}),Object.defineProperty(t.Param.prototype,"maxValue",{get:function(){return this.units===t.Type.NormalRange||this.units===t.Type.AudioRange?1:this._param.maxValue}}),t.Param.prototype._fromUnits=function(e){if(!this.convert&&!t.isUndef(this.convert)||this.overridden)return e;switch(this.units){case t.Type.Time:return this.toSeconds(e);case t.Type.Frequency:return this.toFrequency(e);case t.Type.Decibels:return t.dbToGain(e);case t.Type.NormalRange:return Math.min(Math.max(e,0),1);case t.Type.AudioRange:return Math.min(Math.max(e,-1),1);case t.Type.Positive:return Math.max(e,0);default:return e}},t.Param.prototype._toUnits=function(e){if(!this.convert&&!t.isUndef(this.convert))return e;switch(this.units){case t.Type.Decibels:return t.gainToDb(e);default:return e}},t.Param.prototype._minOutput=1e-5,t.Param.AutomationType={Linear:"linearRampToValueAtTime",Exponential:"exponentialRampToValueAtTime",Target:"setTargetAtTime",SetValue:"setValueAtTime"},t.Param.prototype.setValueAtTime=function(e,i){return i=this.toSeconds(i),e=this._fromUnits(e),this._events.add({type:t.Param.AutomationType.SetValue,value:e,time:i}),this._param.setValueAtTime(e,i),this},t.Param.prototype.getValueAtTime=function(e){e=this.toSeconds(e);var i=this._events.getAfter(e),r=this._events.get(e),n=t.defaultArg(this._initialValue,this._param.defaultValue),o=n;if(null===r)o=n;else if(r.type===t.Param.AutomationType.Target){var s,a=this._events.getBefore(r.time);s=null===a?n:a.value,o=this._exponentialApproach(r.time,s,r.value,r.constant,e)}else o=null===i?r.value:i.type===t.Param.AutomationType.Linear?this._linearInterpolate(r.time,r.value,i.time,i.value,e):i.type===t.Param.AutomationType.Exponential?this._exponentialInterpolate(r.time,r.value,i.time,i.value,e):r.value;return o},t.Param.prototype.setRampPoint=function(t){t=this.toSeconds(t);var e=this.getValueAtTime(t);return this.cancelAndHoldAtTime(t),0===e&&(e=this._minOutput),this.setValueAtTime(this._toUnits(e),t),this},t.Param.prototype.linearRampToValueAtTime=function(e,i){return e=this._fromUnits(e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Linear,value:e,time:i}),this._param.linearRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampToValueAtTime=function(e,i){return e=this._fromUnits(e),e=Math.max(this._minOutput,e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Exponential,time:i,value:e}),this._param.exponentialRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.linearRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.linearRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.targetRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialApproachValueAtTime(t,i,e),this},t.Param.prototype.exponentialApproachValueAtTime=function(t,e,i){var r=Math.log(this.toSeconds(i)+1)/Math.log(200);return e=this.toSeconds(e),this.setTargetAtTime(t,e,r)},t.Param.prototype.setTargetAtTime=function(e,i,r){if(e=this._fromUnits(e),r<=0)throw new Error("timeConstant must be greater than 0");return i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Target,value:e,time:i,constant:r}),this._param.setTargetAtTime(e,i,r),this},t.Param.prototype.setValueCurveAtTime=function(e,i,r,n){n=t.defaultArg(n,1),r=this.toSeconds(r),i=this.toSeconds(i),this.setValueAtTime(e[0]*n,i);for(var o=r/(e.length-1),s=1;s=0;)this.emit("tick"),this._currentTime+=this.blockTime;return this._context.startRendering()},t.OfflineContext.prototype.close=function(){return this._context=null,Promise.resolve()},t.OfflineContext}),e(function(t){if(t.supported){var e=navigator.userAgent.toLowerCase();e.includes("safari")&&!e.includes("chrome")&&e.includes("mobile")&&(t.OfflineContext.prototype.createBufferSource=function(){var t=this._context.createBufferSource(),e=t.start;return t.start=function(i){this.setTimeout(function(){e.call(t,i)}.bind(this),0)}.bind(this),t})}}),e(function(t){return t.Gain=function(){var e=t.defaults(arguments,["gain","units"],t.Gain);t.AudioNode.call(this),this.input=this.output=this._gainNode=this.context.createGain(),this.gain=new t.Param({param:this._gainNode.gain,units:e.units,value:e.gain,convert:e.convert}),this._readOnly("gain")},t.extend(t.Gain,t.AudioNode),t.Gain.defaults={gain:1,convert:!0},t.Gain.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._gainNode.disconnect(),this._gainNode=null,this._writable("gain"),this.gain.dispose(),this.gain=null},t.Gain}),e(function(t){if(t.supported&&!AudioContext.prototype.createConstantSource){var e=function(t){this.context=t;for(var e=t.createBuffer(1,128,t.sampleRate),i=e.getChannelData(0),r=0;r0&&(n=(1-s)/(1/n)),"linear"===this._attackCurve)this._sig.linearRampTo(i,n,e);else if("exponential"===this._attackCurve)this._sig.targetRampTo(i,n,e);else if(n>0){this._sig.cancelAndHoldAtTime(e);var a=this._attackCurve;if(n0){var r=this.toSeconds(this.release);if("linear"===this._releaseCurve)this._sig.linearRampTo(0,r,e);else if("exponential"===this._releaseCurve)this._sig.targetRampTo(0,r,e);else{var n=this._releaseCurve;t.isArray(n)&&(this._sig.cancelAndHoldAtTime(e),this._sig.setValueCurveAtTime(n,e,r,i))}}return this},t.Envelope.prototype.getValueAtTime=function(t){return this._sig.getValueAtTime(t)},t.Envelope.prototype.triggerAttackRelease=function(t,e,i){return e=this.toSeconds(e),this.triggerAttack(e,i),this.triggerRelease(e+this.toSeconds(t)),this},t.Envelope.prototype.cancel=function(t){return this._sig.cancelScheduledValues(t),this},t.Envelope.prototype.connect=t.SignalBase.prototype.connect,function(){var e,i,r=[];for(e=0;e<128;e++)r[e]=Math.sin(e/127*(Math.PI/2));var n=[];for(e=0;e<127;e++){i=e/127;var o=Math.sin(i*(2*Math.PI)*6.4-Math.PI/2)+1;n[e]=o/10+.83*i}n[127]=1;var s=[];for(e=0;e<128;e++)s[e]=Math.ceil(e/127*5)/5;var a=[];for(e=0;e<128;e++)i=e/127,a[e]=.5*(1-Math.cos(Math.PI*i));var h=[];for(e=0;e<128;e++){i=e/127;var l=4*Math.pow(i,3)+.2,u=Math.cos(l*Math.PI*2*i);h[e]=Math.abs(u*(1-i))}function c(t){for(var e=new Array(t.length),i=0;i0?a:(-n-s)/o)+i.time}return i?0===i.value?1/0:i.time+(e-i.ticks)/i.value:e/this._initialValue},t.TickSignal.prototype.ticksToTime=function(e,i){return i=this.toSeconds(i),new t.Time(this.getDurationOfTicks(e,i))},t.TickSignal.prototype.timeToTicks=function(e,i){i=this.toSeconds(i),e=this.toSeconds(e);var r=this.getTicksAtTime(i),n=this.getTicksAtTime(i+e);return new t.Ticks(n-r)},t.TickSignal}),e(function(t){return t.TimelineState=function(e){t.Timeline.call(this),this._initial=e},t.extend(t.TimelineState,t.Timeline),t.TimelineState.prototype.getValueAtTime=function(t){var e=this.get(t);return null!==e?e.state:this._initial},t.TimelineState.prototype.setStateAtTime=function(t,e){return this.add({state:t,time:e}),this},t.TimelineState.prototype.getLastState=function(t,e){e=this.toSeconds(e);for(var i=this._search(e);i>=0;i--){var r=this._timeline[i];if(r.state===t)return r}},t.TimelineState.prototype.getNextState=function(t,e){e=this.toSeconds(e);var i=this._search(e);if(-1!==i)for(var r=i;r0&&(this._tickOffset.cancel(i.time),this._state.cancel(i.time))}return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this.setTicksAtTime(0,e),this},t.TickSource.prototype.pause=function(e){return e=this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started&&this._state.setStateAtTime(t.State.Paused,e),this},t.TickSource.prototype.cancel=function(t){return t=this.toSeconds(t),this._state.cancel(t),this._tickOffset.cancel(t),this},t.TickSource.prototype.getTicksAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.ticks,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=this.frequency.getTicksAtTime(e.time)-this.frequency.getTicksAtTime(i)),n=e}.bind(this)),this._state.remove(r),o},Object.defineProperty(t.TickSource.prototype,"ticks",{get:function(){return this.getTicksAtTime(this.now())},set:function(t){this.setTicksAtTime(t,this.now())}}),Object.defineProperty(t.TickSource.prototype,"seconds",{get:function(){return this.getSecondsAtTime(this.now())},set:function(t){var e=this.now(),i=this.frequency.timeToTicks(t,e);this.setTicksAtTime(i,e)}}),t.TickSource.prototype.getSecondsAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.seconds,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=e.time-i),n=e}.bind(this)),this._state.remove(r),o},t.TickSource.prototype.setTicksAtTime=function(t,e){return e=this.toSeconds(e),this._tickOffset.cancel(e),this._tickOffset.add({time:e,ticks:t,seconds:this.frequency.getDurationOfTicks(t,e)}),this},t.TickSource.prototype.getStateAtTime=function(t){return t=this.toSeconds(t),this._state.getValueAtTime(t)},t.TickSource.prototype.getTimeOfTick=function(e,i){i=t.defaultArg(i,this.now());var r=this._tickOffset.get(i),n=this._state.get(i),o=Math.max(r.time,n.time),s=this.frequency.getTicksAtTime(o)+e-r.ticks;return this.frequency.getTimeOfTick(s)},t.TickSource.prototype.forEachTickBetween=function(e,i,r){var n=this._state.get(e);if(this._state.forEachBetween(e,i,function(i){n.state===t.State.Started&&i.state!==t.State.Started&&this.forEachTickBetween(Math.max(n.time,e),i.time-this.sampleTime,r),n=i}.bind(this)),e=Math.max(n.time,e),n.state===t.State.Started&&this._state){var o=this.frequency.getTicksAtTime(e),s=(o-this.frequency.getTicksAtTime(n.time))%1;0!==s&&(s=1-s);for(var a=this.frequency.getTimeOfTick(o+s),h=null;a0)if(null===t.left.right)(e=t.left).right=t.right,i=e;else{for(e=t.left.right;null!==e.right;)e=e.right;e.parent.right=e.left,i=e.parent,e.left=t.left,e.right=t.right}else if(null===t.right.left)(e=t.right).left=t.left,i=e;else{for(e=t.right.left;null!==e.left;)e=e.left;e.parent=e.parent,e.parent.left=e.right,i=e.parent,e.left=t.left,e.right=t.right}null!==t.parent?t.isLeftChild()?t.parent.left=e:t.parent.right=e:this._setRoot(e),this._rebalance(i)}t.dispose()},t.IntervalTimeline.prototype._rotateLeft=function(t){var e=t.parent,i=t.isLeftChild(),r=t.right;t.right=r.left,r.left=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rotateRight=function(t){var e=t.parent,i=t.isLeftChild(),r=t.left;t.left=r.right,r.right=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rebalance=function(t){var e=t.getBalance();e>1?t.left.getBalance()<0?this._rotateLeft(t.left):this._rotateRight(t):e<-1&&(t.right.getBalance()>0?this._rotateRight(t.right):this._rotateLeft(t))},t.IntervalTimeline.prototype.get=function(t){if(null!==this._root){var e=[];if(this._root.search(t,e),e.length>0){for(var i=e[0],r=1;ri.low&&(i=e[r]);return i.event}}return null},t.IntervalTimeline.prototype.forEach=function(t){if(null!==this._root){var e=[];this._root.traverse(function(t){e.push(t)});for(var i=0;i=0;r--){var n=i[r].event;n&&e(n)}}return this},t.IntervalTimeline.prototype.forEachFrom=function(t,e){if(null!==this._root){var i=[];this._root.searchAfter(t,i);for(var r=i.length-1;r>=0;r--)e(i[r].event)}return this},t.IntervalTimeline.prototype.dispose=function(){var t=[];null!==this._root&&this._root.traverse(function(e){t.push(e)});for(var e=0;ethis.max||(null!==this.left&&this.left.search(t,e),this.low<=t&&this.high>t&&e.push(this),this.low>t||null!==this.right&&this.right.search(t,e))},e.prototype.searchAfter=function(t,e){this.low>=t&&(e.push(this),null!==this.left&&this.left.searchAfter(t,e)),null!==this.right&&this.right.searchAfter(t,e)},e.prototype.traverse=function(t){t(this),null!==this.left&&this.left.traverse(t),null!==this.right&&this.right.traverse(t)},e.prototype.updateHeight=function(){null!==this.left&&null!==this.right?this.height=Math.max(this.left.height,this.right.height)+1:null!==this.right?this.height=this.right.height+1:null!==this.left?this.height=this.left.height+1:this.height=0},e.prototype.updateMax=function(){this.max=this.high,null!==this.left&&(this.max=Math.max(this.max,this.left.max)),null!==this.right&&(this.max=Math.max(this.max,this.right.max))},e.prototype.getBalance=function(){var t=0;return null!==this.left&&null!==this.right?t=this.left.height-this.right.height:null!==this.left?t=this.left.height+1:null!==this.right&&(t=-(this.right.height+1)),t},e.prototype.isLeftChild=function(){return null!==this.parent&&this.parent.left===this},Object.defineProperty(e.prototype,"left",{get:function(){return this._left},set:function(t){this._left=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),Object.defineProperty(e.prototype,"right",{get:function(){return this._right},set:function(t){this._right=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),e.prototype.dispose=function(){this.parent=null,this._left=null,this._right=null,this.event=null},t.IntervalTimeline}),e(function(t){return t.Ticks=function(e,i){if(!(this instanceof t.Ticks))return new t.Ticks(e,i);t.TransportTime.call(this,e,i)},t.extend(t.Ticks,t.TransportTime),t.Ticks.prototype._defaultUnits="i",t.Ticks.prototype._now=function(){return t.Transport.ticks},t.Ticks.prototype._beatsToUnits=function(t){return this._getPPQ()*t},t.Ticks.prototype._secondsToUnits=function(t){return t/(60/this._getBpm())*this._getPPQ()},t.Ticks.prototype._ticksToUnits=function(t){return t},t.Ticks.prototype.toTicks=function(){return this.valueOf()},t.Ticks.prototype.toSeconds=function(){return this.valueOf()/this._getPPQ()*(60/this._getBpm())},t.Ticks}),e(function(t){return t.TransportEvent=function(e,i){i=t.defaultArg(i,t.TransportEvent.defaults),t.call(this),this.Transport=e,this.id=t.TransportEvent._eventId++,this.time=t.Ticks(i.time),this.callback=i.callback,this._once=i.once},t.extend(t.TransportEvent),t.TransportEvent.defaults={once:!1,callback:t.noOp},t.TransportEvent._eventId=0,t.TransportEvent.prototype.invoke=function(t){this.callback&&(this.callback(t),this._once&&this.Transport&&this.Transport.clear(this.id))},t.TransportEvent.prototype.dispose=function(){return t.prototype.dispose.call(this),this.Transport=null,this.callback=null,this.time=null,this},t.TransportEvent}),e(function(t){return t.TransportRepeatEvent=function(e,i){t.TransportEvent.call(this,e,i),i=t.defaultArg(i,t.TransportRepeatEvent.defaults),this.duration=t.Ticks(i.duration),this._interval=t.Ticks(i.interval),this._currentId=-1,this._nextId=-1,this._nextTick=this.time,this._boundRestart=this._restart.bind(this),this.Transport.on("start loopStart",this._boundRestart),this._restart()},t.extend(t.TransportRepeatEvent,t.TransportEvent),t.TransportRepeatEvent.defaults={duration:1/0,interval:1},t.TransportRepeatEvent.prototype.invoke=function(e){this._createEvents(e),t.TransportEvent.prototype.invoke.call(this,e)},t.TransportRepeatEvent.prototype._createEvents=function(e){var i=this.Transport.getTicksAtTime(e);i>=this.time&&i>=this._nextTick&&this._nextTick+this._intervalthis.time&&(this._nextTick=this.time+Math.ceil((i-this.time)/this._interval)*this._interval),this._currentId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick)),this._nextTick+=this._interval,this._nextId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick))},t.TransportRepeatEvent.prototype.dispose=function(){return this.Transport.clear(this._currentId),this.Transport.clear(this._nextId),this.Transport.off("start loopStart",this._boundRestart),this._boundCreateEvents=null,t.TransportEvent.prototype.dispose.call(this),this.duration=null,this._interval=null,this},t.TransportRepeatEvent}),e(function(t){t.Transport=function(){t.Emitter.call(this),t.getContext(function(){this.loop=!1,this._loopStart=0,this._loopEnd=0,this._ppq=e.defaults.PPQ,this._clock=new t.Clock({callback:this._processTick.bind(this),frequency:0}),this._bindClockEvents(),this.bpm=this._clock.frequency,this.bpm._toUnits=this._toUnits.bind(this),this.bpm._fromUnits=this._fromUnits.bind(this),this.bpm.units=t.Type.BPM,this.bpm.value=e.defaults.bpm,this._readOnly("bpm"),this._timeSignature=e.defaults.timeSignature,this._scheduledEvents={},this._timeline=new t.Timeline,this._repeatedEvents=new t.IntervalTimeline,this._syncedSignals=[],this._swingTicks=e.defaults.PPQ/2,this._swingAmount=0}.bind(this))},t.extend(t.Transport,t.Emitter),t.Transport.defaults={bpm:120,swing:0,swingSubdivision:"8n",timeSignature:4,loopStart:0,loopEnd:"4m",PPQ:192},t.Transport.prototype._processTick=function(e,i){if(this._swingAmount>0&&i%this._ppq!=0&&i%(2*this._swingTicks)!=0){var r=i%(2*this._swingTicks)/(2*this._swingTicks),n=Math.sin(r*Math.PI)*this._swingAmount;e+=t.Ticks(2*this._swingTicks/3).toSeconds()*n}this.loop&&i>=this._loopEnd&&(this.emit("loopEnd",e),this._clock.setTicksAtTime(this._loopStart,e),i=this._loopStart,this.emit("loopStart",e,this._clock.getSecondsAtTime(e)),this.emit("loop",e)),this._timeline.forEachAtTime(i,function(t){t.invoke(e)})},t.Transport.prototype.schedule=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e});return this._addEvent(r,this._timeline)},t.Transport.prototype.scheduleRepeat=function(e,i,r,n){var o=new t.TransportRepeatEvent(this,{callback:e,interval:t.Time(i),time:t.TransportTime(r),duration:t.Time(t.defaultArg(n,1/0))});return this._addEvent(o,this._repeatedEvents)},t.Transport.prototype.scheduleOnce=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e,once:!0});return this._addEvent(r,this._timeline)},t.Transport.prototype.clear=function(t){if(this._scheduledEvents.hasOwnProperty(t)){var e=this._scheduledEvents[t.toString()];e.timeline.remove(e.event),e.event.dispose(),delete this._scheduledEvents[t.toString()]}return this},t.Transport.prototype._addEvent=function(t,e){return this._scheduledEvents[t.id.toString()]={event:t,timeline:e},e.add(t),t.id},t.Transport.prototype.cancel=function(e){return e=t.defaultArg(e,0),e=this.toTicks(e),this._timeline.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this._repeatedEvents.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this},t.Transport.prototype._bindClockEvents=function(){this._clock.on("start",function(e,i){i=t.Ticks(i).toSeconds(),this.emit("start",e,i)}.bind(this)),this._clock.on("stop",function(t){this.emit("stop",t)}.bind(this)),this._clock.on("pause",function(t){this.emit("pause",t)}.bind(this))},Object.defineProperty(t.Transport.prototype,"state",{get:function(){return this._clock.getStateAtTime(this.now())}}),t.Transport.prototype.start=function(e,i){return t.isDefined(i)&&(i=this.toTicks(i)),this._clock.start(e,i),this},t.Transport.prototype.stop=function(t){return this._clock.stop(t),this},t.Transport.prototype.pause=function(t){return this._clock.pause(t),this},t.Transport.prototype.toggle=function(e){return e=this.toSeconds(e),this._clock.getStateAtTime(e)!==t.State.Started?this.start(e):this.stop(e),this},Object.defineProperty(t.Transport.prototype,"timeSignature",{get:function(){return this._timeSignature},set:function(e){t.isArray(e)&&(e=e[0]/e[1]*4),this._timeSignature=e}}),Object.defineProperty(t.Transport.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t)}}),t.Transport.prototype.setLoopPoints=function(t,e){return this.loopStart=t,this.loopEnd=e,this},Object.defineProperty(t.Transport.prototype,"swing",{get:function(){return this._swingAmount},set:function(t){this._swingAmount=t}}),Object.defineProperty(t.Transport.prototype,"swingSubdivision",{get:function(){return t.Ticks(this._swingTicks).toNotation()},set:function(t){this._swingTicks=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"position",{get:function(){var e=this.now(),i=this._clock.getTicksAtTime(e);return t.Ticks(i).toBarsBeatsSixteenths()},set:function(t){var e=this.toTicks(t);this.ticks=e}}),Object.defineProperty(t.Transport.prototype,"seconds",{get:function(){return this._clock.seconds},set:function(t){var e=this.now(),i=this.bpm.timeToTicks(t,e);this.ticks=i}}),Object.defineProperty(t.Transport.prototype,"progress",{get:function(){if(this.loop){var t=this.now();return(this._clock.getTicksAtTime(t)-this._loopStart)/(this._loopEnd-this._loopStart)}return 0}}),Object.defineProperty(t.Transport.prototype,"ticks",{get:function(){return this._clock.ticks},set:function(e){if(this._clock.ticks!==e){var i=this.now();this.state===t.State.Started?(this.emit("stop",i),this._clock.setTicksAtTime(e,i),this.emit("start",i,this.seconds)):this._clock.setTicksAtTime(e,i)}}}),t.Transport.prototype.getTicksAtTime=function(t){return Math.round(this._clock.getTicksAtTime(t))},t.Transport.prototype.getSecondsAtTime=function(t){return this._clock.getSecondsAtTime(t)},Object.defineProperty(t.Transport.prototype,"PPQ",{get:function(){return this._ppq},set:function(t){var e=this.bpm.value;this._ppq=t,this.bpm.value=e}}),t.Transport.prototype._fromUnits=function(t){return 1/(60/t/this.PPQ)},t.Transport.prototype._toUnits=function(t){return t/this.PPQ*60},t.Transport.prototype.nextSubdivision=function(e){if(e=this.toTicks(e),this.state!==t.State.Started)return 0;var i=this.now(),r=e-this.getTicksAtTime(i)%e;return this._clock.nextTickTime(r,i)},t.Transport.prototype.syncSignal=function(e,i){if(!i){var r=this.now();i=0!==e.getValueAtTime(r)?e.getValueAtTime(r)/this.bpm.getValueAtTime(r):0}var n=new t.Gain(i);return this.bpm.chain(n,e._param),this._syncedSignals.push({ratio:n,signal:e,initial:e.value}),e.value=0,this},t.Transport.prototype.unsyncSignal=function(t){for(var e=this._syncedSignals.length-1;e>=0;e--){var i=this._syncedSignals[e];i.signal===t&&(i.ratio.dispose(),i.signal.value=i.initial,this._syncedSignals.splice(e,1))}return this},t.Transport.prototype.dispose=function(){return t.Emitter.prototype.dispose.call(this),this._clock.dispose(),this._clock=null,this._writable("bpm"),this.bpm=null,this._timeline.dispose(),this._timeline=null,this._repeatedEvents.dispose(),this._repeatedEvents=null,this};var e=t.Transport;return t.Transport=new e,t.Context.on("init",function(i){i.Transport instanceof e?t.Transport=i.Transport:t.Transport=new e,i.Transport=t.Transport}),t.Context.on("close",function(t){t.Transport instanceof e&&t.Transport.dispose()}),t.Transport}),e(function(t){return t.Volume=function(){var e=t.defaults(arguments,["volume"],t.Volume);t.AudioNode.call(this),this.output=this.input=new t.Gain(e.volume,t.Type.Decibels),this._unmutedVolume=e.volume,this.volume=this.output.gain,this._readOnly("volume"),this.mute=e.mute},t.extend(t.Volume,t.AudioNode),t.Volume.defaults={volume:0,mute:!1},Object.defineProperty(t.Volume.prototype,"mute",{get:function(){return this.volume.value===-1/0},set:function(t){!this.mute&&t?(this._unmutedVolume=this.volume.value,this.volume.value=-1/0):this.mute&&!t&&(this.volume.value=this._unmutedVolume)}}),t.Volume.prototype.dispose=function(){return this.input.dispose(),t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this.volume.dispose(),this.volume=null,this},t.Volume}),e(function(t){t.Master=function(){t.AudioNode.call(this),t.getContext(function(){this.createInsOuts(1,0),this._volume=this.output=new t.Volume,this.volume=this._volume.volume,this._readOnly("volume"),this.input.chain(this.output,this.context.destination)}.bind(this))},t.extend(t.Master,t.AudioNode),t.Master.defaults={volume:0,mute:!1},Object.defineProperty(t.Master.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Master.prototype.chain=function(){this.input.disconnect(),this.input.chain.apply(this.input,arguments),arguments[arguments.length-1].connect(this.output)},t.Master.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null},t.AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this},window.AudioNode&&(AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this});var e=t.Master;return t.Master=new e,t.Context.on("init",function(i){i.Master instanceof e?t.Master=i.Master:t.Master=new e,i.Master=t.Master}),t.Context.on("close",function(t){t.Master instanceof e&&t.Master.dispose()}),t.Master}),e(function(t){return t.Source=function(e){e=t.defaultArg(e,t.Source.defaults),t.AudioNode.call(this),this._volume=this.output=new t.Volume(e.volume),this.volume=this._volume.volume,this._readOnly("volume"),this._state=new t.TimelineState(t.State.Stopped),this._state.memory=100,this._synced=!1,this._scheduled=[],this._volume.output.output.channelCount=2,this._volume.output.output.channelCountMode="explicit",this.mute=e.mute},t.extend(t.Source,t.AudioNode),t.Source.defaults={volume:0,mute:!1},Object.defineProperty(t.Source.prototype,"state",{get:function(){return this._synced?t.Transport.state===t.State.Started?this._state.getValueAtTime(t.Transport.seconds):t.State.Stopped:this._state.getValueAtTime(this.now())}}),Object.defineProperty(t.Source.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Source.prototype._start=t.noOp,t.Source.prototype.restart=t.noOp,t.Source.prototype._stop=t.noOp,t.Source.prototype.start=function(e,i,r){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started)this._state.cancel(e),this._state.setStateAtTime(t.State.Started,e),this.restart(e,i,r);else if(this._state.setStateAtTime(t.State.Started,e),this._synced){var n=this._state.get(e);n.offset=t.defaultArg(i,0),n.duration=r;var o=t.Transport.schedule(function(t){this._start(t,i,r)}.bind(this),e);this._scheduled.push(o),t.Transport.state===t.State.Started&&this._syncedStart(this.now(),t.Transport.seconds)}else this._start.apply(this,arguments);return this},t.Source.prototype.stop=function(e){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._synced){var i=t.Transport.schedule(this._stop.bind(this),e);this._scheduled.push(i)}else this._stop.apply(this,arguments);return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this},t.Source.prototype.sync=function(){return this._synced=!0,this._syncedStart=function(e,i){if(i>0){var r=this._state.get(i);if(r&&r.state===t.State.Started&&r.time!==i){var n,o=i-this.toSeconds(r.time);r.duration&&(n=this.toSeconds(r.duration)-o),this._start(e,this.toSeconds(r.offset)+o,n)}}}.bind(this),this._syncedStop=function(e){var i=t.Transport.getSecondsAtTime(Math.max(e-this.sampleTime,0));this._state.getValueAtTime(i)===t.State.Started&&this._stop(e)}.bind(this),t.Transport.on("start loopStart",this._syncedStart),t.Transport.on("stop pause loopEnd",this._syncedStop),this},t.Source.prototype.unsync=function(){this._synced&&(t.Transport.off("stop pause loopEnd",this._syncedStop),t.Transport.off("start loopStart",this._syncedStart)),this._synced=!1;for(var e=0;e0}}),Object.defineProperty(t.Buffer.prototype,"duration",{get:function(){return this._buffer?this._buffer.duration:0}}),Object.defineProperty(t.Buffer.prototype,"length",{get:function(){return this._buffer?this._buffer.length:0}}),Object.defineProperty(t.Buffer.prototype,"numberOfChannels",{get:function(){return this._buffer?this._buffer.numberOfChannels:0}}),t.Buffer.prototype.fromArray=function(t){var e=t[0].length>0,i=e?t.length:1,r=e?t[0].length:t.length,n=this.context.createBuffer(i,r,this.context.sampleRate);e||1!==i||(t=[t]);for(var o=0;o=this._startTime&&(-1===this._stopTime||e<=this._stopTime)?t.State.Started:t.State.Stopped},t.OscillatorNode.prototype.start=function(t){if(-1!==this._startTime)throw new Error("cannot call OscillatorNode.start more than once");this._startTime=this.toSeconds(t),this._oscillator.start(this._startTime);var e=this.context.currentTime;return this._gainNode.gain.cancelScheduledValues(e),this._gainNode.gain.setValueAtTime(0,e),this._gainNode.gain.setValueAtTime(1,this._startTime),this},t.OscillatorNode.prototype.setPeriodicWave=function(t){return this._oscillator.setPeriodicWave(t),this},t.OscillatorNode.prototype.stop=function(t){return this.cancelStop(),this._stopTime=this.toSeconds(t),this._gainNode.gain.setValueAtTime(0,this._stopTime),this.context.clearTimeout(this._timeout),this._timeout=this.context.setTimeout(function(){this._oscillator.stop(this.now()),this.onended()}.bind(this),this._stopTime-this.now()),this},t.OscillatorNode.prototype.cancelStop=function(){return-1!==this._startTime&&(this._gainNode.gain.cancelScheduledValues(this._startTime+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime)),this.context.clearTimeout(this._timeout),this._stopTime=-1),this},Object.defineProperty(t.OscillatorNode.prototype,"type",{get:function(){return this._oscillator.type},set:function(t){this._oscillator.type=t}}),t.OscillatorNode.prototype.dispose=function(){return this.context.clearTimeout(this._timeout),t.AudioNode.prototype.dispose.call(this),this.onended=null,this._oscillator.disconnect(),this._oscillator=null,this._gainNode.dispose(),this._gainNode=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this},t.OscillatorNode}),e(function(t){return t.Oscillator=function(){var e=t.defaults(arguments,["frequency","type"],t.Oscillator);t.Source.call(this,e),this._oscillator=null,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this._wave=null,this._partials=t.defaultArg(e.partials,[1]),this._phase=e.phase,this._type=null,this.type=e.type,this.phase=this._phase,this._readOnly(["frequency","detune"])},t.extend(t.Oscillator,t.Source),t.Oscillator.defaults={type:"sine",frequency:440,detune:0,phase:0,partials:[]},t.Oscillator.Type={Sine:"sine",Triangle:"triangle",Sawtooth:"sawtooth",Square:"square",Custom:"custom"},t.Oscillator.prototype._start=function(e){this._oscillator=new t.OscillatorNode,this._wave?this._oscillator.setPeriodicWave(this._wave):this._oscillator.type=this._type,this._oscillator.connect(this.output),this.frequency.connect(this._oscillator.frequency),this.detune.connect(this._oscillator.detune),e=this.toSeconds(e),this._oscillator.start(e)},t.Oscillator.prototype._stop=function(t){return this._oscillator&&(t=this.toSeconds(t),this._oscillator.stop(t)),this},t.Oscillator.prototype.restart=function(t){return this._oscillator.cancelStop(),this._state.cancel(this.toSeconds(t)),this},t.Oscillator.prototype.syncFrequency=function(){return t.Transport.syncSignal(this.frequency),this},t.Oscillator.prototype.unsyncFrequency=function(){return t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Oscillator.prototype,"type",{get:function(){return this._type},set:function(e){var i=[t.Oscillator.Type.Sine,t.Oscillator.Type.Square,t.Oscillator.Type.Triangle,t.Oscillator.Type.Sawtooth].includes(e);if(0===this._phase&&i)this._wave=null,null!==this._oscillator&&this._oscillator.type;else{var r=this._getRealImaginary(e,this._phase),n=this.context.createPeriodicWave(r[0],r[1]);this._wave=n,null!==this._oscillator&&this._oscillator.setPeriodicWave(this._wave)}this._type=e}}),t.Oscillator.prototype._getRealImaginary=function(e,i){var r=2048,n=new Float32Array(r),o=new Float32Array(r),s=1;if(e===t.Oscillator.Type.Custom)r=s=this._partials.length+1;else{var a=/^(sine|triangle|square|sawtooth)(\d+)$/.exec(e);a&&(s=parseInt(a[2])+1,e=a[1],r=s=Math.max(s,2))}for(var h=1;h>1&1?-1:1):0;break;case t.Oscillator.Type.Custom:l=this._partials[h-1];break;default:throw new TypeError("Tone.Oscillator: invalid type: "+e)}0!==l?(n[h]=-l*Math.sin(i*h),o[h]=l*Math.cos(i*h)):(n[h]=0,o[h]=0)}return[n,o]},t.Oscillator.prototype._inverseFFT=function(t,e,i){for(var r=0,n=t.length,o=0;on&&r=this.values.length&&(this.index=0)):e===t.CtrlPattern.Type.Down?(this.index--,this.index<0&&(this.index=this.values.length-1)):e===t.CtrlPattern.Type.UpDown||e===t.CtrlPattern.Type.DownUp?(this._direction===t.CtrlPattern.Type.Up?this.index++:this.index--,this.index<0?(this.index=1,this._direction=t.CtrlPattern.Type.Up):this.index>=this.values.length&&(this.index=this.values.length-2,this._direction=t.CtrlPattern.Type.Down)):e===t.CtrlPattern.Type.Random?this.index=Math.floor(Math.random()*this.values.length):e===t.CtrlPattern.Type.RandomWalk?Math.random()<.5?(this.index--,this.index=Math.max(this.index,0)):(this.index++,this.index=Math.min(this.index,this.values.length-1)):e===t.CtrlPattern.Type.RandomOnce?(this.index++,this.index>=this.values.length&&(this.index=0,this._shuffleValues())):e===t.CtrlPattern.Type.AlternateUp?(this._direction===t.CtrlPattern.Type.Up?(this.index+=2,this._direction=t.CtrlPattern.Type.Down):(this.index-=1,this._direction=t.CtrlPattern.Type.Up),this.index>=this.values.length&&(this.index=0,this._direction=t.CtrlPattern.Type.Up)):e===t.CtrlPattern.Type.AlternateDown&&(this._direction===t.CtrlPattern.Type.Up?(this.index+=1,this._direction=t.CtrlPattern.Type.Down):(this.index-=2,this._direction=t.CtrlPattern.Type.Up),this.index<0&&(this.index=this.values.length-1,this._direction=t.CtrlPattern.Type.Down)),this.value},t.CtrlPattern.prototype._shuffleValues=function(){var t=[];this._shuffled=[];for(var e=0;e0;){var i=t.splice(Math.floor(t.length*Math.random()),1);this._shuffled.push(i[0])}},t.CtrlPattern.prototype.dispose=function(){this._shuffled=null,this.values=null},t.CtrlPattern}),e(function(t){return t.CtrlRandom=function(){var e=t.defaults(arguments,["min","max"],t.CtrlRandom);t.call(this),this.min=e.min,this.max=e.max,this.integer=e.integer},t.extend(t.CtrlRandom),t.CtrlRandom.defaults={min:0,max:1,integer:!1},Object.defineProperty(t.CtrlRandom.prototype,"value",{get:function(){var t=this.toSeconds(this.min),e=this.toSeconds(this.max),i=Math.random(),r=i*t+(1-i)*e;return this.integer&&(r=Math.floor(r)),r}}),t.CtrlRandom}),e(function(t){return t.Buffers=function(e){var i=Array.prototype.slice.call(arguments);i.shift();var r=t.defaults(i,["onload","baseUrl"],t.Buffers);for(var n in t.call(this),this._buffers={},this.baseUrl=r.baseUrl,this._loadingCount=0,e)this._loadingCount++,this.add(n,e[n],this._bufferLoaded.bind(this,r.onload))},t.extend(t.Buffers),t.Buffers.defaults={onload:t.noOp,baseUrl:""},t.Buffers.prototype.has=function(t){return this._buffers.hasOwnProperty(t)},t.Buffers.prototype.get=function(t){if(this.has(t))return this._buffers[t];throw new Error("Tone.Buffers: no buffer named "+t)},t.Buffers.prototype._bufferLoaded=function(t){this._loadingCount--,0===this._loadingCount&&t&&t(this)},Object.defineProperty(t.Buffers.prototype,"loaded",{get:function(){var t=!0;for(var e in this._buffers){var i=this.get(e);t=t&&i.loaded}return t}}),t.Buffers.prototype.add=function(e,i,r){return r=t.defaultArg(r,t.noOp),i instanceof t.Buffer?(this._buffers[e]=i,r(this)):i instanceof AudioBuffer?(this._buffers[e]=new t.Buffer(i),r(this)):t.isString(i)&&(this._buffers[e]=new t.Buffer(this.baseUrl+i,r)),this},t.Buffers.prototype.dispose=function(){for(var e in t.prototype.dispose.call(this),this._buffers)this._buffers[e].dispose();return this._buffers=null,this},t.Buffers}),e(function(t){var e={};return t.prototype.send=function(i,r){e.hasOwnProperty(i)||(e[i]=this.context.createGain()),r=t.defaultArg(r,0);var n=new t.Gain(r,t.Type.Decibels);return this.connect(n),n.connect(e[i]),n},t.prototype.receive=function(t,i){return e.hasOwnProperty(t)||(e[t]=this.context.createGain()),e[t].connect(this,0,i),this},t.Context.on("init",function(t){t.Buses?e=t.Buses:(e={},t.Buses=e)}),t}),e(function(t){return t.Draw=function(){t.call(this),this._events=new t.Timeline,this.expiration=.25,this.anticipation=.008,this._boundDrawLoop=this._drawLoop.bind(this)},t.extend(t.Draw),t.Draw.prototype.schedule=function(t,e){return this._events.add({callback:t,time:this.toSeconds(e)}),1===this._events.length&&requestAnimationFrame(this._boundDrawLoop),this},t.Draw.prototype.cancel=function(t){return this._events.cancel(this.toSeconds(t)),this},t.Draw.prototype._drawLoop=function(){for(var e=t.now();this._events.length&&this._events.peek().time-this.anticipation<=e;){var i=this._events.shift();e-i.time<=this.expiration&&i.callback()}this._events.length>0&&requestAnimationFrame(this._boundDrawLoop)},t.Draw=new t.Draw,t.Draw}),e(function(t){t.Listener=function(){t.call(this),this._orientation=[0,0,0,0,0,0],this._position=[0,0,0],t.getContext(function(){this.set(e.defaults)}.bind(this))},t.extend(t.Listener),t.Listener.defaults={positionX:0,positionY:0,positionZ:0,forwardX:0,forwardY:0,forwardZ:1,upX:0,upY:1,upZ:0},t.Listener.prototype._rampTimeConstant=.01,t.Listener.prototype.setPosition=function(t,e,i){if(this.context.listener.positionX){var r=this.now();this.context.listener.positionX.setTargetAtTime(t,r,this._rampTimeConstant),this.context.listener.positionY.setTargetAtTime(e,r,this._rampTimeConstant),this.context.listener.positionZ.setTargetAtTime(i,r,this._rampTimeConstant)}else this.context.listener.setPosition(t,e,i);return this._position=Array.prototype.slice.call(arguments),this},t.Listener.prototype.setOrientation=function(t,e,i,r,n,o){if(this.context.listener.forwardX){var s=this.now();this.context.listener.forwardX.setTargetAtTime(t,s,this._rampTimeConstant),this.context.listener.forwardY.setTargetAtTime(e,s,this._rampTimeConstant),this.context.listener.forwardZ.setTargetAtTime(i,s,this._rampTimeConstant),this.context.listener.upX.setTargetAtTime(r,s,this._rampTimeConstant),this.context.listener.upY.setTargetAtTime(n,s,this._rampTimeConstant),this.context.listener.upZ.setTargetAtTime(o,s,this._rampTimeConstant)}else this.context.listener.setOrientation(t,e,i,r,n,o);return this._orientation=Array.prototype.slice.call(arguments),this},Object.defineProperty(t.Listener.prototype,"positionX",{set:function(t){this._position[0]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[0]}}),Object.defineProperty(t.Listener.prototype,"positionY",{set:function(t){this._position[1]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[1]}}),Object.defineProperty(t.Listener.prototype,"positionZ",{set:function(t){this._position[2]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[2]}}),Object.defineProperty(t.Listener.prototype,"forwardX",{set:function(t){this._orientation[0]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[0]}}),Object.defineProperty(t.Listener.prototype,"forwardY",{set:function(t){this._orientation[1]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[1]}}),Object.defineProperty(t.Listener.prototype,"forwardZ",{set:function(t){this._orientation[2]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[2]}}),Object.defineProperty(t.Listener.prototype,"upX",{set:function(t){this._orientation[3]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[3]}}),Object.defineProperty(t.Listener.prototype,"upY",{set:function(t){this._orientation[4]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[4]}}),Object.defineProperty(t.Listener.prototype,"upZ",{set:function(t){this._orientation[5]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[5]}}),t.Listener.prototype.dispose=function(){return this._orientation=null,this._position=null,this};var e=t.Listener;return t.Listener=new e,t.Context.on("init",function(i){i.Listener instanceof e?t.Listener=i.Listener:t.Listener=new e,i.Listener=t.Listener}),t.Listener}),e(function(t){return t.Offline=function(e,i){var r,n=t.context.sampleRate,o=t.context,s=function e(i,r,n,o){o=t.defaultArg(o,0);var s=new t.OfflineContext(2,r,n);t.context=s;var a=i(t.Transport);return s.currentTime>0&&o<1e3?e(i,r,n,++o):{response:a,context:s}}(e,i,n),a=s.response,h=s.context;return r=a instanceof Promise?a.then(function(){return h.render()}):h.render(),t.context=o,r.then(function(e){return new t.Buffer(e)})},t.Offline}),e(function(t){return t.Effect=function(){var e=t.defaults(arguments,["wet"],t.Effect);t.AudioNode.call(this),this.createInsOuts(1,1),this._dryWet=new t.CrossFade(e.wet),this.wet=this._dryWet.fade,this.effectSend=new t.Gain,this.effectReturn=new t.Gain,this.input.connect(this._dryWet.a),this.input.connect(this.effectSend),this.effectReturn.connect(this._dryWet.b),this._dryWet.connect(this.output),this._readOnly(["wet"])},t.extend(t.Effect,t.AudioNode),t.Effect.defaults={wet:1},t.Effect.prototype.connectEffect=function(t){return this.effectSend.chain(t,this.effectReturn),this},t.Effect.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this._dryWet.dispose(),this._dryWet=null,this.effectSend.dispose(),this.effectSend=null,this.effectReturn.dispose(),this.effectReturn=null,this._writable(["wet"]),this.wet=null,this},t.Effect}),e(function(t){return t.AutoFilter=function(){var e=t.defaults(arguments,["frequency","baseFrequency","octaves"],t.AutoFilter);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth}),this.depth=this._lfo.amplitude,this.frequency=this._lfo.frequency,this.filter=new t.Filter(e.filter),this._octaves=0,this.connectEffect(this.filter),this._lfo.connect(this.filter.frequency),this.type=e.type,this._readOnly(["frequency","depth"]),this.octaves=e.octaves,this.baseFrequency=e.baseFrequency},t.extend(t.AutoFilter,t.Effect),t.AutoFilter.defaults={frequency:1,type:"sine",depth:1,baseFrequency:200,octaves:2.6,filter:{type:"lowpass",rolloff:-12,Q:1}},t.AutoFilter.prototype.start=function(t){return this._lfo.start(t),this},t.AutoFilter.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoFilter.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoFilter.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoFilter.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),Object.defineProperty(t.AutoFilter.prototype,"baseFrequency",{get:function(){return this._lfo.min},set:function(t){this._lfo.min=this.toFrequency(t),this.octaves=this._octaves}}),Object.defineProperty(t.AutoFilter.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._lfo.max=this.baseFrequency*Math.pow(2,t)}}),t.AutoFilter.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this.filter.dispose(),this.filter=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null,this},t.AutoFilter}),e(function(t){return t.AutoPanner=function(){var e=t.defaults(arguments,["frequency"],t.AutoPanner);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth,min:-1,max:1}),this.depth=this._lfo.amplitude,this._panner=new t.Panner,this.frequency=this._lfo.frequency,this.connectEffect(this._panner),this._lfo.connect(this._panner.pan),this.type=e.type,this._readOnly(["depth","frequency"])},t.extend(t.AutoPanner,t.Effect),t.AutoPanner.defaults={frequency:1,type:"sine",depth:1},t.AutoPanner.prototype.start=function(t){return this._lfo.start(t),this},t.AutoPanner.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoPanner.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoPanner.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoPanner.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.AutoPanner.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this._panner.dispose(),this._panner=null,this._writable(["depth","frequency"]),this.frequency=null,this.depth=null,this},t.AutoPanner}),e(function(t){return t.AutoWah=function(){var e=t.defaults(arguments,["baseFrequency","octaves","sensitivity"],t.AutoWah);t.Effect.call(this,e),this.follower=new t.Follower(e.follower),this._sweepRange=new t.ScaleExp(0,1,.5),this._baseFrequency=e.baseFrequency,this._octaves=e.octaves,this._inputBoost=new t.Gain,this._bandpass=new t.Filter({rolloff:-48,frequency:0,Q:e.Q}),this._peaking=new t.Filter(0,"peaking"),this._peaking.gain.value=e.gain,this.gain=this._peaking.gain,this.Q=this._bandpass.Q,this.effectSend.chain(this._inputBoost,this.follower,this._sweepRange),this._sweepRange.connect(this._bandpass.frequency),this._sweepRange.connect(this._peaking.frequency),this.effectSend.chain(this._bandpass,this._peaking,this.effectReturn),this._setSweepRange(),this.sensitivity=e.sensitivity,this._readOnly(["gain","Q"])},t.extend(t.AutoWah,t.Effect),t.AutoWah.defaults={baseFrequency:100,octaves:6,sensitivity:0,Q:2,gain:2,follower:{attack:.3,release:.5}},Object.defineProperty(t.AutoWah.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"baseFrequency",{get:function(){return this._baseFrequency},set:function(t){this._baseFrequency=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"sensitivity",{get:function(){return t.gainToDb(1/this._inputBoost.gain.value)},set:function(e){this._inputBoost.gain.value=1/t.dbToGain(e)}}),t.AutoWah.prototype._setSweepRange=function(){this._sweepRange.min=this._baseFrequency,this._sweepRange.max=Math.min(this._baseFrequency*Math.pow(2,this._octaves),this.context.sampleRate/2)},t.AutoWah.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this.follower.dispose(),this.follower=null,this._sweepRange.dispose(),this._sweepRange=null,this._bandpass.dispose(),this._bandpass=null,this._peaking.dispose(),this._peaking=null,this._inputBoost.dispose(),this._inputBoost=null,this._writable(["gain","Q"]),this.gain=null,this.Q=null,this},t.AutoWah}),e(function(t){return t.Modulo=function(e){t.SignalBase.call(this),this.createInsOuts(1,0),this._shaper=new t.WaveShaper(Math.pow(2,16)),this._multiply=new t.Multiply,this._subtract=this.output=new t.Subtract,this._modSignal=new t.Signal(e),this.input.fan(this._shaper,this._subtract),this._modSignal.connect(this._multiply,0,0),this._shaper.connect(this._multiply,0,1),this._multiply.connect(this._subtract,0,1),this._setWaveShaper(e)},t.extend(t.Modulo,t.SignalBase),t.Modulo.prototype._setWaveShaper=function(t){this._shaper.setMap(function(e){return Math.floor((e+1e-4)/t)})},Object.defineProperty(t.Modulo.prototype,"value",{get:function(){return this._modSignal.value},set:function(t){this._modSignal.value=t,this._setWaveShaper(t)}}),t.Modulo.prototype.dispose=function(){return t.SignalBase.prototype.dispose.call(this),this._shaper.dispose(),this._shaper=null,this._multiply.dispose(),this._multiply=null,this._subtract.dispose(),this._subtract=null,this._modSignal.dispose(),this._modSignal=null,this},t.Modulo}),e(function(t){return t.BitCrusher=function(){var e=t.defaults(arguments,["bits"],t.BitCrusher);t.Effect.call(this,e);var i=1/Math.pow(2,e.bits-1);this._subtract=new t.Subtract,this._modulo=new t.Modulo(i),this._bits=e.bits,this.effectSend.fan(this._subtract,this._modulo),this._modulo.connect(this._subtract,0,1),this._subtract.connect(this.effectReturn)},t.extend(t.BitCrusher,t.Effect),t.BitCrusher.defaults={bits:4},Object.defineProperty(t.BitCrusher.prototype,"bits",{get:function(){return this._bits},set:function(t){this._bits=t;var e=1/Math.pow(2,t-1);this._modulo.value=e}}),t.BitCrusher.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._subtract.dispose(),this._subtract=null,this._modulo.dispose(),this._modulo=null,this},t.BitCrusher}),e(function(t){return t.Chebyshev=function(){var e=t.defaults(arguments,["order"],t.Chebyshev);t.Effect.call(this,e),this._shaper=new t.WaveShaper(4096),this._order=e.order,this.connectEffect(this._shaper),this.order=e.order,this.oversample=e.oversample},t.extend(t.Chebyshev,t.Effect),t.Chebyshev.defaults={order:1,oversample:"none"},t.Chebyshev.prototype._getCoefficient=function(t,e,i){return i.hasOwnProperty(e)?i[e]:(i[e]=0===e?0:1===e?t:2*t*this._getCoefficient(t,e-1,i)-this._getCoefficient(t,e-2,i),i[e])},Object.defineProperty(t.Chebyshev.prototype,"order",{get:function(){return this._order},set:function(t){this._order=t;for(var e=new Array(4096),i=e.length,r=0;r=this._startTime&&!this._sourceStopped?t.State.Started:t.State.Stopped},t.BufferSource.prototype.start=function(e,i,r,n,o){if(-1!==this._startTime)throw new Error("Tone.BufferSource can only be started once.");if(!this.buffer.loaded)throw new Error("Tone.BufferSource: buffer is either not set or not loaded.");e=this.toSeconds(e),i=this.loop?t.defaultArg(i,this.loopStart):t.defaultArg(i,0),i=this.toSeconds(i),n=t.defaultArg(n,1),this._gain=n,o=this.toSeconds(t.defaultArg(o,this.fadeIn)),this.fadeIn=o,o>0?(this._gainNode.gain.setValueAtTime(0,e),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(this._gain,e+o):this._gainNode.gain.exponentialApproachValueAtTime(this._gain,e,o)):this._gainNode.gain.setValueAtTime(n,e),this._startTime=e;var s=this.toSeconds(t.defaultArg(r,this.buffer.duration-i%this.buffer.duration));if(s=Math.max(s,0),t.isDefined(r)&&(this.loop||(s=Math.min(s,this.buffer.duration-i%this.buffer.duration)),this.stop(e+s,this.fadeOut)),this.loop){var a=this.loopEnd||this.buffer.duration,h=this.loopStart;i>=a&&(i=(i-h)%(a-h)+h)}return this._source.buffer=this.buffer.get(),this._source.loopEnd=this.loopEnd||this.buffer.duration,ithis.sampleTime?(this._gainNode.gain.setValueAtTime(this._gain,n),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(0,e):this._gainNode.gain.exponentialApproachValueAtTime(0,n,i)):this._gainNode.gain.setValueAtTime(0,e),t.context.clearTimeout(this._onendedTimeout),this._onendedTimeout=t.context.setTimeout(this._onended.bind(this),this._stopTime-this.now()),this}},t.BufferSource.prototype.cancelStop=function(){if(-1!==this._startTime&&!this._sourceStopped){var t=this.toSeconds(this.fadeIn);this._gainNode.gain.cancelScheduledValues(this._startTime+t+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime+t+this.sampleTime)),this.context.clearTimeout(this._onendedTimeout),this._stopTime=-1}return this},t.BufferSource.prototype._onended=function(){if(!this._sourceStopped){this._sourceStopped=!0;var t="exponential"===this.curve?2*this.fadeOut:0;this._sourceStarted&&-1!==this._stopTime&&this._source.stop(this._stopTime+t),this.onended(this)}},Object.defineProperty(t.BufferSource.prototype,"loopStart",{get:function(){return this._source.loopStart},set:function(t){this._source.loopStart=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"loopEnd",{get:function(){return this._source.loopEnd},set:function(t){this._source.loopEnd=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"buffer",{get:function(){return this._buffer},set:function(t){this._buffer.set(t)}}),Object.defineProperty(t.BufferSource.prototype,"loop",{get:function(){return this._source.loop},set:function(t){this._source.loop=t,this.cancelStop()}}),t.BufferSource.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.onended=null,this._source.onended=null,this._source.disconnect(),this._source=null,this._gainNode.dispose(),this._gainNode=null,this._buffer.dispose(),this._buffer=null,this._startTime=-1,this.playbackRate=null,t.context.clearTimeout(this._onendedTimeout),this},t.BufferSource}),e(function(t){t.Noise=function(){var e=t.defaults(arguments,["type"],t.Noise);t.Source.call(this,e),this._source=null,this._type=e.type,this._playbackRate=e.playbackRate},t.extend(t.Noise,t.Source),t.Noise.defaults={type:"white",playbackRate:1},Object.defineProperty(t.Noise.prototype,"type",{get:function(){return this._type},set:function(e){if(this._type!==e){if(!(e in i))throw new TypeError("Tone.Noise: invalid type: "+e);if(this._type=e,this.state===t.State.Started){var r=this.now();this._stop(r),this._start(r)}}}}),Object.defineProperty(t.Noise.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._source&&(this._source.playbackRate.value=t)}}),t.Noise.prototype._start=function(e){var r=i[this._type];this._source=new t.BufferSource(r).connect(this.output),this._source.loop=!0,this._source.playbackRate.value=this._playbackRate,this._source.start(this.toSeconds(e),Math.random()*(r.duration-.001))},t.Noise.prototype._stop=function(t){this._source&&(this._source.stop(this.toSeconds(t)),this._source=null)},t.Noise.prototype.restart=function(t){this._stop(t),this._start(t)},t.Noise.prototype.dispose=function(){return t.Source.prototype.dispose.call(this),null!==this._source&&(this._source.disconnect(),this._source=null),this._buffer=null,this};var e={pink:function(){for(var t=[],e=0;e<2;e++){var i,r,n,o,s,a,h,l=new Float32Array(220500);t[e]=l,i=r=n=o=s=a=h=0;for(var u=0;u<220500;u++){var c=2*Math.random()-1;i=.99886*i+.0555179*c,r=.99332*r+.0750759*c,n=.969*n+.153852*c,o=.8665*o+.3104856*c,s=.55*s+.5329522*c,a=-.7616*a-.016898*c,l[u]=i+r+n+o+s+a+h+.5362*c,l[u]*=.11,h=.115926*c}}return t}(),brown:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0,n=0;n<220500;n++){var o=2*Math.random()-1;i[n]=(r+.02*o)/1.02,r=i[n],i[n]*=3.5}}return t}(),white:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0;r<220500;r++)i[r]=2*Math.random()-1}return t}()},i={};function r(){for(var r in e)i[r]=(new t.Buffer).fromArray(e[r])}return t.getContext(r),t.Context.on("init",r),t.Noise}),e(function(t){return t.Reverb=function(){var e=t.defaults(arguments,["decay"],t.Reverb);t.Effect.call(this,e),this._convolver=this.context.createConvolver(),this.decay=e.decay,this.preDelay=e.preDelay,this.connectEffect(this._convolver)},t.extend(t.Reverb,t.Effect),t.Reverb.defaults={decay:1.5,preDelay:.01},t.Reverb.prototype.generate=function(){return t.Offline(function(){var e=new t.Noise,i=new t.Noise,r=new t.Merge;e.connect(r.left),i.connect(r.right);var n=(new t.Gain).toMaster();r.connect(n),e.start(0),i.start(0),n.gain.setValueAtTime(0,0),n.gain.linearRampToValueAtTime(1,this.preDelay),n.gain.exponentialApproachValueAtTime(0,this.preDelay,this.decay-this.preDelay)}.bind(this),this.decay).then(function(t){return this._convolver.buffer=t.get(),this}.bind(this))},t.Reverb.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._convolver.disconnect(),this._convolver=null,this},t.Reverb}),e(function(t){return t.StereoFeedbackEffect=function(){var e=t.defaults(arguments,["feedback"],t.FeedbackEffect);t.StereoEffect.call(this,e),this.feedback=new t.Signal(e.feedback,t.Type.NormalRange),this._feedbackL=new t.Gain,this._feedbackR=new t.Gain,this.effectReturnL.chain(this._feedbackL,this.effectSendL),this.effectReturnR.chain(this._feedbackR,this.effectSendR),this.feedback.fan(this._feedbackL.gain,this._feedbackR.gain),this._readOnly(["feedback"])},t.extend(t.StereoFeedbackEffect,t.StereoEffect),t.StereoFeedbackEffect.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["feedback"]),this.feedback.dispose(),this.feedback=null,this._feedbackL.dispose(),this._feedbackL=null,this._feedbackR.dispose(),this._feedbackR=null,this},t.StereoFeedbackEffect}),e(function(t){return t.StereoWidener=function(){var e=t.defaults(arguments,["width"],t.StereoWidener);t.MidSideEffect.call(this,e),this.width=new t.Signal(e.width,t.Type.NormalRange),this._readOnly(["width"]),this._twoTimesWidthMid=new t.Multiply(2),this._twoTimesWidthSide=new t.Multiply(2),this._midMult=new t.Multiply,this._twoTimesWidthMid.connect(this._midMult,0,1),this.midSend.chain(this._midMult,this.midReturn),this._oneMinusWidth=new t.Subtract,this._oneMinusWidth.connect(this._twoTimesWidthMid),this.context.getConstant(1).connect(this._oneMinusWidth,0,0),this.width.connect(this._oneMinusWidth,0,1),this._sideMult=new t.Multiply,this.width.connect(this._twoTimesWidthSide),this._twoTimesWidthSide.connect(this._sideMult,0,1),this.sideSend.chain(this._sideMult,this.sideReturn)},t.extend(t.StereoWidener,t.MidSideEffect),t.StereoWidener.defaults={width:.5},t.StereoWidener.prototype.dispose=function(){return t.MidSideEffect.prototype.dispose.call(this),this._writable(["width"]),this.width.dispose(),this.width=null,this._midMult.dispose(),this._midMult=null,this._sideMult.dispose(),this._sideMult=null,this._twoTimesWidthMid.dispose(),this._twoTimesWidthMid=null,this._twoTimesWidthSide.dispose(),this._twoTimesWidthSide=null,this._oneMinusWidth.dispose(),this._oneMinusWidth=null,this},t.StereoWidener}),e(function(t){return t.Tremolo=function(){var e=t.defaults(arguments,["frequency","depth"],t.Tremolo);t.StereoEffect.call(this,e),this._lfoL=new t.LFO({phase:e.spread,min:1,max:0}),this._lfoR=new t.LFO({phase:e.spread,min:1,max:0}),this._amplitudeL=new t.Gain,this._amplitudeR=new t.Gain,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.depth=new t.Signal(e.depth,t.Type.NormalRange),this._readOnly(["frequency","depth"]),this.effectSendL.chain(this._amplitudeL,this.effectReturnL),this.effectSendR.chain(this._amplitudeR,this.effectReturnR),this._lfoL.connect(this._amplitudeL.gain),this._lfoR.connect(this._amplitudeR.gain),this.frequency.fan(this._lfoL.frequency,this._lfoR.frequency),this.depth.fan(this._lfoR.amplitude,this._lfoL.amplitude),this.type=e.type,this.spread=e.spread},t.extend(t.Tremolo,t.StereoEffect),t.Tremolo.defaults={frequency:10,type:"sine",depth:.5,spread:180},t.Tremolo.prototype.start=function(t){return this._lfoL.start(t),this._lfoR.start(t),this},t.Tremolo.prototype.stop=function(t){return this._lfoL.stop(t),this._lfoR.stop(t),this},t.Tremolo.prototype.sync=function(e){return this._lfoL.sync(e),this._lfoR.sync(e),t.Transport.syncSignal(this.frequency),this},t.Tremolo.prototype.unsync=function(){return this._lfoL.unsync(),this._lfoR.unsync(),t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Tremolo.prototype,"type",{get:function(){return this._lfoL.type},set:function(t){this._lfoL.type=t,this._lfoR.type=t}}),Object.defineProperty(t.Tremolo.prototype,"spread",{get:function(){return this._lfoR.phase-this._lfoL.phase},set:function(t){this._lfoL.phase=90-t/2,this._lfoR.phase=t/2+90}}),t.Tremolo.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["frequency","depth"]),this._lfoL.dispose(),this._lfoL=null,this._lfoR.dispose(),this._lfoR=null,this._amplitudeL.dispose(),this._amplitudeL=null,this._amplitudeR.dispose(),this._amplitudeR=null,this.frequency=null,this.depth=null,this},t.Tremolo}),e(function(t){return t.Vibrato=function(){var e=t.defaults(arguments,["frequency","depth"],t.Vibrato);t.Effect.call(this,e),this._delayNode=new t.Delay(0,e.maxDelay),this._lfo=new t.LFO({type:e.type,min:0,max:e.maxDelay,frequency:e.frequency,phase:-90}).start().connect(this._delayNode.delayTime),this.frequency=this._lfo.frequency,this.depth=this._lfo.amplitude,this.depth.value=e.depth,this._readOnly(["frequency","depth"]),this.effectSend.chain(this._delayNode,this.effectReturn)},t.extend(t.Vibrato,t.Effect),t.Vibrato.defaults={maxDelay:.005,frequency:5,depth:.1,type:"sine"},Object.defineProperty(t.Vibrato.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.Vibrato.prototype.dispose=function(){t.Effect.prototype.dispose.call(this),this._delayNode.dispose(),this._delayNode=null,this._lfo.dispose(),this._lfo=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null},t.Vibrato}),e(function(t){return t.Event=function(){var e=t.defaults(arguments,["callback","value"],t.Event);t.call(this),this._loop=e.loop,this.callback=e.callback,this.value=e.value,this._loopStart=this.toTicks(e.loopStart),this._loopEnd=this.toTicks(e.loopEnd),this._state=new t.TimelineState(t.State.Stopped),this._playbackRate=1,this._startOffset=0,this._probability=e.probability,this._humanize=e.humanize,this.mute=e.mute,this.playbackRate=e.playbackRate},t.extend(t.Event),t.Event.defaults={callback:t.noOp,loop:!1,loopEnd:"1m",loopStart:0,playbackRate:1,value:null,probability:1,mute:!1,humanize:!1},t.Event.prototype._rescheduleEvents=function(e){return e=t.defaultArg(e,-1),this._state.forEachFrom(e,function(e){var i;if(e.state===t.State.Started){t.isDefined(e.id)&&t.Transport.clear(e.id);var r=e.time+Math.round(this.startOffset/this._playbackRate);if(this._loop){i=1/0,t.isNumber(this._loop)&&(i=this._loop*this._getLoopDuration());var n=this._state.getAfter(r);null!==n&&(i=Math.min(i,n.time-r)),i!==1/0&&(this._state.setStateAtTime(t.State.Stopped,r+i+1),i=t.Ticks(i));var o=t.Ticks(this._getLoopDuration());e.id=t.Transport.scheduleRepeat(this._tick.bind(this),o,t.Ticks(r),i)}else e.id=t.Transport.schedule(this._tick.bind(this),t.Ticks(r))}}.bind(this)),this},Object.defineProperty(t.Event.prototype,"state",{get:function(){return this._state.getValueAtTime(t.Transport.ticks)}}),Object.defineProperty(t.Event.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t}}),Object.defineProperty(t.Event.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t}}),Object.defineProperty(t.Event.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t}}),t.Event.prototype.start=function(e){return e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Stopped&&(this._state.add({state:t.State.Started,time:e,id:void 0}),this._rescheduleEvents(e)),this},t.Event.prototype.stop=function(e){if(this.cancel(e),e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Started){this._state.setStateAtTime(t.State.Stopped,e);var i=this._state.getBefore(e),r=e;null!==i&&(r=i.time),this._rescheduleEvents(r)}return this},t.Event.prototype.cancel=function(e){return e=t.defaultArg(e,-1/0),e=this.toTicks(e),this._state.forEachFrom(e,function(e){t.Transport.clear(e.id)}),this._state.cancel(e),this},t.Event.prototype._tick=function(e){var i=t.Transport.getTicksAtTime(e);if(!this.mute&&this._state.getValueAtTime(i)===t.State.Started){if(this.probability<1&&Math.random()>this.probability)return;if(this.humanize){var r=.02;t.isBoolean(this.humanize)||(r=this.toSeconds(this.humanize)),e+=(2*Math.random()-1)*r}this.callback(e,this.value)}},t.Event.prototype._getLoopDuration=function(){return Math.round((this._loopEnd-this._loopStart)/this._playbackRate)},Object.defineProperty(t.Event.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"progress",{get:function(){if(this._loop){var e=t.Transport.ticks,i=this._state.get(e);if(null!==i&&i.state===t.State.Started){var r=this._getLoopDuration();return(e-i.time)%r/r}return 0}return 0}}),t.Event.prototype.dispose=function(){this.cancel(),this._state.dispose(),this._state=null,this.callback=null,this.value=null},t.Event}),e(function(t){return t.Loop=function(){var e=t.defaults(arguments,["callback","interval"],t.Loop);t.call(this),this._event=new t.Event({callback:this._tick.bind(this),loop:!0,loopEnd:e.interval,playbackRate:e.playbackRate,probability:e.probability}),this.callback=e.callback,this.iterations=e.iterations},t.extend(t.Loop),t.Loop.defaults={interval:"4n",callback:t.noOp,playbackRate:1,iterations:1/0,probability:!0,mute:!1},t.Loop.prototype.start=function(t){return this._event.start(t),this},t.Loop.prototype.stop=function(t){return this._event.stop(t),this},t.Loop.prototype.cancel=function(t){return this._event.cancel(t),this},t.Loop.prototype._tick=function(t){this.callback(t)},Object.defineProperty(t.Loop.prototype,"state",{get:function(){return this._event.state}}),Object.defineProperty(t.Loop.prototype,"progress",{get:function(){return this._event.progress}}),Object.defineProperty(t.Loop.prototype,"interval",{get:function(){return this._event.loopEnd},set:function(t){this._event.loopEnd=t}}),Object.defineProperty(t.Loop.prototype,"playbackRate",{get:function(){return this._event.playbackRate},set:function(t){this._event.playbackRate=t}}),Object.defineProperty(t.Loop.prototype,"humanize",{get:function(){return this._event.humanize},set:function(t){this._event.humanize=t}}),Object.defineProperty(t.Loop.prototype,"probability",{get:function(){return this._event.probability},set:function(t){this._event.probability=t}}),Object.defineProperty(t.Loop.prototype,"mute",{get:function(){return this._event.mute},set:function(t){this._event.mute=t}}),Object.defineProperty(t.Loop.prototype,"iterations",{get:function(){return!0===this._event.loop?1/0:this._event.loop},set:function(t){this._event.loop=t===1/0||t}}),t.Loop.prototype.dispose=function(){this._event.dispose(),this._event=null,this.callback=null},t.Loop}),e(function(t){return t.Part=function(){var e=t.defaults(arguments,["callback","events"],t.Part);t.Event.call(this,e),this._events=[];for(var i=0;i=this._loopStart&&e.startOffset=r&&(e.loop=!1,e.start(t.Ticks(i))):e.startOffset>=r&&e.start(t.Ticks(i))},Object.defineProperty(t.Part.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t,this._forEach(function(t){t.startOffset+=this._startOffset})}}),t.Part.prototype.stop=function(e){var i=this.toTicks(e);return this._state.cancel(i),this._state.setStateAtTime(t.State.Stopped,i),this._forEach(function(t){t.stop(e)}),this},t.Part.prototype.at=function(e,i){e=t.TransportTime(e);for(var r=t.Ticks(1).toSeconds(),n=0;n=0;r--){var n=this._events[r];n instanceof t.Part?n.remove(e,i):n.startOffset===e&&(t.isUndef(i)||t.isDefined(i)&&n.value===i)&&(this._events.splice(r,1),n.dispose())}return this},t.Part.prototype.removeAll=function(){return this._forEach(function(t){t.dispose()}),this._events=[],this},t.Part.prototype.cancel=function(t){return this._forEach(function(e){e.cancel(t)}),this._state.cancel(this.toTicks(t)),this},t.Part.prototype._forEach=function(e,i){if(this._events){i=t.defaultArg(i,this);for(var r=this._events.length-1;r>=0;r--){var n=this._events[r];n instanceof t.Part?n._forEach(e,i):e.call(i,n)}}return this},t.Part.prototype._setAll=function(t,e){this._forEach(function(i){i[t]=e})},t.Part.prototype._tick=function(t,e){this.mute||this.callback(t,e)},t.Part.prototype._testLoopBoundries=function(e){e.startOffset=this._loopEnd?e.cancel(0):e.state===t.State.Stopped&&this._restartEvent(e)},Object.defineProperty(t.Part.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t,this._setAll("probability",t)}}),Object.defineProperty(t.Part.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t,this._setAll("humanize",t)}}),Object.defineProperty(t.Part.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._forEach(function(e){e._loopStart=this._loopStart,e._loopEnd=this._loopEnd,e.loop=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._forEach(function(e){e.loopEnd=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._forEach(function(t){t.loopStart=this.loopStart,this._testLoopBoundries(t)})}}),Object.defineProperty(t.Part.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._setAll("playbackRate",t)}}),Object.defineProperty(t.Part.prototype,"length",{get:function(){return this._events.length}}),t.Part.prototype.dispose=function(){return this.removeAll(),this._state.dispose(),this._state=null,this.callback=null,this._events=null,this},t.Part}),e(function(t){return t.Pattern=function(){var e=t.defaults(arguments,["callback","values","pattern"],t.Pattern);t.Loop.call(this,e),this._pattern=new t.CtrlPattern({values:e.values,type:e.pattern,index:e.index})},t.extend(t.Pattern,t.Loop),t.Pattern.defaults={pattern:t.CtrlPattern.Type.Up,callback:t.noOp,values:[]},t.Pattern.prototype._tick=function(t){this.callback(t,this._pattern.value),this._pattern.next()},Object.defineProperty(t.Pattern.prototype,"index",{get:function(){return this._pattern.index},set:function(t){this._pattern.index=t}}),Object.defineProperty(t.Pattern.prototype,"values",{get:function(){return this._pattern.values},set:function(t){this._pattern.values=t}}),Object.defineProperty(t.Pattern.prototype,"value",{get:function(){return this._pattern.value}}),Object.defineProperty(t.Pattern.prototype,"pattern",{get:function(){return this._pattern.type},set:function(t){this._pattern.type=t}}),t.Pattern.prototype.dispose=function(){t.Loop.prototype.dispose.call(this),this._pattern.dispose(),this._pattern=null},t.Pattern}),e(function(t){return t.Sequence=function(){var e=t.defaults(arguments,["callback","events","subdivision"],t.Sequence),i=e.events;if(delete e.events,t.Part.call(this,e),this._subdivision=this.toTicks(e.subdivision),t.isUndef(e.loopEnd)&&t.isDefined(i)&&(this._loopEnd=i.length*this._subdivision),this._loop=!0,t.isDefined(i))for(var r=0;r1){var e=-t/2,i=t/(this._oscillators.length-1);this._forEach(function(t,r){t.detune.value=e+i*r})}}}),Object.defineProperty(t.FatOscillator.prototype,"count",{get:function(){return this._oscillators.length},set:function(e){if(e=Math.max(e,1),this._oscillators.length!==e){this._forEach(function(t){t.dispose()}),this._oscillators=[];for(var i=0;i0&&this.getLevelAtTime(e)>.05){var i=this.toSeconds(this.portamento);this.frequency.exponentialRampTo(t,i,e)}else this.frequency.setValueAtTime(t,e);return this},t.Monophonic}),e(function(t){return t.Synth=function(e){e=t.defaultArg(e,t.Synth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","frequency","detune","envelope"])},t.extend(t.Synth,t.Monophonic),t.Synth.defaults={oscillator:{type:"triangle"},envelope:{attack:.005,decay:.1,sustain:.3,release:1}},t.Synth.prototype._triggerEnvelopeAttack=function(t,e){return this.envelope.triggerAttack(t,e),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.Synth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.Synth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.frequency=null,this.detune=null,this},t.Synth}),e(function(t){return t.AMSynth=function(e){e=t.defaultArg(e,t.AMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth,this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth,this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this._modulationScale=new t.AudioToGain,this._modulationNode=new t.Gain,this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.chain(this._modulationScale,this._modulationNode.gain),this._carrier.chain(this._modulationNode,this.output),this._readOnly(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.AMSynth,t.Monophonic),t.AMSynth.defaults={harmonicity:3,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.AMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.AMSynth.prototype._triggerEnvelopeRelease=function(t){return this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.AMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationScale.dispose(),this._modulationScale=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.AMSynth}),e(function(t){return t.MonoSynth=function(e){e=t.defaultArg(e,t.MonoSynth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.filter=new t.Filter(e.filter),this.filterEnvelope=new t.FrequencyEnvelope(e.filterEnvelope),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.filter,this.envelope,this.output),this.filterEnvelope.connect(this.filter.frequency),this._readOnly(["oscillator","frequency","detune","filter","filterEnvelope","envelope"])},t.extend(t.MonoSynth,t.Monophonic),t.MonoSynth.defaults={frequency:"C4",detune:0,oscillator:{type:"square"},filter:{Q:6,type:"lowpass",rolloff:-24},envelope:{attack:.005,decay:.1,sustain:.9,release:1},filterEnvelope:{attack:.06,decay:.2,sustain:.5,release:2,baseFrequency:200,octaves:7,exponent:2}},t.MonoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.envelope.triggerAttack(t,e),this.filterEnvelope.triggerAttack(t),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.MonoSynth.prototype._triggerEnvelopeRelease=function(t){return this.envelope.triggerRelease(t),this.filterEnvelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MonoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","filter","filterEnvelope","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.filterEnvelope.dispose(),this.filterEnvelope=null,this.filter.dispose(),this.filter=null,this.frequency=null,this.detune=null,this},t.MonoSynth}),e(function(t){return t.DuoSynth=function(e){e=t.defaultArg(e,t.DuoSynth.defaults),t.Monophonic.call(this,e),this.voice0=new t.MonoSynth(e.voice0),this.voice0.volume.value=-10,this.voice1=new t.MonoSynth(e.voice1),this.voice1.volume.value=-10,this._vibrato=new t.LFO(e.vibratoRate,-50,50),this._vibrato.start(),this.vibratoRate=this._vibrato.frequency,this._vibratoGain=new t.Gain(e.vibratoAmount,t.Type.Positive),this.vibratoAmount=this._vibratoGain.gain,this.frequency=new t.Signal(440,t.Type.Frequency),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.frequency.connect(this.voice0.frequency),this.frequency.chain(this.harmonicity,this.voice1.frequency),this._vibrato.connect(this._vibratoGain),this._vibratoGain.fan(this.voice0.detune,this.voice1.detune),this.voice0.connect(this.output),this.voice1.connect(this.output),this._readOnly(["voice0","voice1","frequency","vibratoAmount","vibratoRate"])},t.extend(t.DuoSynth,t.Monophonic),t.DuoSynth.defaults={vibratoAmount:.5,vibratoRate:5,harmonicity:1.5,voice0:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}},voice1:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}}},t.DuoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.voice0._triggerEnvelopeAttack(t,e),this.voice1._triggerEnvelopeAttack(t,e),this},t.DuoSynth.prototype._triggerEnvelopeRelease=function(t){return this.voice0._triggerEnvelopeRelease(t),this.voice1._triggerEnvelopeRelease(t),this},t.DuoSynth.prototype.getLevelAtTime=function(t){return(this.voice0.getLevelAtTime(t)+this.voice1.getLevelAtTime(t))/2},t.DuoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["voice0","voice1","frequency","vibratoAmount","vibratoRate"]),this.voice0.dispose(),this.voice0=null,this.voice1.dispose(),this.voice1=null,this.frequency.dispose(),this.frequency=null,this._vibratoGain.dispose(),this._vibratoGain=null,this._vibrato=null,this.harmonicity.dispose(),this.harmonicity=null,this.vibratoAmount.dispose(),this.vibratoAmount=null,this.vibratoRate=null,this},t.DuoSynth}),e(function(t){return t.FMSynth=function(e){e=t.defaultArg(e,t.FMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth(e.carrier),this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth(e.modulator),this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.modulationIndex=new t.Multiply(e.modulationIndex),this.modulationIndex.units=t.Type.Positive,this._modulationNode=new t.Gain(0),this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.frequency.chain(this.modulationIndex,this._modulationNode),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.connect(this._modulationNode.gain),this._modulationNode.connect(this._carrier.frequency),this._carrier.connect(this.output),this._readOnly(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.FMSynth,t.Monophonic),t.FMSynth.defaults={harmonicity:3,modulationIndex:10,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.FMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.FMSynth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.FMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.modulationIndex.dispose(),this.modulationIndex=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.FMSynth}),e(function(t){return t.MembraneSynth=function(e){e=t.defaultArg(e,t.MembraneSynth.defaults),t.Instrument.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.octaves=e.octaves,this.pitchDecay=e.pitchDecay,this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","envelope"])},t.extend(t.MembraneSynth,t.Instrument),t.MembraneSynth.defaults={pitchDecay:.05,octaves:10,oscillator:{type:"sine"},envelope:{attack:.001,decay:.4,sustain:.01,release:1.4,attackCurve:"exponential"}},t.MembraneSynth.prototype.triggerAttack=function(t,e,i){e=this.toSeconds(e);var r=(t=this.toFrequency(t))*this.octaves;return this.oscillator.frequency.setValueAtTime(r,e),this.oscillator.frequency.exponentialRampToValueAtTime(t,e+this.toSeconds(this.pitchDecay)),this.envelope.triggerAttack(e,i),this.oscillator.start(e),this},t.MembraneSynth.prototype.triggerRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MembraneSynth.prototype.dispose=function(){return t.Instrument.prototype.dispose.call(this),this._writable(["oscillator","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this},t.MembraneSynth}),e(function(t){var e=[1,1.483,1.932,2.546,2.63,3.897];return t.MetalSynth=function(i){i=t.defaultArg(i,t.MetalSynth.defaults),t.Instrument.call(this,i),this.frequency=new t.Signal(i.frequency,t.Type.Frequency),this._oscillators=[],this._freqMultipliers=[],this._amplitue=new t.Gain(0).connect(this.output),this._highpass=new t.Filter({type:"highpass",Q:-3.0102999566398125}).connect(this._amplitue),this._octaves=i.octaves,this._filterFreqScaler=new t.Scale(i.resonance,7e3),this.envelope=new t.Envelope({attack:i.envelope.attack,attackCurve:"linear",decay:i.envelope.decay,sustain:0,release:i.envelope.release}).chain(this._filterFreqScaler,this._highpass.frequency),this.envelope.connect(this._amplitue.gain);for(var r=0;re&&(o.voice.triggerRelease(e),o.release=e)}return this},t.PolySynth.prototype.sync=function(){return this._syncMethod("triggerAttack",1),this._syncMethod("triggerRelease",1),this},t.PolySynth.prototype.set=function(t,e,i){for(var r=0;rt&&(i.release=t,i.voice.triggerRelease(t))}return this},t.PolySynth.prototype.dispose=function(){t.Instrument.prototype.dispose.call(this);for(var e=0;e0)r=i[0];else if(!r&&t.isDefined(e))throw new Error("Tone.UserMedia: no matching device: "+e);this._device=r;var n={audio:{echoCancellation:!1,sampleRate:this.context.sampleRate}};return r&&(n.audio.deviceId=r.deviceId),navigator.mediaDevices.getUserMedia(n).then(function(t){return this._stream||(this._stream=t,this._mediaStream=this.context.createMediaStreamSource(t),this._mediaStream.connect(this.output)),this}.bind(this))}.bind(this))},t.UserMedia.prototype.close=function(){return this._stream&&(this._stream.getAudioTracks().forEach(function(t){t.stop()}),this._stream=null,this._mediaStream.disconnect(),this._mediaStream=null),this._device=null,this},t.UserMedia.enumerateDevices=function(){return navigator.mediaDevices.enumerateDevices().then(function(t){return t.filter(function(t){return"audioinput"===t.kind})})},Object.defineProperty(t.UserMedia.prototype,"state",{get:function(){return this._stream&&this._stream.active?t.State.Started:t.State.Stopped}}),Object.defineProperty(t.UserMedia.prototype,"deviceId",{get:function(){if(this._device)return this._device.deviceId}}),Object.defineProperty(t.UserMedia.prototype,"groupId",{get:function(){if(this._device)return this._device.groupId}}),Object.defineProperty(t.UserMedia.prototype,"label",{get:function(){if(this._device)return this._device.label}}),Object.defineProperty(t.UserMedia.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.UserMedia.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.close(),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null,this},Object.defineProperty(t.UserMedia,"supported",{get:function(){return t.isDefined(navigator.mediaDevices)&&t.isFunction(navigator.mediaDevices.getUserMedia)}}),t.UserMedia}),e(function(t){return t.Midi=function(e,i){if(!(this instanceof t.Midi))return new t.Midi(e,i);t.Frequency.call(this,e,i)},t.extend(t.Midi,t.Frequency),t.Midi.prototype._defaultUnits="midi",t.Midi.prototype._frequencyToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._frequencyToUnits.call(this,e))},t.Midi.prototype._ticksToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._ticksToUnits.call(this,e))},t.Midi.prototype._beatsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._beatsToUnits.call(this,e))},t.Midi.prototype._secondsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._secondsToUnits.call(this,e))},t.Midi.prototype.toMidi=function(){return this.valueOf()},t.Midi.prototype.toFrequency=function(){return t.Frequency.mtof(this.toMidi())},t.Midi.prototype.transpose=function(t){return new this.constructor(this.toMidi()+t)},t.Midi}),t}()}.call(e,i,e,t))||(t.exports=r)},function(t,e,i){(function(e){var i;t.exports=function t(e,r,n){function o(a,h){if(!r[a]){if(!e[a]){var l="function"==typeof i&&i;if(!h&&l)return i(a,!0);if(s)return s(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var c=r[a]={exports:{}};e[a][0].call(c.exports,function(t){var i=e[a][1][t];return o(i||t)},c,c.exports,t,e,r,n)}return r[a].exports}for(var s="function"==typeof i&&i,a=0;a0)throw new Error("Invalid string. Length must be a multiple of 4");var u=t.length;h="="===t.charAt(u-2)?2:"="===t.charAt(u-1)?1:0,l=new i(3*t.length/4-h),s=h>0?t.length-4:t.length;var c=0;for(n=0,o=0;n>16),r((65280&a)>>8),r(255&a);return 2===h?r(255&(a=e(t.charAt(n))<<2|e(t.charAt(n+1))>>4)):1===h&&(r((a=e(t.charAt(n))<<10|e(t.charAt(n+1))<<4|e(t.charAt(n+2))>>2)>>8&255),r(255&a)),l},t.fromByteArray=function(t){function e(t){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t)}function i(t){return e(t>>18&63)+e(t>>12&63)+e(t>>6&63)+e(63&t)}var r,n,o,s=t.length%3,a="";for(r=0,o=t.length-s;r>2),a+=e(n<<4&63),a+="==";break;case 2:n=(t[t.length-2]<<8)+t[t.length-1],a+=e(n>>10),a+=e(n>>4&63),a+=e(n<<2&63),a+="="}return a}}(void 0===i?this.base64js={}:i)},{}],2:[function(t,e,i){},{}],3:[function(t,i,r){(function(e){"use strict";function i(){return n.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function n(t){return this instanceof n?(n.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof t?function(t,e){if(t=s(t,e<0?0:0|a(e)),!n.TYPED_ARRAY_SUPPORT)for(var i=0;i1?arguments[1]:"utf8"):function(t,e){if(n.isBuffer(e))return function(t,e){var i=0|a(e.length);return t=s(t,i),e.copy(t,0,0,i),t}(t,e);if(F(e))return function(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r1?new n(t,arguments[1]):new n(t)}function o(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r>>1&&(t.parent=I),t}function a(t){if(t>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|t}function h(t,e){"string"!=typeof t&&(t=""+t);var i=t.length;if(0===i)return 0;for(var r=!1;;)switch(e){case"ascii":case"binary":case"raw":case"raws":return i;case"utf8":case"utf-8":return k(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return C(t).length;default:if(r)return k(t).length;e=(""+e).toLowerCase(),r=!0}}function l(t,e,i,r){i=Number(i)||0;var n=t.length-i;r?(r=Number(r))>n&&(r=n):r=n;var o=e.length;if(o%2!=0)throw new Error("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,n=i%256,o.push(n),o.push(r);return o}(e,t.length-i),t,i,r)}function m(t,e,i){return 0===e&&i===t.length?O.fromByteArray(t):O.fromByteArray(t.slice(e,i))}function y(t,e,i){i=Math.min(t.length,i);for(var r=[],n=e;n239?4:l>223?3:l>191?2:1;if(n+c<=i)switch(c){case 1:l<128&&(u=l);break;case 2:128==(192&(o=t[n+1]))&&(h=(31&l)<<6|63&o)>127&&(u=h);break;case 3:o=t[n+1],s=t[n+2],128==(192&o)&&128==(192&s)&&(h=(15&l)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(u=h);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&l)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(u=h)}null===u?(u=65533,c=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),n+=c}return function(t){var e=t.length;if(e<=D)return String.fromCharCode.apply(String,t);for(var i="",r=0;rr)&&(i=r);for(var n="",o=e;oi)throw new RangeError("Trying to access beyond buffer length")}function x(t,e,i,r,o,s){if(!n.isBuffer(t))throw new TypeError("buffer must be a Buffer instance");if(e>o||et.length)throw new RangeError("index out of range")}function w(t,e,i,r){e<0&&(e=65535+e+1);for(var n=0,o=Math.min(t.length-i,2);n>>8*(r?n:1-n)}function T(t,e,i,r){e<0&&(e=4294967295+e+1);for(var n=0,o=Math.min(t.length-i,4);n>>8*(r?n:3-n)&255}function A(t,e,i,r,n,o){if(e>n||et.length)throw new RangeError("index out of range");if(i<0)throw new RangeError("index out of range")}function M(t,e,i,r,n){return n||A(t,e,i,4,3.4028234663852886e38,-3.4028234663852886e38),L.write(t,e,i,r,23,4),i+4}function P(t,e,i,r,n){return n||A(t,e,i,8,1.7976931348623157e308,-1.7976931348623157e308),L.write(t,e,i,r,52,8),i+8}function E(t){return t<16?"0"+t.toString(16):t.toString(16)}function k(t,e){e=e||1/0;for(var i,r=t.length,n=null,o=[],s=0;s55295&&i<57344){if(!n){if(i>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}n=i;continue}if(i<56320){(e-=3)>-1&&o.push(239,191,189),n=i;continue}i=65536+(n-55296<<10|i-56320)}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,i<128){if((e-=1)<0)break;o.push(i)}else if(i<2048){if((e-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((e-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function C(t){return O.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(B,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function R(t,e,i,r){for(var n=0;n=e.length||n>=t.length);n++)e[n+i]=t[n];return n}var O=t("base64-js"),L=t("ieee754"),F=t("isarray");r.Buffer=n,r.SlowBuffer=function t(e,i){if(!(this instanceof t))return new t(e,i);var r=new n(e,i);return delete r.parent,r},r.INSPECT_MAX_BYTES=50,n.poolSize=8192;var I={};n.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){function t(){}try{var e=new Uint8Array(1);return e.foo=function(){return 42},e.constructor=t,42===e.foo()&&e.constructor===t&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}(),n.TYPED_ARRAY_SUPPORT?(n.prototype.__proto__=Uint8Array.prototype,n.__proto__=Uint8Array):(n.prototype.length=void 0,n.prototype.parent=void 0),n.isBuffer=function(t){return!(null==t||!t._isBuffer)},n.compare=function(t,e){if(!n.isBuffer(t)||!n.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var i=t.length,r=e.length,o=0,s=Math.min(i,r);othis.length&&(i=this.length),i<=e)return"";for(;;)switch(t){case"hex":return _(this,e,i);case"utf8":case"utf-8":return y(this,e,i);case"ascii":return v(this,e,i);case"binary":return g(this,e,i);case"base64":return m(this,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return b(this,e,i);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}.apply(this,arguments)},n.prototype.equals=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===n.compare(this,t)},n.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},n.prototype.compare=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?0:n.compare(this,t)},n.prototype.indexOf=function(t,e){function i(t,e,i){for(var r=-1,n=0;i+n2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e>>=0,0===this.length)return-1;if(e>=this.length)return-1;if(e<0&&(e=Math.max(this.length+e,0)),"string"==typeof t)return 0===t.length?-1:String.prototype.indexOf.call(this,t,e);if(n.isBuffer(t))return i(this,t,e);if("number"==typeof t)return n.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,t,e):i(this,[t],e);throw new TypeError("val must be string, number or Buffer")},n.prototype.get=function(t){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(t)},n.prototype.set=function(t,e){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(t,e)},n.prototype.write=function(t,e,i,r){if(void 0===e)r="utf8",i=this.length,e=0;else if(void 0===i&&"string"==typeof e)r=e,i=this.length,e=0;else if(isFinite(e))e|=0,isFinite(i)?(i|=0,void 0===r&&(r="utf8")):(r=i,i=void 0);else{var n=r;r=e,e=0|i,i=n}var o=this.length-e;if((void 0===i||i>o)&&(i=o),t.length>0&&(i<0||e<0)||e>this.length)throw new RangeError("attempt to write outside buffer bounds");r||(r="utf8");for(var s=!1;;)switch(r){case"hex":return l(this,t,e,i);case"utf8":case"utf-8":return u(this,t,e,i);case"ascii":return c(this,t,e,i);case"binary":return p(this,t,e,i);case"base64":return d(this,t,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return f(this,t,e,i);default:if(s)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),s=!0}},n.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var D=4096;n.prototype.slice=function(t,e){var i,r=this.length;if(t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(n*=256);)r+=this[t+--e]*n;return r},n.prototype.readUInt8=function(t,e){return e||S(t,1,this.length),this[t]},n.prototype.readUInt16LE=function(t,e){return e||S(t,2,this.length),this[t]|this[t+1]<<8},n.prototype.readUInt16BE=function(t,e){return e||S(t,2,this.length),this[t]<<8|this[t+1]},n.prototype.readUInt32LE=function(t,e){return e||S(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},n.prototype.readUInt32BE=function(t,e){return e||S(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},n.prototype.readIntLE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=this[t],n=1,o=0;++o=(n*=128)&&(r-=Math.pow(2,8*e)),r},n.prototype.readIntBE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=e,n=1,o=this[t+--r];r>0&&(n*=256);)o+=this[t+--r]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},n.prototype.readInt8=function(t,e){return e||S(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},n.prototype.readInt16LE=function(t,e){e||S(t,2,this.length);var i=this[t]|this[t+1]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt16BE=function(t,e){e||S(t,2,this.length);var i=this[t+1]|this[t]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt32LE=function(t,e){return e||S(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},n.prototype.readInt32BE=function(t,e){return e||S(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},n.prototype.readFloatLE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!0,23,4)},n.prototype.readFloatBE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!1,23,4)},n.prototype.readDoubleLE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!0,52,8)},n.prototype.readDoubleBE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!1,52,8)},n.prototype.writeUIntLE=function(t,e,i,r){t=+t,e|=0,i|=0,r||x(this,t,e,i,Math.pow(2,8*i),0);var n=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+n]=t/o&255;return e+i},n.prototype.writeUInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,255,0),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},n.prototype.writeUInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeUInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeUInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):T(this,t,e,!0),e+4},n.prototype.writeUInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeIntLE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=0,s=1,a=t<0?1:0;for(this[e]=255&t;++o>0)-a&255;return e+i},n.prototype.writeIntBE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=i-1,s=1,a=t<0?1:0;for(this[e+o]=255&t;--o>=0&&(s*=256);)this[e+o]=(t/s>>0)-a&255;return e+i},n.prototype.writeInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,127,-128),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},n.prototype.writeInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):T(this,t,e,!0),e+4},n.prototype.writeInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeFloatLE=function(t,e,i){return M(this,t,e,!0,i)},n.prototype.writeFloatBE=function(t,e,i){return M(this,t,e,!1,i)},n.prototype.writeDoubleLE=function(t,e,i){return P(this,t,e,!0,i)},n.prototype.writeDoubleBE=function(t,e,i){return P(this,t,e,!1,i)},n.prototype.copy=function(t,e,i,r){if(i||(i=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;o--)t[o+e]=this[o+i];else if(s<1e3||!n.TYPED_ARRAY_SUPPORT)for(o=0;o=this.length)throw new RangeError("start out of bounds");if(i<0||i>this.length)throw new RangeError("end out of bounds");var r;if("number"==typeof t)for(r=e;r>1,u=-7,c=i?n-1:0,p=i?-1:1,d=t[e+c];for(c+=p,o=d&(1<<-u)-1,d>>=-u,u+=a;u>0;o=256*o+t[e+c],c+=p,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=r;u>0;s=256*s+t[e+c],c+=p,u-=8);if(0===o)o=1-l;else{if(o===h)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,r),o-=l}return(d?-1:1)*s*Math.pow(2,o-r)},i.write=function(t,e,i,r,n,o){var s,a,h,l=8*o-n-1,u=(1<>1,p=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,f=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+c>=1?p/h:p*Math.pow(2,1-c))*h>=2&&(s++,h/=2),s+c>=u?(a=0,s=u):s+c>=1?(a=(e*h-1)*Math.pow(2,n),s+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,n),s=0));n>=8;t[i+d]=255&a,d+=f,a/=256,n-=8);for(s=s<0;t[i+d]=255&s,d+=f,s/=256,l-=8);t[i+d-f]|=128*m}},{}],8:[function(t,e,i){var r={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},{}],9:[function(t,e,i){"use strict";function r(t,e){return t.b===e.b&&t.a===e.a}function n(t,e){return t.bt?0:t)<=(i=0>i?0:i)?0===i?(e+r)/2:e+t/(t+i)*(r-e):r+i/(t+i)*(e-r)}function d(t){var e=g(t.b);return b(e,t.c),b(e.b,t.c),S(e,t.a),e}function f(t,e){var i=!1,r=!1;t!==e&&(e.a!==t.a&&(r=!0,w(e.a,t.a)),e.d!==t.d&&(i=!0,T(e.d,t.d)),_(e,t),r||(b(e,t.a),t.a.c=t),i||(S(e,t.d),t.d.a=t))}function m(t){var e=t.b,i=!1;t.d!==t.b.d&&(i=!0,T(t.d,t.b.d)),t.c===t?w(t.a,null):(t.b.d.a=J(t),t.a.c=t.c,_(t,J(t)),i||S(t,t.d)),e.c===e?(w(e.a,null),T(e.d,null)):(t.d.a=J(e),e.a.c=e.c,_(e,J(e))),x(t)}function y(t){var e=g(t),i=e.b;return _(e,t.e),e.a=t.b.a,b(i,e.a),e.d=i.d=t.d,e=e.b,_(t.b,J(t.b)),_(t.b,e),t.b.a=e.a,e.b.a.c=e.b,e.b.d=t.b.d,e.f=t.f,e.b.f=t.b.f,e}function v(t,e){var i=!1,r=g(t),n=r.b;return e.d!==t.d&&(i=!0,T(e.d,t.d)),_(r,t.e),_(n,e),r.a=t.b.a,n.a=e.a,r.d=n.d=t.d,t.d.a=n,i||S(r,t.d),r}function g(t){var e=new Z,i=new Z,r=t.b.h;return i.h=r,r.b.h=e,e.h=t,t.b.h=i,e.b=i,e.c=e,e.e=i,i.b=e,i.c=i,i.e=e}function _(t,e){var i=t.c,r=e.c;i.b.e=e,r.b.e=t,t.c=r,e.c=i}function b(t,e){var i=e.f,r=new K(e,i);i.e=r,e.f=r,i=r.c=t;do{i.a=r,i=i.c}while(i!==t)}function S(t,e){var i=e.d,r=new Q(e,i);i.b=r,e.d=r,r.a=t,r.c=e.c,i=t;do{i.d=r,i=i.e}while(i!==t)}function x(t){var e=t.h;t=t.b.h,e.b.h=t,t.b.h=e}function w(t,e){var i=t.c,r=i;do{r.a=e,r=r.c}while(r!==i);i=t.f,(r=t.e).f=i,i.e=r}function T(t,e){var i=t.a,r=i;do{r.d=e,r=r.e}while(r!==i);i=t.d,(r=t.b).d=i,i.b=r}function A(t){var e=0;return Math.abs(t[1])>Math.abs(t[0])&&(e=1),Math.abs(t[2])>Math.abs(t[e])&&(e=2),e}function M(t,e){t.f+=e.f,t.b.f+=e.b.f}function P(t,e,i){return t=t.a,e=e.a,i=i.a,e.b.a===t?i.b.a===t?n(e.a,i.a)?0>=s(i.b.a,e.a,i.a):0<=s(e.b.a,i.a,e.a):0>=s(i.b.a,t,i.a):i.b.a===t?0<=s(e.b.a,t,e.a):(e=o(e.b.a,t,e.a),t=o(i.b.a,t,i.a),e>=t)}function E(t){t.a.i=null;var e=t.e;e.a.c=e.c,e.c.a=e.a,t.e=null}function k(t,e){m(t.a),t.c=!1,t.a=e,e.i=t}function C(t){var e=t.a.a;do{t=ut(t)}while(t.a.a===e);return t.c&&(e=v(lt(t).a.b,t.a.e),k(t,e),t=ut(t)),t}function R(t,e,i){var r=new ht;return r.a=i,r.e=z(t.f,e.e,r),i.i=r}function O(t,e){switch(t.s){case 100130:return 0!=(1&e);case 100131:return 0!==e;case 100132:return 0e;case 100134:return 2<=e||-2>=e}return!1}function L(t){var e=t.a,i=e.d;i.c=t.d,i.a=e,E(t)}function F(t,e,i){for(t=e,e=e.a;t!==i;){t.c=!1;var r=lt(t),n=r.a;if(n.a!==e.a){if(!r.c){L(t);break}n=v(e.c.b,n.b),k(r,n)}e.c!==n&&(f(J(n),n),f(e,n)),L(t),e=r.a,t=r}return e}function I(t,e,i,r,n,o){var s=!0;do{R(t,e,i.b),i=i.c}while(i!==r);for(null===n&&(n=lt(e).a.b.c);r=lt(e),(i=r.a.b).a===n.a;)i.c!==n&&(f(J(i),i),f(J(n),i)),r.f=e.f-i.f,r.d=O(t,r.f),e.b=!0,!s&&N(t,e)&&(M(i,n),E(e),m(n)),s=!1,e=r,n=i;e.b=!0,o&&q(t,e)}function D(t,e,i,r,n){var o=[e.g[0],e.g[1],e.g[2]];e.d=null,e.d=t.o&&t.o(o,i,r,t.c)||null,null===e.d&&(n?t.n||(Y(t,100156),t.n=!0):e.d=i[0])}function U(t,e,i){var r=[null,null,null,null];r[0]=e.a.d,r[1]=i.a.d,D(t,e.a,r,[.5,.5,0,0],!1),f(e,i)}function B(t,e,i,r,n){var o=Math.abs(e.b-t.b)+Math.abs(e.a-t.a),s=Math.abs(i.b-t.b)+Math.abs(i.a-t.a),a=n+1;r[n]=.5*s/(o+s),r[a]=.5*o/(o+s),t.g[0]+=r[n]*e.g[0]+r[a]*i.g[0],t.g[1]+=r[n]*e.g[1]+r[a]*i.g[1],t.g[2]+=r[n]*e.g[2]+r[a]*i.g[2]}function N(t,e){var i=lt(e),o=e.a,a=i.a;if(n(o.a,a.a)){if(0=p?st(i,p):n(u[l[p>>1]],u[l[p]])?st(i,p):at(i,p)),u[h]=null,c[h]=i.b,i.b=h}else for(i.c[-(h+1)]=null;0s(o.b.a,a.a,o.a))return!1;ut(e).b=e.b=!0,y(o.b),f(J(a),o)}return!0}function G(t,e){var i=lt(e),u=e.a,c=i.a,d=u.a,m=c.a,v=u.b.a,g=c.b.a,_=new K;if(s(v,t.a,d),s(g,t.a,m),d===m||Math.min(d.a,v.a)>Math.max(m.a,g.a))return!1;if(n(d,m)){if(0s(v,m,d))return!1;var b,S,x=v,w=d,T=g,A=m;if(n(x,w)||(b=x,x=w,w=b),n(T,A)||(b=T,T=A,A=b),n(x,T)||(b=x,x=T,T=b,b=w,w=A,A=b),n(T,w)?n(w,A)?(b=o(x,T,w),S=o(T,w,A),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,w.b)):(b=s(x,T,w),S=-s(x,A,w),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,A.b)):_.b=(T.b+w.b)/2,a(x,w)||(b=x,x=w,w=b),a(T,A)||(b=T,T=A,A=b),a(x,T)||(b=x,x=T,T=b,b=w,w=A,A=b),a(T,w)?a(w,A)?(b=h(x,T,w),S=h(T,w,A),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,w.a)):(b=l(x,T,w),S=-l(x,A,w),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,A.a)):_.a=(T.a+w.a)/2,n(_,t.a)&&(_.b=t.a.b,_.a=t.a.a),n(x=n(d,m)?d:m,_)&&(_.b=x.b,_.a=x.a),r(_,d)||r(_,m))return N(t,e),!1;if(!r(v,t.a)&&0<=s(v,t.a,_)||!r(g,t.a)&&0>=s(g,t.a,_)){if(g===t.a)return y(u.b),f(c.b,u),e=C(e),u=lt(e).a,F(t,lt(e),i),I(t,e,J(u),u,u,!0),!0;if(v===t.a){y(c.b),f(u.e,J(c)),d=i=e,m=d.a.b.a;do{d=ut(d)}while(d.a.b.a===m);return d=lt(e=d).a.b.c,i.a=J(c),c=F(t,i,null),I(t,e,c.c,u.b.c,d,!0),!0}return 0<=s(v,t.a,_)&&(ut(e).b=e.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=s(g,t.a,_)&&(e.b=i.b=!0,y(c.b),c.a.b=t.a.b,c.a.a=t.a.a),!1}return y(u.b),y(c.b),f(J(c),u),u.a.b=_.b,u.a.a=_.a,u.a.h=et(t.e,u.a),u=u.a,c=[0,0,0,0],_=[d.d,v.d,m.d,g.d],u.g[0]=u.g[1]=u.g[2]=0,B(u,d,v,c,0),B(u,m,g,c,2),D(t,u,_,c,!0),ut(e).b=e.b=i.b=!0,!1}function q(t,e){for(var i=lt(e);;){for(;i.b;)e=i,i=lt(i);if(!e.b&&(i=e,null===(e=ut(e))||!e.b))break;e.b=!1;var r,o=e.a,a=i.a;if(r=o.b.a!==a.b.a)t:{var h=lt(r=e),l=r.a,u=h.a,c=void 0;if(n(l.b.a,u.b.a)){if(0>s(l.b.a,u.b.a,l.a)){r=!1;break t}ut(r).b=r.b=!0,c=y(l),f(u.b,c),c.d.c=r.d}else{if(0r.f&&(r.f*=2,r.c=rt(r.c,r.f+1)),0===r.b?i=n:(i=r.b,r.b=r.c[r.b]),r.e[i]=e,r.c[i]=n,r.d[n]=i,r.h&&at(r,n),i}return r=t.a++,t.c[r]=e,-(r+1)}function it(t){if(0===t.a)return ot(t.b);var e=t.c[t.d[t.a-1]];if(0!==t.b.a&&n(nt(t.b),e))return ot(t.b);do{--t.a}while(0t.a||n(r[a],r[l])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function at(t,e){for(var i=t.d,r=t.e,o=t.c,s=e,a=i[s];;){var h=s>>1,l=i[h];if(0===h||n(r[l],r[a])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function ht(){this.e=this.a=null,this.f=0,this.c=this.b=this.h=this.d=!1}function lt(t){return t.e.c.b}function ut(t){return t.e.a.b}var ct,pt=4e150,dt=0;(ct=H.prototype).x=function(){X(this,dt)},ct.B=function(t,e){switch(t){case 100142:return;case 100140:switch(e){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=e)}break;case 100141:return void(this.m=!!e);default:return void Y(this,100900)}Y(this,100901)},ct.y=function(t){switch(t){case 100142:return 0;case 100140:return this.s;case 100141:return this.m;default:Y(this,100900)}return!1},ct.A=function(t,e,i){this.j[0]=t,this.j[1]=e,this.j[2]=i},ct.z=function(t,e){var i=e||null;switch(t){case 100100:case 100106:this.h=i;break;case 100104:case 100110:this.l=i;break;case 100101:case 100107:this.k=i;break;case 100102:case 100108:this.i=i;break;case 100103:case 100109:this.p=i;break;case 100105:case 100111:this.o=i;break;case 100112:this.r=i;break;default:Y(this,100900)}},ct.C=function(t,e){var i=!1,r=[0,0,0];X(this,2);for(var n=0;3>n;++n){var o=t[n];-1e150>o&&(o=-1e150,i=!0),1e150p;++p){var d=t.g[p];de[p]&&(e[p]=d,i[p]=t)}if(t=0,e[1]-h[1]>e[0]-h[0]&&(t=1),e[2]-h[2]>e[t]-h[t]&&(t=2),h[t]>=e[t])a[0]=0,a[1]=0,a[2]=1;else{for(e=0,h=l[t],i=i[t],l=[0,0,0],h=[h.g[0]-i.g[0],h.g[1]-i.g[1],h.g[2]-i.g[2]],p=[0,0,0],t=o.e;t!==o;t=t.e)p[0]=t.g[0]-i.g[0],p[1]=t.g[1]-i.g[1],p[2]=t.g[2]-i.g[2],l[0]=h[1]*p[2]-h[2]*p[1],l[1]=h[2]*p[0]-h[0]*p[2],l[2]=h[0]*p[1]-h[1]*p[0],(d=l[0]*l[0]+l[1]*l[1]+l[2]*l[2])>e&&(e=d,a[0]=l[0],a[1]=l[1],a[2]=l[2]);0>=e&&(a[0]=a[1]=a[2]=0,a[A(h)]=1)}o=!0}for(l=A(a),t=this.b.c,e=(l+1)%3,i=(l+2)%3,l=0=(e=t.a).f))do{a+=(e.a.b-e.b.a.b)*(e.a.a+e.b.a.a),e=e.e}while(e!==t.a);if(0>a)for(a=this.b.c,o=a.e;o!==a;o=o.e)o.a=-o.a}for(this.n=!1,a=this.b.b,t=a.h;t!==a;t=o)o=t.h,e=t.e,r(t.a,t.b.a)&&t.e.e!==t&&(U(this,e,t),m(t),e=(t=e).e),e.e===t&&(e!==t&&(e!==o&&e!==o.b||(o=o.h),m(e)),t!==o&&t!==o.b||(o=o.h),m(t));for(this.e=a=new $,o=this.b.c,t=o.e;t!==o;t=t.e)t.h=et(a,t);for(tt(a),this.f=new function(t){this.a=new W,this.b=t,this.c=P}(this),j(this,-pt),j(this,pt);null!==(a=it(this.e));){for(;;){t:if(t=this.e,0===t.a)o=nt(t.b);else if(o=t.c[t.d[t.a-1]],0!==t.b.a&&(t=nt(t.b),n(t,o))){o=t;break t}if(null===o||!r(o,a))break;o=it(this.e),U(this,a.c,o.c)}V(this,a)}for(this.a=this.f.a.a.b.a.a,a=0;null!==(o=this.f.a.a.b);)o.h||++a,E(o);for(this.f=null,(a=this.e).b=null,a.d=null,this.e=a.c=null,a=this.b,t=a.a.b;t!==a.a;t=o)o=t.b,(t=t.a).e.e===t&&(M(t.c,t),m(t));if(!this.n){if(a=this.b,this.m)for(t=a.b.h;t!==a.b;t=o)o=t.h,t.b.d.c!==t.d.c?t.f=t.d.c?1:-1:m(t);else for(t=a.a.b;t!==a.a;t=o)if(o=t.b,t.c){for(t=t.a;n(t.b.a,t.a);t=t.c.b);for(;n(t.a,t.b.a);t=t.e);for(e=t.c.b,i=void 0;t.e!==e;)if(n(t.b.a,e.a)){for(;e.e!==t&&(u(e.e)||0>=s(e.a,e.b.a,e.e.b.a));)i=v(e.e,e),e=i.b;e=e.c.b}else{for(;e.e!==t&&(c(t.c.b)||0<=s(t.b.a,t.a,t.c.b.a));)i=v(t,t.c.b),t=i.b;t=t.e}for(;e.e.e!==t;)i=v(e.e,e),e=i.b}if(this.h||this.i||this.k||this.l)if(this.m){for(a=this.b,o=a.a.b;o!==a.a;o=o.b)if(o.c){this.h&&this.h(2,this.c),t=o.a;do{this.k&&this.k(t.a.d,this.c),t=t.e}while(t!==o.a);this.i&&this.i(this.c)}}else{for(a=this.b,o=!!this.l,t=!1,e=-1,i=a.a.d;i!==a.a;i=i.d)if(i.c){t||(this.h&&this.h(4,this.c),t=!0),l=i.a;do{o&&(h=l.b.d.c?0:1,e!==h&&(e=h,this.l&&this.l(!!e,this.c))),this.k&&this.k(l.a.d,this.c),l=l.e}while(l!==i.a)}t&&this.i&&this.i(this.c)}if(this.r){for(a=this.b,t=a.a.b;t!==a.a;t=o)if(o=t.b,!t.c){e=t.a,i=e.e,l=void 0;do{i=(l=i).e,l.d=null,null===l.b.d&&(l.c===l?w(l.a,null):(l.a.c=l.c,_(l,J(l))),(h=l.b).c===h?w(h.a,null):(h.a.c=h.c,_(h,J(h))),x(l))}while(l!==e);e=t.d,(t=t.b).d=e,e.b=t}return this.r(this.b),void(this.c=this.b=null)}}this.b=this.c=null},this.libtess={GluTesselator:H,windingRule:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},errorType:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156},gluEnum:{GLU_TESS_MESH:100112,GLU_TESS_TOLERANCE:100142,GLU_TESS_WINDING_RULE:100140,GLU_TESS_BOUNDARY_ONLY:100141,GLU_INVALID_ENUM:100900,GLU_INVALID_VALUE:100901,GLU_TESS_BEGIN:100100,GLU_TESS_VERTEX:100101,GLU_TESS_END:100102,GLU_TESS_ERROR:100103,GLU_TESS_EDGE_FLAG:100104,GLU_TESS_COMBINE:100105,GLU_TESS_BEGIN_DATA:100106,GLU_TESS_VERTEX_DATA:100107,GLU_TESS_END_DATA:100108,GLU_TESS_ERROR_DATA:100109,GLU_TESS_EDGE_FLAG_DATA:100110,GLU_TESS_COMBINE_DATA:100111}},H.prototype.gluDeleteTess=H.prototype.x,H.prototype.gluTessProperty=H.prototype.B,H.prototype.gluGetTessProperty=H.prototype.y,H.prototype.gluTessNormal=H.prototype.A,H.prototype.gluTessCallback=H.prototype.z,H.prototype.gluTessVertex=H.prototype.C,H.prototype.gluTessBeginPolygon=H.prototype.u,H.prototype.gluTessBeginContour=H.prototype.t,H.prototype.gluTessEndContour=H.prototype.v,H.prototype.gluTessEndPolygon=H.prototype.w,void 0!==e&&(e.exports=this.libtess)},{}],10:[function(t,e,i){(function(r){!function(t,r){r("object"==typeof i&&void 0!==e?i:t.opentype={})}(this,function(e){"use strict";function i(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function n(t,e){this.source=t,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=e,this.destLen=0,this.ltree=new i,this.dtree=new i}function o(t,e,i,r){var n,o;for(n=0;n>>=1,e}function h(t,e,i){if(!e)return i;for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>16-e;return t.tag>>>=e,t.bitcount-=e,r+i}function l(t,e){for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>=1,++n,i+=e.table[n],r-=e.table[n]}while(r>=0);return t.tag=o,t.bitcount-=n,e.trans[i+r]}function u(t,e,i){var r,n,o,a,u,c;for(r=h(t,5,257),n=h(t,5,1),o=h(t,4,4),a=0;a<19;++a)Le[a]=0;for(a=0;a8;)t.sourceIndex--,t.bitcount-=8;if(e=256*(e=t.source[t.sourceIndex+1])+t.source[t.sourceIndex],i=256*(i=t.source[t.sourceIndex+3])+t.source[t.sourceIndex+2],e!==(65535&~i))return Te;for(t.sourceIndex+=4,r=e;r;--r)t.dest[t.destLen++]=t.source[t.sourceIndex++];return t.bitcount=0,we}function d(t,e,i,r,n){return Math.pow(1-n,3)*t+3*Math.pow(1-n,2)*n*e+3*(1-n)*Math.pow(n,2)*i+Math.pow(n,3)*r}function f(){this.x1=Number.NaN,this.y1=Number.NaN,this.x2=Number.NaN,this.y2=Number.NaN}function m(){this.commands=[],this.fill="black",this.stroke=null,this.strokeWidth=1}function y(t){throw new Error(t)}function v(t,e){t||y(e)}function g(t){return function(){return t}}function _(t){return t>=-128&&t<=127}function b(t,e,i){for(var r=0,n=t.length;e>8&255,h+256&255)}return o}function w(t,e,i){for(var r=this,n=0;n>4,o=15&r;if(15===n)break;if(e+=i[n],15===o)break;e+=i[o]}return parseFloat(e)}(t);if(e>=32&&e<=246)return e-139;if(e>=247&&e<=250)return i=t.parseByte(),256*(e-247)+i+108;if(e>=251&&e<=254)return i=t.parseByte(),256*-(e-251)-i-108;throw new Error("Invalid b0 "+e)}function Y(t,e,i){e=void 0!==e?e:0;var r=new Ye.Parser(t,e),n=[],o=[];for(i=void 0!==i?i:t.length;r.relativeOffset>1,f.length=0,v=!0}var o,s,a,h,l,u,c,p,d=new m,f=[],y=0,v=!1,g=!1,_=0,b=0;if(t.isCIDFont){var S=t.tables.cff.topDict._fdSelect[e.index],x=t.tables.cff.topDict._fdArray[S];l=x._subrs,u=x._subrsBias,c=x._defaultWidthX,p=x._nominalWidthX}else l=t.tables.cff.topDict._subrs,u=t.tables.cff.topDict._subrsBias,c=t.tables.cff.topDict._defaultWidthX,p=t.tables.cff.topDict._nominalWidthX;var w=c;return function i(c){for(var m,S,x,T,A,M,P,E,k,C,R,O,L=0;L1&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_,b);break;case 5:for(;f.length>0;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 6:for(;f.length>0&&(_+=f.shift(),d.lineTo(_,b),0!==f.length);)b+=f.shift(),d.lineTo(_,b);break;case 7:for(;f.length>0&&(b+=f.shift(),d.lineTo(_,b),0!==f.length);)_+=f.shift(),d.lineTo(_,b);break;case 8:for(;f.length>0;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 10:A=f.pop()+u,(M=l[A])&&i(M);break;case 11:return;case 12:switch(F=c[L],L+=1,F){case 35:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h+f.shift(),k=P+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),b=O+f.shift(),f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;case 34:o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h,k=P+f.shift(),C=h,R=k+f.shift(),O=b,_=R+f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;case 36:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h,k=P+f.shift(),C=h,R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;case 37:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h+f.shift(),k=P+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),Math.abs(R-_)>Math.abs(O-b)?_=R+f.shift():b=O+f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;default:console.log("Glyph "+e.index+": unknown operator 1200"+F),f.length=0}break;case 14:f.length>0&&!v&&(w=f.shift()+p,v=!0),g&&(d.closePath(),g=!1);break;case 18:n();break;case 19:case 20:n(),L+=y+7>>3;break;case 21:f.length>2&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_+=f.pop(),b);break;case 22:f.length>1&&!v&&(w=f.shift()+p,v=!0),r(_+=f.pop(),b);break;case 23:n();break;case 24:for(;f.length>2;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 25:for(;f.length>6;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 26:for(f.length%2&&(_+=f.shift());f.length>0;)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a,b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 27:for(f.length%2&&(b+=f.shift());f.length>0;)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h,d.curveTo(o,s,a,h,_,b);break;case 28:m=c[L],S=c[L+1],f.push((m<<24|S<<16)>>16),L+=2;break;case 29:A=f.pop()+t.gsubrsBias,(M=t.gsubrs[A])&&i(M);break;case 30:for(;f.length>0&&(o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;case 31:for(;f.length>0&&(o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;default:F<32?console.log("Glyph "+e.index+": unknown operator "+F):F<247?f.push(F-139):F<251?(m=c[L],L+=1,f.push(256*(F-247)+m+108)):F<255?(m=c[L],L+=1,f.push(256*-(F-251)-m-108)):(m=c[L],S=c[L+1],x=c[L+2],T=c[L+3],L+=4,f.push((m<<24|S<<16|x<<8|T)/65536))}}}(i),e.advanceWidth=w,d}function et(t,e){var i,r=Ze.indexOf(t);return r>=0&&(i=r),(r=e.indexOf(t))>=0?i=r+Ze.length:(i=Ze.length+e.length,e.push(t)),i}function it(t,e,i){for(var r={},n=0;ne.value.tag?1:-1}),e.fields=e.fields.concat(r),e.fields=e.fields.concat(n),e}function mt(t,e,i){for(var r=0;r0)return t.glyphs.get(n).getMetrics()}return i}function yt(t,e){for(var i=0,r=t.length-1;i<=r;){var n=i+r>>>1,o=t[n].tag;if(o===e)return n;o>>1,o=t[n];if(o===e)return n;o>>1,s=(i=t[o]).start;if(s===e)return i;s0)return i=t[r-1],e>i.end?0:i}function _t(t,e){this.font=t,this.tableName=e}function bt(t){_t.call(this,t,"gpos")}function St(t){_t.call(this,t,"gsub")}function xt(t,e){var i=t.length;if(i!==e.length)return!1;for(var r=0;r0?(o=t.parseByte(),0==(e&n)&&(o=-o),o=i+o):o=(e&n)>0?i:i+t.parseShort(),o}function Et(t,e,i){var r,n,o=new Ye.Parser(e,i);if(t.numberOfContours=o.parseShort(),t._xMin=o.parseShort(),t._yMin=o.parseShort(),t._xMax=o.parseShort(),t._yMax=o.parseShort(),t.numberOfContours>0){for(var s=t.endPointIndices=[],a=0;a0)for(var c=o.parseByte(),p=0;p0){var d,f=[];if(l>0){for(var m=0;m=0,f.push(d);for(var y=0,v=0;v0?(2&r)>0?(S.dx=o.parseShort(),S.dy=o.parseShort()):S.matchedPoints=[o.parseUShort(),o.parseUShort()]:(2&r)>0?(S.dx=o.parseChar(),S.dy=o.parseChar()):S.matchedPoints=[o.parseByte(),o.parseByte()],(8&r)>0?S.xScale=S.yScale=o.parseF2Dot14():(64&r)>0?(S.xScale=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()):(128&r)>0&&(S.xScale=o.parseF2Dot14(),S.scale01=o.parseF2Dot14(),S.scale10=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()),t.components.push(S),b=!!(32&r)}if(256&r){t.instructionLength=o.parseUShort(),t.instructions=[];for(var x=0;xe.points.length-1||r.matchedPoints[1]>n.points.length-1)throw Error("Matched points out of range in "+e.name);var s=e.points[r.matchedPoints[0]],a=n.points[r.matchedPoints[1]],h={xScale:r.xScale,scale01:r.scale01,scale10:r.scale10,yScale:r.yScale,dx:0,dy:0};a=kt([a],h)[0],h.dx=s.x-a.x,h.dy=s.y-a.y,o=kt(n.points,h)}e.points=e.points.concat(o)}}return Ct(e.points)}function Ot(t){this.font=t,this.getCommands=function(t){return Ri.getPath(t).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function Lt(t){return t}function Ft(t){return Math.sign(t)*Math.round(Math.abs(t))}function It(t){return Math.sign(t)*Math.round(Math.abs(2*t))/2}function Dt(t){return Math.sign(t)*(Math.round(Math.abs(t)+.5)-.5)}function Ut(t){return Math.sign(t)*Math.ceil(Math.abs(t))}function Bt(t){return Math.sign(t)*Math.floor(Math.abs(t))}function Nt(t,e){this.x=t,this.y=e,this.axis=void 0,this.slope=e/t,this.normalSlope=-t/e,Object.freeze(this)}function Gt(t,e){var i=Math.sqrt(t*t+e*e);return e/=i,1==(t/=i)&&0===e?Li:0===t&&1===e?Fi:new Nt(t,e)}function qt(t,e,i,r){this.x=this.xo=Math.round(64*t)/64,this.y=this.yo=Math.round(64*e)/64,this.lastPointOfContour=i,this.onCurve=r,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}function Vt(t,e){switch(this.env=t,this.stack=[],this.prog=e,t){case"glyf":this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=Li,this.round=Ft}}function jt(t){for(var e=t.tZone=new Array(t.gZone.length),i=0;i=176&&i<=183)n+=i-176+1;else if(i>=184&&i<=191)n+=2*(i-184+1);else if(e&&1===o&&27===i)break}while(o>0);t.ip=n}function Wt(t,i){e.DEBUG&&console.log(i.step,"SVTCA["+t.axis+"]"),i.fv=i.pv=i.dpv=t}function Ht(t,i){e.DEBUG&&console.log(i.step,"SPVTCA["+t.axis+"]"),i.pv=i.dpv=t}function Xt(t,i){e.DEBUG&&console.log(i.step,"SFVTCA["+t.axis+"]"),i.fv=t}function Yt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.pv=i.dpv=Gt(r,n)}function Qt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SFVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.fv=Gt(r,n)}function Zt(t){e.DEBUG&&console.log(t.step,"POP[]"),t.stack.pop()}function Jt(t,i){var r=i.stack.pop(),n=i.z0[r],o=i.fv,s=i.pv;e.DEBUG&&console.log(i.step,"MDAP["+t+"]",r);var a=s.distance(n,Ii);t&&(a=i.round(a)),o.setRelative(n,Ii,a,s),o.touch(n),i.rp0=i.rp1=r}function Kt(t,i){var r,n,o,s=i.z2,a=s.length-2;e.DEBUG&&console.log(i.step,"IUP["+t.axis+"]");for(var h=0;h1?"loop "+(i.loop-h)+": ":"")+"SHP["+(t?"rp1":"rp2")+"]",u)}i.loop=1}function te(t,i){var r=i.stack,n=t?i.rp1:i.rp2,o=(t?i.z0:i.z1)[n],s=i.fv,a=i.pv,h=r.pop(),l=i.z2[i.contours[h]],u=l;e.DEBUG&&console.log(i.step,"SHC["+t+"]",h);var c=a.distance(o,o,!1,!0);do{u!==o&&s.setRelative(u,u,c,a),u=u.nextPointOnContour}while(u!==l)}function ee(t,i){var r,n=i.stack,o=t?i.rp1:i.rp2,s=(t?i.z0:i.z1)[o],a=i.fv,h=i.pv,l=n.pop();switch(e.DEBUG&&console.log(i.step,"SHZ["+t+"]",l),l){case 0:r=i.tZone;break;case 1:r=i.gZone;break;default:throw new Error("Invalid zone")}for(var u,c=h.distance(s,s,!1,!0),p=r.length-2,d=0;d",h),i.stack.push(Math.round(64*h))}function se(t,i){var r=i.stack,n=r.pop(),o=i.fv,s=i.pv,a=i.ppem,h=i.deltaBase+16*(t-1),l=i.deltaShift,u=i.z0;e.DEBUG&&console.log(i.step,"DELTAP["+t+"]",n,r);for(var c=0;c>4)===a){var f=(15&d)-8;f>=0&&f++,e.DEBUG&&console.log(i.step,"DELTAPFIX",p,"by",f*l);var m=u[p];o.setRelative(m,m,f*l,s)}}}function ae(t,i){var r=i.stack,n=r.pop();e.DEBUG&&console.log(i.step,"ROUND[]"),r.push(64*i.round(n/64))}function he(t,i){var r=i.stack,n=r.pop(),o=i.ppem,s=i.deltaBase+16*(t-1),a=i.deltaShift;e.DEBUG&&console.log(i.step,"DELTAC["+t+"]",n,r);for(var h=0;h>4)===o){var c=(15&u)-8;c>=0&&c++;var p=c*a;e.DEBUG&&console.log(i.step,"DELTACFIX",l,"by",p),i.cvt[l]+=p}}}function le(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log(i.step,"SDPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.dpv=Gt(r,n)}function ue(t,i){var r=i.stack,n=i.prog,o=i.ip;e.DEBUG&&console.log(i.step,"PUSHB["+t+"]");for(var s=0;s=0?1:-1,h=Math.abs(h),t&&(u=s.cvt[p],n&&Math.abs(h-u)":"_")+(n?"R":"_")+(0===o?"Gr":1===o?"Bl":2===o?"Wh":"")+"]",t?p+"("+s.cvt[p]+","+u+")":"",d,"(d =",a,"->",l*h,")"),s.rp1=s.rp0,s.rp2=d,i&&(s.rp0=d)}function de(t){(t=t||{}).empty||(Mt(t.familyName,"When creating a new Font object, familyName is required."),Mt(t.styleName,"When creating a new Font object, styleName is required."),Mt(t.unitsPerEm,"When creating a new Font object, unitsPerEm is required."),Mt(t.ascender,"When creating a new Font object, ascender is required."),Mt(t.descender,"When creating a new Font object, descender is required."),Mt(t.descender<0,"Descender should be negative (e.g. -512)."),this.names={fontFamily:{en:t.familyName||" "},fontSubfamily:{en:t.styleName||" "},fullName:{en:t.fullName||t.familyName+" "+t.styleName},postScriptName:{en:t.postScriptName||(t.familyName+t.styleName).replace(/\s/g,"")},designer:{en:t.designer||" "},designerURL:{en:t.designerURL||" "},manufacturer:{en:t.manufacturer||" "},manufacturerURL:{en:t.manufacturerURL||" "},license:{en:t.license||" "},licenseURL:{en:t.licenseURL||" "},version:{en:t.version||"Version 0.1"},description:{en:t.description||" "},copyright:{en:t.copyright||" "},trademark:{en:t.trademark||" "}},this.unitsPerEm=t.unitsPerEm||1e3,this.ascender=t.ascender,this.descender=t.descender,this.createdTimestamp=t.createdTimestamp,this.tables={os2:{usWeightClass:t.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:t.widthClass||this.usWidthClasses.MEDIUM,fsSelection:t.fsSelection||this.fsSelectionValues.REGULAR}}),this.supported=!0,this.glyphs=new ei.GlyphSet(this,t.glyphs||[]),this.encoding=new U(this),this.position=new bt(this),this.substitution=new St(this),this.tables=this.tables||{},Object.defineProperty(this,"hinting",{get:function(){return this._hinting?this._hinting:"truetype"===this.outlinesFormat?this._hinting=new Ot(this):void 0}})}function fe(t,e){var i=JSON.stringify(t),r=256;for(var n in e){var o=parseInt(n);if(o&&!(o<256)){if(JSON.stringify(e[n])===i)return o;r<=o&&(r=o+1)}}return e[r]=t,r}function me(t,e,i){var r=fe(e.name,i);return[{name:"tag_"+t,type:"TAG",value:e.tag},{name:"minValue_"+t,type:"FIXED",value:e.minValue<<16},{name:"defaultValue_"+t,type:"FIXED",value:e.defaultValue<<16},{name:"maxValue_"+t,type:"FIXED",value:e.maxValue<<16},{name:"flags_"+t,type:"USHORT",value:0},{name:"nameID_"+t,type:"USHORT",value:r}]}function ye(t,e,i){var r={},n=new Ye.Parser(t,e);return r.tag=n.parseTag(),r.minValue=n.parseFixed(),r.defaultValue=n.parseFixed(),r.maxValue=n.parseFixed(),n.skip("uShort",1),r.name=i[n.parseUShort()]||{},r}function ve(t,e,i,r){for(var n=fe(e.name,r),o=[{name:"nameID_"+t,type:"USHORT",value:n},{name:"flags_"+t,type:"USHORT",value:0}],s=0;s=i)){var n,o=e.charCodeAt(r);return o>=55296&&o<=56319&&i>r+1&&(n=e.charCodeAt(r+1))>=56320&&n<=57343?1024*(o-55296)+n-56320+65536:o}};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}();var we=0,Te=-3,Ae=new i,Me=new i,Pe=new Uint8Array(30),Ee=new Uint16Array(30),ke=new Uint8Array(30),Ce=new Uint16Array(30),Re=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Oe=new i,Le=new Uint8Array(320),Fe=new Uint16Array(16);(function(t,e){var i;for(i=0;i<7;++i)t.table[i]=0;for(t.table[7]=24,t.table[8]=152,t.table[9]=112,i=0;i<24;++i)t.trans[i]=256+i;for(i=0;i<144;++i)t.trans[24+i]=i;for(i=0;i<8;++i)t.trans[168+i]=280+i;for(i=0;i<112;++i)t.trans[176+i]=144+i;for(i=0;i<5;++i)e.table[i]=0;for(e.table[5]=32,i=0;i<32;++i)e.trans[i]=i})(Ae,Me),o(Pe,Ee,4,3),o(ke,Ce,2,1),Pe[28]=0,Ee[28]=258;var Ie=function(t,e){var i,r,o=new n(t,e);do{switch(i=a(o),h(o,2,0)){case 0:r=p(o);break;case 1:r=c(o,Ae,Me);break;case 2:u(o,o.ltree,o.dtree),r=c(o,o.ltree,o.dtree);break;default:r=Te}if(r!==we)throw new Error("Data error")}while(!i);return o.destLenthis.x2&&(this.x2=t)),"number"==typeof e&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),ethis.y2&&(this.y2=e))},f.prototype.addX=function(t){this.addPoint(t,null)},f.prototype.addY=function(t){this.addPoint(null,t)},f.prototype.addBezier=function(t,e,i,r,n,o,s,a){var h=this,l=[t,e],u=[i,r],c=[n,o],p=[s,a];this.addPoint(t,e),this.addPoint(s,a);for(var f=0;f<=1;f++){var m=6*l[f]-12*u[f]+6*c[f],y=-3*l[f]+9*u[f]-9*c[f]+3*p[f],v=3*u[f]-3*l[f];if(0!==y){var g=Math.pow(m,2)-4*v*y;if(!(g<0)){var _=(-m+Math.sqrt(g))/(2*y);0<_&&_<1&&(0===f&&h.addX(d(l[f],u[f],c[f],p[f],_)),1===f&&h.addY(d(l[f],u[f],c[f],p[f],_)));var b=(-m-Math.sqrt(g))/(2*y);0=0&&r>0&&(i+=" "),i+=e(n)}return i}t=void 0!==t?t:2;for(var r="",n=0;n=0&&t<=255,"Byte value should be between 0 and 255."),[t]},Ge.BYTE=g(1),Ne.CHAR=function(t){return[t.charCodeAt(0)]},Ge.CHAR=g(1),Ne.CHARARRAY=function(t){for(var e=[],i=0;i>8&255,255&t]},Ge.USHORT=g(2),Ne.SHORT=function(t){return t>=32768&&(t=-(65536-t)),[t>>8&255,255&t]},Ge.SHORT=g(2),Ne.UINT24=function(t){return[t>>16&255,t>>8&255,255&t]},Ge.UINT24=g(3),Ne.ULONG=function(t){return[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.ULONG=g(4),Ne.LONG=function(t){return t>=Ue&&(t=-(2*Ue-t)),[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONG=g(4),Ne.FIXED=Ne.ULONG,Ge.FIXED=Ge.ULONG,Ne.FWORD=Ne.SHORT,Ge.FWORD=Ge.SHORT,Ne.UFWORD=Ne.USHORT,Ge.UFWORD=Ge.USHORT,Ne.LONGDATETIME=function(t){return[0,0,0,0,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONGDATETIME=g(8),Ne.TAG=function(t){return De.argument(4===t.length,"Tag should be exactly 4 ASCII characters."),[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]},Ge.TAG=g(4),Ne.Card8=Ne.BYTE,Ge.Card8=Ge.BYTE,Ne.Card16=Ne.USHORT,Ge.Card16=Ge.USHORT,Ne.OffSize=Ne.BYTE,Ge.OffSize=Ge.BYTE,Ne.SID=Ne.USHORT,Ge.SID=Ge.USHORT,Ne.NUMBER=function(t){return t>=-107&&t<=107?[t+139]:t>=108&&t<=1131?[247+((t-=108)>>8),255&t]:t>=-1131&&t<=-108?[251+((t=-t-108)>>8),255&t]:t>=-32768&&t<=32767?Ne.NUMBER16(t):Ne.NUMBER32(t)},Ge.NUMBER=function(t){return Ne.NUMBER(t).length},Ne.NUMBER16=function(t){return[28,t>>8&255,255&t]},Ge.NUMBER16=g(3),Ne.NUMBER32=function(t){return[29,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.NUMBER32=g(5),Ne.REAL=function(t){var e=t.toString(),i=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(e);if(i){var r=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));e=(Math.round(t*r)/r).toString()}for(var n="",o=0,s=e.length;o>8&255,e[e.length]=255&r}return e},Ge.UTF16=function(t){return 2*t.length};var qe={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};Be.MACSTRING=function(t,e,i,r){var n=qe[r];if(void 0!==n){for(var o="",s=0;s=128&&void 0===(o=i[o]))return;r[n]=o}return r}},Ge.MACSTRING=function(t,e){var i=Ne.MACSTRING(t,e);return void 0!==i?i.length:0},Ne.VARDELTAS=function(t){for(var e=0,i=[];e=-128&&r<=127?S(t,e,i):x(t,e,i)}return i},Ne.INDEX=function(t){for(var e=1,i=[e],r=[],n=0;n>8,e[c+1]=255&p,e=e.concat(r[u])}return e},Ge.TABLE=function(t){for(var e=0,i=t.fields.length,r=0;r0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parsePointer32=function(t){var e=this.parseOffset32();if(e>0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parseListOfLists=function(t){for(var e=this,i=this.parseOffset16List(),r=i.length,n=this.relativeOffset,o=new Array(r),s=0;s=0;n-=1){var o=Ye.getUShort(t,e+4+8*n),s=Ye.getUShort(t,e+4+8*n+2);if(3===o&&(0===s||1===s||10===s)||0===o&&(0===s||1===s||2===s||3===s||4===s)){r=Ye.getULong(t,e+4+8*n+4);break}}if(-1===r)throw new Error("No valid cmap sub-tables found.");var a=new Ye.Parser(t,e+r);if(i.format=a.parseUShort(),12===i.format)!function(t,e){var i;e.parseUShort(),t.length=e.parseULong(),t.language=e.parseULong(),t.groupCount=i=e.parseULong(),t.glyphIndexMap={};for(var r=0;r>1,e.skip("uShort",3),t.glyphIndexMap={};for(var s=new Ye.Parser(i,r+n+14),a=new Ye.Parser(i,r+n+16+2*o),h=new Ye.Parser(i,r+n+16+4*o),l=new Ye.Parser(i,r+n+16+6*o),u=r+n+16+8*o,c=0;c0;e-=1)if(t.get(e).unicode>65535){console.log("Adding CMAP format 12 (needed!)"),i=!1;break}var r=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:i?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:i?12:20}];i||(r=r.concat([{name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}])),r=r.concat([{name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);var n=new We.Table("cmap",r);for(n.segments=[],e=0;e=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");o.push(n)}else{if(3!==a)throw new Error("CFF Table CID Font FDSelect table has unsupported format "+a);var l=s.parseCard16(),u=s.parseCard16();if(0!==u)throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+u);for(var c,p=0;p=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");if(c>i)throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+c);for(;u=1&&(i.ulCodePageRange1=r.parseULong(),i.ulCodePageRange2=r.parseULong()),i.version>=2&&(i.sxHeight=r.parseShort(),i.sCapHeight=r.parseShort(),i.usDefaultChar=r.parseUShort(),i.usBreakChar=r.parseUShort(),i.usMaxContent=r.parseUShort()),i},make:function(t){return new We.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],t)},unicodeRanges:gi,getUnicodeRange:function(t){for(var e=0;e=i.begin&&t=$e.length){var s=r.parseChar();i.names.push(r.parseString(s))}break;case 2.5:i.numberOfGlyphs=r.parseUShort(),i.offset=new Array(i.numberOfGlyphs);for(var a=0;ay||void 0===e)&&y>0&&(e=y),l 123 are reserved for internal usage");d|=1<0?hi.make(O):void 0,I=bi.make(),D=ni.make(t.glyphs,{version:t.getEnglishName("version"),fullName:E,familyName:M,weightName:P,postScriptName:k,unitsPerEm:t.unitsPerEm,fontBBox:[0,_.yMin,_.ascender,_.advanceWidthMax]}),U=t.metas&&Object.keys(t.metas).length>0?Ai.make(t.metas):void 0,B=[b,S,x,w,L,A,I,D,T];F&&B.push(F),t.tables.gsub&&B.push(Ti.make(t.tables.gsub)),U&&B.push(U);for(var N=ft(B),G=pt(N.encode()),q=N.fields,V=!1,j=0;j=0)return r[n].script;if(e){var o={tag:t,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return r.splice(-1-n,0,o),o.script}}},getLangSysTable:function(t,e,i){var r=this.getScriptTable(t,i);if(r){if(!e||"dflt"===e||"DFLT"===e)return r.defaultLangSys;var n=yt(r.langSysRecords,e);if(n>=0)return r.langSysRecords[n].langSys;if(i){var o={tag:e,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return r.langSysRecords.splice(-1-n,0,o),o.langSys}}},getFeatureTable:function(t,e,i,r){var n=this.getLangSysTable(t,e,r);if(n){for(var o,s=n.featureIndexes,a=this.font.tables[this.tableName].features,h=0;h=a[l-1].tag,"Features must be added in alphabetical order."),o={tag:i,feature:{params:0,lookupListIndexes:[]}},a.push(o),s.push(l),o.feature}}},getLookupTables:function(t,e,i,r,n){var o=this.getFeatureTable(t,e,i,n),s=[];if(o){for(var a,h=o.lookupListIndexes,l=this.font.tables[this.tableName].lookups,u=0;u=0?i:-1;case 2:var r=gt(t.ranges,e);return r?r.index+e-r.start:-1}},expandCoverage:function(t){if(1===t.format)return t.glyphs;for(var e=[],i=t.ranges,r=0;r=0){for(var u=o.ligatureSets[l],c=0;c2)){var r=this.font,n=this._prepState;if(!n||n.ppem!==i){var o=this._fpgmState;if(!o){Vt.prototype=Di,(o=this._fpgmState=new Vt("fpgm",r.tables.fpgm)).funcs=[],o.font=r,e.DEBUG&&(console.log("---EXEC FPGM---"),o.step=-1);try{Ei(o)}catch(t){return console.log("Hinting error in FPGM:"+t),void(this._errorState=3)}}Vt.prototype=o,(n=this._prepState=new Vt("prep",r.tables.prep)).ppem=i;var s=r.tables.cvt;if(s)for(var a=n.cvt=new Array(s.length),h=i/r.unitsPerEm,l=0;l1))try{return ki(t,n)}catch(t){return this._errorState<1&&(console.log("Hinting error:"+t),console.log("Note: further hinting errors are silenced")),void(this._errorState=1)}}},ki=function(t,i){var r,n,o,s=i.ppem/i.font.unitsPerEm,a=s,h=t.components;if(Vt.prototype=i,h){var l=i.font;n=[],r=[];for(var u=0;u1?"loop "+(t.loop-r)+": ":"")+"SHPIX[]",a,o),n.setRelative(h,h,o),n.touch(h)}t.loop=1},function(t){for(var i=t.stack,r=t.rp1,n=t.rp2,o=t.loop,s=t.z0[r],a=t.z1[n],h=t.fv,l=t.dpv,u=t.z2;o--;){var c=i.pop(),p=u[c];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"IP[]",c,r,"<->",n),h.interpolate(p,s,a,l),h.touch(p)}t.loop=1},ie.bind(void 0,0),ie.bind(void 0,1),function(t){for(var i=t.stack,r=t.rp0,n=t.z0[r],o=t.loop,s=t.fv,a=t.pv,h=t.z1;o--;){var l=i.pop(),u=h[l];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"ALIGNRP[]",l),s.setRelative(u,n,0,a),s.touch(u)}t.loop=1},function(t){e.DEBUG&&console.log(t.step,"RTDG[]"),t.round=It},re.bind(void 0,0),re.bind(void 0,1),function(t){var i=t.prog,r=t.ip,n=t.stack,o=i[++r];e.DEBUG&&console.log(t.step,"NPUSHB[]",o);for(var s=0;sr?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"GTEQ[]",r,n),i.push(n>=r?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"EQ[]",r,n),i.push(r===n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"NEQ[]",r,n),i.push(r!==n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ODD[]",r),i.push(Math.trunc(r)%2?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"EVEN[]",r),i.push(Math.trunc(r)%2?0:1)},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"IF[]",i),i||(zt(t,!0),e.DEBUG&&console.log(t.step,"EIF[]"))},function(t){e.DEBUG&&console.log(t.step,"EIF[]")},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"AND[]",r,n),i.push(r&&n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"OR[]",r,n),i.push(r||n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NOT[]",r),i.push(r?0:1)},se.bind(void 0,1),function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDB[]",i),t.deltaBase=i},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDS[]",i),t.deltaShift=Math.pow(.5,i)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"ADD[]",r,n),i.push(n+r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"SUB[]",r,n),i.push(n-r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"DIV[]",r,n),i.push(64*n/r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MUL[]",r,n),i.push(n*r/64)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ABS[]",r),i.push(Math.abs(r))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NEG[]",r),i.push(-r)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"FLOOR[]",r),i.push(64*Math.floor(r/64))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"CEILING[]",r),i.push(64*Math.ceil(r/64))},ae.bind(void 0,0),ae.bind(void 0,1),ae.bind(void 0,2),ae.bind(void 0,3),void 0,void 0,void 0,void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"WCVTF[]",r,n),t.cvt[n]=r*t.ppem/t.font.unitsPerEm},se.bind(void 0,2),se.bind(void 0,3),he.bind(void 0,1),he.bind(void 0,2),he.bind(void 0,3),function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"SROUND[]",r),t.round=Oi,192&r){case 0:i=.5;break;case 64:i=1;break;case 128:i=2;break;default:throw new Error("invalid SROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid SROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"S45ROUND[]",r),t.round=Oi,192&r){case 0:i=Math.sqrt(2)/2;break;case 64:i=Math.sqrt(2);break;case 128:i=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid S45ROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},void 0,void 0,function(t){e.DEBUG&&console.log(t.step,"ROFF[]"),t.round=Lt},void 0,function(t){e.DEBUG&&console.log(t.step,"RUTG[]"),t.round=Ut},function(t){e.DEBUG&&console.log(t.step,"RDTG[]"),t.round=Bt},Zt,Zt,void 0,void 0,void 0,void 0,void 0,function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANCTRL[]",i)},le.bind(void 0,0),le.bind(void 0,1),function(t){var i=t.stack,r=i.pop(),n=0;e.DEBUG&&console.log(t.step,"GETINFO[]",r),1&r&&(n=35),32&r&&(n|=4096),i.push(n)},void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop(),o=i.pop();e.DEBUG&&console.log(t.step,"ROLL[]"),i.push(n),i.push(r),i.push(o)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MAX[]",r,n),i.push(Math.max(n,r))},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MIN[]",r,n),i.push(Math.min(n,r))},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANTYPE[]",i)},function(t){var i=t.stack.pop(),r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"INSTCTRL[]",i,r),i){case 1:return void(t.inhibitGridFit=!!r);case 2:return void(t.ignoreCvt=!!r);default:throw new Error("invalid INSTCTRL[] selector")}},void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,ue.bind(void 0,1),ue.bind(void 0,2),ue.bind(void 0,3),ue.bind(void 0,4),ue.bind(void 0,5),ue.bind(void 0,6),ue.bind(void 0,7),ue.bind(void 0,8),ce.bind(void 0,1),ce.bind(void 0,2),ce.bind(void 0,3),ce.bind(void 0,4),ce.bind(void 0,5),ce.bind(void 0,6),ce.bind(void 0,7),ce.bind(void 0,8),pe.bind(void 0,0,0,0,0,0),pe.bind(void 0,0,0,0,0,1),pe.bind(void 0,0,0,0,0,2),pe.bind(void 0,0,0,0,0,3),pe.bind(void 0,0,0,0,1,0),pe.bind(void 0,0,0,0,1,1),pe.bind(void 0,0,0,0,1,2),pe.bind(void 0,0,0,0,1,3),pe.bind(void 0,0,0,1,0,0),pe.bind(void 0,0,0,1,0,1),pe.bind(void 0,0,0,1,0,2),pe.bind(void 0,0,0,1,0,3),pe.bind(void 0,0,0,1,1,0),pe.bind(void 0,0,0,1,1,1),pe.bind(void 0,0,0,1,1,2),pe.bind(void 0,0,0,1,1,3),pe.bind(void 0,0,1,0,0,0),pe.bind(void 0,0,1,0,0,1),pe.bind(void 0,0,1,0,0,2),pe.bind(void 0,0,1,0,0,3),pe.bind(void 0,0,1,0,1,0),pe.bind(void 0,0,1,0,1,1),pe.bind(void 0,0,1,0,1,2),pe.bind(void 0,0,1,0,1,3),pe.bind(void 0,0,1,1,0,0),pe.bind(void 0,0,1,1,0,1),pe.bind(void 0,0,1,1,0,2),pe.bind(void 0,0,1,1,0,3),pe.bind(void 0,0,1,1,1,0),pe.bind(void 0,0,1,1,1,1),pe.bind(void 0,0,1,1,1,2),pe.bind(void 0,0,1,1,1,3),pe.bind(void 0,1,0,0,0,0),pe.bind(void 0,1,0,0,0,1),pe.bind(void 0,1,0,0,0,2),pe.bind(void 0,1,0,0,0,3),pe.bind(void 0,1,0,0,1,0),pe.bind(void 0,1,0,0,1,1),pe.bind(void 0,1,0,0,1,2),pe.bind(void 0,1,0,0,1,3),pe.bind(void 0,1,0,1,0,0),pe.bind(void 0,1,0,1,0,1),pe.bind(void 0,1,0,1,0,2),pe.bind(void 0,1,0,1,0,3),pe.bind(void 0,1,0,1,1,0),pe.bind(void 0,1,0,1,1,1),pe.bind(void 0,1,0,1,1,2),pe.bind(void 0,1,0,1,1,3),pe.bind(void 0,1,1,0,0,0),pe.bind(void 0,1,1,0,0,1),pe.bind(void 0,1,1,0,0,2),pe.bind(void 0,1,1,0,0,3),pe.bind(void 0,1,1,0,1,0),pe.bind(void 0,1,1,0,1,1),pe.bind(void 0,1,1,0,1,2),pe.bind(void 0,1,1,0,1,3),pe.bind(void 0,1,1,1,0,0),pe.bind(void 0,1,1,1,0,1),pe.bind(void 0,1,1,1,0,2),pe.bind(void 0,1,1,1,0,3),pe.bind(void 0,1,1,1,1,0),pe.bind(void 0,1,1,1,1,1),pe.bind(void 0,1,1,1,1,2),pe.bind(void 0,1,1,1,1,3)];var Ui=Array.from||function(t){return t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]?|[^\uD800-\uDFFF]|./g)||[]};de.prototype.hasChar=function(t){return null!==this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyphIndex=function(t){return this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyph=function(t){var e=this.charToGlyphIndex(t),i=this.glyphs.get(e);return i||(i=this.glyphs.get(0)),i},de.prototype.stringToGlyphs=function(t,e){e=e||this.defaultRenderOptions;for(var i=Ui(t),r=[],n=0;n1&&console.warn("Only the first kern subtable is supported."),t.skip("uLong");var i=255&t.parseUShort();if(t.skip("uShort"),0===i){var r=t.parseUShort();t.skip("uShort",3);for(var n=0;n1)for(var i=1;i-1?e:t}(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(i)}function c(t){var e=new FormData;return t.trim().split("&").forEach(function(t){if(t){var i=t.split("="),r=i.shift().replace(/\+/g," "),n=i.join("=").replace(/\+/g," ");e.append(decodeURIComponent(r),decodeURIComponent(n))}}),e}function p(t){var e=new n;return t.split(/\r?\n/).forEach(function(t){var i=t.split(":"),r=i.shift().trim();if(r){var n=i.join(":").trim();e.append(r,n)}}),e}function d(t,e){e||(e={}),this.type="default",this.status="status"in e?e.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new n(e.headers),this.url=e.url||"",this._initBody(t)}if(!t.fetch){var f={searchParams:"URLSearchParams"in t,iterable:"Symbol"in t&&"iterator"in Symbol,blob:"FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in t,arrayBuffer:"ArrayBuffer"in t};if(f.arrayBuffer)var m=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],y=function(t){return t&&DataView.prototype.isPrototypeOf(t)},v=ArrayBuffer.isView||function(t){return t&&m.indexOf(Object.prototype.toString.call(t))>-1};n.prototype.append=function(t,r){t=e(t),r=i(r);var n=this.map[t];this.map[t]=n?n+","+r:r},n.prototype.delete=function(t){delete this.map[e(t)]},n.prototype.get=function(t){return t=e(t),this.has(t)?this.map[t]:null},n.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},n.prototype.set=function(t,r){this.map[e(t)]=i(r)},n.prototype.forEach=function(t,e){for(var i in this.map)this.map.hasOwnProperty(i)&&t.call(e,this.map[i],i,this)},n.prototype.keys=function(){var t=[];return this.forEach(function(e,i){t.push(i)}),r(t)},n.prototype.values=function(){var t=[];return this.forEach(function(e){t.push(e)}),r(t)},n.prototype.entries=function(){var t=[];return this.forEach(function(e,i){t.push([i,e])}),r(t)},f.iterable&&(n.prototype[Symbol.iterator]=n.prototype.entries);var g=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];u.prototype.clone=function(){return new u(this,{body:this._bodyInit})},l.call(u.prototype),l.call(d.prototype),d.prototype.clone=function(){return new d(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new n(this.headers),url:this.url})},d.error=function(){var t=new d(null,{status:0,statusText:""});return t.type="error",t};var _=[301,302,303,307,308];d.redirect=function(t,e){if(-1===_.indexOf(e))throw new RangeError("Invalid status code");return new d(null,{status:e,headers:{location:t}})},t.Headers=n,t.Request=u,t.Response=d,t.fetch=function(t,e){return new Promise(function(i,r){var n=new u(t,e),o=new XMLHttpRequest;o.onload=function(){var t={status:o.status,statusText:o.statusText,headers:p(o.getAllResponseHeaders()||"")};t.url="responseURL"in o?o.responseURL:t.headers.get("X-Request-URL");var e="response"in o?o.response:o.responseText;i(new d(e,t))},o.onerror=function(){r(new TypeError("Network request failed"))},o.ontimeout=function(){r(new TypeError("Network request failed"))},o.open(n.method,n.url,!0),"include"===n.credentials&&(o.withCredentials=!0),"responseType"in o&&f.blob&&(o.responseType="blob"),n.headers.forEach(function(t,e){o.setRequestHeader(e,t)}),o.send(void 0===n._bodyInit?null:n._bodyInit)})},t.fetch.polyfill=!0}}("undefined"!=typeof self?self:this)},{}],13:[function(t,e,i){"use strict";var r=t("./core/main");t("./core/constants"),t("./core/environment"),t("./core/error_helpers"),t("./core/helpers"),t("./core/legacy"),t("./core/p5.Element"),t("./core/p5.Graphics"),t("./core/p5.Renderer"),t("./core/p5.Renderer2D"),t("./core/rendering"),t("./core/shim"),t("./core/structure"),t("./core/transform"),t("./core/shape/2d_primitives"),t("./core/shape/attributes"),t("./core/shape/curves"),t("./core/shape/vertex"),t("./color/color_conversion"),t("./color/creating_reading"),t("./color/p5.Color"),t("./color/setting"),t("./data/p5.TypedDict"),t("./events/acceleration"),t("./events/keyboard"),t("./events/mouse"),t("./events/touch"),t("./image/filters"),t("./image/image"),t("./image/loading_displaying"),t("./image/p5.Image"),t("./image/pixels"),t("./io/files"),t("./io/p5.Table"),t("./io/p5.TableRow"),t("./io/p5.XML"),t("./math/calculation"),t("./math/math"),t("./math/noise"),t("./math/p5.Vector"),t("./math/random"),t("./math/trigonometry"),t("./typography/attributes"),t("./typography/loading_displaying"),t("./typography/p5.Font"),t("./utilities/array_functions"),t("./utilities/conversion"),t("./utilities/string_functions"),t("./utilities/time_date"),t("./webgl/3d_primitives"),t("./webgl/interaction"),t("./webgl/light"),t("./webgl/loading"),t("./webgl/material"),t("./webgl/p5.Camera"),t("./webgl/p5.Geometry"),t("./webgl/p5.Matrix"),t("./webgl/p5.RendererGL.Immediate"),t("./webgl/p5.RendererGL"),t("./webgl/p5.RendererGL.Retained"),t("./webgl/p5.Shader"),t("./webgl/p5.Texture"),t("./webgl/text"),t("./core/init"),e.exports=r},{"./color/color_conversion":14,"./color/creating_reading":15,"./color/p5.Color":16,"./color/setting":17,"./core/constants":18,"./core/environment":19,"./core/error_helpers":20,"./core/helpers":21,"./core/init":22,"./core/legacy":23,"./core/main":24,"./core/p5.Element":25,"./core/p5.Graphics":26,"./core/p5.Renderer":27,"./core/p5.Renderer2D":28,"./core/rendering":29,"./core/shape/2d_primitives":30,"./core/shape/attributes":31,"./core/shape/curves":32,"./core/shape/vertex":33,"./core/shim":34,"./core/structure":35,"./core/transform":36,"./data/p5.TypedDict":37,"./events/acceleration":38,"./events/keyboard":39,"./events/mouse":40,"./events/touch":41,"./image/filters":42,"./image/image":43,"./image/loading_displaying":44,"./image/p5.Image":45,"./image/pixels":46,"./io/files":47,"./io/p5.Table":48,"./io/p5.TableRow":49,"./io/p5.XML":50,"./math/calculation":51,"./math/math":52,"./math/noise":53,"./math/p5.Vector":54,"./math/random":55,"./math/trigonometry":56,"./typography/attributes":57,"./typography/loading_displaying":58,"./typography/p5.Font":59,"./utilities/array_functions":60,"./utilities/conversion":61,"./utilities/string_functions":62,"./utilities/time_date":63,"./webgl/3d_primitives":64,"./webgl/interaction":65,"./webgl/light":66,"./webgl/loading":67,"./webgl/material":68,"./webgl/p5.Camera":69,"./webgl/p5.Geometry":70,"./webgl/p5.Matrix":71,"./webgl/p5.RendererGL":74,"./webgl/p5.RendererGL.Immediate":72,"./webgl/p5.RendererGL.Retained":73,"./webgl/p5.Shader":75,"./webgl/p5.Texture":76,"./webgl/text":77}],14:[function(t,e,i){"use strict";var r=t("../core/main");r.ColorConversion={},r.ColorConversion._hsbaToHSLA=function(t){var e=t[0],i=t[1],r=t[2],n=(2-i)*r/2;return 0!==n&&(1===n?i=0:n<.5?i/=2-i:i=i*r/(2-2*n)),[e,i,n,t[3]]},r.ColorConversion._hsbaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s,a,h=Math.floor(e),l=r*(1-i),u=r*(1-i*(e-h)),c=r*(1-i*(1+h-e));1===h?(o=u,s=r,a=l):2===h?(o=l,s=r,a=c):3===h?(o=l,s=u,a=r):4===h?(o=c,s=l,a=r):5===h?(o=r,s=l,a=u):(o=r,s=c,a=l),n=[o,s,a,t[3]]}return n},r.ColorConversion._hslaToHSBA=function(t){var e,i=t[0],r=t[1],n=t[2];return[i,r=2*((e=n<.5?(1+r)*n:n+r-n*r)-n)/e,e,t[3]]},r.ColorConversion._hslaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s=2*r-(o=r<.5?(1+i)*r:r+i-r*i),a=function(t,e,i){return t<0?t+=6:t>=6&&(t-=6),t<1?e+(i-e)*t:t<3?i:t<4?e+(i-e)*(4-t):e};n=[a(e+2,s,o),a(e,s,o),a(e-2,s,o),t[3]]}return n},r.ColorConversion._rgbaToHSBA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=s-Math.min(r,n,o);return 0===a?(e=0,i=0):(i=a/s,r===s?e=(n-o)/a:n===s?e=2+(o-r)/a:o===s&&(e=4+(r-n)/a),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,s,t[3]]},r.ColorConversion._rgbaToHSLA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=Math.min(r,n,o),h=s+a,l=s-a;return 0===l?(e=0,i=0):(i=h<1?l/h:l/(2-h),r===s?e=(n-o)/l:n===s?e=2+(o-r)/l:o===s&&(e=4+(r-n)/l),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,h/2,t[3]]},e.exports=r.ColorConversion},{"../core/main":24}],15:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),t("../core/error_helpers"),r.prototype.alpha=function(t){return r._validateParameters("alpha",arguments),this.color(t)._getAlpha()},r.prototype.blue=function(t){return r._validateParameters("blue",arguments),this.color(t)._getBlue()},r.prototype.brightness=function(t){return r._validateParameters("brightness",arguments),this.color(t)._getBrightness()},r.prototype.color=function(){if(r._validateParameters("color",arguments),arguments[0]instanceof r.Color)return arguments[0];var t=arguments[0]instanceof Array?arguments[0]:arguments;return new r.Color(this,t)},r.prototype.green=function(t){return r._validateParameters("green",arguments),this.color(t)._getGreen()},r.prototype.hue=function(t){return r._validateParameters("hue",arguments),this.color(t)._getHue()},r.prototype.lerpColor=function(t,e,i){r._validateParameters("lerpColor",arguments);var o,s,a,h,l,u,c=this._colorMode,p=this._colorMaxes;if(c===n.RGB)l=t.levels.map(function(t){return t/255}),u=e.levels.map(function(t){return t/255});else if(c===n.HSB)t._getBrightness(),e._getBrightness(),l=t.hsba,u=e.hsba;else{if(c!==n.HSL)throw new Error(c+"cannot be used for interpolation.");t._getLightness(),e._getLightness(),l=t.hsla,u=e.hsla}return i=Math.max(Math.min(i,1),0),void 0===this.lerp&&(this.lerp=function(t,e,i){return i*(e-t)+t}),o=this.lerp(l[0],u[0],i),s=this.lerp(l[1],u[1],i),a=this.lerp(l[2],u[2],i),h=this.lerp(l[3],u[3],i),o*=p[c][0],s*=p[c][1],a*=p[c][2],h*=p[c][3],this.color(o,s,a,h)},r.prototype.lightness=function(t){return r._validateParameters("lightness",arguments),this.color(t)._getLightness()},r.prototype.red=function(t){return r._validateParameters("red",arguments),this.color(t)._getRed()},r.prototype.saturation=function(t){return r._validateParameters("saturation",arguments),this.color(t)._getSaturation()},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"./p5.Color":16}],16:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("./color_conversion");r.Color=function(t,e){if(this._storeModeAndMaxes(t._colorMode,t._colorMaxes),this.mode!==n.RGB&&this.mode!==n.HSL&&this.mode!==n.HSB)throw new Error(this.mode+" is an invalid colorMode.");return this._array=r.Color._parseInputs.apply(this,e),this._calculateLevels(),this},r.Color.prototype.toString=function(t){this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsla||(this.hsla=o._rgbaToHSLA(this._array));var e=this.levels,i=this._array,r=i[3];switch(t){case"#rrggbb":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16));case"#rrggbbaa":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16),e[3]<16?"0".concat(e[2].toString(16)):e[3].toString(16));case"#rgb":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16));case"#rgba":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16),Math.round(15*i[3]).toString(16));case"rgb":return"rgb(".concat(e[0],", ",e[1],", ",e[2],")");case"rgb%":return"rgb(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%)");case"rgba%":return"rgba(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%, ",(100*i[3]).toPrecision(3),"%)");case"hsb":case"hsv":return"hsb(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],")");case"hsb%":case"hsv%":return"hsb(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%)");case"hsba":case"hsva":return"hsba(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],", ",r,")");case"hsba%":case"hsva%":return"hsba(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"hsl":return"hsl(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],")");case"hsl%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%)");case"hsla":return"hsla(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],", ",r,")");case"hsla%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"rgba":default:return"rgba("+e[0]+","+e[1]+","+e[2]+","+r+")"}},r.Color.prototype.setRed=function(t){this._array[0]=t/this.maxes[n.RGB][0],this._calculateLevels()},r.Color.prototype.setGreen=function(t){this._array[1]=t/this.maxes[n.RGB][1],this._calculateLevels()},r.Color.prototype.setBlue=function(t){this._array[2]=t/this.maxes[n.RGB][2],this._calculateLevels()},r.Color.prototype.setAlpha=function(t){this._array[3]=t/this.maxes[this.mode][3],this._calculateLevels()},r.Color.prototype._calculateLevels=function(){for(var t=this._array,e=this.levels=new Array(t.length),i=t.length-1;i>=0;--i)e[i]=Math.round(255*t[i])},r.Color.prototype._getAlpha=function(){return this._array[3]*this.maxes[this.mode][3]},r.Color.prototype._storeModeAndMaxes=function(t,e){this.mode=t,this.maxes=e},r.Color.prototype._getMode=function(){return this.mode},r.Color.prototype._getMaxes=function(){return this.maxes},r.Color.prototype._getBlue=function(){return this._array[2]*this.maxes[n.RGB][2]},r.Color.prototype._getBrightness=function(){return this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[2]*this.maxes[n.HSB][2]},r.Color.prototype._getGreen=function(){return this._array[1]*this.maxes[n.RGB][1]},r.Color.prototype._getHue=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[0]*this.maxes[n.HSB][0]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[0]*this.maxes[n.HSL][0])},r.Color.prototype._getLightness=function(){return this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[2]*this.maxes[n.HSL][2]},r.Color.prototype._getRed=function(){return this._array[0]*this.maxes[n.RGB][0]},r.Color.prototype._getSaturation=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[1]*this.maxes[n.HSB][1]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[1]*this.maxes[n.HSL][1])};var s={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},a=/\s*/,h=/(\d{1,3})/,l=/((?:\d+(?:\.\d+)?)|(?:\.\d+))/,u=new RegExp(l.source+"%"),c={HEX3:/^#([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX4:/^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX6:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,HEX8:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,RGB:new RegExp(["^rgb\\(",h.source,",",h.source,",",h.source,"\\)$"].join(a.source),"i"),RGB_PERCENT:new RegExp(["^rgb\\(",u.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),RGBA:new RegExp(["^rgba\\(",h.source,",",h.source,",",h.source,",",l.source,"\\)$"].join(a.source),"i"),RGBA_PERCENT:new RegExp(["^rgba\\(",u.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSL:new RegExp(["^hsl\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSLA:new RegExp(["^hsla\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSB:new RegExp(["^hsb\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSBA:new RegExp(["^hsba\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i")};r.Color._parseInputs=function(t,e,i,a){var h,l=arguments.length,u=this.mode,p=this.maxes[u],d=[];if(l>=3){for(d[0]=t/p[0],d[1]=e/p[1],d[2]=i/p[2],d[3]="number"==typeof a?a/p[3]:1,h=d.length-1;h>=0;--h){var f=d[h];f<0?d[h]=0:f>1&&(d[h]=1)}return u===n.HSL?o._hslaToRGBA(d):u===n.HSB?o._hsbaToRGBA(d):d}if(1===l&&"string"==typeof t){var m=t.trim().toLowerCase();if(s[m])return r.Color._parseInputs.call(this,s[m]);if(c.HEX3.test(m))return(d=c.HEX3.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255}))[3]=1,d;if(c.HEX6.test(m))return(d=c.HEX6.exec(m).slice(1).map(function(t){return parseInt(t,16)/255}))[3]=1,d;if(c.HEX4.test(m))return d=c.HEX4.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255});if(c.HEX8.test(m))return d=c.HEX8.exec(m).slice(1).map(function(t){return parseInt(t,16)/255});if(c.RGB.test(m))return(d=c.RGB.exec(m).slice(1).map(function(t){return t/255}))[3]=1,d;if(c.RGB_PERCENT.test(m))return(d=c.RGB_PERCENT.exec(m).slice(1).map(function(t){return parseFloat(t)/100}))[3]=1,d;if(c.RGBA.test(m))return d=c.RGBA.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):t/255});if(c.RGBA_PERCENT.test(m))return d=c.RGBA_PERCENT.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):parseFloat(t)/100});if(c.HSL.test(m)?(d=c.HSL.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSLA.test(m)&&(d=c.HSLA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),(d=d.map(function(t){return Math.max(Math.min(t,1),0)})).length)return o._hslaToRGBA(d);if(c.HSB.test(m)?(d=c.HSB.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSBA.test(m)&&(d=c.HSBA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),d.length){for(h=d.length-1;h>=0;--h)d[h]=Math.max(Math.min(d[h],1),0);return o._hsbaToRGBA(d)}d=[1,1,1,1]}else{if(1!==l&&2!==l||"number"!=typeof t)throw new Error(arguments+"is not a valid color representation.");d[0]=t/p[2],d[1]=t/p[2],d[2]=t/p[2],d[3]="number"==typeof e?e/p[3]:1,d=d.map(function(t){return Math.max(Math.min(t,1),0)})}return d},e.exports=r.Color},{"../core/constants":18,"../core/main":24,"./color_conversion":14}],17:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),r.prototype.background=function(){return arguments[0]instanceof r.Image?this.image(arguments[0],0,0,this.width,this.height):this._renderer.background.apply(this._renderer,arguments),this},r.prototype.clear=function(){return this._renderer.clear(),this},r.prototype.colorMode=function(t,e,i,o,s){if(r._validateParameters("colorMode",arguments),t===n.RGB||t===n.HSB||t===n.HSL){this._colorMode=t;var a=this._colorMaxes[t];2===arguments.length?(a[0]=e,a[1]=e,a[2]=e,a[3]=e):4===arguments.length?(a[0]=e,a[1]=i,a[2]=o):5===arguments.length&&(a[0]=e,a[1]=i,a[2]=o,a[3]=s)}return this},r.prototype.fill=function(){return this._renderer._setProperty("_fillSet",!0),this._renderer._setProperty("_doFill",!0),this._renderer.fill.apply(this._renderer,arguments),this},r.prototype.noFill=function(){return this._renderer._setProperty("_doFill",!1),this},r.prototype.noStroke=function(){return this._renderer._setProperty("_doStroke",!1),this},r.prototype.stroke=function(){return this._renderer._setProperty("_strokeSet",!0),this._renderer._setProperty("_doStroke",!0),this._renderer.stroke.apply(this._renderer,arguments),this},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Color":16}],18:[function(t,e,i){"use strict";var r=Math.PI;e.exports={P2D:"p2d",WEBGL:"webgl",ARROW:"default",CROSS:"crosshair",HAND:"pointer",MOVE:"move",TEXT:"text",WAIT:"wait",HALF_PI:r/2,PI:r,QUARTER_PI:r/4,TAU:2*r,TWO_PI:2*r,DEGREES:"degrees",RADIANS:"radians",DEG_TO_RAD:r/180,RAD_TO_DEG:180/r,CORNER:"corner",CORNERS:"corners",RADIUS:"radius",RIGHT:"right",LEFT:"left",CENTER:"center",TOP:"top",BOTTOM:"bottom",BASELINE:"alphabetic",POINTS:0,LINES:1,LINE_STRIP:3,LINE_LOOP:2,TRIANGLES:4,TRIANGLE_FAN:6,TRIANGLE_STRIP:5,QUADS:"quads",QUAD_STRIP:"quad_strip",CLOSE:"close",OPEN:"open",CHORD:"chord",PIE:"pie",PROJECT:"square",SQUARE:"butt",ROUND:"round",BEVEL:"bevel",MITER:"miter",RGB:"rgb",HSB:"hsb",HSL:"hsl",AUTO:"auto",ALT:18,BACKSPACE:8,CONTROL:17,DELETE:46,DOWN_ARROW:40,ENTER:13,ESCAPE:27,LEFT_ARROW:37,OPTION:18,RETURN:13,RIGHT_ARROW:39,SHIFT:16,TAB:9,UP_ARROW:38,BLEND:"source-over",ADD:"lighter",DARKEST:"darken",LIGHTEST:"lighten",DIFFERENCE:"difference",EXCLUSION:"exclusion",MULTIPLY:"multiply",SCREEN:"screen",REPLACE:"copy",OVERLAY:"overlay",HARD_LIGHT:"hard-light",SOFT_LIGHT:"soft-light",DODGE:"color-dodge",BURN:"color-burn",THRESHOLD:"threshold",GRAY:"gray",OPAQUE:"opaque",INVERT:"invert",POSTERIZE:"posterize",DILATE:"dilate",ERODE:"erode",BLUR:"blur",NORMAL:"normal",ITALIC:"italic",BOLD:"bold",_DEFAULT_TEXT_FILL:"#000000",_DEFAULT_LEADMULT:1.25,_CTX_MIDDLE:"middle",LINEAR:"linear",QUADRATIC:"quadratic",BEZIER:"bezier",CURVE:"curve",STROKE:"stroke",FILL:"fill",TEXTURE:"texture",IMMEDIATE:"immediate",NEAREST:"nearest",REPEAT:"repeat",CLAMP:"clamp",MIRROR:"mirror",LANDSCAPE:"landscape",PORTRAIT:"portrait",_DEFAULT_STROKE:"#000000",_DEFAULT_FILL:"#FFFFFF",GRID:"grid",AXES:"axes"}},{}],19:[function(t,e,i){"use strict";function r(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth||0}function n(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight||0}var o=t("./main"),s=t("./constants"),a=[s.ARROW,s.CROSS,s.HAND,s.MOVE,s.TEXT,s.WAIT];o.prototype._frameRate=0,o.prototype._lastFrameTime=window.performance.now(),o.prototype._targetFrameRate=60;var h=window.print;o.prototype.print=function(){arguments.length?console.log.apply(console,arguments):h()},o.prototype.frameCount=0,o.prototype.focused=document.hasFocus(),o.prototype.cursor=function(t,e,i){var r="auto",n=this._curElement.elt;if(a.indexOf(t)>-1)r=t;else if("string"==typeof t){var o="";e&&i&&"number"==typeof e&&"number"==typeof i&&(o=e+" "+i),r="http://"===t.substring(0,7)||"https://"===t.substring(0,8)?"url("+t+") "+o+", auto":/\.(cur|jpg|jpeg|gif|png|CUR|JPG|JPEG|GIF|PNG)$/.test(t)?"url("+t+") "+o+", auto":t}n.style.cursor=r},o.prototype.frameRate=function(t){return o._validateParameters("frameRate",arguments),"number"!=typeof t||t<0?this._frameRate:(this._setProperty("_targetFrameRate",t),this._runFrames(),this)},o.prototype.getFrameRate=function(){return this.frameRate()},o.prototype.setFrameRate=function(t){return this.frameRate(t)},o.prototype.noCursor=function(){this._curElement.elt.style.cursor="none"},o.prototype.displayWidth=screen.width,o.prototype.displayHeight=screen.height,o.prototype.windowWidth=r(),o.prototype.windowHeight=n(),o.prototype._onresize=function(t){this._setProperty("windowWidth",r()),this._setProperty("windowHeight",n());var e,i=this._isGlobal?window:this;"function"==typeof i.windowResized&&(void 0===(e=i.windowResized(t))||e||t.preventDefault())},o.prototype.width=0,o.prototype.height=0,o.prototype.fullscreen=function(t){if(o._validateParameters("fullscreen",arguments),void 0===t)return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;t?function(t){if(!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled))throw new Error("Fullscreen not enabled in this browser.");t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.msRequestFullscreen&&t.msRequestFullscreen()}(document.documentElement):document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.msExitFullscreen&&document.msExitFullscreen()},o.prototype.pixelDensity=function(t){var e;return o._validateParameters("pixelDensity",arguments),"number"==typeof t?(t!==this._pixelDensity&&(this._pixelDensity=t,this._pixelsDirty=!0),e=this,this.resizeCanvas(this.width,this.height,!0)):e=this._pixelDensity,e},o.prototype.displayDensity=function(){return window.devicePixelRatio},o.prototype.getURL=function(){return location.href},o.prototype.getURLPath=function(){return location.pathname.split("/").filter(function(t){return""!==t})},o.prototype.getURLParams=function(){for(var t,e=/[?&]([^&=]+)(?:[&=])([^&=]+)/gim,i={};null!=(t=e.exec(location.search));)t.index===e.lastIndex&&e.lastIndex++,i[t[1]]=t[2];return i},e.exports=o},{"./constants":18,"./main":24}],20:[function(t,e,i){"use strict";var r=t("./main");t("./constants"),r._validateParameters=r._friendlyFileLoadError=function(){};var n=null,o=function(){var e={},i=function(t){return Object.getOwnPropertyNames(t).filter(function(t){return!("_"===t[0]||t in e||(e[t]=!0,0))}).map(function(e){var i;return i="function"==typeof t[e]?"function":e===e.toUpperCase()?"constant":"variable",{name:e,type:i}})};(n=[].concat(i(r.prototype),i(t("./constants")))).sort(function(t,e){return e.name.length-t.name.length})},s=function(t,e){e||(e=console.log.bind(console)),n||o(),n.some(function(i){if(t.message&&null!==t.message.match("\\W?"+i.name+"\\W"))return e("Did you just try to use p5.js's "+i.name+("function"===i.type?"() ":" ")+i.type+"? If so, you may want to move it into your sketch's setup() function.\n\nFor more details, see: https://github.com/processing/p5.js/wiki/p5.js-overview#why-cant-i-assign-variables-using-p5-functions-and-variables-before-setup"),!0})};r.prototype._helpForMisusedAtTopLevelCode=s,"complete"!==document.readyState&&(window.addEventListener("error",s,!1),window.addEventListener("load",function(){window.removeEventListener("error",s,!1)})),e.exports=r},{"../../docs/reference/data.json":void 0,"./constants":18,"./main":24}],21:[function(t,e,i){"use strict";var r=t("./constants");e.exports={modeAdjust:function(t,e,i,n,o){return o===r.CORNER?{x:t,y:e,w:i,h:n}:o===r.CORNERS?{x:t,y:e,w:i-t,h:n-e}:o===r.RADIUS?{x:t-i,y:e-n,w:2*i,h:2*n}:o===r.CENTER?{x:t-.5*i,y:e-.5*n,w:i,h:n}:void 0}}},{"./constants":18}],22:[function(t,e,i){"use strict";var r=t("../core/main"),n=function(){window.mocha||(window.setup&&"function"==typeof window.setup||window.draw&&"function"==typeof window.draw)&&!r.instance&&new r};"complete"===document.readyState?n():window.addEventListener("load",n,!1)},{"../core/main":24}],23:[function(t,e,i){"use strict";var r=t("./main");r.prototype.exit=function(){throw new Error("exit() not implemented, see remove()")},r.prototype.pushStyle=function(){throw new Error("pushStyle() not used, see push()")},r.prototype.popStyle=function(){throw new Error("popStyle() not used, see pop()")},r.prototype.size=function(){var t="size() is not a valid p5 function, to set the size of the ";throw new Error(t+="drawing canvas, please use createCanvas() instead")},e.exports=r},{"./main":24}],24:[function(t,e,i){"use strict";t("./shim");var r=t("./constants"),n=function(t,e,i){"boolean"==typeof e&&void 0===i&&(i=e,e=void 0),this._setupDone=!1,this._pixelDensity=Math.ceil(window.devicePixelRatio)||1,this._userNode=e,this._curElement=null,this._elements=[],this._requestAnimId=0,this._preloadCount=0,this._isGlobal=!1,this._loop=!0,this._initializeInstanceVariables(),this._defaultCanvasSize={width:100,height:100},this._events={mousemove:null,mousedown:null,mouseup:null,dragend:null,dragover:null,click:null,dblclick:null,mouseover:null,mouseout:null,keydown:null,keyup:null,keypress:null,touchstart:null,touchmove:null,touchend:null,resize:null,blur:null},this._events.wheel=null,this._loadingScreenId="p5_loading",this._registeredMethods={};for(var r=Object.getOwnPropertyNames(n.prototype._registeredMethods),o=0;o=i-5)&&(this.redraw(),this._frameRate=1e3/(t-this._lastFrameTime),this._lastFrameTime=t,void 0!==this._updateMouseCoords&&this._updateMouseCoords()),this._loop&&(this._requestAnimId=window.requestAnimationFrame(this._draw))}.bind(this),this._runFrames=function(){this._updateInterval&&clearInterval(this._updateInterval)}.bind(this),this._setProperty=function(t,e){this[t]=e,this._isGlobal&&(window[t]=e)}.bind(this),this.remove=function(){var t=document.getElementById(this._loadingScreenId);if(t&&(t.parentNode.removeChild(t),this._incrementPreload()),this._curElement){for(var e in this._loop=!1,this._requestAnimId&&window.cancelAnimationFrame(this._requestAnimId),this._events)window.removeEventListener(e,this._events[e]);for(var i=0;i-1?o.readAsText(n):o.readAsDataURL(n)}},this)):console.log("The File APIs are not fully supported in this browser."),this},s.Element.prototype._setProperty=function(t,e){this[t]=e},e.exports=s.Element},{"./main":24}],26:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");r.Graphics=function(t,e,i,o){var s=i||n.P2D;for(var a in this.canvas=document.createElement("canvas"),(o._userNode||document.body).appendChild(this.canvas),r.Element.call(this,this.canvas,o,!1),r.prototype)this[a]||("function"==typeof r.prototype[a]?this[a]=r.prototype[a].bind(this):this[a]=r.prototype[a]);return r.prototype._initializeInstanceVariables.apply(this),this.width=t,this.height=e,this._pixelDensity=o._pixelDensity,s===n.WEBGL?this._renderer=new r.RendererGL(this.canvas,this,!1):this._renderer=new r.Renderer2D(this.canvas,this,!1),o._elements.push(this),this._renderer.resize(t,e),this._renderer._applyDefaults(),this},r.Graphics.prototype=Object.create(r.Element.prototype),r.Graphics.prototype.remove=function(){this.elt.parentNode&&this.elt.parentNode.removeChild(this.elt);var t=this._pInst._elements.indexOf(this);for(var e in-1!==t&&this._pInst._elements.splice(t,1),this._events)this.elt.removeEventListener(e,this._events[e])},e.exports=r.Graphics},{"./constants":18,"./main":24}],27:[function(t,e,i){"use strict";function r(t){var e=0,i=0;if(t.offsetParent)do{e+=t.offsetLeft,i+=t.offsetTop}while(t=t.offsetParent);else e+=t.offsetLeft,i+=t.offsetTop;return[e,i]}var n=t("./main"),o=t("../core/constants");n.Renderer=function(t,e,i){n.Element.call(this,t,e),this.canvas=t,i?(this._isMainCanvas=!0,this._pInst._setProperty("_curElement",this),this._pInst._setProperty("canvas",this.canvas),this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height)):(this.canvas.style.display="none",this._styles=[]),this._textSize=12,this._textLeading=15,this._textFont="sans-serif",this._textStyle=o.NORMAL,this._textAscent=null,this._textDescent=null,this._textAlign=o.LEFT,this._textBaseline=o.BASELINE,this._rectMode=o.CORNER,this._ellipseMode=o.CENTER,this._curveTightness=0,this._imageMode=o.CORNER,this._tint=null,this._doStroke=!0,this._doFill=!0,this._strokeSet=!1,this._fillSet=!1},n.Renderer.prototype=Object.create(n.Element.prototype),n.Renderer.prototype.push=function(){return{properties:{_doStroke:this._doStroke,_strokeSet:this._strokeSet,_doFill:this._doFill,_fillSet:this._fillSet,_tint:this._tint,_imageMode:this._imageMode,_rectMode:this._rectMode,_ellipseMode:this._ellipseMode,_textFont:this._textFont,_textLeading:this._textLeading,_textSize:this._textSize,_textAlign:this._textAlign,_textBaseline:this._textBaseline,_textStyle:this._textStyle}}},n.Renderer.prototype.pop=function(t){t.properties&&Object.assign(this,t.properties)},n.Renderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.elt.width=t*this._pInst._pixelDensity,this.elt.height=e*this._pInst._pixelDensity,this.elt.style.width=t+"px",this.elt.style.height=e+"px",this._isMainCanvas&&(this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height))},n.Renderer.prototype.textLeading=function(t){return"number"==typeof t?(this._setProperty("_textLeading",t),this._pInst):this._textLeading},n.Renderer.prototype.textSize=function(t){return"number"==typeof t?(this._setProperty("_textSize",t),this._setProperty("_textLeading",t*o._DEFAULT_LEADMULT),this._applyTextProperties()):this._textSize},n.Renderer.prototype.textStyle=function(t){return t?(t!==o.NORMAL&&t!==o.ITALIC&&t!==o.BOLD||this._setProperty("_textStyle",t),this._applyTextProperties()):this._textStyle},n.Renderer.prototype.textAscent=function(){return null===this._textAscent&&this._updateTextMetrics(),this._textAscent},n.Renderer.prototype.textDescent=function(){return null===this._textDescent&&this._updateTextMetrics(),this._textDescent},n.Renderer.prototype.textAlign=function(t,e){return void 0!==t?(this._setProperty("_textAlign",t),void 0!==e&&this._setProperty("_textBaseline",e),this._applyTextProperties()):{horizontal:this._textAlign,vertical:this._textBaseline}},n.Renderer.prototype.text=function(t,e,i,r,n){var s,a,h,l,u,c,p,d,f=this._pInst,m=Number.MAX_VALUE;if((this._doFill||this._doStroke)&&void 0!==t){if("string"!=typeof t&&(t=t.toString()),t=t.replace(/(\t)/g," "),s=t.split("\n"),void 0!==r){for(d=0,h=0;hr?(u=p[a]+" ",d+=f.textLeading()):u=c;switch(this._rectMode===o.CENTER&&(e-=r/2,i-=n/2),this._textAlign){case o.CENTER:e+=r/2;break;case o.RIGHT:e+=r}var y=!1;if(void 0!==n){switch(this._textBaseline){case o.BOTTOM:i+=n-d;break;case o.CENTER:i+=(n-d)/2;break;case o.BASELINE:y=!0,this._textBaseline=o.TOP}m=i+n-f.textAscent()}for(h=0;hr&&u.length>0?(this._renderText(f,u,e,i,m),u=p[a]+" ",i+=f.textLeading()):u=c;this._renderText(f,u,e,i,m),i+=f.textLeading(),y&&(this._textBaseline=o.BASELINE)}}else{var v=0,g=f.textAlign().vertical;for(g===o.CENTER?v=(s.length-1)*f.textLeading()/2:g===o.BOTTOM&&(v=(s.length-1)*f.textLeading()),l=0;l0&&(c=u.width/t.width),this.drawingContext.drawImage(u,c*e,c*i,c*n,c*o,s,a,h,l)}catch(t){if("NS_ERROR_NOT_AVAILABLE"!==t.name)throw t}this._pInst._pixelsDirty=!0},r.Renderer2D.prototype._getTintedImageCanvas=function(t){if(!t.canvas)return t;var e=o._toPixels(t.canvas),i=document.createElement("canvas");i.width=t.canvas.width,i.height=t.canvas.height;for(var r=i.getContext("2d"),n=r.createImageData(t.canvas.width,t.canvas.height),s=n.data,a=0;a=this.width||e>=this.height)return[0,0,0,255];var o=this._pInst||this,s=o._pixelDensity;t=Math.floor(t),e=Math.floor(e),i=Math.floor(i),n=Math.floor(n);var a,h,l=t*s,u=e*s;if(1!==i||1!==n||this instanceof r.RendererGL){var c=Math.min(i,o.width),p=Math.min(n,o.height),d=c*s,f=p*s,m=new r.Image(c,p);return m.canvas.getContext("2d").drawImage(this.canvas,l,u,d,f,0,0,c,p),m}return o._pixelsDirty?(a=this.drawingContext.getImageData(l,u,1,1).data,h=0):(a=o.pixels,h=4*(l+u*this.width*s)),[a[h+0],a[h+1],a[h+2],a[h+3]]},r.Renderer2D.prototype.loadPixels=function(){var t=this._pInst||this;if(t._pixelsDirty){t._pixelsDirty=!1;var e=t._pixelDensity,i=this.width*e,r=this.height*e,n=this.drawingContext.getImageData(0,0,i,r);t._setProperty("imageData",n),t._setProperty("pixels",n.data)}},r.Renderer2D.prototype.set=function(t,e,i){t=Math.floor(t),e=Math.floor(e);var n=this._pInst||this;if(i instanceof r.Image)this.drawingContext.save(),this.drawingContext.setTransform(1,0,0,1,0,0),this.drawingContext.scale(n._pixelDensity,n._pixelDensity),this.drawingContext.drawImage(i.canvas,t,e),this.drawingContext.restore(),n._pixelsDirty=!0;else{var o=0,s=0,a=0,h=0,l=4*(e*n._pixelDensity*(this.width*n._pixelDensity)+t*n._pixelDensity);if(n.imageData&&!n._pixelsDirty||n.loadPixels.call(n),"number"==typeof i)l1e-5;)c=Math.min(s-o,n.HALF_PI),p.push(this._acuteArcToBezier(o,c)),o+=c;return this._doFill&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a!==n.PIE&&null!=a||h.lineTo(t,e),h.closePath(),h.fill()),this._doStroke&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a===n.PIE?(h.lineTo(t,e),h.closePath()):a===n.CHORD&&h.closePath(),h.stroke()),this},r.Renderer2D.prototype.ellipse=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;var l=.5522847498,u=a/2*l,c=h/2*l,p=n+a,d=o+h,f=n+a/2,m=o+h/2;e.beginPath(),e.moveTo(n,m),e.bezierCurveTo(n,m-c,f-u,o,f,o),e.bezierCurveTo(f+u,o,p,m-c,p,m),e.bezierCurveTo(p,m+c,f+u,d,f,d),e.bezierCurveTo(f-u,d,n,m+c,n,m),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.line=function(t,e,i,r){var n=this.drawingContext;return this._doStroke?this._getStroke()===s?this:(n.lineWidth%2==1&&n.translate(.5,.5),n.beginPath(),n.moveTo(t,e),n.lineTo(i,r),n.stroke(),n.lineWidth%2==1&&n.translate(-.5,-.5),this):this},r.Renderer2D.prototype.point=function(t,e){var i=this.drawingContext;if(!this._doStroke)return this;if(this._getStroke()===s)return this;var r=this._getStroke(),o=this._getFill();t=Math.round(t),e=Math.round(e),this._setFill(r),i.lineWidth>1?(i.beginPath(),i.arc(t,e,i.lineWidth/2,0,n.TWO_PI,!1),i.fill()):i.fillRect(t,e,1,1),this._setFill(o)},r.Renderer2D.prototype.quad=function(t,e,i,r,n,o,a,h){var l=this.drawingContext,u=this._doFill,c=this._doStroke;if(u&&!c){if(this._getFill()===s)return this}else if(!u&&c&&this._getStroke()===s)return this;return l.beginPath(),l.moveTo(t,e),l.lineTo(i,r),l.lineTo(n,o),l.lineTo(a,h),l.closePath(),u&&l.fill(),c&&l.stroke(),this},r.Renderer2D.prototype.rect=function(t){var e=t[0],i=t[1],r=t[2],n=t[3],o=t[4],a=t[5],h=t[6],l=t[7],u=this.drawingContext,c=this._doFill,p=this._doStroke;if(c&&!p){if(this._getFill()===s)return this}else if(!c&&p&&this._getStroke()===s)return this;if(this._doStroke&&u.lineWidth%2==1&&u.translate(.5,.5),u.beginPath(),void 0===o)u.rect(e,i,r,n);else{void 0===a&&(a=o),void 0===h&&(h=a),void 0===l&&(l=h);var d=r/2,f=n/2;r<2*o&&(o=d),n<2*o&&(o=f),r<2*a&&(a=d),n<2*a&&(a=f),r<2*h&&(h=d),n<2*h&&(h=f),r<2*l&&(l=d),n<2*l&&(l=f),u.beginPath(),u.moveTo(e+o,i),u.arcTo(e+r,i,e+r,i+n,a),u.arcTo(e+r,i+n,e,i+n,h),u.arcTo(e,i+n,e,i,l),u.arcTo(e,i,e+r,i,o),u.closePath()}return this._doFill&&u.fill(),this._doStroke&&u.stroke(),this._doStroke&&u.lineWidth%2==1&&u.translate(-.5,-.5),this},r.Renderer2D.prototype.triangle=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3],l=t[4],u=t[5];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;e.beginPath(),e.moveTo(n,o),e.lineTo(a,h),e.lineTo(l,u),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.endShape=function(t,e,i,r,o,s,a){if(0===e.length)return this;if(!this._doStroke&&!this._doFill)return this;var h,l=t===n.CLOSE;l&&!s&&e.push(e[0]);var u,c,p=e.length;if(!i||a!==n.POLYGON&&null!==a)if(!r||a!==n.POLYGON&&null!==a)if(!o||a!==n.POLYGON&&null!==a)if(a===n.POINTS)for(u=0;u2){for(this.drawingContext.beginPath(),u=2;u3)for(u=0;u+13){var d=[],f=1-this._curveTightness;for(this.drawingContext.beginPath(),this.drawingContext.moveTo(e[1][0],e[1][1]),u=1;u+2=o))return t.push(),this._isOpenType()?this._textFont._renderPath(e,i,r,{renderer:this}):(this._doStroke&&this._strokeSet&&this.drawingContext.strokeText(e,i,r),this._doFill&&(this._fillSet||this._setFill(n._DEFAULT_TEXT_FILL),this.drawingContext.fillText(e,i,r))),t.pop(),this._pInst._pixelsDirty=!0,t},r.Renderer2D.prototype.textWidth=function(t){return this._isOpenType()?this._textFont._textWidth(t,this._textSize):this.drawingContext.measureText(t).width},r.Renderer2D.prototype._applyTextProperties=function(){var t,e=this._pInst;return this._setProperty("_textAscent",null),this._setProperty("_textDescent",null),t=this._textFont,this._isOpenType()&&(t=this._textFont.font.familyName,this._setProperty("_textStyle",this._textFont.font.styleName)),this.drawingContext.font=(this._textStyle||"normal")+" "+(this._textSize||12)+"px "+(t||"sans-serif"),this.drawingContext.textAlign=this._textAlign,this._textBaseline===n.CENTER?this.drawingContext.textBaseline=n._CTX_MIDDLE:this.drawingContext.textBaseline=this._textBaseline,e},r.Renderer2D.prototype.push=function(){return this.drawingContext.save(),r.Renderer.prototype.push.apply(this)},r.Renderer2D.prototype.pop=function(t){this.drawingContext.restore(),this._cachedFillStyle=this.drawingContext.fillStyle,this._cachedStrokeStyle=this.drawingContext.strokeStyle,r.Renderer.prototype.pop.call(this,t)},e.exports=r.Renderer2D},{"../image/filters":42,"./constants":18,"./main":24,"./p5.Renderer":27}],29:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");t("./p5.Graphics"),t("./p5.Renderer2D"),t("../webgl/p5.RendererGL");var o="defaultCanvas0",s="p5Canvas";r.prototype.createCanvas=function(t,e,i){r._validateParameters("createCanvas",arguments);var a,h=i||n.P2D;if(h===n.WEBGL){if(a=document.getElementById(o)){a.parentNode.removeChild(a);var l=this._renderer;this._elements=this._elements.filter(function(t){return t!==l})}(a=document.createElement("canvas")).id=o,a.classList.add(s)}else if(this._defaultGraphicsCreated)a=this.canvas;else{a=document.createElement("canvas");for(var u=0;document.getElementById("defaultCanvas"+u);)u++;o="defaultCanvas"+u,a.id=o,a.classList.add(s)}return this._setupDone||(a.dataset.hidden=!0,a.style.visibility="hidden"),this._userNode?this._userNode.appendChild(a):document.body.appendChild(a),h===n.WEBGL?(this._setProperty("_renderer",new r.RendererGL(a,this,!0)),this._elements.push(this._renderer)):this._defaultGraphicsCreated||(this._setProperty("_renderer",new r.Renderer2D(a,this,!0)),this._defaultGraphicsCreated=!0,this._elements.push(this._renderer)),this._renderer.resize(t,e),this._renderer._applyDefaults(),this._renderer},r.prototype.resizeCanvas=function(t,e,i){if(r._validateParameters("resizeCanvas",arguments),this._renderer){var n={};for(var o in this.drawingContext){var s=this.drawingContext[o];"object"!=typeof s&&"function"!=typeof s&&(n[o]=s)}for(var a in this._renderer.resize(t,e),this.width=t,this.height=e,n)try{this.drawingContext[a]=n[a]}catch(t){}i||this.redraw()}},r.prototype.noCanvas=function(){this.canvas&&this.canvas.parentNode.removeChild(this.canvas)},r.prototype.createGraphics=function(t,e,i){return r._validateParameters("createGraphics",arguments),new r.Graphics(t,e,i,this)},r.prototype.blendMode=function(t){if(r._validateParameters("blendMode",arguments),t!==n.BLEND&&t!==n.DARKEST&&t!==n.LIGHTEST&&t!==n.DIFFERENCE&&t!==n.MULTIPLY&&t!==n.EXCLUSION&&t!==n.SCREEN&&t!==n.REPLACE&&t!==n.OVERLAY&&t!==n.HARD_LIGHT&&t!==n.SOFT_LIGHT&&t!==n.DODGE&&t!==n.BURN&&t!==n.ADD&&t!==n.NORMAL)throw new Error("Mode "+t+" not recognized.");this._renderer.blendMode(t)},e.exports=r},{"../webgl/p5.RendererGL":74,"./constants":18,"./main":24,"./p5.Graphics":26,"./p5.Renderer2D":28}],30:[function(t,e,i){"use strict";var r=t("../main"),n=t("../constants"),o=t("../helpers");t("../error_helpers"),r.prototype.arc=function(t,e,i,s,a,h,l,u){if(r._validateParameters("arc",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;for(a=this._toRadians(a),h=this._toRadians(h);a<0;)a+=n.TWO_PI;for(;h<0;)h+=n.TWO_PI;void 0!==a&&void 0!==h&&(h.toFixed(10)===a.toFixed(10)||Math.abs(h-a)===n.TWO_PI?(a%=n.TWO_PI,h%=n.TWO_PI,a+=n.TWO_PI):Math.abs(h-a)>n.TWO_PI&&(a%=n.TWO_PI,h%=n.TWO_PI,h+=n.TWO_PI)),a<=n.HALF_PI?a=Math.atan(i/s*Math.tan(a)):a>n.HALF_PI&&a<=3*n.HALF_PI&&(a=Math.atan(i/s*Math.tan(a))+n.PI),h<=n.HALF_PI?h=Math.atan(i/s*Math.tan(h)):h>n.HALF_PI&&h<=3*n.HALF_PI&&(h=Math.atan(i/s*Math.tan(h))+n.PI),a>h&&(h+=n.TWO_PI),i=Math.abs(i),s=Math.abs(s);var c=o.modeAdjust(t,e,i,s,this._renderer._ellipseMode);return this._renderer.arc(c.x,c.y,c.w,c.h,a,h,l,u),this},r.prototype.ellipse=function(t,e,i,n,s){if(r._validateParameters("ellipse",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;i<0&&(i=Math.abs(i)),void 0===n?n=i:n<0&&(n=Math.abs(n));var a=o.modeAdjust(t,e,i,n,this._renderer._ellipseMode);return this._renderer.ellipse([a.x,a.y,a.w,a.h,s]),this},r.prototype.line=function(){return r._validateParameters("line",arguments),this._renderer._doStroke&&this._renderer.line.apply(this._renderer,arguments),this},r.prototype.point=function(){return r._validateParameters("point",arguments),this._renderer._doStroke&&this._renderer.point.apply(this._renderer,arguments),this},r.prototype.quad=function(){return r._validateParameters("quad",arguments),(this._renderer._doStroke||this._renderer._doFill)&&this._renderer.quad.apply(this._renderer,arguments),this},r.prototype.rect=function(){if(r._validateParameters("rect",arguments),this._renderer._doStroke||this._renderer._doFill){for(var t=o.modeAdjust(arguments[0],arguments[1],arguments[2],arguments[3],this._renderer._rectMode),e=[t.x,t.y,t.w,t.h],i=4;i0))throw new Error("vertex() must be used once before calling quadraticVertex()");u=!0;for(var e=[],i=0;id||Math.abs(this.accelerationY-this.pAccelerationY)>d||Math.abs(this.accelerationZ-this.pAccelerationZ)>d)&&t();var e=this.deviceTurned||window.deviceTurned;if("function"==typeof e){var i=this.rotationX+180,r=this.pRotationX+180,m=a+180;i-r>0&&i-r<270||i-r<-270?u="clockwise":(i-r<0||i-r>270)&&(u="counter-clockwise"),u!==n&&(m=i),Math.abs(i-m)>90&&Math.abs(i-m)<270&&(m=i,this._setProperty("turnAxis","X"),e()),n=u,a=m-180;var y=this.rotationY+180,v=this.pRotationY+180,g=h+180;y-v>0&&y-v<270||y-v<-270?c="clockwise":(y-v<0||y-this.pRotationY>270)&&(c="counter-clockwise"),c!==o&&(g=y),Math.abs(y-g)>90&&Math.abs(y-g)<270&&(g=y,this._setProperty("turnAxis","Y"),e()),o=c,h=g-180,this.rotationZ-this.pRotationZ>0&&this.rotationZ-this.pRotationZ<270||this.rotationZ-this.pRotationZ<-270?p="clockwise":(this.rotationZ-this.pRotationZ<0||this.rotationZ-this.pRotationZ>270)&&(p="counter-clockwise"),p!==s&&(l=this.rotationZ),Math.abs(this.rotationZ-l)>90&&Math.abs(this.rotationZ-l)<270&&(l=this.rotationZ,this._setProperty("turnAxis","Z"),e()),s=p,this._setProperty("turnAxis",void 0)}var _,b,S=this.deviceShaken||window.deviceShaken;"function"==typeof S&&(null!==this.pAccelerationX&&(_=Math.abs(this.accelerationX-this.pAccelerationX),b=Math.abs(this.accelerationY-this.pAccelerationY)),_+b>f&&S())},e.exports=r},{"../core/main":24}],39:[function(t,e,i){"use strict";var r=t("../core/main"),n={};r.prototype.isKeyPressed=!1,r.prototype.keyIsPressed=!1,r.prototype.key="",r.prototype.keyCode=0,r.prototype._onkeydown=function(t){if(!n[t.which]){this._setProperty("isKeyPressed",!0),this._setProperty("keyIsPressed",!0),this._setProperty("keyCode",t.which),n[t.which]=!0,this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which);var e=this.keyPressed||window.keyPressed;"function"!=typeof e||t.charCode||!1===e(t)&&t.preventDefault()}},r.prototype._onkeyup=function(t){var e=this.keyReleased||window.keyReleased;n[t.which]=!1,function(){for(var t in n)if(n.hasOwnProperty(t)&&!0===n[t])return!0;return!1}()||(this._setProperty("isKeyPressed",!1),this._setProperty("keyIsPressed",!1)),this._setProperty("_lastKeyCodeTyped",null),this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which),this._setProperty("keyCode",t.which),"function"==typeof e&&!1===e(t)&&t.preventDefault()},r.prototype._onkeypress=function(t){if(t.which!==this._lastKeyCodeTyped){this._setProperty("keyCode",t.which),this._setProperty("_lastKeyCodeTyped",t.which),this._setProperty("key",String.fromCharCode(t.which));var e=this.keyTyped||window.keyTyped;"function"==typeof e&&!1===e(t)&&t.preventDefault()}},r.prototype._onblur=function(t){n={}},r.prototype.keyIsDown=function(t){return r._validateParameters("keyIsDown",arguments),n[t]},e.exports=r},{"../core/main":24}],40:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._hasMouseInteracted=!1,r.prototype.mouseX=0,r.prototype.mouseY=0,r.prototype.pmouseX=0,r.prototype.pmouseY=0,r.prototype.winMouseX=0,r.prototype.winMouseY=0,r.prototype.pwinMouseX=0,r.prototype.pwinMouseY=0,r.prototype.mouseButton=0,r.prototype.mouseIsPressed=!1,r.prototype._updateNextMouseCoords=function(t){if(null!==this._curElement&&(!t.touches||t.touches.length>0)){var e=function(t,e,i,r){r&&!r.clientX&&(r.touches?r=r.touches[0]:r.changedTouches&&(r=r.changedTouches[0]));var n=t.getBoundingClientRect(),o=t.scrollWidth/e,s=t.scrollHeight/i;return{x:(r.clientX-n.left)/o,y:(r.clientY-n.top)/s,winX:r.clientX,winY:r.clientY,id:r.identifier}}(this._curElement.elt,this.width,this.height,t);this._setProperty("mouseX",e.x),this._setProperty("mouseY",e.y),this._setProperty("winMouseX",e.winX),this._setProperty("winMouseY",e.winY)}this._hasMouseInteracted||(this._updateMouseCoords(),this._setProperty("_hasMouseInteracted",!0))},r.prototype._updateMouseCoords=function(){this._setProperty("pmouseX",this.mouseX),this._setProperty("pmouseY",this.mouseY),this._setProperty("pwinMouseX",this.winMouseX),this._setProperty("pwinMouseY",this.winMouseY),this._setProperty("_pmouseWheelDeltaY",this._mouseWheelDeltaY)},r.prototype._setMouseButton=function(t){1===t.button?this._setProperty("mouseButton",n.CENTER):2===t.button?this._setProperty("mouseButton",n.RIGHT):this._setProperty("mouseButton",n.LEFT)},r.prototype._onmousemove=function(t){var e=this._isGlobal?window:this;this._updateNextMouseCoords(t),this.mouseIsPressed?"function"==typeof e.mouseDragged?!1===e.mouseDragged(t)&&t.preventDefault():"function"==typeof e.touchMoved&&!1===e.touchMoved(t)&&t.preventDefault():"function"==typeof e.mouseMoved&&!1===e.mouseMoved(t)&&t.preventDefault()},r.prototype._onmousedown=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!0),this._setMouseButton(t),this._updateNextMouseCoords(t),"function"==typeof e.mousePressed?!1===e.mousePressed(t)&&t.preventDefault():"function"==typeof e.touchStarted&&!1===e.touchStarted(t)&&t.preventDefault()},r.prototype._onmouseup=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!1),"function"==typeof e.mouseReleased?!1===e.mouseReleased(t)&&t.preventDefault():"function"==typeof e.touchEnded&&!1===e.touchEnded(t)&&t.preventDefault()},r.prototype._ondragend=r.prototype._onmouseup,r.prototype._ondragover=r.prototype._onmousemove,r.prototype._onclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.mouseClicked&&!1===e.mouseClicked(t)&&t.preventDefault()},r.prototype._ondblclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.doubleClicked&&!1===e.doubleClicked(t)&&t.preventDefault()},r.prototype._mouseWheelDeltaY=0,r.prototype._pmouseWheelDeltaY=0,r.prototype._onwheel=function(t){var e=this._isGlobal?window:this;this._setProperty("_mouseWheelDeltaY",t.deltaY),"function"==typeof e.mouseWheel&&(t.delta=t.deltaY,!1===e.mouseWheel(t)&&t.preventDefault())},e.exports=r},{"../core/constants":18,"../core/main":24}],41:[function(t,e,i){"use strict";function r(t,e,i,r,n){n=n||0;var o=t.getBoundingClientRect(),s=t.scrollWidth/e,a=t.scrollHeight/i,h=r.touches[n]||r.changedTouches[n];return{x:(h.clientX-o.left)/s,y:(h.clientY-o.top)/a,winX:h.clientX,winY:h.clientY,id:h.identifier}}var n=t("../core/main");n.prototype.touches=[],n.prototype._updateTouchCoords=function(t){if(null!==this._curElement){for(var e=[],i=0;i=r)break;x=0}for(A=x;A=r);A++){var O=c[g+R];M=a[A],v+=M[(-16777216&O)>>>24],f+=M[(16711680&O)>>16],m+=M[(65280&O)>>8],y+=M[255&O],d+=s[A],g++}P[_=R+w]=v/d,E[_]=f/d,k[_]=m/d,C[_]=y/d}R+=r}for(R=0,S=(b=-n)*r,T=0;T=l)break;x=0,_=b,g=w+S}for(A=x;A=l);A++)M=a[A],v+=M[P[g]],f+=M[E[g]],m+=M[k[g]],y+=M[C[g]],d+=s[A],_++,g+=r;c[w+R]=v/d<<24|f/d<<16|m/d<<8|y/d}R+=r,S+=r,b++}h._setPixels(i,c)}var n,o,s,a,h={_toPixels:function(t){return t instanceof ImageData?t.data:t.getContext("2d").getImageData(0,0,t.width,t.height).data},_getARGB:function(t,e){var i=4*e;return t[i+3]<<24&4278190080|t[i]<<16&16711680|t[i+1]<<8&65280|255&t[i+2]},_setPixels:function(t,e){for(var i=0,r=0,n=t.length;r>>16,t[i+1]=(65280&e[r])>>>8,t[i+2]=255&e[r],t[i+3]=(4278190080&e[r])>>>24},_toImageData:function(t){return t instanceof ImageData?t:t.getContext("2d").getImageData(0,0,t.width,t.height)},_createImageData:function(t,e){return h._tmpCanvas=document.createElement("canvas"),h._tmpCtx=h._tmpCanvas.getContext("2d"),this._tmpCtx.createImageData(t,e)},apply:function(t,e,i){var r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),o=e(n,i);o instanceof ImageData?r.putImageData(o,0,0,0,0,t.width,t.height):r.putImageData(n,0,0,0,0,t.width,t.height)},threshold:function(t,e){var i=h._toPixels(t);void 0===e&&(e=.5);for(var r=Math.floor(255*e),n=0;n=r?255:0,i[n]=i[n+1]=i[n+2]=o}},gray:function(t){for(var e=h._toPixels(t),i=0;i255)throw new Error("Level must be greater than 2 and less than 255 for posterize");for(var r=e-1,n=0;n>8)/r,i[n+1]=255*(s*e>>8)/r,i[n+2]=255*(a*e>>8)/r}},dilate:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))>(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m>o&&(n=c,o=m),v>o&&(n=d,o=v),g>o&&(n=f,o=g),x[b++]=n;h._setPixels(_,x)},erode:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))<(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m=1&&(e=o[0]),o.length>=2&&(i=o[1]),i=i||r.prototype._checkFileExtension(e,i)[1]||"png"){default:n="image/png";break;case"jpeg":case"jpg":n="image/jpeg"}t.toBlob(function(t){r.prototype.downloadFile(t,e,i)},n)},r.prototype.saveFrames=function(t,e,i,o,s){r._validateParameters("saveFrames",arguments);var a=i||3;a=r.prototype.constrain(a,0,15),a*=1e3;var h=o||15;h=r.prototype.constrain(h,0,22);var l=0,u=r.prototype._makeFrame,c=this._curElement.elt,p=setInterval(function(){u(t+l,e,c),l++},1e3/h);setTimeout(function(){if(clearInterval(p),s)s(n);else for(var t=0;t0&&t0&&this.loadPixels(),this.setModified(!0),this._pixelsDirty=!0},r.Image.prototype.copy=function(){var t,e,i,n,o,s,a,h,l;if(9===arguments.length)t=arguments[0],e=arguments[1],i=arguments[2],n=arguments[3],o=arguments[4],s=arguments[5],a=arguments[6],h=arguments[7],l=arguments[8];else{if(8!==arguments.length)throw new Error("Signature not supported");t=this,e=arguments[0],i=arguments[1],n=arguments[2],o=arguments[3],s=arguments[4],a=arguments[5],h=arguments[6],l=arguments[7]}r.Renderer2D._copyHelper(this,t,e,i,n,o,s,a,h,l),this._pixelsDirty=!0},r.Image.prototype.mask=function(t){void 0===t&&(t=this);var e=this.drawingContext.globalCompositeOperation,i=1;t instanceof r.Renderer&&(i=t._pInst._pixelDensity);var n=[t,0,0,i*t.width,i*t.height,0,0,this.width,this.height];this.drawingContext.globalCompositeOperation="destination-in",r.Image.prototype.copy.apply(this,n),this.drawingContext.globalCompositeOperation=e,this.setModified(!0)},r.Image.prototype.filter=function(t,e){n.apply(this.canvas,n[t.toLowerCase()],e),this.setModified(!0)},r.Image.prototype.blend=function(){r.prototype.blend.apply(this,arguments),this.setModified(!0)},r.Image.prototype.setModified=function(t){this._modified=t},r.Image.prototype.isModified=function(){return this._modified},r.Image.prototype.save=function(t,e){r.prototype.saveCanvas(this.canvas,t,e)},e.exports=r.Image},{"../core/main":24,"./filters":42}],46:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("./filters");t("../color/p5.Color"),r.prototype.pixels=[],r.prototype.blend=function(){r._validateParameters("blend",arguments),this._renderer?this._renderer.blend.apply(this._renderer,arguments):r.Renderer2D.prototype.blend.apply(this,arguments)},r.prototype.copy=function(){r._validateParameters("copy",arguments),r.Renderer2D.prototype.copy.apply(this._renderer,arguments)},r.prototype.filter=function(t,e){r._validateParameters("filter",arguments),void 0!==this.canvas?n.apply(this.canvas,n[t.toLowerCase()],e):n.apply(this.elt,n[t.toLowerCase()],e)},r.prototype.get=function(t,e,i,r){return this._renderer.get(t,e,i,r)},r.prototype.loadPixels=function(){r._validateParameters("loadPixels",arguments),this._renderer.loadPixels()},r.prototype.set=function(t,e,i){this._renderer.set(t,e,i)},r.prototype.updatePixels=function(t,e,i,n){r._validateParameters("updatePixels",arguments),0!==this.pixels.length&&this._renderer.updatePixels(t,e,i,n)},e.exports=r},{"../color/p5.Color":16,"../core/main":24,"./filters":42}],47:[function(t,e,i){"use strict";function r(t,e){var i={};if(void 0===(e=e||[]))for(var r=0;r/g,">").replace(/"/g,""").replace(/'/g,"'")}function o(t,e){e&&!0!==e&&"true"!==e||(e=""),t||(t="untitled");var i="";return t&&t.indexOf(".")>-1&&(i=t.split(".").pop()),e&&i!==e&&(t=t+"."+(i=e)),[t,i]}var s=t("../core/main");t("whatwg-fetch"),t("es6-promise").polyfill();var a=t("fetch-jsonp");t("../core/error_helpers"),s.prototype.loadJSON=function(){s._validateParameters("loadJSON",arguments);for(var t,e,i,r=arguments[0],n={},o="json",a=1;a0&&"function"==typeof arguments[u];u--)h++;var c=arguments.length-h,p=arguments[0];if(2===c&&"string"==typeof p&&"object"==typeof arguments[1])r=new Request(p,arguments[1]),e=arguments[2],i=arguments[3];else{for(var d,f="GET",m=1;m64e6&&s._friendlyFileLoadError(7,p),t){case"json":case"jsonp":return e.json();case"binary":return e.blob();case"arrayBuffer":return e.arrayBuffer();case"xml":return e.text().then(function(t){return function t(e){var i=new s.XML,r=e.childNodes;if(r&&r.length){for(var n=0;n"),o.print("");var p=' "),o.print(""),o.print(" "),"0"!==a[0]){o.print(" ");for(var d=0;d"+f),o.print(" ")}o.print(" ")}for(var m=0;m");for(var y=0;y"+g),o.print(" ")}o.print(" ")}o.print("
"),o.print(""),o.print("")}o.close(),o.clear()},s.prototype.writeFile=function(t,e,i){var r="application/octet-stream";s.prototype._isSafari()&&(r="text/plain");var n=new Blob(t,{type:r});s.prototype.downloadFile(n,e,i)},s.prototype.downloadFile=function(e,i,r){var n=o(i,r),a=n[0];if(e instanceof Blob)t("file-saver").saveAs(e,a);else{var h=document.createElement("a");if(h.href=e,h.download=a,h.onclick=function(t){(function(t){document.body.removeChild(t.target)})(t),t.stopPropagation()},h.style.display="none",document.body.appendChild(h),s.prototype._isSafari()){var l="Hello, Safari user! To download this file...\n";l+="1. Go to File --\x3e Save As.\n",l+='2. Choose "Page Source" as the Format.\n',l+='3. Name it with this extension: ."'+n[1]+'"',alert(l)}h.click()}},s.prototype._checkFileExtension=o,s.prototype._isSafari=function(){return Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0},e.exports=s},{"../core/error_helpers":20,"../core/main":24,"es6-promise":4,"fetch-jsonp":5,"file-saver":6,"whatwg-fetch":12}],48:[function(t,e,i){"use strict";var r=t("../core/main");r.Table=function(t){this.columns=[],this.rows=[]},r.Table.prototype.addRow=function(t){var e=t||new r.TableRow;if(void 0===e.arr||void 0===e.obj)throw new Error("invalid TableRow: "+e);return e.table=this,this.rows.push(e),e},r.Table.prototype.removeRow=function(t){this.rows[t].table=null;var e=this.rows.splice(t+1,this.rows.length);this.rows.pop(),this.rows=this.rows.concat(e)},r.Table.prototype.getRow=function(t){return this.rows[t]},r.Table.prototype.getRows=function(){return this.rows},r.Table.prototype.findRow=function(t,e){if("string"==typeof e){for(var i=0;i=0))throw new Error('This table has no column named "'+t+'"');i=e[t],r[i]=e}else r[n]=this.rows[n].obj;return r},r.Table.prototype.getArray=function(){for(var t=[],e=0;e=0))throw new Error('This table has no column named "'+t+'"');this.obj[t]=e,this.arr[i]=e}else{if(!(t0},r.XML.prototype.listChildren=function(){return this.children.map(function(t){return t.name})},r.XML.prototype.getChildren=function(t){return t?this.children.filter(function(e){return e.name===t}):this.children},r.XML.prototype.getChild=function(t){if("string"!=typeof t)return this.children[t];for(var e=0;eo&&(o=a),n[s]=a}0===o&&(o=1);for(var h=0,l=0,u=0;u=1&&(f++,v--),g>=1&&(m++,g--),_>=1&&(y++,_--)}return b},n.prototype.noiseDetail=function(t,e){t>0&&(s=t),e>0&&(a=e)},n.prototype.noiseSeed=function(t){var e=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();e.setSeed(t),r=new Array(o+1);for(var i=0;it*t&&this.div(Math.sqrt(e)).mult(t),this},r.Vector.prototype.setMag=function(t){return this.normalize().mult(t)},r.Vector.prototype.heading=function(){var t=Math.atan2(this.y,this.x);return this.p5?this.p5._fromRadians(t):t},r.Vector.prototype.rotate=function(t){var e=this.heading()+t;this.p5&&(e=this.p5._toRadians(e));var i=this.mag();return this.x=Math.cos(e)*i,this.y=Math.sin(e)*i,this},r.Vector.prototype.angleBetween=function(t){var e=this.dot(t)/(this.mag()*t.mag()),i=Math.acos(Math.min(1,Math.max(-1,e)));return this.p5?this.p5._fromRadians(i):i},r.Vector.prototype.lerp=function(t,e,i,n){return t instanceof r.Vector?this.lerp(t.x,t.y,t.z,e):(this.x+=(t-this.x)*n||0,this.y+=(e-this.y)*n||0,this.z+=(i-this.z)*n||0,this)},r.Vector.prototype.array=function(){return[this.x||0,this.y||0,this.z||0]},r.Vector.prototype.equals=function(t,e,i){var n,o,s;return t instanceof r.Vector?(n=t.x||0,o=t.y||0,s=t.z||0):t instanceof Array?(n=t[0]||0,o=t[1]||0,s=t[2]||0):(n=t||0,o=e||0,s=i||0),this.x===n&&this.y===o&&this.z===s},r.Vector.fromAngle=function(t,e){return void 0===e&&(e=1),new r.Vector(e*Math.cos(t),e*Math.sin(t),0)},r.Vector.fromAngles=function(t,e,i){void 0===i&&(i=1);var n=Math.cos(e),o=Math.sin(e),s=Math.cos(t),a=Math.sin(t);return new r.Vector(i*a*o,-i*s,i*a*n)},r.Vector.random2D=function(){return this.fromAngle(Math.random()*n.TWO_PI)},r.Vector.random3D=function(){var t=Math.random()*n.TWO_PI,e=2*Math.random()-1,i=Math.sqrt(1-e*e),o=i*Math.cos(t),s=i*Math.sin(t);return new r.Vector(o,s,e)},r.Vector.add=function(t,e,i){return i?i.set(t):i=t.copy(),i.add(e),i},r.Vector.sub=function(t,e,i){return i?i.set(t):i=t.copy(),i.sub(e),i},r.Vector.mult=function(t,e,i){return i?i.set(t):i=t.copy(),i.mult(e),i},r.Vector.div=function(t,e,i){return i?i.set(t):i=t.copy(),i.div(e),i},r.Vector.dot=function(t,e){return t.dot(e)},r.Vector.cross=function(t,e){return t.cross(e)},r.Vector.dist=function(t,e){return t.dist(e)},r.Vector.lerp=function(t,e,i,r){return r?r.set(t):r=t.copy(),r.lerp(e,i),r},r.Vector.mag=function(t){var e=t.x,i=t.y,r=t.z,n=e*e+i*i+r*r;return Math.sqrt(n)},e.exports=r.Vector},{"../core/constants":18,"../core/main":24}],55:[function(t,e,i){"use strict";var r=t("../core/main"),n=!1,o=!1,s=0,a=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();r.prototype.randomSeed=function(t){a.setSeed(t),n=!0,o=!1},r.prototype.random=function(t,e){var i;if(i=n?a.rand():Math.random(),void 0===t)return i;if(void 0===e)return t instanceof Array?t[Math.floor(i*t.length)]:i*t;if(t>e){var r=t;t=e,e=r}return i*(e-t)+t},r.prototype.randomGaussian=function(t,e){var i,r,n,a;if(o)i=s,o=!1;else{do{r=this.random(2)-1,n=this.random(2)-1,a=r*r+n*n}while(a>=1);a=Math.sqrt(-2*Math.log(a)/a),i=r*a,s=n*a,o=!0}var h=t||0;return i*(e||1)+h},e.exports=r},{"../core/main":24}],56:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._angleMode=n.RADIANS,r.prototype.acos=function(t){return this._fromRadians(Math.acos(t))},r.prototype.asin=function(t){return this._fromRadians(Math.asin(t))},r.prototype.atan=function(t){return this._fromRadians(Math.atan(t))},r.prototype.atan2=function(t,e){return this._fromRadians(Math.atan2(t,e))},r.prototype.cos=function(t){return Math.cos(this._toRadians(t))},r.prototype.sin=function(t){return Math.sin(this._toRadians(t))},r.prototype.tan=function(t){return Math.tan(this._toRadians(t))},r.prototype.degrees=function(t){return t*n.RAD_TO_DEG},r.prototype.radians=function(t){return t*n.DEG_TO_RAD},r.prototype.angleMode=function(t){t!==n.DEGREES&&t!==n.RADIANS||(this._angleMode=t)},r.prototype._toRadians=function(t){return this._angleMode===n.DEGREES?t*n.DEG_TO_RAD:t},r.prototype._toDegrees=function(t){return this._angleMode===n.RADIANS?t*n.RAD_TO_DEG:t},r.prototype._fromRadians=function(t){return this._angleMode===n.DEGREES?t*n.RAD_TO_DEG:t},e.exports=r},{"../core/constants":18,"../core/main":24}],57:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.textAlign=function(t,e){return r._validateParameters("textAlign",arguments),this._renderer.textAlign.apply(this._renderer,arguments)},r.prototype.textLeading=function(t){return r._validateParameters("textLeading",arguments),this._renderer.textLeading.apply(this._renderer,arguments)},r.prototype.textSize=function(t){return r._validateParameters("textSize",arguments),this._renderer.textSize.apply(this._renderer,arguments)},r.prototype.textStyle=function(t){return r._validateParameters("textStyle",arguments),this._renderer.textStyle.apply(this._renderer,arguments)},r.prototype.textWidth=function(t){return r._validateParameters("textWidth",arguments),0===t.length?0:this._renderer.textWidth.apply(this._renderer,arguments)},r.prototype.textAscent=function(){return r._validateParameters("textAscent",arguments),this._renderer.textAscent()},r.prototype.textDescent=function(){return r._validateParameters("textDescent",arguments),this._renderer.textDescent()},r.prototype._updateTextMetrics=function(){return this._renderer._updateTextMetrics()},e.exports=r},{"../core/main":24}],58:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("opentype.js");t("../core/error_helpers"),r.prototype.loadFont=function(t,e,i){r._validateParameters("loadFont",arguments);var n=new r.Font(this),s=this;return o.load(t,function(o,a){if(o)return void 0!==i?i(o):(r._friendlyFileLoadError(4,t),void console.error(o,t));n.font=a,void 0!==e&&e(n),s._decrementPreload();var h,l,u=t.split("\\").pop().split("/").pop(),c=u.lastIndexOf("."),p=c<1?null:u.substr(c+1);["ttf","otf","woff","woff2"].indexOf(p)>-1&&(h=u.substr(0,c),(l=document.createElement("style")).appendChild(document.createTextNode("\n@font-face {\nfont-family: "+h+";\nsrc: url("+t+");\n}\n")),document.head.appendChild(l))}),n},r.prototype.text=function(t,e,i,n,o){return r._validateParameters("text",arguments),this._renderer._doFill||this._renderer._doStroke?this._renderer.text.apply(this._renderer,arguments):this},r.prototype.textFont=function(t,e){if(r._validateParameters("textFont",arguments),arguments.length){if(!t)throw new Error("null font passed to textFont");return this._renderer._setProperty("_textFont",t),e&&(this._renderer._setProperty("_textSize",e),this._renderer._setProperty("_textLeading",e*n._DEFAULT_LEADMULT)),this._renderer._applyTextProperties()}return this._renderer._textFont},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"opentype.js":10}],59:[function(t,e,i){"use strict";function r(t,e){for(var i=function(t,e){if("object"!=typeof t)t=e;else for(var i in e)void 0===t[i]&&(t[i]=e[i]);return t}(e,{sampleFactor:.1,simplifyThreshold:0}),r=c(t,0,1),o=r/(r*i.sampleFactor),s=[],a=0;a3&&r>=0;--r)h(a(t,r-1),a(t,r),a(t,r+1),e)&&(t.splice(r%t.length,1),i++);return i}function o(t){for(var e,i=[],r=0;rg||v<_)&&(T+=180),{x:f,y:m,m:{x:y,y:v},n:{x:g,y:_},start:{x:b,y:S},end:{x:x,y:w},alpha:T}}function u(t,e,i,r,n,o,s,a,h){return null==h?v(t,e,i,r,n,o,s,a):l(t,e,i,r,n,o,s,a,function(t,e,i,r,n,o,s,a,h){if(!(h<0||v(t,e,i,r,n,o,s,a).01;)u/=2,l=v(t,e,i,r,n,o,s,a,c+=(le&&!i)return{x:(a=u(r,n,o[1],o[2],o[3],o[4],o[5],o[6],e-h)).x,y:a.y,alpha:a.alpha};h+=s,r=+o[5],n=+o[6]}o.shift()}return(a=i?h:l(r,n,o[0],o[1],o[2],o[3],o[4],o[5],1)).alpha&&(a={x:a.x,y:a.y,alpha:a.alpha}),a}function p(t){var e=[],i=0,r=0,n=0,o=0,s=0;if(!t)return e;"M"===t[0][0]&&(i=+t[0][1],r=+t[0][2],n=i,o=r,s++,e[0]=["M",i,r]);for(var a,h,l,u=3===t.length&&"M"===t[0][0]&&"R"===t[1][0].toUpperCase()&&"Z"===t[2][0].toUpperCase(),c=s,p=t.length;c1&&(w=Math.sqrt(w),r*=w,n*=w);var T=r*r,A=n*n,M=(s===a?-1:1)*Math.sqrt(Math.abs((T*A-T*x*x-A*S*S)/(T*x*x+A*S*S)));d=M*r*x/n+(e+h)/2,f=M*-n*S/r+(i+l)/2,c=Math.asin(((i-f)/n).toFixed(9)),p=Math.asin(((l-f)/n).toFixed(9)),c=ep&&(c-=2*y),!a&&p>c&&(p-=2*y)}var P=p-c;if(Math.abs(P)>v){var E=p,k=h,C=l;p=c+v*(a&&p>c?1:-1),h=d+r*Math.cos(p),l=f+n*Math.sin(p),_=t(h,l,r,n,o,0,a,k,C,[p,E,d,f])}P=p-c;var R=Math.cos(c),O=Math.sin(c),L=Math.cos(p),F=Math.sin(p),I=Math.tan(P/4),D=4/3*r*I,U=4/3*n*I,B=[e,i],N=[e+D*O,i-U*R],G=[h+D*F,l-U*L],q=[h,l];if(N[0]=2*B[0]-N[0],N[1]=2*B[1]-N[1],u)return[N,G,q].concat(_);for(var V=[],j=0,z=(_=[N,G,q].concat(_).join().split(",")).length;j7){t[e].shift();for(var o=t[e];o.length;)a[e]="A",n&&(h[e]="A"),t.splice(e++,0,["C"].concat(o.splice(0,6)));t.splice(e,1),i=Math.max(r.length,n&&n.length||0)}},c=function(t,e,o,s,a){t&&e&&"M"===t[a][0]&&"M"!==e[a][0]&&(e.splice(a,0,["M",s.x,s.y]),o.bx=0,o.by=0,o.x=t[a][1],o.y=t[a][2],i=Math.max(r.length,n&&n.length||0))},d="",f="";i=Math.max(r.length,n&&n.length||0);for(var v=0;vr;r+=2){var o=[{x:+t[r-2],y:+t[r-1]},{x:+t[r],y:+t[r+1]},{x:+t[r+2],y:+t[r+3]},{x:+t[r+4],y:+t[r+5]}];e?r?n-4===r?o[3]={x:+t[0],y:+t[1]}:n-2===r&&(o[2]={x:+t[0],y:+t[1]},o[3]={x:+t[2],y:+t[3]}):o[0]={x:+t[n-2],y:+t[n-1]}:n-4===r?o[3]=o[2]:r||(o[0]={x:+t[r],y:+t[r+1]}),i.push(["C",(-o[0].x+6*o[1].x+o[2].x)/6,(-o[0].y+6*o[1].y+o[2].y)/6,(o[1].x+6*o[2].x-o[3].x)/6,(o[1].y+6*o[2].y-o[3].y)/6,o[2].x,o[2].y])}return i}function m(t,e,i,r){return[t,e,i,r,i,r]}function y(t,e,i,r,n,o){var s=1/3,a=2/3;return[s*t+a*i,s*e+a*r,s*n+a*i,s*o+a*r,n,o]}function v(t,e,i,r,n,o,s,a,h){null==h&&(h=1);for(var l=(h=h>1?1:h<0?0:h)/2,u=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],c=0,p=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],d=0;d<12;d++){var f=l*u[d]+l,m=g(f,t,i,n,s),y=g(f,e,r,o,a),v=m*m+y*y;c+=p[d]*Math.sqrt(v)}return l*c}function g(t,e,i,r,n){return t*(t*(-3*e+9*i-9*r+3*n)+6*e-12*i+6*r)-3*e+3*i}function _(){for(var t="",e=arguments.length-1;e>=0;--e){var i=arguments[e];t+=i===Object(i)?JSON.stringify(i):i}return t}var b=t("../core/main"),S=t("../core/constants");b.Font=function(t){this.parent=t,this.cache={},this.font=void 0},b.Font.prototype.list=function(){throw new Error("not yet implemented")},b.Font.prototype.textBounds=function(t,e,i,r,n){e=void 0!==e?e:0,i=void 0!==i?i:0,r=r||this.parent._renderer._textSize;var o=n&&n.renderer&&n.renderer._pInst||this.parent,s=o._renderer,a=s._textAlign||S.LEFT,h=s._textBaseline||S.BASELINE,l=_("textBounds",t,e,i,r,a,h),u=this.cache[l];if(!u){var c,p,d,f,m,y=[],v=[],g=this._scale(r);this.font.forEachGlyph(t,e,i,r,n,function(t,e,i,r){var n=t.getMetrics();y.push(e+n.xMin*g),y.push(e+n.xMax*g),v.push(i+-n.yMin*g),v.push(i+-n.yMax*g)}),c=Math.min.apply(null,y),p=Math.min.apply(null,v),d=Math.max.apply(null,y),f=Math.max.apply(null,v),u={x:c,y:p,h:f-p,w:d-c,advance:c-e},m=this._handleAlignment(s,t,u.x,u.y,u.w+u.advance),u.x=m.x,u.y=m.y,this.cache[_("textBounds",t,e,i,r,a,h)]=u}return u},b.Font.prototype.textToPoints=function(t,e,i,n,s){function a(e){return u[e].name&&"space"===u[e].name||t.length===u.length&&" "===t[e]||u[e].index&&3===u[e].index}var h=0,l=[],u=this._getGlyphs(t);n=n||this.parent._renderer._textSize;for(var c=0;c2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&"number"==typeof r.decimals&&(n=r.decimals),t.toPathData(n)},b.Font.prototype._getSVG=function(t,e,i,r){var n=3;return"string"==typeof t&&arguments.length>2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&("number"==typeof r.decimals&&(n=r.decimals),"number"==typeof r.strokeWidth&&(t.strokeWidth=r.strokeWidth),void 0!==r.fill&&(t.fill=r.fill),void 0!==r.stroke&&(t.stroke=r.stroke)),t.toSVG(n)},b.Font.prototype._renderPath=function(t,e,i,r){var n,o=r&&r.renderer||this.parent._renderer,s=o.drawingContext;n="object"==typeof t&&t.commands?t.commands:this._getPath(t,e,i,r).commands,s.beginPath();for(var a=0;a1;)i=Math.random()*o|0,r=t[--o],t[o]=t[i],t[i]=r;return t},r.prototype.sort=function(t,e){var i=e?t.slice(0,Math.min(e,t.length)):t,r=e?t.slice(Math.min(e,t.length)):[];return(i="string"==typeof i[0]?i.sort():i.sort(function(t,e){return t-e})).concat(r)},r.prototype.splice=function(t,e,i){return Array.prototype.splice.apply(t,[i,0].concat(e)),t},r.prototype.subset=function(t,e,i){return void 0!==i?t.slice(e,e+i):t.slice(e,t.length)},e.exports=r},{"../core/main":24}],61:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.float=function(t){return t instanceof Array?t.map(parseFloat):parseFloat(t)},r.prototype.int=function(t,e){return e=e||10,"string"==typeof t?parseInt(t,e):"number"==typeof t?0|t:"boolean"==typeof t?t?1:0:t instanceof Array?t.map(function(t){return r.prototype.int(t,e)}):void 0},r.prototype.str=function(t){return t instanceof Array?t.map(r.prototype.str):String(t)},r.prototype.boolean=function(t){return"number"==typeof t?0!==t:"string"==typeof t?"true"===t.toLowerCase():"boolean"==typeof t?t:t instanceof Array?t.map(r.prototype.boolean):void 0},r.prototype.byte=function(t){var e=r.prototype.int(t,10);return"number"==typeof e?(e+128)%256-128:e instanceof Array?e.map(r.prototype.byte):void 0},r.prototype.char=function(t){return"number"!=typeof t||isNaN(t)?t instanceof Array?t.map(r.prototype.char):"string"==typeof t?r.prototype.char(parseInt(t,10)):void 0:String.fromCharCode(t)},r.prototype.unchar=function(t){return"string"==typeof t&&1===t.length?t.charCodeAt(0):t instanceof Array?t.map(r.prototype.unchar):void 0},r.prototype.hex=function(t,e){if(e=void 0===e||null===e?e=8:e,t instanceof Array)return t.map(function(t){return r.prototype.hex(t,e)});if("number"==typeof t){t<0&&(t=4294967295+t+1);for(var i=Number(t).toString(16).toUpperCase();i.length=e&&(i=i.substring(i.length-e,i.length)),i}},r.prototype.unhex=function(t){return t instanceof Array?t.map(r.prototype.unhex):parseInt("0x"+t,16)},e.exports=r},{"../core/main":24}],62:[function(t,e,i){"use strict";function r(t,e,i){var r=t<0,n=r?t.toString().substring(1):t.toString(),o=n.indexOf("."),s=-1!==o?n.substring(0,o):n,a=-1!==o?n.substring(o+1):"",h=r?"-":"";if(void 0!==i){var l="";(-1!==o||i-a.length>0)&&(l="."),a.length>i&&(a=a.substring(0,i));for(var u=0;ur.length)for(var o=e-(r+=-1===i?".":"").length+1,s=0;s0?"+"+t.toString():t.toString()}function s(t){return parseFloat(t)>0?" "+t.toString():t.toString()}var a=t("../core/main");t("../core/error_helpers"),a.prototype.join=function(t,e){return a._validateParameters("join",arguments),t.join(e)},a.prototype.match=function(t,e){return a._validateParameters("match",arguments),t.match(e)},a.prototype.matchAll=function(t,e){a._validateParameters("matchAll",arguments);for(var i=new RegExp(e,"g"),r=i.exec(t),n=[];null!==r;)n.push(r),r=i.exec(t);return n},a.prototype.nf=function(t,e,i){return a._validateParameters("nf",arguments),t instanceof Array?t.map(function(t){return r(t,e,i)}):"[object Arguments]"===Object.prototype.toString.call(t)?3===t.length?this.nf(t[0],t[1],t[2]):2===t.length?this.nf(t[0],t[1]):this.nf(t[0]):r(t,e,i)},a.prototype.nfc=function(t,e){return a._validateParameters("nfc",arguments),t instanceof Array?t.map(function(t){return n(t,e)}):n(t,e)},a.prototype.nfp=function(){a._validateParameters("nfp",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(o):o(t)},a.prototype.nfs=function(){a._validateParameters("nfs",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(s):s(t)},a.prototype.split=function(t,e){return a._validateParameters("split",arguments),t.split(e)},a.prototype.splitTokens=function(t,e){var i;if(a._validateParameters("splitTokens",arguments),void 0!==e){var r=e,n=/\]/g.exec(r),o=/\[/g.exec(r);o&&n?(r=r.slice(0,n.index)+r.slice(n.index+1),o=/\[/g.exec(r),r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("[\\["+r+"\\]]","g")):n?(r=r.slice(0,n.index)+r.slice(n.index+1),i=new RegExp("["+r+"\\]]","g")):o?(r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("["+r+"\\[]","g")):i=new RegExp("["+r+"]","g")}else i=/\s/g;return t.split(i).filter(function(t){return t})},a.prototype.trim=function(t){return a._validateParameters("trim",arguments),t instanceof Array?t.map(this.trim):t.trim()},e.exports=a},{"../core/error_helpers":20,"../core/main":24}],63:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.day=function(){return(new Date).getDate()},r.prototype.hour=function(){return(new Date).getHours()},r.prototype.minute=function(){return(new Date).getMinutes()},r.prototype.millis=function(){return window.performance.now()},r.prototype.month=function(){return(new Date).getMonth()+1},r.prototype.second=function(){return(new Date).getSeconds()},r.prototype.year=function(){return(new Date).getFullYear()},e.exports=r},{"../core/main":24}],64:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry");var n=t("../core/constants");r.prototype.plane=function(t,e,i,n){this._assert3d("plane"),r._validateParameters("plane",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=1),void 0===n&&(n=1);var o="plane|"+i+"|"+n;if(!this._renderer.geometryInHash(o)){var s=new r.Geometry(i,n,function(){for(var t,e,i,n=0;n<=this.detailY;n++){e=n/this.detailY;for(var o=0;o<=this.detailX;o++)t=o/this.detailX,i=new r.Vector(t-.5,e-.5,0),this.vertices.push(i),this.uvs.push(t,e)}});s.computeFaces().computeNormals(),i<=1&&n<=1?s._makeTriangleEdges()._edgesToVertices():console.log("Cannot draw stroke on plane objects with more than 1 detailX or 1 detailY"),this._renderer.createBuffers(o,s)}return this._renderer.drawBuffersScaled(o,t,e,1),this},r.prototype.box=function(t,e,i,n,o){this._assert3d("box"),r._validateParameters("box",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=e);var s=this._renderer.attributes&&this._renderer.attributes.perPixelLighting;void 0===n&&(n=s?1:4),void 0===o&&(o=s?1:4);var a="box|"+n+"|"+o;if(!this._renderer.geometryInHash(a)){var h=new r.Geometry(n,o,function(){var t=[[0,4,2,6],[1,3,5,7],[0,1,4,5],[2,6,3,7],[0,2,1,3],[4,5,6,7]];this.strokeIndices=[[0,1],[1,3],[3,2],[6,7],[8,9],[9,11],[14,15],[16,17],[17,19],[18,19],[20,21],[22,23]];for(var e=0;eo?(_=i,g=1,v=e):v=t+(e-t)*g,-2!==h&&h!==o+2||(v=0),_-=i/2,m[h]=0===v?1:n,l=0;lo?0:Math.sin(2*b*Math.PI)*Math.cos(y),h<0?-1:h>o?1:Math.sin(y),h<0||h>o?0:Math.cos(2*b*Math.PI)*Math.cos(y))),this.uvs.push(b,g)}}var S=0;if(s){for(u=0;u=n.TWO_PI?(e="ellipse")+"|"+p+"|":(e="arc")+"|"+l+"|"+u+"|"+c+"|"+p+"|",!this.geometryInHash(i)){var d=new r.Geometry(p,1,function(){if(this.strokeIndices=[],l.toFixed(10)!==u.toFixed(10)){c!==n.PIE&&void 0!==c||(this.vertices.push(new r.Vector(.5,.5,0)),this.uvs.push([.5,.5]));for(var t=0;t<=p;t++){var e=t/p,i=(u-l)*e+l,o=.5+Math.cos(i)/2,s=.5+Math.sin(i)/2;this.vertices.push(new r.Vector(o,s,0)),this.uvs.push([o,s]),t0&&h>0&&(this.strokeIndices=[[0,a],[a,(a+1)*(h+1)-1],[(a+1)*(h+1)-1,(a+1)*h],[(a+1)*h,0]])});u.computeFaces().computeNormals()._makeTriangleEdges()._edgesToVertices(),this.createBuffers(l,u)}var c=this.uMVMatrix.copy();try{this.uMVMatrix.translate([i,n,0]),this.uMVMatrix.scale(o,s,1),this.drawBuffers(l)}finally{this.uMVMatrix=c}return this},r.RendererGL.prototype.quad=function(t,e,i,n,o,s,a,h){var l="quad|"+t+"|"+e+"|"+i+"|"+n+"|"+o+"|"+s+"|"+a+"|"+h;if(!this.geometryInHash(l)){var u=new r.Geometry(2,2,function(){this.vertices.push(new r.Vector(t,e,0)),this.vertices.push(new r.Vector(i,n,0)),this.vertices.push(new r.Vector(o,s,0)),this.vertices.push(new r.Vector(a,h,0)),this.uvs.push(0,0,1,0,1,1,0,1),this.strokeIndices=[[0,1],[1,2],[2,3],[3,0]]});u.computeNormals()._makeTriangleEdges()._edgesToVertices(),u.faces=[[0,1,2],[2,3,0]],this.createBuffers(l,u)}return this.drawBuffers(l),this},r.RendererGL.prototype.bezier=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._bezierDetail||20;this.beginShape();for(var d=0;d<=p;d++){var f=Math.pow(1-d/p,3),m=d/p*3*Math.pow(1-d/p,2),y=3*Math.pow(d/p,2)*(1-d/p),v=Math.pow(d/p,3);this.vertex(t*f+r*m+s*y+l*v,e*f+n*m+a*y+u*v,i*f+o*m+h*y+c*v)}return this.endShape(),this},r.RendererGL.prototype.curve=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._curveDetail;this.beginShape();for(var d=0;d<=p;d++){var f=.5*Math.pow(d/p,3),m=.5*Math.pow(d/p,2),y=d/p*.5,v=f*(3*r-t-3*s+l)+m*(2*t-5*r+4*s-l)+y*(-t+s)+2*r*.5,g=f*(3*n-e-3*a+u)+m*(2*e-5*n+4*a-u)+y*(-e+a)+2*n*.5,_=f*(3*o-i-3*h+c)+m*(2*i-5*o+4*h-c)+y*(-i+h)+2*o*.5;this.vertex(v,g,_)}return this.endShape(),this},r.RendererGL.prototype.line=function(){return 6===arguments.length?(this.beginShape(),this.vertex(arguments[0],arguments[1],arguments[2]),this.vertex(arguments[3],arguments[4],arguments[5]),this.endShape()):4===arguments.length&&(this.beginShape(),this.vertex(arguments[0],arguments[1],0),this.vertex(arguments[2],arguments[3],0),this.endShape()),this},r.RendererGL.prototype.bezierVertex=function(){if(0===this.immediateMode._bezierVertex.length)throw Error("vertex() must be used once before calling bezierVertex()");var t,e,i,r,n,o=[],s=[],a=[],h=arguments.length;if(t=0,0===this._lookUpTableBezier.length||this._lutBezierDetail!==this._pInst._curveDetail){this._lookUpTableBezier=[],this._lutBezierDetail=this._pInst._curveDetail;for(var l=1/this._lutBezierDetail,u=0,c=1,p=0;u<1;){if(t=parseFloat(u.toFixed(6)),this._lookUpTableBezier[p]=this._bezierCoefficients(t),c.toFixed(6)===l.toFixed(6)){t=parseFloat(c.toFixed(6))+parseFloat(u.toFixed(6)),++p,this._lookUpTableBezier[p]=this._bezierCoefficients(t);break}u+=l,c-=l,++p}}var d=this._lookUpTableBezier.length;if(6===h){for(this.isBezier=!0,o=[this.immediateMode._bezierVertex[0],arguments[0],arguments[2],arguments[4]],s=[this.immediateMode._bezierVertex[1],arguments[1],arguments[3],arguments[5]],n=0;n0&&this.mouseY0){var i=this._renderer._curCamera;void 0===t&&(t=1),void 0===e&&(e=t),!0!==this.contextMenuDisabled&&(this.canvas.oncontextmenu=function(){return!1},this._setProperty("contextMenuDisabled",!0)),!0!==this.wheelDefaultDisabled&&(this.canvas.onwheel=function(){return!1},this._setProperty("wheelDefaultDisabled",!0));var n=this.height0?this._renderer._curCamera._orbit(0,0,.5*n):this._renderer._curCamera._orbit(0,0,-.5*n)),this.mouseIsPressed)if(this.mouseButton===this.LEFT){var o=-t*(this.mouseX-this.pmouseX)/n,s=e*(this.mouseY-this.pmouseY)/n;this._renderer._curCamera._orbit(o,s,0)}else if(this.mouseButton===this.RIGHT){var a=i._getLocalAxes(),h=Math.sqrt(a.x[0]*a.x[0]+a.x[2]*a.x[2]);0!==h&&(a.x[0]/=h,a.x[2]/=h);var l=Math.sqrt(a.y[0]*a.y[0]+a.y[2]*a.y[2]);0!==l&&(a.y[0]/=l,a.y[2]/=l);var u=-1*t*(this.mouseX-this.pmouseX),c=-1*e*(this.mouseY-this.pmouseY);i.setPosition(i.eyeX+u*a.x[0]+c*a.z[0],i.eyeY,i.eyeZ+u*a.x[2]+c*a.z[2])}return this}},r.prototype.debugMode=function(){this._assert3d("debugMode"),r._validateParameters("debugMode",arguments);for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1);arguments[0]===n.GRID?this.registerMethod("post",this._grid.call(this,arguments[1],arguments[2],arguments[3],arguments[4],arguments[5])):arguments[0]===n.AXES?this.registerMethod("post",this._axesIcon.call(this,arguments[1],arguments[2],arguments[3],arguments[4])):(this.registerMethod("post",this._grid.call(this,arguments[0],arguments[1],arguments[2],arguments[3],arguments[4])),this.registerMethod("post",this._axesIcon.call(this,arguments[5],arguments[6],arguments[7],arguments[8])))},r.prototype.noDebugMode=function(){this._assert3d("noDebugMode");for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1)},r.prototype._grid=function(t,e,i,r,n){void 0===t&&(t=this.width/2),void 0===e&&(e=Math.round(t/30)<4?4:Math.round(t/30)),void 0===i&&(i=0),void 0===r&&(r=0),void 0===n&&(n=0);var o=t/e,s=t/2;return function(){this.push(),this.stroke(255*this._renderer.curStrokeColor[0],255*this._renderer.curStrokeColor[1],255*this._renderer.curStrokeColor[2]),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]);for(var t=0;t<=e;t++)this.beginShape(this.LINES),this.vertex(-s+i,r,t*o-s+n),this.vertex(+s+i,r,t*o-s+n),this.endShape();for(var a=0;a<=e;a++)this.beginShape(this.LINES),this.vertex(a*o-s+i,r,-s+n),this.vertex(a*o-s+i,r,+s+n),this.endShape();this.pop()}},r.prototype._axesIcon=function(t,e,i,r){return void 0===t&&(t=this.width/20>40?this.width/20:40),void 0===e&&(e=-this.width/4),void 0===i&&(i=e),void 0===r&&(r=e),function(){this.push(),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]),this.strokeWeight(2),this.stroke(255,0,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e+t,i,r),this.endShape(),this.stroke(0,255,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i+t,r),this.endShape(),this.stroke(0,0,255),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i,r+t),this.endShape(),this.pop()}},e.exports=r},{"../core/constants":18,"../core/main":24}],66:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.ambientLight=function(t,e,i,n){this._assert3d("ambientLight"),r._validateParameters("ambientLight",arguments);var o=this.color.apply(this,arguments),s=this._renderer._useLightShader();return s.setUniform("uUseLighting",!0),s.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.ambientLightColors.push(o._array[0],o._array[1],o._array[2]),s.setUniform("uAmbientColor",this._renderer.ambientLightColors),s.setUniform("uAmbientLightCount",this._renderer.ambientLightColors.length/3),this},r.prototype.directionalLight=function(t,e,i,n,o,s){this._assert3d("directionalLight"),r._validateParameters("directionalLight",arguments);var a,h=this._renderer._useLightShader();a=t instanceof r.Color?t:this.color(t,e,i);var l,u,c,p=arguments[arguments.length-1];"number"==typeof p?(l=arguments[arguments.length-3],u=arguments[arguments.length-2],c=arguments[arguments.length-1]):(l=p.x,u=p.y,c=p.z),h.setUniform("uUseLighting",!0),h.setUniform("uMaterialColor",this._renderer.curFillColor);var d=Math.sqrt(l*l+u*u+c*c);return this._renderer.directionalLightDirections.push(l/d,u/d,c/d),h.setUniform("uLightingDirection",this._renderer.directionalLightDirections),this._renderer.directionalLightColors.push(a._array[0],a._array[1],a._array[2]),h.setUniform("uDirectionalColor",this._renderer.directionalLightColors),h.setUniform("uDirectionalLightCount",this._renderer.directionalLightColors.length/3),this},r.prototype.pointLight=function(t,e,i,n,o,s){var a;this._assert3d("pointLight"),r._validateParameters("pointLight",arguments),a=t instanceof r.Color?t:this.color(t,e,i);var h,l,u,c=arguments[arguments.length-1];"number"==typeof c?(h=arguments[arguments.length-3],l=arguments[arguments.length-2],u=arguments[arguments.length-1]):(h=c.x,l=c.y,u=c.z);var p=this._renderer._useLightShader();return p.setUniform("uUseLighting",!0),p.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.pointLightPositions.push(h,l,u),p.setUniform("uPointLightLocation",this._renderer.pointLightPositions),this._renderer.pointLightColors.push(a._array[0],a._array[1],a._array[2]),p.setUniform("uPointLightColor",this._renderer.pointLightColors),p.setUniform("uPointLightCount",this._renderer.pointLightColors.length/3),this},e.exports=r},{"../core/main":24}],67:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry"),r.prototype.loadModel=function(t){var e,i,n;r._validateParameters("loadModel",arguments),"boolean"==typeof arguments[1]?(e=arguments[1],i=arguments[2],n=arguments[3]):(e=!1,i=arguments[1],n=arguments[2]);var o=new r.Geometry;o.gid=t+"|"+e;var s=this;return this.loadStrings(t,function(t){(function(t,e){for(var i={v:[],vt:[],vn:[]},n={},o=0;o0)if("v"===s[0]||"vn"===s[0]){var a=new r.Vector(parseFloat(s[1]),parseFloat(s[2]),parseFloat(s[3]));i[s[0]].push(a)}else if("vt"===s[0]){var h=[parseFloat(s[1]),parseFloat(s[2])];i[s[0]].push(h)}else if("f"===s[0])for(var l=3;l0&&(this._renderer.geometryInHash(t.gid)||(t._makeTriangleEdges()._edgesToVertices(),this._renderer.createBuffers(t.gid,t)),this._renderer.drawBuffers(t.gid))},e.exports=r},{"../core/main":24,"./p5.Geometry":70}],68:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Texture"),r.prototype.loadShader=function(t,e){r._validateParameters("loadShader",arguments);var i=new r.Shader,n=this,o=!1,s=!1;return this.loadStrings(e,function(t){i._fragSrc=t.join("\n"),o=!0,s&&n._decrementPreload()}),this.loadStrings(t,function(t){i._vertSrc=t.join("\n"),s=!0,o&&n._decrementPreload()}),i},r.prototype.createShader=function(t,e){return this._assert3d("createShader"),r._validateParameters("createShader",arguments),new r.Shader(this._renderer,t,e)},r.prototype.shader=function(t){return this._assert3d("shader"),r._validateParameters("shader",arguments),void 0===t._renderer&&(t._renderer=this._renderer),t.isStrokeShader()?this._renderer.setStrokeShader(t):this._renderer.setFillShader(t),this},r.prototype.normalMaterial=function(){return this._assert3d("normalMaterial"),r._validateParameters("normalMaterial",arguments),this._renderer.drawMode=n.FILL,this._renderer.setFillShader(this._renderer._getNormalShader()),this._renderer.curFillColor=[1,1,1,1],this.noStroke(),this},r.prototype.texture=function(t){this._assert3d("texture"),r._validateParameters("texture",arguments),this._renderer.drawMode=n.TEXTURE;var e=this._renderer._useLightShader();return e.setUniform("uSpecular",!1),e.setUniform("isTexture",!0),e.setUniform("uSampler",t),this.noStroke(),this},r.prototype.ambientMaterial=function(t,e,i,n){this._assert3d("ambientMaterial"),r._validateParameters("ambientMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!1),s.setUniform("isTexture",!1),this},r.prototype.specularMaterial=function(t,e,i,n){this._assert3d("specularMaterial"),r._validateParameters("specularMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!0),s.setUniform("isTexture",!1),this},r.RendererGL.prototype._applyColorBlend=function(t){var e=this.GL,i=this.drawMode===n.TEXTURE;return i||t[t.length-1]<1?(e.depthMask(i),e.enable(e.BLEND),e.blendEquation(e.FUNC_ADD),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA)):(e.depthMask(!0),e.disable(e.BLEND)),t},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Texture":76}],69:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.camera=function(){return this._assert3d("camera"),r._validateParameters("camera",arguments),this._renderer._curCamera.camera.apply(this._renderer._curCamera,arguments),this},r.prototype.perspective=function(){return this._assert3d("perspective"),r._validateParameters("perspective",arguments),this._renderer._curCamera.perspective.apply(this._renderer._curCamera,arguments),this},r.prototype.ortho=function(){return this._assert3d("ortho"),r._validateParameters("ortho",arguments),this._renderer._curCamera.ortho.apply(this._renderer._curCamera,arguments),this},r.prototype.createCamera=function(){this._assert3d("createCamera");var t=new r.Camera(this._renderer);return t._computeCameraDefaultSettings(),t._setDefaultCamera(),this._renderer._curCamera=t,t},r.Camera=function(t){this._renderer=t,this.cameraType="default",this.cameraMatrix=new r.Matrix,this.projMatrix=new r.Matrix},r.Camera.prototype.perspective=function(t,e,i,n){void 0===t?(t=this.defaultCameraFOV,this.cameraFOV=t):this.cameraFOV=this._renderer._pInst._toRadians(t),void 0===e&&(e=this.defaultAspectRatio),void 0===i&&(i=this.defaultCameraNear),void 0===n&&(n=this.defaultCameraFar),i<=1e-4&&(i=.01,console.log("Avoid perspective near plane values close to or below 0. Setting value to 0.01.")),nMath.PI?h=Math.PI:h<=0&&(h=.001);var l=Math.sin(h)*s*Math.sin(a),u=Math.cos(h)*s,c=Math.sin(h)*s*Math.cos(a);this.camera(l+this.centerX,u+this.centerY,c+this.centerZ,this.centerX,this.centerY,this.centerZ,0,1,0)},r.Camera.prototype._isActive=function(){return this===this._renderer._curCamera},r.prototype.setCamera=function(t){this._renderer._curCamera=t,this._renderer.uPMatrix.set(t.projMatrix.mat4[0],t.projMatrix.mat4[1],t.projMatrix.mat4[2],t.projMatrix.mat4[3],t.projMatrix.mat4[4],t.projMatrix.mat4[5],t.projMatrix.mat4[6],t.projMatrix.mat4[7],t.projMatrix.mat4[8],t.projMatrix.mat4[9],t.projMatrix.mat4[10],t.projMatrix.mat4[11],t.projMatrix.mat4[12],t.projMatrix.mat4[13],t.projMatrix.mat4[14],t.projMatrix.mat4[15])},e.exports=r.Camera},{"../core/main":24}],70:[function(t,e,i){"use strict";var r=t("../core/main");r.Geometry=function(t,e,i){return this.vertices=[],this.lineVertices=[],this.lineNormals=[],this.vertexNormals=[],this.faces=[],this.uvs=[],this.edges=[],this.detailX=void 0!==t?t:1,this.detailY=void 0!==e?e:1,i instanceof Function&&i.call(this),this},r.Geometry.prototype.computeFaces=function(){this.faces.length=0;for(var t,e,i,r,n=this.detailX+1,o=0;o1&&(u=1),h.mult(Math.asin(u)/l))},r.Geometry.prototype.computeNormals=function(){var t,e=this.vertexNormals,i=this.vertices,n=this.faces;for(e.length=0,t=0;tthis.vertices.length-1-this.detailX;e--)t.add(this.vertexNormals[e]);for(t=r.Vector.div(t,this.detailX),e=this.vertices.length-1;e>this.vertices.length-1-this.detailX;e--)this.vertexNormals[e]=t;return this},r.Geometry.prototype._makeTriangleEdges=function(){if(this.edges.length=0,Array.isArray(this.strokeIndices))for(var t=0,e=this.strokeIndices.length;t0){for(var t=this.vertices[0].copy(),e=this.vertices[0].copy(),i=0;i1){if(this._useImmediateModeShader(),this._doStroke&&this.drawMode!==n.TEXTURE){for(var h=0;h1e3){var e=Object.keys(this.gHash)[0];delete this.gHash[e],n--}this.gHash[t]={}},r.RendererGL.prototype._freeBuffers=function(t){var e=this.gHash[t];if(e){delete this.gHash[t],n--;var i=this.GL;e.vertexBuffer&&i.deleteBuffer(e.vertexBuffer),e.normalBuffer&&i.deleteBuffer(e.normalBuffer),e.lineNormalBuffer&&i.deleteBuffer(e.lineNormalBuffer),e.uvBuffer&&i.deleteBuffer(e.uvBuffer),e.indexBuffer&&i.deleteBuffer(e.indexBuffer),e.lineVertexBuffer&&i.deleteBuffer(e.lineVertexBuffer)}},r.RendererGL.prototype.createBuffers=function(t,e){var i=this.GL;this._initBufferDefaults(t);var r=this.gHash[t];return r.numberOfItems=3*e.faces.length,r.lineVertexCount=e.lineVertices.length,this._useColorShader(),this.curStrokeShader.attributes.aPosition&&(r.lineVertexBuffer=i.createBuffer(),this._bindBuffer(r.lineVertexBuffer,i.ARRAY_BUFFER,this._flatten(e.lineVertices),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),this.curStrokeShader.attributes.aDirection&&(r.lineNormalBuffer=i.createBuffer(),this._bindBuffer(r.lineNormalBuffer,i.ARRAY_BUFFER,this._flatten(e.lineNormals),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aPosition&&(r.vertexBuffer=i.createBuffer(),this._bindBuffer(r.vertexBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertices),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),r.indexBuffer=i.createBuffer(),this._bindBuffer(r.indexBuffer,i.ELEMENT_ARRAY_BUFFER,this._flatten(e.faces),Uint16Array,i.STATIC_DRAW),this.curFillShader.attributes.aNormal&&(r.normalBuffer=i.createBuffer(),this._bindBuffer(r.normalBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertexNormals),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aTexCoord&&(r.uvBuffer=i.createBuffer(),this._bindBuffer(r.uvBuffer,i.ARRAY_BUFFER,this._flatten(e.uvs),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,i.FLOAT,!1,0,0)),r},r.RendererGL.prototype.drawBuffers=function(t){var e=this.GL;this._useColorShader();var i=this.gHash[t];return this._doStroke&&i.lineVertexCount>0&&(this.curStrokeShader.bindShader(),i.lineVertexBuffer&&(this._bindBuffer(i.lineVertexBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.lineNormalBuffer&&(this._bindBuffer(i.lineNormalBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curStrokeColor),this._drawArrays(e.TRIANGLES,t),this.curStrokeShader.unbindShader()),!1!==this._doFill&&(this.curFillShader.bindShader(),i.vertexBuffer&&(this._bindBuffer(i.vertexBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.indexBuffer&&this._bindBuffer(i.indexBuffer,e.ELEMENT_ARRAY_BUFFER),i.normalBuffer&&(this._bindBuffer(i.normalBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,e.FLOAT,!1,0,0)),i.uvBuffer&&(this._bindBuffer(i.uvBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curFillColor),this._drawElements(e.TRIANGLES,t),this.curFillShader.unbindShader()),this},r.RendererGL.prototype.drawBuffersScaled=function(t,e,i,r){var n=this.uMVMatrix.copy();try{this.uMVMatrix.scale(e,i,r),this.drawBuffers(t)}finally{this.uMVMatrix=n}},r.RendererGL.prototype._drawArrays=function(t,e){return this.GL.drawArrays(t,0,this.gHash[e].lineVertexCount),this._pInst._pixelsDirty=!0,this},r.RendererGL.prototype._drawElements=function(t,e){this.GL.drawElements(t,this.gHash[e].numberOfItems,this.GL.UNSIGNED_SHORT,0),this._pInst._pixelsDirty=!0},r.RendererGL.prototype._drawPoints=function(t,e){var i=this.GL;this._bindBuffer(e,i.ARRAY_BUFFER,this._vToNArray(t),Float32Array,i.STATIC_DRAW),this.curPointShader.enableAttrib(this.curPointShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0),i.drawArrays(i.Points,0,t.length)},e.exports=r.RendererGL},{"../core/main":24}],74:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("libtess");t("./p5.Shader"),t("./p5.Camera"),t("../core/p5.Renderer"),t("./p5.Matrix");var s={immediateVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uResolution;\nuniform float uPointSize;\n\nvarying vec4 vColor;\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n gl_PointSize = uPointSize;\n}\n",vertexColorVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n}\n",vertexColorFrag:"precision mediump float;\nvarying vec4 vColor;\nvoid main(void) {\n gl_FragColor = vColor;\n}",normalVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\n\nvarying vec3 vVertexNormal;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vVertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertTexCoord = aTexCoord;\n}\n",normalFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nvoid main(void) {\n gl_FragColor = vec4(vVertexNormal, 1.0);\n}",basicFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nuniform vec4 uMaterialColor;\nvoid main(void) {\n gl_FragColor = uMaterialColor;\n}",lightVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uViewMatrix;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nuniform vec3 uAmbientColor[8];\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nvarying vec3 vVertexNormal;\nvarying vec2 vVertTexCoord;\nvarying vec3 vLightWeighting;\n\nvoid main(void){\n\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\n vec3 vertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertexNormal = vertexNormal;\n vVertTexCoord = aTexCoord;\n\n vec4 mvPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n vec3 eyeDirection = normalize(-mvPosition.xyz);\n\n float shininess = 32.0;\n float specularFactor = 2.0;\n float diffuseFactor = 0.3;\n\n vec3 ambientLightFactor = vec3(0.0);\n\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n ambientLightFactor += uAmbientColor[i];\n }\n\n\n vec3 directionalLightFactor = vec3(0.0);\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n vec3 dir = uLightingDirection[j];\n float directionalLightWeighting = max(dot(vertexNormal, -dir), 0.0);\n directionalLightFactor += uDirectionalColor[j] * directionalLightWeighting;\n }\n\n\n vec3 pointLightFactor = vec3(0.0);\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n vec3 loc = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightDirection = normalize(loc - mvPosition.xyz);\n\n float directionalLightWeighting = max(dot(vertexNormal, lightDirection), 0.0);\n\n float specularLightWeighting = 0.0;\n if (uSpecular ){\n vec3 reflectionDirection = reflect(-lightDirection, vertexNormal);\n specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess);\n }\n\n pointLightFactor += uPointLightColor[k] * (specularFactor * specularLightWeighting\n + directionalLightWeighting * diffuseFactor);\n }\n\n vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightFactor;\n}\n",lightTextureFrag:"precision mediump float;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nvarying vec3 vLightWeighting;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n gl_FragColor = isTexture ? texture2D(uSampler, vVertTexCoord) : uMaterialColor;\n if (uUseLighting)\n gl_FragColor.rgb *= vLightWeighting;\n}",phongVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform vec3 uAmbientColor[8];\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvoid main(void){\n\n vec4 viewModelPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n\n // Pass varyings to fragment shader\n vViewPosition = viewModelPosition.xyz;\n gl_Position = uProjectionMatrix * viewModelPosition; \n\n vNormal = normalize(uNormalMatrix * normalize(aNormal));\n vTexCoord = aTexCoord;\n\n vAmbientColor = vec3(0.0);\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n vAmbientColor += uAmbientColor[i];\n }\n}\n",phongFrag:"precision mediump float;\n\n//uniform mat4 uModelViewMatrix;\nuniform mat4 uViewMatrix;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvec3 V;\nvec3 N;\n\nconst float shininess = 32.0;\nconst float specularFactor = 2.0;\nconst float diffuseFactor = 0.73;\n\nstruct LightResult {\n\tfloat specular;\n\tfloat diffuse;\n};\n\nfloat phongSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float shininess) {\n\n vec3 R = normalize(reflect(-lightDirection, surfaceNormal)); \n return pow(max(0.0, dot(R, viewDirection)), shininess);\n}\n\nfloat lambertDiffuse(\n vec3 lightDirection,\n vec3 surfaceNormal) {\n return max(0.0, dot(-lightDirection, surfaceNormal));\n}\n\nLightResult light(vec3 lightVector) {\n\n vec3 L = normalize(lightVector);\n\n //compute our diffuse & specular terms\n LightResult lr;\n if (uSpecular)\n lr.specular = phongSpecular(L, V, N, shininess);\n lr.diffuse = lambertDiffuse(L, N);\n return lr;\n}\n\nvoid main(void) {\n\n V = normalize(vViewPosition);\n N = vNormal;\n\n vec3 diffuse = vec3(0.0);\n float specular = 0.0;\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n\n LightResult result = light(uLightingDirection[j]);\n diffuse += result.diffuse * uDirectionalColor[j];\n specular += result.specular;\n }\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n\n vec3 lightPosition = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightVector = vViewPosition - lightPosition;\n\t\n //calculate attenuation\n float lightDistance = length(lightVector);\n float falloff = 500.0 / (lightDistance + 500.0);\n\n LightResult result = light(lightVector);\n diffuse += result.diffuse * falloff * uPointLightColor[k];\n specular += result.specular * falloff;\n }\n\n gl_FragColor = isTexture ? texture2D(uSampler, vTexCoord) : uMaterialColor;\n gl_FragColor.rgb = gl_FragColor.rgb * (diffuse * diffuseFactor + vAmbientColor) + specular * specularFactor;\n}",fontVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nuniform vec4 uGlyphRect;\nuniform float uGlyphOffset;\n\nvarying vec2 vTexCoord;\nvarying float w;\n\nvoid main() {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n\n // scale by the size of the glyph's rectangle\n positionVec4.xy *= uGlyphRect.zw - uGlyphRect.xy;\n\n // move to the corner of the glyph\n positionVec4.xy += uGlyphRect.xy;\n\n // move to the letter's line offset\n positionVec4.x += uGlyphOffset;\n \n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vTexCoord = aTexCoord;\n w = gl_Position.w;\n}\n",fontFrag:"#extension GL_OES_standard_derivatives : enable\nprecision mediump float;\n\n#if 0\n // simulate integer math using floats\n\t#define int float\n\t#define ivec2 vec2\n\t#define INT(x) float(x)\n\n\tint ifloor(float v) { return floor(v); }\n\tivec2 ifloor(vec2 v) { return floor(v); }\n\n#else\n // use native integer math\n\tprecision mediump int;\n\t#define INT(x) x\n\n\tint ifloor(float v) { return int(v); }\n\tint ifloor(int v) { return v; }\n\tivec2 ifloor(vec2 v) { return ivec2(v); }\n\n#endif\n\nuniform sampler2D uSamplerStrokes;\nuniform sampler2D uSamplerRowStrokes;\nuniform sampler2D uSamplerRows;\nuniform sampler2D uSamplerColStrokes;\nuniform sampler2D uSamplerCols;\n\nuniform ivec2 uStrokeImageSize;\nuniform ivec2 uCellsImageSize;\nuniform ivec2 uGridImageSize;\n\nuniform ivec2 uGridOffset;\nuniform ivec2 uGridSize;\nuniform vec4 uMaterialColor;\n\nvarying vec2 vTexCoord;\n\n// some helper functions\nint round(float v) { return ifloor(v + 0.5); }\nivec2 round(vec2 v) { return ifloor(v + 0.5); }\nfloat saturate(float v) { return clamp(v, 0.0, 1.0); }\nvec2 saturate(vec2 v) { return clamp(v, 0.0, 1.0); }\n\nint mul(float v1, int v2) {\n return ifloor(v1 * float(v2));\n}\n\nivec2 mul(vec2 v1, ivec2 v2) {\n return ifloor(v1 * vec2(v2) + 0.5);\n}\n\n// unpack a 16-bit integer from a float vec2\nint getInt16(vec2 v) {\n ivec2 iv = round(v * 255.0);\n return iv.x * INT(128) + iv.y;\n}\n\nvec2 pixelScale;\nvec2 coverage = vec2(0.0);\nvec2 weight = vec2(0.5);\nconst float minDistance = 1.0/8192.0;\nconst float hardness = 1.05; // amount of antialias\n\n// the maximum number of curves in a glyph\nconst int N = INT(250);\n\n// retrieves an indexed pixel from a sampler\nvec4 getTexel(sampler2D sampler, int pos, ivec2 size) {\n int width = size.x;\n int y = ifloor(pos / width);\n int x = pos - y * width; // pos % width\n\n return texture2D(sampler, (vec2(x, y) + 0.5) / vec2(size));\n}\n\nvoid calulateCrossings(vec2 p0, vec2 p1, vec2 p2, out vec2 C1, out vec2 C2) {\n\n // get the coefficients of the quadratic in t\n vec2 a = p0 - p1 * 2.0 + p2;\n vec2 b = p0 - p1;\n vec2 c = p0 - vTexCoord;\n\n // found out which values of 't' it crosses the axes\n vec2 surd = sqrt(max(vec2(0.0), b * b - a * c));\n vec2 t1 = ((b - surd) / a).yx;\n vec2 t2 = ((b + surd) / a).yx;\n\n // approximate straight lines to avoid rounding errors\n if (abs(a.y) < 0.001)\n t1.x = t2.x = c.y / (2.0 * b.y);\n\n if (abs(a.x) < 0.001)\n t1.y = t2.y = c.x / (2.0 * b.x);\n\n // plug into quadratic formula to find the corrdinates of the crossings\n C1 = ((a * t1 - b * 2.0) * t1 + c) * pixelScale;\n C2 = ((a * t2 - b * 2.0) * t2 + c) * pixelScale;\n}\n\nvoid coverageX(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n // determine on which side of the x-axis the points lie\n bool y0 = p0.y > vTexCoord.y;\n bool y1 = p1.y > vTexCoord.y;\n bool y2 = p2.y > vTexCoord.y;\n\n // could web be under the curve (after t1)?\n if (y1 ? !y2 : y0) {\n // add the coverage for t1\n coverage.x += saturate(C1.x + 0.5);\n // calculate the anti-aliasing for t1\n weight.x = min(weight.x, abs(C1.x));\n }\n\n // are we outside the curve (after t2)?\n if (y1 ? !y0 : y2) {\n // subtract the coverage for t2\n coverage.x -= saturate(C2.x + 0.5);\n // calculate the anti-aliasing for t2\n weight.x = min(weight.x, abs(C2.x));\n }\n}\n\n// this is essentially the same as coverageX, but with the axes swapped\nvoid coverageY(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n bool x0 = p0.x > vTexCoord.x;\n bool x1 = p1.x > vTexCoord.x;\n bool x2 = p2.x > vTexCoord.x;\n\n if (x1 ? !x2 : x0) {\n coverage.y -= saturate(C1.y + 0.5);\n weight.y = min(weight.y, abs(C1.y));\n }\n\n if (x1 ? !x0 : x2) {\n coverage.y += saturate(C2.y + 0.5);\n weight.y = min(weight.y, abs(C2.y));\n }\n}\n\nvoid main() {\n\n // calculate the pixel scale based on screen-coordinates\n pixelScale = hardness / fwidth(vTexCoord);\n\n // which grid cell is this pixel in?\n ivec2 gridCoord = ifloor(vTexCoord * vec2(uGridSize));\n\n // intersect curves in this row\n {\n // the index into the row info bitmap\n int rowIndex = gridCoord.y + uGridOffset.y;\n // fetch the info texel\n vec4 rowInfo = getTexel(uSamplerRows, rowIndex, uGridImageSize);\n // unpack the rowInfo\n int rowStrokeIndex = getInt16(rowInfo.xy);\n int rowStrokeCount = getInt16(rowInfo.zw);\n\n for (int iRowStroke = INT(0); iRowStroke < N; iRowStroke++) {\n if (iRowStroke >= rowStrokeCount)\n break;\n\n // each stroke is made up of 3 points: the start and control point\n // and the start of the next curve.\n // fetch the indices of this pair of strokes:\n vec4 strokeIndices = getTexel(uSamplerRowStrokes, rowStrokeIndex++, uCellsImageSize);\n\n // unpack the stroke index\n int strokePos = getInt16(strokeIndices.xy);\n\n // fetch the two strokes\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n\n // calculate the coverage\n coverageX(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n // intersect curves in this column\n {\n int colIndex = gridCoord.x + uGridOffset.x;\n vec4 colInfo = getTexel(uSamplerCols, colIndex, uGridImageSize);\n int colStrokeIndex = getInt16(colInfo.xy);\n int colStrokeCount = getInt16(colInfo.zw);\n \n for (int iColStroke = INT(0); iColStroke < N; iColStroke++) {\n if (iColStroke >= colStrokeCount)\n break;\n\n vec4 strokeIndices = getTexel(uSamplerColStrokes, colStrokeIndex++, uCellsImageSize);\n\n int strokePos = getInt16(strokeIndices.xy);\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n coverageY(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n weight = saturate(1.0 - weight * 2.0);\n float distance = max(weight.x + weight.y, minDistance); // manhattan approx.\n float antialias = abs(dot(coverage, weight) / distance);\n float cover = min(abs(coverage.x), abs(coverage.y));\n gl_FragColor = uMaterialColor;\n gl_FragColor.a *= saturate(max(antialias, cover));\n}",lineVert:"/*\n Part of the Processing project - http://processing.org\n Copyright (c) 2012-15 The Processing Foundation\n Copyright (c) 2004-12 Ben Fry and Casey Reas\n Copyright (c) 2001-04 Massachusetts Institute of Technology\n This library is free software; you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, version 2.1.\n This library is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General\n Public License along with this library; if not, write to the\n Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n Boston, MA 02111-1307 USA\n*/\n\n#define PROCESSING_LINE_SHADER\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uStrokeWeight;\n\nuniform vec4 uViewport;\n\n// using a scale <1 moves the lines towards the camera\n// in order to prevent popping effects due to half of\n// the line disappearing behind the geometry faces.\nvec3 scale = vec3(0.9995);\n\nattribute vec4 aPosition;\nattribute vec4 aDirection;\n \nvoid main() {\n vec4 posp = uModelViewMatrix * aPosition;\n vec4 posq = uModelViewMatrix * (aPosition + vec4(aDirection.xyz, 0));\n\n // Moving vertices slightly toward the camera\n // to avoid depth-fighting with the fill triangles.\n // Discussed here:\n // http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=252848 \n posp.xyz = posp.xyz * scale;\n posq.xyz = posq.xyz * scale;\n\n vec4 p = uProjectionMatrix * posp;\n vec4 q = uProjectionMatrix * posq;\n\n // formula to convert from clip space (range -1..1) to screen space (range 0..[width or height])\n // screen_p = (p.xy/p.w + <1,1>) * 0.5 * uViewport.zw\n\n // prevent division by W by transforming the tangent formula (div by 0 causes\n // the line to disappear, see https://github.com/processing/processing/issues/5183)\n // t = screen_q - screen_p\n //\n // tangent is normalized and we don't care which aDirection it points to (+-)\n // t = +- normalize( screen_q - screen_p )\n // t = +- normalize( (q.xy/q.w+<1,1>)*0.5*uViewport.zw - (p.xy/p.w+<1,1>)*0.5*uViewport.zw )\n //\n // extract common factor, <1,1> - <1,1> cancels out\n // t = +- normalize( (q.xy/q.w - p.xy/p.w) * 0.5 * uViewport.zw )\n //\n // convert to common divisor\n // t = +- normalize( ((q.xy*p.w - p.xy*q.w) / (p.w*q.w)) * 0.5 * uViewport.zw )\n //\n // remove the common scalar divisor/factor, not needed due to normalize and +-\n // (keep uViewport - can't remove because it has different components for x and y\n // and corrects for aspect ratio, see https://github.com/processing/processing/issues/5181)\n // t = +- normalize( (q.xy*p.w - p.xy*q.w) * uViewport.zw )\n\n vec2 tangent = normalize((q.xy*p.w - p.xy*q.w) * uViewport.zw);\n\n // flip tangent to normal (it's already normalized)\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n float thickness = aDirection.w * uStrokeWeight;\n vec2 offset = normal * thickness / 2.0;\n\n // Perspective ---\n // convert from world to clip by multiplying with projection scaling factor\n // to get the right thickness (see https://github.com/processing/processing/issues/5182)\n // invert Y, projections in Processing invert Y\n vec2 perspScale = (uProjectionMatrix * vec4(1, -1, 0, 0)).xy;\n\n // No Perspective ---\n // multiply by W (to cancel out division by W later in the pipeline) and\n // convert from screen to clip (derived from clip to screen above)\n vec2 noPerspScale = p.w / (0.5 * uViewport.zw);\n\n //gl_Position.xy = p.xy + offset.xy * mix(noPerspScale, perspScale, float(perspective > 0));\n gl_Position.xy = p.xy + offset.xy * perspScale;\n gl_Position.zw = p.zw;\n}\n",lineFrag:"precision mediump float;\nprecision mediump int;\n\nuniform vec4 uMaterialColor;\n\nvoid main() {\n gl_FragColor = uMaterialColor;\n}",pointVert:"attribute vec3 aPosition;\nuniform float uPointSize;\nvarying float vStrokeWeight;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvoid main() {\n\tvec4 positionVec4 = vec4(aPosition, 1.0);\n\tgl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\tgl_PointSize = uPointSize;\n\tvStrokeWeight = uPointSize;\n}",pointFrag:"precision mediump float;\nprecision mediump int;\nuniform vec4 uMaterialColor;\nvarying float vStrokeWeight;\n\nvoid main(){\n\tfloat mask = 0.0;\n\n\t// make a circular mask using the gl_PointCoord (goes from 0 - 1 on a point)\n // might be able to get a nicer edge on big strokeweights with smoothstep but slightly less performant\n\n\tmask = step(0.98, length(gl_PointCoord * 2.0 - 1.0));\n\n\t// if strokeWeight is 1 or less lets just draw a square\n\t// this prevents weird artifacting from carving circles when our points are really small\n\t// if strokeWeight is larger than 1, we just use it as is\n\n\tmask = mix(0.0, mask, clamp(floor(vStrokeWeight - 0.5),0.0,1.0));\n\n\t// throw away the borders of the mask\n // otherwise we get weird alpha blending issues\n\n\tif(mask > 0.98){\n discard;\n \t}\n\n \tgl_FragColor = vec4(uMaterialColor.rgb * (1.0 - mask), uMaterialColor.a) ;\n}"};r.RendererGL=function(t,e,i,n){return r.Renderer.call(this,t,e,i),this.attributes={},n=n||{},this.attributes.alpha=void 0===n.alpha||n.alpha,this.attributes.depth=void 0===n.depth||n.depth,this.attributes.stencil=void 0===n.stencil||n.stencil,this.attributes.antialias=void 0!==n.antialias&&n.antialias,this.attributes.premultipliedAlpha=void 0!==n.premultipliedAlpha&&n.premultipliedAlpha,this.attributes.preserveDrawingBuffer=void 0===n.preserveDrawingBuffer||n.preserveDrawingBuffer,this.attributes.perPixelLighting=void 0!==n.perPixelLighting&&n.perPixelLighting,this._initContext(),this.isP3D=!0,this.GL=this.drawingContext,this.ambientLightColors=[],this.directionalLightDirections=[],this.directionalLightColors=[],this.pointLightPositions=[],this.pointLightColors=[],this.uMVMatrix=new r.Matrix,this.uPMatrix=new r.Matrix,this.uNMatrix=new r.Matrix("mat3"),this._curCamera=new r.Camera(this),this._curCamera._computeCameraDefaultSettings(),this._curCamera._setDefaultCamera(),this.gHash={},this._defaultLightShader=void 0,this._defaultImmediateModeShader=void 0,this._defaultNormalShader=void 0,this._defaultColorShader=void 0,this._defaultPointShader=void 0,this.curFillShader=void 0,this.curStrokeShader=void 0,this.curPointShader=void 0,this._useColorShader(),this.setStrokeShader(this._getLineShader()),this._usePointShader(),this._pointVertexBuffer=this.GL.createBuffer(),this.isImmediateDrawing=!1,this.immediateMode={},this.fill(255,255,255,255),this.pointSize=5,this.strokeWeight(1),this.stroke(0,0,0),this.textures=[],this._curveTightness=6,this._lookUpTableBezier=[],this._lookUpTableQuadratic=[],this._lutBezierDetail=0,this._lutQuadraticDetail=0,this._tessy=this._initTessy(),this.fontInfos={},this},r.RendererGL.prototype=Object.create(r.Renderer.prototype),r.RendererGL.prototype._initContext=function(){try{if(this.drawingContext=this.canvas.getContext("webgl",this.attributes)||this.canvas.getContext("experimental-webgl",this.attributes),null===this.drawingContext)throw new Error("Error creating webgl context");console.log("p5.RendererGL: enabled webgl context");var t=this.drawingContext;t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),this._viewport=this.drawingContext.getParameter(this.drawingContext.VIEWPORT)}catch(t){throw t}},r.RendererGL.prototype._resetContext=function(t,e,i){var n=this.width,o=this.height,s=this.canvas.id,a=this.canvas;a&&a.parentNode.removeChild(a),(a=document.createElement("canvas")).id=s,this._pInst._userNode?this._pInst._userNode.appendChild(a):document.body.appendChild(a),this._pInst.canvas=a;var h=new r.RendererGL(this._pInst.canvas,this._pInst,!0,t);this._pInst._setProperty("_renderer",h),h.resize(n,o),h._applyDefaults(),this._pInst._elements.push(h),"function"==typeof i&&setTimeout(function(){i.apply(window._renderer,e)},0)},r.prototype.setAttributes=function(t,e){var i;this._assert3d("setAttributes"),void 0!==e?(i={})[t]=e:t instanceof Object&&(i=t),this.push(),this._renderer._resetContext(i),this.pop()},r.RendererGL.prototype._update=function(){this.uMVMatrix.set(this._curCamera.cameraMatrix.mat4[0],this._curCamera.cameraMatrix.mat4[1],this._curCamera.cameraMatrix.mat4[2],this._curCamera.cameraMatrix.mat4[3],this._curCamera.cameraMatrix.mat4[4],this._curCamera.cameraMatrix.mat4[5],this._curCamera.cameraMatrix.mat4[6],this._curCamera.cameraMatrix.mat4[7],this._curCamera.cameraMatrix.mat4[8],this._curCamera.cameraMatrix.mat4[9],this._curCamera.cameraMatrix.mat4[10],this._curCamera.cameraMatrix.mat4[11],this._curCamera.cameraMatrix.mat4[12],this._curCamera.cameraMatrix.mat4[13],this._curCamera.cameraMatrix.mat4[14],this._curCamera.cameraMatrix.mat4[15]),this.ambientLightColors.length=0,this.directionalLightDirections.length=0,this.directionalLightColors.length=0,this.pointLightPositions.length=0,this.pointLightColors.length=0},r.RendererGL.prototype.background=function(){var t=this._pInst.color.apply(this._pInst,arguments),e=t.levels[0]/255,i=t.levels[1]/255,r=t.levels[2]/255,n=t.levels[3]/255;this.GL.clearColor(e,i,r,n),this.GL.depthMask(!0),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.fill=function(t,e,i,o){var s=r.prototype.color.apply(this._pInst,arguments);this.curFillColor=s._array,this.isImmediateDrawing?this.setFillShader(this._getImmediateModeShader()):this.setFillShader(this._getColorShader()),this.drawMode=n.FILL,this.curFillShader.setUniform("uMaterialColor",this.curFillColor)},r.RendererGL.prototype.stroke=function(t,e,i,n){arguments[3]=255;var o=r.prototype.color.apply(this._pInst,arguments);this.curStrokeColor=o._array,this.curStrokeShader.setUniform("uMaterialColor",this.curStrokeColor),this.curPointShader.setUniform("uMaterialColor",o._array)},r.RendererGL.prototype.strokeWeight=function(t){this.curStrokeWeight!==t&&(this.pointSize=t,this.curStrokeWeight=t,this.curStrokeShader.setUniform("uStrokeWeight",t),this.curPointShader.setUniform("uPointSize",t))},r.RendererGL.prototype.get=function(t,e,i,n){return r.Renderer2D.prototype.get.apply(this,[t,e,i,n])},r.RendererGL.prototype.loadPixels=function(){if(!0===this.attributes.preserveDrawingBuffer){var t=this._pInst._pixelDensity,e=this.width,i=this.height;e*=t,i*=t,void 0===this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4)),this.GL.readPixels(0,0,e,i,this.GL.RGBA,this.GL.UNSIGNED_BYTE,this.pixels),this._pInst._setProperty("pixels",this.pixels)}else console.log("loadPixels only works in WebGL when preserveDrawingBuffer is true.")},r.RendererGL.prototype.geometryInHash=function(t){return void 0!==this.gHash[t]},r.RendererGL.prototype.resize=function(t,e){r.Renderer.prototype.resize.call(this,t,e),this.GL.viewport(0,0,this.GL.drawingBufferWidth,this.GL.drawingBufferHeight),this._viewport=this.GL.getParameter(this.GL.VIEWPORT),this._curCamera._resize(),void 0!==this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4))},r.RendererGL.prototype.clear=function(){var t=arguments[0]||0,e=arguments[1]||0,i=arguments[2]||0,r=arguments[3]||0;this.GL.clearColor(t,e,i,r),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.translate=function(t,e,i){return t instanceof r.Vector&&(i=t.z,e=t.y,t=t.x),this.uMVMatrix.translate([t,e,i]),this},r.RendererGL.prototype.scale=function(t,e,i){return this.uMVMatrix.scale(t,e,i),this},r.RendererGL.prototype.rotate=function(t,e){return void 0===e?this.rotateZ(t):(arguments[0]=this._pInst._fromRadians(t),r.Matrix.prototype.rotate.apply(this.uMVMatrix,arguments),this)},r.RendererGL.prototype.rotateX=function(t){return this.rotate(t,1,0,0),this},r.RendererGL.prototype.rotateY=function(t){return this.rotate(t,0,1,0),this},r.RendererGL.prototype.rotateZ=function(t){return this.rotate(t,0,0,1),this},r.RendererGL.prototype.push=function(){var t=r.Renderer.prototype.push.apply(this),e=t.properties;return e.uMVMatrix=this.uMVMatrix.copy(),e.uPMatrix=this.uPMatrix.copy(),e._curCamera=this._curCamera,this._curCamera=this._curCamera.copy(),t},r.RendererGL.prototype.resetMatrix=function(){return this.uMVMatrix=r.Matrix.identity(this._pInst),this},r.RendererGL.prototype.setFillShader=function(t){return this.curFillShader!==t&&(this.curFillShader=t,this.curFillShader.init()),this.curFillShader},r.RendererGL.prototype.setPointShader=function(t){return this.curPointShader!==t&&(this.curPointShader=t,this.curPointShader.init()),this.curPointShader},r.RendererGL.prototype.setStrokeShader=function(t){return this.curStrokeShader!==t&&(this.curStrokeShader=t,this.curStrokeShader.init()),this.curStrokeShader},r.RendererGL.prototype._useLightShader=function(){return this.curFillShader&&this.curFillShader.isLightShader()||this.setFillShader(this._getLightShader()),this.curFillShader},r.RendererGL.prototype._useColorShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultImmediateModeShader||this.setFillShader(this._getColorShader()),this.curFillShader},r.RendererGL.prototype._usePointShader=function(){return this.curPointShader||this.setPointShader(this._getPointShader()),this.curPointShader},r.RendererGL.prototype._useImmediateModeShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultColorShader||this.setFillShader(this._getImmediateModeShader()),this.curFillShader},r.RendererGL.prototype._getLightShader=function(){return this._defaultLightShader||(this.attributes.perPixelLighting?this._defaultLightShader=new r.Shader(this,s.phongVert,s.phongFrag):this._defaultLightShader=new r.Shader(this,s.lightVert,s.lightTextureFrag)),this._defaultLightShader},r.RendererGL.prototype._getImmediateModeShader=function(){return this._defaultImmediateModeShader||(this._defaultImmediateModeShader=new r.Shader(this,s.immediateVert,s.vertexColorFrag)),this._defaultImmediateModeShader},r.RendererGL.prototype._getNormalShader=function(){return this._defaultNormalShader||(this._defaultNormalShader=new r.Shader(this,s.normalVert,s.normalFrag)),this._defaultNormalShader},r.RendererGL.prototype._getColorShader=function(){return this._defaultColorShader||(this._defaultColorShader=new r.Shader(this,s.normalVert,s.basicFrag)),this._defaultColorShader},r.RendererGL.prototype._getPointShader=function(){return this._defaultPointShader||(this._defaultPointShader=new r.Shader(this,s.pointVert,s.pointFrag)),this._defaultPointShader},r.RendererGL.prototype._getLineShader=function(){return this._defaultLineShader||(this._defaultLineShader=new r.Shader(this,s.lineVert,s.lineFrag)),this._defaultLineShader},r.RendererGL.prototype._getFontShader=function(){return this._defaultFontShader||(this.GL.getExtension("OES_standard_derivatives"),this._defaultFontShader=new r.Shader(this,s.fontVert,s.fontFrag)),this._defaultFontShader},r.RendererGL.prototype._getEmptyTexture=function(){if(!this._emptyTexture){var t=new r.Image(1,1);t.set(0,0,255),this._emptyTexture=new r.Texture(this,t)}return this._emptyTexture},r.RendererGL.prototype.getTexture=function(t){for(var e=this.textures,i=0;i2e4){var e,i=Object.prototype.toString,r=[],n=t.slice();e=n.pop();do{"[object Array]"===i.call(e)?n.push.apply(n,e):r.push(e)}while(n.length&&void 0!==(e=n.pop()));return r.reverse(),r}return[].concat.apply([],t)},r.RendererGL.prototype._vToNArray=function(t){return this._flatten(t.map(function(t){return[t.x,t.y,t.z]}))},r.prototype._assert3d=function(t){if(!this._renderer.isP3D)throw new Error(t+"() is only supported in WEBGL mode. If you'd like to use 3D graphics and WebGL, see https://p5js.org/examples/form-3d-primitives.html for more information.")},r.RendererGL.prototype._initTessy=function(){var t=new o.GluTesselator;return t.gluTessCallback(o.gluEnum.GLU_TESS_VERTEX_DATA,function(t,e){e[e.length]=t[0],e[e.length]=t[1],e[e.length]=t[2]}),t.gluTessCallback(o.gluEnum.GLU_TESS_BEGIN,function(t){t!==o.primitiveType.GL_TRIANGLES&&console.log("expected TRIANGLES but got type: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_ERROR,function(t){console.log("error callback"),console.log("error number: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_COMBINE,function(t,e,i){return[t[0],t[1],t[2]]}),t.gluTessCallback(o.gluEnum.GLU_TESS_EDGE_FLAG,function(t){}),t},r.RendererGL.prototype._triangulate=function(t){this._tessy.gluTessNormal(0,0,1);var e=[];this._tessy.gluTessBeginPolygon(e);for(var i=0;i1&&(s=s.substring(0,s.indexOf("[0]"))),o.name=s,o.type=n.type,o.type===t.SAMPLER_2D&&(o.samplerIndex=i,i++,this.samplers.push(o)),this.uniforms[s]=o}this._loadedUniforms=!0}},r.Shader.prototype.compile=function(){},r.Shader.prototype.bindShader=function(){this.init(),this._bound||(this.useProgram(),this._bound=!0,this.bindTextures(),this._setMatrixUniforms(),this===this._renderer.curStrokeShader&&this._setViewportUniform())},r.Shader.prototype.unbindShader=function(){return this._bound&&(this.unbindTextures(),this._bound=!1),this},r.Shader.prototype.bindTextures=function(){for(var t=this._renderer.GL,e=0;e1?e.length&&n.uniform1iv(r,e):n.uniform1i(r,e);break;case n.FLOAT:i.size>1?e.length&&n.uniform1fv(r,e):n.uniform1f(r,e);break;case n.FLOAT_MAT3:n.uniformMatrix3fv(r,!1,e);break;case n.FLOAT_MAT4:n.uniformMatrix4fv(r,!1,e);break;case n.FLOAT_VEC2:i.size>1?e.length&&n.uniform2fv(r,e):n.uniform2f(r,e[0],e[1]);break;case n.FLOAT_VEC3:i.size>1?e.length&&n.uniform3fv(r,e):n.uniform3f(r,e[0],e[1],e[2]);break;case n.FLOAT_VEC4:i.size>1?e.length&&n.uniform4fv(r,e):n.uniform4f(r,e[0],e[1],e[2],e[3]);break;case n.INT_VEC2:i.size>1?e.length&&n.uniform2iv(r,e):n.uniform2i(r,e[0],e[1]);break;case n.INT_VEC3:i.size>1?e.length&&n.uniform3iv(r,e):n.uniform3i(r,e[0],e[1],e[2]);break;case n.INT_VEC4:i.size>1?e.length&&n.uniform4iv(r,e):n.uniform4i(r,e[0],e[1],e[2],e[3]);break;case n.SAMPLER_2D:n.activeTexture(n.TEXTURE0+i.samplerIndex),i.texture=this._renderer.getTexture(e),n.uniform1i(i.location,i.samplerIndex)}return this}},r.Shader.prototype.isLightShader=function(){return void 0!==this.uniforms.uUseLighting||void 0!==this.uniforms.uAmbientLightCount||void 0!==this.uniforms.uDirectionalLightCount||void 0!==this.uniforms.uPointLightCount||void 0!==this.uniforms.uAmbientColor||void 0!==this.uniforms.uDirectionalColor||void 0!==this.uniforms.uPointLightLocation||void 0!==this.uniforms.uPointLightColor||void 0!==this.uniforms.uLightingDirection||void 0!==this.uniforms.uSpecular},r.Shader.prototype.isTextureShader=function(){return this.samplerIndex>0},r.Shader.prototype.isColorShader=function(){return void 0!==this.attributes.aVertexColor||void 0!==this.uniforms.uMaterialColor},r.Shader.prototype.isTexLightShader=function(){return this.isLightShader()&&this.isTextureShader()},r.Shader.prototype.isStrokeShader=function(){return void 0!==this.uniforms.uStrokeWeight},r.Shader.prototype.enableAttrib=function(t,e,i,r,n,o){var s=this._renderer.GL;return-1!==t&&(s.enableVertexAttribArray(t),s.vertexAttribPointer(t,e,i,r,n,o)),this},e.exports=r.Shader},{"../core/main":24}],76:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.Texture=function(t,e){this._renderer=t;var i=this._renderer.GL;this.src=e,this.glTex=void 0,this.glTarget=i.TEXTURE_2D,this.glFormat=i.RGBA,this.mipmaps=!1,this.glMinFilter=i.LINEAR,this.glMagFilter=i.LINEAR,this.glWrapS=i.CLAMP_TO_EDGE,this.glWrapT=i.CLAMP_TO_EDGE,this.isSrcMediaElement=void 0!==r.MediaElement&&e instanceof r.MediaElement,this._videoPrevUpdateTime=0,this.isSrcHTMLElement=void 0!==r.Element&&e instanceof r.Element&&!(e instanceof r.Graphics),this.isSrcP5Image=e instanceof r.Image,this.isSrcP5Graphics=e instanceof r.Graphics,this.isImageData="undefined"!=typeof ImageData&&e instanceof ImageData;var n=this._getTextureDataFromSource();return this.width=n.width,this.height=n.height,this.init(n),this},r.Texture.prototype._getTextureDataFromSource=function(){var t;return this.isSrcP5Image?t=this.src.canvas:this.isSrcMediaElement||this.isSrcP5Graphics||this.isSrcHTMLElement?t=this.src.elt:this.isImageData&&(t=this.src),t},r.Texture.prototype.init=function(t){var e=this._renderer.GL;if(this.glTex=e.createTexture(),this.bindTexture(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,this.glMagFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,this.glMinFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,this.glWrapS),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,this.glWrapT),0===this.width||0===this.height||this.isSrcMediaElement&&!this.src.loadedmetadata){var i=new Uint8Array([1,1,1,1]);e.texImage2D(this.glTarget,0,e.RGBA,1,1,0,this.glFormat,e.UNSIGNED_BYTE,i)}else e.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,e.UNSIGNED_BYTE,t)},r.Texture.prototype.update=function(){var t=this.src;if(0===t.width||0===t.height)return!1;var e=this._getTextureDataFromSource(),i=!1,r=this._renderer.GL;return e.width!==this.width||e.height!==this.height?(i=!0,this.width=e.width,this.height=e.height,this.isSrcP5Image?t.setModified(!1):(this.isSrcMediaElement||this.isSrcHTMLElement)&&t.setModified(!0)):this.isSrcP5Image?t.isModified()&&(i=!0,t.setModified(!1)):this.isSrcMediaElement?t.isModified()?(i=!0,t.setModified(!1)):t.loadedmetadata&&this._videoPrevUpdateTime!==t.time()&&(this._videoPrevUpdateTime=t.time(),i=!0):this.isImageData?t._dirty&&(t._dirty=!1,i=!0):i=!0,i&&(this.bindTexture(),r.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,r.UNSIGNED_BYTE,e)),i},r.Texture.prototype.bindTexture=function(){return this._renderer.GL.bindTexture(this.glTarget,this.glTex),this},r.Texture.prototype.unbindTexture=function(){this._renderer.GL.bindTexture(this.glTarget,null)},r.Texture.prototype.setInterpolation=function(t,e){var i=this._renderer.GL;t===n.NEAREST?this.glMinFilter=i.NEAREST:this.glMinFilter=i.LINEAR,e===n.NEAREST?this.glMagFilter=i.NEAREST:this.glMagFilter=i.LINEAR,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,this.glMinFilter),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,this.glMagFilter),this.unbindTexture()},r.Texture.prototype.setWrapMode=function(t,e){var i=this._renderer.GL,r=function(t){return 0==(t&t-1)},o=r(this.width),s=r(this.width);t===n.REPEAT?o&&s?this.glWrapS=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):t===n.MIRROR?o&&s?this.glWrapS=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):this.glWrapS=i.CLAMP_TO_EDGE,e===n.REPEAT?o&&s?this.glWrapT=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):e===n.MIRROR?o&&s?this.glWrapT=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):this.glWrapT=i.CLAMP_TO_EDGE,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,this.glWrapS),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,this.glWrapT),this.unbindTexture()},e.exports=r.Texture},{"../core/constants":18,"../core/main":24}],77:[function(t,e,i){"use strict";function r(t,e){this.width=t,this.height=e,this.infos=[],this.findImage=function(t){var e=this.width*this.height;if(t>e)throw new Error("font is too complex to render in 3D");for(var i,r,n=this.infos.length-1;n>=0;--n){var o=this.infos[n];if(o.index+t0;){var n=t[r];e>n&&(e=n),ii?i:t}(255*t,0,255)}function r(t,e,i,r,n,s,a,h){for(var u=new function t(e,i,r,n){this.p0=e,this.c0=i,this.c1=r,this.p1=n,this.toQuadratic=function(){return{x:this.p0.x,y:this.p0.y,x1:this.p1.x,y1:this.p1.y,cx:(3*(this.c0.x+this.c1.x)-(this.p0.x+this.p1.x))/4,cy:(3*(this.c0.y+this.c1.y)-(this.p0.y+this.p1.y))/4}},this.quadError=function(){return o.Vector.sub(o.Vector.sub(this.p1,this.p0),o.Vector.mult(o.Vector.sub(this.c1,this.c0),3)).mag()/2},this.split=function(e){var i=o.Vector.lerp(this.p0,this.c0,e),r=o.Vector.lerp(this.c0,this.c1,e),n=o.Vector.lerp(i,r,e);this.c1=o.Vector.lerp(this.c1,this.p1,e),this.c0=o.Vector.lerp(r,this.c1,e);var s=o.Vector.lerp(n,this.c0,e),a=new t(this.p0,i,n,s);return this.p0=s,a},this.splitInflections=function(){var t=o.Vector.sub(this.c0,this.p0),e=o.Vector.sub(o.Vector.sub(this.c1,this.c0),t),i=o.Vector.sub(o.Vector.sub(o.Vector.sub(this.p1,this.c1),t),o.Vector.mult(e,2)),r=[],n=e.x*i.y-e.y*i.x;if(0!==n){var s=t.x*i.y-t.y*i.x,a=t.x*e.y-t.y*e.x,h=s*s-4*n*a;if(h>=0){n<0&&(n=-n,s=-s,a=-a);var l=Math.sqrt(h),u=(-s-l)/(2*n),c=(-s+l)/(2*n);u>0&&u<1&&(r.push(this.split(u)),c=1-(1-c)/(1-u)),c>0&&c<1&&r.push(this.split(c))}}return r.push(this),r}}(new o.Vector(t,e),new o.Vector(i,r),new o.Vector(n,s),new o.Vector(a,h)).splitInflections(),c=[],p=30/l,d=0;d=.125);){var v=Math.pow(f,1/3),g=m.split(v),_=m.split(1-v/(1-v));c.push(g),y.push(m),m=_}f<1&&c.push(m.split(.5)),c.push(m),Array.prototype.push.apply(c,y.reverse())}return c}function s(t,i,r,n){e([t,r],[i,n],{x:t,y:i,cx:(t+r)/2,cy:(i+n)/2})}function u(t,e,i,r){return Math.abs(i-t)<1e-5&&Math.abs(r-e)<1e-5}function c(t,e,i){for(var r=t.length,o=e.findImage(r),s=o.index,a=0,h=0;h>7,127&d,p>>7,127&p);for(var f=0;f>7,127&m,0,0)}}return{cellImageInfo:l,dimOffset:s,dimImageInfo:o}}var p=this.glyphInfos[t.index];if(p)return p;var d=t.getBoundingBox(),f=d.x1,m=d.y1,y=d.x2-f,v=d.y2-m,g=t.path.commands;if(0===y||0===v||!g.length)return this.glyphInfos[t.index]={};var _,b=[],S=[],x=[];for(_=a-1;_>=0;--_)x.push([]);for(_=h-1;_>=0;--_)S.push([]);for(var w,T,A,M,P=0;P=n)&&this._doFill){if(!this._isOpenType())return console.log("WEBGL: only opentype fonts are supported"),t;t.push();var l=this.curFillShader,c=this._doStroke,p=this.drawMode;this.curFillShader=null,this._doStroke=!1,this.drawMode=s.TEXTURE;var d=this._textFont.font,f=this._textFont._fontInfo;f||(f=this._textFont._fontInfo=new u(d));var m=this._textFont._handleAlignment(this,e,i,r),y=this._textSize,v=y/d.unitsPerEm;this.translate(m.x,m.y,0),this.scale(v,v,1);var g=this.GL,_=!this._defaultFontShader,b=this.setFillShader(this._getFontShader());_&&(b.setUniform("uGridImageSize",[64,64]),b.setUniform("uCellsImageSize",[64,64]),b.setUniform("uStrokeImageSize",[64,64]),b.setUniform("uGridSize",[a,h])),this._applyColorBlend(this.curFillColor);var S=this.gHash.glyph;if(!S){var x=this._textGeom=new o.Geometry(1,1,function(){for(var t=0;t<=1;t++)for(var e=0;e<=1;e++)this.vertices.push(new o.Vector(e,t,0)),this.uvs.push(e,t)});x.computeFaces().computeNormals(),S=this.createBuffers("glyph",x)}this._bindBuffer(S.vertexBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aPosition.location,3,g.FLOAT,!1,0,0),this._bindBuffer(S.indexBuffer,g.ELEMENT_ARRAY_BUFFER),this._bindBuffer(S.uvBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aTexCoord.location,2,g.FLOAT,!1,0,0),b.setUniform("uMaterialColor",this.curFillColor);try{for(var w=0,T=null,A=!1,M=d.stringToGlyphs(e),P=0;P{let e,i=0,r=[28,31,33,35,37,40,40,43,45,47,49,52,52,55,57,61,62,64,64,67,69,73,74,76,76,79,81,83,85,88,88,91,93,95,97,100,100,103,105,107,97,112];t.preload=(()=>{e=new s.a.Sampler({A0:"A0.[mp3|ogg]",C1:"C1.[mp3|ogg]","D#1":"Ds1.[mp3|ogg]","F#1":"Fs1.[mp3|ogg]",A1:"A1.[mp3|ogg]",C2:"C2.[mp3|ogg]","D#2":"Ds2.[mp3|ogg]","F#2":"Fs2.[mp3|ogg]",A2:"A2.[mp3|ogg]",C3:"C3.[mp3|ogg]","D#3":"Ds3.[mp3|ogg]","F#3":"Fs3.[mp3|ogg]",A3:"A3.[mp3|ogg]",C4:"C4.[mp3|ogg]","D#4":"Ds4.[mp3|ogg]","F#4":"Fs4.[mp3|ogg]",A4:"A4.[mp3|ogg]",C5:"C5.[mp3|ogg]","D#5":"Ds5.[mp3|ogg]","F#5":"Fs5.[mp3|ogg]",A5:"A5.[mp3|ogg]",C6:"C6.[mp3|ogg]","D#6":"Ds6.[mp3|ogg]","F#6":"Fs6.[mp3|ogg]",A6:"A6.[mp3|ogg]",C7:"C7.[mp3|ogg]","D#7":"Ds7.[mp3|ogg]","F#7":"Fs7.[mp3|ogg]",A7:"A7.[mp3|ogg]",C8:"C8.[mp3|ogg]"},{release:1,baseUrl:"./sounds/"}).toMaster()});let n,o=0,a=!1,h=0;t.setup=(()=>{t.createCanvas(800,800,t.WEBGL)});let l=0,u=0;t.draw=(()=>{t.camera(0,0,800,0,0,0,0,1,0),t.background(0),t.stroke(255,100),t.line(0,-3e3,0,1e3),t.translate(-t.width/2,t.height/4,0),t.rotateX(t.PI),i+=.6;for(let e=0;e<20;e++)for(let r=0;r<200;r++){let s=t.noise(.03*(i+r),.03*(-i+e),.03*e);t.noStroke(),t.fill(250*s),100==r&&(t.fill(255,0,0),0==e&&(n=s),19==e&&(o=s)),t.push(),t.translate(4*r,400*s),t.sphere(1),t.pop()}if(h-=100,t.push(),t.translate(400,400*n),t.fill(255,0,0,h),t.sphere(5),t.pop(),t.push(),t.translate(400,400*o),t.sphere(5),t.pop(),a){let i=t.floor(t.millis()/300);if(l!=i){t.random(2)>.5&&(h=255,e.triggerAttackRelease(s.a.Midi(r[t.ceil(42*n)]+6).toFrequency(),"132n"),e.triggerAttackRelease(s.a.Midi(r[t.ceil(42*o)]+6).toFrequency(),"132n"))}l=i;let a=t.floor(t.millis()/400);if(u!=a){t.random(2)>.6&&(h=255,e.triggerAttackRelease(s.a.Midi(r[t.ceil(42*o)]+6).toFrequency(),"64n"))}u=a}}),t.keyPressed=(()=>{"m"==t.key&&t.save(Date.now()+".jpg"),a=!0})};e.default=a,new n.a(a)},function(t,e){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RvbmUvYnVpbGQvVG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcDUvbGliL3A1Lm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsIl9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fIiwidW5kZWZpbmVkIiwiVG9uZSIsIk1vZHVsZSIsImZ1bmMiLCJNYWluIiwidGhpcyIsIkVycm9yIiwidG9TdHJpbmciLCJjbGFzc05hbWUiLCJpc0xldHRlciIsIm1hdGNoIiwic2FtZUNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiLCJpc0Z1bmN0aW9uIiwiZGlzcG9zZSIsInNldCIsInBhcmFtcyIsInJhbXBUaW1lIiwiaXNPYmplY3QiLCJpc1N0cmluZyIsInRtcE9iaiIsInBhcmFtTG9vcCIsImF0dHIiLCJwYXJlbnQiLCJpbmRleE9mIiwiYXR0clNwbGl0Iiwic3BsaXQiLCJsZW5ndGgiLCJzcGxpY2UiLCJpbm5lclBhcmFtIiwiam9pbiIsInBhcmFtIiwiaXNVbmRlZiIsIlNpZ25hbCIsIlBhcmFtIiwicmFtcFRvIiwiQXVkaW9QYXJhbSIsIlRpbWVCYXNlIiwiX2NvbGxlY3REZWZhdWx0cyIsInJldCIsInN1YlJldCIsImoiLCJzdWJBdHRyIiwiaXNEZWZpbmVkIiwiY29uc3RyIiwiZGVmYXVsdHMiLCJrZXlzIiwiX3N1cGVyIiwic3VwZXJEZWZzIiwicHVzaCIsInZhbHVlcyIsIm9wdGlvbnMiLCJkZWZhdWx0QXJnIiwiZ2l2ZW4iLCJmYWxsYmFjayIsImdpdmVuUHJvcCIsImZhbGxiYWNrUHJvcCIsImNvbm5lY3RTZXJpZXMiLCJjdXJyZW50VW5pdCIsImFyZ3VtZW50cyIsInRvVW5pdCIsImNvbm5lY3QiLCJ2YWwiLCJpc051bWJlciIsImFyZyIsImlzQm9vbGVhbiIsImlzQXJyYXkiLCJBcnJheSIsImlzTm90ZSIsInRlc3QiLCJub09wIiwiX3JlYWRPbmx5Iiwid3JpdGFibGUiLCJfd3JpdGFibGUiLCJTdGF0ZSIsIlN0YXJ0ZWQiLCJTdG9wcGVkIiwiUGF1c2VkIiwiZXF1YWxQb3dlclNjYWxlIiwicGVyY2VudCIsInBpRmFjdG9yIiwiTWF0aCIsIlBJIiwic2luIiwiZGJUb0dhaW4iLCJkYiIsInBvdyIsImdhaW5Ub0RiIiwiZ2FpbiIsImxvZyIsIkxOMTAiLCJpbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8iLCJpbnRlcnZhbCIsIm5vdyIsImNvbnRleHQiLCJleHRlbmQiLCJjaGlsZCIsIlRlbXBDb25zdHJ1Y3RvciIsImF1ZGlvQ29udGV4dCIsIkNvbnRleHQiLCJlbWl0Iiwic2V0Q29udGV4dCIsImN0eCIsInNhbXBsZVJhdGUiLCJoYXNBdWRpb0NvbnRleHQiLCJ3aW5kb3ciLCJoYXNQcm9taXNlcyIsImhhc1dvcmtlcnMiLCJnZXRDb250ZXh0IiwicmVzb2x2ZSIsImluaXRpYWxpemVkIiwicmVzQ2FsbGJhY2siLCJvZmYiLCJvbiIsInZlcnNpb24iLCJFbWl0dGVyIiwiX2V2ZW50cyIsImV2ZW50IiwiY2FsbGJhY2siLCJldmVudHMiLCJldmVudE5hbWUiLCJvbmNlIiwiYm91bmRDYWxsYmFjayIsImFwcGx5IiwiZXYiLCJldmVudExpc3QiLCJhcmdzIiwic2xpY2UiLCJsZW4iLCJtaXhpbiIsImZ1bmN0aW9ucyIsImVtaXR0ZXJGdW5jIiwiVGltZWxpbmUiLCJfdGltZWxpbmUiLCJtZW1vcnkiLCJJbmZpbml0eSIsImFkZCIsInRpbWUiLCJ2YWx1ZU9mIiwiaW5kZXgiLCJfc2VhcmNoIiwiZGlmZiIsInJlbW92ZSIsImNvbXBhcmF0b3IiLCJwZWVrIiwic2hpZnQiLCJnZXRBZnRlciIsImdldEJlZm9yZSIsImNhbmNlbCIsImFmdGVyIiwiY2FuY2VsQmVmb3JlIiwicHJldmlvdXNFdmVudCIsImJlZ2lubmluZyIsImVuZCIsIm1pZFBvaW50IiwiZmxvb3IiLCJuZXh0RXZlbnQiLCJfaXRlcmF0ZSIsImxvd2VyQm91bmQiLCJ1cHBlckJvdW5kIiwiZm9yRWFjaCIsImZvckVhY2hCZWZvcmUiLCJmb3JFYWNoQWZ0ZXIiLCJmb3JFYWNoQmV0d2VlbiIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJmb3JFYWNoRnJvbSIsImZvckVhY2hBdFRpbWUiLCJzdXBwb3J0ZWQiLCJPZmZsaW5lQXVkaW9Db250ZXh0Iiwid2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dCIsInN0YXJ0UmVuZGVyaW5nIiwiUHJvbWlzZSIsIl9uYXRpdmVfc3RhcnRSZW5kZXJpbmciLCJkb25lIiwib25jb21wbGV0ZSIsImUiLCJyZW5kZXJlZEJ1ZmZlciIsIkF1ZGlvQ29udGV4dCIsIndlYmtpdEF1ZGlvQ29udGV4dCIsImNsb3NlIiwic3VzcGVuZCIsInJlc3VtZSIsImNyZWF0ZUdhaW4iLCJjcmVhdGVHYWluTm9kZSIsImNyZWF0ZURlbGF5IiwiY3JlYXRlRGVsYXlOb2RlIiwiZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSIsIm9mZmxpbmVDb250ZXh0IiwiYXVkaW9EYXRhIiwiVWludDMyQXJyYXkiLCJidWZmZXIiLCJkZWNvZGVBdWRpb0RhdGEiLCJfbmF0aXZlX2RlY29kZUF1ZGlvRGF0YSIsInN1Y2Nlc3MiLCJlcnJvciIsInByb3AiLCJfY29udGV4dCIsIl9kZWZpbmVQcm9wZXJ0eSIsIl9sYXRlbmN5SGludCIsImxhdGVuY3lIaW50IiwiX2NvbnN0YW50cyIsImxvb2tBaGVhZCIsIl9jb21wdXRlZFVwZGF0ZUludGVydmFsIiwiX3RpY2tlciIsIlRpY2tlciIsImNsb2NrU291cmNlIiwidXBkYXRlSW50ZXJ2YWwiLCJfdGltZW91dHMiLCJfdGltZW91dElkcyIsIl90aW1lb3V0TG9vcCIsImN1cnJlbnRUaW1lIiwicmVhZHkiLCJzdGF0ZSIsInRoZW4iLCJnZXRDb25zdGFudCIsImNyZWF0ZUJ1ZmZlciIsImFyciIsImdldENoYW5uZWxEYXRhIiwiY29uc3RhbnQiLCJjcmVhdGVCdWZmZXJTb3VyY2UiLCJjaGFubmVsQ291bnQiLCJjaGFubmVsQ291bnRNb2RlIiwibG9vcCIsInN0YXJ0Iiwic2V0VGltZW91dCIsImZuIiwidGltZW91dCIsImlkIiwiY2xlYXJUaW1lb3V0IiwidHlwZSIsImhpbnQiLCJjb24iLCJkaXNjb25uZWN0IiwiX3R5cGUiLCJfdXBkYXRlSW50ZXJ2YWwiLCJfY2FsbGJhY2siLCJfY3JlYXRlQ2xvY2siLCJUeXBlIiwiV29ya2VyIiwiVGltZW91dCIsIk9mZmxpbmUiLCJfY3JlYXRlV29ya2VyIiwiVVJMIiwid2Via2l0VVJMIiwiYmxvYiIsIkJsb2IiLCJ0b0ZpeGVkIiwiYmxvYlVybCIsImNyZWF0ZU9iamVjdFVSTCIsIndvcmtlciIsIm9ubWVzc2FnZSIsIl93b3JrZXIiLCJfY3JlYXRlVGltZW91dCIsIl90aW1lb3V0IiwibWF4IiwicG9zdE1lc3NhZ2UiLCJfZGlzcG9zZUNsb2NrIiwidGVybWluYXRlIiwibmF0aXZlQ29ubmVjdCIsIkF1ZGlvTm9kZSIsIm5hdGl2ZURpc2Nvbm5lY3QiLCJ0b25lQ29ubmVjdCIsIkIiLCJvdXROdW0iLCJpbk51bSIsImlucHV0IiwiVE9ORV9TSUxFTkNFX1ZFUlNJT05fTE9HR0lORyIsImNvbnNvbGUiLCJ3YXJuIiwiY3JlYXRlSW5zT3V0cyIsImlucHV0cyIsIm91dHB1dHMiLCJvdXRwdXQiLCJjaGFubmVsSW50ZXJwcmV0YXRpb24iLCJfb25Db25uZWN0IiwidW5pdCIsIm91dHB1dE51bSIsImlucHV0TnVtIiwiZGVzdGluYXRpb24iLCJjaGFpbiIsImZhbiIsIlNpZ25hbEJhc2UiLCJub2RlIiwib3V0cHV0TnVtYmVyIiwiaW5wdXROdW1iZXIiLCJfcGFyYW0iLCJjYW5jZWxTY2hlZHVsZWRWYWx1ZXMiLCJvdmVycmlkZGVuIiwidWEiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwiV2F2ZVNoYXBlck5vZGUiLCJfaW50ZXJuYWxOb2RlIiwiX25hdGl2ZV9jcmVhdGVXYXZlU2hhcGVyIiwiX2N1cnZlIiwiY3VydmUiLCJhcnJheSIsIkZsb2F0MzJBcnJheSIsImNyZWF0ZVdhdmVTaGFwZXIiLCJXYXZlU2hhcGVyIiwibWFwcGluZyIsImJ1ZmZlckxlbiIsIl9zaGFwZXIiLCJpc0Zpbml0ZSIsInNldE1hcCIsIm5vcm1hbGl6ZWQiLCJvdmVyc2FtcGxlIiwib3ZlcnNhbXBsaW5nIiwiUmFuZ2VFcnJvciIsInVuaXRzIiwiX3ZhbCIsIl91bml0cyIsInBhcnNlRmxvYXQiLCJjaGFyQXQiLCJfZGVmYXVsdFVuaXRzIiwidG9TZWNvbmRzIiwidG9UaWNrcyIsInRvRnJlcXVlbmN5IiwidG9NaWRpIiwiX2V4cHJlc3Npb25zIiwicmVnZXhwIiwibWV0aG9kIiwiZG90IiwicGFyc2VJbnQiLCJzY2FsYXIiLCJfYmVhdHNUb1VuaXRzIiwiX2dldFRpbWVTaWduYXR1cmUiLCJfdGlja3NUb1VuaXRzIiwiaHoiLCJfZnJlcXVlbmN5VG9Vbml0cyIsInRyIiwicSIsInRvdGFsIiwiX3NlY29uZHNUb1VuaXRzIiwic2FtcGxlcyIsImRlZmF1bHQiLCJfZ2V0QnBtIiwiVHJhbnNwb3J0IiwiYnBtIiwidGltZVNpZ25hdHVyZSIsIl9nZXRQUFEiLCJQUFEiLCJfbm93IiwiZnJlcSIsImJlYXRzIiwic2Vjb25kcyIsInRpY2tzIiwiX25vQXJnIiwidHJpbSIsImV4cHIiLCJtYXRjaGluZyIsInRvU2FtcGxlcyIsInRvTWlsbGlzZWNvbmRzIiwiRnJlcXVlbmN5IiwiYXNzaWduIiwibWlkaSIsIm10b2YiLCJub3RlIiwicGl0Y2giLCJvY3RhdmUiLCJub3RlTnVtYmVyIiwibm90ZVRvU2NhbGVJbmRleCIsInRyYW5zcG9zZSIsImhhcm1vbml6ZSIsImludGVydmFscyIsIm1hcCIsImZ0b20iLCJ0b05vdGUiLCJsb2cyIiwiQTQiLCJyb3VuZCIsInNjYWxlSW5kZXhUb05vdGUiLCJxdWFydGVyVGltZSIsInF1YXJ0ZXJzIiwiY2JiIiwiY2IiLCJjIyIsImN4IiwiZGJiIiwiZCMiLCJkeCIsImViYiIsImViIiwiZSMiLCJleCIsImZiYiIsImZiIiwiZiIsImYjIiwiZngiLCJnYmIiLCJnYiIsImciLCJnIyIsImd4IiwiYWJiIiwiYWIiLCJhIiwiYSMiLCJheCIsImJiYiIsImJiIiwiYiIsImIjIiwiYngiLCJmcmVxdWVuY3kiLCJUaW1lIiwicXVhbnRpemUiLCJjYXB0dXJlIiwicXVhbnRUbyIsIm5leHRTdWJkaXZpc2lvbiIsInN1YmRpdiIsInN1YmRpdmlzaW9uIiwidG9Ob3RhdGlvbiIsInRlc3ROb3RhdGlvbnMiLCJwb3dlciIsImNsb3Nlc3QiLCJjbG9zZXN0U2Vjb25kcyIsIm5vdGF0aW9uIiwibm90YXRpb25TZWNvbmRzIiwiYWJzIiwidG9CYXJzQmVhdHNTaXh0ZWVudGhzIiwibWVhc3VyZXMiLCJzaXh0ZWVudGhzIiwiVHJhbnNwb3J0VGltZSIsIkRlZmF1bHQiLCJUaWNrcyIsIk5vcm1hbFJhbmdlIiwiQXVkaW9SYW5nZSIsIkRlY2liZWxzIiwiSW50ZXJ2YWwiLCJCUE0iLCJQb3NpdGl2ZSIsIkdhaW4iLCJDZW50cyIsIkRlZ3JlZXMiLCJNSURJIiwiQmFyc0JlYXRzU2l4dGVlbnRocyIsIlNhbXBsZXMiLCJIZXJ0eiIsIk5vdGUiLCJNaWxsaXNlY29uZHMiLCJTZWNvbmRzIiwiTm90YXRpb24iLCJjb252ZXJ0IiwiX3RvVW5pdHMiLCJnZXRWYWx1ZUF0VGltZSIsIl9pbml0aWFsVmFsdWUiLCJfZnJvbVVuaXRzIiwic2V0VmFsdWVBdFRpbWUiLCJtaW5WYWx1ZSIsIm1heFZhbHVlIiwibWluIiwiX21pbk91dHB1dCIsIkF1dG9tYXRpb25UeXBlIiwiTGluZWFyIiwiRXhwb25lbnRpYWwiLCJUYXJnZXQiLCJTZXRWYWx1ZSIsImJlZm9yZSIsImluaXRpYWxWYWx1ZSIsImRlZmF1bHRWYWx1ZSIsInByZXZpb3VzVmFsIiwicHJldmlvdXMiLCJfZXhwb25lbnRpYWxBcHByb2FjaCIsIl9saW5lYXJJbnRlcnBvbGF0ZSIsIl9leHBvbmVudGlhbEludGVycG9sYXRlIiwic2V0UmFtcFBvaW50IiwiY3VycmVudFZhbCIsImNhbmNlbEFuZEhvbGRBdFRpbWUiLCJsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZSIsImV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUiLCJleHBvbmVudGlhbFJhbXBUbyIsImxpbmVhclJhbXBUbyIsInRhcmdldFJhbXBUbyIsImV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSIsInRpbWVDb25zdGFudCIsInNldFRhcmdldEF0VGltZSIsInNldFZhbHVlQ3VydmVBdFRpbWUiLCJkdXJhdGlvbiIsInNjYWxpbmciLCJzZWdUaW1lIiwidmFsdWVBdFRpbWUiLCJ0MCIsInYwIiwidjEiLCJleHAiLCJ0MSIsIk9mZmxpbmVDb250ZXh0IiwiY2hhbm5lbHMiLCJfZHVyYXRpb24iLCJfY3VycmVudFRpbWUiLCJyZW5kZXIiLCJibG9ja1RpbWUiLCJidWZmZXJTb3VyY2UiLCJfbmF0aXZlX3N0YXJ0IiwiX2dhaW5Ob2RlIiwiY3JlYXRlQ29uc3RhbnRTb3VyY2UiLCJDb25zdGFudFNvdXJjZU5vZGUiLCJfYnVmZmVyU291cmNlIiwiZ2Fpbk5vZGUiLCJfb3V0cHV0Iiwib2Zmc2V0Iiwic3RvcCIsIl9wcm94aWVzIiwiX3NvdXJjZVN0YXJ0ZWQiLCJfY29uc3RhbnRTb3VyY2UiLCJfaXNQYXJhbSIsIl9hcHBseUF1dG9tYXRpb25zIiwiX2Nvbm5lY3RQcm94aWVzIiwicHJveHkiLCJmcm9tIiwicHJldmlvdXNNZXRob2QiLCJzaWduYWwiLCJQb3ciLCJfZXhwIiwiX2V4cFNjYWxlciIsIl9leHBGdW5jIiwiRW52ZWxvcGUiLCJhdHRhY2siLCJkZWNheSIsInN1c3RhaW4iLCJyZWxlYXNlIiwiX2F0dGFja0N1cnZlIiwiX3JlbGVhc2VDdXJ2ZSIsIl9zaWciLCJhdHRhY2tDdXJ2ZSIsInJlbGVhc2VDdXJ2ZSIsIkluIiwiY3VydmVEZWYiLCJPdXQiLCJ0cmlnZ2VyQXR0YWNrIiwidmVsb2NpdHkiLCJvcmlnaW5hbEF0dGFjayIsImN1cnJlbnRWYWx1ZSIsInBlcmNlbnRDb21wbGV0ZSIsInNsaWNlSW5kZXgiLCJ0cmlnZ2VyUmVsZWFzZSIsInRyaWdnZXJBdHRhY2tSZWxlYXNlIiwiayIsImNvc2luZUN1cnZlIiwicmlwcGxlQ3VydmUiLCJjdXJ2ZUxlbiIsInNpbmVXYXZlIiwic3RhaXJzQ3VydmUiLCJjZWlsIiwic2luZUN1cnZlIiwiY29zIiwiYm91bmNlQ3VydmUiLCJpbnZlcnRDdXJ2ZSIsIm91dCIsImxpbmVhciIsImV4cG9uZW50aWFsIiwiYm91bmNlIiwiY29zaW5lIiwicmV2ZXJzZSIsInJldmVyc2VDdXJ2ZSIsInN0ZXAiLCJyaXBwbGUiLCJzaW5lIiwiQW1wbGl0dWRlRW52ZWxvcGUiLCJBbmFseXNlck5vZGUiLCJnZXRGbG9hdFRpbWVEb21haW5EYXRhIiwidWludDgiLCJVaW50OEFycmF5IiwiZ2V0Qnl0ZVRpbWVEb21haW5EYXRhIiwiQW5hbHlzZXIiLCJfYW5hbHlzZXIiLCJjcmVhdGVBbmFseXNlciIsIl9idWZmZXIiLCJzaXplIiwic21vb3RoaW5nIiwiV2F2ZWZvcm0iLCJGRlQiLCJnZXRWYWx1ZSIsImdldEZsb2F0RnJlcXVlbmN5RGF0YSIsImZyZXF1ZW5jeUJpbkNvdW50IiwiZmZ0U2l6ZSIsIlR5cGVFcnJvciIsInNtb290aGluZ1RpbWVDb25zdGFudCIsIkNvbXByZXNzb3IiLCJfY29tcHJlc3NvciIsImNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvciIsInRocmVzaG9sZCIsImtuZWUiLCJyYXRpbyIsIkFkZCIsIl9zdW0iLCJNdWx0aXBseSIsIl9tdWx0IiwiTmVnYXRlIiwiX211bHRpcGx5IiwiU3VidHJhY3QiLCJfbmVnIiwiRXF1YWxQb3dlckdhaW4iLCJfZXFQb3dlciIsIkNyb3NzRmFkZSIsImluaXRpYWxGYWRlIiwiZmFkZSIsIl9lcXVhbFBvd2VyQSIsIl9lcXVhbFBvd2VyQiIsIl9vbmUiLCJfaW52ZXJ0IiwiRmlsdGVyIiwiX2ZpbHRlcnMiLCJkZXR1bmUiLCJRIiwiX3JvbGxvZmYiLCJyb2xsb2ZmIiwiY2FzY2FkaW5nQ291bnQiLCJjb3VudCIsImZpbHRlciIsImNyZWF0ZUJpcXVhZEZpbHRlciIsImNvbm5lY3Rpb25DaGFpbiIsImNvbmNhdCIsIk11bHRpYmFuZFNwbGl0IiwibG93IiwiX2xvd01pZEZpbHRlciIsIm1pZCIsImhpZ2giLCJsb3dGcmVxdWVuY3kiLCJoaWdoRnJlcXVlbmN5IiwiRVEzIiwiX211bHRpYmFuZFNwbGl0IiwiX2xvd0dhaW4iLCJfbWlkR2FpbiIsIl9oaWdoR2FpbiIsIlNjYWxlIiwib3V0cHV0TWluIiwib3V0cHV0TWF4IiwiX291dHB1dE1pbiIsIl9vdXRwdXRNYXgiLCJfc2NhbGUiLCJfYWRkIiwiX3NldFJhbmdlIiwiU2NhbGVFeHAiLCJleHBvbmVudCIsIkRlbGF5IiwiX21heERlbGF5IiwibWF4RGVsYXkiLCJkZWxheVRpbWUiLCJfZGVsYXlOb2RlIiwiRmVlZGJhY2tDb21iRmlsdGVyIiwiX2RlbGF5IiwiX2ZlZWRiYWNrIiwicmVzb25hbmNlIiwiQWJzIiwiX2FicyIsIkZvbGxvd2VyIiwiX2ZpbHRlciIsIl9mcmVxdWVuY3lWYWx1ZXMiLCJfc3ViIiwiX2F0dGFjayIsIl9yZWxlYXNlIiwiX3NldEF0dGFja1JlbGVhc2UiLCJtaW5UaW1lIiwiU2NhbGVkRW52ZWxvcGUiLCJGcmVxdWVuY3lFbnZlbG9wZSIsIl9vY3RhdmVzIiwib2N0YXZlcyIsImJhc2VGcmVxdWVuY3kiLCJHcmVhdGVyVGhhblplcm8iLCJfdGhyZXNoIiwiR3JlYXRlclRoYW4iLCJfZ3R6IiwiR2F0ZSIsIl9mb2xsb3dlciIsIl9ndCIsInRocmVzaCIsImF0dGFja1RpbWUiLCJyZWxlYXNlVGltZSIsIl93cmFwU2NoZWR1bGVNZXRob2RzIiwidGlja3NVbnRpbFRpbWUiLCJfZ2V0VGlja3NVbnRpbEV2ZW50IiwiVGlja1NpZ25hbCIsInByZXZFdmVudCIsInNlZ21lbnRzIiwicmFtcFZhbCIsInNlZ21lbnREdXIiLCJ2YWwwIiwidmFsMSIsInNhbXBsZVRpbWUiLCJnZXRUaWNrc0F0VGltZSIsImdldER1cmF0aW9uT2ZUaWNrcyIsImN1cnJlbnRUaWNrIiwiZ2V0VGltZU9mVGljayIsInRpY2siLCJkZWx0YSIsInNxcnQiLCJzb2wxIiwidGlja3NUb1RpbWUiLCJ3aGVuIiwidGltZVRvVGlja3MiLCJzdGFydFRpY2tzIiwiZW5kVGlja3MiLCJUaW1lbGluZVN0YXRlIiwiaW5pdGlhbCIsIl9pbml0aWFsIiwic2V0U3RhdGVBdFRpbWUiLCJnZXRMYXN0U3RhdGUiLCJnZXROZXh0U3RhdGUiLCJUaWNrU291cmNlIiwiX3N0YXRlIiwiX3RpY2tPZmZzZXQiLCJzZXRUaWNrc0F0VGltZSIsInBhdXNlIiwic3RvcEV2ZW50IiwidG1wRXZlbnQiLCJsYXN0U3RhdGUiLCJlbGFwc2VkVGlja3MiLCJwZXJpb2RTdGFydFRpbWUiLCJvZmZzZXRFdmVudCIsImdldFNlY29uZHNBdFRpbWUiLCJlbGFwc2VkU2Vjb25kcyIsImdldFN0YXRlQXRUaW1lIiwiYWJzb2x1dGVUaWNrcyIsImZvckVhY2hUaWNrQmV0d2VlbiIsImxhc3RTdGF0ZUV2ZW50IiwibmV4dFRpY2tUaW1lIiwiQ2xvY2siLCJfbmV4dFRpY2siLCJfdGlja1NvdXJjZSIsIl9sYXN0VXBkYXRlIiwiX2JvdW5kTG9vcCIsIl9sb29wIiwiSW50ZXJ2YWxUaW1lbGluZSIsIl9yb290IiwiX2xlbmd0aCIsIkludGVydmFsTm9kZSIsImluc2VydCIsInVwZGF0ZUhlaWdodCIsInVwZGF0ZU1heCIsIl9yZWJhbGFuY2UiLCJyZXN1bHRzIiwic2VhcmNoIiwiX3JlbW92ZU5vZGUiLCJfc2V0Um9vdCIsIl9yZXBsYWNlTm9kZUluUGFyZW50IiwicmVwbGFjZW1lbnQiLCJpc0xlZnRDaGlsZCIsImxlZnQiLCJyaWdodCIsInRlbXAiLCJnZXRCYWxhbmNlIiwiX3JvdGF0ZUxlZnQiLCJwaXZvdE5vZGUiLCJfcm90YXRlUmlnaHQiLCJiYWxhbmNlIiwiYWxsTm9kZXMiLCJ0cmF2ZXJzZSIsInNlYXJjaEFmdGVyIiwiX2xlZnQiLCJfcmlnaHQiLCJoZWlnaHQiLCJwb2ludCIsIlRyYW5zcG9ydEV2ZW50IiwiX2V2ZW50SWQiLCJfb25jZSIsImludm9rZSIsImNsZWFyIiwiVHJhbnNwb3J0UmVwZWF0RXZlbnQiLCJfaW50ZXJ2YWwiLCJfY3VycmVudElkIiwiX25leHRJZCIsIl9ib3VuZFJlc3RhcnQiLCJfcmVzdGFydCIsIl9jcmVhdGVFdmVudHMiLCJzY2hlZHVsZU9uY2UiLCJfYm91bmRDcmVhdGVFdmVudHMiLCJfbG9vcFN0YXJ0IiwiX2xvb3BFbmQiLCJfcHBxIiwiVHJhbnNwb3J0Q29uc3RydWN0b3IiLCJfY2xvY2siLCJfcHJvY2Vzc1RpY2siLCJfYmluZENsb2NrRXZlbnRzIiwiX3RpbWVTaWduYXR1cmUiLCJfc2NoZWR1bGVkRXZlbnRzIiwiX3JlcGVhdGVkRXZlbnRzIiwiX3N5bmNlZFNpZ25hbHMiLCJfc3dpbmdUaWNrcyIsIl9zd2luZ0Ftb3VudCIsInN3aW5nIiwic3dpbmdTdWJkaXZpc2lvbiIsImxvb3BTdGFydCIsImxvb3BFbmQiLCJ0aWNrVGltZSIsInByb2dyZXNzIiwiYW1vdW50Iiwic2NoZWR1bGUiLCJfYWRkRXZlbnQiLCJzY2hlZHVsZVJlcGVhdCIsImV2ZW50SWQiLCJpdGVtIiwidGltZWxpbmUiLCJ0b2dnbGUiLCJ0aW1lU2lnIiwic3RhcnRQb3NpdGlvbiIsImVuZFBvc2l0aW9uIiwic2V0TG9vcFBvaW50cyIsInBwcSIsInJlbWFpbmluZ1RpY2tzIiwic3luY1NpZ25hbCIsInJhdGlvU2lnbmFsIiwidW5zeW5jU2lnbmFsIiwic3luY2VkU2lnbmFsIiwiVm9sdW1lIiwidm9sdW1lIiwiX3VubXV0ZWRWb2x1bWUiLCJtdXRlIiwiTWFzdGVyIiwiX3ZvbHVtZSIsInRvTWFzdGVyIiwiTWFzdGVyQ29uc3RydWN0b3IiLCJTb3VyY2UiLCJfc3luY2VkIiwiX3NjaGVkdWxlZCIsIl9zdGFydCIsInJlc3RhcnQiLCJfc3RvcCIsInNjaGVkIiwiX3N5bmNlZFN0YXJ0Iiwic3luYyIsInN0YXRlRXZlbnQiLCJzdGFydE9mZnNldCIsIl9zeW5jZWRTdG9wIiwidW5zeW5jIiwiQXVkaW9CdWZmZXIiLCJjb3B5VG9DaGFubmVsIiwic3JjIiwiY2hhbk51bSIsImNoYW5uZWwiLCJjb3B5RnJvbUNoYW5uZWwiLCJkZXN0IiwiQnVmZmVyIiwiX3JldmVyc2VkIiwiX3hociIsIl9vbmxvYWQiLCJ1cmwiLCJvbmxvYWQiLCJsb2FkZWQiLCJsb2FkIiwiY2F0Y2giLCJvbmVycm9yIiwiYnVmZiIsImVyciIsIl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZSIsImFib3J0IiwibnVtYmVyT2ZDaGFubmVscyIsImZyb21BcnJheSIsImlzTXVsdGlkaW1lbnNpb25hbCIsInRvTW9ubyIsInRvQXJyYXkiLCJvdXRwdXRBcnJheSIsIm51bUNoYW5uZWxzIiwiY2hhbm5lbEFycmF5Iiwic2FtcGxlIiwic3RhcnRTYW1wbGVzIiwiZW5kU2FtcGxlcyIsIl9yZXZlcnNlIiwicmV2IiwiX2Rvd25sb2FkUXVldWUiLCJiYXNlVXJsIiwiZnJvbVVybCIsInJlcXVlc3QiLCJtYXRjaGVzIiwiZXh0ZW5zaW9ucyIsImV4dGVuc2lvbiIsInN1cHBvcnRzVHlwZSIsInJlcGxhY2UiLCJvbkVycm9yIiwib25Qcm9ncmVzcyIsInRvdGFsUHJvZ3Jlc3MiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJyZXNwb25zZVR5cGUiLCJhZGRFdmVudExpc3RlbmVyIiwic3RhdHVzIiwicmVzcG9uc2UiLCJsZW5ndGhDb21wdXRhYmxlIiwic2VuZCIsImNhbmNlbERvd25sb2FkcyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNhblBsYXlUeXBlIiwicmVtb3ZlRXZlbnRzIiwiZmFpbCIsIk9zY2lsbGF0b3JOb2RlIiwib25lbmRlZCIsIl9zdGFydFRpbWUiLCJfc3RvcFRpbWUiLCJfb3NjaWxsYXRvciIsImNyZWF0ZU9zY2lsbGF0b3IiLCJfZ2FpbiIsInNldFBlcmlvZGljV2F2ZSIsInBlcmlvZGljV2F2ZSIsImNhbmNlbFN0b3AiLCJPc2NpbGxhdG9yIiwiX3dhdmUiLCJfcGFydGlhbHMiLCJwYXJ0aWFscyIsIl9waGFzZSIsInBoYXNlIiwiU2luZSIsIlRyaWFuZ2xlIiwiU2F3dG9vdGgiLCJTcXVhcmUiLCJDdXN0b20iLCJzeW5jRnJlcXVlbmN5IiwidW5zeW5jRnJlcXVlbmN5IiwiaXNCYXNpY1R5cGUiLCJjb2VmcyIsIl9nZXRSZWFsSW1hZ2luYXJ5IiwiY3JlYXRlUGVyaW9kaWNXYXZlIiwicGVyaW9kaWNXYXZlU2l6ZSIsInJlYWwiLCJpbWFnIiwicGFydGlhbENvdW50IiwicGFydGlhbCIsImV4ZWMiLCJfaW52ZXJzZUZGVCIsInN1bSIsIl9nZXRJbml0aWFsVmFsdWUiLCJ0d29QaSIsIkF1ZGlvVG9HYWluIiwiX25vcm0iLCJ4IiwiWmVybyIsIkxGTyIsImFtcGxpdHVkZSIsIl9zdG9wcGVkU2lnbmFsIiwiX3plcm9zIiwiX3N0b3BwZWRWYWx1ZSIsIl9hMmciLCJfc2NhbGVyIiwiY3VycmVudE1pbiIsImN1cnJlbnRNYXgiLCJMaW1pdGVyIiwiTG93cGFzc0NvbWJGaWx0ZXIiLCJfbG93cGFzcyIsImRhbXBlbmluZyIsIk1lcmdlIiwiX21lcmdlciIsImNyZWF0ZUNoYW5uZWxNZXJnZXIiLCJNZXRlciIsImdldExldmVsIiwiU3BsaXQiLCJfc3BsaXR0ZXIiLCJjcmVhdGVDaGFubmVsU3BsaXR0ZXIiLCJNaWRTaWRlU3BsaXQiLCJfc3BsaXQiLCJfbWlkQWRkIiwiU1FSVDFfMiIsIl9zaWRlU3VidHJhY3QiLCJzaWRlIiwiTWlkU2lkZU1lcmdlIiwiX3RpbWVzVHdvTGVmdCIsIl90aW1lc1R3b1JpZ2h0IiwiX21lcmdlIiwiTWlkU2lkZUNvbXByZXNzb3IiLCJfbWlkU2lkZVNwbGl0IiwiX21pZFNpZGVNZXJnZSIsIk1vbm8iLCJNdWx0aWJhbmRDb21wcmVzc29yIiwiU3RlcmVvUGFubmVyTm9kZSIsInBhbiIsInJpZ2h0V2F2ZVNoYXBlciIsImxlZnRXYXZlU2hhcGVyIiwibGVmdEdhaW4iLCJyaWdodEdhaW4iLCJtZXJnZSIsImNyZWF0ZVN0ZXJlb1Bhbm5lciIsIlBhbm5lciIsImluaXRpYWxQYW4iLCJfcGFubmVyIiwiUGFubmVyM0QiLCJjcmVhdGVQYW5uZXIiLCJwYW5uaW5nTW9kZWwiLCJtYXhEaXN0YW5jZSIsImRpc3RhbmNlTW9kZWwiLCJjb25lT3V0ZXJHYWluIiwiY29uZU91dGVyQW5nbGUiLCJjb25lSW5uZXJBbmdsZSIsInJlZkRpc3RhbmNlIiwicm9sbG9mZkZhY3RvciIsIl9vcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uWCIsIm9yaWVudGF0aW9uWSIsIm9yaWVudGF0aW9uWiIsIl9wb3NpdGlvbiIsInBvc2l0aW9uWCIsInBvc2l0aW9uWSIsInBvc2l0aW9uWiIsIl9yYW1wVGltZUNvbnN0YW50Iiwic2V0UG9zaXRpb24iLCJ5IiwieiIsInNldE9yaWVudGF0aW9uIiwicG9zIiwiX2FsaWFzUHJvcGVydHkiLCJQYW5Wb2wiLCJTb2xvIiwiX3NvbG9CaW5kIiwiX3NvbG9lZCIsInNvbG8iLCJfaXNTb2xvZWQiLCJfYWRkU29sbyIsIl9yZW1vdmVTb2xvIiwiX2N1cnJlbnRTb2xvIiwiX25vU29sb3MiLCJDdHJsSW50ZXJwb2xhdGUiLCJsb3dlclBvc2l0aW9uIiwibG93ZXIiLCJ1cHBlciIsIl9pbnRlcnBvbGF0ZSIsInJldEFycmF5IiwicmV0T2JqIiwiX3RvTnVtYmVyIiwiQ3RybE1hcmtvdiIsIm5leHQiLCJkaXN0cmlidXRpb24iLCJfZ2V0UHJvYkRpc3RyaWJ1dGlvbiIsInJhbmQiLCJyYW5kb20iLCJkaXN0IiwiY2hvc2VuIiwibmVlZHNOb3JtYWxpemluZyIsIm9wdGlvbiIsInByb2JhYmlsaXR5IiwiQ3RybFBhdHRlcm4iLCJfc2h1ZmZsZWQiLCJfZGlyZWN0aW9uIiwiVXAiLCJEb3duIiwiVXBEb3duIiwiRG93blVwIiwiQWx0ZXJuYXRlVXAiLCJBbHRlcm5hdGVEb3duIiwiUmFuZG9tIiwiUmFuZG9tV2FsayIsIlJhbmRvbU9uY2UiLCJfc2h1ZmZsZVZhbHVlcyIsImNvcHkiLCJyYW5kVmFsIiwiQ3RybFJhbmRvbSIsImludGVnZXIiLCJCdWZmZXJzIiwidXJscyIsIl9idWZmZXJzIiwiX2xvYWRpbmdDb3VudCIsIl9idWZmZXJMb2FkZWQiLCJoYXMiLCJpc0xvYWRlZCIsImJ1ZmZOYW1lIiwiQnVzZXMiLCJjaGFubmVsTmFtZSIsInNlbmRLbm9iIiwicmVjZWl2ZSIsIkRyYXciLCJleHBpcmF0aW9uIiwiYW50aWNpcGF0aW9uIiwiX2JvdW5kRHJhd0xvb3AiLCJfZHJhd0xvb3AiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJMaXN0ZW5lciIsIkxpc3RlbmVyQ29uc3RydWN0b3IiLCJmb3J3YXJkWCIsImZvcndhcmRZIiwiZm9yd2FyZFoiLCJ1cFgiLCJ1cFkiLCJ1cFoiLCJsaXN0ZW5lciIsIm9yaWdpbmFsQ29udGV4dCIsInJlbmRlclJldCIsImF0dGVtcHRSZW5kZXIiLCJ0cmllcyIsIkVmZmVjdCIsIl9kcnlXZXQiLCJ3ZXQiLCJlZmZlY3RTZW5kIiwiZWZmZWN0UmV0dXJuIiwiY29ubmVjdEVmZmVjdCIsImVmZmVjdCIsIkF1dG9GaWx0ZXIiLCJfbGZvIiwiZGVwdGgiLCJkZWxheSIsIm9jdCIsIkF1dG9QYW5uZXIiLCJBdXRvV2FoIiwiZm9sbG93ZXIiLCJfc3dlZXBSYW5nZSIsIl9iYXNlRnJlcXVlbmN5IiwiX2lucHV0Qm9vc3QiLCJfYmFuZHBhc3MiLCJfcGVha2luZyIsIl9zZXRTd2VlcFJhbmdlIiwic2Vuc2l0aXZpdHkiLCJiYXNlRnJlcSIsInNlbnNpdGl2eSIsIk1vZHVsbyIsIm1vZHVsdXMiLCJfc3VidHJhY3QiLCJfbW9kU2lnbmFsIiwiX3NldFdhdmVTaGFwZXIiLCJtb2QiLCJCaXRDcnVzaGVyIiwiaW52U3RlcFNpemUiLCJiaXRzIiwiX21vZHVsbyIsIl9iaXRzIiwiQ2hlYnlzaGV2IiwiX29yZGVyIiwib3JkZXIiLCJfZ2V0Q29lZmZpY2llbnQiLCJkZWdyZWUiLCJtZW1vIiwiU3RlcmVvRWZmZWN0IiwiZWZmZWN0U2VuZEwiLCJlZmZlY3RTZW5kUiIsImVmZmVjdFJldHVybkwiLCJlZmZlY3RSZXR1cm5SIiwiQ2hvcnVzIiwiX2RlcHRoIiwiX2RlbGF5VGltZSIsIl9sZm9MIiwiX2xmb1IiLCJfZGVsYXlOb2RlTCIsIl9kZWxheU5vZGVSIiwic3ByZWFkIiwiZGV2aWF0aW9uIiwiQ29udm9sdmVyIiwiX2NvbnZvbHZlciIsImNyZWF0ZUNvbnZvbHZlciIsIkRpc3RvcnRpb24iLCJfZGlzdG9ydGlvbiIsImRpc3RvcnRpb24iLCJkZWciLCJGZWVkYmFja0VmZmVjdCIsIl9mZWVkYmFja0dhaW4iLCJmZWVkYmFjayIsIkZlZWRiYWNrRGVsYXkiLCJjb21iRmlsdGVyVHVuaW5ncyIsImFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcyIsIkZyZWV2ZXJiIiwicm9vbVNpemUiLCJfY29tYkZpbHRlcnMiLCJfYWxscGFzc0ZpbHRlcnNMIiwiX2FsbHBhc3NGaWx0ZXJzUiIsImFsbHBhc3NMIiwiYWxscGFzc1IiLCJsZnBmIiwiYWwiLCJhciIsImNmIiwiY29tYkZpbHRlckRlbGF5VGltZXMiLCJjb21iRmlsdGVyUmVzb25hbmNlcyIsImFsbHBhc3NGaWx0ZXJGcmVxcyIsIkpDUmV2ZXJiIiwiX3NjYWxlUm9vbVNpemUiLCJfYWxscGFzc0ZpbHRlcnMiLCJfZmVlZGJhY2tDb21iRmlsdGVycyIsImFmIiwiYWxscGFzcyIsImZiY2YiLCJhcGYiLCJNaWRTaWRlRWZmZWN0IiwibWlkU2VuZCIsInNpZGVTZW5kIiwibWlkUmV0dXJuIiwic2lkZVJldHVybiIsIlBoYXNlciIsIl9maWx0ZXJzTCIsIl9tYWtlRmlsdGVycyIsInN0YWdlcyIsIl9maWx0ZXJzUiIsImNvbm5lY3RUb0ZyZXEiLCJmaWx0ZXJzIiwiU3RlcmVvWEZlZWRiYWNrRWZmZWN0IiwiX2ZlZWRiYWNrTFIiLCJfZmVlZGJhY2tSTCIsIlBpbmdQb25nRGVsYXkiLCJfbGVmdERlbGF5IiwibWF4RGVsYXlUaW1lIiwiX3JpZ2h0RGVsYXkiLCJfcmlnaHRQcmVEZWxheSIsIlBpdGNoU2hpZnQiLCJfZnJlcXVlbmN5IiwiX2RlbGF5QSIsIl9sZm9BIiwiX2RlbGF5QiIsIl9sZm9CIiwiX2Nyb3NzRmFkZSIsIl9jcm9zc0ZhZGVMRk8iLCJfZmVlZGJhY2tEZWxheSIsIl9waXRjaCIsIl93aW5kb3dTaXplIiwid2luZG93U2l6ZSIsImZhY3RvciIsIkJ1ZmZlclNvdXJjZSIsIl9zb3VyY2VTdG9wcGVkIiwiX3NvdXJjZSIsIl9vbmVuZGVkIiwicGxheWJhY2tSYXRlIiwiZmFkZUluIiwiZmFkZU91dCIsIl9vbmVuZGVkVGltZW91dCIsImZhZGVJblRpbWUiLCJjb21wdXRlZER1ciIsImZhZGVPdXRUaW1lIiwiaGVsZER1cmF0aW9uIiwic3RhcnRGYWRlIiwiYWRkaXRpb25hbFRhaWwiLCJOb2lzZSIsIl9wbGF5YmFja1JhdGUiLCJfbm9pc2VCdWZmZXJzIiwicmF0ZSIsIl9ub2lzZUFycmF5cyIsInBpbmsiLCJjaGFubmVsTnVtIiwiYjAiLCJiMSIsImIyIiwiYjMiLCJiNCIsImI1IiwiYjYiLCJ3aGl0ZSIsImJyb3duIiwibGFzdE91dCIsImNyZWF0ZUJ1ZmZlcnMiLCJSZXZlcmIiLCJwcmVEZWxheSIsImdlbmVyYXRlIiwibm9pc2VMIiwibm9pc2VSIiwiU3RlcmVvRmVlZGJhY2tFZmZlY3QiLCJfZmVlZGJhY2tMIiwiX2ZlZWRiYWNrUiIsIlN0ZXJlb1dpZGVuZXIiLCJ3aWR0aCIsIl90d29UaW1lc1dpZHRoTWlkIiwiX3R3b1RpbWVzV2lkdGhTaWRlIiwiX21pZE11bHQiLCJfb25lTWludXNXaWR0aCIsIl9zaWRlTXVsdCIsIlRyZW1vbG8iLCJfYW1wbGl0dWRlTCIsIl9hbXBsaXR1ZGVSIiwiVmlicmF0byIsIkV2ZW50IiwiX3N0YXJ0T2Zmc2V0IiwiX3Byb2JhYmlsaXR5IiwiX2h1bWFuaXplIiwiaHVtYW5pemUiLCJfcmVzY2hlZHVsZUV2ZW50cyIsInN0YXJ0VGljayIsIl9nZXRMb29wRHVyYXRpb24iLCJfdGljayIsInByb2IiLCJ2YXJpYXRpb24iLCJyZXNjaGVkdWxUaW1lIiwibGFzdEV2ZW50IiwibG9vcER1cmF0aW9uIiwiTG9vcCIsIl9ldmVudCIsIml0ZXJhdGlvbnMiLCJpdGVycyIsIlBhcnQiLCJfZm9yRWFjaCIsIl9zdGFydE5vdGUiLCJhdCIsIl9yZXN0YXJ0RXZlbnQiLCJyZW1vdmVBbGwiLCJfc2V0QWxsIiwiX3Rlc3RMb29wQm91bmRyaWVzIiwiUGF0dGVybiIsIl9wYXR0ZXJuIiwicGF0dGVybiIsInZhbHMiLCJTZXF1ZW5jZSIsIl9zdWJkaXZpc2lvbiIsIl9pbmRleFRpbWUiLCJzdWJTdWJkaXZpc2lvbiIsIlB1bHNlT3NjaWxsYXRvciIsIl93aWR0aEdhdGUiLCJfc2F3dG9vdGgiLCJQV01Pc2NpbGxhdG9yIiwiX3B1bHNlIiwibW9kdWxhdGlvbkZyZXF1ZW5jeSIsIl9tb2R1bGF0b3IiLCJGTU9zY2lsbGF0b3IiLCJfY2FycmllciIsIm1vZHVsYXRpb25JbmRleCIsIm1vZHVsYXRpb25UeXBlIiwiaGFybW9uaWNpdHkiLCJfbW9kdWxhdGlvbk5vZGUiLCJBTU9zY2lsbGF0b3IiLCJfbW9kdWxhdGlvblNjYWxlIiwiRmF0T3NjaWxsYXRvciIsIl9vc2NpbGxhdG9ycyIsIl9zcHJlYWQiLCJvc2MiLCJpdGVyYXRvciIsIk9tbmlPc2NpbGxhdG9yIiwiX3NvdXJjZVR5cGUiLCJPbW5pT3NjVHlwZSIsInByZWZpeCIsInN1YnN0ciIsIl9jcmVhdGVOZXdPc2NpbGxhdG9yIiwib3NjVHlwZSIsIk9zY2lsbGF0b3JDb25zdHJ1Y3RvciIsIm9sZE9zYyIsIm1UeXBlIiwiSW5zdHJ1bWVudCIsIl9zeW5jTWV0aG9kIiwidGltZVBvc2l0aW9uIiwib3JpZ2luYWxNZXRob2QiLCJfb3JpZ2luYWxfdHJpZ2dlckF0dGFjayIsIl9vcmlnaW5hbF90cmlnZ2VyUmVsZWFzZSIsIk1vbm9waG9uaWMiLCJwb3J0YW1lbnRvIiwiX3RyaWdnZXJFbnZlbG9wZUF0dGFjayIsInNldE5vdGUiLCJfdHJpZ2dlckVudmVsb3BlUmVsZWFzZSIsImdldExldmVsQXRUaW1lIiwiZW52ZWxvcGUiLCJwb3J0VGltZSIsIlN5bnRoIiwib3NjaWxsYXRvciIsIkFNU3ludGgiLCJtb2R1bGF0aW9uIiwibW9kdWxhdGlvbkVudmVsb3BlIiwiTW9ub1N5bnRoIiwiZmlsdGVyRW52ZWxvcGUiLCJEdW9TeW50aCIsInZvaWNlMCIsInZvaWNlMSIsIl92aWJyYXRvIiwidmlicmF0b1JhdGUiLCJfdmlicmF0b0dhaW4iLCJ2aWJyYXRvQW1vdW50IiwiRk1TeW50aCIsImNhcnJpZXIiLCJtb2R1bGF0b3IiLCJNZW1icmFuZVN5bnRoIiwicGl0Y2hEZWNheSIsIm1heE5vdGUiLCJpbmhhcm1SYXRpb3MiLCJNZXRhbFN5bnRoIiwiX2ZyZXFNdWx0aXBsaWVycyIsIl9hbXBsaXR1ZSIsIl9oaWdocGFzcyIsIl9maWx0ZXJGcmVxU2NhbGVyIiwibXVsdCIsInZlbCIsIm9jdHMiLCJOb2lzZVN5bnRoIiwibm9pc2UiLCJQbHVja1N5bnRoIiwiX25vaXNlIiwiYXR0YWNrTm9pc2UiLCJfbGZjZiIsImRlbGF5QW1vdW50IiwiUG9seVN5bnRoIiwicG9seXBob255IiwiTUFYX1BPTFlQSE9OWSIsInZvaWNlcyIsIl90cmlnZ2VycyIsInYiLCJ2b2ljZSIsIm5vdGVzIiwib2xkZXN0IiwiSlNPTiIsInN0cmluZ2lmeSIsInN0cmluZ2lmaWVkIiwiZGVzYyIsInJlbGVhc2VBbGwiLCJTYW1wbGVyIiwidXJsTWFwIiwiaXNOYU4iLCJfYWN0aXZlU291cmNlcyIsIl9maW5kQ2xvc2VzdCIsImRpZmZlcmVuY2UiLCJjbG9zZXN0Tm90ZSIsInNvdXJjZSIsInNvdXJjZXMiLCJzZXRXYXZlVGFibGUiLCJjcmVhdGVXYXZlVGFibGUiLCJHYWluVG9BdWRpbyIsIk5vcm1hbGl6ZSIsImlucHV0TWluIiwiaW5wdXRNYXgiLCJfaW5wdXRNaW4iLCJfaW5wdXRNYXgiLCJfZGl2IiwiVHJhbnNwb3J0VGltZWxpbmVTaWduYWwiLCJfb3V0cHV0U2lnIiwiX2xhc3RWYWwiLCJfb25UaWNrIiwiX2JpbmRBbmNob3JWYWx1ZSIsIl9hbmNob3JWYWx1ZSIsIl9zeW5jZWRDYWxsYmFjayIsIkdyYWluUGxheWVyIiwiZ3JhaW5TaXplIiwiX2dyYWluU2l6ZSIsIl9vdmVybGFwIiwib3ZlcmxhcCIsIl9vbnN0b3AiLCJfb2Zmc2V0Iiwic2VlayIsIlBsYXllciIsImF1dG9zdGFydCIsIl9lbGFwc2VkVGltZSIsInJldHJpZ2dlciIsIl9vblNvdXJjZUVuZCIsImNvbXB1dGVkRHVyYXRpb24iLCJfc3RvcEF0TmV4dEl0ZXJhdGlvbiIsIm5leHRTdG9wIiwicG9zaXRpb24iLCJzdG9wVGltZSIsIlBsYXllcnMiLCJfcGxheWVycyIsIl9mYWRlSW4iLCJfZmFkZU91dCIsInBsYXllciIsInBsYXlpbmciLCJwbGF5ZXJOYW1lIiwic3RvcEFsbCIsIlVzZXJNZWRpYSIsIl9tZWRpYVN0cmVhbSIsIl9zdHJlYW0iLCJfZGV2aWNlIiwibGFiZWxPcklkIiwiZW51bWVyYXRlRGV2aWNlcyIsImRldmljZXMiLCJkZXZpY2UiLCJmaW5kIiwibGFiZWwiLCJkZXZpY2VJZCIsImNvbnN0cmFpbnRzIiwiYXVkaW8iLCJlY2hvQ2FuY2VsbGF0aW9uIiwibWVkaWFEZXZpY2VzIiwiZ2V0VXNlck1lZGlhIiwic3RyZWFtIiwiY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UiLCJnZXRBdWRpb1RyYWNrcyIsInRyYWNrIiwia2luZCIsImFjdGl2ZSIsImdyb3VwSWQiLCJNaWRpIiwiZmFjdG9yeSIsImdsb2JhbCIsInJlcXVpcmUiLCJoIiwiY29kZSIsIjEiLCJjaGFyQ29kZUF0IiwidG9CeXRlQXJyYXkiLCJmcm9tQnl0ZUFycmF5IiwiYmFzZTY0anMiLCIyIiwiMyIsIlRZUEVEX0FSUkFZX1NVUFBPUlQiLCJ3cml0ZSIsImlzQnVmZmVyIiwiWSIsIkFycmF5QnVmZmVyIiwiYnl0ZUxlbmd0aCIsIl9hdWdtZW50IiwiZGF0YSIsIl9fcHJvdG9fXyIsIl9pc0J1ZmZlciIsInBvb2xTaXplIiwiWiIsIlIiLCJVIiwidSIsIk51bWJlciIsIlYiLCJ3IiwiUyIsIlQiLCJBIiwiVyIsIiQiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIlgiLCJOIiwiUCIsImFhIiwiTyIsIlNsb3dCdWZmZXIiLCJJTlNQRUNUX01BWF9CWVRFUyIsImZvbyIsInN1YmFycmF5IiwiY29tcGFyZSIsImlzRW5jb2RpbmciLCJlcXVhbHMiLCJpbnNwZWN0IiwicmVhZFVJbnQ4Iiwid3JpdGVVSW50OCIsInRvSlNPTiIsIl9hcnIiLCJyZWFkVUludExFIiwicmVhZFVJbnRCRSIsInJlYWRVSW50MTZMRSIsInJlYWRVSW50MTZCRSIsInJlYWRVSW50MzJMRSIsInJlYWRVSW50MzJCRSIsInJlYWRJbnRMRSIsInJlYWRJbnRCRSIsInJlYWRJbnQ4IiwicmVhZEludDE2TEUiLCJyZWFkSW50MTZCRSIsInJlYWRJbnQzMkxFIiwicmVhZEludDMyQkUiLCJyZWFkRmxvYXRMRSIsInJlYWQiLCJyZWFkRmxvYXRCRSIsInJlYWREb3VibGVMRSIsInJlYWREb3VibGVCRSIsIndyaXRlVUludExFIiwid3JpdGVVSW50QkUiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVVSW50MTZCRSIsIndyaXRlVUludDMyTEUiLCJ3cml0ZVVJbnQzMkJFIiwid3JpdGVJbnRMRSIsIndyaXRlSW50QkUiLCJ3cml0ZUludDgiLCJ3cml0ZUludDE2TEUiLCJ3cml0ZUludDE2QkUiLCJ3cml0ZUludDMyTEUiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZUZsb2F0TEUiLCJ3cml0ZUZsb2F0QkUiLCJ3cml0ZURvdWJsZUxFIiwid3JpdGVEb3VibGVCRSIsIl9zZXQiLCJmaWxsIiwidG9BcnJheUJ1ZmZlciIsIl8iLCJ0b0xvY2FsZVN0cmluZyIsInNlbGYiLCJiYXNlNjQtanMiLCJpZWVlNzU0IiwiaXNhcnJheSIsIjQiLCJFUzZQcm9taXNlIiwiY2EiLCJlYSIsIl9yZXN1bHQiLCJpYSIsImdhIiwiaGEiLCJfbGFiZWwiLCJfb25lcnJvciIsImZhIiwiX3N1YnNjcmliZXJzIiwiamEiLCJrYSIsIl9pbnN0YW5jZUNvbnN0cnVjdG9yIiwicHJvbWlzZSIsIl9yZW1haW5pbmciLCJfZW51bWVyYXRlIiwiZGEiLCJNdXRhdGlvbk9ic2VydmVyIiwiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIsImJhIiwiVWludDhDbGFtcGVkQXJyYXkiLCJpbXBvcnRTY3JpcHRzIiwiTWVzc2FnZUNoYW5uZWwiLCJuZXh0VGljayIsImNyZWF0ZVRleHROb2RlIiwib2JzZXJ2ZSIsImNoYXJhY3RlckRhdGEiLCJwb3J0MSIsInBvcnQyIiwicnVuT25Mb29wIiwicnVuT25Db250ZXh0Iiwic3Vic3RyaW5nIiwiX2VhY2hFbnRyeSIsIl9zZXR0bGVkQXQiLCJfd2lsbFNldHRsZUF0IiwiYWxsIiwicmFjZSIsInJlamVjdCIsIl9zZXRTY2hlZHVsZXIiLCJfc2V0QXNhcCIsIl9hc2FwIiwicG9seWZpbGwiLCJGdW5jdGlvbiIsImNhc3QiLCJfcHJvY2VzcyIsIjUiLCJmZXRjaEpzb25wIiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInJlbW92ZUNoaWxkIiwianNvbnBDYWxsYmFjayIsImpzb25wQ2FsbGJhY2tGdW5jdGlvbiIsIkRhdGUiLCJvayIsImpzb24iLCJzZXRBdHRyaWJ1dGUiLCJjaGFyc2V0IiwiYXBwZW5kQ2hpbGQiLCI2IiwiY3JlYXRlRWxlbWVudE5TIiwiSFRNTEVsZW1lbnQiLCJzYWZhcmkiLCJzZXRJbW1lZGlhdGUiLCJyZXZva2VPYmplY3RVUkwiLCJyZWFkeVN0YXRlIiwiSU5JVCIsImhyZWYiLCJkb3dubG9hZCIsIk1vdXNlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiRE9ORSIsIkZpbGVSZWFkZXIiLCJvbmxvYWRlbmQiLCJyZXN1bHQiLCJsb2NhdGlvbiIsInJlYWRBc0RhdGFVUkwiLCJtc1NhdmVPck9wZW5CbG9iIiwiV1JJVElORyIsIm9ud3JpdGVzdGFydCIsIm9ucHJvZ3Jlc3MiLCJvbndyaXRlIiwib25hYm9ydCIsIm9ud3JpdGVlbmQiLCJjb250ZW50Iiwic2F2ZUFzIiwiNyIsIk5hTiIsIkxOMiIsIjgiLCI5Iiwib2EiLCJuYSIsIm1hIiwibGEiLCJxYSIsInJhIiwic29ydCIsInBhIiwibGlidGVzcyIsIkdsdVRlc3NlbGF0b3IiLCJ3aW5kaW5nUnVsZSIsIkdMVV9URVNTX1dJTkRJTkdfT0REIiwiR0xVX1RFU1NfV0lORElOR19OT05aRVJPIiwiR0xVX1RFU1NfV0lORElOR19QT1NJVElWRSIsIkdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkUiLCJHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFfVFdPIiwicHJpbWl0aXZlVHlwZSIsIkdMX0xJTkVfTE9PUCIsIkdMX1RSSUFOR0xFUyIsIkdMX1RSSUFOR0xFX1NUUklQIiwiR0xfVFJJQU5HTEVfRkFOIiwiZXJyb3JUeXBlIiwiR0xVX1RFU1NfTUlTU0lOR19CRUdJTl9QT0xZR09OIiwiR0xVX1RFU1NfTUlTU0lOR19FTkRfUE9MWUdPTiIsIkdMVV9URVNTX01JU1NJTkdfQkVHSU5fQ09OVE9VUiIsIkdMVV9URVNTX01JU1NJTkdfRU5EX0NPTlRPVVIiLCJHTFVfVEVTU19DT09SRF9UT09fTEFSR0UiLCJHTFVfVEVTU19ORUVEX0NPTUJJTkVfQ0FMTEJBQ0siLCJnbHVFbnVtIiwiR0xVX1RFU1NfTUVTSCIsIkdMVV9URVNTX1RPTEVSQU5DRSIsIkdMVV9URVNTX1dJTkRJTkdfUlVMRSIsIkdMVV9URVNTX0JPVU5EQVJZX09OTFkiLCJHTFVfSU5WQUxJRF9FTlVNIiwiR0xVX0lOVkFMSURfVkFMVUUiLCJHTFVfVEVTU19CRUdJTiIsIkdMVV9URVNTX1ZFUlRFWCIsIkdMVV9URVNTX0VORCIsIkdMVV9URVNTX0VSUk9SIiwiR0xVX1RFU1NfRURHRV9GTEFHIiwiR0xVX1RFU1NfQ09NQklORSIsIkdMVV9URVNTX0JFR0lOX0RBVEEiLCJHTFVfVEVTU19WRVJURVhfREFUQSIsIkdMVV9URVNTX0VORF9EQVRBIiwiR0xVX1RFU1NfRVJST1JfREFUQSIsIkdMVV9URVNTX0VER0VfRkxBR19EQVRBIiwiR0xVX1RFU1NfQ09NQklORV9EQVRBIiwiZ2x1RGVsZXRlVGVzcyIsImdsdVRlc3NQcm9wZXJ0eSIsImdsdUdldFRlc3NQcm9wZXJ0eSIsImdsdVRlc3NOb3JtYWwiLCJnbHVUZXNzQ2FsbGJhY2siLCJnbHVUZXNzVmVydGV4IiwiZ2x1VGVzc0JlZ2luUG9seWdvbiIsImdsdVRlc3NCZWdpbkNvbnRvdXIiLCJnbHVUZXNzRW5kQ29udG91ciIsImdsdVRlc3NFbmRQb2x5Z29uIiwiMTAiLCJvcGVudHlwZSIsInRhYmxlIiwiVWludDE2QXJyYXkiLCJ0cmFucyIsInNvdXJjZUluZGV4IiwidGFnIiwiYml0Y291bnQiLCJkZXN0TGVuIiwibHRyZWUiLCJkdHJlZSIsInZlIiwidWUiLCJzZSIsInRlIiwia2UiLCJvZSIsInBlIiwicWUiLCJyZSIsImxlIiwieDEiLCJ5MSIsIngyIiwieTIiLCJjb21tYW5kcyIsInN0cm9rZSIsInN0cm9rZVdpZHRoIiwidGFibGVOYW1lIiwiZmllbGRzIiwiZm9ybWF0IiwiZ2x5cGhzIiwieGUiLCJhc3NlcnQiLCJzY3JpcHQiLCJkZWZhdWx0TGFuZ1N5cyIsInJlcUZlYXR1cmVJbmRleCIsImZlYXR1cmVJbmRleGVzIiwibGFuZ1N5c1JlY29yZHMiLCJsYW5nU3lzIiwiZmVhdHVyZSIsImZlYXR1cmVQYXJhbXMiLCJsb29rdXBMaXN0SW5kZXhlcyIsImxvb2t1cFR5cGUiLCJsb29rdXBGbGFnIiwic3VidGFibGVzIiwiZ2V0VWludDgiLCJnZXRVaW50MTYiLCJnZXRVaW50MzIiLCJnZXRJbnQxNiIsInJlbGF0aXZlT2Zmc2V0IiwiZ2x5cGhJbmRleCIsImZvbnQiLCJjbWFwIiwiZW5jb2RpbmciLCJuYW1lcyIsIlFlIiwibnVtYmVyT2ZHbHlwaHMiLCJnbHlwaE5hbWVJbmRleCIsImJpbmRDb25zdHJ1Y3RvclZhbHVlcyIsInBhdGgiLCJjb25maWd1cmFibGUiLCJMZSIsImdldENhcmQxNiIsImdldEJ5dGUiLCJnZXRPZmZzZXQiLCJnZXRCeXRlcyIsIm9iamVjdHMiLCJlbmRPZmZzZXQiLCJwYXJzZUJ5dGUiLCJQYXJzZXIiLCJOZSIsIm9wIiwic2EiLCJUZSIsInRhIiwiVWUiLCJEYXRhVmlldyIsIl9zdWJycyIsIl9zdWJyc0JpYXMiLCJwcml2YXRlIiwiX2RlZmF1bHRXaWR0aFgiLCJkZWZhdWx0V2lkdGhYIiwiX25vbWluYWxXaWR0aFgiLCJub21pbmFsV2lkdGhYIiwic3VicnMiLCJfcHJpdmF0ZURpY3QiLCJ4YSIsImNsb3NlUGF0aCIsIm1vdmVUbyIsImlzQ0lERm9udCIsInRhYmxlcyIsImNmZiIsInRvcERpY3QiLCJfZmRTZWxlY3QiLCJfZmRBcnJheSIsInBvcCIsImxpbmVUbyIsImN1cnZlVG8iLCJnc3VicnNCaWFzIiwiZ3N1YnJzIiwiYWR2YW5jZVdpZHRoIiwiQWEiLCJEYSIsIkVhIiwiSWUiLCJSZWNvcmQiLCJkaWN0IiwiRmEiLCJ0b3BEaWN0cyIsIkphIiwiWGEiLCJZYSIsImRmIiwiZmYiLCJlZiIsIiRhIiwiX2EiLCJtYiIsIm5iIiwib2IiLCJwYiIsIlRhYmxlIiwibnVtVGFibGVzIiwic2VhcmNoUmFuZ2UiLCJlbnRyeVNlbGVjdG9yIiwicmFuZ2VTaGlmdCIsInNpemVPZiIsImFyZ3VtZW50IiwiZW5jb2RlIiwicWIiLCJjaGFyVG9HbHlwaEluZGV4IiwiZ2V0TWV0cmljcyIsInRiIiwidWIiLCJ2YiIsIndiIiwieGIiLCJ5YiIsInpiIiwiQWIiLCJzdWJzdEZvcm1hdCIsIkNiIiwiRGIiLCJFYiIsIkZiIiwicGFyc2VTaG9ydCIsIkdiIiwibnVtYmVyT2ZDb250b3VycyIsIl94TWluIiwiX3lNaW4iLCJfeE1heCIsIl95TWF4IiwiZW5kUG9pbnRJbmRpY2VzIiwicGFyc2VVU2hvcnQiLCJpbnN0cnVjdGlvbkxlbmd0aCIsImluc3RydWN0aW9ucyIsIm9uQ3VydmUiLCJsYXN0UG9pbnRPZkNvbnRvdXIiLCJwb2ludHMiLCJpc0NvbXBvc2l0ZSIsImNvbXBvbmVudHMiLCJ4U2NhbGUiLCJzY2FsZTAxIiwic2NhbGUxMCIsInlTY2FsZSIsImR5IiwibWF0Y2hlZFBvaW50cyIsInBhcnNlQ2hhciIsInBhcnNlRjJEb3QxNCIsIkhiIiwiSmIiLCJJYiIsInF1YWRyYXRpY0N1cnZlVG8iLCJLYiIsImdldFBhdGgiLCJNYiIsImdldENvbW1hbmRzIiwidmYiLCJfZnBnbVN0YXRlIiwiX3ByZXBTdGF0ZSIsIl9lcnJvclN0YXRlIiwiTmIiLCJPYiIsInNpZ24iLCJQYiIsIlFiIiwiUmIiLCJTYiIsIlRiIiwiYXhpcyIsInNsb3BlIiwibm9ybWFsU2xvcGUiLCJmcmVlemUiLCJVYiIsInhmIiwieWYiLCJWYiIsInhvIiwieW8iLCJwcmV2UG9pbnRPbkNvbnRvdXIiLCJuZXh0UG9pbnRPbkNvbnRvdXIiLCJ4VG91Y2hlZCIsInlUb3VjaGVkIiwicHJldmVudEV4dGVuc2lvbnMiLCJXYiIsImVudiIsInN0YWNrIiwicHJvZyIsInpwMCIsInpwMSIsInpwMiIsInJwMCIsInJwMSIsInJwMiIsImZ2IiwicHYiLCJkcHYiLCJYYiIsInRab25lIiwiZ1pvbmUiLCJZYiIsImlwIiwiWmIiLCJERUJVRyIsIiRiIiwiX2IiLCJhYyIsInoyIiwiejEiLCJiYyIsInhjIiwiR2MiLCJ6MCIsImRpc3RhbmNlIiwiemYiLCJzZXRSZWxhdGl2ZSIsInRvdWNoIiwiSGMiLCJ0b3VjaGVkIiwicHJldlRvdWNoZWQiLCJuZXh0VG91Y2hlZCIsImludGVycG9sYXRlIiwiSWMiLCJKYyIsImNvbnRvdXJzIiwiS2MiLCJOYyIsIlFjIiwiY3Z0IiwiY3ZDdXRJbiIsIlhjIiwiWWMiLCJtZCIsInBwZW0iLCJkZWx0YUJhc2UiLCJkZWx0YVNoaWZ0IiwieGQiLCJ6ZCIsIkdkIiwiTmQiLCJPZCIsIlBkIiwibWluRGlzIiwiUWQiLCJlbXB0eSIsImZhbWlseU5hbWUiLCJzdHlsZU5hbWUiLCJ1bml0c1BlckVtIiwiYXNjZW5kZXIiLCJkZXNjZW5kZXIiLCJmb250RmFtaWx5IiwiZW4iLCJmb250U3ViZmFtaWx5IiwiZnVsbE5hbWUiLCJwb3N0U2NyaXB0TmFtZSIsImRlc2lnbmVyIiwiZGVzaWduZXJVUkwiLCJtYW51ZmFjdHVyZXIiLCJtYW51ZmFjdHVyZXJVUkwiLCJsaWNlbnNlIiwibGljZW5zZVVSTCIsImRlc2NyaXB0aW9uIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiY3JlYXRlZFRpbWVzdGFtcCIsIm9zMiIsInVzV2VpZ2h0Q2xhc3MiLCJ3ZWlnaHRDbGFzcyIsInVzV2VpZ2h0Q2xhc3NlcyIsIk1FRElVTSIsInVzV2lkdGhDbGFzcyIsIndpZHRoQ2xhc3MiLCJ1c1dpZHRoQ2xhc3NlcyIsImZzU2VsZWN0aW9uIiwiZnNTZWxlY3Rpb25WYWx1ZXMiLCJSRUdVTEFSIiwiU2UiLCJHbHlwaFNldCIsInN1YnN0aXR1dGlvbiIsIl9oaW50aW5nIiwib3V0bGluZXNGb3JtYXQiLCJSZCIsIlNkIiwiVGQiLCJwYXJzZVRhZyIsInBhcnNlRml4ZWQiLCJza2lwIiwiVWQiLCJjb29yZGluYXRlcyIsIlZkIiwiY2UiLCJyZWFkRmlsZSIsIm1lc3NhZ2UiLCJlZSIsImdldFRhZyIsImdldFVMb25nIiwiY2hlY2tzdW0iLCJjb21wcmVzc2lvbiIsImdlIiwiY29tcHJlc3NlZExlbmd0aCIsIndlIiwiaGUiLCJnZXRVU2hvcnQiLCJmZSIsIk1lIiwicGFyc2UiLCJwYXJzZVNob3J0TGlzdCIsImZwZ20iLCJwYXJzZUJ5dGVMaXN0IiwiaGVhZCIsIldlIiwiaW5kZXhUb0xvY0Zvcm1hdCIsImhoZWEiLCJYZSIsIm51bWJlck9mSE1ldHJpY3MiLCJaZSIsIm1heHAiLCIkZSIsIm51bUdseXBocyIsImpmIiwicG9zdCIsImtmIiwiZ2x5cGhOYW1lcyIsInByZXAiLCJnZiIsIkhmIiwiVmUiLCJZZSIsImdseXBoSW5kZXhNYXAiLCJhZGRVbmljb2RlIiwiY2ZmRW5jb2RpbmciLCJnbHlwaEluZGV4VG9OYW1lIiwia2VybmluZ1BhaXJzIiwiR2YiLCJncG9zIiwiRmYiLCJpbml0IiwiZ3N1YiIsIm9mIiwiZnZhciIsIkNmIiwibWV0YSIsInBmIiwibWV0YXMiLCJjb2RlUG9pbnRBdCIsIm1lIiwibmUiLCJpc0VtcHR5IiwiYWRkUG9pbnQiLCJhZGRYIiwiYWRkWSIsImFkZEJlemllciIsImFkZFF1YWQiLCJiZXppZXJDdXJ2ZVRvIiwicXVhZFRvIiwiZ2V0Qm91bmRpbmdCb3giLCJkcmF3IiwiYmVnaW5QYXRoIiwiZmlsbFN0eWxlIiwic3Ryb2tlU3R5bGUiLCJsaW5lV2lkdGgiLCJ0b1BhdGhEYXRhIiwidG9TVkciLCJ0b0RPTUVsZW1lbnQiLCJ6ZSIsIkFlIiwiQmUiLCJDZSIsIkJZVEUiLCJDSEFSIiwiQ0hBUkFSUkFZIiwiVVNIT1JUIiwiU0hPUlQiLCJVSU5UMjQiLCJVTE9ORyIsIkxPTkciLCJGSVhFRCIsIkZXT1JEIiwiVUZXT1JEIiwiTE9OR0RBVEVUSU1FIiwiVEFHIiwiQ2FyZDgiLCJDYXJkMTYiLCJPZmZTaXplIiwiU0lEIiwiTlVNQkVSIiwiTlVNQkVSMTYiLCJOVU1CRVIzMiIsIlJFQUwiLCJOQU1FIiwiU1RSSU5HIiwiVVRGOCIsIlVURjE2IiwiRGUiLCJ4LW1hYy1jcm9hdGlhbiIsIngtbWFjLWN5cmlsbGljIiwieC1tYWMtZ2FlbGljIiwieC1tYWMtZ3JlZWsiLCJ4LW1hYy1pY2VsYW5kaWMiLCJ4LW1hYy1pbnVpdCIsIngtbWFjLWNlIiwibWFjaW50b3NoIiwieC1tYWMtcm9tYW5pYW4iLCJ4LW1hYy10dXJraXNoIiwiTUFDU1RSSU5HIiwiRWUiLCJGZSIsIldlYWtNYXAiLCJHZSIsIlZBUkRFTFRBUyIsIklOREVYIiwiT0JKRUNUIiwiRElDVCIsIk9QRVJBTkQiLCJPUEVSQVRPUiIsIk9QIiwiSGUiLCJDSEFSU1RSSU5HIiwiVEFCTEUiLCJSRUNPUkQiLCJMSVRFUkFMIiwiQ292ZXJhZ2UiLCJTY3JpcHRMaXN0IiwiRmVhdHVyZUxpc3QiLCJMb29rdXBMaXN0IiwidXNob3J0TGlzdCIsInRhYmxlTGlzdCIsInJlY29yZExpc3QiLCJKZSIsImJ5dGUiLCJ1U2hvcnQiLCJzaG9ydCIsInVMb25nIiwiZml4ZWQiLCJsb25nRGF0ZVRpbWUiLCJnZXRJbnQ4IiwicGFyc2VDYXJkOCIsInBhcnNlQ2FyZDE2IiwicGFyc2VTSUQiLCJwYXJzZU9mZnNldDE2IiwicGFyc2VVTG9uZyIsInBhcnNlT2Zmc2V0MzIiLCJwYXJzZVN0cmluZyIsInBhcnNlTG9uZ0RhdGVUaW1lIiwicGFyc2VWZXJzaW9uIiwicGFyc2VVTG9uZ0xpc3QiLCJwYXJzZU9mZnNldDE2TGlzdCIsInBhcnNlVVNob3J0TGlzdCIsInBhcnNlTGlzdCIsInBhcnNlTGlzdDMyIiwicGFyc2VSZWNvcmRMaXN0IiwicGFyc2VSZWNvcmRMaXN0MzIiLCJwYXJzZVN0cnVjdCIsInBhcnNlVmFsdWVSZWNvcmQiLCJ4UGxhY2VtZW50IiwieVBsYWNlbWVudCIsInhBZHZhbmNlIiwieUFkdmFuY2UiLCJ4UGxhRGV2aWNlIiwieVBsYURldmljZSIsInhBZHZEZXZpY2UiLCJ5QWR2RGV2aWNlIiwicGFyc2VWYWx1ZVJlY29yZExpc3QiLCJwYXJzZVBvaW50ZXIiLCJwYXJzZVBvaW50ZXIzMiIsInBhcnNlTGlzdE9mTGlzdHMiLCJwYXJzZUNvdmVyYWdlIiwicmFuZ2VzIiwicGFyc2VDbGFzc0RlZiIsInN0YXJ0R2x5cGgiLCJjbGFzc2VzIiwiY2xhc3NJZCIsImxpc3QiLCJsaXN0MzIiLCJyZWNvcmRMaXN0MzIiLCJwb2ludGVyIiwicG9pbnRlcjMyIiwib2Zmc2V0MTYiLCJ1U2hvcnRMaXN0Iiwib2Zmc2V0MzIiLCJ1TG9uZ0xpc3QiLCJzdHJ1Y3QiLCJjb3ZlcmFnZSIsImNsYXNzRGVmIiwiS2UiLCJyZXNlcnZlZCIsInBhcnNlU2NyaXB0TGlzdCIsInBhcnNlRmVhdHVyZUxpc3QiLCJwYXJzZUxvb2t1cExpc3QiLCJtYXJrRmlsdGVyaW5nU2V0IiwicGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3QiLCJjb25kaXRpb25TZXRPZmZzZXQiLCJmZWF0dXJlVGFibGVTdWJzdGl0dXRpb25PZmZzZXQiLCJnZXRDYXJkOCIsImdldFNob3J0IiwiZ2V0Rml4ZWQiLCJieXRlc1RvU3RyaW5nIiwibGFuZ3VhZ2UiLCJncm91cENvdW50Iiwic2VnQ291bnQiLCJtYWtlIiwidW5pY29kZSIsInVuaWNvZGVzIiwiZ2x5cGhJZCIsInNlZ0NvdW50WDIiLCJjbWFwNExlbmd0aCIsImNtYXAxMk9mZnNldCIsIk9lIiwiUGUiLCJuYW1lVG9HbHlwaEluZGV4IiwiUmUiLCJsaW5lIiwieE1pbiIsInlNaW4iLCJ4TWF4IiwieU1heCIsImhpbnRpbmciLCJnZXRDb250b3VycyIsImxlZnRTaWRlQmVhcmluZyIsInJpZ2h0U2lkZUJlYXJpbmciLCJkcmF3UG9pbnRzIiwiYXJjIiwiZHJhd01ldHJpY3MiLCJnbHlwaExvYWRlciIsInR0ZkdseXBoTG9hZGVyIiwiY2ZmR2x5cGhMb2FkZXIiLCJmb3JtYXRNYWpvciIsImZvcm1hdE1pbm9yIiwib2Zmc2V0U2l6ZSIsInJvcyIsImZkQXJyYXkiLCJmZFNlbGVjdCIsInlhIiwic3VicnNCaWFzIiwiY2hhclN0cmluZ3MiLCJuR2x5cGhzIiwidmEiLCJ3YSIsIndlaWdodCIsIndlaWdodE5hbWUiLCJmb250QkJveCIsImZvbnRNYXRyaXgiLCJoZWFkZXIiLCJuYW1lSW5kZXgiLCJDYSIsInRvcERpY3RJbmRleCIsImdsb2JhbFN1YnJJbmRleCIsImNoYXJzZXRzIiwiSWEiLCJjaGFyU3RyaW5nc0luZGV4IiwiS2EiLCJwcml2YXRlRGljdCIsIkxhIiwic3RyaW5nSW5kZXgiLCJzdHJpbmdzIiwiR2EiLCJmb250UmV2aXNpb24iLCJjaGVja1N1bUFkanVzdG1lbnQiLCJtYWdpY051bWJlciIsImZsYWdzIiwiY3JlYXRlZCIsIm1vZGlmaWVkIiwibWFjU3R5bGUiLCJsb3dlc3RSZWNQUEVNIiwiZm9udERpcmVjdGlvbkhpbnQiLCJnbHlwaERhdGFGb3JtYXQiLCJnZXRUaW1lIiwibGluZUdhcCIsImFkdmFuY2VXaWR0aE1heCIsIm1pbkxlZnRTaWRlQmVhcmluZyIsIm1pblJpZ2h0U2lkZUJlYXJpbmciLCJ4TWF4RXh0ZW50IiwiY2FyZXRTbG9wZVJpc2UiLCJjYXJldFNsb3BlUnVuIiwiY2FyZXRPZmZzZXQiLCJtZXRyaWNEYXRhRm9ybWF0IiwibWF4UG9pbnRzIiwibWF4Q29udG91cnMiLCJtYXhDb21wb3NpdGVQb2ludHMiLCJtYXhDb21wb3NpdGVDb250b3VycyIsIm1heFpvbmVzIiwibWF4VHdpbGlnaHRQb2ludHMiLCJtYXhTdG9yYWdlIiwibWF4RnVuY3Rpb25EZWZzIiwibWF4SW5zdHJ1Y3Rpb25EZWZzIiwibWF4U3RhY2tFbGVtZW50cyIsIm1heFNpemVPZkluc3RydWN0aW9ucyIsIm1heENvbXBvbmVudEVsZW1lbnRzIiwibWF4Q29tcG9uZW50RGVwdGgiLCJfZSIsIjAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiLCIyMCIsIjIxIiwiMjIiLCIyMyIsIjI0IiwiMjUiLCIyNiIsIjI3IiwiMjgiLCIyOSIsIjMwIiwiMzEiLCIzMiIsIjMzIiwiMzQiLCIzNSIsIjM2IiwiMzciLCIzOCIsIjM5IiwiNDAiLCI0MSIsIjQyIiwiNDMiLCI0NCIsIjQ1IiwiNDYiLCI0NyIsIjQ4IiwiNDkiLCI1MCIsIjUxIiwiNTIiLCI1MyIsIjU0IiwiNTUiLCI1NiIsIjU3IiwiNTgiLCI1OSIsIjYwIiwiNjEiLCI2MiIsIjYzIiwiNjQiLCI2NSIsIjY2IiwiNjciLCI2OCIsIjY5IiwiNzAiLCI3MSIsIjcyIiwiNzMiLCI3NCIsIjc1IiwiNzYiLCI3NyIsIjc4IiwiNzkiLCI4MCIsIjgxIiwiODIiLCI4MyIsIjg0IiwiODUiLCI4NiIsIjg3IiwiODgiLCI4OSIsIjkwIiwiOTEiLCI5MiIsIjkzIiwiOTQiLCIxMjgiLCIxMjkiLCIxMzAiLCIxMzEiLCIxMzIiLCIxMzMiLCIxMzQiLCIxMzUiLCIxMzYiLCIxMzciLCIxMzgiLCIxMzkiLCIxNDAiLCIxNDEiLCIxNDIiLCIxNDMiLCIxNDQiLCIxNDUiLCIxNDYiLCIxNDciLCIxNDgiLCIxNDkiLCIxNTAiLCIxNTEiLCJiZiIsIjEwNzgiLCIxMDUyIiwiMTE1NiIsIjExMTgiLCI1MTIxIiwiMTUzNjEiLCIzMDczIiwiMjA0OSIsIjExMjY1IiwiMTMzMTMiLCIxMjI4OSIsIjQwOTciLCI2MTQ1IiwiODE5MyIsIjE2Mzg1IiwiMTAyNSIsIjEwMjQxIiwiNzE2OSIsIjE0MzM3IiwiOTIxNyIsIjEwNjciLCIxMTAxIiwiMjA5MiIsIjEwNjgiLCIxMTMzIiwiMTA2OSIsIjEwNTkiLCIyMTE3IiwiMTA5MyIsIjgyMTgiLCI1MTQ2IiwiMTE1MCIsIjEwMjYiLCIxMDI3IiwiMzA3NiIsIjUxMjQiLCIyMDUyIiwiNDEwMCIsIjEwMjgiLCIxMTU1IiwiMTA1MCIsIjQxMjIiLCIxMDI5IiwiMTAzMCIsIjExNjQiLCIxMTI1IiwiMjA2NyIsIjEwNDMiLCIzMDgxIiwiMTAyNDkiLCI0MTA1IiwiOTIyNSIsIjE2MzkzIiwiNjE1MyIsIjgyMDEiLCIxNzQxNyIsIjUxMjkiLCIxMzMyMSIsIjE4NDQxIiwiNzE3NyIsIjExMjczIiwiMjA1NyIsIjEwMzMiLCIxMjI5NyIsIjEwNjEiLCIxMDgwIiwiMTEyNCIsIjEwMzUiLCIyMDYwIiwiMzA4NCIsIjEwMzYiLCI1MTMyIiwiNjE1NiIsIjQxMDgiLCIxMTIyIiwiMTExMCIsIjEwNzkiLCIzMDc5IiwiMTAzMSIsIjUxMjciLCI0MTAzIiwiMjA1NSIsIjEwMzIiLCIxMTM1IiwiMTA5NSIsIjExMjgiLCIxMDM3IiwiMTA4MSIsIjEwMzgiLCIxMDM5IiwiMTEzNiIsIjEwNTciLCIxMTE3IiwiMjE0MSIsIjIxMDgiLCIxMDc2IiwiMTA3NyIsIjEwNDAiLCIyMDY0IiwiMTA0MSIsIjEwOTkiLCIxMDg3IiwiMTEwNyIsIjExNTgiLCIxMTU5IiwiMTA4OSIsIjExMTEiLCIxMDQyIiwiMTA4OCIsIjExMDgiLCIxMDYyIiwiMTA2MyIsIjIwOTQiLCIxMTM0IiwiMTA3MSIsIjIxMTAiLCIxMDg2IiwiMTEwMCIsIjEwODIiLCIxMTUzIiwiMTE0NiIsIjExMDIiLCIxMTQ4IiwiMTEwNCIsIjIxMjgiLCIxMTIxIiwiMTA0NCIsIjIwNjgiLCIxMTU0IiwiMTA5NiIsIjExMjMiLCIxMDQ1IiwiMTA0NiIsIjIwNzAiLCIxMDk0IiwiMTEzMSIsIjIxNTUiLCIzMTc5IiwiMTA0OCIsIjEwNDciLCIxMDQ5IiwiOTI3NSIsIjQxNTUiLCI1MTc5IiwiMzEzMSIsIjEwODMiLCIyMTA3IiwiODI1MSIsIjYyMDMiLCI3MjI3IiwiMTEwMyIsIjcxOTQiLCIzMDk4IiwiNjE3MCIsIjIwNzQiLCIxMTMyIiwiMTA3NCIsIjExMTUiLCIxMDUxIiwiMTA2MCIsIjExMjc0IiwiMTYzOTQiLCIxMzMyMiIsIjkyMjYiLCI1MTMwIiwiNzE3OCIsIjEyMjk4IiwiMTc0MTgiLCI0MTA2IiwiMTg0NDIiLCIyMDU4IiwiMTk0NjYiLCI2MTU0IiwiMTUzNzAiLCIxMDI1MCIsIjIwNDkwIiwiMzA4MiIsIjEwMzQiLCIyMTUxNCIsIjE0MzQ2IiwiODIwMiIsIjIwNzciLCIxMDUzIiwiMTExNCIsIjEwNjQiLCIyMTQzIiwiMTA5NyIsIjEwOTIiLCIxMDk4IiwiMTA1NCIsIjExMDUiLCIxMDU1IiwiMTA5MCIsIjExNTIiLCIxMDU4IiwiMTA3MCIsIjEwNTYiLCIyMTE1IiwiMTA5MSIsIjEwNjYiLCIxMTA2IiwiMTE2MCIsIjExNTciLCIxMTQ0IiwiMTEzMCIsInBsYXRmb3JtSUQiLCJlbmNvZGluZ0lEIiwibGFuZ3VhZ2VJRCIsIm5hbWVJRCIsImhmIiwiYmVnaW4iLCJ4QXZnQ2hhcldpZHRoIiwiZnNUeXBlIiwieVN1YnNjcmlwdFhTaXplIiwieVN1YnNjcmlwdFlTaXplIiwieVN1YnNjcmlwdFhPZmZzZXQiLCJ5U3Vic2NyaXB0WU9mZnNldCIsInlTdXBlcnNjcmlwdFhTaXplIiwieVN1cGVyc2NyaXB0WVNpemUiLCJ5U3VwZXJzY3JpcHRYT2Zmc2V0IiwieVN1cGVyc2NyaXB0WU9mZnNldCIsInlTdHJpa2VvdXRTaXplIiwieVN0cmlrZW91dFBvc2l0aW9uIiwic0ZhbWlseUNsYXNzIiwicGFub3NlIiwidWxVbmljb2RlUmFuZ2UxIiwidWxVbmljb2RlUmFuZ2UyIiwidWxVbmljb2RlUmFuZ2UzIiwidWxVbmljb2RlUmFuZ2U0IiwiYWNoVmVuZElEIiwidXNGaXJzdENoYXJJbmRleCIsInVzTGFzdENoYXJJbmRleCIsInNUeXBvQXNjZW5kZXIiLCJzVHlwb0Rlc2NlbmRlciIsInNUeXBvTGluZUdhcCIsInVzV2luQXNjZW50IiwidXNXaW5EZXNjZW50IiwidWxDb2RlUGFnZVJhbmdlMSIsInVsQ29kZVBhZ2VSYW5nZTIiLCJzeEhlaWdodCIsInNDYXBIZWlnaHQiLCJ1c0RlZmF1bHRDaGFyIiwidXNCcmVha0NoYXIiLCJ1c01heENvbnRlbnQiLCJ1bmljb2RlUmFuZ2VzIiwiZ2V0VW5pY29kZVJhbmdlIiwiaXRhbGljQW5nbGUiLCJ1bmRlcmxpbmVQb3NpdGlvbiIsInVuZGVybGluZVRoaWNrbmVzcyIsImlzRml4ZWRQaXRjaCIsIm1pbk1lbVR5cGU0MiIsIm1heE1lbVR5cGU0MiIsIm1pbk1lbVR5cGUxIiwibWF4TWVtVHlwZTEiLCJsZiIsImRlbHRhR2x5cGhJZCIsInN1YnN0aXR1dGUiLCJzZXF1ZW5jZXMiLCJhbHRlcm5hdGVTZXRzIiwibGlnYXR1cmVTZXRzIiwibGlnR2x5cGgiLCJtZiIsInNlcXVlbmNlSW5kZXgiLCJsb29rdXBMaXN0SW5kZXgiLCJydWxlU2V0cyIsImxvb2t1cFJlY29yZHMiLCJjbGFzc1NldHMiLCJjb3ZlcmFnZXMiLCJjaGFpblJ1bGVTZXRzIiwiYmFja3RyYWNrIiwibG9va2FoZWFkIiwiYmFja3RyYWNrQ2xhc3NEZWYiLCJpbnB1dENsYXNzRGVmIiwibG9va2FoZWFkQ2xhc3NEZWYiLCJjaGFpbkNsYXNzU2V0IiwiYmFja3RyYWNrQ292ZXJhZ2UiLCJpbnB1dENvdmVyYWdlIiwibG9va2FoZWFkQ292ZXJhZ2UiLCJzdWJzdGl0dXRlcyIsIm5mIiwic2NyaXB0cyIsImZlYXR1cmVzIiwibG9va3VwcyIsInZhcmlhdGlvbnMiLCJxZiIsImZvbnRUb1RhYmxlIiwiYWR2YW5jZVdpZHRoQXZnIiwicmIiLCJtYXhMZWZ0U2lkZUJlYXJpbmciLCJoYXNDaGFyIiwiZ2V0RW5nbGlzaE5hbWUiLCJ1bmlxdWVJRCIsInByZWZlcnJlZEZhbWlseSIsInByZWZlcnJlZFN1YmZhbWlseSIsImNvbXB1dGVDaGVja1N1bSIsInNlYXJjaFRhZyIsImJpblNlYXJjaCIsImdldFRhYmxlIiwiY3JlYXRlRGVmYXVsdFRhYmxlIiwiZ2V0U2NyaXB0TmFtZXMiLCJnZXREZWZhdWx0U2NyaXB0TmFtZSIsImdldFNjcmlwdFRhYmxlIiwiZ2V0TGFuZ1N5c1RhYmxlIiwiZ2V0RmVhdHVyZVRhYmxlIiwiZ2V0TG9va3VwVGFibGVzIiwiZ2V0R2x5cGhDbGFzcyIsImdldENvdmVyYWdlSW5kZXgiLCJleHBhbmRDb3ZlcmFnZSIsImRlZmF1bHRLZXJuaW5nVGFibGVzIiwiZ2V0S2VybmluZ1RhYmxlcyIsImdldEtlcm5pbmdWYWx1ZSIsInBvc0Zvcm1hdCIsInBhaXJTZXRzIiwic2Vjb25kR2x5cGgiLCJ2YWx1ZTEiLCJjbGFzc0RlZjEiLCJjbGFzc0RlZjIiLCJjbGFzc1JlY29yZHMiLCJnZXRTaW5nbGUiLCJzdWIiLCJieSIsImdldEFsdGVybmF0ZXMiLCJnZXRMaWdhdHVyZXMiLCJhZGRTaW5nbGUiLCJhZGRBbHRlcm5hdGUiLCJhZGRMaWdhdHVyZSIsImdldEZlYXR1cmUiLCJyZiIsInNmIiwidGYiLCJ1ZiIsIndmIiwic3JQZXJpb2QiLCJzclBoYXNlIiwic3JUaHJlc2hvbGQiLCJ0cnVuYyIsIk5FR0FUSVZFX0lORklOSVRZIiwidW50b3VjaCIsIlBPU0lUSVZFX0lORklOSVRZIiwiQWYiLCJhdXRvRmxpcCIsImZ1bmNzIiwiaW5oaWJpdEdyaWRGaXQiLCJzdG9yZSIsImlnbm9yZUN2dCIsIkJmIiwiY2hhclRvR2x5cGgiLCJzdHJpbmdUb0dseXBocyIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibGlnYSIsInJsaWciLCJuYW1lVG9HbHlwaCIsImtlcm5pbmciLCJmb3JFYWNoR2x5cGgiLCJsZXR0ZXJTcGFjaW5nIiwidHJhY2tpbmciLCJnZXRQYXRocyIsImdldEFkdmFuY2VXaWR0aCIsInZhbGlkYXRlIiwidG9UYWJsZXMiLCJ0b0J1ZmZlciIsInJlcXVlc3RGaWxlU3lzdGVtIiwid2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0iLCJURU1QT1JBUlkiLCJyb290IiwiZ2V0RmlsZSIsImNyZWF0ZVdyaXRlciIsInRvVVJMIiwid3JpdGVGaWxlU3luYyIsIklUQUxJQyIsIlVOREVSU0NPUkUiLCJORUdBVElWRSIsIk9VVExJTkVEIiwiU1RSSUtFT1VUIiwiQk9MRCIsIlVTRVJfVFlQT19NRVRSSUNTIiwiV1dTIiwiT0JMSVFVRSIsIlVMVFJBX0NPTkRFTlNFRCIsIkVYVFJBX0NPTkRFTlNFRCIsIkNPTkRFTlNFRCIsIlNFTUlfQ09OREVOU0VEIiwiU0VNSV9FWFBBTkRFRCIsIkVYUEFOREVEIiwiRVhUUkFfRVhQQU5ERUQiLCJVTFRSQV9FWFBBTkRFRCIsIlRISU4iLCJFWFRSQV9MSUdIVCIsIkxJR0hUIiwiTk9STUFMIiwiU0VNSV9CT0xEIiwiRVhUUkFfQk9MRCIsIkJMQUNLIiwiYXhlcyIsImluc3RhbmNlcyIsIm9mZnNldFRvRGF0YSIsIkRmIiwidmFsdWVGb3JtYXQxIiwidmFsdWVGb3JtYXQyIiwidmFsdWUyIiwiY2xhc3MxQ291bnQiLCJjbGFzczJDb3VudCIsIkVmIiwiJGQiLCJfZCIsIkZvbnQiLCJHbHlwaCIsIlBhdGgiLCJCb3VuZGluZ0JveCIsIl9wYXJzZSIsInN0YXR1c1RleHQiLCJsb2FkU3luYyIsInJlYWRGaWxlU3luYyIsImZzIiwicnVuIiwiZnVuIiwidGl0bGUiLCJicm93c2VyIiwiYXJndiIsInZlcnNpb25zIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsInJlbW92ZUFsbExpc3RlbmVycyIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJiaW5kaW5nIiwiY3dkIiwiY2hkaXIiLCJ1bWFzayIsIml0ZXJhYmxlIiwiYXBwZW5kIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImJvZHlVc2VkIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJpc1Byb3RvdHlwZU9mIiwiX2JvZHlCbG9iIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJzZWFyY2hQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJhcnJheUJ1ZmZlciIsIl9ib2R5QXJyYXlCdWZmZXIiLCJoZWFkZXJzIiwidGV4dCIsInJlYWRBc1RleHQiLCJib2R5IiwiY3JlZGVudGlhbHMiLCJ0b1VwcGVyQ2FzZSIsInJlZmVycmVyIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZmV0Y2giLCJpc1ZpZXciLCJkZWxldGUiLCJlbnRyaWVzIiwiY2xvbmUiLCJyZWRpcmVjdCIsIkhlYWRlcnMiLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsIm9udGltZW91dCIsIndpdGhDcmVkZW50aWFscyIsInNldFJlcXVlc3RIZWFkZXIiLCIuL2NvbG9yL2NvbG9yX2NvbnZlcnNpb24iLCIuL2NvbG9yL2NyZWF0aW5nX3JlYWRpbmciLCIuL2NvbG9yL3A1LkNvbG9yIiwiLi9jb2xvci9zZXR0aW5nIiwiLi9jb3JlL2NvbnN0YW50cyIsIi4vY29yZS9lbnZpcm9ubWVudCIsIi4vY29yZS9lcnJvcl9oZWxwZXJzIiwiLi9jb3JlL2hlbHBlcnMiLCIuL2NvcmUvaW5pdCIsIi4vY29yZS9sZWdhY3kiLCIuL2NvcmUvbWFpbiIsIi4vY29yZS9wNS5FbGVtZW50IiwiLi9jb3JlL3A1LkdyYXBoaWNzIiwiLi9jb3JlL3A1LlJlbmRlcmVyIiwiLi9jb3JlL3A1LlJlbmRlcmVyMkQiLCIuL2NvcmUvcmVuZGVyaW5nIiwiLi9jb3JlL3NoYXBlLzJkX3ByaW1pdGl2ZXMiLCIuL2NvcmUvc2hhcGUvYXR0cmlidXRlcyIsIi4vY29yZS9zaGFwZS9jdXJ2ZXMiLCIuL2NvcmUvc2hhcGUvdmVydGV4IiwiLi9jb3JlL3NoaW0iLCIuL2NvcmUvc3RydWN0dXJlIiwiLi9jb3JlL3RyYW5zZm9ybSIsIi4vZGF0YS9wNS5UeXBlZERpY3QiLCIuL2V2ZW50cy9hY2NlbGVyYXRpb24iLCIuL2V2ZW50cy9rZXlib2FyZCIsIi4vZXZlbnRzL21vdXNlIiwiLi9ldmVudHMvdG91Y2giLCIuL2ltYWdlL2ZpbHRlcnMiLCIuL2ltYWdlL2ltYWdlIiwiLi9pbWFnZS9sb2FkaW5nX2Rpc3BsYXlpbmciLCIuL2ltYWdlL3A1LkltYWdlIiwiLi9pbWFnZS9waXhlbHMiLCIuL2lvL2ZpbGVzIiwiLi9pby9wNS5UYWJsZSIsIi4vaW8vcDUuVGFibGVSb3ciLCIuL2lvL3A1LlhNTCIsIi4vbWF0aC9jYWxjdWxhdGlvbiIsIi4vbWF0aC9tYXRoIiwiLi9tYXRoL25vaXNlIiwiLi9tYXRoL3A1LlZlY3RvciIsIi4vbWF0aC9yYW5kb20iLCIuL21hdGgvdHJpZ29ub21ldHJ5IiwiLi90eXBvZ3JhcGh5L2F0dHJpYnV0ZXMiLCIuL3R5cG9ncmFwaHkvbG9hZGluZ19kaXNwbGF5aW5nIiwiLi90eXBvZ3JhcGh5L3A1LkZvbnQiLCIuL3V0aWxpdGllcy9hcnJheV9mdW5jdGlvbnMiLCIuL3V0aWxpdGllcy9jb252ZXJzaW9uIiwiLi91dGlsaXRpZXMvc3RyaW5nX2Z1bmN0aW9ucyIsIi4vdXRpbGl0aWVzL3RpbWVfZGF0ZSIsIi4vd2ViZ2wvM2RfcHJpbWl0aXZlcyIsIi4vd2ViZ2wvaW50ZXJhY3Rpb24iLCIuL3dlYmdsL2xpZ2h0IiwiLi93ZWJnbC9sb2FkaW5nIiwiLi93ZWJnbC9tYXRlcmlhbCIsIi4vd2ViZ2wvcDUuQ2FtZXJhIiwiLi93ZWJnbC9wNS5HZW9tZXRyeSIsIi4vd2ViZ2wvcDUuTWF0cml4IiwiLi93ZWJnbC9wNS5SZW5kZXJlckdMIiwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLkltbWVkaWF0ZSIsIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5SZXRhaW5lZCIsIi4vd2ViZ2wvcDUuU2hhZGVyIiwiLi93ZWJnbC9wNS5UZXh0dXJlIiwiLi93ZWJnbC90ZXh0IiwiQ29sb3JDb252ZXJzaW9uIiwiX2hzYmFUb0hTTEEiLCJfaHNiYVRvUkdCQSIsIl9oc2xhVG9IU0JBIiwiX2hzbGFUb1JHQkEiLCJfcmdiYVRvSFNCQSIsIl9yZ2JhVG9IU0xBIiwiLi4vY29yZS9tYWluIiwiYWxwaGEiLCJfdmFsaWRhdGVQYXJhbWV0ZXJzIiwiY29sb3IiLCJfZ2V0QWxwaGEiLCJibHVlIiwiX2dldEJsdWUiLCJicmlnaHRuZXNzIiwiX2dldEJyaWdodG5lc3MiLCJDb2xvciIsImdyZWVuIiwiX2dldEdyZWVuIiwiaHVlIiwiX2dldEh1ZSIsImxlcnBDb2xvciIsIl9jb2xvck1vZGUiLCJfY29sb3JNYXhlcyIsIlJHQiIsImxldmVscyIsIkhTQiIsImhzYmEiLCJIU0wiLCJfZ2V0TGlnaHRuZXNzIiwiaHNsYSIsImxlcnAiLCJsaWdodG5lc3MiLCJyZWQiLCJfZ2V0UmVkIiwic2F0dXJhdGlvbiIsIl9nZXRTYXR1cmF0aW9uIiwiLi4vY29yZS9jb25zdGFudHMiLCIuLi9jb3JlL2Vycm9yX2hlbHBlcnMiLCIuL3A1LkNvbG9yIiwiX3N0b3JlTW9kZUFuZE1heGVzIiwiX2FycmF5IiwiX3BhcnNlSW5wdXRzIiwiX2NhbGN1bGF0ZUxldmVscyIsInRvUHJlY2lzaW9uIiwibWF4ZXMiLCJzZXRSZWQiLCJzZXRHcmVlbiIsInNldEJsdWUiLCJzZXRBbHBoYSIsIl9nZXRNb2RlIiwiX2dldE1heGVzIiwiYWxpY2VibHVlIiwiYW50aXF1ZXdoaXRlIiwiYXF1YSIsImFxdWFtYXJpbmUiLCJhenVyZSIsImJlaWdlIiwiYmlzcXVlIiwiYmxhY2siLCJibGFuY2hlZGFsbW9uZCIsImJsdWV2aW9sZXQiLCJidXJseXdvb2QiLCJjYWRldGJsdWUiLCJjaGFydHJldXNlIiwiY2hvY29sYXRlIiwiY29yYWwiLCJjb3JuZmxvd2VyYmx1ZSIsImNvcm5zaWxrIiwiY3JpbXNvbiIsImN5YW4iLCJkYXJrYmx1ZSIsImRhcmtjeWFuIiwiZGFya2dvbGRlbnJvZCIsImRhcmtncmF5IiwiZGFya2dyZWVuIiwiZGFya2dyZXkiLCJkYXJra2hha2kiLCJkYXJrbWFnZW50YSIsImRhcmtvbGl2ZWdyZWVuIiwiZGFya29yYW5nZSIsImRhcmtvcmNoaWQiLCJkYXJrcmVkIiwiZGFya3NhbG1vbiIsImRhcmtzZWFncmVlbiIsImRhcmtzbGF0ZWJsdWUiLCJkYXJrc2xhdGVncmF5IiwiZGFya3NsYXRlZ3JleSIsImRhcmt0dXJxdW9pc2UiLCJkYXJrdmlvbGV0IiwiZGVlcHBpbmsiLCJkZWVwc2t5Ymx1ZSIsImRpbWdyYXkiLCJkaW1ncmV5IiwiZG9kZ2VyYmx1ZSIsImZpcmVicmljayIsImZsb3JhbHdoaXRlIiwiZm9yZXN0Z3JlZW4iLCJmdWNoc2lhIiwiZ2FpbnNib3JvIiwiZ2hvc3R3aGl0ZSIsImdvbGQiLCJnb2xkZW5yb2QiLCJncmF5IiwiZ3JlZW55ZWxsb3ciLCJncmV5IiwiaG9uZXlkZXciLCJob3RwaW5rIiwiaW5kaWFucmVkIiwiaW5kaWdvIiwiaXZvcnkiLCJraGFraSIsImxhdmVuZGVyIiwibGF2ZW5kZXJibHVzaCIsImxhd25ncmVlbiIsImxlbW9uY2hpZmZvbiIsImxpZ2h0Ymx1ZSIsImxpZ2h0Y29yYWwiLCJsaWdodGN5YW4iLCJsaWdodGdvbGRlbnJvZHllbGxvdyIsImxpZ2h0Z3JheSIsImxpZ2h0Z3JlZW4iLCJsaWdodGdyZXkiLCJsaWdodHBpbmsiLCJsaWdodHNhbG1vbiIsImxpZ2h0c2VhZ3JlZW4iLCJsaWdodHNreWJsdWUiLCJsaWdodHNsYXRlZ3JheSIsImxpZ2h0c2xhdGVncmV5IiwibGlnaHRzdGVlbGJsdWUiLCJsaWdodHllbGxvdyIsImxpbWUiLCJsaW1lZ3JlZW4iLCJsaW5lbiIsIm1hZ2VudGEiLCJtYXJvb24iLCJtZWRpdW1hcXVhbWFyaW5lIiwibWVkaXVtYmx1ZSIsIm1lZGl1bW9yY2hpZCIsIm1lZGl1bXB1cnBsZSIsIm1lZGl1bXNlYWdyZWVuIiwibWVkaXVtc2xhdGVibHVlIiwibWVkaXVtc3ByaW5nZ3JlZW4iLCJtZWRpdW10dXJxdW9pc2UiLCJtZWRpdW12aW9sZXRyZWQiLCJtaWRuaWdodGJsdWUiLCJtaW50Y3JlYW0iLCJtaXN0eXJvc2UiLCJtb2NjYXNpbiIsIm5hdmFqb3doaXRlIiwibmF2eSIsIm9sZGxhY2UiLCJvbGl2ZSIsIm9saXZlZHJhYiIsIm9yYW5nZSIsIm9yYW5nZXJlZCIsIm9yY2hpZCIsInBhbGVnb2xkZW5yb2QiLCJwYWxlZ3JlZW4iLCJwYWxldHVycXVvaXNlIiwicGFsZXZpb2xldHJlZCIsInBhcGF5YXdoaXAiLCJwZWFjaHB1ZmYiLCJwZXJ1IiwicGx1bSIsInBvd2RlcmJsdWUiLCJwdXJwbGUiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZXNtb2tlIiwieWVsbG93IiwieWVsbG93Z3JlZW4iLCJSZWdFeHAiLCJIRVgzIiwiSEVYNCIsIkhFWDYiLCJIRVg4IiwiUkdCX1BFUkNFTlQiLCJSR0JBIiwiUkdCQV9QRVJDRU5UIiwiSFNMQSIsIkhTQkEiLCIuL2NvbG9yX2NvbnZlcnNpb24iLCJiYWNrZ3JvdW5kIiwiSW1hZ2UiLCJpbWFnZSIsIl9yZW5kZXJlciIsImNvbG9yTW9kZSIsIl9zZXRQcm9wZXJ0eSIsIm5vRmlsbCIsIm5vU3Ryb2tlIiwiUDJEIiwiV0VCR0wiLCJBUlJPVyIsIkNST1NTIiwiSEFORCIsIk1PVkUiLCJURVhUIiwiV0FJVCIsIkhBTEZfUEkiLCJRVUFSVEVSX1BJIiwiVEFVIiwiVFdPX1BJIiwiREVHUkVFUyIsIlJBRElBTlMiLCJERUdfVE9fUkFEIiwiUkFEX1RPX0RFRyIsIkNPUk5FUiIsIkNPUk5FUlMiLCJSQURJVVMiLCJSSUdIVCIsIkxFRlQiLCJDRU5URVIiLCJUT1AiLCJCT1RUT00iLCJCQVNFTElORSIsIlBPSU5UUyIsIkxJTkVTIiwiTElORV9TVFJJUCIsIkxJTkVfTE9PUCIsIlRSSUFOR0xFUyIsIlRSSUFOR0xFX0ZBTiIsIlRSSUFOR0xFX1NUUklQIiwiUVVBRFMiLCJRVUFEX1NUUklQIiwiQ0xPU0UiLCJPUEVOIiwiQ0hPUkQiLCJQSUUiLCJQUk9KRUNUIiwiU1FVQVJFIiwiUk9VTkQiLCJCRVZFTCIsIk1JVEVSIiwiQVVUTyIsIkFMVCIsIkJBQ0tTUEFDRSIsIkNPTlRST0wiLCJERUxFVEUiLCJET1dOX0FSUk9XIiwiRU5URVIiLCJFU0NBUEUiLCJMRUZUX0FSUk9XIiwiT1BUSU9OIiwiUkVUVVJOIiwiUklHSFRfQVJST1ciLCJTSElGVCIsIlRBQiIsIlVQX0FSUk9XIiwiQkxFTkQiLCJBREQiLCJEQVJLRVNUIiwiTElHSFRFU1QiLCJESUZGRVJFTkNFIiwiRVhDTFVTSU9OIiwiTVVMVElQTFkiLCJTQ1JFRU4iLCJSRVBMQUNFIiwiT1ZFUkxBWSIsIkhBUkRfTElHSFQiLCJTT0ZUX0xJR0hUIiwiRE9ER0UiLCJCVVJOIiwiVEhSRVNIT0xEIiwiR1JBWSIsIk9QQVFVRSIsIklOVkVSVCIsIlBPU1RFUklaRSIsIkRJTEFURSIsIkVST0RFIiwiQkxVUiIsIl9ERUZBVUxUX1RFWFRfRklMTCIsIl9ERUZBVUxUX0xFQURNVUxUIiwiX0NUWF9NSURETEUiLCJMSU5FQVIiLCJRVUFEUkFUSUMiLCJCRVpJRVIiLCJDVVJWRSIsIlNUUk9LRSIsIkZJTEwiLCJURVhUVVJFIiwiSU1NRURJQVRFIiwiTkVBUkVTVCIsIlJFUEVBVCIsIkNMQU1QIiwiTUlSUk9SIiwiTEFORFNDQVBFIiwiUE9SVFJBSVQiLCJfREVGQVVMVF9TVFJPS0UiLCJfREVGQVVMVF9GSUxMIiwiR1JJRCIsIkFYRVMiLCJpbm5lcldpZHRoIiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50V2lkdGgiLCJpbm5lckhlaWdodCIsImNsaWVudEhlaWdodCIsIl9mcmFtZVJhdGUiLCJfbGFzdEZyYW1lVGltZSIsInBlcmZvcm1hbmNlIiwiX3RhcmdldEZyYW1lUmF0ZSIsInByaW50IiwiZnJhbWVDb3VudCIsImZvY3VzZWQiLCJoYXNGb2N1cyIsImN1cnNvciIsIl9jdXJFbGVtZW50IiwiZWx0Iiwic3R5bGUiLCJmcmFtZVJhdGUiLCJfcnVuRnJhbWVzIiwiZ2V0RnJhbWVSYXRlIiwic2V0RnJhbWVSYXRlIiwibm9DdXJzb3IiLCJkaXNwbGF5V2lkdGgiLCJzY3JlZW4iLCJkaXNwbGF5SGVpZ2h0Iiwid2luZG93V2lkdGgiLCJ3aW5kb3dIZWlnaHQiLCJfb25yZXNpemUiLCJfaXNHbG9iYWwiLCJ3aW5kb3dSZXNpemVkIiwicHJldmVudERlZmF1bHQiLCJmdWxsc2NyZWVuIiwiZnVsbHNjcmVlbkVsZW1lbnQiLCJ3ZWJraXRGdWxsc2NyZWVuRWxlbWVudCIsIm1vekZ1bGxTY3JlZW5FbGVtZW50IiwibXNGdWxsc2NyZWVuRWxlbWVudCIsImZ1bGxzY3JlZW5FbmFibGVkIiwid2Via2l0RnVsbHNjcmVlbkVuYWJsZWQiLCJtb3pGdWxsU2NyZWVuRW5hYmxlZCIsIm1zRnVsbHNjcmVlbkVuYWJsZWQiLCJyZXF1ZXN0RnVsbHNjcmVlbiIsIm1velJlcXVlc3RGdWxsU2NyZWVuIiwid2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4iLCJtc1JlcXVlc3RGdWxsc2NyZWVuIiwiZXhpdEZ1bGxzY3JlZW4iLCJtb3pDYW5jZWxGdWxsU2NyZWVuIiwid2Via2l0RXhpdEZ1bGxzY3JlZW4iLCJtc0V4aXRGdWxsc2NyZWVuIiwicGl4ZWxEZW5zaXR5IiwiX3BpeGVsRGVuc2l0eSIsIl9waXhlbHNEaXJ0eSIsInJlc2l6ZUNhbnZhcyIsImRpc3BsYXlEZW5zaXR5IiwiZGV2aWNlUGl4ZWxSYXRpbyIsImdldFVSTCIsImdldFVSTFBhdGgiLCJwYXRobmFtZSIsImdldFVSTFBhcmFtcyIsImxhc3RJbmRleCIsIi4vY29uc3RhbnRzIiwiLi9tYWluIiwiX2ZyaWVuZGx5RmlsZUxvYWRFcnJvciIsInNvbWUiLCJfaGVscEZvck1pc3VzZWRBdFRvcExldmVsQ29kZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCIuLi8uLi9kb2NzL3JlZmVyZW5jZS9kYXRhLmpzb24iLCJtb2RlQWRqdXN0IiwibW9jaGEiLCJzZXR1cCIsImluc3RhbmNlIiwiZXhpdCIsInB1c2hTdHlsZSIsInBvcFN0eWxlIiwiX3NldHVwRG9uZSIsIl91c2VyTm9kZSIsIl9lbGVtZW50cyIsIl9yZXF1ZXN0QW5pbUlkIiwiX3ByZWxvYWRDb3VudCIsIl9pbml0aWFsaXplSW5zdGFuY2VWYXJpYWJsZXMiLCJfZGVmYXVsdENhbnZhc1NpemUiLCJtb3VzZW1vdmUiLCJtb3VzZWRvd24iLCJtb3VzZXVwIiwiZHJhZ2VuZCIsImRyYWdvdmVyIiwiY2xpY2siLCJkYmxjbGljayIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0Iiwia2V5ZG93biIsImtleXVwIiwia2V5cHJlc3MiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIiwidG91Y2hlbmQiLCJyZXNpemUiLCJibHVyIiwid2hlZWwiLCJfbG9hZGluZ1NjcmVlbklkIiwiX3JlZ2lzdGVyZWRNZXRob2RzIiwiRGV2aWNlT3JpZW50YXRpb25FdmVudCIsImRldmljZW9yaWVudGF0aW9uIiwiRGV2aWNlTW90aW9uRXZlbnQiLCJfaXNOb2RlV2Via2l0IiwiZGV2aWNlbW90aW9uIiwicHJlbG9hZCIsImlubmVySFRNTCIsIl9wcmVsb2FkTWV0aG9kcyIsIl93cmFwUHJlbG9hZCIsIl9yZWdpc3RlcmVkUHJlbG9hZE1ldGhvZHMiLCJfcnVuSWZQcmVsb2Fkc0FyZURvbmUiLCJfc2V0dXAiLCJfZHJhdyIsInBhcmVudE5vZGUiLCJfZGVjcmVtZW50UHJlbG9hZCIsIl9pbmNyZW1lbnRQcmVsb2FkIiwiY3JlYXRlQ2FudmFzIiwiZGF0YXNldCIsImhpZGRlbiIsInZpc2liaWxpdHkiLCJyZWRyYXciLCJfdXBkYXRlTW91c2VDb29yZHMiLCJjbGVhckludGVydmFsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJfY3JlYXRlRnJpZW5kbHlHbG9iYWxGdW5jdGlvbkJpbmRlciIsInBhc3NpdmUiLCJyZWdpc3Rlck1ldGhvZCIsIl9zdHlsZXMiLCJfYmV6aWVyRGV0YWlsIiwiX2N1cnZlRGV0YWlsIiwicmdiIiwiaHNiIiwiaHNsIiwiZGlzYWJsZUZyaWVuZGx5RXJyb3JzIiwibG9hZEpTT04iLCJsb2FkSW1hZ2UiLCJsb2FkU3RyaW5ncyIsImxvYWRYTUwiLCJsb2FkQnl0ZXMiLCJsb2FkVGFibGUiLCJsb2FkRm9udCIsImxvYWRNb2RlbCIsImxvYWRTaGFkZXIiLCJwcmUiLCJyZWdpc3RlclByZWxvYWRNZXRob2QiLCJnbG9iYWxPYmplY3QiLCIuL3NoaW0iLCJFbGVtZW50IiwiX3BJbnN0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJjbGFzcyIsIm1vdXNlUHJlc3NlZCIsIl9zZXRNb3VzZUJ1dHRvbiIsImRvdWJsZUNsaWNrZWQiLCJtb3VzZVdoZWVsIiwibW91c2VSZWxlYXNlZCIsIm1vdXNlQ2xpY2tlZCIsIm1vdXNlTW92ZWQiLCJtb3VzZU92ZXIiLCJjaGFuZ2VkIiwibW91c2VPdXQiLCJ0b3VjaFN0YXJ0ZWQiLCJ0b3VjaE1vdmVkIiwidG91Y2hFbmRlZCIsImRyYWdPdmVyIiwiZHJhZ0xlYXZlIiwiZHJvcCIsIkZpbGUiLCJ0YXJnZXQiLCJGaWxlTGlzdCIsInN0b3BQcm9wYWdhdGlvbiIsImRhdGFUcmFuc2ZlciIsImZpbGVzIiwiR3JhcGhpY3MiLCJjYW52YXMiLCJSZW5kZXJlckdMIiwiUmVuZGVyZXIyRCIsIl9hcHBseURlZmF1bHRzIiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0TGVmdCIsIm9mZnNldFRvcCIsIlJlbmRlcmVyIiwiX2lzTWFpbkNhbnZhcyIsImRpc3BsYXkiLCJfdGV4dFNpemUiLCJfdGV4dExlYWRpbmciLCJfdGV4dEZvbnQiLCJfdGV4dFN0eWxlIiwiX3RleHRBc2NlbnQiLCJfdGV4dERlc2NlbnQiLCJfdGV4dEFsaWduIiwiX3RleHRCYXNlbGluZSIsIl9yZWN0TW9kZSIsIl9lbGxpcHNlTW9kZSIsIl9jdXJ2ZVRpZ2h0bmVzcyIsIl9pbWFnZU1vZGUiLCJfdGludCIsIl9kb1N0cm9rZSIsIl9kb0ZpbGwiLCJfc3Ryb2tlU2V0IiwiX2ZpbGxTZXQiLCJwcm9wZXJ0aWVzIiwidGV4dExlYWRpbmciLCJ0ZXh0U2l6ZSIsIl9hcHBseVRleHRQcm9wZXJ0aWVzIiwidGV4dFN0eWxlIiwidGV4dEFzY2VudCIsIl91cGRhdGVUZXh0TWV0cmljcyIsInRleHREZXNjZW50IiwidGV4dEFsaWduIiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwiTUFYX1ZBTFVFIiwidGV4dFdpZHRoIiwiX3JlbmRlclRleHQiLCJfaXNPcGVuVHlwZSIsImZvbnRTaXplIiwib3ZlcmZsb3ciLCJ2ZXJ0aWNhbEFsaWduIiwiZHJhd2luZ0NvbnRleHQiLCJfY2FjaGVkRmlsbFN0eWxlIiwiX2NhY2hlZFN0cm9rZVN0eWxlIiwiX3NldEZpbGwiLCJfc2V0U3Ryb2tlIiwibGluZUNhcCIsInNjYWxlIiwic2F2ZSIsInJlc2V0TWF0cml4IiwiX2dldEZpbGwiLCJmaWxsUmVjdCIsInJlc3RvcmUiLCJjbGVhclJlY3QiLCJNZWRpYUVsZW1lbnQiLCJsb2FkUGl4ZWxzIiwiX2dldFRpbnRlZEltYWdlQ2FudmFzIiwiZHJhd0ltYWdlIiwiX3RvUGl4ZWxzIiwiY3JlYXRlSW1hZ2VEYXRhIiwicHV0SW1hZ2VEYXRhIiwiYmxlbmRNb2RlIiwiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIiwiYmxlbmQiLCJfY29weUhlbHBlciIsImdldEltYWdlRGF0YSIsInBpeGVscyIsInNldFRyYW5zZm9ybSIsImltYWdlRGF0YSIsInVwZGF0ZVBpeGVscyIsIl9hY3V0ZUFyY1RvQmV6aWVyIiwiYXkiLCJjeSIsImVsbGlwc2UiLCJfZ2V0U3Ryb2tlIiwidHJhbnNsYXRlIiwicXVhZCIsInJlY3QiLCJhcmNUbyIsInRyaWFuZ2xlIiwiZW5kU2hhcGUiLCJQT0xZR09OIiwiX2RvRmlsbFN0cm9rZUNsb3NlIiwiaXNWZXJ0Iiwibm9TbW9vdGgiLCJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCJzbW9vdGgiLCJzdHJva2VDYXAiLCJzdHJva2VKb2luIiwibGluZUpvaW4iLCJzdHJva2VXZWlnaHQiLCJiZXppZXIiLCJiZWdpblNoYXBlIiwidmVydGV4IiwiYmV6aWVyVmVydGV4IiwiY3VydmVWZXJ0ZXgiLCJhcHBseU1hdHJpeCIsInRyYW5zZm9ybSIsInJvdGF0ZSIsInNoZWFyWCIsInNoZWFyWSIsIlZlY3RvciIsInRleHRCYXNlbGluZSIsIl9yZW5kZXJQYXRoIiwicmVuZGVyZXIiLCJzdHJva2VUZXh0IiwiZmlsbFRleHQiLCJfdGV4dFdpZHRoIiwibWVhc3VyZVRleHQiLCIuLi9pbWFnZS9maWx0ZXJzIiwiLi9wNS5SZW5kZXJlciIsImNsYXNzTGlzdCIsIl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkIiwibm9DYW52YXMiLCJjcmVhdGVHcmFwaGljcyIsIi4uL3dlYmdsL3A1LlJlbmRlcmVyR0wiLCIuL3A1LkdyYXBoaWNzIiwiLi9wNS5SZW5kZXJlcjJEIiwiX3RvUmFkaWFucyIsImF0YW4iLCIuLi9jb25zdGFudHMiLCIuLi9lcnJvcl9oZWxwZXJzIiwiLi4vaGVscGVycyIsIi4uL21haW4iLCJlbGxpcHNlTW9kZSIsInJlY3RNb2RlIiwiYmV6aWVyRGV0YWlsIiwiYmV6aWVyUG9pbnQiLCJiZXppZXJUYW5nZW50IiwiY3VydmVEZXRhaWwiLCJjdXJ2ZVRpZ2h0bmVzcyIsImN1cnZlUG9pbnQiLCJjdXJ2ZVRhbmdlbnQiLCJiZWdpbkNvbnRvdXIiLCJpc1AzRCIsImVuZENvbnRvdXIiLCJxdWFkcmF0aWNWZXJ0ZXgiLCJfY29udG91ckluaXRlZCIsIngzIiwieTMiLCJfY29udG91clZlcnRpY2VzIiwid2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwibW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwib1JlcXVlc3RBbmltYXRpb25GcmFtZSIsIm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJub0xvb3AiLCJwcm9wcyIsIl91cGRhdGUiLCJwb3BNYXRyaXgiLCJwcmludE1hdHJpeCIsInB1c2hNYXRyaXgiLCJyb3RhdGVYIiwiX2Fzc2VydDNkIiwicm90YXRlWSIsInJvdGF0ZVoiLCJjcmVhdGVTdHJpbmdEaWN0IiwiU3RyaW5nRGljdCIsImNyZWF0ZU51bWJlckRpY3QiLCJOdW1iZXJEaWN0IiwiVHlwZWREaWN0IiwiaGFzS2V5IiwiX3ZhbGlkYXRlIiwiX2FkZE9iaiIsInNhdmVUYWJsZSIsImRvd25sb2FkRmlsZSIsInNhdmVKU09OIiwiZGl2IiwiX3ZhbHVlVGVzdCIsIl9rZXlUZXN0IiwibWluS2V5IiwibWF4S2V5IiwiZGV2aWNlT3JpZW50YXRpb24iLCJhY2NlbGVyYXRpb25YIiwiYWNjZWxlcmF0aW9uWSIsImFjY2VsZXJhdGlvbloiLCJwQWNjZWxlcmF0aW9uWCIsInBBY2NlbGVyYXRpb25ZIiwicEFjY2VsZXJhdGlvbloiLCJfdXBkYXRlUEFjY2VsZXJhdGlvbnMiLCJyb3RhdGlvblgiLCJyb3RhdGlvblkiLCJyb3RhdGlvbloiLCJwUm90YXRpb25YIiwicFJvdGF0aW9uWSIsInBSb3RhdGlvbloiLCJfdXBkYXRlUFJvdGF0aW9ucyIsInR1cm5BeGlzIiwic2V0TW92ZVRocmVzaG9sZCIsInNldFNoYWtlVGhyZXNob2xkIiwiX29uZGV2aWNlb3JpZW50YXRpb24iLCJiZXRhIiwiZ2FtbWEiLCJfaGFuZGxlTW90aW9uIiwiX29uZGV2aWNlbW90aW9uIiwiYWNjZWxlcmF0aW9uIiwib3JpZW50YXRpb24iLCJkZXZpY2VNb3ZlZCIsImRldmljZVR1cm5lZCIsImRldmljZVNoYWtlbiIsImlzS2V5UHJlc3NlZCIsImtleUlzUHJlc3NlZCIsImtleUNvZGUiLCJfb25rZXlkb3duIiwid2hpY2giLCJrZXlQcmVzc2VkIiwiY2hhckNvZGUiLCJfb25rZXl1cCIsImtleVJlbGVhc2VkIiwiX29ua2V5cHJlc3MiLCJfbGFzdEtleUNvZGVUeXBlZCIsImtleVR5cGVkIiwiX29uYmx1ciIsImtleUlzRG93biIsIl9oYXNNb3VzZUludGVyYWN0ZWQiLCJtb3VzZVgiLCJtb3VzZVkiLCJwbW91c2VYIiwicG1vdXNlWSIsIndpbk1vdXNlWCIsIndpbk1vdXNlWSIsInB3aW5Nb3VzZVgiLCJwd2luTW91c2VZIiwibW91c2VCdXR0b24iLCJtb3VzZUlzUHJlc3NlZCIsIl91cGRhdGVOZXh0TW91c2VDb29yZHMiLCJ0b3VjaGVzIiwiY2xpZW50WCIsImNoYW5nZWRUb3VjaGVzIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwic2Nyb2xsV2lkdGgiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRZIiwidG9wIiwid2luWCIsIndpblkiLCJpZGVudGlmaWVyIiwiX21vdXNlV2hlZWxEZWx0YVkiLCJidXR0b24iLCJfb25tb3VzZW1vdmUiLCJtb3VzZURyYWdnZWQiLCJfb25tb3VzZWRvd24iLCJfb25tb3VzZXVwIiwiX29uZHJhZ2VuZCIsIl9vbmRyYWdvdmVyIiwiX29uY2xpY2siLCJfb25kYmxjbGljayIsIl9wbW91c2VXaGVlbERlbHRhWSIsIl9vbndoZWVsIiwiZGVsdGFZIiwiX3VwZGF0ZVRvdWNoQ29vcmRzIiwiX29udG91Y2hzdGFydCIsIl9vbnRvdWNobW92ZSIsIl9vbnRvdWNoZW5kIiwiSW50MzJBcnJheSIsIl9nZXRBUkdCIiwiX3NldFBpeGVscyIsIkltYWdlRGF0YSIsIl90b0ltYWdlRGF0YSIsIl9jcmVhdGVJbWFnZURhdGEiLCJfdG1wQ2FudmFzIiwiX3RtcEN0eCIsIm9wYXF1ZSIsImludmVydCIsInBvc3Rlcml6ZSIsImRpbGF0ZSIsImVyb2RlIiwiY3JlYXRlSW1hZ2UiLCJzYXZlQ2FudmFzIiwiSFRNTENhbnZhc0VsZW1lbnQiLCJfY2hlY2tGaWxlRXh0ZW5zaW9uIiwidG9CbG9iIiwic2F2ZUZyYW1lcyIsImNvbnN0cmFpbiIsIl9tYWtlRnJhbWUiLCJzZXRJbnRlcnZhbCIsImZpbGVuYW1lIiwiZXh0IiwidG9EYXRhVVJMIiwiY3Jvc3NPcmlnaW4iLCJ2aWRlb1dpZHRoIiwidmlkZW9IZWlnaHQiLCJ0aW50Iiwibm9UaW50IiwiaW1hZ2VNb2RlIiwiLi4vY29yZS9oZWxwZXJzIiwiLi9maWx0ZXJzIiwiX21vZGlmaWVkIiwic2V0TW9kaWZpZWQiLCJtYXNrIiwiaXNNb2RpZmllZCIsIi4uL2NvbG9yL3A1LkNvbG9yIiwiaHR0cERvIiwibGFzdEluZGV4T2YiLCJjdXJyZW50U3RhdGUiLCJ0b2tlbiIsImVzY2FwZWQiLCJjb2x1bW5zIiwiVGFibGVSb3ciLCJvYmoiLCJhZGRSb3ciLCJieXRlcyIsImh0dHBHZXQiLCJodHRwUG9zdCIsIkNvbnRlbnQtVHlwZSIsIlhNTCIsImNoaWxkTm9kZXMiLCJhZGRDaGlsZCIsInNldE5hbWUiLCJub2RlTmFtZSIsIl9zZXRDb250IiwidGV4dENvbnRlbnQiLCJfc2V0QXR0cmlidXRlcyIsImNoaWxkcmVuIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiX3BXcml0ZXJzIiwiUHJpbnRXcml0ZXIiLCJtaWxsaXMiLCJ3cml0ZUZpbGUiLCJzYXZlU3RyaW5ncyIsIlNvdW5kRmlsZSIsInNhdmVTb3VuZCIsInNhdmVKU09OT2JqZWN0Iiwic2F2ZUpTT05BcnJheSIsInJvd3MiLCJnZXRTdHJpbmciLCJfaXNTYWZhcmkiLCJvbmNsaWNrIiwiYWxlcnQiLCJlczYtcHJvbWlzZSIsImZldGNoLWpzb25wIiwiZmlsZS1zYXZlciIsIndoYXR3Zy1mZXRjaCIsInJlbW92ZVJvdyIsImdldFJvdyIsImdldFJvd3MiLCJmaW5kUm93IiwiZmluZFJvd3MiLCJtYXRjaFJvdyIsIm1hdGNoUm93cyIsImdldENvbHVtbiIsImNsZWFyUm93cyIsImFkZENvbHVtbiIsImdldENvbHVtbkNvdW50IiwiZ2V0Um93Q291bnQiLCJyZW1vdmVUb2tlbnMiLCJyZW1vdmVDb2x1bW4iLCJzZXROdW0iLCJzZXRTdHJpbmciLCJnZXROdW0iLCJnZXRPYmplY3QiLCJnZXRBcnJheSIsImF0dHJpYnV0ZXMiLCJnZXRQYXJlbnQiLCJnZXROYW1lIiwiaGFzQ2hpbGRyZW4iLCJsaXN0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbiIsImdldENoaWxkIiwiZ2V0QXR0cmlidXRlQ291bnQiLCJsaXN0QXR0cmlidXRlcyIsImhhc0F0dHJpYnV0ZSIsImdldENvbnRlbnQiLCJzZXRDb250ZW50Iiwibm9kZVZhbHVlIiwiaHlwb3QiLCJtYWciLCJub3JtIiwic3EiLCJjcmVhdGVWZWN0b3IiLCJub2lzZURldGFpbCIsIm5vaXNlU2VlZCIsInNldFNlZWQiLCJnZXRTZWVkIiwicDUiLCJtYWdTcSIsImNyb3NzIiwibm9ybWFsaXplIiwibGltaXQiLCJzZXRNYWciLCJoZWFkaW5nIiwiYXRhbjIiLCJfZnJvbVJhZGlhbnMiLCJhbmdsZUJldHdlZW4iLCJhY29zIiwiZnJvbUFuZ2xlIiwiZnJvbUFuZ2xlcyIsInJhbmRvbTJEIiwicmFuZG9tM0QiLCJyYW5kb21TZWVkIiwicmFuZG9tR2F1c3NpYW4iLCJfYW5nbGVNb2RlIiwiYXNpbiIsImRlZ3JlZXMiLCJyYWRpYW5zIiwiYW5nbGVNb2RlIiwiX3RvRGVncmVlcyIsInRleHRGb250Iiwib3BlbnR5cGUuanMiLCJzYW1wbGVGYWN0b3IiLCJzaW1wbGlmeVRocmVzaG9sZCIsInRtcFBvaW50MSIsInRtcFBvaW50MiIsInF4IiwicXkiLCJjYWNoZSIsInRleHRCb3VuZHMiLCJhZHZhbmNlIiwiX2hhbmRsZUFsaWdubWVudCIsInRleHRUb1BvaW50cyIsIl9nZXRHbHlwaHMiLCJfZ2V0UGF0aCIsIl9nZXRQYXRoRGF0YSIsImRlY2ltYWxzIiwiX2dldFNWRyIsImFycmF5Q29weSIsInNob3J0ZW4iLCJzaHVmZmxlIiwic3Vic2V0IiwiZmxvYXQiLCJpbnQiLCJzdHIiLCJib29sZWFuIiwiY2hhciIsInVuY2hhciIsImhleCIsInVuaGV4IiwibWF0Y2hBbGwiLCJuZmMiLCJuZnAiLCJuZnMiLCJzcGxpdFRva2VucyIsImRheSIsImdldERhdGUiLCJob3VyIiwiZ2V0SG91cnMiLCJtaW51dGUiLCJnZXRNaW51dGVzIiwibW9udGgiLCJnZXRNb250aCIsInNlY29uZCIsImdldFNlY29uZHMiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJwbGFuZSIsImdlb21ldHJ5SW5IYXNoIiwiR2VvbWV0cnkiLCJkZXRhaWxZIiwiZGV0YWlsWCIsInZlcnRpY2VzIiwidXZzIiwiY29tcHV0ZUZhY2VzIiwiY29tcHV0ZU5vcm1hbHMiLCJfbWFrZVRyaWFuZ2xlRWRnZXMiLCJfZWRnZXNUb1ZlcnRpY2VzIiwiZHJhd0J1ZmZlcnNTY2FsZWQiLCJib3giLCJwZXJQaXhlbExpZ2h0aW5nIiwic3Ryb2tlSW5kaWNlcyIsImZhY2VzIiwic3BoZXJlIiwiZWxsaXBzb2lkIiwidmVydGV4Tm9ybWFscyIsImN5bGluZGVyIiwiY29uZSIsInRvcnVzIiwiX3VzZVBvaW50U2hhZGVyIiwiY3VyUG9pbnRTaGFkZXIiLCJiaW5kU2hhZGVyIiwiX2RyYXdQb2ludHMiLCJfcG9pbnRWZXJ0ZXhCdWZmZXIiLCJ1bmJpbmRTaGFkZXIiLCJ1TVZNYXRyaXgiLCJNYXRyaXgiLCJkcmF3QnVmZmVycyIsImltbWVkaWF0ZU1vZGUiLCJfYmV6aWVyVmVydGV4IiwiX2xvb2tVcFRhYmxlQmV6aWVyIiwiX2x1dEJlemllckRldGFpbCIsIl9iZXppZXJDb2VmZmljaWVudHMiLCJpc0JlemllciIsIl9xdWFkcmF0aWNWZXJ0ZXgiLCJfbG9va1VwVGFibGVRdWFkcmF0aWMiLCJfbHV0UXVhZHJhdGljRGV0YWlsIiwiX3F1YWRyYXRpY0NvZWZmaWNpZW50cyIsImlzUXVhZHJhdGljIiwiX2N1cnZlVmVydGV4IiwiaXNDdXJ2ZSIsIl9iZXppZXJUb0NhdG11bGwiLCIuL3A1Lkdlb21ldHJ5Iiwib3JiaXRDb250cm9sIiwiX2N1ckNhbWVyYSIsImNvbnRleHRNZW51RGlzYWJsZWQiLCJvbmNvbnRleHRtZW51Iiwid2hlZWxEZWZhdWx0RGlzYWJsZWQiLCJvbndoZWVsIiwiX29yYml0IiwiX2dldExvY2FsQXhlcyIsImV5ZVgiLCJleWVZIiwiZXllWiIsImRlYnVnTW9kZSIsIl9ncmlkIiwiX2F4ZXNJY29uIiwibm9EZWJ1Z01vZGUiLCJjdXJTdHJva2VDb2xvciIsImNhbWVyYU1hdHJpeCIsIm1hdDQiLCJhbWJpZW50TGlnaHQiLCJfdXNlTGlnaHRTaGFkZXIiLCJzZXRVbmlmb3JtIiwiY3VyRmlsbENvbG9yIiwiYW1iaWVudExpZ2h0Q29sb3JzIiwiZGlyZWN0aW9uYWxMaWdodCIsImRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25zIiwiZGlyZWN0aW9uYWxMaWdodENvbG9ycyIsInBvaW50TGlnaHQiLCJwb2ludExpZ2h0UG9zaXRpb25zIiwicG9pbnRMaWdodENvbG9ycyIsImdpZCIsInZ0Iiwidm4iLCJtb2RlbCIsIlNoYWRlciIsIl9mcmFnU3JjIiwiX3ZlcnRTcmMiLCJjcmVhdGVTaGFkZXIiLCJzaGFkZXIiLCJpc1N0cm9rZVNoYWRlciIsInNldFN0cm9rZVNoYWRlciIsInNldEZpbGxTaGFkZXIiLCJub3JtYWxNYXRlcmlhbCIsImRyYXdNb2RlIiwiX2dldE5vcm1hbFNoYWRlciIsInRleHR1cmUiLCJhbWJpZW50TWF0ZXJpYWwiLCJzcGVjdWxhck1hdGVyaWFsIiwiX2FwcGx5Q29sb3JCbGVuZCIsIkdMIiwiZGVwdGhNYXNrIiwiZW5hYmxlIiwiYmxlbmRFcXVhdGlvbiIsIkZVTkNfQUREIiwiYmxlbmRGdW5jIiwiU1JDX0FMUEhBIiwiT05FX01JTlVTX1NSQ19BTFBIQSIsImRpc2FibGUiLCIuL3A1LlRleHR1cmUiLCJjYW1lcmEiLCJwZXJzcGVjdGl2ZSIsIm9ydGhvIiwiY3JlYXRlQ2FtZXJhIiwiQ2FtZXJhIiwiX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3MiLCJfc2V0RGVmYXVsdENhbWVyYSIsImNhbWVyYVR5cGUiLCJwcm9qTWF0cml4IiwiZGVmYXVsdENhbWVyYUZPViIsImNhbWVyYUZPViIsImRlZmF1bHRBc3BlY3RSYXRpbyIsImRlZmF1bHRDYW1lcmFOZWFyIiwiZGVmYXVsdENhbWVyYUZhciIsImFzcGVjdFJhdGlvIiwiY2FtZXJhTmVhciIsImNhbWVyYUZhciIsImlkZW50aXR5IiwiX2lzQWN0aXZlIiwidVBNYXRyaXgiLCJfcm90YXRlVmlldyIsImNlbnRlclgiLCJjZW50ZXJZIiwiY2VudGVyWiIsInRpbHQiLCJsb29rQXQiLCJkZWZhdWx0RXllWCIsImRlZmF1bHRFeWVZIiwiZGVmYXVsdEV5ZVoiLCJtb3ZlIiwiZGVmYXVsdENlbnRlclgiLCJkZWZhdWx0Q2VudGVyWSIsImRlZmF1bHRDZW50ZXJaIiwiX3Jlc2l6ZSIsInNldENhbWVyYSIsImxpbmVWZXJ0aWNlcyIsImxpbmVOb3JtYWxzIiwiZWRnZXMiLCJfZ2V0RmFjZU5vcm1hbCIsImF2ZXJhZ2VOb3JtYWxzIiwiYXZlcmFnZVBvbGVOb3JtYWxzIiwibWF0MyIsImludmVydDN4MyIsInRyYW5zcG9zZTN4MyIsImludmVyc2VUcmFuc3Bvc2UiLCJkZXRlcm1pbmFudCIsInNoYXBlTW9kZSIsInZlcnRleENvbG9ycyIsInV2Q29vcmRzIiwidmVydGV4QnVmZmVyIiwiY29sb3JCdWZmZXIiLCJ1dkJ1ZmZlciIsImxpbmVWZXJ0ZXhCdWZmZXIiLCJsaW5lTm9ybWFsQnVmZmVyIiwicG9pbnRWZXJ0ZXhCdWZmZXIiLCJpc0ltbWVkaWF0ZURyYXdpbmciLCJfdXNlSW1tZWRpYXRlTW9kZVNoYWRlciIsIl9kcmF3U3Ryb2tlSW1tZWRpYXRlTW9kZSIsIl92VG9OQXJyYXkiLCJfdHJpYW5ndWxhdGUiLCJfZHJhd0ZpbGxJbW1lZGlhdGVNb2RlIiwiY3VyRmlsbFNoYWRlciIsImFQb3NpdGlvbiIsIl9iaW5kQnVmZmVyIiwiQVJSQVlfQlVGRkVSIiwiRFlOQU1JQ19EUkFXIiwiZW5hYmxlQXR0cmliIiwiRkxPQVQiLCJhVmVydGV4Q29sb3IiLCJhVGV4Q29vcmQiLCJkcmF3QXJyYXlzIiwiY3VyU3Ryb2tlU2hhZGVyIiwiX2ZsYXR0ZW4iLCJTVEFUSUNfRFJBVyIsImFEaXJlY3Rpb24iLCJfaW5pdEJ1ZmZlckRlZmF1bHRzIiwiX2ZyZWVCdWZmZXJzIiwiZ0hhc2giLCJkZWxldGVCdWZmZXIiLCJub3JtYWxCdWZmZXIiLCJpbmRleEJ1ZmZlciIsIm51bWJlck9mSXRlbXMiLCJsaW5lVmVydGV4Q291bnQiLCJfdXNlQ29sb3JTaGFkZXIiLCJFTEVNRU5UX0FSUkFZX0JVRkZFUiIsImFOb3JtYWwiLCJfZHJhd0FycmF5cyIsIl9kcmF3RWxlbWVudHMiLCJkcmF3RWxlbWVudHMiLCJVTlNJR05FRF9TSE9SVCIsIlBvaW50cyIsImltbWVkaWF0ZVZlcnQiLCJ2ZXJ0ZXhDb2xvclZlcnQiLCJ2ZXJ0ZXhDb2xvckZyYWciLCJub3JtYWxWZXJ0Iiwibm9ybWFsRnJhZyIsImJhc2ljRnJhZyIsImxpZ2h0VmVydCIsImxpZ2h0VGV4dHVyZUZyYWciLCJwaG9uZ1ZlcnQiLCJwaG9uZ0ZyYWciLCJmb250VmVydCIsImZvbnRGcmFnIiwibGluZVZlcnQiLCJsaW5lRnJhZyIsInBvaW50VmVydCIsInBvaW50RnJhZyIsInN0ZW5jaWwiLCJhbnRpYWxpYXMiLCJwcmVtdWx0aXBsaWVkQWxwaGEiLCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIiLCJfaW5pdENvbnRleHQiLCJ1Tk1hdHJpeCIsIl9kZWZhdWx0TGlnaHRTaGFkZXIiLCJfZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXIiLCJfZGVmYXVsdE5vcm1hbFNoYWRlciIsIl9kZWZhdWx0Q29sb3JTaGFkZXIiLCJfZGVmYXVsdFBvaW50U2hhZGVyIiwiX2dldExpbmVTaGFkZXIiLCJwb2ludFNpemUiLCJ0ZXh0dXJlcyIsIl90ZXNzeSIsIl9pbml0VGVzc3kiLCJmb250SW5mb3MiLCJERVBUSF9URVNUIiwiZGVwdGhGdW5jIiwiTEVRVUFMIiwidmlld3BvcnQiLCJkcmF3aW5nQnVmZmVyV2lkdGgiLCJkcmF3aW5nQnVmZmVySGVpZ2h0IiwiX3ZpZXdwb3J0IiwiZ2V0UGFyYW1ldGVyIiwiVklFV1BPUlQiLCJfcmVzZXRDb250ZXh0Iiwic2V0QXR0cmlidXRlcyIsImNsZWFyQ29sb3IiLCJDT0xPUl9CVUZGRVJfQklUIiwiREVQVEhfQlVGRkVSX0JJVCIsIl9nZXRJbW1lZGlhdGVNb2RlU2hhZGVyIiwiX2dldENvbG9yU2hhZGVyIiwiY3VyU3Ryb2tlV2VpZ2h0IiwicmVhZFBpeGVscyIsIlVOU0lHTkVEX0JZVEUiLCJzZXRQb2ludFNoYWRlciIsImlzTGlnaHRTaGFkZXIiLCJfZ2V0TGlnaHRTaGFkZXIiLCJfZ2V0UG9pbnRTaGFkZXIiLCJfZGVmYXVsdExpbmVTaGFkZXIiLCJfZ2V0Rm9udFNoYWRlciIsIl9kZWZhdWx0Rm9udFNoYWRlciIsImdldEV4dGVuc2lvbiIsIl9nZXRFbXB0eVRleHR1cmUiLCJfZW1wdHlUZXh0dXJlIiwiVGV4dHVyZSIsImdldFRleHR1cmUiLCJiaW5kQnVmZmVyIiwiYnVmZmVyRGF0YSIsIi4uL2NvcmUvcDUuUmVuZGVyZXIiLCIuL3A1LkNhbWVyYSIsIi4vcDUuTWF0cml4IiwiLi9wNS5TaGFkZXIiLCJfdmVydFNoYWRlciIsIl9mcmFnU2hhZGVyIiwiX2dsUHJvZ3JhbSIsIl9sb2FkZWRBdHRyaWJ1dGVzIiwiX2xvYWRlZFVuaWZvcm1zIiwidW5pZm9ybXMiLCJfYm91bmQiLCJzYW1wbGVycyIsIlZFUlRFWF9TSEFERVIiLCJzaGFkZXJTb3VyY2UiLCJjb21waWxlU2hhZGVyIiwiZ2V0U2hhZGVyUGFyYW1ldGVyIiwiQ09NUElMRV9TVEFUVVMiLCJnZXRTaGFkZXJJbmZvTG9nIiwiRlJBR01FTlRfU0hBREVSIiwiY3JlYXRlUHJvZ3JhbSIsImF0dGFjaFNoYWRlciIsImxpbmtQcm9ncmFtIiwiZ2V0UHJvZ3JhbVBhcmFtZXRlciIsIkxJTktfU1RBVFVTIiwiZ2V0UHJvZ3JhbUluZm9Mb2ciLCJfbG9hZEF0dHJpYnV0ZXMiLCJfbG9hZFVuaWZvcm1zIiwiQUNUSVZFX0FUVFJJQlVURVMiLCJnZXRBY3RpdmVBdHRyaWIiLCJnZXRBdHRyaWJMb2NhdGlvbiIsIkFDVElWRV9VTklGT1JNUyIsImdldEFjdGl2ZVVuaWZvcm0iLCJnZXRVbmlmb3JtTG9jYXRpb24iLCJTQU1QTEVSXzJEIiwic2FtcGxlckluZGV4IiwiY29tcGlsZSIsInVzZVByb2dyYW0iLCJiaW5kVGV4dHVyZXMiLCJfc2V0TWF0cml4VW5pZm9ybXMiLCJfc2V0Vmlld3BvcnRVbmlmb3JtIiwidW5iaW5kVGV4dHVyZXMiLCJhY3RpdmVUZXh0dXJlIiwiVEVYVFVSRTAiLCJiaW5kVGV4dHVyZSIsInVwZGF0ZSIsInVuaWZvcm0xaSIsInVwZGF0ZVRleHR1cmVzIiwiQk9PTCIsIklOVCIsInVuaWZvcm0xaXYiLCJ1bmlmb3JtMWZ2IiwidW5pZm9ybTFmIiwiRkxPQVRfTUFUMyIsInVuaWZvcm1NYXRyaXgzZnYiLCJGTE9BVF9NQVQ0IiwidW5pZm9ybU1hdHJpeDRmdiIsIkZMT0FUX1ZFQzIiLCJ1bmlmb3JtMmZ2IiwidW5pZm9ybTJmIiwiRkxPQVRfVkVDMyIsInVuaWZvcm0zZnYiLCJ1bmlmb3JtM2YiLCJGTE9BVF9WRUM0IiwidW5pZm9ybTRmdiIsInVuaWZvcm00ZiIsIklOVF9WRUMyIiwidW5pZm9ybTJpdiIsInVuaWZvcm0yaSIsIklOVF9WRUMzIiwidW5pZm9ybTNpdiIsInVuaWZvcm0zaSIsIklOVF9WRUM0IiwidW5pZm9ybTRpdiIsInVuaWZvcm00aSIsInVVc2VMaWdodGluZyIsInVBbWJpZW50TGlnaHRDb3VudCIsInVEaXJlY3Rpb25hbExpZ2h0Q291bnQiLCJ1UG9pbnRMaWdodENvdW50IiwidUFtYmllbnRDb2xvciIsInVEaXJlY3Rpb25hbENvbG9yIiwidVBvaW50TGlnaHRMb2NhdGlvbiIsInVQb2ludExpZ2h0Q29sb3IiLCJ1TGlnaHRpbmdEaXJlY3Rpb24iLCJ1U3BlY3VsYXIiLCJpc1RleHR1cmVTaGFkZXIiLCJpc0NvbG9yU2hhZGVyIiwidU1hdGVyaWFsQ29sb3IiLCJpc1RleExpZ2h0U2hhZGVyIiwidVN0cm9rZVdlaWdodCIsImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwidmVydGV4QXR0cmliUG9pbnRlciIsImdsVGV4IiwiZ2xUYXJnZXQiLCJURVhUVVJFXzJEIiwiZ2xGb3JtYXQiLCJtaXBtYXBzIiwiZ2xNaW5GaWx0ZXIiLCJnbE1hZ0ZpbHRlciIsImdsV3JhcFMiLCJDTEFNUF9UT19FREdFIiwiZ2xXcmFwVCIsImlzU3JjTWVkaWFFbGVtZW50IiwiX3ZpZGVvUHJldlVwZGF0ZVRpbWUiLCJpc1NyY0hUTUxFbGVtZW50IiwiaXNTcmNQNUltYWdlIiwiaXNTcmNQNUdyYXBoaWNzIiwiaXNJbWFnZURhdGEiLCJfZ2V0VGV4dHVyZURhdGFGcm9tU291cmNlIiwiY3JlYXRlVGV4dHVyZSIsInRleFBhcmFtZXRlcmkiLCJURVhUVVJFX01BR19GSUxURVIiLCJURVhUVVJFX01JTl9GSUxURVIiLCJURVhUVVJFX1dSQVBfUyIsIlRFWFRVUkVfV1JBUF9UIiwibG9hZGVkbWV0YWRhdGEiLCJ0ZXhJbWFnZTJEIiwiX2RpcnR5IiwidW5iaW5kVGV4dHVyZSIsInNldEludGVycG9sYXRpb24iLCJzZXRXcmFwTW9kZSIsIk1JUlJPUkVEX1JFUEVBVCIsImluZm9zIiwiZmluZEltYWdlIiwic3Ryb2tlSW1hZ2VJbmZvcyIsImNvbERpbUltYWdlSW5mb3MiLCJyb3dEaW1JbWFnZUluZm9zIiwiY29sQ2VsbEltYWdlSW5mb3MiLCJyb3dDZWxsSW1hZ2VJbmZvcyIsImdseXBoSW5mb3MiLCJnZXRHbHlwaEluZm8iLCJwMCIsImMwIiwiYzEiLCJwMSIsInRvUXVhZHJhdGljIiwicXVhZEVycm9yIiwic3BsaXRJbmZsZWN0aW9ucyIsImNlbGxJbWFnZUluZm8iLCJkaW1PZmZzZXQiLCJkaW1JbWFnZUluZm8iLCJnbHlwaCIsInVHbHlwaFJlY3QiLCJzdHJva2VJbWFnZUluZm8iLCJzdHJva2VzIiwiY29sSW5mbyIsInJvd0luZm8iLCJ1R3JpZE9mZnNldCIsIl9mb250SW5mbyIsIl90ZXh0R2VvbSIsIi4vcDUuUmVuZGVyZXJHTCIsIl9fd2VicGFja19leHBvcnRzX18iLCJwNV9saWJfcDVfbWluX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18iLCJwNV9saWJfcDVfbWluX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCIsInRvbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyIsInRvbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0Iiwic2tldGNoIiwicGlhbm8iLCJtZWxvZHkiLCJBMCIsIkMxIiwiRCMxIiwiRiMxIiwiQTEiLCJDMiIsIkQjMiIsIkYjMiIsIkEyIiwiQzMiLCJEIzMiLCJGIzMiLCJBMyIsIkM0IiwiRCM0IiwiRiM0IiwiQzUiLCJEIzUiLCJGIzUiLCJBNSIsIkM2IiwiRCM2IiwiRiM2IiwiQTYiLCJDNyIsIkQjNyIsIkYjNyIsIkE3IiwiQzgiLCJ2YWwyIiwicHRpY2siLCJwdGljazIiLCJub2lzZVZhbCIsInRpY2syIiwiZXZhbCJdLCJtYXBwaW5ncyI6ImFBQ0EsSUFBQUEsS0FHQSxTQUFBQyxFQUFBQyxHQUdBLEdBQUFGLEVBQUFFLEdBQ0EsT0FBQUYsRUFBQUUsR0FBQUMsUUFHQSxJQUFBQyxFQUFBSixFQUFBRSxJQUNBRyxFQUFBSCxFQUNBSSxHQUFBLEVBQ0FILFlBVUEsT0FOQUksRUFBQUwsR0FBQU0sS0FBQUosRUFBQUQsUUFBQUMsSUFBQUQsUUFBQUYsR0FHQUcsRUFBQUUsR0FBQSxFQUdBRixFQUFBRCxRQUtBRixFQUFBUSxFQUFBRixFQUdBTixFQUFBUyxFQUFBVixFQUdBQyxFQUFBVSxFQUFBLFNBQUFSLEVBQUFTLEVBQUFDLEdBQ0FaLEVBQUFhLEVBQUFYLEVBQUFTLElBQ0FHLE9BQUFDLGVBQUFiLEVBQUFTLEdB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QXRQLE1BQUEsUUFBMENWLEtBQUEsWUFBQWdRLEtBQUEsU0FBQXRQLE1BQUFnYSxPQUVteGZxNEQsSUFBQSw4VUFBQXZvQyxJQUF1VndvQyxFQUFBLEtBQUFoMkIsRUFBQSxLQUFBSyxFQUFBLEtBQUFDLEVBQUEsS0FBQWtHLEVBQUEsS0FBQStDLEVBQUEsS0FBQWEsRUFBQSxLQUFBMkIsRUFBQSxLQUFBRyxFQUFBLEtBQUFDLEVBQUEsS0FBQTBELEdBQUEsS0FBQW9tQixHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxVQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxRQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxVQUFBQyxHQUFBLFVBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsUUFBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsVUFBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxhQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxNQUF3K0JDLElBQUs3RyxFQUFBLEVBQUFoMkIsRUFBQSxFQUFBSyxFQUFBLEVBQUFDLEVBQUEsRUFBQWtHLEVBQUEsRUFBQStDLEVBQUEsRUFBQWEsRUFBQSxFQUFBMkIsRUFBQSxFQUFBRyxFQUFBLEVBQUFDLEVBQUEsRUFBQTBELEdBQUEsRUFBQW9tQixHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQzdwK0JDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEdBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEdBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxHQUFraUI1dkMsSUFBSzh2QyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLE1BQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxNQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsVUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxVQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFNBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxNQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFVBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsU0FBQUMsS0FBQSxNQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLE1BQUFDLEtBQUEsU0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsYUFBQUMsS0FBQSxLQUFBQyxLQUFBLGFBQUFDLEtBQUEsVUFBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLE1B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QUFBLFFBQXdCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLFFBQXVCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsUUFBQTc3RSxJQUFBLFVBQTRCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJ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OEQsVUFBQSxLQUFBaThELEdBQUFqOEQsVUFBQSxLQUFBaThELEdBQUFqOEQsVUFBQSxLQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdB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LEtBQUEsVUFBQXRGLE1BQUEsVUFBQXVGLFlBQUEsVUFBQUMsS0FBQSxVQUFBQyxTQUFBLFVBQUFDLFFBQUEsVUFBQUMsVUFBQSxVQUFBQyxPQUFBLFVBQUFDLE1BQUEsVUFBQUMsTUFBQSxVQUFBQyxTQUFBLFVBQUFDLGNBQUEsVUFBQUMsVUFBQSxVQUFBQyxhQUFBLFVBQUFDLFVBQUEsVUFBQUMsV0FBQSxVQUFBQyxVQUFBLFVBQUFDLHFCQUFBLFVBQUFDLFVBQUEsVUFBQUMsV0FBQSxVQUFBQyxVQUFBLFVBQUFDLFVBQUEsVUFBQUMsWUFBQSxVQUFBQyxjQUFBLFVBQUFDLGFBQUEsVUFBQUMsZUFBQSxVQUFBQyxlQUFBLFVBQUFDLGVBQUEsVUFBQUMsWUFBQSxVQUFBQyxLQUFBLFVBQUFDLFVBQUEsVUFBQUMsTUFBQSxVQUFBQyxRQUFBLFVBQUFDLE9BQUEsVUFBQUMsaUJBQUEsVUFBQUMsV0FBQSxVQUFBQyxhQUFBLFVBQUFDLGFBQUEsVUFBQUMsZUFBQSxVQUFBQyxnQkFBQSxVQUFBQyxrQkFBQSxVQUFBQyxnQkFBQSxVQUFBQyxnQkFBQSxVQUFBQyxhQUFBLFVBQUFDLFVBQUEsVUFBQUMsVUFBQSxVQUFBQyxTQUFBLFVBQUFDLFlBQUEsVUFBQUMsS0FBQSxVQUFBQyxRQUFBLFVBQUFDLE1BQUEsVUFBQUMsVUFBQSxVQUFBQyxPQUFBLFVBQUFDLFVBQUEsVUFBQUMsT0FBQSxVQUFBQyxjQUFBLFVBQUFDLFVBQUEsVUFBQUMsY0FBQSxVQUFBQyxjQUFBLFVBQUFDLFdBQUEsVUFBQUMsVUFBQSxVQUFBQyxLQUFBLFVBQUF2M0QsS0FBQSxVQUFBdzNELEtBQUEsVUFBQUMsV0FBQSxVQUFBQyxPQUFBLFVBQUFySSxJQUFBLFVBQUFzSSxVQUFBLFVBQUFDLFVBQUEsVUFBQUMsWUFBQSxVQUFBQyxPQUFBLFVBQUFDLFdBQUEsVUFBQUMsU0FBQSxVQUFBQyxTQUFBLFVBQUFDLE9BQUEsVUFBQUMsT0FBQSxVQUFBQyxRQUFBLFVBQUFDLFVBQUEsVUFBQUMsVUFBQSxVQUFBQyxVQUFBLFVBQUFDLEtBQUEs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QUEsRUFBQUMsZUFBQSxFQUFBQyxNQUFBLFFBQUFDLFdBQUEsYUFBQUMsTUFBQSxRQUFBQyxLQUFBLE9BQUFDLE1BQUEsUUFBQUMsSUFBQSxNQUFBQyxRQUFBLFNBQUFDLE9BQUEsT0FBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQXRPLElBQUEsTUFBQUUsSUFBQSxNQUFBRSxJQUFBLE1BQUFtTyxLQUFBLE9BQUFDLElBQUEsR0FBQUMsVUFBQSxFQUFBQyxRQUFBLEdBQUFDLE9BQUEsR0FBQUMsV0FBQSxHQUFBQyxNQUFBLEdBQUFDLE9BQUEsR0FBQUMsV0FBQSxHQUFBQyxPQUFBLEdBQUFDLE9BQUEsR0FBQUMsWUFBQSxHQUFBQyxNQUFBLEdBQUFDLElBQUEsRUFBQUMsU0FBQSxHQUFBQyxNQUFBLGNBQUFDLElBQUEsVUFBQUMsUUFBQSxTQUFBQyxTQUFBLFVBQUFDLFdBQUEsYUFBQUMsVUFBQSxZQUFBQyxTQUFBLFdBQUFDLE9BQUEsU0FBQUMsUUFBQSxPQUFBQyxRQUFBLFVBQUFDLFdBQUEsYUFBQUMsV0FBQSxhQUFBQyxNQUFBLGNBQUFDLEtBQUEsYUFBQUMsVUFBQSxZQUFBQyxLQUFBLE9BQUFDLE9BQUEsU0FBQUMsT0FBQSxTQUFBQyxVQUFBLFlBQUFDLE9BQUEsU0FBQUMsTUFBQSxRQUFBQyxLQUFBLE9BQUFwYixPQUFBLFNBQUFwQixPQUFBLFNBQUFLLEtBQUEsT0FBQW9jLG1CQUFBLFVBQUFDLGtCQUFBLEtBQUFDLFlBQUEsU0FBQUMsT0FBQSxTQUFBQyxVQUFBLFlBQUFDLE9BQUEsU0FBQUMsTUFBQSxRQUFBQyxPQUFBLFNBQUFDLEtBQUEsT0FBQUMsUUFBQSxVQUFBQyxVQUFBLFlBQUFDLFFBQUEsVUFBQUMsT0FBQSxTQUFBQyxNQUFBLFFBQUFDLE9BQUEsU0FBQUMsVUFBQSxZQUFBQyxTQUFBLFdBQUFDLGdCQUFBLFVBQUFDLGNBQUEsVUFBQUMsS0FBQSxPQUFBQyxLQUFBLGFBQThtRG43QixJQUFBLFNBQUEvNEQsRUFBQUssRUFBQWpiLEdBQXNCLGFBQWEsU0FBQUMs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QSxHQUlBLElBRUFzWSxLQUFBK3JDLFNBQUEsY0FBQUEsS0FBQSxFQUFBK3JGLE1BQUEsUUFDQyxNQUFBemxJLEdBRUQsaUJBQUF2RSxTQUFBa1MsRUFBQWxTLFFBT0EzSSxFQUFBRCxRQUFBOGEiLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAyKTtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KXtcblxuXHQvL1VNRFxuXHRpZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRcdGRlZmluZShmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBmYWN0b3J5KCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuIFx0fSBlbHNlIHtcblx0XHRyb290LlRvbmUgPSBmYWN0b3J5KCk7XG5cdH1cblxufSh0aGlzLCBmdW5jdGlvbigpe1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIFRvbmU7XG5cdC8vY29uc3RydWN0cyB0aGUgbWFpbiBUb25lIG9iamVjdFxuXHRmdW5jdGlvbiBNYWluKGZ1bmMpe1xuXHRcdFRvbmUgPSBmdW5jKCk7XG5cdH1cblx0Ly9pbnZva2VzIGVhY2ggb2YgdGhlIG1vZHVsZXMgd2l0aCB0aGUgbWFpbiBUb25lIG9iamVjdCBhcyB0aGUgYXJndW1lbnRcblx0ZnVuY3Rpb24gTW9kdWxlKGZ1bmMpe1xuXHRcdGZ1bmMoVG9uZSk7XG5cdH1cdC8qKlxuXHQgKiAgVG9uZS5qc1xuXHQgKiAgQGF1dGhvciBZb3RhbSBNYW5uXG5cdCAqICBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVCBMaWNlbnNlXG5cdCAqICBAY29weXJpZ2h0IDIwMTQtMjAxOCBZb3RhbSBNYW5uXG5cdCAqL1xuXHRNYWluKGZ1bmN0aW9uICgpIHtcblx0ICAgIFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VE9ORVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lIGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBvdGhlciBjbGFzc2VzLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIHZhciBUb25lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUb25lKSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbnN0cnVjdG9yIG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBcXCduZXdcXCcga2V5d29yZCcpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEByZXR1cm5zIHtTdHJpbmd9IHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIGFzIGEgc3RyaW5nXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmb3IgKHZhciBjbGFzc05hbWUgaW4gVG9uZSkge1xuXHQgICAgICAgICAgICB2YXIgaXNMZXR0ZXIgPSBjbGFzc05hbWVbMF0ubWF0Y2goL15bQS1aXSQvKTtcblx0ICAgICAgICAgICAgdmFyIHNhbWVDb25zdHJ1Y3RvciA9IFRvbmVbY2xhc3NOYW1lXSA9PT0gdGhpcy5jb25zdHJ1Y3Rvcjtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNGdW5jdGlvbihUb25lW2NsYXNzTmFtZV0pICYmIGlzTGV0dGVyICYmIHNhbWVDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gJ1RvbmUnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgZGlzY29ubmVjdCBhbmQgZGlzcG9zZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRHRVQvU0VUXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIHBhcmFtZXRlcnMgYXQgb25jZS4gRWl0aGVyIHBhc3MgaW4gYW5cblx0XHQgKiAgb2JqZWN0IG1hcHBpbmcgcGFyYW1ldGVycyB0byB2YWx1ZXMsIG9yIHRvIHNldCBhXG5cdFx0ICogIHNpbmdsZSBwYXJhbWV0ZXIsIGJ5IHBhc3NpbmcgaW4gYSBzdHJpbmcgYW5kIHZhbHVlLlxuXHRcdCAqICBUaGUgbGFzdCBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCByYW1wIHRpbWUgd2hpY2hcblx0XHQgKiAgd2lsbCByYW1wIGFueSBzaWduYWwgdmFsdWVzIHRvIHRoZWlyIGRlc3RpbmF0aW9uIHZhbHVlXG5cdFx0ICogIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBwYXJhbXNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByYW1wVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZX0gdGhpc1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NldCB2YWx1ZXMgdXNpbmcgYW4gb2JqZWN0XG5cdFx0ICogZmlsdGVyLnNldCh7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogMzAwLFxuXHRcdCAqIFx0XCJ0eXBlXCIgOiBoaWdocGFzc1xuXHRcdCAqIH0pO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGZpbHRlci5zZXQoXCJ0eXBlXCIsIFwiaGlnaHBhc3NcIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9yYW1wIHRvIHRoZSB2YWx1ZSAyMjAgb3ZlciAzIHNlY29uZHMuXG5cdFx0ICogb3NjaWxsYXRvci5zZXQoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IDIyMFxuXHRcdCAqIH0sIDMpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgdmFsdWUsIHJhbXBUaW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QocGFyYW1zKSkge1xuXHQgICAgICAgICAgICByYW1wVGltZSA9IHZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHZhciB0bXBPYmogPSB7fTtcblx0ICAgICAgICAgICAgdG1wT2JqW3BhcmFtc10gPSB2YWx1ZTtcblx0ICAgICAgICAgICAgcGFyYW1zID0gdG1wT2JqO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBwYXJhbUxvb3A6XG5cdCAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gcGFyYW1zKSB7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcmFtc1thdHRyXTtcblx0ICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICAgICAgaWYgKGF0dHIuaW5kZXhPZignLicpICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyU3BsaXQgPSBhdHRyLnNwbGl0KCcuJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyU3BsaXQubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFthdHRyU3BsaXRbaV1dO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgVG9uZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0clNwbGl0LnNwbGljZSgwLCBpICsgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5uZXJQYXJhbSA9IGF0dHJTcGxpdC5qb2luKCcuJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuc2V0KGlubmVyUGFyYW0sIHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHBhcmFtTG9vcDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBhdHRyID0gYXR0clNwbGl0W2F0dHJTcGxpdC5sZW5ndGggLSAxXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHZhciBwYXJhbSA9IHBhcmVudFthdHRyXTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYocGFyYW0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5TaWduYWwgJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlNpZ25hbCB8fCBUb25lLlBhcmFtICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5QYXJhbSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS52YWx1ZSAhPT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihyYW1wVGltZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5yYW1wVG8odmFsdWUsIHJhbXBUaW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBBdWRpb1BhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnZhbHVlICE9PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5UaW1lQmFzZSAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJlbnRbYXR0cl0gPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBUb25lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcGFyYW0uc2V0KHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gIT09IHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcGFyZW50W2F0dHJdID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBvYmplY3QncyBhdHRyaWJ1dGVzLiBHaXZlbiBubyBhcmd1bWVudHMgZ2V0XG5cdFx0ICogIHdpbGwgcmV0dXJuIGFsbCBhdmFpbGFibGUgb2JqZWN0IHByb3BlcnRpZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmdcblx0XHQgKiAgdmFsdWVzLiBQYXNzIGluIGEgc2luZ2xlIGF0dHJpYnV0ZSB0byByZXRyaWV2ZSBvciBhbiBhcnJheVxuXHRcdCAqICBvZiBhdHRyaWJ1dGVzLiBUaGUgYXR0cmlidXRlIHN0cmluZ3MgY2FuIGFsc28gaW5jbHVkZSBhIFwiLlwiXG5cdFx0ICogIHRvIGFjY2VzcyBkZWVwZXIgcHJvcGVydGllcy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogb3NjLmdldCgpO1xuXHRcdCAqIC8vcmV0dXJucyB7XCJ0eXBlXCIgOiBcInNpbmVcIiwgXCJmcmVxdWVuY3lcIiA6IDQ0MCwgLi4uZXRjfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG9zYy5nZXQoXCJ0eXBlXCIpO1xuXHRcdCAqIC8vcmV0dXJucyB7IFwidHlwZVwiIDogXCJzaW5lXCJ9XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL3VzZSBkb3Qgbm90YXRpb24gdG8gYWNjZXNzIGRlZXAgcHJvcGVydGllc1xuXHRcdCAqIHN5bnRoLmdldChbXCJlbnZlbG9wZS5hdHRhY2tcIiwgXCJlbnZlbG9wZS5yZWxlYXNlXCJdKTtcblx0XHQgKiAvL3JldHVybnMge1wiZW52ZWxvcGVcIiA6IHtcImF0dGFja1wiIDogMC4yLCBcInJlbGVhc2VcIiA6IDAuNH19XG5cdFx0ICogIEBwYXJhbSB7QXJyYXk9fHN0cmluZ3x1bmRlZmluZWR9IHBhcmFtcyB0aGUgcGFyYW1ldGVycyB0byBnZXQsIG90aGVyd2lzZSB3aWxsIHJldHVyblxuXHRcdCAqICBcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgYWxsIGF2YWlsYWJsZS5cblx0XHQgKiAgQHJldHVybnMge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgcGFyYW1zID0gdGhpcy5fY29sbGVjdERlZmF1bHRzKHRoaXMuY29uc3RydWN0b3IpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHBhcmFtcyA9IFtwYXJhbXNdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmV0ID0ge307XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGF0dHIgPSBwYXJhbXNbaV07XG5cdCAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICB2YXIgc3ViUmV0ID0gcmV0O1xuXHQgICAgICAgICAgICBpZiAoYXR0ci5pbmRleE9mKCcuJykgIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYXR0clNwbGl0ID0gYXR0ci5zcGxpdCgnLicpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRyU3BsaXQubGVuZ3RoIC0gMTsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHN1YkF0dHIgPSBhdHRyU3BsaXRbal07XG5cdCAgICAgICAgICAgICAgICAgICAgc3ViUmV0W3N1YkF0dHJdID0gc3ViUmV0W3N1YkF0dHJdIHx8IHt9O1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YlJldCA9IHN1YlJldFtzdWJBdHRyXTtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbc3ViQXR0cl07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBhdHRyID0gYXR0clNwbGl0W2F0dHJTcGxpdC5sZW5ndGggLSAxXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YXIgcGFyYW0gPSBwYXJlbnRbYXR0cl07XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KHBhcmFtc1thdHRyXSkpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLmdldCgpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuU2lnbmFsICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5TaWduYWwpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLnZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuUGFyYW0gJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlBhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS52YWx1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLnZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgVG9uZSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0uZ2V0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoIVRvbmUuaXNGdW5jdGlvbihwYXJhbSkgJiYgVG9uZS5pc0RlZmluZWQocGFyYW0pKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjb2xsZWN0IGFsbCBvZiB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGluIG9uZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjb25zdHIgdGhlIGNvbnN0cnVjdG9yIHRvIGZpbmQgdGhlIGRlZmF1bHRzIGZyb21cblx0XHQgKiAgQHJldHVybiB7QXJyYXl9IGFsbCBvZiB0aGUgYXR0cmlidXRlcyB3aGljaCBiZWxvbmcgdG8gdGhlIGNsYXNzXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5fY29sbGVjdERlZmF1bHRzID0gZnVuY3Rpb24gKGNvbnN0cikge1xuXHQgICAgICAgIHZhciByZXQgPSBbXTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoY29uc3RyLmRlZmF1bHRzKSkge1xuXHQgICAgICAgICAgICByZXQgPSBPYmplY3Qua2V5cyhjb25zdHIuZGVmYXVsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoY29uc3RyLl9zdXBlcikpIHtcblx0ICAgICAgICAgICAgdmFyIHN1cGVyRGVmcyA9IHRoaXMuX2NvbGxlY3REZWZhdWx0cyhjb25zdHIuX3N1cGVyKTtcblx0ICAgICAgICAgICAgLy9maWx0ZXIgb3V0IHJlcGVhdHNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdXBlckRlZnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChyZXQuaW5kZXhPZihzdXBlckRlZnNbaV0pID09PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKHN1cGVyRGVmc1tpXSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJldDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRERUZBVUxUU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICB2YWx1ZXMgIFRoZSBhcmd1bWVudHMgYXJyYXlcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICBrZXlzICAgIFRoZSBuYW1lcyBvZiB0aGUgYXJndW1lbnRzXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBjb25zdHIgVGhlIGNsYXNzIGNvbnN0cnVjdG9yXG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBBbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlICBkZWZhdWx0cyBiZXR3ZWVuIHRoZSBjbGFzcycgZGVmYXVsdHNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgcGFzc2VkIGluIGFyZ3VtZW50cy5cblx0XHQgKi9cblx0ICAgIFRvbmUuZGVmYXVsdHMgPSBmdW5jdGlvbiAodmFsdWVzLCBrZXlzLCBjb25zdHIpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IHt9O1xuXHQgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxICYmIFRvbmUuaXNPYmplY3QodmFsdWVzWzBdKSkge1xuXHQgICAgICAgICAgICBvcHRpb25zID0gdmFsdWVzWzBdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgb3B0aW9uc1trZXlzW2ldXSA9IHZhbHVlc1tpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoY29uc3RyLmRlZmF1bHRzKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIGNvbnN0ci5kZWZhdWx0cyk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzT2JqZWN0KGNvbnN0cikpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBjb25zdHIpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBvcHRpb25zO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIGBnaXZlbmAgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCwgdXNlIHRoZSBgZmFsbGJhY2tgLlxuXHRcdCAqICBJZiBib3RoIGBnaXZlbmAgYW5kIGBmYWxsYmFja2AgYXJlIG9iamVjdCBsaXRlcmFscywgaXQgd2lsbFxuXHRcdCAqICByZXR1cm4gYSBkZWVwIGNvcHkgd2hpY2ggaW5jbHVkZXMgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIGZyb20gYm90aFxuXHRcdCAqICBvYmplY3RzLiBJZiBhIHBhcmFtZXRlciBpcyB1bmRlZmluZWQgaW4gZ2l2ZW4sIGl0IHdpbGwgcmV0dXJuXG5cdFx0ICogIHRoZSBmYWxsYmFjayBwcm9wZXJ0eS5cblx0XHQgKiAgPGJyPjxicj5cblx0XHQgKiAgV0FSTklORzogaWYgb2JqZWN0IGlzIHNlbGYgcmVmZXJlbnRpYWwsIGl0IHdpbGwgZ28gaW50byBhbiBhblxuXHRcdCAqICBpbmZpbml0ZSByZWN1cnNpdmUgbG9vcC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHBhcmFtICB7Kn0gZ2l2ZW5cblx0XHQgKiAgQHBhcmFtICB7Kn0gZmFsbGJhY2tcblx0XHQgKiAgQHJldHVybiB7Kn1cblx0XHQgKi9cblx0ICAgIFRvbmUuZGVmYXVsdEFyZyA9IGZ1bmN0aW9uIChnaXZlbiwgZmFsbGJhY2spIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc09iamVjdChnaXZlbikgJiYgVG9uZS5pc09iamVjdChmYWxsYmFjaykpIHtcblx0ICAgICAgICAgICAgdmFyIHJldCA9IHt9O1xuXHQgICAgICAgICAgICAvL21ha2UgYSBkZWVwIGNvcHkgb2YgdGhlIGdpdmVuIG9iamVjdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBnaXZlblByb3AgaW4gZ2l2ZW4pIHtcblx0ICAgICAgICAgICAgICAgIHJldFtnaXZlblByb3BdID0gVG9uZS5kZWZhdWx0QXJnKGZhbGxiYWNrW2dpdmVuUHJvcF0sIGdpdmVuW2dpdmVuUHJvcF0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGZvciAodmFyIGZhbGxiYWNrUHJvcCBpbiBmYWxsYmFjaykge1xuXHQgICAgICAgICAgICAgICAgcmV0W2ZhbGxiYWNrUHJvcF0gPSBUb25lLmRlZmF1bHRBcmcoZ2l2ZW5bZmFsbGJhY2tQcm9wXSwgZmFsbGJhY2tbZmFsbGJhY2tQcm9wXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHJldDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5pc1VuZGVmKGdpdmVuKSA/IGZhbGxiYWNrIDogZ2l2ZW47XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdENPTk5FQ1RJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBjb25uZWN0IHRvZ2V0aGVyIGFsbCBvZiB0aGUgYXJndW1lbnRzIGluIHNlcmllc1xuXHRcdCAqICBAcGFyYW0gey4uLkF1ZGlvUGFyYW18VG9uZXxBdWRpb05vZGV9IG5vZGVzXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLmNvbm5lY3RTZXJpZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRVbml0ID0gYXJndW1lbnRzWzBdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB0b1VuaXQgPSBhcmd1bWVudHNbaV07XG5cdCAgICAgICAgICAgIGN1cnJlbnRVbml0LmNvbm5lY3QodG9Vbml0KTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQgPSB0b1VuaXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gVFlQRSBDSEVDS0lOR1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJnIGlzIHVuZGVmaW5lZFxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIHVuZGVmaW5lZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzVW5kZWYgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmcgaXMgbm90IHVuZGVmaW5lZFxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIHVuZGVmaW5lZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzRGVmaW5lZCA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICByZXR1cm4gIVRvbmUuaXNVbmRlZih2YWwpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmcgaXMgYSBmdW5jdGlvblxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgZnVuY3Rpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc0Z1bmN0aW9uID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlci5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIG51bWJlclxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzTnVtYmVyID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgZ2l2ZW4gYXJndW1lbnQgaXMgYW4gb2JqZWN0IGxpdGVyYWwgKGkuZS4gYHt9YCk7XG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYW4gb2JqZWN0IGxpdGVyYWwuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNPYmplY3QgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBPYmplY3RdJyAmJiBhcmcuY29uc3RydWN0b3IgPT09IE9iamVjdDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgYSBib29sZWFuLlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgYm9vbGVhblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzQm9vbGVhbiA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhbiBBcnJheVxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGFuIGFycmF5XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNBcnJheSA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIHN0cmluZy5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIHN0cmluZ1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzU3RyaW5nID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgaW4gdGhlIGZvcm0gb2YgYSBub3RlIGluIHNjaWVudGlmaWMgcGl0Y2ggbm90YXRpb24uXG5cdFx0ICogIGUuZy4gXCJDNFwiXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBzdHJpbmdcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc05vdGUgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuaXNTdHJpbmcoYXJnKSAmJiAvXihbYS1nXXsxfSg/OmJ8I3x4fGJiKT8pKC0/WzAtOV0rKS9pLnRlc3QoYXJnKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQW4gZW1wdHkgZnVuY3Rpb24uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUubm9PcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTWFrZSB0aGUgcHJvcGVydHkgbm90IHdyaXRhYmxlLiBJbnRlcm5hbCB1c2Ugb25seS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcGVydHkgIHRoZSBwcm9wZXJ0eSB0byBtYWtlIG5vdCB3cml0YWJsZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuX3JlYWRPbmx5ID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydHkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5KHByb3BlcnR5W2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eSwge1xuXHQgICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuXHQgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIE1ha2UgYW4gYXR0cmlidXRlIHdyaXRlYWJsZS4gSW50ZXJhbCB1c2Ugb25seS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcGVydHkgIHRoZSBwcm9wZXJ0eSB0byBtYWtlIHdyaXRhYmxlXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5fd3JpdGFibGUgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0eS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd3JpdGFibGUocHJvcGVydHlbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB7IHdyaXRhYmxlOiB0cnVlIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBQb3NzaWJsZSBwbGF5IHN0YXRlcy5cblx0XHQgKiBAZW51bSB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGF0ZSA9IHtcblx0ICAgICAgICBTdGFydGVkOiAnc3RhcnRlZCcsXG5cdCAgICAgICAgU3RvcHBlZDogJ3N0b3BwZWQnLFxuXHQgICAgICAgIFBhdXNlZDogJ3BhdXNlZCdcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBFcXVhbCBwb3dlciBnYWluIHNjYWxlLiBHb29kIGZvciBjcm9zcy1mYWRpbmcuXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSBwZXJjZW50ICgwLTEpXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gICAgICAgICBvdXRwdXQgZ2FpbiAoMC0xKVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmVxdWFsUG93ZXJTY2FsZSA9IGZ1bmN0aW9uIChwZXJjZW50KSB7XG5cdCAgICAgICAgdmFyIHBpRmFjdG9yID0gMC41ICogTWF0aC5QSTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5zaW4ocGVyY2VudCAqIHBpRmFjdG9yKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBkZWNpYmVscyBpbnRvIGdhaW4uXG5cdFx0ICogIEBwYXJhbSAge0RlY2liZWxzfSBkYlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZGJUb0dhaW4gPSBmdW5jdGlvbiAoZGIpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5wb3coMTAsIGRiIC8gMjApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGdhaW4gdG8gZGVjaWJlbHMuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gZ2FpbiAoMC0xKVxuXHRcdCAqICBAcmV0dXJuIHtEZWNpYmVsc31cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5nYWluVG9EYiA9IGZ1bmN0aW9uIChnYWluKSB7XG5cdCAgICAgICAgcmV0dXJuIDIwICogKE1hdGgubG9nKGdhaW4pIC8gTWF0aC5MTjEwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhbiBpbnRlcnZhbCAoaW4gc2VtaXRvbmVzKSB0byBhIGZyZXF1ZW5jeSByYXRpby5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWx9IGludGVydmFsIHRoZSBudW1iZXIgb2Ygc2VtaXRvbmVzIGFib3ZlIHRoZSBiYXNlIG5vdGVcblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSAgICAgICAgICB0aGUgZnJlcXVlbmN5IHJhdGlvXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB0b25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbygwKTsgLy8gMVxuXHRcdCAqIHRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKDEyKTsgLy8gMlxuXHRcdCAqIHRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKC0xMik7IC8vIDAuNVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8gPSBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5wb3coMiwgaW50ZXJ2YWwgLyAxMik7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VElNSU5HXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBvZiB0aGUgQXVkaW9Db250ZXh0IGNsb2NrLlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBjdXJyZW50VGltZSBmcm9tIHRoZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuY29udGV4dC5ub3coKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIEF1ZGlvQ29udGV4dCBjbG9jay5cblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSB0aGUgY3VycmVudFRpbWUgZnJvbSB0aGUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUubm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLmNvbnRleHQubm93KCk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0SU5IRVJJVEFOQ0Vcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIGhhdmUgYSBjaGlsZCBpbmhlcml0IGFsbCBvZiBUb25lJ3MgKG9yIGEgcGFyZW50J3MpIHByb3RvdHlwZVxuXHRcdCAqICB0byBpbmhlcml0IHRoZSBwYXJlbnQncyBwcm9wZXJ0aWVzLCBtYWtlIHN1cmUgdG8gY2FsbFxuXHRcdCAqICBQYXJlbnQuY2FsbCh0aGlzKSBpbiB0aGUgY2hpbGQncyBjb25zdHJ1Y3RvclxuXHRcdCAqXG5cdFx0ICogIGJhc2VkIG9uIGNsb3N1cmUgbGlicmFyeSdzIGluaGVyaXQgZnVuY3Rpb25cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSBcdGNoaWxkXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gcGFyZW50IChvcHRpb25hbCkgcGFyZW50IHRvIGluaGVyaXQgZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBubyBwYXJlbnQgaXMgc3VwcGxpZWQsIHRoZSBjaGlsZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGluaGVyaXQgZnJvbSBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmV4dGVuZCA9IGZ1bmN0aW9uIChjaGlsZCwgcGFyZW50KSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihwYXJlbnQpKSB7XG5cdCAgICAgICAgICAgIHBhcmVudCA9IFRvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIFRlbXBDb25zdHJ1Y3RvcigpIHtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVGVtcENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7XG5cdCAgICAgICAgY2hpbGQucHJvdG90eXBlID0gbmV3IFRlbXBDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIC8qKiBAb3ZlcnJpZGUgKi9cblx0ICAgICAgICBjaGlsZC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjaGlsZDtcblx0ICAgICAgICBjaGlsZC5fc3VwZXIgPSBwYXJlbnQ7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0Q09OVEVYVFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUHJpdmF0ZSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHR5cGUge0F1ZGlvQ29udGV4dH1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBhdWRpb0NvbnRleHQgPSBudWxsO1xuXHQgICAgLyoqXG5cdFx0ICogIEEgc3RhdGljIHBvaW50ZXIgdG8gdGhlIGF1ZGlvIGNvbnRleHQgYWNjZXNzaWJsZSBhcyBUb25lLmNvbnRleHQuXG5cdFx0ICogIEB0eXBlIHtUb25lLkNvbnRleHR9XG5cdFx0ICogIEBuYW1lIGNvbnRleHRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLCAnY29udGV4dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGF1ZGlvQ29udGV4dDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuQ29udGV4dCAmJiBjb250ZXh0IGluc3RhbmNlb2YgVG9uZS5Db250ZXh0KSB7XG5cdCAgICAgICAgICAgICAgICBhdWRpb0NvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYXVkaW9Db250ZXh0ID0gbmV3IFRvbmUuQ29udGV4dChjb250ZXh0KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL2luaXRpYWxpemUgdGhlIG5ldyBhdWRpbyBjb250ZXh0XG5cdCAgICAgICAgICAgIFRvbmUuQ29udGV4dC5lbWl0KCdpbml0JywgYXVkaW9Db250ZXh0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEB0eXBlIHtUb25lLkNvbnRleHR9XG5cdFx0ICogIEBuYW1lIGNvbnRleHRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUucHJvdG90eXBlLCAnY29udGV4dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuY29udGV4dDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUb25lIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhIGNvbnRleHQgb24gaW5pdCwgYnV0IGlmIHlvdSBhcmUgd29ya2luZ1xuXHRcdCAqICB3aXRoIG90aGVyIGxpYnJhcmllcyB3aGljaCBhbHNvIGNyZWF0ZSBhbiBBdWRpb0NvbnRleHQsIGl0IGNhbiBiZVxuXHRcdCAqICB1c2VmdWwgdG8gc2V0IHlvdXIgb3duLiBJZiB5b3UgYXJlIGdvaW5nIHRvIHNldCB5b3VyIG93biBjb250ZXh0LFxuXHRcdCAqICBiZSBzdXJlIHRvIGRvIGl0IGF0IHRoZSBzdGFydCBvZiB5b3VyIGNvZGUsIGJlZm9yZSBjcmVhdGluZyBhbnkgb2JqZWN0cy5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcGFyYW0ge0F1ZGlvQ29udGV4dH0gY3R4IFRoZSBuZXcgYXVkaW8gY29udGV4dCB0byBzZXRcblx0XHQgKi9cblx0ICAgIFRvbmUuc2V0Q29udGV4dCA9IGZ1bmN0aW9uIChjdHgpIHtcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBjdHg7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVRUUklCVVRFU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBzZWNvbmRzIG9mIDEgcHJvY2Vzc2luZyBibG9jayAoMTI4IHNhbXBsZXMpXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIGJsb2NrVGltZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUucHJvdG90eXBlLCAnYmxvY2tUaW1lJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gMTI4IC8gdGhpcy5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGR1cmF0aW9uIGluIHNlY29uZHMgb2Ygb25lIHNhbXBsZS5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2FtcGxlVGltZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUucHJvdG90eXBlLCAnc2FtcGxlVGltZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIDEgLyB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGV0aGVyIG9yIG5vdCBhbGwgdGhlIHRlY2hub2xvZ2llcyB0aGF0IFRvbmUuanMgcmVsaWVzIG9uIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3Nlci5cblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBuYW1lIHN1cHBvcnRlZFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUsICdzdXBwb3J0ZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBoYXNBdWRpb0NvbnRleHQgPSB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ0F1ZGlvQ29udGV4dCcpIHx8IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnd2Via2l0QXVkaW9Db250ZXh0Jyk7XG5cdCAgICAgICAgICAgIHZhciBoYXNQcm9taXNlcyA9IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnUHJvbWlzZScpO1xuXHQgICAgICAgICAgICB2YXIgaGFzV29ya2VycyA9IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnV29ya2VyJyk7XG5cdCAgICAgICAgICAgIHJldHVybiBoYXNBdWRpb0NvbnRleHQgJiYgaGFzUHJvbWlzZXMgJiYgaGFzV29ya2Vycztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBCb29sZWFuIHZhbHVlIGlmIHRoZSBhdWRpbyBjb250ZXh0IGhhcyBiZWVuIGluaXRpYWxpemVkLlxuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbmFtZSBpbml0aWFsaXplZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUsICdpbml0aWFsaXplZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGF1ZGlvQ29udGV4dCAhPT0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGNvbnRleHQgd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIHJlc29sdmUgIENhbGxiYWNrIHdoZW4gdGhlIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWRcblx0XHQgKiAgQHJldHVybiAge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLmdldENvbnRleHQgPSBmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHQgICAgICAgIGlmIChUb25lLmluaXRpYWxpemVkKSB7XG5cdCAgICAgICAgICAgIHJlc29sdmUoVG9uZS5jb250ZXh0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgcmVzQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXNvbHZlKFRvbmUuY29udGV4dCk7XG5cdCAgICAgICAgICAgICAgICBUb25lLkNvbnRleHQub2ZmKCdpbml0JywgcmVzQ2FsbGJhY2spO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCByZXNDYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB2ZXJzaW9uIG51bWJlclxuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS52ZXJzaW9uID0gJ3IxMic7XG5cdCAgICByZXR1cm4gVG9uZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRW1pdHRlciBnaXZlcyBjbGFzc2VzIHdoaWNoIGV4dGVuZCBpdFxuXHRcdCAqICAgICAgICAgdGhlIGFiaWxpdHkgdG8gbGlzdGVuIGZvciBhbmQgZW1pdCBldmVudHMuXG5cdFx0ICogICAgICAgICBJbnNwaXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZyb20gSmVyb21lIEV0aWVubmUncyBbTWljcm9FdmVudF0oaHR0cHM6Ly9naXRodWIuY29tL2plcm9tZWV0aWVubmUvbWljcm9ldmVudC5qcykuXG5cdFx0ICogICAgICAgICBNSVQgKGMpIDIwMTEgSmVyb21lIEV0aWVubmUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENvbnRhaW5zIGFsbCBvZiB0aGUgZXZlbnRzLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSB7fTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVtaXR0ZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIEJpbmQgYSBjYWxsYmFjayB0byBhIHNwZWNpZmljIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIGV2ZW50ICAgICBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gbGlzdGVuIGZvci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCBpcyBlbWl0dGVkXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9zcGxpdCB0aGUgZXZlbnRcblx0ICAgICAgICB2YXIgZXZlbnRzID0gZXZlbnQuc3BsaXQoL1xcVysvKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnROYW1lID0gZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnROYW1lXSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudE5hbWVdLnB1c2goY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQmluZCBhIGNhbGxiYWNrIHdoaWNoIGlzIG9ubHkgaW52b2tlZCBvbmNlXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgZXZlbnQgICAgIFRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBsaXN0ZW4gZm9yLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50IGlzIGVtaXR0ZWRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuXHQgICAgICAgIHZhciBib3VuZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvL2ludm9rZSB0aGUgY2FsbGJhY2tcblx0ICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgdGhpcy5vZmYoZXZlbnQsIGJvdW5kQ2FsbGJhY2spO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm9uKGV2ZW50LCBib3VuZENhbGxiYWNrKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lci5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBldmVudCAgICAgVGhlIGV2ZW50IHRvIHN0b3AgbGlzdGVuaW5nIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHdoaWNoIHdhcyBib3VuZCB0b1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZXZlbnQgd2l0aCBUb25lLkVtaXR0ZXIub24uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vIGNhbGxiYWNrIGlzIGdpdmVuLCBhbGwgY2FsbGJhY2tzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cyBhcmUgcmVtb3ZlZC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50cyA9IGV2ZW50LnNwbGl0KC9cXFcrLyk7XG5cdCAgICAgICAgZm9yICh2YXIgZXYgPSAwOyBldiA8IGV2ZW50cy5sZW5ndGg7IGV2KyspIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSBldmVudHNbZXZdO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihjYWxsYmFjaykpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnRdID0gW107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBldmVudExpc3QgPSB0aGlzLl9ldmVudHNbZXZlbnRdO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudExpc3RbaV0gPT09IGNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudExpc3Quc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2UgYWxsIG9mIHRoZSBjYWxsYmFja3MgYm91bmQgdG8gdGhlIGV2ZW50XG5cdFx0ICogIHdpdGggYW55IGFyZ3VtZW50cyBwYXNzZWQgaW4uXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGV2ZW50ICBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJncy4uLiBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9ucyBsaXN0ZW5pbmcuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzKSB7XG5cdCAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5zbGljZSgxKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudCkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldmVudExpc3QgPSB0aGlzLl9ldmVudHNbZXZlbnRdLnNsaWNlKDApO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV2ZW50TGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50TGlzdFtpXS5hcHBseSh0aGlzLCBhcmdzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIEVtaXR0ZXIgZnVuY3Rpb25zIChvbi9vZmYvZW1pdCkgdG8gdGhlIG9iamVjdFxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R8RnVuY3Rpb259ICBvYmplY3QgIFRoZSBvYmplY3Qgb3IgY2xhc3MgdG8gZXh0ZW5kLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLm1peGluID0gZnVuY3Rpb24gKG9iamVjdCkge1xuXHQgICAgICAgIHZhciBmdW5jdGlvbnMgPSBbXG5cdCAgICAgICAgICAgICdvbicsXG5cdCAgICAgICAgICAgICdvbmNlJyxcblx0ICAgICAgICAgICAgJ29mZicsXG5cdCAgICAgICAgICAgICdlbWl0J1xuXHQgICAgICAgIF07XG5cdCAgICAgICAgb2JqZWN0Ll9ldmVudHMgPSB7fTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZnVuYyA9IGZ1bmN0aW9uc1tpXTtcblx0ICAgICAgICAgICAgdmFyIGVtaXR0ZXJGdW5jID0gVG9uZS5FbWl0dGVyLnByb3RvdHlwZVtmdW5jXTtcblx0ICAgICAgICAgICAgb2JqZWN0W2Z1bmNdID0gZW1pdHRlckZ1bmM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lLkVtaXR0ZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRW1pdHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgVGltZWxpbmUgY2xhc3MgZm9yIHNjaGVkdWxpbmcgYW5kIG1haW50YWluaW5nIHN0YXRlXG5cdFx0ICogICAgICAgICBhbG9uZyBhIHRpbWVsaW5lLiBBbGwgZXZlbnRzIG11c3QgaGF2ZSBhIFwidGltZVwiIHByb3BlcnR5LlxuXHRcdCAqICAgICAgICAgSW50ZXJuYWxseSwgZXZlbnRzIGFyZSBzdG9yZWQgaW4gdGltZSBvcmRlciBmb3IgZmFzdFxuXHRcdCAqICAgICAgICAgcmV0cmlldmFsLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gW21lbW9yeT1JbmZpbml0eV0gVGhlIG51bWJlciBvZiBwcmV2aW91cyBldmVudHMgdGhhdCBhcmUgcmV0YWluZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnbWVtb3J5J10sIFRvbmUuVGltZWxpbmUpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXJyYXkgb2Ygc2NoZWR1bGVkIHRpbWVsaW5lIGV2ZW50c1xuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1lbW9yeSBvZiB0aGUgdGltZWxpbmUsIGkuZS5cblx0XHRcdCAqICBob3cgbWFueSBldmVudHMgaW4gdGhlIHBhc3QgaXQgd2lsbCByZXRhaW5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1lbW9yeSA9IG9wdGlvbnMubWVtb3J5O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZWxpbmUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUuZGVmYXVsdHMgPSB7ICdtZW1vcnknOiBJbmZpbml0eSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaW1lbGluZSNcblx0XHQgKiAgQG5hbWUgbGVuZ3RoXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGltZWxpbmUucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmUubGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEluc2VydCBhbiBldmVudCBvYmplY3Qgb250byB0aGUgdGltZWxpbmUuIEV2ZW50cyBtdXN0IGhhdmUgYSBcInRpbWVcIiBhdHRyaWJ1dGUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgb2JqZWN0IHRvIGluc2VydCBpbnRvIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAvL3RoZSBldmVudCBuZWVkcyB0byBoYXZlIGEgdGltZSBhdHRyaWJ1dGVcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKGV2ZW50LnRpbWUpKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5UaW1lbGluZTogZXZlbnRzIG11c3QgaGF2ZSBhIHRpbWUgYXR0cmlidXRlJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGV2ZW50LnRpbWUgPSBldmVudC50aW1lLnZhbHVlT2YoKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2goZXZlbnQudGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuc3BsaWNlKGluZGV4ICsgMSwgMCwgZXZlbnQpO1xuXHQgICAgICAgIC8vaWYgdGhlIGxlbmd0aCBpcyBtb3JlIHRoYW4gdGhlIG1lbW9yeSwgcmVtb3ZlIHRoZSBwcmV2aW91cyBvbmVzXG5cdCAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gdGhpcy5tZW1vcnkpIHtcblx0ICAgICAgICAgICAgdmFyIGRpZmYgPSB0aGlzLmxlbmd0aCAtIHRoaXMubWVtb3J5O1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZS5zcGxpY2UoMCwgZGlmZik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgb2JqZWN0IHRvIHJlbW92ZSBmcm9tIHRoZSBsaXN0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fdGltZWxpbmUuaW5kZXhPZihldmVudCk7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZS5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBuZWFyZXN0IGV2ZW50IHdob3NlIHRpbWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGV2ZW50IG9iamVjdCBzZXQgYWZ0ZXIgdGhhdCB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHRpbWUsIGNvbXBhcmF0b3IpIHtcblx0ICAgICAgICBjb21wYXJhdG9yID0gVG9uZS5kZWZhdWx0QXJnKGNvbXBhcmF0b3IsICd0aW1lJyk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUsIGNvbXBhcmF0b3IpO1xuXHQgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4XTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZmlyc3QgZXZlbnQgaW4gdGhlIHRpbWVsaW5lIHdpdGhvdXQgcmVtb3ZpbmcgaXRcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGZpcnN0IGV2ZW50IG9iamVjdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbMF07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZmlyc3QgZXZlbnQgaW4gdGhlIHRpbWVsaW5lIGFuZCByZW1vdmUgaXRcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGZpcnN0IGV2ZW50IG9iamVjdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuc2hpZnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lLnNoaWZ0KCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgZXZlbnQgd2hpY2ggaXMgc2NoZWR1bGVkIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGV2ZW50IG9iamVjdCBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZ2V0QWZ0ZXIgPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSwgY29tcGFyYXRvcik7XG5cdCAgICAgICAgaWYgKGluZGV4ICsgMSA8IHRoaXMuX3RpbWVsaW5lLmxlbmd0aCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXggKyAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgZXZlbnQgYmVmb3JlIHRoZSBldmVudCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGNvbXBhcmF0b3IgV2hpY2ggdmFsdWUgaW4gdGhlIG9iamVjdCB0byBjb21wYXJlXG5cdFx0ICogIEByZXR1cm5zIHtPYmplY3R9IFRoZSBldmVudCBvYmplY3QgYmVmb3JlIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5nZXRCZWZvcmUgPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgbGVuID0gdGhpcy5fdGltZWxpbmUubGVuZ3RoO1xuXHQgICAgICAgIC8vaWYgaXQncyBhZnRlciB0aGUgbGFzdCBpdGVtLCByZXR1cm4gdGhlIGxhc3QgaXRlbVxuXHQgICAgICAgIGlmIChsZW4gPiAwICYmIHRoaXMuX3RpbWVsaW5lW2xlbiAtIDFdW2NvbXBhcmF0b3JdIDwgdGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbbGVuIC0gMV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lLCBjb21wYXJhdG9yKTtcblx0ICAgICAgICBpZiAoaW5kZXggLSAxID49IDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4IC0gMV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgZXZlbnRzIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lLmxlbmd0aCA+IDEpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKGFmdGVyKTtcblx0ICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVtpbmRleF0udGltZSA9PT0gYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL2dldCB0aGUgZmlyc3QgaXRlbSB3aXRoIHRoYXQgdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW2ldLnRpbWUgPT09IGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IHRoaXMuX3RpbWVsaW5lLnNsaWNlKDAsIGluZGV4KTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSB0aGlzLl90aW1lbGluZS5zbGljZSgwLCBpbmRleCArIDEpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBbXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGltZWxpbmUubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgICAgIC8vdGhlIGZpcnN0IGl0ZW0ncyB0aW1lXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVswXS50aW1lID49IGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgZXZlbnRzIGJlZm9yZSBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gY2FuY2VsIGJlZm9yZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmNhbmNlbEJlZm9yZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gdGhpcy5fdGltZWxpbmUuc2xpY2UoaW5kZXggKyAxKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgcHJldmlvdXMgZXZlbnQgaWYgdGhlcmUgaXMgb25lLiBudWxsIG90aGVyd2lzZVxuXHRcdCAqIEBwYXJhbSAge09iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHRvIGZpbmQgdGhlIHByZXZpb3VzIG9uZSBvZlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gICAgICAgVGhlIGV2ZW50IHJpZ2h0IGJlZm9yZSB0aGUgZ2l2ZW4gZXZlbnRcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLnByZXZpb3VzRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl90aW1lbGluZS5pbmRleE9mKGV2ZW50KTtcblx0ICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtpbmRleCAtIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRG9lcyBhIGJpbmFyeSBzZWFyY2ggb24gdGhlIHRpbWVsaW5lIGFycmF5IGFuZCByZXR1cm5zIHRoZVxuXHRcdCAqICBuZWFyZXN0IGV2ZW50IGluZGV4IHdob3NlIHRpbWUgaXMgYWZ0ZXIgb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIElmIGEgdGltZSBpcyBzZWFyY2hlZCBiZWZvcmUgdGhlIGZpcnN0IGluZGV4IGluIHRoZSB0aW1lbGluZSwgLTEgaXMgcmV0dXJuZWQuXG5cdFx0ICogIElmIHRoZSB0aW1lIGlzIGFmdGVyIHRoZSBlbmQsIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBpdGVtIGlzIHJldHVybmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGNvbXBhcmF0b3IgV2hpY2ggdmFsdWUgaW4gdGhlIG9iamVjdCB0byBjb21wYXJlXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9IHRoZSBpbmRleCBpbiB0aGUgdGltZWxpbmUgYXJyYXlcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLl9zZWFyY2ggPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGlmICh0aGlzLl90aW1lbGluZS5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb21wYXJhdG9yID0gVG9uZS5kZWZhdWx0QXJnKGNvbXBhcmF0b3IsICd0aW1lJyk7XG5cdCAgICAgICAgdmFyIGJlZ2lubmluZyA9IDA7XG5cdCAgICAgICAgdmFyIGxlbiA9IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDtcblx0ICAgICAgICB2YXIgZW5kID0gbGVuO1xuXHQgICAgICAgIGlmIChsZW4gPiAwICYmIHRoaXMuX3RpbWVsaW5lW2xlbiAtIDFdW2NvbXBhcmF0b3JdIDw9IHRpbWUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGxlbiAtIDE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHdoaWxlIChiZWdpbm5pbmcgPCBlbmQpIHtcblx0ICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBtaWRwb2ludCBmb3Igcm91Z2hseSBlcXVhbCBwYXJ0aXRpb25cblx0ICAgICAgICAgICAgdmFyIG1pZFBvaW50ID0gTWF0aC5mbG9vcihiZWdpbm5pbmcgKyAoZW5kIC0gYmVnaW5uaW5nKSAvIDIpO1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl90aW1lbGluZVttaWRQb2ludF07XG5cdCAgICAgICAgICAgIHZhciBuZXh0RXZlbnQgPSB0aGlzLl90aW1lbGluZVttaWRQb2ludCArIDFdO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnRbY29tcGFyYXRvcl0gPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIC8vY2hvb3NlIHRoZSBsYXN0IG9uZSB0aGF0IGhhcyB0aGUgc2FtZSB0aW1lXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gbWlkUG9pbnQ7IGkgPCB0aGlzLl90aW1lbGluZS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0ZXN0RXZlbnQgPSB0aGlzLl90aW1lbGluZVtpXTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGVzdEV2ZW50W2NvbXBhcmF0b3JdID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG1pZFBvaW50ID0gaTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbWlkUG9pbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRbY29tcGFyYXRvcl0gPCB0aW1lICYmIG5leHRFdmVudFtjb21wYXJhdG9yXSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBtaWRQb2ludDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFtjb21wYXJhdG9yXSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIC8vc2VhcmNoIGxvd2VyXG5cdCAgICAgICAgICAgICAgICBlbmQgPSBtaWRQb2ludDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vc2VhcmNoIHVwcGVyXG5cdCAgICAgICAgICAgICAgICBiZWdpbm5pbmcgPSBtaWRQb2ludCArIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBpdGVyYXRvci4gQXBwbGllcyBleHRyYSBzYWZldHkgY2hlY2tzIGZvclxuXHRcdCAqICByZW1vdmluZyBpdGVtcyBmcm9tIHRoZSBhcnJheS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFja1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSAgICBsb3dlckJvdW5kXG5cdFx0ICogIEBwYXJhbSAge051bWJlcj19ICAgIHVwcGVyQm91bmRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLl9pdGVyYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBsb3dlckJvdW5kLCB1cHBlckJvdW5kKSB7XG5cdCAgICAgICAgbG93ZXJCb3VuZCA9IFRvbmUuZGVmYXVsdEFyZyhsb3dlckJvdW5kLCAwKTtcblx0ICAgICAgICB1cHBlckJvdW5kID0gVG9uZS5kZWZhdWx0QXJnKHVwcGVyQm91bmQsIHRoaXMuX3RpbWVsaW5lLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNsaWNlKGxvd2VyQm91bmQsIHVwcGVyQm91bmQgKyAxKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXlcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2spO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYXQgb3IgYmVmb3JlIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEJlZm9yZSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciB1cHBlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmICh1cHBlckJvdW5kICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCAwLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hBZnRlciA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciBsb3dlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIGxvd2VyQm91bmQgKyAxKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGJldHdlZW4gdGhlIHN0YXJ0VGltZSBhbmQgZW5kVGltZS4gXG5cdFx0ICogIFRoZSB0aW1lcmFuZ2UgaXMgaW5jbHVzaXZlIG9mIHRoZSBzdGFydFRpbWUsIGJ1dCBleGNsdXNpdmUgb2YgdGhlIGVuZFRpbWUuIFxuXHRcdCAqICByYW5nZSA9IFtzdGFydFRpbWUsIGVuZFRpbWUpLiBcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgc3RhcnRUaW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgZW5kVGltZSBUaGUgZW5kIG9mIHRoZSB0ZXN0IGludGVydmFsLiBcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEJldHdlZW4gPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHZhciBsb3dlckJvdW5kID0gdGhpcy5fc2VhcmNoKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlzLl9zZWFyY2goZW5kVGltZSk7XG5cdCAgICAgICAgaWYgKGxvd2VyQm91bmQgIT09IC0xICYmIHVwcGVyQm91bmQgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVtsb3dlckJvdW5kXS50aW1lICE9PSBzdGFydFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGxvd2VyQm91bmQgKz0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL2V4Y2x1c2l2ZSBvZiB0aGUgZW5kIHRpbWVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW3VwcGVyQm91bmRdLnRpbWUgPT09IGVuZFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIHVwcGVyQm91bmQgLT0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCBsb3dlckJvdW5kLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGxvd2VyQm91bmQgPT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIDAsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGF0IG9yIGFmdGVyIHRoZSBnaXZlbiB0aW1lLiBTaW1pbGFyIHRvXG5cdFx0ICogIGZvckVhY2hBZnRlciwgYnV0IGluY2x1ZGVzIHRoZSBpdGVtKHMpIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEZyb20gPSBmdW5jdGlvbiAodGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL2l0ZXJhdGUgb3ZlciB0aGUgaXRlbXMgaW4gcmV2ZXJzZSBzbyB0aGF0IHJlbW92aW5nIGFuIGl0ZW0gZG9lc24ndCBicmVhayB0aGluZ3Ncblx0ICAgICAgICB2YXIgbG93ZXJCb3VuZCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICAvL3dvcmsgYmFja3dhcmRzIHVudGlsIHRoZSBldmVudCB0aW1lIGlzIGxlc3MgdGhhbiB0aW1lXG5cdCAgICAgICAgd2hpbGUgKGxvd2VyQm91bmQgPj0gMCAmJiB0aGlzLl90aW1lbGluZVtsb3dlckJvdW5kXS50aW1lID49IHRpbWUpIHtcblx0ICAgICAgICAgICAgbG93ZXJCb3VuZC0tO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCBsb3dlckJvdW5kICsgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciB1cHBlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmICh1cHBlckJvdW5kICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRpbWUgPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSwgMCwgdXBwZXJCb3VuZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZWxpbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghd2luZG93Lmhhc093blByb3BlcnR5KCdPZmZsaW5lQXVkaW9Db250ZXh0JykgJiYgd2luZG93Lmhhc093blByb3BlcnR5KCd3ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0JykpIHtcblx0ICAgICAgICAgICAgd2luZG93Lk9mZmxpbmVBdWRpb0NvbnRleHQgPSB3aW5kb3cud2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yZXR1cm5zIHByb21pc2U/XG5cdCAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgT2ZmbGluZUF1ZGlvQ29udGV4dCgxLCAxLCA0NDEwMCk7XG5cdCAgICAgICAgdmFyIHJldCA9IGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTtcblx0ICAgICAgICBpZiAoIShyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuXHQgICAgICAgICAgICBPZmZsaW5lQXVkaW9Db250ZXh0LnByb3RvdHlwZS5fbmF0aXZlX3N0YXJ0UmVuZGVyaW5nID0gT2ZmbGluZUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuc3RhcnRSZW5kZXJpbmc7XG5cdCAgICAgICAgICAgIE9mZmxpbmVBdWRpb0NvbnRleHQucHJvdG90eXBlLnN0YXJ0UmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChkb25lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlLnJlbmRlcmVkQnVmZmVyKTtcblx0ICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX25hdGl2ZV9zdGFydFJlbmRlcmluZygpO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghd2luZG93Lmhhc093blByb3BlcnR5KCdBdWRpb0NvbnRleHQnKSAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3dlYmtpdEF1ZGlvQ29udGV4dCcpKSB7XG5cdCAgICAgICAgICAgIHdpbmRvdy5BdWRpb0NvbnRleHQgPSB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL25vdCBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgYnV0IG9ubHkgYW4gQVBJIHBsYWNlaG9sZGVyXG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNsb3NlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0Z1bmN0aW9uKHRoaXMuc3VzcGVuZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnN1c3BlbmQoKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9ub3QgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnRcblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUucmVzdW1lKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NyZWF0ZUdhaW5cblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2FpbiAmJiBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUdhaW5Ob2RlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2FpbiA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2Fpbk5vZGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY3JlYXRlRGVsYXlcblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlRGVsYXkgJiYgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheU5vZGUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheSA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlRGVsYXlOb2RlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3Rlc3QgZGVjb2RlQXVkaW9EYXRhIHJldHVybnMgYSBwcm9taXNlXG5cdCAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vaGF5b25hby93ZWItYXVkaW8tYXBpLXNoaW0vYmxvYi9tYXN0ZXIvc3JjL0F1ZGlvQ29udGV4dC5qc1xuXHQgICAgICAgIC8vIE1JVCBMaWNlbnNlIChjKSAyMDE1IEBtb2hheW9uYW9cblx0ICAgICAgICB2YXIgZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSA9IGZhbHNlO1xuXHQgICAgICAgIHZhciBvZmZsaW5lQ29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDEsIDEsIDQ0MTAwKTtcblx0ICAgICAgICB2YXIgYXVkaW9EYXRhID0gbmV3IFVpbnQzMkFycmF5KFtcblx0ICAgICAgICAgICAgMTE3OTAxMTQxMCxcblx0ICAgICAgICAgICAgNDgsXG5cdCAgICAgICAgICAgIDExNjMyODA3MjcsXG5cdCAgICAgICAgICAgIDU0NDUwMTA5NCxcblx0ICAgICAgICAgICAgMTYsXG5cdCAgICAgICAgICAgIDEzMTA3Myxcblx0ICAgICAgICAgICAgNDQxMDAsXG5cdCAgICAgICAgICAgIDE3NjQwMCxcblx0ICAgICAgICAgICAgMTA0ODU4MCxcblx0ICAgICAgICAgICAgMTYzNTAxNzA2MCxcblx0ICAgICAgICAgICAgOCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMFxuXHQgICAgICAgIF0pLmJ1ZmZlcjtcblx0ICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICB2YXIgcmV0ID0gb2ZmbGluZUNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKGF1ZGlvRGF0YSk7XG5cdCAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdCAgICAgICAgICAgICAgICBkZWNvZGVBdWRpb0RhdGFQcm9taXNlID0gdHJ1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSA9IGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIWRlY29kZUF1ZGlvRGF0YVByb21pc2UpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5fbmF0aXZlX2RlY29kZUF1ZGlvRGF0YSA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuZGVjb2RlQXVkaW9EYXRhO1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmRlY29kZUF1ZGlvRGF0YSA9IGZ1bmN0aW9uIChhdWRpb0RhdGEpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoc3VjY2VzcywgZXJyb3IpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9uYXRpdmVfZGVjb2RlQXVkaW9EYXRhKGF1ZGlvRGF0YSwgc3VjY2VzcywgZXJyb3IpO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBBdWRpb0NvbnRleHQuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICogIEBwYXJhbSB7QXVkaW9Db250ZXh0PX0gY29udGV4dCBvcHRpb25hbGx5IHBhc3MgaW4gYSBjb250ZXh0XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydjb250ZXh0J10sIFRvbmUuQ29udGV4dCk7XG5cdCAgICAgICAgaWYgKCFvcHRpb25zLmNvbnRleHQpIHtcblx0ICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0ID0gbmV3IHdpbmRvdy5BdWRpb0NvbnRleHQoKTtcblx0ICAgICAgICAgICAgaWYgKCFvcHRpb25zLmNvbnRleHQpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGNyZWF0ZSBBdWRpb0NvbnRleHQuIFBvc3NpYmx5IHRvbyBtYW55IEF1ZGlvQ29udGV4dHMgcnVubmluZyBhbHJlYWR5LicpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2NvbnRleHQgPSBvcHRpb25zLmNvbnRleHQ7XG5cdCAgICAgICAgLy8gZXh0ZW5kIGFsbCBvZiB0aGUgbWV0aG9kc1xuXHQgICAgICAgIGZvciAodmFyIHByb3AgaW4gdGhpcy5fY29udGV4dCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZWZpbmVQcm9wZXJ0eSh0aGlzLl9jb250ZXh0LCBwcm9wKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlZmF1bHQgbGF0ZW5jeSBoaW50XG5cdFx0XHQgKiAgQHR5cGUgIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xhdGVuY3lIaW50ID0gb3B0aW9ucy5sYXRlbmN5SGludDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBvYmplY3QgY29udGFpbmluZyBhbGwgb2YgdGhlIGNvbnN0YW50cyBBdWRpb0J1ZmZlclNvdXJjZU5vZGVzXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IHt9O1xuXHQgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgLy8gV09SS0VSXG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgZXZlbnRzIGFyZSBzY2hlZHVsZWRcblx0XHRcdCAqICBpbnRvIHRoZSBmdXR1cmVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG9va0FoZWFkID0gb3B0aW9ucy5sb29rQWhlYWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSByZWZlcmVuY2UgdG8gdGhlIGFjdHVhbCBjb21wdXRlZCB1cGRhdGUgaW50ZXJ2YWxcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29tcHV0ZWRVcGRhdGVJbnRlcnZhbCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSByZWxpYWJsZSBjYWxsYmFjayBtZXRob2Rcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7VGlja2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGlja2VyID0gbmV3IFRpY2tlcih0aGlzLmVtaXQuYmluZCh0aGlzLCAndGljaycpLCBvcHRpb25zLmNsb2NrU291cmNlLCBvcHRpb25zLnVwZGF0ZUludGVydmFsKTtcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8vIFRJTUVPVVRTXG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIHNldFRpbWVvdXQgZXZlbnRzLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZW91dHMgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0aW1lb3V0IGlkIGNvdW50ZXJcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lb3V0SWRzID0gMDtcblx0ICAgICAgICB0aGlzLm9uKCd0aWNrJywgdGhpcy5fdGltZW91dExvb3AuYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Db250ZXh0LCBUb25lLkVtaXR0ZXIpO1xuXHQgICAgVG9uZS5FbWl0dGVyLm1peGluKFRvbmUuQ29udGV4dCk7XG5cdCAgICAvKipcblx0XHQgKiBkZWZhdWx0c1xuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdjbG9ja1NvdXJjZSc6ICd3b3JrZXInLFxuXHQgICAgICAgICdsYXRlbmN5SGludCc6ICdpbnRlcmFjdGl2ZScsXG5cdCAgICAgICAgJ2xvb2tBaGVhZCc6IDAuMSxcblx0ICAgICAgICAndXBkYXRlSW50ZXJ2YWwnOiAwLjAzXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmluZSBhIHByb3BlcnR5IG9uIHRoaXMgVG9uZS5Db250ZXh0LlxuXHRcdCAqICBUaGlzIGlzIHVzZWQgdG8gZXh0ZW5kIHRoZSBuYXRpdmUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvQ29udGV4dH0gIGNvbnRleHRcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5fZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoY29udGV4dCwgcHJvcCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpc1twcm9wXSkpIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3AsIHtcblx0ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGV4dFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXS5iaW5kKGNvbnRleHQpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjb250ZXh0W3Byb3BdID0gdmFsO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IGF1ZGlvIGNvbnRleHQgdGltZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQuY3VycmVudFRpbWUgKyB0aGlzLmxvb2tBaGVhZDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUHJvbWlzZSB3aGljaCBpcyBpbnZva2VkIHdoZW4gdGhlIGNvbnRleHQgaXMgcnVubmluZy5cblx0XHQgKiAgVHJpZXMgdG8gcmVzdW1lIHRoZSBjb250ZXh0IGlmIGl0J3Mgbm90IHN0YXJ0ZWQuXG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5yZWFkeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGRvbmUpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQuc3RhdGUgPT09ICdydW5uaW5nJykge1xuXHQgICAgICAgICAgICAgICAgZG9uZSgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5yZXN1bWUoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFByb21pc2Ugd2hpY2ggaXMgaW52b2tlZCB3aGVuIHRoZSBjb250ZXh0IGlzIHJ1bm5pbmcuXG5cdFx0ICogIFRyaWVzIHRvIHJlc3VtZSB0aGUgY29udGV4dCBpZiBpdCdzIG5vdCBzdGFydGVkLlxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQuY2xvc2UoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgVG9uZS5Db250ZXh0LmVtaXQoJ2Nsb3NlJywgdGhpcyk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2VuZXJhdGUgYSBsb29wZWQgYnVmZmVyIGF0IHNvbWUgY29uc3RhbnQgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHZhbFxuXHRcdCAqICBAcmV0dXJuICB7QnVmZmVyU291cmNlTm9kZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuZ2V0Q29uc3RhbnQgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2NvbnN0YW50c1t2YWxdKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25zdGFudHNbdmFsXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5fY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgMTI4LCB0aGlzLl9jb250ZXh0LnNhbXBsZVJhdGUpO1xuXHQgICAgICAgICAgICB2YXIgYXJyID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgYXJyW2ldID0gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBjb25zdGFudCA9IHRoaXMuX2NvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LmNoYW5uZWxDb3VudCA9IDE7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgICAgICBjb25zdGFudC5idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgICAgIGNvbnN0YW50Lmxvb3AgPSB0cnVlO1xuXHQgICAgICAgICAgICBjb25zdGFudC5zdGFydCgwKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzW3ZhbF0gPSBjb25zdGFudDtcblx0ICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByaXZhdGUgbG9vcCB3aGljaCBrZWVwcyB0cmFjayBvZiB0aGUgY29udGV4dCBzY2hlZHVsZWQgdGltZW91dHNcblx0XHQgKiAgSXMgaW52b2tlZCBmcm9tIHRoZSBjbG9jayBzb3VyY2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuX3RpbWVvdXRMb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHdoaWxlICh0aGlzLl90aW1lb3V0cyAmJiB0aGlzLl90aW1lb3V0cy5sZW5ndGggJiYgdGhpcy5fdGltZW91dHMucGVlaygpLnRpbWUgPD0gbm93KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRzLnNoaWZ0KCkuY2FsbGJhY2soKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEEgc2V0VGltZW91dCB3aGljaCBpcyBnYXVyZW50ZWVkIGJ5IHRoZSBjbG9jayBzb3VyY2UuXG5cdFx0ICogIEFsc28gcnVucyBpbiB0aGUgb2ZmbGluZSBjb250ZXh0LlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGZuICAgICAgIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHQgKiAgQHBhcmFtICB7U2Vjb25kc30gICAgdGltZW91dCAgVGhlIHRpbWVvdXQgaW4gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfSBJRCB0byB1c2Ugd2hlbiBpbnZva2luZyBUb25lLkNvbnRleHQuY2xlYXJUaW1lb3V0XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAoZm4sIHRpbWVvdXQpIHtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0SWRzKys7XG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dHMuYWRkKHtcblx0ICAgICAgICAgICAgY2FsbGJhY2s6IGZuLFxuXHQgICAgICAgICAgICB0aW1lOiBub3cgKyB0aW1lb3V0LFxuXHQgICAgICAgICAgICBpZDogdGhpcy5fdGltZW91dElkc1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aW1lb3V0SWRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhcnMgYSBwcmV2aW91c2x5IHNjaGVkdWxlZCB0aW1lb3V0IHdpdGggVG9uZS5jb250ZXh0LnNldFRpbWVvdXRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgaWQgIFRoZSBJRCByZXR1cm5lZCBmcm9tIHNldFRpbWVvdXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ29udGV4dH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24gKGlkKSB7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LmlkID09PSBpZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUoZXZlbnQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEhvdyBvZnRlbiB0aGUgV2ViIFdvcmtlciBjYWxsYmFjayBpcyBpbnZva2VkLlxuXHRcdCAqICBUaGlzIG51bWJlciBjb3JyZXNwb25kcyB0byBob3cgcmVzcG9uc2l2ZSB0aGUgc2NoZWR1bGluZ1xuXHRcdCAqICBjYW4gYmUuIENvbnRleHQudXBkYXRlSW50ZXJ2YWwgKyBDb250ZXh0Lmxvb2tBaGVhZCBnaXZlcyB5b3UgdGhlXG5cdFx0ICogIHRvdGFsIGxhdGVuY3kgYmV0d2VlbiBzY2hlZHVsaW5nIGFuIGV2ZW50IGFuZCBoZWFyaW5nIGl0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db250ZXh0I1xuXHRcdCAqICBAbmFtZSB1cGRhdGVJbnRlcnZhbFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udGV4dC5wcm90b3R5cGUsICd1cGRhdGVJbnRlcnZhbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tlci51cGRhdGVJbnRlcnZhbDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlci51cGRhdGVJbnRlcnZhbCA9IGludGVydmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFdoYXQgdGhlIHNvdXJjZSBvZiB0aGUgY2xvY2sgaXMsIGVpdGhlciBcIndvcmtlclwiIChXZWIgV29ya2VyIFtkZWZhdWx0XSksXG5cdFx0ICogIFwidGltZW91dFwiIChzZXRUaW1lb3V0KSwgb3IgXCJvZmZsaW5lXCIgKG5vbmUpLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db250ZXh0I1xuXHRcdCAqICBAbmFtZSBjbG9ja1NvdXJjZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udGV4dC5wcm90b3R5cGUsICdjbG9ja1NvdXJjZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tlci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHR5cGUgb2YgcGxheWJhY2ssIHdoaWNoIGFmZmVjdHMgdHJhZGVvZmZzIGJldHdlZW4gYXVkaW9cblx0XHQgKiAgb3V0cHV0IGxhdGVuY3kgYW5kIHJlc3BvbnNpdmVuZXNzLlxuXHRcdCAqXG5cdFx0ICogIEluIGFkZGl0aW9uIHRvIHNldHRpbmcgdGhlIHZhbHVlIGluIHNlY29uZHMsIHRoZSBsYXRlbmN5SGludCBhbHNvXG5cdFx0ICogIGFjY2VwdHMgdGhlIHN0cmluZ3MgXCJpbnRlcmFjdGl2ZVwiIChwcmlvcml0aXplcyBsb3cgbGF0ZW5jeSksXG5cdFx0ICogIFwicGxheWJhY2tcIiAocHJpb3JpdGl6ZXMgc3VzdGFpbmVkIHBsYXliYWNrKSwgXCJiYWxhbmNlZFwiIChiYWxhbmNlc1xuXHRcdCAqICBsYXRlbmN5IGFuZCBwZXJmb3JtYW5jZSksIGFuZCBcImZhc3Rlc3RcIiAobG93ZXN0IGxhdGVuY3ksIG1pZ2h0IGdsaXRjaCBtb3JlIG9mdGVuKS5cblx0XHQgKiAgQHR5cGUge1N0cmluZ3xTZWNvbmRzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db250ZXh0I1xuXHRcdCAqICBAbmFtZSBsYXRlbmN5SGludFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHRoZSBsb29rQWhlYWQgdG8gMC4zIHNlY29uZHNcblx0XHQgKiBUb25lLmNvbnRleHQubGF0ZW5jeUhpbnQgPSAwLjM7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db250ZXh0LnByb3RvdHlwZSwgJ2xhdGVuY3lIaW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGF0ZW5jeUhpbnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChoaW50KSB7XG5cdCAgICAgICAgICAgIHZhciBsb29rQWhlYWQgPSBoaW50O1xuXHQgICAgICAgICAgICB0aGlzLl9sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzU3RyaW5nKGhpbnQpKSB7XG5cdCAgICAgICAgICAgICAgICBzd2l0Y2ggKGhpbnQpIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2ludGVyYWN0aXZlJzpcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjE7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdwbGF5YmFjayc6XG5cdCAgICAgICAgICAgICAgICAgICAgbG9va0FoZWFkID0gMC44O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubGF0ZW5jeUhpbnQgPSBoaW50O1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnYmFsYW5jZWQnOlxuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuMjU7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdmYXN0ZXN0Jzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gJ2ludGVyYWN0aXZlJztcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjAxO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZUludGVydmFsID0gbG9va0FoZWFkIC8gMztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbmxpa2Ugb3RoZXIgZGlzcG9zZSBtZXRob2RzLCB0aGlzIHJldHVybnMgYSBQcm9taXNlXG5cdFx0ICogIHdoaWNoIGV4ZWN1dGVzIHdoZW4gdGhlIGNvbnRleHQgaXMgY2xvc2VkIGFuZCBkaXNwb3NlZFxuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLmNsb3NlKCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIgPSBudWxsO1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lb3V0cy5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRzID0gbnVsbDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY29uIGluIHRoaXMuX2NvbnN0YW50cykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzW2Nvbl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IG51bGw7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgQSBjbGFzcyB3aGljaCBwcm92aWRlcyBhIHJlbGlhYmxlIGNhbGxiYWNrIHVzaW5nIGVpdGhlclxuXHRcdCAqICAgICAgICBhIFdlYiBXb3JrZXIsIG9yIGlmIHRoYXQgaXNuJ3Qgc3VwcG9ydGVkLCBmYWxscyBiYWNrIHRvIHNldFRpbWVvdXQuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBUaWNrZXIgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHR5cGUsIHVwZGF0ZUludGVydmFsKSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBFaXRoZXIgXCJ3b3JrZXJcIiBvciBcInRpbWVvdXRcIlxuXHRcdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB1cGRhdGUgaW50ZXJ2YWwgb2YgdGhlIHdvcmtlclxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl91cGRhdGVJbnRlcnZhbCA9IHVwZGF0ZUludGVydmFsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGNhbGxiYWNrIHRvIGludm9rZSBhdCByZWd1bGFyIGludGVydmFsc1xuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gVG9uZS5kZWZhdWx0QXJnKGNhbGxiYWNrLCBUb25lLm5vT3ApO1xuXHQgICAgICAgIC8vY3JlYXRlIHRoZSBjbG9jayBzb3VyY2UgZm9yIHRoZSBmaXJzdCB0aW1lXG5cdCAgICAgICAgdGhpcy5fY3JlYXRlQ2xvY2soKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcG9zc2libGUgdGlja2VyIHR5cGVzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLlR5cGUgPSB7XG5cdCAgICAgICAgV29ya2VyOiAnd29ya2VyJyxcblx0ICAgICAgICBUaW1lb3V0OiAndGltZW91dCcsXG5cdCAgICAgICAgT2ZmbGluZTogJ29mZmxpbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdlbmVyYXRlIGEgd2ViIHdvcmtlclxuXHRcdCAqICBAcmV0dXJuICB7V2ViV29ya2VyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fY3JlYXRlV29ya2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vVVJMIFNoaW1cblx0ICAgICAgICB3aW5kb3cuVVJMID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xuXHQgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoWy8vdGhlIGluaXRpYWwgdGltZW91dCB0aW1lXG5cdCAgICAgICAgICAgICd2YXIgdGltZW91dFRpbWUgPSAnICsgKHRoaXMuX3VwZGF0ZUludGVydmFsICogMTAwMCkudG9GaXhlZCgxKSArICc7JyArIC8vb25tZXNzYWdlIGNhbGxiYWNrXG5cdCAgICAgICAgICAgICdzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKG1zZyl7JyArICdcXHR0aW1lb3V0VGltZSA9IHBhcnNlSW50KG1zZy5kYXRhKTsnICsgJ307JyArIC8vdGhlIHRpY2sgZnVuY3Rpb24gd2hpY2ggcG9zdHMgYSBtZXNzYWdlXG5cdCAgICAgICAgICAgIC8vYW5kIHNjaGVkdWxlcyBhIG5ldyB0aWNrXG5cdCAgICAgICAgICAgICdmdW5jdGlvbiB0aWNrKCl7JyArICdcXHRzZXRUaW1lb3V0KHRpY2ssIHRpbWVvdXRUaW1lKTsnICsgJ1xcdHNlbGYucG9zdE1lc3NhZ2UoXFwndGlja1xcJyk7JyArICd9JyArIC8vY2FsbCB0aWNrIGluaXRpYWxseVxuXHQgICAgICAgICAgICAndGljaygpOyddKTtcblx0ICAgICAgICB2YXIgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cdCAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoYmxvYlVybCk7XG5cdCAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd29ya2VyID0gd29ya2VyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENyZWF0ZSBhIHRpbWVvdXQgbG9vcFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9jcmVhdGVUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGltZW91dCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9jYWxsYmFjaygpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5fdXBkYXRlSW50ZXJ2YWwgKiAxMDAwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDcmVhdGUgdGhlIGNsb2NrIHNvdXJjZS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fY3JlYXRlQ2xvY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRpY2tlci5UeXBlLldvcmtlcikge1xuXHQgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlV29ya2VyKCk7XG5cdCAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHdvcmtlcnMgbm90IHN1cHBvcnRlZCwgZmFsbGJhY2sgdG8gdGltZW91dFxuXHQgICAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IFRpY2tlci5UeXBlLlRpbWVvdXQ7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVDbG9jaygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUaWNrZXIuVHlwZS5UaW1lb3V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVRpbWVvdXQoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQG1lbWJlck9mIFRpY2tlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHVwZGF0ZUludGVydmFsXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUaWNrZXIucHJvdG90eXBlLCAndXBkYXRlSW50ZXJ2YWwnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVJbnRlcnZhbDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUludGVydmFsID0gTWF0aC5tYXgoaW50ZXJ2YWwsIDEyOCAvIDQ0MTAwKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRpY2tlci5UeXBlLldvcmtlcikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd29ya2VyLnBvc3RNZXNzYWdlKE1hdGgubWF4KGludGVydmFsICogMTAwMCwgMSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgdGlja2VyLCBlaXRoZXIgYSB3b3JrZXIgb3IgYSB0aW1lb3V0XG5cdFx0ICogQG1lbWJlck9mIFRpY2tlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRpY2tlci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGlzcG9zZUNsb2NrKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9jcmVhdGVDbG9jaygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXAgdGhlIGN1cnJlbnQgY2xvY2sgc291cmNlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuX2Rpc3Bvc2VDbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdGltZW91dCkge1xuXHQgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5fd29ya2VyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3dvcmtlci50ZXJtaW5hdGUoKTtcblx0ICAgICAgICAgICAgdGhpcy5fd29ya2VyLm9ubWVzc2FnZSA9IG51bGw7XG5cdCAgICAgICAgICAgIHRoaXMuX3dvcmtlciA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9kaXNwb3NlQ2xvY2soKTtcblx0ICAgICAgICB0aGlzLl9jYWxsYmFjayA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNoaW0gYWxsIGNvbm5lY3QvZGlzY29ubmVjdCBhbmQgc29tZSBkZXByZWNhdGVkIG1ldGhvZHMgd2hpY2ggYXJlIHN0aWxsIGluXG5cdFx0ICogIHNvbWUgb2xkZXIgaW1wbGVtZW50YXRpb25zLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5nZXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbmF0aXZlQ29ubmVjdCA9IEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdDtcblx0ICAgICAgICB2YXIgbmF0aXZlRGlzY29ubmVjdCA9IEF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdDtcblx0ICAgICAgICAvL3JlcGxhY2UgdGhlIG9sZCBjb25uZWN0IG1ldGhvZFxuXHQgICAgICAgIGZ1bmN0aW9uIHRvbmVDb25uZWN0KEIsIG91dE51bSwgaW5OdW0pIHtcblx0ICAgICAgICAgICAgaWYgKEIuaW5wdXQpIHtcblx0ICAgICAgICAgICAgICAgIGluTnVtID0gVG9uZS5kZWZhdWx0QXJnKGluTnVtLCAwKTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkoQi5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0KEIuaW5wdXRbaW5OdW1dKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdChCLmlucHV0LCBvdXROdW0sIGluTnVtKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKEIgaW5zdGFuY2VvZiBBdWRpb05vZGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlQ29ubmVjdC5jYWxsKHRoaXMsIEIsIG91dE51bSwgaW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQjtcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVDb25uZWN0LmNhbGwodGhpcywgQiwgb3V0TnVtKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEI7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXJyb3IgY29ubmVjdGluZyB0byBub2RlOiAnICsgQiArICdcXG4nICsgZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yZXBsYWNlIHRoZSBvbGQgZGlzY29ubmVjdCBtZXRob2Rcblx0ICAgICAgICBmdW5jdGlvbiB0b25lRGlzY29ubmVjdChCLCBvdXROdW0sIGluTnVtKSB7XG5cdCAgICAgICAgICAgIGlmIChCICYmIEIuaW5wdXQgJiYgVG9uZS5pc0FycmF5KEIuaW5wdXQpKSB7XG5cdCAgICAgICAgICAgICAgICBpbk51bSA9IFRvbmUuZGVmYXVsdEFyZyhpbk51bSwgMCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoQi5pbnB1dFtpbk51bV0sIG91dE51bSwgMCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoQiAmJiBCLmlucHV0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoQi5pbnB1dCwgb3V0TnVtLCBpbk51bSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgICAgIG5hdGl2ZURpc2Nvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Vycm9yIGRpc2Nvbm5lY3Rpbmcgbm9kZTogJyArIEIgKyAnXFxuJyArIGUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3QgIT09IHRvbmVDb25uZWN0KSB7XG5cdCAgICAgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IHRvbmVDb25uZWN0O1xuXHQgICAgICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSB0b25lRGlzY29ubmVjdDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vIHNldCB0aGUgYXVkaW8gY29udGV4dCBpbml0aWFsbHksIGFuZCBpZiBvbmUgaXMgbm90IGFscmVhZHkgY3JlYXRlZFxuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkICYmICFUb25lLmluaXRpYWxpemVkKSB7XG5cdCAgICAgICAgVG9uZS5jb250ZXh0ID0gbmV3IFRvbmUuQ29udGV4dCgpO1xuXHQgICAgICAgIC8vIGxvZyBvbiBmaXJzdCBpbml0aWFsaXphdGlvblxuXHQgICAgICAgIC8vIGFsbG93IG9wdGlvbmFsIHNpbGVuY2luZyBvZiB0aGlzIGxvZ1xuXHQgICAgICAgIGlmICghd2luZG93LlRPTkVfU0lMRU5DRV9WRVJTSU9OX0xPR0dJTkcpIHtcblx0ICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblx0ICAgICAgICAgICAgY29uc29sZS5sb2coJyVjICogVG9uZS5qcyAnICsgVG9uZS52ZXJzaW9uICsgJyAqICcsICdiYWNrZ3JvdW5kOiAjMDAwOyBjb2xvcjogI2ZmZicpO1xuXHQgICAgICAgIH1cblx0ICAgIH0gZWxzZSBpZiAoIVRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblx0ICAgICAgICBjb25zb2xlLndhcm4oJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFRvbmUuanMnKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBUb25lLkNvbnRleHQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BdWRpb05vZGUgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNsYXNzZXMgd2hpY2ggcHJvY2VzcyBhdWRpby5cblx0XHQgKiAgICAgICAgIEF1ZGlvTm9kZXMgaGF2ZSBpbnB1dHMgYW5kIG91dHB1dHMuXG5cdFx0ICogIEBwYXJhbVx0e0F1ZGlvQ29udGV4dD19IGNvbnRleHRcdFRoZSBhdWRpbyBjb250ZXh0IHRvIHVzZSB3aXRoIHRoZSBjbGFzc1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvL3VzZSB0aGUgZGVmYXVsdCBjb250ZXh0IGlmIG9uZSBpcyBub3QgcGFzc2VkIGluXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydjb250ZXh0J10sIHsgJ2NvbnRleHQnOiBUb25lLmNvbnRleHQgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgQXVkaW9Db250ZXh0IG9mIHRoaXMgaW5zdGFuY2Vcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7QXVkaW9Db250ZXh0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG9wdGlvbnMuY29udGV4dDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGF1ZGlvIGNvbnRleHQgYmVsb25naW5nIHRvIHRoaXMgaW5zdGFuY2UuXG5cdFx0ICogQHR5cGUge1RvbmUuQ29udGV4dH1cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogQG5hbWUgY29udGV4dFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NvbnRleHQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENyZWF0ZSBpbnB1dCBhbmQgb3V0cHV0cyBmb3IgdGhpcyBvYmplY3QuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIFtpbnB1dD0wXSAgIFRoZSBudW1iZXIgb2YgaW5wdXRzXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIFtvdXRwdXRzPTBdICBUaGUgbnVtYmVyIG9mIG91dHB1dHNcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQXVkaW9Ob2RlfSAgdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNyZWF0ZUluc091dHMgPSBmdW5jdGlvbiAoaW5wdXRzLCBvdXRwdXRzKSB7XG5cdCAgICAgICAgaWYgKGlucHV0cyA9PT0gMSkge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGlucHV0cyA+IDEpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dCA9IG5ldyBBcnJheShpbnB1dHMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAob3V0cHV0cyA9PT0gMSkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChvdXRwdXRzID4gMSkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBBcnJheShvdXRwdXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYW5uZWxDb3VudCBpcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHVzZWQgd2hlbiB1cC1taXhpbmcgYW5kIGRvd24tbWl4aW5nXG5cdFx0ICogIGNvbm5lY3Rpb25zIHRvIGFueSBpbnB1dHMgdG8gdGhlIG5vZGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIgZXhjZXB0IGZvclxuXHRcdCAqICBzcGVjaWZpYyBub2RlcyB3aGVyZSBpdHMgdmFsdWUgaXMgc3BlY2lhbGx5IGRldGVybWluZWQuXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBjaGFubmVsQ291bnRcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnY2hhbm5lbENvdW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYykge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50ID0gYztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjaGFubmVsQ291bnRNb2RlIGRldGVybWluZXMgaG93IGNoYW5uZWxzIHdpbGwgYmUgY291bnRlZCB3aGVuIHVwLW1peGluZyBhbmRcblx0XHQgKiAgZG93bi1taXhpbmcgY29ubmVjdGlvbnMgdG8gYW55IGlucHV0cyB0byB0aGUgbm9kZS5cblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJtYXhcIi4gVGhpcyBhdHRyaWJ1dGUgaGFzIG5vIGVmZmVjdCBmb3Igbm9kZXMgd2l0aCBubyBpbnB1dHMuXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgY2hhbm5lbENvdW50TW9kZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjaGFubmVsQ291bnRNb2RlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50TW9kZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG0pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxDb3VudE1vZGUgPSBtO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYW5uZWxJbnRlcnByZXRhdGlvbiBkZXRlcm1pbmVzIGhvdyBpbmRpdmlkdWFsIGNoYW5uZWxzIHdpbGwgYmUgdHJlYXRlZFxuXHRcdCAqICB3aGVuIHVwLW1peGluZyBhbmQgZG93bi1taXhpbmcgY29ubmVjdGlvbnMgdG8gYW55IGlucHV0cyB0byB0aGUgbm9kZS5cblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJzcGVha2Vyc1wiLlxuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIGNoYW5uZWxJbnRlcnByZXRhdGlvblxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjaGFubmVsSW50ZXJwcmV0YXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsSW50ZXJwcmV0YXRpb247XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsSW50ZXJwcmV0YXRpb24gPSBpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaW5wdXRzIGZlZWRpbmcgaW50byB0aGUgQXVkaW9Ob2RlLlxuXHRcdCAqICBGb3Igc291cmNlIG5vZGVzLCB0aGlzIHdpbGwgYmUgMC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgbnVtYmVyT2ZJbnB1dHNcblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdudW1iZXJPZklucHV0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5sZW5ndGg7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIG91dHB1dHMgY29taW5nIG91dCBvZiB0aGUgQXVkaW9Ob2RlLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBudW1iZXJPZk91dHB1dHNcblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdudW1iZXJPZk91dHB1dHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQubGVuZ3RoO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDYWxsZWQgd2hlbiBhbiBhdWRpbyBwYXJhbSBjb25uZWN0cyB0byB0aGlzIG5vZGVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLl9vbkNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdGhlIG91dHB1dCBvZiBhIFRvbmVOb2RlIHRvIGFuIEF1ZGlvUGFyYW0sIEF1ZGlvTm9kZSwgb3IgVG9uZU5vZGVcblx0XHQgKiAgQHBhcmFtICB7VG9uZSB8IEF1ZGlvUGFyYW0gfCBBdWRpb05vZGV9IHVuaXRcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBvdXRwdXQgdG8gY29ubmVjdCBmcm9tXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBpbnB1dCB0byBjb25uZWN0IHRvXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAodW5pdCwgb3V0cHV0TnVtLCBpbnB1dE51bSkge1xuXHQgICAgICAgIGlmICh1bml0Ll9vbkNvbm5lY3QpIHtcblx0ICAgICAgICAgICAgdW5pdC5fb25Db25uZWN0KHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICBvdXRwdXROdW0gPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TnVtLCAwKTtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXRbb3V0cHV0TnVtXS5jb25uZWN0KHVuaXQsIDAsIGlucHV0TnVtKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dC5jb25uZWN0KHVuaXQsIG91dHB1dE51bSwgaW5wdXROdW0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZGlzY29ubmVjdCB0aGUgb3V0cHV0XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfEF1ZGlvTm9kZX0gb3V0cHV0IEVpdGhlciB0aGUgb3V0cHV0IGluZGV4IHRvIGRpc2Nvbm5lY3Rcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIG91dHB1dCBpcyBhbiBhcnJheSwgb3IgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgdG8gZGlzY29ubmVjdCBmcm9tLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBvdXRwdXROdW0sIGlucHV0TnVtKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIoZGVzdGluYXRpb24pKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFtkZXN0aW5hdGlvbl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgb3V0cHV0TnVtID0gVG9uZS5kZWZhdWx0QXJnKG91dHB1dE51bSwgMCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFtvdXRwdXROdW1dLmRpc2Nvbm5lY3QoZGVzdGluYXRpb24sIDAsIGlucHV0TnVtKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmRpc2Nvbm5lY3QuYXBwbHkodGhpcy5vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhpcyBub2RlIHRvIHRoZSByZXN0IG9mIHRoZSBub2RlcyBpbiBzZXJpZXMuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vY29ubmVjdCBhIG5vZGUgdG8gYW4gZWZmZWN0LCBwYW5Wb2wgYW5kIHRoZW4gdG8gdGhlIG1hc3RlciBvdXRwdXRcblx0XHQgKiAgbm9kZS5jaGFpbihlZmZlY3QsIHBhblZvbCwgVG9uZS5NYXN0ZXIpO1xuXHRcdCAqICBAcGFyYW0gey4uLkF1ZGlvUGFyYW18VG9uZXxBdWRpb05vZGV9IG5vZGVzXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNoYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBjdXJyZW50VW5pdCA9IHRoaXM7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHRvVW5pdCA9IGFyZ3VtZW50c1tpXTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQuY29ubmVjdCh0b1VuaXQpO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdCA9IHRvVW5pdDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGlzIG5vZGUgdG8gdGhlIHJlc3Qgb2YgdGhlIG5vZGVzIGluIHBhcmFsbGVsLlxuXHRcdCAqICBAcGFyYW0gey4uLkF1ZGlvUGFyYW18VG9uZXxBdWRpb05vZGV9IG5vZGVzXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmZhbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLmNvbm5lY3QoYXJndW1lbnRzW2ldKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgaWYgKHdpbmRvdy5BdWRpb05vZGUpIHtcblx0ICAgICAgICAvL2dpdmUgbmF0aXZlIG5vZGVzIGNoYWluIGFuZCBmYW4gbWV0aG9kc1xuXHQgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuY2hhaW4gPSBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY2hhaW47XG5cdCAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5mYW4gPSBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZmFuO1xuXHQgICAgfVxuXHQgICAgLyoqXG5cdFx0ICogRGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodGhpcy5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQgaW5zdGFuY2VvZiBBdWRpb05vZGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodGhpcy5vdXRwdXQpKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dCBpbnN0YW5jZW9mIEF1ZGlvTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0ID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXVkaW9Ob2RlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJhc2UgY2xhc3MgZm9yIGFsbCBTaWduYWxzLiBVc2VkIEludGVybmFsbHkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWxCYXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TaWduYWxCYXNlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgV2hlbiBzaWduYWxzIGNvbm5lY3QgdG8gb3RoZXIgc2lnbmFscyBvciBBdWRpb1BhcmFtcyxcblx0XHQgKiAgdGhleSB0YWtlIG92ZXIgdGhlIG91dHB1dCB2YWx1ZSBvZiB0aGF0IHNpZ25hbCBvciBBdWRpb1BhcmFtLlxuXHRcdCAqICBGb3IgYWxsIG90aGVyIG5vZGVzLCB0aGUgYmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgYSBkZWZhdWx0IDxjb2RlPmNvbm5lY3Q8L2NvZGU+LlxuXHRcdCAqXG5cdFx0ICogIEBvdmVycmlkZVxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvUGFyYW18QXVkaW9Ob2RlfFRvbmUuU2lnbmFsfFRvbmV9IG5vZGVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW1iZXI9MF0gVGhlIG91dHB1dCBudW1iZXIgdG8gY29ubmVjdCBmcm9tLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2lucHV0TnVtYmVyPTBdIFRoZSBpbnB1dCBudW1iZXIgdG8gY29ubmVjdCB0by5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsQmFzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUsIG91dHB1dE51bWJlciwgaW5wdXROdW1iZXIpIHtcblx0ICAgICAgICAvL3plcm8gaXQgb3V0IHNvIHRoYXQgdGhlIHNpZ25hbCBjYW4gaGF2ZSBmdWxsIGNvbnRyb2xcblx0ICAgICAgICBpZiAoVG9uZS5TaWduYWwgJiYgVG9uZS5TaWduYWwgPT09IG5vZGUuY29uc3RydWN0b3IgfHwgVG9uZS5QYXJhbSAmJiBUb25lLlBhcmFtID09PSBub2RlLmNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIGNoYW5nZXNcblx0ICAgICAgICAgICAgbm9kZS5fcGFyYW0uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKDApO1xuXHQgICAgICAgICAgICAvL3Jlc2V0IHRoZSB2YWx1ZVxuXHQgICAgICAgICAgICBub2RlLl9wYXJhbS52YWx1ZSA9IDA7XG5cdCAgICAgICAgICAgIC8vbWFyayB0aGUgdmFsdWUgYXMgb3ZlcnJpZGRlblxuXHQgICAgICAgICAgICBub2RlLm92ZXJyaWRkZW4gPSB0cnVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcblx0ICAgICAgICAgICAgbm9kZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoMCk7XG5cdCAgICAgICAgICAgIG5vZGUudmFsdWUgPSAwO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdC5jYWxsKHRoaXMsIG5vZGUsIG91dHB1dE51bWJlciwgaW5wdXROdW1iZXIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNpZ25hbEJhc2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIC8vZml4ZXMgc2FmYXJpIG9ubHkgYnVnIHdoaWNoIGlzIHN0aWxsIHByZXNlbnQgaW4gMTFcblx0ICAgICAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG5cdCAgICAgICAgdmFyIGlzU2FmYXJpID0gdWEuaW5jbHVkZXMoJ3NhZmFyaScpICYmICF1YS5pbmNsdWRlcygnY2hyb21lJyk7XG5cdCAgICAgICAgaWYgKGlzU2FmYXJpKSB7XG5cdCAgICAgICAgICAgIHZhciBXYXZlU2hhcGVyTm9kZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbE5vZGUgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBjb250ZXh0Ll9uYXRpdmVfY3JlYXRlV2F2ZVNoYXBlcigpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB0aGlzLl9pbnRlcm5hbE5vZGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZpbmVQcm9wZXJ0eSh0aGlzLl9pbnRlcm5hbE5vZGUsIHByb3ApO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2F2ZVNoYXBlck5vZGUucHJvdG90eXBlLCAnY3VydmUnLCB7XG5cdCAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VydmU7XG5cdCAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoY3VydmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoY3VydmUubGVuZ3RoICsgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgYXJyYXkuc2V0KGN1cnZlLCAxKTtcblx0ICAgICAgICAgICAgICAgICAgICBhcnJheVswXSA9IGN1cnZlWzBdO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTm9kZS5jdXJ2ZSA9IGFycmF5O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgV2F2ZVNoYXBlck5vZGUucHJvdG90eXBlLl9kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChjb250ZXh0LCBwcm9wKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXNbcHJvcF0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3AsIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHRbcHJvcF0gPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXS5iaW5kKGNvbnRleHQpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0W3Byb3BdID0gdmFsO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuX25hdGl2ZV9jcmVhdGVXYXZlU2hhcGVyID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVXYXZlU2hhcGVyO1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVdhdmVTaGFwZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdhdmVTaGFwZXJOb2RlKHRoaXMpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBzIHRoZSBuYXRpdmUgV2ViIEF1ZGlvIEFQSVxuXHRcdCAqICAgICAgICAgW1dhdmVTaGFwZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS13YXZlc2hhcGVybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufEFycmF5fE51bWJlcn0gbWFwcGluZyBUaGUgZnVuY3Rpb24gdXNlZCB0byBkZWZpbmUgdGhlIHZhbHVlcy5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXBwaW5nIGZ1bmN0aW9uIHNob3VsZCB0YWtlIHR3byBhcmd1bWVudHM6XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgaXMgdGhlIHZhbHVlIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHNlY29uZCBpcyB0aGUgYXJyYXkgcG9zaXRpb24uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHRoYXQgYXJyYXkgd2lsbCBiZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGFzIHRoZSB3YXZlIHNoYXBpbmcgZnVuY3Rpb24uIFRoZSBpbnB1dFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGlzIGFuIEF1ZGlvUmFuZ2UgWy0xLCAxXSB2YWx1ZSBhbmQgdGhlIG91dHB1dFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGNhbiB0YWtlIG9uIGFueSBudW1lcmljYWwgdmFsdWVzLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBbYnVmZmVyTGVuPTEwMjRdIFRoZSBsZW5ndGggb2YgdGhlIFdhdmVTaGFwZXJOb2RlIGJ1ZmZlci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdGltZXNUd28gPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uKHZhbCl7XG5cdFx0ICogXHRyZXR1cm4gdmFsICogMjtcblx0XHQgKiB9LCAyMDQ4KTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egd2F2ZXNoYXBlciBjYW4gYWxzbyBiZSBjb25zdHJ1Y3RlZCB3aXRoIGFuIGFycmF5IG9mIHZhbHVlc1xuXHRcdCAqIHZhciBpbnZlcnQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKFsxLCAtMV0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlU2hhcGVyID0gZnVuY3Rpb24gKG1hcHBpbmcsIGJ1ZmZlckxlbikge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB3YXZlc2hhcGVyXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlV2F2ZVNoYXBlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB3YXZlc2hhcGVycyBjdXJ2ZVxuXHRcdFx0ICogIEB0eXBlIHtGbG9hdDMyQXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2N1cnZlID0gbnVsbDtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtYXBwaW5nKSkge1xuXHQgICAgICAgICAgICB0aGlzLmN1cnZlID0gbWFwcGluZztcblx0ICAgICAgICB9IGVsc2UgaWYgKGlzRmluaXRlKG1hcHBpbmcpIHx8IFRvbmUuaXNVbmRlZihtYXBwaW5nKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG5ldyBGbG9hdDMyQXJyYXkoVG9uZS5kZWZhdWx0QXJnKG1hcHBpbmcsIDEwMjQpKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNGdW5jdGlvbihtYXBwaW5nKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG5ldyBGbG9hdDMyQXJyYXkoVG9uZS5kZWZhdWx0QXJnKGJ1ZmZlckxlbiwgMTAyNCkpO1xuXHQgICAgICAgICAgICB0aGlzLnNldE1hcChtYXBwaW5nKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5XYXZlU2hhcGVyLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIFVzZXMgYSBtYXBwaW5nIGZ1bmN0aW9uIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIGN1cnZlLlxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBwaW5nIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGRlZmluZSB0aGUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXBwaW5nIGZ1bmN0aW9uIHRha2UgdHdvIGFyZ3VtZW50czpcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgaXMgdGhlIHZhbHVlIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggZ29lcyBmcm9tIC0xIHRvIDEgb3ZlciB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGN1cnZlIGFycmF5LiBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBhcnJheSBwb3NpdGlvbi5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuV2F2ZVNoYXBlcn0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbWFwIHRoZSBpbnB1dCBzaWduYWwgZnJvbSBbLTEsIDFdIHRvIFswLCAxMF1cblx0XHQgKiBzaGFwZXIuc2V0TWFwKGZ1bmN0aW9uKHZhbCwgaW5kZXgpe1xuXHRcdCAqIFx0cmV0dXJuICh2YWwgKyAxKSAqIDU7XG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUuc2V0TWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcblx0ICAgICAgICB2YXIgYXJyYXkgPSBuZXcgQXJyYXkodGhpcy5fY3VydmUubGVuZ3RoKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5fY3VydmUubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWQgPSBpIC8gKGxlbiAtIDEpICogMiAtIDE7XG5cdCAgICAgICAgICAgIGFycmF5W2ldID0gbWFwcGluZyhub3JtYWxpemVkLCBpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5jdXJ2ZSA9IGFycmF5O1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhcnJheSB0byBzZXQgYXMgdGhlIHdhdmVzaGFwZXIgY3VydmUuIEZvciBsaW5lYXIgY3VydmVzXG5cdFx0ICogYXJyYXkgbGVuZ3RoIGRvZXMgbm90IG1ha2UgbXVjaCBkaWZmZXJlbmNlLCBidXQgZm9yIGNvbXBsZXggY3VydmVzXG5cdFx0ICogbG9uZ2VyIGFycmF5cyB3aWxsIHByb3ZpZGUgc21vb3RoZXIgaW50ZXJwb2xhdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5XYXZlU2hhcGVyI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBjdXJ2ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUsICdjdXJ2ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5jdXJ2ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1hcHBpbmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBuZXcgRmxvYXQzMkFycmF5KG1hcHBpbmcpO1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIuY3VydmUgPSB0aGlzLl9jdXJ2ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFNwZWNpZmllcyB3aGF0IHR5cGUgb2Ygb3ZlcnNhbXBsaW5nIChpZiBhbnkpIHNob3VsZCBiZSB1c2VkIHdoZW5cblx0XHQgKiBhcHBseWluZyB0aGUgc2hhcGluZyBjdXJ2ZS4gQ2FuIGVpdGhlciBiZSBcIm5vbmVcIiwgXCIyeFwiIG9yIFwiNHhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5XYXZlU2hhcGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgb3ZlcnNhbXBsZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUsICdvdmVyc2FtcGxlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvdmVyc2FtcGxpbmcpIHtcblx0ICAgICAgICAgICAgaWYgKFtcblx0ICAgICAgICAgICAgICAgICAgICAnbm9uZScsXG5cdCAgICAgICAgICAgICAgICAgICAgJzJ4Jyxcblx0ICAgICAgICAgICAgICAgICAgICAnNHgnXG5cdCAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKG92ZXJzYW1wbGluZykpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlID0gb3ZlcnNhbXBsaW5nO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RvbmUuV2F2ZVNoYXBlcjogb3ZlcnNhbXBsaW5nIG11c3QgYmUgZWl0aGVyIFxcJ25vbmVcXCcsIFxcJzJ4XFwnLCBvciBcXCc0eFxcJycpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLldhdmVTaGFwZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLldhdmVTaGFwZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UaW1lQmFzZSBpcyBhIGZsZXhpYmxlIGVuY29kaW5nIG9mIHRpbWVcblx0XHQgKiAgICAgICAgIHdoaWNoIGNhbiBiZSBldmFsdWF0ZWQgdG8gYW5kIGZyb20gYSBzdHJpbmcuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlIGFzIGEgbnVtYmVyIG9yIHN0cmluZ1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFVuaXQgdmFsdWVzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UaW1lQmFzZSg0LCBcIm5cIilcblx0XHQgKiBUb25lLlRpbWVCYXNlKDIsIFwidFwiKVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoXCIydFwiKVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoXCIydFwiKSArIFRvbmUuVGltZUJhc2UoXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIC8vYWxsb3dzIGl0IHRvIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCAnbmV3J1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSB2YWx1ZVxuXHRcdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ8U3RyaW5nfFRvbmUuVGltZUJhc2V9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIHVuaXRzXG5cdFx0XHRcdCAqIEB0eXBlIHtTdHJpbmc/fVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB1bml0cztcblx0ICAgICAgICAgICAgLy90ZXN0IGlmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG51bWJlclxuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXMuX3VuaXRzKSAmJiBUb25lLmlzU3RyaW5nKHRoaXMuX3ZhbCkgJiYgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHQgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0aGlzLl92YWwpID09IHRoaXMuX3ZhbCAmJiB0aGlzLl92YWwuY2hhckF0KDApICE9PSAnKycpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHBhcnNlRmxvYXQodGhpcy5fdmFsKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdGhpcy5fZGVmYXVsdFVuaXRzO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbCAmJiB2YWwuY29uc3RydWN0b3IgPT09IHRoaXMuY29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgICAgIC8vaWYgdGhleSdyZSB0aGUgc2FtZSB0eXBlLCBqdXN0IGNvcHkgdmFsdWVzIG92ZXJcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC5fdmFsO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB2YWwuX3VuaXRzO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fZGVmYXVsdFVuaXRzKSB7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdzJzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdpJzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9UaWNrcygpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnaHonOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnbWlkaSc6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLnRvTWlkaSgpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBkZWZhdWx0IHVuaXRzICcgKyB0aGlzLl9kZWZhdWx0VW5pdHMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWVCYXNlKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpbWVCYXNlKTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFCU1RSQUNUIFNZTlRBWCBUUkVFIFBBUlNFUlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQWxsIHRoZSBwcmltYXJ5IGV4cHJlc3Npb25zLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9leHByZXNzaW9ucyA9IHtcblx0ICAgICAgICAnbic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKW4oXFwuPykkL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlLCBkb3QpIHtcblx0ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNjYWxhciA9IGRvdCA9PT0gJy4nID8gMS41IDogMTtcblx0ICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHModGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpKSAqIHNjYWxhcjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyg0IC8gdmFsdWUpICogc2NhbGFyO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndCc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKXQkL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHMoOCAvIChwYXJzZUludCh2YWx1ZSkgKiAzKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdtJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspbSQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VJbnQodmFsdWUpICogdGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2knOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKylpJC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tzVG9Vbml0cyhwYXJzZUludCh2YWx1ZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnaHonOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPyloeiQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmVxdWVuY3lUb1VuaXRzKHBhcnNlRmxvYXQodmFsdWUpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3RyJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT8pOihcXGQrKD86XFwuXFxkKyk/KTo/KFxcZCsoPzpcXC5cXGQrKT8pPyQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChtLCBxLCBzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xuXHQgICAgICAgICAgICAgICAgaWYgKG0gJiYgbSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5fYmVhdHNUb1VuaXRzKHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSAqIHBhcnNlRmxvYXQobSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHEgJiYgcSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHMgJiYgcyAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocykgLyA0KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3MnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPylzJC8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2Vjb25kc1RvVW5pdHMocGFyc2VGbG9hdCh2YWx1ZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnc2FtcGxlcyc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKXNhbXBsZXMkLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSkgLyB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2RlZmF1bHQnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPykkLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHByZXNzaW9uc1t0aGlzLl9kZWZhdWx0VW5pdHNdLm1ldGhvZC5jYWxsKHRoaXMsIHZhbHVlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZGVmYXVsdFVuaXRzID0gJ3MnO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VFJBTlNQT1JUIEZBTExCQUNLU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGJwbSwgb3IgMTIwIGlmIFRyYW5zcG9ydCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2dldEJwbSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gMTIwO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIHRpbWVTaWduYXR1cmUgb3IgNCBpZiBUcmFuc3BvcnQgaXMgbm90IGF2YWlsYWJsZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9nZXRUaW1lU2lnbmF0dXJlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gNDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSBQUFEgb3IgMTkyIGlmIFRyYW5zcG9ydCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2dldFBQUSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LlBQUTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gMTkyO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiB3aGljaGV2ZXIgY29udGV4dCBpcyByZWxldmFudFxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMubm93KCk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VU5JVCBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBmcmVxdWVuY3kgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIGZyZXE7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiA2MCAvIHRoaXMuX2dldEJwbSgpICogYmVhdHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gc2Vjb25kcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gdGlja3MgKiAodGhpcy5fYmVhdHNUb1VuaXRzKDEpIC8gdGhpcy5fZ2V0UFBRKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFdpdGggbm8gYXJndW1lbnRzLCByZXR1cm4gJ25vdydcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9ub0FyZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fbm93KCk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RVhQUkVTU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEV2YWx1YXRlIHRoZSB0aW1lIHZhbHVlLiBSZXR1cm5zIHRoZSB0aW1lXG5cdFx0ICogIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXMuX3ZhbCkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vQXJnKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHRoaXMuX3ZhbCkgJiYgVG9uZS5pc1VuZGVmKHRoaXMuX3VuaXRzKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciB1bml0cyBpbiB0aGlzLl9leHByZXNzaW9ucykge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25zW3VuaXRzXS5yZWdleHAudGVzdCh0aGlzLl92YWwudHJpbSgpKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdW5pdHM7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKHRoaXMuX3VuaXRzKSkge1xuXHQgICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMuX2V4cHJlc3Npb25zW3RoaXMuX3VuaXRzXTtcblx0ICAgICAgICAgICAgdmFyIG1hdGNoaW5nID0gdGhpcy5fdmFsLnRvU3RyaW5nKCkudHJpbSgpLm1hdGNoKGV4cHIucmVnZXhwKTtcblx0ICAgICAgICAgICAgaWYgKG1hdGNoaW5nKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXhwci5tZXRob2QuYXBwbHkodGhpcywgbWF0Y2hpbmcuc2xpY2UoMSkpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGV4cHIubWV0aG9kLmNhbGwodGhpcywgcGFyc2VGbG9hdCh0aGlzLl92YWwpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIGluIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgaW4gaGVydHpcblx0XHQgKiAgQHJldHVybiB7RnJlcXVlbmN5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9GcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyB0aGlzLnRvU2Vjb25kcygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gc2FtcGxlc1xuXHRcdCAqICBAcmV0dXJuICB7U2FtcGxlc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvU2FtcGxlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHMoKSAqIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7TWlsbGlzZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9NaWxsaXNlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudG9TZWNvbmRzKCkgKiAxMDAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlRpbWVCYXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3ZhbCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdW5pdHMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWVCYXNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRnJlcXVlbmN5IGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIEZyZXF1ZW5jeSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBFdmVudHVhbGx5IGFsbCB0aW1lIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHRvIGhlcnR6XG5cdFx0ICogICAgICAgICB1c2luZyB0aGUgYGV2YWxgIG1ldGhvZC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWVCYXNlfVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJDM1wiKSAvLyAyNjFcblx0XHQgKiBUb25lLkZyZXF1ZW5jeSgzOCwgXCJtaWRpXCIpIC8vXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJDM1wiKS50cmFuc3Bvc2UoNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLkZyZXF1ZW5jeSkge1xuXHQgICAgICAgICAgICBUb25lLlRpbWVCYXNlLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLkZyZXF1ZW5jeSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GcmVxdWVuY3ksIFRvbmUuVGltZUJhc2UpO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVVHTUVOVCBCQVNFIEVYUFJFU1NJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fZXhwcmVzc2lvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMsIHtcblx0ICAgICAgICAnbWlkaSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/bWlkaSkvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRVbml0cyA9PT0gJ21pZGknKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kubXRvZih2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdub3RlJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFthLWddezF9KD86YnwjfHh8YmIpPykoLT9bMC05XSspL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHBpdGNoLCBvY3RhdmUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IG5vdGVUb1NjYWxlSW5kZXhbcGl0Y2gudG9Mb3dlckNhc2UoKV07XG5cdCAgICAgICAgICAgICAgICB2YXIgbm90ZU51bWJlciA9IGluZGV4ICsgKHBhcnNlSW50KG9jdGF2ZSkgKyAxKSAqIDEyO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRVbml0cyA9PT0gJ21pZGknKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vdGVOdW1iZXI7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5tdG9mKG5vdGVOdW1iZXIpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndHInOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPyk6KFxcZCsoPzpcXC5cXGQrKT8pOj8oXFxkKyg/OlxcLlxcZCspPyk/Lyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAobSwgcSwgcykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHRvdGFsID0gMTtcblx0ICAgICAgICAgICAgICAgIGlmIChtICYmIG0gIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICo9IHRoaXMuX2JlYXRzVG9Vbml0cyh0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkgKiBwYXJzZUZsb2F0KG0pKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChxICYmIHEgIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICo9IHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUZsb2F0KHEpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChzICYmIHMgIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICo9IHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUZsb2F0KHMpIC8gNCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEVYUFJFU1NJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUcmFuc3Bvc2VzIHRoZSBmcmVxdWVuY3kgYnkgdGhlIGdpdmVuIG51bWJlciBvZiBzZW1pdG9uZXMuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsfSAgaW50ZXJ2YWxcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRnJlcXVlbmN5fSBBIG5ldyB0cmFuc3Bvc2VkIGZyZXF1ZW5jeVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQTRcIikudHJhbnNwb3NlKDMpOyAvL1wiQzVcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRyYW5zcG9zZSA9IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnZhbHVlT2YoKSAqIFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGludGVydmFsKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRha2VzIGFuIGFycmF5IG9mIHNlbWl0b25lIGludGVydmFscyBhbmQgcmV0dXJuc1xuXHRcdCAqICBhbiBhcnJheSBvZiBmcmVxdWVuY2llcyB0cmFuc3Bvc2VkIGJ5IHRob3NlIGludGVydmFscy5cblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICBpbnRlcnZhbHNcblx0XHQgKiAgQHJldHVybiAge0FycmF5PFRvbmUuRnJlcXVlbmN5Pn0gUmV0dXJucyBhbiBhcnJheSBvZiBGcmVxdWVuY2llc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQTRcIikuaGFybW9uaXplKFswLCAzLCA3XSk7IC8vW1wiQTRcIiwgXCJDNVwiLCBcIkU1XCJdXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuaGFybW9uaXplID0gZnVuY3Rpb24gKGludGVydmFscykge1xuXHQgICAgICAgIHJldHVybiBpbnRlcnZhbHMubWFwKGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc3Bvc2UoaW50ZXJ2YWwpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VU5JVCBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IGFzIGEgTUlESSBub3RlXG5cdFx0ICogIEByZXR1cm4gIHtNSURJfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQzRcIikudG9NaWRpKCk7IC8vNjBcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b01pZGkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20odGhpcy52YWx1ZU9mKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgaW4gU2NpZW50aWZpYyBQaXRjaCBOb3RhdGlvblxuXHRcdCAqICBAcmV0dXJuICB7Tm90ZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeSg2OSwgXCJtaWRpXCIpLnRvTm90ZSgpOyAvL1wiQTRcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvTm90ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgZnJlcSA9IHRoaXMudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICB2YXIgbG9nID0gTWF0aC5sb2cyKGZyZXEgLyBUb25lLkZyZXF1ZW5jeS5BNCk7XG5cdCAgICAgICAgdmFyIG5vdGVOdW1iZXIgPSBNYXRoLnJvdW5kKDEyICogbG9nKSArIDU3O1xuXHQgICAgICAgIHZhciBvY3RhdmUgPSBNYXRoLmZsb29yKG5vdGVOdW1iZXIgLyAxMik7XG5cdCAgICAgICAgaWYgKG9jdGF2ZSA8IDApIHtcblx0ICAgICAgICAgICAgbm90ZU51bWJlciArPSAtMTIgKiBvY3RhdmU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBub3RlTmFtZSA9IHNjYWxlSW5kZXhUb05vdGVbbm90ZU51bWJlciAlIDEyXTtcblx0ICAgICAgICByZXR1cm4gbm90ZU5hbWUgKyBvY3RhdmUudG9TdHJpbmcoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBkdXJhdGlvbiBvZiBvbmUgY3ljbGUgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAxIC8gVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9TZWNvbmRzLmNhbGwodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgaW4gSGVydHpcblx0XHQgKiAgQHJldHVybiAge0ZyZXF1ZW5jeX1cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9GcmVxdWVuY3kuY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBkdXJhdGlvbiBvZiBvbmUgY3ljbGUgaW4gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJUaW1lID0gdGhpcy5fYmVhdHNUb1VuaXRzKDEpO1xuXHQgICAgICAgIHZhciBxdWFydGVycyA9IHRoaXMudmFsdWVPZigpIC8gcXVhcnRlclRpbWU7XG5cdCAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IocXVhcnRlcnMgKiBUb25lLlRyYW5zcG9ydC5QUFEpO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFVOSVQgQ09OVkVSU0lPTlMgSEVMUEVSU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiAwXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX25vQXJnID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIGZyZXF1ZW5jeSBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gZnJlcTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fdGlja3NUb1VuaXRzID0gZnVuY3Rpb24gKHRpY2tzKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyAodGlja3MgKiA2MCAvIChUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgKiBUb25lLlRyYW5zcG9ydC5QUFEpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiAxIC8gVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cy5jYWxsKHRoaXMsIGJlYXRzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzZWNvbmQgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtTZWNvbmRzfSBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIHNlY29uZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAnaHonO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RlJFUVVFTkNZIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBOb3RlIHRvIHNjYWxlIGluZGV4XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgdmFyIG5vdGVUb1NjYWxlSW5kZXggPSB7XG5cdCAgICAgICAgJ2NiYic6IC0yLFxuXHQgICAgICAgICdjYic6IC0xLFxuXHQgICAgICAgICdjJzogMCxcblx0ICAgICAgICAnYyMnOiAxLFxuXHQgICAgICAgICdjeCc6IDIsXG5cdCAgICAgICAgJ2RiYic6IDAsXG5cdCAgICAgICAgJ2RiJzogMSxcblx0ICAgICAgICAnZCc6IDIsXG5cdCAgICAgICAgJ2QjJzogMyxcblx0ICAgICAgICAnZHgnOiA0LFxuXHQgICAgICAgICdlYmInOiAyLFxuXHQgICAgICAgICdlYic6IDMsXG5cdCAgICAgICAgJ2UnOiA0LFxuXHQgICAgICAgICdlIyc6IDUsXG5cdCAgICAgICAgJ2V4JzogNixcblx0ICAgICAgICAnZmJiJzogMyxcblx0ICAgICAgICAnZmInOiA0LFxuXHQgICAgICAgICdmJzogNSxcblx0ICAgICAgICAnZiMnOiA2LFxuXHQgICAgICAgICdmeCc6IDcsXG5cdCAgICAgICAgJ2diYic6IDUsXG5cdCAgICAgICAgJ2diJzogNixcblx0ICAgICAgICAnZyc6IDcsXG5cdCAgICAgICAgJ2cjJzogOCxcblx0ICAgICAgICAnZ3gnOiA5LFxuXHQgICAgICAgICdhYmInOiA3LFxuXHQgICAgICAgICdhYic6IDgsXG5cdCAgICAgICAgJ2EnOiA5LFxuXHQgICAgICAgICdhIyc6IDEwLFxuXHQgICAgICAgICdheCc6IDExLFxuXHQgICAgICAgICdiYmInOiA5LFxuXHQgICAgICAgICdiYic6IDEwLFxuXHQgICAgICAgICdiJzogMTEsXG5cdCAgICAgICAgJ2IjJzogMTIsXG5cdCAgICAgICAgJ2J4JzogMTNcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc2NhbGUgaW5kZXggdG8gbm90ZSAoc2hhcnBzKVxuXHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIHNjYWxlSW5kZXhUb05vdGUgPSBbXG5cdCAgICAgICAgJ0MnLFxuXHQgICAgICAgICdDIycsXG5cdCAgICAgICAgJ0QnLFxuXHQgICAgICAgICdEIycsXG5cdCAgICAgICAgJ0UnLFxuXHQgICAgICAgICdGJyxcblx0ICAgICAgICAnRiMnLFxuXHQgICAgICAgICdHJyxcblx0ICAgICAgICAnRyMnLFxuXHQgICAgICAgICdBJyxcblx0ICAgICAgICAnQSMnLFxuXHQgICAgICAgICdCJ1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgW2NvbmNlcnQgcGl0Y2hdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbmNlcnRfcGl0Y2gpXG5cdFx0ICogIEE0J3MgdmFsdWVzIGluIEhlcnR6LlxuXHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5BNCA9IDQ0MDtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgTUlESSBub3RlIHRvIGZyZXF1ZW5jeSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7TUlESX0gbWlkaSBUaGUgbWlkaSBudW1iZXIgdG8gY29udmVydC5cblx0XHQgKiAgQHJldHVybiB7RnJlcXVlbmN5fSB0aGUgY29ycmVzcG9uZGluZyBmcmVxdWVuY3kgdmFsdWVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5Lm10b2YoNjkpOyAvLyByZXR1cm5zIDQ0MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kubXRvZiA9IGZ1bmN0aW9uIChtaWRpKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LkE0ICogTWF0aC5wb3coMiwgKG1pZGkgLSA2OSkgLyAxMik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBmcmVxdWVuY3kgdmFsdWUgdG8gYSBNSURJIG5vdGUuXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHZhbHVlIHRvIGZyZXF1ZW5jeSB2YWx1ZSB0byBjb252ZXJ0LlxuXHRcdCAqICBAcmV0dXJucyAge01JREl9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeS5mdG9tKDQ0MCk7IC8vIHJldHVybnMgNjlcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LmZ0b20gPSBmdW5jdGlvbiAoZnJlcXVlbmN5KSB7XG5cdCAgICAgICAgcmV0dXJuIDY5ICsgTWF0aC5yb3VuZCgxMiAqIE1hdGgubG9nMihmcmVxdWVuY3kgLyBUb25lLkZyZXF1ZW5jeS5BNCkpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRpbWUgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgVGltZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBUb25lLlRpbWUgY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCB0aGUgYG5ld2Aga2V5d29yZC4gVG9uZS5UaW1lIGNhbiBiZSBwYXNzZWRcblx0XHQgKiAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBvZiBhbnkgbWV0aG9kIHdoaWNoIHRha2VzIHRpbWUgYXMgYW4gYXJndW1lbnQuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UaW1lQmFzZX1cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIHZhbCAgICBUaGUgdGltZSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nPX0gIHVuaXRzICBUaGUgdW5pdHMgb2YgdGhlIHZhbHVlLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB0ID0gVG9uZS5UaW1lKFwiNG5cIik7Ly9hIHF1YXJ0ZXIgbm90ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuVGltZSkge1xuXHQgICAgICAgICAgICBUb25lLlRpbWVCYXNlLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWUodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZSwgVG9uZS5UaW1lQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBFeHRlbmQgdGhlIGJhc2UgZXhwcmVzc2lvbnNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zID0gT2JqZWN0LmFzc2lnbih7fSwgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zLCB7XG5cdCAgICAgICAgJ3F1YW50aXplJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eQCguKykvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChjYXB0dXJlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRUbyA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGNhcHR1cmUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC5uZXh0U3ViZGl2aXNpb24ocXVhbnRUbyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbm93Jzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eXFwrKC4rKS8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKGNhcHR1cmUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3coKSArIG5ldyB0aGlzLmNvbnN0cnVjdG9yKGNhcHR1cmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUXVhbnRpemUgdGhlIHRpbWUgYnkgdGhlIGdpdmVuIHN1YmRpdmlzaW9uLiBPcHRpb25hbGx5IGFkZCBhXG5cdFx0ICogIHBlcmNlbnRhZ2Ugd2hpY2ggd2lsbCBtb3ZlIHRoZSB0aW1lIHZhbHVlIHRvd2FyZHMgdGhlIGlkZWFsXG5cdFx0ICogIHF1YW50aXplZCB2YWx1ZSBieSB0aGF0IHBlcmNlbnRhZ2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcnxUaW1lfSAgdmFsICAgIFRoZSBzdWJkaXZpc2lvbiB0byBxdWFudGl6ZSB0b1xuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIFtwZXJjZW50PTFdICBNb3ZlIHRoZSB0aW1lIHZhbHVlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvd2FyZHMgdGhlIHF1YW50aXplZCB2YWx1ZSBieVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHBlcmNlbnRhZ2UuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UaW1lKDIxKS5xdWFudGl6ZSgyKSAvL3JldHVybnMgMjJcblx0XHQgKiBUb25lLlRpbWUoMC42KS5xdWFudGl6ZShcIjRuXCIsIDAuNSkgLy9yZXR1cm5zIDAuNTVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUucXVhbnRpemUgPSBmdW5jdGlvbiAoc3ViZGl2LCBwZXJjZW50KSB7XG5cdCAgICAgICAgcGVyY2VudCA9IFRvbmUuZGVmYXVsdEFyZyhwZXJjZW50LCAxKTtcblx0ICAgICAgICB2YXIgc3ViZGl2aXNpb24gPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihzdWJkaXYpO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWVPZigpO1xuXHQgICAgICAgIHZhciBtdWx0aXBsZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdWJkaXZpc2lvbik7XG5cdCAgICAgICAgdmFyIGlkZWFsID0gbXVsdGlwbGUgKiBzdWJkaXZpc2lvbjtcblx0ICAgICAgICB2YXIgZGlmZiA9IGlkZWFsIC0gdmFsdWU7XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlICsgZGlmZiAqIHBlcmNlbnQ7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIFRpbWUgdG8gTm90YXRpb24uIFRoZSBub3RhdGlvbiB2YWx1ZXMgYXJlIHdpbGwgYmUgdGhlXG5cdFx0ICogIGNsb3Nlc3QgcmVwcmVzZW50YXRpb24gYmV0d2VlbiAxbSB0byAxMjh0aCBub3RlLlxuXHRcdCAqICBAcmV0dXJuIHtOb3RhdGlvbn1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2lmIHRoZSBUcmFuc3BvcnQgaXMgYXQgMTIwYnBtOlxuXHRcdCAqIFRvbmUuVGltZSgyKS50b05vdGF0aW9uKCk7Ly9yZXR1cm5zIFwiMW1cIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b05vdGF0aW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciB0aW1lID0gdGhpcy50b1NlY29uZHMoKTtcblx0ICAgICAgICB2YXIgdGVzdE5vdGF0aW9ucyA9IFsnMW0nXTtcblx0ICAgICAgICBmb3IgKHZhciBwb3dlciA9IDE7IHBvd2VyIDwgODsgcG93ZXIrKykge1xuXHQgICAgICAgICAgICB2YXIgc3ViZGl2ID0gTWF0aC5wb3coMiwgcG93ZXIpO1xuXHQgICAgICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goc3ViZGl2ICsgJ24uJyk7XG5cdCAgICAgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaChzdWJkaXYgKyAnbicpO1xuXHQgICAgICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goc3ViZGl2ICsgJ3QnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGVzdE5vdGF0aW9ucy5wdXNoKCcwJyk7XG5cdCAgICAgICAgLy9maW5kIHRoZSBjbG9zZXRzIG5vdGF0aW9uIHJlcHJlc2VudGF0aW9uXG5cdCAgICAgICAgdmFyIGNsb3Nlc3QgPSB0ZXN0Tm90YXRpb25zWzBdO1xuXHQgICAgICAgIHZhciBjbG9zZXN0U2Vjb25kcyA9IFRvbmUuVGltZSh0ZXN0Tm90YXRpb25zWzBdKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB0ZXN0Tm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG5vdGF0aW9uKSB7XG5cdCAgICAgICAgICAgIHZhciBub3RhdGlvblNlY29uZHMgPSBUb25lLlRpbWUobm90YXRpb24pLnRvU2Vjb25kcygpO1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnMobm90YXRpb25TZWNvbmRzIC0gdGltZSkgPCBNYXRoLmFicyhjbG9zZXN0U2Vjb25kcyAtIHRpbWUpKSB7XG5cdCAgICAgICAgICAgICAgICBjbG9zZXN0ID0gbm90YXRpb247XG5cdCAgICAgICAgICAgICAgICBjbG9zZXN0U2Vjb25kcyA9IG5vdGF0aW9uU2Vjb25kcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiBjbG9zZXN0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgZW5jb2RlZCBhcyBCYXJzOkJlYXRzOlNpeHRlZW50aHMuXG5cdFx0ICogIEByZXR1cm4gIHtCYXJzQmVhdHNTaXh0ZWVudGhzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b0JhcnNCZWF0c1NpeHRlZW50aHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJUaW1lID0gdGhpcy5fYmVhdHNUb1VuaXRzKDEpO1xuXHQgICAgICAgIHZhciBxdWFydGVycyA9IHRoaXMudmFsdWVPZigpIC8gcXVhcnRlclRpbWU7XG5cdCAgICAgICAgdmFyIG1lYXN1cmVzID0gTWF0aC5mbG9vcihxdWFydGVycyAvIHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSk7XG5cdCAgICAgICAgdmFyIHNpeHRlZW50aHMgPSBxdWFydGVycyAlIDEgKiA0O1xuXHQgICAgICAgIHF1YXJ0ZXJzID0gTWF0aC5mbG9vcihxdWFydGVycykgJSB0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCk7XG5cdCAgICAgICAgc2l4dGVlbnRocyA9IHNpeHRlZW50aHMudG9TdHJpbmcoKTtcblx0ICAgICAgICBpZiAoc2l4dGVlbnRocy5sZW5ndGggPiAzKSB7XG5cdCAgICAgICAgICAgIC8vIHRoZSBhZGRpdGlvbmFsIHBhcnNlRmxvYXQgcmVtb3ZlcyBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9lc1xuXHQgICAgICAgICAgICBzaXh0ZWVudGhzID0gcGFyc2VGbG9hdChwYXJzZUZsb2F0KHNpeHRlZW50aHMpLnRvRml4ZWQoMykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcHJvZ3Jlc3MgPSBbXG5cdCAgICAgICAgICAgIG1lYXN1cmVzLFxuXHQgICAgICAgICAgICBxdWFydGVycyxcblx0ICAgICAgICAgICAgc2l4dGVlbnRoc1xuXHQgICAgICAgIF07XG5cdCAgICAgICAgcmV0dXJuIHByb2dyZXNzLmpvaW4oJzonKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHRpY2tzLlxuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJUaW1lID0gdGhpcy5fYmVhdHNUb1VuaXRzKDEpO1xuXHQgICAgICAgIHZhciBxdWFydGVycyA9IHRoaXMudmFsdWVPZigpIC8gcXVhcnRlclRpbWU7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQocXVhcnRlcnMgKiB0aGlzLl9nZXRQUFEoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBhcyBhIG1pZGkgbm90ZS5cblx0XHQgKiAgQHJldHVybiAge01pZGl9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvTWlkaSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbSh0aGlzLnRvRnJlcXVlbmN5KCkpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmFuc3BvcnRUaW1lIGlzIGEgdGhlIHRpbWUgYWxvbmcgdGhlIFRyYW5zcG9ydCdzXG5cdFx0ICogICAgICAgICB0aW1lbGluZS4gSXQgaXMgc2ltaWxhciB0byBUb25lLlRpbWUsIGJ1dCBpbnN0ZWFkIG9mIGV2YWx1YXRpbmdcblx0XHQgKiAgICAgICAgIGFnYWluc3QgdGhlIEF1ZGlvQ29udGV4dCdzIGNsb2NrLCBpdCBpcyBldmFsdWF0ZWQgYWdhaW5zdFxuXHRcdCAqICAgICAgICAgdGhlIFRyYW5zcG9ydCdzIHBvc2l0aW9uLiBTZWUgW1RyYW5zcG9ydFRpbWUgd2lraV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvVHJhbnNwb3J0VGltZSkuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlIGFzIGEgbnVtYmVyIG9yIHN0cmluZ1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFVuaXQgdmFsdWVzXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWV9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWUgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UcmFuc3BvcnRUaW1lKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVGltZS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UcmFuc3BvcnRUaW1lKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydFRpbWUsIFRvbmUuVGltZSk7XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiB3aGljaGV2ZXIgY29udGV4dCBpcyByZWxldmFudFxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZS5wcm90b3R5cGUuX25vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQuc2Vjb25kcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnRUaW1lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUWVBFU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiBVbml0cyB3aGljaCBhIHZhbHVlIGNhbiB0YWtlIG9uLlxuXHRcdCAqIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLlR5cGUgPSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRGVmYXVsdCB1bml0c1xuXHRcdFx0ICogIEB0eXBlZGVmIHtEZWZhdWx0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgRGVmYXVsdDogJ251bWJlcicsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGltZSBjYW4gYmUgZGVzY3JpYmVkIGluIGEgbnVtYmVyIG9mIHdheXMuIFJlYWQgbW9yZSBbVGltZV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvVGltZSkuXG5cdFx0XHQgKlxuXHRcdFx0ICogICogTnVtYmVycywgd2hpY2ggd2lsbCBiZSB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHRpbWUgKGluIHNlY29uZHMpLlxuXHRcdFx0ICogICogTm90YXRpb24sIChcIjRuXCIsIFwiOHRcIikgZGVzY3JpYmVzIHRpbWUgaW4gQlBNIGFuZCB0aW1lIHNpZ25hdHVyZSByZWxhdGl2ZSB2YWx1ZXMuXG5cdFx0XHQgKiAgKiBUcmFuc3BvcnRUaW1lLCAoXCI0OjM6MlwiKSB3aWxsIGFsc28gcHJvdmlkZSB0ZW1wbyBhbmQgdGltZSBzaWduYXR1cmUgcmVsYXRpdmUgdGltZXNcblx0XHRcdCAqICBpbiB0aGUgZm9ybSBCQVJTOlFVQVJURVJTOlNJWFRFRU5USFMuXG5cdFx0XHQgKiAgKiBGcmVxdWVuY3ksIChcIjhoelwiKSBpcyBjb252ZXJ0ZWQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY3ljbGUgaW4gc2Vjb25kcy5cblx0XHRcdCAqICAqIE5vdy1SZWxhdGl2ZSwgKFwiKzFcIikgcHJlZml4IGFueSBvZiB0aGUgYWJvdmUgd2l0aCBcIitcIiBhbmQgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhc1xuXHRcdFx0ICogIFwidGhlIGN1cnJlbnQgdGltZSBwbHVzIHdoYXRldmVyIGV4cHJlc3Npb24gZm9sbG93c1wiLlxuXHRcdFx0ICogICogRXhwcmVzc2lvbnMsIChcIjM6MCArIDIgLSAoMW0gLyA3KVwiKSBhbnkgb2YgdGhlIGFib3ZlIGNhbiBhbHNvIGJlIGNvbWJpbmVkXG5cdFx0XHQgKiAgaW50byBhIG1hdGhlbWF0aWNhbCBleHByZXNzaW9uIHdoaWNoIHdpbGwgYmUgZXZhbHVhdGVkIHRvIGNvbXB1dGUgdGhlIGRlc2lyZWQgdGltZS5cblx0XHRcdCAqICAqIE5vIEFyZ3VtZW50LCBmb3IgbWV0aG9kcyB3aGljaCBhY2NlcHQgdGltZSwgbm8gYXJndW1lbnQgd2lsbCBiZSBpbnRlcnByZXRlZCBhc1xuXHRcdFx0ICogIFwibm93XCIgKGkuZS4gdGhlIGN1cnJlbnRUaW1lKS5cblx0XHRcdCAqXG5cdFx0XHQgKiAgQHR5cGVkZWYge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBUaW1lOiAndGltZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRnJlcXVlbmN5IGNhbiBiZSBkZXNjcmliZWQgc2ltaWxhciB0byB0aW1lLCBleGNlcHQgdWx0aW1hdGVseSB0aGVcblx0XHRcdCAqICB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBmcmVxdWVuY3kgaW5zdGVhZCBvZiBzZWNvbmRzLiBBIG51bWJlclxuXHRcdFx0ICogIGlzIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgdmFsdWUgaW4gaGVydHouIEFkZGl0aW9uYWxseSBhbnkgb2YgdGhlXG5cdFx0XHQgKiAgVGltZSBlbmNvZGluZ3MgY2FuIGJlIHVzZWQuIE5vdGUgbmFtZXMgaW4gdGhlIGZvcm1cblx0XHRcdCAqICBvZiBOT1RFIE9DVEFWRSAoaS5lLiBDNCkgYXJlIGFsc28gYWNjZXB0ZWQgYW5kIGNvbnZlcnRlZCB0byB0aGVpclxuXHRcdFx0ICogIGZyZXF1ZW5jeSB2YWx1ZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7RnJlcXVlbmN5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgRnJlcXVlbmN5OiAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUcmFuc3BvcnRUaW1lIGRlc2NyaWJlcyBhIHBvc2l0aW9uIGFsb25nIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZS4gSXQgaXNcblx0XHRcdCAqICBzaW1pbGFyIHRvIFRpbWUgaW4gdGhhdCBpdCB1c2VzIGFsbCB0aGUgc2FtZSBlbmNvZGluZ3MsIGJ1dCBUcmFuc3BvcnRUaW1lIHNwZWNpZmljYWxseVxuXHRcdFx0ICogIHBlcnRhaW5zIHRvIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZSwgd2hpY2ggaXMgc3RhcnRhYmxlLCBzdG9wcGFibGUsIGxvb3BhYmxlLCBhbmQgc2Vla2FibGUuXG5cdFx0XHQgKiAgW1JlYWQgbW9yZV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvVHJhbnNwb3J0VGltZSlcblx0XHRcdCAqICBAdHlwZWRlZiB7VHJhbnNwb3J0VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIFRyYW5zcG9ydFRpbWU6ICd0cmFuc3BvcnRUaW1lJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaWNrcyBhcmUgdGhlIGJhc2ljIHN1YnVuaXQgb2YgdGhlIFRyYW5zcG9ydC4gVGhleSBhcmVcblx0XHRcdCAqICB0aGUgc21hbGxlc3QgdW5pdCBvZiB0aW1lIHRoYXQgdGhlIFRyYW5zcG9ydCBzdXBwb3J0cy5cblx0XHRcdCAqICBAdHlwZWRlZiB7VGlja3N9XG5cdFx0XHQgKi9cblx0ICAgICAgICBUaWNrczogJ3RpY2tzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBOb3JtYWwgdmFsdWVzIGFyZSB3aXRoaW4gdGhlIHJhbmdlIFswLCAxXS5cblx0XHRcdCAqICBAdHlwZWRlZiB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKi9cblx0ICAgICAgICBOb3JtYWxSYW5nZTogJ25vcm1hbFJhbmdlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBdWRpb1JhbmdlIHZhbHVlcyBhcmUgYmV0d2VlbiBbLTEsIDFdLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtBdWRpb1JhbmdlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQXVkaW9SYW5nZTogJ2F1ZGlvUmFuZ2UnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIERlY2liZWxzIGFyZSBhIGxvZ2FyaXRobWljIHVuaXQgb2YgbWVhc3VyZW1lbnQgd2hpY2ggaXMgdXNlZnVsIGZvciB2b2x1bWVcblx0XHRcdCAqICBiZWNhdXNlIG9mIHRoZSBsb2dhcml0aG1pYyB3YXkgdGhhdCB3ZSBwZXJjZWl2ZSBsb3VkbmVzcy4gMCBkZWNpYmVsc1xuXHRcdFx0ICogIG1lYW5zIG5vIGNoYW5nZSBpbiB2b2x1bWUuIC0xMGRiIGlzIGFwcHJveGltYXRlbHkgaGFsZiBhcyBsb3VkIGFuZCAxMGRiXG5cdFx0XHQgKiAgaXMgdHdpY2UgaXMgbG91ZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7RGVjaWJlbHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBEZWNpYmVsczogJ2RiJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYWxmLXN0ZXAgbm90ZSBpbmNyZW1lbnRzLCBpLmUuIDEyIGlzIGFuIG9jdGF2ZSBhYm92ZSB0aGUgcm9vdC4gYW5kIDEgaXMgYSBoYWxmLXN0ZXAgdXAuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0ludGVydmFsfVxuXHRcdFx0ICovXG5cdCAgICAgICAgSW50ZXJ2YWw6ICdpbnRlcnZhbCcsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQmVhdHMgcGVyIG1pbnV0ZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7QlBNfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQlBNOiAnYnBtJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMC5cblx0XHRcdCAqICBAdHlwZWRlZiB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBQb3NpdGl2ZTogJ3Bvc2l0aXZlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBHYWluIGlzIHRoZSByYXRpbyBiZXR3ZWVuIGlucHV0IGFuZCBvdXRwdXQgb2YgYSBzaWduYWwuXG5cdFx0XHQgKiAgQSBnYWluIG9mIDAgaXMgdGhlIHNhbWUgYXMgc2lsZW5jaW5nIHRoZSBzaWduYWwuIEEgZ2FpbiBvZlxuXHRcdFx0ICogIDEsIGNhdXNlcyBubyBjaGFuZ2UgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZWRlZiB7R2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIEdhaW46ICdnYWluJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGNlbnQgaXMgYSBodW5kcmVkdGggb2YgYSBzZW1pdG9uZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7Q2VudHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBDZW50czogJ2NlbnRzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbmdsZSBiZXR3ZWVuIDAgYW5kIDM2MC5cblx0XHRcdCAqICBAdHlwZWRlZiB7RGVncmVlc31cblx0XHRcdCAqL1xuXHQgICAgICAgIERlZ3JlZXM6ICdkZWdyZWVzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIG51bWJlciByZXByZXNlbnRpbmcgYSBtaWRpIG5vdGUuXG5cdFx0XHQgKiAgQHR5cGVkZWYge01JREl9XG5cdFx0XHQgKi9cblx0ICAgICAgICBNSURJOiAnbWlkaScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBjb2xvbi1zZXBhcmF0ZWQgcmVwcmVzZW50YXRpb24gb2YgdGltZSBpbiB0aGUgZm9ybSBvZlxuXHRcdFx0ICogIEJhcnM6QmVhdHM6U2l4dGVlbnRocy5cblx0XHRcdCAqICBAdHlwZWRlZiB7QmFyc0JlYXRzU2l4dGVlbnRoc31cblx0XHRcdCAqL1xuXHQgICAgICAgIEJhcnNCZWF0c1NpeHRlZW50aHM6ICdiYXJzQmVhdHNTaXh0ZWVudGhzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTYW1wbGluZyBpcyB0aGUgcmVkdWN0aW9uIG9mIGEgY29udGludW91cyBzaWduYWwgdG8gYSBkaXNjcmV0ZSBzaWduYWwuXG5cdFx0XHQgKiAgQXVkaW8gaXMgdHlwaWNhbGx5IHNhbXBsZWQgNDQxMDAgdGltZXMgcGVyIHNlY29uZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7U2FtcGxlc31cblx0XHRcdCAqL1xuXHQgICAgICAgIFNhbXBsZXM6ICdzYW1wbGVzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIZXJ0eiBhcmUgYSBmcmVxdWVuY3kgcmVwcmVzZW50YXRpb24gZGVmaW5lZCBhcyBvbmUgY3ljbGUgcGVyIHNlY29uZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7SGVydHp9XG5cdFx0XHQgKi9cblx0ICAgICAgICBIZXJ0ejogJ2hlcnR6Jyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGZyZXF1ZW5jeSByZXByZXNlbnRlZCBieSBhIGxldHRlciBuYW1lLFxuXHRcdFx0ICogIGFjY2lkZW50YWwgYW5kIG9jdGF2ZS4gVGhpcyBzeXN0ZW0gaXMga25vd24gYXNcblx0XHRcdCAqICBbU2NpZW50aWZpYyBQaXRjaCBOb3RhdGlvbl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2NpZW50aWZpY19waXRjaF9ub3RhdGlvbikuXG5cdFx0XHQgKiAgQHR5cGVkZWYge05vdGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBOb3RlOiAnbm90ZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgT25lIG1pbGxpc2Vjb25kIGlzIGEgdGhvdXNhbmR0aCBvZiBhIHNlY29uZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7TWlsbGlzZWNvbmRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgTWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmRzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTZWNvbmRzIGFyZSB0aGUgdGltZSB1bml0IG9mIHRoZSBBdWRpb0NvbnRleHQuIEluIHRoZSBlbmQsXG5cdFx0XHQgKiAgYWxsIHZhbHVlcyBuZWVkIHRvIGJlIGV2YWx1YXRlZCB0byBzZWNvbmRzLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtTZWNvbmRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgU2Vjb25kczogJ3NlY29uZHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGR1cmF0aW9uIHJlbGF0aXZlIHRvIGEgbWVhc3VyZS5cblx0XHRcdCAqICAqIFwiNG5cIiA9IHF1YXJ0ZXIgbm90ZVxuXHRcdFx0ICogICogXCIybVwiID0gdHdvIG1lYXN1cmVzXG5cdFx0XHQgKiAgKiBcIjh0XCIgPSBlaWdodGgtbm90ZSB0cmlwbGV0XG5cdFx0XHQgKiAgQHR5cGVkZWYge05vdGF0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgTm90YXRpb246ICdub3RhdGlvbidcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIEFVR01FTlQgVE9ORSdzIFBST1RPVFlQRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBUaW1lIGludG8gc2Vjb25kcy5cblx0XHQgKlxuXHRcdCAqICBVbmxpa2UgdGhlIG1ldGhvZCB3aGljaCBpdCBvdmVycmlkZXMsIHRoaXMgdGFrZXMgaW50byBhY2NvdW50XG5cdFx0ICogIHRyYW5zcG9ydHRpbWUgYW5kIG11c2ljYWwgbm90YXRpb24uXG5cdFx0ICpcblx0XHQgKiAgVGltZSA6IDEuNDBcblx0XHQgKiAgTm90YXRpb246IDRuIG9yIDFtIG9yIDJ0XG5cdFx0ICogIE5vdyBSZWxhdGl2ZTogKzNuXG5cdFx0ICogIE1hdGg6IDNuKzE2biBvciBldmVuIGNvbXBsaWNhdGVkIGV4cHJlc3Npb25zICgoM24qMikvNiArIDEpXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJuIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcih0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGltZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5ub3coKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWUodGltZSkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aW1lIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGltZS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBmcmVxdWVuY3kgcmVwcmVzZW50YXRpb24gaW50byBhIG51bWJlci5cblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4ge0hlcnR6fSAgICAgIHRoZSBmcmVxdWVuY3kgaW4gaGVydHpcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcihmcmVxKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gZnJlcTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcoZnJlcSkgfHwgVG9uZS5pc1VuZGVmKGZyZXEpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5GcmVxdWVuY3koZnJlcSkudmFsdWVPZigpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoZnJlcSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZyZXEudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSB0aW1lIHJlcHJlc2VudGF0aW9uIGludG8gdGlja3MuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHJldHVybiB7VGlja3N9ICB0aGUgdGltZSBpbiB0aWNrc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodGltZSkgfHwgVG9uZS5pc1N0cmluZyh0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKS50b1RpY2tzKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzVW5kZWYodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LnRpY2tzO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGltZSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRpbWUudG9UaWNrcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGFyYW0gd3JhcHMgdGhlIG5hdGl2ZSBXZWIgQXVkaW8ncyBBdWRpb1BhcmFtIHRvIHByb3ZpZGVcblx0XHQgKiAgICAgICAgIGFkZGl0aW9uYWwgdW5pdCBjb252ZXJzaW9uIGZ1bmN0aW9uYWxpdHkuIEl0IGFsc29cblx0XHQgKiAgICAgICAgIHNlcnZlcyBhcyBhIGJhc2UtY2xhc3MgZm9yIGNsYXNzZXMgd2hpY2ggaGF2ZSBhIHNpbmdsZSxcblx0XHQgKiAgICAgICAgIGF1dG9tYXRhYmxlIHBhcmFtZXRlci5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0gIHtBdWRpb1BhcmFtfSAgcGFyYW0gIFRoZSBwYXJhbWV0ZXIgdG8gd3JhcC5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5UeXBlfSB1bml0cyBUaGUgdW5pdHMgb2YgdGhlIGF1ZGlvIHBhcmFtLlxuXHRcdCAqICBAcGFyYW0gIHtCb29sZWFufSBjb252ZXJ0IElmIHRoZSBwYXJhbSBzaG91bGQgYmUgY29udmVydGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwYXJhbScsXG5cdCAgICAgICAgICAgICd1bml0cycsXG5cdCAgICAgICAgICAgICdjb252ZXJ0J1xuXHQgICAgICAgIF0sIFRvbmUuUGFyYW0pO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG5hdGl2ZSBwYXJhbWV0ZXIgdG8gY29udHJvbFxuXHRcdFx0ICogIEB0eXBlICB7QXVkaW9QYXJhbX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0ID0gb3B0aW9ucy5wYXJhbTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdW5pdHMgb2YgdGhlIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlR5cGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnVuaXRzID0gb3B0aW9ucy51bml0cztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiB0aGUgdmFsdWUgc2hvdWxkIGJlIGNvbnZlcnRlZCBvciBub3Rcblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY29udmVydCA9IG9wdGlvbnMuY29udmVydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUcnVlIGlmIHRoZSBzaWduYWwgdmFsdWUgaXMgYmVpbmcgb3ZlcnJpZGRlbiBieVxuXHRcdFx0ICogIGEgY29ubmVjdGVkIHNpZ25hbC5cblx0XHRcdCAqICBAcmVhZE9ubHlcblx0XHRcdCAqICBAdHlwZSAge2Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3ZlcnJpZGRlbiA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHRpbWVsaW5lIHdoaWNoIHRyYWNrcyBhbGwgb2YgdGhlIGF1dG9tYXRpb25zLlxuXHRcdFx0ICogQHR5cGUge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFRvbmUuVGltZWxpbmUoMTAwMCk7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKG9wdGlvbnMudmFsdWUpICYmIHRoaXMuX3BhcmFtKSB7XG5cdCAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhcmFtLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVmYXVsdCxcblx0ICAgICAgICAnY29udmVydCc6IHRydWUsXG5cdCAgICAgICAgJ3BhcmFtJzogdW5kZWZpbmVkXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYXJhbSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJhbS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90b1VuaXRzKHRoaXMuZ2V0VmFsdWVBdFRpbWUobm93KSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pbml0aWFsVmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgICAgICB0aGlzLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLnNldFZhbHVlQXRUaW1lKHZhbHVlLCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXJcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYXJhbSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJhbS5wcm90b3R5cGUsICdtaW5WYWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5UaW1lIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5GcmVxdWVuY3kgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLk5vcm1hbFJhbmdlIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5Qb3NpdGl2ZSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQlBNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQXVkaW9SYW5nZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5EZWNpYmVscykge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC1JbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJhbS5taW5WYWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXJcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYXJhbSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJhbS5wcm90b3R5cGUsICdtYXhWYWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQXVkaW9SYW5nZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW0ubWF4VmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IHRoZSBnaXZlbiB2YWx1ZSBmcm9tIHRoZSB0eXBlIHNwZWNpZmllZCBieSBUb25lLlBhcmFtLnVuaXRzXG5cdFx0ICogIGludG8gdGhlIGRlc3RpbmF0aW9uIHZhbHVlIChzdWNoIGFzIEdhaW4gb3IgRnJlcXVlbmN5KS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7Kn0gdmFsIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG5cdFx0ICogIEByZXR1cm4ge251bWJlcn0gICAgIHRoZSBudW1iZXIgd2hpY2ggdGhlIHZhbHVlIHNob3VsZCBiZSBzZXQgdG9cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9mcm9tVW5pdHMgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKCh0aGlzLmNvbnZlcnQgfHwgVG9uZS5pc1VuZGVmKHRoaXMuY29udmVydCkpICYmICF0aGlzLm92ZXJyaWRkZW4pIHtcblx0ICAgICAgICAgICAgc3dpdGNoICh0aGlzLnVuaXRzKSB7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLlRpbWU6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHModmFsKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuRnJlcXVlbmN5OlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9GcmVxdWVuY3kodmFsKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuRGVjaWJlbHM6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5kYlRvR2Fpbih2YWwpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWwsIDApLCAxKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuQXVkaW9SYW5nZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWwsIC0xKSwgMSk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLlBvc2l0aXZlOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHZhbCwgMCk7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ29udmVydCB0aGUgcGFyYW1ldGVycyB2YWx1ZSBpbnRvIHRoZSB1bml0cyBzcGVjaWZpZWQgYnkgVG9uZS5QYXJhbS51bml0cy5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSAge251bWJlcn0gdmFsIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG5cdFx0ICogQHJldHVybiB7bnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX3RvVW5pdHMgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udmVydCB8fCBUb25lLmlzVW5kZWYodGhpcy5jb252ZXJ0KSkge1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudW5pdHMpIHtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuRGVjaWJlbHM6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5nYWluVG9EYih2YWwpO1xuXHQgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgbWluaW11bSBvdXRwdXQgdmFsdWVcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9taW5PdXRwdXQgPSAwLjAwMDAxO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBldmVudCB0eXBlc1xuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZSA9IHtcblx0ICAgICAgICBMaW5lYXI6ICdsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZScsXG5cdCAgICAgICAgRXhwb25lbnRpYWw6ICdleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICBUYXJnZXQ6ICdzZXRUYXJnZXRBdFRpbWUnLFxuXHQgICAgICAgIFNldFZhbHVlOiAnc2V0VmFsdWVBdFRpbWUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhIHBhcmFtZXRlciB2YWx1ZSBjaGFuZ2UgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7Kn1cdHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSAgdGltZSBUaGUgdGltZSB3aGVuIHRoZSBjaGFuZ2Ugc2hvdWxkIG9jY3VyLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHRoZSBmcmVxdWVuY3kgdG8gXCJHNFwiIGluIGV4YWN0bHkgMSBzZWNvbmQgZnJvbSBub3cuXG5cdFx0ICogZnJlcS5zZXRWYWx1ZUF0VGltZShcIkc0XCIsIFwiKzFcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLnNldFZhbHVlQXRUaW1lKHZhbHVlLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzaWduYWxzIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBTdWJzZXF1ZW50IHNjaGVkdWxpbmdcblx0XHQgKiAgbWF5IGludmFsaWRhdGUgdGhlIHJldHVybmVkIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgV2hlbiB0byBnZXQgdGhlIHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgYWZ0ZXIgPSB0aGlzLl9ldmVudHMuZ2V0QWZ0ZXIodGltZSk7XG5cdCAgICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgdmFyIGluaXRpYWxWYWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyh0aGlzLl9pbml0aWFsVmFsdWUsIHRoaXMuX3BhcmFtLmRlZmF1bHRWYWx1ZSk7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXHQgICAgICAgIC8vaWYgaXQgd2FzIHNldCBieVxuXHQgICAgICAgIGlmIChiZWZvcmUgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSBpbml0aWFsVmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5UYXJnZXQpIHtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzID0gdGhpcy5fZXZlbnRzLmdldEJlZm9yZShiZWZvcmUudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c1ZhbDtcblx0ICAgICAgICAgICAgaWYgKHByZXZpb3VzID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbCA9IGluaXRpYWxWYWx1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsID0gcHJldmlvdXMudmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9leHBvbmVudGlhbEFwcHJvYWNoKGJlZm9yZS50aW1lLCBwcmV2aW91c1ZhbCwgYmVmb3JlLnZhbHVlLCBiZWZvcmUuY29uc3RhbnQsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSBiZWZvcmUudmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcikge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2xpbmVhckludGVycG9sYXRlKGJlZm9yZS50aW1lLCBiZWZvcmUudmFsdWUsIGFmdGVyLnRpbWUsIGFmdGVyLnZhbHVlLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9leHBvbmVudGlhbEludGVycG9sYXRlKGJlZm9yZS50aW1lLCBiZWZvcmUudmFsdWUsIGFmdGVyLnRpbWUsIGFmdGVyLnZhbHVlLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGJlZm9yZS52YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDcmVhdGVzIGEgc2NoZWR1bGUgcG9pbnQgd2l0aCB0aGUgY3VycmVudCB2YWx1ZSBhdCB0aGUgY3VycmVudCB0aW1lLlxuXHRcdCAqICBUaGlzIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgYW4gYXV0b21hdGlvbiBhbmNob3IgcG9pbnQgaW4gb3JkZXIgdG9cblx0XHQgKiAgc2NoZWR1bGUgY2hhbmdlcyBmcm9tIHRoZSBjdXJyZW50IHZhbHVlLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gbm93IChPcHRpb25hbGx5KSBwYXNzIHRoZSBub3cgdmFsdWUgaW4uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRSYW1wUG9pbnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgY3VycmVudFZhbCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgdGhpcy5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmIChjdXJyZW50VmFsID09PSAwKSB7XG5cdCAgICAgICAgICAgIGN1cnJlbnRWYWwgPSB0aGlzLl9taW5PdXRwdXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuc2V0VmFsdWVBdFRpbWUodGhpcy5fdG9Vbml0cyhjdXJyZW50VmFsKSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhIGxpbmVhciBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbSB0aGVcblx0XHQgKiAgcHJldmlvdXMgc2NoZWR1bGVkIHBhcmFtZXRlciB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBlbmRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5kVGltZSkge1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICBlbmRUaW1lID0gdGhpcy50b1NlY29uZHMoZW5kVGltZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IGVuZFRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgZW5kVGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhbiBleHBvbmVudGlhbCBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgcHJldmlvdXMgc2NoZWR1bGVkIHBhcmFtZXRlciB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBlbmRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBlbmRUaW1lKSB7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIHZhbHVlID0gTWF0aC5tYXgodGhpcy5fbWluT3V0cHV0LCB2YWx1ZSk7XG5cdCAgICAgICAgZW5kVGltZSA9IHRoaXMudG9TZWNvbmRzKGVuZFRpbWUpO1xuXHQgICAgICAgIC8vc3RvcmUgdGhlIGV2ZW50XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5FeHBvbmVudGlhbCxcblx0ICAgICAgICAgICAgJ3RpbWUnOiBlbmRUaW1lLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIGVuZFRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gZXhwb25lbnRpYWwgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb21cblx0XHQgKiAgdGhlIGN1cnJlbnQgdGltZSBhbmQgY3VycmVudCB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUgb3ZlciB0aGVcblx0XHQgKiAgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWUgICBUaGUgdmFsdWUgdG8gcmFtcCB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vZXhwb25lbnRpYWxseSByYW1wIHRvIHRoZSB2YWx1ZSAyIG92ZXIgNCBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5leHBvbmVudGlhbFJhbXBUbygyLCA0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvID0gZnVuY3Rpb24gKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLnNldFJhbXBQb2ludChzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lICsgdGhpcy50b1NlY29uZHMocmFtcFRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGxpbmVhciBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgY3VycmVudCB0aW1lIGFuZCBjdXJyZW50IHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZSBvdmVyIHRoZVxuXHRcdCAqICBkdXJhdGlvbiBvZiB0aGUgcmFtcFRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0W3N0YXJ0VGltZT1ub3ddIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9saW5lYXJseSByYW1wIHRvIHRoZSB2YWx1ZSA0IG92ZXIgMyBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5saW5lYXJSYW1wVG8oNCwgMyk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5saW5lYXJSYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lICsgdGhpcy50b1NlY29uZHMocmFtcFRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBTaW5jZSBpdFxuXHRcdCAqICBpcyBhbiBleHBvbmVudGlhbCBhcHByb2FjaCBpdCB3aWxsIGNvbnRpbnVlIGFwcHJvYWNoaW5nIGFmdGVyIHRoZSByYW1wIGR1cmF0aW9uLiBUaGVcblx0XHQgKiAgcmFtcFRpbWUgaXMgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0byByZWFjaCBvdmVyIDk5JSBvZiB0aGUgd2F5IHRvd2FyZHMgdGhlIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2V4cG9uZW50aWFsbHkgcmFtcCB0byB0aGUgdmFsdWUgMiBvdmVyIDQgc2Vjb25kcy5cblx0XHQgKiBzaWduYWwuZXhwb25lbnRpYWxSYW1wVG8oMiwgNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS50YXJnZXRSYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUodmFsdWUsIHN0YXJ0VGltZSwgcmFtcFRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFNpbmNlIGl0XG5cdFx0ICogIGlzIGFuIGV4cG9uZW50aWFsIGFwcHJvYWNoIGl0IHdpbGwgY29udGludWUgYXBwcm9hY2hpbmcgYWZ0ZXIgdGhlIHJhbXAgZHVyYXRpb24uIFRoZVxuXHRcdCAqICByYW1wVGltZSBpcyB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRvIHJlYWNoIG92ZXIgOTklIG9mIHRoZSB3YXkgdG93YXJkcyB0aGUgdmFsdWUuIFRoaXMgbWV0aG9kc1xuXHRcdCAqICBpcyBzaW1pbGFyIHRvIHNldFRhcmdldEF0VGltZSBleGNlcHQgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIGEgdGltZSBpbnN0ZWFkIG9mIGEgJ3RpbWVDb25zdGFudCdcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHR0aW1lIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vZXhwb25lbnRpYWxseSByYW1wIHRvIHRoZSB2YWx1ZSAyIG92ZXIgNCBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5leHBvbmVudGlhbFJhbXBUbygyLCA0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSwgcmFtcFRpbWUpIHtcblx0ICAgICAgICB2YXIgdGltZUNvbnN0YW50ID0gTWF0aC5sb2codGhpcy50b1NlY29uZHMocmFtcFRpbWUpICsgMSkgLyBNYXRoLmxvZygyMDApO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5zZXRUYXJnZXRBdFRpbWUodmFsdWUsIHRpbWUsIHRpbWVDb25zdGFudCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoXG5cdFx0ICogIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRpbWUgY29uc3RhbnQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGltZUNvbnN0YW50XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRUYXJnZXRBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KSB7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIC8vIFRoZSB2YWx1ZSB3aWxsIG5ldmVyIGJlIGFibGUgdG8gYXBwcm9hY2ggd2l0aG91dCB0aW1lQ29uc3RhbnQgPiAwLlxuXHQgICAgICAgIGlmICh0aW1lQ29uc3RhbnQgPD0gMCkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RpbWVDb25zdGFudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5UYXJnZXQsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IHN0YXJ0VGltZSxcblx0ICAgICAgICAgICAgJ2NvbnN0YW50JzogdGltZUNvbnN0YW50XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uc2V0VGFyZ2V0QXRUaW1lKHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgYW4gYXJyYXkgb2YgYXJiaXRyYXJ5IHBhcmFtZXRlciB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge0FycmF5fSB2YWx1ZXNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBkdXJhdGlvblxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc2NhbGluZz0xXSBJZiB0aGUgdmFsdWVzIGluIHRoZSBjdXJ2ZSBzaG91bGQgYmUgc2NhbGVkIGJ5IHNvbWUgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFZhbHVlQ3VydmVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWVzLCBzdGFydFRpbWUsIGR1cmF0aW9uLCBzY2FsaW5nKSB7XG5cdCAgICAgICAgc2NhbGluZyA9IFRvbmUuZGVmYXVsdEFyZyhzY2FsaW5nLCAxKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0VmFsdWVBdFRpbWUodmFsdWVzWzBdICogc2NhbGluZywgc3RhcnRUaW1lKTtcblx0ICAgICAgICB2YXIgc2VnVGltZSA9IGR1cmF0aW9uIC8gKHZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlc1tpXSAqIHNjYWxpbmcsIHN0YXJ0VGltZSArIGkgKiBzZWdUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbHMgYWxsIHNjaGVkdWxlZCBwYXJhbWV0ZXIgY2hhbmdlcyB3aXRoIHRpbWVzIGdyZWF0ZXIgdGhhbiBvclxuXHRcdCAqICBlcXVhbCB0byBzdGFydFRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVkVmFsdWVzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoaXMgaXMgc2ltaWxhciB0byBbY2FuY2VsU2NoZWR1bGVkVmFsdWVzXSgjY2FuY2VsU2NoZWR1bGVkVmFsdWVzKSBleGNlcHRcblx0XHQgKiAgaXQgaG9sZHMgdGhlIGF1dG9tYXRlZCB2YWx1ZSBhdCB0aW1lIHVudGlsIHRoZSBuZXh0IGF1dG9tYXRlZCBldmVudC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuY2FuY2VsQW5kSG9sZEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHZhbHVlQXRUaW1lID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICAvL2lmIHRoZXJlIGlzIGFuIGV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgICAgLy9hbmQgdGhhdCBldmVuIGlzIG5vdCBhIFwic2V0XCJcblx0ICAgICAgICB2YXIgYmVmb3JlID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICB2YXIgYWZ0ZXIgPSB0aGlzLl9ldmVudHMuZ2V0QWZ0ZXIodGltZSk7XG5cdCAgICAgICAgaWYgKGJlZm9yZSAmJiBiZWZvcmUudGltZSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAvL3JlbW92ZSBldmVyeXRoaW5nIGFmdGVyXG5cdCAgICAgICAgICAgIGlmIChhZnRlcikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbChhZnRlci50aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwodGltZSArIDAuMDAwMDAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgLy9jYW5jZWwgdGhlIG5leHQgZXZlbnQocylcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbChhZnRlci50aW1lKTtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlQXRUaW1lLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlQXRUaW1lLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodmFsdWVBdFRpbWUsIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZUF0VGltZSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zZXQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVBdFRpbWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmICh0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFyYW0uc2V0VmFsdWVBdFRpbWUodmFsdWVBdFRpbWUsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmFtcHMgdG8gdGhlIGdpdmVuIHZhbHVlIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKiAgQXV0b21hdGljYWxseSBzZWxlY3RzIHRoZSBiZXN0IHJhbXAgdHlwZSAoZXhwb25lbnRpYWwgb3IgbGluZWFyKVxuXHRcdCAqICBkZXBlbmRpbmcgb24gdGhlIGB1bml0c2Agb2YgdGhlIHNpZ25hbFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgXHRUaGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JhbXAgdG8gdGhlIHZhbHVlIGVpdGhlciBsaW5lYXJseSBvciBleHBvbmVudGlhbGx5XG5cdFx0ICogLy9kZXBlbmRpbmcgb24gdGhlIFwidW5pdHNcIiB2YWx1ZSBvZiB0aGUgc2lnbmFsXG5cdFx0ICogc2lnbmFsLnJhbXBUbygwLCAxMCk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zY2hlZHVsZSBpdCB0byByYW1wIHN0YXJ0aW5nIGF0IGEgc3BlY2lmaWMgdGltZVxuXHRcdCAqIHNpZ25hbC5yYW1wVG8oMCwgMTAsIDUpXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5yYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICByYW1wVGltZSA9IFRvbmUuZGVmYXVsdEFyZyhyYW1wVGltZSwgMC4xKTtcblx0ICAgICAgICBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkZyZXF1ZW5jeSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQlBNIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5EZWNpYmVscykge1xuXHQgICAgICAgICAgICB0aGlzLmV4cG9uZW50aWFsUmFtcFRvKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUbyh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFVVE9NQVRJT04gQ1VSVkUgQ0FMQ1VMQVRJT05TXG5cdCAgICAvL1x0TUlUIExpY2Vuc2UsIGNvcHlyaWdodCAoYykgMjAxNCBKb3JkYW4gU2FudGVsbFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBDYWxjdWxhdGVzIHRoZSB0aGUgdmFsdWUgYWxvbmcgdGhlIGN1cnZlIHByb2R1Y2VkIGJ5IHNldFRhcmdldEF0VGltZVxuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2V4cG9uZW50aWFsQXBwcm9hY2ggPSBmdW5jdGlvbiAodDAsIHYwLCB2MSwgdGltZUNvbnN0YW50LCB0KSB7XG5cdCAgICAgICAgcmV0dXJuIHYxICsgKHYwIC0gdjEpICogTWF0aC5leHAoLSh0IC0gdDApIC8gdGltZUNvbnN0YW50KTtcblx0ICAgIH07XG5cdCAgICAvLyBDYWxjdWxhdGVzIHRoZSB0aGUgdmFsdWUgYWxvbmcgdGhlIGN1cnZlIHByb2R1Y2VkIGJ5IGxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fbGluZWFySW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAodDAsIHYwLCB0MSwgdjEsIHQpIHtcblx0ICAgICAgICByZXR1cm4gdjAgKyAodjEgLSB2MCkgKiAoKHQgLSB0MCkgLyAodDEgLSB0MCkpO1xuXHQgICAgfTtcblx0ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHRoZSB2YWx1ZSBhbG9uZyB0aGUgY3VydmUgcHJvZHVjZWQgYnkgZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZVxuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAodDAsIHYwLCB0MSwgdjEsIHQpIHtcblx0ICAgICAgICByZXR1cm4gdjAgKiBNYXRoLnBvdyh2MSAvIHYwLCAodCAtIHQwKSAvICh0MSAtIHQwKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFyYW07XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIE9mZmxpbmVBdWRpb0NvbnRleHRcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQ29udGV4dH1cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgY2hhbm5lbHMgIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdG8gcmVuZGVyXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGR1cmF0aW9uICBUaGUgZHVyYXRpb24gdG8gcmVuZGVyIGluIHNhbXBsZXNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHNhbXBsZVJhdGUgdGhlIHNhbXBsZSByYXRlIHRvIHJlbmRlciBhdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dCA9IGZ1bmN0aW9uIChjaGFubmVscywgZHVyYXRpb24sIHNhbXBsZVJhdGUpIHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb2ZmbGluZSBjb250ZXh0XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge09mZmxpbmVBdWRpb0NvbnRleHR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB2YXIgb2ZmbGluZUNvbnRleHQgPSBuZXcgT2ZmbGluZUF1ZGlvQ29udGV4dChjaGFubmVscywgZHVyYXRpb24gKiBzYW1wbGVSYXRlLCBzYW1wbGVSYXRlKTtcblx0ICAgICAgICAvL3dyYXAgdGhlIG1ldGhvZHMvbWVtYmVyc1xuXHQgICAgICAgIFRvbmUuQ29udGV4dC5jYWxsKHRoaXMsIHtcblx0ICAgICAgICAgICAgJ2NvbnRleHQnOiBvZmZsaW5lQ29udGV4dCxcblx0ICAgICAgICAgICAgJ2Nsb2NrU291cmNlJzogJ29mZmxpbmUnLFxuXHQgICAgICAgICAgICAnbG9va0FoZWFkJzogMCxcblx0ICAgICAgICAgICAgJ3VwZGF0ZUludGVydmFsJzogMTI4IC8gc2FtcGxlUmF0ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgcHJpdmF0ZSByZWZlcmVuY2UgdG8gdGhlIGR1cmF0aW9uXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW4gYXJ0aWZpY2lhbCBjbG9jayBzb3VyY2Vcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSAwO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT2ZmbGluZUNvbnRleHQsIFRvbmUuQ29udGV4dCk7XG5cdCAgICAvKipcblx0XHQgKiAgT3ZlcnJpZGUgdGhlIG5vdyBtZXRob2QgdG8gcG9pbnQgdG8gdGhlIGludGVybmFsIGNsb2NrIHRpbWVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFRpbWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbmRlciB0aGUgb3V0cHV0IG9mIHRoZSBPZmZsaW5lQ29udGV4dFxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB3aGlsZSAodGhpcy5fZHVyYXRpb24gLSB0aGlzLl9jdXJyZW50VGltZSA+PSAwKSB7XG5cdCAgICAgICAgICAgIC8vaW52b2tlIGFsbCB0aGUgY2FsbGJhY2tzIG9uIHRoYXQgdGltZVxuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3RpY2snKTtcblx0ICAgICAgICAgICAgLy9pbmNyZW1lbnQgdGhlIGNsb2NrXG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHRoaXMuYmxvY2tUaW1lO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dC5zdGFydFJlbmRlcmluZygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbG9zZSB0aGUgY29udGV4dFxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2NvbnRleHQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5PZmZsaW5lQ29udGV4dDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuXHQgICAgICAgIHZhciBpc01vYmlsZVNhZmFyaSA9IHVhLmluY2x1ZGVzKCdzYWZhcmknKSAmJiAhdWEuaW5jbHVkZXMoJ2Nocm9tZScpICYmIHVhLmluY2x1ZGVzKCdtb2JpbGUnKTtcblx0ICAgICAgICBpZiAoaXNNb2JpbGVTYWZhcmkpIHtcblx0ICAgICAgICAgICAgLy9tb2JpbGUgc2FmYXJpIGhhcyBhIGJpemFycmUgYnVnIHdpdGggdGhlIG9mZmxpbmUgY29udGV4dFxuXHQgICAgICAgICAgICAvL3doZW4gYSBCdWZmZXJTb3VyY2VOb2RlIGlzIHN0YXJ0ZWQsIGl0IHN0YXJ0cyB0aGUgb2ZmbGluZSBjb250ZXh0XG5cdCAgICAgICAgICAgIC8vXG5cdCAgICAgICAgICAgIC8vZGVmZXJyaW5nIGFsbCBCdWZmZXJTb3VyY2Ugc3RhcnRzIHRpbGwgdGhlIGxhc3QgcG9zc2libGUgbW9tZW50XG5cdCAgICAgICAgICAgIC8vcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCBvZiB0aGlzIGhhcHBlbmluZ1xuXHQgICAgICAgICAgICBUb25lLk9mZmxpbmVDb250ZXh0LnByb3RvdHlwZS5jcmVhdGVCdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnVmZmVyU291cmNlID0gdGhpcy5fY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICAgICAgICAgIHZhciBfbmF0aXZlX3N0YXJ0ID0gYnVmZmVyU291cmNlLnN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyU291cmNlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBfbmF0aXZlX3N0YXJ0LmNhbGwoYnVmZmVyU291cmNlLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIDApO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclNvdXJjZTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIHRoaW4gd3JhcHBlciBhcm91bmQgdGhlIE5hdGl2ZSBXZWIgQXVkaW8gR2Fpbk5vZGUuXG5cdFx0ICogICAgICAgICBUaGUgR2Fpbk5vZGUgaXMgYSBiYXNpYyBidWlsZGluZyBibG9jayBvZiB0aGUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICBBUEkgYW5kIGlzIHVzZWZ1bCBmb3Igcm91dGluZyBhdWRpbyBhbmQgYWRqdXN0aW5nIGdhaW5zLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gIGdhaW4gIFRoZSBpbml0aWFsIGdhaW4gb2YgdGhlIEdhaW5Ob2RlXG5cdFx0ICogIEBwYXJhbSB7VG9uZS5UeXBlPX0gdW5pdHMgVGhlIHVuaXRzIG9mIHRoZSBnYWluIHBhcmFtZXRlci5cblx0XHQgKi9cblx0ICAgIFRvbmUuR2FpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ3VuaXRzJ1xuXHQgICAgICAgIF0sIFRvbmUuR2Fpbik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgR2Fpbk5vZGVcblx0XHRcdCAqICBAdHlwZSAge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLl9nYWluTm9kZSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gcGFyYW1ldGVyIG9mIHRoZSBnYWluIG5vZGUuXG5cdFx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5nYWluID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9nYWluTm9kZS5nYWluLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBvcHRpb25zLnVuaXRzLFxuXHQgICAgICAgICAgICAndmFsdWUnOiBvcHRpb25zLmdhaW4sXG5cdCAgICAgICAgICAgICdjb252ZXJ0Jzogb3B0aW9ucy5jb252ZXJ0XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2dhaW4nKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdhaW4sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdnYWluJzogMSxcblx0ICAgICAgICAnY29udmVydCc6IHRydWVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkdhaW59ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdnYWluJyk7XG5cdCAgICAgICAgdGhpcy5nYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmdhaW4gPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdhaW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCAmJiAhQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVDb25zdGFudFNvdXJjZSkge1xuXHQgICAgICAgIHZhciBDb25zdGFudFNvdXJjZU5vZGUgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgMTI4LCBjb250ZXh0LnNhbXBsZVJhdGUpO1xuXHQgICAgICAgICAgICB2YXIgYXJyID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgYXJyW2ldID0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UubG9vcCA9IHRydWU7XG5cdCAgICAgICAgICAgIHZhciBnYWluTm9kZSA9IHRoaXMuX291dHB1dCA9IGNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgICAgICB0aGlzLm9mZnNldCA9IGdhaW5Ob2RlLmdhaW47XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5jb25uZWN0KGdhaW5Ob2RlKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIENvbnN0YW50U291cmNlTm9kZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2Uuc3RhcnQodGltZSk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLnN0b3AodGltZSk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXQuY29ubmVjdC5hcHBseSh0aGlzLl9vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXQuZGlzY29ubmVjdC5hcHBseSh0aGlzLl9vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVDb25zdGFudFNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudFNvdXJjZU5vZGUodGhpcyk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnN0YW50U291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50U291cmNlTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc2lnbmFsIGlzIGFuIGF1ZGlvLXJhdGUgdmFsdWUuIFRvbmUuU2lnbmFsIGlzIGEgY29yZSBjb21wb25lbnQgb2YgdGhlIGxpYnJhcnkuXG5cdFx0ICogICAgICAgICAgVW5saWtlIGEgbnVtYmVyLCBTaWduYWxzIGNhbiBiZSBzY2hlZHVsZWQgd2l0aCBzYW1wbGUtbGV2ZWwgYWNjdXJhY3kuIFRvbmUuU2lnbmFsXG5cdFx0ICogICAgICAgICAgaGFzIGFsbCBvZiB0aGUgbWV0aG9kcyBhdmFpbGFibGUgdG8gbmF0aXZlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgIFtBdWRpb1BhcmFtXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1hdWRpb3BhcmFtLWludGVyZmFjZSlcblx0XHQgKiAgICAgICAgICBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgY29udmVuaWVuY2VzLiBSZWFkIG1vcmUgYWJvdXQgd29ya2luZyB3aXRoIHNpZ25hbHNcblx0XHQgKiAgICAgICAgICBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvU2lnbmFscykuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlBhcmFtfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxBdWRpb1BhcmFtfSBbdmFsdWVdIEluaXRpYWwgdmFsdWUgb2YgdGhlIHNpZ25hbC4gSWYgYW4gQXVkaW9QYXJhbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHBhc3NlZCBpbiwgdGhhdCBwYXJhbWV0ZXIgd2lsbCBiZSB3cmFwcGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNvbnRyb2xsZWQgYnkgdGhlIFNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IFt1bml0cz1OdW1iZXJdIHVuaXQgVGhlIHVuaXRzIHRoZSBzaWduYWwgaXMgaW4uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgxMCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd2YWx1ZScsXG5cdCAgICAgICAgICAgICd1bml0cydcblx0ICAgICAgICBdLCBUb25lLlNpZ25hbCk7XG5cdCAgICAgICAgVG9uZS5QYXJhbS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiBXaGVuIGEgc2lnbmFsIGlzIGNvbm5lY3RlZCB0byBhbm90aGVyIHNpZ25hbCBvciBhdWRpbyBwYXJhbSxcblx0XHRcdCogdGhpcyBzaWduYWwgYmVjb21lcyBhIHByb3h5IGZvciBpdFxuXHRcdFx0KiBAdHlwZSB7QXJyYXl9XG5cdFx0XHQqIEBwcml2YXRlXG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCogSW5kaWNhdGVzIGlmIHRoZSBjb25zdGFudCBzb3VyY2Ugd2FzIHN0YXJ0ZWQgb3Igbm90XG5cdFx0XHQqIEBwcml2YXRlXG5cdFx0XHQqIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0Ki9cblx0ICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY29uc3RhbnQgc291cmNlIG5vZGUgd2hpY2ggZ2VuZXJhdGVzIHRoZSBzaWduYWxcblx0XHRcdCAqIEB0eXBlIHtDb25zdGFudFNvdXJjZU5vZGV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2UgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ29uc3RhbnRTb3VyY2UoKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuX2NvbnN0YW50U291cmNlLm9mZnNldDtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBub2RlIHdoZXJlIHRoZSBjb25zdGFudCBzaWduYWwgdmFsdWUgaXMgc2NhbGVkLlxuXHRcdFx0ICogQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5fY29uc3RhbnRTb3VyY2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbm9kZSB3aGVyZSB0aGUgdmFsdWUgaXMgc2V0LlxuXHRcdFx0ICogQHR5cGUge1RvbmUuUGFyYW19XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMuX3BhcmFtID0gdGhpcy5vdXRwdXQub2Zmc2V0O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2lnbmFsLCBUb25lLlBhcmFtKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndmFsdWUnOiAwLFxuXHQgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWZhdWx0LFxuXHQgICAgICAgICdjb252ZXJ0JzogdHJ1ZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGVuIHNpZ25hbHMgY29ubmVjdCB0byBvdGhlciBzaWduYWxzIG9yIEF1ZGlvUGFyYW1zLFxuXHRcdCAqICB0aGV5IHRha2Ugb3ZlciB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoYXQgc2lnbmFsIG9yIEF1ZGlvUGFyYW0uXG5cdFx0ICogIEZvciBhbGwgb3RoZXIgbm9kZXMsIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBhIGRlZmF1bHQgPGNvZGU+Y29ubmVjdDwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQG92ZXJyaWRlXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9QYXJhbXxBdWRpb05vZGV8VG9uZS5TaWduYWx8VG9uZX0gbm9kZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bWJlcj0wXSBUaGUgb3V0cHV0IG51bWJlciB0byBjb25uZWN0IGZyb20uXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW1iZXI9MF0gVGhlIGlucHV0IG51bWJlciB0byBjb25uZWN0IHRvLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWx9IHRoaXNcblx0XHQgKiAgQG1ldGhvZFxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIC8vdGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gd2hlcmUgdGhpcyBub2RlIHdpbGwgZm9yd2FyZCBhdXRvbWF0aW9uc1xuXHQgICAgICAgIC8vdG8gY29ubmVjdGVkIG5vZGVzIHdpdGhvdXQgYW55IHNpZ25hbCBpZiBwb3NzaWJsZS5cblx0ICAgICAgICBpZiAodGhpcy5faXNQYXJhbShub2RlKSAmJiAhdGhpcy5fc291cmNlU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgICAgIG5vZGUub3ZlcnJpZGRlbiA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGx5QXV0b21hdGlvbnMobm9kZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fc291cmNlU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZS5zdGFydCgwKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUYWtlcyBhIG5vZGUgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgaWYgaXQgaXMgYSBQYXJhbSBvciBBdWRpb1BhcmFtXG5cdFx0ICogQHBhcmFtICB7Kn0gbm9kZSBUaGUgbm9kZSB0byB0ZXN0XG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLl9pc1BhcmFtID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5QYXJhbSAmJiBUb25lLlBhcmFtID09PSBub2RlLmNvbnN0cnVjdG9yIHx8IG5vZGUgaW5zdGFuY2VvZiBBdWRpb1BhcmFtO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIERpc2NhcmQgdGhlIG9wdGltaXphdGlvbiBhbmQgY29ubmVjdCBhbGwgb2YgdGhlIHByb3hpZXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLl9jb25uZWN0UHJveGllcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZVN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlLnN0YXJ0KDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9wcm94aWVzLmZvckVhY2goZnVuY3Rpb24gKHByb3h5KSB7XG5cdCAgICAgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdC5jYWxsKHRoaXMsIHByb3h5KTtcblx0ICAgICAgICAgICAgaWYgKHByb3h5Ll9wcm94aWVzKSB7XG5cdCAgICAgICAgICAgICAgICBwcm94eS5fY29ubmVjdFByb3hpZXMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlZCB3aGVuIGEgbm9kZSBpcyBjb25uZWN0ZWQgdG8gdGhpc1xuXHRcdCAqIEBwYXJhbSAge0F1ZGlvTm9kZX0gZnJvbVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX29uQ29ubmVjdCA9IGZ1bmN0aW9uIChmcm9tKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLl9pc1BhcmFtKGZyb20pKSB7XG5cdCAgICAgICAgICAgIC8vY29ubmVjdCBhbGwgdGhlIHByb3hpZXNcblx0ICAgICAgICAgICAgdGhpcy5fY29ubmVjdFByb3hpZXMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQXBwbHkgYWxsIHRoZSBjdXJyZW50IGF1dG9tYXRpb25zIHRvIHRoZSBnaXZlbiBwYXJhbWV0ZXJcblx0XHQgKiBAcGFyYW0gIHtBdWRpb1BhcmFtfSBwYXJhbVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX2FwcGx5QXV0b21hdGlvbnMgPSBmdW5jdGlvbiAocGFyYW0pIHtcblx0ICAgICAgICB2YXIgbm93ID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lO1xuXHQgICAgICAgIHBhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhub3cpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZShub3cpO1xuXHQgICAgICAgIHBhcmFtLnNldFZhbHVlQXRUaW1lKGN1cnJlbnRWYWwsIG5vdyk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmZvckVhY2hGcm9tKG5vdywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHBhcmFtW2V2ZW50LnR5cGVdKGV2ZW50LnZhbHVlLCBldmVudC50aW1lLCBldmVudC5jb25zdGFudCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRGlzY29ubmVjdCBmcm9tIHRoZSBnaXZlbiBub2RlIG9yIGFsbCBub2RlcyBpZiBubyBwYXJhbSBpcyBnaXZlbi5cblx0XHQgKiBAcGFyYW0gIHtBdWRpb05vZGV8QXVkaW9QYXJhbX0gbm9kZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2lnbmFsfSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fcHJveGllcy5pbmNsdWRlcyhub2RlKSkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9wcm94aWVzLmluZGV4T2Yobm9kZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKCFub2RlKSB7XG5cdCAgICAgICAgICAgIC8vbm8gYXJndW1lbnQsIGRpc2Nvbm5lY3QgZXZlcnl0aGluZ1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzID0gW107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc2Nvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGN1cnJlbnQgc2lnbmFsIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgV2hlbiB0byBnZXQgdGhlIHNpZ25hbCB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3BhcmFtLmdldFZhbHVlQXRUaW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJhbS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5QYXJhbS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLy93cmFwIGFsbCBvZiB0aGUgYXV0b21hdGlvbiBtZXRob2RzXG5cdCAgICBbXG5cdCAgICAgICAgJ3NldFZhbHVlQXRUaW1lJyxcblx0ICAgICAgICAnbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgICdleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICAnc2V0VGFyZ2V0QXRUaW1lJ1xuXHQgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcblx0ICAgICAgICB2YXIgcHJldmlvdXNNZXRob2QgPSBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdCAgICAgICAgICAgIHByZXZpb3VzTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIGFyZ3NbMF0gPSB0aGlzLl9mcm9tVW5pdHMoYXJnc1swXSk7XG5cdCAgICAgICAgICAgIGFyZ3NbMV0gPSB0aGlzLnRvU2Vjb25kcyhhcmdzWzFdKTtcblx0ICAgICAgICAgICAgLy9hcHBseSBpdCB0byB0aGUgcHJveGllc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLmZvckVhY2goZnVuY3Rpb24gKHNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc2lnbmFsW21ldGhvZF0uYXBwbHkoc2lnbmFsLCBhcmdzKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfTtcblx0ICAgIH0pO1xuXHQgICAgW1xuXHQgICAgICAgICdjYW5jZWxTY2hlZHVsZWRWYWx1ZXMnLFxuXHQgICAgICAgICdjYW5jZWxBbmRIb2xkQXRUaW1lJ1xuXHQgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcblx0ICAgICAgICB2YXIgcHJldmlvdXNNZXRob2QgPSBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdCAgICAgICAgICAgIHByZXZpb3VzTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIGFyZ3NbMF0gPSB0aGlzLnRvU2Vjb25kcyhhcmdzWzBdKTtcblx0ICAgICAgICAgICAgLy9hcHBseSBpdCB0byB0aGUgcHJveGllc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLmZvckVhY2goZnVuY3Rpb24gKHNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc2lnbmFsW21ldGhvZF0uYXBwbHkoc2lnbmFsLCBhcmdzKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfTtcblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2UuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wcm94aWVzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TaWduYWw7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBQb3cgYXBwbGllcyBhbiBleHBvbmVudCB0byB0aGUgaW5jb21pbmcgc2lnbmFsLiBUaGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogICAgICAgICBtdXN0IGJlIEF1ZGlvUmFuZ2UuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IGV4cCBUaGUgZXhwb25lbnQgdG8gYXBwbHkgdG8gdGhlIGluY29taW5nIHNpZ25hbCwgbXVzdCBiZSBhdCBsZWFzdCAyLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcG93ID0gbmV3IFRvbmUuUG93KDIpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KHBvdyk7XG5cdFx0ICogLy9vdXRwdXQgb2YgcG93IGlzIDAuMjUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb3cgPSBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiB0aGUgZXhwb25lbnRcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwID0gVG9uZS5kZWZhdWx0QXJnKGV4cCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHBTY2FsZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKHRoaXMuX2V4cEZ1bmModGhpcy5fZXhwKSwgODE5Mik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Qb3csIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdmFsdWUgb2YgdGhlIGV4cG9uZW50LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBvdyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Qb3cucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHA7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwID0gZXhwO1xuXHQgICAgICAgICAgICB0aGlzLl9leHBTY2FsZXIuc2V0TWFwKHRoaXMuX2V4cEZ1bmModGhpcy5fZXhwKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGZ1bmN0aW9uIHdoaWNoIG1hcHMgdGhlIHdhdmVzaGFwZXJcblx0XHQgKiAgQHBhcmFtICAge251bWJlcn0gZXhwXG5cdFx0ICogIEByZXR1cm4ge2Z1bmN0aW9ufVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb3cucHJvdG90eXBlLl9leHBGdW5jID0gZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLnBvdyhNYXRoLmFicyh2YWwpLCBleHApO1xuXHQgICAgICAgIH07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb3d9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG93LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2V4cFNjYWxlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXhwU2NhbGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Qb3c7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5FbnZlbG9wZSBpcyBhbiBbQURTUl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3ludGhlc2l6ZXIjQURTUl9lbnZlbG9wZSlcblx0XHQgKiAgICAgICAgICBlbnZlbG9wZSBnZW5lcmF0b3IuIFRvbmUuRW52ZWxvcGUgb3V0cHV0cyBhIHNpZ25hbCB3aGljaFxuXHRcdCAqICAgICAgICAgIGNhbiBiZSBjb25uZWN0ZWQgdG8gYW4gQXVkaW9QYXJhbSBvciBUb25lLlNpZ25hbC5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvZS9lYS9BRFNSX3BhcmFtZXRlci5zdmdcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFthdHRhY2tdIFRoZSBhbW91bnQgb2YgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlIHRvIGdvIGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAwIHRvIGl0J3MgbWF4aW11bSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHRUaGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgdGhlIGF0dGFjayB0aGF0IGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgXHR0byBmYWxsIHRvIHRoZSBzdXN0YWluIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc3VzdGFpbl1cdFRoZSBwZXJjZW50IG9mIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgdGhlIGVudmVsb3BlIHJlc3RzIGF0IHVudGlsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0dGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0VGhlIGFtb3VudCBvZiB0aW1lIGFmdGVyIHRoZSByZWxlYXNlIGlzIHRyaWdnZXJlZCBpdCB0YWtlcyB0byByZWFjaCAwLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYW4gYW1wbGl0dWRlIGVudmVsb3BlXG5cdFx0ICogdmFyIGdhaW5Ob2RlID0gVG9uZS5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0XHQgKiB2YXIgZW52ID0gbmV3IFRvbmUuRW52ZWxvcGUoe1xuXHRcdCAqIFx0XCJhdHRhY2tcIiA6IDAuMSxcblx0XHQgKiBcdFwiZGVjYXlcIiA6IDAuMixcblx0XHQgKiBcdFwic3VzdGFpblwiIDogMSxcblx0XHQgKiBcdFwicmVsZWFzZVwiIDogMC44LFxuXHRcdCAqIH0pO1xuXHRcdCAqIGVudi5jb25uZWN0KGdhaW5Ob2RlLmdhaW4pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2dldCBhbGwgb2YgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ2RlY2F5Jyxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkVudmVsb3BlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZW4gdHJpZ2dlckF0dGFjayBpcyBjYWxsZWQsIHRoZSBhdHRhY2sgdGltZSBpcyB0aGUgYW1vdW50IG9mXG5cdFx0XHQgKiAgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlIHRvIHJlYWNoIGl0J3MgbWF4aW11bSB2YWx1ZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXR0YWNrID0gb3B0aW9ucy5hdHRhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWZ0ZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZSwgdGhlIHZhbHVlIHdpbGwgZmFsbFxuXHRcdFx0ICogIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSBkZWNheSB0aW1lIHRvIGl0J3Mgc3VzdGFpbiB2YWx1ZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVjYXkgPSBvcHRpb25zLmRlY2F5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogXHRUaGUgc3VzdGFpbiB2YWx1ZSBpcyB0aGUgdmFsdWVcblx0XHRcdCAqIFx0d2hpY2ggdGhlIGVudmVsb3BlIHJlc3RzIGF0IGFmdGVyIHRyaWdnZXJBdHRhY2sgaXNcblx0XHRcdCAqIFx0Y2FsbGVkLCBidXQgYmVmb3JlIHRyaWdnZXJSZWxlYXNlIGlzIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zdXN0YWluID0gb3B0aW9ucy5zdXN0YWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFmdGVyIHRyaWdnZXJSZWxlYXNlIGlzIGNhbGxlZCwgdGhlIGVudmVsb3BlJ3Ncblx0XHRcdCAqICB2YWx1ZSB3aWxsIGZhbGwgdG8gaXQncyBtaW1pbnVtIHZhbHVlIG92ZXIgdGhlXG5cdFx0XHQgKiAgZHVyYXRpb24gb2YgdGhlIHJlbGVhc2UgdGltZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbmV4dCB0aW1lIHRoZSBlbnZlbG9wZSBpcyBhdCBzdGFuZGJ5XG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSAnbGluZWFyJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbmV4dCB0aW1lIHRoZSBlbnZlbG9wZSBpcyBhdCBzdGFuZGJ5XG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gJ2V4cG9uZW50aWFsJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaWcgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlNpZ25hbCgwKTtcblx0ICAgICAgICAvL3NldCB0aGUgYXR0YWNrQ3VydmUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5hdHRhY2tDdXJ2ZSA9IG9wdGlvbnMuYXR0YWNrQ3VydmU7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlQ3VydmUgPSBvcHRpb25zLnJlbGVhc2VDdXJ2ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVudmVsb3BlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgJ3N1c3RhaW4nOiAwLjUsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAxLFxuXHQgICAgICAgICdhdHRhY2tDdXJ2ZSc6ICdsaW5lYXInLFxuXHQgICAgICAgICdyZWxlYXNlQ3VydmUnOiAnZXhwb25lbnRpYWwnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVhZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZW52ZWxvcGUuIFVzZWZ1bCBmb3Jcblx0XHQgKiBzeW5jcm9uaXppbmcgdmlzdWFsIG91dHB1dCB0byB0aGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSB2YWx1ZVxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNoYXBlIG9mIHRoZSBhdHRhY2suXG5cdFx0ICogQ2FuIGJlIGFueSBvZiB0aGVzZSBzdHJpbmdzOlxuXHRcdCAqIDx1bD5cblx0XHQgKiAgIDxsaT5saW5lYXI8L2xpPlxuXHRcdCAqICAgPGxpPmV4cG9uZW50aWFsPC9saT5cblx0XHQgKiAgIDxsaT5zaW5lPC9saT5cblx0XHQgKiAgIDxsaT5jb3NpbmU8L2xpPlxuXHRcdCAqICAgPGxpPmJvdW5jZTwvbGk+XG5cdFx0ICogICA8bGk+cmlwcGxlPC9saT5cblx0XHQgKiAgIDxsaT5zdGVwPC9saT5cblx0XHQgKiA8L3VsPlxuXHRcdCAqIENhbiBhbHNvIGJlIGFuIGFycmF5IHdoaWNoIGRlc2NyaWJlcyB0aGUgY3VydmUuIFZhbHVlc1xuXHRcdCAqIGluIHRoZSBhcnJheSBhcmUgZXZlbmx5IHN1YmRpdmlkZWQgYW5kIGxpbmVhcmx5XG5cdFx0ICogaW50ZXJwb2xhdGVkIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSBhdHRhY2suXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge1N0cmluZ3xBcnJheX1cblx0XHQgKiBAbmFtZSBhdHRhY2tDdXJ2ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogZW52LmF0dGFja0N1cnZlID0gXCJsaW5lYXJcIjtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIGFsc28gYmUgYW4gYXJyYXlcblx0XHQgKiBlbnYuYXR0YWNrQ3VydmUgPSBbMCwgMC4yLCAwLjMsIDAuNCwgMV1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkVudmVsb3BlLnByb3RvdHlwZSwgJ2F0dGFja0N1cnZlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc1N0cmluZyh0aGlzLl9hdHRhY2tDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkodGhpcy5fYXR0YWNrQ3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICAvL2xvb2sgdXAgdGhlIG5hbWUgaW4gdGhlIGN1cnZlcyBhcnJheVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgdHlwZSBpbiBUb25lLkVudmVsb3BlLlR5cGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5FbnZlbG9wZS5UeXBlW3R5cGVdLkluID09PSB0aGlzLl9hdHRhY2tDdXJ2ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvL290aGVyd2lzZSBqdXN0IHJldHVybiB0aGUgYXJyYXlcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY3VydmUpIHtcblx0ICAgICAgICAgICAgLy9jaGVjayBpZiBpdCdzIGEgdmFsaWQgdHlwZVxuXHQgICAgICAgICAgICBpZiAoVG9uZS5FbnZlbG9wZS5UeXBlLmhhc093blByb3BlcnR5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGN1cnZlRGVmID0gVG9uZS5FbnZlbG9wZS5UeXBlW2N1cnZlXTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGN1cnZlRGVmKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gY3VydmVEZWYuSW47XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gY3VydmVEZWY7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0FycmF5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5FbnZlbG9wZTogaW52YWxpZCBjdXJ2ZTogJyArIGN1cnZlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNoYXBlIG9mIHRoZSByZWxlYXNlLiBTZWUgdGhlIGF0dGFjayBjdXJ2ZSB0eXBlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5FbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfEFycmF5fVxuXHRcdCAqIEBuYW1lIHJlbGVhc2VDdXJ2ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogZW52LnJlbGVhc2VDdXJ2ZSA9IFwibGluZWFyXCI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUsICdyZWxlYXNlQ3VydmUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzU3RyaW5nKHRoaXMuX3JlbGVhc2VDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlQ3VydmU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0FycmF5KHRoaXMuX3JlbGVhc2VDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vbG9vayB1cCB0aGUgbmFtZSBpbiB0aGUgY3VydmVzIGFycmF5XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB0eXBlIGluIFRvbmUuRW52ZWxvcGUuVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGVbdHlwZV0uT3V0ID09PSB0aGlzLl9yZWxlYXNlQ3VydmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgLy9vdGhlcndpc2UganVzdCByZXR1cm4gdGhlIGFycmF5XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVsZWFzZUN1cnZlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjdXJ2ZSkge1xuXHQgICAgICAgICAgICAvL2NoZWNrIGlmIGl0J3MgYSB2YWxpZCB0eXBlXG5cdCAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGUuaGFzT3duUHJvcGVydHkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY3VydmVEZWYgPSBUb25lLkVudmVsb3BlLlR5cGVbY3VydmVdO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QoY3VydmVEZWYpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gY3VydmVEZWYuT3V0O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBjdXJ2ZURlZjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5FbnZlbG9wZTogaW52YWxpZCBjdXJ2ZTogJyArIGN1cnZlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjay9kZWNheSBwb3J0aW9uIG9mIHRoZSBBRFNSIGVudmVsb3BlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIGVudmVsb3BlIHNjYWxlcyB0aGUgdmFsZXMuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIGJldHdlZW4gMC0xXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vdHJpZ2dlciB0aGUgYXR0YWNrIDAuNSBzZWNvbmRzIGZyb20gbm93IHdpdGggYSB2ZWxvY2l0eSBvZiAwLjJcblx0XHQgKiAgZW52LnRyaWdnZXJBdHRhY2soXCIrMC41XCIsIDAuMik7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBvcmlnaW5hbEF0dGFjayA9IHRoaXMudG9TZWNvbmRzKHRoaXMuYXR0YWNrKTtcblx0ICAgICAgICB2YXIgYXR0YWNrID0gb3JpZ2luYWxBdHRhY2s7XG5cdCAgICAgICAgdmFyIGRlY2F5ID0gdGhpcy50b1NlY29uZHModGhpcy5kZWNheSk7XG5cdCAgICAgICAgdmVsb2NpdHkgPSBUb25lLmRlZmF1bHRBcmcodmVsb2NpdHksIDEpO1xuXHQgICAgICAgIC8vY2hlY2sgaWYgaXQncyBub3QgYSBjb21wbGV0ZSBhdHRhY2tcblx0ICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAoY3VycmVudFZhbHVlID4gMCkge1xuXHQgICAgICAgICAgICAvL3N1YnRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIGZyb20gdGhlIGF0dGFjayB0aW1lXG5cdCAgICAgICAgICAgIHZhciBhdHRhY2tSYXRlID0gMSAvIGF0dGFjaztcblx0ICAgICAgICAgICAgdmFyIHJlbWFpbmluZ0Rpc3RhbmNlID0gMSAtIGN1cnJlbnRWYWx1ZTtcblx0ICAgICAgICAgICAgLy90aGUgYXR0YWNrIGlzIG5vdyB0aGUgcmVtYWluaW5nIHRpbWVcblx0ICAgICAgICAgICAgYXR0YWNrID0gcmVtYWluaW5nRGlzdGFuY2UgLyBhdHRhY2tSYXRlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2F0dGFja1xuXHQgICAgICAgIGlmICh0aGlzLl9hdHRhY2tDdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLmxpbmVhclJhbXBUbyh2ZWxvY2l0eSwgYXR0YWNrLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2F0dGFja0N1cnZlID09PSAnZXhwb25lbnRpYWwnKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy50YXJnZXRSYW1wVG8odmVsb2NpdHksIGF0dGFjaywgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhdHRhY2sgPiAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgY3VydmUgPSB0aGlzLl9hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICAgICAgLy90YWtlIG9ubHkgYSBwb3J0aW9uIG9mIHRoZSBjdXJ2ZVxuXHQgICAgICAgICAgICBpZiAoYXR0YWNrIDwgb3JpZ2luYWxBdHRhY2spIHtcblx0ICAgICAgICAgICAgICAgIHZhciBwZXJjZW50Q29tcGxldGUgPSAxIC0gYXR0YWNrIC8gb3JpZ2luYWxBdHRhY2s7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2xpY2VJbmRleCA9IE1hdGguZmxvb3IocGVyY2VudENvbXBsZXRlICogdGhpcy5fYXR0YWNrQ3VydmUubGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIGN1cnZlID0gdGhpcy5fYXR0YWNrQ3VydmUuc2xpY2Uoc2xpY2VJbmRleCk7XG5cdCAgICAgICAgICAgICAgICAvL3RoZSBmaXJzdCBpbmRleCBpcyB0aGUgY3VycmVudCB2YWx1ZVxuXHQgICAgICAgICAgICAgICAgY3VydmVbMF0gPSBjdXJyZW50VmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fc2lnLnNldFZhbHVlQ3VydmVBdFRpbWUoY3VydmUsIHRpbWUsIGF0dGFjaywgdmVsb2NpdHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2RlY2F5XG5cdCAgICAgICAgaWYgKGRlY2F5KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy50YXJnZXRSYW1wVG8odmVsb2NpdHkgKiB0aGlzLnN1c3RhaW4sIGRlY2F5LCBhdHRhY2sgKyB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXJzIHRoZSByZWxlYXNlIG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy90cmlnZ2VyIHJlbGVhc2UgaW1tZWRpYXRlbHlcblx0XHQgKiAgZW52LnRyaWdnZXJSZWxlYXNlKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPiAwKSB7XG5cdCAgICAgICAgICAgIHZhciByZWxlYXNlID0gdGhpcy50b1NlY29uZHModGhpcy5yZWxlYXNlKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3JlbGVhc2VDdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NpZy5saW5lYXJSYW1wVG8oMCwgcmVsZWFzZSwgdGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcmVsZWFzZUN1cnZlID09PSAnZXhwb25lbnRpYWwnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaWcudGFyZ2V0UmFtcFRvKDAsIHJlbGVhc2UsIHRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdmFyIGN1cnZlID0gdGhpcy5fcmVsZWFzZUN1cnZlO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWcuY2FuY2VsQW5kSG9sZEF0VGltZSh0aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWcuc2V0VmFsdWVDdXJ2ZUF0VGltZShjdXJ2ZSwgdGltZSwgcmVsZWFzZSwgY3VycmVudFZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzY2hlZHVsZWQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFRoaXMgd2lsbFxuXHRcdCAqICByZXR1cm4gdGhlIHVuY29udmVydGVkIChyYXcpIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgVGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc2lnLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyQXR0YWNrUmVsZWFzZSBpcyBzaG9ydGhhbmQgZm9yIHRyaWdnZXJBdHRhY2ssIHRoZW4gd2FpdGluZ1xuXHRcdCAqICBzb21lIGR1cmF0aW9uLCB0aGVuIHRyaWdnZXJSZWxlYXNlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGR1cmF0aW9uIFRoZSBkdXJhdGlvbiBvZiB0aGUgc3VzdGFpbi5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHRoZW4gdGhlIHJlbGVhc2UgYWZ0ZXIgMC42IHNlY29uZHMuXG5cdFx0ICogZW52LnRyaWdnZXJBdHRhY2tSZWxlYXNlKDAuNik7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbikpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWxzIGFsbCBzY2hlZHVsZWQgZW52ZWxvcGUgY2hhbmdlcyBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gYWZ0ZXJcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIHRoaXMuX3NpZy5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoYWZ0ZXIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBCb3Jyb3dzIHRoZSBjb25uZWN0IG1ldGhvZCBmcm9tIFRvbmUuU2lnbmFsLlxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmNvbm5lY3QgPSBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3Q7XG5cdCAgICAvKipcblx0IFx0ICogIEdlbmVyYXRlIHNvbWUgY29tcGxleCBlbnZlbG9wZSBjdXJ2ZXMuXG5cdCBcdCAqL1xuXHQgICAgKGZ1bmN0aW9uIF9jcmVhdGVDdXJ2ZXMoKSB7XG5cdCAgICAgICAgdmFyIGN1cnZlTGVuID0gMTI4O1xuXHQgICAgICAgIHZhciBpLCBrO1xuXHQgICAgICAgIC8vY29zaW5lIGN1cnZlXG5cdCAgICAgICAgdmFyIGNvc2luZUN1cnZlID0gW107XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgY29zaW5lQ3VydmVbaV0gPSBNYXRoLnNpbihpIC8gKGN1cnZlTGVuIC0gMSkgKiAoTWF0aC5QSSAvIDIpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yaXBwbGUgY3VydmVcblx0ICAgICAgICB2YXIgcmlwcGxlQ3VydmUgPSBbXTtcblx0ICAgICAgICB2YXIgcmlwcGxlQ3VydmVGcmVxID0gNi40O1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbiAtIDE7IGkrKykge1xuXHQgICAgICAgICAgICBrID0gaSAvIChjdXJ2ZUxlbiAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgc2luZVdhdmUgPSBNYXRoLnNpbihrICogKE1hdGguUEkgKiAyKSAqIHJpcHBsZUN1cnZlRnJlcSAtIE1hdGguUEkgLyAyKSArIDE7XG5cdCAgICAgICAgICAgIHJpcHBsZUN1cnZlW2ldID0gc2luZVdhdmUgLyAxMCArIGsgKiAwLjgzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByaXBwbGVDdXJ2ZVtjdXJ2ZUxlbiAtIDFdID0gMTtcblx0ICAgICAgICAvL3N0YWlycyBjdXJ2ZVxuXHQgICAgICAgIHZhciBzdGFpcnNDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIHZhciBzdGVwcyA9IDU7XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgc3RhaXJzQ3VydmVbaV0gPSBNYXRoLmNlaWwoaSAvIChjdXJ2ZUxlbiAtIDEpICogc3RlcHMpIC8gc3RlcHM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaW4tb3V0IGVhc2luZyBjdXJ2ZVxuXHQgICAgICAgIHZhciBzaW5lQ3VydmUgPSBbXTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBrID0gaSAvIChjdXJ2ZUxlbiAtIDEpO1xuXHQgICAgICAgICAgICBzaW5lQ3VydmVbaV0gPSAwLjUgKiAoMSAtIE1hdGguY29zKE1hdGguUEkgKiBrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYSBib3VuY2UgY3VydmVcblx0ICAgICAgICB2YXIgYm91bmNlQ3VydmUgPSBbXTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBrID0gaSAvIChjdXJ2ZUxlbiAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgZnJlcSA9IE1hdGgucG93KGssIDMpICogNCArIDAuMjtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IE1hdGguY29zKGZyZXEgKiBNYXRoLlBJICogMiAqIGspO1xuXHQgICAgICAgICAgICBib3VuY2VDdXJ2ZVtpXSA9IE1hdGguYWJzKHZhbCAqICgxIC0gaykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJbnZlcnQgYSB2YWx1ZSBjdXJ2ZSB0byBtYWtlIGl0IHdvcmsgZm9yIHRoZSByZWxlYXNlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIGZ1bmN0aW9uIGludmVydEN1cnZlKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIHZhciBvdXQgPSBuZXcgQXJyYXkoY3VydmUubGVuZ3RoKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjdXJ2ZS5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgb3V0W2pdID0gMSAtIGN1cnZlW2pdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBvdXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJldmVyc2UgdGhlIGN1cnZlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIGZ1bmN0aW9uIHJldmVyc2VDdXJ2ZShjdXJ2ZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gY3VydmUuc2xpY2UoMCkucmV2ZXJzZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhdHRhY2sgYW5kIHJlbGVhc2UgY3VydmUgYXJyYXlzXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUuVHlwZSA9IHtcblx0ICAgICAgICAgICAgJ2xpbmVhcic6ICdsaW5lYXInLFxuXHQgICAgICAgICAgICAnZXhwb25lbnRpYWwnOiAnZXhwb25lbnRpYWwnLFxuXHQgICAgICAgICAgICAnYm91bmNlJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IGludmVydEN1cnZlKGJvdW5jZUN1cnZlKSxcblx0ICAgICAgICAgICAgICAgIE91dDogYm91bmNlQ3VydmVcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2Nvc2luZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBjb3NpbmVDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogcmV2ZXJzZUN1cnZlKGNvc2luZUN1cnZlKVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnc3RlcCc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBzdGFpcnNDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogaW52ZXJ0Q3VydmUoc3RhaXJzQ3VydmUpXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdyaXBwbGUnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogcmlwcGxlQ3VydmUsXG5cdCAgICAgICAgICAgICAgICBPdXQ6IGludmVydEN1cnZlKHJpcHBsZUN1cnZlKVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnc2luZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBzaW5lQ3VydmUsXG5cdCAgICAgICAgICAgICAgICBPdXQ6IGludmVydEN1cnZlKHNpbmVDdXJ2ZSlcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH07XG5cdCAgICB9KCkpO1xuXHQgICAgLyoqXG5cdFx0ICogIERpc2Nvbm5lY3QgYW5kIGRpc3Bvc2UuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2lnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaWcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgaXMgYSBUb25lLkVudmVsb3BlIGNvbm5lY3RlZCB0byBhIGdhaW4gbm9kZS5cblx0XHQgKiAgICAgICAgICBVbmxpa2UgVG9uZS5FbnZlbG9wZSwgd2hpY2ggb3V0cHV0cyB0aGUgZW52ZWxvcGUncyB2YWx1ZSwgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSBhY2NlcHRzXG5cdFx0ICogICAgICAgICAgYW4gYXVkaW8gc2lnbmFsIGFzIHRoZSBpbnB1dCBhbmQgd2lsbCBhcHBseSB0aGUgZW52ZWxvcGUgdG8gdGhlIGFtcGxpdHVkZVxuXHRcdCAqICAgICAgICAgIG9mIHRoZSBzaWduYWwuIFJlYWQgbW9yZSBhYm91dCBBRFNSIEVudmVsb3BlcyBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW50aGVzaXplciNBRFNSX2VudmVsb3BlKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW52ZWxvcGV9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdIFRoZSBhbW91bnQgb2YgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlIHRvIGdvIGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIHRvIGl0J3MgbWF4aW11bSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHRUaGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgdGhlIGF0dGFjayB0aGF0IGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgXHR0byBmYWxsIHRvIHRoZSBzdXN0YWluIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc3VzdGFpbl1cdFRoZSBwZXJjZW50IG9mIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgdGhlIGVudmVsb3BlIHJlc3RzIGF0IHVudGlsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0dGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0VGhlIGFtb3VudCBvZiB0aW1lIGFmdGVyIHRoZSByZWxlYXNlIGlzIHRyaWdnZXJlZCBpdCB0YWtlcyB0byByZWFjaCAwLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBhbXBFbnYgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSh7XG5cdFx0ICogXHRcImF0dGFja1wiOiAwLjEsXG5cdFx0ICogXHRcImRlY2F5XCI6IDAuMixcblx0XHQgKiBcdFwic3VzdGFpblwiOiAxLjAsXG5cdFx0ICogXHRcInJlbGVhc2VcIjogMC44XG5cdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL2NyZWF0ZSBhbiBvc2NpbGxhdG9yIGFuZCBjb25uZWN0IGl0XG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KGFtcEVudikuc3RhcnQoKTtcblx0XHQgKiAvL3RyaWdnZXIgdGhlIGVudmVsb3BlcyBhdHRhY2sgYW5kIHJlbGVhc2UgXCI4dFwiIGFwYXJ0XG5cdFx0ICogYW1wRW52LnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiOHRcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkFtcGxpdHVkZUVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXQgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIHRoaXMuX3NpZy5jb25uZWN0KHRoaXMub3V0cHV0LmdhaW4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUsIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBBbmFseXNlck5vZGUuZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSBwb2x5ZmlsbFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCFBbmFseXNlck5vZGUucHJvdG90eXBlLmdldEZsb2F0VGltZURvbWFpbkRhdGEpIHtcblx0ICAgICAgICAgICAgLy9yZWZlcmVuY2VkIGh0dHBzOi8vZ2l0aHViLmNvbS9tb2hheW9uYW8vZ2V0LWZsb2F0LXRpbWUtZG9tYWluLWRhdGFcblx0ICAgICAgICAgICAgQW5hbHlzZXJOb2RlLnByb3RvdHlwZS5nZXRGbG9hdFRpbWVEb21haW5EYXRhID0gZnVuY3Rpb24gKGFycmF5KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdWludDggPSBuZXcgVWludDhBcnJheShhcnJheS5sZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5nZXRCeXRlVGltZURvbWFpbkRhdGEodWludDgpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1aW50OC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGFycmF5W2ldID0gKHVpbnQ4W2ldIC0gMTI4KSAvIDEyODtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBXZWIgQXVkaW8nc1xuXHRcdCAqICAgICAgICAgIFtBbmFseXNlck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jaWRsLWRlZi1BbmFseXNlck5vZGUpLlxuXHRcdCAqICAgICAgICAgIEV4dHJhY3RzIEZGVCBvciBXYXZlZm9ybSBkYXRhIGZyb20gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge1N0cmluZz19IHR5cGUgVGhlIHJldHVybiB0eXBlIG9mIHRoZSBhbmFseXNpcywgZWl0aGVyIFwiZmZ0XCIsIG9yIFwid2F2ZWZvcm1cIi5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBzaXplIFRoZSBzaXplIG9mIHRoZSBGRlQuIFZhbHVlIG11c3QgYmUgYSBwb3dlciBvZlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ3NpemUnXG5cdCAgICAgICAgXSwgVG9uZS5BbmFseXNlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtBbmFseXNlck5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVBbmFseXNlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNpcyB0eXBlXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYnVmZmVyIHRoYXQgdGhlIEZGVCBkYXRhIGlzIHdyaXR0ZW4gdG9cblx0XHRcdCAqICBAdHlwZSB7VHlwZWRBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICAvL3NldCB0aGUgdmFsdWVzIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuc2l6ZSA9IG9wdGlvbnMuc2l6ZTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BbmFseXNlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdzaXplJzogMTAyNCxcblx0ICAgICAgICAndHlwZSc6ICdmZnQnLFxuXHQgICAgICAgICdzbW9vdGhpbmcnOiAwLjhcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUG9zc2libGUgcmV0dXJuIHR5cGVzIG9mIGFuYWx5c2VyLmdldFZhbHVlKClcblx0XHQgKiAgQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIuVHlwZSA9IHtcblx0ICAgICAgICBXYXZlZm9ybTogJ3dhdmVmb3JtJyxcblx0ICAgICAgICBGRlQ6ICdmZnQnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJ1biB0aGUgYW5hbHlzaXMgZ2l2ZW4gdGhlIGN1cnJlbnQgc2V0dGluZ3MgYW5kIHJldHVybiB0aGVcblx0XHQgKiAgcmVzdWx0IGFzIGEgVHlwZWRBcnJheS5cblx0XHQgKiAgQHJldHVybnMge1R5cGVkQXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5BbmFseXNlci5UeXBlLkZGVCkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5nZXRGbG9hdEZyZXF1ZW5jeURhdGEodGhpcy5fYnVmZmVyKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQW5hbHlzZXIuVHlwZS5XYXZlZm9ybSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5nZXRGbG9hdFRpbWVEb21haW5EYXRhKHRoaXMuX2J1ZmZlcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzaXplIG9mIGFuYWx5c2lzLiBUaGlzIG11c3QgYmUgYSBwb3dlciBvZiB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5BbmFseXNlciNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLCAnc2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5mZnRTaXplID0gc2l6ZSAqIDI7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFuYWx5c2lzIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGFuYWx5c2VyLmdldFZhbHVlKCksIGVpdGhlciBcImZmdFwiIG9yIFwid2F2ZWZvcm1cIi5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQW5hbHlzZXIjXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFuYWx5c2VyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodHlwZSAhPT0gVG9uZS5BbmFseXNlci5UeXBlLldhdmVmb3JtICYmIHR5cGUgIT09IFRvbmUuQW5hbHlzZXIuVHlwZS5GRlQpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RvbmUuQW5hbHlzZXI6IGludmFsaWQgdHlwZTogJyArIHR5cGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIDAgcmVwcmVzZW50cyBubyB0aW1lIGF2ZXJhZ2luZyB3aXRoIHRoZSBsYXN0IGFuYWx5c2lzIGZyYW1lLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5BbmFseXNlciNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBzbW9vdGhpbmdcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFuYWx5c2VyLnByb3RvdHlwZSwgJ3Ntb290aGluZycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zbW9vdGhpbmdUaW1lQ29uc3RhbnQgPSB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkFuYWx5c2VyfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BbmFseXNlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ29tcHJlc3NvciBpcyBhIHRoaW4gd3JhcHBlciBhcm91bmQgdGhlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgW0R5bmFtaWNzQ29tcHJlc3Nvck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWR5bmFtaWNzY29tcHJlc3Nvcm5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKiAgICAgICAgIENvbXByZXNzaW9uIHJlZHVjZXMgdGhlIHZvbHVtZSBvZiBsb3VkIHNvdW5kcyBvciBhbXBsaWZpZXMgcXVpZXQgc291bmRzXG5cdFx0ICogICAgICAgICBieSBuYXJyb3dpbmcgb3IgXCJjb21wcmVzc2luZ1wiIGFuIGF1ZGlvIHNpZ25hbCdzIGR5bmFtaWMgcmFuZ2UuXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRHluYW1pY19yYW5nZV9jb21wcmVzc2lvbikuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc3xPYmplY3R9IFt0aHJlc2hvbGRdIFRoZSB2YWx1ZSBhYm92ZSB3aGljaCB0aGUgY29tcHJlc3Npb24gc3RhcnRzIHRvIGJlIGFwcGxpZWQuXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IFtyYXRpb10gVGhlIGdhaW4gcmVkdWN0aW9uIHJhdGlvLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjb21wID0gbmV3IFRvbmUuQ29tcHJlc3NvcigtMzAsIDMpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db21wcmVzc29yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCcsXG5cdCAgICAgICAgICAgICdyYXRpbydcblx0ICAgICAgICBdLCBUb25lLkNvbXByZXNzb3IpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbXByZXNzb3Igbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEeW5hbWljc0NvbXByZXNzb3JOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0aHJlc2hvbGQgdmF1ZVxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fY29tcHJlc3Nvci50aHJlc2hvbGQsXG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWNpYmVscyxcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBmYWxzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhdHRhY2sgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9jb21wcmVzc29yLmF0dGFjaywgVG9uZS5UeXBlLlRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByZWxlYXNlIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX2NvbXByZXNzb3IucmVsZWFzZSwgVG9uZS5UeXBlLlRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBrbmVlIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmtuZWUgPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2NvbXByZXNzb3Iua25lZSxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlY2liZWxzLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJhdGlvIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJhdGlvID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9jb21wcmVzc29yLnJhdGlvLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAna25lZScsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJyxcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyYXRpbycsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5zZXQob3B0aW9ucyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Db21wcmVzc29yLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncmF0aW8nOiAxMixcblx0ICAgICAgICAndGhyZXNob2xkJzogLTI0LFxuXHQgICAgICAgICdyZWxlYXNlJzogMC4yNSxcblx0ICAgICAgICAnYXR0YWNrJzogMC4wMDMsXG5cdCAgICAgICAgJ2tuZWUnOiAzMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Db21wcmVzc29yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbXByZXNzb3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdrbmVlJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnLFxuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JhdGlvJyxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmF0dGFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVsZWFzZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnRocmVzaG9sZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy50aHJlc2hvbGQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmF0aW8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmF0aW8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMua25lZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5rbmVlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Db21wcmVzc29yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQWRkIGEgc2lnbmFsIGFuZCBhIG51bWJlciBvciB0d28gc2lnbmFscy4gV2hlbiBubyB2YWx1ZSBpc1xuXHRcdCAqICAgICAgICAgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLCBUb25lLkFkZCB3aWxsIHN1bSA8Y29kZT5pbnB1dFswXTwvY29kZT5cblx0XHQgKiAgICAgICAgIGFuZCA8Y29kZT5pbnB1dFsxXTwvY29kZT4uIElmIGEgdmFsdWUgaXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLCBcblx0XHQgKiAgICAgICAgIHRoZSBpdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBpbnB1dC5cblx0XHQgKiAgXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWUgSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIFRvbmUuQWRkIHdpbGwgc3VtIHRoZSBmaXJzdFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWNvbmQgaW5wdXRzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDIpO1xuXHRcdCAqIHZhciBhZGQgPSBuZXcgVG9uZS5BZGQoMik7XG5cdFx0ICogc2lnbmFsLmNvbm5lY3QoYWRkKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgYWRkIGVxdWFscyA0XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pZiBjb25zdHJ1Y3RlZCB3aXRoIG5vIGFyZ3VtZW50c1xuXHRcdCAqIC8vaXQgd2lsbCBhZGQgdGhlIGZpcnN0IGFuZCBzZWNvbmQgaW5wdXRzXG5cdFx0ICogdmFyIGFkZCA9IG5ldyBUb25lLkFkZCgpO1xuXHRcdCAqIHZhciBzaWcwID0gbmV3IFRvbmUuU2lnbmFsKDMpLmNvbm5lY3QoYWRkLCAwLCAwKTtcblx0XHQgKiB2YXIgc2lnMSA9IG5ldyBUb25lLlNpZ25hbCg0KS5jb25uZWN0KGFkZCwgMCwgMSk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGFkZCBlcXVhbHMgNy4gXG5cdFx0ICovXG5cdCAgICBUb25lLkFkZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzdW1taW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IHRoaXMuaW5wdXRbMF0gPSB0aGlzLmlucHV0WzFdID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5TaWduYWwodmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNvbm5lY3QodGhpcy5fc3VtKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFkZCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BZGR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQWRkLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3VtLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdW0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFkZDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBNdWx0aXBseSB0d28gaW5jb21pbmcgc2lnbmFscy4gT3IsIGlmIGEgbnVtYmVyIGlzIGdpdmVuIGluIHRoZSBjb25zdHJ1Y3Rvcixcblx0XHQgKiAgICAgICAgICBtdWx0aXBsaWVzIHRoZSBpbmNvbWluZyBzaWduYWwgYnkgdGhhdCB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlIENvbnN0YW50IHZhbHVlIHRvIG11bHRpcGxlLiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIHJldHVybiB0aGUgcHJvZHVjdCBvZiB0aGUgZmlyc3QgYW5kIHNlY29uZCBpbnB1dHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KCk7XG5cdFx0ICogdmFyIHNpZ0EgPSBuZXcgVG9uZS5TaWduYWwoMyk7XG5cdFx0ICogdmFyIHNpZ0IgPSBuZXcgVG9uZS5TaWduYWwoNCk7XG5cdFx0ICogc2lnQS5jb25uZWN0KG11bHQsIDAsIDApO1xuXHRcdCAqIHNpZ0IuY29ubmVjdChtdWx0LCAwLCAxKTtcblx0XHQgKiAvL291dHB1dCBvZiBtdWx0IGlzIDEyLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMTApO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMikuY29ubmVjdChtdWx0KTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgbXVsdCBpcyAyMC5cblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGlwbHkgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXQgbm9kZSBpcyB0aGUgc2FtZSBhcyB0aGUgb3V0cHV0IG5vZGVcblx0XHRcdCAqICBpdCBpcyBhbHNvIHRoZSBHYWluTm9kZSB3aGljaCBoYW5kbGVzIHRoZSBzY2FsaW5nIG9mIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICpcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHQgPSB0aGlzLmlucHV0WzBdID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHNjYWxpbmcgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvUGFyYW19XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFsxXSA9IHRoaXMub3V0cHV0LmdhaW47XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyh2YWx1ZSwgMCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NdWx0aXBseSwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk11bHRpcGx5fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpcGx5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbXVsdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk11bHRpcGx5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTmVnYXRlIHRoZSBpbmNvbWluZyBzaWduYWwuIGkuZS4gYW4gaW5wdXQgc2lnbmFsIG9mIDEwIHdpbGwgb3V0cHV0IC0xMFxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBuZWcgPSBuZXcgVG9uZS5OZWdhdGUoKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKC0yKS5jb25uZWN0KG5lZyk7XG5cdFx0ICogLy9vdXRwdXQgb2YgbmVnIGlzIHBvc2l0aXZlIDIuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5OZWdhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbmVnYXRpb24gaXMgZG9uZSBieSBtdWx0aXBseWluZyBieSAtMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk11bHRpcGx5KC0xKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5lZ2F0ZSwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5OZWdhdGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTmVnYXRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTmVnYXRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU3VidHJhY3QgdGhlIHNpZ25hbCBjb25uZWN0ZWQgdG8gPGNvZGU+aW5wdXRbMV08L2NvZGU+IGZyb20gdGhlIHNpZ25hbCBjb25uZWN0ZWQgXG5cdFx0ICogICAgICAgICB0byA8Y29kZT5pbnB1dFswXTwvY29kZT4uIElmIGFuIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3RvciwgdGhlIFxuXHRcdCAqICAgICAgICAgc2lnbmFscyA8Y29kZT4udmFsdWU8L2NvZGU+IHdpbGwgYmUgc3VidHJhY3RlZCBmcm9tIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3VidHJhY3QgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsLiBJZiB0aGUgdmFsdWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBpcyBvbWl0dGVkLCBpdCB3aWxsIHN1YnRyYWN0IHRoZSBzZWNvbmQgc2lnbmFsIGZyb20gdGhlIGZpcnN0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzdWIgPSBuZXcgVG9uZS5TdWJ0cmFjdCgxKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDQpLmNvbm5lY3Qoc3ViKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2Ygc3ViIGlzIDMuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzdWIgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHRcdCAqIHZhciBzaWdBID0gbmV3IFRvbmUuU2lnbmFsKDEwKTtcblx0XHQgKiB2YXIgc2lnQiA9IG5ldyBUb25lLlNpZ25hbCgyLjUpO1xuXHRcdCAqIHNpZ0EuY29ubmVjdChzdWIsIDAsIDApO1xuXHRcdCAqIHNpZ0IuY29ubmVjdChzdWIsIDAsIDEpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIHN1YiBpcyA3LjVcblx0XHQgKi9cblx0ICAgIFRvbmUuU3VidHJhY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc3VtbWluZyBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdW0gPSB0aGlzLmlucHV0WzBdID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbmVnYXRlIHRoZSBpbnB1dCBvZiB0aGUgc2Vjb25kIGlucHV0IGJlZm9yZSBjb25uZWN0aW5nIGl0XG5cdFx0XHQgKiAgdG8gdGhlIHN1bW1pbmcgbm9kZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5OZWdhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25lZyA9IG5ldyBUb25lLk5lZ2F0ZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSB2YWx1ZSBpcyBzZXRcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLlNpZ25hbCh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uY2hhaW4odGhpcy5fbmVnLCB0aGlzLl9zdW0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3VidHJhY3QsIFRvbmUuU2lnbmFsKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsQmFzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdWJ0cmFjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX25lZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbmVnID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdW0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3VidHJhY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBDb252ZXJ0IGFuIGluY29taW5nIHNpZ25hbCBiZXR3ZWVuIDAsIDEgdG8gYW4gZXF1YWwgcG93ZXIgZ2FpbiBzY2FsZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZXFQb3dHYWluID0gbmV3IFRvbmUuRXF1YWxQb3dlckdhaW4oKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRXF1YWxQb3dlckdhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXFQb3dlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnModmFsKSA8IDAuMDAxKSB7XG5cdCAgICAgICAgICAgICAgICAvL3Nob3VsZCBvdXRwdXQgMCB3aGVuIGlucHV0IGlzIDBcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZXF1YWxQb3dlclNjYWxlKHZhbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyksIDQwOTYpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRXF1YWxQb3dlckdhaW4sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRXF1YWxQb3dlckdhaW59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXF1YWxQb3dlckdhaW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZXFQb3dlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXFQb3dlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRXF1YWxQb3dlckdhaW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzICBUb25lLkNyb3NzZmFkZSBwcm92aWRlcyBlcXVhbCBwb3dlciBmYWRpbmcgYmV0d2VlbiB0d28gaW5wdXRzLlxuXHRcdCAqICAgICAgICAgTW9yZSBvbiBjcm9zc2ZhZGluZyB0ZWNobmlxdWUgW2hlcmVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZhZGVfKGF1ZGlvX2VuZ2luZWVyaW5nKSNDcm9zc2ZhZGluZykuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogQHBhcmFtIHtOb3JtYWxSYW5nZX0gW2luaXRpYWxGYWRlPTAuNV1cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBjcm9zc0ZhZGUgPSBuZXcgVG9uZS5Dcm9zc0ZhZGUoMC41KTtcblx0XHQgKiAvL2Nvbm5lY3QgZWZmZWN0IEEgdG8gY3Jvc3NmYWRlIGZyb21cblx0XHQgKiAvL2VmZmVjdCBvdXRwdXQgMCB0byBjcm9zc2ZhZGUgaW5wdXQgMFxuXHRcdCAqIGVmZmVjdEEuY29ubmVjdChjcm9zc0ZhZGUsIDAsIDApO1xuXHRcdCAqIC8vY29ubmVjdCBlZmZlY3QgQiB0byBjcm9zc2ZhZGUgZnJvbVxuXHRcdCAqIC8vZWZmZWN0IG91dHB1dCAwIHRvIGNyb3NzZmFkZSBpbnB1dCAxXG5cdFx0ICogZWZmZWN0Qi5jb25uZWN0KGNyb3NzRmFkZSwgMCwgMSk7XG5cdFx0ICogY3Jvc3NGYWRlLmZhZGUudmFsdWUgPSAwO1xuXHRcdCAqIC8vIF4gb25seSBlZmZlY3RBIGlzIG91dHB1dFxuXHRcdCAqIGNyb3NzRmFkZS5mYWRlLnZhbHVlID0gMTtcblx0XHQgKiAvLyBeIG9ubHkgZWZmZWN0QiBpcyBvdXRwdXRcblx0XHQgKiBjcm9zc0ZhZGUuZmFkZS52YWx1ZSA9IDAuNTtcblx0XHQgKiAvLyBeIHRoZSB0d28gc2lnbmFscyBhcmUgbWl4ZWQgZXF1YWxseS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3Jvc3NGYWRlID0gZnVuY3Rpb24gKGluaXRpYWxGYWRlKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzBdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hID0gdGhpcy5pbnB1dFswXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+aW5wdXRbMV08L2NvZGU+LlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmIgPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogXHRUaGUgbWl4IGJldHdlZW4gdGhlIHR3byBpbnB1dHMuIEEgZmFkZSB2YWx1ZSBvZiAwXG5cdFx0XHQgKiBcdHdpbGwgb3V0cHV0IDEwMCUgPGNvZGU+aW5wdXRbMF08L2NvZGU+IGFuZFxuXHRcdFx0ICogXHRhIHZhbHVlIG9mIDEgd2lsbCBvdXRwdXQgMTAwJSA8Y29kZT5pbnB1dFsxXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZSA9IG5ldyBUb25lLlNpZ25hbChUb25lLmRlZmF1bHRBcmcoaW5pdGlhbEZhZGUsIDAuNSksIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZXF1YWwgcG93ZXIgZ2FpbiBjcm9zcyBmYWRlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5FcXVhbFBvd2VyR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJBID0gbmV3IFRvbmUuRXF1YWxQb3dlckdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBlcXVhbCBwb3dlciBnYWluIGNyb3NzIGZhZGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkVxdWFsUG93ZXJHYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckIgPSBuZXcgVG9uZS5FcXVhbFBvd2VyR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGludmVydCB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uZSA9IHRoaXMuY29udGV4dC5nZXRDb25zdGFudCgxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpbnZlcnQgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnZlcnQgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmEuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5iLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuZmFkZS5jaGFpbih0aGlzLl9lcXVhbFBvd2VyQiwgdGhpcy5iLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX29uZS5jb25uZWN0KHRoaXMuX2ludmVydCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5mYWRlLmNvbm5lY3QodGhpcy5faW52ZXJ0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9pbnZlcnQuY2hhaW4odGhpcy5fZXF1YWxQb3dlckEsIHRoaXMuYS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZmFkZScpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3Jvc3NGYWRlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ3Jvc3NGYWRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNyb3NzRmFkZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmYWRlJyk7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJBID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmFkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mYWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9pbnZlcnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ludmVydCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb25lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5iLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNyb3NzRmFkZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkZpbHRlciBpcyBhIGZpbHRlciB3aGljaCBhbGxvd3MgZm9yIGFsbCBvZiB0aGUgc2FtZSBuYXRpdmUgbWV0aG9kc1xuXHRcdCAqICAgICAgICAgIGFzIHRoZSBbQmlxdWFkRmlsdGVyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtYmlxdWFkZmlsdGVybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICAgICAgICAgIFRvbmUuRmlsdGVyIGhhcyB0aGUgYWRkZWQgYWJpbGl0eSB0byBzZXQgdGhlIGZpbHRlciByb2xsb2ZmIGF0IC0xMlxuXHRcdCAqICAgICAgICAgIChkZWZhdWx0KSwgLTI0IGFuZCAtNDguXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVyLlxuXHRcdCAqICBAcGFyYW0ge3N0cmluZz19IHR5cGUgVGhlIHR5cGUgb2YgZmlsdGVyLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHJvbGxvZmYgVGhlIGRyb3AgaW4gZGVjaWJlbHMgcGVyIG9jdGF2ZSBhZnRlciB0aGUgY3V0b2ZmIGZyZXF1ZW5jeS5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIGNob2ljZXM6IC0xMiwgLTI0LCBhbmQgLTQ4XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBmaWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIoMjAwLCBcImhpZ2hwYXNzXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAncm9sbG9mZidcblx0ICAgICAgICBdLCBUb25lLkZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZpbHRlcihzKVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwoMCwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBvZiB0aGUgZmlsdGVyLCBvbmx5IHVzZWQgaW4gY2VydGFpbiBmaWx0ZXIgdHlwZXNcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG5ldyBUb25lLlNpZ25hbCh7XG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZ2Fpbixcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBmYWxzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBRIG9yIFF1YWxpdHkgb2YgdGhlIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5RKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdHlwZSBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge3N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcm9sbG9mZiB2YWx1ZSBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcm9sbG9mZiA9IG9wdGlvbnMucm9sbG9mZjtcblx0ICAgICAgICAvL3NldCB0aGUgcm9sbG9mZjtcblx0ICAgICAgICB0aGlzLnJvbGxvZmYgPSBvcHRpb25zLnJvbGxvZmY7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GaWx0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICpcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GaWx0ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnbG93cGFzcycsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDM1MCxcblx0ICAgICAgICAncm9sbG9mZic6IC0xMixcblx0ICAgICAgICAnUSc6IDEsXG5cdCAgICAgICAgJ2dhaW4nOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGZpbHRlci4gVHlwZXM6IFwibG93cGFzc1wiLCBcImhpZ2hwYXNzXCIsXG5cdFx0ICogXCJiYW5kcGFzc1wiLCBcImxvd3NoZWxmXCIsIFwiaGlnaHNoZWxmXCIsIFwibm90Y2hcIiwgXCJhbGxwYXNzXCIsIG9yIFwicGVha2luZ1wiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZpbHRlciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZpbHRlci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdmFyIHR5cGVzID0gW1xuXHQgICAgICAgICAgICAgICAgJ2xvd3Bhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ2hpZ2hwYXNzJyxcblx0ICAgICAgICAgICAgICAgICdiYW5kcGFzcycsXG5cdCAgICAgICAgICAgICAgICAnbG93c2hlbGYnLFxuXHQgICAgICAgICAgICAgICAgJ2hpZ2hzaGVsZicsXG5cdCAgICAgICAgICAgICAgICAnbm90Y2gnLFxuXHQgICAgICAgICAgICAgICAgJ2FsbHBhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ3BlYWtpbmcnXG5cdCAgICAgICAgICAgIF07XG5cdCAgICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5GaWx0ZXI6IGludmFsaWQgdHlwZSAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXS50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJvbGxvZmYgb2YgdGhlIGZpbHRlciB3aGljaCBpcyB0aGUgZHJvcCBpbiBkYlxuXHRcdCAqIHBlciBvY3RhdmUuIEltcGxlbWVudGVkIGludGVybmFsbHkgYnkgY2FzY2FkaW5nIGZpbHRlcnMuXG5cdFx0ICogT25seSBhY2NlcHRzIHRoZSB2YWx1ZXMgLTEyLCAtMjQsIC00OCBhbmQgLTk2LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZpbHRlciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHJvbGxvZmZcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZpbHRlci5wcm90b3R5cGUsICdyb2xsb2ZmJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9sbG9mZjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJvbGxvZmYpIHtcblx0ICAgICAgICAgICAgcm9sbG9mZiA9IHBhcnNlSW50KHJvbGxvZmYsIDEwKTtcblx0ICAgICAgICAgICAgdmFyIHBvc3NpYmlsaXRpZXMgPSBbXG5cdCAgICAgICAgICAgICAgICAtMTIsXG5cdCAgICAgICAgICAgICAgICAtMjQsXG5cdCAgICAgICAgICAgICAgICAtNDgsXG5cdCAgICAgICAgICAgICAgICAtOTZcblx0ICAgICAgICAgICAgXTtcblx0ICAgICAgICAgICAgdmFyIGNhc2NhZGluZ0NvdW50ID0gcG9zc2liaWxpdGllcy5pbmRleE9mKHJvbGxvZmYpO1xuXHQgICAgICAgICAgICAvL2NoZWNrIHRoZSByb2xsb2ZmIGlzIHZhbGlkXG5cdCAgICAgICAgICAgIGlmIChjYXNjYWRpbmdDb3VudCA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUb25lLkZpbHRlcjogcm9sbG9mZiBjYW4gb25seSBiZSAtMTIsIC0yNCwgLTQ4IG9yIC05NicpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNhc2NhZGluZ0NvdW50ICs9IDE7XG5cdCAgICAgICAgICAgIHRoaXMuX3JvbGxvZmYgPSByb2xsb2ZmO1xuXHQgICAgICAgICAgICAvL2ZpcnN0IGRpc2Nvbm5lY3QgdGhlIGZpbHRlcnMgYW5kIHRocm93IHRoZW0gYXdheVxuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0gPSBudWxsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnMgPSBuZXcgQXJyYXkoY2FzY2FkaW5nQ291bnQpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjb3VudCA9IDA7IGNvdW50IDwgY2FzY2FkaW5nQ291bnQ7IGNvdW50KyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBmaWx0ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgICAgICBmaWx0ZXIudHlwZSA9IHRoaXMuX3R5cGU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KGZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdChmaWx0ZXIuZGV0dW5lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuUS5jb25uZWN0KGZpbHRlci5RKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZ2Fpbi5jb25uZWN0KGZpbHRlci5nYWluKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbY291bnRdID0gZmlsdGVyO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vY29ubmVjdCB0aGVtIHVwXG5cdCAgICAgICAgICAgIHZhciBjb25uZWN0aW9uQ2hhaW4gPSBbdGhpcy5pbnB1dF0uY29uY2F0KHRoaXMuX2ZpbHRlcnMpLmNvbmNhdChbdGhpcy5vdXRwdXRdKTtcblx0ICAgICAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIGNvbm5lY3Rpb25DaGFpbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLlEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5nYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmdhaW4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWwgaW50byB0aHJlZSBiYW5kcyAobG93LCBtaWQsIGhpZ2gpXG5cdFx0ICogICAgICAgICB3aXRoIHR3byBjcm9zc292ZXIgZnJlcXVlbmN5IGNvbnRyb2xzLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2xvd0ZyZXF1ZW5jeV0gdGhlIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2hpZ2hGcmVxdWVuY3ldIHRoZSBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZFNwbGl0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5J1xuXHQgICAgICAgIF0sIFRvbmUuTXVsdGliYW5kU3BsaXQpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGlucHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3V0cHV0c1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgQXJyYXkoMyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvdyBiYW5kLiBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93ID0gdGhpcy5vdXRwdXRbMF0gPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2xvd3Bhc3MnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbG93ZXIgZmlsdGVyIG9mIHRoZSBtaWQgYmFuZFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG93TWlkRmlsdGVyID0gbmV3IFRvbmUuRmlsdGVyKDAsICdoaWdocGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgYmFuZCBvdXRwdXQuIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMV08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLm91dHB1dFsxXSA9IG5ldyBUb25lLkZpbHRlcigwLCAnbG93cGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBoaWdoIGJhbmQgb3V0cHV0LiBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzJdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IHRoaXMub3V0cHV0WzJdID0gbmV3IFRvbmUuRmlsdGVyKDAsICdoaWdocGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmxvd0ZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5oaWdoRnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcXVhbGl0eSBvZiBhbGwgdGhlIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLlEpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZmFuKHRoaXMubG93LCB0aGlzLmhpZ2gpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4odGhpcy5fbG93TWlkRmlsdGVyLCB0aGlzLm1pZCk7XG5cdCAgICAgICAgLy90aGUgZnJlcXVlbmN5IGNvbnRyb2wgc2lnbmFsXG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kuY29ubmVjdCh0aGlzLmxvdy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fbG93TWlkRmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5LmNvbm5lY3QodGhpcy5taWQuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kuY29ubmVjdCh0aGlzLmhpZ2guZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3RoZSBRIHZhbHVlXG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5sb3cuUSk7XG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5fbG93TWlkRmlsdGVyLlEpO1xuXHQgICAgICAgIHRoaXMuUS5jb25uZWN0KHRoaXMubWlkLlEpO1xuXHQgICAgICAgIHRoaXMuUS5jb25uZWN0KHRoaXMuaGlnaC5RKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NdWx0aWJhbmRTcGxpdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kU3BsaXQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IDQwMCxcblx0ICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IDI1MDAsXG5cdCAgICAgICAgJ1EnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NdWx0aWJhbmRTcGxpdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRTcGxpdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmxvdy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sb3cgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xvd01pZEZpbHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbG93TWlkRmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oaWdoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTXVsdGliYW5kU3BsaXQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkVRMyBpcyBhIHRocmVlIGJhbmQgRVEgd2l0aCBjb250cm9sIG92ZXIgbG93LCBtaWQsIGFuZCBoaWdoIGdhaW4gYXNcblx0XHQgKiAgICAgICAgIHdlbGwgYXMgdGhlIGxvdyBhbmQgaGlnaCBjcm9zc292ZXIgZnJlcXVlbmNpZXMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfE9iamVjdH0gW2xvd0xldmVsXSBUaGUgZ2FpbiBhcHBsaWVkIHRvIHRoZSBsb3dzLlxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbbWlkTGV2ZWxdIFRoZSBnYWluIGFwcGxpZWQgdG8gdGhlIG1pZC5cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc30gW2hpZ2hMZXZlbF0gVGhlIGdhaW4gYXBwbGllZCB0byB0aGUgaGlnaC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZXEgPSBuZXcgVG9uZS5FUTMoLTEwLCAzLCAtMjApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FUTMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdoaWdoJ1xuXHQgICAgICAgIF0sIFRvbmUuRVEzKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvdXRwdXQgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG11bHRpYmFuZCBzcGxpdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpYmFuZFNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aWJhbmRTcGxpdCh7XG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knOiBvcHRpb25zLmxvd0ZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiBvcHRpb25zLmhpZ2hGcmVxdWVuY3lcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBmb3IgdGhlIGxvd2VyIHNpZ25hbHNcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG93R2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5sb3csIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gZm9yIHRoZSBtaWQgc2lnbmFsc1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLm1pZCwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBoaWdoIHBhcnRcblx0XHRcdCAqIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faGlnaEdhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMuaGlnaCwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBsb3cgcGFydFxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3cgPSB0aGlzLl9sb3dHYWluLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBpbiBkZWNpYmVscyBvZiB0aGUgbWlkIHBhcnRcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gdGhpcy5fbWlkR2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIGhpZ2ggcGFydFxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoID0gdGhpcy5faGlnaEdhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgUSB2YWx1ZSBmb3IgYWxsIG9mIHRoZSBmaWx0ZXJzLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSB0aGlzLl9tdWx0aWJhbmRTcGxpdC5RO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IHRoaXMuX211bHRpYmFuZFNwbGl0Lmxvd0ZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL2hpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IHRoaXMuX211bHRpYmFuZFNwbGl0LmhpZ2hGcmVxdWVuY3k7XG5cdCAgICAgICAgLy90aGUgZnJlcXVlbmN5IGJhbmRzXG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQubG93LmNoYWluKHRoaXMuX2xvd0dhaW4sIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdC5taWQuY2hhaW4odGhpcy5fbWlkR2FpbiwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0LmhpZ2guY2hhaW4odGhpcy5faGlnaEdhaW4sIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FUTMsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRVEzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdsb3cnOiAwLFxuXHQgICAgICAgICdtaWQnOiAwLFxuXHQgICAgICAgICdoaWdoJzogMCxcblx0ICAgICAgICAnbG93RnJlcXVlbmN5JzogNDAwLFxuXHQgICAgICAgICdoaWdoRnJlcXVlbmN5JzogMjUwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FUTN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRVEzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbG93R2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbG93R2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkR2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faGlnaEdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2hpZ2hHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvdyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FUTM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgUGVyZm9ybXMgYSBsaW5lYXIgc2NhbGluZyBvbiBhbiBpbnB1dCBzaWduYWwuXG5cdFx0ICogICAgICAgICAgU2NhbGVzIGEgTm9ybWFsUmFuZ2UgaW5wdXQgdG8gYmV0d2VlblxuXHRcdCAqICAgICAgICAgIG91dHB1dE1pbiBhbmQgb3V0cHV0TWF4LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1pbj0wXSBUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDAuIFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1heD0xXVx0VGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAxLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2NhbGUgPSBuZXcgVG9uZS5TY2FsZSg1MCwgMTAwKTtcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDAuNSkuY29ubmVjdChzY2FsZSk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIHNjYWxlIGVxdWFscyA3NVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZSA9IGZ1bmN0aW9uIChvdXRwdXRNaW4sIG91dHB1dE1heCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vdXRwdXRNaW4gPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TWluLCAwKTtcblx0ICAgICAgICAvKiogXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3V0cHV0TWF4ID0gVG9uZS5kZWZhdWx0QXJnKG91dHB1dE1heCwgMSk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpcGx5KDEpO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWRkID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5BZGQoMCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuY29ubmVjdCh0aGlzLl9hZGQpO1xuXHQgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TY2FsZSwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW4gXG5cdFx0ICogdGhlIHZhbHVlIGlucHV0IHZhbHVlIGlzIDAuIFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZS5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRNaW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0TWluID0gbWluO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlbiBcblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMS4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dE1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXRNYXggPSBtYXg7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgc2V0IHRoZSB2YWx1ZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGUucHJvdG90eXBlLl9zZXRSYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9hZGQudmFsdWUgPSB0aGlzLl9vdXRwdXRNaW47XG5cdCAgICAgICAgdGhpcy5fc2NhbGUudmFsdWUgPSB0aGlzLl9vdXRwdXRNYXggLSB0aGlzLl9vdXRwdXRNaW47XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TY2FsZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hZGQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FkZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TY2FsZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgUGVyZm9ybXMgYW4gZXhwb25lbnRpYWwgc2NhbGluZyBvbiBhbiBpbnB1dCBzaWduYWwuXG5cdFx0ICogICAgICAgICAgU2NhbGVzIGEgTm9ybWFsUmFuZ2UgdmFsdWUgWzAsMV0gZXhwb25lbnRpYWxseVxuXHRcdCAqICAgICAgICAgIHRvIHRoZSBvdXRwdXQgcmFuZ2Ugb2Ygb3V0cHV0TWluIHRvIG91dHB1dE1heC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXRNaW49MF0gVGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAwLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1heD0xXVx0VGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAxLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2V4cG9uZW50PTJdIFRoZSBleHBvbmVudCB3aGljaCBzY2FsZXMgdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2NhbGVFeHAgPSBuZXcgVG9uZS5TY2FsZUV4cCgwLCAxMDAsIDIpO1xuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KHNjYWxlRXhwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVFeHAgPSBmdW5jdGlvbiAob3V0cHV0TWluLCBvdXRwdXRNYXgsIGV4cG9uZW50KSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIGlucHV0IHRvIHRoZSBvdXRwdXQgcmFuZ2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlNjYWxlKG91dHB1dE1pbiwgb3V0cHV0TWF4KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBvd31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLlBvdyhUb25lLmRlZmF1bHRBcmcoZXhwb25lbnQsIDIpKTtcblx0ICAgICAgICB0aGlzLl9leHAuY29ubmVjdCh0aGlzLl9zY2FsZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TY2FsZUV4cCwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIEluc3RlYWQgb2YgaW50ZXJwb2xhdGluZyBsaW5lYXJseSBiZXR3ZWVuIHRoZSA8Y29kZT5taW48L2NvZGU+IGFuZFxuXHRcdCAqIDxjb2RlPm1heDwvY29kZT4gdmFsdWVzLCBzZXR0aW5nIHRoZSBleHBvbmVudCB3aWxsIGludGVycG9sYXRlIGJldHdlZW5cblx0XHQgKiB0aGUgdHdvIHZhbHVlcyB3aXRoIGFuIGV4cG9uZW50aWFsIGN1cnZlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlRXhwI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgZXhwb25lbnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlRXhwLnByb3RvdHlwZSwgJ2V4cG9uZW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwLnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cC52YWx1ZSA9IGV4cDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW5cblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZUV4cCNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1pbiA9IG1pbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW5cblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZUV4cCNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWF4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1heCA9IG1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2NhbGVFeHB9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9leHAuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2V4cCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2NhbGVFeHA7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCBXZWIgQXVkaW8ncyBuYXRpdmUgW0RlbGF5Tm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtZGVsYXlub2RlLWludGVyZmFjZSkuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBkZWxheVRpbWUgVGhlIGRlbGF5IGFwcGxpZWQgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gbWF4RGVsYXkgVGhlIG1heGltdW0gZGVsYXkgdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRGVsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ21heERlbGF5J1xuXHQgICAgICAgIF0sIFRvbmUuRGVsYXkpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbWF4aW11bSBkZWxheSB0aW1lIGluaXRpYWxpemVkIHdpdGggdGhlIG5vZGVcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWF4RGVsYXkgPSBNYXRoLm1heCh0aGlzLnRvU2Vjb25kcyhvcHRpb25zLm1heERlbGF5KSwgdGhpcy50b1NlY29uZHMob3B0aW9ucy5kZWxheVRpbWUpKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbmF0aXZlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlRGVsYXkodGhpcy5fbWF4RGVsYXkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSB0aGUgaW5jb21pbmcgc2lnbmFsIGlzXG5cdFx0XHQgKiAgZGVsYXllZC5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fZGVsYXlOb2RlLmRlbGF5VGltZSxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLlRpbWUsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZGVsYXlUaW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2RlbGF5VGltZScpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRGVsYXksIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EZWxheS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWF4RGVsYXknOiAxLFxuXHQgICAgICAgICdkZWxheVRpbWUnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gZGVsYXkgdGltZS4gVGhpcyBjYW5ub3QgYmUgY2hhbmdlZC4gVGhlIHZhbHVlIGlzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3Rvci5cblx0XHQgKiBAbWVtYmVyb2YgVG9uZS5EZWxheSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBtYXhEZWxheVxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRGVsYXkucHJvdG90eXBlLCAnbWF4RGVsYXknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXhEZWxheTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRGVsYXl9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRlbGF5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdkZWxheVRpbWUnKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRGVsYXk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBDb21iIGZpbHRlcnMgYXJlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcyBmb3IgcGh5c2ljYWwgbW9kZWxpbmcuIFJlYWQgbW9yZVxuXHRcdCAqICAgICAgICAgYWJvdXQgY29tYiBmaWx0ZXJzIG9uIFtDQ1JNQSdzIHdlYnNpdGVdKGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L35qb3MvcGFzcC9GZWVkYmFja19Db21iX0ZpbHRlcnMuaHRtbCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2RlbGF5VGltZV0gVGhlIGRlbGF5IHRpbWUgb2YgdGhlIGZpbHRlci5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZT19IHJlc29uYW5jZSBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIHRoZSBmaWx0ZXIgaGFzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZSdcblx0ICAgICAgICBdLCBUb25lLkZlZWRiYWNrQ29tYkZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZGVsYXkgb2YgdGhlIGNvbWIgZmlsdGVyLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZGVsYXkuZGVsYXlUaW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmZWVkYmFjayBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5yZXNvbmFuY2UsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBmZWVkYmFjayBvZiB0aGUgZGVsYXllZCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gdGhpcy5fZmVlZGJhY2suZ2Fpbjtcblx0ICAgICAgICB0aGlzLl9kZWxheS5jaGFpbih0aGlzLl9mZWVkYmFjaywgdGhpcy5fZGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4xLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiAwLjVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRmVlZGJhY2tDb21iRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBHZXQgdGhlIGN1cnJlbnQgd2F2ZWZvcm0gZGF0YSBvZiB0aGUgY29ubmVjdGVkIGF1ZGlvIHNvdXJjZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHNpemUgVGhlIHNpemUgb2YgdGhlIEZGVC4gVmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICovXG5cdCAgICBUb25lLkZGVCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3NpemUnXSwgVG9uZS5GRlQpO1xuXHQgICAgICAgIG9wdGlvbnMudHlwZSA9IFRvbmUuQW5hbHlzZXIuVHlwZS5GRlQ7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFuYWx5c2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5BbmFseXNlcihvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZGVCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkZGVC5kZWZhdWx0cyA9IHsgJ3NpemUnOiAxMDI0IH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0cyB0aGUgd2F2ZWZvcm0gb2YgdGhlIGF1ZGlvIHNvdXJjZS4gUmV0dXJucyB0aGUgd2F2ZWZvcm0gZGF0YVxuXHRcdCAqICBvZiBsZW5ndGggW3NpemVdKCNzaXplKSBhcyBhIEZsb2F0MzJBcnJheSB3aXRoIHZhbHVlcyBiZXR3ZWVuIC0xIGFuZCAxLlxuXHRcdCAqICBAcmV0dXJucyB7VHlwZWRBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuRkZULnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNpemUgb2YgYW5hbHlzaXMuIFRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkZGVCNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRkZULnByb3RvdHlwZSwgJ3NpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5zaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zaXplID0gc2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRkZUfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GRlQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZGVDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFJldHVybiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYW4gaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoLTEpO1xuXHRcdCAqIHZhciBhYnMgPSBuZXcgVG9uZS5BYnMoKTtcblx0XHQgKiBzaWduYWwuY29ubmVjdChhYnMpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBhYnMgaXMgMS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQWJzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxlc3NUaGFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hYnMgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKE1hdGguYWJzKHZhbCkgPCAwLjAwMSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnModmFsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sIDEwMjQpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQWJzLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgbWV0aG9kXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFic30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BYnMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYWJzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hYnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFicztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkZvbGxvd2VyIGlzIGEgIGNydWRlIGVudmVsb3BlIGZvbGxvd2VyIHdoaWNoIHdpbGwgZm9sbG93XG5cdFx0ICogICAgICAgICAgdGhlIGFtcGxpdHVkZSBvZiBhbiBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogICAgICAgICAgVGFrZSBjYXJlIHdpdGggc21hbGwgKDwgMC4wMikgYXR0YWNrIG9yIGRlY2F5IHZhbHVlc1xuXHRcdCAqICAgICAgICAgIGFzIGZvbGxvd2VyIGhhcyBzb21lIHJpcHBsZSB3aGljaCBpcyBleGFnZ2VyYXRlZFxuXHRcdCAqICAgICAgICAgIGF0IHRoZXNlIHZhbHVlcy4gUmVhZCBtb3JlIGFib3V0IGVudmVsb3BlIGZvbGxvd2VycyAoYWxzbyBrbm93blxuXHRcdCAqICAgICAgICAgIGFzIGVudmVsb3BlIGRldGVjdG9ycykgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRW52ZWxvcGVfZGV0ZWN0b3IpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdIFRoZSByYXRlIGF0IHdoaWNoIHRoZSBmb2xsb3dlciByaXNlcy5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmVsZWFzZSBUaGUgcmF0ZSBhdCB3aGljaCB0aGUgZm9sb3dlciBmYWxscy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZm9sbG93ZXIgPSBuZXcgVG9uZS5Gb2xsb3dlcigwLjIsIDAuNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRm9sbG93ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFic31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWJzID0gbmV3IFRvbmUuQWJzKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxvd3Bhc3MgZmlsdGVyIHdoaWNoIHNtb290aHMgdGhlIGlucHV0XG5cdFx0XHQgKiAgQHR5cGUge0JpcXVhZEZpbHRlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIudHlwZSA9ICdsb3dwYXNzJztcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuZnJlcXVlbmN5LnZhbHVlID0gMDtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuUS52YWx1ZSA9IC0xMDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbmV3IFRvbmUuRGVsYXkodGhpcy5ibG9ja1RpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoaXMga2VlcHMgaXQgZmFyIGZyb20gMCwgZXZlbiBmb3IgdmVyeSBzbWFsbCBkaWZmZXJlbmNlc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMTAwMDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2F0dGFjayA9IG9wdGlvbnMuYXR0YWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JlbGVhc2UgPSBvcHRpb25zLnJlbGVhc2U7XG5cdCAgICAgICAgLy90aGUgc21vb3RoZWQgc2lnbmFsIHRvIGdldCB0aGUgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLl9hYnMsIHRoaXMuX2ZpbHRlciwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vdGhlIGRpZmZlcmVuY2UgcGF0aFxuXHQgICAgICAgIHRoaXMuX2Ficy5jb25uZWN0KHRoaXMuX3N1YiwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyLmNoYWluKHRoaXMuX2RlbGF5LCB0aGlzLl9zdWIpO1xuXHQgICAgICAgIC8vdGhyZXNob2xkIHRoZSBkaWZmZXJlbmNlIGFuZCB1c2UgdGhlIHRocmVzaCB0byBzZXQgdGhlIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuX3N1Yi5jaGFpbih0aGlzLl9tdWx0LCB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMsIHRoaXMuX2ZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBhdHRhY2sgYW5kIHJlbGVhc2UgdmFsdWVzIGluIHRoZSB0YWJsZVxuXHQgICAgICAgIHRoaXMuX3NldEF0dGFja1JlbGVhc2UodGhpcy5fYXR0YWNrLCB0aGlzLl9yZWxlYXNlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZvbGxvd2VyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrJzogMC4wNSxcblx0ICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXRzIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2UgdGltZXMgaW4gdGhlIHdhdmUgc2hhcGVyXG5cdFx0ICogIEBwYXJhbSAgIHtUaW1lfSBhdHRhY2tcblx0XHQgKiAgQHBhcmFtICAge1RpbWV9IHJlbGVhc2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLl9zZXRBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGF0dGFjaywgcmVsZWFzZSkge1xuXHQgICAgICAgIHZhciBtaW5UaW1lID0gdGhpcy5ibG9ja1RpbWU7XG5cdCAgICAgICAgYXR0YWNrID0gVG9uZS5UaW1lKGF0dGFjaykudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICByZWxlYXNlID0gVG9uZS5UaW1lKHJlbGVhc2UpLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgYXR0YWNrID0gTWF0aC5tYXgoYXR0YWNrLCBtaW5UaW1lKTtcblx0ICAgICAgICByZWxlYXNlID0gTWF0aC5tYXgocmVsZWFzZSwgbWluVGltZSk7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5VmFsdWVzLnNldE1hcChmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmICh2YWwgPD0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGF0dGFjaztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF0dGFjayB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZvbGxvd2VyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGF0dGFja1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLCAnYXR0YWNrJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNrO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYXR0YWNrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2F0dGFjayA9IGF0dGFjaztcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QXR0YWNrUmVsZWFzZSh0aGlzLl9hdHRhY2ssIHRoaXMuX3JlbGVhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJlbGVhc2UgdGltZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Gb2xsb3dlciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSByZWxlYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUsICdyZWxlYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVsZWFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJlbGVhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmVsZWFzZSA9IHJlbGVhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldEF0dGFja1JlbGVhc2UodGhpcy5fYXR0YWNrLCB0aGlzLl9yZWxlYXNlKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBCb3Jyb3dzIHRoZSBjb25uZWN0IG1ldGhvZCBmcm9tIFNpZ25hbCBzbyB0aGF0IHRoZSBvdXRwdXQgY2FuIGJlIHVzZWRcblx0XHQgKiAgYXMgYSBUb25lLlNpZ25hbCBjb250cm9sIHNpZ25hbC5cblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyLnByb3RvdHlwZS5jb25uZWN0ID0gVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0O1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRm9sbG93ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5VmFsdWVzLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3ViLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9zdWIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Ficy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYWJzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRm9sbG93ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlNjYWxlZEVudmVsb3AgaXMgYW4gZW52ZWxvcGUgd2hpY2ggY2FuIGJlIHNjYWxlZFxuXHRcdCAqICAgICAgICAgdG8gYW55IHJhbmdlLiBJdCdzIHVzZWZ1bCBmb3IgYXBwbHlpbmcgYW4gZW52ZWxvcGVcblx0XHQgKiAgICAgICAgIHRvIGEgZnJlcXVlbmN5IG9yIGFueSBvdGhlciBub24tTm9ybWFsUmFuZ2Ugc2lnbmFsXG5cdFx0ICogICAgICAgICBwYXJhbWV0ZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW52ZWxvcGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbYXR0YWNrXVx0dGhlIGF0dGFjayB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHR0aGUgZGVjYXkgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbc3VzdGFpbl0gXHRhIHBlcmNlbnRhZ2UgKDAtMSkgb2YgdGhlIGZ1bGwgYW1wbGl0dWRlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHR0aGUgcmVsZWFzZSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIHNjYWxlZEVudiA9IG5ldyBUb25lLlNjYWxlZEVudmVsb3BlKHtcblx0XHQgKiAgXHRcImF0dGFja1wiIDogMC4yLFxuXHRcdCAqICBcdFwibWluXCIgOiAyMDAsXG5cdFx0ICogIFx0XCJtYXhcIiA6IDIwMDBcblx0XHQgKiAgfSk7XG5cdFx0ICogIHNjYWxlZEVudi5jb25uZWN0KG9zY2lsbGF0b3IuZnJlcXVlbmN5KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9nZXQgYWxsIG9mIHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdkZWNheScsXG5cdCAgICAgICAgICAgICdzdXN0YWluJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5TY2FsZWRFbnZlbG9wZS5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIGluY29taW5nIHNpZ25hbCBieSBhbiBleHBvbmVudFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBvd31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Qb3cob3B0aW9ucy5leHBvbmVudCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIHNpZ25hbCB0byB0aGUgZGVzaXJlZCByYW5nZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2NhbGUob3B0aW9ucy5taW4sIG9wdGlvbnMubWF4KTtcblx0ICAgICAgICB0aGlzLl9zaWcuY2hhaW4odGhpcy5fZXhwLCB0aGlzLl9zY2FsZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TY2FsZWRFbnZlbG9wZSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlZEVudmVsb3BlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICdleHBvbmVudCc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBtaW4gb3V0cHV0IHZhbHVlLiBUaGlzIGlzIHRoZSB2YWx1ZSB3aGljaCBpdFxuXHRcdCAqIHN0YXJ0cyBhdC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZWRFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1pbiA9IG1pbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIG1heCBvdXRwdXQgdmFsdWUuIEluIG90aGVyIHdvcmRzLCB0aGUgdmFsdWVcblx0XHQgKiBhdCB0aGUgcGVhayBvZiB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlZEVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5tYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgZXhwb25lbnQgdmFsdWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVkRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBleHBvbmVudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLCAnZXhwb25lbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHAudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwLnZhbHVlID0gZXhwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNjYWxlZEVudmVsb3BlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V4cC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXhwID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TY2FsZWRFbnZlbG9wZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUgaXMgYSBUb25lLlNjYWxlZEVudmVsb3BlLCBidXQgaW5zdGVhZCBvZiBgbWluYCBhbmQgYG1heGBcblx0XHQgKiAgICAgICAgIGl0J3MgZ290IGEgYGJhc2VGcmVxdWVuY3lgIGFuZCBgb2N0YXZlc2AgcGFyYW1ldGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVudmVsb3BlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja11cdHRoZSBhdHRhY2sgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2RlY2F5XVx0dGhlIGRlY2F5IHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3N1c3RhaW5dIFx0YSBwZXJjZW50YWdlICgwLTEpIG9mIHRoZSBmdWxsIGFtcGxpdHVkZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0dGhlIHJlbGVhc2UgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBmcmVxRW52ID0gbmV3IFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUoe1xuXHRcdCAqICBcdFwiYXR0YWNrXCIgOiAwLjIsXG5cdFx0ICogIFx0XCJiYXNlRnJlcXVlbmN5XCIgOiBcIkMyXCIsXG5cdFx0ICogIFx0XCJvY3RhdmVzXCIgOiA0XG5cdFx0ICogIH0pO1xuXHRcdCAqICBmcmVxRW52LmNvbm5lY3Qob3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAnZGVjYXknLFxuXHQgICAgICAgICAgICAnc3VzdGFpbicsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvL21lcmdlIGl0IHdpdGggdGhlIGZyZXF1ZW5jeSBlbnZlbG9wZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU3RvcmVzIHRoZSBvY3RhdmUgdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLy9zZXR1cFxuXHQgICAgICAgIHRoaXMuYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeUVudmVsb3BlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogNCxcblx0ICAgICAgICAnZXhwb25lbnQnOiAyXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgbWluaW51bSBvdXRwdXQgdmFsdWUuIFRoaXMgaXMgdGhlIHZhbHVlIHdoaWNoIGl0XG5cdFx0ICogc3RhcnRzIGF0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQG5hbWUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLCAnYmFzZUZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5taW4gPSB0aGlzLnRvRnJlcXVlbmN5KG1pbik7XG5cdCAgICAgICAgICAgIC8vYWxzbyB1cGRhdGUgdGhlIG9jdGF2ZXNcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgYmFzZUZyZXF1ZW5jeSB0aGF0IHRoZVxuXHRcdCAqIGVudmVsb3BlIHdpbGwgc2NhbGUgdG8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZyZXF1ZW5jeUVudmVsb3BlLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0YXZlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0YXZlcztcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWF4ID0gdGhpcy5iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgb2N0YXZlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBleHBvbmVudCB2YWx1ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGV4cG9uZW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUsICdleHBvbmVudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAudmFsdWUgPSBleHA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRnJlcXVlbmN5RW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEdyZWF0ZXJUaGFuWmVybyBvdXRwdXRzIDEgd2hlbiB0aGUgaW5wdXQgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIHplcm9cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZ3QwID0gbmV3IFRvbmUuR3JlYXRlclRoYW5aZXJvKCk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgwLjAxKS5jb25uZWN0KGd0MCk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGd0MCBpcyAxLlxuXHRcdCAqIHNpZy52YWx1ZSA9IDA7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGd0MCBpcyAwLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhblplcm8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGhyZXNoID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKHZhbCA8PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSwgMTI3KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgZmlyc3QgdGhyZXNob2xkZWQgc2lnbmFsIGJ5IGEgbGFyZ2UgdmFsdWUuXG5cdFx0XHQgKiAgdGhpcyB3aWxsIGhlbHAgd2l0aCB2YWx1ZXMgd2hpY2ggYXJlIHZlcnkgY2xvc2UgdG8gMFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aXBseSgxMDAwMCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmNvbm5lY3QodGhpcy5fdGhyZXNoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdyZWF0ZXJUaGFuWmVybywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNwb3NlIG1ldGhvZFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HcmVhdGVyVGhhblplcm99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW5aZXJvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGhyZXNoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdyZWF0ZXJUaGFuWmVybztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBPdXRwdXQgMSBpZiB0aGUgc2lnbmFsIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUsIG90aGVyd2lzZSBvdXRwdXRzIDAuXG5cdFx0ICogICAgICAgICAgY2FuIGNvbXBhcmUgdHdvIHNpZ25hbHMgb3IgYSBzaWduYWwgYW5kIGEgbnVtYmVyLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmFsdWU9MF0gdGhlIHZhbHVlIHRvIGNvbXBhcmUgdG8gdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBndCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuKDIpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoNCkuY29ubmVjdChndCk7XG5cdFx0ICogLy9vdXRwdXQgb2YgZ3QgaXMgZXF1YWwgMS5cblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW4gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzdWJ0cmFjdCB0aGUgYW1vdW50IGZyb20gdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5TdWJ0cmFjdCh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5pbnB1dFsxXSA9IHRoaXMuX3BhcmFtLmlucHV0WzFdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbXBhcmUgdGhhdCBhbW91bnQgdG8gemVyb1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdyZWF0ZXJUaGFuWmVyb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ3R6ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HcmVhdGVyVGhhblplcm8oKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jb25uZWN0KHRoaXMuX2d0eik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HcmVhdGVyVGhhbiwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgbWV0aG9kXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdyZWF0ZXJUaGFufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyZWF0ZXJUaGFuLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZ3R6LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ndHogPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdyZWF0ZXJUaGFuO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuR2F0ZSBvbmx5IHBhc3NlcyBhIHNpZ25hbCB0aHJvdWdoIHdoZW4gdGhlIGluY29taW5nXG5cdFx0ICogICAgICAgICAgc2lnbmFsIGV4Y2VlZHMgYSBzcGVjaWZpZWQgdGhyZXNob2xkLiBUbyBkbyB0aGlzLCBHYXRlIHVzZXNcblx0XHQgKiAgICAgICAgICBhIFRvbmUuRm9sbG93ZXIgdG8gZm9sbG93IHRoZSBhbXBsaXR1ZGUgb2YgdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBBIGNvbW1vbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIGlzIGEgW05vaXNlIEdhdGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05vaXNlX2dhdGUpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN8T2JqZWN0fSBbdGhyZXNob2xkXSBUaGUgdGhyZXNob2xkIGFib3ZlIHdoaWNoIHRoZSBnYXRlIHdpbGwgb3Blbi5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gYXR0YWNrIFRoZSBmb2xsb3dlcidzIGF0dGFjayB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJlbGVhc2UgVGhlIGZvbGxvd2VyJ3MgcmVsZWFzZSB0aW1lXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGdhdGUgPSBuZXcgVG9uZS5HYXRlKC0zMCwgMC4yLCAwLjMpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIG1pYyA9IG5ldyBUb25lLlVzZXJNZWRpYSgpLmNvbm5lY3QoZ2F0ZSk7XG5cdFx0ICogLy90aGUgZ2F0ZSB3aWxsIG9ubHkgcGFzcyB0aHJvdWdoIHRoZSBpbmNvbWluZ1xuXHRcdCAqIC8vc2lnbmFsIHdoZW4gaXQncyBsb3VkZXIgdGhhbiAtMzBkYlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCcsXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkdhdGUpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZvbGxvd2VyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mb2xsb3dlciA9IG5ldyBUb25lLkZvbGxvd2VyKG9wdGlvbnMuYXR0YWNrLCBvcHRpb25zLnJlbGVhc2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdyZWF0ZXJUaGFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ndCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuKFRvbmUuZGJUb0dhaW4ob3B0aW9ucy50aHJlc2hvbGQpKTtcblx0ICAgICAgICAvL3RoZSBjb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLy90aGUgY29udHJvbCBzaWduYWxcblx0ICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMuX2d0LCB0aGlzLl9mb2xsb3dlciwgdGhpcy5vdXRwdXQuZ2Fpbik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HYXRlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuR2F0ZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrJzogMC4xLFxuXHQgICAgICAgICdyZWxlYXNlJzogMC4xLFxuXHQgICAgICAgICd0aHJlc2hvbGQnOiAtNDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdGhyZXNob2xkIG9mIHRoZSBnYXRlIGluIGRlY2liZWxzXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR2F0ZSNcblx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0ICogQG5hbWUgdGhyZXNob2xkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HYXRlLnByb3RvdHlwZSwgJ3RocmVzaG9sZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuZ2FpblRvRGIodGhpcy5fZ3QudmFsdWUpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGhyZXNoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2d0LnZhbHVlID0gVG9uZS5kYlRvR2Fpbih0aHJlc2gpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF0dGFjayBzcGVlZCBvZiB0aGUgZ2F0ZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdhdGUjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgYXR0YWNrXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HYXRlLnByb3RvdHlwZSwgJ2F0dGFjaycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbGxvd2VyLmF0dGFjaztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGF0dGFja1RpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZm9sbG93ZXIuYXR0YWNrID0gYXR0YWNrVGltZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByZWxlYXNlIHNwZWVkIG9mIHRoZSBnYXRlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR2F0ZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSByZWxlYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HYXRlLnByb3RvdHlwZSwgJ3JlbGVhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb2xsb3dlci5yZWxlYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmVsZWFzZVRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZm9sbG93ZXIucmVsZWFzZSA9IHJlbGVhc2VUaW1lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HYXRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdhdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9mb2xsb3dlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZvbGxvd2VyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9ndCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR2F0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIFRvbmUuVGlja1NpZ25hbCBleHRlbmRzIFRvbmUuU2lnbmFsLCBidXQgYWRkcyB0aGUgY2FwYWJpbGl0eVxuXHRcdCAqICAgICAgICB0byBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBlbGFwc2VkIHRpY2tzLiBleHBvbmVudGlhbCBhbmQgdGFyZ2V0IGN1cnZlc1xuXHRcdCAqICAgICAgICBhcmUgYXBwcm94aW1hdGVkIHdpdGggbXVsdGlwbGUgbGluZWFyIHJhbXBzLlxuXHRcdCAqXG5cdFx0ICogICAgICAgIFRoYW5rIHlvdSBCcnVubyBEaWFzLCBILiBTb2ZpYSBQaW50bywgYW5kIERhdmlkIE0uIE1hdG9zLCBmb3IgeW91ciBbV0FDIHBhcGVyXShodHRwczovL3NtYXJ0ZWNoLmdhdGVjaC5lZHUvYml0c3RyZWFtL2hhbmRsZS8xODUzLzU0NTg4L1dBQzIwMTYtNDkucGRmKVxuXHRcdCAqICAgICAgICBkZXNjcmliaW5nIGludGVncmF0aW5nIHRpbWluZyBmdW5jdGlvbnMgZm9yIHRlbXBvIGNhbGN1bGF0aW9ucy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc2lnbmFsXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgdmFsdWUgPSBUb25lLmRlZmF1bHRBcmcodmFsdWUsIDEpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcywge1xuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuVGlja3MsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9leHRlbmQgdGhlIG1lbW9yeVxuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5tZW1vcnkgPSBJbmZpbml0eTtcblx0ICAgICAgICAvL2NsZWFyIHRoZSBjbG9jayBmcm9tIHRoZSBiZWdpbm5pbmdcblx0ICAgICAgICB0aGlzLmNhbmNlbFNjaGVkdWxlZFZhbHVlcygwKTtcblx0ICAgICAgICAvL3NldCBhbiBpbml0aWFsIGV2ZW50XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiAwLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGlja1NpZ25hbCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogV3JhcHMgVG9uZS5TaWduYWwgbWV0aG9kcyBzbyB0aGF0IHRoZXkgYWxzb1xuXHRcdCAqIHJlY29yZCB0aGUgdGlja3MuXG5cdFx0ICogQHBhcmFtICB7RnVuY3Rpb259IG1ldGhvZFxuXHRcdCAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBmdW5jdGlvbiBfd3JhcFNjaGVkdWxlTWV0aG9kcyhtZXRob2QpIHtcblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gdGhpcy5fZXZlbnRzLnByZXZpb3VzRXZlbnQoZXZlbnQpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3NVbnRpbFRpbWUgPSB0aGlzLl9nZXRUaWNrc1VudGlsRXZlbnQocHJldmlvdXNFdmVudCwgdGltZSk7XG5cdCAgICAgICAgICAgIGV2ZW50LnRpY2tzID0gTWF0aC5tYXgodGlja3NVbnRpbFRpbWUsIDApO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSA9IF93cmFwU2NoZWR1bGVNZXRob2RzKFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSk7XG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lID0gX3dyYXBTY2hlZHVsZU1ldGhvZHMoVG9uZS5TaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUgd2l0aFxuXHRcdCAqICBhIHJhdGUgaGF2aW5nIHRoZSBnaXZlbiB0aW1lIGNvbnN0YW50LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHRpbWVDb25zdGFudFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnNldFRhcmdldEF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSwgY29uc3RhbnQpIHtcblx0ICAgICAgICAvL2Fwcm94aW1hdGUgaXQgd2l0aCBtdWx0aXBsZSBsaW5lYXIgcmFtcHNcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQodGltZSk7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIC8vc3RhcnQgZnJvbSBwcmV2aW91c2x5IHNjaGVkdWxlZCB2YWx1ZVxuXHQgICAgICAgIHZhciBwcmV2RXZlbnQgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHZhciBzZWdtZW50cyA9IE1hdGgucm91bmQoTWF0aC5tYXgoMSAvIGNvbnN0YW50LCAxKSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gc2VnbWVudHM7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgc2VnVGltZSA9IGNvbnN0YW50ICogaSArIHRpbWU7XG5cdCAgICAgICAgICAgIHZhciByYW1wVmFsID0gdGhpcy5fZXhwb25lbnRpYWxBcHByb2FjaChwcmV2RXZlbnQudGltZSwgcHJldkV2ZW50LnZhbHVlLCB2YWx1ZSwgY29uc3RhbnQsIHNlZ1RpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMuX3RvVW5pdHMocmFtcFZhbCksIHNlZ1RpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGV4cG9uZW50aWFsIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcGFyYW1ldGVyIHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBlbmRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIC8vYXByb3hpbWF0ZSBpdCB3aXRoIG11bHRpcGxlIGxpbmVhciByYW1wc1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgLy9zdGFydCBmcm9tIHByZXZpb3VzbHkgc2NoZWR1bGVkIHZhbHVlXG5cdCAgICAgICAgdmFyIHByZXZFdmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgaWYgKHByZXZFdmVudCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICBwcmV2RXZlbnQgPSB7XG5cdCAgICAgICAgICAgICAgICAndmFsdWUnOiB0aGlzLl9pbml0aWFsVmFsdWUsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IDBcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hcHByb3ggMTAgc2VnbWVudHMgcGVyIHNlY29uZFxuXHQgICAgICAgIHZhciBzZWdtZW50cyA9IE1hdGgucm91bmQoTWF0aC5tYXgoKHRpbWUgLSBwcmV2RXZlbnQudGltZSkgKiAxMCwgMSkpO1xuXHQgICAgICAgIHZhciBzZWdtZW50RHVyID0gKHRpbWUgLSBwcmV2RXZlbnQudGltZSkgLyBzZWdtZW50cztcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBzZWdtZW50czsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBzZWdUaW1lID0gc2VnbWVudER1ciAqIGkgKyBwcmV2RXZlbnQudGltZTtcblx0ICAgICAgICAgICAgdmFyIHJhbXBWYWwgPSB0aGlzLl9leHBvbmVudGlhbEludGVycG9sYXRlKHByZXZFdmVudC50aW1lLCBwcmV2RXZlbnQudmFsdWUsIHRpbWUsIHZhbHVlLCBzZWdUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh0aGlzLl90b1VuaXRzKHJhbXBWYWwpLCBzZWdUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgdGljayB2YWx1ZSBhdCB0aGUgdGltZS4gVGFrZXMgaW50byBhY2NvdW50XG5cdFx0ICogYW55IGF1dG9tYXRpb24gY3VydmVzIHNjaGVkdWxlZCBvbiB0aGUgc2lnbmFsLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBUaGUgdGltZSB0byBnZXQgdGhlIHRpY2sgY291bnQgYXRcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgICBUaGUgbnVtYmVyIG9mIHRpY2tzIHdoaWNoIGhhdmUgZWxhcHNlZCBhdCB0aGUgdGltZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBhbnkgYXV0b21hdGlvbnMuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLl9nZXRUaWNrc1VudGlsRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIHRpbWUpIHtcblx0ICAgICAgICBpZiAoZXZlbnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSB7XG5cdCAgICAgICAgICAgICAgICAndGlja3MnOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3RpbWUnOiAwXG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzVW5kZWYoZXZlbnQudGlja3MpKSB7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gdGhpcy5fZXZlbnRzLnByZXZpb3VzRXZlbnQoZXZlbnQpO1xuXHQgICAgICAgICAgICBldmVudC50aWNrcyA9IHRoaXMuX2dldFRpY2tzVW50aWxFdmVudChwcmV2aW91c0V2ZW50LCBldmVudC50aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHZhbDAgPSB0aGlzLmdldFZhbHVlQXRUaW1lKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgIHZhciB2YWwxID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICAvL2lmIGl0J3MgcmlnaHQgb24gdGhlIGxpbmUsIHRha2UgdGhlIHByZXZpb3VzIHZhbHVlXG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5nZXQodGltZSkudGltZSA9PT0gdGltZSAmJiB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuU2V0VmFsdWUpIHtcblx0ICAgICAgICAgICAgdmFsMSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSAtIHRoaXMuc2FtcGxlVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAwLjUgKiAodGltZSAtIGV2ZW50LnRpbWUpICogKHZhbDAgKyB2YWwxKSArIGV2ZW50LnRpY2tzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIHRpY2sgdmFsdWUgYXQgdGhlIHRpbWUuIFRha2VzIGludG8gYWNjb3VudFxuXHRcdCAqIGFueSBhdXRvbWF0aW9uIGN1cnZlcyBzY2hlZHVsZWQgb24gdGhlIHNpZ25hbC5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIGdldCB0aGUgdGljayBjb3VudCBhdFxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgIFRoZSBudW1iZXIgb2YgdGlja3Mgd2hpY2ggaGF2ZSBlbGFwc2VkIGF0IHRoZSB0aW1lXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGFueSBhdXRvbWF0aW9ucy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZ2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLl9nZXRUaWNrc1VudGlsRXZlbnQoZXZlbnQsIHRpbWUpLCAwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgbnVtYmVyIG9mIHRpY2tzIGZyb20gdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0ge1RpY2tzfSB0aWNrcyBUaGUgbnVtYmVyIG9mIHRpY2tzIHRvIGNhbGN1bGF0ZVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gZ2V0IHRoZSBuZXh0IHRpY2sgZnJvbVxuXHRcdCAqIEByZXR1cm4ge1NlY29uZHN9IFRoZSBkdXJhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIHRpY2tzIGZyb20gdGhlIGdpdmVuIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5nZXREdXJhdGlvbk9mVGlja3MgPSBmdW5jdGlvbiAodGlja3MsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRUaWNrID0gdGhpcy5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5nZXRUaW1lT2ZUaWNrKGN1cnJlbnRUaWNrICsgdGlja3MpIC0gdGltZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHaXZlbiBhIHRpY2ssIHJldHVybnMgdGhlIHRpbWUgdGhhdCB0aWNrIG9jY3VycyBhdC5cblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja1xuXHRcdCAqIEByZXR1cm4ge1RpbWV9ICAgICAgVGhlIHRpbWUgdGhhdCB0aGUgdGljayBvY2N1cnMuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmdldFRpbWVPZlRpY2sgPSBmdW5jdGlvbiAodGljaykge1xuXHQgICAgICAgIHZhciBiZWZvcmUgPSB0aGlzLl9ldmVudHMuZ2V0KHRpY2ssICd0aWNrcycpO1xuXHQgICAgICAgIHZhciBhZnRlciA9IHRoaXMuX2V2ZW50cy5nZXRBZnRlcih0aWNrLCAndGlja3MnKTtcblx0ICAgICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aWNrcyA9PT0gdGljaykge1xuXHQgICAgICAgICAgICByZXR1cm4gYmVmb3JlLnRpbWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUgJiYgYWZ0ZXIgJiYgYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIgJiYgYmVmb3JlLnZhbHVlICE9PSBhZnRlci52YWx1ZSkge1xuXHQgICAgICAgICAgICB2YXIgdmFsMCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoYmVmb3JlLnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgdmFsMSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoYWZ0ZXIudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBkZWx0YSA9ICh2YWwxIC0gdmFsMCkgLyAoYWZ0ZXIudGltZSAtIGJlZm9yZS50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGsgPSBNYXRoLnNxcnQoTWF0aC5wb3codmFsMCwgMikgLSAyICogZGVsdGEgKiAoYmVmb3JlLnRpY2tzIC0gdGljaykpO1xuXHQgICAgICAgICAgICB2YXIgc29sMSA9ICgtdmFsMCArIGspIC8gZGVsdGE7XG5cdCAgICAgICAgICAgIHZhciBzb2wyID0gKC12YWwwIC0gaykgLyBkZWx0YTtcblx0ICAgICAgICAgICAgcmV0dXJuIChzb2wxID4gMCA/IHNvbDEgOiBzb2wyKSArIGJlZm9yZS50aW1lO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYmVmb3JlKSB7XG5cdCAgICAgICAgICAgIGlmIChiZWZvcmUudmFsdWUgPT09IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBiZWZvcmUudGltZSArICh0aWNrIC0gYmVmb3JlLnRpY2tzKSAvIGJlZm9yZS52YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aWNrIC8gdGhpcy5faW5pdGlhbFZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDb252ZXJ0IHNvbWUgbnVtYmVyIG9mIHRpY2tzIHRoZWlyIHRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIGFjY291bnRpbmdcblx0XHQgKiBmb3IgYW55IGF1dG9tYXRpb24gY3VydmVzIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgbnVtYmVyIG9mIHRpY2tzIHRvIGNvbnZlcnQgdG8gc2Vjb25kcy5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBbd2hlbj1ub3ddICBXaGVuIGFsb25nIHRoZSBhdXRvbWF0aW9uIHRpbWVsaW5lIHRvIGNvbnZlcnQgdGhlIHRpY2tzLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVGltZX0gICAgICAgVGhlIGR1cmF0aW9uIGluIHNlY29uZHMgb2YgdGhlIHRpY2tzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS50aWNrc1RvVGltZSA9IGZ1bmN0aW9uICh0aWNrcywgd2hlbikge1xuXHQgICAgICAgIHdoZW4gPSB0aGlzLnRvU2Vjb25kcyh3aGVuKTtcblx0ICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZSh0aGlzLmdldER1cmF0aW9uT2ZUaWNrcyh0aWNrcywgd2hlbikpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBpbnZlcnNlIG9mIFt0aWNrc1RvVGltZV0oI3RpY2tzdG90aW1lKS4gQ29udmVydCBhIGR1cmF0aW9uIGluXG5cdFx0ICogc2Vjb25kcyB0byB0aGUgY29ycmVzcG9uZGluZyBudW1iZXIgb2YgdGlja3MgYWNjb3VudGluZyBmb3IgYW55XG5cdFx0ICogYXV0b21hdGlvbiBjdXJ2ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gZHVyYXRpb24gVGhlIHRpbWUgaW50ZXJ2YWwgdG8gY29udmVydCB0byB0aWNrcy5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBbd2hlbj1ub3ddICAgICBXaGVuIGFsb25nIHRoZSBhdXRvbWF0aW9uIHRpbWVsaW5lIHRvIGNvbnZlcnQgdGhlIHRpY2tzLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVGlja3N9ICAgICAgICAgIFRoZSBkdXJhdGlvbiBpbiB0aWNrcy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUudGltZVRvVGlja3MgPSBmdW5jdGlvbiAoZHVyYXRpb24sIHdoZW4pIHtcblx0ICAgICAgICB3aGVuID0gdGhpcy50b1NlY29uZHMod2hlbik7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGlja3MgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHdoZW4pO1xuXHQgICAgICAgIHZhciBlbmRUaWNrcyA9IHRoaXMuZ2V0VGlja3NBdFRpbWUod2hlbiArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGlja3MoZW5kVGlja3MgLSBzdGFydFRpY2tzKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaWNrU2lnbmFsO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgVGltZWxpbmUgU3RhdGUuIFByb3ZpZGVzIHRoZSBtZXRob2RzOiA8Y29kZT5zZXRTdGF0ZUF0VGltZShcInN0YXRlXCIsIHRpbWUpPC9jb2RlPlxuXHRcdCAqICAgICAgICAgIGFuZCA8Y29kZT5nZXRWYWx1ZUF0VGltZSh0aW1lKTwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZWxpbmV9XG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSBpbml0aWFsIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBUaW1lbGluZVN0YXRlLiBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gPGNvZGU+dW5kZWZpbmVkPC9jb2RlPlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlID0gZnVuY3Rpb24gKGluaXRpYWwpIHtcblx0ICAgICAgICBUb25lLlRpbWVsaW5lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGluaXRpYWwgc3RhdGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbml0aWFsID0gaW5pdGlhbDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpbWVsaW5lU3RhdGUsIFRvbmUuVGltZWxpbmUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHNjaGVkdWxlZCBzdGF0ZSBzY2hlZHVsZWQgYmVmb3JlIG9yIGF0XG5cdFx0ICogIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybiAge1N0cmluZ30gIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBpbnB1dCBpbiBzZXRTdGF0ZUF0VGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciBldmVudCA9IHRoaXMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIGlmIChldmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gZXZlbnQuc3RhdGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRpYWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBzdGF0ZSB0byB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHN0YXRlIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSB0byBzZXQuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZVN0YXRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUucHJvdG90eXBlLnNldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHN0YXRlLCB0aW1lKSB7XG5cdCAgICAgICAgLy9hbGwgc3RhdGUgY2hhbmdlcyBuZWVkIHRvIGJlID49IHRoZSBwcmV2aW91cyBzdGF0ZSB0aW1lXG5cdCAgICAgICAgLy9UT0RPIHRocm93IGVycm9yIGlmIHRpbWUgPCB0aGUgcHJldmlvdXMgZXZlbnQgdGltZVxuXHQgICAgICAgIHRoaXMuYWRkKHtcblx0ICAgICAgICAgICAgJ3N0YXRlJzogc3RhdGUsXG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGV2ZW50IGJlZm9yZSB0aGUgdGltZSB3aXRoIHRoZSBnaXZlbiBzdGF0ZVxuXHRcdCAqICBAcGFyYW0ge1RvbmUuU3RhdGV9IHN0YXRlIFRoZSBzdGF0ZSB0byBsb29rIGZvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBjaGVjayBiZWZvcmVcdFx0XHRcblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIFRoZSBldmVudCB3aXRoIHRoZSBnaXZlbiBzdGF0ZSBiZWZvcmUgdGhlIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuZ2V0TGFzdFN0YXRlID0gZnVuY3Rpb24gKHN0YXRlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3RpbWVsaW5lW2ldO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IHN0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZXZlbnQgYWZ0ZXIgdGhlIHRpbWUgd2l0aCB0aGUgZ2l2ZW4gc3RhdGVcblx0XHQgKiAgQHBhcmFtIHtUb25lLlN0YXRlfSBzdGF0ZSBUaGUgc3RhdGUgdG8gbG9vayBmb3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gY2hlY2sgZnJvbVxuXHRcdCAqICBAcmV0dXJuICB7T2JqZWN0fSAgVGhlIGV2ZW50IHdpdGggdGhlIGdpdmVuIHN0YXRlIGFmdGVyIHRoZSB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUucHJvdG90eXBlLmdldE5leHRTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPCB0aGlzLl90aW1lbGluZS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fdGltZWxpbmVbaV07XG5cdCAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IHN0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWVsaW5lU3RhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVXNlcyBbVG9uZS5UaWNrU2lnbmFsXShUaWNrU2lnbmFsKSB0byB0cmFjayBlbGFwc2VkIHRpY2tzIHdpdGhcblx0XHQgKiAgXHRcdGNvbXBsZXggYXV0b21hdGlvbiBjdXJ2ZXMuXG5cdFx0ICpcblx0XHQgKiBcdEBjb25zdHJ1Y3RvclxuXHQgICAgICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIGluaXRpYWwgZnJlcXVlbmN5IHRoYXQgdGhlIHNpZ25hbCB0aWNrcyBhdFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZyZXF1ZW5jeSddLCBUb25lLlRpY2tTb3VyY2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBiZSBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlICB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuVGlja1NpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzdGF0ZSB0aW1lbGluZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgb2Zmc2V0IHZhbHVlcyBvZiB0aGUgdGlja3Ncblx0XHRcdCAqIEB0eXBlIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgIC8vYWRkIHRoZSBmaXJzdCBldmVudFxuXHQgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUoMCwgMCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaWNrU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLmRlZmF1bHRzID0geyAnZnJlcXVlbmN5JzogMSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiwgXCJzdG9wcGVkXCIgb3IgXCJwYXVzZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaWNrU291cmNlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBjbG9jayBhdCB0aGUgZ2l2ZW4gdGltZS4gT3B0aW9uYWxseSBwYXNzIGluIGFuIG9mZnNldFxuXHRcdCAqICBvZiB3aGVyZSB0byBzdGFydCB0aGUgdGljayBjb3VudGVyIGZyb20uXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgdGltZSAgICBUaGUgdGltZSB0aGUgY2xvY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7VGlja3M9MH0gb2Zmc2V0IFRoZSBudW1iZXIgb2YgdGlja3MgdG8gc3RhcnQgdGhlIHNvdXJjZSBhdFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5UaWNrU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKG9mZnNldCkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUob2Zmc2V0LCB0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgY2xvY2suIFN0b3BwaW5nIHRoZSBjbG9jayByZXNldHMgdGhlIHRpY2sgY291bnRlciB0byAwLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBjbG9jay5zdG9wKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL2NhbmNlbCB0aGUgcHJldmlvdXMgc3RvcFxuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3N0YXRlLmdldCh0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LnRpbWUgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmNhbmNlbChldmVudC50aW1lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbChldmVudC50aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXVzZSB0aGUgY2xvY2suIFBhdXNpbmcgZG9lcyBub3QgcmVzZXQgdGhlIHRpY2sgY291bnRlci5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5QYXVzZWQsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIHN0YXJ0L3N0b3AvcGF1c2UgYW5kIHNldFRpY2tBdFRpbWUgZXZlbnRzIHNjaGVkdWxlZCBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdG8gY2xlYXIgdGhlIGV2ZW50cyBhZnRlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGVsYXBzZWQgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIGdldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgVGhlIG51bWJlciBvZiB0aWNrc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBzdG9wRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXRMYXN0U3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICAvL3RoaXMgZXZlbnQgYWxsb3dzIGZvckVhY2hCZXR3ZWVuIHRvIGl0ZXJhdGUgdW50aWwgdGhlIGN1cnJlbnQgdGltZVxuXHQgICAgICAgIHZhciB0bXBFdmVudCA9IHtcblx0ICAgICAgICAgICAgc3RhdGU6IFRvbmUuU3RhdGUuUGF1c2VkLFxuXHQgICAgICAgICAgICB0aW1lOiB0aW1lXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5hZGQodG1wRXZlbnQpO1xuXHQgICAgICAgIC8va2VlcCB0cmFjayBvZiB0aGUgcHJldmlvdXMgb2Zmc2V0IGV2ZW50XG5cdCAgICAgICAgdmFyIGxhc3RTdGF0ZSA9IHN0b3BFdmVudDtcblx0ICAgICAgICB2YXIgZWxhcHNlZFRpY2tzID0gMDtcblx0ICAgICAgICAvL2l0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIGV2ZW50cyBzaW5jZSB0aGUgbGFzdCBzdG9wXG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RvcEV2ZW50LnRpbWUsIHRpbWUgKyB0aGlzLnNhbXBsZVRpbWUsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIHZhciBwZXJpb2RTdGFydFRpbWUgPSBsYXN0U3RhdGUudGltZTtcblx0ICAgICAgICAgICAgLy9pZiB0aGVyZSBpcyBhbiBvZmZzZXQgZXZlbnQgaW4gdGhpcyBwZXJpb2QgdXNlIHRoYXRcblx0ICAgICAgICAgICAgdmFyIG9mZnNldEV2ZW50ID0gdGhpcy5fdGlja09mZnNldC5nZXQoZS50aW1lKTtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldEV2ZW50LnRpbWUgPj0gbGFzdFN0YXRlLnRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRUaWNrcyA9IG9mZnNldEV2ZW50LnRpY2tzO1xuXHQgICAgICAgICAgICAgICAgcGVyaW9kU3RhcnRUaW1lID0gb2Zmc2V0RXZlbnQudGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAobGFzdFN0YXRlLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgZS5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICBlbGFwc2VkVGlja3MgKz0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUoZS50aW1lKSAtIHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKHBlcmlvZFN0YXJ0VGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbGFzdFN0YXRlID0gZTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIC8vcmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZXZlbnRcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5yZW1vdmUodG1wRXZlbnQpO1xuXHQgICAgICAgIC8vcmV0dXJuIHRoZSB0aWNrc1xuXHQgICAgICAgIHJldHVybiBlbGFwc2VkVGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkLiBTdGFydHMgY291bnRpbmcgYXQgMFxuXHRcdCAqICBhbmQgaW5jcmVtZW50cyBhZnRlciB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuIFJldHVybnMgLTEgd2hlbiBzdG9wcGVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaWNrU291cmNlI1xuXHRcdCAqICBAbmFtZSB0aWNrc1xuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZSwgJ3RpY2tzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUaWNrc0F0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSh0LCB0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSBzaW5jZSB0aWNrcz0wIHRoYXQgdGhlIFRpY2tTb3VyY2UgaGFzIGJlZW4gcnVubmluZy4gQWNjb3VudHNcblx0XHQgKiAgZm9yIHRlbXBvIGN1cnZlc1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaWNrU291cmNlI1xuXHRcdCAqICBAbmFtZSBzZWNvbmRzXG5cdFx0ICogIEB0eXBlIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUsICdzZWNvbmRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWNvbmRzQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocykge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5mcmVxdWVuY3kudGltZVRvVGlja3Mocywgbm93KTtcblx0ICAgICAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSh0aWNrcywgbm93KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGVsYXBzZWQgc2Vjb25kcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSBlbGFwc2VkIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9ICBUaGUgbnVtYmVyIG9mIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRTZWNvbmRzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIHN0b3BFdmVudCA9IHRoaXMuX3N0YXRlLmdldExhc3RTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIC8vdGhpcyBldmVudCBhbGxvd3MgZm9yRWFjaEJldHdlZW4gdG8gaXRlcmF0ZSB1bnRpbCB0aGUgY3VycmVudCB0aW1lXG5cdCAgICAgICAgdmFyIHRtcEV2ZW50ID0ge1xuXHQgICAgICAgICAgICBzdGF0ZTogVG9uZS5TdGF0ZS5QYXVzZWQsXG5cdCAgICAgICAgICAgIHRpbWU6IHRpbWVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9rZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBvZmZzZXQgZXZlbnRcblx0ICAgICAgICB2YXIgbGFzdFN0YXRlID0gc3RvcEV2ZW50O1xuXHQgICAgICAgIHZhciBlbGFwc2VkU2Vjb25kcyA9IDA7XG5cdCAgICAgICAgLy9pdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBldmVudHMgc2luY2UgdGhlIGxhc3Qgc3RvcFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hCZXR3ZWVuKHN0b3BFdmVudC50aW1lLCB0aW1lICsgdGhpcy5zYW1wbGVUaW1lLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICB2YXIgcGVyaW9kU3RhcnRUaW1lID0gbGFzdFN0YXRlLnRpbWU7XG5cdCAgICAgICAgICAgIC8vaWYgdGhlcmUgaXMgYW4gb2Zmc2V0IGV2ZW50IGluIHRoaXMgcGVyaW9kIHVzZSB0aGF0XG5cdCAgICAgICAgICAgIHZhciBvZmZzZXRFdmVudCA9IHRoaXMuX3RpY2tPZmZzZXQuZ2V0KGUudGltZSk7XG5cdCAgICAgICAgICAgIGlmIChvZmZzZXRFdmVudC50aW1lID49IGxhc3RTdGF0ZS50aW1lKSB7XG5cdCAgICAgICAgICAgICAgICBlbGFwc2VkU2Vjb25kcyA9IG9mZnNldEV2ZW50LnNlY29uZHM7XG5cdCAgICAgICAgICAgICAgICBwZXJpb2RTdGFydFRpbWUgPSBvZmZzZXRFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChsYXN0U3RhdGUuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBlLnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRTZWNvbmRzICs9IGUudGltZSAtIHBlcmlvZFN0YXJ0VGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBsYXN0U3RhdGUgPSBlO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIHRlbXBvcmFyeSBldmVudFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLnJlbW92ZSh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIHRpY2tzXG5cdCAgICAgICAgcmV0dXJuIGVsYXBzZWRTZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFNldCB0aGUgY2xvY2sncyB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgdmFsdWUgdG8gc2V0XG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBzZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRpY2tTb3VyY2V9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuc2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGlja3MsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldC5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldC5hZGQoe1xuXHQgICAgICAgICAgICAndGltZSc6IHRpbWUsXG5cdCAgICAgICAgICAgICd0aWNrcyc6IHRpY2tzLFxuXHQgICAgICAgICAgICAnc2Vjb25kcyc6IHRoaXMuZnJlcXVlbmN5LmdldER1cmF0aW9uT2ZUaWNrcyh0aWNrcywgdGltZSlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgc2NoZWR1bGVkIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm4gIHtTdHJpbmd9ICBUaGUgbmFtZSBvZiB0aGUgc3RhdGUgaW5wdXQgaW4gc2V0U3RhdGVBdFRpbWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0YXJ0KFwiKzAuMVwiKTtcblx0XHQgKiBzb3VyY2UuZ2V0U3RhdGVBdFRpbWUoXCIrMC4xXCIpOyAvL3JldHVybnMgXCJzdGFydGVkXCJcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSB0aW1lIG9mIHRoZSBnaXZlbiB0aWNrLiBUaGUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ICogaXMgd2hlbiB0byB0ZXN0IGJlZm9yZS4gU2luY2UgdGlja3MgY2FuIGJlIHNldCAod2l0aCBzZXRUaWNrc0F0VGltZSlcblx0XHQgKiB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgdGltZXMgZm9yIGEgZ2l2ZW4gdGljayB2YWx1ZS4gXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIG51bWJlci5cblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gYmVmb3JlIFdoZW4gdG8gbWVhc3VyZSB0aGUgdGljayB2YWx1ZSBmcm9tLiBcblx0XHQgKiBAcmV0dXJuIHtUaW1lfSAgICAgICBUaGUgdGltZSBvZiB0aGUgdGlja1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRUaW1lT2ZUaWNrID0gZnVuY3Rpb24gKHRpY2ssIGJlZm9yZSkge1xuXHQgICAgICAgIGJlZm9yZSA9IFRvbmUuZGVmYXVsdEFyZyhiZWZvcmUsIHRoaXMubm93KCkpO1xuXHQgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl90aWNrT2Zmc2V0LmdldChiZWZvcmUpO1xuXHQgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3N0YXRlLmdldChiZWZvcmUpO1xuXHQgICAgICAgIHZhciBzdGFydFRpbWUgPSBNYXRoLm1heChvZmZzZXQudGltZSwgZXZlbnQudGltZSk7XG5cdCAgICAgICAgdmFyIGFic29sdXRlVGlja3MgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShzdGFydFRpbWUpICsgdGljayAtIG9mZnNldC50aWNrcztcblx0ICAgICAgICByZXR1cm4gdGhpcy5mcmVxdWVuY3kuZ2V0VGltZU9mVGljayhhYnNvbHV0ZVRpY2tzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW52b2tlIHRoZSBjYWxsYmFjayBldmVudCBhdCBhbGwgc2NoZWR1bGVkIHRpY2tzIGJldHdlZW4gdGhlIFxuXHRcdCAqICBzdGFydCB0aW1lIGFuZCB0aGUgZW5kIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgc3RhcnRUaW1lICBUaGUgYmVnaW5uaW5nIG9mIHRoZSBzZWFyY2ggcmFuZ2Vcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgZW5kVGltZSAgICBUaGUgZW5kIG9mIHRoZSBzZWFyY2ggcmFuZ2Vcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb248VGltZSxUaWNrcz59ICBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBlYWNoIHRpY2tcblx0XHQgKiAgQHJldHVybiAge1RvbmUuVGlja1NvdXJjZX0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5mb3JFYWNoVGlja0JldHdlZW4gPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vb25seSBpdGVyYXRlIHRocm91Z2ggdGhlIHNlY3Rpb25zIHdoZXJlIGl0IGlzIFwic3RhcnRlZFwiXG5cdCAgICAgICAgdmFyIGxhc3RTdGF0ZUV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RhcnRUaW1lLCBlbmRUaW1lLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKGxhc3RTdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgZXZlbnQuc3RhdGUgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5mb3JFYWNoVGlja0JldHdlZW4oTWF0aC5tYXgobGFzdFN0YXRlRXZlbnQudGltZSwgc3RhcnRUaW1lKSwgZXZlbnQudGltZSAtIHRoaXMuc2FtcGxlVGltZSwgY2FsbGJhY2spO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGxhc3RTdGF0ZUV2ZW50ID0gZXZlbnQ7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICBzdGFydFRpbWUgPSBNYXRoLm1heChsYXN0U3RhdGVFdmVudC50aW1lLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIGlmIChsYXN0U3RhdGVFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIHRoaXMuX3N0YXRlKSB7XG5cdCAgICAgICAgICAgIC8vZmlndXJlIG91dCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBmcmVxdWVuY3kgdGlja3MgYW5kIHRoZSBcblx0ICAgICAgICAgICAgdmFyIHN0YXJ0VGlja3MgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3NBdFN0YXJ0ID0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUobGFzdFN0YXRlRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBkaWZmID0gc3RhcnRUaWNrcyAtIHRpY2tzQXRTdGFydDtcblx0ICAgICAgICAgICAgdmFyIG9mZnNldCA9IGRpZmYgJSAxO1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSAxIC0gb2Zmc2V0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBuZXh0VGlja1RpbWUgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaW1lT2ZUaWNrKHN0YXJ0VGlja3MgKyBvZmZzZXQpO1xuXHQgICAgICAgICAgICB2YXIgZXJyb3IgPSBudWxsO1xuXHQgICAgICAgICAgICB3aGlsZSAobmV4dFRpY2tUaW1lIDwgZW5kVGltZSAmJiB0aGlzLl9zdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXh0VGlja1RpbWUsIE1hdGgucm91bmQodGhpcy5nZXRUaWNrc0F0VGltZShuZXh0VGlja1RpbWUpKSk7XG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tUaW1lICs9IHRoaXMuZnJlcXVlbmN5LmdldER1cmF0aW9uT2ZUaWNrcygxLCBuZXh0VGlja1RpbWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChlcnJvcikge1xuXHQgICAgICAgICAgICB0aHJvdyBlcnJvcjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaWNrU291cmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc2FtcGxlIGFjY3VyYXRlIGNsb2NrIHdoaWNoIHByb3ZpZGVzIGEgY2FsbGJhY2sgYXQgdGhlIGdpdmVuIHJhdGUuXG5cdFx0ICogICAgICAgICAgV2hpbGUgdGhlIGNhbGxiYWNrIGlzIG5vdCBzYW1wbGUtYWNjdXJhdGUgKGl0IGlzIHN0aWxsIHN1c2NlcHRpYmxlIHRvXG5cdFx0ICogICAgICAgICAgbG9vc2UgSlMgdGltaW5nKSwgdGhlIHRpbWUgcGFzc2VkIGluIGFzIHRoZSBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2tcblx0XHQgKiAgICAgICAgICBpcyBwcmVjaXNlLiBGb3IgbW9zdCBhcHBsaWNhdGlvbnMsIGl0IGlzIGJldHRlciB0byB1c2UgVG9uZS5UcmFuc3BvcnRcblx0XHQgKiAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBDbG9jayBieSBpdHNlbGYgc2luY2UgeW91IGNhbiBzeW5jaHJvbml6ZSBtdWx0aXBsZSBjYWxsYmFja3MuXG5cdFx0ICpcblx0XHQgKiBcdEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqIFx0QHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2l0aCB0aGUgdGltZSBvZiB0aGUgYXVkaW8gZXZlbnRcblx0XHQgKiBcdEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHJhdGUgb2YgdGhlIGNhbGxiYWNrXG5cdFx0ICogXHRAZXhhbXBsZVxuXHRcdCAqIC8vdGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBhcHByb3hpbWF0ZWx5IG9uY2UgYSBzZWNvbmRcblx0XHQgKiAvL2FuZCB3aWxsIHByaW50IHRoZSB0aW1lIGV4YWN0bHkgb25jZSBhIHNlY29uZCBhcGFydC5cblx0XHQgKiB2YXIgY2xvY2sgPSBuZXcgVG9uZS5DbG9jayhmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKHRpbWUpO1xuXHRcdCAqIH0sIDEpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5DbG9jayk7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGludm9rZSBhdCB0aGUgc2NoZWR1bGVkIHRpY2suXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBuZXh0IHRpbWUgdGhlIGNhbGxiYWNrIGlzIHNjaGVkdWxlZC5cblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpY2sgY291bnRlclxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5UaWNrU291cmNlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlID0gbmV3IFRvbmUuVGlja1NvdXJjZShvcHRpb25zLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxhc3QgdGltZSB0aGUgbG9vcCBjYWxsYmFjayB3YXMgaW52b2tlZFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xhc3RVcGRhdGUgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByYXRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBzaG91bGQgYmUgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSAge0JQTX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX3RpY2tTb3VyY2UuZnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdmcmVxdWVuY3knKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3RhdGUgdGltZWxpbmVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZVN0YXRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG5ldyBUb25lLlRpbWVsaW5lU3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkKTtcblx0ICAgICAgICAvL2FkZCBhbiBpbml0aWFsIHN0YXRlXG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbG9vcCBmdW5jdGlvbiBib3VuZCB0byBpdHMgY29udGV4dC5cblx0XHRcdCAqICBUaGlzIGlzIG5lY2Vzc2FyeSB0byByZW1vdmUgdGhlIGV2ZW50IGluIHRoZSBlbmQuXG5cdFx0XHQgKiAgQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ib3VuZExvb3AgPSB0aGlzLl9sb29wLmJpbmQodGhpcyk7XG5cdCAgICAgICAgLy9iaW5kIGEgY2FsbGJhY2sgdG8gdGhlIHdvcmtlciB0aHJlYWRcblx0ICAgICAgICB0aGlzLmNvbnRleHQub24oJ3RpY2snLCB0aGlzLl9ib3VuZExvb3ApO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ2xvY2ssIFRvbmUuRW1pdHRlcik7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2suZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdmcmVxdWVuY3knOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiwgXCJzdG9wcGVkXCIgb3IgXCJwYXVzZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DbG9jayNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNsb2NrLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGNsb2NrIGF0IHRoZSBnaXZlbiB0aW1lLiBPcHRpb25hbGx5IHBhc3MgaW4gYW4gb2Zmc2V0XG5cdFx0ICogIG9mIHdoZXJlIHRvIHN0YXJ0IHRoZSB0aWNrIGNvdW50ZXIgZnJvbS5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICB0aW1lICAgIFRoZSB0aW1lIHRoZSBjbG9jayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtICB7VGlja3M9fSAgb2Zmc2V0ICBXaGVyZSB0aGUgdGljayBjb3VudGVyIHN0YXJ0cyBjb3VudGluZyBmcm9tLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5DbG9ja30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLnN0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgICAgIGlmICh0aW1lIDwgdGhpcy5fbGFzdFVwZGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGNsb2NrLiBTdG9wcGluZyB0aGUgY2xvY2sgcmVzZXRzIHRoZSB0aWNrIGNvdW50ZXIgdG8gMC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DbG9ja30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGNsb2NrLnN0b3AoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlLnN0b3AodGltZSk7XG5cdCAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9sYXN0VXBkYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RvcCcsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGF1c2UgdGhlIGNsb2NrLiBQYXVzaW5nIGRvZXMgbm90IHJlc2V0IHRoZSB0aWNrIGNvdW50ZXIuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBjbG9jayBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2xvY2t9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5QYXVzZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLnBhdXNlKHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGltZSA8IHRoaXMuX2xhc3RVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncGF1c2UnLCB0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuIFN0YXJ0cyBjb3VudGluZyBhdCAwXG5cdFx0ICogIGFuZCBpbmNyZW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC5cblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2xvY2sucHJvdG90eXBlLCAndGlja3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5nZXRUaWNrc0F0VGltZSh0aGlzLm5vdygpKSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UudGlja3MgPSB0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHNpbmNlIHRpY2tzPTAgdGhhdCB0aGUgQ2xvY2sgaGFzIGJlZW4gcnVubmluZy4gQWNjb3VudHNcblx0XHQgKiAgZm9yIHRlbXBvIGN1cnZlc1xuXHRcdCAqICBAdHlwZSB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNsb2NrLnByb3RvdHlwZSwgJ3NlY29uZHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLnNlY29uZHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc2Vjb25kcyA9IHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBlbGFwc2VkIHNlY29uZHMgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGdldCB0aGUgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfSAgVGhlIG51bWJlciBvZiBlbGFwc2VkIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLmdldFNlY29uZHNBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLmdldFNlY29uZHNBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgdGljayB2YWx1ZSB0byBzZXRcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIHNldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuQ2xvY2t9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnNldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpY2tzLCB0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5zZXRUaWNrc0F0VGltZSh0aWNrcywgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgIFRoZSB0aWNrIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZ2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgdGltZSBvZiB0aGUgbmV4dCB0aWNrXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIG51bWJlci5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBiZWZvcmUgXG5cdFx0ICogQHJldHVybiB7VG9uZS5DbG9ja30gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUubmV4dFRpY2tUaW1lID0gZnVuY3Rpb24gKG9mZnNldCwgd2hlbikge1xuXHQgICAgICAgIHdoZW4gPSB0aGlzLnRvU2Vjb25kcyh3aGVuKTtcblx0ICAgICAgICB2YXIgY3VycmVudFRpY2sgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHdoZW4pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLmdldFRpbWVPZlRpY2soY3VycmVudFRpY2sgKyBvZmZzZXQsIHdoZW4pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2NoZWR1bGluZyBsb29wLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuX2xvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHRoaXMuX2xhc3RVcGRhdGU7XG5cdCAgICAgICAgdmFyIGVuZFRpbWUgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHRoaXMuX2xhc3RVcGRhdGUgPSBlbmRUaW1lO1xuXHQgICAgICAgIGlmIChzdGFydFRpbWUgIT09IGVuZFRpbWUpIHtcblx0ICAgICAgICAgICAgLy90aGUgc3RhdGUgY2hhbmdlIGV2ZW50c1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdGFydFRpbWUsIGVuZFRpbWUsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgICAgICBzd2l0Y2ggKGUuc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgVG9uZS5TdGF0ZS5TdGFydGVkOlxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl90aWNrU291cmNlLmdldFRpY2tzQXRUaW1lKGUudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIGUudGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgVG9uZS5TdGF0ZS5TdG9wcGVkOlxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChlLnRpbWUgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgZS50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlIFRvbmUuU3RhdGUuUGF1c2VkOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncGF1c2UnLCBlLnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgICAgICAvL3RoZSB0aWNrIGNhbGxiYWNrc1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLmZvckVhY2hUaWNrQmV0d2VlbihzdGFydFRpbWUsIGVuZFRpbWUsIGZ1bmN0aW9uICh0aW1lLCB0aWNrcykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB0aWNrcyk7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBzY2hlZHVsZWQgc3RhdGUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybiAge1N0cmluZ30gIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBpbnB1dCBpbiBzZXRTdGF0ZUF0VGltZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBjbG9jay5zdGFydChcIiswLjFcIik7XG5cdFx0ICogY2xvY2suZ2V0U3RhdGVBdFRpbWUoXCIrMC4xXCIpOyAvL3JldHVybnMgXCJzdGFydGVkXCJcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLmdldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DbG9ja30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQub2ZmKCd0aWNrJywgdGhpcy5fYm91bmRMb29wKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2JvdW5kTG9vcCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSBJbmZpbml0eTtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNsb2NrO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU2ltaWxhciB0byBUb25lLlRpbWVsaW5lLCBidXQgYWxsIGV2ZW50cyByZXByZXNlbnRcblx0XHQgKiAgICAgICAgIGludGVydmFscyB3aXRoIGJvdGggXCJ0aW1lXCIgYW5kIFwiZHVyYXRpb25cIiB0aW1lcy4gVGhlXG5cdFx0ICogICAgICAgICBldmVudHMgYXJlIHBsYWNlZCBpbiBhIHRyZWUgc3RydWN0dXJlIG9wdGltaXplZFxuXHRcdCAqICAgICAgICAgZm9yIHF1ZXJ5aW5nIGFuIGludGVyc2VjdGlvbiBwb2ludCB3aXRoIHRoZSB0aW1lbGluZVxuXHRcdCAqICAgICAgICAgZXZlbnRzLiBJbnRlcm5hbGx5IHVzZXMgYW4gW0ludGVydmFsIFRyZWVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ludGVydmFsX3RyZWUpXG5cdFx0ICogICAgICAgICB0byByZXByZXNlbnQgdGhlIGRhdGEuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcm9vdCBub2RlIG9mIHRoZSBpbnRldmFsIHRyZWVcblx0XHRcdCAqICBAdHlwZSAge0ludGVydmFsTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcm9vdCA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgS2VlcCB0cmFjayBvZiB0aGUgbGVuZ3RoIG9mIHRoZSB0aW1lbGluZS5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkludGVydmFsVGltZWxpbmUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBldmVudCB0byBhZGQgdG8gdGhlIHRpbWVsaW5lLiBBbGwgZXZlbnRzIG11c3Rcblx0XHQgKiAgaGF2ZSBhIHRpbWUgYW5kIGR1cmF0aW9uIHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gYWRkIHRvIHRoZSB0aW1lbGluZVxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKGV2ZW50LnRpbWUpIHx8IFRvbmUuaXNVbmRlZihldmVudC5kdXJhdGlvbikpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkludGVydmFsVGltZWxpbmU6IGV2ZW50cyBtdXN0IGhhdmUgdGltZSBhbmQgZHVyYXRpb24gcGFyYW1ldGVycycpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBldmVudC50aW1lID0gZXZlbnQudGltZS52YWx1ZU9mKCk7XG5cdCAgICAgICAgdmFyIG5vZGUgPSBuZXcgSW50ZXJ2YWxOb2RlKGV2ZW50LnRpbWUsIGV2ZW50LnRpbWUgKyBldmVudC5kdXJhdGlvbiwgZXZlbnQpO1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBub2RlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QuaW5zZXJ0KG5vZGUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9sZW5ndGgrKztcblx0ICAgICAgICAvLyBSZXN0cnVjdHVyZSB0cmVlIHRvIGJlIGJhbGFuY2VkXG5cdCAgICAgICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgbm9kZS51cGRhdGVIZWlnaHQoKTtcblx0ICAgICAgICAgICAgbm9kZS51cGRhdGVNYXgoKTtcblx0ICAgICAgICAgICAgdGhpcy5fcmViYWxhbmNlKG5vZGUpO1xuXHQgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gcmVtb3ZlIGZyb20gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkludGVydmFsVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoKGV2ZW50LnRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBub2RlID0gcmVzdWx0c1tpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChub2RlLmV2ZW50ID09PSBldmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZU5vZGUobm9kZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGVuZ3RoLS07XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5JbnRlcnZhbFRpbWVsaW5lI1xuXHRcdCAqICBAbmFtZSBsZW5ndGhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgZXZlbnRzIHdob3NlIHRpbWUgdGltZSBpcyBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5yZW1vdmUoZXZlbnQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgcm9vdCBub2RlIGFzIHRoZSBnaXZlbiBub2RlXG5cdFx0ICogIEBwYXJhbSB7SW50ZXJ2YWxOb2RlfSBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9zZXRSb290ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB0aGlzLl9yb290ID0gbm9kZTtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnBhcmVudCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXBsYWNlIHRoZSByZWZlcmVuY2VzIHRvIHRoZSBub2RlIGluIHRoZSBub2RlJ3MgcGFyZW50XG5cdFx0ICogIHdpdGggdGhlIHJlcGxhY2VtZW50IG5vZGUuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgcmVwbGFjZW1lbnRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JlcGxhY2VOb2RlSW5QYXJlbnQgPSBmdW5jdGlvbiAobm9kZSwgcmVwbGFjZW1lbnQpIHtcblx0ICAgICAgICBpZiAobm9kZS5wYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKG5vZGUuaXNMZWZ0Q2hpbGQoKSkge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQubGVmdCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQucmlnaHQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9yZWJhbGFuY2Uobm9kZS5wYXJlbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocmVwbGFjZW1lbnQpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIHRoZSBub2RlIGZyb20gdGhlIHRyZWUgYW5kIHJlcGxhY2UgaXQgd2l0aFxuXHRcdCAqICBhIHN1Y2Nlc3NvciB3aGljaCBmb2xsb3dzIHRoZSBzY2hlbWEuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JlbW92ZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmIChub2RlLmxlZnQgPT09IG51bGwgJiYgbm9kZS5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIG51bGwpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobm9kZS5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIG5vZGUubGVmdCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlLmxlZnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmVwbGFjZU5vZGVJblBhcmVudChub2RlLCBub2RlLnJpZ2h0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgYmFsYW5jZSA9IG5vZGUuZ2V0QmFsYW5jZSgpO1xuXHQgICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQsIHRlbXA7XG5cdCAgICAgICAgICAgIGlmIChiYWxhbmNlID4gMCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKG5vZGUubGVmdC5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnJpZ2h0ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5sZWZ0LnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZXBsYWNlbWVudC5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5wYXJlbnQucmlnaHQgPSByZXBsYWNlbWVudC5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudC5wYXJlbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQubGVmdCA9IG5vZGUubGVmdDtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5yaWdodCA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5yaWdodC5sZWZ0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5sZWZ0ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgdGVtcCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLnJpZ2h0LmxlZnQ7XG5cdCAgICAgICAgICAgICAgICB3aGlsZSAocmVwbGFjZW1lbnQubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQubGVmdDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnBhcmVudCA9IHJlcGxhY2VtZW50LnBhcmVudDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnBhcmVudC5sZWZ0ID0gcmVwbGFjZW1lbnQucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQucGFyZW50O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQubGVmdCA9IG5vZGUubGVmdDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnJpZ2h0ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAobm9kZS5wYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChub2RlLmlzTGVmdENoaWxkKCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5sZWZ0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50LnJpZ2h0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zZXRSb290KHJlcGxhY2VtZW50KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIHJlcGxhY2VtZW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcmViYWxhbmNlKHRlbXApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBub2RlLmRpc3Bvc2UoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUm90YXRlIHRoZSB0cmVlIHRvIHRoZSBsZWZ0XG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JvdGF0ZUxlZnQgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcblx0ICAgICAgICB2YXIgaXNMZWZ0Q2hpbGQgPSBub2RlLmlzTGVmdENoaWxkKCk7XG5cdCAgICAgICAgLy8gTWFrZSBub2RlLnJpZ2h0IHRoZSBuZXcgcm9vdCBvZiB0aGlzIHN1YiB0cmVlIChpbnN0ZWFkIG9mIG5vZGUpXG5cdCAgICAgICAgdmFyIHBpdm90Tm9kZSA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgbm9kZS5yaWdodCA9IHBpdm90Tm9kZS5sZWZ0O1xuXHQgICAgICAgIHBpdm90Tm9kZS5sZWZ0ID0gbm9kZTtcblx0ICAgICAgICBpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGlmIChpc0xlZnRDaGlsZCkge1xuXHQgICAgICAgICAgICAgICAgcGFyZW50LmxlZnQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQucmlnaHQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSb290KHBpdm90Tm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSb3RhdGUgdGhlIHRyZWUgdG8gdGhlIHJpZ2h0XG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JvdGF0ZVJpZ2h0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cdCAgICAgICAgdmFyIGlzTGVmdENoaWxkID0gbm9kZS5pc0xlZnRDaGlsZCgpO1xuXHQgICAgICAgIC8vIE1ha2Ugbm9kZS5sZWZ0IHRoZSBuZXcgcm9vdCBvZiB0aGlzIHN1YiB0cmVlIChpbnN0ZWFkIG9mIG5vZGUpXG5cdCAgICAgICAgdmFyIHBpdm90Tm9kZSA9IG5vZGUubGVmdDtcblx0ICAgICAgICBub2RlLmxlZnQgPSBwaXZvdE5vZGUucmlnaHQ7XG5cdCAgICAgICAgcGl2b3ROb2RlLnJpZ2h0ID0gbm9kZTtcblx0ICAgICAgICBpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGlmIChpc0xlZnRDaGlsZCkge1xuXHQgICAgICAgICAgICAgICAgcGFyZW50LmxlZnQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQucmlnaHQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSb290KHBpdm90Tm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBCYWxhbmNlIHRoZSBCU1Rcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcmViYWxhbmNlID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB2YXIgYmFsYW5jZSA9IG5vZGUuZ2V0QmFsYW5jZSgpO1xuXHQgICAgICAgIGlmIChiYWxhbmNlID4gMSkge1xuXHQgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LmdldEJhbGFuY2UoKSA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZUxlZnQobm9kZS5sZWZ0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZVJpZ2h0KG5vZGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChiYWxhbmNlIDwgLTEpIHtcblx0ICAgICAgICAgICAgaWYgKG5vZGUucmlnaHQuZ2V0QmFsYW5jZSgpID4gMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlUmlnaHQobm9kZS5yaWdodCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVMZWZ0KG5vZGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgYW4gZXZlbnQgd2hvc2UgdGltZSBhbmQgZHVyYXRpb24gc3BhbiB0aGUgZ2l2ZSB0aW1lLiBXaWxsXG5cdFx0ICogIHJldHVybiB0aGUgbWF0Y2ggd2hvc2UgXCJ0aW1lXCIgdmFsdWUgaXMgY2xvc2VzdCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCB0byBhZGQgdG8gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBUaGUgZXZlbnQgd2hpY2ggc3BhbnMgdGhlIGRlc2lyZWQgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoKHRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWF4ID0gcmVzdWx0c1swXTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzW2ldLmxvdyA+IG1heC5sb3cpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbWF4ID0gcmVzdWx0c1tpXTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbWF4LmV2ZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIGFsbE5vZGVzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgICAgIGFsbE5vZGVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXYgPSBhbGxOb2Rlc1tpXS5ldmVudDtcblx0ICAgICAgICAgICAgICAgIGlmIChldikge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGluIHdoaWNoIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIG92ZXJsYXBzIHdpdGggdGhlIHRpbWUgYW5kIGR1cmF0aW9uIHRpbWUgb2YgdGhlIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBvdmVybGFwcGluZ1xuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkludGVydmFsVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoKHRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gcmVzdWx0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ID0gcmVzdWx0c1tpXS5ldmVudDtcblx0ICAgICAgICAgICAgICAgIGlmIChldikge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGluIHdoaWNoIHRoZSB0aW1lIGlzIGdyZWF0ZXJcblx0XHQgKiAgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoRnJvbSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoQWZ0ZXIodGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSByZXN1bHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXYgPSByZXN1bHRzW2ldLmV2ZW50O1xuXHQgICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBhbGxOb2RlcyA9IFtdO1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgICAgIGFsbE5vZGVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGFsbE5vZGVzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgYWxsTm9kZXMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Jvb3QgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdElOVEVSVkFMIE5PREUgSEVMUEVSXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXByZXNlbnRzIGEgbm9kZSBpbiB0aGUgYmluYXJ5IHNlYXJjaCB0cmVlLCB3aXRoIHRoZSBhZGRpdGlvblxuXHRcdCAqICBvZiBhIFwiaGlnaFwiIHZhbHVlIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHRoZSBoaWdoZXN0IHZhbHVlIG9mXG5cdFx0ICogIGl0cyBjaGlsZHJlbi5cblx0XHQgKiAgUmVmZXJlbmNlczpcblx0XHQgKiAgaHR0cHM6Ly9icm9va25vdmFrLndvcmRwcmVzcy5jb20vMjAxMy8xMi8wNy9hdWdtZW50ZWQtaW50ZXJ2YWwtdHJlZS1pbi1jL1xuXHRcdCAqICBodHRwOi8vd3d3Lm1pZi52dS5sdC9+dmFsZGFzL0FMR09SSVRNQUkvTElURVJBVFVSQS9Db3JtZW4vQ29ybWVuLnBkZlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gbG93XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBoaWdoXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgSW50ZXJ2YWxOb2RlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgZXZlbnQpIHtcblx0ICAgICAgICAvL3RoZSBldmVudCBjb250YWluZXJcblx0ICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdCAgICAgICAgLy90aGUgbG93IHZhbHVlXG5cdCAgICAgICAgdGhpcy5sb3cgPSBsb3c7XG5cdCAgICAgICAgLy90aGUgaGlnaCB2YWx1ZVxuXHQgICAgICAgIHRoaXMuaGlnaCA9IGhpZ2g7XG5cdCAgICAgICAgLy90aGUgaGlnaCB2YWx1ZSBmb3IgdGhpcyBhbmQgYWxsIGNoaWxkIG5vZGVzXG5cdCAgICAgICAgdGhpcy5tYXggPSB0aGlzLmhpZ2g7XG5cdCAgICAgICAgLy90aGUgbm9kZXMgdG8gdGhlIGxlZnRcblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbnVsbDtcblx0ICAgICAgICAvL3RoZSBub2RlcyB0byB0aGUgcmlnaHRcblx0ICAgICAgICB0aGlzLl9yaWdodCA9IG51bGw7XG5cdCAgICAgICAgLy90aGUgcGFyZW50IG5vZGVcblx0ICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cdCAgICAgICAgLy90aGUgbnVtYmVyIG9mIGNoaWxkIG5vZGVzXG5cdCAgICAgICAgdGhpcy5oZWlnaHQgPSAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnNlcnQgYSBub2RlIGludG8gdGhlIGNvcnJlY3Qgc3BvdCBpbiB0aGUgdHJlZVxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgaWYgKG5vZGUubG93IDw9IHRoaXMubG93KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmxlZnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGVmdCA9IG5vZGU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmxlZnQuaW5zZXJ0KG5vZGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQgPSBub2RlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQuaW5zZXJ0KG5vZGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2VhcmNoIHRoZSB0cmVlIGZvciBub2RlcyB3aGljaCBvdmVybGFwXG5cdFx0ICogIHdpdGggdGhlIGdpdmVuIHBvaW50XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHBvaW50ICBUaGUgcG9pbnQgdG8gcXVlcnlcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICByZXN1bHRzICBUaGUgYXJyYXkgdG8gcHV0IHRoZSByZXN1bHRzXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnNlYXJjaCA9IGZ1bmN0aW9uIChwb2ludCwgcmVzdWx0cykge1xuXHQgICAgICAgIC8vIElmIHAgaXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSByaWdodG1vc3QgcG9pbnQgb2YgYW55IGludGVydmFsXG5cdCAgICAgICAgLy8gaW4gdGhpcyBub2RlIGFuZCBhbGwgY2hpbGRyZW4sIHRoZXJlIHdvbid0IGJlIGFueSBtYXRjaGVzLlxuXHQgICAgICAgIGlmIChwb2ludCA+IHRoaXMubWF4KSB7XG5cdCAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gU2VhcmNoIGxlZnQgY2hpbGRyZW5cblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubGVmdC5zZWFyY2gocG9pbnQsIHJlc3VsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBDaGVjayB0aGlzIG5vZGVcblx0ICAgICAgICBpZiAodGhpcy5sb3cgPD0gcG9pbnQgJiYgdGhpcy5oaWdoID4gcG9pbnQpIHtcblx0ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBJZiBwIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSB0aW1lIG9mIHRoaXMgaW50ZXJ2YWwsXG5cdCAgICAgICAgLy8gdGhlbiBpdCBjYW4ndCBiZSBpbiBhbnkgY2hpbGQgdG8gdGhlIHJpZ2h0LlxuXHQgICAgICAgIGlmICh0aGlzLmxvdyA+IHBvaW50KSB7XG5cdCAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gU2VhcmNoIHJpZ2h0IGNoaWxkcmVuXG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC5zZWFyY2gocG9pbnQsIHJlc3VsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2VhcmNoIHRoZSB0cmVlIGZvciBub2RlcyB3aGljaCBhcmUgbGVzc1xuXHRcdCAqICB0aGFuIHRoZSBnaXZlbiBwb2ludFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBwb2ludCAgVGhlIHBvaW50IHRvIHF1ZXJ5XG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgcmVzdWx0cyAgVGhlIGFycmF5IHRvIHB1dCB0aGUgcmVzdWx0c1xuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5zZWFyY2hBZnRlciA9IGZ1bmN0aW9uIChwb2ludCwgcmVzdWx0cykge1xuXHQgICAgICAgIC8vIENoZWNrIHRoaXMgbm9kZVxuXHQgICAgICAgIGlmICh0aGlzLmxvdyA+PSBwb2ludCkge1xuXHQgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcyk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGVmdC5zZWFyY2hBZnRlcihwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gc2VhcmNoIHRoZSByaWdodCBzaWRlXG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC5zZWFyY2hBZnRlcihwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoaXMgZWxlbWVudCBhbmQgYm90aCBpdCdzIGJyYW5jaGVzXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2tcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUudHJhdmVyc2UgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubGVmdC50cmF2ZXJzZShjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQudHJhdmVyc2UoY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVXBkYXRlIHRoZSBoZWlnaHQgb2YgdGhlIG5vZGVcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUudXBkYXRlSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwgJiYgdGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLmhlaWdodCA9IE1hdGgubWF4KHRoaXMubGVmdC5oZWlnaHQsIHRoaXMucmlnaHQuaGVpZ2h0KSArIDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yaWdodC5oZWlnaHQgKyAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5sZWZ0LmhlaWdodCArIDE7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSAwO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVXBkYXRlIHRoZSBoZWlnaHQgb2YgdGhlIG5vZGVcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUudXBkYXRlTWF4ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMubWF4ID0gdGhpcy5oaWdoO1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5tYXggPSBNYXRoLm1heCh0aGlzLm1heCwgdGhpcy5sZWZ0Lm1heCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubWF4ID0gTWF0aC5tYXgodGhpcy5tYXgsIHRoaXMucmlnaHQubWF4KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBiYWxhbmNlIGlzIGhvdyB0aGUgbGVhZnMgYXJlIGRpc3RyaWJ1dGVkIG9uIHRoZSBub2RlXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBOZWdhdGl2ZSBudW1iZXJzIGFyZSBiYWxhbmNlZCB0byB0aGUgcmlnaHRcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuZ2V0QmFsYW5jZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgYmFsYW5jZSA9IDA7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCAmJiB0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGJhbGFuY2UgPSB0aGlzLmxlZnQuaGVpZ2h0IC0gdGhpcy5yaWdodC5oZWlnaHQ7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgYmFsYW5jZSA9IHRoaXMubGVmdC5oZWlnaHQgKyAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBiYWxhbmNlID0gLSh0aGlzLnJpZ2h0LmhlaWdodCArIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gYmFsYW5jZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhpcyBub2RlIGlzIHRoZSBsZWZ0IGNoaWxkXG5cdFx0ICogIG9mIGl0cyBwYXJlbnRcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuaXNMZWZ0Q2hpbGQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50ICE9PSBudWxsICYmIHRoaXMucGFyZW50LmxlZnQgPT09IHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGdldC9zZXQgdGhlIGxlZnQgbm9kZVxuXHRcdCAqICBAdHlwZSB7SW50ZXJ2YWxOb2RlfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludGVydmFsTm9kZS5wcm90b3R5cGUsICdsZWZ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGVmdDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGVmdCA9IG5vZGU7XG5cdCAgICAgICAgICAgIGlmIChub2RlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVIZWlnaHQoKTtcblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVNYXgoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBnZXQvc2V0IHRoZSByaWdodCBub2RlXG5cdFx0ICogIEB0eXBlIHtJbnRlcnZhbE5vZGV9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxOb2RlLnByb3RvdHlwZSwgJ3JpZ2h0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmlnaHQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JpZ2h0ID0gbm9kZTtcblx0ICAgICAgICAgICAgaWYgKG5vZGUgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gdGhpcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZUhlaWdodCgpO1xuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZU1heCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIG51bGwgb3V0IHJlZmVyZW5jZXMuXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmV2ZW50ID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRFTkQgSU5URVJWQUwgTk9ERSBIRUxQRVJcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgcmV0dXJuIFRvbmUuSW50ZXJ2YWxUaW1lbGluZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRpY2tzIGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIFRpbWUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgVG9uZS5UaWNrcyBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0IHRoZSBgbmV3YCBrZXl3b3JkLiBUb25lLlRpY2tzIGNhbiBiZSBwYXNzZWRcblx0XHQgKiAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBvZiBhbnkgbWV0aG9kIHdoaWNoIHRha2VzIHRpbWUgYXMgYW4gYXJndW1lbnQuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UcmFuc3BvcnRUaW1lfVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHQgPSBUb25lLlRpY2tzKFwiNG5cIik7Ly9hIHF1YXJ0ZXIgbm90ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcyA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRpY2tzKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0VGltZS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaWNrcyh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaWNrcywgVG9uZS5UcmFuc3BvcnRUaW1lKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB1bml0cyBpZiBub25lIGFyZSBnaXZlbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAnaSc7XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGN1cnJlbnQgdGltZSBpbiB0aGUgZ2l2ZW4gdW5pdHNcblx0XHQgKiBAcmV0dXJuIHtUaWNrc31cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX25vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQudGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9nZXRQUFEoKSAqIGJlYXRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl9zZWNvbmRzVG9Vbml0cyA9IGZ1bmN0aW9uIChzZWNvbmRzKSB7XG5cdCAgICAgICAgcmV0dXJuIHNlY29uZHMgLyAoNjAgLyB0aGlzLl9nZXRCcG0oKSkgKiB0aGlzLl9nZXRQUFEoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gdGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS50b1RpY2tzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgLyB0aGlzLl9nZXRQUFEoKSAqICg2MCAvIHRoaXMuX2dldEJwbSgpKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaWNrcztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyYW5zcG9ydEV2ZW50IGlzIGFuIGludGVybmFsIGNsYXNzIHVzZWQgYnkgKFRvbmUuVHJhbnNwb3J0KVtUcmFuc3BvcnRdXG5cdFx0ICogICAgICAgICB0byBzY2hlZHVsZSBldmVudHMuIERvIG5vIGludm9rZSB0aGlzIGNsYXNzIGRpcmVjdGx5LCBpdCBpc1xuXHRcdCAqICAgICAgICAgaGFuZGxlZCBmcm9tIHdpdGhpbiBUb25lLlRyYW5zcG9ydC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50ID0gZnVuY3Rpb24gKFRyYW5zcG9ydCwgb3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5UcmFuc3BvcnRFdmVudC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogUmVmZXJlbmNlIHRvIHRoZSBUcmFuc3BvcnQgdGhhdCBjcmVhdGVkIGl0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5UcmFuc3BvcnR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydCA9IFRyYW5zcG9ydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB1bmlxdWUgaWQgb2YgdGhlIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pZCA9IFRvbmUuVHJhbnNwb3J0RXZlbnQuX2V2ZW50SWQrKztcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB0aW1lIHRoZSBldmVudCBzdGFydHNcblx0XHRcdCAqIEB0eXBlIHtUaWNrc31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudGltZSA9IFRvbmUuVGlja3Mob3B0aW9ucy50aW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogSWYgdGhlIGV2ZW50IHNob3VsZCBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIGNyZWF0ZWQuXG5cdFx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmNlID0gb3B0aW9ucy5vbmNlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0RXZlbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHRzXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmNlJzogZmFsc2UsXG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ3VycmVudCBJRCBjb3VudGVyXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQuX2V2ZW50SWQgPSAwO1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlIHRoZSBldmVudCBjYWxsYmFjay5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBUaGUgQXVkaW9Db250ZXh0IHRpbWUgaW4gc2Vjb25kcyBvZiB0aGUgZXZlbnRcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29uY2UgJiYgdGhpcy5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuaWQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRFdmVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0RXZlbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCBpcyBhbiBpbnRlcm5hbCBjbGFzcyB1c2VkIGJ5IFRvbmUuVHJhbnNwb3J0XG5cdFx0ICogICAgICAgICB0byBzY2hlZHVsZSByZXBlYXQgZXZlbnRzLiBUaGlzIGNsYXNzIHNob3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5LlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UcmFuc3BvcnRFdmVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQgPSBmdW5jdGlvbiAoVHJhbnNwb3J0LCBvcHRpb25zKSB7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5jYWxsKHRoaXMsIFRyYW5zcG9ydCwgb3B0aW9ucyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFdoZW4gdGhlIGV2ZW50IHNob3VsZCBzdG9wIHJlcGVhdGluZ1xuXHRcdFx0ICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZHVyYXRpb24gPSBUb25lLlRpY2tzKG9wdGlvbnMuZHVyYXRpb24pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGludGVydmFsIG9mIHRoZSByZXBlYXRlZCBldmVudFxuXHRcdFx0ICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ludGVydmFsID0gVG9uZS5UaWNrcyhvcHRpb25zLmludGVydmFsKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBJRCBvZiB0aGUgY3VycmVudCB0aW1lbGluZSBldmVudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBJRCBvZiB0aGUgbmV4dCB0aW1lbGluZSBldmVudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9uZXh0SWQgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAgKiBUaGUgdGltZSBvZiB0aGUgbmV4dCBldmVudFxuXHRcdFx0ICAqIEB0eXBlIHtUaWNrc31cblx0XHRcdCAgKiBAcHJpdmF0ZVxuXHRcdFx0ICAqL1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrID0gdGhpcy50aW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogYSByZWZlcmVuY2UgdG8gdGhlIGJvdW5kIHN0YXJ0IG1ldGhvZFxuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JvdW5kUmVzdGFydCA9IHRoaXMuX3Jlc3RhcnQuYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5vbignc3RhcnQgbG9vcFN0YXJ0JywgdGhpcy5fYm91bmRSZXN0YXJ0KTtcblx0ICAgICAgICB0aGlzLl9yZXN0YXJ0KCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCwgVG9uZS5UcmFuc3BvcnRFdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2R1cmF0aW9uJzogSW5maW5pdHksXG5cdCAgICAgICAgJ2ludGVydmFsJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZSB0aGUgY2FsbGJhY2suIFJldHVybnMgdGhlIHRpY2sgdGltZSB3aGljaFxuXHRcdCAqIHRoZSBuZXh0IGV2ZW50IHNob3VsZCBiZSBzY2hlZHVsZWQgYXQuXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lICBUaGUgQXVkaW9Db250ZXh0IHRpbWUgaW4gc2Vjb25kcyBvZiB0aGUgZXZlbnRcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9jcmVhdGUgbW9yZSBldmVudHMgaWYgbmVjZXNzYXJ5XG5cdCAgICAgICAgdGhpcy5fY3JlYXRlRXZlbnRzKHRpbWUpO1xuXHQgICAgICAgIC8vY2FsbCB0aGUgc3VwZXIgY2xhc3Ncblx0ICAgICAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5pbnZva2UuY2FsbCh0aGlzLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBQdXNoIG1vcmUgZXZlbnRzIG9udG8gdGhlIHRpbWVsaW5lIHRvIGtlZXAgdXAgd2l0aCB0aGUgcG9zaXRpb24gb2YgdGhlIHRpbWVsaW5lXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLl9jcmVhdGVFdmVudHMgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vIHNjaGVkdWxlIHRoZSBuZXh0IGV2ZW50XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5UcmFuc3BvcnQuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKHRpY2tzID49IHRoaXMudGltZSAmJiB0aWNrcyA+PSB0aGlzLl9uZXh0VGljayAmJiB0aGlzLl9uZXh0VGljayArIHRoaXMuX2ludGVydmFsIDwgdGhpcy50aW1lICsgdGhpcy5kdXJhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9uZXh0VGljayArPSB0aGlzLl9pbnRlcnZhbDtcblx0ICAgICAgICAgICAgdGhpcy5fY3VycmVudElkID0gdGhpcy5fbmV4dElkO1xuXHQgICAgICAgICAgICB0aGlzLl9uZXh0SWQgPSB0aGlzLlRyYW5zcG9ydC5zY2hlZHVsZU9uY2UodGhpcy5pbnZva2UuYmluZCh0aGlzKSwgVG9uZS5UaWNrcyh0aGlzLl9uZXh0VGljaykpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBQdXNoIG1vcmUgZXZlbnRzIG9udG8gdGhlIHRpbWVsaW5lIHRvIGtlZXAgdXAgd2l0aCB0aGUgcG9zaXRpb24gb2YgdGhlIHRpbWVsaW5lXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLl9yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9jdXJyZW50SWQpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX25leHRJZCk7XG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSB0aGlzLnRpbWU7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5UcmFuc3BvcnQuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKHRpY2tzID4gdGhpcy50aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX25leHRUaWNrID0gdGhpcy50aW1lICsgTWF0aC5jZWlsKCh0aWNrcyAtIHRoaXMudGltZSkgLyB0aGlzLl9pbnRlcnZhbCkgKiB0aGlzLl9pbnRlcnZhbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY3VycmVudElkID0gdGhpcy5UcmFuc3BvcnQuc2NoZWR1bGVPbmNlKHRoaXMuaW52b2tlLmJpbmQodGhpcyksIFRvbmUuVGlja3ModGhpcy5fbmV4dFRpY2spKTtcblx0ICAgICAgICB0aGlzLl9uZXh0VGljayArPSB0aGlzLl9pbnRlcnZhbDtcblx0ICAgICAgICB0aGlzLl9uZXh0SWQgPSB0aGlzLlRyYW5zcG9ydC5zY2hlZHVsZU9uY2UodGhpcy5pbnZva2UuYmluZCh0aGlzKSwgVG9uZS5UaWNrcyh0aGlzLl9uZXh0VGljaykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9jdXJyZW50SWQpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX25leHRJZCk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQub2ZmKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9ib3VuZFJlc3RhcnQpO1xuXHQgICAgICAgIHRoaXMuX2JvdW5kQ3JlYXRlRXZlbnRzID0gbnVsbDtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5kdXJhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRyYW5zcG9ydCBmb3IgdGltaW5nIG11c2ljYWwgZXZlbnRzLlxuXHRcdCAqICAgICAgICAgIFN1cHBvcnRzIHRlbXBvIGN1cnZlcyBhbmQgdGltZSBjaGFuZ2VzLiBVbmxpa2UgYnJvd3Nlci1iYXNlZCB0aW1pbmcgKHNldEludGVydmFsLCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUpXG5cdFx0ICogICAgICAgICAgVG9uZS5UcmFuc3BvcnQgdGltaW5nIGV2ZW50cyBwYXNzIGluIHRoZSBleGFjdCB0aW1lIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnRcblx0XHQgKiAgICAgICAgICBpbiB0aGUgYXJndW1lbnQgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBQYXNzIHRoYXQgdGltZSB2YWx1ZSB0byB0aGUgb2JqZWN0XG5cdFx0ICogICAgICAgICAgeW91J3JlIHNjaGVkdWxpbmcuIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgQSBzaW5nbGUgdHJhbnNwb3J0IGlzIGNyZWF0ZWQgZm9yIHlvdSB3aGVuIHRoZSBsaWJyYXJ5IGlzIGluaXRpYWxpemVkLlxuXHRcdCAqICAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgVGhlIHRyYW5zcG9ydCBlbWl0cyB0aGUgZXZlbnRzOiBcInN0YXJ0XCIsIFwic3RvcFwiLCBcInBhdXNlXCIsIGFuZCBcImxvb3BcIiB3aGljaCBhcmVcblx0XHQgKiAgICAgICAgICBjYWxsZWQgd2l0aCB0aGUgdGltZSBvZiB0aGF0IGV2ZW50IGFzIHRoZSBhcmd1bWVudC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9yZXBlYXRlZCBldmVudCBldmVyeSA4dGggbm90ZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly9kbyBzb21ldGhpbmcgd2l0aCB0aGUgdGltZVxuXHRcdCAqIH0sIFwiOG5cIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zY2hlZHVsZSBhbiBldmVudCBvbiB0aGUgMTZ0aCBtZWFzdXJlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSB0aW1lXG5cdFx0ICogfSwgXCIxNjowOjBcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0TE9PUElOR1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdElmIHRoZSB0cmFuc3BvcnQgbG9vcHMgb3Igbm90LlxuXHRcdFx0XHQgKiAgQHR5cGUge2Jvb2xlYW59XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLmxvb3AgPSBmYWxzZTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0VGhlIGxvb3Agc3RhcnQgcG9zaXRpb24gaW4gdGlja3Ncblx0XHRcdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSAwO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogXHRUaGUgbG9vcCBlbmQgcG9zaXRpb24gaW4gdGlja3Ncblx0XHRcdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gMDtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdENMT0NLL1RFTVBPXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBQdWxzZXMgcGVyIHF1YXJ0ZXIgaXMgdGhlIG51bWJlciBvZiB0aWNrcyBwZXIgcXVhcnRlciBub3RlLlxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fcHBxID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMuUFBRO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIHdhdGNoZXMgdGhlIG1haW4gb3NjaWxsYXRvciBmb3IgdGltaW5nIHRpY2tzXG5cdFx0XHRcdCAqICBpbml0aWFsbHkgc3RhcnRzIGF0IDEyMGJwbVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICogIEB0eXBlIHtUb25lLkNsb2NrfVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fY2xvY2sgPSBuZXcgVG9uZS5DbG9jayh7XG5cdCAgICAgICAgICAgICAgICAnY2FsbGJhY2snOiB0aGlzLl9wcm9jZXNzVGljay5iaW5kKHRoaXMpLFxuXHQgICAgICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IDBcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2JpbmRDbG9ja0V2ZW50cygpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSBCZWF0cyBQZXIgTWludXRlIG9mIHRoZSBUcmFuc3BvcnQuXG5cdFx0XHRcdCAqICBAdHlwZSB7QlBNfVxuXHRcdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gODA7XG5cdFx0XHRcdCAqIC8vcmFtcCB0aGUgYnBtIHRvIDEyMCBvdmVyIDEwIHNlY29uZHNcblx0XHRcdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnJhbXBUbygxMjAsIDEwKTtcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuYnBtID0gdGhpcy5fY2xvY2suZnJlcXVlbmN5O1xuXHQgICAgICAgICAgICB0aGlzLmJwbS5fdG9Vbml0cyA9IHRoaXMuX3RvVW5pdHMuYmluZCh0aGlzKTtcblx0ICAgICAgICAgICAgdGhpcy5icG0uX2Zyb21Vbml0cyA9IHRoaXMuX2Zyb21Vbml0cy5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLmJwbS51bml0cyA9IFRvbmUuVHlwZS5CUE07XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLnZhbHVlID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMuYnBtO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWFkT25seSgnYnBtJyk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHRpbWUgc2lnbmF0dXJlLCBvciBtb3JlIGFjY3VyYXRlbHkgdGhlIG51bWVyYXRvclxuXHRcdFx0XHQgKiAgb2YgdGhlIHRpbWUgc2lnbmF0dXJlIG92ZXIgYSBkZW5vbWluYXRvciBvZiA0LlxuXHRcdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lU2lnbmF0dXJlID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMudGltZVNpZ25hdHVyZTtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdFRJTUVMSU5FIEVWRU5UU1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgQWxsIHRoZSBldmVudHMgaW4gYW4gb2JqZWN0IHRvIGtlZXAgdHJhY2sgYnkgSURcblx0XHRcdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzID0ge307XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdFRoZSBzY2hlZHVsZWQgZXZlbnRzLlxuXHRcdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmV9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFJlcGVhdGVkIGV2ZW50c1xuXHRcdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzID0gbmV3IFRvbmUuSW50ZXJ2YWxUaW1lbGluZSgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIEFsbCBvZiB0aGUgc3luY2VkIFNpZ25hbHNcblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zeW5jZWRTaWduYWxzID0gW107XG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8vXHRTV0lOR1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHN1YmRpdmlzaW9uIG9mIHRoZSBzd2luZ1xuXHRcdFx0XHQgKiAgQHR5cGUgIHtUaWNrc31cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ1RpY2tzID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMuUFBRIC8gMjtcblx0ICAgICAgICAgICAgLy84blxuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSBzd2luZyBhbW91bnRcblx0XHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ0Ftb3VudCA9IDA7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydCwgVG9uZS5FbWl0dGVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdicG0nOiAxMjAsXG5cdCAgICAgICAgJ3N3aW5nJzogMCxcblx0ICAgICAgICAnc3dpbmdTdWJkaXZpc2lvbic6ICc4bicsXG5cdCAgICAgICAgJ3RpbWVTaWduYXR1cmUnOiA0LFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogJzRtJyxcblx0ICAgICAgICAnUFBRJzogMTkyXG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRJQ0tTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgY2FsbGVkIG9uIGV2ZXJ5IHRpY2tcblx0XHQgKiAgQHBhcmFtICAge251bWJlcn0gdGlja1RpbWUgY2xvY2sgcmVsYXRpdmUgdGljayB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX3Byb2Nlc3NUaWNrID0gZnVuY3Rpb24gKHRpY2tUaW1lLCB0aWNrcykge1xuXHQgICAgICAgIC8vaGFuZGxlIHN3aW5nXG5cdCAgICAgICAgaWYgKHRoaXMuX3N3aW5nQW1vdW50ID4gMCAmJiB0aWNrcyAlIHRoaXMuX3BwcSAhPT0gMCAmJiAvL25vdCBvbiBhIGRvd25iZWF0XG5cdCAgICAgICAgICAgIHRpY2tzICUgKHRoaXMuX3N3aW5nVGlja3MgKiAyKSAhPT0gMCkge1xuXHQgICAgICAgICAgICAvL2FkZCBzb21lIHN3aW5nXG5cdCAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9IHRpY2tzICUgKHRoaXMuX3N3aW5nVGlja3MgKiAyKSAvICh0aGlzLl9zd2luZ1RpY2tzICogMik7XG5cdCAgICAgICAgICAgIHZhciBhbW91bnQgPSBNYXRoLnNpbihwcm9ncmVzcyAqIE1hdGguUEkpICogdGhpcy5fc3dpbmdBbW91bnQ7XG5cdCAgICAgICAgICAgIHRpY2tUaW1lICs9IFRvbmUuVGlja3ModGhpcy5fc3dpbmdUaWNrcyAqIDIgLyAzKS50b1NlY29uZHMoKSAqIGFtb3VudDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9kbyB0aGUgbG9vcCB0ZXN0XG5cdCAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICBpZiAodGlja3MgPj0gdGhpcy5fbG9vcEVuZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb29wRW5kJywgdGlja1RpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY2xvY2suc2V0VGlja3NBdFRpbWUodGhpcy5fbG9vcFN0YXJ0LCB0aWNrVGltZSk7XG5cdCAgICAgICAgICAgICAgICB0aWNrcyA9IHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9vcFN0YXJ0JywgdGlja1RpbWUsIHRoaXMuX2Nsb2NrLmdldFNlY29uZHNBdFRpbWUodGlja1RpbWUpKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9vcCcsIHRpY2tUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2ludm9rZSB0aGUgdGltZWxpbmUgZXZlbnRzIHNjaGVkdWxlZCBvbiB0aGlzIHRpY2tcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5mb3JFYWNoQXRUaW1lKHRpY2tzLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuaW52b2tlKHRpY2tUaW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U0NIRURVTEFCTEUgRVZFTlRTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYW4gZXZlbnQgYWxvbmcgdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBhdCB0aGUgdGltZS5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSAgdGltZSBUaGUgdGltZSB0byBpbnZva2UgdGhlIGNhbGxiYWNrIGF0LlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9IFRoZSBpZCBvZiB0aGUgZXZlbnQgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGNhbmNlbGluZyB0aGUgZXZlbnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIHRoZSBjYWxsYmFjayB3aGVuIHRoZSBUcmFuc3BvcnQgcmVhY2hlcyB0aGUgZGVzaXJlZCB0aW1lXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHRlbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUpO1xuXHRcdCAqIH0sIFwiMTI4aVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdGltZSkge1xuXHQgICAgICAgIHZhciBldmVudCA9IG5ldyBUb25lLlRyYW5zcG9ydEV2ZW50KHRoaXMsIHtcblx0ICAgICAgICAgICAgJ3RpbWUnOiBUb25lLlRyYW5zcG9ydFRpbWUodGltZSksXG5cdCAgICAgICAgICAgICdjYWxsYmFjayc6IGNhbGxiYWNrXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEV2ZW50KGV2ZW50LCB0aGlzLl90aW1lbGluZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGEgcmVwZWF0ZWQgZXZlbnQgYWxvbmcgdGhlIHRpbWVsaW5lLiBUaGUgZXZlbnQgd2lsbCBmaXJlXG5cdFx0ICogIGF0IHRoZSBgaW50ZXJ2YWxgIHN0YXJ0aW5nIGF0IHRoZSBgc3RhcnRUaW1lYCBhbmQgZm9yIHRoZSBzcGVjaWZpZWRcblx0XHQgKiAgYGR1cmF0aW9uYC5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayB0byBpbnZva2UuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICAgIGludGVydmFsICAgVGhlIGR1cmF0aW9uIGJldHdlZW4gc3VjY2Vzc2l2ZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy4gTXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZT19ICAgIHN0YXJ0VGltZSAgV2hlbiBhbG9uZyB0aGUgdGltZWxpbmUgdGhlIGV2ZW50cyBzaG91bGRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCBiZWluZyBpbnZva2VkLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkdXJhdGlvbj1JbmZpbml0eV0gSG93IGxvbmcgdGhlIGV2ZW50IHNob3VsZCByZXBlYXQuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICAgIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50LiBVc2UgdGhpcyB0byBjYW5jZWxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBldmVudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2EgY2FsbGJhY2sgaW52b2tlZCBldmVyeSBlaWdodGggbm90ZSBhZnRlciB0aGUgZmlyc3QgbWVhc3VyZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KGNhbGxiYWNrLCBcIjhuXCIsIFwiMW1cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2NoZWR1bGVSZXBlYXQgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGludGVydmFsLCBzdGFydFRpbWUsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQodGhpcywge1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiBjYWxsYmFjayxcblx0ICAgICAgICAgICAgJ2ludGVydmFsJzogVG9uZS5UaW1lKGludGVydmFsKSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKSxcblx0ICAgICAgICAgICAgJ2R1cmF0aW9uJzogVG9uZS5UaW1lKFRvbmUuZGVmYXVsdEFyZyhkdXJhdGlvbiwgSW5maW5pdHkpKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8va2ljayBpdCBvZmYgaWYgdGhlIFRyYW5zcG9ydCBpcyBzdGFydGVkXG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEV2ZW50KGV2ZW50LCB0aGlzLl9yZXBlYXRlZEV2ZW50cyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGFuIGV2ZW50IHRoYXQgd2lsbCBiZSByZW1vdmVkIGFmdGVyIGl0IGlzIGludm9rZWQuXG5cdFx0ICogIE5vdGUgdGhhdCBpZiB0aGUgZ2l2ZW4gdGltZSBpcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgdHJhbnNwb3J0IHRpbWUsXG5cdFx0ICogIHRoZSBldmVudCB3aWxsIGJlIGludm9rZWQgaW1tZWRpYXRlbHkuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugb25jZS5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSB0aW1lIFRoZSB0aW1lIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZC5cblx0XHQgKiAgQHJldHVybnMge051bWJlcn0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQuXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2NoZWR1bGVPbmNlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aW1lKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFRvbmUuVHJhbnNwb3J0RXZlbnQodGhpcywge1xuXHQgICAgICAgICAgICAndGltZSc6IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKSxcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogY2FsbGJhY2ssXG5cdCAgICAgICAgICAgICdvbmNlJzogdHJ1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hZGRFdmVudChldmVudCwgdGhpcy5fdGltZWxpbmUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhciB0aGUgcGFzc2VkIGluIGV2ZW50IGlkIGZyb20gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBldmVudElkIFRoZSBpZCBvZiB0aGUgZXZlbnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGV2ZW50SWQpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc2NoZWR1bGVkRXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50SWQpKSB7XG5cdCAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5fc2NoZWR1bGVkRXZlbnRzW2V2ZW50SWQudG9TdHJpbmcoKV07XG5cdCAgICAgICAgICAgIGl0ZW0udGltZWxpbmUucmVtb3ZlKGl0ZW0uZXZlbnQpO1xuXHQgICAgICAgICAgICBpdGVtLmV2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NjaGVkdWxlZEV2ZW50c1tldmVudElkLnRvU3RyaW5nKCldO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBBZGQgYW4gZXZlbnQgdG8gdGhlIGNvcnJlY3QgdGltZWxpbmUuIEtlZXAgdHJhY2sgb2YgdGhlXG5cdFx0ICogdGltZWxpbmUgaXQgd2FzIGFkZGVkIHRvLlxuXHRcdCAqIEBwYXJhbSB7VG9uZS5UcmFuc3BvcnRFdmVudH1cdGV2ZW50XG5cdFx0ICogQHBhcmFtIHtUb25lLlRpbWVsaW5lfSB0aW1lbGluZVxuXHRcdCAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBldmVudCBpZCB3aGljaCB3YXMganVzdCBhZGRlZFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX2FkZEV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50LCB0aW1lbGluZSkge1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50c1tldmVudC5pZC50b1N0cmluZygpXSA9IHtcblx0ICAgICAgICAgICAgJ2V2ZW50JzogZXZlbnQsXG5cdCAgICAgICAgICAgICd0aW1lbGluZSc6IHRpbWVsaW5lXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aW1lbGluZS5hZGQoZXZlbnQpO1xuXHQgICAgICAgIHJldHVybiBldmVudC5pZDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIHNjaGVkdWxlZCBldmVudHMgZnJvbSB0aGUgdGltZWxpbmUgYWZ0ZXJcblx0XHQgKiAgdGhlIGdpdmVuIHRpbWUuIFJlcGVhdGVkIGV2ZW50cyB3aWxsIGJlIHJlbW92ZWRcblx0XHQgKiAgaWYgdGhlaXIgc3RhcnRUaW1lIGlzIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gW2FmdGVyPTBdIENsZWFyIGFsbCBldmVudHMgYWZ0ZXJcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB0aW1lLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICBhZnRlciA9IFRvbmUuZGVmYXVsdEFyZyhhZnRlciwgMCk7XG5cdCAgICAgICAgYWZ0ZXIgPSB0aGlzLnRvVGlja3MoYWZ0ZXIpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLl9yZXBlYXRlZEV2ZW50cy5mb3JFYWNoRnJvbShhZnRlciwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2xlYXIoZXZlbnQuaWQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFNUQVJUL1NUT1AvUEFVU0Vcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBCaW5kIHN0YXJ0L3N0b3AvcGF1c2UgZXZlbnRzIGZyb20gdGhlIGNsb2NrIGFuZCBlbWl0IHRoZW0uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX2JpbmRDbG9ja0V2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbignc3RhcnQnLCBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuVGlja3Mob2Zmc2V0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbignc3RvcCcsIGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RvcCcsIHRpbWUpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sub24oJ3BhdXNlJywgZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdwYXVzZScsIHRpbWUpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiwgXCJzdG9wcGVkXCIsIG9yIFwicGF1c2VkXCJcblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay5nZXRTdGF0ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgdHJhbnNwb3J0IGFuZCBhbGwgc291cmNlcyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSB0cmFuc3BvcnQgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lPX0gb2Zmc2V0IFRoZSB0aW1lbGluZSBvZmZzZXQgdG8gc3RhcnQgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IGluIG9uZSBzZWNvbmQgc3RhcnRpbmcgYXQgYmVnaW5uaW5nIG9mIHRoZSA1dGggbWVhc3VyZS5cblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydChcIisxXCIsIFwiNDowOjBcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgY2xvY2tcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQob2Zmc2V0KSkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnRvVGlja3Mob2Zmc2V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY2xvY2suc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgdHJhbnNwb3J0IGFuZCBhbGwgc291cmNlcyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSB0cmFuc3BvcnQgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0b3AoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXVzZSB0aGUgdHJhbnNwb3J0IGFuZCBhbGwgc291cmNlcyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sucGF1c2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVG9nZ2xlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0cmFuc3BvcnQuIElmIGl0IGlzXG5cdFx0ICogc3RhcnRlZCwgaXQgd2lsbCBzdG9wIGl0LCBvdGhlcndpc2UgaXQgd2lsbCBzdGFydCB0aGUgVHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0fSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fY2xvY2suZ2V0U3RhdGVBdFRpbWUodGltZSkgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFNFVFRFUlMvR0VUVEVSU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHNpZ25hdHVyZSBhcyBqdXN0IHRoZSBudW1lcmF0b3Igb3ZlciA0LlxuXHRcdCAqICBGb3IgZXhhbXBsZSA0LzQgd291bGQgYmUganVzdCA0IGFuZCA2Lzggd291bGQgYmUgMy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfEFycmF5fVxuXHRcdCAqICBAbmFtZSB0aW1lU2lnbmF0dXJlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jb21tb24gdGltZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmUgPSA0O1xuXHRcdCAqIC8vIDcvOFxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmUgPSBbNywgOF07XG5cdFx0ICogLy90aGlzIHdpbGwgYmUgcmVkdWNlZCB0byBhIHNpbmdsZSBudW1iZXJcblx0XHQgKiBUb25lLlRyYW5zcG9ydC50aW1lU2lnbmF0dXJlOyAvL3JldHVybnMgMy41XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAndGltZVNpZ25hdHVyZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVTaWduYXR1cmU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lU2lnKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGltZVNpZykpIHtcblx0ICAgICAgICAgICAgICAgIHRpbWVTaWcgPSB0aW1lU2lnWzBdIC8gdGltZVNpZ1sxXSAqIDQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdGltZVNpZ25hdHVyZSA9IHRpbWVTaWc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBXaGVuIHRoZSBUb25lLlRyYW5zcG9ydC5sb29wID0gdHJ1ZSwgdGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGxvb3AuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcFN0YXJ0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHN0YXJ0UG9zaXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKHN0YXJ0UG9zaXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogV2hlbiB0aGUgVG9uZS5UcmFuc3BvcnQubG9vcCA9IHRydWUsIHRoaXMgaXMgdGhlIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgbG9vcC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BFbmQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZW5kUG9zaXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhlbmRQb3NpdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBsb29wIHN0YXJ0IGFuZCBzdG9wIGF0IHRoZSBzYW1lIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gc3RhcnRQb3NpdGlvblxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IGVuZFBvc2l0aW9uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9vcCBvdmVyIHRoZSBmaXJzdCBtZWFzdXJlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2V0TG9vcFBvaW50cygwLCBcIjFtXCIpO1xuXHRcdCAqIFRvbmUuVHJhbnNwb3J0Lmxvb3AgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnNldExvb3BQb2ludHMgPSBmdW5jdGlvbiAoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHtcblx0ICAgICAgICB0aGlzLmxvb3BTdGFydCA9IHN0YXJ0UG9zaXRpb247XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gZW5kUG9zaXRpb247XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzd2luZyB2YWx1ZS4gQmV0d2VlbiAwLTEgd2hlcmUgMSBlcXVhbCB0b1xuXHRcdCAqICB0aGUgbm90ZSArIGhhbGYgdGhlIHN1YmRpdmlzaW9uLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgc3dpbmdcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzd2luZycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N3aW5nQW1vdW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYW1vdW50KSB7XG5cdCAgICAgICAgICAgIC8vc2NhbGUgdGhlIHZhbHVlcyB0byBhIG5vcm1hbCByYW5nZVxuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ0Ftb3VudCA9IGFtb3VudDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIHN1YmRpdmlzaW9uIHdoaWNoIHRoZSBzd2luZyB3aWxsIGJlIGFwcGxpZWQgdG8uXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGFuIDh0aCBub3RlLiBWYWx1ZSBtdXN0IGJlIGxlc3Ncblx0XHQgKiAgdGhhbiBhIHF1YXJ0ZXIgbm90ZS5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBzd2luZ1N1YmRpdmlzaW9uXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc3dpbmdTdWJkaXZpc2lvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fc3dpbmdUaWNrcykudG9Ob3RhdGlvbigpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ViZGl2aXNpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3dpbmdUaWNrcyA9IHRoaXMudG9UaWNrcyhzdWJkaXZpc2lvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIFRyYW5zcG9ydCdzIHBvc2l0aW9uIGluIEJhcnM6QmVhdHM6U2l4dGVlbnRocy5cblx0XHQgKiAgU2V0dGluZyB0aGUgdmFsdWUgd2lsbCBqdW1wIHRvIHRoYXQgcG9zaXRpb24gcmlnaHQgYXdheS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7QmFyc0JlYXRzU2l4dGVlbnRoc31cblx0XHQgKiAgQG5hbWUgcG9zaXRpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdwb3NpdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuX2Nsb2NrLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRpY2tzKS50b0JhcnNCZWF0c1NpeHRlZW50aHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2dyZXNzKSB7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMudG9UaWNrcyhwcm9ncmVzcyk7XG5cdCAgICAgICAgICAgIHRoaXMudGlja3MgPSB0aWNrcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgVHJhbnNwb3J0J3MgcG9zaXRpb24gaW4gc2Vjb25kc1xuXHRcdCAqICBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIGp1bXAgdG8gdGhhdCBwb3NpdGlvbiByaWdodCBhd2F5LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtTZWNvbmRzfVxuXHRcdCAqICBAbmFtZSBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc2Vjb25kcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLnNlY29uZHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLmJwbS50aW1lVG9UaWNrcyhzLCBub3cpO1xuXHQgICAgICAgICAgICB0aGlzLnRpY2tzID0gdGlja3M7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIFRyYW5zcG9ydCdzIGxvb3AgcG9zaXRpb24gYXMgYSBub3JtYWxpemVkIHZhbHVlLiBBbHdheXNcblx0XHQgKiAgcmV0dXJucyAwIGlmIHRoZSB0cmFuc3BvcnQgaWYgbG9vcCBpcyBub3QgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAbmFtZSBwcm9ncmVzc1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAncHJvZ3Jlc3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5fY2xvY2suZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAodGlja3MgLSB0aGlzLl9sb29wU3RhcnQpIC8gKHRoaXMuX2xvb3BFbmQgLSB0aGlzLl9sb29wU3RhcnQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdHJhbnNwb3J0cyBjdXJyZW50IHRpY2sgcG9zaXRpb24uXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICogIEBuYW1lIHRpY2tzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAndGlja3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay50aWNrcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2Nsb2NrLnRpY2tzICE9PSB0KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgICAgIC8vc3RvcCBldmVyeXRoaW5nIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgbm93KTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9jay5zZXRUaWNrc0F0VGltZSh0LCBub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vcmVzdGFydCBpdCB3aXRoIHRoZSBuZXcgdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RhcnQnLCBub3csIHRoaXMuc2Vjb25kcyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb2NrLnNldFRpY2tzQXRUaW1lKHQsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgY2xvY2sncyB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIGdldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgICBUaGUgdGljayB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5fY2xvY2suZ2V0VGlja3NBdFRpbWUodGltZSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGVsYXBzZWQgc2Vjb25kcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSBlbGFwc2VkIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9ICBUaGUgbnVtYmVyIG9mIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmdldFNlY29uZHNBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay5nZXRTZWNvbmRzQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQdWxzZXMgUGVyIFF1YXJ0ZXIgbm90ZS4gVGhpcyBpcyB0aGUgc21hbGxlc3QgcmVzb2x1dGlvblxuXHRcdCAqICB0aGUgVHJhbnNwb3J0IHRpbWluZyBzdXBwb3J0cy4gVGhpcyBzaG91bGQgYmUgc2V0IG9uY2Vcblx0XHQgKiAgb24gaW5pdGlhbGl6YXRpb24gYW5kIG5vdCBzZXQgYWdhaW4uIENoYW5naW5nIHRoaXMgdmFsdWVcblx0XHQgKiAgYWZ0ZXIgb3RoZXIgb2JqZWN0cyBoYXZlIGJlZW4gY3JlYXRlZCBjYW4gY2F1c2UgcHJvYmxlbXMuXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBQUFFcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdQUFEnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcHE7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcHEpIHtcblx0ICAgICAgICAgICAgdmFyIGJwbSA9IHRoaXMuYnBtLnZhbHVlO1xuXHQgICAgICAgICAgICB0aGlzLl9wcHEgPSBwcHE7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLnZhbHVlID0gYnBtO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZnJvbSBCUE0gdG8gZnJlcXVlbmN5IChmYWN0b3JpbmcgaW4gUFBRKVxuXHRcdCAqICBAcGFyYW0gIHtCUE19ICBicG0gVGhlIEJQTSB2YWx1ZSB0byBjb252ZXJ0IHRvIGZyZXF1ZW5jeVxuXHRcdCAqICBAcmV0dXJuICB7RnJlcXVlbmN5fSAgVGhlIEJQTSBhcyBhIGZyZXF1ZW5jeSB3aXRoIFBQUSBmYWN0b3JlZCBpbi5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fZnJvbVVuaXRzID0gZnVuY3Rpb24gKGJwbSkge1xuXHQgICAgICAgIHJldHVybiAxIC8gKDYwIC8gYnBtIC8gdGhpcy5QUFEpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGZyb20gZnJlcXVlbmN5ICh3aXRoIFBQUSkgaW50byBCUE1cblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSAgZnJlcSBUaGUgY2xvY2tzIGZyZXF1ZW5jeSB0byBjb252ZXJ0IHRvIEJQTVxuXHRcdCAqICBAcmV0dXJuICB7QlBNfSAgVGhlIGZyZXF1ZW5jeSB2YWx1ZSBhcyBCUE0uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX3RvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiBmcmVxIC8gdGhpcy5QUFEgKiA2MDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U1lOQ0lOR1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHRpbWUgYWxpZ25lZCB0byB0aGUgbmV4dCBzdWJkaXZpc2lvblxuXHRcdCAqICBvZiB0aGUgVHJhbnNwb3J0LiBJZiB0aGUgVHJhbnNwb3J0IGlzIG5vdCBzdGFydGVkLFxuXHRcdCAqICBpdCB3aWxsIHJldHVybiAwLlxuXHRcdCAqICBOb3RlOiB0aGlzIHdpbGwgbm90IHdvcmsgcHJlY2lzZWx5IGR1cmluZyB0ZW1wbyByYW1wcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHN1YmRpdmlzaW9uICBUaGUgc3ViZGl2aXNpb24gdG8gcXVhbnRpemUgdG9cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIFRoZSBjb250ZXh0IHRpbWUgb2YgdGhlIG5leHQgc3ViZGl2aXNpb24uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoKTsgLy90aGUgdHJhbnNwb3J0IG11c3QgYmUgc3RhcnRlZFxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0Lm5leHRTdWJkaXZpc2lvbihcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLm5leHRTdWJkaXZpc2lvbiA9IGZ1bmN0aW9uIChzdWJkaXZpc2lvbikge1xuXHQgICAgICAgIHN1YmRpdmlzaW9uID0gdGhpcy50b1RpY2tzKHN1YmRpdmlzaW9uKTtcblx0ICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIC8vaWYgdGhlIHRyYW5zcG9ydCdzIG5vdCBzdGFydGVkLCByZXR1cm4gMFxuXHQgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgLy90aGUgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50IHRpY2tzIGFuZCB0aGUgc3ViZGl2aXNpb25cblx0ICAgICAgICAgICAgdmFyIHRyYW5zcG9ydFBvcyA9IHRoaXMuZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgdmFyIHJlbWFpbmluZ1RpY2tzID0gc3ViZGl2aXNpb24gLSB0cmFuc3BvcnRQb3MgJSBzdWJkaXZpc2lvbjtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLm5leHRUaWNrVGltZShyZW1haW5pbmdUaWNrcywgbm93KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEF0dGFjaGVzIHRoZSBzaWduYWwgdG8gdGhlIHRlbXBvIGNvbnRyb2wgc2lnbmFsIHNvIHRoYXRcblx0XHQgKiAgYW55IGNoYW5nZXMgaW4gdGhlIHRlbXBvIHdpbGwgY2hhbmdlIHRoZSBzaWduYWwgaW4gdGhlIHNhbWVcblx0XHQgKiAgcmF0aW8uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VG9uZS5TaWduYWx9IHNpZ25hbFxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHJhdGlvIE9wdGlvbmFsbHkgcGFzcyBpbiB0aGUgcmF0aW8gYmV0d2VlblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0d28gc2lnbmFscy4gT3RoZXJ3aXNlIGl0IHdpbGwgYmUgY29tcHV0ZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGVpciBjdXJyZW50IHZhbHVlcy5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc3luY1NpZ25hbCA9IGZ1bmN0aW9uIChzaWduYWwsIHJhdGlvKSB7XG5cdCAgICAgICAgaWYgKCFyYXRpbykge1xuXHQgICAgICAgICAgICAvL2dldCB0aGUgc3luYyByYXRpb1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKHNpZ25hbC5nZXRWYWx1ZUF0VGltZShub3cpICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByYXRpbyA9IHNpZ25hbC5nZXRWYWx1ZUF0VGltZShub3cpIC8gdGhpcy5icG0uZ2V0VmFsdWVBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJhdGlvID0gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmF0aW9TaWduYWwgPSBuZXcgVG9uZS5HYWluKHJhdGlvKTtcblx0ICAgICAgICB0aGlzLmJwbS5jaGFpbihyYXRpb1NpZ25hbCwgc2lnbmFsLl9wYXJhbSk7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkU2lnbmFscy5wdXNoKHtcblx0ICAgICAgICAgICAgJ3JhdGlvJzogcmF0aW9TaWduYWwsXG5cdCAgICAgICAgICAgICdzaWduYWwnOiBzaWduYWwsXG5cdCAgICAgICAgICAgICdpbml0aWFsJzogc2lnbmFsLnZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgc2lnbmFsLnZhbHVlID0gMDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVW5zeW5jcyBhIHByZXZpb3VzbHkgc3luY2VkIHNpZ25hbCBmcm9tIHRoZSB0cmFuc3BvcnQncyBjb250cm9sLlxuXHRcdCAqICBTZWUgVG9uZS5UcmFuc3BvcnQuc3luY1NpZ25hbC5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5TaWduYWx9IHNpZ25hbFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS51bnN5bmNTaWduYWwgPSBmdW5jdGlvbiAoc2lnbmFsKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX3N5bmNlZFNpZ25hbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgdmFyIHN5bmNlZFNpZ25hbCA9IHRoaXMuX3N5bmNlZFNpZ25hbHNbaV07XG5cdCAgICAgICAgICAgIGlmIChzeW5jZWRTaWduYWwuc2lnbmFsID09PSBzaWduYWwpIHtcblx0ICAgICAgICAgICAgICAgIHN5bmNlZFNpZ25hbC5yYXRpby5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICBzeW5jZWRTaWduYWwuc2lnbmFsLnZhbHVlID0gc3luY2VkU2lnbmFsLmluaXRpYWw7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zeW5jZWRTaWduYWxzLnNwbGljZShpLCAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnYnBtJyk7XG5cdCAgICAgICAgdGhpcy5icG0gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0SU5JVElBTElaQVRJT05cblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIHZhciBUcmFuc3BvcnRDb25zdHJ1Y3RvciA9IFRvbmUuVHJhbnNwb3J0O1xuXHQgICAgVG9uZS5UcmFuc3BvcnQgPSBuZXcgVHJhbnNwb3J0Q29uc3RydWN0b3IoKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuVHJhbnNwb3J0IGluc3RhbmNlb2YgVHJhbnNwb3J0Q29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQgPSBjb250ZXh0LlRyYW5zcG9ydDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydCA9IG5ldyBUcmFuc3BvcnRDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3N0b3JlIHRoZSBUcmFuc3BvcnQgb24gdGhlIGNvbnRleHQgc28gaXQgY2FuIGJlIHJldHJpZXZlZCBsYXRlclxuXHQgICAgICAgIGNvbnRleHQuVHJhbnNwb3J0ID0gVG9uZS5UcmFuc3BvcnQ7XG5cdCAgICB9KTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignY2xvc2UnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0LlRyYW5zcG9ydCBpbnN0YW5jZW9mIFRyYW5zcG9ydENvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIGNvbnRleHQuVHJhbnNwb3J0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVm9sdW1lIGlzIGEgc2ltcGxlIHZvbHVtZSBub2RlLCB1c2VmdWwgZm9yIGNyZWF0aW5nIGEgdm9sdW1lIGZhZGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFt2b2x1bWU9MF0gdGhlIGluaXRpYWwgdm9sdW1lXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHZvbCA9IG5ldyBUb25lLlZvbHVtZSgtMTIpO1xuXHRcdCAqIGluc3RydW1lbnQuY2hhaW4odm9sLCBUb25lLk1hc3Rlcik7XG5cdFx0ICovXG5cdCAgICBUb25lLlZvbHVtZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3ZvbHVtZSddLCBUb25lLlZvbHVtZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSBvdXRwdXQgbm9kZVxuXHRcdFx0ICogQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy52b2x1bWUsIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdW5tdXRlZCB2b2x1bWVcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl91bm11dGVkVm9sdW1lID0gb3B0aW9ucy52b2x1bWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZvbHVtZSBjb250cm9sIGluIGRlY2liZWxzLlxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMub3V0cHV0LmdhaW47XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBtdXRlIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlZvbHVtZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Wb2x1bWUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Wb2x1bWUjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiB2b2x1bWUubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Wb2x1bWUucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMudm9sdW1lLnZhbHVlID09PSAtSW5maW5pdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5tdXRlICYmIG11dGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3VubXV0ZWRWb2x1bWUgPSB0aGlzLnZvbHVtZS52YWx1ZTtcblx0ICAgICAgICAgICAgICAgIC8vbWF5YmUgaXQgc2hvdWxkIHJhbXAgaGVyZT9cblx0ICAgICAgICAgICAgICAgIHRoaXMudm9sdW1lLnZhbHVlID0gLUluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubXV0ZSAmJiAhbXV0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy52b2x1bWUudmFsdWUgPSB0aGlzLl91bm11dGVkVm9sdW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVm9sdW1lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlZvbHVtZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmlucHV0LmRpc3Bvc2UoKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlZvbHVtZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIHNpbmdsZSBtYXN0ZXIgb3V0cHV0IHdoaWNoIGlzIGNvbm5lY3RlZCB0byB0aGVcblx0XHQgKiAgICAgICAgICBBdWRpb0Rlc3RpbmF0aW9uTm9kZSAoYWthIHlvdXIgc3BlYWtlcnMpLlxuXHRcdCAqICAgICAgICAgIEl0IHByb3ZpZGVzIHVzZWZ1bCBjb252ZW5pZW5jZXMgc3VjaCBhcyB0aGUgYWJpbGl0eVxuXHRcdCAqICAgICAgICAgIHRvIHNldCB0aGUgdm9sdW1lIGFuZCBtdXRlIHRoZSBlbnRpcmUgYXBwbGljYXRpb24uXG5cdFx0ICogICAgICAgICAgSXQgYWxzbyBnaXZlcyB5b3UgdGhlIGFiaWxpdHkgdG8gYXBwbHkgbWFzdGVyIGVmZmVjdHMgdG8geW91ciBhcHBsaWNhdGlvbi5cblx0XHQgKiAgICAgICAgICA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgIExpa2UgVG9uZS5UcmFuc3BvcnQsIEEgc2luZ2xlIFRvbmUuTWFzdGVyIGlzIGNyZWF0ZWRcblx0XHQgKiAgICAgICAgICBvbiBpbml0aWFsaXphdGlvbiBhbmQgeW91IGRvIG5vdCBuZWVkIHRvIGV4cGxpY2l0bHkgY29uc3RydWN0IG9uZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RoZSBhdWRpbyB3aWxsIGdvIGZyb20gdGhlIG9zY2lsbGF0b3IgdG8gdGhlIHNwZWFrZXJzXG5cdFx0ICogb3NjaWxsYXRvci5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0XHQgKiAvL2EgY29udmVuaWVuY2UgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIG1hc3RlciBvdXRwdXQgaXMgYWxzbyBwcm92aWRlZDpcblx0XHQgKiBvc2NpbGxhdG9yLnRvTWFzdGVyKCk7XG5cdFx0ICogLy90aGUgYWJvdmUgdHdvIGV4YW1wbGVzIGFyZSBlcXVpdmFsZW50LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5NYXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHByaXZhdGUgdm9sdW1lIG5vZGVcblx0XHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG1hc3RlciBvdXRwdXQuXG5cdFx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLm91dHB1dCwgdGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWFzdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3Rlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk1hc3RlciNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIFRvbmUuTWFzdGVyLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWFzdGVyLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIG1hc3RlciBlZmZlY3RzIGNoYWluLiBOT1RFOiB0aGlzIHdpbGwgZGlzY29ubmVjdCBhbnkgbm9kZXMgd2hpY2ggd2VyZSBwcmV2aW91c2x5XG5cdFx0ICogIGNoYWluZWQgaW4gdGhlIG1hc3RlciBlZmZlY3RzIGNoYWluLlxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvTm9kZXxUb25lfSBhcmdzLi4uIEFsbCBhcmd1bWVudHMgd2lsbCBiZSBjb25uZWN0ZWQgaW4gYSByb3dcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIE1hc3RlciB3aWxsIGJlIHJvdXRlZCB0aHJvdWdoIGl0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NYXN0ZXJ9ICB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zb21lIG92ZXJhbGwgY29tcHJlc3Npb24gdG8ga2VlcCB0aGUgbGV2ZWxzIGluIGNoZWNrXG5cdFx0ICogdmFyIG1hc3RlckNvbXByZXNzb3IgPSBuZXcgVG9uZS5Db21wcmVzc29yKHtcblx0XHQgKiBcdFwidGhyZXNob2xkXCIgOiAtNixcblx0XHQgKiBcdFwicmF0aW9cIiA6IDMsXG5cdFx0ICogXHRcImF0dGFja1wiIDogMC41LFxuXHRcdCAqIFx0XCJyZWxlYXNlXCIgOiAwLjFcblx0XHQgKiB9KTtcblx0XHQgKiAvL2dpdmUgYSBsaXR0bGUgYm9vc3QgdG8gdGhlIGxvd3Ncblx0XHQgKiB2YXIgbG93QnVtcCA9IG5ldyBUb25lLkZpbHRlcigyMDAsIFwibG93c2hlbGZcIik7XG5cdFx0ICogLy9yb3V0ZSBldmVyeXRoaW5nIHRocm91Z2ggdGhlIGZpbHRlclxuXHRcdCAqIC8vYW5kIGNvbXByZXNzb3IgYmVmb3JlIGdvaW5nIHRvIHRoZSBzcGVha2Vyc1xuXHRcdCAqIFRvbmUuTWFzdGVyLmNoYWluKGxvd0J1bXAsIG1hc3RlckNvbXByZXNzb3IpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NYXN0ZXIucHJvdG90eXBlLmNoYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4uYXBwbHkodGhpcy5pbnB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NYXN0ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3Rlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFVR01FTlQgVE9ORSdzIFBST1RPVFlQRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQ29ubmVjdCAndGhpcycgdG8gdGhlIG1hc3RlciBvdXRwdXQuIFNob3J0aGFuZCBmb3IgdGhpcy5jb25uZWN0KFRvbmUuTWFzdGVyKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Nvbm5lY3QgYW4gb3NjaWxsYXRvciB0byB0aGUgbWFzdGVyIG91dHB1dFxuXHRcdCAqIHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkudG9NYXN0ZXIoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS50b01hc3RlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIGlmICh3aW5kb3cuQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgLy8gQWxzbyBhdWdtZW50IEF1ZGlvTm9kZSdzIHByb3RvdHlwZSB0byBpbmNsdWRlIHRvTWFzdGVyIGFzIGEgY29udmVuaWVuY2Vcblx0ICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLnRvTWFzdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHQgICAgLyoqXG5cdFx0ICogIGluaXRpYWxpemUgdGhlIG1vZHVsZSBhbmQgbGlzdGVuIGZvciBuZXcgYXVkaW8gY29udGV4dHNcblx0XHQgKi9cblx0ICAgIHZhciBNYXN0ZXJDb25zdHJ1Y3RvciA9IFRvbmUuTWFzdGVyO1xuXHQgICAgVG9uZS5NYXN0ZXIgPSBuZXcgTWFzdGVyQ29uc3RydWN0b3IoKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgLy8gaWYgaXQgYWxyZWFkeSBleGlzdHMsIGp1c3QgcmVzdG9yZSBpdFxuXHQgICAgICAgIGlmIChjb250ZXh0Lk1hc3RlciBpbnN0YW5jZW9mIE1hc3RlckNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIFRvbmUuTWFzdGVyID0gY29udGV4dC5NYXN0ZXI7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgVG9uZS5NYXN0ZXIgPSBuZXcgTWFzdGVyQ29uc3RydWN0b3IoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgY29udGV4dC5NYXN0ZXIgPSBUb25lLk1hc3Rlcjtcblx0ICAgIH0pO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdjbG9zZScsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuTWFzdGVyIGluc3RhbmNlb2YgTWFzdGVyQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgY29udGV4dC5NYXN0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmUuTWFzdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJhc2UgY2xhc3MgZm9yIHNvdXJjZXMuIFNvdXJjZXMgaGF2ZSBzdGFydC9zdG9wIG1ldGhvZHNcblx0XHQgKiAgICAgICAgICBhbmQgdGhlIGFiaWxpdHkgdG8gYmUgc3luY2VkIHRvIHRoZVxuXHRcdCAqICAgICAgICAgIHN0YXJ0L3N0b3Agb2YgVG9uZS5UcmFuc3BvcnQuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL011bHRpcGxlIHN0YXRlIGNoYW5nZSBldmVudHMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIsXG5cdFx0ICogLy9idXQgbXVzdCBiZSBzZXQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgYW5kIHdpdGggYXNjZW5kaW5nIHRpbWVzXG5cdFx0ICpcblx0XHQgKiAvLyBPS1xuXHRcdCAqIHN0YXRlLnN0YXJ0KCkuc3RvcChcIiswLjJcIik7XG5cdFx0ICogLy8gQU5EXG5cdFx0ICogc3RhdGUuc3RhcnQoKS5zdG9wKFwiKzAuMlwiKS5zdGFydChcIiswLjRcIikuc3RvcChcIiswLjdcIilcblx0XHQgKlxuXHRcdCAqIC8vIEJBRFxuXHRcdCAqIHN0YXRlLnN0b3AoXCIrMC4yXCIpLnN0YXJ0KCk7XG5cdFx0ICogLy8gT1Jcblx0XHQgKiBzdGF0ZS5zdGFydChcIiswLjNcIikuc3RvcChcIiswLjJcIik7XG5cdFx0ICpcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuU291cmNlLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvdXRwdXQgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogc291cmNlLnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFx0S2VlcCB0cmFjayBvZiB0aGUgc2NoZWR1bGVkIHN0YXRlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLm1lbW9yeSA9IDEwMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3luY2VkIGBzdGFydGAgY2FsbGJhY2sgZnVuY3Rpb24gZnJvbSB0aGUgdHJhbnNwb3J0XG5cdFx0XHQgKiAgQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBLZWVwIHRyYWNrIG9mIGFsbCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IGlkc1xuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IFtdO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgb3V0cHV0IGV4cGxpY2l0bHkgc3RlcmVvXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLm91dHB1dC5vdXRwdXQuY2hhbm5lbENvdW50ID0gMjtcblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICAvL211dGUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU291cmNlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU291cmNlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHNvdXJjZS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNvdXJjZS5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vb3ZlcndyaXRlIHRoZXNlIGZ1bmN0aW9uc1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLl9zdGFydCA9IFRvbmUubm9PcDtcblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5yZXN0YXJ0ID0gVG9uZS5ub09wO1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLl9zdG9wID0gVG9uZS5ub09wO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBzb3VyY2UgYXQgdGhlIHNwZWNpZmllZCB0aW1lLiBJZiBubyB0aW1lIGlzIGdpdmVuLFxuXHRcdCAqICBzdGFydCB0aGUgc291cmNlIG5vdy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBzb3VyY2Ugc2hvdWxkIGJlIHN0YXJ0ZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zdGFydChcIiswLjVcIik7IC8vc3RhcnRzIHRoZSBzb3VyY2UgMC41IHNlY29uZHMgZnJvbSBub3dcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSAmJiB0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0LnNlY29uZHM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2lmIGl0J3Mgc3RhcnRlZCwgc3RvcCBpdCBhbmQgcmVzdGFydCBpdFxuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5yZXN0YXJ0KHRpbWUsIG9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RhcnRlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgb2Zmc2V0IHRpbWUgdG8gdGhlIGV2ZW50XG5cdCAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQodGltZSk7XG5cdCAgICAgICAgICAgICAgICBldmVudC5vZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LmR1cmF0aW9uID0gZHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICB2YXIgc2NoZWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHQsIG9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZC5wdXNoKHNjaGVkKTtcblx0ICAgICAgICAgICAgICAgIC8vaWYgaXQncyBhbHJlYWR5IHN0YXJ0ZWRcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3luY2VkU3RhcnQodGhpcy5ub3coKSwgVG9uZS5UcmFuc3BvcnQuc2Vjb25kcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdGFydC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBzb3VyY2UgYXQgdGhlIHNwZWNpZmllZCB0aW1lLiBJZiBubyB0aW1lIGlzIGdpdmVuLFxuXHRcdCAqICBzdG9wIHRoZSBzb3VyY2Ugbm93LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHNvdXJjZSBzaG91bGQgYmUgc3RvcHBlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0b3AoKTsgLy8gc3RvcHMgdGhlIHNvdXJjZSBpbW1lZGlhdGVseVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGltZSkgJiYgdGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydC5zZWNvbmRzO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCF0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBzY2hlZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKHRoaXMuX3N0b3AuYmluZCh0aGlzKSwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZC5wdXNoKHNjaGVkKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN5bmMgdGhlIHNvdXJjZSB0byB0aGUgVHJhbnNwb3J0IHNvIHRoYXQgYWxsIHN1YnNlcXVlbnRcblx0XHQgKiAgY2FsbHMgdG8gYHN0YXJ0YCBhbmQgYHN0b3BgIGFyZSBzeW5jZWQgdG8gdGhlIFRyYW5zcG9ydFRpbWVcblx0XHQgKiAgaW5zdGVhZCBvZiB0aGUgQXVkaW9Db250ZXh0IHRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zeW5jIHRoZSBzb3VyY2Ugc28gdGhhdCBpdCBwbGF5cyBiZXR3ZWVuIDAgYW5kIDAuMyBvbiB0aGUgVHJhbnNwb3J0J3MgdGltZWxpbmVcblx0XHQgKiBzb3VyY2Uuc3luYygpLnN0YXJ0KDApLnN0b3AoMC4zKTtcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoKTtcblx0XHQgKlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB3aXRoIGFuIG9mZnNldCBhbmQgdGhlIHN5bmMnZWQgc291cmNlc1xuXHRcdCAqIC8vd2lsbCBzdGFydCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvblxuXHRcdCAqIHNvdXJjZS5zeW5jKCkuc3RhcnQoMC4xKTtcblx0XHQgKiAvL3RoZSBzb3VyY2Ugd2lsbCBiZSBpbnZva2VkIHdpdGggYW4gb2Zmc2V0IG9mIDAuNFxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KFwiKzAuNVwiLCAwLjUpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLl9zeW5jZWRTdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldCA+IDApIHtcblx0ICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgcGxheWJhY2sgc3RhdGUgYXQgdGhhdCB0aW1lXG5cdCAgICAgICAgICAgICAgICB2YXIgc3RhdGVFdmVudCA9IHRoaXMuX3N0YXRlLmdldChvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgLy8gbGlzdGVuIGZvciBzdGFydCBldmVudHMgd2hpY2ggbWF5IG9jY3VyIGluIHRoZSBtaWRkbGUgb2YgdGhlIHN5bmMnZWQgdGltZVxuXHQgICAgICAgICAgICAgICAgaWYgKHN0YXRlRXZlbnQgJiYgc3RhdGVFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIHN0YXRlRXZlbnQudGltZSAhPT0gb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBvZmZzZXRcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSBvZmZzZXQgLSB0aGlzLnRvU2Vjb25kcyhzdGF0ZUV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVFdmVudC5kdXJhdGlvbikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKHN0YXRlRXZlbnQuZHVyYXRpb24pIC0gc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUsIHRoaXMudG9TZWNvbmRzKHN0YXRlRXZlbnQub2Zmc2V0KSArIHN0YXJ0T2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkU3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHZhciBzZWNvbmRzID0gVG9uZS5UcmFuc3BvcnQuZ2V0U2Vjb25kc0F0VGltZShNYXRoLm1heCh0aW1lIC0gdGhpcy5zYW1wbGVUaW1lLCAwKSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShzZWNvbmRzKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9uKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9zeW5jZWRTdGFydCk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub24oJ3N0b3AgcGF1c2UgbG9vcEVuZCcsIHRoaXMuX3N5bmNlZFN0b3ApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbnN5bmMgdGhlIHNvdXJjZSB0byB0aGUgVHJhbnNwb3J0LiBTZWUgVG9uZS5Tb3VyY2Uuc3luY1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5vZmYoJ3N0b3AgcGF1c2UgbG9vcEVuZCcsIHRoaXMuX3N5bmNlZFN0b3ApO1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5vZmYoJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX3N5bmNlZFN0YXJ0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gZmFsc2U7XG5cdCAgICAgICAgLy8gY2xlYXIgYWxsIG9mIHRoZSBzY2hlZHVsZWQgaWRzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zY2hlZHVsZWQubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5fc2NoZWR1bGVkW2ldO1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihpZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IFtdO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCgwKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKlx0Q2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNvdXJjZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEF1ZGlvQnVmZmVyLmNvcHlUby9Gcm9tQ2hhbm5lbCBwb2x5ZmlsbFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCFBdWRpb0J1ZmZlci5wcm90b3R5cGUuY29weVRvQ2hhbm5lbCkge1xuXHQgICAgICAgICAgICBBdWRpb0J1ZmZlci5wcm90b3R5cGUuY29weVRvQ2hhbm5lbCA9IGZ1bmN0aW9uIChzcmMsIGNoYW5OdW0sIHN0YXJ0KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IHRoaXMuZ2V0Q2hhbm5lbERhdGEoY2hhbk51bSk7XG5cdCAgICAgICAgICAgICAgICBzdGFydCA9IHN0YXJ0IHx8IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5uZWwubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2kgKyBzdGFydF0gPSBzcmNbaV07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIEF1ZGlvQnVmZmVyLnByb3RvdHlwZS5jb3B5RnJvbUNoYW5uZWwgPSBmdW5jdGlvbiAoZGVzdCwgY2hhbk51bSwgc3RhcnQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gdGhpcy5nZXRDaGFubmVsRGF0YShjaGFuTnVtKTtcblx0ICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVzdC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGRlc3RbaV0gPSBjaGFubmVsW2kgKyBzdGFydF07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJ1ZmZlciBsb2FkaW5nIGFuZCBzdG9yYWdlLiBUb25lLkJ1ZmZlciBpcyB1c2VkIGludGVybmFsbHkgYnkgYWxsXG5cdFx0ICogICAgICAgICAgY2xhc3NlcyB0aGF0IG1ha2UgcmVxdWVzdHMgZm9yIGF1ZGlvIGZpbGVzIHN1Y2ggYXMgVG9uZS5QbGF5ZXIsXG5cdFx0ICogICAgICAgICAgVG9uZS5TYW1wbGVyIGFuZCBUb25lLkNvbnZvbHZlci5cblx0XHQgKlxuXHRcdCAqICAgICAgICAgIEFzaWRlIGZyb20gbG9hZCBjYWxsYmFja3MgZnJvbSBpbmRpdmlkdWFsIGJ1ZmZlcnMsIFRvbmUuQnVmZmVyXG5cdFx0ICogIFx0XHRwcm92aWRlcyBldmVudHMgd2hpY2gga2VlcCB0cmFjayBvZiB0aGUgbG9hZGluZyBwcm9ncmVzc1xuXHRcdCAqICBcdFx0b2YgX2FsbF8gb2YgdGhlIGJ1ZmZlcnMuIFRoZXNlIGFyZSBUb25lLkJ1ZmZlci5vbihcImxvYWRcIiAvIFwicHJvZ3Jlc3NcIiAvIFwiZXJyb3JcIilcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7QXVkaW9CdWZmZXJ8U3RyaW5nfSB1cmwgVGhlIHVybCB0byBsb2FkLCBvciB0aGUgYXVkaW8gYnVmZmVyIHRvIHNldC5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBBIGNhbGxiYWNrIHdoaWNoIGlzIGludm9rZWQgYWZ0ZXIgdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQncyByZWNvbW1lbmRlZCB0byB1c2UgYFRvbmUuQnVmZmVyLm9uKCdsb2FkJywgY2FsbGJhY2spYCBpbnN0ZWFkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luY2UgaXQgd2lsbCBnaXZlIHlvdSBhIGNhbGxiYWNrIHdoZW4gX2FsbF8gYnVmZmVycyBhcmUgbG9hZGVkLlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25lcnJvciBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGlmIHRoZXJlIGlzIGFuIGVycm9yXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihcInBhdGgvdG8vc291bmQubXAzXCIsIGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3RoZSBidWZmZXIgaXMgbm93IGF2YWlsYWJsZS5cblx0XHQgKiBcdHZhciBidWZmID0gYnVmZmVyLmdldCgpO1xuXHRcdCAqIH0pO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIGxvYWQgcHJvdmlkZSBmYWxsYmFjayBleHRlbnNpb24gdHlwZXMgaWYgdGhlIGZpcnN0IHR5cGUgaXMgbm90IHN1cHBvcnRlZC5cblx0XHQgKiB2YXIgYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKFwicGF0aC90by9zb3VuZC5bbXAzfG9nZ3x3YXZdXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCcsXG5cdCAgICAgICAgICAgICdvbmVycm9yJ1xuXHQgICAgICAgIF0sIFRvbmUuQnVmZmVyKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3RvcmVzIHRoZSBsb2FkZWQgQXVkaW9CdWZmZXJcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaW5kaWNhdGVzIGlmIHRoZSBidWZmZXIgc2hvdWxkIGJlIHJldmVyc2VkIG9yIG5vdFxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yZXZlcnNlZCA9IG9wdGlvbnMucmV2ZXJzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgWEhSXG5cdFx0XHQgKiAgQHR5cGUgIHtYTUxIdHRwUmVxdWVzdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFByaXZhdGUgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmxvYWQgPSBUb25lLm5vT3A7XG5cdCAgICAgICAgaWYgKG9wdGlvbnMudXJsIGluc3RhbmNlb2YgQXVkaW9CdWZmZXIgfHwgb3B0aW9ucy51cmwgaW5zdGFuY2VvZiBUb25lLkJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLnNldChvcHRpb25zLnVybCk7XG5cdCAgICAgICAgICAgIC8vIGludm9rZSB0aGUgb25sb2FkIGNhbGxiYWNrXG5cdCAgICAgICAgICAgIGlmIChvcHRpb25zLm9ubG9hZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9hZGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29ubG9hZCA9IG9wdGlvbnMub25sb2FkO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKG9wdGlvbnMudXJsKSkge1xuXHQgICAgICAgICAgICB0aGlzLmxvYWQob3B0aW9ucy51cmwpLnRoZW4ob3B0aW9ucy5vbmxvYWQpLmNhdGNoKG9wdGlvbnMub25lcnJvcik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQnVmZmVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndXJsJzogdW5kZWZpbmVkLFxuXHQgICAgICAgICdyZXZlcnNlJzogZmFsc2UsXG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnb25lcnJvcic6IFRvbmUubm9PcFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXNzIGluIGFuIEF1ZGlvQnVmZmVyIG9yIFRvbmUuQnVmZmVyIHRvIHNldCB0aGUgdmFsdWVcblx0XHQgKiAgb2YgdGhpcyBidWZmZXIuXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9CdWZmZXJ8VG9uZS5CdWZmZXJ9IGJ1ZmZlciB0aGUgYnVmZmVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICBpZiAoYnVmZmVyIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIpIHtcblx0ICAgICAgICAgICAgaWYgKGJ1ZmZlci5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IGJ1ZmZlci5nZXQoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlci5fb25sb2FkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25sb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQHJldHVybiB7QXVkaW9CdWZmZXJ9IFRoZSBhdWRpbyBidWZmZXIgc3RvcmVkIGluIHRoZSBvYmplY3QuXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIE1ha2VzIGFuIHhociByZXFlc3QgZm9yIHRoZSBzZWxlY3RlZCB1cmwgdGhlbiBkZWNvZGVzXG5cdFx0ICogIHRoZSBmaWxlIGFzIGFuIGF1ZGlvIGJ1ZmZlci4gSW52b2tlc1xuXHRcdCAqICB0aGUgY2FsbGJhY2sgb25jZSB0aGUgYXVkaW8gYnVmZmVyIGxvYWRzLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGJ1ZmZlciB0byBsb2FkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGZpbGV0eXBlIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICBicm93c2VyLlxuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX0gcmV0dXJucyBhIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2l0aCB0aGUgVG9uZS5CdWZmZXJcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKHVybCwgb25sb2FkLCBvbmVycm9yKSB7XG5cdCAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAobG9hZCwgZXJyb3IpIHtcblx0ICAgICAgICAgICAgdGhpcy5feGhyID0gVG9uZS5CdWZmZXIubG9hZCh1cmwsIC8vc3VjY2Vzc1xuXHQgICAgICAgICAgICBmdW5jdGlvbiAoYnVmZikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2V0KGJ1ZmYpO1xuXHQgICAgICAgICAgICAgICAgbG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIGlmIChvbmxvYWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgLy9lcnJvclxuXHQgICAgICAgICAgICBmdW5jdGlvbiAoZXJyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgZXJyb3IoZXJyKTtcblx0ICAgICAgICAgICAgICAgIGlmIChvbmVycm9yKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb25lcnJvcihlcnIpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHByb21pc2U7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICBpZiAodGhpcy5feGhyKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZSh0aGlzLl94aHIpO1xuXHQgICAgICAgICAgICB0aGlzLl94aHIuYWJvcnQoKTtcblx0ICAgICAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlciBpcyBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID4gMDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGR1cmF0aW9uXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnZHVyYXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGluIHNhbXBsZXNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBsZW5ndGhcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubGVuZ3RoO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2YgZGlzY3JldGUgYXVkaW8gY2hhbm5lbHMuIFJldHVybnMgMCBpZiBubyBidWZmZXJcblx0XHQgKiBpcyBsb2FkZWQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgbnVtYmVyT2ZDaGFubmVsc1xuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ251bWJlck9mQ2hhbm5lbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubnVtYmVyT2ZDaGFubmVscztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBhdWRpbyBidWZmZXIgZnJvbSB0aGUgYXJyYXkuIFRvIGNyZWF0ZSBhIG11bHRpY2hhbm5lbCBBdWRpb0J1ZmZlcixcblx0XHQgKiAgcGFzcyBpbiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkuXG5cdFx0ICogIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbCB0aGUgYXVkaW8gYnVmZmVyXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KSB7XG5cdCAgICAgICAgdmFyIGlzTXVsdGlkaW1lbnNpb25hbCA9IGFycmF5WzBdLmxlbmd0aCA+IDA7XG5cdCAgICAgICAgdmFyIGNoYW5uZWxzID0gaXNNdWx0aWRpbWVuc2lvbmFsID8gYXJyYXkubGVuZ3RoIDogMTtcblx0ICAgICAgICB2YXIgbGVuID0gaXNNdWx0aWRpbWVuc2lvbmFsID8gYXJyYXlbMF0ubGVuZ3RoIDogYXJyYXkubGVuZ3RoO1xuXHQgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyKGNoYW5uZWxzLCBsZW4sIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlKTtcblx0ICAgICAgICBpZiAoIWlzTXVsdGlkaW1lbnNpb25hbCAmJiBjaGFubmVscyA9PT0gMSkge1xuXHQgICAgICAgICAgICBhcnJheSA9IFthcnJheV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2hhbm5lbHM7IGMrKykge1xuXHQgICAgICAgICAgICBidWZmZXIuY29weVRvQ2hhbm5lbChhcnJheVtjXSwgYyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IGJ1ZmZlcjtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBcdFN1bXMgbXVsaXBsZSBjaGFubmVscyBpbnRvIDEgY2hhbm5lbFxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IGNoYW5uZWwgT3B0aW9uYWxseSBvbmx5IGNvcHkgYSBzaW5nbGUgY2hhbm5lbCBmcm9tIHRoZSBhcnJheS5cblx0XHQgKiAgQHJldHVybiB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUudG9Nb25vID0gZnVuY3Rpb24gKGNoYW5OdW0pIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcihjaGFuTnVtKSkge1xuXHQgICAgICAgICAgICB0aGlzLmZyb21BcnJheSh0aGlzLnRvQXJyYXkoY2hhbk51bSkpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBvdXRwdXRBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5sZW5ndGgpO1xuXHQgICAgICAgICAgICB2YXIgbnVtQ2hhbm5lbHMgPSB0aGlzLm51bWJlck9mQ2hhbm5lbHM7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgbnVtQ2hhbm5lbHM7IGNoYW5uZWwrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWxBcnJheSA9IHRoaXMudG9BcnJheShjaGFubmVsKTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbEFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3V0cHV0QXJyYXlbaV0gKz0gY2hhbm5lbEFycmF5W2ldO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vZGl2aWRlIGJ5IHRoZSBudW1iZXIgb2YgY2hhbm5lbHNcblx0ICAgICAgICAgICAgb3V0cHV0QXJyYXkgPSBvdXRwdXRBcnJheS5tYXAoZnVuY3Rpb24gKHNhbXBsZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHNhbXBsZSAvIG51bUNoYW5uZWxzO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5mcm9tQXJyYXkob3V0cHV0QXJyYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBcdEdldCB0aGUgYnVmZmVyIGFzIGFuIGFycmF5LiBTaW5nbGUgY2hhbm5lbCBidWZmZXJzIHdpbGwgcmV0dXJuIGEgMS1kaW1lbnNpb25hbFxuXHRcdCAqIFx0RmxvYXQzMkFycmF5LCBhbmQgbXVsdGljaGFubmVsIGJ1ZmZlcnMgd2lsbCByZXR1cm4gbXVsdGlkaW1lbnNpb25hbCBhcnJheXMuXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gY2hhbm5lbCBPcHRpb25hbGx5IG9ubHkgY29weSBhIHNpbmdsZSBjaGFubmVsIGZyb20gdGhlIGFycmF5LlxuXHRcdCAqICBAcmV0dXJuIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKGNoYW5uZWwpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcihjaGFubmVsKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDaGFubmVsRGF0YShjaGFubmVsKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMubnVtYmVyT2ZDaGFubmVscyA9PT0gMSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy50b0FycmF5KDApO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciByZXQgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCB0aGlzLm51bWJlck9mQ2hhbm5lbHM7IGMrKykge1xuXHQgICAgICAgICAgICAgICAgcmV0W2NdID0gdGhpcy5nZXRDaGFubmVsRGF0YShjKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgRmxvYXQzMkFycmF5IHJlcHJlc2VudGluZyB0aGUgUENNIGF1ZGlvIGRhdGEgZm9yIHRoZSBzcGVjaWZpYyBjaGFubmVsLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBjaGFubmVsICBUaGUgY2hhbm5lbCBudW1iZXIgdG8gcmV0dXJuXG5cdFx0ICogIEByZXR1cm4gIHtGbG9hdDMyQXJyYXl9ICBUaGUgYXVkaW8gYXMgYSBUeXBlZEFycmF5XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZ2V0Q2hhbm5lbERhdGEgPSBmdW5jdGlvbiAoY2hhbm5lbCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2hhbm5lbCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEN1dCBhIHN1YnNlY3Rpb24gb2YgdGhlIGFycmF5IGFuZCByZXR1cm4gYSBidWZmZXIgb2YgdGhlXG5cdFx0ICogIHN1YnNlY3Rpb24uIERvZXMgbm90IG1vZGlmeSB0aGUgb3JpZ2luYWwgYnVmZmVyXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnQgVGhlIHRpbWUgdG8gc3RhcnQgdGhlIHNsaWNlXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGVuZCBUaGUgZW5kIHRpbWUgdG8gc2xpY2UuIElmIG5vbmUgaXMgZ2l2ZW5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIHdpbGwgZGVmYXVsdCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXJcblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIChzdGFydCwgZW5kKSB7XG5cdCAgICAgICAgZW5kID0gVG9uZS5kZWZhdWx0QXJnKGVuZCwgdGhpcy5kdXJhdGlvbik7XG5cdCAgICAgICAgdmFyIHN0YXJ0U2FtcGxlcyA9IE1hdGguZmxvb3IodGhpcy5jb250ZXh0LnNhbXBsZVJhdGUgKiB0aGlzLnRvU2Vjb25kcyhzdGFydCkpO1xuXHQgICAgICAgIHZhciBlbmRTYW1wbGVzID0gTWF0aC5mbG9vcih0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSAqIHRoaXMudG9TZWNvbmRzKGVuZCkpO1xuXHQgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1iZXJPZkNoYW5uZWxzOyBpKyspIHtcblx0ICAgICAgICAgICAgcmVwbGFjZW1lbnRbaV0gPSB0aGlzLnRvQXJyYXkoaSkuc2xpY2Uoc3RhcnRTYW1wbGVzLCBlbmRTYW1wbGVzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHJldEJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcigpLmZyb21BcnJheShyZXBsYWNlbWVudCk7XG5cdCAgICAgICAgcmV0dXJuIHJldEJ1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV2ZXJzZSB0aGUgYnVmZmVyLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLl9yZXZlcnNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmxvYWRlZCkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubnVtYmVyT2ZDaGFubmVsczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKHRoaXMuZ2V0Q2hhbm5lbERhdGEoaSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldmVyc2UgdGhlIGJ1ZmZlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgcmV2ZXJzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ3JldmVyc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZlcnNlZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJldikge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fcmV2ZXJzZWQgIT09IHJldikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmV2ZXJzZWQgPSByZXY7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXZlcnNlKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gU1RBVElDIE1FVEhPRFNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9zdGF0aWNhbGx5IGluaGVyaXRzIEVtaXR0ZXIgbWV0aG9kc1xuXHQgICAgVG9uZS5FbWl0dGVyLm1peGluKFRvbmUuQnVmZmVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgc3RhdGljIHF1ZXVlIGZvciBhbGwgb2YgdGhlIHhociByZXF1ZXN0c1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZSA9IFtdO1xuXHQgICAgLyoqXG5cdFx0ICogIEEgcGF0aCB3aGljaCBpcyBwcmVmaXhlZCBiZWZvcmUgZXZlcnkgdXJsLlxuXHRcdCAqICBAdHlwZSAge1N0cmluZ31cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuYmFzZVVybCA9ICcnO1xuXHQgICAgLyoqXG5cdFx0ICogIENyZWF0ZSBhIFRvbmUuQnVmZmVyIGZyb20gdGhlIGFycmF5LiBUbyBjcmVhdGUgYSBtdWx0aWNoYW5uZWwgQXVkaW9CdWZmZXIsXG5cdFx0ICogIHBhc3MgaW4gYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LlxuXHRcdCAqICBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZpbGwgdGhlIGF1ZGlvIGJ1ZmZlclxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gQSBUb25lLkJ1ZmZlciBjcmVhdGVkIGZyb20gdGhlIGFycmF5XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IFRvbmUuQnVmZmVyKCkuZnJvbUFycmF5KGFycmF5KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDcmVhdGVzIGEgVG9uZS5CdWZmZXIgZnJvbSBhIFVSTCwgcmV0dXJucyBhIHByb21pc2Vcblx0XHQgKiB3aGljaCByZXNvbHZlcyB0byBhIFRvbmUuQnVmZmVyXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSB1cmwgVGhlIHVybCB0byBsb2FkLlxuXHRcdCAqIEByZXR1cm4ge1Byb21pc2U8VG9uZS5CdWZmZXI+fSAgICAgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHRvIGEgVG9uZS5CdWZmZXJcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmZyb21VcmwgPSBmdW5jdGlvbiAodXJsKSB7XG5cdCAgICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcigpO1xuXHQgICAgICAgIHJldHVybiBidWZmZXIubG9hZCh1cmwpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlbW92ZSBhbiB4aHIgcmVxdWVzdCBmcm9tIHRoZSBkb3dubG9hZCBxdWV1ZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5fcmVtb3ZlRnJvbURvd25sb2FkUXVldWUgPSBmdW5jdGlvbiAocmVxdWVzdCkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLmluZGV4T2YocmVxdWVzdCk7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTG9hZHMgYSB1cmwgdXNpbmcgWE1MSHR0cFJlcXVlc3QuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB1cmxcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gb25sb2FkXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IG9uZXJyb3Jcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gb25wcm9ncmVzc1xuXHRcdCAqICBAcmV0dXJuIHtYTUxIdHRwUmVxdWVzdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBvbmxvYWQsIG9uZXJyb3IpIHtcblx0ICAgICAgICAvL2RlZmF1bHRcblx0ICAgICAgICBvbmxvYWQgPSBUb25lLmRlZmF1bHRBcmcob25sb2FkLCBUb25lLm5vT3ApO1xuXHQgICAgICAgIC8vIHRlc3QgaWYgdGhlIHVybCBjb250YWlucyBtdWx0aXBsZSBleHRlbnNpb25zXG5cdCAgICAgICAgdmFyIG1hdGNoZXMgPSB1cmwubWF0Y2goL1xcWyguK1xcfD8pK1xcXSQvKTtcblx0ICAgICAgICBpZiAobWF0Y2hlcykge1xuXHQgICAgICAgICAgICB2YXIgZXh0ZW5zaW9ucyA9IG1hdGNoZXNbMV0uc3BsaXQoJ3wnKTtcblx0ICAgICAgICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnNbMF07XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZShleHRlbnNpb25zW2ldKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnNbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UobWF0Y2hlc1swXSwgZXh0ZW5zaW9uKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gb25FcnJvcihlKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuZW1pdCgnZXJyb3InLCBlKTtcblx0ICAgICAgICAgICAgaWYgKG9uZXJyb3IpIHtcblx0ICAgICAgICAgICAgICAgIG9uZXJyb3IoZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIG9uUHJvZ3Jlc3MoKSB7XG5cdCAgICAgICAgICAgIC8vY2FsY3VsYXRlIHRoZSBwcm9ncmVzc1xuXHQgICAgICAgICAgICB2YXIgdG90YWxQcm9ncmVzcyA9IDA7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRvdGFsUHJvZ3Jlc3MgKz0gVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWVbaV0ucHJvZ3Jlc3M7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuZW1pdCgncHJvZ3Jlc3MnLCB0b3RhbFByb2dyZXNzIC8gVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUubGVuZ3RoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0ICAgICAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIFRvbmUuQnVmZmVyLmJhc2VVcmwgKyB1cmwsIHRydWUpO1xuXHQgICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcblx0ICAgICAgICAvL3N0YXJ0IG91dCBhcyAwXG5cdCAgICAgICAgcmVxdWVzdC5wcm9ncmVzcyA9IDA7XG5cdCAgICAgICAgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUucHVzaChyZXF1ZXN0KTtcblx0ICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMjAwKSB7XG5cdCAgICAgICAgICAgICAgICBUb25lLmNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKHJlcXVlc3QucmVzcG9uc2UpLnRoZW4oZnVuY3Rpb24gKGJ1ZmYpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnByb2dyZXNzID0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBvblByb2dyZXNzKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgb25sb2FkKGJ1ZmYpO1xuXHQgICAgICAgICAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vZW1pdCB0aGUgZXZlbnQgYXQgdGhlIGVuZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBUb25lLkJ1ZmZlci5lbWl0KCdsb2FkJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgICAgICAgICBvbkVycm9yKCdUb25lLkJ1ZmZlcjogY291bGQgbm90IGRlY29kZSBhdWRpbyBkYXRhOiAnICsgdXJsKTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgb25FcnJvcignVG9uZS5CdWZmZXI6IGNvdWxkIG5vdCBsb2NhdGUgZmlsZTogJyArIHVybCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG5cdCAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuXHQgICAgICAgICAgICAgICAgLy9vbmx5IGdvIHRvIDk1JSwgdGhlIGxhc3QgNSUgaXMgd2hlbiB0aGUgYXVkaW8gaXMgZGVjb2RlZFxuXHQgICAgICAgICAgICAgICAgcmVxdWVzdC5wcm9ncmVzcyA9IGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsICogMC45NTtcblx0ICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3MoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJlcXVlc3Quc2VuZCgpO1xuXHQgICAgICAgIHJldHVybiByZXF1ZXN0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIGFsbCBvZiB0aGUgZG93bmxvYWRzIGluIHByb2dyZXNzXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5jYW5jZWxEb3dubG9hZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiBUb25lLkJ1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2hlY2tzIGEgdXJsJ3MgZXh0ZW5zaW9uIHRvIHNlZSBpZiB0aGUgY3VycmVudCBicm93c2VyIGNhbiBwbGF5IHRoYXQgZmlsZSB0eXBlLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSB1cmwvZXh0ZW5zaW9uIHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybiB7Qm9vbGVhbn0gSWYgdGhlIGZpbGUgZXh0ZW5zaW9uIGNhbiBiZSBwbGF5ZWRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZShcIndhdlwiKTsgLy9yZXR1cm5zIHRydWVcblx0XHQgKiBUb25lLkJ1ZmZlci5zdXBwb3J0c1R5cGUoXCJwYXRoL3RvL2ZpbGUud2F2XCIpOyAvL3JldHVybnMgdHJ1ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlID0gZnVuY3Rpb24gKHVybCkge1xuXHQgICAgICAgIHZhciBleHRlbnNpb24gPSB1cmwuc3BsaXQoJy4nKTtcblx0ICAgICAgICBleHRlbnNpb24gPSBleHRlbnNpb25bZXh0ZW5zaW9uLmxlbmd0aCAtIDFdO1xuXHQgICAgICAgIHZhciByZXNwb25zZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJykuY2FuUGxheVR5cGUoJ2F1ZGlvLycgKyBleHRlbnNpb24pO1xuXHQgICAgICAgIHJldHVybiByZXNwb25zZSAhPT0gJyc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgYSBQcm9taXNlIHdoaWNoIHJlc29sdmVzIHdoZW4gYWxsIG9mIHRoZSBidWZmZXJzIGhhdmUgbG9hZGVkXG5cdFx0ICogIEByZXR1cm4ge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLmxvYWRlZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb25sb2FkLCBvbmVycm9yO1xuXHQgICAgICAgIGZ1bmN0aW9uIHJlbW92ZUV2ZW50cygpIHtcblx0ICAgICAgICAgICAgLy9yZW1vdmUgdGhlIGV2ZW50cyB3aGVuIGl0J3MgcmVzb2x2ZWRcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub2ZmKCdsb2FkJywgb25sb2FkKTtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub2ZmKCdlcnJvcicsIG9uZXJyb3IpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHN1Y2Nlc3MsIGZhaWwpIHtcblx0ICAgICAgICAgICAgb25sb2FkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgc3VjY2VzcygpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBvbmVycm9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgZmFpbCgpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAvL2FkZCB0aGUgZXZlbnQgbGlzdGVuZXJzXG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLm9uKCdsb2FkJywgb25sb2FkKTtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub24oJ2Vycm9yJywgb25lcnJvcik7XG5cdCAgICAgICAgfSkudGhlbihyZW1vdmVFdmVudHMpLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIHJlbW92ZUV2ZW50cygpO1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQnVmZmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgZmlyZS1hbmQtZm9yZ2V0IE9zY2lsbGF0b3JOb2RlLiBBZGRzIHRoZVxuXHRcdCAqICAgICBhYmlsaXR5IHRvIHJlc2NoZWR1bGUgdGhlIHN0b3AgbWV0aG9kLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvQnVmZmVyfFRvbmUuQnVmZmVyfSAgYnVmZmVyICAgVGhlIGJ1ZmZlciB0byBwbGF5XG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgb25sb2FkICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIGlzIGRvbmUgcGxheWluZy5cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5Pc2NpbGxhdG9yTm9kZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRoZVxuXHRcdFx0ICogIGJ1ZmZlciBzb3VyY2UgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBvcHRpb25zLm9uZW5kZWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3Igc3RhcnQgdGltZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvciBzdG9wIHRpbWVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBub2RlIHdoaWNoIGVudmVsb3BlcyB0aGUgT3NjaWxsYXRvck5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSAge09zY2lsbGF0b3JOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gdGhpcy5jb250ZXh0LmNyZWF0ZU9zY2lsbGF0b3IoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvbm5lY3QodGhpcy5fZ2Fpbk5vZGUpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX29zY2lsbGF0b3IuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS52YWx1ZSA9IG9wdGlvbnMuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fb3NjaWxsYXRvci5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUudmFsdWUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgdGhhdCB0aGUgYnVmZmVyIHJhbXBzIHRvXG5cdFx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSAxO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT3NjaWxsYXRvck5vZGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdvbmVuZGVkJzogVG9uZS5ub09wXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBvc2NpbGxhdG9yLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvck5vZGUjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBwbGF5YmFjayBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gdGVzdCB0aGUgc3RhdGUgYXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuU3RhdGV9ICBUaGUgcGxheWJhY2sgc3RhdGUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSAmJiB0aW1lID49IHRoaXMuX3N0YXJ0VGltZSAmJiAodGhpcy5fc3RvcFRpbWUgPT09IC0xIHx8IHRpbWUgPD0gdGhpcy5fc3RvcFRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0YXJ0ZWQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdCAgICAgKiBTdGFydCB0aGUgb3NjaWxsYXRvciBub2RlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSBXaGVuIHRvIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgKiBAcmV0dXJuIHtPc2NpbGxhdG9yTm9kZX0gICAgICB0aGlzXG5cdCAgICAgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lID09PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydCh0aGlzLl9zdGFydFRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhub3cpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgdGhpcy5fc3RhcnRUaW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBjYWxsIE9zY2lsbGF0b3JOb2RlLnN0YXJ0IG1vcmUgdGhhbiBvbmNlJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHQgICAgICogU2V0cyBhbiBhcmJpdHJhcnkgY3VzdG9tIHBlcmlvZGljIHdhdmVmb3JtIGdpdmVuIGEgUGVyaW9kaWNXYXZlLlxuXHQgICAgICogQHBhcmFtICB7UGVyaW9kaWNXYXZlfSBwZXJpb2RpY1dhdmUgUGVyaW9kaWNXYXZlIHNob3VsZCBiZSBjcmVhdGVkIHdpdGggY29udGV4dC5jcmVhdGVQZXJpb2RpY1dhdmVcblx0ICAgICAqIEByZXR1cm4ge09zY2lsbGF0b3JOb2RlfSB0aGlzXG5cdCAgICAgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFBlcmlvZGljV2F2ZSA9IGZ1bmN0aW9uIChwZXJpb2RpY1dhdmUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNldFBlcmlvZGljV2F2ZShwZXJpb2RpY1dhdmUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHQgICAgICogU3RvcCB0aGUgb3NjaWxsYXRvciBub2RlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSBXaGVuIHRvIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAqIEByZXR1cm4ge09zY2lsbGF0b3JOb2RlfSAgICAgIHRoaXNcblx0ICAgICAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9jYW5jZWwgdGhlIHByZXZpb3VzIHN0b3Bcblx0ICAgICAgICB0aGlzLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICAvL3Jlc2NoZWR1bGUgaXRcblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGhpcy5fc3RvcFRpbWUpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dCA9IHRoaXMuY29udGV4dC5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdG9wKHRoaXMubm93KCkpO1xuXHQgICAgICAgICAgICB0aGlzLm9uZW5kZWQoKTtcblx0ICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMuX3N0b3BUaW1lIC0gdGhpcy5ub3coKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBhIHNjaGVkdWxlZCBzdG9wIGV2ZW50XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk9zY2lsbGF0b3JOb2RlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuY2FuY2VsU3RvcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCB0aGUgc3RvcCBlbnZlbG9wZVxuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aGlzLl9zdGFydFRpbWUgKyB0aGlzLnNhbXBsZVRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDEsIE1hdGgubWF4KHRoaXMubm93KCksIHRoaXMuX3N0YXJ0VGltZSkpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3NjaWxsYXRvciB0eXBlLiBFaXRoZXIgJ3NpbmUnLCAnc2F3dG9vdGgnLCAnc3F1YXJlJywgb3IgJ3RyaWFuZ2xlJ1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3JOb2RlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk9zY2lsbGF0b3JOb2RlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5vbmVuZGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Pc2NpbGxhdG9yTm9kZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuT3NjaWxsYXRvciBzdXBwb3J0cyBhIG51bWJlciBvZiBmZWF0dXJlcyBpbmNsdWRpbmdcblx0XHQgKiAgICAgICAgIHBoYXNlIHJvdGF0aW9uLCBtdWx0aXBsZSBvc2NpbGxhdG9yIHR5cGVzIChzZWUgVG9uZS5Pc2NpbGxhdG9yLnR5cGUpLFxuXHRcdCAqICAgICAgICAgYW5kIFRyYW5zcG9ydCBzeW5jaW5nIChzZWUgVG9uZS5Pc2NpbGxhdG9yLnN5bmNGcmVxdWVuY3kpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZnJlcXVlbmN5XSBTdGFydGluZyBmcmVxdWVuY3lcblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IFt0eXBlXSBUaGUgb3NjaWxsYXRvciB0eXBlLiBSZWFkIG1vcmUgYWJvdXQgdHlwZSBiZWxvdy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL21ha2UgYW5kIHN0YXJ0IGEgNDQwaHogc2luZSB0b25lXG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoNDQwLCBcInNpbmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWFpbiBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge09zY2lsbGF0b3JOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBlcmlvZGljIHdhdmVcblx0XHRcdCAqICBAdHlwZSB7UGVyaW9kaWNXYXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl93YXZlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGFydGlhbHMgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMucGFydGlhbHMsIFsxXSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgYmV0d2VlbiAwIC0gMzYwXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge3N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG51bGw7XG5cdCAgICAgICAgLy9zZXR1cFxuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5fcGhhc2U7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdwYXJ0aWFscyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBPc2NpbGxhdG9yIHR5cGVzXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IuVHlwZSA9IHtcblx0ICAgICAgICBTaW5lOiAnc2luZScsXG5cdCAgICAgICAgVHJpYW5nbGU6ICd0cmlhbmdsZScsXG5cdCAgICAgICAgU2F3dG9vdGg6ICdzYXd0b290aCcsXG5cdCAgICAgICAgU3F1YXJlOiAnc3F1YXJlJyxcblx0ICAgICAgICBDdXN0b206ICdjdXN0b20nXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL25ldyBvc2NpbGxhdG9yIHdpdGggcHJldmlvdXMgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3JOb2RlKCk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3dhdmUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zZXRQZXJpb2RpY1dhdmUodGhpcy5fd2F2ZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBjb250cm9sIHNpZ25hbCB0byB0aGUgb3NjaWxsYXRvciBmcmVxdWVuY3kgJiBkZXR1bmVcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvcikge1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVzdGFydCB0aGUgb3NjaWxsYXRvci4gRG9lcyBub3Qgc3RvcCB0aGUgb3NjaWxsYXRvciwgYnV0IGluc3RlYWRcblx0XHQgKiBqdXN0IGNhbmNlbHMgYW55IHNjaGVkdWxlZCAnc3RvcCcgZnJvbSBiZWluZyBpbnZva2VkLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lXG5cdFx0ICogQHJldHVybiB7VG9uZS5Pc2NpbGxhdG9yfSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jYW5jZWxTdG9wKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRoaXMudG9TZWNvbmRzKHRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3luYyB0aGUgc2lnbmFsIHRvIHRoZSBUcmFuc3BvcnQncyBicG0uIEFueSBjaGFuZ2VzIHRvIHRoZSB0cmFuc3BvcnRzIGJwbSxcblx0XHQgKiAgd2lsbCBhbHNvIGFmZmVjdCB0aGUgb3NjaWxsYXRvcnMgZnJlcXVlbmN5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gMTIwO1xuXHRcdCAqIG9zYy5mcmVxdWVuY3kudmFsdWUgPSA0NDA7XG5cdFx0ICogLy90aGUgcmF0aW9uIGJldHdlZW4gdGhlIGJwbSBhbmQgdGhlIGZyZXF1ZW5jeSB3aWxsIGJlIG1haW50YWluZWRcblx0XHQgKiBvc2Muc3luY0ZyZXF1ZW5jeSgpO1xuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZSA9IDI0MDtcblx0XHQgKiAvLyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yIGlzIGRvdWJsZWQgdG8gODgwXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLnN5bmNGcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQuc3luY1NpZ25hbCh0aGlzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVuc3luYyB0aGUgb3NjaWxsYXRvcidzIGZyZXF1ZW5jeSBmcm9tIHRoZSBUcmFuc3BvcnQuXG5cdFx0ICogIFNlZSBUb25lLk9zY2lsbGF0b3Iuc3luY0ZyZXF1ZW5jeVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLnVuc3luY0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC51bnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yOiBlaXRoZXIgc2luZSwgc3F1YXJlLCB0cmlhbmdsZSwgb3Igc2F3dG9vdGguIEFsc28gY2FwYWJsZSBvZlxuXHRcdCAqIHNldHRpbmcgdGhlIGZpcnN0IHggbnVtYmVyIG9mIHBhcnRpYWxzIG9mIHRoZSBvc2NpbGxhdG9yLiBGb3IgZXhhbXBsZTogXCJzaW5lNFwiIHdvdWxkXG5cdFx0ICogc2V0IGJlIHRoZSBmaXJzdCA0IHBhcnRpYWxzIG9mIHRoZSBzaW5lIHdhdmUgYW5kIFwidHJpYW5nbGU4XCIgd291bGQgc2V0IHRoZSBmaXJzdFxuXHRcdCAqIDggcGFydGlhbHMgb2YgdGhlIHRyaWFuZ2xlIHdhdmUuXG5cdFx0ICogPGJyPjxicj5cblx0XHQgKiBVc2VzIFBlcmlvZGljV2F2ZSBpbnRlcm5hbGx5IGV2ZW4gZm9yIG5hdGl2ZSB0eXBlcyBzbyB0aGF0IGl0IGNhbiBzZXQgdGhlIHBoYXNlLlxuXHRcdCAqIFBlcmlvZGljV2F2ZSBlcXVhdGlvbnMgYXJlIGZyb20gdGhlXG5cdFx0ICogW1dlYmtpdCBXZWIgQXVkaW8gaW1wbGVtZW50YXRpb25dKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vY29kZXNlYXJjaCNjaHJvbWl1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1NvdXJjZS9tb2R1bGVzL3dlYmF1ZGlvL1BlcmlvZGljV2F2ZS5jcHAmc3E9cGFja2FnZTpjaHJvbWl1bSkuXG5cdFx0ICpcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgaXQgdG8gYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIG9zYy50eXBlID0gXCJzcXVhcmVcIjtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHRoZSBmaXJzdCA2IHBhcnRpYWxzIG9mIGEgc2F3dG9vdGggd2F2ZVxuXHRcdCAqIG9zYy50eXBlID0gXCJzYXd0b290aDZcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0Jhc2ljVHlwZSA9IFtcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNpbmUsXG5cdCAgICAgICAgICAgICAgICBUb25lLk9zY2lsbGF0b3IuVHlwZS5TcXVhcmUsXG5cdCAgICAgICAgICAgICAgICBUb25lLk9zY2lsbGF0b3IuVHlwZS5UcmlhbmdsZSxcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNhd3Rvb3RoXG5cdCAgICAgICAgICAgIF0uaW5jbHVkZXModHlwZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9waGFzZSA9PT0gMCAmJiBpc0Jhc2ljVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd2F2ZSA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICAvL2p1c3QgZ28gd2l0aCB0aGUgYmFzaWMgYXBwcm9hY2hcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID09PSB0eXBlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNvZWZzID0gdGhpcy5fZ2V0UmVhbEltYWdpbmFyeSh0eXBlLCB0aGlzLl9waGFzZSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgcGVyaW9kaWNXYXZlID0gdGhpcy5jb250ZXh0LmNyZWF0ZVBlcmlvZGljV2F2ZShjb2Vmc1swXSwgY29lZnNbMV0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd2F2ZSA9IHBlcmlvZGljV2F2ZTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zZXRQZXJpb2RpY1dhdmUodGhpcy5fd2F2ZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5IGNvbXBvbmVudHMgYmFzZWRcblx0XHQgKiAgb24gdGhlIG9zY2lsbGF0b3IgdHlwZS5cblx0XHQgKiAgQHJldHVybnMge0FycmF5fSBbcmVhbCwgaW1hZ2luYXJ5XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5fZ2V0UmVhbEltYWdpbmFyeSA9IGZ1bmN0aW9uICh0eXBlLCBwaGFzZSkge1xuXHQgICAgICAgIHZhciBmZnRTaXplID0gNDA5Njtcblx0ICAgICAgICB2YXIgcGVyaW9kaWNXYXZlU2l6ZSA9IGZmdFNpemUgLyAyO1xuXHQgICAgICAgIHZhciByZWFsID0gbmV3IEZsb2F0MzJBcnJheShwZXJpb2RpY1dhdmVTaXplKTtcblx0ICAgICAgICB2YXIgaW1hZyA9IG5ldyBGbG9hdDMyQXJyYXkocGVyaW9kaWNXYXZlU2l6ZSk7XG5cdCAgICAgICAgdmFyIHBhcnRpYWxDb3VudCA9IDE7XG5cdCAgICAgICAgaWYgKHR5cGUgPT09IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbSkge1xuXHQgICAgICAgICAgICBwYXJ0aWFsQ291bnQgPSB0aGlzLl9wYXJ0aWFscy5sZW5ndGggKyAxO1xuXHQgICAgICAgICAgICBwZXJpb2RpY1dhdmVTaXplID0gcGFydGlhbENvdW50O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBwYXJ0aWFsID0gL14oc2luZXx0cmlhbmdsZXxzcXVhcmV8c2F3dG9vdGgpKFxcZCspJC8uZXhlYyh0eXBlKTtcblx0ICAgICAgICAgICAgaWYgKHBhcnRpYWwpIHtcblx0ICAgICAgICAgICAgICAgIHBhcnRpYWxDb3VudCA9IHBhcnNlSW50KHBhcnRpYWxbMl0pICsgMTtcblx0ICAgICAgICAgICAgICAgIHR5cGUgPSBwYXJ0aWFsWzFdO1xuXHQgICAgICAgICAgICAgICAgcGFydGlhbENvdW50ID0gTWF0aC5tYXgocGFydGlhbENvdW50LCAyKTtcblx0ICAgICAgICAgICAgICAgIHBlcmlvZGljV2F2ZVNpemUgPSBwYXJ0aWFsQ291bnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgZm9yICh2YXIgbiA9IDE7IG4gPCBwZXJpb2RpY1dhdmVTaXplOyArK24pIHtcblx0ICAgICAgICAgICAgdmFyIHBpRmFjdG9yID0gMiAvIChuICogTWF0aC5QSSk7XG5cdCAgICAgICAgICAgIHZhciBiO1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5TaW5lOlxuXHQgICAgICAgICAgICAgICAgYiA9IG4gPD0gcGFydGlhbENvdW50ID8gMSA6IDA7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5TcXVhcmU6XG5cdCAgICAgICAgICAgICAgICBiID0gbiAmIDEgPyAyICogcGlGYWN0b3IgOiAwO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2F3dG9vdGg6XG5cdCAgICAgICAgICAgICAgICBiID0gcGlGYWN0b3IgKiAobiAmIDEgPyAxIDogLTEpO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuVHJpYW5nbGU6XG5cdCAgICAgICAgICAgICAgICBpZiAobiAmIDEpIHtcblx0ICAgICAgICAgICAgICAgICAgICBiID0gMiAqIChwaUZhY3RvciAqIHBpRmFjdG9yKSAqIChuIC0gMSA+PiAxICYgMSA/IC0xIDogMSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGIgPSAwO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tOlxuXHQgICAgICAgICAgICAgICAgYiA9IHRoaXMuX3BhcnRpYWxzW24gLSAxXTtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5Pc2NpbGxhdG9yOiBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAoYiAhPT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmVhbFtuXSA9IC1iICogTWF0aC5zaW4ocGhhc2UgKiBuKTtcblx0ICAgICAgICAgICAgICAgIGltYWdbbl0gPSBiICogTWF0aC5jb3MocGhhc2UgKiBuKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJlYWxbbl0gPSAwO1xuXHQgICAgICAgICAgICAgICAgaW1hZ1tuXSA9IDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFtcblx0ICAgICAgICAgICAgcmVhbCxcblx0ICAgICAgICAgICAgaW1hZ1xuXHQgICAgICAgIF07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbXB1dGUgdGhlIGludmVyc2UgRkZUIGZvciBhIGdpdmVuIHBoYXNlLlxuXHRcdCAqICBAcGFyYW0gIHtGbG9hdDMyQXJyYXl9ICByZWFsXG5cdFx0ICogIEBwYXJhbSAge0Zsb2F0MzJBcnJheX0gIGltYWdcblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBwaGFzZVxuXHRcdCAqICBAcmV0dXJuICB7QXVkaW9SYW5nZX1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX2ludmVyc2VGRlQgPSBmdW5jdGlvbiAocmVhbCwgaW1hZywgcGhhc2UpIHtcblx0ICAgICAgICB2YXIgc3VtID0gMDtcblx0ICAgICAgICB2YXIgbGVuID0gcmVhbC5sZW5ndGg7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICBzdW0gKz0gcmVhbFtpXSAqIE1hdGguY29zKGkgKiBwaGFzZSkgKyBpbWFnW2ldICogTWF0aC5zaW4oaSAqIHBoYXNlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHN1bTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHJldHVybiAge0F1ZGlvUmFuZ2V9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9nZXRJbml0aWFsVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGNvZWZzID0gdGhpcy5fZ2V0UmVhbEltYWdpbmFyeSh0aGlzLl90eXBlLCAwKTtcblx0ICAgICAgICB2YXIgcmVhbCA9IGNvZWZzWzBdO1xuXHQgICAgICAgIHZhciBpbWFnID0gY29lZnNbMV07XG5cdCAgICAgICAgdmFyIG1heFZhbHVlID0gMDtcblx0ICAgICAgICB2YXIgdHdvUGkgPSBNYXRoLlBJICogMjtcblx0ICAgICAgICAvL2NoZWNrIGZvciBwZWFrcyBpbiA4IHBsYWNlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgIG1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5faW52ZXJzZUZGVChyZWFsLCBpbWFnLCBpIC8gOCAqIHR3b1BpKSwgbWF4VmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gLXRoaXMuX2ludmVyc2VGRlQocmVhbCwgaW1hZywgdGhpcy5fcGhhc2UpIC8gbWF4VmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlICE9PSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b20pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBbXTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJ0aWFscztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBoYXNlID0gMTgwOyAvL2ZsaXBzIHRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BoYXNlICogKDE4MCAvIE1hdGguUEkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGhhc2UgPSBwaGFzZSAqIE1hdGguUEkgLyAxODA7XG5cdCAgICAgICAgICAgIC8vcmVzZXQgdGhlIHR5cGVcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBEaXNwb3NlIGFuZCBkaXNjb25uZWN0LlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fd2F2ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBdWRpb1RvR2FpbiBjb252ZXJ0cyBhbiBpbnB1dCBpbiBBdWRpb1JhbmdlIFstMSwxXSB0byBOb3JtYWxSYW5nZSBbMCwxXS4gXG5cdFx0ICogICAgICAgICBTZWUgVG9uZS5HYWluVG9BdWRpby5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGEyZyA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvVG9HYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICh4ICsgMSkgLyAyO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXVkaW9Ub0dhaW4sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ub0dhaW59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ub0dhaW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbm9ybS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXVkaW9Ub0dhaW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5aZXJvIG91dHB1dHMgMCdzIGF0IGF1ZGlvLXJhdGUuIFRoZSByZWFzb24gdGhpcyBoYXMgdG8gYmVcblx0XHQgKiAgICAgICAgIGl0J3Mgb3duIGNsYXNzIGlzIHRoYXQgbWFueSBicm93c2VycyBvcHRpbWl6ZSBvdXQgVG9uZS5TaWduYWxcblx0XHQgKiAgICAgICAgIHdpdGggYSB2YWx1ZSBvZiAwIGFuZCB3aWxsIG5vdCBwcm9jZXNzIG5vZGVzIGZ1cnRoZXIgZG93biB0aGUgZ3JhcGguXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLlplcm8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5nZXRDb25zdGFudCgwKS5jb25uZWN0KHRoaXMuX2dhaW4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuWmVybywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5aZXJvfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5aZXJvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2dhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlplcm87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgTEZPIHN0YW5kcyBmb3IgbG93IGZyZXF1ZW5jeSBvc2NpbGxhdG9yLiBUb25lLkxGTyBwcm9kdWNlcyBhbiBvdXRwdXQgc2lnbmFsXG5cdFx0ICogICAgICAgICAgd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHRvIGFuIEF1ZGlvUGFyYW0gb3IgVG9uZS5TaWduYWxcblx0XHQgKiAgICAgICAgICBpbiBvcmRlciB0byBtb2R1bGF0ZSB0aGF0IHBhcmFtZXRlciB3aXRoIGFuIG9zY2lsbGF0b3IuIFRoZSBMRk8gY2FuXG5cdFx0ICogICAgICAgICAgYWxzbyBiZSBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydCB0byBzdGFydC9zdG9wIGFuZCBjaGFuZ2Ugd2hlbiB0aGUgdGVtcG8gY2hhbmdlcy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0aW9uLiBUeXBpY2FsbHksIExGT3Mgd2lsbCBiZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBmcmVxdWVuY3kgcmFuZ2Ugb2YgMC4xIHRvIDEwIGhlcnR6LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IG1pbiBUaGUgbWluaW11bSBvdXRwdXQgdmFsdWUgb2YgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSBtYXggVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIExGTy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbGZvID0gbmV3IFRvbmUuTEZPKFwiNG5cIiwgNDAwLCA0MDAwKTtcblx0XHQgKiBsZm8uY29ubmVjdChmaWx0ZXIuZnJlcXVlbmN5KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdtaW4nLFxuXHQgICAgICAgICAgICAnbWF4J1xuXHQgICAgICAgIF0sIFRvbmUuTEZPKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAndHlwZSc6IG9wdGlvbnMudHlwZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8ncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgYW1wbGl0dWRlIG9mIHRoZSBMRk8sIHdoaWNoIGNvbnRyb2xzIHRoZSBvdXRwdXQgcmFuZ2UgYmV0d2VlblxuXHRcdFx0ICogdGhlIG1pbiBhbmQgbWF4IG91dHB1dC4gRm9yIGV4YW1wbGUgaWYgdGhlIG1pbiBpcyAtMTAgYW5kIHRoZSBtYXhcblx0XHRcdCAqIGlzIDEwLCBzZXR0aW5nIHRoZSBhbXBsaXR1ZGUgdG8gMC41IHdvdWxkIG1ha2UgdGhlIExGTyBtb2R1bGF0ZVxuXHRcdFx0ICogYmV0d2VlbiAtNSBhbmQgNS5cblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmFtcGxpdHVkZSA9IHRoaXMuX29zY2lsbGF0b3Iudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlLnVuaXRzID0gVG9uZS5UeXBlLk5vcm1hbFJhbmdlO1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlLnZhbHVlID0gb3B0aW9ucy5hbXBsaXR1ZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZ25hbCB3aGljaCBpcyBvdXRwdXQgd2hlbiB0aGUgTEZPIGlzIHN0b3BwZWRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDAsIFRvbmUuVHlwZS5BdWRpb1JhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBKdXN0IG91dHB1dHMgemVyb3MuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuWmVyb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5femVyb3MgPSBuZXcgVG9uZS5aZXJvKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHRoYXQgdGhlIExGTyBvdXRwdXRzIHdoZW4gaXQncyBzdG9wcGVkXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRWYWx1ZSA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQXVkaW9Ub0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2EyZyA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlciA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2NhbGUob3B0aW9ucy5taW4sIG9wdGlvbnMubWF4KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdW5pdHMgb2YgdGhlIExGTyAodXNlZCBmb3IgY29udmVydGluZylcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UeXBlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl91bml0cyA9IFRvbmUuVHlwZS5EZWZhdWx0O1xuXHQgICAgICAgIHRoaXMudW5pdHMgPSBvcHRpb25zLnVuaXRzO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY2hhaW4odGhpcy5fYTJnLCB0aGlzLl9zY2FsZXIpO1xuXHQgICAgICAgIHRoaXMuX3plcm9zLmNvbm5lY3QodGhpcy5fYTJnKTtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLmNvbm5lY3QodGhpcy5fYTJnKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdhbXBsaXR1ZGUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMucGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTEZPLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdmcmVxdWVuY3knOiAnNG4nLFxuXHQgICAgICAgICdhbXBsaXR1ZGUnOiAxLFxuXHQgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWZhdWx0XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIExGTyB3aWxsIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIExGTyB3aWxsIHN0b3Bcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuc2V0VmFsdWVBdFRpbWUodGhpcy5fc3RvcHBlZFZhbHVlLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN5bmMgdGhlIHN0YXJ0L3N0b3AvcGF1c2UgdG8gdGhlIHRyYW5zcG9ydFxuXHRcdCAqICBhbmQgdGhlIGZyZXF1ZW5jeSB0byB0aGUgYnBtIG9mIHRoZSB0cmFuc3BvcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIGxmby5mcmVxdWVuY3kudmFsdWUgPSBcIjhuXCI7XG5cdFx0ICogIGxmby5zeW5jKCkuc3RhcnQoMClcblx0XHQgKiAgLy90aGUgcmF0ZSBvZiB0aGUgTEZPIHdpbGwgYWx3YXlzIGJlIGFuIGVpZ2h0aCBub3RlLFxuXHRcdCAqICAvL2V2ZW4gYXMgdGhlIHRlbXBvIGNoYW5nZXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3luY0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB1bnN5bmMgdGhlIExGTyBmcm9tIHRyYW5zcG9ydCBjb250cm9sXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnVuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudW5zeW5jRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbml1bXVtIG91dHB1dCBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvVW5pdHModGhpcy5fc2NhbGVyLm1pbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgbWluID0gdGhpcy5fZnJvbVVuaXRzKG1pbik7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlci5taW4gPSBtaW47XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90b1VuaXRzKHRoaXMuX3NjYWxlci5tYXgpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIG1heCA9IHRoaXMuX2Zyb21Vbml0cyhtYXgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZXIubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3I6IHNpbmUsIHNxdWFyZSwgc2F3dG9vdGgsIHRyaWFuZ2xlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkVmFsdWUgPSB0aGlzLl9vc2NpbGxhdG9yLl9nZXRJbml0aWFsVmFsdWUoKTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC52YWx1ZSA9IHRoaXMuX3N0b3BwZWRWYWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkVmFsdWUgPSB0aGlzLl9vc2NpbGxhdG9yLl9nZXRJbml0aWFsVmFsdWUoKTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC52YWx1ZSA9IHRoaXMuX3N0b3BwZWRWYWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvdXRwdXQgdW5pdHMgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge1RvbmUuVHlwZX1cblx0XHQgKiBAbmFtZSB1bml0c1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3VuaXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdW5pdHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdmFyIGN1cnJlbnRNaW4gPSB0aGlzLm1pbjtcblx0ICAgICAgICAgICAgdmFyIGN1cnJlbnRNYXggPSB0aGlzLm1heDtcblx0ICAgICAgICAgICAgLy9jb252ZXJ0IHRoZSBtaW4gYW5kIHRoZSBtYXhcblx0ICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB2YWw7XG5cdCAgICAgICAgICAgIHRoaXMubWluID0gY3VycmVudE1pbjtcblx0ICAgICAgICAgICAgdGhpcy5tYXggPSBjdXJyZW50TWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5zdGF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhlIExGTyB0byBhbiBBdWRpb1BhcmFtLCBBdWRpb05vZGUsIG9yIFRvbmUgTm9kZS5cblx0XHQgKiAgVG9uZS5MRk8gd2lsbCBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgdG8gdGhlIGRlc3RpbmF0aW9uIHVuaXRzIG9mIHRoZVxuXHRcdCAqICB3aWxsIGdldCB0aGUgdW5pdHMgZnJvbSB0aGUgY29ubmVjdGVkIG5vZGUuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUgfCBBdWRpb1BhcmFtIHwgQXVkaW9Ob2RlfSBub2RlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TnVtPTBdIG9wdGlvbmFsbHkgd2hpY2ggb3V0cHV0IHRvIGNvbm5lY3QgZnJvbVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2lucHV0TnVtPTBdIG9wdGlvbmFsbHkgd2hpY2ggaW5wdXQgdG8gY29ubmVjdCB0b1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAobm9kZS5jb25zdHJ1Y3RvciA9PT0gVG9uZS5TaWduYWwgfHwgbm9kZS5jb25zdHJ1Y3RvciA9PT0gVG9uZS5QYXJhbSkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnZlcnQgPSBub2RlLmNvbnZlcnQ7XG5cdCAgICAgICAgICAgIHRoaXMudW5pdHMgPSBub2RlLnVuaXRzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcHJpdmF0ZSBtZXRob2QgYm9ycm93ZWQgZnJvbSBQYXJhbSBjb252ZXJ0c1xuXHRcdCAqICB1bml0cyBmcm9tIHRoZWlyIGRlc3RpbmF0aW9uIHZhbHVlXG5cdFx0ICogIEBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLl9mcm9tVW5pdHMgPSBUb25lLlBhcmFtLnByb3RvdHlwZS5fZnJvbVVuaXRzO1xuXHQgICAgLyoqXG5cdFx0ICogIHByaXZhdGUgbWV0aG9kIGJvcnJvd2VkIGZyb20gUGFyYW0gY29udmVydHNcblx0XHQgKiAgdW5pdHMgdG8gdGhlaXIgZGVzdGluYXRpb24gdmFsdWVcblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuX3RvVW5pdHMgPSBUb25lLlBhcmFtLnByb3RvdHlwZS5fdG9Vbml0cztcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNjb25uZWN0IGFuZCBkaXNwb3NlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdhbXBsaXR1ZGUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3plcm9zLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl96ZXJvcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2EyZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYTJnID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkxGTztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTGltaXRlciB3aWxsIGxpbWl0IHRoZSBsb3VkbmVzcyBvZiBhbiBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogICAgICAgICBJdCBpcyBjb21wb3NlZCBvZiBhIFRvbmUuQ29tcHJlc3NvciB3aXRoIGEgZmFzdCBhdHRhY2tcblx0XHQgKiAgICAgICAgIGFuZCByZWxlYXNlLiBMaW1pdGVycyBhcmUgY29tbW9ubHkgdXNlZCB0byBzYWZlZ3VhcmQgYWdhaW5zdFxuXHRcdCAqICAgICAgICAgc2lnbmFsIGNsaXBwaW5nLiBVbmxpa2UgYSBjb21wcmVzc29yLCBsaW1pdGVycyBkbyBub3QgcHJvdmlkZVxuXHRcdCAqICAgICAgICAgc21vb3RoIGdhaW4gcmVkdWN0aW9uIGFuZCBhbG1vc3QgY29tcGxldGVseSBwcmV2ZW50XG5cdFx0ICogICAgICAgICBhZGRpdGlvbmFsIGdhaW4gYWJvdmUgdGhlIHRocmVzaG9sZC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGhyZXNob2xkIFRoZSB0aGVzaG9sZCBhYm92ZSB3aGljaCB0aGUgbGltaXRpbmcgaXMgYXBwbGllZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGxpbWl0ZXIgPSBuZXcgVG9uZS5MaW1pdGVyKC02KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTGltaXRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3RocmVzaG9sZCddLCBUb25lLkxpbWl0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbXByZXNzb3Jcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuQ29tcHJlc3Nvcih7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4wMDEsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnOiBvcHRpb25zLnRocmVzaG9sZFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHRocmVzaG9sZCBvZiBvZiB0aGUgbGltaXRlclxuXHRcdFx0ICogQHR5cGUge0RlY2liZWx9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IHRoaXMuX2NvbXByZXNzb3IudGhyZXNob2xkO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd0aHJlc2hvbGQnKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxpbWl0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZVxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaW1pdGVyLmRlZmF1bHRzID0geyAndGhyZXNob2xkJzogLTEyIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxpbWl0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGltaXRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd0aHJlc2hvbGQnKTtcblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTGltaXRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTG93cGFzcyBpcyBhIGxvd3Bhc3MgZmVlZGJhY2sgY29tYiBmaWx0ZXIuIEl0IGlzIHNpbWlsYXIgdG9cblx0XHQgKiAgICAgICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLCBidXQgaW5jbHVkZXMgYSBsb3dwYXNzIGZpbHRlci5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgdGltZSBvZiB0aGUgY29tYiBmaWx0ZXJcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZT19IHJlc29uYW5jZSBUaGUgcmVzb25hbmNlIChmZWVkYmFjaykgb2YgdGhlIGNvbWIgZmlsdGVyXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5PX0gZGFtcGVuaW5nIFRoZSBjdXRvZmYgb2YgdGhlIGxvd3Bhc3MgZmlsdGVyIGRhbXBlbnMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbCBhcyBpdCBpcyBmZWRiYWNrLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdLCBUb25lLkxvd3Bhc3NDb21iRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLkRlbGF5KG9wdGlvbnMuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXlUaW1lIG9mIHRoZSBjb21iIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IHRoaXMuX2RlbGF5LmRlbGF5VGltZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbG93cGFzcyBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSAge0JpcXVhZEZpbHRlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICB0aGlzLl9sb3dwYXNzLlEudmFsdWUgPSAtMy4wMTAyOTk5NTY2Mzk4MTI1O1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MudHlwZSA9ICdsb3dwYXNzJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGFtcGVuaW5nIGNvbnRyb2wgb2YgdGhlIGZlZWRiYWNrXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fbG93cGFzcy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5GcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZGFtcGVuaW5nXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZlZWRiYWNrIGdhaW5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5yZXNvbmFuY2UsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBmZWVkYmFjayBvZiB0aGUgZGVsYXllZCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gdGhpcy5fZmVlZGJhY2suZ2Fpbjtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fZGVsYXkuY2hhaW4odGhpcy5fbG93cGFzcywgdGhpcy5fZmVlZGJhY2ssIHRoaXMuX2RlbGF5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxvd3Bhc3NDb21iRmlsdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4xLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiAwLjUsXG5cdCAgICAgICAgJ2RhbXBlbmluZyc6IDMwMDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxvd3Bhc3NDb21iRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvd3Bhc3NDb21iRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJyxcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5NZXJnZSBicmluZ3MgdHdvIHNpZ25hbHMgaW50byB0aGUgbGVmdCBhbmQgcmlnaHRcblx0XHQgKiAgICAgICAgICBjaGFubmVscyBvZiBhIHNpbmdsZSBzdGVyZW8gY2hhbm5lbC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtZXJnZSA9IG5ldyBUb25lLk1lcmdlKCkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3JvdXRpbmcgYSBzaW5lIHRvbmUgaW4gdGhlIGxlZnQgY2hhbm5lbFxuXHRcdCAqIC8vYW5kIG5vaXNlIGluIHRoZSByaWdodCBjaGFubmVsXG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KG1lcmdlLmxlZnQpO1xuXHRcdCAqIHZhciBub2lzZSA9IG5ldyBUb25lLk5vaXNlKCkuY29ubmVjdChtZXJnZS5yaWdodCk7XG5cdFx0ICogLy9zdGFydGluZyBvdXIgb3NjaWxsYXRvcnNcblx0XHQgKiBub2lzZS5zdGFydCgpO1xuXHRcdCAqIG9zYy5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXJnZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbGVmdCBpbnB1dCBjaGFubmVsLlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByaWdodCBpbnB1dCBjaGFubmVsLlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFsxXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yaWdodCA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1lcmdlciBub2RlIGZvciB0aGUgdHdvIGNoYW5uZWxzXG5cdFx0XHQgKiAgQHR5cGUge0NoYW5uZWxNZXJnZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZXIgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVDaGFubmVsTWVyZ2VyKDIpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmxlZnQuY29ubmVjdCh0aGlzLl9tZXJnZXIsIDAsIDApO1xuXHQgICAgICAgIHRoaXMucmlnaHQuY29ubmVjdCh0aGlzLl9tZXJnZXIsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMubGVmdC5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgIHRoaXMucmlnaHQuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICB0aGlzLmxlZnQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgdGhpcy5yaWdodC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1lcmdlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lcmdlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1lcmdlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21lcmdlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2VyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZXJnZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1ldGVyIGdldHMgdGhlIFtSTVNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Jvb3RfbWVhbl9zcXVhcmUpXG5cdFx0ICogICAgICAgICAgb2YgYW4gaW5wdXQgc2lnbmFsIHdpdGggc29tZSBhdmVyYWdpbmcgYXBwbGllZC4gSXQgY2FuIGFsc28gZ2V0IHRoZSByYXdcblx0XHQgKiAgICAgICAgICB2YWx1ZSBvZiB0aGUgaW5wdXQgc2lnbmFsLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBzbW9vdGhpbmcgVGhlIGFtb3VudCBvZiBzbW9vdGhpbmcgYXBwbGllZCBiZXR3ZWVuIGZyYW1lcy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbWV0ZXIgPSBuZXcgVG9uZS5NZXRlcigpO1xuXHRcdCAqIHZhciBtaWMgPSBuZXcgVG9uZS5Vc2VyTWVkaWEoKS5vcGVuKCk7XG5cdFx0ICogLy9jb25uZWN0IG1pYyB0byB0aGUgbWV0ZXJcblx0XHQgKiBtaWMuY29ubmVjdChtZXRlcik7XG5cdFx0ICogLy90aGUgY3VycmVudCBsZXZlbCBvZiB0aGUgbWljIGlucHV0IGluIGRlY2liZWxzXG5cdFx0ICogdmFyIGxldmVsID0gbWV0ZXIuZ2V0VmFsdWUoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzbW9vdGhpbmcnXSwgVG9uZS5NZXRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZSB3aGljaCBjb21wdXRlcyB0aGUgbGV2ZWxzLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkFuYWx5c2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5fYW5hbHlzZXIgPSBuZXcgVG9uZS5BbmFseXNlcignd2F2ZWZvcm0nLCAxMDI0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGNhcnJ5b3ZlciBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCBsYXN0IGZyYW1lLlxuXHRcdFx0ICogIE9ubHkgYXBwbGllZCBtZXRlciBmb3IgXCJsZXZlbFwiIHR5cGUuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNtb290aGluZyA9IG9wdGlvbnMuc21vb3RoaW5nO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWV0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIuZGVmYXVsdHMgPSB7ICdzbW9vdGhpbmcnOiAwLjggfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGN1cnJlbnQgZGVjaWJlbCB2YWx1ZSBvZiB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogIEByZXR1cm5zIHtEZWNpYmVsc31cblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIucHJvdG90eXBlLmdldExldmVsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLnR5cGUgPSAnZmZ0Jztcblx0ICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgICAgICB2YXIgb2Zmc2V0ID0gMjg7XG5cdCAgICAgICAgLy8gbm9ybWFsaXplcyBtb3N0IHNpZ25hbCBsZXZlbHNcblx0ICAgICAgICAvLyBUT0RPOiBjb21wdXRlIGxvdWRuZXNzIGZyb20gRkZUXG5cdCAgICAgICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KHRoaXMsIHZhbHVlcykgKyBvZmZzZXQ7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc2lnbmFsIHZhbHVlIG9mIHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgQHJldHVybnMge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLnR5cGUgPSAnd2F2ZWZvcm0nO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX2FuYWx5c2VyLmdldFZhbHVlKCk7XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlWzBdO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEEgdmFsdWUgZnJvbSAwIC0+IDEgd2hlcmUgMCByZXByZXNlbnRzIG5vIHRpbWUgYXZlcmFnaW5nIHdpdGggdGhlIGxhc3QgYW5hbHlzaXMgZnJhbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTWV0ZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBzbW9vdGhpbmdcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGVyLnByb3RvdHlwZSwgJ3Ntb290aGluZycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zbW9vdGhpbmcgPSB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1ldGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZXRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKlx0QGNsYXNzICBUb25lLlNwbGl0IHNwbGl0cyBhbiBpbmNvbWluZyBzaWduYWwgaW50byBsZWZ0IGFuZCByaWdodCBjaGFubmVscy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzcGxpdCA9IG5ldyBUb25lLlNwbGl0KCk7XG5cdFx0ICogc3RlcmVvU2lnbmFsLmNvbm5lY3Qoc3BsaXQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TcGxpdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygwLCAyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7Q2hhbm5lbFNwbGl0dGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNoYW5uZWxTcGxpdHRlcigyKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jaGFubmVsQ291bnQgPSAyO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIExlZnQgY2hhbm5lbCBvdXRwdXQuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPm91dHB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5vdXRwdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgUmlnaHQgY2hhbm5lbCBvdXRwdXQuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPm91dHB1dFsxXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yaWdodCA9IHRoaXMub3V0cHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jb25uZWN0KHRoaXMubGVmdCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuY29ubmVjdCh0aGlzLnJpZ2h0LCAxLCAwKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNwbGl0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNwbGl0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNwbGl0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMubGVmdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJpZ2h0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3BsaXQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBNaWQvU2lkZSBwcm9jZXNzaW5nIHNlcGFyYXRlcyB0aGUgdGhlICdtaWQnIHNpZ25hbFxuXHRcdCAqICAgICAgICAgKHdoaWNoIGNvbWVzIG91dCBvZiBib3RoIHRoZSBsZWZ0IGFuZCB0aGUgcmlnaHQgY2hhbm5lbClcblx0XHQgKiAgICAgICAgIGFuZCB0aGUgJ3NpZGUnICh3aGljaCBvbmx5IGNvbWVzIG91dCBvZiB0aGUgdGhlIHNpZGUgY2hhbm5lbHMpLiA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgPGNvZGU+XG5cdFx0ICogICAgICAgICBNaWQgPSAoTGVmdCtSaWdodCkvc3FydCgyKTsgICAvLyBvYnRhaW4gbWlkLXNpZ25hbCBmcm9tIGxlZnQgYW5kIHJpZ2h0PGJyPlxuXHRcdCAqICAgICAgICAgU2lkZSA9IChMZWZ0LVJpZ2h0KS9zcXJ0KDIpOyAgIC8vIG9idGFpbiBzaWRlLXNpZ25hbCBmcm9tIGxlZnQgYW5kIHJpZ2g8YnI+XG5cdFx0ICogICAgICAgICA8L2NvZGU+XG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZVNwbGl0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDAsIDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWwgaW50byBsZWZ0IGFuZCByaWdodCBjaGFubmVsc1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHNlbmQuIENvbm5lY3QgdG8gbWlkIHByb2Nlc3NpbmcuIEFsaWFzIGZvclxuXHRcdFx0ICogIDxjb2RlPm91dHB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRBZGQgPSBuZXcgVG9uZS5BZGQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIE11bHRpcGx5IHRoZSBfbWlkQWRkIGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMub3V0cHV0WzBdID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSBvdXRwdXQuIENvbm5lY3QgdG8gc2lkZSBwcm9jZXNzaW5nLiBBbHNvIE91dHB1dCAxXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaWRlU3VidHJhY3QgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIF9taWRBZGQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IHRoaXMub3V0cHV0WzFdID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX21pZEFkZCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuY29ubmVjdCh0aGlzLl9taWRBZGQsIDEsIDEpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fc2lkZVN1YnRyYWN0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX3NpZGVTdWJ0cmFjdCwgMSwgMSk7XG5cdCAgICAgICAgdGhpcy5fbWlkQWRkLmNvbm5lY3QodGhpcy5taWQpO1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdC5jb25uZWN0KHRoaXMuc2lkZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRTaWRlU3BsaXQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlU3BsaXR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZVNwbGl0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkQWRkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRBZGQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVTcGxpdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1pZC9TaWRlIHByb2Nlc3Npbmcgc2VwYXJhdGVzIHRoZSB0aGUgJ21pZCcgc2lnbmFsXG5cdFx0ICogICAgICAgICAod2hpY2ggY29tZXMgb3V0IG9mIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBjaGFubmVsKVxuXHRcdCAqICAgICAgICAgYW5kIHRoZSAnc2lkZScgKHdoaWNoIG9ubHkgY29tZXMgb3V0IG9mIHRoZSB0aGUgc2lkZSBjaGFubmVscykuXG5cdFx0ICogICAgICAgICBNaWRTaWRlTWVyZ2UgbWVyZ2VzIHRoZSBtaWQgYW5kIHNpZGUgc2lnbmFsIGFmdGVyIHRoZXkndmUgYmVlbiBzZXBlcmF0ZWRcblx0XHQgKiAgICAgICAgIGJ5IFRvbmUuTWlkU2lkZVNwbGl0Ljxicj48YnI+XG5cdFx0ICogICAgICAgICA8Y29kZT5cblx0XHQgKiAgICAgICAgIExlZnQgPSAoTWlkK1NpZGUpL3NxcnQoMik7ICAgLy8gb2J0YWluIGxlZnQgc2lnbmFsIGZyb20gbWlkIGFuZCBzaWRlPGJyPlxuXHRcdCAqICAgICAgICAgUmlnaHQgPSAoTWlkLVNpZGUpL3NxcnQoMik7ICAgLy8gb2J0YWluIHJpZ2h0IHNpZ25hbCBmcm9tIG1pZCBhbmQgc2lkZTxicj5cblx0XHQgKiAgICAgICAgIDwvY29kZT5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlTWVyZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBzaWduYWwgaW5wdXQuIEFsaWFzIGZvclxuXHRcdFx0ICogIDxjb2RlPmlucHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJlY29tYmluZSB0aGUgbWlkL3NpZGUgaW50byBMZWZ0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWRkfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbmV3IFRvbmUuQWRkKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgbGVmdCBieSBzcXJ0KDEvMilcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29MZWZ0ID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSBzaWduYWwgaW5wdXQuIEFsaWFzIGZvclxuXHRcdFx0ICogIDxjb2RlPmlucHV0WzFdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICByZWNvbWJpbmUgdGhlIG1pZC9zaWRlIGludG8gUmlnaHRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIHJpZ2h0IGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0ID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBNZXJnZSB0aGUgbGVmdC9yaWdodCBzaWduYWwgYmFjayBpbnRvIGEgc3RlcmVvIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgdGhpcy5taWQuY29ubmVjdCh0aGlzLl9sZWZ0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLnNpZGUuY29ubmVjdCh0aGlzLl9sZWZ0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLm1pZC5jb25uZWN0KHRoaXMuX3JpZ2h0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLnNpZGUuY29ubmVjdCh0aGlzLl9yaWdodCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fbGVmdC5jb25uZWN0KHRoaXMuX3RpbWVzVHdvTGVmdCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQuY29ubmVjdCh0aGlzLl90aW1lc1R3b1JpZ2h0KTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQuY29ubmVjdCh0aGlzLl9tZXJnZSwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29SaWdodC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAxKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVNZXJnZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1pZFNpZGVNZXJnZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlTWVyZ2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5zaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVNZXJnZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IgYXBwbGllcyB0d28gZGlmZmVyZW50IGNvbXByZXNzb3JzIHRvIHRoZSBtaWRcblx0XHQgKiAgICAgICAgIGFuZCBzaWRlIHNpZ25hbCBjb21wb25lbnRzLiBTZWUgVG9uZS5NaWRTaWRlU3BsaXQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgb3B0aW9ucyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIG1pZCBhbmQgc2lkZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc29ycy5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVDb21wcmVzc29yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5NaWRTaWRlQ29tcHJlc3Nvci5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1pZC9zaWRlIHNwbGl0XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVTcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk1pZFNpZGVTcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtaWQvc2lkZSByZWNvbWJpbmF0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVNZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NaWRTaWRlTWVyZ2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBtaWQgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5taWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIHNpZGUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGUgPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMuc2lkZSk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0Lm1pZC5jaGFpbih0aGlzLm1pZCwgdGhpcy5fbWlkU2lkZU1lcmdlLm1pZCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0LnNpZGUuY2hhaW4odGhpcy5zaWRlLCB0aGlzLl9taWRTaWRlTWVyZ2Uuc2lkZSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ3NpZGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRTaWRlQ29tcHJlc3NvciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVDb21wcmVzc29yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtaWQnOiB7XG5cdCAgICAgICAgICAgICdyYXRpbyc6IDMsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnOiAtMjQsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC4wMyxcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDIsXG5cdCAgICAgICAgICAgICdrbmVlJzogMTZcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdzaWRlJzoge1xuXHQgICAgICAgICAgICAncmF0aW8nOiA2LFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJzogLTMwLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuMjUsXG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAzLFxuXHQgICAgICAgICAgICAna25lZSc6IDEwXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZUNvbXByZXNzb3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnc2lkZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5zaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVDb21wcmVzc29yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Nb25vIGNvZXJjZXMgdGhlIGluY29taW5nIG1vbm8gb3Igc3RlcmVvIHNpZ25hbCBpbnRvIGEgbW9ubyBzaWduYWxcblx0XHQgKiAgICAgICAgIHdoZXJlIGJvdGggbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gVGhpcyBjYW4gYmUgdXNlZnVsXG5cdFx0ICogICAgICAgICBmb3IgW3N0ZXJlbyBpbWFnaW5nXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TdGVyZW9faW1hZ2luZykuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ubyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBtZXJnZSB0aGUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NZXJnZSgpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9tZXJnZSwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAxKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1vbm8sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vbm87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIGNvbXByZXNzb3Igd2l0aCBzZXBlcmF0ZSBjb250cm9scyBvdmVyIGxvdy9taWQvaGlnaCBkeW5hbWljc1xuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBsb3cvbWlkL2hpZ2ggY29tcHJlc3NvciBzZXR0aW5ncy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIG11bHRpYmFuZCA9IG5ldyBUb25lLk11bHRpYmFuZENvbXByZXNzb3Ioe1xuXHRcdCAqICBcdFwibG93RnJlcXVlbmN5XCIgOiAyMDAsXG5cdFx0ICogIFx0XCJoaWdoRnJlcXVlbmN5XCIgOiAxMzAwXG5cdFx0ICogIFx0XCJsb3dcIiA6IHtcblx0XHQgKiAgXHRcdFwidGhyZXNob2xkXCIgOiAtMTJcblx0XHQgKiAgXHR9XG5cdFx0ICogIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZENvbXByZXNzb3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhhcmd1bWVudHMsIFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvci5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3BsaXQgdGhlIGluY29taW5nIHNpZ25hbCBpbnRvIGhpZ2gvbWlkL2xvd1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpYmFuZFNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aWJhbmRTcGxpdCh7XG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knOiBvcHRpb25zLmxvd0ZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiBvcHRpb25zLmhpZ2hGcmVxdWVuY3lcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IHRoaXMuX3NwbGl0dGVyLmxvd0ZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gdGhpcy5fc3BsaXR0ZXIuaGlnaEZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3V0cHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgbG93IGZyZXF1ZW5jaWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvdyA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5sb3cpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIG1pZCBmcmVxdWVuY2llcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Db21wcmVzc29yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMubWlkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBoaWdoIGZyZXF1ZW5jaWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2ggPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMuaGlnaCk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBjb21wcmVzc29yXG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIubG93LmNoYWluKHRoaXMubG93LCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIubWlkLmNoYWluKHRoaXMubWlkLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuaGlnaC5jaGFpbih0aGlzLmhpZ2gsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbG93JzogVG9uZS5Db21wcmVzc29yLmRlZmF1bHRzLFxuXHQgICAgICAgICdtaWQnOiBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMsXG5cdCAgICAgICAgJ2hpZ2gnOiBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMsXG5cdCAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IDI1MCxcblx0ICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IDIwMDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTXVsdGliYW5kQ29tcHJlc3Nvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmxvdy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGlnaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQgJiYgIXdpbmRvdy5TdGVyZW9QYW5uZXJOb2RlKSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBAY2xhc3MgU2hpbW1lZCBTdGVyZW9QYW5uZXJOb2RlXG5cdFx0XHQgKiBAcGFyYW0gIHtBdWRpb0NvbnRleHR9IGNvbnRleHRcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB2YXIgU3RlcmVvUGFubmVyTm9kZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgYXVkaW8gY29udGV4dFxuXHRcdFx0XHQgKiBAdHlwZSB7QXVkaW9Db250ZXh0fVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSBsZWZ0L3JpZ2h0IHBhbm5pbmcuIFstMSwgMV1cblx0XHRcdFx0ICogQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHRcdCAqIEBzaWduYWxcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMucGFuID0gbmV3IFRvbmUuU2lnbmFsKDAsIFRvbmUuVHlwZS5BdWRpb1JhbmdlKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIEVxdWFsIHBvd2VyIHNjYWxpbmcgb2YgdGhlIHJpZ2h0IGdhaW5cblx0XHRcdFx0ICogQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciByaWdodFdhdmVTaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmVxdWFsUG93ZXJTY2FsZSgodmFsICsgMSkgLyAyKTtcblx0ICAgICAgICAgICAgfSwgNDA5Nik7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBFcXVhbCBwb3dlciBzY2FsaW5nIG9mIHRoZSBsZWZ0IGdhaW5cblx0XHRcdFx0ICogQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBsZWZ0V2F2ZVNoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZXF1YWxQb3dlclNjYWxlKDEgLSAodmFsICsgMSkgLyAyKTtcblx0ICAgICAgICAgICAgfSwgNDA5Nik7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgbGVmdCBnYWluIHZhbHVlXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgbGVmdEdhaW4gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgcmlnaHQgZ2FpbiB2YWx1ZVxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHJpZ2h0R2FpbiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuU3BsaXR9XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgc3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIEtlZXBzIHRoZSB3YXZlc2hhcGVycyBmcm9tIG9wdGltaXppbmcgMHNcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuWmVyb31cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciB6ZXJvID0gbmV3IFRvbmUuWmVybygpO1xuXHQgICAgICAgICAgICB6ZXJvLmZhbihyaWdodFdhdmVTaGFwZXIsIGxlZnRXYXZlU2hhcGVyKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIE1lcmdlIHRoZSBvdXRnb2luZyBzaWduYWxcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgbWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICAgICAgc3BsaXQubGVmdC5jaGFpbihsZWZ0R2FpbiwgbWVyZ2UubGVmdCk7XG5cdCAgICAgICAgICAgIHNwbGl0LnJpZ2h0LmNoYWluKHJpZ2h0R2FpbiwgbWVyZ2UucmlnaHQpO1xuXHQgICAgICAgICAgICB0aGlzLnBhbi5jaGFpbihsZWZ0V2F2ZVNoYXBlciwgbGVmdEdhaW4uZ2Fpbik7XG5cdCAgICAgICAgICAgIHRoaXMucGFuLmNoYWluKHJpZ2h0V2F2ZVNoYXBlciwgcmlnaHRHYWluLmdhaW4pO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgU3RlcmVvUGFubmVyTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuZGlzY29ubmVjdC5hcHBseSh0aGlzLm91dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFN0ZXJlb1Bhbm5lck5vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmNvbm5lY3QuYXBwbHkodGhpcy5vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICAvL2FkZCBpdCB0byB0aGUgQXVkaW9Db250ZXh0XG5cdCAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVTdGVyZW9QYW5uZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgU3RlcmVvUGFubmVyTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlU3RlcmVvUGFubmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFN0ZXJlb1Bhbm5lck5vZGUodGhpcyk7XG5cdCAgICAgICAgfTtcblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBhbm5lciBpcyBhbiBlcXVhbCBwb3dlciBMZWZ0L1JpZ2h0IFBhbm5lciBhbmQgZG9lcyBub3Rcblx0XHQgKiAgICAgICAgICBzdXBwb3J0IDNELiBQYW5uZXIgdXNlcyB0aGUgU3RlcmVvUGFubmVyTm9kZSB3aGVuIGF2YWlsYWJsZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbaW5pdGlhbFBhbj0wXSBUaGUgaW5pdGFpbCBwYW5uZXIgdmFsdWUgKGNlbnRlcikuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vcGFuIHRoZSBpbnB1dCBzaWduYWwgaGFyZCByaWdodC5cblx0XHQgKiAgdmFyIHBhbm5lciA9IG5ldyBUb25lLlBhbm5lcigxKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyID0gZnVuY3Rpb24gKGluaXRpYWxQYW4pIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiAgdGhlIHBhbm5lciBub2RlXG5cdFx0XHQqICBAdHlwZSB7U3RlcmVvUGFubmVyTm9kZX1cblx0XHRcdCogIEBwcml2YXRlXG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVTdGVyZW9QYW5uZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCogIFRoZSBwYW4gY29udHJvbC4gLTEgPSBoYXJkIGxlZnQsIDEgPSBoYXJkIHJpZ2h0LlxuXHRcdFx0KiAgQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHQqICBAc2lnbmFsXG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMucGFuID0gdGhpcy5fcGFubmVyLnBhbjtcblx0ICAgICAgICAvL2luaXRpYWwgdmFsdWVcblx0ICAgICAgICB0aGlzLnBhbi52YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyhpbml0aWFsUGFuLCAwKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgncGFuJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYW5uZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdwYW4nKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5wYW4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhbm5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIHNwYXRpYWxpemVkIHBhbm5lciBub2RlIHdoaWNoIHN1cHBvcnRzIGVxdWFscG93ZXIgb3IgSFJURiBwYW5uaW5nLlxuXHRcdCAqICAgICAgICAgIFRyaWVzIHRvIG5vcm1hbGl6ZSB0aGUgQVBJIGFjcm9zcyB2YXJpb3VzIGJyb3dzZXJzLiBTZWUgVG9uZS5MaXN0ZW5lclxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBwb3NpdGlvblggVGhlIGluaXRpYWwgeCBwb3NpdGlvbi5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHBvc2l0aW9uWSBUaGUgaW5pdGlhbCB5IHBvc2l0aW9uLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gcG9zaXRpb25aIFRoZSBpbml0aWFsIHogcG9zaXRpb24uXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNEID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3Bvc2l0aW9uWCcsXG5cdCAgICAgICAgICAgICdwb3NpdGlvblknLFxuXHQgICAgICAgICAgICAncG9zaXRpb25aJ1xuXHQgICAgICAgIF0sIFRvbmUuUGFubmVyM0QpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhbm5lciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1Bhbm5lck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVQYW5uZXIoKTtcblx0ICAgICAgICAvL3NldCBzb21lIHZhbHVlc1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5wYW5uaW5nTW9kZWwgPSBvcHRpb25zLnBhbm5pbmdNb2RlbDtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIubWF4RGlzdGFuY2UgPSBvcHRpb25zLm1heERpc3RhbmNlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXN0YW5jZU1vZGVsID0gb3B0aW9ucy5kaXN0YW5jZU1vZGVsO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5jb25lT3V0ZXJHYWluID0gb3B0aW9ucy5jb25lT3V0ZXJHYWluO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5jb25lT3V0ZXJBbmdsZSA9IG9wdGlvbnMuY29uZU91dGVyQW5nbGU7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbmVJbm5lckFuZ2xlID0gb3B0aW9ucy5jb25lSW5uZXJBbmdsZTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIucmVmRGlzdGFuY2UgPSBvcHRpb25zLnJlZkRpc3RhbmNlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5yb2xsb2ZmRmFjdG9yID0gb3B0aW9ucy5yb2xsb2ZmRmFjdG9yO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IG9yaWVudGF0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBbXG5cdCAgICAgICAgICAgIG9wdGlvbnMub3JpZW50YXRpb25YLFxuXHQgICAgICAgICAgICBvcHRpb25zLm9yaWVudGF0aW9uWSxcblx0ICAgICAgICAgICAgb3B0aW9ucy5vcmllbnRhdGlvblpcblx0ICAgICAgICBdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBbXG5cdCAgICAgICAgICAgIG9wdGlvbnMucG9zaXRpb25YLFxuXHQgICAgICAgICAgICBvcHRpb25zLnBvc2l0aW9uWSxcblx0ICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvblpcblx0ICAgICAgICBdO1xuXHQgICAgICAgIC8vIHNldCB0aGUgZGVmYXVsdCBwb3NpdGlvbi9vcmllbnRhdGlvblxuXHQgICAgICAgIHRoaXMub3JpZW50YXRpb25YID0gb3B0aW9ucy5vcmllbnRhdGlvblg7XG5cdCAgICAgICAgdGhpcy5vcmllbnRhdGlvblkgPSBvcHRpb25zLm9yaWVudGF0aW9uWTtcblx0ICAgICAgICB0aGlzLm9yaWVudGF0aW9uWiA9IG9wdGlvbnMub3JpZW50YXRpb25aO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb25YID0gb3B0aW9ucy5wb3NpdGlvblg7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvblkgPSBvcHRpb25zLnBvc2l0aW9uWTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uWiA9IG9wdGlvbnMucG9zaXRpb25aO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFubmVyM0QsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0cyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Bvc2l0aW9uWCc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWSc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWic6IDAsXG5cdCAgICAgICAgJ29yaWVudGF0aW9uWCc6IDAsXG5cdCAgICAgICAgJ29yaWVudGF0aW9uWSc6IDAsXG5cdCAgICAgICAgJ29yaWVudGF0aW9uWic6IDAsXG5cdCAgICAgICAgJ3Bhbm5pbmdNb2RlbCc6ICdlcXVhbHBvd2VyJyxcblx0ICAgICAgICAnbWF4RGlzdGFuY2UnOiAxMDAwMCxcblx0ICAgICAgICAnZGlzdGFuY2VNb2RlbCc6ICdpbnZlcnNlJyxcblx0ICAgICAgICAnY29uZU91dGVyR2Fpbic6IDAsXG5cdCAgICAgICAgJ2NvbmVPdXRlckFuZ2xlJzogMzYwLFxuXHQgICAgICAgICdjb25lSW5uZXJBbmdsZSc6IDM2MCxcblx0ICAgICAgICAncmVmRGlzdGFuY2UnOiAxLFxuXHQgICAgICAgICdyb2xsb2ZmRmFjdG9yJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByYW1wIHRpbWUgd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgc2V0VGFyZ2V0QXRUaW1lXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuX3JhbXBUaW1lQ29uc3RhbnQgPSAwLjAxO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgaW4gM2Qgc3BhY2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGFubmVyM0R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24gKHgsIHksIHopIHtcblx0ICAgICAgICBpZiAodGhpcy5fcGFubmVyLnBvc2l0aW9uWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnBvc2l0aW9uWC5zZXRUYXJnZXRBdFRpbWUoeCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnBvc2l0aW9uWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnBvc2l0aW9uWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIuc2V0UG9zaXRpb24oeCwgeSwgeik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHNvdXJjZSBpbiAzZCBzcGFjZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB5XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHpcblx0XHQgKiAgQHJldHVybiB7VG9uZS5QYW5uZXIzRH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuc2V0T3JpZW50YXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeikge1xuXHQgICAgICAgIGlmICh0aGlzLl9wYW5uZXIub3JpZW50YXRpb25YKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIub3JpZW50YXRpb25YLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIub3JpZW50YXRpb25ZLnNldFRhcmdldEF0VGltZSh5LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIub3JpZW50YXRpb25aLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5zZXRPcmllbnRhdGlvbih4LCB5LCB6KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAncG9zaXRpb25YJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25ZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdwb3NpdGlvblknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ3Bvc2l0aW9uWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBvcmllbnRhdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG9yaWVudGF0aW9uWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAnb3JpZW50YXRpb25YJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IG9yaWVudGF0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgb3JpZW50YXRpb25ZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdvcmllbnRhdGlvblknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogb3JpZW50YXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBvcmllbnRhdGlvblpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ29yaWVudGF0aW9uWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBQcm94eSBhIHByb3BlcnR5IG9uIHRoZSBwYW5uZXIgdG8gYW4gZXhwb3NlZCBwdWJsaWMgcHJvcGVyeVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5ID0gZnVuY3Rpb24gKHByb3ApIHtcblx0ICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsIHByb3AsIHtcblx0ICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wYW5uZXJbcHJvcF0gPSB2YWw7XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bhbm5lcltwcm9wXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGFubmluZyBtb2RlbC4gRWl0aGVyIFwiZXF1YWxwb3dlclwiIG9yIFwiSFJURlwiLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcGFubmluZ01vZGVsXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdwYW5uaW5nTW9kZWwnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIHJlZmVyZW5jZSBkaXN0YW5jZSBmb3IgcmVkdWNpbmcgdm9sdW1lIGFzIHNvdXJjZSBtb3ZlIGZ1cnRoZXIgZnJvbSB0aGUgbGlzdGVuZXJcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHJlZkRpc3RhbmNlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdyZWZEaXN0YW5jZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlc2NyaWJlcyBob3cgcXVpY2tseSB0aGUgdm9sdW1lIGlzIHJlZHVjZWQgYXMgc291cmNlIG1vdmVzIGF3YXkgZnJvbSBsaXN0ZW5lci5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHJvbGxvZmZGYWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ3JvbGxvZmZGYWN0b3InKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGlzdGFuY2UgbW9kZWwgdXNlZCBieSwgIFwibGluZWFyXCIsIFwiaW52ZXJzZVwiLCBvciBcImV4cG9uZW50aWFsXCIuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBkaXN0YW5jZU1vZGVsXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdkaXN0YW5jZU1vZGVsJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFuZ2xlLCBpbiBkZWdyZWVzLCBpbnNpZGUgb2Ygd2hpY2ggdGhlcmUgd2lsbCBiZSBubyB2b2x1bWUgcmVkdWN0aW9uXG5cdFx0ICogIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgY29uZUlubmVyQW5nbGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2NvbmVJbm5lckFuZ2xlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFuZ2xlLCBpbiBkZWdyZWVzLCBvdXRzaWRlIG9mIHdoaWNoIHRoZSB2b2x1bWUgd2lsbCBiZSByZWR1Y2VkXG5cdFx0ICogIHRvIGEgY29uc3RhbnQgdmFsdWUgb2YgY29uZU91dGVyR2FpblxuXHRcdCAqICBAdHlwZSB7RGVncmVlc31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIGNvbmVPdXRlckFuZ2xlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdjb25lT3V0ZXJBbmdsZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBnYWluIG91dHNpZGUgb2YgdGhlIGNvbmVPdXRlckFuZ2xlXG5cdFx0ICogIEB0eXBlIHtHYWlufVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgY29uZU91dGVyR2FpblxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnY29uZU91dGVyR2FpbicpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gc291cmNlIGFuZCBsaXN0ZW5lcixcblx0XHQgKiAgYWZ0ZXIgd2hpY2ggdGhlIHZvbHVtZSB3aWxsIG5vdCBiZSByZWR1Y2VkIGFueSBmdXJ0aGVyLlxuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBtYXhEaXN0YW5jZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnbWF4RGlzdGFuY2UnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFubmVyM0R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYW5uZXIzRDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGFuVm9sIGlzIGEgVG9uZS5QYW5uZXIgYW5kIFRvbmUuVm9sdW1lIGluIG9uZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvUmFuZ2V9IHBhbiB0aGUgaW5pdGlhbCBwYW5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHZvbHVtZSBUaGUgb3V0cHV0IHZvbHVtZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3BhbiB0aGUgaW5jb21pbmcgc2lnbmFsIGxlZnQgYW5kIGRyb3AgdGhlIHZvbHVtZVxuXHRcdCAqIHZhciBwYW5Wb2wgPSBuZXcgVG9uZS5QYW5Wb2woLTAuMjUsIC0xMik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhblZvbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwYW4nLFxuXHQgICAgICAgICAgICAndm9sdW1lJ1xuXHQgICAgICAgIF0sIFRvbmUuUGFuVm9sKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYW5uaW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5QYW5uZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5QYW5uZXIob3B0aW9ucy5wYW4pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBML1IgcGFubmluZyBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb1JhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucGFuID0gdGhpcy5fcGFubmVyLnBhbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdm9sdW1lIGNvbnRyb2wgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbm5lY3QodGhpcy5fdm9sdW1lKTtcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncGFuJyxcblx0ICAgICAgICAgICAgJ3ZvbHVtZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhblZvbCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFuVm9sLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwYW4nOiAwLFxuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBNdXRlL3VubXV0ZSB0aGUgdm9sdW1lXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGFuVm9sI1xuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhblZvbC5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYW5Wb2x9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFuVm9sLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncGFuJyxcblx0ICAgICAgICAgICAgJ3ZvbHVtZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5wYW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFuVm9sO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuU29sbyBsZXRzIHlvdSBpc29sYXRlIGEgc3BlY2lmaWMgYXVkaW8gc3RyZWFtLiBXaGVuXG5cdFx0ICogICAgICAgICBhbiBpbnN0YW5jZSBpcyBzZXQgdG8gYHNvbG89dHJ1ZWAsIGl0IHdpbGwgbXV0ZSBhbGwgb3RoZXIgaW5zdGFuY2VzLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNvbG9BID0gbmV3IFRvbmUuU29sbygpXG5cdFx0ICogdmFyIHNvbG9CID0gbmV3IFRvbmUuU29sbygpXG5cdFx0ICogc29sb0Euc29sbyA9IHRydWVcblx0XHQgKiAvL25vIGF1ZGlvIHdpbGwgcGFzcyB0aHJvdWdoIHNvbG9CXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzb2xvJ10sIFRvbmUuU29sbyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgaW5wdXQgYW5kIG91dHB1dCBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBib3VuZCBfc29sb2VkIG1ldGhvZFxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvbG9CaW5kID0gdGhpcy5fc29sb2VkLmJpbmQodGhpcyk7XG5cdCAgICAgICAgLy9saXN0ZW4gZm9yIHNvbG8gZXZlbnRzIGNsYXNzLXdpZGUuXG5cdCAgICAgICAgdGhpcy5jb250ZXh0Lm9uKCdzb2xvJywgdGhpcy5fc29sb0JpbmQpO1xuXHQgICAgICAgIC8vc2V0IGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuc29sbyA9IG9wdGlvbnMuc29sbztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNvbG8sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5kZWZhdWx0cyA9IHsgc29sbzogZmFsc2UgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJc29sYXRlcyB0aGlzIGluc3RhbmNlIGFuZCBtdXRlcyBhbGwgb3RoZXIgaW5zdGFuY2VzIG9mIFRvbmUuU29sby5cblx0XHQgKiAgT25seSBvbmUgaW5zdGFuY2UgY2FuIGJlIHNvbG9lZCBhdCBhIHRpbWUuIEEgc29sb2VkXG5cdFx0ICogIGluc3RhbmNlIHdpbGwgcmVwb3J0IGBzb2xvPWZhbHNlYCB3aGVuIGFub3RoZXIgaW5zdGFuY2UgaXMgc29sb2VkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Tb2xvI1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgc29sb1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU29sby5wcm90b3R5cGUsICdzb2xvJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTb2xvZWQoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNvbG8pIHtcblx0ICAgICAgICAgICAgaWYgKHNvbG8pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FkZFNvbG8oKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVNvbG8oKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuZW1pdCgnc29sbycsIHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHRoZSBjdXJyZW50IGluc3RhbmNlIGlzIG11dGVkLCBpLmUuIGFub3RoZXIgaW5zdGFuY2UgaXMgc29sb2VkXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNvbG8jXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBtdXRlZFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNvbG8ucHJvdG90eXBlLCAnbXV0ZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LmdhaW4udmFsdWUgPT09IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBBZGQgdGhpcyB0byB0aGUgc29sb2VkIGFycmF5XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX2FkZFNvbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCFUb25lLmlzQXJyYXkodGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbykpIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbyA9IFtdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIXRoaXMuX2lzU29sb2VkKCkpIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5wdXNoKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZW1vdmUgdGhpcyBmcm9tIHRoZSBzb2xvZWQgYXJyYXlcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5fcmVtb3ZlU29sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5faXNTb2xvZWQoKSkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLmluZGV4T2YodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8uc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gSXMgdGhpcyBvbiB0aGUgc29sb2VkIGFycmF5XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX2lzU29sb2VkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbykpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8ubGVuZ3RoICE9PSAwICYmIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8uaW5kZXhPZih0aGlzKSAhPT0gLTE7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgbm8gb25lIGlzIHNvbG9lZFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9ub1NvbG9zID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAhVG9uZS5pc0FycmF5KHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8pIHx8IHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8ubGVuZ3RoID09PSAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTb2xvIHRoZSBjdXJyZW50IGluc3RhbmNlIGFuZCB1bnNvbG8gYWxsIG90aGVyIGluc3RhbmNlcy5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5Tb2xvfSAgaW5zdGFuY2UgIFRoZSBpbnN0YW5jZSB3aGljaCBpcyBiZWluZyBzb2xvZWQvdW5zb2xvZWQuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9zb2xvZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2lzU29sb2VkKCkpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5nYWluLnZhbHVlID0gMTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX25vU29sb3MoKSkge1xuXHQgICAgICAgICAgICAvL25vIG9uZSBpcyBzb2xvZWRcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5nYWluLnZhbHVlID0gMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmdhaW4udmFsdWUgPSAwO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuU29sb30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbnRleHQub2ZmKCdzb2xvJywgdGhpcy5fc29sb0JpbmQpO1xuXHQgICAgICAgIHRoaXMuX3JlbW92ZVNvbG8oKTtcblx0ICAgICAgICB0aGlzLl9zb2xvQmluZCA9IG51bGw7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Tb2xvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBHZXQgdGhlIGN1cnJlbnQgd2F2ZWZvcm0gZGF0YSBvZiB0aGUgY29ubmVjdGVkIGF1ZGlvIHNvdXJjZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHNpemUgVGhlIHNpemUgb2YgdGhlIEZGVC4gVmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnc2l6ZSddLCBUb25lLldhdmVmb3JtKTtcblx0ICAgICAgICBvcHRpb25zLnR5cGUgPSBUb25lLkFuYWx5c2VyLlR5cGUuV2F2ZWZvcm07XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFuYWx5c2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5BbmFseXNlcihvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLldhdmVmb3JtLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0uZGVmYXVsdHMgPSB7ICdzaXplJzogMTAyNCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldHMgdGhlIHdhdmVmb3JtIG9mIHRoZSBhdWRpbyBzb3VyY2UuIFJldHVybnMgdGhlIHdhdmVmb3JtIGRhdGFcblx0XHQgKiAgb2YgbGVuZ3RoIFtzaXplXSgjc2l6ZSkgYXMgYSBGbG9hdDMyQXJyYXkgd2l0aCB2YWx1ZXMgYmV0d2VlbiAtMSBhbmQgMS5cblx0XHQgKiAgQHJldHVybnMge1R5cGVkQXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNpemUgb2YgYW5hbHlzaXMuIFRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLldhdmVmb3JtI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5XYXZlZm9ybS5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc2l6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuc2l6ZSA9IHNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLldhdmVmb3JtfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlZm9ybS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuV2F2ZWZvcm07XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkN0cmxJbnRlcnBvbGF0ZSB3aWxsIGludGVycG9sYXRlIGJldHdlZW4gZ2l2ZW4gdmFsdWVzIGJhc2VkXG5cdFx0ICogICAgICAgICBvbiB0aGUgXCJpbmRleFwiIHByb3BlcnR5LiBQYXNzaW5nIGluIGFuIGFycmF5IG9yIG9iamVjdCBsaXRlcmFsXG5cdFx0ICogICAgICAgICB3aWxsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIHBhcmFtZXRlcnMuIE5vdGUgKGkuZS4gXCJDM1wiKVxuXHRcdCAqICAgICAgICAgYW5kIFRpbWUgKGkuZS4gXCI0biArIDJcIikgY2FuIGJlIGludGVycG9sYXRlZC4gQWxsIG90aGVyIHZhbHVlcyBhcmVcblx0XHQgKiAgICAgICAgIGFzc3VtZWQgdG8gYmUgbnVtYmVycy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGludGVycCA9IG5ldyBUb25lLkN0cmxJbnRlcnBvbGF0ZShbMCwgMiwgOSwgNF0pO1xuXHRcdCAqIGludGVycC5pbmRleCA9IDAuNzU7XG5cdFx0ICogaW50ZXJwLnZhbHVlOyAvL3JldHVybnMgMS41XG5cdFx0ICpcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgaW50ZXJwID0gbmV3IFRvbmUuQ3RybEludGVycG9sYXRlKFtcblx0XHQgKiBcdFsyLCA0LCA1XSxcblx0XHQgKiBcdFs5LCAzLCAyXSxcblx0XHQgKiBdKTtcblx0XHQgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIGFycmF5IG9mIHZhbHVlcyB0byBpbnRlcnBvbGF0ZSBvdmVyXG5cdFx0ICogQHBhcmFtIHtQb3NpdGl2ZX0gaW5kZXggVGhlIGluaXRpYWwgaW50ZXJwb2xhdGlvbiBpbmRleC5cblx0XHQgKiBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3ZhbHVlcycsXG5cdCAgICAgICAgICAgICdpbmRleCdcblx0ICAgICAgICBdLCBUb25lLkN0cmxJbnRlcnBvbGF0ZSk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZXMgdG8gaW50ZXJwb2xhdGUgYmV0d2VlblxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG9wdGlvbnMudmFsdWVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBpbnRlcnBvbGF0ZWQgaW5kZXggYmV0d2VlbiB2YWx1ZXMuIEZvciBleGFtcGxlOiBhIHZhbHVlIG9mIDEuNVxuXHRcdFx0ICogIHdvdWxkIGludGVycG9sYXRlIGVxdWFsbHkgYmV0d2VlbiB0aGUgdmFsdWUgYXQgaW5kZXggMVxuXHRcdFx0ICogIGFuZCB0aGUgdmFsdWUgYXQgaW5kZXggMi4gXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIGludGVycC5pbmRleCA9IDA7IFxuXHRcdFx0ICogaW50ZXJwLnZhbHVlOyAvL3JldHVybnMgdGhlIHZhbHVlIGF0IDBcblx0XHRcdCAqIGludGVycC5pbmRleCA9IDAuNTtcblx0XHRcdCAqIGludGVycC52YWx1ZTsgLy9yZXR1cm5zIHRoZSB2YWx1ZSBiZXR3ZWVuIGluZGljZXMgMCBhbmQgMS4gXG5cdFx0XHQgKiAgQHR5cGUgIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3RybEludGVycG9sYXRlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2luZGV4JzogMCxcblx0ICAgICAgICAndmFsdWVzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgaW50ZXJwb2xhdGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBpbmRleFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybEludGVycG9sYXRlI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxJbnRlcnBvbGF0ZS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgdGhpcy52YWx1ZXMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciBsb3dlclBvc2l0aW9uID0gTWF0aC5mbG9vcihpbmRleCk7XG5cdCAgICAgICAgICAgIHZhciBsb3dlciA9IHRoaXMudmFsdWVzW2xvd2VyUG9zaXRpb25dO1xuXHQgICAgICAgICAgICB2YXIgdXBwZXIgPSB0aGlzLnZhbHVlc1tNYXRoLmNlaWwoaW5kZXgpXTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVycG9sYXRlKGluZGV4IC0gbG93ZXJQb3NpdGlvbiwgbG93ZXIsIHVwcGVyKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBpbnRlcnBvbGF0aW9uIHJvdXRpbmVcblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBpbmRleCAgVGhlIGluZGV4IGJldHdlZW4gdGhlIGxvd2VyIGFuZCB1cHBlclxuXHRcdCAqICBAcGFyYW0gIHsqfSAgbG93ZXIgXG5cdFx0ICogIEBwYXJhbSAgeyp9ICB1cHBlciBcblx0XHQgKiAgQHJldHVybiAgeyp9ICBUaGUgaW50ZXJwb2xhdGVkIHZhbHVlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZS5wcm90b3R5cGUuX2ludGVycG9sYXRlID0gZnVuY3Rpb24gKGluZGV4LCBsb3dlciwgdXBwZXIpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KGxvd2VyKSkge1xuXHQgICAgICAgICAgICB2YXIgcmV0QXJyYXkgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb3dlci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgcmV0QXJyYXlbaV0gPSB0aGlzLl9pbnRlcnBvbGF0ZShpbmRleCwgbG93ZXJbaV0sIHVwcGVyW2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0QXJyYXk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzT2JqZWN0KGxvd2VyKSkge1xuXHQgICAgICAgICAgICB2YXIgcmV0T2JqID0ge307XG5cdCAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gbG93ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldE9ialthdHRyXSA9IHRoaXMuX2ludGVycG9sYXRlKGluZGV4LCBsb3dlclthdHRyXSwgdXBwZXJbYXR0cl0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXRPYmo7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgbG93ZXIgPSB0aGlzLl90b051bWJlcihsb3dlcik7XG5cdCAgICAgICAgICAgIHVwcGVyID0gdGhpcy5fdG9OdW1iZXIodXBwZXIpO1xuXHQgICAgICAgICAgICByZXR1cm4gKDEgLSBpbmRleCkgKiBsb3dlciArIGluZGV4ICogdXBwZXI7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGZyb20gdGhlIGdpdmVuIHR5cGUgaW50byBhIG51bWJlclxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ8U3RyaW5nfSAgdmFsdWVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZS5fdG9OdW1iZXIgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodmFsKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGFzc3VtZSB0aGF0IGl0J3MgVGltZS4uLlxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHModmFsKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkN0cmxJbnRlcnBvbGF0ZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsSW50ZXJwb2xhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkN0cmxNYXJrb3YgcmVwcmVzZW50cyBhIE1hcmtvdiBDaGFpbiB3aGVyZSBlYWNoIGNhbGxcblx0XHQgKiAgICAgICAgIHRvIFRvbmUuQ3RybE1hcmtvdi5uZXh0IHdpbGwgbW92ZSB0byB0aGUgbmV4dCBzdGF0ZS4gSWYgdGhlIG5leHRcblx0XHQgKiAgICAgICAgIHN0YXRlIGNob2ljZSBpcyBhbiBhcnJheSwgdGhlIG5leHQgc3RhdGUgaXMgY2hvc2VuIHJhbmRvbWx5IHdpdGhcblx0XHQgKiAgICAgICAgIGV2ZW4gcHJvYmFiaWxpdHkgZm9yIGFsbCBvZiB0aGUgY2hvaWNlcy4gRm9yIGEgd2VpZ2h0ZWQgcHJvYmFiaWxpdHlcblx0XHQgKiAgICAgICAgIG9mIHRoZSBuZXh0IGNob2ljZXMsIHBhc3MgaW4gYW4gb2JqZWN0IHdpdGggXCJzdGF0ZVwiIGFuZCBcInByb2JhYmlsaXR5XCIgYXR0cmlidXRlcy4gXG5cdFx0ICogICAgICAgICBUaGUgcHJvYmFiaWxpdGllcyB3aWxsIGJlIG5vcm1hbGl6ZWQgYW5kIHRoZW4gY2hvc2VuLiBJZiBubyBuZXh0IG9wdGlvbnNcblx0XHQgKiAgICAgICAgIGFyZSBnaXZlbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUsIHRoZSBzdGF0ZSB3aWxsIHN0YXkgdGhlcmUuIFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgY2hhaW4gPSBuZXcgVG9uZS5DdHJsTWFya292KHtcblx0XHQgKiBcdFwiYmVnaW5uaW5nXCIgOiBbXCJlbmRcIiwgXCJtaWRkbGVcIl0sXG5cdFx0ICogXHRcIm1pZGRsZVwiIDogXCJlbmRcIlxuXHRcdCAqIH0pO1xuXHRcdCAqIGNoYWluLnZhbHVlID0gXCJiZWdpbm5pbmdcIjtcblx0XHQgKiBjaGFpbi5uZXh0KCk7IC8vcmV0dXJucyBcImVuZFwiIG9yIFwibWlkZGxlXCIgd2l0aCA1MCUgcHJvYmFiaWxpdHlcblx0XHQgKlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjaGFpbiA9IG5ldyBUb25lLkN0cmxNYXJrb3Yoe1xuXHRcdCAqIFx0XCJiZWdpbm5pbmdcIiA6IFt7XCJ2YWx1ZVwiIDogXCJlbmRcIiwgXCJwcm9iYWJpbGl0eVwiIDogMC44fSwgXG5cdFx0ICogXHRcdFx0XHRcdHtcInZhbHVlXCIgOiBcIm1pZGRsZVwiLCBcInByb2JhYmlsaXR5XCIgOiAwLjJ9XSxcblx0XHQgKiBcdFwibWlkZGxlXCIgOiBcImVuZFwiXG5cdFx0ICogfSk7XG5cdFx0ICogY2hhaW4udmFsdWUgPSBcImJlZ2lubmluZ1wiO1xuXHRcdCAqIGNoYWluLm5leHQoKTsgLy9yZXR1cm5zIFwiZW5kXCIgd2l0aCA4MCUgcHJvYmFiaWxpdHkgb3IgXCJtaWRkbGVcIiB3aXRoIDIwJS5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IHZhbHVlcyBBbiBvYmplY3Qgd2l0aCB0aGUgc3RhdGUgbmFtZXMgYXMgdGhlIGtleXNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIG5leHQgc3RhdGUocykgYXMgdGhlIHZhbHVlcy4gXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YgPSBmdW5jdGlvbiAodmFsdWVzLCBpbml0aWFsKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBNYXJrb3YgdmFsdWVzIHdpdGggc3RhdGVzIGFzIHRoZSBrZXlzXG5cdFx0XHQgKiAgYW5kIG5leHQgc3RhdGUocykgYXMgdGhlIHZhbHVlcy4gXG5cdFx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gVG9uZS5kZWZhdWx0QXJnKHZhbHVlcywge30pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBNYXJrb3YgdmFsdWVzLiBUaGUgbmV4dFxuXHRcdFx0ICogIHN0YXRlIHdpbGwgYmUgZXZhbHVhdGVkIGFuZCByZXR1cm5lZCB3aGVuIFRvbmUuQ3RybE1hcmtvdi5uZXh0XG5cdFx0XHQgKiAgaXMgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyhpbml0aWFsLCBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcylbMF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3RybE1hcmtvdik7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgbmV4dCBzdGF0ZSBvZiB0aGUgTWFya292IHZhbHVlcy4gXG5cdFx0ICogIEByZXR1cm4gIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMudmFsdWVzLmhhc093blByb3BlcnR5KHRoaXMudmFsdWUpKSB7XG5cdCAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy52YWx1ZXNbdGhpcy52YWx1ZV07XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkobmV4dCkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkaXN0cmlidXRpb24gPSB0aGlzLl9nZXRQcm9iRGlzdHJpYnV0aW9uKG5leHQpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJhbmQgPSBNYXRoLnJhbmRvbSgpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHRvdGFsID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzdHJpYnV0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3QgPSBkaXN0cmlidXRpb25baV07XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmQgPiB0b3RhbCAmJiByYW5kIDwgdG90YWwgKyBkaXN0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaG9zZW4gPSBuZXh0W2ldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChjaG9zZW4pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gY2hvc2VuLnZhbHVlO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNob3Nlbjtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBkaXN0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5leHQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENob29zZSByYW5kb21seSBmcm9tIGFuIGFycmF5IHdlaWdodGVkIG9wdGlvbnMgaW4gdGhlIGZvcm0gXG5cdFx0ICogIHtcInN0YXRlXCIgOiBzdHJpbmcsIFwicHJvYmFiaWxpdHlcIiA6IG51bWJlcn0gb3IgYW4gYXJyYXkgb2YgdmFsdWVzXG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgb3B0aW9ucyBcblx0XHQgKiAgQHJldHVybiAge0FycmF5fSAgVGhlIHJhbmRvbWx5IHNlbGVjdGVkIGNob2ljZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsTWFya292LnByb3RvdHlwZS5fZ2V0UHJvYkRpc3RyaWJ1dGlvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgdmFyIGRpc3RyaWJ1dGlvbiA9IFtdO1xuXHQgICAgICAgIHZhciB0b3RhbCA9IDA7XG5cdCAgICAgICAgdmFyIG5lZWRzTm9ybWFsaXppbmcgPSBmYWxzZTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbaV07XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KG9wdGlvbikpIHtcblx0ICAgICAgICAgICAgICAgIG5lZWRzTm9ybWFsaXppbmcgPSB0cnVlO1xuXHQgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uW2ldID0gb3B0aW9uLnByb2JhYmlsaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uW2ldID0gMSAvIG9wdGlvbnMubGVuZ3RoO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRvdGFsICs9IGRpc3RyaWJ1dGlvbltpXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKG5lZWRzTm9ybWFsaXppbmcpIHtcblx0ICAgICAgICAgICAgLy9ub3JtYWxpemUgdGhlIHZhbHVlc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRpc3RyaWJ1dGlvbi5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uW2pdID0gZGlzdHJpYnV0aW9uW2pdIC8gdG90YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGRpc3RyaWJ1dGlvbjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ3RybE1hcmtvdn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ3RybE1hcmtvdjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEdlbmVyYXRlIHBhdHRlcm5zIGZyb20gYW4gYXJyYXkgb2YgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgSGFzIGEgbnVtYmVyIG9mIGFycGVnZ2lhdGlvbiBhbmQgcmFuZG9taXplZFxuXHRcdCAqICAgICAgICAgc2VsZWN0aW9uIHBhdHRlcm5zLiBcblx0XHQgKiAgICAgICAgICAgPHVsPlxuXHRcdCAqICBcdCAgICAgICAgPGxpPlwidXBcIiAtIGN5Y2xlcyB1cHdhcmQ8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJkb3duXCIgLSBjeWNsZXMgZG93bndhcmQ8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJ1cERvd25cIiAtIHVwIHRoZW4gYW5kIGRvd248L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJkb3duVXBcIiAtIGN5Y2xlcyBkb3duIHRoZW4gYW5kIHVwPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwiYWx0ZXJuYXRlVXBcIiAtIGp1bXAgdXAgdHdvIGFuZCBkb3duIG9uZTwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImFsdGVybmF0ZURvd25cIiAtIGp1bXAgZG93biB0d28gYW5kIHVwIG9uZTwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInJhbmRvbVwiIC0gcmFuZG9tbHkgc2VsZWN0IGFuIGluZGV4PC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwicmFuZG9tV2Fsa1wiIC0gcmFuZG9tbHkgbW92ZXMgb25lIGluZGV4IGF3YXkgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbjwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInJhbmRvbU9uY2VcIiAtIHJhbmRvbWx5IHNlbGVjdCBhbiBpbmRleCB3aXRob3V0IHJlcGVhdGluZyB1bnRpbCBhbGwgdmFsdWVzIGhhdmUgYmVlbiBjaG9zZW4uPC9saT5cblx0XHQgKiAgICAgXHRcdDwvdWw+XG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgdmFsdWVzICAgQW4gYXJyYXkgb2Ygb3B0aW9ucyB0byBjaG9vc2UgZnJvbS5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5DdHJsUGF0dGVybi5UeXBlPX0gIHR5cGUgIFRoZSBuYW1lIG9mIHRoZSBwYXR0ZXJuLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndmFsdWVzJyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5DdHJsUGF0dGVybik7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiB2YWx1ZXMgdG8gYXJwZWdnaWF0ZSBvdmVyXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBvcHRpb25zLnZhbHVlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgdmFsdWVzIGFycmF5XG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHlwZSBwbGFjZWhvbGRlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkN0cmxQYXR0ZXJuLlR5cGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNodWZmbGVkIHZhbHVlcyBmb3IgdGhlIFJhbmRvbU9uY2UgdHlwZVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkaXJlY3Rpb24gb2YgdGhlIG1vdmVtZW50XG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsUGF0dGVybik7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIENvbnRyb2wgUGF0dGVybnNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4uVHlwZSA9IHtcblx0ICAgICAgICBVcDogJ3VwJyxcblx0ICAgICAgICBEb3duOiAnZG93bicsXG5cdCAgICAgICAgVXBEb3duOiAndXBEb3duJyxcblx0ICAgICAgICBEb3duVXA6ICdkb3duVXAnLFxuXHQgICAgICAgIEFsdGVybmF0ZVVwOiAnYWx0ZXJuYXRlVXAnLFxuXHQgICAgICAgIEFsdGVybmF0ZURvd246ICdhbHRlcm5hdGVEb3duJyxcblx0ICAgICAgICBSYW5kb206ICdyYW5kb20nLFxuXHQgICAgICAgIFJhbmRvbVdhbGs6ICdyYW5kb21XYWxrJyxcblx0ICAgICAgICBSYW5kb21PbmNlOiAncmFuZG9tT25jZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLiBcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwLFxuXHQgICAgICAgICd2YWx1ZXMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIHBhdHRlcm4uXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsUGF0dGVybiNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy9zb21lIHNhZmVndWFyZHNcblx0ICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLm1pbih0aGlzLmluZGV4LCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWVzW3RoaXMuaW5kZXhdO1xuXHQgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCAhPT0gdGhpcy5fc2h1ZmZsZWQubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZVZhbHVlcygpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdmFsID0gdGhpcy52YWx1ZXNbdGhpcy5fc2h1ZmZsZWRbdGhpcy5pbmRleF1dO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBhdHRlcm4gdXNlZCB0byBzZWxlY3QgdGhlIG5leHRcblx0XHQgKiAgaXRlbSBmcm9tIHRoZSB2YWx1ZXMgYXJyYXlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybFBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtUb25lLkN0cmxQYXR0ZXJuLlR5cGV9XG5cdFx0ICogIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBudWxsO1xuXHQgICAgICAgICAgICAvL3RoZSBmaXJzdCBpbmRleFxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcERvd24gfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbU9uY2UgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZVVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93biB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93blVwIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVEb3duKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL3RoZSBkaXJlY3Rpb25cblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcERvd24gfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZVVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd25VcCB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlRG93bikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9yYW5kb21zXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZVZhbHVlcygpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uUmFuZG9tKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy52YWx1ZXMubGVuZ3RoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgbmV4dCB2YWx1ZSBnaXZlbiB0aGUgY3VycmVudCBwb3NpdGlvblxuXHRcdCAqICBhbmQgcGF0dGVybi5cblx0XHQgKiAgQHJldHVybiB7Kn0gVGhlIG5leHQgdmFsdWVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdCAgICAgICAgLy9jaG9vc2UgdGhlIG5leHQgaW5kZXhcblx0ICAgICAgICBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd24pIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleC0tO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnZhbHVlcy5sZW5ndGggLSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXBEb3duIHx8IHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duVXApIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4Kys7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4LS07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluZGV4ID49IHRoaXMudmFsdWVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDI7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbSkge1xuXHQgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy52YWx1ZXMubGVuZ3RoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21XYWxrKSB7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpIDwgMC41KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4LS07XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5tYXgodGhpcy5pbmRleCwgMCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4Kys7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5taW4odGhpcy5pbmRleCwgdGhpcy52YWx1ZXMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgICAgIC8vcmVzaHVmZmxlIHRoZSB2YWx1ZXMgZm9yIG5leHQgdGltZVxuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZVZhbHVlcygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlVXApIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDI7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggLT0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlRG93bikge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCAtPSAyO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDE7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2h1ZmZsZXMgdGhlIHZhbHVlcyBhbmQgcGxhY2VzIHRoZSByZXN1bHRzIGludG8gdGhlIF9zaHVmZmxlZFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUuX3NodWZmbGVWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGNvcHkgPSBbXTtcblx0ICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgY29weVtpXSA9IGk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHdoaWxlIChjb3B5Lmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgdmFyIHJhbmRWYWwgPSBjb3B5LnNwbGljZShNYXRoLmZsb29yKGNvcHkubGVuZ3RoICogTWF0aC5yYW5kb20oKSksIDEpO1xuXHQgICAgICAgICAgICB0aGlzLl9zaHVmZmxlZC5wdXNoKHJhbmRWYWxbMF0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ3RybFBhdHRlcm59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsUGF0dGVybjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBDaG9vc2UgYSByYW5kb20gdmFsdWUuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciByYW5kb21XYWxrID0gbmV3IFRvbmUuQ3RybFJhbmRvbSh7XG5cdFx0ICogXHRcIm1pblwiIDogMCxcblx0XHQgKiBcdFwibWF4XCIgOiAxMCxcblx0XHQgKiBcdFwiaW50ZWdlclwiIDogdHJ1ZVxuXHRcdCAqIH0pO1xuXHRcdCAqIHJhbmRvbVdhbGsuZXZhbCgpO1xuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfFRpbWU9fSBtaW4gVGhlIG1pbmltdW0gcmV0dXJuIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxUaW1lPX0gbWF4IFRoZSBtYXhpbXVtIHJldHVybiB2YWx1ZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFJhbmRvbSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdtaW4nLFxuXHQgICAgICAgICAgICAnbWF4J1xuXHQgICAgICAgIF0sIFRvbmUuQ3RybFJhbmRvbSk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaW5pbXVtIHJldHVybiB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfFRpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pbiA9IG9wdGlvbnMubWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtYXhpbXVtIHJldHVybiB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfFRpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1heCA9IG9wdGlvbnMubWF4O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIHRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIGFuIGludGVnZXJcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmludGVnZXIgPSBvcHRpb25zLmludGVnZXI7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsUmFuZG9tKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUmFuZG9tLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICdpbnRlZ2VyJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIGEgcmFuZG9tIHZhbHVlIGJldHdlZW4gbWluIGFuZCBtYXguIFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybFJhbmRvbSNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DdHJsUmFuZG9tLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbWluID0gdGhpcy50b1NlY29uZHModGhpcy5taW4pO1xuXHQgICAgICAgICAgICB2YXIgbWF4ID0gdGhpcy50b1NlY29uZHModGhpcy5tYXgpO1xuXHQgICAgICAgICAgICB2YXIgcmFuZCA9IE1hdGgucmFuZG9tKCk7XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSByYW5kICogbWluICsgKDEgLSByYW5kKSAqIG1heDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW50ZWdlcikge1xuXHQgICAgICAgICAgICAgICAgdmFsID0gTWF0aC5mbG9vcih2YWwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsUmFuZG9tO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgZGF0YSBzdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgbXVsdGlwbGUgYnVmZmVycy5cblx0XHQgKiAgXG5cdFx0ICogIEBwYXJhbSAge09iamVjdHxBcnJheX0gICAgdXJscyAgICAgIEFuIG9iamVjdCBsaXRlcmFsIG9yIGFycmF5XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHVybHMgdG8gbG9hZC5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZC4gXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9hZCBhIHdob2xlIGJhbmsgb2YgcGlhbm8gc2FtcGxlc1xuXHRcdCAqIHZhciBwaWFub1NhbXBsZXMgPSBuZXcgVG9uZS5CdWZmZXJzKHtcblx0XHQgKiBcdFwiQzRcIiA6IFwicGF0aC90by9DNC5tcDNcIlxuXHRcdCAqIFx0XCJDIzRcIiA6IFwicGF0aC90by9DIzQubXAzXCJcblx0XHQgKiBcdFwiRDRcIiA6IFwicGF0aC90by9ENC5tcDNcIlxuXHRcdCAqIFx0XCJEIzRcIiA6IFwicGF0aC90by9EIzQubXAzXCJcblx0XHQgKiBcdC4uLlxuXHRcdCAqIH0sIGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3BsYXkgb25lIG9mIHRoZSBzYW1wbGVzIHdoZW4gdGhleSBhbGwgbG9hZFxuXHRcdCAqIFx0cGxheWVyLmJ1ZmZlciA9IHBpYW5vU2FtcGxlcy5nZXQoXCJDNFwiKTtcblx0XHQgKiBcdHBsYXllci5zdGFydCgpO1xuXHRcdCAqIH0pO1xuXHRcdCAqIFx0QGV4YW1wbGVcblx0XHQgKiAvL1RvIHBhc3MgaW4gYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGluIHRoZSBzZWNvbmQgcGFyYW1ldGVyXG5cdFx0ICogdmFyIGJ1ZmZlcnMgPSBuZXcgVG9uZS5CdWZmZXJzKHVybHMsIHtcblx0XHQgKiBcdFwib25sb2FkXCIgOiBjYWxsYmFjayxcblx0XHQgKiBcdFwiYmFzZVVybFwiIDogXCIuLi9wYXRoL3RvL2F1ZGlvL1wiXG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycyA9IGZ1bmN0aW9uICh1cmxzKSB7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIHVybHMgZnJvbSB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3MsIFtcblx0ICAgICAgICAgICAgJ29ubG9hZCcsXG5cdCAgICAgICAgICAgICdiYXNlVXJsJ1xuXHQgICAgICAgIF0sIFRvbmUuQnVmZmVycyk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgYnVmZmVyc1xuXHRcdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0ge307XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBwYXRoIHdoaWNoIGlzIHByZWZpeGVkIGJlZm9yZSBldmVyeSB1cmwuXG5cdFx0XHQgKiAgQHR5cGUgIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50ID0gMDtcblx0ICAgICAgICAvL2FkZCBlYWNoIG9uZVxuXHQgICAgICAgIGZvciAodmFyIGtleSBpbiB1cmxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCsrO1xuXHQgICAgICAgICAgICB0aGlzLmFkZChrZXksIHVybHNba2V5XSwgdGhpcy5fYnVmZmVyTG9hZGVkLmJpbmQodGhpcywgb3B0aW9ucy5vbmxvYWQpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CdWZmZXJzKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdiYXNlVXJsJzogJydcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJ1ZSBpZiB0aGUgYnVmZmVycyBvYmplY3QgaGFzIGEgYnVmZmVyIGJ5IHRoYXQgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIG5hbWUgIFRoZSBrZXkgb3IgaW5kZXggb2YgdGhlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLlxuXHRcdCAqICBAcmV0dXJuICB7Qm9vbGVhbn1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVycy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IGEgYnVmZmVyIGJ5IG5hbWUuIElmIGFuIGFycmF5IHdhcyBsb2FkZWQsIFxuXHRcdCAqICB0aGVuIHVzZSB0aGUgYXJyYXkgaW5kZXguXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICBuYW1lICBUaGUga2V5IG9yIGluZGV4IG9mIHRoZSBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIGlmICh0aGlzLmhhcyhuYW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyc1tuYW1lXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyczogbm8gYnVmZmVyIG5hbWVkICcgKyBuYW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEEgYnVmZmVyIHdhcyBsb2FkZWQuIGRlY3JlbWVudCB0aGUgY291bnRlci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuX2J1ZmZlckxvYWRlZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudC0tO1xuXHQgICAgICAgIGlmICh0aGlzLl9sb2FkaW5nQ291bnQgPT09IDAgJiYgY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVycyNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlcnMucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaXNMb2FkZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBidWZmTmFtZSBpbiB0aGlzLl9idWZmZXJzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnVmZiA9IHRoaXMuZ2V0KGJ1ZmZOYW1lKTtcblx0ICAgICAgICAgICAgICAgIGlzTG9hZGVkID0gaXNMb2FkZWQgJiYgYnVmZi5sb2FkZWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIGJ1ZmZlciBieSBuYW1lIGFuZCB1cmwgdG8gdGhlIEJ1ZmZlcnNcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBuYW1lICAgICAgQSB1bmlxdWUgbmFtZSB0byBnaXZlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXJcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfFRvbmUuQnVmZmVyfEF1ZGlvYnVmZmVyfSAgdXJsICBFaXRoZXIgdGhlIHVybCBvZiB0aGUgYnVmZXIsIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYWRkZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgY2FsbGJhY2sgPSBUb25lLmRlZmF1bHRBcmcoY2FsbGJhY2ssIFRvbmUubm9PcCk7XG5cdCAgICAgICAgaWYgKHVybCBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0gPSB1cmw7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodXJsIGluc3RhbmNlb2YgQXVkaW9CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXSA9IG5ldyBUb25lLkJ1ZmZlcih1cmwpO1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcodXJsKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzW25hbWVdID0gbmV3IFRvbmUuQnVmZmVyKHRoaXMuYmFzZVVybCArIHVybCwgY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlcnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl9idWZmZXJzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0uZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CdWZmZXJzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBidXNlcyBhcmUgYW5vdGhlciB3YXkgb2Ygcm91dGluZyBhdWRpb1xuXHRcdCAqXG5cdFx0ICogIGF1Z21lbnRzIFRvbmUucHJvdG90eXBlIHRvIGluY2x1ZGUgc2VuZCBhbmQgcmVjaWV2ZVxuXHRcdCAqL1xuXHQgICAgLyoqXG5cdFx0ICogIEFsbCBvZiB0aGUgcm91dGVzXG5cdFx0ICpcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIEJ1c2VzID0ge307XG5cdCAgICAvKipcblx0XHQgKiAgU2VuZCB0aGlzIHNpZ25hbCB0byB0aGUgY2hhbm5lbCBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9IGNoYW5uZWxOYW1lIEEgbmFtZWQgY2hhbm5lbCB0byBzZW5kIHRoZSBzaWduYWwgdG8uXG5cdFx0ICogIEBwYXJhbSAge0RlY2liZWxzfSBhbW91bnQgVGhlIGFtb3VudCBvZiB0aGUgc291cmNlIHRvIHNlbmQgdG8gdGhlIGJ1cy5cblx0XHQgKiAgQHJldHVybiB7R2Fpbk5vZGV9IFRoZSBnYWluIG5vZGUgd2hpY2ggY29ubmVjdHMgdGhpcyBub2RlIHRvIHRoZSBkZXNpcmVkIGNoYW5uZWwuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCB0byBhZGp1c3QgdGhlIGxldmVscyBvZiB0aGUgc2VuZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc2VuZChcInJldmVyYlwiLCAtMTIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIChjaGFubmVsTmFtZSwgYW1vdW50KSB7XG5cdCAgICAgICAgaWYgKCFCdXNlcy5oYXNPd25Qcm9wZXJ0eShjaGFubmVsTmFtZSkpIHtcblx0ICAgICAgICAgICAgQnVzZXNbY2hhbm5lbE5hbWVdID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgYW1vdW50ID0gVG9uZS5kZWZhdWx0QXJnKGFtb3VudCwgMCk7XG5cdCAgICAgICAgdmFyIHNlbmRLbm9iID0gbmV3IFRvbmUuR2FpbihhbW91bnQsIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0KHNlbmRLbm9iKTtcblx0ICAgICAgICBzZW5kS25vYi5jb25uZWN0KEJ1c2VzW2NoYW5uZWxOYW1lXSk7XG5cdCAgICAgICAgcmV0dXJuIHNlbmRLbm9iO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZWNpZXZlIHRoZSBpbnB1dCBmcm9tIHRoZSBkZXNpcmVkIGNoYW5uZWxOYW1lIHRvIHRoZSBpbnB1dFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gY2hhbm5lbE5hbWUgQSBuYW1lZCBjaGFubmVsIHRvIHNlbmQgdGhlIHNpZ25hbCB0by5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gY2hhbm5lbE51bWJlciBUaGUgY2hhbm5lbCB0byBjb25uZWN0IHRvXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcmV2ZXJiRWZmZWN0LnJlY2VpdmUoXCJyZXZlcmJcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5yZWNlaXZlID0gZnVuY3Rpb24gKGNoYW5uZWxOYW1lLCBpbnB1dE51bSkge1xuXHQgICAgICAgIGlmICghQnVzZXMuaGFzT3duUHJvcGVydHkoY2hhbm5lbE5hbWUpKSB7XG5cdCAgICAgICAgICAgIEJ1c2VzW2NoYW5uZWxOYW1lXSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIEJ1c2VzW2NoYW5uZWxOYW1lXS5jb25uZWN0KHRoaXMsIDAsIGlucHV0TnVtKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvL3JlbW92ZSBhbGwgdGhlIHNlbmQvcmVjZWl2ZXMgd2hlbiBhIG5ldyBhdWRpbyBjb250ZXh0IGlzIHBhc3NlZCBpblxuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5CdXNlcykge1xuXHQgICAgICAgICAgICBCdXNlcyA9IGNvbnRleHQuQnVzZXM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgQnVzZXMgPSB7fTtcblx0ICAgICAgICAgICAgY29udGV4dC5CdXNlcyA9IEJ1c2VzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkRyYXcgaXMgdXNlZnVsIGZvciBzeW5jaHJvbml6aW5nIHZpc3VhbHMgYW5kIGF1ZGlvIGV2ZW50cy5cblx0XHQgKiAgICAgICAgIENhbGxiYWNrcyBmcm9tIFRvbmUuVHJhbnNwb3J0IG9yIGFueSBvZiB0aGUgVG9uZS5FdmVudCBjbGFzc2VzXG5cdFx0ICogICAgICAgICBhbHdheXMgaGFwcGVuIF9iZWZvcmVfIHRoZSBzY2hlZHVsZWQgdGltZSBhbmQgYXJlIG5vdCBzeW5jaHJvbml6ZWRcblx0XHQgKiAgICAgICAgIHRvIHRoZSBhbmltYXRpb24gZnJhbWUgc28gdGhleSBhcmUgbm90IGdvb2QgZm9yIHRyaWdnZXJpbmcgdGlnaHRseVxuXHRcdCAqICAgICAgICAgc3luY2hyb25pemVkIHZpc3VhbHMgYW5kIHNvdW5kLiBUb25lLkRyYXcgbWFrZXMgaXQgZWFzeSB0byBzY2hlZHVsZVxuXHRcdCAqICAgICAgICAgY2FsbGJhY2tzIHVzaW5nIHRoZSBBdWRpb0NvbnRleHQgdGltZSBhbmQgdXNlcyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuXG5cdFx0ICogICAgICAgICBcblx0XHQgKiAgQHNpbmdsZXRvblxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdC8vdXNlIHRoZSB0aW1lIGFyZ3VtZW50IHRvIHNjaGVkdWxlIGEgY2FsbGJhY2sgd2l0aCBUb25lLkRyYXdcblx0XHQgKiBcdFRvbmUuRHJhdy5zY2hlZHVsZShmdW5jdGlvbigpe1xuXHRcdCAqIFx0XHQvL2RvIGRyYXdpbmcgb3IgRE9NIG1hbmlwdWxhdGlvbiBoZXJlXG5cdFx0ICogXHR9LCB0aW1lKVxuXHRcdCAqIH0sIFwiKzAuNVwiKVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EcmF3ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIGV2ZW50cy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGR1cmF0aW9uIGFmdGVyIHdoaWNoIGV2ZW50cyBhcmUgbm90IGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQGRlZmF1bHQgMC4yNVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5leHBpcmF0aW9uID0gMC4yNTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgYmVmb3JlIHRoZSBzY2hlZHVsZWQgdGltZSBcblx0XHRcdCAqICB0aGF0IHRoZSBjYWxsYmFjayBjYW4gYmUgaW52b2tlZC4gRGVmYXVsdCBpc1xuXHRcdFx0ICogIGhhbGYgdGhlIHRpbWUgb2YgYW4gYW5pbWF0aW9uIGZyYW1lICgwLjAwOCBzZWNvbmRzKS5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAZGVmYXVsdCAwLjAwOFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hbnRpY2lwYXRpb24gPSAwLjAwODtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZHJhdyBsb29wXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYm91bmREcmF3TG9vcCA9IHRoaXMuX2RyYXdMb29wLmJpbmQodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5EcmF3KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZSBhIGZ1bmN0aW9uIGF0IHRoZSBnaXZlbiB0aW1lIHRvIGJlIGludm9rZWRcblx0XHQgKiAgb24gdGhlIG5lYXJlc3QgYW5pbWF0aW9uIGZyYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBDYWxsYmFjayBpcyBpbnZva2VkIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICB0aW1lICAgICAgVGhlIHRpbWUgcmVsYXRpdmUgdG8gdGhlIEF1ZGlvQ29udGV4dCB0aW1lXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBpbnZva2UgdGhlIGNhbGxiYWNrLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5EcmF3fSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcblx0ICAgICAgICAgICAgdGltZTogdGhpcy50b1NlY29uZHModGltZSlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBkcmF3IGxvb3Agb24gdGhlIGZpcnN0IGV2ZW50XG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kRHJhd0xvb3ApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGV2ZW50cyBzY2hlZHVsZWQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBhZnRlciAgVGltZSBhZnRlciB3aGljaCBzY2hlZHVsZWQgZXZlbnRzIHdpbGwgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2NoZWR1bGluZyB0aW1lbGluZS5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRHJhd30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdy5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCh0aGlzLnRvU2Vjb25kcyhhZnRlcikpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZHJhdyBsb29wXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcucHJvdG90eXBlLl9kcmF3TG9vcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm93ID0gVG9uZS5ub3coKTtcblx0ICAgICAgICB3aGlsZSAodGhpcy5fZXZlbnRzLmxlbmd0aCAmJiB0aGlzLl9ldmVudHMucGVlaygpLnRpbWUgLSB0aGlzLmFudGljaXBhdGlvbiA8PSBub3cpIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzLnNoaWZ0KCk7XG5cdCAgICAgICAgICAgIGlmIChub3cgLSBldmVudC50aW1lIDw9IHRoaXMuZXhwaXJhdGlvbikge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuY2FsbGJhY2soKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kRHJhd0xvb3ApO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvL21ha2UgYSBzaW5nbGV0b25cblx0ICAgIFRvbmUuRHJhdyA9IG5ldyBUb25lLkRyYXcoKTtcblx0ICAgIHJldHVybiBUb25lLkRyYXc7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQm90aCBUb25lLlBhbm5lcjNEIGFuZCBUb25lLkxpc3RlbmVyIGhhdmUgYSBwb3NpdGlvbiBpbiAzRCBzcGFjZVxuXHRcdCAqICAgICAgICAgIHVzaW5nIGEgcmlnaHQtaGFuZGVkIGNhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbS5cblx0XHQgKiAgICAgICAgICBUaGUgdW5pdHMgdXNlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gYXJlIG5vdCBkZWZpbmVkO1xuXHRcdCAqICAgICAgICAgIHRoZXNlIGNvb3JkaW5hdGVzIGFyZSBpbmRlcGVuZGVudC9pbnZhcmlhbnQgb2YgYW55IHBhcnRpY3VsYXJcblx0XHQgKiAgICAgICAgICB1bml0cyBzdWNoIGFzIG1ldGVycyBvciBmZWV0LiBUb25lLlBhbm5lcjNEIG9iamVjdHMgaGF2ZSBhbiBmb3J3YXJkXG5cdFx0ICogICAgICAgICAgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgZGlyZWN0aW9uIHRoZSBzb3VuZCBpcyBwcm9qZWN0aW5nLiBBZGRpdGlvbmFsbHksXG5cdFx0ICogICAgICAgICAgdGhleSBoYXZlIGEgc291bmQgY29uZSByZXByZXNlbnRpbmcgaG93IGRpcmVjdGlvbmFsIHRoZSBzb3VuZCBpcy5cblx0XHQgKiAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHNvdW5kIGNvdWxkIGJlIG9tbmlkaXJlY3Rpb25hbCwgaW4gd2hpY2ggY2FzZSBpdCB3b3VsZFxuXHRcdCAqICAgICAgICAgIGJlIGhlYXJkIGFueXdoZXJlIHJlZ2FyZGxlc3Mgb2YgaXRzIGZvcndhcmQsIG9yIGl0IGNhbiBiZSBtb3JlIGRpcmVjdGlvbmFsXG5cdFx0ICogICAgICAgICAgYW5kIGhlYXJkIG9ubHkgaWYgaXQgaXMgZmFjaW5nIHRoZSBsaXN0ZW5lci4gVG9uZS5MaXN0ZW5lciBvYmplY3RzXG5cdFx0ICogICAgICAgICAgKHJlcHJlc2VudGluZyBhIHBlcnNvbidzIGVhcnMpIGhhdmUgYW4gZm9yd2FyZCBhbmQgdXAgdmVjdG9yXG5cdFx0ICogICAgICAgICAgcmVwcmVzZW50aW5nIGluIHdoaWNoIGRpcmVjdGlvbiB0aGUgcGVyc29uIGlzIGZhY2luZy4gQmVjYXVzZSBib3RoIHRoZVxuXHRcdCAqICAgICAgICAgIHNvdXJjZSBzdHJlYW0gYW5kIHRoZSBsaXN0ZW5lciBjYW4gYmUgbW92aW5nLCB0aGV5IGJvdGggaGF2ZSBhIHZlbG9jaXR5XG5cdFx0ICogICAgICAgICAgdmVjdG9yIHJlcHJlc2VudGluZyBib3RoIHRoZSBzcGVlZCBhbmQgZGlyZWN0aW9uIG9mIG1vdmVtZW50LiBUYWtlbiB0b2dldGhlcixcblx0XHQgKiAgICAgICAgICB0aGVzZSB0d28gdmVsb2NpdGllcyBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBhIGRvcHBsZXIgc2hpZnQgZWZmZWN0IHdoaWNoIGNoYW5nZXMgdGhlIHBpdGNoLlxuXHRcdCAqICAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgTm90ZTogdGhlIHBvc2l0aW9uIG9mIHRoZSBMaXN0ZW5lciB3aWxsIGhhdmUgbm8gZWZmZWN0IG9uIG5vZGVzIG5vdCBjb25uZWN0ZWQgdG8gYSBUb25lLlBhbm5lcjNEXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkcyB0aGUgY3VycmVudCBmb3J3YXJkIG9yaWVudGF0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBbXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDBcblx0ICAgICAgICBdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBbXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDBcblx0ICAgICAgICBdO1xuXHQgICAgICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIHNldCB0aGUgZGVmYXVsdCBwb3NpdGlvbi9mb3J3YXJkXG5cdCAgICAgICAgICAgIHRoaXMuc2V0KExpc3RlbmVyQ29uc3RydWN0b3IuZGVmYXVsdHMpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5MaXN0ZW5lcik7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHMgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwb3NpdGlvblgnOiAwLFxuXHQgICAgICAgICdwb3NpdGlvblknOiAwLFxuXHQgICAgICAgICdwb3NpdGlvblonOiAwLFxuXHQgICAgICAgICdmb3J3YXJkWCc6IDAsXG5cdCAgICAgICAgJ2ZvcndhcmRZJzogMCxcblx0ICAgICAgICAnZm9yd2FyZFonOiAxLFxuXHQgICAgICAgICd1cFgnOiAwLFxuXHQgICAgICAgICd1cFknOiAxLFxuXHQgICAgICAgICd1cFonOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJhbXAgdGltZSB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBzZXRUYXJnZXRBdFRpbWVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5fcmFtcFRpbWVDb25zdGFudCA9IDAuMDE7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGxpc3RlbmVyIGluIDNkIHNwYWNlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkxpc3RlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblouc2V0VGFyZ2V0QXRUaW1lKHosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnNldFBvc2l0aW9uKHgsIHksIHopO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBsaXN0ZW5lciB1c2luZyB0d28gdmVjdG9ycywgdGhlIGZvcndhcmRcblx0XHQgKiAgdmVjdG9yICh3aGljaCBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIGZhY2luZykgYW5kIHRoZSB1cCB2ZWN0b3Jcblx0XHQgKiAgKHdoaWNoIHRoZSB1cCBkaXJlY3Rpb24gb2YgdGhlIGxpc3RlbmVyKS4gQW4gdXAgdmVjdG9yXG5cdFx0ICogIG9mIDAsIDAsIDEgaXMgZXF1aXZhbGVudCB0byB0aGUgbGlzdGVuZXIgc3RhbmRpbmcgdXAgaW4gdGhlIFogZGlyZWN0aW9uLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB1cFhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdXBZXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHVwWlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkxpc3RlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5zZXRPcmllbnRhdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6LCB1cFgsIHVwWSwgdXBaKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRYLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuZm9yd2FyZFkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnVwWC5zZXRUYXJnZXRBdFRpbWUodXBYLCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIudXBZLnNldFRhcmdldEF0VGltZSh1cFksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci51cFouc2V0VGFyZ2V0QXRUaW1lKHVwWiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuc2V0T3JpZW50YXRpb24oeCwgeSwgeiwgdXBYLCB1cFksIHVwWik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3Bvc2l0aW9uWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMF0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblswXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAncG9zaXRpb25ZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblsxXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzFdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25aXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdwb3NpdGlvblonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzJdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMl07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXJzIGZyb250IGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB3aGljaCB3YXkgdGhleSBhcmUgZmFjaW5nLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgZm9yd2FyZFhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ2ZvcndhcmRYJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVycyBmcm9udCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgd2hpY2ggd2F5IHRoZXkgYXJlIGZhY2luZy5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIGZvcndhcmRZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdmb3J3YXJkWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcnMgZnJvbnQgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHdoaWNoIHdheSB0aGV5IGFyZSBmYWNpbmcuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBmb3J3YXJkWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAnZm9yd2FyZFonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzJdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMl07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXIncyB1cCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgdGhlIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgc3RhbmRpbmcgaW4uXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSB1cFhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3VwWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bM10gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblszXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcidzIHVwIGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB0aGUgZGlyZWN0aW9uIHRoZSBsaXN0ZW5lciBpcyBzdGFuZGluZyBpbi5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHVwWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAndXBZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvbls0XSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzRdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVyJ3MgdXAgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHRoZSBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIHN0YW5kaW5nIGluLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgdXBaXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICd1cFonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzVdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bNV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxpc3RlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy9TSU5HTEVUT04gU0VUVVBcblx0ICAgIHZhciBMaXN0ZW5lckNvbnN0cnVjdG9yID0gVG9uZS5MaXN0ZW5lcjtcblx0ICAgIFRvbmUuTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5MaXN0ZW5lciBpbnN0YW5jZW9mIExpc3RlbmVyQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgLy9hIHNpbmdsZSBsaXN0ZW5lciBvYmplY3Rcblx0ICAgICAgICAgICAgVG9uZS5MaXN0ZW5lciA9IGNvbnRleHQuTGlzdGVuZXI7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9tYWtlIG5ldyBMaXN0ZW5lciBpbnNpZGVzXG5cdCAgICAgICAgICAgIFRvbmUuTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb250ZXh0Lkxpc3RlbmVyID0gVG9uZS5MaXN0ZW5lcjtcblx0ICAgIH0pO1xuXHQgICAgLy9FTkQgU0lOR0xFVE9OIFNFVFVQXG5cdCAgICByZXR1cm4gVG9uZS5MaXN0ZW5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQmVjYXVzZSBvZiBhIGJ1ZyBpbiBpT1MgY2F1c2luZyB0aGUgY3VycmVudFRpbWUgdG8gaW5jcmVtZW50XG5cdFx0ICogYmVmb3JlIHRoZSByZW5kZXJpbmcgaXMgc3RhcnRlZCwgc29tZXRpbWVzIGl0IHRha2VzIG11bHRpcGxlXG5cdFx0ICogYXR0ZW1wdHMgdG8gcmVuZGVyIHRoZSBhdWRpbyBjb3JyZWN0bHkuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIGZ1bmN0aW9uIGF0dGVtcHRSZW5kZXIoY2FsbGJhY2ssIGR1cmF0aW9uLCBzYW1wbGVSYXRlLCB0cmllcykge1xuXHQgICAgICAgIHRyaWVzID0gVG9uZS5kZWZhdWx0QXJnKHRyaWVzLCAwKTtcblx0ICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBUb25lLk9mZmxpbmVDb250ZXh0KDIsIGR1cmF0aW9uLCBzYW1wbGVSYXRlKTtcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgIC8vaW52b2tlIHRoZSBjYWxsYmFjay9zY2hlZHVsaW5nXG5cdCAgICAgICAgdmFyIHJlc3BvbnNlID0gY2FsbGJhY2soVG9uZS5UcmFuc3BvcnQpO1xuXHQgICAgICAgIGlmIChjb250ZXh0LmN1cnJlbnRUaW1lID4gMCAmJiB0cmllcyA8IDEwMDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRSZW5kZXIoY2FsbGJhY2ssIGR1cmF0aW9uLCBzYW1wbGVSYXRlLCArK3RyaWVzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAgICAgJ3Jlc3BvbnNlJzogcmVzcG9uc2UsXG5cdCAgICAgICAgICAgICAgICAnY29udGV4dCc6IGNvbnRleHRcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdCAgICAvKipcblx0XHQgKiAgR2VuZXJhdGUgYSBidWZmZXIgYnkgcmVuZGVyaW5nIGFsbCBvZiB0aGUgVG9uZS5qcyBjb2RlIHdpdGhpbiB0aGUgY2FsbGJhY2sgdXNpbmcgdGhlIE9mZmxpbmVBdWRpb0NvbnRleHQuXG5cdFx0ICogIFRoZSBPZmZsaW5lQXVkaW9Db250ZXh0IGlzIGNhcGFibGUgb2YgcmVuZGVyaW5nIG11Y2ggZmFzdGVyIHRoYW4gcmVhbCB0aW1lIGluIG1hbnkgY2FzZXMuXG5cdFx0ICogIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBhbHNvIHBhc3NlcyBpbiBhbiBvZmZsaW5lIGluc3RhbmNlIG9mIFRvbmUuVHJhbnNwb3J0IHdoaWNoIGNhbiBiZSB1c2VkXG5cdFx0ICogIHRvIHNjaGVkdWxlIGV2ZW50cyBhbG9uZyB0aGUgVHJhbnNwb3J0LiAqKk5PVEUqKiBPZmZsaW5lQXVkaW9Db250ZXh0IGhhcyB0aGUgc2FtZSByZXN0cmljdGlvbnNcblx0XHQgKiAgYXMgdGhlIEF1ZGlvQ29udGV4dCBpbiB0aGF0IG9uIGNlcnRhaW4gcGxhdGZvcm1zIChsaWtlIGlPUykgaXQgbXVzdCBiZSBpbnZva2VkIGJ5IGFuIGV4cGxpY2l0XG5cdFx0ICogIHVzZXIgYWN0aW9uIGxpa2UgYSBjbGljayBvciB0YXAuIFxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBBbGwgVG9uZS5qcyBub2RlcyB3aGljaCBhcmUgY3JlYXRlZCBhbmQgc2NoZWR1bGVkIHdpdGhpbiB0aGlzIGNhbGxiYWNrIGFyZSByZWNvcmRlZCBpbnRvIHRoZSBvdXRwdXQgQnVmZmVyLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgZHVyYXRpb24gICAgIHRoZSBhbW91bnQgb2YgdGltZSB0byByZWNvcmQgZm9yLlxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX0gIFRoZSBwcm9taXNlIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgVG9uZS5CdWZmZXIgb2YgdGhlIHJlY29yZGVkIG91dHB1dC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JlbmRlciAyIHNlY29uZHMgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiBUb25lLk9mZmxpbmUoZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vb25seSBub2RlcyBjcmVhdGVkIGluIHRoaXMgY2FsbGJhY2sgd2lsbCBiZSByZWNvcmRlZFxuXHRcdCAqIFx0dmFyIG9zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkudG9NYXN0ZXIoKS5zdGFydCgwKVxuXHRcdCAqIFx0Ly9zY2hlZHVsZSB0aGVpciBldmVudHNcblx0XHQgKiB9LCAyKS50aGVuKGZ1bmN0aW9uKGJ1ZmZlcil7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSBvdXRwdXQgYnVmZmVyXG5cdFx0ICogfSlcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIGFsc28gc2NoZWR1bGUgZXZlbnRzIGFsb25nIHRoZSBUcmFuc3BvcnRcblx0XHQgKiAvL3VzaW5nIHRoZSBwYXNzZWQgaW4gT2ZmbGluZSBUcmFuc3BvcnRcblx0XHQgKiBUb25lLk9mZmxpbmUoZnVuY3Rpb24oVHJhbnNwb3J0KXtcblx0XHQgKiBcdHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkudG9NYXN0ZXIoKVxuXHRcdCAqIFx0VHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0XHRvc2Muc3RhcnQodGltZSkuc3RvcCh0aW1lICsgMC4xKVxuXHRcdCAqIFx0fSwgMSlcblx0XHQgKiBcdFRyYW5zcG9ydC5zdGFydCgwLjIpXG5cdFx0ICogfSwgNCkudGhlbihmdW5jdGlvbihidWZmZXIpe1xuXHRcdCAqIFx0Ly9kbyBzb21ldGhpbmcgd2l0aCB0aGUgb3V0cHV0IGJ1ZmZlclxuXHRcdCAqIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgLy9zZXQgdGhlIE9mZmxpbmVBdWRpb0NvbnRleHRcblx0ICAgICAgICB2YXIgc2FtcGxlUmF0ZSA9IFRvbmUuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgIHZhciBvcmlnaW5hbENvbnRleHQgPSBUb25lLmNvbnRleHQ7XG5cdCAgICAgICAgdmFyIHJlbmRlclJldCA9IGF0dGVtcHRSZW5kZXIoY2FsbGJhY2ssIGR1cmF0aW9uLCBzYW1wbGVSYXRlKTtcblx0ICAgICAgICB2YXIgcmVzcG9uc2UgPSByZW5kZXJSZXQucmVzcG9uc2U7XG5cdCAgICAgICAgdmFyIGNvbnRleHQgPSByZW5kZXJSZXQuY29udGV4dDtcblx0ICAgICAgICB2YXIgcmV0O1xuXHQgICAgICAgIGlmIChyZXNwb25zZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0ICAgICAgICAgICAgLy93YWl0IGZvciB0aGUgcHJvbWlzZSB0byByZXNvbHZlXG5cdCAgICAgICAgICAgIHJldCA9IHJlc3BvbnNlLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgLy90aGVuIHJlbmRlciB0aGUgYXVkaW9cblx0ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnJlbmRlcigpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL3Byb2Nlc3MgdGhlIGF1ZGlvXG5cdCAgICAgICAgICAgIHJldCA9IGNvbnRleHQucmVuZGVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vcmV0dXJuIHRoZSBvcmlnaW5hbCBBdWRpb0NvbnRleHRcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBvcmlnaW5hbENvbnRleHQ7XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIGF1ZGlvXG5cdCAgICAgICAgcmV0dXJuIHJldC50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgLy93cmFwIGl0IGluIGEgVG9uZS5CdWZmZXJcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLkJ1ZmZlcihidWZmZXIpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9mZmxpbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogXHRAY2xhc3MgIFRvbmUuRWZmZWN0IGlzIHRoZSBiYXNlIGNsYXNzIGZvciBlZmZlY3RzLiBDb25uZWN0IHRoZSBlZmZlY3QgYmV0d2VlblxuXHRcdCAqIFx0ICAgICAgICB0aGUgZWZmZWN0U2VuZCBhbmQgZWZmZWN0UmV0dXJuIEdhaW5Ob2RlcywgdGhlbiBjb250cm9sIHRoZSBhbW91bnQgb2Zcblx0XHQgKiBcdCAgICAgICAgZWZmZWN0IHdoaWNoIGdvZXMgdG8gdGhlIG91dHB1dCB1c2luZyB0aGUgd2V0IGNvbnRyb2wuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFt3ZXRdIFRoZSBzdGFydGluZyB3ZXQgdmFsdWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkVmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3dldCddLCBUb25lLkVmZmVjdCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRyeXdldCBrbm9iIHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Dcm9zc0ZhZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG5ldyBUb25lLkNyb3NzRmFkZShvcHRpb25zLndldCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdldCBjb250cm9sIGlzIGhvdyBtdWNoIG9mIHRoZSBlZmZlY3RlZFxuXHRcdFx0ICogIHdpbGwgcGFzcyB0aHJvdWdoIHRvIHRoZSBvdXRwdXQuIDEgPSAxMDAlIGVmZmVjdGVkXG5cdFx0XHQgKiAgc2lnbmFsLCAwID0gMTAwJSBkcnkgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndldCA9IHRoaXMuX2RyeVdldC5mYWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbm5lY3QgdGhlIGVmZmVjdFNlbmQgdG8gdGhlIGlucHV0IG9mIGh0ZSBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29ubmVjdCB0aGUgb3V0cHV0IG9mIHRoZSBlZmZlY3QgdG8gdGhlIGVmZmVjdFJldHVyblxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fZHJ5V2V0LmEpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLmVmZmVjdFNlbmQpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuLmNvbm5lY3QodGhpcy5fZHJ5V2V0LmIpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3dldCddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVmZmVjdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0LmRlZmF1bHRzID0geyAnd2V0JzogMSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYWlucyB0aGUgZWZmZWN0IGluIGJldHdlZW4gdGhlIGVmZmVjdFNlbmQgYW5kIGVmZmVjdFJldHVyblxuXHRcdCAqICBAcGFyYW0gIHtUb25lfSBlZmZlY3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuY29ubmVjdEVmZmVjdCA9IGZ1bmN0aW9uIChlZmZlY3QpIHtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4oZWZmZWN0LCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnd2V0J10pO1xuXHQgICAgICAgIHRoaXMud2V0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkF1dG9GaWx0ZXIgaXMgYSBUb25lLkZpbHRlciB3aXRoIGEgVG9uZS5MRk8gY29ubmVjdGVkIHRvIHRoZSBmaWx0ZXIgY3V0b2ZmIGZyZXF1ZW5jeS5cblx0XHQgKiAgICAgICAgIFNldHRpbmcgdGhlIExGTyByYXRlIGFuZCBkZXB0aCBhbGxvd3MgZm9yIGNvbnRyb2wgb3ZlciB0aGUgZmlsdGVyIG1vZHVsYXRpb24gcmF0ZSBcblx0XHQgKiAgICAgICAgIGFuZCBkZXB0aC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgcmF0ZSBvZiB0aGUgTEZPLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeT19IGJhc2VGcmVxdWVuY3kgVGhlIGxvd2VyIHZhbHVlIG9mIHRoZSBMRk9zIG9zY2lsbGF0aW9uXG5cdCBcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeT19IG9jdGF2ZXMgVGhlIG51bWJlciBvZiBvY3RhdmVzIGFib3ZlIHRoZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jcmVhdGUgYW4gYXV0b2ZpbHRlciBhbmQgc3RhcnQgaXQncyBMRk9cblx0XHQgKiB2YXIgYXV0b0ZpbHRlciA9IG5ldyBUb25lLkF1dG9GaWx0ZXIoXCI0blwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICogLy9yb3V0ZSBhbiBvc2NpbGxhdG9yIHRocm91Z2ggdGhlIGZpbHRlciBhbmQgc3RhcnQgaXRcblx0XHQgKiB2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KGF1dG9GaWx0ZXIpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnb2N0YXZlcydcblx0ICAgICAgICBdLCBUb25lLkF1dG9GaWx0ZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBkcml2ZXMgdGhlIGZpbHRlciBjdXRvZmZcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZSc6IG9wdGlvbnMuZGVwdGhcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSByYW5nZSBvZiB0aGUgZmlsdGVyIG1vZHVsYXRpbmcgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggZnJlcXVlbmN5LiBcblx0XHRcdCAqIDAgPSBubyBtb2R1bGF0aW9uLiAxID0gZnVsbCBtb2R1bGF0aW9uLlxuXHRcdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2xmby5hbXBsaXR1ZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBIb3cgZmFzdCB0aGUgZmlsdGVyIG1vZHVsYXRlcyBiZXR3ZWVuIG1pbiBhbmQgbWF4LiBcblx0XHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmby5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpbHRlciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIob3B0aW9ucy5maWx0ZXIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvY3RhdmVzIHBsYWNlaG9sZGVyXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gMDtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuZmlsdGVyKTtcblx0ICAgICAgICB0aGlzLl9sZm8uY29ubmVjdCh0aGlzLmZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIHRoaXMuYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgIH07XG5cdCAgICAvL2V4dGVuZCBFZmZlY3Rcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXV0b0ZpbHRlciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHRzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMSxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZGVwdGgnOiAxLFxuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogMi42LFxuXHQgICAgICAgICdmaWx0ZXInOiB7XG5cdCAgICAgICAgICAgICd0eXBlJzogJ2xvd3Bhc3MnLFxuXHQgICAgICAgICAgICAncm9sbG9mZic6IC0xMixcblx0ICAgICAgICAgICAgJ1EnOiAxXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0YXJ0IHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0YXJ0LiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCB0aGUgZWZmZWN0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBMRk8gd2lsbCBzdG9wLiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGZpbHRlciB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW2RlbGF5PTBdIERlbGF5IHRpbWUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBlZmZlY3QgYWZ0ZXIgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IGhhcyBzdGFydGVkLiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoZGVsYXkpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3luYyhkZWxheSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVW5zeW5jIHRoZSBmaWx0ZXIgZnJvbSB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2xmby51bnN5bmMoKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUeXBlIG9mIG9zY2lsbGF0b3IgYXR0YWNoZWQgdG8gdGhlIEF1dG9GaWx0ZXIuIFxuXHRcdCAqIFBvc3NpYmxlIHZhbHVlczogXCJzaW5lXCIsIFwic3F1YXJlXCIsIFwidHJpYW5nbGVcIiwgXCJzYXd0b290aFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9GaWx0ZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIGZpbHRlcidzIGN1dG9mZiBmcmVxdWVuY3kuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLm1pbiA9IHRoaXMudG9GcmVxdWVuY3koZnJlcSk7XG5cdCAgICAgICAgICAgIC8vYW5kIHNldCB0aGUgbWF4XG5cdCAgICAgICAgICAgIHRoaXMub2N0YXZlcyA9IHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgZmlsdGVyJ3MgY3V0b2ZmIGZyZXF1ZW5jeS4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0O1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8ubWF4ID0gdGhpcy5iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgb2N0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xmby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZpbHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXV0b0ZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQXV0b1Bhbm5lciBpcyBhIFRvbmUuUGFubmVyIHdpdGggYW4gTEZPIGNvbm5lY3RlZCB0byB0aGUgcGFuIGFtb3VudC4gXG5cdFx0ICogICAgICAgICBNb3JlIG9uIHVzaW5nIGF1dG9wYW5uZXJzIFtoZXJlXShodHRwczovL3d3dy5hYmxldG9uLmNvbS9lbi9ibG9nL2F1dG9wYW4tY2hvcHBlci1lZmZlY3QtYW5kLW1vcmUtbGl2ZXNjaG9vbC8pLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gUmF0ZSBvZiBsZWZ0LXJpZ2h0IG9zY2lsbGF0aW9uLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhbiBhdXRvcGFubmVyIGFuZCBzdGFydCBpdCdzIExGT1xuXHRcdCAqIHZhciBhdXRvUGFubmVyID0gbmV3IFRvbmUuQXV0b1Bhbm5lcihcIjRuXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKiAvL3JvdXRlIGFuIG9zY2lsbGF0b3IgdGhyb3VnaCB0aGUgcGFubmVyIGFuZCBzdGFydCBpdFxuXHRcdCAqIHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QoYXV0b1Bhbm5lcikuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZyZXF1ZW5jeSddLCBUb25lLkF1dG9QYW5uZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBkcml2ZXMgdGhlIHBhbm5pbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZSc6IG9wdGlvbnMuZGVwdGgsXG5cdCAgICAgICAgICAgICdtaW4nOiAtMSxcblx0ICAgICAgICAgICAgJ21heCc6IDFcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbW91bnQgb2YgcGFubmluZyBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0LiBcblx0XHRcdCAqIDAgPSBhbHdheXMgY2VudGVyLiAxID0gZnVsbCByYW5nZSBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0LiBcblx0XHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9sZm8uYW1wbGl0dWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwYW5uZXIgbm9kZSB3aGljaCBkb2VzIHRoZSBwYW5uaW5nXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUGFubmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBuZXcgVG9uZS5QYW5uZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEhvdyBmYXN0IHRoZSBwYW5uZXIgbW9kdWxhdGVzIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQuIFxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX3Bhbm5lcik7XG5cdCAgICAgICAgdGhpcy5fbGZvLmNvbm5lY3QodGhpcy5fcGFubmVyLnBhbik7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2RlcHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICAvL2V4dGVuZCBFZmZlY3Rcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXV0b1Bhbm5lciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHRzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMSxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZGVwdGgnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RhcnQgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RhcnQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0b3AuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgcGFubmVyIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbZGVsYXk9MF0gRGVsYXkgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIGVmZmVjdCBhZnRlciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgaGFzIHN0YXJ0ZWQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uIChkZWxheSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zeW5jKGRlbGF5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIHBhbm5lciBmcm9tIHRoZSB0cmFuc3BvcnRcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9sZm8udW5zeW5jKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVHlwZSBvZiBvc2NpbGxhdG9yIGF0dGFjaGVkIHRvIHRoZSBBdXRvRmlsdGVyLiBcblx0XHQgKiBQb3NzaWJsZSB2YWx1ZXM6IFwic2luZVwiLCBcInNxdWFyZVwiLCBcInRyaWFuZ2xlXCIsIFwic2F3dG9vdGhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9sZm8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2RlcHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXV0b1Bhbm5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkF1dG9XYWggY29ubmVjdHMgYSBUb25lLkZvbGxvd2VyIHRvIGEgYmFuZHBhc3MgZmlsdGVyIChUb25lLkZpbHRlcikuXG5cdFx0ICogICAgICAgICAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVyIGlzIGFkanVzdGVkIHByb3BvcnRpb25hbGx5IHRvIHRoZVxuXHRcdCAqICAgICAgICAgIGluY29taW5nIHNpZ25hbCdzIGFtcGxpdHVkZS4gSW5zcGlyYXRpb24gZnJvbSBbVHVuYS5qc10oaHR0cHM6Ly9naXRodWIuY29tL0RpbmFobW9lL3R1bmEpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2Jhc2VGcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgdGhlIGZpbHRlciBpcyBzZXRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYXQgdGhlIGxvdyBwb2ludCBvZiB0aGUgd2FoXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IFtvY3RhdmVzXSBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIGJhc2VGcmVxdWVuY3lcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbHRlciB3aWxsIHN3ZWVwIHRvIHdoZW4gZnVsbHkgb3BlblxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbc2Vuc2l0aXZpdHldIFRoZSBkZWNpYmVsIHRocmVzaG9sZCBzZW5zaXRpdml0eSBmb3Jcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluY29taW5nIHNpZ25hbC4gTm9ybWFsIHJhbmdlIG9mIC00MCB0byAwLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBhdXRvV2FoID0gbmV3IFRvbmUuQXV0b1dhaCg1MCwgNiwgLTMwKS50b01hc3RlcigpO1xuXHRcdCAqIC8vaW5pdGlhbGl6ZSB0aGUgc3ludGggYW5kIGNvbm5lY3QgdG8gYXV0b3dhaFxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBTeW50aC5jb25uZWN0KGF1dG9XYWgpO1xuXHRcdCAqIC8vUSB2YWx1ZSBpbmZsdWVuY2VzIHRoZSBlZmZlY3Qgb2YgdGhlIHdhaCAtIGRlZmF1bHQgaXMgMlxuXHRcdCAqIGF1dG9XYWguUS52YWx1ZSA9IDY7XG5cdFx0ICogLy9tb3JlIGF1ZGlibGUgb24gaGlnaGVyIG5vdGVzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWggPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJyxcblx0ICAgICAgICAgICAgJ3NlbnNpdGl2aXR5J1xuXHQgICAgICAgIF0sIFRvbmUuQXV0b1dhaCk7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZW52ZWxvcGUgZm9sbG93ZXIuIFNldCB0aGUgYXR0YWNrL3JlbGVhc2Vcblx0XHRcdCAqICB0aW1pbmcgdG8gYWRqdXN0IGhvdyB0aGUgZW52ZWxvcGUgaXMgZm9sbG93ZWQuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRm9sbG93ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZm9sbG93ZXIgPSBuZXcgVG9uZS5Gb2xsb3dlcihvcHRpb25zLmZvbGxvd2VyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZXMgdGhlIGZvbGxvd2VyIHZhbHVlIHRvIHRoZSBmcmVxdWVuY3kgZG9tYWluXG5cdFx0XHQgKiAgQHR5cGUge1RvbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UgPSBuZXcgVG9uZS5TY2FsZUV4cCgwLCAxLCAwLjUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXQgZ2FpbiB0byBhZGp1c3QgdGhlIHNlbnNpdGl2aXR5XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5wdXRCb29zdCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7QmlxdWFkRmlsdGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmFuZHBhc3MgPSBuZXcgVG9uZS5GaWx0ZXIoe1xuXHQgICAgICAgICAgICAncm9sbG9mZic6IC00OCxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IDAsXG5cdCAgICAgICAgICAgICdRJzogb3B0aW9ucy5RXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wZWFraW5nID0gbmV3IFRvbmUuRmlsdGVyKDAsICdwZWFraW5nJyk7XG5cdCAgICAgICAgdGhpcy5fcGVha2luZy5nYWluLnZhbHVlID0gb3B0aW9ucy5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gb2YgdGhlIGZpbHRlci5cblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmdhaW4gPSB0aGlzLl9wZWFraW5nLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcXVhbGl0eSBvZiB0aGUgZmlsdGVyLlxuXHRcdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gdGhpcy5fYmFuZHBhc3MuUTtcblx0ICAgICAgICAvL3RoZSBjb250cm9sIHNpZ25hbCBwYXRoXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNoYWluKHRoaXMuX2lucHV0Qm9vc3QsIHRoaXMuZm9sbG93ZXIsIHRoaXMuX3N3ZWVwUmFuZ2UpO1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UuY29ubmVjdCh0aGlzLl9iYW5kcGFzcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UuY29ubmVjdCh0aGlzLl9wZWFraW5nLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy90aGUgZmlsdGVyZWQgcGF0aFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbih0aGlzLl9iYW5kcGFzcywgdGhpcy5fcGVha2luZywgdGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlXG5cdCAgICAgICAgdGhpcy5fc2V0U3dlZXBSYW5nZSgpO1xuXHQgICAgICAgIHRoaXMuc2Vuc2l0aXZpdHkgPSBvcHRpb25zLnNlbnNpdGl2aXR5O1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1dG9XYWgsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAxMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiA2LFxuXHQgICAgICAgICdzZW5zaXRpdml0eSc6IDAsXG5cdCAgICAgICAgJ1EnOiAyLFxuXHQgICAgICAgICdnYWluJzogMixcblx0ICAgICAgICAnZm9sbG93ZXInOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjMsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyB0aGF0IHRoZSBmaWx0ZXIgd2lsbCBzd2VlcCBhYm92ZSB0aGVcblx0XHQgKiBiYXNlRnJlcXVlbmN5LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9XYWgjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvV2FoLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0YXZlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0YXZlcztcblx0ICAgICAgICAgICAgdGhpcy5fc2V0U3dlZXBSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGJhc2UgZnJlcXVlbmN5IGZyb20gd2hpY2ggdGhlIHN3ZWVwIHdpbGwgc3RhcnQgZnJvbS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvV2FoI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQG5hbWUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b1dhaC5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJhc2VGcmVxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBiYXNlRnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0U3dlZXBSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNlbnNpdGl2aXR5IHRvIGNvbnRyb2wgaG93IHJlc3BvbnNpdmUgdG8gdGhlIGlucHV0IHNpZ25hbCB0aGUgZmlsdGVyIGlzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9XYWgjXG5cdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdCAqIEBuYW1lIHNlbnNpdGl2aXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvV2FoLnByb3RvdHlwZSwgJ3NlbnNpdGl2aXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5nYWluVG9EYigxIC8gdGhpcy5faW5wdXRCb29zdC5nYWluLnZhbHVlKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNlbnNpdGl2eSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pbnB1dEJvb3N0LmdhaW4udmFsdWUgPSAxIC8gVG9uZS5kYlRvR2FpbihzZW5zaXRpdnkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIHNldHMgdGhlIHN3ZWVwIHJhbmdlIG9mIHRoZSBzY2FsZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaC5wcm90b3R5cGUuX3NldFN3ZWVwUmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5taW4gPSB0aGlzLl9iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UubWF4ID0gTWF0aC5taW4odGhpcy5fYmFzZUZyZXF1ZW5jeSAqIE1hdGgucG93KDIsIHRoaXMuX29jdGF2ZXMpLCB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSAvIDIpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXV0b1dhaH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvV2FoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5mb2xsb3dlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mb2xsb3dlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYmFuZHBhc3MuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2JhbmRwYXNzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wZWFraW5nLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wZWFraW5nID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9pbnB1dEJvb3N0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9pbnB1dEJvb3N0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5nYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkF1dG9XYWg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTaWduYWwtcmF0ZSBtb2R1bG8gb3BlcmF0b3IuIE9ubHkgd29ya3MgaW4gQXVkaW9SYW5nZSBbLTEsIDFdIGFuZCBmb3IgbW9kdWx1c1xuXHRcdCAqICAgICAgICAgdmFsdWVzIGluIHRoZSBOb3JtYWxSYW5nZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gbW9kdWx1cyBUaGUgbW9kdWx1cyB0byBhcHBseS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbW9kID0gbmV3IFRvbmUuTW9kdWxvKDAuMilcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDAuNSkuY29ubmVjdChtb2QpO1xuXHRcdCAqIC8vbW9kIG91dHB1dHMgMC4xXG5cdFx0ICovXG5cdCAgICBUb25lLk1vZHVsbyA9IGZ1bmN0aW9uIChtb2R1bHVzKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgd2F2ZXNoYXBlciBnZXRzIHRoZSBpbnRlZ2VyIG11bHRpcGxlIG9mXG5cdFx0XHQgKiAgdGhlIGlucHV0IHNpZ25hbCBhbmQgdGhlIG1vZHVsdXMuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihNYXRoLnBvdygyLCAxNikpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnRlZ2VyIG11bHRpcGxlIGlzIG11bHRpcGxpZWQgYnkgdGhlIG1vZHVsdXNcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhbmQgc3VidHJhY3RlZCBmcm9tIHRoZSBpbnB1dCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtb2R1bHVzIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZFNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbChtb2R1bHVzKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5mYW4odGhpcy5fc2hhcGVyLCB0aGlzLl9zdWJ0cmFjdCk7XG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsLmNvbm5lY3QodGhpcy5fbXVsdGlwbHksIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5jb25uZWN0KHRoaXMuX211bHRpcGx5LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseS5jb25uZWN0KHRoaXMuX3N1YnRyYWN0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9zZXRXYXZlU2hhcGVyKG1vZHVsdXMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9kdWxvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gIG1vZCAgdGhlIG1vZHVsdXMgdG8gYXBwbHlcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9kdWxvLnByb3RvdHlwZS5fc2V0V2F2ZVNoYXBlciA9IGZ1bmN0aW9uIChtb2QpIHtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuc2V0TWFwKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdmFyIG11bHRpcGxlID0gTWF0aC5mbG9vcigodmFsICsgMC4wMDAxKSAvIG1vZCk7XG5cdCAgICAgICAgICAgIHJldHVybiBtdWx0aXBsZTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbW9kdWx1cyB2YWx1ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Nb2R1bG8jXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Nb2R1bG8ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2RTaWduYWwudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtb2QpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kU2lnbmFsLnZhbHVlID0gbW9kO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRXYXZlU2hhcGVyKG1vZCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb2R1bG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9kdWxvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vZHVsbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQml0Y3J1c2hlciBkb3duc2FtcGxlcyB0aGUgaW5jb21pbmcgc2lnbmFsIHRvIGEgZGlmZmVyZW50IGJpdGRlcHRoLlxuXHRcdCAqICAgICAgICAgTG93ZXJpbmcgdGhlIGJpdGRlcHRoIG9mIHRoZSBzaWduYWwgY3JlYXRlcyBkaXN0b3J0aW9uLiBSZWFkIG1vcmUgYWJvdXQgQml0Y3J1c2hpbmdcblx0XHQgKiAgICAgICAgIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpdGNydXNoZXIpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiaXRzIFRoZSBudW1iZXIgb2YgYml0cyB0byBkb3duc2FtcGxlIHRoZSBzaWduYWwuIE5vbWluYWwgcmFuZ2Vcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgb2YgMSB0byA4LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaW5pdGlhbGl6ZSBjcnVzaGVyIGFuZCByb3V0ZSBhIHN5bnRoIHRocm91Z2ggaXRcblx0XHQgKiB2YXIgY3J1c2hlciA9IG5ldyBUb25lLkJpdENydXNoZXIoNCkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5Nb25vU3ludGgoKS5jb25uZWN0KGNydXNoZXIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CaXRDcnVzaGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnYml0cyddLCBUb25lLkJpdENydXNoZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgdmFyIGludlN0ZXBTaXplID0gMSAvIE1hdGgucG93KDIsIG9wdGlvbnMuYml0cyAtIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFN1YnRyYWN0IHRoZSBpbnB1dCBzaWduYWwgYW5kIHRoZSBtb2R1bHVzIG9mIHRoZSBpbnB1dCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2QgZnVuY3Rpb25cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTW9kdWxvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bG8gPSBuZXcgVG9uZS5Nb2R1bG8oaW52U3RlcFNpemUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGtlZXBzIHRyYWNrIG9mIHRoZSBiaXRzXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYml0cyA9IG9wdGlvbnMuYml0cztcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuZmFuKHRoaXMuX3N1YnRyYWN0LCB0aGlzLl9tb2R1bG8pO1xuXHQgICAgICAgIHRoaXMuX21vZHVsby5jb25uZWN0KHRoaXMuX3N1YnRyYWN0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdC5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJpdENydXNoZXIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CaXRDcnVzaGVyLmRlZmF1bHRzID0geyAnYml0cyc6IDQgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBiaXQgZGVwdGggb2YgdGhlIGVmZmVjdC4gTm9taW5hbCByYW5nZSBvZiAxLTguXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQml0Q3J1c2hlciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGJpdHNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJpdENydXNoZXIucHJvdG90eXBlLCAnYml0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JpdHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChiaXRzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2JpdHMgPSBiaXRzO1xuXHQgICAgICAgICAgICB2YXIgaW52U3RlcFNpemUgPSAxIC8gTWF0aC5wb3coMiwgYml0cyAtIDEpO1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bG8udmFsdWUgPSBpbnZTdGVwU2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQml0Q3J1c2hlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CaXRDcnVzaGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bG8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsbyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQml0Q3J1c2hlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ2hlYnlTaGV2IGlzIGEgQ2hlYnlzaGV2IHdhdmVzaGFwZXIsIGFuIGVmZmVjdCB3aGljaCBpcyBnb29kIFxuXHRcdCAqICAgICAgICAgZm9yIG1ha2luZyBkaWZmZXJlbnQgdHlwZXMgb2YgZGlzdG9ydGlvbiBzb3VuZHMuXG5cdFx0ICogICAgICAgICBOb3RlIHRoYXQgb2RkIG9yZGVycyBzb3VuZCB2ZXJ5IGRpZmZlcmVudCBmcm9tIGV2ZW4gb25lcywgXG5cdFx0ICogICAgICAgICBhbmQgb3JkZXIgPSAxIGlzIG5vIGNoYW5nZS4gXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgYXQgW211c2ljLmNvbHVtYmlhLmVkdV0oaHR0cDovL211c2ljLmNvbHVtYmlhLmVkdS9jbWMvbXVzaWNhbmRjb21wdXRlcnMvY2hhcHRlcjQvMDRfMDYucGhwKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfE9iamVjdH0gW29yZGVyXSBUaGUgb3JkZXIgb2YgdGhlIGNoZWJ5c2hldiBwb2x5bm9taWFsLiBOb3JtYWwgcmFuZ2UgYmV0d2VlbiAxLTEwMC4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jcmVhdGUgYSBuZXcgY2hlYnlcblx0XHQgKiB2YXIgY2hlYnkgPSBuZXcgVG9uZS5DaGVieXNoZXYoNTApO1xuXHRcdCAqIC8vY3JlYXRlIGEgbW9ub3N5bnRoIGNvbm5lY3RlZCB0byBvdXIgY2hlYnlcblx0XHQgKiBzeW50aCA9IG5ldyBUb25lLk1vbm9TeW50aCgpLmNvbm5lY3QoY2hlYnkpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydvcmRlciddLCBUb25lLkNoZWJ5c2hldik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoNDA5Nik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBob2xkcyBvbnRvIHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29yZGVyID0gb3B0aW9ucy5vcmRlcjtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fc2hhcGVyKTtcblx0ICAgICAgICB0aGlzLm9yZGVyID0gb3B0aW9ucy5vcmRlcjtcblx0ICAgICAgICB0aGlzLm92ZXJzYW1wbGUgPSBvcHRpb25zLm92ZXJzYW1wbGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DaGVieXNoZXYsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29yZGVyJzogMSxcblx0ICAgICAgICAnb3ZlcnNhbXBsZSc6ICdub25lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBnZXQgdGhlIGNvZWZmaWNpZW50IGZvciB0aGF0IGRlZ3JlZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0geCB0aGUgeCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gICB7bnVtYmVyfSBkZWdyZWUgXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBtZW1vIG1lbW9pemUgdGhlIGNvbXB1dGVkIHZhbHVlLiBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBzcGVlZHMgdXAgY29tcHV0YXRpb24gZ3JlYXRseS4gXG5cdFx0ICogIEByZXR1cm4gIHtudW1iZXJ9ICAgICAgIHRoZSBjb2VmZmljaWVudCBcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZS5fZ2V0Q29lZmZpY2llbnQgPSBmdW5jdGlvbiAoeCwgZGVncmVlLCBtZW1vKSB7XG5cdCAgICAgICAgaWYgKG1lbW8uaGFzT3duUHJvcGVydHkoZGVncmVlKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbWVtb1tkZWdyZWVdO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoZGVncmVlID09PSAwKSB7XG5cdCAgICAgICAgICAgIG1lbW9bZGVncmVlXSA9IDA7XG5cdCAgICAgICAgfSBlbHNlIGlmIChkZWdyZWUgPT09IDEpIHtcblx0ICAgICAgICAgICAgbWVtb1tkZWdyZWVdID0geDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBtZW1vW2RlZ3JlZV0gPSAyICogeCAqIHRoaXMuX2dldENvZWZmaWNpZW50KHgsIGRlZ3JlZSAtIDEsIG1lbW8pIC0gdGhpcy5fZ2V0Q29lZmZpY2llbnQoeCwgZGVncmVlIC0gMiwgbWVtbyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBtZW1vW2RlZ3JlZV07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG9yZGVyIG9mIHRoZSBDaGVieXNoZXYgcG9seW5vbWlhbCB3aGljaCBjcmVhdGVzXG5cdFx0ICogdGhlIGVxdWF0aW9uIHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIGluY29taW5nIFxuXHRcdCAqIHNpZ25hbCB0aHJvdWdoIGEgVG9uZS5XYXZlU2hhcGVyLiBUaGUgZXF1YXRpb25zXG5cdFx0ICogYXJlIGluIHRoZSBmb3JtOjxicj5cblx0XHQgKiBvcmRlciAyOiAyeF4yICsgMTxicj5cblx0XHQgKiBvcmRlciAzOiA0eF4zICsgM3ggPGJyPlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNoZWJ5c2hldiNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb3JkZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNoZWJ5c2hldi5wcm90b3R5cGUsICdvcmRlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yZGVyO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3JkZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JkZXIgPSBvcmRlcjtcblx0ICAgICAgICAgICAgdmFyIGN1cnZlID0gbmV3IEFycmF5KDQwOTYpO1xuXHQgICAgICAgICAgICB2YXIgbGVuID0gY3VydmUubGVuZ3RoO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgeCA9IGkgKiAyIC8gbGVuIC0gMTtcblx0ICAgICAgICAgICAgICAgIGlmICh4ID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9zaG91bGQgb3V0cHV0IDAgd2hlbiBpbnB1dCBpcyAwXG5cdCAgICAgICAgICAgICAgICAgICAgY3VydmVbaV0gPSAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBjdXJ2ZVtpXSA9IHRoaXMuX2dldENvZWZmaWNpZW50KHgsIG9yZGVyLCB7fSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLmN1cnZlID0gY3VydmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3ZlcnNhbXBsaW5nIG9mIHRoZSBlZmZlY3QuIENhbiBlaXRoZXIgYmUgXCJub25lXCIsIFwiMnhcIiBvciBcIjR4XCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hlYnlzaGV2I1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgb3ZlcnNhbXBsZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZSwgJ292ZXJzYW1wbGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG92ZXJzYW1wbGluZykge1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZSA9IG92ZXJzYW1wbGluZztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNoZWJ5c2hldn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ2hlYnlzaGV2O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQmFzZSBjbGFzcyBmb3IgU3RlcmVvIGVmZmVjdHMuIFByb3ZpZGVzIGVmZmVjdFNlbmRML1IgYW5kIGVmZmVjdFJldHVybkwvUi5cblx0XHQgKlxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9FZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3dldCddLCBUb25lLkVmZmVjdCk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkcnl3ZXQga25vYiB0byBjb250cm9sIHRoZSBhbW91bnQgb2YgZWZmZWN0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3Jvc3NGYWRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBuZXcgVG9uZS5Dcm9zc0ZhZGUob3B0aW9ucy53ZXQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3ZXQgY29udHJvbCwgaS5lLiBob3cgbXVjaCBvZiB0aGUgZWZmZWN0ZWRcblx0XHRcdCAqICB3aWxsIHBhc3MgdGhyb3VnaCB0byB0aGUgb3V0cHV0LlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndldCA9IHRoaXMuX2RyeVdldC5mYWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZW4gc3BsaXQgaXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBlZmZlY3RzIHNlbmQgTEVGVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTCA9IHRoaXMuX3NwbGl0LmxlZnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdHMgc2VuZCBSSUdIVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUiA9IHRoaXMuX3NwbGl0LnJpZ2h0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzdGVyZW8gZWZmZWN0IG1lcmdlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdCByZXR1cm4gTEVGVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5MID0gdGhpcy5fbWVyZ2UubGVmdDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0IHJldHVybiBSSUdIVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SID0gdGhpcy5fbWVyZ2UucmlnaHQ7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9zcGxpdCk7XG5cdCAgICAgICAgLy9kcnkgd2V0IGNvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX2RyeVdldCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UuY29ubmVjdCh0aGlzLl9kcnlXZXQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3dldCddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb0VmZmVjdCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9FZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd3ZXQnXSk7XG5cdCAgICAgICAgdGhpcy53ZXQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN0ZXJlb0VmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ2hvcnVzIGlzIGEgc3RlcmVvIGNob3J1cyBlZmZlY3QgY29tcG9zZWQgb2Zcblx0XHQgKiAgICAgICAgIGEgbGVmdCBhbmQgcmlnaHQgZGVsYXkgd2l0aCBhIFRvbmUuTEZPIGFwcGxpZWQgdG8gdGhlIGRlbGF5VGltZSBvZiBlYWNoIGNoYW5uZWwuXG5cdFx0ICogICAgICAgICBJbnNwaXJhdGlvbiBmcm9tIFtUdW5hLmpzXShodHRwczovL2dpdGh1Yi5jb20vRGluYWhtb2UvdHVuYS9ibG9iL21hc3Rlci90dW5hLmpzKS5cblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBvbiB0aGUgY2hvcnVzIGVmZmVjdCBvbiBbU291bmRPblNvdW5kXShodHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL2p1bjA0L2FydGljbGVzL3N5bnRoc2VjcmV0cy5odG0pLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICpcdEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSBvZiB0aGUgTEZPLlxuXHRcdCAqXHRAcGFyYW0ge01pbGxpc2Vjb25kc30gW2RlbGF5VGltZV0gVGhlIGRlbGF5IG9mIHRoZSBjaG9ydXMgZWZmZWN0IGluIG1zLlxuXHRcdCAqXHRAcGFyYW0ge05vcm1hbFJhbmdlfSBbZGVwdGhdIFRoZSBkZXB0aCBvZiB0aGUgY2hvcnVzLlxuXHRcdCAqXHRAZXhhbXBsZVxuXHRcdCAqIHZhciBjaG9ydXMgPSBuZXcgVG9uZS5DaG9ydXMoNCwgMi41LCAwLjUpO1xuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLlBvbHlTeW50aCg0LCBUb25lLk1vbm9TeW50aCkuY29ubmVjdChjaG9ydXMpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkMzXCIsXCJFM1wiLFwiRzNcIl0sIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkNob3J1cyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuQ2hvcnVzKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZXB0aCBvZiB0aGUgY2hvcnVzXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVwdGggPSBvcHRpb25zLmRlcHRoO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheVRpbWVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheVRpbWUgPSBvcHRpb25zLmRlbGF5VGltZSAvIDEwMDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBjb250cm9scyB0aGUgZGVsYXlUaW1lXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9MID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDFcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhbm90aGVyIExGTyBmb3IgdGhlIHJpZ2h0IHNpZGUgd2l0aCBhIDE4MCBkZWdyZWUgcGhhc2UgZGlmZlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICAgICAncGhhc2UnOiAxODBcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBkZWxheSBmb3IgbGVmdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVMID0gbmV3IFRvbmUuRGVsYXkoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBkZWxheSBmb3IgcmlnaHRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlUiA9IG5ldyBUb25lLkRlbGF5KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZnJlcXVlbmN5IG9mIHRoZSBMRk8gd2hpY2ggbW9kdWxhdGVzIHRoZSBkZWxheVRpbWUuXG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm9MLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbih0aGlzLl9kZWxheU5vZGVMLCB0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4odGhpcy5fZGVsYXlOb2RlUiwgdGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAvL2FuZCBwYXNzIHRocm91Z2ggdG8gbWFrZSB0aGUgZGV0dW5lIGFwcGFyZW50XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgLy9sZm8gc2V0dXBcblx0ICAgICAgICB0aGlzLl9sZm9MLmNvbm5lY3QodGhpcy5fZGVsYXlOb2RlTC5kZWxheVRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuY29ubmVjdCh0aGlzLl9kZWxheU5vZGVSLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgbGZvXG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdGFydCgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RhcnQoKTtcblx0ICAgICAgICAvL2hhdmUgb25lIExGTyBmcmVxdWVuY3kgY29udHJvbCB0aGUgb3RoZXJcblx0ICAgICAgICB0aGlzLl9sZm9MLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2xmb1IuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3NldCB0aGUgaW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fZGVwdGg7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kudmFsdWUgPSBvcHRpb25zLmZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydmcmVxdWVuY3knXSk7XG5cdCAgICAgICAgdGhpcy5zcHJlYWQgPSBvcHRpb25zLnNwcmVhZDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNob3J1cywgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hvcnVzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxLjUsXG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDMuNSxcblx0ICAgICAgICAnZGVwdGgnOiAwLjcsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ3NwcmVhZCc6IDE4MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZXB0aCBvZiB0aGUgZWZmZWN0LiBBIGRlcHRoIG9mIDEgbWFrZXMgdGhlIGRlbGF5VGltZVxuXHRcdCAqIG1vZHVsYXRlIGJldHdlZW4gMCBhbmQgMipkZWxheVRpbWUgKGNlbnRlcmVkIGFyb3VuZCB0aGUgZGVsYXlUaW1lKS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBuYW1lIGRlcHRoXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAnZGVwdGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXB0aDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGRlcHRoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlcHRoID0gZGVwdGg7XG5cdCAgICAgICAgICAgIHZhciBkZXZpYXRpb24gPSB0aGlzLl9kZWxheVRpbWUgKiBkZXB0aDtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5taW4gPSBNYXRoLm1heCh0aGlzLl9kZWxheVRpbWUgLSBkZXZpYXRpb24sIDApO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1heCA9IHRoaXMuX2RlbGF5VGltZSArIGRldmlhdGlvbjtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5taW4gPSBNYXRoLm1heCh0aGlzLl9kZWxheVRpbWUgLSBkZXZpYXRpb24sIDApO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1heCA9IHRoaXMuX2RlbGF5VGltZSArIGRldmlhdGlvbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWxheVRpbWUgaW4gbWlsbGlzZWNvbmRzIG9mIHRoZSBjaG9ydXMuIEEgbGFyZ2VyIGRlbGF5VGltZVxuXHRcdCAqIHdpbGwgZ2l2ZSBhIG1vcmUgcHJvbm91bmNlZCBlZmZlY3QuIE5vbWluYWwgcmFuZ2UgYSBkZWxheVRpbWVcblx0XHQgKiBpcyBiZXR3ZWVuIDIgYW5kIDIwbXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hvcnVzI1xuXHRcdCAqIEB0eXBlIHtNaWxsaXNlY29uZHN9XG5cdFx0ICogQG5hbWUgZGVsYXlUaW1lXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAnZGVsYXlUaW1lJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVsYXlUaW1lICogMTAwMDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGRlbGF5VGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZWxheVRpbWUgPSBkZWxheVRpbWUgLyAxMDAwO1xuXHQgICAgICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fZGVwdGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3NjaWxsYXRvciB0eXBlIG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hvcnVzI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hvcnVzLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9MLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBBbW91bnQgb2Ygc3RlcmVvIHNwcmVhZC4gV2hlbiBzZXQgdG8gMCwgYm90aCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBjZW50cmFsbHkuXG5cdFx0ICogV2hlbiBzZXQgdG8gMTgwLCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBoYXJkIGxlZnQgYW5kIHJpZ2h0IHJlc3BlY3RpdmVseS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvUi5waGFzZSAtIHRoaXMuX2xmb0wucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5waGFzZSA9IDkwIC0gc3ByZWFkIC8gMjtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5waGFzZSA9IHNwcmVhZCAvIDIgKyA5MDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2hvcnVzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNob3J1cy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZUwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZUwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZVIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZVIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmcmVxdWVuY3knKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ2hvcnVzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuQ29udm9sdmVyIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIE5hdGl2ZSBXZWIgQXVkaW9cblx0XHQgKiAgICAgICAgICBbQ29udm9sdmVyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtY29udm9sdmVybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICAgICAgICAgIENvbnZvbHV0aW9uIGlzIHVzZWZ1bCBmb3IgcmV2ZXJiIGFuZCBmaWx0ZXIgZW11bGF0aW9uLiBSZWFkIG1vcmUgYWJvdXQgY29udm9sdXRpb24gcmV2ZXJiIG9uXG5cdFx0ICogICAgICAgICAgW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29udm9sdXRpb25fcmV2ZXJiKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ3xUb25lLkJ1ZmZlcnxPYmplY3R9IFt1cmxdIFRoZSBVUkwgb2YgdGhlIGltcHVsc2UgcmVzcG9uc2Ugb3IgdGhlIFRvbmUuQnVmZmVyXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlhbmluZyB0aGUgaW1wdWxzZSByZXNwb25zZS5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pbml0aWFsaXppbmcgdGhlIGNvbnZvbHZlciB3aXRoIGFuIGltcHVsc2UgcmVzcG9uc2Vcblx0XHQgKiB2YXIgY29udm9sdmVyID0gbmV3IFRvbmUuQ29udm9sdmVyKFwiLi9wYXRoL3RvL2lyLndhdlwiKS50b01hc3RlcigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICBdLCBUb25lLkNvbnZvbHZlcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb252b2x2ZXIgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtDb252b2x2ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ29udm9sdmVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbnZvbHV0aW9uIGJ1ZmZlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKG9wdGlvbnMudXJsLCBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnZvbHZlci5idWZmZXIgPSBidWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgICAgIG9wdGlvbnMub25sb2FkKCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fY29udm9sdmVyKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNvbnZvbHZlciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIuZGVmYXVsdHMgPSB7ICdvbmxvYWQnOiBUb25lLm5vT3AgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY29udm9sdmVyJ3MgYnVmZmVyXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnZvbHZlciNcblx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyfVxuXHRcdCAqICBAbmFtZSBidWZmZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNvbnZvbHZlci5wcm90b3R5cGUsICdidWZmZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChidWZmZXIpO1xuXHQgICAgICAgICAgICB0aGlzLl9jb252b2x2ZXIuYnVmZmVyID0gdGhpcy5fYnVmZmVyLmdldCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIExvYWQgYW4gaW1wdWxzZSByZXNwb25zZSB1cmwgYXMgYW4gYXVkaW8gYnVmZmVyLlxuXHRcdCAqICBEZWNvZGVzIHRoZSBhdWRpbyBhc3luY2hyb25vdXNseSBhbmQgaW52b2tlc1xuXHRcdCAqICB0aGUgY2FsbGJhY2sgb25jZSB0aGUgYXVkaW8gYnVmZmVyIGxvYWRzLlxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGJ1ZmZlciB0byBsb2FkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGZpbGV0eXBlIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICBicm93c2VyLlxuXHRcdCAqICBAcGFyYW0gIHtmdW5jdGlvbj19IGNhbGxiYWNrXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubG9hZCh1cmwsIGZ1bmN0aW9uIChidWZmKSB7XG5cdCAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gYnVmZjtcblx0ICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNvbnZvbHZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNvbnZvbHZlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRGlzdG9ydGlvbiBpcyBhIHNpbXBsZSBkaXN0b3J0aW9uIGVmZmVjdCB1c2luZyBUb25lLldhdmVTaGFwZXIuXG5cdFx0ICogICAgICAgICBBbGdvcml0aG0gZnJvbSBbYSBzdGFja292ZXJmbG93IGFuc3dlcl0oaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjIzMTM0MDgpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfE9iamVjdH0gW2Rpc3RvcnRpb25dIFRoZSBhbW91bnQgb2YgZGlzdG9ydGlvbiAobm9taW5hbCByYW5nZSBvZiAwLTEpXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGRpc3QgPSBuZXcgVG9uZS5EaXN0b3J0aW9uKDAuOCkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgZm0gPSBuZXcgVG9uZS5TaW1wbGVGTSgpLmNvbm5lY3QoZGlzdCk7XG5cdFx0ICogLy90aGlzIHNvdW5kcyBnb29kIG9uIGJhc3Mgbm90ZXNcblx0XHQgKiBmbS50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkExXCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkRpc3RvcnRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydkaXN0b3J0aW9uJ10sIFRvbmUuRGlzdG9ydGlvbik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKDQwOTYpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogaG9sZHMgdGhlIGRpc3RvcnRpb24gYW1vdW50XG5cdFx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Rpc3RvcnRpb24gPSBvcHRpb25zLmRpc3RvcnRpb247XG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX3NoYXBlcik7XG5cdCAgICAgICAgdGhpcy5kaXN0b3J0aW9uID0gb3B0aW9ucy5kaXN0b3J0aW9uO1xuXHQgICAgICAgIHRoaXMub3ZlcnNhbXBsZSA9IG9wdGlvbnMub3ZlcnNhbXBsZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkRpc3RvcnRpb24sIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EaXN0b3J0aW9uLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkaXN0b3J0aW9uJzogMC40LFxuXHQgICAgICAgICdvdmVyc2FtcGxlJzogJ25vbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGFtb3VudCBvZiBkaXN0b3J0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkRpc3RvcnRpb24jXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBuYW1lIGRpc3RvcnRpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkRpc3RvcnRpb24ucHJvdG90eXBlLCAnZGlzdG9ydGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3RvcnRpb247XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhbW91bnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGlzdG9ydGlvbiA9IGFtb3VudDtcblx0ICAgICAgICAgICAgdmFyIGsgPSBhbW91bnQgKiAxMDA7XG5cdCAgICAgICAgICAgIHZhciBkZWcgPSBNYXRoLlBJIC8gMTgwO1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIuc2V0TWFwKGZ1bmN0aW9uICh4KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoeCkgPCAwLjAwMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vc2hvdWxkIG91dHB1dCAwIHdoZW4gaW5wdXQgaXMgMFxuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDMgKyBrKSAqIHggKiAyMCAqIGRlZyAvIChNYXRoLlBJICsgayAqIE1hdGguYWJzKHgpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3ZlcnNhbXBsaW5nIG9mIHRoZSBlZmZlY3QuIENhbiBlaXRoZXIgYmUgXCJub25lXCIsIFwiMnhcIiBvciBcIjR4XCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRGlzdG9ydGlvbiNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIG92ZXJzYW1wbGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkRpc3RvcnRpb24ucHJvdG90eXBlLCAnb3ZlcnNhbXBsZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3ZlcnNhbXBsaW5nKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlID0gb3ZlcnNhbXBsaW5nO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRGlzdG9ydGlvbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EaXN0b3J0aW9uLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkRpc3RvcnRpb247XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogXHRAY2xhc3MgIFRvbmUuRmVlZGJhY2tFZmZlY3QgcHJvdmlkZXMgYSBsb29wIGJldHdlZW4gYW4gXG5cdFx0ICogXHQgICAgICAgIGF1ZGlvIHNvdXJjZSBhbmQgaXRzIG93biBvdXRwdXQuIFRoaXMgaXMgYSBiYXNlLWNsYXNzXG5cdFx0ICogXHQgICAgICAgIGZvciBmZWVkYmFjayBlZmZlY3RzLiBcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW2ZlZWRiYWNrXSBUaGUgaW5pdGlhbCBmZWVkYmFjayB2YWx1ZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmZWVkYmFjayddLCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBnYWluIHdoaWNoIGNvbnRyb2xzIHRoZSBmZWVkYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5mZWVkYmFjaywgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHNpZ25hbCB3aGljaCBpcyBmZWQgYmFjayBpbnRvIHRoZSBlZmZlY3QgaW5wdXQuIFxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gdGhpcy5fZmVlZGJhY2tHYWluLmdhaW47XG5cdCAgICAgICAgLy90aGUgZmVlZGJhY2sgbG9vcFxuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuLmNoYWluKHRoaXMuX2ZlZWRiYWNrR2FpbiwgdGhpcy5lZmZlY3RTZW5kKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmVlZGJhY2tFZmZlY3QsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRWZmZWN0LmRlZmF1bHRzID0geyAnZmVlZGJhY2snOiAwLjEyNSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRmVlZGJhY2tFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GZWVkYmFja0VmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkZlZWRiYWNrRGVsYXkgaXMgYSBEZWxheU5vZGUgaW4gd2hpY2ggcGFydCBvZiBvdXRwdXRcblx0XHQgKiAgICAgICAgICBzaWduYWwgaXMgZmVkIGJhY2sgaW50byB0aGUgZGVsYXkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkZlZWRiYWNrRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgYXBwbGllZCB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gZmVlZGJhY2sgVGhlIGFtb3VudCBvZiB0aGUgZWZmZWN0ZWQgc2lnbmFsIHdoaWNoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZmVkIGJhY2sgdGhyb3VnaCB0aGUgZGVsYXkuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZlZWRiYWNrRGVsYXkgPSBuZXcgVG9uZS5GZWVkYmFja0RlbGF5KFwiOG5cIiwgMC41KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciB0b20gPSBuZXcgVG9uZS5EcnVtU3ludGgoe1xuXHRcdCAqIFx0XCJvY3RhdmVzXCIgOiA0LFxuXHRcdCAqIFx0XCJwaXRjaERlY2F5XCIgOiAwLjFcblx0XHQgKiB9KS5jb25uZWN0KGZlZWRiYWNrRGVsYXkpO1xuXHRcdCAqIHRvbS50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkEyXCIsXCIzMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRGVsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ2ZlZWRiYWNrJ1xuXHQgICAgICAgIF0sIFRvbmUuRmVlZGJhY2tEZWxheSk7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG5ldyBUb25lLkRlbGF5KG9wdGlvbnMuZGVsYXlUaW1lLCBvcHRpb25zLm1heERlbGF5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXlUaW1lIG9mIHRoZSBEZWxheU5vZGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9kZWxheU5vZGUuZGVsYXlUaW1lO1xuXHQgICAgICAgIC8vIGNvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fZGVsYXlOb2RlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2RlbGF5VGltZSddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZlZWRiYWNrRGVsYXksIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tEZWxheS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4yNSxcblx0ICAgICAgICAnbWF4RGVsYXknOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZlZWRiYWNrRGVsYXl9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tEZWxheS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GZWVkYmFja0RlbGF5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBhbiBhcnJheSBvZiBjb21iIGZpbHRlciBkZWxheSB2YWx1ZXMgZnJvbSBGcmVldmVyYiBpbXBsZW1lbnRhdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBjb21iRmlsdGVyVHVuaW5ncyA9IFtcblx0ICAgICAgICAxNTU3IC8gNDQxMDAsXG5cdCAgICAgICAgMTYxNyAvIDQ0MTAwLFxuXHQgICAgICAgIDE0OTEgLyA0NDEwMCxcblx0ICAgICAgICAxNDIyIC8gNDQxMDAsXG5cdCAgICAgICAgMTI3NyAvIDQ0MTAwLFxuXHQgICAgICAgIDEzNTYgLyA0NDEwMCxcblx0ICAgICAgICAxMTg4IC8gNDQxMDAsXG5cdCAgICAgICAgMTExNiAvIDQ0MTAwXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIGFuIGFycmF5IG9mIGFsbHBhc3MgZmlsdGVyIGZyZXF1ZW5jeSB2YWx1ZXMgZnJvbSBGcmVldmVyYiBpbXBsZW1lbnRhdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMgPSBbXG5cdCAgICAgICAgMjI1LFxuXHQgICAgICAgIDU1Nixcblx0ICAgICAgICA0NDEsXG5cdCAgICAgICAgMzQxXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZyZWV2ZXJiIGlzIGEgcmV2ZXJiIGJhc2VkIG9uIFtGcmVldmVyYl0oaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvfmpvcy9wYXNwL0ZyZWV2ZXJiLmh0bWwpLlxuXHRcdCAqICAgICAgICAgUmVhZCBtb3JlIG9uIHJldmVyYiBvbiBbU291bmQgT24gU291bmRdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwNDA4MzkwMi9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb206ODAvc29zL2ZlYjAxL2FydGljbGVzL3N5bnRoc2VjcmV0cy5hc3ApLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbcm9vbVNpemVdIENvcnJlbGF0ZWQgdG8gdGhlIGRlY2F5IHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZGFtcGVuaW5nXSBUaGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiBhIGxvd3Bhc3MgZmlsdGVyIGFzIHBhcnRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZXZlcmIuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZyZWV2ZXJiID0gbmV3IFRvbmUuRnJlZXZlcmIoKS50b01hc3RlcigpO1xuXHRcdCAqIGZyZWV2ZXJiLmRhbXBlbmluZy52YWx1ZSA9IDEwMDA7XG5cdFx0ICogLy9yb3V0aW5nIHN5bnRoIHRocm91Z2ggdGhlIHJldmVyYlxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkFNU3ludGgoKS5jb25uZWN0KGZyZWV2ZXJiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlZXZlcmIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncm9vbVNpemUnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0sIFRvbmUuRnJlZXZlcmIpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJvb21TaXplIHZhbHVlIGJldHdlZW4uIEEgbGFyZ2VyIHJvb21TaXplXG5cdFx0XHQgKiAgd2lsbCByZXN1bHQgaW4gYSBsb25nZXIgZGVjYXkuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5yb29tU2l6ZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGRhbXBlbmluZyBvZiB0aGUgcmV2ZXJiZXJhbnQgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kYW1wZW5pbmcsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBjb21iIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbWJGaWx0ZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFsbHBhc3MgZmlsdGVycyBvbiB0aGUgbGVmdFxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFsbHBhc3MgZmlsdGVycyBvbiB0aGUgcmlnaHRcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUiA9IFtdO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSByaWdodFxuXHQgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzLmxlbmd0aDsgbCsrKSB7XG5cdCAgICAgICAgICAgIHZhciBhbGxwYXNzTCA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgYWxscGFzc0wudHlwZSA9ICdhbGxwYXNzJztcblx0ICAgICAgICAgICAgYWxscGFzc0wuZnJlcXVlbmN5LnZhbHVlID0gYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzW2xdO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0wucHVzaChhbGxwYXNzTCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vbWFrZSB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSBsZWZ0XG5cdCAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMubGVuZ3RoOyByKyspIHtcblx0ICAgICAgICAgICAgdmFyIGFsbHBhc3NSID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBhbGxwYXNzUi50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBhbGxwYXNzUi5mcmVxdWVuY3kudmFsdWUgPSBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXNbcl07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUi5wdXNoKGFsbHBhc3NSKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9tYWtlIHRoZSBjb21iIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNvbWJGaWx0ZXJUdW5pbmdzLmxlbmd0aDsgYysrKSB7XG5cdCAgICAgICAgICAgIHZhciBsZnBmID0gbmV3IFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIoY29tYkZpbHRlclR1bmluZ3NbY10pO1xuXHQgICAgICAgICAgICBpZiAoYyA8IGNvbWJGaWx0ZXJUdW5pbmdzLmxlbmd0aCAvIDIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY2hhaW4obGZwZiwgdGhpcy5fYWxscGFzc0ZpbHRlcnNMWzBdKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4obGZwZiwgdGhpcy5fYWxscGFzc0ZpbHRlcnNSWzBdKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnJvb21TaXplLmNvbm5lY3QobGZwZi5yZXNvbmFuY2UpO1xuXHQgICAgICAgICAgICB0aGlzLmRhbXBlbmluZy5jb25uZWN0KGxmcGYuZGFtcGVuaW5nKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29tYkZpbHRlcnMucHVzaChsZnBmKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jaGFpbiB0aGUgYWxscGFzcyBmaWx0ZXJzIHRvZ2V0ZWhyXG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTCk7XG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUik7XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMW3RoaXMuX2FsbHBhc3NGaWx0ZXJzTC5sZW5ndGggLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSW3RoaXMuX2FsbHBhc3NGaWx0ZXJzUi5sZW5ndGggLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncm9vbVNpemUnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRnJlZXZlcmIsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZWV2ZXJiLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdyb29tU2l6ZSc6IDAuNyxcblx0ICAgICAgICAnZGFtcGVuaW5nJzogMzAwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRnJlZXZlcmJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlZXZlcmIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBhbCA9IDA7IGFsIDwgdGhpcy5fYWxscGFzc0ZpbHRlcnNMLmxlbmd0aDsgYWwrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbYWxdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMW2FsXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTCA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgYXIgPSAwOyBhciA8IHRoaXMuX2FsbHBhc3NGaWx0ZXJzUi5sZW5ndGg7IGFyKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSW2FyXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUlthcl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1IgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGNmID0gMDsgY2YgPCB0aGlzLl9jb21iRmlsdGVycy5sZW5ndGg7IGNmKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fY29tYkZpbHRlcnNbY2ZdLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29tYkZpbHRlcnNbY2ZdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY29tYkZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3Jvb21TaXplJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZyZWV2ZXJiO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBhbiBhcnJheSBvZiB0aGUgY29tYiBmaWx0ZXIgZGVsYXkgdGltZSB2YWx1ZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgY29tYkZpbHRlckRlbGF5VGltZXMgPSBbXG5cdCAgICAgICAgMTY4NyAvIDI1MDAwLFxuXHQgICAgICAgIDE2MDEgLyAyNTAwMCxcblx0ICAgICAgICAyMDUzIC8gMjUwMDAsXG5cdCAgICAgICAgMjI1MSAvIDI1MDAwXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSByZXNvbmFuY2VzIG9mIGVhY2ggb2YgdGhlIGNvbWIgZmlsdGVyc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBjb21iRmlsdGVyUmVzb25hbmNlcyA9IFtcblx0ICAgICAgICAwLjc3Myxcblx0ICAgICAgICAwLjgwMixcblx0ICAgICAgICAwLjc1Myxcblx0ICAgICAgICAwLjczM1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgYWxscGFzcyBmaWx0ZXIgZnJlcXVlbmNpZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgYWxscGFzc0ZpbHRlckZyZXFzID0gW1xuXHQgICAgICAgIDM0Nyxcblx0ICAgICAgICAxMTMsXG5cdCAgICAgICAgMzdcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuSkNSZXZlcmIgaXMgYSBzaW1wbGUgW1NjaHJvZWRlciBSZXZlcmJlcmF0b3JdKGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L35qb3MvcGFzcC9TY2hyb2VkZXJfUmV2ZXJiZXJhdG9ycy5odG1sKVxuXHRcdCAqICAgICAgICAgdHVuZWQgYnkgSm9obiBDaG93bmluZyBpbiAxOTcwLlxuXHRcdCAqICAgICAgICAgSXQgaXMgbWFkZSB1cCBvZiB0aHJlZSBhbGxwYXNzIGZpbHRlcnMgYW5kIGZvdXIgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIuXG5cdFx0ICpcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3Jvb21TaXplXSBDb29yZWxhdGVzIHRvIHRoZSBkZWNheSB0aW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciByZXZlcmIgPSBuZXcgVG9uZS5KQ1JldmVyYigwLjQpLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHRcdCAqIHZhciBkZWxheSA9IG5ldyBUb25lLkZlZWRiYWNrRGVsYXkoMC41KTtcblx0XHQgKiAvL2Nvbm5lY3RpbmcgdGhlIHN5bnRoIHRvIHJldmVyYiB0aHJvdWdoIGRlbGF5XG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuRHVvU3ludGgoKS5jaGFpbihkZWxheSwgcmV2ZXJiKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkE0XCIsXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuSkNSZXZlcmIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydyb29tU2l6ZSddLCBUb25lLkpDUmV2ZXJiKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJvb20gc2l6ZSBjb250cm9sIHZhbHVlcyBiZXR3ZWVuIFswLDFdXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5yb29tU2l6ZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgcm9vbSBzaXplXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlUm9vbVNpemUgPSBuZXcgVG9uZS5TY2FsZSgtMC43MzMsIDAuMTk3KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhIHNlcmllcyBvZiBhbGxwYXNzIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcGFyYWxsZWwgZmVlZGJhY2sgY29tYiBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzID0gW107XG5cdCAgICAgICAgLy9tYWtlIHRoZSBhbGxwYXNzIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBhZiA9IDA7IGFmIDwgYWxscGFzc0ZpbHRlckZyZXFzLmxlbmd0aDsgYWYrKykge1xuXHQgICAgICAgICAgICB2YXIgYWxscGFzcyA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgYWxscGFzcy50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBhbGxwYXNzLmZyZXF1ZW5jeS52YWx1ZSA9IGFsbHBhc3NGaWx0ZXJGcmVxc1thZl07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzLnB1c2goYWxscGFzcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYW5kIHRoZSBjb21iIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBjZiA9IDA7IGNmIDwgY29tYkZpbHRlckRlbGF5VGltZXMubGVuZ3RoOyBjZisrKSB7XG5cdCAgICAgICAgICAgIHZhciBmYmNmID0gbmV3IFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyKGNvbWJGaWx0ZXJEZWxheVRpbWVzW2NmXSwgMC4xKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZS5jb25uZWN0KGZiY2YucmVzb25hbmNlKTtcblx0ICAgICAgICAgICAgZmJjZi5yZXNvbmFuY2UudmFsdWUgPSBjb21iRmlsdGVyUmVzb25hbmNlc1tjZl07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzW3RoaXMuX2FsbHBhc3NGaWx0ZXJzLmxlbmd0aCAtIDFdLmNvbm5lY3QoZmJjZik7XG5cdCAgICAgICAgICAgIGlmIChjZiA8IGNvbWJGaWx0ZXJEZWxheVRpbWVzLmxlbmd0aCAvIDIpIHtcblx0ICAgICAgICAgICAgICAgIGZiY2YuY29ubmVjdCh0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZmJjZi5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycy5wdXNoKGZiY2YpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NoYWluIHRoZSBhbGxwYXNzIGZpbHRlcnMgdG9nZXRoZXJcblx0ICAgICAgICB0aGlzLnJvb21TaXplLmNvbm5lY3QodGhpcy5fc2NhbGVSb29tU2l6ZSk7XG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNvbm5lY3QodGhpcy5fYWxscGFzc0ZpbHRlcnNbMF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY29ubmVjdCh0aGlzLl9hbGxwYXNzRmlsdGVyc1swXSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydyb29tU2l6ZSddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkpDUmV2ZXJiLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkpDUmV2ZXJiLmRlZmF1bHRzID0geyAncm9vbVNpemUnOiAwLjUgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSkNSZXZlcmJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSkNSZXZlcmIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBhcGYgPSAwOyBhcGYgPCB0aGlzLl9hbGxwYXNzRmlsdGVycy5sZW5ndGg7IGFwZisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzW2FwZl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1thcGZdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGZiY2YgPSAwOyBmYmNmIDwgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycy5sZW5ndGg7IGZiY2YrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzW2ZiY2ZdLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVyc1tmYmNmXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsncm9vbVNpemUnXSk7XG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuSkNSZXZlcmI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBNaWQvU2lkZSBwcm9jZXNzaW5nIHNlcGFyYXRlcyB0aGUgdGhlICdtaWQnIHNpZ25hbFxuXHRcdCAqICAgICAgICAgKHdoaWNoIGNvbWVzIG91dCBvZiBib3RoIHRoZSBsZWZ0IGFuZCB0aGUgcmlnaHQgY2hhbm5lbClcblx0XHQgKiAgICAgICAgIGFuZCB0aGUgJ3NpZGUnICh3aGljaCBvbmx5IGNvbWVzIG91dCBvZiB0aGUgdGhlIHNpZGUgY2hhbm5lbHMpXG5cdFx0ICogICAgICAgICBhbmQgZWZmZWN0cyB0aGVtIHNlcGFyYXRlbHkgYmVmb3JlIGJlaW5nIHJlY29tYmluZWQuXG5cdFx0ICogICAgICAgICBBcHBsaWVzIGEgTWlkL1NpZGUgc2VwZXJhdGlvbiBhbmQgcmVjb21iaW5hdGlvbi5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmb3VuZCBpbiBba3ZyYXVkaW8gZm9ydW1zXShodHRwOi8vd3d3Lmt2cmF1ZGlvLmNvbS9mb3J1bS92aWV3dG9waWMucGhwP3Q9MjEyNTg3KS5cblx0XHQgKiAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICBUaGlzIGlzIGEgYmFzZS1jbGFzcyBmb3IgTWlkL1NpZGUgRWZmZWN0cy5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9zaWRlIHNwbGl0XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVTcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gbmV3IFRvbmUuTWlkU2lkZVNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9zaWRlIG1lcmdlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVNZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gbmV3IFRvbmUuTWlkU2lkZU1lcmdlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBzZW5kLiBDb25uZWN0IHRvIG1pZCBwcm9jZXNzaW5nXG5cdFx0XHQgKiAgQHR5cGUge1RvbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkU2VuZCA9IHRoaXMuX21pZFNpZGVTcGxpdC5taWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZGUgc2VuZC4gQ29ubmVjdCB0byBzaWRlIHByb2Nlc3Npbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlU2VuZCA9IHRoaXMuX21pZFNpZGVTcGxpdC5zaWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgcmV0dXJuIGNvbm5lY3Rpb25cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkUmV0dXJuID0gdGhpcy5fbWlkU2lkZU1lcmdlLm1pZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSByZXR1cm4gY29ubmVjdGlvblxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlUmV0dXJuID0gdGhpcy5fbWlkU2lkZU1lcmdlLnNpZGU7XG5cdCAgICAgICAgLy90aGUgY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY29ubmVjdCh0aGlzLl9taWRTaWRlU3BsaXQpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVFZmZlY3QsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZUVmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZFNlbmQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZVNlbmQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkUmV0dXJuID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGVSZXR1cm4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBoYXNlciBpcyBhIHBoYXNlciBlZmZlY3QuIFBoYXNlcnMgd29yayBieSBjaGFuZ2luZyB0aGUgcGhhc2Vcblx0XHQgKiAgICAgICAgIG9mIGRpZmZlcmVudCBmcmVxdWVuY3kgY29tcG9uZW50cyBvZiBhbiBpbmNvbWluZyBzaWduYWwuIFJlYWQgbW9yZSBvblxuXHRcdCAqICAgICAgICAgW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUGhhc2VyXyhlZmZlY3QpKS5cblx0XHQgKiAgICAgICAgIEluc3BpcmF0aW9uIGZvciB0aGlzIHBoYXNlciBjb21lcyBmcm9tIFtUdW5hLmpzXShodHRwczovL2dpdGh1Yi5jb20vRGluYWhtb2UvdHVuYS8pLlxuXHRcdCAqXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIHNwZWVkIG9mIHRoZSBwaGFzaW5nLlxuXHRcdCAqXHRAcGFyYW0ge251bWJlcn0gW29jdGF2ZXNdIFRoZSBvY3RhdmVzIG9mIHRoZSBlZmZlY3QuXG5cdFx0ICpcdEBwYXJhbSB7RnJlcXVlbmN5fSBbYmFzZUZyZXF1ZW5jeV0gVGhlIGJhc2UgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXJzLlxuXHRcdCAqXHRAZXhhbXBsZVxuXHRcdCAqIHZhciBwaGFzZXIgPSBuZXcgVG9uZS5QaGFzZXIoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IDE1LFxuXHRcdCAqIFx0XCJvY3RhdmVzXCIgOiA1LFxuXHRcdCAqIFx0XCJiYXNlRnJlcXVlbmN5XCIgOiAxMDAwXG5cdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5GTVN5bnRoKCkuY29ubmVjdChwaGFzZXIpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiRTNcIiwgXCIyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vc2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJyxcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5QaGFzZXIpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBjb250cm9scyB0aGUgZnJlcXVlbmN5IG9uIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBuZXcgVG9uZS5MRk8ob3B0aW9ucy5mcmVxdWVuY3ksIDAsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8gd2hpY2ggY29udHJvbHMgdGhlIGZyZXF1ZW5jeSBvbiB0aGUgcmlnaHQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG5ldyBUb25lLkxGTyhvcHRpb25zLmZyZXF1ZW5jeSwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5waGFzZSA9IDE4MDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYmFzZSBtb2R1bGF0aW9uIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG9jdGF2ZXMgb2YgdGhlIHBoYXNpbmdcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBxdWFsaXR5IGZhY3RvciBvZiB0aGUgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5RLCBUb25lLlR5cGUuUG9zaXRpdmUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhcnJheSBvZiBmaWx0ZXJzIGZvciB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzTCA9IHRoaXMuX21ha2VGaWx0ZXJzKG9wdGlvbnMuc3RhZ2VzLCB0aGlzLl9sZm9MLCB0aGlzLlEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhcnJheSBvZiBmaWx0ZXJzIGZvciB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzUiA9IHRoaXMuX21ha2VGaWx0ZXJzKG9wdGlvbnMuc3RhZ2VzLCB0aGlzLl9sZm9SLCB0aGlzLlEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIGZyZXF1ZW5jeSBvZiB0aGUgZWZmZWN0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmb0wuZnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LnZhbHVlID0gb3B0aW9ucy5mcmVxdWVuY3k7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZW0gdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNvbm5lY3QodGhpcy5fZmlsdGVyc0xbMF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY29ubmVjdCh0aGlzLl9maWx0ZXJzUlswXSk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc0xbb3B0aW9ucy5zdGFnZXMgLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc1Jbb3B0aW9ucy5zdGFnZXMgLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSBmcmVxdWVuY3kgd2l0aCBvbmUgTEZPXG5cdCAgICAgICAgdGhpcy5fbGZvTC5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9sZm9SLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIG9wdGlvbnNcblx0ICAgICAgICB0aGlzLmJhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGxmb1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3RhcnQoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN0YXJ0KCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QaGFzZXIsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0c1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtvYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBoYXNlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMC41LFxuXHQgICAgICAgICdvY3RhdmVzJzogMyxcblx0ICAgICAgICAnc3RhZ2VzJzogMTAsXG5cdCAgICAgICAgJ1EnOiAxMCxcblx0ICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDM1MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gc3RhZ2VzXG5cdFx0ICogIEByZXR1cm5zIHtBcnJheX0gdGhlIG51bWJlciBvZiBmaWx0ZXJzIGFsbCBjb25uZWN0ZWQgdG9nZXRoZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyLnByb3RvdHlwZS5fbWFrZUZpbHRlcnMgPSBmdW5jdGlvbiAoc3RhZ2VzLCBjb25uZWN0VG9GcmVxLCBRKSB7XG5cdCAgICAgICAgdmFyIGZpbHRlcnMgPSBuZXcgQXJyYXkoc3RhZ2VzKTtcblx0ICAgICAgICAvL21ha2UgYWxsIHRoZSBmaWx0ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFnZXM7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZmlsdGVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBmaWx0ZXIudHlwZSA9ICdhbGxwYXNzJztcblx0ICAgICAgICAgICAgUS5jb25uZWN0KGZpbHRlci5RKTtcblx0ICAgICAgICAgICAgY29ubmVjdFRvRnJlcS5jb25uZWN0KGZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICBmaWx0ZXJzW2ldID0gZmlsdGVyO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgZmlsdGVycyk7XG5cdCAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoZSBwaGFzZSBnb2VzIGFib3ZlXG5cdFx0ICogdGhlIGJhc2VGcmVxdWVuY3lcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaGFzZXIjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBoYXNlci5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdGF2ZXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdGF2ZXM7XG5cdCAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLl9iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgb2N0YXZlcyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wubWF4ID0gbWF4O1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1heCA9IG1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0aGUgYmFzZSBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlcnMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGhhc2VyI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGhhc2VyLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgICAgICB0aGlzLl9iYXNlRnJlcXVlbmN5ID0gZnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5taW4gPSBmcmVxO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1pbiA9IGZyZXE7XG5cdCAgICAgICAgICAgIHRoaXMub2N0YXZlcyA9IHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGhhc2VyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBoYXNlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuUS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9MLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9MID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9SLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlcnNMLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNMW2ldLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc0xbaV0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzTCA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl9maWx0ZXJzUi5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzUltqXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNSW2pdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc1IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QaGFzZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBKdXN0IGxpa2UgYSBzdGVyZW8gZmVlZGJhY2sgZWZmZWN0LCBidXQgdGhlIGZlZWRiYWNrIGlzIHJvdXRlZCBmcm9tIGxlZnQgdG8gcmlnaHRcblx0XHQgKiAgICAgICAgIGFuZCByaWdodCB0byBsZWZ0IGluc3RlYWQgb2Ygb24gdGhlIHNhbWUgY2hhbm5lbC5cblx0XHQgKlxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmZWVkYmFjayddLCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZmVlZGJhY2sgZnJvbSB0aGUgb3V0cHV0XG5cdFx0XHQgKiAgYmFjayBpbnRvIHRoZSBpbnB1dCBvZiB0aGUgZWZmZWN0IChyb3V0ZWRcblx0XHRcdCAqICBhY3Jvc3MgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMpLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZmVlZGJhY2ssIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxlZnQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcmlnaHQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSTCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwuY2hhaW4odGhpcy5fZmVlZGJhY2tMUiwgdGhpcy5lZmZlY3RTZW5kUik7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SLmNoYWluKHRoaXMuX2ZlZWRiYWNrUkwsIHRoaXMuZWZmZWN0U2VuZEwpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZmFuKHRoaXMuX2ZlZWRiYWNrTFIuZ2FpbiwgdGhpcy5fZmVlZGJhY2tSTC5nYWluKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZmVlZGJhY2snXSk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSTCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGluZ1BvbmdEZWxheSBpcyBhIGZlZWRiYWNrIGRlbGF5IGVmZmVjdCB3aGVyZSB0aGUgZWNobyBpcyBoZWFyZFxuXHRcdCAqICAgICAgICAgIGZpcnN0IGluIG9uZSBjaGFubmVsIGFuZCBuZXh0IGluIHRoZSBvcHBvc2l0ZSBjaGFubmVsLiBJbiBhIHN0ZXJlb1xuXHRcdCAqICAgICAgICAgIHN5c3RlbSB0aGVzZSBhcmUgdGhlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzLlxuXHRcdCAqICAgICAgICAgIFBpbmdQb25nRGVsYXkgaW4gbW9yZSBzaW1wbGlmaWVkIHRlcm1zIGlzIHR3byBUb25lLkZlZWRiYWNrRGVsYXlzXG5cdFx0ICogICAgICAgICAgd2l0aCBpbmRlcGVuZGVudCBkZWxheSB2YWx1ZXMuIEVhY2ggZGVsYXkgaXMgcm91dGVkIHRvIG9uZSBjaGFubmVsXG5cdFx0ICogICAgICAgICAgKGxlZnQgb3IgcmlnaHQpLCBhbmQgdGhlIGNoYW5uZWwgdHJpZ2dlcmVkIHNlY29uZCB3aWxsIGFsd2F5c1xuXHRcdCAqICAgICAgICAgIHRyaWdnZXIgYXQgdGhlIHNhbWUgaW50ZXJ2YWwgYWZ0ZXIgdGhlIGZpcnN0LlxuXHRcdCAqXG5cdFx0ICogXHRAY29uc3RydWN0b3Jcblx0XHQgKiBcdEBleHRlbmRzIHtUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2RlbGF5VGltZV0gVGhlIGRlbGF5VGltZSBiZXR3ZWVuIGNvbnNlY3V0aXZlIGVjaG9zLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gZmVlZGJhY2sgVGhlIGFtb3VudCBvZiB0aGUgZWZmZWN0ZWQgc2lnbmFsIHdoaWNoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmZWQgYmFjayB0aHJvdWdoIHRoZSBkZWxheS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGluZ1BvbmcgPSBuZXcgVG9uZS5QaW5nUG9uZ0RlbGF5KFwiNG5cIiwgMC4yKS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBkcnVtID0gbmV3IFRvbmUuRHJ1bVN5bnRoKCkuY29ubmVjdChwaW5nUG9uZyk7XG5cdFx0ICogZHJ1bS50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiMzJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaW5nUG9uZ0RlbGF5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdmZWVkYmFjaydcblx0ICAgICAgICBdLCBUb25lLlBpbmdQb25nRGVsYXkpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGUgb24gdGhlIGxlZnQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZWZ0RGVsYXkgPSBuZXcgVG9uZS5EZWxheSgwLCBvcHRpb25zLm1heERlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGUgb24gdGhlIHJpZ2h0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmlnaHREZWxheSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcHJlZGVsYXkgb24gdGhlIHJpZ2h0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmlnaHRQcmVEZWxheSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgdGltZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRlbGF5VGltZSwgVG9uZS5UeXBlLlRpbWUpO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY2hhaW4odGhpcy5fbGVmdERlbGF5LCB0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4odGhpcy5fcmlnaHRQcmVEZWxheSwgdGhpcy5fcmlnaHREZWxheSwgdGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZS5mYW4odGhpcy5fbGVmdERlbGF5LmRlbGF5VGltZSwgdGhpcy5fcmlnaHREZWxheS5kZWxheVRpbWUsIHRoaXMuX3JpZ2h0UHJlRGVsYXkuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvL3JlYXJyYW5nZWQgdGhlIGZlZWRiYWNrIHRvIGJlIGFmdGVyIHRoZSByaWdodFByZURlbGF5XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUi5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUi5jb25uZWN0KHRoaXMuX3JpZ2h0RGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGluZ1BvbmdEZWxheSwgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGluZ1BvbmdEZWxheS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4yNSxcblx0ICAgICAgICAnbWF4RGVsYXlUaW1lJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGluZ1BvbmdEZWxheX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaW5nUG9uZ0RlbGF5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGVmdERlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0RGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0RGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0RGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0UHJlRGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0UHJlRGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGluZ1BvbmdEZWxheTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGl0Y2hTaGlmdCBkb2VzIG5lYXItcmVhbHRpbWUgcGl0Y2ggc2hpZnRpbmcgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgIFRoZSBlZmZlY3QgaXMgYWNoaWV2ZWQgYnkgc3BlZWRpbmcgdXAgb3Igc2xvd2luZyBkb3duIHRoZSBkZWxheVRpbWVcblx0XHQgKiAgICAgICAgIG9mIGEgRGVsYXlOb2RlIHVzaW5nIGEgc2F3dG9vdGggd2F2ZS5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmb3VuZCBpbiBbdGhpcyBwZGZdKGh0dHA6Ly9kc3AtYm9vay5uYXJvZC5ydS9zb3VuZHByb2MucGRmKS5cblx0XHQgKiAgICAgICAgIEFkZGl0aW9uYWwgcmVmZXJlbmNlIGJ5IFtNaWxsZXIgUHVja2V0XShodHRwOi8vbXNwLnVjc2QuZWR1L3RlY2huaXF1ZXMvdjAuMTEvYm9vay1odG1sL25vZGUxMTUuaHRtbCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRmVlZGJhY2tFZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7SW50ZXJ2YWw9fSBwaXRjaCBUaGUgaW50ZXJ2YWwgdG8gdHJhbnNwb3NlIHRoZSBpbmNvbWluZyBzaWduYWwgYnkuXG5cdFx0ICovXG5cdCAgICBUb25lLlBpdGNoU2hpZnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydwaXRjaCddLCBUb25lLlBpdGNoU2hpZnQpO1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGl0Y2ggc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFVzZXMgdHdvIERlbGF5Tm9kZXMgdG8gY292ZXIgdXAgdGhlIGp1bXAgaW5cblx0XHRcdCAqICB0aGUgc2F3dG9vdGggd2F2ZS5cblx0XHRcdCAqICBAdHlwZSAge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlBID0gbmV3IFRvbmUuRGVsYXkoMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpcnN0IExGTy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9BID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAwLjEsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ3Nhd3Rvb3RoJ1xuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5fZGVsYXlBLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNlY29uZCBEZWxheU5vZGVcblx0XHRcdCAqICBAdHlwZSAge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlCID0gbmV3IFRvbmUuRGVsYXkoMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpcnN0IExGTy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9CID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAwLjEsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ3Nhd3Rvb3RoJyxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogMTgwXG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9kZWxheUIuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBDcm9zc2ZhZGUgcXVpY2tseSBiZXR3ZWVuIHRoZSB0d28gZGVsYXkgbGluZXNcblx0XHRcdCAqICB0byBjb3ZlciB1cCB0aGUganVtcCBpbiB0aGUgc2F3dG9vdGggd2F2ZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Dcm9zc0ZhZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZSA9IG5ldyBUb25lLkNyb3NzRmFkZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIExGTyB3aGljaCBhbHRlcm5hdGVzIGJldHdlZW4gdGhlIHR3b1xuXHRcdFx0ICogIGRlbGF5IGxpbmVzIHRvIGNvdmVyIHVwIHRoZSBkaXNwYXJpdHkgaW4gdGhlXG5cdFx0XHQgKiAgc2F3dG9vdGggd2F2ZS5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8gPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ3RyaWFuZ2xlJyxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogOTBcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2Nyb3NzRmFkZS5mYWRlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0RlbGF5ID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZGVsYXkgb24gdGhlIGlucHV0IHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZmVlZGJhY2tEZWxheS5kZWxheVRpbWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2RlbGF5VGltZScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGQgdGhlIGN1cnJlbnQgcGl0Y2hcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9waXRjaCA9IG9wdGlvbnMucGl0Y2g7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZCB0aGUgY3VycmVudCB3aW5kb3dTaXplXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fd2luZG93U2l6ZSA9IG9wdGlvbnMud2luZG93U2l6ZTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIHR3byBkZWxheSBsaW5lcyB1cFxuXHQgICAgICAgIHRoaXMuX2RlbGF5QS5jb25uZWN0KHRoaXMuX2Nyb3NzRmFkZS5hKTtcblx0ICAgICAgICB0aGlzLl9kZWxheUIuY29ubmVjdCh0aGlzLl9jcm9zc0ZhZGUuYik7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kuZmFuKHRoaXMuX2xmb0EuZnJlcXVlbmN5LCB0aGlzLl9sZm9CLmZyZXF1ZW5jeSwgdGhpcy5fY3Jvc3NGYWRlTEZPLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9yb3V0ZSB0aGUgaW5wdXRcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuZmFuKHRoaXMuX2RlbGF5QSwgdGhpcy5fZGVsYXlCKTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGUuY2hhaW4odGhpcy5fZmVlZGJhY2tEZWxheSwgdGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIExGT3MgYXQgdGhlIHNhbWUgdGltZVxuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHRoaXMuX2xmb0Euc3RhcnQobm93KTtcblx0ICAgICAgICB0aGlzLl9sZm9CLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlTEZPLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVcblx0ICAgICAgICB0aGlzLndpbmRvd1NpemUgPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGl0Y2hTaGlmdCwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuUGl0Y2hTaGlmdC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGl0Y2gnOiAwLFxuXHQgICAgICAgICd3aW5kb3dTaXplJzogMC4xLFxuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLFxuXHQgICAgICAgICdmZWVkYmFjayc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXBpdGNoIHRoZSBpbmNvbWluZyBzaWduYWwgYnkgc29tZSBpbnRlcnZhbCAobWVhc3VyZWRcblx0XHQgKiBpbiBzZW1pLXRvbmVzKS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaXRjaFNoaWZ0I1xuXHRcdCAqIEB0eXBlIHtJbnRlcnZhbH1cblx0XHQgKiBAbmFtZSBwaXRjaFxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogcGl0Y2hTaGlmdC5waXRjaCA9IC0xMjsgLy9kb3duIG9uZSBvY3RhdmVcblx0XHQgKiBwaXRjaFNoaWZ0LnBpdGNoID0gNzsgLy91cCBhIGZpZnRoXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QaXRjaFNoaWZ0LnByb3RvdHlwZSwgJ3BpdGNoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGl0Y2g7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9waXRjaCA9IGludGVydmFsO1xuXHQgICAgICAgICAgICB2YXIgZmFjdG9yID0gMDtcblx0ICAgICAgICAgICAgaWYgKGludGVydmFsIDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQS5taW4gPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQS5tYXggPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQi5taW4gPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQi5tYXggPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgICAgICAgICAgZmFjdG9yID0gVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oaW50ZXJ2YWwgLSAxKSArIDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1pbiA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1heCA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1pbiA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1heCA9IDA7XG5cdCAgICAgICAgICAgICAgICBmYWN0b3IgPSBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhpbnRlcnZhbCkgLSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeS52YWx1ZSA9IGZhY3RvciAqICgxLjIgLyB0aGlzLl93aW5kb3dTaXplKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB3aW5kb3cgc2l6ZSBjb3JyZXNwb25kcyByb3VnaGx5IHRvIHRoZSBzYW1wbGUgbGVuZ3RoIGluIGEgbG9vcGluZyBzYW1wbGVyLlxuXHRcdCAqIFNtYWxsZXIgdmFsdWVzIGFyZSBkZXNpcmFibGUgZm9yIGEgbGVzcyBub3RpY2VhYmxlIGRlbGF5IHRpbWUgb2YgdGhlIHBpdGNoIHNoaWZ0ZWRcblx0XHQgKiBzaWduYWwsIGJ1dCBsYXJnZXIgdmFsdWVzIHdpbGwgcmVzdWx0IGluIHNtb290aGVyIHBpdGNoIHNoaWZ0aW5nIGZvciBsYXJnZXIgaW50ZXJ2YWxzLlxuXHRcdCAqIEEgbm9taW5hbCByYW5nZSBvZiAwLjAzIHRvIDAuMSBpcyByZWNvbW1lbmRlZC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaXRjaFNoaWZ0I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHdpbmRvd1NpemVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHBpdGNoU2hpZnQud2luZG93U2l6ZSA9IDAuMTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBpdGNoU2hpZnQucHJvdG90eXBlLCAnd2luZG93U2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3dpbmRvd1NpemUgPSB0aGlzLnRvU2Vjb25kcyhzaXplKTtcblx0ICAgICAgICAgICAgdGhpcy5waXRjaCA9IHRoaXMuX3BpdGNoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QaXRjaFNoaWZ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaXRjaFNoaWZ0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlBLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheUEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Qi5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlCID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9BLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9BID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9CLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9CID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlTEZPLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdkZWxheVRpbWUnKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGl0Y2hTaGlmdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIEJ1ZmZlclNvdXJjZU5vZGUuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtICB7QXVkaW9CdWZmZXJ8VG9uZS5CdWZmZXJ9ICBidWZmZXIgICBUaGUgYnVmZmVyIHRvIHBsYXlcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBvbmxvYWQgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYnVmZmVyJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICBdLCBUb25lLkJ1ZmZlclNvdXJjZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRoZVxuXHRcdFx0ICogIGJ1ZmZlciBzb3VyY2UgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBvcHRpb25zLm9uZW5kZWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpbWUgdGhhdCB0aGUgYnVmZmVyIHdhcyBzdGFydGVkLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBhZGRpdGlvbmFsIGZsYWcgaWYgdGhlIGFjdHVhbCBCdWZmZXJTb3VyY2VOb2RlXG5cdFx0XHQgKiAgaGFzIGJlZW4gc3RhcnRlZC4gYi9jIHN0b3BwaW5nIGFuIHVuc3RhcnRlZCBidWZmZXJcblx0XHRcdCAqICB3aWxsIHRocm93IGl0IGludG8gYW4gaW52YWxpZCBzdGF0ZVxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEZsYWcgaWYgdGhlIHNvdXJjZSBoYXMgYWxyZWFkeSBiZWVuIHN0b3BwZWRcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVN0b3BwZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGltZSB0aGF0IHRoZSBidWZmZXIgaXMgc2NoZWR1bGVkIHRvIHN0b3AuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gLTE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gbm9kZSB3aGljaCBlbnZlbG9wZXMgdGhlIEJ1ZmZlclNvdXJjZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBidWZmZXIgc291cmNlXG5cdFx0XHQgKiAgQHR5cGUgIHtBdWRpb0J1ZmZlclNvdXJjZU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UuY29ubmVjdCh0aGlzLl9nYWluTm9kZSk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLm9uZW5kZWQgPSB0aGlzLl9vbmVuZGVkLmJpbmQodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcHJpdmF0ZSBidWZmZXIgaW5zdGFuY2Vcblx0XHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIob3B0aW9ucy5idWZmZXIsIG9wdGlvbnMub25sb2FkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGxheWJhY2tSYXRlIG9mIHRoZSBidWZmZXJcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9zb3VyY2UucGxheWJhY2tSYXRlLCBUb25lLlR5cGUuUG9zaXRpdmUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlSW4gdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlSW4gPSBvcHRpb25zLmZhZGVJbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZU91dCB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVPdXQgPSBvcHRpb25zLmZhZGVPdXQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY3VydmUgYXBwbGllZCB0byB0aGUgZmFkZXMsIGVpdGhlciBcImxpbmVhclwiIG9yIFwiZXhwb25lbnRpYWxcIlxuXHRcdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY3VydmUgPSBvcHRpb25zLmN1cnZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB0aGF0IHRoZSBidWZmZXIgcmFtcHMgdG9cblx0XHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IDE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgb25lbmRlZCB0aW1lb3V0XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uZW5kZWRUaW1lb3V0ID0gLTE7XG5cdCAgICAgICAgLy9zZXQgc29tZSB2YWx1ZXMgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5sb29wID0gb3B0aW9ucy5sb29wO1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gb3B0aW9ucy5sb29wU3RhcnQ7XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gb3B0aW9ucy5sb29wRW5kO1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlLnZhbHVlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CdWZmZXJTb3VyY2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29uZW5kZWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogMCxcblx0ICAgICAgICAnZmFkZUluJzogMCxcblx0ICAgICAgICAnZmFkZU91dCc6IDAsXG5cdCAgICAgICAgJ2N1cnZlJzogJ2xpbmVhcicsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBwbGF5YmFjayBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gdGVzdCB0aGUgc3RhdGUgYXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuU3RhdGV9ICBUaGUgcGxheWJhY2sgc3RhdGUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLmdldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEgJiYgdGltZSA+PSB0aGlzLl9zdGFydFRpbWUgJiYgIXRoaXMuX3NvdXJjZVN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RhcnRlZDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbc3RhcnRUaW1lPW5vd10gV2hlbiB0aGUgcGxheWVyIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW29mZnNldD0wXSBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBzYW1wbGUgc2hvdWxkIHBsYXkuIElmIG5vIGR1cmF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdpdmVuLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZ1bGwgbGVuZ3RoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzYW1wbGUgKG1pbnVzIGFueSBvZmZzZXQpXG5cdFx0ICogIEBwYXJhbSAge0dhaW59ICBbZ2Fpbj0xXSAgVGhlIGdhaW4gdG8gcGxheSB0aGUgYnVmZmVyIGJhY2sgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgZmFkZUluVGltZSAgVGhlIG9wdGlvbmFsIGZhZGVJbiByYW1wIHRpbWUuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlclNvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uLCBnYWluLCBmYWRlSW5UaW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkJ1ZmZlclNvdXJjZSBjYW4gb25seSBiZSBzdGFydGVkIG9uY2UuJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghdGhpcy5idWZmZXIubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJTb3VyY2U6IGJ1ZmZlciBpcyBlaXRoZXIgbm90IHNldCBvciBub3QgbG9hZGVkLicpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy9pZiBpdCdzIGEgbG9vcCB0aGUgZGVmYXVsdCBvZmZzZXQgaXMgdGhlIGxvb3BzdGFydCBwb2ludFxuXHQgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgdGhpcy5sb29wU3RhcnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IG9mZnNldCBpcyAwXG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgIGdhaW4gPSBUb25lLmRlZmF1bHRBcmcoZ2FpbiwgMSk7XG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IGdhaW47XG5cdCAgICAgICAgZmFkZUluVGltZSA9IHRoaXMudG9TZWNvbmRzKFRvbmUuZGVmYXVsdEFyZyhmYWRlSW5UaW1lLCB0aGlzLmZhZGVJbikpO1xuXHQgICAgICAgIHRoaXMuZmFkZUluID0gZmFkZUluVGltZTtcblx0ICAgICAgICBpZiAoZmFkZUluVGltZSA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuY3VydmUgPT09ICdsaW5lYXInKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMuX2dhaW4sIHRpbWUgKyBmYWRlSW5UaW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKHRoaXMuX2dhaW4sIHRpbWUsIGZhZGVJblRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZShnYWluLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gdGltZTtcblx0ICAgICAgICB2YXIgY29tcHV0ZWREdXIgPSB0aGlzLnRvU2Vjb25kcyhUb25lLmRlZmF1bHRBcmcoZHVyYXRpb24sIHRoaXMuYnVmZmVyLmR1cmF0aW9uIC0gb2Zmc2V0ICUgdGhpcy5idWZmZXIuZHVyYXRpb24pKTtcblx0ICAgICAgICBjb21wdXRlZER1ciA9IE1hdGgubWF4KGNvbXB1dGVkRHVyLCAwKTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoZHVyYXRpb24pKSB7XG5cdCAgICAgICAgICAgIC8vY2xpcCB0aGUgZHVyYXRpb24gd2hlbiBub3QgbG9vcGluZ1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAgICAgY29tcHV0ZWREdXIgPSBNYXRoLm1pbihjb21wdXRlZER1ciwgdGhpcy5idWZmZXIuZHVyYXRpb24gLSBvZmZzZXQgJSB0aGlzLmJ1ZmZlci5kdXJhdGlvbik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHRpbWUgKyBjb21wdXRlZER1ciwgdGhpcy5mYWRlT3V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zdGFydCB0aGUgYnVmZmVyIHNvdXJjZVxuXHQgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgLy9tb2RpZnkgdGhlIG9mZnNldCBpZiBpdCdzIGdyZWF0ZXIgdGhhbiB0aGUgbG9vcCB0aW1lXG5cdCAgICAgICAgICAgIHZhciBsb29wRW5kID0gdGhpcy5sb29wRW5kIHx8IHRoaXMuYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgICAgICB2YXIgbG9vcFN0YXJ0ID0gdGhpcy5sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIHZhciBsb29wRHVyYXRpb24gPSBsb29wRW5kIC0gbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAvL21vdmUgdGhlIG9mZnNldCBiYWNrXG5cdCAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gbG9vcEVuZCkge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gKG9mZnNldCAtIGxvb3BTdGFydCkgJSBsb29wRHVyYXRpb24gKyBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLmdldCgpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wRW5kID0gdGhpcy5sb29wRW5kIHx8IHRoaXMuYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgIGlmIChvZmZzZXQgPCB0aGlzLmJ1ZmZlci5kdXJhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLnN0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBidWZmZXIuIE9wdGlvbmFsbHkgYWRkIGEgcmFtcCB0aW1lIHRvIGZhZGUgdGhlXG5cdFx0ICogIGJ1ZmZlciBvdXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgdGltZSAgICAgICAgIFRoZSB0aW1lIHRoZSBidWZmZXIgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgZmFkZU91dFRpbWUgIEhvdyBsb25nIHRoZSBnYWluIHNob3VsZCBmYWRlIG91dCBmb3Jcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSwgZmFkZU91dFRpbWUpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuYnVmZmVyLmxvYWRlZCkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyU291cmNlOiBidWZmZXIgaXMgZWl0aGVyIG5vdCBzZXQgb3Igbm90IGxvYWRlZC4nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy9pZiB0aGUgZXZlbnQgaGFzIGFscmVhZHkgYmVlbiBzY2hlZHVsZWQsIGNsZWFyIGl0XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0b3BUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zdG9wIGlmIGl0J3Mgc2NoZWR1bGUgYmVmb3JlIHRoZSBzdGFydCB0aW1lXG5cdCAgICAgICAgaWYgKHRpbWUgPD0gdGhpcy5fc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnZhbHVlID0gMDtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSBNYXRoLm1heCh0aGlzLl9zdGFydFRpbWUgKyB0aGlzLmZhZGVJbiArIHRoaXMuc2FtcGxlVGltZSwgdGltZSk7XG5cdCAgICAgICAgLy9jYW5jZWwgdGhlIHByZXZpb3VzIGN1cnZlXG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSB0aW1lO1xuXHQgICAgICAgIC8vdGhlIGZhZGVPdXQgdGltZVxuXHQgICAgICAgIGZhZGVPdXRUaW1lID0gdGhpcy50b1NlY29uZHMoVG9uZS5kZWZhdWx0QXJnKGZhZGVPdXRUaW1lLCB0aGlzLmZhZGVPdXQpKTtcblx0ICAgICAgICB2YXIgaGVsZER1cmF0aW9uID0gdGltZSAtIHRoaXMuX3N0YXJ0VGltZSAtIHRoaXMuZmFkZUluIC0gdGhpcy5zYW1wbGVUaW1lO1xuXHQgICAgICAgIGlmICghdGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgIC8vbWFrZSBzdXJlIHRoZSBmYWRlIGRvZXMgbm90IGdvIGJleW9uZCB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXJcblx0ICAgICAgICAgICAgaGVsZER1cmF0aW9uID0gTWF0aC5taW4oaGVsZER1cmF0aW9uLCB0aGlzLmJ1ZmZlci5kdXJhdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZhZGVPdXRUaW1lID0gTWF0aC5taW4oaGVsZER1cmF0aW9uLCBmYWRlT3V0VGltZSk7XG5cdCAgICAgICAgdmFyIHN0YXJ0RmFkZSA9IHRpbWUgLSBmYWRlT3V0VGltZTtcblx0ICAgICAgICBpZiAoZmFkZU91dFRpbWUgPiB0aGlzLnNhbXBsZVRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSh0aGlzLl9nYWluLCBzdGFydEZhZGUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5jdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSgwLCBzdGFydEZhZGUsIGZhZGVPdXRUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fb25lbmRlZFRpbWVvdXQpO1xuXHQgICAgICAgIHRoaXMuX29uZW5kZWRUaW1lb3V0ID0gVG9uZS5jb250ZXh0LnNldFRpbWVvdXQodGhpcy5fb25lbmRlZC5iaW5kKHRoaXMpLCB0aGlzLl9zdG9wVGltZSAtIHRoaXMubm93KCkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYSBzY2hlZHVsZWQgc3RvcCBldmVudFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuY2FuY2VsU3RvcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSAmJiAhdGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCB0aGUgc3RvcCBlbnZlbG9wZVxuXHQgICAgICAgICAgICB2YXIgZmFkZUluVGltZSA9IHRoaXMudG9TZWNvbmRzKHRoaXMuZmFkZUluKTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGhpcy5fc3RhcnRUaW1lICsgZmFkZUluVGltZSArIHRoaXMuc2FtcGxlVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgTWF0aC5tYXgodGhpcy5ub3coKSwgdGhpcy5fc3RhcnRUaW1lICsgZmFkZUluVGltZSArIHRoaXMuc2FtcGxlVGltZSkpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX29uZW5kZWRUaW1lb3V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGNhbGxiYWNrIHdoZW4gdGhlIGJ1ZmZlciBpcyBlbmRlZC5cblx0XHQgKiAgSW52b2tlcyBgb25lbmRlZGAgYW5kIGRpc3Bvc2VzIHRoZSBub2RlLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLl9vbmVuZGVkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdG9wcGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgLy9hbGxvdyBhZGRpdGlvbmFsIHRpbWUgZm9yIHRoZSBleHBvbmVudGlhbCBjdXJ2ZSB0byBmdWxseSBkZWNheVxuXHQgICAgICAgICAgICB2YXIgYWRkaXRpb25hbFRhaWwgPSB0aGlzLmN1cnZlID09PSAnZXhwb25lbnRpYWwnID8gdGhpcy5mYWRlT3V0ICogMiA6IDA7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VTdGFydGVkICYmIHRoaXMuX3N0b3BUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlLnN0b3AodGhpcy5fc3RvcFRpbWUgKyBhZGRpdGlvbmFsVGFpbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5vbmVuZGVkKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgc3RhcnQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLmxvb3BTdGFydDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UubG9vcFN0YXJ0ID0gdGhpcy50b1NlY29uZHMobG9vcFN0YXJ0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBlbmQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UubG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLmxvb3BFbmQgPSB0aGlzLnRvU2Vjb25kcyhsb29wRW5kKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhdWRpbyBidWZmZXIgYmVsb25naW5nIHRvIHRoZSBwbGF5ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHQgKiBAbmFtZSBidWZmZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdidWZmZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChidWZmZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlciBzaG91bGQgbG9vcCBvbmNlIGl0J3Mgb3Zlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9vcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UubG9vcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3ApIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLmxvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB0aGlzLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5vbmVuZGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gLTE7XG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fb25lbmRlZFRpbWVvdXQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkJ1ZmZlclNvdXJjZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk5vaXNlIGlzIGEgbm9pc2UgZ2VuZXJhdG9yLiBJdCB1c2VzIGxvb3BlZCBub2lzZSBidWZmZXJzIHRvIHNhdmUgb24gcGVyZm9ybWFuY2UuXG5cdFx0ICogICAgICAgICAgVG9uZS5Ob2lzZSBzdXBwb3J0cyB0aGUgbm9pc2UgdHlwZXM6IFwicGlua1wiLCBcIndoaXRlXCIsIGFuZCBcImJyb3duXCIuIFJlYWQgbW9yZSBhYm91dFxuXHRcdCAqICAgICAgICAgIGNvbG9ycyBvZiBub2lzZSBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db2xvcnNfb2Zfbm9pc2UpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfSB0eXBlIHRoZSBub2lzZSB0eXBlICh3aGl0ZXxwaW5rfGJyb3duKVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaW5pdGlhbGl6ZSB0aGUgbm9pc2UgYW5kIHN0YXJ0XG5cdFx0ICogdmFyIG5vaXNlID0gbmV3IFRvbmUuTm9pc2UoXCJwaW5rXCIpLnN0YXJ0KCk7XG5cdFx0ICpcblx0XHQgKiAvL21ha2UgYW4gYXV0b2ZpbHRlciB0byBzaGFwZSB0aGUgbm9pc2Vcblx0XHQgKiB2YXIgYXV0b0ZpbHRlciA9IG5ldyBUb25lLkF1dG9GaWx0ZXIoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IFwiOG1cIixcblx0XHQgKiBcdFwibWluXCIgOiA4MDAsXG5cdFx0ICogXHRcIm1heFwiIDogMTUwMDBcblx0XHQgKiB9KS5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0XHQgKlxuXHRcdCAqIC8vY29ubmVjdCB0aGUgbm9pc2Vcblx0XHQgKiBub2lzZS5jb25uZWN0KGF1dG9GaWx0ZXIpO1xuXHRcdCAqIC8vc3RhcnQgdGhlIGF1dG9maWx0ZXIgTEZPXG5cdFx0ICogYXV0b0ZpbHRlci5zdGFydCgpXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndHlwZSddLCBUb25lLk5vaXNlKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyU291cmNlTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGJ1ZmZlclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbm9pc2UuIEFmZmVjdHNcblx0XHRcdCAqICB0aGUgXCJmcmVxdWVuY3lcIiBvZiB0aGUgbm9pc2UuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTm9pc2UsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICpcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnd2hpdGUnLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG5vaXNlLiBDYW4gYmUgXCJ3aGl0ZVwiLCBcImJyb3duXCIsIG9yIFwicGlua1wiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk5vaXNlI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogbm9pc2UudHlwZSA9IFwid2hpdGVcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vaXNlLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSAhPT0gdHlwZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHR5cGUgaW4gX25vaXNlQnVmZmVycykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vaWYgaXQncyBwbGF5aW5nLCBzdG9wIGFuZCByZXN0YXJ0IGl0XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcChub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydChub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5Ob2lzZTogaW52YWxpZCB0eXBlOiAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbm9pc2UuIEFmZmVjdHNcblx0XHQgKiAgdGhlIFwiZnJlcXVlbmN5XCIgb2YgdGhlIG5vaXNlLlxuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBzaWduYWxcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vaXNlLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBpbnRlcm5hbCBzdGFydCBtZXRob2Rcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGJ1ZmZlciA9IF9ub2lzZUJ1ZmZlcnNbdGhpcy5fdHlwZV07XG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKGJ1ZmZlcikuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmxvb3AgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5wbGF5YmFja1JhdGUudmFsdWUgPSB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLnN0YXJ0KHRoaXMudG9TZWNvbmRzKHRpbWUpLCBNYXRoLnJhbmRvbSgpICogKGJ1ZmZlci5kdXJhdGlvbiAtIDAuMDAxKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGludGVybmFsIHN0b3AgbWV0aG9kXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2Uuc3RvcCh0aGlzLnRvU2Vjb25kcyh0aW1lKSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlc3RhcnRzIHRoZSBub2lzZS5cblx0XHQgKiBAcGFyYW0gIHtbdHlwZV19IHRpbWUgW2Rlc2NyaXB0aW9uXVxuXHRcdCAqIEByZXR1cm4ge1t0eXBlXX0gICAgICBbZGVzY3JpcHRpb25dXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL1RPRE8gY291bGQgYmUgb3B0aW1pemVkIGJ5IGNhbmNlbGxpbmcgdGhlIGJ1ZmZlciBzb3VyY2UgJ3N0b3AnXG5cdCAgICAgICAgLy9zdG9wIGFuZCByZXN0YXJ0XG5cdCAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gVEhFIEJVRkZFUlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9Ob2lzZSBidWZmZXIgc3RhdHNcblx0ICAgIHZhciBidWZmZXJMZW5ndGggPSA0NDEwMCAqIDU7XG5cdCAgICB2YXIgY2hhbm5lbHMgPSAyO1xuXHQgICAgLyoqXG5cdFx0ICpcdFRoZSBub2lzZSBhcnJheXMuIEdlbmVyYXRlZCBvbiBpbml0aWFsaXphdGlvbi5cblx0XHQgKiAgYm9ycm93ZWQgaGVhdmlseSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS96YWNoYXJ5ZGVudG9uL25vaXNlLmpzXG5cdFx0ICogIChjKSAyMDEzIFphY2ggRGVudG9uIChNSVQpXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIF9ub2lzZUFycmF5cyA9IHtcblx0ICAgICAgICAncGluayc6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsTnVtID0gMDsgY2hhbm5lbE51bSA8IGNoYW5uZWxzOyBjaGFubmVsTnVtKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJMZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyW2NoYW5uZWxOdW1dID0gY2hhbm5lbDtcblx0ICAgICAgICAgICAgICAgIHZhciBiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNjtcblx0ICAgICAgICAgICAgICAgIGIwID0gYjEgPSBiMiA9IGIzID0gYjQgPSBiNSA9IGI2ID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgd2hpdGUgPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7XG5cdCAgICAgICAgICAgICAgICAgICAgYjAgPSAwLjk5ODg2ICogYjAgKyB3aGl0ZSAqIDAuMDU1NTE3OTtcblx0ICAgICAgICAgICAgICAgICAgICBiMSA9IDAuOTkzMzIgKiBiMSArIHdoaXRlICogMC4wNzUwNzU5O1xuXHQgICAgICAgICAgICAgICAgICAgIGIyID0gMC45NjkgKiBiMiArIHdoaXRlICogMC4xNTM4NTI7XG5cdCAgICAgICAgICAgICAgICAgICAgYjMgPSAwLjg2NjUgKiBiMyArIHdoaXRlICogMC4zMTA0ODU2O1xuXHQgICAgICAgICAgICAgICAgICAgIGI0ID0gMC41NSAqIGI0ICsgd2hpdGUgKiAwLjUzMjk1MjI7XG5cdCAgICAgICAgICAgICAgICAgICAgYjUgPSAtMC43NjE2ICogYjUgLSB3aGl0ZSAqIDAuMDE2ODk4O1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gPSBiMCArIGIxICsgYjIgKyBiMyArIGI0ICsgYjUgKyBiNiArIHdoaXRlICogMC41MzYyO1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gKj0gMC4xMTtcblx0ICAgICAgICAgICAgICAgICAgICAvLyAocm91Z2hseSkgY29tcGVuc2F0ZSBmb3IgZ2FpblxuXHQgICAgICAgICAgICAgICAgICAgIGI2ID0gd2hpdGUgKiAwLjExNTkyNjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuXHQgICAgICAgIH0oKSxcblx0ICAgICAgICAnYnJvd24nOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY2hhbm5lbE51bSA9IDA7IGNoYW5uZWxOdW0gPCBjaGFubmVsczsgY2hhbm5lbE51bSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyTGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlcltjaGFubmVsTnVtXSA9IGNoYW5uZWw7XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFzdE91dCA9IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHdoaXRlID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxO1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gPSAobGFzdE91dCArIDAuMDIgKiB3aGl0ZSkgLyAxLjAyO1xuXHQgICAgICAgICAgICAgICAgICAgIGxhc3RPdXQgPSBjaGFubmVsW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gKj0gMy41OyAgICAvLyAocm91Z2hseSkgY29tcGVuc2F0ZSBmb3IgZ2FpblxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSgpLFxuXHQgICAgICAgICd3aGl0ZSc6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsTnVtID0gMDsgY2hhbm5lbE51bSA8IGNoYW5uZWxzOyBjaGFubmVsTnVtKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJMZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyW2NoYW5uZWxOdW1dID0gY2hhbm5lbDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2ldID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSgpXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICpcdHN0YXRpYyBub2lzZSBidWZmZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdCAqL1xuXHQgICAgdmFyIF9ub2lzZUJ1ZmZlcnMgPSB7fTtcblx0ICAgIC8vY3JlYXRlIHRoZSBUb25lLkJ1ZmZlcnNcblx0ICAgIGZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlcnMoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgdHlwZSBpbiBfbm9pc2VBcnJheXMpIHtcblx0ICAgICAgICAgICAgX25vaXNlQnVmZmVyc1t0eXBlXSA9IG5ldyBUb25lLkJ1ZmZlcigpLmZyb21BcnJheShfbm9pc2VBcnJheXNbdHlwZV0pO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0ICAgIC8vY3JlYXRlIHRoZSBub2lzZSBidWZmZXJzXG5cdCAgICBUb25lLmdldENvbnRleHQoY3JlYXRlQnVmZmVycyk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBjcmVhdGVCdWZmZXJzKTtcblx0ICAgIHJldHVybiBUb25lLk5vaXNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU2ltcGxlIGNvbnZvbHV0aW9uIGNyZWF0ZWQgd2l0aCBkZWNheWluZyBub2lzZS5cblx0XHQgKiAgXHRcdEdlbmVyYXRlcyBhbiBJbXB1bHNlIFJlc3BvbnNlIEJ1ZmZlclxuXHRcdCAqIFx0XHRcdHdpdGggVG9uZS5PZmZsaW5lIHRoZW4gZmVlZHMgdGhlIElSIGludG8gQ29udm9sdmVyTm9kZS5cblx0XHQgKiBcdFx0XHROb3RlOiB0aGUgUmV2ZXJiIHdpbGwgbm90IG1ha2UgYW55IHNvdW5kIHVudGlsIFtnZW5lcmF0ZV0oI2dlbmVyYXRlKVxuXHRcdCAqIFx0XHRcdGhhcyBiZWVuIGludm9rZWQgYW5kIHJlc29sdmVkLlxuXHRcdCAqXG5cdFx0ICogXHRcdFx0SW5zcGlyYXRpb24gZnJvbSBbUmV2ZXJiR2VuXShodHRwczovL2dpdGh1Yi5jb20vYWRlbGVzcGluYXNzZS9yZXZlcmJHZW4pLlxuXHRcdCAqIFx0XHRcdENvcHlyaWdodCAoYykgMjAxNCBBbGFuIGRlTGVzcGluYXNzZSBBcGFjaGUgMi4wIExpY2Vuc2UuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQ29udm9sdmVyfVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBkZWNheSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCByZXZlcmJlcmF0ZSBmb3IuXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2RlY2F5J10sIFRvbmUuUmV2ZXJiKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENvbnZvbHZlciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0NvbnZvbHZlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVDb252b2x2ZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgcmV2ZXJiXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVjYXkgPSBvcHRpb25zLmRlY2F5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtb3VudCBvZiB0aW1lIGJlZm9yZSB0aGUgcmV2ZXJiIGlzIGZ1bGx5XG5cdFx0XHQgKiByYW1wZWQgaW4uXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucHJlRGVsYXkgPSBvcHRpb25zLnByZURlbGF5O1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9jb252b2x2ZXIpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUmV2ZXJiLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuUmV2ZXJiLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWNheSc6IDEuNSxcblx0ICAgICAgICAncHJlRGVsYXknOiAwLjAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2VuZXJhdGUgdGhlIEltcHVsc2UgUmVzcG9uc2UuIFJldHVybnMgYSBwcm9taXNlIHdoaWxlIHRoZSBJUiBpcyBiZWluZ1xuXHRcdCAqIGdlbmVyYXRlZC5cblx0XHQgKiBAcmV0dXJuIHtQcm9taXNlPFRvbmUuUmV2ZXJiPn0gUHJvbWlzZSB3aGljaCByZXR1cm5zIHRoaXMgb2JqZWN0LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLk9mZmxpbmUoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvL2NyZWF0ZSBhIG5vaXNlIGJ1cnN0IHdoaWNoIGRlY2F5cyBvdmVyIHRoZSBkdXJhdGlvblxuXHQgICAgICAgICAgICB2YXIgbm9pc2VMID0gbmV3IFRvbmUuTm9pc2UoKTtcblx0ICAgICAgICAgICAgdmFyIG5vaXNlUiA9IG5ldyBUb25lLk5vaXNlKCk7XG5cdCAgICAgICAgICAgIHZhciBtZXJnZSA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgICAgIG5vaXNlTC5jb25uZWN0KG1lcmdlLmxlZnQpO1xuXHQgICAgICAgICAgICBub2lzZVIuY29ubmVjdChtZXJnZS5yaWdodCk7XG5cdCAgICAgICAgICAgIHZhciBnYWluTm9kZSA9IG5ldyBUb25lLkdhaW4oKS50b01hc3RlcigpO1xuXHQgICAgICAgICAgICBtZXJnZS5jb25uZWN0KGdhaW5Ob2RlKTtcblx0ICAgICAgICAgICAgbm9pc2VMLnN0YXJ0KDApO1xuXHQgICAgICAgICAgICBub2lzZVIuc3RhcnQoMCk7XG5cdCAgICAgICAgICAgIC8vc2hvcnQgZmFkZSBpblxuXHQgICAgICAgICAgICBnYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIDApO1xuXHQgICAgICAgICAgICBnYWluTm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKDEsIHRoaXMucHJlRGVsYXkpO1xuXHQgICAgICAgICAgICAvL2RlY2F5XG5cdCAgICAgICAgICAgIGdhaW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKDAsIHRoaXMucHJlRGVsYXksIHRoaXMuZGVjYXkgLSB0aGlzLnByZURlbGF5KTtcblx0ICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMuZGVjYXkpLnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9jb252b2x2ZXIuYnVmZmVyID0gYnVmZmVyLmdldCgpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUmV2ZXJifSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUmV2ZXJiO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQmFzZSBjbGFzcyBmb3Igc3RlcmVvIGZlZWRiYWNrIGVmZmVjdHMgd2hlcmUgdGhlIGVmZmVjdFJldHVyblxuXHRcdCAqICAgICAgICAgaXMgZmVkIGJhY2sgaW50byB0aGUgc2FtZSBjaGFubmVsLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZmVlZGJhY2snXSwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb250cm9scyB0aGUgYW1vdW50IG9mIGZlZWRiYWNrXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mZWVkYmFjaywgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGVmdCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0wgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHJpZ2h0IHNpZGUgZmVlYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwuY2hhaW4odGhpcy5fZmVlZGJhY2tMLCB0aGlzLmVmZmVjdFNlbmRMKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIuY2hhaW4odGhpcy5fZmVlZGJhY2tSLCB0aGlzLmVmZmVjdFNlbmRSKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmZhbih0aGlzLl9mZWVkYmFja0wuZ2FpbiwgdGhpcy5fZmVlZGJhY2tSLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZmVlZGJhY2snXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9GZWVkYmFja0VmZmVjdCwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydmZWVkYmFjayddKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1IgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQXBwbGllcyBhIHdpZHRoIGZhY3RvciB0byB0aGUgbWlkL3NpZGUgc2VwZXJhdGlvbi5cblx0XHQgKiAgICAgICAgIDAgaXMgYWxsIG1pZCBhbmQgMSBpcyBhbGwgc2lkZS5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmb3VuZCBpbiBba3ZyYXVkaW8gZm9ydW1zXShodHRwOi8vd3d3Lmt2cmF1ZGlvLmNvbS9mb3J1bS92aWV3dG9waWMucGhwP3Q9MjEyNTg3KS5cblx0XHQgKiAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICA8Y29kZT5cblx0XHQgKiAgICAgICAgIE1pZCAqPSAyKigxLXdpZHRoKTxicj5cblx0XHQgKiAgICAgICAgIFNpZGUgKj0gMip3aWR0aFxuXHRcdCAqICAgICAgICAgPC9jb2RlPlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1pZFNpZGVFZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3dpZHRoXSBUaGUgc3RlcmVvIHdpZHRoLiBBIHdpZHRoIG9mIDAgaXMgbW9ubyBhbmQgMSBpcyBzdGVyZW8uIDAuNSBpcyBubyBjaGFuZ2UuXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1dpZGVuZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd3aWR0aCddLCBUb25lLlN0ZXJlb1dpZGVuZXIpO1xuXHQgICAgICAgIFRvbmUuTWlkU2lkZUVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3aWR0aCBjb250cm9sLiAwID0gMTAwJSBtaWQuIDEgPSAxMDAlIHNpZGUuIDAuNSA9IG5vIGNoYW5nZS5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy53aWR0aCA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLndpZHRoLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnd2lkdGgnXSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUd28gdGltZXMgdGhlICgxLXdpZHRoKSBmb3IgdGhlIG1pZCBjaGFubmVsXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoTWlkID0gbmV3IFRvbmUuTXVsdGlwbHkoMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUd28gdGltZXMgdGhlIHdpZHRoIGZvciB0aGUgc2lkZSBjaGFubmVsXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoU2lkZSA9IG5ldyBUb25lLk11bHRpcGx5KDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE1pZCBtdWx0aXBsaWVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZE11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQuY29ubmVjdCh0aGlzLl9taWRNdWx0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLm1pZFNlbmQuY2hhaW4odGhpcy5fbWlkTXVsdCwgdGhpcy5taWRSZXR1cm4pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogMSAtIHdpZHRoXG5cdFx0XHQgKiBAdHlwZSB7VG9uZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uZU1pbnVzV2lkdGggPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIHRoaXMuX29uZU1pbnVzV2lkdGguY29ubmVjdCh0aGlzLl90d29UaW1lc1dpZHRoTWlkKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29uc3RhbnQoMSkuY29ubmVjdCh0aGlzLl9vbmVNaW51c1dpZHRoLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmNvbm5lY3QodGhpcy5fb25lTWludXNXaWR0aCwgMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2lkZSBtdWx0aXBsaWVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NpZGVNdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmNvbm5lY3QodGhpcy5fdHdvVGltZXNXaWR0aFNpZGUpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlLmNvbm5lY3QodGhpcy5fc2lkZU11bHQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuc2lkZVNlbmQuY2hhaW4odGhpcy5fc2lkZU11bHQsIHRoaXMuc2lkZVJldHVybik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9XaWRlbmVyLCBUb25lLk1pZFNpZGVFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1dpZGVuZXIuZGVmYXVsdHMgPSB7ICd3aWR0aCc6IDAuNSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9XaWRlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1dpZGVuZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5NaWRTaWRlRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd3aWR0aCddKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLndpZHRoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRNdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRNdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zaWRlTXVsdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2lkZU11bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoU2lkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvV2lkZW5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVHJlbW9sbyBtb2R1bGF0ZXMgdGhlIGFtcGxpdHVkZSBvZiBhbiBpbmNvbWluZyBzaWduYWwgdXNpbmcgYSBUb25lLkxGTy5cblx0XHQgKiAgICAgICAgIFRoZSB0eXBlLCBmcmVxdWVuY3ksIGFuZCBkZXB0aCBvZiB0aGUgTEZPIGlzIGNvbnRyb2xsYWJsZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2ZyZXF1ZW5jeV0gVGhlIHJhdGUgb2YgdGhlIGVmZmVjdC5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW2RlcHRoXSBUaGUgZGVwdGggb2YgdGhlIGVmZmVjdC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhIHRyZW1vbG8gYW5kIHN0YXJ0IGl0J3MgTEZPXG5cdFx0ICogdmFyIHRyZW1vbG8gPSBuZXcgVG9uZS5UcmVtb2xvKDksIDAuNzUpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKiAvL3JvdXRlIGFuIG9zY2lsbGF0b3IgdGhyb3VnaCB0aGUgdHJlbW9sbyBhbmQgc3RhcnQgaXRcblx0XHQgKiB2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KHRyZW1vbG8pLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuVHJlbW9sbyk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHJlbWVsbyBMRk8gaW4gdGhlIGxlZnQgY2hhbm5lbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAncGhhc2UnOiBvcHRpb25zLnNwcmVhZCxcblx0ICAgICAgICAgICAgJ21pbic6IDEsXG5cdCAgICAgICAgICAgICdtYXgnOiAwXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRyZW1lbG8gTEZPIGluIHRoZSBsZWZ0IGNoYW5uZWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9SID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ3BoYXNlJzogb3B0aW9ucy5zcHJlYWQsXG5cdCAgICAgICAgICAgICdtaW4nOiAxLFxuXHQgICAgICAgICAgICAnbWF4JzogMFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZXJlIHRoZSBnYWluIGlzIG11bHRpcGxpZWRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlTCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVyZSB0aGUgZ2FpbiBpcyBtdWx0aXBsaWVkXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVkZVIgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgdHJlbW9sby5cblx0XHRcdCAqICBAdHlwZSAge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlcHRoIG9mIHRoZSBlZmZlY3QuIEEgZGVwdGggb2YgMCwgaGFzIG5vIGVmZmVjdFxuXHRcdFx0ICogIG9uIHRoZSBhbXBsaXR1ZGUsIGFuZCBhIGRlcHRoIG9mIDEgbWFrZXMgdGhlIGFtcGxpdHVkZVxuXHRcdFx0ICogIG1vZHVsYXRlIGZ1bGx5IGJldHdlZW4gMCBhbmQgMS5cblx0XHRcdCAqICBAdHlwZSAge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXB0aCwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbih0aGlzLl9hbXBsaXR1ZGVMLCB0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4odGhpcy5fYW1wbGl0dWRlUiwgdGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICB0aGlzLl9sZm9MLmNvbm5lY3QodGhpcy5fYW1wbGl0dWRlTC5nYWluKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLmNvbm5lY3QodGhpcy5fYW1wbGl0dWRlUi5nYWluKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5mYW4odGhpcy5fbGZvTC5mcmVxdWVuY3ksIHRoaXMuX2xmb1IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmRlcHRoLmZhbih0aGlzLl9sZm9SLmFtcGxpdHVkZSwgdGhpcy5fbGZvTC5hbXBsaXR1ZGUpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLnNwcmVhZCA9IG9wdGlvbnMuc3ByZWFkO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJlbW9sbywgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDEwLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdkZXB0aCc6IDAuNSxcblx0ICAgICAgICAnc3ByZWFkJzogMTgwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RhcnQgdGhlIHRyZW1vbG8uXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHRyZW1vbG8gYmVnaW5zLlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIHRoZSB0cmVtb2xvLlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSB0cmVtb2xvIHN0b3BzLlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBlZmZlY3QgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFtkZWxheT0wXSBEZWxheSB0aW1lIGJlZm9yZSBzdGFydGluZyB0aGUgZWZmZWN0IGFmdGVyIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IGhhcyBzdGFydGVkLlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uIChkZWxheSkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3luYyhkZWxheSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zeW5jKGRlbGF5KTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIGZpbHRlciBmcm9tIHRoZSB0cmFuc3BvcnRcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5UcmVtb2xvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9sZm9MLnVuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IudW5zeW5jKCk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQudW5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgVHJlbW9sbydzIG9zY2lsbGF0b3IgdHlwZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmVtb2xvI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJlbW9sby5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvTC50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQW1vdW50IG9mIHN0ZXJlbyBzcHJlYWQuIFdoZW4gc2V0IHRvIDAsIGJvdGggTEZPJ3Mgd2lsbCBiZSBwYW5uZWQgY2VudHJhbGx5LlxuXHRcdCAqIFdoZW4gc2V0IHRvIDE4MCwgTEZPJ3Mgd2lsbCBiZSBwYW5uZWQgaGFyZCBsZWZ0IGFuZCByaWdodCByZXNwZWN0aXZlbHkuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVHJlbW9sbyNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyZW1vbG8ucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvUi5waGFzZSAtIHRoaXMuX2xmb0wucGhhc2U7ICAgIC8vMTgwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5waGFzZSA9IDkwIC0gc3ByZWFkIC8gMjtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5waGFzZSA9IHNwcmVhZCAvIDIgKyA5MDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmVtb2xvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyZW1vbG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIFZpYnJhdG8gZWZmZWN0IGNvbXBvc2VkIG9mIGEgVG9uZS5EZWxheSBhbmQgYSBUb25lLkxGTy4gVGhlIExGT1xuXHRcdCAqICAgICAgICAgbW9kdWxhdGVzIHRoZSBkZWxheVRpbWUgb2YgdGhlIGRlbGF5LCBjYXVzaW5nIHRoZSBwaXRjaCB0byByaXNlXG5cdFx0ICogICAgICAgICBhbmQgZmFsbC4gXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgZnJlcXVlbmN5IG9mIHRoZSB2aWJyYXRvLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBkZXB0aCBUaGUgYW1vdW50IHRoZSBwaXRjaCBpcyBtb2R1bGF0ZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlZpYnJhdG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuVmlicmF0byk7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXkgbm9kZSB1c2VkIGZvciB0aGUgdmlicmF0byBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIExGTyB1c2VkIHRvIGNvbnRyb2wgdGhlIHZpYnJhdG9cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICd0eXBlJzogb3B0aW9ucy50eXBlLFxuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IG9wdGlvbnMubWF4RGVsYXksXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogLTkwICAgIC8vb2Zmc2UgdGhlIHBoYXNlIHNvIHRoZSByZXN0aW5nIHBvc2l0aW9uIGlzIGluIHRoZSBjZW50ZXJcblx0ICAgICAgICB9KS5zdGFydCgpLmNvbm5lY3QodGhpcy5fZGVsYXlOb2RlLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgdmlicmF0b1xuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXB0aCBvZiB0aGUgdmlicmF0by4gXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9sZm8uYW1wbGl0dWRlO1xuXHQgICAgICAgIHRoaXMuZGVwdGgudmFsdWUgPSBvcHRpb25zLmRlcHRoO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4odGhpcy5fZGVsYXlOb2RlLCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5WaWJyYXRvLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuVmlicmF0by5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWF4RGVsYXknOiAwLjAwNSxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNSxcblx0ICAgICAgICAnZGVwdGgnOiAwLjEsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUeXBlIG9mIG9zY2lsbGF0b3IgYXR0YWNoZWQgdG8gdGhlIFZpYnJhdG8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVmlicmF0byNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlZpYnJhdG8ucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmby50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8udHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlZpYnJhdG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVmlicmF0by5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5WaWJyYXRvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRXZlbnQgYWJzdHJhY3RzIGF3YXkgVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUgYW5kIHByb3ZpZGVzIGEgc2NoZWR1bGFibGVcblx0XHQgKiAgICAgICAgICBjYWxsYmFjayBmb3IgYSBzaW5nbGUgb3IgcmVwZWF0YWJsZSBldmVudHMgYWxvbmcgdGhlIHRpbWVsaW5lLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGF0IHRoZSB0aW1lLlxuXHRcdCAqICBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSBvciB2YWx1ZXMgd2hpY2ggc2hvdWxkIGJlIHBhc3NlZCB0b1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBvbiBpbnZvY2F0aW9uLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjaG9yZCA9IG5ldyBUb25lLkV2ZW50KGZ1bmN0aW9uKHRpbWUsIGNob3JkKXtcblx0XHQgKiBcdC8vdGhlIGNob3JkIGFzIHdlbGwgYXMgdGhlIGV4YWN0IHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogXHQvL2FyZSBwYXNzZWQgaW4gYXMgYXJndW1lbnRzIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvblxuXHRcdCAqIH0sIFtcIkQ0XCIsIFwiRTRcIiwgXCJGNFwiXSk7XG5cdFx0ICogLy9zdGFydCB0aGUgY2hvcmQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJhbnNwb3J0IHRpbWVsaW5lXG5cdFx0ICogY2hvcmQuc3RhcnQoKTtcblx0XHQgKiAvL2xvb3AgaXQgZXZlcnkgbWVhc3VyZSBmb3IgOCBtZWFzdXJlc1xuXHRcdCAqIGNob3JkLmxvb3AgPSA4O1xuXHRcdCAqIGNob3JkLmxvb3BFbmQgPSBcIjFtXCI7XG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ3ZhbHVlJ1xuXHQgICAgICAgIF0sIFRvbmUuRXZlbnQpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBMb29wIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUgIHtCb29sZWFufFBvc2l0aXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wID0gb3B0aW9ucy5sb29wO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2UuXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB3aGljaCBpcyBwYXNzZWQgdG8gdGhlXG5cdFx0XHQgKiAgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdFx0XHQgKiAgQHR5cGUgIHsqfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVuIHRoZSBub3RlIGlzIHNjaGVkdWxlZCB0byBzdGFydC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKG9wdGlvbnMubG9vcFN0YXJ0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVuIHRoZSBub3RlIGlzIHNjaGVkdWxlZCB0byBzdGFydC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhvcHRpb25zLmxvb3BFbmQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRyYWNrcyB0aGUgc2NoZWR1bGVkIGV2ZW50c1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGUgbm90ZS4gQSBzcGVlZCBvZiAxXG5cdFx0XHQgKiAgaXMgbm8gY2hhbmdlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGRlbGF5IHRpbWUgZnJvbSB3aGVuIHRoZSBldmVudCBpcyBzY2hlZHVsZWQgdG8gc3RhcnRcblx0XHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0T2Zmc2V0ID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBwcml2YXRlIGhvbGRlciBvZiBwcm9iYWJpbGl0eSB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcHJvYmFiaWxpdHkgPSBvcHRpb25zLnByb2JhYmlsaXR5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhbW91bnQgb2YgdmFyaWF0aW9uIGZyb20gdGhlXG5cdFx0XHQgKiAgZ2l2ZW4gdGltZS5cblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9odW1hbml6ZSA9IG9wdGlvbnMuaHVtYW5pemU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSWYgbXV0ZSBpcyB0cnVlLCB0aGUgY2FsbGJhY2sgd29uJ3QgYmVcblx0XHRcdCAqICBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAnMW0nLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICd2YWx1ZSc6IG51bGwsXG5cdCAgICAgICAgJ3Byb2JhYmlsaXR5JzogMSxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlLFxuXHQgICAgICAgICdodW1hbml6ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlc2NoZWR1bGUgYWxsIG9mIHRoZSBldmVudHMgYWxvbmcgdGhlIHRpbWVsaW5lXG5cdFx0ICogIHdpdGggdGhlIHVwZGF0ZWQgdmFsdWVzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGFmdGVyIE9ubHkgcmVzY2hlZHVsZXMgZXZlbnRzIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLl9yZXNjaGVkdWxlRXZlbnRzID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgLy9pZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgc2NoZWR1bGVzIGFsbCBvZiB0aGUgZXZlbnRzXG5cdCAgICAgICAgYWZ0ZXIgPSBUb25lLmRlZmF1bHRBcmcoYWZ0ZXIsIC0xKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoRnJvbShhZnRlciwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHZhciBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChldmVudC5pZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB2YXIgc3RhcnRUaWNrID0gZXZlbnQudGltZSArIE1hdGgucm91bmQodGhpcy5zdGFydE9mZnNldCAvIHRoaXMuX3BsYXliYWNrUmF0ZSk7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gSW5maW5pdHk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodGhpcy5fbG9vcCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSB0aGlzLl9sb29wICogdGhpcy5fZ2V0TG9vcER1cmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0RXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXRBZnRlcihzdGFydFRpY2spO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0RXZlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBNYXRoLm1pbihkdXJhdGlvbiwgbmV4dEV2ZW50LnRpbWUgLSBzdGFydFRpY2spO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBpZiAoZHVyYXRpb24gIT09IEluZmluaXR5KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vc2NoZWR1bGUgYSBzdG9wIHNpbmNlIGl0J3MgZmluaXRlIGR1cmF0aW9uXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgc3RhcnRUaWNrICsgZHVyYXRpb24gKyAxKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBUb25lLlRpY2tzKGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGludGVydmFsID0gVG9uZS5UaWNrcyh0aGlzLl9nZXRMb29wRHVyYXRpb24oKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQuaWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZVJlcGVhdCh0aGlzLl90aWNrLmJpbmQodGhpcyksIGludGVydmFsLCBUb25lLlRpY2tzKHN0YXJ0VGljayksIGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQuaWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZSh0aGlzLl90aWNrLmJpbmQodGhpcyksIFRvbmUuVGlja3Moc3RhcnRUaWNrKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgbm90ZSwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnRpY2tzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3RhcnQgZnJvbSB0aGUgc2NoZWR1bGVkIHN0YXJ0IHRpbWVcblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQG5hbWUgc3RhcnRPZmZzZXRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3N0YXJ0T2Zmc2V0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2JhYmlsaXR5IG9mIHRoZSBub3RlcyBiZWluZyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2JhYmlsaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdwcm9iYWJpbGl0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2JhYmlsaXR5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvYikge1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9iYWJpbGl0eSA9IHByb2I7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgc2V0IHRvIHRydWUsIHdpbGwgYXBwbHkgc21hbGwgcmFuZG9tIHZhcmlhdGlvblxuXHRcdCAqICB0byB0aGUgY2FsbGJhY2sgdGltZS4gSWYgdGhlIHZhbHVlIGlzIGdpdmVuIGFzIGEgdGltZSwgaXQgd2lsbCByYW5kb21pemVcblx0XHQgKiAgYnkgdGhhdCBhbW91bnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogZXZlbnQuaHVtYW5pemUgPSB0cnVlO1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdCAqICBAbmFtZSBodW1hbml6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnaHVtYW5pemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9odW1hbml6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhcmlhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9odW1hbml6ZSA9IHZhcmlhdGlvbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIHRpbWUgIFdoZW4gdGhlIG5vdGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAnc3RhdGUnOiBUb25lLlN0YXRlLlN0YXJ0ZWQsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IHRpbWUsXG5cdCAgICAgICAgICAgICAgICAnaWQnOiB1bmRlZmluZWRcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBFdmVudCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIHRpbWUgIFdoZW4gdGhlIG5vdGUgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXNFdmVudCA9IHRoaXMuX3N0YXRlLmdldEJlZm9yZSh0aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHJlc2NoZWR1bFRpbWUgPSB0aW1lO1xuXHQgICAgICAgICAgICBpZiAocHJldmlvdXNFdmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgcmVzY2hlZHVsVGltZSA9IHByZXZpb3VzRXZlbnQudGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKHJlc2NoZWR1bFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGFsbCBzY2hlZHVsZWQgZXZlbnRzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgW3RpbWU9MF0gIFRoZSB0aW1lIGFmdGVyIHdoaWNoIGV2ZW50cyB3aWxsIGJlIGNhbmNlbC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLmRlZmF1bHRBcmcodGltZSwgLUluZmluaXR5KTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hGcm9tKHRpbWUsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlci4gQWxzb1xuXHRcdCAqICBjaGVja3MgaWYgdGhlIEV2ZW50IGlzIGRvbmUgcGxheWluZ1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSBvZiB0aGUgZXZlbnQgaW4gc2Vjb25kc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB0aWNrcyA9IFRvbmUuVHJhbnNwb3J0LmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmICghdGhpcy5tdXRlICYmIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpY2tzKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnByb2JhYmlsaXR5IDwgMSAmJiBNYXRoLnJhbmRvbSgpID4gdGhpcy5wcm9iYWJpbGl0eSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmh1bWFuaXplKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdmFyaWF0aW9uID0gMC4wMjtcblx0ICAgICAgICAgICAgICAgIGlmICghVG9uZS5pc0Jvb2xlYW4odGhpcy5odW1hbml6ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24gPSB0aGlzLnRvU2Vjb25kcyh0aGlzLmh1bWFuaXplKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRpbWUgKz0gKE1hdGgucmFuZG9tKCkgKiAyIC0gMSkgKiB2YXJpYXRpb247XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB0aGlzLnZhbHVlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgZHVyYXRpb24gb2YgdGhlIGxvb3AuXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLl9nZXRMb29wRHVyYXRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoKHRoaXMuX2xvb3BFbmQgLSB0aGlzLl9sb29wU3RhcnQpIC8gdGhpcy5fcGxheWJhY2tSYXRlKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIG5vdGUgc2hvdWxkIGxvb3Agb3Igbm90XG5cdFx0ICogIGJldHdlZW4gVG9uZS5FdmVudC5sb29wU3RhcnQgYW5kXG5cdFx0ICogIFRvbmUuRXZlbnQubG9vcEVuZC4gQW4gaW50ZWdlclxuXHRcdCAqICB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mXG5cdFx0ICogIGxvb3BzIHRoZSBFdmVudCBkb2VzIGFmdGVyIGl0IHN0YXJ0cy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFBvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBsb29wXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdsb29wJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3ApIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0VGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIG5vdGUuIERlZmF1bHRzIHRvIDEuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG5vdGUubG9vcCA9IHRydWU7XG5cdFx0ICogLy9yZXBlYXQgdGhlIG5vdGUgdHdpY2UgYXMgZmFzdFxuXHRcdCAqIG5vdGUucGxheWJhY2tSYXRlID0gMjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBsb29wRW5kIHBvaW50IGlzIHRoZSB0aW1lIHRoZSBldmVudCB3aWxsIGxvb3Bcblx0XHQgKiAgaWYgVG9uZS5FdmVudC5sb29wIGlzIHRydWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcEVuZCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wRW5kKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvVGlja3MobG9vcEVuZCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSB3aGVuIHRoZSBsb29wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcFN0YXJ0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3MobG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IHByb2dyZXNzIG9mIHRoZSBsb29wIGludGVydmFsLlxuXHRcdCAqICBSZXR1cm5zIDAgaWYgdGhlIGV2ZW50IGlzIG5vdCBzdGFydGVkIHlldCBvclxuXHRcdCAqICBpdCBpcyBub3Qgc2V0IHRvIGxvb3AuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2dyZXNzXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAncHJvZ3Jlc3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdGlja3MgPSBUb25lLlRyYW5zcG9ydC50aWNrcztcblx0ICAgICAgICAgICAgICAgIHZhciBsYXN0RXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQodGlja3MpO1xuXHQgICAgICAgICAgICAgICAgaWYgKGxhc3RFdmVudCAhPT0gbnVsbCAmJiBsYXN0RXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBsb29wRHVyYXRpb24gPSB0aGlzLl9nZXRMb29wRHVyYXRpb24oKTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcHJvZ3Jlc3MgPSAodGlja3MgLSBsYXN0RXZlbnQudGltZSkgJSBsb29wRHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2dyZXNzIC8gbG9vcER1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY2FuY2VsKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FdmVudDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkxvb3AgY3JlYXRlcyBhIGxvb3BlZCBjYWxsYmFjayBhdCB0aGUgXG5cdFx0ICogICAgICAgICBzcGVjaWZpZWQgaW50ZXJ2YWwuIFRoZSBjYWxsYmFjayBjYW4gYmUgXG5cdFx0ICogICAgICAgICBzdGFydGVkLCBzdG9wcGVkIGFuZCBzY2hlZHVsZWQgYWxvbmdcblx0XHQgKiAgICAgICAgIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZS4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGxvb3AgPSBuZXcgVG9uZS5Mb29wKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly90cmlnZ2VyZWQgZXZlcnkgZWlnaHRoIG5vdGUuIFxuXHRcdCAqIFx0Y29uc29sZS5sb2codGltZSk7XG5cdFx0ICogfSwgXCI4blwiKS5zdGFydCgwKTtcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydCgpO1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBpbnRlcnZhbCBUaGUgdGltZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbGJhY2sgY2FsbHMuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2ludGVydmFsJ1xuXHQgICAgICAgIF0sIFRvbmUuTG9vcCk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBldmVudCB3aGljaCBwcm9kdWNlcyB0aGUgY2FsbGJhY2tzXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudCA9IG5ldyBUb25lLkV2ZW50KHtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogdGhpcy5fdGljay5iaW5kKHRoaXMpLFxuXHQgICAgICAgICAgICAnbG9vcCc6IHRydWUsXG5cdCAgICAgICAgICAgICdsb29wRW5kJzogb3B0aW9ucy5pbnRlcnZhbCxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IG9wdGlvbnMucGxheWJhY2tSYXRlLFxuXHQgICAgICAgICAgICAncHJvYmFiaWxpdHknOiBvcHRpb25zLnByb2JhYmlsaXR5XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZSBuZXh0IGV2ZW50IGluIHRoZSBwYXR0ZXJuXG5cdFx0XHQgKiAgQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLy9zZXQgdGhlIGl0ZXJhdGlvbnNcblx0ICAgICAgICB0aGlzLml0ZXJhdGlvbnMgPSBvcHRpb25zLml0ZXJhdGlvbnM7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Mb29wKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdpbnRlcnZhbCc6ICc0bicsXG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdpdGVyYXRpb25zJzogSW5maW5pdHksXG5cdCAgICAgICAgJ3Byb2JhYmlsaXR5JzogdHJ1ZSxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBsb29wIGF0IHRoZSBzcGVjaWZpZWQgdGltZSBhbG9uZyB0aGUgVHJhbnNwb3J0J3Ncblx0XHQgKiAgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb249fSAgdGltZSAgV2hlbiB0byBzdGFydCB0aGUgTG9vcC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBsb29wIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9uPX0gIHRpbWUgIFdoZW4gdG8gc3RvcCB0aGUgQXJwZWdnaW9cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGFsbCBzY2hlZHVsZWQgZXZlbnRzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgW3RpbWU9MF0gIFRoZSB0aW1lIGFmdGVyIHdoaWNoIGV2ZW50cyB3aWxsIGJlIGNhbmNlbC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudC5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBub3RlcyBzaG91bGQgYmUgY2FsbGVkXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRoZSBldmVudCBvY2N1cnNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdGF0ZSBvZiB0aGUgTG9vcCwgZWl0aGVyIHN0YXJ0ZWQgb3Igc3RvcHBlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQuc3RhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2dyZXNzIG9mIHRoZSBsb29wIGFzIGEgdmFsdWUgYmV0d2VlbiAwLTEuIDAsIHdoZW5cblx0XHQgKiAgdGhlIGxvb3AgaXMgc3RvcHBlZCBvciBkb25lIGl0ZXJhdGluZy4gXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvZ3Jlc3Ncblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3Byb2dyZXNzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQucHJvZ3Jlc3M7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxiYWNrcy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogbG9vcC5pbnRlcnZhbCA9IFwiOG5cIjsgLy9sb29wIGV2ZXJ5IDhuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBpbnRlcnZhbFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdpbnRlcnZhbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50Lmxvb3BFbmQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5sb29wRW5kID0gaW50ZXJ2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIGxvb3AuIFRoZSBub3JtYWwgcGxheWJhY2sgcmF0ZSBpcyAxIChubyBjaGFuZ2UpLiBcblx0XHQgKiAgQSBgcGxheWJhY2tSYXRlYCBvZiAyIHdvdWxkIGJlIHR3aWNlIGFzIGZhc3QuIFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50LnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQucGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSYW5kb20gdmFyaWF0aW9uICsvLTAuMDFzIHRvIHRoZSBzY2hlZHVsZWQgdGltZS4gXG5cdFx0ICogIE9yIGdpdmUgaXQgYSB0aW1lIHZhbHVlIHdoaWNoIGl0IHdpbGwgcmFuZG9taXplIGJ5LlxuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAbmFtZSBodW1hbml6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdodW1hbml6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50Lmh1bWFuaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFyaWF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmh1bWFuaXplID0gdmFyaWF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcm9iYWJseSBvZiB0aGUgY2FsbGJhY2sgYmVpbmcgaW52b2tlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9iYWJpbGl0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdwcm9iYWJpbGl0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50LnByb2JhYmlsaXR5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvYikge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5wcm9iYWJpbGl0eSA9IHByb2I7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgTXV0aW5nIHRoZSBMb29wIG1lYW5zIHRoYXQgbm8gY2FsbGJhY2tzIGFyZSBpbnZva2VkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgbXV0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBsb29wLiBUaGUgZGVmYXVsdFxuXHRcdCAqICB2YWx1ZSBpcyBJbmZpbml0eSAobG9vcCBmb3JldmVyKS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBpdGVyYXRpb25zXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ2l0ZXJhdGlvbnMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9ldmVudC5sb29wID09PSB0cnVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQubG9vcDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaXRlcnMpIHtcblx0ICAgICAgICAgICAgaWYgKGl0ZXJzID09PSBJbmZpbml0eSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnQubG9vcCA9IHRydWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudC5sb29wID0gaXRlcnM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ldmVudCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTG9vcDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGFydCBpcyBhIGNvbGxlY3Rpb24gVG9uZS5FdmVudHMgd2hpY2ggY2FuIGJlXG5cdFx0ICogICAgICAgICBzdGFydGVkL3N0b3BwZWQgYW5kIGxvb3BlZCBhcyBhIHNpbmdsZSB1bml0LlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkV2ZW50fVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIG9uIGVhY2ggZXZlbnRcblx0XHQgKiAgQHBhcmFtIHtBcnJheX0gZXZlbnRzIHRoZSBhcnJheSBvZiBldmVudHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGFydCA9IG5ldyBUb25lLlBhcnQoZnVuY3Rpb24odGltZSwgbm90ZSl7XG5cdFx0ICogXHQvL3RoZSBub3RlcyBnaXZlbiBhcyB0aGUgc2Vjb25kIGVsZW1lbnQgaW4gdGhlIGFycmF5XG5cdFx0ICogXHQvL3dpbGwgYmUgcGFzc2VkIGluIGFzIHRoZSBzZWNvbmQgYXJndW1lbnRcblx0XHQgKiBcdHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKG5vdGUsIFwiOG5cIiwgdGltZSk7XG5cdFx0ICogfSwgW1swLCBcIkMyXCJdLCBbXCIwOjJcIiwgXCJDM1wiXSwgW1wiMDozOjJcIiwgXCJHMlwiXV0pO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdXNlIGFuIGFycmF5IG9mIG9iamVjdHMgYXMgbG9uZyBhcyB0aGUgb2JqZWN0IGhhcyBhIFwidGltZVwiIGF0dHJpYnV0ZVxuXHRcdCAqIHZhciBwYXJ0ID0gbmV3IFRvbmUuUGFydChmdW5jdGlvbih0aW1lLCB2YWx1ZSl7XG5cdFx0ICogXHQvL3RoZSB2YWx1ZSBpcyBhbiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYm90aCB0aGUgbm90ZSBhbmQgdGhlIHZlbG9jaXR5XG5cdFx0ICogXHRzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSh2YWx1ZS5ub3RlLCBcIjhuXCIsIHRpbWUsIHZhbHVlLnZlbG9jaXR5KTtcblx0XHQgKiB9LCBbe1widGltZVwiIDogMCwgXCJub3RlXCIgOiBcIkMzXCIsIFwidmVsb2NpdHlcIjogMC45fSxcblx0XHQgKiBcdCAgIHtcInRpbWVcIiA6IFwiMDoyXCIsIFwibm90ZVwiIDogXCJDNFwiLCBcInZlbG9jaXR5XCI6IDAuNX1cblx0XHQgKiBdKS5zdGFydCgwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdldmVudHMnXG5cdCAgICAgICAgXSwgVG9uZS5QYXJ0KTtcblx0ICAgICAgICBUb25lLkV2ZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW4gYXJyYXkgb2YgT2JqZWN0cy5cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBbXTtcblx0ICAgICAgICAvL2FkZCB0aGUgZXZlbnRzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmV2ZW50c1tpXSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYWRkKG9wdGlvbnMuZXZlbnRzW2ldWzBdLCBvcHRpb25zLmV2ZW50c1tpXVsxXSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmFkZChvcHRpb25zLmV2ZW50c1tpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYXJ0LCBUb25lLkV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdjYWxsYmFjayc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wRW5kJzogJzFtJyxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAncHJvYmFiaWxpdHknOiAxLFxuXHQgICAgICAgICdodW1hbml6ZSc6IGZhbHNlLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2UsXG5cdCAgICAgICAgJ2V2ZW50cyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBwYXJ0IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSAgdGltZSAgICBXaGVuIHRvIHN0YXJ0IHRoZSBwYXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIG9mZnNldCAgVGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFydFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmVnaW4gcGxheWluZyBhdC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aWNrcykgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgdGhpcy5fbG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9UaWNrcyhvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5hZGQoe1xuXHQgICAgICAgICAgICAgICAgJ3N0YXRlJzogVG9uZS5TdGF0ZS5TdGFydGVkLFxuXHQgICAgICAgICAgICAgICAgJ3RpbWUnOiB0aWNrcyxcblx0ICAgICAgICAgICAgICAgICdvZmZzZXQnOiBvZmZzZXRcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdGFydE5vdGUoZXZlbnQsIHRpY2tzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBldmVudCBpbiB0aGUgZ2l2ZW4gZXZlbnQgYXQgdGhlIGNvcnJlY3QgdGltZSBnaXZlblxuXHRcdCAqICB0aGUgdGlja3MgYW5kIG9mZnNldCBhbmQgbG9vcGluZy5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudH0gIGV2ZW50XG5cdFx0ICogIEBwYXJhbSAge1RpY2tzfSAgdGlja3Ncblx0XHQgKiAgQHBhcmFtICB7VGlja3N9ICBvZmZzZXRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3N0YXJ0Tm90ZSA9IGZ1bmN0aW9uIChldmVudCwgdGlja3MsIG9mZnNldCkge1xuXHQgICAgICAgIHRpY2tzIC09IG9mZnNldDtcblx0ICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPj0gdGhpcy5fbG9vcFN0YXJ0ICYmIGV2ZW50LnN0YXJ0T2Zmc2V0IDwgdGhpcy5fbG9vcEVuZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0IDwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9zdGFydCBpdCBvbiB0aGUgbmV4dCBsb29wXG5cdCAgICAgICAgICAgICAgICAgICAgdGlja3MgKz0gdGhpcy5fZ2V0TG9vcER1cmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBldmVudC5zdGFydChUb25lLlRpY2tzKHRpY2tzKSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPCB0aGlzLl9sb29wU3RhcnQgJiYgZXZlbnQuc3RhcnRPZmZzZXQgPj0gb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5sb29wID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICBldmVudC5zdGFydChUb25lLlRpY2tzKHRpY2tzKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0ID49IG9mZnNldCkge1xuXHQgICAgICAgICAgICBldmVudC5zdGFydChUb25lLlRpY2tzKHRpY2tzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3RhcnQgZnJvbSB0aGUgc2NoZWR1bGVkIHN0YXJ0IHRpbWVcblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAbmFtZSBzdGFydE9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdzdGFydE9mZnNldCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0T2Zmc2V0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0T2Zmc2V0ID0gb2Zmc2V0O1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuc3RhcnRPZmZzZXQgKz0gdGhpcy5fc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIHBhcnQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICB0aW1lICBXaGVuIHRvIHN0b3AgdGhlIHBhcnQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB0aWNrcyA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGlja3MpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGlja3MpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LnN0b3AodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldC9TZXQgYW4gRXZlbnQncyB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgSWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW4gYW5kIG5vIGV2ZW50IGV4aXN0cyBhdFxuXHRcdCAqICB0aGUgZ2l2ZW4gdGltZSwgb25lIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoYXQgdmFsdWUuXG5cdFx0ICogIElmIHR3byBldmVudHMgYXJlIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBmaXJzdCBvbmUgd2lsbFxuXHRcdCAqICBiZSByZXR1cm5lZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwYXJ0LmF0KFwiMW1cIik7IC8vcmV0dXJucyB0aGUgcGFydCBhdCB0aGUgZmlyc3QgbWVhc3VyZVxuXHRcdCAqXG5cdFx0ICogcGFydC5hdChcIjJtXCIsIFwiQzJcIik7IC8vc2V0IHRoZSB2YWx1ZSBhdCBcIjJtXCIgdG8gQzIuXG5cdFx0ICogLy9pZiBhbiBldmVudCBkaWRuJ3QgZXhpc3QgYXQgdGhhdCB0aW1lLCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnQgdG8gZ2V0IG9yIHNldC5cblx0XHQgKiAgQHBhcmFtIHsqPX0gdmFsdWUgSWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW4sIHRoZSB2YWx1ZSBvZiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgZXZlbnQgYXQgdGhlIGdpdmVuIHRpbWUgd2lsbCBiZSBzZXQgdG8gaXQuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRXZlbnR9IHRoZSBldmVudCBhdCB0aGUgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgdmFyIHRpY2tUaW1lID0gVG9uZS5UaWNrcygxKS50b1NlY29uZHMoKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHNbaV07XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aW1lLnRvVGlja3MoKSAtIGV2ZW50LnN0YXJ0T2Zmc2V0KSA8IHRpY2tUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodmFsdWUpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQudmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2lmIHRoZXJlIHdhcyBubyBldmVudCBhdCB0aGF0IHRpbWUsIGNyZWF0ZSBvbmVcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuYWRkKHRpbWUsIHZhbHVlKTtcblx0ICAgICAgICAgICAgLy9yZXR1cm4gdGhlIG5ldyBldmVudFxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzW3RoaXMuX2V2ZW50cy5sZW5ndGggLSAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIGFuIGV2ZW50IHRvIHRoZSBwYXJ0LlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgdGhlIG5vdGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW4sIGl0IHNob3VsZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgYSAndGltZScgYXR0cmlidXRlIGFuZCB0aGUgcmVzdFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBvYmplY3Qgd2lsbCBiZSB1c2VkIGFzIHRoZSAndmFsdWUnLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fCp9ICB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJ0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcGFydC5hZGQoXCIxbVwiLCBcIkMjKzExXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGltZSwgdmFsdWUpIHtcblx0ICAgICAgICAvL2V4dHJhY3QgdGhlIHBhcmFtZXRlcnNcblx0ICAgICAgICBpZiAodGltZS5oYXNPd25Qcm9wZXJ0eSgndGltZScpKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGltZTtcblx0ICAgICAgICAgICAgdGltZSA9IHZhbHVlLnRpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgdmFyIGV2ZW50O1xuXHQgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRvbmUuRXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgZXZlbnQuY2FsbGJhY2sgPSB0aGlzLl90aWNrLmJpbmQodGhpcyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSBuZXcgVG9uZS5FdmVudCh7XG5cdCAgICAgICAgICAgICAgICAnY2FsbGJhY2snOiB0aGlzLl90aWNrLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy90aGUgc3RhcnQgb2Zmc2V0XG5cdCAgICAgICAgZXZlbnQuc3RhcnRPZmZzZXQgPSB0aW1lO1xuXHQgICAgICAgIC8vaW5pdGlhbGl6ZSB0aGUgdmFsdWVzXG5cdCAgICAgICAgZXZlbnQuc2V0KHtcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiB0aGlzLmxvb3BFbmQsXG5cdCAgICAgICAgICAgICdsb29wU3RhcnQnOiB0aGlzLmxvb3BTdGFydCxcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0aGlzLmxvb3AsXG5cdCAgICAgICAgICAgICdodW1hbml6ZSc6IHRoaXMuaHVtYW5pemUsXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiB0aGlzLnBsYXliYWNrUmF0ZSxcblx0ICAgICAgICAgICAgJ3Byb2JhYmlsaXR5JzogdGhpcy5wcm9iYWJpbGl0eVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5wdXNoKGV2ZW50KTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBub3RlIGlmIGl0IHNob3VsZCBiZSBwbGF5ZWQgcmlnaHQgbm93XG5cdCAgICAgICAgdGhpcy5fcmVzdGFydEV2ZW50KGV2ZW50KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVzdGFydCB0aGUgZ2l2ZW4gZXZlbnRcblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudH0gIGV2ZW50XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9yZXN0YXJ0RXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZUV2ZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChzdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0Tm90ZShldmVudCwgc3RhdGVFdmVudC50aW1lLCBzdGF0ZUV2ZW50Lm9mZnNldCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvL3N0b3AgdGhlIG5vdGVcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0b3AoVG9uZS5UaWNrcyhzdGF0ZUV2ZW50LnRpbWUpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSBwYXJ0LiBXaWxsIHJlY3Vyc2l2ZWx5IGl0ZXJhdGVcblx0XHQgKiAgaW50byBuZXN0ZWQgcGFydHMgdG8gZmluZCB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiAgQHBhcmFtIHsqfSB2YWx1ZSBPcHRpb25hbGx5IHNlbGVjdCBvbmx5IGEgc3BlY2lmaWMgZXZlbnQgdmFsdWVcblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgLy9leHRyYWN0IHRoZSBwYXJhbWV0ZXJzXG5cdCAgICAgICAgaWYgKHRpbWUuaGFzT3duUHJvcGVydHkoJ3RpbWUnKSkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRpbWU7XG5cdCAgICAgICAgICAgIHRpbWUgPSB2YWx1ZS50aW1lO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9ldmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBUb25lLlBhcnQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnJlbW92ZSh0aW1lLCB2YWx1ZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYodmFsdWUpIHx8IFRvbmUuaXNEZWZpbmVkKHZhbHVlKSAmJiBldmVudC52YWx1ZSA9PT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGFsbCBvZiB0aGUgbm90ZXMgZnJvbSB0aGUgZ3JvdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gW107XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBzY2hlZHVsZWQgc3RhdGUgY2hhbmdlIGV2ZW50czogaS5lLiBcInN0YXJ0XCIgYW5kIFwic3RvcFwiLlxuXHRcdCAqICBAcGFyYW0ge1RpbWVsaW5lUG9zaXRpb259IGFmdGVyIFRoZSB0aW1lIGFmdGVyIHdoaWNoIHRvIGNhbmNlbCB0aGUgc2NoZWR1bGVkIGV2ZW50cy5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuY2FuY2VsKGFmdGVyKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGhpcy50b1RpY2tzKGFmdGVyKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIGV2ZW50c1xuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gY3R4IFRoZSBjb250ZXh0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjdHgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzKSB7XG5cdCAgICAgICAgICAgIGN0eCA9IFRvbmUuZGVmYXVsdEFyZyhjdHgsIHRoaXMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fZXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMuX2V2ZW50c1tpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgVG9uZS5QYXJ0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZS5fZm9yRWFjaChjYWxsYmFjaywgY3R4KTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjdHgsIGUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGF0dHJpYnV0ZSBvZiBhbGwgb2YgdGhlIGV2ZW50c1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBhdHRyICB0aGUgYXR0cmlidXRlIHRvIHNldFxuXHRcdCAqICBAcGFyYW0gIHsqfSAgdmFsdWUgICAgICBUaGUgdmFsdWUgdG8gc2V0IGl0IHRvXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9zZXRBbGwgPSBmdW5jdGlvbiAoYXR0ciwgdmFsdWUpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudFthdHRyXSA9IHZhbHVlO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCB0aWNrIG1ldGhvZFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSBvZiB0aGUgZXZlbnQgaW4gc2Vjb25kc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIGlmICghdGhpcy5tdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgdmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRGV0ZXJtaW5lIGlmIHRoZSBldmVudCBzaG91bGQgYmUgY3VycmVudGx5IGxvb3Bpbmdcblx0XHQgKiAgZ2l2ZW4gdGhlIGxvb3AgYm91bmRyaWVzIG9mIHRoaXMgUGFydC5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gdGVzdFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fdGVzdExvb3BCb3VuZHJpZXMgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPCB0aGlzLl9sb29wU3RhcnQgfHwgZXZlbnQuc3RhcnRPZmZzZXQgPj0gdGhpcy5fbG9vcEVuZCkge1xuXHQgICAgICAgICAgICBldmVudC5jYW5jZWwoMCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIC8vcmVzY2hlZHVsZSBpdCBpZiBpdCdzIHN0b3BwZWRcblx0ICAgICAgICAgICAgdGhpcy5fcmVzdGFydEV2ZW50KGV2ZW50KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgbm90ZXMgYmVpbmcgdHJpZ2dlcmVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2JhYmlsaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ3Byb2JhYmlsaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvYmFiaWxpdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9iKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2JhYmlsaXR5ID0gcHJvYjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QWxsKCdwcm9iYWJpbGl0eScsIHByb2IpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHNldCB0byB0cnVlLCB3aWxsIGFwcGx5IHNtYWxsIHJhbmRvbSB2YXJpYXRpb25cblx0XHQgKiAgdG8gdGhlIGNhbGxiYWNrIHRpbWUuIElmIHRoZSB2YWx1ZSBpcyBnaXZlbiBhcyBhIHRpbWUsIGl0IHdpbGwgcmFuZG9taXplXG5cdFx0ICogIGJ5IHRoYXQgYW1vdW50LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGV2ZW50Lmh1bWFuaXplID0gdHJ1ZTtcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58VGltZX1cblx0XHQgKiAgQG5hbWUgaHVtYW5pemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnaHVtYW5pemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9odW1hbml6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhcmlhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9odW1hbml6ZSA9IHZhcmlhdGlvbjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QWxsKCdodW1hbml6ZScsIHZhcmlhdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIHBhcnQgc2hvdWxkIGxvb3Agb3Igbm90XG5cdFx0ICogIGJldHdlZW4gVG9uZS5QYXJ0Lmxvb3BTdGFydCBhbmRcblx0XHQgKiAgVG9uZS5QYXJ0Lmxvb3BFbmQuIEFuIGludGVnZXJcblx0XHQgKiAgdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhlIG51bWJlciBvZlxuXHRcdCAqICBsb29wcyB0aGUgUGFydCBkb2VzIGFmdGVyIGl0IHN0YXJ0cy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGxvb3Bcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xvb3AgdGhlIHBhcnQgOCB0aW1lc1xuXHRcdCAqIHBhcnQubG9vcCA9IDg7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Ll9sb29wU3RhcnQgPSB0aGlzLl9sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgICAgICBldmVudC5fbG9vcEVuZCA9IHRoaXMuX2xvb3BFbmQ7XG5cdCAgICAgICAgICAgICAgICBldmVudC5sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Rlc3RMb29wQm91bmRyaWVzKGV2ZW50KTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGxvb3BFbmQgcG9pbnQgZGV0ZXJtaW5lcyB3aGVuIGl0IHdpbGxcblx0XHQgKiAgbG9vcCBpZiBUb25lLlBhcnQubG9vcCBpcyB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wRW5kKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhsb29wRW5kKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQubG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGVzdExvb3BCb3VuZHJpZXMoZXZlbnQpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbG9vcFN0YXJ0IHBvaW50IGRldGVybWluZXMgd2hlbiBpdCB3aWxsXG5cdFx0ICogIGxvb3AgaWYgVG9uZS5QYXJ0Lmxvb3AgaXMgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BTdGFydCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wU3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKGxvb3BTdGFydCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3BTdGFydCA9IHRoaXMubG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rlc3RMb29wQm91bmRyaWVzKGV2ZW50KTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBwYXJ0XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QWxsKCdwbGF5YmFja1JhdGUnLCByYXRlKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0VGhlIG51bWJlciBvZiBzY2hlZHVsZWQgbm90ZXMgaW4gdGhlIHBhcnQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgbGVuZ3RoXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudHMubGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5yZW1vdmVBbGwoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFydDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBhdHRlcm4gYXJwZWdnaWF0ZXMgYmV0d2VlbiB0aGUgZ2l2ZW4gbm90ZXNcblx0XHQgKiAgICAgICAgIGluIGEgbnVtYmVyIG9mIHBhdHRlcm5zLiBTZWUgVG9uZS5DdHJsUGF0dGVybiBmb3Jcblx0XHQgKiAgICAgICAgIGEgZnVsbCBsaXN0IG9mIHBhdHRlcm5zLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwYXR0ZXJuID0gbmV3IFRvbmUuUGF0dGVybihmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiAgIC8vdGhlIG9yZGVyIG9mIHRoZSBub3RlcyBwYXNzZWQgaW4gZGVwZW5kcyBvbiB0aGUgcGF0dGVyblxuXHRcdCAqIH0sIFtcIkMyXCIsIFwiRDRcIiwgXCJFNVwiLCBcIkE2XCJdLCBcInVwRG93blwiKTtcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTG9vcH1cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5cblx0XHQgKiAgQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXJwZWdnaWF0ZSBvdmVyLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXR0ZXJuID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ3ZhbHVlcycsXG5cdCAgICAgICAgICAgICdwYXR0ZXJuJ1xuXHQgICAgICAgIF0sIFRvbmUuUGF0dGVybik7XG5cdCAgICAgICAgVG9uZS5Mb29wLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhdHRlcm4gbWFuYWdlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkN0cmxQYXR0ZXJufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXR0ZXJuID0gbmV3IFRvbmUuQ3RybFBhdHRlcm4oe1xuXHQgICAgICAgICAgICAndmFsdWVzJzogb3B0aW9ucy52YWx1ZXMsXG5cdCAgICAgICAgICAgICd0eXBlJzogb3B0aW9ucy5wYXR0ZXJuLFxuXHQgICAgICAgICAgICAnaW5kZXgnOiBvcHRpb25zLmluZGV4XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYXR0ZXJuLCBUb25lLkxvb3ApO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BhdHRlcm4nOiBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXAsXG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICd2YWx1ZXMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgbm90ZXMgc2hvdWxkIGJlIGNhbGxlZFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0aGUgZXZlbnQgb2NjdXJzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4ucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHRoaXMuX3BhdHRlcm4udmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4ubmV4dCgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCBpbmRleCBpbiB0aGUgdmFsdWVzIGFycmF5LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGluZGV4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXR0ZXJuLnByb3RvdHlwZSwgJ2luZGV4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi5pbmRleDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGkpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGF0dGVybi5pbmRleCA9IGk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFycmF5IG9mIGV2ZW50cy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqICBAbmFtZSB2YWx1ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAndmFsdWVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi52YWx1ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhdHRlcm4udmFsdWVzID0gdmFscztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcGF0dGVybi5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHRlcm4udmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBhdHRlcm4gdHlwZS4gU2VlIFRvbmUuQ3RybFBhdHRlcm4gZm9yIHRoZSBmdWxsIGxpc3Qgb2YgcGF0dGVybnMuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIHBhdHRlcm5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAncGF0dGVybicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHRlcm4udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBhdHRlcm4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGF0dGVybi50eXBlID0gcGF0dGVybjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXR0ZXJufSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXR0ZXJuLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4gPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhdHRlcm47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIHNlcXVlbmNlIGlzIGFuIGFsdGVybmF0ZSBub3RhdGlvbiBvZiBhIHBhcnQuIEluc3RlYWRcblx0XHQgKiAgICAgICAgIG9mIHBhc3NpbmcgaW4gYW4gYXJyYXkgb2YgW3RpbWUsIGV2ZW50XSBwYWlycywgcGFzc1xuXHRcdCAqICAgICAgICAgaW4gYW4gYXJyYXkgb2YgZXZlbnRzIHdoaWNoIHdpbGwgYmUgc3BhY2VkIGF0IHRoZVxuXHRcdCAqICAgICAgICAgZ2l2ZW4gc3ViZGl2aXNpb24uIFN1Yi1hcnJheXMgd2lsbCBzdWJkaXZpZGUgdGhhdCBiZWF0XG5cdFx0ICogICAgICAgICBieSB0aGUgbnVtYmVyIG9mIGl0ZW1zIGFyZSBpbiB0aGUgYXJyYXkuXG5cdFx0ICogICAgICAgICBTZXF1ZW5jZSBub3RhdGlvbiBpbnNwaXJhdGlvbiBmcm9tIFtUaWRhbF0oaHR0cDovL3lheHUub3JnL3RpZGFsLylcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IG5vdGVcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICAgIGV2ZW50cyAgVGhlIHNlcXVlbmNlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHN1YmRpdmlzaW9uICBUaGUgc3ViZGl2aXNpb24gYmV0d2VlbiB3aGljaCBldmVudHMgYXJlIHBsYWNlZC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuUGFydH1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2VxID0gbmV3IFRvbmUuU2VxdWVuY2UoZnVuY3Rpb24odGltZSwgbm90ZSl7XG5cdFx0ICogXHRjb25zb2xlLmxvZyhub3RlKTtcblx0XHQgKiAvL3N0cmFpZ2h0IHF1YXRlciBub3Rlc1xuXHRcdCAqIH0sIFtcIkM0XCIsIFwiRTRcIiwgXCJHNFwiLCBcIkE0XCJdLCBcIjRuXCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzZXEgPSBuZXcgVG9uZS5TZXF1ZW5jZShmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKG5vdGUpO1xuXHRcdCAqIC8vc3ViZGl2aXNpb25zIGFyZSBnaXZlbiBhcyBzdWJhcnJheXNcblx0XHQgKiB9LCBbXCJDNFwiLCBbXCJFNFwiLCBcIkQ0XCIsIFwiRTRcIl0sIFwiRzRcIiwgW1wiQTRcIiwgXCJHNFwiXV0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdldmVudHMnLFxuXHQgICAgICAgICAgICAnc3ViZGl2aXNpb24nXG5cdCAgICAgICAgXSwgVG9uZS5TZXF1ZW5jZSk7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIGV2ZW50c1xuXHQgICAgICAgIHZhciBldmVudHMgPSBvcHRpb25zLmV2ZW50cztcblx0ICAgICAgICBkZWxldGUgb3B0aW9ucy5ldmVudHM7XG5cdCAgICAgICAgVG9uZS5QYXJ0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHN1YmRpdmlzb24gb2YgZWFjaCBub3RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUaWNrc31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ViZGl2aXNpb24gPSB0aGlzLnRvVGlja3Mob3B0aW9ucy5zdWJkaXZpc2lvbik7XG5cdCAgICAgICAgLy9pZiBubyB0aW1lIHdhcyBwYXNzZWQgaW4sIHRoZSBsb29wIGVuZCBpcyB0aGUgZW5kIG9mIHRoZSBjeWNsZVxuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYob3B0aW9ucy5sb29wRW5kKSAmJiBUb25lLmlzRGVmaW5lZChldmVudHMpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSBldmVudHMubGVuZ3RoICogdGhpcy5fc3ViZGl2aXNpb247XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vZGVmYXVsdHMgdG8gbG9vcGluZ1xuXHQgICAgICAgIHRoaXMuX2xvb3AgPSB0cnVlO1xuXHQgICAgICAgIC8vYWRkIGFsbCBvZiB0aGUgZXZlbnRzXG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGV2ZW50cykpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYWRkKGksIGV2ZW50c1tpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TZXF1ZW5jZSwgVG9uZS5QYXJ0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5kZWZhdWx0cyA9IHsgJ3N1YmRpdmlzaW9uJzogJzRuJyB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdWJkaXZpc2lvbiBvZiB0aGUgc2VxdWVuY2UuIFRoaXMgY2FuIG9ubHkgYmVcblx0XHQgKiAgc2V0IGluIHRoZSBjb25zdHJ1Y3Rvci4gVGhlIHN1YmRpdmlzaW9uIGlzIHRoZVxuXHRcdCAqICBpbnRlcnZhbCBiZXR3ZWVuIHN1Y2Nlc3NpdmUgc3RlcHMuXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5TZXF1ZW5jZSNcblx0XHQgKiAgQG5hbWUgc3ViZGl2aXNpb25cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUsICdzdWJkaXZpc2lvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fc3ViZGl2aXNpb24pLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEdldC9TZXQgYW4gaW5kZXggb2YgdGhlIHNlcXVlbmNlLiBJZiB0aGUgaW5kZXggY29udGFpbnMgYSBzdWJhcnJheSxcblx0XHQgKiAgYSBUb25lLlNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGF0IHN1Yi1hcnJheSB3aWxsIGJlIHJldHVybmVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzZXF1ZW5jZSA9IG5ldyBUb25lLlNlcXVlbmNlKHBsYXlOb3RlLCBbXCJFNFwiLCBcIkM0XCIsIFwiRiM0XCIsIFtcIkE0XCIsIFwiQmIzXCJdXSlcblx0XHQgKiBzZXF1ZW5jZS5hdCgwKS8vID0+IHJldHVybnMgXCJFNFwiXG5cdFx0ICogLy9zZXQgYSB2YWx1ZVxuXHRcdCAqIHNlcXVlbmNlLmF0KDAsIFwiRzNcIik7XG5cdFx0ICogLy9nZXQgYSBuZXN0ZWQgc2VxdWVuY2Vcblx0XHQgKiBzZXF1ZW5jZS5hdCgzKS5hdCgxKS8vID0+IHJldHVybnMgXCJCYjNcIlxuXHRcdCAqIEBwYXJhbSB7UG9zaXRpdmV9IGluZGV4IFRoZSBpbmRleCB0byBnZXQgb3Igc2V0XG5cdFx0ICogQHBhcmFtIHsqfSB2YWx1ZSBPcHRpb25hbGx5IHBhc3MgaW4gdGhlIHZhbHVlIHRvIHNldCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcblx0ICAgICAgICAvL2lmIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSxcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHZhbHVlKSkge1xuXHQgICAgICAgICAgICAvL3JlbW92ZSB0aGUgY3VycmVudCBldmVudCBhdCB0aGF0IGluZGV4XG5cdCAgICAgICAgICAgIHRoaXMucmVtb3ZlKGluZGV4KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jYWxsIHRoZSBwYXJlbnQncyBtZXRob2Rcblx0ICAgICAgICByZXR1cm4gVG9uZS5QYXJ0LnByb3RvdHlwZS5hdC5jYWxsKHRoaXMsIHRoaXMuX2luZGV4VGltZShpbmRleCksIHZhbHVlKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGFuIGV2ZW50IGF0IGFuIGluZGV4LCBpZiB0aGVyZSdzIGFscmVhZHkgc29tZXRoaW5nXG5cdFx0ICogIGF0IHRoYXQgaW5kZXgsIG92ZXJ3cml0ZSBpdC4gSWYgYHZhbHVlYCBpcyBhbiBhcnJheSxcblx0XHQgKiAgaXQgd2lsbCBiZSBwYXJzZWQgYXMgYSBzdWJzZXF1ZW5jZS5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGluZGV4IFRoZSBpbmRleCB0byBhZGQgdGhlIGV2ZW50IHRvXG5cdFx0ICogIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFkZCBhdCB0aGF0IGluZGV4XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNlcXVlbmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG5cdCAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHZhbHVlKSkge1xuXHQgICAgICAgICAgICAvL21ha2UgYSBzdWJzZXF1ZW5jZSBhbmQgYWRkIHRoYXQgdG8gdGhlIHNlcXVlbmNlXG5cdCAgICAgICAgICAgIHZhciBzdWJTdWJkaXZpc2lvbiA9IE1hdGgucm91bmQodGhpcy5fc3ViZGl2aXNpb24gLyB2YWx1ZS5sZW5ndGgpO1xuXHQgICAgICAgICAgICB2YWx1ZSA9IG5ldyBUb25lLlNlcXVlbmNlKHRoaXMuX3RpY2suYmluZCh0aGlzKSwgdmFsdWUsIFRvbmUuVGlja3Moc3ViU3ViZGl2aXNpb24pKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5hZGQuY2FsbCh0aGlzLCB0aGlzLl9pbmRleFRpbWUoaW5kZXgpLCB2YWx1ZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhIHZhbHVlIGZyb20gdGhlIHNlcXVlbmNlIGJ5IGluZGV4XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGV2ZW50IHRvIHJlbW92ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TZXF1ZW5jZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuUGFydC5wcm90b3R5cGUucmVtb3ZlLmNhbGwodGhpcywgdGhpcy5faW5kZXhUaW1lKGluZGV4KSwgdmFsdWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHRpbWUgb2YgdGhlIGluZGV4IGdpdmVuIHRoZSBTZXF1ZW5jZSdzIHN1YmRpdmlzaW9uXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGluZGV4XG5cdFx0ICogIEByZXR1cm4gIHtUaW1lfSAgVGhlIHRpbWUgb2YgdGhhdCBpbmRleFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUuX2luZGV4VGltZSA9IGZ1bmN0aW9uIChpbmRleCkge1xuXHQgICAgICAgIGlmIChpbmRleCBpbnN0YW5jZW9mIFRvbmUuVHJhbnNwb3J0VGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gaW5kZXg7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3MoaW5kZXggKiB0aGlzLl9zdWJkaXZpc2lvbiArIHRoaXMuc3RhcnRPZmZzZXQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuU2VxdWVuY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2VxdWVuY2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlB1bHNlT3NjaWxsYXRvciBpcyBhIHB1bHNlIG9zY2lsbGF0b3Igd2l0aCBjb250cm9sIG92ZXIgcHVsc2Ugd2lkdGgsXG5cdFx0ICogICAgICAgICBhbHNvIGtub3duIGFzIHRoZSBkdXR5IGN5Y2xlLiBBdCA1MCUgZHV0eSBjeWNsZSAod2lkdGggPSAwLjUpIHRoZSB3YXZlIGlzXG5cdFx0ICogICAgICAgICBhIHNxdWFyZSBhbmQgb25seSBvZGQtbnVtYmVyZWQgaGFybW9uaWNzIGFyZSBwcmVzZW50LiBBdCBhbGwgb3RoZXIgd2lkdGhzXG5cdFx0ICogICAgICAgICBldmVuLW51bWJlcmVkIGhhcm1vbmljcyBhcmUgcHJlc2VudC4gUmVhZCBtb3JlXG5cdFx0ICogICAgICAgICBbaGVyZV0oaHR0cHM6Ly93aWdnbGV3YXZlLndvcmRwcmVzcy5jb20vMjAxNC8wOC8xNi9wdWxzZS13YXZlZm9ybXMtYW5kLWhhcm1vbmljcy8pLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZnJlcXVlbmN5XSBUaGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt3aWR0aF0gVGhlIHdpZHRoIG9mIHRoZSBwdWxzZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwdWxzZSA9IG5ldyBUb25lLlB1bHNlT3NjaWxsYXRvcihcIkU1XCIsIDAuNCkudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3dpZHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgd2lkdGggb2YgdGhlIHB1bHNlLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndpZHRoID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMud2lkdGgsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZ2F0ZSB0aGUgd2lkdGggYW1vdW50XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzYXd0b290aCBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGggPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgZnJlcXVlbmN5OiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgZGV0dW5lOiBvcHRpb25zLmRldHVuZSxcblx0ICAgICAgICAgICAgdHlwZTogJ3Nhd3Rvb3RoJyxcblx0ICAgICAgICAgICAgcGhhc2U6IG9wdGlvbnMucGhhc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX3Nhd3Rvb3RoLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMuX3Nhd3Rvb3RoLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaHJlc2hvbGQgdGhlIHNpZ25hbCB0byB0dXJuIGl0IGludG8gYSBzcXVhcmVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKHZhbCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAtMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLmNoYWluKHRoaXMuX3RocmVzaCwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMud2lkdGguY2hhaW4odGhpcy5fd2lkdGhHYXRlLCB0aGlzLl90aHJlc2gpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3dpZHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QdWxzZU9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzLlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICd3aWR0aCc6IDAuMlxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgdGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguc3RvcCh0aW1lKTtcblx0ICAgICAgICAvL3RoZSB3aWR0aCBpcyBzdGlsbCBjb25uZWN0ZWQgdG8gdGhlIG91dHB1dC5cblx0ICAgICAgICAvL3RoYXQgbmVlZHMgdG8gYmUgc3RvcHBlZCBhbHNvXG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHJlc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlB1bHNlT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2F3dG9vdGgucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zYXd0b290aC5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuIEFsd2F5cyByZXR1cm5zIFwicHVsc2VcIi5cblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QdWxzZU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICdwdWxzZSc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBDYW5ub3Qgc2V0IHBhcnRpYWxzIGZvciB0aGlzIHdhdmVmb3JtIHR5cGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QdWxzZU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwIG1ldGhvZC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QdWxzZU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICd3aWR0aCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMud2lkdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dpZHRoR2F0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aHJlc2guZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QdWxzZU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBXTU9zY2lsbGF0b3IgbW9kdWxhdGVzIHRoZSB3aWR0aCBvZiBhIFRvbmUuUHVsc2VPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICBhdCB0aGUgbW9kdWxhdGlvbkZyZXF1ZW5jeS4gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBjb250aW51b3VzbHlcblx0XHQgKiAgICAgICAgIGNoYW5naW5nIHRoZSB0aW1icmUgb2YgdGhlIG9zY2lsbGF0b3IgYnkgYWx0ZXJpbmcgdGhlIGhhcm1vbmljc1xuXHRcdCAqICAgICAgICAgZ2VuZXJhdGVkLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IG1vZHVsYXRpb25GcmVxdWVuY3kgVGhlIG1vZHVsYXRpb24gZnJlcXVlbmN5IG9mIHRoZSB3aWR0aCBvZiB0aGUgcHVsc2UuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBwd20gPSBuZXcgVG9uZS5QV01Pc2NpbGxhdG9yKFwiQWIzXCIsIDAuMykudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5J1xuXHQgICAgICAgIF0sIFRvbmUuUFdNT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcHVsc2Ugb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlB1bHNlT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcHVsc2UgPSBuZXcgVG9uZS5QdWxzZU9zY2lsbGF0b3Iob3B0aW9ucy5tb2R1bGF0aW9uRnJlcXVlbmN5KTtcblx0ICAgICAgICAvL2NoYW5nZSB0aGUgcHVsc2Ugb3NjaWxsYXRvciB0eXBlXG5cdCAgICAgICAgdGhpcy5fcHVsc2UuX3Nhd3Rvb3RoLnR5cGUgPSAnc2luZSc7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1vZHVsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdkZXR1bmUnOiBvcHRpb25zLmRldHVuZSxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogb3B0aW9ucy5waGFzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNjYWxlIHRoZSBvc2NpbGxhdG9yIHNvIGl0IGRvZXNuJ3QgZ28gc2lsZW50XG5cdFx0XHQgKiAgYXQgdGhlIGV4dHJlbWUgdmFsdWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG5ldyBUb25lLk11bHRpcGx5KDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMuX21vZHVsYXRvci5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpb24gcmF0ZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkZyZXF1ZW5jeSA9IHRoaXMuX3B1bHNlLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNoYWluKHRoaXMuX3NjYWxlLCB0aGlzLl9wdWxzZS53aWR0aCk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2UuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUFdNT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5JzogMC40XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2Uuc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLiBBbHdheXMgcmV0dXJucyBcInB3bVwiLlxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBXTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAncHdtJztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgd2F2ZWZvcm0uIENhbm5vdCBzZXQgcGFydGlhbHMgZm9yIHRoaXMgd2F2ZWZvcm0gdHlwZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBXTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBbXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBXTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsYXRvci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBXTU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QV01Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GTU9zY2lsbGF0b3Jcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBzdGFydGluZyBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGF0aW9uVHlwZSBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHNpbmUgb3NjaWxsYXRvciBmcmVxdWVuY3ktbW9kdWxhdGVkIGJ5IGEgc3F1YXJlIHdhdmVcblx0XHQgKiB2YXIgZm1Pc2MgPSBuZXcgVG9uZS5GTU9zY2lsbGF0b3IoXCJBYjNcIiwgXCJzaW5lXCIsIFwic3F1YXJlXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25UeXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuRk1Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy50eXBlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvcidzIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fY2Fycmllci5kZXR1bmU7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUudmFsdWUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGlvbiBpbmRleCB3aGljaCBpcyBpbiBlc3NlbmNlIHRoZSBkZXB0aCBvciBhbW91bnQgb2YgdGhlIG1vZHVsYXRpb24uIEluIG90aGVyIHRlcm1zIGl0IGlzIHRoZVxuXHRcdFx0ICogIHJhdGlvIG9mIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1vZHVsYXRpbmcgc2lnbmFsIChtZikgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGVcblx0XHRcdCAqICBtb2R1bGF0aW5nIHNpZ25hbCAobWEpIC0tIGFzIGluIG1hL21mLlxuXHRcdFx0ICpcdEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqXHRAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMubW9kdWxhdGlvbkluZGV4KTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGluZyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMubW9kdWxhdGlvblR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgY2FycmllciBhbmQgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9ycy5cblx0XHRcdCAqICBBIGhhcm1vbmljaXR5IG9mIDEgZ2l2ZXMgYm90aCBvc2NpbGxhdG9ycyB0aGUgc2FtZSBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHRoZSBtb2R1bGF0b3IgYW4gb2N0YXZlIGJlbG93IGNhcnJpZXJcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIG1vZHVsYXRpb24gaGFwcGVuc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigwKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5tb2R1bGF0aW9uSW5kZXgsIHRoaXMuX21vZHVsYXRpb25Ob2RlKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY29ubmVjdCh0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fbW9kdWxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GTU9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnOiAyLFxuXHQgICAgICAgICdtb2R1bGF0aW9uVHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25UeXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvblR5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSBjYXJyaWVyIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkZNT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZNT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQU1Pc2NpbGxhdG9yXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuT3NjaWxsYXRvcn1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IG1vZHVsYXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egc2luZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeS1tb2R1bGF0ZWQgYnkgYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIHZhciBmbU9zYyA9IG5ldyBUb25lLkFNT3NjaWxsYXRvcihcIkFiM1wiLCBcInNpbmVcIiwgXCJzcXVhcmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvblR5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5BTU9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKG9wdGlvbnMuZnJlcXVlbmN5LCBvcHRpb25zLnR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fY2Fycmllci5kZXR1bmU7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUudmFsdWUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGluZyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMubW9kdWxhdGlvblR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnZlcnQgdGhlIC0xLDEgb3V0cHV0IHRvIDAsMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkF1ZGlvVG9HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBuZXcgVG9uZS5BdWRpb1RvR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgY2FycmllciBhbmQgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9ycy5cblx0XHRcdCAqICBBIGhhcm1vbmljaXR5IG9mIDEgZ2l2ZXMgYm90aCBvc2NpbGxhdG9ycyB0aGUgc2FtZSBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHRoZSBtb2R1bGF0b3IgYW4gb2N0YXZlIGJlbG93IGNhcnJpZXJcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIG1vZHVsYXRpb24gaGFwcGVuc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigwKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY2hhaW4odGhpcy5fbW9kdWxhdGlvblNjYWxlLCB0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNoYWluKHRoaXMuX21vZHVsYXRpb25Ob2RlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFNT3NjaWxsYXRvciwgVG9uZS5Pc2NpbGxhdG9yKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdtb2R1bGF0aW9uVHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkFNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25UeXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvblR5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSBjYXJyaWVyIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkFNT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFNT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRmF0T3NjaWxsYXRvclxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IG1vZHVsYXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egc2luZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeS1tb2R1bGF0ZWQgYnkgYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIHZhciBmbU9zYyA9IG5ldyBUb25lLkZhdE9zY2lsbGF0b3IoXCJBYjNcIiwgXCJzaW5lXCIsIFwic3F1YXJlXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdzcHJlYWQnXG5cdCAgICAgICAgXSwgVG9uZS5GYXRPc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIG9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0b3RhbCBzcHJlYWQgb2YgdGhlIG9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUgIHtDZW50c31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ByZWFkID0gb3B0aW9ucy5zcHJlYWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSB7RGVncmVlc31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYXJ0aWFscyBhcnJheVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucy5wYXJ0aWFscywgW10pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBjb3VudCBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLmNvdW50ID0gb3B0aW9ucy5jb3VudDtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmF0T3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdzcHJlYWQnOiAyMCxcblx0ICAgICAgICAnY291bnQnOiAzLFxuXHQgICAgICAgICd0eXBlJzogJ3Nhd3Rvb3RoJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBvc2NpbGxhdG9yc1xuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGl0ZXJhdG9yICBUaGUgaXRlcmF0b3IgZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUuX2ZvckVhY2ggPSBmdW5jdGlvbiAoaXRlcmF0b3IpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwodGhpcywgdGhpcy5fb3NjaWxsYXRvcnNbaV0sIGkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGV0dW5lIHNwcmVhZCBiZXR3ZWVuIHRoZSBvc2NpbGxhdG9ycy4gSWYgXCJjb3VudFwiIGlzXG5cdFx0ICogc2V0IHRvIDMgb3NjaWxsYXRvcnMgYW5kIHRoZSBcInNwcmVhZFwiIGlzIHNldCB0byA0MCxcblx0XHQgKiB0aGUgdGhyZWUgb3NjaWxsYXRvcnMgd291bGQgYmUgZGV0dW5lZCBsaWtlIHRoaXM6IFstMjAsIDAsIDIwXVxuXHRcdCAqIGZvciBhIHRvdGFsIGRldHVuZSBzcHJlYWQgb2YgNDAgY2VudHMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7Q2VudHN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3NwcmVhZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NwcmVhZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zcHJlYWQgPSBzcHJlYWQ7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGggPiAxKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSAtc3ByZWFkIC8gMjtcblx0ICAgICAgICAgICAgICAgIHZhciBzdGVwID0gc3ByZWFkIC8gKHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjLCBpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLmRldHVuZS52YWx1ZSA9IHN0YXJ0ICsgc3RlcCAqIGk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBkZXR1bmVkIG9zY2lsbGF0b3JzXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGNvdW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ2NvdW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY291bnQpIHtcblx0ICAgICAgICAgICAgY291bnQgPSBNYXRoLm1heChjb3VudCwgMSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGggIT09IGNvdW50KSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgcGFydGlhbHMgPSB0aGlzLnBhcnRpYWxzO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdCAgICAgICAgICAgICAgICAvL2Rpc3Bvc2UgdGhlIHByZXZpb3VzIG9zY2lsbGF0b3JzXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvc2MuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IFtdO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b20pIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3NjLnBhcnRpYWxzID0gdGhpcy5fcGFydGlhbHM7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3NjLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBvc2MucGhhc2UgPSB0aGlzLl9waGFzZTtcblx0ICAgICAgICAgICAgICAgICAgICBvc2Mudm9sdW1lLnZhbHVlID0gLTYgLSBjb3VudCAqIDEuMTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KG9zYy5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3Qob3NjLmRldHVuZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldID0gb3NjO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgLy9zZXQgdGhlIHNwcmVhZFxuXHQgICAgICAgICAgICAgICAgdGhpcy5zcHJlYWQgPSB0aGlzLl9zcHJlYWQ7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG9zYy5zdGFydCgpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSBjYXJyaWVyIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICBvc2MucGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRmF0T3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GYXRPc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5PbW5pT3NjaWxsYXRvciBhZ2dyZWdhdGVzIFRvbmUuT3NjaWxsYXRvciwgVG9uZS5QdWxzZU9zY2lsbGF0b3IsXG5cdFx0ICogICAgICAgICBUb25lLlBXTU9zY2lsbGF0b3IsIFRvbmUuRk1Pc2NpbGxhdG9yLCBUb25lLkFNT3NjaWxsYXRvciwgYW5kIFRvbmUuRmF0T3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgaW50byBvbmUgY2xhc3MuIFRoZSBvc2NpbGxhdG9yIGNsYXNzIGNhbiBiZSBjaGFuZ2VkIGJ5IHNldHRpbmcgdGhlIGB0eXBlYC5cblx0XHQgKiAgICAgICAgIGBvbW5pT3NjLnR5cGUgPSBcInB3bVwiYCB3aWxsIHNldCBpdCB0byB0aGUgVG9uZS5QV01Pc2NpbGxhdG9yLiBQcmVmaXhpbmdcblx0XHQgKiAgICAgICAgIGFueSBvZiB0aGUgYmFzaWMgdHlwZXMgKFwic2luZVwiLCBcInNxdWFyZTRcIiwgZXRjLikgd2l0aCBcImZtXCIsIFwiYW1cIiwgb3IgXCJmYXRcIlxuXHRcdCAqICAgICAgICAgd2lsbCB1c2UgdGhlIEZNT3NjaWxsYXRvciwgQU1Pc2NpbGxhdG9yIG9yIEZhdE9zY2lsbGF0b3IgcmVzcGVjdGl2ZWx5LlxuXHRcdCAqICAgICAgICAgRm9yIGV4YW1wbGU6IGBvbW5pT3NjLnR5cGUgPSBcImZhdHNhd3Rvb3RoXCJgIHdpbGwgY3JlYXRlIHNldCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgdG8gYSBGYXRPc2NpbGxhdG9yIG9mIHR5cGUgXCJzYXd0b290aFwiLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIGluaXRpYWwgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIG9tbmlPc2MgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihcIkMjNFwiLCBcInB3bVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5PbW5pT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yIHNvdXJjZVxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVR5cGUgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICAvL3NldCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBvcHRpb25zXG5cdCAgICAgICAgdGhpcy5zZXQob3B0aW9ucyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5PbW5pT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ3BoYXNlJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIE9tbmlPc2NUeXBlID0ge1xuXHQgICAgICAgIFB1bHNlOiAnUHVsc2VPc2NpbGxhdG9yJyxcblx0ICAgICAgICBQV006ICdQV01Pc2NpbGxhdG9yJyxcblx0ICAgICAgICBPc2M6ICdPc2NpbGxhdG9yJyxcblx0ICAgICAgICBGTTogJ0ZNT3NjaWxsYXRvcicsXG5cdCAgICAgICAgQU06ICdBTU9zY2lsbGF0b3InLFxuXHQgICAgICAgIEZhdDogJ0ZhdE9zY2lsbGF0b3InXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0byBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdG8gc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLiBDYW4gYmUgYW55IG9mIHRoZSBiYXNpYyB0eXBlczogc2luZSwgc3F1YXJlLCB0cmlhbmdsZSwgc2F3dG9vdGguIE9yXG5cdFx0ICogcHJlZml4IHRoZSBiYXNpYyB0eXBlcyB3aXRoIFwiZm1cIiwgXCJhbVwiLCBvciBcImZhdFwiIHRvIHVzZSB0aGUgRk1Pc2NpbGxhdG9yLCBBTU9zY2lsbGF0b3Igb3IgRmF0T3NjaWxsYXRvclxuXHRcdCAqIHR5cGVzLiBUaGUgb3NjaWxsYXRvciBjb3VsZCBhbHNvIGJlIHNldCB0byBcInB3bVwiIG9yIFwicHVsc2VcIi4gQWxsIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZVxuXHRcdCAqIG9zY2lsbGF0b3IncyBjbGFzcyBhcmUgYWNjZXNzaWJsZSB3aGVuIHRoZSBvc2NpbGxhdG9yIGlzIHNldCB0byB0aGF0IHR5cGUsIGJ1dCB0aHJvd3MgYW4gZXJyb3Jcblx0XHQgKiB3aGVuIGl0J3Mgbm90LlxuXHRcdCAqXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvbW5pT3NjLnR5cGUgPSBcInB3bVwiO1xuXHRcdCAqIC8vbW9kdWxhdGlvbkZyZXF1ZW5jeSBpcyBwYXJhbWV0ZXIgd2hpY2ggaXMgYXZhaWxhYmxlXG5cdFx0ICogLy9vbmx5IHdoZW4gdGhlIHR5cGUgaXMgXCJwd21cIi5cblx0XHQgKiBvbW5pT3NjLm1vZHVsYXRpb25GcmVxdWVuY3kudmFsdWUgPSAwLjU7XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2FuIHNxdWFyZSB3YXZlIGZyZXF1ZW5jeSBtb2R1bGF0ZWQgYnkgYSBzYXd0b290aFxuXHRcdCAqIG9tbmlPc2MudHlwZSA9IFwiZm1zcXVhcmVcIjtcblx0XHQgKiBvbW5pT3NjLm1vZHVsYXRpb25UeXBlID0gXCJzYXd0b290aFwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHByZWZpeCA9ICcnO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0pIHtcblx0ICAgICAgICAgICAgICAgIHByZWZpeCA9ICdmbSc7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuQU0pIHtcblx0ICAgICAgICAgICAgICAgIHByZWZpeCA9ICdhbSc7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICBwcmVmaXggPSAnZmF0Jztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgdGhpcy5fb3NjaWxsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodHlwZS5zdWJzdHIoMCwgMikgPT09ICdmbScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuRk0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZS5zdWJzdHIoMik7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdWJzdHIoMCwgMikgPT09ICdhbScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuQU0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZS5zdWJzdHIoMik7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdWJzdHIoMCwgMykgPT09ICdmYXQnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLkZhdCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlLnN1YnN0cigzKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncHdtJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5QV00pO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwdWxzZScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuUHVsc2UpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5Pc2MpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIFRoaXMgaXMgbm90IGF2YWlsYWJsZSBvbiBcInB3bVwiIGFuZCBcInB1bHNlXCIgb3NjaWxsYXRvciB0eXBlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnBhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCBhIG1lbWJlci9hdHRyaWJ1dGUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gcGFyYW1zXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmFtcFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuT21uaU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChwYXJhbXMsIHZhbHVlKSB7XG5cdCAgICAgICAgLy9tYWtlIHN1cmUgdGhlIHR5cGUgaXMgc2V0IGZpcnN0XG5cdCAgICAgICAgaWYgKHBhcmFtcyA9PT0gJ3R5cGUnKSB7XG5cdCAgICAgICAgICAgIHRoaXMudHlwZSA9IHZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc09iamVjdChwYXJhbXMpICYmIHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgndHlwZScpKSB7XG5cdCAgICAgICAgICAgIHRoaXMudHlwZSA9IHBhcmFtcy50eXBlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3RoZW4gc2V0IHRoZSByZXN0XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuc2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdGhlIG9zY2lsbGF0b3IgdG8gdGhlIGZyZXF1ZW5jeSBhbmQgZGV0dW5lIHNpZ25hbHNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLl9jcmVhdGVOZXdPc2NpbGxhdG9yID0gZnVuY3Rpb24gKG9zY1R5cGUpIHtcblx0ICAgICAgICBpZiAob3NjVHlwZSAhPT0gdGhpcy5fc291cmNlVHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VUeXBlID0gb3NjVHlwZTtcblx0ICAgICAgICAgICAgdmFyIE9zY2lsbGF0b3JDb25zdHJ1Y3RvciA9IFRvbmVbb3NjVHlwZV07XG5cdCAgICAgICAgICAgIC8vc2hvcnQgZGVsYXkgdG8gYXZvaWQgY2xpY2tzIG9uIHRoZSBjaGFuZ2Vcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgb2xkT3NjID0gdGhpcy5fb3NjaWxsYXRvcjtcblx0ICAgICAgICAgICAgICAgIG9sZE9zYy5zdG9wKG5vdyk7XG5cdCAgICAgICAgICAgICAgICAvL2Rpc3Bvc2UgdGhlIG9sZCBvbmVcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbGRPc2MuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgICAgIG9sZE9zYyA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICB9LCB0aGlzLmJsb2NrVGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG5ldyBPc2NpbGxhdG9yQ29uc3RydWN0b3IoKTtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB3aWR0aCBvZiB0aGUgb3NjaWxsYXRvciAob25seSBpZiB0aGUgb3NjaWxsYXRvciBpcyBzZXQgdG8gXCJwdWxzZVwiKVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiBAc2lnbmFsXG5cdFx0ICogQG5hbWUgd2lkdGhcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBvbW5pT3NjID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3IoNDQwLCBcInB1bHNlXCIpO1xuXHRcdCAqIC8vY2FuIGFjY2VzcyB0aGUgd2lkdGggYXR0cmlidXRlIG9ubHkgaWYgdHlwZSA9PT0gXCJwdWxzZVwiXG5cdFx0ICogb21uaU9zYy53aWR0aC52YWx1ZSA9IDAuMjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3dpZHRoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuUHVsc2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLndpZHRoO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIGRldHVuZWQgb3NjaWxsYXRvcnNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGNvdW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdjb3VudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IuY291bnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGNvdW50KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY291bnQgPSBjb3VudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRldHVuZSBzcHJlYWQgYmV0d2VlbiB0aGUgb3NjaWxsYXRvcnMuIElmIFwiY291bnRcIiBpc1xuXHRcdCAqIHNldCB0byAzIG9zY2lsbGF0b3JzIGFuZCB0aGUgXCJzcHJlYWRcIiBpcyBzZXQgdG8gNDAsXG5cdFx0ICogdGhlIHRocmVlIG9zY2lsbGF0b3JzIHdvdWxkIGJlIGRldHVuZWQgbGlrZSB0aGlzOiBbLTIwLCAwLCAyMF1cblx0XHQgKiBmb3IgYSB0b3RhbCBkZXR1bmUgc3ByZWFkIG9mIDQwIGNlbnRzLiBTZWUgVG9uZS5GYXRPc2NpbGxhdG9yXG5cdFx0ICogZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7Q2VudHN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnNwcmVhZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ByZWFkKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3ByZWFkID0gc3ByZWFkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3IuIE9ubHkgaWYgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiBpcyBzZXQgdG8gXCJhbVwiIG9yIFwiZm1cIiB0eXBlcy4gc2VlLiBUb25lLkFNT3NjaWxsYXRvciBvciBUb25lLkZNT3NjaWxsYXRvclxuXHRcdCAqIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uVHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvblR5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSB8fCB0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvblR5cGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1UeXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSB8fCB0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uVHlwZSA9IG1UeXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbW9kdWxhdGlvbiBpbmRleCB3aGljaCBpcyBpbiBlc3NlbmNlIHRoZSBkZXB0aCBvciBhbW91bnQgb2YgdGhlIG1vZHVsYXRpb24uIEluIG90aGVyIHRlcm1zIGl0IGlzIHRoZVxuXHRcdCAqIHJhdGlvIG9mIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1vZHVsYXRpbmcgc2lnbmFsIChtZikgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGVcblx0XHQgKiBtb2R1bGF0aW5nIHNpZ25hbCAobWEpIC0tIGFzIGluIG1hL21mLlxuXHRcdCAqIFNlZSBUb25lLkZNT3NjaWxsYXRvciBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAc2lnbmFsXG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvbkluZGV4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uSW5kZXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvbkluZGV4O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSBjYXJyaWVyIGFuZCB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3JzLlxuXHRcdCAqICBBIGhhcm1vbmljaXR5IG9mIDEgZ2l2ZXMgYm90aCBvc2NpbGxhdG9ycyB0aGUgc2FtZSBmcmVxdWVuY3kuXG5cdFx0ICogIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuIFNlZSBUb25lLkFNT3NjaWxsYXRvciBvciBUb25lLkZNT3NjaWxsYXRvclxuXHRcdCAqICBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiAgQHNpZ25hbFxuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGhhcm1vbmljaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdoYXJtb25pY2l0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNIHx8IHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5oYXJtb25pY2l0eTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1vZHVsYXRpb25GcmVxdWVuY3kgU2lnbmFsIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogKG9ubHkgaWYgdGhlIG9zY2lsbGF0b3IgdHlwZSBpcyBzZXQgdG8gcHdtKS4gU2VlXG5cdFx0ICogVG9uZS5QV01Pc2NpbGxhdG9yIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAc2lnbmFsXG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvbkZyZXF1ZW5jeVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIG9tbmlPc2MgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcig0NDAsIFwicHdtXCIpO1xuXHRcdCAqIC8vY2FuIGFjY2VzcyB0aGUgbW9kdWxhdGlvbkZyZXF1ZW5jeSBhdHRyaWJ1dGUgb25seSBpZiB0eXBlID09PSBcInB3bVwiXG5cdFx0ICogb21uaU9zYy5tb2R1bGF0aW9uRnJlcXVlbmN5LnZhbHVlID0gMC4yO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvbkZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLlBXTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvbkZyZXF1ZW5jeTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLk9tbmlPc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc291cmNlVHlwZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT21uaU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQmFzZS1jbGFzcyBmb3IgYWxsIGluc3RydW1lbnRzXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkluc3RydW1lbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCBhbmQgdm9sdW1lIHRyaW1pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBzb3VyY2Uudm9sdW1lLnZhbHVlID0gLTY7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogS2VlcCB0cmFjayBvZiBhbGwgZXZlbnRzIHNjaGVkdWxlZCB0byB0aGUgdHJhbnNwb3J0XG5cdFx0XHQgKiB3aGVuIHRoZSBpbnN0cnVtZW50IGlzICdzeW5jZWQnXG5cdFx0XHQgKiBAdHlwZSB7QXJyYXk8TnVtYmVyPn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSBbXTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkluc3RydW1lbnQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzXG5cdFx0ICogIEB0eXBlIHtvYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgLyoqIHRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscyAqL1xuXHQgICAgICAgICd2b2x1bWUnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5vdGUgdGhlIG5vdGUgdG8gdHJpZ2dlclxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdG8gdHJpZ2dlciB0aGUgbnRvZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSB0byB0cmlnZ2VyIHRoZSBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBUb25lLm5vT3A7XG5cdCAgICAvKipcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB3aGVuIHRvIHRyaWdnZXIgdGhlIHJlbGVhc2Vcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBUb25lLm5vT3A7XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIGluc3RydW1lbnQuc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBpbnN0cnVtZW50LnRyaWdnZXJBdHRhY2tSZWxlYXNlKCdDNCcsICc4bicsIDApXG5cdFx0ICogaW5zdHJ1bWVudC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnRTQnLCAnOG4nLCAnOG4nKVxuXHRcdCAqIGluc3RydW1lbnQudHJpZ2dlckF0dGFja1JlbGVhc2UoJ0c0JywgJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyQXR0YWNrJywgMSk7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlclJlbGVhc2UnLCAwKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBXcmFwIHRoZSBnaXZlbiBtZXRob2Qgc28gdGhhdCBpdCBjYW4gYmUgc3luY2hyb25pemVkXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZCBXaGljaCBtZXRob2QgdG8gd3JhcCBhbmQgc3luY1xuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZVBvc2l0aW9uIFdoYXQgcG9zaXRpb24gdGhlIHRpbWUgYXJndW1lbnQgYXBwZWFycyBpblxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLl9zeW5jTWV0aG9kID0gZnVuY3Rpb24gKG1ldGhvZCwgdGltZVBvc2l0aW9uKSB7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsTWV0aG9kID0gdGhpc1snX29yaWdpbmFsXycgKyBtZXRob2RdID0gdGhpc1ttZXRob2RdO1xuXHQgICAgICAgIHRoaXNbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB2YXIgdGltZSA9IGFyZ3NbdGltZVBvc2l0aW9uXTtcblx0ICAgICAgICAgICAgdmFyIGlkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgICAgIGFyZ3NbdGltZVBvc2l0aW9uXSA9IHQ7XG5cdCAgICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzLnB1c2goaWQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIGluc3RydW1lbnQgZnJvbSB0aGUgVHJhbnNwb3J0XG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGlkKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSBbXTtcblx0ICAgICAgICBpZiAodGhpcy5fb3JpZ2luYWxfdHJpZ2dlckF0dGFjaykge1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sgPSB0aGlzLl9vcmlnaW5hbF90cmlnZ2VyQXR0YWNrO1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlID0gdGhpcy5fb3JpZ2luYWxfdHJpZ2dlclJlbGVhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHRoZW4gdGhlIHJlbGVhc2UgYWZ0ZXIgdGhlIGR1cmF0aW9uLlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHRyaWdnZXIuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBub3RlIHNob3VsZCBiZSBoZWxkIGZvciBiZWZvcmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmluZyB0aGUgcmVsZWFzZS4gVGhpcyB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gIFdoZW4gdGhlIG5vdGUgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgdGhlIG5vdGUgc2hvdWxkIGJlIHRyaWdnZXJlZCBhdC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciBcIkM0XCIgZm9yIHRoZSBkdXJhdGlvbiBvZiBhbiA4dGggbm90ZVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAobm90ZSwgZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayhub3RlLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSh0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd2b2x1bWUnXSk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5JbnN0cnVtZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRoaXMgaXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3Igb3RoZXIgbW9ub3Bob25pYyBpbnN0cnVtZW50cyB0byBcblx0XHQgKiAgICAgICAgICBleHRlbmQuIElNUE9SVEFOVDogSXQgZG9lcyBub3QgbWFrZSBhbnkgc291bmQgb24gaXRzIG93biBhbmRcblx0XHQgKiAgICAgICAgICBzaG91bGRuJ3QgYmUgZGlyZWN0bHkgaW5zdGFudGlhdGVkLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1vbm9waG9uaWMuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnbGlkZSB0aW1lIGJldHdlZW4gbm90ZXMuIFxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wb3J0YW1lbnRvID0gb3B0aW9ucy5wb3J0YW1lbnRvO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9ub3Bob25pYywgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLmRlZmF1bHRzID0geyAncG9ydGFtZW50byc6IDAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgb2YgdGhlIG5vdGUgb3B0aW9uYWxseSB3aXRoIGEgZ2l2ZW4gdmVsb2NpdHkuIFxuXHRcdCAqICBcblx0XHQgKiAgXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gdHJpZ2dlci5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgV2hlbiB0aGUgbm90ZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHZlbG9jaXR5IFRoZSB2ZWxvY2l0eSBzY2FsZXIgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZXMgaG93IFwibG91ZFwiIHRoZSBub3RlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub3Bob25pY30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2soXCJDNFwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgdGhlIG5vdGUgYSBoYWxmIHNlY29uZCBmcm9tIG5vdyBhdCBoYWxmIHZlbG9jaXR5XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFjayhcIkM0XCIsIFwiKzAuNVwiLCAwLjUpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5zZXROb3RlKG5vdGUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gSWYgbm8gdGltZSBpcyBnaXZlbiwgdGhlIHJlbGVhc2UgaGFwcGVucyBpbW1lZGlhdGx5XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9waG9uaWN9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzeW50aC50cmlnZ2VyUmVsZWFzZSgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggdGhlIGFjdHVhbCBtZXRob2Rcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggdGhlIGFjdHVhbCBtZXRob2Rcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGxldmVsIG9mIHRoZSBvdXRwdXQgYXQgdGhlIGdpdmVuIHRpbWUuIE1lYXN1cmVzXG5cdFx0ICogIHRoZSBlbnZlbG9wZShzKSB2YWx1ZSBhdCB0aGUgdGltZS4gXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0byBxdWVyeSB0aGUgZW52ZWxvcGUgdmFsdWVcblx0XHQgKiAgQHJldHVybiB7Tm9ybWFsUmFuZ2V9IFRoZSBvdXRwdXQgbGV2ZWwgYmV0d2VlbiAwLTFcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZ2V0TGV2ZWxBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5lbnZlbG9wZS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBub3RlIGF0IHRoZSBnaXZlbiB0aW1lLiBJZiBubyB0aW1lIGlzIGdpdmVuLCB0aGUgbm90ZVxuXHRcdCAqICB3aWxsIHNldCBpbW1lZGlhdGVseS4gXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBub3RlIFRoZSBub3RlIHRvIGNoYW5nZSB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBub3RlIHNob3VsZCBiZSBzZXQuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vcGhvbmljfSB0aGlzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2NoYW5nZSB0byBGIzYgaW4gb25lIHF1YXJ0ZXIgbm90ZSBmcm9tIG5vdy5cblx0XHQgKiBzeW50aC5zZXROb3RlKFwiRiM2XCIsIFwiKzRuXCIpO1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jaGFuZ2UgdG8gQmI0IHJpZ2h0IG5vd1xuXHRcdCAqIHN5bnRoLnNldE5vdGUoXCJCYjRcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLnNldE5vdGUgPSBmdW5jdGlvbiAobm90ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5wb3J0YW1lbnRvID4gMCAmJiB0aGlzLmdldExldmVsQXRUaW1lKHRpbWUpID4gMC4wNSkge1xuXHQgICAgICAgICAgICB2YXIgcG9ydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLnBvcnRhbWVudG8pO1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5leHBvbmVudGlhbFJhbXBUbyhub3RlLCBwb3J0VGltZSwgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUobm90ZSwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vbm9waG9uaWM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5TeW50aCBpcyBjb21wb3NlZCBzaW1wbHkgb2YgYSBUb25lLk9tbmlPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICAgcm91dGVkIHRocm91Z2ggYSBUb25lLkFtcGxpdHVkZUVudmVsb3BlLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xLTFfMFlXMloxSjJFUEkzNlA4Zk5DTWNaRzdOMXcxR1psdVBzNG9nNGV2by9wdWI/dz0xMTYzJmg9MjMxXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT21uaU9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihvcHRpb25zLm9zY2lsbGF0b3IpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5vc2NpbGxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5vc2NpbGxhdG9yLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgb3NjaWxsYXRvcnMgdG8gdGhlIG91dHB1dFxuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5jaGFpbih0aGlzLmVudmVsb3BlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3RyaWFuZ2xlJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDA1LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMC4zLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDFcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBhdHRhY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgLy9pZiB0aGVyZSBpcyBubyByZWxlYXNlIHBvcnRpb24sIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQU1TeW50aCB1c2VzIHRoZSBvdXRwdXQgb2Ygb25lIFRvbmUuU3ludGggdG8gbW9kdWxhdGUgdGhlXG5cdFx0ICogICAgICAgICAgYW1wbGl0dWRlIG9mIGFub3RoZXIgVG9uZS5TeW50aC4gVGhlIGhhcm1vbmljaXR5ICh0aGUgcmF0aW8gYmV0d2VlblxuXHRcdCAqICAgICAgICAgIHRoZSB0d28gc2lnbmFscykgYWZmZWN0cyB0aGUgdGltYnJlIG9mIHRoZSBvdXRwdXQgc2lnbmFsIGdyZWF0bHkuXG5cdFx0ICogICAgICAgICAgUmVhZCBtb3JlIGFib3V0IEFtcGxpdHVkZSBNb2R1bGF0aW9uIFN5bnRoZXNpcyBvblxuXHRcdCAqICAgICAgICAgIFtTb3VuZE9uU291bmRdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwNDEwMzY1My9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb206ODAvc29zL21hcjAwL2FydGljbGVzL3N5bnRoc2VjcmV0cy5odG0pLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xVFF1OEVkNGlGcjFZVExLcEIzVTFfaHVyLVV3QnJoNWdkQlhjOEJ4ZkdLdy9wdWI/dz0xMDA5Jmg9NDU3XCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5BTVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5BTVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLlN5bnRoKCk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIncyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IHRoaXMuX2NhcnJpZXIub3NjaWxsYXRvcjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gdGhpcy5fY2Fycmllci5lbnZlbG9wZS5zZXQob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuU3ludGgoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBvc2NpbGxhdG9yIHdoaWNoIGlzIGFwcGxpZWRcblx0XHRcdCAqICB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IHRoaXMuX21vZHVsYXRvci5vc2NpbGxhdG9yLnNldChvcHRpb25zLm1vZHVsYXRpb24pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBlbnZlbG9wZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSB0aGlzLl9tb2R1bGF0b3IuZW52ZWxvcGUuc2V0KG9wdGlvbnMubW9kdWxhdGlvbkVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoNDQwLCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSByYXRpbyBiZXR3ZWVuIHRoZSB0d28gdm9pY2VzLiBBIGhhcm1vbmljaXR5IG9mXG5cdFx0XHQgKiAgMSBpcyBubyBjaGFuZ2UuIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy9waXRjaCB2b2ljZTEgYW4gb2N0YXZlIGJlbG93IHZvaWNlMFxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb252ZXJ0IHRoZSAtMSwxIG91dHB1dCB0byAwLDFcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BdWRpb1RvR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSB0d28gdm9pY2VzIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmZhbih0aGlzLl9jYXJyaWVyLmRldHVuZSwgdGhpcy5fbW9kdWxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNoYWluKHRoaXMuX21vZHVsYXRpb25TY2FsZSwgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5jaGFpbih0aGlzLl9tb2R1bGF0aW9uTm9kZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFNU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDMsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4wMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ21vZHVsYXRpb24nOiB7ICd0eXBlJzogJ3NxdWFyZScgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC41LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCBvY2N1clxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIC8vdGhlIHBvcnQgZ2xpZGVcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIHJlbGVhc2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQU1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFNU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Nb25vU3ludGggaXMgY29tcG9zZWQgb2Ygb25lIG9zY2lsbGF0b3IsIG9uZSBmaWx0ZXIsIGFuZCB0d28gZW52ZWxvcGVzLlxuXHRcdCAqICAgICAgICAgIFRoZSBhbXBsaXR1ZGUgb2YgdGhlIFRvbmUuT3NjaWxsYXRvciBhbmQgdGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlXG5cdFx0ICogICAgICAgICAgVG9uZS5GaWx0ZXIgYXJlIGNvbnRyb2xsZWQgYnkgVG9uZS5FbnZlbG9wZXMuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFnYVkxREY5X0h6a29kcWY4SkkxQ2cyVlpmd1NFbHBGUWZJOTRJUXdhZDM4L3B1Yj93PTkyNCZoPTI0MFwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLk1vbm9TeW50aCh7XG5cdFx0ICogXHRcIm9zY2lsbGF0b3JcIiA6IHtcblx0XHQgKiBcdFx0XCJ0eXBlXCIgOiBcInNxdWFyZVwiXG5cdFx0ICogIH0sXG5cdFx0ICogIFwiZW52ZWxvcGVcIiA6IHtcblx0XHQgKiAgXHRcImF0dGFja1wiIDogMC4xXG5cdFx0ICogIH1cblx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTW9ub1N5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5PbW5pT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKG9wdGlvbnMub3NjaWxsYXRvcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLm9zY2lsbGF0b3IuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIob3B0aW9ucy5maWx0ZXIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaWx0ZXIgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRnJlcXVlbmN5RW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlID0gbmV3IFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUob3B0aW9ucy5maWx0ZXJFbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIG9zY2lsbGF0b3JzIHRvIHRoZSBvdXRwdXRcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuY2hhaW4odGhpcy5maWx0ZXIsIHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGZpbHRlciBlbnZlbG9wZVxuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUuY29ubmVjdCh0aGlzLmZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmaWx0ZXInLFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb25vU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAnQzQnLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzcXVhcmUnIH0sXG5cdCAgICAgICAgJ2ZpbHRlcic6IHtcblx0ICAgICAgICAgICAgJ1EnOiA2LFxuXHQgICAgICAgICAgICAndHlwZSc6ICdsb3dwYXNzJyxcblx0ICAgICAgICAgICAgJ3JvbGxvZmYnOiAtMjRcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDA1LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMC45LFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDFcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdmaWx0ZXJFbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDYsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMixcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjUsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMixcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJzogNyxcblx0ICAgICAgICAgICAgJ2V4cG9uZW50JzogMlxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vdGhlIGVudmVsb3Blc1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmaWx0ZXInLFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Nb25vU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5EdW9TeW50aCBpcyBhIG1vbm9waG9uaWMgc3ludGggY29tcG9zZWQgb2YgdHdvXG5cdFx0ICogICAgICAgICAgTW9ub1N5bnRocyBydW4gaW4gcGFyYWxsZWwgd2l0aCBjb250cm9sIG92ZXIgdGhlXG5cdFx0ICogICAgICAgICAgZnJlcXVlbmN5IHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMgYW5kIHZpYnJhdG8gZWZmZWN0LlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xYkw0R1h2ZlJNTWxxUzdYeUJtOUNqTDlLSlBTVUtiY2RCTnBxT2xrRkx4ay9wdWI/dz0xMDEyJmg9NDQ4XCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGR1b1N5bnRoID0gbmV3IFRvbmUuRHVvU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIGR1b1N5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCIyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5EdW9TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZpcnN0IHZvaWNlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTW9ub1N5bnRofVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2ljZTAgPSBuZXcgVG9uZS5Nb25vU3ludGgob3B0aW9ucy52b2ljZTApO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2Vjb25kIHZvaWNlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTW9ub1N5bnRofVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2ljZTEgPSBuZXcgVG9uZS5Nb25vU3ludGgob3B0aW9ucy52b2ljZTEpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmlicmF0byBMRk8uXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92aWJyYXRvID0gbmV3IFRvbmUuTEZPKG9wdGlvbnMudmlicmF0b1JhdGUsIC01MCwgNTApO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8uc3RhcnQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSB2aWJyYXRvIGZyZXF1ZW5jeVxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmlicmF0b1JhdGUgPSB0aGlzLl92aWJyYXRvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdmlicmF0byBnYWluXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMudmlicmF0b0Ftb3VudCwgVG9uZS5UeXBlLlBvc2l0aXZlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbW91bnQgb2YgdmlicmF0b1xuXHRcdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52aWJyYXRvQW1vdW50ID0gdGhpcy5fdmlicmF0b0dhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZnJlcXVlbmN5IGNvbnRyb2xcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDQ0MCwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMuIEEgaGFybW9uaWNpdHkgb2Zcblx0XHRcdCAqICAxIGlzIG5vIGNoYW5nZS4gSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHZvaWNlMSBhbiBvY3RhdmUgYmVsb3cgdm9pY2UwXG5cdFx0XHQgKiBkdW9TeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8vY29udHJvbCB0aGUgdHdvIHZvaWNlcyBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMudm9pY2UwLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy52b2ljZTEuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvLmNvbm5lY3QodGhpcy5fdmlicmF0b0dhaW4pO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG9HYWluLmZhbih0aGlzLnZvaWNlMC5kZXR1bmUsIHRoaXMudm9pY2UxLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAndm9pY2UwJyxcblx0ICAgICAgICAgICAgJ3ZvaWNlMScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndmlicmF0b0Ftb3VudCcsXG5cdCAgICAgICAgICAgICd2aWJyYXRvUmF0ZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkR1b1N5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZpYnJhdG9BbW91bnQnOiAwLjUsXG5cdCAgICAgICAgJ3ZpYnJhdG9SYXRlJzogNSxcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAxLjUsXG5cdCAgICAgICAgJ3ZvaWNlMCc6IHtcblx0ICAgICAgICAgICAgJ3ZvbHVtZSc6IC0xMCxcblx0ICAgICAgICAgICAgJ3BvcnRhbWVudG8nOiAwLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAgICAgJ2ZpbHRlckVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3ZvaWNlMSc6IHtcblx0ICAgICAgICAgICAgJ3ZvbHVtZSc6IC0xMCxcblx0ICAgICAgICAgICAgJ3BvcnRhbWVudG8nOiAwLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAgICAgJ2ZpbHRlckVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXNcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EdW9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnZvaWNlMS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVzXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EdW9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMudm9pY2UwLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGxldmVsIG9mIHRoZSBvdXRwdXQgYXQgdGhlIGdpdmVuIHRpbWUuIE1lYXN1cmVzXG5cdFx0ICogIHRoZSBlbnZlbG9wZShzKSB2YWx1ZSBhdCB0aGUgdGltZS4gXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0byBxdWVyeSB0aGUgZW52ZWxvcGUgdmFsdWVcblx0XHQgKiAgQHJldHVybiB7Tm9ybWFsUmFuZ2V9IFRoZSBvdXRwdXQgbGV2ZWwgYmV0d2VlbiAwLTFcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGgucHJvdG90eXBlLmdldExldmVsQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gKHRoaXMudm9pY2UwLmdldExldmVsQXRUaW1lKHRpbWUpICsgdGhpcy52b2ljZTEuZ2V0TGV2ZWxBdFRpbWUodGltZSkpIC8gMjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRHVvU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAndm9pY2UwJyxcblx0ICAgICAgICAgICAgJ3ZvaWNlMScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndmlicmF0b0Ftb3VudCcsXG5cdCAgICAgICAgICAgICd2aWJyYXRvUmF0ZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmlicmF0b0Ftb3VudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52aWJyYXRvQW1vdW50ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZpYnJhdG9SYXRlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5EdW9TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBGTVN5bnRoIGlzIGNvbXBvc2VkIG9mIHR3byBUb25lLlN5bnRocyB3aGVyZSBvbmUgVG9uZS5TeW50aCBtb2R1bGF0ZXNcblx0XHQgKiAgICAgICAgICB0aGUgZnJlcXVlbmN5IG9mIGEgc2Vjb25kIFRvbmUuU3ludGguIEEgbG90IG9mIHNwZWN0cmFsIGNvbnRlbnRcblx0XHQgKiAgICAgICAgICBjYW4gYmUgZXhwbG9yZWQgdXNpbmcgdGhlIG1vZHVsYXRpb25JbmRleCBwYXJhbWV0ZXIuIFJlYWQgbW9yZSBhYm91dFxuXHRcdCAqICAgICAgICAgIGZyZXF1ZW5jeSBtb2R1bGF0aW9uIHN5bnRoZXNpcyBvbiBTb3VuZCBPbiBTb3VuZDogW1BhcnQgMV0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDAzMTIzNzA0L2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvYXByMDAvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmh0bSksIFtQYXJ0IDJdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwMzExNTgzNS9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL21heTAwL2FydGljbGVzL3N5bnRoLmh0bSkuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFoMFBVRFpYUGdpNElreDZiVlQ2b25jcllQTGx1Rkt5N2xqNTNwdXhqLURNL3B1Yj93PTkwMiZoPTQ2MlwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBmbVN5bnRoID0gbmV3IFRvbmUuRk1TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogZm1TeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM1XCIsIFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5GTVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLlN5bnRoKG9wdGlvbnMuY2Fycmllcik7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIncyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IHRoaXMuX2NhcnJpZXIub3NjaWxsYXRvcjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSB0aGlzLl9jYXJyaWVyLmVudmVsb3BlLnNldChvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5TeW50aChvcHRpb25zLm1vZHVsYXRvcik7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yJ3Mgb3NjaWxsYXRvciB3aGljaCBpcyBhcHBsaWVkXG5cdFx0XHQgKiAgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSB0aGlzLl9tb2R1bGF0b3Iub3NjaWxsYXRvci5zZXQob3B0aW9ucy5tb2R1bGF0aW9uKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSB0aGlzLl9tb2R1bGF0b3IuZW52ZWxvcGUuc2V0KG9wdGlvbnMubW9kdWxhdGlvbkVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbCg0NDAsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHNcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMuIEEgaGFybW9uaWNpdHkgb2Zcblx0XHRcdCAqICAxIGlzIG5vIGNoYW5nZS4gSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHZvaWNlMSBhbiBvY3RhdmUgYmVsb3cgdm9pY2UwXG5cdFx0XHQgKiBzeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW9uIGluZGV4IHdoaWNoIGVzc2VudGlhbGx5IHRoZSBkZXB0aCBvciBhbW91bnQgb2YgdGhlIG1vZHVsYXRpb24uIEl0IGlzIHRoZVxuXHRcdFx0ICogIHJhdGlvIG9mIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1vZHVsYXRpbmcgc2lnbmFsIChtZikgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGVcblx0XHRcdCAqICBtb2R1bGF0aW5nIHNpZ25hbCAobWEpIC0tIGFzIGluIG1hL21mLlxuXHRcdFx0ICpcdEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqXHRAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMubW9kdWxhdGlvbkluZGV4KTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG5ldyBUb25lLkdhaW4oMCk7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSB0d28gdm9pY2VzIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMubW9kdWxhdGlvbkluZGV4LCB0aGlzLl9tb2R1bGF0aW9uTm9kZSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZmFuKHRoaXMuX2NhcnJpZXIuZGV0dW5lLCB0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY29ubmVjdCh0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GTVN5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAzLFxuXHQgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnOiAxMCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjAxLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbic6IHsgJ3R5cGUnOiAnc3F1YXJlJyB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogXHR0cmlnZ2VyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCBvY2N1clxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GTVN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIHJlbGVhc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRk1TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GTVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZNU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5NZW1icmFuZVN5bnRoIG1ha2VzIGtpY2sgYW5kIHRvbSBzb3VuZHMgdXNpbmcgYSBzaW5nbGUgb3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgIHdpdGggYW4gYW1wbGl0dWRlIGVudmVsb3BlIGFuZCBmcmVxdWVuY3kgcmFtcC4gQSBUb25lLk9tbmlPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICAgaXMgcm91dGVkIHRocm91Z2ggYSBUb25lLkFtcGxpdHVkZUVudmVsb3BlIHRvIHRoZSBvdXRwdXQuIFRoZSBkcnVtXG5cdFx0ICogICAgICAgICAgcXVhbGl0eSBvZiB0aGUgc291bmQgY29tZXMgZnJvbSB0aGUgZnJlcXVlbmN5IGVudmVsb3BlIGFwcGxpZWRcblx0XHQgKiAgICAgICAgICBkdXJpbmcgVG9uZS5NZW1icmFuZVN5bnRoLnRyaWdnZXJBdHRhY2sobm90ZSkuIFRoZSBmcmVxdWVuY3kgZW52ZWxvcGVcblx0XHQgKiAgICAgICAgICBzdGFydHMgYXQgPGNvZGU+bm90ZSAqIC5vY3RhdmVzPC9jb2RlPiBhbmQgcmFtcHMgdG8gPGNvZGU+bm90ZTwvY29kZT5cblx0XHQgKiAgICAgICAgICBvdmVyIHRoZSBkdXJhdGlvbiBvZiA8Y29kZT4ucGl0Y2hEZWNheTwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuTWVtYnJhbmVTeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDMlwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTWVtYnJhbmVTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT21uaU9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihvcHRpb25zLm9zY2lsbGF0b3IpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoZSBwaXRjaCBlbnZlbG9wZSByYW1wcy5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBmcmVxdWVuY3kgZW52ZWxvcGUgdGFrZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBpdGNoRGVjYXkgPSBvcHRpb25zLnBpdGNoRGVjYXk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmNoYWluKHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWVtYnJhbmVTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BpdGNoRGVjYXknOiAwLjA1LFxuXHQgICAgICAgICdvY3RhdmVzJzogMTAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuNCxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDEuNCxcblx0ICAgICAgICAgICAgJ2F0dGFja0N1cnZlJzogJ2V4cG9uZW50aWFsJ1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoIHRoZSBnaXZlbiB2ZWxvY2l0eS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIHRoZSB0aW1lLCBpZiBub3QgZ2l2ZW4gaXMgbm93XG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHZlbG9jaXR5IGRlZmF1bHRzIHRvIDFcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVtYnJhbmVTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICBraWNrLnRyaWdnZXJBdHRhY2soNjApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIG5vdGUgPSB0aGlzLnRvRnJlcXVlbmN5KG5vdGUpO1xuXHQgICAgICAgIHZhciBtYXhOb3RlID0gbm90ZSAqIHRoaXMub2N0YXZlcztcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKG1heE5vdGUsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZShub3RlLCB0aW1lICsgdGhpcy50b1NlY29uZHModGhpcy5waXRjaERlY2F5KSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgbm90ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgcmVsZWFzZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZW1icmFuZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lbWJyYW5lU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZW1icmFuZVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgSW5oYXJtb25pYyByYXRpbyBvZiBmcmVxdWVuY2llcyBiYXNlZCBvbiB0aGUgUm9sYW5kIFRSLTgwOFxuXHRcdCAqICBUYWtlbiBmcm9tIGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L3BhcGVycy90ci04MDgtY3ltYmFsLXBoeXNpY2FsbHktaW5mb3JtZWQtY2lyY3VpdC1iZW5kYWJsZS1kaWdpdGFsLW1vZGVsXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGluaGFybVJhdGlvcyA9IFtcblx0ICAgICAgICAxLFxuXHQgICAgICAgIDEuNDgzLFxuXHQgICAgICAgIDEuOTMyLFxuXHQgICAgICAgIDIuNTQ2LFxuXHQgICAgICAgIDIuNjMsXG5cdCAgICAgICAgMy44OTdcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIGhpZ2hseSBpbmhhcm1vbmljIGFuZCBzcGVjdHJhbGx5IGNvbXBsZXggc291cmNlIHdpdGggYSBoaWdocGFzcyBmaWx0ZXJcblx0XHQgKiAgICAgICAgICBhbmQgYW1wbGl0dWRlIGVudmVsb3BlIHdoaWNoIGlzIGdvb2QgZm9yIG1ha2luZyBtZXRhbG9waG9uZSBzb3VuZHMuIEJhc2VkXG5cdFx0ICogICAgICAgICAgb24gQ3ltYmFsU3ludGggYnkgW0Bwb2x5cmh5dGhtYXRpY10oaHR0cHM6Ly9naXRodWIuY29tL3BvbHlyaHl0aG1hdGljKS5cblx0XHQgKiAgICAgICAgICBJbnNwaXJhdGlvbiBmcm9tIFtTb3VuZCBvbiBTb3VuZF0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNjEwMTQzOTI0L2h0dHBzOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL2p1bDAyL2FydGljbGVzL3N5bnRoc2VjcmV0czA3MDIuYXNwKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBhdmFpbGJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTWV0YWxTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgY3ltYmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiBGTU9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG11bHRpcGxpZXJzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mcmVxTXVsdGlwbGllcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGZvciB0aGUgYm9keVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVlID0gbmV3IFRvbmUuR2FpbigwKS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBoaWdocGFzcyB0aGUgb3V0cHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9oaWdocGFzcyA9IG5ldyBUb25lLkZpbHRlcih7XG5cdCAgICAgICAgICAgICd0eXBlJzogJ2hpZ2hwYXNzJyxcblx0ICAgICAgICAgICAgJ1EnOiAtMy4wMTAyOTk5NTY2Mzk4MTI1XG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoZSBoaWdocGFzc1xuXHRcdFx0ICogIGZpbHRlciBmcmVxdWVuY3kgcmFtcHNcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNjYWxlIHRoZSBib2R5IGVudmVsb3BlXG5cdFx0XHQgKiAgZm9yIHRoZSBiYW5kcGFzc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNjYWxlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyID0gbmV3IFRvbmUuU2NhbGUob3B0aW9ucy5yZXNvbmFuY2UsIDcwMDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBlbnZlbG9wZSB3aGljaCBpcyBjb25uZWN0ZWQgYm90aCB0byB0aGVcblx0XHRcdCAqICBhbXBsaXR1ZGUgYW5kIGhpZ2hwYXNzIGZpbHRlcidzIGN1dG9mZiBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuRW52ZWxvcGUoe1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogb3B0aW9ucy5lbnZlbG9wZS5hdHRhY2ssXG5cdCAgICAgICAgICAgICdhdHRhY2tDdXJ2ZSc6ICdsaW5lYXInLFxuXHQgICAgICAgICAgICAnZGVjYXknOiBvcHRpb25zLmVudmVsb3BlLmRlY2F5LFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogb3B0aW9ucy5lbnZlbG9wZS5yZWxlYXNlXG5cdCAgICAgICAgfSkuY2hhaW4odGhpcy5fZmlsdGVyRnJlcVNjYWxlciwgdGhpcy5faGlnaHBhc3MuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmNvbm5lY3QodGhpcy5fYW1wbGl0dWUuZ2Fpbik7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmhhcm1SYXRpb3MubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIG9zYyA9IG5ldyBUb25lLkZNT3NjaWxsYXRvcih7XG5cdCAgICAgICAgICAgICAgICAndHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICAgICAgICAgJ21vZHVsYXRpb25UeXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgICAgICAgICAnaGFybW9uaWNpdHknOiBvcHRpb25zLmhhcm1vbmljaXR5LFxuXHQgICAgICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IG9wdGlvbnMubW9kdWxhdGlvbkluZGV4XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBvc2MuY29ubmVjdCh0aGlzLl9oaWdocGFzcyk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldID0gb3NjO1xuXHQgICAgICAgICAgICB2YXIgbXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KGluaGFybVJhdGlvc1tpXSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVyc1tpXSA9IG11bHQ7XG5cdCAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKG11bHQsIG9zYy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3NldCB0aGUgb2N0YXZlc1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1ldGFsU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAxLjQsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC4yXG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiA1LjEsXG5cdCAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IDMyLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiA0MDAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogMS41XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjay5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgICAgICBXaGVuIHRoZSBhdHRhY2sgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBbdmVsb2NpdHk9MV0gIFRoZSB2ZWxvY2l0eSB0aGF0IHRoZSBlbnZlbG9wZSBzaG91bGQgYmUgdHJpZ2dlcmVkIGF0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NZXRhbFN5bnRofSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbCkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2ZWwgPSBUb25lLmRlZmF1bHRBcmcodmVsLCAxKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vaWYgdGhlIHN1c3RhaW4gaXMgMCwgc3RvcCB0aGUgb3NjaWxsYXRvciBhcyB3ZWxsXG5cdCAgICAgICAgaWYgKHRoaXMuZW52ZWxvcGUuc3VzdGFpbiA9PT0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICAgICAgV2hlbiB0aGUgcmVsZWFzZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NZXRhbFN5bnRofSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMuZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAwKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2Ugb2YgdGhlIGVudmVsb3BlIGFmdGVyIHRoZSBnaXZlblxuXHRcdCAqICBkdXJhdGlvbi5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIGR1cmF0aW9uICBUaGUgZHVyYXRpb24gYmVmb3JlIHRyaWdnZXJpbmcgdGhlIHJlbGVhc2Vcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgICAgICBXaGVuIHRoZSBhdHRhY2sgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBbdmVsb2NpdHk9MV0gIFRoZSB2ZWxvY2l0eSB0aGF0IHRoZSBlbnZlbG9wZSBzaG91bGQgYmUgdHJpZ2dlcmVkIGF0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NZXRhbFN5bnRofSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBtb2R1bGF0aW9uSW5kZXggb2YgdGhlIG9zY2lsbGF0b3JzIHdoaWNoIG1ha2UgdXAgdGhlIHNvdXJjZS5cblx0XHQgKiAgc2VlIFRvbmUuRk1Pc2NpbGxhdG9yLm1vZHVsYXRpb25JbmRleFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lICBtb2R1bGF0aW9uSW5kZXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLCAnbW9kdWxhdGlvbkluZGV4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvcnNbMF0ubW9kdWxhdGlvbkluZGV4LnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldLm1vZHVsYXRpb25JbmRleC52YWx1ZSA9IHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBoYXJtb25pY2l0eSBvZiB0aGUgb3NjaWxsYXRvcnMgd2hpY2ggbWFrZSB1cCB0aGUgc291cmNlLlxuXHRcdCAqICBzZWUgVG9uZS5GTU9zY2lsbGF0b3IuaGFybW9uaWNpdHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTWV0YWxTeW50aCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSAgaGFybW9uaWNpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLCAnaGFybW9uaWNpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yc1swXS5oYXJtb25pY2l0eS52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXS5oYXJtb25pY2l0eS52YWx1ZSA9IHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIGhpZ2hwYXNzIGZpbHRlciBhdHRhY2hlZCB0byB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTWV0YWxTeW50aCNcblx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiAgQG5hbWUgIHJlc29uYW5jZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdyZXNvbmFuY2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1pbiA9IHZhbDtcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIFwicmVzb25hbmNlXCIgZnJlcXVlbmN5XG5cdFx0ICogIHRoYXQgdGhlIGZpbHRlciByYW1wcyBkdXJpbmcgdGhlIGF0dGFjay9kZWNheSBlbnZlbG9wZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSAgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdHM7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWF4ID0gdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5taW4gKiBNYXRoLnBvdygyLCBvY3RzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZXRhbFN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVyc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mcmVxTXVsdGlwbGllcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9oaWdocGFzcy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faGlnaHBhc3MgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1ldGFsU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Ob2lzZVN5bnRoIGlzIGNvbXBvc2VkIG9mIGEgbm9pc2UgZ2VuZXJhdG9yIChUb25lLk5vaXNlKSwgb25lIGZpbHRlciAoVG9uZS5GaWx0ZXIpLFxuXHRcdCAqICAgICAgICAgIGFuZCB0d28gZW52ZWxvcGVzIChUb25lLkVudmVsb3ApLiBPbmUgZW52ZWxvcGUgY29udHJvbHMgdGhlIGFtcGxpdHVkZVxuXHRcdCAqICAgICAgICAgIG9mIHRoZSBub2lzZSBhbmQgdGhlIG90aGVyIGlzIGNvbnRyb2xzIHRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFycXp1WDlyQmxoVDUwTVJ2RDJUS21sOWJuWmhjWm16WEYxcmZfbzd2ZG5FL3B1Yj93PTkxOCZoPTI0MlwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIG5vaXNlU3ludGggPSBuZXcgVG9uZS5Ob2lzZVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBub2lzZVN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Ob2lzZVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbm9pc2Ugc291cmNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk5vaXNlfVxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiBub2lzZVN5bnRoLnNldChcIm5vaXNlLnR5cGVcIiwgXCJicm93blwiKTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubm9pc2UgPSBuZXcgVG9uZS5Ob2lzZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBub2lzZSB0byB0aGUgb3V0cHV0XG5cdCAgICAgICAgdGhpcy5ub2lzZS5jaGFpbih0aGlzLmVudmVsb3BlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbm9pc2UnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Ob2lzZVN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ25vaXNlJzogeyAndHlwZSc6ICd3aGl0ZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4xLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDBcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVzLiBVbmxpa2Ugb3RoZXJcblx0XHQgKiAgaW5zdHJ1bWVudHMsIFRvbmUuTm9pc2VTeW50aCBkb2Vzbid0IGhhdmUgYSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG5vaXNlU3ludGgudHJpZ2dlckF0dGFjaygpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBub2lzZVxuXHQgICAgICAgIHRoaXMubm9pc2Uuc3RhcnQodGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuZW52ZWxvcGUuc3VzdGFpbiA9PT0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLm5vaXNlLnN0b3AodGltZSA9IHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgcmVsZWFzZSBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLm5vaXNlLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAwKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHRoZW4gdGhlIHJlbGVhc2UuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIHRoZSBkdXJhdGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICAgICB0aGUgdGltZSBvZiB0aGUgYXR0YWNrXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdub2lzZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm5vaXNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm5vaXNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Ob2lzZVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgS2FycGx1cy1TdHJpbmcgc3RyaW5nIHN5bnRoZXNpcy4gT2Z0ZW4gb3V0IG9mIHR1bmUuXG5cdFx0ICogICAgICAgICBXaWxsIGNoYW5nZSB3aGVuIHRoZSBBdWRpb1dvcmtlck5vZGUgaXMgYXZhaWxhYmxlIGFjcm9zc1xuXHRcdCAqICAgICAgICAgYnJvd3NlcnMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gc2VlIHRoZSBkZWZhdWx0c1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwbHVja3kgPSBuZXcgVG9uZS5QbHVja1N5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBwbHVja3kudHJpZ2dlckF0dGFjayhcIkM0XCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuUGx1Y2tTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTm9pc2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25vaXNlID0gbmV3IFRvbmUuTm9pc2UoJ3BpbmsnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIG5vaXNlIGF0IHRoZSBhdHRhY2suXG5cdFx0XHQgKiAgTm9taW5hbCByYW5nZSBvZiBbMC4xLCAyMF1cblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2tOb2lzZSA9IG9wdGlvbnMuYXR0YWNrTm9pc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIExGQ0Zcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Mb3dwYXNzQ29tYkZpbHRlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZjZiA9IG5ldyBUb25lLkxvd3Bhc3NDb21iRmlsdGVyKHtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZSc6IG9wdGlvbnMucmVzb25hbmNlLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJzogb3B0aW9ucy5kYW1wZW5pbmdcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmVzb25hbmNlIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gdGhpcy5fbGZjZi5yZXNvbmFuY2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRhbXBlbmluZyBjb250cm9sLiBpLmUuIHRoZSBsb3dwYXNzIGZpbHRlciBmcmVxdWVuY3kgb2YgdGhlIGNvbWIgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IHRoaXMuX2xmY2YuZGFtcGVuaW5nO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9ub2lzZS5jb25uZWN0KHRoaXMuX2xmY2YpO1xuXHQgICAgICAgIHRoaXMuX2xmY2YuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBsdWNrU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGx1Y2tTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrTm9pc2UnOiAxLFxuXHQgICAgICAgICdkYW1wZW5pbmcnOiA0MDAwLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiAwLjdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IG5vdGUgVGhlIG5vdGUgdG8gdHJpZ2dlci5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIG5vdGUgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGx1Y2tTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUpIHtcblx0ICAgICAgICBub3RlID0gdGhpcy50b0ZyZXF1ZW5jeShub3RlKTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGRlbGF5QW1vdW50ID0gMSAvIG5vdGU7XG5cdCAgICAgICAgdGhpcy5fbGZjZi5kZWxheVRpbWUuc2V0VmFsdWVBdFRpbWUoZGVsYXlBbW91bnQsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlLnN0b3AodGltZSArIGRlbGF5QW1vdW50ICogdGhpcy5hdHRhY2tOb2lzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbHVja1N5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmY2YuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZmNmID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGx1Y2tTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBvbHlTeW50aCBoYW5kbGVzIHZvaWNlIGNyZWF0aW9uIGFuZCBhbGxvY2F0aW9uIGZvciBhbnlcblx0XHQgKiAgICAgICAgICBpbnN0cnVtZW50cyBwYXNzZWQgaW4gYXMgdGhlIHNlY29uZCBwYXJhbXRlci4gUG9seVN5bnRoIGlzXG5cdFx0ICogICAgICAgICAgbm90IGEgc3ludGhlc2l6ZXIgYnkgaXRzZWxmLCBpdCBtZXJlbHkgbWFuYWdlcyB2b2ljZXMgb2Zcblx0XHQgKiAgICAgICAgICBvbmUgb2YgdGhlIG90aGVyIHR5cGVzIG9mIHN5bnRocywgYWxsb3dpbmcgYW55IG9mIHRoZVxuXHRcdCAqICAgICAgICAgIG1vbm9waG9uaWMgc3ludGhlc2l6ZXJzIHRvIGJlIHBvbHlwaG9uaWMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfE9iamVjdH0gW3BvbHlwaG9ueT00XSBUaGUgbnVtYmVyIG9mIHZvaWNlcyB0byBjcmVhdGVcblx0XHQgKiAgQHBhcmFtIHtmdW5jdGlvbn0gW3ZvaWNlPVRvbmUuU3ludGhdIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgdm9pY2VzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXMgVG9uZS5TeW50aCBieSBkZWZhdWx0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBwb2x5c3ludGggY29tcG9zZWQgb2YgNiBWb2ljZXMgb2YgU3ludGhcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5Qb2x5U3ludGgoNiwgVG9uZS5TeW50aCkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3NldCB0aGUgYXR0cmlidXRlcyB1c2luZyB0aGUgc2V0IGludGVyZmFjZVxuXHRcdCAqIHN5bnRoLnNldChcImRldHVuZVwiLCAtMTIwMCk7XG5cdFx0ICogLy9wbGF5IGEgY2hvcmRcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJDNFwiLCBcIkU0XCIsIFwiQTRcIl0sIFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwb2x5cGhvbnknLFxuXHQgICAgICAgICAgICAndm9pY2UnXG5cdCAgICAgICAgXSwgVG9uZS5Qb2x5U3ludGgpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5JbnN0cnVtZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICAvL21heCBwb2x5cGhvbnlcblx0ICAgICAgICBvcHRpb25zLnBvbHlwaG9ueSA9IE1hdGgubWluKFRvbmUuUG9seVN5bnRoLk1BWF9QT0xZUEhPTlksIG9wdGlvbnMucG9seXBob255KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYXJyYXkgb2Ygdm9pY2VzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2ljZXMgPSBuZXcgQXJyYXkob3B0aW9ucy5wb2x5cGhvbnkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBxdWV1ZSBvZiB2b2ljZXMgd2l0aCBkYXRhIGFib3V0IGxhc3QgdHJpZ2dlclxuXHRcdFx0ICogIGFuZCB0aGUgdHJpZ2dlcmVkIG5vdGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJzID0gbmV3IEFycmF5KG9wdGlvbnMucG9seXBob255KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdkZXR1bmUnKTtcblx0ICAgICAgICAvL2NyZWF0ZSB0aGUgdm9pY2VzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLnBvbHlwaG9ueTsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB2ID0gbmV3IG9wdGlvbnMudm9pY2UoYXJndW1lbnRzWzJdLCBhcmd1bWVudHNbM10pO1xuXHQgICAgICAgICAgICBpZiAoISh2IGluc3RhbmNlb2YgVG9uZS5Nb25vcGhvbmljKSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeW50aCBjb25zdHJ1Y3RvciBtdXN0IGJlIGluc3RhbmNlIG9mIFRvbmUuTW9ub3Bob25pYycpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldID0gdjtcblx0ICAgICAgICAgICAgdi5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgaWYgKHYuaGFzT3duUHJvcGVydHkoJ2RldHVuZScpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHYuZGV0dW5lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90cmlnZ2Vyc1tpXSA9IHtcblx0ICAgICAgICAgICAgICAgIHJlbGVhc2U6IC0xLFxuXHQgICAgICAgICAgICAgICAgbm90ZTogbnVsbCxcblx0ICAgICAgICAgICAgICAgIHZvaWNlOiB2XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUG9seVN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BvbHlwaG9ueSc6IDQsXG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3ZvaWNlJzogVG9uZS5TeW50aFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l8QXJyYXl9IG5vdGVzIFRoZSBub3RlcyB0byBwbGF5LiBBY2NlcHRzIGEgc2luZ2xlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlcXVlbmN5IG9yIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICBUaGUgc3RhcnQgdGltZSBvZiB0aGUgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciBhIGNob3JkIGltbWVkaWF0ZWx5IHdpdGggYSB2ZWxvY2l0eSBvZiAwLjJcblx0XHQgKiBwb2x5LnRyaWdnZXJBdHRhY2soW1wiQWIzXCIsIFwiQzRcIiwgXCJGNVwiXSwgdW5kZWZpbmVkLCAwLjIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZXMsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5vdGVzKSkge1xuXHQgICAgICAgICAgICBub3RlcyA9IFtub3Rlc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSBub3Rlc1tpXTtcblx0ICAgICAgICAgICAgLy90cmlnZ2VyIHRoZSBvbGRlc3Qgdm9pY2Vcblx0ICAgICAgICAgICAgdmFyIG9sZGVzdCA9IHRoaXMuX3RyaWdnZXJzWzBdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHRoaXMuX3RyaWdnZXJzLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJpZ2dlcnNbal0ucmVsZWFzZSA8IG9sZGVzdC5yZWxlYXNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb2xkZXN0ID0gdGhpcy5fdHJpZ2dlcnNbal07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgb2xkZXN0LnJlbGVhc2UgPSBJbmZpbml0eTtcblx0ICAgICAgICAgICAgb2xkZXN0Lm5vdGUgPSBKU09OLnN0cmluZ2lmeSh2YWwpO1xuXHQgICAgICAgICAgICBvbGRlc3Qudm9pY2UudHJpZ2dlckF0dGFjayh2YWwsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSBhZnRlciB0aGUgc3BlY2lmaWVkIGR1cmF0aW9uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fEFycmF5fSBub3RlcyBUaGUgbm90ZXMgdG8gcGxheS4gQWNjZXB0cyBhIHNpbmdsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW5jeSBvciBhbiBhcnJheSBvZiBmcmVxdWVuY2llcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZHVyYXRpb24gdGhlIGR1cmF0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIGlmIG5vIHRpbWUgaXMgZ2l2ZW4sIGRlZmF1bHRzIHRvIG5vd1xuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIGF0dGFjayAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgYSBjaG9yZCBmb3IgYSBkdXJhdGlvbiBvZiBhIGhhbGYgbm90ZVxuXHRcdCAqIHBvbHkudHJpZ2dlckF0dGFja1JlbGVhc2UoW1wiRWIzXCIsIFwiRzRcIiwgXCJDNVwiXSwgXCIyblwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NhbiBwYXNzIGluIGFuIGFycmF5IG9mIGR1cmF0aW9ucyBhcyB3ZWxsXG5cdFx0ICogcG9seS50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJFYjNcIiwgXCJHNFwiLCBcIkM1XCJdLCBbXCIyblwiLCBcIjRuXCIsIFwiNG5cIl0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGVzLCBkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKG5vdGVzLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheShkdXJhdGlvbikgJiYgVG9uZS5pc0FycmF5KG5vdGVzKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZCA9IGR1cmF0aW9uW01hdGgubWluKGksIGR1cmF0aW9uLmxlbmd0aCAtIDEpXTtcblx0ICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2Uobm90ZXNbaV0sIHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKG5vdGVzLCB0aW1lICsgdGhpcy50b1NlY29uZHMoZHVyYXRpb24pKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2Ugb2YgdGhlIG5vdGUuIFVubGlrZSBtb25vcGhvbmljIGluc3RydW1lbnRzLFxuXHRcdCAqICBhIG5vdGUgKG9yIGFycmF5IG9mIG5vdGVzKSBuZWVkcyB0byBiZSBwYXNzZWQgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l8QXJyYXl9IG5vdGVzIFRoZSBub3RlcyB0byBwbGF5LiBBY2NlcHRzIGEgc2luZ2xlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlcXVlbmN5IG9yIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICBXaGVuIHRoZSByZWxlYXNlIHdpbGwgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwb2x5LnRyaWdnZXJSZWxlYXNlKFtcIkFiM1wiLCBcIkM0XCIsIFwiRjVcIl0sIFwiKzJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGVzLCB0aW1lKSB7XG5cdCAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5vdGVzKSkge1xuXHQgICAgICAgICAgICBub3RlcyA9IFtub3Rlc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSB2b2ljZVxuXHQgICAgICAgICAgICB2YXIgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeShub3Rlc1tpXSk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIHYgPSAwOyB2IDwgdGhpcy5fdHJpZ2dlcnMubGVuZ3RoOyB2KyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5fdHJpZ2dlcnNbdl07XG5cdCAgICAgICAgICAgICAgICBpZiAoZGVzYy5ub3RlID09PSBzdHJpbmdpZmllZCAmJiBkZXNjLnJlbGVhc2UgPiB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZGVzYy52b2ljZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICBkZXNjLnJlbGVhc2UgPSB0aW1lO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogc3ludGguc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAwKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc4bicpXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAxKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgYSBtZW1iZXIvYXR0cmlidXRlIG9mIHRoZSB2b2ljZXMuXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fHN0cmluZ30gcGFyYW1zXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmFtcFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcG9seS5zZXQoe1xuXHRcdCAqIFx0XCJmaWx0ZXJcIiA6IHtcblx0XHQgKiBcdFx0XCJ0eXBlXCIgOiBcImhpZ2hwYXNzXCJcblx0XHQgKiBcdH0sXG5cdFx0ICogXHRcImVudmVsb3BlXCIgOiB7XG5cdFx0ICogXHRcdFwiYXR0YWNrXCIgOiAwLjI1XG5cdFx0ICogXHR9XG5cdFx0ICogfSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgdmFsdWUsIHJhbXBUaW1lKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLnZvaWNlc1tpXS5zZXQocGFyYW1zLCB2YWx1ZSwgcmFtcFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzeW50aCdzIGF0dHJpYnV0ZXMuIEdpdmVuIG5vIGFyZ3VtZW50cyBnZXRcblx0XHQgKiAgd2lsbCByZXR1cm4gYWxsIGF2YWlsYWJsZSBvYmplY3QgcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZ1xuXHRcdCAqICB2YWx1ZXMuIFBhc3MgaW4gYSBzaW5nbGUgYXR0cmlidXRlIHRvIHJldHJpZXZlIG9yIGFuIGFycmF5XG5cdFx0ICogIG9mIGF0dHJpYnV0ZXMuIFRoZSBhdHRyaWJ1dGUgc3RyaW5ncyBjYW4gYWxzbyBpbmNsdWRlIGEgXCIuXCJcblx0XHQgKiAgdG8gYWNjZXNzIGRlZXBlciBwcm9wZXJ0aWVzLlxuXHRcdCAqICBAcGFyYW0ge0FycmF5PX0gcGFyYW1zIHRoZSBwYXJhbWV0ZXJzIHRvIGdldCwgb3RoZXJ3aXNlIHdpbGwgcmV0dXJuXG5cdFx0ICogIFx0XHRcdFx0XHQgICBhbGwgYXZhaWxhYmxlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52b2ljZXNbMF0uZ2V0KHBhcmFtcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmUgdm9pY2VzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgbm90ZXMgc2hvdWxkIGJlIHJlbGVhc2VkLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnJlbGVhc2VBbGwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RyaWdnZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5fdHJpZ2dlcnNbaV07XG5cdCAgICAgICAgICAgIGlmIChkZXNjLnJlbGVhc2UgPiB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICBkZXNjLnJlbGVhc2UgPSB0aW1lO1xuXHQgICAgICAgICAgICAgICAgZGVzYy52b2ljZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLnZvaWNlc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2RldHVuZScpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2ljZXMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIG5vdGVzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZFxuXHRcdCAqICB0byBhIHBvbHlzeW50aC5cblx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLk1BWF9QT0xZUEhPTlkgPSAyMDtcblx0ICAgIHJldHVybiBUb25lLlBvbHlTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIEF1dG9tYXRpY2FsbHkgaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgcGl0Y2hlZCBzYW1wbGVzLiBQYXNzIGluIGFuIG9iamVjdCB3aGljaCBtYXBzIHRoZSBub3RlJ3MgcGl0Y2ggb3IgbWlkaSB2YWx1ZSB0byB0aGUgdXJsLCB0aGVuIHlvdSBjYW4gdHJpZ2dlciB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIG9mIHRoYXQgbm90ZSBsaWtlIG90aGVyIGluc3RydW1lbnRzLiBCeSBhdXRvbWF0aWNhbGx5IHJlcGl0Y2hpbmcgdGhlIHNhbXBsZXMsIGl0IGlzIHBvc3NpYmxlIHRvIHBsYXkgcGl0Y2hlcyB3aGljaCB3ZXJlIG5vdCBleHBsaWNpdGx5IGluY2x1ZGVkIHdoaWNoIGNhbiBzYXZlIGxvYWRpbmcgdGltZS5cblx0XHQgKiAgICAgICAgRm9yIHNhbXBsZSBvciBidWZmZXIgcGxheWJhY2sgd2hlcmUgcmVwaXRjaGluZyBpcyBub3QgbmVjZXNzYXJ5LCB1c2UgW1RvbmUuUGxheWVyXShodHRwczovL3RvbmVqcy5naXRodWIuaW8vZG9jcy9QbGF5ZXIpLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzYW1wbGVzIEFuIG9iamVjdCBvZiBzYW1wbGVzIG1hcHBpbmcgZWl0aGVyIE1pZGlcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIE51bWJlcnMgb3IgU2NpZW50aWZpYyBQaXRjaCBOb3RhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSB1cmwgb2YgdGhhdCBzYW1wbGUuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYWxsIG9mIHRoZSBzYW1wbGVzIGFyZSBsb2FkZWQuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmc9fSBiYXNlVXJsIFRoZSByb290IFVSTCBvZiBhbGwgb2YgdGhlIHNhbXBsZXMsIHdoaWNoIGlzIHByZXBlbmRlZCB0byBhbGwgdGhlIFVSTHMuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgc2FtcGxlciA9IG5ldyBUb25lLlNhbXBsZXIoe1xuXHRcdCAqIFx0XCJDM1wiIDogXCJwYXRoL3RvL0MzLm1wM1wiLFxuXHRcdCAqIFx0XCJEIzNcIiA6IFwicGF0aC90by9Ec2hhcnAzLm1wM1wiLFxuXHRcdCAqIFx0XCJGIzNcIiA6IFwicGF0aC90by9Gc2hhcnAzLm1wM1wiLFxuXHRcdCAqIFx0XCJBM1wiIDogXCJwYXRoL3RvL0EzLm1wM1wiLFxuXHRcdCAqIH0sIGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3NhbXBsZXIgd2lsbCByZXBpdGNoIHRoZSBjbG9zZXN0IHNhbXBsZVxuXHRcdCAqIFx0c2FtcGxlci50cmlnZ2VyQXR0YWNrKFwiRDNcIilcblx0XHQgKiB9KVxuXHRcdCAqIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIgPSBmdW5jdGlvbiAodXJscykge1xuXHQgICAgICAgIC8vIHNoaWZ0IGFyZ3VtZW50cyBvdmVyIG9uZS4gVGhvc2UgYXJlIHRoZSByZW1haW5kZXIgb2YgdGhlIG9wdGlvbnNcblx0ICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgYXJncy5zaGlmdCgpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmdzLCBbXG5cdCAgICAgICAgICAgICdvbmxvYWQnLFxuXHQgICAgICAgICAgICAnYmFzZVVybCdcblx0ICAgICAgICBdLCBUb25lLlNhbXBsZXIpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIHZhciB1cmxNYXAgPSB7fTtcblx0ICAgICAgICBmb3IgKHZhciBub3RlIGluIHVybHMpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNOb3RlKG5vdGUpKSB7XG5cdCAgICAgICAgICAgICAgICAvL2NvbnZlcnQgdGhlIG5vdGUgbmFtZSB0byBNSURJXG5cdCAgICAgICAgICAgICAgICB2YXIgbWlkID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgICAgICAgICB1cmxNYXBbbWlkXSA9IHVybHNbbm90ZV07XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKHBhcnNlRmxvYXQobm90ZSkpKSB7XG5cdCAgICAgICAgICAgICAgICAvL290aGVyd2lzZSBpZiBpdCdzIG51bWJlcnMgYXNzdW1lIGl0J3MgbWlkaVxuXHQgICAgICAgICAgICAgICAgdXJsTWFwW25vdGVdID0gdXJsc1tub3RlXTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5TYW1wbGVyOiB1cmwga2V5cyBtdXN0IGJlIHRoZSBub3RlXFwncyBwaXRjaCcpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHN0b3JlZCBhbmQgbG9hZGVkIGJ1ZmZlcnNcblx0XHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcnN9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVycyA9IG5ldyBUb25lLkJ1ZmZlcnModXJsTWFwLCBvcHRpb25zLm9ubG9hZCwgb3B0aW9ucy5iYXNlVXJsKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBvYmplY3Qgb2YgYWxsIGN1cnJlbnRseSBwbGF5aW5nIEJ1ZmZlclNvdXJjZXNcblx0XHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IHt9O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGVudmVsb3BlIGFwcGxpZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlLlxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG9wdGlvbnMuYXR0YWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGVudmVsb3BlIGFwcGxpZWQgdG8gdGhlIGVuZCBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNhbXBsZXIsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAY29uc3Rcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgIGF0dGFjazogMCxcblx0ICAgICAgICByZWxlYXNlOiAwLjEsXG5cdCAgICAgICAgb25sb2FkOiBUb25lLm5vT3AsXG5cdCAgICAgICAgYmFzZVVybDogJydcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGluIHN0ZXBzIGJldHdlZW4gdGhlIGdpdmVuIG1pZGkgbm90ZSBhdCB0aGUgY2xvc2V0cyBzYW1wbGUuXG5cdFx0ICogQHBhcmFtICB7TWlkaX0gbWlkaVxuXHRcdCAqIEByZXR1cm4ge0ludGVydmFsfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLl9maW5kQ2xvc2VzdCA9IGZ1bmN0aW9uIChtaWRpKSB7XG5cdCAgICAgICAgLy9zZWFyY2hlcyB3aXRoaW4gOCBvY3RhdmVzIG9mIHRoZSBnaXZlbiBtaWRpIG5vdGVcblx0ICAgICAgICB2YXIgTUFYX0lOVEVSVkFMID0gOTY7XG5cdCAgICAgICAgdmFyIGludGVydmFsID0gMDtcblx0ICAgICAgICB3aGlsZSAoaW50ZXJ2YWwgPCBNQVhfSU5URVJWQUwpIHtcblx0ICAgICAgICAgICAgLy8gY2hlY2sgYWJvdmUgYW5kIGJlbG93XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXJzLmhhcyhtaWRpICsgaW50ZXJ2YWwpKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLWludGVydmFsO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2J1ZmZlcnMuaGFzKG1pZGkgLSBpbnRlcnZhbCkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcnZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpbnRlcnZhbCsrO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHBsYXlcblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSAgICAgV2hlbiB0byBwbGF5IHRoZSBub3RlXG5cdFx0ICogQHBhcmFtICB7Tm9ybWFsUmFuZ2U9fSB2ZWxvY2l0eSBUaGUgdmVsb2NpdHkgdG8gcGxheSB0aGUgc2FtcGxlIGJhY2suXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfSAgICAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB2YXIgbWlkaSA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgIC8vIGZpbmQgdGhlIGNsb3Nlc3Qgbm90ZSBwaXRjaFxuXHQgICAgICAgIHZhciBkaWZmZXJlbmNlID0gdGhpcy5fZmluZENsb3Nlc3QobWlkaSk7XG5cdCAgICAgICAgaWYgKGRpZmZlcmVuY2UgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb3Nlc3ROb3RlID0gbWlkaSAtIGRpZmZlcmVuY2U7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9idWZmZXJzLmdldChjbG9zZXN0Tm90ZSk7XG5cdCAgICAgICAgICAgIC8vIHBsYXkgdGhhdCBub3RlXG5cdCAgICAgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2Uoe1xuXHQgICAgICAgICAgICAgICAgJ2J1ZmZlcic6IGJ1ZmZlcixcblx0ICAgICAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhkaWZmZXJlbmNlKSxcblx0ICAgICAgICAgICAgICAgICdmYWRlSW4nOiB0aGlzLmF0dGFjayxcblx0ICAgICAgICAgICAgICAgICdmYWRlT3V0JzogdGhpcy5yZWxlYXNlLFxuXHQgICAgICAgICAgICAgICAgJ2N1cnZlJzogJ2V4cG9uZW50aWFsJ1xuXHQgICAgICAgICAgICB9KS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgc291cmNlLnN0YXJ0KHRpbWUsIDAsIGJ1ZmZlci5kdXJhdGlvbiwgdmVsb2NpdHkpO1xuXHQgICAgICAgICAgICAvLyBhZGQgaXQgdG8gdGhlIGFjdGl2ZSBzb3VyY2VzXG5cdCAgICAgICAgICAgIGlmICghVG9uZS5pc0FycmF5KHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0pKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5wdXNoKHtcblx0ICAgICAgICAgICAgICAgIG5vdGU6IG1pZGksXG5cdCAgICAgICAgICAgICAgICBzb3VyY2U6IHNvdXJjZVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byByZWxlYXNlLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBcdFdoZW4gdG8gcmVsZWFzZSB0aGUgbm90ZS5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9XHR0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUpIHtcblx0ICAgICAgICB2YXIgbWlkaSA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgIC8vIGZpbmQgdGhlIG5vdGVcblx0ICAgICAgICBpZiAodGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXSAmJiB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLmxlbmd0aCkge1xuXHQgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5zaGlmdCgpLnNvdXJjZTtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lICsgdGhpcy5yZWxlYXNlLCB0aGlzLnJlbGVhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZWxlYXNlIGFsbCBjdXJyZW50bHkgYWN0aXZlIG5vdGVzLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBcdFdoZW4gdG8gcmVsZWFzZSB0aGUgbm90ZXMuXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfVx0dGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5yZWxlYXNlQWxsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgbm90ZSBpbiB0aGlzLl9hY3RpdmVTb3VyY2VzKSB7XG5cdCAgICAgICAgICAgIHZhciBzb3VyY2VzID0gdGhpcy5fYWN0aXZlU291cmNlc1tub3RlXTtcblx0ICAgICAgICAgICAgd2hpbGUgKHNvdXJjZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gc291cmNlcy5zaGlmdCgpLnNvdXJjZTtcblx0ICAgICAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUgKyB0aGlzLnJlbGVhc2UsIHRoaXMucmVsZWFzZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAxKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZSB0aGUgYXR0YWNrIHBoYXNlLCB0aGVuIGFmdGVyIHRoZSBkdXJhdGlvbiwgaW52b2tlIHRoZSByZWxlYXNlLlxuXHRcdCAqIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gcGxheVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIFRoZSB0aW1lIHRoZSBub3RlIHNob3VsZCBiZSBoZWxkXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFdoZW4gdG8gc3RhcnQgdGhlIGF0dGFja1xuXHRcdCAqIEBwYXJhbSAge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IG9mIHRoZSBhdHRhY2tcblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9ICAgICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAobm90ZSwgZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayhub3RlLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZShub3RlLCB0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBub3RlIHRvIHRoZSBzYW1wbGVyLlxuXHRcdCAqICBAcGFyYW0gIHtOb3RlfE1pZGl9ICAgbm90ZSAgICAgIFRoZSBidWZmZXIncyBwaXRjaC5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfFRvbmUuQnVmZmVyfEF1ZGlvYnVmZmVyfSAgdXJsICBFaXRoZXIgdGhlIHVybCBvZiB0aGUgYnVmZXIsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhZGRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobm90ZSwgdXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGlmIChUb25lLmlzTm90ZShub3RlKSkge1xuXHQgICAgICAgICAgICAvL2NvbnZlcnQgdGhlIG5vdGUgbmFtZSB0byBNSURJXG5cdCAgICAgICAgICAgIHZhciBtaWQgPSBUb25lLkZyZXF1ZW5jeShub3RlKS50b01pZGkoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVycy5hZGQobWlkLCB1cmwsIGNhbGxiYWNrKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKCFpc05hTihwYXJzZUZsb2F0KG5vdGUpKSkge1xuXHQgICAgICAgICAgICAvL290aGVyd2lzZSBpZiBpdCdzIG51bWJlcnMgYXNzdW1lIGl0J3MgbWlkaVxuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzLmFkZChub3RlLCB1cmwsIGNhbGxiYWNrKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuU2FtcGxlcjogbm90ZSBtdXN0IGJlIHRoZSBub3RlXFwncyBwaXRjaC4gSW5zdGVhZCBnb3QgJyArIG5vdGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVycyBhcmUgbG9hZGVkIG9yIG5vdFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNhbXBsZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TYW1wbGVyLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcnMubG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXJzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBtaWRpIGluIHRoaXMuX2FjdGl2ZVNvdXJjZXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuc291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNhbXBsZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFBlcmlvZGljV2F2ZSkge1xuXHQgICAgICAgICAgICBPc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0UGVyaW9kaWNXYXZlID0gT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFdhdmVUYWJsZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVBlcmlvZGljV2F2ZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVBlcmlvZGljV2F2ZSA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlV2F2ZVRhYmxlO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1hcHMgYSBOb3JtYWxSYW5nZSBbMCwgMV0gdG8gYW4gQXVkaW9SYW5nZSBbLTEsIDFdLiBcblx0XHQgKiAgICAgICAgIFNlZSBhbHNvIFRvbmUuQXVkaW9Ub0dhaW4uIFxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBnMmEgPSBuZXcgVG9uZS5HYWluVG9BdWRpbygpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluVG9BdWRpbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25vcm0gPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh4KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh4KSAqIDIgLSAxO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR2FpblRvQXVkaW8sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR2FpblRvQXVkaW99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR2FpblRvQXVkaW8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbm9ybS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR2FpblRvQXVkaW87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBOb3JtYWxpemUgdGFrZXMgYW4gaW5wdXQgbWluIGFuZCBtYXggYW5kIG1hcHMgaXQgbGluZWFybHkgdG8gTm9ybWFsUmFuZ2UgWzAsMV1cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IGlucHV0TWluIHRoZSBtaW4gaW5wdXQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IGlucHV0TWF4IHRoZSBtYXggaW5wdXQgdmFsdWVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbm9ybSA9IG5ldyBUb25lLk5vcm1hbGl6ZSgyLCA0KTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDMpLmNvbm5lY3Qobm9ybSk7XG5cdFx0ICogLy9vdXRwdXQgb2Ygbm9ybSBpcyAwLjUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob3JtYWxpemUgPSBmdW5jdGlvbiAoaW5wdXRNaW4sIGlucHV0TWF4KSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1pbiBpbnB1dCB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2lucHV0TWluID0gVG9uZS5kZWZhdWx0QXJnKGlucHV0TWluLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWF4IGlucHV0IHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5wdXRNYXggPSBUb25lLmRlZmF1bHRBcmcoaW5wdXRNYXgsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHN1YnRyYWN0IHRoZSBtaW4gZnJvbSB0aGUgaW5wdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5BZGQoMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZGl2aWRlIGJ5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGlucHV0IGFuZCBvdXRwdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGl2ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NdWx0aXBseSgxKTtcblx0ICAgICAgICB0aGlzLl9zdWIuY29ubmVjdCh0aGlzLl9kaXYpO1xuXHQgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Ob3JtYWxpemUsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSB2YWx1ZSB0aGUgaW5wdXQgc2lnbmFsIHdpbGwgcmVhY2guXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTm9ybWFsaXplI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRNaW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5faW5wdXRNaW4gPSBtaW47XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSB2YWx1ZSB0aGUgaW5wdXQgc2lnbmFsIHdpbGwgcmVhY2guXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTm9ybWFsaXplI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRNYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faW5wdXRNYXggPSBtYXg7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgc2V0IHRoZSB2YWx1ZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9ybWFsaXplLnByb3RvdHlwZS5fc2V0UmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3ViLnZhbHVlID0gLXRoaXMuX2lucHV0TWluO1xuXHQgICAgICAgIHRoaXMuX2Rpdi52YWx1ZSA9IDEgLyAodGhpcy5faW5wdXRNYXggLSB0aGlzLl9pbnB1dE1pbik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vcm1hbGl6ZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3ViLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdWIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Rpdi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGl2ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Ob3JtYWxpemU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsIGV4dGVuZHMgVG9uZS5TaWduYWwsIGJ1dCBhZGRzIHRoZSBhYmlsaXR5IHRvIHN5bmNocm9uaXplIHRoZSBzaWduYWwgdG8gdGhlIHNpZ25hbCB0byB0aGUgVG9uZS5UcmFuc3BvcnRcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcmVhbCBzaWduYWwgb3V0cHV0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLl9vdXRwdXRTaWcgPSBuZXcgVG9uZS5TaWduYWwodGhpcy5faW5pdGlhbFZhbHVlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEtlZXAgdHJhY2sgb2YgdGhlIGxhc3QgdmFsdWUuIChzbWFsbCBvcHRpbWl6YXRpb24pXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xhc3RWYWwgPSB0aGlzLnZhbHVlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGV2ZW50IGlkIG9mIHRoZSB0aWNrIHVwZGF0ZSBsb29wXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KHRoaXMuX29uVGljay5iaW5kKHRoaXMpLCAnMWknKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEEgYm91bmQgdmVyc2lvbiBvZiB0aGUgYW5jaG9yIHZhbHVlIG1ldGhvZHNcblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iaW5kQW5jaG9yVmFsdWUgPSB0aGlzLl9hbmNob3JWYWx1ZS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9uKCdzdGFydCBzdG9wIHBhdXNlJywgdGhpcy5fYmluZEFuY2hvclZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMubWVtb3J5ID0gSW5maW5pdHk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogQ2FsbGJhY2sgd2hpY2ggaXMgaW52b2tlZCBldmVyeSB0aWNrLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5fb25UaWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICBpZiAodGhpcy5fbGFzdFZhbCAhPT0gdmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xhc3RWYWwgPSB2YWw7XG5cdCAgICAgICAgICAgIC8vYXBwcm94aW1hdGUgcmFtcCBjdXJ2ZXMgd2l0aCBsaW5lYXIgcmFtcHNcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0U2lnLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbCwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEFuY2hvciB0aGUgdmFsdWUgYXQgdGhlIHN0YXJ0IGFuZCBzdG9wIG9mIHRoZSBUcmFuc3BvcnRcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWUgVGhlIHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICB0aGlzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLl9hbmNob3JWYWx1ZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHZhbCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoVG9uZS5UcmFuc3BvcnQuc2Vjb25kcyk7XG5cdCAgICAgICAgdGhpcy5fbGFzdFZhbCA9IHZhbDtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZy5zZXRWYWx1ZUF0VGltZSh2YWwsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gVGhpcyB3aWxsXG5cdFx0ICogIHJldHVybiB0aGUgdW5jb252ZXJ0ZWQgKHJhdykgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9ICB0aW1lICBUaGUgdGltZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgVGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiBUb25lLlNpZ25hbC5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTZXQgdGhlIG91dHB1dCBvZiB0aGUgc2lnbmFsIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hhbmdlIHRvIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gdGltZSAgVGhlIHRpbWUgdG8gY2hhbmdlIHRoZSBzaWduYWxcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIExpbmVhciByYW1wIHRvIHRoZSBnaXZlbiB2YWx1ZSBmcm9tIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcG9pbnQgdG8gdGhlIGdpdmVuIHZhbHVlXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hhbmdlIHRvIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gdGltZSAgVGhlIHRpbWUgdG8gY2hhbmdlIHRoZSBzaWduYWxcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEV4cG9uZW50aWFsIHJhbXAgdG8gdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwb2ludCB0byB0aGUgZ2l2ZW4gdmFsdWVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGFuZ2UgdG8gYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSB0aW1lICBUaGUgdGltZSB0byBjaGFuZ2UgdGhlIHNpZ25hbFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUgd2l0aFxuXHRcdCAqICBhIHJhdGUgaGF2aW5nIHRoZSBnaXZlbiB0aW1lIGNvbnN0YW50LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHRpbWVDb25zdGFudFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLnNldFRhcmdldEF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VscyBhbGwgc2NoZWR1bGVkIHBhcmFtZXRlciBjaGFuZ2VzIHdpdGggdGltZXMgZ3JlYXRlciB0aGFuIG9yXG5cdFx0ICogIGVxdWFsIHRvIHN0YXJ0VGltZS5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMgPSBmdW5jdGlvbiAoc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcy5jYWxsKHRoaXMsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCBhbiBhcnJheSBvZiBhcmJpdHJhcnkgdmFsdWVzIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiB0aW1lIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb24uXG5cdFx0ICogIEBwYXJhbSB7RmxvYXQzMkFycmF5fSB2YWx1ZXNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBkdXJhdGlvblxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc2NhbGluZz0xXSBJZiB0aGUgdmFsdWVzIGluIHRoZSBjdXJ2ZSBzaG91bGQgYmUgc2NhbGVkIGJ5IHNvbWUgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUN1cnZlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlcywgc3RhcnRUaW1lLCBkdXJhdGlvbiwgc2NhbGluZykge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gVG9uZS5UcmFuc3BvcnRUaW1lKGR1cmF0aW9uKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVDdXJ2ZUF0VGltZS5jYWxsKHRoaXMsIHZhbHVlcywgc3RhcnRUaW1lLCBkdXJhdGlvbiwgc2NhbGluZyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoaXMgaXMgc2ltaWxhciB0byBbY2FuY2VsU2NoZWR1bGVkVmFsdWVzXSgjY2FuY2VsU2NoZWR1bGVkVmFsdWVzKSBleGNlcHRcblx0XHQgKiAgaXQgaG9sZHMgdGhlIGF1dG9tYXRlZCB2YWx1ZSBhdCB0aW1lIHVudGlsIHRoZSBuZXh0IGF1dG9tYXRlZCBldmVudC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuY2FuY2VsQW5kSG9sZEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxBbmRIb2xkQXRUaW1lLmNhbGwodGhpcywgVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBEaXNwb3NlIGFuZCBkaXNjb25uZWN0XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9zeW5jZWQpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9mZignc3RhcnQgc3RvcCBwYXVzZScsIHRoaXMuX3N5bmNlZENhbGxiYWNrKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKDApO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fb3V0cHV0U2lnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgVG9uZS5HcmFpblBsYXllciBpbXBsZW1lbnRzIFtncmFudWxhciBzeW50aGVzaXNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dyYW51bGFyX3N5bnRoZXNpcykuXG5cdFx0ICogICAgICAgIEdyYW51bGFyIFN5bnRoZXNpcyBlbmFibGVzIHlvdSB0byBhZGp1c3QgcGl0Y2ggYW5kIHBsYXliYWNrIHJhdGUgaW5kZXBlbmRlbnRseS4gVGhlIGdyYWluU2l6ZSBpcyB0aGVcblx0XHQgKiAgICAgICAgYW1vdW50IG9mIHRpbWUgZWFjaCBzbWFsbCBjaHVuayBvZiBhdWRpbyBpcyBwbGF5ZWQgZm9yIGFuZCB0aGUgb3ZlcmxhcCBpcyB0aGVcblx0XHQgKiAgICAgICAgYW1vdW50IG9mIGNyb3NzZmFkaW5nIHRyYW5zaXRpb24gdGltZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgZ3JhaW5zLlxuXHRcdCAqIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiBAcGFyYW0ge1N0cmluZ3xUb25lLkJ1ZmZlcn0gdXJsXHRUaGUgdXJsIHRvIGxvYWQsIG9yIHRoZSBUb25lLkJ1ZmZlciB0byBwbGF5LlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgIF0sIFRvbmUuR3JhaW5QbGF5ZXIpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGF1ZGlvIGJ1ZmZlciBiZWxvbmdpbmcgdG8gdGhlIHBsYXllci5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIob3B0aW9ucy51cmwsIG9wdGlvbnMub25sb2FkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBDcmVhdGUgYSByZXBlYXRpbmcgdGljayB0byBzY2hlZHVsZVxuXHRcdFx0ICogIHRoZSBncmFpbnMuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNsb2NrfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jbG9jayA9IG5ldyBUb25lLkNsb2NrKHRoaXMuX3RpY2suYmluZCh0aGlzKSwgb3B0aW9ucy5ncmFpblNpemUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wRW5kID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEFsbCBvZiB0aGUgY3VycmVudGx5IHBsYXlpbmcgQnVmZmVyU291cmNlc1xuXHRcdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dyYWluU2l6ZSA9IG9wdGlvbnMuZ3JhaW5TaXplO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX292ZXJsYXAgPSBvcHRpb25zLm92ZXJsYXA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWRqdXN0IHRoZSBwaXRjaCBpbmRlcGVuZGVudGx5IG9mIHRoZSBwbGF5YmFja1JhdGUuXG5cdFx0XHQgKiAgQHR5cGUgIHtDZW50c31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gb3B0aW9ucy5kZXR1bmU7XG5cdCAgICAgICAgLy9zZXR1cFxuXHQgICAgICAgIHRoaXMub3ZlcmxhcCA9IG9wdGlvbnMub3ZlcmxhcDtcblx0ICAgICAgICB0aGlzLmxvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICB0aGlzLmdyYWluU2l6ZSA9IG9wdGlvbnMuZ3JhaW5TaXplO1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gb3B0aW9ucy5sb29wU3RhcnQ7XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gb3B0aW9ucy5sb29wRW5kO1xuXHQgICAgICAgIHRoaXMucmV2ZXJzZSA9IG9wdGlvbnMucmV2ZXJzZTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbignc3RvcCcsIHRoaXMuX29uc3RvcC5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdyYWluUGxheWVyLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdvdmVybGFwJzogMC4xLFxuXHQgICAgICAgICdncmFpblNpemUnOiAwLjIsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAnbG9vcEVuZCc6IDAsXG5cdCAgICAgICAgJ3JldmVyc2UnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQbGF5IHRoZSBidWZmZXIgYXQgdGhlIGdpdmVuIHN0YXJ0VGltZS4gT3B0aW9uYWxseSBhZGQgYW4gb2Zmc2V0XG5cdFx0ICogIGFuZC9vciBkdXJhdGlvbiB3aGljaCB3aWxsIHBsYXkgdGhlIGJ1ZmZlciBmcm9tIGEgcG9zaXRpb25cblx0XHQgKiAgd2l0aGluIHRoZSBidWZmZXIgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbc3RhcnRUaW1lPW5vd10gV2hlbiB0aGUgcGxheWVyIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW29mZnNldD0wXSBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBzYW1wbGUgc2hvdWxkIHBsYXkuIElmIG5vIGR1cmF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdpdmVuLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZ1bGwgbGVuZ3RoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzYW1wbGUgKG1pbnVzIGFueSBvZmZzZXQpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdyYWluUGxheWVyfSB0aGlzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqICBAbWV0aG9kIHN0YXJ0XG5cdFx0ICogIEBuYW1lIHN0YXJ0XG5cdFx0ICovXG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IG9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vZmZzZXQgPSBvZmZzZXQ7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suc3RhcnQodGltZSk7XG5cdCAgICAgICAgaWYgKGR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcCh0aW1lICsgdGhpcy50b1NlY29uZHMoZHVyYXRpb24pKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZWQgd2hlbiB0aGUgY2xvY2sgaXMgc3RvcHBlZFxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fb25zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL3N0b3AgdGhlIHBsYXllcnNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lLCAwKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW52b2tlZCBvbiBlYWNoIGNsb2NrIHRpY2suIHNjaGVkdWxlZCBhIG5ld1xuXHRcdCAqICBncmFpbiBhdCB0aGlzIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGZhZGVJbiA9IHRoaXMuX29mZnNldCA8IHRoaXMuX292ZXJsYXAgPyAwIDogdGhpcy5fb3ZlcmxhcDtcblx0ICAgICAgICB2YXIgc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKHtcblx0ICAgICAgICAgICAgJ2J1ZmZlcic6IHRoaXMuYnVmZmVyLFxuXHQgICAgICAgICAgICAnZmFkZUluJzogZmFkZUluLFxuXHQgICAgICAgICAgICAnZmFkZU91dCc6IHRoaXMuX292ZXJsYXAsXG5cdCAgICAgICAgICAgICdsb29wJzogdGhpcy5sb29wLFxuXHQgICAgICAgICAgICAnbG9vcFN0YXJ0JzogdGhpcy5fbG9vcFN0YXJ0LFxuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IHRoaXMuX2xvb3BFbmQsXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyh0aGlzLmRldHVuZSAvIDEwMClcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICBzb3VyY2Uuc3RhcnQodGltZSwgdGhpcy5fb2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLl9vZmZzZXQgKz0gdGhpcy5ncmFpblNpemU7XG5cdCAgICAgICAgc291cmNlLnN0b3AodGltZSArIHRoaXMuZ3JhaW5TaXplKTtcblx0ICAgICAgICAvL2FkZCBpdCB0byB0aGUgYWN0aXZlIHNvdXJjZXNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnB1c2goc291cmNlKTtcblx0ICAgICAgICAvL3JlbW92ZSBpdCB3aGVuIGl0J3MgZG9uZVxuXHQgICAgICAgIHNvdXJjZS5vbmVuZGVkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9hY3RpdmVTb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblx0ICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBKdW1wIHRvIGEgc3BlY2lmaWMgdGltZSBhbmQgcGxheSBpdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIG9mZnNldCAgVGhlIG9mZnNldCB0byBqdW1wIHRvLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSB0aW1lIFdoZW4gdG8gbWFrZSB0aGUganVtcC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuR3JhaW5QbGF5ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24gKG9mZnNldCwgdGltZSkge1xuXHQgICAgICAgIHRoaXMuX29mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgdGhpcy5fdGljayh0aGlzLnRvU2Vjb25kcyh0aW1lKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIHNhbXBsZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdGhpcy5ncmFpblNpemUgPSB0aGlzLl9ncmFpblNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbG9vcCBzdGFydCB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBsb29wIGVuZCB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGlyZWN0aW9uIHRoZSBidWZmZXIgc2hvdWxkIHBsYXkgaW5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSByZXZlcnNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdyZXZlcnNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXIucmV2ZXJzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJldikge1xuXHQgICAgICAgICAgICB0aGlzLmJ1ZmZlci5yZXZlcnNlID0gcmV2O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNpemUgb2YgZWFjaCBjaHVuayBvZiBhdWRpbyB0aGF0IHRoZVxuXHRcdCAqIGJ1ZmZlciBpcyBjaG9wcGVkIGludG8gYW5kIHBsYXllZCBiYWNrIGF0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGdyYWluU2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnZ3JhaW5TaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ3JhaW5TaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9ncmFpblNpemUgPSB0aGlzLnRvU2Vjb25kcyhzaXplKTtcblx0ICAgICAgICAgICAgdGhpcy5fY2xvY2suZnJlcXVlbmN5LnZhbHVlID0gdGhpcy5fcGxheWJhY2tSYXRlIC8gdGhpcy5fZ3JhaW5TaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhpcyBpcyB0aGUgZHVyYXRpb24gb2YgdGhlIGNyb3NzLWZhZGUgYmV0d2VlblxuXHRcdCAqIHN1Y2Vzc2l2ZSBncmFpbnMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgb3ZlcmxhcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnb3ZlcmxhcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX292ZXJsYXA7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX292ZXJsYXAgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5HcmFpblBsYXllcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdyYWluUGxheWVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGxheWVyIGlzIGFuIGF1ZGlvIGZpbGUgcGxheWVyIHdpdGggc3RhcnQsIGxvb3AsIGFuZCBzdG9wIGZ1bmN0aW9ucy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ3xBdWRpb0J1ZmZlcn0gdXJsIEVpdGhlciB0aGUgQXVkaW9CdWZmZXIgb3IgdGhlIHVybCBmcm9tXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggdG8gbG9hZCB0aGUgQXVkaW9CdWZmZXJcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBUaGUgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjb21tZW5kZWQgdG8gdXNlIFRvbmUuQnVmZmVyLm9uKCdsb2FkJykgaW5zdGVhZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGxheWVyID0gbmV3IFRvbmUuUGxheWVyKFwiLi9wYXRoL3RvL3NhbXBsZS5tcDNcIikudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3BsYXkgYXMgc29vbiBhcyB0aGUgYnVmZmVyIGlzIGxvYWRlZFxuXHRcdCAqIHBsYXllci5hdXRvc3RhcnQgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIgPSBmdW5jdGlvbiAodXJsKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnM7XG5cdCAgICAgICAgaWYgKHVybCBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyICYmIHVybC5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgdXJsID0gdXJsLmdldCgpO1xuXHQgICAgICAgICAgICBvcHRpb25zID0gVG9uZS5QbGF5ZXIuZGVmYXVsdHM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgICAgICdvbmxvYWQnXG5cdCAgICAgICAgICAgIF0sIFRvbmUuUGxheWVyKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiB0aGUgZmlsZSBzaG91bGQgcGxheSBhcyBzb29uXG5cdFx0XHQgKiAgYXMgdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vd2lsbCBwbGF5IGFzIHNvb24gYXMgaXQncyBsb2FkZWRcblx0XHRcdCAqIHZhciBwbGF5ZXIgPSBuZXcgVG9uZS5QbGF5ZXIoe1xuXHRcdFx0ICogXHRcInVybFwiIDogXCIuL3BhdGgvdG8vc2FtcGxlLm1wM1wiLFxuXHRcdFx0ICogXHRcImF1dG9zdGFydFwiIDogdHJ1ZSxcblx0XHRcdCAqIH0pLnRvTWFzdGVyKCk7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF1dG9zdGFydCA9IG9wdGlvbnMuYXV0b3N0YXJ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBidWZmZXJcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcih7XG5cdCAgICAgICAgICAgICd1cmwnOiBvcHRpb25zLnVybCxcblx0ICAgICAgICAgICAgJ29ubG9hZCc6IHRoaXMuX29ubG9hZC5iaW5kKHRoaXMsIG9wdGlvbnMub25sb2FkKSxcblx0ICAgICAgICAgICAgJ3JldmVyc2UnOiBvcHRpb25zLnJldmVyc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgQXVkaW9CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldCh1cmwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpZiB0aGUgYnVmZmVyIHNob3VsZCBsb29wIG9uY2UgaXQncyBvdmVyXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaWYgJ2xvb3AnIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgc3RhcnQgYXQgdGhpcyBwb3NpdGlvblxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSBvcHRpb25zLmxvb3BTdGFydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpZiAnbG9vcCcgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBlbmQgYXQgdGhpcyBwb3NpdGlvblxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wRW5kID0gb3B0aW9ucy5sb29wRW5kO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwbGF5YmFjayByYXRlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxsIG9mIHRoZSBhY3RpdmUgYnVmZmVyIHNvdXJjZSBub2Rlc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheTxUb25lLkJ1ZmZlclNvdXJjZT59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZWxhcHNlZCB0aW1lIGNvdW50ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGlja1NvdXJjZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSBuZXcgVG9uZS5UaWNrU291cmNlKG9wdGlvbnMucGxheWJhY2tSYXRlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZUluIHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZUluID0gb3B0aW9ucy5mYWRlSW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZhZGVPdXQgdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlT3V0ID0gb3B0aW9ucy5mYWRlT3V0O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGxheWVyLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdhdXRvc3RhcnQnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAnbG9vcEVuZCc6IDAsXG5cdCAgICAgICAgJ3JldHJpZ2dlcic6IGZhbHNlLFxuXHQgICAgICAgICdyZXZlcnNlJzogZmFsc2UsXG5cdCAgICAgICAgJ2ZhZGVJbic6IDAsXG5cdCAgICAgICAgJ2ZhZGVPdXQnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIExvYWQgdGhlIGF1ZGlvIGZpbGUgYXMgYW4gYXVkaW8gYnVmZmVyLlxuXHRcdCAqICBEZWNvZGVzIHRoZSBhdWRpbyBhc3luY2hyb25vdXNseSBhbmQgaW52b2tlc1xuXHRcdCAqICB0aGUgY2FsbGJhY2sgb25jZSB0aGUgYXVkaW8gYnVmZmVyIGxvYWRzLlxuXHRcdCAqICBOb3RlOiB0aGlzIGRvZXMgbm90IG5lZWQgdG8gYmUgY2FsbGVkIGlmIGEgdXJsXG5cdFx0ICogIHdhcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVjdG9yLiBPbmx5IHVzZSB0aGlzXG5cdFx0ICogIGlmIHlvdSB3YW50IHRvIG1hbnVhbGx5IGxvYWQgYSBuZXcgdXJsLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgYnVmZmVyIHRvIGxvYWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICBGaWxldHlwZSBzdXBwb3J0IGRlcGVuZHMgb24gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICBicm93c2VyLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBpbnZva2Ugb25jZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzYW1wbGUgaXMgbG9hZGVkLlxuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmxvYWQodXJsLCB0aGlzLl9vbmxvYWQuYmluZCh0aGlzLCBjYWxsYmFjaykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludGVybmFsIGNhbGxiYWNrIHdoZW4gdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fb25sb2FkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgY2FsbGJhY2sgPSBUb25lLmRlZmF1bHRBcmcoY2FsbGJhY2ssIFRvbmUubm9PcCk7XG5cdCAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuYXV0b3N0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RhcnQoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW50ZXJuYWwgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGRvbmUgcGxheWluZy5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9vblNvdXJjZUVuZCA9IGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9hY3RpdmVTb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBsYXkgdGhlIGJ1ZmZlciBhdCB0aGUgZ2l2ZW4gc3RhcnRUaW1lLiBPcHRpb25hbGx5IGFkZCBhbiBvZmZzZXRcblx0XHQgKiAgYW5kL29yIGR1cmF0aW9uIHdoaWNoIHdpbGwgcGxheSB0aGUgYnVmZmVyIGZyb20gYSBwb3NpdGlvblxuXHRcdCAqICB3aXRoaW4gdGhlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiAgQG1ldGhvZCBzdGFydFxuXHRcdCAqICBAbmFtZSBzdGFydFxuXHRcdCAqL1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICAvL2lmIGl0J3MgYSBsb29wIHRoZSBkZWZhdWx0IG9mZnNldCBpcyB0aGUgbG9vcHN0YXJ0IHBvaW50XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgdGhpcy5fbG9vcFN0YXJ0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL290aGVyd2lzZSB0aGUgZGVmYXVsdCBvZmZzZXQgaXMgMFxuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jb21wdXRlIHRoZSB2YWx1ZXMgaW4gc2Vjb25kc1xuXHQgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgdmFyIGNvbXB1dGVkRHVyYXRpb24gPSBUb25lLmRlZmF1bHRBcmcoZHVyYXRpb24sIE1hdGgubWF4KHRoaXMuX2J1ZmZlci5kdXJhdGlvbiAtIG9mZnNldCwgMCkpO1xuXHQgICAgICAgIGNvbXB1dGVkRHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhjb21wdXRlZER1cmF0aW9uKTtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGVsYXBzZWQgdGltZSBjb3VudGVyXG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuc3RhcnQoc3RhcnRUaW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgc291cmNlXG5cdCAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBUb25lLkJ1ZmZlclNvdXJjZSh7XG5cdCAgICAgICAgICAgICdidWZmZXInOiB0aGlzLl9idWZmZXIsXG5cdCAgICAgICAgICAgICdsb29wJzogdGhpcy5fbG9vcCxcblx0ICAgICAgICAgICAgJ2xvb3BTdGFydCc6IHRoaXMuX2xvb3BTdGFydCxcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiB0aGlzLl9sb29wRW5kLFxuXHQgICAgICAgICAgICAnb25lbmRlZCc6IHRoaXMuX29uU291cmNlRW5kLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiB0aGlzLl9wbGF5YmFja1JhdGUsXG5cdCAgICAgICAgICAgICdmYWRlSW4nOiB0aGlzLmZhZGVJbixcblx0ICAgICAgICAgICAgJ2ZhZGVPdXQnOiB0aGlzLmZhZGVPdXRcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL3NldCB0aGUgbG9vcGluZyBwcm9wZXJ0aWVzXG5cdCAgICAgICAgaWYgKCF0aGlzLl9sb29wICYmICF0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgLy9pZiBpdCdzIG5vdCBsb29waW5nLCBzZXQgdGhlIHN0YXRlIGNoYW5nZSBhdCB0aGUgZW5kIG9mIHRoZSBzYW1wbGVcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBzdGFydFRpbWUgKyBjb21wdXRlZER1cmF0aW9uIC8gdGhpcy5fcGxheWJhY2tSYXRlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hZGQgaXQgdG8gdGhlIGFycmF5IG9mIGFjdGl2ZSBzb3VyY2VzXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5wdXNoKHNvdXJjZSk7XG5cdCAgICAgICAgLy9zdGFydCBpdFxuXHQgICAgICAgIGlmICh0aGlzLl9sb29wICYmIFRvbmUuaXNVbmRlZihkdXJhdGlvbikpIHtcblx0ICAgICAgICAgICAgc291cmNlLnN0YXJ0KHN0YXJ0VGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RhcnQoc3RhcnRUaW1lLCBvZmZzZXQsIGNvbXB1dGVkRHVyYXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCBwbGF5YmFjay5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgc291cmNlLnN0b3AodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCBhbmQgdGhlbiByZXN0YXJ0IHRoZSBwbGF5ZXIgZnJvbSB0aGUgYmVnaW5uaW5nIChvciBvZmZzZXQpXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGFydCh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2VlayB0byBhIHNwZWNpZmljIHRpbWUgaW4gdGhlIHBsYXllcidzIGJ1ZmZlci4gSWYgdGhlXG5cdFx0ICogIHNvdXJjZSBpcyBubyBsb25nZXIgcGxheWluZyBhdCB0aGF0IHRpbWUsIGl0IHdpbGwgc3RvcC5cblx0XHQgKiAgSWYgeW91IHNlZWsgdG8gYSB0aW1lIHRoYXRcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBvZmZzZXQgVGhlIHRpbWUgdG8gc2VlayB0by5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gdGltZSBUaGUgdGltZSBmb3IgdGhlIHNlZWsgZXZlbnQgdG8gb2NjdXIuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0YXJ0KDAuMik7XG5cdFx0ICogc291cmNlLnN0b3AoMC40KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24gKG9mZnNldCwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgICAgICAvLyBpZiBpdCdzIGN1cnJlbnRseSBwbGF5aW5nLCBzdG9wIGl0XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3AodGltZSk7XG5cdCAgICAgICAgICAgIC8vcmVzdGFydCBpdCBhdCB0aGUgZ2l2ZW4gdGltZVxuXHQgICAgICAgICAgICB0aGlzLl9zdGFydCh0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBsb29wIHN0YXJ0IGFuZCBlbmQuIFdpbGwgb25seSBsb29wIGlmIGxvb3AgaXNcblx0XHQgKiAgc2V0IHRvIHRydWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gbG9vcFN0YXJ0IFRoZSBsb29wIGVuZCB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gbG9vcEVuZCBUaGUgbG9vcCBlbmQgdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xvb3AgMC4xIHNlY29uZHMgb2YgdGhlIGZpbGUuXG5cdFx0ICogcGxheWVyLnNldExvb3BQb2ludHMoMC4yLCAwLjMpO1xuXHRcdCAqIHBsYXllci5sb29wID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5zZXRMb29wUG9pbnRzID0gZnVuY3Rpb24gKGxvb3BTdGFydCwgbG9vcEVuZCkge1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gbG9vcFN0YXJ0O1xuXHQgICAgICAgIHRoaXMubG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgbG9vcCBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIHN0YXJ0IGF0IHRoaXMgcG9zaXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSBjdXJyZW50IHNvdXJjZVxuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgc291cmNlLmxvb3BTdGFydCA9IGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgZW5kIGF0IHRoaXMgcG9zaXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSBjdXJyZW50IHNvdXJjZVxuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgc291cmNlLmxvb3BFbmQgPSBsb29wRW5kO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhdWRpbyBidWZmZXIgYmVsb25naW5nIHRvIHRoZSBwbGF5ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHQgKiBAbmFtZSBidWZmZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdidWZmZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChidWZmZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlciBzaG91bGQgbG9vcCBvbmNlIGl0J3Mgb3Zlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9vcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICAvL2lmIG5vIGNoYW5nZSwgZG8gbm90aGluZ1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCA9PT0gbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKCFsb29wKSB7XG5cdCAgICAgICAgICAgICAgICAvL3N0b3AgdGhlIHBsYXliYWNrIG9uIHRoZSBuZXh0IGN5Y2xlXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdG9wQXROZXh0SXRlcmF0aW9uKG5vdyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvL3JlbW92ZSB0aGUgbmV4dCBzdG9wRXZlbnRcblx0ICAgICAgICAgICAgICAgIHZhciBzdG9wRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXROZXh0U3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBub3cpO1xuXHQgICAgICAgICAgICAgICAgaWYgKHN0b3BFdmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwoc3RvcEV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLmNhbmNlbChzdG9wRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYSBzdG9wIGV2ZW50IGF0IHRoZSBuZXh0IGZ1bGwgaXRlcmF0aW9uLiBVc2VkXG5cdFx0ICogIGZvciBzY2hlZHVsaW5nIHN0b3Agd2hlbiB0aGUgbG9vcCBzdGF0ZSBvciBwbGF5YmFja1JhdGUgY2hhbmdlc1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBub3cgIFRoZSBjdXJyZW50IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fc3RvcEF0TmV4dEl0ZXJhdGlvbiA9IGZ1bmN0aW9uIChub3cpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUobm93KSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHZhciBuZXh0U3RvcCA9IHRoaXMuX3N0YXRlLmdldE5leHRTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIG5vdyk7XG5cdCAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuX2VsYXBzZWRUaW1lLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgIHZhciBpdGVyYXRpb25zID0gTWF0aC5tYXgoTWF0aC5jZWlsKHBvc2l0aW9uIC8gdGhpcy5idWZmZXIuZHVyYXRpb24pLCAxKTtcblx0ICAgICAgICAgICAgdmFyIHN0b3BUaW1lID0gdGhpcy5fZWxhcHNlZFRpbWUuZ2V0VGltZU9mVGljayhpdGVyYXRpb25zICogdGhpcy5idWZmZXIuZHVyYXRpb24sIG5leHRTdG9wID8gbmV4dFN0b3AudGltZSAtIHRoaXMuc2FtcGxlVGltZSA6IEluZmluaXR5KTtcblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHN0b3BUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBsYXliYWNrIHNwZWVkLiAxIGlzIG5vcm1hbCBzcGVlZC4gVGhpcyBpcyBub3QgYSBzaWduYWwgYmVjYXVzZVxuXHRcdCAqIFNhZmFyaSBhbmQgaU9TIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IHBsYXliYWNrUmF0ZSBhcyBhIHNpZ25hbC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdwbGF5YmFja1JhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUocmF0ZSwgbm93KTtcblx0ICAgICAgICAgICAgLy9pZiBpdCdzIG5vdCBsb29waW5nXG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RvcEF0TmV4dEl0ZXJhdGlvbihub3cpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vc2V0IGFsbCB0aGUgc291cmNlc1xuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgc291cmNlLnBsYXliYWNrUmF0ZS5zZXRWYWx1ZUF0VGltZShyYXRlLCBub3cpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIG9mIHRoZSBidWZmZXIuIFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBvc2l0aW9uXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAncG9zaXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUobm93KSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIHRoaXMubG9hZGVkKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZHVyYXRpb24gPSB0aGlzLmJ1ZmZlci5kdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuX2VsYXBzZWRUaW1lLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gJSBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGlyZWN0aW9uIHRoZSBidWZmZXIgc2hvdWxkIHBsYXkgaW5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgcmV2ZXJzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ3JldmVyc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIucmV2ZXJzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJldikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIucmV2ZXJzZSA9IHJldjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGFsbCB0aGUgYnVmZmVyIGlzIGxvYWRlZFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3QuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2Rpc2Nvbm5lY3QgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgc291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0gbnVsbDtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBsYXllcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBsYXllcnMgY29tYmluZXMgbXVsdGlwbGUgW1RvbmUuUGxheWVyXShQbGF5ZXIpIG9iamVjdHMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IHVybHMgQW4gb2JqZWN0IG1hcHBpbmcgYSBuYW1lIHRvIGEgdXJsLlxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9uPX0gb25sb2FkIFRoZSBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiBhbGwgYnVmZmVycyBhcmUgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzID0gZnVuY3Rpb24gKHVybHMpIHtcblx0ICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgYXJncy5zaGlmdCgpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmdzLCBbJ29ubG9hZCddLCBUb25lLlBsYXllcnMpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IHZvbHVtZSBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIHNvdXJjZS52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLy9tYWtlIHRoZSBvdXRwdXQgZXhwbGljaXRseSBzdGVyZW9cblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnQgPSAyO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIC8vbXV0ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY29udGFpbmVyIG9mIGFsbCBvZiB0aGUgcGxheWVyc1xuXHRcdFx0ICogQHR5cGUge09iamVjdH1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzID0ge307XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbG9hZGluZyBjb3VudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogcHJpdmF0ZSBob2xkZXIgb2YgdGhlIGZhZGVJbiB0aW1lXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mYWRlSW4gPSBvcHRpb25zLmZhZGVJbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHByaXZhdGUgaG9sZGVyIG9mIHRoZSBmYWRlT3V0IHRpbWVcblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZhZGVPdXQgPSBvcHRpb25zLmZhZGVPdXQ7XG5cdCAgICAgICAgLy9hZGQgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB1cmxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCsrO1xuXHQgICAgICAgICAgICB0aGlzLmFkZChuYW1lLCB1cmxzW25hbWVdLCB0aGlzLl9idWZmZXJMb2FkZWQuYmluZCh0aGlzLCBvcHRpb25zLm9ubG9hZCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBsYXllcnMsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZSxcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdmYWRlSW4nOiAwLFxuXHQgICAgICAgICdmYWRlT3V0JzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIGJ1ZmZlciB3YXMgbG9hZGVkLiBkZWNyZW1lbnQgdGhlIGNvdW50ZXIuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2tcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuX2J1ZmZlckxvYWRlZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudC0tO1xuXHQgICAgICAgIGlmICh0aGlzLl9sb2FkaW5nQ291bnQgPT09IDAgJiYgY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiBzb3VyY2UubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGZhZGVJbiB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGZhZGVJblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdmYWRlSW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mYWRlSW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmYWRlSW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmFkZUluID0gZmFkZUluO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHBsYXllci5mYWRlSW4gPSBmYWRlSW47XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGZhZGVPdXQgdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBmYWRlT3V0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ2ZhZGVPdXQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mYWRlT3V0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZmFkZU91dCkge1xuXHQgICAgICAgICAgICB0aGlzLl9mYWRlT3V0ID0gZmFkZU91dDtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgICAgICBwbGF5ZXIuZmFkZU91dCA9IGZhZGVPdXQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHN0YXRlIG9mIHRoZSBwbGF5ZXJzIG9iamVjdC4gUmV0dXJucyBcInN0YXJ0ZWRcIiBpZiBhbnkgb2YgdGhlIHBsYXllcnMgYXJlIHBsYXlpbmcuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVycyNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIHN0YXRlXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgcGxheWluZyA9IGZhbHNlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHBsYXlpbmcgPSBwbGF5aW5nIHx8IHBsYXllci5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgcmV0dXJuIHBsYXlpbmcgPyBUb25lLlN0YXRlLlN0YXJ0ZWQgOiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVHJ1ZSBpZiB0aGUgYnVmZmVycyBvYmplY3QgaGFzIGEgYnVmZmVyIGJ5IHRoYXQgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIG5hbWUgIFRoZSBrZXkgb3IgaW5kZXggb2YgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuXG5cdFx0ICogIEByZXR1cm4gIHtCb29sZWFufVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXJzLmhhc093blByb3BlcnR5KG5hbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgYSBwbGF5ZXIgYnkgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgbmFtZSAgVGhlIHBsYXllcnMgbmFtZSBhcyBkZWZpbmVkIGluXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25zdHJ1Y3RvciBvYmplY3Qgb3IgYGFkZGAgbWV0aG9kLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QbGF5ZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuaGFzKG5hbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXJzW25hbWVdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5QbGF5ZXJzOiBubyBwbGF5ZXIgbmFtZWQgJyArIG5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdFx0ICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG5cdFx0ICogQHJldHVybiB7VG9uZS5QbGF5ZXJzfSAgICAgICAgICAgIHRoaXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5fZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIGZvciAodmFyIHBsYXllck5hbWUgaW4gdGhpcy5fcGxheWVycykge1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9wbGF5ZXJzW3BsYXllck5hbWVdLCBwbGF5ZXJOYW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgYWxsIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVycyNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaXNMb2FkZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIGlzTG9hZGVkID0gaXNMb2FkZWQgJiYgcGxheWVyLmxvYWRlZDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHJldHVybiBpc0xvYWRlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBwbGF5ZXIgYnkgbmFtZSBhbmQgdXJsIHRvIHRoZSBQbGF5ZXJzXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgbmFtZSAgICAgIEEgdW5pcXVlIG5hbWUgdG8gZ2l2ZSB0aGUgcGxheWVyXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xUb25lLkJ1ZmZlcnxBdWRpb2J1ZmZlcn0gIHVybCAgRWl0aGVyIHRoZSB1cmwgb2YgdGhlIGJ1ZmVyLFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYWRkZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzW25hbWVdID0gbmV3IFRvbmUuUGxheWVyKHVybCwgY2FsbGJhY2spLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnNbbmFtZV0uZmFkZUluID0gdGhpcy5fZmFkZUluO1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnNbbmFtZV0uZmFkZU91dCA9IHRoaXMuX2ZhZGVPdXQ7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCBhbGwgb2YgdGhlIHBsYXllcnMgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gc3RvcCBhbGwgb2YgdGhlIHBsYXllcnMuXG5cdFx0ICogQHJldHVybiB7VG9uZS5QbGF5ZXJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLnN0b3BBbGwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICBwbGF5ZXIuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRGlzcG9zZSBhbmQgZGlzY29ubmVjdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QbGF5ZXJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgIHBsYXllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGxheWVycyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGxheWVycztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlVzZXJNZWRpYSB1c2VzIE1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEgdG8gb3BlbiB1cFxuXHRcdCAqICAgICAgICAgIGFuZCBleHRlcm5hbCBtaWNyb3Bob25lIG9yIGF1ZGlvIGlucHV0LiBDaGVja1xuXHRcdCAqICAgICAgICAgIFtNZWRpYURldmljZXMgQVBJIFN1cHBvcnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9NZWRpYURldmljZXMvZ2V0VXNlck1lZGlhKVxuXHRcdCAqICAgICAgICAgIHRvIHNlZSB3aGljaCBicm93c2VycyBhcmUgc3VwcG9ydGVkLiBBY2Nlc3MgdG8gYW4gZXh0ZXJuYWwgaW5wdXRcblx0XHQgKiAgICAgICAgICBpcyBsaW1pdGVkIHRvIHNlY3VyZSAoSFRUUFMpIGNvbm5lY3Rpb25zLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHM9fSB2b2x1bWUgVGhlIGxldmVsIG9mIHRoZSBpbnB1dFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbGlzdCB0aGUgaW5wdXRzIGFuZCBvcGVuIHRoZSB0aGlyZCBvbmVcblx0XHQgKiB2YXIgbW90dSA9IG5ldyBUb25lLlVzZXJNZWRpYSgpO1xuXHRcdCAqXG5cdFx0ICogLy9vcGVuaW5nIHRoZSBpbnB1dCBhc2tzIHRoZSB1c2VyIHRvIGFjdGl2YXRlIHRoZWlyIG1pY1xuXHRcdCAqIG1vdHUub3BlbigpLnRoZW4oZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vcHJvbWlzZSByZXNvbHZlcyB3aGVuIGlucHV0IGlzIGF2YWlsYWJsZVxuXHRcdCAqIH0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd2b2x1bWUnXSwgVG9uZS5Vc2VyTWVkaWEpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIE1lZGlhU3RyZWFtTm9kZVxuXHRcdFx0ICogIEB0eXBlIHtNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0gPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtZWRpYSBzdHJlYW0gY3JlYXRlZCBieSBnZXRVc2VyTWVkaWEuXG5cdFx0XHQgKiAgQHR5cGUge0xvY2FsTWVkaWFTdHJlYW19XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9wZW4gZGV2aWNlXG5cdFx0XHQgKiAgQHR5cGUgIHtNZWRpYURldmljZUluZm99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RldmljZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBpbnB1dC52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVXNlck1lZGlhLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVXNlck1lZGlhLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgT3BlbiB0aGUgbWVkaWEgc3RyZWFtLiBJZiBhIHN0cmluZyBpcyBwYXNzZWQgaW4sIGl0IGlzIGFzc3VtZWRcblx0XHQgKiAgdG8gYmUgdGhlIGxhYmVsIG9yIGlkIG9mIHRoZSBzdHJlYW0sIGlmIGEgbnVtYmVyIGlzIHBhc3NlZCBpbixcblx0XHQgKiAgaXQgaXMgdGhlIGlucHV0IG51bWJlciBvZiB0aGUgc3RyZWFtLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSBbbGFiZWxPcklkPVwiZGVmYXVsdFwiXSBUaGUgbGFiZWwgb3IgaWQgb2YgdGhlIGF1ZGlvIGlucHV0IG1lZGlhIGRldmljZS5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggbm8gYXJndW1lbnQsIHRoZSBkZWZhdWx0IHN0cmVhbSBpcyBvcGVuZWQuXG5cdFx0ICogIEByZXR1cm4ge1Byb21pc2V9IFRoZSBwcm9taXNlIGlzIHJlc29sdmVkIHdoZW4gdGhlIHN0cmVhbSBpcyBvcGVuLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAobGFiZWxPcklkKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuVXNlck1lZGlhLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uIChkZXZpY2VzKSB7XG5cdCAgICAgICAgICAgIHZhciBkZXZpY2U7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGxhYmVsT3JJZCkpIHtcblx0ICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZXNbbGFiZWxPcklkXTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZXMuZmluZChmdW5jdGlvbiAoZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRldmljZS5sYWJlbCA9PT0gbGFiZWxPcklkIHx8IGRldmljZS5kZXZpY2VJZCA9PT0gbGFiZWxPcklkO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICAvL2RpZG4ndCBmaW5kIGEgbWF0Y2hpbmcgZGV2aWNlXG5cdCAgICAgICAgICAgICAgICBpZiAoIWRldmljZSAmJiBkZXZpY2VzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICBkZXZpY2UgPSBkZXZpY2VzWzBdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZGV2aWNlICYmIFRvbmUuaXNEZWZpbmVkKGxhYmVsT3JJZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuVXNlck1lZGlhOiBubyBtYXRjaGluZyBkZXZpY2U6ICcgKyBsYWJlbE9ySWQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2RldmljZSA9IGRldmljZTtcblx0ICAgICAgICAgICAgLy9kbyBnZXRVc2VyTWVkaWFcblx0ICAgICAgICAgICAgdmFyIGNvbnN0cmFpbnRzID0ge1xuXHQgICAgICAgICAgICAgICAgYXVkaW86IHtcblx0ICAgICAgICAgICAgICAgICAgICAnZWNob0NhbmNlbGxhdGlvbic6IGZhbHNlLFxuXHQgICAgICAgICAgICAgICAgICAgICdzYW1wbGVSYXRlJzogdGhpcy5jb250ZXh0LnNhbXBsZVJhdGVcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgaWYgKGRldmljZSkge1xuXHQgICAgICAgICAgICAgICAgY29uc3RyYWludHMuYXVkaW8uZGV2aWNlSWQgPSBkZXZpY2UuZGV2aWNlSWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKGNvbnN0cmFpbnRzKS50aGVuKGZ1bmN0aW9uIChzdHJlYW0pIHtcblx0ICAgICAgICAgICAgICAgIC8vc3RhcnQgYSBuZXcgc291cmNlIG9ubHkgaWYgdGhlIHByZXZpb3VzIG9uZSBpcyBjbG9zZWRcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc3RyZWFtKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vV3JhcCBhIE1lZGlhU3RyZWFtU291cmNlTm9kZSBhcm91bmQgdGhlIGxpdmUgaW5wdXQgc3RyZWFtLlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtID0gdGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHN0cmVhbSk7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9Db25uZWN0IHRoZSBNZWRpYVN0cmVhbVNvdXJjZU5vZGUgdG8gYSBnYXRlIGdhaW4gbm9kZVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xvc2UgdGhlIG1lZGlhIHN0cmVhbVxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlVzZXJNZWRpYX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdHJlYW0pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RyZWFtLmdldEF1ZGlvVHJhY2tzKCkuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcblx0ICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBvbGQgbWVkaWEgc3RyZWFtXG5cdCAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9kZXZpY2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIHRoZSBsaXN0IG9mIGF1ZGlvIGlucHV0IGRldmljZXMgYXZhaWxhYmxlLlxuXHRcdCAqICBAcmV0dXJuIHtQcm9taXNlfSBUaGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggdGhlIGRldmljZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVXNlck1lZGlhLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uKGRldmljZXMpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2coZGV2aWNlcylcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEuZW51bWVyYXRlRGV2aWNlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKCkudGhlbihmdW5jdGlvbiAoZGV2aWNlcykge1xuXHQgICAgICAgICAgICByZXR1cm4gZGV2aWNlcy5maWx0ZXIoZnVuY3Rpb24gKGRldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGRldmljZS5raW5kID09PSAnYXVkaW9pbnB1dCc7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBcInN0YXJ0ZWRcIiB3aGVuIHRoZSBtaWNyb3Bob25lIGlzIG9wZW5cblx0XHQgKiAgYW5kIFwic3RvcHBlZFwiIHdoZW4gdGhlIG1pYyBpcyBjbG9zZWQuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtICYmIHRoaXMuX3N0cmVhbS5hY3RpdmUgPyBUb25lLlN0YXRlLlN0YXJ0ZWQgOiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFJldHVybnMgYW4gaWRlbnRpZmllciBmb3IgdGhlIHJlcHJlc2VudGVkIGRldmljZSB0aGF0IGlzXG5cdFx0ICogXHRwZXJzaXN0ZWQgYWNyb3NzIHNlc3Npb25zLiBJdCBpcyB1bi1ndWVzc2FibGUgYnkgb3RoZXIgYXBwbGljYXRpb25zIGFuZFxuXHRcdCAqIFx0dW5pcXVlIHRvIHRoZSBvcmlnaW4gb2YgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uIEl0IGlzIHJlc2V0IHdoZW4gdGhlXG5cdFx0ICogXHR1c2VyIGNsZWFycyBjb29raWVzIChmb3IgUHJpdmF0ZSBCcm93c2luZywgYSBkaWZmZXJlbnQgaWRlbnRpZmllciBpc1xuXHRcdCAqIFx0dXNlZCB0aGF0IGlzIG5vdCBwZXJzaXN0ZWQgYWNyb3NzIHNlc3Npb25zKS4gUmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGVcblx0XHQgKiBcdGRldmljZSBpcyBub3Qgb3Blbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgZGV2aWNlSWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdkZXZpY2VJZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZS5kZXZpY2VJZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRSZXR1cm5zIGEgZ3JvdXAgaWRlbnRpZmllci4gVHdvIGRldmljZXMgaGF2ZSB0aGVcblx0XHQgKiBcdHNhbWUgZ3JvdXAgaWRlbnRpZmllciBpZiB0aGV5IGJlbG9uZyB0byB0aGUgc2FtZSBwaHlzaWNhbCBkZXZpY2UuXG5cdFx0ICogXHRSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZSBkZXZpY2UgaXMgbm90IG9wZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIGdyb3VwSWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdncm91cElkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlLmdyb3VwSWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0UmV0dXJucyBhIGxhYmVsIGRlc2NyaWJpbmcgdGhpcyBkZXZpY2UgKGZvciBleGFtcGxlIFwiQnVpbHQtaW4gTWljcm9waG9uZVwiKS5cblx0XHQgKiBcdFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlIGRldmljZSBpcyBub3Qgb3BlbiBvciBsYWJlbCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogXHRiZWNhdXNlIG9mIHBlcm1pc3Npb25zLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBncm91cElkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnbGFiZWwnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2UubGFiZWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiB1c2VyTWVkaWEubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cC5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlVzZXJNZWRpYX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNsb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIElmIGdldFVzZXJNZWRpYSBpcyBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIuXG5cdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBzdXBwb3J0ZWRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYSwgJ3N1cHBvcnRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuaXNEZWZpbmVkKG5hdmlnYXRvci5tZWRpYURldmljZXMpICYmIFRvbmUuaXNGdW5jdGlvbihuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5Vc2VyTWVkaWE7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5NaWRpIGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIFRpbWUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgVG9uZS5NaWRpIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIG9yIHdpdGhvdXQgdGhlIGBuZXdgIGtleXdvcmQuIFRvbmUuTWlkaSBjYW4gYmUgcGFzc2VkXG5cdFx0ICogICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgb2YgYW55IG1ldGhvZCB3aGljaCB0YWtlcyB0aW1lIGFzIGFuIGFyZ3VtZW50LlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRnJlcXVlbmN5fVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHQgPSBUb25lLk1pZGkoXCI0blwiKTsvL2EgcXVhcnRlciBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5NaWRpKSB7XG5cdCAgICAgICAgICAgIFRvbmUuRnJlcXVlbmN5LmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLk1pZGkodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkaSwgVG9uZS5GcmVxdWVuY3kpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fZGVmYXVsdFVuaXRzID0gJ21pZGknO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgZnJlcXVlbmN5IGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMuY2FsbCh0aGlzLCBmcmVxKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgdGljayBpbiB0aGUgY3VycmVudCB0aW1lIHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7VGlja3N9IHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cy5jYWxsKHRoaXMsIHRpY2tzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20oVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMuY2FsbCh0aGlzLCBiZWF0cykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzLmNhbGwodGhpcywgc2Vjb25kcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgYXMgYSBNSURJIG5vdGVcblx0XHQgKiAgQHJldHVybiAge01JREl9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5NaWRpKDYwKS50b01pZGkoKTsgLy82MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS50b01pZGkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgYXMgYSBNSURJIG5vdGVcblx0XHQgKiAgQHJldHVybiAge01JREl9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5NaWRpKDYwKS50b01pZGkoKTsgLy82MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kubXRvZih0aGlzLnRvTWlkaSgpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJhbnNwb3NlcyB0aGUgZnJlcXVlbmN5IGJ5IHRoZSBnaXZlbiBudW1iZXIgb2Ygc2VtaXRvbmVzLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbH0gIGludGVydmFsXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkZyZXF1ZW5jeX0gQSBuZXcgdHJhbnNwb3NlZCBmcmVxdWVuY3lcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkE0XCIpLnRyYW5zcG9zZSgzKTsgLy9cIkM1XCJcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUudHJhbnNwb3NlID0gZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMudG9NaWRpKCkgKyBpbnRlcnZhbCk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkaTtcblx0fSk7XG5cdFxuXHRyZXR1cm4gVG9uZTtcbn0pKTsiLCIvKiEgcDUuanMgdjAuNy4yIFNlcHRlbWJlciAwMiwgMjAxOCAqLyAhZnVuY3Rpb24oYSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9YSgpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxhKTtlbHNle3ZhciBiO2I9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLGIucDU9YSgpfX0oZnVuY3Rpb24oKXt2YXIgYTtyZXR1cm4gZnVuY3Rpb24gYShiLGMsZCl7ZnVuY3Rpb24gZShnLGgpe2lmKCFjW2ddKXtpZighYltnXSl7dmFyIGk9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighaCYmaSlyZXR1cm4gaShnLCEwKTtpZihmKXJldHVybiBmKGcsITApO3ZhciBqPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrZytcIidcIik7dGhyb3cgai5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGp9dmFyIGs9Y1tnXT17ZXhwb3J0czp7fX07YltnXVswXS5jYWxsKGsuZXhwb3J0cyxmdW5jdGlvbihhKXt2YXIgYz1iW2ddWzFdW2FdO3JldHVybiBlKGN8fGEpfSxrLGsuZXhwb3J0cyxhLGIsYyxkKX1yZXR1cm4gY1tnXS5leHBvcnRzfWZvcih2YXIgZj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGc9MDtnPGQubGVuZ3RoO2crKyllKGRbZ10pO3JldHVybiBlfSh7MTpbZnVuY3Rpb24oYSxiLGMpeyFmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGEpe3ZhciBiPWEuY2hhckNvZGVBdCgwKTtyZXR1cm4gYj09PWZ8fGI9PT1rPzYyOmI9PT1nfHxiPT09bD82MzpiPGg/LTE6YjxoKzEwP2ItaCsyNisyNjpiPGorMjY/Yi1qOmI8aSsyNj9iLWkrMjY6dm9pZCAwfWZ1bmN0aW9uIGMoYSl7ZnVuY3Rpb24gYyhhKXtqW2wrK109YX12YXIgZCxmLGcsaCxpLGo7aWYoYS5sZW5ndGglND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7dmFyIGs9YS5sZW5ndGg7aT1cIj1cIj09PWEuY2hhckF0KGstMik/MjpcIj1cIj09PWEuY2hhckF0KGstMSk/MTowLGo9bmV3IGUoMyphLmxlbmd0aC80LWkpLGc9aT4wP2EubGVuZ3RoLTQ6YS5sZW5ndGg7dmFyIGw9MDtmb3IoZD0wLGY9MDtkPGc7ZCs9NCxmKz0zKWg9YihhLmNoYXJBdChkKSk8PDE4fGIoYS5jaGFyQXQoZCsxKSk8PDEyfGIoYS5jaGFyQXQoZCsyKSk8PDZ8YihhLmNoYXJBdChkKzMpKSxjKCgxNjcxMTY4MCZoKT4+MTYpLGMoKDY1MjgwJmgpPj44KSxjKDI1NSZoKTtyZXR1cm4gMj09PWk/KGg9YihhLmNoYXJBdChkKSk8PDJ8YihhLmNoYXJBdChkKzEpKT4+NCxjKDI1NSZoKSk6MT09PWkmJihoPWIoYS5jaGFyQXQoZCkpPDwxMHxiKGEuY2hhckF0KGQrMSkpPDw0fGIoYS5jaGFyQXQoZCsyKSk+PjIsYyhoPj44JjI1NSksYygyNTUmaCkpLGp9ZnVuY3Rpb24gZChhKXtmdW5jdGlvbiBiKGEpe3JldHVyblwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLmNoYXJBdChhKX1mdW5jdGlvbiBjKGEpe3JldHVybiBiKGE+PjE4JjYzKStiKGE+PjEyJjYzKStiKGE+PjYmNjMpK2IoNjMmYSl9dmFyIGQsZSxmLGc9YS5sZW5ndGglMyxoPVwiXCI7Zm9yKGQ9MCxmPWEubGVuZ3RoLWc7ZDxmO2QrPTMpZT0oYVtkXTw8MTYpKyhhW2QrMV08PDgpK2FbZCsyXSxoKz1jKGUpO3N3aXRjaChnKXtjYXNlIDE6ZT1hW2EubGVuZ3RoLTFdLGgrPWIoZT4+MiksaCs9YihlPDw0JjYzKSxoKz1cIj09XCI7YnJlYWs7Y2FzZSAyOmU9KGFbYS5sZW5ndGgtMl08PDgpK2FbYS5sZW5ndGgtMV0saCs9YihlPj4xMCksaCs9YihlPj40JjYzKSxoKz1iKGU8PDImNjMpLGgrPVwiPVwifXJldHVybiBofXZhciBlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksZj1cIitcIi5jaGFyQ29kZUF0KDApLGc9XCIvXCIuY2hhckNvZGVBdCgwKSxoPVwiMFwiLmNoYXJDb2RlQXQoMCksaT1cImFcIi5jaGFyQ29kZUF0KDApLGo9XCJBXCIuY2hhckNvZGVBdCgwKSxrPVwiLVwiLmNoYXJDb2RlQXQoMCksbD1cIl9cIi5jaGFyQ29kZUF0KDApO2EudG9CeXRlQXJyYXk9YyxhLmZyb21CeXRlQXJyYXk9ZH0odm9pZCAwPT09Yz90aGlzLmJhc2U2NGpzPXt9OmMpfSx7fV0sMjpbZnVuY3Rpb24oYSxiLGMpe30se31dLDM6W2Z1bmN0aW9uKGEsYixjKXsoZnVuY3Rpb24oYil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZCgpe2Z1bmN0aW9uIGEoKXt9dHJ5e3ZhciBiPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBiLmZvbz1mdW5jdGlvbigpe3JldHVybiA0Mn0sYi5jb25zdHJ1Y3Rvcj1hLDQyPT09Yi5mb28oKSYmYi5jb25zdHJ1Y3Rvcj09PWEmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGIuc3ViYXJyYXkmJjA9PT1iLnN1YmFycmF5KDEsMSkuYnl0ZUxlbmd0aH1jYXRjaChhKXtyZXR1cm4hMX19ZnVuY3Rpb24gZSgpe3JldHVybiBmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIGYoYSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBmPyhmLlRZUEVEX0FSUkFZX1NVUFBPUlR8fCh0aGlzLmxlbmd0aD0wLHRoaXMucGFyZW50PXZvaWQgMCksXCJudW1iZXJcIj09dHlwZW9mIGE/Zyh0aGlzLGEpOlwic3RyaW5nXCI9PXR5cGVvZiBhP2godGhpcyxhLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06XCJ1dGY4XCIpOmkodGhpcyxhKSk6YXJndW1lbnRzLmxlbmd0aD4xP25ldyBmKGEsYXJndW1lbnRzWzFdKTpuZXcgZihhKX1mdW5jdGlvbiBnKGEsYil7aWYoYT1wKGEsYjwwPzA6MHxxKGIpKSwhZi5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgYz0wO2M8YjtjKyspYVtjXT0wO3JldHVybiBhfWZ1bmN0aW9uIGgoYSxiLGMpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBjJiZcIlwiIT09Y3x8KGM9XCJ1dGY4XCIpLGE9cChhLDB8cyhiLGMpKSxhLndyaXRlKGIsYyksYX1mdW5jdGlvbiBpKGEsYil7aWYoZi5pc0J1ZmZlcihiKSlyZXR1cm4gaihhLGIpO2lmKFkoYikpcmV0dXJuIGsoYSxiKTtpZihudWxsPT1iKXRocm93IG5ldyBUeXBlRXJyb3IoXCJtdXN0IHN0YXJ0IHdpdGggbnVtYmVyLCBidWZmZXIsIGFycmF5IG9yIHN0cmluZ1wiKTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXIpe2lmKGIuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIGwoYSxiKTtpZihiIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIG0oYSxiKX1yZXR1cm4gYi5sZW5ndGg/bihhLGIpOm8oYSxiKX1mdW5jdGlvbiBqKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTtyZXR1cm4gYT1wKGEsYyksYi5jb3B5KGEsMCwwLGMpLGF9ZnVuY3Rpb24gayhhLGIpe3ZhciBjPTB8cShiLmxlbmd0aCk7YT1wKGEsYyk7Zm9yKHZhciBkPTA7ZDxjO2QrPTEpYVtkXT0yNTUmYltkXTtyZXR1cm4gYX1mdW5jdGlvbiBsKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTthPXAoYSxjKTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlhW2RdPTI1NSZiW2RdO3JldHVybiBhfWZ1bmN0aW9uIG0oYSxiKXtyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyhiLmJ5dGVMZW5ndGgsYT1mLl9hdWdtZW50KG5ldyBVaW50OEFycmF5KGIpKSk6YT1sKGEsbmV3IFVpbnQ4QXJyYXkoYikpLGF9ZnVuY3Rpb24gbihhLGIpe3ZhciBjPTB8cShiLmxlbmd0aCk7YT1wKGEsYyk7Zm9yKHZhciBkPTA7ZDxjO2QrPTEpYVtkXT0yNTUmYltkXTtyZXR1cm4gYX1mdW5jdGlvbiBvKGEsYil7dmFyIGMsZD0wO1wiQnVmZmVyXCI9PT1iLnR5cGUmJlkoYi5kYXRhKSYmKGM9Yi5kYXRhLGQ9MHxxKGMubGVuZ3RoKSksYT1wKGEsZCk7Zm9yKHZhciBlPTA7ZTxkO2UrPTEpYVtlXT0yNTUmY1tlXTtyZXR1cm4gYX1mdW5jdGlvbiBwKGEsYil7cmV0dXJuIGYuVFlQRURfQVJSQVlfU1VQUE9SVD8oYT1mLl9hdWdtZW50KG5ldyBVaW50OEFycmF5KGIpKSxhLl9fcHJvdG9fXz1mLnByb3RvdHlwZSk6KGEubGVuZ3RoPWIsYS5faXNCdWZmZXI9ITApLDAhPT1iJiZiPD1mLnBvb2xTaXplPj4+MSYmKGEucGFyZW50PVopLGF9ZnVuY3Rpb24gcShhKXtpZihhPj1lKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4XCIrZSgpLnRvU3RyaW5nKDE2KStcIiBieXRlc1wiKTtyZXR1cm4gMHxhfWZ1bmN0aW9uIHIoYSxiKXtpZighKHRoaXMgaW5zdGFuY2VvZiByKSlyZXR1cm4gbmV3IHIoYSxiKTt2YXIgYz1uZXcgZihhLGIpO3JldHVybiBkZWxldGUgYy5wYXJlbnQsY31mdW5jdGlvbiBzKGEsYil7XCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPVwiXCIrYSk7dmFyIGM9YS5sZW5ndGg7aWYoMD09PWMpcmV0dXJuIDA7Zm9yKHZhciBkPSExOzspc3dpdGNoKGIpe2Nhc2VcImFzY2lpXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwicmF3XCI6Y2FzZVwicmF3c1wiOnJldHVybiBjO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBSKGEpLmxlbmd0aDtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gMipjO2Nhc2VcImhleFwiOnJldHVybiBjPj4+MTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gVShhKS5sZW5ndGg7ZGVmYXVsdDppZihkKXJldHVybiBSKGEpLmxlbmd0aDtiPShcIlwiK2IpLnRvTG93ZXJDYXNlKCksZD0hMH19ZnVuY3Rpb24gdChhLGIsYyl7dmFyIGQ9ITE7aWYoYnw9MCxjPXZvaWQgMD09PWN8fGM9PT0xLzA/dGhpcy5sZW5ndGg6MHxjLGF8fChhPVwidXRmOFwiKSxiPDAmJihiPTApLGM+dGhpcy5sZW5ndGgmJihjPXRoaXMubGVuZ3RoKSxjPD1iKXJldHVyblwiXCI7Zm9yKDs7KXN3aXRjaChhKXtjYXNlXCJoZXhcIjpyZXR1cm4gRih0aGlzLGIsYyk7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIEIodGhpcyxiLGMpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIEQodGhpcyxiLGMpO2Nhc2VcImJpbmFyeVwiOnJldHVybiBFKHRoaXMsYixjKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gQSh0aGlzLGIsYyk7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIEcodGhpcyxiLGMpO2RlZmF1bHQ6aWYoZCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrYSk7YT0oYStcIlwiKS50b0xvd2VyQ2FzZSgpLGQ9ITB9fWZ1bmN0aW9uIHUoYSxiLGMsZCl7Yz1OdW1iZXIoYyl8fDA7dmFyIGU9YS5sZW5ndGgtYztkPyhkPU51bWJlcihkKSk+ZSYmKGQ9ZSk6ZD1lO3ZhciBmPWIubGVuZ3RoO2lmKGYlMiE9MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGhleCBzdHJpbmdcIik7ZD5mLzImJihkPWYvMik7Zm9yKHZhciBnPTA7ZzxkO2crKyl7dmFyIGg9cGFyc2VJbnQoYi5zdWJzdHIoMipnLDIpLDE2KTtpZihpc05hTihoKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGhleCBzdHJpbmdcIik7YVtjK2ddPWh9cmV0dXJuIGd9ZnVuY3Rpb24gdihhLGIsYyxkKXtyZXR1cm4gVihSKGIsYS5sZW5ndGgtYyksYSxjLGQpfWZ1bmN0aW9uIHcoYSxiLGMsZCl7cmV0dXJuIFYoUyhiKSxhLGMsZCl9ZnVuY3Rpb24geChhLGIsYyxkKXtyZXR1cm4gdyhhLGIsYyxkKX1mdW5jdGlvbiB5KGEsYixjLGQpe3JldHVybiBWKFUoYiksYSxjLGQpfWZ1bmN0aW9uIHooYSxiLGMsZCl7cmV0dXJuIFYoVChiLGEubGVuZ3RoLWMpLGEsYyxkKX1mdW5jdGlvbiBBKGEsYixjKXtyZXR1cm4gMD09PWImJmM9PT1hLmxlbmd0aD9XLmZyb21CeXRlQXJyYXkoYSk6Vy5mcm9tQnl0ZUFycmF5KGEuc2xpY2UoYixjKSl9ZnVuY3Rpb24gQihhLGIsYyl7Yz1NYXRoLm1pbihhLmxlbmd0aCxjKTtmb3IodmFyIGQ9W10sZT1iO2U8Yzspe3ZhciBmPWFbZV0sZz1udWxsLGg9Zj4yMzk/NDpmPjIyMz8zOmY+MTkxPzI6MTtpZihlK2g8PWMpe3ZhciBpLGosayxsO3N3aXRjaChoKXtjYXNlIDE6ZjwxMjgmJihnPWYpO2JyZWFrO2Nhc2UgMjppPWFbZSsxXSwxMjg9PSgxOTImaSkmJihsPSgzMSZmKTw8Nnw2MyZpKT4xMjcmJihnPWwpO2JyZWFrO2Nhc2UgMzppPWFbZSsxXSxqPWFbZSsyXSwxMjg9PSgxOTImaSkmJjEyOD09KDE5MiZqKSYmKGw9KDE1JmYpPDwxMnwoNjMmaSk8PDZ8NjMmaik+MjA0NyYmKGw8NTUyOTZ8fGw+NTczNDMpJiYoZz1sKTticmVhaztjYXNlIDQ6aT1hW2UrMV0saj1hW2UrMl0saz1hW2UrM10sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImaikmJjEyOD09KDE5MiZrKSYmKGw9KDE1JmYpPDwxOHwoNjMmaSk8PDEyfCg2MyZqKTw8Nnw2MyZrKT42NTUzNSYmbDwxMTE0MTEyJiYoZz1sKX19bnVsbD09PWc/KGc9NjU1MzMsaD0xKTpnPjY1NTM1JiYoZy09NjU1MzYsZC5wdXNoKGc+Pj4xMCYxMDIzfDU1Mjk2KSxnPTU2MzIwfDEwMjMmZyksZC5wdXNoKGcpLGUrPWh9cmV0dXJuIEMoZCl9ZnVuY3Rpb24gQyhhKXt2YXIgYj1hLmxlbmd0aDtpZihiPD0kKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhKTtmb3IodmFyIGM9XCJcIixkPTA7ZDxiOyljKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhLnNsaWNlKGQsZCs9JCkpO3JldHVybiBjfWZ1bmN0aW9uIEQoYSxiLGMpe3ZhciBkPVwiXCI7Yz1NYXRoLm1pbihhLmxlbmd0aCxjKTtmb3IodmFyIGU9YjtlPGM7ZSsrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmFbZV0pO3JldHVybiBkfWZ1bmN0aW9uIEUoYSxiLGMpe3ZhciBkPVwiXCI7Yz1NYXRoLm1pbihhLmxlbmd0aCxjKTtmb3IodmFyIGU9YjtlPGM7ZSsrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtlXSk7cmV0dXJuIGR9ZnVuY3Rpb24gRihhLGIsYyl7dmFyIGQ9YS5sZW5ndGg7KCFifHxiPDApJiYoYj0wKSwoIWN8fGM8MHx8Yz5kKSYmKGM9ZCk7Zm9yKHZhciBlPVwiXCIsZj1iO2Y8YztmKyspZSs9UShhW2ZdKTtyZXR1cm4gZX1mdW5jdGlvbiBHKGEsYixjKXtmb3IodmFyIGQ9YS5zbGljZShiLGMpLGU9XCJcIixmPTA7ZjxkLmxlbmd0aDtmKz0yKWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoZFtmXSsyNTYqZFtmKzFdKTtyZXR1cm4gZX1mdW5jdGlvbiBIKGEsYixjKXtpZihhJTEhPTB8fGE8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm9mZnNldCBpcyBub3QgdWludFwiKTtpZihhK2I+Yyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGhcIil9ZnVuY3Rpb24gSShhLGIsYyxkLGUsZyl7aWYoIWYuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImJ1ZmZlciBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlXCIpO2lmKGI+ZXx8YjxnKXRocm93IG5ldyBSYW5nZUVycm9yKFwidmFsdWUgaXMgb3V0IG9mIGJvdW5kc1wiKTtpZihjK2Q+YS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gSihhLGIsYyxkKXtiPDAmJihiPTY1NTM1K2IrMSk7Zm9yKHZhciBlPTAsZj1NYXRoLm1pbihhLmxlbmd0aC1jLDIpO2U8ZjtlKyspYVtjK2VdPShiJjI1NTw8OCooZD9lOjEtZSkpPj4+OCooZD9lOjEtZSl9ZnVuY3Rpb24gSyhhLGIsYyxkKXtiPDAmJihiPTQyOTQ5NjcyOTUrYisxKTtmb3IodmFyIGU9MCxmPU1hdGgubWluKGEubGVuZ3RoLWMsNCk7ZTxmO2UrKylhW2MrZV09Yj4+PjgqKGQ/ZTozLWUpJjI1NX1mdW5jdGlvbiBMKGEsYixjLGQsZSxmKXtpZihiPmV8fGI8Zil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInZhbHVlIGlzIG91dCBvZiBib3VuZHNcIik7aWYoYytkPmEubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiaW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKGM8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBNKGEsYixjLGQsZSl7cmV0dXJuIGV8fEwoYSxiLGMsNCwzLjQwMjgyMzQ2NjM4NTI4ODZlMzgsLTMuNDAyODIzNDY2Mzg1Mjg4NmUzOCksWC53cml0ZShhLGIsYyxkLDIzLDQpLGMrNH1mdW5jdGlvbiBOKGEsYixjLGQsZSl7cmV0dXJuIGV8fEwoYSxiLGMsOCwxLjc5NzY5MzEzNDg2MjMxNTdlMzA4LC0xLjc5NzY5MzEzNDg2MjMxNTdlMzA4KSxYLndyaXRlKGEsYixjLGQsNTIsOCksYys4fWZ1bmN0aW9uIE8oYSl7aWYoYT1QKGEpLnJlcGxhY2UoYWEsXCJcIiksYS5sZW5ndGg8MilyZXR1cm5cIlwiO2Zvcig7YS5sZW5ndGglNCE9MDspYSs9XCI9XCI7cmV0dXJuIGF9ZnVuY3Rpb24gUChhKXtyZXR1cm4gYS50cmltP2EudHJpbSgpOmEucmVwbGFjZSgvXlxccyt8XFxzKyQvZyxcIlwiKX1mdW5jdGlvbiBRKGEpe3JldHVybiBhPDE2P1wiMFwiK2EudG9TdHJpbmcoMTYpOmEudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFIoYSxiKXtiPWJ8fDEvMDtmb3IodmFyIGMsZD1hLmxlbmd0aCxlPW51bGwsZj1bXSxnPTA7ZzxkO2crKyl7aWYoKGM9YS5jaGFyQ29kZUF0KGcpKT41NTI5NSYmYzw1NzM0NCl7aWYoIWUpe2lmKGM+NTYzMTkpeyhiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihnKzE9PT1kKXsoYi09Myk+LTEmJmYucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9ZT1jO2NvbnRpbnVlfWlmKGM8NTYzMjApeyhiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KSxlPWM7Y29udGludWV9Yz02NTUzNisoZS01NTI5Njw8MTB8Yy01NjMyMCl9ZWxzZSBlJiYoYi09Myk+LTEmJmYucHVzaCgyMzksMTkxLDE4OSk7aWYoZT1udWxsLGM8MTI4KXtpZigoYi09MSk8MClicmVhaztmLnB1c2goYyl9ZWxzZSBpZihjPDIwNDgpe2lmKChiLT0yKTwwKWJyZWFrO2YucHVzaChjPj42fDE5Miw2MyZjfDEyOCl9ZWxzZSBpZihjPDY1NTM2KXtpZigoYi09Myk8MClicmVhaztmLnB1c2goYz4+MTJ8MjI0LGM+PjYmNjN8MTI4LDYzJmN8MTI4KX1lbHNle2lmKCEoYzwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIik7aWYoKGItPTQpPDApYnJlYWs7Zi5wdXNoKGM+PjE4fDI0MCxjPj4xMiY2M3wxMjgsYz4+NiY2M3wxMjgsNjMmY3wxMjgpfX1yZXR1cm4gZn1mdW5jdGlvbiBTKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKDI1NSZhLmNoYXJDb2RlQXQoYykpO3JldHVybiBifWZ1bmN0aW9uIFQoYSxiKXtmb3IodmFyIGMsZCxlLGY9W10sZz0wO2c8YS5sZW5ndGgmJiEoKGItPTIpPDApO2crKyljPWEuY2hhckNvZGVBdChnKSxkPWM+PjgsZT1jJTI1NixmLnB1c2goZSksZi5wdXNoKGQpO3JldHVybiBmfWZ1bmN0aW9uIFUoYSl7cmV0dXJuIFcudG9CeXRlQXJyYXkoTyhhKSl9ZnVuY3Rpb24gVihhLGIsYyxkKXtmb3IodmFyIGU9MDtlPGQmJiEoZStjPj1iLmxlbmd0aHx8ZT49YS5sZW5ndGgpO2UrKyliW2UrY109YVtlXTtyZXR1cm4gZX12YXIgVz1hKFwiYmFzZTY0LWpzXCIpLFg9YShcImllZWU3NTRcIiksWT1hKFwiaXNhcnJheVwiKTtjLkJ1ZmZlcj1mLGMuU2xvd0J1ZmZlcj1yLGMuSU5TUEVDVF9NQVhfQllURVM9NTAsZi5wb29sU2l6ZT04MTkyO3ZhciBaPXt9O2YuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDAhPT1iLlRZUEVEX0FSUkFZX1NVUFBPUlQ/Yi5UWVBFRF9BUlJBWV9TVVBQT1JUOmQoKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGYucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxmLl9fcHJvdG9fXz1VaW50OEFycmF5KTooZi5wcm90b3R5cGUubGVuZ3RoPXZvaWQgMCxmLnByb3RvdHlwZS5wYXJlbnQ9dm9pZCAwKSxmLmlzQnVmZmVyPWZ1bmN0aW9uKGEpe3JldHVybiEobnVsbD09YXx8IWEuX2lzQnVmZmVyKX0sZi5jb21wYXJlPWZ1bmN0aW9uKGEsYil7aWYoIWYuaXNCdWZmZXIoYSl8fCFmLmlzQnVmZmVyKGIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzXCIpO2lmKGE9PT1iKXJldHVybiAwO2Zvcih2YXIgYz1hLmxlbmd0aCxkPWIubGVuZ3RoLGU9MCxnPU1hdGgubWluKGMsZCk7ZTxnJiZhW2VdPT09YltlXTspKytlO3JldHVybiBlIT09ZyYmKGM9YVtlXSxkPWJbZV0pLGM8ZD8tMTpkPGM/MTowfSxmLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oYSl7c3dpdGNoKFN0cmluZyhhKS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInJhd1wiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxmLmNvbmNhdD1mdW5jdGlvbihhLGIpe2lmKCFZKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJsaXN0IGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycy5cIik7aWYoMD09PWEubGVuZ3RoKXJldHVybiBuZXcgZigwKTt2YXIgYztpZih2b2lkIDA9PT1iKWZvcihiPTAsYz0wO2M8YS5sZW5ndGg7YysrKWIrPWFbY10ubGVuZ3RoO3ZhciBkPW5ldyBmKGIpLGU9MDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgZz1hW2NdO2cuY29weShkLGUpLGUrPWcubGVuZ3RofXJldHVybiBkfSxmLmJ5dGVMZW5ndGg9cyxmLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBhPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1hP1wiXCI6MD09PWFyZ3VtZW50cy5sZW5ndGg/Qih0aGlzLDAsYSk6dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGYucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihhKXtpZighZi5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PWF8fDA9PT1mLmNvbXBhcmUodGhpcyxhKX0sZi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBhPVwiXCIsYj1jLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoYT10aGlzLnRvU3RyaW5nKFwiaGV4XCIsMCxiKS5tYXRjaCgvLnsyfS9nKS5qb2luKFwiIFwiKSx0aGlzLmxlbmd0aD5iJiYoYSs9XCIgLi4uIFwiKSksXCI8QnVmZmVyIFwiK2ErXCI+XCJ9LGYucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oYSl7aWYoIWYuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXJcIik7cmV0dXJuIHRoaXM9PT1hPzA6Zi5jb21wYXJlKHRoaXMsYSl9LGYucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYixjKXtmb3IodmFyIGQ9LTEsZT0wO2MrZTxhLmxlbmd0aDtlKyspaWYoYVtjK2VdPT09YlstMT09PWQ/MDplLWRdKXtpZigtMT09PWQmJihkPWUpLGUtZCsxPT09Yi5sZW5ndGgpcmV0dXJuIGMrZH1lbHNlIGQ9LTE7cmV0dXJuLTF9aWYoYj4yMTQ3NDgzNjQ3P2I9MjE0NzQ4MzY0NzpiPC0yMTQ3NDgzNjQ4JiYoYj0tMjE0NzQ4MzY0OCksYj4+PTAsMD09PXRoaXMubGVuZ3RoKXJldHVybi0xO2lmKGI+PXRoaXMubGVuZ3RoKXJldHVybi0xO2lmKGI8MCYmKGI9TWF0aC5tYXgodGhpcy5sZW5ndGgrYiwwKSksXCJzdHJpbmdcIj09dHlwZW9mIGEpcmV0dXJuIDA9PT1hLmxlbmd0aD8tMTpTdHJpbmcucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLGEsYik7aWYoZi5pc0J1ZmZlcihhKSlyZXR1cm4gYyh0aGlzLGEsYik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGEpcmV0dXJuIGYuVFlQRURfQVJSQVlfU1VQUE9SVCYmXCJmdW5jdGlvblwiPT09VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcyxhLGIpOmModGhpcyxbYV0sYik7dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlclwiKX0sZi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBjb25zb2xlLmxvZyhcIi5nZXQoKSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdXNpbmcgYXJyYXkgaW5kZXhlcyBpbnN0ZWFkLlwiKSx0aGlzLnJlYWRVSW50OChhKX0sZi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGNvbnNvbGUubG9nKFwiLnNldCgpIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB1c2luZyBhcnJheSBpbmRleGVzIGluc3RlYWQuXCIpLHRoaXMud3JpdGVVSW50OChhLGIpfSxmLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihhLGIsYyxkKXtpZih2b2lkIDA9PT1iKWQ9XCJ1dGY4XCIsYz10aGlzLmxlbmd0aCxiPTA7ZWxzZSBpZih2b2lkIDA9PT1jJiZcInN0cmluZ1wiPT10eXBlb2YgYilkPWIsYz10aGlzLmxlbmd0aCxiPTA7ZWxzZSBpZihpc0Zpbml0ZShiKSlifD0wLGlzRmluaXRlKGMpPyhjfD0wLHZvaWQgMD09PWQmJihkPVwidXRmOFwiKSk6KGQ9YyxjPXZvaWQgMCk7ZWxzZXt2YXIgZT1kO2Q9YixiPTB8YyxjPWV9dmFyIGY9dGhpcy5sZW5ndGgtYjtpZigodm9pZCAwPT09Y3x8Yz5mKSYmKGM9ZiksYS5sZW5ndGg+MCYmKGM8MHx8YjwwKXx8Yj50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzXCIpO2R8fChkPVwidXRmOFwiKTtmb3IodmFyIGc9ITE7Oylzd2l0Y2goZCl7Y2FzZVwiaGV4XCI6cmV0dXJuIHUodGhpcyxhLGIsYyk7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIHYodGhpcyxhLGIsYyk7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gdyh0aGlzLGEsYixjKTtjYXNlXCJiaW5hcnlcIjpyZXR1cm4geCh0aGlzLGEsYixjKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4geSh0aGlzLGEsYixjKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4geih0aGlzLGEsYixjKTtkZWZhdWx0OmlmKGcpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2QpO2Q9KFwiXCIrZCkudG9Mb3dlckNhc2UoKSxnPSEwfX0sZi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciAkPTQwOTY7Zi5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmxlbmd0aDthPX5+YSxiPXZvaWQgMD09PWI/Yzp+fmIsYTwwPyhhKz1jKTwwJiYoYT0wKTphPmMmJihhPWMpLGI8MD8oYis9Yyk8MCYmKGI9MCk6Yj5jJiYoYj1jKSxiPGEmJihiPWEpO3ZhciBkO2lmKGYuVFlQRURfQVJSQVlfU1VQUE9SVClkPWYuX2F1Z21lbnQodGhpcy5zdWJhcnJheShhLGIpKTtlbHNle3ZhciBlPWItYTtkPW5ldyBmKGUsdm9pZCAwKTtmb3IodmFyIGc9MDtnPGU7ZysrKWRbZ109dGhpc1tnK2FdfXJldHVybiBkLmxlbmd0aCYmKGQucGFyZW50PXRoaXMucGFyZW50fHx0aGlzKSxkfSxmLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGEsYixjKXthfD0wLGJ8PTAsY3x8SChhLGIsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZD10aGlzW2FdLGU9MSxmPTA7KytmPGImJihlKj0yNTYpOylkKz10aGlzW2ErZl0qZTtyZXR1cm4gZH0sZi5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihhLGIsYyl7YXw9MCxifD0wLGN8fEgoYSxiLHRoaXMubGVuZ3RoKTtmb3IodmFyIGQ9dGhpc1thKy0tYl0sZT0xO2I+MCYmKGUqPTI1Nik7KWQrPXRoaXNbYSstLWJdKmU7cmV0dXJuIGR9LGYucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsMSx0aGlzLmxlbmd0aCksdGhpc1thXX0sZi5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwyLHRoaXMubGVuZ3RoKSx0aGlzW2FdfHRoaXNbYSsxXTw8OH0sZi5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwyLHRoaXMubGVuZ3RoKSx0aGlzW2FdPDw4fHRoaXNbYSsxXX0sZi5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSwodGhpc1thXXx0aGlzW2ErMV08PDh8dGhpc1thKzJdPDwxNikrMTY3NzcyMTYqdGhpc1thKzNdfSxmLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbYV0rKHRoaXNbYSsxXTw8MTZ8dGhpc1thKzJdPDw4fHRoaXNbYSszXSl9LGYucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihhLGIsYyl7YXw9MCxifD0wLGN8fEgoYSxiLHRoaXMubGVuZ3RoKTtmb3IodmFyIGQ9dGhpc1thXSxlPTEsZj0wOysrZjxiJiYoZSo9MjU2KTspZCs9dGhpc1thK2ZdKmU7cmV0dXJuIGUqPTEyOCxkPj1lJiYoZC09TWF0aC5wb3coMiw4KmIpKSxkfSxmLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oYSxiLGMpe2F8PTAsYnw9MCxjfHxIKGEsYix0aGlzLmxlbmd0aCk7Zm9yKHZhciBkPWIsZT0xLGY9dGhpc1thKy0tZF07ZD4wJiYoZSo9MjU2KTspZis9dGhpc1thKy0tZF0qZTtyZXR1cm4gZSo9MTI4LGY+PWUmJihmLT1NYXRoLnBvdygyLDgqYikpLGZ9LGYucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1thXT8tMSooMjU1LXRoaXNbYV0rMSk6dGhpc1thXX0sZi5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oYSxiKXtifHxIKGEsMix0aGlzLmxlbmd0aCk7dmFyIGM9dGhpc1thXXx0aGlzW2ErMV08PDg7cmV0dXJuIDMyNzY4JmM/NDI5NDkwMTc2MHxjOmN9LGYucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGEsYil7Ynx8SChhLDIsdGhpcy5sZW5ndGgpO3ZhciBjPXRoaXNbYSsxXXx0aGlzW2FdPDw4O3JldHVybiAzMjc2OCZjPzQyOTQ5MDE3NjB8YzpjfSxmLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksdGhpc1thXXx0aGlzW2ErMV08PDh8dGhpc1thKzJdPDwxNnx0aGlzW2ErM108PDI0fSxmLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksdGhpc1thXTw8MjR8dGhpc1thKzFdPDwxNnx0aGlzW2ErMl08PDh8dGhpc1thKzNdfSxmLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksWC5yZWFkKHRoaXMsYSwhMCwyMyw0KX0sZi5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLFgucmVhZCh0aGlzLGEsITEsMjMsNCl9LGYucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsOCx0aGlzLmxlbmd0aCksWC5yZWFkKHRoaXMsYSwhMCw1Miw4KX0sZi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw4LHRoaXMubGVuZ3RoKSxYLnJlYWQodGhpcyxhLCExLDUyLDgpfSxmLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihhLGIsYyxkKXthPSthLGJ8PTAsY3w9MCxkfHxJKHRoaXMsYSxiLGMsTWF0aC5wb3coMiw4KmMpLDApO3ZhciBlPTEsZj0wO2Zvcih0aGlzW2JdPTI1NSZhOysrZjxjJiYoZSo9MjU2KTspdGhpc1tiK2ZdPWEvZSYyNTU7cmV0dXJuIGIrY30sZi5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oYSxiLGMsZCl7YT0rYSxifD0wLGN8PTAsZHx8SSh0aGlzLGEsYixjLE1hdGgucG93KDIsOCpjKSwwKTt2YXIgZT1jLTEsZj0xO2Zvcih0aGlzW2IrZV09MjU1JmE7LS1lPj0wJiYoZio9MjU2KTspdGhpc1tiK2VdPWEvZiYyNTU7cmV0dXJuIGIrY30sZi5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDEsMjU1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGE9TWF0aC5mbG9vcihhKSksdGhpc1tiXT0yNTUmYSxiKzF9LGYucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwyLDY1NTM1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT0yNTUmYSx0aGlzW2IrMV09YT4+PjgpOkoodGhpcyxhLGIsITApLGIrMn0sZi5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsNjU1MzUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj44LHRoaXNbYisxXT0yNTUmYSk6Sih0aGlzLGEsYiwhMSksYisyfSxmLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsNCw0Mjk0OTY3Mjk1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiKzNdPWE+Pj4yNCx0aGlzW2IrMl09YT4+PjE2LHRoaXNbYisxXT1hPj4+OCx0aGlzW2JdPTI1NSZhKTpLKHRoaXMsYSxiLCEwKSxiKzR9LGYucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiw0LDQyOTQ5NjcyOTUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj4yNCx0aGlzW2IrMV09YT4+PjE2LHRoaXNbYisyXT1hPj4+OCx0aGlzW2IrM109MjU1JmEpOksodGhpcyxhLGIsITEpLGIrNH0sZi5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihhLGIsYyxkKXtpZihhPSthLGJ8PTAsIWQpe3ZhciBlPU1hdGgucG93KDIsOCpjLTEpO0kodGhpcyxhLGIsYyxlLTEsLWUpfXZhciBmPTAsZz0xLGg9YTwwPzE6MDtmb3IodGhpc1tiXT0yNTUmYTsrK2Y8YyYmKGcqPTI1Nik7KXRoaXNbYitmXT0oYS9nPj4wKS1oJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGEsYixjLGQpe2lmKGE9K2EsYnw9MCwhZCl7dmFyIGU9TWF0aC5wb3coMiw4KmMtMSk7SSh0aGlzLGEsYixjLGUtMSwtZSl9dmFyIGY9Yy0xLGc9MSxoPWE8MD8xOjA7Zm9yKHRoaXNbYitmXT0yNTUmYTstLWY+PTAmJihnKj0yNTYpOyl0aGlzW2IrZl09KGEvZz4+MCktaCYyNTU7cmV0dXJuIGIrY30sZi5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMSwxMjcsLTEyOCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoYT1NYXRoLmZsb29yKGEpKSxhPDAmJihhPTI1NSthKzEpLHRoaXNbYl09MjU1JmEsYisxfSxmLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwyLDMyNzY3LC0zMjc2OCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPTI1NSZhLHRoaXNbYisxXT1hPj4+OCk6Sih0aGlzLGEsYiwhMCksYisyfSxmLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwyLDMyNzY3LC0zMjc2OCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj44LHRoaXNbYisxXT0yNTUmYSk6Sih0aGlzLGEsYiwhMSksYisyfSxmLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT0yNTUmYSx0aGlzW2IrMV09YT4+PjgsdGhpc1tiKzJdPWE+Pj4xNix0aGlzW2IrM109YT4+PjI0KTpLKHRoaXMsYSxiLCEwKSxiKzR9LGYucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksYTwwJiYoYT00Mjk0OTY3Mjk1K2ErMSksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj4yNCx0aGlzW2IrMV09YT4+PjE2LHRoaXNbYisyXT1hPj4+OCx0aGlzW2IrM109MjU1JmEpOksodGhpcyxhLGIsITEpLGIrNH0sZi5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTSh0aGlzLGEsYiwhMCxjKX0sZi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTSh0aGlzLGEsYiwhMSxjKX0sZi5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIE4odGhpcyxhLGIsITAsYyl9LGYucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBOKHRoaXMsYSxiLCExLGMpfSxmLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGEsYixjLGQpe2lmKGN8fChjPTApLGR8fDA9PT1kfHwoZD10aGlzLmxlbmd0aCksYj49YS5sZW5ndGgmJihiPWEubGVuZ3RoKSxifHwoYj0wKSxkPjAmJmQ8YyYmKGQ9YyksZD09PWMpcmV0dXJuIDA7aWYoMD09PWEubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoYjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihjPDB8fGM+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihkPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kc1wiKTtkPnRoaXMubGVuZ3RoJiYoZD10aGlzLmxlbmd0aCksYS5sZW5ndGgtYjxkLWMmJihkPWEubGVuZ3RoLWIrYyk7dmFyIGUsZz1kLWM7aWYodGhpcz09PWEmJmM8YiYmYjxkKWZvcihlPWctMTtlPj0wO2UtLSlhW2UrYl09dGhpc1tlK2NdO2Vsc2UgaWYoZzwxZTN8fCFmLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGU9MDtlPGc7ZSsrKWFbZStiXT10aGlzW2UrY107ZWxzZSBhLl9zZXQodGhpcy5zdWJhcnJheShjLGMrZyksYik7cmV0dXJuIGd9LGYucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oYSxiLGMpe2lmKGF8fChhPTApLGJ8fChiPTApLGN8fChjPXRoaXMubGVuZ3RoKSxjPGIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJlbmQgPCBzdGFydFwiKTtpZihjIT09YiYmMCE9PXRoaXMubGVuZ3RoKXtpZihiPDB8fGI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwic3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihjPDB8fGM+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJlbmQgb3V0IG9mIGJvdW5kc1wiKTt2YXIgZDtpZihcIm51bWJlclwiPT10eXBlb2YgYSlmb3IoZD1iO2Q8YztkKyspdGhpc1tkXT1hO2Vsc2V7dmFyIGU9UihhLnRvU3RyaW5nKCkpLGY9ZS5sZW5ndGg7Zm9yKGQ9YjtkPGM7ZCsrKXRoaXNbZF09ZVtkJWZdfXJldHVybiB0aGlzfX0sZi5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5KXtpZihmLlRZUEVEX0FSUkFZX1NVUFBPUlQpcmV0dXJuIG5ldyBmKHRoaXMpLmJ1ZmZlcjtmb3IodmFyIGE9bmV3IFVpbnQ4QXJyYXkodGhpcy5sZW5ndGgpLGI9MCxjPWEubGVuZ3RoO2I8YztiKz0xKWFbYl09dGhpc1tiXTtyZXR1cm4gYS5idWZmZXJ9dGhyb3cgbmV3IFR5cGVFcnJvcihcIkJ1ZmZlci50b0FycmF5QnVmZmVyIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpfTt2YXIgXz1mLnByb3RvdHlwZTtmLl9hdWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBhLmNvbnN0cnVjdG9yPWYsYS5faXNCdWZmZXI9ITAsYS5fc2V0PWEuc2V0LGEuZ2V0PV8uZ2V0LGEuc2V0PV8uc2V0LGEud3JpdGU9Xy53cml0ZSxhLnRvU3RyaW5nPV8udG9TdHJpbmcsYS50b0xvY2FsZVN0cmluZz1fLnRvU3RyaW5nLGEudG9KU09OPV8udG9KU09OLGEuZXF1YWxzPV8uZXF1YWxzLGEuY29tcGFyZT1fLmNvbXBhcmUsYS5pbmRleE9mPV8uaW5kZXhPZixhLmNvcHk9Xy5jb3B5LGEuc2xpY2U9Xy5zbGljZSxhLnJlYWRVSW50TEU9Xy5yZWFkVUludExFLGEucmVhZFVJbnRCRT1fLnJlYWRVSW50QkUsYS5yZWFkVUludDg9Xy5yZWFkVUludDgsYS5yZWFkVUludDE2TEU9Xy5yZWFkVUludDE2TEUsYS5yZWFkVUludDE2QkU9Xy5yZWFkVUludDE2QkUsYS5yZWFkVUludDMyTEU9Xy5yZWFkVUludDMyTEUsYS5yZWFkVUludDMyQkU9Xy5yZWFkVUludDMyQkUsYS5yZWFkSW50TEU9Xy5yZWFkSW50TEUsYS5yZWFkSW50QkU9Xy5yZWFkSW50QkUsYS5yZWFkSW50OD1fLnJlYWRJbnQ4LGEucmVhZEludDE2TEU9Xy5yZWFkSW50MTZMRSxhLnJlYWRJbnQxNkJFPV8ucmVhZEludDE2QkUsYS5yZWFkSW50MzJMRT1fLnJlYWRJbnQzMkxFLGEucmVhZEludDMyQkU9Xy5yZWFkSW50MzJCRSxhLnJlYWRGbG9hdExFPV8ucmVhZEZsb2F0TEUsYS5yZWFkRmxvYXRCRT1fLnJlYWRGbG9hdEJFLGEucmVhZERvdWJsZUxFPV8ucmVhZERvdWJsZUxFLGEucmVhZERvdWJsZUJFPV8ucmVhZERvdWJsZUJFLGEud3JpdGVVSW50OD1fLndyaXRlVUludDgsYS53cml0ZVVJbnRMRT1fLndyaXRlVUludExFLGEud3JpdGVVSW50QkU9Xy53cml0ZVVJbnRCRSxhLndyaXRlVUludDE2TEU9Xy53cml0ZVVJbnQxNkxFLGEud3JpdGVVSW50MTZCRT1fLndyaXRlVUludDE2QkUsYS53cml0ZVVJbnQzMkxFPV8ud3JpdGVVSW50MzJMRSxhLndyaXRlVUludDMyQkU9Xy53cml0ZVVJbnQzMkJFLGEud3JpdGVJbnRMRT1fLndyaXRlSW50TEUsYS53cml0ZUludEJFPV8ud3JpdGVJbnRCRSxhLndyaXRlSW50OD1fLndyaXRlSW50OCxhLndyaXRlSW50MTZMRT1fLndyaXRlSW50MTZMRSxhLndyaXRlSW50MTZCRT1fLndyaXRlSW50MTZCRSxhLndyaXRlSW50MzJMRT1fLndyaXRlSW50MzJMRSxhLndyaXRlSW50MzJCRT1fLndyaXRlSW50MzJCRSxhLndyaXRlRmxvYXRMRT1fLndyaXRlRmxvYXRMRSxhLndyaXRlRmxvYXRCRT1fLndyaXRlRmxvYXRCRSxhLndyaXRlRG91YmxlTEU9Xy53cml0ZURvdWJsZUxFLGEud3JpdGVEb3VibGVCRT1fLndyaXRlRG91YmxlQkUsYS5maWxsPV8uZmlsbCxhLmluc3BlY3Q9Xy5pbnNwZWN0LGEudG9BcnJheUJ1ZmZlcj1fLnRvQXJyYXlCdWZmZXIsYX07dmFyIGFhPS9bXitcXC8wLTlBLVphLXotX10vZ30pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se1wiYmFzZTY0LWpzXCI6MSxpZWVlNzU0OjcsaXNhcnJheTo4fV0sNDpbZnVuY3Rpb24oYixjLGQpeyhmdW5jdGlvbihlLGYpeyFmdW5jdGlvbihiLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBkJiZ2b2lkIDAhPT1jP2MuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYSYmYS5hbWQ/YShlKTpiLkVTNlByb21pc2U9ZSgpfSh0aGlzLGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYShhKXt2YXIgYj10eXBlb2YgYTtyZXR1cm4gbnVsbCE9PWEmJihcIm9iamVjdFwiPT09Ynx8XCJmdW5jdGlvblwiPT09Yil9ZnVuY3Rpb24gYyhhKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBhfWZ1bmN0aW9uIGQoYSl7WD1hfWZ1bmN0aW9uIGcoYSl7WT1hfWZ1bmN0aW9uIGgoKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5uZXh0VGljayhtKX19ZnVuY3Rpb24gaSgpe3JldHVybiB2b2lkIDAhPT1XP2Z1bmN0aW9uKCl7VyhtKX06bCgpfWZ1bmN0aW9uIGooKXt2YXIgYT0wLGI9bmV3IF8obSksYz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtyZXR1cm4gYi5vYnNlcnZlKGMse2NoYXJhY3RlckRhdGE6ITB9KSxmdW5jdGlvbigpe2MuZGF0YT1hPSsrYSUyfX1mdW5jdGlvbiBrKCl7dmFyIGE9bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBhLnBvcnQxLm9ubWVzc2FnZT1tLGZ1bmN0aW9uKCl7cmV0dXJuIGEucG9ydDIucG9zdE1lc3NhZ2UoMCl9fWZ1bmN0aW9uIGwoKXt2YXIgYT1zZXRUaW1lb3V0O3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhKG0sMSl9fWZ1bmN0aW9uIG0oKXtmb3IodmFyIGE9MDthPFY7YSs9Mil7KDAsY2FbYV0pKGNhW2ErMV0pLGNhW2FdPXZvaWQgMCxjYVthKzFdPXZvaWQgMH1WPTB9ZnVuY3Rpb24gbigpe3RyeXt2YXIgYT1iLGM9YShcInZlcnR4XCIpO3JldHVybiBXPWMucnVuT25Mb29wfHxjLnJ1bk9uQ29udGV4dCxpKCl9Y2F0Y2goYSl7cmV0dXJuIGwoKX19ZnVuY3Rpb24gbyhhLGIpe3ZhciBjPWFyZ3VtZW50cyxkPXRoaXMsZT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihxKTt2b2lkIDA9PT1lW2VhXSYmSihlKTt2YXIgZj1kLl9zdGF0ZTtyZXR1cm4gZj9mdW5jdGlvbigpe3ZhciBhPWNbZi0xXTtZKGZ1bmN0aW9uKCl7cmV0dXJuIEcoZixlLGEsZC5fcmVzdWx0KX0pfSgpOkMoZCxlLGEsYiksZX1mdW5jdGlvbiBwKGEpe3ZhciBiPXRoaXM7aWYoYSYmXCJvYmplY3RcIj09dHlwZW9mIGEmJmEuY29uc3RydWN0b3I9PT1iKXJldHVybiBhO3ZhciBjPW5ldyBiKHEpO3JldHVybiB5KGMsYSksY31mdW5jdGlvbiBxKCl7fWZ1bmN0aW9uIHIoKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIil9ZnVuY3Rpb24gcygpe3JldHVybiBuZXcgVHlwZUVycm9yKFwiQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLlwiKX1mdW5jdGlvbiB0KGEpe3RyeXtyZXR1cm4gYS50aGVufWNhdGNoKGEpe3JldHVybiBpYS5lcnJvcj1hLGlhfX1mdW5jdGlvbiB1KGEsYixjLGQpe3RyeXthLmNhbGwoYixjLGQpfWNhdGNoKGEpe3JldHVybiBhfX1mdW5jdGlvbiB2KGEsYixjKXtZKGZ1bmN0aW9uKGEpe3ZhciBkPSExLGU9dShjLGIsZnVuY3Rpb24oYyl7ZHx8KGQ9ITAsYiE9PWM/eShhLGMpOkEoYSxjKSl9LGZ1bmN0aW9uKGIpe2R8fChkPSEwLEIoYSxiKSl9LFwiU2V0dGxlOiBcIisoYS5fbGFiZWx8fFwiIHVua25vd24gcHJvbWlzZVwiKSk7IWQmJmUmJihkPSEwLEIoYSxlKSl9LGEpfWZ1bmN0aW9uIHcoYSxiKXtiLl9zdGF0ZT09PWdhP0EoYSxiLl9yZXN1bHQpOmIuX3N0YXRlPT09aGE/QihhLGIuX3Jlc3VsdCk6QyhiLHZvaWQgMCxmdW5jdGlvbihiKXtyZXR1cm4geShhLGIpfSxmdW5jdGlvbihiKXtyZXR1cm4gQihhLGIpfSl9ZnVuY3Rpb24geChhLGIsZCl7Yi5jb25zdHJ1Y3Rvcj09PWEuY29uc3RydWN0b3ImJmQ9PT1vJiZiLmNvbnN0cnVjdG9yLnJlc29sdmU9PT1wP3coYSxiKTpkPT09aWE/KEIoYSxpYS5lcnJvciksaWEuZXJyb3I9bnVsbCk6dm9pZCAwPT09ZD9BKGEsYik6YyhkKT92KGEsYixkKTpBKGEsYil9ZnVuY3Rpb24geShiLGMpe2I9PT1jP0IoYixyKCkpOmEoYyk/eChiLGMsdChjKSk6QShiLGMpfWZ1bmN0aW9uIHooYSl7YS5fb25lcnJvciYmYS5fb25lcnJvcihhLl9yZXN1bHQpLEQoYSl9ZnVuY3Rpb24gQShhLGIpe2EuX3N0YXRlPT09ZmEmJihhLl9yZXN1bHQ9YixhLl9zdGF0ZT1nYSwwIT09YS5fc3Vic2NyaWJlcnMubGVuZ3RoJiZZKEQsYSkpfWZ1bmN0aW9uIEIoYSxiKXthLl9zdGF0ZT09PWZhJiYoYS5fc3RhdGU9aGEsYS5fcmVzdWx0PWIsWSh6LGEpKX1mdW5jdGlvbiBDKGEsYixjLGQpe3ZhciBlPWEuX3N1YnNjcmliZXJzLGY9ZS5sZW5ndGg7YS5fb25lcnJvcj1udWxsLGVbZl09YixlW2YrZ2FdPWMsZVtmK2hhXT1kLDA9PT1mJiZhLl9zdGF0ZSYmWShELGEpfWZ1bmN0aW9uIEQoYSl7dmFyIGI9YS5fc3Vic2NyaWJlcnMsYz1hLl9zdGF0ZTtpZigwIT09Yi5sZW5ndGgpe2Zvcih2YXIgZD12b2lkIDAsZT12b2lkIDAsZj1hLl9yZXN1bHQsZz0wO2c8Yi5sZW5ndGg7Zys9MylkPWJbZ10sZT1iW2crY10sZD9HKGMsZCxlLGYpOmUoZik7YS5fc3Vic2NyaWJlcnMubGVuZ3RoPTB9fWZ1bmN0aW9uIEUoKXt0aGlzLmVycm9yPW51bGx9ZnVuY3Rpb24gRihhLGIpe3RyeXtyZXR1cm4gYShiKX1jYXRjaChhKXtyZXR1cm4gamEuZXJyb3I9YSxqYX19ZnVuY3Rpb24gRyhhLGIsZCxlKXt2YXIgZj1jKGQpLGc9dm9pZCAwLGg9dm9pZCAwLGk9dm9pZCAwLGo9dm9pZCAwO2lmKGYpe2lmKGc9RihkLGUpLGc9PT1qYT8oaj0hMCxoPWcuZXJyb3IsZy5lcnJvcj1udWxsKTppPSEwLGI9PT1nKXJldHVybiB2b2lkIEIoYixzKCkpfWVsc2UgZz1lLGk9ITA7Yi5fc3RhdGUhPT1mYXx8KGYmJmk/eShiLGcpOmo/QihiLGgpOmE9PT1nYT9BKGIsZyk6YT09PWhhJiZCKGIsZykpfWZ1bmN0aW9uIEgoYSxiKXt0cnl7YihmdW5jdGlvbihiKXt5KGEsYil9LGZ1bmN0aW9uKGIpe0IoYSxiKX0pfWNhdGNoKGIpe0IoYSxiKX19ZnVuY3Rpb24gSSgpe3JldHVybiBrYSsrfWZ1bmN0aW9uIEooYSl7YVtlYV09a2ErKyxhLl9zdGF0ZT12b2lkIDAsYS5fcmVzdWx0PXZvaWQgMCxhLl9zdWJzY3JpYmVycz1bXX1mdW5jdGlvbiBLKGEsYil7dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3Rvcj1hLHRoaXMucHJvbWlzZT1uZXcgYShxKSx0aGlzLnByb21pc2VbZWFdfHxKKHRoaXMucHJvbWlzZSksVShiKT8odGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5fcmVtYWluaW5nPWIubGVuZ3RoLHRoaXMuX3Jlc3VsdD1uZXcgQXJyYXkodGhpcy5sZW5ndGgpLDA9PT10aGlzLmxlbmd0aD9BKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpOih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aHx8MCx0aGlzLl9lbnVtZXJhdGUoYiksMD09PXRoaXMuX3JlbWFpbmluZyYmQSh0aGlzLnByb21pc2UsdGhpcy5fcmVzdWx0KSkpOkIodGhpcy5wcm9taXNlLEwoKSl9ZnVuY3Rpb24gTCgpe3JldHVybiBuZXcgRXJyb3IoXCJBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXlcIil9ZnVuY3Rpb24gTShhKXtyZXR1cm4gbmV3IEsodGhpcyxhKS5wcm9taXNlfWZ1bmN0aW9uIE4oYSl7dmFyIGI9dGhpcztyZXR1cm4gbmV3IGIoVShhKT9mdW5jdGlvbihjLGQpe2Zvcih2YXIgZT1hLmxlbmd0aCxmPTA7ZjxlO2YrKyliLnJlc29sdmUoYVtmXSkudGhlbihjLGQpfTpmdW5jdGlvbihhLGIpe3JldHVybiBiKG5ldyBUeXBlRXJyb3IoXCJZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuXCIpKX0pfWZ1bmN0aW9uIE8oYSl7dmFyIGI9dGhpcyxjPW5ldyBiKHEpO3JldHVybiBCKGMsYSksY31mdW5jdGlvbiBQKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIllvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHByb21pc2UgY29uc3RydWN0b3JcIil9ZnVuY3Rpb24gUSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIil9ZnVuY3Rpb24gUihhKXt0aGlzW2VhXT1JKCksdGhpcy5fcmVzdWx0PXRoaXMuX3N0YXRlPXZvaWQgMCx0aGlzLl9zdWJzY3JpYmVycz1bXSxxIT09YSYmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEmJlAoKSx0aGlzIGluc3RhbmNlb2YgUj9IKHRoaXMsYSk6USgpKX1mdW5jdGlvbiBTKCl7dmFyIGE9dm9pZCAwO2lmKHZvaWQgMCE9PWYpYT1mO2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYpYT1zZWxmO2Vsc2UgdHJ5e2E9RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGEpe3Rocm93IG5ldyBFcnJvcihcInBvbHlmaWxsIGZhaWxlZCBiZWNhdXNlIGdsb2JhbCBvYmplY3QgaXMgdW5hdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudFwiKX12YXIgYj1hLlByb21pc2U7aWYoYil7dmFyIGM9bnVsbDt0cnl7Yz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYi5yZXNvbHZlKCkpfWNhdGNoKGEpe31pZihcIltvYmplY3QgUHJvbWlzZV1cIj09PWMmJiFiLmNhc3QpcmV0dXJufWEuUHJvbWlzZT1SfXZhciBUPXZvaWQgMDtUPUFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheTpmdW5jdGlvbihhKXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSl9O3ZhciBVPVQsVj0wLFc9dm9pZCAwLFg9dm9pZCAwLFk9ZnVuY3Rpb24oYSxiKXtjYVtWXT1hLGNhW1YrMV09YiwyPT09KFYrPTIpJiYoWD9YKG0pOmRhKCkpfSxaPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCwkPVp8fHt9LF89JC5NdXRhdGlvbk9ic2VydmVyfHwkLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsYWE9XCJ1bmRlZmluZWRcIj09dHlwZW9mIHNlbGYmJnZvaWQgMCE9PWUmJlwiW29iamVjdCBwcm9jZXNzXVwiPT09e30udG9TdHJpbmcuY2FsbChlKSxiYT1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBpbXBvcnRTY3JpcHRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWwsY2E9bmV3IEFycmF5KDFlMyksZGE9dm9pZCAwO2RhPWFhP2goKTpfP2ooKTpiYT9rKCk6dm9pZCAwPT09WiYmXCJmdW5jdGlvblwiPT10eXBlb2YgYj9uKCk6bCgpO3ZhciBlYT1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpLGZhPXZvaWQgMCxnYT0xLGhhPTIsaWE9bmV3IEUsamE9bmV3IEUsa2E9MDtyZXR1cm4gSy5wcm90b3R5cGUuX2VudW1lcmF0ZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9MDt0aGlzLl9zdGF0ZT09PWZhJiZiPGEubGVuZ3RoO2IrKyl0aGlzLl9lYWNoRW50cnkoYVtiXSxiKX0sSy5wcm90b3R5cGUuX2VhY2hFbnRyeT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3IsZD1jLnJlc29sdmU7aWYoZD09PXApe3ZhciBlPXQoYSk7aWYoZT09PW8mJmEuX3N0YXRlIT09ZmEpdGhpcy5fc2V0dGxlZEF0KGEuX3N0YXRlLGIsYS5fcmVzdWx0KTtlbHNlIGlmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhpcy5fcmVtYWluaW5nLS0sdGhpcy5fcmVzdWx0W2JdPWE7ZWxzZSBpZihjPT09Uil7dmFyIGY9bmV3IGMocSk7eChmLGEsZSksdGhpcy5fd2lsbFNldHRsZUF0KGYsYil9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQobmV3IGMoZnVuY3Rpb24oYil7cmV0dXJuIGIoYSl9KSxiKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChkKGEpLGIpfSxLLnByb3RvdHlwZS5fc2V0dGxlZEF0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLnByb21pc2U7ZC5fc3RhdGU9PT1mYSYmKHRoaXMuX3JlbWFpbmluZy0tLGE9PT1oYT9CKGQsYyk6dGhpcy5fcmVzdWx0W2JdPWMpLDA9PT10aGlzLl9yZW1haW5pbmcmJkEoZCx0aGlzLl9yZXN1bHQpfSxLLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztDKGEsdm9pZCAwLGZ1bmN0aW9uKGEpe3JldHVybiBjLl9zZXR0bGVkQXQoZ2EsYixhKX0sZnVuY3Rpb24oYSl7cmV0dXJuIGMuX3NldHRsZWRBdChoYSxiLGEpfSl9LFIuYWxsPU0sUi5yYWNlPU4sUi5yZXNvbHZlPXAsUi5yZWplY3Q9TyxSLl9zZXRTY2hlZHVsZXI9ZCxSLl9zZXRBc2FwPWcsUi5fYXNhcD1ZLFIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpSLHRoZW46byxjYXRjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsYSl9fSxSLnBvbHlmaWxsPVMsUi5Qcm9taXNlPVIsUn0pfSkuY2FsbCh0aGlzLGIoXCJfcHJvY2Vzc1wiKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se19wcm9jZXNzOjExfV0sNTpbZnVuY3Rpb24oYixjLGQpeyFmdW5jdGlvbihiLGUpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJmEuYW1kKWEoW1wiZXhwb3J0c1wiLFwibW9kdWxlXCJdLGUpO2Vsc2UgaWYodm9pZCAwIT09ZCYmdm9pZCAwIT09YyllKGQsYyk7ZWxzZXt2YXIgZj17ZXhwb3J0czp7fX07ZShmLmV4cG9ydHMsZiksYi5mZXRjaEpzb25wPWYuZXhwb3J0c319KHRoaXMsZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBjKCl7cmV0dXJuXCJqc29ucF9cIitEYXRlLm5vdygpK1wiX1wiK01hdGguY2VpbCgxZTUqTWF0aC5yYW5kb20oKSl9ZnVuY3Rpb24gZChhKXt0cnl7ZGVsZXRlIHdpbmRvd1thXX1jYXRjaChiKXt3aW5kb3dbYV09dm9pZCAwfX1mdW5jdGlvbiBlKGEpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpO2ImJmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBmKGEpe3ZhciBiPWFyZ3VtZW50cy5sZW5ndGg8PTF8fHZvaWQgMD09PWFyZ3VtZW50c1sxXT97fTphcmd1bWVudHNbMV0sZj1hLGg9Yi50aW1lb3V0fHxnLnRpbWVvdXQsaT1iLmpzb25wQ2FsbGJhY2t8fGcuanNvbnBDYWxsYmFjayxqPXZvaWQgMDtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZyxrKXt2YXIgbD1iLmpzb25wQ2FsbGJhY2tGdW5jdGlvbnx8YygpLG09aStcIl9cIitsO3dpbmRvd1tsXT1mdW5jdGlvbihhKXtnKHtvazohMCxqc29uOmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShhKX19KSxqJiZjbGVhclRpbWVvdXQoaiksZShtKSxkKGwpfSxmKz0tMT09PWYuaW5kZXhPZihcIj9cIik/XCI/XCI6XCImXCI7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtuLnNldEF0dHJpYnV0ZShcInNyY1wiLFwiXCIrZitpK1wiPVwiK2wpLGIuY2hhcnNldCYmbi5zZXRBdHRyaWJ1dGUoXCJjaGFyc2V0XCIsYi5jaGFyc2V0KSxuLmlkPW0sZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKG4pLGo9c2V0VGltZW91dChmdW5jdGlvbigpe2sobmV3IEVycm9yKFwiSlNPTlAgcmVxdWVzdCB0byBcIithK1wiIHRpbWVkIG91dFwiKSksZChsKSxlKG0pLHdpbmRvd1tsXT1mdW5jdGlvbigpe2QobCl9fSxoKSxuLm9uZXJyb3I9ZnVuY3Rpb24oKXtrKG5ldyBFcnJvcihcIkpTT05QIHJlcXVlc3QgdG8gXCIrYStcIiBmYWlsZWRcIikpLGQobCksZShtKSxqJiZjbGVhclRpbWVvdXQoail9fSl9dmFyIGc9e3RpbWVvdXQ6NWUzLGpzb25wQ2FsbGJhY2s6XCJjYWxsYmFja1wiLGpzb25wQ2FsbGJhY2tGdW5jdGlvbjpudWxsfTtiLmV4cG9ydHM9Zn0pfSx7fV0sNjpbZnVuY3Rpb24oYixjLGQpe3ZhciBlPWV8fGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2lmKCEodm9pZCAwPT09YXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL01TSUUgWzEtOV1cXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpKXt2YXIgYj1hLmRvY3VtZW50LGM9ZnVuY3Rpb24oKXtyZXR1cm4gYS5VUkx8fGEud2Via2l0VVJMfHxhfSxkPWIuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFwiYVwiKSxlPVwiZG93bmxvYWRcImluIGQsZj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgTW91c2VFdmVudChcImNsaWNrXCIpO2EuZGlzcGF0Y2hFdmVudChiKX0sZz0vY29uc3RydWN0b3IvaS50ZXN0KGEuSFRNTEVsZW1lbnQpfHxhLnNhZmFyaSxoPS9DcmlPU1xcL1tcXGRdKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxpPWZ1bmN0aW9uKGIpeyhhLnNldEltbWVkaWF0ZXx8YS5zZXRUaW1lb3V0KShmdW5jdGlvbigpe3Rocm93IGJ9LDApfSxqPVwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsaz00ZTQsbD1mdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbigpe1wic3RyaW5nXCI9PXR5cGVvZiBhP2MoKS5yZXZva2VPYmplY3RVUkwoYSk6YS5yZW1vdmUoKX07c2V0VGltZW91dChiLGspfSxtPWZ1bmN0aW9uKGEsYixjKXtiPVtdLmNvbmNhdChiKTtmb3IodmFyIGQ9Yi5sZW5ndGg7ZC0tOyl7dmFyIGU9YVtcIm9uXCIrYltkXV07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSl0cnl7ZS5jYWxsKGEsY3x8YSl9Y2F0Y2goYSl7aShhKX19fSxuPWZ1bmN0aW9uKGEpe3JldHVybi9eXFxzKig/OnRleHRcXC9cXFMqfGFwcGxpY2F0aW9uXFwveG1sfFxcUypcXC9cXFMqXFwreG1sKVxccyo7LipjaGFyc2V0XFxzKj1cXHMqdXRmLTgvaS50ZXN0KGEudHlwZSk/bmV3IEJsb2IoW1N0cmluZy5mcm9tQ2hhckNvZGUoNjUyNzkpLGFdLHt0eXBlOmEudHlwZX0pOmF9LG89ZnVuY3Rpb24oYixpLGspe2t8fChiPW4oYikpO3ZhciBvLHA9dGhpcyxxPWIudHlwZSxyPXE9PT1qLHM9ZnVuY3Rpb24oKXttKHAsXCJ3cml0ZXN0YXJ0IHByb2dyZXNzIHdyaXRlIHdyaXRlZW5kXCIuc3BsaXQoXCIgXCIpKX0sdD1mdW5jdGlvbigpe2lmKChofHxyJiZnKSYmYS5GaWxlUmVhZGVyKXt2YXIgZD1uZXcgRmlsZVJlYWRlcjtyZXR1cm4gZC5vbmxvYWRlbmQ9ZnVuY3Rpb24oKXt2YXIgYj1oP2QucmVzdWx0OmQucmVzdWx0LnJlcGxhY2UoL15kYXRhOlteO10qOy8sXCJkYXRhOmF0dGFjaG1lbnQvZmlsZTtcIik7YS5vcGVuKGIsXCJfYmxhbmtcIil8fChhLmxvY2F0aW9uLmhyZWY9YiksYj12b2lkIDAscC5yZWFkeVN0YXRlPXAuRE9ORSxzKCl9LGQucmVhZEFzRGF0YVVSTChiKSx2b2lkKHAucmVhZHlTdGF0ZT1wLklOSVQpfWlmKG98fChvPWMoKS5jcmVhdGVPYmplY3RVUkwoYikpLHIpYS5sb2NhdGlvbi5ocmVmPW87ZWxzZXthLm9wZW4obyxcIl9ibGFua1wiKXx8KGEubG9jYXRpb24uaHJlZj1vKX1wLnJlYWR5U3RhdGU9cC5ET05FLHMoKSxsKG8pfTtpZihwLnJlYWR5U3RhdGU9cC5JTklULGUpcmV0dXJuIG89YygpLmNyZWF0ZU9iamVjdFVSTChiKSx2b2lkIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmhyZWY9byxkLmRvd25sb2FkPWksZihkKSxzKCksbChvKSxwLnJlYWR5U3RhdGU9cC5ET05FfSk7dCgpfSxwPW8ucHJvdG90eXBlLHE9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuZXcgbyhhLGJ8fGEubmFtZXx8XCJkb3dubG9hZFwiLGMpfTtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYj9mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9Ynx8YS5uYW1lfHxcImRvd25sb2FkXCIsY3x8KGE9bihhKSksbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoYSxiKX06KHAuYWJvcnQ9ZnVuY3Rpb24oKXt9LHAucmVhZHlTdGF0ZT1wLklOSVQ9MCxwLldSSVRJTkc9MSxwLkRPTkU9MixwLmVycm9yPXAub253cml0ZXN0YXJ0PXAub25wcm9ncmVzcz1wLm9ud3JpdGU9cC5vbmFib3J0PXAub25lcnJvcj1wLm9ud3JpdGVlbmQ9bnVsbCxxKX19KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmfHxcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3d8fHRoaXMuY29udGVudCk7dm9pZCAwIT09YyYmYy5leHBvcnRzP2MuZXhwb3J0cy5zYXZlQXM9ZTp2b2lkIDAhPT1hJiZudWxsIT09YSYmbnVsbCE9PWEuYW1kJiZhKFwiRmlsZVNhdmVyLmpzXCIsZnVuY3Rpb24oKXtyZXR1cm4gZX0pfSx7fV0sNzpbZnVuY3Rpb24oYSxiLGMpe2MucmVhZD1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaD04KmUtZC0xLGk9KDE8PGgpLTEsaj1pPj4xLGs9LTcsbD1jP2UtMTowLG09Yz8tMToxLG49YVtiK2xdO2ZvcihsKz1tLGY9biYoMTw8LWspLTEsbj4+PS1rLGsrPWg7az4wO2Y9MjU2KmYrYVtiK2xdLGwrPW0say09OCk7Zm9yKGc9ZiYoMTw8LWspLTEsZj4+PS1rLGsrPWQ7az4wO2c9MjU2KmcrYVtiK2xdLGwrPW0say09OCk7aWYoMD09PWYpZj0xLWo7ZWxzZXtpZihmPT09aSlyZXR1cm4gZz9OYU46MS8wKihuPy0xOjEpO2crPU1hdGgucG93KDIsZCksZi09an1yZXR1cm4obj8tMToxKSpnKk1hdGgucG93KDIsZi1kKX0sYy53cml0ZT1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGcsaCxpLGo9OCpmLWUtMSxrPSgxPDxqKS0xLGw9az4+MSxtPTIzPT09ZT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsbj1kPzA6Zi0xLG89ZD8xOi0xLHA9YjwwfHwwPT09YiYmMS9iPDA/MTowO2ZvcihiPU1hdGguYWJzKGIpLGlzTmFOKGIpfHxiPT09MS8wPyhoPWlzTmFOKGIpPzE6MCxnPWspOihnPU1hdGguZmxvb3IoTWF0aC5sb2coYikvTWF0aC5MTjIpLGIqKGk9TWF0aC5wb3coMiwtZykpPDEmJihnLS0saSo9MiksYis9ZytsPj0xP20vaTptKk1hdGgucG93KDIsMS1sKSxiKmk+PTImJihnKyssaS89MiksZytsPj1rPyhoPTAsZz1rKTpnK2w+PTE/KGg9KGIqaS0xKSpNYXRoLnBvdygyLGUpLGcrPWwpOihoPWIqTWF0aC5wb3coMixsLTEpKk1hdGgucG93KDIsZSksZz0wKSk7ZT49ODthW2Mrbl09MjU1Jmgsbis9byxoLz0yNTYsZS09OCk7Zm9yKGc9Zzw8ZXxoLGorPWU7aj4wO2FbYytuXT0yNTUmZyxuKz1vLGcvPTI1NixqLT04KTthW2Mrbi1vXXw9MTI4KnB9fSx7fV0sODpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9LnRvU3RyaW5nO2IuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PWQuY2FsbChhKX19LHt9XSw5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhLmI9PT1iLmImJmEuYT09PWIuYX1mdW5jdGlvbiBlKGEsYil7cmV0dXJuIGEuYjxiLmJ8fGEuYj09PWIuYiYmYS5hPD1iLmF9ZnVuY3Rpb24gZihhLGIsYyl7dmFyIGQ9Yi5iLWEuYixlPWMuYi1iLmJcbjtyZXR1cm4gMDxkK2U/ZDxlP2IuYS1hLmErZC8oZCtlKSooYS5hLWMuYSk6Yi5hLWMuYStlLyhkK2UpKihjLmEtYS5hKTowfWZ1bmN0aW9uIGcoYSxiLGMpe3ZhciBkPWIuYi1hLmIsZT1jLmItYi5iO3JldHVybiAwPGQrZT8oYi5hLWMuYSkqZCsoYi5hLWEuYSkqZTowfWZ1bmN0aW9uIGgoYSxiKXtyZXR1cm4gYS5hPGIuYXx8YS5hPT09Yi5hJiZhLmI8PWIuYn1mdW5jdGlvbiBpKGEsYixjKXt2YXIgZD1iLmEtYS5hLGU9Yy5hLWIuYTtyZXR1cm4gMDxkK2U/ZDxlP2IuYi1hLmIrZC8oZCtlKSooYS5iLWMuYik6Yi5iLWMuYitlLyhkK2UpKihjLmItYS5iKTowfWZ1bmN0aW9uIGooYSxiLGMpe3ZhciBkPWIuYS1hLmEsZT1jLmEtYi5hO3JldHVybiAwPGQrZT8oYi5iLWMuYikqZCsoYi5iLWEuYikqZTowfWZ1bmN0aW9uIGsoYSl7cmV0dXJuIGUoYS5iLmEsYS5hKX1mdW5jdGlvbiBsKGEpe3JldHVybiBlKGEuYSxhLmIuYSl9ZnVuY3Rpb24gbShhLGIsYyxkKXtyZXR1cm4gYT0wPmE/MDphLGM9MD5jPzA6YyxhPD1jPzA9PT1jPyhiK2QpLzI6YithLyhhK2MpKihkLWIpOmQrYy8oYStjKSooYi1kKX1mdW5jdGlvbiBuKGEpe3ZhciBiPXMoYS5iKTtyZXR1cm4gdShiLGEuYyksdShiLmIsYS5jKSx2KGIsYS5hKSxifWZ1bmN0aW9uIG8oYSxiKXt2YXIgYz0hMSxkPSExO2EhPT1iJiYoYi5hIT09YS5hJiYoZD0hMCx4KGIuYSxhLmEpKSxiLmQhPT1hLmQmJihjPSEwLHkoYi5kLGEuZCkpLHQoYixhKSxkfHwodShiLGEuYSksYS5hLmM9YSksY3x8KHYoYixhLmQpLGEuZC5hPWEpKX1mdW5jdGlvbiBwKGEpe3ZhciBiPWEuYixjPSExO2EuZCE9PWEuYi5kJiYoYz0hMCx5KGEuZCxhLmIuZCkpLGEuYz09PWE/eChhLmEsbnVsbCk6KGEuYi5kLmE9JChhKSxhLmEuYz1hLmMsdChhLCQoYSkpLGN8fHYoYSxhLmQpKSxiLmM9PT1iPyh4KGIuYSxudWxsKSx5KGIuZCxudWxsKSk6KGEuZC5hPSQoYiksYi5hLmM9Yi5jLHQoYiwkKGIpKSksdyhhKX1mdW5jdGlvbiBxKGEpe3ZhciBiPXMoYSksYz1iLmI7cmV0dXJuIHQoYixhLmUpLGIuYT1hLmIuYSx1KGMsYi5hKSxiLmQ9Yy5kPWEuZCxiPWIuYix0KGEuYiwkKGEuYikpLHQoYS5iLGIpLGEuYi5hPWIuYSxiLmIuYS5jPWIuYixiLmIuZD1hLmIuZCxiLmY9YS5mLGIuYi5mPWEuYi5mLGJ9ZnVuY3Rpb24gcihhLGIpe3ZhciBjPSExLGQ9cyhhKSxlPWQuYjtyZXR1cm4gYi5kIT09YS5kJiYoYz0hMCx5KGIuZCxhLmQpKSx0KGQsYS5lKSx0KGUsYiksZC5hPWEuYi5hLGUuYT1iLmEsZC5kPWUuZD1hLmQsYS5kLmE9ZSxjfHx2KGQsYS5kKSxkfWZ1bmN0aW9uIHMoYSl7dmFyIGI9bmV3IFosYz1uZXcgWixkPWEuYi5oO3JldHVybiBjLmg9ZCxkLmIuaD1iLGIuaD1hLGEuYi5oPWMsYi5iPWMsYi5jPWIsYi5lPWMsYy5iPWIsYy5jPWMsYy5lPWJ9ZnVuY3Rpb24gdChhLGIpe3ZhciBjPWEuYyxkPWIuYztjLmIuZT1iLGQuYi5lPWEsYS5jPWQsYi5jPWN9ZnVuY3Rpb24gdShhLGIpe3ZhciBjPWIuZixkPW5ldyBhYShiLGMpO2MuZT1kLGIuZj1kLGM9ZC5jPWE7ZG97Yy5hPWQsYz1jLmN9d2hpbGUoYyE9PWEpfWZ1bmN0aW9uIHYoYSxiKXt2YXIgYz1iLmQsZD1uZXcgWShiLGMpO2MuYj1kLGIuZD1kLGQuYT1hLGQuYz1iLmMsYz1hO2Rve2MuZD1kLGM9Yy5lfXdoaWxlKGMhPT1hKX1mdW5jdGlvbiB3KGEpe3ZhciBiPWEuaDthPWEuYi5oLGIuYi5oPWEsYS5iLmg9Yn1mdW5jdGlvbiB4KGEsYil7dmFyIGM9YS5jLGQ9Yztkb3tkLmE9YixkPWQuY313aGlsZShkIT09Yyk7Yz1hLmYsZD1hLmUsZC5mPWMsYy5lPWR9ZnVuY3Rpb24geShhLGIpe3ZhciBjPWEuYSxkPWM7ZG97ZC5kPWIsZD1kLmV9d2hpbGUoZCE9PWMpO2M9YS5kLGQ9YS5iLGQuZD1jLGMuYj1kfWZ1bmN0aW9uIHooYSl7dmFyIGI9MDtyZXR1cm4gTWF0aC5hYnMoYVsxXSk+TWF0aC5hYnMoYVswXSkmJihiPTEpLE1hdGguYWJzKGFbMl0pPk1hdGguYWJzKGFbYl0pJiYoYj0yKSxifWZ1bmN0aW9uIEEoYSxiKXthLmYrPWIuZixhLmIuZis9Yi5iLmZ9ZnVuY3Rpb24gQihhLGIsYyl7cmV0dXJuIGE9YS5hLGI9Yi5hLGM9Yy5hLGIuYi5hPT09YT9jLmIuYT09PWE/ZShiLmEsYy5hKT8wPj1nKGMuYi5hLGIuYSxjLmEpOjA8PWcoYi5iLmEsYy5hLGIuYSk6MD49ZyhjLmIuYSxhLGMuYSk6Yy5iLmE9PT1hPzA8PWcoYi5iLmEsYSxiLmEpOihiPWYoYi5iLmEsYSxiLmEpLGE9ZihjLmIuYSxhLGMuYSksYj49YSl9ZnVuY3Rpb24gQyhhKXthLmEuaT1udWxsO3ZhciBiPWEuZTtiLmEuYz1iLmMsYi5jLmE9Yi5hLGEuZT1udWxsfWZ1bmN0aW9uIEQoYSxiKXtwKGEuYSksYS5jPSExLGEuYT1iLGIuaT1hfWZ1bmN0aW9uIEUoYSl7dmFyIGI9YS5hLmE7ZG97YT1vYShhKX13aGlsZShhLmEuYT09PWIpO3JldHVybiBhLmMmJihiPXIobmEoYSkuYS5iLGEuYS5lKSxEKGEsYiksYT1vYShhKSksYX1mdW5jdGlvbiBGKGEsYixjKXt2YXIgZD1uZXcgbWE7cmV0dXJuIGQuYT1jLGQuZT1UKGEuZixiLmUsZCksYy5pPWR9ZnVuY3Rpb24gRyhhLGIpe3N3aXRjaChhLnMpe2Nhc2UgMTAwMTMwOnJldHVybiAwIT0oMSZiKTtjYXNlIDEwMDEzMTpyZXR1cm4gMCE9PWI7Y2FzZSAxMDAxMzI6cmV0dXJuIDA8YjtjYXNlIDEwMDEzMzpyZXR1cm4gMD5iO2Nhc2UgMTAwMTM0OnJldHVybiAyPD1ifHwtMj49Yn1yZXR1cm4hMX1mdW5jdGlvbiBIKGEpe3ZhciBiPWEuYSxjPWIuZDtjLmM9YS5kLGMuYT1iLEMoYSl9ZnVuY3Rpb24gSShhLGIsYyl7Zm9yKGE9YixiPWIuYTthIT09Yzspe2EuYz0hMTt2YXIgZD1uYShhKSxlPWQuYTtpZihlLmEhPT1iLmEpe2lmKCFkLmMpe0goYSk7YnJlYWt9ZT1yKGIuYy5iLGUuYiksRChkLGUpfWIuYyE9PWUmJihvKCQoZSksZSksbyhiLGUpKSxIKGEpLGI9ZC5hLGE9ZH1yZXR1cm4gYn1mdW5jdGlvbiBKKGEsYixjLGQsZSxmKXt2YXIgZz0hMDtkb3tGKGEsYixjLmIpLGM9Yy5jfXdoaWxlKGMhPT1kKTtmb3IobnVsbD09PWUmJihlPW5hKGIpLmEuYi5jKTtkPW5hKGIpLGM9ZC5hLmIsYy5hPT09ZS5hOyljLmMhPT1lJiYobygkKGMpLGMpLG8oJChlKSxjKSksZC5mPWIuZi1jLmYsZC5kPUcoYSxkLmYpLGIuYj0hMCwhZyYmTihhLGIpJiYoQShjLGUpLEMoYikscChlKSksZz0hMSxiPWQsZT1jO2IuYj0hMCxmJiZQKGEsYil9ZnVuY3Rpb24gSyhhLGIsYyxkLGUpe3ZhciBmPVtiLmdbMF0sYi5nWzFdLGIuZ1syXV07Yi5kPW51bGwsYi5kPWEubz9hLm8oZixjLGQsYS5jKXx8bnVsbDpudWxsLG51bGw9PT1iLmQmJihlP2Eubnx8KFgoYSwxMDAxNTYpLGEubj0hMCk6Yi5kPWNbMF0pfWZ1bmN0aW9uIEwoYSxiLGMpe3ZhciBkPVtudWxsLG51bGwsbnVsbCxudWxsXTtkWzBdPWIuYS5kLGRbMV09Yy5hLmQsSyhhLGIuYSxkLFsuNSwuNSwwLDBdLCExKSxvKGIsYyl9ZnVuY3Rpb24gTShhLGIsYyxkLGUpe3ZhciBmPU1hdGguYWJzKGIuYi1hLmIpK01hdGguYWJzKGIuYS1hLmEpLGc9TWF0aC5hYnMoYy5iLWEuYikrTWF0aC5hYnMoYy5hLWEuYSksaD1lKzE7ZFtlXT0uNSpnLyhmK2cpLGRbaF09LjUqZi8oZitnKSxhLmdbMF0rPWRbZV0qYi5nWzBdK2RbaF0qYy5nWzBdLGEuZ1sxXSs9ZFtlXSpiLmdbMV0rZFtoXSpjLmdbMV0sYS5nWzJdKz1kW2VdKmIuZ1syXStkW2hdKmMuZ1syXX1mdW5jdGlvbiBOKGEsYil7dmFyIGM9bmEoYiksZj1iLmEsaD1jLmE7aWYoZShmLmEsaC5hKSl7aWYoMDxnKGguYi5hLGYuYSxoLmEpKXJldHVybiExO2lmKGQoZi5hLGguYSkpe2lmKGYuYSE9PWguYSl7dmFyIGM9YS5lLGk9Zi5hLmg7aWYoMDw9aSl7dmFyIGM9Yy5iLGo9Yy5kLGs9Yy5lLGw9Yy5jLG09bFtpXTtqW21dPWpbYy5hXSxsW2pbbV1dPW0sbTw9LS1jLmEmJigxPj1tP2thKGMsbSk6ZShrW2pbbT4+MV1dLGtbalttXV0pP2thKGMsbSk6bGEoYyxtKSksa1tpXT1udWxsLGxbaV09Yy5iLGMuYj1pfWVsc2UgZm9yKGMuY1stKGkrMSldPW51bGw7MDxjLmEmJm51bGw9PT1jLmNbYy5kW2MuYS0xXV07KS0tYy5hO0woYSwkKGgpLGYpfX1lbHNlIHEoaC5iKSxvKGYsJChoKSksYi5iPWMuYj0hMH1lbHNle2lmKDA+ZyhmLmIuYSxoLmEsZi5hKSlyZXR1cm4hMTtvYShiKS5iPWIuYj0hMCxxKGYuYiksbygkKGgpLGYpfXJldHVybiEwfWZ1bmN0aW9uIE8oYSxiKXt2YXIgYz1uYShiKSxrPWIuYSxsPWMuYSxuPWsuYSxwPWwuYSxyPWsuYi5hLHM9bC5iLmEsdD1uZXcgYWE7aWYoZyhyLGEuYSxuKSxnKHMsYS5hLHApLG49PT1wfHxNYXRoLm1pbihuLmEsci5hKT5NYXRoLm1heChwLmEscy5hKSlyZXR1cm4hMTtpZihlKG4scCkpe2lmKDA8ZyhzLG4scCkpcmV0dXJuITF9ZWxzZSBpZigwPmcocixwLG4pKXJldHVybiExO3ZhciB1LHYsdz1yLHg9bix5PXMsej1wO2lmKGUodyx4KXx8KHU9dyx3PXgseD11KSxlKHkseil8fCh1PXkseT16LHo9dSksZSh3LHkpfHwodT13LHc9eSx5PXUsdT14LHg9eix6PXUpLGUoeSx4KT9lKHgseik/KHU9Zih3LHkseCksdj1mKHkseCx6KSwwPnUrdiYmKHU9LXUsdj0tdiksdC5iPW0odSx5LmIsdix4LmIpKToodT1nKHcseSx4KSx2PS1nKHcseix4KSwwPnUrdiYmKHU9LXUsdj0tdiksdC5iPW0odSx5LmIsdix6LmIpKTp0LmI9KHkuYit4LmIpLzIsaCh3LHgpfHwodT13LHc9eCx4PXUpLGgoeSx6KXx8KHU9eSx5PXosej11KSxoKHcseSl8fCh1PXcsdz15LHk9dSx1PXgseD16LHo9dSksaCh5LHgpP2goeCx6KT8odT1pKHcseSx4KSx2PWkoeSx4LHopLDA+dSt2JiYodT0tdSx2PS12KSx0LmE9bSh1LHkuYSx2LHguYSkpOih1PWoodyx5LHgpLHY9LWoodyx6LHgpLDA+dSt2JiYodT0tdSx2PS12KSx0LmE9bSh1LHkuYSx2LHouYSkpOnQuYT0oeS5hK3guYSkvMixlKHQsYS5hKSYmKHQuYj1hLmEuYix0LmE9YS5hLmEpLHc9ZShuLHApP246cCxlKHcsdCkmJih0LmI9dy5iLHQuYT13LmEpLGQodCxuKXx8ZCh0LHApKXJldHVybiBOKGEsYiksITE7aWYoIWQocixhLmEpJiYwPD1nKHIsYS5hLHQpfHwhZChzLGEuYSkmJjA+PWcocyxhLmEsdCkpe2lmKHM9PT1hLmEpcmV0dXJuIHEoay5iKSxvKGwuYixrKSxiPUUoYiksaz1uYShiKS5hLEkoYSxuYShiKSxjKSxKKGEsYiwkKGspLGssaywhMCksITA7aWYocj09PWEuYSl7cShsLmIpLG8oay5lLCQobCkpLG49Yz1iLHA9bi5hLmIuYTtkb3tuPW9hKG4pfXdoaWxlKG4uYS5iLmE9PT1wKTtyZXR1cm4gYj1uLG49bmEoYikuYS5iLmMsYy5hPSQobCksbD1JKGEsYyxudWxsKSxKKGEsYixsLmMsay5iLmMsbiwhMCksITB9cmV0dXJuIDA8PWcocixhLmEsdCkmJihvYShiKS5iPWIuYj0hMCxxKGsuYiksay5hLmI9YS5hLmIsay5hLmE9YS5hLmEpLDA+PWcocyxhLmEsdCkmJihiLmI9Yy5iPSEwLHEobC5iKSxsLmEuYj1hLmEuYixsLmEuYT1hLmEuYSksITF9cmV0dXJuIHEoay5iKSxxKGwuYiksbygkKGwpLGspLGsuYS5iPXQuYixrLmEuYT10LmEsay5hLmg9ZGEoYS5lLGsuYSksaz1rLmEsbD1bMCwwLDAsMF0sdD1bbi5kLHIuZCxwLmQscy5kXSxrLmdbMF09ay5nWzFdPWsuZ1syXT0wLE0oayxuLHIsbCwwKSxNKGsscCxzLGwsMiksSyhhLGssdCxsLCEwKSxvYShiKS5iPWIuYj1jLmI9ITAsITF9ZnVuY3Rpb24gUChhLGIpe2Zvcih2YXIgYz1uYShiKTs7KXtmb3IoO2MuYjspYj1jLGM9bmEoYyk7aWYoIWIuYiYmKGM9YixudWxsPT09KGI9b2EoYikpfHwhYi5iKSlicmVhaztiLmI9ITE7dmFyIGQsZj1iLmEsaD1jLmE7aWYoZD1mLmIuYSE9PWguYi5hKWE6e2Q9Yjt2YXIgaT1uYShkKSxqPWQuYSxrPWkuYSxsPXZvaWQgMDtpZihlKGouYi5hLGsuYi5hKSl7aWYoMD5nKGouYi5hLGsuYi5hLGouYSkpe2Q9ITE7YnJlYWsgYX1vYShkKS5iPWQuYj0hMCxsPXEoaiksbyhrLmIsbCksbC5kLmM9ZC5kfWVsc2V7aWYoMDxnKGsuYi5hLGouYi5hLGsuYSkpe2Q9ITE7YnJlYWsgYX1kLmI9aS5iPSEwLGw9cShrKSxvKGouZSxrLmIpLGwuYi5kLmM9ZC5kfWQ9ITB9aWYoZCYmKGMuYz8oQyhjKSxwKGgpLGM9bmEoYiksaD1jLmEpOmIuYyYmKEMoYikscChmKSxiPW9hKGMpLGY9Yi5hKSksZi5hIT09aC5hKWlmKGYuYi5hPT09aC5iLmF8fGIuY3x8Yy5jfHxmLmIuYSE9PWEuYSYmaC5iLmEhPT1hLmEpTihhLGIpO2Vsc2UgaWYoTyhhLGIpKWJyZWFrO2YuYT09PWguYSYmZi5iLmE9PT1oLmIuYSYmKEEoaCxmKSxDKGIpLHAoZiksYj1vYShjKSl9fWZ1bmN0aW9uIFEoYSxiKXthLmE9Yjtmb3IodmFyIGM9Yi5jO251bGw9PT1jLmk7KWlmKChjPWMuYyk9PT1iLmMpe3ZhciBjPWEsZj1iLGg9bmV3IG1hO2guYT1mLmMuYjt2YXIgaT1jLmYsaj1pLmE7ZG97aj1qLmF9d2hpbGUobnVsbCE9PWouYiYmIWkuYyhpLmIsaCxqLmIpKTt2YXIgaT1qLmIsaz1uYShpKSxoPWkuYSxqPWsuYTtpZigwPT09ZyhoLmIuYSxmLGguYSkpaD1pLmEsZChoLmEsZil8fGQoaC5iLmEsZil8fChxKGguYiksaS5jJiYocChoLmMpLGkuYz0hMSksbyhmLmMsaCksUShjLGYpKTtlbHNle3ZhciBsPWUoai5iLmEsaC5iLmEpP2k6ayxrPXZvaWQgMDtpLmR8fGwuYz8oaz1sPT09aT9yKGYuYy5iLGguZSk6cihqLmIuYy5iLGYuYykuYixsLmM/RChsLGspOihoPWMsaT1GKGMsaSxrKSxpLmY9b2EoaSkuZitpLmEuZixpLmQ9RyhoLGkuZikpLFEoYyxmKSk6SihjLGksZi5jLGYuYyxudWxsLCEwKX1yZXR1cm59aWYoYz1FKGMuaSksaD1uYShjKSxpPWguYSxoPUkoYSxoLG51bGwpLGguYz09PWkpe3ZhciBpPWgsaD1pLmMsaj1uYShjKSxrPWMuYSxsPWouYSxtPSExO2suYi5hIT09bC5iLmEmJk8oYSxjKSxkKGsuYSxhLmEpJiYobygkKGgpLGspLGM9RShjKSxoPW5hKGMpLmEsSShhLG5hKGMpLGopLG09ITApLGQobC5hLGEuYSkmJihvKGksJChsKSksaT1JKGEsaixudWxsKSxtPSEwKSxtP0ooYSxjLGkuYyxoLGgsITApOihmPWUobC5hLGsuYSk/JChsKTprLGY9cihpLmMuYixmKSxKKGEsYyxmLGYuYyxmLmMsITEpLGYuYi5pLmM9ITAsUChhLGMpKX1lbHNlIEooYSxjLGguYyxpLGksITApfWZ1bmN0aW9uIFIoYSxiKXt2YXIgYz1uZXcgbWEsZD1uKGEuYik7ZC5hLmI9cWEsZC5hLmE9YixkLmIuYS5iPS1xYSxkLmIuYS5hPWIsYS5hPWQuYi5hLGMuYT1kLGMuZj0wLGMuZD0hMSxjLmM9ITEsYy5oPSEwLGMuYj0hMSxkPWEuZixkPVQoZCxkLmEsYyksYy5lPWR9ZnVuY3Rpb24gUyhhKXt0aGlzLmE9bmV3IFUsdGhpcy5iPWEsdGhpcy5jPUJ9ZnVuY3Rpb24gVChhLGIsYyl7ZG97Yj1iLmN9d2hpbGUobnVsbCE9PWIuYiYmIWEuYyhhLmIsYi5iLGMpKTtyZXR1cm4gYT1uZXcgVShjLGIuYSxiKSxiLmEuYz1hLGIuYT1hfWZ1bmN0aW9uIFUoYSxiLGMpe3RoaXMuYj1hfHxudWxsLHRoaXMuYT1ifHx0aGlzLHRoaXMuYz1jfHx0aGlzfWZ1bmN0aW9uIFYoKXt0aGlzLmQ9cmEsdGhpcy5wPXRoaXMuYj10aGlzLnE9bnVsbCx0aGlzLmo9WzAsMCwwXSx0aGlzLnM9MTAwMTMwLHRoaXMubj0hMSx0aGlzLm89dGhpcy5hPXRoaXMuZT10aGlzLmY9bnVsbCx0aGlzLm09ITEsdGhpcy5jPXRoaXMucj10aGlzLmk9dGhpcy5rPXRoaXMubD10aGlzLmg9bnVsbH1mdW5jdGlvbiBXKGEsYil7aWYoYS5kIT09Yilmb3IoO2EuZCE9PWI7KWlmKGEuZDxiKXN3aXRjaChhLmQpe2Nhc2UgcmE6WChhLDEwMDE1MSksYS51KG51bGwpO2JyZWFrO2Nhc2UgMTpYKGEsMTAwMTUyKSxhLnQoKX1lbHNlIHN3aXRjaChhLmQpe2Nhc2UgMjpYKGEsMTAwMTU0KSxhLnYoKTticmVhaztjYXNlIDE6WChhLDEwMDE1MyksYS53KCl9fWZ1bmN0aW9uIFgoYSxiKXthLnAmJmEucChiLGEuYyl9ZnVuY3Rpb24gWShhLGIpe3RoaXMuYj1hfHx0aGlzLHRoaXMuZD1ifHx0aGlzLHRoaXMuYT1udWxsLHRoaXMuYz0hMX1mdW5jdGlvbiBaKCl7dGhpcy5oPXRoaXMsdGhpcy5pPXRoaXMuZD10aGlzLmE9dGhpcy5lPXRoaXMuYz10aGlzLmI9bnVsbCx0aGlzLmY9MH1mdW5jdGlvbiAkKGEpe3JldHVybiBhLmIuZX1mdW5jdGlvbiBfKCl7dGhpcy5jPW5ldyBhYSx0aGlzLmE9bmV3IFksdGhpcy5iPW5ldyBaLHRoaXMuZD1uZXcgWix0aGlzLmIuYj10aGlzLmQsdGhpcy5kLmI9dGhpcy5ifWZ1bmN0aW9uIGFhKGEsYil7dGhpcy5lPWF8fHRoaXMsdGhpcy5mPWJ8fHRoaXMsdGhpcy5kPXRoaXMuYz1udWxsLHRoaXMuZz1bMCwwLDBdLHRoaXMuaD10aGlzLmE9dGhpcy5iPTB9ZnVuY3Rpb24gYmEoKXt0aGlzLmM9W10sdGhpcy5kPW51bGwsdGhpcy5hPTAsdGhpcy5lPSExLHRoaXMuYj1uZXcgZmF9ZnVuY3Rpb24gY2EoYSl7YS5kPVtdO2Zvcih2YXIgYj0wO2I8YS5hO2IrKylhLmRbYl09YjthLmQuc29ydChmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYixjKXtyZXR1cm4gZShhW2JdLGFbY10pPzE6LTF9fShhLmMpKSxhLmU9ITAsaGEoYS5iKX1mdW5jdGlvbiBkYShhLGIpe2lmKGEuZSl7dmFyIGM9YS5iLGQ9KytjLmE7MipkPmMuZiYmKGMuZio9MixjLmM9Z2EoYy5jLGMuZisxKSk7dmFyIGU7cmV0dXJuIDA9PT1jLmI/ZT1kOihlPWMuYixjLmI9Yy5jW2MuYl0pLGMuZVtlXT1iLGMuY1tlXT1kLGMuZFtkXT1lLGMuaCYmbGEoYyxkKSxlfXJldHVybiBjPWEuYSsrLGEuY1tjXT1iLC0oYysxKX1mdW5jdGlvbiBlYShhKXtpZigwPT09YS5hKXJldHVybiBqYShhLmIpO3ZhciBiPWEuY1thLmRbYS5hLTFdXTtpZigwIT09YS5iLmEmJmUoaWEoYS5iKSxiKSlyZXR1cm4gamEoYS5iKTtkb3stLWEuYX13aGlsZSgwPGEuYSYmbnVsbD09PWEuY1thLmRbYS5hLTFdXSk7cmV0dXJuIGJ9ZnVuY3Rpb24gZmEoKXt0aGlzLmQ9Z2EoWzBdLDMzKSx0aGlzLmU9W251bGwsbnVsbF0sdGhpcy5jPVswLDBdLHRoaXMuYT0wLHRoaXMuZj0zMix0aGlzLmI9MCx0aGlzLmg9ITEsdGhpcy5kWzFdPTF9ZnVuY3Rpb24gZ2EoYSxiKXtmb3IodmFyIGM9QXJyYXkoYiksZD0wO2Q8YS5sZW5ndGg7ZCsrKWNbZF09YVtkXTtmb3IoO2Q8YjtkKyspY1tkXT0wO3JldHVybiBjfWZ1bmN0aW9uIGhhKGEpe2Zvcih2YXIgYj1hLmE7MTw9YjstLWIpa2EoYSxiKTthLmg9ITB9ZnVuY3Rpb24gaWEoYSl7cmV0dXJuIGEuZVthLmRbMV1dfWZ1bmN0aW9uIGphKGEpe3ZhciBiPWEuZCxjPWEuZSxkPWEuYyxlPWJbMV0sZj1jW2VdO3JldHVybiAwPGEuYSYmKGJbMV09YlthLmFdLGRbYlsxXV09MSxjW2VdPW51bGwsZFtlXT1hLmIsYS5iPWUsMDwtLWEuYSYma2EoYSwxKSksZn1mdW5jdGlvbiBrYShhLGIpe2Zvcih2YXIgYz1hLmQsZD1hLmUsZj1hLmMsZz1iLGg9Y1tnXTs7KXt2YXIgaT1nPDwxO2k8YS5hJiZlKGRbY1tpKzFdXSxkW2NbaV1dKSYmKGkrPTEpO3ZhciBqPWNbaV07aWYoaT5hLmF8fGUoZFtoXSxkW2pdKSl7Y1tnXT1oLGZbaF09ZzticmVha31jW2ddPWosZltqXT1nLGc9aX19ZnVuY3Rpb24gbGEoYSxiKXtmb3IodmFyIGM9YS5kLGQ9YS5lLGY9YS5jLGc9YixoPWNbZ107Oyl7dmFyIGk9Zz4+MSxqPWNbaV07aWYoMD09PWl8fGUoZFtqXSxkW2hdKSl7Y1tnXT1oLGZbaF09ZzticmVha31jW2ddPWosZltqXT1nLGc9aX19ZnVuY3Rpb24gbWEoKXt0aGlzLmU9dGhpcy5hPW51bGwsdGhpcy5mPTAsdGhpcy5jPXRoaXMuYj10aGlzLmg9dGhpcy5kPSExfWZ1bmN0aW9uIG5hKGEpe3JldHVybiBhLmUuYy5ifWZ1bmN0aW9uIG9hKGEpe3JldHVybiBhLmUuYS5ifXZhciBwYSxxYT00ZTE1MCxyYT0wO3BhPVYucHJvdG90eXBlLHBhLng9ZnVuY3Rpb24oKXtXKHRoaXMscmEpfSxwYS5CPWZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTAwMTQyOnJldHVybjtjYXNlIDEwMDE0MDpzd2l0Y2goYil7Y2FzZSAxMDAxMzA6Y2FzZSAxMDAxMzE6Y2FzZSAxMDAxMzI6Y2FzZSAxMDAxMzM6Y2FzZSAxMDAxMzQ6cmV0dXJuIHZvaWQodGhpcy5zPWIpfWJyZWFrO2Nhc2UgMTAwMTQxOnJldHVybiB2b2lkKHRoaXMubT0hIWIpO2RlZmF1bHQ6cmV0dXJuIHZvaWQgWCh0aGlzLDEwMDkwMCl9WCh0aGlzLDEwMDkwMSl9LHBhLnk9ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMTAwMTQyOnJldHVybiAwO2Nhc2UgMTAwMTQwOnJldHVybiB0aGlzLnM7Y2FzZSAxMDAxNDE6cmV0dXJuIHRoaXMubTtkZWZhdWx0OlgodGhpcywxMDA5MDApfXJldHVybiExfSxwYS5BPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmpbMF09YSx0aGlzLmpbMV09Yix0aGlzLmpbMl09Y30scGEuej1mdW5jdGlvbihhLGIpe3ZhciBjPWJ8fG51bGw7c3dpdGNoKGEpe2Nhc2UgMTAwMTAwOmNhc2UgMTAwMTA2OnRoaXMuaD1jO2JyZWFrO2Nhc2UgMTAwMTA0OmNhc2UgMTAwMTEwOnRoaXMubD1jO2JyZWFrO2Nhc2UgMTAwMTAxOmNhc2UgMTAwMTA3OnRoaXMuaz1jO2JyZWFrO2Nhc2UgMTAwMTAyOmNhc2UgMTAwMTA4OnRoaXMuaT1jO2JyZWFrO2Nhc2UgMTAwMTAzOmNhc2UgMTAwMTA5OnRoaXMucD1jO2JyZWFrO2Nhc2UgMTAwMTA1OmNhc2UgMTAwMTExOnRoaXMubz1jO2JyZWFrO2Nhc2UgMTAwMTEyOnRoaXMucj1jO2JyZWFrO2RlZmF1bHQ6WCh0aGlzLDEwMDkwMCl9fSxwYS5DPWZ1bmN0aW9uKGEsYil7dmFyIGM9ITEsZD1bMCwwLDBdO1codGhpcywyKTtmb3IodmFyIGU9MDszPmU7KytlKXt2YXIgZj1hW2VdOy0xZTE1MD5mJiYoZj0tMWUxNTAsYz0hMCksMWUxNTA8ZiYmKGY9MWUxNTAsYz0hMCksZFtlXT1mfWMmJlgodGhpcywxMDAxNTUpLGM9dGhpcy5xLG51bGw9PT1jPyhjPW4odGhpcy5iKSxvKGMsYy5iKSk6KHEoYyksYz1jLmUpLGMuYS5kPWIsYy5hLmdbMF09ZFswXSxjLmEuZ1sxXT1kWzFdLGMuYS5nWzJdPWRbMl0sYy5mPTEsYy5iLmY9LTEsdGhpcy5xPWN9LHBhLnU9ZnVuY3Rpb24oYSl7Vyh0aGlzLHJhKSx0aGlzLmQ9MSx0aGlzLmI9bmV3IF8sdGhpcy5jPWF9LHBhLnQ9ZnVuY3Rpb24oKXtXKHRoaXMsMSksdGhpcy5kPTIsdGhpcy5xPW51bGx9LHBhLnY9ZnVuY3Rpb24oKXtXKHRoaXMsMiksdGhpcy5kPTF9LHBhLnc9ZnVuY3Rpb24oKXtXKHRoaXMsMSksdGhpcy5kPXJhO3ZhciBhPXRoaXMualswXSxiPXRoaXMualsxXSxjPXRoaXMualsyXSxmPSExLGg9W2EsYixjXTtpZigwPT09YSYmMD09PWImJjA9PT1jKXtmb3IodmFyIGI9Wy0yZTE1MCwtMmUxNTAsLTJlMTUwXSxpPVsyZTE1MCwyZTE1MCwyZTE1MF0sYz1bXSxqPVtdLGY9dGhpcy5iLmMsYT1mLmU7YSE9PWY7YT1hLmUpZm9yKHZhciBtPTA7Mz5tOysrbSl7dmFyIG49YS5nW21dO248aVttXSYmKGlbbV09bixqW21dPWEpLG4+YlttXSYmKGJbbV09bixjW21dPWEpfWlmKGE9MCxiWzFdLWlbMV0+YlswXS1pWzBdJiYoYT0xKSxiWzJdLWlbMl0+YlthXS1pW2FdJiYoYT0yKSxpW2FdPj1iW2FdKWhbMF09MCxoWzFdPTAsaFsyXT0xO2Vsc2V7Zm9yKGI9MCxpPWpbYV0sYz1jW2FdLGo9WzAsMCwwXSxpPVtpLmdbMF0tYy5nWzBdLGkuZ1sxXS1jLmdbMV0saS5nWzJdLWMuZ1syXV0sbT1bMCwwLDBdLGE9Zi5lO2EhPT1mO2E9YS5lKW1bMF09YS5nWzBdLWMuZ1swXSxtWzFdPWEuZ1sxXS1jLmdbMV0sbVsyXT1hLmdbMl0tYy5nWzJdLGpbMF09aVsxXSptWzJdLWlbMl0qbVsxXSxqWzFdPWlbMl0qbVswXS1pWzBdKm1bMl0salsyXT1pWzBdKm1bMV0taVsxXSptWzBdLChuPWpbMF0qalswXStqWzFdKmpbMV0ralsyXSpqWzJdKT5iJiYoYj1uLGhbMF09alswXSxoWzFdPWpbMV0saFsyXT1qWzJdKTswPj1iJiYoaFswXT1oWzFdPWhbMl09MCxoW3ooaSldPTEpfWY9ITB9Zm9yKGo9eihoKSxhPXRoaXMuYi5jLGI9KGorMSklMyxjPShqKzIpJTMsaj0wPGhbal0/MTotMSxoPWEuZTtoIT09YTtoPWguZSloLmI9aC5nW2JdLGguYT1qKmguZ1tjXTtpZihmKXtmb3IoaD0wLGY9dGhpcy5iLmEsYT1mLmI7YSE9PWY7YT1hLmIpaWYoYj1hLmEsISgwPj1iLmYpKWRve2grPShiLmEuYi1iLmIuYS5iKSooYi5hLmErYi5iLmEuYSksYj1iLmV9d2hpbGUoYiE9PWEuYSk7aWYoMD5oKWZvcihoPXRoaXMuYi5jLGY9aC5lO2YhPT1oO2Y9Zi5lKWYuYT0tZi5hfWZvcih0aGlzLm49ITEsaD10aGlzLmIuYixhPWguaDthIT09aDthPWYpZj1hLmgsYj1hLmUsZChhLmEsYS5iLmEpJiZhLmUuZSE9PWEmJihMKHRoaXMsYixhKSxwKGEpLGE9YixiPWEuZSksYi5lPT09YSYmKGIhPT1hJiYoYiE9PWYmJmIhPT1mLmJ8fChmPWYuaCkscChiKSksYSE9PWYmJmEhPT1mLmJ8fChmPWYuaCkscChhKSk7Zm9yKHRoaXMuZT1oPW5ldyBiYSxmPXRoaXMuYi5jLGE9Zi5lO2EhPT1mO2E9YS5lKWEuaD1kYShoLGEpO2ZvcihjYShoKSx0aGlzLmY9bmV3IFModGhpcyksUih0aGlzLC1xYSksUih0aGlzLHFhKTtudWxsIT09KGg9ZWEodGhpcy5lKSk7KXtmb3IoOzspe2E6aWYoYT10aGlzLmUsMD09PWEuYSlmPWlhKGEuYik7ZWxzZSBpZihmPWEuY1thLmRbYS5hLTFdXSwwIT09YS5iLmEmJihhPWlhKGEuYiksZShhLGYpKSl7Zj1hO2JyZWFrIGF9aWYobnVsbD09PWZ8fCFkKGYsaCkpYnJlYWs7Zj1lYSh0aGlzLmUpLEwodGhpcyxoLmMsZi5jKX1RKHRoaXMsaCl9Zm9yKHRoaXMuYT10aGlzLmYuYS5hLmIuYS5hLGg9MDtudWxsIT09KGY9dGhpcy5mLmEuYS5iKTspZi5ofHwrK2gsQyhmKTtmb3IodGhpcy5mPW51bGwsaD10aGlzLmUsaC5iPW51bGwsaC5kPW51bGwsdGhpcy5lPWguYz1udWxsLGg9dGhpcy5iLGE9aC5hLmI7YSE9PWguYTthPWYpZj1hLmIsYT1hLmEsYS5lLmU9PT1hJiYoQShhLmMsYSkscChhKSk7aWYoIXRoaXMubil7aWYoaD10aGlzLmIsdGhpcy5tKWZvcihhPWguYi5oO2EhPT1oLmI7YT1mKWY9YS5oLGEuYi5kLmMhPT1hLmQuYz9hLmY9YS5kLmM/MTotMTpwKGEpO2Vsc2UgZm9yKGE9aC5hLmI7YSE9PWguYTthPWYpaWYoZj1hLmIsYS5jKXtmb3IoYT1hLmE7ZShhLmIuYSxhLmEpO2E9YS5jLmIpO2Zvcig7ZShhLmEsYS5iLmEpO2E9YS5lKTtmb3IoYj1hLmMuYixjPXZvaWQgMDthLmUhPT1iOylpZihlKGEuYi5hLGIuYSkpe2Zvcig7Yi5lIT09YSYmKGsoYi5lKXx8MD49ZyhiLmEsYi5iLmEsYi5lLmIuYSkpOyljPXIoYi5lLGIpLGI9Yy5iO2I9Yi5jLmJ9ZWxzZXtmb3IoO2IuZSE9PWEmJihsKGEuYy5iKXx8MDw9ZyhhLmIuYSxhLmEsYS5jLmIuYSkpOyljPXIoYSxhLmMuYiksYT1jLmI7YT1hLmV9Zm9yKDtiLmUuZSE9PWE7KWM9cihiLmUsYiksYj1jLmJ9aWYodGhpcy5ofHx0aGlzLml8fHRoaXMua3x8dGhpcy5sKWlmKHRoaXMubSl7Zm9yKGg9dGhpcy5iLGY9aC5hLmI7ZiE9PWguYTtmPWYuYilpZihmLmMpe3RoaXMuaCYmdGhpcy5oKDIsdGhpcy5jKSxhPWYuYTtkb3t0aGlzLmsmJnRoaXMuayhhLmEuZCx0aGlzLmMpLGE9YS5lfXdoaWxlKGEhPT1mLmEpO3RoaXMuaSYmdGhpcy5pKHRoaXMuYyl9fWVsc2V7Zm9yKGg9dGhpcy5iLGY9ISF0aGlzLmwsYT0hMSxiPS0xLGM9aC5hLmQ7YyE9PWguYTtjPWMuZClpZihjLmMpe2F8fCh0aGlzLmgmJnRoaXMuaCg0LHRoaXMuYyksYT0hMCksaj1jLmE7ZG97ZiYmKGk9ai5iLmQuYz8wOjEsYiE9PWkmJihiPWksdGhpcy5sJiZ0aGlzLmwoISFiLHRoaXMuYykpKSx0aGlzLmsmJnRoaXMuayhqLmEuZCx0aGlzLmMpLGo9ai5lfXdoaWxlKGohPT1jLmEpfWEmJnRoaXMuaSYmdGhpcy5pKHRoaXMuYyl9aWYodGhpcy5yKXtmb3IoaD10aGlzLmIsYT1oLmEuYjthIT09aC5hO2E9ZilpZihmPWEuYiwhYS5jKXtiPWEuYSxjPWIuZSxqPXZvaWQgMDtkb3tqPWMsYz1qLmUsai5kPW51bGwsbnVsbD09PWouYi5kJiYoai5jPT09aj94KGouYSxudWxsKTooai5hLmM9ai5jLHQoaiwkKGopKSksaT1qLmIsaS5jPT09aT94KGkuYSxudWxsKTooaS5hLmM9aS5jLHQoaSwkKGkpKSksdyhqKSl9d2hpbGUoaiE9PWIpO2I9YS5kLGE9YS5iLGEuZD1iLGIuYj1hfXJldHVybiB0aGlzLnIodGhpcy5iKSx2b2lkKHRoaXMuYz10aGlzLmI9bnVsbCl9fXRoaXMuYj10aGlzLmM9bnVsbH0sdGhpcy5saWJ0ZXNzPXtHbHVUZXNzZWxhdG9yOlYsd2luZGluZ1J1bGU6e0dMVV9URVNTX1dJTkRJTkdfT0REOjEwMDEzMCxHTFVfVEVTU19XSU5ESU5HX05PTlpFUk86MTAwMTMxLEdMVV9URVNTX1dJTkRJTkdfUE9TSVRJVkU6MTAwMTMyLEdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkU6MTAwMTMzLEdMVV9URVNTX1dJTkRJTkdfQUJTX0dFUV9UV086MTAwMTM0fSxwcmltaXRpdmVUeXBlOntHTF9MSU5FX0xPT1A6MixHTF9UUklBTkdMRVM6NCxHTF9UUklBTkdMRV9TVFJJUDo1LEdMX1RSSUFOR0xFX0ZBTjo2fSxlcnJvclR5cGU6e0dMVV9URVNTX01JU1NJTkdfQkVHSU5fUE9MWUdPTjoxMDAxNTEsR0xVX1RFU1NfTUlTU0lOR19FTkRfUE9MWUdPTjoxMDAxNTMsR0xVX1RFU1NfTUlTU0lOR19CRUdJTl9DT05UT1VSOjEwMDE1MixHTFVfVEVTU19NSVNTSU5HX0VORF9DT05UT1VSOjEwMDE1NCxHTFVfVEVTU19DT09SRF9UT09fTEFSR0U6MTAwMTU1LEdMVV9URVNTX05FRURfQ09NQklORV9DQUxMQkFDSzoxMDAxNTZ9LGdsdUVudW06e0dMVV9URVNTX01FU0g6MTAwMTEyLEdMVV9URVNTX1RPTEVSQU5DRToxMDAxNDIsR0xVX1RFU1NfV0lORElOR19SVUxFOjEwMDE0MCxHTFVfVEVTU19CT1VOREFSWV9PTkxZOjEwMDE0MSxHTFVfSU5WQUxJRF9FTlVNOjEwMDkwMCxHTFVfSU5WQUxJRF9WQUxVRToxMDA5MDEsR0xVX1RFU1NfQkVHSU46MTAwMTAwLEdMVV9URVNTX1ZFUlRFWDoxMDAxMDEsR0xVX1RFU1NfRU5EOjEwMDEwMixHTFVfVEVTU19FUlJPUjoxMDAxMDMsR0xVX1RFU1NfRURHRV9GTEFHOjEwMDEwNCxHTFVfVEVTU19DT01CSU5FOjEwMDEwNSxHTFVfVEVTU19CRUdJTl9EQVRBOjEwMDEwNixHTFVfVEVTU19WRVJURVhfREFUQToxMDAxMDcsR0xVX1RFU1NfRU5EX0RBVEE6MTAwMTA4LEdMVV9URVNTX0VSUk9SX0RBVEE6MTAwMTA5LEdMVV9URVNTX0VER0VfRkxBR19EQVRBOjEwMDExMCxHTFVfVEVTU19DT01CSU5FX0RBVEE6MTAwMTExfX0sVi5wcm90b3R5cGUuZ2x1RGVsZXRlVGVzcz1WLnByb3RvdHlwZS54LFYucHJvdG90eXBlLmdsdVRlc3NQcm9wZXJ0eT1WLnByb3RvdHlwZS5CLFYucHJvdG90eXBlLmdsdUdldFRlc3NQcm9wZXJ0eT1WLnByb3RvdHlwZS55LFYucHJvdG90eXBlLmdsdVRlc3NOb3JtYWw9Vi5wcm90b3R5cGUuQSxWLnByb3RvdHlwZS5nbHVUZXNzQ2FsbGJhY2s9Vi5wcm90b3R5cGUueixWLnByb3RvdHlwZS5nbHVUZXNzVmVydGV4PVYucHJvdG90eXBlLkMsVi5wcm90b3R5cGUuZ2x1VGVzc0JlZ2luUG9seWdvbj1WLnByb3RvdHlwZS51LFYucHJvdG90eXBlLmdsdVRlc3NCZWdpbkNvbnRvdXI9Vi5wcm90b3R5cGUudCxWLnByb3RvdHlwZS5nbHVUZXNzRW5kQ29udG91cj1WLnByb3RvdHlwZS52LFYucHJvdG90eXBlLmdsdVRlc3NFbmRQb2x5Z29uPVYucHJvdG90eXBlLncsdm9pZCAwIT09YiYmKGIuZXhwb3J0cz10aGlzLmxpYnRlc3MpfSx7fV0sMTA6W2Z1bmN0aW9uKGIsYyxkKXsoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGIsZSl7XCJvYmplY3RcIj09dHlwZW9mIGQmJnZvaWQgMCE9PWM/ZShkKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiZhLmFtZD9hKFtcImV4cG9ydHNcIl0sZSk6ZShiLm9wZW50eXBlPXt9KX0odGhpcyxmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBjKCl7dGhpcy50YWJsZT1uZXcgVWludDE2QXJyYXkoMTYpLHRoaXMudHJhbnM9bmV3IFVpbnQxNkFycmF5KDI4OCl9ZnVuY3Rpb24gZChhLGIpe3RoaXMuc291cmNlPWEsdGhpcy5zb3VyY2VJbmRleD0wLHRoaXMudGFnPTAsdGhpcy5iaXRjb3VudD0wLHRoaXMuZGVzdD1iLHRoaXMuZGVzdExlbj0wLHRoaXMubHRyZWU9bmV3IGMsdGhpcy5kdHJlZT1uZXcgY31mdW5jdGlvbiBmKGEsYixjLGQpe3ZhciBlLGY7Zm9yKGU9MDtlPGM7KytlKWFbZV09MDtmb3IoZT0wO2U8MzAtYzsrK2UpYVtlK2NdPWUvY3wwO2ZvcihmPWQsZT0wO2U8MzA7KytlKWJbZV09ZixmKz0xPDxhW2VdfWZ1bmN0aW9uIGcoYSxiKXt2YXIgYztmb3IoYz0wO2M8NzsrK2MpYS50YWJsZVtjXT0wO2ZvcihhLnRhYmxlWzddPTI0LGEudGFibGVbOF09MTUyLGEudGFibGVbOV09MTEyLGM9MDtjPDI0OysrYylhLnRyYW5zW2NdPTI1NitjO2ZvcihjPTA7YzwxNDQ7KytjKWEudHJhbnNbMjQrY109Yztmb3IoYz0wO2M8ODsrK2MpYS50cmFuc1sxNjgrY109MjgwK2M7Zm9yKGM9MDtjPDExMjsrK2MpYS50cmFuc1sxNzYrY109MTQ0K2M7Zm9yKGM9MDtjPDU7KytjKWIudGFibGVbY109MDtmb3IoYi50YWJsZVs1XT0zMixjPTA7YzwzMjsrK2MpYi50cmFuc1tjXT1jfWZ1bmN0aW9uIGgoYSxiLGMsZCl7dmFyIGUsZjtmb3IoZT0wO2U8MTY7KytlKWEudGFibGVbZV09MDtmb3IoZT0wO2U8ZDsrK2UpYS50YWJsZVtiW2MrZV1dKys7Zm9yKGEudGFibGVbMF09MCxmPTAsZT0wO2U8MTY7KytlKXZlW2VdPWYsZis9YS50YWJsZVtlXTtmb3IoZT0wO2U8ZDsrK2UpYltjK2VdJiYoYS50cmFuc1t2ZVtiW2MrZV1dKytdPWUpfWZ1bmN0aW9uIGkoYSl7YS5iaXRjb3VudC0tfHwoYS50YWc9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsrXSxhLmJpdGNvdW50PTcpO3ZhciBiPTEmYS50YWc7cmV0dXJuIGEudGFnPj4+PTEsYn1mdW5jdGlvbiBqKGEsYixjKXtpZighYilyZXR1cm4gYztmb3IoO2EuYml0Y291bnQ8MjQ7KWEudGFnfD1hLnNvdXJjZVthLnNvdXJjZUluZGV4KytdPDxhLmJpdGNvdW50LGEuYml0Y291bnQrPTg7dmFyIGQ9YS50YWcmNjU1MzU+Pj4xNi1iO3JldHVybiBhLnRhZz4+Pj1iLGEuYml0Y291bnQtPWIsZCtjfWZ1bmN0aW9uIGsoYSxiKXtmb3IoO2EuYml0Y291bnQ8MjQ7KWEudGFnfD1hLnNvdXJjZVthLnNvdXJjZUluZGV4KytdPDxhLmJpdGNvdW50LGEuYml0Y291bnQrPTg7dmFyIGM9MCxkPTAsZT0wLGY9YS50YWc7ZG97ZD0yKmQrKDEmZiksZj4+Pj0xLCsrZSxjKz1iLnRhYmxlW2VdLGQtPWIudGFibGVbZV19d2hpbGUoZD49MCk7cmV0dXJuIGEudGFnPWYsYS5iaXRjb3VudC09ZSxiLnRyYW5zW2MrZF19ZnVuY3Rpb24gbChhLGIsYyl7dmFyIGQsZSxmLGcsaSxsO2ZvcihkPWooYSw1LDI1NyksZT1qKGEsNSwxKSxmPWooYSw0LDQpLGc9MDtnPDE5OysrZyl1ZVtnXT0wO2ZvcihnPTA7ZzxmOysrZyl7dmFyIG09aihhLDMsMCk7dWVbc2VbZ11dPW19Zm9yKGgodGUsdWUsMCwxOSksaT0wO2k8ZCtlOyl7dmFyIG49ayhhLHRlKTtzd2l0Y2gobil7Y2FzZSAxNjp2YXIgbz11ZVtpLTFdO2ZvcihsPWooYSwyLDMpO2w7LS1sKXVlW2krK109bzticmVhaztjYXNlIDE3OmZvcihsPWooYSwzLDMpO2w7LS1sKXVlW2krK109MDticmVhaztjYXNlIDE4OmZvcihsPWooYSw3LDExKTtsOy0tbCl1ZVtpKytdPTA7YnJlYWs7ZGVmYXVsdDp1ZVtpKytdPW59fWgoYix1ZSwwLGQpLGgoYyx1ZSxkLGUpfWZ1bmN0aW9uIG0oYSxiLGMpe2Zvcig7Oyl7dmFyIGQ9ayhhLGIpO2lmKDI1Nj09PWQpcmV0dXJuIGtlO2lmKGQ8MjU2KWEuZGVzdFthLmRlc3RMZW4rK109ZDtlbHNle3ZhciBlLGYsZyxoO2ZvcihkLT0yNTcsZT1qKGEsb2VbZF0scGVbZF0pLGY9ayhhLGMpLGc9YS5kZXN0TGVuLWooYSxxZVtmXSxyZVtmXSksaD1nO2g8ZytlOysraClhLmRlc3RbYS5kZXN0TGVuKytdPWEuZGVzdFtoXX19fWZ1bmN0aW9uIG4oYSl7Zm9yKHZhciBiLGMsZDthLmJpdGNvdW50Pjg7KWEuc291cmNlSW5kZXgtLSxhLmJpdGNvdW50LT04O2lmKGI9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsxXSxiPTI1NipiK2Euc291cmNlW2Euc291cmNlSW5kZXhdLGM9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCszXSxjPTI1NipjK2Euc291cmNlW2Euc291cmNlSW5kZXgrMl0sYiE9PSg2NTUzNSZ+YykpcmV0dXJuIGxlO2ZvcihhLnNvdXJjZUluZGV4Kz00LGQ9YjtkOy0tZClhLmRlc3RbYS5kZXN0TGVuKytdPWEuc291cmNlW2Euc291cmNlSW5kZXgrK107cmV0dXJuIGEuYml0Y291bnQ9MCxrZX1mdW5jdGlvbiBvKGEsYil7dmFyIGMsZSxmPW5ldyBkKGEsYik7ZG97c3dpdGNoKGM9aShmKSxqKGYsMiwwKSl7Y2FzZSAwOmU9bihmKTticmVhaztjYXNlIDE6ZT1tKGYsbWUsbmUpO2JyZWFrO2Nhc2UgMjpsKGYsZi5sdHJlZSxmLmR0cmVlKSxlPW0oZixmLmx0cmVlLGYuZHRyZWUpO2JyZWFrO2RlZmF1bHQ6ZT1sZX1pZihlIT09a2UpdGhyb3cgbmV3IEVycm9yKFwiRGF0YSBlcnJvclwiKX13aGlsZSghYyk7cmV0dXJuIGYuZGVzdExlbjxmLmRlc3QubGVuZ3RoP1wiZnVuY3Rpb25cIj09dHlwZW9mIGYuZGVzdC5zbGljZT9mLmRlc3Quc2xpY2UoMCxmLmRlc3RMZW4pOmYuZGVzdC5zdWJhcnJheSgwLGYuZGVzdExlbik6Zi5kZXN0fWZ1bmN0aW9uIHAoYSxiLGMsZCxlKXtyZXR1cm4gTWF0aC5wb3coMS1lLDMpKmErMypNYXRoLnBvdygxLWUsMikqZSpiKzMqKDEtZSkqTWF0aC5wb3coZSwyKSpjK01hdGgucG93KGUsMykqZH1mdW5jdGlvbiBxKCl7dGhpcy54MT1OdW1iZXIuTmFOLHRoaXMueTE9TnVtYmVyLk5hTix0aGlzLngyPU51bWJlci5OYU4sdGhpcy55Mj1OdW1iZXIuTmFOfWZ1bmN0aW9uIHIoKXt0aGlzLmNvbW1hbmRzPVtdLHRoaXMuZmlsbD1cImJsYWNrXCIsdGhpcy5zdHJva2U9bnVsbCx0aGlzLnN0cm9rZVdpZHRoPTF9ZnVuY3Rpb24gcyhhKXt0aHJvdyBuZXcgRXJyb3IoYSl9ZnVuY3Rpb24gdChhLGIpe2F8fHMoYil9ZnVuY3Rpb24gdShhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYX19ZnVuY3Rpb24gdihhKXtyZXR1cm4gYT49LTEyOCYmYTw9MTI3fWZ1bmN0aW9uIHcoYSxiLGMpe2Zvcih2YXIgZD0wLGU9YS5sZW5ndGg7YjxlJiZkPDY0JiYwPT09YVtiXTspKytiLCsrZDtyZXR1cm4gYy5wdXNoKDEyOHxkLTEpLGJ9ZnVuY3Rpb24geChhLGIsYyl7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aCxmPWI7ZjxlJiZkPDY0Oyl7dmFyIGc9YVtmXTtpZighdihnKSlicmVhaztpZigwPT09ZyYmZisxPGUmJjA9PT1hW2YrMV0pYnJlYWs7KytmLCsrZH1jLnB1c2goZC0xKTtmb3IodmFyIGg9YjtoPGY7KytoKWMucHVzaChhW2hdKzI1NiYyNTUpO3JldHVybiBmfWZ1bmN0aW9uIHkoYSxiLGMpe2Zvcih2YXIgZD0wLGU9YS5sZW5ndGgsZj1iO2Y8ZSYmZDw2NDspe3ZhciBnPWFbZl07aWYoMD09PWcpYnJlYWs7aWYodihnKSYmZisxPGUmJnYoYVtmKzFdKSlicmVhazsrK2YsKytkfWMucHVzaCg2NHxkLTEpO2Zvcih2YXIgaD1iO2g8ZjsrK2gpe3ZhciBpPWFbaF07Yy5wdXNoKGkrNjU1MzY+PjgmMjU1LGkrMjU2JjI1NSl9cmV0dXJuIGZ9ZnVuY3Rpb24geihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT0wO2U8Yi5sZW5ndGg7ZSs9MSl7dmFyIGY9YltlXTtkW2YubmFtZV09Zi52YWx1ZX1pZih0aGlzLnRhYmxlTmFtZT1hLHRoaXMuZmllbGRzPWIsYylmb3IodmFyIGc9T2JqZWN0LmtleXMoYyksaD0wO2g8Zy5sZW5ndGg7aCs9MSl7dmFyIGk9Z1toXSxqPWNbaV07dm9pZCAwIT09ZFtpXSYmKGRbaV09ail9fWZ1bmN0aW9uIEEoYSxiLGMpe3ZvaWQgMD09PWMmJihjPWIubGVuZ3RoKTt2YXIgZD1uZXcgQXJyYXkoYi5sZW5ndGgrMSk7ZFswXT17bmFtZTphK1wiQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Y307Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDtlKyspZFtlKzFdPXtuYW1lOmErZSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YltlXX07cmV0dXJuIGR9ZnVuY3Rpb24gQihhLGIsYyl7dmFyIGQ9Yi5sZW5ndGgsZT1uZXcgQXJyYXkoZCsxKTtlWzBdPXtuYW1lOmErXCJDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkfTtmb3IodmFyIGY9MDtmPGQ7ZisrKWVbZisxXT17bmFtZTphK2YsdHlwZTpcIlRBQkxFXCIsdmFsdWU6YyhiW2ZdLGYpfTtyZXR1cm4gZX1mdW5jdGlvbiBDKGEsYixjKXt2YXIgZD1iLmxlbmd0aCxlPVtdO2VbMF09e25hbWU6YStcIkNvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmR9O2Zvcih2YXIgZj0wO2Y8ZDtmKyspZT1lLmNvbmNhdChjKGJbZl0sZikpO3JldHVybiBlfWZ1bmN0aW9uIEQoYSl7MT09PWEuZm9ybWF0P3ouY2FsbCh0aGlzLFwiY292ZXJhZ2VUYWJsZVwiLFt7bmFtZTpcImNvdmVyYWdlRm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9XS5jb25jYXQoQShcImdseXBoXCIsYS5nbHlwaHMpKSk6eGUuYXNzZXJ0KCExLFwiQ2FuJ3QgY3JlYXRlIGNvdmVyYWdlIHRhYmxlIGZvcm1hdCAyIHlldC5cIil9ZnVuY3Rpb24gRShhKXt6LmNhbGwodGhpcyxcInNjcmlwdExpc3RUYWJsZVwiLEMoXCJzY3JpcHRSZWNvcmRcIixhLGZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zY3JpcHQsZD1jLmRlZmF1bHRMYW5nU3lzO3JldHVybiB4ZS5hc3NlcnQoISFkLFwiVW5hYmxlIHRvIHdyaXRlIEdTVUI6IHNjcmlwdCBcIithLnRhZytcIiBoYXMgbm8gZGVmYXVsdCBsYW5ndWFnZSBzeXN0ZW0uXCIpLFt7bmFtZTpcInNjcmlwdFRhZ1wiK2IsdHlwZTpcIlRBR1wiLHZhbHVlOmEudGFnfSx7bmFtZTpcInNjcmlwdFwiK2IsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJzY3JpcHRUYWJsZVwiLFt7bmFtZTpcImRlZmF1bHRMYW5nU3lzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJkZWZhdWx0TGFuZ1N5c1wiLFt7bmFtZTpcImxvb2t1cE9yZGVyXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVxRmVhdHVyZUluZGV4XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmQucmVxRmVhdHVyZUluZGV4fV0uY29uY2F0KEEoXCJmZWF0dXJlSW5kZXhcIixkLmZlYXR1cmVJbmRleGVzKSkpfV0uY29uY2F0KEMoXCJsYW5nU3lzXCIsYy5sYW5nU3lzUmVjb3JkcyxmdW5jdGlvbihhLGIpe3ZhciBjPWEubGFuZ1N5cztyZXR1cm5be25hbWU6XCJsYW5nU3lzVGFnXCIrYix0eXBlOlwiVEFHXCIsdmFsdWU6YS50YWd9LHtuYW1lOlwibGFuZ1N5c1wiK2IsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJsYW5nU3lzXCIsW3tuYW1lOlwibG9va3VwT3JkZXJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXFGZWF0dXJlSW5kZXhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Yy5yZXFGZWF0dXJlSW5kZXh9XS5jb25jYXQoQShcImZlYXR1cmVJbmRleFwiLGMuZmVhdHVyZUluZGV4ZXMpKSl9XX0pKSl9XX0pKX1mdW5jdGlvbiBGKGEpe3ouY2FsbCh0aGlzLFwiZmVhdHVyZUxpc3RUYWJsZVwiLEMoXCJmZWF0dXJlUmVjb3JkXCIsYSxmdW5jdGlvbihhLGIpe3ZhciBjPWEuZmVhdHVyZTtyZXR1cm5be25hbWU6XCJmZWF0dXJlVGFnXCIrYix0eXBlOlwiVEFHXCIsdmFsdWU6YS50YWd9LHtuYW1lOlwiZmVhdHVyZVwiK2IsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJmZWF0dXJlVGFibGVcIixbe25hbWU6XCJmZWF0dXJlUGFyYW1zXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmMuZmVhdHVyZVBhcmFtc31dLmNvbmNhdChBKFwibG9va3VwTGlzdEluZGV4XCIsYy5sb29rdXBMaXN0SW5kZXhlcykpKX1dfSkpfWZ1bmN0aW9uIEcoYSxiKXt6LmNhbGwodGhpcyxcImxvb2t1cExpc3RUYWJsZVwiLEIoXCJsb29rdXBcIixhLGZ1bmN0aW9uKGEpe3ZhciBjPWJbYS5sb29rdXBUeXBlXTtyZXR1cm4geGUuYXNzZXJ0KCEhYyxcIlVuYWJsZSB0byB3cml0ZSBHU1VCIGxvb2t1cCB0eXBlIFwiK2EubG9va3VwVHlwZStcIiB0YWJsZXMuXCIpLG5ldyB6KFwibG9va3VwVGFibGVcIixbe25hbWU6XCJsb29rdXBUeXBlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEubG9va3VwVHlwZX0se25hbWU6XCJsb29rdXBGbGFnXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEubG9va3VwRmxhZ31dLmNvbmNhdChCKFwic3VidGFibGVcIixhLnN1YnRhYmxlcyxjKSkpfSkpfWZ1bmN0aW9uIEgoYSxiKXtyZXR1cm4gYS5nZXRVaW50OChiKX1mdW5jdGlvbiBJKGEsYil7cmV0dXJuIGEuZ2V0VWludDE2KGIsITEpfWZ1bmN0aW9uIEooYSxiKXtyZXR1cm4gYS5nZXRJbnQxNihiLCExKX1mdW5jdGlvbiBLKGEsYil7cmV0dXJuIGEuZ2V0VWludDMyKGIsITEpfWZ1bmN0aW9uIEwoYSxiKXtyZXR1cm4gYS5nZXRJbnQxNihiLCExKSthLmdldFVpbnQxNihiKzIsITEpLzY1NTM1fWZ1bmN0aW9uIE0oYSxiKXtmb3IodmFyIGM9XCJcIixkPWI7ZDxiKzQ7ZCs9MSljKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEuZ2V0SW50OChkKSk7cmV0dXJuIGN9ZnVuY3Rpb24gTihhLGIsYyl7Zm9yKHZhciBkPTAsZT0wO2U8YztlKz0xKWQ8PD04LGQrPWEuZ2V0VWludDgoYitlKTtyZXR1cm4gZH1mdW5jdGlvbiBPKGEsYixjKXtmb3IodmFyIGQ9W10sZT1iO2U8YztlKz0xKWQucHVzaChhLmdldFVpbnQ4KGUpKTtyZXR1cm4gZH1mdW5jdGlvbiBQKGEpe2Zvcih2YXIgYj1cIlwiLGM9MDtjPGEubGVuZ3RoO2MrPTEpYis9U3RyaW5nLmZyb21DaGFyQ29kZShhW2NdKTtyZXR1cm4gYn1mdW5jdGlvbiBRKGEsYil7dGhpcy5kYXRhPWEsdGhpcy5vZmZzZXQ9Yix0aGlzLnJlbGF0aXZlT2Zmc2V0PTB9ZnVuY3Rpb24gUihhLGIpe2IucGFyc2VVU2hvcnQoKSxhLmxlbmd0aD1iLnBhcnNlVUxvbmcoKSxhLmxhbmd1YWdlPWIucGFyc2VVTG9uZygpO3ZhciBjO2EuZ3JvdXBDb3VudD1jPWIucGFyc2VVTG9uZygpLGEuZ2x5cGhJbmRleE1hcD17fTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlmb3IodmFyIGU9Yi5wYXJzZVVMb25nKCksZj1iLnBhcnNlVUxvbmcoKSxnPWIucGFyc2VVTG9uZygpLGg9ZTtoPD1mO2grPTEpYS5nbHlwaEluZGV4TWFwW2hdPWcsZysrfWZ1bmN0aW9uIFMoYSxiLGMsZCxlKXthLmxlbmd0aD1iLnBhcnNlVVNob3J0KCksYS5sYW5ndWFnZT1iLnBhcnNlVVNob3J0KCk7dmFyIGY7YS5zZWdDb3VudD1mPWIucGFyc2VVU2hvcnQoKT4+MSxiLnNraXAoXCJ1U2hvcnRcIiwzKSxhLmdseXBoSW5kZXhNYXA9e307Zm9yKHZhciBnPW5ldyBMZS5QYXJzZXIoYyxkK2UrMTQpLGg9bmV3IExlLlBhcnNlcihjLGQrZSsxNisyKmYpLGk9bmV3IExlLlBhcnNlcihjLGQrZSsxNis0KmYpLGo9bmV3IExlLlBhcnNlcihjLGQrZSsxNis2KmYpLGs9ZCtlKzE2KzgqZixsPTA7bDxmLTE7bCs9MSlmb3IodmFyIG09dm9pZCAwLG49Zy5wYXJzZVVTaG9ydCgpLG89aC5wYXJzZVVTaG9ydCgpLHA9aS5wYXJzZVNob3J0KCkscT1qLnBhcnNlVVNob3J0KCkscj1vO3I8PW47cis9MSkwIT09cT8oaz1qLm9mZnNldCtqLnJlbGF0aXZlT2Zmc2V0LTIsays9cSxrKz0yKihyLW8pLDAhPT0obT1MZS5nZXRVU2hvcnQoYyxrKSkmJihtPW0rcCY2NTUzNSkpOm09citwJjY1NTM1LGEuZ2x5cGhJbmRleE1hcFtyXT1tfWZ1bmN0aW9uIFQoYSxiKXt2YXIgYz17fTtjLnZlcnNpb249TGUuZ2V0VVNob3J0KGEsYikseGUuYXJndW1lbnQoMD09PWMudmVyc2lvbixcImNtYXAgdGFibGUgdmVyc2lvbiBzaG91bGQgYmUgMC5cIiksYy5udW1UYWJsZXM9TGUuZ2V0VVNob3J0KGEsYisyKTtmb3IodmFyIGQ9LTEsZT1jLm51bVRhYmxlcy0xO2U+PTA7ZS09MSl7dmFyIGY9TGUuZ2V0VVNob3J0KGEsYis0KzgqZSksZz1MZS5nZXRVU2hvcnQoYSxiKzQrOCplKzIpO2lmKDM9PT1mJiYoMD09PWd8fDE9PT1nfHwxMD09PWcpfHwwPT09ZiYmKDA9PT1nfHwxPT09Z3x8Mj09PWd8fDM9PT1nfHw0PT09Zykpe2Q9TGUuZ2V0VUxvbmcoYSxiKzQrOCplKzQpO2JyZWFrfX1pZigtMT09PWQpdGhyb3cgbmV3IEVycm9yKFwiTm8gdmFsaWQgY21hcCBzdWItdGFibGVzIGZvdW5kLlwiKTt2YXIgaD1uZXcgTGUuUGFyc2VyKGEsYitkKTtpZihjLmZvcm1hdD1oLnBhcnNlVVNob3J0KCksMTI9PT1jLmZvcm1hdClSKGMsaCk7ZWxzZXtpZig0IT09Yy5mb3JtYXQpdGhyb3cgbmV3IEVycm9yKFwiT25seSBmb3JtYXQgNCBhbmQgMTIgY21hcCB0YWJsZXMgYXJlIHN1cHBvcnRlZCAoZm91bmQgZm9ybWF0IFwiK2MuZm9ybWF0K1wiKS5cIik7UyhjLGgsYSxiLGQpfXJldHVybiBjfWZ1bmN0aW9uIFUoYSxiLGMpe2Euc2VnbWVudHMucHVzaCh7ZW5kOmIsc3RhcnQ6YixkZWx0YTotKGItYyksb2Zmc2V0OjAsZ2x5cGhJbmRleDpjfSl9ZnVuY3Rpb24gVihhKXthLnNlZ21lbnRzLnB1c2goe2VuZDo2NTUzNSxzdGFydDo2NTUzNSxkZWx0YToxLG9mZnNldDowfSl9ZnVuY3Rpb24gVyhhKXt2YXIgYixjPSEwO2ZvcihiPWEubGVuZ3RoLTE7Yj4wO2ItPTEpe2lmKGEuZ2V0KGIpLnVuaWNvZGU+NjU1MzUpe2NvbnNvbGUubG9nKFwiQWRkaW5nIENNQVAgZm9ybWF0IDEyIChuZWVkZWQhKVwiKSxjPSExO2JyZWFrfX12YXIgZD1be25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibnVtVGFibGVzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmM/MToyfSx7bmFtZTpcInBsYXRmb3JtSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6M30se25hbWU6XCJlbmNvZGluZ0lEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwib2Zmc2V0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6Yz8xMjoyMH1dO2N8fChkPWQuY29uY2F0KFt7bmFtZTpcImNtYXAxMlBsYXRmb3JtSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6M30se25hbWU6XCJjbWFwMTJFbmNvZGluZ0lEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjEwfSx7bmFtZTpcImNtYXAxMk9mZnNldFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9XSkpLGQ9ZC5jb25jYXQoW3tuYW1lOlwiZm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjR9LHtuYW1lOlwiY21hcDRMZW5ndGhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJsYW5ndWFnZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNlZ0NvdW50WDJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzZWFyY2hSYW5nZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImVudHJ5U2VsZWN0b3JcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyYW5nZVNoaWZ0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSk7dmFyIGU9bmV3IEllLlRhYmxlKFwiY21hcFwiLGQpO2ZvcihlLnNlZ21lbnRzPVtdLGI9MDtiPGEubGVuZ3RoO2IrPTEpe2Zvcih2YXIgZj1hLmdldChiKSxnPTA7ZzxmLnVuaWNvZGVzLmxlbmd0aDtnKz0xKVUoZSxmLnVuaWNvZGVzW2ddLGIpO2Uuc2VnbWVudHM9ZS5zZWdtZW50cy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnQtYi5zdGFydH0pfVYoZSk7dmFyIGg9ZS5zZWdtZW50cy5sZW5ndGgsaT0wLGo9W10saz1bXSxsPVtdLG09W10sbj1bXSxvPVtdO2ZvcihiPTA7YjxoO2IrPTEpe3ZhciBwPWUuc2VnbWVudHNbYl07cC5lbmQ8PTY1NTM1JiZwLnN0YXJ0PD02NTUzNT8oaj1qLmNvbmNhdCh7bmFtZTpcImVuZF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLmVuZH0pLGs9ay5jb25jYXQoe25hbWU6XCJzdGFydF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLnN0YXJ0fSksbD1sLmNvbmNhdCh7bmFtZTpcImlkRGVsdGFfXCIrYix0eXBlOlwiU0hPUlRcIix2YWx1ZTpwLmRlbHRhfSksbT1tLmNvbmNhdCh7bmFtZTpcImlkUmFuZ2VPZmZzZXRfXCIrYix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6cC5vZmZzZXR9KSx2b2lkIDAhPT1wLmdseXBoSWQmJihuPW4uY29uY2F0KHtuYW1lOlwiZ2x5cGhfXCIrYix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6cC5nbHlwaElkfSkpKTppKz0xLGN8fHZvaWQgMD09PXAuZ2x5cGhJbmRleHx8KG89by5jb25jYXQoe25hbWU6XCJjbWFwMTJTdGFydF9cIitiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnAuc3RhcnR9KSxvPW8uY29uY2F0KHtuYW1lOlwiY21hcDEyRW5kX1wiK2IsdHlwZTpcIlVMT05HXCIsdmFsdWU6cC5lbmR9KSxvPW8uY29uY2F0KHtuYW1lOlwiY21hcDEyR2x5cGhfXCIrYix0eXBlOlwiVUxPTkdcIix2YWx1ZTpwLmdseXBoSW5kZXh9KSl9aWYoZS5zZWdDb3VudFgyPTIqKGgtaSksZS5zZWFyY2hSYW5nZT0yKk1hdGgucG93KDIsTWF0aC5mbG9vcihNYXRoLmxvZyhoLWkpL01hdGgubG9nKDIpKSksZS5lbnRyeVNlbGVjdG9yPU1hdGgubG9nKGUuc2VhcmNoUmFuZ2UvMikvTWF0aC5sb2coMiksZS5yYW5nZVNoaWZ0PWUuc2VnQ291bnRYMi1lLnNlYXJjaFJhbmdlLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChqKSxlLmZpZWxkcy5wdXNoKHtuYW1lOlwicmVzZXJ2ZWRQYWRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0pLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChrKSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQobCksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KG0pLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChuKSxlLmNtYXA0TGVuZ3RoPTE0KzIqai5sZW5ndGgrMisyKmsubGVuZ3RoKzIqbC5sZW5ndGgrMiptLmxlbmd0aCsyKm4ubGVuZ3RoLCFjKXt2YXIgcT0xNis0Km8ubGVuZ3RoO2UuY21hcDEyT2Zmc2V0PTIwK2UuY21hcDRMZW5ndGgsZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KFt7bmFtZTpcImNtYXAxMkZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxMn0se25hbWU6XCJjbWFwMTJSZXNlcnZlZFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImNtYXAxMkxlbmd0aFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnF9LHtuYW1lOlwiY21hcDEyTGFuZ3VhZ2VcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcImNtYXAxMm5Hcm91cHNcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTpvLmxlbmd0aC8zfV0pLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChvKX1yZXR1cm4gZX1mdW5jdGlvbiBYKGEpe3RoaXMuZm9udD1hfWZ1bmN0aW9uIFkoYSl7dGhpcy5jbWFwPWF9ZnVuY3Rpb24gWihhLGIpe3RoaXMuZW5jb2Rpbmc9YSx0aGlzLmNoYXJzZXQ9Yn1mdW5jdGlvbiAkKGEpe3ZhciBiPXRoaXM7c3dpdGNoKGEudmVyc2lvbil7Y2FzZSAxOnRoaXMubmFtZXM9UWUuc2xpY2UoKTticmVhaztjYXNlIDI6dGhpcy5uYW1lcz1uZXcgQXJyYXkoYS5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBjPTA7YzxhLm51bWJlck9mR2x5cGhzO2MrKylhLmdseXBoTmFtZUluZGV4W2NdPFFlLmxlbmd0aD9iLm5hbWVzW2NdPVFlW2EuZ2x5cGhOYW1lSW5kZXhbY11dOmIubmFtZXNbY109YS5uYW1lc1thLmdseXBoTmFtZUluZGV4W2NdLVFlLmxlbmd0aF07YnJlYWs7Y2FzZSAyLjU6dGhpcy5uYW1lcz1uZXcgQXJyYXkoYS5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBkPTA7ZDxhLm51bWJlck9mR2x5cGhzO2QrKyliLm5hbWVzW2RdPVFlW2QrYS5nbHlwaE5hbWVJbmRleFtkXV07YnJlYWs7Y2FzZSAzOmRlZmF1bHQ6dGhpcy5uYW1lcz1bXX19ZnVuY3Rpb24gXyhhKXtmb3IodmFyIGIsYz1hLnRhYmxlcy5jbWFwLmdseXBoSW5kZXhNYXAsZD1PYmplY3Qua2V5cyhjKSxlPTA7ZTxkLmxlbmd0aDtlKz0xKXt2YXIgZj1kW2VdLGc9Y1tmXTtiPWEuZ2x5cGhzLmdldChnKSxiLmFkZFVuaWNvZGUocGFyc2VJbnQoZikpfWZvcih2YXIgaD0wO2g8YS5nbHlwaHMubGVuZ3RoO2grPTEpYj1hLmdseXBocy5nZXQoaCksYS5jZmZFbmNvZGluZz9hLmlzQ0lERm9udD9iLm5hbWU9XCJnaWRcIitoOmIubmFtZT1hLmNmZkVuY29kaW5nLmNoYXJzZXRbaF06YS5nbHlwaE5hbWVzLm5hbWVzJiYoYi5uYW1lPWEuZ2x5cGhOYW1lcy5nbHlwaEluZGV4VG9OYW1lKGgpKX1mdW5jdGlvbiBhYShhLGIsYyxkLGUpe2EuYmVnaW5QYXRoKCksYS5tb3ZlVG8oYixjKSxhLmxpbmVUbyhkLGUpLGEuc3Ryb2tlKCl9ZnVuY3Rpb24gYmEoYSxiKXt2YXIgYz1ifHxuZXcgcjtyZXR1cm57Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJihjPWMoKSksY30sc2V0OmZ1bmN0aW9uKGEpe2M9YX19fWZ1bmN0aW9uIGNhKGEpe3RoaXMuYmluZENvbnN0cnVjdG9yVmFsdWVzKGEpfWZ1bmN0aW9uIGRhKGEsYixjKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5wYXRoLGFbY119LHNldDpmdW5jdGlvbihiKXthW2NdPWJ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9ZnVuY3Rpb24gZWEoYSxiKXt2YXIgYz10aGlzO2lmKHRoaXMuZm9udD1hLHRoaXMuZ2x5cGhzPXt9LEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspYy5nbHlwaHNbZF09YltkXTt0aGlzLmxlbmd0aD1iJiZiLmxlbmd0aHx8MH1mdW5jdGlvbiBmYShhLGIpe3JldHVybiBuZXcgY2Eoe2luZGV4OmIsZm9udDphfSl9ZnVuY3Rpb24gZ2EoYSxiLGMsZCxlLGYpe3JldHVybiBmdW5jdGlvbigpe3ZhciBnPW5ldyBjYSh7aW5kZXg6Yixmb250OmF9KTtyZXR1cm4gZy5wYXRoPWZ1bmN0aW9uKCl7YyhnLGQsZSk7dmFyIGI9ZihhLmdseXBocyxnKTtyZXR1cm4gYi51bml0c1BlckVtPWEudW5pdHNQZXJFbSxifSxkYShnLFwieE1pblwiLFwiX3hNaW5cIiksZGEoZyxcInhNYXhcIixcIl94TWF4XCIpLGRhKGcsXCJ5TWluXCIsXCJfeU1pblwiKSxkYShnLFwieU1heFwiLFwiX3lNYXhcIiksZ319ZnVuY3Rpb24gaGEoYSxiLGMsZCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bmV3IGNhKHtpbmRleDpiLGZvbnQ6YX0pO3JldHVybiBlLnBhdGg9ZnVuY3Rpb24oKXt2YXIgYj1jKGEsZSxkKTtyZXR1cm4gYi51bml0c1BlckVtPWEudW5pdHNQZXJFbSxifSxlfX1mdW5jdGlvbiBpYShhLGIpe2lmKGE9PT1iKXJldHVybiEwO2lmKEFycmF5LmlzQXJyYXkoYSkmJkFycmF5LmlzQXJyYXkoYikpe2lmKGEubGVuZ3RoIT09Yi5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0xKWlmKCFpYShhW2NdLGJbY10pKXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGphKGEpe3JldHVybiBhLmxlbmd0aDwxMjQwPzEwNzphLmxlbmd0aDwzMzkwMD8xMTMxOjMyNzY4fWZ1bmN0aW9uIGthKGEsYixjKXt2YXIgZCxlLGY9W10sZz1bXSxoPUxlLmdldENhcmQxNihhLGIpO2lmKDAhPT1oKXt2YXIgaT1MZS5nZXRCeXRlKGEsYisyKTtkPWIrKGgrMSkqaSsyO2Zvcih2YXIgaj1iKzMsaz0wO2s8aCsxO2srPTEpZi5wdXNoKExlLmdldE9mZnNldChhLGosaSkpLGorPWk7ZT1kK2ZbaF19ZWxzZSBlPWIrMjtmb3IodmFyIGw9MDtsPGYubGVuZ3RoLTE7bCs9MSl7dmFyIG09TGUuZ2V0Qnl0ZXMoYSxkK2ZbbF0sZCtmW2wrMV0pO2MmJihtPWMobSkpLGcucHVzaChtKX1yZXR1cm57b2JqZWN0czpnLHN0YXJ0T2Zmc2V0OmIsZW5kT2Zmc2V0OmV9fWZ1bmN0aW9uIGxhKGEpe2Zvcih2YXIgYj1cIlwiLGM9MTUsZD1bXCIwXCIsXCIxXCIsXCIyXCIsXCIzXCIsXCI0XCIsXCI1XCIsXCI2XCIsXCI3XCIsXCI4XCIsXCI5XCIsXCIuXCIsXCJFXCIsXCJFLVwiLG51bGwsXCItXCJdOzspe3ZhciBlPWEucGFyc2VCeXRlKCksZj1lPj40LGc9MTUmZTtpZihmPT09YylicmVhaztpZihiKz1kW2ZdLGc9PT1jKWJyZWFrO2IrPWRbZ119cmV0dXJuIHBhcnNlRmxvYXQoYil9ZnVuY3Rpb24gbWEoYSxiKXt2YXIgYyxkLGUsZjtpZigyOD09PWIpcmV0dXJuIGM9YS5wYXJzZUJ5dGUoKSxkPWEucGFyc2VCeXRlKCksYzw8OHxkO2lmKDI5PT09YilyZXR1cm4gYz1hLnBhcnNlQnl0ZSgpLGQ9YS5wYXJzZUJ5dGUoKSxlPWEucGFyc2VCeXRlKCksZj1hLnBhcnNlQnl0ZSgpLGM8PDI0fGQ8PDE2fGU8PDh8ZjtpZigzMD09PWIpcmV0dXJuIGxhKGEpO2lmKGI+PTMyJiZiPD0yNDYpcmV0dXJuIGItMTM5O2lmKGI+PTI0NyYmYjw9MjUwKXJldHVybiBjPWEucGFyc2VCeXRlKCksMjU2KihiLTI0NykrYysxMDg7aWYoYj49MjUxJiZiPD0yNTQpcmV0dXJuIGM9YS5wYXJzZUJ5dGUoKSwyNTYqLShiLTI1MSktYy0xMDg7dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiMCBcIitiKX1mdW5jdGlvbiBuYShhKXtmb3IodmFyIGI9e30sYz0wO2M8YS5sZW5ndGg7Yys9MSl7dmFyIGQ9YVtjXVswXSxlPWFbY11bMV0sZj12b2lkIDA7aWYoZj0xPT09ZS5sZW5ndGg/ZVswXTplLGIuaGFzT3duUHJvcGVydHkoZCkmJiFpc05hTihiW2RdKSl0aHJvdyBuZXcgRXJyb3IoXCJPYmplY3QgXCIrYitcIiBhbHJlYWR5IGhhcyBrZXkgXCIrZCk7YltkXT1mfXJldHVybiBifWZ1bmN0aW9uIG9hKGEsYixjKXtiPXZvaWQgMCE9PWI/YjowO3ZhciBkPW5ldyBMZS5QYXJzZXIoYSxiKSxlPVtdLGY9W107Zm9yKGM9dm9pZCAwIT09Yz9jOmEubGVuZ3RoO2QucmVsYXRpdmVPZmZzZXQ8Yzspe3ZhciBnPWQucGFyc2VCeXRlKCk7Zzw9MjE/KDEyPT09ZyYmKGc9MTIwMCtkLnBhcnNlQnl0ZSgpKSxlLnB1c2goW2csZl0pLGY9W10pOmYucHVzaChtYShkLGcpKX1yZXR1cm4gbmEoZSl9ZnVuY3Rpb24gcGEoYSxiKXtyZXR1cm4gYj1iPD0zOTA/TmVbYl06YVtiLTM5MV19ZnVuY3Rpb24gcWEoYSxiLGMpe2Zvcih2YXIgZCxlPXt9LGY9MDtmPGIubGVuZ3RoO2YrPTEpe3ZhciBnPWJbZl07aWYoQXJyYXkuaXNBcnJheShnLnR5cGUpKXt2YXIgaD1bXTtoLmxlbmd0aD1nLnR5cGUubGVuZ3RoO2Zvcih2YXIgaT0wO2k8Zy50eXBlLmxlbmd0aDtpKyspZD12b2lkIDAhPT1hW2cub3BdP2FbZy5vcF1baV06dm9pZCAwLHZvaWQgMD09PWQmJihkPXZvaWQgMCE9PWcudmFsdWUmJnZvaWQgMCE9PWcudmFsdWVbaV0/Zy52YWx1ZVtpXTpudWxsKSxcIlNJRFwiPT09Zy50eXBlW2ldJiYoZD1wYShjLGQpKSxoW2ldPWQ7ZVtnLm5hbWVdPWh9ZWxzZSBkPWFbZy5vcF0sdm9pZCAwPT09ZCYmKGQ9dm9pZCAwIT09Zy52YWx1ZT9nLnZhbHVlOm51bGwpLFwiU0lEXCI9PT1nLnR5cGUmJihkPXBhKGMsZCkpLGVbZy5uYW1lXT1kfXJldHVybiBlfWZ1bmN0aW9uIHJhKGEsYil7dmFyIGM9e307cmV0dXJuIGMuZm9ybWF0TWFqb3I9TGUuZ2V0Q2FyZDgoYSxiKSxjLmZvcm1hdE1pbm9yPUxlLmdldENhcmQ4KGEsYisxKSxjLnNpemU9TGUuZ2V0Q2FyZDgoYSxiKzIpLGMub2Zmc2V0U2l6ZT1MZS5nZXRDYXJkOChhLGIrMyksYy5zdGFydE9mZnNldD1iLGMuZW5kT2Zmc2V0PWIrNCxjfWZ1bmN0aW9uIHNhKGEsYil7cmV0dXJuIHFhKG9hKGEsMCxhLmJ5dGVMZW5ndGgpLFRlLGIpfWZ1bmN0aW9uIHRhKGEsYixjLGQpe3JldHVybiBxYShvYShhLGIsYyksVWUsZCl9ZnVuY3Rpb24gdWEoYSxiLGMsZCl7Zm9yKHZhciBlPVtdLGY9MDtmPGMubGVuZ3RoO2YrPTEpe3ZhciBnPW5ldyBEYXRhVmlldyhuZXcgVWludDhBcnJheShjW2ZdKS5idWZmZXIpLGg9c2EoZyxkKTtoLl9zdWJycz1bXSxoLl9zdWJyc0JpYXM9MDt2YXIgaT1oLnByaXZhdGVbMF0saj1oLnByaXZhdGVbMV07aWYoMCE9PWkmJjAhPT1qKXt2YXIgaz10YShhLGorYixpLGQpO2lmKGguX2RlZmF1bHRXaWR0aFg9ay5kZWZhdWx0V2lkdGhYLGguX25vbWluYWxXaWR0aFg9ay5ub21pbmFsV2lkdGhYLDAhPT1rLnN1YnJzKXt2YXIgbD1qK2suc3VicnMsbT1rYShhLGwrYik7aC5fc3VicnM9bS5vYmplY3RzLGguX3N1YnJzQmlhcz1qYShoLl9zdWJycyl9aC5fcHJpdmF0ZURpY3Q9a31lLnB1c2goaCl9cmV0dXJuIGV9ZnVuY3Rpb24gdmEoYSxiLGMsZCl7dmFyIGUsZixnPW5ldyBMZS5QYXJzZXIoYSxiKTtjLT0xO3ZhciBoPVtcIi5ub3RkZWZcIl0saT1nLnBhcnNlQ2FyZDgoKTtpZigwPT09aSlmb3IodmFyIGo9MDtqPGM7ais9MSllPWcucGFyc2VTSUQoKSxoLnB1c2gocGEoZCxlKSk7ZWxzZSBpZigxPT09aSlmb3IoO2gubGVuZ3RoPD1jOyl7ZT1nLnBhcnNlU0lEKCksZj1nLnBhcnNlQ2FyZDgoKTtmb3IodmFyIGs9MDtrPD1mO2srPTEpaC5wdXNoKHBhKGQsZSkpLGUrPTF9ZWxzZXtpZigyIT09aSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGNoYXJzZXQgZm9ybWF0IFwiK2kpO2Zvcig7aC5sZW5ndGg8PWM7KXtlPWcucGFyc2VTSUQoKSxmPWcucGFyc2VDYXJkMTYoKTtmb3IodmFyIGw9MDtsPD1mO2wrPTEpaC5wdXNoKHBhKGQsZSkpLGUrPTF9fXJldHVybiBofWZ1bmN0aW9uIHdhKGEsYixjKXt2YXIgZCxlPXt9LGY9bmV3IExlLlBhcnNlcihhLGIpLGc9Zi5wYXJzZUNhcmQ4KCk7aWYoMD09PWcpZm9yKHZhciBoPWYucGFyc2VDYXJkOCgpLGk9MDtpPGg7aSs9MSlkPWYucGFyc2VDYXJkOCgpLGVbZF09aTtlbHNle2lmKDEhPT1nKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gZW5jb2RpbmcgZm9ybWF0IFwiK2cpO3ZhciBqPWYucGFyc2VDYXJkOCgpO2Q9MTtmb3IodmFyIGs9MDtrPGo7ays9MSlmb3IodmFyIGw9Zi5wYXJzZUNhcmQ4KCksbT1mLnBhcnNlQ2FyZDgoKSxuPWw7bjw9bCttO24rPTEpZVtuXT1kLGQrPTF9cmV0dXJuIG5ldyBaKGUsYyl9ZnVuY3Rpb24geGEoYSxiLGMpe2Z1bmN0aW9uIGQoYSxiKXt0JiZvLmNsb3NlUGF0aCgpLG8ubW92ZVRvKGEsYiksdD0hMH1mdW5jdGlvbiBlKCl7dmFyIGE7YT1wLmxlbmd0aCUyIT0wLGEmJiFzJiYoeT1wLnNoaWZ0KCkrbikscSs9cC5sZW5ndGg+PjEscC5sZW5ndGg9MCxzPSEwfWZ1bmN0aW9uIGYoYyl7Zm9yKHZhciBtLHIsdyx4LHosQSxCLEMsRCxFLEYsRyxIPTA7SDxjLmxlbmd0aDspe3ZhciBJPWNbSF07c3dpdGNoKEgrPTEsSSl7Y2FzZSAxOmNhc2UgMzplKCk7YnJlYWs7Y2FzZSA0OnAubGVuZ3RoPjEmJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx2Kz1wLnBvcCgpLGQodSx2KTticmVhaztjYXNlIDU6Zm9yKDtwLmxlbmd0aD4wOyl1Kz1wLnNoaWZ0KCksdis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7YnJlYWs7Y2FzZSA2OmZvcig7cC5sZW5ndGg+MCYmKHUrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpLDAhPT1wLmxlbmd0aCk7KXYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2JyZWFrO2Nhc2UgNzpmb3IoO3AubGVuZ3RoPjAmJih2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KSwwIT09cC5sZW5ndGgpOyl1Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTticmVhaztjYXNlIDg6Zm9yKDtwLmxlbmd0aD4wOylnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLFxudT1pK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAxMDp6PXAucG9wKCkrbCxBPWtbel0sQSYmZihBKTticmVhaztjYXNlIDExOnJldHVybjtjYXNlIDEyOnN3aXRjaChJPWNbSF0sSCs9MSxJKXtjYXNlIDM1Omc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWorcC5zaGlmdCgpLEQ9QitwLnNoaWZ0KCksRT1DK3Auc2hpZnQoKSxGPUQrcC5zaGlmdCgpLEc9RStwLnNoaWZ0KCksdT1GK3Auc2hpZnQoKSx2PUcrcC5zaGlmdCgpLHAuc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaixCLEMpLG8uY3VydmVUbyhELEUsRixHLHUsdik7YnJlYWs7Y2FzZSAzNDpnPXUrcC5zaGlmdCgpLGg9dixpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWosRD1CK3Auc2hpZnQoKSxFPWosRj1EK3Auc2hpZnQoKSxHPXYsdT1GK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaixCLEMpLG8uY3VydmVUbyhELEUsRixHLHUsdik7YnJlYWs7Y2FzZSAzNjpnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLEI9aStwLnNoaWZ0KCksQz1qLEQ9QitwLnNoaWZ0KCksRT1qLEY9RCtwLnNoaWZ0KCksRz1FK3Auc2hpZnQoKSx1PUYrcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztjYXNlIDM3Omc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWorcC5zaGlmdCgpLEQ9QitwLnNoaWZ0KCksRT1DK3Auc2hpZnQoKSxGPUQrcC5zaGlmdCgpLEc9RStwLnNoaWZ0KCksTWF0aC5hYnMoRi11KT5NYXRoLmFicyhHLXYpP3U9RitwLnNoaWZ0KCk6dj1HK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaixCLEMpLG8uY3VydmVUbyhELEUsRixHLHUsdik7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmxvZyhcIkdseXBoIFwiK2IuaW5kZXgrXCI6IHVua25vd24gb3BlcmF0b3IgMTIwMFwiK0kpLHAubGVuZ3RoPTB9YnJlYWs7Y2FzZSAxNDpwLmxlbmd0aD4wJiYhcyYmKHk9cC5zaGlmdCgpK24scz0hMCksdCYmKG8uY2xvc2VQYXRoKCksdD0hMSk7YnJlYWs7Y2FzZSAxODplKCk7YnJlYWs7Y2FzZSAxOTpjYXNlIDIwOmUoKSxIKz1xKzc+PjM7YnJlYWs7Y2FzZSAyMTpwLmxlbmd0aD4yJiYhcyYmKHk9cC5zaGlmdCgpK24scz0hMCksdis9cC5wb3AoKSx1Kz1wLnBvcCgpLGQodSx2KTticmVhaztjYXNlIDIyOnAubGVuZ3RoPjEmJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx1Kz1wLnBvcCgpLGQodSx2KTticmVhaztjYXNlIDIzOmUoKTticmVhaztjYXNlIDI0OmZvcig7cC5sZW5ndGg+MjspZz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTt1Kz1wLnNoaWZ0KCksdis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7YnJlYWs7Y2FzZSAyNTpmb3IoO3AubGVuZ3RoPjY7KXUrPXAuc2hpZnQoKSx2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTtnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMjY6Zm9yKHAubGVuZ3RoJTImJih1Kz1wLnNoaWZ0KCkpO3AubGVuZ3RoPjA7KWc9dSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWksdj1qK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMjc6Zm9yKHAubGVuZ3RoJTImJih2Kz1wLnNoaWZ0KCkpO3AubGVuZ3RoPjA7KWc9dStwLnNoaWZ0KCksaD12LGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aixvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMjg6bT1jW0hdLHI9Y1tIKzFdLHAucHVzaCgobTw8MjR8cjw8MTYpPj4xNiksSCs9MjticmVhaztjYXNlIDI5Ono9cC5wb3AoKSthLmdzdWJyc0JpYXMsQT1hLmdzdWJyc1t6XSxBJiZmKEEpO2JyZWFrO2Nhc2UgMzA6Zm9yKDtwLmxlbmd0aD4wJiYoZz11LGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qKygxPT09cC5sZW5ndGg/cC5zaGlmdCgpOjApLG8uY3VydmVUbyhnLGgsaSxqLHUsdiksMCE9PXAubGVuZ3RoKTspZz11K3Auc2hpZnQoKSxoPXYsaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksdT1pKygxPT09cC5sZW5ndGg/cC5zaGlmdCgpOjApLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAzMTpmb3IoO3AubGVuZ3RoPjAmJihnPXUrcC5zaGlmdCgpLGg9dixpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSx1PWkrKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KSwwIT09cC5sZW5ndGgpOylnPXUsaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWorKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztkZWZhdWx0Okk8MzI/Y29uc29sZS5sb2coXCJHbHlwaCBcIitiLmluZGV4K1wiOiB1bmtub3duIG9wZXJhdG9yIFwiK0kpOkk8MjQ3P3AucHVzaChJLTEzOSk6STwyNTE/KG09Y1tIXSxIKz0xLHAucHVzaCgyNTYqKEktMjQ3KSttKzEwOCkpOkk8MjU1PyhtPWNbSF0sSCs9MSxwLnB1c2goMjU2Ki0oSS0yNTEpLW0tMTA4KSk6KG09Y1tIXSxyPWNbSCsxXSx3PWNbSCsyXSx4PWNbSCszXSxIKz00LHAucHVzaCgobTw8MjR8cjw8MTZ8dzw8OHx4KS82NTUzNikpfX19dmFyIGcsaCxpLGosayxsLG0sbixvPW5ldyByLHA9W10scT0wLHM9ITEsdD0hMSx1PTAsdj0wO2lmKGEuaXNDSURGb250KXt2YXIgdz1hLnRhYmxlcy5jZmYudG9wRGljdC5fZmRTZWxlY3RbYi5pbmRleF0seD1hLnRhYmxlcy5jZmYudG9wRGljdC5fZmRBcnJheVt3XTtrPXguX3N1YnJzLGw9eC5fc3VicnNCaWFzLG09eC5fZGVmYXVsdFdpZHRoWCxuPXguX25vbWluYWxXaWR0aFh9ZWxzZSBrPWEudGFibGVzLmNmZi50b3BEaWN0Ll9zdWJycyxsPWEudGFibGVzLmNmZi50b3BEaWN0Ll9zdWJyc0JpYXMsbT1hLnRhYmxlcy5jZmYudG9wRGljdC5fZGVmYXVsdFdpZHRoWCxuPWEudGFibGVzLmNmZi50b3BEaWN0Ll9ub21pbmFsV2lkdGhYO3ZhciB5PW07cmV0dXJuIGYoYyksYi5hZHZhbmNlV2lkdGg9eSxvfWZ1bmN0aW9uIHlhKGEsYixjLGQpe3ZhciBlLGY9W10sZz1uZXcgTGUuUGFyc2VyKGEsYiksaD1nLnBhcnNlQ2FyZDgoKTtpZigwPT09aClmb3IodmFyIGk9MDtpPGM7aSsrKXtpZigoZT1nLnBhcnNlQ2FyZDgoKSk+PWQpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIHRhYmxlIENJRCBGb250IEZEU2VsZWN0IGhhcyBiYWQgRkQgaW5kZXggdmFsdWUgXCIrZStcIiAoRkQgY291bnQgXCIrZCtcIilcIik7Zi5wdXNoKGUpfWVsc2V7aWYoMyE9PWgpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIFRhYmxlIENJRCBGb250IEZEU2VsZWN0IHRhYmxlIGhhcyB1bnN1cHBvcnRlZCBmb3JtYXQgXCIraCk7dmFyIGo9Zy5wYXJzZUNhcmQxNigpLGs9Zy5wYXJzZUNhcmQxNigpO2lmKDAhPT1rKXRocm93IG5ldyBFcnJvcihcIkNGRiBUYWJsZSBDSUQgRm9udCBGRFNlbGVjdCBmb3JtYXQgMyByYW5nZSBoYXMgYmFkIGluaXRpYWwgR0lEIFwiK2spO2Zvcih2YXIgbCxtPTA7bTxqO20rKyl7aWYoZT1nLnBhcnNlQ2FyZDgoKSxsPWcucGFyc2VDYXJkMTYoKSxlPj1kKXRocm93IG5ldyBFcnJvcihcIkNGRiB0YWJsZSBDSUQgRm9udCBGRFNlbGVjdCBoYXMgYmFkIEZEIGluZGV4IHZhbHVlIFwiK2UrXCIgKEZEIGNvdW50IFwiK2QrXCIpXCIpO2lmKGw+Yyl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgVGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgZm9ybWF0IDMgcmFuZ2UgaGFzIGJhZCBHSUQgXCIrbCk7Zm9yKDtrPGw7aysrKWYucHVzaChlKTtrPWx9aWYobCE9PWMpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIFRhYmxlIENJRCBGb250IEZEU2VsZWN0IGZvcm1hdCAzIHJhbmdlIGhhcyBiYWQgZmluYWwgR0lEIFwiK2wpfXJldHVybiBmfWZ1bmN0aW9uIHphKGEsYixjKXtjLnRhYmxlcy5jZmY9e307dmFyIGQ9cmEoYSxiKSxlPWthKGEsZC5lbmRPZmZzZXQsTGUuYnl0ZXNUb1N0cmluZyksZj1rYShhLGUuZW5kT2Zmc2V0KSxnPWthKGEsZi5lbmRPZmZzZXQsTGUuYnl0ZXNUb1N0cmluZyksaD1rYShhLGcuZW5kT2Zmc2V0KTtjLmdzdWJycz1oLm9iamVjdHMsYy5nc3VicnNCaWFzPWphKGMuZ3N1YnJzKTt2YXIgaT11YShhLGIsZi5vYmplY3RzLGcub2JqZWN0cyk7aWYoMSE9PWkubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkNGRiB0YWJsZSBoYXMgdG9vIG1hbnkgZm9udHMgaW4gJ0ZvbnRTZXQnIC0gY291bnQgb2YgZm9udHMgTmFtZUluZGV4Lmxlbmd0aCA9IFwiK2kubGVuZ3RoKTt2YXIgaj1pWzBdO2lmKGMudGFibGVzLmNmZi50b3BEaWN0PWosai5fcHJpdmF0ZURpY3QmJihjLmRlZmF1bHRXaWR0aFg9ai5fcHJpdmF0ZURpY3QuZGVmYXVsdFdpZHRoWCxjLm5vbWluYWxXaWR0aFg9ai5fcHJpdmF0ZURpY3Qubm9taW5hbFdpZHRoWCksdm9pZCAwIT09ai5yb3NbMF0mJnZvaWQgMCE9PWoucm9zWzFdJiYoYy5pc0NJREZvbnQ9ITApLGMuaXNDSURGb250KXt2YXIgaz1qLmZkQXJyYXksbD1qLmZkU2VsZWN0O2lmKDA9PT1rfHwwPT09bCl0aHJvdyBuZXcgRXJyb3IoXCJGb250IGlzIG1hcmtlZCBhcyBhIENJRCBmb250LCBidXQgRkRBcnJheSBhbmQvb3IgRkRTZWxlY3QgaW5mb3JtYXRpb24gaXMgbWlzc2luZ1wiKTtrKz1iO3ZhciBtPWthKGEsayksbj11YShhLGIsbS5vYmplY3RzLGcub2JqZWN0cyk7ai5fZmRBcnJheT1uLGwrPWIsai5fZmRTZWxlY3Q9eWEoYSxsLGMubnVtR2x5cGhzLG4ubGVuZ3RoKX12YXIgbz1iK2oucHJpdmF0ZVsxXSxwPXRhKGEsbyxqLnByaXZhdGVbMF0sZy5vYmplY3RzKTtpZihjLmRlZmF1bHRXaWR0aFg9cC5kZWZhdWx0V2lkdGhYLGMubm9taW5hbFdpZHRoWD1wLm5vbWluYWxXaWR0aFgsMCE9PXAuc3VicnMpe3ZhciBxPW8rcC5zdWJycyxyPWthKGEscSk7Yy5zdWJycz1yLm9iamVjdHMsYy5zdWJyc0JpYXM9amEoYy5zdWJycyl9ZWxzZSBjLnN1YnJzPVtdLGMuc3VicnNCaWFzPTA7dmFyIHM9a2EoYSxiK2ouY2hhclN0cmluZ3MpO2MubkdseXBocz1zLm9iamVjdHMubGVuZ3RoO3ZhciB0PXZhKGEsYitqLmNoYXJzZXQsYy5uR2x5cGhzLGcub2JqZWN0cyk7MD09PWouZW5jb2Rpbmc/Yy5jZmZFbmNvZGluZz1uZXcgWihPZSx0KToxPT09ai5lbmNvZGluZz9jLmNmZkVuY29kaW5nPW5ldyBaKFBlLHQpOmMuY2ZmRW5jb2Rpbmc9d2EoYSxiK2ouZW5jb2RpbmcsdCksYy5lbmNvZGluZz1jLmVuY29kaW5nfHxjLmNmZkVuY29kaW5nLGMuZ2x5cGhzPW5ldyBTZS5HbHlwaFNldChjKTtmb3IodmFyIHU9MDt1PGMubkdseXBoczt1Kz0xKXt2YXIgdj1zLm9iamVjdHNbdV07Yy5nbHlwaHMucHVzaCh1LFNlLmNmZkdseXBoTG9hZGVyKGMsdSx4YSx2KSl9fWZ1bmN0aW9uIEFhKGEsYil7dmFyIGMsZD1OZS5pbmRleE9mKGEpO3JldHVybiBkPj0wJiYoYz1kKSxkPWIuaW5kZXhPZihhKSxkPj0wP2M9ZCtOZS5sZW5ndGg6KGM9TmUubGVuZ3RoK2IubGVuZ3RoLGIucHVzaChhKSksY31mdW5jdGlvbiBCYSgpe3JldHVybiBuZXcgSWUuUmVjb3JkKFwiSGVhZGVyXCIsW3tuYW1lOlwibWFqb3JcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZToxfSx7bmFtZTpcIm1pbm9yXCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6MH0se25hbWU6XCJoZHJTaXplXCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6NH0se25hbWU6XCJtYWpvclwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjF9XSl9ZnVuY3Rpb24gQ2EoYSl7dmFyIGI9bmV3IEllLlJlY29yZChcIk5hbWUgSU5ERVhcIixbe25hbWU6XCJuYW1lc1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pO2IubmFtZXM9W107Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0xKWIubmFtZXMucHVzaCh7bmFtZTpcIm5hbWVfXCIrYyx0eXBlOlwiTkFNRVwiLHZhbHVlOmFbY119KTtyZXR1cm4gYn1mdW5jdGlvbiBEYShhLGIsYyl7Zm9yKHZhciBkPXt9LGU9MDtlPGEubGVuZ3RoO2UrPTEpe3ZhciBmPWFbZV0sZz1iW2YubmFtZV07dm9pZCAwPT09Z3x8aWEoZyxmLnZhbHVlKXx8KFwiU0lEXCI9PT1mLnR5cGUmJihnPUFhKGcsYykpLGRbZi5vcF09e25hbWU6Zi5uYW1lLHR5cGU6Zi50eXBlLHZhbHVlOmd9KX1yZXR1cm4gZH1mdW5jdGlvbiBFYShhLGIpe3ZhciBjPW5ldyBJZS5SZWNvcmQoXCJUb3AgRElDVFwiLFt7bmFtZTpcImRpY3RcIix0eXBlOlwiRElDVFwiLHZhbHVlOnt9fV0pO3JldHVybiBjLmRpY3Q9RGEoVGUsYSxiKSxjfWZ1bmN0aW9uIEZhKGEpe3ZhciBiPW5ldyBJZS5SZWNvcmQoXCJUb3AgRElDVCBJTkRFWFwiLFt7bmFtZTpcInRvcERpY3RzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSk7cmV0dXJuIGIudG9wRGljdHM9W3tuYW1lOlwidG9wRGljdF8wXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6YX1dLGJ9ZnVuY3Rpb24gR2EoYSl7dmFyIGI9bmV3IEllLlJlY29yZChcIlN0cmluZyBJTkRFWFwiLFt7bmFtZTpcInN0cmluZ3NcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKTtiLnN0cmluZ3M9W107Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0xKWIuc3RyaW5ncy5wdXNoKHtuYW1lOlwic3RyaW5nX1wiK2MsdHlwZTpcIlNUUklOR1wiLHZhbHVlOmFbY119KTtyZXR1cm4gYn1mdW5jdGlvbiBIYSgpe3JldHVybiBuZXcgSWUuUmVjb3JkKFwiR2xvYmFsIFN1YnIgSU5ERVhcIixbe25hbWU6XCJzdWJyc1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pfWZ1bmN0aW9uIElhKGEsYil7Zm9yKHZhciBjPW5ldyBJZS5SZWNvcmQoXCJDaGFyc2V0c1wiLFt7bmFtZTpcImZvcm1hdFwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjB9XSksZD0wO2Q8YS5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXSxmPUFhKGUsYik7Yy5maWVsZHMucHVzaCh7bmFtZTpcImdseXBoX1wiK2QsdHlwZTpcIlNJRFwiLHZhbHVlOmZ9KX1yZXR1cm4gY31mdW5jdGlvbiBKYShhKXt2YXIgYj1bXSxjPWEucGF0aDtiLnB1c2goe25hbWU6XCJ3aWR0aFwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTphLmFkdmFuY2VXaWR0aH0pO2Zvcih2YXIgZD0wLGU9MCxmPTA7ZjxjLmNvbW1hbmRzLmxlbmd0aDtmKz0xKXt2YXIgZz12b2lkIDAsaD12b2lkIDAsaT1jLmNvbW1hbmRzW2ZdO2lmKFwiUVwiPT09aS50eXBlKXt2YXIgaj0xLzMsaz0yLzM7aT17dHlwZTpcIkNcIix4OmkueCx5OmkueSx4MTpqKmQrayppLngxLHkxOmoqZStrKmkueTEseDI6aippLngrayppLngxLHkyOmoqaS55K2sqaS55MX19aWYoXCJNXCI9PT1pLnR5cGUpZz1NYXRoLnJvdW5kKGkueC1kKSxoPU1hdGgucm91bmQoaS55LWUpLGIucHVzaCh7bmFtZTpcImR4XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmd9KSxiLnB1c2goe25hbWU6XCJkeVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpofSksYi5wdXNoKHtuYW1lOlwicm1vdmV0b1wiLHR5cGU6XCJPUFwiLHZhbHVlOjIxfSksZD1NYXRoLnJvdW5kKGkueCksZT1NYXRoLnJvdW5kKGkueSk7ZWxzZSBpZihcIkxcIj09PWkudHlwZSlnPU1hdGgucm91bmQoaS54LWQpLGg9TWF0aC5yb3VuZChpLnktZSksYi5wdXNoKHtuYW1lOlwiZHhcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6Z30pLGIucHVzaCh7bmFtZTpcImR5XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmh9KSxiLnB1c2goe25hbWU6XCJybGluZXRvXCIsdHlwZTpcIk9QXCIsdmFsdWU6NX0pLGQ9TWF0aC5yb3VuZChpLngpLGU9TWF0aC5yb3VuZChpLnkpO2Vsc2UgaWYoXCJDXCI9PT1pLnR5cGUpe3ZhciBsPU1hdGgucm91bmQoaS54MS1kKSxtPU1hdGgucm91bmQoaS55MS1lKSxuPU1hdGgucm91bmQoaS54Mi1pLngxKSxvPU1hdGgucm91bmQoaS55Mi1pLnkxKTtnPU1hdGgucm91bmQoaS54LWkueDIpLGg9TWF0aC5yb3VuZChpLnktaS55MiksYi5wdXNoKHtuYW1lOlwiZHgxXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmx9KSxiLnB1c2goe25hbWU6XCJkeTFcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6bX0pLGIucHVzaCh7bmFtZTpcImR4MlwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpufSksYi5wdXNoKHtuYW1lOlwiZHkyXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOm99KSxiLnB1c2goe25hbWU6XCJkeFwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpnfSksYi5wdXNoKHtuYW1lOlwiZHlcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6aH0pLGIucHVzaCh7bmFtZTpcInJyY3VydmV0b1wiLHR5cGU6XCJPUFwiLHZhbHVlOjh9KSxkPU1hdGgucm91bmQoaS54KSxlPU1hdGgucm91bmQoaS55KX19cmV0dXJuIGIucHVzaCh7bmFtZTpcImVuZGNoYXJcIix0eXBlOlwiT1BcIix2YWx1ZToxNH0pLGJ9ZnVuY3Rpb24gS2EoYSl7Zm9yKHZhciBiPW5ldyBJZS5SZWNvcmQoXCJDaGFyU3RyaW5ncyBJTkRFWFwiLFt7bmFtZTpcImNoYXJTdHJpbmdzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSksYz0wO2M8YS5sZW5ndGg7Yys9MSl7dmFyIGQ9YS5nZXQoYyksZT1KYShkKTtiLmNoYXJTdHJpbmdzLnB1c2goe25hbWU6ZC5uYW1lLHR5cGU6XCJDSEFSU1RSSU5HXCIsdmFsdWU6ZX0pfXJldHVybiBifWZ1bmN0aW9uIExhKGEsYil7dmFyIGM9bmV3IEllLlJlY29yZChcIlByaXZhdGUgRElDVFwiLFt7bmFtZTpcImRpY3RcIix0eXBlOlwiRElDVFwiLHZhbHVlOnt9fV0pO3JldHVybiBjLmRpY3Q9RGEoVWUsYSxiKSxjfWZ1bmN0aW9uIE1hKGEsYil7Zm9yKHZhciBjLGQ9bmV3IEllLlRhYmxlKFwiQ0ZGIFwiLFt7bmFtZTpcImhlYWRlclwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJuYW1lSW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwidG9wRGljdEluZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcInN0cmluZ0luZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcImdsb2JhbFN1YnJJbmRleFwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJjaGFyc2V0c1wiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJjaGFyU3RyaW5nc0luZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcInByaXZhdGVEaWN0XCIsdHlwZTpcIlJFQ09SRFwifV0pLGU9MS9iLnVuaXRzUGVyRW0sZj17dmVyc2lvbjpiLnZlcnNpb24sZnVsbE5hbWU6Yi5mdWxsTmFtZSxmYW1pbHlOYW1lOmIuZmFtaWx5TmFtZSx3ZWlnaHQ6Yi53ZWlnaHROYW1lLGZvbnRCQm94OmIuZm9udEJCb3h8fFswLDAsMCwwXSxmb250TWF0cml4OltlLDAsMCxlLDAsMF0sY2hhcnNldDo5OTksZW5jb2Rpbmc6MCxjaGFyU3RyaW5nczo5OTkscHJpdmF0ZTpbMCw5OTldfSxnPXt9LGg9W10saT0xO2k8YS5sZW5ndGg7aSs9MSljPWEuZ2V0KGkpLGgucHVzaChjLm5hbWUpO3ZhciBqPVtdO2QuaGVhZGVyPUJhKCksZC5uYW1lSW5kZXg9Q2EoW2IucG9zdFNjcmlwdE5hbWVdKTt2YXIgaz1FYShmLGopO2QudG9wRGljdEluZGV4PUZhKGspLGQuZ2xvYmFsU3VickluZGV4PUhhKCksZC5jaGFyc2V0cz1JYShoLGopLGQuY2hhclN0cmluZ3NJbmRleD1LYShhKSxkLnByaXZhdGVEaWN0PUxhKGcsaiksZC5zdHJpbmdJbmRleD1HYShqKTt2YXIgbD1kLmhlYWRlci5zaXplT2YoKStkLm5hbWVJbmRleC5zaXplT2YoKStkLnRvcERpY3RJbmRleC5zaXplT2YoKStkLnN0cmluZ0luZGV4LnNpemVPZigpK2QuZ2xvYmFsU3VickluZGV4LnNpemVPZigpO3JldHVybiBmLmNoYXJzZXQ9bCxmLmVuY29kaW5nPTAsZi5jaGFyU3RyaW5ncz1mLmNoYXJzZXQrZC5jaGFyc2V0cy5zaXplT2YoKSxmLnByaXZhdGVbMV09Zi5jaGFyU3RyaW5ncytkLmNoYXJTdHJpbmdzSW5kZXguc2l6ZU9mKCksaz1FYShmLGopLGQudG9wRGljdEluZGV4PUZhKGspLGR9ZnVuY3Rpb24gTmEoYSxiKXt2YXIgYz17fSxkPW5ldyBMZS5QYXJzZXIoYSxiKTtyZXR1cm4gYy52ZXJzaW9uPWQucGFyc2VWZXJzaW9uKCksYy5mb250UmV2aXNpb249TWF0aC5yb3VuZCgxZTMqZC5wYXJzZUZpeGVkKCkpLzFlMyxjLmNoZWNrU3VtQWRqdXN0bWVudD1kLnBhcnNlVUxvbmcoKSxjLm1hZ2ljTnVtYmVyPWQucGFyc2VVTG9uZygpLHhlLmFyZ3VtZW50KDE1OTQ4MzQxNjU9PT1jLm1hZ2ljTnVtYmVyLFwiRm9udCBoZWFkZXIgaGFzIHdyb25nIG1hZ2ljIG51bWJlci5cIiksYy5mbGFncz1kLnBhcnNlVVNob3J0KCksYy51bml0c1BlckVtPWQucGFyc2VVU2hvcnQoKSxjLmNyZWF0ZWQ9ZC5wYXJzZUxvbmdEYXRlVGltZSgpLGMubW9kaWZpZWQ9ZC5wYXJzZUxvbmdEYXRlVGltZSgpLGMueE1pbj1kLnBhcnNlU2hvcnQoKSxjLnlNaW49ZC5wYXJzZVNob3J0KCksYy54TWF4PWQucGFyc2VTaG9ydCgpLGMueU1heD1kLnBhcnNlU2hvcnQoKSxjLm1hY1N0eWxlPWQucGFyc2VVU2hvcnQoKSxjLmxvd2VzdFJlY1BQRU09ZC5wYXJzZVVTaG9ydCgpLGMuZm9udERpcmVjdGlvbkhpbnQ9ZC5wYXJzZVNob3J0KCksYy5pbmRleFRvTG9jRm9ybWF0PWQucGFyc2VTaG9ydCgpLGMuZ2x5cGhEYXRhRm9ybWF0PWQucGFyc2VTaG9ydCgpLGN9ZnVuY3Rpb24gT2EoYSl7dmFyIGI9TWF0aC5yb3VuZCgobmV3IERhdGUpLmdldFRpbWUoKS8xZTMpKzIwODI4NDQ4MDAsYz1iO3JldHVybiBhLmNyZWF0ZWRUaW1lc3RhbXAmJihjPWEuY3JlYXRlZFRpbWVzdGFtcCsyMDgyODQ0ODAwKSxuZXcgSWUuVGFibGUoXCJoZWFkXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjY1NTM2fSx7bmFtZTpcImZvbnRSZXZpc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjY1NTM2fSx7bmFtZTpcImNoZWNrU3VtQWRqdXN0bWVudFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWFnaWNOdW1iZXJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZToxNTk0ODM0MTY1fSx7bmFtZTpcImZsYWdzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidW5pdHNQZXJFbVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxZTN9LHtuYW1lOlwiY3JlYXRlZFwiLHR5cGU6XCJMT05HREFURVRJTUVcIix2YWx1ZTpjfSx7bmFtZTpcIm1vZGlmaWVkXCIsdHlwZTpcIkxPTkdEQVRFVElNRVwiLHZhbHVlOmJ9LHtuYW1lOlwieE1pblwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieU1pblwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieE1heFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieU1heFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibWFjU3R5bGVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJsb3dlc3RSZWNQUEVNXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZm9udERpcmVjdGlvbkhpbnRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZToyfSx7bmFtZTpcImluZGV4VG9Mb2NGb3JtYXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImdseXBoRGF0YUZvcm1hdFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9XSxhKX1mdW5jdGlvbiBQYShhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3JldHVybiBjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLmFzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMuZGVzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMubGluZUdhcD1kLnBhcnNlU2hvcnQoKSxjLmFkdmFuY2VXaWR0aE1heD1kLnBhcnNlVVNob3J0KCksYy5taW5MZWZ0U2lkZUJlYXJpbmc9ZC5wYXJzZVNob3J0KCksYy5taW5SaWdodFNpZGVCZWFyaW5nPWQucGFyc2VTaG9ydCgpLGMueE1heEV4dGVudD1kLnBhcnNlU2hvcnQoKSxjLmNhcmV0U2xvcGVSaXNlPWQucGFyc2VTaG9ydCgpLGMuY2FyZXRTbG9wZVJ1bj1kLnBhcnNlU2hvcnQoKSxjLmNhcmV0T2Zmc2V0PWQucGFyc2VTaG9ydCgpLGQucmVsYXRpdmVPZmZzZXQrPTgsYy5tZXRyaWNEYXRhRm9ybWF0PWQucGFyc2VTaG9ydCgpLGMubnVtYmVyT2ZITWV0cmljcz1kLnBhcnNlVVNob3J0KCksY31mdW5jdGlvbiBRYShhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiaGhlYVwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiRklYRURcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJhc2NlbmRlclwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwiZGVzY2VuZGVyXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJsaW5lR2FwXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJhZHZhbmNlV2lkdGhNYXhcIix0eXBlOlwiVUZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJtaW5MZWZ0U2lkZUJlYXJpbmdcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcIm1pblJpZ2h0U2lkZUJlYXJpbmdcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcInhNYXhFeHRlbnRcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImNhcmV0U2xvcGVSaXNlXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJjYXJldFNsb3BlUnVuXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJjYXJldE9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVzZXJ2ZWQxXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXNlcnZlZDJcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlc2VydmVkM1wiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVzZXJ2ZWQ0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJtZXRyaWNEYXRhRm9ybWF0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJudW1iZXJPZkhNZXRyaWNzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSxhKX1mdW5jdGlvbiBSYShhLGIsYyxkLGUpe2Zvcih2YXIgZixnLGg9bmV3IExlLlBhcnNlcihhLGIpLGk9MDtpPGQ7aSs9MSl7aTxjJiYoZj1oLnBhcnNlVVNob3J0KCksZz1oLnBhcnNlU2hvcnQoKSk7dmFyIGo9ZS5nZXQoaSk7ai5hZHZhbmNlV2lkdGg9ZixqLmxlZnRTaWRlQmVhcmluZz1nfX1mdW5jdGlvbiBTYShhKXtmb3IodmFyIGI9bmV3IEllLlRhYmxlKFwiaG10eFwiLFtdKSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hLmdldChjKSxlPWQuYWR2YW5jZVdpZHRofHwwLGY9ZC5sZWZ0U2lkZUJlYXJpbmd8fDA7Yi5maWVsZHMucHVzaCh7bmFtZTpcImFkdmFuY2VXaWR0aF9cIitjLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTplfSksYi5maWVsZHMucHVzaCh7bmFtZTpcImxlZnRTaWRlQmVhcmluZ19cIitjLHR5cGU6XCJTSE9SVFwiLHZhbHVlOmZ9KX1yZXR1cm4gYn1mdW5jdGlvbiBUYShhKXtmb3IodmFyIGI9bmV3IEllLlRhYmxlKFwibHRhZ1wiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZToxfSx7bmFtZTpcImZsYWdzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJudW1UYWdzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6YS5sZW5ndGh9XSksYz1cIlwiLGQ9MTIrNCphLmxlbmd0aCxlPTA7ZTxhLmxlbmd0aDsrK2Upe3ZhciBmPWMuaW5kZXhPZihhW2VdKTtmPDAmJihmPWMubGVuZ3RoLGMrPWFbZV0pLGIuZmllbGRzLnB1c2goe25hbWU6XCJvZmZzZXQgXCIrZSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZCtmfSksYi5maWVsZHMucHVzaCh7bmFtZTpcImxlbmd0aCBcIitlLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphW2VdLmxlbmd0aH0pfXJldHVybiBiLmZpZWxkcy5wdXNoKHtuYW1lOlwic3RyaW5nUG9vbFwiLHR5cGU6XCJDSEFSQVJSQVlcIix2YWx1ZTpjfSksYn1mdW5jdGlvbiBVYShhLGIpe3ZhciBjPW5ldyBMZS5QYXJzZXIoYSxiKSxkPWMucGFyc2VVTG9uZygpO3hlLmFyZ3VtZW50KDE9PT1kLFwiVW5zdXBwb3J0ZWQgbHRhZyB0YWJsZSB2ZXJzaW9uLlwiKSxjLnNraXAoXCJ1TG9uZ1wiLDEpO2Zvcih2YXIgZT1jLnBhcnNlVUxvbmcoKSxmPVtdLGc9MDtnPGU7ZysrKXtmb3IodmFyIGg9XCJcIixpPWIrYy5wYXJzZVVTaG9ydCgpLGo9Yy5wYXJzZVVTaG9ydCgpLGs9aTtrPGkrajsrK2spaCs9U3RyaW5nLmZyb21DaGFyQ29kZShhLmdldEludDgoaykpO2YucHVzaChoKX1yZXR1cm4gZn1mdW5jdGlvbiBWYShhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3JldHVybiBjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLm51bUdseXBocz1kLnBhcnNlVVNob3J0KCksMT09PWMudmVyc2lvbiYmKGMubWF4UG9pbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbnRvdXJzPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbXBvc2l0ZVBvaW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb21wb3NpdGVDb250b3Vycz1kLnBhcnNlVVNob3J0KCksYy5tYXhab25lcz1kLnBhcnNlVVNob3J0KCksYy5tYXhUd2lsaWdodFBvaW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhTdG9yYWdlPWQucGFyc2VVU2hvcnQoKSxjLm1heEZ1bmN0aW9uRGVmcz1kLnBhcnNlVVNob3J0KCksYy5tYXhJbnN0cnVjdGlvbkRlZnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4U3RhY2tFbGVtZW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhTaXplT2ZJbnN0cnVjdGlvbnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29tcG9uZW50RWxlbWVudHM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29tcG9uZW50RGVwdGg9ZC5wYXJzZVVTaG9ydCgpKSxjfWZ1bmN0aW9uIFdhKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJtYXhwXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjIwNDgwfSx7bmFtZTpcIm51bUdseXBoc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphfV0pfWZ1bmN0aW9uIFhhKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSAwOmlmKDY1NTM1PT09YilyZXR1cm5cInVuZFwiO2lmKGMpcmV0dXJuIGNbYl07YnJlYWs7Y2FzZSAxOnJldHVybiBhZltiXTtjYXNlIDM6cmV0dXJuIGNmW2JdfX1mdW5jdGlvbiBZYShhLGIsYyl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gZGY7Y2FzZSAxOnJldHVybiBmZltjXXx8ZWZbYl07Y2FzZSAzOmlmKDE9PT1ifHwxMD09PWIpcmV0dXJuIGRmfX1mdW5jdGlvbiBaYShhLGIsYyl7Zm9yKHZhciBkPXt9LGU9bmV3IExlLlBhcnNlcihhLGIpLGY9ZS5wYXJzZVVTaG9ydCgpLGc9ZS5wYXJzZVVTaG9ydCgpLGg9ZS5vZmZzZXQrZS5wYXJzZVVTaG9ydCgpLGk9MDtpPGc7aSsrKXt2YXIgaj1lLnBhcnNlVVNob3J0KCksaz1lLnBhcnNlVVNob3J0KCksbD1lLnBhcnNlVVNob3J0KCksbT1lLnBhcnNlVVNob3J0KCksbj1fZVttXXx8bSxvPWUucGFyc2VVU2hvcnQoKSxwPWUucGFyc2VVU2hvcnQoKSxxPVhhKGosbCxjKSxyPVlhKGosayxsKTtpZih2b2lkIDAhPT1yJiZ2b2lkIDAhPT1xKXt2YXIgcz12b2lkIDA7aWYocz1yPT09ZGY/QWUuVVRGMTYoYSxoK3Asbyk6QWUuTUFDU1RSSU5HKGEsaCtwLG8scikpe3ZhciB0PWRbbl07dm9pZCAwPT09dCYmKHQ9ZFtuXT17fSksdFtxXT1zfX19cmV0dXJuIDE9PT1mJiZlLnBhcnNlVVNob3J0KCksZH1mdW5jdGlvbiAkYShhKXt2YXIgYj17fTtmb3IodmFyIGMgaW4gYSliW2FbY11dPXBhcnNlSW50KGMpO3JldHVybiBifWZ1bmN0aW9uIF9hKGEsYixjLGQsZSxmKXtyZXR1cm4gbmV3IEllLlJlY29yZChcIk5hbWVSZWNvcmRcIixbe25hbWU6XCJwbGF0Zm9ybUlEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmF9LHtuYW1lOlwiZW5jb2RpbmdJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpifSx7bmFtZTpcImxhbmd1YWdlSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Y30se25hbWU6XCJuYW1lSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZH0se25hbWU6XCJsZW5ndGhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZX0se25hbWU6XCJvZmZzZXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Zn1dKX1mdW5jdGlvbiBhYihhLGIpe3ZhciBjPWEubGVuZ3RoLGQ9Yi5sZW5ndGgtYysxO2E6Zm9yKHZhciBlPTA7ZTxkO2UrKylmb3IoO2U8ZDtlKyspe2Zvcih2YXIgZj0wO2Y8YztmKyspaWYoYltlK2ZdIT09YVtmXSljb250aW51ZSBhO3JldHVybiBlfXJldHVybi0xfWZ1bmN0aW9uIGJiKGEsYil7dmFyIGM9YWIoYSxiKTtpZihjPDApe2M9Yi5sZW5ndGg7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aDtkPGU7KytkKWIucHVzaChhW2RdKX1yZXR1cm4gY31mdW5jdGlvbiBjYihhLGIpe3ZhciBjLGQ9W10sZT17fSxmPSRhKF9lKTtmb3IodmFyIGcgaW4gYSl7dmFyIGg9ZltnXTtpZih2b2lkIDA9PT1oJiYoaD1nKSxjPXBhcnNlSW50KGgpLGlzTmFOKGMpKXRocm93IG5ldyBFcnJvcignTmFtZSB0YWJsZSBlbnRyeSBcIicrZysnXCIgZG9lcyBub3QgZXhpc3QsIHNlZSBuYW1lVGFibGVOYW1lcyBmb3IgY29tcGxldGUgbGlzdC4nKTtlW2NdPWFbZ10sZC5wdXNoKGMpfWZvcih2YXIgaT0kYShhZiksaj0kYShjZiksaz1bXSxsPVtdLG09MDttPGQubGVuZ3RoO20rKyl7Yz1kW21dO3ZhciBuPWVbY107Zm9yKHZhciBvIGluIG4pe3ZhciBwPW5bb10scT0xLHI9aVtvXSxzPWJmW3JdLHQ9WWEocSxzLHIpLHU9QmUuTUFDU1RSSU5HKHAsdCk7dm9pZCAwPT09dSYmKHE9MCxyPWIuaW5kZXhPZihvKSxyPDAmJihyPWIubGVuZ3RoLGIucHVzaChvKSkscz00LHU9QmUuVVRGMTYocCkpO3ZhciB2PWJiKHUsbCk7ay5wdXNoKF9hKHEscyxyLGMsdS5sZW5ndGgsdikpO3ZhciB3PWpbb107aWYodm9pZCAwIT09dyl7dmFyIHg9QmUuVVRGMTYocCkseT1iYih4LGwpO2sucHVzaChfYSgzLDEsdyxjLHgubGVuZ3RoLHkpKX19fWsuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnBsYXRmb3JtSUQtYi5wbGF0Zm9ybUlEfHxhLmVuY29kaW5nSUQtYi5lbmNvZGluZ0lEfHxhLmxhbmd1YWdlSUQtYi5sYW5ndWFnZUlEfHxhLm5hbWVJRC1iLm5hbWVJRH0pO2Zvcih2YXIgej1uZXcgSWUuVGFibGUoXCJuYW1lXCIsW3tuYW1lOlwiZm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiY291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ay5sZW5ndGh9LHtuYW1lOlwic3RyaW5nT2Zmc2V0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjYrMTIqay5sZW5ndGh9XSksQT0wO0E8ay5sZW5ndGg7QSsrKXouZmllbGRzLnB1c2goe25hbWU6XCJyZWNvcmRfXCIrQSx0eXBlOlwiUkVDT1JEXCIsdmFsdWU6a1tBXX0pO3JldHVybiB6LmZpZWxkcy5wdXNoKHtuYW1lOlwic3RyaW5nc1wiLHR5cGU6XCJMSVRFUkFMXCIsdmFsdWU6bH0pLHp9ZnVuY3Rpb24gZGIoYSl7Zm9yKHZhciBiPTA7YjxoZi5sZW5ndGg7Yis9MSl7dmFyIGM9aGZbYl07aWYoYT49Yy5iZWdpbiYmYTxjLmVuZClyZXR1cm4gYn1yZXR1cm4tMX1mdW5jdGlvbiBlYihhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO2MudmVyc2lvbj1kLnBhcnNlVVNob3J0KCksYy54QXZnQ2hhcldpZHRoPWQucGFyc2VTaG9ydCgpLGMudXNXZWlnaHRDbGFzcz1kLnBhcnNlVVNob3J0KCksYy51c1dpZHRoQ2xhc3M9ZC5wYXJzZVVTaG9ydCgpLGMuZnNUeXBlPWQucGFyc2VVU2hvcnQoKSxjLnlTdWJzY3JpcHRYU2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdWJzY3JpcHRZU2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdWJzY3JpcHRYT2Zmc2V0PWQucGFyc2VTaG9ydCgpLGMueVN1YnNjcmlwdFlPZmZzZXQ9ZC5wYXJzZVNob3J0KCksYy55U3VwZXJzY3JpcHRYU2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdXBlcnNjcmlwdFlTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1cGVyc2NyaXB0WE9mZnNldD1kLnBhcnNlU2hvcnQoKSxjLnlTdXBlcnNjcmlwdFlPZmZzZXQ9ZC5wYXJzZVNob3J0KCksYy55U3RyaWtlb3V0U2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdHJpa2VvdXRQb3NpdGlvbj1kLnBhcnNlU2hvcnQoKSxjLnNGYW1pbHlDbGFzcz1kLnBhcnNlU2hvcnQoKSxjLnBhbm9zZT1bXTtmb3IodmFyIGU9MDtlPDEwO2UrKyljLnBhbm9zZVtlXT1kLnBhcnNlQnl0ZSgpO3JldHVybiBjLnVsVW5pY29kZVJhbmdlMT1kLnBhcnNlVUxvbmcoKSxjLnVsVW5pY29kZVJhbmdlMj1kLnBhcnNlVUxvbmcoKSxjLnVsVW5pY29kZVJhbmdlMz1kLnBhcnNlVUxvbmcoKSxjLnVsVW5pY29kZVJhbmdlND1kLnBhcnNlVUxvbmcoKSxjLmFjaFZlbmRJRD1TdHJpbmcuZnJvbUNoYXJDb2RlKGQucGFyc2VCeXRlKCksZC5wYXJzZUJ5dGUoKSxkLnBhcnNlQnl0ZSgpLGQucGFyc2VCeXRlKCkpLGMuZnNTZWxlY3Rpb249ZC5wYXJzZVVTaG9ydCgpLGMudXNGaXJzdENoYXJJbmRleD1kLnBhcnNlVVNob3J0KCksYy51c0xhc3RDaGFySW5kZXg9ZC5wYXJzZVVTaG9ydCgpLGMuc1R5cG9Bc2NlbmRlcj1kLnBhcnNlU2hvcnQoKSxjLnNUeXBvRGVzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMuc1R5cG9MaW5lR2FwPWQucGFyc2VTaG9ydCgpLGMudXNXaW5Bc2NlbnQ9ZC5wYXJzZVVTaG9ydCgpLGMudXNXaW5EZXNjZW50PWQucGFyc2VVU2hvcnQoKSxjLnZlcnNpb24+PTEmJihjLnVsQ29kZVBhZ2VSYW5nZTE9ZC5wYXJzZVVMb25nKCksYy51bENvZGVQYWdlUmFuZ2UyPWQucGFyc2VVTG9uZygpKSxjLnZlcnNpb24+PTImJihjLnN4SGVpZ2h0PWQucGFyc2VTaG9ydCgpLGMuc0NhcEhlaWdodD1kLnBhcnNlU2hvcnQoKSxjLnVzRGVmYXVsdENoYXI9ZC5wYXJzZVVTaG9ydCgpLGMudXNCcmVha0NoYXI9ZC5wYXJzZVVTaG9ydCgpLGMudXNNYXhDb250ZW50PWQucGFyc2VVU2hvcnQoKSksY31mdW5jdGlvbiBmYihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiT1MvMlwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6M30se25hbWU6XCJ4QXZnQ2hhcldpZHRoXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c1dlaWdodENsYXNzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNXaWR0aENsYXNzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZnNUeXBlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieVN1YnNjcmlwdFhTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6NjUwfSx7bmFtZTpcInlTdWJzY3JpcHRZU2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjY5OX0se25hbWU6XCJ5U3Vic2NyaXB0WE9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieVN1YnNjcmlwdFlPZmZzZXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZToxNDB9LHtuYW1lOlwieVN1cGVyc2NyaXB0WFNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo2NTB9LHtuYW1lOlwieVN1cGVyc2NyaXB0WVNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo2OTl9LHtuYW1lOlwieVN1cGVyc2NyaXB0WE9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieVN1cGVyc2NyaXB0WU9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjQ3OX0se25hbWU6XCJ5U3RyaWtlb3V0U2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjQ5fSx7bmFtZTpcInlTdHJpa2VvdXRQb3NpdGlvblwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjI1OH0se25hbWU6XCJzRmFtaWx5Q2xhc3NcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImJGYW1pbHlUeXBlXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJTZXJpZlN0eWxlXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJXZWlnaHRcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlByb3BvcnRpb25cIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYkNvbnRyYXN0XCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJTdHJva2VWYXJpYXRpb25cIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYkFybVN0eWxlXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJMZXR0ZXJmb3JtXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJNaWRsaW5lXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJYSGVpZ2h0XCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcInVsVW5pY29kZVJhbmdlMVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwidWxVbmljb2RlUmFuZ2UyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJ1bFVuaWNvZGVSYW5nZTNcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcInVsVW5pY29kZVJhbmdlNFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwiYWNoVmVuZElEXCIsdHlwZTpcIkNIQVJBUlJBWVwiLHZhbHVlOlwiWFhYWFwifSx7bmFtZTpcImZzU2VsZWN0aW9uXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNGaXJzdENoYXJJbmRleFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzTGFzdENoYXJJbmRleFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNUeXBvQXNjZW5kZXJcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNUeXBvRGVzY2VuZGVyXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzVHlwb0xpbmVHYXBcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzV2luQXNjZW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNXaW5EZXNjZW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidWxDb2RlUGFnZVJhbmdlMVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwidWxDb2RlUGFnZVJhbmdlMlwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwic3hIZWlnaHRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNDYXBIZWlnaHRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzRGVmYXVsdENoYXJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c0JyZWFrQ2hhclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzTWF4Q29udGV4dFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfV0sYSl9ZnVuY3Rpb24gZ2IoYSxiKXt2YXIgYz17fSxkPW5ldyBMZS5QYXJzZXIoYSxiKTtzd2l0Y2goYy52ZXJzaW9uPWQucGFyc2VWZXJzaW9uKCksYy5pdGFsaWNBbmdsZT1kLnBhcnNlRml4ZWQoKSxjLnVuZGVybGluZVBvc2l0aW9uPWQucGFyc2VTaG9ydCgpLGMudW5kZXJsaW5lVGhpY2tuZXNzPWQucGFyc2VTaG9ydCgpLGMuaXNGaXhlZFBpdGNoPWQucGFyc2VVTG9uZygpLGMubWluTWVtVHlwZTQyPWQucGFyc2VVTG9uZygpLGMubWF4TWVtVHlwZTQyPWQucGFyc2VVTG9uZygpLGMubWluTWVtVHlwZTE9ZC5wYXJzZVVMb25nKCksYy5tYXhNZW1UeXBlMT1kLnBhcnNlVUxvbmcoKSxjLnZlcnNpb24pe2Nhc2UgMTpjLm5hbWVzPVFlLnNsaWNlKCk7YnJlYWs7Y2FzZSAyOmMubnVtYmVyT2ZHbHlwaHM9ZC5wYXJzZVVTaG9ydCgpLGMuZ2x5cGhOYW1lSW5kZXg9bmV3IEFycmF5KGMubnVtYmVyT2ZHbHlwaHMpO2Zvcih2YXIgZT0wO2U8Yy5udW1iZXJPZkdseXBocztlKyspYy5nbHlwaE5hbWVJbmRleFtlXT1kLnBhcnNlVVNob3J0KCk7Yy5uYW1lcz1bXTtmb3IodmFyIGY9MDtmPGMubnVtYmVyT2ZHbHlwaHM7ZisrKWlmKGMuZ2x5cGhOYW1lSW5kZXhbZl0+PVFlLmxlbmd0aCl7dmFyIGc9ZC5wYXJzZUNoYXIoKTtjLm5hbWVzLnB1c2goZC5wYXJzZVN0cmluZyhnKSl9YnJlYWs7Y2FzZSAyLjU6Yy5udW1iZXJPZkdseXBocz1kLnBhcnNlVVNob3J0KCksYy5vZmZzZXQ9bmV3IEFycmF5KGMubnVtYmVyT2ZHbHlwaHMpO2Zvcih2YXIgaD0wO2g8Yy5udW1iZXJPZkdseXBocztoKyspYy5vZmZzZXRbaF09ZC5wYXJzZUNoYXIoKX1yZXR1cm4gY31mdW5jdGlvbiBoYigpe3JldHVybiBuZXcgSWUuVGFibGUoXCJwb3N0XCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjE5NjYwOH0se25hbWU6XCJpdGFsaWNBbmdsZVwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjB9LHtuYW1lOlwidW5kZXJsaW5lUG9zaXRpb25cIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcInVuZGVybGluZVRoaWNrbmVzc1wiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwiaXNGaXhlZFBpdGNoXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtaW5NZW1UeXBlNDJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1heE1lbVR5cGU0MlwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWluTWVtVHlwZTFcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1heE1lbVR5cGUxXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH1dKX1mdW5jdGlvbiBpYihhLGIpe2I9Ynx8MDt2YXIgYz1uZXcgUShhLGIpLGQ9Yy5wYXJzZVZlcnNpb24oMSk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1kfHwxLjE9PT1kLFwiVW5zdXBwb3J0ZWQgR1NVQiB0YWJsZSB2ZXJzaW9uLlwiKSwxPT09ZD97dmVyc2lvbjpkLHNjcmlwdHM6Yy5wYXJzZVNjcmlwdExpc3QoKSxmZWF0dXJlczpjLnBhcnNlRmVhdHVyZUxpc3QoKSxsb29rdXBzOmMucGFyc2VMb29rdXBMaXN0KGxmKX06e3ZlcnNpb246ZCxzY3JpcHRzOmMucGFyc2VTY3JpcHRMaXN0KCksZmVhdHVyZXM6Yy5wYXJzZUZlYXR1cmVMaXN0KCksbG9va3VwczpjLnBhcnNlTG9va3VwTGlzdChsZiksdmFyaWF0aW9uczpjLnBhcnNlRmVhdHVyZVZhcmlhdGlvbnNMaXN0KCl9fWZ1bmN0aW9uIGpiKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJHU1VCXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjY1NTM2fSx7bmFtZTpcInNjcmlwdHNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuU2NyaXB0TGlzdChhLnNjcmlwdHMpfSx7bmFtZTpcImZlYXR1cmVzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkZlYXR1cmVMaXN0KGEuZmVhdHVyZXMpfSx7bmFtZTpcImxvb2t1cHNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuTG9va3VwTGlzdChhLmxvb2t1cHMsbmYpfV0pfWZ1bmN0aW9uIGtiKGEsYil7dmFyIGM9bmV3IExlLlBhcnNlcihhLGIpLGQ9Yy5wYXJzZVVMb25nKCk7eGUuYXJndW1lbnQoMT09PWQsXCJVbnN1cHBvcnRlZCBNRVRBIHRhYmxlIHZlcnNpb24uXCIpLGMucGFyc2VVTG9uZygpLGMucGFyc2VVTG9uZygpO2Zvcih2YXIgZT1jLnBhcnNlVUxvbmcoKSxmPXt9LGc9MDtnPGU7ZysrKXt2YXIgaD1jLnBhcnNlVGFnKCksaT1jLnBhcnNlVUxvbmcoKSxqPWMucGFyc2VVTG9uZygpLGs9QWUuVVRGOChhLGIraSxqKTtmW2hdPWt9cmV0dXJuIGZ9ZnVuY3Rpb24gbGIoYSl7dmFyIGI9T2JqZWN0LmtleXMoYSkubGVuZ3RoLGM9XCJcIixkPTE2KzEyKmIsZT1uZXcgSWUuVGFibGUoXCJtZXRhXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjF9LHtuYW1lOlwiZmxhZ3NcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmR9LHtuYW1lOlwibnVtVGFnc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmJ9XSk7Zm9yKHZhciBmIGluIGEpe3ZhciBnPWMubGVuZ3RoO2MrPWFbZl0sZS5maWVsZHMucHVzaCh7bmFtZTpcInRhZyBcIitmLHR5cGU6XCJUQUdcIix2YWx1ZTpmfSksZS5maWVsZHMucHVzaCh7bmFtZTpcIm9mZnNldCBcIitmLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmQrZ30pLGUuZmllbGRzLnB1c2goe25hbWU6XCJsZW5ndGggXCIrZix0eXBlOlwiVUxPTkdcIix2YWx1ZTphW2ZdLmxlbmd0aH0pfXJldHVybiBlLmZpZWxkcy5wdXNoKHtuYW1lOlwic3RyaW5nUG9vbFwiLHR5cGU6XCJDSEFSQVJSQVlcIix2YWx1ZTpjfSksZX1mdW5jdGlvbiBtYihhKXtyZXR1cm4gTWF0aC5sb2coYSkvTWF0aC5sb2coMil8MH1mdW5jdGlvbiBuYihhKXtmb3IoO2EubGVuZ3RoJTQhPTA7KWEucHVzaCgwKTtmb3IodmFyIGI9MCxjPTA7YzxhLmxlbmd0aDtjKz00KWIrPShhW2NdPDwyNCkrKGFbYysxXTw8MTYpKyhhW2MrMl08PDgpK2FbYyszXTtyZXR1cm4gYiU9TWF0aC5wb3coMiwzMil9ZnVuY3Rpb24gb2IoYSxiLGMsZCl7cmV0dXJuIG5ldyBJZS5SZWNvcmQoXCJUYWJsZSBSZWNvcmRcIixbe25hbWU6XCJ0YWdcIix0eXBlOlwiVEFHXCIsdmFsdWU6dm9pZCAwIT09YT9hOlwiXCJ9LHtuYW1lOlwiY2hlY2tTdW1cIix0eXBlOlwiVUxPTkdcIix2YWx1ZTp2b2lkIDAhPT1iP2I6MH0se25hbWU6XCJvZmZzZXRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTp2b2lkIDAhPT1jP2M6MH0se25hbWU6XCJsZW5ndGhcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTp2b2lkIDAhPT1kP2Q6MH1dKX1mdW5jdGlvbiBwYihhKXt2YXIgYj1uZXcgSWUuVGFibGUoXCJzZm50XCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJUQUdcIix2YWx1ZTpcIk9UVE9cIn0se25hbWU6XCJudW1UYWJsZXNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzZWFyY2hSYW5nZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImVudHJ5U2VsZWN0b3JcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyYW5nZVNoaWZ0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSk7Yi50YWJsZXM9YSxiLm51bVRhYmxlcz1hLmxlbmd0aDt2YXIgYz1NYXRoLnBvdygyLG1iKGIubnVtVGFibGVzKSk7Yi5zZWFyY2hSYW5nZT0xNipjLGIuZW50cnlTZWxlY3Rvcj1tYihjKSxiLnJhbmdlU2hpZnQ9MTYqYi5udW1UYWJsZXMtYi5zZWFyY2hSYW5nZTtmb3IodmFyIGQ9W10sZT1bXSxmPWIuc2l6ZU9mKCkrb2IoKS5zaXplT2YoKSpiLm51bVRhYmxlcztmJTQhPTA7KWYrPTEsZS5wdXNoKHtuYW1lOlwicGFkZGluZ1wiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0pO2Zvcih2YXIgZz0wO2c8YS5sZW5ndGg7Zys9MSl7dmFyIGg9YVtnXTt4ZS5hcmd1bWVudCg0PT09aC50YWJsZU5hbWUubGVuZ3RoLFwiVGFibGUgbmFtZVwiK2gudGFibGVOYW1lK1wiIGlzIGludmFsaWQuXCIpO3ZhciBpPWguc2l6ZU9mKCksaj1vYihoLnRhYmxlTmFtZSxuYihoLmVuY29kZSgpKSxmLGkpO2ZvcihkLnB1c2goe25hbWU6ai50YWcrXCIgVGFibGUgUmVjb3JkXCIsdHlwZTpcIlJFQ09SRFwiLHZhbHVlOmp9KSxlLnB1c2goe25hbWU6aC50YWJsZU5hbWUrXCIgdGFibGVcIix0eXBlOlwiUkVDT1JEXCIsdmFsdWU6aH0pLGYrPWkseGUuYXJndW1lbnQoIWlzTmFOKGYpLFwiU29tZXRoaW5nIHdlbnQgd3JvbmcgY2FsY3VsYXRpbmcgdGhlIG9mZnNldC5cIik7ZiU0IT0wOylmKz0xLGUucHVzaCh7bmFtZTpcInBhZGRpbmdcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudmFsdWUudGFnPmIudmFsdWUudGFnPzE6LTF9KSxiLmZpZWxkcz1iLmZpZWxkcy5jb25jYXQoZCksYi5maWVsZHM9Yi5maWVsZHMuY29uY2F0KGUpLGJ9ZnVuY3Rpb24gcWIoYSxiLGMpe2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCs9MSl7dmFyIGU9YS5jaGFyVG9HbHlwaEluZGV4KGJbZF0pO2lmKGU+MCl7cmV0dXJuIGEuZ2x5cGhzLmdldChlKS5nZXRNZXRyaWNzKCl9fXJldHVybiBjfWZ1bmN0aW9uIHJiKGEpe2Zvcih2YXIgYj0wLGM9MDtjPGEubGVuZ3RoO2MrPTEpYis9YVtjXTtyZXR1cm4gYi9hLmxlbmd0aH1mdW5jdGlvbiBzYihhKXtmb3IodmFyIGIsYz1bXSxkPVtdLGU9W10sZj1bXSxnPVtdLGg9W10saT1bXSxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MDtvPGEuZ2x5cGhzLmxlbmd0aDtvKz0xKXt2YXIgcD1hLmdseXBocy5nZXQobykscT0wfHAudW5pY29kZTtpZihpc05hTihwLmFkdmFuY2VXaWR0aCkpdGhyb3cgbmV3IEVycm9yKFwiR2x5cGggXCIrcC5uYW1lK1wiIChcIitvK1wiKTogYWR2YW5jZVdpZHRoIGlzIG5vdCBhIG51bWJlci5cIik7KGI+cXx8dm9pZCAwPT09YikmJnE+MCYmKGI9cSksajxxJiYoaj1xKTt2YXIgcj1qZi5nZXRVbmljb2RlUmFuZ2UocSk7aWYocjwzMilrfD0xPDxyO2Vsc2UgaWYocjw2NClsfD0xPDxyLTMyO2Vsc2UgaWYocjw5NiltfD0xPDxyLTY0O2Vsc2V7aWYoIShyPDEyMykpdGhyb3cgbmV3IEVycm9yKFwiVW5pY29kZSByYW5nZXMgYml0cyA+IDEyMyBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzYWdlXCIpO258PTE8PHItOTZ9aWYoXCIubm90ZGVmXCIhPT1wLm5hbWUpe3ZhciBzPXAuZ2V0TWV0cmljcygpO2MucHVzaChzLnhNaW4pLGQucHVzaChzLnlNaW4pLGUucHVzaChzLnhNYXgpLGYucHVzaChzLnlNYXgpLGgucHVzaChzLmxlZnRTaWRlQmVhcmluZyksaS5wdXNoKHMucmlnaHRTaWRlQmVhcmluZyksZy5wdXNoKHAuYWR2YW5jZVdpZHRoKX19dmFyIHQ9e3hNaW46TWF0aC5taW4uYXBwbHkobnVsbCxjKSx5TWluOk1hdGgubWluLmFwcGx5KG51bGwsZCkseE1heDpNYXRoLm1heC5hcHBseShudWxsLGUpLHlNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxmKSxhZHZhbmNlV2lkdGhNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxnKSxhZHZhbmNlV2lkdGhBdmc6cmIoZyksbWluTGVmdFNpZGVCZWFyaW5nOk1hdGgubWluLmFwcGx5KG51bGwsaCksbWF4TGVmdFNpZGVCZWFyaW5nOk1hdGgubWF4LmFwcGx5KG51bGwsaCksbWluUmlnaHRTaWRlQmVhcmluZzpNYXRoLm1pbi5hcHBseShudWxsLGkpfTt0LmFzY2VuZGVyPWEuYXNjZW5kZXIsdC5kZXNjZW5kZXI9YS5kZXNjZW5kZXI7dmFyIHU9V2UubWFrZSh7ZmxhZ3M6Myx1bml0c1BlckVtOmEudW5pdHNQZXJFbSx4TWluOnQueE1pbix5TWluOnQueU1pbix4TWF4OnQueE1heCx5TWF4OnQueU1heCxsb3dlc3RSZWNQUEVNOjMsY3JlYXRlZFRpbWVzdGFtcDphLmNyZWF0ZWRUaW1lc3RhbXB9KSx2PVhlLm1ha2Uoe2FzY2VuZGVyOnQuYXNjZW5kZXIsZGVzY2VuZGVyOnQuZGVzY2VuZGVyLGFkdmFuY2VXaWR0aE1heDp0LmFkdmFuY2VXaWR0aE1heCxtaW5MZWZ0U2lkZUJlYXJpbmc6dC5taW5MZWZ0U2lkZUJlYXJpbmcsbWluUmlnaHRTaWRlQmVhcmluZzp0Lm1pblJpZ2h0U2lkZUJlYXJpbmcseE1heEV4dGVudDp0Lm1heExlZnRTaWRlQmVhcmluZysodC54TWF4LXQueE1pbiksbnVtYmVyT2ZITWV0cmljczphLmdseXBocy5sZW5ndGh9KSx3PSRlLm1ha2UoYS5nbHlwaHMubGVuZ3RoKSx4PWpmLm1ha2Uoe3hBdmdDaGFyV2lkdGg6TWF0aC5yb3VuZCh0LmFkdmFuY2VXaWR0aEF2ZyksdXNXZWlnaHRDbGFzczphLnRhYmxlcy5vczIudXNXZWlnaHRDbGFzcyx1c1dpZHRoQ2xhc3M6YS50YWJsZXMub3MyLnVzV2lkdGhDbGFzcyx1c0ZpcnN0Q2hhckluZGV4OmIsdXNMYXN0Q2hhckluZGV4OmosdWxVbmljb2RlUmFuZ2UxOmssdWxVbmljb2RlUmFuZ2UyOmwsdWxVbmljb2RlUmFuZ2UzOm0sdWxVbmljb2RlUmFuZ2U0Om4sZnNTZWxlY3Rpb246YS50YWJsZXMub3MyLmZzU2VsZWN0aW9uLHNUeXBvQXNjZW5kZXI6dC5hc2NlbmRlcixzVHlwb0Rlc2NlbmRlcjp0LmRlc2NlbmRlcixzVHlwb0xpbmVHYXA6MCx1c1dpbkFzY2VudDp0LnlNYXgsdXNXaW5EZXNjZW50Ok1hdGguYWJzKHQueU1pbiksdWxDb2RlUGFnZVJhbmdlMToxLHN4SGVpZ2h0OnFiKGEsXCJ4eXZ3XCIse3lNYXg6TWF0aC5yb3VuZCh0LmFzY2VuZGVyLzIpfSkueU1heCxzQ2FwSGVpZ2h0OnFiKGEsXCJISUtMRUZKTU5UWkJEUFJBR09RU1VWV1hZXCIsdCkueU1heCx1c0RlZmF1bHRDaGFyOmEuaGFzQ2hhcihcIiBcIik/MzI6MCx1c0JyZWFrQ2hhcjphLmhhc0NoYXIoXCIgXCIpPzMyOjB9KSx5PVllLm1ha2UoYS5nbHlwaHMpLHo9TWUubWFrZShhLmdseXBocyksQT1hLmdldEVuZ2xpc2hOYW1lKFwiZm9udEZhbWlseVwiKSxCPWEuZ2V0RW5nbGlzaE5hbWUoXCJmb250U3ViZmFtaWx5XCIpLEM9QStcIiBcIitCLEQ9YS5nZXRFbmdsaXNoTmFtZShcInBvc3RTY3JpcHROYW1lXCIpO0R8fChEPUEucmVwbGFjZSgvXFxzL2csXCJcIikrXCItXCIrQik7dmFyIEU9e307Zm9yKHZhciBGIGluIGEubmFtZXMpRVtGXT1hLm5hbWVzW0ZdO0UudW5pcXVlSUR8fChFLnVuaXF1ZUlEPXtlbjphLmdldEVuZ2xpc2hOYW1lKFwibWFudWZhY3R1cmVyXCIpK1wiOlwiK0N9KSxFLnBvc3RTY3JpcHROYW1lfHwoRS5wb3N0U2NyaXB0TmFtZT17ZW46RH0pLEUucHJlZmVycmVkRmFtaWx5fHwoRS5wcmVmZXJyZWRGYW1pbHk9YS5uYW1lcy5mb250RmFtaWx5KSxFLnByZWZlcnJlZFN1YmZhbWlseXx8KEUucHJlZmVycmVkU3ViZmFtaWx5PWEubmFtZXMuZm9udFN1YmZhbWlseSk7dmFyIEc9W10sSD1nZi5tYWtlKEUsRyksST1HLmxlbmd0aD4wP1plLm1ha2UoRyk6dm9pZCAwLEo9a2YubWFrZSgpLEs9VmUubWFrZShhLmdseXBocyx7dmVyc2lvbjphLmdldEVuZ2xpc2hOYW1lKFwidmVyc2lvblwiKSxmdWxsTmFtZTpDLGZhbWlseU5hbWU6QSx3ZWlnaHROYW1lOkIscG9zdFNjcmlwdE5hbWU6RCx1bml0c1BlckVtOmEudW5pdHNQZXJFbSxmb250QkJveDpbMCx0LnlNaW4sdC5hc2NlbmRlcix0LmFkdmFuY2VXaWR0aE1heF19KSxMPWEubWV0YXMmJk9iamVjdC5rZXlzKGEubWV0YXMpLmxlbmd0aD4wP3BmLm1ha2UoYS5tZXRhcyk6dm9pZCAwLE09W3Usdix3LHgsSCx6LEosSyx5XTtJJiZNLnB1c2goSSksYS50YWJsZXMuZ3N1YiYmTS5wdXNoKG9mLm1ha2UoYS50YWJsZXMuZ3N1YikpLEwmJk0ucHVzaChMKTtmb3IodmFyIE49cGIoTSksTz1OLmVuY29kZSgpLFA9bmIoTyksUT1OLmZpZWxkcyxSPSExLFM9MDtTPFEubGVuZ3RoO1MrPTEpaWYoXCJoZWFkIHRhYmxlXCI9PT1RW1NdLm5hbWUpe1FbU10udmFsdWUuY2hlY2tTdW1BZGp1c3RtZW50PTI5ODExNDY1NTQtUCxSPSEwO2JyZWFrfWlmKCFSKXRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIGhlYWQgdGFibGUgd2l0aCBjaGVja1N1bSB0byBhZGp1c3QuXCIpO3JldHVybiBOfWZ1bmN0aW9uIHRiKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aC0xO2M8PWQ7KXt2YXIgZT1jK2Q+Pj4xLGY9YVtlXS50YWc7aWYoZj09PWIpcmV0dXJuIGU7ZjxiP2M9ZSsxOmQ9ZS0xfXJldHVybi1jLTF9ZnVuY3Rpb24gdWIoYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoLTE7Yzw9ZDspe3ZhciBlPWMrZD4+PjEsZj1hW2VdO2lmKGY9PT1iKXJldHVybiBlO2Y8Yj9jPWUrMTpkPWUtMX1yZXR1cm4tYy0xfWZ1bmN0aW9uIHZiKGEsYil7Zm9yKHZhciBjLGQ9MCxlPWEubGVuZ3RoLTE7ZDw9ZTspe3ZhciBmPWQrZT4+PjE7Yz1hW2ZdO3ZhciBnPWMuc3RhcnQ7aWYoZz09PWIpcmV0dXJuIGM7ZzxiP2Q9ZisxOmU9Zi0xfWlmKGQ+MClyZXR1cm4gYz1hW2QtMV0sYj5jLmVuZD8wOmN9ZnVuY3Rpb24gd2IoYSxiKXt0aGlzLmZvbnQ9YSx0aGlzLnRhYmxlTmFtZT1ifWZ1bmN0aW9uIHhiKGEpe3diLmNhbGwodGhpcyxhLFwiZ3Bvc1wiKX1mdW5jdGlvbiB5YihhKXt3Yi5jYWxsKHRoaXMsYSxcImdzdWJcIil9ZnVuY3Rpb24gemIoYSxiKXt2YXIgYz1hLmxlbmd0aDtpZihjIT09Yi5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBkPTA7ZDxjO2QrKylpZihhW2RdIT09YltkXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBBYihhLGIsYyl7Zm9yKHZhciBkPWEuc3VidGFibGVzLGU9MDtlPGQubGVuZ3RoO2UrKyl7dmFyIGY9ZFtlXTtpZihmLnN1YnN0Rm9ybWF0PT09YilyZXR1cm4gZn1pZihjKXJldHVybiBkLnB1c2goYyksY31mdW5jdGlvbiBCYigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3d9ZnVuY3Rpb24gQ2IoYSl7Zm9yKHZhciBiPW5ldyBBcnJheUJ1ZmZlcihhLmxlbmd0aCksYz1uZXcgVWludDhBcnJheShiKSxkPTA7ZDxhLmxlbmd0aDsrK2QpY1tkXT1hW2RdO3JldHVybiBifWZ1bmN0aW9uIERiKGEpe2Zvcih2YXIgYj1uZXcgZShhLmJ5dGVMZW5ndGgpLGM9bmV3IFVpbnQ4QXJyYXkoYSksZD0wO2Q8Yi5sZW5ndGg7KytkKWJbZF09Y1tkXTtyZXR1cm4gYn1mdW5jdGlvbiBFYihhLGIpe2lmKCFhKXRocm93IGJ9ZnVuY3Rpb24gRmIoYSxiLGMsZCxlKXt2YXIgZjtyZXR1cm4oYiZkKT4wPyhmPWEucGFyc2VCeXRlKCksMD09KGImZSkmJihmPS1mKSxmPWMrZik6Zj0oYiZlKT4wP2M6YythLnBhcnNlU2hvcnQoKSxmfWZ1bmN0aW9uIEdiKGEsYixjKXt2YXIgZD1uZXcgTGUuUGFyc2VyKGIsYyk7YS5udW1iZXJPZkNvbnRvdXJzPWQucGFyc2VTaG9ydCgpLGEuX3hNaW49ZC5wYXJzZVNob3J0KCksYS5feU1pbj1kLnBhcnNlU2hvcnQoKSxhLl94TWF4PWQucGFyc2VTaG9ydCgpLGEuX3lNYXg9ZC5wYXJzZVNob3J0KCk7dmFyIGUsZjtpZihhLm51bWJlck9mQ29udG91cnM+MCl7Zm9yKHZhciBnPWEuZW5kUG9pbnRJbmRpY2VzPVtdLGg9MDtoPGEubnVtYmVyT2ZDb250b3VycztoKz0xKWcucHVzaChkLnBhcnNlVVNob3J0KCkpO2EuaW5zdHJ1Y3Rpb25MZW5ndGg9ZC5wYXJzZVVTaG9ydCgpLGEuaW5zdHJ1Y3Rpb25zPVtdO2Zvcih2YXIgaT0wO2k8YS5pbnN0cnVjdGlvbkxlbmd0aDtpKz0xKWEuaW5zdHJ1Y3Rpb25zLnB1c2goZC5wYXJzZUJ5dGUoKSk7dmFyIGo9Z1tnLmxlbmd0aC0xXSsxO2U9W107Zm9yKHZhciBrPTA7azxqO2srPTEpaWYoZj1kLnBhcnNlQnl0ZSgpLGUucHVzaChmKSwoOCZmKT4wKWZvcih2YXIgbD1kLnBhcnNlQnl0ZSgpLG09MDttPGw7bSs9MSllLnB1c2goZiksays9MTtpZih4ZS5hcmd1bWVudChlLmxlbmd0aD09PWosXCJCYWQgZmxhZ3MuXCIpLGcubGVuZ3RoPjApe3ZhciBuLG89W107aWYoaj4wKXtmb3IodmFyIHA9MDtwPGo7cCs9MSlmPWVbcF0sbj17fSxuLm9uQ3VydmU9ISEoMSZmKSxuLmxhc3RQb2ludE9mQ29udG91cj1nLmluZGV4T2YocCk+PTAsby5wdXNoKG4pO2Zvcih2YXIgcT0wLHI9MDtyPGo7cis9MSlmPWVbcl0sbj1vW3JdLG4ueD1GYihkLGYscSwyLDE2KSxxPW4ueDtmb3IodmFyIHM9MCx0PTA7dDxqO3QrPTEpZj1lW3RdLG49b1t0XSxuLnk9RmIoZCxmLHMsNCwzMikscz1uLnl9YS5wb2ludHM9b31lbHNlIGEucG9pbnRzPVtdfWVsc2UgaWYoMD09PWEubnVtYmVyT2ZDb250b3VycylhLnBvaW50cz1bXTtlbHNle2EuaXNDb21wb3NpdGU9ITAsYS5wb2ludHM9W10sYS5jb21wb25lbnRzPVtdO2Zvcih2YXIgdT0hMDt1Oyl7ZT1kLnBhcnNlVVNob3J0KCk7dmFyIHY9e2dseXBoSW5kZXg6ZC5wYXJzZVVTaG9ydCgpLHhTY2FsZToxLHNjYWxlMDE6MCxzY2FsZTEwOjAseVNjYWxlOjEsZHg6MCxkeTowfTsoMSZlKT4wPygyJmUpPjA/KHYuZHg9ZC5wYXJzZVNob3J0KCksdi5keT1kLnBhcnNlU2hvcnQoKSk6di5tYXRjaGVkUG9pbnRzPVtkLnBhcnNlVVNob3J0KCksZC5wYXJzZVVTaG9ydCgpXTooMiZlKT4wPyh2LmR4PWQucGFyc2VDaGFyKCksdi5keT1kLnBhcnNlQ2hhcigpKTp2Lm1hdGNoZWRQb2ludHM9W2QucGFyc2VCeXRlKCksZC5wYXJzZUJ5dGUoKV0sKDgmZSk+MD92LnhTY2FsZT12LnlTY2FsZT1kLnBhcnNlRjJEb3QxNCgpOig2NCZlKT4wPyh2LnhTY2FsZT1kLnBhcnNlRjJEb3QxNCgpLHYueVNjYWxlPWQucGFyc2VGMkRvdDE0KCkpOigxMjgmZSk+MCYmKHYueFNjYWxlPWQucGFyc2VGMkRvdDE0KCksdi5zY2FsZTAxPWQucGFyc2VGMkRvdDE0KCksdi5zY2FsZTEwPWQucGFyc2VGMkRvdDE0KCksdi55U2NhbGU9ZC5wYXJzZUYyRG90MTQoKSksYS5jb21wb25lbnRzLnB1c2godiksdT0hISgzMiZlKX1pZigyNTYmZSl7YS5pbnN0cnVjdGlvbkxlbmd0aD1kLnBhcnNlVVNob3J0KCksYS5pbnN0cnVjdGlvbnM9W107Zm9yKHZhciB3PTA7dzxhLmluc3RydWN0aW9uTGVuZ3RoO3crPTEpYS5pbnN0cnVjdGlvbnMucHVzaChkLnBhcnNlQnl0ZSgpKX19fWZ1bmN0aW9uIEhiKGEsYil7Zm9yKHZhciBjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF0sZj17eDpiLnhTY2FsZSplLngrYi5zY2FsZTAxKmUueStiLmR4LHk6Yi5zY2FsZTEwKmUueCtiLnlTY2FsZSplLnkrYi5keSxvbkN1cnZlOmUub25DdXJ2ZSxsYXN0UG9pbnRPZkNvbnRvdXI6ZS5sYXN0UG9pbnRPZkNvbnRvdXJ9O2MucHVzaChmKX1yZXR1cm4gY31mdW5jdGlvbiBJYihhKXtmb3IodmFyIGI9W10sYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdO2MucHVzaChlKSxlLmxhc3RQb2ludE9mQ29udG91ciYmKGIucHVzaChjKSxjPVtdKX1yZXR1cm4geGUuYXJndW1lbnQoMD09PWMubGVuZ3RoLFwiVGhlcmUgYXJlIHN0aWxsIHBvaW50cyBsZWZ0IGluIHRoZSBjdXJyZW50IGNvbnRvdXIuXCIpLGJ9ZnVuY3Rpb24gSmIoYSl7dmFyIGI9bmV3IHI7aWYoIWEpcmV0dXJuIGI7Zm9yKHZhciBjPUliKGEpLGQ9MDtkPGMubGVuZ3RoOysrZCl7dmFyIGU9Y1tkXSxmPW51bGwsZz1lW2UubGVuZ3RoLTFdLGg9ZVswXTtpZihnLm9uQ3VydmUpYi5tb3ZlVG8oZy54LGcueSk7ZWxzZSBpZihoLm9uQ3VydmUpYi5tb3ZlVG8oaC54LGgueSk7ZWxzZXt2YXIgaT17eDouNSooZy54K2gueCkseTouNSooZy55K2gueSl9O2IubW92ZVRvKGkueCxpLnkpfWZvcih2YXIgaj0wO2o8ZS5sZW5ndGg7KytqKWlmKGY9ZyxnPWgsaD1lWyhqKzEpJWUubGVuZ3RoXSxnLm9uQ3VydmUpYi5saW5lVG8oZy54LGcueSk7ZWxzZXt2YXIgaz1oO2Yub25DdXJ2ZXx8e3g6LjUqKGcueCtmLngpLHk6LjUqKGcueStmLnkpfSxoLm9uQ3VydmV8fChrPXt4Oi41KihnLngraC54KSx5Oi41KihnLnkraC55KX0pLGIucXVhZHJhdGljQ3VydmVUbyhnLngsZy55LGsueCxrLnkpfWIuY2xvc2VQYXRoKCl9cmV0dXJuIGJ9ZnVuY3Rpb24gS2IoYSxiKXtpZihiLmlzQ29tcG9zaXRlKWZvcih2YXIgYz0wO2M8Yi5jb21wb25lbnRzLmxlbmd0aDtjKz0xKXt2YXIgZD1iLmNvbXBvbmVudHNbY10sZT1hLmdldChkLmdseXBoSW5kZXgpO2lmKGUuZ2V0UGF0aCgpLGUucG9pbnRzKXt2YXIgZj12b2lkIDA7aWYodm9pZCAwPT09ZC5tYXRjaGVkUG9pbnRzKWY9SGIoZS5wb2ludHMsZCk7ZWxzZXtcbmlmKGQubWF0Y2hlZFBvaW50c1swXT5iLnBvaW50cy5sZW5ndGgtMXx8ZC5tYXRjaGVkUG9pbnRzWzFdPmUucG9pbnRzLmxlbmd0aC0xKXRocm93IEVycm9yKFwiTWF0Y2hlZCBwb2ludHMgb3V0IG9mIHJhbmdlIGluIFwiK2IubmFtZSk7dmFyIGc9Yi5wb2ludHNbZC5tYXRjaGVkUG9pbnRzWzBdXSxoPWUucG9pbnRzW2QubWF0Y2hlZFBvaW50c1sxXV0saT17eFNjYWxlOmQueFNjYWxlLHNjYWxlMDE6ZC5zY2FsZTAxLHNjYWxlMTA6ZC5zY2FsZTEwLHlTY2FsZTpkLnlTY2FsZSxkeDowLGR5OjB9O2g9SGIoW2hdLGkpWzBdLGkuZHg9Zy54LWgueCxpLmR5PWcueS1oLnksZj1IYihlLnBvaW50cyxpKX1iLnBvaW50cz1iLnBvaW50cy5jb25jYXQoZil9fXJldHVybiBKYihiLnBvaW50cyl9ZnVuY3Rpb24gTGIoYSxiLGMsZCl7Zm9yKHZhciBlPW5ldyBTZS5HbHlwaFNldChkKSxmPTA7ZjxjLmxlbmd0aC0xO2YrPTEpe3ZhciBnPWNbZl07ZyE9PWNbZisxXT9lLnB1c2goZixTZS50dGZHbHlwaExvYWRlcihkLGYsR2IsYSxiK2csS2IpKTplLnB1c2goZixTZS5nbHlwaExvYWRlcihkLGYpKX1yZXR1cm4gZX1mdW5jdGlvbiBNYihhKXt0aGlzLmZvbnQ9YSx0aGlzLmdldENvbW1hbmRzPWZ1bmN0aW9uKGEpe3JldHVybiB2Zi5nZXRQYXRoKGEpLmNvbW1hbmRzfSx0aGlzLl9mcGdtU3RhdGU9dGhpcy5fcHJlcFN0YXRlPXZvaWQgMCx0aGlzLl9lcnJvclN0YXRlPTB9ZnVuY3Rpb24gTmIoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gT2IoYSl7cmV0dXJuIE1hdGguc2lnbihhKSpNYXRoLnJvdW5kKE1hdGguYWJzKGEpKX1mdW5jdGlvbiBQYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKk1hdGgucm91bmQoTWF0aC5hYnMoMiphKSkvMn1mdW5jdGlvbiBRYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKihNYXRoLnJvdW5kKE1hdGguYWJzKGEpKy41KS0uNSl9ZnVuY3Rpb24gUmIoYSl7cmV0dXJuIE1hdGguc2lnbihhKSpNYXRoLmNlaWwoTWF0aC5hYnMoYSkpfWZ1bmN0aW9uIFNiKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqTWF0aC5mbG9vcihNYXRoLmFicyhhKSl9ZnVuY3Rpb24gVGIoYSxiKXt0aGlzLng9YSx0aGlzLnk9Yix0aGlzLmF4aXM9dm9pZCAwLHRoaXMuc2xvcGU9Yi9hLHRoaXMubm9ybWFsU2xvcGU9LWEvYixPYmplY3QuZnJlZXplKHRoaXMpfWZ1bmN0aW9uIFViKGEsYil7dmFyIGM9TWF0aC5zcXJ0KGEqYStiKmIpO3JldHVybiBhLz1jLGIvPWMsMT09PWEmJjA9PT1iP3hmOjA9PT1hJiYxPT09Yj95ZjpuZXcgVGIoYSxiKX1mdW5jdGlvbiBWYihhLGIsYyxkKXt0aGlzLng9dGhpcy54bz1NYXRoLnJvdW5kKDY0KmEpLzY0LHRoaXMueT10aGlzLnlvPU1hdGgucm91bmQoNjQqYikvNjQsdGhpcy5sYXN0UG9pbnRPZkNvbnRvdXI9Yyx0aGlzLm9uQ3VydmU9ZCx0aGlzLnByZXZQb2ludE9uQ29udG91cj12b2lkIDAsdGhpcy5uZXh0UG9pbnRPbkNvbnRvdXI9dm9pZCAwLHRoaXMueFRvdWNoZWQ9ITEsdGhpcy55VG91Y2hlZD0hMSxPYmplY3QucHJldmVudEV4dGVuc2lvbnModGhpcyl9ZnVuY3Rpb24gV2IoYSxiKXtzd2l0Y2godGhpcy5lbnY9YSx0aGlzLnN0YWNrPVtdLHRoaXMucHJvZz1iLGEpe2Nhc2VcImdseWZcIjp0aGlzLnpwMD10aGlzLnpwMT10aGlzLnpwMj0xLHRoaXMucnAwPXRoaXMucnAxPXRoaXMucnAyPTA7Y2FzZVwicHJlcFwiOnRoaXMuZnY9dGhpcy5wdj10aGlzLmRwdj14Zix0aGlzLnJvdW5kPU9ifX1mdW5jdGlvbiBYYihhKXtmb3IodmFyIGI9YS50Wm9uZT1uZXcgQXJyYXkoYS5nWm9uZS5sZW5ndGgpLGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdPW5ldyBWYigwLDApfWZ1bmN0aW9uIFliKGEsYil7dmFyIGMsZD1hLnByb2csZT1hLmlwLGY9MTtkb3tpZig4OD09PShjPWRbKytlXSkpZisrO2Vsc2UgaWYoODk9PT1jKWYtLTtlbHNlIGlmKDY0PT09YyllKz1kW2UrMV0rMTtlbHNlIGlmKDY1PT09YyllKz0yKmRbZSsxXSsxO2Vsc2UgaWYoYz49MTc2JiZjPD0xODMpZSs9Yy0xNzYrMTtlbHNlIGlmKGM+PTE4NCYmYzw9MTkxKWUrPTIqKGMtMTg0KzEpO2Vsc2UgaWYoYiYmMT09PWYmJjI3PT09YylicmVha313aGlsZShmPjApO2EuaXA9ZX1mdW5jdGlvbiBaYihiLGMpe2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNWVENBW1wiK2IuYXhpcytcIl1cIiksYy5mdj1jLnB2PWMuZHB2PWJ9ZnVuY3Rpb24gJGIoYixjKXthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTUFZUQ0FbXCIrYi5heGlzK1wiXVwiKSxjLnB2PWMuZHB2PWJ9ZnVuY3Rpb24gX2IoYixjKXthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTRlZUQ0FbXCIrYi5heGlzK1wiXVwiKSxjLmZ2PWJ9ZnVuY3Rpb24gYWMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnoyW2VdLGg9Yy56MVtmXTthLkRFQlVHJiZjb25zb2xlLmxvZyhcIlNQVlRMW1wiK2IrXCJdXCIsZSxmKTt2YXIgaSxqO2I/KGk9Zy55LWgueSxqPWgueC1nLngpOihpPWgueC1nLngsaj1oLnktZy55KSxjLnB2PWMuZHB2PVViKGksail9ZnVuY3Rpb24gYmMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnoyW2VdLGg9Yy56MVtmXTthLkRFQlVHJiZjb25zb2xlLmxvZyhcIlNGVlRMW1wiK2IrXCJdXCIsZSxmKTt2YXIgaSxqO2I/KGk9Zy55LWgueSxqPWgueC1nLngpOihpPWgueC1nLngsaj1oLnktZy55KSxjLmZ2PVViKGksail9ZnVuY3Rpb24gY2MoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNQVkZTW11cIixkLGUpLGIucHY9Yi5kcHY9VWIoZSxkKX1mdW5jdGlvbiBkYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1BWRlNbXVwiLGQsZSksYi5mdj1VYihlLGQpfWZ1bmN0aW9uIGVjKGIpe3ZhciBjPWIuc3RhY2ssZD1iLnB2O2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdQVltdXCIpLGMucHVzaCgxNjM4NCpkLngpLGMucHVzaCgxNjM4NCpkLnkpfWZ1bmN0aW9uIGZjKGIpe3ZhciBjPWIuc3RhY2ssZD1iLmZ2O2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdGVltdXCIpLGMucHVzaCgxNjM4NCpkLngpLGMucHVzaCgxNjM4NCpkLnkpfWZ1bmN0aW9uIGdjKGIpe2IuZnY9Yi5wdixhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTRlZUUFZbXVwiKX1mdW5jdGlvbiBoYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCksZj1jLnBvcCgpLGc9Yy5wb3AoKSxoPWMucG9wKCksaT1iLnowLGo9Yi56MSxrPWlbZF0sbD1pW2VdLG09altmXSxuPWpbZ10sbz1iLnoyW2hdO2EuREVCVUcmJmNvbnNvbGUubG9nKFwiSVNFQ1RbXSwgXCIsZCxlLGYsZyxoKTt2YXIgcD1rLngscT1rLnkscj1sLngscz1sLnksdD1tLngsdT1tLnksdj1uLngsdz1uLnkseD0ocC1yKSoodS13KS0ocS1zKSoodC12KSx5PXAqcy1xKnIsej10KnctdSp2O28ueD0oeSoodC12KS16KihwLXIpKS94LG8ueT0oeSoodS13KS16KihxLXMpKS94fWZ1bmN0aW9uIGljKGIpe2IucnAwPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JQMFtdXCIsYi5ycDApfWZ1bmN0aW9uIGpjKGIpe2IucnAxPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JQMVtdXCIsYi5ycDEpfWZ1bmN0aW9uIGtjKGIpe2IucnAyPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JQMltdXCIsYi5ycDIpfWZ1bmN0aW9uIGxjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUDBbXVwiLGMpLGIuenAwPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejA9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56MD1iLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lIHBvaW50ZXJcIil9fWZ1bmN0aW9uIG1jKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUDFbXVwiLGMpLGIuenAxPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejE9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56MT1iLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lIHBvaW50ZXJcIil9fWZ1bmN0aW9uIG5jKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUDJbXVwiLGMpLGIuenAyPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejI9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56Mj1iLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lIHBvaW50ZXJcIil9fWZ1bmN0aW9uIG9jKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUFNbXVwiLGMpLGIuenAwPWIuenAxPWIuenAyPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejA9Yi56MT1iLnoyPWIudFpvbmU7YnJlYWs7Y2FzZSAxOmIuejA9Yi56MT1iLnoyPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gcGMoYil7Yi5sb29wPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0xPT1BbXVwiLGIubG9vcCl9ZnVuY3Rpb24gcWMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlRHW11cIiksYi5yb3VuZD1PYn1mdW5jdGlvbiByYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSVEhHW11cIiksYi5yb3VuZD1RYn1mdW5jdGlvbiBzYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNNRFtdXCIsYyksYi5taW5EaXM9Yy82NH1mdW5jdGlvbiB0YyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFTFNFW11cIiksWWIoYiwhMSl9ZnVuY3Rpb24gdWMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJKTVBSW11cIixjKSxiLmlwKz1jLTF9ZnVuY3Rpb24gdmMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTQ1ZUQ0lbXVwiLGMpLGIuY3ZDdXRJbj1jLzY0fWZ1bmN0aW9uIHdjKGIpe3ZhciBjPWIuc3RhY2s7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRFVQW11cIiksYy5wdXNoKGNbYy5sZW5ndGgtMV0pfWZ1bmN0aW9uIHhjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlBPUFtdXCIpLGIuc3RhY2sucG9wKCl9ZnVuY3Rpb24geWMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQ0xFQVJbXVwiKSxiLnN0YWNrLmxlbmd0aD0wfWZ1bmN0aW9uIHpjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTV0FQW11cIiksYy5wdXNoKGQpLGMucHVzaChlKX1mdW5jdGlvbiBBYyhiKXt2YXIgYz1iLnN0YWNrO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkRFUFRIW11cIiksYy5wdXNoKGMubGVuZ3RoKX1mdW5jdGlvbiBCYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTE9PUENBTExbXVwiLGQsZSk7dmFyIGY9Yi5pcCxnPWIucHJvZztiLnByb2c9Yi5mdW5jc1tkXTtmb3IodmFyIGg9MDtoPGU7aCsrKXNmKGIpLGEuREVCVUcmJmNvbnNvbGUubG9nKCsrYi5zdGVwLGgrMTxlP1wibmV4dCBsb29wY2FsbFwiOlwiZG9uZSBsb29wY2FsbFwiLGgpO2IuaXA9ZixiLnByb2c9Z31mdW5jdGlvbiBDYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkNBTExbXVwiLGMpO3ZhciBkPWIuaXAsZT1iLnByb2c7Yi5wcm9nPWIuZnVuY3NbY10sc2YoYiksYi5pcD1kLGIucHJvZz1lLGEuREVCVUcmJmNvbnNvbGUubG9nKCsrYi5zdGVwLFwicmV0dXJuaW5nIGZyb21cIixjKX1mdW5jdGlvbiBEYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJDSU5ERVhbXVwiLGQpLGMucHVzaChjW2MubGVuZ3RoLWRdKX1mdW5jdGlvbiBFYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNSU5ERVhbXVwiLGQpLGMucHVzaChjLnNwbGljZShjLmxlbmd0aC1kLDEpWzBdKX1mdW5jdGlvbiBGYyhiKXtpZihcImZwZ21cIiE9PWIuZW52KXRocm93IG5ldyBFcnJvcihcIkZERUYgbm90IGFsbG93ZWQgaGVyZVwiKTt2YXIgYz1iLnN0YWNrLGQ9Yi5wcm9nLGU9Yi5pcCxmPWMucG9wKCksZz1lO2ZvcihhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJGREVGW11cIixmKTs0NSE9PWRbKytlXTspO2IuaXA9ZSxiLmZ1bmNzW2ZdPWQuc2xpY2UoZysxLGUpfWZ1bmN0aW9uIEdjKGIsYyl7dmFyIGQ9Yy5zdGFjay5wb3AoKSxlPWMuejBbZF0sZj1jLmZ2LGc9Yy5wdjthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNREFQW1wiK2IrXCJdXCIsZCk7dmFyIGg9Zy5kaXN0YW5jZShlLHpmKTtiJiYoaD1jLnJvdW5kKGgpKSxmLnNldFJlbGF0aXZlKGUsemYsaCxnKSxmLnRvdWNoKGUpLGMucnAwPWMucnAxPWR9ZnVuY3Rpb24gSGMoYixjKXt2YXIgZCxlLGYsZz1jLnoyLGg9Zy5sZW5ndGgtMjthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJJVVBbXCIrYi5heGlzK1wiXVwiKTtmb3IodmFyIGk9MDtpPGg7aSsrKWQ9Z1tpXSxiLnRvdWNoZWQoZCl8fChlPWQucHJldlRvdWNoZWQoYikpIT09ZCYmKGY9ZC5uZXh0VG91Y2hlZChiKSxlPT09ZiYmYi5zZXRSZWxhdGl2ZShkLGQsYi5kaXN0YW5jZShlLGUsITEsITApLGIsITApLGIuaW50ZXJwb2xhdGUoZCxlLGYsYikpfWZ1bmN0aW9uIEljKGIsYyl7Zm9yKHZhciBkPWMuc3RhY2ssZT1iP2MucnAxOmMucnAyLGY9KGI/Yy56MDpjLnoxKVtlXSxnPWMuZnYsaD1jLnB2LGk9Yy5sb29wLGo9Yy56MjtpLS07KXt2YXIgaz1kLnBvcCgpLGw9altrXSxtPWguZGlzdGFuY2UoZixmLCExLCEwKTtnLnNldFJlbGF0aXZlKGwsbCxtLGgpLGcudG91Y2gobCksYS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLChjLmxvb3A+MT9cImxvb3AgXCIrKGMubG9vcC1pKStcIjogXCI6XCJcIikrXCJTSFBbXCIrKGI/XCJycDFcIjpcInJwMlwiKStcIl1cIixrKX1jLmxvb3A9MX1mdW5jdGlvbiBKYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1iP2MucnAxOmMucnAyLGY9KGI/Yy56MDpjLnoxKVtlXSxnPWMuZnYsaD1jLnB2LGk9ZC5wb3AoKSxqPWMuejJbYy5jb250b3Vyc1tpXV0saz1qO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNIQ1tcIitiK1wiXVwiLGkpO3ZhciBsPWguZGlzdGFuY2UoZixmLCExLCEwKTtkb3trIT09ZiYmZy5zZXRSZWxhdGl2ZShrLGssbCxoKSxrPWsubmV4dFBvaW50T25Db250b3VyfXdoaWxlKGshPT1qKX1mdW5jdGlvbiBLYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1iP2MucnAxOmMucnAyLGY9KGI/Yy56MDpjLnoxKVtlXSxnPWMuZnYsaD1jLnB2LGk9ZC5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTSFpbXCIrYitcIl1cIixpKTt2YXIgajtzd2l0Y2goaSl7Y2FzZSAwOmo9Yy50Wm9uZTticmVhaztjYXNlIDE6aj1jLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lXCIpfWZvcih2YXIgayxsPWguZGlzdGFuY2UoZixmLCExLCEwKSxtPWoubGVuZ3RoLTIsbj0wO248bTtuKyspaz1qW25dLGcuc2V0UmVsYXRpdmUoayxrLGwsaCl9ZnVuY3Rpb24gTGMoYil7Zm9yKHZhciBjPWIuc3RhY2ssZD1iLmxvb3AsZT1iLmZ2LGY9Yy5wb3AoKS82NCxnPWIuejI7ZC0tOyl7dmFyIGg9Yy5wb3AoKSxpPWdbaF07YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLChiLmxvb3A+MT9cImxvb3AgXCIrKGIubG9vcC1kKStcIjogXCI6XCJcIikrXCJTSFBJWFtdXCIsaCxmKSxlLnNldFJlbGF0aXZlKGksaSxmKSxlLnRvdWNoKGkpfWIubG9vcD0xfWZ1bmN0aW9uIE1jKGIpe2Zvcih2YXIgYz1iLnN0YWNrLGQ9Yi5ycDEsZT1iLnJwMixmPWIubG9vcCxnPWIuejBbZF0saD1iLnoxW2VdLGk9Yi5mdixqPWIuZHB2LGs9Yi56MjtmLS07KXt2YXIgbD1jLnBvcCgpLG09a1tsXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsKGIubG9vcD4xP1wibG9vcCBcIisoYi5sb29wLWYpK1wiOiBcIjpcIlwiKStcIklQW11cIixsLGQsXCI8LT5cIixlKSxpLmludGVycG9sYXRlKG0sZyxoLGopLGkudG91Y2gobSl9Yi5sb29wPTF9ZnVuY3Rpb24gTmMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKS82NCxmPWQucG9wKCksZz1jLnoxW2ZdLGg9Yy56MFtjLnJwMF0saT1jLmZ2LGo9Yy5wdjtpLnNldFJlbGF0aXZlKGcsaCxlLGopLGkudG91Y2goZyksYS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiTVNJUlBbXCIrYitcIl1cIixlLGYpLGMucnAxPWMucnAwLGMucnAyPWYsYiYmKGMucnAwPWYpfWZ1bmN0aW9uIE9jKGIpe2Zvcih2YXIgYz1iLnN0YWNrLGQ9Yi5ycDAsZT1iLnowW2RdLGY9Yi5sb29wLGc9Yi5mdixoPWIucHYsaT1iLnoxO2YtLTspe3ZhciBqPWMucG9wKCksaz1pW2pdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCwoYi5sb29wPjE/XCJsb29wIFwiKyhiLmxvb3AtZikrXCI6IFwiOlwiXCIpK1wiQUxJR05SUFtdXCIsaiksZy5zZXRSZWxhdGl2ZShrLGUsMCxoKSxnLnRvdWNoKGspfWIubG9vcD0xfWZ1bmN0aW9uIFBjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJUREdbXVwiKSxiLnJvdW5kPVBifWZ1bmN0aW9uIFFjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MFtmXSxoPWMuZnYsaT1jLnB2LGo9Yy5jdnRbZV07YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiTUlBUFtcIitiK1wiXVwiLGUsXCIoXCIsaixcIilcIixmKTt2YXIgaz1pLmRpc3RhbmNlKGcsemYpO2ImJihNYXRoLmFicyhrLWopPGMuY3ZDdXRJbiYmKGs9aiksaz1jLnJvdW5kKGspKSxoLnNldFJlbGF0aXZlKGcsemYsayxpKSwwPT09Yy56cDAmJihnLnhvPWcueCxnLnlvPWcueSksaC50b3VjaChnKSxjLnJwMD1jLnJwMT1mfWZ1bmN0aW9uIFJjKGIpe3ZhciBjPWIucHJvZyxkPWIuaXAsZT1iLnN0YWNrLGY9Y1srK2RdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5QVVNIQltdXCIsZik7Zm9yKHZhciBnPTA7ZzxmO2crKyllLnB1c2goY1srK2RdKTtiLmlwPWR9ZnVuY3Rpb24gU2MoYil7dmFyIGM9Yi5pcCxkPWIucHJvZyxlPWIuc3RhY2ssZj1kWysrY107YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTlBVU0hXW11cIixmKTtmb3IodmFyIGc9MDtnPGY7ZysrKXt2YXIgaD1kWysrY108PDh8ZFsrK2NdOzMyNzY4JmgmJihoPS0oMSsoNjU1MzVeaCkpKSxlLnB1c2goaCl9Yi5pcD1jfWZ1bmN0aW9uIFRjKGIpe3ZhciBjPWIuc3RhY2ssZD1iLnN0b3JlO2R8fChkPWIuc3RvcmU9W10pO3ZhciBlPWMucG9wKCksZj1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIldTXCIsZSxmKSxkW2ZdPWV9ZnVuY3Rpb24gVWMoYil7dmFyIGM9Yi5zdGFjayxkPWIuc3RvcmUsZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJTXCIsZSk7dmFyIGY9ZCYmZFtlXXx8MDtjLnB1c2goZil9ZnVuY3Rpb24gVmMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIldDVlRQXCIsZCxlKSxiLmN2dFtlXT1kLzY0fWZ1bmN0aW9uIFdjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJDVlRcIixkKSxjLnB1c2goNjQqYi5jdnRbZF0pfWZ1bmN0aW9uIFhjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1jLnoyW2VdO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIkdDW1wiK2IrXCJdXCIsZSksZC5wdXNoKDY0KmMuZHB2LmRpc3RhbmNlKGYsemYsYiwhMSkpfWZ1bmN0aW9uIFljKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MVtlXSxoPWMuejBbZl0saT1jLmRwdi5kaXN0YW5jZShoLGcsYixiKTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNRFtcIitiK1wiXVwiLGUsZixcIi0+XCIsaSksYy5zdGFjay5wdXNoKE1hdGgucm91bmQoNjQqaSkpfWZ1bmN0aW9uIFpjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk1QUEVNW11cIiksYi5zdGFjay5wdXNoKGIucHBlbSl9ZnVuY3Rpb24gJGMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRkxJUE9OW11cIiksYi5hdXRvRmxpcD0hMH1mdW5jdGlvbiBfYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTFRbXVwiLGQsZSksYy5wdXNoKGU8ZD8xOjApfWZ1bmN0aW9uIGFkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJMVEVRW11cIixkLGUpLGMucHVzaChlPD1kPzE6MCl9ZnVuY3Rpb24gYmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdUW11cIixkLGUpLGMucHVzaChlPmQ/MTowKX1mdW5jdGlvbiBjZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR1RFUVtdXCIsZCxlKSxjLnB1c2goZT49ZD8xOjApfWZ1bmN0aW9uIGRkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFUVtdXCIsZCxlKSxjLnB1c2goZD09PWU/MTowKX1mdW5jdGlvbiBlZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTkVRW11cIixkLGUpLGMucHVzaChkIT09ZT8xOjApfWZ1bmN0aW9uIGZkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk9ERFtdXCIsZCksYy5wdXNoKE1hdGgudHJ1bmMoZCklMj8xOjApfWZ1bmN0aW9uIGdkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVWRU5bXVwiLGQpLGMucHVzaChNYXRoLnRydW5jKGQpJTI/MDoxKX1mdW5jdGlvbiBoZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIklGW11cIixjKSxjfHwoWWIoYiwhMCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRUlGW11cIikpfWZ1bmN0aW9uIGlkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVJRltdXCIpfWZ1bmN0aW9uIGpkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJBTkRbXVwiLGQsZSksYy5wdXNoKGQmJmU/MTowKX1mdW5jdGlvbiBrZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiT1JbXVwiLGQsZSksYy5wdXNoKGR8fGU/MTowKX1mdW5jdGlvbiBsZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJOT1RbXVwiLGQpLGMucHVzaChkPzA6MSl9ZnVuY3Rpb24gbWQoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWMuZnYsZz1jLnB2LGg9Yy5wcGVtLGk9Yy5kZWx0YUJhc2UrMTYqKGItMSksaj1jLmRlbHRhU2hpZnQsaz1jLnowO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIkRFTFRBUFtcIitiK1wiXVwiLGUsZCk7Zm9yKHZhciBsPTA7bDxlO2wrKyl7dmFyIG09ZC5wb3AoKSxuPWQucG9wKCk7aWYoaSsoKDI0MCZuKT4+NCk9PT1oKXt2YXIgbz0oMTUmbiktODtvPj0wJiZvKyssYS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFQRklYXCIsbSxcImJ5XCIsbypqKTt2YXIgcD1rW21dO2Yuc2V0UmVsYXRpdmUocCxwLG8qaixnKX19fWZ1bmN0aW9uIG5kKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNEQltdXCIsZCksYi5kZWx0YUJhc2U9ZH1mdW5jdGlvbiBvZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTRFNbXVwiLGQpLGIuZGVsdGFTaGlmdD1NYXRoLnBvdyguNSxkKX1mdW5jdGlvbiBwZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQUREW11cIixkLGUpLGMucHVzaChlK2QpfWZ1bmN0aW9uIHFkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTVUJbXVwiLGQsZSksYy5wdXNoKGUtZCl9ZnVuY3Rpb24gcmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkRJVltdXCIsZCxlKSxjLnB1c2goNjQqZS9kKX1mdW5jdGlvbiBzZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTVVMW11cIixkLGUpLGMucHVzaChlKmQvNjQpfWZ1bmN0aW9uIHRkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkFCU1tdXCIsZCksYy5wdXNoKE1hdGguYWJzKGQpKX1mdW5jdGlvbiB1ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJORUdbXVwiLGQpLGMucHVzaCgtZCl9ZnVuY3Rpb24gdmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRkxPT1JbXVwiLGQpLGMucHVzaCg2NCpNYXRoLmZsb29yKGQvNjQpKX1mdW5jdGlvbiB3ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJDRUlMSU5HW11cIixkKSxjLnB1c2goNjQqTWF0aC5jZWlsKGQvNjQpKX1mdW5jdGlvbiB4ZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlJPVU5EW11cIiksZC5wdXNoKDY0KmMucm91bmQoZS82NCkpfWZ1bmN0aW9uIHlkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJXQ1ZURltdXCIsZCxlKSxiLmN2dFtlXT1kKmIucHBlbS9iLmZvbnQudW5pdHNQZXJFbX1mdW5jdGlvbiB6ZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9Yy5wcGVtLGc9Yy5kZWx0YUJhc2UrMTYqKGItMSksaD1jLmRlbHRhU2hpZnQ7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFDW1wiK2IrXCJdXCIsZSxkKTtmb3IodmFyIGk9MDtpPGU7aSsrKXt2YXIgaj1kLnBvcCgpLGs9ZC5wb3AoKTtpZihnKygoMjQwJmspPj40KT09PWYpe3ZhciBsPSgxNSZrKS04O2w+PTAmJmwrKzt2YXIgbT1sKmg7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFDRklYXCIsaixcImJ5XCIsbSksYy5jdnRbal0rPW19fX1mdW5jdGlvbiBBZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNST1VORFtdXCIsYyksYi5yb3VuZD13Zjt2YXIgZDtzd2l0Y2goMTkyJmMpe2Nhc2UgMDpkPS41O2JyZWFrO2Nhc2UgNjQ6ZD0xO2JyZWFrO2Nhc2UgMTI4OmQ9MjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgU1JPVU5EIHZhbHVlXCIpfXN3aXRjaChiLnNyUGVyaW9kPWQsNDgmYyl7Y2FzZSAwOmIuc3JQaGFzZT0wO2JyZWFrO2Nhc2UgMTY6Yi5zclBoYXNlPS4yNSpkO2JyZWFrO2Nhc2UgMzI6Yi5zclBoYXNlPS41KmQ7YnJlYWs7Y2FzZSA0ODpiLnNyUGhhc2U9Ljc1KmQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFNST1VORCB2YWx1ZVwiKX1jJj0xNSxiLnNyVGhyZXNob2xkPTA9PT1jPzA6KGMvOC0uNSkqZH1mdW5jdGlvbiBCZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlM0NVJPVU5EW11cIixjKSxiLnJvdW5kPXdmO3ZhciBkO3N3aXRjaCgxOTImYyl7Y2FzZSAwOmQ9TWF0aC5zcXJ0KDIpLzI7YnJlYWs7Y2FzZSA2NDpkPU1hdGguc3FydCgyKTticmVhaztjYXNlIDEyODpkPTIqTWF0aC5zcXJ0KDIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBTNDVST1VORCB2YWx1ZVwiKX1zd2l0Y2goYi5zclBlcmlvZD1kLDQ4JmMpe2Nhc2UgMDpiLnNyUGhhc2U9MDticmVhaztjYXNlIDE2OmIuc3JQaGFzZT0uMjUqZDticmVhaztjYXNlIDMyOmIuc3JQaGFzZT0uNSpkO2JyZWFrO2Nhc2UgNDg6Yi5zclBoYXNlPS43NSpkO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBTNDVST1VORCB2YWx1ZVwiKX1jJj0xNSxiLnNyVGhyZXNob2xkPTA9PT1jPzA6KGMvOC0uNSkqZH1mdW5jdGlvbiBDZChiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJST0ZGW11cIiksYi5yb3VuZD1OYn1mdW5jdGlvbiBEZChiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSVVRHW11cIiksYi5yb3VuZD1SYn1mdW5jdGlvbiBFZChiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSRFRHW11cIiksYi5yb3VuZD1TYn1mdW5jdGlvbiBGZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNDQU5DVFJMW11cIixjKX1mdW5jdGlvbiBHZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejJbZV0saD1jLnoxW2ZdO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNEUFZUTFtcIitiK1wiXVwiLGUsZik7dmFyIGksajtiPyhpPWcueS1oLnksaj1oLngtZy54KTooaT1oLngtZy54LGo9aC55LWcueSksYy5kcHY9VWIoaSxqKX1mdW5jdGlvbiBIZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPTA7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR0VUSU5GT1tdXCIsZCksMSZkJiYoZT0zNSksMzImZCYmKGV8PTQwOTYpLGMucHVzaChlKX1mdW5jdGlvbiBJZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCksZj1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJPTExbXVwiKSxjLnB1c2goZSksYy5wdXNoKGQpLGMucHVzaChmKX1mdW5jdGlvbiBKZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTUFYW11cIixkLGUpLGMucHVzaChNYXRoLm1heChlLGQpKX1mdW5jdGlvbiBLZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTUlOW11cIixkLGUpLGMucHVzaChNYXRoLm1pbihlLGQpKX1mdW5jdGlvbiBMZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNDQU5UWVBFW11cIixjKX1mdW5jdGlvbiBNZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpLGQ9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiSU5TVENUUkxbXVwiLGMsZCksYyl7Y2FzZSAxOnJldHVybiB2b2lkKGIuaW5oaWJpdEdyaWRGaXQ9ISFkKTtjYXNlIDI6cmV0dXJuIHZvaWQoYi5pZ25vcmVDdnQ9ISFkKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgSU5TVENUUkxbXSBzZWxlY3RvclwiKX19ZnVuY3Rpb24gTmQoYixjKXt2YXIgZD1jLnN0YWNrLGU9Yy5wcm9nLGY9Yy5pcDthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJQVVNIQltcIitiK1wiXVwiKTtmb3IodmFyIGc9MDtnPGI7ZysrKWQucHVzaChlWysrZl0pO2MuaXA9Zn1mdW5jdGlvbiBPZChiLGMpe3ZhciBkPWMuaXAsZT1jLnByb2csZj1jLnN0YWNrO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuaXAsXCJQVVNIV1tcIitiK1wiXVwiKTtmb3IodmFyIGc9MDtnPGI7ZysrKXt2YXIgaD1lWysrZF08PDh8ZVsrK2RdOzMyNzY4JmgmJihoPS0oMSsoNjU1MzVeaCkpKSxmLnB1c2goaCl9Yy5pcD1kfWZ1bmN0aW9uIFBkKGIsYyxkLGUsZixnKXt2YXIgaCxpLGosayxsPWcuc3RhY2ssbT1iJiZsLnBvcCgpLG49bC5wb3AoKSxvPWcucnAwLHA9Zy56MFtvXSxxPWcuejFbbl0scj1nLm1pbkRpcyxzPWcuZnYsdD1nLmRwdjtpPWg9dC5kaXN0YW5jZShxLHAsITAsITApLGo9aT49MD8xOi0xLGk9TWF0aC5hYnMoaSksYiYmKGs9Zy5jdnRbbV0sZSYmTWF0aC5hYnMoaS1rKTxnLmN2Q3V0SW4mJihpPWspKSxkJiZpPHImJihpPXIpLGUmJihpPWcucm91bmQoaSkpLHMuc2V0UmVsYXRpdmUocSxwLGoqaSx0KSxzLnRvdWNoKHEpLGEuREVCVUcmJmNvbnNvbGUubG9nKGcuc3RlcCwoYj9cIk1JUlBbXCI6XCJNRFJQW1wiKSsoYz9cIk1cIjpcIm1cIikrKGQ/XCI+XCI6XCJfXCIpKyhlP1wiUlwiOlwiX1wiKSsoMD09PWY/XCJHclwiOjE9PT1mP1wiQmxcIjoyPT09Zj9cIldoXCI6XCJcIikrXCJdXCIsYj9tK1wiKFwiK2cuY3Z0W21dK1wiLFwiK2srXCIpXCI6XCJcIixuLFwiKGQgPVwiLGgsXCItPlwiLGoqaSxcIilcIiksZy5ycDE9Zy5ycDAsZy5ycDI9bixjJiYoZy5ycDA9bil9ZnVuY3Rpb24gUWQoYSl7YT1hfHx7fSxhLmVtcHR5fHwoRWIoYS5mYW1pbHlOYW1lLFwiV2hlbiBjcmVhdGluZyBhIG5ldyBGb250IG9iamVjdCwgZmFtaWx5TmFtZSBpcyByZXF1aXJlZC5cIiksRWIoYS5zdHlsZU5hbWUsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBzdHlsZU5hbWUgaXMgcmVxdWlyZWQuXCIpLEViKGEudW5pdHNQZXJFbSxcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIHVuaXRzUGVyRW0gaXMgcmVxdWlyZWQuXCIpLEViKGEuYXNjZW5kZXIsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBhc2NlbmRlciBpcyByZXF1aXJlZC5cIiksRWIoYS5kZXNjZW5kZXIsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBkZXNjZW5kZXIgaXMgcmVxdWlyZWQuXCIpLEViKGEuZGVzY2VuZGVyPDAsXCJEZXNjZW5kZXIgc2hvdWxkIGJlIG5lZ2F0aXZlIChlLmcuIC01MTIpLlwiKSx0aGlzLm5hbWVzPXtmb250RmFtaWx5OntlbjphLmZhbWlseU5hbWV8fFwiIFwifSxmb250U3ViZmFtaWx5OntlbjphLnN0eWxlTmFtZXx8XCIgXCJ9LGZ1bGxOYW1lOntlbjphLmZ1bGxOYW1lfHxhLmZhbWlseU5hbWUrXCIgXCIrYS5zdHlsZU5hbWV9LHBvc3RTY3JpcHROYW1lOntlbjphLnBvc3RTY3JpcHROYW1lfHwoYS5mYW1pbHlOYW1lK2Euc3R5bGVOYW1lKS5yZXBsYWNlKC9cXHMvZyxcIlwiKX0sZGVzaWduZXI6e2VuOmEuZGVzaWduZXJ8fFwiIFwifSxkZXNpZ25lclVSTDp7ZW46YS5kZXNpZ25lclVSTHx8XCIgXCJ9LG1hbnVmYWN0dXJlcjp7ZW46YS5tYW51ZmFjdHVyZXJ8fFwiIFwifSxtYW51ZmFjdHVyZXJVUkw6e2VuOmEubWFudWZhY3R1cmVyVVJMfHxcIiBcIn0sbGljZW5zZTp7ZW46YS5saWNlbnNlfHxcIiBcIn0sbGljZW5zZVVSTDp7ZW46YS5saWNlbnNlVVJMfHxcIiBcIn0sdmVyc2lvbjp7ZW46YS52ZXJzaW9ufHxcIlZlcnNpb24gMC4xXCJ9LGRlc2NyaXB0aW9uOntlbjphLmRlc2NyaXB0aW9ufHxcIiBcIn0sY29weXJpZ2h0OntlbjphLmNvcHlyaWdodHx8XCIgXCJ9LHRyYWRlbWFyazp7ZW46YS50cmFkZW1hcmt8fFwiIFwifX0sdGhpcy51bml0c1BlckVtPWEudW5pdHNQZXJFbXx8MWUzLHRoaXMuYXNjZW5kZXI9YS5hc2NlbmRlcix0aGlzLmRlc2NlbmRlcj1hLmRlc2NlbmRlcix0aGlzLmNyZWF0ZWRUaW1lc3RhbXA9YS5jcmVhdGVkVGltZXN0YW1wLHRoaXMudGFibGVzPXtvczI6e3VzV2VpZ2h0Q2xhc3M6YS53ZWlnaHRDbGFzc3x8dGhpcy51c1dlaWdodENsYXNzZXMuTUVESVVNLHVzV2lkdGhDbGFzczphLndpZHRoQ2xhc3N8fHRoaXMudXNXaWR0aENsYXNzZXMuTUVESVVNLGZzU2VsZWN0aW9uOmEuZnNTZWxlY3Rpb258fHRoaXMuZnNTZWxlY3Rpb25WYWx1ZXMuUkVHVUxBUn19KSx0aGlzLnN1cHBvcnRlZD0hMCx0aGlzLmdseXBocz1uZXcgU2UuR2x5cGhTZXQodGhpcyxhLmdseXBoc3x8W10pLHRoaXMuZW5jb2Rpbmc9bmV3IFgodGhpcyksdGhpcy5wb3NpdGlvbj1uZXcgeGIodGhpcyksdGhpcy5zdWJzdGl0dXRpb249bmV3IHliKHRoaXMpLHRoaXMudGFibGVzPXRoaXMudGFibGVzfHx7fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImhpbnRpbmdcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hpbnRpbmc/dGhpcy5faGludGluZzpcInRydWV0eXBlXCI9PT10aGlzLm91dGxpbmVzRm9ybWF0P3RoaXMuX2hpbnRpbmc9bmV3IE1iKHRoaXMpOnZvaWQgMH19KX1mdW5jdGlvbiBSZChhLGIpe3ZhciBjPUpTT04uc3RyaW5naWZ5KGEpLGQ9MjU2O2Zvcih2YXIgZSBpbiBiKXt2YXIgZj1wYXJzZUludChlKTtpZihmJiYhKGY8MjU2KSl7aWYoSlNPTi5zdHJpbmdpZnkoYltlXSk9PT1jKXJldHVybiBmO2Q8PWYmJihkPWYrMSl9fXJldHVybiBiW2RdPWEsZH1mdW5jdGlvbiBTZChhLGIsYyl7dmFyIGQ9UmQoYi5uYW1lLGMpO3JldHVyblt7bmFtZTpcInRhZ19cIithLHR5cGU6XCJUQUdcIix2YWx1ZTpiLnRhZ30se25hbWU6XCJtaW5WYWx1ZV9cIithLHR5cGU6XCJGSVhFRFwiLHZhbHVlOmIubWluVmFsdWU8PDE2fSx7bmFtZTpcImRlZmF1bHRWYWx1ZV9cIithLHR5cGU6XCJGSVhFRFwiLHZhbHVlOmIuZGVmYXVsdFZhbHVlPDwxNn0se25hbWU6XCJtYXhWYWx1ZV9cIithLHR5cGU6XCJGSVhFRFwiLHZhbHVlOmIubWF4VmFsdWU8PDE2fSx7bmFtZTpcImZsYWdzX1wiK2EsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibmFtZUlEX1wiK2EsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmR9XX1mdW5jdGlvbiBUZChhLGIsYyl7dmFyIGQ9e30sZT1uZXcgTGUuUGFyc2VyKGEsYik7cmV0dXJuIGQudGFnPWUucGFyc2VUYWcoKSxkLm1pblZhbHVlPWUucGFyc2VGaXhlZCgpLGQuZGVmYXVsdFZhbHVlPWUucGFyc2VGaXhlZCgpLGQubWF4VmFsdWU9ZS5wYXJzZUZpeGVkKCksZS5za2lwKFwidVNob3J0XCIsMSksZC5uYW1lPWNbZS5wYXJzZVVTaG9ydCgpXXx8e30sZH1mdW5jdGlvbiBVZChhLGIsYyxkKXtmb3IodmFyIGU9UmQoYi5uYW1lLGQpLGY9W3tuYW1lOlwibmFtZUlEX1wiK2EsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmV9LHtuYW1lOlwiZmxhZ3NfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dLGc9MDtnPGMubGVuZ3RoOysrZyl7dmFyIGg9Y1tnXS50YWc7Zi5wdXNoKHtuYW1lOlwiYXhpc19cIithK1wiIFwiK2gsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5jb29yZGluYXRlc1toXTw8MTZ9KX1yZXR1cm4gZn1mdW5jdGlvbiBWZChhLGIsYyxkKXt2YXIgZT17fSxmPW5ldyBMZS5QYXJzZXIoYSxiKTtlLm5hbWU9ZFtmLnBhcnNlVVNob3J0KCldfHx7fSxmLnNraXAoXCJ1U2hvcnRcIiwxKSxlLmNvb3JkaW5hdGVzPXt9O2Zvcih2YXIgZz0wO2c8Yy5sZW5ndGg7KytnKWUuY29vcmRpbmF0ZXNbY1tnXS50YWddPWYucGFyc2VGaXhlZCgpO3JldHVybiBlfWZ1bmN0aW9uIFdkKGEsYil7dmFyIGM9bmV3IEllLlRhYmxlKFwiZnZhclwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJvZmZzZXRUb0RhdGFcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJjb3VudFNpemVQYWlyc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToyfSx7bmFtZTpcImF4aXNDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmF4ZXMubGVuZ3RofSx7bmFtZTpcImF4aXNTaXplXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjIwfSx7bmFtZTpcImluc3RhbmNlQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5pbnN0YW5jZXMubGVuZ3RofSx7bmFtZTpcImluc3RhbmNlU2l6ZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTo0KzQqYS5heGVzLmxlbmd0aH1dKTtjLm9mZnNldFRvRGF0YT1jLnNpemVPZigpO2Zvcih2YXIgZD0wO2Q8YS5heGVzLmxlbmd0aDtkKyspYy5maWVsZHM9Yy5maWVsZHMuY29uY2F0KFNkKGQsYS5heGVzW2RdLGIpKTtmb3IodmFyIGU9MDtlPGEuaW5zdGFuY2VzLmxlbmd0aDtlKyspYy5maWVsZHM9Yy5maWVsZHMuY29uY2F0KFVkKGUsYS5pbnN0YW5jZXNbZV0sYS5heGVzLGIpKTtyZXR1cm4gY31mdW5jdGlvbiBYZChhLGIsYyl7dmFyIGQ9bmV3IExlLlBhcnNlcihhLGIpLGU9ZC5wYXJzZVVMb25nKCk7eGUuYXJndW1lbnQoNjU1MzY9PT1lLFwiVW5zdXBwb3J0ZWQgZnZhciB0YWJsZSB2ZXJzaW9uLlwiKTt2YXIgZj1kLnBhcnNlT2Zmc2V0MTYoKTtkLnNraXAoXCJ1U2hvcnRcIiwxKTtmb3IodmFyIGc9ZC5wYXJzZVVTaG9ydCgpLGg9ZC5wYXJzZVVTaG9ydCgpLGk9ZC5wYXJzZVVTaG9ydCgpLGo9ZC5wYXJzZVVTaG9ydCgpLGs9W10sbD0wO2w8ZztsKyspay5wdXNoKFRkKGEsYitmK2wqaCxjKSk7Zm9yKHZhciBtPVtdLG49YitmK2cqaCxvPTA7bzxpO28rKyltLnB1c2goVmQoYSxuK28qaixrLGMpKTtyZXR1cm57YXhlczprLGluc3RhbmNlczptfX1mdW5jdGlvbiBZZChhLGIpe2I9Ynx8MDt2YXIgYz1uZXcgUShhLGIpLGQ9Yy5wYXJzZVZlcnNpb24oMSk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1kfHwxLjE9PT1kLFwiVW5zdXBwb3J0ZWQgR1BPUyB0YWJsZSB2ZXJzaW9uIFwiK2QpLDE9PT1kP3t2ZXJzaW9uOmQsc2NyaXB0czpjLnBhcnNlU2NyaXB0TGlzdCgpLGZlYXR1cmVzOmMucGFyc2VGZWF0dXJlTGlzdCgpLGxvb2t1cHM6Yy5wYXJzZUxvb2t1cExpc3QoRGYpfTp7dmVyc2lvbjpkLHNjcmlwdHM6Yy5wYXJzZVNjcmlwdExpc3QoKSxmZWF0dXJlczpjLnBhcnNlRmVhdHVyZUxpc3QoKSxsb29rdXBzOmMucGFyc2VMb29rdXBMaXN0KERmKSx2YXJpYXRpb25zOmMucGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3QoKX19ZnVuY3Rpb24gWmQoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcIkdQT1NcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwic2NyaXB0c1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5TY3JpcHRMaXN0KGEuc2NyaXB0cyl9LHtuYW1lOlwiZmVhdHVyZXNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuRmVhdHVyZUxpc3QoYS5mZWF0dXJlcyl9LHtuYW1lOlwibG9va3Vwc1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Mb29rdXBMaXN0KGEubG9va3VwcyxFZil9XSl9ZnVuY3Rpb24gJGQoYSl7dmFyIGI9e307YS5za2lwKFwidVNob3J0XCIpO3ZhciBjPWEucGFyc2VVU2hvcnQoKTt4ZS5hcmd1bWVudCgwPT09YyxcIlVuc3VwcG9ydGVkIGtlcm4gc3ViLXRhYmxlIHZlcnNpb24uXCIpLGEuc2tpcChcInVTaG9ydFwiLDIpO3ZhciBkPWEucGFyc2VVU2hvcnQoKTthLnNraXAoXCJ1U2hvcnRcIiwzKTtmb3IodmFyIGU9MDtlPGQ7ZSs9MSl7dmFyIGY9YS5wYXJzZVVTaG9ydCgpLGc9YS5wYXJzZVVTaG9ydCgpLGg9YS5wYXJzZVNob3J0KCk7YltmK1wiLFwiK2ddPWh9cmV0dXJuIGJ9ZnVuY3Rpb24gX2QoYSl7dmFyIGI9e307YS5za2lwKFwidVNob3J0XCIpLGEucGFyc2VVTG9uZygpPjEmJmNvbnNvbGUud2FybihcIk9ubHkgdGhlIGZpcnN0IGtlcm4gc3VidGFibGUgaXMgc3VwcG9ydGVkLlwiKSxhLnNraXAoXCJ1TG9uZ1wiKTt2YXIgYz1hLnBhcnNlVVNob3J0KCksZD0yNTUmYztpZihhLnNraXAoXCJ1U2hvcnRcIiksMD09PWQpe3ZhciBlPWEucGFyc2VVU2hvcnQoKTthLnNraXAoXCJ1U2hvcnRcIiwzKTtmb3IodmFyIGY9MDtmPGU7Zis9MSl7dmFyIGc9YS5wYXJzZVVTaG9ydCgpLGg9YS5wYXJzZVVTaG9ydCgpLGk9YS5wYXJzZVNob3J0KCk7YltnK1wiLFwiK2hdPWl9fXJldHVybiBifWZ1bmN0aW9uIGFlKGEsYil7dmFyIGM9bmV3IExlLlBhcnNlcihhLGIpLGQ9Yy5wYXJzZVVTaG9ydCgpO2lmKDA9PT1kKXJldHVybiAkZChjKTtpZigxPT09ZClyZXR1cm4gX2QoYyk7dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQga2VybiB0YWJsZSB2ZXJzaW9uIChcIitkK1wiKS5cIil9ZnVuY3Rpb24gYmUoYSxiLGMsZCl7Zm9yKHZhciBlPW5ldyBMZS5QYXJzZXIoYSxiKSxmPWQ/ZS5wYXJzZVVTaG9ydDplLnBhcnNlVUxvbmcsZz1bXSxoPTA7aDxjKzE7aCs9MSl7dmFyIGk9Zi5jYWxsKGUpO2QmJihpKj0yKSxnLnB1c2goaSl9cmV0dXJuIGd9ZnVuY3Rpb24gY2UoYSxjKXtiKFwiZnNcIikucmVhZEZpbGUoYSxmdW5jdGlvbihhLGIpe2lmKGEpcmV0dXJuIGMoYS5tZXNzYWdlKTtjKG51bGwsQ2IoYikpfSl9ZnVuY3Rpb24gZGUoYSxiKXt2YXIgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7Yy5vcGVuKFwiZ2V0XCIsYSwhMCksYy5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiLGMub25sb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIGMucmVzcG9uc2U/YihudWxsLGMucmVzcG9uc2UpOmIoXCJGb250IGNvdWxkIG5vdCBiZSBsb2FkZWQ6IFwiK2Muc3RhdHVzVGV4dCl9LGMub25lcnJvcj1mdW5jdGlvbigpe2IoXCJGb250IGNvdWxkIG5vdCBiZSBsb2FkZWRcIil9LGMuc2VuZCgpfWZ1bmN0aW9uIGVlKGEsYil7Zm9yKHZhciBjPVtdLGQ9MTIsZT0wO2U8YjtlKz0xKXt2YXIgZj1MZS5nZXRUYWcoYSxkKSxnPUxlLmdldFVMb25nKGEsZCs0KSxoPUxlLmdldFVMb25nKGEsZCs4KSxpPUxlLmdldFVMb25nKGEsZCsxMik7Yy5wdXNoKHt0YWc6ZixjaGVja3N1bTpnLG9mZnNldDpoLGxlbmd0aDppLGNvbXByZXNzaW9uOiExfSksZCs9MTZ9cmV0dXJuIGN9ZnVuY3Rpb24gZmUoYSxiKXtmb3IodmFyIGM9W10sZD00NCxlPTA7ZTxiO2UrPTEpe3ZhciBmPUxlLmdldFRhZyhhLGQpLGc9TGUuZ2V0VUxvbmcoYSxkKzQpLGg9TGUuZ2V0VUxvbmcoYSxkKzgpLGk9TGUuZ2V0VUxvbmcoYSxkKzEyKSxqPXZvaWQgMDtqPWg8aSYmXCJXT0ZGXCIsYy5wdXNoKHt0YWc6ZixvZmZzZXQ6Zyxjb21wcmVzc2lvbjpqLGNvbXByZXNzZWRMZW5ndGg6aCxsZW5ndGg6aX0pLGQrPTIwfXJldHVybiBjfWZ1bmN0aW9uIGdlKGEsYil7aWYoXCJXT0ZGXCI9PT1iLmNvbXByZXNzaW9uKXt2YXIgYz1uZXcgVWludDhBcnJheShhLmJ1ZmZlcixiLm9mZnNldCsyLGIuY29tcHJlc3NlZExlbmd0aC0yKSxkPW5ldyBVaW50OEFycmF5KGIubGVuZ3RoKTtpZih3ZShjLGQpLGQuYnl0ZUxlbmd0aCE9PWIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkRlY29tcHJlc3Npb24gZXJyb3I6IFwiK2IudGFnK1wiIGRlY29tcHJlc3NlZCBsZW5ndGggZG9lc24ndCBtYXRjaCByZWNvcmRlZCBsZW5ndGhcIik7cmV0dXJue2RhdGE6bmV3IERhdGFWaWV3KGQuYnVmZmVyLDApLG9mZnNldDowfX1yZXR1cm57ZGF0YTphLG9mZnNldDpiLm9mZnNldH19ZnVuY3Rpb24gaGUoYSl7dmFyIGIsYyxkLGU9bmV3IFFkKHtlbXB0eTohMH0pLGY9bmV3IERhdGFWaWV3KGEsMCksZz1bXSxoPUxlLmdldFRhZyhmLDApO2lmKGg9PT1TdHJpbmcuZnJvbUNoYXJDb2RlKDAsMSwwLDApfHxcInRydWVcIj09PWh8fFwidHlwMVwiPT09aCllLm91dGxpbmVzRm9ybWF0PVwidHJ1ZXR5cGVcIixkPUxlLmdldFVTaG9ydChmLDQpLGc9ZWUoZixkKTtlbHNlIGlmKFwiT1RUT1wiPT09aCllLm91dGxpbmVzRm9ybWF0PVwiY2ZmXCIsZD1MZS5nZXRVU2hvcnQoZiw0KSxnPWVlKGYsZCk7ZWxzZXtpZihcIndPRkZcIiE9PWgpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgT3BlblR5cGUgc2lnbmF0dXJlIFwiK2gpO3ZhciBpPUxlLmdldFRhZyhmLDQpO2lmKGk9PT1TdHJpbmcuZnJvbUNoYXJDb2RlKDAsMSwwLDApKWUub3V0bGluZXNGb3JtYXQ9XCJ0cnVldHlwZVwiO2Vsc2V7aWYoXCJPVFRPXCIhPT1pKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIE9wZW5UeXBlIGZsYXZvciBcIitoKTtlLm91dGxpbmVzRm9ybWF0PVwiY2ZmXCJ9ZD1MZS5nZXRVU2hvcnQoZiwxMiksZz1mZShmLGQpfWZvcih2YXIgaixrLGwsbSxuLG8scCxxLHIscyx0LHU9MDt1PGQ7dSs9MSl7dmFyIHY9Z1t1XSx3PXZvaWQgMDtzd2l0Y2godi50YWcpe2Nhc2VcImNtYXBcIjp3PWdlKGYsdiksZS50YWJsZXMuY21hcD1NZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUuZW5jb2Rpbmc9bmV3IFkoZS50YWJsZXMuY21hcCk7YnJlYWs7Y2FzZVwiY3Z0IFwiOnc9Z2UoZix2KSx0PW5ldyBMZS5QYXJzZXIody5kYXRhLHcub2Zmc2V0KSxlLnRhYmxlcy5jdnQ9dC5wYXJzZVNob3J0TGlzdCh2Lmxlbmd0aC8yKTticmVhaztjYXNlXCJmdmFyXCI6az12O2JyZWFrO2Nhc2VcImZwZ21cIjp3PWdlKGYsdiksdD1uZXcgTGUuUGFyc2VyKHcuZGF0YSx3Lm9mZnNldCksZS50YWJsZXMuZnBnbT10LnBhcnNlQnl0ZUxpc3Qodi5sZW5ndGgpO2JyZWFrO2Nhc2VcImhlYWRcIjp3PWdlKGYsdiksZS50YWJsZXMuaGVhZD1XZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUudW5pdHNQZXJFbT1lLnRhYmxlcy5oZWFkLnVuaXRzUGVyRW0sYj1lLnRhYmxlcy5oZWFkLmluZGV4VG9Mb2NGb3JtYXQ7YnJlYWs7Y2FzZVwiaGhlYVwiOnc9Z2UoZix2KSxlLnRhYmxlcy5oaGVhPVhlLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS5hc2NlbmRlcj1lLnRhYmxlcy5oaGVhLmFzY2VuZGVyLGUuZGVzY2VuZGVyPWUudGFibGVzLmhoZWEuZGVzY2VuZGVyLGUubnVtYmVyT2ZITWV0cmljcz1lLnRhYmxlcy5oaGVhLm51bWJlck9mSE1ldHJpY3M7YnJlYWs7Y2FzZVwiaG10eFwiOm89djticmVhaztjYXNlXCJsdGFnXCI6dz1nZShmLHYpLGM9WmUucGFyc2Uody5kYXRhLHcub2Zmc2V0KTticmVhaztjYXNlXCJtYXhwXCI6dz1nZShmLHYpLGUudGFibGVzLm1heHA9JGUucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLm51bUdseXBocz1lLnRhYmxlcy5tYXhwLm51bUdseXBoczticmVhaztjYXNlXCJuYW1lXCI6cj12O2JyZWFrO2Nhc2VcIk9TLzJcIjp3PWdlKGYsdiksZS50YWJsZXMub3MyPWpmLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCk7YnJlYWs7Y2FzZVwicG9zdFwiOnc9Z2UoZix2KSxlLnRhYmxlcy5wb3N0PWtmLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS5nbHlwaE5hbWVzPW5ldyAkKGUudGFibGVzLnBvc3QpO2JyZWFrO2Nhc2VcInByZXBcIjp3PWdlKGYsdiksdD1uZXcgTGUuUGFyc2VyKHcuZGF0YSx3Lm9mZnNldCksZS50YWJsZXMucHJlcD10LnBhcnNlQnl0ZUxpc3Qodi5sZW5ndGgpO2JyZWFrO2Nhc2VcImdseWZcIjpsPXY7YnJlYWs7Y2FzZVwibG9jYVwiOnE9djticmVhaztjYXNlXCJDRkYgXCI6aj12O2JyZWFrO2Nhc2VcImtlcm5cIjpwPXY7YnJlYWs7Y2FzZVwiR1BPU1wiOm09djticmVhaztjYXNlXCJHU1VCXCI6bj12O2JyZWFrO2Nhc2VcIm1ldGFcIjpzPXZ9fXZhciB4PWdlKGYscik7aWYoZS50YWJsZXMubmFtZT1nZi5wYXJzZSh4LmRhdGEseC5vZmZzZXQsYyksZS5uYW1lcz1lLnRhYmxlcy5uYW1lLGwmJnEpe3ZhciB5PTA9PT1iLHo9Z2UoZixxKSxBPUhmLnBhcnNlKHouZGF0YSx6Lm9mZnNldCxlLm51bUdseXBocyx5KSxCPWdlKGYsbCk7ZS5nbHlwaHM9dmYucGFyc2UoQi5kYXRhLEIub2Zmc2V0LEEsZSl9ZWxzZXtpZighail0aHJvdyBuZXcgRXJyb3IoXCJGb250IGRvZXNuJ3QgY29udGFpbiBUcnVlVHlwZSBvciBDRkYgb3V0bGluZXMuXCIpO3ZhciBDPWdlKGYsaik7VmUucGFyc2UoQy5kYXRhLEMub2Zmc2V0LGUpfXZhciBEPWdlKGYsbyk7aWYoWWUucGFyc2UoRC5kYXRhLEQub2Zmc2V0LGUubnVtYmVyT2ZITWV0cmljcyxlLm51bUdseXBocyxlLmdseXBocyksXyhlKSxwKXt2YXIgRT1nZShmLHApO2Uua2VybmluZ1BhaXJzPUdmLnBhcnNlKEUuZGF0YSxFLm9mZnNldCl9ZWxzZSBlLmtlcm5pbmdQYWlycz17fTtpZihtKXt2YXIgRj1nZShmLG0pO2UudGFibGVzLmdwb3M9RmYucGFyc2UoRi5kYXRhLEYub2Zmc2V0KSxlLnBvc2l0aW9uLmluaXQoKX1pZihuKXt2YXIgRz1nZShmLG4pO2UudGFibGVzLmdzdWI9b2YucGFyc2UoRy5kYXRhLEcub2Zmc2V0KX1pZihrKXt2YXIgSD1nZShmLGspO2UudGFibGVzLmZ2YXI9Q2YucGFyc2UoSC5kYXRhLEgub2Zmc2V0LGUubmFtZXMpfWlmKHMpe3ZhciBJPWdlKGYscyk7ZS50YWJsZXMubWV0YT1wZi5wYXJzZShJLmRhdGEsSS5vZmZzZXQpLGUubWV0YXM9ZS50YWJsZXMubWV0YX1yZXR1cm4gZX1mdW5jdGlvbiBpZShhLGIpeyhcInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93P2NlOmRlKShhLGZ1bmN0aW9uKGEsYyl7aWYoYSlyZXR1cm4gYihhKTt2YXIgZDt0cnl7ZD1oZShjKX1jYXRjaChhKXtyZXR1cm4gYihhLG51bGwpfXJldHVybiBiKG51bGwsZCl9KX1mdW5jdGlvbiBqZShhKXtyZXR1cm4gaGUoQ2IoYihcImZzXCIpLnJlYWRGaWxlU3luYyhhKSkpfVN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXR8fGZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oKXt0cnl7dmFyIGE9e30sYj1PYmplY3QuZGVmaW5lUHJvcGVydHksYz1iKGEsYSxhKSYmYn1jYXRjaChhKXt9cmV0dXJuIGN9KCksYj1mdW5jdGlvbihhKXtpZihudWxsPT10aGlzKXRocm93IFR5cGVFcnJvcigpO3ZhciBiPVN0cmluZyh0aGlzKSxjPWIubGVuZ3RoLGQ9YT9OdW1iZXIoYSk6MDtpZihkIT1kJiYoZD0wKSwhKGQ8MHx8ZD49Yykpe3ZhciBlLGY9Yi5jaGFyQ29kZUF0KGQpO3JldHVybiBmPj01NTI5NiYmZjw9NTYzMTkmJmM+ZCsxJiYoZT1iLmNoYXJDb2RlQXQoZCsxKSk+PTU2MzIwJiZlPD01NzM0Mz8xMDI0KihmLTU1Mjk2KStlLTU2MzIwKzY1NTM2OmZ9fTthP2EoU3RyaW5nLnByb3RvdHlwZSxcImNvZGVQb2ludEF0XCIse3ZhbHVlOmIsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6U3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdD1ifSgpO3ZhciBrZT0wLGxlPS0zLG1lPW5ldyBjLG5lPW5ldyBjLG9lPW5ldyBVaW50OEFycmF5KDMwKSxwZT1uZXcgVWludDE2QXJyYXkoMzApLHFlPW5ldyBVaW50OEFycmF5KDMwKSxyZT1uZXcgVWludDE2QXJyYXkoMzApLHNlPW5ldyBVaW50OEFycmF5KFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSksdGU9bmV3IGMsdWU9bmV3IFVpbnQ4QXJyYXkoMzIwKSx2ZT1uZXcgVWludDE2QXJyYXkoMTYpO2cobWUsbmUpLGYob2UscGUsNCwzKSxmKHFlLHJlLDIsMSksb2VbMjhdPTAscGVbMjhdPTI1ODt2YXIgd2U9bztxLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGlzTmFOKHRoaXMueDEpfHxpc05hTih0aGlzLnkxKXx8aXNOYU4odGhpcy54Mil8fGlzTmFOKHRoaXMueTIpfSxxLnByb3RvdHlwZS5hZGRQb2ludD1mdW5jdGlvbihhLGIpe1wibnVtYmVyXCI9PXR5cGVvZiBhJiYoKGlzTmFOKHRoaXMueDEpfHxpc05hTih0aGlzLngyKSkmJih0aGlzLngxPWEsdGhpcy54Mj1hKSxhPHRoaXMueDEmJih0aGlzLngxPWEpLGE+dGhpcy54MiYmKHRoaXMueDI9YSkpLFwibnVtYmVyXCI9PXR5cGVvZiBiJiYoKGlzTmFOKHRoaXMueTEpfHxpc05hTih0aGlzLnkyKSkmJih0aGlzLnkxPWIsdGhpcy55Mj1iKSxiPHRoaXMueTEmJih0aGlzLnkxPWIpLGI+dGhpcy55MiYmKHRoaXMueTI9YikpfSxxLnByb3RvdHlwZS5hZGRYPWZ1bmN0aW9uKGEpe3RoaXMuYWRkUG9pbnQoYSxudWxsKX0scS5wcm90b3R5cGUuYWRkWT1mdW5jdGlvbihhKXt0aGlzLmFkZFBvaW50KG51bGwsYSl9LHEucHJvdG90eXBlLmFkZEJlemllcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3ZhciBpPXRoaXMsaj1bYSxiXSxrPVtjLGRdLGw9W2UsZl0sbT1bZyxoXTt0aGlzLmFkZFBvaW50KGEsYiksdGhpcy5hZGRQb2ludChnLGgpO2Zvcih2YXIgbj0wO248PTE7bisrKXt2YXIgbz02Kmpbbl0tMTIqa1tuXSs2Kmxbbl0scT0tMypqW25dKzkqa1tuXS05Kmxbbl0rMyptW25dLHI9MyprW25dLTMqaltuXTtpZigwIT09cSl7dmFyIHM9TWF0aC5wb3cobywyKS00KnIqcTtpZighKHM8MCkpe3ZhciB0PSgtbytNYXRoLnNxcnQocykpLygyKnEpOzA8dCYmdDwxJiYoMD09PW4mJmkuYWRkWChwKGpbbl0sa1tuXSxsW25dLG1bbl0sdCkpLDE9PT1uJiZpLmFkZFkocChqW25dLGtbbl0sbFtuXSxtW25dLHQpKSk7dmFyIHU9KC1vLU1hdGguc3FydChzKSkvKDIqcSk7MDx1JiZ1PDEmJigwPT09biYmaS5hZGRYKHAoaltuXSxrW25dLGxbbl0sbVtuXSx1KSksMT09PW4mJmkuYWRkWShwKGpbbl0sa1tuXSxsW25dLG1bbl0sdSkpKX19ZWxzZXtpZigwPT09byljb250aW51ZTt2YXIgdj0tci9vOzA8diYmdjwxJiYoMD09PW4mJmkuYWRkWChwKGpbbl0sa1tuXSxsW25dLG1bbl0sdikpLDE9PT1uJiZpLmFkZFkocChqW25dLGtbbl0sbFtuXSxtW25dLHYpKSl9fX0scS5wcm90b3R5cGUuYWRkUXVhZD1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9YSsyLzMqKGMtYSksaD1iKzIvMyooZC1iKSxpPWcrMS8zKihlLWEpLGo9aCsxLzMqKGYtYik7dGhpcy5hZGRCZXppZXIoYSxiLGcsaCxpLGosZSxmKX0sci5wcm90b3R5cGUubW92ZVRvPWZ1bmN0aW9uKGEsYil7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiTVwiLHg6YSx5OmJ9KX0sci5wcm90b3R5cGUubGluZVRvPWZ1bmN0aW9uKGEsYil7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiTFwiLHg6YSx5OmJ9KX0sci5wcm90b3R5cGUuY3VydmVUbz1yLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJDXCIseDE6YSx5MTpiLHgyOmMseTI6ZCx4OmUseTpmfSl9LHIucHJvdG90eXBlLnF1YWRUbz1yLnByb3RvdHlwZS5xdWFkcmF0aWNDdXJ2ZVRvPWZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIlFcIix4MTphLHkxOmIseDpjLHk6ZH0pfSxyLnByb3RvdHlwZS5jbG9zZT1yLnByb3RvdHlwZS5jbG9zZVBhdGg9ZnVuY3Rpb24oKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJaXCJ9KX0sci5wcm90b3R5cGUuZXh0ZW5kPWZ1bmN0aW9uKGEpe2lmKGEuY29tbWFuZHMpYT1hLmNvbW1hbmRzO2Vsc2UgaWYoYSBpbnN0YW5jZW9mIHEpe3ZhciBiPWE7cmV0dXJuIHRoaXMubW92ZVRvKGIueDEsYi55MSksdGhpcy5saW5lVG8oYi54MixiLnkxKSx0aGlzLmxpbmVUbyhiLngyLGIueTIpLHRoaXMubGluZVRvKGIueDEsYi55Miksdm9pZCB0aGlzLmNsb3NlKCl9QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5jb21tYW5kcyxhKX0sci5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3g9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcyxiPW5ldyBxLGM9MCxkPTAsZT0wLGY9MCxnPTA7Zzx0aGlzLmNvbW1hbmRzLmxlbmd0aDtnKyspe3ZhciBoPWEuY29tbWFuZHNbZ107c3dpdGNoKGgudHlwZSl7Y2FzZVwiTVwiOmIuYWRkUG9pbnQoaC54LGgueSksYz1lPWgueCxkPWY9aC55O2JyZWFrO2Nhc2VcIkxcIjpiLmFkZFBvaW50KGgueCxoLnkpLGU9aC54LGY9aC55O2JyZWFrO2Nhc2VcIlFcIjpiLmFkZFF1YWQoZSxmLGgueDEsaC55MSxoLngsaC55KSxlPWgueCxmPWgueTticmVhaztjYXNlXCJDXCI6Yi5hZGRCZXppZXIoZSxmLGgueDEsaC55MSxoLngyLGgueTIsaC54LGgueSksZT1oLngsZj1oLnk7YnJlYWs7Y2FzZVwiWlwiOmU9YyxmPWQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHBhdGggY29tbWFuZCBcIitoLnR5cGUpfX1yZXR1cm4gYi5pc0VtcHR5KCkmJmIuYWRkUG9pbnQoMCwwKSxifSxyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7YS5iZWdpblBhdGgoKTtmb3IodmFyIGM9MDtjPHRoaXMuY29tbWFuZHMubGVuZ3RoO2MrPTEpe3ZhciBkPWIuY29tbWFuZHNbY107XCJNXCI9PT1kLnR5cGU/YS5tb3ZlVG8oZC54LGQueSk6XCJMXCI9PT1kLnR5cGU/YS5saW5lVG8oZC54LGQueSk6XCJDXCI9PT1kLnR5cGU/YS5iZXppZXJDdXJ2ZVRvKGQueDEsZC55MSxkLngyLGQueTIsZC54LGQueSk6XCJRXCI9PT1kLnR5cGU/YS5xdWFkcmF0aWNDdXJ2ZVRvKGQueDEsZC55MSxkLngsZC55KTpcIlpcIj09PWQudHlwZSYmYS5jbG9zZVBhdGgoKX10aGlzLmZpbGwmJihhLmZpbGxTdHlsZT10aGlzLmZpbGwsYS5maWxsKCkpLHRoaXMuc3Ryb2tlJiYoYS5zdHJva2VTdHlsZT10aGlzLnN0cm9rZSxhLmxpbmVXaWR0aD10aGlzLnN0cm9rZVdpZHRoLGEuc3Ryb2tlKCkpfSxyLnByb3RvdHlwZS50b1BhdGhEYXRhPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYil7cmV0dXJuIE1hdGgucm91bmQoYik9PT1iP1wiXCIrTWF0aC5yb3VuZChiKTpiLnRvRml4ZWQoYSl9ZnVuY3Rpb24gYygpe2Zvcih2YXIgYT1hcmd1bWVudHMsYz1cIlwiLGQ9MDtkPGFyZ3VtZW50cy5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXTtlPj0wJiZkPjAmJihjKz1cIiBcIiksYys9YihlKX1yZXR1cm4gY312YXIgZD10aGlzO2E9dm9pZCAwIT09YT9hOjI7Zm9yKHZhciBlPVwiXCIsZj0wO2Y8dGhpcy5jb21tYW5kcy5sZW5ndGg7Zis9MSl7dmFyIGc9ZC5jb21tYW5kc1tmXTtcIk1cIj09PWcudHlwZT9lKz1cIk1cIitjKGcueCxnLnkpOlwiTFwiPT09Zy50eXBlP2UrPVwiTFwiK2MoZy54LGcueSk6XCJDXCI9PT1nLnR5cGU/ZSs9XCJDXCIrYyhnLngxLGcueTEsZy54MixnLnkyLGcueCxnLnkpOlwiUVwiPT09Zy50eXBlP2UrPVwiUVwiK2MoZy54MSxnLnkxLGcueCxnLnkpOlwiWlwiPT09Zy50eXBlJiYoZSs9XCJaXCIpfXJldHVybiBlfSxyLnByb3RvdHlwZS50b1NWRz1mdW5jdGlvbihhKXt2YXIgYj0nPHBhdGggZD1cIic7cmV0dXJuIGIrPXRoaXMudG9QYXRoRGF0YShhKSxiKz0nXCInLHRoaXMuZmlsbCYmXCJibGFja1wiIT09dGhpcy5maWxsJiYobnVsbD09PXRoaXMuZmlsbD9iKz0nIGZpbGw9XCJub25lXCInOmIrPScgZmlsbD1cIicrdGhpcy5maWxsKydcIicpLHRoaXMuc3Ryb2tlJiYoYis9JyBzdHJva2U9XCInK3RoaXMuc3Ryb2tlKydcIiBzdHJva2Utd2lkdGg9XCInK3RoaXMuc3Ryb2tlV2lkdGgrJ1wiJyksYis9XCIvPlwifSxyLnByb3RvdHlwZS50b0RPTUVsZW1lbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy50b1BhdGhEYXRhKGEpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInBhdGhcIik7cmV0dXJuIGMuc2V0QXR0cmlidXRlKFwiZFwiLGIpLGN9O3ZhciB4ZT17ZmFpbDpzLGFyZ3VtZW50OnQsYXNzZXJ0OnR9LHllPTMyNzY4LHplPTIxNDc0ODM2NDgsQWU9e30sQmU9e30sQ2U9e307QmUuQllURT1mdW5jdGlvbihhKXtyZXR1cm4geGUuYXJndW1lbnQoYT49MCYmYTw9MjU1LFwiQnl0ZSB2YWx1ZSBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAyNTUuXCIpLFthXX0sQ2UuQllURT11KDEpLEJlLkNIQVI9ZnVuY3Rpb24oYSl7cmV0dXJuW2EuY2hhckNvZGVBdCgwKV19LENlLkNIQVI9dSgxKSxCZS5DSEFSQVJSQVk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrPTEpYltjXT1hLmNoYXJDb2RlQXQoYyk7cmV0dXJuIGJ9LENlLkNIQVJBUlJBWT1mdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LEJlLlVTSE9SVD1mdW5jdGlvbihhKXtyZXR1cm5bYT4+OCYyNTUsMjU1JmFdfSxDZS5VU0hPUlQ9dSgyKSxCZS5TSE9SVD1mdW5jdGlvbihhKXtyZXR1cm4gYT49eWUmJihhPS0oMip5ZS1hKSksW2E+PjgmMjU1LDI1NSZhXX0sQ2UuU0hPUlQ9dSgyKSxCZS5VSU5UMjQ9ZnVuY3Rpb24oYSl7cmV0dXJuW2E+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLlVJTlQyND11KDMpLEJlLlVMT05HPWZ1bmN0aW9uKGEpe3JldHVyblthPj4yNCYyNTUsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuVUxPTkc9dSg0KSxCZS5MT05HPWZ1bmN0aW9uKGEpe3JldHVybiBhPj16ZSYmKGE9LSgyKnplLWEpKSxbYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLkxPTkc9dSg0KSxCZS5GSVhFRD1CZS5VTE9ORyxDZS5GSVhFRD1DZS5VTE9ORyxCZS5GV09SRD1CZS5TSE9SVCxDZS5GV09SRD1DZS5TSE9SVCxCZS5VRldPUkQ9QmUuVVNIT1JULENlLlVGV09SRD1DZS5VU0hPUlQsQmUuTE9OR0RBVEVUSU1FPWZ1bmN0aW9uKGEpe3JldHVyblswLDAsMCwwLGE+PjI0JjI1NSxhPj4xNiYyNTUsYT4+OCYyNTUsMjU1JmFdfSxDZS5MT05HREFURVRJTUU9dSg4KSxCZS5UQUc9ZnVuY3Rpb24oYSl7cmV0dXJuIHhlLmFyZ3VtZW50KDQ9PT1hLmxlbmd0aCxcIlRhZyBzaG91bGQgYmUgZXhhY3RseSA0IEFTQ0lJIGNoYXJhY3RlcnMuXCIpLFthLmNoYXJDb2RlQXQoMCksYS5jaGFyQ29kZUF0KDEpLGEuY2hhckNvZGVBdCgyKSxhLmNoYXJDb2RlQXQoMyldfSxDZS5UQUc9dSg0KSxCZS5DYXJkOD1CZS5CWVRFLENlLkNhcmQ4PUNlLkJZVEUsQmUuQ2FyZDE2PUJlLlVTSE9SVCxDZS5DYXJkMTY9Q2UuVVNIT1JULEJlLk9mZlNpemU9QmUuQllURSxDZS5PZmZTaXplPUNlLkJZVEUsQmUuU0lEPUJlLlVTSE9SVCxDZS5TSUQ9Q2UuVVNIT1JULEJlLk5VTUJFUj1mdW5jdGlvbihhKXtyZXR1cm4gYT49LTEwNyYmYTw9MTA3P1thKzEzOV06YT49MTA4JiZhPD0xMTMxPyhhLT0xMDgsWzI0NysoYT4+OCksMjU1JmFdKTphPj0tMTEzMSYmYTw9LTEwOD8oYT0tYS0xMDgsWzI1MSsoYT4+OCksMjU1JmFdKTphPj0tMzI3NjgmJmE8PTMyNzY3P0JlLk5VTUJFUjE2KGEpOkJlLk5VTUJFUjMyKGEpXG59LENlLk5VTUJFUj1mdW5jdGlvbihhKXtyZXR1cm4gQmUuTlVNQkVSKGEpLmxlbmd0aH0sQmUuTlVNQkVSMTY9ZnVuY3Rpb24oYSl7cmV0dXJuWzI4LGE+PjgmMjU1LDI1NSZhXX0sQ2UuTlVNQkVSMTY9dSgzKSxCZS5OVU1CRVIzMj1mdW5jdGlvbihhKXtyZXR1cm5bMjksYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLk5VTUJFUjMyPXUoNSksQmUuUkVBTD1mdW5jdGlvbihhKXt2YXIgYj1hLnRvU3RyaW5nKCksYz0vXFwuKFxcZCo/KSg/Ojl7NSwyMH18MHs1LDIwfSlcXGR7MCwyfSg/OmUoLispfCQpLy5leGVjKGIpO2lmKGMpe3ZhciBkPXBhcnNlRmxvYXQoXCIxZVwiKygoY1syXT8rY1syXTowKStjWzFdLmxlbmd0aCkpO2I9KE1hdGgucm91bmQoYSpkKS9kKS50b1N0cmluZygpfWZvcih2YXIgZT1cIlwiLGY9MCxnPWIubGVuZ3RoO2Y8ZztmKz0xKXt2YXIgaD1iW2ZdO2UrPVwiZVwiPT09aD9cIi1cIj09PWJbKytmXT9cImNcIjpcImJcIjpcIi5cIj09PWg/XCJhXCI6XCItXCI9PT1oP1wiZVwiOmh9ZSs9MSZlLmxlbmd0aD9cImZcIjpcImZmXCI7Zm9yKHZhciBpPVszMF0saj0wLGs9ZS5sZW5ndGg7ajxrO2orPTIpaS5wdXNoKHBhcnNlSW50KGUuc3Vic3RyKGosMiksMTYpKTtyZXR1cm4gaX0sQ2UuUkVBTD1mdW5jdGlvbihhKXtyZXR1cm4gQmUuUkVBTChhKS5sZW5ndGh9LEJlLk5BTUU9QmUuQ0hBUkFSUkFZLENlLk5BTUU9Q2UuQ0hBUkFSUkFZLEJlLlNUUklORz1CZS5DSEFSQVJSQVksQ2UuU1RSSU5HPUNlLkNIQVJBUlJBWSxBZS5VVEY4PWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9W10sZT1jLGY9MDtmPGU7ZisrLGIrPTEpZFtmXT1hLmdldFVpbnQ4KGIpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZCl9LEFlLlVURjE2PWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9W10sZT1jLzIsZj0wO2Y8ZTtmKyssYis9MilkW2ZdPWEuZ2V0VWludDE2KGIpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZCl9LEJlLlVURjE2PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hLmNoYXJDb2RlQXQoYyk7YltiLmxlbmd0aF09ZD4+OCYyNTUsYltiLmxlbmd0aF09MjU1JmR9cmV0dXJuIGJ9LENlLlVURjE2PWZ1bmN0aW9uKGEpe3JldHVybiAyKmEubGVuZ3RofTt2YXIgRGU9e1wieC1tYWMtY3JvYXRpYW5cIjpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsWg4oSiwrTCqOKJoMW9w5jiiJ7CseKJpOKJpeKIhsK14oiC4oiR4oiPxaHiiKvCqsK6zqnFvsO4wr/CocKs4oiaxpLiiYjEhsKrxIzigKbCoMOAw4PDlcWSxZPEkOKAlOKAnOKAneKAmOKAmcO34peK76O/wqnigYTigqzigLnigLrDhsK74oCTwrfigJrigJ7igLDDgsSHw4HEjcOIw43DjsOPw4zDk8OUxJHDksOaw5vDmcSxy4bLnMKvz4DDi8uawrjDisOmy4dcIixcIngtbWFjLWN5cmlsbGljXCI6XCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv4oCgwrDSkMKjwqfigKLCttCGwq7CqeKEotCC0ZLiiaDQg9GT4oiewrHiiaTiiaXRlsK10pHQiNCE0ZTQh9GX0InRmdCK0ZrRmNCFwqziiJrGkuKJiOKIhsKrwrvigKbCoNCL0ZvQjNGc0ZXigJPigJTigJzigJ3igJjigJnDt+KAntCO0Z7Qj9Gf4oSW0IHRkdGP0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y5cIixcIngtbWFjLWdhZWxpY1wiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOG4gsKx4omk4oml4biDxIrEi+G4iuG4i+G4nuG4n8SgxKHhuYDDpsO44bmB4bmW4bmXybzGksW/4bmgwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmeG5oeG6m8O/xbjhuarigqzigLnigLrFtsW34bmrwrfhu7Lhu7PigYrDgsOKw4HDi8OIw43DjsOPw4zDk8OU4pmjw5LDmsObw5nEscOdw73FtMW14bqE4bqF4bqA4bqB4bqC4bqDXCIsXCJ4LW1hYy1ncmVla1wiOlwiw4TCucKyw4nCs8OWw5zOhcOgw6LDpM6EwqjDp8Opw6jDqsOrwqPihKLDrsOv4oCiwr3igLDDtMO2wqbigqzDucO7w7zigKDOk86UzpjOm86ezqDDn8KuwqnOo86qwqfiiaDCsMK3zpHCseKJpOKJpcKlzpLOlc6WzpfOmc6azpzOps6rzqjOqc6szp3CrM6fzqHiiYjOpMKrwrvigKbCoM6lzqfOhs6IxZPigJPigJXigJzigJ3igJjigJnDt86JzorOjM6Ozq3Ors6vz4zOj8+NzrHOss+IzrTOtc+GzrPOt865zr7Ous67zrzOvc6/z4DPjs+Bz4PPhM64z4nPgs+Hz4XOts+Kz4vOkM6wwq1cIixcIngtbWFjLWljZWxhbmRpY1wiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvMOdwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK6zqnDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGE4oKsw5DDsMOew77DvcK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+jv8OSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiLFwieC1tYWMtaW51aXRcIjpcIuGQg+GQhOGQheGQhuGQiuGQi+GQseGQsuGQs+GQtOGQuOGQueGRieGRjuGRj+GRkOGRkeGRleGRluGRpuGRreGRruGRr+GRsOGRsuGRs+GSg+GSi+GSjOGSjeGSjuGSkOGSkcKw4ZKh4ZKl4ZKm4oCiwrbhkqfCrsKp4oSi4ZKo4ZKq4ZKr4ZK74ZOC4ZOD4ZOE4ZOF4ZOH4ZOI4ZOQ4ZOv4ZOw4ZOx4ZOy4ZO04ZO14ZSF4ZOV4ZOW4ZOX4ZOY4ZOa4ZOb4ZOq4ZSo4ZSp4ZSq4ZSr4ZSt4oCmwqDhlK7hlL7hlZXhlZbhlZfigJPigJTigJzigJ3igJjigJnhlZjhlZnhlZrhlZ3hlYbhlYfhlYjhlYnhlYvhlYzhlZDhlb/hloDhloHhloLhloPhloThloXhlo/hlpDhlpHhlpLhlpPhlpThlpXhmbHhmbLhmbPhmbThmbXhmbbhlpbhlqDhlqHhlqLhlqPhlqThlqXhlqbhlbzFgcWCXCIsXCJ4LW1hYy1jZVwiOlwiw4TEgMSBw4nEhMOWw5zDocSFxIzDpMSNxIbEh8OpxbnFusSOw63Ej8SSxJPElsOzxJfDtMO2w7XDusSaxJvDvOKAoMKwxJjCo8Kn4oCiwrbDn8KuwqnihKLEmcKo4omgxKPErsSvxKriiaTiiaXEq8S24oiC4oiRxYLEu8S8xL3EvsS5xLrFhcWGxYPCrOKImsWExYfiiIbCq8K74oCmwqDFiMWQw5XFkcWM4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rFjcWUxZXFmOKAueKAusWZxZbFl8Wg4oCa4oCexaHFmsWbw4HFpMWlw43FvcW+xarDk8OUxavFrsOaxa/FsMWxxbLFs8Odw73Et8W7xYHFvMSiy4dcIixtYWNpbnRvc2g6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK6zqnDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGE4oKs4oC54oC676yB76yC4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU76O/w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCIsXCJ4LW1hYy1yb21hbmlhblwiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgxILImOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCus6pxIPImcK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhOKCrOKAueKAusiayJvigKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvo7/DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIixcIngtbWFjLXR1cmtpc2hcIjpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrOqcOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjEnsSfxLDEscWexZ/igKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvo7/DksOaw5vDme+ioMuGy5zCr8uYy5nLmsK4y53Lm8uHXCJ9O0FlLk1BQ1NUUklORz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1EZVtkXTtpZih2b2lkIDAhPT1lKXtmb3IodmFyIGY9XCJcIixnPTA7ZzxjO2crKyl7dmFyIGg9YS5nZXRVaW50OChiK2cpO2YrPWg8PTEyNz9TdHJpbmcuZnJvbUNoYXJDb2RlKGgpOmVbMTI3JmhdfXJldHVybiBmfX07dmFyIEVlLEZlPVwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtNYXAmJm5ldyBXZWFrTWFwLEdlPWZ1bmN0aW9uKGEpe2lmKCFFZSl7RWU9e307Zm9yKHZhciBiIGluIERlKUVlW2JdPW5ldyBTdHJpbmcoYil9dmFyIGM9RWVbYV07aWYodm9pZCAwIT09Yyl7aWYoRmUpe3ZhciBkPUZlLmdldChjKTtpZih2b2lkIDAhPT1kKXJldHVybiBkfXZhciBlPURlW2FdO2lmKHZvaWQgMCE9PWUpe2Zvcih2YXIgZj17fSxnPTA7ZzxlLmxlbmd0aDtnKyspZltlLmNoYXJDb2RlQXQoZyldPWcrMTI4O3JldHVybiBGZSYmRmUuc2V0KGMsZiksZn19fTtCZS5NQUNTVFJJTkc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1HZShiKTtpZih2b2lkIDAhPT1jKXtmb3IodmFyIGQ9W10sZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNoYXJDb2RlQXQoZSk7aWYoZj49MTI4JiZ2b2lkIDA9PT0oZj1jW2ZdKSlyZXR1cm47ZFtlXT1mfXJldHVybiBkfX0sQ2UuTUFDU1RSSU5HPWZ1bmN0aW9uKGEsYil7dmFyIGM9QmUuTUFDU1RSSU5HKGEsYik7cmV0dXJuIHZvaWQgMCE9PWM/Yy5sZW5ndGg6MH0sQmUuVkFSREVMVEFTPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9W107YjxhLmxlbmd0aDspe3ZhciBkPWFbYl07Yj0wPT09ZD93KGEsYixjKTpkPj0tMTI4JiZkPD0xMjc/eChhLGIsYyk6eShhLGIsYyl9cmV0dXJuIGN9LEJlLklOREVYPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0xLGM9W2JdLGQ9W10sZT0wO2U8YS5sZW5ndGg7ZSs9MSl7dmFyIGY9QmUuT0JKRUNUKGFbZV0pO0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGQsZiksYis9Zi5sZW5ndGgsYy5wdXNoKGIpfWlmKDA9PT1kLmxlbmd0aClyZXR1cm5bMCwwXTtmb3IodmFyIGc9W10saD0xK01hdGguZmxvb3IoTWF0aC5sb2coYikvTWF0aC5sb2coMikpLzh8MCxpPVt2b2lkIDAsQmUuQllURSxCZS5VU0hPUlQsQmUuVUlOVDI0LEJlLlVMT05HXVtoXSxqPTA7ajxjLmxlbmd0aDtqKz0xKXt2YXIgaz1pKGNbal0pO0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGcsayl9cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQoQmUuQ2FyZDE2KGEubGVuZ3RoKSxCZS5PZmZTaXplKGgpLGcsZCl9LENlLklOREVYPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5JTkRFWChhKS5sZW5ndGh9LEJlLkRJQ1Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9T2JqZWN0LmtleXMoYSksZD1jLmxlbmd0aCxlPTA7ZTxkO2UrPTEpe3ZhciBmPXBhcnNlSW50KGNbZV0sMCksZz1hW2ZdO2I9Yi5jb25jYXQoQmUuT1BFUkFORChnLnZhbHVlLGcudHlwZSkpLGI9Yi5jb25jYXQoQmUuT1BFUkFUT1IoZikpfXJldHVybiBifSxDZS5ESUNUPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5ESUNUKGEpLmxlbmd0aH0sQmUuT1BFUkFUT1I9ZnVuY3Rpb24oYSl7cmV0dXJuIGE8MTIwMD9bYV06WzEyLGEtMTIwMF19LEJlLk9QRVJBTkQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtpZihBcnJheS5pc0FycmF5KGIpKWZvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCs9MSl4ZS5hcmd1bWVudChhLmxlbmd0aD09PWIubGVuZ3RoLFwiTm90IGVub3VnaCBhcmd1bWVudHMgZ2l2ZW4gZm9yIHR5cGVcIitiKSxjPWMuY29uY2F0KEJlLk9QRVJBTkQoYVtkXSxiW2RdKSk7ZWxzZSBpZihcIlNJRFwiPT09YiljPWMuY29uY2F0KEJlLk5VTUJFUihhKSk7ZWxzZSBpZihcIm9mZnNldFwiPT09YiljPWMuY29uY2F0KEJlLk5VTUJFUjMyKGEpKTtlbHNlIGlmKFwibnVtYmVyXCI9PT1iKWM9Yy5jb25jYXQoQmUuTlVNQkVSKGEpKTtlbHNle2lmKFwicmVhbFwiIT09Yil0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG9wZXJhbmQgdHlwZSBcIitiKTtjPWMuY29uY2F0KEJlLlJFQUwoYSkpfXJldHVybiBjfSxCZS5PUD1CZS5CWVRFLENlLk9QPUNlLkJZVEU7dmFyIEhlPVwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtNYXAmJm5ldyBXZWFrTWFwO0JlLkNIQVJTVFJJTkc9ZnVuY3Rpb24oYSl7aWYoSGUpe3ZhciBiPUhlLmdldChhKTtpZih2b2lkIDAhPT1iKXJldHVybiBifWZvcih2YXIgYz1bXSxkPWEubGVuZ3RoLGU9MDtlPGQ7ZSs9MSl7dmFyIGY9YVtlXTtjPWMuY29uY2F0KEJlW2YudHlwZV0oZi52YWx1ZSkpfXJldHVybiBIZSYmSGUuc2V0KGEsYyksY30sQ2UuQ0hBUlNUUklORz1mdW5jdGlvbihhKXtyZXR1cm4gQmUuQ0hBUlNUUklORyhhKS5sZW5ndGh9LEJlLk9CSkVDVD1mdW5jdGlvbihhKXt2YXIgYj1CZVthLnR5cGVdO3JldHVybiB4ZS5hcmd1bWVudCh2b2lkIDAhPT1iLFwiTm8gZW5jb2RpbmcgZnVuY3Rpb24gZm9yIHR5cGUgXCIrYS50eXBlKSxiKGEudmFsdWUpfSxDZS5PQkpFQ1Q9ZnVuY3Rpb24oYSl7dmFyIGI9Q2VbYS50eXBlXTtyZXR1cm4geGUuYXJndW1lbnQodm9pZCAwIT09YixcIk5vIHNpemVPZiBmdW5jdGlvbiBmb3IgdHlwZSBcIithLnR5cGUpLGIoYS52YWx1ZSl9LEJlLlRBQkxFPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPWEuZmllbGRzLmxlbmd0aCxkPVtdLGU9W10sZj0wO2Y8YztmKz0xKXt2YXIgZz1hLmZpZWxkc1tmXSxoPUJlW2cudHlwZV07eGUuYXJndW1lbnQodm9pZCAwIT09aCxcIk5vIGVuY29kaW5nIGZ1bmN0aW9uIGZvciBmaWVsZCB0eXBlIFwiK2cudHlwZStcIiAoXCIrZy5uYW1lK1wiKVwiKTt2YXIgaT1hW2cubmFtZV07dm9pZCAwPT09aSYmKGk9Zy52YWx1ZSk7dmFyIGo9aChpKTtcIlRBQkxFXCI9PT1nLnR5cGU/KGUucHVzaChiLmxlbmd0aCksYj1iLmNvbmNhdChbMCwwXSksZC5wdXNoKGopKTpiPWIuY29uY2F0KGopfWZvcih2YXIgaz0wO2s8ZC5sZW5ndGg7ays9MSl7dmFyIGw9ZVtrXSxtPWIubGVuZ3RoO3hlLmFyZ3VtZW50KG08NjU1MzYsXCJUYWJsZSBcIithLnRhYmxlTmFtZStcIiB0b28gYmlnLlwiKSxiW2xdPW0+PjgsYltsKzFdPTI1NSZtLGI9Yi5jb25jYXQoZFtrXSl9cmV0dXJuIGJ9LENlLlRBQkxFPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9YS5maWVsZHMubGVuZ3RoLGQ9MDtkPGM7ZCs9MSl7dmFyIGU9YS5maWVsZHNbZF0sZj1DZVtlLnR5cGVdO3hlLmFyZ3VtZW50KHZvaWQgMCE9PWYsXCJObyBzaXplT2YgZnVuY3Rpb24gZm9yIGZpZWxkIHR5cGUgXCIrZS50eXBlK1wiIChcIitlLm5hbWUrXCIpXCIpO3ZhciBnPWFbZS5uYW1lXTt2b2lkIDA9PT1nJiYoZz1lLnZhbHVlKSxiKz1mKGcpLFwiVEFCTEVcIj09PWUudHlwZSYmKGIrPTIpfXJldHVybiBifSxCZS5SRUNPUkQ9QmUuVEFCTEUsQ2UuUkVDT1JEPUNlLlRBQkxFLEJlLkxJVEVSQUw9ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LENlLkxJVEVSQUw9ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSx6LnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gQmUuVEFCTEUodGhpcyl9LHoucHJvdG90eXBlLnNpemVPZj1mdW5jdGlvbigpe3JldHVybiBDZS5UQUJMRSh0aGlzKX0sRC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6LnByb3RvdHlwZSksRC5wcm90b3R5cGUuY29uc3RydWN0b3I9RCxFLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHoucHJvdG90eXBlKSxFLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FLEYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoei5wcm90b3R5cGUpLEYucHJvdG90eXBlLmNvbnN0cnVjdG9yPUYsRy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6LnByb3RvdHlwZSksRy5wcm90b3R5cGUuY29uc3RydWN0b3I9Rzt2YXIgSWU9e1RhYmxlOnosUmVjb3JkOnosQ292ZXJhZ2U6RCxTY3JpcHRMaXN0OkUsRmVhdHVyZUxpc3Q6RixMb29rdXBMaXN0OkcsdXNob3J0TGlzdDpBLHRhYmxlTGlzdDpCLHJlY29yZExpc3Q6Q30sSmU9e2J5dGU6MSx1U2hvcnQ6MixzaG9ydDoyLHVMb25nOjQsZml4ZWQ6NCxsb25nRGF0ZVRpbWU6OCx0YWc6NH07US5wcm90b3R5cGUucGFyc2VCeXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldFVpbnQ4KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0xLGF9LFEucHJvdG90eXBlLnBhcnNlQ2hhcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YS5nZXRJbnQ4KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0xLGF9LFEucHJvdG90eXBlLnBhcnNlQ2FyZDg9US5wcm90b3R5cGUucGFyc2VCeXRlLFEucHJvdG90eXBlLnBhcnNlVVNob3J0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldFVpbnQxNih0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MixhfSxRLnByb3RvdHlwZS5wYXJzZUNhcmQxNj1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydCxRLnByb3RvdHlwZS5wYXJzZVNJRD1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydCxRLnByb3RvdHlwZS5wYXJzZU9mZnNldDE2PVEucHJvdG90eXBlLnBhcnNlVVNob3J0LFEucHJvdG90eXBlLnBhcnNlU2hvcnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0SW50MTYodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIsYX0sUS5wcm90b3R5cGUucGFyc2VGMkRvdDE0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldEludDE2KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpLzE2Mzg0O3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yLGF9LFEucHJvdG90eXBlLnBhcnNlVUxvbmc9ZnVuY3Rpb24oKXt2YXIgYT1LKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9NCxhfSxRLnByb3RvdHlwZS5wYXJzZU9mZnNldDMyPVEucHJvdG90eXBlLnBhcnNlVUxvbmcsUS5wcm90b3R5cGUucGFyc2VGaXhlZD1mdW5jdGlvbigpe3ZhciBhPUwodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz00LGF9LFEucHJvdG90eXBlLnBhcnNlU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZGF0YSxjPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZD1cIlwiO3RoaXMucmVsYXRpdmVPZmZzZXQrPWE7Zm9yKHZhciBlPTA7ZTxhO2UrKylkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGIuZ2V0VWludDgoYytlKSk7cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlVGFnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VTdHJpbmcoNCl9LFEucHJvdG90eXBlLnBhcnNlTG9uZ0RhdGVUaW1lPWZ1bmN0aW9uKCl7dmFyIGE9Syh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCs0KTtyZXR1cm4gYS09MjA4Mjg0NDgwMCx0aGlzLnJlbGF0aXZlT2Zmc2V0Kz04LGF9LFEucHJvdG90eXBlLnBhcnNlVmVyc2lvbj1mdW5jdGlvbihhKXt2YXIgYj1JKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KSxjPUkodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQrMik7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTQsdm9pZCAwPT09YSYmKGE9NDA5NiksYitjL2EvMTB9LFEucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0xKSx0aGlzLnJlbGF0aXZlT2Zmc2V0Kz1KZVthXSpifSxRLnByb3RvdHlwZS5wYXJzZVVMb25nTGlzdD1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT10aGlzLnBhcnNlVUxvbmcoKSk7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldFVpbnQzMihkKSxkKz00O3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz00KmEsYn0sUS5wcm90b3R5cGUucGFyc2VPZmZzZXQxNkxpc3Q9US5wcm90b3R5cGUucGFyc2VVU2hvcnRMaXN0PWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMucGFyc2VVU2hvcnQoKSk7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldFVpbnQxNihkKSxkKz0yO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yKmEsYn0sUS5wcm90b3R5cGUucGFyc2VTaG9ydExpc3Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldEludDE2KGQpLGQrPTI7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIqYSxifSxRLnByb3RvdHlwZS5wYXJzZUJ5dGVMaXN0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1uZXcgQXJyYXkoYSksYz10aGlzLmRhdGEsZD10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGU9MDtlPGE7ZSsrKWJbZV09Yy5nZXRVaW50OChkKyspO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz1hLGJ9LFEucHJvdG90eXBlLnBhcnNlTGlzdD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Ynx8KGI9YSxhPXRoaXMucGFyc2VVU2hvcnQoKSk7Zm9yKHZhciBkPW5ldyBBcnJheShhKSxlPTA7ZTxhO2UrKylkW2VdPWIuY2FsbChjKTtyZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VMaXN0MzI9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2J8fChiPWEsYT10aGlzLnBhcnNlVUxvbmcoKSk7Zm9yKHZhciBkPW5ldyBBcnJheShhKSxlPTA7ZTxhO2UrKylkW2VdPWIuY2FsbChjKTtyZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VSZWNvcmRMaXN0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztifHwoYj1hLGE9dGhpcy5wYXJzZVVTaG9ydCgpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9T2JqZWN0LmtleXMoYiksZj0wO2Y8YTtmKyspe2Zvcih2YXIgZz17fSxoPTA7aDxlLmxlbmd0aDtoKyspe3ZhciBpPWVbaF0saj1iW2ldO2dbaV09ai5jYWxsKGMpfWRbZl09Z31yZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VSZWNvcmRMaXN0MzI9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2J8fChiPWEsYT10aGlzLnBhcnNlVUxvbmcoKSk7Zm9yKHZhciBkPW5ldyBBcnJheShhKSxlPU9iamVjdC5rZXlzKGIpLGY9MDtmPGE7ZisrKXtmb3IodmFyIGc9e30saD0wO2g8ZS5sZW5ndGg7aCsrKXt2YXIgaT1lW2hdLGo9YltpXTtnW2ldPWouY2FsbChjKX1kW2ZdPWd9cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlU3RydWN0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSlyZXR1cm4gYS5jYWxsKHRoaXMpO2Zvcih2YXIgYz1PYmplY3Qua2V5cyhhKSxkPXt9LGU9MDtlPGMubGVuZ3RoO2UrKyl7dmFyIGY9Y1tlXSxnPWFbZl07ZFtmXT1nLmNhbGwoYil9cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlVmFsdWVSZWNvcmQ9ZnVuY3Rpb24oYSl7aWYodm9pZCAwPT09YSYmKGE9dGhpcy5wYXJzZVVTaG9ydCgpKSwwIT09YSl7dmFyIGI9e307cmV0dXJuIDEmYSYmKGIueFBsYWNlbWVudD10aGlzLnBhcnNlU2hvcnQoKSksMiZhJiYoYi55UGxhY2VtZW50PXRoaXMucGFyc2VTaG9ydCgpKSw0JmEmJihiLnhBZHZhbmNlPXRoaXMucGFyc2VTaG9ydCgpKSw4JmEmJihiLnlBZHZhbmNlPXRoaXMucGFyc2VTaG9ydCgpKSwxNiZhJiYoYi54UGxhRGV2aWNlPXZvaWQgMCx0aGlzLnBhcnNlU2hvcnQoKSksMzImYSYmKGIueVBsYURldmljZT12b2lkIDAsdGhpcy5wYXJzZVNob3J0KCkpLDY0JmEmJihiLnhBZHZEZXZpY2U9dm9pZCAwLHRoaXMucGFyc2VTaG9ydCgpKSwxMjgmYSYmKGIueUFkdkRldmljZT12b2lkIDAsdGhpcy5wYXJzZVNob3J0KCkpLGJ9fSxRLnByb3RvdHlwZS5wYXJzZVZhbHVlUmVjb3JkTGlzdD1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLGI9dGhpcy5wYXJzZVVTaG9ydCgpLGM9dGhpcy5wYXJzZVVTaG9ydCgpLGQ9bmV3IEFycmF5KGMpLGU9MDtlPGM7ZSsrKWRbZV09YS5wYXJzZVZhbHVlUmVjb3JkKGIpO3JldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVBvaW50ZXI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wYXJzZU9mZnNldDE2KCk7aWYoYj4wKXJldHVybiBuZXcgUSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrYikucGFyc2VTdHJ1Y3QoYSl9LFEucHJvdG90eXBlLnBhcnNlUG9pbnRlcjMyPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucGFyc2VPZmZzZXQzMigpO2lmKGI+MClyZXR1cm4gbmV3IFEodGhpcy5kYXRhLHRoaXMub2Zmc2V0K2IpLnBhcnNlU3RydWN0KGEpfSxRLnByb3RvdHlwZS5wYXJzZUxpc3RPZkxpc3RzPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLGM9dGhpcy5wYXJzZU9mZnNldDE2TGlzdCgpLGQ9Yy5sZW5ndGgsZT10aGlzLnJlbGF0aXZlT2Zmc2V0LGY9bmV3IEFycmF5KGQpLGc9MDtnPGQ7ZysrKXt2YXIgaD1jW2ddO2lmKDAhPT1oKWlmKGIucmVsYXRpdmVPZmZzZXQ9aCxhKXtmb3IodmFyIGk9Yi5wYXJzZU9mZnNldDE2TGlzdCgpLGo9bmV3IEFycmF5KGkubGVuZ3RoKSxrPTA7azxpLmxlbmd0aDtrKyspYi5yZWxhdGl2ZU9mZnNldD1oK2lba10saltrXT1hLmNhbGwoYik7ZltnXT1qfWVsc2UgZltnXT1iLnBhcnNlVVNob3J0TGlzdCgpO2Vsc2UgZltnXT12b2lkIDB9cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQ9ZSxmfSxRLnByb3RvdHlwZS5wYXJzZUNvdmVyYWdlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYz10aGlzLnBhcnNlVVNob3J0KCksZD10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWMpcmV0dXJue2Zvcm1hdDoxLGdseXBoczp0aGlzLnBhcnNlVVNob3J0TGlzdChkKX07aWYoMj09PWMpe2Zvcih2YXIgZT1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspZVtmXT17c3RhcnQ6YS5wYXJzZVVTaG9ydCgpLGVuZDphLnBhcnNlVVNob3J0KCksaW5kZXg6YS5wYXJzZVVTaG9ydCgpfTtyZXR1cm57Zm9ybWF0OjIscmFuZ2VzOmV9fXRocm93IG5ldyBFcnJvcihcIjB4XCIrYi50b1N0cmluZygxNikrXCI6IENvdmVyYWdlIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIil9LFEucHJvdG90eXBlLnBhcnNlQ2xhc3NEZWY9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO2lmKDE9PT1iKXJldHVybntmb3JtYXQ6MSxzdGFydEdseXBoOnRoaXMucGFyc2VVU2hvcnQoKSxjbGFzc2VzOnRoaXMucGFyc2VVU2hvcnRMaXN0KCl9O2lmKDI9PT1iKXJldHVybntmb3JtYXQ6MixyYW5nZXM6dGhpcy5wYXJzZVJlY29yZExpc3Qoe3N0YXJ0OlEudVNob3J0LGVuZDpRLnVTaG9ydCxjbGFzc0lkOlEudVNob3J0fSl9O3Rocm93IG5ldyBFcnJvcihcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IENsYXNzRGVmIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIil9LFEubGlzdD1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlTGlzdChhLGIpfX0sUS5saXN0MzI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZUxpc3QzMihhLGIpfX0sUS5yZWNvcmRMaXN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VSZWNvcmRMaXN0KGEsYil9fSxRLnJlY29yZExpc3QzMj1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUmVjb3JkTGlzdDMyKGEsYil9fSxRLnBvaW50ZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyKGEpfX0sUS5wb2ludGVyMzI9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyMzIoYSl9fSxRLnRhZz1RLnByb3RvdHlwZS5wYXJzZVRhZyxRLmJ5dGU9US5wcm90b3R5cGUucGFyc2VCeXRlLFEudVNob3J0PVEub2Zmc2V0MTY9US5wcm90b3R5cGUucGFyc2VVU2hvcnQsUS51U2hvcnRMaXN0PVEucHJvdG90eXBlLnBhcnNlVVNob3J0TGlzdCxRLnVMb25nPVEub2Zmc2V0MzI9US5wcm90b3R5cGUucGFyc2VVTG9uZyxRLnVMb25nTGlzdD1RLnByb3RvdHlwZS5wYXJzZVVMb25nTGlzdCxRLnN0cnVjdD1RLnByb3RvdHlwZS5wYXJzZVN0cnVjdCxRLmNvdmVyYWdlPVEucHJvdG90eXBlLnBhcnNlQ292ZXJhZ2UsUS5jbGFzc0RlZj1RLnByb3RvdHlwZS5wYXJzZUNsYXNzRGVmO3ZhciBLZT17cmVzZXJ2ZWQ6US51U2hvcnQscmVxRmVhdHVyZUluZGV4OlEudVNob3J0LGZlYXR1cmVJbmRleGVzOlEudVNob3J0TGlzdH07US5wcm90b3R5cGUucGFyc2VTY3JpcHRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyKFEucmVjb3JkTGlzdCh7dGFnOlEudGFnLHNjcmlwdDpRLnBvaW50ZXIoe2RlZmF1bHRMYW5nU3lzOlEucG9pbnRlcihLZSksbGFuZ1N5c1JlY29yZHM6US5yZWNvcmRMaXN0KHt0YWc6US50YWcsbGFuZ1N5czpRLnBvaW50ZXIoS2UpfSl9KX0pKXx8W119LFEucHJvdG90eXBlLnBhcnNlRmVhdHVyZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoUS5yZWNvcmRMaXN0KHt0YWc6US50YWcsZmVhdHVyZTpRLnBvaW50ZXIoe2ZlYXR1cmVQYXJhbXM6US5vZmZzZXQxNixsb29rdXBMaXN0SW5kZXhlczpRLnVTaG9ydExpc3R9KX0pKXx8W119LFEucHJvdG90eXBlLnBhcnNlTG9va3VwTGlzdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoUS5saXN0KFEucG9pbnRlcihmdW5jdGlvbigpe3ZhciBiPXRoaXMucGFyc2VVU2hvcnQoKTt4ZS5hcmd1bWVudCgxPD1iJiZiPD05LFwiR1BPUy9HU1VCIGxvb2t1cCB0eXBlIFwiK2IrXCIgdW5rbm93bi5cIik7dmFyIGM9dGhpcy5wYXJzZVVTaG9ydCgpLGQ9MTYmYztyZXR1cm57bG9va3VwVHlwZTpiLGxvb2t1cEZsYWc6YyxzdWJ0YWJsZXM6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKGFbYl0pKSxtYXJrRmlsdGVyaW5nU2V0OmQ/dGhpcy5wYXJzZVVTaG9ydCgpOnZvaWQgMH19KSkpfHxbXX0sUS5wcm90b3R5cGUucGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIzMihmdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKSxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWEmJmI8MSxcIkdQT1MvR1NVQiBmZWF0dXJlIHZhcmlhdGlvbnMgdGFibGUgdW5rbm93bi5cIiksdGhpcy5wYXJzZVJlY29yZExpc3QzMih7Y29uZGl0aW9uU2V0T2Zmc2V0OlEub2Zmc2V0MzIsZmVhdHVyZVRhYmxlU3Vic3RpdHV0aW9uT2Zmc2V0OlEub2Zmc2V0MzJ9KX0pfHxbXX07dmFyIExlPXtnZXRCeXRlOkgsZ2V0Q2FyZDg6SCxnZXRVU2hvcnQ6SSxnZXRDYXJkMTY6SSxnZXRTaG9ydDpKLGdldFVMb25nOkssZ2V0Rml4ZWQ6TCxnZXRUYWc6TSxnZXRPZmZzZXQ6TixnZXRCeXRlczpPLGJ5dGVzVG9TdHJpbmc6UCxQYXJzZXI6UX0sTWU9e3BhcnNlOlQsbWFrZTpXfSxOZT1bXCIubm90ZGVmXCIsXCJzcGFjZVwiLFwiZXhjbGFtXCIsXCJxdW90ZWRibFwiLFwibnVtYmVyc2lnblwiLFwiZG9sbGFyXCIsXCJwZXJjZW50XCIsXCJhbXBlcnNhbmRcIixcInF1b3RlcmlnaHRcIixcInBhcmVubGVmdFwiLFwicGFyZW5yaWdodFwiLFwiYXN0ZXJpc2tcIixcInBsdXNcIixcImNvbW1hXCIsXCJoeXBoZW5cIixcInBlcmlvZFwiLFwic2xhc2hcIixcInplcm9cIixcIm9uZVwiLFwidHdvXCIsXCJ0aHJlZVwiLFwiZm91clwiLFwiZml2ZVwiLFwic2l4XCIsXCJzZXZlblwiLFwiZWlnaHRcIixcIm5pbmVcIixcImNvbG9uXCIsXCJzZW1pY29sb25cIixcImxlc3NcIixcImVxdWFsXCIsXCJncmVhdGVyXCIsXCJxdWVzdGlvblwiLFwiYXRcIixcIkFcIixcIkJcIixcIkNcIixcIkRcIixcIkVcIixcIkZcIixcIkdcIixcIkhcIixcIklcIixcIkpcIixcIktcIixcIkxcIixcIk1cIixcIk5cIixcIk9cIixcIlBcIixcIlFcIixcIlJcIixcIlNcIixcIlRcIixcIlVcIixcIlZcIixcIldcIixcIlhcIixcIllcIixcIlpcIixcImJyYWNrZXRsZWZ0XCIsXCJiYWNrc2xhc2hcIixcImJyYWNrZXRyaWdodFwiLFwiYXNjaWljaXJjdW1cIixcInVuZGVyc2NvcmVcIixcInF1b3RlbGVmdFwiLFwiYVwiLFwiYlwiLFwiY1wiLFwiZFwiLFwiZVwiLFwiZlwiLFwiZ1wiLFwiaFwiLFwiaVwiLFwialwiLFwia1wiLFwibFwiLFwibVwiLFwiblwiLFwib1wiLFwicFwiLFwicVwiLFwiclwiLFwic1wiLFwidFwiLFwidVwiLFwidlwiLFwid1wiLFwieFwiLFwieVwiLFwielwiLFwiYnJhY2VsZWZ0XCIsXCJiYXJcIixcImJyYWNlcmlnaHRcIixcImFzY2lpdGlsZGVcIixcImV4Y2xhbWRvd25cIixcImNlbnRcIixcInN0ZXJsaW5nXCIsXCJmcmFjdGlvblwiLFwieWVuXCIsXCJmbG9yaW5cIixcInNlY3Rpb25cIixcImN1cnJlbmN5XCIsXCJxdW90ZXNpbmdsZVwiLFwicXVvdGVkYmxsZWZ0XCIsXCJndWlsbGVtb3RsZWZ0XCIsXCJndWlsc2luZ2xsZWZ0XCIsXCJndWlsc2luZ2xyaWdodFwiLFwiZmlcIixcImZsXCIsXCJlbmRhc2hcIixcImRhZ2dlclwiLFwiZGFnZ2VyZGJsXCIsXCJwZXJpb2RjZW50ZXJlZFwiLFwicGFyYWdyYXBoXCIsXCJidWxsZXRcIixcInF1b3Rlc2luZ2xiYXNlXCIsXCJxdW90ZWRibGJhc2VcIixcInF1b3RlZGJscmlnaHRcIixcImd1aWxsZW1vdHJpZ2h0XCIsXCJlbGxpcHNpc1wiLFwicGVydGhvdXNhbmRcIixcInF1ZXN0aW9uZG93blwiLFwiZ3JhdmVcIixcImFjdXRlXCIsXCJjaXJjdW1mbGV4XCIsXCJ0aWxkZVwiLFwibWFjcm9uXCIsXCJicmV2ZVwiLFwiZG90YWNjZW50XCIsXCJkaWVyZXNpc1wiLFwicmluZ1wiLFwiY2VkaWxsYVwiLFwiaHVuZ2FydW1sYXV0XCIsXCJvZ29uZWtcIixcImNhcm9uXCIsXCJlbWRhc2hcIixcIkFFXCIsXCJvcmRmZW1pbmluZVwiLFwiTHNsYXNoXCIsXCJPc2xhc2hcIixcIk9FXCIsXCJvcmRtYXNjdWxpbmVcIixcImFlXCIsXCJkb3RsZXNzaVwiLFwibHNsYXNoXCIsXCJvc2xhc2hcIixcIm9lXCIsXCJnZXJtYW5kYmxzXCIsXCJvbmVzdXBlcmlvclwiLFwibG9naWNhbG5vdFwiLFwibXVcIixcInRyYWRlbWFya1wiLFwiRXRoXCIsXCJvbmVoYWxmXCIsXCJwbHVzbWludXNcIixcIlRob3JuXCIsXCJvbmVxdWFydGVyXCIsXCJkaXZpZGVcIixcImJyb2tlbmJhclwiLFwiZGVncmVlXCIsXCJ0aG9yblwiLFwidGhyZWVxdWFydGVyc1wiLFwidHdvc3VwZXJpb3JcIixcInJlZ2lzdGVyZWRcIixcIm1pbnVzXCIsXCJldGhcIixcIm11bHRpcGx5XCIsXCJ0aHJlZXN1cGVyaW9yXCIsXCJjb3B5cmlnaHRcIixcIkFhY3V0ZVwiLFwiQWNpcmN1bWZsZXhcIixcIkFkaWVyZXNpc1wiLFwiQWdyYXZlXCIsXCJBcmluZ1wiLFwiQXRpbGRlXCIsXCJDY2VkaWxsYVwiLFwiRWFjdXRlXCIsXCJFY2lyY3VtZmxleFwiLFwiRWRpZXJlc2lzXCIsXCJFZ3JhdmVcIixcIklhY3V0ZVwiLFwiSWNpcmN1bWZsZXhcIixcIklkaWVyZXNpc1wiLFwiSWdyYXZlXCIsXCJOdGlsZGVcIixcIk9hY3V0ZVwiLFwiT2NpcmN1bWZsZXhcIixcIk9kaWVyZXNpc1wiLFwiT2dyYXZlXCIsXCJPdGlsZGVcIixcIlNjYXJvblwiLFwiVWFjdXRlXCIsXCJVY2lyY3VtZmxleFwiLFwiVWRpZXJlc2lzXCIsXCJVZ3JhdmVcIixcIllhY3V0ZVwiLFwiWWRpZXJlc2lzXCIsXCJaY2Fyb25cIixcImFhY3V0ZVwiLFwiYWNpcmN1bWZsZXhcIixcImFkaWVyZXNpc1wiLFwiYWdyYXZlXCIsXCJhcmluZ1wiLFwiYXRpbGRlXCIsXCJjY2VkaWxsYVwiLFwiZWFjdXRlXCIsXCJlY2lyY3VtZmxleFwiLFwiZWRpZXJlc2lzXCIsXCJlZ3JhdmVcIixcImlhY3V0ZVwiLFwiaWNpcmN1bWZsZXhcIixcImlkaWVyZXNpc1wiLFwiaWdyYXZlXCIsXCJudGlsZGVcIixcIm9hY3V0ZVwiLFwib2NpcmN1bWZsZXhcIixcIm9kaWVyZXNpc1wiLFwib2dyYXZlXCIsXCJvdGlsZGVcIixcInNjYXJvblwiLFwidWFjdXRlXCIsXCJ1Y2lyY3VtZmxleFwiLFwidWRpZXJlc2lzXCIsXCJ1Z3JhdmVcIixcInlhY3V0ZVwiLFwieWRpZXJlc2lzXCIsXCJ6Y2Fyb25cIixcImV4Y2xhbXNtYWxsXCIsXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLFwiZG9sbGFyb2xkc3R5bGVcIixcImRvbGxhcnN1cGVyaW9yXCIsXCJhbXBlcnNhbmRzbWFsbFwiLFwiQWN1dGVzbWFsbFwiLFwicGFyZW5sZWZ0c3VwZXJpb3JcIixcInBhcmVucmlnaHRzdXBlcmlvclwiLFwiMjY2IGZmXCIsXCJvbmVkb3RlbmxlYWRlclwiLFwiemVyb29sZHN0eWxlXCIsXCJvbmVvbGRzdHlsZVwiLFwidHdvb2xkc3R5bGVcIixcInRocmVlb2xkc3R5bGVcIixcImZvdXJvbGRzdHlsZVwiLFwiZml2ZW9sZHN0eWxlXCIsXCJzaXhvbGRzdHlsZVwiLFwic2V2ZW5vbGRzdHlsZVwiLFwiZWlnaHRvbGRzdHlsZVwiLFwibmluZW9sZHN0eWxlXCIsXCJjb21tYXN1cGVyaW9yXCIsXCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoXCIsXCJwZXJpb2RzdXBlcmlvclwiLFwicXVlc3Rpb25zbWFsbFwiLFwiYXN1cGVyaW9yXCIsXCJic3VwZXJpb3JcIixcImNlbnRzdXBlcmlvclwiLFwiZHN1cGVyaW9yXCIsXCJlc3VwZXJpb3JcIixcImlzdXBlcmlvclwiLFwibHN1cGVyaW9yXCIsXCJtc3VwZXJpb3JcIixcIm5zdXBlcmlvclwiLFwib3N1cGVyaW9yXCIsXCJyc3VwZXJpb3JcIixcInNzdXBlcmlvclwiLFwidHN1cGVyaW9yXCIsXCJmZlwiLFwiZmZpXCIsXCJmZmxcIixcInBhcmVubGVmdGluZmVyaW9yXCIsXCJwYXJlbnJpZ2h0aW5mZXJpb3JcIixcIkNpcmN1bWZsZXhzbWFsbFwiLFwiaHlwaGVuc3VwZXJpb3JcIixcIkdyYXZlc21hbGxcIixcIkFzbWFsbFwiLFwiQnNtYWxsXCIsXCJDc21hbGxcIixcIkRzbWFsbFwiLFwiRXNtYWxsXCIsXCJGc21hbGxcIixcIkdzbWFsbFwiLFwiSHNtYWxsXCIsXCJJc21hbGxcIixcIkpzbWFsbFwiLFwiS3NtYWxsXCIsXCJMc21hbGxcIixcIk1zbWFsbFwiLFwiTnNtYWxsXCIsXCJPc21hbGxcIixcIlBzbWFsbFwiLFwiUXNtYWxsXCIsXCJSc21hbGxcIixcIlNzbWFsbFwiLFwiVHNtYWxsXCIsXCJVc21hbGxcIixcIlZzbWFsbFwiLFwiV3NtYWxsXCIsXCJYc21hbGxcIixcIllzbWFsbFwiLFwiWnNtYWxsXCIsXCJjb2xvbm1vbmV0YXJ5XCIsXCJvbmVmaXR0ZWRcIixcInJ1cGlhaFwiLFwiVGlsZGVzbWFsbFwiLFwiZXhjbGFtZG93bnNtYWxsXCIsXCJjZW50b2xkc3R5bGVcIixcIkxzbGFzaHNtYWxsXCIsXCJTY2Fyb25zbWFsbFwiLFwiWmNhcm9uc21hbGxcIixcIkRpZXJlc2lzc21hbGxcIixcIkJyZXZlc21hbGxcIixcIkNhcm9uc21hbGxcIixcIkRvdGFjY2VudHNtYWxsXCIsXCJNYWNyb25zbWFsbFwiLFwiZmlndXJlZGFzaFwiLFwiaHlwaGVuaW5mZXJpb3JcIixcIk9nb25la3NtYWxsXCIsXCJSaW5nc21hbGxcIixcIkNlZGlsbGFzbWFsbFwiLFwicXVlc3Rpb25kb3duc21hbGxcIixcIm9uZWVpZ2h0aFwiLFwidGhyZWVlaWdodGhzXCIsXCJmaXZlZWlnaHRoc1wiLFwic2V2ZW5laWdodGhzXCIsXCJvbmV0aGlyZFwiLFwidHdvdGhpcmRzXCIsXCJ6ZXJvc3VwZXJpb3JcIixcImZvdXJzdXBlcmlvclwiLFwiZml2ZXN1cGVyaW9yXCIsXCJzaXhzdXBlcmlvclwiLFwic2V2ZW5zdXBlcmlvclwiLFwiZWlnaHRzdXBlcmlvclwiLFwibmluZXN1cGVyaW9yXCIsXCJ6ZXJvaW5mZXJpb3JcIixcIm9uZWluZmVyaW9yXCIsXCJ0d29pbmZlcmlvclwiLFwidGhyZWVpbmZlcmlvclwiLFwiZm91cmluZmVyaW9yXCIsXCJmaXZlaW5mZXJpb3JcIixcInNpeGluZmVyaW9yXCIsXCJzZXZlbmluZmVyaW9yXCIsXCJlaWdodGluZmVyaW9yXCIsXCJuaW5laW5mZXJpb3JcIixcImNlbnRpbmZlcmlvclwiLFwiZG9sbGFyaW5mZXJpb3JcIixcInBlcmlvZGluZmVyaW9yXCIsXCJjb21tYWluZmVyaW9yXCIsXCJBZ3JhdmVzbWFsbFwiLFwiQWFjdXRlc21hbGxcIixcIkFjaXJjdW1mbGV4c21hbGxcIixcIkF0aWxkZXNtYWxsXCIsXCJBZGllcmVzaXNzbWFsbFwiLFwiQXJpbmdzbWFsbFwiLFwiQUVzbWFsbFwiLFwiQ2NlZGlsbGFzbWFsbFwiLFwiRWdyYXZlc21hbGxcIixcIkVhY3V0ZXNtYWxsXCIsXCJFY2lyY3VtZmxleHNtYWxsXCIsXCJFZGllcmVzaXNzbWFsbFwiLFwiSWdyYXZlc21hbGxcIixcIklhY3V0ZXNtYWxsXCIsXCJJY2lyY3VtZmxleHNtYWxsXCIsXCJJZGllcmVzaXNzbWFsbFwiLFwiRXRoc21hbGxcIixcIk50aWxkZXNtYWxsXCIsXCJPZ3JhdmVzbWFsbFwiLFwiT2FjdXRlc21hbGxcIixcIk9jaXJjdW1mbGV4c21hbGxcIixcIk90aWxkZXNtYWxsXCIsXCJPZGllcmVzaXNzbWFsbFwiLFwiT0VzbWFsbFwiLFwiT3NsYXNoc21hbGxcIixcIlVncmF2ZXNtYWxsXCIsXCJVYWN1dGVzbWFsbFwiLFwiVWNpcmN1bWZsZXhzbWFsbFwiLFwiVWRpZXJlc2lzc21hbGxcIixcIllhY3V0ZXNtYWxsXCIsXCJUaG9ybnNtYWxsXCIsXCJZZGllcmVzaXNzbWFsbFwiLFwiMDAxLjAwMFwiLFwiMDAxLjAwMVwiLFwiMDAxLjAwMlwiLFwiMDAxLjAwM1wiLFwiQmxhY2tcIixcIkJvbGRcIixcIkJvb2tcIixcIkxpZ2h0XCIsXCJNZWRpdW1cIixcIlJlZ3VsYXJcIixcIlJvbWFuXCIsXCJTZW1pYm9sZFwiXSxPZT1bXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwic3BhY2VcIixcImV4Y2xhbVwiLFwicXVvdGVkYmxcIixcIm51bWJlcnNpZ25cIixcImRvbGxhclwiLFwicGVyY2VudFwiLFwiYW1wZXJzYW5kXCIsXCJxdW90ZXJpZ2h0XCIsXCJwYXJlbmxlZnRcIixcInBhcmVucmlnaHRcIixcImFzdGVyaXNrXCIsXCJwbHVzXCIsXCJjb21tYVwiLFwiaHlwaGVuXCIsXCJwZXJpb2RcIixcInNsYXNoXCIsXCJ6ZXJvXCIsXCJvbmVcIixcInR3b1wiLFwidGhyZWVcIixcImZvdXJcIixcImZpdmVcIixcInNpeFwiLFwic2V2ZW5cIixcImVpZ2h0XCIsXCJuaW5lXCIsXCJjb2xvblwiLFwic2VtaWNvbG9uXCIsXCJsZXNzXCIsXCJlcXVhbFwiLFwiZ3JlYXRlclwiLFwicXVlc3Rpb25cIixcImF0XCIsXCJBXCIsXCJCXCIsXCJDXCIsXCJEXCIsXCJFXCIsXCJGXCIsXCJHXCIsXCJIXCIsXCJJXCIsXCJKXCIsXCJLXCIsXCJMXCIsXCJNXCIsXCJOXCIsXCJPXCIsXCJQXCIsXCJRXCIsXCJSXCIsXCJTXCIsXCJUXCIsXCJVXCIsXCJWXCIsXCJXXCIsXCJYXCIsXCJZXCIsXCJaXCIsXCJicmFja2V0bGVmdFwiLFwiYmFja3NsYXNoXCIsXCJicmFja2V0cmlnaHRcIixcImFzY2lpY2lyY3VtXCIsXCJ1bmRlcnNjb3JlXCIsXCJxdW90ZWxlZnRcIixcImFcIixcImJcIixcImNcIixcImRcIixcImVcIixcImZcIixcImdcIixcImhcIixcImlcIixcImpcIixcImtcIixcImxcIixcIm1cIixcIm5cIixcIm9cIixcInBcIixcInFcIixcInJcIixcInNcIixcInRcIixcInVcIixcInZcIixcIndcIixcInhcIixcInlcIixcInpcIixcImJyYWNlbGVmdFwiLFwiYmFyXCIsXCJicmFjZXJpZ2h0XCIsXCJhc2NpaXRpbGRlXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcImV4Y2xhbWRvd25cIixcImNlbnRcIixcInN0ZXJsaW5nXCIsXCJmcmFjdGlvblwiLFwieWVuXCIsXCJmbG9yaW5cIixcInNlY3Rpb25cIixcImN1cnJlbmN5XCIsXCJxdW90ZXNpbmdsZVwiLFwicXVvdGVkYmxsZWZ0XCIsXCJndWlsbGVtb3RsZWZ0XCIsXCJndWlsc2luZ2xsZWZ0XCIsXCJndWlsc2luZ2xyaWdodFwiLFwiZmlcIixcImZsXCIsXCJcIixcImVuZGFzaFwiLFwiZGFnZ2VyXCIsXCJkYWdnZXJkYmxcIixcInBlcmlvZGNlbnRlcmVkXCIsXCJcIixcInBhcmFncmFwaFwiLFwiYnVsbGV0XCIsXCJxdW90ZXNpbmdsYmFzZVwiLFwicXVvdGVkYmxiYXNlXCIsXCJxdW90ZWRibHJpZ2h0XCIsXCJndWlsbGVtb3RyaWdodFwiLFwiZWxsaXBzaXNcIixcInBlcnRob3VzYW5kXCIsXCJcIixcInF1ZXN0aW9uZG93blwiLFwiXCIsXCJncmF2ZVwiLFwiYWN1dGVcIixcImNpcmN1bWZsZXhcIixcInRpbGRlXCIsXCJtYWNyb25cIixcImJyZXZlXCIsXCJkb3RhY2NlbnRcIixcImRpZXJlc2lzXCIsXCJcIixcInJpbmdcIixcImNlZGlsbGFcIixcIlwiLFwiaHVuZ2FydW1sYXV0XCIsXCJvZ29uZWtcIixcImNhcm9uXCIsXCJlbWRhc2hcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiQUVcIixcIlwiLFwib3JkZmVtaW5pbmVcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiTHNsYXNoXCIsXCJPc2xhc2hcIixcIk9FXCIsXCJvcmRtYXNjdWxpbmVcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJhZVwiLFwiXCIsXCJcIixcIlwiLFwiZG90bGVzc2lcIixcIlwiLFwiXCIsXCJsc2xhc2hcIixcIm9zbGFzaFwiLFwib2VcIixcImdlcm1hbmRibHNcIl0sUGU9W1wiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcInNwYWNlXCIsXCJleGNsYW1zbWFsbFwiLFwiSHVuZ2FydW1sYXV0c21hbGxcIixcIlwiLFwiZG9sbGFyb2xkc3R5bGVcIixcImRvbGxhcnN1cGVyaW9yXCIsXCJhbXBlcnNhbmRzbWFsbFwiLFwiQWN1dGVzbWFsbFwiLFwicGFyZW5sZWZ0c3VwZXJpb3JcIixcInBhcmVucmlnaHRzdXBlcmlvclwiLFwidHdvZG90ZW5sZWFkZXJcIixcIm9uZWRvdGVubGVhZGVyXCIsXCJjb21tYVwiLFwiaHlwaGVuXCIsXCJwZXJpb2RcIixcImZyYWN0aW9uXCIsXCJ6ZXJvb2xkc3R5bGVcIixcIm9uZW9sZHN0eWxlXCIsXCJ0d29vbGRzdHlsZVwiLFwidGhyZWVvbGRzdHlsZVwiLFwiZm91cm9sZHN0eWxlXCIsXCJmaXZlb2xkc3R5bGVcIixcInNpeG9sZHN0eWxlXCIsXCJzZXZlbm9sZHN0eWxlXCIsXCJlaWdodG9sZHN0eWxlXCIsXCJuaW5lb2xkc3R5bGVcIixcImNvbG9uXCIsXCJzZW1pY29sb25cIixcImNvbW1hc3VwZXJpb3JcIixcInRocmVlcXVhcnRlcnNlbWRhc2hcIixcInBlcmlvZHN1cGVyaW9yXCIsXCJxdWVzdGlvbnNtYWxsXCIsXCJcIixcImFzdXBlcmlvclwiLFwiYnN1cGVyaW9yXCIsXCJjZW50c3VwZXJpb3JcIixcImRzdXBlcmlvclwiLFwiZXN1cGVyaW9yXCIsXCJcIixcIlwiLFwiaXN1cGVyaW9yXCIsXCJcIixcIlwiLFwibHN1cGVyaW9yXCIsXCJtc3VwZXJpb3JcIixcIm5zdXBlcmlvclwiLFwib3N1cGVyaW9yXCIsXCJcIixcIlwiLFwicnN1cGVyaW9yXCIsXCJzc3VwZXJpb3JcIixcInRzdXBlcmlvclwiLFwiXCIsXCJmZlwiLFwiZmlcIixcImZsXCIsXCJmZmlcIixcImZmbFwiLFwicGFyZW5sZWZ0aW5mZXJpb3JcIixcIlwiLFwicGFyZW5yaWdodGluZmVyaW9yXCIsXCJDaXJjdW1mbGV4c21hbGxcIixcImh5cGhlbnN1cGVyaW9yXCIsXCJHcmF2ZXNtYWxsXCIsXCJBc21hbGxcIixcIkJzbWFsbFwiLFwiQ3NtYWxsXCIsXCJEc21hbGxcIixcIkVzbWFsbFwiLFwiRnNtYWxsXCIsXCJHc21hbGxcIixcIkhzbWFsbFwiLFwiSXNtYWxsXCIsXCJKc21hbGxcIixcIktzbWFsbFwiLFwiTHNtYWxsXCIsXCJNc21hbGxcIixcIk5zbWFsbFwiLFwiT3NtYWxsXCIsXCJQc21hbGxcIixcIlFzbWFsbFwiLFwiUnNtYWxsXCIsXCJTc21hbGxcIixcIlRzbWFsbFwiLFwiVXNtYWxsXCIsXCJWc21hbGxcIixcIldzbWFsbFwiLFwiWHNtYWxsXCIsXCJZc21hbGxcIixcIlpzbWFsbFwiLFwiY29sb25tb25ldGFyeVwiLFwib25lZml0dGVkXCIsXCJydXBpYWhcIixcIlRpbGRlc21hbGxcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiZXhjbGFtZG93bnNtYWxsXCIsXCJjZW50b2xkc3R5bGVcIixcIkxzbGFzaHNtYWxsXCIsXCJcIixcIlwiLFwiU2Nhcm9uc21hbGxcIixcIlpjYXJvbnNtYWxsXCIsXCJEaWVyZXNpc3NtYWxsXCIsXCJCcmV2ZXNtYWxsXCIsXCJDYXJvbnNtYWxsXCIsXCJcIixcIkRvdGFjY2VudHNtYWxsXCIsXCJcIixcIlwiLFwiTWFjcm9uc21hbGxcIixcIlwiLFwiXCIsXCJmaWd1cmVkYXNoXCIsXCJoeXBoZW5pbmZlcmlvclwiLFwiXCIsXCJcIixcIk9nb25la3NtYWxsXCIsXCJSaW5nc21hbGxcIixcIkNlZGlsbGFzbWFsbFwiLFwiXCIsXCJcIixcIlwiLFwib25lcXVhcnRlclwiLFwib25laGFsZlwiLFwidGhyZWVxdWFydGVyc1wiLFwicXVlc3Rpb25kb3duc21hbGxcIixcIm9uZWVpZ2h0aFwiLFwidGhyZWVlaWdodGhzXCIsXCJmaXZlZWlnaHRoc1wiLFwic2V2ZW5laWdodGhzXCIsXCJvbmV0aGlyZFwiLFwidHdvdGhpcmRzXCIsXCJcIixcIlwiLFwiemVyb3N1cGVyaW9yXCIsXCJvbmVzdXBlcmlvclwiLFwidHdvc3VwZXJpb3JcIixcInRocmVlc3VwZXJpb3JcIixcImZvdXJzdXBlcmlvclwiLFwiZml2ZXN1cGVyaW9yXCIsXCJzaXhzdXBlcmlvclwiLFwic2V2ZW5zdXBlcmlvclwiLFwiZWlnaHRzdXBlcmlvclwiLFwibmluZXN1cGVyaW9yXCIsXCJ6ZXJvaW5mZXJpb3JcIixcIm9uZWluZmVyaW9yXCIsXCJ0d29pbmZlcmlvclwiLFwidGhyZWVpbmZlcmlvclwiLFwiZm91cmluZmVyaW9yXCIsXCJmaXZlaW5mZXJpb3JcIixcInNpeGluZmVyaW9yXCIsXCJzZXZlbmluZmVyaW9yXCIsXCJlaWdodGluZmVyaW9yXCIsXCJuaW5laW5mZXJpb3JcIixcImNlbnRpbmZlcmlvclwiLFwiZG9sbGFyaW5mZXJpb3JcIixcInBlcmlvZGluZmVyaW9yXCIsXCJjb21tYWluZmVyaW9yXCIsXCJBZ3JhdmVzbWFsbFwiLFwiQWFjdXRlc21hbGxcIixcIkFjaXJjdW1mbGV4c21hbGxcIixcIkF0aWxkZXNtYWxsXCIsXCJBZGllcmVzaXNzbWFsbFwiLFwiQXJpbmdzbWFsbFwiLFwiQUVzbWFsbFwiLFwiQ2NlZGlsbGFzbWFsbFwiLFwiRWdyYXZlc21hbGxcIixcIkVhY3V0ZXNtYWxsXCIsXCJFY2lyY3VtZmxleHNtYWxsXCIsXCJFZGllcmVzaXNzbWFsbFwiLFwiSWdyYXZlc21hbGxcIixcIklhY3V0ZXNtYWxsXCIsXCJJY2lyY3VtZmxleHNtYWxsXCIsXCJJZGllcmVzaXNzbWFsbFwiLFwiRXRoc21hbGxcIixcIk50aWxkZXNtYWxsXCIsXCJPZ3JhdmVzbWFsbFwiLFwiT2FjdXRlc21hbGxcIixcIk9jaXJjdW1mbGV4c21hbGxcIixcIk90aWxkZXNtYWxsXCIsXCJPZGllcmVzaXNzbWFsbFwiLFwiT0VzbWFsbFwiLFwiT3NsYXNoc21hbGxcIixcIlVncmF2ZXNtYWxsXCIsXCJVYWN1dGVzbWFsbFwiLFwiVWNpcmN1bWZsZXhzbWFsbFwiLFwiVWRpZXJlc2lzc21hbGxcIixcIllhY3V0ZXNtYWxsXCIsXCJUaG9ybnNtYWxsXCIsXCJZZGllcmVzaXNzbWFsbFwiXSxRZT1bXCIubm90ZGVmXCIsXCIubnVsbFwiLFwibm9ubWFya2luZ3JldHVyblwiLFwic3BhY2VcIixcImV4Y2xhbVwiLFwicXVvdGVkYmxcIixcIm51bWJlcnNpZ25cIixcImRvbGxhclwiLFwicGVyY2VudFwiLFwiYW1wZXJzYW5kXCIsXCJxdW90ZXNpbmdsZVwiLFwicGFyZW5sZWZ0XCIsXCJwYXJlbnJpZ2h0XCIsXCJhc3Rlcmlza1wiLFwicGx1c1wiLFwiY29tbWFcIixcImh5cGhlblwiLFwicGVyaW9kXCIsXCJzbGFzaFwiLFwiemVyb1wiLFwib25lXCIsXCJ0d29cIixcInRocmVlXCIsXCJmb3VyXCIsXCJmaXZlXCIsXCJzaXhcIixcInNldmVuXCIsXCJlaWdodFwiLFwibmluZVwiLFwiY29sb25cIixcInNlbWljb2xvblwiLFwibGVzc1wiLFwiZXF1YWxcIixcImdyZWF0ZXJcIixcInF1ZXN0aW9uXCIsXCJhdFwiLFwiQVwiLFwiQlwiLFwiQ1wiLFwiRFwiLFwiRVwiLFwiRlwiLFwiR1wiLFwiSFwiLFwiSVwiLFwiSlwiLFwiS1wiLFwiTFwiLFwiTVwiLFwiTlwiLFwiT1wiLFwiUFwiLFwiUVwiLFwiUlwiLFwiU1wiLFwiVFwiLFwiVVwiLFwiVlwiLFwiV1wiLFwiWFwiLFwiWVwiLFwiWlwiLFwiYnJhY2tldGxlZnRcIixcImJhY2tzbGFzaFwiLFwiYnJhY2tldHJpZ2h0XCIsXCJhc2NpaWNpcmN1bVwiLFwidW5kZXJzY29yZVwiLFwiZ3JhdmVcIixcImFcIixcImJcIixcImNcIixcImRcIixcImVcIixcImZcIixcImdcIixcImhcIixcImlcIixcImpcIixcImtcIixcImxcIixcIm1cIixcIm5cIixcIm9cIixcInBcIixcInFcIixcInJcIixcInNcIixcInRcIixcInVcIixcInZcIixcIndcIixcInhcIixcInlcIixcInpcIixcImJyYWNlbGVmdFwiLFwiYmFyXCIsXCJicmFjZXJpZ2h0XCIsXCJhc2NpaXRpbGRlXCIsXCJBZGllcmVzaXNcIixcIkFyaW5nXCIsXCJDY2VkaWxsYVwiLFwiRWFjdXRlXCIsXCJOdGlsZGVcIixcIk9kaWVyZXNpc1wiLFwiVWRpZXJlc2lzXCIsXCJhYWN1dGVcIixcImFncmF2ZVwiLFwiYWNpcmN1bWZsZXhcIixcImFkaWVyZXNpc1wiLFwiYXRpbGRlXCIsXCJhcmluZ1wiLFwiY2NlZGlsbGFcIixcImVhY3V0ZVwiLFwiZWdyYXZlXCIsXCJlY2lyY3VtZmxleFwiLFwiZWRpZXJlc2lzXCIsXCJpYWN1dGVcIixcImlncmF2ZVwiLFwiaWNpcmN1bWZsZXhcIixcImlkaWVyZXNpc1wiLFwibnRpbGRlXCIsXCJvYWN1dGVcIixcIm9ncmF2ZVwiLFwib2NpcmN1bWZsZXhcIixcIm9kaWVyZXNpc1wiLFwib3RpbGRlXCIsXCJ1YWN1dGVcIixcInVncmF2ZVwiLFwidWNpcmN1bWZsZXhcIixcInVkaWVyZXNpc1wiLFwiZGFnZ2VyXCIsXCJkZWdyZWVcIixcImNlbnRcIixcInN0ZXJsaW5nXCIsXCJzZWN0aW9uXCIsXCJidWxsZXRcIixcInBhcmFncmFwaFwiLFwiZ2VybWFuZGJsc1wiLFwicmVnaXN0ZXJlZFwiLFwiY29weXJpZ2h0XCIsXCJ0cmFkZW1hcmtcIixcImFjdXRlXCIsXCJkaWVyZXNpc1wiLFwibm90ZXF1YWxcIixcIkFFXCIsXCJPc2xhc2hcIixcImluZmluaXR5XCIsXCJwbHVzbWludXNcIixcImxlc3NlcXVhbFwiLFwiZ3JlYXRlcmVxdWFsXCIsXCJ5ZW5cIixcIm11XCIsXCJwYXJ0aWFsZGlmZlwiLFwic3VtbWF0aW9uXCIsXCJwcm9kdWN0XCIsXCJwaVwiLFwiaW50ZWdyYWxcIixcIm9yZGZlbWluaW5lXCIsXCJvcmRtYXNjdWxpbmVcIixcIk9tZWdhXCIsXCJhZVwiLFwib3NsYXNoXCIsXCJxdWVzdGlvbmRvd25cIixcImV4Y2xhbWRvd25cIixcImxvZ2ljYWxub3RcIixcInJhZGljYWxcIixcImZsb3JpblwiLFwiYXBwcm94ZXF1YWxcIixcIkRlbHRhXCIsXCJndWlsbGVtb3RsZWZ0XCIsXCJndWlsbGVtb3RyaWdodFwiLFwiZWxsaXBzaXNcIixcIm5vbmJyZWFraW5nc3BhY2VcIixcIkFncmF2ZVwiLFwiQXRpbGRlXCIsXCJPdGlsZGVcIixcIk9FXCIsXCJvZVwiLFwiZW5kYXNoXCIsXCJlbWRhc2hcIixcInF1b3RlZGJsbGVmdFwiLFwicXVvdGVkYmxyaWdodFwiLFwicXVvdGVsZWZ0XCIsXCJxdW90ZXJpZ2h0XCIsXCJkaXZpZGVcIixcImxvemVuZ2VcIixcInlkaWVyZXNpc1wiLFwiWWRpZXJlc2lzXCIsXCJmcmFjdGlvblwiLFwiY3VycmVuY3lcIixcImd1aWxzaW5nbGxlZnRcIixcImd1aWxzaW5nbHJpZ2h0XCIsXCJmaVwiLFwiZmxcIixcImRhZ2dlcmRibFwiLFwicGVyaW9kY2VudGVyZWRcIixcInF1b3Rlc2luZ2xiYXNlXCIsXCJxdW90ZWRibGJhc2VcIixcInBlcnRob3VzYW5kXCIsXCJBY2lyY3VtZmxleFwiLFwiRWNpcmN1bWZsZXhcIixcIkFhY3V0ZVwiLFwiRWRpZXJlc2lzXCIsXCJFZ3JhdmVcIixcIklhY3V0ZVwiLFwiSWNpcmN1bWZsZXhcIixcIklkaWVyZXNpc1wiLFwiSWdyYXZlXCIsXCJPYWN1dGVcIixcIk9jaXJjdW1mbGV4XCIsXCJhcHBsZVwiLFwiT2dyYXZlXCIsXCJVYWN1dGVcIixcIlVjaXJjdW1mbGV4XCIsXCJVZ3JhdmVcIixcImRvdGxlc3NpXCIsXCJjaXJjdW1mbGV4XCIsXCJ0aWxkZVwiLFwibWFjcm9uXCIsXCJicmV2ZVwiLFwiZG90YWNjZW50XCIsXCJyaW5nXCIsXCJjZWRpbGxhXCIsXCJodW5nYXJ1bWxhdXRcIixcIm9nb25la1wiLFwiY2Fyb25cIixcIkxzbGFzaFwiLFwibHNsYXNoXCIsXCJTY2Fyb25cIixcInNjYXJvblwiLFwiWmNhcm9uXCIsXCJ6Y2Fyb25cIixcImJyb2tlbmJhclwiLFwiRXRoXCIsXCJldGhcIixcIllhY3V0ZVwiLFwieWFjdXRlXCIsXCJUaG9yblwiLFwidGhvcm5cIixcIm1pbnVzXCIsXCJtdWx0aXBseVwiLFwib25lc3VwZXJpb3JcIixcInR3b3N1cGVyaW9yXCIsXCJ0aHJlZXN1cGVyaW9yXCIsXCJvbmVoYWxmXCIsXCJvbmVxdWFydGVyXCIsXCJ0aHJlZXF1YXJ0ZXJzXCIsXCJmcmFuY1wiLFwiR2JyZXZlXCIsXCJnYnJldmVcIixcIklkb3RhY2NlbnRcIixcIlNjZWRpbGxhXCIsXCJzY2VkaWxsYVwiLFwiQ2FjdXRlXCIsXCJjYWN1dGVcIixcIkNjYXJvblwiLFwiY2Nhcm9uXCIsXCJkY3JvYXRcIl07WC5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXt2YXIgYj1hLmNvZGVQb2ludEF0KDApLGM9dGhpcy5mb250LmdseXBocztpZihjKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCs9MSlmb3IodmFyIGU9Yy5nZXQoZCksZj0wO2Y8ZS51bmljb2Rlcy5sZW5ndGg7Zis9MSlpZihlLnVuaWNvZGVzW2ZdPT09YilyZXR1cm4gZDtyZXR1cm4gbnVsbH0sWS5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jbWFwLmdseXBoSW5kZXhNYXBbYS5jb2RlUG9pbnRBdCgwKV18fDB9LFoucHJvdG90eXBlLmNoYXJUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7dmFyIGI9YS5jb2RlUG9pbnRBdCgwKSxjPXRoaXMuZW5jb2RpbmdbYl07cmV0dXJuIHRoaXMuY2hhcnNldC5pbmRleE9mKGMpfSwkLnByb3RvdHlwZS5uYW1lVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5hbWVzLmluZGV4T2YoYSl9LCQucHJvdG90eXBlLmdseXBoSW5kZXhUb05hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubmFtZXNbYV19O3ZhciBSZT17bGluZTphYX07Y2EucHJvdG90eXBlLmJpbmRDb25zdHJ1Y3RvclZhbHVlcz1mdW5jdGlvbihhKXt0aGlzLmluZGV4PWEuaW5kZXh8fDAsdGhpcy5uYW1lPWEubmFtZXx8bnVsbCx0aGlzLnVuaWNvZGU9YS51bmljb2RlfHx2b2lkIDAsdGhpcy51bmljb2Rlcz1hLnVuaWNvZGVzfHx2b2lkIDAhPT1hLnVuaWNvZGU/W2EudW5pY29kZV06W10sYS54TWluJiYodGhpcy54TWluPWEueE1pbiksYS55TWluJiYodGhpcy55TWluPWEueU1pbiksYS54TWF4JiYodGhpcy54TWF4PWEueE1heCksYS55TWF4JiYodGhpcy55TWF4PWEueU1heCksYS5hZHZhbmNlV2lkdGgmJih0aGlzLmFkdmFuY2VXaWR0aD1hLmFkdmFuY2VXaWR0aCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwYXRoXCIsYmEodGhpcyxhLnBhdGgpKX0sY2EucHJvdG90eXBlLmFkZFVuaWNvZGU9ZnVuY3Rpb24oYSl7MD09PXRoaXMudW5pY29kZXMubGVuZ3RoJiYodGhpcy51bmljb2RlPWEpLHRoaXMudW5pY29kZXMucHVzaChhKX0sY2EucHJvdG90eXBlLmdldEJvdW5kaW5nQm94PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aC5nZXRCb3VuZGluZ0JveCgpfSxjYS5wcm90b3R5cGUuZ2V0UGF0aD1mdW5jdGlvbihhLGIsYyxkLGUpe2E9dm9pZCAwIT09YT9hOjAsYj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/Yzo3Mjt2YXIgZixnO2R8fChkPXt9KTt2YXIgaD1kLnhTY2FsZSxpPWQueVNjYWxlO2lmKGQuaGludGluZyYmZSYmZS5oaW50aW5nJiYoZz10aGlzLnBhdGgmJmUuaGludGluZy5leGVjKHRoaXMsYykpLGcpZj1lLmhpbnRpbmcuZ2V0Q29tbWFuZHMoZyksYT1NYXRoLnJvdW5kKGEpLGI9TWF0aC5yb3VuZChiKSxoPWk9MTtlbHNle2Y9dGhpcy5wYXRoLmNvbW1hbmRzO3ZhciBqPTEvdGhpcy5wYXRoLnVuaXRzUGVyRW0qYzt2b2lkIDA9PT1oJiYoaD1qKSx2b2lkIDA9PT1pJiYoaT1qKX1mb3IodmFyIGs9bmV3IHIsbD0wO2w8Zi5sZW5ndGg7bCs9MSl7dmFyIG09ZltsXTtcIk1cIj09PW0udHlwZT9rLm1vdmVUbyhhK20ueCpoLGIrLW0ueSppKTpcIkxcIj09PW0udHlwZT9rLmxpbmVUbyhhK20ueCpoLGIrLW0ueSppKTpcIlFcIj09PW0udHlwZT9rLnF1YWRyYXRpY0N1cnZlVG8oYSttLngxKmgsYistbS55MSppLGErbS54KmgsYistbS55KmkpOlwiQ1wiPT09bS50eXBlP2suY3VydmVUbyhhK20ueDEqaCxiKy1tLnkxKmksYSttLngyKmgsYistbS55MippLGErbS54KmgsYistbS55KmkpOlwiWlwiPT09bS50eXBlJiZrLmNsb3NlUGF0aCgpfXJldHVybiBrfSxjYS5wcm90b3R5cGUuZ2V0Q29udG91cnM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2lmKHZvaWQgMD09PXRoaXMucG9pbnRzKXJldHVybltdO2Zvcih2YXIgYj1bXSxjPVtdLGQ9MDtkPHRoaXMucG9pbnRzLmxlbmd0aDtkKz0xKXt2YXIgZT1hLnBvaW50c1tkXTtjLnB1c2goZSksZS5sYXN0UG9pbnRPZkNvbnRvdXImJihiLnB1c2goYyksYz1bXSl9cmV0dXJuIHhlLmFyZ3VtZW50KDA9PT1jLmxlbmd0aCxcIlRoZXJlIGFyZSBzdGlsbCBwb2ludHMgbGVmdCBpbiB0aGUgY3VycmVudCBjb250b3VyLlwiKSxifSxjYS5wcm90b3R5cGUuZ2V0TWV0cmljcz1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnBhdGguY29tbWFuZHMsYj1bXSxjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF07XCJaXCIhPT1lLnR5cGUmJihiLnB1c2goZS54KSxjLnB1c2goZS55KSksXCJRXCIhPT1lLnR5cGUmJlwiQ1wiIT09ZS50eXBlfHwoYi5wdXNoKGUueDEpLGMucHVzaChlLnkxKSksXCJDXCI9PT1lLnR5cGUmJihiLnB1c2goZS54MiksYy5wdXNoKGUueTIpKX12YXIgZj17eE1pbjpNYXRoLm1pbi5hcHBseShudWxsLGIpLHlNaW46TWF0aC5taW4uYXBwbHkobnVsbCxjKSx4TWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsYikseU1heDpNYXRoLm1heC5hcHBseShudWxsLGMpLGxlZnRTaWRlQmVhcmluZzp0aGlzLmxlZnRTaWRlQmVhcmluZ307cmV0dXJuIGlzRmluaXRlKGYueE1pbil8fChmLnhNaW49MCksaXNGaW5pdGUoZi54TWF4KXx8KGYueE1heD10aGlzLmFkdmFuY2VXaWR0aCksaXNGaW5pdGUoZi55TWluKXx8KGYueU1pbj0wKSxpc0Zpbml0ZShmLnlNYXgpfHwoZi55TWF4PTApLGYucmlnaHRTaWRlQmVhcmluZz10aGlzLmFkdmFuY2VXaWR0aC1mLmxlZnRTaWRlQmVhcmluZy0oZi54TWF4LWYueE1pbiksZn0sY2EucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oYSxiLGMsZCxlKXt0aGlzLmdldFBhdGgoYixjLGQsZSkuZHJhdyhhKX0sY2EucHJvdG90eXBlLmRyYXdQb2ludHM9ZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZShiLGMsZCxlKXt2YXIgZj0yKk1hdGguUEk7YS5iZWdpblBhdGgoKTtmb3IodmFyIGc9MDtnPGIubGVuZ3RoO2crPTEpYS5tb3ZlVG8oYytiW2ddLngqZSxkK2JbZ10ueSplKSxhLmFyYyhjK2JbZ10ueCplLGQrYltnXS55KmUsMiwwLGYsITEpO2EuY2xvc2VQYXRoKCksYS5maWxsKCl9Yj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/YzowLGQ9dm9pZCAwIT09ZD9kOjI0O2Zvcih2YXIgZj0xL3RoaXMucGF0aC51bml0c1BlckVtKmQsZz1bXSxoPVtdLGk9dGhpcy5wYXRoLGo9MDtqPGkuY29tbWFuZHMubGVuZ3RoO2orPTEpe3ZhciBrPWkuY29tbWFuZHNbal07dm9pZCAwIT09ay54JiZnLnB1c2goe3g6ay54LHk6LWsueX0pLHZvaWQgMCE9PWsueDEmJmgucHVzaCh7eDprLngxLHk6LWsueTF9KSx2b2lkIDAhPT1rLngyJiZoLnB1c2goe3g6ay54Mix5Oi1rLnkyfSl9YS5maWxsU3R5bGU9XCJibHVlXCIsZShnLGIsYyxmKSxhLmZpbGxTdHlsZT1cInJlZFwiLGUoaCxiLGMsZil9LGNhLnByb3RvdHlwZS5kcmF3TWV0cmljcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZTtiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD12b2lkIDAhPT1kP2Q6MjQsZT0xL3RoaXMucGF0aC51bml0c1BlckVtKmQsYS5saW5lV2lkdGg9MSxhLnN0cm9rZVN0eWxlPVwiYmxhY2tcIixSZS5saW5lKGEsYiwtMWU0LGIsMWU0KSxSZS5saW5lKGEsLTFlNCxjLDFlNCxjKTt2YXIgZj10aGlzLnhNaW58fDAsZz10aGlzLnlNaW58fDAsaD10aGlzLnhNYXh8fDAsaT10aGlzLnlNYXh8fDAsaj10aGlzLmFkdmFuY2VXaWR0aHx8MDthLnN0cm9rZVN0eWxlPVwiYmx1ZVwiLFJlLmxpbmUoYSxiK2YqZSwtMWU0LGIrZiplLDFlNCksUmUubGluZShhLGIraCplLC0xZTQsYitoKmUsMWU0KSxSZS5saW5lKGEsLTFlNCxjKy1nKmUsMWU0LGMrLWcqZSksUmUubGluZShhLC0xZTQsYystaSplLDFlNCxjKy1pKmUpLGEuc3Ryb2tlU3R5bGU9XCJncmVlblwiLFJlLmxpbmUoYSxiK2oqZSwtMWU0LGIraiplLDFlNCl9LGVhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5nbHlwaHNbYV0mJih0aGlzLmdseXBoc1thXT10aGlzLmdseXBoc1thXSgpKSx0aGlzLmdseXBoc1thXX0sZWEucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oYSxiKXt0aGlzLmdseXBoc1thXT1iLHRoaXMubGVuZ3RoKyt9O3ZhciBTZT17R2x5cGhTZXQ6ZWEsZ2x5cGhMb2FkZXI6ZmEsdHRmR2x5cGhMb2FkZXI6Z2EsY2ZmR2x5cGhMb2FkZXI6aGF9LFRlPVt7bmFtZTpcInZlcnNpb25cIixvcDowLHR5cGU6XCJTSURcIn0se25hbWU6XCJub3RpY2VcIixvcDoxLHR5cGU6XCJTSURcIn0se25hbWU6XCJjb3B5cmlnaHRcIixvcDoxMjAwLHR5cGU6XCJTSURcIn0se25hbWU6XCJmdWxsTmFtZVwiLG9wOjIsdHlwZTpcIlNJRFwifSx7bmFtZTpcImZhbWlseU5hbWVcIixvcDozLHR5cGU6XCJTSURcIn0se25hbWU6XCJ3ZWlnaHRcIixvcDo0LHR5cGU6XCJTSURcIn0se25hbWU6XCJpc0ZpeGVkUGl0Y2hcIixvcDoxMjAxLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcIml0YWxpY0FuZ2xlXCIsb3A6MTIwMix0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJ1bmRlcmxpbmVQb3NpdGlvblwiLG9wOjEyMDMsdHlwZTpcIm51bWJlclwiLHZhbHVlOi0xMDB9LHtuYW1lOlwidW5kZXJsaW5lVGhpY2tuZXNzXCIsb3A6MTIwNCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6NTB9LHtuYW1lOlwicGFpbnRUeXBlXCIsb3A6MTIwNSx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJjaGFyc3RyaW5nVHlwZVwiLG9wOjEyMDYsdHlwZTpcIm51bWJlclwiLHZhbHVlOjJ9LHtuYW1lOlwiZm9udE1hdHJpeFwiLG9wOjEyMDcsdHlwZTpbXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCJdLHZhbHVlOlsuMDAxLDAsMCwuMDAxLDAsMF19LHtuYW1lOlwidW5pcXVlSWRcIixvcDoxMyx0eXBlOlwibnVtYmVyXCJ9LHtuYW1lOlwiZm9udEJCb3hcIixvcDo1LHR5cGU6W1wibnVtYmVyXCIsXCJudW1iZXJcIixcIm51bWJlclwiLFwibnVtYmVyXCJdLHZhbHVlOlswLDAsMCwwXX0se25hbWU6XCJzdHJva2VXaWR0aFwiLG9wOjEyMDgsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwieHVpZFwiLG9wOjE0LHR5cGU6W10sdmFsdWU6bnVsbH0se25hbWU6XCJjaGFyc2V0XCIsb3A6MTUsdHlwZTpcIm9mZnNldFwiLHZhbHVlOjB9LHtuYW1lOlwiZW5jb2RpbmdcIixvcDoxNix0eXBlOlwib2Zmc2V0XCIsdmFsdWU6MH0se25hbWU6XCJjaGFyU3RyaW5nc1wiLG9wOjE3LHR5cGU6XCJvZmZzZXRcIix2YWx1ZTowfSx7bmFtZTpcInByaXZhdGVcIixvcDoxOCx0eXBlOltcIm51bWJlclwiLFwib2Zmc2V0XCJdLHZhbHVlOlswLDBdfSx7bmFtZTpcInJvc1wiLG9wOjEyMzAsdHlwZTpbXCJTSURcIixcIlNJRFwiLFwibnVtYmVyXCJdfSx7bmFtZTpcImNpZEZvbnRWZXJzaW9uXCIsb3A6MTIzMSx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJjaWRGb250UmV2aXNpb25cIixvcDoxMjMyLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNpZEZvbnRUeXBlXCIsb3A6MTIzMyx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJjaWRDb3VudFwiLG9wOjEyMzQsdHlwZTpcIm51bWJlclwiLHZhbHVlOjg3MjB9LHtuYW1lOlwidWlkQmFzZVwiLG9wOjEyMzUsdHlwZTpcIm51bWJlclwifSx7bmFtZTpcImZkQXJyYXlcIixvcDoxMjM2LHR5cGU6XCJvZmZzZXRcIn0se25hbWU6XCJmZFNlbGVjdFwiLG9wOjEyMzcsdHlwZTpcIm9mZnNldFwifSx7bmFtZTpcImZvbnROYW1lXCIsb3A6MTIzOCx0eXBlOlwiU0lEXCJ9XSxVZT1be25hbWU6XCJzdWJyc1wiLG9wOjE5LHR5cGU6XCJvZmZzZXRcIix2YWx1ZTowfSx7bmFtZTpcImRlZmF1bHRXaWR0aFhcIixvcDoyMCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJub21pbmFsV2lkdGhYXCIsb3A6MjEsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9XSxWZT17cGFyc2U6emEsbWFrZTpNYX0sV2U9e3BhcnNlOk5hLG1ha2U6T2F9LFhlPXtwYXJzZTpQYSxtYWtlOlFhfSxZZT17cGFyc2U6UmEsbWFrZTpTYX0sWmU9e21ha2U6VGEscGFyc2U6VWF9LCRlPXtwYXJzZTpWYSxtYWtlOldhfSxfZT1bXCJjb3B5cmlnaHRcIixcImZvbnRGYW1pbHlcIixcImZvbnRTdWJmYW1pbHlcIixcInVuaXF1ZUlEXCIsXCJmdWxsTmFtZVwiLFwidmVyc2lvblwiLFwicG9zdFNjcmlwdE5hbWVcIixcInRyYWRlbWFya1wiLFwibWFudWZhY3R1cmVyXCIsXCJkZXNpZ25lclwiLFwiZGVzY3JpcHRpb25cIixcIm1hbnVmYWN0dXJlclVSTFwiLFwiZGVzaWduZXJVUkxcIixcImxpY2Vuc2VcIixcImxpY2Vuc2VVUkxcIixcInJlc2VydmVkXCIsXCJwcmVmZXJyZWRGYW1pbHlcIixcInByZWZlcnJlZFN1YmZhbWlseVwiLFwiY29tcGF0aWJsZUZ1bGxOYW1lXCIsXCJzYW1wbGVUZXh0XCIsXCJwb3N0U2NyaXB0RmluZEZvbnROYW1lXCIsXCJ3d3NGYW1pbHlcIixcInd3c1N1YmZhbWlseVwiXSxhZj17MDpcImVuXCIsMTpcImZyXCIsMjpcImRlXCIsMzpcIml0XCIsNDpcIm5sXCIsNTpcInN2XCIsNjpcImVzXCIsNzpcImRhXCIsODpcInB0XCIsOTpcIm5vXCIsMTA6XCJoZVwiLDExOlwiamFcIiwxMjpcImFyXCIsMTM6XCJmaVwiLDE0OlwiZWxcIiwxNTpcImlzXCIsMTY6XCJtdFwiLDE3OlwidHJcIiwxODpcImhyXCIsMTk6XCJ6aC1IYW50XCIsMjA6XCJ1clwiLDIxOlwiaGlcIiwyMjpcInRoXCIsMjM6XCJrb1wiLDI0OlwibHRcIiwyNTpcInBsXCIsMjY6XCJodVwiLDI3OlwiZXNcIiwyODpcImx2XCIsMjk6XCJzZVwiLDMwOlwiZm9cIiwzMTpcImZhXCIsMzI6XCJydVwiLDMzOlwiemhcIiwzNDpcIm5sLUJFXCIsMzU6XCJnYVwiLDM2Olwic3FcIiwzNzpcInJvXCIsMzg6XCJjelwiLDM5Olwic2tcIiw0MDpcInNpXCIsNDE6XCJ5aVwiLDQyOlwic3JcIiw0MzpcIm1rXCIsNDQ6XCJiZ1wiLDQ1OlwidWtcIiw0NjpcImJlXCIsNDc6XCJ1elwiLDQ4Olwia2tcIiw0OTpcImF6LUN5cmxcIiw1MDpcImF6LUFyYWJcIiw1MTpcImh5XCIsNTI6XCJrYVwiLDUzOlwibW9cIiw1NDpcImt5XCIsNTU6XCJ0Z1wiLDU2OlwidGtcIiw1NzpcIm1uLUNOXCIsNTg6XCJtblwiLDU5OlwicHNcIiw2MDpcImtzXCIsNjE6XCJrdVwiLDYyOlwic2RcIiw2MzpcImJvXCIsNjQ6XCJuZVwiLDY1Olwic2FcIiw2NjpcIm1yXCIsNjc6XCJiblwiLDY4OlwiYXNcIiw2OTpcImd1XCIsNzA6XCJwYVwiLDcxOlwib3JcIiw3MjpcIm1sXCIsNzM6XCJrblwiLDc0OlwidGFcIiw3NTpcInRlXCIsNzY6XCJzaVwiLDc3OlwibXlcIiw3ODpcImttXCIsNzk6XCJsb1wiLDgwOlwidmlcIiw4MTpcImlkXCIsODI6XCJ0bFwiLDgzOlwibXNcIiw4NDpcIm1zLUFyYWJcIiw4NTpcImFtXCIsODY6XCJ0aVwiLDg3Olwib21cIiw4ODpcInNvXCIsODk6XCJzd1wiLDkwOlwicndcIiw5MTpcInJuXCIsOTI6XCJueVwiLDkzOlwibWdcIiw5NDpcImVvXCIsMTI4OlwiY3lcIiwxMjk6XCJldVwiLDEzMDpcImNhXCIsMTMxOlwibGFcIiwxMzI6XCJxdVwiLDEzMzpcImduXCIsMTM0OlwiYXlcIiwxMzU6XCJ0dFwiLDEzNjpcInVnXCIsMTM3OlwiZHpcIiwxMzg6XCJqdlwiLDEzOTpcInN1XCIsMTQwOlwiZ2xcIiwxNDE6XCJhZlwiLDE0MjpcImJyXCIsMTQzOlwiaXVcIiwxNDQ6XCJnZFwiLDE0NTpcImd2XCIsMTQ2OlwiZ2FcIiwxNDc6XCJ0b1wiLDE0ODpcImVsLXBvbHl0b25cIiwxNDk6XCJrbFwiLDE1MDpcImF6XCIsMTUxOlwibm5cIn0sYmY9ezA6MCwxOjAsMjowLDM6MCw0OjAsNTowLDY6MCw3OjAsODowLDk6MCwxMDo1LDExOjEsMTI6NCwxMzowLDE0OjYsMTU6MCwxNjowLDE3OjAsMTg6MCwxOToyLDIwOjQsXG4yMTo5LDIyOjIxLDIzOjMsMjQ6MjksMjU6MjksMjY6MjksMjc6MjksMjg6MjksMjk6MCwzMDowLDMxOjQsMzI6NywzMzoyNSwzNDowLDM1OjAsMzY6MCwzNzowLDM4OjI5LDM5OjI5LDQwOjAsNDE6NSw0Mjo3LDQzOjcsNDQ6Nyw0NTo3LDQ2OjcsNDc6Nyw0ODo3LDQ5OjcsNTA6NCw1MToyNCw1MjoyMyw1Mzo3LDU0OjcsNTU6Nyw1Njo3LDU3OjI3LDU4OjcsNTk6NCw2MDo0LDYxOjQsNjI6NCw2MzoyNiw2NDo5LDY1OjksNjY6OSw2NzoxMyw2ODoxMyw2OToxMSw3MDoxMCw3MToxMiw3MjoxNyw3MzoxNiw3NDoxNCw3NToxNSw3NjoxOCw3NzoxOSw3ODoyMCw3OToyMiw4MDozMCw4MTowLDgyOjAsODM6MCw4NDo0LDg1OjI4LDg2OjI4LDg3OjI4LDg4OjAsODk6MCw5MDowLDkxOjAsOTI6MCw5MzowLDk0OjAsMTI4OjAsMTI5OjAsMTMwOjAsMTMxOjAsMTMyOjAsMTMzOjAsMTM0OjAsMTM1OjcsMTM2OjQsMTM3OjI2LDEzODowLDEzOTowLDE0MDowLDE0MTowLDE0MjowLDE0MzoyOCwxNDQ6MCwxNDU6MCwxNDY6MCwxNDc6MCwxNDg6NiwxNDk6MCwxNTA6MCwxNTE6MH0sY2Y9ezEwNzg6XCJhZlwiLDEwNTI6XCJzcVwiLDExNTY6XCJnc3dcIiwxMTE4OlwiYW1cIiw1MTIxOlwiYXItRFpcIiwxNTM2MTpcImFyLUJIXCIsMzA3MzpcImFyXCIsMjA0OTpcImFyLUlRXCIsMTEyNjU6XCJhci1KT1wiLDEzMzEzOlwiYXItS1dcIiwxMjI4OTpcImFyLUxCXCIsNDA5NzpcImFyLUxZXCIsNjE0NTpcImFyeVwiLDgxOTM6XCJhci1PTVwiLDE2Mzg1OlwiYXItUUFcIiwxMDI1OlwiYXItU0FcIiwxMDI0MTpcImFyLVNZXCIsNzE2OTpcImFlYlwiLDE0MzM3OlwiYXItQUVcIiw5MjE3OlwiYXItWUVcIiwxMDY3OlwiaHlcIiwxMTAxOlwiYXNcIiwyMDkyOlwiYXotQ3lybFwiLDEwNjg6XCJhelwiLDExMzM6XCJiYVwiLDEwNjk6XCJldVwiLDEwNTk6XCJiZVwiLDIxMTc6XCJiblwiLDEwOTM6XCJibi1JTlwiLDgyMTg6XCJicy1DeXJsXCIsNTE0NjpcImJzXCIsMTE1MDpcImJyXCIsMTAyNjpcImJnXCIsMTAyNzpcImNhXCIsMzA3NjpcInpoLUhLXCIsNTEyNDpcInpoLU1PXCIsMjA1MjpcInpoXCIsNDEwMDpcInpoLVNHXCIsMTAyODpcInpoLVRXXCIsMTE1NTpcImNvXCIsMTA1MDpcImhyXCIsNDEyMjpcImhyLUJBXCIsMTAyOTpcImNzXCIsMTAzMDpcImRhXCIsMTE2NDpcInByc1wiLDExMjU6XCJkdlwiLDIwNjc6XCJubC1CRVwiLDEwNDM6XCJubFwiLDMwODE6XCJlbi1BVVwiLDEwMjQ5OlwiZW4tQlpcIiw0MTA1OlwiZW4tQ0FcIiw5MjI1OlwiZW4tMDI5XCIsMTYzOTM6XCJlbi1JTlwiLDYxNTM6XCJlbi1JRVwiLDgyMDE6XCJlbi1KTVwiLDE3NDE3OlwiZW4tTVlcIiw1MTI5OlwiZW4tTlpcIiwxMzMyMTpcImVuLVBIXCIsMTg0NDE6XCJlbi1TR1wiLDcxNzc6XCJlbi1aQVwiLDExMjczOlwiZW4tVFRcIiwyMDU3OlwiZW4tR0JcIiwxMDMzOlwiZW5cIiwxMjI5NzpcImVuLVpXXCIsMTA2MTpcImV0XCIsMTA4MDpcImZvXCIsMTEyNDpcImZpbFwiLDEwMzU6XCJmaVwiLDIwNjA6XCJmci1CRVwiLDMwODQ6XCJmci1DQVwiLDEwMzY6XCJmclwiLDUxMzI6XCJmci1MVVwiLDYxNTY6XCJmci1NQ1wiLDQxMDg6XCJmci1DSFwiLDExMjI6XCJmeVwiLDExMTA6XCJnbFwiLDEwNzk6XCJrYVwiLDMwNzk6XCJkZS1BVFwiLDEwMzE6XCJkZVwiLDUxMjc6XCJkZS1MSVwiLDQxMDM6XCJkZS1MVVwiLDIwNTU6XCJkZS1DSFwiLDEwMzI6XCJlbFwiLDExMzU6XCJrbFwiLDEwOTU6XCJndVwiLDExMjg6XCJoYVwiLDEwMzc6XCJoZVwiLDEwODE6XCJoaVwiLDEwMzg6XCJodVwiLDEwMzk6XCJpc1wiLDExMzY6XCJpZ1wiLDEwNTc6XCJpZFwiLDExMTc6XCJpdVwiLDIxNDE6XCJpdS1MYXRuXCIsMjEwODpcImdhXCIsMTA3NjpcInhoXCIsMTA3NzpcInp1XCIsMTA0MDpcIml0XCIsMjA2NDpcIml0LUNIXCIsMTA0MTpcImphXCIsMTA5OTpcImtuXCIsMTA4NzpcImtrXCIsMTEwNzpcImttXCIsMTE1ODpcInF1Y1wiLDExNTk6XCJyd1wiLDEwODk6XCJzd1wiLDExMTE6XCJrb2tcIiwxMDQyOlwia29cIiwxMDg4Olwia3lcIiwxMTA4OlwibG9cIiwxMDYyOlwibHZcIiwxMDYzOlwibHRcIiwyMDk0OlwiZHNiXCIsMTEzNDpcImxiXCIsMTA3MTpcIm1rXCIsMjExMDpcIm1zLUJOXCIsMTA4NjpcIm1zXCIsMTEwMDpcIm1sXCIsMTA4MjpcIm10XCIsMTE1MzpcIm1pXCIsMTE0NjpcImFyblwiLDExMDI6XCJtclwiLDExNDg6XCJtb2hcIiwxMTA0OlwibW5cIiwyMTI4OlwibW4tQ05cIiwxMTIxOlwibmVcIiwxMDQ0OlwibmJcIiwyMDY4Olwibm5cIiwxMTU0Olwib2NcIiwxMDk2Olwib3JcIiwxMTIzOlwicHNcIiwxMDQ1OlwicGxcIiwxMDQ2OlwicHRcIiwyMDcwOlwicHQtUFRcIiwxMDk0OlwicGFcIiwxMTMxOlwicXUtQk9cIiwyMTU1OlwicXUtRUNcIiwzMTc5OlwicXVcIiwxMDQ4Olwicm9cIiwxMDQ3Olwicm1cIiwxMDQ5OlwicnVcIiw5Mjc1Olwic21uXCIsNDE1NTpcInNtai1OT1wiLDUxNzk6XCJzbWpcIiwzMTMxOlwic2UtRklcIiwxMDgzOlwic2VcIiwyMTA3Olwic2UtU0VcIiw4MjUxOlwic21zXCIsNjIwMzpcInNtYS1OT1wiLDcyMjc6XCJzbXNcIiwxMTAzOlwic2FcIiw3MTk0Olwic3ItQ3lybC1CQVwiLDMwOTg6XCJzclwiLDYxNzA6XCJzci1MYXRuLUJBXCIsMjA3NDpcInNyLUxhdG5cIiwxMTMyOlwibnNvXCIsMTA3NDpcInRuXCIsMTExNTpcInNpXCIsMTA1MTpcInNrXCIsMTA2MDpcInNsXCIsMTEyNzQ6XCJlcy1BUlwiLDE2Mzk0OlwiZXMtQk9cIiwxMzMyMjpcImVzLUNMXCIsOTIyNjpcImVzLUNPXCIsNTEzMDpcImVzLUNSXCIsNzE3ODpcImVzLURPXCIsMTIyOTg6XCJlcy1FQ1wiLDE3NDE4OlwiZXMtU1ZcIiw0MTA2OlwiZXMtR1RcIiwxODQ0MjpcImVzLUhOXCIsMjA1ODpcImVzLU1YXCIsMTk0NjY6XCJlcy1OSVwiLDYxNTQ6XCJlcy1QQVwiLDE1MzcwOlwiZXMtUFlcIiwxMDI1MDpcImVzLVBFXCIsMjA0OTA6XCJlcy1QUlwiLDMwODI6XCJlc1wiLDEwMzQ6XCJlc1wiLDIxNTE0OlwiZXMtVVNcIiwxNDM0NjpcImVzLVVZXCIsODIwMjpcImVzLVZFXCIsMjA3NzpcInN2LUZJXCIsMTA1MzpcInN2XCIsMTExNDpcInN5clwiLDEwNjQ6XCJ0Z1wiLDIxNDM6XCJ0em1cIiwxMDk3OlwidGFcIiwxMDkyOlwidHRcIiwxMDk4OlwidGVcIiwxMDU0OlwidGhcIiwxMTA1OlwiYm9cIiwxMDU1OlwidHJcIiwxMDkwOlwidGtcIiwxMTUyOlwidWdcIiwxMDU4OlwidWtcIiwxMDcwOlwiaHNiXCIsMTA1NjpcInVyXCIsMjExNTpcInV6LUN5cmxcIiwxMDkxOlwidXpcIiwxMDY2OlwidmlcIiwxMTA2OlwiY3lcIiwxMTYwOlwid29cIiwxMTU3Olwic2FoXCIsMTE0NDpcImlpXCIsMTEzMDpcInlvXCJ9LGRmPVwidXRmLTE2XCIsZWY9ezA6XCJtYWNpbnRvc2hcIiwxOlwieC1tYWMtamFwYW5lc2VcIiwyOlwieC1tYWMtY2hpbmVzZXRyYWRcIiwzOlwieC1tYWMta29yZWFuXCIsNjpcIngtbWFjLWdyZWVrXCIsNzpcIngtbWFjLWN5cmlsbGljXCIsOTpcIngtbWFjLWRldmFuYWdhaVwiLDEwOlwieC1tYWMtZ3VybXVraGlcIiwxMTpcIngtbWFjLWd1amFyYXRpXCIsMTI6XCJ4LW1hYy1vcml5YVwiLDEzOlwieC1tYWMtYmVuZ2FsaVwiLDE0OlwieC1tYWMtdGFtaWxcIiwxNTpcIngtbWFjLXRlbHVndVwiLDE2OlwieC1tYWMta2FubmFkYVwiLDE3OlwieC1tYWMtbWFsYXlhbGFtXCIsMTg6XCJ4LW1hYy1zaW5oYWxlc2VcIiwxOTpcIngtbWFjLWJ1cm1lc2VcIiwyMDpcIngtbWFjLWtobWVyXCIsMjE6XCJ4LW1hYy10aGFpXCIsMjI6XCJ4LW1hYy1sYW9cIiwyMzpcIngtbWFjLWdlb3JnaWFuXCIsMjQ6XCJ4LW1hYy1hcm1lbmlhblwiLDI1OlwieC1tYWMtY2hpbmVzZXNpbXBcIiwyNjpcIngtbWFjLXRpYmV0YW5cIiwyNzpcIngtbWFjLW1vbmdvbGlhblwiLDI4OlwieC1tYWMtZXRoaW9waWNcIiwyOTpcIngtbWFjLWNlXCIsMzA6XCJ4LW1hYy12aWV0bmFtZXNlXCIsMzE6XCJ4LW1hYy1leHRhcmFiaWNcIn0sZmY9ezE1OlwieC1tYWMtaWNlbGFuZGljXCIsMTc6XCJ4LW1hYy10dXJraXNoXCIsMTg6XCJ4LW1hYy1jcm9hdGlhblwiLDI0OlwieC1tYWMtY2VcIiwyNTpcIngtbWFjLWNlXCIsMjY6XCJ4LW1hYy1jZVwiLDI3OlwieC1tYWMtY2VcIiwyODpcIngtbWFjLWNlXCIsMzA6XCJ4LW1hYy1pY2VsYW5kaWNcIiwzNzpcIngtbWFjLXJvbWFuaWFuXCIsMzg6XCJ4LW1hYy1jZVwiLDM5OlwieC1tYWMtY2VcIiw0MDpcIngtbWFjLWNlXCIsMTQzOlwieC1tYWMtaW51aXRcIiwxNDY6XCJ4LW1hYy1nYWVsaWNcIn0sZ2Y9e3BhcnNlOlphLG1ha2U6Y2J9LGhmPVt7YmVnaW46MCxlbmQ6MTI3fSx7YmVnaW46MTI4LGVuZDoyNTV9LHtiZWdpbjoyNTYsZW5kOjM4M30se2JlZ2luOjM4NCxlbmQ6NTkxfSx7YmVnaW46NTkyLGVuZDo2ODd9LHtiZWdpbjo2ODgsZW5kOjc2N30se2JlZ2luOjc2OCxlbmQ6ODc5fSx7YmVnaW46ODgwLGVuZDoxMDIzfSx7YmVnaW46MTEzOTIsZW5kOjExNTE5fSx7YmVnaW46MTAyNCxlbmQ6MTI3OX0se2JlZ2luOjEzMjgsZW5kOjE0MjN9LHtiZWdpbjoxNDI0LGVuZDoxNTM1fSx7YmVnaW46NDIyNDAsZW5kOjQyNTU5fSx7YmVnaW46MTUzNixlbmQ6MTc5MX0se2JlZ2luOjE5ODQsZW5kOjIwNDd9LHtiZWdpbjoyMzA0LGVuZDoyNDMxfSx7YmVnaW46MjQzMixlbmQ6MjU1OX0se2JlZ2luOjI1NjAsZW5kOjI2ODd9LHtiZWdpbjoyNjg4LGVuZDoyODE1fSx7YmVnaW46MjgxNixlbmQ6Mjk0M30se2JlZ2luOjI5NDQsZW5kOjMwNzF9LHtiZWdpbjozMDcyLGVuZDozMTk5fSx7YmVnaW46MzIwMCxlbmQ6MzMyN30se2JlZ2luOjMzMjgsZW5kOjM0NTV9LHtiZWdpbjozNTg0LGVuZDozNzExfSx7YmVnaW46MzcxMixlbmQ6MzgzOX0se2JlZ2luOjQyNTYsZW5kOjQzNTF9LHtiZWdpbjo2OTEyLGVuZDo3MDM5fSx7YmVnaW46NDM1MixlbmQ6NDYwN30se2JlZ2luOjc2ODAsZW5kOjc5MzV9LHtiZWdpbjo3OTM2LGVuZDo4MTkxfSx7YmVnaW46ODE5MixlbmQ6ODMwM30se2JlZ2luOjgzMDQsZW5kOjgzNTF9LHtiZWdpbjo4MzUyLGVuZDo4Mzk5fSx7YmVnaW46ODQwMCxlbmQ6ODQ0N30se2JlZ2luOjg0NDgsZW5kOjg1Mjd9LHtiZWdpbjo4NTI4LGVuZDo4NTkxfSx7YmVnaW46ODU5MixlbmQ6ODcwM30se2JlZ2luOjg3MDQsZW5kOjg5NTl9LHtiZWdpbjo4OTYwLGVuZDo5MjE1fSx7YmVnaW46OTIxNixlbmQ6OTI3OX0se2JlZ2luOjkyODAsZW5kOjkzMTF9LHtiZWdpbjo5MzEyLGVuZDo5NDcxfSx7YmVnaW46OTQ3MixlbmQ6OTU5OX0se2JlZ2luOjk2MDAsZW5kOjk2MzF9LHtiZWdpbjo5NjMyLGVuZDo5NzI3fSx7YmVnaW46OTcyOCxlbmQ6OTk4M30se2JlZ2luOjk5ODQsZW5kOjEwMTc1fSx7YmVnaW46MTIyODgsZW5kOjEyMzUxfSx7YmVnaW46MTIzNTIsZW5kOjEyNDQ3fSx7YmVnaW46MTI0NDgsZW5kOjEyNTQzfSx7YmVnaW46MTI1NDQsZW5kOjEyNTkxfSx7YmVnaW46MTI1OTIsZW5kOjEyNjg3fSx7YmVnaW46NDMwNzIsZW5kOjQzMTM1fSx7YmVnaW46MTI4MDAsZW5kOjEzMDU1fSx7YmVnaW46MTMwNTYsZW5kOjEzMzExfSx7YmVnaW46NDQwMzIsZW5kOjU1MjE1fSx7YmVnaW46NTUyOTYsZW5kOjU3MzQzfSx7YmVnaW46Njc4NDAsZW5kOjY3ODcxfSx7YmVnaW46MTk5NjgsZW5kOjQwOTU5fSx7YmVnaW46NTczNDQsZW5kOjYzNzQzfSx7YmVnaW46MTI3MzYsZW5kOjEyNzgzfSx7YmVnaW46NjQyNTYsZW5kOjY0MzM1fSx7YmVnaW46NjQzMzYsZW5kOjY1MDIzfSx7YmVnaW46NjUwNTYsZW5kOjY1MDcxfSx7YmVnaW46NjUwNDAsZW5kOjY1MDU1fSx7YmVnaW46NjUxMDQsZW5kOjY1MTM1fSx7YmVnaW46NjUxMzYsZW5kOjY1Mjc5fSx7YmVnaW46NjUyODAsZW5kOjY1NTE5fSx7YmVnaW46NjU1MjAsZW5kOjY1NTM1fSx7YmVnaW46Mzg0MCxlbmQ6NDA5NX0se2JlZ2luOjE3OTIsZW5kOjE4NzF9LHtiZWdpbjoxOTIwLGVuZDoxOTgzfSx7YmVnaW46MzQ1NixlbmQ6MzU4M30se2JlZ2luOjQwOTYsZW5kOjQyNTV9LHtiZWdpbjo0NjA4LGVuZDo0OTkxfSx7YmVnaW46NTAyNCxlbmQ6NTExOX0se2JlZ2luOjUxMjAsZW5kOjU3NTl9LHtiZWdpbjo1NzYwLGVuZDo1NzkxfSx7YmVnaW46NTc5MixlbmQ6NTg4N30se2JlZ2luOjYwMTYsZW5kOjYxNDN9LHtiZWdpbjo2MTQ0LGVuZDo2MzE5fSx7YmVnaW46MTAyNDAsZW5kOjEwNDk1fSx7YmVnaW46NDA5NjAsZW5kOjQyMTI3fSx7YmVnaW46NTg4OCxlbmQ6NTkxOX0se2JlZ2luOjY2MzA0LGVuZDo2NjM1MX0se2JlZ2luOjY2MzUyLGVuZDo2NjM4M30se2JlZ2luOjY2NTYwLGVuZDo2NjYzOX0se2JlZ2luOjExODc4NCxlbmQ6MTE5MDM5fSx7YmVnaW46MTE5ODA4LGVuZDoxMjA4MzF9LHtiZWdpbjoxMDQ0NDgwLGVuZDoxMDQ4NTczfSx7YmVnaW46NjUwMjQsZW5kOjY1MDM5fSx7YmVnaW46OTE3NTA0LGVuZDo5MTc2MzF9LHtiZWdpbjo2NDAwLGVuZDo2NDc5fSx7YmVnaW46NjQ4MCxlbmQ6NjUyN30se2JlZ2luOjY1MjgsZW5kOjY2MjN9LHtiZWdpbjo2NjU2LGVuZDo2Njg3fSx7YmVnaW46MTEyNjQsZW5kOjExMzU5fSx7YmVnaW46MTE1NjgsZW5kOjExNjQ3fSx7YmVnaW46MTk5MDQsZW5kOjE5OTY3fSx7YmVnaW46NDMwMDgsZW5kOjQzMDU1fSx7YmVnaW46NjU1MzYsZW5kOjY1NjYzfSx7YmVnaW46NjU4NTYsZW5kOjY1OTM1fSx7YmVnaW46NjY0MzIsZW5kOjY2NDYzfSx7YmVnaW46NjY0NjQsZW5kOjY2NTI3fSx7YmVnaW46NjY2NDAsZW5kOjY2Njg3fSx7YmVnaW46NjY2ODgsZW5kOjY2NzM1fSx7YmVnaW46Njc1ODQsZW5kOjY3NjQ3fSx7YmVnaW46NjgwOTYsZW5kOjY4MTkxfSx7YmVnaW46MTE5NTUyLGVuZDoxMTk2NDd9LHtiZWdpbjo3MzcyOCxlbmQ6NzQ3NTF9LHtiZWdpbjoxMTk2NDgsZW5kOjExOTY3OX0se2JlZ2luOjcwNDAsZW5kOjcxMDN9LHtiZWdpbjo3MTY4LGVuZDo3MjQ3fSx7YmVnaW46NzI0OCxlbmQ6NzI5NX0se2JlZ2luOjQzMTM2LGVuZDo0MzIzMX0se2JlZ2luOjQzMjY0LGVuZDo0MzMxMX0se2JlZ2luOjQzMzEyLGVuZDo0MzM1OX0se2JlZ2luOjQzNTIwLGVuZDo0MzYxNX0se2JlZ2luOjY1OTM2LGVuZDo2NTk5OX0se2JlZ2luOjY2ZTMsZW5kOjY2MDQ3fSx7YmVnaW46NjYyMDgsZW5kOjY2MjcxfSx7YmVnaW46MTI3MDI0LGVuZDoxMjcxMzV9XSxqZj17cGFyc2U6ZWIsbWFrZTpmYix1bmljb2RlUmFuZ2VzOmhmLGdldFVuaWNvZGVSYW5nZTpkYn0sa2Y9e3BhcnNlOmdiLG1ha2U6aGJ9LGxmPW5ldyBBcnJheSg5KTtsZlsxXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIDE9PT1iP3tzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGRlbHRhR2x5cGhJZDp0aGlzLnBhcnNlVVNob3J0KCl9OjI9PT1iP3tzdWJzdEZvcm1hdDoyLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHN1YnN0aXR1dGU6dGhpcy5wYXJzZU9mZnNldDE2TGlzdCgpfTp2b2lkIHhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IGxvb2t1cCB0eXBlIDEgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKX0sbGZbMl09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBNdWx0aXBsZSBTdWJzdGl0dXRpb24gU3VidGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpLHtzdWJzdEZvcm1hdDphLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHNlcXVlbmNlczp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoKX19LGxmWzNdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgQWx0ZXJuYXRlIFN1YnN0aXR1dGlvbiBTdWJ0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksYWx0ZXJuYXRlU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoKX19LGxmWzRdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgbGlnYXR1cmUgdGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpLHtzdWJzdEZvcm1hdDphLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGxpZ2F0dXJlU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoZnVuY3Rpb24oKXtyZXR1cm57bGlnR2x5cGg6dGhpcy5wYXJzZVVTaG9ydCgpLGNvbXBvbmVudHM6dGhpcy5wYXJzZVVTaG9ydExpc3QodGhpcy5wYXJzZVVTaG9ydCgpLTEpfX0pfX07dmFyIG1mPXtzZXF1ZW5jZUluZGV4OlEudVNob3J0LGxvb2t1cExpc3RJbmRleDpRLnVTaG9ydH07bGZbNV09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO2lmKDE9PT1iKXJldHVybntzdWJzdEZvcm1hdDpiLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHJ1bGVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKSxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm57aW5wdXQ6dGhpcy5wYXJzZVVTaG9ydExpc3QoYS0xKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KGIsbWYpfX0pfTtpZigyPT09YilyZXR1cm57c3Vic3RGb3JtYXQ6Yixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxjbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxjbGFzc1NldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpLGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntjbGFzc2VzOnRoaXMucGFyc2VVU2hvcnRMaXN0KGEtMSksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChiLG1mKX19KX07aWYoMz09PWIpe3ZhciBjPXRoaXMucGFyc2VVU2hvcnQoKSxkPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm57c3Vic3RGb3JtYXQ6Yixjb3ZlcmFnZXM6dGhpcy5wYXJzZUxpc3QoYyxRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QoZCxtZil9fXhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IGxvb2t1cCB0eXBlIDUgZm9ybWF0IG11c3QgYmUgMSwgMiBvciAzLlwiKX0sbGZbNl09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiAxPT09Yj97c3Vic3RGb3JtYXQ6MSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxjaGFpblJ1bGVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3JldHVybntiYWNrdHJhY2s6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxpbnB1dDp0aGlzLnBhcnNlVVNob3J0TGlzdCh0aGlzLnBhcnNlU2hvcnQoKS0xKSxsb29rYWhlYWQ6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KG1mKX19KX06Mj09PWI/e3N1YnN0Rm9ybWF0OjIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksYmFja3RyYWNrQ2xhc3NEZWY6dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksaW5wdXRDbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxsb29rYWhlYWRDbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxjaGFpbkNsYXNzU2V0OnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3JldHVybntiYWNrdHJhY2s6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxpbnB1dDp0aGlzLnBhcnNlVVNob3J0TGlzdCh0aGlzLnBhcnNlU2hvcnQoKS0xKSxsb29rYWhlYWQ6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KG1mKX19KX06Mz09PWI/e3N1YnN0Rm9ybWF0OjMsYmFja3RyYWNrQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxpbnB1dENvdmVyYWdlOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmNvdmVyYWdlKSksbG9va2FoZWFkQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KG1mKX06dm9pZCB4ZS5hc3NlcnQoITEsXCIweFwiK2EudG9TdHJpbmcoMTYpK1wiOiBsb29rdXAgdHlwZSA2IGZvcm1hdCBtdXN0IGJlIDEsIDIgb3IgMy5cIil9LGxmWzddPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3hlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBFeHRlbnNpb24gU3Vic3RpdHV0aW9uIHN1YnRhYmxlIGlkZW50aWZpZXItZm9ybWF0IG11c3QgYmUgMVwiKTt2YXIgYj10aGlzLnBhcnNlVVNob3J0KCksYz1uZXcgUSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5wYXJzZVVMb25nKCkpO3JldHVybntzdWJzdEZvcm1hdDoxLGxvb2t1cFR5cGU6YixleHRlbnNpb246bGZbYl0uY2FsbChjKX19LGxmWzhdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgUmV2ZXJzZSBDaGFpbmluZyBDb250ZXh0dWFsIFNpbmdsZSBTdWJzdGl0dXRpb24gU3VidGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpLHtzdWJzdEZvcm1hdDphLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGJhY2t0cmFja0NvdmVyYWdlOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmNvdmVyYWdlKSksbG9va2FoZWFkQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxzdWJzdGl0dXRlczp0aGlzLnBhcnNlVVNob3J0TGlzdCgpfX07dmFyIG5mPW5ldyBBcnJheSg5KTtuZlsxXT1mdW5jdGlvbihhKXtyZXR1cm4gMT09PWEuc3Vic3RGb3JtYXQ/bmV3IEllLlRhYmxlKFwic3Vic3RpdHV0aW9uVGFibGVcIixbe25hbWU6XCJzdWJzdEZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcImNvdmVyYWdlXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkNvdmVyYWdlKGEuY292ZXJhZ2UpfSx7bmFtZTpcImRlbHRhR2x5cGhJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmRlbHRhR2x5cGhJZH1dKTpuZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjJ9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9XS5jb25jYXQoSWUudXNob3J0TGlzdChcInN1YnN0aXR1dGVcIixhLnN1YnN0aXR1dGUpKSl9LG5mWzNdPWZ1bmN0aW9uKGEpe3JldHVybiB4ZS5hc3NlcnQoMT09PWEuc3Vic3RGb3JtYXQsXCJMb29rdXAgdHlwZSAzIHN1YnN0Rm9ybWF0IG11c3QgYmUgMS5cIiksbmV3IEllLlRhYmxlKFwic3Vic3RpdHV0aW9uVGFibGVcIixbe25hbWU6XCJzdWJzdEZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcImNvdmVyYWdlXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkNvdmVyYWdlKGEuY292ZXJhZ2UpfV0uY29uY2F0KEllLnRhYmxlTGlzdChcImFsdFNldFwiLGEuYWx0ZXJuYXRlU2V0cyxmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiYWx0ZXJuYXRlU2V0VGFibGVcIixJZS51c2hvcnRMaXN0KFwiYWx0ZXJuYXRlXCIsYSkpfSkpKX0sbmZbNF09ZnVuY3Rpb24oYSl7cmV0dXJuIHhlLmFzc2VydCgxPT09YS5zdWJzdEZvcm1hdCxcIkxvb2t1cCB0eXBlIDQgc3Vic3RGb3JtYXQgbXVzdCBiZSAxLlwiKSxuZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9XS5jb25jYXQoSWUudGFibGVMaXN0KFwibGlnU2V0XCIsYS5saWdhdHVyZVNldHMsZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcImxpZ2F0dXJlU2V0VGFibGVcIixJZS50YWJsZUxpc3QoXCJsaWdhdHVyZVwiLGEsZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcImxpZ2F0dXJlVGFibGVcIixbe25hbWU6XCJsaWdHbHlwaFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmxpZ0dseXBofV0uY29uY2F0KEllLnVzaG9ydExpc3QoXCJjb21wb25lbnRcIixhLmNvbXBvbmVudHMsYS5jb21wb25lbnRzLmxlbmd0aCsxKSkpfSkpfSkpKX07dmFyIG9mPXtwYXJzZTppYixtYWtlOmpifSxwZj17cGFyc2U6a2IsbWFrZTpsYn0scWY9e21ha2U6cGIsZm9udFRvVGFibGU6c2IsY29tcHV0ZUNoZWNrU3VtOm5ifTt3Yi5wcm90b3R5cGU9e3NlYXJjaFRhZzp0YixiaW5TZWFyY2g6dWIsZ2V0VGFibGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5mb250LnRhYmxlc1t0aGlzLnRhYmxlTmFtZV07cmV0dXJuIWImJmEmJihiPXRoaXMuZm9udC50YWJsZXNbdGhpcy50YWJsZU5hbWVdPXRoaXMuY3JlYXRlRGVmYXVsdFRhYmxlKCkpLGJ9LGdldFNjcmlwdE5hbWVzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRUYWJsZSgpO3JldHVybiBhP2Euc2NyaXB0cy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEudGFnfSk6W119LGdldERlZmF1bHRTY3JpcHROYW1lOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRUYWJsZSgpO2lmKGEpe2Zvcih2YXIgYj0hMSxjPTA7YzxhLnNjcmlwdHMubGVuZ3RoO2MrKyl7dmFyIGQ9YS5zY3JpcHRzW2NdLnRhZztpZihcIkRGTFRcIj09PWQpcmV0dXJuIGQ7XCJsYXRuXCI9PT1kJiYoYj0hMCl9cmV0dXJuIGI/XCJsYXRuXCI6dm9pZCAwfX0sZ2V0U2NyaXB0VGFibGU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmdldFRhYmxlKGIpO2lmKGMpe2E9YXx8XCJERkxUXCI7dmFyIGQ9Yy5zY3JpcHRzLGU9dGIoYy5zY3JpcHRzLGEpO2lmKGU+PTApcmV0dXJuIGRbZV0uc2NyaXB0O2lmKGIpe3ZhciBmPXt0YWc6YSxzY3JpcHQ6e2RlZmF1bHRMYW5nU3lzOntyZXNlcnZlZDowLHJlcUZlYXR1cmVJbmRleDo2NTUzNSxmZWF0dXJlSW5kZXhlczpbXX0sbGFuZ1N5c1JlY29yZHM6W119fTtyZXR1cm4gZC5zcGxpY2UoLTEtZSwwLGYpLGYuc2NyaXB0fX19LGdldExhbmdTeXNUYWJsZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5nZXRTY3JpcHRUYWJsZShhLGMpO2lmKGQpe2lmKCFifHxcImRmbHRcIj09PWJ8fFwiREZMVFwiPT09YilyZXR1cm4gZC5kZWZhdWx0TGFuZ1N5czt2YXIgZT10YihkLmxhbmdTeXNSZWNvcmRzLGIpO2lmKGU+PTApcmV0dXJuIGQubGFuZ1N5c1JlY29yZHNbZV0ubGFuZ1N5cztpZihjKXt2YXIgZj17dGFnOmIsbGFuZ1N5czp7cmVzZXJ2ZWQ6MCxyZXFGZWF0dXJlSW5kZXg6NjU1MzUsZmVhdHVyZUluZGV4ZXM6W119fTtyZXR1cm4gZC5sYW5nU3lzUmVjb3Jkcy5zcGxpY2UoLTEtZSwwLGYpLGYubGFuZ1N5c319fSxnZXRGZWF0dXJlVGFibGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5nZXRMYW5nU3lzVGFibGUoYSxiLGQpO2lmKGUpe2Zvcih2YXIgZixnPWUuZmVhdHVyZUluZGV4ZXMsaD10aGlzLmZvbnQudGFibGVzW3RoaXMudGFibGVOYW1lXS5mZWF0dXJlcyxpPTA7aTxnLmxlbmd0aDtpKyspaWYoZj1oW2dbaV1dLGYudGFnPT09YylyZXR1cm4gZi5mZWF0dXJlO2lmKGQpe3ZhciBqPWgubGVuZ3RoO3JldHVybiB4ZS5hc3NlcnQoMD09PWp8fGM+PWhbai0xXS50YWcsXCJGZWF0dXJlcyBtdXN0IGJlIGFkZGVkIGluIGFscGhhYmV0aWNhbCBvcmRlci5cIiksZj17dGFnOmMsZmVhdHVyZTp7cGFyYW1zOjAsbG9va3VwTGlzdEluZGV4ZXM6W119fSxoLnB1c2goZiksZy5wdXNoKGopLGYuZmVhdHVyZX19fSxnZXRMb29rdXBUYWJsZXM6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj10aGlzLmdldEZlYXR1cmVUYWJsZShhLGIsYyxlKSxnPVtdO2lmKGYpe2Zvcih2YXIgaCxpPWYubG9va3VwTGlzdEluZGV4ZXMsaj10aGlzLmZvbnQudGFibGVzW3RoaXMudGFibGVOYW1lXS5sb29rdXBzLGs9MDtrPGkubGVuZ3RoO2srKyloPWpbaVtrXV0saC5sb29rdXBUeXBlPT09ZCYmZy5wdXNoKGgpO2lmKDA9PT1nLmxlbmd0aCYmZSl7aD17bG9va3VwVHlwZTpkLGxvb2t1cEZsYWc6MCxzdWJ0YWJsZXM6W10sbWFya0ZpbHRlcmluZ1NldDp2b2lkIDB9O3ZhciBsPWoubGVuZ3RoO3JldHVybiBqLnB1c2goaCksaS5wdXNoKGwpLFtoXX19cmV0dXJuIGd9LGdldEdseXBoQ2xhc3M6ZnVuY3Rpb24oYSxiKXtzd2l0Y2goYS5mb3JtYXQpe2Nhc2UgMTpyZXR1cm4gYS5zdGFydEdseXBoPD1iJiZiPGEuc3RhcnRHbHlwaCthLmNsYXNzZXMubGVuZ3RoP2EuY2xhc3Nlc1tiLWEuc3RhcnRHbHlwaF06MDtjYXNlIDI6dmFyIGM9dmIoYS5yYW5nZXMsYik7cmV0dXJuIGM/Yy5jbGFzc0lkOjB9fSxnZXRDb3ZlcmFnZUluZGV4OmZ1bmN0aW9uKGEsYil7c3dpdGNoKGEuZm9ybWF0KXtjYXNlIDE6dmFyIGM9dWIoYS5nbHlwaHMsYik7cmV0dXJuIGM+PTA/YzotMTtjYXNlIDI6dmFyIGQ9dmIoYS5yYW5nZXMsYik7cmV0dXJuIGQ/ZC5pbmRleCtiLWQuc3RhcnQ6LTF9fSxleHBhbmRDb3ZlcmFnZTpmdW5jdGlvbihhKXtpZigxPT09YS5mb3JtYXQpcmV0dXJuIGEuZ2x5cGhzO2Zvcih2YXIgYj1bXSxjPWEucmFuZ2VzLGQ9MDtkPGMubGVuZ3RoO2QrKylmb3IodmFyIGU9Y1tkXSxmPWUuc3RhcnQsZz1lLmVuZCxoPWY7aDw9ZztoKyspYi5wdXNoKGgpO3JldHVybiBifX0seGIucHJvdG90eXBlPXdiLnByb3RvdHlwZSx4Yi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0RGVmYXVsdFNjcmlwdE5hbWUoKTt0aGlzLmRlZmF1bHRLZXJuaW5nVGFibGVzPXRoaXMuZ2V0S2VybmluZ1RhYmxlcyhhKX0seGIucHJvdG90eXBlLmdldEtlcm5pbmdWYWx1ZT1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT0wO2U8YS5sZW5ndGg7ZSsrKWZvcih2YXIgZj1hW2VdLnN1YnRhYmxlcyxnPTA7ZzxmLmxlbmd0aDtnKyspe3ZhciBoPWZbZ10saT1kLmdldENvdmVyYWdlSW5kZXgoaC5jb3ZlcmFnZSxiKTtpZighKGk8MCkpc3dpdGNoKGgucG9zRm9ybWF0KXtjYXNlIDE6Zm9yKHZhciBqPWgucGFpclNldHNbaV0saz0wO2s8ai5sZW5ndGg7aysrKXt2YXIgbD1qW2tdO2lmKGwuc2Vjb25kR2x5cGg9PT1jKXJldHVybiBsLnZhbHVlMSYmbC52YWx1ZTEueEFkdmFuY2V8fDB9YnJlYWs7Y2FzZSAyOnZhciBtPWQuZ2V0R2x5cGhDbGFzcyhoLmNsYXNzRGVmMSxiKSxuPWQuZ2V0R2x5cGhDbGFzcyhoLmNsYXNzRGVmMixjKSxvPWguY2xhc3NSZWNvcmRzW21dW25dO3JldHVybiBvLnZhbHVlMSYmby52YWx1ZTEueEFkdmFuY2V8fDB9fXJldHVybiAwfSx4Yi5wcm90b3R5cGUuZ2V0S2VybmluZ1RhYmxlcz1mdW5jdGlvbihhLGIpe2lmKHRoaXMuZm9udC50YWJsZXMuZ3BvcylyZXR1cm4gdGhpcy5nZXRMb29rdXBUYWJsZXMoYSxiLFwia2VyblwiLDIpfSx5Yi5wcm90b3R5cGU9d2IucHJvdG90eXBlLHliLnByb3RvdHlwZS5jcmVhdGVEZWZhdWx0VGFibGU9ZnVuY3Rpb24oKXtyZXR1cm57dmVyc2lvbjoxLHNjcmlwdHM6W3t0YWc6XCJERkxUXCIsc2NyaXB0OntkZWZhdWx0TGFuZ1N5czp7cmVzZXJ2ZWQ6MCxyZXFGZWF0dXJlSW5kZXg6NjU1MzUsZmVhdHVyZUluZGV4ZXM6W119LGxhbmdTeXNSZWNvcmRzOltdfX1dLGZlYXR1cmVzOltdLGxvb2t1cHM6W119fSx5Yi5wcm90b3R5cGUuZ2V0U2luZ2xlPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPVtdLGY9dGhpcy5nZXRMb29rdXBUYWJsZXMoYixjLGEsMSksZz0wO2c8Zi5sZW5ndGg7ZysrKWZvcih2YXIgaD1mW2ddLnN1YnRhYmxlcyxpPTA7aTxoLmxlbmd0aDtpKyspe3ZhciBqPWhbaV0saz1kLmV4cGFuZENvdmVyYWdlKGouY292ZXJhZ2UpLGw9dm9pZCAwO2lmKDE9PT1qLnN1YnN0Rm9ybWF0KXt2YXIgbT1qLmRlbHRhR2x5cGhJZDtmb3IobD0wO2w8ay5sZW5ndGg7bCsrKXt2YXIgbj1rW2xdO2UucHVzaCh7c3ViOm4sYnk6bittfSl9fWVsc2V7dmFyIG89ai5zdWJzdGl0dXRlO2ZvcihsPTA7bDxrLmxlbmd0aDtsKyspZS5wdXNoKHtzdWI6a1tsXSxieTpvW2xdfSl9fXJldHVybiBlfSx5Yi5wcm90b3R5cGUuZ2V0QWx0ZXJuYXRlcz1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT1bXSxmPXRoaXMuZ2V0TG9va3VwVGFibGVzKGIsYyxhLDMpLGc9MDtnPGYubGVuZ3RoO2crKylmb3IodmFyIGg9ZltnXS5zdWJ0YWJsZXMsaT0wO2k8aC5sZW5ndGg7aSsrKWZvcih2YXIgaj1oW2ldLGs9ZC5leHBhbmRDb3ZlcmFnZShqLmNvdmVyYWdlKSxsPWouYWx0ZXJuYXRlU2V0cyxtPTA7bTxrLmxlbmd0aDttKyspZS5wdXNoKHtzdWI6a1ttXSxieTpsW21dfSk7cmV0dXJuIGV9LHliLnByb3RvdHlwZS5nZXRMaWdhdHVyZXM9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD10aGlzLGU9W10sZj10aGlzLmdldExvb2t1cFRhYmxlcyhiLGMsYSw0KSxnPTA7ZzxmLmxlbmd0aDtnKyspZm9yKHZhciBoPWZbZ10uc3VidGFibGVzLGk9MDtpPGgubGVuZ3RoO2krKylmb3IodmFyIGo9aFtpXSxrPWQuZXhwYW5kQ292ZXJhZ2Uoai5jb3ZlcmFnZSksbD1qLmxpZ2F0dXJlU2V0cyxtPTA7bTxrLmxlbmd0aDttKyspZm9yKHZhciBuPWtbbV0sbz1sW21dLHA9MDtwPG8ubGVuZ3RoO3ArKyl7dmFyIHE9b1twXTtlLnB1c2goe3N1Yjpbbl0uY29uY2F0KHEuY29tcG9uZW50cyksYnk6cS5saWdHbHlwaH0pfXJldHVybiBlfSx5Yi5wcm90b3R5cGUuYWRkU2luZ2xlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZ2V0TG9va3VwVGFibGVzKGMsZCxhLDEsITApWzBdLGY9QWIoZSwyLHtzdWJzdEZvcm1hdDoyLGNvdmVyYWdlOntmb3JtYXQ6MSxnbHlwaHM6W119LHN1YnN0aXR1dGU6W119KTt4ZS5hc3NlcnQoMT09PWYuY292ZXJhZ2UuZm9ybWF0LFwiTGlnYXR1cmU6IHVuYWJsZSB0byBtb2RpZnkgY292ZXJhZ2UgdGFibGUgZm9ybWF0IFwiK2YuY292ZXJhZ2UuZm9ybWF0KTt2YXIgZz1iLnN1YixoPXRoaXMuYmluU2VhcmNoKGYuY292ZXJhZ2UuZ2x5cGhzLGcpO2g8MCYmKGg9LTEtaCxmLmNvdmVyYWdlLmdseXBocy5zcGxpY2UoaCwwLGcpLGYuc3Vic3RpdHV0ZS5zcGxpY2UoaCwwLDApKSxmLnN1YnN0aXR1dGVbaF09Yi5ieX0seWIucHJvdG90eXBlLmFkZEFsdGVybmF0ZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldExvb2t1cFRhYmxlcyhjLGQsYSwzLCEwKVswXSxmPUFiKGUsMSx7c3Vic3RGb3JtYXQ6MSxjb3ZlcmFnZTp7Zm9ybWF0OjEsZ2x5cGhzOltdfSxhbHRlcm5hdGVTZXRzOltdfSk7eGUuYXNzZXJ0KDE9PT1mLmNvdmVyYWdlLmZvcm1hdCxcIkxpZ2F0dXJlOiB1bmFibGUgdG8gbW9kaWZ5IGNvdmVyYWdlIHRhYmxlIGZvcm1hdCBcIitmLmNvdmVyYWdlLmZvcm1hdCk7dmFyIGc9Yi5zdWIsaD10aGlzLmJpblNlYXJjaChmLmNvdmVyYWdlLmdseXBocyxnKTtoPDAmJihoPS0xLWgsZi5jb3ZlcmFnZS5nbHlwaHMuc3BsaWNlKGgsMCxnKSxmLmFsdGVybmF0ZVNldHMuc3BsaWNlKGgsMCwwKSksZi5hbHRlcm5hdGVTZXRzW2hdPWIuYnl9LHliLnByb3RvdHlwZS5hZGRMaWdhdHVyZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldExvb2t1cFRhYmxlcyhjLGQsYSw0LCEwKVswXSxmPWUuc3VidGFibGVzWzBdO2Z8fChmPXtzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOntmb3JtYXQ6MSxnbHlwaHM6W119LGxpZ2F0dXJlU2V0czpbXX0sZS5zdWJ0YWJsZXNbMF09ZikseGUuYXNzZXJ0KDE9PT1mLmNvdmVyYWdlLmZvcm1hdCxcIkxpZ2F0dXJlOiB1bmFibGUgdG8gbW9kaWZ5IGNvdmVyYWdlIHRhYmxlIGZvcm1hdCBcIitmLmNvdmVyYWdlLmZvcm1hdCk7dmFyIGc9Yi5zdWJbMF0saD1iLnN1Yi5zbGljZSgxKSxpPXtsaWdHbHlwaDpiLmJ5LGNvbXBvbmVudHM6aH0saj10aGlzLmJpblNlYXJjaChmLmNvdmVyYWdlLmdseXBocyxnKTtpZihqPj0wKXtmb3IodmFyIGs9Zi5saWdhdHVyZVNldHNbal0sbD0wO2w8ay5sZW5ndGg7bCsrKWlmKHpiKGtbbF0uY29tcG9uZW50cyxoKSlyZXR1cm47ay5wdXNoKGkpfWVsc2Ugaj0tMS1qLGYuY292ZXJhZ2UuZ2x5cGhzLnNwbGljZShqLDAsZyksZi5saWdhdHVyZVNldHMuc3BsaWNlKGosMCxbaV0pfSx5Yi5wcm90b3R5cGUuZ2V0RmVhdHVyZT1mdW5jdGlvbihhLGIsYyl7aWYoL3NzXFxkXFxkLy50ZXN0KGEpKXJldHVybiB0aGlzLmdldFNpbmdsZShhLGIsYyk7c3dpdGNoKGEpe2Nhc2VcImFhbHRcIjpjYXNlXCJzYWx0XCI6cmV0dXJuIHRoaXMuZ2V0U2luZ2xlKGEsYixjKS5jb25jYXQodGhpcy5nZXRBbHRlcm5hdGVzKGEsYixjKSk7Y2FzZVwiZGxpZ1wiOmNhc2VcImxpZ2FcIjpjYXNlXCJybGlnXCI6cmV0dXJuIHRoaXMuZ2V0TGlnYXR1cmVzKGEsYixjKX19LHliLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoL3NzXFxkXFxkLy50ZXN0KGEpKXJldHVybiB0aGlzLmFkZFNpbmdsZShhLGIsYyxkKTtzd2l0Y2goYSl7Y2FzZVwiYWFsdFwiOmNhc2VcInNhbHRcIjpyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYi5ieT90aGlzLmFkZFNpbmdsZShhLGIsYyxkKTp0aGlzLmFkZEFsdGVybmF0ZShhLGIsYyxkKTtjYXNlXCJkbGlnXCI6Y2FzZVwibGlnYVwiOmNhc2VcInJsaWdcIjpyZXR1cm4gdGhpcy5hZGRMaWdhdHVyZShhLGIsYyxkKX19O3ZhciByZixzZix0Zix1Zix2Zj17Z2V0UGF0aDpKYixwYXJzZTpMYn0sd2Y9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zclBlcmlvZCxjPXRoaXMuc3JQaGFzZSxkPXRoaXMuc3JUaHJlc2hvbGQsZT0xO3JldHVybiBhPDAmJihhPS1hLGU9LTEpLGErPWQtYyxhPU1hdGgudHJ1bmMoYS9iKSpiLGErPWMsYTwwP2MqZTphKmV9LHhmPXt4OjEseTowLGF4aXM6XCJ4XCIsZGlzdGFuY2U6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKGM/YS54bzphLngpLShkP2IueG86Yi54KX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7cmV0dXJuIGQmJmQhPT10aGlzPyhlPWQuZGlzdGFuY2UoYSxiLCEwLCEwKSxmPWQuZGlzdGFuY2UoYSxjLCEwLCEwKSxpPWQuZGlzdGFuY2UoYixiLCExLCEwKSxqPWQuZGlzdGFuY2UoYyxjLCExLCEwKSxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZCB4Zi5zZXRSZWxhdGl2ZShhLGEsKGkraikvMixkLCEwKTp2b2lkIHhmLnNldFJlbGF0aXZlKGEsYSwoaSpoK2oqZykvayxkLCEwKSk6KGU9YS54by1iLnhvLGY9YS54by1jLnhvLGk9Yi54LWIueG8saj1jLngtYy54byxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZChhLng9YS54bysoaStqKS8yKTp2b2lkKGEueD1hLnhvKyhpKmgraipnKS9rKSl9LG5vcm1hbFNsb3BlOk51bWJlci5ORUdBVElWRV9JTkZJTklUWSxzZXRSZWxhdGl2ZTpmdW5jdGlvbihhLGIsYyxkLGUpe2lmKCFkfHxkPT09dGhpcylyZXR1cm4gdm9pZChhLng9KGU/Yi54bzpiLngpK2MpO3ZhciBmPWU/Yi54bzpiLngsZz1lP2IueW86Yi55LGg9ZitjKmQueCxpPWcrYypkLnk7YS54PWgrKGEueS1pKS9kLm5vcm1hbFNsb3BlfSxzbG9wZTowLHRvdWNoOmZ1bmN0aW9uKGEpe2EueFRvdWNoZWQ9ITB9LHRvdWNoZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueFRvdWNoZWR9LHVudG91Y2g6ZnVuY3Rpb24oYSl7YS54VG91Y2hlZD0hMX19LHlmPXt4OjAseToxLGF4aXM6XCJ5XCIsZGlzdGFuY2U6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKGM/YS55bzphLnkpLShkP2IueW86Yi55KX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7cmV0dXJuIGQmJmQhPT10aGlzPyhlPWQuZGlzdGFuY2UoYSxiLCEwLCEwKSxmPWQuZGlzdGFuY2UoYSxjLCEwLCEwKSxpPWQuZGlzdGFuY2UoYixiLCExLCEwKSxqPWQuZGlzdGFuY2UoYyxjLCExLCEwKSxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZCB5Zi5zZXRSZWxhdGl2ZShhLGEsKGkraikvMixkLCEwKTp2b2lkIHlmLnNldFJlbGF0aXZlKGEsYSwoaSpoK2oqZykvayxkLCEwKSk6KGU9YS55by1iLnlvLGY9YS55by1jLnlvLGk9Yi55LWIueW8saj1jLnktYy55byxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZChhLnk9YS55bysoaStqKS8yKTp2b2lkKGEueT1hLnlvKyhpKmgraipnKS9rKSl9LG5vcm1hbFNsb3BlOjAsc2V0UmVsYXRpdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZighZHx8ZD09PXRoaXMpcmV0dXJuIHZvaWQoYS55PShlP2IueW86Yi55KStjKTt2YXIgZj1lP2IueG86Yi54LGc9ZT9iLnlvOmIueSxoPWYrYypkLngsaT1nK2MqZC55O2EueT1pK2Qubm9ybWFsU2xvcGUqKGEueC1oKX0sc2xvcGU6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHRvdWNoOmZ1bmN0aW9uKGEpe2EueVRvdWNoZWQ9ITB9LHRvdWNoZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueVRvdWNoZWR9LHVudG91Y2g6ZnVuY3Rpb24oYSl7YS55VG91Y2hlZD0hMX19O09iamVjdC5mcmVlemUoeGYpLE9iamVjdC5mcmVlemUoeWYpLFRiLnByb3RvdHlwZS5kaXN0YW5jZT1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy54KnhmLmRpc3RhbmNlKGEsYixjLGQpK3RoaXMueSp5Zi5kaXN0YW5jZShhLGIsYyxkKX0sVGIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrO2lmKGc9ZC5kaXN0YW5jZShhLGIsITAsITApLGg9ZC5kaXN0YW5jZShhLGMsITAsITApLGU9ZC5kaXN0YW5jZShiLGIsITEsITApLGY9ZC5kaXN0YW5jZShjLGMsITEsITApLGk9TWF0aC5hYnMoZyksaj1NYXRoLmFicyhoKSwwPT09KGs9aStqKSlyZXR1cm4gdm9pZCB0aGlzLnNldFJlbGF0aXZlKGEsYSwoZStmKS8yLGQsITApO3RoaXMuc2V0UmVsYXRpdmUoYSxhLChlKmorZippKS9rLGQsITApfSxUYi5wcm90b3R5cGUuc2V0UmVsYXRpdmU9ZnVuY3Rpb24oYSxiLGMsZCxlKXtkPWR8fHRoaXM7dmFyIGY9ZT9iLnhvOmIueCxnPWU/Yi55bzpiLnksaD1mK2MqZC54LGk9ZytjKmQueSxqPWQubm9ybWFsU2xvcGUsaz10aGlzLnNsb3BlLGw9YS54LG09YS55O2EueD0oaypsLWoqaCtpLW0pLyhrLWopLGEueT1rKihhLngtbCkrbX0sVGIucHJvdG90eXBlLnRvdWNoPWZ1bmN0aW9uKGEpe2EueFRvdWNoZWQ9ITAsYS55VG91Y2hlZD0hMH0sVmIucHJvdG90eXBlLm5leHRUb3VjaGVkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLm5leHRQb2ludE9uQ29udG91cjshYS50b3VjaGVkKGIpJiZiIT09dGhpczspYj1iLm5leHRQb2ludE9uQ29udG91cjtyZXR1cm4gYn0sVmIucHJvdG90eXBlLnByZXZUb3VjaGVkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLnByZXZQb2ludE9uQ29udG91cjshYS50b3VjaGVkKGIpJiZiIT09dGhpczspYj1iLnByZXZQb2ludE9uQ29udG91cjtyZXR1cm4gYn07dmFyIHpmPU9iamVjdC5mcmVlemUobmV3IFZiKDAsMCkpLEFmPXtjdkN1dEluOjE3LzE2LGRlbHRhQmFzZTo5LGRlbHRhU2hpZnQ6LjEyNSxsb29wOjEsbWluRGlzOjEsYXV0b0ZsaXA6ITB9O01iLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGIsYyl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgc2l6ZSBpcyBub3QgYSBudW1iZXIhXCIpO2lmKCEodGhpcy5fZXJyb3JTdGF0ZT4yKSl7dmFyIGQ9dGhpcy5mb250LGU9dGhpcy5fcHJlcFN0YXRlO2lmKCFlfHxlLnBwZW0hPT1jKXt2YXIgZj10aGlzLl9mcGdtU3RhdGU7aWYoIWYpe1diLnByb3RvdHlwZT1BZixmPXRoaXMuX2ZwZ21TdGF0ZT1uZXcgV2IoXCJmcGdtXCIsZC50YWJsZXMuZnBnbSksZi5mdW5jcz1bXSxmLmZvbnQ9ZCxhLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIEZQR00tLS1cIiksZi5zdGVwPS0xKTt0cnl7c2YoZil9Y2F0Y2goYSl7cmV0dXJuIGNvbnNvbGUubG9nKFwiSGludGluZyBlcnJvciBpbiBGUEdNOlwiK2EpLHZvaWQodGhpcy5fZXJyb3JTdGF0ZT0zKX19V2IucHJvdG90eXBlPWYsZT10aGlzLl9wcmVwU3RhdGU9bmV3IFdiKFwicHJlcFwiLGQudGFibGVzLnByZXApLGUucHBlbT1jO3ZhciBnPWQudGFibGVzLmN2dDtpZihnKWZvcih2YXIgaD1lLmN2dD1uZXcgQXJyYXkoZy5sZW5ndGgpLGk9Yy9kLnVuaXRzUGVyRW0saj0wO2o8Zy5sZW5ndGg7aisrKWhbal09Z1tqXSppO2Vsc2UgZS5jdnQ9W107YS5ERUJVRyYmKGNvbnNvbGUubG9nKFwiLS0tRVhFQyBQUkVQLS0tXCIpLGUuc3RlcD0tMSk7dHJ5e3NmKGUpfWNhdGNoKGEpe3RoaXMuX2Vycm9yU3RhdGU8MiYmY29uc29sZS5sb2coXCJIaW50aW5nIGVycm9yIGluIFBSRVA6XCIrYSksdGhpcy5fZXJyb3JTdGF0ZT0yfX1pZighKHRoaXMuX2Vycm9yU3RhdGU+MSkpdHJ5e3JldHVybiB0ZihiLGUpfWNhdGNoKGEpe3JldHVybiB0aGlzLl9lcnJvclN0YXRlPDEmJihjb25zb2xlLmxvZyhcIkhpbnRpbmcgZXJyb3I6XCIrYSksY29uc29sZS5sb2coXCJOb3RlOiBmdXJ0aGVyIGhpbnRpbmcgZXJyb3JzIGFyZSBzaWxlbmNlZFwiKSksdm9pZCh0aGlzLl9lcnJvclN0YXRlPTEpfX19LHRmPWZ1bmN0aW9uKGIsYyl7dmFyIGQsZSxmLGc9Yy5wcGVtL2MuZm9udC51bml0c1BlckVtLGg9ZyxpPWIuY29tcG9uZW50cztpZihXYi5wcm90b3R5cGU9YyxpKXt2YXIgaj1jLmZvbnQ7ZT1bXSxkPVtdO2Zvcih2YXIgaz0wO2s8aS5sZW5ndGg7aysrKXt2YXIgbD1pW2tdLG09ai5nbHlwaHMuZ2V0KGwuZ2x5cGhJbmRleCk7Zj1uZXcgV2IoXCJnbHlmXCIsbS5pbnN0cnVjdGlvbnMpLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgQ09NUCBcIitrK1wiLS0tXCIpLGYuc3RlcD0tMSksdWYobSxmLGcsaCk7Zm9yKHZhciBuPU1hdGgucm91bmQobC5keCpnKSxvPU1hdGgucm91bmQobC5keSpoKSxwPWYuZ1pvbmUscT1mLmNvbnRvdXJzLHI9MDtyPHAubGVuZ3RoO3IrKyl7dmFyIHM9cFtyXTtzLnhUb3VjaGVkPXMueVRvdWNoZWQ9ITEscy54bz1zLng9cy54K24scy55bz1zLnk9cy55K299dmFyIHQ9ZS5sZW5ndGg7ZS5wdXNoLmFwcGx5KGUscCk7Zm9yKHZhciB1PTA7dTxxLmxlbmd0aDt1KyspZC5wdXNoKHFbdV0rdCl9Yi5pbnN0cnVjdGlvbnMmJiFmLmluaGliaXRHcmlkRml0JiYoZj1uZXcgV2IoXCJnbHlmXCIsYi5pbnN0cnVjdGlvbnMpLGYuZ1pvbmU9Zi56MD1mLnoxPWYuejI9ZSxmLmNvbnRvdXJzPWQsZS5wdXNoKG5ldyBWYigwLDApLG5ldyBWYihNYXRoLnJvdW5kKGIuYWR2YW5jZVdpZHRoKmcpLDApKSxhLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIENPTVBPU0lURS0tLVwiKSxmLnN0ZXA9LTEpLHNmKGYpLGUubGVuZ3RoLT0yKX1lbHNlIGY9bmV3IFdiKFwiZ2x5ZlwiLGIuaW5zdHJ1Y3Rpb25zKSxhLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIEdMWVBILS0tXCIpLGYuc3RlcD0tMSksdWYoYixmLGcsaCksZT1mLmdab25lO3JldHVybiBlfSx1Zj1mdW5jdGlvbihiLGMsZCxlKXtmb3IodmFyIGYsZz1iLnBvaW50c3x8W10saD1nLmxlbmd0aCxpPWMuZ1pvbmU9Yy56MD1jLnoxPWMuejI9W10saj1jLmNvbnRvdXJzPVtdLGs9MDtrPGg7aysrKWY9Z1trXSxpW2tdPW5ldyBWYihmLngqZCxmLnkqZSxmLmxhc3RQb2ludE9mQ29udG91cixmLm9uQ3VydmUpO2Zvcih2YXIgbCxtLG49MDtuPGg7bisrKWY9aVtuXSxsfHwobD1mLGoucHVzaChuKSksZi5sYXN0UG9pbnRPZkNvbnRvdXI/KGYubmV4dFBvaW50T25Db250b3VyPWwsbC5wcmV2UG9pbnRPbkNvbnRvdXI9ZixsPXZvaWQgMCk6KG09aVtuKzFdLGYubmV4dFBvaW50T25Db250b3VyPW0sbS5wcmV2UG9pbnRPbkNvbnRvdXI9Zik7aWYoIWMuaW5oaWJpdEdyaWRGaXQpe2lmKGEuREVCVUcpe2NvbnNvbGUubG9nKFwiUFJPQ0VTU0lORyBHTFlQSFwiLGMuc3RhY2spO2Zvcih2YXIgbz0wO288aDtvKyspY29uc29sZS5sb2cobyxpW29dLngsaVtvXS55KX1pZihpLnB1c2gobmV3IFZiKDAsMCksbmV3IFZiKE1hdGgucm91bmQoYi5hZHZhbmNlV2lkdGgqZCksMCkpLHNmKGMpLGkubGVuZ3RoLT0yLGEuREVCVUcpe2NvbnNvbGUubG9nKFwiRklOSVNIRUQgR0xZUEhcIixjLnN0YWNrKTtmb3IodmFyIHA9MDtwPGg7cCsrKWNvbnNvbGUubG9nKHAsaVtwXS54LGlbcF0ueSl9fX0sc2Y9ZnVuY3Rpb24oYil7dmFyIGM9Yi5wcm9nO2lmKGMpe3ZhciBkLGU9Yy5sZW5ndGg7Zm9yKGIuaXA9MDtiLmlwPGU7Yi5pcCsrKXtpZihhLkRFQlVHJiZiLnN0ZXArKywhKGQ9cmZbY1tiLmlwXV0pKXRocm93IG5ldyBFcnJvcihcInVua25vd24gaW5zdHJ1Y3Rpb246IDB4XCIrTnVtYmVyKGNbYi5pcF0pLnRvU3RyaW5nKDE2KSk7ZChiKX19fSxyZj1bWmIuYmluZCh2b2lkIDAseWYpLFpiLmJpbmQodm9pZCAwLHhmKSwkYi5iaW5kKHZvaWQgMCx5ZiksJGIuYmluZCh2b2lkIDAseGYpLF9iLmJpbmQodm9pZCAwLHlmKSxfYi5iaW5kKHZvaWQgMCx4ZiksYWMuYmluZCh2b2lkIDAsMCksYWMuYmluZCh2b2lkIDAsMSksYmMuYmluZCh2b2lkIDAsMCksYmMuYmluZCh2b2lkIDAsMSksY2MsZGMsZWMsZmMsZ2MsaGMsaWMsamMsa2MsbGMsbWMsbmMsb2MscGMscWMscmMsc2MsdGMsdWMsdmMsdm9pZCAwLHZvaWQgMCx3Yyx4Yyx5Yyx6YyxBYyxEYyxFYyx2b2lkIDAsdm9pZCAwLHZvaWQgMCxCYyxDYyxGYyx2b2lkIDAsR2MuYmluZCh2b2lkIDAsMCksR2MuYmluZCh2b2lkIDAsMSksSGMuYmluZCh2b2lkIDAseWYpLEhjLmJpbmQodm9pZCAwLHhmKSxJYy5iaW5kKHZvaWQgMCwwKSxJYy5iaW5kKHZvaWQgMCwxKSxKYy5iaW5kKHZvaWQgMCwwKSxKYy5iaW5kKHZvaWQgMCwxKSxLYy5iaW5kKHZvaWQgMCwwKSxLYy5iaW5kKHZvaWQgMCwxKSxMYyxNYyxOYy5iaW5kKHZvaWQgMCwwKSxOYy5iaW5kKHZvaWQgMCwxKSxPYyxQYyxRYy5iaW5kKHZvaWQgMCwwKSxRYy5iaW5kKHZvaWQgMCwxKSxSYyxTYyxUYyxVYyxWYyxXYyxYYy5iaW5kKHZvaWQgMCwwKSxYYy5iaW5kKHZvaWQgMCwxKSx2b2lkIDAsWWMuYmluZCh2b2lkIDAsMCksWWMuYmluZCh2b2lkIDAsMSksWmMsdm9pZCAwLCRjLHZvaWQgMCx2b2lkIDAsX2MsYWQsYmQsY2QsZGQsZWQsZmQsZ2QsaGQsaWQsamQsa2QsbGQsbWQuYmluZCh2b2lkIDAsMSksbmQsb2QscGQscWQscmQsc2QsdGQsdWQsdmQsd2QseGQuYmluZCh2b2lkIDAsMCkseGQuYmluZCh2b2lkIDAsMSkseGQuYmluZCh2b2lkIDAsMikseGQuYmluZCh2b2lkIDAsMyksdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHlkLG1kLmJpbmQodm9pZCAwLDIpLG1kLmJpbmQodm9pZCAwLDMpLHpkLmJpbmQodm9pZCAwLDEpLHpkLmJpbmQodm9pZCAwLDIpLHpkLmJpbmQodm9pZCAwLDMpLEFkLEJkLHZvaWQgMCx2b2lkIDAsQ2Qsdm9pZCAwLERkLEVkLHhjLHhjLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsRmQsR2QuYmluZCh2b2lkIDAsMCksR2QuYmluZCh2b2lkIDAsMSksSGQsdm9pZCAwLElkLEpkLEtkLExkLE1kLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE5kLmJpbmQodm9pZCAwLDEpLE5kLmJpbmQodm9pZCAwLDIpLE5kLmJpbmQodm9pZCAwLDMpLE5kLmJpbmQodm9pZCAwLDQpLE5kLmJpbmQodm9pZCAwLDUpLE5kLmJpbmQodm9pZCAwLDYpLE5kLmJpbmQodm9pZCAwLDcpLE5kLmJpbmQodm9pZCAwLDgpLE9kLmJpbmQodm9pZCAwLDEpLE9kLmJpbmQodm9pZCAwLDIpLE9kLmJpbmQodm9pZCAwLDMpLE9kLmJpbmQodm9pZCAwLDQpLE9kLmJpbmQodm9pZCAwLDUpLE9kLmJpbmQodm9pZCAwLDYpLE9kLmJpbmQodm9pZCAwLDcpLE9kLmJpbmQodm9pZCAwLDgpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDAsMCksUGQuYmluZCh2b2lkIDAsMCwwLDAsMCwxKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwwLDIpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDAsMyksUGQuYmluZCh2b2lkIDAsMCwwLDAsMSwwKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwxLDEpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDEsMiksUGQuYmluZCh2b2lkIDAsMCwwLDAsMSwzKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwwLDApLFBkLmJpbmQodm9pZCAwLDAsMCwxLDAsMSksUGQuYmluZCh2b2lkIDAsMCwwLDEsMCwyKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwwLDMpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDEsMCksUGQuYmluZCh2b2lkIDAsMCwwLDEsMSwxKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwxLDIpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDEsMyksUGQuYmluZCh2b2lkIDAsMCwxLDAsMCwwKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwwLDEpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDAsMiksUGQuYmluZCh2b2lkIDAsMCwxLDAsMCwzKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwxLDApLFBkLmJpbmQodm9pZCAwLDAsMSwwLDEsMSksUGQuYmluZCh2b2lkIDAsMCwxLDAsMSwyKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwxLDMpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDAsMCksUGQuYmluZCh2b2lkIDAsMCwxLDEsMCwxKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwwLDIpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDAsMyksUGQuYmluZCh2b2lkIDAsMCwxLDEsMSwwKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwxLDEpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDEsMiksUGQuYmluZCh2b2lkIDAsMCwxLDEsMSwzKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwwLDApLFBkLmJpbmQodm9pZCAwLDEsMCwwLDAsMSksUGQuYmluZCh2b2lkIDAsMSwwLDAsMCwyKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwwLDMpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDEsMCksUGQuYmluZCh2b2lkIDAsMSwwLDAsMSwxKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwxLDIpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDEsMyksUGQuYmluZCh2b2lkIDAsMSwwLDEsMCwwKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwwLDEpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDAsMiksUGQuYmluZCh2b2lkIDAsMSwwLDEsMCwzKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwxLDApLFBkLmJpbmQodm9pZCAwLDEsMCwxLDEsMSksUGQuYmluZCh2b2lkIDAsMSwwLDEsMSwyKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwxLDMpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDAsMCksUGQuYmluZCh2b2lkIDAsMSwxLDAsMCwxKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwwLDIpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDAsMyksUGQuYmluZCh2b2lkIDAsMSwxLDAsMSwwKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwxLDEpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDEsMiksUGQuYmluZCh2b2lkIDAsMSwxLDAsMSwzKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwwLDApLFBkLmJpbmQodm9pZCAwLDEsMSwxLDAsMSksUGQuYmluZCh2b2lkIDAsMSwxLDEsMCwyKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwwLDMpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDEsMCksUGQuYmluZCh2b2lkIDAsMSwxLDEsMSwxKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwxLDIpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDEsMyldO3ZhciBCZj1BcnJheS5mcm9tfHxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXRjaCgvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXT98W15cXHVEODAwLVxcdURGRkZdfC4vZyl8fFtdfTtRZC5wcm90b3R5cGUuaGFzQ2hhcj1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9PXRoaXMuZW5jb2RpbmcuY2hhclRvR2x5cGhJbmRleChhKX0sUWQucHJvdG90eXBlLmNoYXJUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZW5jb2RpbmcuY2hhclRvR2x5cGhJbmRleChhKX0sUWQucHJvdG90eXBlLmNoYXJUb0dseXBoPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY2hhclRvR2x5cGhJbmRleChhKSxjPXRoaXMuZ2x5cGhzLmdldChiKTtyZXR1cm4gY3x8KGM9dGhpcy5nbHlwaHMuZ2V0KDApKSxjfSxRZC5wcm90b3R5cGUuc3RyaW5nVG9HbHlwaHM9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2I9Ynx8dGhpcy5kZWZhdWx0UmVuZGVyT3B0aW9ucztmb3IodmFyIGQ9QmYoYSksZT1bXSxmPTA7ZjxkLmxlbmd0aDtmKz0xKXt2YXIgZz1kW2ZdO2UucHVzaChjLmNoYXJUb0dseXBoSW5kZXgoZykpfXZhciBoPWUubGVuZ3RoO2lmKGIuZmVhdHVyZXMpe3ZhciBpPWIuc2NyaXB0fHx0aGlzLnN1YnN0aXR1dGlvbi5nZXREZWZhdWx0U2NyaXB0TmFtZSgpLGo9W107Yi5mZWF0dXJlcy5saWdhJiYoaj1qLmNvbmNhdCh0aGlzLnN1YnN0aXR1dGlvbi5nZXRGZWF0dXJlKFwibGlnYVwiLGksYi5sYW5ndWFnZSkpKSxiLmZlYXR1cmVzLnJsaWcmJihqPWouY29uY2F0KHRoaXMuc3Vic3RpdHV0aW9uLmdldEZlYXR1cmUoXCJybGlnXCIsaSxiLmxhbmd1YWdlKSkpO2Zvcih2YXIgaz0wO2s8aDtrKz0xKWZvcih2YXIgbD0wO2w8ai5sZW5ndGg7bCsrKXtmb3IodmFyIG09altsXSxuPW0uc3ViLG89bi5sZW5ndGgscD0wO3A8byYmbltwXT09PWVbaytwXTspcCsrO3A9PT1vJiYoZS5zcGxpY2UoayxvLG0uYnkpLGg9aC1vKzEpfX1mb3IodmFyIHE9bmV3IEFycmF5KGgpLHI9dGhpcy5nbHlwaHMuZ2V0KDApLHM9MDtzPGg7cys9MSlxW3NdPWMuZ2x5cGhzLmdldChlW3NdKXx8cjtyZXR1cm4gcX0sUWQucHJvdG90eXBlLm5hbWVUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ2x5cGhOYW1lcy5uYW1lVG9HbHlwaEluZGV4KGEpfSxRZC5wcm90b3R5cGUubmFtZVRvR2x5cGg9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5uYW1lVG9HbHlwaEluZGV4KGEpLGM9dGhpcy5nbHlwaHMuZ2V0KGIpO3JldHVybiBjfHwoYz10aGlzLmdseXBocy5nZXQoMCkpLGN9LFFkLnByb3RvdHlwZS5nbHlwaEluZGV4VG9OYW1lPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdseXBoTmFtZXMuZ2x5cGhJbmRleFRvTmFtZT90aGlzLmdseXBoTmFtZXMuZ2x5cGhJbmRleFRvTmFtZShhKTpcIlwifSxRZC5wcm90b3R5cGUuZ2V0S2VybmluZ1ZhbHVlPWZ1bmN0aW9uKGEsYil7YT1hLmluZGV4fHxhLGI9Yi5pbmRleHx8Yjt2YXIgYz10aGlzLnBvc2l0aW9uLmRlZmF1bHRLZXJuaW5nVGFibGVzO3JldHVybiBjP3RoaXMucG9zaXRpb24uZ2V0S2VybmluZ1ZhbHVlKGMsYSxiKTp0aGlzLmtlcm5pbmdQYWlyc1thK1wiLFwiK2JdfHwwfSxRZC5wcm90b3R5cGUuZGVmYXVsdFJlbmRlck9wdGlvbnM9e2tlcm5pbmc6ITAsZmVhdHVyZXM6e2xpZ2E6ITAscmxpZzohMH19LFFkLnByb3RvdHlwZS5mb3JFYWNoR2x5cGg9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPXRoaXM7Yj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/YzowLGQ9dm9pZCAwIT09ZD9kOjcyLGU9ZXx8dGhpcy5kZWZhdWx0UmVuZGVyT3B0aW9uczt2YXIgaCxpPTEvdGhpcy51bml0c1BlckVtKmQsaj10aGlzLnN0cmluZ1RvR2x5cGhzKGEsZSk7aWYoZS5rZXJuaW5nKXt2YXIgaz1lLnNjcmlwdHx8dGhpcy5wb3NpdGlvbi5nZXREZWZhdWx0U2NyaXB0TmFtZSgpO2g9dGhpcy5wb3NpdGlvbi5nZXRLZXJuaW5nVGFibGVzKGssZS5sYW5ndWFnZSl9Zm9yKHZhciBsPTA7bDxqLmxlbmd0aDtsKz0xKXt2YXIgbT1qW2xdO2lmKGYuY2FsbChnLG0sYixjLGQsZSksbS5hZHZhbmNlV2lkdGgmJihiKz1tLmFkdmFuY2VXaWR0aCppKSxlLmtlcm5pbmcmJmw8ai5sZW5ndGgtMSl7Yis9KGg/Zy5wb3NpdGlvbi5nZXRLZXJuaW5nVmFsdWUoaCxtLmluZGV4LGpbbCsxXS5pbmRleCk6Zy5nZXRLZXJuaW5nVmFsdWUobSxqW2wrMV0pKSppfWUubGV0dGVyU3BhY2luZz9iKz1lLmxldHRlclNwYWNpbmcqZDplLnRyYWNraW5nJiYoYis9ZS50cmFja2luZy8xZTMqZCl9cmV0dXJuIGJ9LFFkLnByb3RvdHlwZS5nZXRQYXRoPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9bmV3IHI7cmV0dXJuIHRoaXMuZm9yRWFjaEdseXBoKGEsYixjLGQsZSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZz1hLmdldFBhdGgoYixjLGQsZSx0aGlzKTtmLmV4dGVuZChnKX0pLGZ9LFFkLnByb3RvdHlwZS5nZXRQYXRocz1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPVtdO3JldHVybiB0aGlzLmZvckVhY2hHbHlwaChhLGIsYyxkLGUsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGc9YS5nZXRQYXRoKGIsYyxkLGUsdGhpcyk7Zi5wdXNoKGcpfSksZn0sUWQucHJvdG90eXBlLmdldEFkdmFuY2VXaWR0aD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuZm9yRWFjaEdseXBoKGEsMCwwLGIsYyxmdW5jdGlvbigpe30pfSxRZC5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5nZXRQYXRoKGIsYyxkLGUsZikuZHJhdyhhKX0sUWQucHJvdG90eXBlLmRyYXdQb2ludHM9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZm9yRWFjaEdseXBoKGIsYyxkLGUsZixmdW5jdGlvbihiLGMsZCxlKXtiLmRyYXdQb2ludHMoYSxjLGQsZSl9KX0sUWQucHJvdG90eXBlLmRyYXdNZXRyaWNzPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmZvckVhY2hHbHlwaChiLGMsZCxlLGYsZnVuY3Rpb24oYixjLGQsZSl7Yi5kcmF3TWV0cmljcyhhLGMsZCxlKX0pfSxRZC5wcm90b3R5cGUuZ2V0RW5nbGlzaE5hbWU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5uYW1lc1thXTtpZihiKXJldHVybiBiLmVufSxRZC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7fWZ1bmN0aW9uIGIoYil7dmFyIGQ9Yy5nZXRFbmdsaXNoTmFtZShiKTthKGQmJmQudHJpbSgpLmxlbmd0aD4wLFwiTm8gRW5nbGlzaCBcIitiK1wiIHNwZWNpZmllZC5cIil9dmFyIGM9dGhpcztiKFwiZm9udEZhbWlseVwiKSxiKFwid2VpZ2h0TmFtZVwiKSxiKFwibWFudWZhY3R1cmVyXCIpLGIoXCJjb3B5cmlnaHRcIiksYihcInZlcnNpb25cIiksYSh0aGlzLnVuaXRzUGVyRW0+MCxcIk5vIHVuaXRzUGVyRW0gc3BlY2lmaWVkLlwiKX0sUWQucHJvdG90eXBlLnRvVGFibGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHFmLmZvbnRUb1RhYmxlKHRoaXMpfSxRZC5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKFwiRm9udC50b0J1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgRm9udC50b0FycmF5QnVmZmVyIGluc3RlYWQuXCIpLHRoaXMudG9BcnJheUJ1ZmZlcigpfSxRZC5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnRvVGFibGVzKCksYj1hLmVuY29kZSgpLGM9bmV3IEFycmF5QnVmZmVyKGIubGVuZ3RoKSxkPW5ldyBVaW50OEFycmF5KGMpLGU9MDtlPGIubGVuZ3RoO2UrKylkW2VdPWJbZV07cmV0dXJuIGN9LFFkLnByb3RvdHlwZS5kb3dubG9hZD1mdW5jdGlvbihhKXt2YXIgYz10aGlzLmdldEVuZ2xpc2hOYW1lKFwiZm9udEZhbWlseVwiKSxkPXRoaXMuZ2V0RW5nbGlzaE5hbWUoXCJmb250U3ViZmFtaWx5XCIpO2E9YXx8Yy5yZXBsYWNlKC9cXHMvZyxcIlwiKStcIi1cIitkK1wiLm90ZlwiO3ZhciBlPXRoaXMudG9BcnJheUJ1ZmZlcigpO2lmKEJiKCkpd2luZG93LnJlcXVlc3RGaWxlU3lzdGVtPXdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbXx8d2luZG93LndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtLHdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSh3aW5kb3cuVEVNUE9SQVJZLGUuYnl0ZUxlbmd0aCxmdW5jdGlvbihiKXtiLnJvb3QuZ2V0RmlsZShhLHtjcmVhdGU6ITB9LGZ1bmN0aW9uKGEpe2EuY3JlYXRlV3JpdGVyKGZ1bmN0aW9uKGIpe3ZhciBjPW5ldyBEYXRhVmlldyhlKSxkPW5ldyBCbG9iKFtjXSx7dHlwZTpcImZvbnQvb3BlbnR5cGVcIn0pO2Iud3JpdGUoZCksYi5hZGRFdmVudExpc3RlbmVyKFwid3JpdGVlbmRcIixmdW5jdGlvbigpe2xvY2F0aW9uLmhyZWY9YS50b1VSTCgpfSwhMSl9KX0pfSxmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYS5uYW1lK1wiOiBcIithLm1lc3NhZ2UpfSk7ZWxzZXt2YXIgZj1iKFwiZnNcIiksZz1EYihlKTtmLndyaXRlRmlsZVN5bmMoYSxnKX19LFFkLnByb3RvdHlwZS5mc1NlbGVjdGlvblZhbHVlcz17SVRBTElDOjEsVU5ERVJTQ09SRToyLE5FR0FUSVZFOjQsT1VUTElORUQ6OCxTVFJJS0VPVVQ6MTYsQk9MRDozMixSRUdVTEFSOjY0LFVTRVJfVFlQT19NRVRSSUNTOjEyOCxXV1M6MjU2LE9CTElRVUU6NTEyfSxRZC5wcm90b3R5cGUudXNXaWR0aENsYXNzZXM9e1VMVFJBX0NPTkRFTlNFRDoxLEVYVFJBX0NPTkRFTlNFRDoyLENPTkRFTlNFRDozLFNFTUlfQ09OREVOU0VEOjQsTUVESVVNOjUsU0VNSV9FWFBBTkRFRDo2LEVYUEFOREVEOjcsRVhUUkFfRVhQQU5ERUQ6OCxVTFRSQV9FWFBBTkRFRDo5fSxRZC5wcm90b3R5cGUudXNXZWlnaHRDbGFzc2VzPXtUSElOOjEwMCxFWFRSQV9MSUdIVDoyMDAsTElHSFQ6MzAwLE5PUk1BTDo0MDAsTUVESVVNOjUwMCxTRU1JX0JPTEQ6NjAwLEJPTEQ6NzAwLEVYVFJBX0JPTEQ6ODAwLEJMQUNLOjkwMH07dmFyIENmPXttYWtlOldkLHBhcnNlOlhkfSxEZj1uZXcgQXJyYXkoMTApO0RmWzFdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4gMT09PWI/e3Bvc0Zvcm1hdDoxLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHZhbHVlOnRoaXMucGFyc2VWYWx1ZVJlY29yZCgpfToyPT09Yj97XG5wb3NGb3JtYXQ6Mixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSx2YWx1ZXM6dGhpcy5wYXJzZVZhbHVlUmVjb3JkTGlzdCgpfTp2b2lkIHhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IEdQT1MgbG9va3VwIHR5cGUgMSBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpfSxEZlsyXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7eGUuYXNzZXJ0KDE9PT1ifHwyPT09YixcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IEdQT1MgbG9va3VwIHR5cGUgMiBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpO3ZhciBjPXRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGQ9dGhpcy5wYXJzZVVTaG9ydCgpLGU9dGhpcy5wYXJzZVVTaG9ydCgpO2lmKDE9PT1iKXJldHVybntwb3NGb3JtYXQ6Yixjb3ZlcmFnZTpjLHZhbHVlRm9ybWF0MTpkLHZhbHVlRm9ybWF0MjplLHBhaXJTZXRzOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmxpc3QoZnVuY3Rpb24oKXtyZXR1cm57c2Vjb25kR2x5cGg6dGhpcy5wYXJzZVVTaG9ydCgpLHZhbHVlMTp0aGlzLnBhcnNlVmFsdWVSZWNvcmQoZCksdmFsdWUyOnRoaXMucGFyc2VWYWx1ZVJlY29yZChlKX19KSkpfTtpZigyPT09Yil7dmFyIGY9dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksZz10aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxoPXRoaXMucGFyc2VVU2hvcnQoKSxpPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm57cG9zRm9ybWF0OmIsY292ZXJhZ2U6Yyx2YWx1ZUZvcm1hdDE6ZCx2YWx1ZUZvcm1hdDI6ZSxjbGFzc0RlZjE6ZixjbGFzc0RlZjI6ZyxjbGFzczFDb3VudDpoLGNsYXNzMkNvdW50OmksY2xhc3NSZWNvcmRzOnRoaXMucGFyc2VMaXN0KGgsUS5saXN0KGksZnVuY3Rpb24oKXtyZXR1cm57dmFsdWUxOnRoaXMucGFyc2VWYWx1ZVJlY29yZChkKSx2YWx1ZTI6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKGUpfX0pKX19fSxEZlszXT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDMgbm90IHN1cHBvcnRlZFwifX0sRGZbNF09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA0IG5vdCBzdXBwb3J0ZWRcIn19LERmWzVdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgNSBub3Qgc3VwcG9ydGVkXCJ9fSxEZls2XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDYgbm90IHN1cHBvcnRlZFwifX0sRGZbN109ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA3IG5vdCBzdXBwb3J0ZWRcIn19LERmWzhdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgOCBub3Qgc3VwcG9ydGVkXCJ9fSxEZls5XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDkgbm90IHN1cHBvcnRlZFwifX07dmFyIEVmPW5ldyBBcnJheSgxMCksRmY9e3BhcnNlOllkLG1ha2U6WmR9LEdmPXtwYXJzZTphZX0sSGY9e3BhcnNlOmJlfTthLkZvbnQ9UWQsYS5HbHlwaD1jYSxhLlBhdGg9cixhLkJvdW5kaW5nQm94PXEsYS5fcGFyc2U9TGUsYS5wYXJzZT1oZSxhLmxvYWQ9aWUsYS5sb2FkU3luYz1qZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0pfSkuY2FsbCh0aGlzLGIoXCJidWZmZXJcIikuQnVmZmVyKX0se2J1ZmZlcjozLGZzOjJ9XSwxMTpbZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGUoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gZihhKXtpZihsPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChhLDApO2lmKChsPT09ZHx8IWwpJiZzZXRUaW1lb3V0KXJldHVybiBsPXNldFRpbWVvdXQsc2V0VGltZW91dChhLDApO3RyeXtyZXR1cm4gbChhLDApfWNhdGNoKGIpe3RyeXtyZXR1cm4gbC5jYWxsKG51bGwsYSwwKX1jYXRjaChiKXtyZXR1cm4gbC5jYWxsKHRoaXMsYSwwKX19fWZ1bmN0aW9uIGcoYSl7aWYobT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGEpO2lmKChtPT09ZXx8IW0pJiZjbGVhclRpbWVvdXQpcmV0dXJuIG09Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChhKTt0cnl7cmV0dXJuIG0oYSl9Y2F0Y2goYil7dHJ5e3JldHVybiBtLmNhbGwobnVsbCxhKX1jYXRjaChiKXtyZXR1cm4gbS5jYWxsKHRoaXMsYSl9fX1mdW5jdGlvbiBoKCl7cSYmbyYmKHE9ITEsby5sZW5ndGg/cD1vLmNvbmNhdChwKTpyPS0xLHAubGVuZ3RoJiZpKCkpfWZ1bmN0aW9uIGkoKXtpZighcSl7dmFyIGE9ZihoKTtxPSEwO2Zvcih2YXIgYj1wLmxlbmd0aDtiOyl7Zm9yKG89cCxwPVtdOysrcjxiOylvJiZvW3JdLnJ1bigpO3I9LTEsYj1wLmxlbmd0aH1vPW51bGwscT0hMSxnKGEpfX1mdW5jdGlvbiBqKGEsYil7dGhpcy5mdW49YSx0aGlzLmFycmF5PWJ9ZnVuY3Rpb24gaygpe312YXIgbCxtLG49Yi5leHBvcnRzPXt9OyFmdW5jdGlvbigpe3RyeXtsPVwiZnVuY3Rpb25cIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpkfWNhdGNoKGEpe2w9ZH10cnl7bT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OmV9Y2F0Y2goYSl7bT1lfX0oKTt2YXIgbyxwPVtdLHE9ITEscj0tMTtuLm5leHRUaWNrPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbYy0xXT1hcmd1bWVudHNbY107cC5wdXNoKG5ldyBqKGEsYikpLDEhPT1wLmxlbmd0aHx8cXx8ZihpKX0sai5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sbi50aXRsZT1cImJyb3dzZXJcIixuLmJyb3dzZXI9ITAsbi5lbnY9e30sbi5hcmd2PVtdLG4udmVyc2lvbj1cIlwiLG4udmVyc2lvbnM9e30sbi5vbj1rLG4uYWRkTGlzdGVuZXI9ayxuLm9uY2U9ayxuLm9mZj1rLG4ucmVtb3ZlTGlzdGVuZXI9ayxuLnJlbW92ZUFsbExpc3RlbmVycz1rLG4uZW1pdD1rLG4ucHJlcGVuZExpc3RlbmVyPWssbi5wcmVwZW5kT25jZUxpc3RlbmVyPWssbi5saXN0ZW5lcnM9ZnVuY3Rpb24oYSl7cmV0dXJuW119LG4uYmluZGluZz1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX0sbi5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm5cIi9cIn0sbi5jaGRpcj1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9LG4udW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LHt9XSwxMjpbZnVuY3Rpb24oYSxiLGMpeyFmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGEpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBhJiYoYT1TdHJpbmcoYSkpLC9bXmEtejAtOVxcLSMkJSYnKisuXFxeX2B8fl0vaS50ZXN0KGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZVwiKTtyZXR1cm4gYS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGMoYSl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPVN0cmluZyhhKSksYX1mdW5jdGlvbiBkKGEpe3ZhciBiPXtuZXh0OmZ1bmN0aW9uKCl7dmFyIGI9YS5zaGlmdCgpO3JldHVybntkb25lOnZvaWQgMD09PWIsdmFsdWU6Yn19fTtyZXR1cm4gci5pdGVyYWJsZSYmKGJbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiBifSksYn1mdW5jdGlvbiBlKGEpe3RoaXMubWFwPXt9LGEgaW5zdGFuY2VvZiBlP2EuZm9yRWFjaChmdW5jdGlvbihhLGIpe3RoaXMuYXBwZW5kKGIsYSl9LHRoaXMpOkFycmF5LmlzQXJyYXkoYSk/YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3RoaXMuYXBwZW5kKGFbMF0sYVsxXSl9LHRoaXMpOmEmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLmZvckVhY2goZnVuY3Rpb24oYil7dGhpcy5hcHBlbmQoYixhW2JdKX0sdGhpcyl9ZnVuY3Rpb24gZihhKXtpZihhLmJvZHlVc2VkKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKFwiQWxyZWFkeSByZWFkXCIpKTthLmJvZHlVc2VkPSEwfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGIsYyl7YS5vbmxvYWQ9ZnVuY3Rpb24oKXtiKGEucmVzdWx0KX0sYS5vbmVycm9yPWZ1bmN0aW9uKCl7YyhhLmVycm9yKX19KX1mdW5jdGlvbiBoKGEpe3ZhciBiPW5ldyBGaWxlUmVhZGVyLGM9ZyhiKTtyZXR1cm4gYi5yZWFkQXNBcnJheUJ1ZmZlcihhKSxjfWZ1bmN0aW9uIGkoYSl7dmFyIGI9bmV3IEZpbGVSZWFkZXIsYz1nKGIpO3JldHVybiBiLnJlYWRBc1RleHQoYSksY31mdW5jdGlvbiBqKGEpe2Zvcih2YXIgYj1uZXcgVWludDhBcnJheShhKSxjPW5ldyBBcnJheShiLmxlbmd0aCksZD0wO2Q8Yi5sZW5ndGg7ZCsrKWNbZF09U3RyaW5nLmZyb21DaGFyQ29kZShiW2RdKTtyZXR1cm4gYy5qb2luKFwiXCIpfWZ1bmN0aW9uIGsoYSl7aWYoYS5zbGljZSlyZXR1cm4gYS5zbGljZSgwKTt2YXIgYj1uZXcgVWludDhBcnJheShhLmJ5dGVMZW5ndGgpO3JldHVybiBiLnNldChuZXcgVWludDhBcnJheShhKSksYi5idWZmZXJ9ZnVuY3Rpb24gbCgpe3JldHVybiB0aGlzLmJvZHlVc2VkPSExLHRoaXMuX2luaXRCb2R5PWZ1bmN0aW9uKGEpe2lmKHRoaXMuX2JvZHlJbml0PWEsYSlpZihcInN0cmluZ1wiPT10eXBlb2YgYSl0aGlzLl9ib2R5VGV4dD1hO2Vsc2UgaWYoci5ibG9iJiZCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpKXRoaXMuX2JvZHlCbG9iPWE7ZWxzZSBpZihyLmZvcm1EYXRhJiZGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSl0aGlzLl9ib2R5Rm9ybURhdGE9YTtlbHNlIGlmKHIuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkpdGhpcy5fYm9keVRleHQ9YS50b1N0cmluZygpO2Vsc2UgaWYoci5hcnJheUJ1ZmZlciYmci5ibG9iJiZ0KGEpKXRoaXMuX2JvZHlBcnJheUJ1ZmZlcj1rKGEuYnVmZmVyKSx0aGlzLl9ib2R5SW5pdD1uZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSk7ZWxzZXtpZighci5hcnJheUJ1ZmZlcnx8IUFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpJiYhdShhKSl0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBCb2R5SW5pdCB0eXBlXCIpO3RoaXMuX2JvZHlBcnJheUJ1ZmZlcj1rKGEpfWVsc2UgdGhpcy5fYm9keVRleHQ9XCJcIjt0aGlzLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpfHwoXCJzdHJpbmdcIj09dHlwZW9mIGE/dGhpcy5oZWFkZXJzLnNldChcImNvbnRlbnQtdHlwZVwiLFwidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04XCIpOnRoaXMuX2JvZHlCbG9iJiZ0aGlzLl9ib2R5QmxvYi50eXBlP3RoaXMuaGVhZGVycy5zZXQoXCJjb250ZW50LXR5cGVcIix0aGlzLl9ib2R5QmxvYi50eXBlKTpyLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpJiZ0aGlzLmhlYWRlcnMuc2V0KFwiY29udGVudC10eXBlXCIsXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOFwiKSl9LHIuYmxvYiYmKHRoaXMuYmxvYj1mdW5jdGlvbigpe3ZhciBhPWYodGhpcyk7aWYoYSlyZXR1cm4gYTtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2JcIik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSl9LHRoaXMuYXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm9keUFycmF5QnVmZmVyP2YodGhpcyl8fFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpOnRoaXMuYmxvYigpLnRoZW4oaCl9KSx0aGlzLnRleHQ9ZnVuY3Rpb24oKXt2YXIgYT1mKHRoaXMpO2lmKGEpcmV0dXJuIGE7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIGkodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGoodGhpcy5fYm9keUFycmF5QnVmZmVyKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcihcImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dFwiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KX0sci5mb3JtRGF0YSYmKHRoaXMuZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihvKX0pLHRoaXMuanNvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpfSx0aGlzfWZ1bmN0aW9uIG0oYSl7dmFyIGI9YS50b1VwcGVyQ2FzZSgpO3JldHVybiB2LmluZGV4T2YoYik+LTE/YjphfWZ1bmN0aW9uIG4oYSxiKXtiPWJ8fHt9O3ZhciBjPWIuYm9keTtpZihhIGluc3RhbmNlb2Ygbil7aWYoYS5ib2R5VXNlZCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQWxyZWFkeSByZWFkXCIpO3RoaXMudXJsPWEudXJsLHRoaXMuY3JlZGVudGlhbHM9YS5jcmVkZW50aWFscyxiLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGUoYS5oZWFkZXJzKSksdGhpcy5tZXRob2Q9YS5tZXRob2QsdGhpcy5tb2RlPWEubW9kZSxjfHxudWxsPT1hLl9ib2R5SW5pdHx8KGM9YS5fYm9keUluaXQsYS5ib2R5VXNlZD0hMCl9ZWxzZSB0aGlzLnVybD1TdHJpbmcoYSk7aWYodGhpcy5jcmVkZW50aWFscz1iLmNyZWRlbnRpYWxzfHx0aGlzLmNyZWRlbnRpYWxzfHxcIm9taXRcIiwhYi5oZWFkZXJzJiZ0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGUoYi5oZWFkZXJzKSksdGhpcy5tZXRob2Q9bShiLm1ldGhvZHx8dGhpcy5tZXRob2R8fFwiR0VUXCIpLHRoaXMubW9kZT1iLm1vZGV8fHRoaXMubW9kZXx8bnVsbCx0aGlzLnJlZmVycmVyPW51bGwsKFwiR0VUXCI9PT10aGlzLm1ldGhvZHx8XCJIRUFEXCI9PT10aGlzLm1ldGhvZCkmJmMpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzXCIpO3RoaXMuX2luaXRCb2R5KGMpfWZ1bmN0aW9uIG8oYSl7dmFyIGI9bmV3IEZvcm1EYXRhO3JldHVybiBhLnRyaW0oKS5zcGxpdChcIiZcIikuZm9yRWFjaChmdW5jdGlvbihhKXtpZihhKXt2YXIgYz1hLnNwbGl0KFwiPVwiKSxkPWMuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZyxcIiBcIiksZT1jLmpvaW4oXCI9XCIpLnJlcGxhY2UoL1xcKy9nLFwiIFwiKTtiLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQoZCksZGVjb2RlVVJJQ29tcG9uZW50KGUpKX19KSxifWZ1bmN0aW9uIHAoYSl7dmFyIGI9bmV3IGU7cmV0dXJuIGEuc3BsaXQoL1xccj9cXG4vKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBjPWEuc3BsaXQoXCI6XCIpLGQ9Yy5zaGlmdCgpLnRyaW0oKTtpZihkKXt2YXIgZT1jLmpvaW4oXCI6XCIpLnRyaW0oKTtiLmFwcGVuZChkLGUpfX0pLGJ9ZnVuY3Rpb24gcShhLGIpe2J8fChiPXt9KSx0aGlzLnR5cGU9XCJkZWZhdWx0XCIsdGhpcy5zdGF0dXM9XCJzdGF0dXNcImluIGI/Yi5zdGF0dXM6MjAwLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwLHRoaXMuc3RhdHVzVGV4dD1cInN0YXR1c1RleHRcImluIGI/Yi5zdGF0dXNUZXh0OlwiT0tcIix0aGlzLmhlYWRlcnM9bmV3IGUoYi5oZWFkZXJzKSx0aGlzLnVybD1iLnVybHx8XCJcIix0aGlzLl9pbml0Qm9keShhKX1pZighYS5mZXRjaCl7dmFyIHI9e3NlYXJjaFBhcmFtczpcIlVSTFNlYXJjaFBhcmFtc1wiaW4gYSxpdGVyYWJsZTpcIlN5bWJvbFwiaW4gYSYmXCJpdGVyYXRvclwiaW4gU3ltYm9sLGJsb2I6XCJGaWxlUmVhZGVyXCJpbiBhJiZcIkJsb2JcImluIGEmJmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgQmxvYiwhMH1jYXRjaChhKXtyZXR1cm4hMX19KCksZm9ybURhdGE6XCJGb3JtRGF0YVwiaW4gYSxhcnJheUJ1ZmZlcjpcIkFycmF5QnVmZmVyXCJpbiBhfTtpZihyLmFycmF5QnVmZmVyKXZhciBzPVtcIltvYmplY3QgSW50OEFycmF5XVwiLFwiW29iamVjdCBVaW50OEFycmF5XVwiLFwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIixcIltvYmplY3QgSW50MTZBcnJheV1cIixcIltvYmplY3QgVWludDE2QXJyYXldXCIsXCJbb2JqZWN0IEludDMyQXJyYXldXCIsXCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiLFwiW29iamVjdCBGbG9hdDMyQXJyYXldXCIsXCJbb2JqZWN0IEZsb2F0NjRBcnJheV1cIl0sdD1mdW5jdGlvbihhKXtyZXR1cm4gYSYmRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSl9LHU9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbihhKXtyZXR1cm4gYSYmcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSk+LTF9O2UucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihhLGQpe2E9YihhKSxkPWMoZCk7dmFyIGU9dGhpcy5tYXBbYV07dGhpcy5tYXBbYV09ZT9lK1wiLFwiK2Q6ZH0sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLm1hcFtiKGEpXX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBhPWIoYSksdGhpcy5oYXMoYSk/dGhpcy5tYXBbYV06bnVsbH0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShiKGEpKX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsZCl7dGhpcy5tYXBbYihhKV09YyhkKX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyBpbiB0aGlzLm1hcCl0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShjKSYmYS5jYWxsKGIsdGhpcy5tYXBbY10sYyx0aGlzKX0sZS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oYixjKXthLnB1c2goYyl9KSxkKGEpfSxlLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGIpe2EucHVzaChiKX0pLGQoYSl9LGUucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGIsYyl7YS5wdXNoKFtjLGJdKX0pLGQoYSl9LHIuaXRlcmFibGUmJihlLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWUucHJvdG90eXBlLmVudHJpZXMpO3ZhciB2PVtcIkRFTEVURVwiLFwiR0VUXCIsXCJIRUFEXCIsXCJPUFRJT05TXCIsXCJQT1NUXCIsXCJQVVRcIl07bi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyx7Ym9keTp0aGlzLl9ib2R5SW5pdH0pfSxsLmNhbGwobi5wcm90b3R5cGUpLGwuY2FsbChxLnByb3RvdHlwZSkscS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHEodGhpcy5fYm9keUluaXQse3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnRoaXMuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyBlKHRoaXMuaGVhZGVycyksdXJsOnRoaXMudXJsfSl9LHEuZXJyb3I9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcShudWxsLHtzdGF0dXM6MCxzdGF0dXNUZXh0OlwiXCJ9KTtyZXR1cm4gYS50eXBlPVwiZXJyb3JcIixhfTt2YXIgdz1bMzAxLDMwMiwzMDMsMzA3LDMwOF07cS5yZWRpcmVjdD1mdW5jdGlvbihhLGIpe2lmKC0xPT09dy5pbmRleE9mKGIpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBzdGF0dXMgY29kZVwiKTtyZXR1cm4gbmV3IHEobnVsbCx7c3RhdHVzOmIsaGVhZGVyczp7bG9jYXRpb246YX19KX0sYS5IZWFkZXJzPWUsYS5SZXF1ZXN0PW4sYS5SZXNwb25zZT1xLGEuZmV0Y2g9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYyxkKXt2YXIgZT1uZXcgbihhLGIpLGY9bmV3IFhNTEh0dHBSZXF1ZXN0O2Yub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGE9e3N0YXR1czpmLnN0YXR1cyxzdGF0dXNUZXh0OmYuc3RhdHVzVGV4dCxoZWFkZXJzOnAoZi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKXx8XCJcIil9O2EudXJsPVwicmVzcG9uc2VVUkxcImluIGY/Zi5yZXNwb25zZVVSTDphLmhlYWRlcnMuZ2V0KFwiWC1SZXF1ZXN0LVVSTFwiKTt2YXIgYj1cInJlc3BvbnNlXCJpbiBmP2YucmVzcG9uc2U6Zi5yZXNwb25zZVRleHQ7YyhuZXcgcShiLGEpKX0sZi5vbmVycm9yPWZ1bmN0aW9uKCl7ZChuZXcgVHlwZUVycm9yKFwiTmV0d29yayByZXF1ZXN0IGZhaWxlZFwiKSl9LGYub250aW1lb3V0PWZ1bmN0aW9uKCl7ZChuZXcgVHlwZUVycm9yKFwiTmV0d29yayByZXF1ZXN0IGZhaWxlZFwiKSl9LGYub3BlbihlLm1ldGhvZCxlLnVybCwhMCksXCJpbmNsdWRlXCI9PT1lLmNyZWRlbnRpYWxzJiYoZi53aXRoQ3JlZGVudGlhbHM9ITApLFwicmVzcG9uc2VUeXBlXCJpbiBmJiZyLmJsb2ImJihmLnJlc3BvbnNlVHlwZT1cImJsb2JcIiksZS5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oYSxiKXtmLnNldFJlcXVlc3RIZWFkZXIoYixhKX0pLGYuc2VuZCh2b2lkIDA9PT1lLl9ib2R5SW5pdD9udWxsOmUuX2JvZHlJbml0KX0pfSxhLmZldGNoLnBvbHlmaWxsPSEwfX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzKX0se31dLDEzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vY29yZS9tYWluXCIpO2EoXCIuL2NvcmUvY29uc3RhbnRzXCIpLGEoXCIuL2NvcmUvZW52aXJvbm1lbnRcIiksYShcIi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGEoXCIuL2NvcmUvaGVscGVyc1wiKSxhKFwiLi9jb3JlL2xlZ2FjeVwiKSxhKFwiLi9jb3JlL3A1LkVsZW1lbnRcIiksYShcIi4vY29yZS9wNS5HcmFwaGljc1wiKSxhKFwiLi9jb3JlL3A1LlJlbmRlcmVyXCIpLGEoXCIuL2NvcmUvcDUuUmVuZGVyZXIyRFwiKSxhKFwiLi9jb3JlL3JlbmRlcmluZ1wiKSxhKFwiLi9jb3JlL3NoaW1cIiksYShcIi4vY29yZS9zdHJ1Y3R1cmVcIiksYShcIi4vY29yZS90cmFuc2Zvcm1cIiksYShcIi4vY29yZS9zaGFwZS8yZF9wcmltaXRpdmVzXCIpLGEoXCIuL2NvcmUvc2hhcGUvYXR0cmlidXRlc1wiKSxhKFwiLi9jb3JlL3NoYXBlL2N1cnZlc1wiKSxhKFwiLi9jb3JlL3NoYXBlL3ZlcnRleFwiKSxhKFwiLi9jb2xvci9jb2xvcl9jb252ZXJzaW9uXCIpLGEoXCIuL2NvbG9yL2NyZWF0aW5nX3JlYWRpbmdcIiksYShcIi4vY29sb3IvcDUuQ29sb3JcIiksYShcIi4vY29sb3Ivc2V0dGluZ1wiKSxhKFwiLi9kYXRhL3A1LlR5cGVkRGljdFwiKSxhKFwiLi9ldmVudHMvYWNjZWxlcmF0aW9uXCIpLGEoXCIuL2V2ZW50cy9rZXlib2FyZFwiKSxhKFwiLi9ldmVudHMvbW91c2VcIiksYShcIi4vZXZlbnRzL3RvdWNoXCIpLGEoXCIuL2ltYWdlL2ZpbHRlcnNcIiksYShcIi4vaW1hZ2UvaW1hZ2VcIiksYShcIi4vaW1hZ2UvbG9hZGluZ19kaXNwbGF5aW5nXCIpLGEoXCIuL2ltYWdlL3A1LkltYWdlXCIpLGEoXCIuL2ltYWdlL3BpeGVsc1wiKSxhKFwiLi9pby9maWxlc1wiKSxhKFwiLi9pby9wNS5UYWJsZVwiKSxhKFwiLi9pby9wNS5UYWJsZVJvd1wiKSxhKFwiLi9pby9wNS5YTUxcIiksYShcIi4vbWF0aC9jYWxjdWxhdGlvblwiKSxhKFwiLi9tYXRoL21hdGhcIiksYShcIi4vbWF0aC9ub2lzZVwiKSxhKFwiLi9tYXRoL3A1LlZlY3RvclwiKSxhKFwiLi9tYXRoL3JhbmRvbVwiKSxhKFwiLi9tYXRoL3RyaWdvbm9tZXRyeVwiKSxhKFwiLi90eXBvZ3JhcGh5L2F0dHJpYnV0ZXNcIiksYShcIi4vdHlwb2dyYXBoeS9sb2FkaW5nX2Rpc3BsYXlpbmdcIiksYShcIi4vdHlwb2dyYXBoeS9wNS5Gb250XCIpLGEoXCIuL3V0aWxpdGllcy9hcnJheV9mdW5jdGlvbnNcIiksYShcIi4vdXRpbGl0aWVzL2NvbnZlcnNpb25cIiksYShcIi4vdXRpbGl0aWVzL3N0cmluZ19mdW5jdGlvbnNcIiksYShcIi4vdXRpbGl0aWVzL3RpbWVfZGF0ZVwiKSxhKFwiLi93ZWJnbC8zZF9wcmltaXRpdmVzXCIpLGEoXCIuL3dlYmdsL2ludGVyYWN0aW9uXCIpLGEoXCIuL3dlYmdsL2xpZ2h0XCIpLGEoXCIuL3dlYmdsL2xvYWRpbmdcIiksYShcIi4vd2ViZ2wvbWF0ZXJpYWxcIiksYShcIi4vd2ViZ2wvcDUuQ2FtZXJhXCIpLGEoXCIuL3dlYmdsL3A1Lkdlb21ldHJ5XCIpLGEoXCIuL3dlYmdsL3A1Lk1hdHJpeFwiKSxhKFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLkltbWVkaWF0ZVwiKSxhKFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMXCIpLGEoXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuUmV0YWluZWRcIiksYShcIi4vd2ViZ2wvcDUuU2hhZGVyXCIpLGEoXCIuL3dlYmdsL3A1LlRleHR1cmVcIiksYShcIi4vd2ViZ2wvdGV4dFwiKSxhKFwiLi9jb3JlL2luaXRcIiksYi5leHBvcnRzPWR9LHtcIi4vY29sb3IvY29sb3JfY29udmVyc2lvblwiOjE0LFwiLi9jb2xvci9jcmVhdGluZ19yZWFkaW5nXCI6MTUsXCIuL2NvbG9yL3A1LkNvbG9yXCI6MTYsXCIuL2NvbG9yL3NldHRpbmdcIjoxNyxcIi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4vY29yZS9lbnZpcm9ubWVudFwiOjE5LFwiLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4vY29yZS9oZWxwZXJzXCI6MjEsXCIuL2NvcmUvaW5pdFwiOjIyLFwiLi9jb3JlL2xlZ2FjeVwiOjIzLFwiLi9jb3JlL21haW5cIjoyNCxcIi4vY29yZS9wNS5FbGVtZW50XCI6MjUsXCIuL2NvcmUvcDUuR3JhcGhpY3NcIjoyNixcIi4vY29yZS9wNS5SZW5kZXJlclwiOjI3LFwiLi9jb3JlL3A1LlJlbmRlcmVyMkRcIjoyOCxcIi4vY29yZS9yZW5kZXJpbmdcIjoyOSxcIi4vY29yZS9zaGFwZS8yZF9wcmltaXRpdmVzXCI6MzAsXCIuL2NvcmUvc2hhcGUvYXR0cmlidXRlc1wiOjMxLFwiLi9jb3JlL3NoYXBlL2N1cnZlc1wiOjMyLFwiLi9jb3JlL3NoYXBlL3ZlcnRleFwiOjMzLFwiLi9jb3JlL3NoaW1cIjozNCxcIi4vY29yZS9zdHJ1Y3R1cmVcIjozNSxcIi4vY29yZS90cmFuc2Zvcm1cIjozNixcIi4vZGF0YS9wNS5UeXBlZERpY3RcIjozNyxcIi4vZXZlbnRzL2FjY2VsZXJhdGlvblwiOjM4LFwiLi9ldmVudHMva2V5Ym9hcmRcIjozOSxcIi4vZXZlbnRzL21vdXNlXCI6NDAsXCIuL2V2ZW50cy90b3VjaFwiOjQxLFwiLi9pbWFnZS9maWx0ZXJzXCI6NDIsXCIuL2ltYWdlL2ltYWdlXCI6NDMsXCIuL2ltYWdlL2xvYWRpbmdfZGlzcGxheWluZ1wiOjQ0LFwiLi9pbWFnZS9wNS5JbWFnZVwiOjQ1LFwiLi9pbWFnZS9waXhlbHNcIjo0NixcIi4vaW8vZmlsZXNcIjo0NyxcIi4vaW8vcDUuVGFibGVcIjo0OCxcIi4vaW8vcDUuVGFibGVSb3dcIjo0OSxcIi4vaW8vcDUuWE1MXCI6NTAsXCIuL21hdGgvY2FsY3VsYXRpb25cIjo1MSxcIi4vbWF0aC9tYXRoXCI6NTIsXCIuL21hdGgvbm9pc2VcIjo1MyxcIi4vbWF0aC9wNS5WZWN0b3JcIjo1NCxcIi4vbWF0aC9yYW5kb21cIjo1NSxcIi4vbWF0aC90cmlnb25vbWV0cnlcIjo1NixcIi4vdHlwb2dyYXBoeS9hdHRyaWJ1dGVzXCI6NTcsXCIuL3R5cG9ncmFwaHkvbG9hZGluZ19kaXNwbGF5aW5nXCI6NTgsXCIuL3R5cG9ncmFwaHkvcDUuRm9udFwiOjU5LFwiLi91dGlsaXRpZXMvYXJyYXlfZnVuY3Rpb25zXCI6NjAsXCIuL3V0aWxpdGllcy9jb252ZXJzaW9uXCI6NjEsXCIuL3V0aWxpdGllcy9zdHJpbmdfZnVuY3Rpb25zXCI6NjIsXCIuL3V0aWxpdGllcy90aW1lX2RhdGVcIjo2MyxcIi4vd2ViZ2wvM2RfcHJpbWl0aXZlc1wiOjY0LFwiLi93ZWJnbC9pbnRlcmFjdGlvblwiOjY1LFwiLi93ZWJnbC9saWdodFwiOjY2LFwiLi93ZWJnbC9sb2FkaW5nXCI6NjcsXCIuL3dlYmdsL21hdGVyaWFsXCI6NjgsXCIuL3dlYmdsL3A1LkNhbWVyYVwiOjY5LFwiLi93ZWJnbC9wNS5HZW9tZXRyeVwiOjcwLFwiLi93ZWJnbC9wNS5NYXRyaXhcIjo3MSxcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTFwiOjc0LFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLkltbWVkaWF0ZVwiOjcyLFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLlJldGFpbmVkXCI6NzMsXCIuL3dlYmdsL3A1LlNoYWRlclwiOjc1LFwiLi93ZWJnbC9wNS5UZXh0dXJlXCI6NzYsXCIuL3dlYmdsL3RleHRcIjo3N31dLDE0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLkNvbG9yQ29udmVyc2lvbj17fSxkLkNvbG9yQ29udmVyc2lvbi5faHNiYVRvSFNMQT1mdW5jdGlvbihhKXt2YXIgYj1hWzBdLGM9YVsxXSxkPWFbMl0sZT0oMi1jKSpkLzI7cmV0dXJuIDAhPT1lJiYoMT09PWU/Yz0wOmU8LjU/Yy89Mi1jOmM9YypkLygyLTIqZSkpLFtiLGMsZSxhWzNdXX0sZC5Db2xvckNvbnZlcnNpb24uX2hzYmFUb1JHQkE9ZnVuY3Rpb24oYSl7dmFyIGI9NiphWzBdLGM9YVsxXSxkPWFbMl0sZT1bXTtpZigwPT09YyllPVtkLGQsZCxhWzNdXTtlbHNle3ZhciBmLGcsaCxpPU1hdGguZmxvb3IoYiksaj1kKigxLWMpLGs9ZCooMS1jKihiLWkpKSxsPWQqKDEtYyooMStpLWIpKTsxPT09aT8oZj1rLGc9ZCxoPWopOjI9PT1pPyhmPWosZz1kLGg9bCk6Mz09PWk/KGY9aixnPWssaD1kKTo0PT09aT8oZj1sLGc9aixoPWQpOjU9PT1pPyhmPWQsZz1qLGg9ayk6KGY9ZCxnPWwsaD1qKSxlPVtmLGcsaCxhWzNdXX1yZXR1cm4gZX0sZC5Db2xvckNvbnZlcnNpb24uX2hzbGFUb0hTQkE9ZnVuY3Rpb24oYSl7dmFyIGIsYz1hWzBdLGQ9YVsxXSxlPWFbMl07cmV0dXJuIGI9ZTwuNT8oMStkKSplOmUrZC1lKmQsZD0yKihiLWUpL2IsW2MsZCxiLGFbM11dfSxkLkNvbG9yQ29udmVyc2lvbi5faHNsYVRvUkdCQT1mdW5jdGlvbihhKXt2YXIgYj02KmFbMF0sYz1hWzFdLGQ9YVsyXSxlPVtdO2lmKDA9PT1jKWU9W2QsZCxkLGFbM11dO2Vsc2V7dmFyIGY7Zj1kPC41PygxK2MpKmQ6ZCtjLWQqYzt2YXIgZz0yKmQtZixoPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYTwwP2ErPTY6YT49NiYmKGEtPTYpLGE8MT9iKyhjLWIpKmE6YTwzP2M6YTw0P2IrKGMtYikqKDQtYSk6Yn07ZT1baChiKzIsZyxmKSxoKGIsZyxmKSxoKGItMixnLGYpLGFbM11dfXJldHVybiBlfSxkLkNvbG9yQ29udmVyc2lvbi5fcmdiYVRvSFNCQT1mdW5jdGlvbihhKXt2YXIgYixjLGQ9YVswXSxlPWFbMV0sZj1hWzJdLGc9TWF0aC5tYXgoZCxlLGYpLGg9Zy1NYXRoLm1pbihkLGUsZik7cmV0dXJuIDA9PT1oPyhiPTAsYz0wKTooYz1oL2csZD09PWc/Yj0oZS1mKS9oOmU9PT1nP2I9MisoZi1kKS9oOmY9PT1nJiYoYj00KyhkLWUpL2gpLGI8MD9iKz02OmI+PTYmJihiLT02KSksW2IvNixjLGcsYVszXV19LGQuQ29sb3JDb252ZXJzaW9uLl9yZ2JhVG9IU0xBPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hWzBdLGU9YVsxXSxmPWFbMl0sZz1NYXRoLm1heChkLGUsZiksaD1NYXRoLm1pbihkLGUsZiksaT1nK2gsaj1nLWg7cmV0dXJuIDA9PT1qPyhiPTAsYz0wKTooYz1pPDE/ai9pOmovKDItaSksZD09PWc/Yj0oZS1mKS9qOmU9PT1nP2I9MisoZi1kKS9qOmY9PT1nJiYoYj00KyhkLWUpL2opLGI8MD9iKz02OmI+PTYmJihiLT02KSksW2IvNixjLGkvMixhWzNdXX0sYi5leHBvcnRzPWQuQ29sb3JDb252ZXJzaW9ufSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDE1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi9wNS5Db2xvclwiKSxhKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGQucHJvdG90eXBlLmFscGhhPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJhbHBoYVwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0QWxwaGEoKX0sZC5wcm90b3R5cGUuYmx1ZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmx1ZVwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0Qmx1ZSgpfSxkLnByb3RvdHlwZS5icmlnaHRuZXNzPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJicmlnaHRuZXNzXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRCcmlnaHRuZXNzKCl9LGQucHJvdG90eXBlLmNvbG9yPWZ1bmN0aW9uKCl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29sb3JcIixhcmd1bWVudHMpLGFyZ3VtZW50c1swXWluc3RhbmNlb2YgZC5Db2xvcilyZXR1cm4gYXJndW1lbnRzWzBdO3ZhciBhPWFyZ3VtZW50c1swXWluc3RhbmNlb2YgQXJyYXk/YXJndW1lbnRzWzBdOmFyZ3VtZW50cztyZXR1cm4gbmV3IGQuQ29sb3IodGhpcyxhKX0sZC5wcm90b3R5cGUuZ3JlZW49ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImdyZWVuXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRHcmVlbigpfSxkLnByb3RvdHlwZS5odWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImh1ZVwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0SHVlKCl9LGQucHJvdG90eXBlLmxlcnBDb2xvcj1mdW5jdGlvbihhLGIsYyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibGVycENvbG9yXCIsYXJndW1lbnRzKTt2YXIgZixnLGgsaSxqLGssbD10aGlzLl9jb2xvck1vZGUsbT10aGlzLl9jb2xvck1heGVzO2lmKGw9PT1lLlJHQilqPWEubGV2ZWxzLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS8yNTV9KSxrPWIubGV2ZWxzLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS8yNTV9KTtlbHNlIGlmKGw9PT1lLkhTQilhLl9nZXRCcmlnaHRuZXNzKCksYi5fZ2V0QnJpZ2h0bmVzcygpLGo9YS5oc2JhLGs9Yi5oc2JhO2Vsc2V7aWYobCE9PWUuSFNMKXRocm93IG5ldyBFcnJvcihsK1wiY2Fubm90IGJlIHVzZWQgZm9yIGludGVycG9sYXRpb24uXCIpO2EuX2dldExpZ2h0bmVzcygpLGIuX2dldExpZ2h0bmVzcygpLGo9YS5oc2xhLGs9Yi5oc2xhfXJldHVybiBjPU1hdGgubWF4KE1hdGgubWluKGMsMSksMCksdm9pZCAwPT09dGhpcy5sZXJwJiYodGhpcy5sZXJwPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYyooYi1hKSthfSksZj10aGlzLmxlcnAoalswXSxrWzBdLGMpLGc9dGhpcy5sZXJwKGpbMV0sa1sxXSxjKSxoPXRoaXMubGVycChqWzJdLGtbMl0sYyksaT10aGlzLmxlcnAoalszXSxrWzNdLGMpLGYqPW1bbF1bMF0sZyo9bVtsXVsxXSxoKj1tW2xdWzJdLGkqPW1bbF1bM10sdGhpcy5jb2xvcihmLGcsaCxpKX0sZC5wcm90b3R5cGUubGlnaHRuZXNzPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsaWdodG5lc3NcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldExpZ2h0bmVzcygpfSxkLnByb3RvdHlwZS5yZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlZFwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0UmVkKCl9LGQucHJvdG90eXBlLnNhdHVyYXRpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdHVyYXRpb25cIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldFNhdHVyYXRpb24oKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5Db2xvclwiOjE2fV0sMTY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpLGY9YShcIi4vY29sb3JfY29udmVyc2lvblwiKTtkLkNvbG9yPWZ1bmN0aW9uKGEsYil7aWYodGhpcy5fc3RvcmVNb2RlQW5kTWF4ZXMoYS5fY29sb3JNb2RlLGEuX2NvbG9yTWF4ZXMpLHRoaXMubW9kZSE9PWUuUkdCJiZ0aGlzLm1vZGUhPT1lLkhTTCYmdGhpcy5tb2RlIT09ZS5IU0IpdGhyb3cgbmV3IEVycm9yKHRoaXMubW9kZStcIiBpcyBhbiBpbnZhbGlkIGNvbG9yTW9kZS5cIik7cmV0dXJuIHRoaXMuX2FycmF5PWQuQ29sb3IuX3BhcnNlSW5wdXRzLmFwcGx5KHRoaXMsYiksdGhpcy5fY2FsY3VsYXRlTGV2ZWxzKCksdGhpc30sZC5Db2xvci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYSl7dGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzbGF8fCh0aGlzLmhzbGE9Zi5fcmdiYVRvSFNMQSh0aGlzLl9hcnJheSkpO3ZhciBiPXRoaXMubGV2ZWxzLGM9dGhpcy5fYXJyYXksZD1jWzNdO3N3aXRjaChhKXtjYXNlXCIjcnJnZ2JiXCI6cmV0dXJuXCIjXCIuY29uY2F0KGJbMF08MTY/XCIwXCIuY29uY2F0KGJbMF0udG9TdHJpbmcoMTYpKTpiWzBdLnRvU3RyaW5nKDE2KSxiWzFdPDE2P1wiMFwiLmNvbmNhdChiWzFdLnRvU3RyaW5nKDE2KSk6YlsxXS50b1N0cmluZygxNiksYlsyXTwxNj9cIjBcIi5jb25jYXQoYlsyXS50b1N0cmluZygxNikpOmJbMl0udG9TdHJpbmcoMTYpKTtjYXNlXCIjcnJnZ2JiYWFcIjpyZXR1cm5cIiNcIi5jb25jYXQoYlswXTwxNj9cIjBcIi5jb25jYXQoYlswXS50b1N0cmluZygxNikpOmJbMF0udG9TdHJpbmcoMTYpLGJbMV08MTY/XCIwXCIuY29uY2F0KGJbMV0udG9TdHJpbmcoMTYpKTpiWzFdLnRvU3RyaW5nKDE2KSxiWzJdPDE2P1wiMFwiLmNvbmNhdChiWzJdLnRvU3RyaW5nKDE2KSk6YlsyXS50b1N0cmluZygxNiksYlszXTwxNj9cIjBcIi5jb25jYXQoYlsyXS50b1N0cmluZygxNikpOmJbM10udG9TdHJpbmcoMTYpKTtjYXNlXCIjcmdiXCI6cmV0dXJuXCIjXCIuY29uY2F0KE1hdGgucm91bmQoMTUqY1swXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1sxXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1syXSkudG9TdHJpbmcoMTYpKTtjYXNlXCIjcmdiYVwiOnJldHVyblwiI1wiLmNvbmNhdChNYXRoLnJvdW5kKDE1KmNbMF0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbMV0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbMl0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbM10pLnRvU3RyaW5nKDE2KSk7Y2FzZVwicmdiXCI6cmV0dXJuXCJyZ2IoXCIuY29uY2F0KGJbMF0sXCIsIFwiLGJbMV0sXCIsIFwiLGJbMl0sXCIpXCIpO2Nhc2VcInJnYiVcIjpyZXR1cm5cInJnYihcIi5jb25jYXQoKDEwMCpjWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1sxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwicmdiYSVcIjpyZXR1cm5cInJnYmEoXCIuY29uY2F0KCgxMDAqY1swXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzJdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1szXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2JcIjpjYXNlXCJoc3ZcIjpyZXR1cm5cImhzYihcIi5jb25jYXQodGhpcy5oc2JhWzBdKnRoaXMubWF4ZXNbZS5IU0JdWzBdLFwiLCBcIix0aGlzLmhzYmFbMV0qdGhpcy5tYXhlc1tlLkhTQl1bMV0sXCIsIFwiLHRoaXMuaHNiYVsyXSp0aGlzLm1heGVzW2UuSFNCXVsyXSxcIilcIik7Y2FzZVwiaHNiJVwiOmNhc2VcImhzdiVcIjpyZXR1cm5cImhzYihcIi5jb25jYXQoKDEwMCp0aGlzLmhzYmFbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwiaHNiYVwiOmNhc2VcImhzdmFcIjpyZXR1cm5cImhzYmEoXCIuY29uY2F0KHRoaXMuaHNiYVswXSp0aGlzLm1heGVzW2UuSFNCXVswXSxcIiwgXCIsdGhpcy5oc2JhWzFdKnRoaXMubWF4ZXNbZS5IU0JdWzFdLFwiLCBcIix0aGlzLmhzYmFbMl0qdGhpcy5tYXhlc1tlLkhTQl1bMl0sXCIsIFwiLGQsXCIpXCIpO2Nhc2VcImhzYmElXCI6Y2FzZVwiaHN2YSVcIjpyZXR1cm5cImhzYmEoXCIuY29uY2F0KCgxMDAqdGhpcy5oc2JhWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2JhWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2JhWzJdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqZCkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2xcIjpyZXR1cm5cImhzbChcIi5jb25jYXQodGhpcy5oc2xhWzBdKnRoaXMubWF4ZXNbZS5IU0xdWzBdLFwiLCBcIix0aGlzLmhzbGFbMV0qdGhpcy5tYXhlc1tlLkhTTF1bMV0sXCIsIFwiLHRoaXMuaHNsYVsyXSp0aGlzLm1heGVzW2UuSFNMXVsyXSxcIilcIik7Y2FzZVwiaHNsJVwiOnJldHVyblwiaHNsKFwiLmNvbmNhdCgoMTAwKnRoaXMuaHNsYVswXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsyXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2xhXCI6cmV0dXJuXCJoc2xhKFwiLmNvbmNhdCh0aGlzLmhzbGFbMF0qdGhpcy5tYXhlc1tlLkhTTF1bMF0sXCIsIFwiLHRoaXMuaHNsYVsxXSp0aGlzLm1heGVzW2UuSFNMXVsxXSxcIiwgXCIsdGhpcy5oc2xhWzJdKnRoaXMubWF4ZXNbZS5IU0xdWzJdLFwiLCBcIixkLFwiKVwiKTtjYXNlXCJoc2xhJVwiOnJldHVyblwiaHNsKFwiLmNvbmNhdCgoMTAwKnRoaXMuaHNsYVswXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsyXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmQpLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwicmdiYVwiOmRlZmF1bHQ6cmV0dXJuXCJyZ2JhKFwiK2JbMF0rXCIsXCIrYlsxXStcIixcIitiWzJdK1wiLFwiK2QrXCIpXCJ9fSxkLkNvbG9yLnByb3RvdHlwZS5zZXRSZWQ9ZnVuY3Rpb24oYSl7dGhpcy5fYXJyYXlbMF09YS90aGlzLm1heGVzW2UuUkdCXVswXSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKX0sZC5Db2xvci5wcm90b3R5cGUuc2V0R3JlZW49ZnVuY3Rpb24oYSl7dGhpcy5fYXJyYXlbMV09YS90aGlzLm1heGVzW2UuUkdCXVsxXSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKX0sZC5Db2xvci5wcm90b3R5cGUuc2V0Qmx1ZT1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVsyXT1hL3RoaXMubWF4ZXNbZS5SR0JdWzJdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5zZXRBbHBoYT1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVszXT1hL3RoaXMubWF4ZXNbdGhpcy5tb2RlXVszXSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKX0sZC5Db2xvci5wcm90b3R5cGUuX2NhbGN1bGF0ZUxldmVscz1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9hcnJheSxiPXRoaXMubGV2ZWxzPW5ldyBBcnJheShhLmxlbmd0aCksYz1hLmxlbmd0aC0xO2M+PTA7LS1jKWJbY109TWF0aC5yb3VuZCgyNTUqYVtjXSl9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRBbHBoYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheVszXSp0aGlzLm1heGVzW3RoaXMubW9kZV1bM119LGQuQ29sb3IucHJvdG90eXBlLl9zdG9yZU1vZGVBbmRNYXhlcz1mdW5jdGlvbihhLGIpe3RoaXMubW9kZT1hLHRoaXMubWF4ZXM9Yn0sZC5Db2xvci5wcm90b3R5cGUuX2dldE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0TWF4ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXhlc30sZC5Db2xvci5wcm90b3R5cGUuX2dldEJsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXlbMl0qdGhpcy5tYXhlc1tlLlJHQl1bMl19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRCcmlnaHRuZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHNiYXx8KHRoaXMuaHNiYT1mLl9yZ2JhVG9IU0JBKHRoaXMuX2FycmF5KSksdGhpcy5oc2JhWzJdKnRoaXMubWF4ZXNbZS5IU0JdWzJdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0R3JlZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXlbMV0qdGhpcy5tYXhlc1tlLlJHQl1bMV19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRIdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlPT09ZS5IU0I/KHRoaXMuaHNiYXx8KHRoaXMuaHNiYT1mLl9yZ2JhVG9IU0JBKHRoaXMuX2FycmF5KSksdGhpcy5oc2JhWzBdKnRoaXMubWF4ZXNbZS5IU0JdWzBdKToodGhpcy5oc2xhfHwodGhpcy5oc2xhPWYuX3JnYmFUb0hTTEEodGhpcy5fYXJyYXkpKSx0aGlzLmhzbGFbMF0qdGhpcy5tYXhlc1tlLkhTTF1bMF0pfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0TGlnaHRuZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHNsYXx8KHRoaXMuaHNsYT1mLl9yZ2JhVG9IU0xBKHRoaXMuX2FycmF5KSksdGhpcy5oc2xhWzJdKnRoaXMubWF4ZXNbZS5IU0xdWzJdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0UmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5WzBdKnRoaXMubWF4ZXNbZS5SR0JdWzBdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0U2F0dXJhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGU9PT1lLkhTQj8odGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzYmFbMV0qdGhpcy5tYXhlc1tlLkhTQl1bMV0pOih0aGlzLmhzbGF8fCh0aGlzLmhzbGE9Zi5fcmdiYVRvSFNMQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNsYVsxXSp0aGlzLm1heGVzW2UuSFNMXVsxXSl9O3ZhciBnPXthbGljZWJsdWU6XCIjZjBmOGZmXCIsYW50aXF1ZXdoaXRlOlwiI2ZhZWJkN1wiLGFxdWE6XCIjMDBmZmZmXCIsYXF1YW1hcmluZTpcIiM3ZmZmZDRcIixhenVyZTpcIiNmMGZmZmZcIixiZWlnZTpcIiNmNWY1ZGNcIixiaXNxdWU6XCIjZmZlNGM0XCIsYmxhY2s6XCIjMDAwMDAwXCIsYmxhbmNoZWRhbG1vbmQ6XCIjZmZlYmNkXCIsYmx1ZTpcIiMwMDAwZmZcIixibHVldmlvbGV0OlwiIzhhMmJlMlwiLGJyb3duOlwiI2E1MmEyYVwiLGJ1cmx5d29vZDpcIiNkZWI4ODdcIixjYWRldGJsdWU6XCIjNWY5ZWEwXCIsY2hhcnRyZXVzZTpcIiM3ZmZmMDBcIixjaG9jb2xhdGU6XCIjZDI2OTFlXCIsY29yYWw6XCIjZmY3ZjUwXCIsY29ybmZsb3dlcmJsdWU6XCIjNjQ5NWVkXCIsY29ybnNpbGs6XCIjZmZmOGRjXCIsY3JpbXNvbjpcIiNkYzE0M2NcIixjeWFuOlwiIzAwZmZmZlwiLGRhcmtibHVlOlwiIzAwMDA4YlwiLGRhcmtjeWFuOlwiIzAwOGI4YlwiLGRhcmtnb2xkZW5yb2Q6XCIjYjg4NjBiXCIsZGFya2dyYXk6XCIjYTlhOWE5XCIsZGFya2dyZWVuOlwiIzAwNjQwMFwiLGRhcmtncmV5OlwiI2E5YTlhOVwiLGRhcmtraGFraTpcIiNiZGI3NmJcIixkYXJrbWFnZW50YTpcIiM4YjAwOGJcIixkYXJrb2xpdmVncmVlbjpcIiM1NTZiMmZcIixkYXJrb3JhbmdlOlwiI2ZmOGMwMFwiLGRhcmtvcmNoaWQ6XCIjOTkzMmNjXCIsZGFya3JlZDpcIiM4YjAwMDBcIixkYXJrc2FsbW9uOlwiI2U5OTY3YVwiLGRhcmtzZWFncmVlbjpcIiM4ZmJjOGZcIixkYXJrc2xhdGVibHVlOlwiIzQ4M2Q4YlwiLGRhcmtzbGF0ZWdyYXk6XCIjMmY0ZjRmXCIsZGFya3NsYXRlZ3JleTpcIiMyZjRmNGZcIixkYXJrdHVycXVvaXNlOlwiIzAwY2VkMVwiLGRhcmt2aW9sZXQ6XCIjOTQwMGQzXCIsZGVlcHBpbms6XCIjZmYxNDkzXCIsZGVlcHNreWJsdWU6XCIjMDBiZmZmXCIsZGltZ3JheTpcIiM2OTY5NjlcIixkaW1ncmV5OlwiIzY5Njk2OVwiLGRvZGdlcmJsdWU6XCIjMWU5MGZmXCIsZmlyZWJyaWNrOlwiI2IyMjIyMlwiLGZsb3JhbHdoaXRlOlwiI2ZmZmFmMFwiLGZvcmVzdGdyZWVuOlwiIzIyOGIyMlwiLGZ1Y2hzaWE6XCIjZmYwMGZmXCIsZ2FpbnNib3JvOlwiI2RjZGNkY1wiLGdob3N0d2hpdGU6XCIjZjhmOGZmXCIsZ29sZDpcIiNmZmQ3MDBcIixnb2xkZW5yb2Q6XCIjZGFhNTIwXCIsZ3JheTpcIiM4MDgwODBcIixncmVlbjpcIiMwMDgwMDBcIixncmVlbnllbGxvdzpcIiNhZGZmMmZcIixncmV5OlwiIzgwODA4MFwiLGhvbmV5ZGV3OlwiI2YwZmZmMFwiLGhvdHBpbms6XCIjZmY2OWI0XCIsaW5kaWFucmVkOlwiI2NkNWM1Y1wiLGluZGlnbzpcIiM0YjAwODJcIixpdm9yeTpcIiNmZmZmZjBcIixraGFraTpcIiNmMGU2OGNcIixsYXZlbmRlcjpcIiNlNmU2ZmFcIixsYXZlbmRlcmJsdXNoOlwiI2ZmZjBmNVwiLGxhd25ncmVlbjpcIiM3Y2ZjMDBcIixsZW1vbmNoaWZmb246XCIjZmZmYWNkXCIsbGlnaHRibHVlOlwiI2FkZDhlNlwiLGxpZ2h0Y29yYWw6XCIjZjA4MDgwXCIsbGlnaHRjeWFuOlwiI2UwZmZmZlwiLGxpZ2h0Z29sZGVucm9keWVsbG93OlwiI2ZhZmFkMlwiLGxpZ2h0Z3JheTpcIiNkM2QzZDNcIixsaWdodGdyZWVuOlwiIzkwZWU5MFwiLGxpZ2h0Z3JleTpcIiNkM2QzZDNcIixsaWdodHBpbms6XCIjZmZiNmMxXCIsbGlnaHRzYWxtb246XCIjZmZhMDdhXCIsbGlnaHRzZWFncmVlbjpcIiMyMGIyYWFcIixsaWdodHNreWJsdWU6XCIjODdjZWZhXCIsbGlnaHRzbGF0ZWdyYXk6XCIjNzc4ODk5XCIsbGlnaHRzbGF0ZWdyZXk6XCIjNzc4ODk5XCIsbGlnaHRzdGVlbGJsdWU6XCIjYjBjNGRlXCIsbGlnaHR5ZWxsb3c6XCIjZmZmZmUwXCIsbGltZTpcIiMwMGZmMDBcIixsaW1lZ3JlZW46XCIjMzJjZDMyXCIsbGluZW46XCIjZmFmMGU2XCIsbWFnZW50YTpcIiNmZjAwZmZcIixtYXJvb246XCIjODAwMDAwXCIsbWVkaXVtYXF1YW1hcmluZTpcIiM2NmNkYWFcIixtZWRpdW1ibHVlOlwiIzAwMDBjZFwiLG1lZGl1bW9yY2hpZDpcIiNiYTU1ZDNcIixtZWRpdW1wdXJwbGU6XCIjOTM3MGRiXCIsbWVkaXVtc2VhZ3JlZW46XCIjM2NiMzcxXCIsbWVkaXVtc2xhdGVibHVlOlwiIzdiNjhlZVwiLG1lZGl1bXNwcmluZ2dyZWVuOlwiIzAwZmE5YVwiLG1lZGl1bXR1cnF1b2lzZTpcIiM0OGQxY2NcIixtZWRpdW12aW9sZXRyZWQ6XCIjYzcxNTg1XCIsbWlkbmlnaHRibHVlOlwiIzE5MTk3MFwiLG1pbnRjcmVhbTpcIiNmNWZmZmFcIixtaXN0eXJvc2U6XCIjZmZlNGUxXCIsbW9jY2FzaW46XCIjZmZlNGI1XCIsbmF2YWpvd2hpdGU6XCIjZmZkZWFkXCIsbmF2eTpcIiMwMDAwODBcIixvbGRsYWNlOlwiI2ZkZjVlNlwiLG9saXZlOlwiIzgwODAwMFwiLG9saXZlZHJhYjpcIiM2YjhlMjNcIixvcmFuZ2U6XCIjZmZhNTAwXCIsb3JhbmdlcmVkOlwiI2ZmNDUwMFwiLG9yY2hpZDpcIiNkYTcwZDZcIixwYWxlZ29sZGVucm9kOlwiI2VlZThhYVwiLHBhbGVncmVlbjpcIiM5OGZiOThcIixwYWxldHVycXVvaXNlOlwiI2FmZWVlZVwiLHBhbGV2aW9sZXRyZWQ6XCIjZGI3MDkzXCIscGFwYXlhd2hpcDpcIiNmZmVmZDVcIixwZWFjaHB1ZmY6XCIjZmZkYWI5XCIscGVydTpcIiNjZDg1M2ZcIixwaW5rOlwiI2ZmYzBjYlwiLHBsdW06XCIjZGRhMGRkXCIscG93ZGVyYmx1ZTpcIiNiMGUwZTZcIixwdXJwbGU6XCIjODAwMDgwXCIscmVkOlwiI2ZmMDAwMFwiLHJvc3licm93bjpcIiNiYzhmOGZcIixyb3lhbGJsdWU6XCIjNDE2OWUxXCIsc2FkZGxlYnJvd246XCIjOGI0NTEzXCIsc2FsbW9uOlwiI2ZhODA3MlwiLHNhbmR5YnJvd246XCIjZjRhNDYwXCIsc2VhZ3JlZW46XCIjMmU4YjU3XCIsc2Vhc2hlbGw6XCIjZmZmNWVlXCIsc2llbm5hOlwiI2EwNTIyZFwiLHNpbHZlcjpcIiNjMGMwYzBcIixza3libHVlOlwiIzg3Y2VlYlwiLHNsYXRlYmx1ZTpcIiM2YTVhY2RcIixzbGF0ZWdyYXk6XCIjNzA4MDkwXCIsc2xhdGVncmV5OlwiIzcwODA5MFwiLHNub3c6XCIjZmZmYWZhXCIsc3ByaW5nZ3JlZW46XCIjMDBmZjdmXCIsc3RlZWxibHVlOlwiIzQ2ODJiNFwiLHRhbjpcIiNkMmI0OGNcIix0ZWFsOlwiIzAwODA4MFwiLHRoaXN0bGU6XCIjZDhiZmQ4XCIsdG9tYXRvOlwiI2ZmNjM0N1wiLHR1cnF1b2lzZTpcIiM0MGUwZDBcIix2aW9sZXQ6XCIjZWU4MmVlXCIsd2hlYXQ6XCIjZjVkZWIzXCIsd2hpdGU6XCIjZmZmZmZmXCIsd2hpdGVzbW9rZTpcIiNmNWY1ZjVcIix5ZWxsb3c6XCIjZmZmZjAwXCIseWVsbG93Z3JlZW46XCIjOWFjZDMyXCJ9LGg9L1xccyovLGk9LyhcXGR7MSwzfSkvLGo9LygoPzpcXGQrKD86XFwuXFxkKyk/KXwoPzpcXC5cXGQrKSkvLGs9bmV3IFJlZ0V4cChqLnNvdXJjZStcIiVcIiksbD17SEVYMzovXiMoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkkL2ksSEVYNDovXiMoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkoW2EtZjAtOV0pJC9pLEhFWDY6L14jKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pJC9pLEhFWDg6L14jKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KSQvaSxSR0I6bmV3IFJlZ0V4cChbXCJecmdiXFxcXChcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksUkdCX1BFUkNFTlQ6bmV3IFJlZ0V4cChbXCJecmdiXFxcXChcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksUkdCQTpuZXcgUmVnRXhwKFtcIl5yZ2JhXFxcXChcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIixcIixqLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksUkdCQV9QRVJDRU5UOm5ldyBSZWdFeHAoW1wiXnJnYmFcXFxcKFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGouc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxIU0w6bmV3IFJlZ0V4cChbXCJeaHNsXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksSFNMQTpuZXcgUmVnRXhwKFtcIl5oc2xhXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixqLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksSFNCOm5ldyBSZWdFeHAoW1wiXmhzYlxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLEhTQkE6bmV3IFJlZ0V4cChbXCJeaHNiYVxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsai5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpfTtkLkNvbG9yLl9wYXJzZUlucHV0cz1mdW5jdGlvbihhLGIsYyxoKXt2YXIgaSxqPWFyZ3VtZW50cy5sZW5ndGgsaz10aGlzLm1vZGUsbT10aGlzLm1heGVzW2tdLG49W107aWYoaj49Myl7Zm9yKG5bMF09YS9tWzBdLG5bMV09Yi9tWzFdLG5bMl09Yy9tWzJdLG5bM109XCJudW1iZXJcIj09dHlwZW9mIGg/aC9tWzNdOjEsaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgbz1uW2ldO288MD9uW2ldPTA6bz4xJiYobltpXT0xKX1yZXR1cm4gaz09PWUuSFNMP2YuX2hzbGFUb1JHQkEobik6az09PWUuSFNCP2YuX2hzYmFUb1JHQkEobik6bn1pZigxPT09aiYmXCJzdHJpbmdcIj09dHlwZW9mIGEpe3ZhciBwPWEudHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoZ1twXSlyZXR1cm4gZC5Db2xvci5fcGFyc2VJbnB1dHMuY2FsbCh0aGlzLGdbcF0pO2lmKGwuSEVYMy50ZXN0KHApKXJldHVybiBuPWwuSEVYMy5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSthLDE2KS8yNTV9KSxuWzNdPTEsbjtpZihsLkhFWDYudGVzdChwKSlyZXR1cm4gbj1sLkhFWDYuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGEsMTYpLzI1NX0pLG5bM109MSxuO2lmKGwuSEVYNC50ZXN0KHApKXJldHVybiBuPWwuSEVYNC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSthLDE2KS8yNTV9KTtpZihsLkhFWDgudGVzdChwKSlyZXR1cm4gbj1sLkhFWDguZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGEsMTYpLzI1NX0pO2lmKGwuUkdCLnRlc3QocCkpcmV0dXJuIG49bC5SR0IuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEvMjU1fSksblszXT0xLG47aWYobC5SR0JfUEVSQ0VOVC50ZXN0KHApKXJldHVybiBuPWwuUkdCX1BFUkNFTlQuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlRmxvYXQoYSkvMTAwfSksblszXT0xLG47aWYobC5SR0JBLnRlc3QocCkpcmV0dXJuIG49bC5SR0JBLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDM9PT1iP3BhcnNlRmxvYXQoYSk6YS8yNTV9KTtpZihsLlJHQkFfUEVSQ0VOVC50ZXN0KHApKXJldHVybiBuPWwuUkdCQV9QRVJDRU5ULmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDM9PT1iP3BhcnNlRmxvYXQoYSk6cGFyc2VGbG9hdChhKS8xMDB9KTtpZihsLkhTTC50ZXN0KHApPyhuPWwuSFNMLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDA9PT1iP3BhcnNlSW50KGEsMTApLzM2MDpwYXJzZUludChhLDEwKS8xMDB9KSxuWzNdPTEpOmwuSFNMQS50ZXN0KHApJiYobj1sLkhTTEEuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOjM9PT1iP3BhcnNlRmxvYXQoYSk6cGFyc2VJbnQoYSwxMCkvMTAwfSkpLG49bi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKGEsMSksMCl9KSxuLmxlbmd0aClyZXR1cm4gZi5faHNsYVRvUkdCQShuKTtpZihsLkhTQi50ZXN0KHApPyhuPWwuSFNCLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDA9PT1iP3BhcnNlSW50KGEsMTApLzM2MDpwYXJzZUludChhLDEwKS8xMDB9KSxuWzNdPTEpOmwuSFNCQS50ZXN0KHApJiYobj1sLkhTQkEuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOjM9PT1iP3BhcnNlRmxvYXQoYSk6cGFyc2VJbnQoYSwxMCkvMTAwfSkpLG4ubGVuZ3RoKXtmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKW5baV09TWF0aC5tYXgoTWF0aC5taW4obltpXSwxKSwwKTtyZXR1cm4gZi5faHNiYVRvUkdCQShuKX1uPVsxLDEsMSwxXX1lbHNle2lmKDEhPT1qJiYyIT09anx8XCJudW1iZXJcIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKGFyZ3VtZW50cytcImlzIG5vdCBhIHZhbGlkIGNvbG9yIHJlcHJlc2VudGF0aW9uLlwiKTtuWzBdPWEvbVsyXSxuWzFdPWEvbVsyXSxuWzJdPWEvbVsyXSxuWzNdPVwibnVtYmVyXCI9PXR5cGVvZiBiP2IvbVszXToxLG49bi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKGEsMSksMCl9KX1yZXR1cm4gbn0sYi5leHBvcnRzPWQuQ29sb3J9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vY29sb3JfY29udmVyc2lvblwiOjE0fV0sMTc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuL3A1LkNvbG9yXCIpLGQucHJvdG90eXBlLmJhY2tncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkLkltYWdlP3RoaXMuaW1hZ2UoYXJndW1lbnRzWzBdLDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTp0aGlzLl9yZW5kZXJlci5iYWNrZ3JvdW5kLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuY2xlYXIoKSx0aGlzfSxkLnByb3RvdHlwZS5jb2xvck1vZGU9ZnVuY3Rpb24oYSxiLGMsZixnKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjb2xvck1vZGVcIixhcmd1bWVudHMpLGE9PT1lLlJHQnx8YT09PWUuSFNCfHxhPT09ZS5IU0wpe3RoaXMuX2NvbG9yTW9kZT1hO3ZhciBoPXRoaXMuX2NvbG9yTWF4ZXNbYV07Mj09PWFyZ3VtZW50cy5sZW5ndGg/KGhbMF09YixoWzFdPWIsaFsyXT1iLGhbM109Yik6ND09PWFyZ3VtZW50cy5sZW5ndGg/KGhbMF09YixoWzFdPWMsaFsyXT1mKTo1PT09YXJndW1lbnRzLmxlbmd0aCYmKGhbMF09YixoWzFdPWMsaFsyXT1mLGhbM109Zyl9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2ZpbGxTZXRcIiwhMCksdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvRmlsbFwiLCEwKSx0aGlzLl9yZW5kZXJlci5maWxsLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUubm9GaWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9kb0ZpbGxcIiwhMSksdGhpc30sZC5wcm90b3R5cGUubm9TdHJva2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvU3Ryb2tlXCIsITEpLHRoaXN9LGQucHJvdG90eXBlLnN0cm9rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfc3Ryb2tlU2V0XCIsITApLHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9kb1N0cm9rZVwiLCEwKSx0aGlzLl9yZW5kZXJlci5zdHJva2UuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5Db2xvclwiOjE2fV0sMTg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1NYXRoLlBJO2IuZXhwb3J0cz17UDJEOlwicDJkXCIsV0VCR0w6XCJ3ZWJnbFwiLEFSUk9XOlwiZGVmYXVsdFwiLENST1NTOlwiY3Jvc3NoYWlyXCIsSEFORDpcInBvaW50ZXJcIixNT1ZFOlwibW92ZVwiLFRFWFQ6XCJ0ZXh0XCIsV0FJVDpcIndhaXRcIixIQUxGX1BJOmQvMixQSTpkLFFVQVJURVJfUEk6ZC80LFRBVToyKmQsVFdPX1BJOjIqZCxERUdSRUVTOlwiZGVncmVlc1wiLFJBRElBTlM6XCJyYWRpYW5zXCIsREVHX1RPX1JBRDpkLzE4MCxSQURfVE9fREVHOjE4MC9kLENPUk5FUjpcImNvcm5lclwiLENPUk5FUlM6XCJjb3JuZXJzXCIsUkFESVVTOlwicmFkaXVzXCIsUklHSFQ6XCJyaWdodFwiLExFRlQ6XCJsZWZ0XCIsQ0VOVEVSOlwiY2VudGVyXCIsVE9QOlwidG9wXCIsQk9UVE9NOlwiYm90dG9tXCIsQkFTRUxJTkU6XCJhbHBoYWJldGljXCIsUE9JTlRTOjAsTElORVM6MSxMSU5FX1NUUklQOjMsTElORV9MT09QOjIsVFJJQU5HTEVTOjQsVFJJQU5HTEVfRkFOOjYsVFJJQU5HTEVfU1RSSVA6NSxRVUFEUzpcInF1YWRzXCIsUVVBRF9TVFJJUDpcInF1YWRfc3RyaXBcIixDTE9TRTpcImNsb3NlXCIsT1BFTjpcIm9wZW5cIixDSE9SRDpcImNob3JkXCIsUElFOlwicGllXCIsUFJPSkVDVDpcInNxdWFyZVwiLFNRVUFSRTpcImJ1dHRcIixST1VORDpcInJvdW5kXCIsQkVWRUw6XCJiZXZlbFwiLE1JVEVSOlwibWl0ZXJcIixSR0I6XCJyZ2JcIixIU0I6XCJoc2JcIixIU0w6XCJoc2xcIixBVVRPOlwiYXV0b1wiLEFMVDoxOCxCQUNLU1BBQ0U6OCxDT05UUk9MOjE3LERFTEVURTo0NixET1dOX0FSUk9XOjQwLEVOVEVSOjEzLEVTQ0FQRToyNyxMRUZUX0FSUk9XOjM3LE9QVElPTjoxOCxSRVRVUk46MTMsUklHSFRfQVJST1c6MzksU0hJRlQ6MTYsVEFCOjksVVBfQVJST1c6MzgsQkxFTkQ6XCJzb3VyY2Utb3ZlclwiLEFERDpcImxpZ2h0ZXJcIixEQVJLRVNUOlwiZGFya2VuXCIsTElHSFRFU1Q6XCJsaWdodGVuXCIsRElGRkVSRU5DRTpcImRpZmZlcmVuY2VcIixFWENMVVNJT046XCJleGNsdXNpb25cIixNVUxUSVBMWTpcIm11bHRpcGx5XCIsU0NSRUVOOlwic2NyZWVuXCIsUkVQTEFDRTpcImNvcHlcIixPVkVSTEFZOlwib3ZlcmxheVwiLEhBUkRfTElHSFQ6XCJoYXJkLWxpZ2h0XCIsU09GVF9MSUdIVDpcInNvZnQtbGlnaHRcIixET0RHRTpcImNvbG9yLWRvZGdlXCIsQlVSTjpcImNvbG9yLWJ1cm5cIixUSFJFU0hPTEQ6XCJ0aHJlc2hvbGRcIixHUkFZOlwiZ3JheVwiLE9QQVFVRTpcIm9wYXF1ZVwiLElOVkVSVDpcImludmVydFwiLFBPU1RFUklaRTpcInBvc3Rlcml6ZVwiLERJTEFURTpcImRpbGF0ZVwiLEVST0RFOlwiZXJvZGVcIixCTFVSOlwiYmx1clwiLE5PUk1BTDpcIm5vcm1hbFwiLElUQUxJQzpcIml0YWxpY1wiLEJPTEQ6XCJib2xkXCIsX0RFRkFVTFRfVEVYVF9GSUxMOlwiIzAwMDAwMFwiLF9ERUZBVUxUX0xFQURNVUxUOjEuMjUsX0NUWF9NSURETEU6XCJtaWRkbGVcIixMSU5FQVI6XCJsaW5lYXJcIixRVUFEUkFUSUM6XCJxdWFkcmF0aWNcIixCRVpJRVI6XCJiZXppZXJcIixDVVJWRTpcImN1cnZlXCIsU1RST0tFOlwic3Ryb2tlXCIsRklMTDpcImZpbGxcIixURVhUVVJFOlwidGV4dHVyZVwiLElNTUVESUFURTpcImltbWVkaWF0ZVwiLE5FQVJFU1Q6XCJuZWFyZXN0XCIsUkVQRUFUOlwicmVwZWF0XCIsQ0xBTVA6XCJjbGFtcFwiLE1JUlJPUjpcIm1pcnJvclwiLExBTkRTQ0FQRTpcImxhbmRzY2FwZVwiLFBPUlRSQUlUOlwicG9ydHJhaXRcIixfREVGQVVMVF9TVFJPS0U6XCIjMDAwMDAwXCIsX0RFRkFVTFRfRklMTDpcIiNGRkZGRkZcIixHUklEOlwiZ3JpZFwiLEFYRVM6XCJheGVzXCJ9fSx7fV0sMTk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKCl7cmV0dXJuIHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aHx8ZG9jdW1lbnQuYm9keSYmZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aHx8MH1mdW5jdGlvbiBlKCl7cmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0fHxkb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodHx8MH1mdW5jdGlvbiBmKGEpe2lmKCEoZG9jdW1lbnQuZnVsbHNjcmVlbkVuYWJsZWR8fGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkfHxkb2N1bWVudC5tb3pGdWxsU2NyZWVuRW5hYmxlZHx8ZG9jdW1lbnQubXNGdWxsc2NyZWVuRW5hYmxlZCkpdGhyb3cgbmV3IEVycm9yKFwiRnVsbHNjcmVlbiBub3QgZW5hYmxlZCBpbiB0aGlzIGJyb3dzZXIuXCIpXG47YS5yZXF1ZXN0RnVsbHNjcmVlbj9hLnJlcXVlc3RGdWxsc2NyZWVuKCk6YS5tb3pSZXF1ZXN0RnVsbFNjcmVlbj9hLm1velJlcXVlc3RGdWxsU2NyZWVuKCk6YS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbj9hLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCk6YS5tc1JlcXVlc3RGdWxsc2NyZWVuJiZhLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKX1mdW5jdGlvbiBnKCl7ZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4/ZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTpkb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuP2RvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTpkb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbj9kb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbigpOmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4mJmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4oKX12YXIgaD1hKFwiLi9tYWluXCIpLGk9YShcIi4vY29uc3RhbnRzXCIpLGo9W2kuQVJST1csaS5DUk9TUyxpLkhBTkQsaS5NT1ZFLGkuVEVYVCxpLldBSVRdO2gucHJvdG90eXBlLl9mcmFtZVJhdGU9MCxoLnByb3RvdHlwZS5fbGFzdEZyYW1lVGltZT13aW5kb3cucGVyZm9ybWFuY2Uubm93KCksaC5wcm90b3R5cGUuX3RhcmdldEZyYW1lUmF0ZT02MDt2YXIgaz13aW5kb3cucHJpbnQ7aC5wcm90b3R5cGUucHJpbnQ9ZnVuY3Rpb24oKXthcmd1bWVudHMubGVuZ3RoP2NvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsYXJndW1lbnRzKTprKCl9LGgucHJvdG90eXBlLmZyYW1lQ291bnQ9MCxoLnByb3RvdHlwZS5mb2N1c2VkPWRvY3VtZW50Lmhhc0ZvY3VzKCksaC5wcm90b3R5cGUuY3Vyc29yPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1cImF1dG9cIixlPXRoaXMuX2N1ckVsZW1lbnQuZWx0O2lmKGouaW5kZXhPZihhKT4tMSlkPWE7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYSl7dmFyIGY9XCJcIjtiJiZjJiZcIm51bWJlclwiPT10eXBlb2YgYiYmXCJudW1iZXJcIj09dHlwZW9mIGMmJihmPWIrXCIgXCIrYyksZD1cImh0dHA6Ly9cIj09PWEuc3Vic3RyaW5nKDAsNyl8fFwiaHR0cHM6Ly9cIj09PWEuc3Vic3RyaW5nKDAsOCk/XCJ1cmwoXCIrYStcIikgXCIrZitcIiwgYXV0b1wiOi9cXC4oY3VyfGpwZ3xqcGVnfGdpZnxwbmd8Q1VSfEpQR3xKUEVHfEdJRnxQTkcpJC8udGVzdChhKT9cInVybChcIithK1wiKSBcIitmK1wiLCBhdXRvXCI6YX1lLnN0eWxlLmN1cnNvcj1kfSxoLnByb3RvdHlwZS5mcmFtZVJhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcImZyYW1lUmF0ZVwiLGFyZ3VtZW50cyksXCJudW1iZXJcIiE9dHlwZW9mIGF8fGE8MD90aGlzLl9mcmFtZVJhdGU6KHRoaXMuX3NldFByb3BlcnR5KFwiX3RhcmdldEZyYW1lUmF0ZVwiLGEpLHRoaXMuX3J1bkZyYW1lcygpLHRoaXMpfSxoLnByb3RvdHlwZS5nZXRGcmFtZVJhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcmFtZVJhdGUoKX0saC5wcm90b3R5cGUuc2V0RnJhbWVSYXRlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZyYW1lUmF0ZShhKX0saC5wcm90b3R5cGUubm9DdXJzb3I9ZnVuY3Rpb24oKXt0aGlzLl9jdXJFbGVtZW50LmVsdC5zdHlsZS5jdXJzb3I9XCJub25lXCJ9LGgucHJvdG90eXBlLmRpc3BsYXlXaWR0aD1zY3JlZW4ud2lkdGgsaC5wcm90b3R5cGUuZGlzcGxheUhlaWdodD1zY3JlZW4uaGVpZ2h0LGgucHJvdG90eXBlLndpbmRvd1dpZHRoPWQoKSxoLnByb3RvdHlwZS53aW5kb3dIZWlnaHQ9ZSgpLGgucHJvdG90eXBlLl9vbnJlc2l6ZT1mdW5jdGlvbihhKXt0aGlzLl9zZXRQcm9wZXJ0eShcIndpbmRvd1dpZHRoXCIsZCgpKSx0aGlzLl9zZXRQcm9wZXJ0eShcIndpbmRvd0hlaWdodFwiLGUoKSk7dmFyIGIsYz10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztcImZ1bmN0aW9uXCI9PXR5cGVvZiBjLndpbmRvd1Jlc2l6ZWQmJih2b2lkIDA9PT0oYj1jLndpbmRvd1Jlc2l6ZWQoYSkpfHxifHxhLnByZXZlbnREZWZhdWx0KCkpfSxoLnByb3RvdHlwZS53aWR0aD0wLGgucHJvdG90eXBlLmhlaWdodD0wLGgucHJvdG90eXBlLmZ1bGxzY3JlZW49ZnVuY3Rpb24oYSl7aWYoaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZnVsbHNjcmVlblwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSlyZXR1cm4gZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnR8fGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tb3pGdWxsU2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVudDthP2YoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTpnKCl9LGgucHJvdG90eXBlLnBpeGVsRGVuc2l0eT1mdW5jdGlvbihhKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwaXhlbERlbnNpdHlcIixhcmd1bWVudHMpO3ZhciBiO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPyhhIT09dGhpcy5fcGl4ZWxEZW5zaXR5JiYodGhpcy5fcGl4ZWxEZW5zaXR5PWEsdGhpcy5fcGl4ZWxzRGlydHk9ITApLGI9dGhpcyx0aGlzLnJlc2l6ZUNhbnZhcyh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LCEwKSk6Yj10aGlzLl9waXhlbERlbnNpdHksYn0saC5wcm90b3R5cGUuZGlzcGxheURlbnNpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmRldmljZVBpeGVsUmF0aW99LGgucHJvdG90eXBlLmdldFVSTD1mdW5jdGlvbigpe3JldHVybiBsb2NhdGlvbi5ocmVmfSxoLnByb3RvdHlwZS5nZXRVUkxQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIGxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KFwiL1wiKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuXCJcIiE9PWF9KX0saC5wcm90b3R5cGUuZ2V0VVJMUGFyYW1zPWZ1bmN0aW9uKCl7Zm9yKHZhciBhLGI9L1s/Jl0oW14mPV0rKSg/OlsmPV0pKFteJj1dKykvZ2ltLGM9e307bnVsbCE9KGE9Yi5leGVjKGxvY2F0aW9uLnNlYXJjaCkpOylhLmluZGV4PT09Yi5sYXN0SW5kZXgmJmIubGFzdEluZGV4KyssY1thWzFdXT1hWzJdO3JldHVybiBjfSxiLmV4cG9ydHM9aH0se1wiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0fV0sMjA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2EoXCIuL2NvbnN0YW50c1wiKTtkLl92YWxpZGF0ZVBhcmFtZXRlcnM9ZC5fZnJpZW5kbHlGaWxlTG9hZEVycm9yPWZ1bmN0aW9uKCl7fTt2YXIgZT1udWxsLGY9XCJodHRwczovL2dpdGh1Yi5jb20vcHJvY2Vzc2luZy9wNS5qcy93aWtpL3A1LmpzLW92ZXJ2aWV3I3doeS1jYW50LWktYXNzaWduLXZhcmlhYmxlcy11c2luZy1wNS1mdW5jdGlvbnMtYW5kLXZhcmlhYmxlcy1iZWZvcmUtc2V0dXBcIixnPWZ1bmN0aW9uKCl7dmFyIGI9e30sYz1mdW5jdGlvbihhKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVyblwiX1wiIT09YVswXSYmKCEoYSBpbiBiKSYmKGJbYV09ITAsITApKX0pLm1hcChmdW5jdGlvbihiKXt2YXIgYztyZXR1cm4gYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBhW2JdP1wiZnVuY3Rpb25cIjpiPT09Yi50b1VwcGVyQ2FzZSgpP1wiY29uc3RhbnRcIjpcInZhcmlhYmxlXCIse25hbWU6Yix0eXBlOmN9fSl9O2U9W10uY29uY2F0KGMoZC5wcm90b3R5cGUpLGMoYShcIi4vY29uc3RhbnRzXCIpKSksZS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGIubmFtZS5sZW5ndGgtYS5uYW1lLmxlbmd0aH0pfSxoPWZ1bmN0aW9uKGEsYil7Ynx8KGI9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSksZXx8ZygpLGUuc29tZShmdW5jdGlvbihjKXtpZihhLm1lc3NhZ2UmJm51bGwhPT1hLm1lc3NhZ2UubWF0Y2goXCJcXFxcVz9cIitjLm5hbWUrXCJcXFxcV1wiKSlyZXR1cm4gYihcIkRpZCB5b3UganVzdCB0cnkgdG8gdXNlIHA1LmpzJ3MgXCIrYy5uYW1lKyhcImZ1bmN0aW9uXCI9PT1jLnR5cGU/XCIoKSBcIjpcIiBcIikrYy50eXBlK1wiPyBJZiBzbywgeW91IG1heSB3YW50IHRvIG1vdmUgaXQgaW50byB5b3VyIHNrZXRjaCdzIHNldHVwKCkgZnVuY3Rpb24uXFxuXFxuRm9yIG1vcmUgZGV0YWlscywgc2VlOiBcIitmKSwhMH0pfTtkLnByb3RvdHlwZS5faGVscEZvck1pc3VzZWRBdFRvcExldmVsQ29kZT1oLFwiY29tcGxldGVcIiE9PWRvY3VtZW50LnJlYWR5U3RhdGUmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsaCwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsaCwhMSl9KSksYi5leHBvcnRzPWR9LHtcIi4uLy4uL2RvY3MvcmVmZXJlbmNlL2RhdGEuanNvblwiOnZvaWQgMCxcIi4vY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNH1dLDIxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vY29uc3RhbnRzXCIpO2IuZXhwb3J0cz17bW9kZUFkanVzdDpmdW5jdGlvbihhLGIsYyxlLGYpe3JldHVybiBmPT09ZC5DT1JORVI/e3g6YSx5OmIsdzpjLGg6ZX06Zj09PWQuQ09STkVSUz97eDphLHk6Yix3OmMtYSxoOmUtYn06Zj09PWQuUkFESVVTP3t4OmEtYyx5OmItZSx3OjIqYyxoOjIqZX06Zj09PWQuQ0VOVEVSP3t4OmEtLjUqYyx5OmItLjUqZSx3OmMsaDplfTp2b2lkIDB9fX0se1wiLi9jb25zdGFudHNcIjoxOH1dLDIyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWZ1bmN0aW9uKCl7d2luZG93Lm1vY2hhfHwod2luZG93LnNldHVwJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuc2V0dXB8fHdpbmRvdy5kcmF3JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuZHJhdykmJiFkLmluc3RhbmNlJiZuZXcgZH07XCJjb21wbGV0ZVwiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9lKCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsZSwhMSl9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMjM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2QucHJvdG90eXBlLmV4aXQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJleGl0KCkgbm90IGltcGxlbWVudGVkLCBzZWUgcmVtb3ZlKClcIil9LGQucHJvdG90eXBlLnB1c2hTdHlsZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInB1c2hTdHlsZSgpIG5vdCB1c2VkLCBzZWUgcHVzaCgpXCIpfSxkLnByb3RvdHlwZS5wb3BTdHlsZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInBvcFN0eWxlKCkgbm90IHVzZWQsIHNlZSBwb3AoKVwiKX0sZC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3ZhciBhPVwic2l6ZSgpIGlzIG5vdCBhIHZhbGlkIHA1IGZ1bmN0aW9uLCB0byBzZXQgdGhlIHNpemUgb2YgdGhlIFwiO3Rocm93IGErPVwiZHJhd2luZyBjYW52YXMsIHBsZWFzZSB1c2UgY3JlYXRlQ2FudmFzKCkgaW5zdGVhZFwiLG5ldyBFcnJvcihhKX0sYi5leHBvcnRzPWR9LHtcIi4vbWFpblwiOjI0fV0sMjQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjthKFwiLi9zaGltXCIpO3ZhciBkPWEoXCIuL2NvbnN0YW50c1wiKSxlPWZ1bmN0aW9uKGEsYixjKXtcImJvb2xlYW5cIj09dHlwZW9mIGImJnZvaWQgMD09PWMmJihjPWIsYj12b2lkIDApLHRoaXMuX3NldHVwRG9uZT0hMSx0aGlzLl9waXhlbERlbnNpdHk9TWF0aC5jZWlsKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKXx8MSx0aGlzLl91c2VyTm9kZT1iLHRoaXMuX2N1ckVsZW1lbnQ9bnVsbCx0aGlzLl9lbGVtZW50cz1bXSx0aGlzLl9yZXF1ZXN0QW5pbUlkPTAsdGhpcy5fcHJlbG9hZENvdW50PTAsdGhpcy5faXNHbG9iYWw9ITEsdGhpcy5fbG9vcD0hMCx0aGlzLl9pbml0aWFsaXplSW5zdGFuY2VWYXJpYWJsZXMoKSx0aGlzLl9kZWZhdWx0Q2FudmFzU2l6ZT17d2lkdGg6MTAwLGhlaWdodDoxMDB9LHRoaXMuX2V2ZW50cz17bW91c2Vtb3ZlOm51bGwsbW91c2Vkb3duOm51bGwsbW91c2V1cDpudWxsLGRyYWdlbmQ6bnVsbCxkcmFnb3ZlcjpudWxsLGNsaWNrOm51bGwsZGJsY2xpY2s6bnVsbCxtb3VzZW92ZXI6bnVsbCxtb3VzZW91dDpudWxsLGtleWRvd246bnVsbCxrZXl1cDpudWxsLGtleXByZXNzOm51bGwsdG91Y2hzdGFydDpudWxsLHRvdWNobW92ZTpudWxsLHRvdWNoZW5kOm51bGwscmVzaXplOm51bGwsYmx1cjpudWxsfSx0aGlzLl9ldmVudHMud2hlZWw9bnVsbCx0aGlzLl9sb2FkaW5nU2NyZWVuSWQ9XCJwNV9sb2FkaW5nXCIsdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHM9e307Zm9yKHZhciBkPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUucHJvdG90eXBlLl9yZWdpc3RlcmVkTWV0aG9kcyksZj0wO2Y8ZC5sZW5ndGg7ZisrKXt2YXIgZz1kW2ZdO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzW2ddPWUucHJvdG90eXBlLl9yZWdpc3RlcmVkTWV0aG9kc1tnXS5zbGljZSgpfXdpbmRvdy5EZXZpY2VPcmllbnRhdGlvbkV2ZW50JiYodGhpcy5fZXZlbnRzLmRldmljZW9yaWVudGF0aW9uPW51bGwpLHdpbmRvdy5EZXZpY2VNb3Rpb25FdmVudCYmIXdpbmRvdy5faXNOb2RlV2Via2l0JiYodGhpcy5fZXZlbnRzLmRldmljZW1vdGlvbj1udWxsKSx0aGlzLl9zdGFydD1mdW5jdGlvbigpe3RoaXMuX3VzZXJOb2RlJiZcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5fdXNlck5vZGUmJih0aGlzLl91c2VyTm9kZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl91c2VyTm9kZSkpO3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzLGI9YS5wcmVsb2FkO2lmKGIpe3ZhciBjPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2xvYWRpbmdTY3JlZW5JZCk7aWYoIWMpe2M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxjLmlubmVySFRNTD1cIkxvYWRpbmcuLi5cIixjLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixjLmlkPXRoaXMuX2xvYWRpbmdTY3JlZW5JZDsodGhpcy5fdXNlck5vZGV8fGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKGMpfXZhciBkPXRoaXMuX3ByZWxvYWRNZXRob2RzO2Zvcih2YXIgZiBpbiBkKXtkW2ZdPWRbZl18fGU7dmFyIGc9ZFtmXTtnIT09ZS5wcm90b3R5cGUmJmchPT1lfHwodGhpcy5faXNHbG9iYWwmJih3aW5kb3dbZl09dGhpcy5fd3JhcFByZWxvYWQodGhpcyxmKSksZz10aGlzKSx0aGlzLl9yZWdpc3RlcmVkUHJlbG9hZE1ldGhvZHNbZl09Z1tmXSxnW2ZdPXRoaXMuX3dyYXBQcmVsb2FkKGcsZil9YigpLHRoaXMuX3J1bklmUHJlbG9hZHNBcmVEb25lKCl9ZWxzZSB0aGlzLl9zZXR1cCgpLHRoaXMuX3J1bkZyYW1lcygpLHRoaXMuX2RyYXcoKX0uYmluZCh0aGlzKSx0aGlzLl9ydW5JZlByZWxvYWRzQXJlRG9uZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKDA9PT1hLl9wcmVsb2FkQ291bnQpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEuX2xvYWRpbmdTY3JlZW5JZCk7YiYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGEuX3NldHVwKCksYS5fcnVuRnJhbWVzKCksYS5fZHJhdygpfX0sdGhpcy5fZGVjcmVtZW50UHJlbG9hZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO1wiZnVuY3Rpb25cIj09dHlwZW9mIGEucHJlbG9hZCYmKGEuX3NldFByb3BlcnR5KFwiX3ByZWxvYWRDb3VudFwiLGEuX3ByZWxvYWRDb3VudC0xKSxhLl9ydW5JZlByZWxvYWRzQXJlRG9uZSgpKX0sdGhpcy5fd3JhcFByZWxvYWQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5jcmVtZW50UHJlbG9hZCgpLHRoaXMuX3JlZ2lzdGVyZWRQcmVsb2FkTWV0aG9kc1tiXS5hcHBseShhLGFyZ3VtZW50cyl9LmJpbmQodGhpcyl9LHRoaXMuX2luY3JlbWVudFByZWxvYWQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczthLl9zZXRQcm9wZXJ0eShcIl9wcmVsb2FkQ291bnRcIixhLl9wcmVsb2FkQ291bnQrMSl9LHRoaXMuX3NldHVwPWZ1bmN0aW9uKCl7dGhpcy5jcmVhdGVDYW52YXModGhpcy5fZGVmYXVsdENhbnZhc1NpemUud2lkdGgsdGhpcy5fZGVmYXVsdENhbnZhc1NpemUuaGVpZ2h0LFwicDJkXCIpO3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGEucHJlbG9hZClmb3IodmFyIGIgaW4gdGhpcy5fcHJlbG9hZE1ldGhvZHMpYVtiXT10aGlzLl9wcmVsb2FkTWV0aG9kc1tiXVtiXSxhW2JdJiZ0aGlzJiYoYVtiXT1hW2JdLmJpbmQodGhpcykpO1wiZnVuY3Rpb25cIj09dHlwZW9mIGEuc2V0dXAmJmEuc2V0dXAoKTtmb3IodmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjYW52YXNcIiksZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdO1widHJ1ZVwiPT09ZS5kYXRhc2V0LmhpZGRlbiYmKGUuc3R5bGUudmlzaWJpbGl0eT1cIlwiLGRlbGV0ZSBlLmRhdGFzZXQuaGlkZGVuKX10aGlzLl9zZXR1cERvbmU9ITB9LmJpbmQodGhpcyksdGhpcy5fZHJhdz1mdW5jdGlvbigpe3ZhciBhPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSxiPWEtdGhpcy5fbGFzdEZyYW1lVGltZSxjPTFlMy90aGlzLl90YXJnZXRGcmFtZVJhdGU7KCF0aGlzLl9sb29wfHxiPj1jLTUpJiYodGhpcy5yZWRyYXcoKSx0aGlzLl9mcmFtZVJhdGU9MWUzLyhhLXRoaXMuX2xhc3RGcmFtZVRpbWUpLHRoaXMuX2xhc3RGcmFtZVRpbWU9YSx2b2lkIDAhPT10aGlzLl91cGRhdGVNb3VzZUNvb3JkcyYmdGhpcy5fdXBkYXRlTW91c2VDb29yZHMoKSksdGhpcy5fbG9vcCYmKHRoaXMuX3JlcXVlc3RBbmltSWQ9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9kcmF3KSl9LmJpbmQodGhpcyksdGhpcy5fcnVuRnJhbWVzPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSW50ZXJ2YWwmJmNsZWFySW50ZXJ2YWwodGhpcy5fdXBkYXRlSW50ZXJ2YWwpfS5iaW5kKHRoaXMpLHRoaXMuX3NldFByb3BlcnR5PWZ1bmN0aW9uKGEsYil7dGhpc1thXT1iLHRoaXMuX2lzR2xvYmFsJiYod2luZG93W2FdPWIpfS5iaW5kKHRoaXMpLHRoaXMucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fbG9hZGluZ1NjcmVlbklkKTtpZihhJiYoYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpLHRoaXMuX2luY3JlbWVudFByZWxvYWQoKSksdGhpcy5fY3VyRWxlbWVudCl7dGhpcy5fbG9vcD0hMSx0aGlzLl9yZXF1ZXN0QW5pbUlkJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVxdWVzdEFuaW1JZCk7Zm9yKHZhciBiIGluIHRoaXMuX2V2ZW50cyl3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLHRoaXMuX2V2ZW50c1tiXSk7Zm9yKHZhciBjPTA7Yzx0aGlzLl9lbGVtZW50cy5sZW5ndGg7YysrKXt2YXIgZD10aGlzLl9lbGVtZW50c1tjXTtkLmVsdC5wYXJlbnROb2RlJiZkLmVsdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQuZWx0KTtmb3IodmFyIGYgaW4gZC5fZXZlbnRzKWQuZWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZixkLl9ldmVudHNbZl0pfXZhciBnPXRoaXM7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucmVtb3ZlLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwIT09YSYmYS5jYWxsKGcpfSl9aWYodGhpcy5faXNHbG9iYWwpe2Zvcih2YXIgaCBpbiBlLnByb3RvdHlwZSl0cnl7ZGVsZXRlIHdpbmRvd1toXX1jYXRjaChhKXt3aW5kb3dbaF09dm9pZCAwfWZvcih2YXIgaSBpbiB0aGlzKWlmKHRoaXMuaGFzT3duUHJvcGVydHkoaSkpdHJ5e2RlbGV0ZSB3aW5kb3dbaV19Y2F0Y2goYSl7d2luZG93W2ldPXZvaWQgMH1lLmluc3RhbmNlPW51bGx9fS5iaW5kKHRoaXMpLHRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmluaXQuZm9yRWFjaChmdW5jdGlvbihhKXt2b2lkIDAhPT1hJiZhLmNhbGwodGhpcyl9LHRoaXMpO3ZhciBoPXRoaXMuX2NyZWF0ZUZyaWVuZGx5R2xvYmFsRnVuY3Rpb25CaW5kZXIoKTtpZihhKWEodGhpcyk7ZWxzZXt0aGlzLl9pc0dsb2JhbD0hMCxlLmluc3RhbmNlPXRoaXM7Zm9yKHZhciBpIGluIGUucHJvdG90eXBlKWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUucHJvdG90eXBlW2ldKXt2YXIgaj1pLnN1YnN0cmluZygyKTt0aGlzLl9ldmVudHMuaGFzT3duUHJvcGVydHkoail8fChNYXRoLmhhc093blByb3BlcnR5KGkpJiZNYXRoW2ldPT09ZS5wcm90b3R5cGVbaV0/aChpLGUucHJvdG90eXBlW2ldKTpoKGksZS5wcm90b3R5cGVbaV0uYmluZCh0aGlzKSkpfWVsc2UgaChpLGUucHJvdG90eXBlW2ldKTtmb3IodmFyIGsgaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KGspJiZoKGssdGhpc1trXSl9Zm9yKHZhciBsIGluIHRoaXMuX2V2ZW50cyl7dmFyIG09dGhpc1tcIl9vblwiK2xdO2lmKG0pe3ZhciBuPW0uYmluZCh0aGlzKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihsLG4se3Bhc3NpdmU6ITF9KSx0aGlzLl9ldmVudHNbbF09bn19dmFyIG89ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcImZvY3VzZWRcIiwhMCl9LmJpbmQodGhpcykscD1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwiZm9jdXNlZFwiLCExKX0uYmluZCh0aGlzKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsbyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIscCksdGhpcy5yZWdpc3Rlck1ldGhvZChcInJlbW92ZVwiLGZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLG8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLHApfSksYz90aGlzLl9zdGFydCgpOlwiY29tcGxldGVcIj09PWRvY3VtZW50LnJlYWR5U3RhdGU/dGhpcy5fc3RhcnQoKTp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIix0aGlzLl9zdGFydC5iaW5kKHRoaXMpLCExKX07ZS5wcm90b3R5cGUuX2luaXRpYWxpemVJbnN0YW5jZVZhcmlhYmxlcz1mdW5jdGlvbigpe3RoaXMuX3N0eWxlcz1bXSx0aGlzLl9iZXppZXJEZXRhaWw9MjAsdGhpcy5fY3VydmVEZXRhaWw9MjAsdGhpcy5fY29sb3JNb2RlPWQuUkdCLHRoaXMuX2NvbG9yTWF4ZXM9e3JnYjpbMjU1LDI1NSwyNTUsMjU1XSxoc2I6WzM2MCwxMDAsMTAwLDFdLGhzbDpbMzYwLDEwMCwxMDAsMV19LHRoaXMuX3BpeGVsc0RpcnR5PSEwfSxlLmluc3RhbmNlPW51bGwsZS5kaXNhYmxlRnJpZW5kbHlFcnJvcnM9ITE7Zm9yKHZhciBmIGluIGQpZS5wcm90b3R5cGVbZl09ZFtmXTtlLnByb3RvdHlwZS5fcHJlbG9hZE1ldGhvZHM9e2xvYWRKU09OOmUucHJvdG90eXBlLGxvYWRJbWFnZTplLnByb3RvdHlwZSxsb2FkU3RyaW5nczplLnByb3RvdHlwZSxsb2FkWE1MOmUucHJvdG90eXBlLGxvYWRCeXRlczplLnByb3RvdHlwZSxsb2FkVGFibGU6ZS5wcm90b3R5cGUsbG9hZEZvbnQ6ZS5wcm90b3R5cGUsbG9hZE1vZGVsOmUucHJvdG90eXBlLGxvYWRTaGFkZXI6ZS5wcm90b3R5cGV9LGUucHJvdG90eXBlLl9yZWdpc3RlcmVkTWV0aG9kcz17aW5pdDpbXSxwcmU6W10scG9zdDpbXSxyZW1vdmU6W119LGUucHJvdG90eXBlLl9yZWdpc3RlcmVkUHJlbG9hZE1ldGhvZHM9e30sZS5wcm90b3R5cGUucmVnaXN0ZXJQcmVsb2FkTWV0aG9kPWZ1bmN0aW9uKGEsYil7ZS5wcm90b3R5cGUuX3ByZWxvYWRNZXRob2RzLmhhc093blByb3BlcnR5KGEpfHwoZS5wcm90b3R5cGUuX3ByZWxvYWRNZXRob2RzW2FdPWIpfSxlLnByb3RvdHlwZS5yZWdpc3Rlck1ldGhvZD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXN8fGUucHJvdG90eXBlO2MuX3JlZ2lzdGVyZWRNZXRob2RzLmhhc093blByb3BlcnR5KGEpfHwoYy5fcmVnaXN0ZXJlZE1ldGhvZHNbYV09W10pLGMuX3JlZ2lzdGVyZWRNZXRob2RzW2FdLnB1c2goYil9LGUucHJvdG90eXBlLl9jcmVhdGVGcmllbmRseUdsb2JhbEZ1bmN0aW9uQmluZGVyPWZ1bmN0aW9uKGEpe2E9YXx8e307dmFyIGI9YS5nbG9iYWxPYmplY3R8fHdpbmRvdyxjPWEubG9nfHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLGQ9e3ByaW50OiEwfTtyZXR1cm4gZnVuY3Rpb24oYSxmKXtpZihlLmRpc2FibGVGcmllbmRseUVycm9ycywxKWJbYV09ZjtlbHNlIHRyeXtpZihhIGluIGImJiEoYSBpbiBkKSl0aHJvdyBuZXcgRXJyb3IoJ2dsb2JhbCBcIicrYSsnXCIgYWxyZWFkeSBleGlzdHMnKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYixhLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sc2V0OmZ1bmN0aW9uKGQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmQsd3JpdGFibGU6ITB9KSxjKCdZb3UganVzdCBjaGFuZ2VkIHRoZSB2YWx1ZSBvZiBcIicrYStcIlxcXCIsIHdoaWNoIHdhcyBhIHA1IGZ1bmN0aW9uLiBUaGlzIGNvdWxkIGNhdXNlIHByb2JsZW1zIGxhdGVyIGlmIHlvdSdyZSBub3QgY2FyZWZ1bC5cIil9fSl9Y2F0Y2goZCl7YygncDUgaGFkIHByb2JsZW1zIGNyZWF0aW5nIHRoZSBnbG9iYWwgZnVuY3Rpb24gXCInK2ErJ1wiLCBwb3NzaWJseSBiZWNhdXNlIHlvdXIgY29kZSBpcyBhbHJlYWR5IHVzaW5nIHRoYXQgbmFtZSBhcyBhIHZhcmlhYmxlLiBZb3UgbWF5IHdhbnQgdG8gcmVuYW1lIHlvdXIgdmFyaWFibGUgdG8gc29tZXRoaW5nIGVsc2UuJyksYlthXT1mfX19LGIuZXhwb3J0cz1lfSx7XCIuL2NvbnN0YW50c1wiOjE4LFwiLi9zaGltXCI6MzR9XSwyNTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMpe3JldHVybiExPT09Yj9mKGEsYyk6ZShhLGIsYyksdGhpc31mdW5jdGlvbiBlKGEsYixjKXtjLl9ldmVudHNbYV0mJmYoYSxjKTt2YXIgZD1iLmJpbmQoYyk7Yy5lbHQuYWRkRXZlbnRMaXN0ZW5lcihhLGQsITEpLGMuX2V2ZW50c1thXT1kfWZ1bmN0aW9uIGYoYSxiKXt2YXIgYz1iLl9ldmVudHNbYV07Yi5lbHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITEpLGIuX2V2ZW50c1thXT1udWxsfXZhciBnPWEoXCIuL21haW5cIik7Zy5FbGVtZW50PWZ1bmN0aW9uKGEsYil7dGhpcy5lbHQ9YSx0aGlzLl9wSW5zdD1iLHRoaXMuX2V2ZW50cz17fSx0aGlzLndpZHRoPXRoaXMuZWx0Lm9mZnNldFdpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuZWx0Lm9mZnNldEhlaWdodH0sZy5FbGVtZW50LnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/dGhpcy5lbHQucGFyZW50Tm9kZTooXCJzdHJpbmdcIj09dHlwZW9mIGE/KFwiI1wiPT09YVswXSYmKGE9YS5zdWJzdHJpbmcoMSkpLGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpOmEgaW5zdGFuY2VvZiBnLkVsZW1lbnQmJihhPWEuZWx0KSxhLmFwcGVuZENoaWxkKHRoaXMuZWx0KSx0aGlzKX0sZy5FbGVtZW50LnByb3RvdHlwZS5pZD1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT90aGlzLmVsdC5pZDoodGhpcy5lbHQuaWQ9YSx0aGlzLndpZHRoPXRoaXMuZWx0Lm9mZnNldFdpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuZWx0Lm9mZnNldEhlaWdodCx0aGlzKX0sZy5FbGVtZW50LnByb3RvdHlwZS5jbGFzcz1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT90aGlzLmVsdC5jbGFzc05hbWU6KHRoaXMuZWx0LmNsYXNzTmFtZT1hLHRoaXMpfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlUHJlc3NlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNlZG93blwiLGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCEwKSx0aGlzLl9wSW5zdC5fc2V0TW91c2VCdXR0b24oYiksYSgpfSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRvdWJsZUNsaWNrZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJkYmxjbGlja1wiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZVdoZWVsPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwid2hlZWxcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VSZWxlYXNlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNldXBcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VDbGlja2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiY2xpY2tcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VNb3ZlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNlbW92ZVwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZU92ZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJtb3VzZW92ZXJcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuY2hhbmdlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcImNoYW5nZVwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5pbnB1dD1mdW5jdGlvbihhKXtyZXR1cm4gZChcImlucHV0XCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlT3V0PWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2VvdXRcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUudG91Y2hTdGFydGVkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwidG91Y2hzdGFydFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS50b3VjaE1vdmVkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwidG91Y2htb3ZlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLnRvdWNoRW5kZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ0b3VjaGVuZFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5kcmFnT3Zlcj1mdW5jdGlvbihhKXtyZXR1cm4gZChcImRyYWdvdmVyXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRyYWdMZWF2ZT1mdW5jdGlvbihhKXtyZXR1cm4gZChcImRyYWdsZWF2ZVwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5kcm9wPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhiKXt2YXIgYz1uZXcgZy5GaWxlKGIpO3JldHVybiBmdW5jdGlvbihiKXtjLmRhdGE9Yi50YXJnZXQucmVzdWx0LGEoYyl9fXJldHVybiB3aW5kb3cuRmlsZSYmd2luZG93LkZpbGVSZWFkZXImJndpbmRvdy5GaWxlTGlzdCYmd2luZG93LkJsb2I/KGUoXCJkcmFnb3ZlclwiLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzKSxlKFwiZHJhZ2xlYXZlXCIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKSxhLnByZXZlbnREZWZhdWx0KCl9LHRoaXMpLHZvaWQgMCE9PWImJmUoXCJkcm9wXCIsYix0aGlzKSxlKFwiZHJvcFwiLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpO2Zvcih2YXIgYj1hLmRhdGFUcmFuc2Zlci5maWxlcyxkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBlPWJbZF0sZj1uZXcgRmlsZVJlYWRlcjtmLm9ubG9hZD1jKGUpLGUudHlwZS5pbmRleE9mKFwidGV4dFwiKT4tMT9mLnJlYWRBc1RleHQoZSk6Zi5yZWFkQXNEYXRhVVJMKGUpfX0sdGhpcykpOmNvbnNvbGUubG9nKFwiVGhlIEZpbGUgQVBJcyBhcmUgbm90IGZ1bGx5IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXIuXCIpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuX3NldFByb3BlcnR5PWZ1bmN0aW9uKGEsYil7dGhpc1thXT1ifSxiLmV4cG9ydHM9Zy5FbGVtZW50fSx7XCIuL21haW5cIjoyNH1dLDI2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKSxlPWEoXCIuL2NvbnN0YW50c1wiKTtkLkdyYXBoaWNzPWZ1bmN0aW9uKGEsYixjLGYpe3ZhciBnPWN8fGUuUDJEO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksKGYuX3VzZXJOb2RlfHxkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZCh0aGlzLmNhbnZhcyksZC5FbGVtZW50LmNhbGwodGhpcyx0aGlzLmNhbnZhcyxmLCExKTtmb3IodmFyIGggaW4gZC5wcm90b3R5cGUpdGhpc1toXXx8KFwiZnVuY3Rpb25cIj09dHlwZW9mIGQucHJvdG90eXBlW2hdP3RoaXNbaF09ZC5wcm90b3R5cGVbaF0uYmluZCh0aGlzKTp0aGlzW2hdPWQucHJvdG90eXBlW2hdKTtyZXR1cm4gZC5wcm90b3R5cGUuX2luaXRpYWxpemVJbnN0YW5jZVZhcmlhYmxlcy5hcHBseSh0aGlzKSx0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yix0aGlzLl9waXhlbERlbnNpdHk9Zi5fcGl4ZWxEZW5zaXR5LGc9PT1lLldFQkdMP3RoaXMuX3JlbmRlcmVyPW5ldyBkLlJlbmRlcmVyR0wodGhpcy5jYW52YXMsdGhpcywhMSk6dGhpcy5fcmVuZGVyZXI9bmV3IGQuUmVuZGVyZXIyRCh0aGlzLmNhbnZhcyx0aGlzLCExKSxmLl9lbGVtZW50cy5wdXNoKHRoaXMpLHRoaXMuX3JlbmRlcmVyLnJlc2l6ZShhLGIpLHRoaXMuX3JlbmRlcmVyLl9hcHBseURlZmF1bHRzKCksdGhpc30sZC5HcmFwaGljcy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLkVsZW1lbnQucHJvdG90eXBlKSxkLkdyYXBoaWNzLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLmVsdC5wYXJlbnROb2RlJiZ0aGlzLmVsdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWx0KTt2YXIgYT10aGlzLl9wSW5zdC5fZWxlbWVudHMuaW5kZXhPZih0aGlzKTstMSE9PWEmJnRoaXMuX3BJbnN0Ll9lbGVtZW50cy5zcGxpY2UoYSwxKTtmb3IodmFyIGIgaW4gdGhpcy5fZXZlbnRzKXRoaXMuZWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoYix0aGlzLl9ldmVudHNbYl0pfSxiLmV4cG9ydHM9ZC5HcmFwaGljc30se1wiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0fV0sMjc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEpe3ZhciBiPTAsYz0wO2lmKGEub2Zmc2V0UGFyZW50KWRve2IrPWEub2Zmc2V0TGVmdCxjKz1hLm9mZnNldFRvcH13aGlsZShhPWEub2Zmc2V0UGFyZW50KTtlbHNlIGIrPWEub2Zmc2V0TGVmdCxjKz1hLm9mZnNldFRvcDtyZXR1cm5bYixjXX12YXIgZT1hKFwiLi9tYWluXCIpLGY9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2UuUmVuZGVyZXI9ZnVuY3Rpb24oYSxiLGMpe2UuRWxlbWVudC5jYWxsKHRoaXMsYSxiKSx0aGlzLmNhbnZhcz1hLGM/KHRoaXMuX2lzTWFpbkNhbnZhcz0hMCx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJfY3VyRWxlbWVudFwiLHRoaXMpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcImNhbnZhc1wiLHRoaXMuY2FudmFzKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJ3aWR0aFwiLHRoaXMud2lkdGgpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcImhlaWdodFwiLHRoaXMuaGVpZ2h0KSk6KHRoaXMuY2FudmFzLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdGhpcy5fc3R5bGVzPVtdKSx0aGlzLl90ZXh0U2l6ZT0xMix0aGlzLl90ZXh0TGVhZGluZz0xNSx0aGlzLl90ZXh0Rm9udD1cInNhbnMtc2VyaWZcIix0aGlzLl90ZXh0U3R5bGU9Zi5OT1JNQUwsdGhpcy5fdGV4dEFzY2VudD1udWxsLHRoaXMuX3RleHREZXNjZW50PW51bGwsdGhpcy5fdGV4dEFsaWduPWYuTEVGVCx0aGlzLl90ZXh0QmFzZWxpbmU9Zi5CQVNFTElORSx0aGlzLl9yZWN0TW9kZT1mLkNPUk5FUix0aGlzLl9lbGxpcHNlTW9kZT1mLkNFTlRFUix0aGlzLl9jdXJ2ZVRpZ2h0bmVzcz0wLHRoaXMuX2ltYWdlTW9kZT1mLkNPUk5FUix0aGlzLl90aW50PW51bGwsdGhpcy5fZG9TdHJva2U9ITAsdGhpcy5fZG9GaWxsPSEwLHRoaXMuX3N0cm9rZVNldD0hMSx0aGlzLl9maWxsU2V0PSExfSxlLlJlbmRlcmVyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUuRWxlbWVudC5wcm90b3R5cGUpLGUuUmVuZGVyZXIucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXtyZXR1cm57cHJvcGVydGllczp7X2RvU3Ryb2tlOnRoaXMuX2RvU3Ryb2tlLF9zdHJva2VTZXQ6dGhpcy5fc3Ryb2tlU2V0LF9kb0ZpbGw6dGhpcy5fZG9GaWxsLF9maWxsU2V0OnRoaXMuX2ZpbGxTZXQsX3RpbnQ6dGhpcy5fdGludCxfaW1hZ2VNb2RlOnRoaXMuX2ltYWdlTW9kZSxfcmVjdE1vZGU6dGhpcy5fcmVjdE1vZGUsX2VsbGlwc2VNb2RlOnRoaXMuX2VsbGlwc2VNb2RlLF90ZXh0Rm9udDp0aGlzLl90ZXh0Rm9udCxfdGV4dExlYWRpbmc6dGhpcy5fdGV4dExlYWRpbmcsX3RleHRTaXplOnRoaXMuX3RleHRTaXplLF90ZXh0QWxpZ246dGhpcy5fdGV4dEFsaWduLF90ZXh0QmFzZWxpbmU6dGhpcy5fdGV4dEJhc2VsaW5lLF90ZXh0U3R5bGU6dGhpcy5fdGV4dFN0eWxlfX19LGUuUmVuZGVyZXIucHJvdG90eXBlLnBvcD1mdW5jdGlvbihhKXthLnByb3BlcnRpZXMmJk9iamVjdC5hc3NpZ24odGhpcyxhLnByb3BlcnRpZXMpfSxlLlJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oYSxiKXt0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yix0aGlzLmVsdC53aWR0aD1hKnRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksdGhpcy5lbHQuaGVpZ2h0PWIqdGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSx0aGlzLmVsdC5zdHlsZS53aWR0aD1hK1wicHhcIix0aGlzLmVsdC5zdHlsZS5oZWlnaHQ9YitcInB4XCIsdGhpcy5faXNNYWluQ2FudmFzJiYodGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwid2lkdGhcIix0aGlzLndpZHRoKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJoZWlnaHRcIix0aGlzLmhlaWdodCkpfSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0TGVhZGluZz1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYT8odGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dExlYWRpbmdcIixhKSx0aGlzLl9wSW5zdCk6dGhpcy5fdGV4dExlYWRpbmd9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRTaXplPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPyh0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0U2l6ZVwiLGEpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRMZWFkaW5nXCIsYSpmLl9ERUZBVUxUX0xFQURNVUxUKSx0aGlzLl9hcHBseVRleHRQcm9wZXJ0aWVzKCkpOnRoaXMuX3RleHRTaXplfSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0U3R5bGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGE/KGEhPT1mLk5PUk1BTCYmYSE9PWYuSVRBTElDJiZhIT09Zi5CT0xEfHx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0U3R5bGVcIixhKSx0aGlzLl9hcHBseVRleHRQcm9wZXJ0aWVzKCkpOnRoaXMuX3RleHRTdHlsZX0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dEFzY2VudD1mdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5fdGV4dEFzY2VudCYmdGhpcy5fdXBkYXRlVGV4dE1ldHJpY3MoKSx0aGlzLl90ZXh0QXNjZW50fSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0RGVzY2VudD1mdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5fdGV4dERlc2NlbnQmJnRoaXMuX3VwZGF0ZVRleHRNZXRyaWNzKCksdGhpcy5fdGV4dERlc2NlbnR9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRBbGlnbj1mdW5jdGlvbihhLGIpe3JldHVybiB2b2lkIDAhPT1hPyh0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QWxpZ25cIixhKSx2b2lkIDAhPT1iJiZ0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QmFzZWxpbmVcIixiKSx0aGlzLl9hcHBseVRleHRQcm9wZXJ0aWVzKCkpOntob3Jpem9udGFsOnRoaXMuX3RleHRBbGlnbix2ZXJ0aWNhbDp0aGlzLl90ZXh0QmFzZWxpbmV9fSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGcsaCxpLGosayxsLG0sbixvLHA9dGhpcy5fcEluc3QscT1OdW1iZXIuTUFYX1ZBTFVFO2lmKCh0aGlzLl9kb0ZpbGx8fHRoaXMuX2RvU3Ryb2tlKSYmdm9pZCAwIT09YSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPWEudG9TdHJpbmcoKSksYT1hLnJlcGxhY2UoLyhcXHQpL2csXCIgIFwiKSxnPWEuc3BsaXQoXCJcXG5cIiksdm9pZCAwIT09ZCl7Zm9yKG89MCxpPTA7aTxnLmxlbmd0aDtpKyspZm9yKGs9XCJcIixuPWdbaV0uc3BsaXQoXCIgXCIpLGg9MDtoPG4ubGVuZ3RoO2grKylsPWsrbltoXStcIiBcIixtPXRoaXMudGV4dFdpZHRoKGwpLG0+ZD8oaz1uW2hdK1wiIFwiLG8rPXAudGV4dExlYWRpbmcoKSk6az1sO3N3aXRjaCh0aGlzLl9yZWN0TW9kZT09PWYuQ0VOVEVSJiYoYi09ZC8yLGMtPWUvMiksdGhpcy5fdGV4dEFsaWduKXtjYXNlIGYuQ0VOVEVSOmIrPWQvMjticmVhaztjYXNlIGYuUklHSFQ6Yis9ZH12YXIgcj0hMTtpZih2b2lkIDAhPT1lKXtzd2l0Y2godGhpcy5fdGV4dEJhc2VsaW5lKXtjYXNlIGYuQk9UVE9NOmMrPWUtbzticmVhaztjYXNlIGYuQ0VOVEVSOmMrPShlLW8pLzI7YnJlYWs7Y2FzZSBmLkJBU0VMSU5FOnI9ITAsdGhpcy5fdGV4dEJhc2VsaW5lPWYuVE9QfXE9YytlLXAudGV4dEFzY2VudCgpfWZvcihpPTA7aTxnLmxlbmd0aDtpKyspe2ZvcihrPVwiXCIsbj1nW2ldLnNwbGl0KFwiIFwiKSxoPTA7aDxuLmxlbmd0aDtoKyspbD1rK25baF0rXCIgXCIsbT10aGlzLnRleHRXaWR0aChsKSxtPmQmJmsubGVuZ3RoPjA/KHRoaXMuX3JlbmRlclRleHQocCxrLGIsYyxxKSxrPW5baF0rXCIgXCIsYys9cC50ZXh0TGVhZGluZygpKTprPWw7dGhpcy5fcmVuZGVyVGV4dChwLGssYixjLHEpLGMrPXAudGV4dExlYWRpbmcoKSxyJiYodGhpcy5fdGV4dEJhc2VsaW5lPWYuQkFTRUxJTkUpfX1lbHNle3ZhciBzPTAsdD1wLnRleHRBbGlnbigpLnZlcnRpY2FsO2Zvcih0PT09Zi5DRU5URVI/cz0oZy5sZW5ndGgtMSkqcC50ZXh0TGVhZGluZygpLzI6dD09PWYuQk9UVE9NJiYocz0oZy5sZW5ndGgtMSkqcC50ZXh0TGVhZGluZygpKSxqPTA7ajxnLmxlbmd0aDtqKyspdGhpcy5fcmVuZGVyVGV4dChwLGdbal0sYixjLXMscSksYys9cC50ZXh0TGVhZGluZygpfXJldHVybiBwfX0sZS5SZW5kZXJlci5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5SZW5kZXJlci5wcm90b3R5cGUuX2lzT3BlblR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mKGE9YXx8dGhpcy5fdGV4dEZvbnQpJiZhLmZvbnQmJmEuZm9udC5zdXBwb3J0ZWR9LGUuUmVuZGVyZXIucHJvdG90eXBlLl91cGRhdGVUZXh0TWV0cmljcz1mdW5jdGlvbigpe2lmKHRoaXMuX2lzT3BlblR5cGUoKSlyZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEFzY2VudFwiLHRoaXMuX3RleHRGb250Ll90ZXh0QXNjZW50KCkpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHREZXNjZW50XCIsdGhpcy5fdGV4dEZvbnQuX3RleHREZXNjZW50KCkpLHRoaXM7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7YS5zdHlsZS5mb250RmFtaWx5PXRoaXMuX3RleHRGb250LGEuc3R5bGUuZm9udFNpemU9dGhpcy5fdGV4dFNpemUrXCJweFwiLGEuaW5uZXJIVE1MPVwiQUJDamdxfFwiO3ZhciBiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7Yi5zdHlsZS5kaXNwbGF5PVwiaW5saW5lLWJsb2NrXCIsYi5zdHlsZS53aWR0aD1cIjFweFwiLGIuc3R5bGUuaGVpZ2h0PVwiMHB4XCI7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtjLmFwcGVuZENoaWxkKGEpLGMuYXBwZW5kQ2hpbGQoYiksYy5zdHlsZS5oZWlnaHQ9XCIwcHhcIixjLnN0eWxlLm92ZXJmbG93PVwiaGlkZGVuXCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjKSxiLnN0eWxlLnZlcnRpY2FsQWxpZ249XCJiYXNlbGluZVwiO3ZhciBlPWQoYiksZj1kKGEpLGc9ZVsxXS1mWzFdO2Iuc3R5bGUudmVydGljYWxBbGlnbj1cImJvdHRvbVwiLGU9ZChiKSxmPWQoYSk7dmFyIGg9ZVsxXS1mWzFdLGk9aC1nO3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGMpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRBc2NlbnRcIixnKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0RGVzY2VudFwiLGkpLHRoaXN9LGIuZXhwb3J0cz1lLlJlbmRlcmVyfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjR9XSwyODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIiksZT1hKFwiLi9jb25zdGFudHNcIiksZj1hKFwiLi4vaW1hZ2UvZmlsdGVyc1wiKTthKFwiLi9wNS5SZW5kZXJlclwiKTt2YXIgZz1cInJnYmEoMCwwLDAsMClcIjtkLlJlbmRlcmVyMkQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBkLlJlbmRlcmVyLmNhbGwodGhpcyxhLGIsYyksdGhpcy5kcmF3aW5nQ29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIiksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiZHJhd2luZ0NvbnRleHRcIix0aGlzLmRyYXdpbmdDb250ZXh0KSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5SZW5kZXJlci5wcm90b3R5cGUpLGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdHM9ZnVuY3Rpb24oKXt0aGlzLl9jYWNoZWRGaWxsU3R5bGU9dGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGU9dm9pZCAwLHRoaXMuX3NldEZpbGwoZS5fREVGQVVMVF9GSUxMKSx0aGlzLl9zZXRTdHJva2UoZS5fREVGQVVMVF9TVFJPS0UpLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZUNhcD1lLlJPVU5ELHRoaXMuZHJhd2luZ0NvbnRleHQuZm9udD1cIm5vcm1hbCAxMnB4IHNhbnMtc2VyaWZcIn0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oYSxiKXtkLlJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLGEsYiksdGhpcy5kcmF3aW5nQ29udGV4dC5zY2FsZSh0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LHRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHkpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJhY2tncm91bmQ9ZnVuY3Rpb24oKXtpZih0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSx0aGlzLnJlc2V0TWF0cml4KCksYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkLkltYWdlKXRoaXMuX3BJbnN0LmltYWdlKGFyZ3VtZW50c1swXSwwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCk7ZWxzZXt2YXIgYT10aGlzLl9nZXRGaWxsKCksYj10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpLGM9Yi50b1N0cmluZygpO3RoaXMuX3NldEZpbGwoYyksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsUmVjdCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5fc2V0RmlsbChhKX10aGlzLmRyYXdpbmdDb250ZXh0LnJlc3RvcmUoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSx0aGlzLnJlc2V0TWF0cml4KCksdGhpcy5kcmF3aW5nQ29udGV4dC5jbGVhclJlY3QoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZHJhd2luZ0NvbnRleHQucmVzdG9yZSgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcEluc3QuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKTt0aGlzLl9zZXRGaWxsKGEudG9TdHJpbmcoKSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc3Ryb2tlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcEluc3QuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKTt0aGlzLl9zZXRTdHJva2UoYS50b1N0cmluZygpKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5pbWFnZT1mdW5jdGlvbihhLGIsYyxlLGYsZyxoLGksail7dmFyIGs7dHJ5e3RoaXMuX3RpbnQmJihkLk1lZGlhRWxlbWVudCYmYSBpbnN0YW5jZW9mIGQuTWVkaWFFbGVtZW50JiZhLmxvYWRQaXhlbHMoKSxhLmNhbnZhcyYmKGs9dGhpcy5fZ2V0VGludGVkSW1hZ2VDYW52YXMoYSkpKSxrfHwoaz1hLmNhbnZhc3x8YS5lbHQpO3ZhciBsPTE7YS53aWR0aCYmYS53aWR0aD4wJiYobD1rLndpZHRoL2Eud2lkdGgpLHRoaXMuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGssbCpiLGwqYyxsKmUsbCpmLGcsaCxpLGopfWNhdGNoKGEpe2lmKFwiTlNfRVJST1JfTk9UX0FWQUlMQUJMRVwiIT09YS5uYW1lKXRocm93IGF9dGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9nZXRUaW50ZWRJbWFnZUNhbnZhcz1mdW5jdGlvbihhKXtpZighYS5jYW52YXMpcmV0dXJuIGE7dmFyIGI9Zi5fdG9QaXhlbHMoYS5jYW52YXMpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtjLndpZHRoPWEuY2FudmFzLndpZHRoLGMuaGVpZ2h0PWEuY2FudmFzLmhlaWdodDtmb3IodmFyIGQ9Yy5nZXRDb250ZXh0KFwiMmRcIiksZT1kLmNyZWF0ZUltYWdlRGF0YShhLmNhbnZhcy53aWR0aCxhLmNhbnZhcy5oZWlnaHQpLGc9ZS5kYXRhLGg9MDtoPGIubGVuZ3RoO2grPTQpe3ZhciBpPWJbaF0saj1iW2grMV0saz1iW2grMl0sbD1iW2grM107Z1toXT1pKnRoaXMuX3RpbnRbMF0vMjU1LGdbaCsxXT1qKnRoaXMuX3RpbnRbMV0vMjU1LGdbaCsyXT1rKnRoaXMuX3RpbnRbMl0vMjU1LGdbaCszXT1sKnRoaXMuX3RpbnRbM10vMjU1fXJldHVybiBkLnB1dEltYWdlRGF0YShlLDAsMCksY30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5ibGVuZE1vZGU9ZnVuY3Rpb24oYSl7dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5ibGVuZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uLGI9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0sYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCxhcmd1bWVudHMubGVuZ3RoLTEpO3RoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWIsdGhpcy5fcEluc3Q/dGhpcy5fcEluc3QuY29weS5hcHBseSh0aGlzLl9wSW5zdCxjKTp0aGlzLmNvcHkuYXBwbHkodGhpcyxjKSx0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1hfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZSxmLGcsaCxpLGo7aWYoOT09PWFyZ3VtZW50cy5sZW5ndGgpYT1hcmd1bWVudHNbMF0sYj1hcmd1bWVudHNbMV0sYz1hcmd1bWVudHNbMl0sZT1hcmd1bWVudHNbM10sZj1hcmd1bWVudHNbNF0sZz1hcmd1bWVudHNbNV0saD1hcmd1bWVudHNbNl0saT1hcmd1bWVudHNbN10saj1hcmd1bWVudHNbOF07ZWxzZXtpZig4IT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJTaWduYXR1cmUgbm90IHN1cHBvcnRlZFwiKTthPXRoaXMuX3BJbnN0LGI9YXJndW1lbnRzWzBdLGM9YXJndW1lbnRzWzFdLGU9YXJndW1lbnRzWzJdLGY9YXJndW1lbnRzWzNdLGc9YXJndW1lbnRzWzRdLGg9YXJndW1lbnRzWzVdLGk9YXJndW1lbnRzWzZdLGo9YXJndW1lbnRzWzddfWQuUmVuZGVyZXIyRC5fY29weUhlbHBlcih0aGlzLGEsYixjLGUsZixnLGgsaSxqKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5fY29weUhlbHBlcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSxqKXtiLmxvYWRQaXhlbHMoKTt2YXIgaz1iLmNhbnZhcy53aWR0aC9iLndpZHRoO2EuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGIuY2FudmFzLGsqYyxrKmQsayplLGsqZixnLGgsaSxqKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiLGMsZSl7aWYodm9pZCAwPT09YyYmdm9pZCAwPT09ZSYmKHZvaWQgMD09PWEmJnZvaWQgMD09PWI/KGE9Yj0wLGM9dGhpcy53aWR0aCxlPXRoaXMuaGVpZ2h0KTpjPWU9MSksYStjPDB8fGIrZTwwfHxhPj10aGlzLndpZHRofHxiPj10aGlzLmhlaWdodClyZXR1cm5bMCwwLDAsMjU1XTt2YXIgZj10aGlzLl9wSW5zdHx8dGhpcyxnPWYuX3BpeGVsRGVuc2l0eTthPU1hdGguZmxvb3IoYSksYj1NYXRoLmZsb29yKGIpLGM9TWF0aC5mbG9vcihjKSxlPU1hdGguZmxvb3IoZSk7dmFyIGg9YSpnLGk9YipnO2lmKDEhPT1jfHwxIT09ZXx8dGhpcyBpbnN0YW5jZW9mIGQuUmVuZGVyZXJHTCl7dmFyIGo9TWF0aC5taW4oYyxmLndpZHRoKSxrPU1hdGgubWluKGUsZi5oZWlnaHQpLGw9aipnLG09aypnLG49bmV3IGQuSW1hZ2UoaixrKTtyZXR1cm4gbi5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLmRyYXdJbWFnZSh0aGlzLmNhbnZhcyxoLGksbCxtLDAsMCxqLGspLG59dmFyIG8scDtyZXR1cm4gZi5fcGl4ZWxzRGlydHk/KG89dGhpcy5kcmF3aW5nQ29udGV4dC5nZXRJbWFnZURhdGEoaCxpLDEsMSkuZGF0YSxwPTApOihvPWYucGl4ZWxzLHA9NCooaCtpKnRoaXMud2lkdGgqZykpLFtvW3ArMF0sb1twKzFdLG9bcCsyXSxvW3ArM11dfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmxvYWRQaXhlbHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdHx8dGhpcztpZihhLl9waXhlbHNEaXJ0eSl7YS5fcGl4ZWxzRGlydHk9ITE7dmFyIGI9YS5fcGl4ZWxEZW5zaXR5LGM9dGhpcy53aWR0aCpiLGQ9dGhpcy5oZWlnaHQqYixlPXRoaXMuZHJhd2luZ0NvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsMCxjLGQpO2EuX3NldFByb3BlcnR5KFwiaW1hZ2VEYXRhXCIsZSksYS5fc2V0UHJvcGVydHkoXCJwaXhlbHNcIixlLmRhdGEpfX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe2E9TWF0aC5mbG9vcihhKSxiPU1hdGguZmxvb3IoYik7dmFyIGU9dGhpcy5fcEluc3R8fHRoaXM7aWYoYyBpbnN0YW5jZW9mIGQuSW1hZ2UpdGhpcy5kcmF3aW5nQ29udGV4dC5zYXZlKCksdGhpcy5kcmF3aW5nQ29udGV4dC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRoaXMuZHJhd2luZ0NvbnRleHQuc2NhbGUoZS5fcGl4ZWxEZW5zaXR5LGUuX3BpeGVsRGVuc2l0eSksdGhpcy5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoYy5jYW52YXMsYSxiKSx0aGlzLmRyYXdpbmdDb250ZXh0LnJlc3RvcmUoKSxlLl9waXhlbHNEaXJ0eT0hMDtlbHNle3ZhciBmPTAsZz0wLGg9MCxpPTAsaj00KihiKmUuX3BpeGVsRGVuc2l0eSoodGhpcy53aWR0aCplLl9waXhlbERlbnNpdHkpK2EqZS5fcGl4ZWxEZW5zaXR5KTtpZihlLmltYWdlRGF0YSYmIWUuX3BpeGVsc0RpcnR5fHxlLmxvYWRQaXhlbHMuY2FsbChlKSxcIm51bWJlclwiPT10eXBlb2YgYylqPGUucGl4ZWxzLmxlbmd0aCYmKGY9YyxnPWMsaD1jLGk9MjU1KTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBBcnJheSl7aWYoYy5sZW5ndGg8NCl0aHJvdyBuZXcgRXJyb3IoXCJwaXhlbCBhcnJheSBtdXN0IGJlIG9mIHRoZSBmb3JtIFtSLCBHLCBCLCBBXVwiKTtqPGUucGl4ZWxzLmxlbmd0aCYmKGY9Y1swXSxnPWNbMV0saD1jWzJdLGk9Y1szXSl9ZWxzZSBjIGluc3RhbmNlb2YgZC5Db2xvciYmajxlLnBpeGVscy5sZW5ndGgmJihmPWMubGV2ZWxzWzBdLGc9Yy5sZXZlbHNbMV0saD1jLmxldmVsc1syXSxpPWMubGV2ZWxzWzNdKTtmb3IodmFyIGs9MDtrPGUuX3BpeGVsRGVuc2l0eTtrKyspZm9yKHZhciBsPTA7bDxlLl9waXhlbERlbnNpdHk7bCsrKWo9NCooKGIqZS5fcGl4ZWxEZW5zaXR5K2wpKnRoaXMud2lkdGgqZS5fcGl4ZWxEZW5zaXR5KyhhKmUuX3BpeGVsRGVuc2l0eStrKSksZS5waXhlbHNbal09ZixlLnBpeGVsc1tqKzFdPWcsZS5waXhlbHNbaisyXT1oLGUucGl4ZWxzW2orM109aX19LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudXBkYXRlUGl4ZWxzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuX3BJbnN0fHx0aGlzLGY9ZS5fcGl4ZWxEZW5zaXR5O3ZvaWQgMD09PWEmJnZvaWQgMD09PWImJnZvaWQgMD09PWMmJnZvaWQgMD09PWQmJihhPTAsYj0wLGM9dGhpcy53aWR0aCxkPXRoaXMuaGVpZ2h0KSxjKj1mLGQqPWYsdGhpcy5kcmF3aW5nQ29udGV4dC5wdXRJbWFnZURhdGEoZS5pbWFnZURhdGEsYSxiLDAsMCxjLGQpLDA9PT1hJiYwPT09YiYmYz09PXRoaXMud2lkdGgmJmQ9PT10aGlzLmhlaWdodHx8KGUuX3BpeGVsc0RpcnR5PSEwKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fYWN1dGVBcmNUb0Jlemllcj1mdW5jdGlvbihhLGIpe3ZhciBjPWIvMixkPU1hdGguY29zKGMpLGU9TWF0aC5zaW4oYyksZj0xL01hdGgudGFuKGMpLGc9YStjLGg9TWF0aC5jb3MoZyksaT1NYXRoLnNpbihnKSxqPSg0LWQpLzMsaz1lKyhkLWopKmY7cmV0dXJue2F4Ok1hdGguY29zKGEpLGF5Ok1hdGguc2luKGEpLGJ4OmoqaCtrKmksYnk6aippLWsqaCxjeDpqKmgtayppLGN5OmoqaStrKmgsZHg6TWF0aC5jb3MoYStiKSxkeTpNYXRoLnNpbihhK2IpfX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5hcmM9ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCl7dmFyIGk9dGhpcy5kcmF3aW5nQ29udGV4dCxqPWMvMixrPWQvMixsPTFlLTUsbT0wLG49W107Zm9yKGErPWosYis9aztnLWY+bDspbT1NYXRoLm1pbihnLWYsZS5IQUxGX1BJKSxuLnB1c2godGhpcy5fYWN1dGVBcmNUb0JlemllcihmLG0pKSxmKz1tO3JldHVybiB0aGlzLl9kb0ZpbGwmJihpLmJlZ2luUGF0aCgpLG4uZm9yRWFjaChmdW5jdGlvbihjLGQpezA9PT1kJiZpLm1vdmVUbyhhK2MuYXgqaixiK2MuYXkqayksaS5iZXppZXJDdXJ2ZVRvKGErYy5ieCpqLGIrYy5ieSprLGErYy5jeCpqLGIrYy5jeSprLGErYy5keCpqLGIrYy5keSprKX0pLGghPT1lLlBJRSYmbnVsbCE9aHx8aS5saW5lVG8oYSxiKSxpLmNsb3NlUGF0aCgpLGkuZmlsbCgpKSx0aGlzLl9kb1N0cm9rZSYmKGkuYmVnaW5QYXRoKCksbi5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7MD09PWQmJmkubW92ZVRvKGErYy5heCpqLGIrYy5heSprKSxpLmJlemllckN1cnZlVG8oYStjLmJ4KmosYitjLmJ5KmssYStjLmN4KmosYitjLmN5KmssYStjLmR4KmosYitjLmR5KmspfSksaD09PWUuUElFPyhpLmxpbmVUbyhhLGIpLGkuY2xvc2VQYXRoKCkpOmg9PT1lLkNIT1JEJiZpLmNsb3NlUGF0aCgpLGkuc3Ryb2tlKCkpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZWxsaXBzZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmRyYXdpbmdDb250ZXh0LGM9dGhpcy5fZG9GaWxsLGQ9dGhpcy5fZG9TdHJva2UsZT1hWzBdLGY9YVsxXSxoPWFbMl0saT1hWzNdO2lmKGMmJiFkKXtpZih0aGlzLl9nZXRGaWxsKCk9PT1nKXJldHVybiB0aGlzfWVsc2UgaWYoIWMmJmQmJnRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpczt2YXIgaj0uNTUyMjg0NzQ5OCxrPWgvMipqLGw9aS8yKmosbT1lK2gsbj1mK2ksbz1lK2gvMixwPWYraS8yO2IuYmVnaW5QYXRoKCksYi5tb3ZlVG8oZSxwKSxiLmJlemllckN1cnZlVG8oZSxwLWwsby1rLGYsbyxmKSxiLmJlemllckN1cnZlVG8obytrLGYsbSxwLWwsbSxwKSxiLmJlemllckN1cnZlVG8obSxwK2wsbytrLG4sbyxuKSxiLmJlemllckN1cnZlVG8oby1rLG4sZSxwK2wsZSxwKSxiLmNsb3NlUGF0aCgpLGMmJmIuZmlsbCgpLGQmJmIuc3Ryb2tlKCl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUubGluZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmRyYXdpbmdDb250ZXh0O3JldHVybiB0aGlzLl9kb1N0cm9rZT90aGlzLl9nZXRTdHJva2UoKT09PWc/dGhpczooZS5saW5lV2lkdGglMj09MSYmZS50cmFuc2xhdGUoLjUsLjUpLGUuYmVnaW5QYXRoKCksZS5tb3ZlVG8oYSxiKSxlLmxpbmVUbyhjLGQpLGUuc3Ryb2tlKCksZS5saW5lV2lkdGglMj09MSYmZS50cmFuc2xhdGUoLS41LC0uNSksdGhpcyk6dGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZHJhd2luZ0NvbnRleHQ7aWYoIXRoaXMuX2RvU3Ryb2tlKXJldHVybiB0aGlzO2lmKHRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpczt2YXIgZD10aGlzLl9nZXRTdHJva2UoKSxmPXRoaXMuX2dldEZpbGwoKTthPU1hdGgucm91bmQoYSksYj1NYXRoLnJvdW5kKGIpLHRoaXMuX3NldEZpbGwoZCksYy5saW5lV2lkdGg+MT8oYy5iZWdpblBhdGgoKSxjLmFyYyhhLGIsYy5saW5lV2lkdGgvMiwwLGUuVFdPX1BJLCExKSxjLmZpbGwoKSk6Yy5maWxsUmVjdChhLGIsMSwxKSx0aGlzLl9zZXRGaWxsKGYpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnF1YWQ9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsaCxpKXt2YXIgaj10aGlzLmRyYXdpbmdDb250ZXh0LGs9dGhpcy5fZG9GaWxsLGw9dGhpcy5fZG9TdHJva2U7aWYoayYmIWwpe2lmKHRoaXMuX2dldEZpbGwoKT09PWcpcmV0dXJuIHRoaXN9ZWxzZSBpZighayYmbCYmdGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO3JldHVybiBqLmJlZ2luUGF0aCgpLGoubW92ZVRvKGEsYiksai5saW5lVG8oYyxkKSxqLmxpbmVUbyhlLGYpLGoubGluZVRvKGgsaSksai5jbG9zZVBhdGgoKSxrJiZqLmZpbGwoKSxsJiZqLnN0cm9rZSgpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucmVjdD1mdW5jdGlvbihhKXt2YXIgYj1hWzBdLGM9YVsxXSxkPWFbMl0sZT1hWzNdLGY9YVs0XSxoPWFbNV0saT1hWzZdLGo9YVs3XSxrPXRoaXMuZHJhd2luZ0NvbnRleHQsbD10aGlzLl9kb0ZpbGwsbT10aGlzLl9kb1N0cm9rZTtpZihsJiYhbSl7aWYodGhpcy5fZ2V0RmlsbCgpPT09ZylyZXR1cm4gdGhpc31lbHNlIGlmKCFsJiZtJiZ0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7aWYodGhpcy5fZG9TdHJva2UmJmsubGluZVdpZHRoJTI9PTEmJmsudHJhbnNsYXRlKC41LC41KSxrLmJlZ2luUGF0aCgpLHZvaWQgMD09PWYpay5yZWN0KGIsYyxkLGUpO2Vsc2V7dm9pZCAwPT09aCYmKGg9Ziksdm9pZCAwPT09aSYmKGk9aCksdm9pZCAwPT09aiYmKGo9aSk7dmFyIG49ZC8yLG89ZS8yO2Q8MipmJiYoZj1uKSxlPDIqZiYmKGY9byksZDwyKmgmJihoPW4pLGU8MipoJiYoaD1vKSxkPDIqaSYmKGk9biksZTwyKmkmJihpPW8pLGQ8MipqJiYoaj1uKSxlPDIqaiYmKGo9byksay5iZWdpblBhdGgoKSxrLm1vdmVUbyhiK2YsYyksay5hcmNUbyhiK2QsYyxiK2QsYytlLGgpLGsuYXJjVG8oYitkLGMrZSxiLGMrZSxpKSxrLmFyY1RvKGIsYytlLGIsYyxqKSxrLmFyY1RvKGIsYyxiK2QsYyxmKSxrLmNsb3NlUGF0aCgpfXJldHVybiB0aGlzLl9kb0ZpbGwmJmsuZmlsbCgpLHRoaXMuX2RvU3Ryb2tlJiZrLnN0cm9rZSgpLHRoaXMuX2RvU3Ryb2tlJiZrLmxpbmVXaWR0aCUyPT0xJiZrLnRyYW5zbGF0ZSgtLjUsLS41KSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRyaWFuZ2xlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZHJhd2luZ0NvbnRleHQsYz10aGlzLl9kb0ZpbGwsZD10aGlzLl9kb1N0cm9rZSxlPWFbMF0sZj1hWzFdLGg9YVsyXSxpPWFbM10saj1hWzRdLGs9YVs1XTtpZihjJiYhZCl7aWYodGhpcy5fZ2V0RmlsbCgpPT09ZylyZXR1cm4gdGhpc31lbHNlIGlmKCFjJiZkJiZ0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7Yi5iZWdpblBhdGgoKSxiLm1vdmVUbyhlLGYpLGIubGluZVRvKGgsaSksYi5saW5lVG8oaixrKSxiLmNsb3NlUGF0aCgpLGMmJmIuZmlsbCgpLGQmJmIuc3Ryb2tlKCl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZW5kU2hhcGU9ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCl7aWYoMD09PWIubGVuZ3RoKXJldHVybiB0aGlzO2lmKCF0aGlzLl9kb1N0cm9rZSYmIXRoaXMuX2RvRmlsbClyZXR1cm4gdGhpczt2YXIgaSxqPWE9PT1lLkNMT1NFO2omJiFnJiZiLnB1c2goYlswXSk7dmFyIGssbCxtPWIubGVuZ3RoO2lmKCFjfHxoIT09ZS5QT0xZR09OJiZudWxsIT09aClpZighZHx8aCE9PWUuUE9MWUdPTiYmbnVsbCE9PWgpaWYoIWZ8fGghPT1lLlBPTFlHT04mJm51bGwhPT1oKWlmKGg9PT1lLlBPSU5UUylmb3Ioaz0wO2s8bTtrKyspaT1iW2tdLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoaVs2XSksdGhpcy5fcEluc3QucG9pbnQoaVswXSxpWzFdKTtlbHNlIGlmKGg9PT1lLkxJTkVTKWZvcihrPTA7aysxPG07ays9MilpPWJba10sdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srMV1bNl0pLHRoaXMuX3BJbnN0LmxpbmUoaVswXSxpWzFdLGJbaysxXVswXSxiW2srMV1bMV0pO2Vsc2UgaWYoaD09PWUuVFJJQU5HTEVTKWZvcihrPTA7aysyPG07ays9MylpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysyXVswXSxiW2srMl1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fZG9GaWxsJiYodGhpcy5fcEluc3QuZmlsbChiW2srMl1bNV0pLHRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbCgpKSx0aGlzLl9kb1N0cm9rZSYmKHRoaXMuX3BJbnN0LnN0cm9rZShiW2srMl1bNl0pLHRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlKCkpO2Vsc2UgaWYoaD09PWUuVFJJQU5HTEVfU1RSSVApZm9yKGs9MDtrKzE8bTtrKyspaT1iW2tdLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYltrKzFdWzBdLGJbaysxXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbaysxXVs2XSksXG50aGlzLl9kb0ZpbGwmJnRoaXMuX3BJbnN0LmZpbGwoYltrKzFdWzVdKSxrKzI8bSYmKHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysyXVswXSxiW2srMl1bMV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzJdWzZdKSx0aGlzLl9kb0ZpbGwmJnRoaXMuX3BJbnN0LmZpbGwoYltrKzJdWzVdKSksdGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKTtlbHNlIGlmKGg9PT1lLlRSSUFOR0xFX0ZBTil7aWYobT4yKXtmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSxrPTI7azxtO2srKylpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYlswXVswXSxiWzBdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2stMV1bMF0sYltrLTFdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbMF1bMF0sYlswXVsxXSksazxtLTEmJih0aGlzLl9kb0ZpbGwmJmlbNV0hPT1iW2srMV1bNV18fHRoaXMuX2RvU3Ryb2tlJiZpWzZdIT09YltrKzFdWzZdKSYmKHRoaXMuX2RvRmlsbCYmKHRoaXMuX3BJbnN0LmZpbGwoaVs1XSksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsKCksdGhpcy5fcEluc3QuZmlsbChiW2srMV1bNV0pKSx0aGlzLl9kb1N0cm9rZSYmKHRoaXMuX3BJbnN0LnN0cm9rZShpWzZdKSx0aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZSgpLHRoaXMuX3BJbnN0LnN0cm9rZShiW2srMV1bNl0pKSx0aGlzLmRyYXdpbmdDb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCkpO3RoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9fWVsc2UgaWYoaD09PWUuUVVBRFMpZm9yKGs9MDtrKzM8bTtrKz00KXtmb3IoaT1iW2tdLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oaVswXSxpWzFdKSxsPTE7bDw0O2wrKyl0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srbF1bMF0sYltrK2xdWzFdKTt0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srM11bNV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzNdWzZdKSx0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2UgaWYoaD09PWUuUVVBRF9TVFJJUCl7aWYobT4zKWZvcihrPTA7aysxPG07ays9MilpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSxrKzM8bT8odGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYltrKzJdWzBdLGJbaysyXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srMV1bMF0sYltrKzFdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srM11bMF0sYltrKzNdWzFdKSx0aGlzLl9kb0ZpbGwmJnRoaXMuX3BJbnN0LmZpbGwoYltrKzNdWzVdKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbayszXVs2XSkpOih0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pKSx0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2V7Zm9yKHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYlswXVswXSxiWzBdWzFdKSxrPTE7azxtO2srKylpPWJba10saS5pc1ZlcnQmJihpLm1vdmVUbz90aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSkpO3RoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZXtmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSxrPTA7azxtO2srKyliW2tdLmlzVmVydD9iW2tdLm1vdmVUbz90aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhbMF0sYltrXVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrXVswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oYltrXVswXSxiW2tdWzFdLGJba11bMl0sYltrXVszXSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNle2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGs9MDtrPG07aysrKWJba10uaXNWZXJ0P2Jba10ubW92ZVRvP3RoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJba11bMF0sYltrXVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrXVswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LmJlemllckN1cnZlVG8oYltrXVswXSxiW2tdWzFdLGJba11bMl0sYltrXVszXSxiW2tdWzRdLGJba11bNV0pO3RoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZSBpZihtPjMpe3ZhciBuPVtdLG89MS10aGlzLl9jdXJ2ZVRpZ2h0bmVzcztmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiWzFdWzBdLGJbMV1bMV0pLGs9MTtrKzI8bTtrKyspaT1iW2tdLG5bMF09W2lbMF0saVsxXV0sblsxXT1baVswXSsobypiW2srMV1bMF0tbypiW2stMV1bMF0pLzYsaVsxXSsobypiW2srMV1bMV0tbypiW2stMV1bMV0pLzZdLG5bMl09W2JbaysxXVswXSsobypiW2tdWzBdLW8qYltrKzJdWzBdKS82LGJbaysxXVsxXSsobypiW2tdWzFdLW8qYltrKzJdWzFdKS82XSxuWzNdPVtiW2srMV1bMF0sYltrKzFdWzFdXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlemllckN1cnZlVG8oblsxXVswXSxuWzFdWzFdLG5bMl1bMF0sblsyXVsxXSxuWzNdWzBdLG5bM11bMV0pO2omJnRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pLHRoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9cmV0dXJuIGM9ITEsZD0hMSxmPSExLGc9ITEsaiYmYi5wb3AoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5ub1Ntb290aD1mdW5jdGlvbigpe3JldHVyblwiaW1hZ2VTbW9vdGhpbmdFbmFibGVkXCJpbiB0aGlzLmRyYXdpbmdDb250ZXh0JiYodGhpcy5kcmF3aW5nQ29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITEpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuXCJpbWFnZVNtb290aGluZ0VuYWJsZWRcImluIHRoaXMuZHJhd2luZ0NvbnRleHQmJih0aGlzLmRyYXdpbmdDb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zdHJva2VDYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1lLlJPVU5EJiZhIT09ZS5TUVVBUkUmJmEhPT1lLlBST0pFQ1R8fCh0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVDYXA9YSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zdHJva2VKb2luPWZ1bmN0aW9uKGEpe3JldHVybiBhIT09ZS5ST1VORCYmYSE9PWUuQkVWRUwmJmEhPT1lLk1JVEVSfHwodGhpcy5kcmF3aW5nQ29udGV4dC5saW5lSm9pbj1hKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnN0cm9rZVdlaWdodD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lV2lkdGg9dm9pZCAwPT09YXx8MD09PWE/MWUtNDphLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2dldEZpbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FjaGVkRmlsbFN0eWxlfHwodGhpcy5fY2FjaGVkRmlsbFN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFN0eWxlKSx0aGlzLl9jYWNoZWRGaWxsU3R5bGV9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX3NldEZpbGw9ZnVuY3Rpb24oYSl7YSE9PXRoaXMuX2NhY2hlZEZpbGxTdHlsZSYmKHRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFN0eWxlPWEsdGhpcy5fY2FjaGVkRmlsbFN0eWxlPWEpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9nZXRTdHJva2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGV8fCh0aGlzLl9jYWNoZWRTdHJva2VTdHlsZT10aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZVN0eWxlKSx0aGlzLl9jYWNoZWRTdHJva2VTdHlsZX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fc2V0U3Ryb2tlPWZ1bmN0aW9uKGEpe2EhPT10aGlzLl9jYWNoZWRTdHJva2VTdHlsZSYmKHRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlU3R5bGU9YSx0aGlzLl9jYWNoZWRTdHJva2VTdHlsZT1hKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5iZXppZXI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXtyZXR1cm4gdGhpcy5fcEluc3QuYmVnaW5TaGFwZSgpLHRoaXMuX3BJbnN0LnZlcnRleChhLGIpLHRoaXMuX3BJbnN0LmJlemllclZlcnRleChjLGQsZSxmLGcsaCksdGhpcy5fcEluc3QuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmN1cnZlPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCl7cmV0dXJuIHRoaXMuX3BJbnN0LmJlZ2luU2hhcGUoKSx0aGlzLl9wSW5zdC5jdXJ2ZVZlcnRleChhLGIpLHRoaXMuX3BJbnN0LmN1cnZlVmVydGV4KGMsZCksdGhpcy5fcEluc3QuY3VydmVWZXJ0ZXgoZSxmKSx0aGlzLl9wSW5zdC5jdXJ2ZVZlcnRleChnLGgpLHRoaXMuX3BJbnN0LmVuZFNoYXBlKCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fZG9GaWxsU3Ryb2tlQ2xvc2U9ZnVuY3Rpb24oKXt0aGlzLl9kb0ZpbGwmJnRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbCgpLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZSgpLHRoaXMuZHJhd2luZ0NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmRyYXdpbmdDb250ZXh0LnRyYW5zZm9ybShhLGIsYyxkLGUsZil9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucmVzZXRNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRoaXMuZHJhd2luZ0NvbnRleHQuc2NhbGUodGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSx0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5KSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhKXt0aGlzLmRyYXdpbmdDb250ZXh0LnJvdGF0ZShhKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnNjYWxlKGEsYiksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zaGVhclg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNmb3JtKDEsMCxNYXRoLnRhbihhKSwxLDAsMCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zaGVhclk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNmb3JtKDEsTWF0aC50YW4oYSksMCwxLDAsMCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yJiYoYj1hLnksYT1hLngpLHRoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNsYXRlKGEsYiksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGEsYixjLGYsZyl7dmFyIGg7dm9pZCAwIT09ZiYmdm9pZCAwIT09ZyYmdGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QmFzZWxpbmU9PT1lLkJBU0VMSU5FJiYoaD0hMCx0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT1lLlRPUCk7dmFyIGk9ZC5SZW5kZXJlci5wcm90b3R5cGUudGV4dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGgmJih0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT1lLkJBU0VMSU5FKSxpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9yZW5kZXJUZXh0PWZ1bmN0aW9uKGEsYixjLGQsZil7aWYoIShkPj1mKSlyZXR1cm4gYS5wdXNoKCksdGhpcy5faXNPcGVuVHlwZSgpP3RoaXMuX3RleHRGb250Ll9yZW5kZXJQYXRoKGIsYyxkLHtyZW5kZXJlcjp0aGlzfSk6KHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9zdHJva2VTZXQmJnRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlVGV4dChiLGMsZCksdGhpcy5fZG9GaWxsJiYodGhpcy5fZmlsbFNldHx8dGhpcy5fc2V0RmlsbChlLl9ERUZBVUxUX1RFWFRfRklMTCksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsVGV4dChiLGMsZCkpKSxhLnBvcCgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCxhfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRleHRXaWR0aD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5faXNPcGVuVHlwZSgpP3RoaXMuX3RleHRGb250Ll90ZXh0V2lkdGgoYSx0aGlzLl90ZXh0U2l6ZSk6dGhpcy5kcmF3aW5nQ29udGV4dC5tZWFzdXJlVGV4dChhKS53aWR0aH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fYXBwbHlUZXh0UHJvcGVydGllcz1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5fcEluc3Q7cmV0dXJuIHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRBc2NlbnRcIixudWxsKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0RGVzY2VudFwiLG51bGwpLGE9dGhpcy5fdGV4dEZvbnQsdGhpcy5faXNPcGVuVHlwZSgpJiYoYT10aGlzLl90ZXh0Rm9udC5mb250LmZhbWlseU5hbWUsdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dFN0eWxlXCIsdGhpcy5fdGV4dEZvbnQuZm9udC5zdHlsZU5hbWUpKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZvbnQ9KHRoaXMuX3RleHRTdHlsZXx8XCJub3JtYWxcIikrXCIgXCIrKHRoaXMuX3RleHRTaXplfHwxMikrXCJweCBcIisoYXx8XCJzYW5zLXNlcmlmXCIpLHRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEFsaWduPXRoaXMuX3RleHRBbGlnbix0aGlzLl90ZXh0QmFzZWxpbmU9PT1lLkNFTlRFUj90aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT1lLl9DVFhfTUlERExFOnRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPXRoaXMuX3RleHRCYXNlbGluZSxifSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC5zYXZlKCksZC5SZW5kZXJlci5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oYSl7dGhpcy5kcmF3aW5nQ29udGV4dC5yZXN0b3JlKCksdGhpcy5fY2FjaGVkRmlsbFN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFN0eWxlLHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlU3R5bGUsZC5SZW5kZXJlci5wcm90b3R5cGUucG9wLmNhbGwodGhpcyxhKX0sYi5leHBvcnRzPWQuUmVuZGVyZXIyRH0se1wiLi4vaW1hZ2UvZmlsdGVyc1wiOjQyLFwiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0LFwiLi9wNS5SZW5kZXJlclwiOjI3fV0sMjk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpLGU9YShcIi4vY29uc3RhbnRzXCIpO2EoXCIuL3A1LkdyYXBoaWNzXCIpLGEoXCIuL3A1LlJlbmRlcmVyMkRcIiksYShcIi4uL3dlYmdsL3A1LlJlbmRlcmVyR0xcIik7dmFyIGY9XCJkZWZhdWx0Q2FudmFzMFwiLGc9XCJwNUNhbnZhc1wiO2QucHJvdG90eXBlLmNyZWF0ZUNhbnZhcz1mdW5jdGlvbihhLGIsYyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlQ2FudmFzXCIsYXJndW1lbnRzKTt2YXIgaCxpPWN8fGUuUDJEO2lmKGk9PT1lLldFQkdMKXtpZihoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpKXtoLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCk7dmFyIGo9dGhpcy5fcmVuZGVyZXI7dGhpcy5fZWxlbWVudHM9dGhpcy5fZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT09an0pfWg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxoLmlkPWYsaC5jbGFzc0xpc3QuYWRkKGcpfWVsc2UgaWYodGhpcy5fZGVmYXVsdEdyYXBoaWNzQ3JlYXRlZCloPXRoaXMuY2FudmFzO2Vsc2V7aD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Zvcih2YXIgaz0wO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGVmYXVsdENhbnZhc1wiK2spOylrKys7Zj1cImRlZmF1bHRDYW52YXNcIitrLGguaWQ9ZixoLmNsYXNzTGlzdC5hZGQoZyl9cmV0dXJuIHRoaXMuX3NldHVwRG9uZXx8KGguZGF0YXNldC5oaWRkZW49ITAsaC5zdHlsZS52aXNpYmlsaXR5PVwiaGlkZGVuXCIpLHRoaXMuX3VzZXJOb2RlP3RoaXMuX3VzZXJOb2RlLmFwcGVuZENoaWxkKGgpOmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaCksaT09PWUuV0VCR0w/KHRoaXMuX3NldFByb3BlcnR5KFwiX3JlbmRlcmVyXCIsbmV3IGQuUmVuZGVyZXJHTChoLHRoaXMsITApKSx0aGlzLl9lbGVtZW50cy5wdXNoKHRoaXMuX3JlbmRlcmVyKSk6dGhpcy5fZGVmYXVsdEdyYXBoaWNzQ3JlYXRlZHx8KHRoaXMuX3NldFByb3BlcnR5KFwiX3JlbmRlcmVyXCIsbmV3IGQuUmVuZGVyZXIyRChoLHRoaXMsITApKSx0aGlzLl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkPSEwLHRoaXMuX2VsZW1lbnRzLnB1c2godGhpcy5fcmVuZGVyZXIpKSx0aGlzLl9yZW5kZXJlci5yZXNpemUoYSxiKSx0aGlzLl9yZW5kZXJlci5fYXBwbHlEZWZhdWx0cygpLHRoaXMuX3JlbmRlcmVyfSxkLnByb3RvdHlwZS5yZXNpemVDYW52YXM9ZnVuY3Rpb24oYSxiLGMpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlc2l6ZUNhbnZhc1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIpe3ZhciBlPXt9O2Zvcih2YXIgZiBpbiB0aGlzLmRyYXdpbmdDb250ZXh0KXt2YXIgZz10aGlzLmRyYXdpbmdDb250ZXh0W2ZdO1wib2JqZWN0XCIhPXR5cGVvZiBnJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBnJiYoZVtmXT1nKX10aGlzLl9yZW5kZXJlci5yZXNpemUoYSxiKSx0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yjtmb3IodmFyIGggaW4gZSl0cnl7dGhpcy5kcmF3aW5nQ29udGV4dFtoXT1lW2hdfWNhdGNoKGEpe31jfHx0aGlzLnJlZHJhdygpfX0sZC5wcm90b3R5cGUubm9DYW52YXM9ZnVuY3Rpb24oKXt0aGlzLmNhbnZhcyYmdGhpcy5jYW52YXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNhbnZhcyl9LGQucHJvdG90eXBlLmNyZWF0ZUdyYXBoaWNzPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlR3JhcGhpY3NcIixhcmd1bWVudHMpLG5ldyBkLkdyYXBoaWNzKGEsYixjLHRoaXMpfSxkLnByb3RvdHlwZS5ibGVuZE1vZGU9ZnVuY3Rpb24oYSl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmxlbmRNb2RlXCIsYXJndW1lbnRzKSxhIT09ZS5CTEVORCYmYSE9PWUuREFSS0VTVCYmYSE9PWUuTElHSFRFU1QmJmEhPT1lLkRJRkZFUkVOQ0UmJmEhPT1lLk1VTFRJUExZJiZhIT09ZS5FWENMVVNJT04mJmEhPT1lLlNDUkVFTiYmYSE9PWUuUkVQTEFDRSYmYSE9PWUuT1ZFUkxBWSYmYSE9PWUuSEFSRF9MSUdIVCYmYSE9PWUuU09GVF9MSUdIVCYmYSE9PWUuRE9ER0UmJmEhPT1lLkJVUk4mJmEhPT1lLkFERCYmYSE9PWUuTk9STUFMKXRocm93IG5ldyBFcnJvcihcIk1vZGUgXCIrYStcIiBub3QgcmVjb2duaXplZC5cIik7dGhpcy5fcmVuZGVyZXIuYmxlbmRNb2RlKGEpfSxiLmV4cG9ydHM9ZH0se1wiLi4vd2ViZ2wvcDUuUmVuZGVyZXJHTFwiOjc0LFwiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0LFwiLi9wNS5HcmFwaGljc1wiOjI2LFwiLi9wNS5SZW5kZXJlcjJEXCI6Mjh9XSwzMDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9tYWluXCIpLGU9YShcIi4uL2NvbnN0YW50c1wiKSxmPWEoXCIuLi9oZWxwZXJzXCIpO2EoXCIuLi9lcnJvcl9oZWxwZXJzXCIpLGQucHJvdG90eXBlLmFyYz1mdW5jdGlvbihhLGIsYyxnLGgsaSxqLGspe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImFyY1wiLGFyZ3VtZW50cyksIXRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmIXRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpcmV0dXJuIHRoaXM7Zm9yKGg9dGhpcy5fdG9SYWRpYW5zKGgpLGk9dGhpcy5fdG9SYWRpYW5zKGkpO2g8MDspaCs9ZS5UV09fUEk7Zm9yKDtpPDA7KWkrPWUuVFdPX1BJO3ZvaWQgMCE9PWgmJnZvaWQgMCE9PWkmJihpLnRvRml4ZWQoMTApPT09aC50b0ZpeGVkKDEwKXx8TWF0aC5hYnMoaS1oKT09PWUuVFdPX1BJPyhoJT1lLlRXT19QSSxpJT1lLlRXT19QSSxoKz1lLlRXT19QSSk6TWF0aC5hYnMoaS1oKT5lLlRXT19QSSYmKGglPWUuVFdPX1BJLGklPWUuVFdPX1BJLGkrPWUuVFdPX1BJKSksaDw9ZS5IQUxGX1BJP2g9TWF0aC5hdGFuKGMvZypNYXRoLnRhbihoKSk6aD5lLkhBTEZfUEkmJmg8PTMqZS5IQUxGX1BJJiYoaD1NYXRoLmF0YW4oYy9nKk1hdGgudGFuKGgpKStlLlBJKSxpPD1lLkhBTEZfUEk/aT1NYXRoLmF0YW4oYy9nKk1hdGgudGFuKGkpKTppPmUuSEFMRl9QSSYmaTw9MyplLkhBTEZfUEkmJihpPU1hdGguYXRhbihjL2cqTWF0aC50YW4oaSkpK2UuUEkpLGg+aSYmKGkrPWUuVFdPX1BJKSxjPU1hdGguYWJzKGMpLGc9TWF0aC5hYnMoZyk7dmFyIGw9Zi5tb2RlQWRqdXN0KGEsYixjLGcsdGhpcy5fcmVuZGVyZXIuX2VsbGlwc2VNb2RlKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuYXJjKGwueCxsLnksbC53LGwuaCxoLGksaixrKSx0aGlzfSxkLnByb3RvdHlwZS5lbGxpcHNlPWZ1bmN0aW9uKGEsYixjLGUsZyl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZWxsaXBzZVwiLGFyZ3VtZW50cyksIXRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmIXRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpcmV0dXJuIHRoaXM7YzwwJiYoYz1NYXRoLmFicyhjKSksdm9pZCAwPT09ZT9lPWM6ZTwwJiYoZT1NYXRoLmFicyhlKSk7dmFyIGg9Zi5tb2RlQWRqdXN0KGEsYixjLGUsdGhpcy5fcmVuZGVyZXIuX2VsbGlwc2VNb2RlKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZWxsaXBzZShbaC54LGgueSxoLncsaC5oLGddKSx0aGlzfSxkLnByb3RvdHlwZS5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxpbmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmdGhpcy5fcmVuZGVyZXIubGluZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBvaW50XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJnRoaXMuX3JlbmRlcmVyLnBvaW50LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucXVhZD1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJxdWFkXCIsYXJndW1lbnRzKSwodGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlfHx0aGlzLl9yZW5kZXJlci5fZG9GaWxsKSYmdGhpcy5fcmVuZGVyZXIucXVhZC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLnJlY3Q9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyZWN0XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2V8fHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpe2Zvcih2YXIgYT1mLm1vZGVBZGp1c3QoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLHRoaXMuX3JlbmRlcmVyLl9yZWN0TW9kZSksYj1bYS54LGEueSxhLncsYS5oXSxjPTQ7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliW2NdPWFyZ3VtZW50c1tjXTt0aGlzLl9yZW5kZXJlci5yZWN0KGIpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS50cmlhbmdsZT1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0cmlhbmdsZVwiLGFyZ3VtZW50cyksKHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZXx8dGhpcy5fcmVuZGVyZXIuX2RvRmlsbCkmJnRoaXMuX3JlbmRlcmVyLnRyaWFuZ2xlKGFyZ3VtZW50cyksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4uL2NvbnN0YW50c1wiOjE4LFwiLi4vZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vaGVscGVyc1wiOjIxLFwiLi4vbWFpblwiOjI0fV0sMzE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vbWFpblwiKSxlPWEoXCIuLi9jb25zdGFudHNcIik7ZC5wcm90b3R5cGUuZWxsaXBzZU1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImVsbGlwc2VNb2RlXCIsYXJndW1lbnRzKSxhIT09ZS5DT1JORVImJmEhPT1lLkNPUk5FUlMmJmEhPT1lLlJBRElVUyYmYSE9PWUuQ0VOVEVSfHwodGhpcy5fcmVuZGVyZXIuX2VsbGlwc2VNb2RlPWEpLHRoaXN9LGQucHJvdG90eXBlLm5vU21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLm5vU21vb3RoKCksdGhpc30sZC5wcm90b3R5cGUucmVjdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlY3RNb2RlXCIsYXJndW1lbnRzKSxhIT09ZS5DT1JORVImJmEhPT1lLkNPUk5FUlMmJmEhPT1lLlJBRElVUyYmYSE9PWUuQ0VOVEVSfHwodGhpcy5fcmVuZGVyZXIuX3JlY3RNb2RlPWEpLHRoaXN9LGQucHJvdG90eXBlLnNtb290aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5zbW9vdGgoKSx0aGlzfSxkLnByb3RvdHlwZS5zdHJva2VDYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInN0cm9rZUNhcFwiLGFyZ3VtZW50cyksYSE9PWUuUk9VTkQmJmEhPT1lLlNRVUFSRSYmYSE9PWUuUFJPSkVDVHx8dGhpcy5fcmVuZGVyZXIuc3Ryb2tlQ2FwKGEpLHRoaXN9LGQucHJvdG90eXBlLnN0cm9rZUpvaW49ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInN0cm9rZUpvaW5cIixhcmd1bWVudHMpLGEhPT1lLlJPVU5EJiZhIT09ZS5CRVZFTCYmYSE9PWUuTUlURVJ8fHRoaXMuX3JlbmRlcmVyLnN0cm9rZUpvaW4oYSksdGhpc30sZC5wcm90b3R5cGUuc3Ryb2tlV2VpZ2h0PWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzdHJva2VXZWlnaHRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnN0cm9rZVdlaWdodChhKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29uc3RhbnRzXCI6MTgsXCIuLi9tYWluXCI6MjR9XSwzMjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9tYWluXCIpO2EoXCIuLi9lcnJvcl9oZWxwZXJzXCIpLGQucHJvdG90eXBlLmJlemllcj1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZXx8dGhpcy5fcmVuZGVyZXIuX2RvRmlsbD8odGhpcy5fcmVuZGVyZXIuYmV6aWVyLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpcyk6dGhpc30sZC5wcm90b3R5cGUuYmV6aWVyRGV0YWlsPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJEZXRhaWxcIixhcmd1bWVudHMpLHRoaXMuX2JlemllckRldGFpbD1hLHRoaXN9LGQucHJvdG90eXBlLmJlemllclBvaW50PWZ1bmN0aW9uKGEsYixjLGUsZil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmV6aWVyUG9pbnRcIixhcmd1bWVudHMpO3ZhciBnPTEtZjtyZXR1cm4gTWF0aC5wb3coZywzKSphKzMqTWF0aC5wb3coZywyKSpmKmIrMypnKk1hdGgucG93KGYsMikqYytNYXRoLnBvdyhmLDMpKmV9LGQucHJvdG90eXBlLmJlemllclRhbmdlbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJUYW5nZW50XCIsYXJndW1lbnRzKTt2YXIgZz0xLWY7cmV0dXJuIDMqZSpNYXRoLnBvdyhmLDIpLTMqYypNYXRoLnBvdyhmLDIpKzYqYypnKmYtNipiKmcqZiszKmIqTWF0aC5wb3coZywyKS0zKmEqTWF0aC5wb3coZywyKX0sZC5wcm90b3R5cGUuY3VydmU9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmdGhpcy5fcmVuZGVyZXIuY3VydmUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5jdXJ2ZURldGFpbD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVEZXRhaWxcIixhcmd1bWVudHMpLHRoaXMuX2N1cnZlRGV0YWlsPWE8Mz8zOmEsdGhpc30sZC5wcm90b3R5cGUuY3VydmVUaWdodG5lc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlVGlnaHRuZXNzXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fY3VydmVUaWdodG5lc3M9YSx0aGlzfSxkLnByb3RvdHlwZS5jdXJ2ZVBvaW50PWZ1bmN0aW9uKGEsYixjLGUsZil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVQb2ludFwiLGFyZ3VtZW50cyk7dmFyIGc9ZipmKmYsaD1mKmY7cmV0dXJuIGEqKC0uNSpnK2gtLjUqZikrYiooMS41KmctMi41KmgrMSkrYyooLTEuNSpnKzIqaCsuNSpmKStlKiguNSpnLS41KmgpfSxkLnByb3RvdHlwZS5jdXJ2ZVRhbmdlbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVRhbmdlbnRcIixhcmd1bWVudHMpO3ZhciBnPWYqZjtyZXR1cm4gYSooLTMqZy8yKzIqZi0uNSkrYiooOSpnLzItNSpmKStjKigtOSpnLzIrNCpmKy41KStlKigzKmcvMi1mKX0sYi5leHBvcnRzPWR9LHtcIi4uL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL21haW5cIjoyNH1dLDMzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL21haW5cIiksZT1hKFwiLi4vY29uc3RhbnRzXCIpLGY9bnVsbCxnPVtdLGg9W10saT0hMSxqPSExLGs9ITEsbD0hMSxtPSEwO2QucHJvdG90eXBlLmJlZ2luQ29udG91cj1mdW5jdGlvbigpe3JldHVybiBoPVtdLGw9ITAsdGhpc30sZC5wcm90b3R5cGUuYmVnaW5TaGFwZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmVnaW5TaGFwZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0Q/dGhpcy5fcmVuZGVyZXIuYmVnaW5TaGFwZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpOihmPWE9PT1lLlBPSU5UU3x8YT09PWUuTElORVN8fGE9PT1lLlRSSUFOR0xFU3x8YT09PWUuVFJJQU5HTEVfRkFOfHxhPT09ZS5UUklBTkdMRV9TVFJJUHx8YT09PWUuUVVBRFN8fGE9PT1lLlFVQURfU1RSSVA/YTpudWxsLGc9W10saD1bXSksdGhpc30sZC5wcm90b3R5cGUuYmV6aWVyVmVydGV4PWZ1bmN0aW9uKCl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmV6aWVyVmVydGV4XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRCl0aGlzLl9yZW5kZXJlci5iZXppZXJWZXJ0ZXguYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTtlbHNle2lmKDA9PT1nLmxlbmd0aCl0aHJvd1widmVydGV4KCkgbXVzdCBiZSB1c2VkIG9uY2UgYmVmb3JlIGNhbGxpbmcgYmV6aWVyVmVydGV4KClcIjtpPSEwO2Zvcih2YXIgYT1bXSxiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKylhW2JdPWFyZ3VtZW50c1tiXTthLmlzVmVydD0hMSxsP2gucHVzaChhKTpnLnB1c2goYSl9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLmN1cnZlVmVydGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlVmVydGV4XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRD90aGlzLl9yZW5kZXJlci5jdXJ2ZVZlcnRleC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpOihqPSEwLHRoaXMudmVydGV4KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pKSx0aGlzfSxkLnByb3RvdHlwZS5lbmRDb250b3VyPWZ1bmN0aW9uKCl7dmFyIGE9aFswXS5zbGljZSgpO2EuaXNWZXJ0PWhbMF0uaXNWZXJ0LGEubW92ZVRvPSExLGgucHVzaChhKSxtJiYoZy5wdXNoKGdbMF0pLG09ITEpO2Zvcih2YXIgYj0wO2I8aC5sZW5ndGg7YisrKWcucHVzaChoW2JdKTtyZXR1cm4gdGhpc30sZC5wcm90b3R5cGUuZW5kU2hhcGU9ZnVuY3Rpb24oYSl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZW5kU2hhcGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEKXRoaXMuX3JlbmRlcmVyLmVuZFNoYXBlKGEsaixpLGssbCxmKTtlbHNle2lmKDA9PT1nLmxlbmd0aClyZXR1cm4gdGhpcztpZighdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiYhdGhpcy5fcmVuZGVyZXIuX2RvRmlsbClyZXR1cm4gdGhpczt2YXIgYj1hPT09ZS5DTE9TRTtiJiYhbCYmZy5wdXNoKGdbMF0pLHRoaXMuX3JlbmRlcmVyLmVuZFNoYXBlKGEsZyxqLGksayxsLGYpLGo9ITEsaT0hMSxrPSExLGw9ITEsbT0hMCxiJiZnLnBvcCgpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS5xdWFkcmF0aWNWZXJ0ZXg9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJxdWFkcmF0aWNWZXJ0ZXhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEKXRoaXMuX3JlbmRlcmVyLnF1YWRyYXRpY1ZlcnRleC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpO2Vsc2V7aWYodGhpcy5fY29udG91ckluaXRlZCl7dmFyIGE9e307cmV0dXJuIGEueD1hcmd1bWVudHNbMF0sYS55PWFyZ3VtZW50c1sxXSxhLngzPWFyZ3VtZW50c1syXSxhLnkzPWFyZ3VtZW50c1szXSxhLnR5cGU9ZS5RVUFEUkFUSUMsdGhpcy5fY29udG91clZlcnRpY2VzLnB1c2goYSksdGhpc31pZighKGcubGVuZ3RoPjApKXRocm93IG5ldyBFcnJvcihcInZlcnRleCgpIG11c3QgYmUgdXNlZCBvbmNlIGJlZm9yZSBjYWxsaW5nIHF1YWRyYXRpY1ZlcnRleCgpXCIpO2s9ITA7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbY109YXJndW1lbnRzW2NdO2IuaXNWZXJ0PSExLGw/aC5wdXNoKGIpOmcucHVzaChiKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUudmVydGV4PWZ1bmN0aW9uKGEsYixjLGQsZSl7aWYodGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhpcy5fcmVuZGVyZXIudmVydGV4LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk7ZWxzZXt2YXIgZj1bXTtmLmlzVmVydD0hMCxmWzBdPWEsZlsxXT1iLGZbMl09MCxmWzNdPTAsZls0XT0wLGZbNV09dGhpcy5fcmVuZGVyZXIuX2dldEZpbGwoKSxmWzZdPXRoaXMuX3JlbmRlcmVyLl9nZXRTdHJva2UoKSxjJiYoZi5tb3ZlVG89YyksbD8oMD09PWgubGVuZ3RoJiYoZi5tb3ZlVG89ITApLGgucHVzaChmKSk6Zy5wdXNoKGYpfXJldHVybiB0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29uc3RhbnRzXCI6MTgsXCIuLi9tYWluXCI6MjR9XSwzNDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZXx8ZnVuY3Rpb24oYSxiKXt3aW5kb3cuc2V0VGltZW91dChhLDFlMy82MCl9fSgpLGZ1bmN0aW9uKCl7XCJ1bmRlZmluZWRcIj09dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHxVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGUuc2xpY2V8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGUsXCJzbGljZVwiLHt2YWx1ZTpBcnJheS5wcm90b3R5cGUuc2xpY2Usd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITF9KX0oKSxmdW5jdGlvbigpe2lmKCFPYmplY3QuYXNzaWduKXt2YXIgYT1PYmplY3Qua2V5cyxiPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxjPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDAhPT1hJiZudWxsIT09YX0sZD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2woKSxlPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsZj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGUuY2FsbChhLGIpfX0sZz1mdW5jdGlvbihiLGUpe2lmKCFjKGIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7dmFyIGcsaCxpLGosaz1PYmplY3QoYik7Zm9yKGc9MTtnPGFyZ3VtZW50cy5sZW5ndGg7KytnKWZvcihoPU9iamVjdChhcmd1bWVudHNbZ10pLGo9YShoKSxkJiZPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiZqLnB1c2guYXBwbHkoaixPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGgpLmZpbHRlcihmKGgpKSksaT0wO2k8ai5sZW5ndGg7KytpKWtbaltpXV09aFtqW2ldXTtyZXR1cm4ga307YihPYmplY3QsXCJhc3NpZ25cIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMH0pfX0oKX0se31dLDM1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKTtkLnByb3RvdHlwZS5ub0xvb3A9ZnVuY3Rpb24oKXt0aGlzLl9sb29wPSExfSxkLnByb3RvdHlwZS5sb29wPWZ1bmN0aW9uKCl7dGhpcy5fbG9vcD0hMCx0aGlzLl9kcmF3KCl9LGQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXt0aGlzLl9zdHlsZXMucHVzaCh7cHJvcHM6e19jb2xvck1vZGU6dGhpcy5fY29sb3JNb2RlfSxyZW5kZXJlcjp0aGlzLl9yZW5kZXJlci5wdXNoKCl9KX0sZC5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fc3R5bGVzLnBvcCgpO2E/KHRoaXMuX3JlbmRlcmVyLnBvcChhLnJlbmRlcmVyKSxPYmplY3QuYXNzaWduKHRoaXMsYS5wcm9wcykpOmNvbnNvbGUud2FybihcInBvcCgpIHdhcyBjYWxsZWQgd2l0aG91dCBtYXRjaGluZyBwdXNoKClcIil9LGQucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbihhKXt2YXIgYj1wYXJzZUludChhKTsoaXNOYU4oYil8fGI8MSkmJihiPTEpO3ZhciBjPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzLGQ9Yy5zZXR1cCxlPWMuZHJhdztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKXt2b2lkIDA9PT1kJiZjLnNjYWxlKGMuX3BpeGVsRGVuc2l0eSxjLl9waXhlbERlbnNpdHkpO2Zvcih2YXIgZj1mdW5jdGlvbihhKXthLmNhbGwoYyl9LGc9MDtnPGI7ZysrKWMucmVzZXRNYXRyaXgoKSxjLl9yZW5kZXJlci5pc1AzRCYmYy5fcmVuZGVyZXIuX3VwZGF0ZSgpLGMuX3NldFByb3BlcnR5KFwiZnJhbWVDb3VudFwiLGMuZnJhbWVDb3VudCsxKSxjLl9yZWdpc3RlcmVkTWV0aG9kcy5wcmUuZm9yRWFjaChmKSxlKCksYy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5mb3JFYWNoKGYpfX0sYi5leHBvcnRzPWR9LHtcIi4vbWFpblwiOjI0fV0sMzY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2QucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuYXBwbHlNYXRyaXgoYSxiLGMsZCxlLGYpLHRoaXN9LGQucHJvdG90eXBlLnBvcE1hdHJpeD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInBvcE1hdHJpeCgpIG5vdCB1c2VkLCBzZWUgcG9wKClcIil9LGQucHJvdG90eXBlLnByaW50TWF0cml4PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicHJpbnRNYXRyaXgoKSBub3QgaW1wbGVtZW50ZWRcIil9LGQucHJvdG90eXBlLnB1c2hNYXRyaXg9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJwdXNoTWF0cml4KCkgbm90IHVzZWQsIHNlZSBwdXNoKClcIil9LGQucHJvdG90eXBlLnJlc2V0TWF0cml4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLnJlc2V0TWF0cml4KCksdGhpc30sZC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJvdGF0ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIucm90YXRlKHRoaXMuX3RvUmFkaWFucyhhKSxiKSx0aGlzfSxkLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInJvdGF0ZVhcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicm90YXRlWFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIucm90YXRlWCh0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwicm90YXRlWVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyb3RhdGVZXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5yb3RhdGVZKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJyb3RhdGVaXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJvdGF0ZVpcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnJvdGF0ZVoodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihhLGIsYyl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2NhbGVcIixhcmd1bWVudHMpLGEgaW5zdGFuY2VvZiBkLlZlY3Rvcil7dmFyIGU9YTthPWUueCxiPWUueSxjPWUuen1lbHNlIGlmKGEgaW5zdGFuY2VvZiBBcnJheSl7dmFyIGY9YTthPWZbMF0sYj1mWzFdLGM9ZlsyXXx8MX1yZXR1cm4gaXNOYU4oYik/Yj1jPWE6aXNOYU4oYykmJihjPTEpLHRoaXMuX3JlbmRlcmVyLnNjYWxlLmNhbGwodGhpcy5fcmVuZGVyZXIsYSxiLGMpLHRoaXN9LGQucHJvdG90eXBlLnNoZWFyWD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2hlYXJYXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5zaGVhclgodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS5zaGVhclk9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNoZWFyWVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuc2hlYXJZKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidHJhbnNsYXRlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRD90aGlzLl9yZW5kZXJlci50cmFuc2xhdGUoYSxiLGMpOnRoaXMuX3JlbmRlcmVyLnRyYW5zbGF0ZShhLGIpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuL21haW5cIjoyNH1dLDM3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5jcmVhdGVTdHJpbmdEaWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZVN0cmluZ0RpY3RcIixhcmd1bWVudHMpLG5ldyBkLlN0cmluZ0RpY3QoYSxiKX0sZC5wcm90b3R5cGUuY3JlYXRlTnVtYmVyRGljdD1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVOdW1iZXJEaWN0XCIsYXJndW1lbnRzKSxuZXcgZC5OdW1iZXJEaWN0KGEsYil9LGQuVHlwZWREaWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEgaW5zdGFuY2VvZiBPYmplY3Q/dGhpcy5kYXRhPWE6KHRoaXMuZGF0YT17fSx0aGlzLmRhdGFbYV09YiksdGhpc30sZC5UeXBlZERpY3QucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGh9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5oYXNLZXk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtpZih0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSkpcmV0dXJuIHRoaXMuZGF0YVthXTtjb25zb2xlLmxvZyhhK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgRGljdGlvbmFyeVwiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe3RoaXMuX3ZhbGlkYXRlKGIpP3RoaXMuZGF0YVthXT1iOmNvbnNvbGUubG9nKFwiVGhvc2UgdmFsdWVzIGRvbnQgd29yayBmb3IgdGhpcyBkaWN0aW9uYXJ5IHR5cGUuXCIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuX2FkZE9iaj1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSl0aGlzLnNldChiLGFbYl0pfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKGEsYil7YSBpbnN0YW5jZW9mIE9iamVjdCYmdm9pZCAwPT09Yj90aGlzLl9hZGRPYmooYSk6dm9pZCAwIT09YT90aGlzLnNldChhLGIpOmNvbnNvbGUubG9nKFwiSW4gb3JkZXIgdG8gY3JlYXRlIGEgbmV3IERpY3Rpb25hcnkgZW50cnkgeW91IG11c3QgcGFzcyBhbiBvYmplY3Qgb3IgYSBrZXksIHZhbHVlIHBhaXJcIil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZGF0YT17fX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhKXtpZighdGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpKXRocm93IG5ldyBFcnJvcihhK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgRGljdGlvbmFyeVwiKTtkZWxldGUgdGhpcy5kYXRhW2FdfSxkLlR5cGVkRGljdC5wcm90b3R5cGUucHJpbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gdGhpcy5kYXRhKWNvbnNvbGUubG9nKFwia2V5OlwiK2ErXCIgdmFsdWU6XCIrdGhpcy5kYXRhW2FdKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnNhdmVUYWJsZT1mdW5jdGlvbihhKXt2YXIgYj1cIlwiO2Zvcih2YXIgYyBpbiB0aGlzLmRhdGEpYis9YytcIixcIit0aGlzLmRhdGFbY10rXCJcXG5cIjt2YXIgZT1uZXcgQmxvYihbYl0se3R5cGU6XCJ0ZXh0L2NzdlwifSk7ZC5wcm90b3R5cGUuZG93bmxvYWRGaWxlKGUsYXx8XCJteWNzdlwiLFwiY3N2XCIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2F2ZUpTT049ZnVuY3Rpb24oYSxiKXtkLnByb3RvdHlwZS5zYXZlSlNPTih0aGlzLmRhdGEsYSxiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihhKXtyZXR1cm4hMH0sZC5TdHJpbmdEaWN0PWZ1bmN0aW9uKCl7ZC5UeXBlZERpY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkLlN0cmluZ0RpY3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5UeXBlZERpY3QucHJvdG90eXBlKSxkLlN0cmluZ0RpY3QucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYX0sZC5OdW1iZXJEaWN0PWZ1bmN0aW9uKCl7ZC5UeXBlZERpY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkLk51bWJlckRpY3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5UeXBlZERpY3QucHJvdG90eXBlKSxkLk51bWJlckRpY3QucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSk/dGhpcy5kYXRhW2FdKz1iOmNvbnNvbGUubG9nKFwiVGhlIGtleSAtIFwiK2ErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkaWN0aW9uYXJ5LlwiKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYSxiKXt0aGlzLmFkZChhLC1iKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5tdWx0PWZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpP3RoaXMuZGF0YVthXSo9Yjpjb25zb2xlLmxvZyhcIlRoZSBrZXkgLSBcIithK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGljdGlvbmFyeS5cIil9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpP3RoaXMuZGF0YVthXS89Yjpjb25zb2xlLmxvZyhcIlRoZSBrZXkgLSBcIithK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGljdGlvbmFyeS5cIil9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuX3ZhbHVlVGVzdD1mdW5jdGlvbihhKXtpZigwPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHNlYXJjaCBmb3IgYSBtaW5pbXVtIG9yIG1heGltdW0gdmFsdWUgb24gYW4gZW1wdHkgTnVtYmVyRGljdFwiKTtpZigxPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpcmV0dXJuIHRoaXMuZGF0YVtPYmplY3Qua2V5cyh0aGlzLmRhdGEpWzBdXTt2YXIgYj10aGlzLmRhdGFbT2JqZWN0LmtleXModGhpcy5kYXRhKVswXV07Zm9yKHZhciBjIGluIHRoaXMuZGF0YSl0aGlzLmRhdGFbY10qYTxiKmEmJihiPXRoaXMuZGF0YVtjXSk7cmV0dXJuIGJ9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWluVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWVUZXN0KDEpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLm1heFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlVGVzdCgtMSl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuX2tleVRlc3Q9ZnVuY3Rpb24oYSl7aWYoMD09PU9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byB1c2UgbWluVmFsdWUgb24gYW4gZW1wdHkgTnVtYmVyRGljdFwiKTtpZigxPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGF0YSlbMF07Zm9yKHZhciBiPU9iamVjdC5rZXlzKHRoaXMuZGF0YSlbMF0sYz0xO2M8T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGg7YysrKU9iamVjdC5rZXlzKHRoaXMuZGF0YSlbY10qYTxiKmEmJihiPU9iamVjdC5rZXlzKHRoaXMuZGF0YSlbY10pO3JldHVybiBifSxkLk51bWJlckRpY3QucHJvdG90eXBlLm1pbktleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rZXlUZXN0KDEpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLm1heEtleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rZXlUZXN0KC0xKX0sYi5leHBvcnRzPWQuVHlwZWREaWN0fSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDM4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5kZXZpY2VPcmllbnRhdGlvbj12b2lkIDAsZC5wcm90b3R5cGUuYWNjZWxlcmF0aW9uWD0wLGQucHJvdG90eXBlLmFjY2VsZXJhdGlvblk9MCxkLnByb3RvdHlwZS5hY2NlbGVyYXRpb25aPTAsZC5wcm90b3R5cGUucEFjY2VsZXJhdGlvblg9MCxkLnByb3RvdHlwZS5wQWNjZWxlcmF0aW9uWT0wLGQucHJvdG90eXBlLnBBY2NlbGVyYXRpb25aPTAsZC5wcm90b3R5cGUuX3VwZGF0ZVBBY2NlbGVyYXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJwQWNjZWxlcmF0aW9uWFwiLHRoaXMuYWNjZWxlcmF0aW9uWCksdGhpcy5fc2V0UHJvcGVydHkoXCJwQWNjZWxlcmF0aW9uWVwiLHRoaXMuYWNjZWxlcmF0aW9uWSksdGhpcy5fc2V0UHJvcGVydHkoXCJwQWNjZWxlcmF0aW9uWlwiLHRoaXMuYWNjZWxlcmF0aW9uWil9LGQucHJvdG90eXBlLnJvdGF0aW9uWD0wLGQucHJvdG90eXBlLnJvdGF0aW9uWT0wLGQucHJvdG90eXBlLnJvdGF0aW9uWj0wLGQucHJvdG90eXBlLnBSb3RhdGlvblg9MCxkLnByb3RvdHlwZS5wUm90YXRpb25ZPTAsZC5wcm90b3R5cGUucFJvdGF0aW9uWj0wO3ZhciBlLGYsZyxoPTAsaT0wLGo9MCxrPVwiY2xvY2t3aXNlXCIsbD1cImNsb2Nrd2lzZVwiLG09XCJjbG9ja3dpc2VcIjtkLnByb3RvdHlwZS5fdXBkYXRlUFJvdGF0aW9ucz1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwicFJvdGF0aW9uWFwiLHRoaXMucm90YXRpb25YKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBSb3RhdGlvbllcIix0aGlzLnJvdGF0aW9uWSksdGhpcy5fc2V0UHJvcGVydHkoXCJwUm90YXRpb25aXCIsdGhpcy5yb3RhdGlvblopfSxkLnByb3RvdHlwZS50dXJuQXhpcz12b2lkIDA7dmFyIG49LjUsbz0zMDtkLnByb3RvdHlwZS5zZXRNb3ZlVGhyZXNob2xkPWZ1bmN0aW9uKGEpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNldE1vdmVUaHJlc2hvbGRcIixhcmd1bWVudHMpLG49YX0sZC5wcm90b3R5cGUuc2V0U2hha2VUaHJlc2hvbGQ9ZnVuY3Rpb24oYSl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2V0U2hha2VUaHJlc2hvbGRcIixhcmd1bWVudHMpLG89YX0sZC5wcm90b3R5cGUuX29uZGV2aWNlb3JpZW50YXRpb249ZnVuY3Rpb24oYSl7dGhpcy5fdXBkYXRlUFJvdGF0aW9ucygpLHRoaXMuX3NldFByb3BlcnR5KFwicm90YXRpb25YXCIsYS5iZXRhKSx0aGlzLl9zZXRQcm9wZXJ0eShcInJvdGF0aW9uWVwiLGEuZ2FtbWEpLHRoaXMuX3NldFByb3BlcnR5KFwicm90YXRpb25aXCIsYS5hbHBoYSksdGhpcy5faGFuZGxlTW90aW9uKCl9LGQucHJvdG90eXBlLl9vbmRldmljZW1vdGlvbj1mdW5jdGlvbihhKXt0aGlzLl91cGRhdGVQQWNjZWxlcmF0aW9ucygpLHRoaXMuX3NldFByb3BlcnR5KFwiYWNjZWxlcmF0aW9uWFwiLDIqYS5hY2NlbGVyYXRpb24ueCksdGhpcy5fc2V0UHJvcGVydHkoXCJhY2NlbGVyYXRpb25ZXCIsMiphLmFjY2VsZXJhdGlvbi55KSx0aGlzLl9zZXRQcm9wZXJ0eShcImFjY2VsZXJhdGlvblpcIiwyKmEuYWNjZWxlcmF0aW9uLnopLHRoaXMuX2hhbmRsZU1vdGlvbigpfSxkLnByb3RvdHlwZS5faGFuZGxlTW90aW9uPWZ1bmN0aW9uKCl7OTA9PT13aW5kb3cub3JpZW50YXRpb258fC05MD09PXdpbmRvdy5vcmllbnRhdGlvbj90aGlzLl9zZXRQcm9wZXJ0eShcImRldmljZU9yaWVudGF0aW9uXCIsXCJsYW5kc2NhcGVcIik6MD09PXdpbmRvdy5vcmllbnRhdGlvbj90aGlzLl9zZXRQcm9wZXJ0eShcImRldmljZU9yaWVudGF0aW9uXCIsXCJwb3J0cmFpdFwiKTp2b2lkIDA9PT13aW5kb3cub3JpZW50YXRpb24mJnRoaXMuX3NldFByb3BlcnR5KFwiZGV2aWNlT3JpZW50YXRpb25cIixcInVuZGVmaW5lZFwiKTt2YXIgYT10aGlzLmRldmljZU1vdmVkfHx3aW5kb3cuZGV2aWNlTW92ZWQ7XCJmdW5jdGlvblwiPT10eXBlb2YgYSYmKE1hdGguYWJzKHRoaXMuYWNjZWxlcmF0aW9uWC10aGlzLnBBY2NlbGVyYXRpb25YKT5ufHxNYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblktdGhpcy5wQWNjZWxlcmF0aW9uWSk+bnx8TWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25aLXRoaXMucEFjY2VsZXJhdGlvblopPm4pJiZhKCk7dmFyIGI9dGhpcy5kZXZpY2VUdXJuZWR8fHdpbmRvdy5kZXZpY2VUdXJuZWQ7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYil7dmFyIGM9dGhpcy5yb3RhdGlvblgrMTgwLGQ9dGhpcy5wUm90YXRpb25YKzE4MCxwPWgrMTgwO2MtZD4wJiZjLWQ8MjcwfHxjLWQ8LTI3MD9rPVwiY2xvY2t3aXNlXCI6KGMtZDwwfHxjLWQ+MjcwKSYmKGs9XCJjb3VudGVyLWNsb2Nrd2lzZVwiKSxrIT09ZSYmKHA9YyksTWF0aC5hYnMoYy1wKT45MCYmTWF0aC5hYnMoYy1wKTwyNzAmJihwPWMsdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLFwiWFwiKSxiKCkpLGU9ayxoPXAtMTgwO3ZhciBxPXRoaXMucm90YXRpb25ZKzE4MCxyPXRoaXMucFJvdGF0aW9uWSsxODAscz1pKzE4MDtxLXI+MCYmcS1yPDI3MHx8cS1yPC0yNzA/bD1cImNsb2Nrd2lzZVwiOihxLXI8MHx8cS10aGlzLnBSb3RhdGlvblk+MjcwKSYmKGw9XCJjb3VudGVyLWNsb2Nrd2lzZVwiKSxsIT09ZiYmKHM9cSksTWF0aC5hYnMocS1zKT45MCYmTWF0aC5hYnMocS1zKTwyNzAmJihzPXEsdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLFwiWVwiKSxiKCkpLGY9bCxpPXMtMTgwLHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWj4wJiZ0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo8MjcwfHx0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo8LTI3MD9tPVwiY2xvY2t3aXNlXCI6KHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWjwwfHx0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo+MjcwKSYmKG09XCJjb3VudGVyLWNsb2Nrd2lzZVwiKSxtIT09ZyYmKGo9dGhpcy5yb3RhdGlvblopLE1hdGguYWJzKHRoaXMucm90YXRpb25aLWopPjkwJiZNYXRoLmFicyh0aGlzLnJvdGF0aW9uWi1qKTwyNzAmJihqPXRoaXMucm90YXRpb25aLHRoaXMuX3NldFByb3BlcnR5KFwidHVybkF4aXNcIixcIlpcIiksYigpKSxnPW0sdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLHZvaWQgMCl9dmFyIHQ9dGhpcy5kZXZpY2VTaGFrZW58fHdpbmRvdy5kZXZpY2VTaGFrZW47aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl7dmFyIHUsdjtudWxsIT09dGhpcy5wQWNjZWxlcmF0aW9uWCYmKHU9TWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25YLXRoaXMucEFjY2VsZXJhdGlvblgpLHY9TWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25ZLXRoaXMucEFjY2VsZXJhdGlvblkpKSx1K3Y+byYmdCgpfX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMzk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKCl7Zm9yKHZhciBhIGluIGYpaWYoZi5oYXNPd25Qcm9wZXJ0eShhKSYmITA9PT1mW2FdKXJldHVybiEwO3JldHVybiExfXZhciBlPWEoXCIuLi9jb3JlL21haW5cIiksZj17fTtlLnByb3RvdHlwZS5pc0tleVByZXNzZWQ9ITEsZS5wcm90b3R5cGUua2V5SXNQcmVzc2VkPSExLGUucHJvdG90eXBlLmtleT1cIlwiLGUucHJvdG90eXBlLmtleUNvZGU9MCxlLnByb3RvdHlwZS5fb25rZXlkb3duPWZ1bmN0aW9uKGEpe2lmKCFmW2Eud2hpY2hdKXt0aGlzLl9zZXRQcm9wZXJ0eShcImlzS2V5UHJlc3NlZFwiLCEwKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleUlzUHJlc3NlZFwiLCEwKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleUNvZGVcIixhLndoaWNoKSxmW2Eud2hpY2hdPSEwLHRoaXMuX3NldFByb3BlcnR5KFwia2V5XCIsYS5rZXl8fFN0cmluZy5mcm9tQ2hhckNvZGUoYS53aGljaCl8fGEud2hpY2gpO3ZhciBiPXRoaXMua2V5UHJlc3NlZHx8d2luZG93LmtleVByZXNzZWQ7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYiYmIWEuY2hhckNvZGUpeyExPT09YihhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX19LGUucHJvdG90eXBlLl9vbmtleXVwPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMua2V5UmVsZWFzZWR8fHdpbmRvdy5rZXlSZWxlYXNlZDtpZihmW2Eud2hpY2hdPSExLGQoKXx8KHRoaXMuX3NldFByb3BlcnR5KFwiaXNLZXlQcmVzc2VkXCIsITEpLHRoaXMuX3NldFByb3BlcnR5KFwia2V5SXNQcmVzc2VkXCIsITEpKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9sYXN0S2V5Q29kZVR5cGVkXCIsbnVsbCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlcIixhLmtleXx8U3RyaW5nLmZyb21DaGFyQ29kZShhLndoaWNoKXx8YS53aGljaCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlDb2RlXCIsYS53aGljaCksXCJmdW5jdGlvblwiPT10eXBlb2YgYil7ITE9PT1iKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fSxlLnByb3RvdHlwZS5fb25rZXlwcmVzcz1mdW5jdGlvbihhKXtpZihhLndoaWNoIT09dGhpcy5fbGFzdEtleUNvZGVUeXBlZCl7dGhpcy5fc2V0UHJvcGVydHkoXCJrZXlDb2RlXCIsYS53aGljaCksdGhpcy5fc2V0UHJvcGVydHkoXCJfbGFzdEtleUNvZGVUeXBlZFwiLGEud2hpY2gpLHRoaXMuX3NldFByb3BlcnR5KFwia2V5XCIsU3RyaW5nLmZyb21DaGFyQ29kZShhLndoaWNoKSk7dmFyIGI9dGhpcy5rZXlUeXBlZHx8d2luZG93LmtleVR5cGVkO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGIpeyExPT09YihhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX19LGUucHJvdG90eXBlLl9vbmJsdXI9ZnVuY3Rpb24oYSl7Zj17fX0sZS5wcm90b3R5cGUua2V5SXNEb3duPWZ1bmN0aW9uKGEpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJrZXlJc0Rvd25cIixhcmd1bWVudHMpLGZbYV19LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyxkKXtkJiYhZC5jbGllbnRYJiYoZC50b3VjaGVzP2Q9ZC50b3VjaGVzWzBdOmQuY2hhbmdlZFRvdWNoZXMmJihkPWQuY2hhbmdlZFRvdWNoZXNbMF0pKTt2YXIgZT1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9YS5zY3JvbGxXaWR0aC9iLGc9YS5zY3JvbGxIZWlnaHQvYztyZXR1cm57eDooZC5jbGllbnRYLWUubGVmdCkvZix5OihkLmNsaWVudFktZS50b3ApL2csd2luWDpkLmNsaWVudFgsd2luWTpkLmNsaWVudFksaWQ6ZC5pZGVudGlmaWVyfX12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpLGY9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2UucHJvdG90eXBlLl9oYXNNb3VzZUludGVyYWN0ZWQ9ITEsZS5wcm90b3R5cGUubW91c2VYPTAsZS5wcm90b3R5cGUubW91c2VZPTAsZS5wcm90b3R5cGUucG1vdXNlWD0wLGUucHJvdG90eXBlLnBtb3VzZVk9MCxlLnByb3RvdHlwZS53aW5Nb3VzZVg9MCxlLnByb3RvdHlwZS53aW5Nb3VzZVk9MCxlLnByb3RvdHlwZS5wd2luTW91c2VYPTAsZS5wcm90b3R5cGUucHdpbk1vdXNlWT0wLGUucHJvdG90eXBlLm1vdXNlQnV0dG9uPTAsZS5wcm90b3R5cGUubW91c2VJc1ByZXNzZWQ9ITEsZS5wcm90b3R5cGUuX3VwZGF0ZU5leHRNb3VzZUNvb3Jkcz1mdW5jdGlvbihhKXtpZihudWxsIT09dGhpcy5fY3VyRWxlbWVudCYmKCFhLnRvdWNoZXN8fGEudG91Y2hlcy5sZW5ndGg+MCkpe3ZhciBiPWQodGhpcy5fY3VyRWxlbWVudC5lbHQsdGhpcy53aWR0aCx0aGlzLmhlaWdodCxhKTt0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlWFwiLGIueCksdGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZVlcIixiLnkpLHRoaXMuX3NldFByb3BlcnR5KFwid2luTW91c2VYXCIsYi53aW5YKSx0aGlzLl9zZXRQcm9wZXJ0eShcIndpbk1vdXNlWVwiLGIud2luWSl9dGhpcy5faGFzTW91c2VJbnRlcmFjdGVkfHwodGhpcy5fdXBkYXRlTW91c2VDb29yZHMoKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9oYXNNb3VzZUludGVyYWN0ZWRcIiwhMCkpfSxlLnByb3RvdHlwZS5fdXBkYXRlTW91c2VDb29yZHM9ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcInBtb3VzZVhcIix0aGlzLm1vdXNlWCksdGhpcy5fc2V0UHJvcGVydHkoXCJwbW91c2VZXCIsdGhpcy5tb3VzZVkpLHRoaXMuX3NldFByb3BlcnR5KFwicHdpbk1vdXNlWFwiLHRoaXMud2luTW91c2VYKSx0aGlzLl9zZXRQcm9wZXJ0eShcInB3aW5Nb3VzZVlcIix0aGlzLndpbk1vdXNlWSksdGhpcy5fc2V0UHJvcGVydHkoXCJfcG1vdXNlV2hlZWxEZWx0YVlcIix0aGlzLl9tb3VzZVdoZWVsRGVsdGFZKX0sZS5wcm90b3R5cGUuX3NldE1vdXNlQnV0dG9uPWZ1bmN0aW9uKGEpezE9PT1hLmJ1dHRvbj90aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlQnV0dG9uXCIsZi5DRU5URVIpOjI9PT1hLmJ1dHRvbj90aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlQnV0dG9uXCIsZi5SSUdIVCk6dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUJ1dHRvblwiLGYuTEVGVCl9LGUucHJvdG90eXBlLl9vbm1vdXNlbW92ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczt0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksdGhpcy5tb3VzZUlzUHJlc3NlZD9cImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlRHJhZ2dlZD8hMT09PWIubW91c2VEcmFnZ2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaE1vdmVkJiYhMT09PWIudG91Y2hNb3ZlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VNb3ZlZCYmITE9PT1iLm1vdXNlTW92ZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29ubW91c2Vkb3duPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMCksdGhpcy5fc2V0TW91c2VCdXR0b24oYSksdGhpcy5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzKGEpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VQcmVzc2VkPyExPT09Yi5tb3VzZVByZXNzZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoU3RhcnRlZCYmITE9PT1iLnRvdWNoU3RhcnRlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb25tb3VzZXVwPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMSksXG5cImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlUmVsZWFzZWQ/ITE9PT1iLm1vdXNlUmVsZWFzZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoRW5kZWQmJiExPT09Yi50b3VjaEVuZGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbmRyYWdlbmQ9ZS5wcm90b3R5cGUuX29ubW91c2V1cCxlLnByb3RvdHlwZS5fb25kcmFnb3Zlcj1lLnByb3RvdHlwZS5fb25tb3VzZW1vdmUsZS5wcm90b3R5cGUuX29uY2xpY2s9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZUNsaWNrZWQpeyExPT09Yi5tb3VzZUNsaWNrZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGUucHJvdG90eXBlLl9vbmRibGNsaWNrPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGIuZG91YmxlQ2xpY2tlZCl7ITE9PT1iLmRvdWJsZUNsaWNrZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGUucHJvdG90eXBlLl9tb3VzZVdoZWVsRGVsdGFZPTAsZS5wcm90b3R5cGUuX3Btb3VzZVdoZWVsRGVsdGFZPTAsZS5wcm90b3R5cGUuX29ud2hlZWw9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYodGhpcy5fc2V0UHJvcGVydHkoXCJfbW91c2VXaGVlbERlbHRhWVwiLGEuZGVsdGFZKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlV2hlZWwpe2EuZGVsdGE9YS5kZWx0YVk7ITE9PT1iLm1vdXNlV2hlZWwoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw0MTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMsZCxlKXtlPWV8fDA7dmFyIGY9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPWEuc2Nyb2xsV2lkdGgvYixoPWEuc2Nyb2xsSGVpZ2h0L2MsaT1kLnRvdWNoZXNbZV18fGQuY2hhbmdlZFRvdWNoZXNbZV07cmV0dXJue3g6KGkuY2xpZW50WC1mLmxlZnQpL2cseTooaS5jbGllbnRZLWYudG9wKS9oLHdpblg6aS5jbGllbnRYLHdpblk6aS5jbGllbnRZLGlkOmkuaWRlbnRpZmllcn19dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKTtlLnByb3RvdHlwZS50b3VjaGVzPVtdLGUucHJvdG90eXBlLl91cGRhdGVUb3VjaENvb3Jkcz1mdW5jdGlvbihhKXtpZihudWxsIT09dGhpcy5fY3VyRWxlbWVudCl7Zm9yKHZhciBiPVtdLGM9MDtjPGEudG91Y2hlcy5sZW5ndGg7YysrKWJbY109ZCh0aGlzLl9jdXJFbGVtZW50LmVsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LGEsYyk7dGhpcy5fc2V0UHJvcGVydHkoXCJ0b3VjaGVzXCIsYil9fSxlLnByb3RvdHlwZS5fb250b3VjaHN0YXJ0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMCksdGhpcy5fdXBkYXRlVG91Y2hDb29yZHMoYSksdGhpcy5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzKGEpLHRoaXMuX3VwZGF0ZU1vdXNlQ29vcmRzKCksXCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaFN0YXJ0ZWQ/ITE9PT1iLnRvdWNoU3RhcnRlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VQcmVzc2VkJiYhMT09PWIubW91c2VQcmVzc2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbnRvdWNobW92ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczt0aGlzLl91cGRhdGVUb3VjaENvb3JkcyhhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksXCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaE1vdmVkPyExPT09Yi50b3VjaE1vdmVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZURyYWdnZWQmJiExPT09Yi5tb3VzZURyYWdnZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29udG91Y2hlbmQ9ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCExKSx0aGlzLl91cGRhdGVUb3VjaENvb3JkcyhhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSk7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7XCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaEVuZGVkPyExPT09Yi50b3VjaEVuZGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVJlbGVhc2VkJiYhMT09PWIubW91c2VSZWxlYXNlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw0MjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSl7dmFyIGI9My41KmF8MDtpZihiPWI8MT8xOmI8MjQ4P2I6MjQ4LGchPT1iKXtnPWIsaD0xK2c8PDEsaT1uZXcgSW50MzJBcnJheShoKSxqPW5ldyBBcnJheShoKTtmb3IodmFyIGM9MDtjPGg7YysrKWpbY109bmV3IEludDMyQXJyYXkoMjU2KTtmb3IodmFyIGQsZSxmLGssbD0xLG09Yi0xO2w8YjtsKyspe2lbYitsXT1pW21dPWU9bSptLGY9altiK2xdLGs9alttLS1dO2Zvcih2YXIgbj0wO248MjU2O24rKylmW25dPWtbbl09ZSpufWQ9aVtiXT1iKmIsZj1qW2JdO2Zvcih2YXIgbz0wO288MjU2O28rKylmW29dPWQqb319ZnVuY3Rpb24gZShhLGIpe2Zvcih2YXIgYz1mLl90b1BpeGVscyhhKSxlPWEud2lkdGgsaz1hLmhlaWdodCxsPWUqayxtPW5ldyBJbnQzMkFycmF5KGwpLG49MDtuPGw7bisrKW1bbl09Zi5fZ2V0QVJHQihjLG4pO3ZhciBvLHAscSxyLHMsdCx1LHYsdyx4LHk9bmV3IEludDMyQXJyYXkobCksej1uZXcgSW50MzJBcnJheShsKSxBPW5ldyBJbnQzMkFycmF5KGwpLEI9bmV3IEludDMyQXJyYXkobCksQz0wO2QoYik7dmFyIEQsRSxGLEc7Zm9yKEU9MDtFPGs7RSsrKXtmb3IoRD0wO0Q8ZTtEKyspe2lmKHI9cT1wPXM9bz0wLCh0PUQtZyk8MCl4PS10LHQ9MDtlbHNle2lmKHQ+PWUpYnJlYWs7eD0wfWZvcihGPXg7RjxoJiYhKHQ+PWUpO0YrKyl7dmFyIEg9bVt0K0NdO0c9altGXSxzKz1HWygtMTY3NzcyMTYmSCk+Pj4yNF0scCs9R1soMTY3MTE2ODAmSCk+PjE2XSxxKz1HWyg2NTI4MCZIKT4+OF0scis9R1syNTUmSF0sbys9aVtGXSx0Kyt9dT1DK0QseVt1XT1zL28selt1XT1wL28sQVt1XT1xL28sQlt1XT1yL299Qys9ZX1mb3IoQz0wLHY9LWcsdz12KmUsRT0wO0U8aztFKyspe2ZvcihEPTA7RDxlO0QrKyl7aWYocj1xPXA9cz1vPTAsdjwwKXg9dT0tdix0PUQ7ZWxzZXtpZih2Pj1rKWJyZWFrO3g9MCx1PXYsdD1EK3d9Zm9yKEY9eDtGPGgmJiEodT49ayk7RisrKUc9altGXSxzKz1HW3lbdF1dLHArPUdbelt0XV0scSs9R1tBW3RdXSxyKz1HW0JbdF1dLG8rPWlbRl0sdSsrLHQrPWU7bVtEK0NdPXMvbzw8MjR8cC9vPDwxNnxxL288PDh8ci9vfUMrPWUsdys9ZSx2Kyt9Zi5fc2V0UGl4ZWxzKGMsbSl9dmFyIGY9e307Zi5fdG9QaXhlbHM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBJbWFnZURhdGE/YS5kYXRhOmEuZ2V0Q29udGV4dChcIjJkXCIpLmdldEltYWdlRGF0YSgwLDAsYS53aWR0aCxhLmhlaWdodCkuZGF0YX0sZi5fZ2V0QVJHQj1mdW5jdGlvbihhLGIpe3ZhciBjPTQqYjtyZXR1cm4gYVtjKzNdPDwyNCY0Mjc4MTkwMDgwfGFbY108PDE2JjE2NzExNjgwfGFbYysxXTw8OCY2NTI4MHwyNTUmYVtjKzJdfSxmLl9zZXRQaXhlbHM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MCxkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKWM9NCpkLGFbYyswXT0oMTY3MTE2ODAmYltkXSk+Pj4xNixhW2MrMV09KDY1MjgwJmJbZF0pPj4+OCxhW2MrMl09MjU1JmJbZF0sYVtjKzNdPSg0Mjc4MTkwMDgwJmJbZF0pPj4+MjR9LGYuX3RvSW1hZ2VEYXRhPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgSW1hZ2VEYXRhP2E6YS5nZXRDb250ZXh0KFwiMmRcIikuZ2V0SW1hZ2VEYXRhKDAsMCxhLndpZHRoLGEuaGVpZ2h0KX0sZi5fY3JlYXRlSW1hZ2VEYXRhPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGYuX3RtcENhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGYuX3RtcEN0eD1mLl90bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLHRoaXMuX3RtcEN0eC5jcmVhdGVJbWFnZURhdGEoYSxiKX0sZi5hcHBseT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRDb250ZXh0KFwiMmRcIiksZT1kLmdldEltYWdlRGF0YSgwLDAsYS53aWR0aCxhLmhlaWdodCksZj1iKGUsYyk7ZiBpbnN0YW5jZW9mIEltYWdlRGF0YT9kLnB1dEltYWdlRGF0YShmLDAsMCwwLDAsYS53aWR0aCxhLmhlaWdodCk6ZC5wdXRJbWFnZURhdGEoZSwwLDAsMCwwLGEud2lkdGgsYS5oZWlnaHQpfSxmLnRocmVzaG9sZD1mdW5jdGlvbihhLGIpe3ZhciBjPWYuX3RvUGl4ZWxzKGEpO3ZvaWQgMD09PWImJihiPS41KTtmb3IodmFyIGQ9TWF0aC5mbG9vcigyNTUqYiksZT0wO2U8Yy5sZW5ndGg7ZSs9NCl7dmFyIGcsaD1jW2VdLGk9Y1tlKzFdLGo9Y1tlKzJdLGs9LjIxMjYqaCsuNzE1MippKy4wNzIyKmo7Zz1rPj1kPzI1NTowLGNbZV09Y1tlKzFdPWNbZSsyXT1nfX0sZi5ncmF5PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1mLl90b1BpeGVscyhhKSxjPTA7YzxiLmxlbmd0aDtjKz00KXt2YXIgZD1iW2NdLGU9YltjKzFdLGc9YltjKzJdLGg9LjIxMjYqZCsuNzE1MiplKy4wNzIyKmc7YltjXT1iW2MrMV09YltjKzJdPWh9fSxmLm9wYXF1ZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9Zi5fdG9QaXhlbHMoYSksYz0wO2M8Yi5sZW5ndGg7Yys9NCliW2MrM109MjU1O3JldHVybiBifSxmLmludmVydD1mdW5jdGlvbihhKXtmb3IodmFyIGI9Zi5fdG9QaXhlbHMoYSksYz0wO2M8Yi5sZW5ndGg7Yys9NCliW2NdPTI1NS1iW2NdLGJbYysxXT0yNTUtYltjKzFdLGJbYysyXT0yNTUtYltjKzJdfSxmLnBvc3Rlcml6ZT1mdW5jdGlvbihhLGIpe3ZhciBjPWYuX3RvUGl4ZWxzKGEpO2lmKGI8Mnx8Yj4yNTUpdGhyb3cgbmV3IEVycm9yKFwiTGV2ZWwgbXVzdCBiZSBncmVhdGVyIHRoYW4gMiBhbmQgbGVzcyB0aGFuIDI1NSBmb3IgcG9zdGVyaXplXCIpO2Zvcih2YXIgZD1iLTEsZT0wO2U8Yy5sZW5ndGg7ZSs9NCl7dmFyIGc9Y1tlXSxoPWNbZSsxXSxpPWNbZSsyXTtjW2VdPTI1NSooZypiPj44KS9kLGNbZSsxXT0yNTUqKGgqYj4+OCkvZCxjW2UrMl09MjU1KihpKmI+PjgpL2R9fSxmLmRpbGF0ZT1mdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0PWYuX3RvUGl4ZWxzKGEpLHU9MCx2PXQubGVuZ3RoP3QubGVuZ3RoLzQ6MCx3PW5ldyBJbnQzMkFycmF5KHYpO3U8djspZm9yKGI9dSxjPXUrYS53aWR0aDt1PGM7KWQ9ZT1mLl9nZXRBUkdCKHQsdSksaT11LTEsaD11KzEsaj11LWEud2lkdGgsaz11K2Eud2lkdGgsaTxiJiYoaT11KSxoPj1jJiYoaD11KSxqPDAmJihqPTApLGs+PXYmJihrPXUpLG49Zi5fZ2V0QVJHQih0LGopLG09Zi5fZ2V0QVJHQih0LGkpLG89Zi5fZ2V0QVJHQih0LGspLGw9Zi5fZ2V0QVJHQih0LGgpLGc9NzcqKGQ+PjE2JjI1NSkrMTUxKihkPj44JjI1NSkrMjgqKDI1NSZkKSxxPTc3KihtPj4xNiYyNTUpKzE1MSoobT4+OCYyNTUpKzI4KigyNTUmbSkscD03NyoobD4+MTYmMjU1KSsxNTEqKGw+PjgmMjU1KSsyOCooMjU1JmwpLHI9NzcqKG4+PjE2JjI1NSkrMTUxKihuPj44JjI1NSkrMjgqKDI1NSZuKSxzPTc3KihvPj4xNiYyNTUpKzE1MSoobz4+OCYyNTUpKzI4KigyNTUmbykscT5nJiYoZT1tLGc9cSkscD5nJiYoZT1sLGc9cCkscj5nJiYoZT1uLGc9cikscz5nJiYoZT1vLGc9cyksd1t1KytdPWU7Zi5fc2V0UGl4ZWxzKHQsdyl9LGYuZXJvZGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZCxlLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdD1mLl90b1BpeGVscyhhKSx1PTAsdj10Lmxlbmd0aD90Lmxlbmd0aC80OjAsdz1uZXcgSW50MzJBcnJheSh2KTt1PHY7KWZvcihiPXUsYz11K2Eud2lkdGg7dTxjOylkPWU9Zi5fZ2V0QVJHQih0LHUpLGk9dS0xLGg9dSsxLGo9dS1hLndpZHRoLGs9dSthLndpZHRoLGk8YiYmKGk9dSksaD49YyYmKGg9dSksajwwJiYoaj0wKSxrPj12JiYoaz11KSxuPWYuX2dldEFSR0IodCxqKSxtPWYuX2dldEFSR0IodCxpKSxvPWYuX2dldEFSR0IodCxrKSxsPWYuX2dldEFSR0IodCxoKSxnPTc3KihkPj4xNiYyNTUpKzE1MSooZD4+OCYyNTUpKzI4KigyNTUmZCkscT03NyoobT4+MTYmMjU1KSsxNTEqKG0+PjgmMjU1KSsyOCooMjU1Jm0pLHA9NzcqKGw+PjE2JjI1NSkrMTUxKihsPj44JjI1NSkrMjgqKDI1NSZsKSxyPTc3KihuPj4xNiYyNTUpKzE1MSoobj4+OCYyNTUpKzI4KigyNTUmbikscz03Nyoobz4+MTYmMjU1KSsxNTEqKG8+PjgmMjU1KSsyOCooMjU1Jm8pLHE8ZyYmKGU9bSxnPXEpLHA8ZyYmKGU9bCxnPXApLHI8ZyYmKGU9bixnPXIpLHM8ZyYmKGU9byxnPXMpLHdbdSsrXT1lO2YuX3NldFBpeGVscyh0LHcpfTt2YXIgZyxoLGksajtmLmJsdXI9ZnVuY3Rpb24oYSxiKXtlKGEsYil9LGIuZXhwb3J0cz1mfSx7fV0sNDM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9W107ZC5wcm90b3R5cGUuY3JlYXRlSW1hZ2U9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlSW1hZ2VcIixhcmd1bWVudHMpLG5ldyBkLkltYWdlKGEsYil9LGQucHJvdG90eXBlLnNhdmVDYW52YXM9ZnVuY3Rpb24oKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlQ2FudmFzXCIsYXJndW1lbnRzKTt2YXIgYSxiLGMsZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7YXJndW1lbnRzWzBdaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudD8oYT1hcmd1bWVudHNbMF0sZS5zaGlmdCgpKTphcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQuRWxlbWVudD8oYT1hcmd1bWVudHNbMF0uZWx0LGUuc2hpZnQoKSk6YT10aGlzLl9jdXJFbGVtZW50JiZ0aGlzLl9jdXJFbGVtZW50LmVsdCxlLmxlbmd0aD49MSYmKGI9ZVswXSksZS5sZW5ndGg+PTImJihjPWVbMV0pLGM9Y3x8ZC5wcm90b3R5cGUuX2NoZWNrRmlsZUV4dGVuc2lvbihiLGMpWzFdfHxcInBuZ1wiO3ZhciBmO3N3aXRjaChjKXtkZWZhdWx0OmY9XCJpbWFnZS9wbmdcIjticmVhaztjYXNlXCJqcGVnXCI6Y2FzZVwianBnXCI6Zj1cImltYWdlL2pwZWdcIn1hLnRvQmxvYihmdW5jdGlvbihhKXtkLnByb3RvdHlwZS5kb3dubG9hZEZpbGUoYSxiLGMpfSxmKX0sZC5wcm90b3R5cGUuc2F2ZUZyYW1lcz1mdW5jdGlvbihhLGIsYyxmLGcpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVGcmFtZXNcIixhcmd1bWVudHMpO3ZhciBoPWN8fDM7aD1kLnByb3RvdHlwZS5jb25zdHJhaW4oaCwwLDE1KSxoKj0xZTM7dmFyIGk9Znx8MTU7aT1kLnByb3RvdHlwZS5jb25zdHJhaW4oaSwwLDIyKTt2YXIgaj0wLGs9ZC5wcm90b3R5cGUuX21ha2VGcmFtZSxsPXRoaXMuX2N1ckVsZW1lbnQuZWx0LG09c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtrKGEraixiLGwpLGorK30sMWUzL2kpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihjbGVhckludGVydmFsKG0pLGcpZyhlKTtlbHNlIGZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgYj1lW2FdO2QucHJvdG90eXBlLmRvd25sb2FkRmlsZShiLmltYWdlRGF0YSxiLmZpbGVuYW1lLGIuZXh0KX1lPVtdfSxoKy4wMSl9LGQucHJvdG90eXBlLl9tYWtlRnJhbWU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2Q9dGhpcz90aGlzLl9jdXJFbGVtZW50LmVsdDpjO3ZhciBmO2lmKGIpc3dpdGNoKGIudG9Mb3dlckNhc2UoKSl7Y2FzZVwicG5nXCI6Zj1cImltYWdlL3BuZ1wiO2JyZWFrO2Nhc2VcImpwZWdcIjpjYXNlXCJqcGdcIjpmPVwiaW1hZ2UvanBlZ1wiO2JyZWFrO2RlZmF1bHQ6Zj1cImltYWdlL3BuZ1wifWVsc2UgYj1cInBuZ1wiLGY9XCJpbWFnZS9wbmdcIjt2YXIgZz1kLnRvRGF0YVVSTChmKTtnPWcucmVwbGFjZShmLFwiaW1hZ2Uvb2N0ZXQtc3RyZWFtXCIpO3ZhciBoPXt9O2guaW1hZ2VEYXRhPWcsaC5maWxlbmFtZT1hLGguZXh0PWIsZS5wdXNoKGgpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw0NDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiKXtyZXR1cm4gYT4wJiZhPGI/YTpifXZhciBlPWEoXCIuLi9jb3JlL21haW5cIiksZj1hKFwiLi9maWx0ZXJzXCIpLGc9YShcIi4uL2NvcmUvaGVscGVyc1wiKSxoPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGUucHJvdG90eXBlLmxvYWRJbWFnZT1mdW5jdGlvbihhLGIsYyl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZEltYWdlXCIsYXJndW1lbnRzKTt2YXIgZD1uZXcgSW1hZ2UsZj1uZXcgZS5JbWFnZSgxLDEsdGhpcyksZz10aGlzO3JldHVybiBkLm9ubG9hZD1mdW5jdGlvbigpe2Yud2lkdGg9Zi5jYW52YXMud2lkdGg9ZC53aWR0aCxmLmhlaWdodD1mLmNhbnZhcy5oZWlnaHQ9ZC5oZWlnaHQsZi5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoZCwwLDApLGYubW9kaWZpZWQ9ITAsXCJmdW5jdGlvblwiPT10eXBlb2YgYiYmYihmKSxnLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGQub25lcnJvcj1mdW5jdGlvbihhKXtlLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoMCxkLnNyYyksXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmYyhhKX0sMCE9PWEuaW5kZXhPZihcImRhdGE6aW1hZ2UvXCIpJiYoZC5jcm9zc09yaWdpbj1cIkFub255bW91c1wiKSxkLnNyYz1hLGZ9LGUucHJvdG90eXBlLmltYWdlPWZ1bmN0aW9uKGEsYixjLGYsaCxpLGosayxsKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJpbWFnZVwiLGFyZ3VtZW50cyk7dmFyIG09YS53aWR0aCxuPWEuaGVpZ2h0O2EuZWx0JiZhLmVsdC52aWRlb1dpZHRoJiYhYS5jYW52YXMmJihtPWEuZWx0LnZpZGVvV2lkdGgsbj1hLmVsdC52aWRlb0hlaWdodCk7dmFyIG89YixwPWMscT1mfHxtLHI9aHx8bixzPWl8fDAsdD1qfHwwLHU9a3x8bSx2PWx8fG47dT1kKHUsbSksdj1kKHYsbik7dmFyIHc9MTthLmVsdCYmIWEuY2FudmFzJiZhLmVsdC5zdHlsZS53aWR0aCYmKHc9YS5lbHQudmlkZW9XaWR0aCYmIWY/YS5lbHQudmlkZW9XaWR0aDphLmVsdC53aWR0aCx3Lz1wYXJzZUludChhLmVsdC5zdHlsZS53aWR0aCwxMCkpLHMqPXcsdCo9dyx2Kj13LHUqPXc7dmFyIHg9Zy5tb2RlQWRqdXN0KG8scCxxLHIsdGhpcy5fcmVuZGVyZXIuX2ltYWdlTW9kZSk7dGhpcy5fcmVuZGVyZXIuaW1hZ2UoYSxzLHQsdSx2LHgueCx4LnkseC53LHguaCl9LGUucHJvdG90eXBlLnRpbnQ9ZnVuY3Rpb24oKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0aW50XCIsYXJndW1lbnRzKTt2YXIgYT10aGlzLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9yZW5kZXJlci5fdGludD1hLmxldmVsc30sZS5wcm90b3R5cGUubm9UaW50PWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3RpbnQ9bnVsbH0sZS5wcm90b3R5cGUuX2dldFRpbnRlZEltYWdlQ2FudmFzPWZ1bmN0aW9uKGEpe2lmKCFhLmNhbnZhcylyZXR1cm4gYTt2YXIgYj1mLl90b1BpeGVscyhhLmNhbnZhcyksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Mud2lkdGg9YS5jYW52YXMud2lkdGgsYy5oZWlnaHQ9YS5jYW52YXMuaGVpZ2h0O2Zvcih2YXIgZD1jLmdldENvbnRleHQoXCIyZFwiKSxlPWQuY3JlYXRlSW1hZ2VEYXRhKGEuY2FudmFzLndpZHRoLGEuY2FudmFzLmhlaWdodCksZz1lLmRhdGEsaD0wO2g8Yi5sZW5ndGg7aCs9NCl7dmFyIGk9YltoXSxqPWJbaCsxXSxrPWJbaCsyXSxsPWJbaCszXTtnW2hdPWkqdGhpcy5fcmVuZGVyZXIuX3RpbnRbMF0vMjU1LGdbaCsxXT1qKnRoaXMuX3JlbmRlcmVyLl90aW50WzFdLzI1NSxnW2grMl09ayp0aGlzLl9yZW5kZXJlci5fdGludFsyXS8yNTUsZ1toKzNdPWwqdGhpcy5fcmVuZGVyZXIuX3RpbnRbM10vMjU1fXJldHVybiBkLnB1dEltYWdlRGF0YShlLDAsMCksY30sZS5wcm90b3R5cGUuaW1hZ2VNb2RlPWZ1bmN0aW9uKGEpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImltYWdlTW9kZVwiLGFyZ3VtZW50cyksYSE9PWguQ09STkVSJiZhIT09aC5DT1JORVJTJiZhIT09aC5DRU5URVJ8fCh0aGlzLl9yZW5kZXJlci5faW1hZ2VNb2RlPWEpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9oZWxwZXJzXCI6MjEsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vZmlsdGVyc1wiOjQyfV0sNDU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4vZmlsdGVyc1wiKTtkLkltYWdlPWZ1bmN0aW9uKGEsYil7dGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSx0aGlzLmNhbnZhcy53aWR0aD10aGlzLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodD10aGlzLmhlaWdodCx0aGlzLmRyYXdpbmdDb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKSx0aGlzLl9waXhlbERlbnNpdHk9MSx0aGlzLl9tb2RpZmllZD0hMSx0aGlzLl9waXhlbHNEaXJ0eT0hMCx0aGlzLnBpeGVscz1bXX0sZC5JbWFnZS5wcm90b3R5cGUuX3NldFByb3BlcnR5PWZ1bmN0aW9uKGEsYil7dGhpc1thXT1iLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5sb2FkUGl4ZWxzPWZ1bmN0aW9uKCl7ZC5SZW5kZXJlcjJELnByb3RvdHlwZS5sb2FkUGl4ZWxzLmNhbGwodGhpcyksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLnVwZGF0ZVBpeGVscz1mdW5jdGlvbihhLGIsYyxlKXtkLlJlbmRlcmVyMkQucHJvdG90eXBlLnVwZGF0ZVBpeGVscy5jYWxsKHRoaXMsYSxiLGMsZSksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gZC5SZW5kZXJlcjJELnByb3RvdHlwZS5nZXQuY2FsbCh0aGlzLGEsYixjLGUpfSxkLkltYWdlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe2QuUmVuZGVyZXIyRC5wcm90b3R5cGUuc2V0LmNhbGwodGhpcyxhLGIsYyksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihhLGIpezA9PT1hJiYwPT09Yj8oYT10aGlzLmNhbnZhcy53aWR0aCxiPXRoaXMuY2FudmFzLmhlaWdodCk6MD09PWE/YT10aGlzLmNhbnZhcy53aWR0aCpiL3RoaXMuY2FudmFzLmhlaWdodDowPT09YiYmKGI9dGhpcy5jYW52YXMuaGVpZ2h0KmEvdGhpcy5jYW52YXMud2lkdGgpLGE9TWF0aC5mbG9vcihhKSxiPU1hdGguZmxvb3IoYik7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtjLndpZHRoPWEsYy5oZWlnaHQ9YixjLmdldENvbnRleHQoXCIyZFwiKS5kcmF3SW1hZ2UodGhpcy5jYW52YXMsMCwwLHRoaXMuY2FudmFzLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodCwwLDAsYy53aWR0aCxjLmhlaWdodCksdGhpcy5jYW52YXMud2lkdGg9dGhpcy53aWR0aD1hLHRoaXMuY2FudmFzLmhlaWdodD10aGlzLmhlaWdodD1iLHRoaXMuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGMsMCwwLGEsYiwwLDAsYSxiKSx0aGlzLnBpeGVscy5sZW5ndGg+MCYmdGhpcy5sb2FkUGl4ZWxzKCksdGhpcy5zZXRNb2RpZmllZCghMCksdGhpcy5fcGl4ZWxzRGlydHk9ITB9LGQuSW1hZ2UucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZSxmLGcsaCxpLGo7aWYoOT09PWFyZ3VtZW50cy5sZW5ndGgpYT1hcmd1bWVudHNbMF0sYj1hcmd1bWVudHNbMV0sYz1hcmd1bWVudHNbMl0sZT1hcmd1bWVudHNbM10sZj1hcmd1bWVudHNbNF0sZz1hcmd1bWVudHNbNV0saD1hcmd1bWVudHNbNl0saT1hcmd1bWVudHNbN10saj1hcmd1bWVudHNbOF07ZWxzZXtpZig4IT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJTaWduYXR1cmUgbm90IHN1cHBvcnRlZFwiKTthPXRoaXMsYj1hcmd1bWVudHNbMF0sYz1hcmd1bWVudHNbMV0sZT1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10sZz1hcmd1bWVudHNbNF0saD1hcmd1bWVudHNbNV0saT1hcmd1bWVudHNbNl0saj1hcmd1bWVudHNbN119ZC5SZW5kZXJlcjJELl9jb3B5SGVscGVyKHRoaXMsYSxiLGMsZSxmLGcsaCxpLGopLHRoaXMuX3BpeGVsc0RpcnR5PSEwfSxkLkltYWdlLnByb3RvdHlwZS5tYXNrPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMpO3ZhciBiPXRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uLGM9MTthIGluc3RhbmNlb2YgZC5SZW5kZXJlciYmKGM9YS5fcEluc3QuX3BpeGVsRGVuc2l0eSk7dmFyIGU9W2EsMCwwLGMqYS53aWR0aCxjKmEuaGVpZ2h0LDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0XTt0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1cImRlc3RpbmF0aW9uLWluXCIsZC5JbWFnZS5wcm90b3R5cGUuY29weS5hcHBseSh0aGlzLGUpLHRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWIsdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbihhLGIpe2UuYXBwbHkodGhpcy5jYW52YXMsZVthLnRvTG93ZXJDYXNlKCldLGIpLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5ibGVuZD1mdW5jdGlvbigpe2QucHJvdG90eXBlLmJsZW5kLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUuc2V0TW9kaWZpZWQ9ZnVuY3Rpb24oYSl7dGhpcy5fbW9kaWZpZWQ9YX0sZC5JbWFnZS5wcm90b3R5cGUuaXNNb2RpZmllZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb2RpZmllZH0sZC5JbWFnZS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbihhLGIpe2QucHJvdG90eXBlLnNhdmVDYW52YXModGhpcy5jYW52YXMsYSxiKX0sYi5leHBvcnRzPWQuSW1hZ2V9LHtcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9maWx0ZXJzXCI6NDJ9XSw0NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi9maWx0ZXJzXCIpO2EoXCIuLi9jb2xvci9wNS5Db2xvclwiKSxkLnByb3RvdHlwZS5waXhlbHM9W10sZC5wcm90b3R5cGUuYmxlbmQ9ZnVuY3Rpb24oKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJibGVuZFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXI/dGhpcy5fcmVuZGVyZXIuYmxlbmQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTpkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJsZW5kLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvcHlcIixhcmd1bWVudHMpLGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY29weS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24oYSxiKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJmaWx0ZXJcIixhcmd1bWVudHMpLHZvaWQgMCE9PXRoaXMuY2FudmFzP2UuYXBwbHkodGhpcy5jYW52YXMsZVthLnRvTG93ZXJDYXNlKCldLGIpOmUuYXBwbHkodGhpcy5lbHQsZVthLnRvTG93ZXJDYXNlKCldLGIpfSxkLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmdldChhLGIsYyxkKX0sZC5wcm90b3R5cGUubG9hZFBpeGVscz1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRQaXhlbHNcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmxvYWRQaXhlbHMoKX0sZC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLl9yZW5kZXJlci5zZXQoYSxiLGMpfSxkLnByb3RvdHlwZS51cGRhdGVQaXhlbHM9ZnVuY3Rpb24oYSxiLGMsZSl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidXBkYXRlUGl4ZWxzXCIsYXJndW1lbnRzKSwwIT09dGhpcy5waXhlbHMubGVuZ3RoJiZ0aGlzLl9yZW5kZXJlci51cGRhdGVQaXhlbHMoYSxiLGMsZSl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb2xvci9wNS5Db2xvclwiOjE2LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL2ZpbHRlcnNcIjo0Mn1dLDQ3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3ZhciBjPXt9O2lmKHZvaWQgMD09PShiPWJ8fFtdKSlmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliW2QudG9TdHJpbmcoKV09ZDtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKyl7dmFyIGY9YltlXSxnPWFbZV07Y1tmXT1nfXJldHVybiBjfWZ1bmN0aW9uIGUoYSl7dmFyIGI9bmV3IGkuWE1MLGM9YS5jaGlsZE5vZGVzO2lmKGMmJmMubGVuZ3RoKXtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGY9ZShjW2RdKTtiLmFkZENoaWxkKGYpfWIuc2V0TmFtZShhLm5vZGVOYW1lKSxiLl9zZXRDb250KGEudGV4dENvbnRlbnQpLGIuX3NldEF0dHJpYnV0ZXMoYSk7Zm9yKHZhciBnPTA7ZzxiLmNoaWxkcmVuLmxlbmd0aDtnKyspYi5jaGlsZHJlbltnXS5wYXJlbnQ9YjtyZXR1cm4gYn1yZXR1cm4gYi5zZXROYW1lKGEubm9kZU5hbWUpLGIuX3NldENvbnQoYS50ZXh0Q29udGVudCksYi5fc2V0QXR0cmlidXRlcyhhKSxifWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEucmVwbGFjZSgvJi9nLFwiJmFtcDtcIikucmVwbGFjZSgvPC9nLFwiJmx0O1wiKS5yZXBsYWNlKC8+L2csXCImZ3Q7XCIpLnJlcGxhY2UoL1wiL2csXCImcXVvdDtcIikucmVwbGFjZSgvJy9nLFwiJiMwMzk7XCIpfWZ1bmN0aW9uIGcoYSxiKXtiJiYhMCE9PWImJlwidHJ1ZVwiIT09Ynx8KGI9XCJcIiksYXx8KGE9XCJ1bnRpdGxlZFwiKTt2YXIgYz1cIlwiO3JldHVybiBhJiZhLmluZGV4T2YoXCIuXCIpPi0xJiYoYz1hLnNwbGl0KFwiLlwiKS5wb3AoKSksYiYmYyE9PWImJihjPWIsYT1hK1wiLlwiK2MpLFthLGNdfWZ1bmN0aW9uIGgoYSl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhLnRhcmdldCl9dmFyIGk9YShcIi4uL2NvcmUvbWFpblwiKTthKFwid2hhdHdnLWZldGNoXCIpLGEoXCJlczYtcHJvbWlzZVwiKS5wb2x5ZmlsbCgpO3ZhciBqPWEoXCJmZXRjaC1qc29ucFwiKTthKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGkucHJvdG90eXBlLmxvYWRKU09OPWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZEpTT05cIixhcmd1bWVudHMpO2Zvcih2YXIgYSxiLGMsZD1hcmd1bWVudHNbMF0sZT17fSxmPVwianNvblwiLGc9MTtnPGFyZ3VtZW50cy5sZW5ndGg7ZysrKXt2YXIgaD1hcmd1bWVudHNbZ107XCJzdHJpbmdcIj09dHlwZW9mIGg/XCJqc29ucFwiIT09aCYmXCJqc29uXCIhPT1ofHwoZj1oKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBoP2E/Yj1oOmE9aDpcIm9iamVjdFwiPT10eXBlb2YgaCYmaC5oYXNPd25Qcm9wZXJ0eShcImpzb25wQ2FsbGJhY2tcIikmJihmPVwianNvbnBcIixjPWgpfXZhciBqPXRoaXM7cmV0dXJuIHRoaXMuaHR0cERvKGQsXCJHRVRcIixjLGYsZnVuY3Rpb24oYil7Zm9yKHZhciBjIGluIGIpZVtjXT1iW2NdO3ZvaWQgMCE9PWEmJmEoYiksai5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihhKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoNSxkKSwhYil0aHJvdyBhO2IoYSl9KSxlfSxpLnByb3RvdHlwZS5sb2FkU3RyaW5ncz1mdW5jdGlvbigpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRTdHJpbmdzXCIsYXJndW1lbnRzKTtmb3IodmFyIGEsYixjPVtdLGQ9MTtkPGFyZ3VtZW50cy5sZW5ndGg7ZCsrKXt2YXIgZT1hcmd1bWVudHNbZF07XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKHZvaWQgMD09PWE/YT1lOnZvaWQgMD09PWImJihiPWUpKX12YXIgZj10aGlzO3JldHVybiBpLnByb3RvdHlwZS5odHRwRG8uY2FsbCh0aGlzLGFyZ3VtZW50c1swXSxcIkdFVFwiLFwidGV4dFwiLGZ1bmN0aW9uKGIpe3ZhciBkPWIucmVwbGFjZSgvXFxyXFxuL2csXCJcXHJcIikucmVwbGFjZSgvXFxuL2csXCJcXHJcIikuc3BsaXQoL1xcci8pO0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGMsZCksdm9pZCAwIT09YSYmYShjKSxmLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGEpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcigzLGFyZ3VtZW50c1swXSksIWIpdGhyb3cgYTtiKGEpfSksY30saS5wcm90b3R5cGUubG9hZFRhYmxlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZT1bXSxmPSExLGc9YS5zdWJzdHJpbmcoYS5sYXN0SW5kZXhPZihcIi5cIikrMSxhLmxlbmd0aCksaD1cIixcIixqPSExO1widHN2XCI9PT1nJiYoaD1cIlxcdFwiKTtmb3IodmFyIGs9MTtrPGFyZ3VtZW50cy5sZW5ndGg7aysrKWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGFyZ3VtZW50c1trXSl2b2lkIDA9PT1iP2I9YXJndW1lbnRzW2tdOnZvaWQgMD09PWMmJihjPWFyZ3VtZW50c1trXSk7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYXJndW1lbnRzW2tdKWlmKGUucHVzaChhcmd1bWVudHNba10pLFwiaGVhZGVyXCI9PT1hcmd1bWVudHNba10mJihmPSEwKSxcImNzdlwiPT09YXJndW1lbnRzW2tdKXtpZihqKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzZXQgbXVsdGlwbGUgc2VwYXJhdG9yIHR5cGVzLlwiKTtoPVwiLFwiLGo9ITB9ZWxzZSBpZihcInRzdlwiPT09YXJndW1lbnRzW2tdKXtpZihqKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzZXQgbXVsdGlwbGUgc2VwYXJhdG9yIHR5cGVzLlwiKTtoPVwiXFx0XCIsaj0hMH12YXIgbD1uZXcgaS5UYWJsZSxtPXRoaXM7cmV0dXJuIHRoaXMuaHR0cERvKGEsXCJHRVRcIixcInRhYmxlXCIsZnVuY3Rpb24oYSl7Zm9yKHZhciBjLGU9e30sZz0wLGo9MSxuPTIsbz00LHA9J1wiJyxxPVwiXFxyXCIscj1cIlxcblwiLHM9W10sdD0wLHU9bnVsbCx2PWZ1bmN0aW9uKCl7ZS5jdXJyZW50U3RhdGU9ZyxlLnRva2VuPVwiXCJ9LHc9ZnVuY3Rpb24oKXt1LnB1c2goZS50b2tlbiksdigpfSx4PWZ1bmN0aW9uKCl7ZS5lc2NhcGVkPSExLHU9W10sdigpfSx5PWZ1bmN0aW9uKCl7ZS5jdXJyZW50U3RhdGU9byxzLnB1c2godSksdT1udWxsfTs7KXtpZihudWxsPT0oYz1hW3QrK10pKXtpZihlLmVzY2FwZWQpdGhyb3cgbmV3IEVycm9yKFwiVW5jbG9zZWQgcXVvdGUgaW4gZmlsZS5cIik7aWYodSl7dygpLHkoKTticmVha319aWYobnVsbD09PXUmJngoKSxlLmN1cnJlbnRTdGF0ZT09PWcpe2lmKGM9PT1wKXtlLmVzY2FwZWQ9ITAsZS5jdXJyZW50U3RhdGU9ajtjb250aW51ZX1lLmN1cnJlbnRTdGF0ZT1qfWlmKGUuY3VycmVudFN0YXRlPT09aiYmZS5lc2NhcGVkKWlmKGM9PT1wKWFbdF09PT1wPyhlLnRva2VuKz1wLHQrKyk6KGUuZXNjYXBlZD0hMSxlLmN1cnJlbnRTdGF0ZT1uKTtlbHNle2lmKGM9PT1xKWNvbnRpbnVlO2UudG9rZW4rPWN9ZWxzZSBjPT09cT8oYVt0XT09PXImJnQrKyx3KCkseSgpKTpjPT09cj8odygpLHkoKSk6Yz09PWg/dygpOmUuY3VycmVudFN0YXRlPT09aiYmKGUudG9rZW4rPWMpfWlmKGYpbC5jb2x1bW5zPXMuc2hpZnQoKTtlbHNlIGZvcihrPTA7azxzWzBdLmxlbmd0aDtrKyspbC5jb2x1bW5zW2tdPVwibnVsbFwiO3ZhciB6O2ZvcihrPTA7azxzLmxlbmd0aDtrKyspKDEhPT1zW2tdLmxlbmd0aHx8XCJ1bmRlZmluZWRcIiE9PXNba11bMF0mJlwiXCIhPT1zW2tdWzBdKSYmKHo9bmV3IGkuVGFibGVSb3csei5hcnI9c1trXSx6Lm9iaj1kKHNba10sbC5jb2x1bW5zKSxsLmFkZFJvdyh6KSk7XCJmdW5jdGlvblwiPT10eXBlb2YgYiYmYihsKSxtLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGIpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcigyLGEpLCFjKXRocm93IGI7YyhiKX0pLGx9LGkucHJvdG90eXBlLmxvYWRYTUw9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYixjPXt9LGQ9MTtkPGFyZ3VtZW50cy5sZW5ndGg7ZCsrKXt2YXIgZT1hcmd1bWVudHNbZF07XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKHZvaWQgMD09PWE/YT1lOnZvaWQgMD09PWImJihiPWUpKX12YXIgZj10aGlzO3JldHVybiB0aGlzLmh0dHBEbyhhcmd1bWVudHNbMF0sXCJHRVRcIixcInhtbFwiLGZ1bmN0aW9uKGIpe2Zvcih2YXIgZCBpbiBiKWNbZF09YltkXTt2b2lkIDAhPT1hJiZhKGMpLGYuX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYSl7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDEsYXJndW1lbnRzWzBdKSwhYil0aHJvdyBhO2IoYSl9KSxjfSxpLnByb3RvdHlwZS5sb2FkQnl0ZXM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9LGU9dGhpcztyZXR1cm4gdGhpcy5odHRwRG8oYSxcIkdFVFwiLFwiYXJyYXlCdWZmZXJcIixmdW5jdGlvbihhKXtkLmJ5dGVzPW5ldyBVaW50OEFycmF5KGEpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGImJmIoZCksZS5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihiKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoNixhKSwhYyl0aHJvdyBiO2MoYil9KSxkfSxpLnByb3RvdHlwZS5odHRwR2V0PWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaHR0cEdldFwiLGFyZ3VtZW50cyk7dmFyIGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gYS5zcGxpY2UoMSwwLFwiR0VUXCIpLGkucHJvdG90eXBlLmh0dHBEby5hcHBseSh0aGlzLGEpfSxpLnByb3RvdHlwZS5odHRwUG9zdD1mdW5jdGlvbigpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImh0dHBQb3N0XCIsYXJndW1lbnRzKTt2YXIgYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBhLnNwbGljZSgxLDAsXCJQT1NUXCIpLGkucHJvdG90eXBlLmh0dHBEby5hcHBseSh0aGlzLGEpfSxpLnByb3RvdHlwZS5odHRwRG89ZnVuY3Rpb24oKXtmb3IodmFyIGEsYixjLGQsZixnPXt9LGg9MCxrPVwidGV4dC9wbGFpblwiLGw9YXJndW1lbnRzLmxlbmd0aC0xO2w+MCYmXCJmdW5jdGlvblwiPT10eXBlb2YgYXJndW1lbnRzW2xdO2wtLSloKys7dmFyIG09YXJndW1lbnRzLmxlbmd0aC1oLG49YXJndW1lbnRzWzBdO2lmKDI9PT1tJiZcInN0cmluZ1wiPT10eXBlb2YgbiYmXCJvYmplY3RcIj09dHlwZW9mIGFyZ3VtZW50c1sxXSlkPW5ldyBSZXF1ZXN0KG4sYXJndW1lbnRzWzFdKSxiPWFyZ3VtZW50c1syXSxjPWFyZ3VtZW50c1szXTtlbHNle2Zvcih2YXIgbyxwPVwiR0VUXCIscT0xO3E8YXJndW1lbnRzLmxlbmd0aDtxKyspe3ZhciByPWFyZ3VtZW50c1txXTtpZihcInN0cmluZ1wiPT10eXBlb2YgcilcIkdFVFwiPT09cnx8XCJQT1NUXCI9PT1yfHxcIlBVVFwiPT09cnx8XCJERUxFVEVcIj09PXI/cD1yOlwianNvblwiPT09cnx8XCJqc29ucFwiPT09cnx8XCJiaW5hcnlcIj09PXJ8fFwiYXJyYXlCdWZmZXJcIj09PXJ8fFwieG1sXCI9PT1yfHxcInRleHRcIj09PXJ8fFwidGFibGVcIj09PXI/YT1yOm89cjtlbHNlIGlmKFwibnVtYmVyXCI9PXR5cGVvZiByKW89ci50b1N0cmluZygpO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIHIpaWYoci5oYXNPd25Qcm9wZXJ0eShcImpzb25wQ2FsbGJhY2tcIikpZm9yKHZhciBzIGluIHIpZ1tzXT1yW3NdO2Vsc2Ugbz1KU09OLnN0cmluZ2lmeShyKSxrPVwiYXBwbGljYXRpb24vanNvblwiO2Vsc2VcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiYoYj9jPXI6Yj1yKX1kPW5ldyBSZXF1ZXN0KG4se21ldGhvZDpwLG1vZGU6XCJjb3JzXCIsYm9keTpvLGhlYWRlcnM6bmV3IEhlYWRlcnMoe1wiQ29udGVudC1UeXBlXCI6a30pfSl9cmV0dXJuIGF8fChhPS0xIT09bi5pbmRleE9mKFwianNvblwiKT9cImpzb25cIjotMSE9PW4uaW5kZXhPZihcInhtbFwiKT9cInhtbFwiOlwidGV4dFwiKSxmPVwianNvbnBcIj09PWE/aihuLGcpOmZldGNoKGQpLGY9Zi50aGVuKGZ1bmN0aW9uKGIpe2lmKCFiLm9rKXt2YXIgYz1uZXcgRXJyb3IoYi5ib2R5KTt0aHJvdyBjLnN0YXR1cz1iLnN0YXR1cyxjLm9rPSExLGN9dmFyIGQ9Yi5oZWFkZXJzLmdldChcImNvbnRlbnQtbGVuZ3RoXCIpO3N3aXRjaChkJiZkPjY0ZTYmJmkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig3LG4pLGEpe2Nhc2VcImpzb25cIjpjYXNlXCJqc29ucFwiOnJldHVybiBiLmpzb24oKTtjYXNlXCJiaW5hcnlcIjpyZXR1cm4gYi5ibG9iKCk7Y2FzZVwiYXJyYXlCdWZmZXJcIjpyZXR1cm4gYi5hcnJheUJ1ZmZlcigpO2Nhc2VcInhtbFwiOnJldHVybiBiLnRleHQoKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBlKChuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYSxcInRleHQveG1sXCIpLmRvY3VtZW50RWxlbWVudCl9KTtkZWZhdWx0OnJldHVybiBiLnRleHQoKX19KSxmLnRoZW4oYnx8ZnVuY3Rpb24oKXt9KSxmLmNhdGNoKGN8fGNvbnNvbGUuZXJyb3IpLGZ9LHdpbmRvdy5VUkw9d2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTCxpLnByb3RvdHlwZS5fcFdyaXRlcnM9W10saS5wcm90b3R5cGUuY3JlYXRlV3JpdGVyPWZ1bmN0aW9uKGEsYil7dmFyIGM7Zm9yKHZhciBkIGluIGkucHJvdG90eXBlLl9wV3JpdGVycylpZihpLnByb3RvdHlwZS5fcFdyaXRlcnNbZF0ubmFtZT09PWEpcmV0dXJuIGM9bmV3IGkuUHJpbnRXcml0ZXIoYSt0aGlzLm1pbGxpcygpLGIpLGkucHJvdG90eXBlLl9wV3JpdGVycy5wdXNoKGMpLGM7cmV0dXJuIGM9bmV3IGkuUHJpbnRXcml0ZXIoYSxiKSxpLnByb3RvdHlwZS5fcFdyaXRlcnMucHVzaChjKSxjfSxpLlByaW50V3JpdGVyPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpczt0aGlzLm5hbWU9YSx0aGlzLmNvbnRlbnQ9XCJcIix0aGlzLndyaXRlPWZ1bmN0aW9uKGEpe3RoaXMuY29udGVudCs9YX0sdGhpcy5wcmludD1mdW5jdGlvbihhKXt0aGlzLmNvbnRlbnQrPWErXCJcXG5cIn0sdGhpcy5jbGVhcj1mdW5jdGlvbigpe3RoaXMuY29udGVudD1cIlwifSx0aGlzLmNsb3NlPWZ1bmN0aW9uKCl7dmFyIGQ9W107ZC5wdXNoKHRoaXMuY29udGVudCksaS5wcm90b3R5cGUud3JpdGVGaWxlKGQsYSxiKTtmb3IodmFyIGUgaW4gaS5wcm90b3R5cGUuX3BXcml0ZXJzKWkucHJvdG90eXBlLl9wV3JpdGVyc1tlXS5uYW1lPT09dGhpcy5uYW1lJiZpLnByb3RvdHlwZS5fcFdyaXRlcnMuc3BsaWNlKGUsMSk7Yy5jbGVhcigpLGM9e319fSxpLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hcmd1bWVudHMsZT10aGlzLl9jdXJFbGVtZW50LmVsdDtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIHZvaWQgaS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhlKTtpZihkWzBdaW5zdGFuY2VvZiBpLlJlbmRlcmVyfHxkWzBdaW5zdGFuY2VvZiBpLkdyYXBoaWNzKXJldHVybiB2b2lkIGkucHJvdG90eXBlLnNhdmVDYW52YXMoZFswXS5lbHQsZFsxXSxkWzJdKTtpZigxPT09ZC5sZW5ndGgmJlwic3RyaW5nXCI9PXR5cGVvZiBkWzBdKWkucHJvdG90eXBlLnNhdmVDYW52YXMoZSxkWzBdKTtlbHNle3N3aXRjaChnKGRbMV0sZFsyXSlbMV0pe2Nhc2VcImpzb25cIjpyZXR1cm4gdm9pZCBpLnByb3RvdHlwZS5zYXZlSlNPTihkWzBdLGRbMV0sZFsyXSk7Y2FzZVwidHh0XCI6cmV0dXJuIHZvaWQgaS5wcm90b3R5cGUuc2F2ZVN0cmluZ3MoZFswXSxkWzFdLGRbMl0pO2RlZmF1bHQ6ZFswXWluc3RhbmNlb2YgQXJyYXk/aS5wcm90b3R5cGUuc2F2ZVN0cmluZ3MoZFswXSxkWzFdLGRbMl0pOmRbMF1pbnN0YW5jZW9mIGkuVGFibGU/aS5wcm90b3R5cGUuc2F2ZVRhYmxlKGRbMF0sZFsxXSxkWzJdKTpkWzBdaW5zdGFuY2VvZiBpLkltYWdlP2kucHJvdG90eXBlLnNhdmVDYW52YXMoZFswXS5jYW52YXMsZFsxXSk6ZFswXWluc3RhbmNlb2YgaS5Tb3VuZEZpbGUmJmkucHJvdG90eXBlLnNhdmVTb3VuZChkWzBdLGRbMV0sZFsyXSxkWzNdKX19fSxpLnByb3RvdHlwZS5zYXZlSlNPTj1mdW5jdGlvbihhLGIsYyl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZUpTT05cIixhcmd1bWVudHMpO3ZhciBkO2Q9Yz9KU09OLnN0cmluZ2lmeShhKTpKU09OLnN0cmluZ2lmeShhLHZvaWQgMCwyKSx0aGlzLnNhdmVTdHJpbmdzKGQuc3BsaXQoXCJcXG5cIiksYixcImpzb25cIil9LGkucHJvdG90eXBlLnNhdmVKU09OT2JqZWN0PWkucHJvdG90eXBlLnNhdmVKU09OLGkucHJvdG90eXBlLnNhdmVKU09OQXJyYXk9aS5wcm90b3R5cGUuc2F2ZUpTT04saS5wcm90b3R5cGUuc2F2ZVN0cmluZ3M9ZnVuY3Rpb24oYSxiLGMpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVTdHJpbmdzXCIsYXJndW1lbnRzKTtmb3IodmFyIGQ9Y3x8XCJ0eHRcIixlPXRoaXMuY3JlYXRlV3JpdGVyKGIsZCksZj0wO2Y8YS5sZW5ndGg7ZisrKWEubGVuZ3RoLGUucHJpbnQoYVtmXSk7ZS5jbG9zZSgpLGUuY2xlYXIoKX0saS5wcm90b3R5cGUuc2F2ZVRhYmxlPWZ1bmN0aW9uKGEsYixjKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlVGFibGVcIixhcmd1bWVudHMpO3ZhciBkO2Q9dm9pZCAwPT09Yz9iLnN1YnN0cmluZyhiLmxhc3RJbmRleE9mKFwiLlwiKSsxLGIubGVuZ3RoKTpjO3ZhciBlPXRoaXMuY3JlYXRlV3JpdGVyKGIsZCksZz1hLmNvbHVtbnMsaD1cIixcIjtpZihcInRzdlwiPT09ZCYmKGg9XCJcXHRcIiksXCJodG1sXCIhPT1kKXtpZihcIjBcIiE9PWdbMF0pe2Zvcih2YXIgaj0wO2o8Zy5sZW5ndGg7aisrKWo8Zy5sZW5ndGgtMT9lLndyaXRlKGdbal0raCk6ZS53cml0ZShnW2pdKTtlLndyaXRlKFwiXFxuXCIpfWZvcih2YXIgaz0wO2s8YS5yb3dzLmxlbmd0aDtrKyspe3ZhciBsO2ZvcihsPTA7bDxhLnJvd3Nba10uYXJyLmxlbmd0aDtsKyspbDxhLnJvd3Nba10uYXJyLmxlbmd0aC0xP2Uud3JpdGUoYS5yb3dzW2tdLmFycltsXStoKTooYS5yb3dzLmxlbmd0aCxlLndyaXRlKGEucm93c1trXS5hcnJbbF0pKTtlLndyaXRlKFwiXFxuXCIpfX1lbHNle2UucHJpbnQoXCI8aHRtbD5cIiksZS5wcmludChcIjxoZWFkPlwiKTt2YXIgbT0nICA8bWV0YSBodHRwLWVxdWl2PVwiY29udGVudC10eXBlXCIgY29udGVudCc7aWYobSs9Jz1cInRleHQvaHRtbDtjaGFyc2V0PXV0Zi04XCIgLz4nLGUucHJpbnQobSksZS5wcmludChcIjwvaGVhZD5cIiksZS5wcmludChcIjxib2R5PlwiKSxlLnByaW50KFwiICA8dGFibGU+XCIpLFwiMFwiIT09Z1swXSl7ZS5wcmludChcIiAgICA8dHI+XCIpO2Zvcih2YXIgbj0wO248Zy5sZW5ndGg7bisrKXt2YXIgbz1mKGdbbl0pO2UucHJpbnQoXCIgICAgICA8dGQ+XCIrbyksZS5wcmludChcIiAgICAgIDwvdGQ+XCIpfWUucHJpbnQoXCIgICAgPC90cj5cIil9Zm9yKHZhciBwPTA7cDxhLnJvd3MubGVuZ3RoO3ArKyl7ZS5wcmludChcIiAgICA8dHI+XCIpO2Zvcih2YXIgcT0wO3E8YS5jb2x1bW5zLmxlbmd0aDtxKyspe3ZhciByPWEucm93c1twXS5nZXRTdHJpbmcocSkscz1mKHIpO2UucHJpbnQoXCIgICAgICA8dGQ+XCIrcyksZS5wcmludChcIiAgICAgIDwvdGQ+XCIpfWUucHJpbnQoXCIgICAgPC90cj5cIil9ZS5wcmludChcIiAgPC90YWJsZT5cIiksZS5wcmludChcIjwvYm9keT5cIiksZS5wcmludChcIjwvaHRtbD5cIil9ZS5jbG9zZSgpLGUuY2xlYXIoKX0saS5wcm90b3R5cGUud3JpdGVGaWxlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1cImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO2kucHJvdG90eXBlLl9pc1NhZmFyaSgpJiYoZD1cInRleHQvcGxhaW5cIik7dmFyIGU9bmV3IEJsb2IoYSx7dHlwZTpkfSk7aS5wcm90b3R5cGUuZG93bmxvYWRGaWxlKGUsYixjKX0saS5wcm90b3R5cGUuZG93bmxvYWRGaWxlPWZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1nKGMsZCksZj1lWzBdO2lmKGIgaW5zdGFuY2VvZiBCbG9iKXtyZXR1cm4gdm9pZCBhKFwiZmlsZS1zYXZlclwiKS5zYXZlQXMoYixmKX12YXIgaj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtpZihqLmhyZWY9YixqLmRvd25sb2FkPWYsai5vbmNsaWNrPWZ1bmN0aW9uKGEpe2goYSksYS5zdG9wUHJvcGFnYXRpb24oKX0sai5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaiksaS5wcm90b3R5cGUuX2lzU2FmYXJpKCkpe3ZhciBrPVwiSGVsbG8sIFNhZmFyaSB1c2VyISBUbyBkb3dubG9hZCB0aGlzIGZpbGUuLi5cXG5cIjtrKz1cIjEuIEdvIHRvIEZpbGUgLS1cXHgzZSBTYXZlIEFzLlxcblwiLGsrPScyLiBDaG9vc2UgXCJQYWdlIFNvdXJjZVwiIGFzIHRoZSBGb3JtYXQuXFxuJyxrKz0nMy4gTmFtZSBpdCB3aXRoIHRoaXMgZXh0ZW5zaW9uOiAuXCInK2VbMV0rJ1wiJyxhbGVydChrKX1qLmNsaWNrKCl9LGkucHJvdG90eXBlLl9jaGVja0ZpbGVFeHRlbnNpb249ZyxpLnByb3RvdHlwZS5faXNTYWZhcmk9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5IVE1MRWxlbWVudCkuaW5kZXhPZihcIkNvbnN0cnVjdG9yXCIpPjB9LGIuZXhwb3J0cz1pfSx7XCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiZXM2LXByb21pc2VcIjo0LFwiZmV0Y2gtanNvbnBcIjo1LFwiZmlsZS1zYXZlclwiOjYsXCJ3aGF0d2ctZmV0Y2hcIjoxMn1dLDQ4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlRhYmxlPWZ1bmN0aW9uKGEpe3RoaXMuY29sdW1ucz1bXSx0aGlzLnJvd3M9W119LGQuVGFibGUucHJvdG90eXBlLmFkZFJvdz1mdW5jdGlvbihhKXt2YXIgYj1hfHxuZXcgZC5UYWJsZVJvdztpZih2b2lkIDA9PT1iLmFycnx8dm9pZCAwPT09Yi5vYmopdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBUYWJsZVJvdzogXCIrYik7cmV0dXJuIGIudGFibGU9dGhpcyx0aGlzLnJvd3MucHVzaChiKSxifSxkLlRhYmxlLnByb3RvdHlwZS5yZW1vdmVSb3c9ZnVuY3Rpb24oYSl7dGhpcy5yb3dzW2FdLnRhYmxlPW51bGw7dmFyIGI9dGhpcy5yb3dzLnNwbGljZShhKzEsdGhpcy5yb3dzLmxlbmd0aCk7dGhpcy5yb3dzLnBvcCgpLHRoaXMucm93cz10aGlzLnJvd3MuY29uY2F0KGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRSb3c9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm93c1thXX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0Um93cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvd3N9LGQuVGFibGUucHJvdG90eXBlLmZpbmRSb3c9ZnVuY3Rpb24oYSxiKXtpZihcInN0cmluZ1wiPT10eXBlb2YgYil7Zm9yKHZhciBjPTA7Yzx0aGlzLnJvd3MubGVuZ3RoO2MrKylpZih0aGlzLnJvd3NbY10ub2JqW2JdPT09YSlyZXR1cm4gdGhpcy5yb3dzW2NdfWVsc2UgZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKylpZih0aGlzLnJvd3NbZF0uYXJyW2JdPT09YSlyZXR1cm4gdGhpcy5yb3dzW2RdO3JldHVybiBudWxsfSxkLlRhYmxlLnByb3RvdHlwZS5maW5kUm93cz1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiKWZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspdGhpcy5yb3dzW2RdLm9ialtiXT09PWEmJmMucHVzaCh0aGlzLnJvd3NbZF0pO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLnJvd3MubGVuZ3RoO2UrKyl0aGlzLnJvd3NbZV0uYXJyW2JdPT09YSYmYy5wdXNoKHRoaXMucm93c1tlXSk7cmV0dXJuIGN9LGQuVGFibGUucHJvdG90eXBlLm1hdGNoUm93PWZ1bmN0aW9uKGEsYil7aWYoXCJudW1iZXJcIj09dHlwZW9mIGIpe2Zvcih2YXIgYz0wO2M8dGhpcy5yb3dzLmxlbmd0aDtjKyspaWYodGhpcy5yb3dzW2NdLmFycltiXS5tYXRjaChhKSlyZXR1cm4gdGhpcy5yb3dzW2NdfWVsc2UgZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKylpZih0aGlzLnJvd3NbZF0ub2JqW2JdLm1hdGNoKGEpKXJldHVybiB0aGlzLnJvd3NbZF07cmV0dXJuIG51bGx9LGQuVGFibGUucHJvdG90eXBlLm1hdGNoUm93cz1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBiKWZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspdGhpcy5yb3dzW2RdLmFycltiXS5tYXRjaChhKSYmYy5wdXNoKHRoaXMucm93c1tkXSk7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMucm93cy5sZW5ndGg7ZSsrKXRoaXMucm93c1tlXS5vYmpbYl0ubWF0Y2goYSkmJmMucHVzaCh0aGlzLnJvd3NbZV0pO3JldHVybiBjfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRDb2x1bW49ZnVuY3Rpb24oYSl7dmFyIGI9W107aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpZm9yKHZhciBjPTA7Yzx0aGlzLnJvd3MubGVuZ3RoO2MrKyliLnB1c2godGhpcy5yb3dzW2NdLm9ialthXSk7ZWxzZSBmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKWIucHVzaCh0aGlzLnJvd3NbZF0uYXJyW2FdKTtyZXR1cm4gYn0sZC5UYWJsZS5wcm90b3R5cGUuY2xlYXJSb3dzPWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMucm93cyx0aGlzLnJvd3M9W119LGQuVGFibGUucHJvdG90eXBlLmFkZENvbHVtbj1mdW5jdGlvbihhKXt2YXIgYj1hfHxudWxsO3RoaXMuY29sdW1ucy5wdXNoKGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRDb2x1bW5Db3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbHVtbnMubGVuZ3RofSxkLlRhYmxlLnByb3RvdHlwZS5nZXRSb3dDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvd3MubGVuZ3RofSxkLlRhYmxlLnByb3RvdHlwZS5yZW1vdmVUb2tlbnM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLFwiXFxcXCQmXCIpfSxkPVtdLGU9MDtlPGEubGVuZ3RoO2UrKylkLnB1c2goYyhhLmNoYXJBdChlKSkpO3ZhciBmPW5ldyBSZWdFeHAoZC5qb2luKFwifFwiKSxcImdcIik7aWYodm9pZCAwPT09Yilmb3IodmFyIGc9MDtnPHRoaXMuY29sdW1ucy5sZW5ndGg7ZysrKWZvcih2YXIgaD0wO2g8dGhpcy5yb3dzLmxlbmd0aDtoKyspe3ZhciBpPXRoaXMucm93c1toXS5hcnJbZ107aT1pLnJlcGxhY2UoZixcIlwiKSx0aGlzLnJvd3NbaF0uYXJyW2ddPWksdGhpcy5yb3dzW2hdLm9ialt0aGlzLmNvbHVtbnNbZ11dPWl9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYilmb3IodmFyIGo9MDtqPHRoaXMucm93cy5sZW5ndGg7aisrKXt2YXIgaz10aGlzLnJvd3Nbal0ub2JqW2JdO2s9ay5yZXBsYWNlKGYsXCJcIiksdGhpcy5yb3dzW2pdLm9ialtiXT1rO3ZhciBsPXRoaXMuY29sdW1ucy5pbmRleE9mKGIpO3RoaXMucm93c1tqXS5hcnJbbF09a31lbHNlIGZvcih2YXIgbT0wO208dGhpcy5yb3dzLmxlbmd0aDttKyspe3ZhciBuPXRoaXMucm93c1ttXS5hcnJbYl07bj1uLnJlcGxhY2UoZixcIlwiKSx0aGlzLnJvd3NbbV0uYXJyW2JdPW4sdGhpcy5yb3dzW21dLm9ialt0aGlzLmNvbHVtbnNbYl1dPW59fSxkLlRhYmxlLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBSZWdFeHAoXCIgXCIsXCJnXCIpO2lmKHZvaWQgMD09PWEpZm9yKHZhciBjPTA7Yzx0aGlzLmNvbHVtbnMubGVuZ3RoO2MrKylmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKXt2YXIgZT10aGlzLnJvd3NbZF0uYXJyW2NdO2U9ZS5yZXBsYWNlKGIsXCJcIiksdGhpcy5yb3dzW2RdLmFycltjXT1lLHRoaXMucm93c1tkXS5vYmpbdGhpcy5jb2x1bW5zW2NdXT1lfWVsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpZm9yKHZhciBmPTA7Zjx0aGlzLnJvd3MubGVuZ3RoO2YrKyl7dmFyIGc9dGhpcy5yb3dzW2ZdLm9ialthXTtnPWcucmVwbGFjZShiLFwiXCIpLHRoaXMucm93c1tmXS5vYmpbYV09Zzt2YXIgaD10aGlzLmNvbHVtbnMuaW5kZXhPZihhKTt0aGlzLnJvd3NbZl0uYXJyW2hdPWd9ZWxzZSBmb3IodmFyIGk9MDtpPHRoaXMucm93cy5sZW5ndGg7aSsrKXt2YXIgaj10aGlzLnJvd3NbaV0uYXJyW2FdO2o9ai5yZXBsYWNlKGIsXCJcIiksdGhpcy5yb3dzW2ldLmFyclthXT1qLHRoaXMucm93c1tpXS5vYmpbdGhpcy5jb2x1bW5zW2FdXT1qfX0sZC5UYWJsZS5wcm90b3R5cGUucmVtb3ZlQ29sdW1uPWZ1bmN0aW9uKGEpe3ZhciBiLGM7XCJzdHJpbmdcIj09dHlwZW9mIGE/KGI9YSxjPXRoaXMuY29sdW1ucy5pbmRleE9mKGEpKTooYz1hLGI9dGhpcy5jb2x1bW5zW2FdKTt2YXIgZD10aGlzLmNvbHVtbnMuc3BsaWNlKGMrMSx0aGlzLmNvbHVtbnMubGVuZ3RoKTt0aGlzLmNvbHVtbnMucG9wKCksdGhpcy5jb2x1bW5zPXRoaXMuY29sdW1ucy5jb25jYXQoZCk7Zm9yKHZhciBlPTA7ZTx0aGlzLnJvd3MubGVuZ3RoO2UrKyl7dmFyIGY9dGhpcy5yb3dzW2VdLmFycixnPWYuc3BsaWNlKGMrMSxmLmxlbmd0aCk7Zi5wb3AoKSx0aGlzLnJvd3NbZV0uYXJyPWYuY29uY2F0KGcpLGRlbGV0ZSB0aGlzLnJvd3NbZV0ub2JqW2JdfX0sZC5UYWJsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLnJvd3NbYV0uc2V0KGIsYyl9LGQuVGFibGUucHJvdG90eXBlLnNldE51bT1mdW5jdGlvbihhLGIsYyl7dGhpcy5yb3dzW2FdLnNldE51bShiLGMpfSxkLlRhYmxlLnByb3RvdHlwZS5zZXRTdHJpbmc9ZnVuY3Rpb24oYSxiLGMpe3RoaXMucm93c1thXS5zZXRTdHJpbmcoYixjKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucm93c1thXS5nZXQoYil9LGQuVGFibGUucHJvdG90eXBlLmdldE51bT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnJvd3NbYV0uZ2V0TnVtKGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5yb3dzW2FdLmdldFN0cmluZyhiKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0T2JqZWN0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQ9e30sZT0wO2U8dGhpcy5yb3dzLmxlbmd0aDtlKyspaWYoYj10aGlzLnJvd3NbZV0ub2JqLFwic3RyaW5nXCI9PXR5cGVvZiBhKXtpZighKHRoaXMuY29sdW1ucy5pbmRleE9mKGEpPj0wKSl0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgdGFibGUgaGFzIG5vIGNvbHVtbiBuYW1lZCBcIicrYSsnXCInKTtjPWJbYV0sZFtjXT1ifWVsc2UgZFtlXT10aGlzLnJvd3NbZV0ub2JqO3JldHVybiBkfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRBcnJheT1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPTA7Yjx0aGlzLnJvd3MubGVuZ3RoO2IrKylhLnB1c2godGhpcy5yb3dzW2JdLmFycik7cmV0dXJuIGF9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQ5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlRhYmxlUm93PWZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZD17fTthJiYoYj1ifHxcIixcIixjPWEuc3BsaXQoYikpO2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZj1lLGc9Y1tlXTtkW2ZdPWd9dGhpcy5hcnI9Yyx0aGlzLm9iaj1kLHRoaXMudGFibGU9bnVsbH0sZC5UYWJsZVJvdy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpe3ZhciBjPXRoaXMudGFibGUuY29sdW1ucy5pbmRleE9mKGEpO2lmKCEoYz49MCkpdGhyb3cgbmV3IEVycm9yKCdUaGlzIHRhYmxlIGhhcyBubyBjb2x1bW4gbmFtZWQgXCInK2ErJ1wiJyk7dGhpcy5vYmpbYV09Yix0aGlzLmFycltjXT1ifWVsc2V7aWYoIShhPHRoaXMudGFibGUuY29sdW1ucy5sZW5ndGgpKXRocm93IG5ldyBFcnJvcihcIkNvbHVtbiAjXCIrYStcIiBpcyBvdXQgb2YgdGhlIHJhbmdlIG9mIHRoaXMgdGFibGVcIik7dGhpcy5hcnJbYV09Yjt2YXIgZD10aGlzLnRhYmxlLmNvbHVtbnNbYV07dGhpcy5vYmpbZF09Yn19LGQuVGFibGVSb3cucHJvdG90eXBlLnNldE51bT1mdW5jdGlvbihhLGIpe3ZhciBjPXBhcnNlRmxvYXQoYik7dGhpcy5zZXQoYSxjKX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuc2V0U3RyaW5nPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi50b1N0cmluZygpO3RoaXMuc2V0KGEsYyl9LGQuVGFibGVSb3cucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYT90aGlzLm9ialthXTp0aGlzLmFyclthXX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuZ2V0TnVtPWZ1bmN0aW9uKGEpe3ZhciBiO2lmKGI9XCJzdHJpbmdcIj09dHlwZW9mIGE/cGFyc2VGbG9hdCh0aGlzLm9ialthXSk6cGFyc2VGbG9hdCh0aGlzLmFyclthXSksXCJOYU5cIj09PWIudG9TdHJpbmcoKSl0aHJvd1wiRXJyb3I6IFwiK3RoaXMub2JqW2FdK1wiIGlzIE5hTiAoTm90IGEgTnVtYmVyKVwiO3JldHVybiBifSxkLlRhYmxlUm93LnByb3RvdHlwZS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGE/dGhpcy5vYmpbYV0udG9TdHJpbmcoKTp0aGlzLmFyclthXS50b1N0cmluZygpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1MDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5YTUw9ZnVuY3Rpb24oKXt0aGlzLm5hbWU9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY29udGVudD1udWxsfSxkLlhNTC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSxkLlhNTC5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9LGQuWE1MLnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKGEpe3RoaXMubmFtZT1hfSxkLlhNTC5wcm90b3R5cGUuaGFzQ2hpbGRyZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg+MH0sZC5YTUwucHJvdG90eXBlLmxpc3RDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5uYW1lfSl9LGQuWE1MLnByb3RvdHlwZS5nZXRDaGlsZHJlbj1mdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4gYi5uYW1lPT09YX0pOnRoaXMuY2hpbGRyZW59LGQuWE1MLnByb3RvdHlwZS5nZXRDaGlsZD1mdW5jdGlvbihhKXtpZihcInN0cmluZ1wiIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5jaGlsZHJlblthXTtmb3IodmFyIGI9MDtiPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5jaGlsZHJlbltiXTtpZihjLm5hbWU9PT1hKXJldHVybiBjfX0sZC5YTUwucHJvdG90eXBlLmFkZENoaWxkPWZ1bmN0aW9uKGEpe2EgaW5zdGFuY2VvZiBkLlhNTCYmdGhpcy5jaGlsZHJlbi5wdXNoKGEpfSxkLlhNTC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oYSl7dmFyIGI9LTE7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpe2Zvcih2YXIgYz0wO2M8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YysrKWlmKHRoaXMuY2hpbGRyZW5bY10ubmFtZT09PWEpe2I9YzticmVha319ZWxzZSBiPWE7LTEhPT1iJiZ0aGlzLmNoaWxkcmVuLnNwbGljZShiLDEpfSxkLlhNTC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKS5sZW5ndGh9LGQuWE1MLnByb3RvdHlwZS5saXN0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpfSxkLlhNTC5wcm90b3R5cGUuaGFzQXR0cmlidXRlPWZ1bmN0aW9uKGEpe3JldHVybiEhdGhpcy5hdHRyaWJ1dGVzW2FdfSxkLlhNTC5wcm90b3R5cGUuZ2V0TnVtPWZ1bmN0aW9uKGEsYil7cmV0dXJuIE51bWJlcih0aGlzLmF0dHJpYnV0ZXNbYV0pfHxifHwwfSxkLlhNTC5wcm90b3R5cGUuZ2V0U3RyaW5nPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFN0cmluZyh0aGlzLmF0dHJpYnV0ZXNbYV0pfHxifHxudWxsfSxkLlhNTC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKGEsYil7dGhpcy5hdHRyaWJ1dGVzW2FdJiYodGhpcy5hdHRyaWJ1dGVzW2FdPWIpfSxkLlhNTC5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jb250ZW50fHxhfHxudWxsfSxkLlhNTC5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbihhKXt0aGlzLmNoaWxkcmVuLmxlbmd0aHx8KHRoaXMuY29udGVudD1hKX0sZC5YTUwucHJvdG90eXBlLl9zZXRDb250PWZ1bmN0aW9uKGEpe3ZhciBiO2I9YSxiPWIucmVwbGFjZSgvXFxzXFxzKy9nLFwiLFwiKSx0aGlzLmNvbnRlbnQ9Yn0sZC5YTUwucHJvdG90eXBlLl9zZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9YS5hdHRyaWJ1dGVzO2lmKGMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07YltlLm5vZGVOYW1lXT1lLm5vZGVWYWx1ZX10aGlzLmF0dHJpYnV0ZXM9Yn0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBNYXRoLmh5cG90KXJldHVybiBNYXRoLmh5cG90LmFwcGx5KG51bGwsYXJndW1lbnRzKTtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxlPVtdLGY9MCxnPTA7ZzxkO2crKyl7dmFyIGg9YXJndW1lbnRzW2ddXG47aWYoKGg9K2gpPT09MS8wfHxoPT09LTEvMClyZXR1cm4gMS8wO2g9TWF0aC5hYnMoaCksaD5mJiYoZj1oKSxlW2ddPWh9MD09PWYmJihmPTEpO2Zvcih2YXIgaT0wLGo9MCxrPTA7azxkO2srKyl7dmFyIGw9ZVtrXS9mLG09bCpsLWosbj1pK207aj1uLWktbSxpPW59cmV0dXJuIE1hdGguc3FydChpKSpmfXZhciBlPWEoXCIuLi9jb3JlL21haW5cIik7ZS5wcm90b3R5cGUuYWJzPU1hdGguYWJzLGUucHJvdG90eXBlLmNlaWw9TWF0aC5jZWlsLGUucHJvdG90eXBlLmNvbnN0cmFpbj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvbnN0cmFpblwiLGFyZ3VtZW50cyksTWF0aC5tYXgoTWF0aC5taW4oYSxjKSxiKX0sZS5wcm90b3R5cGUuZGlzdD1mdW5jdGlvbigpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJkaXN0XCIsYXJndW1lbnRzKSw0PT09YXJndW1lbnRzLmxlbmd0aD9kKGFyZ3VtZW50c1syXS1hcmd1bWVudHNbMF0sYXJndW1lbnRzWzNdLWFyZ3VtZW50c1sxXSk6Nj09PWFyZ3VtZW50cy5sZW5ndGg/ZChhcmd1bWVudHNbM10tYXJndW1lbnRzWzBdLGFyZ3VtZW50c1s0XS1hcmd1bWVudHNbMV0sYXJndW1lbnRzWzVdLWFyZ3VtZW50c1syXSk6dm9pZCAwfSxlLnByb3RvdHlwZS5leHA9TWF0aC5leHAsZS5wcm90b3R5cGUuZmxvb3I9TWF0aC5mbG9vcixlLnByb3RvdHlwZS5sZXJwPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibGVycFwiLGFyZ3VtZW50cyksYyooYi1hKSthfSxlLnByb3RvdHlwZS5sb2c9TWF0aC5sb2csZS5wcm90b3R5cGUubWFnPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1hZ1wiLGFyZ3VtZW50cyksZChhLGIpfSxlLnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1hcFwiLGFyZ3VtZW50cyk7dmFyIGg9KGEtYikvKGMtYikqKGYtZCkrZDtyZXR1cm4gZz9kPGY/dGhpcy5jb25zdHJhaW4oaCxkLGYpOnRoaXMuY29uc3RyYWluKGgsZixkKTpofSxlLnByb3RvdHlwZS5tYXg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWF4XCIsYXJndW1lbnRzKSxhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5P01hdGgubWF4LmFwcGx5KG51bGwsYXJndW1lbnRzWzBdKTpNYXRoLm1heC5hcHBseShudWxsLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlLm1pbj1mdW5jdGlvbigpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtaW5cIixhcmd1bWVudHMpLGFyZ3VtZW50c1swXWluc3RhbmNlb2YgQXJyYXk/TWF0aC5taW4uYXBwbHkobnVsbCxhcmd1bWVudHNbMF0pOk1hdGgubWluLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZS5wcm90b3R5cGUubm9ybT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5vcm1cIixhcmd1bWVudHMpLHRoaXMubWFwKGEsYixjLDAsMSl9LGUucHJvdG90eXBlLnBvdz1NYXRoLnBvdyxlLnByb3RvdHlwZS5yb3VuZD1NYXRoLnJvdW5kLGUucHJvdG90eXBlLnNxPWZ1bmN0aW9uKGEpe3JldHVybiBhKmF9LGUucHJvdG90eXBlLnNxcnQ9TWF0aC5zcXJ0LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDUyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5jcmVhdGVWZWN0b3I9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZD9uZXcgZC5WZWN0b3IodGhpcyxhcmd1bWVudHMpOm5ldyBkLlZlY3RvcihhLGIsYyl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDUzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQsZT1hKFwiLi4vY29yZS9tYWluXCIpLGY9NCxnPTE8PGYsaD04LGk9MTw8aCxqPTQwOTUsaz00LGw9LjUsbT1mdW5jdGlvbihhKXtyZXR1cm4uNSooMS1NYXRoLmNvcyhhKk1hdGguUEkpKX07ZS5wcm90b3R5cGUubm9pc2U9ZnVuY3Rpb24oYSxiLGMpe2lmKGI9Ynx8MCxjPWN8fDAsbnVsbD09ZCl7ZD1uZXcgQXJyYXkoaisxKTtmb3IodmFyIGU9MDtlPGorMTtlKyspZFtlXT1NYXRoLnJhbmRvbSgpfWE8MCYmKGE9LWEpLGI8MCYmKGI9LWIpLGM8MCYmKGM9LWMpO2Zvcih2YXIgbixvLHAscSxyLHM9TWF0aC5mbG9vcihhKSx0PU1hdGguZmxvb3IoYiksdT1NYXRoLmZsb29yKGMpLHY9YS1zLHc9Yi10LHg9Yy11LHk9MCx6PS41LEE9MDtBPGs7QSsrKXt2YXIgQj1zKyh0PDxmKSsodTw8aCk7bj1tKHYpLG89bSh3KSxwPWRbQiZqXSxwKz1uKihkW0IrMSZqXS1wKSxxPWRbQitnJmpdLHErPW4qKGRbQitnKzEmal0tcSkscCs9byoocS1wKSxCKz1pLHE9ZFtCJmpdLHErPW4qKGRbQisxJmpdLXEpLHI9ZFtCK2cmal0scis9biooZFtCK2crMSZqXS1yKSxxKz1vKihyLXEpLHArPW0oeCkqKHEtcCkseSs9cCp6LHoqPWwsczw8PTEsdio9Mix0PDw9MSx3Kj0yLHU8PD0xLHgqPTIsdj49MSYmKHMrKyx2LS0pLHc+PTEmJih0Kyssdy0tKSx4Pj0xJiYodSsrLHgtLSl9cmV0dXJuIHl9LGUucHJvdG90eXBlLm5vaXNlRGV0YWlsPWZ1bmN0aW9uKGEsYil7YT4wJiYoaz1hKSxiPjAmJihsPWIpfSxlLnByb3RvdHlwZS5ub2lzZVNlZWQ9ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXt2YXIgYSxiLGM9NDI5NDk2NzI5NixkPTE2NjQ1MjUsZT0xMDEzOTA0MjIzO3JldHVybntzZXRTZWVkOmZ1bmN0aW9uKGQpe2I9YT0obnVsbD09ZD9NYXRoLnJhbmRvbSgpKmM6ZCk+Pj4wfSxnZXRTZWVkOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHJhbmQ6ZnVuY3Rpb24oKXtyZXR1cm4oYj0oZCpiK2UpJWMpL2N9fX0oKTtiLnNldFNlZWQoYSksZD1uZXcgQXJyYXkoaisxKTtmb3IodmFyIGM9MDtjPGorMTtjKyspZFtjXT1iLnJhbmQoKX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QuVmVjdG9yPWZ1bmN0aW9uKCl7dmFyIGEsYixjO2FyZ3VtZW50c1swXWluc3RhbmNlb2YgZD8odGhpcy5wNT1hcmd1bWVudHNbMF0sYT1hcmd1bWVudHNbMV1bMF18fDAsYj1hcmd1bWVudHNbMV1bMV18fDAsYz1hcmd1bWVudHNbMV1bMl18fDApOihhPWFyZ3VtZW50c1swXXx8MCxiPWFyZ3VtZW50c1sxXXx8MCxjPWFyZ3VtZW50c1syXXx8MCksdGhpcy54PWEsdGhpcy55PWIsdGhpcy56PWN9LGQuVmVjdG9yLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwicDUuVmVjdG9yIE9iamVjdCA6IFtcIit0aGlzLngrXCIsIFwiK3RoaXMueStcIiwgXCIrdGhpcy56K1wiXVwifSxkLlZlY3Rvci5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyh0aGlzLng9YS54fHwwLHRoaXMueT1hLnl8fDAsdGhpcy56PWEuenx8MCx0aGlzKTphIGluc3RhbmNlb2YgQXJyYXk/KHRoaXMueD1hWzBdfHwwLHRoaXMueT1hWzFdfHwwLHRoaXMuej1hWzJdfHwwLHRoaXMpOih0aGlzLng9YXx8MCx0aGlzLnk9Ynx8MCx0aGlzLno9Y3x8MCx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wNT9uZXcgZC5WZWN0b3IodGhpcy5wNSxbdGhpcy54LHRoaXMueSx0aGlzLnpdKTpuZXcgZC5WZWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfSxkLlZlY3Rvci5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyh0aGlzLngrPWEueHx8MCx0aGlzLnkrPWEueXx8MCx0aGlzLnorPWEuenx8MCx0aGlzKTphIGluc3RhbmNlb2YgQXJyYXk/KHRoaXMueCs9YVswXXx8MCx0aGlzLnkrPWFbMV18fDAsdGhpcy56Kz1hWzJdfHwwLHRoaXMpOih0aGlzLngrPWF8fDAsdGhpcy55Kz1ifHwwLHRoaXMueis9Y3x8MCx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj8odGhpcy54LT1hLnh8fDAsdGhpcy55LT1hLnl8fDAsdGhpcy56LT1hLnp8fDAsdGhpcyk6YSBpbnN0YW5jZW9mIEFycmF5Pyh0aGlzLngtPWFbMF18fDAsdGhpcy55LT1hWzFdfHwwLHRoaXMuei09YVsyXXx8MCx0aGlzKToodGhpcy54LT1hfHwwLHRoaXMueS09Ynx8MCx0aGlzLnotPWN8fDAsdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5tdWx0PWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhJiZpc0Zpbml0ZShhKT8odGhpcy54Kj1hLHRoaXMueSo9YSx0aGlzLnoqPWEsdGhpcyk6KGNvbnNvbGUud2FybihcInA1LlZlY3Rvci5wcm90b3R5cGUubXVsdDpcIixcIm4gaXMgdW5kZWZpbmVkIG9yIG5vdCBhIGZpbml0ZSBudW1iZXJcIiksdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGEmJmlzRmluaXRlKGEpPzA9PT1hPyhjb25zb2xlLndhcm4oXCJwNS5WZWN0b3IucHJvdG90eXBlLmRpdjpcIixcImRpdmlkZSBieSAwXCIpLHRoaXMpOih0aGlzLngvPWEsdGhpcy55Lz1hLHRoaXMuei89YSx0aGlzKTooY29uc29sZS53YXJuKFwicDUuVmVjdG9yLnByb3RvdHlwZS5kaXY6XCIsXCJuIGlzIHVuZGVmaW5lZCBvciBub3QgYSBmaW5pdGUgbnVtYmVyXCIpLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUubWFnPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLm1hZ1NxKCkpfSxkLlZlY3Rvci5wcm90b3R5cGUubWFnU3E9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLngsYj10aGlzLnksYz10aGlzLno7cmV0dXJuIGEqYStiKmIrYypjfSxkLlZlY3Rvci5wcm90b3R5cGUuZG90PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yP3RoaXMuZG90KGEueCxhLnksYS56KTp0aGlzLngqKGF8fDApK3RoaXMueSooYnx8MCkrdGhpcy56KihjfHwwKX0sZC5WZWN0b3IucHJvdG90eXBlLmNyb3NzPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueSphLnotdGhpcy56KmEueSxjPXRoaXMueiphLngtdGhpcy54KmEueixlPXRoaXMueCphLnktdGhpcy55KmEueDtyZXR1cm4gdGhpcy5wNT9uZXcgZC5WZWN0b3IodGhpcy5wNSxbYixjLGVdKTpuZXcgZC5WZWN0b3IoYixjLGUpfSxkLlZlY3Rvci5wcm90b3R5cGUuZGlzdD1mdW5jdGlvbihhKXtyZXR1cm4gYS5jb3B5KCkuc3ViKHRoaXMpLm1hZygpfSxkLlZlY3Rvci5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5tYWcoKTtyZXR1cm4gMCE9PWEmJnRoaXMubXVsdCgxL2EpLHRoaXN9LGQuVmVjdG9yLnByb3RvdHlwZS5saW1pdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm1hZ1NxKCk7cmV0dXJuIGI+YSphJiZ0aGlzLmRpdihNYXRoLnNxcnQoYikpLm11bHQoYSksdGhpc30sZC5WZWN0b3IucHJvdG90eXBlLnNldE1hZz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0KGEpfSxkLlZlY3Rvci5wcm90b3R5cGUuaGVhZGluZz1mdW5jdGlvbigpe3ZhciBhPU1hdGguYXRhbjIodGhpcy55LHRoaXMueCk7cmV0dXJuIHRoaXMucDU/dGhpcy5wNS5fZnJvbVJhZGlhbnMoYSk6YX0sZC5WZWN0b3IucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmhlYWRpbmcoKSthO3RoaXMucDUmJihiPXRoaXMucDUuX3RvUmFkaWFucyhiKSk7dmFyIGM9dGhpcy5tYWcoKTtyZXR1cm4gdGhpcy54PU1hdGguY29zKGIpKmMsdGhpcy55PU1hdGguc2luKGIpKmMsdGhpc30sZC5WZWN0b3IucHJvdG90eXBlLmFuZ2xlQmV0d2Vlbj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmRvdChhKS8odGhpcy5tYWcoKSphLm1hZygpKSxjPU1hdGguYWNvcyhNYXRoLm1pbigxLE1hdGgubWF4KC0xLGIpKSk7cmV0dXJuIHRoaXMucDU/dGhpcy5wNS5fZnJvbVJhZGlhbnMoYyk6Y30sZC5WZWN0b3IucHJvdG90eXBlLmxlcnA9ZnVuY3Rpb24oYSxiLGMsZSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj90aGlzLmxlcnAoYS54LGEueSxhLnosYik6KHRoaXMueCs9KGEtdGhpcy54KSplfHwwLHRoaXMueSs9KGItdGhpcy55KSplfHwwLHRoaXMueis9KGMtdGhpcy56KSplfHwwLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUuYXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy54fHwwLHRoaXMueXx8MCx0aGlzLnp8fDBdfSxkLlZlY3Rvci5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZSxmLGc7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj8oZT1hLnh8fDAsZj1hLnl8fDAsZz1hLnp8fDApOmEgaW5zdGFuY2VvZiBBcnJheT8oZT1hWzBdfHwwLGY9YVsxXXx8MCxnPWFbMl18fDApOihlPWF8fDAsZj1ifHwwLGc9Y3x8MCksdGhpcy54PT09ZSYmdGhpcy55PT09ZiYmdGhpcy56PT09Z30sZC5WZWN0b3IuZnJvbUFuZ2xlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMD09PWImJihiPTEpLG5ldyBkLlZlY3RvcihiKk1hdGguY29zKGEpLGIqTWF0aC5zaW4oYSksMCl9LGQuVmVjdG9yLmZyb21BbmdsZXM9ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWMmJihjPTEpO3ZhciBlPU1hdGguY29zKGIpLGY9TWF0aC5zaW4oYiksZz1NYXRoLmNvcyhhKSxoPU1hdGguc2luKGEpO3JldHVybiBuZXcgZC5WZWN0b3IoYypoKmYsLWMqZyxjKmgqZSl9LGQuVmVjdG9yLnJhbmRvbTJEPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbUFuZ2xlKE1hdGgucmFuZG9tKCkqZS5UV09fUEkpfSxkLlZlY3Rvci5yYW5kb20zRD1mdW5jdGlvbigpe3ZhciBhPU1hdGgucmFuZG9tKCkqZS5UV09fUEksYj0yKk1hdGgucmFuZG9tKCktMSxjPU1hdGguc3FydCgxLWIqYiksZj1jKk1hdGguY29zKGEpLGc9YypNYXRoLnNpbihhKTtyZXR1cm4gbmV3IGQuVmVjdG9yKGYsZyxiKX0sZC5WZWN0b3IuYWRkPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz9jLnNldChhKTpjPWEuY29weSgpLGMuYWRkKGIpLGN9LGQuVmVjdG9yLnN1Yj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/Yy5zZXQoYSk6Yz1hLmNvcHkoKSxjLnN1YihiKSxjfSxkLlZlY3Rvci5tdWx0PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz9jLnNldChhKTpjPWEuY29weSgpLGMubXVsdChiKSxjfSxkLlZlY3Rvci5kaXY9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP2Muc2V0KGEpOmM9YS5jb3B5KCksYy5kaXYoYiksY30sZC5WZWN0b3IuZG90PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZG90KGIpfSxkLlZlY3Rvci5jcm9zcz1mdW5jdGlvbihhLGIpe3JldHVybiBhLmNyb3NzKGIpfSxkLlZlY3Rvci5kaXN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZGlzdChiKX0sZC5WZWN0b3IubGVycD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gZD9kLnNldChhKTpkPWEuY29weSgpLGQubGVycChiLGMpLGR9LGQuVmVjdG9yLm1hZz1mdW5jdGlvbihhKXt2YXIgYj1hLngsYz1hLnksZD1hLnosZT1iKmIrYypjK2QqZDtyZXR1cm4gTWF0aC5zcXJ0KGUpfSxiLmV4cG9ydHM9ZC5WZWN0b3J9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDU1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPSExLGY9ITEsZz0wLGg9ZnVuY3Rpb24oKXt2YXIgYSxiLGM9NDI5NDk2NzI5NixkPTE2NjQ1MjUsZT0xMDEzOTA0MjIzO3JldHVybntzZXRTZWVkOmZ1bmN0aW9uKGQpe2I9YT0obnVsbD09ZD9NYXRoLnJhbmRvbSgpKmM6ZCk+Pj4wfSxnZXRTZWVkOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHJhbmQ6ZnVuY3Rpb24oKXtyZXR1cm4oYj0oZCpiK2UpJWMpL2N9fX0oKTtkLnByb3RvdHlwZS5yYW5kb21TZWVkPWZ1bmN0aW9uKGEpe2guc2V0U2VlZChhKSxlPSEwLGY9ITF9LGQucHJvdG90eXBlLnJhbmRvbT1mdW5jdGlvbihhLGIpe3ZhciBjO2lmKGM9ZT9oLnJhbmQoKTpNYXRoLnJhbmRvbSgpLHZvaWQgMD09PWEpcmV0dXJuIGM7aWYodm9pZCAwPT09YilyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2FbTWF0aC5mbG9vcihjKmEubGVuZ3RoKV06YyphO2lmKGE+Yil7dmFyIGQ9YTthPWIsYj1kfXJldHVybiBjKihiLWEpK2F9LGQucHJvdG90eXBlLnJhbmRvbUdhdXNzaWFuPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGg7aWYoZiljPWcsZj0hMTtlbHNle2Rve2Q9dGhpcy5yYW5kb20oMiktMSxlPXRoaXMucmFuZG9tKDIpLTEsaD1kKmQrZSplfXdoaWxlKGg+PTEpO2g9TWF0aC5zcXJ0KC0yKk1hdGgubG9nKGgpL2gpLGM9ZCpoLGc9ZSpoLGY9ITB9dmFyIGk9YXx8MDtyZXR1cm4gYyooYnx8MSkraX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QucHJvdG90eXBlLl9hbmdsZU1vZGU9ZS5SQURJQU5TLGQucHJvdG90eXBlLmFjb3M9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYWNvcyhhKSl9LGQucHJvdG90eXBlLmFzaW49ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYXNpbihhKSl9LGQucHJvdG90eXBlLmF0YW49ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYXRhbihhKSl9LGQucHJvdG90eXBlLmF0YW4yPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYXRhbjIoYSxiKSl9LGQucHJvdG90eXBlLmNvcz1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5jb3ModGhpcy5fdG9SYWRpYW5zKGEpKX0sZC5wcm90b3R5cGUuc2luPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnNpbih0aGlzLl90b1JhZGlhbnMoYSkpfSxkLnByb3RvdHlwZS50YW49ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgudGFuKHRoaXMuX3RvUmFkaWFucyhhKSl9LGQucHJvdG90eXBlLmRlZ3JlZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEqZS5SQURfVE9fREVHfSxkLnByb3RvdHlwZS5yYWRpYW5zPWZ1bmN0aW9uKGEpe3JldHVybiBhKmUuREVHX1RPX1JBRH0sZC5wcm90b3R5cGUuYW5nbGVNb2RlPWZ1bmN0aW9uKGEpe2EhPT1lLkRFR1JFRVMmJmEhPT1lLlJBRElBTlN8fCh0aGlzLl9hbmdsZU1vZGU9YSl9LGQucHJvdG90eXBlLl90b1JhZGlhbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2FuZ2xlTW9kZT09PWUuREVHUkVFUz9hKmUuREVHX1RPX1JBRDphfSxkLnByb3RvdHlwZS5fdG9EZWdyZWVzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hbmdsZU1vZGU9PT1lLlJBRElBTlM/YSplLlJBRF9UT19ERUc6YX0sZC5wcm90b3R5cGUuX2Zyb21SYWRpYW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hbmdsZU1vZGU9PT1lLkRFR1JFRVM/YSplLlJBRF9UT19ERUc6YX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDU3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS50ZXh0QWxpZ249ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dEFsaWduXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0QWxpZ24uYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dExlYWRpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRMZWFkaW5nXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0TGVhZGluZy5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0U2l6ZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dFNpemVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRTaXplLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRTdHlsZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dFN0eWxlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0U3R5bGUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dFdpZHRoPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0V2lkdGhcIixhcmd1bWVudHMpLDA9PT1hLmxlbmd0aD8wOnRoaXMuX3JlbmRlcmVyLnRleHRXaWR0aC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0QXNjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRBc2NlbnRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRBc2NlbnQoKX0sZC5wcm90b3R5cGUudGV4dERlc2NlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dERlc2NlbnRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHREZXNjZW50KCl9LGQucHJvdG90eXBlLl91cGRhdGVUZXh0TWV0cmljcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fdXBkYXRlVGV4dE1ldHJpY3MoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpLGY9YShcIm9wZW50eXBlLmpzXCIpO2EoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUubG9hZEZvbnQ9ZnVuY3Rpb24oYSxiLGMpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRGb250XCIsYXJndW1lbnRzKTt2YXIgZT1uZXcgZC5Gb250KHRoaXMpLGc9dGhpcztyZXR1cm4gZi5sb2FkKGEsZnVuY3Rpb24oZixoKXtpZihmKXJldHVybiB2b2lkIDAhPT1jP2MoZik6KGQuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig0LGEpLHZvaWQgY29uc29sZS5lcnJvcihmLGEpKTtlLmZvbnQ9aCx2b2lkIDAhPT1iJiZiKGUpLGcuX2RlY3JlbWVudFByZWxvYWQoKTt2YXIgaSxqLGs9W1widHRmXCIsXCJvdGZcIixcIndvZmZcIixcIndvZmYyXCJdLGw9YS5zcGxpdChcIlxcXFxcIikucG9wKCkuc3BsaXQoXCIvXCIpLnBvcCgpLG09bC5sYXN0SW5kZXhPZihcIi5cIiksbj1tPDE/bnVsbDpsLnN1YnN0cihtKzEpO2suaW5kZXhPZihuKT4tMSYmKGk9bC5zdWJzdHIoMCxtKSxqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSxqLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXFxuQGZvbnQtZmFjZSB7XFxuZm9udC1mYW1pbHk6IFwiK2krXCI7XFxuc3JjOiB1cmwoXCIrYStcIik7XFxufVxcblwiKSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChqKSl9KSxlfSxkLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGEsYixjLGUsZil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGx8fHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZT90aGlzLl9yZW5kZXJlci50ZXh0LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk6dGhpc30sZC5wcm90b3R5cGUudGV4dEZvbnQ9ZnVuY3Rpb24oYSxiKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0Rm9udFwiLGFyZ3VtZW50cyksYXJndW1lbnRzLmxlbmd0aCl7aWYoIWEpdGhyb3cgbmV3IEVycm9yKFwibnVsbCBmb250IHBhc3NlZCB0byB0ZXh0Rm9udFwiKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX3RleHRGb250XCIsYSksYiYmKHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl90ZXh0U2l6ZVwiLGIpLHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl90ZXh0TGVhZGluZ1wiLGIqZS5fREVGQVVMVF9MRUFETVVMVCkpLHRoaXMuX3JlbmRlcmVyLl9hcHBseVRleHRQcm9wZXJ0aWVzKCl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl90ZXh0Rm9udH0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0LFwib3BlbnR5cGUuanNcIjoxMH1dLDU5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgYz1oKGIse3NhbXBsZUZhY3RvcjouMSxzaW1wbGlmeVRocmVzaG9sZDowfSksZD1uKGEsMCwxKSxmPWQvKGQqYy5zYW1wbGVGYWN0b3IpLGc9W10saT0wO2k8ZDtpKz1mKWcucHVzaChuKGEsaSkpO3JldHVybiBjLnNpbXBsaWZ5VGhyZXNob2xkJiZlKGcsYy5zaW1wbGlmeVRocmVzaG9sZCksZ31mdW5jdGlvbiBlKGEsYil7Yj12b2lkIDA9PT1iPzA6Yjtmb3IodmFyIGM9MCxkPWEubGVuZ3RoLTE7YS5sZW5ndGg+MyYmZD49MDstLWQpaihpKGEsZC0xKSxpKGEsZCksaShhLGQrMSksYikmJihhLnNwbGljZShkJWEubGVuZ3RoLDEpLGMrKyk7cmV0dXJuIGN9ZnVuY3Rpb24gZihhKXtmb3IodmFyIGIsYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKyspXCJNXCI9PT1hW2RdLnR5cGUmJihiJiZjLnB1c2goYiksYj1bXSksYi5wdXNoKGcoYVtkXSkpO3JldHVybiBjLnB1c2goYiksY31mdW5jdGlvbiBnKGEpe3ZhciBiPVthLnR5cGVdO3JldHVyblwiTVwiPT09YS50eXBlfHxcIkxcIj09PWEudHlwZT9iLnB1c2goYS54LGEueSk6XCJDXCI9PT1hLnR5cGU/Yi5wdXNoKGEueDEsYS55MSxhLngyLGEueTIsYS54LGEueSk6XCJRXCI9PT1hLnR5cGUmJmIucHVzaChhLngxLGEueTEsYS54LGEueSksYn1mdW5jdGlvbiBoKGEsYil7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGEpYT1iO2Vsc2UgZm9yKHZhciBjIGluIGIpdm9pZCAwPT09YVtjXSYmKGFbY109YltjXSk7cmV0dXJuIGF9ZnVuY3Rpb24gaShhLGIpe3ZhciBjPWEubGVuZ3RoO3JldHVybiBhW2I8MD9iJWMrYzpiJWNdfWZ1bmN0aW9uIGooYSxiLGMsZCl7aWYoIWQpcmV0dXJuIDA9PT1rKGEsYixjKTt2b2lkIDA9PT1qLnRtcFBvaW50MSYmKGoudG1wUG9pbnQxPVtdLGoudG1wUG9pbnQyPVtdKTt2YXIgZT1qLnRtcFBvaW50MSxmPWoudG1wUG9pbnQyO2UueD1iLngtYS54LGUueT1iLnktYS55LGYueD1jLngtYi54LGYueT1jLnktYi55O3ZhciBnPWUueCpmLngrZS55KmYueSxoPU1hdGguc3FydChlLngqZS54K2UueSplLnkpLGk9TWF0aC5zcXJ0KGYueCpmLngrZi55KmYueSk7cmV0dXJuIE1hdGguYWNvcyhnLyhoKmkpKTxkfWZ1bmN0aW9uIGsoYSxiLGMpe3JldHVybihiWzBdLWFbMF0pKihjWzFdLWFbMV0pLShjWzBdLWFbMF0pKihiWzFdLWFbMV0pfWZ1bmN0aW9uIGwoYSxiLGMsZCxlLGYsZyxoLGkpe3ZhciBqPTEtaSxrPU1hdGgucG93KGosMyksbD1NYXRoLnBvdyhqLDIpLG09aSppLG49bSppLG89ayphKzMqbCppKmMrMypqKmkqaSplK24qZyxwPWsqYiszKmwqaSpkKzMqaippKmkqZituKmgscT1hKzIqaSooYy1hKSttKihlLTIqYythKSxyPWIrMippKihkLWIpK20qKGYtMipkK2IpLHM9YysyKmkqKGUtYykrbSooZy0yKmUrYyksdD1kKzIqaSooZi1kKSttKihoLTIqZitkKSx1PWoqYStpKmMsdj1qKmIraSpkLHc9aiplK2kqZyx4PWoqZitpKmgseT05MC0xODAqTWF0aC5hdGFuMihxLXMsci10KS9NYXRoLlBJO3JldHVybihxPnN8fHI8dCkmJih5Kz0xODApLHt4Om8seTpwLG06e3g6cSx5OnJ9LG46e3g6cyx5OnR9LHN0YXJ0Ont4OnUseTp2fSxlbmQ6e3g6dyx5Onh9LGFscGhhOnl9fWZ1bmN0aW9uIG0oYSxiLGMsZCxlLGYsZyxoLGkpe3JldHVybiBudWxsPT1pP3UoYSxiLGMsZCxlLGYsZyxoKTpsKGEsYixjLGQsZSxmLGcsaCx2KGEsYixjLGQsZSxmLGcsaCxpKSl9ZnVuY3Rpb24gbihhLGIsYyl7YT1wKGEpO2Zvcih2YXIgZCxlLGYsZyxoLGk9XCJcIixqPXt9LGs9MCxuPTAsbz1hLmxlbmd0aDtuPG87bisrKXtpZihmPWFbbl0sXCJNXCI9PT1mWzBdKWQ9K2ZbMV0sZT0rZlsyXTtlbHNle2lmKGc9bShkLGUsZlsxXSxmWzJdLGZbM10sZls0XSxmWzVdLGZbNl0pLGsrZz5iJiYhYylyZXR1cm4gaD1tKGQsZSxmWzFdLGZbMl0sZlszXSxmWzRdLGZbNV0sZls2XSxiLWspLHt4OmgueCx5OmgueSxhbHBoYTpoLmFscGhhfTtrKz1nLGQ9K2ZbNV0sZT0rZls2XX1pKz1mLnNoaWZ0KCkrZn1yZXR1cm4gai5lbmQ9aSxoPWM/azpsKGQsZSxmWzBdLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSwxKSxoLmFscGhhJiYoaD17eDpoLngseTpoLnksYWxwaGE6aC5hbHBoYX0pLGh9ZnVuY3Rpb24gbyhhKXt2YXIgYj1bXSxjPTAsZD0wLGU9MCxmPTAsZz0wO2lmKCFhKXJldHVybiBiO1wiTVwiPT09YVswXVswXSYmKGM9K2FbMF1bMV0sZD0rYVswXVsyXSxlPWMsZj1kLGcrKyxiWzBdPVtcIk1cIixjLGRdKTtmb3IodmFyIGgsaSxqLGs9Mz09PWEubGVuZ3RoJiZcIk1cIj09PWFbMF1bMF0mJlwiUlwiPT09YVsxXVswXS50b1VwcGVyQ2FzZSgpJiZcIlpcIj09PWFbMl1bMF0udG9VcHBlckNhc2UoKSxsPWcsbT1hLmxlbmd0aDtsPG07bCsrKXtpZihiLnB1c2goaT1bXSksaj1hW2xdLGpbMF0hPT1TdHJpbmcucHJvdG90eXBlLnRvVXBwZXJDYXNlLmNhbGwoalswXSkpc3dpdGNoKGlbMF09U3RyaW5nLnByb3RvdHlwZS50b1VwcGVyQ2FzZS5jYWxsKGpbMF0pLGlbMF0pe2Nhc2VcIkFcIjppWzFdPWpbMV0saVsyXT1qWzJdLGlbM109alszXSxpWzRdPWpbNF0saVs1XT1qWzVdLGlbNl09KyhqWzZdK2MpLGlbN109KyhqWzddK2QpO2JyZWFrO2Nhc2VcIlZcIjppWzFdPStqWzFdK2Q7YnJlYWs7Y2FzZVwiSFwiOmlbMV09K2pbMV0rYzticmVhaztjYXNlXCJSXCI6aD1bYyxkXS5jb25jYXQoai5zbGljZSgxKSk7Zm9yKHZhciBuPTIsbz1oLmxlbmd0aDtuPG87bisrKWhbbl09K2hbbl0rYyxoWysrbl09K2hbbl0rZDtiLnBvcCgpLGI9Yi5jb25jYXQocihoLGspKTticmVhaztjYXNlXCJNXCI6ZT0ralsxXStjLGY9K2pbMl0rZDticmVhaztkZWZhdWx0OmZvcihuPTEsbz1qLmxlbmd0aDtuPG87bisrKWlbbl09K2pbbl0rKG4lMj9jOmQpfWVsc2UgaWYoXCJSXCI9PT1qWzBdKWg9W2MsZF0uY29uY2F0KGouc2xpY2UoMSkpLGIucG9wKCksYj1iLmNvbmNhdChyKGgsaykpLGk9W1wiUlwiXS5jb25jYXQoai5zbGljZSgtMikpO2Vsc2UgZm9yKHZhciBwPTAscT1qLmxlbmd0aDtwPHE7cCsrKWlbcF09altwXTtzd2l0Y2goaVswXSl7Y2FzZVwiWlwiOmM9ZSxkPWY7YnJlYWs7Y2FzZVwiSFwiOmM9aVsxXTticmVhaztjYXNlXCJWXCI6ZD1pWzFdO2JyZWFrO2Nhc2VcIk1cIjplPWlbaS5sZW5ndGgtMl0sZj1pW2kubGVuZ3RoLTFdO2JyZWFrO2RlZmF1bHQ6Yz1pW2kubGVuZ3RoLTJdLGQ9aVtpLmxlbmd0aC0xXX19cmV0dXJuIGJ9ZnVuY3Rpb24gcChhLGIpe3ZhciBjLGQ9byhhKSxlPWImJm8oYiksZj17eDowLHk6MCxieDowLGJ5OjAsWDowLFk6MCxxeDpudWxsLHF5Om51bGx9LGc9e3g6MCx5OjAsYng6MCxieTowLFg6MCxZOjAscXg6bnVsbCxxeTpudWxsfSxoPVtdLGk9W10saj1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXtUOjEsUToxfTtpZighYSlyZXR1cm5bXCJDXCIsYi54LGIueSxiLngsYi55LGIueCxiLnldO3N3aXRjaChhWzBdaW4gZnx8KGIucXg9Yi5xeT1udWxsKSxhWzBdKXtjYXNlXCJNXCI6Yi5YPWFbMV0sYi5ZPWFbMl07YnJlYWs7Y2FzZVwiQVwiOmE9W1wiQ1wiXS5jb25jYXQocS5hcHBseSgwLFtiLngsYi55XS5jb25jYXQoYS5zbGljZSgxKSkpKTticmVhaztjYXNlXCJTXCI6XCJDXCI9PT1jfHxcIlNcIj09PWM/KGQ9MipiLngtYi5ieCxlPTIqYi55LWIuYnkpOihkPWIueCxlPWIueSksYT1bXCJDXCIsZCxlXS5jb25jYXQoYS5zbGljZSgxKSk7YnJlYWs7Y2FzZVwiVFwiOlwiUVwiPT09Y3x8XCJUXCI9PT1jPyhiLnF4PTIqYi54LWIucXgsYi5xeT0yKmIueS1iLnF5KTooYi5xeD1iLngsYi5xeT1iLnkpLGE9W1wiQ1wiXS5jb25jYXQodChiLngsYi55LGIucXgsYi5xeSxhWzFdLGFbMl0pKTticmVhaztjYXNlXCJRXCI6Yi5xeD1hWzFdLGIucXk9YVsyXSxhPVtcIkNcIl0uY29uY2F0KHQoYi54LGIueSxhWzFdLGFbMl0sYVszXSxhWzRdKSk7YnJlYWs7Y2FzZVwiTFwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGFbMV0sYVsyXSkpO2JyZWFrO2Nhc2VcIkhcIjphPVtcIkNcIl0uY29uY2F0KHMoYi54LGIueSxhWzFdLGIueSkpO2JyZWFrO2Nhc2VcIlZcIjphPVtcIkNcIl0uY29uY2F0KHMoYi54LGIueSxiLngsYVsxXSkpO2JyZWFrO2Nhc2VcIlpcIjphPVtcIkNcIl0uY29uY2F0KHMoYi54LGIueSxiLlgsYi5ZKSl9cmV0dXJuIGF9LGs9ZnVuY3Rpb24oYSxiKXtpZihhW2JdLmxlbmd0aD43KXthW2JdLnNoaWZ0KCk7Zm9yKHZhciBmPWFbYl07Zi5sZW5ndGg7KWhbYl09XCJBXCIsZSYmKGlbYl09XCJBXCIpLGEuc3BsaWNlKGIrKywwLFtcIkNcIl0uY29uY2F0KGYuc3BsaWNlKDAsNikpKTthLnNwbGljZShiLDEpLGM9TWF0aC5tYXgoZC5sZW5ndGgsZSYmZS5sZW5ndGh8fDApfX0sbD1mdW5jdGlvbihhLGIsZixnLGgpe2EmJmImJlwiTVwiPT09YVtoXVswXSYmXCJNXCIhPT1iW2hdWzBdJiYoYi5zcGxpY2UoaCwwLFtcIk1cIixnLngsZy55XSksZi5ieD0wLGYuYnk9MCxmLng9YVtoXVsxXSxmLnk9YVtoXVsyXSxjPU1hdGgubWF4KGQubGVuZ3RoLGUmJmUubGVuZ3RofHwwKSl9LG09XCJcIixuPVwiXCI7Yz1NYXRoLm1heChkLmxlbmd0aCxlJiZlLmxlbmd0aHx8MCk7Zm9yKHZhciBwPTA7cDxjO3ArKyl7ZFtwXSYmKG09ZFtwXVswXSksXCJDXCIhPT1tJiYoaFtwXT1tLHAmJihuPWhbcC0xXSkpLGRbcF09aihkW3BdLGYsbiksXCJBXCIhPT1oW3BdJiZcIkNcIj09PW0mJihoW3BdPVwiQ1wiKSxrKGQscCksZSYmKGVbcF0mJihtPWVbcF1bMF0pLFwiQ1wiIT09bSYmKGlbcF09bSxwJiYobj1pW3AtMV0pKSxlW3BdPWooZVtwXSxnLG4pLFwiQVwiIT09aVtwXSYmXCJDXCI9PT1tJiYoaVtwXT1cIkNcIiksayhlLHApKSxsKGQsZSxmLGcscCksbChlLGQsZyxmLHApO3ZhciByPWRbcF0sdT1lJiZlW3BdLHY9ci5sZW5ndGgsdz1lJiZ1Lmxlbmd0aDtmLng9clt2LTJdLGYueT1yW3YtMV0sZi5ieD1wYXJzZUZsb2F0KHJbdi00XSl8fGYueCxmLmJ5PXBhcnNlRmxvYXQoclt2LTNdKXx8Zi55LGcuYng9ZSYmKHBhcnNlRmxvYXQodVt3LTRdKXx8Zy54KSxnLmJ5PWUmJihwYXJzZUZsb2F0KHVbdy0zXSl8fGcueSksZy54PWUmJnVbdy0yXSxnLnk9ZSYmdVt3LTFdfXJldHVybiBlP1tkLGVdOmR9ZnVuY3Rpb24gcShhLGIsYyxkLGUsZixnLGgsaSxqKXt2YXIgayxsLG0sbixvLHA9TWF0aC5QSSxyPTEyMCpwLzE4MCxzPXAvMTgwKigrZXx8MCksdD1bXSx1PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm57eDphKk1hdGguY29zKGMpLWIqTWF0aC5zaW4oYykseTphKk1hdGguc2luKGMpK2IqTWF0aC5jb3MoYyl9fTtpZihqKWs9alswXSxsPWpbMV0sbT1qWzJdLG49alszXTtlbHNle289dShhLGIsLXMpLGE9by54LGI9by55LG89dShoLGksLXMpLGg9by54LGk9by55O3ZhciB2PShhLWgpLzIsdz0oYi1pKS8yLHg9dip2LyhjKmMpK3cqdy8oZCpkKTt4PjEmJih4PU1hdGguc3FydCh4KSxjKj14LGQqPXgpO3ZhciB5PWMqYyx6PWQqZCxBPShmPT09Zz8tMToxKSpNYXRoLnNxcnQoTWF0aC5hYnMoKHkqei15Kncqdy16KnYqdikvKHkqdyp3K3oqdip2KSkpO209QSpjKncvZCsoYStoKS8yLG49QSotZCp2L2MrKGIraSkvMixrPU1hdGguYXNpbigoKGItbikvZCkudG9GaXhlZCg5KSksbD1NYXRoLmFzaW4oKChpLW4pL2QpLnRvRml4ZWQoOSkpLGs9YTxtP3AtazprLGw9aDxtP3AtbDpsLGs8MCYmKGs9MipwK2spLGw8MCYmKGw9MipwK2wpLGcmJms+bCYmKGstPTIqcCksIWcmJmw+ayYmKGwtPTIqcCl9dmFyIEI9bC1rO2lmKE1hdGguYWJzKEIpPnIpe3ZhciBDPWwsRD1oLEU9aTtsPWsrciooZyYmbD5rPzE6LTEpLGg9bStjKk1hdGguY29zKGwpLGk9bitkKk1hdGguc2luKGwpLHQ9cShoLGksYyxkLGUsMCxnLEQsRSxbbCxDLG0sbl0pfUI9bC1rO3ZhciBGPU1hdGguY29zKGspLEc9TWF0aC5zaW4oayksSD1NYXRoLmNvcyhsKSxJPU1hdGguc2luKGwpLEo9TWF0aC50YW4oQi80KSxLPTQvMypjKkosTD00LzMqZCpKLE09W2EsYl0sTj1bYStLKkcsYi1MKkZdLE89W2grSypJLGktTCpIXSxQPVtoLGldO2lmKE5bMF09MipNWzBdLU5bMF0sTlsxXT0yKk1bMV0tTlsxXSxqKXJldHVybltOLE8sUF0uY29uY2F0KHQpO3Q9W04sTyxQXS5jb25jYXQodCkuam9pbigpLnNwbGl0KFwiLFwiKTtmb3IodmFyIFE9W10sUj0wLFM9dC5sZW5ndGg7UjxTO1IrKylRW1JdPVIlMj91KHRbUi0xXSx0W1JdLHMpLnk6dSh0W1JdLHRbUisxXSxzKS54O3JldHVybiBRfWZ1bmN0aW9uIHIoYSxiKXtmb3IodmFyIGM9W10sZD0wLGU9YS5sZW5ndGg7ZS0yKiFiPmQ7ZCs9Mil7dmFyIGY9W3t4OithW2QtMl0seTorYVtkLTFdfSx7eDorYVtkXSx5OithW2QrMV19LHt4OithW2QrMl0seTorYVtkKzNdfSx7eDorYVtkKzRdLHk6K2FbZCs1XX1dO2I/ZD9lLTQ9PT1kP2ZbM109e3g6K2FbMF0seTorYVsxXX06ZS0yPT09ZCYmKGZbMl09e3g6K2FbMF0seTorYVsxXX0sZlszXT17eDorYVsyXSx5OithWzNdfSk6ZlswXT17eDorYVtlLTJdLHk6K2FbZS0xXX06ZS00PT09ZD9mWzNdPWZbMl06ZHx8KGZbMF09e3g6K2FbZF0seTorYVtkKzFdfSksYy5wdXNoKFtcIkNcIiwoLWZbMF0ueCs2KmZbMV0ueCtmWzJdLngpLzYsKC1mWzBdLnkrNipmWzFdLnkrZlsyXS55KS82LChmWzFdLngrNipmWzJdLngtZlszXS54KS82LChmWzFdLnkrNipmWzJdLnktZlszXS55KS82LGZbMl0ueCxmWzJdLnldKX1yZXR1cm4gY31mdW5jdGlvbiBzKGEsYixjLGQpe3JldHVyblthLGIsYyxkLGMsZF19ZnVuY3Rpb24gdChhLGIsYyxkLGUsZil7dmFyIGc9MS8zLGg9Mi8zO3JldHVybltnKmEraCpjLGcqYitoKmQsZyplK2gqYyxnKmYraCpkLGUsZl19ZnVuY3Rpb24gdShhLGIsYyxkLGUsZixnLGgsaSl7bnVsbD09aSYmKGk9MSksaT1pPjE/MTppPDA/MDppO2Zvcih2YXIgaj1pLzIsaz0xMixsPVstLjEyNTIsLjEyNTIsLS4zNjc4LC4zNjc4LC0uNTg3MywuNTg3MywtLjc2OTksLjc2OTksLS45MDQxLC45MDQxLC0uOTgxNiwuOTgxNl0sbT0wLG49Wy4yNDkxLC4yNDkxLC4yMzM1LC4yMzM1LC4yMDMyLC4yMDMyLC4xNjAxLC4xNjAxLC4xMDY5LC4xMDY5LC4wNDcyLC4wNDcyXSxvPTA7bzxrO28rKyl7dmFyIHA9aipsW29dK2oscT13KHAsYSxjLGUsZykscj13KHAsYixkLGYsaCkscz1xKnErcipyO20rPW5bb10qTWF0aC5zcXJ0KHMpfXJldHVybiBqKm19ZnVuY3Rpb24gdihhLGIsYyxkLGUsZixnLGgsaSl7aWYoIShpPDB8fHUoYSxiLGMsZCxlLGYsZyxoKTxpKSl7dmFyIGosaz0xLGw9ay8yLG09ay1sLG49LjAxO2ZvcihqPXUoYSxiLGMsZCxlLGYsZyxoLG0pO01hdGguYWJzKGotaSk+bjspbC89MixtKz0oajxpPzE6LTEpKmwsaj11KGEsYixjLGQsZSxmLGcsaCxtKTtyZXR1cm4gbX19ZnVuY3Rpb24gdyhhLGIsYyxkLGUpe3JldHVybiBhKihhKigtMypiKzkqYy05KmQrMyplKSs2KmItMTIqYys2KmQpLTMqYiszKmN9ZnVuY3Rpb24geCgpe2Zvcih2YXIgYT1cIlwiLGI9YXJndW1lbnRzLmxlbmd0aC0xO2I+PTA7LS1iKXt2YXIgYz1hcmd1bWVudHNbYl07YSs9Yz09PU9iamVjdChjKT9KU09OLnN0cmluZ2lmeShjKTpjfXJldHVybiBhfXZhciB5PWEoXCIuLi9jb3JlL21haW5cIiksej1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7eS5Gb250PWZ1bmN0aW9uKGEpe3RoaXMucGFyZW50PWEsdGhpcy5jYWNoZT17fSx0aGlzLmZvbnQ9dm9pZCAwfSx5LkZvbnQucHJvdG90eXBlLmxpc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJub3QgeWV0IGltcGxlbWVudGVkXCIpfSx5LkZvbnQucHJvdG90eXBlLnRleHRCb3VuZHM9ZnVuY3Rpb24oYSxiLGMsZCxlKXtiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD1kfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIuX3RleHRTaXplO3ZhciBmPWUmJmUucmVuZGVyZXImJmUucmVuZGVyZXIuX3BJbnN0fHx0aGlzLnBhcmVudCxnPWYuX3JlbmRlcmVyLGg9Zy5fdGV4dEFsaWdufHx6LkxFRlQsaT1nLl90ZXh0QmFzZWxpbmV8fHouQkFTRUxJTkUsaj14KFwidGV4dEJvdW5kc1wiLGEsYixjLGQsaCxpKSxrPXRoaXMuY2FjaGVbal07aWYoIWspe3ZhciBsLG0sbixvLHAscT1bXSxyPVtdLHM9dGhpcy5fc2NhbGUoZCk7dGhpcy5mb250LmZvckVhY2hHbHlwaChhLGIsYyxkLGUsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YS5nZXRNZXRyaWNzKCk7cS5wdXNoKGIrZS54TWluKnMpLHEucHVzaChiK2UueE1heCpzKSxyLnB1c2goYystZS55TWluKnMpLHIucHVzaChjKy1lLnlNYXgqcyl9KSxsPU1hdGgubWluLmFwcGx5KG51bGwscSksbT1NYXRoLm1pbi5hcHBseShudWxsLHIpLG49TWF0aC5tYXguYXBwbHkobnVsbCxxKSxvPU1hdGgubWF4LmFwcGx5KG51bGwsciksaz17eDpsLHk6bSxoOm8tbSx3Om4tbCxhZHZhbmNlOmwtYn0scD10aGlzLl9oYW5kbGVBbGlnbm1lbnQoZyxhLGsueCxrLnksay53K2suYWR2YW5jZSksay54PXAueCxrLnk9cC55LHRoaXMuY2FjaGVbeChcInRleHRCb3VuZHNcIixhLGIsYyxkLGgsaSldPWt9cmV0dXJuIGt9LHkuRm9udC5wcm90b3R5cGUudGV4dFRvUG9pbnRzPWZ1bmN0aW9uKGEsYixjLGUsZyl7ZnVuY3Rpb24gaChiKXtyZXR1cm4ga1tiXS5uYW1lJiZcInNwYWNlXCI9PT1rW2JdLm5hbWV8fGEubGVuZ3RoPT09ay5sZW5ndGgmJlwiIFwiPT09YVtiXXx8a1tiXS5pbmRleCYmMz09PWtbYl0uaW5kZXh9dmFyIGk9MCxqPVtdLGs9dGhpcy5fZ2V0R2x5cGhzKGEpO2U9ZXx8dGhpcy5wYXJlbnQuX3JlbmRlcmVyLl90ZXh0U2l6ZTtmb3IodmFyIGw9MDtsPGsubGVuZ3RoO2wrKyl7aWYoIWgobCkpZm9yKHZhciBtPWtbbF0uZ2V0UGF0aChiLGMsZSksbj1mKG0uY29tbWFuZHMpLG89MDtvPG4ubGVuZ3RoO28rKylmb3IodmFyIHA9ZChuW29dLGcpLHE9MDtxPHAubGVuZ3RoO3ErKylwW3FdLngrPWksai5wdXNoKHBbcV0pO2krPWtbbF0uYWR2YW5jZVdpZHRoKnRoaXMuX3NjYWxlKGUpfXJldHVybiBqfSx5LkZvbnQucHJvdG90eXBlLl9nZXRHbHlwaHM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZm9udC5zdHJpbmdUb0dseXBocyhhKX0seS5Gb250LnByb3RvdHlwZS5fZ2V0UGF0aD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kJiZkLnJlbmRlcmVyJiZkLnJlbmRlcmVyLl9wSW5zdHx8dGhpcy5wYXJlbnQsZj1lLl9yZW5kZXJlcixnPXRoaXMuX2hhbmRsZUFsaWdubWVudChmLGEsYixjKTtyZXR1cm4gdGhpcy5mb250LmdldFBhdGgoYSxnLngsZy55LGYuX3RleHRTaXplLGQpfSx5LkZvbnQucHJvdG90eXBlLl9nZXRQYXRoRGF0YT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0zO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhJiZhcmd1bWVudHMubGVuZ3RoPjI/YT10aGlzLl9nZXRQYXRoKGEsYixjLGQpOlwib2JqZWN0XCI9PXR5cGVvZiBiJiYoZD1iKSxkJiZcIm51bWJlclwiPT10eXBlb2YgZC5kZWNpbWFscyYmKGU9ZC5kZWNpbWFscyksYS50b1BhdGhEYXRhKGUpfSx5LkZvbnQucHJvdG90eXBlLl9nZXRTVkc9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9MztyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYSYmYXJndW1lbnRzLmxlbmd0aD4yP2E9dGhpcy5fZ2V0UGF0aChhLGIsYyxkKTpcIm9iamVjdFwiPT10eXBlb2YgYiYmKGQ9YiksZCYmKFwibnVtYmVyXCI9PXR5cGVvZiBkLmRlY2ltYWxzJiYoZT1kLmRlY2ltYWxzKSxcIm51bWJlclwiPT10eXBlb2YgZC5zdHJva2VXaWR0aCYmKGEuc3Ryb2tlV2lkdGg9ZC5zdHJva2VXaWR0aCksdm9pZCAwIT09ZC5maWxsJiYoYS5maWxsPWQuZmlsbCksdm9pZCAwIT09ZC5zdHJva2UmJihhLnN0cm9rZT1kLnN0cm9rZSkpLGEudG9TVkcoZSl9LHkuRm9udC5wcm90b3R5cGUuX3JlbmRlclBhdGg9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZj1kJiZkLnJlbmRlcmVyfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIsZz1mLmRyYXdpbmdDb250ZXh0O2U9XCJvYmplY3RcIj09dHlwZW9mIGEmJmEuY29tbWFuZHM/YS5jb21tYW5kczp0aGlzLl9nZXRQYXRoKGEsYixjLGQpLmNvbW1hbmRzLGcuYmVnaW5QYXRoKCk7Zm9yKHZhciBoPTA7aDxlLmxlbmd0aDtoKz0xKXt2YXIgaT1lW2hdO1wiTVwiPT09aS50eXBlP2cubW92ZVRvKGkueCxpLnkpOlwiTFwiPT09aS50eXBlP2cubGluZVRvKGkueCxpLnkpOlwiQ1wiPT09aS50eXBlP2cuYmV6aWVyQ3VydmVUbyhpLngxLGkueTEsaS54MixpLnkyLGkueCxpLnkpOlwiUVwiPT09aS50eXBlP2cucXVhZHJhdGljQ3VydmVUbyhpLngxLGkueTEsaS54LGkueSk6XCJaXCI9PT1pLnR5cGUmJmcuY2xvc2VQYXRoKCl9cmV0dXJuIGYuX2RvU3Ryb2tlJiZmLl9zdHJva2VTZXQmJmcuc3Ryb2tlKCksZi5fZG9GaWxsJiYoZi5fZmlsbFNldHx8Zi5fc2V0RmlsbCh6Ll9ERUZBVUxUX1RFWFRfRklMTCksZy5maWxsKCkpLHRoaXN9LHkuRm9udC5wcm90b3R5cGUuX3RleHRXaWR0aD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmZvbnQuZ2V0QWR2YW5jZVdpZHRoKGEsYil9LHkuRm9udC5wcm90b3R5cGUuX3RleHRBc2NlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZm9udC5hc2NlbmRlcip0aGlzLl9zY2FsZShhKX0seS5Gb250LnByb3RvdHlwZS5fdGV4dERlc2NlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuLXRoaXMuZm9udC5kZXNjZW5kZXIqdGhpcy5fc2NhbGUoYSl9LHkuRm9udC5wcm90b3R5cGUuX3NjYWxlPWZ1bmN0aW9uKGEpe3JldHVybiAxL3RoaXMuZm9udC51bml0c1BlckVtKihhfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIuX3RleHRTaXplKX0seS5Gb250LnByb3RvdHlwZS5faGFuZGxlQWxpZ25tZW50PWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9YS5fdGV4dFNpemU7c3dpdGNoKHZvaWQgMD09PWUmJihlPXRoaXMuX3RleHRXaWR0aChiLGYpKSxhLl90ZXh0QWxpZ24pe2Nhc2Ugei5DRU5URVI6Yy09ZS8yO2JyZWFrO2Nhc2Ugei5SSUdIVDpjLT1lfXN3aXRjaChhLl90ZXh0QmFzZWxpbmUpe2Nhc2Ugei5UT1A6ZCs9dGhpcy5fdGV4dEFzY2VudChmKTticmVhaztjYXNlIHouQ0VOVEVSOmQrPXRoaXMuX3RleHRBc2NlbnQoZikvMjticmVhaztjYXNlIHouQk9UVE9NOmQtPXRoaXMuX3RleHREZXNjZW50KGYpfXJldHVybnt4OmMseTpkfX0sYi5leHBvcnRzPXl9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDYwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5wdXNoKGIpLGF9LGQucHJvdG90eXBlLmFycmF5Q29weT1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7dm9pZCAwIT09ZT8oZz1NYXRoLm1pbihlLGEubGVuZ3RoKSxmPWQsYT1hLnNsaWNlKGIsZytiKSk6KHZvaWQgMCE9PWM/KGc9YyxnPU1hdGgubWluKGcsYS5sZW5ndGgpKTpnPWEubGVuZ3RoLGY9MCxjPWIsYT1hLnNsaWNlKDAsZykpLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoYyxbZixnXS5jb25jYXQoYSkpfSxkLnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5jb25jYXQoYil9LGQucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmV2ZXJzZSgpfSxkLnByb3RvdHlwZS5zaG9ydGVuPWZ1bmN0aW9uKGEpe3JldHVybiBhLnBvcCgpLGF9LGQucHJvdG90eXBlLnNodWZmbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1BcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3JiZBcnJheUJ1ZmZlci5pc1ZpZXcoYSk7YT1ifHxjP2E6YS5zbGljZSgpO2Zvcih2YXIgZCxlLGY9YS5sZW5ndGg7Zj4xOylkPU1hdGgucmFuZG9tKCkqZnwwLGU9YVstLWZdLGFbZl09YVtkXSxhW2RdPWU7cmV0dXJuIGF9LGQucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iP2Euc2xpY2UoMCxNYXRoLm1pbihiLGEubGVuZ3RoKSk6YSxkPWI/YS5zbGljZShNYXRoLm1pbihiLGEubGVuZ3RoKSk6W107cmV0dXJuIGM9XCJzdHJpbmdcIj09dHlwZW9mIGNbMF0/Yy5zb3J0KCk6Yy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEtYn0pLGMuY29uY2F0KGQpfSxkLnByb3RvdHlwZS5zcGxpY2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGEsW2MsMF0uY29uY2F0KGIpKSxhfSxkLnByb3RvdHlwZS5zdWJzZXQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB2b2lkIDAhPT1jP2Euc2xpY2UoYixiK2MpOmEuc2xpY2UoYixhLmxlbmd0aCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDYxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5mbG9hdD1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKHBhcnNlRmxvYXQpOnBhcnNlRmxvYXQoYSl9LGQucHJvdG90eXBlLmludD1mdW5jdGlvbihhLGIpe3JldHVybiBiPWJ8fDEwLFwic3RyaW5nXCI9PXR5cGVvZiBhP3BhcnNlSW50KGEsYik6XCJudW1iZXJcIj09dHlwZW9mIGE/MHxhOlwiYm9vbGVhblwiPT10eXBlb2YgYT9hPzE6MDphIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGQucHJvdG90eXBlLmludChhLGIpfSk6dm9pZCAwfSxkLnByb3RvdHlwZS5zdHI9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChkLnByb3RvdHlwZS5zdHIpOlN0cmluZyhhKX0sZC5wcm90b3R5cGUuYm9vbGVhbj1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYT8wIT09YTpcInN0cmluZ1wiPT10eXBlb2YgYT9cInRydWVcIj09PWEudG9Mb3dlckNhc2UoKTpcImJvb2xlYW5cIj09dHlwZW9mIGE/YTphIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUuYm9vbGVhbik6dm9pZCAwfSxkLnByb3RvdHlwZS5ieXRlPWZ1bmN0aW9uKGEpe3ZhciBiPWQucHJvdG90eXBlLmludChhLDEwKTtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYj8oYisxMjgpJTI1Ni0xMjg6YiBpbnN0YW5jZW9mIEFycmF5P2IubWFwKGQucHJvdG90eXBlLmJ5dGUpOnZvaWQgMH0sZC5wcm90b3R5cGUuY2hhcj1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgYXx8aXNOYU4oYSk/YSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLmNoYXIpOlwic3RyaW5nXCI9PXR5cGVvZiBhP2QucHJvdG90eXBlLmNoYXIocGFyc2VJbnQoYSwxMCkpOnZvaWQgMDpTdHJpbmcuZnJvbUNoYXJDb2RlKGEpfSxkLnByb3RvdHlwZS51bmNoYXI9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGEmJjE9PT1hLmxlbmd0aD9hLmNoYXJDb2RlQXQoMCk6YSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLnVuY2hhcik6dm9pZCAwfSxkLnByb3RvdHlwZS5oZXg9ZnVuY3Rpb24oYSxiKXtpZihiPXZvaWQgMD09PWJ8fG51bGw9PT1iP2I9ODpiLGEgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGQucHJvdG90eXBlLmhleChhLGIpfSk7aWYoXCJudW1iZXJcIj09dHlwZW9mIGEpe2E8MCYmKGE9NDI5NDk2NzI5NSthKzEpO2Zvcih2YXIgYz1OdW1iZXIoYSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7Yy5sZW5ndGg8YjspYz1cIjBcIitjO3JldHVybiBjLmxlbmd0aD49YiYmKGM9Yy5zdWJzdHJpbmcoYy5sZW5ndGgtYixjLmxlbmd0aCkpLGN9fSxkLnByb3RvdHlwZS51bmhleD1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLnVuaGV4KTpwYXJzZUludChcIjB4XCIrYSwxNil9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDYyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyl7dmFyIGQ9YTwwLGU9ZD9hLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDEpOmEudG9TdHJpbmcoKSxmPWUuaW5kZXhPZihcIi5cIiksZz0tMSE9PWY/ZS5zdWJzdHJpbmcoMCxmKTplLGg9LTEhPT1mP2Uuc3Vic3RyaW5nKGYrMSk6XCJcIixpPWQ/XCItXCI6XCJcIjtpZih2b2lkIDAhPT1jKXt2YXIgaj1cIlwiOygtMSE9PWZ8fGMtaC5sZW5ndGg+MCkmJihqPVwiLlwiKSxoLmxlbmd0aD5jJiYoaD1oLnN1YnN0cmluZygwLGMpKTtmb3IodmFyIGs9MDtrPGItZy5sZW5ndGg7aysrKWkrPVwiMFwiO2krPWcsaSs9aixpKz1oO2Zvcih2YXIgbD0wO2w8Yy1oLmxlbmd0aDtsKyspaSs9XCIwXCI7cmV0dXJuIGl9Zm9yKHZhciBtPTA7bTxNYXRoLm1heChiLWcubGVuZ3RoLDApO20rKylpKz1cIjBcIjtyZXR1cm4gaSs9ZX1mdW5jdGlvbiBlKGEsYil7YT1hLnRvU3RyaW5nKCk7dmFyIGM9YS5pbmRleE9mKFwiLlwiKSxkPS0xIT09Yz9hLnN1YnN0cmluZyhjKTpcIlwiLGU9LTEhPT1jP2Euc3Vic3RyaW5nKDAsYyk6YTtpZihlPWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLFwiLFwiKSwwPT09YilkPVwiXCI7ZWxzZSBpZih2b2lkIDAhPT1iKWlmKGI+ZC5sZW5ndGgpe2QrPS0xPT09Yz9cIi5cIjpcIlwiO2Zvcih2YXIgZj1iLWQubGVuZ3RoKzEsZz0wO2c8ZjtnKyspZCs9XCIwXCJ9ZWxzZSBkPWQuc3Vic3RyaW5nKDAsYisxKTtyZXR1cm4gZStkfWZ1bmN0aW9uIGYoYSl7cmV0dXJuIHBhcnNlRmxvYXQoYSk+MD9cIitcIithLnRvU3RyaW5nKCk6YS50b1N0cmluZygpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIHBhcnNlRmxvYXQoYSk+MD9cIiBcIithLnRvU3RyaW5nKCk6YS50b1N0cmluZygpfXZhciBoPWEoXCIuLi9jb3JlL21haW5cIik7YShcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxoLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcImpvaW5cIixhcmd1bWVudHMpLGEuam9pbihiKX0saC5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWF0Y2hcIixhcmd1bWVudHMpLGEubWF0Y2goYil9LGgucHJvdG90eXBlLm1hdGNoQWxsPWZ1bmN0aW9uKGEsYil7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWF0Y2hBbGxcIixhcmd1bWVudHMpO2Zvcih2YXIgYz1uZXcgUmVnRXhwKGIsXCJnXCIpLGQ9Yy5leGVjKGEpLGU9W107bnVsbCE9PWQ7KWUucHVzaChkKSxkPWMuZXhlYyhhKTtyZXR1cm4gZX0saC5wcm90b3R5cGUubmY9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJuZlwiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBkKGEsYixjKX0pOlwiW29iamVjdCBBcmd1bWVudHNdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk/Mz09PWEubGVuZ3RoP3RoaXMubmYoYVswXSxhWzFdLGFbMl0pOjI9PT1hLmxlbmd0aD90aGlzLm5mKGFbMF0sYVsxXSk6dGhpcy5uZihhWzBdKTpkKGEsYixjKX0saC5wcm90b3R5cGUubmZjPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5mY1wiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBlKGEsYil9KTplKGEsYil9LGgucHJvdG90eXBlLm5mcD1mdW5jdGlvbigpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5mcFwiLGFyZ3VtZW50cyk7dmFyIGE9aC5wcm90b3R5cGUubmYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZik6ZihhKX0saC5wcm90b3R5cGUubmZzPWZ1bmN0aW9uKCl7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibmZzXCIsYXJndW1lbnRzKTt2YXIgYT1oLnByb3RvdHlwZS5uZi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChnKTpnKGEpfSxoLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihhLGIpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzcGxpdFwiLGFyZ3VtZW50cyksYS5zcGxpdChiKX0saC5wcm90b3R5cGUuc3BsaXRUb2tlbnM9ZnVuY3Rpb24oYSxiKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzcGxpdFRva2Vuc1wiLGFyZ3VtZW50cyk7dmFyIGM7aWYodm9pZCAwIT09Yil7dmFyIGQ9YixlPS9cXF0vZy5leGVjKGQpLGY9L1xcWy9nLmV4ZWMoZCk7ZiYmZT8oZD1kLnNsaWNlKDAsZS5pbmRleCkrZC5zbGljZShlLmluZGV4KzEpLGY9L1xcWy9nLmV4ZWMoZCksZD1kLnNsaWNlKDAsZi5pbmRleCkrZC5zbGljZShmLmluZGV4KzEpLGM9bmV3IFJlZ0V4cChcIltcXFxcW1wiK2QrXCJcXFxcXV1cIixcImdcIikpOmU/KGQ9ZC5zbGljZSgwLGUuaW5kZXgpK2Quc2xpY2UoZS5pbmRleCsxKSxjPW5ldyBSZWdFeHAoXCJbXCIrZCtcIlxcXFxdXVwiLFwiZ1wiKSk6Zj8oZD1kLnNsaWNlKDAsZi5pbmRleCkrZC5zbGljZShmLmluZGV4KzEpLGM9bmV3IFJlZ0V4cChcIltcIitkK1wiXFxcXFtdXCIsXCJnXCIpKTpjPW5ldyBSZWdFeHAoXCJbXCIrZCtcIl1cIixcImdcIil9ZWxzZSBjPS9cXHMvZztyZXR1cm4gYS5zcGxpdChjKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGF9KX0saC5wcm90b3R5cGUudHJpbT1mdW5jdGlvbihhKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidHJpbVwiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKHRoaXMudHJpbSk6YS50cmltKCl9LGIuZXhwb3J0cz1ofSx7XCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmRheT1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0RGF0ZSgpfSxkLnByb3RvdHlwZS5ob3VyPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRIb3VycygpfSxkLnByb3RvdHlwZS5taW51dGU9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldE1pbnV0ZXMoKX0sZC5wcm90b3R5cGUubWlsbGlzPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKX0sZC5wcm90b3R5cGUubW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldE1vbnRoKCkrMX0sZC5wcm90b3R5cGUuc2Vjb25kPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRTZWNvbmRzKCl9LGQucHJvdG90eXBlLnllYXI9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldEZ1bGxZZWFyKCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDY0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTthKFwiLi9wNS5HZW9tZXRyeVwiKTt2YXIgZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJwbGFuZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwbGFuZVwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPTEpLHZvaWQgMD09PWUmJihlPTEpO3ZhciBmPVwicGxhbmV8XCIrYytcInxcIitlO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChmKSl7dmFyIGc9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYixjLGU9MDtlPD10aGlzLmRldGFpbFk7ZSsrKXtiPWUvdGhpcy5kZXRhaWxZO2Zvcih2YXIgZj0wO2Y8PXRoaXMuZGV0YWlsWDtmKyspYT1mL3RoaXMuZGV0YWlsWCxjPW5ldyBkLlZlY3RvcihhLS41LGItLjUsMCksdGhpcy52ZXJ0aWNlcy5wdXNoKGMpLHRoaXMudXZzLnB1c2goYSxiKX19LGg9bmV3IGQuR2VvbWV0cnkoYyxlLGcpO2guY29tcHV0ZUZhY2VzKCkuY29tcHV0ZU5vcm1hbHMoKSxjPD0xJiZlPD0xP2guX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlIG9uIHBsYW5lIG9iamVjdHMgd2l0aCBtb3JlIHRoYW4gMSBkZXRhaWxYIG9yIDEgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGYsaCl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGYsYSxiLDEpLHRoaXN9LGQucHJvdG90eXBlLmJveD1mdW5jdGlvbihhLGIsYyxlLGYpe3RoaXMuX2Fzc2VydDNkKFwiYm94XCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJveFwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPWIpO3ZhciBnPXRoaXMuX3JlbmRlcmVyLmF0dHJpYnV0ZXMmJnRoaXMuX3JlbmRlcmVyLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZzt2b2lkIDA9PT1lJiYoZT1nPzE6NCksdm9pZCAwPT09ZiYmKGY9Zz8xOjQpO3ZhciBoPVwiYm94fFwiK2UrXCJ8XCIrZjtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goaCkpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIGE9W1swLDQsMiw2XSxbMSwzLDUsN10sWzAsMSw0LDVdLFsyLDYsMyw3XSxbMCwyLDEsM10sWzQsNSw2LDddXTt0aGlzLnN0cm9rZUluZGljZXM9W1swLDFdLFsxLDNdLFszLDJdLFs2LDddLFs4LDldLFs5LDExXSxbMTQsMTVdLFsxNiwxN10sWzE3LDE5XSxbMTgsMTldLFsyMCwyMV0sWzIyLDIzXV07Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspe2Zvcih2YXIgYz1hW2JdLGU9NCpiLGY9MDtmPDQ7ZisrKXt2YXIgZz1jW2ZdLGg9bmV3IGQuVmVjdG9yKCgyKigxJmcpLTEpLzIsKCgyJmcpLTEpLzIsKCg0JmcpLzItMSkvMik7dGhpcy52ZXJ0aWNlcy5wdXNoKGgpLHRoaXMudXZzLnB1c2goMSZmLCgyJmYpLzIpfXRoaXMuZmFjZXMucHVzaChbZSxlKzEsZSsyXSksdGhpcy5mYWNlcy5wdXNoKFtlKzIsZSsxLGUrM10pfX0saj1uZXcgZC5HZW9tZXRyeShlLGYsaSk7ai5jb21wdXRlTm9ybWFscygpLGU8PTQmJmY8PTQ/ai5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gYm94IG9iamVjdHMgd2l0aCBtb3JlIHRoYW4gNCBkZXRhaWxYIG9yIDQgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGgsail9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGgsYSxiLGMpLHRoaXN9LGQucHJvdG90eXBlLnNwaGVyZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwic3BoZXJlXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwaGVyZVwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPTI0KSx2b2lkIDA9PT1jJiYoYz0xNiksdGhpcy5lbGxpcHNvaWQoYSxhLGEsYixjKSx0aGlzfTt2YXIgZj1mdW5jdGlvbihhLGIsYyxlLGYsZyxoKXthPWE8PTA/MTphLGI9YjwwPzA6YixjPWM8PTA/YTpjLGU9ZTwzPzM6ZSxmPWY8MT8xOmYsZz12b2lkIDA9PT1nfHxnLGg9dm9pZCAwPT09aD8wIT09YjpoO3ZhciBpLGosayxsLG0sbj1nPy0yOjAsbz1mKyhoPzI6MCkscD17fSxxPU1hdGguYXRhbjIoYS1iLGMpO2ZvcihpPW47aTw9bzsrK2kpe3ZhciByLHM9aS9mLHQ9YypzO2ZvcihpPDA/KHQ9MCxzPTAscj1hKTppPmY/KHQ9YyxzPTEscj1iKTpyPWErKGItYSkqcywtMiE9PWkmJmkhPT1mKzJ8fChyPTApLHQtPWMvMixwW2ldPTA9PT1yPzE6ZSxqPTA7ajxwW2ldOysrail7dmFyIHU9ai9lO3RoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoTWF0aC5zaW4oMip1Kk1hdGguUEkpKnIsdCxNYXRoLmNvcygyKnUqTWF0aC5QSSkqcikpLHRoaXMudmVydGV4Tm9ybWFscy5wdXNoKG5ldyBkLlZlY3RvcihpPDB8fGk+Zj8wOk1hdGguc2luKDIqdSpNYXRoLlBJKSpNYXRoLmNvcyhxKSxpPDA/LTE6aT5mPzE6TWF0aC5zaW4ocSksaTwwfHxpPmY/MDpNYXRoLmNvcygyKnUqTWF0aC5QSSkqTWF0aC5jb3MocSkpKSx0aGlzLnV2cy5wdXNoKHUscyl9fXZhciB2PTA7aWYoZyl7Zm9yKGs9MDtrPHBbLTFdOysrayltPShrKzEpJXBbLTFdLHRoaXMuZmFjZXMucHVzaChbdix2KzErbSx2KzEra10pO3YrPXBbLTJdK3BbLTFdfWZvcihpPTA7aTxmOysraSl7Zm9yKGo9MDtqPHBbaV07KytqKTE9PT1wW2krMV0/KGw9KGorMSklcFtpXSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K2wsditwW2ldXSkpOihsPShqKzEpJXBbaV0sdGhpcy5mYWNlcy5wdXNoKFt2K2osditsLHYrcFtpXStsXSksdGhpcy5mYWNlcy5wdXNoKFt2K2osditwW2ldK2wsditwW2ldK2pdKSk7dis9cFtpXX1pZihoKWZvcih2Kz1wW2ZdLGo9MDtqPHBbZisxXTsrK2opbD0oaisxKSVwW2YrMV0sdGhpcy5mYWNlcy5wdXNoKFt2K2osditsLHYrcFtmKzFdXSl9O2QucHJvdG90eXBlLmN5bGluZGVyPWZ1bmN0aW9uKGEsYixjLGUsZyxoKXt0aGlzLl9hc3NlcnQzZChcImN5bGluZGVyXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN5bGluZGVyXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9MjQpLHZvaWQgMD09PWUmJihlPTEpLHZvaWQgMD09PWgmJihoPSEwKSxcbnZvaWQgMD09PWcmJihnPSEwKTt2YXIgaT1cImN5bGluZGVyfFwiK2MrXCJ8XCIrZStcInxcIitnK1wifFwiK2g7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGkpKXt2YXIgaj1uZXcgZC5HZW9tZXRyeShjLGUpO2YuY2FsbChqLDEsMSwxLGMsZSxnLGgpLGouY29tcHV0ZU5vcm1hbHMoKSxjPD0yNCYmZTw9MTY/ai5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gY3lsaW5kZXIgb2JqZWN0cyB3aXRoIG1vcmUgdGhhbiAyNCBkZXRhaWxYIG9yIDE2IGRldGFpbFlcIiksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhpLGopfXJldHVybiB0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVyc1NjYWxlZChpLGEsYixhKSx0aGlzfSxkLnByb3RvdHlwZS5jb25lPWZ1bmN0aW9uKGEsYixjLGUsZyl7dGhpcy5fYXNzZXJ0M2QoXCJjb25lXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvbmVcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj1hKSx2b2lkIDA9PT1jJiYoYz0yNCksdm9pZCAwPT09ZSYmKGU9MSksdm9pZCAwPT09ZyYmKGc9ITApO3ZhciBoPVwiY29uZXxcIitjK1wifFwiK2UrXCJ8XCIrZztpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goaCkpe3ZhciBpPW5ldyBkLkdlb21ldHJ5KGMsZSk7Zi5jYWxsKGksMSwwLDEsYyxlLGcsITEpLGkuY29tcHV0ZU5vcm1hbHMoKSxjPD0yNCYmZTw9MTY/aS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gY29uZSBvYmplY3RzIHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMTYgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGgsaSl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGgsYSxiLGEpLHRoaXN9LGQucHJvdG90eXBlLmVsbGlwc29pZD1mdW5jdGlvbihhLGIsYyxlLGYpe3RoaXMuX2Fzc2VydDNkKFwiZWxsaXBzb2lkXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImVsbGlwc29pZFwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPWEpLHZvaWQgMD09PWUmJihlPTI0KSx2b2lkIDA9PT1mJiYoZj0xNik7dmFyIGc9XCJlbGxpcHNvaWR8XCIrZStcInxcIitmO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChnKSl7dmFyIGg9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD10aGlzLmRldGFpbFk7YSsrKWZvcih2YXIgYj1hL3RoaXMuZGV0YWlsWSxjPU1hdGguUEkqYi1NYXRoLlBJLzIsZT1NYXRoLmNvcyhjKSxmPU1hdGguc2luKGMpLGc9MDtnPD10aGlzLmRldGFpbFg7ZysrKXt2YXIgaD1nL3RoaXMuZGV0YWlsWCxpPTIqTWF0aC5QSSpoLGo9TWF0aC5jb3MoaSksaz1NYXRoLnNpbihpKSxsPW5ldyBkLlZlY3RvcihlKmssZixlKmopO3RoaXMudmVydGljZXMucHVzaChsKSx0aGlzLnZlcnRleE5vcm1hbHMucHVzaChsKSx0aGlzLnV2cy5wdXNoKGgsYil9fSxpPW5ldyBkLkdlb21ldHJ5KGUsZixoKTtpLmNvbXB1dGVGYWNlcygpLGU8PTI0JiZmPD0yND9pLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBlbGxpcHNvaWRzIHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMjQgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGcsaSl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGcsYSxiLGMpLHRoaXN9LGQucHJvdG90eXBlLnRvcnVzPWZ1bmN0aW9uKGEsYixjLGUpe2lmKHRoaXMuX2Fzc2VydDNkKFwidG9ydXNcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidG9ydXNcIixhcmd1bWVudHMpLHZvaWQgMD09PWEpYT01MDtlbHNlIGlmKCFhKXJldHVybjtpZih2b2lkIDA9PT1iKWI9MTA7ZWxzZSBpZighYilyZXR1cm47dm9pZCAwPT09YyYmKGM9MjQpLHZvaWQgMD09PWUmJihlPTE2KTt2YXIgZj0oYi9hKS50b1ByZWNpc2lvbig0KSxnPVwidG9ydXN8XCIrZitcInxcIitjK1wifFwiK2U7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGcpKXt2YXIgaD1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspZm9yKHZhciBiPWEvdGhpcy5kZXRhaWxZLGM9MipNYXRoLlBJKmIsZT1NYXRoLmNvcyhjKSxnPU1hdGguc2luKGMpLGg9MStmKmUsaT0wO2k8PXRoaXMuZGV0YWlsWDtpKyspe3ZhciBqPWkvdGhpcy5kZXRhaWxYLGs9MipNYXRoLlBJKmosbD1NYXRoLmNvcyhrKSxtPU1hdGguc2luKGspLG49bmV3IGQuVmVjdG9yKGgqbCxoKm0sZipnKSxvPW5ldyBkLlZlY3RvcihlKmwsZSptLGcpO3RoaXMudmVydGljZXMucHVzaChuKSx0aGlzLnZlcnRleE5vcm1hbHMucHVzaChvKSx0aGlzLnV2cy5wdXNoKGosYil9fSxpPW5ldyBkLkdlb21ldHJ5KGMsZSxoKTtpLmNvbXB1dGVGYWNlcygpLGM8PTI0JiZlPD0xNj9pLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZXMgb24gdG9ydXMgb2JqZWN0IHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMTYgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGcsaSl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGcsYSxhLGEpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3VzZVBvaW50U2hhZGVyKCksdGhpcy5jdXJQb2ludFNoYWRlci5iaW5kU2hhZGVyKCksdm9pZCAwPT09YyYmKGM9MCk7dmFyIGU9W107cmV0dXJuIGUucHVzaChuZXcgZC5WZWN0b3IoYSxiLGMpKSx0aGlzLl9kcmF3UG9pbnRzKGUsdGhpcy5fcG9pbnRWZXJ0ZXhCdWZmZXIpLHRoaXMuY3VyUG9pbnRTaGFkZXIudW5iaW5kU2hhZGVyKCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS50cmlhbmdsZT1mdW5jdGlvbihhKXt2YXIgYj1hWzBdLGM9YVsxXSxlPWFbMl0sZj1hWzNdLGc9YVs0XSxoPWFbNV0saT1cInRyaVwiO2lmKCF0aGlzLmdlb21ldHJ5SW5IYXNoKGkpKXt2YXIgaj1mdW5jdGlvbigpe3ZhciBhPVtdO2EucHVzaChuZXcgZC5WZWN0b3IoMCwwLDApKSxhLnB1c2gobmV3IGQuVmVjdG9yKDAsMSwwKSksYS5wdXNoKG5ldyBkLlZlY3RvcigxLDAsMCkpLHRoaXMuc3Ryb2tlSW5kaWNlcz1bWzAsMV0sWzEsMl0sWzIsMF1dLHRoaXMudmVydGljZXM9YSx0aGlzLmZhY2VzPVtbMCwxLDJdXSx0aGlzLnV2cz1bMCwwLDAsMSwxLDFdfSxrPW5ldyBkLkdlb21ldHJ5KDEsMSxqKTtrLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSxrLmNvbXB1dGVOb3JtYWxzKCksdGhpcy5jcmVhdGVCdWZmZXJzKGksayl9dmFyIGw9dGhpcy51TVZNYXRyaXguY29weSgpO3RyeXt2YXIgbT1uZXcgZC5NYXRyaXgoW2UtYixmLWMsMCwwLGctYixoLWMsMCwwLDAsMCwxLDAsYixjLDAsMV0pLm11bHQodGhpcy51TVZNYXRyaXgpO3RoaXMudU1WTWF0cml4PW0sdGhpcy5kcmF3QnVmZmVycyhpKX1maW5hbGx5e3RoaXMudU1WTWF0cml4PWx9cmV0dXJuIHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZWxsaXBzZT1mdW5jdGlvbihhKXt0aGlzLmFyYyhhWzBdLGFbMV0sYVsyXSxhWzNdLDAsZS5UV09fUEksZS5PUEVOLGFbNF0pfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmFyYz1mdW5jdGlvbihhKXt2YXIgYixjLGY9YXJndW1lbnRzWzBdLGc9YXJndW1lbnRzWzFdLGg9YXJndW1lbnRzWzJdLGk9YXJndW1lbnRzWzNdLGo9YXJndW1lbnRzWzRdLGs9YXJndW1lbnRzWzVdLGw9YXJndW1lbnRzWzZdLG09YXJndW1lbnRzWzddfHwyNTtpZihNYXRoLmFicyhrLWopPj1lLlRXT19QST8oYj1cImVsbGlwc2VcIixjPWIrXCJ8XCIrbStcInxcIik6KGI9XCJhcmNcIixjPWIrXCJ8XCIraitcInxcIitrK1wifFwiK2wrXCJ8XCIrbStcInxcIiksIXRoaXMuZ2VvbWV0cnlJbkhhc2goYykpe3ZhciBuPWZ1bmN0aW9uKCl7aWYodGhpcy5zdHJva2VJbmRpY2VzPVtdLGoudG9GaXhlZCgxMCkhPT1rLnRvRml4ZWQoMTApKXtsIT09ZS5QSUUmJnZvaWQgMCE9PWx8fCh0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKC41LC41LDApKSx0aGlzLnV2cy5wdXNoKFsuNSwuNV0pKTtmb3IodmFyIGE9MDthPD1tO2ErKyl7dmFyIGI9YS9tLGM9KGstaikqYitqLGY9LjUrTWF0aC5jb3MoYykvMixnPS41K01hdGguc2luKGMpLzI7dGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihmLGcsMCkpLHRoaXMudXZzLnB1c2goW2YsZ10pLGE8bS0xJiYodGhpcy5mYWNlcy5wdXNoKFswLGErMSxhKzJdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbYSsxLGErMl0pKX1zd2l0Y2gobCl7Y2FzZSBlLlBJRTp0aGlzLmZhY2VzLnB1c2goWzAsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMix0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFt0aGlzLnZlcnRpY2VzLmxlbmd0aC0yLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCx0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSk7YnJlYWs7Y2FzZSBlLkNIT1JEOnRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLDFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCx0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSk7YnJlYWs7Y2FzZSBlLk9QRU46dGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsMV0pO2JyZWFrO2RlZmF1bHQ6dGhpcy5mYWNlcy5wdXNoKFswLHRoaXMudmVydGljZXMubGVuZ3RoLTIsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFt0aGlzLnZlcnRpY2VzLmxlbmd0aC0yLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKX19fSxvPW5ldyBkLkdlb21ldHJ5KG0sMSxuKTtvLmNvbXB1dGVOb3JtYWxzKCksbTw9NTA/by5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKG8pOmNvbnNvbGUubG9nKFwiQ2Fubm90IHN0cm9rZSBcIitiK1wiIHdpdGggbW9yZSB0aGFuIDUwIGRldGFpbFwiKSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoYyxvKX12YXIgcD10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3RoaXMudU1WTWF0cml4LnRyYW5zbGF0ZShbZixnLDBdKSx0aGlzLnVNVk1hdHJpeC5zY2FsZShoLGksMSksdGhpcy5kcmF3QnVmZmVycyhjKX1maW5hbGx5e3RoaXMudU1WTWF0cml4PXB9cmV0dXJuIHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucmVjdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZyxjPWFbMF0sZT1hWzFdLGY9YVsyXSxnPWFbM10saD1hWzRdfHwoYj8xOjI0KSxpPWFbNV18fChiPzE6MTYpLGo9XCJyZWN0fFwiK2grXCJ8XCIraTtpZighdGhpcy5nZW9tZXRyeUluSGFzaChqKSl7dmFyIGs9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD10aGlzLmRldGFpbFk7YSsrKWZvcih2YXIgYj1hL3RoaXMuZGV0YWlsWSxjPTA7Yzw9dGhpcy5kZXRhaWxYO2MrKyl7dmFyIGU9Yy90aGlzLmRldGFpbFgsZj1uZXcgZC5WZWN0b3IoZSxiLDApO3RoaXMudmVydGljZXMucHVzaChmKSx0aGlzLnV2cy5wdXNoKGUsYil9aD4wJiZpPjAmJih0aGlzLnN0cm9rZUluZGljZXM9W1swLGhdLFtoLChoKzEpKihpKzEpLTFdLFsoaCsxKSooaSsxKS0xLChoKzEpKmldLFsoaCsxKSppLDBdXSl9LGw9bmV3IGQuR2VvbWV0cnkoaCxpLGspO2wuY29tcHV0ZUZhY2VzKCkuY29tcHV0ZU5vcm1hbHMoKS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCksdGhpcy5jcmVhdGVCdWZmZXJzKGosbCl9dmFyIG09dGhpcy51TVZNYXRyaXguY29weSgpO3RyeXt0aGlzLnVNVk1hdHJpeC50cmFuc2xhdGUoW2MsZSwwXSksdGhpcy51TVZNYXRyaXguc2NhbGUoZixnLDEpLHRoaXMuZHJhd0J1ZmZlcnMoail9ZmluYWxseXt0aGlzLnVNVk1hdHJpeD1tfXJldHVybiB0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnF1YWQ9ZnVuY3Rpb24oYSxiLGMsZSxmLGcsaCxpKXt2YXIgaj1cInF1YWR8XCIrYStcInxcIitiK1wifFwiK2MrXCJ8XCIrZStcInxcIitmK1wifFwiK2crXCJ8XCIraCtcInxcIitpO2lmKCF0aGlzLmdlb21ldHJ5SW5IYXNoKGopKXt2YXIgaz1mdW5jdGlvbigpe3RoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoYSxiLDApKSx0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGMsZSwwKSksdGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihmLGcsMCkpLHRoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoaCxpLDApKSx0aGlzLnV2cy5wdXNoKDAsMCwxLDAsMSwxLDAsMSksdGhpcy5zdHJva2VJbmRpY2VzPVtbMCwxXSxbMSwyXSxbMiwzXSxbMywwXV19LGw9bmV3IGQuR2VvbWV0cnkoMiwyLGspO2wuY29tcHV0ZU5vcm1hbHMoKS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCksbC5mYWNlcz1bWzAsMSwyXSxbMiwzLDBdXSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoaixsKX1yZXR1cm4gdGhpcy5kcmF3QnVmZmVycyhqKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmJlemllcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSxqLGssbCl7OD09PWFyZ3VtZW50cy5sZW5ndGgmJihqPWcsaz1oLGc9ZSxoPWQsZD1jLGU9ZCxjPWY9aT1sPTApO3ZhciBtPXRoaXMuX3BJbnN0Ll9iZXppZXJEZXRhaWx8fDIwO3RoaXMuYmVnaW5TaGFwZSgpO2Zvcih2YXIgbj0wO248PW07bisrKXt2YXIgbz1NYXRoLnBvdygxLW4vbSwzKSxwPW4vbSozKk1hdGgucG93KDEtbi9tLDIpLHE9MypNYXRoLnBvdyhuL20sMikqKDEtbi9tKSxyPU1hdGgucG93KG4vbSwzKTt0aGlzLnZlcnRleChhKm8rZCpwK2cqcStqKnIsYipvK2UqcCtoKnEraypyLGMqbytmKnAraSpxK2wqcil9cmV0dXJuIHRoaXMuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmN1cnZlPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpLGosayxsKXs4PT09YXJndW1lbnRzLmxlbmd0aCYmKGo9ZyxrPWgsZz1lLGg9ZCxkPWMsZT1kLGM9Zj1pPWw9MCk7dmFyIG09dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsO3RoaXMuYmVnaW5TaGFwZSgpO2Zvcih2YXIgbj0wO248PW07bisrKXt2YXIgbz0uNSpNYXRoLnBvdyhuL20sMykscD0uNSpNYXRoLnBvdyhuL20sMikscT1uL20qLjUscj0uNSxzPW8qKDMqZC1hLTMqZytqKStwKigyKmEtNSpkKzQqZy1qKStxKigtYStnKStyKigyKmQpLHQ9byooMyplLWItMypoK2spK3AqKDIqYi01KmUrNCpoLWspK3EqKC1iK2gpK3IqKDIqZSksdT1vKigzKmYtYy0zKmkrbCkrcCooMipjLTUqZis0KmktbCkrcSooLWMraSkrciooMipmKTt0aGlzLnZlcnRleChzLHQsdSl9cmV0dXJuIHRoaXMuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gNj09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuYmVnaW5TaGFwZSgpLHRoaXMudmVydGV4KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSx0aGlzLnZlcnRleChhcmd1bWVudHNbM10sYXJndW1lbnRzWzRdLGFyZ3VtZW50c1s1XSksdGhpcy5lbmRTaGFwZSgpKTo0PT09YXJndW1lbnRzLmxlbmd0aCYmKHRoaXMuYmVnaW5TaGFwZSgpLHRoaXMudmVydGV4KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sMCksdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSwwKSx0aGlzLmVuZFNoYXBlKCkpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuYmV6aWVyVmVydGV4PWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4Lmxlbmd0aCl0aHJvdyBFcnJvcihcInZlcnRleCgpIG11c3QgYmUgdXNlZCBvbmNlIGJlZm9yZSBjYWxsaW5nIGJlemllclZlcnRleCgpXCIpO3ZhciBhLGIsYyxkLGUsZj1bXSxnPVtdLGg9W10saT1hcmd1bWVudHMubGVuZ3RoO2lmKGE9MCwwPT09dGhpcy5fbG9va1VwVGFibGVCZXppZXIubGVuZ3RofHx0aGlzLl9sdXRCZXppZXJEZXRhaWwhPT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWwpe3RoaXMuX2xvb2tVcFRhYmxlQmV6aWVyPVtdLHRoaXMuX2x1dEJlemllckRldGFpbD10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7Zm9yKHZhciBqPTEvdGhpcy5fbHV0QmV6aWVyRGV0YWlsLGs9MCxsPTEsbT0wO2s8MTspe2lmKGE9cGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW21dPXRoaXMuX2JlemllckNvZWZmaWNpZW50cyhhKSxsLnRvRml4ZWQoNik9PT1qLnRvRml4ZWQoNikpe2E9cGFyc2VGbG9hdChsLnRvRml4ZWQoNikpK3BhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSwrK20sdGhpcy5fbG9va1VwVGFibGVCZXppZXJbbV09dGhpcy5fYmV6aWVyQ29lZmZpY2llbnRzKGEpO2JyZWFrfWsrPWosbC09aiwrK219fXZhciBuPXRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyLmxlbmd0aDtpZig2PT09aSl7Zm9yKHRoaXMuaXNCZXppZXI9ITAsZj1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF0sYXJndW1lbnRzWzBdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbNF1dLGc9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzVdXSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2ZbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStnWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyk7dGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF09YXJndW1lbnRzWzRdLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdPWFyZ3VtZW50c1s1XX1lbHNlIGlmKDk9PT1pKXtmb3IodGhpcy5pc0Jlemllcj0hMCxmPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXSxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s2XV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1s0XSxhcmd1bWVudHNbN11dLGg9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzJdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbNV0sYXJndW1lbnRzWzhdXSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2ZbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStnWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGQ9aFswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStoWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2hbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0raFszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSx0aGlzLnZlcnRleChiLGMsZCk7dGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF09YXJndW1lbnRzWzZdLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdPWFyZ3VtZW50c1s3XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsyXT1hcmd1bWVudHNbOF19fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnF1YWRyYXRpY1ZlcnRleD1mdW5jdGlvbigpe2lmKDA9PT10aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleC5sZW5ndGgpdGhyb3cgRXJyb3IoXCJ2ZXJ0ZXgoKSBtdXN0IGJlIHVzZWQgb25jZSBiZWZvcmUgY2FsbGluZyBxdWFkcmF0aWNWZXJ0ZXgoKVwiKTt2YXIgYSxiLGMsZCxlLGY9W10sZz1bXSxoPVtdLGk9YXJndW1lbnRzLmxlbmd0aDtpZihhPTAsMD09PXRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljLmxlbmd0aHx8dGhpcy5fbHV0UXVhZHJhdGljRGV0YWlsIT09dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsKXt0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpYz1bXSx0aGlzLl9sdXRRdWFkcmF0aWNEZXRhaWw9dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsO2Zvcih2YXIgaj0xL3RoaXMuX2x1dFF1YWRyYXRpY0RldGFpbCxrPTAsbD0xLG09MDtrPDE7KXtpZihhPXBhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSx0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1ttXT10aGlzLl9xdWFkcmF0aWNDb2VmZmljaWVudHMoYSksbC50b0ZpeGVkKDYpPT09ai50b0ZpeGVkKDYpKXthPXBhcnNlRmxvYXQobC50b0ZpeGVkKDYpKStwYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksKyttLHRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW21dPXRoaXMuX3F1YWRyYXRpY0NvZWZmaWNpZW50cyhhKTticmVha31rKz1qLGwtPWosKyttfX12YXIgbj10aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpYy5sZW5ndGg7aWYoND09PWkpe2Zvcih0aGlzLmlzUXVhZHJhdGljPSEwLGY9W3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMl1dLGc9W3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbM11dLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSx0aGlzLnZlcnRleChiLGMpO3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdPWFyZ3VtZW50c1syXSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXT1hcmd1bWVudHNbM119ZWxzZSBpZig2PT09aSl7Zm9yKHRoaXMuaXNRdWFkcmF0aWM9ITAsZj1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF0sYXJndW1lbnRzWzBdLGFyZ3VtZW50c1szXV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1s0XV0saD1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMl0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1s1XV0sZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLGQ9aFswXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStoWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2hbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sdGhpcy52ZXJ0ZXgoYixjLGQpO3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdPWFyZ3VtZW50c1szXSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXT1hcmd1bWVudHNbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMl09YXJndW1lbnRzWzVdfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5jdXJ2ZVZlcnRleD1mdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZj1bXSxnPVtdLGg9W107YT0wO3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg7aWYoMD09PXRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyLmxlbmd0aHx8dGhpcy5fbHV0QmV6aWVyRGV0YWlsIT09dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsKXt0aGlzLl9sb29rVXBUYWJsZUJlemllcj1bXSx0aGlzLl9sdXRCZXppZXJEZXRhaWw9dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsO2Zvcih2YXIgaj0xL3RoaXMuX2x1dEJlemllckRldGFpbCxrPTAsbD0xLG09MDtrPDE7KXtpZihhPXBhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSx0aGlzLl9sb29rVXBUYWJsZUJlemllclttXT10aGlzLl9iZXppZXJDb2VmZmljaWVudHMoYSksbC50b0ZpeGVkKDYpPT09ai50b0ZpeGVkKDYpKXthPXBhcnNlRmxvYXQobC50b0ZpeGVkKDYpKStwYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksKyttLHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW21dPXRoaXMuX2JlemllckNvZWZmaWNpZW50cyhhKTticmVha31rKz1qLGwtPWosKyttfX12YXIgbj10aGlzLl9sb29rVXBUYWJsZUJlemllci5sZW5ndGg7aWYoMj09PWkpe2lmKHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMF0pLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMV0pLDg9PT10aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4Lmxlbmd0aCl7Zm9yKHRoaXMuaXNDdXJ2ZT0hMCxmPXRoaXMuX2JlemllclRvQ2F0bXVsbChbdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFswXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzJdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs2XV0pLGc9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzFdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbM10sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs1XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzddXSksZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStmWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZ1szXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSx0aGlzLnZlcnRleChiLGMpO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnNoaWZ0KCl9fWVsc2UgaWYoMz09PWkmJih0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzBdKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzFdKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzJdKSwxMj09PXRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgubGVuZ3RoKSl7Zm9yKHRoaXMuaXNDdXJ2ZT0hMCxmPXRoaXMuX2JlemllclRvQ2F0bXVsbChbdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFswXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzNdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs5XV0pLGc9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzFdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs3XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzEwXV0pLGg9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzJdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNV0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs4XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzExXV0pLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZlszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2dbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sZD1oWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2hbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0raFsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStoWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyxkKTtmb3IoZT0wO2U8aTtlKyspdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5zaGlmdCgpfX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vcDUuR2VvbWV0cnlcIjo3MH1dLDY1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLnByb3RvdHlwZS5vcmJpdENvbnRyb2w9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLl9hc3NlcnQzZChcIm9yYml0Q29udHJvbFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJvcmJpdENvbnRyb2xcIixhcmd1bWVudHMpLHRoaXMubW91c2VYPHRoaXMud2lkdGgmJnRoaXMubW91c2VYPjAmJnRoaXMubW91c2VZPHRoaXMuaGVpZ2h0JiZ0aGlzLm1vdXNlWT4wKXt2YXIgYz10aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhO3ZvaWQgMD09PWEmJihhPTEpLHZvaWQgMD09PWImJihiPWEpLCEwIT09dGhpcy5jb250ZXh0TWVudURpc2FibGVkJiYodGhpcy5jYW52YXMub25jb250ZXh0bWVudT1mdW5jdGlvbigpe3JldHVybiExfSx0aGlzLl9zZXRQcm9wZXJ0eShcImNvbnRleHRNZW51RGlzYWJsZWRcIiwhMCkpLCEwIT09dGhpcy53aGVlbERlZmF1bHREaXNhYmxlZCYmKHRoaXMuY2FudmFzLm9ud2hlZWw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdGhpcy5fc2V0UHJvcGVydHkoXCJ3aGVlbERlZmF1bHREaXNhYmxlZFwiLCEwKSk7dmFyIGU9dGhpcy5oZWlnaHQ8dGhpcy53aWR0aD90aGlzLmhlaWdodDp0aGlzLndpZHRoO2lmKHRoaXMuX21vdXNlV2hlZWxEZWx0YVkhPT10aGlzLl9wbW91c2VXaGVlbERlbHRhWSYmKHRoaXMuX21vdXNlV2hlZWxEZWx0YVk+MD90aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLl9vcmJpdCgwLDAsLjUqZSk6dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5fb3JiaXQoMCwwLC0uNSplKSksdGhpcy5tb3VzZUlzUHJlc3NlZClpZih0aGlzLm1vdXNlQnV0dG9uPT09dGhpcy5MRUZUKXt2YXIgZj0tYSoodGhpcy5tb3VzZVgtdGhpcy5wbW91c2VYKS9lLGc9YioodGhpcy5tb3VzZVktdGhpcy5wbW91c2VZKS9lO3RoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuX29yYml0KGYsZywwKX1lbHNlIGlmKHRoaXMubW91c2VCdXR0b249PT10aGlzLlJJR0hUKXt2YXIgaD1jLl9nZXRMb2NhbEF4ZXMoKSxpPU1hdGguc3FydChoLnhbMF0qaC54WzBdK2gueFsyXSpoLnhbMl0pOzAhPT1pJiYoaC54WzBdLz1pLGgueFsyXS89aSk7dmFyIGo9TWF0aC5zcXJ0KGgueVswXSpoLnlbMF0raC55WzJdKmgueVsyXSk7MCE9PWomJihoLnlbMF0vPWosaC55WzJdLz1qKTt2YXIgaz0tMSphKih0aGlzLm1vdXNlWC10aGlzLnBtb3VzZVgpLGw9LTEqYioodGhpcy5tb3VzZVktdGhpcy5wbW91c2VZKTtjLnNldFBvc2l0aW9uKGMuZXllWCtrKmgueFswXStsKmguelswXSxjLmV5ZVksYy5leWVaK2sqaC54WzJdK2wqaC56WzJdKX1yZXR1cm4gdGhpc319LGQucHJvdG90eXBlLmRlYnVnTW9kZT1mdW5jdGlvbigpe3RoaXMuX2Fzc2VydDNkKFwiZGVidWdNb2RlXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImRlYnVnTW9kZVwiLGFyZ3VtZW50cyk7Zm9yKHZhciBhPXRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3QubGVuZ3RoLTE7YT49MDthLS0pdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdFthXS50b1N0cmluZygpIT09dGhpcy5fZ3JpZCgpLnRvU3RyaW5nKCkmJnRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3RbYV0udG9TdHJpbmcoKSE9PXRoaXMuX2F4ZXNJY29uKCkudG9TdHJpbmcoKXx8dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5zcGxpY2UoYSwxKTthcmd1bWVudHNbMF09PT1lLkdSSUQ/dGhpcy5yZWdpc3Rlck1ldGhvZChcInBvc3RcIix0aGlzLl9ncmlkLmNhbGwodGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNF0sYXJndW1lbnRzWzVdKSk6YXJndW1lbnRzWzBdPT09ZS5BWEVTP3RoaXMucmVnaXN0ZXJNZXRob2QoXCJwb3N0XCIsdGhpcy5fYXhlc0ljb24uY2FsbCh0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSkpOih0aGlzLnJlZ2lzdGVyTWV0aG9kKFwicG9zdFwiLHRoaXMuX2dyaWQuY2FsbCh0aGlzLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNF0pKSx0aGlzLnJlZ2lzdGVyTWV0aG9kKFwicG9zdFwiLHRoaXMuX2F4ZXNJY29uLmNhbGwodGhpcyxhcmd1bWVudHNbNV0sYXJndW1lbnRzWzZdLGFyZ3VtZW50c1s3XSxhcmd1bWVudHNbOF0pKSl9LGQucHJvdG90eXBlLm5vRGVidWdNb2RlPWZ1bmN0aW9uKCl7dGhpcy5fYXNzZXJ0M2QoXCJub0RlYnVnTW9kZVwiKTtmb3IodmFyIGE9dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5sZW5ndGgtMTthPj0wO2EtLSl0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0W2FdLnRvU3RyaW5nKCkhPT10aGlzLl9ncmlkKCkudG9TdHJpbmcoKSYmdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdFthXS50b1N0cmluZygpIT09dGhpcy5fYXhlc0ljb24oKS50b1N0cmluZygpfHx0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0LnNwbGljZShhLDEpfSxkLnByb3RvdHlwZS5fZ3JpZD1mdW5jdGlvbihhLGIsYyxkLGUpe3ZvaWQgMD09PWEmJihhPXRoaXMud2lkdGgvMiksdm9pZCAwPT09YiYmKGI9TWF0aC5yb3VuZChhLzMwKTw0PzQ6TWF0aC5yb3VuZChhLzMwKSksdm9pZCAwPT09YyYmKGM9MCksdm9pZCAwPT09ZCYmKGQ9MCksdm9pZCAwPT09ZSYmKGU9MCk7dmFyIGY9YS9iLGc9YS8yO3JldHVybiBmdW5jdGlvbigpe3RoaXMucHVzaCgpLHRoaXMuc3Ryb2tlKDI1NSp0aGlzLl9yZW5kZXJlci5jdXJTdHJva2VDb2xvclswXSwyNTUqdGhpcy5fcmVuZGVyZXIuY3VyU3Ryb2tlQ29sb3JbMV0sMjU1KnRoaXMuX3JlbmRlcmVyLmN1clN0cm9rZUNvbG9yWzJdKSx0aGlzLl9yZW5kZXJlci51TVZNYXRyaXguc2V0KHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzJdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbM10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs0XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzVdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs3XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzhdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxM10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNV0pO2Zvcih2YXIgYT0wO2E8PWI7YSsrKXRoaXMuYmVnaW5TaGFwZSh0aGlzLkxJTkVTKSx0aGlzLnZlcnRleCgtZytjLGQsYSpmLWcrZSksdGhpcy52ZXJ0ZXgoK2crYyxkLGEqZi1nK2UpLHRoaXMuZW5kU2hhcGUoKTtmb3IodmFyIGg9MDtoPD1iO2grKyl0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoaCpmLWcrYyxkLC1nK2UpLHRoaXMudmVydGV4KGgqZi1nK2MsZCwrZytlKSx0aGlzLmVuZFNoYXBlKCk7dGhpcy5wb3AoKX19LGQucHJvdG90eXBlLl9heGVzSWNvbj1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdm9pZCAwPT09YSYmKGE9dGhpcy53aWR0aC8yMD40MD90aGlzLndpZHRoLzIwOjQwKSx2b2lkIDA9PT1iJiYoYj0tdGhpcy53aWR0aC80KSx2b2lkIDA9PT1jJiYoYz1iKSx2b2lkIDA9PT1kJiYoZD1iKSxmdW5jdGlvbigpe3RoaXMucHVzaCgpLHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5zZXQodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzFdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzRdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzddLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEwXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEzXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSksdGhpcy5zdHJva2VXZWlnaHQoMiksdGhpcy5zdHJva2UoMjU1LDAsMCksdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KGIsYyxkKSx0aGlzLnZlcnRleChiK2EsYyxkKSx0aGlzLmVuZFNoYXBlKCksdGhpcy5zdHJva2UoMCwyNTUsMCksdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KGIsYyxkKSx0aGlzLnZlcnRleChiLGMrYSxkKSx0aGlzLmVuZFNoYXBlKCksdGhpcy5zdHJva2UoMCwwLDI1NSksdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KGIsYyxkKSx0aGlzLnZlcnRleChiLGMsZCthKSx0aGlzLmVuZFNoYXBlKCksdGhpcy5wb3AoKX19LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw2NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuYW1iaWVudExpZ2h0PWZ1bmN0aW9uKGEsYixjLGUpe3RoaXMuX2Fzc2VydDNkKFwiYW1iaWVudExpZ2h0XCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImFtYmllbnRMaWdodFwiLGFyZ3VtZW50cyk7dmFyIGY9dGhpcy5jb2xvci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZz10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gZy5zZXRVbmlmb3JtKFwidVVzZUxpZ2h0aW5nXCIsITApLGcuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSx0aGlzLl9yZW5kZXJlci5hbWJpZW50TGlnaHRDb2xvcnMucHVzaChmLl9hcnJheVswXSxmLl9hcnJheVsxXSxmLl9hcnJheVsyXSksZy5zZXRVbmlmb3JtKFwidUFtYmllbnRDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmFtYmllbnRMaWdodENvbG9ycyksZy5zZXRVbmlmb3JtKFwidUFtYmllbnRMaWdodENvdW50XCIsdGhpcy5fcmVuZGVyZXIuYW1iaWVudExpZ2h0Q29sb3JzLmxlbmd0aC8zKSx0aGlzfSxkLnByb3RvdHlwZS5kaXJlY3Rpb25hbExpZ2h0PWZ1bmN0aW9uKGEsYixjLGUsZixnKXt0aGlzLl9hc3NlcnQzZChcImRpcmVjdGlvbmFsTGlnaHRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZGlyZWN0aW9uYWxMaWdodFwiLGFyZ3VtZW50cyk7dmFyIGgsaT10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtoPWEgaW5zdGFuY2VvZiBkLkNvbG9yP2E6dGhpcy5jb2xvcihhLGIsYyk7dmFyIGosayxsLG09YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV07XCJudW1iZXJcIj09dHlwZW9mIG0/KGo9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtM10saz1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSxsPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKTooaj1tLngsaz1tLnksbD1tLnopLGkuc2V0VW5pZm9ybShcInVVc2VMaWdodGluZ1wiLCEwKSxpLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvcik7dmFyIG49TWF0aC5zcXJ0KGoqaitrKmsrbCpsKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbnMucHVzaChqL24say9uLGwvbiksaS5zZXRVbmlmb3JtKFwidUxpZ2h0aW5nRGlyZWN0aW9uXCIsdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbnMpLHRoaXMuX3JlbmRlcmVyLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnMucHVzaChoLl9hcnJheVswXSxoLl9hcnJheVsxXSxoLl9hcnJheVsyXSksaS5zZXRVbmlmb3JtKFwidURpcmVjdGlvbmFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzKSxpLnNldFVuaWZvcm0oXCJ1RGlyZWN0aW9uYWxMaWdodENvdW50XCIsdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodENvbG9ycy5sZW5ndGgvMyksdGhpc30sZC5wcm90b3R5cGUucG9pbnRMaWdodD1mdW5jdGlvbihhLGIsYyxlLGYsZyl7dGhpcy5fYXNzZXJ0M2QoXCJwb2ludExpZ2h0XCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBvaW50TGlnaHRcIixhcmd1bWVudHMpO3ZhciBoO2g9YSBpbnN0YW5jZW9mIGQuQ29sb3I/YTp0aGlzLmNvbG9yKGEsYixjKTt2YXIgaSxqLGssbD1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtcIm51bWJlclwiPT10eXBlb2YgbD8oaT1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0zXSxqPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTJdLGs9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pOihpPWwueCxqPWwueSxrPWwueik7dmFyIG09dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIG0uc2V0VW5pZm9ybShcInVVc2VMaWdodGluZ1wiLCEwKSxtLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvciksdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodFBvc2l0aW9ucy5wdXNoKGksaixrKSxtLnNldFVuaWZvcm0oXCJ1UG9pbnRMaWdodExvY2F0aW9uXCIsdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodFBvc2l0aW9ucyksdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodENvbG9ycy5wdXNoKGguX2FycmF5WzBdLGguX2FycmF5WzFdLGguX2FycmF5WzJdKSxtLnNldFVuaWZvcm0oXCJ1UG9pbnRMaWdodENvbG9yXCIsdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodENvbG9ycyksbS5zZXRVbmlmb3JtKFwidVBvaW50TGlnaHRDb3VudFwiLHRoaXMuX3JlbmRlcmVyLnBvaW50TGlnaHRDb2xvcnMubGVuZ3RoLzMpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDY3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgYz17djpbXSx2dDpbXSx2bjpbXX0sZD17fSxmPTA7ZjxiLmxlbmd0aDsrK2Ype3ZhciBnPWJbZl0udHJpbSgpLnNwbGl0KC9cXGJcXHMrLyk7aWYoZy5sZW5ndGg+MClpZihcInZcIj09PWdbMF18fFwidm5cIj09PWdbMF0pe3ZhciBoPW5ldyBlLlZlY3RvcihwYXJzZUZsb2F0KGdbMV0pLHBhcnNlRmxvYXQoZ1syXSkscGFyc2VGbG9hdChnWzNdKSk7Y1tnWzBdXS5wdXNoKGgpfWVsc2UgaWYoXCJ2dFwiPT09Z1swXSl7dmFyIGk9W3BhcnNlRmxvYXQoZ1sxXSkscGFyc2VGbG9hdChnWzJdKV07Y1tnWzBdXS5wdXNoKGkpfWVsc2UgaWYoXCJmXCI9PT1nWzBdKWZvcih2YXIgaj0zO2o8Zy5sZW5ndGg7KytqKXtmb3IodmFyIGs9W10sbD1bMSxqLTEsal0sbT0wO208bC5sZW5ndGg7KyttKXt2YXIgbj1nW2xbbV1dLG89MDtpZih2b2lkIDAhPT1kW25dKW89ZFtuXTtlbHNle2Zvcih2YXIgcD1uLnNwbGl0KFwiL1wiKSxxPTA7cTxwLmxlbmd0aDtxKyspcFtxXT1wYXJzZUludChwW3FdKS0xO289ZFtuXT1hLnZlcnRpY2VzLmxlbmd0aCxhLnZlcnRpY2VzLnB1c2goYy52W3BbMF1dLmNvcHkoKSksYy52dFtwWzFdXT9hLnV2cy5wdXNoKGMudnRbcFsxXV0uc2xpY2UoKSk6YS51dnMucHVzaChbMCwwXSksYy52bltwWzJdXSYmYS52ZXJ0ZXhOb3JtYWxzLnB1c2goYy52bltwWzJdXS5jb3B5KCkpfWsucHVzaChvKX1rWzBdIT09a1sxXSYma1swXSE9PWtbMl0mJmtbMV0hPT1rWzJdJiZhLmZhY2VzLnB1c2goayl9fXJldHVybiAwPT09YS52ZXJ0ZXhOb3JtYWxzLmxlbmd0aCYmYS5jb21wdXRlTm9ybWFscygpLGF9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKTthKFwiLi9wNS5HZW9tZXRyeVwiKSxlLnByb3RvdHlwZS5sb2FkTW9kZWw9ZnVuY3Rpb24oYSl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZE1vZGVsXCIsYXJndW1lbnRzKTt2YXIgYixjLGY7XCJib29sZWFuXCI9PXR5cGVvZiBhcmd1bWVudHNbMV0/KGI9YXJndW1lbnRzWzFdLGM9YXJndW1lbnRzWzJdLGY9YXJndW1lbnRzWzNdKTooYj0hMSxjPWFyZ3VtZW50c1sxXSxmPWFyZ3VtZW50c1syXSk7dmFyIGc9bmV3IGUuR2VvbWV0cnk7Zy5naWQ9YStcInxcIitiO3ZhciBoPXRoaXM7cmV0dXJuIHRoaXMubG9hZFN0cmluZ3MoYSxmdW5jdGlvbihhKXtkKGcsYSksYiYmZy5ub3JtYWxpemUoKSxoLl9kZWNyZW1lbnRQcmVsb2FkKCksXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmYyhnKX0uYmluZCh0aGlzKSxmKSxnfSxlLnByb3RvdHlwZS5tb2RlbD1mdW5jdGlvbihhKXt0aGlzLl9hc3NlcnQzZChcIm1vZGVsXCIpLGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1vZGVsXCIsYXJndW1lbnRzKSxhLnZlcnRpY2VzLmxlbmd0aD4wJiYodGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goYS5naWQpfHwoYS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhhLmdpZCxhKSksdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnMoYS5naWQpKX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5HZW9tZXRyeVwiOjcwfV0sNjg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuL3A1LlRleHR1cmVcIiksZC5wcm90b3R5cGUubG9hZFNoYWRlcj1mdW5jdGlvbihhLGIpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRTaGFkZXJcIixhcmd1bWVudHMpO3ZhciBjPW5ldyBkLlNoYWRlcixlPXRoaXMsZj0hMSxnPSExO3JldHVybiB0aGlzLmxvYWRTdHJpbmdzKGIsZnVuY3Rpb24oYSl7Yy5fZnJhZ1NyYz1hLmpvaW4oXCJcXG5cIiksZj0hMCxnJiZlLl9kZWNyZW1lbnRQcmVsb2FkKCl9KSx0aGlzLmxvYWRTdHJpbmdzKGEsZnVuY3Rpb24oYSl7Yy5fdmVydFNyYz1hLmpvaW4oXCJcXG5cIiksZz0hMCxmJiZlLl9kZWNyZW1lbnRQcmVsb2FkKCl9KSxjfSxkLnByb3RvdHlwZS5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJjcmVhdGVTaGFkZXJcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlU2hhZGVyXCIsYXJndW1lbnRzKSxuZXcgZC5TaGFkZXIodGhpcy5fcmVuZGVyZXIsYSxiKX0sZC5wcm90b3R5cGUuc2hhZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInNoYWRlclwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzaGFkZXJcIixhcmd1bWVudHMpLHZvaWQgMD09PWEuX3JlbmRlcmVyJiYoYS5fcmVuZGVyZXI9dGhpcy5fcmVuZGVyZXIpLGEuaXNTdHJva2VTaGFkZXIoKT90aGlzLl9yZW5kZXJlci5zZXRTdHJva2VTaGFkZXIoYSk6dGhpcy5fcmVuZGVyZXIuc2V0RmlsbFNoYWRlcihhKSx0aGlzfSxkLnByb3RvdHlwZS5ub3JtYWxNYXRlcmlhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcIm5vcm1hbE1hdGVyaWFsXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5vcm1hbE1hdGVyaWFsXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5kcmF3TW9kZT1lLkZJTEwsdGhpcy5fcmVuZGVyZXIuc2V0RmlsbFNoYWRlcih0aGlzLl9yZW5kZXJlci5fZ2V0Tm9ybWFsU2hhZGVyKCkpLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvcj1bMSwxLDEsMV0sdGhpcy5ub1N0cm9rZSgpLHRoaXN9LGQucHJvdG90eXBlLnRleHR1cmU9ZnVuY3Rpb24oYSl7dGhpcy5fYXNzZXJ0M2QoXCJ0ZXh0dXJlXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHR1cmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmRyYXdNb2RlPWUuVEVYVFVSRTt2YXIgYj10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gYi5zZXRVbmlmb3JtKFwidVNwZWN1bGFyXCIsITEpLGIuc2V0VW5pZm9ybShcImlzVGV4dHVyZVwiLCEwKSxiLnNldFVuaWZvcm0oXCJ1U2FtcGxlclwiLGEpLHRoaXMubm9TdHJva2UoKSx0aGlzfSxkLnByb3RvdHlwZS5hbWJpZW50TWF0ZXJpYWw9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJhbWJpZW50TWF0ZXJpYWxcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYW1iaWVudE1hdGVyaWFsXCIsYXJndW1lbnRzKTt2YXIgZj1kLnByb3RvdHlwZS5jb2xvci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yPWYuX2FycmF5O3ZhciBnPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBnLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvciksZy5zZXRVbmlmb3JtKFwidVNwZWN1bGFyXCIsITEpLGcuc2V0VW5pZm9ybShcImlzVGV4dHVyZVwiLCExKSx0aGlzfSxkLnByb3RvdHlwZS5zcGVjdWxhck1hdGVyaWFsPWZ1bmN0aW9uKGEsYixjLGUpe3RoaXMuX2Fzc2VydDNkKFwic3BlY3VsYXJNYXRlcmlhbFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzcGVjdWxhck1hdGVyaWFsXCIsYXJndW1lbnRzKTt2YXIgZj1kLnByb3RvdHlwZS5jb2xvci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yPWYuX2FycmF5O3ZhciBnPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBnLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvciksZy5zZXRVbmlmb3JtKFwidVNwZWN1bGFyXCIsITApLGcuc2V0VW5pZm9ybShcImlzVGV4dHVyZVwiLCExKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9hcHBseUNvbG9yQmxlbmQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5HTCxjPXRoaXMuZHJhd01vZGU9PT1lLlRFWFRVUkU7cmV0dXJuIGN8fGFbYS5sZW5ndGgtMV08MT8oYi5kZXB0aE1hc2soYyksYi5lbmFibGUoYi5CTEVORCksYi5ibGVuZEVxdWF0aW9uKGIuRlVOQ19BREQpLGIuYmxlbmRGdW5jKGIuU1JDX0FMUEhBLGIuT05FX01JTlVTX1NSQ19BTFBIQSkpOihiLmRlcHRoTWFzayghMCksYi5kaXNhYmxlKGIuQkxFTkQpKSxhfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5UZXh0dXJlXCI6NzZ9XSw2OTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuY2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwiY2FtZXJhXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNhbWVyYVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmEuYXBwbHkodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYSxhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLnBlcnNwZWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwicGVyc3BlY3RpdmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicGVyc3BlY3RpdmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEucGVyc3BlY3RpdmUuYXBwbHkodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYSxhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLm9ydGhvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwib3J0aG9cIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwib3J0aG9cIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEub3J0aG8uYXBwbHkodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYSxhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLmNyZWF0ZUNhbWVyYT1mdW5jdGlvbigpe3RoaXMuX2Fzc2VydDNkKFwiY3JlYXRlQ2FtZXJhXCIpO3ZhciBhPW5ldyBkLkNhbWVyYSh0aGlzLl9yZW5kZXJlcik7cmV0dXJuIGEuX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3MoKSxhLl9zZXREZWZhdWx0Q2FtZXJhKCksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYT1hLGF9LGQuQ2FtZXJhPWZ1bmN0aW9uKGEpe3RoaXMuX3JlbmRlcmVyPWEsdGhpcy5jYW1lcmFUeXBlPVwiZGVmYXVsdFwiLHRoaXMuY2FtZXJhTWF0cml4PW5ldyBkLk1hdHJpeCx0aGlzLnByb2pNYXRyaXg9bmV3IGQuTWF0cml4fSxkLkNhbWVyYS5wcm90b3R5cGUucGVyc3BlY3RpdmU9ZnVuY3Rpb24oYSxiLGMsZSl7dm9pZCAwPT09YT8oYT10aGlzLmRlZmF1bHRDYW1lcmFGT1YsdGhpcy5jYW1lcmFGT1Y9YSk6dGhpcy5jYW1lcmFGT1Y9dGhpcy5fcmVuZGVyZXIuX3BJbnN0Ll90b1JhZGlhbnMoYSksdm9pZCAwPT09YiYmKGI9dGhpcy5kZWZhdWx0QXNwZWN0UmF0aW8pLHZvaWQgMD09PWMmJihjPXRoaXMuZGVmYXVsdENhbWVyYU5lYXIpLHZvaWQgMD09PWUmJihlPXRoaXMuZGVmYXVsdENhbWVyYUZhciksYzw9MWUtNCYmKGM9LjAxLGNvbnNvbGUubG9nKFwiQXZvaWQgcGVyc3BlY3RpdmUgbmVhciBwbGFuZSB2YWx1ZXMgY2xvc2UgdG8gb3IgYmVsb3cgMC4gU2V0dGluZyB2YWx1ZSB0byAwLjAxLlwiKSksZTxjJiZjb25zb2xlLmxvZyhcIlBlcnNwZWN0aXZlIGZhciBwbGFuZSB2YWx1ZSBpcyBsZXNzIHRoYW4gbmVhciBwbGFuZSB2YWx1ZS4gTm90aGluZyB3aWxsIGJlIHNob3duLlwiKSx0aGlzLmNhbWVyYUZPVj10aGlzLl9yZW5kZXJlci5fcEluc3QuX3RvUmFkaWFucyhhKSx0aGlzLmFzcGVjdFJhdGlvPWIsdGhpcy5jYW1lcmFOZWFyPWMsdGhpcy5jYW1lcmFGYXI9ZSx0aGlzLnByb2pNYXRyaXg9ZC5NYXRyaXguaWRlbnRpdHkoKTt2YXIgZj0xL01hdGgudGFuKHRoaXMuY2FtZXJhRk9WLzIpLGc9MS8odGhpcy5jYW1lcmFOZWFyLXRoaXMuY2FtZXJhRmFyKTt0aGlzLnByb2pNYXRyaXguc2V0KGYvYiwwLDAsMCwwLC1mLDAsMCwwLDAsKGUrYykqZywtMSwwLDAsMiplKmMqZywwKSx0aGlzLl9pc0FjdGl2ZSgpJiZ0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5zZXQodGhpcy5wcm9qTWF0cml4Lm1hdDRbMF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbM10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbN10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTBdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzExXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTNdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzE0XSx0aGlzLnByb2pNYXRyaXgubWF0NFsxNV0pLHRoaXMuY2FtZXJhVHlwZT1cImN1c3RvbVwifSxkLkNhbWVyYS5wcm90b3R5cGUub3J0aG89ZnVuY3Rpb24oYSxiLGMsZSxmLGcpe3ZvaWQgMD09PWEmJihhPS10aGlzLl9yZW5kZXJlci53aWR0aC8yKSx2b2lkIDA9PT1iJiYoYj0rdGhpcy5fcmVuZGVyZXIud2lkdGgvMiksdm9pZCAwPT09YyYmKGM9LXRoaXMuX3JlbmRlcmVyLmhlaWdodC8yKSx2b2lkIDA9PT1lJiYoZT0rdGhpcy5fcmVuZGVyZXIuaGVpZ2h0LzIpLHZvaWQgMD09PWYmJihmPTApLHZvaWQgMD09PWcmJihnPU1hdGgubWF4KHRoaXMuX3JlbmRlcmVyLndpZHRoLHRoaXMuX3JlbmRlcmVyLmhlaWdodCkpO3ZhciBoPWItYSxpPWUtYyxqPWctZixrPTIvaCxsPTIvaSxtPS0yL2osbj0tKGIrYSkvaCxvPS0oZStjKS9pLHA9LShnK2YpL2o7dGhpcy5wcm9qTWF0cml4PWQuTWF0cml4LmlkZW50aXR5KCksdGhpcy5wcm9qTWF0cml4LnNldChrLDAsMCwwLDAsLWwsMCwwLDAsMCxtLDAsbixvLHAsMSksdGhpcy5faXNBY3RpdmUoKSYmdGhpcy5fcmVuZGVyZXIudVBNYXRyaXguc2V0KHRoaXMucHJvak1hdHJpeC5tYXQ0WzBdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzFdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzJdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzNdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzRdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzVdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzZdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzddLHRoaXMucHJvak1hdHJpeC5tYXQ0WzhdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzldLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEwXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTJdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEzXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxNF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTVdKSx0aGlzLmNhbWVyYVR5cGU9XCJjdXN0b21cIn0sZC5DYW1lcmEucHJvdG90eXBlLl9yb3RhdGVWaWV3PWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXRoaXMuY2VudGVyWCxnPXRoaXMuY2VudGVyWSxoPXRoaXMuY2VudGVyWjtmLT10aGlzLmV5ZVgsZy09dGhpcy5leWVZLGgtPXRoaXMuZXllWjt2YXIgaT1kLk1hdHJpeC5pZGVudGl0eSh0aGlzLl9yZW5kZXJlci5fcEluc3QpO2kucm90YXRlKGEsYixjLGUpO3ZhciBqPVtmKmkubWF0NFswXStnKmkubWF0NFs0XStoKmkubWF0NFs4XSxmKmkubWF0NFsxXStnKmkubWF0NFs1XStoKmkubWF0NFs5XSxmKmkubWF0NFsyXStnKmkubWF0NFs2XStoKmkubWF0NFsxMF1dO2pbMF0rPXRoaXMuZXllWCxqWzFdKz10aGlzLmV5ZVksalsyXSs9dGhpcy5leWVaLHRoaXMuY2FtZXJhKHRoaXMuZXllWCx0aGlzLmV5ZVksdGhpcy5leWVaLGpbMF0salsxXSxqWzJdLHRoaXMudXBYLHRoaXMudXBZLHRoaXMudXBaKX0sZC5DYW1lcmEucHJvdG90eXBlLnBhbj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9nZXRMb2NhbEF4ZXMoKTt0aGlzLl9yb3RhdGVWaWV3KGEsYi55WzBdLGIueVsxXSxiLnlbMl0pfSxkLkNhbWVyYS5wcm90b3R5cGUudGlsdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9nZXRMb2NhbEF4ZXMoKTt0aGlzLl9yb3RhdGVWaWV3KGEsYi54WzBdLGIueFsxXSxiLnhbMl0pfSxkLkNhbWVyYS5wcm90b3R5cGUubG9va0F0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLmNhbWVyYSh0aGlzLmV5ZVgsdGhpcy5leWVZLHRoaXMuZXllWixhLGIsYyx0aGlzLnVwWCx0aGlzLnVwWSx0aGlzLnVwWil9LGQuQ2FtZXJhLnByb3RvdHlwZS5jYW1lcmE9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGkpe3ZvaWQgMD09PWEmJihhPXRoaXMuZGVmYXVsdEV5ZVgsYj10aGlzLmRlZmF1bHRFeWVZLGM9dGhpcy5kZWZhdWx0RXllWixkPWEsZT1iLGY9MCxnPTAsaD0xLGk9MCksdGhpcy5leWVYPWEsdGhpcy5leWVZPWIsdGhpcy5leWVaPWMsdGhpcy5jZW50ZXJYPWQsdGhpcy5jZW50ZXJZPWUsdGhpcy5jZW50ZXJaPWYsdGhpcy51cFg9Zyx0aGlzLnVwWT1oLHRoaXMudXBaPWk7dmFyIGo9dGhpcy5fZ2V0TG9jYWxBeGVzKCk7dGhpcy5jYW1lcmFNYXRyaXguc2V0KGoueFswXSxqLnlbMF0sai56WzBdLDAsai54WzFdLGoueVsxXSxqLnpbMV0sMCxqLnhbMl0sai55WzJdLGouelsyXSwwLDAsMCwwLDEpO3ZhciBrPS1hLGw9LWIsbT0tYztyZXR1cm4gdGhpcy5jYW1lcmFNYXRyaXgudHJhbnNsYXRlKFtrLGwsbV0pLHRoaXMuX2lzQWN0aXZlKCkmJnRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5zZXQodGhpcy5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzFdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzRdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzddLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzEwXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzEzXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSksdGhpc30sZC5DYW1lcmEucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldExvY2FsQXhlcygpLGU9W2QueFswXSphLGQueFsxXSphLGQueFsyXSphXSxmPVtkLnlbMF0qYixkLnlbMV0qYixkLnlbMl0qYl0sZz1bZC56WzBdKmMsZC56WzFdKmMsZC56WzJdKmNdO3RoaXMuY2FtZXJhKHRoaXMuZXllWCtlWzBdK2ZbMF0rZ1swXSx0aGlzLmV5ZVkrZVsxXStmWzFdK2dbMV0sdGhpcy5leWVaK2VbMl0rZlsyXStnWzJdLHRoaXMuY2VudGVyWCtlWzBdK2ZbMF0rZ1swXSx0aGlzLmNlbnRlclkrZVsxXStmWzFdK2dbMV0sdGhpcy5jZW50ZXJaK2VbMl0rZlsyXStnWzJdLDAsMSwwKX0sZC5DYW1lcmEucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLXRoaXMuZXllWCxlPWItdGhpcy5leWVZLGY9Yy10aGlzLmV5ZVo7dGhpcy5jYW1lcmEoYSxiLGMsdGhpcy5jZW50ZXJYK2QsdGhpcy5jZW50ZXJZK2UsdGhpcy5jZW50ZXJaK2YsMCwxLDApfSxkLkNhbWVyYS5wcm90b3R5cGUuX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3M9ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRDYW1lcmFGT1Y9NjAvMTgwKk1hdGguUEksXG50aGlzLmRlZmF1bHRBc3BlY3RSYXRpbz10aGlzLl9yZW5kZXJlci53aWR0aC90aGlzLl9yZW5kZXJlci5oZWlnaHQsdGhpcy5kZWZhdWx0RXllWD0wLHRoaXMuZGVmYXVsdEV5ZVk9MCx0aGlzLmRlZmF1bHRFeWVaPXRoaXMuX3JlbmRlcmVyLmhlaWdodC8yL01hdGgudGFuKHRoaXMuZGVmYXVsdENhbWVyYUZPVi8yKSx0aGlzLmRlZmF1bHRDZW50ZXJYPTAsdGhpcy5kZWZhdWx0Q2VudGVyWT0wLHRoaXMuZGVmYXVsdENlbnRlclo9MCx0aGlzLmRlZmF1bHRDYW1lcmFOZWFyPS4xKnRoaXMuZGVmYXVsdEV5ZVosdGhpcy5kZWZhdWx0Q2FtZXJhRmFyPTEwKnRoaXMuZGVmYXVsdEV5ZVp9LGQuQ2FtZXJhLnByb3RvdHlwZS5fc2V0RGVmYXVsdENhbWVyYT1mdW5jdGlvbigpe3RoaXMuY2FtZXJhRk9WPXRoaXMuZGVmYXVsdENhbWVyYUZPVix0aGlzLmFzcGVjdFJhdGlvPXRoaXMuZGVmYXVsdEFzcGVjdFJhdGlvLHRoaXMuZXllWD10aGlzLmRlZmF1bHRFeWVYLHRoaXMuZXllWT10aGlzLmRlZmF1bHRFeWVZLHRoaXMuZXllWj10aGlzLmRlZmF1bHRFeWVaLHRoaXMuY2VudGVyWD10aGlzLmRlZmF1bHRDZW50ZXJYLHRoaXMuY2VudGVyWT10aGlzLmRlZmF1bHRDZW50ZXJZLHRoaXMuY2VudGVyWj10aGlzLmRlZmF1bHRDZW50ZXJaLHRoaXMudXBYPTAsdGhpcy51cFk9MSx0aGlzLnVwWj0wLHRoaXMuY2FtZXJhTmVhcj10aGlzLmRlZmF1bHRDYW1lcmFOZWFyLHRoaXMuY2FtZXJhRmFyPXRoaXMuZGVmYXVsdENhbWVyYUZhcix0aGlzLnBlcnNwZWN0aXZlKCksdGhpcy5jYW1lcmEoKSx0aGlzLmNhbWVyYVR5cGU9XCJkZWZhdWx0XCJ9LGQuQ2FtZXJhLnByb3RvdHlwZS5fcmVzaXplPWZ1bmN0aW9uKCl7XCJkZWZhdWx0XCI9PT10aGlzLmNhbWVyYVR5cGU/KHRoaXMuX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3MoKSx0aGlzLl9zZXREZWZhdWx0Q2FtZXJhKCkpOnRoaXMucGVyc3BlY3RpdmUodGhpcy5jYW1lcmFGT1YsdGhpcy5fcmVuZGVyZXIud2lkdGgvdGhpcy5fcmVuZGVyZXIuaGVpZ2h0KX0sZC5DYW1lcmEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZC5DYW1lcmEodGhpcy5fcmVuZGVyZXIpO3JldHVybiBhLmNhbWVyYUZPVj10aGlzLmNhbWVyYUZPVixhLmFzcGVjdFJhdGlvPXRoaXMuYXNwZWN0UmF0aW8sYS5leWVYPXRoaXMuZXllWCxhLmV5ZVk9dGhpcy5leWVZLGEuZXllWj10aGlzLmV5ZVosYS5jZW50ZXJYPXRoaXMuY2VudGVyWCxhLmNlbnRlclk9dGhpcy5jZW50ZXJZLGEuY2VudGVyWj10aGlzLmNlbnRlclosYS5jYW1lcmFOZWFyPXRoaXMuY2FtZXJhTmVhcixhLmNhbWVyYUZhcj10aGlzLmNhbWVyYUZhcixhLmNhbWVyYVR5cGU9dGhpcy5jYW1lcmFUeXBlLGEuY2FtZXJhTWF0cml4PXRoaXMuY2FtZXJhTWF0cml4LmNvcHkoKSxhLnByb2pNYXRyaXg9dGhpcy5wcm9qTWF0cml4LmNvcHkoKSxhfSxkLkNhbWVyYS5wcm90b3R5cGUuX2dldExvY2FsQXhlcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZXllWC10aGlzLmNlbnRlclgsYj10aGlzLmV5ZVktdGhpcy5jZW50ZXJZLGM9dGhpcy5leWVaLXRoaXMuY2VudGVyWixkPU1hdGguc3FydChhKmErYipiK2MqYyk7MCE9PWQmJihhLz1kLGIvPWQsYy89ZCk7dmFyIGU9dGhpcy51cFgsZj10aGlzLnVwWSxnPXRoaXMudXBaLGg9ZipjLWcqYixpPS1lKmMrZyphLGo9ZSpiLWYqYTtlPWIqai1jKmksZj0tYSpqK2MqaCxnPWEqaS1iKmg7dmFyIGs9TWF0aC5zcXJ0KGgqaCtpKmkraipqKTswIT09ayYmKGgvPWssaS89ayxqLz1rKTt2YXIgbD1NYXRoLnNxcnQoZSplK2YqZitnKmcpO3JldHVybiAwIT09bCYmKGUvPWwsZi89bCxnLz1sKSx7eDpbaCxpLGpdLHk6W2UsZixnXSx6OlthLGIsY119fSxkLkNhbWVyYS5wcm90b3R5cGUuX29yYml0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmV5ZVgtdGhpcy5jZW50ZXJYLGU9dGhpcy5leWVZLXRoaXMuY2VudGVyWSxmPXRoaXMuZXllWi10aGlzLmNlbnRlclosZz1NYXRoLnNxcnQoZCpkK2UqZStmKmYpLGg9TWF0aC5hdGFuMihkLGYpLGk9TWF0aC5hY29zKE1hdGgubWF4KC0xLE1hdGgubWluKDEsZS9nKSkpO2grPWEsaSs9YixnKz1jLGc8MCYmKGc9LjEpLGk+TWF0aC5QST9pPU1hdGguUEk6aTw9MCYmKGk9LjAwMSk7dmFyIGo9TWF0aC5zaW4oaSkqZypNYXRoLnNpbihoKSxrPU1hdGguY29zKGkpKmcsbD1NYXRoLnNpbihpKSpnKk1hdGguY29zKGgpO3RoaXMuY2FtZXJhKGordGhpcy5jZW50ZXJYLGsrdGhpcy5jZW50ZXJZLGwrdGhpcy5jZW50ZXJaLHRoaXMuY2VudGVyWCx0aGlzLmNlbnRlclksdGhpcy5jZW50ZXJaLDAsMSwwKX0sZC5DYW1lcmEucHJvdG90eXBlLl9pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzPT09dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYX0sZC5wcm90b3R5cGUuc2V0Q2FtZXJhPWZ1bmN0aW9uKGEpe3RoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmE9YSx0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5zZXQoYS5wcm9qTWF0cml4Lm1hdDRbMF0sYS5wcm9qTWF0cml4Lm1hdDRbMV0sYS5wcm9qTWF0cml4Lm1hdDRbMl0sYS5wcm9qTWF0cml4Lm1hdDRbM10sYS5wcm9qTWF0cml4Lm1hdDRbNF0sYS5wcm9qTWF0cml4Lm1hdDRbNV0sYS5wcm9qTWF0cml4Lm1hdDRbNl0sYS5wcm9qTWF0cml4Lm1hdDRbN10sYS5wcm9qTWF0cml4Lm1hdDRbOF0sYS5wcm9qTWF0cml4Lm1hdDRbOV0sYS5wcm9qTWF0cml4Lm1hdDRbMTBdLGEucHJvak1hdHJpeC5tYXQ0WzExXSxhLnByb2pNYXRyaXgubWF0NFsxMl0sYS5wcm9qTWF0cml4Lm1hdDRbMTNdLGEucHJvak1hdHJpeC5tYXQ0WzE0XSxhLnByb2pNYXRyaXgubWF0NFsxNV0pfSxiLmV4cG9ydHM9ZC5DYW1lcmF9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuR2VvbWV0cnk9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLnZlcnRpY2VzPVtdLHRoaXMubGluZVZlcnRpY2VzPVtdLHRoaXMubGluZU5vcm1hbHM9W10sdGhpcy52ZXJ0ZXhOb3JtYWxzPVtdLHRoaXMuZmFjZXM9W10sdGhpcy51dnM9W10sdGhpcy5lZGdlcz1bXSx0aGlzLmRldGFpbFg9dm9pZCAwIT09YT9hOjEsdGhpcy5kZXRhaWxZPXZvaWQgMCE9PWI/YjoxLGMgaW5zdGFuY2VvZiBGdW5jdGlvbiYmYy5jYWxsKHRoaXMpLHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLmNvbXB1dGVGYWNlcz1mdW5jdGlvbigpe3RoaXMuZmFjZXMubGVuZ3RoPTA7Zm9yKHZhciBhLGIsYyxkLGU9dGhpcy5kZXRhaWxYKzEsZj0wO2Y8dGhpcy5kZXRhaWxZO2YrKylmb3IodmFyIGc9MDtnPHRoaXMuZGV0YWlsWDtnKyspYT1mKmUrZyxiPWYqZStnKzEsYz0oZisxKSplK2crMSxkPShmKzEpKmUrZyx0aGlzLmZhY2VzLnB1c2goW2EsYixkXSksdGhpcy5mYWNlcy5wdXNoKFtkLGIsY10pO3JldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5fZ2V0RmFjZU5vcm1hbD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmZhY2VzW2FdLGM9dGhpcy52ZXJ0aWNlc1tiWzBdXSxlPXRoaXMudmVydGljZXNbYlsxXV0sZj10aGlzLnZlcnRpY2VzW2JbMl1dLGc9ZC5WZWN0b3Iuc3ViKGUsYyksaD1kLlZlY3Rvci5zdWIoZixjKSxpPWQuVmVjdG9yLmNyb3NzKGcsaCksaj1kLlZlY3Rvci5tYWcoaSksaz1qLyhkLlZlY3Rvci5tYWcoZykqZC5WZWN0b3IubWFnKGgpKTtyZXR1cm4gMD09PWt8fGlzTmFOKGspPyhjb25zb2xlLndhcm4oXCJwNS5HZW9tZXRyeS5wcm90b3R5cGUuX2dldEZhY2VOb3JtYWw6XCIsXCJmYWNlIGhhcyBjb2xpbmVhciBzaWRlcyBvciBhIHJlcGVhdGVkIHZlcnRleFwiKSxpKTooaz4xJiYoaz0xKSxpLm11bHQoTWF0aC5hc2luKGspL2opKX0sZC5HZW9tZXRyeS5wcm90b3R5cGUuY29tcHV0ZU5vcm1hbHM9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMudmVydGV4Tm9ybWFscyxjPXRoaXMudmVydGljZXMsZT10aGlzLmZhY2VzO2ZvcihiLmxlbmd0aD0wLGE9MDthPGMubGVuZ3RoOysrYSliLnB1c2gobmV3IGQuVmVjdG9yKTtmb3IodmFyIGY9MDtmPGUubGVuZ3RoOysrZilmb3IodmFyIGc9ZVtmXSxoPXRoaXMuX2dldEZhY2VOb3JtYWwoZiksaT0wO2k8MzsrK2kpe3ZhciBqPWdbaV07YltqXS5hZGQoaCl9Zm9yKGE9MDthPGMubGVuZ3RoOysrYSliW2FdLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5hdmVyYWdlTm9ybWFscz1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspe3ZhciBiPXRoaXMuZGV0YWlsWCsxLGM9ZC5WZWN0b3IuYWRkKHRoaXMudmVydGV4Tm9ybWFsc1thKmJdLHRoaXMudmVydGV4Tm9ybWFsc1thKmIrdGhpcy5kZXRhaWxYXSk7Yz1kLlZlY3Rvci5kaXYoYywyKSx0aGlzLnZlcnRleE5vcm1hbHNbYSpiXT1jLHRoaXMudmVydGV4Tm9ybWFsc1thKmIrdGhpcy5kZXRhaWxYXT1jfXJldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5hdmVyYWdlUG9sZU5vcm1hbHM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IGQuVmVjdG9yKDAsMCwwKSxiPTA7Yjx0aGlzLmRldGFpbFg7YisrKWEuYWRkKHRoaXMudmVydGV4Tm9ybWFsc1tiXSk7Zm9yKGE9ZC5WZWN0b3IuZGl2KGEsdGhpcy5kZXRhaWxYKSxiPTA7Yjx0aGlzLmRldGFpbFg7YisrKXRoaXMudmVydGV4Tm9ybWFsc1tiXT1hO2ZvcihhPW5ldyBkLlZlY3RvcigwLDAsMCksYj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xO2I+dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMS10aGlzLmRldGFpbFg7Yi0tKWEuYWRkKHRoaXMudmVydGV4Tm9ybWFsc1tiXSk7Zm9yKGE9ZC5WZWN0b3IuZGl2KGEsdGhpcy5kZXRhaWxYKSxiPXRoaXMudmVydGljZXMubGVuZ3RoLTE7Yj50aGlzLnZlcnRpY2VzLmxlbmd0aC0xLXRoaXMuZGV0YWlsWDtiLS0pdGhpcy52ZXJ0ZXhOb3JtYWxzW2JdPWE7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLl9tYWtlVHJpYW5nbGVFZGdlcz1mdW5jdGlvbigpe2lmKHRoaXMuZWRnZXMubGVuZ3RoPTAsQXJyYXkuaXNBcnJheSh0aGlzLnN0cm9rZUluZGljZXMpKWZvcih2YXIgYT0wLGI9dGhpcy5zdHJva2VJbmRpY2VzLmxlbmd0aDthPGI7YSsrKXRoaXMuZWRnZXMucHVzaCh0aGlzLnN0cm9rZUluZGljZXNbYV0pO2Vsc2UgZm9yKHZhciBjPTA7Yzx0aGlzLmZhY2VzLmxlbmd0aDtjKyspdGhpcy5lZGdlcy5wdXNoKFt0aGlzLmZhY2VzW2NdWzBdLHRoaXMuZmFjZXNbY11bMV1dKSx0aGlzLmVkZ2VzLnB1c2goW3RoaXMuZmFjZXNbY11bMV0sdGhpcy5mYWNlc1tjXVsyXV0pLHRoaXMuZWRnZXMucHVzaChbdGhpcy5mYWNlc1tjXVsyXSx0aGlzLmZhY2VzW2NdWzBdXSk7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLl9lZGdlc1RvVmVydGljZXM9ZnVuY3Rpb24oKXt0aGlzLmxpbmVWZXJ0aWNlcy5sZW5ndGg9MCx0aGlzLmxpbmVOb3JtYWxzLmxlbmd0aD0wO2Zvcih2YXIgYT0wO2E8dGhpcy5lZGdlcy5sZW5ndGg7YSsrKXt2YXIgYj10aGlzLnZlcnRpY2VzW3RoaXMuZWRnZXNbYV1bMF1dLGM9dGhpcy52ZXJ0aWNlc1t0aGlzLmVkZ2VzW2FdWzFdXSxkPWMuY29weSgpLnN1YihiKS5ub3JtYWxpemUoKSxlPWIuYXJyYXkoKSxmPWIuYXJyYXkoKSxnPWMuYXJyYXkoKSxoPWMuYXJyYXkoKSxpPWQuYXJyYXkoKSxqPWQuYXJyYXkoKTtpLnB1c2goMSksai5wdXNoKC0xKSx0aGlzLmxpbmVOb3JtYWxzLnB1c2goaSxqLGksaSxqLGopLHRoaXMubGluZVZlcnRpY2VzLnB1c2goZSxmLGcsZyxmLGgpfXJldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnZlcnRpY2VzLmxlbmd0aD4wKXtmb3IodmFyIGE9dGhpcy52ZXJ0aWNlc1swXS5jb3B5KCksYj10aGlzLnZlcnRpY2VzWzBdLmNvcHkoKSxjPTA7Yzx0aGlzLnZlcnRpY2VzLmxlbmd0aDtjKyspYS54PU1hdGgubWF4KGEueCx0aGlzLnZlcnRpY2VzW2NdLngpLGIueD1NYXRoLm1pbihiLngsdGhpcy52ZXJ0aWNlc1tjXS54KSxhLnk9TWF0aC5tYXgoYS55LHRoaXMudmVydGljZXNbY10ueSksYi55PU1hdGgubWluKGIueSx0aGlzLnZlcnRpY2VzW2NdLnkpLGEuej1NYXRoLm1heChhLnosdGhpcy52ZXJ0aWNlc1tjXS56KSxiLno9TWF0aC5taW4oYi56LHRoaXMudmVydGljZXNbY10ueik7dmFyIGU9ZC5WZWN0b3IubGVycChhLGIsLjUpLGY9ZC5WZWN0b3Iuc3ViKGEsYiksZz1NYXRoLm1heChNYXRoLm1heChmLngsZi55KSxmLnopLGg9MjAwL2c7Zm9yKGM9MDtjPHRoaXMudmVydGljZXMubGVuZ3RoO2MrKyl0aGlzLnZlcnRpY2VzW2NdLnN1YihlKSx0aGlzLnZlcnRpY2VzW2NdLm11bHQoaCl9cmV0dXJuIHRoaXN9LGIuZXhwb3J0cz1kLkdlb21ldHJ5fSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDcxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPUFycmF5LGY9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheX07XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEZsb2F0MzJBcnJheSYmKGU9RmxvYXQzMkFycmF5LGY9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheXx8YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheX0pLGQuTWF0cml4PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxiPTA7YjxhLmxlbmd0aDsrK2IpYVtiXT1hcmd1bWVudHNbYl07cmV0dXJuIGEubGVuZ3RoJiZhW2EubGVuZ3RoLTFdaW5zdGFuY2VvZiBkJiYodGhpcy5wNT1hW2EubGVuZ3RoLTFdKSxcIm1hdDNcIj09PWFbMF0/dGhpcy5tYXQzPUFycmF5LmlzQXJyYXkoYVsxXSk/YVsxXTpuZXcgZShbMSwwLDAsMCwxLDAsMCwwLDFdKTp0aGlzLm1hdDQ9QXJyYXkuaXNBcnJheShhWzBdKT9hWzBdOm5ldyBlKFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSksdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLnNldD1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuTWF0cml4Pyh0aGlzLm1hdDQ9YS5tYXQ0LHRoaXMpOmYoYSk/KHRoaXMubWF0ND1hLHRoaXMpOigxNj09PWFyZ3VtZW50cy5sZW5ndGgmJih0aGlzLm1hdDRbMF09YXJndW1lbnRzWzBdLHRoaXMubWF0NFsxXT1hcmd1bWVudHNbMV0sdGhpcy5tYXQ0WzJdPWFyZ3VtZW50c1syXSx0aGlzLm1hdDRbM109YXJndW1lbnRzWzNdLHRoaXMubWF0NFs0XT1hcmd1bWVudHNbNF0sdGhpcy5tYXQ0WzVdPWFyZ3VtZW50c1s1XSx0aGlzLm1hdDRbNl09YXJndW1lbnRzWzZdLHRoaXMubWF0NFs3XT1hcmd1bWVudHNbN10sdGhpcy5tYXQ0WzhdPWFyZ3VtZW50c1s4XSx0aGlzLm1hdDRbOV09YXJndW1lbnRzWzldLHRoaXMubWF0NFsxMF09YXJndW1lbnRzWzEwXSx0aGlzLm1hdDRbMTFdPWFyZ3VtZW50c1sxMV0sdGhpcy5tYXQ0WzEyXT1hcmd1bWVudHNbMTJdLHRoaXMubWF0NFsxM109YXJndW1lbnRzWzEzXSx0aGlzLm1hdDRbMTRdPWFyZ3VtZW50c1sxNF0sdGhpcy5tYXQ0WzE1XT1hcmd1bWVudHNbMTVdKSx0aGlzKX0sZC5NYXRyaXgucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgZC5NYXRyaXgodGhpcy5tYXQ0LHRoaXMucDUpfSxkLk1hdHJpeC5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkLk1hdHJpeCh0aGlzLnA1KTtyZXR1cm4gYS5tYXQ0WzBdPXRoaXMubWF0NFswXSxhLm1hdDRbMV09dGhpcy5tYXQ0WzFdLGEubWF0NFsyXT10aGlzLm1hdDRbMl0sYS5tYXQ0WzNdPXRoaXMubWF0NFszXSxhLm1hdDRbNF09dGhpcy5tYXQ0WzRdLGEubWF0NFs1XT10aGlzLm1hdDRbNV0sYS5tYXQ0WzZdPXRoaXMubWF0NFs2XSxhLm1hdDRbN109dGhpcy5tYXQ0WzddLGEubWF0NFs4XT10aGlzLm1hdDRbOF0sYS5tYXQ0WzldPXRoaXMubWF0NFs5XSxhLm1hdDRbMTBdPXRoaXMubWF0NFsxMF0sYS5tYXQ0WzExXT10aGlzLm1hdDRbMTFdLGEubWF0NFsxMl09dGhpcy5tYXQ0WzEyXSxhLm1hdDRbMTNdPXRoaXMubWF0NFsxM10sYS5tYXQ0WzE0XT10aGlzLm1hdDRbMTRdLGEubWF0NFsxNV09dGhpcy5tYXQ0WzE1XSxhfSxkLk1hdHJpeC5pZGVudGl0eT1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IGQuTWF0cml4KGEpfSxkLk1hdHJpeC5wcm90b3R5cGUudHJhbnNwb3NlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxnLGgsaTtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuTWF0cml4PyhiPWEubWF0NFsxXSxjPWEubWF0NFsyXSxlPWEubWF0NFszXSxnPWEubWF0NFs2XSxoPWEubWF0NFs3XSxpPWEubWF0NFsxMV0sdGhpcy5tYXQ0WzBdPWEubWF0NFswXSx0aGlzLm1hdDRbMV09YS5tYXQ0WzRdLHRoaXMubWF0NFsyXT1hLm1hdDRbOF0sdGhpcy5tYXQ0WzNdPWEubWF0NFsxMl0sdGhpcy5tYXQ0WzRdPWIsdGhpcy5tYXQ0WzVdPWEubWF0NFs1XSx0aGlzLm1hdDRbNl09YS5tYXQ0WzldLHRoaXMubWF0NFs3XT1hLm1hdDRbMTNdLHRoaXMubWF0NFs4XT1jLHRoaXMubWF0NFs5XT1nLHRoaXMubWF0NFsxMF09YS5tYXQ0WzEwXSx0aGlzLm1hdDRbMTFdPWEubWF0NFsxNF0sdGhpcy5tYXQ0WzEyXT1lLHRoaXMubWF0NFsxM109aCx0aGlzLm1hdDRbMTRdPWksdGhpcy5tYXQ0WzE1XT1hLm1hdDRbMTVdKTpmKGEpJiYoYj1hWzFdLGM9YVsyXSxlPWFbM10sZz1hWzZdLGg9YVs3XSxpPWFbMTFdLHRoaXMubWF0NFswXT1hWzBdLHRoaXMubWF0NFsxXT1hWzRdLHRoaXMubWF0NFsyXT1hWzhdLHRoaXMubWF0NFszXT1hWzEyXSx0aGlzLm1hdDRbNF09Yix0aGlzLm1hdDRbNV09YVs1XSx0aGlzLm1hdDRbNl09YVs5XSx0aGlzLm1hdDRbN109YVsxM10sdGhpcy5tYXQ0WzhdPWMsdGhpcy5tYXQ0WzldPWcsdGhpcy5tYXQ0WzEwXT1hWzEwXSx0aGlzLm1hdDRbMTFdPWFbMTRdLHRoaXMubWF0NFsxMl09ZSx0aGlzLm1hdDRbMTNdPWgsdGhpcy5tYXQ0WzE0XT1pLHRoaXMubWF0NFsxNV09YVsxNV0pLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHM7YSBpbnN0YW5jZW9mIGQuTWF0cml4PyhiPWEubWF0NFswXSxjPWEubWF0NFsxXSxlPWEubWF0NFsyXSxnPWEubWF0NFszXSxoPWEubWF0NFs0XSxpPWEubWF0NFs1XSxqPWEubWF0NFs2XSxrPWEubWF0NFs3XSxsPWEubWF0NFs4XSxtPWEubWF0NFs5XSxuPWEubWF0NFsxMF0sbz1hLm1hdDRbMTFdLHA9YS5tYXQ0WzEyXSxxPWEubWF0NFsxM10scj1hLm1hdDRbMTRdLHM9YS5tYXQ0WzE1XSk6ZihhKSYmKGI9YVswXSxjPWFbMV0sZT1hWzJdLGc9YVszXSxoPWFbNF0saT1hWzVdLGo9YVs2XSxrPWFbN10sbD1hWzhdLG09YVs5XSxuPWFbMTBdLG89YVsxMV0scD1hWzEyXSxxPWFbMTNdLHI9YVsxNF0scz1hWzE1XSk7dmFyIHQ9YippLWMqaCx1PWIqai1lKmgsdj1iKmstZypoLHc9YypqLWUqaSx4PWMqay1nKmkseT1lKmstZypqLHo9bCpxLW0qcCxBPWwqci1uKnAsQj1sKnMtbypwLEM9bSpyLW4qcSxEPW0qcy1vKnEsRT1uKnMtbypyLEY9dCpFLXUqRCt2KkMrdypCLXgqQSt5Kno7cmV0dXJuIEY/KEY9MS9GLHRoaXMubWF0NFswXT0oaSpFLWoqRCtrKkMpKkYsdGhpcy5tYXQ0WzFdPShlKkQtYypFLWcqQykqRix0aGlzLm1hdDRbMl09KHEqeS1yKngrcyp3KSpGLHRoaXMubWF0NFszXT0obip4LW0qeS1vKncpKkYsdGhpcy5tYXQ0WzRdPShqKkItaCpFLWsqQSkqRix0aGlzLm1hdDRbNV09KGIqRS1lKkIrZypBKSpGLHRoaXMubWF0NFs2XT0ocip2LXAqeS1zKnUpKkYsdGhpcy5tYXQ0WzddPShsKnktbip2K28qdSkqRix0aGlzLm1hdDRbOF09KGgqRC1pKkIrayp6KSpGLHRoaXMubWF0NFs5XT0oYypCLWIqRC1nKnopKkYsdGhpcy5tYXQ0WzEwXT0ocCp4LXEqditzKnQpKkYsdGhpcy5tYXQ0WzExXT0obSp2LWwqeC1vKnQpKkYsdGhpcy5tYXQ0WzEyXT0oaSpBLWgqQy1qKnopKkYsdGhpcy5tYXQ0WzEzXT0oYipDLWMqQStlKnopKkYsdGhpcy5tYXQ0WzE0XT0ocSp1LXAqdy1yKnQpKkYsdGhpcy5tYXQ0WzE1XT0obCp3LW0qdStuKnQpKkYsdGhpcyk6bnVsbH0sZC5NYXRyaXgucHJvdG90eXBlLmludmVydDN4Mz1mdW5jdGlvbigpe3ZhciBhPXRoaXMubWF0M1swXSxiPXRoaXMubWF0M1sxXSxjPXRoaXMubWF0M1syXSxkPXRoaXMubWF0M1szXSxlPXRoaXMubWF0M1s0XSxmPXRoaXMubWF0M1s1XSxnPXRoaXMubWF0M1s2XSxoPXRoaXMubWF0M1s3XSxpPXRoaXMubWF0M1s4XSxqPWkqZS1mKmgsaz0taSpkK2YqZyxsPWgqZC1lKmcsbT1hKmorYiprK2MqbDtyZXR1cm4gbT8obT0xL20sdGhpcy5tYXQzWzBdPWoqbSx0aGlzLm1hdDNbMV09KC1pKmIrYypoKSptLHRoaXMubWF0M1syXT0oZipiLWMqZSkqbSx0aGlzLm1hdDNbM109ayptLHRoaXMubWF0M1s0XT0oaSphLWMqZykqbSx0aGlzLm1hdDNbNV09KC1mKmErYypkKSptLHRoaXMubWF0M1s2XT1sKm0sdGhpcy5tYXQzWzddPSgtaCphK2IqZykqbSx0aGlzLm1hdDNbOF09KGUqYS1iKmQpKm0sdGhpcyk6bnVsbH0sZC5NYXRyaXgucHJvdG90eXBlLnRyYW5zcG9zZTN4Mz1mdW5jdGlvbihhKXt2YXIgYj1hWzFdLGM9YVsyXSxkPWFbNV07cmV0dXJuIHRoaXMubWF0M1sxXT1hWzNdLHRoaXMubWF0M1syXT1hWzZdLHRoaXMubWF0M1szXT1iLHRoaXMubWF0M1s1XT1hWzddLHRoaXMubWF0M1s2XT1jLHRoaXMubWF0M1s3XT1kLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5pbnZlcnNlVHJhbnNwb3NlPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PXRoaXMubWF0Mz9jb25zb2xlLmVycm9yKFwic29ycnksIHRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyB3aXRoIG1hdDNcIik6KHRoaXMubWF0M1swXT1hLm1hdDRbMF0sdGhpcy5tYXQzWzFdPWEubWF0NFsxXSx0aGlzLm1hdDNbMl09YS5tYXQ0WzJdLHRoaXMubWF0M1szXT1hLm1hdDRbNF0sdGhpcy5tYXQzWzRdPWEubWF0NFs1XSx0aGlzLm1hdDNbNV09YS5tYXQ0WzZdLHRoaXMubWF0M1s2XT1hLm1hdDRbOF0sdGhpcy5tYXQzWzddPWEubWF0NFs5XSx0aGlzLm1hdDNbOF09YS5tYXQ0WzEwXSk7dmFyIGI9dGhpcy5pbnZlcnQzeDMoKTtpZihiKWIudHJhbnNwb3NlM3gzKHRoaXMubWF0Myk7ZWxzZSBmb3IodmFyIGM9MDtjPDk7YysrKXRoaXMubWF0M1tjXT0wO3JldHVybiB0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuZGV0ZXJtaW5hbnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1hdDRbMF0qdGhpcy5tYXQ0WzVdLXRoaXMubWF0NFsxXSp0aGlzLm1hdDRbNF0sYj10aGlzLm1hdDRbMF0qdGhpcy5tYXQ0WzZdLXRoaXMubWF0NFsyXSp0aGlzLm1hdDRbNF0sYz10aGlzLm1hdDRbMF0qdGhpcy5tYXQ0WzddLXRoaXMubWF0NFszXSp0aGlzLm1hdDRbNF0sZD10aGlzLm1hdDRbMV0qdGhpcy5tYXQ0WzZdLXRoaXMubWF0NFsyXSp0aGlzLm1hdDRbNV0sZT10aGlzLm1hdDRbMV0qdGhpcy5tYXQ0WzddLXRoaXMubWF0NFszXSp0aGlzLm1hdDRbNV0sZj10aGlzLm1hdDRbMl0qdGhpcy5tYXQ0WzddLXRoaXMubWF0NFszXSp0aGlzLm1hdDRbNl0sZz10aGlzLm1hdDRbOF0qdGhpcy5tYXQ0WzEzXS10aGlzLm1hdDRbOV0qdGhpcy5tYXQ0WzEyXSxoPXRoaXMubWF0NFs4XSp0aGlzLm1hdDRbMTRdLXRoaXMubWF0NFsxMF0qdGhpcy5tYXQ0WzEyXSxpPXRoaXMubWF0NFs4XSp0aGlzLm1hdDRbMTVdLXRoaXMubWF0NFsxMV0qdGhpcy5tYXQ0WzEyXSxqPXRoaXMubWF0NFs5XSp0aGlzLm1hdDRbMTRdLXRoaXMubWF0NFsxMF0qdGhpcy5tYXQ0WzEzXSxrPXRoaXMubWF0NFs5XSp0aGlzLm1hdDRbMTVdLXRoaXMubWF0NFsxMV0qdGhpcy5tYXQ0WzEzXTtyZXR1cm4gYSoodGhpcy5tYXQ0WzEwXSp0aGlzLm1hdDRbMTVdLXRoaXMubWF0NFsxMV0qdGhpcy5tYXQ0WzE0XSktYiprK2MqaitkKmktZSpoK2YqZ30sZC5NYXRyaXgucHJvdG90eXBlLm11bHQ9ZnVuY3Rpb24oYSl7dmFyIGI7aWYoYT09PXRoaXN8fGE9PT10aGlzLm1hdDQpYj10aGlzLmNvcHkoKS5tYXQ0O2Vsc2UgaWYoYSBpbnN0YW5jZW9mIGQuTWF0cml4KWI9YS5tYXQ0O2Vsc2V7aWYoIWYoYSkpcmV0dXJuO2I9YX12YXIgYz10aGlzLm1hdDRbMF0sZT10aGlzLm1hdDRbMV0sZz10aGlzLm1hdDRbMl0saD10aGlzLm1hdDRbM107cmV0dXJuIHRoaXMubWF0NFswXT1jKmJbMF0rZSpiWzRdK2cqYls4XStoKmJbMTJdLHRoaXMubWF0NFsxXT1jKmJbMV0rZSpiWzVdK2cqYls5XStoKmJbMTNdLHRoaXMubWF0NFsyXT1jKmJbMl0rZSpiWzZdK2cqYlsxMF0raCpiWzE0XSx0aGlzLm1hdDRbM109YypiWzNdK2UqYls3XStnKmJbMTFdK2gqYlsxNV0sYz10aGlzLm1hdDRbNF0sZT10aGlzLm1hdDRbNV0sZz10aGlzLm1hdDRbNl0saD10aGlzLm1hdDRbN10sdGhpcy5tYXQ0WzRdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzVdPWMqYlsxXStlKmJbNV0rZypiWzldK2gqYlsxM10sdGhpcy5tYXQ0WzZdPWMqYlsyXStlKmJbNl0rZypiWzEwXStoKmJbMTRdLHRoaXMubWF0NFs3XT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSxjPXRoaXMubWF0NFs4XSxlPXRoaXMubWF0NFs5XSxnPXRoaXMubWF0NFsxMF0saD10aGlzLm1hdDRbMTFdLHRoaXMubWF0NFs4XT1jKmJbMF0rZSpiWzRdK2cqYls4XStoKmJbMTJdLHRoaXMubWF0NFs5XT1jKmJbMV0rZSpiWzVdK2cqYls5XStoKmJbMTNdLHRoaXMubWF0NFsxMF09YypiWzJdK2UqYls2XStnKmJbMTBdK2gqYlsxNF0sdGhpcy5tYXQ0WzExXT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSxjPXRoaXMubWF0NFsxMl0sZT10aGlzLm1hdDRbMTNdLGc9dGhpcy5tYXQ0WzE0XSxoPXRoaXMubWF0NFsxNV0sdGhpcy5tYXQ0WzEyXT1jKmJbMF0rZSpiWzRdK2cqYls4XStoKmJbMTJdLHRoaXMubWF0NFsxM109YypiWzFdK2UqYls1XStnKmJbOV0raCpiWzEzXSx0aGlzLm1hdDRbMTRdPWMqYlsyXStlKmJbNl0rZypiWzEwXStoKmJbMTRdLHRoaXMubWF0NFsxNV09YypiWzNdK2UqYls3XStnKmJbMTFdK2gqYlsxNV0sdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyhiPWEueSxjPWEueixhPWEueCk6YSBpbnN0YW5jZW9mIEFycmF5JiYoYj1hWzFdLGM9YVsyXSxhPWFbMF0pLHRoaXMubWF0NFswXSo9YSx0aGlzLm1hdDRbMV0qPWEsdGhpcy5tYXQ0WzJdKj1hLHRoaXMubWF0NFszXSo9YSx0aGlzLm1hdDRbNF0qPWIsdGhpcy5tYXQ0WzVdKj1iLHRoaXMubWF0NFs2XSo9Yix0aGlzLm1hdDRbN10qPWIsdGhpcy5tYXQ0WzhdKj1jLHRoaXMubWF0NFs5XSo9Yyx0aGlzLm1hdDRbMTBdKj1jLHRoaXMubWF0NFsxMV0qPWMsdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj10aGlzLnA1P3RoaXMucDUuX3RvUmFkaWFucyhhKTphO2IgaW5zdGFuY2VvZiBkLlZlY3Rvcj8oYz1iLnksZT1iLnosYj1iLngpOmIgaW5zdGFuY2VvZiBBcnJheSYmKGM9YlsxXSxlPWJbMl0sYj1iWzBdKTt2YXIgZz1NYXRoLnNxcnQoYipiK2MqYytlKmUpO2IqPTEvZyxjKj0xL2csZSo9MS9nO3ZhciBoPXRoaXMubWF0NFswXSxpPXRoaXMubWF0NFsxXSxqPXRoaXMubWF0NFsyXSxrPXRoaXMubWF0NFszXSxsPXRoaXMubWF0NFs0XSxtPXRoaXMubWF0NFs1XSxuPXRoaXMubWF0NFs2XSxvPXRoaXMubWF0NFs3XSxwPXRoaXMubWF0NFs4XSxxPXRoaXMubWF0NFs5XSxyPXRoaXMubWF0NFsxMF0scz10aGlzLm1hdDRbMTFdLHQ9TWF0aC5zaW4oZiksdT1NYXRoLmNvcyhmKSx2PTEtdSx3PWIqYip2K3UseD1jKmIqditlKnQseT1lKmIqdi1jKnQsej1iKmMqdi1lKnQsQT1jKmMqdit1LEI9ZSpjKnYrYip0LEM9YiplKnYrYyp0LEQ9YyplKnYtYip0LEU9ZSplKnYrdTtyZXR1cm4gdGhpcy5tYXQ0WzBdPWgqdytsKngrcCp5LHRoaXMubWF0NFsxXT1pKncrbSp4K3EqeSx0aGlzLm1hdDRbMl09aip3K24qeCtyKnksdGhpcy5tYXQ0WzNdPWsqdytvKngrcyp5LHRoaXMubWF0NFs0XT1oKnorbCpBK3AqQix0aGlzLm1hdDRbNV09aSp6K20qQStxKkIsdGhpcy5tYXQ0WzZdPWoqeituKkErcipCLHRoaXMubWF0NFs3XT1rKnorbypBK3MqQix0aGlzLm1hdDRbOF09aCpDK2wqRCtwKkUsdGhpcy5tYXQ0WzldPWkqQyttKkQrcSpFLHRoaXMubWF0NFsxMF09aipDK24qRCtyKkUsdGhpcy5tYXQ0WzExXT1rKkMrbypEK3MqRSx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGQ9YVsyXXx8MDt0aGlzLm1hdDRbMTJdKz10aGlzLm1hdDRbMF0qYit0aGlzLm1hdDRbNF0qYyt0aGlzLm1hdDRbOF0qZCx0aGlzLm1hdDRbMTNdKz10aGlzLm1hdDRbMV0qYit0aGlzLm1hdDRbNV0qYyt0aGlzLm1hdDRbOV0qZCx0aGlzLm1hdDRbMTRdKz10aGlzLm1hdDRbMl0qYit0aGlzLm1hdDRbNl0qYyt0aGlzLm1hdDRbMTBdKmQsdGhpcy5tYXQ0WzE1XSs9dGhpcy5tYXQ0WzNdKmIrdGhpcy5tYXQ0WzddKmMrdGhpcy5tYXQ0WzExXSpkfSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbihhKXt0aGlzLnJvdGF0ZShhLDEsMCwwKX0sZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oYSl7dGhpcy5yb3RhdGUoYSwwLDEsMCl9LGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKGEpe3RoaXMucm90YXRlKGEsMCwwLDEpfSxkLk1hdHJpeC5wcm90b3R5cGUucGVyc3BlY3RpdmU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9MS9NYXRoLnRhbihhLzIpLGY9MS8oYy1kKTtyZXR1cm4gdGhpcy5tYXQ0WzBdPWUvYix0aGlzLm1hdDRbMV09MCx0aGlzLm1hdDRbMl09MCx0aGlzLm1hdDRbM109MCx0aGlzLm1hdDRbNF09MCx0aGlzLm1hdDRbNV09ZSx0aGlzLm1hdDRbNl09MCx0aGlzLm1hdDRbN109MCx0aGlzLm1hdDRbOF09MCx0aGlzLm1hdDRbOV09MCx0aGlzLm1hdDRbMTBdPShkK2MpKmYsdGhpcy5tYXQ0WzExXT0tMSx0aGlzLm1hdDRbMTJdPTAsdGhpcy5tYXQ0WzEzXT0wLHRoaXMubWF0NFsxNF09MipkKmMqZix0aGlzLm1hdDRbMTVdPTAsdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLm9ydGhvPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz0xLyhhLWIpLGg9MS8oYy1kKSxpPTEvKGUtZik7cmV0dXJuIHRoaXMubWF0NFswXT0tMipnLHRoaXMubWF0NFsxXT0wLHRoaXMubWF0NFsyXT0wLHRoaXMubWF0NFszXT0wLHRoaXMubWF0NFs0XT0wLHRoaXMubWF0NFs1XT0tMipoLHRoaXMubWF0NFs2XT0wLHRoaXMubWF0NFs3XT0wLHRoaXMubWF0NFs4XT0wLHRoaXMubWF0NFs5XT0wLHRoaXMubWF0NFsxMF09MippLHRoaXMubWF0NFsxMV09MCx0aGlzLm1hdDRbMTJdPShhK2IpKmcsdGhpcy5tYXQ0WzEzXT0oZCtjKSpoLHRoaXMubWF0NFsxNF09KGYrZSkqaSx0aGlzLm1hdDRbMTVdPTEsdGhpc30sYi5leHBvcnRzPWQuTWF0cml4fSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDcyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLlJlbmRlcmVyR0wucHJvdG90eXBlLmJlZ2luU2hhcGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9dm9pZCAwIT09YT9hOmUuTElORV9TVFJJUCx2b2lkIDA9PT10aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXM/KHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUuZWRnZXM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0aWNlcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFscz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUudXZDb29yZHM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5jb2xvckJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS51dkJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGV4QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUucG9pbnRWZXJ0ZXhCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleD1bXSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleD1bXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4PVtdKToodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5lZGdlcy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFscy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcy5sZW5ndGg9MCksdGhpcy5pc0ltbWVkaWF0ZURyYXdpbmc9ITAsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS52ZXJ0ZXg9ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGY7Yz1lPWY9MCwzPT09YXJndW1lbnRzLmxlbmd0aD9jPWFyZ3VtZW50c1syXTo0PT09YXJndW1lbnRzLmxlbmd0aD8oZT1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10pOjU9PT1hcmd1bWVudHMubGVuZ3RoJiYoYz1hcmd1bWVudHNbMl0sZT1hcmd1bWVudHNbM10sZj1hcmd1bWVudHNbNF0pO3ZhciBnPW5ldyBkLlZlY3RvcihhLGIsYyk7dGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLnB1c2goZyk7dmFyIGg9dGhpcy5jdXJGaWxsQ29sb3J8fFsuNSwuNSwuNSwxXTtyZXR1cm4gdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleENvbG9ycy5wdXNoKGhbMF0saFsxXSxoWzJdLGhbM10pLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcy5wdXNoKGUsZiksdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF09YSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsxXT1iLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzJdPWMsdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF09YSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXT1iLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzJdPWMsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5lbmRTaGFwZT1mdW5jdGlvbihhLGIsYyxmLGcsaCl7aWYodGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT09PWUuUE9JTlRTKXRoaXMuX3VzZVBvaW50U2hhZGVyKCksdGhpcy5jdXJQb2ludFNoYWRlci5iaW5kU2hhZGVyKCksdGhpcy5fZHJhd1BvaW50cyh0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMsdGhpcy5pbW1lZGlhdGVNb2RlLnBvaW50VmVydGV4QnVmZmVyKSx0aGlzLmN1clBvaW50U2hhZGVyLnVuYmluZFNoYWRlcigpO2Vsc2UgaWYodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aD4xKXtpZih0aGlzLl91c2VJbW1lZGlhdGVNb2RlU2hhZGVyKCksdGhpcy5fZG9TdHJva2UmJnRoaXMuZHJhd01vZGUhPT1lLlRFWFRVUkUpe2Zvcih2YXIgaT0wO2k8dGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aC0xO2krKyl0aGlzLmltbWVkaWF0ZU1vZGUuZWRnZXMucHVzaChbaSxpKzFdKTthPT09ZS5DTE9TRSYmdGhpcy5pbW1lZGlhdGVNb2RlLmVkZ2VzLnB1c2goW3RoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGgtMSwwXSksZC5HZW9tZXRyeS5wcm90b3R5cGUuX2VkZ2VzVG9WZXJ0aWNlcy5jYWxsKHRoaXMuaW1tZWRpYXRlTW9kZSksdGhpcy5fZHJhd1N0cm9rZUltbWVkaWF0ZU1vZGUoKX1pZih0aGlzLl9kb0ZpbGwpe2lmKHRoaXMuaXNCZXppZXJ8fHRoaXMuaXNRdWFkcmF0aWN8fHRoaXMuaXNDdXJ2ZSl7dmFyIGo9W25ldyBGbG9hdDMyQXJyYXkodGhpcy5fdlRvTkFycmF5KHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcykpXSxrPXRoaXMuX3RyaWFuZ3VsYXRlKGopO3RoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcz1bXTtmb3IodmFyIGw9MCxtPWsubGVuZ3RoO2w8bTtsKz0zKXRoaXMudmVydGV4KGtbbF0sa1tsKzFdLGtbbCsyXSl9dGhpcy5fZHJhd0ZpbGxJbW1lZGlhdGVNb2RlKGEsYixjLGYsZyxoKX19cmV0dXJuIHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcy5sZW5ndGg9MCx0aGlzLmlzSW1tZWRpYXRlRHJhd2luZz0hMSx0aGlzLmlzQmV6aWVyPSExLHRoaXMuaXNRdWFkcmF0aWM9ITEsdGhpcy5pc0N1cnZlPSExLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4Lmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4Lmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgubGVuZ3RoPTAsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd0ZpbGxJbW1lZGlhdGVNb2RlPWZ1bmN0aW9uKGEsYixjLGQsZixnKXt2YXIgaD10aGlzLkdMO2lmKHRoaXMuY3VyRmlsbFNoYWRlci5iaW5kU2hhZGVyKCksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4QnVmZmVyLGguQVJSQVlfQlVGRkVSLHRoaXMuX3ZUb05BcnJheSh0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMpLEZsb2F0MzJBcnJheSxoLkRZTkFNSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxoLkZMT0FULCExLDAsMCkpLHRoaXMuZHJhd01vZGU9PT1lLkZJTEwmJnRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhDb2xvciYmKHRoaXMuX2JpbmRCdWZmZXIodGhpcy5pbW1lZGlhdGVNb2RlLmNvbG9yQnVmZmVyLGguQVJSQVlfQlVGRkVSLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnMsRmxvYXQzMkFycmF5LGguRFlOQU1JQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhDb2xvci5sb2NhdGlvbiw0LGguRkxPQVQsITEsMCwwKSksdGhpcy5kcmF3TW9kZT09PWUuVEVYVFVSRSYmdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVRleENvb3JkJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUudXZCdWZmZXIsaC5BUlJBWV9CVUZGRVIsdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLEZsb2F0MzJBcnJheSxoLkRZTkFNSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMixoLkZMT0FULCExLDAsMCkpLHRoaXMuZHJhd01vZGU9PT1lLkZJTEx8fHRoaXMuZHJhd01vZGU9PT1lLlRFWFRVUkUpc3dpdGNoKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGUpe2Nhc2UgZS5MSU5FX1NUUklQOmNhc2UgZS5MSU5FUzpjYXNlIGUuVFJJQU5HTEVTOnRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9dGhpcy5pc0Jlemllcnx8dGhpcy5pc1F1YWRyYXRpY3x8dGhpcy5pc0N1cnZlP2UuVFJJQU5HTEVTOmUuVFJJQU5HTEVfRkFOfWVsc2Ugc3dpdGNoKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGUpe2Nhc2UgZS5MSU5FX1NUUklQOmNhc2UgZS5MSU5FUzp0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPWUuTElORV9MT09QfWlmKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9PT1lLlFVQURTfHx0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPT09ZS5RVUFEX1NUUklQKXRocm93IG5ldyBFcnJvcihcInNvcnJ5LCBcIit0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlK1wiIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gd2ViZ2wgbW9kZS5cIik7dGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyRmlsbENvbG9yKSxoLmVuYWJsZShoLkJMRU5EKSxoLmRyYXdBcnJheXModGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZSwwLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCx0aGlzLmN1ckZpbGxTaGFkZXIudW5iaW5kU2hhZGVyKCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdTdHJva2VJbW1lZGlhdGVNb2RlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5HTDt0aGlzLmN1clN0cm9rZVNoYWRlci5iaW5kU2hhZGVyKCksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGV4QnVmZmVyLGEuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4odGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0aWNlcyksRmxvYXQzMkFycmF5LGEuU1RBVElDX0RSQVcpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGEuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUubGluZU5vcm1hbEJ1ZmZlcixhLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFscyksRmxvYXQzMkFycmF5LGEuU1RBVElDX0RSQVcpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24ubG9jYXRpb24sNCxhLkZMT0FULCExLDAsMCkpLHRoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1clN0cm9rZUNvbG9yKSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsMCx0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzLmxlbmd0aCksdGhpcy5jdXJTdHJva2VTaGFkZXIudW5iaW5kU2hhZGVyKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxiLmV4cG9ydHM9ZC5SZW5kZXJlckdMfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw3MzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT0wO2QuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2luaXRCdWZmZXJEZWZhdWx0cz1mdW5jdGlvbihhKXtpZih0aGlzLl9mcmVlQnVmZmVycyhhKSwrK2U+MWUzKXt2YXIgYj1PYmplY3Qua2V5cyh0aGlzLmdIYXNoKVswXTtkZWxldGUgdGhpcy5nSGFzaFtiXSxlLS19dGhpcy5nSGFzaFthXT17fX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZnJlZUJ1ZmZlcnM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5nSGFzaFthXTtpZihiKXtkZWxldGUgdGhpcy5nSGFzaFthXSxlLS07dmFyIGM9dGhpcy5HTDtiLnZlcnRleEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi52ZXJ0ZXhCdWZmZXIpLGIubm9ybWFsQnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLm5vcm1hbEJ1ZmZlciksYi5saW5lTm9ybWFsQnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLmxpbmVOb3JtYWxCdWZmZXIpLGIudXZCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIudXZCdWZmZXIpLGIuaW5kZXhCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIuaW5kZXhCdWZmZXIpLGIubGluZVZlcnRleEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi5saW5lVmVydGV4QnVmZmVyKX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuY3JlYXRlQnVmZmVycz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuR0w7dGhpcy5faW5pdEJ1ZmZlckRlZmF1bHRzKGEpO3ZhciBkPXRoaXMuZ0hhc2hbYV07cmV0dXJuIGQubnVtYmVyT2ZJdGVtcz0zKmIuZmFjZXMubGVuZ3RoLGQubGluZVZlcnRleENvdW50PWIubGluZVZlcnRpY2VzLmxlbmd0aCx0aGlzLl91c2VDb2xvclNoYWRlcigpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uJiYoZC5saW5lVmVydGV4QnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLmxpbmVWZXJ0ZXhCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbihiLmxpbmVWZXJ0aWNlcyksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGMuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uJiYoZC5saW5lTm9ybWFsQnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLmxpbmVOb3JtYWxCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbihiLmxpbmVOb3JtYWxzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYURpcmVjdGlvbi5sb2NhdGlvbiw0LGMuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uJiYoZC52ZXJ0ZXhCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQudmVydGV4QnVmZmVyLGMuQVJSQVlfQlVGRkVSLHRoaXMuX3ZUb05BcnJheShiLnZlcnRpY2VzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxjLkZMT0FULCExLDAsMCkpLGQuaW5kZXhCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQuaW5kZXhCdWZmZXIsYy5FTEVNRU5UX0FSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIuZmFjZXMpLFVpbnQxNkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFOb3JtYWwmJihkLm5vcm1hbEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC5ub3JtYWxCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KGIudmVydGV4Tm9ybWFscyksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYU5vcm1hbC5sb2NhdGlvbiwzLGMuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVRleENvb3JkJiYoZC51dkJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC51dkJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIudXZzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMixjLkZMT0FULCExLDAsMCkpLGR9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZHJhd0J1ZmZlcnM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5HTDt0aGlzLl91c2VDb2xvclNoYWRlcigpO3ZhciBjPXRoaXMuZ0hhc2hbYV07cmV0dXJuIHRoaXMuX2RvU3Ryb2tlJiZjLmxpbmVWZXJ0ZXhDb3VudD4wJiYodGhpcy5jdXJTdHJva2VTaGFkZXIuYmluZFNoYWRlcigpLGMubGluZVZlcnRleEJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy5saW5lVmVydGV4QnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxiLkZMT0FULCExLDAsMCkpLGMubGluZU5vcm1hbEJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy5saW5lTm9ybWFsQnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uLmxvY2F0aW9uLDQsYi5GTE9BVCwhMSwwLDApKSx0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJTdHJva2VDb2xvciksdGhpcy5fZHJhd0FycmF5cyhiLlRSSUFOR0xFUyxhKSx0aGlzLmN1clN0cm9rZVNoYWRlci51bmJpbmRTaGFkZXIoKSksITEhPT10aGlzLl9kb0ZpbGwmJih0aGlzLmN1ckZpbGxTaGFkZXIuYmluZFNoYWRlcigpLGMudmVydGV4QnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLnZlcnRleEJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxiLkZMT0FULCExLDAsMCkpLGMuaW5kZXhCdWZmZXImJnRoaXMuX2JpbmRCdWZmZXIoYy5pbmRleEJ1ZmZlcixiLkVMRU1FTlRfQVJSQVlfQlVGRkVSKSxjLm5vcm1hbEJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy5ub3JtYWxCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYU5vcm1hbC5sb2NhdGlvbiwzLGIuRkxPQVQsITEsMCwwKSksYy51dkJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy51dkJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMixiLkZMT0FULCExLDAsMCkpLHRoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1ckZpbGxDb2xvciksdGhpcy5fZHJhd0VsZW1lbnRzKGIuVFJJQU5HTEVTLGEpLHRoaXMuY3VyRmlsbFNoYWRlci51bmJpbmRTaGFkZXIoKSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5kcmF3QnVmZmVyc1NjYWxlZD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3RoaXMudU1WTWF0cml4LnNjYWxlKGIsYyxkKSx0aGlzLmRyYXdCdWZmZXJzKGEpfWZpbmFsbHl7dGhpcy51TVZNYXRyaXg9ZX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdBcnJheXM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5HTC5kcmF3QXJyYXlzKGEsMCx0aGlzLmdIYXNoW2JdLmxpbmVWZXJ0ZXhDb3VudCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdFbGVtZW50cz1mdW5jdGlvbihhLGIpe3RoaXMuR0wuZHJhd0VsZW1lbnRzKGEsdGhpcy5nSGFzaFtiXS5udW1iZXJPZkl0ZW1zLHRoaXMuR0wuVU5TSUdORURfU0hPUlQsMCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9kcmF3UG9pbnRzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5HTDt0aGlzLl9iaW5kQnVmZmVyKGIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KGEpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1clBvaW50U2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clBvaW50U2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYy5GTE9BVCwhMSwwLDApLGMuZHJhd0FycmF5cyhjLlBvaW50cywwLGEubGVuZ3RoKX0sYi5leHBvcnRzPWQuUmVuZGVyZXJHTH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3NDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIiksZj1hKFwibGlidGVzc1wiKTthKFwiLi9wNS5TaGFkZXJcIiksYShcIi4vcDUuQ2FtZXJhXCIpLGEoXCIuLi9jb3JlL3A1LlJlbmRlcmVyXCIpLGEoXCIuL3A1Lk1hdHJpeFwiKTt2YXIgZz17aW1tZWRpYXRlVmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBhVmVydGV4Q29sb3I7XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgdVJlc29sdXRpb247XFxudW5pZm9ybSBmbG9hdCB1UG9pbnRTaXplO1xcblxcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG4gIHZDb2xvciA9IGFWZXJ0ZXhDb2xvcjtcXG4gIGdsX1BvaW50U2l6ZSA9IHVQb2ludFNpemU7XFxufVxcblwiLHZlcnRleENvbG9yVmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBhVmVydGV4Q29sb3I7XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG4gIHZDb2xvciA9IGFWZXJ0ZXhDb2xvcjtcXG59XFxuXCIsdmVydGV4Q29sb3JGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yO1xcbn1cIixub3JtYWxWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMzIGFOb3JtYWw7XFxuYXR0cmlidXRlIHZlYzIgYVRleENvb3JkO1xcblxcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgdU5vcm1hbE1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG52YXJ5aW5nIGhpZ2hwIHZlYzIgdlZlcnRUZXhDb29yZDtcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdlZlcnRleE5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMzKCB1Tm9ybWFsTWF0cml4ICogYU5vcm1hbCApKTtcXG4gIHZWZXJ0VGV4Q29vcmQgPSBhVGV4Q29vcmQ7XFxufVxcblwiLG5vcm1hbEZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2VmVydGV4Tm9ybWFsLCAxLjApO1xcbn1cIixiYXNpY0ZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IHVNYXRlcmlhbENvbG9yO1xcbn1cIixsaWdodFZlcnQ6XCJhdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzMgYU5vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxuXFxudW5pZm9ybSBtYXQ0IHVWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgdU5vcm1hbE1hdHJpeDtcXG51bmlmb3JtIGludCB1QW1iaWVudExpZ2h0Q291bnQ7XFxudW5pZm9ybSBpbnQgdURpcmVjdGlvbmFsTGlnaHRDb3VudDtcXG51bmlmb3JtIGludCB1UG9pbnRMaWdodENvdW50O1xcblxcbnVuaWZvcm0gdmVjMyB1QW1iaWVudENvbG9yWzhdO1xcbnVuaWZvcm0gdmVjMyB1TGlnaHRpbmdEaXJlY3Rpb25bOF07XFxudW5pZm9ybSB2ZWMzIHVEaXJlY3Rpb25hbENvbG9yWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodExvY2F0aW9uWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodENvbG9yWzhdO1xcbnVuaWZvcm0gYm9vbCB1U3BlY3VsYXI7XFxuXFxudmFyeWluZyB2ZWMzIHZWZXJ0ZXhOb3JtYWw7XFxudmFyeWluZyB2ZWMyIHZWZXJ0VGV4Q29vcmQ7XFxudmFyeWluZyB2ZWMzIHZMaWdodFdlaWdodGluZztcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuXFxuICB2ZWMzIHZlcnRleE5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMzKCB1Tm9ybWFsTWF0cml4ICogYU5vcm1hbCApKTtcXG4gIHZWZXJ0ZXhOb3JtYWwgPSB2ZXJ0ZXhOb3JtYWw7XFxuICB2VmVydFRleENvb3JkID0gYVRleENvb3JkO1xcblxcbiAgdmVjNCBtdlBvc2l0aW9uID0gdU1vZGVsVmlld01hdHJpeCAqIHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgdmVjMyBleWVEaXJlY3Rpb24gPSBub3JtYWxpemUoLW12UG9zaXRpb24ueHl6KTtcXG5cXG4gIGZsb2F0IHNoaW5pbmVzcyA9IDMyLjA7XFxuICBmbG9hdCBzcGVjdWxhckZhY3RvciA9IDIuMDtcXG4gIGZsb2F0IGRpZmZ1c2VGYWN0b3IgPSAwLjM7XFxuXFxuICB2ZWMzIGFtYmllbnRMaWdodEZhY3RvciA9IHZlYzMoMC4wKTtcXG5cXG4gIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7XFxuICAgIGlmICh1QW1iaWVudExpZ2h0Q291bnQgPT0gaSkgYnJlYWs7XFxuICAgIGFtYmllbnRMaWdodEZhY3RvciArPSB1QW1iaWVudENvbG9yW2ldO1xcbiAgfVxcblxcblxcbiAgdmVjMyBkaXJlY3Rpb25hbExpZ2h0RmFjdG9yID0gdmVjMygwLjApO1xcblxcbiAgZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHtcXG4gICAgaWYgKHVEaXJlY3Rpb25hbExpZ2h0Q291bnQgPT0gaikgYnJlYWs7XFxuICAgIHZlYzMgZGlyID0gdUxpZ2h0aW5nRGlyZWN0aW9uW2pdO1xcbiAgICBmbG9hdCBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nID0gbWF4KGRvdCh2ZXJ0ZXhOb3JtYWwsIC1kaXIpLCAwLjApO1xcbiAgICBkaXJlY3Rpb25hbExpZ2h0RmFjdG9yICs9IHVEaXJlY3Rpb25hbENvbG9yW2pdICogZGlyZWN0aW9uYWxMaWdodFdlaWdodGluZztcXG4gIH1cXG5cXG5cXG4gIHZlYzMgcG9pbnRMaWdodEZhY3RvciA9IHZlYzMoMC4wKTtcXG5cXG4gIGZvciAoaW50IGsgPSAwOyBrIDwgODsgaysrKSB7XFxuICAgIGlmICh1UG9pbnRMaWdodENvdW50ID09IGspIGJyZWFrO1xcbiAgICB2ZWMzIGxvYyA9ICh1Vmlld01hdHJpeCAqIHZlYzQodVBvaW50TGlnaHRMb2NhdGlvbltrXSwgMS4wKSkueHl6O1xcbiAgICB2ZWMzIGxpZ2h0RGlyZWN0aW9uID0gbm9ybWFsaXplKGxvYyAtIG12UG9zaXRpb24ueHl6KTtcXG5cXG4gICAgZmxvYXQgZGlyZWN0aW9uYWxMaWdodFdlaWdodGluZyA9IG1heChkb3QodmVydGV4Tm9ybWFsLCBsaWdodERpcmVjdGlvbiksIDAuMCk7XFxuXFxuICAgIGZsb2F0IHNwZWN1bGFyTGlnaHRXZWlnaHRpbmcgPSAwLjA7XFxuICAgIGlmICh1U3BlY3VsYXIgKXtcXG4gICAgICB2ZWMzIHJlZmxlY3Rpb25EaXJlY3Rpb24gPSByZWZsZWN0KC1saWdodERpcmVjdGlvbiwgdmVydGV4Tm9ybWFsKTtcXG4gICAgICBzcGVjdWxhckxpZ2h0V2VpZ2h0aW5nID0gcG93KG1heChkb3QocmVmbGVjdGlvbkRpcmVjdGlvbiwgZXllRGlyZWN0aW9uKSwgMC4wKSwgc2hpbmluZXNzKTtcXG4gICAgfVxcblxcbiAgICBwb2ludExpZ2h0RmFjdG9yICs9IHVQb2ludExpZ2h0Q29sb3Jba10gKiAoc3BlY3VsYXJGYWN0b3IgKiBzcGVjdWxhckxpZ2h0V2VpZ2h0aW5nXFxuICAgICAgKyBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nICogZGlmZnVzZUZhY3Rvcik7XFxuICB9XFxuXFxuICB2TGlnaHRXZWlnaHRpbmcgPSAgYW1iaWVudExpZ2h0RmFjdG9yICsgZGlyZWN0aW9uYWxMaWdodEZhY3RvciArIHBvaW50TGlnaHRGYWN0b3I7XFxufVxcblwiLGxpZ2h0VGV4dHVyZUZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBib29sIGlzVGV4dHVyZTtcXG51bmlmb3JtIGJvb2wgdVVzZUxpZ2h0aW5nO1xcblxcbnZhcnlpbmcgdmVjMyB2TGlnaHRXZWlnaHRpbmc7XFxudmFyeWluZyBoaWdocCB2ZWMyIHZWZXJ0VGV4Q29vcmQ7XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IGlzVGV4dHVyZSA/IHRleHR1cmUyRCh1U2FtcGxlciwgdlZlcnRUZXhDb29yZCkgOiB1TWF0ZXJpYWxDb2xvcjtcXG4gIGlmICh1VXNlTGlnaHRpbmcpXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgKj0gdkxpZ2h0V2VpZ2h0aW5nO1xcbn1cIixwaG9uZ1ZlcnQ6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzMgYU5vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxuXFxudW5pZm9ybSB2ZWMzIHVBbWJpZW50Q29sb3JbOF07XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyB1Tm9ybWFsTWF0cml4O1xcbnVuaWZvcm0gaW50IHVBbWJpZW50TGlnaHRDb3VudDtcXG5cXG52YXJ5aW5nIHZlYzMgdk5vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2QW1iaWVudENvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG5cXG4gIHZlYzQgdmlld01vZGVsUG9zaXRpb24gPSB1TW9kZWxWaWV3TWF0cml4ICogdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuXFxuICAvLyBQYXNzIHZhcnlpbmdzIHRvIGZyYWdtZW50IHNoYWRlclxcbiAgdlZpZXdQb3NpdGlvbiA9IHZpZXdNb2RlbFBvc2l0aW9uLnh5ejtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB2aWV3TW9kZWxQb3NpdGlvbjsgIFxcblxcbiAgdk5vcm1hbCA9IG5vcm1hbGl6ZSh1Tm9ybWFsTWF0cml4ICogbm9ybWFsaXplKGFOb3JtYWwpKTtcXG4gIHZUZXhDb29yZCA9IGFUZXhDb29yZDtcXG5cXG4gIHZBbWJpZW50Q29sb3IgPSB2ZWMzKDAuMCk7XFxuICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykge1xcbiAgICBpZiAodUFtYmllbnRMaWdodENvdW50ID09IGkpIGJyZWFrO1xcbiAgICB2QW1iaWVudENvbG9yICs9IHVBbWJpZW50Q29sb3JbaV07XFxuICB9XFxufVxcblwiLFxucGhvbmdGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuLy91bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVZpZXdNYXRyaXg7XFxuXFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gYm9vbCBpc1RleHR1cmU7XFxudW5pZm9ybSBib29sIHVVc2VMaWdodGluZztcXG5cXG51bmlmb3JtIHZlYzMgdUxpZ2h0aW5nRGlyZWN0aW9uWzhdO1xcbnVuaWZvcm0gdmVjMyB1RGlyZWN0aW9uYWxDb2xvcls4XTtcXG51bmlmb3JtIHZlYzMgdVBvaW50TGlnaHRMb2NhdGlvbls4XTtcXG51bmlmb3JtIHZlYzMgdVBvaW50TGlnaHRDb2xvcls4XTtcXG51bmlmb3JtIGJvb2wgdVNwZWN1bGFyO1xcblxcbnVuaWZvcm0gaW50IHVEaXJlY3Rpb25hbExpZ2h0Q291bnQ7XFxudW5pZm9ybSBpbnQgdVBvaW50TGlnaHRDb3VudDtcXG5cXG52YXJ5aW5nIHZlYzMgdk5vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2QW1iaWVudENvbG9yO1xcblxcbnZlYzMgVjtcXG52ZWMzIE47XFxuXFxuY29uc3QgZmxvYXQgc2hpbmluZXNzID0gMzIuMDtcXG5jb25zdCBmbG9hdCBzcGVjdWxhckZhY3RvciA9IDIuMDtcXG5jb25zdCBmbG9hdCBkaWZmdXNlRmFjdG9yID0gMC43MztcXG5cXG5zdHJ1Y3QgTGlnaHRSZXN1bHQge1xcblxcdGZsb2F0IHNwZWN1bGFyO1xcblxcdGZsb2F0IGRpZmZ1c2U7XFxufTtcXG5cXG5mbG9hdCBwaG9uZ1NwZWN1bGFyKFxcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcXG4gIGZsb2F0IHNoaW5pbmVzcykge1xcblxcbiAgdmVjMyBSID0gbm9ybWFsaXplKHJlZmxlY3QoLWxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSk7ICBcXG4gIHJldHVybiBwb3cobWF4KDAuMCwgZG90KFIsIHZpZXdEaXJlY3Rpb24pKSwgc2hpbmluZXNzKTtcXG59XFxuXFxuZmxvYXQgbGFtYmVydERpZmZ1c2UoXFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxcbiAgdmVjMyBzdXJmYWNlTm9ybWFsKSB7XFxuICByZXR1cm4gbWF4KDAuMCwgZG90KC1saWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCkpO1xcbn1cXG5cXG5MaWdodFJlc3VsdCBsaWdodCh2ZWMzIGxpZ2h0VmVjdG9yKSB7XFxuXFxuICB2ZWMzIEwgPSBub3JtYWxpemUobGlnaHRWZWN0b3IpO1xcblxcbiAgLy9jb21wdXRlIG91ciBkaWZmdXNlICYgc3BlY3VsYXIgdGVybXNcXG4gIExpZ2h0UmVzdWx0IGxyO1xcbiAgaWYgKHVTcGVjdWxhcilcXG4gICAgbHIuc3BlY3VsYXIgPSBwaG9uZ1NwZWN1bGFyKEwsIFYsIE4sIHNoaW5pbmVzcyk7XFxuICBsci5kaWZmdXNlID0gbGFtYmVydERpZmZ1c2UoTCwgTik7XFxuICByZXR1cm4gbHI7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKSB7XFxuXFxuICBWID0gbm9ybWFsaXplKHZWaWV3UG9zaXRpb24pO1xcbiAgTiA9IHZOb3JtYWw7XFxuXFxuICB2ZWMzIGRpZmZ1c2UgPSB2ZWMzKDAuMCk7XFxuICBmbG9hdCBzcGVjdWxhciA9IDAuMDtcXG5cXG4gIGZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKSB7XFxuICAgIGlmICh1RGlyZWN0aW9uYWxMaWdodENvdW50ID09IGopIGJyZWFrO1xcblxcbiAgICBMaWdodFJlc3VsdCByZXN1bHQgPSBsaWdodCh1TGlnaHRpbmdEaXJlY3Rpb25bal0pO1xcbiAgICBkaWZmdXNlICs9IHJlc3VsdC5kaWZmdXNlICogdURpcmVjdGlvbmFsQ29sb3Jbal07XFxuICAgIHNwZWN1bGFyICs9IHJlc3VsdC5zcGVjdWxhcjtcXG4gIH1cXG5cXG4gIGZvciAoaW50IGsgPSAwOyBrIDwgODsgaysrKSB7XFxuICAgIGlmICh1UG9pbnRMaWdodENvdW50ID09IGspIGJyZWFrO1xcblxcbiAgICB2ZWMzIGxpZ2h0UG9zaXRpb24gPSAodVZpZXdNYXRyaXggKiB2ZWM0KHVQb2ludExpZ2h0TG9jYXRpb25ba10sIDEuMCkpLnh5ejtcXG4gICAgdmVjMyBsaWdodFZlY3RvciA9IHZWaWV3UG9zaXRpb24gLSBsaWdodFBvc2l0aW9uO1xcblxcdFxcbiAgICAvL2NhbGN1bGF0ZSBhdHRlbnVhdGlvblxcbiAgICBmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKGxpZ2h0VmVjdG9yKTtcXG4gICAgZmxvYXQgZmFsbG9mZiA9IDUwMC4wIC8gKGxpZ2h0RGlzdGFuY2UgKyA1MDAuMCk7XFxuXFxuICAgIExpZ2h0UmVzdWx0IHJlc3VsdCA9IGxpZ2h0KGxpZ2h0VmVjdG9yKTtcXG4gICAgZGlmZnVzZSArPSByZXN1bHQuZGlmZnVzZSAqIGZhbGxvZmYgKiB1UG9pbnRMaWdodENvbG9yW2tdO1xcbiAgICBzcGVjdWxhciArPSByZXN1bHQuc3BlY3VsYXIgKiBmYWxsb2ZmO1xcbiAgfVxcblxcbiAgZ2xfRnJhZ0NvbG9yID0gaXNUZXh0dXJlID8gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4Q29vcmQpIDogdU1hdGVyaWFsQ29sb3I7XFxuICBnbF9GcmFnQ29sb3IucmdiID0gZ2xfRnJhZ0NvbG9yLnJnYiAqIChkaWZmdXNlICogZGlmZnVzZUZhY3RvciArIHZBbWJpZW50Q29sb3IpICsgc3BlY3VsYXIgKiBzcGVjdWxhckZhY3RvcjtcXG59XCIsZm9udFZlcnQ6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleENvb3JkO1xcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG5cXG51bmlmb3JtIHZlYzQgdUdseXBoUmVjdDtcXG51bmlmb3JtIGZsb2F0IHVHbHlwaE9mZnNldDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcbnZhcnlpbmcgZmxvYXQgdztcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcblxcbiAgLy8gc2NhbGUgYnkgdGhlIHNpemUgb2YgdGhlIGdseXBoJ3MgcmVjdGFuZ2xlXFxuICBwb3NpdGlvblZlYzQueHkgKj0gdUdseXBoUmVjdC56dyAtIHVHbHlwaFJlY3QueHk7XFxuXFxuICAvLyBtb3ZlIHRvIHRoZSBjb3JuZXIgb2YgdGhlIGdseXBoXFxuICBwb3NpdGlvblZlYzQueHkgKz0gdUdseXBoUmVjdC54eTtcXG5cXG4gIC8vIG1vdmUgdG8gdGhlIGxldHRlcidzIGxpbmUgb2Zmc2V0XFxuICBwb3NpdGlvblZlYzQueCArPSB1R2x5cGhPZmZzZXQ7XFxuICBcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdlRleENvb3JkID0gYVRleENvb3JkO1xcbiAgdyA9IGdsX1Bvc2l0aW9uLnc7XFxufVxcblwiLGZvbnRGcmFnOlwiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG4jaWYgMFxcbiAgLy8gc2ltdWxhdGUgaW50ZWdlciBtYXRoIHVzaW5nIGZsb2F0c1xcblxcdCNkZWZpbmUgaW50IGZsb2F0XFxuXFx0I2RlZmluZSBpdmVjMiB2ZWMyXFxuXFx0I2RlZmluZSBJTlQoeCkgZmxvYXQoeClcXG5cXG5cXHRpbnQgaWZsb29yKGZsb2F0IHYpIHsgcmV0dXJuIGZsb29yKHYpOyB9XFxuXFx0aXZlYzIgaWZsb29yKHZlYzIgdikgeyByZXR1cm4gZmxvb3Iodik7IH1cXG5cXG4jZWxzZVxcbiAgLy8gdXNlIG5hdGl2ZSBpbnRlZ2VyIG1hdGhcXG5cXHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XFxuXFx0I2RlZmluZSBJTlQoeCkgeFxcblxcblxcdGludCBpZmxvb3IoZmxvYXQgdikgeyByZXR1cm4gaW50KHYpOyB9XFxuXFx0aW50IGlmbG9vcihpbnQgdikgeyByZXR1cm4gdjsgfVxcblxcdGl2ZWMyIGlmbG9vcih2ZWMyIHYpIHsgcmV0dXJuIGl2ZWMyKHYpOyB9XFxuXFxuI2VuZGlmXFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJTdHJva2VzO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyUm93U3Ryb2tlcztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlclJvd3M7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJDb2xTdHJva2VzO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyQ29scztcXG5cXG51bmlmb3JtIGl2ZWMyIHVTdHJva2VJbWFnZVNpemU7XFxudW5pZm9ybSBpdmVjMiB1Q2VsbHNJbWFnZVNpemU7XFxudW5pZm9ybSBpdmVjMiB1R3JpZEltYWdlU2l6ZTtcXG5cXG51bmlmb3JtIGl2ZWMyIHVHcmlkT2Zmc2V0O1xcbnVuaWZvcm0gaXZlYzIgdUdyaWRTaXplO1xcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcblxcbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9uc1xcbmludCByb3VuZChmbG9hdCB2KSB7IHJldHVybiBpZmxvb3IodiArIDAuNSk7IH1cXG5pdmVjMiByb3VuZCh2ZWMyIHYpIHsgcmV0dXJuIGlmbG9vcih2ICsgMC41KTsgfVxcbmZsb2F0IHNhdHVyYXRlKGZsb2F0IHYpIHsgcmV0dXJuIGNsYW1wKHYsIDAuMCwgMS4wKTsgfVxcbnZlYzIgc2F0dXJhdGUodmVjMiB2KSB7IHJldHVybiBjbGFtcCh2LCAwLjAsIDEuMCk7IH1cXG5cXG5pbnQgbXVsKGZsb2F0IHYxLCBpbnQgdjIpIHtcXG4gIHJldHVybiBpZmxvb3IodjEgKiBmbG9hdCh2MikpO1xcbn1cXG5cXG5pdmVjMiBtdWwodmVjMiB2MSwgaXZlYzIgdjIpIHtcXG4gIHJldHVybiBpZmxvb3IodjEgKiB2ZWMyKHYyKSArIDAuNSk7XFxufVxcblxcbi8vIHVucGFjayBhIDE2LWJpdCBpbnRlZ2VyIGZyb20gYSBmbG9hdCB2ZWMyXFxuaW50IGdldEludDE2KHZlYzIgdikge1xcbiAgaXZlYzIgaXYgPSByb3VuZCh2ICogMjU1LjApO1xcbiAgcmV0dXJuIGl2LnggKiBJTlQoMTI4KSArIGl2Lnk7XFxufVxcblxcbnZlYzIgcGl4ZWxTY2FsZTtcXG52ZWMyIGNvdmVyYWdlID0gdmVjMigwLjApO1xcbnZlYzIgd2VpZ2h0ID0gdmVjMigwLjUpO1xcbmNvbnN0IGZsb2F0IG1pbkRpc3RhbmNlID0gMS4wLzgxOTIuMDtcXG5jb25zdCBmbG9hdCBoYXJkbmVzcyA9IDEuMDU7IC8vIGFtb3VudCBvZiBhbnRpYWxpYXNcXG5cXG4vLyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY3VydmVzIGluIGEgZ2x5cGhcXG5jb25zdCBpbnQgTiA9IElOVCgyNTApO1xcblxcbi8vIHJldHJpZXZlcyBhbiBpbmRleGVkIHBpeGVsIGZyb20gYSBzYW1wbGVyXFxudmVjNCBnZXRUZXhlbChzYW1wbGVyMkQgc2FtcGxlciwgaW50IHBvcywgaXZlYzIgc2l6ZSkge1xcbiAgaW50IHdpZHRoID0gc2l6ZS54O1xcbiAgaW50IHkgPSBpZmxvb3IocG9zIC8gd2lkdGgpO1xcbiAgaW50IHggPSBwb3MgLSB5ICogd2lkdGg7ICAvLyBwb3MgJSB3aWR0aFxcblxcbiAgcmV0dXJuIHRleHR1cmUyRChzYW1wbGVyLCAodmVjMih4LCB5KSArIDAuNSkgLyB2ZWMyKHNpemUpKTtcXG59XFxuXFxudm9pZCBjYWx1bGF0ZUNyb3NzaW5ncyh2ZWMyIHAwLCB2ZWMyIHAxLCB2ZWMyIHAyLCBvdXQgdmVjMiBDMSwgb3V0IHZlYzIgQzIpIHtcXG5cXG4gIC8vIGdldCB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBxdWFkcmF0aWMgaW4gdFxcbiAgdmVjMiBhID0gcDAgLSBwMSAqIDIuMCArIHAyO1xcbiAgdmVjMiBiID0gcDAgLSBwMTtcXG4gIHZlYzIgYyA9IHAwIC0gdlRleENvb3JkO1xcblxcbiAgLy8gZm91bmQgb3V0IHdoaWNoIHZhbHVlcyBvZiAndCcgaXQgY3Jvc3NlcyB0aGUgYXhlc1xcbiAgdmVjMiBzdXJkID0gc3FydChtYXgodmVjMigwLjApLCBiICogYiAtIGEgKiBjKSk7XFxuICB2ZWMyIHQxID0gKChiIC0gc3VyZCkgLyBhKS55eDtcXG4gIHZlYzIgdDIgPSAoKGIgKyBzdXJkKSAvIGEpLnl4O1xcblxcbiAgLy8gYXBwcm94aW1hdGUgc3RyYWlnaHQgbGluZXMgdG8gYXZvaWQgcm91bmRpbmcgZXJyb3JzXFxuICBpZiAoYWJzKGEueSkgPCAwLjAwMSlcXG4gICAgdDEueCA9IHQyLnggPSBjLnkgLyAoMi4wICogYi55KTtcXG5cXG4gIGlmIChhYnMoYS54KSA8IDAuMDAxKVxcbiAgICB0MS55ID0gdDIueSA9IGMueCAvICgyLjAgKiBiLngpO1xcblxcbiAgLy8gcGx1ZyBpbnRvIHF1YWRyYXRpYyBmb3JtdWxhIHRvIGZpbmQgdGhlIGNvcnJkaW5hdGVzIG9mIHRoZSBjcm9zc2luZ3NcXG4gIEMxID0gKChhICogdDEgLSBiICogMi4wKSAqIHQxICsgYykgKiBwaXhlbFNjYWxlO1xcbiAgQzIgPSAoKGEgKiB0MiAtIGIgKiAyLjApICogdDIgKyBjKSAqIHBpeGVsU2NhbGU7XFxufVxcblxcbnZvaWQgY292ZXJhZ2VYKHZlYzIgcDAsIHZlYzIgcDEsIHZlYzIgcDIpIHtcXG5cXG4gIHZlYzIgQzEsIEMyO1xcbiAgY2FsdWxhdGVDcm9zc2luZ3MocDAsIHAxLCBwMiwgQzEsIEMyKTtcXG5cXG4gIC8vIGRldGVybWluZSBvbiB3aGljaCBzaWRlIG9mIHRoZSB4LWF4aXMgdGhlIHBvaW50cyBsaWVcXG4gIGJvb2wgeTAgPSBwMC55ID4gdlRleENvb3JkLnk7XFxuICBib29sIHkxID0gcDEueSA+IHZUZXhDb29yZC55O1xcbiAgYm9vbCB5MiA9IHAyLnkgPiB2VGV4Q29vcmQueTtcXG5cXG4gIC8vIGNvdWxkIHdlYiBiZSB1bmRlciB0aGUgY3VydmUgKGFmdGVyIHQxKT9cXG4gIGlmICh5MSA/ICF5MiA6IHkwKSB7XFxuICAgIC8vIGFkZCB0aGUgY292ZXJhZ2UgZm9yIHQxXFxuICAgIGNvdmVyYWdlLnggKz0gc2F0dXJhdGUoQzEueCArIDAuNSk7XFxuICAgIC8vIGNhbGN1bGF0ZSB0aGUgYW50aS1hbGlhc2luZyBmb3IgdDFcXG4gICAgd2VpZ2h0LnggPSBtaW4od2VpZ2h0LngsIGFicyhDMS54KSk7XFxuICB9XFxuXFxuICAvLyBhcmUgd2Ugb3V0c2lkZSB0aGUgY3VydmUgKGFmdGVyIHQyKT9cXG4gIGlmICh5MSA/ICF5MCA6IHkyKSB7XFxuICAgIC8vIHN1YnRyYWN0IHRoZSBjb3ZlcmFnZSBmb3IgdDJcXG4gICAgY292ZXJhZ2UueCAtPSBzYXR1cmF0ZShDMi54ICsgMC41KTtcXG4gICAgLy8gY2FsY3VsYXRlIHRoZSBhbnRpLWFsaWFzaW5nIGZvciB0MlxcbiAgICB3ZWlnaHQueCA9IG1pbih3ZWlnaHQueCwgYWJzKEMyLngpKTtcXG4gIH1cXG59XFxuXFxuLy8gdGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBjb3ZlcmFnZVgsIGJ1dCB3aXRoIHRoZSBheGVzIHN3YXBwZWRcXG52b2lkIGNvdmVyYWdlWSh2ZWMyIHAwLCB2ZWMyIHAxLCB2ZWMyIHAyKSB7XFxuXFxuICB2ZWMyIEMxLCBDMjtcXG4gIGNhbHVsYXRlQ3Jvc3NpbmdzKHAwLCBwMSwgcDIsIEMxLCBDMik7XFxuXFxuICBib29sIHgwID0gcDAueCA+IHZUZXhDb29yZC54O1xcbiAgYm9vbCB4MSA9IHAxLnggPiB2VGV4Q29vcmQueDtcXG4gIGJvb2wgeDIgPSBwMi54ID4gdlRleENvb3JkLng7XFxuXFxuICBpZiAoeDEgPyAheDIgOiB4MCkge1xcbiAgICBjb3ZlcmFnZS55IC09IHNhdHVyYXRlKEMxLnkgKyAwLjUpO1xcbiAgICB3ZWlnaHQueSA9IG1pbih3ZWlnaHQueSwgYWJzKEMxLnkpKTtcXG4gIH1cXG5cXG4gIGlmICh4MSA/ICF4MCA6IHgyKSB7XFxuICAgIGNvdmVyYWdlLnkgKz0gc2F0dXJhdGUoQzIueSArIDAuNSk7XFxuICAgIHdlaWdodC55ID0gbWluKHdlaWdodC55LCBhYnMoQzIueSkpO1xcbiAgfVxcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuXFxuICAvLyBjYWxjdWxhdGUgdGhlIHBpeGVsIHNjYWxlIGJhc2VkIG9uIHNjcmVlbi1jb29yZGluYXRlc1xcbiAgcGl4ZWxTY2FsZSA9IGhhcmRuZXNzIC8gZndpZHRoKHZUZXhDb29yZCk7XFxuXFxuICAvLyB3aGljaCBncmlkIGNlbGwgaXMgdGhpcyBwaXhlbCBpbj9cXG4gIGl2ZWMyIGdyaWRDb29yZCA9IGlmbG9vcih2VGV4Q29vcmQgKiB2ZWMyKHVHcmlkU2l6ZSkpO1xcblxcbiAgLy8gaW50ZXJzZWN0IGN1cnZlcyBpbiB0aGlzIHJvd1xcbiAge1xcbiAgICAvLyB0aGUgaW5kZXggaW50byB0aGUgcm93IGluZm8gYml0bWFwXFxuICAgIGludCByb3dJbmRleCA9IGdyaWRDb29yZC55ICsgdUdyaWRPZmZzZXQueTtcXG4gICAgLy8gZmV0Y2ggdGhlIGluZm8gdGV4ZWxcXG4gICAgdmVjNCByb3dJbmZvID0gZ2V0VGV4ZWwodVNhbXBsZXJSb3dzLCByb3dJbmRleCwgdUdyaWRJbWFnZVNpemUpO1xcbiAgICAvLyB1bnBhY2sgdGhlIHJvd0luZm9cXG4gICAgaW50IHJvd1N0cm9rZUluZGV4ID0gZ2V0SW50MTYocm93SW5mby54eSk7XFxuICAgIGludCByb3dTdHJva2VDb3VudCA9IGdldEludDE2KHJvd0luZm8uencpO1xcblxcbiAgICBmb3IgKGludCBpUm93U3Ryb2tlID0gSU5UKDApOyBpUm93U3Ryb2tlIDwgTjsgaVJvd1N0cm9rZSsrKSB7XFxuICAgICAgaWYgKGlSb3dTdHJva2UgPj0gcm93U3Ryb2tlQ291bnQpXFxuICAgICAgICBicmVhaztcXG5cXG4gICAgICAvLyBlYWNoIHN0cm9rZSBpcyBtYWRlIHVwIG9mIDMgcG9pbnRzOiB0aGUgc3RhcnQgYW5kIGNvbnRyb2wgcG9pbnRcXG4gICAgICAvLyBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGN1cnZlLlxcbiAgICAgIC8vIGZldGNoIHRoZSBpbmRpY2VzIG9mIHRoaXMgcGFpciBvZiBzdHJva2VzOlxcbiAgICAgIHZlYzQgc3Ryb2tlSW5kaWNlcyA9IGdldFRleGVsKHVTYW1wbGVyUm93U3Ryb2tlcywgcm93U3Ryb2tlSW5kZXgrKywgdUNlbGxzSW1hZ2VTaXplKTtcXG5cXG4gICAgICAvLyB1bnBhY2sgdGhlIHN0cm9rZSBpbmRleFxcbiAgICAgIGludCBzdHJva2VQb3MgPSBnZXRJbnQxNihzdHJva2VJbmRpY2VzLnh5KTtcXG5cXG4gICAgICAvLyBmZXRjaCB0aGUgdHdvIHN0cm9rZXNcXG4gICAgICB2ZWM0IHN0cm9rZTAgPSBnZXRUZXhlbCh1U2FtcGxlclN0cm9rZXMsIHN0cm9rZVBvcyArIElOVCgwKSwgdVN0cm9rZUltYWdlU2l6ZSk7XFxuICAgICAgdmVjNCBzdHJva2UxID0gZ2V0VGV4ZWwodVNhbXBsZXJTdHJva2VzLCBzdHJva2VQb3MgKyBJTlQoMSksIHVTdHJva2VJbWFnZVNpemUpO1xcblxcbiAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgY292ZXJhZ2VcXG4gICAgICBjb3ZlcmFnZVgoc3Ryb2tlMC54eSwgc3Ryb2tlMC56dywgc3Ryb2tlMS54eSk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC8vIGludGVyc2VjdCBjdXJ2ZXMgaW4gdGhpcyBjb2x1bW5cXG4gIHtcXG4gICAgaW50IGNvbEluZGV4ID0gZ3JpZENvb3JkLnggKyB1R3JpZE9mZnNldC54O1xcbiAgICB2ZWM0IGNvbEluZm8gPSBnZXRUZXhlbCh1U2FtcGxlckNvbHMsIGNvbEluZGV4LCB1R3JpZEltYWdlU2l6ZSk7XFxuICAgIGludCBjb2xTdHJva2VJbmRleCA9IGdldEludDE2KGNvbEluZm8ueHkpO1xcbiAgICBpbnQgY29sU3Ryb2tlQ291bnQgPSBnZXRJbnQxNihjb2xJbmZvLnp3KTtcXG4gICAgXFxuICAgIGZvciAoaW50IGlDb2xTdHJva2UgPSBJTlQoMCk7IGlDb2xTdHJva2UgPCBOOyBpQ29sU3Ryb2tlKyspIHtcXG4gICAgICBpZiAoaUNvbFN0cm9rZSA+PSBjb2xTdHJva2VDb3VudClcXG4gICAgICAgIGJyZWFrO1xcblxcbiAgICAgIHZlYzQgc3Ryb2tlSW5kaWNlcyA9IGdldFRleGVsKHVTYW1wbGVyQ29sU3Ryb2tlcywgY29sU3Ryb2tlSW5kZXgrKywgdUNlbGxzSW1hZ2VTaXplKTtcXG5cXG4gICAgICBpbnQgc3Ryb2tlUG9zID0gZ2V0SW50MTYoc3Ryb2tlSW5kaWNlcy54eSk7XFxuICAgICAgdmVjNCBzdHJva2UwID0gZ2V0VGV4ZWwodVNhbXBsZXJTdHJva2VzLCBzdHJva2VQb3MgKyBJTlQoMCksIHVTdHJva2VJbWFnZVNpemUpO1xcbiAgICAgIHZlYzQgc3Ryb2tlMSA9IGdldFRleGVsKHVTYW1wbGVyU3Ryb2tlcywgc3Ryb2tlUG9zICsgSU5UKDEpLCB1U3Ryb2tlSW1hZ2VTaXplKTtcXG4gICAgICBjb3ZlcmFnZVkoc3Ryb2tlMC54eSwgc3Ryb2tlMC56dywgc3Ryb2tlMS54eSk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIHdlaWdodCA9IHNhdHVyYXRlKDEuMCAtIHdlaWdodCAqIDIuMCk7XFxuICBmbG9hdCBkaXN0YW5jZSA9IG1heCh3ZWlnaHQueCArIHdlaWdodC55LCBtaW5EaXN0YW5jZSk7IC8vIG1hbmhhdHRhbiBhcHByb3guXFxuICBmbG9hdCBhbnRpYWxpYXMgPSBhYnMoZG90KGNvdmVyYWdlLCB3ZWlnaHQpIC8gZGlzdGFuY2UpO1xcbiAgZmxvYXQgY292ZXIgPSBtaW4oYWJzKGNvdmVyYWdlLngpLCBhYnMoY292ZXJhZ2UueSkpO1xcbiAgZ2xfRnJhZ0NvbG9yID0gdU1hdGVyaWFsQ29sb3I7XFxuICBnbF9GcmFnQ29sb3IuYSAqPSBzYXR1cmF0ZShtYXgoYW50aWFsaWFzLCBjb3ZlcikpO1xcbn1cIixsaW5lVmVydDpcIi8qXFxuICBQYXJ0IG9mIHRoZSBQcm9jZXNzaW5nIHByb2plY3QgLSBodHRwOi8vcHJvY2Vzc2luZy5vcmdcXG4gIENvcHlyaWdodCAoYykgMjAxMi0xNSBUaGUgUHJvY2Vzc2luZyBGb3VuZGF0aW9uXFxuICBDb3B5cmlnaHQgKGMpIDIwMDQtMTIgQmVuIEZyeSBhbmQgQ2FzZXkgUmVhc1xcbiAgQ29weXJpZ2h0IChjKSAyMDAxLTA0IE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3lcXG4gIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcXG4gIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcXG4gIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4xLlxcbiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXFxuICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxcbiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcXG4gIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXFxuICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWxcXG4gIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZVxcbiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCxcXG4gIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQVxcbiovXFxuXFxuI2RlZmluZSBQUk9DRVNTSU5HX0xJTkVfU0hBREVSXFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgdVN0cm9rZVdlaWdodDtcXG5cXG51bmlmb3JtIHZlYzQgdVZpZXdwb3J0O1xcblxcbi8vIHVzaW5nIGEgc2NhbGUgPDEgbW92ZXMgdGhlIGxpbmVzIHRvd2FyZHMgdGhlIGNhbWVyYVxcbi8vIGluIG9yZGVyIHRvIHByZXZlbnQgcG9wcGluZyBlZmZlY3RzIGR1ZSB0byBoYWxmIG9mXFxuLy8gdGhlIGxpbmUgZGlzYXBwZWFyaW5nIGJlaGluZCB0aGUgZ2VvbWV0cnkgZmFjZXMuXFxudmVjMyBzY2FsZSA9IHZlYzMoMC45OTk1KTtcXG5cXG5hdHRyaWJ1dGUgdmVjNCBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgYURpcmVjdGlvbjtcXG4gIFxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzQgcG9zcCA9IHVNb2RlbFZpZXdNYXRyaXggKiBhUG9zaXRpb247XFxuICB2ZWM0IHBvc3EgPSB1TW9kZWxWaWV3TWF0cml4ICogKGFQb3NpdGlvbiArIHZlYzQoYURpcmVjdGlvbi54eXosIDApKTtcXG5cXG4gIC8vIE1vdmluZyB2ZXJ0aWNlcyBzbGlnaHRseSB0b3dhcmQgdGhlIGNhbWVyYVxcbiAgLy8gdG8gYXZvaWQgZGVwdGgtZmlnaHRpbmcgd2l0aCB0aGUgZmlsbCB0cmlhbmdsZXMuXFxuICAvLyBEaXNjdXNzZWQgaGVyZTpcXG4gIC8vIGh0dHA6Ly93d3cub3BlbmdsLm9yZy9kaXNjdXNzaW9uX2JvYXJkcy91YmJ0aHJlYWRzLnBocD91YmI9c2hvd2ZsYXQmTnVtYmVyPTI1Mjg0OCAgXFxuICBwb3NwLnh5eiA9IHBvc3AueHl6ICogc2NhbGU7XFxuICBwb3NxLnh5eiA9IHBvc3EueHl6ICogc2NhbGU7XFxuXFxuICB2ZWM0IHAgPSB1UHJvamVjdGlvbk1hdHJpeCAqIHBvc3A7XFxuICB2ZWM0IHEgPSB1UHJvamVjdGlvbk1hdHJpeCAqIHBvc3E7XFxuXFxuICAvLyBmb3JtdWxhIHRvIGNvbnZlcnQgZnJvbSBjbGlwIHNwYWNlIChyYW5nZSAtMS4uMSkgdG8gc2NyZWVuIHNwYWNlIChyYW5nZSAwLi5bd2lkdGggb3IgaGVpZ2h0XSlcXG4gIC8vIHNjcmVlbl9wID0gKHAueHkvcC53ICsgPDEsMT4pICogMC41ICogdVZpZXdwb3J0Lnp3XFxuXFxuICAvLyBwcmV2ZW50IGRpdmlzaW9uIGJ5IFcgYnkgdHJhbnNmb3JtaW5nIHRoZSB0YW5nZW50IGZvcm11bGEgKGRpdiBieSAwIGNhdXNlc1xcbiAgLy8gdGhlIGxpbmUgdG8gZGlzYXBwZWFyLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb2Nlc3NpbmcvcHJvY2Vzc2luZy9pc3N1ZXMvNTE4MylcXG4gIC8vIHQgPSBzY3JlZW5fcSAtIHNjcmVlbl9wXFxuICAvL1xcbiAgLy8gdGFuZ2VudCBpcyBub3JtYWxpemVkIGFuZCB3ZSBkb24ndCBjYXJlIHdoaWNoIGFEaXJlY3Rpb24gaXQgcG9pbnRzIHRvICgrLSlcXG4gIC8vIHQgPSArLSBub3JtYWxpemUoIHNjcmVlbl9xIC0gc2NyZWVuX3AgKVxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKHEueHkvcS53KzwxLDE+KSowLjUqdVZpZXdwb3J0Lnp3IC0gKHAueHkvcC53KzwxLDE+KSowLjUqdVZpZXdwb3J0Lnp3IClcXG4gIC8vXFxuICAvLyBleHRyYWN0IGNvbW1vbiBmYWN0b3IsIDwxLDE+IC0gPDEsMT4gY2FuY2VscyBvdXRcXG4gIC8vIHQgPSArLSBub3JtYWxpemUoIChxLnh5L3EudyAtIHAueHkvcC53KSAqIDAuNSAqIHVWaWV3cG9ydC56dyApXFxuICAvL1xcbiAgLy8gY29udmVydCB0byBjb21tb24gZGl2aXNvclxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKChxLnh5KnAudyAtIHAueHkqcS53KSAvIChwLncqcS53KSkgKiAwLjUgKiB1Vmlld3BvcnQuencgKVxcbiAgLy9cXG4gIC8vIHJlbW92ZSB0aGUgY29tbW9uIHNjYWxhciBkaXZpc29yL2ZhY3Rvciwgbm90IG5lZWRlZCBkdWUgdG8gbm9ybWFsaXplIGFuZCArLVxcbiAgLy8gKGtlZXAgdVZpZXdwb3J0IC0gY2FuJ3QgcmVtb3ZlIGJlY2F1c2UgaXQgaGFzIGRpZmZlcmVudCBjb21wb25lbnRzIGZvciB4IGFuZCB5XFxuICAvLyAgYW5kIGNvcnJlY3RzIGZvciBhc3BlY3QgcmF0aW8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvY2Vzc2luZy9wcm9jZXNzaW5nL2lzc3Vlcy81MTgxKVxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKHEueHkqcC53IC0gcC54eSpxLncpICogdVZpZXdwb3J0Lnp3IClcXG5cXG4gIHZlYzIgdGFuZ2VudCA9IG5vcm1hbGl6ZSgocS54eSpwLncgLSBwLnh5KnEudykgKiB1Vmlld3BvcnQuencpO1xcblxcbiAgLy8gZmxpcCB0YW5nZW50IHRvIG5vcm1hbCAoaXQncyBhbHJlYWR5IG5vcm1hbGl6ZWQpXFxuICB2ZWMyIG5vcm1hbCA9IHZlYzIoLXRhbmdlbnQueSwgdGFuZ2VudC54KTtcXG5cXG4gIGZsb2F0IHRoaWNrbmVzcyA9IGFEaXJlY3Rpb24udyAqIHVTdHJva2VXZWlnaHQ7XFxuICB2ZWMyIG9mZnNldCA9IG5vcm1hbCAqIHRoaWNrbmVzcyAvIDIuMDtcXG5cXG4gIC8vIFBlcnNwZWN0aXZlIC0tLVxcbiAgLy8gY29udmVydCBmcm9tIHdvcmxkIHRvIGNsaXAgYnkgbXVsdGlwbHlpbmcgd2l0aCBwcm9qZWN0aW9uIHNjYWxpbmcgZmFjdG9yXFxuICAvLyB0byBnZXQgdGhlIHJpZ2h0IHRoaWNrbmVzcyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9jZXNzaW5nL3Byb2Nlc3NpbmcvaXNzdWVzLzUxODIpXFxuICAvLyBpbnZlcnQgWSwgcHJvamVjdGlvbnMgaW4gUHJvY2Vzc2luZyBpbnZlcnQgWVxcbiAgdmVjMiBwZXJzcFNjYWxlID0gKHVQcm9qZWN0aW9uTWF0cml4ICogdmVjNCgxLCAtMSwgMCwgMCkpLnh5O1xcblxcbiAgLy8gTm8gUGVyc3BlY3RpdmUgLS0tXFxuICAvLyBtdWx0aXBseSBieSBXICh0byBjYW5jZWwgb3V0IGRpdmlzaW9uIGJ5IFcgbGF0ZXIgaW4gdGhlIHBpcGVsaW5lKSBhbmRcXG4gIC8vIGNvbnZlcnQgZnJvbSBzY3JlZW4gdG8gY2xpcCAoZGVyaXZlZCBmcm9tIGNsaXAgdG8gc2NyZWVuIGFib3ZlKVxcbiAgdmVjMiBub1BlcnNwU2NhbGUgPSBwLncgLyAoMC41ICogdVZpZXdwb3J0Lnp3KTtcXG5cXG4gIC8vZ2xfUG9zaXRpb24ueHkgPSBwLnh5ICsgb2Zmc2V0Lnh5ICogbWl4KG5vUGVyc3BTY2FsZSwgcGVyc3BTY2FsZSwgZmxvYXQocGVyc3BlY3RpdmUgPiAwKSk7XFxuICBnbF9Qb3NpdGlvbi54eSA9IHAueHkgKyBvZmZzZXQueHkgKiBwZXJzcFNjYWxlO1xcbiAgZ2xfUG9zaXRpb24uencgPSBwLnp3O1xcbn1cXG5cIixsaW5lRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnByZWNpc2lvbiBtZWRpdW1wIGludDtcXG5cXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdU1hdGVyaWFsQ29sb3I7XFxufVwiLHBvaW50VmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG51bmlmb3JtIGZsb2F0IHVQb2ludFNpemU7XFxudmFyeWluZyBmbG9hdCB2U3Ryb2tlV2VpZ2h0O1xcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG52b2lkIG1haW4oKSB7XFxuXFx0dmVjNCBwb3NpdGlvblZlYzQgPSAgdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuXFx0Z2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuXFx0Z2xfUG9pbnRTaXplID0gdVBvaW50U2l6ZTtcXG5cXHR2U3Ryb2tlV2VpZ2h0ID0gdVBvaW50U2l6ZTtcXG59XCIscG9pbnRGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxucHJlY2lzaW9uIG1lZGl1bXAgaW50O1xcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZTdHJva2VXZWlnaHQ7XFxuXFxudm9pZCBtYWluKCl7XFxuXFx0ZmxvYXQgbWFzayA9IDAuMDtcXG5cXG5cXHQvLyBtYWtlIGEgY2lyY3VsYXIgbWFzayB1c2luZyB0aGUgZ2xfUG9pbnRDb29yZCAoZ29lcyBmcm9tIDAgLSAxIG9uIGEgcG9pbnQpXFxuICAgIC8vIG1pZ2h0IGJlIGFibGUgdG8gZ2V0IGEgbmljZXIgZWRnZSBvbiBiaWcgc3Ryb2tld2VpZ2h0cyB3aXRoIHNtb290aHN0ZXAgYnV0IHNsaWdodGx5IGxlc3MgcGVyZm9ybWFudFxcblxcblxcdG1hc2sgPSBzdGVwKDAuOTgsIGxlbmd0aChnbF9Qb2ludENvb3JkICogMi4wIC0gMS4wKSk7XFxuXFxuXFx0Ly8gaWYgc3Ryb2tlV2VpZ2h0IGlzIDEgb3IgbGVzcyBsZXRzIGp1c3QgZHJhdyBhIHNxdWFyZVxcblxcdC8vIHRoaXMgcHJldmVudHMgd2VpcmQgYXJ0aWZhY3RpbmcgZnJvbSBjYXJ2aW5nIGNpcmNsZXMgd2hlbiBvdXIgcG9pbnRzIGFyZSByZWFsbHkgc21hbGxcXG5cXHQvLyBpZiBzdHJva2VXZWlnaHQgaXMgbGFyZ2VyIHRoYW4gMSwgd2UganVzdCB1c2UgaXQgYXMgaXNcXG5cXG5cXHRtYXNrID0gbWl4KDAuMCwgbWFzaywgY2xhbXAoZmxvb3IodlN0cm9rZVdlaWdodCAtIDAuNSksMC4wLDEuMCkpO1xcblxcblxcdC8vIHRocm93IGF3YXkgdGhlIGJvcmRlcnMgb2YgdGhlIG1hc2tcXG4gICAgLy8gb3RoZXJ3aXNlIHdlIGdldCB3ZWlyZCBhbHBoYSBibGVuZGluZyBpc3N1ZXNcXG5cXG5cXHRpZihtYXNrID4gMC45OCl7XFxuICAgICAgZGlzY2FyZDtcXG4gIFxcdH1cXG5cXG4gIFxcdGdsX0ZyYWdDb2xvciA9IHZlYzQodU1hdGVyaWFsQ29sb3IucmdiICogKDEuMCAtIG1hc2spLCB1TWF0ZXJpYWxDb2xvci5hKSA7XFxufVwifTtkLlJlbmRlcmVyR0w9ZnVuY3Rpb24oYSxiLGMsZSl7cmV0dXJuIGQuUmVuZGVyZXIuY2FsbCh0aGlzLGEsYixjKSx0aGlzLmF0dHJpYnV0ZXM9e30sZT1lfHx7fSx0aGlzLmF0dHJpYnV0ZXMuYWxwaGE9dm9pZCAwPT09ZS5hbHBoYXx8ZS5hbHBoYSx0aGlzLmF0dHJpYnV0ZXMuZGVwdGg9dm9pZCAwPT09ZS5kZXB0aHx8ZS5kZXB0aCx0aGlzLmF0dHJpYnV0ZXMuc3RlbmNpbD12b2lkIDA9PT1lLnN0ZW5jaWx8fGUuc3RlbmNpbCx0aGlzLmF0dHJpYnV0ZXMuYW50aWFsaWFzPXZvaWQgMCE9PWUuYW50aWFsaWFzJiZlLmFudGlhbGlhcyx0aGlzLmF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhPXZvaWQgMCE9PWUucHJlbXVsdGlwbGllZEFscGhhJiZlLnByZW11bHRpcGxpZWRBbHBoYSx0aGlzLmF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyPXZvaWQgMD09PWUucHJlc2VydmVEcmF3aW5nQnVmZmVyfHxlLnByZXNlcnZlRHJhd2luZ0J1ZmZlcix0aGlzLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZz12b2lkIDAhPT1lLnBlclBpeGVsTGlnaHRpbmcmJmUucGVyUGl4ZWxMaWdodGluZyx0aGlzLl9pbml0Q29udGV4dCgpLHRoaXMuaXNQM0Q9ITAsdGhpcy5HTD10aGlzLmRyYXdpbmdDb250ZXh0LHRoaXMuYW1iaWVudExpZ2h0Q29sb3JzPVtdLHRoaXMuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbnM9W10sdGhpcy5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzPVtdLHRoaXMucG9pbnRMaWdodFBvc2l0aW9ucz1bXSx0aGlzLnBvaW50TGlnaHRDb2xvcnM9W10sdGhpcy51TVZNYXRyaXg9bmV3IGQuTWF0cml4LHRoaXMudVBNYXRyaXg9bmV3IGQuTWF0cml4LHRoaXMudU5NYXRyaXg9bmV3IGQuTWF0cml4KFwibWF0M1wiKSx0aGlzLl9jdXJDYW1lcmE9bmV3IGQuQ2FtZXJhKHRoaXMpLHRoaXMuX2N1ckNhbWVyYS5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncygpLHRoaXMuX2N1ckNhbWVyYS5fc2V0RGVmYXVsdENhbWVyYSgpLHRoaXMuZ0hhc2g9e30sdGhpcy5fZGVmYXVsdExpZ2h0U2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcj12b2lkIDAsdGhpcy5fZGVmYXVsdE5vcm1hbFNoYWRlcj12b2lkIDAsdGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXI9dm9pZCAwLHRoaXMuY3VyRmlsbFNoYWRlcj12b2lkIDAsdGhpcy5jdXJTdHJva2VTaGFkZXI9dm9pZCAwLHRoaXMuY3VyUG9pbnRTaGFkZXI9dm9pZCAwLHRoaXMuX3VzZUNvbG9yU2hhZGVyKCksdGhpcy5zZXRTdHJva2VTaGFkZXIodGhpcy5fZ2V0TGluZVNoYWRlcigpKSx0aGlzLl91c2VQb2ludFNoYWRlcigpLHRoaXMuX3BvaW50VmVydGV4QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pc0ltbWVkaWF0ZURyYXdpbmc9ITEsdGhpcy5pbW1lZGlhdGVNb2RlPXt9LHRoaXMuZmlsbCgyNTUsMjU1LDI1NSwyNTUpLHRoaXMucG9pbnRTaXplPTUsdGhpcy5zdHJva2VXZWlnaHQoMSksdGhpcy5zdHJva2UoMCwwLDApLHRoaXMudGV4dHVyZXM9W10sdGhpcy5fY3VydmVUaWdodG5lc3M9Nix0aGlzLl9sb29rVXBUYWJsZUJlemllcj1bXSx0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpYz1bXSx0aGlzLl9sdXRCZXppZXJEZXRhaWw9MCx0aGlzLl9sdXRRdWFkcmF0aWNEZXRhaWw9MCx0aGlzLl90ZXNzeT10aGlzLl9pbml0VGVzc3koKSx0aGlzLmZvbnRJbmZvcz17fSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5SZW5kZXJlci5wcm90b3R5cGUpLGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2luaXRDb250ZXh0PWZ1bmN0aW9uKCl7dHJ5e2lmKHRoaXMuZHJhd2luZ0NvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIndlYmdsXCIsdGhpcy5hdHRyaWJ1dGVzKXx8dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLHRoaXMuYXR0cmlidXRlcyksbnVsbD09PXRoaXMuZHJhd2luZ0NvbnRleHQpdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgY3JlYXRpbmcgd2ViZ2wgY29udGV4dFwiKTtjb25zb2xlLmxvZyhcInA1LlJlbmRlcmVyR0w6IGVuYWJsZWQgd2ViZ2wgY29udGV4dFwiKTt2YXIgYT10aGlzLmRyYXdpbmdDb250ZXh0O2EuZW5hYmxlKGEuREVQVEhfVEVTVCksYS5kZXB0aEZ1bmMoYS5MRVFVQUwpLGEudmlld3BvcnQoMCwwLGEuZHJhd2luZ0J1ZmZlcldpZHRoLGEuZHJhd2luZ0J1ZmZlckhlaWdodCksdGhpcy5fdmlld3BvcnQ9dGhpcy5kcmF3aW5nQ29udGV4dC5nZXRQYXJhbWV0ZXIodGhpcy5kcmF3aW5nQ29udGV4dC5WSUVXUE9SVCl9Y2F0Y2goYSl7dGhyb3cgYX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3Jlc2V0Q29udGV4dD1mdW5jdGlvbihhLGIsYyl7dmFyIGU9dGhpcy53aWR0aCxmPXRoaXMuaGVpZ2h0LGc9dGhpcy5jYW52YXMuaWQsaD10aGlzLmNhbnZhcztoJiZoLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCksaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGguaWQ9Zyx0aGlzLl9wSW5zdC5fdXNlck5vZGU/dGhpcy5fcEluc3QuX3VzZXJOb2RlLmFwcGVuZENoaWxkKGgpOmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaCksdGhpcy5fcEluc3QuY2FudmFzPWg7dmFyIGk9bmV3IGQuUmVuZGVyZXJHTCh0aGlzLl9wSW5zdC5jYW52YXMsdGhpcy5fcEluc3QsITAsYSk7dGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiX3JlbmRlcmVyXCIsaSksaS5yZXNpemUoZSxmKSxpLl9hcHBseURlZmF1bHRzKCksdGhpcy5fcEluc3QuX2VsZW1lbnRzLnB1c2goaSksXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmc2V0VGltZW91dChmdW5jdGlvbigpe2MuYXBwbHkod2luZG93Ll9yZW5kZXJlcixiKX0sMCl9LGQucHJvdG90eXBlLnNldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oYSxiKXt0aGlzLl9hc3NlcnQzZChcInNldEF0dHJpYnV0ZXNcIik7dmFyIGM7dm9pZCAwIT09Yj8oYz17fSxjW2FdPWIpOmEgaW5zdGFuY2VvZiBPYmplY3QmJihjPWEpLHRoaXMucHVzaCgpLHRoaXMuX3JlbmRlcmVyLl9yZXNldENvbnRleHQoYyksdGhpcy5wb3AoKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy51TVZNYXRyaXguc2V0KHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMV0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzJdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzVdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbN10sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzhdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTBdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMV0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTNdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSksdGhpcy5hbWJpZW50TGlnaHRDb2xvcnMubGVuZ3RoPTAsdGhpcy5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucy5sZW5ndGg9MCx0aGlzLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnMubGVuZ3RoPTAsdGhpcy5wb2ludExpZ2h0UG9zaXRpb25zLmxlbmd0aD0wLHRoaXMucG9pbnRMaWdodENvbG9ycy5sZW5ndGg9MH0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5iYWNrZ3JvdW5kPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcEluc3QuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKSxiPWEubGV2ZWxzWzBdLzI1NSxjPWEubGV2ZWxzWzFdLzI1NSxkPWEubGV2ZWxzWzJdLzI1NSxlPWEubGV2ZWxzWzNdLzI1NTt0aGlzLkdMLmNsZWFyQ29sb3IoYixjLGQsZSksdGhpcy5HTC5kZXB0aE1hc2soITApLHRoaXMuR0wuY2xlYXIodGhpcy5HTC5DT0xPUl9CVUZGRVJfQklUfHRoaXMuR0wuREVQVEhfQlVGRkVSX0JJVCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihhLGIsYyxmKXt2YXIgZz1kLnByb3RvdHlwZS5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpO3RoaXMuY3VyRmlsbENvbG9yPWcuX2FycmF5LHRoaXMuaXNJbW1lZGlhdGVEcmF3aW5nP3RoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRJbW1lZGlhdGVNb2RlU2hhZGVyKCkpOnRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRDb2xvclNoYWRlcigpKSx0aGlzLmRyYXdNb2RlPWUuRklMTCx0aGlzLmN1ckZpbGxTaGFkZXIuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5jdXJGaWxsQ29sb3IpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnN0cm9rZT1mdW5jdGlvbihhLGIsYyxlKXthcmd1bWVudHNbM109MjU1O3ZhciBmPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyk7dGhpcy5jdXJTdHJva2VDb2xvcj1mLl9hcnJheSx0aGlzLmN1clN0cm9rZVNoYWRlci5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLmN1clN0cm9rZUNvbG9yKSx0aGlzLmN1clBvaW50U2hhZGVyLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLGYuX2FycmF5KX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zdHJva2VXZWlnaHQ9ZnVuY3Rpb24oYSl7dGhpcy5jdXJTdHJva2VXZWlnaHQhPT1hJiYodGhpcy5wb2ludFNpemU9YSx0aGlzLmN1clN0cm9rZVdlaWdodD1hLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLnNldFVuaWZvcm0oXCJ1U3Ryb2tlV2VpZ2h0XCIsYSksdGhpcy5jdXJQb2ludFNoYWRlci5zZXRVbmlmb3JtKFwidVBvaW50U2l6ZVwiLGEpKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiLGMsZSl7cmV0dXJuIGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZ2V0LmFwcGx5KHRoaXMsW2EsYixjLGVdKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5sb2FkUGl4ZWxzPWZ1bmN0aW9uKCl7aWYoITAhPT10aGlzLmF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKXJldHVybiB2b2lkIGNvbnNvbGUubG9nKFwibG9hZFBpeGVscyBvbmx5IHdvcmtzIGluIFdlYkdMIHdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyIGlzIHRydWUuXCIpO3ZhciBhPXRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksYj10aGlzLndpZHRoLGM9dGhpcy5oZWlnaHQ7Yio9YSxjKj1hLHZvaWQgMD09PXRoaXMucGl4ZWxzJiYodGhpcy5waXhlbHM9bmV3IFVpbnQ4QXJyYXkodGhpcy5HTC5kcmF3aW5nQnVmZmVyV2lkdGgqdGhpcy5HTC5kcmF3aW5nQnVmZmVySGVpZ2h0KjQpKSx0aGlzLkdMLnJlYWRQaXhlbHMoMCwwLGIsYyx0aGlzLkdMLlJHQkEsdGhpcy5HTC5VTlNJR05FRF9CWVRFLHRoaXMucGl4ZWxzKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJwaXhlbHNcIix0aGlzLnBpeGVscyl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZ2VvbWV0cnlJbkhhc2g9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZ0hhc2hbYV19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGEsYil7ZC5SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcyxhLGIpLHRoaXMuR0wudmlld3BvcnQoMCwwLHRoaXMuR0wuZHJhd2luZ0J1ZmZlcldpZHRoLHRoaXMuR0wuZHJhd2luZ0J1ZmZlckhlaWdodCksdGhpcy5fdmlld3BvcnQ9dGhpcy5HTC5nZXRQYXJhbWV0ZXIodGhpcy5HTC5WSUVXUE9SVCksdGhpcy5fY3VyQ2FtZXJhLl9yZXNpemUoKSx2b2lkIDAhPT10aGlzLnBpeGVscyYmKHRoaXMucGl4ZWxzPW5ldyBVaW50OEFycmF5KHRoaXMuR0wuZHJhd2luZ0J1ZmZlcldpZHRoKnRoaXMuR0wuZHJhd2luZ0J1ZmZlckhlaWdodCo0KSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHNbMF18fDAsYj1hcmd1bWVudHNbMV18fDAsYz1hcmd1bWVudHNbMl18fDAsZD1hcmd1bWVudHNbM118fDA7dGhpcy5HTC5jbGVhckNvbG9yKGEsYixjLGQpLHRoaXMuR0wuY2xlYXIodGhpcy5HTC5DT0xPUl9CVUZGRVJfQklUfHRoaXMuR0wuREVQVEhfQlVGRkVSX0JJVCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yJiYoYz1hLnosYj1hLnksYT1hLngpLHRoaXMudU1WTWF0cml4LnRyYW5zbGF0ZShbYSxiLGNdKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy51TVZNYXRyaXguc2NhbGUoYSxiLGMpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMD09PWI/dGhpcy5yb3RhdGVaKGEpOihhcmd1bWVudHNbMF09dGhpcy5fcEluc3QuX2Zyb21SYWRpYW5zKGEpLGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUuYXBwbHkodGhpcy51TVZNYXRyaXgsYXJndW1lbnRzKSx0aGlzKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvdGF0ZShhLDEsMCwwKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm90YXRlKGEsMCwxLDApLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3RhdGUoYSwwLDAsMSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKCl7dmFyIGE9ZC5SZW5kZXJlci5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzKSxiPWEucHJvcGVydGllcztyZXR1cm4gYi51TVZNYXRyaXg9dGhpcy51TVZNYXRyaXguY29weSgpLGIudVBNYXRyaXg9dGhpcy51UE1hdHJpeC5jb3B5KCksYi5fY3VyQ2FtZXJhPXRoaXMuX2N1ckNhbWVyYSx0aGlzLl9jdXJDYW1lcmE9dGhpcy5fY3VyQ2FtZXJhLmNvcHkoKSxhfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJlc2V0TWF0cml4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudU1WTWF0cml4PWQuTWF0cml4LmlkZW50aXR5KHRoaXMuX3BJbnN0KSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNldEZpbGxTaGFkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciE9PWEmJih0aGlzLmN1ckZpbGxTaGFkZXI9YSx0aGlzLmN1ckZpbGxTaGFkZXIuaW5pdCgpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2V0UG9pbnRTaGFkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY3VyUG9pbnRTaGFkZXIhPT1hJiYodGhpcy5jdXJQb2ludFNoYWRlcj1hLHRoaXMuY3VyUG9pbnRTaGFkZXIuaW5pdCgpKSx0aGlzLmN1clBvaW50U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNldFN0cm9rZVNoYWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jdXJTdHJva2VTaGFkZXIhPT1hJiYodGhpcy5jdXJTdHJva2VTaGFkZXI9YSx0aGlzLmN1clN0cm9rZVNoYWRlci5pbml0KCkpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91c2VMaWdodFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1ckZpbGxTaGFkZXImJnRoaXMuY3VyRmlsbFNoYWRlci5pc0xpZ2h0U2hhZGVyKCl8fHRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRMaWdodFNoYWRlcigpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VzZUNvbG9yU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciYmdGhpcy5jdXJGaWxsU2hhZGVyIT09dGhpcy5fZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXJ8fHRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRDb2xvclNoYWRlcigpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VzZVBvaW50U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyUG9pbnRTaGFkZXJ8fHRoaXMuc2V0UG9pbnRTaGFkZXIodGhpcy5fZ2V0UG9pbnRTaGFkZXIoKSksdGhpcy5jdXJQb2ludFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXNlSW1tZWRpYXRlTW9kZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1ckZpbGxTaGFkZXImJnRoaXMuY3VyRmlsbFNoYWRlciE9PXRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcnx8dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldEltbWVkaWF0ZU1vZGVTaGFkZXIoKSksdGhpcy5jdXJGaWxsU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRMaWdodFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXJ8fCh0aGlzLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZz90aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5waG9uZ1ZlcnQsZy5waG9uZ0ZyYWcpOnRoaXMuX2RlZmF1bHRMaWdodFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLmxpZ2h0VmVydCxnLmxpZ2h0VGV4dHVyZUZyYWcpKSx0aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldEltbWVkaWF0ZU1vZGVTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLmltbWVkaWF0ZVZlcnQsZy52ZXJ0ZXhDb2xvckZyYWcpKSx0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0Tm9ybWFsU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHROb3JtYWxTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0Tm9ybWFsU2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcubm9ybWFsVmVydCxnLm5vcm1hbEZyYWcpKSx0aGlzLl9kZWZhdWx0Tm9ybWFsU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRDb2xvclNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5ub3JtYWxWZXJ0LGcuYmFzaWNGcmFnKSksdGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRQb2ludFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5wb2ludFZlcnQsZy5wb2ludEZyYWcpKSx0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldExpbmVTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdExpbmVTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0TGluZVNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLmxpbmVWZXJ0LGcubGluZUZyYWcpKSx0aGlzLl9kZWZhdWx0TGluZVNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0Rm9udFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNoYWRlcnx8KHRoaXMuR0wuZ2V0RXh0ZW5zaW9uKFwiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzXCIpLHRoaXMuX2RlZmF1bHRGb250U2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcuZm9udFZlcnQsZy5mb250RnJhZykpLHRoaXMuX2RlZmF1bHRGb250U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRFbXB0eVRleHR1cmU9ZnVuY3Rpb24oKXtpZighdGhpcy5fZW1wdHlUZXh0dXJlKXt2YXIgYT1uZXcgZC5JbWFnZSgxLDEpO2Euc2V0KDAsMCwyNTUpLHRoaXMuX2VtcHR5VGV4dHVyZT1uZXcgZC5UZXh0dXJlKHRoaXMsYSl9cmV0dXJuIHRoaXMuX2VtcHR5VGV4dHVyZX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5nZXRUZXh0dXJlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLnRleHR1cmVzLGM9MDtjPGIubGVuZ3RoOysrYyl7dmFyIGU9YltjXTtpZihlLnNyYz09PWEpcmV0dXJuIGV9dmFyIGY9bmV3IGQuVGV4dHVyZSh0aGlzLGEpO3JldHVybiB0aGlzLnRleHR1cmVzLnB1c2goZiksZn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fYmluZEJ1ZmZlcj1mdW5jdGlvbihhLGIsYyxkLGUpe2lmKHRoaXMuR0wuYmluZEJ1ZmZlcihiLGEpLHZvaWQgMCE9PWMpe3ZhciBmPW5ldyBkKGMpO3RoaXMuR0wuYnVmZmVyRGF0YShiLGYsZSl9fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNtb290aD1mdW5jdGlvbigpeyExPT09dGhpcy5hdHRyaWJ1dGVzLmFudGlhbGlhcyYmdGhpcy5fcEluc3Quc2V0QXR0cmlidXRlcyhcImFudGlhbGlhc1wiLCEwKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5ub1Ntb290aD1mdW5jdGlvbigpeyEwPT09dGhpcy5hdHRyaWJ1dGVzLmFudGlhbGlhcyYmdGhpcy5fcEluc3Quc2V0QXR0cmlidXRlcyhcImFudGlhbGlhc1wiLCExKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZmxhdHRlbj1mdW5jdGlvbihhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuW107aWYoYS5sZW5ndGg+MmU0KXt2YXIgYixjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsZD1cIltvYmplY3QgQXJyYXldXCIsZT1bXSxmPWEuc2xpY2UoKTtiPWYucG9wKCk7ZG97Yy5jYWxsKGIpPT09ZD9mLnB1c2guYXBwbHkoZixiKTplLnB1c2goYil9d2hpbGUoZi5sZW5ndGgmJnZvaWQgMCE9PShiPWYucG9wKCkpKTtyZXR1cm4gZS5yZXZlcnNlKCksZX1yZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sYSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3ZUb05BcnJheT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZmxhdHRlbihhLm1hcChmdW5jdGlvbihhKXtyZXR1cm5bYS54LGEueSxhLnpdfSkpfSxkLnByb3RvdHlwZS5fYXNzZXJ0M2Q9ZnVuY3Rpb24oYSl7aWYoIXRoaXMuX3JlbmRlcmVyLmlzUDNEKXRocm93IG5ldyBFcnJvcihhK1wiKCkgaXMgb25seSBzdXBwb3J0ZWQgaW4gV0VCR0wgbW9kZS4gSWYgeW91J2QgbGlrZSB0byB1c2UgM0QgZ3JhcGhpY3MgYW5kIFdlYkdMLCBzZWUgIGh0dHBzOi8vcDVqcy5vcmcvZXhhbXBsZXMvZm9ybS0zZC1wcmltaXRpdmVzLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9pbml0VGVzc3k9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7YltiLmxlbmd0aF09YVswXSxiW2IubGVuZ3RoXT1hWzFdLGJbYi5sZW5ndGhdPWFbMl19ZnVuY3Rpb24gYihhKXthIT09Zi5wcmltaXRpdmVUeXBlLkdMX1RSSUFOR0xFUyYmY29uc29sZS5sb2coXCJleHBlY3RlZCBUUklBTkdMRVMgYnV0IGdvdCB0eXBlOiBcIithKX1mdW5jdGlvbiBjKGEpe2NvbnNvbGUubG9nKFwiZXJyb3IgY2FsbGJhY2tcIiksY29uc29sZS5sb2coXCJlcnJvciBudW1iZXI6IFwiK2EpfWZ1bmN0aW9uIGQoYSxiLGMpe3JldHVyblthWzBdLGFbMV0sYVsyXV19ZnVuY3Rpb24gZShhKXt9dmFyIGc9bmV3IGYuR2x1VGVzc2VsYXRvcjtyZXR1cm4gZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX1ZFUlRFWF9EQVRBLGEpLGcuZ2x1VGVzc0NhbGxiYWNrKGYuZ2x1RW51bS5HTFVfVEVTU19CRUdJTixiKSxnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfRVJST1IsYyksZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX0NPTUJJTkUsZCksZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX0VER0VfRkxBRyxlKSxnfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl90cmlhbmd1bGF0ZT1mdW5jdGlvbihhKXt0aGlzLl90ZXNzeS5nbHVUZXNzTm9ybWFsKDAsMCwxKTt2YXIgYj1bXTt0aGlzLl90ZXNzeS5nbHVUZXNzQmVnaW5Qb2x5Z29uKGIpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt0aGlzLl90ZXNzeS5nbHVUZXNzQmVnaW5Db250b3VyKCk7Zm9yKHZhciBkPWFbY10sZT0wO2U8ZC5sZW5ndGg7ZSs9Myl7dmFyIGY9W2RbZV0sZFtlKzFdLGRbZSsyXV07dGhpcy5fdGVzc3kuZ2x1VGVzc1ZlcnRleChmLGYpfXRoaXMuX3Rlc3N5LmdsdVRlc3NFbmRDb250b3VyKCl9cmV0dXJuIHRoaXMuX3Rlc3N5LmdsdVRlc3NFbmRQb2x5Z29uKCksYn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fYmV6aWVyQ29lZmZpY2llbnRzPWZ1bmN0aW9uKGEpe3ZhciBiPWEqYSxjPWIqYSxkPTEtYSxlPWQqZDtyZXR1cm5bZSpkLDMqZSphLDMqZCpiLGNdfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9xdWFkcmF0aWNDb2VmZmljaWVudHM9ZnVuY3Rpb24oYSl7dmFyIGI9YSphLGM9MS1hO3JldHVybltjKmMsMipjKmEsYl19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2JlemllclRvQ2F0bXVsbD1mdW5jdGlvbihhKXtyZXR1cm5bYVsxXSxhWzFdKyhhWzJdLWFbMF0pL3RoaXMuX2N1cnZlVGlnaHRuZXNzLGFbMl0tKGFbM10tYVsxXSkvdGhpcy5fY3VydmVUaWdodG5lc3MsYVsyXV19LGIuZXhwb3J0cz1kLlJlbmRlcmVyR0x9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4uL2NvcmUvcDUuUmVuZGVyZXJcIjoyNyxcIi4vcDUuQ2FtZXJhXCI6NjksXCIuL3A1Lk1hdHJpeFwiOjcxLFwiLi9wNS5TaGFkZXJcIjo3NSxsaWJ0ZXNzOjl9XSw3NTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5TaGFkZXI9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3JlbmRlcmVyPWEsdGhpcy5fdmVydFNyYz1iLHRoaXMuX2ZyYWdTcmM9Yyx0aGlzLl92ZXJ0U2hhZGVyPS0xLHRoaXMuX2ZyYWdTaGFkZXI9LTEsdGhpcy5fZ2xQcm9ncmFtPTAsdGhpcy5fbG9hZGVkQXR0cmlidXRlcz0hMSx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5fbG9hZGVkVW5pZm9ybXM9ITEsdGhpcy51bmlmb3Jtcz17fSx0aGlzLl9ib3VuZD0hMSx0aGlzLnNhbXBsZXJzPVtdfSxkLlNoYWRlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2lmKDA9PT10aGlzLl9nbFByb2dyYW0pe3ZhciBhPXRoaXMuX3JlbmRlcmVyLkdMO2lmKHRoaXMuX3ZlcnRTaGFkZXI9YS5jcmVhdGVTaGFkZXIoYS5WRVJURVhfU0hBREVSKSxhLnNoYWRlclNvdXJjZSh0aGlzLl92ZXJ0U2hhZGVyLHRoaXMuX3ZlcnRTcmMpLGEuY29tcGlsZVNoYWRlcih0aGlzLl92ZXJ0U2hhZGVyKSwhYS5nZXRTaGFkZXJQYXJhbWV0ZXIodGhpcy5fdmVydFNoYWRlcixhLkNPTVBJTEVfU1RBVFVTKSlyZXR1cm4gY29uc29sZS5lcnJvcihcIllpa2VzISBBbiBlcnJvciBvY2N1cnJlZCBjb21waWxpbmcgdGhlIHZlcnRleCBzaGFkZXI6XCIrYS5nZXRTaGFkZXJJbmZvTG9nKHRoaXMuX3ZlcnRTaGFkZXIpKSxudWxsO2lmKHRoaXMuX2ZyYWdTaGFkZXI9YS5jcmVhdGVTaGFkZXIoYS5GUkFHTUVOVF9TSEFERVIpLGEuc2hhZGVyU291cmNlKHRoaXMuX2ZyYWdTaGFkZXIsdGhpcy5fZnJhZ1NyYyksYS5jb21waWxlU2hhZGVyKHRoaXMuX2ZyYWdTaGFkZXIpLCFhLmdldFNoYWRlclBhcmFtZXRlcih0aGlzLl9mcmFnU2hhZGVyLGEuQ09NUElMRV9TVEFUVVMpKXJldHVybiBjb25zb2xlLmVycm9yKFwiRGFybiEgQW4gZXJyb3Igb2NjdXJyZWQgY29tcGlsaW5nIHRoZSBmcmFnbWVudCBzaGFkZXI6XCIrYS5nZXRTaGFkZXJJbmZvTG9nKHRoaXMuX2ZyYWdTaGFkZXIpKSxudWxsO3RoaXMuX2dsUHJvZ3JhbT1hLmNyZWF0ZVByb2dyYW0oKSxhLmF0dGFjaFNoYWRlcih0aGlzLl9nbFByb2dyYW0sdGhpcy5fdmVydFNoYWRlciksYS5hdHRhY2hTaGFkZXIodGhpcy5fZ2xQcm9ncmFtLHRoaXMuX2ZyYWdTaGFkZXIpLGEubGlua1Byb2dyYW0odGhpcy5fZ2xQcm9ncmFtKSxhLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5fZ2xQcm9ncmFtLGEuTElOS19TVEFUVVMpfHxjb25zb2xlLmVycm9yKFwiU25hcCEgRXJyb3IgbGlua2luZyBzaGFkZXIgcHJvZ3JhbTogXCIrYS5nZXRQcm9ncmFtSW5mb0xvZyh0aGlzLl9nbFByb2dyYW0pKSx0aGlzLl9sb2FkQXR0cmlidXRlcygpLHRoaXMuX2xvYWRVbmlmb3JtcygpfXJldHVybiB0aGlzfSxkLlNoYWRlci5wcm90b3R5cGUuX2xvYWRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZEF0dHJpYnV0ZXMpe3RoaXMuYXR0cmlidXRlcz17fTtmb3IodmFyIGE9dGhpcy5fcmVuZGVyZXIuR0wsYj1hLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5fZ2xQcm9ncmFtLGEuQUNUSVZFX0FUVFJJQlVURVMpLGM9MDtjPGI7KytjKXt2YXIgZD1hLmdldEFjdGl2ZUF0dHJpYih0aGlzLl9nbFByb2dyYW0sYyksZT1kLm5hbWUsZj1hLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMuX2dsUHJvZ3JhbSxlKSxnPXt9O2cubmFtZT1lLGcubG9jYXRpb249ZixnLnR5cGU9ZC50eXBlLGcuc2l6ZT1kLnNpemUsdGhpcy5hdHRyaWJ1dGVzW2VdPWd9dGhpcy5fbG9hZGVkQXR0cmlidXRlcz0hMH19LGQuU2hhZGVyLnByb3RvdHlwZS5fbG9hZFVuaWZvcm1zPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZFVuaWZvcm1zKXtmb3IodmFyIGE9dGhpcy5fcmVuZGVyZXIuR0wsYj1hLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5fZ2xQcm9ncmFtLGEuQUNUSVZFX1VOSUZPUk1TKSxjPTAsZD0wO2Q8YjsrK2Qpe3ZhciBlPWEuZ2V0QWN0aXZlVW5pZm9ybSh0aGlzLl9nbFByb2dyYW0sZCksZj17fTtmLmxvY2F0aW9uPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMuX2dsUHJvZ3JhbSxlLm5hbWUpLGYuc2l6ZT1lLnNpemU7dmFyIGc9ZS5uYW1lO2Uuc2l6ZT4xJiYoZz1nLnN1YnN0cmluZygwLGcuaW5kZXhPZihcIlswXVwiKSkpLGYubmFtZT1nLGYudHlwZT1lLnR5cGUsZi50eXBlPT09YS5TQU1QTEVSXzJEJiYoZi5zYW1wbGVySW5kZXg9YyxjKyssdGhpcy5zYW1wbGVycy5wdXNoKGYpKSx0aGlzLnVuaWZvcm1zW2ddPWZ9dGhpcy5fbG9hZGVkVW5pZm9ybXM9ITB9fSxkLlNoYWRlci5wcm90b3R5cGUuY29tcGlsZT1mdW5jdGlvbigpe30sZC5TaGFkZXIucHJvdG90eXBlLmJpbmRTaGFkZXI9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLl9ib3VuZHx8KHRoaXMudXNlUHJvZ3JhbSgpLHRoaXMuX2JvdW5kPSEwLHRoaXMuYmluZFRleHR1cmVzKCksdGhpcy5fc2V0TWF0cml4VW5pZm9ybXMoKSx0aGlzPT09dGhpcy5fcmVuZGVyZXIuY3VyU3Ryb2tlU2hhZGVyJiZ0aGlzLl9zZXRWaWV3cG9ydFVuaWZvcm0oKSl9LGQuU2hhZGVyLnByb3RvdHlwZS51bmJpbmRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm91bmQmJih0aGlzLnVuYmluZFRleHR1cmVzKCksdGhpcy5fYm91bmQ9ITEpLHRoaXN9LGQuU2hhZGVyLnByb3RvdHlwZS5iaW5kVGV4dHVyZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5fcmVuZGVyZXIuR0wsYj0wO2I8dGhpcy5zYW1wbGVycy5sZW5ndGg7YisrKXt2YXIgYz10aGlzLnNhbXBsZXJzW2JdLGQ9Yy50ZXh0dXJlO3ZvaWQgMD09PWQmJihkPXRoaXMuX3JlbmRlcmVyLl9nZXRFbXB0eVRleHR1cmUoKSksYS5hY3RpdmVUZXh0dXJlKGEuVEVYVFVSRTArYy5zYW1wbGVySW5kZXgpLGQuYmluZFRleHR1cmUoKSxkLnVwZGF0ZSgpLGEudW5pZm9ybTFpKGMubG9jYXRpb24sYy5zYW1wbGVySW5kZXgpfX0sZC5TaGFkZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTx0aGlzLnNhbXBsZXJzLmxlbmd0aDthKyspe3ZhciBiPXRoaXMuc2FtcGxlcnNbYV0sYz1iLnRleHR1cmU7YyYmYy51cGRhdGUoKX19LGQuU2hhZGVyLnByb3RvdHlwZS51bmJpbmRUZXh0dXJlcz1mdW5jdGlvbigpe30sZC5TaGFkZXIucHJvdG90eXBlLl9zZXRNYXRyaXhVbmlmb3Jtcz1mdW5jdGlvbigpe3RoaXMuc2V0VW5pZm9ybShcInVQcm9qZWN0aW9uTWF0cml4XCIsdGhpcy5fcmVuZGVyZXIudVBNYXRyaXgubWF0NCksdGhpcy5zZXRVbmlmb3JtKFwidU1vZGVsVmlld01hdHJpeFwiLHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5tYXQ0KSx0aGlzLnNldFVuaWZvcm0oXCJ1Vmlld01hdHJpeFwiLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDQpLHRoaXM9PT10aGlzLl9yZW5kZXJlci5jdXJGaWxsU2hhZGVyJiYodGhpcy5fcmVuZGVyZXIudU5NYXRyaXguaW52ZXJzZVRyYW5zcG9zZSh0aGlzLl9yZW5kZXJlci51TVZNYXRyaXgpLHRoaXMuc2V0VW5pZm9ybShcInVOb3JtYWxNYXRyaXhcIix0aGlzLl9yZW5kZXJlci51Tk1hdHJpeC5tYXQzKSl9LGQuU2hhZGVyLnByb3RvdHlwZS5fc2V0Vmlld3BvcnRVbmlmb3JtPWZ1bmN0aW9uKCl7dGhpcy5zZXRVbmlmb3JtKFwidVZpZXdwb3J0XCIsdGhpcy5fcmVuZGVyZXIuX3ZpZXdwb3J0KX0sZC5TaGFkZXIucHJvdG90eXBlLnVzZVByb2dyYW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuR0wudXNlUHJvZ3JhbSh0aGlzLl9nbFByb2dyYW0pLHRoaXN9LGQuU2hhZGVyLnByb3RvdHlwZS5zZXRVbmlmb3JtPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy51bmlmb3Jtc1thXTtpZihjKXt2YXIgZD1jLmxvY2F0aW9uLGU9dGhpcy5fcmVuZGVyZXIuR0w7c3dpdGNoKHRoaXMudXNlUHJvZ3JhbSgpLGMudHlwZSl7Y2FzZSBlLkJPT0w6ITA9PT1iP2UudW5pZm9ybTFpKGQsMSk6ZS51bmlmb3JtMWkoZCwwKTticmVhaztjYXNlIGUuSU5UOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0xaXYoZCxiKTplLnVuaWZvcm0xaShkLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVDpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtMWZ2KGQsYik6ZS51bmlmb3JtMWYoZCxiKTticmVhaztjYXNlIGUuRkxPQVRfTUFUMzplLnVuaWZvcm1NYXRyaXgzZnYoZCwhMSxiKTticmVhaztjYXNlIGUuRkxPQVRfTUFUNDplLnVuaWZvcm1NYXRyaXg0ZnYoZCwhMSxiKTticmVhaztjYXNlIGUuRkxPQVRfVkVDMjpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtMmZ2KGQsYik6ZS51bmlmb3JtMmYoZCxiWzBdLGJbMV0pO2JyZWFrO2Nhc2UgZS5GTE9BVF9WRUMzOlxuYy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTNmdihkLGIpOmUudW5pZm9ybTNmKGQsYlswXSxiWzFdLGJbMl0pO2JyZWFrO2Nhc2UgZS5GTE9BVF9WRUM0OmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm00ZnYoZCxiKTplLnVuaWZvcm00ZihkLGJbMF0sYlsxXSxiWzJdLGJbM10pO2JyZWFrO2Nhc2UgZS5JTlRfVkVDMjpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtMml2KGQsYik6ZS51bmlmb3JtMmkoZCxiWzBdLGJbMV0pO2JyZWFrO2Nhc2UgZS5JTlRfVkVDMzpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtM2l2KGQsYik6ZS51bmlmb3JtM2koZCxiWzBdLGJbMV0sYlsyXSk7YnJlYWs7Y2FzZSBlLklOVF9WRUM0OmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm00aXYoZCxiKTplLnVuaWZvcm00aShkLGJbMF0sYlsxXSxiWzJdLGJbM10pO2JyZWFrO2Nhc2UgZS5TQU1QTEVSXzJEOmUuYWN0aXZlVGV4dHVyZShlLlRFWFRVUkUwK2Muc2FtcGxlckluZGV4KSxjLnRleHR1cmU9dGhpcy5fcmVuZGVyZXIuZ2V0VGV4dHVyZShiKSxlLnVuaWZvcm0xaShjLmxvY2F0aW9uLGMuc2FtcGxlckluZGV4KX1yZXR1cm4gdGhpc319LGQuU2hhZGVyLnByb3RvdHlwZS5pc0xpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVVzZUxpZ2h0aW5nfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVBbWJpZW50TGlnaHRDb3VudHx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51RGlyZWN0aW9uYWxMaWdodENvdW50fHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVQb2ludExpZ2h0Q291bnR8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudUFtYmllbnRDb2xvcnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51RGlyZWN0aW9uYWxDb2xvcnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51UG9pbnRMaWdodExvY2F0aW9ufHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVQb2ludExpZ2h0Q29sb3J8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudUxpZ2h0aW5nRGlyZWN0aW9ufHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVTcGVjdWxhcn0sZC5TaGFkZXIucHJvdG90eXBlLmlzVGV4dHVyZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNhbXBsZXJJbmRleD4wfSxkLlNoYWRlci5wcm90b3R5cGUuaXNDb2xvclNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmF0dHJpYnV0ZXMuYVZlcnRleENvbG9yfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVNYXRlcmlhbENvbG9yfSxkLlNoYWRlci5wcm90b3R5cGUuaXNUZXhMaWdodFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzTGlnaHRTaGFkZXIoKSYmdGhpcy5pc1RleHR1cmVTaGFkZXIoKX0sZC5TaGFkZXIucHJvdG90eXBlLmlzU3Ryb2tlU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVN0cm9rZVdlaWdodH0sZC5TaGFkZXIucHJvdG90eXBlLmVuYWJsZUF0dHJpYj1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9dGhpcy5fcmVuZGVyZXIuR0w7cmV0dXJuLTEhPT1hJiYoZy5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhKSxnLnZlcnRleEF0dHJpYlBvaW50ZXIoYSxiLGMsZCxlLGYpKSx0aGlzfSxiLmV4cG9ydHM9ZC5TaGFkZXJ9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QuVGV4dHVyZT1mdW5jdGlvbihhLGIpe3RoaXMuX3JlbmRlcmVyPWE7dmFyIGM9dGhpcy5fcmVuZGVyZXIuR0w7dGhpcy5zcmM9Yix0aGlzLmdsVGV4PXZvaWQgMCx0aGlzLmdsVGFyZ2V0PWMuVEVYVFVSRV8yRCx0aGlzLmdsRm9ybWF0PWMuUkdCQSx0aGlzLm1pcG1hcHM9ITEsdGhpcy5nbE1pbkZpbHRlcj1jLkxJTkVBUix0aGlzLmdsTWFnRmlsdGVyPWMuTElORUFSLHRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UsdGhpcy5nbFdyYXBUPWMuQ0xBTVBfVE9fRURHRSx0aGlzLmlzU3JjTWVkaWFFbGVtZW50PXZvaWQgMCE9PWQuTWVkaWFFbGVtZW50JiZiIGluc3RhbmNlb2YgZC5NZWRpYUVsZW1lbnQsdGhpcy5fdmlkZW9QcmV2VXBkYXRlVGltZT0wLHRoaXMuaXNTcmNIVE1MRWxlbWVudD12b2lkIDAhPT1kLkVsZW1lbnQmJmIgaW5zdGFuY2VvZiBkLkVsZW1lbnQmJiEoYiBpbnN0YW5jZW9mIGQuR3JhcGhpY3MpLHRoaXMuaXNTcmNQNUltYWdlPWIgaW5zdGFuY2VvZiBkLkltYWdlLHRoaXMuaXNTcmNQNUdyYXBoaWNzPWIgaW5zdGFuY2VvZiBkLkdyYXBoaWNzLHRoaXMuaXNJbWFnZURhdGE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEltYWdlRGF0YSYmYiBpbnN0YW5jZW9mIEltYWdlRGF0YTt2YXIgZT10aGlzLl9nZXRUZXh0dXJlRGF0YUZyb21Tb3VyY2UoKTtyZXR1cm4gdGhpcy53aWR0aD1lLndpZHRoLHRoaXMuaGVpZ2h0PWUuaGVpZ2h0LHRoaXMuaW5pdChlKSx0aGlzfSxkLlRleHR1cmUucHJvdG90eXBlLl9nZXRUZXh0dXJlRGF0YUZyb21Tb3VyY2U9ZnVuY3Rpb24oKXt2YXIgYTtyZXR1cm4gdGhpcy5pc1NyY1A1SW1hZ2U/YT10aGlzLnNyYy5jYW52YXM6dGhpcy5pc1NyY01lZGlhRWxlbWVudHx8dGhpcy5pc1NyY1A1R3JhcGhpY3N8fHRoaXMuaXNTcmNIVE1MRWxlbWVudD9hPXRoaXMuc3JjLmVsdDp0aGlzLmlzSW1hZ2VEYXRhJiYoYT10aGlzLnNyYyksYX0sZC5UZXh0dXJlLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX3JlbmRlcmVyLkdMO2lmKHRoaXMuZ2xUZXg9Yi5jcmVhdGVUZXh0dXJlKCksdGhpcy5iaW5kVGV4dHVyZSgpLGIudGV4UGFyYW1ldGVyaShiLlRFWFRVUkVfMkQsYi5URVhUVVJFX01BR19GSUxURVIsdGhpcy5nbE1hZ0ZpbHRlciksYi50ZXhQYXJhbWV0ZXJpKGIuVEVYVFVSRV8yRCxiLlRFWFRVUkVfTUlOX0ZJTFRFUix0aGlzLmdsTWluRmlsdGVyKSxiLnRleFBhcmFtZXRlcmkoYi5URVhUVVJFXzJELGIuVEVYVFVSRV9XUkFQX1MsdGhpcy5nbFdyYXBTKSxiLnRleFBhcmFtZXRlcmkoYi5URVhUVVJFXzJELGIuVEVYVFVSRV9XUkFQX1QsdGhpcy5nbFdyYXBUKSwwPT09dGhpcy53aWR0aHx8MD09PXRoaXMuaGVpZ2h0fHx0aGlzLmlzU3JjTWVkaWFFbGVtZW50JiYhdGhpcy5zcmMubG9hZGVkbWV0YWRhdGEpe3ZhciBjPW5ldyBVaW50OEFycmF5KFsxLDEsMSwxXSk7Yi50ZXhJbWFnZTJEKHRoaXMuZ2xUYXJnZXQsMCxiLlJHQkEsMSwxLDAsdGhpcy5nbEZvcm1hdCxiLlVOU0lHTkVEX0JZVEUsYyl9ZWxzZSBiLnRleEltYWdlMkQodGhpcy5nbFRhcmdldCwwLHRoaXMuZ2xGb3JtYXQsdGhpcy5nbEZvcm1hdCxiLlVOU0lHTkVEX0JZVEUsYSl9LGQuVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zcmM7aWYoMD09PWEud2lkdGh8fDA9PT1hLmhlaWdodClyZXR1cm4hMTt2YXIgYj10aGlzLl9nZXRUZXh0dXJlRGF0YUZyb21Tb3VyY2UoKSxjPSExLGQ9dGhpcy5fcmVuZGVyZXIuR0w7cmV0dXJuIGIud2lkdGghPT10aGlzLndpZHRofHxiLmhlaWdodCE9PXRoaXMuaGVpZ2h0PyhjPSEwLHRoaXMud2lkdGg9Yi53aWR0aCx0aGlzLmhlaWdodD1iLmhlaWdodCx0aGlzLmlzU3JjUDVJbWFnZT9hLnNldE1vZGlmaWVkKCExKToodGhpcy5pc1NyY01lZGlhRWxlbWVudHx8dGhpcy5pc1NyY0hUTUxFbGVtZW50KSYmYS5zZXRNb2RpZmllZCghMCkpOnRoaXMuaXNTcmNQNUltYWdlP2EuaXNNb2RpZmllZCgpJiYoYz0hMCxhLnNldE1vZGlmaWVkKCExKSk6dGhpcy5pc1NyY01lZGlhRWxlbWVudD9hLmlzTW9kaWZpZWQoKT8oYz0hMCxhLnNldE1vZGlmaWVkKCExKSk6YS5sb2FkZWRtZXRhZGF0YSYmdGhpcy5fdmlkZW9QcmV2VXBkYXRlVGltZSE9PWEudGltZSgpJiYodGhpcy5fdmlkZW9QcmV2VXBkYXRlVGltZT1hLnRpbWUoKSxjPSEwKTp0aGlzLmlzSW1hZ2VEYXRhP2EuX2RpcnR5JiYoYS5fZGlydHk9ITEsYz0hMCk6Yz0hMCxjJiYodGhpcy5iaW5kVGV4dHVyZSgpLGQudGV4SW1hZ2UyRCh0aGlzLmdsVGFyZ2V0LDAsdGhpcy5nbEZvcm1hdCx0aGlzLmdsRm9ybWF0LGQuVU5TSUdORURfQllURSxiKSksY30sZC5UZXh0dXJlLnByb3RvdHlwZS5iaW5kVGV4dHVyZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5HTC5iaW5kVGV4dHVyZSh0aGlzLmdsVGFyZ2V0LHRoaXMuZ2xUZXgpLHRoaXN9LGQuVGV4dHVyZS5wcm90b3R5cGUudW5iaW5kVGV4dHVyZT1mdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLkdMLmJpbmRUZXh0dXJlKHRoaXMuZ2xUYXJnZXQsbnVsbCl9LGQuVGV4dHVyZS5wcm90b3R5cGUuc2V0SW50ZXJwb2xhdGlvbj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX3JlbmRlcmVyLkdMO2E9PT1lLk5FQVJFU1Q/dGhpcy5nbE1pbkZpbHRlcj1jLk5FQVJFU1Q6dGhpcy5nbE1pbkZpbHRlcj1jLkxJTkVBUixiPT09ZS5ORUFSRVNUP3RoaXMuZ2xNYWdGaWx0ZXI9Yy5ORUFSRVNUOnRoaXMuZ2xNYWdGaWx0ZXI9Yy5MSU5FQVIsdGhpcy5iaW5kVGV4dHVyZSgpLGMudGV4UGFyYW1ldGVyaShjLlRFWFRVUkVfMkQsYy5URVhUVVJFX01JTl9GSUxURVIsdGhpcy5nbE1pbkZpbHRlciksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfTUFHX0ZJTFRFUix0aGlzLmdsTWFnRmlsdGVyKSx0aGlzLnVuYmluZFRleHR1cmUoKX0sZC5UZXh0dXJlLnByb3RvdHlwZS5zZXRXcmFwTW9kZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX3JlbmRlcmVyLkdMLGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PShhJmEtMSl9LGY9ZCh0aGlzLndpZHRoKSxnPWQodGhpcy53aWR0aCk7YT09PWUuUkVQRUFUP2YmJmc/dGhpcy5nbFdyYXBTPWMuUkVQRUFUOihjb25zb2xlLndhcm4oXCJZb3UgdHJpZWQgdG8gc2V0IHRoZSB3cmFwIG1vZGUgdG8gUkVQRUFUIGJ1dCB0aGUgdGV4dHVyZSBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIHR3by4gU2V0dGluZyB0byBDTEFNUCBpbnN0ZWFkXCIpLHRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UpOmE9PT1lLk1JUlJPUj9mJiZnP3RoaXMuZ2xXcmFwUz1jLk1JUlJPUkVEX1JFUEVBVDooY29uc29sZS53YXJuKFwiWW91IHRyaWVkIHRvIHNldCB0aGUgd3JhcCBtb2RlIHRvIE1JUlJPUiBidXQgdGhlIHRleHR1cmUgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uIFNldHRpbmcgdG8gQ0xBTVAgaW5zdGVhZFwiKSx0aGlzLmdsV3JhcFM9Yy5DTEFNUF9UT19FREdFKTp0aGlzLmdsV3JhcFM9Yy5DTEFNUF9UT19FREdFLGI9PT1lLlJFUEVBVD9mJiZnP3RoaXMuZ2xXcmFwVD1jLlJFUEVBVDooY29uc29sZS53YXJuKFwiWW91IHRyaWVkIHRvIHNldCB0aGUgd3JhcCBtb2RlIHRvIFJFUEVBVCBidXQgdGhlIHRleHR1cmUgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uIFNldHRpbmcgdG8gQ0xBTVAgaW5zdGVhZFwiKSx0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFKTpiPT09ZS5NSVJST1I/ZiYmZz90aGlzLmdsV3JhcFQ9Yy5NSVJST1JFRF9SRVBFQVQ6KGNvbnNvbGUud2FybihcIllvdSB0cmllZCB0byBzZXQgdGhlIHdyYXAgbW9kZSB0byBNSVJST1IgYnV0IHRoZSB0ZXh0dXJlIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgdHdvLiBTZXR0aW5nIHRvIENMQU1QIGluc3RlYWRcIiksdGhpcy5nbFdyYXBUPWMuQ0xBTVBfVE9fRURHRSk6dGhpcy5nbFdyYXBUPWMuQ0xBTVBfVE9fRURHRSx0aGlzLmJpbmRUZXh0dXJlKCksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfV1JBUF9TLHRoaXMuZ2xXcmFwUyksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfV1JBUF9ULHRoaXMuZ2xXcmFwVCksdGhpcy51bmJpbmRUZXh0dXJlKCl9LGIuZXhwb3J0cz1kLlRleHR1cmV9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDc3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3RoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iLHRoaXMuaW5mb3M9W10sdGhpcy5maW5kSW1hZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy53aWR0aCp0aGlzLmhlaWdodDtpZihhPmIpdGhyb3cgbmV3IEVycm9yKFwiZm9udCBpcyB0b28gY29tcGxleCB0byByZW5kZXIgaW4gM0RcIik7Zm9yKHZhciBjLGQsZT10aGlzLmluZm9zLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgZj10aGlzLmluZm9zW2VdO2lmKGYuaW5kZXgrYTxiKXtjPWYsZD1mLmltYWdlRGF0YTticmVha319aWYoIWMpe3RyeXtkPW5ldyBJbWFnZURhdGEodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9Y2F0Y2goYSl7dmFyIGc9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjYW52YXNcIilbMF0saD0hZztnfHwoZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGcuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGcpKTt2YXIgaT1nLmdldENvbnRleHQoXCIyZFwiKTtpJiYoZD1pLmNyZWF0ZUltYWdlRGF0YSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSksaCYmZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChnKX1jPXtpbmRleDowLGltYWdlRGF0YTpkfSx0aGlzLmluZm9zLnB1c2goYyl9dmFyIGo9Yy5pbmRleDtyZXR1cm4gYy5pbmRleCs9YSxkLl9kaXJ0eT0hMCx7aW1hZ2VEYXRhOmQsaW5kZXg6an19fWZ1bmN0aW9uIGUoYSxiLGMsZCxlKXt2YXIgZj1hLmltYWdlRGF0YSxnPWYuZGF0YSxoPTQqYS5pbmRleCsrO2dbaCsrXT1iLGdbaCsrXT1jLGdbaCsrXT1kLGdbaCsrXT1lfXZhciBmPWEoXCIuLi9jb3JlL21haW5cIiksZz1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4vcDUuU2hhZGVyXCIpLGEoXCIuL3A1LlJlbmRlcmVyR0xcIiksZi5SZW5kZXJlckdMLnByb3RvdHlwZS5fYXBwbHlUZXh0UHJvcGVydGllcz1mdW5jdGlvbigpe30sZi5SZW5kZXJlckdMLnByb3RvdHlwZS50ZXh0V2lkdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2lzT3BlblR5cGUoKT90aGlzLl90ZXh0Rm9udC5fdGV4dFdpZHRoKGEsdGhpcy5fdGV4dFNpemUpOjB9O3ZhciBoPTksaT1oLGo9NjQsaz02NCxsPTY0LG09NjQsbj02NCxvPTY0LHA9TWF0aC5zcXJ0KDMpLHE9ZnVuY3Rpb24oYSl7dGhpcy5mb250PWEsdGhpcy5zdHJva2VJbWFnZUluZm9zPW5ldyBkKGosayksdGhpcy5jb2xEaW1JbWFnZUluZm9zPW5ldyBkKGwsbSksdGhpcy5yb3dEaW1JbWFnZUluZm9zPW5ldyBkKGwsbSksdGhpcy5jb2xDZWxsSW1hZ2VJbmZvcz1uZXcgZChuLG8pLHRoaXMucm93Q2VsbEltYWdlSW5mb3M9bmV3IGQobixvKSx0aGlzLmdseXBoSW5mb3M9e30sdGhpcy5nZXRHbHlwaEluZm89ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhLGIsYyl7ZnVuY3Rpb24gZChhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoO2QtLSA+MDspe3ZhciBlPWFbZF07Yj5lJiYoYj1lKSxjPGUmJihjPWUpfXJldHVybnttaW46YixtYXg6Y319dmFyIGU9dy5sZW5ndGg7dy5wdXNoKGMpO2Zvcih2YXIgZj1kKGEsMSwwKSxnPU1hdGgubWF4KE1hdGguZmxvb3IoZi5taW4qaCksMCksaj1NYXRoLm1pbihNYXRoLmNlaWwoZi5tYXgqaCksaCksaz1nO2s8ajsrK2speVtrXS5wdXNoKGUpO2Zvcih2YXIgbD1kKGIsMSwwKSxtPU1hdGgubWF4KE1hdGguZmxvb3IobC5taW4qaSksMCksbj1NYXRoLm1pbihNYXRoLmNlaWwobC5tYXgqaSksaSksbz1tO288bjsrK28peFtvXS5wdXNoKGUpfWZ1bmN0aW9uIGMoYSxiLGMpe3JldHVybiBhPGI/YjphPmM/YzphfWZ1bmN0aW9uIGQoYSl7cmV0dXJuIGMoMjU1KmEsMCwyNTUpfWZ1bmN0aW9uIGcoYSxiLGMsZCl7dGhpcy5wMD1hLHRoaXMuYzA9Yix0aGlzLmMxPWMsdGhpcy5wMT1kLHRoaXMudG9RdWFkcmF0aWM9ZnVuY3Rpb24oKXtyZXR1cm57eDp0aGlzLnAwLngseTp0aGlzLnAwLnkseDE6dGhpcy5wMS54LHkxOnRoaXMucDEueSxjeDooMyoodGhpcy5jMC54K3RoaXMuYzEueCktKHRoaXMucDAueCt0aGlzLnAxLngpKS80LGN5OigzKih0aGlzLmMwLnkrdGhpcy5jMS55KS0odGhpcy5wMC55K3RoaXMucDEueSkpLzR9fSx0aGlzLnF1YWRFcnJvcj1mdW5jdGlvbigpe3JldHVybiBmLlZlY3Rvci5zdWIoZi5WZWN0b3Iuc3ViKHRoaXMucDEsdGhpcy5wMCksZi5WZWN0b3IubXVsdChmLlZlY3Rvci5zdWIodGhpcy5jMSx0aGlzLmMwKSwzKSkubWFnKCkvMn0sdGhpcy5zcGxpdD1mdW5jdGlvbihhKXt2YXIgYj1mLlZlY3Rvci5sZXJwKHRoaXMucDAsdGhpcy5jMCxhKSxjPWYuVmVjdG9yLmxlcnAodGhpcy5jMCx0aGlzLmMxLGEpLGQ9Zi5WZWN0b3IubGVycChiLGMsYSk7dGhpcy5jMT1mLlZlY3Rvci5sZXJwKHRoaXMuYzEsdGhpcy5wMSxhKSx0aGlzLmMwPWYuVmVjdG9yLmxlcnAoYyx0aGlzLmMxLGEpO3ZhciBlPWYuVmVjdG9yLmxlcnAoZCx0aGlzLmMwLGEpLGg9bmV3IGcodGhpcy5wMCxiLGQsZSk7cmV0dXJuIHRoaXMucDA9ZSxofSx0aGlzLnNwbGl0SW5mbGVjdGlvbnM9ZnVuY3Rpb24oKXt2YXIgYT1mLlZlY3Rvci5zdWIodGhpcy5jMCx0aGlzLnAwKSxiPWYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIodGhpcy5jMSx0aGlzLmMwKSxhKSxjPWYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIoZi5WZWN0b3Iuc3ViKHRoaXMucDEsdGhpcy5jMSksYSksZi5WZWN0b3IubXVsdChiLDIpKSxkPVtdLGU9Yi54KmMueS1iLnkqYy54O2lmKDAhPT1lKXt2YXIgZz1hLngqYy55LWEueSpjLngsaD1hLngqYi55LWEueSpiLngsaT1nKmctNCplKmg7aWYoaT49MCl7ZTwwJiYoZT0tZSxnPS1nLGg9LWgpO3ZhciBqPU1hdGguc3FydChpKSxrPSgtZy1qKS8oMiplKSxsPSgtZytqKS8oMiplKTtrPjAmJms8MSYmKGQucHVzaCh0aGlzLnNwbGl0KGspKSxsPTEtKDEtbCkvKDEtaykpLGw+MCYmbDwxJiZkLnB1c2godGhpcy5zcGxpdChsKSl9fXJldHVybiBkLnB1c2godGhpcyksZH19ZnVuY3Rpb24gaihhLGIsYyxkLGUsaCxpLGope2Zvcih2YXIgaz1uZXcgZyhuZXcgZi5WZWN0b3IoYSxiKSxuZXcgZi5WZWN0b3IoYyxkKSxuZXcgZi5WZWN0b3IoZSxoKSxuZXcgZi5WZWN0b3IoaSxqKSkuc3BsaXRJbmZsZWN0aW9ucygpLGw9W10sbT0zMC9wLG49MDtuPGsubGVuZ3RoO24rKyl7Zm9yKHZhciBvLHE9a1tuXSxyPVtdOyEoKG89bS9xLnF1YWRFcnJvcigpKT49LjEyNSk7KXt2YXIgcz1NYXRoLnBvdyhvLDEvMyksdD1xLnNwbGl0KHMpLHU9cS5zcGxpdCgxLXMvKDEtcykpO2wucHVzaCh0KSxyLnB1c2gocSkscT11fW88MSYmbC5wdXNoKHEuc3BsaXQoLjUpKSxsLnB1c2gocSksQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobCxyLnJldmVyc2UoKSl9cmV0dXJuIGx9ZnVuY3Rpb24gayhhLGMsZCxlKXtiKFthLGRdLFtjLGVdLHt4OmEseTpjLGN4OihhK2QpLzIsY3k6KGMrZSkvMn0pfWZ1bmN0aW9uIGwoYSxiLGMsZCl7cmV0dXJuIE1hdGguYWJzKGMtYSk8MWUtNSYmTWF0aC5hYnMoZC1iKTwxZS01fWZ1bmN0aW9uIG0oYSxiLGMpe2Zvcih2YXIgZD1hLmxlbmd0aCxmPWIuZmluZEltYWdlKGQpLGc9Zi5pbmRleCxoPTAsaT0wO2k8ZDsrK2kpaCs9YVtpXS5sZW5ndGg7Zm9yKHZhciBqPWMuZmluZEltYWdlKGgpLGs9MDtrPGQ7KytrKXt2YXIgbD1hW2tdLG09bC5sZW5ndGgsbj1qLmluZGV4O2UoZixuPj43LDEyNyZuLG0+PjcsMTI3Jm0pO2Zvcih2YXIgbz0wO288bTsrK28pe3ZhciBwPWxbb10rUztlKGoscD4+NywxMjcmcCwwLDApfX1yZXR1cm57Y2VsbEltYWdlSW5mbzpqLGRpbU9mZnNldDpnLGRpbUltYWdlSW5mbzpmfX12YXIgbj10aGlzLmdseXBoSW5mb3NbYS5pbmRleF07aWYobilyZXR1cm4gbjt2YXIgbz1hLmdldEJvdW5kaW5nQm94KCkscT1vLngxLHI9by55MSxzPW8ueDItcSx0PW8ueTItcix1PWEucGF0aC5jb21tYW5kcztpZigwPT09c3x8MD09PXR8fCF1Lmxlbmd0aClyZXR1cm4gdGhpcy5nbHlwaEluZm9zW2EuaW5kZXhdPXt9O3ZhciB2LHc9W10seD1bXSx5PVtdO2Zvcih2PWgtMTt2Pj0wOy0tdil5LnB1c2goW10pO2Zvcih2PWktMTt2Pj0wOy0tdil4LnB1c2goW10pO2Zvcih2YXIgeixBLEIsQyxEPTA7RDx1Lmxlbmd0aDsrK0Qpe3ZhciBFPXVbRF0sRj0oRS54LXEpL3MsRz0oRS55LXIpL3Q7aWYoIWwoeixBLEYsRykpe3N3aXRjaChFLnR5cGUpe2Nhc2VcIk1cIjpCPUYsQz1HO2JyZWFrO2Nhc2VcIkxcIjprKHosQSxGLEcpO2JyZWFrO2Nhc2VcIlFcIjp2YXIgSD0oRS54MS1xKS9zLEk9KEUueTEtcikvdDtiKFt6LEYsSF0sW0EsRyxJXSx7eDp6LHk6QSxjeDpILGN5Okl9KTticmVhaztjYXNlXCJaXCI6bCh6LEEsQixDKT93LnB1c2goe3g6eix5OkF9KTooayh6LEEsQixDKSx3LnB1c2goe3g6Qix5OkN9KSk7YnJlYWs7Y2FzZVwiQ1wiOmZvcih2YXIgSj0oRS54MS1xKS9zLEs9KEUueTEtcikvdCxMPShFLngyLXEpL3MsTT0oRS55Mi1yKS90LE49aih6LEEsSixLLEwsTSxGLEcpLE89MDtPPE4ubGVuZ3RoO08rKyl7dmFyIFA9TltPXS50b1F1YWRyYXRpYygpO2IoW1AueCxQLngxLFAuY3hdLFtQLnksUC55MSxQLmN5XSxQKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInVua25vd24gY29tbWFuZCB0eXBlOiBcIitFLnR5cGUpfXo9RixBPUd9fWZvcih2YXIgUT13Lmxlbmd0aCxSPXRoaXMuc3Ryb2tlSW1hZ2VJbmZvcy5maW5kSW1hZ2UoUSksUz1SLmluZGV4LFQ9MDtUPFE7KytUKXt2YXIgVT13W1RdO2UoUixkKFUueCksZChVLnkpLGQoVS5jeCksZChVLmN5KSl9cmV0dXJuIG49dGhpcy5nbHlwaEluZm9zW2EuaW5kZXhdPXtnbHlwaDphLHVHbHlwaFJlY3Q6W28ueDEsLW8ueTEsby54Miwtby55Ml0sc3Ryb2tlSW1hZ2VJbmZvOlIsc3Ryb2tlczp3LGNvbEluZm86bSh5LHRoaXMuY29sRGltSW1hZ2VJbmZvcyx0aGlzLmNvbENlbGxJbWFnZUluZm9zKSxyb3dJbmZvOm0oeCx0aGlzLnJvd0RpbUltYWdlSW5mb3MsdGhpcy5yb3dDZWxsSW1hZ2VJbmZvcyl9LG4udUdyaWRPZmZzZXQ9W24uY29sSW5mby5kaW1PZmZzZXQsbi5yb3dJbmZvLmRpbU9mZnNldF0sbn19O2YuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3JlbmRlclRleHQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZighKGQ+PWUpJiZ0aGlzLl9kb0ZpbGwpe2lmKCF0aGlzLl9pc09wZW5UeXBlKCkpcmV0dXJuIGNvbnNvbGUubG9nKFwiV0VCR0w6IG9ubHkgb3BlbnR5cGUgZm9udHMgYXJlIHN1cHBvcnRlZFwiKSxhO2EucHVzaCgpO3ZhciBwPXRoaXMuY3VyRmlsbFNoYWRlcixyPXRoaXMuX2RvU3Ryb2tlLHM9dGhpcy5kcmF3TW9kZTt0aGlzLmN1ckZpbGxTaGFkZXI9bnVsbCx0aGlzLl9kb1N0cm9rZT0hMSx0aGlzLmRyYXdNb2RlPWcuVEVYVFVSRTt2YXIgdD10aGlzLl90ZXh0Rm9udC5mb250LHU9dGhpcy5fdGV4dEZvbnQuX2ZvbnRJbmZvO3V8fCh1PXRoaXMuX3RleHRGb250Ll9mb250SW5mbz1uZXcgcSh0KSk7dmFyIHY9dGhpcy5fdGV4dEZvbnQuX2hhbmRsZUFsaWdubWVudCh0aGlzLGIsYyxkKSx3PXRoaXMuX3RleHRTaXplLHg9dy90LnVuaXRzUGVyRW07dGhpcy50cmFuc2xhdGUodi54LHYueSwwKSx0aGlzLnNjYWxlKHgseCwxKTt2YXIgeT10aGlzLkdMLHo9IXRoaXMuX2RlZmF1bHRGb250U2hhZGVyLEE9dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldEZvbnRTaGFkZXIoKSk7eiYmKEEuc2V0VW5pZm9ybShcInVHcmlkSW1hZ2VTaXplXCIsW2wsbV0pLEEuc2V0VW5pZm9ybShcInVDZWxsc0ltYWdlU2l6ZVwiLFtuLG9dKSxBLnNldFVuaWZvcm0oXCJ1U3Ryb2tlSW1hZ2VTaXplXCIsW2osa10pLEEuc2V0VW5pZm9ybShcInVHcmlkU2l6ZVwiLFtoLGldKSksdGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyRmlsbENvbG9yKTt2YXIgQj10aGlzLmdIYXNoLmdseXBoO2lmKCFCKXt2YXIgQz10aGlzLl90ZXh0R2VvbT1uZXcgZi5HZW9tZXRyeSgxLDEsZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD0xO2ErKylmb3IodmFyIGI9MDtiPD0xO2IrKyl0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGYuVmVjdG9yKGIsYSwwKSksdGhpcy51dnMucHVzaChiLGEpfSk7Qy5jb21wdXRlRmFjZXMoKS5jb21wdXRlTm9ybWFscygpLEI9dGhpcy5jcmVhdGVCdWZmZXJzKFwiZ2x5cGhcIixDKX10aGlzLl9iaW5kQnVmZmVyKEIudmVydGV4QnVmZmVyLHkuQVJSQVlfQlVGRkVSKSxBLmVuYWJsZUF0dHJpYihBLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMseS5GTE9BVCwhMSwwLDApLHRoaXMuX2JpbmRCdWZmZXIoQi5pbmRleEJ1ZmZlcix5LkVMRU1FTlRfQVJSQVlfQlVGRkVSKSx0aGlzLl9iaW5kQnVmZmVyKEIudXZCdWZmZXIseS5BUlJBWV9CVUZGRVIpLEEuZW5hYmxlQXR0cmliKEEuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMix5LkZMT0FULCExLDAsMCksQS5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLmN1ckZpbGxDb2xvcik7dHJ5e2Zvcih2YXIgRD0wLEU9bnVsbCxGPSExLEc9dC5zdHJpbmdUb0dseXBocyhiKSxIPTA7SDxHLmxlbmd0aDsrK0gpe3ZhciBJPUdbSF07RSYmKEQrPXQuZ2V0S2VybmluZ1ZhbHVlKEUsSSkpO3ZhciBKPXUuZ2V0R2x5cGhJbmZvKEkpO2lmKEoudUdseXBoUmVjdCl7dmFyIEs9Si5yb3dJbmZvLEw9Si5jb2xJbmZvO0Euc2V0VW5pZm9ybShcInVTYW1wbGVyU3Ryb2tlc1wiLEouc3Ryb2tlSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidVNhbXBsZXJSb3dTdHJva2VzXCIsSy5jZWxsSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidVNhbXBsZXJSb3dzXCIsSy5kaW1JbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlckNvbFN0cm9rZXNcIixMLmNlbGxJbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlckNvbHNcIixMLmRpbUltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVHcmlkT2Zmc2V0XCIsSi51R3JpZE9mZnNldCksQS5zZXRVbmlmb3JtKFwidUdseXBoUmVjdFwiLEoudUdseXBoUmVjdCksQS5zZXRVbmlmb3JtKFwidUdseXBoT2Zmc2V0XCIsRCksRj9BLmJpbmRUZXh0dXJlcygpOihGPSEwLEEuYmluZFNoYWRlcigpKSx5LmRyYXdFbGVtZW50cyh5LlRSSUFOR0xFUyw2LHRoaXMuR0wuVU5TSUdORURfU0hPUlQsMCl9RCs9SS5hZHZhbmNlV2lkdGgsRT1JfX1maW5hbGx5e0EudW5iaW5kU2hhZGVyKCksdGhpcy5jdXJGaWxsU2hhZGVyPXAsdGhpcy5fZG9TdHJva2U9cix0aGlzLmRyYXdNb2RlPXMsYS5wb3AoKX1yZXR1cm4gdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLGF9fX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5SZW5kZXJlckdMXCI6NzQsXCIuL3A1LlNoYWRlclwiOjc1fV19LHt9LFsxM10pKDEzKX0pOyIsImltcG9ydCBwNSBmcm9tICdwNS9saWIvcDUubWluJztcbmltcG9ydCBUb25lIGZyb20gJ3RvbmUnO1xuXG5jb25zdCBza2V0Y2ggPSAocCkgPT4ge1xuICAgIGxldCBub2lzZVNjYWxlPTAuMDM7XG4gICAgbGV0IG49MC4wMDtcbiAgICBsZXQgZD0wLjY7IFxuXG4gICAgbGV0IHBpYW5vO1xuXG4gICAgbGV0IG1lbG9keSA9IFs0MCAtMTIsIDQzIC0xMiwgNDUgLSAxMiwgNDcgLTEyLCA0OSAtMTIsIDUyIC0gMTIsIDQwLCA0MywgNDUsIDQ3LCA0OSwgNTIsIDQwICsgMTIsIDQzICsgMTIsIDQ1ICsgMTIsIDQ5ICsgMTIsIDUwICsgMTIsIDUyICsgMTIsIDQwICsgMjQsIDQzICsgMjQsIDQ1ICsgMjQsIDQ5ICsgMjQsIDUwICsgMjQsIDUyICsgMjQsIDQwICsgMzYsIDQzICsgMzYsIDQ1ICsgMzYsIDQ3ICsgMzYsIDQ5ICsgMzYsIDUyICsgMzYsIDQwICsgNDgsIDQzICsgNDgsIDQ1ICsgNDgsIDQ3ICsgNDgsIDQ5ICsgNDgsIDUyICsgNDgsNDAgKyA2MCwgNDMgKyA2MCwgNDUgKyA2MCwgNDcgKyA2MCwgNDkgKyA0OCwgNTIgKyA2MF1cblxuICAgIHAucHJlbG9hZCA9ICgpID0+IHtcbiAgICAgICAgcGlhbm8gPSBuZXcgVG9uZS5TYW1wbGVyKHtcbiAgICAgICdBMCcgOiAnQTAuW21wM3xvZ2ddJyxcbiAgICAgICdDMScgOiAnQzEuW21wM3xvZ2ddJyxcbiAgICAgICdEIzEnIDogJ0RzMS5bbXAzfG9nZ10nLFxuICAgICAgJ0YjMScgOiAnRnMxLlttcDN8b2dnXScsXG4gICAgICAnQTEnIDogJ0ExLlttcDN8b2dnXScsXG4gICAgICAnQzInIDogJ0MyLlttcDN8b2dnXScsXG4gICAgICAnRCMyJyA6ICdEczIuW21wM3xvZ2ddJyxcbiAgICAgICdGIzInIDogJ0ZzMi5bbXAzfG9nZ10nLFxuICAgICAgJ0EyJyA6ICdBMi5bbXAzfG9nZ10nLFxuICAgICAgJ0MzJyA6ICdDMy5bbXAzfG9nZ10nLFxuICAgICAgJ0QjMycgOiAnRHMzLlttcDN8b2dnXScsXG4gICAgICAnRiMzJyA6ICdGczMuW21wM3xvZ2ddJyxcbiAgICAgICdBMycgOiAnQTMuW21wM3xvZ2ddJyxcbiAgICAgICdDNCcgOiAnQzQuW21wM3xvZ2ddJyxcbiAgICAgICdEIzQnIDogJ0RzNC5bbXAzfG9nZ10nLFxuICAgICAgJ0YjNCcgOiAnRnM0LlttcDN8b2dnXScsXG4gICAgICAnQTQnIDogJ0E0LlttcDN8b2dnXScsXG4gICAgICAnQzUnIDogJ0M1LlttcDN8b2dnXScsXG4gICAgICAnRCM1JyA6ICdEczUuW21wM3xvZ2ddJyxcbiAgICAgICdGIzUnIDogJ0ZzNS5bbXAzfG9nZ10nLFxuICAgICAgJ0E1JyA6ICdBNS5bbXAzfG9nZ10nLFxuICAgICAgJ0M2JyA6ICdDNi5bbXAzfG9nZ10nLFxuICAgICAgJ0QjNicgOiAnRHM2LlttcDN8b2dnXScsXG4gICAgICAnRiM2JyA6ICdGczYuW21wM3xvZ2ddJyxcbiAgICAgICdBNicgOiAnQTYuW21wM3xvZ2ddJyxcbiAgICAgICdDNycgOiAnQzcuW21wM3xvZ2ddJyxcbiAgICAgICdEIzcnIDogJ0RzNy5bbXAzfG9nZ10nLFxuICAgICAgJ0YjNycgOiAnRnM3LlttcDN8b2dnXScsXG4gICAgICAnQTcnIDogJ0E3LlttcDN8b2dnXScsXG4gICAgICAnQzgnIDogJ0M4LlttcDN8b2dnXSdcbiAgICB9LCB7XG4gICAgICAncmVsZWFzZScgOiAxLFxuICAgICAgJ2Jhc2VVcmwnIDogJy4vc291bmRzLydcbiAgICB9KS50b01hc3RlcigpO1xuICAgIH1cbiAgICBcbiAgICBsZXQgdmFsMSwgdmFsMiA9IDA7XG4gICAgbGV0IGxvYWRlZCA9IGZhbHNlO1xuICAgIGxldCBhbHBoYSA9IDA7XG4gICAgcC5zZXR1cCA9ICgpID0+IHtcbiAgICAgICAgbGV0IGNhbnZhcyA9IHAuY3JlYXRlQ2FudmFzKDgwMCwgODAwLCBwLldFQkdMKTtcbiAgICAgICAgXG4gICAgfVxuICAgIGxldCBwdGljayA9IDA7XG4gICAgbGV0IHB0aWNrMiA9IDA7XG4gICAgcC5kcmF3ID0gKCkgPT4ge1xuICAgICAgICBwLmNhbWVyYSgwLDAsIDgwMCwgMCwgMCwgMCwgMCwgMSwgMCk7XG4gICAgICAgIHAuYmFja2dyb3VuZCgwKTtcbiAgICAgICAgLy9wLnNtb290aCgpO1xuXG4gICAgICAgIHAuc3Ryb2tlKDI1NSwxMDApO1xuICAgICAgICBwLmxpbmUoMCwtMzAwMCwwLDEwMDApO1xuXG4gICAgICAgIHAudHJhbnNsYXRlKC1wLndpZHRoLzIsIHAuaGVpZ2h0LzQsMCk7XG4gICAgICAgIHAucm90YXRlWChwLlBJKTtcbiAgICAgICAgXG4gICAgICAgIG49bitkO1xuICAgICAgICBmb3IgKGxldCB5PTA7IHk8MjA7IHkrKykge1xuICAgICAgICAgICAgZm9yKGxldCB4PTA7IHg8MjAwOyB4KyspIHsgXG4gICAgICAgICAgICAgICAgbGV0IG5vaXNlVmFsID0gcC5ub2lzZSgobit4KSpub2lzZVNjYWxlLCgtbit5KSpub2lzZVNjYWxlLHkqbm9pc2VTY2FsZSk7IFxuICAgICAgICAgICAgICAgIHAubm9TdHJva2UoKTtcbiAgICAgICAgICAgICAgICBwLmZpbGwoKG5vaXNlVmFsKjI1MCkpOyBcbiAgICAgICAgICAgICAgICBpZih4PT0xMDApIHtcbiAgICAgICAgICAgICAgICAgICAgcC5maWxsKDI1NSwwLDApO1xuICAgICAgICAgICAgICAgICAgICBpZih5PT0wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWwxID0gbm9pc2VWYWw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYoeT09MTkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbDIgPSBub2lzZVZhbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwLnB1c2goKTtcbiAgICAgICAgICAgICAgICBwLnRyYW5zbGF0ZSh4KjQsbm9pc2VWYWwqNDAwKTtcbiAgICAgICAgICAgICAgICBwLnNwaGVyZSgxKTtcbiAgICAgICAgICAgICAgICBwLnBvcCgpO1xuICAgICAgICAgICAgfSBcbiAgICAgICAgfVxuICAgICAgICBhbHBoYS09MTAwO1xuXG4gICAgICAgIHAucHVzaCgpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHAudHJhbnNsYXRlKDEwMCo0LHZhbDEqNDAwKTtcbiAgICAgICAgICAgICAgICBwLmZpbGwoMjU1LDAsMCxhbHBoYSk7XG4gICAgICAgICAgICAgICAgcC5zcGhlcmUoNSk7XG4gICAgICAgICAgICAgICAgcC5wb3AoKTtcblxuICAgICAgICBwLnB1c2goKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBwLnRyYW5zbGF0ZSgxMDAqNCx2YWwyKjQwMCk7XG4gICAgICAgICAgICAgICAgcC5zcGhlcmUoNSk7XG4gICAgICAgICAgICAgICAgcC5wb3AoKTtcblxuICAgICAgICBpZihsb2FkZWQpIHtcbiAgICAgICAgICAgIGxldCB0aWNrID0gcC5mbG9vcihwLm1pbGxpcygpLzMwMCk7XG4gICAgICAgICAgICBpZihwdGljayE9dGljaykge1xuICAgICAgICAgICAgICAgIGxldCBybmQgPSBwLnJhbmRvbSgyKTtcbiAgICAgICAgICAgICAgICBpZihybmQgPiAwLjUpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxwaGEgPSAyNTU7XG4gICAgICAgICAgICAgICAgICAgIHBpYW5vLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFRvbmUuTWlkaShtZWxvZHlbcC5jZWlsKHZhbDEqNDIpXSArIDYpLnRvRnJlcXVlbmN5KCksXCIxMzJuXCIpO1xuICAgICAgICAgICAgICAgICAgICBwaWFuby50cmlnZ2VyQXR0YWNrUmVsZWFzZShUb25lLk1pZGkobWVsb2R5W3AuY2VpbCh2YWwyKjQyKV0gKyA2KS50b0ZyZXF1ZW5jeSgpLFwiMTMyblwiKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHRpY2sgPSB0aWNrO1xuXG4gICAgICAgICAgICBsZXQgdGljazIgPSBwLmZsb29yKHAubWlsbGlzKCkvNDAwKTtcbiAgICAgICAgICAgIGlmKHB0aWNrMiE9dGljazIpIHtcbiAgICAgICAgICAgICAgICBsZXQgcm5kID0gcC5yYW5kb20oMik7XG4gICAgICAgICAgICAgICAgaWYocm5kID4gMC42KSB7XG4gICAgICAgICAgICAgICAgICAgIGFscGhhID0gMjU1O1xuICAgICAgICAgICAgICAgICAgICBwaWFuby50cmlnZ2VyQXR0YWNrUmVsZWFzZShUb25lLk1pZGkobWVsb2R5W3AuY2VpbCh2YWwyKjQyKV0gKyA2KS50b0ZyZXF1ZW5jeSgpLFwiNjRuXCIpO1xuICAgICAgICAgICAgICAgICAgICAvL3BpYW5vLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFRvbmUuTWlkaShwLmZsb29yKHZhbDIqMTAwKSArIDMwKS50b0ZyZXF1ZW5jeSgpLFwiMTI4blwiKTsgIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHB0aWNrMiA9IHRpY2syO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwLmtleVByZXNzZWQgPSAoKSA9PiB7XG4gICAgICAgIGlmKHAua2V5ID09ICdtJykge1xuICAgICAgICAgICAgcC5zYXZlKERhdGUubm93KCkgKyBcIi5qcGdcIik7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgbG9hZGVkID0gdHJ1ZTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBza2V0Y2g7XG5uZXcgcDUoc2tldGNoKTsiLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSwgZXZhbCkoXCJ0aGlzXCIpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file + */return function(e){t=e()}(function(){var t=function(){if(!(this instanceof t))throw new Error("constructor needs to be called with the 'new' keyword")};t.prototype.toString=function(){for(var e in t){var i=e[0].match(/^[A-Z]$/),r=t[e]===this.constructor;if(t.isFunction(t[e])&&i&&r)return e}return"Tone"},t.prototype.dispose=function(){return this},t.prototype.set=function(e,i,r){if(t.isObject(e))r=i;else if(t.isString(e)){var n={};n[e]=i,e=n}t:for(var o in e){i=e[o];var s=this;if(-1!==o.indexOf(".")){for(var a=o.split("."),h=0;hthis.memory){var r=this.length-this.memory;this._timeline.splice(0,r)}return this},t.Timeline.prototype.remove=function(t){var e=this._timeline.indexOf(t);return-1!==e&&this._timeline.splice(e,1),this},t.Timeline.prototype.get=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return-1!==r?this._timeline[r]:null},t.Timeline.prototype.peek=function(){return this._timeline[0]},t.Timeline.prototype.shift=function(){return this._timeline.shift()},t.Timeline.prototype.getAfter=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return r+10&&this._timeline[r-1][i]=0?this._timeline[n-1]:null},t.Timeline.prototype.cancel=function(t){if(this._timeline.length>1){var e=this._search(t);if(e>=0)if(this._timeline[e].time===t){for(var i=e;i>=0&&this._timeline[i].time===t;i--)e=i;this._timeline=this._timeline.slice(0,e)}else this._timeline=this._timeline.slice(0,e+1);else this._timeline=[]}else 1===this._timeline.length&&this._timeline[0].time>=t&&(this._timeline=[]);return this},t.Timeline.prototype.cancelBefore=function(t){var e=this._search(t);return e>=0&&(this._timeline=this._timeline.slice(e+1)),this},t.Timeline.prototype.previousEvent=function(t){var e=this._timeline.indexOf(t);return e>0?this._timeline[e-1]:null},t.Timeline.prototype._search=function(e,i){if(0===this._timeline.length)return-1;i=t.defaultArg(i,"time");var r=0,n=this._timeline.length,o=n;if(n>0&&this._timeline[n-1][i]<=e)return n-1;for(;re)return s;a[i]>e?o=s:r=s+1}return-1},t.Timeline.prototype._iterate=function(e,i,r){i=t.defaultArg(i,0),r=t.defaultArg(r,this._timeline.length-1),this._timeline.slice(i,r+1).forEach(function(t){e.call(this,t)}.bind(this))},t.Timeline.prototype.forEach=function(t){return this._iterate(t),this},t.Timeline.prototype.forEachBefore=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(e,0,i),this},t.Timeline.prototype.forEachAfter=function(t,e){var i=this._search(t);return this._iterate(e,i+1),this},t.Timeline.prototype.forEachBetween=function(t,e,i){var r=this._search(t),n=this._search(e);return-1!==r&&-1!==n?(this._timeline[r].time!==t&&(r+=1),this._timeline[n].time===e&&(n-=1),this._iterate(i,r,n)):-1===r&&this._iterate(i,0,n),this},t.Timeline.prototype.forEachFrom=function(t,e){for(var i=this._search(t);i>=0&&this._timeline[i].time>=t;)i--;return this._iterate(e,i+1),this},t.Timeline.prototype.forEachAtTime=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(function(i){i.time===t&&e.call(this,i)},0,i),this},t.Timeline.prototype.dispose=function(){return t.prototype.dispose.call(this),this._timeline=null,this},t.Timeline}),e(function(t){t.supported&&(!window.hasOwnProperty("OfflineAudioContext")&&window.hasOwnProperty("webkitOfflineAudioContext")&&(window.OfflineAudioContext=window.webkitOfflineAudioContext),new OfflineAudioContext(1,1,44100).startRendering()instanceof Promise||(OfflineAudioContext.prototype._native_startRendering=OfflineAudioContext.prototype.startRendering,OfflineAudioContext.prototype.startRendering=function(){return new Promise(function(t){this.oncomplete=function(e){t(e.renderedBuffer)},this._native_startRendering()}.bind(this))}))}),e(function(t){if(t.supported){!window.hasOwnProperty("AudioContext")&&window.hasOwnProperty("webkitAudioContext")&&(window.AudioContext=window.webkitAudioContext),AudioContext.prototype.close||(AudioContext.prototype.close=function(){return t.isFunction(this.suspend)&&this.suspend(),Promise.resolve()}),AudioContext.prototype.resume||(AudioContext.prototype.resume=function(){return Promise.resolve()}),!AudioContext.prototype.createGain&&AudioContext.prototype.createGainNode&&(AudioContext.prototype.createGain=AudioContext.prototype.createGainNode),!AudioContext.prototype.createDelay&&AudioContext.prototype.createDelayNode&&(AudioContext.prototype.createDelay=AudioContext.prototype.createDelayNode);var e=!1,i=new OfflineAudioContext(1,1,44100),r=new Uint32Array([1179011410,48,1163280727,544501094,16,131073,44100,176400,1048580,1635017060,8,0,0,0,0]).buffer;try{i.decodeAudioData(r)instanceof Promise&&(e=!0)}catch(t){e=!1}e||(AudioContext.prototype._native_decodeAudioData=AudioContext.prototype.decodeAudioData,AudioContext.prototype.decodeAudioData=function(t){return new Promise(function(e,i){this._native_decodeAudioData(t,e,i)}.bind(this))})}}),e(function(t){t.Context=function(){t.Emitter.call(this);var i=t.defaults(arguments,["context"],t.Context);if(!i.context&&(i.context=new window.AudioContext,!i.context))throw new Error("could not create AudioContext. Possibly too many AudioContexts running already.");for(var r in this._context=i.context,this._context)this._defineProperty(this._context,r);this._latencyHint=i.latencyHint,this._constants={},this.lookAhead=i.lookAhead,this._computedUpdateInterval=0,this._ticker=new e(this.emit.bind(this,"tick"),i.clockSource,i.updateInterval),this._timeouts=new t.Timeline,this._timeoutIds=0,this.on("tick",this._timeoutLoop.bind(this))},t.extend(t.Context,t.Emitter),t.Emitter.mixin(t.Context),t.Context.defaults={clockSource:"worker",latencyHint:"interactive",lookAhead:.1,updateInterval:.03},t.Context.prototype._defineProperty=function(e,i){t.isUndef(this[i])&&Object.defineProperty(this,i,{get:function(){return"function"==typeof e[i]?e[i].bind(e):e[i]},set:function(t){e[i]=t}})},t.Context.prototype.now=function(){return this._context.currentTime+this.lookAhead},t.Context.prototype.ready=function(){return new Promise(function(t){"running"===this._context.state?t():this._context.resume().then(function(){t()})}.bind(this))},t.Context.prototype.close=function(){return this._context.close().then(function(){t.Context.emit("close",this)}.bind(this))},t.Context.prototype.getConstant=function(t){if(this._constants[t])return this._constants[t];for(var e=this._context.createBuffer(1,128,this._context.sampleRate),i=e.getChannelData(0),r=0;r1&&(this.input=new Array(t)),1===e?this.output=this.context.createGain():e>1&&(this.output=new Array(e))},Object.defineProperty(t.AudioNode.prototype,"channelCount",{get:function(){return this.output.channelCount},set:function(t){return this.output.channelCount=t}}),Object.defineProperty(t.AudioNode.prototype,"channelCountMode",{get:function(){return this.output.channelCountMode},set:function(t){return this.output.channelCountMode=t}}),Object.defineProperty(t.AudioNode.prototype,"channelInterpretation",{get:function(){return this.output.channelInterpretation},set:function(t){return this.output.channelInterpretation=t}}),Object.defineProperty(t.AudioNode.prototype,"numberOfInputs",{get:function(){return this.input?t.isArray(this.input)?this.input.length:1:0}}),Object.defineProperty(t.AudioNode.prototype,"numberOfOutputs",{get:function(){return this.output?t.isArray(this.output)?this.output.length:1:0}}),t.AudioNode.prototype._onConnect=function(){},t.AudioNode.prototype.connect=function(e,i,r){return e._onConnect&&e._onConnect(this),t.isArray(this.output)?(i=t.defaultArg(i,0),this.output[i].connect(e,0,r)):this.output.connect(e,i,r),this},t.AudioNode.prototype.disconnect=function(e,i,r){t.isArray(this.output)?t.isNumber(e)?this.output[e].disconnect():(i=t.defaultArg(i,0),this.output[i].disconnect(e,0,r)):this.output.disconnect.apply(this.output,arguments)},t.AudioNode.prototype.chain=function(){for(var t=this,e=0;e3&&(r=parseFloat(parseFloat(r).toFixed(3))),[i,e,r].join(":")},t.Time.prototype.toTicks=function(){var t=this._beatsToUnits(1),e=this.valueOf()/t;return Math.round(e*this._getPPQ())},t.Time.prototype.toSeconds=function(){return this.valueOf()},t.Time.prototype.toMidi=function(){return t.Frequency.ftom(this.toFrequency())},t.Time}),e(function(t){return t.TransportTime=function(e,i){if(!(this instanceof t.TransportTime))return new t.TransportTime(e,i);t.Time.call(this,e,i)},t.extend(t.TransportTime,t.Time),t.TransportTime.prototype._now=function(){return t.Transport.seconds},t.TransportTime}),e(function(t){return t.Type={Default:"number",Time:"time",Frequency:"frequency",TransportTime:"transportTime",Ticks:"ticks",NormalRange:"normalRange",AudioRange:"audioRange",Decibels:"db",Interval:"interval",BPM:"bpm",Positive:"positive",Gain:"gain",Cents:"cents",Degrees:"degrees",MIDI:"midi",BarsBeatsSixteenths:"barsBeatsSixteenths",Samples:"samples",Hertz:"hertz",Note:"note",Milliseconds:"milliseconds",Seconds:"seconds",Notation:"notation"},t.prototype.toSeconds=function(e){return t.isNumber(e)?e:t.isUndef(e)?this.now():t.isString(e)?new t.Time(e).toSeconds():e instanceof t.TimeBase?e.toSeconds():void 0},t.prototype.toFrequency=function(e){return t.isNumber(e)?e:t.isString(e)||t.isUndef(e)?new t.Frequency(e).valueOf():e instanceof t.TimeBase?e.toFrequency():void 0},t.prototype.toTicks=function(e){return t.isNumber(e)||t.isString(e)?new t.TransportTime(e).toTicks():t.isUndef(e)?t.Transport.ticks:e instanceof t.TimeBase?e.toTicks():void 0},t}),e(function(t){return t.Param=function(){var e=t.defaults(arguments,["param","units","convert"],t.Param);t.AudioNode.call(this),this._param=this.input=e.param,this.units=e.units,this.convert=e.convert,this.overridden=!1,this._events=new t.Timeline(1e3),t.isDefined(e.value)&&this._param&&(this.value=e.value)},t.extend(t.Param,t.AudioNode),t.Param.defaults={units:t.Type.Default,convert:!0,param:void 0},Object.defineProperty(t.Param.prototype,"value",{get:function(){var t=this.now();return this._toUnits(this.getValueAtTime(t))},set:function(t){this._initialValue=this._fromUnits(t),this.cancelScheduledValues(this.context.currentTime),this.setValueAtTime(t,this.context.currentTime)}}),Object.defineProperty(t.Param.prototype,"minValue",{get:function(){return this.units===t.Type.Time||this.units===t.Type.Frequency||this.units===t.Type.NormalRange||this.units===t.Type.Positive||this.units===t.Type.BPM?0:this.units===t.Type.AudioRange?-1:this.units===t.Type.Decibels?-1/0:this._param.minValue}}),Object.defineProperty(t.Param.prototype,"maxValue",{get:function(){return this.units===t.Type.NormalRange||this.units===t.Type.AudioRange?1:this._param.maxValue}}),t.Param.prototype._fromUnits=function(e){if(!this.convert&&!t.isUndef(this.convert)||this.overridden)return e;switch(this.units){case t.Type.Time:return this.toSeconds(e);case t.Type.Frequency:return this.toFrequency(e);case t.Type.Decibels:return t.dbToGain(e);case t.Type.NormalRange:return Math.min(Math.max(e,0),1);case t.Type.AudioRange:return Math.min(Math.max(e,-1),1);case t.Type.Positive:return Math.max(e,0);default:return e}},t.Param.prototype._toUnits=function(e){if(!this.convert&&!t.isUndef(this.convert))return e;switch(this.units){case t.Type.Decibels:return t.gainToDb(e);default:return e}},t.Param.prototype._minOutput=1e-5,t.Param.AutomationType={Linear:"linearRampToValueAtTime",Exponential:"exponentialRampToValueAtTime",Target:"setTargetAtTime",SetValue:"setValueAtTime"},t.Param.prototype.setValueAtTime=function(e,i){return i=this.toSeconds(i),e=this._fromUnits(e),this._events.add({type:t.Param.AutomationType.SetValue,value:e,time:i}),this._param.setValueAtTime(e,i),this},t.Param.prototype.getValueAtTime=function(e){e=this.toSeconds(e);var i=this._events.getAfter(e),r=this._events.get(e),n=t.defaultArg(this._initialValue,this._param.defaultValue),o=n;if(null===r)o=n;else if(r.type===t.Param.AutomationType.Target){var s,a=this._events.getBefore(r.time);s=null===a?n:a.value,o=this._exponentialApproach(r.time,s,r.value,r.constant,e)}else o=null===i?r.value:i.type===t.Param.AutomationType.Linear?this._linearInterpolate(r.time,r.value,i.time,i.value,e):i.type===t.Param.AutomationType.Exponential?this._exponentialInterpolate(r.time,r.value,i.time,i.value,e):r.value;return o},t.Param.prototype.setRampPoint=function(t){t=this.toSeconds(t);var e=this.getValueAtTime(t);return this.cancelAndHoldAtTime(t),0===e&&(e=this._minOutput),this.setValueAtTime(this._toUnits(e),t),this},t.Param.prototype.linearRampToValueAtTime=function(e,i){return e=this._fromUnits(e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Linear,value:e,time:i}),this._param.linearRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampToValueAtTime=function(e,i){return e=this._fromUnits(e),e=Math.max(this._minOutput,e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Exponential,time:i,value:e}),this._param.exponentialRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.linearRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.linearRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.targetRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialApproachValueAtTime(t,i,e),this},t.Param.prototype.exponentialApproachValueAtTime=function(t,e,i){var r=Math.log(this.toSeconds(i)+1)/Math.log(200);return e=this.toSeconds(e),this.setTargetAtTime(t,e,r)},t.Param.prototype.setTargetAtTime=function(e,i,r){if(e=this._fromUnits(e),r<=0)throw new Error("timeConstant must be greater than 0");return i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Target,value:e,time:i,constant:r}),this._param.setTargetAtTime(e,i,r),this},t.Param.prototype.setValueCurveAtTime=function(e,i,r,n){n=t.defaultArg(n,1),r=this.toSeconds(r),i=this.toSeconds(i),this.setValueAtTime(e[0]*n,i);for(var o=r/(e.length-1),s=1;s=0;)this.emit("tick"),this._currentTime+=this.blockTime;return this._context.startRendering()},t.OfflineContext.prototype.close=function(){return this._context=null,Promise.resolve()},t.OfflineContext}),e(function(t){if(t.supported){var e=navigator.userAgent.toLowerCase();e.includes("safari")&&!e.includes("chrome")&&e.includes("mobile")&&(t.OfflineContext.prototype.createBufferSource=function(){var t=this._context.createBufferSource(),e=t.start;return t.start=function(i){this.setTimeout(function(){e.call(t,i)}.bind(this),0)}.bind(this),t})}}),e(function(t){return t.Gain=function(){var e=t.defaults(arguments,["gain","units"],t.Gain);t.AudioNode.call(this),this.input=this.output=this._gainNode=this.context.createGain(),this.gain=new t.Param({param:this._gainNode.gain,units:e.units,value:e.gain,convert:e.convert}),this._readOnly("gain")},t.extend(t.Gain,t.AudioNode),t.Gain.defaults={gain:1,convert:!0},t.Gain.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._gainNode.disconnect(),this._gainNode=null,this._writable("gain"),this.gain.dispose(),this.gain=null},t.Gain}),e(function(t){if(t.supported&&!AudioContext.prototype.createConstantSource){var e=function(t){this.context=t;for(var e=t.createBuffer(1,128,t.sampleRate),i=e.getChannelData(0),r=0;r0&&(n=(1-s)/(1/n)),"linear"===this._attackCurve)this._sig.linearRampTo(i,n,e);else if("exponential"===this._attackCurve)this._sig.targetRampTo(i,n,e);else if(n>0){this._sig.cancelAndHoldAtTime(e);var a=this._attackCurve;if(n0){var r=this.toSeconds(this.release);if("linear"===this._releaseCurve)this._sig.linearRampTo(0,r,e);else if("exponential"===this._releaseCurve)this._sig.targetRampTo(0,r,e);else{var n=this._releaseCurve;t.isArray(n)&&(this._sig.cancelAndHoldAtTime(e),this._sig.setValueCurveAtTime(n,e,r,i))}}return this},t.Envelope.prototype.getValueAtTime=function(t){return this._sig.getValueAtTime(t)},t.Envelope.prototype.triggerAttackRelease=function(t,e,i){return e=this.toSeconds(e),this.triggerAttack(e,i),this.triggerRelease(e+this.toSeconds(t)),this},t.Envelope.prototype.cancel=function(t){return this._sig.cancelScheduledValues(t),this},t.Envelope.prototype.connect=t.SignalBase.prototype.connect,function(){var e,i,r=[];for(e=0;e<128;e++)r[e]=Math.sin(e/127*(Math.PI/2));var n=[];for(e=0;e<127;e++){i=e/127;var o=Math.sin(i*(2*Math.PI)*6.4-Math.PI/2)+1;n[e]=o/10+.83*i}n[127]=1;var s=[];for(e=0;e<128;e++)s[e]=Math.ceil(e/127*5)/5;var a=[];for(e=0;e<128;e++)i=e/127,a[e]=.5*(1-Math.cos(Math.PI*i));var h=[];for(e=0;e<128;e++){i=e/127;var l=4*Math.pow(i,3)+.2,u=Math.cos(l*Math.PI*2*i);h[e]=Math.abs(u*(1-i))}function c(t){for(var e=new Array(t.length),i=0;i0?a:(-n-s)/o)+i.time}return i?0===i.value?1/0:i.time+(e-i.ticks)/i.value:e/this._initialValue},t.TickSignal.prototype.ticksToTime=function(e,i){return i=this.toSeconds(i),new t.Time(this.getDurationOfTicks(e,i))},t.TickSignal.prototype.timeToTicks=function(e,i){i=this.toSeconds(i),e=this.toSeconds(e);var r=this.getTicksAtTime(i),n=this.getTicksAtTime(i+e);return new t.Ticks(n-r)},t.TickSignal}),e(function(t){return t.TimelineState=function(e){t.Timeline.call(this),this._initial=e},t.extend(t.TimelineState,t.Timeline),t.TimelineState.prototype.getValueAtTime=function(t){var e=this.get(t);return null!==e?e.state:this._initial},t.TimelineState.prototype.setStateAtTime=function(t,e){return this.add({state:t,time:e}),this},t.TimelineState.prototype.getLastState=function(t,e){e=this.toSeconds(e);for(var i=this._search(e);i>=0;i--){var r=this._timeline[i];if(r.state===t)return r}},t.TimelineState.prototype.getNextState=function(t,e){e=this.toSeconds(e);var i=this._search(e);if(-1!==i)for(var r=i;r0&&(this._tickOffset.cancel(i.time),this._state.cancel(i.time))}return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this.setTicksAtTime(0,e),this},t.TickSource.prototype.pause=function(e){return e=this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started&&this._state.setStateAtTime(t.State.Paused,e),this},t.TickSource.prototype.cancel=function(t){return t=this.toSeconds(t),this._state.cancel(t),this._tickOffset.cancel(t),this},t.TickSource.prototype.getTicksAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.ticks,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=this.frequency.getTicksAtTime(e.time)-this.frequency.getTicksAtTime(i)),n=e}.bind(this)),this._state.remove(r),o},Object.defineProperty(t.TickSource.prototype,"ticks",{get:function(){return this.getTicksAtTime(this.now())},set:function(t){this.setTicksAtTime(t,this.now())}}),Object.defineProperty(t.TickSource.prototype,"seconds",{get:function(){return this.getSecondsAtTime(this.now())},set:function(t){var e=this.now(),i=this.frequency.timeToTicks(t,e);this.setTicksAtTime(i,e)}}),t.TickSource.prototype.getSecondsAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.seconds,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=e.time-i),n=e}.bind(this)),this._state.remove(r),o},t.TickSource.prototype.setTicksAtTime=function(t,e){return e=this.toSeconds(e),this._tickOffset.cancel(e),this._tickOffset.add({time:e,ticks:t,seconds:this.frequency.getDurationOfTicks(t,e)}),this},t.TickSource.prototype.getStateAtTime=function(t){return t=this.toSeconds(t),this._state.getValueAtTime(t)},t.TickSource.prototype.getTimeOfTick=function(e,i){i=t.defaultArg(i,this.now());var r=this._tickOffset.get(i),n=this._state.get(i),o=Math.max(r.time,n.time),s=this.frequency.getTicksAtTime(o)+e-r.ticks;return this.frequency.getTimeOfTick(s)},t.TickSource.prototype.forEachTickBetween=function(e,i,r){var n=this._state.get(e);if(this._state.forEachBetween(e,i,function(i){n.state===t.State.Started&&i.state!==t.State.Started&&this.forEachTickBetween(Math.max(n.time,e),i.time-this.sampleTime,r),n=i}.bind(this)),e=Math.max(n.time,e),n.state===t.State.Started&&this._state){var o=this.frequency.getTicksAtTime(e),s=(o-this.frequency.getTicksAtTime(n.time))%1;0!==s&&(s=1-s);for(var a=this.frequency.getTimeOfTick(o+s),h=null;a0)if(null===t.left.right)(e=t.left).right=t.right,i=e;else{for(e=t.left.right;null!==e.right;)e=e.right;e.parent.right=e.left,i=e.parent,e.left=t.left,e.right=t.right}else if(null===t.right.left)(e=t.right).left=t.left,i=e;else{for(e=t.right.left;null!==e.left;)e=e.left;e.parent=e.parent,e.parent.left=e.right,i=e.parent,e.left=t.left,e.right=t.right}null!==t.parent?t.isLeftChild()?t.parent.left=e:t.parent.right=e:this._setRoot(e),this._rebalance(i)}t.dispose()},t.IntervalTimeline.prototype._rotateLeft=function(t){var e=t.parent,i=t.isLeftChild(),r=t.right;t.right=r.left,r.left=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rotateRight=function(t){var e=t.parent,i=t.isLeftChild(),r=t.left;t.left=r.right,r.right=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rebalance=function(t){var e=t.getBalance();e>1?t.left.getBalance()<0?this._rotateLeft(t.left):this._rotateRight(t):e<-1&&(t.right.getBalance()>0?this._rotateRight(t.right):this._rotateLeft(t))},t.IntervalTimeline.prototype.get=function(t){if(null!==this._root){var e=[];if(this._root.search(t,e),e.length>0){for(var i=e[0],r=1;ri.low&&(i=e[r]);return i.event}}return null},t.IntervalTimeline.prototype.forEach=function(t){if(null!==this._root){var e=[];this._root.traverse(function(t){e.push(t)});for(var i=0;i=0;r--){var n=i[r].event;n&&e(n)}}return this},t.IntervalTimeline.prototype.forEachFrom=function(t,e){if(null!==this._root){var i=[];this._root.searchAfter(t,i);for(var r=i.length-1;r>=0;r--)e(i[r].event)}return this},t.IntervalTimeline.prototype.dispose=function(){var t=[];null!==this._root&&this._root.traverse(function(e){t.push(e)});for(var e=0;ethis.max||(null!==this.left&&this.left.search(t,e),this.low<=t&&this.high>t&&e.push(this),this.low>t||null!==this.right&&this.right.search(t,e))},e.prototype.searchAfter=function(t,e){this.low>=t&&(e.push(this),null!==this.left&&this.left.searchAfter(t,e)),null!==this.right&&this.right.searchAfter(t,e)},e.prototype.traverse=function(t){t(this),null!==this.left&&this.left.traverse(t),null!==this.right&&this.right.traverse(t)},e.prototype.updateHeight=function(){null!==this.left&&null!==this.right?this.height=Math.max(this.left.height,this.right.height)+1:null!==this.right?this.height=this.right.height+1:null!==this.left?this.height=this.left.height+1:this.height=0},e.prototype.updateMax=function(){this.max=this.high,null!==this.left&&(this.max=Math.max(this.max,this.left.max)),null!==this.right&&(this.max=Math.max(this.max,this.right.max))},e.prototype.getBalance=function(){var t=0;return null!==this.left&&null!==this.right?t=this.left.height-this.right.height:null!==this.left?t=this.left.height+1:null!==this.right&&(t=-(this.right.height+1)),t},e.prototype.isLeftChild=function(){return null!==this.parent&&this.parent.left===this},Object.defineProperty(e.prototype,"left",{get:function(){return this._left},set:function(t){this._left=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),Object.defineProperty(e.prototype,"right",{get:function(){return this._right},set:function(t){this._right=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),e.prototype.dispose=function(){this.parent=null,this._left=null,this._right=null,this.event=null},t.IntervalTimeline}),e(function(t){return t.Ticks=function(e,i){if(!(this instanceof t.Ticks))return new t.Ticks(e,i);t.TransportTime.call(this,e,i)},t.extend(t.Ticks,t.TransportTime),t.Ticks.prototype._defaultUnits="i",t.Ticks.prototype._now=function(){return t.Transport.ticks},t.Ticks.prototype._beatsToUnits=function(t){return this._getPPQ()*t},t.Ticks.prototype._secondsToUnits=function(t){return t/(60/this._getBpm())*this._getPPQ()},t.Ticks.prototype._ticksToUnits=function(t){return t},t.Ticks.prototype.toTicks=function(){return this.valueOf()},t.Ticks.prototype.toSeconds=function(){return this.valueOf()/this._getPPQ()*(60/this._getBpm())},t.Ticks}),e(function(t){return t.TransportEvent=function(e,i){i=t.defaultArg(i,t.TransportEvent.defaults),t.call(this),this.Transport=e,this.id=t.TransportEvent._eventId++,this.time=t.Ticks(i.time),this.callback=i.callback,this._once=i.once},t.extend(t.TransportEvent),t.TransportEvent.defaults={once:!1,callback:t.noOp},t.TransportEvent._eventId=0,t.TransportEvent.prototype.invoke=function(t){this.callback&&(this.callback(t),this._once&&this.Transport&&this.Transport.clear(this.id))},t.TransportEvent.prototype.dispose=function(){return t.prototype.dispose.call(this),this.Transport=null,this.callback=null,this.time=null,this},t.TransportEvent}),e(function(t){return t.TransportRepeatEvent=function(e,i){t.TransportEvent.call(this,e,i),i=t.defaultArg(i,t.TransportRepeatEvent.defaults),this.duration=t.Ticks(i.duration),this._interval=t.Ticks(i.interval),this._currentId=-1,this._nextId=-1,this._nextTick=this.time,this._boundRestart=this._restart.bind(this),this.Transport.on("start loopStart",this._boundRestart),this._restart()},t.extend(t.TransportRepeatEvent,t.TransportEvent),t.TransportRepeatEvent.defaults={duration:1/0,interval:1},t.TransportRepeatEvent.prototype.invoke=function(e){this._createEvents(e),t.TransportEvent.prototype.invoke.call(this,e)},t.TransportRepeatEvent.prototype._createEvents=function(e){var i=this.Transport.getTicksAtTime(e);i>=this.time&&i>=this._nextTick&&this._nextTick+this._intervalthis.time&&(this._nextTick=this.time+Math.ceil((i-this.time)/this._interval)*this._interval),this._currentId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick)),this._nextTick+=this._interval,this._nextId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick))},t.TransportRepeatEvent.prototype.dispose=function(){return this.Transport.clear(this._currentId),this.Transport.clear(this._nextId),this.Transport.off("start loopStart",this._boundRestart),this._boundCreateEvents=null,t.TransportEvent.prototype.dispose.call(this),this.duration=null,this._interval=null,this},t.TransportRepeatEvent}),e(function(t){t.Transport=function(){t.Emitter.call(this),t.getContext(function(){this.loop=!1,this._loopStart=0,this._loopEnd=0,this._ppq=e.defaults.PPQ,this._clock=new t.Clock({callback:this._processTick.bind(this),frequency:0}),this._bindClockEvents(),this.bpm=this._clock.frequency,this.bpm._toUnits=this._toUnits.bind(this),this.bpm._fromUnits=this._fromUnits.bind(this),this.bpm.units=t.Type.BPM,this.bpm.value=e.defaults.bpm,this._readOnly("bpm"),this._timeSignature=e.defaults.timeSignature,this._scheduledEvents={},this._timeline=new t.Timeline,this._repeatedEvents=new t.IntervalTimeline,this._syncedSignals=[],this._swingTicks=e.defaults.PPQ/2,this._swingAmount=0}.bind(this))},t.extend(t.Transport,t.Emitter),t.Transport.defaults={bpm:120,swing:0,swingSubdivision:"8n",timeSignature:4,loopStart:0,loopEnd:"4m",PPQ:192},t.Transport.prototype._processTick=function(e,i){if(this._swingAmount>0&&i%this._ppq!=0&&i%(2*this._swingTicks)!=0){var r=i%(2*this._swingTicks)/(2*this._swingTicks),n=Math.sin(r*Math.PI)*this._swingAmount;e+=t.Ticks(2*this._swingTicks/3).toSeconds()*n}this.loop&&i>=this._loopEnd&&(this.emit("loopEnd",e),this._clock.setTicksAtTime(this._loopStart,e),i=this._loopStart,this.emit("loopStart",e,this._clock.getSecondsAtTime(e)),this.emit("loop",e)),this._timeline.forEachAtTime(i,function(t){t.invoke(e)})},t.Transport.prototype.schedule=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e});return this._addEvent(r,this._timeline)},t.Transport.prototype.scheduleRepeat=function(e,i,r,n){var o=new t.TransportRepeatEvent(this,{callback:e,interval:t.Time(i),time:t.TransportTime(r),duration:t.Time(t.defaultArg(n,1/0))});return this._addEvent(o,this._repeatedEvents)},t.Transport.prototype.scheduleOnce=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e,once:!0});return this._addEvent(r,this._timeline)},t.Transport.prototype.clear=function(t){if(this._scheduledEvents.hasOwnProperty(t)){var e=this._scheduledEvents[t.toString()];e.timeline.remove(e.event),e.event.dispose(),delete this._scheduledEvents[t.toString()]}return this},t.Transport.prototype._addEvent=function(t,e){return this._scheduledEvents[t.id.toString()]={event:t,timeline:e},e.add(t),t.id},t.Transport.prototype.cancel=function(e){return e=t.defaultArg(e,0),e=this.toTicks(e),this._timeline.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this._repeatedEvents.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this},t.Transport.prototype._bindClockEvents=function(){this._clock.on("start",function(e,i){i=t.Ticks(i).toSeconds(),this.emit("start",e,i)}.bind(this)),this._clock.on("stop",function(t){this.emit("stop",t)}.bind(this)),this._clock.on("pause",function(t){this.emit("pause",t)}.bind(this))},Object.defineProperty(t.Transport.prototype,"state",{get:function(){return this._clock.getStateAtTime(this.now())}}),t.Transport.prototype.start=function(e,i){return t.isDefined(i)&&(i=this.toTicks(i)),this._clock.start(e,i),this},t.Transport.prototype.stop=function(t){return this._clock.stop(t),this},t.Transport.prototype.pause=function(t){return this._clock.pause(t),this},t.Transport.prototype.toggle=function(e){return e=this.toSeconds(e),this._clock.getStateAtTime(e)!==t.State.Started?this.start(e):this.stop(e),this},Object.defineProperty(t.Transport.prototype,"timeSignature",{get:function(){return this._timeSignature},set:function(e){t.isArray(e)&&(e=e[0]/e[1]*4),this._timeSignature=e}}),Object.defineProperty(t.Transport.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t)}}),t.Transport.prototype.setLoopPoints=function(t,e){return this.loopStart=t,this.loopEnd=e,this},Object.defineProperty(t.Transport.prototype,"swing",{get:function(){return this._swingAmount},set:function(t){this._swingAmount=t}}),Object.defineProperty(t.Transport.prototype,"swingSubdivision",{get:function(){return t.Ticks(this._swingTicks).toNotation()},set:function(t){this._swingTicks=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"position",{get:function(){var e=this.now(),i=this._clock.getTicksAtTime(e);return t.Ticks(i).toBarsBeatsSixteenths()},set:function(t){var e=this.toTicks(t);this.ticks=e}}),Object.defineProperty(t.Transport.prototype,"seconds",{get:function(){return this._clock.seconds},set:function(t){var e=this.now(),i=this.bpm.timeToTicks(t,e);this.ticks=i}}),Object.defineProperty(t.Transport.prototype,"progress",{get:function(){if(this.loop){var t=this.now();return(this._clock.getTicksAtTime(t)-this._loopStart)/(this._loopEnd-this._loopStart)}return 0}}),Object.defineProperty(t.Transport.prototype,"ticks",{get:function(){return this._clock.ticks},set:function(e){if(this._clock.ticks!==e){var i=this.now();this.state===t.State.Started?(this.emit("stop",i),this._clock.setTicksAtTime(e,i),this.emit("start",i,this.seconds)):this._clock.setTicksAtTime(e,i)}}}),t.Transport.prototype.getTicksAtTime=function(t){return Math.round(this._clock.getTicksAtTime(t))},t.Transport.prototype.getSecondsAtTime=function(t){return this._clock.getSecondsAtTime(t)},Object.defineProperty(t.Transport.prototype,"PPQ",{get:function(){return this._ppq},set:function(t){var e=this.bpm.value;this._ppq=t,this.bpm.value=e}}),t.Transport.prototype._fromUnits=function(t){return 1/(60/t/this.PPQ)},t.Transport.prototype._toUnits=function(t){return t/this.PPQ*60},t.Transport.prototype.nextSubdivision=function(e){if(e=this.toTicks(e),this.state!==t.State.Started)return 0;var i=this.now(),r=e-this.getTicksAtTime(i)%e;return this._clock.nextTickTime(r,i)},t.Transport.prototype.syncSignal=function(e,i){if(!i){var r=this.now();i=0!==e.getValueAtTime(r)?e.getValueAtTime(r)/this.bpm.getValueAtTime(r):0}var n=new t.Gain(i);return this.bpm.chain(n,e._param),this._syncedSignals.push({ratio:n,signal:e,initial:e.value}),e.value=0,this},t.Transport.prototype.unsyncSignal=function(t){for(var e=this._syncedSignals.length-1;e>=0;e--){var i=this._syncedSignals[e];i.signal===t&&(i.ratio.dispose(),i.signal.value=i.initial,this._syncedSignals.splice(e,1))}return this},t.Transport.prototype.dispose=function(){return t.Emitter.prototype.dispose.call(this),this._clock.dispose(),this._clock=null,this._writable("bpm"),this.bpm=null,this._timeline.dispose(),this._timeline=null,this._repeatedEvents.dispose(),this._repeatedEvents=null,this};var e=t.Transport;return t.Transport=new e,t.Context.on("init",function(i){i.Transport instanceof e?t.Transport=i.Transport:t.Transport=new e,i.Transport=t.Transport}),t.Context.on("close",function(t){t.Transport instanceof e&&t.Transport.dispose()}),t.Transport}),e(function(t){return t.Volume=function(){var e=t.defaults(arguments,["volume"],t.Volume);t.AudioNode.call(this),this.output=this.input=new t.Gain(e.volume,t.Type.Decibels),this._unmutedVolume=e.volume,this.volume=this.output.gain,this._readOnly("volume"),this.mute=e.mute},t.extend(t.Volume,t.AudioNode),t.Volume.defaults={volume:0,mute:!1},Object.defineProperty(t.Volume.prototype,"mute",{get:function(){return this.volume.value===-1/0},set:function(t){!this.mute&&t?(this._unmutedVolume=this.volume.value,this.volume.value=-1/0):this.mute&&!t&&(this.volume.value=this._unmutedVolume)}}),t.Volume.prototype.dispose=function(){return this.input.dispose(),t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this.volume.dispose(),this.volume=null,this},t.Volume}),e(function(t){t.Master=function(){t.AudioNode.call(this),t.getContext(function(){this.createInsOuts(1,0),this._volume=this.output=new t.Volume,this.volume=this._volume.volume,this._readOnly("volume"),this.input.chain(this.output,this.context.destination)}.bind(this))},t.extend(t.Master,t.AudioNode),t.Master.defaults={volume:0,mute:!1},Object.defineProperty(t.Master.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Master.prototype.chain=function(){this.input.disconnect(),this.input.chain.apply(this.input,arguments),arguments[arguments.length-1].connect(this.output)},t.Master.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null},t.AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this},window.AudioNode&&(AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this});var e=t.Master;return t.Master=new e,t.Context.on("init",function(i){i.Master instanceof e?t.Master=i.Master:t.Master=new e,i.Master=t.Master}),t.Context.on("close",function(t){t.Master instanceof e&&t.Master.dispose()}),t.Master}),e(function(t){return t.Source=function(e){e=t.defaultArg(e,t.Source.defaults),t.AudioNode.call(this),this._volume=this.output=new t.Volume(e.volume),this.volume=this._volume.volume,this._readOnly("volume"),this._state=new t.TimelineState(t.State.Stopped),this._state.memory=100,this._synced=!1,this._scheduled=[],this._volume.output.output.channelCount=2,this._volume.output.output.channelCountMode="explicit",this.mute=e.mute},t.extend(t.Source,t.AudioNode),t.Source.defaults={volume:0,mute:!1},Object.defineProperty(t.Source.prototype,"state",{get:function(){return this._synced?t.Transport.state===t.State.Started?this._state.getValueAtTime(t.Transport.seconds):t.State.Stopped:this._state.getValueAtTime(this.now())}}),Object.defineProperty(t.Source.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Source.prototype._start=t.noOp,t.Source.prototype.restart=t.noOp,t.Source.prototype._stop=t.noOp,t.Source.prototype.start=function(e,i,r){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started)this._state.cancel(e),this._state.setStateAtTime(t.State.Started,e),this.restart(e,i,r);else if(this._state.setStateAtTime(t.State.Started,e),this._synced){var n=this._state.get(e);n.offset=t.defaultArg(i,0),n.duration=r;var o=t.Transport.schedule(function(t){this._start(t,i,r)}.bind(this),e);this._scheduled.push(o),t.Transport.state===t.State.Started&&this._syncedStart(this.now(),t.Transport.seconds)}else this._start.apply(this,arguments);return this},t.Source.prototype.stop=function(e){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._synced){var i=t.Transport.schedule(this._stop.bind(this),e);this._scheduled.push(i)}else this._stop.apply(this,arguments);return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this},t.Source.prototype.sync=function(){return this._synced=!0,this._syncedStart=function(e,i){if(i>0){var r=this._state.get(i);if(r&&r.state===t.State.Started&&r.time!==i){var n,o=i-this.toSeconds(r.time);r.duration&&(n=this.toSeconds(r.duration)-o),this._start(e,this.toSeconds(r.offset)+o,n)}}}.bind(this),this._syncedStop=function(e){var i=t.Transport.getSecondsAtTime(Math.max(e-this.sampleTime,0));this._state.getValueAtTime(i)===t.State.Started&&this._stop(e)}.bind(this),t.Transport.on("start loopStart",this._syncedStart),t.Transport.on("stop pause loopEnd",this._syncedStop),this},t.Source.prototype.unsync=function(){this._synced&&(t.Transport.off("stop pause loopEnd",this._syncedStop),t.Transport.off("start loopStart",this._syncedStart)),this._synced=!1;for(var e=0;e0}}),Object.defineProperty(t.Buffer.prototype,"duration",{get:function(){return this._buffer?this._buffer.duration:0}}),Object.defineProperty(t.Buffer.prototype,"length",{get:function(){return this._buffer?this._buffer.length:0}}),Object.defineProperty(t.Buffer.prototype,"numberOfChannels",{get:function(){return this._buffer?this._buffer.numberOfChannels:0}}),t.Buffer.prototype.fromArray=function(t){var e=t[0].length>0,i=e?t.length:1,r=e?t[0].length:t.length,n=this.context.createBuffer(i,r,this.context.sampleRate);e||1!==i||(t=[t]);for(var o=0;o=this._startTime&&(-1===this._stopTime||e<=this._stopTime)?t.State.Started:t.State.Stopped},t.OscillatorNode.prototype.start=function(t){if(-1!==this._startTime)throw new Error("cannot call OscillatorNode.start more than once");this._startTime=this.toSeconds(t),this._oscillator.start(this._startTime);var e=this.context.currentTime;return this._gainNode.gain.cancelScheduledValues(e),this._gainNode.gain.setValueAtTime(0,e),this._gainNode.gain.setValueAtTime(1,this._startTime),this},t.OscillatorNode.prototype.setPeriodicWave=function(t){return this._oscillator.setPeriodicWave(t),this},t.OscillatorNode.prototype.stop=function(t){return this.cancelStop(),this._stopTime=this.toSeconds(t),this._gainNode.gain.setValueAtTime(0,this._stopTime),this.context.clearTimeout(this._timeout),this._timeout=this.context.setTimeout(function(){this._oscillator.stop(this.now()),this.onended()}.bind(this),this._stopTime-this.now()),this},t.OscillatorNode.prototype.cancelStop=function(){return-1!==this._startTime&&(this._gainNode.gain.cancelScheduledValues(this._startTime+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime)),this.context.clearTimeout(this._timeout),this._stopTime=-1),this},Object.defineProperty(t.OscillatorNode.prototype,"type",{get:function(){return this._oscillator.type},set:function(t){this._oscillator.type=t}}),t.OscillatorNode.prototype.dispose=function(){return this.context.clearTimeout(this._timeout),t.AudioNode.prototype.dispose.call(this),this.onended=null,this._oscillator.disconnect(),this._oscillator=null,this._gainNode.dispose(),this._gainNode=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this},t.OscillatorNode}),e(function(t){return t.Oscillator=function(){var e=t.defaults(arguments,["frequency","type"],t.Oscillator);t.Source.call(this,e),this._oscillator=null,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this._wave=null,this._partials=t.defaultArg(e.partials,[1]),this._phase=e.phase,this._type=null,this.type=e.type,this.phase=this._phase,this._readOnly(["frequency","detune"])},t.extend(t.Oscillator,t.Source),t.Oscillator.defaults={type:"sine",frequency:440,detune:0,phase:0,partials:[]},t.Oscillator.Type={Sine:"sine",Triangle:"triangle",Sawtooth:"sawtooth",Square:"square",Custom:"custom"},t.Oscillator.prototype._start=function(e){this._oscillator=new t.OscillatorNode,this._wave?this._oscillator.setPeriodicWave(this._wave):this._oscillator.type=this._type,this._oscillator.connect(this.output),this.frequency.connect(this._oscillator.frequency),this.detune.connect(this._oscillator.detune),e=this.toSeconds(e),this._oscillator.start(e)},t.Oscillator.prototype._stop=function(t){return this._oscillator&&(t=this.toSeconds(t),this._oscillator.stop(t)),this},t.Oscillator.prototype.restart=function(t){return this._oscillator.cancelStop(),this._state.cancel(this.toSeconds(t)),this},t.Oscillator.prototype.syncFrequency=function(){return t.Transport.syncSignal(this.frequency),this},t.Oscillator.prototype.unsyncFrequency=function(){return t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Oscillator.prototype,"type",{get:function(){return this._type},set:function(e){var i=[t.Oscillator.Type.Sine,t.Oscillator.Type.Square,t.Oscillator.Type.Triangle,t.Oscillator.Type.Sawtooth].includes(e);if(0===this._phase&&i)this._wave=null,null!==this._oscillator&&this._oscillator.type;else{var r=this._getRealImaginary(e,this._phase),n=this.context.createPeriodicWave(r[0],r[1]);this._wave=n,null!==this._oscillator&&this._oscillator.setPeriodicWave(this._wave)}this._type=e}}),t.Oscillator.prototype._getRealImaginary=function(e,i){var r=2048,n=new Float32Array(r),o=new Float32Array(r),s=1;if(e===t.Oscillator.Type.Custom)r=s=this._partials.length+1;else{var a=/^(sine|triangle|square|sawtooth)(\d+)$/.exec(e);a&&(s=parseInt(a[2])+1,e=a[1],r=s=Math.max(s,2))}for(var h=1;h>1&1?-1:1):0;break;case t.Oscillator.Type.Custom:l=this._partials[h-1];break;default:throw new TypeError("Tone.Oscillator: invalid type: "+e)}0!==l?(n[h]=-l*Math.sin(i*h),o[h]=l*Math.cos(i*h)):(n[h]=0,o[h]=0)}return[n,o]},t.Oscillator.prototype._inverseFFT=function(t,e,i){for(var r=0,n=t.length,o=0;on&&r=this.values.length&&(this.index=0)):e===t.CtrlPattern.Type.Down?(this.index--,this.index<0&&(this.index=this.values.length-1)):e===t.CtrlPattern.Type.UpDown||e===t.CtrlPattern.Type.DownUp?(this._direction===t.CtrlPattern.Type.Up?this.index++:this.index--,this.index<0?(this.index=1,this._direction=t.CtrlPattern.Type.Up):this.index>=this.values.length&&(this.index=this.values.length-2,this._direction=t.CtrlPattern.Type.Down)):e===t.CtrlPattern.Type.Random?this.index=Math.floor(Math.random()*this.values.length):e===t.CtrlPattern.Type.RandomWalk?Math.random()<.5?(this.index--,this.index=Math.max(this.index,0)):(this.index++,this.index=Math.min(this.index,this.values.length-1)):e===t.CtrlPattern.Type.RandomOnce?(this.index++,this.index>=this.values.length&&(this.index=0,this._shuffleValues())):e===t.CtrlPattern.Type.AlternateUp?(this._direction===t.CtrlPattern.Type.Up?(this.index+=2,this._direction=t.CtrlPattern.Type.Down):(this.index-=1,this._direction=t.CtrlPattern.Type.Up),this.index>=this.values.length&&(this.index=0,this._direction=t.CtrlPattern.Type.Up)):e===t.CtrlPattern.Type.AlternateDown&&(this._direction===t.CtrlPattern.Type.Up?(this.index+=1,this._direction=t.CtrlPattern.Type.Down):(this.index-=2,this._direction=t.CtrlPattern.Type.Up),this.index<0&&(this.index=this.values.length-1,this._direction=t.CtrlPattern.Type.Down)),this.value},t.CtrlPattern.prototype._shuffleValues=function(){var t=[];this._shuffled=[];for(var e=0;e0;){var i=t.splice(Math.floor(t.length*Math.random()),1);this._shuffled.push(i[0])}},t.CtrlPattern.prototype.dispose=function(){this._shuffled=null,this.values=null},t.CtrlPattern}),e(function(t){return t.CtrlRandom=function(){var e=t.defaults(arguments,["min","max"],t.CtrlRandom);t.call(this),this.min=e.min,this.max=e.max,this.integer=e.integer},t.extend(t.CtrlRandom),t.CtrlRandom.defaults={min:0,max:1,integer:!1},Object.defineProperty(t.CtrlRandom.prototype,"value",{get:function(){var t=this.toSeconds(this.min),e=this.toSeconds(this.max),i=Math.random(),r=i*t+(1-i)*e;return this.integer&&(r=Math.floor(r)),r}}),t.CtrlRandom}),e(function(t){return t.Buffers=function(e){var i=Array.prototype.slice.call(arguments);i.shift();var r=t.defaults(i,["onload","baseUrl"],t.Buffers);for(var n in t.call(this),this._buffers={},this.baseUrl=r.baseUrl,this._loadingCount=0,e)this._loadingCount++,this.add(n,e[n],this._bufferLoaded.bind(this,r.onload))},t.extend(t.Buffers),t.Buffers.defaults={onload:t.noOp,baseUrl:""},t.Buffers.prototype.has=function(t){return this._buffers.hasOwnProperty(t)},t.Buffers.prototype.get=function(t){if(this.has(t))return this._buffers[t];throw new Error("Tone.Buffers: no buffer named "+t)},t.Buffers.prototype._bufferLoaded=function(t){this._loadingCount--,0===this._loadingCount&&t&&t(this)},Object.defineProperty(t.Buffers.prototype,"loaded",{get:function(){var t=!0;for(var e in this._buffers){var i=this.get(e);t=t&&i.loaded}return t}}),t.Buffers.prototype.add=function(e,i,r){return r=t.defaultArg(r,t.noOp),i instanceof t.Buffer?(this._buffers[e]=i,r(this)):i instanceof AudioBuffer?(this._buffers[e]=new t.Buffer(i),r(this)):t.isString(i)&&(this._buffers[e]=new t.Buffer(this.baseUrl+i,r)),this},t.Buffers.prototype.dispose=function(){for(var e in t.prototype.dispose.call(this),this._buffers)this._buffers[e].dispose();return this._buffers=null,this},t.Buffers}),e(function(t){var e={};return t.prototype.send=function(i,r){e.hasOwnProperty(i)||(e[i]=this.context.createGain()),r=t.defaultArg(r,0);var n=new t.Gain(r,t.Type.Decibels);return this.connect(n),n.connect(e[i]),n},t.prototype.receive=function(t,i){return e.hasOwnProperty(t)||(e[t]=this.context.createGain()),e[t].connect(this,0,i),this},t.Context.on("init",function(t){t.Buses?e=t.Buses:(e={},t.Buses=e)}),t}),e(function(t){return t.Draw=function(){t.call(this),this._events=new t.Timeline,this.expiration=.25,this.anticipation=.008,this._boundDrawLoop=this._drawLoop.bind(this)},t.extend(t.Draw),t.Draw.prototype.schedule=function(t,e){return this._events.add({callback:t,time:this.toSeconds(e)}),1===this._events.length&&requestAnimationFrame(this._boundDrawLoop),this},t.Draw.prototype.cancel=function(t){return this._events.cancel(this.toSeconds(t)),this},t.Draw.prototype._drawLoop=function(){for(var e=t.now();this._events.length&&this._events.peek().time-this.anticipation<=e;){var i=this._events.shift();e-i.time<=this.expiration&&i.callback()}this._events.length>0&&requestAnimationFrame(this._boundDrawLoop)},t.Draw=new t.Draw,t.Draw}),e(function(t){t.Listener=function(){t.call(this),this._orientation=[0,0,0,0,0,0],this._position=[0,0,0],t.getContext(function(){this.set(e.defaults)}.bind(this))},t.extend(t.Listener),t.Listener.defaults={positionX:0,positionY:0,positionZ:0,forwardX:0,forwardY:0,forwardZ:1,upX:0,upY:1,upZ:0},t.Listener.prototype._rampTimeConstant=.01,t.Listener.prototype.setPosition=function(t,e,i){if(this.context.listener.positionX){var r=this.now();this.context.listener.positionX.setTargetAtTime(t,r,this._rampTimeConstant),this.context.listener.positionY.setTargetAtTime(e,r,this._rampTimeConstant),this.context.listener.positionZ.setTargetAtTime(i,r,this._rampTimeConstant)}else this.context.listener.setPosition(t,e,i);return this._position=Array.prototype.slice.call(arguments),this},t.Listener.prototype.setOrientation=function(t,e,i,r,n,o){if(this.context.listener.forwardX){var s=this.now();this.context.listener.forwardX.setTargetAtTime(t,s,this._rampTimeConstant),this.context.listener.forwardY.setTargetAtTime(e,s,this._rampTimeConstant),this.context.listener.forwardZ.setTargetAtTime(i,s,this._rampTimeConstant),this.context.listener.upX.setTargetAtTime(r,s,this._rampTimeConstant),this.context.listener.upY.setTargetAtTime(n,s,this._rampTimeConstant),this.context.listener.upZ.setTargetAtTime(o,s,this._rampTimeConstant)}else this.context.listener.setOrientation(t,e,i,r,n,o);return this._orientation=Array.prototype.slice.call(arguments),this},Object.defineProperty(t.Listener.prototype,"positionX",{set:function(t){this._position[0]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[0]}}),Object.defineProperty(t.Listener.prototype,"positionY",{set:function(t){this._position[1]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[1]}}),Object.defineProperty(t.Listener.prototype,"positionZ",{set:function(t){this._position[2]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[2]}}),Object.defineProperty(t.Listener.prototype,"forwardX",{set:function(t){this._orientation[0]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[0]}}),Object.defineProperty(t.Listener.prototype,"forwardY",{set:function(t){this._orientation[1]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[1]}}),Object.defineProperty(t.Listener.prototype,"forwardZ",{set:function(t){this._orientation[2]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[2]}}),Object.defineProperty(t.Listener.prototype,"upX",{set:function(t){this._orientation[3]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[3]}}),Object.defineProperty(t.Listener.prototype,"upY",{set:function(t){this._orientation[4]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[4]}}),Object.defineProperty(t.Listener.prototype,"upZ",{set:function(t){this._orientation[5]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[5]}}),t.Listener.prototype.dispose=function(){return this._orientation=null,this._position=null,this};var e=t.Listener;return t.Listener=new e,t.Context.on("init",function(i){i.Listener instanceof e?t.Listener=i.Listener:t.Listener=new e,i.Listener=t.Listener}),t.Listener}),e(function(t){return t.Offline=function(e,i){var r,n=t.context.sampleRate,o=t.context,s=function e(i,r,n,o){o=t.defaultArg(o,0);var s=new t.OfflineContext(2,r,n);t.context=s;var a=i(t.Transport);return s.currentTime>0&&o<1e3?e(i,r,n,++o):{response:a,context:s}}(e,i,n),a=s.response,h=s.context;return r=a instanceof Promise?a.then(function(){return h.render()}):h.render(),t.context=o,r.then(function(e){return new t.Buffer(e)})},t.Offline}),e(function(t){return t.Effect=function(){var e=t.defaults(arguments,["wet"],t.Effect);t.AudioNode.call(this),this.createInsOuts(1,1),this._dryWet=new t.CrossFade(e.wet),this.wet=this._dryWet.fade,this.effectSend=new t.Gain,this.effectReturn=new t.Gain,this.input.connect(this._dryWet.a),this.input.connect(this.effectSend),this.effectReturn.connect(this._dryWet.b),this._dryWet.connect(this.output),this._readOnly(["wet"])},t.extend(t.Effect,t.AudioNode),t.Effect.defaults={wet:1},t.Effect.prototype.connectEffect=function(t){return this.effectSend.chain(t,this.effectReturn),this},t.Effect.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this._dryWet.dispose(),this._dryWet=null,this.effectSend.dispose(),this.effectSend=null,this.effectReturn.dispose(),this.effectReturn=null,this._writable(["wet"]),this.wet=null,this},t.Effect}),e(function(t){return t.AutoFilter=function(){var e=t.defaults(arguments,["frequency","baseFrequency","octaves"],t.AutoFilter);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth}),this.depth=this._lfo.amplitude,this.frequency=this._lfo.frequency,this.filter=new t.Filter(e.filter),this._octaves=0,this.connectEffect(this.filter),this._lfo.connect(this.filter.frequency),this.type=e.type,this._readOnly(["frequency","depth"]),this.octaves=e.octaves,this.baseFrequency=e.baseFrequency},t.extend(t.AutoFilter,t.Effect),t.AutoFilter.defaults={frequency:1,type:"sine",depth:1,baseFrequency:200,octaves:2.6,filter:{type:"lowpass",rolloff:-12,Q:1}},t.AutoFilter.prototype.start=function(t){return this._lfo.start(t),this},t.AutoFilter.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoFilter.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoFilter.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoFilter.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),Object.defineProperty(t.AutoFilter.prototype,"baseFrequency",{get:function(){return this._lfo.min},set:function(t){this._lfo.min=this.toFrequency(t),this.octaves=this._octaves}}),Object.defineProperty(t.AutoFilter.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._lfo.max=this.baseFrequency*Math.pow(2,t)}}),t.AutoFilter.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this.filter.dispose(),this.filter=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null,this},t.AutoFilter}),e(function(t){return t.AutoPanner=function(){var e=t.defaults(arguments,["frequency"],t.AutoPanner);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth,min:-1,max:1}),this.depth=this._lfo.amplitude,this._panner=new t.Panner,this.frequency=this._lfo.frequency,this.connectEffect(this._panner),this._lfo.connect(this._panner.pan),this.type=e.type,this._readOnly(["depth","frequency"])},t.extend(t.AutoPanner,t.Effect),t.AutoPanner.defaults={frequency:1,type:"sine",depth:1},t.AutoPanner.prototype.start=function(t){return this._lfo.start(t),this},t.AutoPanner.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoPanner.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoPanner.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoPanner.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.AutoPanner.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this._panner.dispose(),this._panner=null,this._writable(["depth","frequency"]),this.frequency=null,this.depth=null,this},t.AutoPanner}),e(function(t){return t.AutoWah=function(){var e=t.defaults(arguments,["baseFrequency","octaves","sensitivity"],t.AutoWah);t.Effect.call(this,e),this.follower=new t.Follower(e.follower),this._sweepRange=new t.ScaleExp(0,1,.5),this._baseFrequency=e.baseFrequency,this._octaves=e.octaves,this._inputBoost=new t.Gain,this._bandpass=new t.Filter({rolloff:-48,frequency:0,Q:e.Q}),this._peaking=new t.Filter(0,"peaking"),this._peaking.gain.value=e.gain,this.gain=this._peaking.gain,this.Q=this._bandpass.Q,this.effectSend.chain(this._inputBoost,this.follower,this._sweepRange),this._sweepRange.connect(this._bandpass.frequency),this._sweepRange.connect(this._peaking.frequency),this.effectSend.chain(this._bandpass,this._peaking,this.effectReturn),this._setSweepRange(),this.sensitivity=e.sensitivity,this._readOnly(["gain","Q"])},t.extend(t.AutoWah,t.Effect),t.AutoWah.defaults={baseFrequency:100,octaves:6,sensitivity:0,Q:2,gain:2,follower:{attack:.3,release:.5}},Object.defineProperty(t.AutoWah.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"baseFrequency",{get:function(){return this._baseFrequency},set:function(t){this._baseFrequency=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"sensitivity",{get:function(){return t.gainToDb(1/this._inputBoost.gain.value)},set:function(e){this._inputBoost.gain.value=1/t.dbToGain(e)}}),t.AutoWah.prototype._setSweepRange=function(){this._sweepRange.min=this._baseFrequency,this._sweepRange.max=Math.min(this._baseFrequency*Math.pow(2,this._octaves),this.context.sampleRate/2)},t.AutoWah.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this.follower.dispose(),this.follower=null,this._sweepRange.dispose(),this._sweepRange=null,this._bandpass.dispose(),this._bandpass=null,this._peaking.dispose(),this._peaking=null,this._inputBoost.dispose(),this._inputBoost=null,this._writable(["gain","Q"]),this.gain=null,this.Q=null,this},t.AutoWah}),e(function(t){return t.Modulo=function(e){t.SignalBase.call(this),this.createInsOuts(1,0),this._shaper=new t.WaveShaper(Math.pow(2,16)),this._multiply=new t.Multiply,this._subtract=this.output=new t.Subtract,this._modSignal=new t.Signal(e),this.input.fan(this._shaper,this._subtract),this._modSignal.connect(this._multiply,0,0),this._shaper.connect(this._multiply,0,1),this._multiply.connect(this._subtract,0,1),this._setWaveShaper(e)},t.extend(t.Modulo,t.SignalBase),t.Modulo.prototype._setWaveShaper=function(t){this._shaper.setMap(function(e){return Math.floor((e+1e-4)/t)})},Object.defineProperty(t.Modulo.prototype,"value",{get:function(){return this._modSignal.value},set:function(t){this._modSignal.value=t,this._setWaveShaper(t)}}),t.Modulo.prototype.dispose=function(){return t.SignalBase.prototype.dispose.call(this),this._shaper.dispose(),this._shaper=null,this._multiply.dispose(),this._multiply=null,this._subtract.dispose(),this._subtract=null,this._modSignal.dispose(),this._modSignal=null,this},t.Modulo}),e(function(t){return t.BitCrusher=function(){var e=t.defaults(arguments,["bits"],t.BitCrusher);t.Effect.call(this,e);var i=1/Math.pow(2,e.bits-1);this._subtract=new t.Subtract,this._modulo=new t.Modulo(i),this._bits=e.bits,this.effectSend.fan(this._subtract,this._modulo),this._modulo.connect(this._subtract,0,1),this._subtract.connect(this.effectReturn)},t.extend(t.BitCrusher,t.Effect),t.BitCrusher.defaults={bits:4},Object.defineProperty(t.BitCrusher.prototype,"bits",{get:function(){return this._bits},set:function(t){this._bits=t;var e=1/Math.pow(2,t-1);this._modulo.value=e}}),t.BitCrusher.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._subtract.dispose(),this._subtract=null,this._modulo.dispose(),this._modulo=null,this},t.BitCrusher}),e(function(t){return t.Chebyshev=function(){var e=t.defaults(arguments,["order"],t.Chebyshev);t.Effect.call(this,e),this._shaper=new t.WaveShaper(4096),this._order=e.order,this.connectEffect(this._shaper),this.order=e.order,this.oversample=e.oversample},t.extend(t.Chebyshev,t.Effect),t.Chebyshev.defaults={order:1,oversample:"none"},t.Chebyshev.prototype._getCoefficient=function(t,e,i){return i.hasOwnProperty(e)?i[e]:(i[e]=0===e?0:1===e?t:2*t*this._getCoefficient(t,e-1,i)-this._getCoefficient(t,e-2,i),i[e])},Object.defineProperty(t.Chebyshev.prototype,"order",{get:function(){return this._order},set:function(t){this._order=t;for(var e=new Array(4096),i=e.length,r=0;r=this._startTime&&!this._sourceStopped?t.State.Started:t.State.Stopped},t.BufferSource.prototype.start=function(e,i,r,n,o){if(-1!==this._startTime)throw new Error("Tone.BufferSource can only be started once.");if(!this.buffer.loaded)throw new Error("Tone.BufferSource: buffer is either not set or not loaded.");e=this.toSeconds(e),i=this.loop?t.defaultArg(i,this.loopStart):t.defaultArg(i,0),i=this.toSeconds(i),n=t.defaultArg(n,1),this._gain=n,o=this.toSeconds(t.defaultArg(o,this.fadeIn)),this.fadeIn=o,o>0?(this._gainNode.gain.setValueAtTime(0,e),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(this._gain,e+o):this._gainNode.gain.exponentialApproachValueAtTime(this._gain,e,o)):this._gainNode.gain.setValueAtTime(n,e),this._startTime=e;var s=this.toSeconds(t.defaultArg(r,this.buffer.duration-i%this.buffer.duration));if(s=Math.max(s,0),t.isDefined(r)&&(this.loop||(s=Math.min(s,this.buffer.duration-i%this.buffer.duration)),this.stop(e+s,this.fadeOut)),this.loop){var a=this.loopEnd||this.buffer.duration,h=this.loopStart;i>=a&&(i=(i-h)%(a-h)+h)}return this._source.buffer=this.buffer.get(),this._source.loopEnd=this.loopEnd||this.buffer.duration,ithis.sampleTime?(this._gainNode.gain.setValueAtTime(this._gain,n),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(0,e):this._gainNode.gain.exponentialApproachValueAtTime(0,n,i)):this._gainNode.gain.setValueAtTime(0,e),t.context.clearTimeout(this._onendedTimeout),this._onendedTimeout=t.context.setTimeout(this._onended.bind(this),this._stopTime-this.now()),this}},t.BufferSource.prototype.cancelStop=function(){if(-1!==this._startTime&&!this._sourceStopped){var t=this.toSeconds(this.fadeIn);this._gainNode.gain.cancelScheduledValues(this._startTime+t+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime+t+this.sampleTime)),this.context.clearTimeout(this._onendedTimeout),this._stopTime=-1}return this},t.BufferSource.prototype._onended=function(){if(!this._sourceStopped){this._sourceStopped=!0;var t="exponential"===this.curve?2*this.fadeOut:0;this._sourceStarted&&-1!==this._stopTime&&this._source.stop(this._stopTime+t),this.onended(this)}},Object.defineProperty(t.BufferSource.prototype,"loopStart",{get:function(){return this._source.loopStart},set:function(t){this._source.loopStart=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"loopEnd",{get:function(){return this._source.loopEnd},set:function(t){this._source.loopEnd=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"buffer",{get:function(){return this._buffer},set:function(t){this._buffer.set(t)}}),Object.defineProperty(t.BufferSource.prototype,"loop",{get:function(){return this._source.loop},set:function(t){this._source.loop=t,this.cancelStop()}}),t.BufferSource.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.onended=null,this._source.onended=null,this._source.disconnect(),this._source=null,this._gainNode.dispose(),this._gainNode=null,this._buffer.dispose(),this._buffer=null,this._startTime=-1,this.playbackRate=null,t.context.clearTimeout(this._onendedTimeout),this},t.BufferSource}),e(function(t){t.Noise=function(){var e=t.defaults(arguments,["type"],t.Noise);t.Source.call(this,e),this._source=null,this._type=e.type,this._playbackRate=e.playbackRate},t.extend(t.Noise,t.Source),t.Noise.defaults={type:"white",playbackRate:1},Object.defineProperty(t.Noise.prototype,"type",{get:function(){return this._type},set:function(e){if(this._type!==e){if(!(e in i))throw new TypeError("Tone.Noise: invalid type: "+e);if(this._type=e,this.state===t.State.Started){var r=this.now();this._stop(r),this._start(r)}}}}),Object.defineProperty(t.Noise.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._source&&(this._source.playbackRate.value=t)}}),t.Noise.prototype._start=function(e){var r=i[this._type];this._source=new t.BufferSource(r).connect(this.output),this._source.loop=!0,this._source.playbackRate.value=this._playbackRate,this._source.start(this.toSeconds(e),Math.random()*(r.duration-.001))},t.Noise.prototype._stop=function(t){this._source&&(this._source.stop(this.toSeconds(t)),this._source=null)},t.Noise.prototype.restart=function(t){this._stop(t),this._start(t)},t.Noise.prototype.dispose=function(){return t.Source.prototype.dispose.call(this),null!==this._source&&(this._source.disconnect(),this._source=null),this._buffer=null,this};var e={pink:function(){for(var t=[],e=0;e<2;e++){var i,r,n,o,s,a,h,l=new Float32Array(220500);t[e]=l,i=r=n=o=s=a=h=0;for(var u=0;u<220500;u++){var c=2*Math.random()-1;i=.99886*i+.0555179*c,r=.99332*r+.0750759*c,n=.969*n+.153852*c,o=.8665*o+.3104856*c,s=.55*s+.5329522*c,a=-.7616*a-.016898*c,l[u]=i+r+n+o+s+a+h+.5362*c,l[u]*=.11,h=.115926*c}}return t}(),brown:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0,n=0;n<220500;n++){var o=2*Math.random()-1;i[n]=(r+.02*o)/1.02,r=i[n],i[n]*=3.5}}return t}(),white:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0;r<220500;r++)i[r]=2*Math.random()-1}return t}()},i={};function r(){for(var r in e)i[r]=(new t.Buffer).fromArray(e[r])}return t.getContext(r),t.Context.on("init",r),t.Noise}),e(function(t){return t.Reverb=function(){var e=t.defaults(arguments,["decay"],t.Reverb);t.Effect.call(this,e),this._convolver=this.context.createConvolver(),this.decay=e.decay,this.preDelay=e.preDelay,this.connectEffect(this._convolver)},t.extend(t.Reverb,t.Effect),t.Reverb.defaults={decay:1.5,preDelay:.01},t.Reverb.prototype.generate=function(){return t.Offline(function(){var e=new t.Noise,i=new t.Noise,r=new t.Merge;e.connect(r.left),i.connect(r.right);var n=(new t.Gain).toMaster();r.connect(n),e.start(0),i.start(0),n.gain.setValueAtTime(0,0),n.gain.linearRampToValueAtTime(1,this.preDelay),n.gain.exponentialApproachValueAtTime(0,this.preDelay,this.decay-this.preDelay)}.bind(this),this.decay).then(function(t){return this._convolver.buffer=t.get(),this}.bind(this))},t.Reverb.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._convolver.disconnect(),this._convolver=null,this},t.Reverb}),e(function(t){return t.StereoFeedbackEffect=function(){var e=t.defaults(arguments,["feedback"],t.FeedbackEffect);t.StereoEffect.call(this,e),this.feedback=new t.Signal(e.feedback,t.Type.NormalRange),this._feedbackL=new t.Gain,this._feedbackR=new t.Gain,this.effectReturnL.chain(this._feedbackL,this.effectSendL),this.effectReturnR.chain(this._feedbackR,this.effectSendR),this.feedback.fan(this._feedbackL.gain,this._feedbackR.gain),this._readOnly(["feedback"])},t.extend(t.StereoFeedbackEffect,t.StereoEffect),t.StereoFeedbackEffect.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["feedback"]),this.feedback.dispose(),this.feedback=null,this._feedbackL.dispose(),this._feedbackL=null,this._feedbackR.dispose(),this._feedbackR=null,this},t.StereoFeedbackEffect}),e(function(t){return t.StereoWidener=function(){var e=t.defaults(arguments,["width"],t.StereoWidener);t.MidSideEffect.call(this,e),this.width=new t.Signal(e.width,t.Type.NormalRange),this._readOnly(["width"]),this._twoTimesWidthMid=new t.Multiply(2),this._twoTimesWidthSide=new t.Multiply(2),this._midMult=new t.Multiply,this._twoTimesWidthMid.connect(this._midMult,0,1),this.midSend.chain(this._midMult,this.midReturn),this._oneMinusWidth=new t.Subtract,this._oneMinusWidth.connect(this._twoTimesWidthMid),this.context.getConstant(1).connect(this._oneMinusWidth,0,0),this.width.connect(this._oneMinusWidth,0,1),this._sideMult=new t.Multiply,this.width.connect(this._twoTimesWidthSide),this._twoTimesWidthSide.connect(this._sideMult,0,1),this.sideSend.chain(this._sideMult,this.sideReturn)},t.extend(t.StereoWidener,t.MidSideEffect),t.StereoWidener.defaults={width:.5},t.StereoWidener.prototype.dispose=function(){return t.MidSideEffect.prototype.dispose.call(this),this._writable(["width"]),this.width.dispose(),this.width=null,this._midMult.dispose(),this._midMult=null,this._sideMult.dispose(),this._sideMult=null,this._twoTimesWidthMid.dispose(),this._twoTimesWidthMid=null,this._twoTimesWidthSide.dispose(),this._twoTimesWidthSide=null,this._oneMinusWidth.dispose(),this._oneMinusWidth=null,this},t.StereoWidener}),e(function(t){return t.Tremolo=function(){var e=t.defaults(arguments,["frequency","depth"],t.Tremolo);t.StereoEffect.call(this,e),this._lfoL=new t.LFO({phase:e.spread,min:1,max:0}),this._lfoR=new t.LFO({phase:e.spread,min:1,max:0}),this._amplitudeL=new t.Gain,this._amplitudeR=new t.Gain,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.depth=new t.Signal(e.depth,t.Type.NormalRange),this._readOnly(["frequency","depth"]),this.effectSendL.chain(this._amplitudeL,this.effectReturnL),this.effectSendR.chain(this._amplitudeR,this.effectReturnR),this._lfoL.connect(this._amplitudeL.gain),this._lfoR.connect(this._amplitudeR.gain),this.frequency.fan(this._lfoL.frequency,this._lfoR.frequency),this.depth.fan(this._lfoR.amplitude,this._lfoL.amplitude),this.type=e.type,this.spread=e.spread},t.extend(t.Tremolo,t.StereoEffect),t.Tremolo.defaults={frequency:10,type:"sine",depth:.5,spread:180},t.Tremolo.prototype.start=function(t){return this._lfoL.start(t),this._lfoR.start(t),this},t.Tremolo.prototype.stop=function(t){return this._lfoL.stop(t),this._lfoR.stop(t),this},t.Tremolo.prototype.sync=function(e){return this._lfoL.sync(e),this._lfoR.sync(e),t.Transport.syncSignal(this.frequency),this},t.Tremolo.prototype.unsync=function(){return this._lfoL.unsync(),this._lfoR.unsync(),t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Tremolo.prototype,"type",{get:function(){return this._lfoL.type},set:function(t){this._lfoL.type=t,this._lfoR.type=t}}),Object.defineProperty(t.Tremolo.prototype,"spread",{get:function(){return this._lfoR.phase-this._lfoL.phase},set:function(t){this._lfoL.phase=90-t/2,this._lfoR.phase=t/2+90}}),t.Tremolo.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["frequency","depth"]),this._lfoL.dispose(),this._lfoL=null,this._lfoR.dispose(),this._lfoR=null,this._amplitudeL.dispose(),this._amplitudeL=null,this._amplitudeR.dispose(),this._amplitudeR=null,this.frequency=null,this.depth=null,this},t.Tremolo}),e(function(t){return t.Vibrato=function(){var e=t.defaults(arguments,["frequency","depth"],t.Vibrato);t.Effect.call(this,e),this._delayNode=new t.Delay(0,e.maxDelay),this._lfo=new t.LFO({type:e.type,min:0,max:e.maxDelay,frequency:e.frequency,phase:-90}).start().connect(this._delayNode.delayTime),this.frequency=this._lfo.frequency,this.depth=this._lfo.amplitude,this.depth.value=e.depth,this._readOnly(["frequency","depth"]),this.effectSend.chain(this._delayNode,this.effectReturn)},t.extend(t.Vibrato,t.Effect),t.Vibrato.defaults={maxDelay:.005,frequency:5,depth:.1,type:"sine"},Object.defineProperty(t.Vibrato.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.Vibrato.prototype.dispose=function(){t.Effect.prototype.dispose.call(this),this._delayNode.dispose(),this._delayNode=null,this._lfo.dispose(),this._lfo=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null},t.Vibrato}),e(function(t){return t.Event=function(){var e=t.defaults(arguments,["callback","value"],t.Event);t.call(this),this._loop=e.loop,this.callback=e.callback,this.value=e.value,this._loopStart=this.toTicks(e.loopStart),this._loopEnd=this.toTicks(e.loopEnd),this._state=new t.TimelineState(t.State.Stopped),this._playbackRate=1,this._startOffset=0,this._probability=e.probability,this._humanize=e.humanize,this.mute=e.mute,this.playbackRate=e.playbackRate},t.extend(t.Event),t.Event.defaults={callback:t.noOp,loop:!1,loopEnd:"1m",loopStart:0,playbackRate:1,value:null,probability:1,mute:!1,humanize:!1},t.Event.prototype._rescheduleEvents=function(e){return e=t.defaultArg(e,-1),this._state.forEachFrom(e,function(e){var i;if(e.state===t.State.Started){t.isDefined(e.id)&&t.Transport.clear(e.id);var r=e.time+Math.round(this.startOffset/this._playbackRate);if(this._loop){i=1/0,t.isNumber(this._loop)&&(i=this._loop*this._getLoopDuration());var n=this._state.getAfter(r);null!==n&&(i=Math.min(i,n.time-r)),i!==1/0&&(this._state.setStateAtTime(t.State.Stopped,r+i+1),i=t.Ticks(i));var o=t.Ticks(this._getLoopDuration());e.id=t.Transport.scheduleRepeat(this._tick.bind(this),o,t.Ticks(r),i)}else e.id=t.Transport.schedule(this._tick.bind(this),t.Ticks(r))}}.bind(this)),this},Object.defineProperty(t.Event.prototype,"state",{get:function(){return this._state.getValueAtTime(t.Transport.ticks)}}),Object.defineProperty(t.Event.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t}}),Object.defineProperty(t.Event.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t}}),Object.defineProperty(t.Event.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t}}),t.Event.prototype.start=function(e){return e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Stopped&&(this._state.add({state:t.State.Started,time:e,id:void 0}),this._rescheduleEvents(e)),this},t.Event.prototype.stop=function(e){if(this.cancel(e),e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Started){this._state.setStateAtTime(t.State.Stopped,e);var i=this._state.getBefore(e),r=e;null!==i&&(r=i.time),this._rescheduleEvents(r)}return this},t.Event.prototype.cancel=function(e){return e=t.defaultArg(e,-1/0),e=this.toTicks(e),this._state.forEachFrom(e,function(e){t.Transport.clear(e.id)}),this._state.cancel(e),this},t.Event.prototype._tick=function(e){var i=t.Transport.getTicksAtTime(e);if(!this.mute&&this._state.getValueAtTime(i)===t.State.Started){if(this.probability<1&&Math.random()>this.probability)return;if(this.humanize){var r=.02;t.isBoolean(this.humanize)||(r=this.toSeconds(this.humanize)),e+=(2*Math.random()-1)*r}this.callback(e,this.value)}},t.Event.prototype._getLoopDuration=function(){return Math.round((this._loopEnd-this._loopStart)/this._playbackRate)},Object.defineProperty(t.Event.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"progress",{get:function(){if(this._loop){var e=t.Transport.ticks,i=this._state.get(e);if(null!==i&&i.state===t.State.Started){var r=this._getLoopDuration();return(e-i.time)%r/r}return 0}return 0}}),t.Event.prototype.dispose=function(){this.cancel(),this._state.dispose(),this._state=null,this.callback=null,this.value=null},t.Event}),e(function(t){return t.Loop=function(){var e=t.defaults(arguments,["callback","interval"],t.Loop);t.call(this),this._event=new t.Event({callback:this._tick.bind(this),loop:!0,loopEnd:e.interval,playbackRate:e.playbackRate,probability:e.probability}),this.callback=e.callback,this.iterations=e.iterations},t.extend(t.Loop),t.Loop.defaults={interval:"4n",callback:t.noOp,playbackRate:1,iterations:1/0,probability:!0,mute:!1},t.Loop.prototype.start=function(t){return this._event.start(t),this},t.Loop.prototype.stop=function(t){return this._event.stop(t),this},t.Loop.prototype.cancel=function(t){return this._event.cancel(t),this},t.Loop.prototype._tick=function(t){this.callback(t)},Object.defineProperty(t.Loop.prototype,"state",{get:function(){return this._event.state}}),Object.defineProperty(t.Loop.prototype,"progress",{get:function(){return this._event.progress}}),Object.defineProperty(t.Loop.prototype,"interval",{get:function(){return this._event.loopEnd},set:function(t){this._event.loopEnd=t}}),Object.defineProperty(t.Loop.prototype,"playbackRate",{get:function(){return this._event.playbackRate},set:function(t){this._event.playbackRate=t}}),Object.defineProperty(t.Loop.prototype,"humanize",{get:function(){return this._event.humanize},set:function(t){this._event.humanize=t}}),Object.defineProperty(t.Loop.prototype,"probability",{get:function(){return this._event.probability},set:function(t){this._event.probability=t}}),Object.defineProperty(t.Loop.prototype,"mute",{get:function(){return this._event.mute},set:function(t){this._event.mute=t}}),Object.defineProperty(t.Loop.prototype,"iterations",{get:function(){return!0===this._event.loop?1/0:this._event.loop},set:function(t){this._event.loop=t===1/0||t}}),t.Loop.prototype.dispose=function(){this._event.dispose(),this._event=null,this.callback=null},t.Loop}),e(function(t){return t.Part=function(){var e=t.defaults(arguments,["callback","events"],t.Part);t.Event.call(this,e),this._events=[];for(var i=0;i=this._loopStart&&e.startOffset=r&&(e.loop=!1,e.start(t.Ticks(i))):e.startOffset>=r&&e.start(t.Ticks(i))},Object.defineProperty(t.Part.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t,this._forEach(function(t){t.startOffset+=this._startOffset})}}),t.Part.prototype.stop=function(e){var i=this.toTicks(e);return this._state.cancel(i),this._state.setStateAtTime(t.State.Stopped,i),this._forEach(function(t){t.stop(e)}),this},t.Part.prototype.at=function(e,i){e=t.TransportTime(e);for(var r=t.Ticks(1).toSeconds(),n=0;n=0;r--){var n=this._events[r];n instanceof t.Part?n.remove(e,i):n.startOffset===e&&(t.isUndef(i)||t.isDefined(i)&&n.value===i)&&(this._events.splice(r,1),n.dispose())}return this},t.Part.prototype.removeAll=function(){return this._forEach(function(t){t.dispose()}),this._events=[],this},t.Part.prototype.cancel=function(t){return this._forEach(function(e){e.cancel(t)}),this._state.cancel(this.toTicks(t)),this},t.Part.prototype._forEach=function(e,i){if(this._events){i=t.defaultArg(i,this);for(var r=this._events.length-1;r>=0;r--){var n=this._events[r];n instanceof t.Part?n._forEach(e,i):e.call(i,n)}}return this},t.Part.prototype._setAll=function(t,e){this._forEach(function(i){i[t]=e})},t.Part.prototype._tick=function(t,e){this.mute||this.callback(t,e)},t.Part.prototype._testLoopBoundries=function(e){e.startOffset=this._loopEnd?e.cancel(0):e.state===t.State.Stopped&&this._restartEvent(e)},Object.defineProperty(t.Part.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t,this._setAll("probability",t)}}),Object.defineProperty(t.Part.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t,this._setAll("humanize",t)}}),Object.defineProperty(t.Part.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._forEach(function(e){e._loopStart=this._loopStart,e._loopEnd=this._loopEnd,e.loop=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._forEach(function(e){e.loopEnd=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._forEach(function(t){t.loopStart=this.loopStart,this._testLoopBoundries(t)})}}),Object.defineProperty(t.Part.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._setAll("playbackRate",t)}}),Object.defineProperty(t.Part.prototype,"length",{get:function(){return this._events.length}}),t.Part.prototype.dispose=function(){return this.removeAll(),this._state.dispose(),this._state=null,this.callback=null,this._events=null,this},t.Part}),e(function(t){return t.Pattern=function(){var e=t.defaults(arguments,["callback","values","pattern"],t.Pattern);t.Loop.call(this,e),this._pattern=new t.CtrlPattern({values:e.values,type:e.pattern,index:e.index})},t.extend(t.Pattern,t.Loop),t.Pattern.defaults={pattern:t.CtrlPattern.Type.Up,callback:t.noOp,values:[]},t.Pattern.prototype._tick=function(t){this.callback(t,this._pattern.value),this._pattern.next()},Object.defineProperty(t.Pattern.prototype,"index",{get:function(){return this._pattern.index},set:function(t){this._pattern.index=t}}),Object.defineProperty(t.Pattern.prototype,"values",{get:function(){return this._pattern.values},set:function(t){this._pattern.values=t}}),Object.defineProperty(t.Pattern.prototype,"value",{get:function(){return this._pattern.value}}),Object.defineProperty(t.Pattern.prototype,"pattern",{get:function(){return this._pattern.type},set:function(t){this._pattern.type=t}}),t.Pattern.prototype.dispose=function(){t.Loop.prototype.dispose.call(this),this._pattern.dispose(),this._pattern=null},t.Pattern}),e(function(t){return t.Sequence=function(){var e=t.defaults(arguments,["callback","events","subdivision"],t.Sequence),i=e.events;if(delete e.events,t.Part.call(this,e),this._subdivision=this.toTicks(e.subdivision),t.isUndef(e.loopEnd)&&t.isDefined(i)&&(this._loopEnd=i.length*this._subdivision),this._loop=!0,t.isDefined(i))for(var r=0;r1){var e=-t/2,i=t/(this._oscillators.length-1);this._forEach(function(t,r){t.detune.value=e+i*r})}}}),Object.defineProperty(t.FatOscillator.prototype,"count",{get:function(){return this._oscillators.length},set:function(e){if(e=Math.max(e,1),this._oscillators.length!==e){this._forEach(function(t){t.dispose()}),this._oscillators=[];for(var i=0;i0&&this.getLevelAtTime(e)>.05){var i=this.toSeconds(this.portamento);this.frequency.exponentialRampTo(t,i,e)}else this.frequency.setValueAtTime(t,e);return this},t.Monophonic}),e(function(t){return t.Synth=function(e){e=t.defaultArg(e,t.Synth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","frequency","detune","envelope"])},t.extend(t.Synth,t.Monophonic),t.Synth.defaults={oscillator:{type:"triangle"},envelope:{attack:.005,decay:.1,sustain:.3,release:1}},t.Synth.prototype._triggerEnvelopeAttack=function(t,e){return this.envelope.triggerAttack(t,e),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.Synth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.Synth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.frequency=null,this.detune=null,this},t.Synth}),e(function(t){return t.AMSynth=function(e){e=t.defaultArg(e,t.AMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth,this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth,this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this._modulationScale=new t.AudioToGain,this._modulationNode=new t.Gain,this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.chain(this._modulationScale,this._modulationNode.gain),this._carrier.chain(this._modulationNode,this.output),this._readOnly(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.AMSynth,t.Monophonic),t.AMSynth.defaults={harmonicity:3,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.AMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.AMSynth.prototype._triggerEnvelopeRelease=function(t){return this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.AMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationScale.dispose(),this._modulationScale=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.AMSynth}),e(function(t){return t.MonoSynth=function(e){e=t.defaultArg(e,t.MonoSynth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.filter=new t.Filter(e.filter),this.filterEnvelope=new t.FrequencyEnvelope(e.filterEnvelope),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.filter,this.envelope,this.output),this.filterEnvelope.connect(this.filter.frequency),this._readOnly(["oscillator","frequency","detune","filter","filterEnvelope","envelope"])},t.extend(t.MonoSynth,t.Monophonic),t.MonoSynth.defaults={frequency:"C4",detune:0,oscillator:{type:"square"},filter:{Q:6,type:"lowpass",rolloff:-24},envelope:{attack:.005,decay:.1,sustain:.9,release:1},filterEnvelope:{attack:.06,decay:.2,sustain:.5,release:2,baseFrequency:200,octaves:7,exponent:2}},t.MonoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.envelope.triggerAttack(t,e),this.filterEnvelope.triggerAttack(t),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.MonoSynth.prototype._triggerEnvelopeRelease=function(t){return this.envelope.triggerRelease(t),this.filterEnvelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MonoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","filter","filterEnvelope","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.filterEnvelope.dispose(),this.filterEnvelope=null,this.filter.dispose(),this.filter=null,this.frequency=null,this.detune=null,this},t.MonoSynth}),e(function(t){return t.DuoSynth=function(e){e=t.defaultArg(e,t.DuoSynth.defaults),t.Monophonic.call(this,e),this.voice0=new t.MonoSynth(e.voice0),this.voice0.volume.value=-10,this.voice1=new t.MonoSynth(e.voice1),this.voice1.volume.value=-10,this._vibrato=new t.LFO(e.vibratoRate,-50,50),this._vibrato.start(),this.vibratoRate=this._vibrato.frequency,this._vibratoGain=new t.Gain(e.vibratoAmount,t.Type.Positive),this.vibratoAmount=this._vibratoGain.gain,this.frequency=new t.Signal(440,t.Type.Frequency),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.frequency.connect(this.voice0.frequency),this.frequency.chain(this.harmonicity,this.voice1.frequency),this._vibrato.connect(this._vibratoGain),this._vibratoGain.fan(this.voice0.detune,this.voice1.detune),this.voice0.connect(this.output),this.voice1.connect(this.output),this._readOnly(["voice0","voice1","frequency","vibratoAmount","vibratoRate"])},t.extend(t.DuoSynth,t.Monophonic),t.DuoSynth.defaults={vibratoAmount:.5,vibratoRate:5,harmonicity:1.5,voice0:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}},voice1:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}}},t.DuoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.voice0._triggerEnvelopeAttack(t,e),this.voice1._triggerEnvelopeAttack(t,e),this},t.DuoSynth.prototype._triggerEnvelopeRelease=function(t){return this.voice0._triggerEnvelopeRelease(t),this.voice1._triggerEnvelopeRelease(t),this},t.DuoSynth.prototype.getLevelAtTime=function(t){return(this.voice0.getLevelAtTime(t)+this.voice1.getLevelAtTime(t))/2},t.DuoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["voice0","voice1","frequency","vibratoAmount","vibratoRate"]),this.voice0.dispose(),this.voice0=null,this.voice1.dispose(),this.voice1=null,this.frequency.dispose(),this.frequency=null,this._vibratoGain.dispose(),this._vibratoGain=null,this._vibrato=null,this.harmonicity.dispose(),this.harmonicity=null,this.vibratoAmount.dispose(),this.vibratoAmount=null,this.vibratoRate=null,this},t.DuoSynth}),e(function(t){return t.FMSynth=function(e){e=t.defaultArg(e,t.FMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth(e.carrier),this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth(e.modulator),this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.modulationIndex=new t.Multiply(e.modulationIndex),this.modulationIndex.units=t.Type.Positive,this._modulationNode=new t.Gain(0),this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.frequency.chain(this.modulationIndex,this._modulationNode),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.connect(this._modulationNode.gain),this._modulationNode.connect(this._carrier.frequency),this._carrier.connect(this.output),this._readOnly(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.FMSynth,t.Monophonic),t.FMSynth.defaults={harmonicity:3,modulationIndex:10,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.FMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.FMSynth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.FMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.modulationIndex.dispose(),this.modulationIndex=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.FMSynth}),e(function(t){return t.MembraneSynth=function(e){e=t.defaultArg(e,t.MembraneSynth.defaults),t.Instrument.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.octaves=e.octaves,this.pitchDecay=e.pitchDecay,this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","envelope"])},t.extend(t.MembraneSynth,t.Instrument),t.MembraneSynth.defaults={pitchDecay:.05,octaves:10,oscillator:{type:"sine"},envelope:{attack:.001,decay:.4,sustain:.01,release:1.4,attackCurve:"exponential"}},t.MembraneSynth.prototype.triggerAttack=function(t,e,i){e=this.toSeconds(e);var r=(t=this.toFrequency(t))*this.octaves;return this.oscillator.frequency.setValueAtTime(r,e),this.oscillator.frequency.exponentialRampToValueAtTime(t,e+this.toSeconds(this.pitchDecay)),this.envelope.triggerAttack(e,i),this.oscillator.start(e),this},t.MembraneSynth.prototype.triggerRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MembraneSynth.prototype.dispose=function(){return t.Instrument.prototype.dispose.call(this),this._writable(["oscillator","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this},t.MembraneSynth}),e(function(t){var e=[1,1.483,1.932,2.546,2.63,3.897];return t.MetalSynth=function(i){i=t.defaultArg(i,t.MetalSynth.defaults),t.Instrument.call(this,i),this.frequency=new t.Signal(i.frequency,t.Type.Frequency),this._oscillators=[],this._freqMultipliers=[],this._amplitue=new t.Gain(0).connect(this.output),this._highpass=new t.Filter({type:"highpass",Q:-3.0102999566398125}).connect(this._amplitue),this._octaves=i.octaves,this._filterFreqScaler=new t.Scale(i.resonance,7e3),this.envelope=new t.Envelope({attack:i.envelope.attack,attackCurve:"linear",decay:i.envelope.decay,sustain:0,release:i.envelope.release}).chain(this._filterFreqScaler,this._highpass.frequency),this.envelope.connect(this._amplitue.gain);for(var r=0;re&&(o.voice.triggerRelease(e),o.release=e)}return this},t.PolySynth.prototype.sync=function(){return this._syncMethod("triggerAttack",1),this._syncMethod("triggerRelease",1),this},t.PolySynth.prototype.set=function(t,e,i){for(var r=0;rt&&(i.release=t,i.voice.triggerRelease(t))}return this},t.PolySynth.prototype.dispose=function(){t.Instrument.prototype.dispose.call(this);for(var e=0;e0)r=i[0];else if(!r&&t.isDefined(e))throw new Error("Tone.UserMedia: no matching device: "+e);this._device=r;var n={audio:{echoCancellation:!1,sampleRate:this.context.sampleRate}};return r&&(n.audio.deviceId=r.deviceId),navigator.mediaDevices.getUserMedia(n).then(function(t){return this._stream||(this._stream=t,this._mediaStream=this.context.createMediaStreamSource(t),this._mediaStream.connect(this.output)),this}.bind(this))}.bind(this))},t.UserMedia.prototype.close=function(){return this._stream&&(this._stream.getAudioTracks().forEach(function(t){t.stop()}),this._stream=null,this._mediaStream.disconnect(),this._mediaStream=null),this._device=null,this},t.UserMedia.enumerateDevices=function(){return navigator.mediaDevices.enumerateDevices().then(function(t){return t.filter(function(t){return"audioinput"===t.kind})})},Object.defineProperty(t.UserMedia.prototype,"state",{get:function(){return this._stream&&this._stream.active?t.State.Started:t.State.Stopped}}),Object.defineProperty(t.UserMedia.prototype,"deviceId",{get:function(){if(this._device)return this._device.deviceId}}),Object.defineProperty(t.UserMedia.prototype,"groupId",{get:function(){if(this._device)return this._device.groupId}}),Object.defineProperty(t.UserMedia.prototype,"label",{get:function(){if(this._device)return this._device.label}}),Object.defineProperty(t.UserMedia.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.UserMedia.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.close(),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null,this},Object.defineProperty(t.UserMedia,"supported",{get:function(){return t.isDefined(navigator.mediaDevices)&&t.isFunction(navigator.mediaDevices.getUserMedia)}}),t.UserMedia}),e(function(t){return t.Midi=function(e,i){if(!(this instanceof t.Midi))return new t.Midi(e,i);t.Frequency.call(this,e,i)},t.extend(t.Midi,t.Frequency),t.Midi.prototype._defaultUnits="midi",t.Midi.prototype._frequencyToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._frequencyToUnits.call(this,e))},t.Midi.prototype._ticksToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._ticksToUnits.call(this,e))},t.Midi.prototype._beatsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._beatsToUnits.call(this,e))},t.Midi.prototype._secondsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._secondsToUnits.call(this,e))},t.Midi.prototype.toMidi=function(){return this.valueOf()},t.Midi.prototype.toFrequency=function(){return t.Frequency.mtof(this.toMidi())},t.Midi.prototype.transpose=function(t){return new this.constructor(this.toMidi()+t)},t.Midi}),t}()}.call(e,i,e,t))||(t.exports=r)},function(t,e,i){(function(e){var i;t.exports=function t(e,r,n){function o(a,h){if(!r[a]){if(!e[a]){var l="function"==typeof i&&i;if(!h&&l)return i(a,!0);if(s)return s(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var c=r[a]={exports:{}};e[a][0].call(c.exports,function(t){var i=e[a][1][t];return o(i||t)},c,c.exports,t,e,r,n)}return r[a].exports}for(var s="function"==typeof i&&i,a=0;a0)throw new Error("Invalid string. Length must be a multiple of 4");var u=t.length;h="="===t.charAt(u-2)?2:"="===t.charAt(u-1)?1:0,l=new i(3*t.length/4-h),s=h>0?t.length-4:t.length;var c=0;for(n=0,o=0;n>16),r((65280&a)>>8),r(255&a);return 2===h?r(255&(a=e(t.charAt(n))<<2|e(t.charAt(n+1))>>4)):1===h&&(r((a=e(t.charAt(n))<<10|e(t.charAt(n+1))<<4|e(t.charAt(n+2))>>2)>>8&255),r(255&a)),l},t.fromByteArray=function(t){function e(t){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t)}function i(t){return e(t>>18&63)+e(t>>12&63)+e(t>>6&63)+e(63&t)}var r,n,o,s=t.length%3,a="";for(r=0,o=t.length-s;r>2),a+=e(n<<4&63),a+="==";break;case 2:n=(t[t.length-2]<<8)+t[t.length-1],a+=e(n>>10),a+=e(n>>4&63),a+=e(n<<2&63),a+="="}return a}}(void 0===i?this.base64js={}:i)},{}],2:[function(t,e,i){},{}],3:[function(t,i,r){(function(e){"use strict";function i(){return n.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function n(t){return this instanceof n?(n.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof t?function(t,e){if(t=s(t,e<0?0:0|a(e)),!n.TYPED_ARRAY_SUPPORT)for(var i=0;i1?arguments[1]:"utf8"):function(t,e){if(n.isBuffer(e))return function(t,e){var i=0|a(e.length);return t=s(t,i),e.copy(t,0,0,i),t}(t,e);if(F(e))return function(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r1?new n(t,arguments[1]):new n(t)}function o(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r>>1&&(t.parent=I),t}function a(t){if(t>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|t}function h(t,e){"string"!=typeof t&&(t=""+t);var i=t.length;if(0===i)return 0;for(var r=!1;;)switch(e){case"ascii":case"binary":case"raw":case"raws":return i;case"utf8":case"utf-8":return k(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return C(t).length;default:if(r)return k(t).length;e=(""+e).toLowerCase(),r=!0}}function l(t,e,i,r){i=Number(i)||0;var n=t.length-i;r?(r=Number(r))>n&&(r=n):r=n;var o=e.length;if(o%2!=0)throw new Error("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,n=i%256,o.push(n),o.push(r);return o}(e,t.length-i),t,i,r)}function m(t,e,i){return 0===e&&i===t.length?O.fromByteArray(t):O.fromByteArray(t.slice(e,i))}function y(t,e,i){i=Math.min(t.length,i);for(var r=[],n=e;n239?4:l>223?3:l>191?2:1;if(n+c<=i)switch(c){case 1:l<128&&(u=l);break;case 2:128==(192&(o=t[n+1]))&&(h=(31&l)<<6|63&o)>127&&(u=h);break;case 3:o=t[n+1],s=t[n+2],128==(192&o)&&128==(192&s)&&(h=(15&l)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(u=h);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&l)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(u=h)}null===u?(u=65533,c=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),n+=c}return function(t){var e=t.length;if(e<=D)return String.fromCharCode.apply(String,t);for(var i="",r=0;rr)&&(i=r);for(var n="",o=e;oi)throw new RangeError("Trying to access beyond buffer length")}function x(t,e,i,r,o,s){if(!n.isBuffer(t))throw new TypeError("buffer must be a Buffer instance");if(e>o||et.length)throw new RangeError("index out of range")}function w(t,e,i,r){e<0&&(e=65535+e+1);for(var n=0,o=Math.min(t.length-i,2);n>>8*(r?n:1-n)}function T(t,e,i,r){e<0&&(e=4294967295+e+1);for(var n=0,o=Math.min(t.length-i,4);n>>8*(r?n:3-n)&255}function A(t,e,i,r,n,o){if(e>n||et.length)throw new RangeError("index out of range");if(i<0)throw new RangeError("index out of range")}function M(t,e,i,r,n){return n||A(t,e,i,4,3.4028234663852886e38,-3.4028234663852886e38),L.write(t,e,i,r,23,4),i+4}function P(t,e,i,r,n){return n||A(t,e,i,8,1.7976931348623157e308,-1.7976931348623157e308),L.write(t,e,i,r,52,8),i+8}function E(t){return t<16?"0"+t.toString(16):t.toString(16)}function k(t,e){e=e||1/0;for(var i,r=t.length,n=null,o=[],s=0;s55295&&i<57344){if(!n){if(i>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}n=i;continue}if(i<56320){(e-=3)>-1&&o.push(239,191,189),n=i;continue}i=65536+(n-55296<<10|i-56320)}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,i<128){if((e-=1)<0)break;o.push(i)}else if(i<2048){if((e-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((e-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function C(t){return O.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(B,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function R(t,e,i,r){for(var n=0;n=e.length||n>=t.length);n++)e[n+i]=t[n];return n}var O=t("base64-js"),L=t("ieee754"),F=t("isarray");r.Buffer=n,r.SlowBuffer=function t(e,i){if(!(this instanceof t))return new t(e,i);var r=new n(e,i);return delete r.parent,r},r.INSPECT_MAX_BYTES=50,n.poolSize=8192;var I={};n.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){function t(){}try{var e=new Uint8Array(1);return e.foo=function(){return 42},e.constructor=t,42===e.foo()&&e.constructor===t&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}(),n.TYPED_ARRAY_SUPPORT?(n.prototype.__proto__=Uint8Array.prototype,n.__proto__=Uint8Array):(n.prototype.length=void 0,n.prototype.parent=void 0),n.isBuffer=function(t){return!(null==t||!t._isBuffer)},n.compare=function(t,e){if(!n.isBuffer(t)||!n.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var i=t.length,r=e.length,o=0,s=Math.min(i,r);othis.length&&(i=this.length),i<=e)return"";for(;;)switch(t){case"hex":return _(this,e,i);case"utf8":case"utf-8":return y(this,e,i);case"ascii":return v(this,e,i);case"binary":return g(this,e,i);case"base64":return m(this,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return b(this,e,i);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}.apply(this,arguments)},n.prototype.equals=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===n.compare(this,t)},n.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},n.prototype.compare=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?0:n.compare(this,t)},n.prototype.indexOf=function(t,e){function i(t,e,i){for(var r=-1,n=0;i+n2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e>>=0,0===this.length)return-1;if(e>=this.length)return-1;if(e<0&&(e=Math.max(this.length+e,0)),"string"==typeof t)return 0===t.length?-1:String.prototype.indexOf.call(this,t,e);if(n.isBuffer(t))return i(this,t,e);if("number"==typeof t)return n.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,t,e):i(this,[t],e);throw new TypeError("val must be string, number or Buffer")},n.prototype.get=function(t){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(t)},n.prototype.set=function(t,e){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(t,e)},n.prototype.write=function(t,e,i,r){if(void 0===e)r="utf8",i=this.length,e=0;else if(void 0===i&&"string"==typeof e)r=e,i=this.length,e=0;else if(isFinite(e))e|=0,isFinite(i)?(i|=0,void 0===r&&(r="utf8")):(r=i,i=void 0);else{var n=r;r=e,e=0|i,i=n}var o=this.length-e;if((void 0===i||i>o)&&(i=o),t.length>0&&(i<0||e<0)||e>this.length)throw new RangeError("attempt to write outside buffer bounds");r||(r="utf8");for(var s=!1;;)switch(r){case"hex":return l(this,t,e,i);case"utf8":case"utf-8":return u(this,t,e,i);case"ascii":return c(this,t,e,i);case"binary":return p(this,t,e,i);case"base64":return d(this,t,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return f(this,t,e,i);default:if(s)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),s=!0}},n.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var D=4096;n.prototype.slice=function(t,e){var i,r=this.length;if(t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(n*=256);)r+=this[t+--e]*n;return r},n.prototype.readUInt8=function(t,e){return e||S(t,1,this.length),this[t]},n.prototype.readUInt16LE=function(t,e){return e||S(t,2,this.length),this[t]|this[t+1]<<8},n.prototype.readUInt16BE=function(t,e){return e||S(t,2,this.length),this[t]<<8|this[t+1]},n.prototype.readUInt32LE=function(t,e){return e||S(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},n.prototype.readUInt32BE=function(t,e){return e||S(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},n.prototype.readIntLE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=this[t],n=1,o=0;++o=(n*=128)&&(r-=Math.pow(2,8*e)),r},n.prototype.readIntBE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=e,n=1,o=this[t+--r];r>0&&(n*=256);)o+=this[t+--r]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},n.prototype.readInt8=function(t,e){return e||S(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},n.prototype.readInt16LE=function(t,e){e||S(t,2,this.length);var i=this[t]|this[t+1]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt16BE=function(t,e){e||S(t,2,this.length);var i=this[t+1]|this[t]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt32LE=function(t,e){return e||S(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},n.prototype.readInt32BE=function(t,e){return e||S(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},n.prototype.readFloatLE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!0,23,4)},n.prototype.readFloatBE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!1,23,4)},n.prototype.readDoubleLE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!0,52,8)},n.prototype.readDoubleBE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!1,52,8)},n.prototype.writeUIntLE=function(t,e,i,r){t=+t,e|=0,i|=0,r||x(this,t,e,i,Math.pow(2,8*i),0);var n=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+n]=t/o&255;return e+i},n.prototype.writeUInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,255,0),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},n.prototype.writeUInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeUInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeUInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):T(this,t,e,!0),e+4},n.prototype.writeUInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeIntLE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=0,s=1,a=t<0?1:0;for(this[e]=255&t;++o>0)-a&255;return e+i},n.prototype.writeIntBE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=i-1,s=1,a=t<0?1:0;for(this[e+o]=255&t;--o>=0&&(s*=256);)this[e+o]=(t/s>>0)-a&255;return e+i},n.prototype.writeInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,127,-128),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},n.prototype.writeInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):T(this,t,e,!0),e+4},n.prototype.writeInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeFloatLE=function(t,e,i){return M(this,t,e,!0,i)},n.prototype.writeFloatBE=function(t,e,i){return M(this,t,e,!1,i)},n.prototype.writeDoubleLE=function(t,e,i){return P(this,t,e,!0,i)},n.prototype.writeDoubleBE=function(t,e,i){return P(this,t,e,!1,i)},n.prototype.copy=function(t,e,i,r){if(i||(i=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;o--)t[o+e]=this[o+i];else if(s<1e3||!n.TYPED_ARRAY_SUPPORT)for(o=0;o=this.length)throw new RangeError("start out of bounds");if(i<0||i>this.length)throw new RangeError("end out of bounds");var r;if("number"==typeof t)for(r=e;r>1,u=-7,c=i?n-1:0,p=i?-1:1,d=t[e+c];for(c+=p,o=d&(1<<-u)-1,d>>=-u,u+=a;u>0;o=256*o+t[e+c],c+=p,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=r;u>0;s=256*s+t[e+c],c+=p,u-=8);if(0===o)o=1-l;else{if(o===h)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,r),o-=l}return(d?-1:1)*s*Math.pow(2,o-r)},i.write=function(t,e,i,r,n,o){var s,a,h,l=8*o-n-1,u=(1<>1,p=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,f=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+c>=1?p/h:p*Math.pow(2,1-c))*h>=2&&(s++,h/=2),s+c>=u?(a=0,s=u):s+c>=1?(a=(e*h-1)*Math.pow(2,n),s+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,n),s=0));n>=8;t[i+d]=255&a,d+=f,a/=256,n-=8);for(s=s<0;t[i+d]=255&s,d+=f,s/=256,l-=8);t[i+d-f]|=128*m}},{}],8:[function(t,e,i){var r={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},{}],9:[function(t,e,i){"use strict";function r(t,e){return t.b===e.b&&t.a===e.a}function n(t,e){return t.bt?0:t)<=(i=0>i?0:i)?0===i?(e+r)/2:e+t/(t+i)*(r-e):r+i/(t+i)*(e-r)}function d(t){var e=g(t.b);return b(e,t.c),b(e.b,t.c),S(e,t.a),e}function f(t,e){var i=!1,r=!1;t!==e&&(e.a!==t.a&&(r=!0,w(e.a,t.a)),e.d!==t.d&&(i=!0,T(e.d,t.d)),_(e,t),r||(b(e,t.a),t.a.c=t),i||(S(e,t.d),t.d.a=t))}function m(t){var e=t.b,i=!1;t.d!==t.b.d&&(i=!0,T(t.d,t.b.d)),t.c===t?w(t.a,null):(t.b.d.a=J(t),t.a.c=t.c,_(t,J(t)),i||S(t,t.d)),e.c===e?(w(e.a,null),T(e.d,null)):(t.d.a=J(e),e.a.c=e.c,_(e,J(e))),x(t)}function y(t){var e=g(t),i=e.b;return _(e,t.e),e.a=t.b.a,b(i,e.a),e.d=i.d=t.d,e=e.b,_(t.b,J(t.b)),_(t.b,e),t.b.a=e.a,e.b.a.c=e.b,e.b.d=t.b.d,e.f=t.f,e.b.f=t.b.f,e}function v(t,e){var i=!1,r=g(t),n=r.b;return e.d!==t.d&&(i=!0,T(e.d,t.d)),_(r,t.e),_(n,e),r.a=t.b.a,n.a=e.a,r.d=n.d=t.d,t.d.a=n,i||S(r,t.d),r}function g(t){var e=new Z,i=new Z,r=t.b.h;return i.h=r,r.b.h=e,e.h=t,t.b.h=i,e.b=i,e.c=e,e.e=i,i.b=e,i.c=i,i.e=e}function _(t,e){var i=t.c,r=e.c;i.b.e=e,r.b.e=t,t.c=r,e.c=i}function b(t,e){var i=e.f,r=new K(e,i);i.e=r,e.f=r,i=r.c=t;do{i.a=r,i=i.c}while(i!==t)}function S(t,e){var i=e.d,r=new Q(e,i);i.b=r,e.d=r,r.a=t,r.c=e.c,i=t;do{i.d=r,i=i.e}while(i!==t)}function x(t){var e=t.h;t=t.b.h,e.b.h=t,t.b.h=e}function w(t,e){var i=t.c,r=i;do{r.a=e,r=r.c}while(r!==i);i=t.f,(r=t.e).f=i,i.e=r}function T(t,e){var i=t.a,r=i;do{r.d=e,r=r.e}while(r!==i);i=t.d,(r=t.b).d=i,i.b=r}function A(t){var e=0;return Math.abs(t[1])>Math.abs(t[0])&&(e=1),Math.abs(t[2])>Math.abs(t[e])&&(e=2),e}function M(t,e){t.f+=e.f,t.b.f+=e.b.f}function P(t,e,i){return t=t.a,e=e.a,i=i.a,e.b.a===t?i.b.a===t?n(e.a,i.a)?0>=s(i.b.a,e.a,i.a):0<=s(e.b.a,i.a,e.a):0>=s(i.b.a,t,i.a):i.b.a===t?0<=s(e.b.a,t,e.a):(e=o(e.b.a,t,e.a),t=o(i.b.a,t,i.a),e>=t)}function E(t){t.a.i=null;var e=t.e;e.a.c=e.c,e.c.a=e.a,t.e=null}function k(t,e){m(t.a),t.c=!1,t.a=e,e.i=t}function C(t){var e=t.a.a;do{t=ut(t)}while(t.a.a===e);return t.c&&(e=v(lt(t).a.b,t.a.e),k(t,e),t=ut(t)),t}function R(t,e,i){var r=new ht;return r.a=i,r.e=z(t.f,e.e,r),i.i=r}function O(t,e){switch(t.s){case 100130:return 0!=(1&e);case 100131:return 0!==e;case 100132:return 0e;case 100134:return 2<=e||-2>=e}return!1}function L(t){var e=t.a,i=e.d;i.c=t.d,i.a=e,E(t)}function F(t,e,i){for(t=e,e=e.a;t!==i;){t.c=!1;var r=lt(t),n=r.a;if(n.a!==e.a){if(!r.c){L(t);break}n=v(e.c.b,n.b),k(r,n)}e.c!==n&&(f(J(n),n),f(e,n)),L(t),e=r.a,t=r}return e}function I(t,e,i,r,n,o){var s=!0;do{R(t,e,i.b),i=i.c}while(i!==r);for(null===n&&(n=lt(e).a.b.c);r=lt(e),(i=r.a.b).a===n.a;)i.c!==n&&(f(J(i),i),f(J(n),i)),r.f=e.f-i.f,r.d=O(t,r.f),e.b=!0,!s&&N(t,e)&&(M(i,n),E(e),m(n)),s=!1,e=r,n=i;e.b=!0,o&&q(t,e)}function D(t,e,i,r,n){var o=[e.g[0],e.g[1],e.g[2]];e.d=null,e.d=t.o&&t.o(o,i,r,t.c)||null,null===e.d&&(n?t.n||(Y(t,100156),t.n=!0):e.d=i[0])}function U(t,e,i){var r=[null,null,null,null];r[0]=e.a.d,r[1]=i.a.d,D(t,e.a,r,[.5,.5,0,0],!1),f(e,i)}function B(t,e,i,r,n){var o=Math.abs(e.b-t.b)+Math.abs(e.a-t.a),s=Math.abs(i.b-t.b)+Math.abs(i.a-t.a),a=n+1;r[n]=.5*s/(o+s),r[a]=.5*o/(o+s),t.g[0]+=r[n]*e.g[0]+r[a]*i.g[0],t.g[1]+=r[n]*e.g[1]+r[a]*i.g[1],t.g[2]+=r[n]*e.g[2]+r[a]*i.g[2]}function N(t,e){var i=lt(e),o=e.a,a=i.a;if(n(o.a,a.a)){if(0=p?st(i,p):n(u[l[p>>1]],u[l[p]])?st(i,p):at(i,p)),u[h]=null,c[h]=i.b,i.b=h}else for(i.c[-(h+1)]=null;0s(o.b.a,a.a,o.a))return!1;ut(e).b=e.b=!0,y(o.b),f(J(a),o)}return!0}function G(t,e){var i=lt(e),u=e.a,c=i.a,d=u.a,m=c.a,v=u.b.a,g=c.b.a,_=new K;if(s(v,t.a,d),s(g,t.a,m),d===m||Math.min(d.a,v.a)>Math.max(m.a,g.a))return!1;if(n(d,m)){if(0s(v,m,d))return!1;var b,S,x=v,w=d,T=g,A=m;if(n(x,w)||(b=x,x=w,w=b),n(T,A)||(b=T,T=A,A=b),n(x,T)||(b=x,x=T,T=b,b=w,w=A,A=b),n(T,w)?n(w,A)?(b=o(x,T,w),S=o(T,w,A),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,w.b)):(b=s(x,T,w),S=-s(x,A,w),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,A.b)):_.b=(T.b+w.b)/2,a(x,w)||(b=x,x=w,w=b),a(T,A)||(b=T,T=A,A=b),a(x,T)||(b=x,x=T,T=b,b=w,w=A,A=b),a(T,w)?a(w,A)?(b=h(x,T,w),S=h(T,w,A),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,w.a)):(b=l(x,T,w),S=-l(x,A,w),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,A.a)):_.a=(T.a+w.a)/2,n(_,t.a)&&(_.b=t.a.b,_.a=t.a.a),n(x=n(d,m)?d:m,_)&&(_.b=x.b,_.a=x.a),r(_,d)||r(_,m))return N(t,e),!1;if(!r(v,t.a)&&0<=s(v,t.a,_)||!r(g,t.a)&&0>=s(g,t.a,_)){if(g===t.a)return y(u.b),f(c.b,u),e=C(e),u=lt(e).a,F(t,lt(e),i),I(t,e,J(u),u,u,!0),!0;if(v===t.a){y(c.b),f(u.e,J(c)),d=i=e,m=d.a.b.a;do{d=ut(d)}while(d.a.b.a===m);return d=lt(e=d).a.b.c,i.a=J(c),c=F(t,i,null),I(t,e,c.c,u.b.c,d,!0),!0}return 0<=s(v,t.a,_)&&(ut(e).b=e.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=s(g,t.a,_)&&(e.b=i.b=!0,y(c.b),c.a.b=t.a.b,c.a.a=t.a.a),!1}return y(u.b),y(c.b),f(J(c),u),u.a.b=_.b,u.a.a=_.a,u.a.h=et(t.e,u.a),u=u.a,c=[0,0,0,0],_=[d.d,v.d,m.d,g.d],u.g[0]=u.g[1]=u.g[2]=0,B(u,d,v,c,0),B(u,m,g,c,2),D(t,u,_,c,!0),ut(e).b=e.b=i.b=!0,!1}function q(t,e){for(var i=lt(e);;){for(;i.b;)e=i,i=lt(i);if(!e.b&&(i=e,null===(e=ut(e))||!e.b))break;e.b=!1;var r,o=e.a,a=i.a;if(r=o.b.a!==a.b.a)t:{var h=lt(r=e),l=r.a,u=h.a,c=void 0;if(n(l.b.a,u.b.a)){if(0>s(l.b.a,u.b.a,l.a)){r=!1;break t}ut(r).b=r.b=!0,c=y(l),f(u.b,c),c.d.c=r.d}else{if(0r.f&&(r.f*=2,r.c=rt(r.c,r.f+1)),0===r.b?i=n:(i=r.b,r.b=r.c[r.b]),r.e[i]=e,r.c[i]=n,r.d[n]=i,r.h&&at(r,n),i}return r=t.a++,t.c[r]=e,-(r+1)}function it(t){if(0===t.a)return ot(t.b);var e=t.c[t.d[t.a-1]];if(0!==t.b.a&&n(nt(t.b),e))return ot(t.b);do{--t.a}while(0t.a||n(r[a],r[l])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function at(t,e){for(var i=t.d,r=t.e,o=t.c,s=e,a=i[s];;){var h=s>>1,l=i[h];if(0===h||n(r[l],r[a])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function ht(){this.e=this.a=null,this.f=0,this.c=this.b=this.h=this.d=!1}function lt(t){return t.e.c.b}function ut(t){return t.e.a.b}var ct,pt=4e150,dt=0;(ct=H.prototype).x=function(){X(this,dt)},ct.B=function(t,e){switch(t){case 100142:return;case 100140:switch(e){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=e)}break;case 100141:return void(this.m=!!e);default:return void Y(this,100900)}Y(this,100901)},ct.y=function(t){switch(t){case 100142:return 0;case 100140:return this.s;case 100141:return this.m;default:Y(this,100900)}return!1},ct.A=function(t,e,i){this.j[0]=t,this.j[1]=e,this.j[2]=i},ct.z=function(t,e){var i=e||null;switch(t){case 100100:case 100106:this.h=i;break;case 100104:case 100110:this.l=i;break;case 100101:case 100107:this.k=i;break;case 100102:case 100108:this.i=i;break;case 100103:case 100109:this.p=i;break;case 100105:case 100111:this.o=i;break;case 100112:this.r=i;break;default:Y(this,100900)}},ct.C=function(t,e){var i=!1,r=[0,0,0];X(this,2);for(var n=0;3>n;++n){var o=t[n];-1e150>o&&(o=-1e150,i=!0),1e150p;++p){var d=t.g[p];de[p]&&(e[p]=d,i[p]=t)}if(t=0,e[1]-h[1]>e[0]-h[0]&&(t=1),e[2]-h[2]>e[t]-h[t]&&(t=2),h[t]>=e[t])a[0]=0,a[1]=0,a[2]=1;else{for(e=0,h=l[t],i=i[t],l=[0,0,0],h=[h.g[0]-i.g[0],h.g[1]-i.g[1],h.g[2]-i.g[2]],p=[0,0,0],t=o.e;t!==o;t=t.e)p[0]=t.g[0]-i.g[0],p[1]=t.g[1]-i.g[1],p[2]=t.g[2]-i.g[2],l[0]=h[1]*p[2]-h[2]*p[1],l[1]=h[2]*p[0]-h[0]*p[2],l[2]=h[0]*p[1]-h[1]*p[0],(d=l[0]*l[0]+l[1]*l[1]+l[2]*l[2])>e&&(e=d,a[0]=l[0],a[1]=l[1],a[2]=l[2]);0>=e&&(a[0]=a[1]=a[2]=0,a[A(h)]=1)}o=!0}for(l=A(a),t=this.b.c,e=(l+1)%3,i=(l+2)%3,l=0=(e=t.a).f))do{a+=(e.a.b-e.b.a.b)*(e.a.a+e.b.a.a),e=e.e}while(e!==t.a);if(0>a)for(a=this.b.c,o=a.e;o!==a;o=o.e)o.a=-o.a}for(this.n=!1,a=this.b.b,t=a.h;t!==a;t=o)o=t.h,e=t.e,r(t.a,t.b.a)&&t.e.e!==t&&(U(this,e,t),m(t),e=(t=e).e),e.e===t&&(e!==t&&(e!==o&&e!==o.b||(o=o.h),m(e)),t!==o&&t!==o.b||(o=o.h),m(t));for(this.e=a=new $,o=this.b.c,t=o.e;t!==o;t=t.e)t.h=et(a,t);for(tt(a),this.f=new function(t){this.a=new W,this.b=t,this.c=P}(this),j(this,-pt),j(this,pt);null!==(a=it(this.e));){for(;;){t:if(t=this.e,0===t.a)o=nt(t.b);else if(o=t.c[t.d[t.a-1]],0!==t.b.a&&(t=nt(t.b),n(t,o))){o=t;break t}if(null===o||!r(o,a))break;o=it(this.e),U(this,a.c,o.c)}V(this,a)}for(this.a=this.f.a.a.b.a.a,a=0;null!==(o=this.f.a.a.b);)o.h||++a,E(o);for(this.f=null,(a=this.e).b=null,a.d=null,this.e=a.c=null,a=this.b,t=a.a.b;t!==a.a;t=o)o=t.b,(t=t.a).e.e===t&&(M(t.c,t),m(t));if(!this.n){if(a=this.b,this.m)for(t=a.b.h;t!==a.b;t=o)o=t.h,t.b.d.c!==t.d.c?t.f=t.d.c?1:-1:m(t);else for(t=a.a.b;t!==a.a;t=o)if(o=t.b,t.c){for(t=t.a;n(t.b.a,t.a);t=t.c.b);for(;n(t.a,t.b.a);t=t.e);for(e=t.c.b,i=void 0;t.e!==e;)if(n(t.b.a,e.a)){for(;e.e!==t&&(u(e.e)||0>=s(e.a,e.b.a,e.e.b.a));)i=v(e.e,e),e=i.b;e=e.c.b}else{for(;e.e!==t&&(c(t.c.b)||0<=s(t.b.a,t.a,t.c.b.a));)i=v(t,t.c.b),t=i.b;t=t.e}for(;e.e.e!==t;)i=v(e.e,e),e=i.b}if(this.h||this.i||this.k||this.l)if(this.m){for(a=this.b,o=a.a.b;o!==a.a;o=o.b)if(o.c){this.h&&this.h(2,this.c),t=o.a;do{this.k&&this.k(t.a.d,this.c),t=t.e}while(t!==o.a);this.i&&this.i(this.c)}}else{for(a=this.b,o=!!this.l,t=!1,e=-1,i=a.a.d;i!==a.a;i=i.d)if(i.c){t||(this.h&&this.h(4,this.c),t=!0),l=i.a;do{o&&(h=l.b.d.c?0:1,e!==h&&(e=h,this.l&&this.l(!!e,this.c))),this.k&&this.k(l.a.d,this.c),l=l.e}while(l!==i.a)}t&&this.i&&this.i(this.c)}if(this.r){for(a=this.b,t=a.a.b;t!==a.a;t=o)if(o=t.b,!t.c){e=t.a,i=e.e,l=void 0;do{i=(l=i).e,l.d=null,null===l.b.d&&(l.c===l?w(l.a,null):(l.a.c=l.c,_(l,J(l))),(h=l.b).c===h?w(h.a,null):(h.a.c=h.c,_(h,J(h))),x(l))}while(l!==e);e=t.d,(t=t.b).d=e,e.b=t}return this.r(this.b),void(this.c=this.b=null)}}this.b=this.c=null},this.libtess={GluTesselator:H,windingRule:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},errorType:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156},gluEnum:{GLU_TESS_MESH:100112,GLU_TESS_TOLERANCE:100142,GLU_TESS_WINDING_RULE:100140,GLU_TESS_BOUNDARY_ONLY:100141,GLU_INVALID_ENUM:100900,GLU_INVALID_VALUE:100901,GLU_TESS_BEGIN:100100,GLU_TESS_VERTEX:100101,GLU_TESS_END:100102,GLU_TESS_ERROR:100103,GLU_TESS_EDGE_FLAG:100104,GLU_TESS_COMBINE:100105,GLU_TESS_BEGIN_DATA:100106,GLU_TESS_VERTEX_DATA:100107,GLU_TESS_END_DATA:100108,GLU_TESS_ERROR_DATA:100109,GLU_TESS_EDGE_FLAG_DATA:100110,GLU_TESS_COMBINE_DATA:100111}},H.prototype.gluDeleteTess=H.prototype.x,H.prototype.gluTessProperty=H.prototype.B,H.prototype.gluGetTessProperty=H.prototype.y,H.prototype.gluTessNormal=H.prototype.A,H.prototype.gluTessCallback=H.prototype.z,H.prototype.gluTessVertex=H.prototype.C,H.prototype.gluTessBeginPolygon=H.prototype.u,H.prototype.gluTessBeginContour=H.prototype.t,H.prototype.gluTessEndContour=H.prototype.v,H.prototype.gluTessEndPolygon=H.prototype.w,void 0!==e&&(e.exports=this.libtess)},{}],10:[function(t,e,i){(function(r){!function(t,r){r("object"==typeof i&&void 0!==e?i:t.opentype={})}(this,function(e){"use strict";function i(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function n(t,e){this.source=t,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=e,this.destLen=0,this.ltree=new i,this.dtree=new i}function o(t,e,i,r){var n,o;for(n=0;n>>=1,e}function h(t,e,i){if(!e)return i;for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>16-e;return t.tag>>>=e,t.bitcount-=e,r+i}function l(t,e){for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>=1,++n,i+=e.table[n],r-=e.table[n]}while(r>=0);return t.tag=o,t.bitcount-=n,e.trans[i+r]}function u(t,e,i){var r,n,o,a,u,c;for(r=h(t,5,257),n=h(t,5,1),o=h(t,4,4),a=0;a<19;++a)Le[a]=0;for(a=0;a8;)t.sourceIndex--,t.bitcount-=8;if(e=256*(e=t.source[t.sourceIndex+1])+t.source[t.sourceIndex],i=256*(i=t.source[t.sourceIndex+3])+t.source[t.sourceIndex+2],e!==(65535&~i))return Te;for(t.sourceIndex+=4,r=e;r;--r)t.dest[t.destLen++]=t.source[t.sourceIndex++];return t.bitcount=0,we}function d(t,e,i,r,n){return Math.pow(1-n,3)*t+3*Math.pow(1-n,2)*n*e+3*(1-n)*Math.pow(n,2)*i+Math.pow(n,3)*r}function f(){this.x1=Number.NaN,this.y1=Number.NaN,this.x2=Number.NaN,this.y2=Number.NaN}function m(){this.commands=[],this.fill="black",this.stroke=null,this.strokeWidth=1}function y(t){throw new Error(t)}function v(t,e){t||y(e)}function g(t){return function(){return t}}function _(t){return t>=-128&&t<=127}function b(t,e,i){for(var r=0,n=t.length;e>8&255,h+256&255)}return o}function w(t,e,i){for(var r=this,n=0;n>4,o=15&r;if(15===n)break;if(e+=i[n],15===o)break;e+=i[o]}return parseFloat(e)}(t);if(e>=32&&e<=246)return e-139;if(e>=247&&e<=250)return i=t.parseByte(),256*(e-247)+i+108;if(e>=251&&e<=254)return i=t.parseByte(),256*-(e-251)-i-108;throw new Error("Invalid b0 "+e)}function Y(t,e,i){e=void 0!==e?e:0;var r=new Ye.Parser(t,e),n=[],o=[];for(i=void 0!==i?i:t.length;r.relativeOffset>1,f.length=0,v=!0}var o,s,a,h,l,u,c,p,d=new m,f=[],y=0,v=!1,g=!1,_=0,b=0;if(t.isCIDFont){var S=t.tables.cff.topDict._fdSelect[e.index],x=t.tables.cff.topDict._fdArray[S];l=x._subrs,u=x._subrsBias,c=x._defaultWidthX,p=x._nominalWidthX}else l=t.tables.cff.topDict._subrs,u=t.tables.cff.topDict._subrsBias,c=t.tables.cff.topDict._defaultWidthX,p=t.tables.cff.topDict._nominalWidthX;var w=c;return function i(c){for(var m,S,x,T,A,M,P,E,k,C,R,O,L=0;L1&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_,b);break;case 5:for(;f.length>0;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 6:for(;f.length>0&&(_+=f.shift(),d.lineTo(_,b),0!==f.length);)b+=f.shift(),d.lineTo(_,b);break;case 7:for(;f.length>0&&(b+=f.shift(),d.lineTo(_,b),0!==f.length);)_+=f.shift(),d.lineTo(_,b);break;case 8:for(;f.length>0;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 10:A=f.pop()+u,(M=l[A])&&i(M);break;case 11:return;case 12:switch(F=c[L],L+=1,F){case 35:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h+f.shift(),k=P+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),b=O+f.shift(),f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;case 34:o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h,k=P+f.shift(),C=h,R=k+f.shift(),O=b,_=R+f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;case 36:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h,k=P+f.shift(),C=h,R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;case 37:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h+f.shift(),k=P+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),Math.abs(R-_)>Math.abs(O-b)?_=R+f.shift():b=O+f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;default:console.log("Glyph "+e.index+": unknown operator 1200"+F),f.length=0}break;case 14:f.length>0&&!v&&(w=f.shift()+p,v=!0),g&&(d.closePath(),g=!1);break;case 18:n();break;case 19:case 20:n(),L+=y+7>>3;break;case 21:f.length>2&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_+=f.pop(),b);break;case 22:f.length>1&&!v&&(w=f.shift()+p,v=!0),r(_+=f.pop(),b);break;case 23:n();break;case 24:for(;f.length>2;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 25:for(;f.length>6;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 26:for(f.length%2&&(_+=f.shift());f.length>0;)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a,b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 27:for(f.length%2&&(b+=f.shift());f.length>0;)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h,d.curveTo(o,s,a,h,_,b);break;case 28:m=c[L],S=c[L+1],f.push((m<<24|S<<16)>>16),L+=2;break;case 29:A=f.pop()+t.gsubrsBias,(M=t.gsubrs[A])&&i(M);break;case 30:for(;f.length>0&&(o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;case 31:for(;f.length>0&&(o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;default:F<32?console.log("Glyph "+e.index+": unknown operator "+F):F<247?f.push(F-139):F<251?(m=c[L],L+=1,f.push(256*(F-247)+m+108)):F<255?(m=c[L],L+=1,f.push(256*-(F-251)-m-108)):(m=c[L],S=c[L+1],x=c[L+2],T=c[L+3],L+=4,f.push((m<<24|S<<16|x<<8|T)/65536))}}}(i),e.advanceWidth=w,d}function et(t,e){var i,r=Ze.indexOf(t);return r>=0&&(i=r),(r=e.indexOf(t))>=0?i=r+Ze.length:(i=Ze.length+e.length,e.push(t)),i}function it(t,e,i){for(var r={},n=0;ne.value.tag?1:-1}),e.fields=e.fields.concat(r),e.fields=e.fields.concat(n),e}function mt(t,e,i){for(var r=0;r0)return t.glyphs.get(n).getMetrics()}return i}function yt(t,e){for(var i=0,r=t.length-1;i<=r;){var n=i+r>>>1,o=t[n].tag;if(o===e)return n;o>>1,o=t[n];if(o===e)return n;o>>1,s=(i=t[o]).start;if(s===e)return i;s0)return i=t[r-1],e>i.end?0:i}function _t(t,e){this.font=t,this.tableName=e}function bt(t){_t.call(this,t,"gpos")}function St(t){_t.call(this,t,"gsub")}function xt(t,e){var i=t.length;if(i!==e.length)return!1;for(var r=0;r0?(o=t.parseByte(),0==(e&n)&&(o=-o),o=i+o):o=(e&n)>0?i:i+t.parseShort(),o}function Et(t,e,i){var r,n,o=new Ye.Parser(e,i);if(t.numberOfContours=o.parseShort(),t._xMin=o.parseShort(),t._yMin=o.parseShort(),t._xMax=o.parseShort(),t._yMax=o.parseShort(),t.numberOfContours>0){for(var s=t.endPointIndices=[],a=0;a0)for(var c=o.parseByte(),p=0;p0){var d,f=[];if(l>0){for(var m=0;m=0,f.push(d);for(var y=0,v=0;v0?(2&r)>0?(S.dx=o.parseShort(),S.dy=o.parseShort()):S.matchedPoints=[o.parseUShort(),o.parseUShort()]:(2&r)>0?(S.dx=o.parseChar(),S.dy=o.parseChar()):S.matchedPoints=[o.parseByte(),o.parseByte()],(8&r)>0?S.xScale=S.yScale=o.parseF2Dot14():(64&r)>0?(S.xScale=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()):(128&r)>0&&(S.xScale=o.parseF2Dot14(),S.scale01=o.parseF2Dot14(),S.scale10=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()),t.components.push(S),b=!!(32&r)}if(256&r){t.instructionLength=o.parseUShort(),t.instructions=[];for(var x=0;xe.points.length-1||r.matchedPoints[1]>n.points.length-1)throw Error("Matched points out of range in "+e.name);var s=e.points[r.matchedPoints[0]],a=n.points[r.matchedPoints[1]],h={xScale:r.xScale,scale01:r.scale01,scale10:r.scale10,yScale:r.yScale,dx:0,dy:0};a=kt([a],h)[0],h.dx=s.x-a.x,h.dy=s.y-a.y,o=kt(n.points,h)}e.points=e.points.concat(o)}}return Ct(e.points)}function Ot(t){this.font=t,this.getCommands=function(t){return Ri.getPath(t).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function Lt(t){return t}function Ft(t){return Math.sign(t)*Math.round(Math.abs(t))}function It(t){return Math.sign(t)*Math.round(Math.abs(2*t))/2}function Dt(t){return Math.sign(t)*(Math.round(Math.abs(t)+.5)-.5)}function Ut(t){return Math.sign(t)*Math.ceil(Math.abs(t))}function Bt(t){return Math.sign(t)*Math.floor(Math.abs(t))}function Nt(t,e){this.x=t,this.y=e,this.axis=void 0,this.slope=e/t,this.normalSlope=-t/e,Object.freeze(this)}function Gt(t,e){var i=Math.sqrt(t*t+e*e);return e/=i,1==(t/=i)&&0===e?Li:0===t&&1===e?Fi:new Nt(t,e)}function qt(t,e,i,r){this.x=this.xo=Math.round(64*t)/64,this.y=this.yo=Math.round(64*e)/64,this.lastPointOfContour=i,this.onCurve=r,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}function Vt(t,e){switch(this.env=t,this.stack=[],this.prog=e,t){case"glyf":this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=Li,this.round=Ft}}function jt(t){for(var e=t.tZone=new Array(t.gZone.length),i=0;i=176&&i<=183)n+=i-176+1;else if(i>=184&&i<=191)n+=2*(i-184+1);else if(e&&1===o&&27===i)break}while(o>0);t.ip=n}function Wt(t,i){e.DEBUG&&console.log(i.step,"SVTCA["+t.axis+"]"),i.fv=i.pv=i.dpv=t}function Ht(t,i){e.DEBUG&&console.log(i.step,"SPVTCA["+t.axis+"]"),i.pv=i.dpv=t}function Xt(t,i){e.DEBUG&&console.log(i.step,"SFVTCA["+t.axis+"]"),i.fv=t}function Yt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.pv=i.dpv=Gt(r,n)}function Qt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SFVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.fv=Gt(r,n)}function Zt(t){e.DEBUG&&console.log(t.step,"POP[]"),t.stack.pop()}function Jt(t,i){var r=i.stack.pop(),n=i.z0[r],o=i.fv,s=i.pv;e.DEBUG&&console.log(i.step,"MDAP["+t+"]",r);var a=s.distance(n,Ii);t&&(a=i.round(a)),o.setRelative(n,Ii,a,s),o.touch(n),i.rp0=i.rp1=r}function Kt(t,i){var r,n,o,s=i.z2,a=s.length-2;e.DEBUG&&console.log(i.step,"IUP["+t.axis+"]");for(var h=0;h1?"loop "+(i.loop-h)+": ":"")+"SHP["+(t?"rp1":"rp2")+"]",u)}i.loop=1}function te(t,i){var r=i.stack,n=t?i.rp1:i.rp2,o=(t?i.z0:i.z1)[n],s=i.fv,a=i.pv,h=r.pop(),l=i.z2[i.contours[h]],u=l;e.DEBUG&&console.log(i.step,"SHC["+t+"]",h);var c=a.distance(o,o,!1,!0);do{u!==o&&s.setRelative(u,u,c,a),u=u.nextPointOnContour}while(u!==l)}function ee(t,i){var r,n=i.stack,o=t?i.rp1:i.rp2,s=(t?i.z0:i.z1)[o],a=i.fv,h=i.pv,l=n.pop();switch(e.DEBUG&&console.log(i.step,"SHZ["+t+"]",l),l){case 0:r=i.tZone;break;case 1:r=i.gZone;break;default:throw new Error("Invalid zone")}for(var u,c=h.distance(s,s,!1,!0),p=r.length-2,d=0;d",h),i.stack.push(Math.round(64*h))}function se(t,i){var r=i.stack,n=r.pop(),o=i.fv,s=i.pv,a=i.ppem,h=i.deltaBase+16*(t-1),l=i.deltaShift,u=i.z0;e.DEBUG&&console.log(i.step,"DELTAP["+t+"]",n,r);for(var c=0;c>4)===a){var f=(15&d)-8;f>=0&&f++,e.DEBUG&&console.log(i.step,"DELTAPFIX",p,"by",f*l);var m=u[p];o.setRelative(m,m,f*l,s)}}}function ae(t,i){var r=i.stack,n=r.pop();e.DEBUG&&console.log(i.step,"ROUND[]"),r.push(64*i.round(n/64))}function he(t,i){var r=i.stack,n=r.pop(),o=i.ppem,s=i.deltaBase+16*(t-1),a=i.deltaShift;e.DEBUG&&console.log(i.step,"DELTAC["+t+"]",n,r);for(var h=0;h>4)===o){var c=(15&u)-8;c>=0&&c++;var p=c*a;e.DEBUG&&console.log(i.step,"DELTACFIX",l,"by",p),i.cvt[l]+=p}}}function le(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log(i.step,"SDPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.dpv=Gt(r,n)}function ue(t,i){var r=i.stack,n=i.prog,o=i.ip;e.DEBUG&&console.log(i.step,"PUSHB["+t+"]");for(var s=0;s=0?1:-1,h=Math.abs(h),t&&(u=s.cvt[p],n&&Math.abs(h-u)":"_")+(n?"R":"_")+(0===o?"Gr":1===o?"Bl":2===o?"Wh":"")+"]",t?p+"("+s.cvt[p]+","+u+")":"",d,"(d =",a,"->",l*h,")"),s.rp1=s.rp0,s.rp2=d,i&&(s.rp0=d)}function de(t){(t=t||{}).empty||(Mt(t.familyName,"When creating a new Font object, familyName is required."),Mt(t.styleName,"When creating a new Font object, styleName is required."),Mt(t.unitsPerEm,"When creating a new Font object, unitsPerEm is required."),Mt(t.ascender,"When creating a new Font object, ascender is required."),Mt(t.descender,"When creating a new Font object, descender is required."),Mt(t.descender<0,"Descender should be negative (e.g. -512)."),this.names={fontFamily:{en:t.familyName||" "},fontSubfamily:{en:t.styleName||" "},fullName:{en:t.fullName||t.familyName+" "+t.styleName},postScriptName:{en:t.postScriptName||(t.familyName+t.styleName).replace(/\s/g,"")},designer:{en:t.designer||" "},designerURL:{en:t.designerURL||" "},manufacturer:{en:t.manufacturer||" "},manufacturerURL:{en:t.manufacturerURL||" "},license:{en:t.license||" "},licenseURL:{en:t.licenseURL||" "},version:{en:t.version||"Version 0.1"},description:{en:t.description||" "},copyright:{en:t.copyright||" "},trademark:{en:t.trademark||" "}},this.unitsPerEm=t.unitsPerEm||1e3,this.ascender=t.ascender,this.descender=t.descender,this.createdTimestamp=t.createdTimestamp,this.tables={os2:{usWeightClass:t.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:t.widthClass||this.usWidthClasses.MEDIUM,fsSelection:t.fsSelection||this.fsSelectionValues.REGULAR}}),this.supported=!0,this.glyphs=new ei.GlyphSet(this,t.glyphs||[]),this.encoding=new U(this),this.position=new bt(this),this.substitution=new St(this),this.tables=this.tables||{},Object.defineProperty(this,"hinting",{get:function(){return this._hinting?this._hinting:"truetype"===this.outlinesFormat?this._hinting=new Ot(this):void 0}})}function fe(t,e){var i=JSON.stringify(t),r=256;for(var n in e){var o=parseInt(n);if(o&&!(o<256)){if(JSON.stringify(e[n])===i)return o;r<=o&&(r=o+1)}}return e[r]=t,r}function me(t,e,i){var r=fe(e.name,i);return[{name:"tag_"+t,type:"TAG",value:e.tag},{name:"minValue_"+t,type:"FIXED",value:e.minValue<<16},{name:"defaultValue_"+t,type:"FIXED",value:e.defaultValue<<16},{name:"maxValue_"+t,type:"FIXED",value:e.maxValue<<16},{name:"flags_"+t,type:"USHORT",value:0},{name:"nameID_"+t,type:"USHORT",value:r}]}function ye(t,e,i){var r={},n=new Ye.Parser(t,e);return r.tag=n.parseTag(),r.minValue=n.parseFixed(),r.defaultValue=n.parseFixed(),r.maxValue=n.parseFixed(),n.skip("uShort",1),r.name=i[n.parseUShort()]||{},r}function ve(t,e,i,r){for(var n=fe(e.name,r),o=[{name:"nameID_"+t,type:"USHORT",value:n},{name:"flags_"+t,type:"USHORT",value:0}],s=0;s=i)){var n,o=e.charCodeAt(r);return o>=55296&&o<=56319&&i>r+1&&(n=e.charCodeAt(r+1))>=56320&&n<=57343?1024*(o-55296)+n-56320+65536:o}};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}();var we=0,Te=-3,Ae=new i,Me=new i,Pe=new Uint8Array(30),Ee=new Uint16Array(30),ke=new Uint8Array(30),Ce=new Uint16Array(30),Re=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Oe=new i,Le=new Uint8Array(320),Fe=new Uint16Array(16);(function(t,e){var i;for(i=0;i<7;++i)t.table[i]=0;for(t.table[7]=24,t.table[8]=152,t.table[9]=112,i=0;i<24;++i)t.trans[i]=256+i;for(i=0;i<144;++i)t.trans[24+i]=i;for(i=0;i<8;++i)t.trans[168+i]=280+i;for(i=0;i<112;++i)t.trans[176+i]=144+i;for(i=0;i<5;++i)e.table[i]=0;for(e.table[5]=32,i=0;i<32;++i)e.trans[i]=i})(Ae,Me),o(Pe,Ee,4,3),o(ke,Ce,2,1),Pe[28]=0,Ee[28]=258;var Ie=function(t,e){var i,r,o=new n(t,e);do{switch(i=a(o),h(o,2,0)){case 0:r=p(o);break;case 1:r=c(o,Ae,Me);break;case 2:u(o,o.ltree,o.dtree),r=c(o,o.ltree,o.dtree);break;default:r=Te}if(r!==we)throw new Error("Data error")}while(!i);return o.destLenthis.x2&&(this.x2=t)),"number"==typeof e&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),ethis.y2&&(this.y2=e))},f.prototype.addX=function(t){this.addPoint(t,null)},f.prototype.addY=function(t){this.addPoint(null,t)},f.prototype.addBezier=function(t,e,i,r,n,o,s,a){var h=this,l=[t,e],u=[i,r],c=[n,o],p=[s,a];this.addPoint(t,e),this.addPoint(s,a);for(var f=0;f<=1;f++){var m=6*l[f]-12*u[f]+6*c[f],y=-3*l[f]+9*u[f]-9*c[f]+3*p[f],v=3*u[f]-3*l[f];if(0!==y){var g=Math.pow(m,2)-4*v*y;if(!(g<0)){var _=(-m+Math.sqrt(g))/(2*y);0<_&&_<1&&(0===f&&h.addX(d(l[f],u[f],c[f],p[f],_)),1===f&&h.addY(d(l[f],u[f],c[f],p[f],_)));var b=(-m-Math.sqrt(g))/(2*y);0=0&&r>0&&(i+=" "),i+=e(n)}return i}t=void 0!==t?t:2;for(var r="",n=0;n=0&&t<=255,"Byte value should be between 0 and 255."),[t]},Ge.BYTE=g(1),Ne.CHAR=function(t){return[t.charCodeAt(0)]},Ge.CHAR=g(1),Ne.CHARARRAY=function(t){for(var e=[],i=0;i>8&255,255&t]},Ge.USHORT=g(2),Ne.SHORT=function(t){return t>=32768&&(t=-(65536-t)),[t>>8&255,255&t]},Ge.SHORT=g(2),Ne.UINT24=function(t){return[t>>16&255,t>>8&255,255&t]},Ge.UINT24=g(3),Ne.ULONG=function(t){return[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.ULONG=g(4),Ne.LONG=function(t){return t>=Ue&&(t=-(2*Ue-t)),[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONG=g(4),Ne.FIXED=Ne.ULONG,Ge.FIXED=Ge.ULONG,Ne.FWORD=Ne.SHORT,Ge.FWORD=Ge.SHORT,Ne.UFWORD=Ne.USHORT,Ge.UFWORD=Ge.USHORT,Ne.LONGDATETIME=function(t){return[0,0,0,0,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONGDATETIME=g(8),Ne.TAG=function(t){return De.argument(4===t.length,"Tag should be exactly 4 ASCII characters."),[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]},Ge.TAG=g(4),Ne.Card8=Ne.BYTE,Ge.Card8=Ge.BYTE,Ne.Card16=Ne.USHORT,Ge.Card16=Ge.USHORT,Ne.OffSize=Ne.BYTE,Ge.OffSize=Ge.BYTE,Ne.SID=Ne.USHORT,Ge.SID=Ge.USHORT,Ne.NUMBER=function(t){return t>=-107&&t<=107?[t+139]:t>=108&&t<=1131?[247+((t-=108)>>8),255&t]:t>=-1131&&t<=-108?[251+((t=-t-108)>>8),255&t]:t>=-32768&&t<=32767?Ne.NUMBER16(t):Ne.NUMBER32(t)},Ge.NUMBER=function(t){return Ne.NUMBER(t).length},Ne.NUMBER16=function(t){return[28,t>>8&255,255&t]},Ge.NUMBER16=g(3),Ne.NUMBER32=function(t){return[29,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.NUMBER32=g(5),Ne.REAL=function(t){var e=t.toString(),i=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(e);if(i){var r=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));e=(Math.round(t*r)/r).toString()}for(var n="",o=0,s=e.length;o>8&255,e[e.length]=255&r}return e},Ge.UTF16=function(t){return 2*t.length};var qe={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};Be.MACSTRING=function(t,e,i,r){var n=qe[r];if(void 0!==n){for(var o="",s=0;s=128&&void 0===(o=i[o]))return;r[n]=o}return r}},Ge.MACSTRING=function(t,e){var i=Ne.MACSTRING(t,e);return void 0!==i?i.length:0},Ne.VARDELTAS=function(t){for(var e=0,i=[];e=-128&&r<=127?S(t,e,i):x(t,e,i)}return i},Ne.INDEX=function(t){for(var e=1,i=[e],r=[],n=0;n>8,e[c+1]=255&p,e=e.concat(r[u])}return e},Ge.TABLE=function(t){for(var e=0,i=t.fields.length,r=0;r0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parsePointer32=function(t){var e=this.parseOffset32();if(e>0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parseListOfLists=function(t){for(var e=this,i=this.parseOffset16List(),r=i.length,n=this.relativeOffset,o=new Array(r),s=0;s=0;n-=1){var o=Ye.getUShort(t,e+4+8*n),s=Ye.getUShort(t,e+4+8*n+2);if(3===o&&(0===s||1===s||10===s)||0===o&&(0===s||1===s||2===s||3===s||4===s)){r=Ye.getULong(t,e+4+8*n+4);break}}if(-1===r)throw new Error("No valid cmap sub-tables found.");var a=new Ye.Parser(t,e+r);if(i.format=a.parseUShort(),12===i.format)!function(t,e){var i;e.parseUShort(),t.length=e.parseULong(),t.language=e.parseULong(),t.groupCount=i=e.parseULong(),t.glyphIndexMap={};for(var r=0;r>1,e.skip("uShort",3),t.glyphIndexMap={};for(var s=new Ye.Parser(i,r+n+14),a=new Ye.Parser(i,r+n+16+2*o),h=new Ye.Parser(i,r+n+16+4*o),l=new Ye.Parser(i,r+n+16+6*o),u=r+n+16+8*o,c=0;c0;e-=1)if(t.get(e).unicode>65535){console.log("Adding CMAP format 12 (needed!)"),i=!1;break}var r=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:i?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:i?12:20}];i||(r=r.concat([{name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}])),r=r.concat([{name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);var n=new We.Table("cmap",r);for(n.segments=[],e=0;e=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");o.push(n)}else{if(3!==a)throw new Error("CFF Table CID Font FDSelect table has unsupported format "+a);var l=s.parseCard16(),u=s.parseCard16();if(0!==u)throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+u);for(var c,p=0;p=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");if(c>i)throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+c);for(;u=1&&(i.ulCodePageRange1=r.parseULong(),i.ulCodePageRange2=r.parseULong()),i.version>=2&&(i.sxHeight=r.parseShort(),i.sCapHeight=r.parseShort(),i.usDefaultChar=r.parseUShort(),i.usBreakChar=r.parseUShort(),i.usMaxContent=r.parseUShort()),i},make:function(t){return new We.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],t)},unicodeRanges:gi,getUnicodeRange:function(t){for(var e=0;e=i.begin&&t=$e.length){var s=r.parseChar();i.names.push(r.parseString(s))}break;case 2.5:i.numberOfGlyphs=r.parseUShort(),i.offset=new Array(i.numberOfGlyphs);for(var a=0;ay||void 0===e)&&y>0&&(e=y),l 123 are reserved for internal usage");d|=1<0?hi.make(O):void 0,I=bi.make(),D=ni.make(t.glyphs,{version:t.getEnglishName("version"),fullName:E,familyName:M,weightName:P,postScriptName:k,unitsPerEm:t.unitsPerEm,fontBBox:[0,_.yMin,_.ascender,_.advanceWidthMax]}),U=t.metas&&Object.keys(t.metas).length>0?Ai.make(t.metas):void 0,B=[b,S,x,w,L,A,I,D,T];F&&B.push(F),t.tables.gsub&&B.push(Ti.make(t.tables.gsub)),U&&B.push(U);for(var N=ft(B),G=pt(N.encode()),q=N.fields,V=!1,j=0;j=0)return r[n].script;if(e){var o={tag:t,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return r.splice(-1-n,0,o),o.script}}},getLangSysTable:function(t,e,i){var r=this.getScriptTable(t,i);if(r){if(!e||"dflt"===e||"DFLT"===e)return r.defaultLangSys;var n=yt(r.langSysRecords,e);if(n>=0)return r.langSysRecords[n].langSys;if(i){var o={tag:e,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return r.langSysRecords.splice(-1-n,0,o),o.langSys}}},getFeatureTable:function(t,e,i,r){var n=this.getLangSysTable(t,e,r);if(n){for(var o,s=n.featureIndexes,a=this.font.tables[this.tableName].features,h=0;h=a[l-1].tag,"Features must be added in alphabetical order."),o={tag:i,feature:{params:0,lookupListIndexes:[]}},a.push(o),s.push(l),o.feature}}},getLookupTables:function(t,e,i,r,n){var o=this.getFeatureTable(t,e,i,n),s=[];if(o){for(var a,h=o.lookupListIndexes,l=this.font.tables[this.tableName].lookups,u=0;u=0?i:-1;case 2:var r=gt(t.ranges,e);return r?r.index+e-r.start:-1}},expandCoverage:function(t){if(1===t.format)return t.glyphs;for(var e=[],i=t.ranges,r=0;r=0){for(var u=o.ligatureSets[l],c=0;c2)){var r=this.font,n=this._prepState;if(!n||n.ppem!==i){var o=this._fpgmState;if(!o){Vt.prototype=Di,(o=this._fpgmState=new Vt("fpgm",r.tables.fpgm)).funcs=[],o.font=r,e.DEBUG&&(console.log("---EXEC FPGM---"),o.step=-1);try{Ei(o)}catch(t){return console.log("Hinting error in FPGM:"+t),void(this._errorState=3)}}Vt.prototype=o,(n=this._prepState=new Vt("prep",r.tables.prep)).ppem=i;var s=r.tables.cvt;if(s)for(var a=n.cvt=new Array(s.length),h=i/r.unitsPerEm,l=0;l1))try{return ki(t,n)}catch(t){return this._errorState<1&&(console.log("Hinting error:"+t),console.log("Note: further hinting errors are silenced")),void(this._errorState=1)}}},ki=function(t,i){var r,n,o,s=i.ppem/i.font.unitsPerEm,a=s,h=t.components;if(Vt.prototype=i,h){var l=i.font;n=[],r=[];for(var u=0;u1?"loop "+(t.loop-r)+": ":"")+"SHPIX[]",a,o),n.setRelative(h,h,o),n.touch(h)}t.loop=1},function(t){for(var i=t.stack,r=t.rp1,n=t.rp2,o=t.loop,s=t.z0[r],a=t.z1[n],h=t.fv,l=t.dpv,u=t.z2;o--;){var c=i.pop(),p=u[c];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"IP[]",c,r,"<->",n),h.interpolate(p,s,a,l),h.touch(p)}t.loop=1},ie.bind(void 0,0),ie.bind(void 0,1),function(t){for(var i=t.stack,r=t.rp0,n=t.z0[r],o=t.loop,s=t.fv,a=t.pv,h=t.z1;o--;){var l=i.pop(),u=h[l];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"ALIGNRP[]",l),s.setRelative(u,n,0,a),s.touch(u)}t.loop=1},function(t){e.DEBUG&&console.log(t.step,"RTDG[]"),t.round=It},re.bind(void 0,0),re.bind(void 0,1),function(t){var i=t.prog,r=t.ip,n=t.stack,o=i[++r];e.DEBUG&&console.log(t.step,"NPUSHB[]",o);for(var s=0;sr?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"GTEQ[]",r,n),i.push(n>=r?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"EQ[]",r,n),i.push(r===n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"NEQ[]",r,n),i.push(r!==n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ODD[]",r),i.push(Math.trunc(r)%2?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"EVEN[]",r),i.push(Math.trunc(r)%2?0:1)},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"IF[]",i),i||(zt(t,!0),e.DEBUG&&console.log(t.step,"EIF[]"))},function(t){e.DEBUG&&console.log(t.step,"EIF[]")},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"AND[]",r,n),i.push(r&&n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"OR[]",r,n),i.push(r||n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NOT[]",r),i.push(r?0:1)},se.bind(void 0,1),function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDB[]",i),t.deltaBase=i},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDS[]",i),t.deltaShift=Math.pow(.5,i)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"ADD[]",r,n),i.push(n+r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"SUB[]",r,n),i.push(n-r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"DIV[]",r,n),i.push(64*n/r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MUL[]",r,n),i.push(n*r/64)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ABS[]",r),i.push(Math.abs(r))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NEG[]",r),i.push(-r)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"FLOOR[]",r),i.push(64*Math.floor(r/64))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"CEILING[]",r),i.push(64*Math.ceil(r/64))},ae.bind(void 0,0),ae.bind(void 0,1),ae.bind(void 0,2),ae.bind(void 0,3),void 0,void 0,void 0,void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"WCVTF[]",r,n),t.cvt[n]=r*t.ppem/t.font.unitsPerEm},se.bind(void 0,2),se.bind(void 0,3),he.bind(void 0,1),he.bind(void 0,2),he.bind(void 0,3),function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"SROUND[]",r),t.round=Oi,192&r){case 0:i=.5;break;case 64:i=1;break;case 128:i=2;break;default:throw new Error("invalid SROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid SROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"S45ROUND[]",r),t.round=Oi,192&r){case 0:i=Math.sqrt(2)/2;break;case 64:i=Math.sqrt(2);break;case 128:i=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid S45ROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},void 0,void 0,function(t){e.DEBUG&&console.log(t.step,"ROFF[]"),t.round=Lt},void 0,function(t){e.DEBUG&&console.log(t.step,"RUTG[]"),t.round=Ut},function(t){e.DEBUG&&console.log(t.step,"RDTG[]"),t.round=Bt},Zt,Zt,void 0,void 0,void 0,void 0,void 0,function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANCTRL[]",i)},le.bind(void 0,0),le.bind(void 0,1),function(t){var i=t.stack,r=i.pop(),n=0;e.DEBUG&&console.log(t.step,"GETINFO[]",r),1&r&&(n=35),32&r&&(n|=4096),i.push(n)},void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop(),o=i.pop();e.DEBUG&&console.log(t.step,"ROLL[]"),i.push(n),i.push(r),i.push(o)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MAX[]",r,n),i.push(Math.max(n,r))},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MIN[]",r,n),i.push(Math.min(n,r))},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANTYPE[]",i)},function(t){var i=t.stack.pop(),r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"INSTCTRL[]",i,r),i){case 1:return void(t.inhibitGridFit=!!r);case 2:return void(t.ignoreCvt=!!r);default:throw new Error("invalid INSTCTRL[] selector")}},void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,ue.bind(void 0,1),ue.bind(void 0,2),ue.bind(void 0,3),ue.bind(void 0,4),ue.bind(void 0,5),ue.bind(void 0,6),ue.bind(void 0,7),ue.bind(void 0,8),ce.bind(void 0,1),ce.bind(void 0,2),ce.bind(void 0,3),ce.bind(void 0,4),ce.bind(void 0,5),ce.bind(void 0,6),ce.bind(void 0,7),ce.bind(void 0,8),pe.bind(void 0,0,0,0,0,0),pe.bind(void 0,0,0,0,0,1),pe.bind(void 0,0,0,0,0,2),pe.bind(void 0,0,0,0,0,3),pe.bind(void 0,0,0,0,1,0),pe.bind(void 0,0,0,0,1,1),pe.bind(void 0,0,0,0,1,2),pe.bind(void 0,0,0,0,1,3),pe.bind(void 0,0,0,1,0,0),pe.bind(void 0,0,0,1,0,1),pe.bind(void 0,0,0,1,0,2),pe.bind(void 0,0,0,1,0,3),pe.bind(void 0,0,0,1,1,0),pe.bind(void 0,0,0,1,1,1),pe.bind(void 0,0,0,1,1,2),pe.bind(void 0,0,0,1,1,3),pe.bind(void 0,0,1,0,0,0),pe.bind(void 0,0,1,0,0,1),pe.bind(void 0,0,1,0,0,2),pe.bind(void 0,0,1,0,0,3),pe.bind(void 0,0,1,0,1,0),pe.bind(void 0,0,1,0,1,1),pe.bind(void 0,0,1,0,1,2),pe.bind(void 0,0,1,0,1,3),pe.bind(void 0,0,1,1,0,0),pe.bind(void 0,0,1,1,0,1),pe.bind(void 0,0,1,1,0,2),pe.bind(void 0,0,1,1,0,3),pe.bind(void 0,0,1,1,1,0),pe.bind(void 0,0,1,1,1,1),pe.bind(void 0,0,1,1,1,2),pe.bind(void 0,0,1,1,1,3),pe.bind(void 0,1,0,0,0,0),pe.bind(void 0,1,0,0,0,1),pe.bind(void 0,1,0,0,0,2),pe.bind(void 0,1,0,0,0,3),pe.bind(void 0,1,0,0,1,0),pe.bind(void 0,1,0,0,1,1),pe.bind(void 0,1,0,0,1,2),pe.bind(void 0,1,0,0,1,3),pe.bind(void 0,1,0,1,0,0),pe.bind(void 0,1,0,1,0,1),pe.bind(void 0,1,0,1,0,2),pe.bind(void 0,1,0,1,0,3),pe.bind(void 0,1,0,1,1,0),pe.bind(void 0,1,0,1,1,1),pe.bind(void 0,1,0,1,1,2),pe.bind(void 0,1,0,1,1,3),pe.bind(void 0,1,1,0,0,0),pe.bind(void 0,1,1,0,0,1),pe.bind(void 0,1,1,0,0,2),pe.bind(void 0,1,1,0,0,3),pe.bind(void 0,1,1,0,1,0),pe.bind(void 0,1,1,0,1,1),pe.bind(void 0,1,1,0,1,2),pe.bind(void 0,1,1,0,1,3),pe.bind(void 0,1,1,1,0,0),pe.bind(void 0,1,1,1,0,1),pe.bind(void 0,1,1,1,0,2),pe.bind(void 0,1,1,1,0,3),pe.bind(void 0,1,1,1,1,0),pe.bind(void 0,1,1,1,1,1),pe.bind(void 0,1,1,1,1,2),pe.bind(void 0,1,1,1,1,3)];var Ui=Array.from||function(t){return t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]?|[^\uD800-\uDFFF]|./g)||[]};de.prototype.hasChar=function(t){return null!==this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyphIndex=function(t){return this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyph=function(t){var e=this.charToGlyphIndex(t),i=this.glyphs.get(e);return i||(i=this.glyphs.get(0)),i},de.prototype.stringToGlyphs=function(t,e){e=e||this.defaultRenderOptions;for(var i=Ui(t),r=[],n=0;n1&&console.warn("Only the first kern subtable is supported."),t.skip("uLong");var i=255&t.parseUShort();if(t.skip("uShort"),0===i){var r=t.parseUShort();t.skip("uShort",3);for(var n=0;n1)for(var i=1;i-1?e:t}(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(i)}function c(t){var e=new FormData;return t.trim().split("&").forEach(function(t){if(t){var i=t.split("="),r=i.shift().replace(/\+/g," "),n=i.join("=").replace(/\+/g," ");e.append(decodeURIComponent(r),decodeURIComponent(n))}}),e}function p(t){var e=new n;return t.split(/\r?\n/).forEach(function(t){var i=t.split(":"),r=i.shift().trim();if(r){var n=i.join(":").trim();e.append(r,n)}}),e}function d(t,e){e||(e={}),this.type="default",this.status="status"in e?e.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new n(e.headers),this.url=e.url||"",this._initBody(t)}if(!t.fetch){var f={searchParams:"URLSearchParams"in t,iterable:"Symbol"in t&&"iterator"in Symbol,blob:"FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in t,arrayBuffer:"ArrayBuffer"in t};if(f.arrayBuffer)var m=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],y=function(t){return t&&DataView.prototype.isPrototypeOf(t)},v=ArrayBuffer.isView||function(t){return t&&m.indexOf(Object.prototype.toString.call(t))>-1};n.prototype.append=function(t,r){t=e(t),r=i(r);var n=this.map[t];this.map[t]=n?n+","+r:r},n.prototype.delete=function(t){delete this.map[e(t)]},n.prototype.get=function(t){return t=e(t),this.has(t)?this.map[t]:null},n.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},n.prototype.set=function(t,r){this.map[e(t)]=i(r)},n.prototype.forEach=function(t,e){for(var i in this.map)this.map.hasOwnProperty(i)&&t.call(e,this.map[i],i,this)},n.prototype.keys=function(){var t=[];return this.forEach(function(e,i){t.push(i)}),r(t)},n.prototype.values=function(){var t=[];return this.forEach(function(e){t.push(e)}),r(t)},n.prototype.entries=function(){var t=[];return this.forEach(function(e,i){t.push([i,e])}),r(t)},f.iterable&&(n.prototype[Symbol.iterator]=n.prototype.entries);var g=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];u.prototype.clone=function(){return new u(this,{body:this._bodyInit})},l.call(u.prototype),l.call(d.prototype),d.prototype.clone=function(){return new d(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new n(this.headers),url:this.url})},d.error=function(){var t=new d(null,{status:0,statusText:""});return t.type="error",t};var _=[301,302,303,307,308];d.redirect=function(t,e){if(-1===_.indexOf(e))throw new RangeError("Invalid status code");return new d(null,{status:e,headers:{location:t}})},t.Headers=n,t.Request=u,t.Response=d,t.fetch=function(t,e){return new Promise(function(i,r){var n=new u(t,e),o=new XMLHttpRequest;o.onload=function(){var t={status:o.status,statusText:o.statusText,headers:p(o.getAllResponseHeaders()||"")};t.url="responseURL"in o?o.responseURL:t.headers.get("X-Request-URL");var e="response"in o?o.response:o.responseText;i(new d(e,t))},o.onerror=function(){r(new TypeError("Network request failed"))},o.ontimeout=function(){r(new TypeError("Network request failed"))},o.open(n.method,n.url,!0),"include"===n.credentials&&(o.withCredentials=!0),"responseType"in o&&f.blob&&(o.responseType="blob"),n.headers.forEach(function(t,e){o.setRequestHeader(e,t)}),o.send(void 0===n._bodyInit?null:n._bodyInit)})},t.fetch.polyfill=!0}}("undefined"!=typeof self?self:this)},{}],13:[function(t,e,i){"use strict";var r=t("./core/main");t("./core/constants"),t("./core/environment"),t("./core/error_helpers"),t("./core/helpers"),t("./core/legacy"),t("./core/p5.Element"),t("./core/p5.Graphics"),t("./core/p5.Renderer"),t("./core/p5.Renderer2D"),t("./core/rendering"),t("./core/shim"),t("./core/structure"),t("./core/transform"),t("./core/shape/2d_primitives"),t("./core/shape/attributes"),t("./core/shape/curves"),t("./core/shape/vertex"),t("./color/color_conversion"),t("./color/creating_reading"),t("./color/p5.Color"),t("./color/setting"),t("./data/p5.TypedDict"),t("./events/acceleration"),t("./events/keyboard"),t("./events/mouse"),t("./events/touch"),t("./image/filters"),t("./image/image"),t("./image/loading_displaying"),t("./image/p5.Image"),t("./image/pixels"),t("./io/files"),t("./io/p5.Table"),t("./io/p5.TableRow"),t("./io/p5.XML"),t("./math/calculation"),t("./math/math"),t("./math/noise"),t("./math/p5.Vector"),t("./math/random"),t("./math/trigonometry"),t("./typography/attributes"),t("./typography/loading_displaying"),t("./typography/p5.Font"),t("./utilities/array_functions"),t("./utilities/conversion"),t("./utilities/string_functions"),t("./utilities/time_date"),t("./webgl/3d_primitives"),t("./webgl/interaction"),t("./webgl/light"),t("./webgl/loading"),t("./webgl/material"),t("./webgl/p5.Camera"),t("./webgl/p5.Geometry"),t("./webgl/p5.Matrix"),t("./webgl/p5.RendererGL.Immediate"),t("./webgl/p5.RendererGL"),t("./webgl/p5.RendererGL.Retained"),t("./webgl/p5.Shader"),t("./webgl/p5.Texture"),t("./webgl/text"),t("./core/init"),e.exports=r},{"./color/color_conversion":14,"./color/creating_reading":15,"./color/p5.Color":16,"./color/setting":17,"./core/constants":18,"./core/environment":19,"./core/error_helpers":20,"./core/helpers":21,"./core/init":22,"./core/legacy":23,"./core/main":24,"./core/p5.Element":25,"./core/p5.Graphics":26,"./core/p5.Renderer":27,"./core/p5.Renderer2D":28,"./core/rendering":29,"./core/shape/2d_primitives":30,"./core/shape/attributes":31,"./core/shape/curves":32,"./core/shape/vertex":33,"./core/shim":34,"./core/structure":35,"./core/transform":36,"./data/p5.TypedDict":37,"./events/acceleration":38,"./events/keyboard":39,"./events/mouse":40,"./events/touch":41,"./image/filters":42,"./image/image":43,"./image/loading_displaying":44,"./image/p5.Image":45,"./image/pixels":46,"./io/files":47,"./io/p5.Table":48,"./io/p5.TableRow":49,"./io/p5.XML":50,"./math/calculation":51,"./math/math":52,"./math/noise":53,"./math/p5.Vector":54,"./math/random":55,"./math/trigonometry":56,"./typography/attributes":57,"./typography/loading_displaying":58,"./typography/p5.Font":59,"./utilities/array_functions":60,"./utilities/conversion":61,"./utilities/string_functions":62,"./utilities/time_date":63,"./webgl/3d_primitives":64,"./webgl/interaction":65,"./webgl/light":66,"./webgl/loading":67,"./webgl/material":68,"./webgl/p5.Camera":69,"./webgl/p5.Geometry":70,"./webgl/p5.Matrix":71,"./webgl/p5.RendererGL":74,"./webgl/p5.RendererGL.Immediate":72,"./webgl/p5.RendererGL.Retained":73,"./webgl/p5.Shader":75,"./webgl/p5.Texture":76,"./webgl/text":77}],14:[function(t,e,i){"use strict";var r=t("../core/main");r.ColorConversion={},r.ColorConversion._hsbaToHSLA=function(t){var e=t[0],i=t[1],r=t[2],n=(2-i)*r/2;return 0!==n&&(1===n?i=0:n<.5?i/=2-i:i=i*r/(2-2*n)),[e,i,n,t[3]]},r.ColorConversion._hsbaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s,a,h=Math.floor(e),l=r*(1-i),u=r*(1-i*(e-h)),c=r*(1-i*(1+h-e));1===h?(o=u,s=r,a=l):2===h?(o=l,s=r,a=c):3===h?(o=l,s=u,a=r):4===h?(o=c,s=l,a=r):5===h?(o=r,s=l,a=u):(o=r,s=c,a=l),n=[o,s,a,t[3]]}return n},r.ColorConversion._hslaToHSBA=function(t){var e,i=t[0],r=t[1],n=t[2];return[i,r=2*((e=n<.5?(1+r)*n:n+r-n*r)-n)/e,e,t[3]]},r.ColorConversion._hslaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s=2*r-(o=r<.5?(1+i)*r:r+i-r*i),a=function(t,e,i){return t<0?t+=6:t>=6&&(t-=6),t<1?e+(i-e)*t:t<3?i:t<4?e+(i-e)*(4-t):e};n=[a(e+2,s,o),a(e,s,o),a(e-2,s,o),t[3]]}return n},r.ColorConversion._rgbaToHSBA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=s-Math.min(r,n,o);return 0===a?(e=0,i=0):(i=a/s,r===s?e=(n-o)/a:n===s?e=2+(o-r)/a:o===s&&(e=4+(r-n)/a),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,s,t[3]]},r.ColorConversion._rgbaToHSLA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=Math.min(r,n,o),h=s+a,l=s-a;return 0===l?(e=0,i=0):(i=h<1?l/h:l/(2-h),r===s?e=(n-o)/l:n===s?e=2+(o-r)/l:o===s&&(e=4+(r-n)/l),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,h/2,t[3]]},e.exports=r.ColorConversion},{"../core/main":24}],15:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),t("../core/error_helpers"),r.prototype.alpha=function(t){return r._validateParameters("alpha",arguments),this.color(t)._getAlpha()},r.prototype.blue=function(t){return r._validateParameters("blue",arguments),this.color(t)._getBlue()},r.prototype.brightness=function(t){return r._validateParameters("brightness",arguments),this.color(t)._getBrightness()},r.prototype.color=function(){if(r._validateParameters("color",arguments),arguments[0]instanceof r.Color)return arguments[0];var t=arguments[0]instanceof Array?arguments[0]:arguments;return new r.Color(this,t)},r.prototype.green=function(t){return r._validateParameters("green",arguments),this.color(t)._getGreen()},r.prototype.hue=function(t){return r._validateParameters("hue",arguments),this.color(t)._getHue()},r.prototype.lerpColor=function(t,e,i){r._validateParameters("lerpColor",arguments);var o,s,a,h,l,u,c=this._colorMode,p=this._colorMaxes;if(c===n.RGB)l=t.levels.map(function(t){return t/255}),u=e.levels.map(function(t){return t/255});else if(c===n.HSB)t._getBrightness(),e._getBrightness(),l=t.hsba,u=e.hsba;else{if(c!==n.HSL)throw new Error(c+"cannot be used for interpolation.");t._getLightness(),e._getLightness(),l=t.hsla,u=e.hsla}return i=Math.max(Math.min(i,1),0),void 0===this.lerp&&(this.lerp=function(t,e,i){return i*(e-t)+t}),o=this.lerp(l[0],u[0],i),s=this.lerp(l[1],u[1],i),a=this.lerp(l[2],u[2],i),h=this.lerp(l[3],u[3],i),o*=p[c][0],s*=p[c][1],a*=p[c][2],h*=p[c][3],this.color(o,s,a,h)},r.prototype.lightness=function(t){return r._validateParameters("lightness",arguments),this.color(t)._getLightness()},r.prototype.red=function(t){return r._validateParameters("red",arguments),this.color(t)._getRed()},r.prototype.saturation=function(t){return r._validateParameters("saturation",arguments),this.color(t)._getSaturation()},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"./p5.Color":16}],16:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("./color_conversion");r.Color=function(t,e){if(this._storeModeAndMaxes(t._colorMode,t._colorMaxes),this.mode!==n.RGB&&this.mode!==n.HSL&&this.mode!==n.HSB)throw new Error(this.mode+" is an invalid colorMode.");return this._array=r.Color._parseInputs.apply(this,e),this._calculateLevels(),this},r.Color.prototype.toString=function(t){this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsla||(this.hsla=o._rgbaToHSLA(this._array));var e=this.levels,i=this._array,r=i[3];switch(t){case"#rrggbb":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16));case"#rrggbbaa":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16),e[3]<16?"0".concat(e[2].toString(16)):e[3].toString(16));case"#rgb":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16));case"#rgba":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16),Math.round(15*i[3]).toString(16));case"rgb":return"rgb(".concat(e[0],", ",e[1],", ",e[2],")");case"rgb%":return"rgb(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%)");case"rgba%":return"rgba(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%, ",(100*i[3]).toPrecision(3),"%)");case"hsb":case"hsv":return"hsb(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],")");case"hsb%":case"hsv%":return"hsb(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%)");case"hsba":case"hsva":return"hsba(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],", ",r,")");case"hsba%":case"hsva%":return"hsba(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"hsl":return"hsl(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],")");case"hsl%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%)");case"hsla":return"hsla(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],", ",r,")");case"hsla%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"rgba":default:return"rgba("+e[0]+","+e[1]+","+e[2]+","+r+")"}},r.Color.prototype.setRed=function(t){this._array[0]=t/this.maxes[n.RGB][0],this._calculateLevels()},r.Color.prototype.setGreen=function(t){this._array[1]=t/this.maxes[n.RGB][1],this._calculateLevels()},r.Color.prototype.setBlue=function(t){this._array[2]=t/this.maxes[n.RGB][2],this._calculateLevels()},r.Color.prototype.setAlpha=function(t){this._array[3]=t/this.maxes[this.mode][3],this._calculateLevels()},r.Color.prototype._calculateLevels=function(){for(var t=this._array,e=this.levels=new Array(t.length),i=t.length-1;i>=0;--i)e[i]=Math.round(255*t[i])},r.Color.prototype._getAlpha=function(){return this._array[3]*this.maxes[this.mode][3]},r.Color.prototype._storeModeAndMaxes=function(t,e){this.mode=t,this.maxes=e},r.Color.prototype._getMode=function(){return this.mode},r.Color.prototype._getMaxes=function(){return this.maxes},r.Color.prototype._getBlue=function(){return this._array[2]*this.maxes[n.RGB][2]},r.Color.prototype._getBrightness=function(){return this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[2]*this.maxes[n.HSB][2]},r.Color.prototype._getGreen=function(){return this._array[1]*this.maxes[n.RGB][1]},r.Color.prototype._getHue=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[0]*this.maxes[n.HSB][0]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[0]*this.maxes[n.HSL][0])},r.Color.prototype._getLightness=function(){return this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[2]*this.maxes[n.HSL][2]},r.Color.prototype._getRed=function(){return this._array[0]*this.maxes[n.RGB][0]},r.Color.prototype._getSaturation=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[1]*this.maxes[n.HSB][1]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[1]*this.maxes[n.HSL][1])};var s={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},a=/\s*/,h=/(\d{1,3})/,l=/((?:\d+(?:\.\d+)?)|(?:\.\d+))/,u=new RegExp(l.source+"%"),c={HEX3:/^#([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX4:/^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX6:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,HEX8:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,RGB:new RegExp(["^rgb\\(",h.source,",",h.source,",",h.source,"\\)$"].join(a.source),"i"),RGB_PERCENT:new RegExp(["^rgb\\(",u.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),RGBA:new RegExp(["^rgba\\(",h.source,",",h.source,",",h.source,",",l.source,"\\)$"].join(a.source),"i"),RGBA_PERCENT:new RegExp(["^rgba\\(",u.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSL:new RegExp(["^hsl\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSLA:new RegExp(["^hsla\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSB:new RegExp(["^hsb\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSBA:new RegExp(["^hsba\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i")};r.Color._parseInputs=function(t,e,i,a){var h,l=arguments.length,u=this.mode,p=this.maxes[u],d=[];if(l>=3){for(d[0]=t/p[0],d[1]=e/p[1],d[2]=i/p[2],d[3]="number"==typeof a?a/p[3]:1,h=d.length-1;h>=0;--h){var f=d[h];f<0?d[h]=0:f>1&&(d[h]=1)}return u===n.HSL?o._hslaToRGBA(d):u===n.HSB?o._hsbaToRGBA(d):d}if(1===l&&"string"==typeof t){var m=t.trim().toLowerCase();if(s[m])return r.Color._parseInputs.call(this,s[m]);if(c.HEX3.test(m))return(d=c.HEX3.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255}))[3]=1,d;if(c.HEX6.test(m))return(d=c.HEX6.exec(m).slice(1).map(function(t){return parseInt(t,16)/255}))[3]=1,d;if(c.HEX4.test(m))return d=c.HEX4.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255});if(c.HEX8.test(m))return d=c.HEX8.exec(m).slice(1).map(function(t){return parseInt(t,16)/255});if(c.RGB.test(m))return(d=c.RGB.exec(m).slice(1).map(function(t){return t/255}))[3]=1,d;if(c.RGB_PERCENT.test(m))return(d=c.RGB_PERCENT.exec(m).slice(1).map(function(t){return parseFloat(t)/100}))[3]=1,d;if(c.RGBA.test(m))return d=c.RGBA.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):t/255});if(c.RGBA_PERCENT.test(m))return d=c.RGBA_PERCENT.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):parseFloat(t)/100});if(c.HSL.test(m)?(d=c.HSL.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSLA.test(m)&&(d=c.HSLA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),(d=d.map(function(t){return Math.max(Math.min(t,1),0)})).length)return o._hslaToRGBA(d);if(c.HSB.test(m)?(d=c.HSB.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSBA.test(m)&&(d=c.HSBA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),d.length){for(h=d.length-1;h>=0;--h)d[h]=Math.max(Math.min(d[h],1),0);return o._hsbaToRGBA(d)}d=[1,1,1,1]}else{if(1!==l&&2!==l||"number"!=typeof t)throw new Error(arguments+"is not a valid color representation.");d[0]=t/p[2],d[1]=t/p[2],d[2]=t/p[2],d[3]="number"==typeof e?e/p[3]:1,d=d.map(function(t){return Math.max(Math.min(t,1),0)})}return d},e.exports=r.Color},{"../core/constants":18,"../core/main":24,"./color_conversion":14}],17:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),r.prototype.background=function(){return arguments[0]instanceof r.Image?this.image(arguments[0],0,0,this.width,this.height):this._renderer.background.apply(this._renderer,arguments),this},r.prototype.clear=function(){return this._renderer.clear(),this},r.prototype.colorMode=function(t,e,i,o,s){if(r._validateParameters("colorMode",arguments),t===n.RGB||t===n.HSB||t===n.HSL){this._colorMode=t;var a=this._colorMaxes[t];2===arguments.length?(a[0]=e,a[1]=e,a[2]=e,a[3]=e):4===arguments.length?(a[0]=e,a[1]=i,a[2]=o):5===arguments.length&&(a[0]=e,a[1]=i,a[2]=o,a[3]=s)}return this},r.prototype.fill=function(){return this._renderer._setProperty("_fillSet",!0),this._renderer._setProperty("_doFill",!0),this._renderer.fill.apply(this._renderer,arguments),this},r.prototype.noFill=function(){return this._renderer._setProperty("_doFill",!1),this},r.prototype.noStroke=function(){return this._renderer._setProperty("_doStroke",!1),this},r.prototype.stroke=function(){return this._renderer._setProperty("_strokeSet",!0),this._renderer._setProperty("_doStroke",!0),this._renderer.stroke.apply(this._renderer,arguments),this},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Color":16}],18:[function(t,e,i){"use strict";var r=Math.PI;e.exports={P2D:"p2d",WEBGL:"webgl",ARROW:"default",CROSS:"crosshair",HAND:"pointer",MOVE:"move",TEXT:"text",WAIT:"wait",HALF_PI:r/2,PI:r,QUARTER_PI:r/4,TAU:2*r,TWO_PI:2*r,DEGREES:"degrees",RADIANS:"radians",DEG_TO_RAD:r/180,RAD_TO_DEG:180/r,CORNER:"corner",CORNERS:"corners",RADIUS:"radius",RIGHT:"right",LEFT:"left",CENTER:"center",TOP:"top",BOTTOM:"bottom",BASELINE:"alphabetic",POINTS:0,LINES:1,LINE_STRIP:3,LINE_LOOP:2,TRIANGLES:4,TRIANGLE_FAN:6,TRIANGLE_STRIP:5,QUADS:"quads",QUAD_STRIP:"quad_strip",CLOSE:"close",OPEN:"open",CHORD:"chord",PIE:"pie",PROJECT:"square",SQUARE:"butt",ROUND:"round",BEVEL:"bevel",MITER:"miter",RGB:"rgb",HSB:"hsb",HSL:"hsl",AUTO:"auto",ALT:18,BACKSPACE:8,CONTROL:17,DELETE:46,DOWN_ARROW:40,ENTER:13,ESCAPE:27,LEFT_ARROW:37,OPTION:18,RETURN:13,RIGHT_ARROW:39,SHIFT:16,TAB:9,UP_ARROW:38,BLEND:"source-over",ADD:"lighter",DARKEST:"darken",LIGHTEST:"lighten",DIFFERENCE:"difference",EXCLUSION:"exclusion",MULTIPLY:"multiply",SCREEN:"screen",REPLACE:"copy",OVERLAY:"overlay",HARD_LIGHT:"hard-light",SOFT_LIGHT:"soft-light",DODGE:"color-dodge",BURN:"color-burn",THRESHOLD:"threshold",GRAY:"gray",OPAQUE:"opaque",INVERT:"invert",POSTERIZE:"posterize",DILATE:"dilate",ERODE:"erode",BLUR:"blur",NORMAL:"normal",ITALIC:"italic",BOLD:"bold",_DEFAULT_TEXT_FILL:"#000000",_DEFAULT_LEADMULT:1.25,_CTX_MIDDLE:"middle",LINEAR:"linear",QUADRATIC:"quadratic",BEZIER:"bezier",CURVE:"curve",STROKE:"stroke",FILL:"fill",TEXTURE:"texture",IMMEDIATE:"immediate",NEAREST:"nearest",REPEAT:"repeat",CLAMP:"clamp",MIRROR:"mirror",LANDSCAPE:"landscape",PORTRAIT:"portrait",_DEFAULT_STROKE:"#000000",_DEFAULT_FILL:"#FFFFFF",GRID:"grid",AXES:"axes"}},{}],19:[function(t,e,i){"use strict";function r(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth||0}function n(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight||0}var o=t("./main"),s=t("./constants"),a=[s.ARROW,s.CROSS,s.HAND,s.MOVE,s.TEXT,s.WAIT];o.prototype._frameRate=0,o.prototype._lastFrameTime=window.performance.now(),o.prototype._targetFrameRate=60;var h=window.print;o.prototype.print=function(){arguments.length?console.log.apply(console,arguments):h()},o.prototype.frameCount=0,o.prototype.focused=document.hasFocus(),o.prototype.cursor=function(t,e,i){var r="auto",n=this._curElement.elt;if(a.indexOf(t)>-1)r=t;else if("string"==typeof t){var o="";e&&i&&"number"==typeof e&&"number"==typeof i&&(o=e+" "+i),r="http://"===t.substring(0,7)||"https://"===t.substring(0,8)?"url("+t+") "+o+", auto":/\.(cur|jpg|jpeg|gif|png|CUR|JPG|JPEG|GIF|PNG)$/.test(t)?"url("+t+") "+o+", auto":t}n.style.cursor=r},o.prototype.frameRate=function(t){return o._validateParameters("frameRate",arguments),"number"!=typeof t||t<0?this._frameRate:(this._setProperty("_targetFrameRate",t),this._runFrames(),this)},o.prototype.getFrameRate=function(){return this.frameRate()},o.prototype.setFrameRate=function(t){return this.frameRate(t)},o.prototype.noCursor=function(){this._curElement.elt.style.cursor="none"},o.prototype.displayWidth=screen.width,o.prototype.displayHeight=screen.height,o.prototype.windowWidth=r(),o.prototype.windowHeight=n(),o.prototype._onresize=function(t){this._setProperty("windowWidth",r()),this._setProperty("windowHeight",n());var e,i=this._isGlobal?window:this;"function"==typeof i.windowResized&&(void 0===(e=i.windowResized(t))||e||t.preventDefault())},o.prototype.width=0,o.prototype.height=0,o.prototype.fullscreen=function(t){if(o._validateParameters("fullscreen",arguments),void 0===t)return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;t?function(t){if(!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled))throw new Error("Fullscreen not enabled in this browser.");t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.msRequestFullscreen&&t.msRequestFullscreen()}(document.documentElement):document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.msExitFullscreen&&document.msExitFullscreen()},o.prototype.pixelDensity=function(t){var e;return o._validateParameters("pixelDensity",arguments),"number"==typeof t?(t!==this._pixelDensity&&(this._pixelDensity=t,this._pixelsDirty=!0),e=this,this.resizeCanvas(this.width,this.height,!0)):e=this._pixelDensity,e},o.prototype.displayDensity=function(){return window.devicePixelRatio},o.prototype.getURL=function(){return location.href},o.prototype.getURLPath=function(){return location.pathname.split("/").filter(function(t){return""!==t})},o.prototype.getURLParams=function(){for(var t,e=/[?&]([^&=]+)(?:[&=])([^&=]+)/gim,i={};null!=(t=e.exec(location.search));)t.index===e.lastIndex&&e.lastIndex++,i[t[1]]=t[2];return i},e.exports=o},{"./constants":18,"./main":24}],20:[function(t,e,i){"use strict";var r=t("./main");t("./constants"),r._validateParameters=r._friendlyFileLoadError=function(){};var n=null,o=function(){var e={},i=function(t){return Object.getOwnPropertyNames(t).filter(function(t){return!("_"===t[0]||t in e||(e[t]=!0,0))}).map(function(e){var i;return i="function"==typeof t[e]?"function":e===e.toUpperCase()?"constant":"variable",{name:e,type:i}})};(n=[].concat(i(r.prototype),i(t("./constants")))).sort(function(t,e){return e.name.length-t.name.length})},s=function(t,e){e||(e=console.log.bind(console)),n||o(),n.some(function(i){if(t.message&&null!==t.message.match("\\W?"+i.name+"\\W"))return e("Did you just try to use p5.js's "+i.name+("function"===i.type?"() ":" ")+i.type+"? If so, you may want to move it into your sketch's setup() function.\n\nFor more details, see: https://github.com/processing/p5.js/wiki/p5.js-overview#why-cant-i-assign-variables-using-p5-functions-and-variables-before-setup"),!0})};r.prototype._helpForMisusedAtTopLevelCode=s,"complete"!==document.readyState&&(window.addEventListener("error",s,!1),window.addEventListener("load",function(){window.removeEventListener("error",s,!1)})),e.exports=r},{"../../docs/reference/data.json":void 0,"./constants":18,"./main":24}],21:[function(t,e,i){"use strict";var r=t("./constants");e.exports={modeAdjust:function(t,e,i,n,o){return o===r.CORNER?{x:t,y:e,w:i,h:n}:o===r.CORNERS?{x:t,y:e,w:i-t,h:n-e}:o===r.RADIUS?{x:t-i,y:e-n,w:2*i,h:2*n}:o===r.CENTER?{x:t-.5*i,y:e-.5*n,w:i,h:n}:void 0}}},{"./constants":18}],22:[function(t,e,i){"use strict";var r=t("../core/main"),n=function(){window.mocha||(window.setup&&"function"==typeof window.setup||window.draw&&"function"==typeof window.draw)&&!r.instance&&new r};"complete"===document.readyState?n():window.addEventListener("load",n,!1)},{"../core/main":24}],23:[function(t,e,i){"use strict";var r=t("./main");r.prototype.exit=function(){throw new Error("exit() not implemented, see remove()")},r.prototype.pushStyle=function(){throw new Error("pushStyle() not used, see push()")},r.prototype.popStyle=function(){throw new Error("popStyle() not used, see pop()")},r.prototype.size=function(){var t="size() is not a valid p5 function, to set the size of the ";throw new Error(t+="drawing canvas, please use createCanvas() instead")},e.exports=r},{"./main":24}],24:[function(t,e,i){"use strict";t("./shim");var r=t("./constants"),n=function(t,e,i){"boolean"==typeof e&&void 0===i&&(i=e,e=void 0),this._setupDone=!1,this._pixelDensity=Math.ceil(window.devicePixelRatio)||1,this._userNode=e,this._curElement=null,this._elements=[],this._requestAnimId=0,this._preloadCount=0,this._isGlobal=!1,this._loop=!0,this._initializeInstanceVariables(),this._defaultCanvasSize={width:100,height:100},this._events={mousemove:null,mousedown:null,mouseup:null,dragend:null,dragover:null,click:null,dblclick:null,mouseover:null,mouseout:null,keydown:null,keyup:null,keypress:null,touchstart:null,touchmove:null,touchend:null,resize:null,blur:null},this._events.wheel=null,this._loadingScreenId="p5_loading",this._registeredMethods={};for(var r=Object.getOwnPropertyNames(n.prototype._registeredMethods),o=0;o=i-5)&&(this.redraw(),this._frameRate=1e3/(t-this._lastFrameTime),this._lastFrameTime=t,void 0!==this._updateMouseCoords&&this._updateMouseCoords()),this._loop&&(this._requestAnimId=window.requestAnimationFrame(this._draw))}.bind(this),this._runFrames=function(){this._updateInterval&&clearInterval(this._updateInterval)}.bind(this),this._setProperty=function(t,e){this[t]=e,this._isGlobal&&(window[t]=e)}.bind(this),this.remove=function(){var t=document.getElementById(this._loadingScreenId);if(t&&(t.parentNode.removeChild(t),this._incrementPreload()),this._curElement){for(var e in this._loop=!1,this._requestAnimId&&window.cancelAnimationFrame(this._requestAnimId),this._events)window.removeEventListener(e,this._events[e]);for(var i=0;i-1?o.readAsText(n):o.readAsDataURL(n)}},this)):console.log("The File APIs are not fully supported in this browser."),this},s.Element.prototype._setProperty=function(t,e){this[t]=e},e.exports=s.Element},{"./main":24}],26:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");r.Graphics=function(t,e,i,o){var s=i||n.P2D;for(var a in this.canvas=document.createElement("canvas"),(o._userNode||document.body).appendChild(this.canvas),r.Element.call(this,this.canvas,o,!1),r.prototype)this[a]||("function"==typeof r.prototype[a]?this[a]=r.prototype[a].bind(this):this[a]=r.prototype[a]);return r.prototype._initializeInstanceVariables.apply(this),this.width=t,this.height=e,this._pixelDensity=o._pixelDensity,s===n.WEBGL?this._renderer=new r.RendererGL(this.canvas,this,!1):this._renderer=new r.Renderer2D(this.canvas,this,!1),o._elements.push(this),this._renderer.resize(t,e),this._renderer._applyDefaults(),this},r.Graphics.prototype=Object.create(r.Element.prototype),r.Graphics.prototype.remove=function(){this.elt.parentNode&&this.elt.parentNode.removeChild(this.elt);var t=this._pInst._elements.indexOf(this);for(var e in-1!==t&&this._pInst._elements.splice(t,1),this._events)this.elt.removeEventListener(e,this._events[e])},e.exports=r.Graphics},{"./constants":18,"./main":24}],27:[function(t,e,i){"use strict";function r(t){var e=0,i=0;if(t.offsetParent)do{e+=t.offsetLeft,i+=t.offsetTop}while(t=t.offsetParent);else e+=t.offsetLeft,i+=t.offsetTop;return[e,i]}var n=t("./main"),o=t("../core/constants");n.Renderer=function(t,e,i){n.Element.call(this,t,e),this.canvas=t,i?(this._isMainCanvas=!0,this._pInst._setProperty("_curElement",this),this._pInst._setProperty("canvas",this.canvas),this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height)):(this.canvas.style.display="none",this._styles=[]),this._textSize=12,this._textLeading=15,this._textFont="sans-serif",this._textStyle=o.NORMAL,this._textAscent=null,this._textDescent=null,this._textAlign=o.LEFT,this._textBaseline=o.BASELINE,this._rectMode=o.CORNER,this._ellipseMode=o.CENTER,this._curveTightness=0,this._imageMode=o.CORNER,this._tint=null,this._doStroke=!0,this._doFill=!0,this._strokeSet=!1,this._fillSet=!1},n.Renderer.prototype=Object.create(n.Element.prototype),n.Renderer.prototype.push=function(){return{properties:{_doStroke:this._doStroke,_strokeSet:this._strokeSet,_doFill:this._doFill,_fillSet:this._fillSet,_tint:this._tint,_imageMode:this._imageMode,_rectMode:this._rectMode,_ellipseMode:this._ellipseMode,_textFont:this._textFont,_textLeading:this._textLeading,_textSize:this._textSize,_textAlign:this._textAlign,_textBaseline:this._textBaseline,_textStyle:this._textStyle}}},n.Renderer.prototype.pop=function(t){t.properties&&Object.assign(this,t.properties)},n.Renderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.elt.width=t*this._pInst._pixelDensity,this.elt.height=e*this._pInst._pixelDensity,this.elt.style.width=t+"px",this.elt.style.height=e+"px",this._isMainCanvas&&(this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height))},n.Renderer.prototype.textLeading=function(t){return"number"==typeof t?(this._setProperty("_textLeading",t),this._pInst):this._textLeading},n.Renderer.prototype.textSize=function(t){return"number"==typeof t?(this._setProperty("_textSize",t),this._setProperty("_textLeading",t*o._DEFAULT_LEADMULT),this._applyTextProperties()):this._textSize},n.Renderer.prototype.textStyle=function(t){return t?(t!==o.NORMAL&&t!==o.ITALIC&&t!==o.BOLD||this._setProperty("_textStyle",t),this._applyTextProperties()):this._textStyle},n.Renderer.prototype.textAscent=function(){return null===this._textAscent&&this._updateTextMetrics(),this._textAscent},n.Renderer.prototype.textDescent=function(){return null===this._textDescent&&this._updateTextMetrics(),this._textDescent},n.Renderer.prototype.textAlign=function(t,e){return void 0!==t?(this._setProperty("_textAlign",t),void 0!==e&&this._setProperty("_textBaseline",e),this._applyTextProperties()):{horizontal:this._textAlign,vertical:this._textBaseline}},n.Renderer.prototype.text=function(t,e,i,r,n){var s,a,h,l,u,c,p,d,f=this._pInst,m=Number.MAX_VALUE;if((this._doFill||this._doStroke)&&void 0!==t){if("string"!=typeof t&&(t=t.toString()),t=t.replace(/(\t)/g," "),s=t.split("\n"),void 0!==r){for(d=0,h=0;hr?(u=p[a]+" ",d+=f.textLeading()):u=c;switch(this._rectMode===o.CENTER&&(e-=r/2,i-=n/2),this._textAlign){case o.CENTER:e+=r/2;break;case o.RIGHT:e+=r}var y=!1;if(void 0!==n){switch(this._textBaseline){case o.BOTTOM:i+=n-d;break;case o.CENTER:i+=(n-d)/2;break;case o.BASELINE:y=!0,this._textBaseline=o.TOP}m=i+n-f.textAscent()}for(h=0;hr&&u.length>0?(this._renderText(f,u,e,i,m),u=p[a]+" ",i+=f.textLeading()):u=c;this._renderText(f,u,e,i,m),i+=f.textLeading(),y&&(this._textBaseline=o.BASELINE)}}else{var v=0,g=f.textAlign().vertical;for(g===o.CENTER?v=(s.length-1)*f.textLeading()/2:g===o.BOTTOM&&(v=(s.length-1)*f.textLeading()),l=0;l0&&(c=u.width/t.width),this.drawingContext.drawImage(u,c*e,c*i,c*n,c*o,s,a,h,l)}catch(t){if("NS_ERROR_NOT_AVAILABLE"!==t.name)throw t}this._pInst._pixelsDirty=!0},r.Renderer2D.prototype._getTintedImageCanvas=function(t){if(!t.canvas)return t;var e=o._toPixels(t.canvas),i=document.createElement("canvas");i.width=t.canvas.width,i.height=t.canvas.height;for(var r=i.getContext("2d"),n=r.createImageData(t.canvas.width,t.canvas.height),s=n.data,a=0;a=this.width||e>=this.height)return[0,0,0,255];var o=this._pInst||this,s=o._pixelDensity;t=Math.floor(t),e=Math.floor(e),i=Math.floor(i),n=Math.floor(n);var a,h,l=t*s,u=e*s;if(1!==i||1!==n||this instanceof r.RendererGL){var c=Math.min(i,o.width),p=Math.min(n,o.height),d=c*s,f=p*s,m=new r.Image(c,p);return m.canvas.getContext("2d").drawImage(this.canvas,l,u,d,f,0,0,c,p),m}return o._pixelsDirty?(a=this.drawingContext.getImageData(l,u,1,1).data,h=0):(a=o.pixels,h=4*(l+u*this.width*s)),[a[h+0],a[h+1],a[h+2],a[h+3]]},r.Renderer2D.prototype.loadPixels=function(){var t=this._pInst||this;if(t._pixelsDirty){t._pixelsDirty=!1;var e=t._pixelDensity,i=this.width*e,r=this.height*e,n=this.drawingContext.getImageData(0,0,i,r);t._setProperty("imageData",n),t._setProperty("pixels",n.data)}},r.Renderer2D.prototype.set=function(t,e,i){t=Math.floor(t),e=Math.floor(e);var n=this._pInst||this;if(i instanceof r.Image)this.drawingContext.save(),this.drawingContext.setTransform(1,0,0,1,0,0),this.drawingContext.scale(n._pixelDensity,n._pixelDensity),this.drawingContext.drawImage(i.canvas,t,e),this.drawingContext.restore(),n._pixelsDirty=!0;else{var o=0,s=0,a=0,h=0,l=4*(e*n._pixelDensity*(this.width*n._pixelDensity)+t*n._pixelDensity);if(n.imageData&&!n._pixelsDirty||n.loadPixels.call(n),"number"==typeof i)l1e-5;)c=Math.min(s-o,n.HALF_PI),p.push(this._acuteArcToBezier(o,c)),o+=c;return this._doFill&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a!==n.PIE&&null!=a||h.lineTo(t,e),h.closePath(),h.fill()),this._doStroke&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a===n.PIE?(h.lineTo(t,e),h.closePath()):a===n.CHORD&&h.closePath(),h.stroke()),this},r.Renderer2D.prototype.ellipse=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;var l=.5522847498,u=a/2*l,c=h/2*l,p=n+a,d=o+h,f=n+a/2,m=o+h/2;e.beginPath(),e.moveTo(n,m),e.bezierCurveTo(n,m-c,f-u,o,f,o),e.bezierCurveTo(f+u,o,p,m-c,p,m),e.bezierCurveTo(p,m+c,f+u,d,f,d),e.bezierCurveTo(f-u,d,n,m+c,n,m),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.line=function(t,e,i,r){var n=this.drawingContext;return this._doStroke?this._getStroke()===s?this:(n.lineWidth%2==1&&n.translate(.5,.5),n.beginPath(),n.moveTo(t,e),n.lineTo(i,r),n.stroke(),n.lineWidth%2==1&&n.translate(-.5,-.5),this):this},r.Renderer2D.prototype.point=function(t,e){var i=this.drawingContext;if(!this._doStroke)return this;if(this._getStroke()===s)return this;var r=this._getStroke(),o=this._getFill();t=Math.round(t),e=Math.round(e),this._setFill(r),i.lineWidth>1?(i.beginPath(),i.arc(t,e,i.lineWidth/2,0,n.TWO_PI,!1),i.fill()):i.fillRect(t,e,1,1),this._setFill(o)},r.Renderer2D.prototype.quad=function(t,e,i,r,n,o,a,h){var l=this.drawingContext,u=this._doFill,c=this._doStroke;if(u&&!c){if(this._getFill()===s)return this}else if(!u&&c&&this._getStroke()===s)return this;return l.beginPath(),l.moveTo(t,e),l.lineTo(i,r),l.lineTo(n,o),l.lineTo(a,h),l.closePath(),u&&l.fill(),c&&l.stroke(),this},r.Renderer2D.prototype.rect=function(t){var e=t[0],i=t[1],r=t[2],n=t[3],o=t[4],a=t[5],h=t[6],l=t[7],u=this.drawingContext,c=this._doFill,p=this._doStroke;if(c&&!p){if(this._getFill()===s)return this}else if(!c&&p&&this._getStroke()===s)return this;if(this._doStroke&&u.lineWidth%2==1&&u.translate(.5,.5),u.beginPath(),void 0===o)u.rect(e,i,r,n);else{void 0===a&&(a=o),void 0===h&&(h=a),void 0===l&&(l=h);var d=r/2,f=n/2;r<2*o&&(o=d),n<2*o&&(o=f),r<2*a&&(a=d),n<2*a&&(a=f),r<2*h&&(h=d),n<2*h&&(h=f),r<2*l&&(l=d),n<2*l&&(l=f),u.beginPath(),u.moveTo(e+o,i),u.arcTo(e+r,i,e+r,i+n,a),u.arcTo(e+r,i+n,e,i+n,h),u.arcTo(e,i+n,e,i,l),u.arcTo(e,i,e+r,i,o),u.closePath()}return this._doFill&&u.fill(),this._doStroke&&u.stroke(),this._doStroke&&u.lineWidth%2==1&&u.translate(-.5,-.5),this},r.Renderer2D.prototype.triangle=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3],l=t[4],u=t[5];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;e.beginPath(),e.moveTo(n,o),e.lineTo(a,h),e.lineTo(l,u),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.endShape=function(t,e,i,r,o,s,a){if(0===e.length)return this;if(!this._doStroke&&!this._doFill)return this;var h,l=t===n.CLOSE;l&&!s&&e.push(e[0]);var u,c,p=e.length;if(!i||a!==n.POLYGON&&null!==a)if(!r||a!==n.POLYGON&&null!==a)if(!o||a!==n.POLYGON&&null!==a)if(a===n.POINTS)for(u=0;u2){for(this.drawingContext.beginPath(),u=2;u3)for(u=0;u+13){var d=[],f=1-this._curveTightness;for(this.drawingContext.beginPath(),this.drawingContext.moveTo(e[1][0],e[1][1]),u=1;u+2=o))return t.push(),this._isOpenType()?this._textFont._renderPath(e,i,r,{renderer:this}):(this._doStroke&&this._strokeSet&&this.drawingContext.strokeText(e,i,r),this._doFill&&(this._fillSet||this._setFill(n._DEFAULT_TEXT_FILL),this.drawingContext.fillText(e,i,r))),t.pop(),this._pInst._pixelsDirty=!0,t},r.Renderer2D.prototype.textWidth=function(t){return this._isOpenType()?this._textFont._textWidth(t,this._textSize):this.drawingContext.measureText(t).width},r.Renderer2D.prototype._applyTextProperties=function(){var t,e=this._pInst;return this._setProperty("_textAscent",null),this._setProperty("_textDescent",null),t=this._textFont,this._isOpenType()&&(t=this._textFont.font.familyName,this._setProperty("_textStyle",this._textFont.font.styleName)),this.drawingContext.font=(this._textStyle||"normal")+" "+(this._textSize||12)+"px "+(t||"sans-serif"),this.drawingContext.textAlign=this._textAlign,this._textBaseline===n.CENTER?this.drawingContext.textBaseline=n._CTX_MIDDLE:this.drawingContext.textBaseline=this._textBaseline,e},r.Renderer2D.prototype.push=function(){return this.drawingContext.save(),r.Renderer.prototype.push.apply(this)},r.Renderer2D.prototype.pop=function(t){this.drawingContext.restore(),this._cachedFillStyle=this.drawingContext.fillStyle,this._cachedStrokeStyle=this.drawingContext.strokeStyle,r.Renderer.prototype.pop.call(this,t)},e.exports=r.Renderer2D},{"../image/filters":42,"./constants":18,"./main":24,"./p5.Renderer":27}],29:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");t("./p5.Graphics"),t("./p5.Renderer2D"),t("../webgl/p5.RendererGL");var o="defaultCanvas0",s="p5Canvas";r.prototype.createCanvas=function(t,e,i){r._validateParameters("createCanvas",arguments);var a,h=i||n.P2D;if(h===n.WEBGL){if(a=document.getElementById(o)){a.parentNode.removeChild(a);var l=this._renderer;this._elements=this._elements.filter(function(t){return t!==l})}(a=document.createElement("canvas")).id=o,a.classList.add(s)}else if(this._defaultGraphicsCreated)a=this.canvas;else{a=document.createElement("canvas");for(var u=0;document.getElementById("defaultCanvas"+u);)u++;o="defaultCanvas"+u,a.id=o,a.classList.add(s)}return this._setupDone||(a.dataset.hidden=!0,a.style.visibility="hidden"),this._userNode?this._userNode.appendChild(a):document.body.appendChild(a),h===n.WEBGL?(this._setProperty("_renderer",new r.RendererGL(a,this,!0)),this._elements.push(this._renderer)):this._defaultGraphicsCreated||(this._setProperty("_renderer",new r.Renderer2D(a,this,!0)),this._defaultGraphicsCreated=!0,this._elements.push(this._renderer)),this._renderer.resize(t,e),this._renderer._applyDefaults(),this._renderer},r.prototype.resizeCanvas=function(t,e,i){if(r._validateParameters("resizeCanvas",arguments),this._renderer){var n={};for(var o in this.drawingContext){var s=this.drawingContext[o];"object"!=typeof s&&"function"!=typeof s&&(n[o]=s)}for(var a in this._renderer.resize(t,e),this.width=t,this.height=e,n)try{this.drawingContext[a]=n[a]}catch(t){}i||this.redraw()}},r.prototype.noCanvas=function(){this.canvas&&this.canvas.parentNode.removeChild(this.canvas)},r.prototype.createGraphics=function(t,e,i){return r._validateParameters("createGraphics",arguments),new r.Graphics(t,e,i,this)},r.prototype.blendMode=function(t){if(r._validateParameters("blendMode",arguments),t!==n.BLEND&&t!==n.DARKEST&&t!==n.LIGHTEST&&t!==n.DIFFERENCE&&t!==n.MULTIPLY&&t!==n.EXCLUSION&&t!==n.SCREEN&&t!==n.REPLACE&&t!==n.OVERLAY&&t!==n.HARD_LIGHT&&t!==n.SOFT_LIGHT&&t!==n.DODGE&&t!==n.BURN&&t!==n.ADD&&t!==n.NORMAL)throw new Error("Mode "+t+" not recognized.");this._renderer.blendMode(t)},e.exports=r},{"../webgl/p5.RendererGL":74,"./constants":18,"./main":24,"./p5.Graphics":26,"./p5.Renderer2D":28}],30:[function(t,e,i){"use strict";var r=t("../main"),n=t("../constants"),o=t("../helpers");t("../error_helpers"),r.prototype.arc=function(t,e,i,s,a,h,l,u){if(r._validateParameters("arc",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;for(a=this._toRadians(a),h=this._toRadians(h);a<0;)a+=n.TWO_PI;for(;h<0;)h+=n.TWO_PI;void 0!==a&&void 0!==h&&(h.toFixed(10)===a.toFixed(10)||Math.abs(h-a)===n.TWO_PI?(a%=n.TWO_PI,h%=n.TWO_PI,a+=n.TWO_PI):Math.abs(h-a)>n.TWO_PI&&(a%=n.TWO_PI,h%=n.TWO_PI,h+=n.TWO_PI)),a<=n.HALF_PI?a=Math.atan(i/s*Math.tan(a)):a>n.HALF_PI&&a<=3*n.HALF_PI&&(a=Math.atan(i/s*Math.tan(a))+n.PI),h<=n.HALF_PI?h=Math.atan(i/s*Math.tan(h)):h>n.HALF_PI&&h<=3*n.HALF_PI&&(h=Math.atan(i/s*Math.tan(h))+n.PI),a>h&&(h+=n.TWO_PI),i=Math.abs(i),s=Math.abs(s);var c=o.modeAdjust(t,e,i,s,this._renderer._ellipseMode);return this._renderer.arc(c.x,c.y,c.w,c.h,a,h,l,u),this},r.prototype.ellipse=function(t,e,i,n,s){if(r._validateParameters("ellipse",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;i<0&&(i=Math.abs(i)),void 0===n?n=i:n<0&&(n=Math.abs(n));var a=o.modeAdjust(t,e,i,n,this._renderer._ellipseMode);return this._renderer.ellipse([a.x,a.y,a.w,a.h,s]),this},r.prototype.line=function(){return r._validateParameters("line",arguments),this._renderer._doStroke&&this._renderer.line.apply(this._renderer,arguments),this},r.prototype.point=function(){return r._validateParameters("point",arguments),this._renderer._doStroke&&this._renderer.point.apply(this._renderer,arguments),this},r.prototype.quad=function(){return r._validateParameters("quad",arguments),(this._renderer._doStroke||this._renderer._doFill)&&this._renderer.quad.apply(this._renderer,arguments),this},r.prototype.rect=function(){if(r._validateParameters("rect",arguments),this._renderer._doStroke||this._renderer._doFill){for(var t=o.modeAdjust(arguments[0],arguments[1],arguments[2],arguments[3],this._renderer._rectMode),e=[t.x,t.y,t.w,t.h],i=4;i0))throw new Error("vertex() must be used once before calling quadraticVertex()");u=!0;for(var e=[],i=0;id||Math.abs(this.accelerationY-this.pAccelerationY)>d||Math.abs(this.accelerationZ-this.pAccelerationZ)>d)&&t();var e=this.deviceTurned||window.deviceTurned;if("function"==typeof e){var i=this.rotationX+180,r=this.pRotationX+180,m=a+180;i-r>0&&i-r<270||i-r<-270?u="clockwise":(i-r<0||i-r>270)&&(u="counter-clockwise"),u!==n&&(m=i),Math.abs(i-m)>90&&Math.abs(i-m)<270&&(m=i,this._setProperty("turnAxis","X"),e()),n=u,a=m-180;var y=this.rotationY+180,v=this.pRotationY+180,g=h+180;y-v>0&&y-v<270||y-v<-270?c="clockwise":(y-v<0||y-this.pRotationY>270)&&(c="counter-clockwise"),c!==o&&(g=y),Math.abs(y-g)>90&&Math.abs(y-g)<270&&(g=y,this._setProperty("turnAxis","Y"),e()),o=c,h=g-180,this.rotationZ-this.pRotationZ>0&&this.rotationZ-this.pRotationZ<270||this.rotationZ-this.pRotationZ<-270?p="clockwise":(this.rotationZ-this.pRotationZ<0||this.rotationZ-this.pRotationZ>270)&&(p="counter-clockwise"),p!==s&&(l=this.rotationZ),Math.abs(this.rotationZ-l)>90&&Math.abs(this.rotationZ-l)<270&&(l=this.rotationZ,this._setProperty("turnAxis","Z"),e()),s=p,this._setProperty("turnAxis",void 0)}var _,b,S=this.deviceShaken||window.deviceShaken;"function"==typeof S&&(null!==this.pAccelerationX&&(_=Math.abs(this.accelerationX-this.pAccelerationX),b=Math.abs(this.accelerationY-this.pAccelerationY)),_+b>f&&S())},e.exports=r},{"../core/main":24}],39:[function(t,e,i){"use strict";var r=t("../core/main"),n={};r.prototype.isKeyPressed=!1,r.prototype.keyIsPressed=!1,r.prototype.key="",r.prototype.keyCode=0,r.prototype._onkeydown=function(t){if(!n[t.which]){this._setProperty("isKeyPressed",!0),this._setProperty("keyIsPressed",!0),this._setProperty("keyCode",t.which),n[t.which]=!0,this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which);var e=this.keyPressed||window.keyPressed;"function"!=typeof e||t.charCode||!1===e(t)&&t.preventDefault()}},r.prototype._onkeyup=function(t){var e=this.keyReleased||window.keyReleased;n[t.which]=!1,function(){for(var t in n)if(n.hasOwnProperty(t)&&!0===n[t])return!0;return!1}()||(this._setProperty("isKeyPressed",!1),this._setProperty("keyIsPressed",!1)),this._setProperty("_lastKeyCodeTyped",null),this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which),this._setProperty("keyCode",t.which),"function"==typeof e&&!1===e(t)&&t.preventDefault()},r.prototype._onkeypress=function(t){if(t.which!==this._lastKeyCodeTyped){this._setProperty("keyCode",t.which),this._setProperty("_lastKeyCodeTyped",t.which),this._setProperty("key",String.fromCharCode(t.which));var e=this.keyTyped||window.keyTyped;"function"==typeof e&&!1===e(t)&&t.preventDefault()}},r.prototype._onblur=function(t){n={}},r.prototype.keyIsDown=function(t){return r._validateParameters("keyIsDown",arguments),n[t]},e.exports=r},{"../core/main":24}],40:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._hasMouseInteracted=!1,r.prototype.mouseX=0,r.prototype.mouseY=0,r.prototype.pmouseX=0,r.prototype.pmouseY=0,r.prototype.winMouseX=0,r.prototype.winMouseY=0,r.prototype.pwinMouseX=0,r.prototype.pwinMouseY=0,r.prototype.mouseButton=0,r.prototype.mouseIsPressed=!1,r.prototype._updateNextMouseCoords=function(t){if(null!==this._curElement&&(!t.touches||t.touches.length>0)){var e=function(t,e,i,r){r&&!r.clientX&&(r.touches?r=r.touches[0]:r.changedTouches&&(r=r.changedTouches[0]));var n=t.getBoundingClientRect(),o=t.scrollWidth/e,s=t.scrollHeight/i;return{x:(r.clientX-n.left)/o,y:(r.clientY-n.top)/s,winX:r.clientX,winY:r.clientY,id:r.identifier}}(this._curElement.elt,this.width,this.height,t);this._setProperty("mouseX",e.x),this._setProperty("mouseY",e.y),this._setProperty("winMouseX",e.winX),this._setProperty("winMouseY",e.winY)}this._hasMouseInteracted||(this._updateMouseCoords(),this._setProperty("_hasMouseInteracted",!0))},r.prototype._updateMouseCoords=function(){this._setProperty("pmouseX",this.mouseX),this._setProperty("pmouseY",this.mouseY),this._setProperty("pwinMouseX",this.winMouseX),this._setProperty("pwinMouseY",this.winMouseY),this._setProperty("_pmouseWheelDeltaY",this._mouseWheelDeltaY)},r.prototype._setMouseButton=function(t){1===t.button?this._setProperty("mouseButton",n.CENTER):2===t.button?this._setProperty("mouseButton",n.RIGHT):this._setProperty("mouseButton",n.LEFT)},r.prototype._onmousemove=function(t){var e=this._isGlobal?window:this;this._updateNextMouseCoords(t),this.mouseIsPressed?"function"==typeof e.mouseDragged?!1===e.mouseDragged(t)&&t.preventDefault():"function"==typeof e.touchMoved&&!1===e.touchMoved(t)&&t.preventDefault():"function"==typeof e.mouseMoved&&!1===e.mouseMoved(t)&&t.preventDefault()},r.prototype._onmousedown=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!0),this._setMouseButton(t),this._updateNextMouseCoords(t),"function"==typeof e.mousePressed?!1===e.mousePressed(t)&&t.preventDefault():"function"==typeof e.touchStarted&&!1===e.touchStarted(t)&&t.preventDefault()},r.prototype._onmouseup=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!1),"function"==typeof e.mouseReleased?!1===e.mouseReleased(t)&&t.preventDefault():"function"==typeof e.touchEnded&&!1===e.touchEnded(t)&&t.preventDefault()},r.prototype._ondragend=r.prototype._onmouseup,r.prototype._ondragover=r.prototype._onmousemove,r.prototype._onclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.mouseClicked&&!1===e.mouseClicked(t)&&t.preventDefault()},r.prototype._ondblclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.doubleClicked&&!1===e.doubleClicked(t)&&t.preventDefault()},r.prototype._mouseWheelDeltaY=0,r.prototype._pmouseWheelDeltaY=0,r.prototype._onwheel=function(t){var e=this._isGlobal?window:this;this._setProperty("_mouseWheelDeltaY",t.deltaY),"function"==typeof e.mouseWheel&&(t.delta=t.deltaY,!1===e.mouseWheel(t)&&t.preventDefault())},e.exports=r},{"../core/constants":18,"../core/main":24}],41:[function(t,e,i){"use strict";function r(t,e,i,r,n){n=n||0;var o=t.getBoundingClientRect(),s=t.scrollWidth/e,a=t.scrollHeight/i,h=r.touches[n]||r.changedTouches[n];return{x:(h.clientX-o.left)/s,y:(h.clientY-o.top)/a,winX:h.clientX,winY:h.clientY,id:h.identifier}}var n=t("../core/main");n.prototype.touches=[],n.prototype._updateTouchCoords=function(t){if(null!==this._curElement){for(var e=[],i=0;i=r)break;x=0}for(A=x;A=r);A++){var O=c[g+R];M=a[A],v+=M[(-16777216&O)>>>24],f+=M[(16711680&O)>>16],m+=M[(65280&O)>>8],y+=M[255&O],d+=s[A],g++}P[_=R+w]=v/d,E[_]=f/d,k[_]=m/d,C[_]=y/d}R+=r}for(R=0,S=(b=-n)*r,T=0;T=l)break;x=0,_=b,g=w+S}for(A=x;A=l);A++)M=a[A],v+=M[P[g]],f+=M[E[g]],m+=M[k[g]],y+=M[C[g]],d+=s[A],_++,g+=r;c[w+R]=v/d<<24|f/d<<16|m/d<<8|y/d}R+=r,S+=r,b++}h._setPixels(i,c)}var n,o,s,a,h={_toPixels:function(t){return t instanceof ImageData?t.data:t.getContext("2d").getImageData(0,0,t.width,t.height).data},_getARGB:function(t,e){var i=4*e;return t[i+3]<<24&4278190080|t[i]<<16&16711680|t[i+1]<<8&65280|255&t[i+2]},_setPixels:function(t,e){for(var i=0,r=0,n=t.length;r>>16,t[i+1]=(65280&e[r])>>>8,t[i+2]=255&e[r],t[i+3]=(4278190080&e[r])>>>24},_toImageData:function(t){return t instanceof ImageData?t:t.getContext("2d").getImageData(0,0,t.width,t.height)},_createImageData:function(t,e){return h._tmpCanvas=document.createElement("canvas"),h._tmpCtx=h._tmpCanvas.getContext("2d"),this._tmpCtx.createImageData(t,e)},apply:function(t,e,i){var r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),o=e(n,i);o instanceof ImageData?r.putImageData(o,0,0,0,0,t.width,t.height):r.putImageData(n,0,0,0,0,t.width,t.height)},threshold:function(t,e){var i=h._toPixels(t);void 0===e&&(e=.5);for(var r=Math.floor(255*e),n=0;n=r?255:0,i[n]=i[n+1]=i[n+2]=o}},gray:function(t){for(var e=h._toPixels(t),i=0;i255)throw new Error("Level must be greater than 2 and less than 255 for posterize");for(var r=e-1,n=0;n>8)/r,i[n+1]=255*(s*e>>8)/r,i[n+2]=255*(a*e>>8)/r}},dilate:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))>(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m>o&&(n=c,o=m),v>o&&(n=d,o=v),g>o&&(n=f,o=g),x[b++]=n;h._setPixels(_,x)},erode:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))<(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m=1&&(e=o[0]),o.length>=2&&(i=o[1]),i=i||r.prototype._checkFileExtension(e,i)[1]||"png"){default:n="image/png";break;case"jpeg":case"jpg":n="image/jpeg"}t.toBlob(function(t){r.prototype.downloadFile(t,e,i)},n)},r.prototype.saveFrames=function(t,e,i,o,s){r._validateParameters("saveFrames",arguments);var a=i||3;a=r.prototype.constrain(a,0,15),a*=1e3;var h=o||15;h=r.prototype.constrain(h,0,22);var l=0,u=r.prototype._makeFrame,c=this._curElement.elt,p=setInterval(function(){u(t+l,e,c),l++},1e3/h);setTimeout(function(){if(clearInterval(p),s)s(n);else for(var t=0;t0&&t0&&this.loadPixels(),this.setModified(!0),this._pixelsDirty=!0},r.Image.prototype.copy=function(){var t,e,i,n,o,s,a,h,l;if(9===arguments.length)t=arguments[0],e=arguments[1],i=arguments[2],n=arguments[3],o=arguments[4],s=arguments[5],a=arguments[6],h=arguments[7],l=arguments[8];else{if(8!==arguments.length)throw new Error("Signature not supported");t=this,e=arguments[0],i=arguments[1],n=arguments[2],o=arguments[3],s=arguments[4],a=arguments[5],h=arguments[6],l=arguments[7]}r.Renderer2D._copyHelper(this,t,e,i,n,o,s,a,h,l),this._pixelsDirty=!0},r.Image.prototype.mask=function(t){void 0===t&&(t=this);var e=this.drawingContext.globalCompositeOperation,i=1;t instanceof r.Renderer&&(i=t._pInst._pixelDensity);var n=[t,0,0,i*t.width,i*t.height,0,0,this.width,this.height];this.drawingContext.globalCompositeOperation="destination-in",r.Image.prototype.copy.apply(this,n),this.drawingContext.globalCompositeOperation=e,this.setModified(!0)},r.Image.prototype.filter=function(t,e){n.apply(this.canvas,n[t.toLowerCase()],e),this.setModified(!0)},r.Image.prototype.blend=function(){r.prototype.blend.apply(this,arguments),this.setModified(!0)},r.Image.prototype.setModified=function(t){this._modified=t},r.Image.prototype.isModified=function(){return this._modified},r.Image.prototype.save=function(t,e){r.prototype.saveCanvas(this.canvas,t,e)},e.exports=r.Image},{"../core/main":24,"./filters":42}],46:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("./filters");t("../color/p5.Color"),r.prototype.pixels=[],r.prototype.blend=function(){r._validateParameters("blend",arguments),this._renderer?this._renderer.blend.apply(this._renderer,arguments):r.Renderer2D.prototype.blend.apply(this,arguments)},r.prototype.copy=function(){r._validateParameters("copy",arguments),r.Renderer2D.prototype.copy.apply(this._renderer,arguments)},r.prototype.filter=function(t,e){r._validateParameters("filter",arguments),void 0!==this.canvas?n.apply(this.canvas,n[t.toLowerCase()],e):n.apply(this.elt,n[t.toLowerCase()],e)},r.prototype.get=function(t,e,i,r){return this._renderer.get(t,e,i,r)},r.prototype.loadPixels=function(){r._validateParameters("loadPixels",arguments),this._renderer.loadPixels()},r.prototype.set=function(t,e,i){this._renderer.set(t,e,i)},r.prototype.updatePixels=function(t,e,i,n){r._validateParameters("updatePixels",arguments),0!==this.pixels.length&&this._renderer.updatePixels(t,e,i,n)},e.exports=r},{"../color/p5.Color":16,"../core/main":24,"./filters":42}],47:[function(t,e,i){"use strict";function r(t,e){var i={};if(void 0===(e=e||[]))for(var r=0;r/g,">").replace(/"/g,""").replace(/'/g,"'")}function o(t,e){e&&!0!==e&&"true"!==e||(e=""),t||(t="untitled");var i="";return t&&t.indexOf(".")>-1&&(i=t.split(".").pop()),e&&i!==e&&(t=t+"."+(i=e)),[t,i]}var s=t("../core/main");t("whatwg-fetch"),t("es6-promise").polyfill();var a=t("fetch-jsonp");t("../core/error_helpers"),s.prototype.loadJSON=function(){s._validateParameters("loadJSON",arguments);for(var t,e,i,r=arguments[0],n={},o="json",a=1;a0&&"function"==typeof arguments[u];u--)h++;var c=arguments.length-h,p=arguments[0];if(2===c&&"string"==typeof p&&"object"==typeof arguments[1])r=new Request(p,arguments[1]),e=arguments[2],i=arguments[3];else{for(var d,f="GET",m=1;m64e6&&s._friendlyFileLoadError(7,p),t){case"json":case"jsonp":return e.json();case"binary":return e.blob();case"arrayBuffer":return e.arrayBuffer();case"xml":return e.text().then(function(t){return function t(e){var i=new s.XML,r=e.childNodes;if(r&&r.length){for(var n=0;n"),o.print("");var p=' "),o.print(""),o.print(" "),"0"!==a[0]){o.print(" ");for(var d=0;d"+f),o.print(" ")}o.print(" ")}for(var m=0;m");for(var y=0;y"+g),o.print(" ")}o.print(" ")}o.print("
"),o.print(""),o.print("")}o.close(),o.clear()},s.prototype.writeFile=function(t,e,i){var r="application/octet-stream";s.prototype._isSafari()&&(r="text/plain");var n=new Blob(t,{type:r});s.prototype.downloadFile(n,e,i)},s.prototype.downloadFile=function(e,i,r){var n=o(i,r),a=n[0];if(e instanceof Blob)t("file-saver").saveAs(e,a);else{var h=document.createElement("a");if(h.href=e,h.download=a,h.onclick=function(t){(function(t){document.body.removeChild(t.target)})(t),t.stopPropagation()},h.style.display="none",document.body.appendChild(h),s.prototype._isSafari()){var l="Hello, Safari user! To download this file...\n";l+="1. Go to File --\x3e Save As.\n",l+='2. Choose "Page Source" as the Format.\n',l+='3. Name it with this extension: ."'+n[1]+'"',alert(l)}h.click()}},s.prototype._checkFileExtension=o,s.prototype._isSafari=function(){return Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0},e.exports=s},{"../core/error_helpers":20,"../core/main":24,"es6-promise":4,"fetch-jsonp":5,"file-saver":6,"whatwg-fetch":12}],48:[function(t,e,i){"use strict";var r=t("../core/main");r.Table=function(t){this.columns=[],this.rows=[]},r.Table.prototype.addRow=function(t){var e=t||new r.TableRow;if(void 0===e.arr||void 0===e.obj)throw new Error("invalid TableRow: "+e);return e.table=this,this.rows.push(e),e},r.Table.prototype.removeRow=function(t){this.rows[t].table=null;var e=this.rows.splice(t+1,this.rows.length);this.rows.pop(),this.rows=this.rows.concat(e)},r.Table.prototype.getRow=function(t){return this.rows[t]},r.Table.prototype.getRows=function(){return this.rows},r.Table.prototype.findRow=function(t,e){if("string"==typeof e){for(var i=0;i=0))throw new Error('This table has no column named "'+t+'"');i=e[t],r[i]=e}else r[n]=this.rows[n].obj;return r},r.Table.prototype.getArray=function(){for(var t=[],e=0;e=0))throw new Error('This table has no column named "'+t+'"');this.obj[t]=e,this.arr[i]=e}else{if(!(t0},r.XML.prototype.listChildren=function(){return this.children.map(function(t){return t.name})},r.XML.prototype.getChildren=function(t){return t?this.children.filter(function(e){return e.name===t}):this.children},r.XML.prototype.getChild=function(t){if("string"!=typeof t)return this.children[t];for(var e=0;eo&&(o=a),n[s]=a}0===o&&(o=1);for(var h=0,l=0,u=0;u=1&&(f++,v--),g>=1&&(m++,g--),_>=1&&(y++,_--)}return b},n.prototype.noiseDetail=function(t,e){t>0&&(s=t),e>0&&(a=e)},n.prototype.noiseSeed=function(t){var e=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();e.setSeed(t),r=new Array(o+1);for(var i=0;it*t&&this.div(Math.sqrt(e)).mult(t),this},r.Vector.prototype.setMag=function(t){return this.normalize().mult(t)},r.Vector.prototype.heading=function(){var t=Math.atan2(this.y,this.x);return this.p5?this.p5._fromRadians(t):t},r.Vector.prototype.rotate=function(t){var e=this.heading()+t;this.p5&&(e=this.p5._toRadians(e));var i=this.mag();return this.x=Math.cos(e)*i,this.y=Math.sin(e)*i,this},r.Vector.prototype.angleBetween=function(t){var e=this.dot(t)/(this.mag()*t.mag()),i=Math.acos(Math.min(1,Math.max(-1,e)));return this.p5?this.p5._fromRadians(i):i},r.Vector.prototype.lerp=function(t,e,i,n){return t instanceof r.Vector?this.lerp(t.x,t.y,t.z,e):(this.x+=(t-this.x)*n||0,this.y+=(e-this.y)*n||0,this.z+=(i-this.z)*n||0,this)},r.Vector.prototype.array=function(){return[this.x||0,this.y||0,this.z||0]},r.Vector.prototype.equals=function(t,e,i){var n,o,s;return t instanceof r.Vector?(n=t.x||0,o=t.y||0,s=t.z||0):t instanceof Array?(n=t[0]||0,o=t[1]||0,s=t[2]||0):(n=t||0,o=e||0,s=i||0),this.x===n&&this.y===o&&this.z===s},r.Vector.fromAngle=function(t,e){return void 0===e&&(e=1),new r.Vector(e*Math.cos(t),e*Math.sin(t),0)},r.Vector.fromAngles=function(t,e,i){void 0===i&&(i=1);var n=Math.cos(e),o=Math.sin(e),s=Math.cos(t),a=Math.sin(t);return new r.Vector(i*a*o,-i*s,i*a*n)},r.Vector.random2D=function(){return this.fromAngle(Math.random()*n.TWO_PI)},r.Vector.random3D=function(){var t=Math.random()*n.TWO_PI,e=2*Math.random()-1,i=Math.sqrt(1-e*e),o=i*Math.cos(t),s=i*Math.sin(t);return new r.Vector(o,s,e)},r.Vector.add=function(t,e,i){return i?i.set(t):i=t.copy(),i.add(e),i},r.Vector.sub=function(t,e,i){return i?i.set(t):i=t.copy(),i.sub(e),i},r.Vector.mult=function(t,e,i){return i?i.set(t):i=t.copy(),i.mult(e),i},r.Vector.div=function(t,e,i){return i?i.set(t):i=t.copy(),i.div(e),i},r.Vector.dot=function(t,e){return t.dot(e)},r.Vector.cross=function(t,e){return t.cross(e)},r.Vector.dist=function(t,e){return t.dist(e)},r.Vector.lerp=function(t,e,i,r){return r?r.set(t):r=t.copy(),r.lerp(e,i),r},r.Vector.mag=function(t){var e=t.x,i=t.y,r=t.z,n=e*e+i*i+r*r;return Math.sqrt(n)},e.exports=r.Vector},{"../core/constants":18,"../core/main":24}],55:[function(t,e,i){"use strict";var r=t("../core/main"),n=!1,o=!1,s=0,a=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();r.prototype.randomSeed=function(t){a.setSeed(t),n=!0,o=!1},r.prototype.random=function(t,e){var i;if(i=n?a.rand():Math.random(),void 0===t)return i;if(void 0===e)return t instanceof Array?t[Math.floor(i*t.length)]:i*t;if(t>e){var r=t;t=e,e=r}return i*(e-t)+t},r.prototype.randomGaussian=function(t,e){var i,r,n,a;if(o)i=s,o=!1;else{do{r=this.random(2)-1,n=this.random(2)-1,a=r*r+n*n}while(a>=1);a=Math.sqrt(-2*Math.log(a)/a),i=r*a,s=n*a,o=!0}var h=t||0;return i*(e||1)+h},e.exports=r},{"../core/main":24}],56:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._angleMode=n.RADIANS,r.prototype.acos=function(t){return this._fromRadians(Math.acos(t))},r.prototype.asin=function(t){return this._fromRadians(Math.asin(t))},r.prototype.atan=function(t){return this._fromRadians(Math.atan(t))},r.prototype.atan2=function(t,e){return this._fromRadians(Math.atan2(t,e))},r.prototype.cos=function(t){return Math.cos(this._toRadians(t))},r.prototype.sin=function(t){return Math.sin(this._toRadians(t))},r.prototype.tan=function(t){return Math.tan(this._toRadians(t))},r.prototype.degrees=function(t){return t*n.RAD_TO_DEG},r.prototype.radians=function(t){return t*n.DEG_TO_RAD},r.prototype.angleMode=function(t){t!==n.DEGREES&&t!==n.RADIANS||(this._angleMode=t)},r.prototype._toRadians=function(t){return this._angleMode===n.DEGREES?t*n.DEG_TO_RAD:t},r.prototype._toDegrees=function(t){return this._angleMode===n.RADIANS?t*n.RAD_TO_DEG:t},r.prototype._fromRadians=function(t){return this._angleMode===n.DEGREES?t*n.RAD_TO_DEG:t},e.exports=r},{"../core/constants":18,"../core/main":24}],57:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.textAlign=function(t,e){return r._validateParameters("textAlign",arguments),this._renderer.textAlign.apply(this._renderer,arguments)},r.prototype.textLeading=function(t){return r._validateParameters("textLeading",arguments),this._renderer.textLeading.apply(this._renderer,arguments)},r.prototype.textSize=function(t){return r._validateParameters("textSize",arguments),this._renderer.textSize.apply(this._renderer,arguments)},r.prototype.textStyle=function(t){return r._validateParameters("textStyle",arguments),this._renderer.textStyle.apply(this._renderer,arguments)},r.prototype.textWidth=function(t){return r._validateParameters("textWidth",arguments),0===t.length?0:this._renderer.textWidth.apply(this._renderer,arguments)},r.prototype.textAscent=function(){return r._validateParameters("textAscent",arguments),this._renderer.textAscent()},r.prototype.textDescent=function(){return r._validateParameters("textDescent",arguments),this._renderer.textDescent()},r.prototype._updateTextMetrics=function(){return this._renderer._updateTextMetrics()},e.exports=r},{"../core/main":24}],58:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("opentype.js");t("../core/error_helpers"),r.prototype.loadFont=function(t,e,i){r._validateParameters("loadFont",arguments);var n=new r.Font(this),s=this;return o.load(t,function(o,a){if(o)return void 0!==i?i(o):(r._friendlyFileLoadError(4,t),void console.error(o,t));n.font=a,void 0!==e&&e(n),s._decrementPreload();var h,l,u=t.split("\\").pop().split("/").pop(),c=u.lastIndexOf("."),p=c<1?null:u.substr(c+1);["ttf","otf","woff","woff2"].indexOf(p)>-1&&(h=u.substr(0,c),(l=document.createElement("style")).appendChild(document.createTextNode("\n@font-face {\nfont-family: "+h+";\nsrc: url("+t+");\n}\n")),document.head.appendChild(l))}),n},r.prototype.text=function(t,e,i,n,o){return r._validateParameters("text",arguments),this._renderer._doFill||this._renderer._doStroke?this._renderer.text.apply(this._renderer,arguments):this},r.prototype.textFont=function(t,e){if(r._validateParameters("textFont",arguments),arguments.length){if(!t)throw new Error("null font passed to textFont");return this._renderer._setProperty("_textFont",t),e&&(this._renderer._setProperty("_textSize",e),this._renderer._setProperty("_textLeading",e*n._DEFAULT_LEADMULT)),this._renderer._applyTextProperties()}return this._renderer._textFont},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"opentype.js":10}],59:[function(t,e,i){"use strict";function r(t,e){for(var i=function(t,e){if("object"!=typeof t)t=e;else for(var i in e)void 0===t[i]&&(t[i]=e[i]);return t}(e,{sampleFactor:.1,simplifyThreshold:0}),r=c(t,0,1),o=r/(r*i.sampleFactor),s=[],a=0;a3&&r>=0;--r)h(a(t,r-1),a(t,r),a(t,r+1),e)&&(t.splice(r%t.length,1),i++);return i}function o(t){for(var e,i=[],r=0;rg||v<_)&&(T+=180),{x:f,y:m,m:{x:y,y:v},n:{x:g,y:_},start:{x:b,y:S},end:{x:x,y:w},alpha:T}}function u(t,e,i,r,n,o,s,a,h){return null==h?v(t,e,i,r,n,o,s,a):l(t,e,i,r,n,o,s,a,function(t,e,i,r,n,o,s,a,h){if(!(h<0||v(t,e,i,r,n,o,s,a).01;)u/=2,l=v(t,e,i,r,n,o,s,a,c+=(le&&!i)return{x:(a=u(r,n,o[1],o[2],o[3],o[4],o[5],o[6],e-h)).x,y:a.y,alpha:a.alpha};h+=s,r=+o[5],n=+o[6]}o.shift()}return(a=i?h:l(r,n,o[0],o[1],o[2],o[3],o[4],o[5],1)).alpha&&(a={x:a.x,y:a.y,alpha:a.alpha}),a}function p(t){var e=[],i=0,r=0,n=0,o=0,s=0;if(!t)return e;"M"===t[0][0]&&(i=+t[0][1],r=+t[0][2],n=i,o=r,s++,e[0]=["M",i,r]);for(var a,h,l,u=3===t.length&&"M"===t[0][0]&&"R"===t[1][0].toUpperCase()&&"Z"===t[2][0].toUpperCase(),c=s,p=t.length;c1&&(w=Math.sqrt(w),r*=w,n*=w);var T=r*r,A=n*n,M=(s===a?-1:1)*Math.sqrt(Math.abs((T*A-T*x*x-A*S*S)/(T*x*x+A*S*S)));d=M*r*x/n+(e+h)/2,f=M*-n*S/r+(i+l)/2,c=Math.asin(((i-f)/n).toFixed(9)),p=Math.asin(((l-f)/n).toFixed(9)),c=ep&&(c-=2*y),!a&&p>c&&(p-=2*y)}var P=p-c;if(Math.abs(P)>v){var E=p,k=h,C=l;p=c+v*(a&&p>c?1:-1),h=d+r*Math.cos(p),l=f+n*Math.sin(p),_=t(h,l,r,n,o,0,a,k,C,[p,E,d,f])}P=p-c;var R=Math.cos(c),O=Math.sin(c),L=Math.cos(p),F=Math.sin(p),I=Math.tan(P/4),D=4/3*r*I,U=4/3*n*I,B=[e,i],N=[e+D*O,i-U*R],G=[h+D*F,l-U*L],q=[h,l];if(N[0]=2*B[0]-N[0],N[1]=2*B[1]-N[1],u)return[N,G,q].concat(_);for(var V=[],j=0,z=(_=[N,G,q].concat(_).join().split(",")).length;j7){t[e].shift();for(var o=t[e];o.length;)a[e]="A",n&&(h[e]="A"),t.splice(e++,0,["C"].concat(o.splice(0,6)));t.splice(e,1),i=Math.max(r.length,n&&n.length||0)}},c=function(t,e,o,s,a){t&&e&&"M"===t[a][0]&&"M"!==e[a][0]&&(e.splice(a,0,["M",s.x,s.y]),o.bx=0,o.by=0,o.x=t[a][1],o.y=t[a][2],i=Math.max(r.length,n&&n.length||0))},d="",f="";i=Math.max(r.length,n&&n.length||0);for(var v=0;vr;r+=2){var o=[{x:+t[r-2],y:+t[r-1]},{x:+t[r],y:+t[r+1]},{x:+t[r+2],y:+t[r+3]},{x:+t[r+4],y:+t[r+5]}];e?r?n-4===r?o[3]={x:+t[0],y:+t[1]}:n-2===r&&(o[2]={x:+t[0],y:+t[1]},o[3]={x:+t[2],y:+t[3]}):o[0]={x:+t[n-2],y:+t[n-1]}:n-4===r?o[3]=o[2]:r||(o[0]={x:+t[r],y:+t[r+1]}),i.push(["C",(-o[0].x+6*o[1].x+o[2].x)/6,(-o[0].y+6*o[1].y+o[2].y)/6,(o[1].x+6*o[2].x-o[3].x)/6,(o[1].y+6*o[2].y-o[3].y)/6,o[2].x,o[2].y])}return i}function m(t,e,i,r){return[t,e,i,r,i,r]}function y(t,e,i,r,n,o){var s=1/3,a=2/3;return[s*t+a*i,s*e+a*r,s*n+a*i,s*o+a*r,n,o]}function v(t,e,i,r,n,o,s,a,h){null==h&&(h=1);for(var l=(h=h>1?1:h<0?0:h)/2,u=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],c=0,p=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],d=0;d<12;d++){var f=l*u[d]+l,m=g(f,t,i,n,s),y=g(f,e,r,o,a),v=m*m+y*y;c+=p[d]*Math.sqrt(v)}return l*c}function g(t,e,i,r,n){return t*(t*(-3*e+9*i-9*r+3*n)+6*e-12*i+6*r)-3*e+3*i}function _(){for(var t="",e=arguments.length-1;e>=0;--e){var i=arguments[e];t+=i===Object(i)?JSON.stringify(i):i}return t}var b=t("../core/main"),S=t("../core/constants");b.Font=function(t){this.parent=t,this.cache={},this.font=void 0},b.Font.prototype.list=function(){throw new Error("not yet implemented")},b.Font.prototype.textBounds=function(t,e,i,r,n){e=void 0!==e?e:0,i=void 0!==i?i:0,r=r||this.parent._renderer._textSize;var o=n&&n.renderer&&n.renderer._pInst||this.parent,s=o._renderer,a=s._textAlign||S.LEFT,h=s._textBaseline||S.BASELINE,l=_("textBounds",t,e,i,r,a,h),u=this.cache[l];if(!u){var c,p,d,f,m,y=[],v=[],g=this._scale(r);this.font.forEachGlyph(t,e,i,r,n,function(t,e,i,r){var n=t.getMetrics();y.push(e+n.xMin*g),y.push(e+n.xMax*g),v.push(i+-n.yMin*g),v.push(i+-n.yMax*g)}),c=Math.min.apply(null,y),p=Math.min.apply(null,v),d=Math.max.apply(null,y),f=Math.max.apply(null,v),u={x:c,y:p,h:f-p,w:d-c,advance:c-e},m=this._handleAlignment(s,t,u.x,u.y,u.w+u.advance),u.x=m.x,u.y=m.y,this.cache[_("textBounds",t,e,i,r,a,h)]=u}return u},b.Font.prototype.textToPoints=function(t,e,i,n,s){function a(e){return u[e].name&&"space"===u[e].name||t.length===u.length&&" "===t[e]||u[e].index&&3===u[e].index}var h=0,l=[],u=this._getGlyphs(t);n=n||this.parent._renderer._textSize;for(var c=0;c2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&"number"==typeof r.decimals&&(n=r.decimals),t.toPathData(n)},b.Font.prototype._getSVG=function(t,e,i,r){var n=3;return"string"==typeof t&&arguments.length>2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&("number"==typeof r.decimals&&(n=r.decimals),"number"==typeof r.strokeWidth&&(t.strokeWidth=r.strokeWidth),void 0!==r.fill&&(t.fill=r.fill),void 0!==r.stroke&&(t.stroke=r.stroke)),t.toSVG(n)},b.Font.prototype._renderPath=function(t,e,i,r){var n,o=r&&r.renderer||this.parent._renderer,s=o.drawingContext;n="object"==typeof t&&t.commands?t.commands:this._getPath(t,e,i,r).commands,s.beginPath();for(var a=0;a1;)i=Math.random()*o|0,r=t[--o],t[o]=t[i],t[i]=r;return t},r.prototype.sort=function(t,e){var i=e?t.slice(0,Math.min(e,t.length)):t,r=e?t.slice(Math.min(e,t.length)):[];return(i="string"==typeof i[0]?i.sort():i.sort(function(t,e){return t-e})).concat(r)},r.prototype.splice=function(t,e,i){return Array.prototype.splice.apply(t,[i,0].concat(e)),t},r.prototype.subset=function(t,e,i){return void 0!==i?t.slice(e,e+i):t.slice(e,t.length)},e.exports=r},{"../core/main":24}],61:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.float=function(t){return t instanceof Array?t.map(parseFloat):parseFloat(t)},r.prototype.int=function(t,e){return e=e||10,"string"==typeof t?parseInt(t,e):"number"==typeof t?0|t:"boolean"==typeof t?t?1:0:t instanceof Array?t.map(function(t){return r.prototype.int(t,e)}):void 0},r.prototype.str=function(t){return t instanceof Array?t.map(r.prototype.str):String(t)},r.prototype.boolean=function(t){return"number"==typeof t?0!==t:"string"==typeof t?"true"===t.toLowerCase():"boolean"==typeof t?t:t instanceof Array?t.map(r.prototype.boolean):void 0},r.prototype.byte=function(t){var e=r.prototype.int(t,10);return"number"==typeof e?(e+128)%256-128:e instanceof Array?e.map(r.prototype.byte):void 0},r.prototype.char=function(t){return"number"!=typeof t||isNaN(t)?t instanceof Array?t.map(r.prototype.char):"string"==typeof t?r.prototype.char(parseInt(t,10)):void 0:String.fromCharCode(t)},r.prototype.unchar=function(t){return"string"==typeof t&&1===t.length?t.charCodeAt(0):t instanceof Array?t.map(r.prototype.unchar):void 0},r.prototype.hex=function(t,e){if(e=void 0===e||null===e?e=8:e,t instanceof Array)return t.map(function(t){return r.prototype.hex(t,e)});if("number"==typeof t){t<0&&(t=4294967295+t+1);for(var i=Number(t).toString(16).toUpperCase();i.length=e&&(i=i.substring(i.length-e,i.length)),i}},r.prototype.unhex=function(t){return t instanceof Array?t.map(r.prototype.unhex):parseInt("0x"+t,16)},e.exports=r},{"../core/main":24}],62:[function(t,e,i){"use strict";function r(t,e,i){var r=t<0,n=r?t.toString().substring(1):t.toString(),o=n.indexOf("."),s=-1!==o?n.substring(0,o):n,a=-1!==o?n.substring(o+1):"",h=r?"-":"";if(void 0!==i){var l="";(-1!==o||i-a.length>0)&&(l="."),a.length>i&&(a=a.substring(0,i));for(var u=0;ur.length)for(var o=e-(r+=-1===i?".":"").length+1,s=0;s0?"+"+t.toString():t.toString()}function s(t){return parseFloat(t)>0?" "+t.toString():t.toString()}var a=t("../core/main");t("../core/error_helpers"),a.prototype.join=function(t,e){return a._validateParameters("join",arguments),t.join(e)},a.prototype.match=function(t,e){return a._validateParameters("match",arguments),t.match(e)},a.prototype.matchAll=function(t,e){a._validateParameters("matchAll",arguments);for(var i=new RegExp(e,"g"),r=i.exec(t),n=[];null!==r;)n.push(r),r=i.exec(t);return n},a.prototype.nf=function(t,e,i){return a._validateParameters("nf",arguments),t instanceof Array?t.map(function(t){return r(t,e,i)}):"[object Arguments]"===Object.prototype.toString.call(t)?3===t.length?this.nf(t[0],t[1],t[2]):2===t.length?this.nf(t[0],t[1]):this.nf(t[0]):r(t,e,i)},a.prototype.nfc=function(t,e){return a._validateParameters("nfc",arguments),t instanceof Array?t.map(function(t){return n(t,e)}):n(t,e)},a.prototype.nfp=function(){a._validateParameters("nfp",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(o):o(t)},a.prototype.nfs=function(){a._validateParameters("nfs",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(s):s(t)},a.prototype.split=function(t,e){return a._validateParameters("split",arguments),t.split(e)},a.prototype.splitTokens=function(t,e){var i;if(a._validateParameters("splitTokens",arguments),void 0!==e){var r=e,n=/\]/g.exec(r),o=/\[/g.exec(r);o&&n?(r=r.slice(0,n.index)+r.slice(n.index+1),o=/\[/g.exec(r),r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("[\\["+r+"\\]]","g")):n?(r=r.slice(0,n.index)+r.slice(n.index+1),i=new RegExp("["+r+"\\]]","g")):o?(r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("["+r+"\\[]","g")):i=new RegExp("["+r+"]","g")}else i=/\s/g;return t.split(i).filter(function(t){return t})},a.prototype.trim=function(t){return a._validateParameters("trim",arguments),t instanceof Array?t.map(this.trim):t.trim()},e.exports=a},{"../core/error_helpers":20,"../core/main":24}],63:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.day=function(){return(new Date).getDate()},r.prototype.hour=function(){return(new Date).getHours()},r.prototype.minute=function(){return(new Date).getMinutes()},r.prototype.millis=function(){return window.performance.now()},r.prototype.month=function(){return(new Date).getMonth()+1},r.prototype.second=function(){return(new Date).getSeconds()},r.prototype.year=function(){return(new Date).getFullYear()},e.exports=r},{"../core/main":24}],64:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry");var n=t("../core/constants");r.prototype.plane=function(t,e,i,n){this._assert3d("plane"),r._validateParameters("plane",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=1),void 0===n&&(n=1);var o="plane|"+i+"|"+n;if(!this._renderer.geometryInHash(o)){var s=new r.Geometry(i,n,function(){for(var t,e,i,n=0;n<=this.detailY;n++){e=n/this.detailY;for(var o=0;o<=this.detailX;o++)t=o/this.detailX,i=new r.Vector(t-.5,e-.5,0),this.vertices.push(i),this.uvs.push(t,e)}});s.computeFaces().computeNormals(),i<=1&&n<=1?s._makeTriangleEdges()._edgesToVertices():console.log("Cannot draw stroke on plane objects with more than 1 detailX or 1 detailY"),this._renderer.createBuffers(o,s)}return this._renderer.drawBuffersScaled(o,t,e,1),this},r.prototype.box=function(t,e,i,n,o){this._assert3d("box"),r._validateParameters("box",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=e);var s=this._renderer.attributes&&this._renderer.attributes.perPixelLighting;void 0===n&&(n=s?1:4),void 0===o&&(o=s?1:4);var a="box|"+n+"|"+o;if(!this._renderer.geometryInHash(a)){var h=new r.Geometry(n,o,function(){var t=[[0,4,2,6],[1,3,5,7],[0,1,4,5],[2,6,3,7],[0,2,1,3],[4,5,6,7]];this.strokeIndices=[[0,1],[1,3],[3,2],[6,7],[8,9],[9,11],[14,15],[16,17],[17,19],[18,19],[20,21],[22,23]];for(var e=0;eo?(_=i,g=1,v=e):v=t+(e-t)*g,-2!==h&&h!==o+2||(v=0),_-=i/2,m[h]=0===v?1:n,l=0;lo?0:Math.sin(2*b*Math.PI)*Math.cos(y),h<0?-1:h>o?1:Math.sin(y),h<0||h>o?0:Math.cos(2*b*Math.PI)*Math.cos(y))),this.uvs.push(b,g)}}var S=0;if(s){for(u=0;u=n.TWO_PI?(e="ellipse")+"|"+p+"|":(e="arc")+"|"+l+"|"+u+"|"+c+"|"+p+"|",!this.geometryInHash(i)){var d=new r.Geometry(p,1,function(){if(this.strokeIndices=[],l.toFixed(10)!==u.toFixed(10)){c!==n.PIE&&void 0!==c||(this.vertices.push(new r.Vector(.5,.5,0)),this.uvs.push([.5,.5]));for(var t=0;t<=p;t++){var e=t/p,i=(u-l)*e+l,o=.5+Math.cos(i)/2,s=.5+Math.sin(i)/2;this.vertices.push(new r.Vector(o,s,0)),this.uvs.push([o,s]),t0&&h>0&&(this.strokeIndices=[[0,a],[a,(a+1)*(h+1)-1],[(a+1)*(h+1)-1,(a+1)*h],[(a+1)*h,0]])});u.computeFaces().computeNormals()._makeTriangleEdges()._edgesToVertices(),this.createBuffers(l,u)}var c=this.uMVMatrix.copy();try{this.uMVMatrix.translate([i,n,0]),this.uMVMatrix.scale(o,s,1),this.drawBuffers(l)}finally{this.uMVMatrix=c}return this},r.RendererGL.prototype.quad=function(t,e,i,n,o,s,a,h){var l="quad|"+t+"|"+e+"|"+i+"|"+n+"|"+o+"|"+s+"|"+a+"|"+h;if(!this.geometryInHash(l)){var u=new r.Geometry(2,2,function(){this.vertices.push(new r.Vector(t,e,0)),this.vertices.push(new r.Vector(i,n,0)),this.vertices.push(new r.Vector(o,s,0)),this.vertices.push(new r.Vector(a,h,0)),this.uvs.push(0,0,1,0,1,1,0,1),this.strokeIndices=[[0,1],[1,2],[2,3],[3,0]]});u.computeNormals()._makeTriangleEdges()._edgesToVertices(),u.faces=[[0,1,2],[2,3,0]],this.createBuffers(l,u)}return this.drawBuffers(l),this},r.RendererGL.prototype.bezier=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._bezierDetail||20;this.beginShape();for(var d=0;d<=p;d++){var f=Math.pow(1-d/p,3),m=d/p*3*Math.pow(1-d/p,2),y=3*Math.pow(d/p,2)*(1-d/p),v=Math.pow(d/p,3);this.vertex(t*f+r*m+s*y+l*v,e*f+n*m+a*y+u*v,i*f+o*m+h*y+c*v)}return this.endShape(),this},r.RendererGL.prototype.curve=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._curveDetail;this.beginShape();for(var d=0;d<=p;d++){var f=.5*Math.pow(d/p,3),m=.5*Math.pow(d/p,2),y=d/p*.5,v=f*(3*r-t-3*s+l)+m*(2*t-5*r+4*s-l)+y*(-t+s)+2*r*.5,g=f*(3*n-e-3*a+u)+m*(2*e-5*n+4*a-u)+y*(-e+a)+2*n*.5,_=f*(3*o-i-3*h+c)+m*(2*i-5*o+4*h-c)+y*(-i+h)+2*o*.5;this.vertex(v,g,_)}return this.endShape(),this},r.RendererGL.prototype.line=function(){return 6===arguments.length?(this.beginShape(),this.vertex(arguments[0],arguments[1],arguments[2]),this.vertex(arguments[3],arguments[4],arguments[5]),this.endShape()):4===arguments.length&&(this.beginShape(),this.vertex(arguments[0],arguments[1],0),this.vertex(arguments[2],arguments[3],0),this.endShape()),this},r.RendererGL.prototype.bezierVertex=function(){if(0===this.immediateMode._bezierVertex.length)throw Error("vertex() must be used once before calling bezierVertex()");var t,e,i,r,n,o=[],s=[],a=[],h=arguments.length;if(t=0,0===this._lookUpTableBezier.length||this._lutBezierDetail!==this._pInst._curveDetail){this._lookUpTableBezier=[],this._lutBezierDetail=this._pInst._curveDetail;for(var l=1/this._lutBezierDetail,u=0,c=1,p=0;u<1;){if(t=parseFloat(u.toFixed(6)),this._lookUpTableBezier[p]=this._bezierCoefficients(t),c.toFixed(6)===l.toFixed(6)){t=parseFloat(c.toFixed(6))+parseFloat(u.toFixed(6)),++p,this._lookUpTableBezier[p]=this._bezierCoefficients(t);break}u+=l,c-=l,++p}}var d=this._lookUpTableBezier.length;if(6===h){for(this.isBezier=!0,o=[this.immediateMode._bezierVertex[0],arguments[0],arguments[2],arguments[4]],s=[this.immediateMode._bezierVertex[1],arguments[1],arguments[3],arguments[5]],n=0;n0&&this.mouseY0){var i=this._renderer._curCamera;void 0===t&&(t=1),void 0===e&&(e=t),!0!==this.contextMenuDisabled&&(this.canvas.oncontextmenu=function(){return!1},this._setProperty("contextMenuDisabled",!0)),!0!==this.wheelDefaultDisabled&&(this.canvas.onwheel=function(){return!1},this._setProperty("wheelDefaultDisabled",!0));var n=this.height0?this._renderer._curCamera._orbit(0,0,.5*n):this._renderer._curCamera._orbit(0,0,-.5*n)),this.mouseIsPressed)if(this.mouseButton===this.LEFT){var o=-t*(this.mouseX-this.pmouseX)/n,s=e*(this.mouseY-this.pmouseY)/n;this._renderer._curCamera._orbit(o,s,0)}else if(this.mouseButton===this.RIGHT){var a=i._getLocalAxes(),h=Math.sqrt(a.x[0]*a.x[0]+a.x[2]*a.x[2]);0!==h&&(a.x[0]/=h,a.x[2]/=h);var l=Math.sqrt(a.y[0]*a.y[0]+a.y[2]*a.y[2]);0!==l&&(a.y[0]/=l,a.y[2]/=l);var u=-1*t*(this.mouseX-this.pmouseX),c=-1*e*(this.mouseY-this.pmouseY);i.setPosition(i.eyeX+u*a.x[0]+c*a.z[0],i.eyeY,i.eyeZ+u*a.x[2]+c*a.z[2])}return this}},r.prototype.debugMode=function(){this._assert3d("debugMode"),r._validateParameters("debugMode",arguments);for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1);arguments[0]===n.GRID?this.registerMethod("post",this._grid.call(this,arguments[1],arguments[2],arguments[3],arguments[4],arguments[5])):arguments[0]===n.AXES?this.registerMethod("post",this._axesIcon.call(this,arguments[1],arguments[2],arguments[3],arguments[4])):(this.registerMethod("post",this._grid.call(this,arguments[0],arguments[1],arguments[2],arguments[3],arguments[4])),this.registerMethod("post",this._axesIcon.call(this,arguments[5],arguments[6],arguments[7],arguments[8])))},r.prototype.noDebugMode=function(){this._assert3d("noDebugMode");for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1)},r.prototype._grid=function(t,e,i,r,n){void 0===t&&(t=this.width/2),void 0===e&&(e=Math.round(t/30)<4?4:Math.round(t/30)),void 0===i&&(i=0),void 0===r&&(r=0),void 0===n&&(n=0);var o=t/e,s=t/2;return function(){this.push(),this.stroke(255*this._renderer.curStrokeColor[0],255*this._renderer.curStrokeColor[1],255*this._renderer.curStrokeColor[2]),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]);for(var t=0;t<=e;t++)this.beginShape(this.LINES),this.vertex(-s+i,r,t*o-s+n),this.vertex(+s+i,r,t*o-s+n),this.endShape();for(var a=0;a<=e;a++)this.beginShape(this.LINES),this.vertex(a*o-s+i,r,-s+n),this.vertex(a*o-s+i,r,+s+n),this.endShape();this.pop()}},r.prototype._axesIcon=function(t,e,i,r){return void 0===t&&(t=this.width/20>40?this.width/20:40),void 0===e&&(e=-this.width/4),void 0===i&&(i=e),void 0===r&&(r=e),function(){this.push(),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]),this.strokeWeight(2),this.stroke(255,0,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e+t,i,r),this.endShape(),this.stroke(0,255,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i+t,r),this.endShape(),this.stroke(0,0,255),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i,r+t),this.endShape(),this.pop()}},e.exports=r},{"../core/constants":18,"../core/main":24}],66:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.ambientLight=function(t,e,i,n){this._assert3d("ambientLight"),r._validateParameters("ambientLight",arguments);var o=this.color.apply(this,arguments),s=this._renderer._useLightShader();return s.setUniform("uUseLighting",!0),s.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.ambientLightColors.push(o._array[0],o._array[1],o._array[2]),s.setUniform("uAmbientColor",this._renderer.ambientLightColors),s.setUniform("uAmbientLightCount",this._renderer.ambientLightColors.length/3),this},r.prototype.directionalLight=function(t,e,i,n,o,s){this._assert3d("directionalLight"),r._validateParameters("directionalLight",arguments);var a,h=this._renderer._useLightShader();a=t instanceof r.Color?t:this.color(t,e,i);var l,u,c,p=arguments[arguments.length-1];"number"==typeof p?(l=arguments[arguments.length-3],u=arguments[arguments.length-2],c=arguments[arguments.length-1]):(l=p.x,u=p.y,c=p.z),h.setUniform("uUseLighting",!0),h.setUniform("uMaterialColor",this._renderer.curFillColor);var d=Math.sqrt(l*l+u*u+c*c);return this._renderer.directionalLightDirections.push(l/d,u/d,c/d),h.setUniform("uLightingDirection",this._renderer.directionalLightDirections),this._renderer.directionalLightColors.push(a._array[0],a._array[1],a._array[2]),h.setUniform("uDirectionalColor",this._renderer.directionalLightColors),h.setUniform("uDirectionalLightCount",this._renderer.directionalLightColors.length/3),this},r.prototype.pointLight=function(t,e,i,n,o,s){var a;this._assert3d("pointLight"),r._validateParameters("pointLight",arguments),a=t instanceof r.Color?t:this.color(t,e,i);var h,l,u,c=arguments[arguments.length-1];"number"==typeof c?(h=arguments[arguments.length-3],l=arguments[arguments.length-2],u=arguments[arguments.length-1]):(h=c.x,l=c.y,u=c.z);var p=this._renderer._useLightShader();return p.setUniform("uUseLighting",!0),p.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.pointLightPositions.push(h,l,u),p.setUniform("uPointLightLocation",this._renderer.pointLightPositions),this._renderer.pointLightColors.push(a._array[0],a._array[1],a._array[2]),p.setUniform("uPointLightColor",this._renderer.pointLightColors),p.setUniform("uPointLightCount",this._renderer.pointLightColors.length/3),this},e.exports=r},{"../core/main":24}],67:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry"),r.prototype.loadModel=function(t){var e,i,n;r._validateParameters("loadModel",arguments),"boolean"==typeof arguments[1]?(e=arguments[1],i=arguments[2],n=arguments[3]):(e=!1,i=arguments[1],n=arguments[2]);var o=new r.Geometry;o.gid=t+"|"+e;var s=this;return this.loadStrings(t,function(t){(function(t,e){for(var i={v:[],vt:[],vn:[]},n={},o=0;o0)if("v"===s[0]||"vn"===s[0]){var a=new r.Vector(parseFloat(s[1]),parseFloat(s[2]),parseFloat(s[3]));i[s[0]].push(a)}else if("vt"===s[0]){var h=[parseFloat(s[1]),parseFloat(s[2])];i[s[0]].push(h)}else if("f"===s[0])for(var l=3;l0&&(this._renderer.geometryInHash(t.gid)||(t._makeTriangleEdges()._edgesToVertices(),this._renderer.createBuffers(t.gid,t)),this._renderer.drawBuffers(t.gid))},e.exports=r},{"../core/main":24,"./p5.Geometry":70}],68:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Texture"),r.prototype.loadShader=function(t,e){r._validateParameters("loadShader",arguments);var i=new r.Shader,n=this,o=!1,s=!1;return this.loadStrings(e,function(t){i._fragSrc=t.join("\n"),o=!0,s&&n._decrementPreload()}),this.loadStrings(t,function(t){i._vertSrc=t.join("\n"),s=!0,o&&n._decrementPreload()}),i},r.prototype.createShader=function(t,e){return this._assert3d("createShader"),r._validateParameters("createShader",arguments),new r.Shader(this._renderer,t,e)},r.prototype.shader=function(t){return this._assert3d("shader"),r._validateParameters("shader",arguments),void 0===t._renderer&&(t._renderer=this._renderer),t.isStrokeShader()?this._renderer.setStrokeShader(t):this._renderer.setFillShader(t),this},r.prototype.normalMaterial=function(){return this._assert3d("normalMaterial"),r._validateParameters("normalMaterial",arguments),this._renderer.drawMode=n.FILL,this._renderer.setFillShader(this._renderer._getNormalShader()),this._renderer.curFillColor=[1,1,1,1],this.noStroke(),this},r.prototype.texture=function(t){this._assert3d("texture"),r._validateParameters("texture",arguments),this._renderer.drawMode=n.TEXTURE;var e=this._renderer._useLightShader();return e.setUniform("uSpecular",!1),e.setUniform("isTexture",!0),e.setUniform("uSampler",t),this.noStroke(),this},r.prototype.ambientMaterial=function(t,e,i,n){this._assert3d("ambientMaterial"),r._validateParameters("ambientMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!1),s.setUniform("isTexture",!1),this},r.prototype.specularMaterial=function(t,e,i,n){this._assert3d("specularMaterial"),r._validateParameters("specularMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!0),s.setUniform("isTexture",!1),this},r.RendererGL.prototype._applyColorBlend=function(t){var e=this.GL,i=this.drawMode===n.TEXTURE;return i||t[t.length-1]<1?(e.depthMask(i),e.enable(e.BLEND),e.blendEquation(e.FUNC_ADD),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA)):(e.depthMask(!0),e.disable(e.BLEND)),t},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Texture":76}],69:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.camera=function(){return this._assert3d("camera"),r._validateParameters("camera",arguments),this._renderer._curCamera.camera.apply(this._renderer._curCamera,arguments),this},r.prototype.perspective=function(){return this._assert3d("perspective"),r._validateParameters("perspective",arguments),this._renderer._curCamera.perspective.apply(this._renderer._curCamera,arguments),this},r.prototype.ortho=function(){return this._assert3d("ortho"),r._validateParameters("ortho",arguments),this._renderer._curCamera.ortho.apply(this._renderer._curCamera,arguments),this},r.prototype.createCamera=function(){this._assert3d("createCamera");var t=new r.Camera(this._renderer);return t._computeCameraDefaultSettings(),t._setDefaultCamera(),this._renderer._curCamera=t,t},r.Camera=function(t){this._renderer=t,this.cameraType="default",this.cameraMatrix=new r.Matrix,this.projMatrix=new r.Matrix},r.Camera.prototype.perspective=function(t,e,i,n){void 0===t?(t=this.defaultCameraFOV,this.cameraFOV=t):this.cameraFOV=this._renderer._pInst._toRadians(t),void 0===e&&(e=this.defaultAspectRatio),void 0===i&&(i=this.defaultCameraNear),void 0===n&&(n=this.defaultCameraFar),i<=1e-4&&(i=.01,console.log("Avoid perspective near plane values close to or below 0. Setting value to 0.01.")),nMath.PI?h=Math.PI:h<=0&&(h=.001);var l=Math.sin(h)*s*Math.sin(a),u=Math.cos(h)*s,c=Math.sin(h)*s*Math.cos(a);this.camera(l+this.centerX,u+this.centerY,c+this.centerZ,this.centerX,this.centerY,this.centerZ,0,1,0)},r.Camera.prototype._isActive=function(){return this===this._renderer._curCamera},r.prototype.setCamera=function(t){this._renderer._curCamera=t,this._renderer.uPMatrix.set(t.projMatrix.mat4[0],t.projMatrix.mat4[1],t.projMatrix.mat4[2],t.projMatrix.mat4[3],t.projMatrix.mat4[4],t.projMatrix.mat4[5],t.projMatrix.mat4[6],t.projMatrix.mat4[7],t.projMatrix.mat4[8],t.projMatrix.mat4[9],t.projMatrix.mat4[10],t.projMatrix.mat4[11],t.projMatrix.mat4[12],t.projMatrix.mat4[13],t.projMatrix.mat4[14],t.projMatrix.mat4[15])},e.exports=r.Camera},{"../core/main":24}],70:[function(t,e,i){"use strict";var r=t("../core/main");r.Geometry=function(t,e,i){return this.vertices=[],this.lineVertices=[],this.lineNormals=[],this.vertexNormals=[],this.faces=[],this.uvs=[],this.edges=[],this.detailX=void 0!==t?t:1,this.detailY=void 0!==e?e:1,i instanceof Function&&i.call(this),this},r.Geometry.prototype.computeFaces=function(){this.faces.length=0;for(var t,e,i,r,n=this.detailX+1,o=0;o1&&(u=1),h.mult(Math.asin(u)/l))},r.Geometry.prototype.computeNormals=function(){var t,e=this.vertexNormals,i=this.vertices,n=this.faces;for(e.length=0,t=0;tthis.vertices.length-1-this.detailX;e--)t.add(this.vertexNormals[e]);for(t=r.Vector.div(t,this.detailX),e=this.vertices.length-1;e>this.vertices.length-1-this.detailX;e--)this.vertexNormals[e]=t;return this},r.Geometry.prototype._makeTriangleEdges=function(){if(this.edges.length=0,Array.isArray(this.strokeIndices))for(var t=0,e=this.strokeIndices.length;t0){for(var t=this.vertices[0].copy(),e=this.vertices[0].copy(),i=0;i1){if(this._useImmediateModeShader(),this._doStroke&&this.drawMode!==n.TEXTURE){for(var h=0;h1e3){var e=Object.keys(this.gHash)[0];delete this.gHash[e],n--}this.gHash[t]={}},r.RendererGL.prototype._freeBuffers=function(t){var e=this.gHash[t];if(e){delete this.gHash[t],n--;var i=this.GL;e.vertexBuffer&&i.deleteBuffer(e.vertexBuffer),e.normalBuffer&&i.deleteBuffer(e.normalBuffer),e.lineNormalBuffer&&i.deleteBuffer(e.lineNormalBuffer),e.uvBuffer&&i.deleteBuffer(e.uvBuffer),e.indexBuffer&&i.deleteBuffer(e.indexBuffer),e.lineVertexBuffer&&i.deleteBuffer(e.lineVertexBuffer)}},r.RendererGL.prototype.createBuffers=function(t,e){var i=this.GL;this._initBufferDefaults(t);var r=this.gHash[t];return r.numberOfItems=3*e.faces.length,r.lineVertexCount=e.lineVertices.length,this._useColorShader(),this.curStrokeShader.attributes.aPosition&&(r.lineVertexBuffer=i.createBuffer(),this._bindBuffer(r.lineVertexBuffer,i.ARRAY_BUFFER,this._flatten(e.lineVertices),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),this.curStrokeShader.attributes.aDirection&&(r.lineNormalBuffer=i.createBuffer(),this._bindBuffer(r.lineNormalBuffer,i.ARRAY_BUFFER,this._flatten(e.lineNormals),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aPosition&&(r.vertexBuffer=i.createBuffer(),this._bindBuffer(r.vertexBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertices),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),r.indexBuffer=i.createBuffer(),this._bindBuffer(r.indexBuffer,i.ELEMENT_ARRAY_BUFFER,this._flatten(e.faces),Uint16Array,i.STATIC_DRAW),this.curFillShader.attributes.aNormal&&(r.normalBuffer=i.createBuffer(),this._bindBuffer(r.normalBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertexNormals),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aTexCoord&&(r.uvBuffer=i.createBuffer(),this._bindBuffer(r.uvBuffer,i.ARRAY_BUFFER,this._flatten(e.uvs),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,i.FLOAT,!1,0,0)),r},r.RendererGL.prototype.drawBuffers=function(t){var e=this.GL;this._useColorShader();var i=this.gHash[t];return this._doStroke&&i.lineVertexCount>0&&(this.curStrokeShader.bindShader(),i.lineVertexBuffer&&(this._bindBuffer(i.lineVertexBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.lineNormalBuffer&&(this._bindBuffer(i.lineNormalBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curStrokeColor),this._drawArrays(e.TRIANGLES,t),this.curStrokeShader.unbindShader()),!1!==this._doFill&&(this.curFillShader.bindShader(),i.vertexBuffer&&(this._bindBuffer(i.vertexBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.indexBuffer&&this._bindBuffer(i.indexBuffer,e.ELEMENT_ARRAY_BUFFER),i.normalBuffer&&(this._bindBuffer(i.normalBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,e.FLOAT,!1,0,0)),i.uvBuffer&&(this._bindBuffer(i.uvBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curFillColor),this._drawElements(e.TRIANGLES,t),this.curFillShader.unbindShader()),this},r.RendererGL.prototype.drawBuffersScaled=function(t,e,i,r){var n=this.uMVMatrix.copy();try{this.uMVMatrix.scale(e,i,r),this.drawBuffers(t)}finally{this.uMVMatrix=n}},r.RendererGL.prototype._drawArrays=function(t,e){return this.GL.drawArrays(t,0,this.gHash[e].lineVertexCount),this._pInst._pixelsDirty=!0,this},r.RendererGL.prototype._drawElements=function(t,e){this.GL.drawElements(t,this.gHash[e].numberOfItems,this.GL.UNSIGNED_SHORT,0),this._pInst._pixelsDirty=!0},r.RendererGL.prototype._drawPoints=function(t,e){var i=this.GL;this._bindBuffer(e,i.ARRAY_BUFFER,this._vToNArray(t),Float32Array,i.STATIC_DRAW),this.curPointShader.enableAttrib(this.curPointShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0),i.drawArrays(i.Points,0,t.length)},e.exports=r.RendererGL},{"../core/main":24}],74:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("libtess");t("./p5.Shader"),t("./p5.Camera"),t("../core/p5.Renderer"),t("./p5.Matrix");var s={immediateVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uResolution;\nuniform float uPointSize;\n\nvarying vec4 vColor;\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n gl_PointSize = uPointSize;\n}\n",vertexColorVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n}\n",vertexColorFrag:"precision mediump float;\nvarying vec4 vColor;\nvoid main(void) {\n gl_FragColor = vColor;\n}",normalVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\n\nvarying vec3 vVertexNormal;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vVertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertTexCoord = aTexCoord;\n}\n",normalFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nvoid main(void) {\n gl_FragColor = vec4(vVertexNormal, 1.0);\n}",basicFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nuniform vec4 uMaterialColor;\nvoid main(void) {\n gl_FragColor = uMaterialColor;\n}",lightVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uViewMatrix;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nuniform vec3 uAmbientColor[8];\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nvarying vec3 vVertexNormal;\nvarying vec2 vVertTexCoord;\nvarying vec3 vLightWeighting;\n\nvoid main(void){\n\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\n vec3 vertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertexNormal = vertexNormal;\n vVertTexCoord = aTexCoord;\n\n vec4 mvPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n vec3 eyeDirection = normalize(-mvPosition.xyz);\n\n float shininess = 32.0;\n float specularFactor = 2.0;\n float diffuseFactor = 0.3;\n\n vec3 ambientLightFactor = vec3(0.0);\n\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n ambientLightFactor += uAmbientColor[i];\n }\n\n\n vec3 directionalLightFactor = vec3(0.0);\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n vec3 dir = uLightingDirection[j];\n float directionalLightWeighting = max(dot(vertexNormal, -dir), 0.0);\n directionalLightFactor += uDirectionalColor[j] * directionalLightWeighting;\n }\n\n\n vec3 pointLightFactor = vec3(0.0);\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n vec3 loc = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightDirection = normalize(loc - mvPosition.xyz);\n\n float directionalLightWeighting = max(dot(vertexNormal, lightDirection), 0.0);\n\n float specularLightWeighting = 0.0;\n if (uSpecular ){\n vec3 reflectionDirection = reflect(-lightDirection, vertexNormal);\n specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess);\n }\n\n pointLightFactor += uPointLightColor[k] * (specularFactor * specularLightWeighting\n + directionalLightWeighting * diffuseFactor);\n }\n\n vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightFactor;\n}\n",lightTextureFrag:"precision mediump float;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nvarying vec3 vLightWeighting;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n gl_FragColor = isTexture ? texture2D(uSampler, vVertTexCoord) : uMaterialColor;\n if (uUseLighting)\n gl_FragColor.rgb *= vLightWeighting;\n}",phongVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform vec3 uAmbientColor[8];\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvoid main(void){\n\n vec4 viewModelPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n\n // Pass varyings to fragment shader\n vViewPosition = viewModelPosition.xyz;\n gl_Position = uProjectionMatrix * viewModelPosition; \n\n vNormal = normalize(uNormalMatrix * normalize(aNormal));\n vTexCoord = aTexCoord;\n\n vAmbientColor = vec3(0.0);\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n vAmbientColor += uAmbientColor[i];\n }\n}\n",phongFrag:"precision mediump float;\n\n//uniform mat4 uModelViewMatrix;\nuniform mat4 uViewMatrix;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvec3 V;\nvec3 N;\n\nconst float shininess = 32.0;\nconst float specularFactor = 2.0;\nconst float diffuseFactor = 0.73;\n\nstruct LightResult {\n\tfloat specular;\n\tfloat diffuse;\n};\n\nfloat phongSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float shininess) {\n\n vec3 R = normalize(reflect(-lightDirection, surfaceNormal)); \n return pow(max(0.0, dot(R, viewDirection)), shininess);\n}\n\nfloat lambertDiffuse(\n vec3 lightDirection,\n vec3 surfaceNormal) {\n return max(0.0, dot(-lightDirection, surfaceNormal));\n}\n\nLightResult light(vec3 lightVector) {\n\n vec3 L = normalize(lightVector);\n\n //compute our diffuse & specular terms\n LightResult lr;\n if (uSpecular)\n lr.specular = phongSpecular(L, V, N, shininess);\n lr.diffuse = lambertDiffuse(L, N);\n return lr;\n}\n\nvoid main(void) {\n\n V = normalize(vViewPosition);\n N = vNormal;\n\n vec3 diffuse = vec3(0.0);\n float specular = 0.0;\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n\n LightResult result = light(uLightingDirection[j]);\n diffuse += result.diffuse * uDirectionalColor[j];\n specular += result.specular;\n }\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n\n vec3 lightPosition = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightVector = vViewPosition - lightPosition;\n\t\n //calculate attenuation\n float lightDistance = length(lightVector);\n float falloff = 500.0 / (lightDistance + 500.0);\n\n LightResult result = light(lightVector);\n diffuse += result.diffuse * falloff * uPointLightColor[k];\n specular += result.specular * falloff;\n }\n\n gl_FragColor = isTexture ? texture2D(uSampler, vTexCoord) : uMaterialColor;\n gl_FragColor.rgb = gl_FragColor.rgb * (diffuse * diffuseFactor + vAmbientColor) + specular * specularFactor;\n}",fontVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nuniform vec4 uGlyphRect;\nuniform float uGlyphOffset;\n\nvarying vec2 vTexCoord;\nvarying float w;\n\nvoid main() {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n\n // scale by the size of the glyph's rectangle\n positionVec4.xy *= uGlyphRect.zw - uGlyphRect.xy;\n\n // move to the corner of the glyph\n positionVec4.xy += uGlyphRect.xy;\n\n // move to the letter's line offset\n positionVec4.x += uGlyphOffset;\n \n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vTexCoord = aTexCoord;\n w = gl_Position.w;\n}\n",fontFrag:"#extension GL_OES_standard_derivatives : enable\nprecision mediump float;\n\n#if 0\n // simulate integer math using floats\n\t#define int float\n\t#define ivec2 vec2\n\t#define INT(x) float(x)\n\n\tint ifloor(float v) { return floor(v); }\n\tivec2 ifloor(vec2 v) { return floor(v); }\n\n#else\n // use native integer math\n\tprecision mediump int;\n\t#define INT(x) x\n\n\tint ifloor(float v) { return int(v); }\n\tint ifloor(int v) { return v; }\n\tivec2 ifloor(vec2 v) { return ivec2(v); }\n\n#endif\n\nuniform sampler2D uSamplerStrokes;\nuniform sampler2D uSamplerRowStrokes;\nuniform sampler2D uSamplerRows;\nuniform sampler2D uSamplerColStrokes;\nuniform sampler2D uSamplerCols;\n\nuniform ivec2 uStrokeImageSize;\nuniform ivec2 uCellsImageSize;\nuniform ivec2 uGridImageSize;\n\nuniform ivec2 uGridOffset;\nuniform ivec2 uGridSize;\nuniform vec4 uMaterialColor;\n\nvarying vec2 vTexCoord;\n\n// some helper functions\nint round(float v) { return ifloor(v + 0.5); }\nivec2 round(vec2 v) { return ifloor(v + 0.5); }\nfloat saturate(float v) { return clamp(v, 0.0, 1.0); }\nvec2 saturate(vec2 v) { return clamp(v, 0.0, 1.0); }\n\nint mul(float v1, int v2) {\n return ifloor(v1 * float(v2));\n}\n\nivec2 mul(vec2 v1, ivec2 v2) {\n return ifloor(v1 * vec2(v2) + 0.5);\n}\n\n// unpack a 16-bit integer from a float vec2\nint getInt16(vec2 v) {\n ivec2 iv = round(v * 255.0);\n return iv.x * INT(128) + iv.y;\n}\n\nvec2 pixelScale;\nvec2 coverage = vec2(0.0);\nvec2 weight = vec2(0.5);\nconst float minDistance = 1.0/8192.0;\nconst float hardness = 1.05; // amount of antialias\n\n// the maximum number of curves in a glyph\nconst int N = INT(250);\n\n// retrieves an indexed pixel from a sampler\nvec4 getTexel(sampler2D sampler, int pos, ivec2 size) {\n int width = size.x;\n int y = ifloor(pos / width);\n int x = pos - y * width; // pos % width\n\n return texture2D(sampler, (vec2(x, y) + 0.5) / vec2(size));\n}\n\nvoid calulateCrossings(vec2 p0, vec2 p1, vec2 p2, out vec2 C1, out vec2 C2) {\n\n // get the coefficients of the quadratic in t\n vec2 a = p0 - p1 * 2.0 + p2;\n vec2 b = p0 - p1;\n vec2 c = p0 - vTexCoord;\n\n // found out which values of 't' it crosses the axes\n vec2 surd = sqrt(max(vec2(0.0), b * b - a * c));\n vec2 t1 = ((b - surd) / a).yx;\n vec2 t2 = ((b + surd) / a).yx;\n\n // approximate straight lines to avoid rounding errors\n if (abs(a.y) < 0.001)\n t1.x = t2.x = c.y / (2.0 * b.y);\n\n if (abs(a.x) < 0.001)\n t1.y = t2.y = c.x / (2.0 * b.x);\n\n // plug into quadratic formula to find the corrdinates of the crossings\n C1 = ((a * t1 - b * 2.0) * t1 + c) * pixelScale;\n C2 = ((a * t2 - b * 2.0) * t2 + c) * pixelScale;\n}\n\nvoid coverageX(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n // determine on which side of the x-axis the points lie\n bool y0 = p0.y > vTexCoord.y;\n bool y1 = p1.y > vTexCoord.y;\n bool y2 = p2.y > vTexCoord.y;\n\n // could web be under the curve (after t1)?\n if (y1 ? !y2 : y0) {\n // add the coverage for t1\n coverage.x += saturate(C1.x + 0.5);\n // calculate the anti-aliasing for t1\n weight.x = min(weight.x, abs(C1.x));\n }\n\n // are we outside the curve (after t2)?\n if (y1 ? !y0 : y2) {\n // subtract the coverage for t2\n coverage.x -= saturate(C2.x + 0.5);\n // calculate the anti-aliasing for t2\n weight.x = min(weight.x, abs(C2.x));\n }\n}\n\n// this is essentially the same as coverageX, but with the axes swapped\nvoid coverageY(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n bool x0 = p0.x > vTexCoord.x;\n bool x1 = p1.x > vTexCoord.x;\n bool x2 = p2.x > vTexCoord.x;\n\n if (x1 ? !x2 : x0) {\n coverage.y -= saturate(C1.y + 0.5);\n weight.y = min(weight.y, abs(C1.y));\n }\n\n if (x1 ? !x0 : x2) {\n coverage.y += saturate(C2.y + 0.5);\n weight.y = min(weight.y, abs(C2.y));\n }\n}\n\nvoid main() {\n\n // calculate the pixel scale based on screen-coordinates\n pixelScale = hardness / fwidth(vTexCoord);\n\n // which grid cell is this pixel in?\n ivec2 gridCoord = ifloor(vTexCoord * vec2(uGridSize));\n\n // intersect curves in this row\n {\n // the index into the row info bitmap\n int rowIndex = gridCoord.y + uGridOffset.y;\n // fetch the info texel\n vec4 rowInfo = getTexel(uSamplerRows, rowIndex, uGridImageSize);\n // unpack the rowInfo\n int rowStrokeIndex = getInt16(rowInfo.xy);\n int rowStrokeCount = getInt16(rowInfo.zw);\n\n for (int iRowStroke = INT(0); iRowStroke < N; iRowStroke++) {\n if (iRowStroke >= rowStrokeCount)\n break;\n\n // each stroke is made up of 3 points: the start and control point\n // and the start of the next curve.\n // fetch the indices of this pair of strokes:\n vec4 strokeIndices = getTexel(uSamplerRowStrokes, rowStrokeIndex++, uCellsImageSize);\n\n // unpack the stroke index\n int strokePos = getInt16(strokeIndices.xy);\n\n // fetch the two strokes\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n\n // calculate the coverage\n coverageX(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n // intersect curves in this column\n {\n int colIndex = gridCoord.x + uGridOffset.x;\n vec4 colInfo = getTexel(uSamplerCols, colIndex, uGridImageSize);\n int colStrokeIndex = getInt16(colInfo.xy);\n int colStrokeCount = getInt16(colInfo.zw);\n \n for (int iColStroke = INT(0); iColStroke < N; iColStroke++) {\n if (iColStroke >= colStrokeCount)\n break;\n\n vec4 strokeIndices = getTexel(uSamplerColStrokes, colStrokeIndex++, uCellsImageSize);\n\n int strokePos = getInt16(strokeIndices.xy);\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n coverageY(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n weight = saturate(1.0 - weight * 2.0);\n float distance = max(weight.x + weight.y, minDistance); // manhattan approx.\n float antialias = abs(dot(coverage, weight) / distance);\n float cover = min(abs(coverage.x), abs(coverage.y));\n gl_FragColor = uMaterialColor;\n gl_FragColor.a *= saturate(max(antialias, cover));\n}",lineVert:"/*\n Part of the Processing project - http://processing.org\n Copyright (c) 2012-15 The Processing Foundation\n Copyright (c) 2004-12 Ben Fry and Casey Reas\n Copyright (c) 2001-04 Massachusetts Institute of Technology\n This library is free software; you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, version 2.1.\n This library is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General\n Public License along with this library; if not, write to the\n Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n Boston, MA 02111-1307 USA\n*/\n\n#define PROCESSING_LINE_SHADER\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uStrokeWeight;\n\nuniform vec4 uViewport;\n\n// using a scale <1 moves the lines towards the camera\n// in order to prevent popping effects due to half of\n// the line disappearing behind the geometry faces.\nvec3 scale = vec3(0.9995);\n\nattribute vec4 aPosition;\nattribute vec4 aDirection;\n \nvoid main() {\n vec4 posp = uModelViewMatrix * aPosition;\n vec4 posq = uModelViewMatrix * (aPosition + vec4(aDirection.xyz, 0));\n\n // Moving vertices slightly toward the camera\n // to avoid depth-fighting with the fill triangles.\n // Discussed here:\n // http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=252848 \n posp.xyz = posp.xyz * scale;\n posq.xyz = posq.xyz * scale;\n\n vec4 p = uProjectionMatrix * posp;\n vec4 q = uProjectionMatrix * posq;\n\n // formula to convert from clip space (range -1..1) to screen space (range 0..[width or height])\n // screen_p = (p.xy/p.w + <1,1>) * 0.5 * uViewport.zw\n\n // prevent division by W by transforming the tangent formula (div by 0 causes\n // the line to disappear, see https://github.com/processing/processing/issues/5183)\n // t = screen_q - screen_p\n //\n // tangent is normalized and we don't care which aDirection it points to (+-)\n // t = +- normalize( screen_q - screen_p )\n // t = +- normalize( (q.xy/q.w+<1,1>)*0.5*uViewport.zw - (p.xy/p.w+<1,1>)*0.5*uViewport.zw )\n //\n // extract common factor, <1,1> - <1,1> cancels out\n // t = +- normalize( (q.xy/q.w - p.xy/p.w) * 0.5 * uViewport.zw )\n //\n // convert to common divisor\n // t = +- normalize( ((q.xy*p.w - p.xy*q.w) / (p.w*q.w)) * 0.5 * uViewport.zw )\n //\n // remove the common scalar divisor/factor, not needed due to normalize and +-\n // (keep uViewport - can't remove because it has different components for x and y\n // and corrects for aspect ratio, see https://github.com/processing/processing/issues/5181)\n // t = +- normalize( (q.xy*p.w - p.xy*q.w) * uViewport.zw )\n\n vec2 tangent = normalize((q.xy*p.w - p.xy*q.w) * uViewport.zw);\n\n // flip tangent to normal (it's already normalized)\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n float thickness = aDirection.w * uStrokeWeight;\n vec2 offset = normal * thickness / 2.0;\n\n // Perspective ---\n // convert from world to clip by multiplying with projection scaling factor\n // to get the right thickness (see https://github.com/processing/processing/issues/5182)\n // invert Y, projections in Processing invert Y\n vec2 perspScale = (uProjectionMatrix * vec4(1, -1, 0, 0)).xy;\n\n // No Perspective ---\n // multiply by W (to cancel out division by W later in the pipeline) and\n // convert from screen to clip (derived from clip to screen above)\n vec2 noPerspScale = p.w / (0.5 * uViewport.zw);\n\n //gl_Position.xy = p.xy + offset.xy * mix(noPerspScale, perspScale, float(perspective > 0));\n gl_Position.xy = p.xy + offset.xy * perspScale;\n gl_Position.zw = p.zw;\n}\n",lineFrag:"precision mediump float;\nprecision mediump int;\n\nuniform vec4 uMaterialColor;\n\nvoid main() {\n gl_FragColor = uMaterialColor;\n}",pointVert:"attribute vec3 aPosition;\nuniform float uPointSize;\nvarying float vStrokeWeight;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvoid main() {\n\tvec4 positionVec4 = vec4(aPosition, 1.0);\n\tgl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\tgl_PointSize = uPointSize;\n\tvStrokeWeight = uPointSize;\n}",pointFrag:"precision mediump float;\nprecision mediump int;\nuniform vec4 uMaterialColor;\nvarying float vStrokeWeight;\n\nvoid main(){\n\tfloat mask = 0.0;\n\n\t// make a circular mask using the gl_PointCoord (goes from 0 - 1 on a point)\n // might be able to get a nicer edge on big strokeweights with smoothstep but slightly less performant\n\n\tmask = step(0.98, length(gl_PointCoord * 2.0 - 1.0));\n\n\t// if strokeWeight is 1 or less lets just draw a square\n\t// this prevents weird artifacting from carving circles when our points are really small\n\t// if strokeWeight is larger than 1, we just use it as is\n\n\tmask = mix(0.0, mask, clamp(floor(vStrokeWeight - 0.5),0.0,1.0));\n\n\t// throw away the borders of the mask\n // otherwise we get weird alpha blending issues\n\n\tif(mask > 0.98){\n discard;\n \t}\n\n \tgl_FragColor = vec4(uMaterialColor.rgb * (1.0 - mask), uMaterialColor.a) ;\n}"};r.RendererGL=function(t,e,i,n){return r.Renderer.call(this,t,e,i),this.attributes={},n=n||{},this.attributes.alpha=void 0===n.alpha||n.alpha,this.attributes.depth=void 0===n.depth||n.depth,this.attributes.stencil=void 0===n.stencil||n.stencil,this.attributes.antialias=void 0!==n.antialias&&n.antialias,this.attributes.premultipliedAlpha=void 0!==n.premultipliedAlpha&&n.premultipliedAlpha,this.attributes.preserveDrawingBuffer=void 0===n.preserveDrawingBuffer||n.preserveDrawingBuffer,this.attributes.perPixelLighting=void 0!==n.perPixelLighting&&n.perPixelLighting,this._initContext(),this.isP3D=!0,this.GL=this.drawingContext,this.ambientLightColors=[],this.directionalLightDirections=[],this.directionalLightColors=[],this.pointLightPositions=[],this.pointLightColors=[],this.uMVMatrix=new r.Matrix,this.uPMatrix=new r.Matrix,this.uNMatrix=new r.Matrix("mat3"),this._curCamera=new r.Camera(this),this._curCamera._computeCameraDefaultSettings(),this._curCamera._setDefaultCamera(),this.gHash={},this._defaultLightShader=void 0,this._defaultImmediateModeShader=void 0,this._defaultNormalShader=void 0,this._defaultColorShader=void 0,this._defaultPointShader=void 0,this.curFillShader=void 0,this.curStrokeShader=void 0,this.curPointShader=void 0,this._useColorShader(),this.setStrokeShader(this._getLineShader()),this._usePointShader(),this._pointVertexBuffer=this.GL.createBuffer(),this.isImmediateDrawing=!1,this.immediateMode={},this.fill(255,255,255,255),this.pointSize=5,this.strokeWeight(1),this.stroke(0,0,0),this.textures=[],this._curveTightness=6,this._lookUpTableBezier=[],this._lookUpTableQuadratic=[],this._lutBezierDetail=0,this._lutQuadraticDetail=0,this._tessy=this._initTessy(),this.fontInfos={},this},r.RendererGL.prototype=Object.create(r.Renderer.prototype),r.RendererGL.prototype._initContext=function(){try{if(this.drawingContext=this.canvas.getContext("webgl",this.attributes)||this.canvas.getContext("experimental-webgl",this.attributes),null===this.drawingContext)throw new Error("Error creating webgl context");console.log("p5.RendererGL: enabled webgl context");var t=this.drawingContext;t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),this._viewport=this.drawingContext.getParameter(this.drawingContext.VIEWPORT)}catch(t){throw t}},r.RendererGL.prototype._resetContext=function(t,e,i){var n=this.width,o=this.height,s=this.canvas.id,a=this.canvas;a&&a.parentNode.removeChild(a),(a=document.createElement("canvas")).id=s,this._pInst._userNode?this._pInst._userNode.appendChild(a):document.body.appendChild(a),this._pInst.canvas=a;var h=new r.RendererGL(this._pInst.canvas,this._pInst,!0,t);this._pInst._setProperty("_renderer",h),h.resize(n,o),h._applyDefaults(),this._pInst._elements.push(h),"function"==typeof i&&setTimeout(function(){i.apply(window._renderer,e)},0)},r.prototype.setAttributes=function(t,e){var i;this._assert3d("setAttributes"),void 0!==e?(i={})[t]=e:t instanceof Object&&(i=t),this.push(),this._renderer._resetContext(i),this.pop()},r.RendererGL.prototype._update=function(){this.uMVMatrix.set(this._curCamera.cameraMatrix.mat4[0],this._curCamera.cameraMatrix.mat4[1],this._curCamera.cameraMatrix.mat4[2],this._curCamera.cameraMatrix.mat4[3],this._curCamera.cameraMatrix.mat4[4],this._curCamera.cameraMatrix.mat4[5],this._curCamera.cameraMatrix.mat4[6],this._curCamera.cameraMatrix.mat4[7],this._curCamera.cameraMatrix.mat4[8],this._curCamera.cameraMatrix.mat4[9],this._curCamera.cameraMatrix.mat4[10],this._curCamera.cameraMatrix.mat4[11],this._curCamera.cameraMatrix.mat4[12],this._curCamera.cameraMatrix.mat4[13],this._curCamera.cameraMatrix.mat4[14],this._curCamera.cameraMatrix.mat4[15]),this.ambientLightColors.length=0,this.directionalLightDirections.length=0,this.directionalLightColors.length=0,this.pointLightPositions.length=0,this.pointLightColors.length=0},r.RendererGL.prototype.background=function(){var t=this._pInst.color.apply(this._pInst,arguments),e=t.levels[0]/255,i=t.levels[1]/255,r=t.levels[2]/255,n=t.levels[3]/255;this.GL.clearColor(e,i,r,n),this.GL.depthMask(!0),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.fill=function(t,e,i,o){var s=r.prototype.color.apply(this._pInst,arguments);this.curFillColor=s._array,this.isImmediateDrawing?this.setFillShader(this._getImmediateModeShader()):this.setFillShader(this._getColorShader()),this.drawMode=n.FILL,this.curFillShader.setUniform("uMaterialColor",this.curFillColor)},r.RendererGL.prototype.stroke=function(t,e,i,n){arguments[3]=255;var o=r.prototype.color.apply(this._pInst,arguments);this.curStrokeColor=o._array,this.curStrokeShader.setUniform("uMaterialColor",this.curStrokeColor),this.curPointShader.setUniform("uMaterialColor",o._array)},r.RendererGL.prototype.strokeWeight=function(t){this.curStrokeWeight!==t&&(this.pointSize=t,this.curStrokeWeight=t,this.curStrokeShader.setUniform("uStrokeWeight",t),this.curPointShader.setUniform("uPointSize",t))},r.RendererGL.prototype.get=function(t,e,i,n){return r.Renderer2D.prototype.get.apply(this,[t,e,i,n])},r.RendererGL.prototype.loadPixels=function(){if(!0===this.attributes.preserveDrawingBuffer){var t=this._pInst._pixelDensity,e=this.width,i=this.height;e*=t,i*=t,void 0===this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4)),this.GL.readPixels(0,0,e,i,this.GL.RGBA,this.GL.UNSIGNED_BYTE,this.pixels),this._pInst._setProperty("pixels",this.pixels)}else console.log("loadPixels only works in WebGL when preserveDrawingBuffer is true.")},r.RendererGL.prototype.geometryInHash=function(t){return void 0!==this.gHash[t]},r.RendererGL.prototype.resize=function(t,e){r.Renderer.prototype.resize.call(this,t,e),this.GL.viewport(0,0,this.GL.drawingBufferWidth,this.GL.drawingBufferHeight),this._viewport=this.GL.getParameter(this.GL.VIEWPORT),this._curCamera._resize(),void 0!==this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4))},r.RendererGL.prototype.clear=function(){var t=arguments[0]||0,e=arguments[1]||0,i=arguments[2]||0,r=arguments[3]||0;this.GL.clearColor(t,e,i,r),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.translate=function(t,e,i){return t instanceof r.Vector&&(i=t.z,e=t.y,t=t.x),this.uMVMatrix.translate([t,e,i]),this},r.RendererGL.prototype.scale=function(t,e,i){return this.uMVMatrix.scale(t,e,i),this},r.RendererGL.prototype.rotate=function(t,e){return void 0===e?this.rotateZ(t):(arguments[0]=this._pInst._fromRadians(t),r.Matrix.prototype.rotate.apply(this.uMVMatrix,arguments),this)},r.RendererGL.prototype.rotateX=function(t){return this.rotate(t,1,0,0),this},r.RendererGL.prototype.rotateY=function(t){return this.rotate(t,0,1,0),this},r.RendererGL.prototype.rotateZ=function(t){return this.rotate(t,0,0,1),this},r.RendererGL.prototype.push=function(){var t=r.Renderer.prototype.push.apply(this),e=t.properties;return e.uMVMatrix=this.uMVMatrix.copy(),e.uPMatrix=this.uPMatrix.copy(),e._curCamera=this._curCamera,this._curCamera=this._curCamera.copy(),t},r.RendererGL.prototype.resetMatrix=function(){return this.uMVMatrix=r.Matrix.identity(this._pInst),this},r.RendererGL.prototype.setFillShader=function(t){return this.curFillShader!==t&&(this.curFillShader=t,this.curFillShader.init()),this.curFillShader},r.RendererGL.prototype.setPointShader=function(t){return this.curPointShader!==t&&(this.curPointShader=t,this.curPointShader.init()),this.curPointShader},r.RendererGL.prototype.setStrokeShader=function(t){return this.curStrokeShader!==t&&(this.curStrokeShader=t,this.curStrokeShader.init()),this.curStrokeShader},r.RendererGL.prototype._useLightShader=function(){return this.curFillShader&&this.curFillShader.isLightShader()||this.setFillShader(this._getLightShader()),this.curFillShader},r.RendererGL.prototype._useColorShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultImmediateModeShader||this.setFillShader(this._getColorShader()),this.curFillShader},r.RendererGL.prototype._usePointShader=function(){return this.curPointShader||this.setPointShader(this._getPointShader()),this.curPointShader},r.RendererGL.prototype._useImmediateModeShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultColorShader||this.setFillShader(this._getImmediateModeShader()),this.curFillShader},r.RendererGL.prototype._getLightShader=function(){return this._defaultLightShader||(this.attributes.perPixelLighting?this._defaultLightShader=new r.Shader(this,s.phongVert,s.phongFrag):this._defaultLightShader=new r.Shader(this,s.lightVert,s.lightTextureFrag)),this._defaultLightShader},r.RendererGL.prototype._getImmediateModeShader=function(){return this._defaultImmediateModeShader||(this._defaultImmediateModeShader=new r.Shader(this,s.immediateVert,s.vertexColorFrag)),this._defaultImmediateModeShader},r.RendererGL.prototype._getNormalShader=function(){return this._defaultNormalShader||(this._defaultNormalShader=new r.Shader(this,s.normalVert,s.normalFrag)),this._defaultNormalShader},r.RendererGL.prototype._getColorShader=function(){return this._defaultColorShader||(this._defaultColorShader=new r.Shader(this,s.normalVert,s.basicFrag)),this._defaultColorShader},r.RendererGL.prototype._getPointShader=function(){return this._defaultPointShader||(this._defaultPointShader=new r.Shader(this,s.pointVert,s.pointFrag)),this._defaultPointShader},r.RendererGL.prototype._getLineShader=function(){return this._defaultLineShader||(this._defaultLineShader=new r.Shader(this,s.lineVert,s.lineFrag)),this._defaultLineShader},r.RendererGL.prototype._getFontShader=function(){return this._defaultFontShader||(this.GL.getExtension("OES_standard_derivatives"),this._defaultFontShader=new r.Shader(this,s.fontVert,s.fontFrag)),this._defaultFontShader},r.RendererGL.prototype._getEmptyTexture=function(){if(!this._emptyTexture){var t=new r.Image(1,1);t.set(0,0,255),this._emptyTexture=new r.Texture(this,t)}return this._emptyTexture},r.RendererGL.prototype.getTexture=function(t){for(var e=this.textures,i=0;i2e4){var e,i=Object.prototype.toString,r=[],n=t.slice();e=n.pop();do{"[object Array]"===i.call(e)?n.push.apply(n,e):r.push(e)}while(n.length&&void 0!==(e=n.pop()));return r.reverse(),r}return[].concat.apply([],t)},r.RendererGL.prototype._vToNArray=function(t){return this._flatten(t.map(function(t){return[t.x,t.y,t.z]}))},r.prototype._assert3d=function(t){if(!this._renderer.isP3D)throw new Error(t+"() is only supported in WEBGL mode. If you'd like to use 3D graphics and WebGL, see https://p5js.org/examples/form-3d-primitives.html for more information.")},r.RendererGL.prototype._initTessy=function(){var t=new o.GluTesselator;return t.gluTessCallback(o.gluEnum.GLU_TESS_VERTEX_DATA,function(t,e){e[e.length]=t[0],e[e.length]=t[1],e[e.length]=t[2]}),t.gluTessCallback(o.gluEnum.GLU_TESS_BEGIN,function(t){t!==o.primitiveType.GL_TRIANGLES&&console.log("expected TRIANGLES but got type: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_ERROR,function(t){console.log("error callback"),console.log("error number: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_COMBINE,function(t,e,i){return[t[0],t[1],t[2]]}),t.gluTessCallback(o.gluEnum.GLU_TESS_EDGE_FLAG,function(t){}),t},r.RendererGL.prototype._triangulate=function(t){this._tessy.gluTessNormal(0,0,1);var e=[];this._tessy.gluTessBeginPolygon(e);for(var i=0;i1&&(s=s.substring(0,s.indexOf("[0]"))),o.name=s,o.type=n.type,o.type===t.SAMPLER_2D&&(o.samplerIndex=i,i++,this.samplers.push(o)),this.uniforms[s]=o}this._loadedUniforms=!0}},r.Shader.prototype.compile=function(){},r.Shader.prototype.bindShader=function(){this.init(),this._bound||(this.useProgram(),this._bound=!0,this.bindTextures(),this._setMatrixUniforms(),this===this._renderer.curStrokeShader&&this._setViewportUniform())},r.Shader.prototype.unbindShader=function(){return this._bound&&(this.unbindTextures(),this._bound=!1),this},r.Shader.prototype.bindTextures=function(){for(var t=this._renderer.GL,e=0;e1?e.length&&n.uniform1iv(r,e):n.uniform1i(r,e);break;case n.FLOAT:i.size>1?e.length&&n.uniform1fv(r,e):n.uniform1f(r,e);break;case n.FLOAT_MAT3:n.uniformMatrix3fv(r,!1,e);break;case n.FLOAT_MAT4:n.uniformMatrix4fv(r,!1,e);break;case n.FLOAT_VEC2:i.size>1?e.length&&n.uniform2fv(r,e):n.uniform2f(r,e[0],e[1]);break;case n.FLOAT_VEC3:i.size>1?e.length&&n.uniform3fv(r,e):n.uniform3f(r,e[0],e[1],e[2]);break;case n.FLOAT_VEC4:i.size>1?e.length&&n.uniform4fv(r,e):n.uniform4f(r,e[0],e[1],e[2],e[3]);break;case n.INT_VEC2:i.size>1?e.length&&n.uniform2iv(r,e):n.uniform2i(r,e[0],e[1]);break;case n.INT_VEC3:i.size>1?e.length&&n.uniform3iv(r,e):n.uniform3i(r,e[0],e[1],e[2]);break;case n.INT_VEC4:i.size>1?e.length&&n.uniform4iv(r,e):n.uniform4i(r,e[0],e[1],e[2],e[3]);break;case n.SAMPLER_2D:n.activeTexture(n.TEXTURE0+i.samplerIndex),i.texture=this._renderer.getTexture(e),n.uniform1i(i.location,i.samplerIndex)}return this}},r.Shader.prototype.isLightShader=function(){return void 0!==this.uniforms.uUseLighting||void 0!==this.uniforms.uAmbientLightCount||void 0!==this.uniforms.uDirectionalLightCount||void 0!==this.uniforms.uPointLightCount||void 0!==this.uniforms.uAmbientColor||void 0!==this.uniforms.uDirectionalColor||void 0!==this.uniforms.uPointLightLocation||void 0!==this.uniforms.uPointLightColor||void 0!==this.uniforms.uLightingDirection||void 0!==this.uniforms.uSpecular},r.Shader.prototype.isTextureShader=function(){return this.samplerIndex>0},r.Shader.prototype.isColorShader=function(){return void 0!==this.attributes.aVertexColor||void 0!==this.uniforms.uMaterialColor},r.Shader.prototype.isTexLightShader=function(){return this.isLightShader()&&this.isTextureShader()},r.Shader.prototype.isStrokeShader=function(){return void 0!==this.uniforms.uStrokeWeight},r.Shader.prototype.enableAttrib=function(t,e,i,r,n,o){var s=this._renderer.GL;return-1!==t&&(s.enableVertexAttribArray(t),s.vertexAttribPointer(t,e,i,r,n,o)),this},e.exports=r.Shader},{"../core/main":24}],76:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.Texture=function(t,e){this._renderer=t;var i=this._renderer.GL;this.src=e,this.glTex=void 0,this.glTarget=i.TEXTURE_2D,this.glFormat=i.RGBA,this.mipmaps=!1,this.glMinFilter=i.LINEAR,this.glMagFilter=i.LINEAR,this.glWrapS=i.CLAMP_TO_EDGE,this.glWrapT=i.CLAMP_TO_EDGE,this.isSrcMediaElement=void 0!==r.MediaElement&&e instanceof r.MediaElement,this._videoPrevUpdateTime=0,this.isSrcHTMLElement=void 0!==r.Element&&e instanceof r.Element&&!(e instanceof r.Graphics),this.isSrcP5Image=e instanceof r.Image,this.isSrcP5Graphics=e instanceof r.Graphics,this.isImageData="undefined"!=typeof ImageData&&e instanceof ImageData;var n=this._getTextureDataFromSource();return this.width=n.width,this.height=n.height,this.init(n),this},r.Texture.prototype._getTextureDataFromSource=function(){var t;return this.isSrcP5Image?t=this.src.canvas:this.isSrcMediaElement||this.isSrcP5Graphics||this.isSrcHTMLElement?t=this.src.elt:this.isImageData&&(t=this.src),t},r.Texture.prototype.init=function(t){var e=this._renderer.GL;if(this.glTex=e.createTexture(),this.bindTexture(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,this.glMagFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,this.glMinFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,this.glWrapS),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,this.glWrapT),0===this.width||0===this.height||this.isSrcMediaElement&&!this.src.loadedmetadata){var i=new Uint8Array([1,1,1,1]);e.texImage2D(this.glTarget,0,e.RGBA,1,1,0,this.glFormat,e.UNSIGNED_BYTE,i)}else e.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,e.UNSIGNED_BYTE,t)},r.Texture.prototype.update=function(){var t=this.src;if(0===t.width||0===t.height)return!1;var e=this._getTextureDataFromSource(),i=!1,r=this._renderer.GL;return e.width!==this.width||e.height!==this.height?(i=!0,this.width=e.width,this.height=e.height,this.isSrcP5Image?t.setModified(!1):(this.isSrcMediaElement||this.isSrcHTMLElement)&&t.setModified(!0)):this.isSrcP5Image?t.isModified()&&(i=!0,t.setModified(!1)):this.isSrcMediaElement?t.isModified()?(i=!0,t.setModified(!1)):t.loadedmetadata&&this._videoPrevUpdateTime!==t.time()&&(this._videoPrevUpdateTime=t.time(),i=!0):this.isImageData?t._dirty&&(t._dirty=!1,i=!0):i=!0,i&&(this.bindTexture(),r.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,r.UNSIGNED_BYTE,e)),i},r.Texture.prototype.bindTexture=function(){return this._renderer.GL.bindTexture(this.glTarget,this.glTex),this},r.Texture.prototype.unbindTexture=function(){this._renderer.GL.bindTexture(this.glTarget,null)},r.Texture.prototype.setInterpolation=function(t,e){var i=this._renderer.GL;t===n.NEAREST?this.glMinFilter=i.NEAREST:this.glMinFilter=i.LINEAR,e===n.NEAREST?this.glMagFilter=i.NEAREST:this.glMagFilter=i.LINEAR,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,this.glMinFilter),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,this.glMagFilter),this.unbindTexture()},r.Texture.prototype.setWrapMode=function(t,e){var i=this._renderer.GL,r=function(t){return 0==(t&t-1)},o=r(this.width),s=r(this.width);t===n.REPEAT?o&&s?this.glWrapS=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):t===n.MIRROR?o&&s?this.glWrapS=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):this.glWrapS=i.CLAMP_TO_EDGE,e===n.REPEAT?o&&s?this.glWrapT=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):e===n.MIRROR?o&&s?this.glWrapT=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):this.glWrapT=i.CLAMP_TO_EDGE,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,this.glWrapS),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,this.glWrapT),this.unbindTexture()},e.exports=r.Texture},{"../core/constants":18,"../core/main":24}],77:[function(t,e,i){"use strict";function r(t,e){this.width=t,this.height=e,this.infos=[],this.findImage=function(t){var e=this.width*this.height;if(t>e)throw new Error("font is too complex to render in 3D");for(var i,r,n=this.infos.length-1;n>=0;--n){var o=this.infos[n];if(o.index+t0;){var n=t[r];e>n&&(e=n),ii?i:t}(255*t,0,255)}function r(t,e,i,r,n,s,a,h){for(var u=new function t(e,i,r,n){this.p0=e,this.c0=i,this.c1=r,this.p1=n,this.toQuadratic=function(){return{x:this.p0.x,y:this.p0.y,x1:this.p1.x,y1:this.p1.y,cx:(3*(this.c0.x+this.c1.x)-(this.p0.x+this.p1.x))/4,cy:(3*(this.c0.y+this.c1.y)-(this.p0.y+this.p1.y))/4}},this.quadError=function(){return o.Vector.sub(o.Vector.sub(this.p1,this.p0),o.Vector.mult(o.Vector.sub(this.c1,this.c0),3)).mag()/2},this.split=function(e){var i=o.Vector.lerp(this.p0,this.c0,e),r=o.Vector.lerp(this.c0,this.c1,e),n=o.Vector.lerp(i,r,e);this.c1=o.Vector.lerp(this.c1,this.p1,e),this.c0=o.Vector.lerp(r,this.c1,e);var s=o.Vector.lerp(n,this.c0,e),a=new t(this.p0,i,n,s);return this.p0=s,a},this.splitInflections=function(){var t=o.Vector.sub(this.c0,this.p0),e=o.Vector.sub(o.Vector.sub(this.c1,this.c0),t),i=o.Vector.sub(o.Vector.sub(o.Vector.sub(this.p1,this.c1),t),o.Vector.mult(e,2)),r=[],n=e.x*i.y-e.y*i.x;if(0!==n){var s=t.x*i.y-t.y*i.x,a=t.x*e.y-t.y*e.x,h=s*s-4*n*a;if(h>=0){n<0&&(n=-n,s=-s,a=-a);var l=Math.sqrt(h),u=(-s-l)/(2*n),c=(-s+l)/(2*n);u>0&&u<1&&(r.push(this.split(u)),c=1-(1-c)/(1-u)),c>0&&c<1&&r.push(this.split(c))}}return r.push(this),r}}(new o.Vector(t,e),new o.Vector(i,r),new o.Vector(n,s),new o.Vector(a,h)).splitInflections(),c=[],p=30/l,d=0;d=.125);){var v=Math.pow(f,1/3),g=m.split(v),_=m.split(1-v/(1-v));c.push(g),y.push(m),m=_}f<1&&c.push(m.split(.5)),c.push(m),Array.prototype.push.apply(c,y.reverse())}return c}function s(t,i,r,n){e([t,r],[i,n],{x:t,y:i,cx:(t+r)/2,cy:(i+n)/2})}function u(t,e,i,r){return Math.abs(i-t)<1e-5&&Math.abs(r-e)<1e-5}function c(t,e,i){for(var r=t.length,o=e.findImage(r),s=o.index,a=0,h=0;h>7,127&d,p>>7,127&p);for(var f=0;f>7,127&m,0,0)}}return{cellImageInfo:l,dimOffset:s,dimImageInfo:o}}var p=this.glyphInfos[t.index];if(p)return p;var d=t.getBoundingBox(),f=d.x1,m=d.y1,y=d.x2-f,v=d.y2-m,g=t.path.commands;if(0===y||0===v||!g.length)return this.glyphInfos[t.index]={};var _,b=[],S=[],x=[];for(_=a-1;_>=0;--_)x.push([]);for(_=h-1;_>=0;--_)S.push([]);for(var w,T,A,M,P=0;P=n)&&this._doFill){if(!this._isOpenType())return console.log("WEBGL: only opentype fonts are supported"),t;t.push();var l=this.curFillShader,c=this._doStroke,p=this.drawMode;this.curFillShader=null,this._doStroke=!1,this.drawMode=s.TEXTURE;var d=this._textFont.font,f=this._textFont._fontInfo;f||(f=this._textFont._fontInfo=new u(d));var m=this._textFont._handleAlignment(this,e,i,r),y=this._textSize,v=y/d.unitsPerEm;this.translate(m.x,m.y,0),this.scale(v,v,1);var g=this.GL,_=!this._defaultFontShader,b=this.setFillShader(this._getFontShader());_&&(b.setUniform("uGridImageSize",[64,64]),b.setUniform("uCellsImageSize",[64,64]),b.setUniform("uStrokeImageSize",[64,64]),b.setUniform("uGridSize",[a,h])),this._applyColorBlend(this.curFillColor);var S=this.gHash.glyph;if(!S){var x=this._textGeom=new o.Geometry(1,1,function(){for(var t=0;t<=1;t++)for(var e=0;e<=1;e++)this.vertices.push(new o.Vector(e,t,0)),this.uvs.push(e,t)});x.computeFaces().computeNormals(),S=this.createBuffers("glyph",x)}this._bindBuffer(S.vertexBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aPosition.location,3,g.FLOAT,!1,0,0),this._bindBuffer(S.indexBuffer,g.ELEMENT_ARRAY_BUFFER),this._bindBuffer(S.uvBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aTexCoord.location,2,g.FLOAT,!1,0,0),b.setUniform("uMaterialColor",this.curFillColor);try{for(var w=0,T=null,A=!1,M=d.stringToGlyphs(e),P=0;P{let e,i=0,r=[28,31,33,35,37,40,40,43,45,47,49,52,52,55,57,61,62,64,64,67,69,73,74,76,76,79,81,83,85,88,88,91,93,95,97,100,100,103,105,107,97,112];t.preload=(()=>{e=new s.a.Sampler({A0:"A0.[mp3|ogg]",C1:"C1.[mp3|ogg]","D#1":"Ds1.[mp3|ogg]","F#1":"Fs1.[mp3|ogg]",A1:"A1.[mp3|ogg]",C2:"C2.[mp3|ogg]","D#2":"Ds2.[mp3|ogg]","F#2":"Fs2.[mp3|ogg]",A2:"A2.[mp3|ogg]",C3:"C3.[mp3|ogg]","D#3":"Ds3.[mp3|ogg]","F#3":"Fs3.[mp3|ogg]",A3:"A3.[mp3|ogg]",C4:"C4.[mp3|ogg]","D#4":"Ds4.[mp3|ogg]","F#4":"Fs4.[mp3|ogg]",A4:"A4.[mp3|ogg]",C5:"C5.[mp3|ogg]","D#5":"Ds5.[mp3|ogg]","F#5":"Fs5.[mp3|ogg]",A5:"A5.[mp3|ogg]",C6:"C6.[mp3|ogg]","D#6":"Ds6.[mp3|ogg]","F#6":"Fs6.[mp3|ogg]",A6:"A6.[mp3|ogg]",C7:"C7.[mp3|ogg]","D#7":"Ds7.[mp3|ogg]","F#7":"Fs7.[mp3|ogg]",A7:"A7.[mp3|ogg]",C8:"C8.[mp3|ogg]"},{release:1,baseUrl:"./sounds/"}).toMaster()});let n,o=0,a=!1,l=0;t.setup=(()=>{t.createCanvas(800,800,t.WEBGL)});let u=0,c=0;t.draw=(()=>{t.camera(0,0,800,0,0,0,0,1,0),t.background(0),t.stroke(255,100),t.line(0,-3e3,0,1e3),t.translate(-t.width/2,t.height/4,0),t.rotateX(t.PI),i+=.6;for(let e=0;e<20;e++)for(let r=0;r<200;r++){let s=t.noise(.03*(i+r),.03*(-i+e),.03*e);t.noStroke(),t.fill(250*s),100==r&&(t.fill(255,0,0),0==e&&(n=s),19==e&&(o=s)),t.push(),t.translate(4*r,400*s),t.sphere(1),t.pop()}if(l-=100,t.push(),t.translate(400,400*n),t.fill(255,0,0,l),t.sphere(5),t.pop(),t.push(),t.translate(400,400*o),t.sphere(5),t.pop(),a){let i=t.floor(t.millis()/300);if(u!=i){t.random(2)>.5&&(l=255,e.triggerAttackRelease(s.a.Midi(r[t.ceil(42*n)]+6).toFrequency(),"132n"),e.triggerAttackRelease(s.a.Midi(r[t.ceil(42*o)]+6).toFrequency(),"132n"))}u=i;let a=t.floor(t.millis()/400);if(c!=a){t.random(2)>.6&&(l=255,e.triggerAttackRelease(s.a.Midi(r[t.ceil(42*o)]+6).toFrequency(),"64n"))}c=a}}),t.keyPressed=(()=>{"m"==t.key&&t.save(Date.now()+".jpg"),a=!0}),t.mousePressed=(()=>{h()(s.a.context).then(function(){})})};e.default=l,new n.a(l)},function(t,e){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i}]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RvbmUvYnVpbGQvVG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcDUvbGliL3A1Lm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3RhcnRhdWRpb2NvbnRleHQvU3RhcnRBdWRpb0NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiXSwibmFtZXMiOlsiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyIsInVuZGVmaW5lZCIsIlRvbmUiLCJNb2R1bGUiLCJmdW5jIiwiTWFpbiIsInRoaXMiLCJFcnJvciIsInRvU3RyaW5nIiwiY2xhc3NOYW1lIiwiaXNMZXR0ZXIiLCJtYXRjaCIsInNhbWVDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwiaXNGdW5jdGlvbiIsImRpc3Bvc2UiLCJzZXQiLCJwYXJhbXMiLCJyYW1wVGltZSIsImlzT2JqZWN0IiwiaXNTdHJpbmciLCJ0bXBPYmoiLCJwYXJhbUxvb3AiLCJhdHRyIiwicGFyZW50IiwiaW5kZXhPZiIsImF0dHJTcGxpdCIsInNwbGl0IiwibGVuZ3RoIiwic3BsaWNlIiwiaW5uZXJQYXJhbSIsImpvaW4iLCJwYXJhbSIsImlzVW5kZWYiLCJTaWduYWwiLCJQYXJhbSIsInJhbXBUbyIsIkF1ZGlvUGFyYW0iLCJUaW1lQmFzZSIsIl9jb2xsZWN0RGVmYXVsdHMiLCJyZXQiLCJzdWJSZXQiLCJqIiwic3ViQXR0ciIsImlzRGVmaW5lZCIsImNvbnN0ciIsImRlZmF1bHRzIiwia2V5cyIsIl9zdXBlciIsInN1cGVyRGVmcyIsInB1c2giLCJ2YWx1ZXMiLCJvcHRpb25zIiwiZGVmYXVsdEFyZyIsImdpdmVuIiwiZmFsbGJhY2siLCJnaXZlblByb3AiLCJmYWxsYmFja1Byb3AiLCJjb25uZWN0U2VyaWVzIiwiY3VycmVudFVuaXQiLCJhcmd1bWVudHMiLCJ0b1VuaXQiLCJjb25uZWN0IiwidmFsIiwiaXNOdW1iZXIiLCJhcmciLCJpc0Jvb2xlYW4iLCJpc0FycmF5IiwiQXJyYXkiLCJpc05vdGUiLCJ0ZXN0Iiwibm9PcCIsIl9yZWFkT25seSIsIndyaXRhYmxlIiwiX3dyaXRhYmxlIiwiU3RhdGUiLCJTdGFydGVkIiwiU3RvcHBlZCIsIlBhdXNlZCIsImVxdWFsUG93ZXJTY2FsZSIsInBlcmNlbnQiLCJwaUZhY3RvciIsIk1hdGgiLCJQSSIsInNpbiIsImRiVG9HYWluIiwiZGIiLCJwb3ciLCJnYWluVG9EYiIsImdhaW4iLCJsb2ciLCJMTjEwIiwiaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvIiwiaW50ZXJ2YWwiLCJub3ciLCJjb250ZXh0IiwiZXh0ZW5kIiwiY2hpbGQiLCJUZW1wQ29uc3RydWN0b3IiLCJhdWRpb0NvbnRleHQiLCJDb250ZXh0IiwiZW1pdCIsInNldENvbnRleHQiLCJjdHgiLCJzYW1wbGVSYXRlIiwiaGFzQXVkaW9Db250ZXh0Iiwid2luZG93IiwiaGFzUHJvbWlzZXMiLCJoYXNXb3JrZXJzIiwiZ2V0Q29udGV4dCIsInJlc29sdmUiLCJpbml0aWFsaXplZCIsInJlc0NhbGxiYWNrIiwib2ZmIiwib24iLCJ2ZXJzaW9uIiwiRW1pdHRlciIsIl9ldmVudHMiLCJldmVudCIsImNhbGxiYWNrIiwiZXZlbnRzIiwiZXZlbnROYW1lIiwib25jZSIsImJvdW5kQ2FsbGJhY2siLCJhcHBseSIsImV2IiwiZXZlbnRMaXN0IiwiYXJncyIsInNsaWNlIiwibGVuIiwibWl4aW4iLCJmdW5jdGlvbnMiLCJlbWl0dGVyRnVuYyIsIlRpbWVsaW5lIiwiX3RpbWVsaW5lIiwibWVtb3J5IiwiSW5maW5pdHkiLCJhZGQiLCJ0aW1lIiwidmFsdWVPZiIsImluZGV4IiwiX3NlYXJjaCIsImRpZmYiLCJyZW1vdmUiLCJjb21wYXJhdG9yIiwicGVlayIsInNoaWZ0IiwiZ2V0QWZ0ZXIiLCJnZXRCZWZvcmUiLCJjYW5jZWwiLCJhZnRlciIsImNhbmNlbEJlZm9yZSIsInByZXZpb3VzRXZlbnQiLCJiZWdpbm5pbmciLCJlbmQiLCJtaWRQb2ludCIsImZsb29yIiwibmV4dEV2ZW50IiwiX2l0ZXJhdGUiLCJsb3dlckJvdW5kIiwidXBwZXJCb3VuZCIsImZvckVhY2giLCJmb3JFYWNoQmVmb3JlIiwiZm9yRWFjaEFmdGVyIiwiZm9yRWFjaEJldHdlZW4iLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwiZm9yRWFjaEZyb20iLCJmb3JFYWNoQXRUaW1lIiwic3VwcG9ydGVkIiwiT2ZmbGluZUF1ZGlvQ29udGV4dCIsIndlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQiLCJzdGFydFJlbmRlcmluZyIsIlByb21pc2UiLCJfbmF0aXZlX3N0YXJ0UmVuZGVyaW5nIiwiZG9uZSIsIm9uY29tcGxldGUiLCJlIiwicmVuZGVyZWRCdWZmZXIiLCJBdWRpb0NvbnRleHQiLCJ3ZWJraXRBdWRpb0NvbnRleHQiLCJjbG9zZSIsInN1c3BlbmQiLCJyZXN1bWUiLCJjcmVhdGVHYWluIiwiY3JlYXRlR2Fpbk5vZGUiLCJjcmVhdGVEZWxheSIsImNyZWF0ZURlbGF5Tm9kZSIsImRlY29kZUF1ZGlvRGF0YVByb21pc2UiLCJvZmZsaW5lQ29udGV4dCIsImF1ZGlvRGF0YSIsIlVpbnQzMkFycmF5IiwiYnVmZmVyIiwiZGVjb2RlQXVkaW9EYXRhIiwiX25hdGl2ZV9kZWNvZGVBdWRpb0RhdGEiLCJzdWNjZXNzIiwiZXJyb3IiLCJwcm9wIiwiX2NvbnRleHQiLCJfZGVmaW5lUHJvcGVydHkiLCJfbGF0ZW5jeUhpbnQiLCJsYXRlbmN5SGludCIsIl9jb25zdGFudHMiLCJsb29rQWhlYWQiLCJfY29tcHV0ZWRVcGRhdGVJbnRlcnZhbCIsIl90aWNrZXIiLCJUaWNrZXIiLCJjbG9ja1NvdXJjZSIsInVwZGF0ZUludGVydmFsIiwiX3RpbWVvdXRzIiwiX3RpbWVvdXRJZHMiLCJfdGltZW91dExvb3AiLCJjdXJyZW50VGltZSIsInJlYWR5Iiwic3RhdGUiLCJ0aGVuIiwiZ2V0Q29uc3RhbnQiLCJjcmVhdGVCdWZmZXIiLCJhcnIiLCJnZXRDaGFubmVsRGF0YSIsImNvbnN0YW50IiwiY3JlYXRlQnVmZmVyU291cmNlIiwiY2hhbm5lbENvdW50IiwiY2hhbm5lbENvdW50TW9kZSIsImxvb3AiLCJzdGFydCIsInNldFRpbWVvdXQiLCJmbiIsInRpbWVvdXQiLCJpZCIsImNsZWFyVGltZW91dCIsInR5cGUiLCJoaW50IiwiY29uIiwiZGlzY29ubmVjdCIsIl90eXBlIiwiX3VwZGF0ZUludGVydmFsIiwiX2NhbGxiYWNrIiwiX2NyZWF0ZUNsb2NrIiwiVHlwZSIsIldvcmtlciIsIlRpbWVvdXQiLCJPZmZsaW5lIiwiX2NyZWF0ZVdvcmtlciIsIlVSTCIsIndlYmtpdFVSTCIsImJsb2IiLCJCbG9iIiwidG9GaXhlZCIsImJsb2JVcmwiLCJjcmVhdGVPYmplY3RVUkwiLCJ3b3JrZXIiLCJvbm1lc3NhZ2UiLCJfd29ya2VyIiwiX2NyZWF0ZVRpbWVvdXQiLCJfdGltZW91dCIsIm1heCIsInBvc3RNZXNzYWdlIiwiX2Rpc3Bvc2VDbG9jayIsInRlcm1pbmF0ZSIsIm5hdGl2ZUNvbm5lY3QiLCJBdWRpb05vZGUiLCJuYXRpdmVEaXNjb25uZWN0IiwidG9uZUNvbm5lY3QiLCJCIiwib3V0TnVtIiwiaW5OdW0iLCJpbnB1dCIsIlRPTkVfU0lMRU5DRV9WRVJTSU9OX0xPR0dJTkciLCJjb25zb2xlIiwid2FybiIsImNyZWF0ZUluc091dHMiLCJpbnB1dHMiLCJvdXRwdXRzIiwib3V0cHV0IiwiY2hhbm5lbEludGVycHJldGF0aW9uIiwiX29uQ29ubmVjdCIsInVuaXQiLCJvdXRwdXROdW0iLCJpbnB1dE51bSIsImRlc3RpbmF0aW9uIiwiY2hhaW4iLCJmYW4iLCJTaWduYWxCYXNlIiwibm9kZSIsIm91dHB1dE51bWJlciIsImlucHV0TnVtYmVyIiwiX3BhcmFtIiwiY2FuY2VsU2NoZWR1bGVkVmFsdWVzIiwib3ZlcnJpZGRlbiIsInVhIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsIldhdmVTaGFwZXJOb2RlIiwiX2ludGVybmFsTm9kZSIsIl9uYXRpdmVfY3JlYXRlV2F2ZVNoYXBlciIsIl9jdXJ2ZSIsImN1cnZlIiwiYXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJjcmVhdGVXYXZlU2hhcGVyIiwiV2F2ZVNoYXBlciIsIm1hcHBpbmciLCJidWZmZXJMZW4iLCJfc2hhcGVyIiwiaXNGaW5pdGUiLCJzZXRNYXAiLCJub3JtYWxpemVkIiwib3ZlcnNhbXBsZSIsIm92ZXJzYW1wbGluZyIsIlJhbmdlRXJyb3IiLCJ1bml0cyIsIl92YWwiLCJfdW5pdHMiLCJwYXJzZUZsb2F0IiwiY2hhckF0IiwiX2RlZmF1bHRVbml0cyIsInRvU2Vjb25kcyIsInRvVGlja3MiLCJ0b0ZyZXF1ZW5jeSIsInRvTWlkaSIsIl9leHByZXNzaW9ucyIsInJlZ2V4cCIsIm1ldGhvZCIsImRvdCIsInBhcnNlSW50Iiwic2NhbGFyIiwiX2JlYXRzVG9Vbml0cyIsIl9nZXRUaW1lU2lnbmF0dXJlIiwiX3RpY2tzVG9Vbml0cyIsImh6IiwiX2ZyZXF1ZW5jeVRvVW5pdHMiLCJ0ciIsInEiLCJ0b3RhbCIsIl9zZWNvbmRzVG9Vbml0cyIsInNhbXBsZXMiLCJkZWZhdWx0IiwiX2dldEJwbSIsIlRyYW5zcG9ydCIsImJwbSIsInRpbWVTaWduYXR1cmUiLCJfZ2V0UFBRIiwiUFBRIiwiX25vdyIsImZyZXEiLCJiZWF0cyIsInNlY29uZHMiLCJ0aWNrcyIsIl9ub0FyZyIsInRyaW0iLCJleHByIiwibWF0Y2hpbmciLCJ0b1NhbXBsZXMiLCJ0b01pbGxpc2Vjb25kcyIsIkZyZXF1ZW5jeSIsImFzc2lnbiIsIm1pZGkiLCJtdG9mIiwibm90ZSIsInBpdGNoIiwib2N0YXZlIiwibm90ZU51bWJlciIsIm5vdGVUb1NjYWxlSW5kZXgiLCJ0cmFuc3Bvc2UiLCJoYXJtb25pemUiLCJpbnRlcnZhbHMiLCJtYXAiLCJmdG9tIiwidG9Ob3RlIiwibG9nMiIsIkE0Iiwicm91bmQiLCJzY2FsZUluZGV4VG9Ob3RlIiwicXVhcnRlclRpbWUiLCJxdWFydGVycyIsImNiYiIsImNiIiwiYyMiLCJjeCIsImRiYiIsImQjIiwiZHgiLCJlYmIiLCJlYiIsImUjIiwiZXgiLCJmYmIiLCJmYiIsImYiLCJmIyIsImZ4IiwiZ2JiIiwiZ2IiLCJnIiwiZyMiLCJneCIsImFiYiIsImFiIiwiYSIsImEjIiwiYXgiLCJiYmIiLCJiYiIsImIiLCJiIyIsImJ4IiwiZnJlcXVlbmN5IiwiVGltZSIsInF1YW50aXplIiwiY2FwdHVyZSIsInF1YW50VG8iLCJuZXh0U3ViZGl2aXNpb24iLCJzdWJkaXYiLCJzdWJkaXZpc2lvbiIsInRvTm90YXRpb24iLCJ0ZXN0Tm90YXRpb25zIiwicG93ZXIiLCJjbG9zZXN0IiwiY2xvc2VzdFNlY29uZHMiLCJub3RhdGlvbiIsIm5vdGF0aW9uU2Vjb25kcyIsImFicyIsInRvQmFyc0JlYXRzU2l4dGVlbnRocyIsIm1lYXN1cmVzIiwic2l4dGVlbnRocyIsIlRyYW5zcG9ydFRpbWUiLCJEZWZhdWx0IiwiVGlja3MiLCJOb3JtYWxSYW5nZSIsIkF1ZGlvUmFuZ2UiLCJEZWNpYmVscyIsIkludGVydmFsIiwiQlBNIiwiUG9zaXRpdmUiLCJHYWluIiwiQ2VudHMiLCJEZWdyZWVzIiwiTUlESSIsIkJhcnNCZWF0c1NpeHRlZW50aHMiLCJTYW1wbGVzIiwiSGVydHoiLCJOb3RlIiwiTWlsbGlzZWNvbmRzIiwiU2Vjb25kcyIsIk5vdGF0aW9uIiwiY29udmVydCIsIl90b1VuaXRzIiwiZ2V0VmFsdWVBdFRpbWUiLCJfaW5pdGlhbFZhbHVlIiwiX2Zyb21Vbml0cyIsInNldFZhbHVlQXRUaW1lIiwibWluVmFsdWUiLCJtYXhWYWx1ZSIsIm1pbiIsIl9taW5PdXRwdXQiLCJBdXRvbWF0aW9uVHlwZSIsIkxpbmVhciIsIkV4cG9uZW50aWFsIiwiVGFyZ2V0IiwiU2V0VmFsdWUiLCJiZWZvcmUiLCJpbml0aWFsVmFsdWUiLCJkZWZhdWx0VmFsdWUiLCJwcmV2aW91c1ZhbCIsInByZXZpb3VzIiwiX2V4cG9uZW50aWFsQXBwcm9hY2giLCJfbGluZWFySW50ZXJwb2xhdGUiLCJfZXhwb25lbnRpYWxJbnRlcnBvbGF0ZSIsInNldFJhbXBQb2ludCIsImN1cnJlbnRWYWwiLCJjYW5jZWxBbmRIb2xkQXRUaW1lIiwibGluZWFyUmFtcFRvVmFsdWVBdFRpbWUiLCJleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lIiwiZXhwb25lbnRpYWxSYW1wVG8iLCJsaW5lYXJSYW1wVG8iLCJ0YXJnZXRSYW1wVG8iLCJleHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUiLCJ0aW1lQ29uc3RhbnQiLCJzZXRUYXJnZXRBdFRpbWUiLCJzZXRWYWx1ZUN1cnZlQXRUaW1lIiwiZHVyYXRpb24iLCJzY2FsaW5nIiwic2VnVGltZSIsInZhbHVlQXRUaW1lIiwidDAiLCJ2MCIsInYxIiwiZXhwIiwidDEiLCJPZmZsaW5lQ29udGV4dCIsImNoYW5uZWxzIiwiX2R1cmF0aW9uIiwiX2N1cnJlbnRUaW1lIiwicmVuZGVyIiwiYmxvY2tUaW1lIiwiYnVmZmVyU291cmNlIiwiX25hdGl2ZV9zdGFydCIsIl9nYWluTm9kZSIsImNyZWF0ZUNvbnN0YW50U291cmNlIiwiQ29uc3RhbnRTb3VyY2VOb2RlIiwiX2J1ZmZlclNvdXJjZSIsImdhaW5Ob2RlIiwiX291dHB1dCIsIm9mZnNldCIsInN0b3AiLCJfcHJveGllcyIsIl9zb3VyY2VTdGFydGVkIiwiX2NvbnN0YW50U291cmNlIiwiX2lzUGFyYW0iLCJfYXBwbHlBdXRvbWF0aW9ucyIsIl9jb25uZWN0UHJveGllcyIsInByb3h5IiwiZnJvbSIsInByZXZpb3VzTWV0aG9kIiwic2lnbmFsIiwiUG93IiwiX2V4cCIsIl9leHBTY2FsZXIiLCJfZXhwRnVuYyIsIkVudmVsb3BlIiwiYXR0YWNrIiwiZGVjYXkiLCJzdXN0YWluIiwicmVsZWFzZSIsIl9hdHRhY2tDdXJ2ZSIsIl9yZWxlYXNlQ3VydmUiLCJfc2lnIiwiYXR0YWNrQ3VydmUiLCJyZWxlYXNlQ3VydmUiLCJJbiIsImN1cnZlRGVmIiwiT3V0IiwidHJpZ2dlckF0dGFjayIsInZlbG9jaXR5Iiwib3JpZ2luYWxBdHRhY2siLCJjdXJyZW50VmFsdWUiLCJwZXJjZW50Q29tcGxldGUiLCJzbGljZUluZGV4IiwidHJpZ2dlclJlbGVhc2UiLCJ0cmlnZ2VyQXR0YWNrUmVsZWFzZSIsImsiLCJjb3NpbmVDdXJ2ZSIsInJpcHBsZUN1cnZlIiwiY3VydmVMZW4iLCJzaW5lV2F2ZSIsInN0YWlyc0N1cnZlIiwiY2VpbCIsInNpbmVDdXJ2ZSIsImNvcyIsImJvdW5jZUN1cnZlIiwiaW52ZXJ0Q3VydmUiLCJvdXQiLCJsaW5lYXIiLCJleHBvbmVudGlhbCIsImJvdW5jZSIsImNvc2luZSIsInJldmVyc2UiLCJyZXZlcnNlQ3VydmUiLCJzdGVwIiwicmlwcGxlIiwic2luZSIsIkFtcGxpdHVkZUVudmVsb3BlIiwiQW5hbHlzZXJOb2RlIiwiZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSIsInVpbnQ4IiwiVWludDhBcnJheSIsImdldEJ5dGVUaW1lRG9tYWluRGF0YSIsIkFuYWx5c2VyIiwiX2FuYWx5c2VyIiwiY3JlYXRlQW5hbHlzZXIiLCJfYnVmZmVyIiwic2l6ZSIsInNtb290aGluZyIsIldhdmVmb3JtIiwiRkZUIiwiZ2V0VmFsdWUiLCJnZXRGbG9hdEZyZXF1ZW5jeURhdGEiLCJmcmVxdWVuY3lCaW5Db3VudCIsImZmdFNpemUiLCJUeXBlRXJyb3IiLCJzbW9vdGhpbmdUaW1lQ29uc3RhbnQiLCJDb21wcmVzc29yIiwiX2NvbXByZXNzb3IiLCJjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IiLCJ0aHJlc2hvbGQiLCJrbmVlIiwicmF0aW8iLCJBZGQiLCJfc3VtIiwiTXVsdGlwbHkiLCJfbXVsdCIsIk5lZ2F0ZSIsIl9tdWx0aXBseSIsIlN1YnRyYWN0IiwiX25lZyIsIkVxdWFsUG93ZXJHYWluIiwiX2VxUG93ZXIiLCJDcm9zc0ZhZGUiLCJpbml0aWFsRmFkZSIsImZhZGUiLCJfZXF1YWxQb3dlckEiLCJfZXF1YWxQb3dlckIiLCJfb25lIiwiX2ludmVydCIsIkZpbHRlciIsIl9maWx0ZXJzIiwiZGV0dW5lIiwiUSIsIl9yb2xsb2ZmIiwicm9sbG9mZiIsImNhc2NhZGluZ0NvdW50IiwiY291bnQiLCJmaWx0ZXIiLCJjcmVhdGVCaXF1YWRGaWx0ZXIiLCJjb25uZWN0aW9uQ2hhaW4iLCJjb25jYXQiLCJNdWx0aWJhbmRTcGxpdCIsImxvdyIsIl9sb3dNaWRGaWx0ZXIiLCJtaWQiLCJoaWdoIiwibG93RnJlcXVlbmN5IiwiaGlnaEZyZXF1ZW5jeSIsIkVRMyIsIl9tdWx0aWJhbmRTcGxpdCIsIl9sb3dHYWluIiwiX21pZEdhaW4iLCJfaGlnaEdhaW4iLCJTY2FsZSIsIm91dHB1dE1pbiIsIm91dHB1dE1heCIsIl9vdXRwdXRNaW4iLCJfb3V0cHV0TWF4IiwiX3NjYWxlIiwiX2FkZCIsIl9zZXRSYW5nZSIsIlNjYWxlRXhwIiwiZXhwb25lbnQiLCJEZWxheSIsIl9tYXhEZWxheSIsIm1heERlbGF5IiwiZGVsYXlUaW1lIiwiX2RlbGF5Tm9kZSIsIkZlZWRiYWNrQ29tYkZpbHRlciIsIl9kZWxheSIsIl9mZWVkYmFjayIsInJlc29uYW5jZSIsIkFicyIsIl9hYnMiLCJGb2xsb3dlciIsIl9maWx0ZXIiLCJfZnJlcXVlbmN5VmFsdWVzIiwiX3N1YiIsIl9hdHRhY2siLCJfcmVsZWFzZSIsIl9zZXRBdHRhY2tSZWxlYXNlIiwibWluVGltZSIsIlNjYWxlZEVudmVsb3BlIiwiRnJlcXVlbmN5RW52ZWxvcGUiLCJfb2N0YXZlcyIsIm9jdGF2ZXMiLCJiYXNlRnJlcXVlbmN5IiwiR3JlYXRlclRoYW5aZXJvIiwiX3RocmVzaCIsIkdyZWF0ZXJUaGFuIiwiX2d0eiIsIkdhdGUiLCJfZm9sbG93ZXIiLCJfZ3QiLCJ0aHJlc2giLCJhdHRhY2tUaW1lIiwicmVsZWFzZVRpbWUiLCJfd3JhcFNjaGVkdWxlTWV0aG9kcyIsInRpY2tzVW50aWxUaW1lIiwiX2dldFRpY2tzVW50aWxFdmVudCIsIlRpY2tTaWduYWwiLCJwcmV2RXZlbnQiLCJzZWdtZW50cyIsInJhbXBWYWwiLCJzZWdtZW50RHVyIiwidmFsMCIsInZhbDEiLCJzYW1wbGVUaW1lIiwiZ2V0VGlja3NBdFRpbWUiLCJnZXREdXJhdGlvbk9mVGlja3MiLCJjdXJyZW50VGljayIsImdldFRpbWVPZlRpY2siLCJ0aWNrIiwiZGVsdGEiLCJzcXJ0Iiwic29sMSIsInRpY2tzVG9UaW1lIiwid2hlbiIsInRpbWVUb1RpY2tzIiwic3RhcnRUaWNrcyIsImVuZFRpY2tzIiwiVGltZWxpbmVTdGF0ZSIsImluaXRpYWwiLCJfaW5pdGlhbCIsInNldFN0YXRlQXRUaW1lIiwiZ2V0TGFzdFN0YXRlIiwiZ2V0TmV4dFN0YXRlIiwiVGlja1NvdXJjZSIsIl9zdGF0ZSIsIl90aWNrT2Zmc2V0Iiwic2V0VGlja3NBdFRpbWUiLCJwYXVzZSIsInN0b3BFdmVudCIsInRtcEV2ZW50IiwibGFzdFN0YXRlIiwiZWxhcHNlZFRpY2tzIiwicGVyaW9kU3RhcnRUaW1lIiwib2Zmc2V0RXZlbnQiLCJnZXRTZWNvbmRzQXRUaW1lIiwiZWxhcHNlZFNlY29uZHMiLCJnZXRTdGF0ZUF0VGltZSIsImFic29sdXRlVGlja3MiLCJmb3JFYWNoVGlja0JldHdlZW4iLCJsYXN0U3RhdGVFdmVudCIsIm5leHRUaWNrVGltZSIsIkNsb2NrIiwiX25leHRUaWNrIiwiX3RpY2tTb3VyY2UiLCJfbGFzdFVwZGF0ZSIsIl9ib3VuZExvb3AiLCJfbG9vcCIsIkludGVydmFsVGltZWxpbmUiLCJfcm9vdCIsIl9sZW5ndGgiLCJJbnRlcnZhbE5vZGUiLCJpbnNlcnQiLCJ1cGRhdGVIZWlnaHQiLCJ1cGRhdGVNYXgiLCJfcmViYWxhbmNlIiwicmVzdWx0cyIsInNlYXJjaCIsIl9yZW1vdmVOb2RlIiwiX3NldFJvb3QiLCJfcmVwbGFjZU5vZGVJblBhcmVudCIsInJlcGxhY2VtZW50IiwiaXNMZWZ0Q2hpbGQiLCJsZWZ0IiwicmlnaHQiLCJ0ZW1wIiwiZ2V0QmFsYW5jZSIsIl9yb3RhdGVMZWZ0IiwicGl2b3ROb2RlIiwiX3JvdGF0ZVJpZ2h0IiwiYmFsYW5jZSIsImFsbE5vZGVzIiwidHJhdmVyc2UiLCJzZWFyY2hBZnRlciIsIl9sZWZ0IiwiX3JpZ2h0IiwiaGVpZ2h0IiwicG9pbnQiLCJUcmFuc3BvcnRFdmVudCIsIl9ldmVudElkIiwiX29uY2UiLCJpbnZva2UiLCJjbGVhciIsIlRyYW5zcG9ydFJlcGVhdEV2ZW50IiwiX2ludGVydmFsIiwiX2N1cnJlbnRJZCIsIl9uZXh0SWQiLCJfYm91bmRSZXN0YXJ0IiwiX3Jlc3RhcnQiLCJfY3JlYXRlRXZlbnRzIiwic2NoZWR1bGVPbmNlIiwiX2JvdW5kQ3JlYXRlRXZlbnRzIiwiX2xvb3BTdGFydCIsIl9sb29wRW5kIiwiX3BwcSIsIlRyYW5zcG9ydENvbnN0cnVjdG9yIiwiX2Nsb2NrIiwiX3Byb2Nlc3NUaWNrIiwiX2JpbmRDbG9ja0V2ZW50cyIsIl90aW1lU2lnbmF0dXJlIiwiX3NjaGVkdWxlZEV2ZW50cyIsIl9yZXBlYXRlZEV2ZW50cyIsIl9zeW5jZWRTaWduYWxzIiwiX3N3aW5nVGlja3MiLCJfc3dpbmdBbW91bnQiLCJzd2luZyIsInN3aW5nU3ViZGl2aXNpb24iLCJsb29wU3RhcnQiLCJsb29wRW5kIiwidGlja1RpbWUiLCJwcm9ncmVzcyIsImFtb3VudCIsInNjaGVkdWxlIiwiX2FkZEV2ZW50Iiwic2NoZWR1bGVSZXBlYXQiLCJldmVudElkIiwiaXRlbSIsInRpbWVsaW5lIiwidG9nZ2xlIiwidGltZVNpZyIsInN0YXJ0UG9zaXRpb24iLCJlbmRQb3NpdGlvbiIsInNldExvb3BQb2ludHMiLCJwcHEiLCJyZW1haW5pbmdUaWNrcyIsInN5bmNTaWduYWwiLCJyYXRpb1NpZ25hbCIsInVuc3luY1NpZ25hbCIsInN5bmNlZFNpZ25hbCIsIlZvbHVtZSIsInZvbHVtZSIsIl91bm11dGVkVm9sdW1lIiwibXV0ZSIsIk1hc3RlciIsIl92b2x1bWUiLCJ0b01hc3RlciIsIk1hc3RlckNvbnN0cnVjdG9yIiwiU291cmNlIiwiX3N5bmNlZCIsIl9zY2hlZHVsZWQiLCJfc3RhcnQiLCJyZXN0YXJ0IiwiX3N0b3AiLCJzY2hlZCIsIl9zeW5jZWRTdGFydCIsInN5bmMiLCJzdGF0ZUV2ZW50Iiwic3RhcnRPZmZzZXQiLCJfc3luY2VkU3RvcCIsInVuc3luYyIsIkF1ZGlvQnVmZmVyIiwiY29weVRvQ2hhbm5lbCIsInNyYyIsImNoYW5OdW0iLCJjaGFubmVsIiwiY29weUZyb21DaGFubmVsIiwiZGVzdCIsIkJ1ZmZlciIsIl9yZXZlcnNlZCIsIl94aHIiLCJfb25sb2FkIiwidXJsIiwib25sb2FkIiwibG9hZGVkIiwibG9hZCIsImNhdGNoIiwib25lcnJvciIsImJ1ZmYiLCJlcnIiLCJfcmVtb3ZlRnJvbURvd25sb2FkUXVldWUiLCJhYm9ydCIsIm51bWJlck9mQ2hhbm5lbHMiLCJmcm9tQXJyYXkiLCJpc011bHRpZGltZW5zaW9uYWwiLCJ0b01vbm8iLCJ0b0FycmF5Iiwib3V0cHV0QXJyYXkiLCJudW1DaGFubmVscyIsImNoYW5uZWxBcnJheSIsInNhbXBsZSIsInN0YXJ0U2FtcGxlcyIsImVuZFNhbXBsZXMiLCJfcmV2ZXJzZSIsInJldiIsIl9kb3dubG9hZFF1ZXVlIiwiYmFzZVVybCIsImZyb21VcmwiLCJyZXF1ZXN0IiwibWF0Y2hlcyIsImV4dGVuc2lvbnMiLCJleHRlbnNpb24iLCJzdXBwb3J0c1R5cGUiLCJyZXBsYWNlIiwib25FcnJvciIsIm9uUHJvZ3Jlc3MiLCJ0b3RhbFByb2dyZXNzIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwicmVzcG9uc2VUeXBlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInN0YXR1cyIsInJlc3BvbnNlIiwibGVuZ3RoQ29tcHV0YWJsZSIsInNlbmQiLCJjYW5jZWxEb3dubG9hZHMiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjYW5QbGF5VHlwZSIsInJlbW92ZUV2ZW50cyIsImZhaWwiLCJPc2NpbGxhdG9yTm9kZSIsIm9uZW5kZWQiLCJfc3RhcnRUaW1lIiwiX3N0b3BUaW1lIiwiX29zY2lsbGF0b3IiLCJjcmVhdGVPc2NpbGxhdG9yIiwiX2dhaW4iLCJzZXRQZXJpb2RpY1dhdmUiLCJwZXJpb2RpY1dhdmUiLCJjYW5jZWxTdG9wIiwiT3NjaWxsYXRvciIsIl93YXZlIiwiX3BhcnRpYWxzIiwicGFydGlhbHMiLCJfcGhhc2UiLCJwaGFzZSIsIlNpbmUiLCJUcmlhbmdsZSIsIlNhd3Rvb3RoIiwiU3F1YXJlIiwiQ3VzdG9tIiwic3luY0ZyZXF1ZW5jeSIsInVuc3luY0ZyZXF1ZW5jeSIsImlzQmFzaWNUeXBlIiwiY29lZnMiLCJfZ2V0UmVhbEltYWdpbmFyeSIsImNyZWF0ZVBlcmlvZGljV2F2ZSIsInBlcmlvZGljV2F2ZVNpemUiLCJyZWFsIiwiaW1hZyIsInBhcnRpYWxDb3VudCIsInBhcnRpYWwiLCJleGVjIiwiX2ludmVyc2VGRlQiLCJzdW0iLCJfZ2V0SW5pdGlhbFZhbHVlIiwidHdvUGkiLCJBdWRpb1RvR2FpbiIsIl9ub3JtIiwieCIsIlplcm8iLCJMRk8iLCJhbXBsaXR1ZGUiLCJfc3RvcHBlZFNpZ25hbCIsIl96ZXJvcyIsIl9zdG9wcGVkVmFsdWUiLCJfYTJnIiwiX3NjYWxlciIsImN1cnJlbnRNaW4iLCJjdXJyZW50TWF4IiwiTGltaXRlciIsIkxvd3Bhc3NDb21iRmlsdGVyIiwiX2xvd3Bhc3MiLCJkYW1wZW5pbmciLCJNZXJnZSIsIl9tZXJnZXIiLCJjcmVhdGVDaGFubmVsTWVyZ2VyIiwiTWV0ZXIiLCJnZXRMZXZlbCIsIlNwbGl0IiwiX3NwbGl0dGVyIiwiY3JlYXRlQ2hhbm5lbFNwbGl0dGVyIiwiTWlkU2lkZVNwbGl0IiwiX3NwbGl0IiwiX21pZEFkZCIsIlNRUlQxXzIiLCJfc2lkZVN1YnRyYWN0Iiwic2lkZSIsIk1pZFNpZGVNZXJnZSIsIl90aW1lc1R3b0xlZnQiLCJfdGltZXNUd29SaWdodCIsIl9tZXJnZSIsIk1pZFNpZGVDb21wcmVzc29yIiwiX21pZFNpZGVTcGxpdCIsIl9taWRTaWRlTWVyZ2UiLCJNb25vIiwiTXVsdGliYW5kQ29tcHJlc3NvciIsIlN0ZXJlb1Bhbm5lck5vZGUiLCJwYW4iLCJyaWdodFdhdmVTaGFwZXIiLCJsZWZ0V2F2ZVNoYXBlciIsImxlZnRHYWluIiwicmlnaHRHYWluIiwibWVyZ2UiLCJjcmVhdGVTdGVyZW9QYW5uZXIiLCJQYW5uZXIiLCJpbml0aWFsUGFuIiwiX3Bhbm5lciIsIlBhbm5lcjNEIiwiY3JlYXRlUGFubmVyIiwicGFubmluZ01vZGVsIiwibWF4RGlzdGFuY2UiLCJkaXN0YW5jZU1vZGVsIiwiY29uZU91dGVyR2FpbiIsImNvbmVPdXRlckFuZ2xlIiwiY29uZUlubmVyQW5nbGUiLCJyZWZEaXN0YW5jZSIsInJvbGxvZmZGYWN0b3IiLCJfb3JpZW50YXRpb24iLCJvcmllbnRhdGlvblgiLCJvcmllbnRhdGlvblkiLCJvcmllbnRhdGlvbloiLCJfcG9zaXRpb24iLCJwb3NpdGlvblgiLCJwb3NpdGlvblkiLCJwb3NpdGlvbloiLCJfcmFtcFRpbWVDb25zdGFudCIsInNldFBvc2l0aW9uIiwieSIsInoiLCJzZXRPcmllbnRhdGlvbiIsInBvcyIsIl9hbGlhc1Byb3BlcnR5IiwiUGFuVm9sIiwiU29sbyIsIl9zb2xvQmluZCIsIl9zb2xvZWQiLCJzb2xvIiwiX2lzU29sb2VkIiwiX2FkZFNvbG8iLCJfcmVtb3ZlU29sbyIsIl9jdXJyZW50U29sbyIsIl9ub1NvbG9zIiwiQ3RybEludGVycG9sYXRlIiwibG93ZXJQb3NpdGlvbiIsImxvd2VyIiwidXBwZXIiLCJfaW50ZXJwb2xhdGUiLCJyZXRBcnJheSIsInJldE9iaiIsIl90b051bWJlciIsIkN0cmxNYXJrb3YiLCJuZXh0IiwiZGlzdHJpYnV0aW9uIiwiX2dldFByb2JEaXN0cmlidXRpb24iLCJyYW5kIiwicmFuZG9tIiwiZGlzdCIsImNob3NlbiIsIm5lZWRzTm9ybWFsaXppbmciLCJvcHRpb24iLCJwcm9iYWJpbGl0eSIsIkN0cmxQYXR0ZXJuIiwiX3NodWZmbGVkIiwiX2RpcmVjdGlvbiIsIlVwIiwiRG93biIsIlVwRG93biIsIkRvd25VcCIsIkFsdGVybmF0ZVVwIiwiQWx0ZXJuYXRlRG93biIsIlJhbmRvbSIsIlJhbmRvbVdhbGsiLCJSYW5kb21PbmNlIiwiX3NodWZmbGVWYWx1ZXMiLCJjb3B5IiwicmFuZFZhbCIsIkN0cmxSYW5kb20iLCJpbnRlZ2VyIiwiQnVmZmVycyIsInVybHMiLCJfYnVmZmVycyIsIl9sb2FkaW5nQ291bnQiLCJfYnVmZmVyTG9hZGVkIiwiaGFzIiwiaXNMb2FkZWQiLCJidWZmTmFtZSIsIkJ1c2VzIiwiY2hhbm5lbE5hbWUiLCJzZW5kS25vYiIsInJlY2VpdmUiLCJEcmF3IiwiZXhwaXJhdGlvbiIsImFudGljaXBhdGlvbiIsIl9ib3VuZERyYXdMb29wIiwiX2RyYXdMb29wIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiTGlzdGVuZXIiLCJMaXN0ZW5lckNvbnN0cnVjdG9yIiwiZm9yd2FyZFgiLCJmb3J3YXJkWSIsImZvcndhcmRaIiwidXBYIiwidXBZIiwidXBaIiwibGlzdGVuZXIiLCJvcmlnaW5hbENvbnRleHQiLCJyZW5kZXJSZXQiLCJhdHRlbXB0UmVuZGVyIiwidHJpZXMiLCJFZmZlY3QiLCJfZHJ5V2V0Iiwid2V0IiwiZWZmZWN0U2VuZCIsImVmZmVjdFJldHVybiIsImNvbm5lY3RFZmZlY3QiLCJlZmZlY3QiLCJBdXRvRmlsdGVyIiwiX2xmbyIsImRlcHRoIiwiZGVsYXkiLCJvY3QiLCJBdXRvUGFubmVyIiwiQXV0b1dhaCIsImZvbGxvd2VyIiwiX3N3ZWVwUmFuZ2UiLCJfYmFzZUZyZXF1ZW5jeSIsIl9pbnB1dEJvb3N0IiwiX2JhbmRwYXNzIiwiX3BlYWtpbmciLCJfc2V0U3dlZXBSYW5nZSIsInNlbnNpdGl2aXR5IiwiYmFzZUZyZXEiLCJzZW5zaXRpdnkiLCJNb2R1bG8iLCJtb2R1bHVzIiwiX3N1YnRyYWN0IiwiX21vZFNpZ25hbCIsIl9zZXRXYXZlU2hhcGVyIiwibW9kIiwiQml0Q3J1c2hlciIsImludlN0ZXBTaXplIiwiYml0cyIsIl9tb2R1bG8iLCJfYml0cyIsIkNoZWJ5c2hldiIsIl9vcmRlciIsIm9yZGVyIiwiX2dldENvZWZmaWNpZW50IiwiZGVncmVlIiwibWVtbyIsIlN0ZXJlb0VmZmVjdCIsImVmZmVjdFNlbmRMIiwiZWZmZWN0U2VuZFIiLCJlZmZlY3RSZXR1cm5MIiwiZWZmZWN0UmV0dXJuUiIsIkNob3J1cyIsIl9kZXB0aCIsIl9kZWxheVRpbWUiLCJfbGZvTCIsIl9sZm9SIiwiX2RlbGF5Tm9kZUwiLCJfZGVsYXlOb2RlUiIsInNwcmVhZCIsImRldmlhdGlvbiIsIkNvbnZvbHZlciIsIl9jb252b2x2ZXIiLCJjcmVhdGVDb252b2x2ZXIiLCJEaXN0b3J0aW9uIiwiX2Rpc3RvcnRpb24iLCJkaXN0b3J0aW9uIiwiZGVnIiwiRmVlZGJhY2tFZmZlY3QiLCJfZmVlZGJhY2tHYWluIiwiZmVlZGJhY2siLCJGZWVkYmFja0RlbGF5IiwiY29tYkZpbHRlclR1bmluZ3MiLCJhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMiLCJGcmVldmVyYiIsInJvb21TaXplIiwiX2NvbWJGaWx0ZXJzIiwiX2FsbHBhc3NGaWx0ZXJzTCIsIl9hbGxwYXNzRmlsdGVyc1IiLCJhbGxwYXNzTCIsImFsbHBhc3NSIiwibGZwZiIsImFsIiwiYXIiLCJjZiIsImNvbWJGaWx0ZXJEZWxheVRpbWVzIiwiY29tYkZpbHRlclJlc29uYW5jZXMiLCJhbGxwYXNzRmlsdGVyRnJlcXMiLCJKQ1JldmVyYiIsIl9zY2FsZVJvb21TaXplIiwiX2FsbHBhc3NGaWx0ZXJzIiwiX2ZlZWRiYWNrQ29tYkZpbHRlcnMiLCJhZiIsImFsbHBhc3MiLCJmYmNmIiwiYXBmIiwiTWlkU2lkZUVmZmVjdCIsIm1pZFNlbmQiLCJzaWRlU2VuZCIsIm1pZFJldHVybiIsInNpZGVSZXR1cm4iLCJQaGFzZXIiLCJfZmlsdGVyc0wiLCJfbWFrZUZpbHRlcnMiLCJzdGFnZXMiLCJfZmlsdGVyc1IiLCJjb25uZWN0VG9GcmVxIiwiZmlsdGVycyIsIlN0ZXJlb1hGZWVkYmFja0VmZmVjdCIsIl9mZWVkYmFja0xSIiwiX2ZlZWRiYWNrUkwiLCJQaW5nUG9uZ0RlbGF5IiwiX2xlZnREZWxheSIsIm1heERlbGF5VGltZSIsIl9yaWdodERlbGF5IiwiX3JpZ2h0UHJlRGVsYXkiLCJQaXRjaFNoaWZ0IiwiX2ZyZXF1ZW5jeSIsIl9kZWxheUEiLCJfbGZvQSIsIl9kZWxheUIiLCJfbGZvQiIsIl9jcm9zc0ZhZGUiLCJfY3Jvc3NGYWRlTEZPIiwiX2ZlZWRiYWNrRGVsYXkiLCJfcGl0Y2giLCJfd2luZG93U2l6ZSIsIndpbmRvd1NpemUiLCJmYWN0b3IiLCJCdWZmZXJTb3VyY2UiLCJfc291cmNlU3RvcHBlZCIsIl9zb3VyY2UiLCJfb25lbmRlZCIsInBsYXliYWNrUmF0ZSIsImZhZGVJbiIsImZhZGVPdXQiLCJfb25lbmRlZFRpbWVvdXQiLCJmYWRlSW5UaW1lIiwiY29tcHV0ZWREdXIiLCJmYWRlT3V0VGltZSIsImhlbGREdXJhdGlvbiIsInN0YXJ0RmFkZSIsImFkZGl0aW9uYWxUYWlsIiwiTm9pc2UiLCJfcGxheWJhY2tSYXRlIiwiX25vaXNlQnVmZmVycyIsInJhdGUiLCJfbm9pc2VBcnJheXMiLCJwaW5rIiwiY2hhbm5lbE51bSIsImIwIiwiYjEiLCJiMiIsImIzIiwiYjQiLCJiNSIsImI2Iiwid2hpdGUiLCJicm93biIsImxhc3RPdXQiLCJjcmVhdGVCdWZmZXJzIiwiUmV2ZXJiIiwicHJlRGVsYXkiLCJnZW5lcmF0ZSIsIm5vaXNlTCIsIm5vaXNlUiIsIlN0ZXJlb0ZlZWRiYWNrRWZmZWN0IiwiX2ZlZWRiYWNrTCIsIl9mZWVkYmFja1IiLCJTdGVyZW9XaWRlbmVyIiwid2lkdGgiLCJfdHdvVGltZXNXaWR0aE1pZCIsIl90d29UaW1lc1dpZHRoU2lkZSIsIl9taWRNdWx0IiwiX29uZU1pbnVzV2lkdGgiLCJfc2lkZU11bHQiLCJUcmVtb2xvIiwiX2FtcGxpdHVkZUwiLCJfYW1wbGl0dWRlUiIsIlZpYnJhdG8iLCJFdmVudCIsIl9zdGFydE9mZnNldCIsIl9wcm9iYWJpbGl0eSIsIl9odW1hbml6ZSIsImh1bWFuaXplIiwiX3Jlc2NoZWR1bGVFdmVudHMiLCJzdGFydFRpY2siLCJfZ2V0TG9vcER1cmF0aW9uIiwiX3RpY2siLCJwcm9iIiwidmFyaWF0aW9uIiwicmVzY2hlZHVsVGltZSIsImxhc3RFdmVudCIsImxvb3BEdXJhdGlvbiIsIkxvb3AiLCJfZXZlbnQiLCJpdGVyYXRpb25zIiwiaXRlcnMiLCJQYXJ0IiwiX2ZvckVhY2giLCJfc3RhcnROb3RlIiwiYXQiLCJfcmVzdGFydEV2ZW50IiwicmVtb3ZlQWxsIiwiX3NldEFsbCIsIl90ZXN0TG9vcEJvdW5kcmllcyIsIlBhdHRlcm4iLCJfcGF0dGVybiIsInBhdHRlcm4iLCJ2YWxzIiwiU2VxdWVuY2UiLCJfc3ViZGl2aXNpb24iLCJfaW5kZXhUaW1lIiwic3ViU3ViZGl2aXNpb24iLCJQdWxzZU9zY2lsbGF0b3IiLCJfd2lkdGhHYXRlIiwiX3Nhd3Rvb3RoIiwiUFdNT3NjaWxsYXRvciIsIl9wdWxzZSIsIm1vZHVsYXRpb25GcmVxdWVuY3kiLCJfbW9kdWxhdG9yIiwiRk1Pc2NpbGxhdG9yIiwiX2NhcnJpZXIiLCJtb2R1bGF0aW9uSW5kZXgiLCJtb2R1bGF0aW9uVHlwZSIsImhhcm1vbmljaXR5IiwiX21vZHVsYXRpb25Ob2RlIiwiQU1Pc2NpbGxhdG9yIiwiX21vZHVsYXRpb25TY2FsZSIsIkZhdE9zY2lsbGF0b3IiLCJfb3NjaWxsYXRvcnMiLCJfc3ByZWFkIiwib3NjIiwiaXRlcmF0b3IiLCJPbW5pT3NjaWxsYXRvciIsIl9zb3VyY2VUeXBlIiwiT21uaU9zY1R5cGUiLCJwcmVmaXgiLCJzdWJzdHIiLCJfY3JlYXRlTmV3T3NjaWxsYXRvciIsIm9zY1R5cGUiLCJPc2NpbGxhdG9yQ29uc3RydWN0b3IiLCJvbGRPc2MiLCJtVHlwZSIsIkluc3RydW1lbnQiLCJfc3luY01ldGhvZCIsInRpbWVQb3NpdGlvbiIsIm9yaWdpbmFsTWV0aG9kIiwiX29yaWdpbmFsX3RyaWdnZXJBdHRhY2siLCJfb3JpZ2luYWxfdHJpZ2dlclJlbGVhc2UiLCJNb25vcGhvbmljIiwicG9ydGFtZW50byIsIl90cmlnZ2VyRW52ZWxvcGVBdHRhY2siLCJzZXROb3RlIiwiX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UiLCJnZXRMZXZlbEF0VGltZSIsImVudmVsb3BlIiwicG9ydFRpbWUiLCJTeW50aCIsIm9zY2lsbGF0b3IiLCJBTVN5bnRoIiwibW9kdWxhdGlvbiIsIm1vZHVsYXRpb25FbnZlbG9wZSIsIk1vbm9TeW50aCIsImZpbHRlckVudmVsb3BlIiwiRHVvU3ludGgiLCJ2b2ljZTAiLCJ2b2ljZTEiLCJfdmlicmF0byIsInZpYnJhdG9SYXRlIiwiX3ZpYnJhdG9HYWluIiwidmlicmF0b0Ftb3VudCIsIkZNU3ludGgiLCJjYXJyaWVyIiwibW9kdWxhdG9yIiwiTWVtYnJhbmVTeW50aCIsInBpdGNoRGVjYXkiLCJtYXhOb3RlIiwiaW5oYXJtUmF0aW9zIiwiTWV0YWxTeW50aCIsIl9mcmVxTXVsdGlwbGllcnMiLCJfYW1wbGl0dWUiLCJfaGlnaHBhc3MiLCJfZmlsdGVyRnJlcVNjYWxlciIsIm11bHQiLCJ2ZWwiLCJvY3RzIiwiTm9pc2VTeW50aCIsIm5vaXNlIiwiUGx1Y2tTeW50aCIsIl9ub2lzZSIsImF0dGFja05vaXNlIiwiX2xmY2YiLCJkZWxheUFtb3VudCIsIlBvbHlTeW50aCIsInBvbHlwaG9ueSIsIk1BWF9QT0xZUEhPTlkiLCJ2b2ljZXMiLCJfdHJpZ2dlcnMiLCJ2Iiwidm9pY2UiLCJub3RlcyIsIm9sZGVzdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdHJpbmdpZmllZCIsImRlc2MiLCJyZWxlYXNlQWxsIiwiU2FtcGxlciIsInVybE1hcCIsImlzTmFOIiwiX2FjdGl2ZVNvdXJjZXMiLCJfZmluZENsb3Nlc3QiLCJkaWZmZXJlbmNlIiwiY2xvc2VzdE5vdGUiLCJzb3VyY2UiLCJzb3VyY2VzIiwic2V0V2F2ZVRhYmxlIiwiY3JlYXRlV2F2ZVRhYmxlIiwiR2FpblRvQXVkaW8iLCJOb3JtYWxpemUiLCJpbnB1dE1pbiIsImlucHV0TWF4IiwiX2lucHV0TWluIiwiX2lucHV0TWF4IiwiX2RpdiIsIlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsIiwiX291dHB1dFNpZyIsIl9sYXN0VmFsIiwiX29uVGljayIsIl9iaW5kQW5jaG9yVmFsdWUiLCJfYW5jaG9yVmFsdWUiLCJfc3luY2VkQ2FsbGJhY2siLCJHcmFpblBsYXllciIsImdyYWluU2l6ZSIsIl9ncmFpblNpemUiLCJfb3ZlcmxhcCIsIm92ZXJsYXAiLCJfb25zdG9wIiwiX29mZnNldCIsInNlZWsiLCJQbGF5ZXIiLCJhdXRvc3RhcnQiLCJfZWxhcHNlZFRpbWUiLCJyZXRyaWdnZXIiLCJfb25Tb3VyY2VFbmQiLCJjb21wdXRlZER1cmF0aW9uIiwiX3N0b3BBdE5leHRJdGVyYXRpb24iLCJuZXh0U3RvcCIsInBvc2l0aW9uIiwic3RvcFRpbWUiLCJQbGF5ZXJzIiwiX3BsYXllcnMiLCJfZmFkZUluIiwiX2ZhZGVPdXQiLCJwbGF5ZXIiLCJwbGF5aW5nIiwicGxheWVyTmFtZSIsInN0b3BBbGwiLCJVc2VyTWVkaWEiLCJfbWVkaWFTdHJlYW0iLCJfc3RyZWFtIiwiX2RldmljZSIsImxhYmVsT3JJZCIsImVudW1lcmF0ZURldmljZXMiLCJkZXZpY2VzIiwiZGV2aWNlIiwiZmluZCIsImxhYmVsIiwiZGV2aWNlSWQiLCJjb25zdHJhaW50cyIsImF1ZGlvIiwiZWNob0NhbmNlbGxhdGlvbiIsIm1lZGlhRGV2aWNlcyIsImdldFVzZXJNZWRpYSIsInN0cmVhbSIsImNyZWF0ZU1lZGlhU3RyZWFtU291cmNlIiwiZ2V0QXVkaW9UcmFja3MiLCJ0cmFjayIsImtpbmQiLCJhY3RpdmUiLCJncm91cElkIiwiTWlkaSIsImZhY3RvcnkiLCJnbG9iYWwiLCJyZXF1aXJlIiwiaCIsImNvZGUiLCIxIiwiY2hhckNvZGVBdCIsInRvQnl0ZUFycmF5IiwiZnJvbUJ5dGVBcnJheSIsImJhc2U2NGpzIiwiMiIsIjMiLCJUWVBFRF9BUlJBWV9TVVBQT1JUIiwid3JpdGUiLCJpc0J1ZmZlciIsIlkiLCJBcnJheUJ1ZmZlciIsImJ5dGVMZW5ndGgiLCJfYXVnbWVudCIsImRhdGEiLCJfX3Byb3RvX18iLCJfaXNCdWZmZXIiLCJwb29sU2l6ZSIsIloiLCJSIiwiVSIsInUiLCJOdW1iZXIiLCJWIiwidyIsIlMiLCJUIiwiQSIsIlciLCIkIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJYIiwiTiIsIlAiLCJhYSIsIk8iLCJTbG93QnVmZmVyIiwiSU5TUEVDVF9NQVhfQllURVMiLCJmb28iLCJzdWJhcnJheSIsImNvbXBhcmUiLCJpc0VuY29kaW5nIiwiZXF1YWxzIiwiaW5zcGVjdCIsInJlYWRVSW50OCIsIndyaXRlVUludDgiLCJ0b0pTT04iLCJfYXJyIiwicmVhZFVJbnRMRSIsInJlYWRVSW50QkUiLCJyZWFkVUludDE2TEUiLCJyZWFkVUludDE2QkUiLCJyZWFkVUludDMyTEUiLCJyZWFkVUludDMyQkUiLCJyZWFkSW50TEUiLCJyZWFkSW50QkUiLCJyZWFkSW50OCIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZEZsb2F0TEUiLCJyZWFkIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVJbnRMRSIsIndyaXRlVUludEJFIiwid3JpdGVVSW50MTZMRSIsIndyaXRlVUludDE2QkUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVSW50MzJCRSIsIndyaXRlSW50TEUiLCJ3cml0ZUludEJFIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkxFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVGbG9hdEJFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlRG91YmxlQkUiLCJfc2V0IiwiZmlsbCIsInRvQXJyYXlCdWZmZXIiLCJfIiwidG9Mb2NhbGVTdHJpbmciLCJzZWxmIiwiYmFzZTY0LWpzIiwiaWVlZTc1NCIsImlzYXJyYXkiLCI0IiwiRVM2UHJvbWlzZSIsImNhIiwiZWEiLCJfcmVzdWx0IiwiaWEiLCJnYSIsImhhIiwiX2xhYmVsIiwiX29uZXJyb3IiLCJmYSIsIl9zdWJzY3JpYmVycyIsImphIiwia2EiLCJfaW5zdGFuY2VDb25zdHJ1Y3RvciIsInByb21pc2UiLCJfcmVtYWluaW5nIiwiX2VudW1lcmF0ZSIsImRhIiwiTXV0YXRpb25PYnNlcnZlciIsIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiLCJiYSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiaW1wb3J0U2NyaXB0cyIsIk1lc3NhZ2VDaGFubmVsIiwibmV4dFRpY2siLCJjcmVhdGVUZXh0Tm9kZSIsIm9ic2VydmUiLCJjaGFyYWN0ZXJEYXRhIiwicG9ydDEiLCJwb3J0MiIsInJ1bk9uTG9vcCIsInJ1bk9uQ29udGV4dCIsInN1YnN0cmluZyIsIl9lYWNoRW50cnkiLCJfc2V0dGxlZEF0IiwiX3dpbGxTZXR0bGVBdCIsImFsbCIsInJhY2UiLCJyZWplY3QiLCJfc2V0U2NoZWR1bGVyIiwiX3NldEFzYXAiLCJfYXNhcCIsInBvbHlmaWxsIiwiRnVuY3Rpb24iLCJjYXN0IiwiX3Byb2Nlc3MiLCI1IiwiZmV0Y2hKc29ucCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJyZW1vdmVDaGlsZCIsImpzb25wQ2FsbGJhY2siLCJqc29ucENhbGxiYWNrRnVuY3Rpb24iLCJEYXRlIiwib2siLCJqc29uIiwic2V0QXR0cmlidXRlIiwiY2hhcnNldCIsImFwcGVuZENoaWxkIiwiNiIsImNyZWF0ZUVsZW1lbnROUyIsIkhUTUxFbGVtZW50Iiwic2FmYXJpIiwic2V0SW1tZWRpYXRlIiwicmV2b2tlT2JqZWN0VVJMIiwicmVhZHlTdGF0ZSIsIklOSVQiLCJocmVmIiwiZG93bmxvYWQiLCJNb3VzZUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsIkRPTkUiLCJGaWxlUmVhZGVyIiwib25sb2FkZW5kIiwicmVzdWx0IiwibG9jYXRpb24iLCJyZWFkQXNEYXRhVVJMIiwibXNTYXZlT3JPcGVuQmxvYiIsIldSSVRJTkciLCJvbndyaXRlc3RhcnQiLCJvbnByb2dyZXNzIiwib253cml0ZSIsIm9uYWJvcnQiLCJvbndyaXRlZW5kIiwiY29udGVudCIsInNhdmVBcyIsIjciLCJOYU4iLCJMTjIiLCI4IiwiOSIsIm9hIiwibmEiLCJtYSIsImxhIiwicWEiLCJyYSIsInNvcnQiLCJwYSIsImxpYnRlc3MiLCJHbHVUZXNzZWxhdG9yIiwid2luZGluZ1J1bGUiLCJHTFVfVEVTU19XSU5ESU5HX09ERCIsIkdMVV9URVNTX1dJTkRJTkdfTk9OWkVSTyIsIkdMVV9URVNTX1dJTkRJTkdfUE9TSVRJVkUiLCJHTFVfVEVTU19XSU5ESU5HX05FR0FUSVZFIiwiR0xVX1RFU1NfV0lORElOR19BQlNfR0VRX1RXTyIsInByaW1pdGl2ZVR5cGUiLCJHTF9MSU5FX0xPT1AiLCJHTF9UUklBTkdMRVMiLCJHTF9UUklBTkdMRV9TVFJJUCIsIkdMX1RSSUFOR0xFX0ZBTiIsImVycm9yVHlwZSIsIkdMVV9URVNTX01JU1NJTkdfQkVHSU5fUE9MWUdPTiIsIkdMVV9URVNTX01JU1NJTkdfRU5EX1BPTFlHT04iLCJHTFVfVEVTU19NSVNTSU5HX0JFR0lOX0NPTlRPVVIiLCJHTFVfVEVTU19NSVNTSU5HX0VORF9DT05UT1VSIiwiR0xVX1RFU1NfQ09PUkRfVE9PX0xBUkdFIiwiR0xVX1RFU1NfTkVFRF9DT01CSU5FX0NBTExCQUNLIiwiZ2x1RW51bSIsIkdMVV9URVNTX01FU0giLCJHTFVfVEVTU19UT0xFUkFOQ0UiLCJHTFVfVEVTU19XSU5ESU5HX1JVTEUiLCJHTFVfVEVTU19CT1VOREFSWV9PTkxZIiwiR0xVX0lOVkFMSURfRU5VTSIsIkdMVV9JTlZBTElEX1ZBTFVFIiwiR0xVX1RFU1NfQkVHSU4iLCJHTFVfVEVTU19WRVJURVgiLCJHTFVfVEVTU19FTkQiLCJHTFVfVEVTU19FUlJPUiIsIkdMVV9URVNTX0VER0VfRkxBRyIsIkdMVV9URVNTX0NPTUJJTkUiLCJHTFVfVEVTU19CRUdJTl9EQVRBIiwiR0xVX1RFU1NfVkVSVEVYX0RBVEEiLCJHTFVfVEVTU19FTkRfREFUQSIsIkdMVV9URVNTX0VSUk9SX0RBVEEiLCJHTFVfVEVTU19FREdFX0ZMQUdfREFUQSIsIkdMVV9URVNTX0NPTUJJTkVfREFUQSIsImdsdURlbGV0ZVRlc3MiLCJnbHVUZXNzUHJvcGVydHkiLCJnbHVHZXRUZXNzUHJvcGVydHkiLCJnbHVUZXNzTm9ybWFsIiwiZ2x1VGVzc0NhbGxiYWNrIiwiZ2x1VGVzc1ZlcnRleCIsImdsdVRlc3NCZWdpblBvbHlnb24iLCJnbHVUZXNzQmVnaW5Db250b3VyIiwiZ2x1VGVzc0VuZENvbnRvdXIiLCJnbHVUZXNzRW5kUG9seWdvbiIsIjEwIiwib3BlbnR5cGUiLCJ0YWJsZSIsIlVpbnQxNkFycmF5IiwidHJhbnMiLCJzb3VyY2VJbmRleCIsInRhZyIsImJpdGNvdW50IiwiZGVzdExlbiIsImx0cmVlIiwiZHRyZWUiLCJ2ZSIsInVlIiwic2UiLCJ0ZSIsImtlIiwib2UiLCJwZSIsInFlIiwicmUiLCJsZSIsIngxIiwieTEiLCJ4MiIsInkyIiwiY29tbWFuZHMiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsInRhYmxlTmFtZSIsImZpZWxkcyIsImZvcm1hdCIsImdseXBocyIsInhlIiwiYXNzZXJ0Iiwic2NyaXB0IiwiZGVmYXVsdExhbmdTeXMiLCJyZXFGZWF0dXJlSW5kZXgiLCJmZWF0dXJlSW5kZXhlcyIsImxhbmdTeXNSZWNvcmRzIiwibGFuZ1N5cyIsImZlYXR1cmUiLCJmZWF0dXJlUGFyYW1zIiwibG9va3VwTGlzdEluZGV4ZXMiLCJsb29rdXBUeXBlIiwibG9va3VwRmxhZyIsInN1YnRhYmxlcyIsImdldFVpbnQ4IiwiZ2V0VWludDE2IiwiZ2V0VWludDMyIiwiZ2V0SW50MTYiLCJyZWxhdGl2ZU9mZnNldCIsImdseXBoSW5kZXgiLCJmb250IiwiY21hcCIsImVuY29kaW5nIiwibmFtZXMiLCJRZSIsIm51bWJlck9mR2x5cGhzIiwiZ2x5cGhOYW1lSW5kZXgiLCJiaW5kQ29uc3RydWN0b3JWYWx1ZXMiLCJwYXRoIiwiY29uZmlndXJhYmxlIiwiTGUiLCJnZXRDYXJkMTYiLCJnZXRCeXRlIiwiZ2V0T2Zmc2V0IiwiZ2V0Qnl0ZXMiLCJvYmplY3RzIiwiZW5kT2Zmc2V0IiwicGFyc2VCeXRlIiwiUGFyc2VyIiwiTmUiLCJvcCIsInNhIiwiVGUiLCJ0YSIsIlVlIiwiRGF0YVZpZXciLCJfc3VicnMiLCJfc3VicnNCaWFzIiwicHJpdmF0ZSIsIl9kZWZhdWx0V2lkdGhYIiwiZGVmYXVsdFdpZHRoWCIsIl9ub21pbmFsV2lkdGhYIiwibm9taW5hbFdpZHRoWCIsInN1YnJzIiwiX3ByaXZhdGVEaWN0IiwieGEiLCJjbG9zZVBhdGgiLCJtb3ZlVG8iLCJpc0NJREZvbnQiLCJ0YWJsZXMiLCJjZmYiLCJ0b3BEaWN0IiwiX2ZkU2VsZWN0IiwiX2ZkQXJyYXkiLCJwb3AiLCJsaW5lVG8iLCJjdXJ2ZVRvIiwiZ3N1YnJzQmlhcyIsImdzdWJycyIsImFkdmFuY2VXaWR0aCIsIkFhIiwiRGEiLCJFYSIsIkllIiwiUmVjb3JkIiwiZGljdCIsIkZhIiwidG9wRGljdHMiLCJKYSIsIlhhIiwiWWEiLCJkZiIsImZmIiwiZWYiLCIkYSIsIl9hIiwibWIiLCJuYiIsIm9iIiwicGIiLCJUYWJsZSIsIm51bVRhYmxlcyIsInNlYXJjaFJhbmdlIiwiZW50cnlTZWxlY3RvciIsInJhbmdlU2hpZnQiLCJzaXplT2YiLCJhcmd1bWVudCIsImVuY29kZSIsInFiIiwiY2hhclRvR2x5cGhJbmRleCIsImdldE1ldHJpY3MiLCJ0YiIsInViIiwidmIiLCJ3YiIsInhiIiwieWIiLCJ6YiIsIkFiIiwic3Vic3RGb3JtYXQiLCJDYiIsIkRiIiwiRWIiLCJGYiIsInBhcnNlU2hvcnQiLCJHYiIsIm51bWJlck9mQ29udG91cnMiLCJfeE1pbiIsIl95TWluIiwiX3hNYXgiLCJfeU1heCIsImVuZFBvaW50SW5kaWNlcyIsInBhcnNlVVNob3J0IiwiaW5zdHJ1Y3Rpb25MZW5ndGgiLCJpbnN0cnVjdGlvbnMiLCJvbkN1cnZlIiwibGFzdFBvaW50T2ZDb250b3VyIiwicG9pbnRzIiwiaXNDb21wb3NpdGUiLCJjb21wb25lbnRzIiwieFNjYWxlIiwic2NhbGUwMSIsInNjYWxlMTAiLCJ5U2NhbGUiLCJkeSIsIm1hdGNoZWRQb2ludHMiLCJwYXJzZUNoYXIiLCJwYXJzZUYyRG90MTQiLCJIYiIsIkpiIiwiSWIiLCJxdWFkcmF0aWNDdXJ2ZVRvIiwiS2IiLCJnZXRQYXRoIiwiTWIiLCJnZXRDb21tYW5kcyIsInZmIiwiX2ZwZ21TdGF0ZSIsIl9wcmVwU3RhdGUiLCJfZXJyb3JTdGF0ZSIsIk5iIiwiT2IiLCJzaWduIiwiUGIiLCJRYiIsIlJiIiwiU2IiLCJUYiIsImF4aXMiLCJzbG9wZSIsIm5vcm1hbFNsb3BlIiwiZnJlZXplIiwiVWIiLCJ4ZiIsInlmIiwiVmIiLCJ4byIsInlvIiwicHJldlBvaW50T25Db250b3VyIiwibmV4dFBvaW50T25Db250b3VyIiwieFRvdWNoZWQiLCJ5VG91Y2hlZCIsInByZXZlbnRFeHRlbnNpb25zIiwiV2IiLCJlbnYiLCJzdGFjayIsInByb2ciLCJ6cDAiLCJ6cDEiLCJ6cDIiLCJycDAiLCJycDEiLCJycDIiLCJmdiIsInB2IiwiZHB2IiwiWGIiLCJ0Wm9uZSIsImdab25lIiwiWWIiLCJpcCIsIlpiIiwiREVCVUciLCIkYiIsIl9iIiwiYWMiLCJ6MiIsInoxIiwiYmMiLCJ4YyIsIkdjIiwiejAiLCJkaXN0YW5jZSIsInpmIiwic2V0UmVsYXRpdmUiLCJ0b3VjaCIsIkhjIiwidG91Y2hlZCIsInByZXZUb3VjaGVkIiwibmV4dFRvdWNoZWQiLCJpbnRlcnBvbGF0ZSIsIkljIiwiSmMiLCJjb250b3VycyIsIktjIiwiTmMiLCJRYyIsImN2dCIsImN2Q3V0SW4iLCJYYyIsIlljIiwibWQiLCJwcGVtIiwiZGVsdGFCYXNlIiwiZGVsdGFTaGlmdCIsInhkIiwiemQiLCJHZCIsIk5kIiwiT2QiLCJQZCIsIm1pbkRpcyIsIlFkIiwiZW1wdHkiLCJmYW1pbHlOYW1lIiwic3R5bGVOYW1lIiwidW5pdHNQZXJFbSIsImFzY2VuZGVyIiwiZGVzY2VuZGVyIiwiZm9udEZhbWlseSIsImVuIiwiZm9udFN1YmZhbWlseSIsImZ1bGxOYW1lIiwicG9zdFNjcmlwdE5hbWUiLCJkZXNpZ25lciIsImRlc2lnbmVyVVJMIiwibWFudWZhY3R1cmVyIiwibWFudWZhY3R1cmVyVVJMIiwibGljZW5zZSIsImxpY2Vuc2VVUkwiLCJkZXNjcmlwdGlvbiIsImNvcHlyaWdodCIsInRyYWRlbWFyayIsImNyZWF0ZWRUaW1lc3RhbXAiLCJvczIiLCJ1c1dlaWdodENsYXNzIiwid2VpZ2h0Q2xhc3MiLCJ1c1dlaWdodENsYXNzZXMiLCJNRURJVU0iLCJ1c1dpZHRoQ2xhc3MiLCJ3aWR0aENsYXNzIiwidXNXaWR0aENsYXNzZXMiLCJmc1NlbGVjdGlvbiIsImZzU2VsZWN0aW9uVmFsdWVzIiwiUkVHVUxBUiIsIlNlIiwiR2x5cGhTZXQiLCJzdWJzdGl0dXRpb24iLCJfaGludGluZyIsIm91dGxpbmVzRm9ybWF0IiwiUmQiLCJTZCIsIlRkIiwicGFyc2VUYWciLCJwYXJzZUZpeGVkIiwic2tpcCIsIlVkIiwiY29vcmRpbmF0ZXMiLCJWZCIsImNlIiwicmVhZEZpbGUiLCJtZXNzYWdlIiwiZWUiLCJnZXRUYWciLCJnZXRVTG9uZyIsImNoZWNrc3VtIiwiY29tcHJlc3Npb24iLCJnZSIsImNvbXByZXNzZWRMZW5ndGgiLCJ3ZSIsImhlIiwiZ2V0VVNob3J0IiwiZmUiLCJNZSIsInBhcnNlIiwicGFyc2VTaG9ydExpc3QiLCJmcGdtIiwicGFyc2VCeXRlTGlzdCIsImhlYWQiLCJXZSIsImluZGV4VG9Mb2NGb3JtYXQiLCJoaGVhIiwiWGUiLCJudW1iZXJPZkhNZXRyaWNzIiwiWmUiLCJtYXhwIiwiJGUiLCJudW1HbHlwaHMiLCJqZiIsInBvc3QiLCJrZiIsImdseXBoTmFtZXMiLCJwcmVwIiwiZ2YiLCJIZiIsIlZlIiwiWWUiLCJnbHlwaEluZGV4TWFwIiwiYWRkVW5pY29kZSIsImNmZkVuY29kaW5nIiwiZ2x5cGhJbmRleFRvTmFtZSIsImtlcm5pbmdQYWlycyIsIkdmIiwiZ3BvcyIsIkZmIiwiaW5pdCIsImdzdWIiLCJvZiIsImZ2YXIiLCJDZiIsIm1ldGEiLCJwZiIsIm1ldGFzIiwiY29kZVBvaW50QXQiLCJtZSIsIm5lIiwiaXNFbXB0eSIsImFkZFBvaW50IiwiYWRkWCIsImFkZFkiLCJhZGRCZXppZXIiLCJhZGRRdWFkIiwiYmV6aWVyQ3VydmVUbyIsInF1YWRUbyIsImdldEJvdW5kaW5nQm94IiwiZHJhdyIsImJlZ2luUGF0aCIsImZpbGxTdHlsZSIsInN0cm9rZVN0eWxlIiwibGluZVdpZHRoIiwidG9QYXRoRGF0YSIsInRvU1ZHIiwidG9ET01FbGVtZW50IiwiemUiLCJBZSIsIkJlIiwiQ2UiLCJCWVRFIiwiQ0hBUiIsIkNIQVJBUlJBWSIsIlVTSE9SVCIsIlNIT1JUIiwiVUlOVDI0IiwiVUxPTkciLCJMT05HIiwiRklYRUQiLCJGV09SRCIsIlVGV09SRCIsIkxPTkdEQVRFVElNRSIsIlRBRyIsIkNhcmQ4IiwiQ2FyZDE2IiwiT2ZmU2l6ZSIsIlNJRCIsIk5VTUJFUiIsIk5VTUJFUjE2IiwiTlVNQkVSMzIiLCJSRUFMIiwiTkFNRSIsIlNUUklORyIsIlVURjgiLCJVVEYxNiIsIkRlIiwieC1tYWMtY3JvYXRpYW4iLCJ4LW1hYy1jeXJpbGxpYyIsIngtbWFjLWdhZWxpYyIsIngtbWFjLWdyZWVrIiwieC1tYWMtaWNlbGFuZGljIiwieC1tYWMtaW51aXQiLCJ4LW1hYy1jZSIsIm1hY2ludG9zaCIsIngtbWFjLXJvbWFuaWFuIiwieC1tYWMtdHVya2lzaCIsIk1BQ1NUUklORyIsIkVlIiwiRmUiLCJXZWFrTWFwIiwiR2UiLCJWQVJERUxUQVMiLCJJTkRFWCIsIk9CSkVDVCIsIkRJQ1QiLCJPUEVSQU5EIiwiT1BFUkFUT1IiLCJPUCIsIkhlIiwiQ0hBUlNUUklORyIsIlRBQkxFIiwiUkVDT1JEIiwiTElURVJBTCIsIkNvdmVyYWdlIiwiU2NyaXB0TGlzdCIsIkZlYXR1cmVMaXN0IiwiTG9va3VwTGlzdCIsInVzaG9ydExpc3QiLCJ0YWJsZUxpc3QiLCJyZWNvcmRMaXN0IiwiSmUiLCJieXRlIiwidVNob3J0Iiwic2hvcnQiLCJ1TG9uZyIsImZpeGVkIiwibG9uZ0RhdGVUaW1lIiwiZ2V0SW50OCIsInBhcnNlQ2FyZDgiLCJwYXJzZUNhcmQxNiIsInBhcnNlU0lEIiwicGFyc2VPZmZzZXQxNiIsInBhcnNlVUxvbmciLCJwYXJzZU9mZnNldDMyIiwicGFyc2VTdHJpbmciLCJwYXJzZUxvbmdEYXRlVGltZSIsInBhcnNlVmVyc2lvbiIsInBhcnNlVUxvbmdMaXN0IiwicGFyc2VPZmZzZXQxNkxpc3QiLCJwYXJzZVVTaG9ydExpc3QiLCJwYXJzZUxpc3QiLCJwYXJzZUxpc3QzMiIsInBhcnNlUmVjb3JkTGlzdCIsInBhcnNlUmVjb3JkTGlzdDMyIiwicGFyc2VTdHJ1Y3QiLCJwYXJzZVZhbHVlUmVjb3JkIiwieFBsYWNlbWVudCIsInlQbGFjZW1lbnQiLCJ4QWR2YW5jZSIsInlBZHZhbmNlIiwieFBsYURldmljZSIsInlQbGFEZXZpY2UiLCJ4QWR2RGV2aWNlIiwieUFkdkRldmljZSIsInBhcnNlVmFsdWVSZWNvcmRMaXN0IiwicGFyc2VQb2ludGVyIiwicGFyc2VQb2ludGVyMzIiLCJwYXJzZUxpc3RPZkxpc3RzIiwicGFyc2VDb3ZlcmFnZSIsInJhbmdlcyIsInBhcnNlQ2xhc3NEZWYiLCJzdGFydEdseXBoIiwiY2xhc3NlcyIsImNsYXNzSWQiLCJsaXN0IiwibGlzdDMyIiwicmVjb3JkTGlzdDMyIiwicG9pbnRlciIsInBvaW50ZXIzMiIsIm9mZnNldDE2IiwidVNob3J0TGlzdCIsIm9mZnNldDMyIiwidUxvbmdMaXN0Iiwic3RydWN0IiwiY292ZXJhZ2UiLCJjbGFzc0RlZiIsIktlIiwicmVzZXJ2ZWQiLCJwYXJzZVNjcmlwdExpc3QiLCJwYXJzZUZlYXR1cmVMaXN0IiwicGFyc2VMb29rdXBMaXN0IiwibWFya0ZpbHRlcmluZ1NldCIsInBhcnNlRmVhdHVyZVZhcmlhdGlvbnNMaXN0IiwiY29uZGl0aW9uU2V0T2Zmc2V0IiwiZmVhdHVyZVRhYmxlU3Vic3RpdHV0aW9uT2Zmc2V0IiwiZ2V0Q2FyZDgiLCJnZXRTaG9ydCIsImdldEZpeGVkIiwiYnl0ZXNUb1N0cmluZyIsImxhbmd1YWdlIiwiZ3JvdXBDb3VudCIsInNlZ0NvdW50IiwibWFrZSIsInVuaWNvZGUiLCJ1bmljb2RlcyIsImdseXBoSWQiLCJzZWdDb3VudFgyIiwiY21hcDRMZW5ndGgiLCJjbWFwMTJPZmZzZXQiLCJPZSIsIlBlIiwibmFtZVRvR2x5cGhJbmRleCIsIlJlIiwibGluZSIsInhNaW4iLCJ5TWluIiwieE1heCIsInlNYXgiLCJoaW50aW5nIiwiZ2V0Q29udG91cnMiLCJsZWZ0U2lkZUJlYXJpbmciLCJyaWdodFNpZGVCZWFyaW5nIiwiZHJhd1BvaW50cyIsImFyYyIsImRyYXdNZXRyaWNzIiwiZ2x5cGhMb2FkZXIiLCJ0dGZHbHlwaExvYWRlciIsImNmZkdseXBoTG9hZGVyIiwiZm9ybWF0TWFqb3IiLCJmb3JtYXRNaW5vciIsIm9mZnNldFNpemUiLCJyb3MiLCJmZEFycmF5IiwiZmRTZWxlY3QiLCJ5YSIsInN1YnJzQmlhcyIsImNoYXJTdHJpbmdzIiwibkdseXBocyIsInZhIiwid2EiLCJ3ZWlnaHQiLCJ3ZWlnaHROYW1lIiwiZm9udEJCb3giLCJmb250TWF0cml4IiwiaGVhZGVyIiwibmFtZUluZGV4IiwiQ2EiLCJ0b3BEaWN0SW5kZXgiLCJnbG9iYWxTdWJySW5kZXgiLCJjaGFyc2V0cyIsIklhIiwiY2hhclN0cmluZ3NJbmRleCIsIkthIiwicHJpdmF0ZURpY3QiLCJMYSIsInN0cmluZ0luZGV4Iiwic3RyaW5ncyIsIkdhIiwiZm9udFJldmlzaW9uIiwiY2hlY2tTdW1BZGp1c3RtZW50IiwibWFnaWNOdW1iZXIiLCJmbGFncyIsImNyZWF0ZWQiLCJtb2RpZmllZCIsIm1hY1N0eWxlIiwibG93ZXN0UmVjUFBFTSIsImZvbnREaXJlY3Rpb25IaW50IiwiZ2x5cGhEYXRhRm9ybWF0IiwiZ2V0VGltZSIsImxpbmVHYXAiLCJhZHZhbmNlV2lkdGhNYXgiLCJtaW5MZWZ0U2lkZUJlYXJpbmciLCJtaW5SaWdodFNpZGVCZWFyaW5nIiwieE1heEV4dGVudCIsImNhcmV0U2xvcGVSaXNlIiwiY2FyZXRTbG9wZVJ1biIsImNhcmV0T2Zmc2V0IiwibWV0cmljRGF0YUZvcm1hdCIsIm1heFBvaW50cyIsIm1heENvbnRvdXJzIiwibWF4Q29tcG9zaXRlUG9pbnRzIiwibWF4Q29tcG9zaXRlQ29udG91cnMiLCJtYXhab25lcyIsIm1heFR3aWxpZ2h0UG9pbnRzIiwibWF4U3RvcmFnZSIsIm1heEZ1bmN0aW9uRGVmcyIsIm1heEluc3RydWN0aW9uRGVmcyIsIm1heFN0YWNrRWxlbWVudHMiLCJtYXhTaXplT2ZJbnN0cnVjdGlvbnMiLCJtYXhDb21wb25lbnRFbGVtZW50cyIsIm1heENvbXBvbmVudERlcHRoIiwiX2UiLCIwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5IiwiMjAiLCIyMSIsIjIyIiwiMjMiLCIyNCIsIjI1IiwiMjYiLCIyNyIsIjI4IiwiMjkiLCIzMCIsIjMxIiwiMzIiLCIzMyIsIjM0IiwiMzUiLCIzNiIsIjM3IiwiMzgiLCIzOSIsIjQwIiwiNDEiLCI0MiIsIjQzIiwiNDQiLCI0NSIsIjQ2IiwiNDciLCI0OCIsIjQ5IiwiNTAiLCI1MSIsIjUyIiwiNTMiLCI1NCIsIjU1IiwiNTYiLCI1NyIsIjU4IiwiNTkiLCI2MCIsIjYxIiwiNjIiLCI2MyIsIjY0IiwiNjUiLCI2NiIsIjY3IiwiNjgiLCI2OSIsIjcwIiwiNzEiLCI3MiIsIjczIiwiNzQiLCI3NSIsIjc2IiwiNzciLCI3OCIsIjc5IiwiODAiLCI4MSIsIjgyIiwiODMiLCI4NCIsIjg1IiwiODYiLCI4NyIsIjg4IiwiODkiLCI5MCIsIjkxIiwiOTIiLCI5MyIsIjk0IiwiMTI4IiwiMTI5IiwiMTMwIiwiMTMxIiwiMTMyIiwiMTMzIiwiMTM0IiwiMTM1IiwiMTM2IiwiMTM3IiwiMTM4IiwiMTM5IiwiMTQwIiwiMTQxIiwiMTQyIiwiMTQzIiwiMTQ0IiwiMTQ1IiwiMTQ2IiwiMTQ3IiwiMTQ4IiwiMTQ5IiwiMTUwIiwiMTUxIiwiYmYiLCIxMDc4IiwiMTA1MiIsIjExNTYiLCIxMTE4IiwiNTEyMSIsIjE1MzYxIiwiMzA3MyIsIjIwNDkiLCIxMTI2NSIsIjEzMzEzIiwiMTIyODkiLCI0MDk3IiwiNjE0NSIsIjgxOTMiLCIxNjM4NSIsIjEwMjUiLCIxMDI0MSIsIjcxNjkiLCIxNDMzNyIsIjkyMTciLCIxMDY3IiwiMTEwMSIsIjIwOTIiLCIxMDY4IiwiMTEzMyIsIjEwNjkiLCIxMDU5IiwiMjExNyIsIjEwOTMiLCI4MjE4IiwiNTE0NiIsIjExNTAiLCIxMDI2IiwiMTAyNyIsIjMwNzYiLCI1MTI0IiwiMjA1MiIsIjQxMDAiLCIxMDI4IiwiMTE1NSIsIjEwNTAiLCI0MTIyIiwiMTAyOSIsIjEwMzAiLCIxMTY0IiwiMTEyNSIsIjIwNjciLCIxMDQzIiwiMzA4MSIsIjEwMjQ5IiwiNDEwNSIsIjkyMjUiLCIxNjM5MyIsIjYxNTMiLCI4MjAxIiwiMTc0MTciLCI1MTI5IiwiMTMzMjEiLCIxODQ0MSIsIjcxNzciLCIxMTI3MyIsIjIwNTciLCIxMDMzIiwiMTIyOTciLCIxMDYxIiwiMTA4MCIsIjExMjQiLCIxMDM1IiwiMjA2MCIsIjMwODQiLCIxMDM2IiwiNTEzMiIsIjYxNTYiLCI0MTA4IiwiMTEyMiIsIjExMTAiLCIxMDc5IiwiMzA3OSIsIjEwMzEiLCI1MTI3IiwiNDEwMyIsIjIwNTUiLCIxMDMyIiwiMTEzNSIsIjEwOTUiLCIxMTI4IiwiMTAzNyIsIjEwODEiLCIxMDM4IiwiMTAzOSIsIjExMzYiLCIxMDU3IiwiMTExNyIsIjIxNDEiLCIyMTA4IiwiMTA3NiIsIjEwNzciLCIxMDQwIiwiMjA2NCIsIjEwNDEiLCIxMDk5IiwiMTA4NyIsIjExMDciLCIxMTU4IiwiMTE1OSIsIjEwODkiLCIxMTExIiwiMTA0MiIsIjEwODgiLCIxMTA4IiwiMTA2MiIsIjEwNjMiLCIyMDk0IiwiMTEzNCIsIjEwNzEiLCIyMTEwIiwiMTA4NiIsIjExMDAiLCIxMDgyIiwiMTE1MyIsIjExNDYiLCIxMTAyIiwiMTE0OCIsIjExMDQiLCIyMTI4IiwiMTEyMSIsIjEwNDQiLCIyMDY4IiwiMTE1NCIsIjEwOTYiLCIxMTIzIiwiMTA0NSIsIjEwNDYiLCIyMDcwIiwiMTA5NCIsIjExMzEiLCIyMTU1IiwiMzE3OSIsIjEwNDgiLCIxMDQ3IiwiMTA0OSIsIjkyNzUiLCI0MTU1IiwiNTE3OSIsIjMxMzEiLCIxMDgzIiwiMjEwNyIsIjgyNTEiLCI2MjAzIiwiNzIyNyIsIjExMDMiLCI3MTk0IiwiMzA5OCIsIjYxNzAiLCIyMDc0IiwiMTEzMiIsIjEwNzQiLCIxMTE1IiwiMTA1MSIsIjEwNjAiLCIxMTI3NCIsIjE2Mzk0IiwiMTMzMjIiLCI5MjI2IiwiNTEzMCIsIjcxNzgiLCIxMjI5OCIsIjE3NDE4IiwiNDEwNiIsIjE4NDQyIiwiMjA1OCIsIjE5NDY2IiwiNjE1NCIsIjE1MzcwIiwiMTAyNTAiLCIyMDQ5MCIsIjMwODIiLCIxMDM0IiwiMjE1MTQiLCIxNDM0NiIsIjgyMDIiLCIyMDc3IiwiMTA1MyIsIjExMTQiLCIxMDY0IiwiMjE0MyIsIjEwOTciLCIxMDkyIiwiMTA5OCIsIjEwNTQiLCIxMTA1IiwiMTA1NSIsIjEwOTAiLCIxMTUyIiwiMTA1OCIsIjEwNzAiLCIxMDU2IiwiMjExNSIsIjEwOTEiLCIxMDY2IiwiMTEwNiIsIjExNjAiLCIxMTU3IiwiMTE0NCIsIjExMzAiLCJwbGF0Zm9ybUlEIiwiZW5jb2RpbmdJRCIsImxhbmd1YWdlSUQiLCJuYW1lSUQiLCJoZiIsImJlZ2luIiwieEF2Z0NoYXJXaWR0aCIsImZzVHlwZSIsInlTdWJzY3JpcHRYU2l6ZSIsInlTdWJzY3JpcHRZU2l6ZSIsInlTdWJzY3JpcHRYT2Zmc2V0IiwieVN1YnNjcmlwdFlPZmZzZXQiLCJ5U3VwZXJzY3JpcHRYU2l6ZSIsInlTdXBlcnNjcmlwdFlTaXplIiwieVN1cGVyc2NyaXB0WE9mZnNldCIsInlTdXBlcnNjcmlwdFlPZmZzZXQiLCJ5U3RyaWtlb3V0U2l6ZSIsInlTdHJpa2VvdXRQb3NpdGlvbiIsInNGYW1pbHlDbGFzcyIsInBhbm9zZSIsInVsVW5pY29kZVJhbmdlMSIsInVsVW5pY29kZVJhbmdlMiIsInVsVW5pY29kZVJhbmdlMyIsInVsVW5pY29kZVJhbmdlNCIsImFjaFZlbmRJRCIsInVzRmlyc3RDaGFySW5kZXgiLCJ1c0xhc3RDaGFySW5kZXgiLCJzVHlwb0FzY2VuZGVyIiwic1R5cG9EZXNjZW5kZXIiLCJzVHlwb0xpbmVHYXAiLCJ1c1dpbkFzY2VudCIsInVzV2luRGVzY2VudCIsInVsQ29kZVBhZ2VSYW5nZTEiLCJ1bENvZGVQYWdlUmFuZ2UyIiwic3hIZWlnaHQiLCJzQ2FwSGVpZ2h0IiwidXNEZWZhdWx0Q2hhciIsInVzQnJlYWtDaGFyIiwidXNNYXhDb250ZW50IiwidW5pY29kZVJhbmdlcyIsImdldFVuaWNvZGVSYW5nZSIsIml0YWxpY0FuZ2xlIiwidW5kZXJsaW5lUG9zaXRpb24iLCJ1bmRlcmxpbmVUaGlja25lc3MiLCJpc0ZpeGVkUGl0Y2giLCJtaW5NZW1UeXBlNDIiLCJtYXhNZW1UeXBlNDIiLCJtaW5NZW1UeXBlMSIsIm1heE1lbVR5cGUxIiwibGYiLCJkZWx0YUdseXBoSWQiLCJzdWJzdGl0dXRlIiwic2VxdWVuY2VzIiwiYWx0ZXJuYXRlU2V0cyIsImxpZ2F0dXJlU2V0cyIsImxpZ0dseXBoIiwibWYiLCJzZXF1ZW5jZUluZGV4IiwibG9va3VwTGlzdEluZGV4IiwicnVsZVNldHMiLCJsb29rdXBSZWNvcmRzIiwiY2xhc3NTZXRzIiwiY292ZXJhZ2VzIiwiY2hhaW5SdWxlU2V0cyIsImJhY2t0cmFjayIsImxvb2thaGVhZCIsImJhY2t0cmFja0NsYXNzRGVmIiwiaW5wdXRDbGFzc0RlZiIsImxvb2thaGVhZENsYXNzRGVmIiwiY2hhaW5DbGFzc1NldCIsImJhY2t0cmFja0NvdmVyYWdlIiwiaW5wdXRDb3ZlcmFnZSIsImxvb2thaGVhZENvdmVyYWdlIiwic3Vic3RpdHV0ZXMiLCJuZiIsInNjcmlwdHMiLCJmZWF0dXJlcyIsImxvb2t1cHMiLCJ2YXJpYXRpb25zIiwicWYiLCJmb250VG9UYWJsZSIsImFkdmFuY2VXaWR0aEF2ZyIsInJiIiwibWF4TGVmdFNpZGVCZWFyaW5nIiwiaGFzQ2hhciIsImdldEVuZ2xpc2hOYW1lIiwidW5pcXVlSUQiLCJwcmVmZXJyZWRGYW1pbHkiLCJwcmVmZXJyZWRTdWJmYW1pbHkiLCJjb21wdXRlQ2hlY2tTdW0iLCJzZWFyY2hUYWciLCJiaW5TZWFyY2giLCJnZXRUYWJsZSIsImNyZWF0ZURlZmF1bHRUYWJsZSIsImdldFNjcmlwdE5hbWVzIiwiZ2V0RGVmYXVsdFNjcmlwdE5hbWUiLCJnZXRTY3JpcHRUYWJsZSIsImdldExhbmdTeXNUYWJsZSIsImdldEZlYXR1cmVUYWJsZSIsImdldExvb2t1cFRhYmxlcyIsImdldEdseXBoQ2xhc3MiLCJnZXRDb3ZlcmFnZUluZGV4IiwiZXhwYW5kQ292ZXJhZ2UiLCJkZWZhdWx0S2VybmluZ1RhYmxlcyIsImdldEtlcm5pbmdUYWJsZXMiLCJnZXRLZXJuaW5nVmFsdWUiLCJwb3NGb3JtYXQiLCJwYWlyU2V0cyIsInNlY29uZEdseXBoIiwidmFsdWUxIiwiY2xhc3NEZWYxIiwiY2xhc3NEZWYyIiwiY2xhc3NSZWNvcmRzIiwiZ2V0U2luZ2xlIiwic3ViIiwiYnkiLCJnZXRBbHRlcm5hdGVzIiwiZ2V0TGlnYXR1cmVzIiwiYWRkU2luZ2xlIiwiYWRkQWx0ZXJuYXRlIiwiYWRkTGlnYXR1cmUiLCJnZXRGZWF0dXJlIiwicmYiLCJzZiIsInRmIiwidWYiLCJ3ZiIsInNyUGVyaW9kIiwic3JQaGFzZSIsInNyVGhyZXNob2xkIiwidHJ1bmMiLCJORUdBVElWRV9JTkZJTklUWSIsInVudG91Y2giLCJQT1NJVElWRV9JTkZJTklUWSIsIkFmIiwiYXV0b0ZsaXAiLCJmdW5jcyIsImluaGliaXRHcmlkRml0Iiwic3RvcmUiLCJpZ25vcmVDdnQiLCJCZiIsImNoYXJUb0dseXBoIiwic3RyaW5nVG9HbHlwaHMiLCJkZWZhdWx0UmVuZGVyT3B0aW9ucyIsImxpZ2EiLCJybGlnIiwibmFtZVRvR2x5cGgiLCJrZXJuaW5nIiwiZm9yRWFjaEdseXBoIiwibGV0dGVyU3BhY2luZyIsInRyYWNraW5nIiwiZ2V0UGF0aHMiLCJnZXRBZHZhbmNlV2lkdGgiLCJ2YWxpZGF0ZSIsInRvVGFibGVzIiwidG9CdWZmZXIiLCJyZXF1ZXN0RmlsZVN5c3RlbSIsIndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtIiwiVEVNUE9SQVJZIiwicm9vdCIsImdldEZpbGUiLCJjcmVhdGVXcml0ZXIiLCJ0b1VSTCIsIndyaXRlRmlsZVN5bmMiLCJJVEFMSUMiLCJVTkRFUlNDT1JFIiwiTkVHQVRJVkUiLCJPVVRMSU5FRCIsIlNUUklLRU9VVCIsIkJPTEQiLCJVU0VSX1RZUE9fTUVUUklDUyIsIldXUyIsIk9CTElRVUUiLCJVTFRSQV9DT05ERU5TRUQiLCJFWFRSQV9DT05ERU5TRUQiLCJDT05ERU5TRUQiLCJTRU1JX0NPTkRFTlNFRCIsIlNFTUlfRVhQQU5ERUQiLCJFWFBBTkRFRCIsIkVYVFJBX0VYUEFOREVEIiwiVUxUUkFfRVhQQU5ERUQiLCJUSElOIiwiRVhUUkFfTElHSFQiLCJMSUdIVCIsIk5PUk1BTCIsIlNFTUlfQk9MRCIsIkVYVFJBX0JPTEQiLCJCTEFDSyIsImF4ZXMiLCJpbnN0YW5jZXMiLCJvZmZzZXRUb0RhdGEiLCJEZiIsInZhbHVlRm9ybWF0MSIsInZhbHVlRm9ybWF0MiIsInZhbHVlMiIsImNsYXNzMUNvdW50IiwiY2xhc3MyQ291bnQiLCJFZiIsIiRkIiwiX2QiLCJGb250IiwiR2x5cGgiLCJQYXRoIiwiQm91bmRpbmdCb3giLCJfcGFyc2UiLCJzdGF0dXNUZXh0IiwibG9hZFN5bmMiLCJyZWFkRmlsZVN5bmMiLCJmcyIsInJ1biIsImZ1biIsInRpdGxlIiwiYnJvd3NlciIsImFyZ3YiLCJ2ZXJzaW9ucyIsImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwibGlzdGVuZXJzIiwiYmluZGluZyIsImN3ZCIsImNoZGlyIiwidW1hc2siLCJpdGVyYWJsZSIsImFwcGVuZCIsImdldE93blByb3BlcnR5TmFtZXMiLCJib2R5VXNlZCIsInJlYWRBc0FycmF5QnVmZmVyIiwiX2luaXRCb2R5IiwiX2JvZHlJbml0IiwiX2JvZHlUZXh0IiwiaXNQcm90b3R5cGVPZiIsIl9ib2R5QmxvYiIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJfYm9keUZvcm1EYXRhIiwic2VhcmNoUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXJyYXlCdWZmZXIiLCJfYm9keUFycmF5QnVmZmVyIiwiaGVhZGVycyIsInRleHQiLCJyZWFkQXNUZXh0IiwiYm9keSIsImNyZWRlbnRpYWxzIiwidG9VcHBlckNhc2UiLCJyZWZlcnJlciIsImRlY29kZVVSSUNvbXBvbmVudCIsImZldGNoIiwiaXNWaWV3IiwiZGVsZXRlIiwiZW50cmllcyIsImNsb25lIiwicmVkaXJlY3QiLCJIZWFkZXJzIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VVUkwiLCJyZXNwb25zZVRleHQiLCJvbnRpbWVvdXQiLCJ3aXRoQ3JlZGVudGlhbHMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiLi9jb2xvci9jb2xvcl9jb252ZXJzaW9uIiwiLi9jb2xvci9jcmVhdGluZ19yZWFkaW5nIiwiLi9jb2xvci9wNS5Db2xvciIsIi4vY29sb3Ivc2V0dGluZyIsIi4vY29yZS9jb25zdGFudHMiLCIuL2NvcmUvZW52aXJvbm1lbnQiLCIuL2NvcmUvZXJyb3JfaGVscGVycyIsIi4vY29yZS9oZWxwZXJzIiwiLi9jb3JlL2luaXQiLCIuL2NvcmUvbGVnYWN5IiwiLi9jb3JlL21haW4iLCIuL2NvcmUvcDUuRWxlbWVudCIsIi4vY29yZS9wNS5HcmFwaGljcyIsIi4vY29yZS9wNS5SZW5kZXJlciIsIi4vY29yZS9wNS5SZW5kZXJlcjJEIiwiLi9jb3JlL3JlbmRlcmluZyIsIi4vY29yZS9zaGFwZS8yZF9wcmltaXRpdmVzIiwiLi9jb3JlL3NoYXBlL2F0dHJpYnV0ZXMiLCIuL2NvcmUvc2hhcGUvY3VydmVzIiwiLi9jb3JlL3NoYXBlL3ZlcnRleCIsIi4vY29yZS9zaGltIiwiLi9jb3JlL3N0cnVjdHVyZSIsIi4vY29yZS90cmFuc2Zvcm0iLCIuL2RhdGEvcDUuVHlwZWREaWN0IiwiLi9ldmVudHMvYWNjZWxlcmF0aW9uIiwiLi9ldmVudHMva2V5Ym9hcmQiLCIuL2V2ZW50cy9tb3VzZSIsIi4vZXZlbnRzL3RvdWNoIiwiLi9pbWFnZS9maWx0ZXJzIiwiLi9pbWFnZS9pbWFnZSIsIi4vaW1hZ2UvbG9hZGluZ19kaXNwbGF5aW5nIiwiLi9pbWFnZS9wNS5JbWFnZSIsIi4vaW1hZ2UvcGl4ZWxzIiwiLi9pby9maWxlcyIsIi4vaW8vcDUuVGFibGUiLCIuL2lvL3A1LlRhYmxlUm93IiwiLi9pby9wNS5YTUwiLCIuL21hdGgvY2FsY3VsYXRpb24iLCIuL21hdGgvbWF0aCIsIi4vbWF0aC9ub2lzZSIsIi4vbWF0aC9wNS5WZWN0b3IiLCIuL21hdGgvcmFuZG9tIiwiLi9tYXRoL3RyaWdvbm9tZXRyeSIsIi4vdHlwb2dyYXBoeS9hdHRyaWJ1dGVzIiwiLi90eXBvZ3JhcGh5L2xvYWRpbmdfZGlzcGxheWluZyIsIi4vdHlwb2dyYXBoeS9wNS5Gb250IiwiLi91dGlsaXRpZXMvYXJyYXlfZnVuY3Rpb25zIiwiLi91dGlsaXRpZXMvY29udmVyc2lvbiIsIi4vdXRpbGl0aWVzL3N0cmluZ19mdW5jdGlvbnMiLCIuL3V0aWxpdGllcy90aW1lX2RhdGUiLCIuL3dlYmdsLzNkX3ByaW1pdGl2ZXMiLCIuL3dlYmdsL2ludGVyYWN0aW9uIiwiLi93ZWJnbC9saWdodCIsIi4vd2ViZ2wvbG9hZGluZyIsIi4vd2ViZ2wvbWF0ZXJpYWwiLCIuL3dlYmdsL3A1LkNhbWVyYSIsIi4vd2ViZ2wvcDUuR2VvbWV0cnkiLCIuL3dlYmdsL3A1Lk1hdHJpeCIsIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTCIsIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5JbW1lZGlhdGUiLCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuUmV0YWluZWQiLCIuL3dlYmdsL3A1LlNoYWRlciIsIi4vd2ViZ2wvcDUuVGV4dHVyZSIsIi4vd2ViZ2wvdGV4dCIsIkNvbG9yQ29udmVyc2lvbiIsIl9oc2JhVG9IU0xBIiwiX2hzYmFUb1JHQkEiLCJfaHNsYVRvSFNCQSIsIl9oc2xhVG9SR0JBIiwiX3JnYmFUb0hTQkEiLCJfcmdiYVRvSFNMQSIsIi4uL2NvcmUvbWFpbiIsImFscGhhIiwiX3ZhbGlkYXRlUGFyYW1ldGVycyIsImNvbG9yIiwiX2dldEFscGhhIiwiYmx1ZSIsIl9nZXRCbHVlIiwiYnJpZ2h0bmVzcyIsIl9nZXRCcmlnaHRuZXNzIiwiQ29sb3IiLCJncmVlbiIsIl9nZXRHcmVlbiIsImh1ZSIsIl9nZXRIdWUiLCJsZXJwQ29sb3IiLCJfY29sb3JNb2RlIiwiX2NvbG9yTWF4ZXMiLCJSR0IiLCJsZXZlbHMiLCJIU0IiLCJoc2JhIiwiSFNMIiwiX2dldExpZ2h0bmVzcyIsImhzbGEiLCJsZXJwIiwibGlnaHRuZXNzIiwicmVkIiwiX2dldFJlZCIsInNhdHVyYXRpb24iLCJfZ2V0U2F0dXJhdGlvbiIsIi4uL2NvcmUvY29uc3RhbnRzIiwiLi4vY29yZS9lcnJvcl9oZWxwZXJzIiwiLi9wNS5Db2xvciIsIl9zdG9yZU1vZGVBbmRNYXhlcyIsIl9hcnJheSIsIl9wYXJzZUlucHV0cyIsIl9jYWxjdWxhdGVMZXZlbHMiLCJ0b1ByZWNpc2lvbiIsIm1heGVzIiwic2V0UmVkIiwic2V0R3JlZW4iLCJzZXRCbHVlIiwic2V0QWxwaGEiLCJfZ2V0TW9kZSIsIl9nZXRNYXhlcyIsImFsaWNlYmx1ZSIsImFudGlxdWV3aGl0ZSIsImFxdWEiLCJhcXVhbWFyaW5lIiwiYXp1cmUiLCJiZWlnZSIsImJpc3F1ZSIsImJsYWNrIiwiYmxhbmNoZWRhbG1vbmQiLCJibHVldmlvbGV0IiwiYnVybHl3b29kIiwiY2FkZXRibHVlIiwiY2hhcnRyZXVzZSIsImNob2NvbGF0ZSIsImNvcmFsIiwiY29ybmZsb3dlcmJsdWUiLCJjb3Juc2lsayIsImNyaW1zb24iLCJjeWFuIiwiZGFya2JsdWUiLCJkYXJrY3lhbiIsImRhcmtnb2xkZW5yb2QiLCJkYXJrZ3JheSIsImRhcmtncmVlbiIsImRhcmtncmV5IiwiZGFya2toYWtpIiwiZGFya21hZ2VudGEiLCJkYXJrb2xpdmVncmVlbiIsImRhcmtvcmFuZ2UiLCJkYXJrb3JjaGlkIiwiZGFya3JlZCIsImRhcmtzYWxtb24iLCJkYXJrc2VhZ3JlZW4iLCJkYXJrc2xhdGVibHVlIiwiZGFya3NsYXRlZ3JheSIsImRhcmtzbGF0ZWdyZXkiLCJkYXJrdHVycXVvaXNlIiwiZGFya3Zpb2xldCIsImRlZXBwaW5rIiwiZGVlcHNreWJsdWUiLCJkaW1ncmF5IiwiZGltZ3JleSIsImRvZGdlcmJsdWUiLCJmaXJlYnJpY2siLCJmbG9yYWx3aGl0ZSIsImZvcmVzdGdyZWVuIiwiZnVjaHNpYSIsImdhaW5zYm9ybyIsImdob3N0d2hpdGUiLCJnb2xkIiwiZ29sZGVucm9kIiwiZ3JheSIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBsdW0iLCJwb3dkZXJibHVlIiwicHVycGxlIiwicm9zeWJyb3duIiwicm95YWxibHVlIiwic2FkZGxlYnJvd24iLCJzYWxtb24iLCJzYW5keWJyb3duIiwic2VhZ3JlZW4iLCJzZWFzaGVsbCIsInNpZW5uYSIsInNpbHZlciIsInNreWJsdWUiLCJzbGF0ZWJsdWUiLCJzbGF0ZWdyYXkiLCJzbGF0ZWdyZXkiLCJzbm93Iiwic3ByaW5nZ3JlZW4iLCJzdGVlbGJsdWUiLCJ0YW4iLCJ0ZWFsIiwidGhpc3RsZSIsInRvbWF0byIsInR1cnF1b2lzZSIsInZpb2xldCIsIndoZWF0Iiwid2hpdGVzbW9rZSIsInllbGxvdyIsInllbGxvd2dyZWVuIiwiUmVnRXhwIiwiSEVYMyIsIkhFWDQiLCJIRVg2IiwiSEVYOCIsIlJHQl9QRVJDRU5UIiwiUkdCQSIsIlJHQkFfUEVSQ0VOVCIsIkhTTEEiLCJIU0JBIiwiLi9jb2xvcl9jb252ZXJzaW9uIiwiYmFja2dyb3VuZCIsIkltYWdlIiwiaW1hZ2UiLCJfcmVuZGVyZXIiLCJjb2xvck1vZGUiLCJfc2V0UHJvcGVydHkiLCJub0ZpbGwiLCJub1N0cm9rZSIsIlAyRCIsIldFQkdMIiwiQVJST1ciLCJDUk9TUyIsIkhBTkQiLCJNT1ZFIiwiVEVYVCIsIldBSVQiLCJIQUxGX1BJIiwiUVVBUlRFUl9QSSIsIlRBVSIsIlRXT19QSSIsIkRFR1JFRVMiLCJSQURJQU5TIiwiREVHX1RPX1JBRCIsIlJBRF9UT19ERUciLCJDT1JORVIiLCJDT1JORVJTIiwiUkFESVVTIiwiUklHSFQiLCJMRUZUIiwiQ0VOVEVSIiwiVE9QIiwiQk9UVE9NIiwiQkFTRUxJTkUiLCJQT0lOVFMiLCJMSU5FUyIsIkxJTkVfU1RSSVAiLCJMSU5FX0xPT1AiLCJUUklBTkdMRVMiLCJUUklBTkdMRV9GQU4iLCJUUklBTkdMRV9TVFJJUCIsIlFVQURTIiwiUVVBRF9TVFJJUCIsIkNMT1NFIiwiT1BFTiIsIkNIT1JEIiwiUElFIiwiUFJPSkVDVCIsIlNRVUFSRSIsIlJPVU5EIiwiQkVWRUwiLCJNSVRFUiIsIkFVVE8iLCJBTFQiLCJCQUNLU1BBQ0UiLCJDT05UUk9MIiwiREVMRVRFIiwiRE9XTl9BUlJPVyIsIkVOVEVSIiwiRVNDQVBFIiwiTEVGVF9BUlJPVyIsIk9QVElPTiIsIlJFVFVSTiIsIlJJR0hUX0FSUk9XIiwiU0hJRlQiLCJUQUIiLCJVUF9BUlJPVyIsIkJMRU5EIiwiQUREIiwiREFSS0VTVCIsIkxJR0hURVNUIiwiRElGRkVSRU5DRSIsIkVYQ0xVU0lPTiIsIk1VTFRJUExZIiwiU0NSRUVOIiwiUkVQTEFDRSIsIk9WRVJMQVkiLCJIQVJEX0xJR0hUIiwiU09GVF9MSUdIVCIsIkRPREdFIiwiQlVSTiIsIlRIUkVTSE9MRCIsIkdSQVkiLCJPUEFRVUUiLCJJTlZFUlQiLCJQT1NURVJJWkUiLCJESUxBVEUiLCJFUk9ERSIsIkJMVVIiLCJfREVGQVVMVF9URVhUX0ZJTEwiLCJfREVGQVVMVF9MRUFETVVMVCIsIl9DVFhfTUlERExFIiwiTElORUFSIiwiUVVBRFJBVElDIiwiQkVaSUVSIiwiQ1VSVkUiLCJTVFJPS0UiLCJGSUxMIiwiVEVYVFVSRSIsIklNTUVESUFURSIsIk5FQVJFU1QiLCJSRVBFQVQiLCJDTEFNUCIsIk1JUlJPUiIsIkxBTkRTQ0FQRSIsIlBPUlRSQUlUIiwiX0RFRkFVTFRfU1RST0tFIiwiX0RFRkFVTFRfRklMTCIsIkdSSUQiLCJBWEVTIiwiaW5uZXJXaWR0aCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiaW5uZXJIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJfZnJhbWVSYXRlIiwiX2xhc3RGcmFtZVRpbWUiLCJwZXJmb3JtYW5jZSIsIl90YXJnZXRGcmFtZVJhdGUiLCJwcmludCIsImZyYW1lQ291bnQiLCJmb2N1c2VkIiwiaGFzRm9jdXMiLCJjdXJzb3IiLCJfY3VyRWxlbWVudCIsImVsdCIsInN0eWxlIiwiZnJhbWVSYXRlIiwiX3J1bkZyYW1lcyIsImdldEZyYW1lUmF0ZSIsInNldEZyYW1lUmF0ZSIsIm5vQ3Vyc29yIiwiZGlzcGxheVdpZHRoIiwic2NyZWVuIiwiZGlzcGxheUhlaWdodCIsIndpbmRvd1dpZHRoIiwid2luZG93SGVpZ2h0IiwiX29ucmVzaXplIiwiX2lzR2xvYmFsIiwid2luZG93UmVzaXplZCIsInByZXZlbnREZWZhdWx0IiwiZnVsbHNjcmVlbiIsImZ1bGxzY3JlZW5FbGVtZW50Iiwid2Via2l0RnVsbHNjcmVlbkVsZW1lbnQiLCJtb3pGdWxsU2NyZWVuRWxlbWVudCIsIm1zRnVsbHNjcmVlbkVsZW1lbnQiLCJmdWxsc2NyZWVuRW5hYmxlZCIsIndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkIiwibW96RnVsbFNjcmVlbkVuYWJsZWQiLCJtc0Z1bGxzY3JlZW5FbmFibGVkIiwicmVxdWVzdEZ1bGxzY3JlZW4iLCJtb3pSZXF1ZXN0RnVsbFNjcmVlbiIsIndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuIiwibXNSZXF1ZXN0RnVsbHNjcmVlbiIsImV4aXRGdWxsc2NyZWVuIiwibW96Q2FuY2VsRnVsbFNjcmVlbiIsIndlYmtpdEV4aXRGdWxsc2NyZWVuIiwibXNFeGl0RnVsbHNjcmVlbiIsInBpeGVsRGVuc2l0eSIsIl9waXhlbERlbnNpdHkiLCJfcGl4ZWxzRGlydHkiLCJyZXNpemVDYW52YXMiLCJkaXNwbGF5RGVuc2l0eSIsImRldmljZVBpeGVsUmF0aW8iLCJnZXRVUkwiLCJnZXRVUkxQYXRoIiwicGF0aG5hbWUiLCJnZXRVUkxQYXJhbXMiLCJsYXN0SW5kZXgiLCIuL2NvbnN0YW50cyIsIi4vbWFpbiIsIl9mcmllbmRseUZpbGVMb2FkRXJyb3IiLCJzb21lIiwiX2hlbHBGb3JNaXN1c2VkQXRUb3BMZXZlbENvZGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiLi4vLi4vZG9jcy9yZWZlcmVuY2UvZGF0YS5qc29uIiwibW9kZUFkanVzdCIsIm1vY2hhIiwic2V0dXAiLCJpbnN0YW5jZSIsImV4aXQiLCJwdXNoU3R5bGUiLCJwb3BTdHlsZSIsIl9zZXR1cERvbmUiLCJfdXNlck5vZGUiLCJfZWxlbWVudHMiLCJfcmVxdWVzdEFuaW1JZCIsIl9wcmVsb2FkQ291bnQiLCJfaW5pdGlhbGl6ZUluc3RhbmNlVmFyaWFibGVzIiwiX2RlZmF1bHRDYW52YXNTaXplIiwibW91c2Vtb3ZlIiwibW91c2Vkb3duIiwibW91c2V1cCIsImRyYWdlbmQiLCJkcmFnb3ZlciIsImNsaWNrIiwiZGJsY2xpY2siLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImtleWRvd24iLCJrZXl1cCIsImtleXByZXNzIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIiwicmVzaXplIiwiYmx1ciIsIndoZWVsIiwiX2xvYWRpbmdTY3JlZW5JZCIsIl9yZWdpc3RlcmVkTWV0aG9kcyIsIkRldmljZU9yaWVudGF0aW9uRXZlbnQiLCJkZXZpY2VvcmllbnRhdGlvbiIsIkRldmljZU1vdGlvbkV2ZW50IiwiX2lzTm9kZVdlYmtpdCIsImRldmljZW1vdGlvbiIsInByZWxvYWQiLCJpbm5lckhUTUwiLCJfcHJlbG9hZE1ldGhvZHMiLCJfd3JhcFByZWxvYWQiLCJfcmVnaXN0ZXJlZFByZWxvYWRNZXRob2RzIiwiX3J1bklmUHJlbG9hZHNBcmVEb25lIiwiX3NldHVwIiwiX2RyYXciLCJwYXJlbnROb2RlIiwiX2RlY3JlbWVudFByZWxvYWQiLCJfaW5jcmVtZW50UHJlbG9hZCIsImNyZWF0ZUNhbnZhcyIsImRhdGFzZXQiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5IiwicmVkcmF3IiwiX3VwZGF0ZU1vdXNlQ29vcmRzIiwiY2xlYXJJbnRlcnZhbCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiX2NyZWF0ZUZyaWVuZGx5R2xvYmFsRnVuY3Rpb25CaW5kZXIiLCJwYXNzaXZlIiwicmVnaXN0ZXJNZXRob2QiLCJfc3R5bGVzIiwiX2JlemllckRldGFpbCIsIl9jdXJ2ZURldGFpbCIsInJnYiIsImhzYiIsImhzbCIsImRpc2FibGVGcmllbmRseUVycm9ycyIsImxvYWRKU09OIiwibG9hZEltYWdlIiwibG9hZFN0cmluZ3MiLCJsb2FkWE1MIiwibG9hZEJ5dGVzIiwibG9hZFRhYmxlIiwibG9hZEZvbnQiLCJsb2FkTW9kZWwiLCJsb2FkU2hhZGVyIiwicHJlIiwicmVnaXN0ZXJQcmVsb2FkTWV0aG9kIiwiZ2xvYmFsT2JqZWN0IiwiLi9zaGltIiwiRWxlbWVudCIsIl9wSW5zdCIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiY2xhc3MiLCJtb3VzZVByZXNzZWQiLCJfc2V0TW91c2VCdXR0b24iLCJkb3VibGVDbGlja2VkIiwibW91c2VXaGVlbCIsIm1vdXNlUmVsZWFzZWQiLCJtb3VzZUNsaWNrZWQiLCJtb3VzZU1vdmVkIiwibW91c2VPdmVyIiwiY2hhbmdlZCIsIm1vdXNlT3V0IiwidG91Y2hTdGFydGVkIiwidG91Y2hNb3ZlZCIsInRvdWNoRW5kZWQiLCJkcmFnT3ZlciIsImRyYWdMZWF2ZSIsImRyb3AiLCJGaWxlIiwidGFyZ2V0IiwiRmlsZUxpc3QiLCJzdG9wUHJvcGFnYXRpb24iLCJkYXRhVHJhbnNmZXIiLCJmaWxlcyIsIkdyYXBoaWNzIiwiY2FudmFzIiwiUmVuZGVyZXJHTCIsIlJlbmRlcmVyMkQiLCJfYXBwbHlEZWZhdWx0cyIsIm9mZnNldFBhcmVudCIsIm9mZnNldExlZnQiLCJvZmZzZXRUb3AiLCJSZW5kZXJlciIsIl9pc01haW5DYW52YXMiLCJkaXNwbGF5IiwiX3RleHRTaXplIiwiX3RleHRMZWFkaW5nIiwiX3RleHRGb250IiwiX3RleHRTdHlsZSIsIl90ZXh0QXNjZW50IiwiX3RleHREZXNjZW50IiwiX3RleHRBbGlnbiIsIl90ZXh0QmFzZWxpbmUiLCJfcmVjdE1vZGUiLCJfZWxsaXBzZU1vZGUiLCJfY3VydmVUaWdodG5lc3MiLCJfaW1hZ2VNb2RlIiwiX3RpbnQiLCJfZG9TdHJva2UiLCJfZG9GaWxsIiwiX3N0cm9rZVNldCIsIl9maWxsU2V0IiwicHJvcGVydGllcyIsInRleHRMZWFkaW5nIiwidGV4dFNpemUiLCJfYXBwbHlUZXh0UHJvcGVydGllcyIsInRleHRTdHlsZSIsInRleHRBc2NlbnQiLCJfdXBkYXRlVGV4dE1ldHJpY3MiLCJ0ZXh0RGVzY2VudCIsInRleHRBbGlnbiIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIk1BWF9WQUxVRSIsInRleHRXaWR0aCIsIl9yZW5kZXJUZXh0IiwiX2lzT3BlblR5cGUiLCJmb250U2l6ZSIsIm92ZXJmbG93IiwidmVydGljYWxBbGlnbiIsImRyYXdpbmdDb250ZXh0IiwiX2NhY2hlZEZpbGxTdHlsZSIsIl9jYWNoZWRTdHJva2VTdHlsZSIsIl9zZXRGaWxsIiwiX3NldFN0cm9rZSIsImxpbmVDYXAiLCJzY2FsZSIsInNhdmUiLCJyZXNldE1hdHJpeCIsIl9nZXRGaWxsIiwiZmlsbFJlY3QiLCJyZXN0b3JlIiwiY2xlYXJSZWN0IiwiTWVkaWFFbGVtZW50IiwibG9hZFBpeGVscyIsIl9nZXRUaW50ZWRJbWFnZUNhbnZhcyIsImRyYXdJbWFnZSIsIl90b1BpeGVscyIsImNyZWF0ZUltYWdlRGF0YSIsInB1dEltYWdlRGF0YSIsImJsZW5kTW9kZSIsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsImJsZW5kIiwiX2NvcHlIZWxwZXIiLCJnZXRJbWFnZURhdGEiLCJwaXhlbHMiLCJzZXRUcmFuc2Zvcm0iLCJpbWFnZURhdGEiLCJ1cGRhdGVQaXhlbHMiLCJfYWN1dGVBcmNUb0JlemllciIsImF5IiwiY3kiLCJlbGxpcHNlIiwiX2dldFN0cm9rZSIsInRyYW5zbGF0ZSIsInF1YWQiLCJyZWN0IiwiYXJjVG8iLCJ0cmlhbmdsZSIsImVuZFNoYXBlIiwiUE9MWUdPTiIsIl9kb0ZpbGxTdHJva2VDbG9zZSIsImlzVmVydCIsIm5vU21vb3RoIiwiaW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwic21vb3RoIiwic3Ryb2tlQ2FwIiwic3Ryb2tlSm9pbiIsImxpbmVKb2luIiwic3Ryb2tlV2VpZ2h0IiwiYmV6aWVyIiwiYmVnaW5TaGFwZSIsInZlcnRleCIsImJlemllclZlcnRleCIsImN1cnZlVmVydGV4IiwiYXBwbHlNYXRyaXgiLCJ0cmFuc2Zvcm0iLCJyb3RhdGUiLCJzaGVhclgiLCJzaGVhclkiLCJWZWN0b3IiLCJ0ZXh0QmFzZWxpbmUiLCJfcmVuZGVyUGF0aCIsInJlbmRlcmVyIiwic3Ryb2tlVGV4dCIsImZpbGxUZXh0IiwiX3RleHRXaWR0aCIsIm1lYXN1cmVUZXh0IiwiLi4vaW1hZ2UvZmlsdGVycyIsIi4vcDUuUmVuZGVyZXIiLCJjbGFzc0xpc3QiLCJfZGVmYXVsdEdyYXBoaWNzQ3JlYXRlZCIsIm5vQ2FudmFzIiwiY3JlYXRlR3JhcGhpY3MiLCIuLi93ZWJnbC9wNS5SZW5kZXJlckdMIiwiLi9wNS5HcmFwaGljcyIsIi4vcDUuUmVuZGVyZXIyRCIsIl90b1JhZGlhbnMiLCJhdGFuIiwiLi4vY29uc3RhbnRzIiwiLi4vZXJyb3JfaGVscGVycyIsIi4uL2hlbHBlcnMiLCIuLi9tYWluIiwiZWxsaXBzZU1vZGUiLCJyZWN0TW9kZSIsImJlemllckRldGFpbCIsImJlemllclBvaW50IiwiYmV6aWVyVGFuZ2VudCIsImN1cnZlRGV0YWlsIiwiY3VydmVUaWdodG5lc3MiLCJjdXJ2ZVBvaW50IiwiY3VydmVUYW5nZW50IiwiYmVnaW5Db250b3VyIiwiaXNQM0QiLCJlbmRDb250b3VyIiwicXVhZHJhdGljVmVydGV4IiwiX2NvbnRvdXJJbml0ZWQiLCJ4MyIsInkzIiwiX2NvbnRvdXJWZXJ0aWNlcyIsIndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm1velJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtc1JlcXVlc3RBbmltYXRpb25GcmFtZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibm9Mb29wIiwicHJvcHMiLCJfdXBkYXRlIiwicG9wTWF0cml4IiwicHJpbnRNYXRyaXgiLCJwdXNoTWF0cml4Iiwicm90YXRlWCIsIl9hc3NlcnQzZCIsInJvdGF0ZVkiLCJyb3RhdGVaIiwiY3JlYXRlU3RyaW5nRGljdCIsIlN0cmluZ0RpY3QiLCJjcmVhdGVOdW1iZXJEaWN0IiwiTnVtYmVyRGljdCIsIlR5cGVkRGljdCIsImhhc0tleSIsIl92YWxpZGF0ZSIsIl9hZGRPYmoiLCJzYXZlVGFibGUiLCJkb3dubG9hZEZpbGUiLCJzYXZlSlNPTiIsImRpdiIsIl92YWx1ZVRlc3QiLCJfa2V5VGVzdCIsIm1pbktleSIsIm1heEtleSIsImRldmljZU9yaWVudGF0aW9uIiwiYWNjZWxlcmF0aW9uWCIsImFjY2VsZXJhdGlvblkiLCJhY2NlbGVyYXRpb25aIiwicEFjY2VsZXJhdGlvblgiLCJwQWNjZWxlcmF0aW9uWSIsInBBY2NlbGVyYXRpb25aIiwiX3VwZGF0ZVBBY2NlbGVyYXRpb25zIiwicm90YXRpb25YIiwicm90YXRpb25ZIiwicm90YXRpb25aIiwicFJvdGF0aW9uWCIsInBSb3RhdGlvblkiLCJwUm90YXRpb25aIiwiX3VwZGF0ZVBSb3RhdGlvbnMiLCJ0dXJuQXhpcyIsInNldE1vdmVUaHJlc2hvbGQiLCJzZXRTaGFrZVRocmVzaG9sZCIsIl9vbmRldmljZW9yaWVudGF0aW9uIiwiYmV0YSIsImdhbW1hIiwiX2hhbmRsZU1vdGlvbiIsIl9vbmRldmljZW1vdGlvbiIsImFjY2VsZXJhdGlvbiIsIm9yaWVudGF0aW9uIiwiZGV2aWNlTW92ZWQiLCJkZXZpY2VUdXJuZWQiLCJkZXZpY2VTaGFrZW4iLCJpc0tleVByZXNzZWQiLCJrZXlJc1ByZXNzZWQiLCJrZXlDb2RlIiwiX29ua2V5ZG93biIsIndoaWNoIiwia2V5UHJlc3NlZCIsImNoYXJDb2RlIiwiX29ua2V5dXAiLCJrZXlSZWxlYXNlZCIsIl9vbmtleXByZXNzIiwiX2xhc3RLZXlDb2RlVHlwZWQiLCJrZXlUeXBlZCIsIl9vbmJsdXIiLCJrZXlJc0Rvd24iLCJfaGFzTW91c2VJbnRlcmFjdGVkIiwibW91c2VYIiwibW91c2VZIiwicG1vdXNlWCIsInBtb3VzZVkiLCJ3aW5Nb3VzZVgiLCJ3aW5Nb3VzZVkiLCJwd2luTW91c2VYIiwicHdpbk1vdXNlWSIsIm1vdXNlQnV0dG9uIiwibW91c2VJc1ByZXNzZWQiLCJfdXBkYXRlTmV4dE1vdXNlQ29vcmRzIiwidG91Y2hlcyIsImNsaWVudFgiLCJjaGFuZ2VkVG91Y2hlcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFdpZHRoIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50WSIsInRvcCIsIndpblgiLCJ3aW5ZIiwiaWRlbnRpZmllciIsIl9tb3VzZVdoZWVsRGVsdGFZIiwiYnV0dG9uIiwiX29ubW91c2Vtb3ZlIiwibW91c2VEcmFnZ2VkIiwiX29ubW91c2Vkb3duIiwiX29ubW91c2V1cCIsIl9vbmRyYWdlbmQiLCJfb25kcmFnb3ZlciIsIl9vbmNsaWNrIiwiX29uZGJsY2xpY2siLCJfcG1vdXNlV2hlZWxEZWx0YVkiLCJfb253aGVlbCIsImRlbHRhWSIsIl91cGRhdGVUb3VjaENvb3JkcyIsIl9vbnRvdWNoc3RhcnQiLCJfb250b3VjaG1vdmUiLCJfb250b3VjaGVuZCIsIkludDMyQXJyYXkiLCJfZ2V0QVJHQiIsIl9zZXRQaXhlbHMiLCJJbWFnZURhdGEiLCJfdG9JbWFnZURhdGEiLCJfY3JlYXRlSW1hZ2VEYXRhIiwiX3RtcENhbnZhcyIsIl90bXBDdHgiLCJvcGFxdWUiLCJpbnZlcnQiLCJwb3N0ZXJpemUiLCJkaWxhdGUiLCJlcm9kZSIsImNyZWF0ZUltYWdlIiwic2F2ZUNhbnZhcyIsIkhUTUxDYW52YXNFbGVtZW50IiwiX2NoZWNrRmlsZUV4dGVuc2lvbiIsInRvQmxvYiIsInNhdmVGcmFtZXMiLCJjb25zdHJhaW4iLCJfbWFrZUZyYW1lIiwic2V0SW50ZXJ2YWwiLCJmaWxlbmFtZSIsImV4dCIsInRvRGF0YVVSTCIsImNyb3NzT3JpZ2luIiwidmlkZW9XaWR0aCIsInZpZGVvSGVpZ2h0IiwidGludCIsIm5vVGludCIsImltYWdlTW9kZSIsIi4uL2NvcmUvaGVscGVycyIsIi4vZmlsdGVycyIsIl9tb2RpZmllZCIsInNldE1vZGlmaWVkIiwibWFzayIsImlzTW9kaWZpZWQiLCIuLi9jb2xvci9wNS5Db2xvciIsImh0dHBEbyIsImxhc3RJbmRleE9mIiwiY3VycmVudFN0YXRlIiwidG9rZW4iLCJlc2NhcGVkIiwiY29sdW1ucyIsIlRhYmxlUm93Iiwib2JqIiwiYWRkUm93IiwiYnl0ZXMiLCJodHRwR2V0IiwiaHR0cFBvc3QiLCJDb250ZW50LVR5cGUiLCJYTUwiLCJjaGlsZE5vZGVzIiwiYWRkQ2hpbGQiLCJzZXROYW1lIiwibm9kZU5hbWUiLCJfc2V0Q29udCIsInRleHRDb250ZW50IiwiX3NldEF0dHJpYnV0ZXMiLCJjaGlsZHJlbiIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsIl9wV3JpdGVycyIsIlByaW50V3JpdGVyIiwibWlsbGlzIiwid3JpdGVGaWxlIiwic2F2ZVN0cmluZ3MiLCJTb3VuZEZpbGUiLCJzYXZlU291bmQiLCJzYXZlSlNPTk9iamVjdCIsInNhdmVKU09OQXJyYXkiLCJyb3dzIiwiZ2V0U3RyaW5nIiwiX2lzU2FmYXJpIiwib25jbGljayIsImFsZXJ0IiwiZXM2LXByb21pc2UiLCJmZXRjaC1qc29ucCIsImZpbGUtc2F2ZXIiLCJ3aGF0d2ctZmV0Y2giLCJyZW1vdmVSb3ciLCJnZXRSb3ciLCJnZXRSb3dzIiwiZmluZFJvdyIsImZpbmRSb3dzIiwibWF0Y2hSb3ciLCJtYXRjaFJvd3MiLCJnZXRDb2x1bW4iLCJjbGVhclJvd3MiLCJhZGRDb2x1bW4iLCJnZXRDb2x1bW5Db3VudCIsImdldFJvd0NvdW50IiwicmVtb3ZlVG9rZW5zIiwicmVtb3ZlQ29sdW1uIiwic2V0TnVtIiwic2V0U3RyaW5nIiwiZ2V0TnVtIiwiZ2V0T2JqZWN0IiwiZ2V0QXJyYXkiLCJhdHRyaWJ1dGVzIiwiZ2V0UGFyZW50IiwiZ2V0TmFtZSIsImhhc0NoaWxkcmVuIiwibGlzdENoaWxkcmVuIiwiZ2V0Q2hpbGRyZW4iLCJnZXRDaGlsZCIsImdldEF0dHJpYnV0ZUNvdW50IiwibGlzdEF0dHJpYnV0ZXMiLCJoYXNBdHRyaWJ1dGUiLCJnZXRDb250ZW50Iiwic2V0Q29udGVudCIsIm5vZGVWYWx1ZSIsImh5cG90IiwibWFnIiwibm9ybSIsInNxIiwiY3JlYXRlVmVjdG9yIiwibm9pc2VEZXRhaWwiLCJub2lzZVNlZWQiLCJzZXRTZWVkIiwiZ2V0U2VlZCIsInA1IiwibWFnU3EiLCJjcm9zcyIsIm5vcm1hbGl6ZSIsImxpbWl0Iiwic2V0TWFnIiwiaGVhZGluZyIsImF0YW4yIiwiX2Zyb21SYWRpYW5zIiwiYW5nbGVCZXR3ZWVuIiwiYWNvcyIsImZyb21BbmdsZSIsImZyb21BbmdsZXMiLCJyYW5kb20yRCIsInJhbmRvbTNEIiwicmFuZG9tU2VlZCIsInJhbmRvbUdhdXNzaWFuIiwiX2FuZ2xlTW9kZSIsImFzaW4iLCJkZWdyZWVzIiwicmFkaWFucyIsImFuZ2xlTW9kZSIsIl90b0RlZ3JlZXMiLCJ0ZXh0Rm9udCIsIm9wZW50eXBlLmpzIiwic2FtcGxlRmFjdG9yIiwic2ltcGxpZnlUaHJlc2hvbGQiLCJ0bXBQb2ludDEiLCJ0bXBQb2ludDIiLCJxeCIsInF5IiwiY2FjaGUiLCJ0ZXh0Qm91bmRzIiwiYWR2YW5jZSIsIl9oYW5kbGVBbGlnbm1lbnQiLCJ0ZXh0VG9Qb2ludHMiLCJfZ2V0R2x5cGhzIiwiX2dldFBhdGgiLCJfZ2V0UGF0aERhdGEiLCJkZWNpbWFscyIsIl9nZXRTVkciLCJhcnJheUNvcHkiLCJzaG9ydGVuIiwic2h1ZmZsZSIsInN1YnNldCIsImZsb2F0IiwiaW50Iiwic3RyIiwiYm9vbGVhbiIsImNoYXIiLCJ1bmNoYXIiLCJoZXgiLCJ1bmhleCIsIm1hdGNoQWxsIiwibmZjIiwibmZwIiwibmZzIiwic3BsaXRUb2tlbnMiLCJkYXkiLCJnZXREYXRlIiwiaG91ciIsImdldEhvdXJzIiwibWludXRlIiwiZ2V0TWludXRlcyIsIm1vbnRoIiwiZ2V0TW9udGgiLCJzZWNvbmQiLCJnZXRTZWNvbmRzIiwieWVhciIsImdldEZ1bGxZZWFyIiwicGxhbmUiLCJnZW9tZXRyeUluSGFzaCIsIkdlb21ldHJ5IiwiZGV0YWlsWSIsImRldGFpbFgiLCJ2ZXJ0aWNlcyIsInV2cyIsImNvbXB1dGVGYWNlcyIsImNvbXB1dGVOb3JtYWxzIiwiX21ha2VUcmlhbmdsZUVkZ2VzIiwiX2VkZ2VzVG9WZXJ0aWNlcyIsImRyYXdCdWZmZXJzU2NhbGVkIiwiYm94IiwicGVyUGl4ZWxMaWdodGluZyIsInN0cm9rZUluZGljZXMiLCJmYWNlcyIsInNwaGVyZSIsImVsbGlwc29pZCIsInZlcnRleE5vcm1hbHMiLCJjeWxpbmRlciIsImNvbmUiLCJ0b3J1cyIsIl91c2VQb2ludFNoYWRlciIsImN1clBvaW50U2hhZGVyIiwiYmluZFNoYWRlciIsIl9kcmF3UG9pbnRzIiwiX3BvaW50VmVydGV4QnVmZmVyIiwidW5iaW5kU2hhZGVyIiwidU1WTWF0cml4IiwiTWF0cml4IiwiZHJhd0J1ZmZlcnMiLCJpbW1lZGlhdGVNb2RlIiwiX2JlemllclZlcnRleCIsIl9sb29rVXBUYWJsZUJlemllciIsIl9sdXRCZXppZXJEZXRhaWwiLCJfYmV6aWVyQ29lZmZpY2llbnRzIiwiaXNCZXppZXIiLCJfcXVhZHJhdGljVmVydGV4IiwiX2xvb2tVcFRhYmxlUXVhZHJhdGljIiwiX2x1dFF1YWRyYXRpY0RldGFpbCIsIl9xdWFkcmF0aWNDb2VmZmljaWVudHMiLCJpc1F1YWRyYXRpYyIsIl9jdXJ2ZVZlcnRleCIsImlzQ3VydmUiLCJfYmV6aWVyVG9DYXRtdWxsIiwiLi9wNS5HZW9tZXRyeSIsIm9yYml0Q29udHJvbCIsIl9jdXJDYW1lcmEiLCJjb250ZXh0TWVudURpc2FibGVkIiwib25jb250ZXh0bWVudSIsIndoZWVsRGVmYXVsdERpc2FibGVkIiwib253aGVlbCIsIl9vcmJpdCIsIl9nZXRMb2NhbEF4ZXMiLCJleWVYIiwiZXllWSIsImV5ZVoiLCJkZWJ1Z01vZGUiLCJfZ3JpZCIsIl9heGVzSWNvbiIsIm5vRGVidWdNb2RlIiwiY3VyU3Ryb2tlQ29sb3IiLCJjYW1lcmFNYXRyaXgiLCJtYXQ0IiwiYW1iaWVudExpZ2h0IiwiX3VzZUxpZ2h0U2hhZGVyIiwic2V0VW5pZm9ybSIsImN1ckZpbGxDb2xvciIsImFtYmllbnRMaWdodENvbG9ycyIsImRpcmVjdGlvbmFsTGlnaHQiLCJkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucyIsImRpcmVjdGlvbmFsTGlnaHRDb2xvcnMiLCJwb2ludExpZ2h0IiwicG9pbnRMaWdodFBvc2l0aW9ucyIsInBvaW50TGlnaHRDb2xvcnMiLCJnaWQiLCJ2dCIsInZuIiwibW9kZWwiLCJTaGFkZXIiLCJfZnJhZ1NyYyIsIl92ZXJ0U3JjIiwiY3JlYXRlU2hhZGVyIiwic2hhZGVyIiwiaXNTdHJva2VTaGFkZXIiLCJzZXRTdHJva2VTaGFkZXIiLCJzZXRGaWxsU2hhZGVyIiwibm9ybWFsTWF0ZXJpYWwiLCJkcmF3TW9kZSIsIl9nZXROb3JtYWxTaGFkZXIiLCJ0ZXh0dXJlIiwiYW1iaWVudE1hdGVyaWFsIiwic3BlY3VsYXJNYXRlcmlhbCIsIl9hcHBseUNvbG9yQmxlbmQiLCJHTCIsImRlcHRoTWFzayIsImVuYWJsZSIsImJsZW5kRXF1YXRpb24iLCJGVU5DX0FERCIsImJsZW5kRnVuYyIsIlNSQ19BTFBIQSIsIk9ORV9NSU5VU19TUkNfQUxQSEEiLCJkaXNhYmxlIiwiLi9wNS5UZXh0dXJlIiwiY2FtZXJhIiwicGVyc3BlY3RpdmUiLCJvcnRobyIsImNyZWF0ZUNhbWVyYSIsIkNhbWVyYSIsIl9jb21wdXRlQ2FtZXJhRGVmYXVsdFNldHRpbmdzIiwiX3NldERlZmF1bHRDYW1lcmEiLCJjYW1lcmFUeXBlIiwicHJvak1hdHJpeCIsImRlZmF1bHRDYW1lcmFGT1YiLCJjYW1lcmFGT1YiLCJkZWZhdWx0QXNwZWN0UmF0aW8iLCJkZWZhdWx0Q2FtZXJhTmVhciIsImRlZmF1bHRDYW1lcmFGYXIiLCJhc3BlY3RSYXRpbyIsImNhbWVyYU5lYXIiLCJjYW1lcmFGYXIiLCJpZGVudGl0eSIsIl9pc0FjdGl2ZSIsInVQTWF0cml4IiwiX3JvdGF0ZVZpZXciLCJjZW50ZXJYIiwiY2VudGVyWSIsImNlbnRlcloiLCJ0aWx0IiwibG9va0F0IiwiZGVmYXVsdEV5ZVgiLCJkZWZhdWx0RXllWSIsImRlZmF1bHRFeWVaIiwibW92ZSIsImRlZmF1bHRDZW50ZXJYIiwiZGVmYXVsdENlbnRlclkiLCJkZWZhdWx0Q2VudGVyWiIsIl9yZXNpemUiLCJzZXRDYW1lcmEiLCJsaW5lVmVydGljZXMiLCJsaW5lTm9ybWFscyIsImVkZ2VzIiwiX2dldEZhY2VOb3JtYWwiLCJhdmVyYWdlTm9ybWFscyIsImF2ZXJhZ2VQb2xlTm9ybWFscyIsIm1hdDMiLCJpbnZlcnQzeDMiLCJ0cmFuc3Bvc2UzeDMiLCJpbnZlcnNlVHJhbnNwb3NlIiwiZGV0ZXJtaW5hbnQiLCJzaGFwZU1vZGUiLCJ2ZXJ0ZXhDb2xvcnMiLCJ1dkNvb3JkcyIsInZlcnRleEJ1ZmZlciIsImNvbG9yQnVmZmVyIiwidXZCdWZmZXIiLCJsaW5lVmVydGV4QnVmZmVyIiwibGluZU5vcm1hbEJ1ZmZlciIsInBvaW50VmVydGV4QnVmZmVyIiwiaXNJbW1lZGlhdGVEcmF3aW5nIiwiX3VzZUltbWVkaWF0ZU1vZGVTaGFkZXIiLCJfZHJhd1N0cm9rZUltbWVkaWF0ZU1vZGUiLCJfdlRvTkFycmF5IiwiX3RyaWFuZ3VsYXRlIiwiX2RyYXdGaWxsSW1tZWRpYXRlTW9kZSIsImN1ckZpbGxTaGFkZXIiLCJhUG9zaXRpb24iLCJfYmluZEJ1ZmZlciIsIkFSUkFZX0JVRkZFUiIsIkRZTkFNSUNfRFJBVyIsImVuYWJsZUF0dHJpYiIsIkZMT0FUIiwiYVZlcnRleENvbG9yIiwiYVRleENvb3JkIiwiZHJhd0FycmF5cyIsImN1clN0cm9rZVNoYWRlciIsIl9mbGF0dGVuIiwiU1RBVElDX0RSQVciLCJhRGlyZWN0aW9uIiwiX2luaXRCdWZmZXJEZWZhdWx0cyIsIl9mcmVlQnVmZmVycyIsImdIYXNoIiwiZGVsZXRlQnVmZmVyIiwibm9ybWFsQnVmZmVyIiwiaW5kZXhCdWZmZXIiLCJudW1iZXJPZkl0ZW1zIiwibGluZVZlcnRleENvdW50IiwiX3VzZUNvbG9yU2hhZGVyIiwiRUxFTUVOVF9BUlJBWV9CVUZGRVIiLCJhTm9ybWFsIiwiX2RyYXdBcnJheXMiLCJfZHJhd0VsZW1lbnRzIiwiZHJhd0VsZW1lbnRzIiwiVU5TSUdORURfU0hPUlQiLCJQb2ludHMiLCJpbW1lZGlhdGVWZXJ0IiwidmVydGV4Q29sb3JWZXJ0IiwidmVydGV4Q29sb3JGcmFnIiwibm9ybWFsVmVydCIsIm5vcm1hbEZyYWciLCJiYXNpY0ZyYWciLCJsaWdodFZlcnQiLCJsaWdodFRleHR1cmVGcmFnIiwicGhvbmdWZXJ0IiwicGhvbmdGcmFnIiwiZm9udFZlcnQiLCJmb250RnJhZyIsImxpbmVWZXJ0IiwibGluZUZyYWciLCJwb2ludFZlcnQiLCJwb2ludEZyYWciLCJzdGVuY2lsIiwiYW50aWFsaWFzIiwicHJlbXVsdGlwbGllZEFscGhhIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwiX2luaXRDb250ZXh0IiwidU5NYXRyaXgiLCJfZGVmYXVsdExpZ2h0U2hhZGVyIiwiX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyIiwiX2RlZmF1bHROb3JtYWxTaGFkZXIiLCJfZGVmYXVsdENvbG9yU2hhZGVyIiwiX2RlZmF1bHRQb2ludFNoYWRlciIsIl9nZXRMaW5lU2hhZGVyIiwicG9pbnRTaXplIiwidGV4dHVyZXMiLCJfdGVzc3kiLCJfaW5pdFRlc3N5IiwiZm9udEluZm9zIiwiREVQVEhfVEVTVCIsImRlcHRoRnVuYyIsIkxFUVVBTCIsInZpZXdwb3J0IiwiZHJhd2luZ0J1ZmZlcldpZHRoIiwiZHJhd2luZ0J1ZmZlckhlaWdodCIsIl92aWV3cG9ydCIsImdldFBhcmFtZXRlciIsIlZJRVdQT1JUIiwiX3Jlc2V0Q29udGV4dCIsInNldEF0dHJpYnV0ZXMiLCJjbGVhckNvbG9yIiwiQ09MT1JfQlVGRkVSX0JJVCIsIkRFUFRIX0JVRkZFUl9CSVQiLCJfZ2V0SW1tZWRpYXRlTW9kZVNoYWRlciIsIl9nZXRDb2xvclNoYWRlciIsImN1clN0cm9rZVdlaWdodCIsInJlYWRQaXhlbHMiLCJVTlNJR05FRF9CWVRFIiwic2V0UG9pbnRTaGFkZXIiLCJpc0xpZ2h0U2hhZGVyIiwiX2dldExpZ2h0U2hhZGVyIiwiX2dldFBvaW50U2hhZGVyIiwiX2RlZmF1bHRMaW5lU2hhZGVyIiwiX2dldEZvbnRTaGFkZXIiLCJfZGVmYXVsdEZvbnRTaGFkZXIiLCJnZXRFeHRlbnNpb24iLCJfZ2V0RW1wdHlUZXh0dXJlIiwiX2VtcHR5VGV4dHVyZSIsIlRleHR1cmUiLCJnZXRUZXh0dXJlIiwiYmluZEJ1ZmZlciIsImJ1ZmZlckRhdGEiLCIuLi9jb3JlL3A1LlJlbmRlcmVyIiwiLi9wNS5DYW1lcmEiLCIuL3A1Lk1hdHJpeCIsIi4vcDUuU2hhZGVyIiwiX3ZlcnRTaGFkZXIiLCJfZnJhZ1NoYWRlciIsIl9nbFByb2dyYW0iLCJfbG9hZGVkQXR0cmlidXRlcyIsIl9sb2FkZWRVbmlmb3JtcyIsInVuaWZvcm1zIiwiX2JvdW5kIiwic2FtcGxlcnMiLCJWRVJURVhfU0hBREVSIiwic2hhZGVyU291cmNlIiwiY29tcGlsZVNoYWRlciIsImdldFNoYWRlclBhcmFtZXRlciIsIkNPTVBJTEVfU1RBVFVTIiwiZ2V0U2hhZGVySW5mb0xvZyIsIkZSQUdNRU5UX1NIQURFUiIsImNyZWF0ZVByb2dyYW0iLCJhdHRhY2hTaGFkZXIiLCJsaW5rUHJvZ3JhbSIsImdldFByb2dyYW1QYXJhbWV0ZXIiLCJMSU5LX1NUQVRVUyIsImdldFByb2dyYW1JbmZvTG9nIiwiX2xvYWRBdHRyaWJ1dGVzIiwiX2xvYWRVbmlmb3JtcyIsIkFDVElWRV9BVFRSSUJVVEVTIiwiZ2V0QWN0aXZlQXR0cmliIiwiZ2V0QXR0cmliTG9jYXRpb24iLCJBQ1RJVkVfVU5JRk9STVMiLCJnZXRBY3RpdmVVbmlmb3JtIiwiZ2V0VW5pZm9ybUxvY2F0aW9uIiwiU0FNUExFUl8yRCIsInNhbXBsZXJJbmRleCIsImNvbXBpbGUiLCJ1c2VQcm9ncmFtIiwiYmluZFRleHR1cmVzIiwiX3NldE1hdHJpeFVuaWZvcm1zIiwiX3NldFZpZXdwb3J0VW5pZm9ybSIsInVuYmluZFRleHR1cmVzIiwiYWN0aXZlVGV4dHVyZSIsIlRFWFRVUkUwIiwiYmluZFRleHR1cmUiLCJ1cGRhdGUiLCJ1bmlmb3JtMWkiLCJ1cGRhdGVUZXh0dXJlcyIsIkJPT0wiLCJJTlQiLCJ1bmlmb3JtMWl2IiwidW5pZm9ybTFmdiIsInVuaWZvcm0xZiIsIkZMT0FUX01BVDMiLCJ1bmlmb3JtTWF0cml4M2Z2IiwiRkxPQVRfTUFUNCIsInVuaWZvcm1NYXRyaXg0ZnYiLCJGTE9BVF9WRUMyIiwidW5pZm9ybTJmdiIsInVuaWZvcm0yZiIsIkZMT0FUX1ZFQzMiLCJ1bmlmb3JtM2Z2IiwidW5pZm9ybTNmIiwiRkxPQVRfVkVDNCIsInVuaWZvcm00ZnYiLCJ1bmlmb3JtNGYiLCJJTlRfVkVDMiIsInVuaWZvcm0yaXYiLCJ1bmlmb3JtMmkiLCJJTlRfVkVDMyIsInVuaWZvcm0zaXYiLCJ1bmlmb3JtM2kiLCJJTlRfVkVDNCIsInVuaWZvcm00aXYiLCJ1bmlmb3JtNGkiLCJ1VXNlTGlnaHRpbmciLCJ1QW1iaWVudExpZ2h0Q291bnQiLCJ1RGlyZWN0aW9uYWxMaWdodENvdW50IiwidVBvaW50TGlnaHRDb3VudCIsInVBbWJpZW50Q29sb3IiLCJ1RGlyZWN0aW9uYWxDb2xvciIsInVQb2ludExpZ2h0TG9jYXRpb24iLCJ1UG9pbnRMaWdodENvbG9yIiwidUxpZ2h0aW5nRGlyZWN0aW9uIiwidVNwZWN1bGFyIiwiaXNUZXh0dXJlU2hhZGVyIiwiaXNDb2xvclNoYWRlciIsInVNYXRlcmlhbENvbG9yIiwiaXNUZXhMaWdodFNoYWRlciIsInVTdHJva2VXZWlnaHQiLCJlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSIsInZlcnRleEF0dHJpYlBvaW50ZXIiLCJnbFRleCIsImdsVGFyZ2V0IiwiVEVYVFVSRV8yRCIsImdsRm9ybWF0IiwibWlwbWFwcyIsImdsTWluRmlsdGVyIiwiZ2xNYWdGaWx0ZXIiLCJnbFdyYXBTIiwiQ0xBTVBfVE9fRURHRSIsImdsV3JhcFQiLCJpc1NyY01lZGlhRWxlbWVudCIsIl92aWRlb1ByZXZVcGRhdGVUaW1lIiwiaXNTcmNIVE1MRWxlbWVudCIsImlzU3JjUDVJbWFnZSIsImlzU3JjUDVHcmFwaGljcyIsImlzSW1hZ2VEYXRhIiwiX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZSIsImNyZWF0ZVRleHR1cmUiLCJ0ZXhQYXJhbWV0ZXJpIiwiVEVYVFVSRV9NQUdfRklMVEVSIiwiVEVYVFVSRV9NSU5fRklMVEVSIiwiVEVYVFVSRV9XUkFQX1MiLCJURVhUVVJFX1dSQVBfVCIsImxvYWRlZG1ldGFkYXRhIiwidGV4SW1hZ2UyRCIsIl9kaXJ0eSIsInVuYmluZFRleHR1cmUiLCJzZXRJbnRlcnBvbGF0aW9uIiwic2V0V3JhcE1vZGUiLCJNSVJST1JFRF9SRVBFQVQiLCJpbmZvcyIsImZpbmRJbWFnZSIsInN0cm9rZUltYWdlSW5mb3MiLCJjb2xEaW1JbWFnZUluZm9zIiwicm93RGltSW1hZ2VJbmZvcyIsImNvbENlbGxJbWFnZUluZm9zIiwicm93Q2VsbEltYWdlSW5mb3MiLCJnbHlwaEluZm9zIiwiZ2V0R2x5cGhJbmZvIiwicDAiLCJjMCIsImMxIiwicDEiLCJ0b1F1YWRyYXRpYyIsInF1YWRFcnJvciIsInNwbGl0SW5mbGVjdGlvbnMiLCJjZWxsSW1hZ2VJbmZvIiwiZGltT2Zmc2V0IiwiZGltSW1hZ2VJbmZvIiwiZ2x5cGgiLCJ1R2x5cGhSZWN0Iiwic3Ryb2tlSW1hZ2VJbmZvIiwic3Ryb2tlcyIsImNvbEluZm8iLCJyb3dJbmZvIiwidUdyaWRPZmZzZXQiLCJfZm9udEluZm8iLCJfdGV4dEdlb20iLCIuL3A1LlJlbmRlcmVyR0wiLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18iLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fIiwiVGFwTGlzdGVuZXIiLCJlbGVtZW50IiwiX2RyYWdnZWQiLCJfZWxlbWVudCIsIl9iaW5kZWRNb3ZlIiwiX21vdmVkIiwiX2JpbmRlZEVuZCIsIl9lbmRlZCIsImlzU3RhcnRlZCIsInN0YXJ0Q29udGV4dCIsImVsZW1lbnRzIiwiY2hlY2tMb29wIiwib25TdGFydGVkIiwidGFwTGlzdGVuZXJzIiwiYmluZFRhcExpc3RlbmVyIiwiTm9kZUxpc3QiLCJxdWVyeVNlbGVjdG9yQWxsIiwianF1ZXJ5IiwidGFwIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsInA1X2xpYl9wNV9taW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyIsInA1X2xpYl9wNV9taW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0IiwidG9uZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fIiwidG9uZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQiLCJzdGFydGF1ZGlvY29udGV4dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fIiwic3RhcnRhdWRpb2NvbnRleHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0Iiwic2tldGNoIiwicGlhbm8iLCJtZWxvZHkiLCJBMCIsIkMxIiwiRCMxIiwiRiMxIiwiQTEiLCJDMiIsIkQjMiIsIkYjMiIsIkEyIiwiQzMiLCJEIzMiLCJGIzMiLCJBMyIsIkM0IiwiRCM0IiwiRiM0IiwiQzUiLCJEIzUiLCJGIzUiLCJBNSIsIkM2IiwiRCM2IiwiRiM2IiwiQTYiLCJDNyIsIkQjNyIsIkYjNyIsIkE3IiwiQzgiLCJ2YWwyIiwicHRpY2siLCJwdGljazIiLCJub2lzZVZhbCIsInRpY2syIiwiZXZhbCJdLCJtYXBwaW5ncyI6ImFBQ0EsSUFBQUEsS0FHQSxTQUFBQyxFQUFBQyxHQUdBLEdBQUFGLEVBQUFFLEdBQ0EsT0FBQUYsRUFBQUUsR0FBQUMsUUFHQSxJQUFBQyxFQUFBSixFQUFBRSxJQUNBRyxFQUFBSCxFQUNBSSxHQUFBLEVBQ0FILFlBVUEsT0FOQUksRUFBQUwsR0FBQU0sS0FBQUosRUFBQUQsUUFBQUMsSUFBQUQsUUFBQUYsR0FHQUcsRUFBQUUsR0FBQSxFQUdBRixFQUFBRCxRQUtBRixFQUFBUSxFQUFBRixFQUdBTixFQUFBUyxFQUFBVixFQUdBQyxFQUFBVSxFQUFBLFNBQUFSLEVBQUFTLEVBQUFDLEdBQ0FaLEVBQUFhLEVBQUFYLEVBQUFTLElBQ0FHLE9BQUFDLGVBQUFiLEVBQUFTLEdBQTBDSyxZQUFBLEVBQUFDLElBQUFMLEtBSzFDWixFQUFBa0IsRUFBQSxTQUFBaEIsR0FDQSxvQkFBQWlCLGVBQUFDLGFBQ0FOLE9BQUFDLGVBQUFiLEVBQUFpQixPQUFBQyxhQUF3REMsTUFBQSxXQUV4RFAsT0FBQUMsZUFBQWIsRUFBQSxjQUFpRG1CLE9BQUEsS0FRakRyQixFQUFBc0IsRUFBQSxTQUFBRCxFQUFBRSxHQUVBLEdBREEsRUFBQUEsSUFBQUYsRUFBQXJCLEVBQUFxQixJQUNBLEVBQUFFLEVBQUEsT0FBQUYsRUFDQSxLQUFBRSxHQUFBLGlCQUFBRixRQUFBRyxXQUFBLE9BQUFILEVBQ0EsSUFBQUksRUFBQVgsT0FBQVksT0FBQSxNQUdBLEdBRkExQixFQUFBa0IsRUFBQU8sR0FDQVgsT0FBQUMsZUFBQVUsRUFBQSxXQUF5Q1QsWUFBQSxFQUFBSyxVQUN6QyxFQUFBRSxHQUFBLGlCQUFBRixFQUFBLFFBQUFNLEtBQUFOLEVBQUFyQixFQUFBVSxFQUFBZSxF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QSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxRQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxVQUFBQyxHQUFBLFVBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsUUFBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsVUFBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxhQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxNQUF3K0JDLElBQUs3RyxFQUFBLEVBQUFoMkIsRUFBQSxFQUFBSyxFQUFBLEVBQUFDLEVBQUEsRUFBQWtHLEVBQUEsRUFBQStDLEVBQUEsRUFBQWEsRUFBQSxFQUFBMkIsRUFBQSxFQUFBRyxFQUFBLEVBQUFDLEVBQUEsRUFBQTBELEdBQUEsRUFBQW9tQixHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQzdwK0JDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEdBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEdBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxHQUFraUI1dkMsSUFBSzh2QyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLE1BQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxNQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsVUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxVQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFNBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxNQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFVBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsU0FBQUMsS0FBQSxNQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLE1BQUFDLEtBQUEsU0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsYUFBQUMsS0FBQSxLQUFBQyxLQUFBLGFBQUFDLEtBQUEsVUFBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxVQUFBQyxLQUFBLEtBQUFDLEtBQUEs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QUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLFFBQXVCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsUUFBQTc3RSxJQUFBLFVBQTRCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLFFBQXVCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQXdCODJELElBQU1kLE1BSCtqVSxTQUFBem1ELEVBQUFLLEdBQWlCLElBQUFqYixL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azhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxh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QXZ3RCxNQUFBLFVBQUF3d0QsVUFBQSxVQUFBQyxVQUFBLFVBQUFDLFdBQUEsVUFBQUMsVUFBQSxVQUFBQyxNQUFBLFVBQUFDLGVBQUEsVUFBQUMsU0FBQSxVQUFBQyxRQUFBLFVBQUFDLEtBQUEsVUFBQUMsU0FBQSxVQUFBQyxTQUFBLFVBQUFDLGNBQUEsVUFBQUMsU0FBQSxVQUFBQyxVQUFBLFVBQUFDLFNBQUEsVUFBQUMsVUFBQSxVQUFBQyxZQUFBLFVBQUFDLGVBQUEsVUFBQUMsV0FBQSxVQUFBQyxXQUFBLFVBQUFDLFFBQUEsVUFBQUMsV0FBQSxVQUFBQyxhQUFBLFVBQUFDLGNBQUEsVUFBQUMsY0FBQSxVQUFBQyxjQUFBLFVBQUFDLGNBQUEsVUFBQUMsV0FBQSxVQUFBQyxTQUFBLFVBQUFDLFlBQUEsVUFBQUMsUUFBQSxVQUFBQyxRQUFBLFVBQUFDLFdBQUEsVUFBQUMsVUFBQSxVQUFBQyxZQUFBLFVBQUFDLFlBQUEsVUFBQUMsUUFBQSxVQUFBQyxVQUFBLFVBQUFDLFdBQUEsVUFBQUMsS0FBQSxVQUFBQyxVQUFBLFVBQUFDLEtBQUEsVUFBQXRGLE1BQUEsVUFBQXVGLFlBQUEsVUFBQUMsS0FBQSxVQUFBQyxTQUFBLFVBQUFDLFFBQUEsVUFBQUMsVUFBQSxVQUFBQyxPQUFBLFVBQUFDLE1BQUEsVUFBQUMsTUFBQSxVQUFBQyxTQUFBLFVBQUFDLGNBQUEsVUFBQUMsVUFBQSxVQUFBQyxhQUFBLFVBQUFDLFVBQUEsVUFBQUMsV0FBQSxVQUFBQyxVQUFBLFVBQUFDLHFCQUFBLFVBQUFDLFVBQUEsVUFBQUMsV0FBQSxVQUFBQyxVQUFBLFVBQUFDLFVBQUEsVUFBQUMsWUFBQSxVQUFBQyxjQUFBLFVBQUFDLGFBQUEsVUFBQUMsZUFBQSxVQUFBQyxlQUFBLFVBQUFDLGVBQUEsVUFBQUMsWUFBQSxVQUFBQyxLQUFBLFVBQUFDLFVBQUEsVUFBQUMsTUFBQSxVQUFBQyxRQUFBLFVBQUFDLE9BQUEsVUFBQUMsaUJBQUEsVUFBQUMsV0FBQSxVQUFBQyxhQUFBLFVBQUFDLGFBQUEsVUFBQUMsZUFBQSxVQUFB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QUEsR0FDQSxLQUNBZzZELEVBQUEsSUFDQTAxQyxFQUFBL3RILHFCQUErQzJ0SCxFQUFBeDJILEVBQUlnaUMsS0FBQTYwRixFQUFBaHdJLEVBQUF1aUIsS0FBQSxHQUFBdUksSUFBQSxHQUFBM1csY0FBQSxRQUNuRDQ3SCxFQUFBL3RILHFCQUErQzJ0SCxFQUFBeDJILEVBQUlnaUMsS0FBQTYwRixFQUFBaHdJLEVBQUF1aUIsS0FBQSxHQUFBdXZILElBQUEsR0FBQTM5SCxjQUFBLFNBSW5ENDlILEVBQUEzbUgsRUFFQSxJQUFBOG1ILEVBQUFseUksRUFBQThKLE1BQUE5SixFQUFBd3NILFNBQUEsS0FDQSxHQUFBd2xCLEdBQUFFLEVBQUEsQ0FDQWx5SSxFQUFBcWdDLE9BQUEsR0FDQSxLQUNBZzZELEVBQUEsSUFDQTAxQyxFQUFBL3RILHFCQUErQzJ0SCxFQUFBeDJILEVBQUlnaUMsS0FBQTYwRixFQUFBaHdJLEVBQUF1aUIsS0FBQSxHQUFBdXZILElBQUEsR0FBQTM5SCxjQUFBLFFBSW5ENjlILEVBQUFFLEtBTUFseUksRUFBQXVsSCxXQUFBLE1BQ0EsS0FBQXZsSCxFQUFBUCxLQUNBTyxFQUFBeTdHLEtBQUFsMkQsS0FBQXYvQyxNQUFBLFFBR0E4dUIsR0FBQSxJQUdBOTBCLEVBQUE4MkcsYUFBQSxNQUNRKzRCLElBQWtCRixFQUFBeDJILEVBQUlsVCxTQUFBd0gsS0FBQSxpQkFHZjhoSSxFQUFBLFVBQ2YsSUFBSUUsRUFBQXQySCxFQUFFMjJILGtCQ3BKTixJQUFBaDNILEVBR0FBLEVBQUEsV0FDQSxPQUFBdFksS0FEQSxHQUlBLElBRUFzWSxLQUFBK3JDLFNBQUEsY0FBQUEsS0FBQSxFQUFBc3RGLE1BQUEsUUFDQyxNQUFBaG5JLEdBRUQsaUJBQUF2RSxTQUFBa1MsRUFBQWxTLFFBT0EzSSxFQUFBRCxRQUFBOGEiLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAzKTtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KXtcblxuXHQvL1VNRFxuXHRpZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRcdGRlZmluZShmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBmYWN0b3J5KCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuIFx0fSBlbHNlIHtcblx0XHRyb290LlRvbmUgPSBmYWN0b3J5KCk7XG5cdH1cblxufSh0aGlzLCBmdW5jdGlvbigpe1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIFRvbmU7XG5cdC8vY29uc3RydWN0cyB0aGUgbWFpbiBUb25lIG9iamVjdFxuXHRmdW5jdGlvbiBNYWluKGZ1bmMpe1xuXHRcdFRvbmUgPSBmdW5jKCk7XG5cdH1cblx0Ly9pbnZva2VzIGVhY2ggb2YgdGhlIG1vZHVsZXMgd2l0aCB0aGUgbWFpbiBUb25lIG9iamVjdCBhcyB0aGUgYXJndW1lbnRcblx0ZnVuY3Rpb24gTW9kdWxlKGZ1bmMpe1xuXHRcdGZ1bmMoVG9uZSk7XG5cdH1cdC8qKlxuXHQgKiAgVG9uZS5qc1xuXHQgKiAgQGF1dGhvciBZb3RhbSBNYW5uXG5cdCAqICBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVCBMaWNlbnNlXG5cdCAqICBAY29weXJpZ2h0IDIwMTQtMjAxOCBZb3RhbSBNYW5uXG5cdCAqL1xuXHRNYWluKGZ1bmN0aW9uICgpIHtcblx0ICAgIFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VE9ORVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lIGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBvdGhlciBjbGFzc2VzLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIHZhciBUb25lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUb25lKSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbnN0cnVjdG9yIG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBcXCduZXdcXCcga2V5d29yZCcpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEByZXR1cm5zIHtTdHJpbmd9IHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIGFzIGEgc3RyaW5nXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmb3IgKHZhciBjbGFzc05hbWUgaW4gVG9uZSkge1xuXHQgICAgICAgICAgICB2YXIgaXNMZXR0ZXIgPSBjbGFzc05hbWVbMF0ubWF0Y2goL15bQS1aXSQvKTtcblx0ICAgICAgICAgICAgdmFyIHNhbWVDb25zdHJ1Y3RvciA9IFRvbmVbY2xhc3NOYW1lXSA9PT0gdGhpcy5jb25zdHJ1Y3Rvcjtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNGdW5jdGlvbihUb25lW2NsYXNzTmFtZV0pICYmIGlzTGV0dGVyICYmIHNhbWVDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gJ1RvbmUnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgZGlzY29ubmVjdCBhbmQgZGlzcG9zZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRHRVQvU0VUXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIHBhcmFtZXRlcnMgYXQgb25jZS4gRWl0aGVyIHBhc3MgaW4gYW5cblx0XHQgKiAgb2JqZWN0IG1hcHBpbmcgcGFyYW1ldGVycyB0byB2YWx1ZXMsIG9yIHRvIHNldCBhXG5cdFx0ICogIHNpbmdsZSBwYXJhbWV0ZXIsIGJ5IHBhc3NpbmcgaW4gYSBzdHJpbmcgYW5kIHZhbHVlLlxuXHRcdCAqICBUaGUgbGFzdCBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCByYW1wIHRpbWUgd2hpY2hcblx0XHQgKiAgd2lsbCByYW1wIGFueSBzaWduYWwgdmFsdWVzIHRvIHRoZWlyIGRlc3RpbmF0aW9uIHZhbHVlXG5cdFx0ICogIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBwYXJhbXNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByYW1wVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZX0gdGhpc1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NldCB2YWx1ZXMgdXNpbmcgYW4gb2JqZWN0XG5cdFx0ICogZmlsdGVyLnNldCh7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogMzAwLFxuXHRcdCAqIFx0XCJ0eXBlXCIgOiBoaWdocGFzc1xuXHRcdCAqIH0pO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGZpbHRlci5zZXQoXCJ0eXBlXCIsIFwiaGlnaHBhc3NcIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9yYW1wIHRvIHRoZSB2YWx1ZSAyMjAgb3ZlciAzIHNlY29uZHMuXG5cdFx0ICogb3NjaWxsYXRvci5zZXQoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IDIyMFxuXHRcdCAqIH0sIDMpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgdmFsdWUsIHJhbXBUaW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QocGFyYW1zKSkge1xuXHQgICAgICAgICAgICByYW1wVGltZSA9IHZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHZhciB0bXBPYmogPSB7fTtcblx0ICAgICAgICAgICAgdG1wT2JqW3BhcmFtc10gPSB2YWx1ZTtcblx0ICAgICAgICAgICAgcGFyYW1zID0gdG1wT2JqO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBwYXJhbUxvb3A6XG5cdCAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gcGFyYW1zKSB7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcmFtc1thdHRyXTtcblx0ICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICAgICAgaWYgKGF0dHIuaW5kZXhPZignLicpICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyU3BsaXQgPSBhdHRyLnNwbGl0KCcuJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyU3BsaXQubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFthdHRyU3BsaXRbaV1dO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgVG9uZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0clNwbGl0LnNwbGljZSgwLCBpICsgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5uZXJQYXJhbSA9IGF0dHJTcGxpdC5qb2luKCcuJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuc2V0KGlubmVyUGFyYW0sIHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHBhcmFtTG9vcDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBhdHRyID0gYXR0clNwbGl0W2F0dHJTcGxpdC5sZW5ndGggLSAxXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHZhciBwYXJhbSA9IHBhcmVudFthdHRyXTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYocGFyYW0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5TaWduYWwgJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlNpZ25hbCB8fCBUb25lLlBhcmFtICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5QYXJhbSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS52YWx1ZSAhPT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihyYW1wVGltZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5yYW1wVG8odmFsdWUsIHJhbXBUaW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBBdWRpb1BhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnZhbHVlICE9PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5UaW1lQmFzZSAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJlbnRbYXR0cl0gPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBUb25lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcGFyYW0uc2V0KHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gIT09IHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcGFyZW50W2F0dHJdID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBvYmplY3QncyBhdHRyaWJ1dGVzLiBHaXZlbiBubyBhcmd1bWVudHMgZ2V0XG5cdFx0ICogIHdpbGwgcmV0dXJuIGFsbCBhdmFpbGFibGUgb2JqZWN0IHByb3BlcnRpZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmdcblx0XHQgKiAgdmFsdWVzLiBQYXNzIGluIGEgc2luZ2xlIGF0dHJpYnV0ZSB0byByZXRyaWV2ZSBvciBhbiBhcnJheVxuXHRcdCAqICBvZiBhdHRyaWJ1dGVzLiBUaGUgYXR0cmlidXRlIHN0cmluZ3MgY2FuIGFsc28gaW5jbHVkZSBhIFwiLlwiXG5cdFx0ICogIHRvIGFjY2VzcyBkZWVwZXIgcHJvcGVydGllcy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogb3NjLmdldCgpO1xuXHRcdCAqIC8vcmV0dXJucyB7XCJ0eXBlXCIgOiBcInNpbmVcIiwgXCJmcmVxdWVuY3lcIiA6IDQ0MCwgLi4uZXRjfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG9zYy5nZXQoXCJ0eXBlXCIpO1xuXHRcdCAqIC8vcmV0dXJucyB7IFwidHlwZVwiIDogXCJzaW5lXCJ9XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL3VzZSBkb3Qgbm90YXRpb24gdG8gYWNjZXNzIGRlZXAgcHJvcGVydGllc1xuXHRcdCAqIHN5bnRoLmdldChbXCJlbnZlbG9wZS5hdHRhY2tcIiwgXCJlbnZlbG9wZS5yZWxlYXNlXCJdKTtcblx0XHQgKiAvL3JldHVybnMge1wiZW52ZWxvcGVcIiA6IHtcImF0dGFja1wiIDogMC4yLCBcInJlbGVhc2VcIiA6IDAuNH19XG5cdFx0ICogIEBwYXJhbSB7QXJyYXk9fHN0cmluZ3x1bmRlZmluZWR9IHBhcmFtcyB0aGUgcGFyYW1ldGVycyB0byBnZXQsIG90aGVyd2lzZSB3aWxsIHJldHVyblxuXHRcdCAqICBcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgYWxsIGF2YWlsYWJsZS5cblx0XHQgKiAgQHJldHVybnMge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgcGFyYW1zID0gdGhpcy5fY29sbGVjdERlZmF1bHRzKHRoaXMuY29uc3RydWN0b3IpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHBhcmFtcyA9IFtwYXJhbXNdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmV0ID0ge307XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGF0dHIgPSBwYXJhbXNbaV07XG5cdCAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICB2YXIgc3ViUmV0ID0gcmV0O1xuXHQgICAgICAgICAgICBpZiAoYXR0ci5pbmRleE9mKCcuJykgIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYXR0clNwbGl0ID0gYXR0ci5zcGxpdCgnLicpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRyU3BsaXQubGVuZ3RoIC0gMTsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHN1YkF0dHIgPSBhdHRyU3BsaXRbal07XG5cdCAgICAgICAgICAgICAgICAgICAgc3ViUmV0W3N1YkF0dHJdID0gc3ViUmV0W3N1YkF0dHJdIHx8IHt9O1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YlJldCA9IHN1YlJldFtzdWJBdHRyXTtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbc3ViQXR0cl07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBhdHRyID0gYXR0clNwbGl0W2F0dHJTcGxpdC5sZW5ndGggLSAxXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YXIgcGFyYW0gPSBwYXJlbnRbYXR0cl07XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KHBhcmFtc1thdHRyXSkpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLmdldCgpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuU2lnbmFsICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5TaWduYWwpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLnZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuUGFyYW0gJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlBhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS52YWx1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLnZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgVG9uZSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0uZ2V0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoIVRvbmUuaXNGdW5jdGlvbihwYXJhbSkgJiYgVG9uZS5pc0RlZmluZWQocGFyYW0pKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjb2xsZWN0IGFsbCBvZiB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGluIG9uZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjb25zdHIgdGhlIGNvbnN0cnVjdG9yIHRvIGZpbmQgdGhlIGRlZmF1bHRzIGZyb21cblx0XHQgKiAgQHJldHVybiB7QXJyYXl9IGFsbCBvZiB0aGUgYXR0cmlidXRlcyB3aGljaCBiZWxvbmcgdG8gdGhlIGNsYXNzXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5fY29sbGVjdERlZmF1bHRzID0gZnVuY3Rpb24gKGNvbnN0cikge1xuXHQgICAgICAgIHZhciByZXQgPSBbXTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoY29uc3RyLmRlZmF1bHRzKSkge1xuXHQgICAgICAgICAgICByZXQgPSBPYmplY3Qua2V5cyhjb25zdHIuZGVmYXVsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoY29uc3RyLl9zdXBlcikpIHtcblx0ICAgICAgICAgICAgdmFyIHN1cGVyRGVmcyA9IHRoaXMuX2NvbGxlY3REZWZhdWx0cyhjb25zdHIuX3N1cGVyKTtcblx0ICAgICAgICAgICAgLy9maWx0ZXIgb3V0IHJlcGVhdHNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdXBlckRlZnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChyZXQuaW5kZXhPZihzdXBlckRlZnNbaV0pID09PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKHN1cGVyRGVmc1tpXSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJldDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRERUZBVUxUU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICB2YWx1ZXMgIFRoZSBhcmd1bWVudHMgYXJyYXlcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICBrZXlzICAgIFRoZSBuYW1lcyBvZiB0aGUgYXJndW1lbnRzXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBjb25zdHIgVGhlIGNsYXNzIGNvbnN0cnVjdG9yXG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBBbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlICBkZWZhdWx0cyBiZXR3ZWVuIHRoZSBjbGFzcycgZGVmYXVsdHNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgcGFzc2VkIGluIGFyZ3VtZW50cy5cblx0XHQgKi9cblx0ICAgIFRvbmUuZGVmYXVsdHMgPSBmdW5jdGlvbiAodmFsdWVzLCBrZXlzLCBjb25zdHIpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IHt9O1xuXHQgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxICYmIFRvbmUuaXNPYmplY3QodmFsdWVzWzBdKSkge1xuXHQgICAgICAgICAgICBvcHRpb25zID0gdmFsdWVzWzBdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgb3B0aW9uc1trZXlzW2ldXSA9IHZhbHVlc1tpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoY29uc3RyLmRlZmF1bHRzKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIGNvbnN0ci5kZWZhdWx0cyk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzT2JqZWN0KGNvbnN0cikpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBjb25zdHIpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBvcHRpb25zO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIGBnaXZlbmAgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCwgdXNlIHRoZSBgZmFsbGJhY2tgLlxuXHRcdCAqICBJZiBib3RoIGBnaXZlbmAgYW5kIGBmYWxsYmFja2AgYXJlIG9iamVjdCBsaXRlcmFscywgaXQgd2lsbFxuXHRcdCAqICByZXR1cm4gYSBkZWVwIGNvcHkgd2hpY2ggaW5jbHVkZXMgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIGZyb20gYm90aFxuXHRcdCAqICBvYmplY3RzLiBJZiBhIHBhcmFtZXRlciBpcyB1bmRlZmluZWQgaW4gZ2l2ZW4sIGl0IHdpbGwgcmV0dXJuXG5cdFx0ICogIHRoZSBmYWxsYmFjayBwcm9wZXJ0eS5cblx0XHQgKiAgPGJyPjxicj5cblx0XHQgKiAgV0FSTklORzogaWYgb2JqZWN0IGlzIHNlbGYgcmVmZXJlbnRpYWwsIGl0IHdpbGwgZ28gaW50byBhbiBhblxuXHRcdCAqICBpbmZpbml0ZSByZWN1cnNpdmUgbG9vcC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHBhcmFtICB7Kn0gZ2l2ZW5cblx0XHQgKiAgQHBhcmFtICB7Kn0gZmFsbGJhY2tcblx0XHQgKiAgQHJldHVybiB7Kn1cblx0XHQgKi9cblx0ICAgIFRvbmUuZGVmYXVsdEFyZyA9IGZ1bmN0aW9uIChnaXZlbiwgZmFsbGJhY2spIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc09iamVjdChnaXZlbikgJiYgVG9uZS5pc09iamVjdChmYWxsYmFjaykpIHtcblx0ICAgICAgICAgICAgdmFyIHJldCA9IHt9O1xuXHQgICAgICAgICAgICAvL21ha2UgYSBkZWVwIGNvcHkgb2YgdGhlIGdpdmVuIG9iamVjdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBnaXZlblByb3AgaW4gZ2l2ZW4pIHtcblx0ICAgICAgICAgICAgICAgIHJldFtnaXZlblByb3BdID0gVG9uZS5kZWZhdWx0QXJnKGZhbGxiYWNrW2dpdmVuUHJvcF0sIGdpdmVuW2dpdmVuUHJvcF0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGZvciAodmFyIGZhbGxiYWNrUHJvcCBpbiBmYWxsYmFjaykge1xuXHQgICAgICAgICAgICAgICAgcmV0W2ZhbGxiYWNrUHJvcF0gPSBUb25lLmRlZmF1bHRBcmcoZ2l2ZW5bZmFsbGJhY2tQcm9wXSwgZmFsbGJhY2tbZmFsbGJhY2tQcm9wXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHJldDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5pc1VuZGVmKGdpdmVuKSA/IGZhbGxiYWNrIDogZ2l2ZW47XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdENPTk5FQ1RJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBjb25uZWN0IHRvZ2V0aGVyIGFsbCBvZiB0aGUgYXJndW1lbnRzIGluIHNlcmllc1xuXHRcdCAqICBAcGFyYW0gey4uLkF1ZGlvUGFyYW18VG9uZXxBdWRpb05vZGV9IG5vZGVzXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLmNvbm5lY3RTZXJpZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRVbml0ID0gYXJndW1lbnRzWzBdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB0b1VuaXQgPSBhcmd1bWVudHNbaV07XG5cdCAgICAgICAgICAgIGN1cnJlbnRVbml0LmNvbm5lY3QodG9Vbml0KTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQgPSB0b1VuaXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gVFlQRSBDSEVDS0lOR1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJnIGlzIHVuZGVmaW5lZFxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIHVuZGVmaW5lZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzVW5kZWYgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmcgaXMgbm90IHVuZGVmaW5lZFxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIHVuZGVmaW5lZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzRGVmaW5lZCA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICByZXR1cm4gIVRvbmUuaXNVbmRlZih2YWwpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmcgaXMgYSBmdW5jdGlvblxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgZnVuY3Rpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc0Z1bmN0aW9uID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlci5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIG51bWJlclxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzTnVtYmVyID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgZ2l2ZW4gYXJndW1lbnQgaXMgYW4gb2JqZWN0IGxpdGVyYWwgKGkuZS4gYHt9YCk7XG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYW4gb2JqZWN0IGxpdGVyYWwuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNPYmplY3QgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBPYmplY3RdJyAmJiBhcmcuY29uc3RydWN0b3IgPT09IE9iamVjdDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgYSBib29sZWFuLlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgYm9vbGVhblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzQm9vbGVhbiA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhbiBBcnJheVxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGFuIGFycmF5XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNBcnJheSA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIHN0cmluZy5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIHN0cmluZ1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzU3RyaW5nID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgaW4gdGhlIGZvcm0gb2YgYSBub3RlIGluIHNjaWVudGlmaWMgcGl0Y2ggbm90YXRpb24uXG5cdFx0ICogIGUuZy4gXCJDNFwiXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBzdHJpbmdcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc05vdGUgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuaXNTdHJpbmcoYXJnKSAmJiAvXihbYS1nXXsxfSg/OmJ8I3x4fGJiKT8pKC0/WzAtOV0rKS9pLnRlc3QoYXJnKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQW4gZW1wdHkgZnVuY3Rpb24uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUubm9PcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTWFrZSB0aGUgcHJvcGVydHkgbm90IHdyaXRhYmxlLiBJbnRlcm5hbCB1c2Ugb25seS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcGVydHkgIHRoZSBwcm9wZXJ0eSB0byBtYWtlIG5vdCB3cml0YWJsZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuX3JlYWRPbmx5ID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydHkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5KHByb3BlcnR5W2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eSwge1xuXHQgICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuXHQgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIE1ha2UgYW4gYXR0cmlidXRlIHdyaXRlYWJsZS4gSW50ZXJhbCB1c2Ugb25seS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcGVydHkgIHRoZSBwcm9wZXJ0eSB0byBtYWtlIHdyaXRhYmxlXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5fd3JpdGFibGUgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0eS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd3JpdGFibGUocHJvcGVydHlbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB7IHdyaXRhYmxlOiB0cnVlIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBQb3NzaWJsZSBwbGF5IHN0YXRlcy5cblx0XHQgKiBAZW51bSB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGF0ZSA9IHtcblx0ICAgICAgICBTdGFydGVkOiAnc3RhcnRlZCcsXG5cdCAgICAgICAgU3RvcHBlZDogJ3N0b3BwZWQnLFxuXHQgICAgICAgIFBhdXNlZDogJ3BhdXNlZCdcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBFcXVhbCBwb3dlciBnYWluIHNjYWxlLiBHb29kIGZvciBjcm9zcy1mYWRpbmcuXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSBwZXJjZW50ICgwLTEpXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gICAgICAgICBvdXRwdXQgZ2FpbiAoMC0xKVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmVxdWFsUG93ZXJTY2FsZSA9IGZ1bmN0aW9uIChwZXJjZW50KSB7XG5cdCAgICAgICAgdmFyIHBpRmFjdG9yID0gMC41ICogTWF0aC5QSTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5zaW4ocGVyY2VudCAqIHBpRmFjdG9yKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBkZWNpYmVscyBpbnRvIGdhaW4uXG5cdFx0ICogIEBwYXJhbSAge0RlY2liZWxzfSBkYlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZGJUb0dhaW4gPSBmdW5jdGlvbiAoZGIpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5wb3coMTAsIGRiIC8gMjApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGdhaW4gdG8gZGVjaWJlbHMuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gZ2FpbiAoMC0xKVxuXHRcdCAqICBAcmV0dXJuIHtEZWNpYmVsc31cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5nYWluVG9EYiA9IGZ1bmN0aW9uIChnYWluKSB7XG5cdCAgICAgICAgcmV0dXJuIDIwICogKE1hdGgubG9nKGdhaW4pIC8gTWF0aC5MTjEwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhbiBpbnRlcnZhbCAoaW4gc2VtaXRvbmVzKSB0byBhIGZyZXF1ZW5jeSByYXRpby5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWx9IGludGVydmFsIHRoZSBudW1iZXIgb2Ygc2VtaXRvbmVzIGFib3ZlIHRoZSBiYXNlIG5vdGVcblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSAgICAgICAgICB0aGUgZnJlcXVlbmN5IHJhdGlvXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB0b25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbygwKTsgLy8gMVxuXHRcdCAqIHRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKDEyKTsgLy8gMlxuXHRcdCAqIHRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKC0xMik7IC8vIDAuNVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8gPSBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5wb3coMiwgaW50ZXJ2YWwgLyAxMik7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VElNSU5HXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBvZiB0aGUgQXVkaW9Db250ZXh0IGNsb2NrLlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBjdXJyZW50VGltZSBmcm9tIHRoZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuY29udGV4dC5ub3coKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIEF1ZGlvQ29udGV4dCBjbG9jay5cblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSB0aGUgY3VycmVudFRpbWUgZnJvbSB0aGUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUubm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLmNvbnRleHQubm93KCk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0SU5IRVJJVEFOQ0Vcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIGhhdmUgYSBjaGlsZCBpbmhlcml0IGFsbCBvZiBUb25lJ3MgKG9yIGEgcGFyZW50J3MpIHByb3RvdHlwZVxuXHRcdCAqICB0byBpbmhlcml0IHRoZSBwYXJlbnQncyBwcm9wZXJ0aWVzLCBtYWtlIHN1cmUgdG8gY2FsbFxuXHRcdCAqICBQYXJlbnQuY2FsbCh0aGlzKSBpbiB0aGUgY2hpbGQncyBjb25zdHJ1Y3RvclxuXHRcdCAqXG5cdFx0ICogIGJhc2VkIG9uIGNsb3N1cmUgbGlicmFyeSdzIGluaGVyaXQgZnVuY3Rpb25cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSBcdGNoaWxkXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gcGFyZW50IChvcHRpb25hbCkgcGFyZW50IHRvIGluaGVyaXQgZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBubyBwYXJlbnQgaXMgc3VwcGxpZWQsIHRoZSBjaGlsZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGluaGVyaXQgZnJvbSBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmV4dGVuZCA9IGZ1bmN0aW9uIChjaGlsZCwgcGFyZW50KSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihwYXJlbnQpKSB7XG5cdCAgICAgICAgICAgIHBhcmVudCA9IFRvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIFRlbXBDb25zdHJ1Y3RvcigpIHtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVGVtcENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7XG5cdCAgICAgICAgY2hpbGQucHJvdG90eXBlID0gbmV3IFRlbXBDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIC8qKiBAb3ZlcnJpZGUgKi9cblx0ICAgICAgICBjaGlsZC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjaGlsZDtcblx0ICAgICAgICBjaGlsZC5fc3VwZXIgPSBwYXJlbnQ7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0Q09OVEVYVFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUHJpdmF0ZSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHR5cGUge0F1ZGlvQ29udGV4dH1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBhdWRpb0NvbnRleHQgPSBudWxsO1xuXHQgICAgLyoqXG5cdFx0ICogIEEgc3RhdGljIHBvaW50ZXIgdG8gdGhlIGF1ZGlvIGNvbnRleHQgYWNjZXNzaWJsZSBhcyBUb25lLmNvbnRleHQuXG5cdFx0ICogIEB0eXBlIHtUb25lLkNvbnRleHR9XG5cdFx0ICogIEBuYW1lIGNvbnRleHRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLCAnY29udGV4dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGF1ZGlvQ29udGV4dDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuQ29udGV4dCAmJiBjb250ZXh0IGluc3RhbmNlb2YgVG9uZS5Db250ZXh0KSB7XG5cdCAgICAgICAgICAgICAgICBhdWRpb0NvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYXVkaW9Db250ZXh0ID0gbmV3IFRvbmUuQ29udGV4dChjb250ZXh0KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL2luaXRpYWxpemUgdGhlIG5ldyBhdWRpbyBjb250ZXh0XG5cdCAgICAgICAgICAgIFRvbmUuQ29udGV4dC5lbWl0KCdpbml0JywgYXVkaW9Db250ZXh0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEB0eXBlIHtUb25lLkNvbnRleHR9XG5cdFx0ICogIEBuYW1lIGNvbnRleHRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUucHJvdG90eXBlLCAnY29udGV4dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuY29udGV4dDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUb25lIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhIGNvbnRleHQgb24gaW5pdCwgYnV0IGlmIHlvdSBhcmUgd29ya2luZ1xuXHRcdCAqICB3aXRoIG90aGVyIGxpYnJhcmllcyB3aGljaCBhbHNvIGNyZWF0ZSBhbiBBdWRpb0NvbnRleHQsIGl0IGNhbiBiZVxuXHRcdCAqICB1c2VmdWwgdG8gc2V0IHlvdXIgb3duLiBJZiB5b3UgYXJlIGdvaW5nIHRvIHNldCB5b3VyIG93biBjb250ZXh0LFxuXHRcdCAqICBiZSBzdXJlIHRvIGRvIGl0IGF0IHRoZSBzdGFydCBvZiB5b3VyIGNvZGUsIGJlZm9yZSBjcmVhdGluZyBhbnkgb2JqZWN0cy5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcGFyYW0ge0F1ZGlvQ29udGV4dH0gY3R4IFRoZSBuZXcgYXVkaW8gY29udGV4dCB0byBzZXRcblx0XHQgKi9cblx0ICAgIFRvbmUuc2V0Q29udGV4dCA9IGZ1bmN0aW9uIChjdHgpIHtcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBjdHg7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVRUUklCVVRFU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBzZWNvbmRzIG9mIDEgcHJvY2Vzc2luZyBibG9jayAoMTI4IHNhbXBsZXMpXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIGJsb2NrVGltZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUucHJvdG90eXBlLCAnYmxvY2tUaW1lJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gMTI4IC8gdGhpcy5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGR1cmF0aW9uIGluIHNlY29uZHMgb2Ygb25lIHNhbXBsZS5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2FtcGxlVGltZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUucHJvdG90eXBlLCAnc2FtcGxlVGltZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIDEgLyB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGV0aGVyIG9yIG5vdCBhbGwgdGhlIHRlY2hub2xvZ2llcyB0aGF0IFRvbmUuanMgcmVsaWVzIG9uIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3Nlci5cblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBuYW1lIHN1cHBvcnRlZFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUsICdzdXBwb3J0ZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBoYXNBdWRpb0NvbnRleHQgPSB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ0F1ZGlvQ29udGV4dCcpIHx8IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnd2Via2l0QXVkaW9Db250ZXh0Jyk7XG5cdCAgICAgICAgICAgIHZhciBoYXNQcm9taXNlcyA9IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnUHJvbWlzZScpO1xuXHQgICAgICAgICAgICB2YXIgaGFzV29ya2VycyA9IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnV29ya2VyJyk7XG5cdCAgICAgICAgICAgIHJldHVybiBoYXNBdWRpb0NvbnRleHQgJiYgaGFzUHJvbWlzZXMgJiYgaGFzV29ya2Vycztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBCb29sZWFuIHZhbHVlIGlmIHRoZSBhdWRpbyBjb250ZXh0IGhhcyBiZWVuIGluaXRpYWxpemVkLlxuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbmFtZSBpbml0aWFsaXplZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUsICdpbml0aWFsaXplZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGF1ZGlvQ29udGV4dCAhPT0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGNvbnRleHQgd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIHJlc29sdmUgIENhbGxiYWNrIHdoZW4gdGhlIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWRcblx0XHQgKiAgQHJldHVybiAge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLmdldENvbnRleHQgPSBmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHQgICAgICAgIGlmIChUb25lLmluaXRpYWxpemVkKSB7XG5cdCAgICAgICAgICAgIHJlc29sdmUoVG9uZS5jb250ZXh0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgcmVzQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXNvbHZlKFRvbmUuY29udGV4dCk7XG5cdCAgICAgICAgICAgICAgICBUb25lLkNvbnRleHQub2ZmKCdpbml0JywgcmVzQ2FsbGJhY2spO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCByZXNDYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB2ZXJzaW9uIG51bWJlclxuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS52ZXJzaW9uID0gJ3IxMic7XG5cdCAgICByZXR1cm4gVG9uZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRW1pdHRlciBnaXZlcyBjbGFzc2VzIHdoaWNoIGV4dGVuZCBpdFxuXHRcdCAqICAgICAgICAgdGhlIGFiaWxpdHkgdG8gbGlzdGVuIGZvciBhbmQgZW1pdCBldmVudHMuXG5cdFx0ICogICAgICAgICBJbnNwaXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZyb20gSmVyb21lIEV0aWVubmUncyBbTWljcm9FdmVudF0oaHR0cHM6Ly9naXRodWIuY29tL2plcm9tZWV0aWVubmUvbWljcm9ldmVudC5qcykuXG5cdFx0ICogICAgICAgICBNSVQgKGMpIDIwMTEgSmVyb21lIEV0aWVubmUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENvbnRhaW5zIGFsbCBvZiB0aGUgZXZlbnRzLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSB7fTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVtaXR0ZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIEJpbmQgYSBjYWxsYmFjayB0byBhIHNwZWNpZmljIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIGV2ZW50ICAgICBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gbGlzdGVuIGZvci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCBpcyBlbWl0dGVkXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9zcGxpdCB0aGUgZXZlbnRcblx0ICAgICAgICB2YXIgZXZlbnRzID0gZXZlbnQuc3BsaXQoL1xcVysvKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnROYW1lID0gZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnROYW1lXSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudE5hbWVdLnB1c2goY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQmluZCBhIGNhbGxiYWNrIHdoaWNoIGlzIG9ubHkgaW52b2tlZCBvbmNlXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgZXZlbnQgICAgIFRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBsaXN0ZW4gZm9yLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50IGlzIGVtaXR0ZWRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuXHQgICAgICAgIHZhciBib3VuZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvL2ludm9rZSB0aGUgY2FsbGJhY2tcblx0ICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgdGhpcy5vZmYoZXZlbnQsIGJvdW5kQ2FsbGJhY2spO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm9uKGV2ZW50LCBib3VuZENhbGxiYWNrKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lci5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBldmVudCAgICAgVGhlIGV2ZW50IHRvIHN0b3AgbGlzdGVuaW5nIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHdoaWNoIHdhcyBib3VuZCB0b1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZXZlbnQgd2l0aCBUb25lLkVtaXR0ZXIub24uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vIGNhbGxiYWNrIGlzIGdpdmVuLCBhbGwgY2FsbGJhY2tzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cyBhcmUgcmVtb3ZlZC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50cyA9IGV2ZW50LnNwbGl0KC9cXFcrLyk7XG5cdCAgICAgICAgZm9yICh2YXIgZXYgPSAwOyBldiA8IGV2ZW50cy5sZW5ndGg7IGV2KyspIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSBldmVudHNbZXZdO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihjYWxsYmFjaykpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnRdID0gW107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBldmVudExpc3QgPSB0aGlzLl9ldmVudHNbZXZlbnRdO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudExpc3RbaV0gPT09IGNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudExpc3Quc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2UgYWxsIG9mIHRoZSBjYWxsYmFja3MgYm91bmQgdG8gdGhlIGV2ZW50XG5cdFx0ICogIHdpdGggYW55IGFyZ3VtZW50cyBwYXNzZWQgaW4uXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGV2ZW50ICBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJncy4uLiBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9ucyBsaXN0ZW5pbmcuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzKSB7XG5cdCAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5zbGljZSgxKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudCkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldmVudExpc3QgPSB0aGlzLl9ldmVudHNbZXZlbnRdLnNsaWNlKDApO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV2ZW50TGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50TGlzdFtpXS5hcHBseSh0aGlzLCBhcmdzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIEVtaXR0ZXIgZnVuY3Rpb25zIChvbi9vZmYvZW1pdCkgdG8gdGhlIG9iamVjdFxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R8RnVuY3Rpb259ICBvYmplY3QgIFRoZSBvYmplY3Qgb3IgY2xhc3MgdG8gZXh0ZW5kLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLm1peGluID0gZnVuY3Rpb24gKG9iamVjdCkge1xuXHQgICAgICAgIHZhciBmdW5jdGlvbnMgPSBbXG5cdCAgICAgICAgICAgICdvbicsXG5cdCAgICAgICAgICAgICdvbmNlJyxcblx0ICAgICAgICAgICAgJ29mZicsXG5cdCAgICAgICAgICAgICdlbWl0J1xuXHQgICAgICAgIF07XG5cdCAgICAgICAgb2JqZWN0Ll9ldmVudHMgPSB7fTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZnVuYyA9IGZ1bmN0aW9uc1tpXTtcblx0ICAgICAgICAgICAgdmFyIGVtaXR0ZXJGdW5jID0gVG9uZS5FbWl0dGVyLnByb3RvdHlwZVtmdW5jXTtcblx0ICAgICAgICAgICAgb2JqZWN0W2Z1bmNdID0gZW1pdHRlckZ1bmM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lLkVtaXR0ZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRW1pdHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgVGltZWxpbmUgY2xhc3MgZm9yIHNjaGVkdWxpbmcgYW5kIG1haW50YWluaW5nIHN0YXRlXG5cdFx0ICogICAgICAgICBhbG9uZyBhIHRpbWVsaW5lLiBBbGwgZXZlbnRzIG11c3QgaGF2ZSBhIFwidGltZVwiIHByb3BlcnR5LlxuXHRcdCAqICAgICAgICAgSW50ZXJuYWxseSwgZXZlbnRzIGFyZSBzdG9yZWQgaW4gdGltZSBvcmRlciBmb3IgZmFzdFxuXHRcdCAqICAgICAgICAgcmV0cmlldmFsLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gW21lbW9yeT1JbmZpbml0eV0gVGhlIG51bWJlciBvZiBwcmV2aW91cyBldmVudHMgdGhhdCBhcmUgcmV0YWluZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnbWVtb3J5J10sIFRvbmUuVGltZWxpbmUpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXJyYXkgb2Ygc2NoZWR1bGVkIHRpbWVsaW5lIGV2ZW50c1xuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1lbW9yeSBvZiB0aGUgdGltZWxpbmUsIGkuZS5cblx0XHRcdCAqICBob3cgbWFueSBldmVudHMgaW4gdGhlIHBhc3QgaXQgd2lsbCByZXRhaW5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1lbW9yeSA9IG9wdGlvbnMubWVtb3J5O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZWxpbmUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUuZGVmYXVsdHMgPSB7ICdtZW1vcnknOiBJbmZpbml0eSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaW1lbGluZSNcblx0XHQgKiAgQG5hbWUgbGVuZ3RoXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGltZWxpbmUucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmUubGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEluc2VydCBhbiBldmVudCBvYmplY3Qgb250byB0aGUgdGltZWxpbmUuIEV2ZW50cyBtdXN0IGhhdmUgYSBcInRpbWVcIiBhdHRyaWJ1dGUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgb2JqZWN0IHRvIGluc2VydCBpbnRvIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAvL3RoZSBldmVudCBuZWVkcyB0byBoYXZlIGEgdGltZSBhdHRyaWJ1dGVcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKGV2ZW50LnRpbWUpKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5UaW1lbGluZTogZXZlbnRzIG11c3QgaGF2ZSBhIHRpbWUgYXR0cmlidXRlJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGV2ZW50LnRpbWUgPSBldmVudC50aW1lLnZhbHVlT2YoKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2goZXZlbnQudGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuc3BsaWNlKGluZGV4ICsgMSwgMCwgZXZlbnQpO1xuXHQgICAgICAgIC8vaWYgdGhlIGxlbmd0aCBpcyBtb3JlIHRoYW4gdGhlIG1lbW9yeSwgcmVtb3ZlIHRoZSBwcmV2aW91cyBvbmVzXG5cdCAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gdGhpcy5tZW1vcnkpIHtcblx0ICAgICAgICAgICAgdmFyIGRpZmYgPSB0aGlzLmxlbmd0aCAtIHRoaXMubWVtb3J5O1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZS5zcGxpY2UoMCwgZGlmZik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgb2JqZWN0IHRvIHJlbW92ZSBmcm9tIHRoZSBsaXN0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fdGltZWxpbmUuaW5kZXhPZihldmVudCk7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZS5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBuZWFyZXN0IGV2ZW50IHdob3NlIHRpbWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGV2ZW50IG9iamVjdCBzZXQgYWZ0ZXIgdGhhdCB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHRpbWUsIGNvbXBhcmF0b3IpIHtcblx0ICAgICAgICBjb21wYXJhdG9yID0gVG9uZS5kZWZhdWx0QXJnKGNvbXBhcmF0b3IsICd0aW1lJyk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUsIGNvbXBhcmF0b3IpO1xuXHQgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4XTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZmlyc3QgZXZlbnQgaW4gdGhlIHRpbWVsaW5lIHdpdGhvdXQgcmVtb3ZpbmcgaXRcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGZpcnN0IGV2ZW50IG9iamVjdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbMF07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZmlyc3QgZXZlbnQgaW4gdGhlIHRpbWVsaW5lIGFuZCByZW1vdmUgaXRcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGZpcnN0IGV2ZW50IG9iamVjdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuc2hpZnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lLnNoaWZ0KCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgZXZlbnQgd2hpY2ggaXMgc2NoZWR1bGVkIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGV2ZW50IG9iamVjdCBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZ2V0QWZ0ZXIgPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSwgY29tcGFyYXRvcik7XG5cdCAgICAgICAgaWYgKGluZGV4ICsgMSA8IHRoaXMuX3RpbWVsaW5lLmxlbmd0aCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXggKyAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgZXZlbnQgYmVmb3JlIHRoZSBldmVudCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGNvbXBhcmF0b3IgV2hpY2ggdmFsdWUgaW4gdGhlIG9iamVjdCB0byBjb21wYXJlXG5cdFx0ICogIEByZXR1cm5zIHtPYmplY3R9IFRoZSBldmVudCBvYmplY3QgYmVmb3JlIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5nZXRCZWZvcmUgPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgbGVuID0gdGhpcy5fdGltZWxpbmUubGVuZ3RoO1xuXHQgICAgICAgIC8vaWYgaXQncyBhZnRlciB0aGUgbGFzdCBpdGVtLCByZXR1cm4gdGhlIGxhc3QgaXRlbVxuXHQgICAgICAgIGlmIChsZW4gPiAwICYmIHRoaXMuX3RpbWVsaW5lW2xlbiAtIDFdW2NvbXBhcmF0b3JdIDwgdGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbbGVuIC0gMV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lLCBjb21wYXJhdG9yKTtcblx0ICAgICAgICBpZiAoaW5kZXggLSAxID49IDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4IC0gMV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgZXZlbnRzIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lLmxlbmd0aCA+IDEpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKGFmdGVyKTtcblx0ICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVtpbmRleF0udGltZSA9PT0gYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL2dldCB0aGUgZmlyc3QgaXRlbSB3aXRoIHRoYXQgdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW2ldLnRpbWUgPT09IGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IHRoaXMuX3RpbWVsaW5lLnNsaWNlKDAsIGluZGV4KTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSB0aGlzLl90aW1lbGluZS5zbGljZSgwLCBpbmRleCArIDEpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBbXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGltZWxpbmUubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgICAgIC8vdGhlIGZpcnN0IGl0ZW0ncyB0aW1lXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVswXS50aW1lID49IGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgZXZlbnRzIGJlZm9yZSBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gY2FuY2VsIGJlZm9yZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmNhbmNlbEJlZm9yZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gdGhpcy5fdGltZWxpbmUuc2xpY2UoaW5kZXggKyAxKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgcHJldmlvdXMgZXZlbnQgaWYgdGhlcmUgaXMgb25lLiBudWxsIG90aGVyd2lzZVxuXHRcdCAqIEBwYXJhbSAge09iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHRvIGZpbmQgdGhlIHByZXZpb3VzIG9uZSBvZlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gICAgICAgVGhlIGV2ZW50IHJpZ2h0IGJlZm9yZSB0aGUgZ2l2ZW4gZXZlbnRcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLnByZXZpb3VzRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl90aW1lbGluZS5pbmRleE9mKGV2ZW50KTtcblx0ICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtpbmRleCAtIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRG9lcyBhIGJpbmFyeSBzZWFyY2ggb24gdGhlIHRpbWVsaW5lIGFycmF5IGFuZCByZXR1cm5zIHRoZVxuXHRcdCAqICBuZWFyZXN0IGV2ZW50IGluZGV4IHdob3NlIHRpbWUgaXMgYWZ0ZXIgb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIElmIGEgdGltZSBpcyBzZWFyY2hlZCBiZWZvcmUgdGhlIGZpcnN0IGluZGV4IGluIHRoZSB0aW1lbGluZSwgLTEgaXMgcmV0dXJuZWQuXG5cdFx0ICogIElmIHRoZSB0aW1lIGlzIGFmdGVyIHRoZSBlbmQsIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBpdGVtIGlzIHJldHVybmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGNvbXBhcmF0b3IgV2hpY2ggdmFsdWUgaW4gdGhlIG9iamVjdCB0byBjb21wYXJlXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9IHRoZSBpbmRleCBpbiB0aGUgdGltZWxpbmUgYXJyYXlcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLl9zZWFyY2ggPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGlmICh0aGlzLl90aW1lbGluZS5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb21wYXJhdG9yID0gVG9uZS5kZWZhdWx0QXJnKGNvbXBhcmF0b3IsICd0aW1lJyk7XG5cdCAgICAgICAgdmFyIGJlZ2lubmluZyA9IDA7XG5cdCAgICAgICAgdmFyIGxlbiA9IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDtcblx0ICAgICAgICB2YXIgZW5kID0gbGVuO1xuXHQgICAgICAgIGlmIChsZW4gPiAwICYmIHRoaXMuX3RpbWVsaW5lW2xlbiAtIDFdW2NvbXBhcmF0b3JdIDw9IHRpbWUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGxlbiAtIDE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHdoaWxlIChiZWdpbm5pbmcgPCBlbmQpIHtcblx0ICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBtaWRwb2ludCBmb3Igcm91Z2hseSBlcXVhbCBwYXJ0aXRpb25cblx0ICAgICAgICAgICAgdmFyIG1pZFBvaW50ID0gTWF0aC5mbG9vcihiZWdpbm5pbmcgKyAoZW5kIC0gYmVnaW5uaW5nKSAvIDIpO1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl90aW1lbGluZVttaWRQb2ludF07XG5cdCAgICAgICAgICAgIHZhciBuZXh0RXZlbnQgPSB0aGlzLl90aW1lbGluZVttaWRQb2ludCArIDFdO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnRbY29tcGFyYXRvcl0gPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIC8vY2hvb3NlIHRoZSBsYXN0IG9uZSB0aGF0IGhhcyB0aGUgc2FtZSB0aW1lXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gbWlkUG9pbnQ7IGkgPCB0aGlzLl90aW1lbGluZS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0ZXN0RXZlbnQgPSB0aGlzLl90aW1lbGluZVtpXTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGVzdEV2ZW50W2NvbXBhcmF0b3JdID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG1pZFBvaW50ID0gaTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbWlkUG9pbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRbY29tcGFyYXRvcl0gPCB0aW1lICYmIG5leHRFdmVudFtjb21wYXJhdG9yXSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBtaWRQb2ludDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFtjb21wYXJhdG9yXSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIC8vc2VhcmNoIGxvd2VyXG5cdCAgICAgICAgICAgICAgICBlbmQgPSBtaWRQb2ludDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vc2VhcmNoIHVwcGVyXG5cdCAgICAgICAgICAgICAgICBiZWdpbm5pbmcgPSBtaWRQb2ludCArIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBpdGVyYXRvci4gQXBwbGllcyBleHRyYSBzYWZldHkgY2hlY2tzIGZvclxuXHRcdCAqICByZW1vdmluZyBpdGVtcyBmcm9tIHRoZSBhcnJheS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFja1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSAgICBsb3dlckJvdW5kXG5cdFx0ICogIEBwYXJhbSAge051bWJlcj19ICAgIHVwcGVyQm91bmRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLl9pdGVyYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBsb3dlckJvdW5kLCB1cHBlckJvdW5kKSB7XG5cdCAgICAgICAgbG93ZXJCb3VuZCA9IFRvbmUuZGVmYXVsdEFyZyhsb3dlckJvdW5kLCAwKTtcblx0ICAgICAgICB1cHBlckJvdW5kID0gVG9uZS5kZWZhdWx0QXJnKHVwcGVyQm91bmQsIHRoaXMuX3RpbWVsaW5lLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNsaWNlKGxvd2VyQm91bmQsIHVwcGVyQm91bmQgKyAxKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXlcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2spO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYXQgb3IgYmVmb3JlIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEJlZm9yZSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciB1cHBlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmICh1cHBlckJvdW5kICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCAwLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hBZnRlciA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciBsb3dlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIGxvd2VyQm91bmQgKyAxKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGJldHdlZW4gdGhlIHN0YXJ0VGltZSBhbmQgZW5kVGltZS4gXG5cdFx0ICogIFRoZSB0aW1lcmFuZ2UgaXMgaW5jbHVzaXZlIG9mIHRoZSBzdGFydFRpbWUsIGJ1dCBleGNsdXNpdmUgb2YgdGhlIGVuZFRpbWUuIFxuXHRcdCAqICByYW5nZSA9IFtzdGFydFRpbWUsIGVuZFRpbWUpLiBcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgc3RhcnRUaW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgZW5kVGltZSBUaGUgZW5kIG9mIHRoZSB0ZXN0IGludGVydmFsLiBcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEJldHdlZW4gPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHZhciBsb3dlckJvdW5kID0gdGhpcy5fc2VhcmNoKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlzLl9zZWFyY2goZW5kVGltZSk7XG5cdCAgICAgICAgaWYgKGxvd2VyQm91bmQgIT09IC0xICYmIHVwcGVyQm91bmQgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVtsb3dlckJvdW5kXS50aW1lICE9PSBzdGFydFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGxvd2VyQm91bmQgKz0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL2V4Y2x1c2l2ZSBvZiB0aGUgZW5kIHRpbWVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW3VwcGVyQm91bmRdLnRpbWUgPT09IGVuZFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIHVwcGVyQm91bmQgLT0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCBsb3dlckJvdW5kLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGxvd2VyQm91bmQgPT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIDAsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGF0IG9yIGFmdGVyIHRoZSBnaXZlbiB0aW1lLiBTaW1pbGFyIHRvXG5cdFx0ICogIGZvckVhY2hBZnRlciwgYnV0IGluY2x1ZGVzIHRoZSBpdGVtKHMpIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEZyb20gPSBmdW5jdGlvbiAodGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL2l0ZXJhdGUgb3ZlciB0aGUgaXRlbXMgaW4gcmV2ZXJzZSBzbyB0aGF0IHJlbW92aW5nIGFuIGl0ZW0gZG9lc24ndCBicmVhayB0aGluZ3Ncblx0ICAgICAgICB2YXIgbG93ZXJCb3VuZCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICAvL3dvcmsgYmFja3dhcmRzIHVudGlsIHRoZSBldmVudCB0aW1lIGlzIGxlc3MgdGhhbiB0aW1lXG5cdCAgICAgICAgd2hpbGUgKGxvd2VyQm91bmQgPj0gMCAmJiB0aGlzLl90aW1lbGluZVtsb3dlckJvdW5kXS50aW1lID49IHRpbWUpIHtcblx0ICAgICAgICAgICAgbG93ZXJCb3VuZC0tO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCBsb3dlckJvdW5kICsgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciB1cHBlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmICh1cHBlckJvdW5kICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRpbWUgPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSwgMCwgdXBwZXJCb3VuZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZWxpbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghd2luZG93Lmhhc093blByb3BlcnR5KCdPZmZsaW5lQXVkaW9Db250ZXh0JykgJiYgd2luZG93Lmhhc093blByb3BlcnR5KCd3ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0JykpIHtcblx0ICAgICAgICAgICAgd2luZG93Lk9mZmxpbmVBdWRpb0NvbnRleHQgPSB3aW5kb3cud2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yZXR1cm5zIHByb21pc2U/XG5cdCAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgT2ZmbGluZUF1ZGlvQ29udGV4dCgxLCAxLCA0NDEwMCk7XG5cdCAgICAgICAgdmFyIHJldCA9IGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTtcblx0ICAgICAgICBpZiAoIShyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuXHQgICAgICAgICAgICBPZmZsaW5lQXVkaW9Db250ZXh0LnByb3RvdHlwZS5fbmF0aXZlX3N0YXJ0UmVuZGVyaW5nID0gT2ZmbGluZUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuc3RhcnRSZW5kZXJpbmc7XG5cdCAgICAgICAgICAgIE9mZmxpbmVBdWRpb0NvbnRleHQucHJvdG90eXBlLnN0YXJ0UmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChkb25lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlLnJlbmRlcmVkQnVmZmVyKTtcblx0ICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX25hdGl2ZV9zdGFydFJlbmRlcmluZygpO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghd2luZG93Lmhhc093blByb3BlcnR5KCdBdWRpb0NvbnRleHQnKSAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3dlYmtpdEF1ZGlvQ29udGV4dCcpKSB7XG5cdCAgICAgICAgICAgIHdpbmRvdy5BdWRpb0NvbnRleHQgPSB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL25vdCBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgYnV0IG9ubHkgYW4gQVBJIHBsYWNlaG9sZGVyXG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNsb3NlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0Z1bmN0aW9uKHRoaXMuc3VzcGVuZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnN1c3BlbmQoKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9ub3QgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnRcblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUucmVzdW1lKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NyZWF0ZUdhaW5cblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2FpbiAmJiBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUdhaW5Ob2RlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2FpbiA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2Fpbk5vZGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY3JlYXRlRGVsYXlcblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlRGVsYXkgJiYgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheU5vZGUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheSA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlRGVsYXlOb2RlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3Rlc3QgZGVjb2RlQXVkaW9EYXRhIHJldHVybnMgYSBwcm9taXNlXG5cdCAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vaGF5b25hby93ZWItYXVkaW8tYXBpLXNoaW0vYmxvYi9tYXN0ZXIvc3JjL0F1ZGlvQ29udGV4dC5qc1xuXHQgICAgICAgIC8vIE1JVCBMaWNlbnNlIChjKSAyMDE1IEBtb2hheW9uYW9cblx0ICAgICAgICB2YXIgZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSA9IGZhbHNlO1xuXHQgICAgICAgIHZhciBvZmZsaW5lQ29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDEsIDEsIDQ0MTAwKTtcblx0ICAgICAgICB2YXIgYXVkaW9EYXRhID0gbmV3IFVpbnQzMkFycmF5KFtcblx0ICAgICAgICAgICAgMTE3OTAxMTQxMCxcblx0ICAgICAgICAgICAgNDgsXG5cdCAgICAgICAgICAgIDExNjMyODA3MjcsXG5cdCAgICAgICAgICAgIDU0NDUwMTA5NCxcblx0ICAgICAgICAgICAgMTYsXG5cdCAgICAgICAgICAgIDEzMTA3Myxcblx0ICAgICAgICAgICAgNDQxMDAsXG5cdCAgICAgICAgICAgIDE3NjQwMCxcblx0ICAgICAgICAgICAgMTA0ODU4MCxcblx0ICAgICAgICAgICAgMTYzNTAxNzA2MCxcblx0ICAgICAgICAgICAgOCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMFxuXHQgICAgICAgIF0pLmJ1ZmZlcjtcblx0ICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICB2YXIgcmV0ID0gb2ZmbGluZUNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKGF1ZGlvRGF0YSk7XG5cdCAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdCAgICAgICAgICAgICAgICBkZWNvZGVBdWRpb0RhdGFQcm9taXNlID0gdHJ1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSA9IGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIWRlY29kZUF1ZGlvRGF0YVByb21pc2UpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5fbmF0aXZlX2RlY29kZUF1ZGlvRGF0YSA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuZGVjb2RlQXVkaW9EYXRhO1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmRlY29kZUF1ZGlvRGF0YSA9IGZ1bmN0aW9uIChhdWRpb0RhdGEpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoc3VjY2VzcywgZXJyb3IpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9uYXRpdmVfZGVjb2RlQXVkaW9EYXRhKGF1ZGlvRGF0YSwgc3VjY2VzcywgZXJyb3IpO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBBdWRpb0NvbnRleHQuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICogIEBwYXJhbSB7QXVkaW9Db250ZXh0PX0gY29udGV4dCBvcHRpb25hbGx5IHBhc3MgaW4gYSBjb250ZXh0XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydjb250ZXh0J10sIFRvbmUuQ29udGV4dCk7XG5cdCAgICAgICAgaWYgKCFvcHRpb25zLmNvbnRleHQpIHtcblx0ICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0ID0gbmV3IHdpbmRvdy5BdWRpb0NvbnRleHQoKTtcblx0ICAgICAgICAgICAgaWYgKCFvcHRpb25zLmNvbnRleHQpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGNyZWF0ZSBBdWRpb0NvbnRleHQuIFBvc3NpYmx5IHRvbyBtYW55IEF1ZGlvQ29udGV4dHMgcnVubmluZyBhbHJlYWR5LicpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2NvbnRleHQgPSBvcHRpb25zLmNvbnRleHQ7XG5cdCAgICAgICAgLy8gZXh0ZW5kIGFsbCBvZiB0aGUgbWV0aG9kc1xuXHQgICAgICAgIGZvciAodmFyIHByb3AgaW4gdGhpcy5fY29udGV4dCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZWZpbmVQcm9wZXJ0eSh0aGlzLl9jb250ZXh0LCBwcm9wKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlZmF1bHQgbGF0ZW5jeSBoaW50XG5cdFx0XHQgKiAgQHR5cGUgIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xhdGVuY3lIaW50ID0gb3B0aW9ucy5sYXRlbmN5SGludDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBvYmplY3QgY29udGFpbmluZyBhbGwgb2YgdGhlIGNvbnN0YW50cyBBdWRpb0J1ZmZlclNvdXJjZU5vZGVzXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IHt9O1xuXHQgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgLy8gV09SS0VSXG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgZXZlbnRzIGFyZSBzY2hlZHVsZWRcblx0XHRcdCAqICBpbnRvIHRoZSBmdXR1cmVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG9va0FoZWFkID0gb3B0aW9ucy5sb29rQWhlYWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSByZWZlcmVuY2UgdG8gdGhlIGFjdHVhbCBjb21wdXRlZCB1cGRhdGUgaW50ZXJ2YWxcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29tcHV0ZWRVcGRhdGVJbnRlcnZhbCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSByZWxpYWJsZSBjYWxsYmFjayBtZXRob2Rcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7VGlja2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGlja2VyID0gbmV3IFRpY2tlcih0aGlzLmVtaXQuYmluZCh0aGlzLCAndGljaycpLCBvcHRpb25zLmNsb2NrU291cmNlLCBvcHRpb25zLnVwZGF0ZUludGVydmFsKTtcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8vIFRJTUVPVVRTXG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIHNldFRpbWVvdXQgZXZlbnRzLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZW91dHMgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0aW1lb3V0IGlkIGNvdW50ZXJcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lb3V0SWRzID0gMDtcblx0ICAgICAgICB0aGlzLm9uKCd0aWNrJywgdGhpcy5fdGltZW91dExvb3AuYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Db250ZXh0LCBUb25lLkVtaXR0ZXIpO1xuXHQgICAgVG9uZS5FbWl0dGVyLm1peGluKFRvbmUuQ29udGV4dCk7XG5cdCAgICAvKipcblx0XHQgKiBkZWZhdWx0c1xuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdjbG9ja1NvdXJjZSc6ICd3b3JrZXInLFxuXHQgICAgICAgICdsYXRlbmN5SGludCc6ICdpbnRlcmFjdGl2ZScsXG5cdCAgICAgICAgJ2xvb2tBaGVhZCc6IDAuMSxcblx0ICAgICAgICAndXBkYXRlSW50ZXJ2YWwnOiAwLjAzXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmluZSBhIHByb3BlcnR5IG9uIHRoaXMgVG9uZS5Db250ZXh0LlxuXHRcdCAqICBUaGlzIGlzIHVzZWQgdG8gZXh0ZW5kIHRoZSBuYXRpdmUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvQ29udGV4dH0gIGNvbnRleHRcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5fZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoY29udGV4dCwgcHJvcCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpc1twcm9wXSkpIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3AsIHtcblx0ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGV4dFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXS5iaW5kKGNvbnRleHQpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjb250ZXh0W3Byb3BdID0gdmFsO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IGF1ZGlvIGNvbnRleHQgdGltZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQuY3VycmVudFRpbWUgKyB0aGlzLmxvb2tBaGVhZDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUHJvbWlzZSB3aGljaCBpcyBpbnZva2VkIHdoZW4gdGhlIGNvbnRleHQgaXMgcnVubmluZy5cblx0XHQgKiAgVHJpZXMgdG8gcmVzdW1lIHRoZSBjb250ZXh0IGlmIGl0J3Mgbm90IHN0YXJ0ZWQuXG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5yZWFkeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGRvbmUpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQuc3RhdGUgPT09ICdydW5uaW5nJykge1xuXHQgICAgICAgICAgICAgICAgZG9uZSgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5yZXN1bWUoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFByb21pc2Ugd2hpY2ggaXMgaW52b2tlZCB3aGVuIHRoZSBjb250ZXh0IGlzIHJ1bm5pbmcuXG5cdFx0ICogIFRyaWVzIHRvIHJlc3VtZSB0aGUgY29udGV4dCBpZiBpdCdzIG5vdCBzdGFydGVkLlxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQuY2xvc2UoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgVG9uZS5Db250ZXh0LmVtaXQoJ2Nsb3NlJywgdGhpcyk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2VuZXJhdGUgYSBsb29wZWQgYnVmZmVyIGF0IHNvbWUgY29uc3RhbnQgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHZhbFxuXHRcdCAqICBAcmV0dXJuICB7QnVmZmVyU291cmNlTm9kZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuZ2V0Q29uc3RhbnQgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2NvbnN0YW50c1t2YWxdKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25zdGFudHNbdmFsXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5fY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgMTI4LCB0aGlzLl9jb250ZXh0LnNhbXBsZVJhdGUpO1xuXHQgICAgICAgICAgICB2YXIgYXJyID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgYXJyW2ldID0gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBjb25zdGFudCA9IHRoaXMuX2NvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LmNoYW5uZWxDb3VudCA9IDE7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgICAgICBjb25zdGFudC5idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgICAgIGNvbnN0YW50Lmxvb3AgPSB0cnVlO1xuXHQgICAgICAgICAgICBjb25zdGFudC5zdGFydCgwKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzW3ZhbF0gPSBjb25zdGFudDtcblx0ICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByaXZhdGUgbG9vcCB3aGljaCBrZWVwcyB0cmFjayBvZiB0aGUgY29udGV4dCBzY2hlZHVsZWQgdGltZW91dHNcblx0XHQgKiAgSXMgaW52b2tlZCBmcm9tIHRoZSBjbG9jayBzb3VyY2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuX3RpbWVvdXRMb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHdoaWxlICh0aGlzLl90aW1lb3V0cyAmJiB0aGlzLl90aW1lb3V0cy5sZW5ndGggJiYgdGhpcy5fdGltZW91dHMucGVlaygpLnRpbWUgPD0gbm93KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRzLnNoaWZ0KCkuY2FsbGJhY2soKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEEgc2V0VGltZW91dCB3aGljaCBpcyBnYXVyZW50ZWVkIGJ5IHRoZSBjbG9jayBzb3VyY2UuXG5cdFx0ICogIEFsc28gcnVucyBpbiB0aGUgb2ZmbGluZSBjb250ZXh0LlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGZuICAgICAgIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHQgKiAgQHBhcmFtICB7U2Vjb25kc30gICAgdGltZW91dCAgVGhlIHRpbWVvdXQgaW4gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfSBJRCB0byB1c2Ugd2hlbiBpbnZva2luZyBUb25lLkNvbnRleHQuY2xlYXJUaW1lb3V0XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAoZm4sIHRpbWVvdXQpIHtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0SWRzKys7XG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dHMuYWRkKHtcblx0ICAgICAgICAgICAgY2FsbGJhY2s6IGZuLFxuXHQgICAgICAgICAgICB0aW1lOiBub3cgKyB0aW1lb3V0LFxuXHQgICAgICAgICAgICBpZDogdGhpcy5fdGltZW91dElkc1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aW1lb3V0SWRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhcnMgYSBwcmV2aW91c2x5IHNjaGVkdWxlZCB0aW1lb3V0IHdpdGggVG9uZS5jb250ZXh0LnNldFRpbWVvdXRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgaWQgIFRoZSBJRCByZXR1cm5lZCBmcm9tIHNldFRpbWVvdXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ29udGV4dH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24gKGlkKSB7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LmlkID09PSBpZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUoZXZlbnQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEhvdyBvZnRlbiB0aGUgV2ViIFdvcmtlciBjYWxsYmFjayBpcyBpbnZva2VkLlxuXHRcdCAqICBUaGlzIG51bWJlciBjb3JyZXNwb25kcyB0byBob3cgcmVzcG9uc2l2ZSB0aGUgc2NoZWR1bGluZ1xuXHRcdCAqICBjYW4gYmUuIENvbnRleHQudXBkYXRlSW50ZXJ2YWwgKyBDb250ZXh0Lmxvb2tBaGVhZCBnaXZlcyB5b3UgdGhlXG5cdFx0ICogIHRvdGFsIGxhdGVuY3kgYmV0d2VlbiBzY2hlZHVsaW5nIGFuIGV2ZW50IGFuZCBoZWFyaW5nIGl0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db250ZXh0I1xuXHRcdCAqICBAbmFtZSB1cGRhdGVJbnRlcnZhbFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udGV4dC5wcm90b3R5cGUsICd1cGRhdGVJbnRlcnZhbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tlci51cGRhdGVJbnRlcnZhbDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlci51cGRhdGVJbnRlcnZhbCA9IGludGVydmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFdoYXQgdGhlIHNvdXJjZSBvZiB0aGUgY2xvY2sgaXMsIGVpdGhlciBcIndvcmtlclwiIChXZWIgV29ya2VyIFtkZWZhdWx0XSksXG5cdFx0ICogIFwidGltZW91dFwiIChzZXRUaW1lb3V0KSwgb3IgXCJvZmZsaW5lXCIgKG5vbmUpLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db250ZXh0I1xuXHRcdCAqICBAbmFtZSBjbG9ja1NvdXJjZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udGV4dC5wcm90b3R5cGUsICdjbG9ja1NvdXJjZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tlci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHR5cGUgb2YgcGxheWJhY2ssIHdoaWNoIGFmZmVjdHMgdHJhZGVvZmZzIGJldHdlZW4gYXVkaW9cblx0XHQgKiAgb3V0cHV0IGxhdGVuY3kgYW5kIHJlc3BvbnNpdmVuZXNzLlxuXHRcdCAqXG5cdFx0ICogIEluIGFkZGl0aW9uIHRvIHNldHRpbmcgdGhlIHZhbHVlIGluIHNlY29uZHMsIHRoZSBsYXRlbmN5SGludCBhbHNvXG5cdFx0ICogIGFjY2VwdHMgdGhlIHN0cmluZ3MgXCJpbnRlcmFjdGl2ZVwiIChwcmlvcml0aXplcyBsb3cgbGF0ZW5jeSksXG5cdFx0ICogIFwicGxheWJhY2tcIiAocHJpb3JpdGl6ZXMgc3VzdGFpbmVkIHBsYXliYWNrKSwgXCJiYWxhbmNlZFwiIChiYWxhbmNlc1xuXHRcdCAqICBsYXRlbmN5IGFuZCBwZXJmb3JtYW5jZSksIGFuZCBcImZhc3Rlc3RcIiAobG93ZXN0IGxhdGVuY3ksIG1pZ2h0IGdsaXRjaCBtb3JlIG9mdGVuKS5cblx0XHQgKiAgQHR5cGUge1N0cmluZ3xTZWNvbmRzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db250ZXh0I1xuXHRcdCAqICBAbmFtZSBsYXRlbmN5SGludFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHRoZSBsb29rQWhlYWQgdG8gMC4zIHNlY29uZHNcblx0XHQgKiBUb25lLmNvbnRleHQubGF0ZW5jeUhpbnQgPSAwLjM7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db250ZXh0LnByb3RvdHlwZSwgJ2xhdGVuY3lIaW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGF0ZW5jeUhpbnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChoaW50KSB7XG5cdCAgICAgICAgICAgIHZhciBsb29rQWhlYWQgPSBoaW50O1xuXHQgICAgICAgICAgICB0aGlzLl9sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzU3RyaW5nKGhpbnQpKSB7XG5cdCAgICAgICAgICAgICAgICBzd2l0Y2ggKGhpbnQpIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2ludGVyYWN0aXZlJzpcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjE7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdwbGF5YmFjayc6XG5cdCAgICAgICAgICAgICAgICAgICAgbG9va0FoZWFkID0gMC44O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubGF0ZW5jeUhpbnQgPSBoaW50O1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnYmFsYW5jZWQnOlxuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuMjU7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdmYXN0ZXN0Jzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gJ2ludGVyYWN0aXZlJztcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjAxO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZUludGVydmFsID0gbG9va0FoZWFkIC8gMztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbmxpa2Ugb3RoZXIgZGlzcG9zZSBtZXRob2RzLCB0aGlzIHJldHVybnMgYSBQcm9taXNlXG5cdFx0ICogIHdoaWNoIGV4ZWN1dGVzIHdoZW4gdGhlIGNvbnRleHQgaXMgY2xvc2VkIGFuZCBkaXNwb3NlZFxuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLmNsb3NlKCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIgPSBudWxsO1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lb3V0cy5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRzID0gbnVsbDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY29uIGluIHRoaXMuX2NvbnN0YW50cykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzW2Nvbl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IG51bGw7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgQSBjbGFzcyB3aGljaCBwcm92aWRlcyBhIHJlbGlhYmxlIGNhbGxiYWNrIHVzaW5nIGVpdGhlclxuXHRcdCAqICAgICAgICBhIFdlYiBXb3JrZXIsIG9yIGlmIHRoYXQgaXNuJ3Qgc3VwcG9ydGVkLCBmYWxscyBiYWNrIHRvIHNldFRpbWVvdXQuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBUaWNrZXIgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHR5cGUsIHVwZGF0ZUludGVydmFsKSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBFaXRoZXIgXCJ3b3JrZXJcIiBvciBcInRpbWVvdXRcIlxuXHRcdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB1cGRhdGUgaW50ZXJ2YWwgb2YgdGhlIHdvcmtlclxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl91cGRhdGVJbnRlcnZhbCA9IHVwZGF0ZUludGVydmFsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGNhbGxiYWNrIHRvIGludm9rZSBhdCByZWd1bGFyIGludGVydmFsc1xuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gVG9uZS5kZWZhdWx0QXJnKGNhbGxiYWNrLCBUb25lLm5vT3ApO1xuXHQgICAgICAgIC8vY3JlYXRlIHRoZSBjbG9jayBzb3VyY2UgZm9yIHRoZSBmaXJzdCB0aW1lXG5cdCAgICAgICAgdGhpcy5fY3JlYXRlQ2xvY2soKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcG9zc2libGUgdGlja2VyIHR5cGVzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLlR5cGUgPSB7XG5cdCAgICAgICAgV29ya2VyOiAnd29ya2VyJyxcblx0ICAgICAgICBUaW1lb3V0OiAndGltZW91dCcsXG5cdCAgICAgICAgT2ZmbGluZTogJ29mZmxpbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdlbmVyYXRlIGEgd2ViIHdvcmtlclxuXHRcdCAqICBAcmV0dXJuICB7V2ViV29ya2VyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fY3JlYXRlV29ya2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vVVJMIFNoaW1cblx0ICAgICAgICB3aW5kb3cuVVJMID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xuXHQgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoWy8vdGhlIGluaXRpYWwgdGltZW91dCB0aW1lXG5cdCAgICAgICAgICAgICd2YXIgdGltZW91dFRpbWUgPSAnICsgKHRoaXMuX3VwZGF0ZUludGVydmFsICogMTAwMCkudG9GaXhlZCgxKSArICc7JyArIC8vb25tZXNzYWdlIGNhbGxiYWNrXG5cdCAgICAgICAgICAgICdzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKG1zZyl7JyArICdcXHR0aW1lb3V0VGltZSA9IHBhcnNlSW50KG1zZy5kYXRhKTsnICsgJ307JyArIC8vdGhlIHRpY2sgZnVuY3Rpb24gd2hpY2ggcG9zdHMgYSBtZXNzYWdlXG5cdCAgICAgICAgICAgIC8vYW5kIHNjaGVkdWxlcyBhIG5ldyB0aWNrXG5cdCAgICAgICAgICAgICdmdW5jdGlvbiB0aWNrKCl7JyArICdcXHRzZXRUaW1lb3V0KHRpY2ssIHRpbWVvdXRUaW1lKTsnICsgJ1xcdHNlbGYucG9zdE1lc3NhZ2UoXFwndGlja1xcJyk7JyArICd9JyArIC8vY2FsbCB0aWNrIGluaXRpYWxseVxuXHQgICAgICAgICAgICAndGljaygpOyddKTtcblx0ICAgICAgICB2YXIgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cdCAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoYmxvYlVybCk7XG5cdCAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd29ya2VyID0gd29ya2VyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENyZWF0ZSBhIHRpbWVvdXQgbG9vcFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9jcmVhdGVUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGltZW91dCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9jYWxsYmFjaygpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5fdXBkYXRlSW50ZXJ2YWwgKiAxMDAwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDcmVhdGUgdGhlIGNsb2NrIHNvdXJjZS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fY3JlYXRlQ2xvY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRpY2tlci5UeXBlLldvcmtlcikge1xuXHQgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlV29ya2VyKCk7XG5cdCAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHdvcmtlcnMgbm90IHN1cHBvcnRlZCwgZmFsbGJhY2sgdG8gdGltZW91dFxuXHQgICAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IFRpY2tlci5UeXBlLlRpbWVvdXQ7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVDbG9jaygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUaWNrZXIuVHlwZS5UaW1lb3V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVRpbWVvdXQoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQG1lbWJlck9mIFRpY2tlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHVwZGF0ZUludGVydmFsXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUaWNrZXIucHJvdG90eXBlLCAndXBkYXRlSW50ZXJ2YWwnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVJbnRlcnZhbDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUludGVydmFsID0gTWF0aC5tYXgoaW50ZXJ2YWwsIDEyOCAvIDQ0MTAwKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRpY2tlci5UeXBlLldvcmtlcikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd29ya2VyLnBvc3RNZXNzYWdlKE1hdGgubWF4KGludGVydmFsICogMTAwMCwgMSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgdGlja2VyLCBlaXRoZXIgYSB3b3JrZXIgb3IgYSB0aW1lb3V0XG5cdFx0ICogQG1lbWJlck9mIFRpY2tlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRpY2tlci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGlzcG9zZUNsb2NrKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9jcmVhdGVDbG9jaygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXAgdGhlIGN1cnJlbnQgY2xvY2sgc291cmNlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuX2Rpc3Bvc2VDbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdGltZW91dCkge1xuXHQgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5fd29ya2VyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3dvcmtlci50ZXJtaW5hdGUoKTtcblx0ICAgICAgICAgICAgdGhpcy5fd29ya2VyLm9ubWVzc2FnZSA9IG51bGw7XG5cdCAgICAgICAgICAgIHRoaXMuX3dvcmtlciA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9kaXNwb3NlQ2xvY2soKTtcblx0ICAgICAgICB0aGlzLl9jYWxsYmFjayA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNoaW0gYWxsIGNvbm5lY3QvZGlzY29ubmVjdCBhbmQgc29tZSBkZXByZWNhdGVkIG1ldGhvZHMgd2hpY2ggYXJlIHN0aWxsIGluXG5cdFx0ICogIHNvbWUgb2xkZXIgaW1wbGVtZW50YXRpb25zLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5nZXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbmF0aXZlQ29ubmVjdCA9IEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdDtcblx0ICAgICAgICB2YXIgbmF0aXZlRGlzY29ubmVjdCA9IEF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdDtcblx0ICAgICAgICAvL3JlcGxhY2UgdGhlIG9sZCBjb25uZWN0IG1ldGhvZFxuXHQgICAgICAgIGZ1bmN0aW9uIHRvbmVDb25uZWN0KEIsIG91dE51bSwgaW5OdW0pIHtcblx0ICAgICAgICAgICAgaWYgKEIuaW5wdXQpIHtcblx0ICAgICAgICAgICAgICAgIGluTnVtID0gVG9uZS5kZWZhdWx0QXJnKGluTnVtLCAwKTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkoQi5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0KEIuaW5wdXRbaW5OdW1dKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdChCLmlucHV0LCBvdXROdW0sIGluTnVtKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKEIgaW5zdGFuY2VvZiBBdWRpb05vZGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlQ29ubmVjdC5jYWxsKHRoaXMsIEIsIG91dE51bSwgaW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQjtcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVDb25uZWN0LmNhbGwodGhpcywgQiwgb3V0TnVtKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEI7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXJyb3IgY29ubmVjdGluZyB0byBub2RlOiAnICsgQiArICdcXG4nICsgZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yZXBsYWNlIHRoZSBvbGQgZGlzY29ubmVjdCBtZXRob2Rcblx0ICAgICAgICBmdW5jdGlvbiB0b25lRGlzY29ubmVjdChCLCBvdXROdW0sIGluTnVtKSB7XG5cdCAgICAgICAgICAgIGlmIChCICYmIEIuaW5wdXQgJiYgVG9uZS5pc0FycmF5KEIuaW5wdXQpKSB7XG5cdCAgICAgICAgICAgICAgICBpbk51bSA9IFRvbmUuZGVmYXVsdEFyZyhpbk51bSwgMCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoQi5pbnB1dFtpbk51bV0sIG91dE51bSwgMCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoQiAmJiBCLmlucHV0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoQi5pbnB1dCwgb3V0TnVtLCBpbk51bSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgICAgIG5hdGl2ZURpc2Nvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Vycm9yIGRpc2Nvbm5lY3Rpbmcgbm9kZTogJyArIEIgKyAnXFxuJyArIGUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3QgIT09IHRvbmVDb25uZWN0KSB7XG5cdCAgICAgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IHRvbmVDb25uZWN0O1xuXHQgICAgICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSB0b25lRGlzY29ubmVjdDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vIHNldCB0aGUgYXVkaW8gY29udGV4dCBpbml0aWFsbHksIGFuZCBpZiBvbmUgaXMgbm90IGFscmVhZHkgY3JlYXRlZFxuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkICYmICFUb25lLmluaXRpYWxpemVkKSB7XG5cdCAgICAgICAgVG9uZS5jb250ZXh0ID0gbmV3IFRvbmUuQ29udGV4dCgpO1xuXHQgICAgICAgIC8vIGxvZyBvbiBmaXJzdCBpbml0aWFsaXphdGlvblxuXHQgICAgICAgIC8vIGFsbG93IG9wdGlvbmFsIHNpbGVuY2luZyBvZiB0aGlzIGxvZ1xuXHQgICAgICAgIGlmICghd2luZG93LlRPTkVfU0lMRU5DRV9WRVJTSU9OX0xPR0dJTkcpIHtcblx0ICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblx0ICAgICAgICAgICAgY29uc29sZS5sb2coJyVjICogVG9uZS5qcyAnICsgVG9uZS52ZXJzaW9uICsgJyAqICcsICdiYWNrZ3JvdW5kOiAjMDAwOyBjb2xvcjogI2ZmZicpO1xuXHQgICAgICAgIH1cblx0ICAgIH0gZWxzZSBpZiAoIVRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblx0ICAgICAgICBjb25zb2xlLndhcm4oJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFRvbmUuanMnKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBUb25lLkNvbnRleHQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BdWRpb05vZGUgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNsYXNzZXMgd2hpY2ggcHJvY2VzcyBhdWRpby5cblx0XHQgKiAgICAgICAgIEF1ZGlvTm9kZXMgaGF2ZSBpbnB1dHMgYW5kIG91dHB1dHMuXG5cdFx0ICogIEBwYXJhbVx0e0F1ZGlvQ29udGV4dD19IGNvbnRleHRcdFRoZSBhdWRpbyBjb250ZXh0IHRvIHVzZSB3aXRoIHRoZSBjbGFzc1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvL3VzZSB0aGUgZGVmYXVsdCBjb250ZXh0IGlmIG9uZSBpcyBub3QgcGFzc2VkIGluXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydjb250ZXh0J10sIHsgJ2NvbnRleHQnOiBUb25lLmNvbnRleHQgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgQXVkaW9Db250ZXh0IG9mIHRoaXMgaW5zdGFuY2Vcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7QXVkaW9Db250ZXh0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG9wdGlvbnMuY29udGV4dDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGF1ZGlvIGNvbnRleHQgYmVsb25naW5nIHRvIHRoaXMgaW5zdGFuY2UuXG5cdFx0ICogQHR5cGUge1RvbmUuQ29udGV4dH1cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogQG5hbWUgY29udGV4dFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NvbnRleHQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENyZWF0ZSBpbnB1dCBhbmQgb3V0cHV0cyBmb3IgdGhpcyBvYmplY3QuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIFtpbnB1dD0wXSAgIFRoZSBudW1iZXIgb2YgaW5wdXRzXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIFtvdXRwdXRzPTBdICBUaGUgbnVtYmVyIG9mIG91dHB1dHNcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQXVkaW9Ob2RlfSAgdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNyZWF0ZUluc091dHMgPSBmdW5jdGlvbiAoaW5wdXRzLCBvdXRwdXRzKSB7XG5cdCAgICAgICAgaWYgKGlucHV0cyA9PT0gMSkge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGlucHV0cyA+IDEpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dCA9IG5ldyBBcnJheShpbnB1dHMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAob3V0cHV0cyA9PT0gMSkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChvdXRwdXRzID4gMSkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBBcnJheShvdXRwdXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYW5uZWxDb3VudCBpcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHVzZWQgd2hlbiB1cC1taXhpbmcgYW5kIGRvd24tbWl4aW5nXG5cdFx0ICogIGNvbm5lY3Rpb25zIHRvIGFueSBpbnB1dHMgdG8gdGhlIG5vZGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIgZXhjZXB0IGZvclxuXHRcdCAqICBzcGVjaWZpYyBub2RlcyB3aGVyZSBpdHMgdmFsdWUgaXMgc3BlY2lhbGx5IGRldGVybWluZWQuXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBjaGFubmVsQ291bnRcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnY2hhbm5lbENvdW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYykge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50ID0gYztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjaGFubmVsQ291bnRNb2RlIGRldGVybWluZXMgaG93IGNoYW5uZWxzIHdpbGwgYmUgY291bnRlZCB3aGVuIHVwLW1peGluZyBhbmRcblx0XHQgKiAgZG93bi1taXhpbmcgY29ubmVjdGlvbnMgdG8gYW55IGlucHV0cyB0byB0aGUgbm9kZS5cblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJtYXhcIi4gVGhpcyBhdHRyaWJ1dGUgaGFzIG5vIGVmZmVjdCBmb3Igbm9kZXMgd2l0aCBubyBpbnB1dHMuXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgY2hhbm5lbENvdW50TW9kZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjaGFubmVsQ291bnRNb2RlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50TW9kZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG0pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxDb3VudE1vZGUgPSBtO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYW5uZWxJbnRlcnByZXRhdGlvbiBkZXRlcm1pbmVzIGhvdyBpbmRpdmlkdWFsIGNoYW5uZWxzIHdpbGwgYmUgdHJlYXRlZFxuXHRcdCAqICB3aGVuIHVwLW1peGluZyBhbmQgZG93bi1taXhpbmcgY29ubmVjdGlvbnMgdG8gYW55IGlucHV0cyB0byB0aGUgbm9kZS5cblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJzcGVha2Vyc1wiLlxuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIGNoYW5uZWxJbnRlcnByZXRhdGlvblxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjaGFubmVsSW50ZXJwcmV0YXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsSW50ZXJwcmV0YXRpb247XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsSW50ZXJwcmV0YXRpb24gPSBpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaW5wdXRzIGZlZWRpbmcgaW50byB0aGUgQXVkaW9Ob2RlLlxuXHRcdCAqICBGb3Igc291cmNlIG5vZGVzLCB0aGlzIHdpbGwgYmUgMC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgbnVtYmVyT2ZJbnB1dHNcblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdudW1iZXJPZklucHV0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5sZW5ndGg7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIG91dHB1dHMgY29taW5nIG91dCBvZiB0aGUgQXVkaW9Ob2RlLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBudW1iZXJPZk91dHB1dHNcblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdudW1iZXJPZk91dHB1dHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQubGVuZ3RoO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDYWxsZWQgd2hlbiBhbiBhdWRpbyBwYXJhbSBjb25uZWN0cyB0byB0aGlzIG5vZGVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLl9vbkNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdGhlIG91dHB1dCBvZiBhIFRvbmVOb2RlIHRvIGFuIEF1ZGlvUGFyYW0sIEF1ZGlvTm9kZSwgb3IgVG9uZU5vZGVcblx0XHQgKiAgQHBhcmFtICB7VG9uZSB8IEF1ZGlvUGFyYW0gfCBBdWRpb05vZGV9IHVuaXRcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBvdXRwdXQgdG8gY29ubmVjdCBmcm9tXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBpbnB1dCB0byBjb25uZWN0IHRvXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAodW5pdCwgb3V0cHV0TnVtLCBpbnB1dE51bSkge1xuXHQgICAgICAgIGlmICh1bml0Ll9vbkNvbm5lY3QpIHtcblx0ICAgICAgICAgICAgdW5pdC5fb25Db25uZWN0KHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICBvdXRwdXROdW0gPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TnVtLCAwKTtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXRbb3V0cHV0TnVtXS5jb25uZWN0KHVuaXQsIDAsIGlucHV0TnVtKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dC5jb25uZWN0KHVuaXQsIG91dHB1dE51bSwgaW5wdXROdW0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZGlzY29ubmVjdCB0aGUgb3V0cHV0XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfEF1ZGlvTm9kZX0gb3V0cHV0IEVpdGhlciB0aGUgb3V0cHV0IGluZGV4IHRvIGRpc2Nvbm5lY3Rcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIG91dHB1dCBpcyBhbiBhcnJheSwgb3IgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgdG8gZGlzY29ubmVjdCBmcm9tLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBvdXRwdXROdW0sIGlucHV0TnVtKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIoZGVzdGluYXRpb24pKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFtkZXN0aW5hdGlvbl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgb3V0cHV0TnVtID0gVG9uZS5kZWZhdWx0QXJnKG91dHB1dE51bSwgMCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFtvdXRwdXROdW1dLmRpc2Nvbm5lY3QoZGVzdGluYXRpb24sIDAsIGlucHV0TnVtKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmRpc2Nvbm5lY3QuYXBwbHkodGhpcy5vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhpcyBub2RlIHRvIHRoZSByZXN0IG9mIHRoZSBub2RlcyBpbiBzZXJpZXMuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vY29ubmVjdCBhIG5vZGUgdG8gYW4gZWZmZWN0LCBwYW5Wb2wgYW5kIHRoZW4gdG8gdGhlIG1hc3RlciBvdXRwdXRcblx0XHQgKiAgbm9kZS5jaGFpbihlZmZlY3QsIHBhblZvbCwgVG9uZS5NYXN0ZXIpO1xuXHRcdCAqICBAcGFyYW0gey4uLkF1ZGlvUGFyYW18VG9uZXxBdWRpb05vZGV9IG5vZGVzXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNoYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBjdXJyZW50VW5pdCA9IHRoaXM7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHRvVW5pdCA9IGFyZ3VtZW50c1tpXTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQuY29ubmVjdCh0b1VuaXQpO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdCA9IHRvVW5pdDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGlzIG5vZGUgdG8gdGhlIHJlc3Qgb2YgdGhlIG5vZGVzIGluIHBhcmFsbGVsLlxuXHRcdCAqICBAcGFyYW0gey4uLkF1ZGlvUGFyYW18VG9uZXxBdWRpb05vZGV9IG5vZGVzXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmZhbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLmNvbm5lY3QoYXJndW1lbnRzW2ldKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgaWYgKHdpbmRvdy5BdWRpb05vZGUpIHtcblx0ICAgICAgICAvL2dpdmUgbmF0aXZlIG5vZGVzIGNoYWluIGFuZCBmYW4gbWV0aG9kc1xuXHQgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuY2hhaW4gPSBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY2hhaW47XG5cdCAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5mYW4gPSBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZmFuO1xuXHQgICAgfVxuXHQgICAgLyoqXG5cdFx0ICogRGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodGhpcy5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQgaW5zdGFuY2VvZiBBdWRpb05vZGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodGhpcy5vdXRwdXQpKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dCBpbnN0YW5jZW9mIEF1ZGlvTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0ID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXVkaW9Ob2RlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJhc2UgY2xhc3MgZm9yIGFsbCBTaWduYWxzLiBVc2VkIEludGVybmFsbHkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWxCYXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TaWduYWxCYXNlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgV2hlbiBzaWduYWxzIGNvbm5lY3QgdG8gb3RoZXIgc2lnbmFscyBvciBBdWRpb1BhcmFtcyxcblx0XHQgKiAgdGhleSB0YWtlIG92ZXIgdGhlIG91dHB1dCB2YWx1ZSBvZiB0aGF0IHNpZ25hbCBvciBBdWRpb1BhcmFtLlxuXHRcdCAqICBGb3IgYWxsIG90aGVyIG5vZGVzLCB0aGUgYmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgYSBkZWZhdWx0IDxjb2RlPmNvbm5lY3Q8L2NvZGU+LlxuXHRcdCAqXG5cdFx0ICogIEBvdmVycmlkZVxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvUGFyYW18QXVkaW9Ob2RlfFRvbmUuU2lnbmFsfFRvbmV9IG5vZGVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW1iZXI9MF0gVGhlIG91dHB1dCBudW1iZXIgdG8gY29ubmVjdCBmcm9tLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2lucHV0TnVtYmVyPTBdIFRoZSBpbnB1dCBudW1iZXIgdG8gY29ubmVjdCB0by5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsQmFzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUsIG91dHB1dE51bWJlciwgaW5wdXROdW1iZXIpIHtcblx0ICAgICAgICAvL3plcm8gaXQgb3V0IHNvIHRoYXQgdGhlIHNpZ25hbCBjYW4gaGF2ZSBmdWxsIGNvbnRyb2xcblx0ICAgICAgICBpZiAoVG9uZS5TaWduYWwgJiYgVG9uZS5TaWduYWwgPT09IG5vZGUuY29uc3RydWN0b3IgfHwgVG9uZS5QYXJhbSAmJiBUb25lLlBhcmFtID09PSBub2RlLmNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIGNoYW5nZXNcblx0ICAgICAgICAgICAgbm9kZS5fcGFyYW0uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKDApO1xuXHQgICAgICAgICAgICAvL3Jlc2V0IHRoZSB2YWx1ZVxuXHQgICAgICAgICAgICBub2RlLl9wYXJhbS52YWx1ZSA9IDA7XG5cdCAgICAgICAgICAgIC8vbWFyayB0aGUgdmFsdWUgYXMgb3ZlcnJpZGRlblxuXHQgICAgICAgICAgICBub2RlLm92ZXJyaWRkZW4gPSB0cnVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcblx0ICAgICAgICAgICAgbm9kZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoMCk7XG5cdCAgICAgICAgICAgIG5vZGUudmFsdWUgPSAwO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdC5jYWxsKHRoaXMsIG5vZGUsIG91dHB1dE51bWJlciwgaW5wdXROdW1iZXIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNpZ25hbEJhc2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIC8vZml4ZXMgc2FmYXJpIG9ubHkgYnVnIHdoaWNoIGlzIHN0aWxsIHByZXNlbnQgaW4gMTFcblx0ICAgICAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG5cdCAgICAgICAgdmFyIGlzU2FmYXJpID0gdWEuaW5jbHVkZXMoJ3NhZmFyaScpICYmICF1YS5pbmNsdWRlcygnY2hyb21lJyk7XG5cdCAgICAgICAgaWYgKGlzU2FmYXJpKSB7XG5cdCAgICAgICAgICAgIHZhciBXYXZlU2hhcGVyTm9kZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbE5vZGUgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBjb250ZXh0Ll9uYXRpdmVfY3JlYXRlV2F2ZVNoYXBlcigpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB0aGlzLl9pbnRlcm5hbE5vZGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZpbmVQcm9wZXJ0eSh0aGlzLl9pbnRlcm5hbE5vZGUsIHByb3ApO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2F2ZVNoYXBlck5vZGUucHJvdG90eXBlLCAnY3VydmUnLCB7XG5cdCAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VydmU7XG5cdCAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoY3VydmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoY3VydmUubGVuZ3RoICsgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgYXJyYXkuc2V0KGN1cnZlLCAxKTtcblx0ICAgICAgICAgICAgICAgICAgICBhcnJheVswXSA9IGN1cnZlWzBdO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTm9kZS5jdXJ2ZSA9IGFycmF5O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgV2F2ZVNoYXBlck5vZGUucHJvdG90eXBlLl9kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChjb250ZXh0LCBwcm9wKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXNbcHJvcF0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3AsIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHRbcHJvcF0gPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXS5iaW5kKGNvbnRleHQpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0W3Byb3BdID0gdmFsO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuX25hdGl2ZV9jcmVhdGVXYXZlU2hhcGVyID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVXYXZlU2hhcGVyO1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVdhdmVTaGFwZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdhdmVTaGFwZXJOb2RlKHRoaXMpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBzIHRoZSBuYXRpdmUgV2ViIEF1ZGlvIEFQSVxuXHRcdCAqICAgICAgICAgW1dhdmVTaGFwZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS13YXZlc2hhcGVybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufEFycmF5fE51bWJlcn0gbWFwcGluZyBUaGUgZnVuY3Rpb24gdXNlZCB0byBkZWZpbmUgdGhlIHZhbHVlcy5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXBwaW5nIGZ1bmN0aW9uIHNob3VsZCB0YWtlIHR3byBhcmd1bWVudHM6XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgaXMgdGhlIHZhbHVlIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHNlY29uZCBpcyB0aGUgYXJyYXkgcG9zaXRpb24uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHRoYXQgYXJyYXkgd2lsbCBiZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGFzIHRoZSB3YXZlIHNoYXBpbmcgZnVuY3Rpb24uIFRoZSBpbnB1dFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGlzIGFuIEF1ZGlvUmFuZ2UgWy0xLCAxXSB2YWx1ZSBhbmQgdGhlIG91dHB1dFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGNhbiB0YWtlIG9uIGFueSBudW1lcmljYWwgdmFsdWVzLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBbYnVmZmVyTGVuPTEwMjRdIFRoZSBsZW5ndGggb2YgdGhlIFdhdmVTaGFwZXJOb2RlIGJ1ZmZlci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdGltZXNUd28gPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uKHZhbCl7XG5cdFx0ICogXHRyZXR1cm4gdmFsICogMjtcblx0XHQgKiB9LCAyMDQ4KTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egd2F2ZXNoYXBlciBjYW4gYWxzbyBiZSBjb25zdHJ1Y3RlZCB3aXRoIGFuIGFycmF5IG9mIHZhbHVlc1xuXHRcdCAqIHZhciBpbnZlcnQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKFsxLCAtMV0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlU2hhcGVyID0gZnVuY3Rpb24gKG1hcHBpbmcsIGJ1ZmZlckxlbikge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB3YXZlc2hhcGVyXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlV2F2ZVNoYXBlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB3YXZlc2hhcGVycyBjdXJ2ZVxuXHRcdFx0ICogIEB0eXBlIHtGbG9hdDMyQXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2N1cnZlID0gbnVsbDtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtYXBwaW5nKSkge1xuXHQgICAgICAgICAgICB0aGlzLmN1cnZlID0gbWFwcGluZztcblx0ICAgICAgICB9IGVsc2UgaWYgKGlzRmluaXRlKG1hcHBpbmcpIHx8IFRvbmUuaXNVbmRlZihtYXBwaW5nKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG5ldyBGbG9hdDMyQXJyYXkoVG9uZS5kZWZhdWx0QXJnKG1hcHBpbmcsIDEwMjQpKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNGdW5jdGlvbihtYXBwaW5nKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG5ldyBGbG9hdDMyQXJyYXkoVG9uZS5kZWZhdWx0QXJnKGJ1ZmZlckxlbiwgMTAyNCkpO1xuXHQgICAgICAgICAgICB0aGlzLnNldE1hcChtYXBwaW5nKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5XYXZlU2hhcGVyLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIFVzZXMgYSBtYXBwaW5nIGZ1bmN0aW9uIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIGN1cnZlLlxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBwaW5nIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGRlZmluZSB0aGUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXBwaW5nIGZ1bmN0aW9uIHRha2UgdHdvIGFyZ3VtZW50czpcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgaXMgdGhlIHZhbHVlIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggZ29lcyBmcm9tIC0xIHRvIDEgb3ZlciB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGN1cnZlIGFycmF5LiBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBhcnJheSBwb3NpdGlvbi5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuV2F2ZVNoYXBlcn0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbWFwIHRoZSBpbnB1dCBzaWduYWwgZnJvbSBbLTEsIDFdIHRvIFswLCAxMF1cblx0XHQgKiBzaGFwZXIuc2V0TWFwKGZ1bmN0aW9uKHZhbCwgaW5kZXgpe1xuXHRcdCAqIFx0cmV0dXJuICh2YWwgKyAxKSAqIDU7XG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUuc2V0TWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcblx0ICAgICAgICB2YXIgYXJyYXkgPSBuZXcgQXJyYXkodGhpcy5fY3VydmUubGVuZ3RoKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5fY3VydmUubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWQgPSBpIC8gKGxlbiAtIDEpICogMiAtIDE7XG5cdCAgICAgICAgICAgIGFycmF5W2ldID0gbWFwcGluZyhub3JtYWxpemVkLCBpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5jdXJ2ZSA9IGFycmF5O1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhcnJheSB0byBzZXQgYXMgdGhlIHdhdmVzaGFwZXIgY3VydmUuIEZvciBsaW5lYXIgY3VydmVzXG5cdFx0ICogYXJyYXkgbGVuZ3RoIGRvZXMgbm90IG1ha2UgbXVjaCBkaWZmZXJlbmNlLCBidXQgZm9yIGNvbXBsZXggY3VydmVzXG5cdFx0ICogbG9uZ2VyIGFycmF5cyB3aWxsIHByb3ZpZGUgc21vb3RoZXIgaW50ZXJwb2xhdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5XYXZlU2hhcGVyI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBjdXJ2ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUsICdjdXJ2ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5jdXJ2ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1hcHBpbmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBuZXcgRmxvYXQzMkFycmF5KG1hcHBpbmcpO1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIuY3VydmUgPSB0aGlzLl9jdXJ2ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFNwZWNpZmllcyB3aGF0IHR5cGUgb2Ygb3ZlcnNhbXBsaW5nIChpZiBhbnkpIHNob3VsZCBiZSB1c2VkIHdoZW5cblx0XHQgKiBhcHBseWluZyB0aGUgc2hhcGluZyBjdXJ2ZS4gQ2FuIGVpdGhlciBiZSBcIm5vbmVcIiwgXCIyeFwiIG9yIFwiNHhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5XYXZlU2hhcGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgb3ZlcnNhbXBsZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUsICdvdmVyc2FtcGxlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvdmVyc2FtcGxpbmcpIHtcblx0ICAgICAgICAgICAgaWYgKFtcblx0ICAgICAgICAgICAgICAgICAgICAnbm9uZScsXG5cdCAgICAgICAgICAgICAgICAgICAgJzJ4Jyxcblx0ICAgICAgICAgICAgICAgICAgICAnNHgnXG5cdCAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKG92ZXJzYW1wbGluZykpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlID0gb3ZlcnNhbXBsaW5nO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RvbmUuV2F2ZVNoYXBlcjogb3ZlcnNhbXBsaW5nIG11c3QgYmUgZWl0aGVyIFxcJ25vbmVcXCcsIFxcJzJ4XFwnLCBvciBcXCc0eFxcJycpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLldhdmVTaGFwZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLldhdmVTaGFwZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UaW1lQmFzZSBpcyBhIGZsZXhpYmxlIGVuY29kaW5nIG9mIHRpbWVcblx0XHQgKiAgICAgICAgIHdoaWNoIGNhbiBiZSBldmFsdWF0ZWQgdG8gYW5kIGZyb20gYSBzdHJpbmcuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlIGFzIGEgbnVtYmVyIG9yIHN0cmluZ1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFVuaXQgdmFsdWVzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UaW1lQmFzZSg0LCBcIm5cIilcblx0XHQgKiBUb25lLlRpbWVCYXNlKDIsIFwidFwiKVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoXCIydFwiKVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoXCIydFwiKSArIFRvbmUuVGltZUJhc2UoXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIC8vYWxsb3dzIGl0IHRvIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCAnbmV3J1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSB2YWx1ZVxuXHRcdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ8U3RyaW5nfFRvbmUuVGltZUJhc2V9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIHVuaXRzXG5cdFx0XHRcdCAqIEB0eXBlIHtTdHJpbmc/fVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB1bml0cztcblx0ICAgICAgICAgICAgLy90ZXN0IGlmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG51bWJlclxuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXMuX3VuaXRzKSAmJiBUb25lLmlzU3RyaW5nKHRoaXMuX3ZhbCkgJiYgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHQgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0aGlzLl92YWwpID09IHRoaXMuX3ZhbCAmJiB0aGlzLl92YWwuY2hhckF0KDApICE9PSAnKycpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHBhcnNlRmxvYXQodGhpcy5fdmFsKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdGhpcy5fZGVmYXVsdFVuaXRzO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbCAmJiB2YWwuY29uc3RydWN0b3IgPT09IHRoaXMuY29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgICAgIC8vaWYgdGhleSdyZSB0aGUgc2FtZSB0eXBlLCBqdXN0IGNvcHkgdmFsdWVzIG92ZXJcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC5fdmFsO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB2YWwuX3VuaXRzO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fZGVmYXVsdFVuaXRzKSB7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdzJzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdpJzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9UaWNrcygpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnaHonOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnbWlkaSc6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLnRvTWlkaSgpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBkZWZhdWx0IHVuaXRzICcgKyB0aGlzLl9kZWZhdWx0VW5pdHMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWVCYXNlKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpbWVCYXNlKTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFCU1RSQUNUIFNZTlRBWCBUUkVFIFBBUlNFUlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQWxsIHRoZSBwcmltYXJ5IGV4cHJlc3Npb25zLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9leHByZXNzaW9ucyA9IHtcblx0ICAgICAgICAnbic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKW4oXFwuPykkL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlLCBkb3QpIHtcblx0ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNjYWxhciA9IGRvdCA9PT0gJy4nID8gMS41IDogMTtcblx0ICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHModGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpKSAqIHNjYWxhcjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyg0IC8gdmFsdWUpICogc2NhbGFyO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndCc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKXQkL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHMoOCAvIChwYXJzZUludCh2YWx1ZSkgKiAzKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdtJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspbSQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VJbnQodmFsdWUpICogdGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2knOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKylpJC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tzVG9Vbml0cyhwYXJzZUludCh2YWx1ZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnaHonOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPyloeiQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmVxdWVuY3lUb1VuaXRzKHBhcnNlRmxvYXQodmFsdWUpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3RyJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT8pOihcXGQrKD86XFwuXFxkKyk/KTo/KFxcZCsoPzpcXC5cXGQrKT8pPyQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChtLCBxLCBzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xuXHQgICAgICAgICAgICAgICAgaWYgKG0gJiYgbSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5fYmVhdHNUb1VuaXRzKHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSAqIHBhcnNlRmxvYXQobSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHEgJiYgcSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHMgJiYgcyAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocykgLyA0KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3MnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPylzJC8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2Vjb25kc1RvVW5pdHMocGFyc2VGbG9hdCh2YWx1ZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnc2FtcGxlcyc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKXNhbXBsZXMkLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSkgLyB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2RlZmF1bHQnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPykkLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHByZXNzaW9uc1t0aGlzLl9kZWZhdWx0VW5pdHNdLm1ldGhvZC5jYWxsKHRoaXMsIHZhbHVlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZGVmYXVsdFVuaXRzID0gJ3MnO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VFJBTlNQT1JUIEZBTExCQUNLU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGJwbSwgb3IgMTIwIGlmIFRyYW5zcG9ydCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2dldEJwbSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gMTIwO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIHRpbWVTaWduYXR1cmUgb3IgNCBpZiBUcmFuc3BvcnQgaXMgbm90IGF2YWlsYWJsZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9nZXRUaW1lU2lnbmF0dXJlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gNDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSBQUFEgb3IgMTkyIGlmIFRyYW5zcG9ydCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2dldFBQUSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LlBQUTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gMTkyO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiB3aGljaGV2ZXIgY29udGV4dCBpcyByZWxldmFudFxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMubm93KCk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VU5JVCBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBmcmVxdWVuY3kgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIGZyZXE7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiA2MCAvIHRoaXMuX2dldEJwbSgpICogYmVhdHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gc2Vjb25kcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gdGlja3MgKiAodGhpcy5fYmVhdHNUb1VuaXRzKDEpIC8gdGhpcy5fZ2V0UFBRKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFdpdGggbm8gYXJndW1lbnRzLCByZXR1cm4gJ25vdydcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9ub0FyZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fbm93KCk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RVhQUkVTU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEV2YWx1YXRlIHRoZSB0aW1lIHZhbHVlLiBSZXR1cm5zIHRoZSB0aW1lXG5cdFx0ICogIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXMuX3ZhbCkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vQXJnKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHRoaXMuX3ZhbCkgJiYgVG9uZS5pc1VuZGVmKHRoaXMuX3VuaXRzKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciB1bml0cyBpbiB0aGlzLl9leHByZXNzaW9ucykge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25zW3VuaXRzXS5yZWdleHAudGVzdCh0aGlzLl92YWwudHJpbSgpKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdW5pdHM7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKHRoaXMuX3VuaXRzKSkge1xuXHQgICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMuX2V4cHJlc3Npb25zW3RoaXMuX3VuaXRzXTtcblx0ICAgICAgICAgICAgdmFyIG1hdGNoaW5nID0gdGhpcy5fdmFsLnRvU3RyaW5nKCkudHJpbSgpLm1hdGNoKGV4cHIucmVnZXhwKTtcblx0ICAgICAgICAgICAgaWYgKG1hdGNoaW5nKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXhwci5tZXRob2QuYXBwbHkodGhpcywgbWF0Y2hpbmcuc2xpY2UoMSkpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGV4cHIubWV0aG9kLmNhbGwodGhpcywgcGFyc2VGbG9hdCh0aGlzLl92YWwpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIGluIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgaW4gaGVydHpcblx0XHQgKiAgQHJldHVybiB7RnJlcXVlbmN5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9GcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyB0aGlzLnRvU2Vjb25kcygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gc2FtcGxlc1xuXHRcdCAqICBAcmV0dXJuICB7U2FtcGxlc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvU2FtcGxlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHMoKSAqIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7TWlsbGlzZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9NaWxsaXNlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudG9TZWNvbmRzKCkgKiAxMDAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlRpbWVCYXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3ZhbCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdW5pdHMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWVCYXNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRnJlcXVlbmN5IGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIEZyZXF1ZW5jeSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBFdmVudHVhbGx5IGFsbCB0aW1lIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHRvIGhlcnR6XG5cdFx0ICogICAgICAgICB1c2luZyB0aGUgYGV2YWxgIG1ldGhvZC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWVCYXNlfVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJDM1wiKSAvLyAyNjFcblx0XHQgKiBUb25lLkZyZXF1ZW5jeSgzOCwgXCJtaWRpXCIpIC8vXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJDM1wiKS50cmFuc3Bvc2UoNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLkZyZXF1ZW5jeSkge1xuXHQgICAgICAgICAgICBUb25lLlRpbWVCYXNlLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLkZyZXF1ZW5jeSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GcmVxdWVuY3ksIFRvbmUuVGltZUJhc2UpO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVVHTUVOVCBCQVNFIEVYUFJFU1NJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fZXhwcmVzc2lvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMsIHtcblx0ICAgICAgICAnbWlkaSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/bWlkaSkvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRVbml0cyA9PT0gJ21pZGknKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kubXRvZih2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdub3RlJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFthLWddezF9KD86YnwjfHh8YmIpPykoLT9bMC05XSspL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHBpdGNoLCBvY3RhdmUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IG5vdGVUb1NjYWxlSW5kZXhbcGl0Y2gudG9Mb3dlckNhc2UoKV07XG5cdCAgICAgICAgICAgICAgICB2YXIgbm90ZU51bWJlciA9IGluZGV4ICsgKHBhcnNlSW50KG9jdGF2ZSkgKyAxKSAqIDEyO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRVbml0cyA9PT0gJ21pZGknKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vdGVOdW1iZXI7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5tdG9mKG5vdGVOdW1iZXIpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndHInOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPyk6KFxcZCsoPzpcXC5cXGQrKT8pOj8oXFxkKyg/OlxcLlxcZCspPyk/Lyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAobSwgcSwgcykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHRvdGFsID0gMTtcblx0ICAgICAgICAgICAgICAgIGlmIChtICYmIG0gIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICo9IHRoaXMuX2JlYXRzVG9Vbml0cyh0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkgKiBwYXJzZUZsb2F0KG0pKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChxICYmIHEgIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICo9IHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUZsb2F0KHEpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChzICYmIHMgIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICo9IHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUZsb2F0KHMpIC8gNCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEVYUFJFU1NJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUcmFuc3Bvc2VzIHRoZSBmcmVxdWVuY3kgYnkgdGhlIGdpdmVuIG51bWJlciBvZiBzZW1pdG9uZXMuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsfSAgaW50ZXJ2YWxcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRnJlcXVlbmN5fSBBIG5ldyB0cmFuc3Bvc2VkIGZyZXF1ZW5jeVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQTRcIikudHJhbnNwb3NlKDMpOyAvL1wiQzVcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRyYW5zcG9zZSA9IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnZhbHVlT2YoKSAqIFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGludGVydmFsKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRha2VzIGFuIGFycmF5IG9mIHNlbWl0b25lIGludGVydmFscyBhbmQgcmV0dXJuc1xuXHRcdCAqICBhbiBhcnJheSBvZiBmcmVxdWVuY2llcyB0cmFuc3Bvc2VkIGJ5IHRob3NlIGludGVydmFscy5cblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICBpbnRlcnZhbHNcblx0XHQgKiAgQHJldHVybiAge0FycmF5PFRvbmUuRnJlcXVlbmN5Pn0gUmV0dXJucyBhbiBhcnJheSBvZiBGcmVxdWVuY2llc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQTRcIikuaGFybW9uaXplKFswLCAzLCA3XSk7IC8vW1wiQTRcIiwgXCJDNVwiLCBcIkU1XCJdXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuaGFybW9uaXplID0gZnVuY3Rpb24gKGludGVydmFscykge1xuXHQgICAgICAgIHJldHVybiBpbnRlcnZhbHMubWFwKGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc3Bvc2UoaW50ZXJ2YWwpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VU5JVCBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IGFzIGEgTUlESSBub3RlXG5cdFx0ICogIEByZXR1cm4gIHtNSURJfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQzRcIikudG9NaWRpKCk7IC8vNjBcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b01pZGkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20odGhpcy52YWx1ZU9mKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgaW4gU2NpZW50aWZpYyBQaXRjaCBOb3RhdGlvblxuXHRcdCAqICBAcmV0dXJuICB7Tm90ZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeSg2OSwgXCJtaWRpXCIpLnRvTm90ZSgpOyAvL1wiQTRcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvTm90ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgZnJlcSA9IHRoaXMudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICB2YXIgbG9nID0gTWF0aC5sb2cyKGZyZXEgLyBUb25lLkZyZXF1ZW5jeS5BNCk7XG5cdCAgICAgICAgdmFyIG5vdGVOdW1iZXIgPSBNYXRoLnJvdW5kKDEyICogbG9nKSArIDU3O1xuXHQgICAgICAgIHZhciBvY3RhdmUgPSBNYXRoLmZsb29yKG5vdGVOdW1iZXIgLyAxMik7XG5cdCAgICAgICAgaWYgKG9jdGF2ZSA8IDApIHtcblx0ICAgICAgICAgICAgbm90ZU51bWJlciArPSAtMTIgKiBvY3RhdmU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBub3RlTmFtZSA9IHNjYWxlSW5kZXhUb05vdGVbbm90ZU51bWJlciAlIDEyXTtcblx0ICAgICAgICByZXR1cm4gbm90ZU5hbWUgKyBvY3RhdmUudG9TdHJpbmcoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBkdXJhdGlvbiBvZiBvbmUgY3ljbGUgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAxIC8gVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9TZWNvbmRzLmNhbGwodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgaW4gSGVydHpcblx0XHQgKiAgQHJldHVybiAge0ZyZXF1ZW5jeX1cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9GcmVxdWVuY3kuY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBkdXJhdGlvbiBvZiBvbmUgY3ljbGUgaW4gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJUaW1lID0gdGhpcy5fYmVhdHNUb1VuaXRzKDEpO1xuXHQgICAgICAgIHZhciBxdWFydGVycyA9IHRoaXMudmFsdWVPZigpIC8gcXVhcnRlclRpbWU7XG5cdCAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IocXVhcnRlcnMgKiBUb25lLlRyYW5zcG9ydC5QUFEpO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFVOSVQgQ09OVkVSU0lPTlMgSEVMUEVSU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiAwXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX25vQXJnID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIGZyZXF1ZW5jeSBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gZnJlcTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fdGlja3NUb1VuaXRzID0gZnVuY3Rpb24gKHRpY2tzKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyAodGlja3MgKiA2MCAvIChUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgKiBUb25lLlRyYW5zcG9ydC5QUFEpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiAxIC8gVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cy5jYWxsKHRoaXMsIGJlYXRzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzZWNvbmQgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtTZWNvbmRzfSBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIHNlY29uZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAnaHonO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RlJFUVVFTkNZIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBOb3RlIHRvIHNjYWxlIGluZGV4XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgdmFyIG5vdGVUb1NjYWxlSW5kZXggPSB7XG5cdCAgICAgICAgJ2NiYic6IC0yLFxuXHQgICAgICAgICdjYic6IC0xLFxuXHQgICAgICAgICdjJzogMCxcblx0ICAgICAgICAnYyMnOiAxLFxuXHQgICAgICAgICdjeCc6IDIsXG5cdCAgICAgICAgJ2RiYic6IDAsXG5cdCAgICAgICAgJ2RiJzogMSxcblx0ICAgICAgICAnZCc6IDIsXG5cdCAgICAgICAgJ2QjJzogMyxcblx0ICAgICAgICAnZHgnOiA0LFxuXHQgICAgICAgICdlYmInOiAyLFxuXHQgICAgICAgICdlYic6IDMsXG5cdCAgICAgICAgJ2UnOiA0LFxuXHQgICAgICAgICdlIyc6IDUsXG5cdCAgICAgICAgJ2V4JzogNixcblx0ICAgICAgICAnZmJiJzogMyxcblx0ICAgICAgICAnZmInOiA0LFxuXHQgICAgICAgICdmJzogNSxcblx0ICAgICAgICAnZiMnOiA2LFxuXHQgICAgICAgICdmeCc6IDcsXG5cdCAgICAgICAgJ2diYic6IDUsXG5cdCAgICAgICAgJ2diJzogNixcblx0ICAgICAgICAnZyc6IDcsXG5cdCAgICAgICAgJ2cjJzogOCxcblx0ICAgICAgICAnZ3gnOiA5LFxuXHQgICAgICAgICdhYmInOiA3LFxuXHQgICAgICAgICdhYic6IDgsXG5cdCAgICAgICAgJ2EnOiA5LFxuXHQgICAgICAgICdhIyc6IDEwLFxuXHQgICAgICAgICdheCc6IDExLFxuXHQgICAgICAgICdiYmInOiA5LFxuXHQgICAgICAgICdiYic6IDEwLFxuXHQgICAgICAgICdiJzogMTEsXG5cdCAgICAgICAgJ2IjJzogMTIsXG5cdCAgICAgICAgJ2J4JzogMTNcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc2NhbGUgaW5kZXggdG8gbm90ZSAoc2hhcnBzKVxuXHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIHNjYWxlSW5kZXhUb05vdGUgPSBbXG5cdCAgICAgICAgJ0MnLFxuXHQgICAgICAgICdDIycsXG5cdCAgICAgICAgJ0QnLFxuXHQgICAgICAgICdEIycsXG5cdCAgICAgICAgJ0UnLFxuXHQgICAgICAgICdGJyxcblx0ICAgICAgICAnRiMnLFxuXHQgICAgICAgICdHJyxcblx0ICAgICAgICAnRyMnLFxuXHQgICAgICAgICdBJyxcblx0ICAgICAgICAnQSMnLFxuXHQgICAgICAgICdCJ1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgW2NvbmNlcnQgcGl0Y2hdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbmNlcnRfcGl0Y2gpXG5cdFx0ICogIEE0J3MgdmFsdWVzIGluIEhlcnR6LlxuXHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5BNCA9IDQ0MDtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgTUlESSBub3RlIHRvIGZyZXF1ZW5jeSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7TUlESX0gbWlkaSBUaGUgbWlkaSBudW1iZXIgdG8gY29udmVydC5cblx0XHQgKiAgQHJldHVybiB7RnJlcXVlbmN5fSB0aGUgY29ycmVzcG9uZGluZyBmcmVxdWVuY3kgdmFsdWVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5Lm10b2YoNjkpOyAvLyByZXR1cm5zIDQ0MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kubXRvZiA9IGZ1bmN0aW9uIChtaWRpKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LkE0ICogTWF0aC5wb3coMiwgKG1pZGkgLSA2OSkgLyAxMik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBmcmVxdWVuY3kgdmFsdWUgdG8gYSBNSURJIG5vdGUuXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHZhbHVlIHRvIGZyZXF1ZW5jeSB2YWx1ZSB0byBjb252ZXJ0LlxuXHRcdCAqICBAcmV0dXJucyAge01JREl9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeS5mdG9tKDQ0MCk7IC8vIHJldHVybnMgNjlcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LmZ0b20gPSBmdW5jdGlvbiAoZnJlcXVlbmN5KSB7XG5cdCAgICAgICAgcmV0dXJuIDY5ICsgTWF0aC5yb3VuZCgxMiAqIE1hdGgubG9nMihmcmVxdWVuY3kgLyBUb25lLkZyZXF1ZW5jeS5BNCkpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRpbWUgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgVGltZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBUb25lLlRpbWUgY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCB0aGUgYG5ld2Aga2V5d29yZC4gVG9uZS5UaW1lIGNhbiBiZSBwYXNzZWRcblx0XHQgKiAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBvZiBhbnkgbWV0aG9kIHdoaWNoIHRha2VzIHRpbWUgYXMgYW4gYXJndW1lbnQuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UaW1lQmFzZX1cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIHZhbCAgICBUaGUgdGltZSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nPX0gIHVuaXRzICBUaGUgdW5pdHMgb2YgdGhlIHZhbHVlLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB0ID0gVG9uZS5UaW1lKFwiNG5cIik7Ly9hIHF1YXJ0ZXIgbm90ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuVGltZSkge1xuXHQgICAgICAgICAgICBUb25lLlRpbWVCYXNlLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWUodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZSwgVG9uZS5UaW1lQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBFeHRlbmQgdGhlIGJhc2UgZXhwcmVzc2lvbnNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zID0gT2JqZWN0LmFzc2lnbih7fSwgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zLCB7XG5cdCAgICAgICAgJ3F1YW50aXplJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eQCguKykvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChjYXB0dXJlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRUbyA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGNhcHR1cmUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC5uZXh0U3ViZGl2aXNpb24ocXVhbnRUbyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbm93Jzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eXFwrKC4rKS8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKGNhcHR1cmUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3coKSArIG5ldyB0aGlzLmNvbnN0cnVjdG9yKGNhcHR1cmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUXVhbnRpemUgdGhlIHRpbWUgYnkgdGhlIGdpdmVuIHN1YmRpdmlzaW9uLiBPcHRpb25hbGx5IGFkZCBhXG5cdFx0ICogIHBlcmNlbnRhZ2Ugd2hpY2ggd2lsbCBtb3ZlIHRoZSB0aW1lIHZhbHVlIHRvd2FyZHMgdGhlIGlkZWFsXG5cdFx0ICogIHF1YW50aXplZCB2YWx1ZSBieSB0aGF0IHBlcmNlbnRhZ2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcnxUaW1lfSAgdmFsICAgIFRoZSBzdWJkaXZpc2lvbiB0byBxdWFudGl6ZSB0b1xuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIFtwZXJjZW50PTFdICBNb3ZlIHRoZSB0aW1lIHZhbHVlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvd2FyZHMgdGhlIHF1YW50aXplZCB2YWx1ZSBieVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHBlcmNlbnRhZ2UuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UaW1lKDIxKS5xdWFudGl6ZSgyKSAvL3JldHVybnMgMjJcblx0XHQgKiBUb25lLlRpbWUoMC42KS5xdWFudGl6ZShcIjRuXCIsIDAuNSkgLy9yZXR1cm5zIDAuNTVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUucXVhbnRpemUgPSBmdW5jdGlvbiAoc3ViZGl2LCBwZXJjZW50KSB7XG5cdCAgICAgICAgcGVyY2VudCA9IFRvbmUuZGVmYXVsdEFyZyhwZXJjZW50LCAxKTtcblx0ICAgICAgICB2YXIgc3ViZGl2aXNpb24gPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihzdWJkaXYpO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWVPZigpO1xuXHQgICAgICAgIHZhciBtdWx0aXBsZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdWJkaXZpc2lvbik7XG5cdCAgICAgICAgdmFyIGlkZWFsID0gbXVsdGlwbGUgKiBzdWJkaXZpc2lvbjtcblx0ICAgICAgICB2YXIgZGlmZiA9IGlkZWFsIC0gdmFsdWU7XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlICsgZGlmZiAqIHBlcmNlbnQ7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIFRpbWUgdG8gTm90YXRpb24uIFRoZSBub3RhdGlvbiB2YWx1ZXMgYXJlIHdpbGwgYmUgdGhlXG5cdFx0ICogIGNsb3Nlc3QgcmVwcmVzZW50YXRpb24gYmV0d2VlbiAxbSB0byAxMjh0aCBub3RlLlxuXHRcdCAqICBAcmV0dXJuIHtOb3RhdGlvbn1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2lmIHRoZSBUcmFuc3BvcnQgaXMgYXQgMTIwYnBtOlxuXHRcdCAqIFRvbmUuVGltZSgyKS50b05vdGF0aW9uKCk7Ly9yZXR1cm5zIFwiMW1cIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b05vdGF0aW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciB0aW1lID0gdGhpcy50b1NlY29uZHMoKTtcblx0ICAgICAgICB2YXIgdGVzdE5vdGF0aW9ucyA9IFsnMW0nXTtcblx0ICAgICAgICBmb3IgKHZhciBwb3dlciA9IDE7IHBvd2VyIDwgODsgcG93ZXIrKykge1xuXHQgICAgICAgICAgICB2YXIgc3ViZGl2ID0gTWF0aC5wb3coMiwgcG93ZXIpO1xuXHQgICAgICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goc3ViZGl2ICsgJ24uJyk7XG5cdCAgICAgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaChzdWJkaXYgKyAnbicpO1xuXHQgICAgICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goc3ViZGl2ICsgJ3QnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGVzdE5vdGF0aW9ucy5wdXNoKCcwJyk7XG5cdCAgICAgICAgLy9maW5kIHRoZSBjbG9zZXRzIG5vdGF0aW9uIHJlcHJlc2VudGF0aW9uXG5cdCAgICAgICAgdmFyIGNsb3Nlc3QgPSB0ZXN0Tm90YXRpb25zWzBdO1xuXHQgICAgICAgIHZhciBjbG9zZXN0U2Vjb25kcyA9IFRvbmUuVGltZSh0ZXN0Tm90YXRpb25zWzBdKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB0ZXN0Tm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG5vdGF0aW9uKSB7XG5cdCAgICAgICAgICAgIHZhciBub3RhdGlvblNlY29uZHMgPSBUb25lLlRpbWUobm90YXRpb24pLnRvU2Vjb25kcygpO1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnMobm90YXRpb25TZWNvbmRzIC0gdGltZSkgPCBNYXRoLmFicyhjbG9zZXN0U2Vjb25kcyAtIHRpbWUpKSB7XG5cdCAgICAgICAgICAgICAgICBjbG9zZXN0ID0gbm90YXRpb247XG5cdCAgICAgICAgICAgICAgICBjbG9zZXN0U2Vjb25kcyA9IG5vdGF0aW9uU2Vjb25kcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiBjbG9zZXN0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgZW5jb2RlZCBhcyBCYXJzOkJlYXRzOlNpeHRlZW50aHMuXG5cdFx0ICogIEByZXR1cm4gIHtCYXJzQmVhdHNTaXh0ZWVudGhzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b0JhcnNCZWF0c1NpeHRlZW50aHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJUaW1lID0gdGhpcy5fYmVhdHNUb1VuaXRzKDEpO1xuXHQgICAgICAgIHZhciBxdWFydGVycyA9IHRoaXMudmFsdWVPZigpIC8gcXVhcnRlclRpbWU7XG5cdCAgICAgICAgdmFyIG1lYXN1cmVzID0gTWF0aC5mbG9vcihxdWFydGVycyAvIHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSk7XG5cdCAgICAgICAgdmFyIHNpeHRlZW50aHMgPSBxdWFydGVycyAlIDEgKiA0O1xuXHQgICAgICAgIHF1YXJ0ZXJzID0gTWF0aC5mbG9vcihxdWFydGVycykgJSB0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCk7XG5cdCAgICAgICAgc2l4dGVlbnRocyA9IHNpeHRlZW50aHMudG9TdHJpbmcoKTtcblx0ICAgICAgICBpZiAoc2l4dGVlbnRocy5sZW5ndGggPiAzKSB7XG5cdCAgICAgICAgICAgIC8vIHRoZSBhZGRpdGlvbmFsIHBhcnNlRmxvYXQgcmVtb3ZlcyBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9lc1xuXHQgICAgICAgICAgICBzaXh0ZWVudGhzID0gcGFyc2VGbG9hdChwYXJzZUZsb2F0KHNpeHRlZW50aHMpLnRvRml4ZWQoMykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcHJvZ3Jlc3MgPSBbXG5cdCAgICAgICAgICAgIG1lYXN1cmVzLFxuXHQgICAgICAgICAgICBxdWFydGVycyxcblx0ICAgICAgICAgICAgc2l4dGVlbnRoc1xuXHQgICAgICAgIF07XG5cdCAgICAgICAgcmV0dXJuIHByb2dyZXNzLmpvaW4oJzonKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHRpY2tzLlxuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJUaW1lID0gdGhpcy5fYmVhdHNUb1VuaXRzKDEpO1xuXHQgICAgICAgIHZhciBxdWFydGVycyA9IHRoaXMudmFsdWVPZigpIC8gcXVhcnRlclRpbWU7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQocXVhcnRlcnMgKiB0aGlzLl9nZXRQUFEoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBhcyBhIG1pZGkgbm90ZS5cblx0XHQgKiAgQHJldHVybiAge01pZGl9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvTWlkaSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbSh0aGlzLnRvRnJlcXVlbmN5KCkpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmFuc3BvcnRUaW1lIGlzIGEgdGhlIHRpbWUgYWxvbmcgdGhlIFRyYW5zcG9ydCdzXG5cdFx0ICogICAgICAgICB0aW1lbGluZS4gSXQgaXMgc2ltaWxhciB0byBUb25lLlRpbWUsIGJ1dCBpbnN0ZWFkIG9mIGV2YWx1YXRpbmdcblx0XHQgKiAgICAgICAgIGFnYWluc3QgdGhlIEF1ZGlvQ29udGV4dCdzIGNsb2NrLCBpdCBpcyBldmFsdWF0ZWQgYWdhaW5zdFxuXHRcdCAqICAgICAgICAgdGhlIFRyYW5zcG9ydCdzIHBvc2l0aW9uLiBTZWUgW1RyYW5zcG9ydFRpbWUgd2lraV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvVHJhbnNwb3J0VGltZSkuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlIGFzIGEgbnVtYmVyIG9yIHN0cmluZ1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFVuaXQgdmFsdWVzXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWV9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWUgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UcmFuc3BvcnRUaW1lKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVGltZS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UcmFuc3BvcnRUaW1lKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydFRpbWUsIFRvbmUuVGltZSk7XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiB3aGljaGV2ZXIgY29udGV4dCBpcyByZWxldmFudFxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZS5wcm90b3R5cGUuX25vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQuc2Vjb25kcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnRUaW1lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUWVBFU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiBVbml0cyB3aGljaCBhIHZhbHVlIGNhbiB0YWtlIG9uLlxuXHRcdCAqIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLlR5cGUgPSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRGVmYXVsdCB1bml0c1xuXHRcdFx0ICogIEB0eXBlZGVmIHtEZWZhdWx0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgRGVmYXVsdDogJ251bWJlcicsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGltZSBjYW4gYmUgZGVzY3JpYmVkIGluIGEgbnVtYmVyIG9mIHdheXMuIFJlYWQgbW9yZSBbVGltZV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvVGltZSkuXG5cdFx0XHQgKlxuXHRcdFx0ICogICogTnVtYmVycywgd2hpY2ggd2lsbCBiZSB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHRpbWUgKGluIHNlY29uZHMpLlxuXHRcdFx0ICogICogTm90YXRpb24sIChcIjRuXCIsIFwiOHRcIikgZGVzY3JpYmVzIHRpbWUgaW4gQlBNIGFuZCB0aW1lIHNpZ25hdHVyZSByZWxhdGl2ZSB2YWx1ZXMuXG5cdFx0XHQgKiAgKiBUcmFuc3BvcnRUaW1lLCAoXCI0OjM6MlwiKSB3aWxsIGFsc28gcHJvdmlkZSB0ZW1wbyBhbmQgdGltZSBzaWduYXR1cmUgcmVsYXRpdmUgdGltZXNcblx0XHRcdCAqICBpbiB0aGUgZm9ybSBCQVJTOlFVQVJURVJTOlNJWFRFRU5USFMuXG5cdFx0XHQgKiAgKiBGcmVxdWVuY3ksIChcIjhoelwiKSBpcyBjb252ZXJ0ZWQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY3ljbGUgaW4gc2Vjb25kcy5cblx0XHRcdCAqICAqIE5vdy1SZWxhdGl2ZSwgKFwiKzFcIikgcHJlZml4IGFueSBvZiB0aGUgYWJvdmUgd2l0aCBcIitcIiBhbmQgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhc1xuXHRcdFx0ICogIFwidGhlIGN1cnJlbnQgdGltZSBwbHVzIHdoYXRldmVyIGV4cHJlc3Npb24gZm9sbG93c1wiLlxuXHRcdFx0ICogICogRXhwcmVzc2lvbnMsIChcIjM6MCArIDIgLSAoMW0gLyA3KVwiKSBhbnkgb2YgdGhlIGFib3ZlIGNhbiBhbHNvIGJlIGNvbWJpbmVkXG5cdFx0XHQgKiAgaW50byBhIG1hdGhlbWF0aWNhbCBleHByZXNzaW9uIHdoaWNoIHdpbGwgYmUgZXZhbHVhdGVkIHRvIGNvbXB1dGUgdGhlIGRlc2lyZWQgdGltZS5cblx0XHRcdCAqICAqIE5vIEFyZ3VtZW50LCBmb3IgbWV0aG9kcyB3aGljaCBhY2NlcHQgdGltZSwgbm8gYXJndW1lbnQgd2lsbCBiZSBpbnRlcnByZXRlZCBhc1xuXHRcdFx0ICogIFwibm93XCIgKGkuZS4gdGhlIGN1cnJlbnRUaW1lKS5cblx0XHRcdCAqXG5cdFx0XHQgKiAgQHR5cGVkZWYge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBUaW1lOiAndGltZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRnJlcXVlbmN5IGNhbiBiZSBkZXNjcmliZWQgc2ltaWxhciB0byB0aW1lLCBleGNlcHQgdWx0aW1hdGVseSB0aGVcblx0XHRcdCAqICB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBmcmVxdWVuY3kgaW5zdGVhZCBvZiBzZWNvbmRzLiBBIG51bWJlclxuXHRcdFx0ICogIGlzIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgdmFsdWUgaW4gaGVydHouIEFkZGl0aW9uYWxseSBhbnkgb2YgdGhlXG5cdFx0XHQgKiAgVGltZSBlbmNvZGluZ3MgY2FuIGJlIHVzZWQuIE5vdGUgbmFtZXMgaW4gdGhlIGZvcm1cblx0XHRcdCAqICBvZiBOT1RFIE9DVEFWRSAoaS5lLiBDNCkgYXJlIGFsc28gYWNjZXB0ZWQgYW5kIGNvbnZlcnRlZCB0byB0aGVpclxuXHRcdFx0ICogIGZyZXF1ZW5jeSB2YWx1ZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7RnJlcXVlbmN5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgRnJlcXVlbmN5OiAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUcmFuc3BvcnRUaW1lIGRlc2NyaWJlcyBhIHBvc2l0aW9uIGFsb25nIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZS4gSXQgaXNcblx0XHRcdCAqICBzaW1pbGFyIHRvIFRpbWUgaW4gdGhhdCBpdCB1c2VzIGFsbCB0aGUgc2FtZSBlbmNvZGluZ3MsIGJ1dCBUcmFuc3BvcnRUaW1lIHNwZWNpZmljYWxseVxuXHRcdFx0ICogIHBlcnRhaW5zIHRvIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZSwgd2hpY2ggaXMgc3RhcnRhYmxlLCBzdG9wcGFibGUsIGxvb3BhYmxlLCBhbmQgc2Vla2FibGUuXG5cdFx0XHQgKiAgW1JlYWQgbW9yZV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvVHJhbnNwb3J0VGltZSlcblx0XHRcdCAqICBAdHlwZWRlZiB7VHJhbnNwb3J0VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIFRyYW5zcG9ydFRpbWU6ICd0cmFuc3BvcnRUaW1lJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaWNrcyBhcmUgdGhlIGJhc2ljIHN1YnVuaXQgb2YgdGhlIFRyYW5zcG9ydC4gVGhleSBhcmVcblx0XHRcdCAqICB0aGUgc21hbGxlc3QgdW5pdCBvZiB0aW1lIHRoYXQgdGhlIFRyYW5zcG9ydCBzdXBwb3J0cy5cblx0XHRcdCAqICBAdHlwZWRlZiB7VGlja3N9XG5cdFx0XHQgKi9cblx0ICAgICAgICBUaWNrczogJ3RpY2tzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBOb3JtYWwgdmFsdWVzIGFyZSB3aXRoaW4gdGhlIHJhbmdlIFswLCAxXS5cblx0XHRcdCAqICBAdHlwZWRlZiB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKi9cblx0ICAgICAgICBOb3JtYWxSYW5nZTogJ25vcm1hbFJhbmdlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBdWRpb1JhbmdlIHZhbHVlcyBhcmUgYmV0d2VlbiBbLTEsIDFdLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtBdWRpb1JhbmdlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQXVkaW9SYW5nZTogJ2F1ZGlvUmFuZ2UnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIERlY2liZWxzIGFyZSBhIGxvZ2FyaXRobWljIHVuaXQgb2YgbWVhc3VyZW1lbnQgd2hpY2ggaXMgdXNlZnVsIGZvciB2b2x1bWVcblx0XHRcdCAqICBiZWNhdXNlIG9mIHRoZSBsb2dhcml0aG1pYyB3YXkgdGhhdCB3ZSBwZXJjZWl2ZSBsb3VkbmVzcy4gMCBkZWNpYmVsc1xuXHRcdFx0ICogIG1lYW5zIG5vIGNoYW5nZSBpbiB2b2x1bWUuIC0xMGRiIGlzIGFwcHJveGltYXRlbHkgaGFsZiBhcyBsb3VkIGFuZCAxMGRiXG5cdFx0XHQgKiAgaXMgdHdpY2UgaXMgbG91ZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7RGVjaWJlbHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBEZWNpYmVsczogJ2RiJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYWxmLXN0ZXAgbm90ZSBpbmNyZW1lbnRzLCBpLmUuIDEyIGlzIGFuIG9jdGF2ZSBhYm92ZSB0aGUgcm9vdC4gYW5kIDEgaXMgYSBoYWxmLXN0ZXAgdXAuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0ludGVydmFsfVxuXHRcdFx0ICovXG5cdCAgICAgICAgSW50ZXJ2YWw6ICdpbnRlcnZhbCcsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQmVhdHMgcGVyIG1pbnV0ZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7QlBNfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQlBNOiAnYnBtJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMC5cblx0XHRcdCAqICBAdHlwZWRlZiB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBQb3NpdGl2ZTogJ3Bvc2l0aXZlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBHYWluIGlzIHRoZSByYXRpbyBiZXR3ZWVuIGlucHV0IGFuZCBvdXRwdXQgb2YgYSBzaWduYWwuXG5cdFx0XHQgKiAgQSBnYWluIG9mIDAgaXMgdGhlIHNhbWUgYXMgc2lsZW5jaW5nIHRoZSBzaWduYWwuIEEgZ2FpbiBvZlxuXHRcdFx0ICogIDEsIGNhdXNlcyBubyBjaGFuZ2UgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZWRlZiB7R2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIEdhaW46ICdnYWluJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGNlbnQgaXMgYSBodW5kcmVkdGggb2YgYSBzZW1pdG9uZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7Q2VudHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBDZW50czogJ2NlbnRzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbmdsZSBiZXR3ZWVuIDAgYW5kIDM2MC5cblx0XHRcdCAqICBAdHlwZWRlZiB7RGVncmVlc31cblx0XHRcdCAqL1xuXHQgICAgICAgIERlZ3JlZXM6ICdkZWdyZWVzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIG51bWJlciByZXByZXNlbnRpbmcgYSBtaWRpIG5vdGUuXG5cdFx0XHQgKiAgQHR5cGVkZWYge01JREl9XG5cdFx0XHQgKi9cblx0ICAgICAgICBNSURJOiAnbWlkaScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBjb2xvbi1zZXBhcmF0ZWQgcmVwcmVzZW50YXRpb24gb2YgdGltZSBpbiB0aGUgZm9ybSBvZlxuXHRcdFx0ICogIEJhcnM6QmVhdHM6U2l4dGVlbnRocy5cblx0XHRcdCAqICBAdHlwZWRlZiB7QmFyc0JlYXRzU2l4dGVlbnRoc31cblx0XHRcdCAqL1xuXHQgICAgICAgIEJhcnNCZWF0c1NpeHRlZW50aHM6ICdiYXJzQmVhdHNTaXh0ZWVudGhzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTYW1wbGluZyBpcyB0aGUgcmVkdWN0aW9uIG9mIGEgY29udGludW91cyBzaWduYWwgdG8gYSBkaXNjcmV0ZSBzaWduYWwuXG5cdFx0XHQgKiAgQXVkaW8gaXMgdHlwaWNhbGx5IHNhbXBsZWQgNDQxMDAgdGltZXMgcGVyIHNlY29uZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7U2FtcGxlc31cblx0XHRcdCAqL1xuXHQgICAgICAgIFNhbXBsZXM6ICdzYW1wbGVzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIZXJ0eiBhcmUgYSBmcmVxdWVuY3kgcmVwcmVzZW50YXRpb24gZGVmaW5lZCBhcyBvbmUgY3ljbGUgcGVyIHNlY29uZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7SGVydHp9XG5cdFx0XHQgKi9cblx0ICAgICAgICBIZXJ0ejogJ2hlcnR6Jyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGZyZXF1ZW5jeSByZXByZXNlbnRlZCBieSBhIGxldHRlciBuYW1lLFxuXHRcdFx0ICogIGFjY2lkZW50YWwgYW5kIG9jdGF2ZS4gVGhpcyBzeXN0ZW0gaXMga25vd24gYXNcblx0XHRcdCAqICBbU2NpZW50aWZpYyBQaXRjaCBOb3RhdGlvbl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2NpZW50aWZpY19waXRjaF9ub3RhdGlvbikuXG5cdFx0XHQgKiAgQHR5cGVkZWYge05vdGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBOb3RlOiAnbm90ZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgT25lIG1pbGxpc2Vjb25kIGlzIGEgdGhvdXNhbmR0aCBvZiBhIHNlY29uZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7TWlsbGlzZWNvbmRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgTWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmRzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTZWNvbmRzIGFyZSB0aGUgdGltZSB1bml0IG9mIHRoZSBBdWRpb0NvbnRleHQuIEluIHRoZSBlbmQsXG5cdFx0XHQgKiAgYWxsIHZhbHVlcyBuZWVkIHRvIGJlIGV2YWx1YXRlZCB0byBzZWNvbmRzLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtTZWNvbmRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgU2Vjb25kczogJ3NlY29uZHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGR1cmF0aW9uIHJlbGF0aXZlIHRvIGEgbWVhc3VyZS5cblx0XHRcdCAqICAqIFwiNG5cIiA9IHF1YXJ0ZXIgbm90ZVxuXHRcdFx0ICogICogXCIybVwiID0gdHdvIG1lYXN1cmVzXG5cdFx0XHQgKiAgKiBcIjh0XCIgPSBlaWdodGgtbm90ZSB0cmlwbGV0XG5cdFx0XHQgKiAgQHR5cGVkZWYge05vdGF0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgTm90YXRpb246ICdub3RhdGlvbidcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIEFVR01FTlQgVE9ORSdzIFBST1RPVFlQRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBUaW1lIGludG8gc2Vjb25kcy5cblx0XHQgKlxuXHRcdCAqICBVbmxpa2UgdGhlIG1ldGhvZCB3aGljaCBpdCBvdmVycmlkZXMsIHRoaXMgdGFrZXMgaW50byBhY2NvdW50XG5cdFx0ICogIHRyYW5zcG9ydHRpbWUgYW5kIG11c2ljYWwgbm90YXRpb24uXG5cdFx0ICpcblx0XHQgKiAgVGltZSA6IDEuNDBcblx0XHQgKiAgTm90YXRpb246IDRuIG9yIDFtIG9yIDJ0XG5cdFx0ICogIE5vdyBSZWxhdGl2ZTogKzNuXG5cdFx0ICogIE1hdGg6IDNuKzE2biBvciBldmVuIGNvbXBsaWNhdGVkIGV4cHJlc3Npb25zICgoM24qMikvNiArIDEpXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJuIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcih0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGltZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5ub3coKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWUodGltZSkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aW1lIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGltZS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBmcmVxdWVuY3kgcmVwcmVzZW50YXRpb24gaW50byBhIG51bWJlci5cblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4ge0hlcnR6fSAgICAgIHRoZSBmcmVxdWVuY3kgaW4gaGVydHpcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcihmcmVxKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gZnJlcTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcoZnJlcSkgfHwgVG9uZS5pc1VuZGVmKGZyZXEpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5GcmVxdWVuY3koZnJlcSkudmFsdWVPZigpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoZnJlcSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZyZXEudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSB0aW1lIHJlcHJlc2VudGF0aW9uIGludG8gdGlja3MuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHJldHVybiB7VGlja3N9ICB0aGUgdGltZSBpbiB0aWNrc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodGltZSkgfHwgVG9uZS5pc1N0cmluZyh0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKS50b1RpY2tzKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzVW5kZWYodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LnRpY2tzO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGltZSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRpbWUudG9UaWNrcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGFyYW0gd3JhcHMgdGhlIG5hdGl2ZSBXZWIgQXVkaW8ncyBBdWRpb1BhcmFtIHRvIHByb3ZpZGVcblx0XHQgKiAgICAgICAgIGFkZGl0aW9uYWwgdW5pdCBjb252ZXJzaW9uIGZ1bmN0aW9uYWxpdHkuIEl0IGFsc29cblx0XHQgKiAgICAgICAgIHNlcnZlcyBhcyBhIGJhc2UtY2xhc3MgZm9yIGNsYXNzZXMgd2hpY2ggaGF2ZSBhIHNpbmdsZSxcblx0XHQgKiAgICAgICAgIGF1dG9tYXRhYmxlIHBhcmFtZXRlci5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0gIHtBdWRpb1BhcmFtfSAgcGFyYW0gIFRoZSBwYXJhbWV0ZXIgdG8gd3JhcC5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5UeXBlfSB1bml0cyBUaGUgdW5pdHMgb2YgdGhlIGF1ZGlvIHBhcmFtLlxuXHRcdCAqICBAcGFyYW0gIHtCb29sZWFufSBjb252ZXJ0IElmIHRoZSBwYXJhbSBzaG91bGQgYmUgY29udmVydGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwYXJhbScsXG5cdCAgICAgICAgICAgICd1bml0cycsXG5cdCAgICAgICAgICAgICdjb252ZXJ0J1xuXHQgICAgICAgIF0sIFRvbmUuUGFyYW0pO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG5hdGl2ZSBwYXJhbWV0ZXIgdG8gY29udHJvbFxuXHRcdFx0ICogIEB0eXBlICB7QXVkaW9QYXJhbX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0ID0gb3B0aW9ucy5wYXJhbTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdW5pdHMgb2YgdGhlIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlR5cGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnVuaXRzID0gb3B0aW9ucy51bml0cztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiB0aGUgdmFsdWUgc2hvdWxkIGJlIGNvbnZlcnRlZCBvciBub3Rcblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY29udmVydCA9IG9wdGlvbnMuY29udmVydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUcnVlIGlmIHRoZSBzaWduYWwgdmFsdWUgaXMgYmVpbmcgb3ZlcnJpZGRlbiBieVxuXHRcdFx0ICogIGEgY29ubmVjdGVkIHNpZ25hbC5cblx0XHRcdCAqICBAcmVhZE9ubHlcblx0XHRcdCAqICBAdHlwZSAge2Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3ZlcnJpZGRlbiA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHRpbWVsaW5lIHdoaWNoIHRyYWNrcyBhbGwgb2YgdGhlIGF1dG9tYXRpb25zLlxuXHRcdFx0ICogQHR5cGUge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFRvbmUuVGltZWxpbmUoMTAwMCk7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKG9wdGlvbnMudmFsdWUpICYmIHRoaXMuX3BhcmFtKSB7XG5cdCAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhcmFtLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVmYXVsdCxcblx0ICAgICAgICAnY29udmVydCc6IHRydWUsXG5cdCAgICAgICAgJ3BhcmFtJzogdW5kZWZpbmVkXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYXJhbSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJhbS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90b1VuaXRzKHRoaXMuZ2V0VmFsdWVBdFRpbWUobm93KSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pbml0aWFsVmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgICAgICB0aGlzLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLnNldFZhbHVlQXRUaW1lKHZhbHVlLCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXJcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYXJhbSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJhbS5wcm90b3R5cGUsICdtaW5WYWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5UaW1lIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5GcmVxdWVuY3kgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLk5vcm1hbFJhbmdlIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5Qb3NpdGl2ZSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQlBNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQXVkaW9SYW5nZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5EZWNpYmVscykge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC1JbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJhbS5taW5WYWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXJcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYXJhbSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJhbS5wcm90b3R5cGUsICdtYXhWYWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQXVkaW9SYW5nZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW0ubWF4VmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IHRoZSBnaXZlbiB2YWx1ZSBmcm9tIHRoZSB0eXBlIHNwZWNpZmllZCBieSBUb25lLlBhcmFtLnVuaXRzXG5cdFx0ICogIGludG8gdGhlIGRlc3RpbmF0aW9uIHZhbHVlIChzdWNoIGFzIEdhaW4gb3IgRnJlcXVlbmN5KS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7Kn0gdmFsIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG5cdFx0ICogIEByZXR1cm4ge251bWJlcn0gICAgIHRoZSBudW1iZXIgd2hpY2ggdGhlIHZhbHVlIHNob3VsZCBiZSBzZXQgdG9cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9mcm9tVW5pdHMgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKCh0aGlzLmNvbnZlcnQgfHwgVG9uZS5pc1VuZGVmKHRoaXMuY29udmVydCkpICYmICF0aGlzLm92ZXJyaWRkZW4pIHtcblx0ICAgICAgICAgICAgc3dpdGNoICh0aGlzLnVuaXRzKSB7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLlRpbWU6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHModmFsKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuRnJlcXVlbmN5OlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9GcmVxdWVuY3kodmFsKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuRGVjaWJlbHM6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5kYlRvR2Fpbih2YWwpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWwsIDApLCAxKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuQXVkaW9SYW5nZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWwsIC0xKSwgMSk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLlBvc2l0aXZlOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHZhbCwgMCk7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ29udmVydCB0aGUgcGFyYW1ldGVycyB2YWx1ZSBpbnRvIHRoZSB1bml0cyBzcGVjaWZpZWQgYnkgVG9uZS5QYXJhbS51bml0cy5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSAge251bWJlcn0gdmFsIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG5cdFx0ICogQHJldHVybiB7bnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX3RvVW5pdHMgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udmVydCB8fCBUb25lLmlzVW5kZWYodGhpcy5jb252ZXJ0KSkge1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudW5pdHMpIHtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuRGVjaWJlbHM6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5nYWluVG9EYih2YWwpO1xuXHQgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgbWluaW11bSBvdXRwdXQgdmFsdWVcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9taW5PdXRwdXQgPSAwLjAwMDAxO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBldmVudCB0eXBlc1xuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZSA9IHtcblx0ICAgICAgICBMaW5lYXI6ICdsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZScsXG5cdCAgICAgICAgRXhwb25lbnRpYWw6ICdleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICBUYXJnZXQ6ICdzZXRUYXJnZXRBdFRpbWUnLFxuXHQgICAgICAgIFNldFZhbHVlOiAnc2V0VmFsdWVBdFRpbWUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhIHBhcmFtZXRlciB2YWx1ZSBjaGFuZ2UgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7Kn1cdHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSAgdGltZSBUaGUgdGltZSB3aGVuIHRoZSBjaGFuZ2Ugc2hvdWxkIG9jY3VyLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHRoZSBmcmVxdWVuY3kgdG8gXCJHNFwiIGluIGV4YWN0bHkgMSBzZWNvbmQgZnJvbSBub3cuXG5cdFx0ICogZnJlcS5zZXRWYWx1ZUF0VGltZShcIkc0XCIsIFwiKzFcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLnNldFZhbHVlQXRUaW1lKHZhbHVlLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzaWduYWxzIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBTdWJzZXF1ZW50IHNjaGVkdWxpbmdcblx0XHQgKiAgbWF5IGludmFsaWRhdGUgdGhlIHJldHVybmVkIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgV2hlbiB0byBnZXQgdGhlIHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgYWZ0ZXIgPSB0aGlzLl9ldmVudHMuZ2V0QWZ0ZXIodGltZSk7XG5cdCAgICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgdmFyIGluaXRpYWxWYWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyh0aGlzLl9pbml0aWFsVmFsdWUsIHRoaXMuX3BhcmFtLmRlZmF1bHRWYWx1ZSk7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXHQgICAgICAgIC8vaWYgaXQgd2FzIHNldCBieVxuXHQgICAgICAgIGlmIChiZWZvcmUgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSBpbml0aWFsVmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5UYXJnZXQpIHtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzID0gdGhpcy5fZXZlbnRzLmdldEJlZm9yZShiZWZvcmUudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c1ZhbDtcblx0ICAgICAgICAgICAgaWYgKHByZXZpb3VzID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbCA9IGluaXRpYWxWYWx1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsID0gcHJldmlvdXMudmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9leHBvbmVudGlhbEFwcHJvYWNoKGJlZm9yZS50aW1lLCBwcmV2aW91c1ZhbCwgYmVmb3JlLnZhbHVlLCBiZWZvcmUuY29uc3RhbnQsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSBiZWZvcmUudmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcikge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2xpbmVhckludGVycG9sYXRlKGJlZm9yZS50aW1lLCBiZWZvcmUudmFsdWUsIGFmdGVyLnRpbWUsIGFmdGVyLnZhbHVlLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9leHBvbmVudGlhbEludGVycG9sYXRlKGJlZm9yZS50aW1lLCBiZWZvcmUudmFsdWUsIGFmdGVyLnRpbWUsIGFmdGVyLnZhbHVlLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGJlZm9yZS52YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDcmVhdGVzIGEgc2NoZWR1bGUgcG9pbnQgd2l0aCB0aGUgY3VycmVudCB2YWx1ZSBhdCB0aGUgY3VycmVudCB0aW1lLlxuXHRcdCAqICBUaGlzIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgYW4gYXV0b21hdGlvbiBhbmNob3IgcG9pbnQgaW4gb3JkZXIgdG9cblx0XHQgKiAgc2NoZWR1bGUgY2hhbmdlcyBmcm9tIHRoZSBjdXJyZW50IHZhbHVlLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gbm93IChPcHRpb25hbGx5KSBwYXNzIHRoZSBub3cgdmFsdWUgaW4uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRSYW1wUG9pbnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgY3VycmVudFZhbCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgdGhpcy5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmIChjdXJyZW50VmFsID09PSAwKSB7XG5cdCAgICAgICAgICAgIGN1cnJlbnRWYWwgPSB0aGlzLl9taW5PdXRwdXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuc2V0VmFsdWVBdFRpbWUodGhpcy5fdG9Vbml0cyhjdXJyZW50VmFsKSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhIGxpbmVhciBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbSB0aGVcblx0XHQgKiAgcHJldmlvdXMgc2NoZWR1bGVkIHBhcmFtZXRlciB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBlbmRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5kVGltZSkge1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICBlbmRUaW1lID0gdGhpcy50b1NlY29uZHMoZW5kVGltZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IGVuZFRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgZW5kVGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhbiBleHBvbmVudGlhbCBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgcHJldmlvdXMgc2NoZWR1bGVkIHBhcmFtZXRlciB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBlbmRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBlbmRUaW1lKSB7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIHZhbHVlID0gTWF0aC5tYXgodGhpcy5fbWluT3V0cHV0LCB2YWx1ZSk7XG5cdCAgICAgICAgZW5kVGltZSA9IHRoaXMudG9TZWNvbmRzKGVuZFRpbWUpO1xuXHQgICAgICAgIC8vc3RvcmUgdGhlIGV2ZW50XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5FeHBvbmVudGlhbCxcblx0ICAgICAgICAgICAgJ3RpbWUnOiBlbmRUaW1lLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIGVuZFRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gZXhwb25lbnRpYWwgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb21cblx0XHQgKiAgdGhlIGN1cnJlbnQgdGltZSBhbmQgY3VycmVudCB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUgb3ZlciB0aGVcblx0XHQgKiAgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWUgICBUaGUgdmFsdWUgdG8gcmFtcCB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vZXhwb25lbnRpYWxseSByYW1wIHRvIHRoZSB2YWx1ZSAyIG92ZXIgNCBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5leHBvbmVudGlhbFJhbXBUbygyLCA0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvID0gZnVuY3Rpb24gKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLnNldFJhbXBQb2ludChzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lICsgdGhpcy50b1NlY29uZHMocmFtcFRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGxpbmVhciBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgY3VycmVudCB0aW1lIGFuZCBjdXJyZW50IHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZSBvdmVyIHRoZVxuXHRcdCAqICBkdXJhdGlvbiBvZiB0aGUgcmFtcFRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0W3N0YXJ0VGltZT1ub3ddIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9saW5lYXJseSByYW1wIHRvIHRoZSB2YWx1ZSA0IG92ZXIgMyBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5saW5lYXJSYW1wVG8oNCwgMyk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5saW5lYXJSYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lICsgdGhpcy50b1NlY29uZHMocmFtcFRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBTaW5jZSBpdFxuXHRcdCAqICBpcyBhbiBleHBvbmVudGlhbCBhcHByb2FjaCBpdCB3aWxsIGNvbnRpbnVlIGFwcHJvYWNoaW5nIGFmdGVyIHRoZSByYW1wIGR1cmF0aW9uLiBUaGVcblx0XHQgKiAgcmFtcFRpbWUgaXMgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0byByZWFjaCBvdmVyIDk5JSBvZiB0aGUgd2F5IHRvd2FyZHMgdGhlIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2V4cG9uZW50aWFsbHkgcmFtcCB0byB0aGUgdmFsdWUgMiBvdmVyIDQgc2Vjb25kcy5cblx0XHQgKiBzaWduYWwuZXhwb25lbnRpYWxSYW1wVG8oMiwgNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS50YXJnZXRSYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUodmFsdWUsIHN0YXJ0VGltZSwgcmFtcFRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFNpbmNlIGl0XG5cdFx0ICogIGlzIGFuIGV4cG9uZW50aWFsIGFwcHJvYWNoIGl0IHdpbGwgY29udGludWUgYXBwcm9hY2hpbmcgYWZ0ZXIgdGhlIHJhbXAgZHVyYXRpb24uIFRoZVxuXHRcdCAqICByYW1wVGltZSBpcyB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRvIHJlYWNoIG92ZXIgOTklIG9mIHRoZSB3YXkgdG93YXJkcyB0aGUgdmFsdWUuIFRoaXMgbWV0aG9kc1xuXHRcdCAqICBpcyBzaW1pbGFyIHRvIHNldFRhcmdldEF0VGltZSBleGNlcHQgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIGEgdGltZSBpbnN0ZWFkIG9mIGEgJ3RpbWVDb25zdGFudCdcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHR0aW1lIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vZXhwb25lbnRpYWxseSByYW1wIHRvIHRoZSB2YWx1ZSAyIG92ZXIgNCBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5leHBvbmVudGlhbFJhbXBUbygyLCA0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSwgcmFtcFRpbWUpIHtcblx0ICAgICAgICB2YXIgdGltZUNvbnN0YW50ID0gTWF0aC5sb2codGhpcy50b1NlY29uZHMocmFtcFRpbWUpICsgMSkgLyBNYXRoLmxvZygyMDApO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5zZXRUYXJnZXRBdFRpbWUodmFsdWUsIHRpbWUsIHRpbWVDb25zdGFudCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoXG5cdFx0ICogIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRpbWUgY29uc3RhbnQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGltZUNvbnN0YW50XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRUYXJnZXRBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KSB7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIC8vIFRoZSB2YWx1ZSB3aWxsIG5ldmVyIGJlIGFibGUgdG8gYXBwcm9hY2ggd2l0aG91dCB0aW1lQ29uc3RhbnQgPiAwLlxuXHQgICAgICAgIGlmICh0aW1lQ29uc3RhbnQgPD0gMCkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RpbWVDb25zdGFudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5UYXJnZXQsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IHN0YXJ0VGltZSxcblx0ICAgICAgICAgICAgJ2NvbnN0YW50JzogdGltZUNvbnN0YW50XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uc2V0VGFyZ2V0QXRUaW1lKHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgYW4gYXJyYXkgb2YgYXJiaXRyYXJ5IHBhcmFtZXRlciB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge0FycmF5fSB2YWx1ZXNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBkdXJhdGlvblxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc2NhbGluZz0xXSBJZiB0aGUgdmFsdWVzIGluIHRoZSBjdXJ2ZSBzaG91bGQgYmUgc2NhbGVkIGJ5IHNvbWUgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFZhbHVlQ3VydmVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWVzLCBzdGFydFRpbWUsIGR1cmF0aW9uLCBzY2FsaW5nKSB7XG5cdCAgICAgICAgc2NhbGluZyA9IFRvbmUuZGVmYXVsdEFyZyhzY2FsaW5nLCAxKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0VmFsdWVBdFRpbWUodmFsdWVzWzBdICogc2NhbGluZywgc3RhcnRUaW1lKTtcblx0ICAgICAgICB2YXIgc2VnVGltZSA9IGR1cmF0aW9uIC8gKHZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlc1tpXSAqIHNjYWxpbmcsIHN0YXJ0VGltZSArIGkgKiBzZWdUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbHMgYWxsIHNjaGVkdWxlZCBwYXJhbWV0ZXIgY2hhbmdlcyB3aXRoIHRpbWVzIGdyZWF0ZXIgdGhhbiBvclxuXHRcdCAqICBlcXVhbCB0byBzdGFydFRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVkVmFsdWVzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoaXMgaXMgc2ltaWxhciB0byBbY2FuY2VsU2NoZWR1bGVkVmFsdWVzXSgjY2FuY2VsU2NoZWR1bGVkVmFsdWVzKSBleGNlcHRcblx0XHQgKiAgaXQgaG9sZHMgdGhlIGF1dG9tYXRlZCB2YWx1ZSBhdCB0aW1lIHVudGlsIHRoZSBuZXh0IGF1dG9tYXRlZCBldmVudC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuY2FuY2VsQW5kSG9sZEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHZhbHVlQXRUaW1lID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICAvL2lmIHRoZXJlIGlzIGFuIGV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgICAgLy9hbmQgdGhhdCBldmVuIGlzIG5vdCBhIFwic2V0XCJcblx0ICAgICAgICB2YXIgYmVmb3JlID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICB2YXIgYWZ0ZXIgPSB0aGlzLl9ldmVudHMuZ2V0QWZ0ZXIodGltZSk7XG5cdCAgICAgICAgaWYgKGJlZm9yZSAmJiBiZWZvcmUudGltZSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAvL3JlbW92ZSBldmVyeXRoaW5nIGFmdGVyXG5cdCAgICAgICAgICAgIGlmIChhZnRlcikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbChhZnRlci50aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwodGltZSArIDAuMDAwMDAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgLy9jYW5jZWwgdGhlIG5leHQgZXZlbnQocylcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbChhZnRlci50aW1lKTtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlQXRUaW1lLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlQXRUaW1lLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodmFsdWVBdFRpbWUsIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZUF0VGltZSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zZXQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVBdFRpbWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmICh0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFyYW0uc2V0VmFsdWVBdFRpbWUodmFsdWVBdFRpbWUsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmFtcHMgdG8gdGhlIGdpdmVuIHZhbHVlIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKiAgQXV0b21hdGljYWxseSBzZWxlY3RzIHRoZSBiZXN0IHJhbXAgdHlwZSAoZXhwb25lbnRpYWwgb3IgbGluZWFyKVxuXHRcdCAqICBkZXBlbmRpbmcgb24gdGhlIGB1bml0c2Agb2YgdGhlIHNpZ25hbFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgXHRUaGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JhbXAgdG8gdGhlIHZhbHVlIGVpdGhlciBsaW5lYXJseSBvciBleHBvbmVudGlhbGx5XG5cdFx0ICogLy9kZXBlbmRpbmcgb24gdGhlIFwidW5pdHNcIiB2YWx1ZSBvZiB0aGUgc2lnbmFsXG5cdFx0ICogc2lnbmFsLnJhbXBUbygwLCAxMCk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zY2hlZHVsZSBpdCB0byByYW1wIHN0YXJ0aW5nIGF0IGEgc3BlY2lmaWMgdGltZVxuXHRcdCAqIHNpZ25hbC5yYW1wVG8oMCwgMTAsIDUpXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5yYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICByYW1wVGltZSA9IFRvbmUuZGVmYXVsdEFyZyhyYW1wVGltZSwgMC4xKTtcblx0ICAgICAgICBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkZyZXF1ZW5jeSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQlBNIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5EZWNpYmVscykge1xuXHQgICAgICAgICAgICB0aGlzLmV4cG9uZW50aWFsUmFtcFRvKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUbyh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFVVE9NQVRJT04gQ1VSVkUgQ0FMQ1VMQVRJT05TXG5cdCAgICAvL1x0TUlUIExpY2Vuc2UsIGNvcHlyaWdodCAoYykgMjAxNCBKb3JkYW4gU2FudGVsbFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBDYWxjdWxhdGVzIHRoZSB0aGUgdmFsdWUgYWxvbmcgdGhlIGN1cnZlIHByb2R1Y2VkIGJ5IHNldFRhcmdldEF0VGltZVxuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2V4cG9uZW50aWFsQXBwcm9hY2ggPSBmdW5jdGlvbiAodDAsIHYwLCB2MSwgdGltZUNvbnN0YW50LCB0KSB7XG5cdCAgICAgICAgcmV0dXJuIHYxICsgKHYwIC0gdjEpICogTWF0aC5leHAoLSh0IC0gdDApIC8gdGltZUNvbnN0YW50KTtcblx0ICAgIH07XG5cdCAgICAvLyBDYWxjdWxhdGVzIHRoZSB0aGUgdmFsdWUgYWxvbmcgdGhlIGN1cnZlIHByb2R1Y2VkIGJ5IGxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fbGluZWFySW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAodDAsIHYwLCB0MSwgdjEsIHQpIHtcblx0ICAgICAgICByZXR1cm4gdjAgKyAodjEgLSB2MCkgKiAoKHQgLSB0MCkgLyAodDEgLSB0MCkpO1xuXHQgICAgfTtcblx0ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHRoZSB2YWx1ZSBhbG9uZyB0aGUgY3VydmUgcHJvZHVjZWQgYnkgZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZVxuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAodDAsIHYwLCB0MSwgdjEsIHQpIHtcblx0ICAgICAgICByZXR1cm4gdjAgKiBNYXRoLnBvdyh2MSAvIHYwLCAodCAtIHQwKSAvICh0MSAtIHQwKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFyYW07XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIE9mZmxpbmVBdWRpb0NvbnRleHRcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQ29udGV4dH1cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgY2hhbm5lbHMgIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdG8gcmVuZGVyXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGR1cmF0aW9uICBUaGUgZHVyYXRpb24gdG8gcmVuZGVyIGluIHNhbXBsZXNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHNhbXBsZVJhdGUgdGhlIHNhbXBsZSByYXRlIHRvIHJlbmRlciBhdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dCA9IGZ1bmN0aW9uIChjaGFubmVscywgZHVyYXRpb24sIHNhbXBsZVJhdGUpIHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb2ZmbGluZSBjb250ZXh0XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge09mZmxpbmVBdWRpb0NvbnRleHR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB2YXIgb2ZmbGluZUNvbnRleHQgPSBuZXcgT2ZmbGluZUF1ZGlvQ29udGV4dChjaGFubmVscywgZHVyYXRpb24gKiBzYW1wbGVSYXRlLCBzYW1wbGVSYXRlKTtcblx0ICAgICAgICAvL3dyYXAgdGhlIG1ldGhvZHMvbWVtYmVyc1xuXHQgICAgICAgIFRvbmUuQ29udGV4dC5jYWxsKHRoaXMsIHtcblx0ICAgICAgICAgICAgJ2NvbnRleHQnOiBvZmZsaW5lQ29udGV4dCxcblx0ICAgICAgICAgICAgJ2Nsb2NrU291cmNlJzogJ29mZmxpbmUnLFxuXHQgICAgICAgICAgICAnbG9va0FoZWFkJzogMCxcblx0ICAgICAgICAgICAgJ3VwZGF0ZUludGVydmFsJzogMTI4IC8gc2FtcGxlUmF0ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgcHJpdmF0ZSByZWZlcmVuY2UgdG8gdGhlIGR1cmF0aW9uXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW4gYXJ0aWZpY2lhbCBjbG9jayBzb3VyY2Vcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSAwO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT2ZmbGluZUNvbnRleHQsIFRvbmUuQ29udGV4dCk7XG5cdCAgICAvKipcblx0XHQgKiAgT3ZlcnJpZGUgdGhlIG5vdyBtZXRob2QgdG8gcG9pbnQgdG8gdGhlIGludGVybmFsIGNsb2NrIHRpbWVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFRpbWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbmRlciB0aGUgb3V0cHV0IG9mIHRoZSBPZmZsaW5lQ29udGV4dFxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB3aGlsZSAodGhpcy5fZHVyYXRpb24gLSB0aGlzLl9jdXJyZW50VGltZSA+PSAwKSB7XG5cdCAgICAgICAgICAgIC8vaW52b2tlIGFsbCB0aGUgY2FsbGJhY2tzIG9uIHRoYXQgdGltZVxuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3RpY2snKTtcblx0ICAgICAgICAgICAgLy9pbmNyZW1lbnQgdGhlIGNsb2NrXG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHRoaXMuYmxvY2tUaW1lO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dC5zdGFydFJlbmRlcmluZygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbG9zZSB0aGUgY29udGV4dFxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2NvbnRleHQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5PZmZsaW5lQ29udGV4dDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuXHQgICAgICAgIHZhciBpc01vYmlsZVNhZmFyaSA9IHVhLmluY2x1ZGVzKCdzYWZhcmknKSAmJiAhdWEuaW5jbHVkZXMoJ2Nocm9tZScpICYmIHVhLmluY2x1ZGVzKCdtb2JpbGUnKTtcblx0ICAgICAgICBpZiAoaXNNb2JpbGVTYWZhcmkpIHtcblx0ICAgICAgICAgICAgLy9tb2JpbGUgc2FmYXJpIGhhcyBhIGJpemFycmUgYnVnIHdpdGggdGhlIG9mZmxpbmUgY29udGV4dFxuXHQgICAgICAgICAgICAvL3doZW4gYSBCdWZmZXJTb3VyY2VOb2RlIGlzIHN0YXJ0ZWQsIGl0IHN0YXJ0cyB0aGUgb2ZmbGluZSBjb250ZXh0XG5cdCAgICAgICAgICAgIC8vXG5cdCAgICAgICAgICAgIC8vZGVmZXJyaW5nIGFsbCBCdWZmZXJTb3VyY2Ugc3RhcnRzIHRpbGwgdGhlIGxhc3QgcG9zc2libGUgbW9tZW50XG5cdCAgICAgICAgICAgIC8vcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCBvZiB0aGlzIGhhcHBlbmluZ1xuXHQgICAgICAgICAgICBUb25lLk9mZmxpbmVDb250ZXh0LnByb3RvdHlwZS5jcmVhdGVCdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnVmZmVyU291cmNlID0gdGhpcy5fY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICAgICAgICAgIHZhciBfbmF0aXZlX3N0YXJ0ID0gYnVmZmVyU291cmNlLnN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyU291cmNlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBfbmF0aXZlX3N0YXJ0LmNhbGwoYnVmZmVyU291cmNlLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIDApO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclNvdXJjZTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIHRoaW4gd3JhcHBlciBhcm91bmQgdGhlIE5hdGl2ZSBXZWIgQXVkaW8gR2Fpbk5vZGUuXG5cdFx0ICogICAgICAgICBUaGUgR2Fpbk5vZGUgaXMgYSBiYXNpYyBidWlsZGluZyBibG9jayBvZiB0aGUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICBBUEkgYW5kIGlzIHVzZWZ1bCBmb3Igcm91dGluZyBhdWRpbyBhbmQgYWRqdXN0aW5nIGdhaW5zLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gIGdhaW4gIFRoZSBpbml0aWFsIGdhaW4gb2YgdGhlIEdhaW5Ob2RlXG5cdFx0ICogIEBwYXJhbSB7VG9uZS5UeXBlPX0gdW5pdHMgVGhlIHVuaXRzIG9mIHRoZSBnYWluIHBhcmFtZXRlci5cblx0XHQgKi9cblx0ICAgIFRvbmUuR2FpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ3VuaXRzJ1xuXHQgICAgICAgIF0sIFRvbmUuR2Fpbik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgR2Fpbk5vZGVcblx0XHRcdCAqICBAdHlwZSAge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLl9nYWluTm9kZSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gcGFyYW1ldGVyIG9mIHRoZSBnYWluIG5vZGUuXG5cdFx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5nYWluID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9nYWluTm9kZS5nYWluLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBvcHRpb25zLnVuaXRzLFxuXHQgICAgICAgICAgICAndmFsdWUnOiBvcHRpb25zLmdhaW4sXG5cdCAgICAgICAgICAgICdjb252ZXJ0Jzogb3B0aW9ucy5jb252ZXJ0XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2dhaW4nKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdhaW4sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdnYWluJzogMSxcblx0ICAgICAgICAnY29udmVydCc6IHRydWVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkdhaW59ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdnYWluJyk7XG5cdCAgICAgICAgdGhpcy5nYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmdhaW4gPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdhaW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCAmJiAhQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVDb25zdGFudFNvdXJjZSkge1xuXHQgICAgICAgIHZhciBDb25zdGFudFNvdXJjZU5vZGUgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgMTI4LCBjb250ZXh0LnNhbXBsZVJhdGUpO1xuXHQgICAgICAgICAgICB2YXIgYXJyID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgYXJyW2ldID0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UubG9vcCA9IHRydWU7XG5cdCAgICAgICAgICAgIHZhciBnYWluTm9kZSA9IHRoaXMuX291dHB1dCA9IGNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgICAgICB0aGlzLm9mZnNldCA9IGdhaW5Ob2RlLmdhaW47XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5jb25uZWN0KGdhaW5Ob2RlKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIENvbnN0YW50U291cmNlTm9kZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2Uuc3RhcnQodGltZSk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLnN0b3AodGltZSk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXQuY29ubmVjdC5hcHBseSh0aGlzLl9vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXQuZGlzY29ubmVjdC5hcHBseSh0aGlzLl9vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVDb25zdGFudFNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudFNvdXJjZU5vZGUodGhpcyk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnN0YW50U291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50U291cmNlTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc2lnbmFsIGlzIGFuIGF1ZGlvLXJhdGUgdmFsdWUuIFRvbmUuU2lnbmFsIGlzIGEgY29yZSBjb21wb25lbnQgb2YgdGhlIGxpYnJhcnkuXG5cdFx0ICogICAgICAgICAgVW5saWtlIGEgbnVtYmVyLCBTaWduYWxzIGNhbiBiZSBzY2hlZHVsZWQgd2l0aCBzYW1wbGUtbGV2ZWwgYWNjdXJhY3kuIFRvbmUuU2lnbmFsXG5cdFx0ICogICAgICAgICAgaGFzIGFsbCBvZiB0aGUgbWV0aG9kcyBhdmFpbGFibGUgdG8gbmF0aXZlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgIFtBdWRpb1BhcmFtXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1hdWRpb3BhcmFtLWludGVyZmFjZSlcblx0XHQgKiAgICAgICAgICBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgY29udmVuaWVuY2VzLiBSZWFkIG1vcmUgYWJvdXQgd29ya2luZyB3aXRoIHNpZ25hbHNcblx0XHQgKiAgICAgICAgICBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvU2lnbmFscykuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlBhcmFtfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxBdWRpb1BhcmFtfSBbdmFsdWVdIEluaXRpYWwgdmFsdWUgb2YgdGhlIHNpZ25hbC4gSWYgYW4gQXVkaW9QYXJhbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHBhc3NlZCBpbiwgdGhhdCBwYXJhbWV0ZXIgd2lsbCBiZSB3cmFwcGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNvbnRyb2xsZWQgYnkgdGhlIFNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IFt1bml0cz1OdW1iZXJdIHVuaXQgVGhlIHVuaXRzIHRoZSBzaWduYWwgaXMgaW4uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgxMCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd2YWx1ZScsXG5cdCAgICAgICAgICAgICd1bml0cydcblx0ICAgICAgICBdLCBUb25lLlNpZ25hbCk7XG5cdCAgICAgICAgVG9uZS5QYXJhbS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiBXaGVuIGEgc2lnbmFsIGlzIGNvbm5lY3RlZCB0byBhbm90aGVyIHNpZ25hbCBvciBhdWRpbyBwYXJhbSxcblx0XHRcdCogdGhpcyBzaWduYWwgYmVjb21lcyBhIHByb3h5IGZvciBpdFxuXHRcdFx0KiBAdHlwZSB7QXJyYXl9XG5cdFx0XHQqIEBwcml2YXRlXG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCogSW5kaWNhdGVzIGlmIHRoZSBjb25zdGFudCBzb3VyY2Ugd2FzIHN0YXJ0ZWQgb3Igbm90XG5cdFx0XHQqIEBwcml2YXRlXG5cdFx0XHQqIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0Ki9cblx0ICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY29uc3RhbnQgc291cmNlIG5vZGUgd2hpY2ggZ2VuZXJhdGVzIHRoZSBzaWduYWxcblx0XHRcdCAqIEB0eXBlIHtDb25zdGFudFNvdXJjZU5vZGV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2UgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ29uc3RhbnRTb3VyY2UoKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuX2NvbnN0YW50U291cmNlLm9mZnNldDtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBub2RlIHdoZXJlIHRoZSBjb25zdGFudCBzaWduYWwgdmFsdWUgaXMgc2NhbGVkLlxuXHRcdFx0ICogQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5fY29uc3RhbnRTb3VyY2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbm9kZSB3aGVyZSB0aGUgdmFsdWUgaXMgc2V0LlxuXHRcdFx0ICogQHR5cGUge1RvbmUuUGFyYW19XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMuX3BhcmFtID0gdGhpcy5vdXRwdXQub2Zmc2V0O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2lnbmFsLCBUb25lLlBhcmFtKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndmFsdWUnOiAwLFxuXHQgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWZhdWx0LFxuXHQgICAgICAgICdjb252ZXJ0JzogdHJ1ZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGVuIHNpZ25hbHMgY29ubmVjdCB0byBvdGhlciBzaWduYWxzIG9yIEF1ZGlvUGFyYW1zLFxuXHRcdCAqICB0aGV5IHRha2Ugb3ZlciB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoYXQgc2lnbmFsIG9yIEF1ZGlvUGFyYW0uXG5cdFx0ICogIEZvciBhbGwgb3RoZXIgbm9kZXMsIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBhIGRlZmF1bHQgPGNvZGU+Y29ubmVjdDwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQG92ZXJyaWRlXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9QYXJhbXxBdWRpb05vZGV8VG9uZS5TaWduYWx8VG9uZX0gbm9kZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bWJlcj0wXSBUaGUgb3V0cHV0IG51bWJlciB0byBjb25uZWN0IGZyb20uXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW1iZXI9MF0gVGhlIGlucHV0IG51bWJlciB0byBjb25uZWN0IHRvLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWx9IHRoaXNcblx0XHQgKiAgQG1ldGhvZFxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIC8vdGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gd2hlcmUgdGhpcyBub2RlIHdpbGwgZm9yd2FyZCBhdXRvbWF0aW9uc1xuXHQgICAgICAgIC8vdG8gY29ubmVjdGVkIG5vZGVzIHdpdGhvdXQgYW55IHNpZ25hbCBpZiBwb3NzaWJsZS5cblx0ICAgICAgICBpZiAodGhpcy5faXNQYXJhbShub2RlKSAmJiAhdGhpcy5fc291cmNlU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgICAgIG5vZGUub3ZlcnJpZGRlbiA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGx5QXV0b21hdGlvbnMobm9kZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fc291cmNlU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZS5zdGFydCgwKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUYWtlcyBhIG5vZGUgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgaWYgaXQgaXMgYSBQYXJhbSBvciBBdWRpb1BhcmFtXG5cdFx0ICogQHBhcmFtICB7Kn0gbm9kZSBUaGUgbm9kZSB0byB0ZXN0XG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLl9pc1BhcmFtID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5QYXJhbSAmJiBUb25lLlBhcmFtID09PSBub2RlLmNvbnN0cnVjdG9yIHx8IG5vZGUgaW5zdGFuY2VvZiBBdWRpb1BhcmFtO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIERpc2NhcmQgdGhlIG9wdGltaXphdGlvbiBhbmQgY29ubmVjdCBhbGwgb2YgdGhlIHByb3hpZXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLl9jb25uZWN0UHJveGllcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZVN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlLnN0YXJ0KDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9wcm94aWVzLmZvckVhY2goZnVuY3Rpb24gKHByb3h5KSB7XG5cdCAgICAgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdC5jYWxsKHRoaXMsIHByb3h5KTtcblx0ICAgICAgICAgICAgaWYgKHByb3h5Ll9wcm94aWVzKSB7XG5cdCAgICAgICAgICAgICAgICBwcm94eS5fY29ubmVjdFByb3hpZXMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlZCB3aGVuIGEgbm9kZSBpcyBjb25uZWN0ZWQgdG8gdGhpc1xuXHRcdCAqIEBwYXJhbSAge0F1ZGlvTm9kZX0gZnJvbVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX29uQ29ubmVjdCA9IGZ1bmN0aW9uIChmcm9tKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLl9pc1BhcmFtKGZyb20pKSB7XG5cdCAgICAgICAgICAgIC8vY29ubmVjdCBhbGwgdGhlIHByb3hpZXNcblx0ICAgICAgICAgICAgdGhpcy5fY29ubmVjdFByb3hpZXMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQXBwbHkgYWxsIHRoZSBjdXJyZW50IGF1dG9tYXRpb25zIHRvIHRoZSBnaXZlbiBwYXJhbWV0ZXJcblx0XHQgKiBAcGFyYW0gIHtBdWRpb1BhcmFtfSBwYXJhbVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX2FwcGx5QXV0b21hdGlvbnMgPSBmdW5jdGlvbiAocGFyYW0pIHtcblx0ICAgICAgICB2YXIgbm93ID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lO1xuXHQgICAgICAgIHBhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhub3cpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZShub3cpO1xuXHQgICAgICAgIHBhcmFtLnNldFZhbHVlQXRUaW1lKGN1cnJlbnRWYWwsIG5vdyk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmZvckVhY2hGcm9tKG5vdywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHBhcmFtW2V2ZW50LnR5cGVdKGV2ZW50LnZhbHVlLCBldmVudC50aW1lLCBldmVudC5jb25zdGFudCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRGlzY29ubmVjdCBmcm9tIHRoZSBnaXZlbiBub2RlIG9yIGFsbCBub2RlcyBpZiBubyBwYXJhbSBpcyBnaXZlbi5cblx0XHQgKiBAcGFyYW0gIHtBdWRpb05vZGV8QXVkaW9QYXJhbX0gbm9kZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2lnbmFsfSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fcHJveGllcy5pbmNsdWRlcyhub2RlKSkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9wcm94aWVzLmluZGV4T2Yobm9kZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKCFub2RlKSB7XG5cdCAgICAgICAgICAgIC8vbm8gYXJndW1lbnQsIGRpc2Nvbm5lY3QgZXZlcnl0aGluZ1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzID0gW107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc2Nvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGN1cnJlbnQgc2lnbmFsIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgV2hlbiB0byBnZXQgdGhlIHNpZ25hbCB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3BhcmFtLmdldFZhbHVlQXRUaW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJhbS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5QYXJhbS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLy93cmFwIGFsbCBvZiB0aGUgYXV0b21hdGlvbiBtZXRob2RzXG5cdCAgICBbXG5cdCAgICAgICAgJ3NldFZhbHVlQXRUaW1lJyxcblx0ICAgICAgICAnbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgICdleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICAnc2V0VGFyZ2V0QXRUaW1lJ1xuXHQgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcblx0ICAgICAgICB2YXIgcHJldmlvdXNNZXRob2QgPSBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdCAgICAgICAgICAgIHByZXZpb3VzTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIGFyZ3NbMF0gPSB0aGlzLl9mcm9tVW5pdHMoYXJnc1swXSk7XG5cdCAgICAgICAgICAgIGFyZ3NbMV0gPSB0aGlzLnRvU2Vjb25kcyhhcmdzWzFdKTtcblx0ICAgICAgICAgICAgLy9hcHBseSBpdCB0byB0aGUgcHJveGllc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLmZvckVhY2goZnVuY3Rpb24gKHNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc2lnbmFsW21ldGhvZF0uYXBwbHkoc2lnbmFsLCBhcmdzKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfTtcblx0ICAgIH0pO1xuXHQgICAgW1xuXHQgICAgICAgICdjYW5jZWxTY2hlZHVsZWRWYWx1ZXMnLFxuXHQgICAgICAgICdjYW5jZWxBbmRIb2xkQXRUaW1lJ1xuXHQgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcblx0ICAgICAgICB2YXIgcHJldmlvdXNNZXRob2QgPSBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdCAgICAgICAgICAgIHByZXZpb3VzTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIGFyZ3NbMF0gPSB0aGlzLnRvU2Vjb25kcyhhcmdzWzBdKTtcblx0ICAgICAgICAgICAgLy9hcHBseSBpdCB0byB0aGUgcHJveGllc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLmZvckVhY2goZnVuY3Rpb24gKHNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc2lnbmFsW21ldGhvZF0uYXBwbHkoc2lnbmFsLCBhcmdzKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfTtcblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2UuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wcm94aWVzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TaWduYWw7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBQb3cgYXBwbGllcyBhbiBleHBvbmVudCB0byB0aGUgaW5jb21pbmcgc2lnbmFsLiBUaGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogICAgICAgICBtdXN0IGJlIEF1ZGlvUmFuZ2UuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IGV4cCBUaGUgZXhwb25lbnQgdG8gYXBwbHkgdG8gdGhlIGluY29taW5nIHNpZ25hbCwgbXVzdCBiZSBhdCBsZWFzdCAyLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcG93ID0gbmV3IFRvbmUuUG93KDIpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KHBvdyk7XG5cdFx0ICogLy9vdXRwdXQgb2YgcG93IGlzIDAuMjUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb3cgPSBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiB0aGUgZXhwb25lbnRcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwID0gVG9uZS5kZWZhdWx0QXJnKGV4cCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHBTY2FsZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKHRoaXMuX2V4cEZ1bmModGhpcy5fZXhwKSwgODE5Mik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Qb3csIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdmFsdWUgb2YgdGhlIGV4cG9uZW50LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBvdyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Qb3cucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHA7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwID0gZXhwO1xuXHQgICAgICAgICAgICB0aGlzLl9leHBTY2FsZXIuc2V0TWFwKHRoaXMuX2V4cEZ1bmModGhpcy5fZXhwKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGZ1bmN0aW9uIHdoaWNoIG1hcHMgdGhlIHdhdmVzaGFwZXJcblx0XHQgKiAgQHBhcmFtICAge251bWJlcn0gZXhwXG5cdFx0ICogIEByZXR1cm4ge2Z1bmN0aW9ufVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb3cucHJvdG90eXBlLl9leHBGdW5jID0gZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLnBvdyhNYXRoLmFicyh2YWwpLCBleHApO1xuXHQgICAgICAgIH07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb3d9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG93LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2V4cFNjYWxlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXhwU2NhbGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Qb3c7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5FbnZlbG9wZSBpcyBhbiBbQURTUl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3ludGhlc2l6ZXIjQURTUl9lbnZlbG9wZSlcblx0XHQgKiAgICAgICAgICBlbnZlbG9wZSBnZW5lcmF0b3IuIFRvbmUuRW52ZWxvcGUgb3V0cHV0cyBhIHNpZ25hbCB3aGljaFxuXHRcdCAqICAgICAgICAgIGNhbiBiZSBjb25uZWN0ZWQgdG8gYW4gQXVkaW9QYXJhbSBvciBUb25lLlNpZ25hbC5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvZS9lYS9BRFNSX3BhcmFtZXRlci5zdmdcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFthdHRhY2tdIFRoZSBhbW91bnQgb2YgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlIHRvIGdvIGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAwIHRvIGl0J3MgbWF4aW11bSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHRUaGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgdGhlIGF0dGFjayB0aGF0IGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgXHR0byBmYWxsIHRvIHRoZSBzdXN0YWluIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc3VzdGFpbl1cdFRoZSBwZXJjZW50IG9mIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgdGhlIGVudmVsb3BlIHJlc3RzIGF0IHVudGlsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0dGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0VGhlIGFtb3VudCBvZiB0aW1lIGFmdGVyIHRoZSByZWxlYXNlIGlzIHRyaWdnZXJlZCBpdCB0YWtlcyB0byByZWFjaCAwLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYW4gYW1wbGl0dWRlIGVudmVsb3BlXG5cdFx0ICogdmFyIGdhaW5Ob2RlID0gVG9uZS5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0XHQgKiB2YXIgZW52ID0gbmV3IFRvbmUuRW52ZWxvcGUoe1xuXHRcdCAqIFx0XCJhdHRhY2tcIiA6IDAuMSxcblx0XHQgKiBcdFwiZGVjYXlcIiA6IDAuMixcblx0XHQgKiBcdFwic3VzdGFpblwiIDogMSxcblx0XHQgKiBcdFwicmVsZWFzZVwiIDogMC44LFxuXHRcdCAqIH0pO1xuXHRcdCAqIGVudi5jb25uZWN0KGdhaW5Ob2RlLmdhaW4pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2dldCBhbGwgb2YgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ2RlY2F5Jyxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkVudmVsb3BlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZW4gdHJpZ2dlckF0dGFjayBpcyBjYWxsZWQsIHRoZSBhdHRhY2sgdGltZSBpcyB0aGUgYW1vdW50IG9mXG5cdFx0XHQgKiAgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlIHRvIHJlYWNoIGl0J3MgbWF4aW11bSB2YWx1ZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXR0YWNrID0gb3B0aW9ucy5hdHRhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWZ0ZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZSwgdGhlIHZhbHVlIHdpbGwgZmFsbFxuXHRcdFx0ICogIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSBkZWNheSB0aW1lIHRvIGl0J3Mgc3VzdGFpbiB2YWx1ZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVjYXkgPSBvcHRpb25zLmRlY2F5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogXHRUaGUgc3VzdGFpbiB2YWx1ZSBpcyB0aGUgdmFsdWVcblx0XHRcdCAqIFx0d2hpY2ggdGhlIGVudmVsb3BlIHJlc3RzIGF0IGFmdGVyIHRyaWdnZXJBdHRhY2sgaXNcblx0XHRcdCAqIFx0Y2FsbGVkLCBidXQgYmVmb3JlIHRyaWdnZXJSZWxlYXNlIGlzIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zdXN0YWluID0gb3B0aW9ucy5zdXN0YWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFmdGVyIHRyaWdnZXJSZWxlYXNlIGlzIGNhbGxlZCwgdGhlIGVudmVsb3BlJ3Ncblx0XHRcdCAqICB2YWx1ZSB3aWxsIGZhbGwgdG8gaXQncyBtaW1pbnVtIHZhbHVlIG92ZXIgdGhlXG5cdFx0XHQgKiAgZHVyYXRpb24gb2YgdGhlIHJlbGVhc2UgdGltZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbmV4dCB0aW1lIHRoZSBlbnZlbG9wZSBpcyBhdCBzdGFuZGJ5XG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSAnbGluZWFyJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbmV4dCB0aW1lIHRoZSBlbnZlbG9wZSBpcyBhdCBzdGFuZGJ5XG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gJ2V4cG9uZW50aWFsJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaWcgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlNpZ25hbCgwKTtcblx0ICAgICAgICAvL3NldCB0aGUgYXR0YWNrQ3VydmUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5hdHRhY2tDdXJ2ZSA9IG9wdGlvbnMuYXR0YWNrQ3VydmU7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlQ3VydmUgPSBvcHRpb25zLnJlbGVhc2VDdXJ2ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVudmVsb3BlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgJ3N1c3RhaW4nOiAwLjUsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAxLFxuXHQgICAgICAgICdhdHRhY2tDdXJ2ZSc6ICdsaW5lYXInLFxuXHQgICAgICAgICdyZWxlYXNlQ3VydmUnOiAnZXhwb25lbnRpYWwnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVhZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZW52ZWxvcGUuIFVzZWZ1bCBmb3Jcblx0XHQgKiBzeW5jcm9uaXppbmcgdmlzdWFsIG91dHB1dCB0byB0aGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSB2YWx1ZVxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNoYXBlIG9mIHRoZSBhdHRhY2suXG5cdFx0ICogQ2FuIGJlIGFueSBvZiB0aGVzZSBzdHJpbmdzOlxuXHRcdCAqIDx1bD5cblx0XHQgKiAgIDxsaT5saW5lYXI8L2xpPlxuXHRcdCAqICAgPGxpPmV4cG9uZW50aWFsPC9saT5cblx0XHQgKiAgIDxsaT5zaW5lPC9saT5cblx0XHQgKiAgIDxsaT5jb3NpbmU8L2xpPlxuXHRcdCAqICAgPGxpPmJvdW5jZTwvbGk+XG5cdFx0ICogICA8bGk+cmlwcGxlPC9saT5cblx0XHQgKiAgIDxsaT5zdGVwPC9saT5cblx0XHQgKiA8L3VsPlxuXHRcdCAqIENhbiBhbHNvIGJlIGFuIGFycmF5IHdoaWNoIGRlc2NyaWJlcyB0aGUgY3VydmUuIFZhbHVlc1xuXHRcdCAqIGluIHRoZSBhcnJheSBhcmUgZXZlbmx5IHN1YmRpdmlkZWQgYW5kIGxpbmVhcmx5XG5cdFx0ICogaW50ZXJwb2xhdGVkIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSBhdHRhY2suXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge1N0cmluZ3xBcnJheX1cblx0XHQgKiBAbmFtZSBhdHRhY2tDdXJ2ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogZW52LmF0dGFja0N1cnZlID0gXCJsaW5lYXJcIjtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIGFsc28gYmUgYW4gYXJyYXlcblx0XHQgKiBlbnYuYXR0YWNrQ3VydmUgPSBbMCwgMC4yLCAwLjMsIDAuNCwgMV1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkVudmVsb3BlLnByb3RvdHlwZSwgJ2F0dGFja0N1cnZlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc1N0cmluZyh0aGlzLl9hdHRhY2tDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkodGhpcy5fYXR0YWNrQ3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICAvL2xvb2sgdXAgdGhlIG5hbWUgaW4gdGhlIGN1cnZlcyBhcnJheVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgdHlwZSBpbiBUb25lLkVudmVsb3BlLlR5cGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5FbnZlbG9wZS5UeXBlW3R5cGVdLkluID09PSB0aGlzLl9hdHRhY2tDdXJ2ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvL290aGVyd2lzZSBqdXN0IHJldHVybiB0aGUgYXJyYXlcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY3VydmUpIHtcblx0ICAgICAgICAgICAgLy9jaGVjayBpZiBpdCdzIGEgdmFsaWQgdHlwZVxuXHQgICAgICAgICAgICBpZiAoVG9uZS5FbnZlbG9wZS5UeXBlLmhhc093blByb3BlcnR5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGN1cnZlRGVmID0gVG9uZS5FbnZlbG9wZS5UeXBlW2N1cnZlXTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGN1cnZlRGVmKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gY3VydmVEZWYuSW47XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gY3VydmVEZWY7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0FycmF5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5FbnZlbG9wZTogaW52YWxpZCBjdXJ2ZTogJyArIGN1cnZlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNoYXBlIG9mIHRoZSByZWxlYXNlLiBTZWUgdGhlIGF0dGFjayBjdXJ2ZSB0eXBlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5FbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfEFycmF5fVxuXHRcdCAqIEBuYW1lIHJlbGVhc2VDdXJ2ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogZW52LnJlbGVhc2VDdXJ2ZSA9IFwibGluZWFyXCI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUsICdyZWxlYXNlQ3VydmUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzU3RyaW5nKHRoaXMuX3JlbGVhc2VDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlQ3VydmU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0FycmF5KHRoaXMuX3JlbGVhc2VDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vbG9vayB1cCB0aGUgbmFtZSBpbiB0aGUgY3VydmVzIGFycmF5XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB0eXBlIGluIFRvbmUuRW52ZWxvcGUuVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGVbdHlwZV0uT3V0ID09PSB0aGlzLl9yZWxlYXNlQ3VydmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgLy9vdGhlcndpc2UganVzdCByZXR1cm4gdGhlIGFycmF5XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVsZWFzZUN1cnZlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjdXJ2ZSkge1xuXHQgICAgICAgICAgICAvL2NoZWNrIGlmIGl0J3MgYSB2YWxpZCB0eXBlXG5cdCAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGUuaGFzT3duUHJvcGVydHkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY3VydmVEZWYgPSBUb25lLkVudmVsb3BlLlR5cGVbY3VydmVdO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QoY3VydmVEZWYpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gY3VydmVEZWYuT3V0O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBjdXJ2ZURlZjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5FbnZlbG9wZTogaW52YWxpZCBjdXJ2ZTogJyArIGN1cnZlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjay9kZWNheSBwb3J0aW9uIG9mIHRoZSBBRFNSIGVudmVsb3BlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIGVudmVsb3BlIHNjYWxlcyB0aGUgdmFsZXMuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIGJldHdlZW4gMC0xXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vdHJpZ2dlciB0aGUgYXR0YWNrIDAuNSBzZWNvbmRzIGZyb20gbm93IHdpdGggYSB2ZWxvY2l0eSBvZiAwLjJcblx0XHQgKiAgZW52LnRyaWdnZXJBdHRhY2soXCIrMC41XCIsIDAuMik7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBvcmlnaW5hbEF0dGFjayA9IHRoaXMudG9TZWNvbmRzKHRoaXMuYXR0YWNrKTtcblx0ICAgICAgICB2YXIgYXR0YWNrID0gb3JpZ2luYWxBdHRhY2s7XG5cdCAgICAgICAgdmFyIGRlY2F5ID0gdGhpcy50b1NlY29uZHModGhpcy5kZWNheSk7XG5cdCAgICAgICAgdmVsb2NpdHkgPSBUb25lLmRlZmF1bHRBcmcodmVsb2NpdHksIDEpO1xuXHQgICAgICAgIC8vY2hlY2sgaWYgaXQncyBub3QgYSBjb21wbGV0ZSBhdHRhY2tcblx0ICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAoY3VycmVudFZhbHVlID4gMCkge1xuXHQgICAgICAgICAgICAvL3N1YnRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIGZyb20gdGhlIGF0dGFjayB0aW1lXG5cdCAgICAgICAgICAgIHZhciBhdHRhY2tSYXRlID0gMSAvIGF0dGFjaztcblx0ICAgICAgICAgICAgdmFyIHJlbWFpbmluZ0Rpc3RhbmNlID0gMSAtIGN1cnJlbnRWYWx1ZTtcblx0ICAgICAgICAgICAgLy90aGUgYXR0YWNrIGlzIG5vdyB0aGUgcmVtYWluaW5nIHRpbWVcblx0ICAgICAgICAgICAgYXR0YWNrID0gcmVtYWluaW5nRGlzdGFuY2UgLyBhdHRhY2tSYXRlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2F0dGFja1xuXHQgICAgICAgIGlmICh0aGlzLl9hdHRhY2tDdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLmxpbmVhclJhbXBUbyh2ZWxvY2l0eSwgYXR0YWNrLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2F0dGFja0N1cnZlID09PSAnZXhwb25lbnRpYWwnKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy50YXJnZXRSYW1wVG8odmVsb2NpdHksIGF0dGFjaywgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhdHRhY2sgPiAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgY3VydmUgPSB0aGlzLl9hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICAgICAgLy90YWtlIG9ubHkgYSBwb3J0aW9uIG9mIHRoZSBjdXJ2ZVxuXHQgICAgICAgICAgICBpZiAoYXR0YWNrIDwgb3JpZ2luYWxBdHRhY2spIHtcblx0ICAgICAgICAgICAgICAgIHZhciBwZXJjZW50Q29tcGxldGUgPSAxIC0gYXR0YWNrIC8gb3JpZ2luYWxBdHRhY2s7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2xpY2VJbmRleCA9IE1hdGguZmxvb3IocGVyY2VudENvbXBsZXRlICogdGhpcy5fYXR0YWNrQ3VydmUubGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIGN1cnZlID0gdGhpcy5fYXR0YWNrQ3VydmUuc2xpY2Uoc2xpY2VJbmRleCk7XG5cdCAgICAgICAgICAgICAgICAvL3RoZSBmaXJzdCBpbmRleCBpcyB0aGUgY3VycmVudCB2YWx1ZVxuXHQgICAgICAgICAgICAgICAgY3VydmVbMF0gPSBjdXJyZW50VmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fc2lnLnNldFZhbHVlQ3VydmVBdFRpbWUoY3VydmUsIHRpbWUsIGF0dGFjaywgdmVsb2NpdHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2RlY2F5XG5cdCAgICAgICAgaWYgKGRlY2F5KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy50YXJnZXRSYW1wVG8odmVsb2NpdHkgKiB0aGlzLnN1c3RhaW4sIGRlY2F5LCBhdHRhY2sgKyB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXJzIHRoZSByZWxlYXNlIG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy90cmlnZ2VyIHJlbGVhc2UgaW1tZWRpYXRlbHlcblx0XHQgKiAgZW52LnRyaWdnZXJSZWxlYXNlKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPiAwKSB7XG5cdCAgICAgICAgICAgIHZhciByZWxlYXNlID0gdGhpcy50b1NlY29uZHModGhpcy5yZWxlYXNlKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3JlbGVhc2VDdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NpZy5saW5lYXJSYW1wVG8oMCwgcmVsZWFzZSwgdGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcmVsZWFzZUN1cnZlID09PSAnZXhwb25lbnRpYWwnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaWcudGFyZ2V0UmFtcFRvKDAsIHJlbGVhc2UsIHRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdmFyIGN1cnZlID0gdGhpcy5fcmVsZWFzZUN1cnZlO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWcuY2FuY2VsQW5kSG9sZEF0VGltZSh0aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWcuc2V0VmFsdWVDdXJ2ZUF0VGltZShjdXJ2ZSwgdGltZSwgcmVsZWFzZSwgY3VycmVudFZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzY2hlZHVsZWQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFRoaXMgd2lsbFxuXHRcdCAqICByZXR1cm4gdGhlIHVuY29udmVydGVkIChyYXcpIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgVGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc2lnLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyQXR0YWNrUmVsZWFzZSBpcyBzaG9ydGhhbmQgZm9yIHRyaWdnZXJBdHRhY2ssIHRoZW4gd2FpdGluZ1xuXHRcdCAqICBzb21lIGR1cmF0aW9uLCB0aGVuIHRyaWdnZXJSZWxlYXNlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGR1cmF0aW9uIFRoZSBkdXJhdGlvbiBvZiB0aGUgc3VzdGFpbi5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHRoZW4gdGhlIHJlbGVhc2UgYWZ0ZXIgMC42IHNlY29uZHMuXG5cdFx0ICogZW52LnRyaWdnZXJBdHRhY2tSZWxlYXNlKDAuNik7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbikpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWxzIGFsbCBzY2hlZHVsZWQgZW52ZWxvcGUgY2hhbmdlcyBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gYWZ0ZXJcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIHRoaXMuX3NpZy5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoYWZ0ZXIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBCb3Jyb3dzIHRoZSBjb25uZWN0IG1ldGhvZCBmcm9tIFRvbmUuU2lnbmFsLlxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmNvbm5lY3QgPSBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3Q7XG5cdCAgICAvKipcblx0IFx0ICogIEdlbmVyYXRlIHNvbWUgY29tcGxleCBlbnZlbG9wZSBjdXJ2ZXMuXG5cdCBcdCAqL1xuXHQgICAgKGZ1bmN0aW9uIF9jcmVhdGVDdXJ2ZXMoKSB7XG5cdCAgICAgICAgdmFyIGN1cnZlTGVuID0gMTI4O1xuXHQgICAgICAgIHZhciBpLCBrO1xuXHQgICAgICAgIC8vY29zaW5lIGN1cnZlXG5cdCAgICAgICAgdmFyIGNvc2luZUN1cnZlID0gW107XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgY29zaW5lQ3VydmVbaV0gPSBNYXRoLnNpbihpIC8gKGN1cnZlTGVuIC0gMSkgKiAoTWF0aC5QSSAvIDIpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yaXBwbGUgY3VydmVcblx0ICAgICAgICB2YXIgcmlwcGxlQ3VydmUgPSBbXTtcblx0ICAgICAgICB2YXIgcmlwcGxlQ3VydmVGcmVxID0gNi40O1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbiAtIDE7IGkrKykge1xuXHQgICAgICAgICAgICBrID0gaSAvIChjdXJ2ZUxlbiAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgc2luZVdhdmUgPSBNYXRoLnNpbihrICogKE1hdGguUEkgKiAyKSAqIHJpcHBsZUN1cnZlRnJlcSAtIE1hdGguUEkgLyAyKSArIDE7XG5cdCAgICAgICAgICAgIHJpcHBsZUN1cnZlW2ldID0gc2luZVdhdmUgLyAxMCArIGsgKiAwLjgzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByaXBwbGVDdXJ2ZVtjdXJ2ZUxlbiAtIDFdID0gMTtcblx0ICAgICAgICAvL3N0YWlycyBjdXJ2ZVxuXHQgICAgICAgIHZhciBzdGFpcnNDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIHZhciBzdGVwcyA9IDU7XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgc3RhaXJzQ3VydmVbaV0gPSBNYXRoLmNlaWwoaSAvIChjdXJ2ZUxlbiAtIDEpICogc3RlcHMpIC8gc3RlcHM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaW4tb3V0IGVhc2luZyBjdXJ2ZVxuXHQgICAgICAgIHZhciBzaW5lQ3VydmUgPSBbXTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBrID0gaSAvIChjdXJ2ZUxlbiAtIDEpO1xuXHQgICAgICAgICAgICBzaW5lQ3VydmVbaV0gPSAwLjUgKiAoMSAtIE1hdGguY29zKE1hdGguUEkgKiBrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYSBib3VuY2UgY3VydmVcblx0ICAgICAgICB2YXIgYm91bmNlQ3VydmUgPSBbXTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBrID0gaSAvIChjdXJ2ZUxlbiAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgZnJlcSA9IE1hdGgucG93KGssIDMpICogNCArIDAuMjtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IE1hdGguY29zKGZyZXEgKiBNYXRoLlBJICogMiAqIGspO1xuXHQgICAgICAgICAgICBib3VuY2VDdXJ2ZVtpXSA9IE1hdGguYWJzKHZhbCAqICgxIC0gaykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJbnZlcnQgYSB2YWx1ZSBjdXJ2ZSB0byBtYWtlIGl0IHdvcmsgZm9yIHRoZSByZWxlYXNlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIGZ1bmN0aW9uIGludmVydEN1cnZlKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIHZhciBvdXQgPSBuZXcgQXJyYXkoY3VydmUubGVuZ3RoKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjdXJ2ZS5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgb3V0W2pdID0gMSAtIGN1cnZlW2pdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBvdXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJldmVyc2UgdGhlIGN1cnZlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIGZ1bmN0aW9uIHJldmVyc2VDdXJ2ZShjdXJ2ZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gY3VydmUuc2xpY2UoMCkucmV2ZXJzZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhdHRhY2sgYW5kIHJlbGVhc2UgY3VydmUgYXJyYXlzXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUuVHlwZSA9IHtcblx0ICAgICAgICAgICAgJ2xpbmVhcic6ICdsaW5lYXInLFxuXHQgICAgICAgICAgICAnZXhwb25lbnRpYWwnOiAnZXhwb25lbnRpYWwnLFxuXHQgICAgICAgICAgICAnYm91bmNlJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IGludmVydEN1cnZlKGJvdW5jZUN1cnZlKSxcblx0ICAgICAgICAgICAgICAgIE91dDogYm91bmNlQ3VydmVcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2Nvc2luZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBjb3NpbmVDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogcmV2ZXJzZUN1cnZlKGNvc2luZUN1cnZlKVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnc3RlcCc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBzdGFpcnNDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogaW52ZXJ0Q3VydmUoc3RhaXJzQ3VydmUpXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdyaXBwbGUnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogcmlwcGxlQ3VydmUsXG5cdCAgICAgICAgICAgICAgICBPdXQ6IGludmVydEN1cnZlKHJpcHBsZUN1cnZlKVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnc2luZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBzaW5lQ3VydmUsXG5cdCAgICAgICAgICAgICAgICBPdXQ6IGludmVydEN1cnZlKHNpbmVDdXJ2ZSlcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH07XG5cdCAgICB9KCkpO1xuXHQgICAgLyoqXG5cdFx0ICogIERpc2Nvbm5lY3QgYW5kIGRpc3Bvc2UuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2lnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaWcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgaXMgYSBUb25lLkVudmVsb3BlIGNvbm5lY3RlZCB0byBhIGdhaW4gbm9kZS5cblx0XHQgKiAgICAgICAgICBVbmxpa2UgVG9uZS5FbnZlbG9wZSwgd2hpY2ggb3V0cHV0cyB0aGUgZW52ZWxvcGUncyB2YWx1ZSwgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSBhY2NlcHRzXG5cdFx0ICogICAgICAgICAgYW4gYXVkaW8gc2lnbmFsIGFzIHRoZSBpbnB1dCBhbmQgd2lsbCBhcHBseSB0aGUgZW52ZWxvcGUgdG8gdGhlIGFtcGxpdHVkZVxuXHRcdCAqICAgICAgICAgIG9mIHRoZSBzaWduYWwuIFJlYWQgbW9yZSBhYm91dCBBRFNSIEVudmVsb3BlcyBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW50aGVzaXplciNBRFNSX2VudmVsb3BlKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW52ZWxvcGV9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdIFRoZSBhbW91bnQgb2YgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlIHRvIGdvIGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIHRvIGl0J3MgbWF4aW11bSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHRUaGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgdGhlIGF0dGFjayB0aGF0IGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgXHR0byBmYWxsIHRvIHRoZSBzdXN0YWluIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc3VzdGFpbl1cdFRoZSBwZXJjZW50IG9mIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgdGhlIGVudmVsb3BlIHJlc3RzIGF0IHVudGlsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0dGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0VGhlIGFtb3VudCBvZiB0aW1lIGFmdGVyIHRoZSByZWxlYXNlIGlzIHRyaWdnZXJlZCBpdCB0YWtlcyB0byByZWFjaCAwLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBhbXBFbnYgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSh7XG5cdFx0ICogXHRcImF0dGFja1wiOiAwLjEsXG5cdFx0ICogXHRcImRlY2F5XCI6IDAuMixcblx0XHQgKiBcdFwic3VzdGFpblwiOiAxLjAsXG5cdFx0ICogXHRcInJlbGVhc2VcIjogMC44XG5cdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL2NyZWF0ZSBhbiBvc2NpbGxhdG9yIGFuZCBjb25uZWN0IGl0XG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KGFtcEVudikuc3RhcnQoKTtcblx0XHQgKiAvL3RyaWdnZXIgdGhlIGVudmVsb3BlcyBhdHRhY2sgYW5kIHJlbGVhc2UgXCI4dFwiIGFwYXJ0XG5cdFx0ICogYW1wRW52LnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiOHRcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkFtcGxpdHVkZUVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXQgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIHRoaXMuX3NpZy5jb25uZWN0KHRoaXMub3V0cHV0LmdhaW4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUsIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBBbmFseXNlck5vZGUuZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSBwb2x5ZmlsbFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCFBbmFseXNlck5vZGUucHJvdG90eXBlLmdldEZsb2F0VGltZURvbWFpbkRhdGEpIHtcblx0ICAgICAgICAgICAgLy9yZWZlcmVuY2VkIGh0dHBzOi8vZ2l0aHViLmNvbS9tb2hheW9uYW8vZ2V0LWZsb2F0LXRpbWUtZG9tYWluLWRhdGFcblx0ICAgICAgICAgICAgQW5hbHlzZXJOb2RlLnByb3RvdHlwZS5nZXRGbG9hdFRpbWVEb21haW5EYXRhID0gZnVuY3Rpb24gKGFycmF5KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdWludDggPSBuZXcgVWludDhBcnJheShhcnJheS5sZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5nZXRCeXRlVGltZURvbWFpbkRhdGEodWludDgpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1aW50OC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGFycmF5W2ldID0gKHVpbnQ4W2ldIC0gMTI4KSAvIDEyODtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBXZWIgQXVkaW8nc1xuXHRcdCAqICAgICAgICAgIFtBbmFseXNlck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jaWRsLWRlZi1BbmFseXNlck5vZGUpLlxuXHRcdCAqICAgICAgICAgIEV4dHJhY3RzIEZGVCBvciBXYXZlZm9ybSBkYXRhIGZyb20gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge1N0cmluZz19IHR5cGUgVGhlIHJldHVybiB0eXBlIG9mIHRoZSBhbmFseXNpcywgZWl0aGVyIFwiZmZ0XCIsIG9yIFwid2F2ZWZvcm1cIi5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBzaXplIFRoZSBzaXplIG9mIHRoZSBGRlQuIFZhbHVlIG11c3QgYmUgYSBwb3dlciBvZlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ3NpemUnXG5cdCAgICAgICAgXSwgVG9uZS5BbmFseXNlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtBbmFseXNlck5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVBbmFseXNlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNpcyB0eXBlXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYnVmZmVyIHRoYXQgdGhlIEZGVCBkYXRhIGlzIHdyaXR0ZW4gdG9cblx0XHRcdCAqICBAdHlwZSB7VHlwZWRBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICAvL3NldCB0aGUgdmFsdWVzIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuc2l6ZSA9IG9wdGlvbnMuc2l6ZTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BbmFseXNlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdzaXplJzogMTAyNCxcblx0ICAgICAgICAndHlwZSc6ICdmZnQnLFxuXHQgICAgICAgICdzbW9vdGhpbmcnOiAwLjhcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUG9zc2libGUgcmV0dXJuIHR5cGVzIG9mIGFuYWx5c2VyLmdldFZhbHVlKClcblx0XHQgKiAgQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIuVHlwZSA9IHtcblx0ICAgICAgICBXYXZlZm9ybTogJ3dhdmVmb3JtJyxcblx0ICAgICAgICBGRlQ6ICdmZnQnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJ1biB0aGUgYW5hbHlzaXMgZ2l2ZW4gdGhlIGN1cnJlbnQgc2V0dGluZ3MgYW5kIHJldHVybiB0aGVcblx0XHQgKiAgcmVzdWx0IGFzIGEgVHlwZWRBcnJheS5cblx0XHQgKiAgQHJldHVybnMge1R5cGVkQXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5BbmFseXNlci5UeXBlLkZGVCkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5nZXRGbG9hdEZyZXF1ZW5jeURhdGEodGhpcy5fYnVmZmVyKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQW5hbHlzZXIuVHlwZS5XYXZlZm9ybSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5nZXRGbG9hdFRpbWVEb21haW5EYXRhKHRoaXMuX2J1ZmZlcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzaXplIG9mIGFuYWx5c2lzLiBUaGlzIG11c3QgYmUgYSBwb3dlciBvZiB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5BbmFseXNlciNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLCAnc2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5mZnRTaXplID0gc2l6ZSAqIDI7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFuYWx5c2lzIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGFuYWx5c2VyLmdldFZhbHVlKCksIGVpdGhlciBcImZmdFwiIG9yIFwid2F2ZWZvcm1cIi5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQW5hbHlzZXIjXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFuYWx5c2VyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodHlwZSAhPT0gVG9uZS5BbmFseXNlci5UeXBlLldhdmVmb3JtICYmIHR5cGUgIT09IFRvbmUuQW5hbHlzZXIuVHlwZS5GRlQpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RvbmUuQW5hbHlzZXI6IGludmFsaWQgdHlwZTogJyArIHR5cGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIDAgcmVwcmVzZW50cyBubyB0aW1lIGF2ZXJhZ2luZyB3aXRoIHRoZSBsYXN0IGFuYWx5c2lzIGZyYW1lLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5BbmFseXNlciNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBzbW9vdGhpbmdcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFuYWx5c2VyLnByb3RvdHlwZSwgJ3Ntb290aGluZycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zbW9vdGhpbmdUaW1lQ29uc3RhbnQgPSB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkFuYWx5c2VyfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BbmFseXNlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ29tcHJlc3NvciBpcyBhIHRoaW4gd3JhcHBlciBhcm91bmQgdGhlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgW0R5bmFtaWNzQ29tcHJlc3Nvck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWR5bmFtaWNzY29tcHJlc3Nvcm5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKiAgICAgICAgIENvbXByZXNzaW9uIHJlZHVjZXMgdGhlIHZvbHVtZSBvZiBsb3VkIHNvdW5kcyBvciBhbXBsaWZpZXMgcXVpZXQgc291bmRzXG5cdFx0ICogICAgICAgICBieSBuYXJyb3dpbmcgb3IgXCJjb21wcmVzc2luZ1wiIGFuIGF1ZGlvIHNpZ25hbCdzIGR5bmFtaWMgcmFuZ2UuXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRHluYW1pY19yYW5nZV9jb21wcmVzc2lvbikuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc3xPYmplY3R9IFt0aHJlc2hvbGRdIFRoZSB2YWx1ZSBhYm92ZSB3aGljaCB0aGUgY29tcHJlc3Npb24gc3RhcnRzIHRvIGJlIGFwcGxpZWQuXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IFtyYXRpb10gVGhlIGdhaW4gcmVkdWN0aW9uIHJhdGlvLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjb21wID0gbmV3IFRvbmUuQ29tcHJlc3NvcigtMzAsIDMpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db21wcmVzc29yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCcsXG5cdCAgICAgICAgICAgICdyYXRpbydcblx0ICAgICAgICBdLCBUb25lLkNvbXByZXNzb3IpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbXByZXNzb3Igbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEeW5hbWljc0NvbXByZXNzb3JOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0aHJlc2hvbGQgdmF1ZVxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fY29tcHJlc3Nvci50aHJlc2hvbGQsXG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWNpYmVscyxcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBmYWxzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhdHRhY2sgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9jb21wcmVzc29yLmF0dGFjaywgVG9uZS5UeXBlLlRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByZWxlYXNlIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX2NvbXByZXNzb3IucmVsZWFzZSwgVG9uZS5UeXBlLlRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBrbmVlIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmtuZWUgPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2NvbXByZXNzb3Iua25lZSxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlY2liZWxzLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJhdGlvIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJhdGlvID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9jb21wcmVzc29yLnJhdGlvLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAna25lZScsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJyxcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyYXRpbycsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5zZXQob3B0aW9ucyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Db21wcmVzc29yLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncmF0aW8nOiAxMixcblx0ICAgICAgICAndGhyZXNob2xkJzogLTI0LFxuXHQgICAgICAgICdyZWxlYXNlJzogMC4yNSxcblx0ICAgICAgICAnYXR0YWNrJzogMC4wMDMsXG5cdCAgICAgICAgJ2tuZWUnOiAzMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Db21wcmVzc29yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbXByZXNzb3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdrbmVlJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnLFxuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JhdGlvJyxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmF0dGFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVsZWFzZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnRocmVzaG9sZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy50aHJlc2hvbGQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmF0aW8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmF0aW8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMua25lZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5rbmVlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Db21wcmVzc29yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQWRkIGEgc2lnbmFsIGFuZCBhIG51bWJlciBvciB0d28gc2lnbmFscy4gV2hlbiBubyB2YWx1ZSBpc1xuXHRcdCAqICAgICAgICAgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLCBUb25lLkFkZCB3aWxsIHN1bSA8Y29kZT5pbnB1dFswXTwvY29kZT5cblx0XHQgKiAgICAgICAgIGFuZCA8Y29kZT5pbnB1dFsxXTwvY29kZT4uIElmIGEgdmFsdWUgaXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLCBcblx0XHQgKiAgICAgICAgIHRoZSBpdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBpbnB1dC5cblx0XHQgKiAgXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWUgSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIFRvbmUuQWRkIHdpbGwgc3VtIHRoZSBmaXJzdFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWNvbmQgaW5wdXRzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDIpO1xuXHRcdCAqIHZhciBhZGQgPSBuZXcgVG9uZS5BZGQoMik7XG5cdFx0ICogc2lnbmFsLmNvbm5lY3QoYWRkKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgYWRkIGVxdWFscyA0XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pZiBjb25zdHJ1Y3RlZCB3aXRoIG5vIGFyZ3VtZW50c1xuXHRcdCAqIC8vaXQgd2lsbCBhZGQgdGhlIGZpcnN0IGFuZCBzZWNvbmQgaW5wdXRzXG5cdFx0ICogdmFyIGFkZCA9IG5ldyBUb25lLkFkZCgpO1xuXHRcdCAqIHZhciBzaWcwID0gbmV3IFRvbmUuU2lnbmFsKDMpLmNvbm5lY3QoYWRkLCAwLCAwKTtcblx0XHQgKiB2YXIgc2lnMSA9IG5ldyBUb25lLlNpZ25hbCg0KS5jb25uZWN0KGFkZCwgMCwgMSk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGFkZCBlcXVhbHMgNy4gXG5cdFx0ICovXG5cdCAgICBUb25lLkFkZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzdW1taW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IHRoaXMuaW5wdXRbMF0gPSB0aGlzLmlucHV0WzFdID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5TaWduYWwodmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNvbm5lY3QodGhpcy5fc3VtKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFkZCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BZGR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQWRkLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3VtLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdW0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFkZDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBNdWx0aXBseSB0d28gaW5jb21pbmcgc2lnbmFscy4gT3IsIGlmIGEgbnVtYmVyIGlzIGdpdmVuIGluIHRoZSBjb25zdHJ1Y3Rvcixcblx0XHQgKiAgICAgICAgICBtdWx0aXBsaWVzIHRoZSBpbmNvbWluZyBzaWduYWwgYnkgdGhhdCB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlIENvbnN0YW50IHZhbHVlIHRvIG11bHRpcGxlLiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIHJldHVybiB0aGUgcHJvZHVjdCBvZiB0aGUgZmlyc3QgYW5kIHNlY29uZCBpbnB1dHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KCk7XG5cdFx0ICogdmFyIHNpZ0EgPSBuZXcgVG9uZS5TaWduYWwoMyk7XG5cdFx0ICogdmFyIHNpZ0IgPSBuZXcgVG9uZS5TaWduYWwoNCk7XG5cdFx0ICogc2lnQS5jb25uZWN0KG11bHQsIDAsIDApO1xuXHRcdCAqIHNpZ0IuY29ubmVjdChtdWx0LCAwLCAxKTtcblx0XHQgKiAvL291dHB1dCBvZiBtdWx0IGlzIDEyLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMTApO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMikuY29ubmVjdChtdWx0KTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgbXVsdCBpcyAyMC5cblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGlwbHkgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXQgbm9kZSBpcyB0aGUgc2FtZSBhcyB0aGUgb3V0cHV0IG5vZGVcblx0XHRcdCAqICBpdCBpcyBhbHNvIHRoZSBHYWluTm9kZSB3aGljaCBoYW5kbGVzIHRoZSBzY2FsaW5nIG9mIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICpcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHQgPSB0aGlzLmlucHV0WzBdID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHNjYWxpbmcgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvUGFyYW19XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFsxXSA9IHRoaXMub3V0cHV0LmdhaW47XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyh2YWx1ZSwgMCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NdWx0aXBseSwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk11bHRpcGx5fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpcGx5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbXVsdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk11bHRpcGx5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTmVnYXRlIHRoZSBpbmNvbWluZyBzaWduYWwuIGkuZS4gYW4gaW5wdXQgc2lnbmFsIG9mIDEwIHdpbGwgb3V0cHV0IC0xMFxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBuZWcgPSBuZXcgVG9uZS5OZWdhdGUoKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKC0yKS5jb25uZWN0KG5lZyk7XG5cdFx0ICogLy9vdXRwdXQgb2YgbmVnIGlzIHBvc2l0aXZlIDIuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5OZWdhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbmVnYXRpb24gaXMgZG9uZSBieSBtdWx0aXBseWluZyBieSAtMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk11bHRpcGx5KC0xKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5lZ2F0ZSwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5OZWdhdGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTmVnYXRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTmVnYXRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU3VidHJhY3QgdGhlIHNpZ25hbCBjb25uZWN0ZWQgdG8gPGNvZGU+aW5wdXRbMV08L2NvZGU+IGZyb20gdGhlIHNpZ25hbCBjb25uZWN0ZWQgXG5cdFx0ICogICAgICAgICB0byA8Y29kZT5pbnB1dFswXTwvY29kZT4uIElmIGFuIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3RvciwgdGhlIFxuXHRcdCAqICAgICAgICAgc2lnbmFscyA8Y29kZT4udmFsdWU8L2NvZGU+IHdpbGwgYmUgc3VidHJhY3RlZCBmcm9tIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3VidHJhY3QgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsLiBJZiB0aGUgdmFsdWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBpcyBvbWl0dGVkLCBpdCB3aWxsIHN1YnRyYWN0IHRoZSBzZWNvbmQgc2lnbmFsIGZyb20gdGhlIGZpcnN0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzdWIgPSBuZXcgVG9uZS5TdWJ0cmFjdCgxKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDQpLmNvbm5lY3Qoc3ViKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2Ygc3ViIGlzIDMuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzdWIgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHRcdCAqIHZhciBzaWdBID0gbmV3IFRvbmUuU2lnbmFsKDEwKTtcblx0XHQgKiB2YXIgc2lnQiA9IG5ldyBUb25lLlNpZ25hbCgyLjUpO1xuXHRcdCAqIHNpZ0EuY29ubmVjdChzdWIsIDAsIDApO1xuXHRcdCAqIHNpZ0IuY29ubmVjdChzdWIsIDAsIDEpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIHN1YiBpcyA3LjVcblx0XHQgKi9cblx0ICAgIFRvbmUuU3VidHJhY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc3VtbWluZyBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdW0gPSB0aGlzLmlucHV0WzBdID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbmVnYXRlIHRoZSBpbnB1dCBvZiB0aGUgc2Vjb25kIGlucHV0IGJlZm9yZSBjb25uZWN0aW5nIGl0XG5cdFx0XHQgKiAgdG8gdGhlIHN1bW1pbmcgbm9kZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5OZWdhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25lZyA9IG5ldyBUb25lLk5lZ2F0ZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSB2YWx1ZSBpcyBzZXRcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLlNpZ25hbCh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uY2hhaW4odGhpcy5fbmVnLCB0aGlzLl9zdW0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3VidHJhY3QsIFRvbmUuU2lnbmFsKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsQmFzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdWJ0cmFjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX25lZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbmVnID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdW0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3VidHJhY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBDb252ZXJ0IGFuIGluY29taW5nIHNpZ25hbCBiZXR3ZWVuIDAsIDEgdG8gYW4gZXF1YWwgcG93ZXIgZ2FpbiBzY2FsZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZXFQb3dHYWluID0gbmV3IFRvbmUuRXF1YWxQb3dlckdhaW4oKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRXF1YWxQb3dlckdhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXFQb3dlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnModmFsKSA8IDAuMDAxKSB7XG5cdCAgICAgICAgICAgICAgICAvL3Nob3VsZCBvdXRwdXQgMCB3aGVuIGlucHV0IGlzIDBcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZXF1YWxQb3dlclNjYWxlKHZhbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyksIDQwOTYpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRXF1YWxQb3dlckdhaW4sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRXF1YWxQb3dlckdhaW59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXF1YWxQb3dlckdhaW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZXFQb3dlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXFQb3dlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRXF1YWxQb3dlckdhaW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzICBUb25lLkNyb3NzZmFkZSBwcm92aWRlcyBlcXVhbCBwb3dlciBmYWRpbmcgYmV0d2VlbiB0d28gaW5wdXRzLlxuXHRcdCAqICAgICAgICAgTW9yZSBvbiBjcm9zc2ZhZGluZyB0ZWNobmlxdWUgW2hlcmVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZhZGVfKGF1ZGlvX2VuZ2luZWVyaW5nKSNDcm9zc2ZhZGluZykuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogQHBhcmFtIHtOb3JtYWxSYW5nZX0gW2luaXRpYWxGYWRlPTAuNV1cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBjcm9zc0ZhZGUgPSBuZXcgVG9uZS5Dcm9zc0ZhZGUoMC41KTtcblx0XHQgKiAvL2Nvbm5lY3QgZWZmZWN0IEEgdG8gY3Jvc3NmYWRlIGZyb21cblx0XHQgKiAvL2VmZmVjdCBvdXRwdXQgMCB0byBjcm9zc2ZhZGUgaW5wdXQgMFxuXHRcdCAqIGVmZmVjdEEuY29ubmVjdChjcm9zc0ZhZGUsIDAsIDApO1xuXHRcdCAqIC8vY29ubmVjdCBlZmZlY3QgQiB0byBjcm9zc2ZhZGUgZnJvbVxuXHRcdCAqIC8vZWZmZWN0IG91dHB1dCAwIHRvIGNyb3NzZmFkZSBpbnB1dCAxXG5cdFx0ICogZWZmZWN0Qi5jb25uZWN0KGNyb3NzRmFkZSwgMCwgMSk7XG5cdFx0ICogY3Jvc3NGYWRlLmZhZGUudmFsdWUgPSAwO1xuXHRcdCAqIC8vIF4gb25seSBlZmZlY3RBIGlzIG91dHB1dFxuXHRcdCAqIGNyb3NzRmFkZS5mYWRlLnZhbHVlID0gMTtcblx0XHQgKiAvLyBeIG9ubHkgZWZmZWN0QiBpcyBvdXRwdXRcblx0XHQgKiBjcm9zc0ZhZGUuZmFkZS52YWx1ZSA9IDAuNTtcblx0XHQgKiAvLyBeIHRoZSB0d28gc2lnbmFscyBhcmUgbWl4ZWQgZXF1YWxseS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3Jvc3NGYWRlID0gZnVuY3Rpb24gKGluaXRpYWxGYWRlKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzBdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hID0gdGhpcy5pbnB1dFswXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+aW5wdXRbMV08L2NvZGU+LlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmIgPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogXHRUaGUgbWl4IGJldHdlZW4gdGhlIHR3byBpbnB1dHMuIEEgZmFkZSB2YWx1ZSBvZiAwXG5cdFx0XHQgKiBcdHdpbGwgb3V0cHV0IDEwMCUgPGNvZGU+aW5wdXRbMF08L2NvZGU+IGFuZFxuXHRcdFx0ICogXHRhIHZhbHVlIG9mIDEgd2lsbCBvdXRwdXQgMTAwJSA8Y29kZT5pbnB1dFsxXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZSA9IG5ldyBUb25lLlNpZ25hbChUb25lLmRlZmF1bHRBcmcoaW5pdGlhbEZhZGUsIDAuNSksIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZXF1YWwgcG93ZXIgZ2FpbiBjcm9zcyBmYWRlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5FcXVhbFBvd2VyR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJBID0gbmV3IFRvbmUuRXF1YWxQb3dlckdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBlcXVhbCBwb3dlciBnYWluIGNyb3NzIGZhZGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkVxdWFsUG93ZXJHYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckIgPSBuZXcgVG9uZS5FcXVhbFBvd2VyR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGludmVydCB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uZSA9IHRoaXMuY29udGV4dC5nZXRDb25zdGFudCgxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpbnZlcnQgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnZlcnQgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmEuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5iLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuZmFkZS5jaGFpbih0aGlzLl9lcXVhbFBvd2VyQiwgdGhpcy5iLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX29uZS5jb25uZWN0KHRoaXMuX2ludmVydCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5mYWRlLmNvbm5lY3QodGhpcy5faW52ZXJ0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9pbnZlcnQuY2hhaW4odGhpcy5fZXF1YWxQb3dlckEsIHRoaXMuYS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZmFkZScpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3Jvc3NGYWRlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ3Jvc3NGYWRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNyb3NzRmFkZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmYWRlJyk7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJBID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmFkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mYWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9pbnZlcnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ludmVydCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb25lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5iLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNyb3NzRmFkZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkZpbHRlciBpcyBhIGZpbHRlciB3aGljaCBhbGxvd3MgZm9yIGFsbCBvZiB0aGUgc2FtZSBuYXRpdmUgbWV0aG9kc1xuXHRcdCAqICAgICAgICAgIGFzIHRoZSBbQmlxdWFkRmlsdGVyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtYmlxdWFkZmlsdGVybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICAgICAgICAgIFRvbmUuRmlsdGVyIGhhcyB0aGUgYWRkZWQgYWJpbGl0eSB0byBzZXQgdGhlIGZpbHRlciByb2xsb2ZmIGF0IC0xMlxuXHRcdCAqICAgICAgICAgIChkZWZhdWx0KSwgLTI0IGFuZCAtNDguXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVyLlxuXHRcdCAqICBAcGFyYW0ge3N0cmluZz19IHR5cGUgVGhlIHR5cGUgb2YgZmlsdGVyLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHJvbGxvZmYgVGhlIGRyb3AgaW4gZGVjaWJlbHMgcGVyIG9jdGF2ZSBhZnRlciB0aGUgY3V0b2ZmIGZyZXF1ZW5jeS5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIGNob2ljZXM6IC0xMiwgLTI0LCBhbmQgLTQ4XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBmaWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIoMjAwLCBcImhpZ2hwYXNzXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAncm9sbG9mZidcblx0ICAgICAgICBdLCBUb25lLkZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZpbHRlcihzKVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwoMCwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBvZiB0aGUgZmlsdGVyLCBvbmx5IHVzZWQgaW4gY2VydGFpbiBmaWx0ZXIgdHlwZXNcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG5ldyBUb25lLlNpZ25hbCh7XG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZ2Fpbixcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBmYWxzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBRIG9yIFF1YWxpdHkgb2YgdGhlIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5RKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdHlwZSBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge3N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcm9sbG9mZiB2YWx1ZSBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcm9sbG9mZiA9IG9wdGlvbnMucm9sbG9mZjtcblx0ICAgICAgICAvL3NldCB0aGUgcm9sbG9mZjtcblx0ICAgICAgICB0aGlzLnJvbGxvZmYgPSBvcHRpb25zLnJvbGxvZmY7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GaWx0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICpcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GaWx0ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnbG93cGFzcycsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDM1MCxcblx0ICAgICAgICAncm9sbG9mZic6IC0xMixcblx0ICAgICAgICAnUSc6IDEsXG5cdCAgICAgICAgJ2dhaW4nOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGZpbHRlci4gVHlwZXM6IFwibG93cGFzc1wiLCBcImhpZ2hwYXNzXCIsXG5cdFx0ICogXCJiYW5kcGFzc1wiLCBcImxvd3NoZWxmXCIsIFwiaGlnaHNoZWxmXCIsIFwibm90Y2hcIiwgXCJhbGxwYXNzXCIsIG9yIFwicGVha2luZ1wiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZpbHRlciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZpbHRlci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdmFyIHR5cGVzID0gW1xuXHQgICAgICAgICAgICAgICAgJ2xvd3Bhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ2hpZ2hwYXNzJyxcblx0ICAgICAgICAgICAgICAgICdiYW5kcGFzcycsXG5cdCAgICAgICAgICAgICAgICAnbG93c2hlbGYnLFxuXHQgICAgICAgICAgICAgICAgJ2hpZ2hzaGVsZicsXG5cdCAgICAgICAgICAgICAgICAnbm90Y2gnLFxuXHQgICAgICAgICAgICAgICAgJ2FsbHBhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ3BlYWtpbmcnXG5cdCAgICAgICAgICAgIF07XG5cdCAgICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5GaWx0ZXI6IGludmFsaWQgdHlwZSAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXS50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJvbGxvZmYgb2YgdGhlIGZpbHRlciB3aGljaCBpcyB0aGUgZHJvcCBpbiBkYlxuXHRcdCAqIHBlciBvY3RhdmUuIEltcGxlbWVudGVkIGludGVybmFsbHkgYnkgY2FzY2FkaW5nIGZpbHRlcnMuXG5cdFx0ICogT25seSBhY2NlcHRzIHRoZSB2YWx1ZXMgLTEyLCAtMjQsIC00OCBhbmQgLTk2LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZpbHRlciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHJvbGxvZmZcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZpbHRlci5wcm90b3R5cGUsICdyb2xsb2ZmJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9sbG9mZjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJvbGxvZmYpIHtcblx0ICAgICAgICAgICAgcm9sbG9mZiA9IHBhcnNlSW50KHJvbGxvZmYsIDEwKTtcblx0ICAgICAgICAgICAgdmFyIHBvc3NpYmlsaXRpZXMgPSBbXG5cdCAgICAgICAgICAgICAgICAtMTIsXG5cdCAgICAgICAgICAgICAgICAtMjQsXG5cdCAgICAgICAgICAgICAgICAtNDgsXG5cdCAgICAgICAgICAgICAgICAtOTZcblx0ICAgICAgICAgICAgXTtcblx0ICAgICAgICAgICAgdmFyIGNhc2NhZGluZ0NvdW50ID0gcG9zc2liaWxpdGllcy5pbmRleE9mKHJvbGxvZmYpO1xuXHQgICAgICAgICAgICAvL2NoZWNrIHRoZSByb2xsb2ZmIGlzIHZhbGlkXG5cdCAgICAgICAgICAgIGlmIChjYXNjYWRpbmdDb3VudCA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUb25lLkZpbHRlcjogcm9sbG9mZiBjYW4gb25seSBiZSAtMTIsIC0yNCwgLTQ4IG9yIC05NicpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNhc2NhZGluZ0NvdW50ICs9IDE7XG5cdCAgICAgICAgICAgIHRoaXMuX3JvbGxvZmYgPSByb2xsb2ZmO1xuXHQgICAgICAgICAgICAvL2ZpcnN0IGRpc2Nvbm5lY3QgdGhlIGZpbHRlcnMgYW5kIHRocm93IHRoZW0gYXdheVxuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0gPSBudWxsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnMgPSBuZXcgQXJyYXkoY2FzY2FkaW5nQ291bnQpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjb3VudCA9IDA7IGNvdW50IDwgY2FzY2FkaW5nQ291bnQ7IGNvdW50KyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBmaWx0ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgICAgICBmaWx0ZXIudHlwZSA9IHRoaXMuX3R5cGU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KGZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdChmaWx0ZXIuZGV0dW5lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuUS5jb25uZWN0KGZpbHRlci5RKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZ2Fpbi5jb25uZWN0KGZpbHRlci5nYWluKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbY291bnRdID0gZmlsdGVyO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vY29ubmVjdCB0aGVtIHVwXG5cdCAgICAgICAgICAgIHZhciBjb25uZWN0aW9uQ2hhaW4gPSBbdGhpcy5pbnB1dF0uY29uY2F0KHRoaXMuX2ZpbHRlcnMpLmNvbmNhdChbdGhpcy5vdXRwdXRdKTtcblx0ICAgICAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIGNvbm5lY3Rpb25DaGFpbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLlEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5nYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmdhaW4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWwgaW50byB0aHJlZSBiYW5kcyAobG93LCBtaWQsIGhpZ2gpXG5cdFx0ICogICAgICAgICB3aXRoIHR3byBjcm9zc292ZXIgZnJlcXVlbmN5IGNvbnRyb2xzLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2xvd0ZyZXF1ZW5jeV0gdGhlIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2hpZ2hGcmVxdWVuY3ldIHRoZSBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZFNwbGl0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5J1xuXHQgICAgICAgIF0sIFRvbmUuTXVsdGliYW5kU3BsaXQpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGlucHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3V0cHV0c1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgQXJyYXkoMyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvdyBiYW5kLiBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93ID0gdGhpcy5vdXRwdXRbMF0gPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2xvd3Bhc3MnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbG93ZXIgZmlsdGVyIG9mIHRoZSBtaWQgYmFuZFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG93TWlkRmlsdGVyID0gbmV3IFRvbmUuRmlsdGVyKDAsICdoaWdocGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgYmFuZCBvdXRwdXQuIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMV08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLm91dHB1dFsxXSA9IG5ldyBUb25lLkZpbHRlcigwLCAnbG93cGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBoaWdoIGJhbmQgb3V0cHV0LiBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzJdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IHRoaXMub3V0cHV0WzJdID0gbmV3IFRvbmUuRmlsdGVyKDAsICdoaWdocGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmxvd0ZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5oaWdoRnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcXVhbGl0eSBvZiBhbGwgdGhlIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLlEpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZmFuKHRoaXMubG93LCB0aGlzLmhpZ2gpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4odGhpcy5fbG93TWlkRmlsdGVyLCB0aGlzLm1pZCk7XG5cdCAgICAgICAgLy90aGUgZnJlcXVlbmN5IGNvbnRyb2wgc2lnbmFsXG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kuY29ubmVjdCh0aGlzLmxvdy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fbG93TWlkRmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5LmNvbm5lY3QodGhpcy5taWQuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kuY29ubmVjdCh0aGlzLmhpZ2guZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3RoZSBRIHZhbHVlXG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5sb3cuUSk7XG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5fbG93TWlkRmlsdGVyLlEpO1xuXHQgICAgICAgIHRoaXMuUS5jb25uZWN0KHRoaXMubWlkLlEpO1xuXHQgICAgICAgIHRoaXMuUS5jb25uZWN0KHRoaXMuaGlnaC5RKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NdWx0aWJhbmRTcGxpdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kU3BsaXQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IDQwMCxcblx0ICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IDI1MDAsXG5cdCAgICAgICAgJ1EnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NdWx0aWJhbmRTcGxpdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRTcGxpdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmxvdy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sb3cgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xvd01pZEZpbHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbG93TWlkRmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oaWdoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTXVsdGliYW5kU3BsaXQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkVRMyBpcyBhIHRocmVlIGJhbmQgRVEgd2l0aCBjb250cm9sIG92ZXIgbG93LCBtaWQsIGFuZCBoaWdoIGdhaW4gYXNcblx0XHQgKiAgICAgICAgIHdlbGwgYXMgdGhlIGxvdyBhbmQgaGlnaCBjcm9zc292ZXIgZnJlcXVlbmNpZXMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfE9iamVjdH0gW2xvd0xldmVsXSBUaGUgZ2FpbiBhcHBsaWVkIHRvIHRoZSBsb3dzLlxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbbWlkTGV2ZWxdIFRoZSBnYWluIGFwcGxpZWQgdG8gdGhlIG1pZC5cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc30gW2hpZ2hMZXZlbF0gVGhlIGdhaW4gYXBwbGllZCB0byB0aGUgaGlnaC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZXEgPSBuZXcgVG9uZS5FUTMoLTEwLCAzLCAtMjApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FUTMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdoaWdoJ1xuXHQgICAgICAgIF0sIFRvbmUuRVEzKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvdXRwdXQgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG11bHRpYmFuZCBzcGxpdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpYmFuZFNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aWJhbmRTcGxpdCh7XG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knOiBvcHRpb25zLmxvd0ZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiBvcHRpb25zLmhpZ2hGcmVxdWVuY3lcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBmb3IgdGhlIGxvd2VyIHNpZ25hbHNcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG93R2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5sb3csIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gZm9yIHRoZSBtaWQgc2lnbmFsc1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLm1pZCwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBoaWdoIHBhcnRcblx0XHRcdCAqIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faGlnaEdhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMuaGlnaCwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBsb3cgcGFydFxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3cgPSB0aGlzLl9sb3dHYWluLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBpbiBkZWNpYmVscyBvZiB0aGUgbWlkIHBhcnRcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gdGhpcy5fbWlkR2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIGhpZ2ggcGFydFxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoID0gdGhpcy5faGlnaEdhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgUSB2YWx1ZSBmb3IgYWxsIG9mIHRoZSBmaWx0ZXJzLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSB0aGlzLl9tdWx0aWJhbmRTcGxpdC5RO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IHRoaXMuX211bHRpYmFuZFNwbGl0Lmxvd0ZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL2hpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IHRoaXMuX211bHRpYmFuZFNwbGl0LmhpZ2hGcmVxdWVuY3k7XG5cdCAgICAgICAgLy90aGUgZnJlcXVlbmN5IGJhbmRzXG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQubG93LmNoYWluKHRoaXMuX2xvd0dhaW4sIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdC5taWQuY2hhaW4odGhpcy5fbWlkR2FpbiwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0LmhpZ2guY2hhaW4odGhpcy5faGlnaEdhaW4sIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FUTMsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRVEzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdsb3cnOiAwLFxuXHQgICAgICAgICdtaWQnOiAwLFxuXHQgICAgICAgICdoaWdoJzogMCxcblx0ICAgICAgICAnbG93RnJlcXVlbmN5JzogNDAwLFxuXHQgICAgICAgICdoaWdoRnJlcXVlbmN5JzogMjUwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FUTN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRVEzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbG93R2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbG93R2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkR2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faGlnaEdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2hpZ2hHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvdyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FUTM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgUGVyZm9ybXMgYSBsaW5lYXIgc2NhbGluZyBvbiBhbiBpbnB1dCBzaWduYWwuXG5cdFx0ICogICAgICAgICAgU2NhbGVzIGEgTm9ybWFsUmFuZ2UgaW5wdXQgdG8gYmV0d2VlblxuXHRcdCAqICAgICAgICAgIG91dHB1dE1pbiBhbmQgb3V0cHV0TWF4LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1pbj0wXSBUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDAuIFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1heD0xXVx0VGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAxLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2NhbGUgPSBuZXcgVG9uZS5TY2FsZSg1MCwgMTAwKTtcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDAuNSkuY29ubmVjdChzY2FsZSk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIHNjYWxlIGVxdWFscyA3NVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZSA9IGZ1bmN0aW9uIChvdXRwdXRNaW4sIG91dHB1dE1heCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vdXRwdXRNaW4gPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TWluLCAwKTtcblx0ICAgICAgICAvKiogXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3V0cHV0TWF4ID0gVG9uZS5kZWZhdWx0QXJnKG91dHB1dE1heCwgMSk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpcGx5KDEpO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWRkID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5BZGQoMCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuY29ubmVjdCh0aGlzLl9hZGQpO1xuXHQgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TY2FsZSwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW4gXG5cdFx0ICogdGhlIHZhbHVlIGlucHV0IHZhbHVlIGlzIDAuIFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZS5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRNaW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0TWluID0gbWluO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlbiBcblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMS4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dE1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXRNYXggPSBtYXg7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgc2V0IHRoZSB2YWx1ZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGUucHJvdG90eXBlLl9zZXRSYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9hZGQudmFsdWUgPSB0aGlzLl9vdXRwdXRNaW47XG5cdCAgICAgICAgdGhpcy5fc2NhbGUudmFsdWUgPSB0aGlzLl9vdXRwdXRNYXggLSB0aGlzLl9vdXRwdXRNaW47XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TY2FsZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hZGQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FkZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TY2FsZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgUGVyZm9ybXMgYW4gZXhwb25lbnRpYWwgc2NhbGluZyBvbiBhbiBpbnB1dCBzaWduYWwuXG5cdFx0ICogICAgICAgICAgU2NhbGVzIGEgTm9ybWFsUmFuZ2UgdmFsdWUgWzAsMV0gZXhwb25lbnRpYWxseVxuXHRcdCAqICAgICAgICAgIHRvIHRoZSBvdXRwdXQgcmFuZ2Ugb2Ygb3V0cHV0TWluIHRvIG91dHB1dE1heC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXRNaW49MF0gVGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAwLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1heD0xXVx0VGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAxLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2V4cG9uZW50PTJdIFRoZSBleHBvbmVudCB3aGljaCBzY2FsZXMgdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2NhbGVFeHAgPSBuZXcgVG9uZS5TY2FsZUV4cCgwLCAxMDAsIDIpO1xuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KHNjYWxlRXhwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVFeHAgPSBmdW5jdGlvbiAob3V0cHV0TWluLCBvdXRwdXRNYXgsIGV4cG9uZW50KSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIGlucHV0IHRvIHRoZSBvdXRwdXQgcmFuZ2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlNjYWxlKG91dHB1dE1pbiwgb3V0cHV0TWF4KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBvd31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLlBvdyhUb25lLmRlZmF1bHRBcmcoZXhwb25lbnQsIDIpKTtcblx0ICAgICAgICB0aGlzLl9leHAuY29ubmVjdCh0aGlzLl9zY2FsZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TY2FsZUV4cCwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIEluc3RlYWQgb2YgaW50ZXJwb2xhdGluZyBsaW5lYXJseSBiZXR3ZWVuIHRoZSA8Y29kZT5taW48L2NvZGU+IGFuZFxuXHRcdCAqIDxjb2RlPm1heDwvY29kZT4gdmFsdWVzLCBzZXR0aW5nIHRoZSBleHBvbmVudCB3aWxsIGludGVycG9sYXRlIGJldHdlZW5cblx0XHQgKiB0aGUgdHdvIHZhbHVlcyB3aXRoIGFuIGV4cG9uZW50aWFsIGN1cnZlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlRXhwI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgZXhwb25lbnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlRXhwLnByb3RvdHlwZSwgJ2V4cG9uZW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwLnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cC52YWx1ZSA9IGV4cDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW5cblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZUV4cCNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1pbiA9IG1pbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW5cblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZUV4cCNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWF4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1heCA9IG1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2NhbGVFeHB9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9leHAuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2V4cCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2NhbGVFeHA7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCBXZWIgQXVkaW8ncyBuYXRpdmUgW0RlbGF5Tm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtZGVsYXlub2RlLWludGVyZmFjZSkuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBkZWxheVRpbWUgVGhlIGRlbGF5IGFwcGxpZWQgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gbWF4RGVsYXkgVGhlIG1heGltdW0gZGVsYXkgdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRGVsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ21heERlbGF5J1xuXHQgICAgICAgIF0sIFRvbmUuRGVsYXkpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbWF4aW11bSBkZWxheSB0aW1lIGluaXRpYWxpemVkIHdpdGggdGhlIG5vZGVcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWF4RGVsYXkgPSBNYXRoLm1heCh0aGlzLnRvU2Vjb25kcyhvcHRpb25zLm1heERlbGF5KSwgdGhpcy50b1NlY29uZHMob3B0aW9ucy5kZWxheVRpbWUpKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbmF0aXZlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlRGVsYXkodGhpcy5fbWF4RGVsYXkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSB0aGUgaW5jb21pbmcgc2lnbmFsIGlzXG5cdFx0XHQgKiAgZGVsYXllZC5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fZGVsYXlOb2RlLmRlbGF5VGltZSxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLlRpbWUsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZGVsYXlUaW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2RlbGF5VGltZScpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRGVsYXksIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EZWxheS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWF4RGVsYXknOiAxLFxuXHQgICAgICAgICdkZWxheVRpbWUnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gZGVsYXkgdGltZS4gVGhpcyBjYW5ub3QgYmUgY2hhbmdlZC4gVGhlIHZhbHVlIGlzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3Rvci5cblx0XHQgKiBAbWVtYmVyb2YgVG9uZS5EZWxheSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBtYXhEZWxheVxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRGVsYXkucHJvdG90eXBlLCAnbWF4RGVsYXknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXhEZWxheTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRGVsYXl9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRlbGF5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdkZWxheVRpbWUnKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRGVsYXk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBDb21iIGZpbHRlcnMgYXJlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcyBmb3IgcGh5c2ljYWwgbW9kZWxpbmcuIFJlYWQgbW9yZVxuXHRcdCAqICAgICAgICAgYWJvdXQgY29tYiBmaWx0ZXJzIG9uIFtDQ1JNQSdzIHdlYnNpdGVdKGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L35qb3MvcGFzcC9GZWVkYmFja19Db21iX0ZpbHRlcnMuaHRtbCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2RlbGF5VGltZV0gVGhlIGRlbGF5IHRpbWUgb2YgdGhlIGZpbHRlci5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZT19IHJlc29uYW5jZSBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIHRoZSBmaWx0ZXIgaGFzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZSdcblx0ICAgICAgICBdLCBUb25lLkZlZWRiYWNrQ29tYkZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZGVsYXkgb2YgdGhlIGNvbWIgZmlsdGVyLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZGVsYXkuZGVsYXlUaW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmZWVkYmFjayBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5yZXNvbmFuY2UsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBmZWVkYmFjayBvZiB0aGUgZGVsYXllZCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gdGhpcy5fZmVlZGJhY2suZ2Fpbjtcblx0ICAgICAgICB0aGlzLl9kZWxheS5jaGFpbih0aGlzLl9mZWVkYmFjaywgdGhpcy5fZGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4xLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiAwLjVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRmVlZGJhY2tDb21iRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBHZXQgdGhlIGN1cnJlbnQgd2F2ZWZvcm0gZGF0YSBvZiB0aGUgY29ubmVjdGVkIGF1ZGlvIHNvdXJjZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHNpemUgVGhlIHNpemUgb2YgdGhlIEZGVC4gVmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICovXG5cdCAgICBUb25lLkZGVCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3NpemUnXSwgVG9uZS5GRlQpO1xuXHQgICAgICAgIG9wdGlvbnMudHlwZSA9IFRvbmUuQW5hbHlzZXIuVHlwZS5GRlQ7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFuYWx5c2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5BbmFseXNlcihvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZGVCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkZGVC5kZWZhdWx0cyA9IHsgJ3NpemUnOiAxMDI0IH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0cyB0aGUgd2F2ZWZvcm0gb2YgdGhlIGF1ZGlvIHNvdXJjZS4gUmV0dXJucyB0aGUgd2F2ZWZvcm0gZGF0YVxuXHRcdCAqICBvZiBsZW5ndGggW3NpemVdKCNzaXplKSBhcyBhIEZsb2F0MzJBcnJheSB3aXRoIHZhbHVlcyBiZXR3ZWVuIC0xIGFuZCAxLlxuXHRcdCAqICBAcmV0dXJucyB7VHlwZWRBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuRkZULnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNpemUgb2YgYW5hbHlzaXMuIFRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkZGVCNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRkZULnByb3RvdHlwZSwgJ3NpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5zaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zaXplID0gc2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRkZUfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GRlQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZGVDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFJldHVybiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYW4gaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoLTEpO1xuXHRcdCAqIHZhciBhYnMgPSBuZXcgVG9uZS5BYnMoKTtcblx0XHQgKiBzaWduYWwuY29ubmVjdChhYnMpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBhYnMgaXMgMS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQWJzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxlc3NUaGFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hYnMgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKE1hdGguYWJzKHZhbCkgPCAwLjAwMSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnModmFsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sIDEwMjQpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQWJzLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgbWV0aG9kXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFic30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BYnMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYWJzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hYnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFicztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkZvbGxvd2VyIGlzIGEgIGNydWRlIGVudmVsb3BlIGZvbGxvd2VyIHdoaWNoIHdpbGwgZm9sbG93XG5cdFx0ICogICAgICAgICAgdGhlIGFtcGxpdHVkZSBvZiBhbiBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogICAgICAgICAgVGFrZSBjYXJlIHdpdGggc21hbGwgKDwgMC4wMikgYXR0YWNrIG9yIGRlY2F5IHZhbHVlc1xuXHRcdCAqICAgICAgICAgIGFzIGZvbGxvd2VyIGhhcyBzb21lIHJpcHBsZSB3aGljaCBpcyBleGFnZ2VyYXRlZFxuXHRcdCAqICAgICAgICAgIGF0IHRoZXNlIHZhbHVlcy4gUmVhZCBtb3JlIGFib3V0IGVudmVsb3BlIGZvbGxvd2VycyAoYWxzbyBrbm93blxuXHRcdCAqICAgICAgICAgIGFzIGVudmVsb3BlIGRldGVjdG9ycykgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRW52ZWxvcGVfZGV0ZWN0b3IpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdIFRoZSByYXRlIGF0IHdoaWNoIHRoZSBmb2xsb3dlciByaXNlcy5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmVsZWFzZSBUaGUgcmF0ZSBhdCB3aGljaCB0aGUgZm9sb3dlciBmYWxscy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZm9sbG93ZXIgPSBuZXcgVG9uZS5Gb2xsb3dlcigwLjIsIDAuNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRm9sbG93ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFic31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWJzID0gbmV3IFRvbmUuQWJzKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxvd3Bhc3MgZmlsdGVyIHdoaWNoIHNtb290aHMgdGhlIGlucHV0XG5cdFx0XHQgKiAgQHR5cGUge0JpcXVhZEZpbHRlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIudHlwZSA9ICdsb3dwYXNzJztcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuZnJlcXVlbmN5LnZhbHVlID0gMDtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuUS52YWx1ZSA9IC0xMDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbmV3IFRvbmUuRGVsYXkodGhpcy5ibG9ja1RpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoaXMga2VlcHMgaXQgZmFyIGZyb20gMCwgZXZlbiBmb3IgdmVyeSBzbWFsbCBkaWZmZXJlbmNlc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMTAwMDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2F0dGFjayA9IG9wdGlvbnMuYXR0YWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JlbGVhc2UgPSBvcHRpb25zLnJlbGVhc2U7XG5cdCAgICAgICAgLy90aGUgc21vb3RoZWQgc2lnbmFsIHRvIGdldCB0aGUgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLl9hYnMsIHRoaXMuX2ZpbHRlciwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vdGhlIGRpZmZlcmVuY2UgcGF0aFxuXHQgICAgICAgIHRoaXMuX2Ficy5jb25uZWN0KHRoaXMuX3N1YiwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyLmNoYWluKHRoaXMuX2RlbGF5LCB0aGlzLl9zdWIpO1xuXHQgICAgICAgIC8vdGhyZXNob2xkIHRoZSBkaWZmZXJlbmNlIGFuZCB1c2UgdGhlIHRocmVzaCB0byBzZXQgdGhlIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuX3N1Yi5jaGFpbih0aGlzLl9tdWx0LCB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMsIHRoaXMuX2ZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBhdHRhY2sgYW5kIHJlbGVhc2UgdmFsdWVzIGluIHRoZSB0YWJsZVxuXHQgICAgICAgIHRoaXMuX3NldEF0dGFja1JlbGVhc2UodGhpcy5fYXR0YWNrLCB0aGlzLl9yZWxlYXNlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZvbGxvd2VyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrJzogMC4wNSxcblx0ICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXRzIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2UgdGltZXMgaW4gdGhlIHdhdmUgc2hhcGVyXG5cdFx0ICogIEBwYXJhbSAgIHtUaW1lfSBhdHRhY2tcblx0XHQgKiAgQHBhcmFtICAge1RpbWV9IHJlbGVhc2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLl9zZXRBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGF0dGFjaywgcmVsZWFzZSkge1xuXHQgICAgICAgIHZhciBtaW5UaW1lID0gdGhpcy5ibG9ja1RpbWU7XG5cdCAgICAgICAgYXR0YWNrID0gVG9uZS5UaW1lKGF0dGFjaykudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICByZWxlYXNlID0gVG9uZS5UaW1lKHJlbGVhc2UpLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgYXR0YWNrID0gTWF0aC5tYXgoYXR0YWNrLCBtaW5UaW1lKTtcblx0ICAgICAgICByZWxlYXNlID0gTWF0aC5tYXgocmVsZWFzZSwgbWluVGltZSk7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5VmFsdWVzLnNldE1hcChmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmICh2YWwgPD0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGF0dGFjaztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF0dGFjayB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZvbGxvd2VyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGF0dGFja1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLCAnYXR0YWNrJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNrO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYXR0YWNrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2F0dGFjayA9IGF0dGFjaztcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QXR0YWNrUmVsZWFzZSh0aGlzLl9hdHRhY2ssIHRoaXMuX3JlbGVhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJlbGVhc2UgdGltZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Gb2xsb3dlciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSByZWxlYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUsICdyZWxlYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVsZWFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJlbGVhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmVsZWFzZSA9IHJlbGVhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldEF0dGFja1JlbGVhc2UodGhpcy5fYXR0YWNrLCB0aGlzLl9yZWxlYXNlKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBCb3Jyb3dzIHRoZSBjb25uZWN0IG1ldGhvZCBmcm9tIFNpZ25hbCBzbyB0aGF0IHRoZSBvdXRwdXQgY2FuIGJlIHVzZWRcblx0XHQgKiAgYXMgYSBUb25lLlNpZ25hbCBjb250cm9sIHNpZ25hbC5cblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyLnByb3RvdHlwZS5jb25uZWN0ID0gVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0O1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRm9sbG93ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5VmFsdWVzLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3ViLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9zdWIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Ficy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYWJzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRm9sbG93ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlNjYWxlZEVudmVsb3AgaXMgYW4gZW52ZWxvcGUgd2hpY2ggY2FuIGJlIHNjYWxlZFxuXHRcdCAqICAgICAgICAgdG8gYW55IHJhbmdlLiBJdCdzIHVzZWZ1bCBmb3IgYXBwbHlpbmcgYW4gZW52ZWxvcGVcblx0XHQgKiAgICAgICAgIHRvIGEgZnJlcXVlbmN5IG9yIGFueSBvdGhlciBub24tTm9ybWFsUmFuZ2Ugc2lnbmFsXG5cdFx0ICogICAgICAgICBwYXJhbWV0ZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW52ZWxvcGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbYXR0YWNrXVx0dGhlIGF0dGFjayB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHR0aGUgZGVjYXkgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbc3VzdGFpbl0gXHRhIHBlcmNlbnRhZ2UgKDAtMSkgb2YgdGhlIGZ1bGwgYW1wbGl0dWRlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHR0aGUgcmVsZWFzZSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIHNjYWxlZEVudiA9IG5ldyBUb25lLlNjYWxlZEVudmVsb3BlKHtcblx0XHQgKiAgXHRcImF0dGFja1wiIDogMC4yLFxuXHRcdCAqICBcdFwibWluXCIgOiAyMDAsXG5cdFx0ICogIFx0XCJtYXhcIiA6IDIwMDBcblx0XHQgKiAgfSk7XG5cdFx0ICogIHNjYWxlZEVudi5jb25uZWN0KG9zY2lsbGF0b3IuZnJlcXVlbmN5KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9nZXQgYWxsIG9mIHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdkZWNheScsXG5cdCAgICAgICAgICAgICdzdXN0YWluJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5TY2FsZWRFbnZlbG9wZS5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIGluY29taW5nIHNpZ25hbCBieSBhbiBleHBvbmVudFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBvd31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Qb3cob3B0aW9ucy5leHBvbmVudCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIHNpZ25hbCB0byB0aGUgZGVzaXJlZCByYW5nZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2NhbGUob3B0aW9ucy5taW4sIG9wdGlvbnMubWF4KTtcblx0ICAgICAgICB0aGlzLl9zaWcuY2hhaW4odGhpcy5fZXhwLCB0aGlzLl9zY2FsZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TY2FsZWRFbnZlbG9wZSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlZEVudmVsb3BlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICdleHBvbmVudCc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBtaW4gb3V0cHV0IHZhbHVlLiBUaGlzIGlzIHRoZSB2YWx1ZSB3aGljaCBpdFxuXHRcdCAqIHN0YXJ0cyBhdC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZWRFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1pbiA9IG1pbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIG1heCBvdXRwdXQgdmFsdWUuIEluIG90aGVyIHdvcmRzLCB0aGUgdmFsdWVcblx0XHQgKiBhdCB0aGUgcGVhayBvZiB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlZEVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5tYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgZXhwb25lbnQgdmFsdWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVkRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBleHBvbmVudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLCAnZXhwb25lbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHAudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwLnZhbHVlID0gZXhwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNjYWxlZEVudmVsb3BlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V4cC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXhwID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TY2FsZWRFbnZlbG9wZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUgaXMgYSBUb25lLlNjYWxlZEVudmVsb3BlLCBidXQgaW5zdGVhZCBvZiBgbWluYCBhbmQgYG1heGBcblx0XHQgKiAgICAgICAgIGl0J3MgZ290IGEgYGJhc2VGcmVxdWVuY3lgIGFuZCBgb2N0YXZlc2AgcGFyYW1ldGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVudmVsb3BlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja11cdHRoZSBhdHRhY2sgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2RlY2F5XVx0dGhlIGRlY2F5IHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3N1c3RhaW5dIFx0YSBwZXJjZW50YWdlICgwLTEpIG9mIHRoZSBmdWxsIGFtcGxpdHVkZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0dGhlIHJlbGVhc2UgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBmcmVxRW52ID0gbmV3IFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUoe1xuXHRcdCAqICBcdFwiYXR0YWNrXCIgOiAwLjIsXG5cdFx0ICogIFx0XCJiYXNlRnJlcXVlbmN5XCIgOiBcIkMyXCIsXG5cdFx0ICogIFx0XCJvY3RhdmVzXCIgOiA0XG5cdFx0ICogIH0pO1xuXHRcdCAqICBmcmVxRW52LmNvbm5lY3Qob3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAnZGVjYXknLFxuXHQgICAgICAgICAgICAnc3VzdGFpbicsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvL21lcmdlIGl0IHdpdGggdGhlIGZyZXF1ZW5jeSBlbnZlbG9wZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU3RvcmVzIHRoZSBvY3RhdmUgdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLy9zZXR1cFxuXHQgICAgICAgIHRoaXMuYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeUVudmVsb3BlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogNCxcblx0ICAgICAgICAnZXhwb25lbnQnOiAyXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgbWluaW51bSBvdXRwdXQgdmFsdWUuIFRoaXMgaXMgdGhlIHZhbHVlIHdoaWNoIGl0XG5cdFx0ICogc3RhcnRzIGF0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQG5hbWUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLCAnYmFzZUZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5taW4gPSB0aGlzLnRvRnJlcXVlbmN5KG1pbik7XG5cdCAgICAgICAgICAgIC8vYWxzbyB1cGRhdGUgdGhlIG9jdGF2ZXNcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgYmFzZUZyZXF1ZW5jeSB0aGF0IHRoZVxuXHRcdCAqIGVudmVsb3BlIHdpbGwgc2NhbGUgdG8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZyZXF1ZW5jeUVudmVsb3BlLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0YXZlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0YXZlcztcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWF4ID0gdGhpcy5iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgb2N0YXZlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBleHBvbmVudCB2YWx1ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGV4cG9uZW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUsICdleHBvbmVudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAudmFsdWUgPSBleHA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRnJlcXVlbmN5RW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEdyZWF0ZXJUaGFuWmVybyBvdXRwdXRzIDEgd2hlbiB0aGUgaW5wdXQgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIHplcm9cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZ3QwID0gbmV3IFRvbmUuR3JlYXRlclRoYW5aZXJvKCk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgwLjAxKS5jb25uZWN0KGd0MCk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGd0MCBpcyAxLlxuXHRcdCAqIHNpZy52YWx1ZSA9IDA7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGd0MCBpcyAwLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhblplcm8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGhyZXNoID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKHZhbCA8PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSwgMTI3KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgZmlyc3QgdGhyZXNob2xkZWQgc2lnbmFsIGJ5IGEgbGFyZ2UgdmFsdWUuXG5cdFx0XHQgKiAgdGhpcyB3aWxsIGhlbHAgd2l0aCB2YWx1ZXMgd2hpY2ggYXJlIHZlcnkgY2xvc2UgdG8gMFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aXBseSgxMDAwMCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmNvbm5lY3QodGhpcy5fdGhyZXNoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdyZWF0ZXJUaGFuWmVybywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNwb3NlIG1ldGhvZFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HcmVhdGVyVGhhblplcm99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW5aZXJvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGhyZXNoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdyZWF0ZXJUaGFuWmVybztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBPdXRwdXQgMSBpZiB0aGUgc2lnbmFsIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUsIG90aGVyd2lzZSBvdXRwdXRzIDAuXG5cdFx0ICogICAgICAgICAgY2FuIGNvbXBhcmUgdHdvIHNpZ25hbHMgb3IgYSBzaWduYWwgYW5kIGEgbnVtYmVyLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmFsdWU9MF0gdGhlIHZhbHVlIHRvIGNvbXBhcmUgdG8gdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBndCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuKDIpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoNCkuY29ubmVjdChndCk7XG5cdFx0ICogLy9vdXRwdXQgb2YgZ3QgaXMgZXF1YWwgMS5cblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW4gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzdWJ0cmFjdCB0aGUgYW1vdW50IGZyb20gdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5TdWJ0cmFjdCh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5pbnB1dFsxXSA9IHRoaXMuX3BhcmFtLmlucHV0WzFdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbXBhcmUgdGhhdCBhbW91bnQgdG8gemVyb1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdyZWF0ZXJUaGFuWmVyb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ3R6ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HcmVhdGVyVGhhblplcm8oKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jb25uZWN0KHRoaXMuX2d0eik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HcmVhdGVyVGhhbiwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgbWV0aG9kXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdyZWF0ZXJUaGFufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyZWF0ZXJUaGFuLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZ3R6LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ndHogPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdyZWF0ZXJUaGFuO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuR2F0ZSBvbmx5IHBhc3NlcyBhIHNpZ25hbCB0aHJvdWdoIHdoZW4gdGhlIGluY29taW5nXG5cdFx0ICogICAgICAgICAgc2lnbmFsIGV4Y2VlZHMgYSBzcGVjaWZpZWQgdGhyZXNob2xkLiBUbyBkbyB0aGlzLCBHYXRlIHVzZXNcblx0XHQgKiAgICAgICAgICBhIFRvbmUuRm9sbG93ZXIgdG8gZm9sbG93IHRoZSBhbXBsaXR1ZGUgb2YgdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBBIGNvbW1vbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIGlzIGEgW05vaXNlIEdhdGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05vaXNlX2dhdGUpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN8T2JqZWN0fSBbdGhyZXNob2xkXSBUaGUgdGhyZXNob2xkIGFib3ZlIHdoaWNoIHRoZSBnYXRlIHdpbGwgb3Blbi5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gYXR0YWNrIFRoZSBmb2xsb3dlcidzIGF0dGFjayB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJlbGVhc2UgVGhlIGZvbGxvd2VyJ3MgcmVsZWFzZSB0aW1lXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGdhdGUgPSBuZXcgVG9uZS5HYXRlKC0zMCwgMC4yLCAwLjMpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIG1pYyA9IG5ldyBUb25lLlVzZXJNZWRpYSgpLmNvbm5lY3QoZ2F0ZSk7XG5cdFx0ICogLy90aGUgZ2F0ZSB3aWxsIG9ubHkgcGFzcyB0aHJvdWdoIHRoZSBpbmNvbWluZ1xuXHRcdCAqIC8vc2lnbmFsIHdoZW4gaXQncyBsb3VkZXIgdGhhbiAtMzBkYlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCcsXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkdhdGUpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZvbGxvd2VyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mb2xsb3dlciA9IG5ldyBUb25lLkZvbGxvd2VyKG9wdGlvbnMuYXR0YWNrLCBvcHRpb25zLnJlbGVhc2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdyZWF0ZXJUaGFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ndCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuKFRvbmUuZGJUb0dhaW4ob3B0aW9ucy50aHJlc2hvbGQpKTtcblx0ICAgICAgICAvL3RoZSBjb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLy90aGUgY29udHJvbCBzaWduYWxcblx0ICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMuX2d0LCB0aGlzLl9mb2xsb3dlciwgdGhpcy5vdXRwdXQuZ2Fpbik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HYXRlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuR2F0ZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrJzogMC4xLFxuXHQgICAgICAgICdyZWxlYXNlJzogMC4xLFxuXHQgICAgICAgICd0aHJlc2hvbGQnOiAtNDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdGhyZXNob2xkIG9mIHRoZSBnYXRlIGluIGRlY2liZWxzXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR2F0ZSNcblx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0ICogQG5hbWUgdGhyZXNob2xkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HYXRlLnByb3RvdHlwZSwgJ3RocmVzaG9sZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuZ2FpblRvRGIodGhpcy5fZ3QudmFsdWUpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGhyZXNoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2d0LnZhbHVlID0gVG9uZS5kYlRvR2Fpbih0aHJlc2gpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF0dGFjayBzcGVlZCBvZiB0aGUgZ2F0ZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdhdGUjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgYXR0YWNrXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HYXRlLnByb3RvdHlwZSwgJ2F0dGFjaycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbGxvd2VyLmF0dGFjaztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGF0dGFja1RpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZm9sbG93ZXIuYXR0YWNrID0gYXR0YWNrVGltZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByZWxlYXNlIHNwZWVkIG9mIHRoZSBnYXRlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR2F0ZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSByZWxlYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HYXRlLnByb3RvdHlwZSwgJ3JlbGVhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb2xsb3dlci5yZWxlYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmVsZWFzZVRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZm9sbG93ZXIucmVsZWFzZSA9IHJlbGVhc2VUaW1lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HYXRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdhdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9mb2xsb3dlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZvbGxvd2VyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9ndCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR2F0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIFRvbmUuVGlja1NpZ25hbCBleHRlbmRzIFRvbmUuU2lnbmFsLCBidXQgYWRkcyB0aGUgY2FwYWJpbGl0eVxuXHRcdCAqICAgICAgICB0byBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBlbGFwc2VkIHRpY2tzLiBleHBvbmVudGlhbCBhbmQgdGFyZ2V0IGN1cnZlc1xuXHRcdCAqICAgICAgICBhcmUgYXBwcm94aW1hdGVkIHdpdGggbXVsdGlwbGUgbGluZWFyIHJhbXBzLlxuXHRcdCAqXG5cdFx0ICogICAgICAgIFRoYW5rIHlvdSBCcnVubyBEaWFzLCBILiBTb2ZpYSBQaW50bywgYW5kIERhdmlkIE0uIE1hdG9zLCBmb3IgeW91ciBbV0FDIHBhcGVyXShodHRwczovL3NtYXJ0ZWNoLmdhdGVjaC5lZHUvYml0c3RyZWFtL2hhbmRsZS8xODUzLzU0NTg4L1dBQzIwMTYtNDkucGRmKVxuXHRcdCAqICAgICAgICBkZXNjcmliaW5nIGludGVncmF0aW5nIHRpbWluZyBmdW5jdGlvbnMgZm9yIHRlbXBvIGNhbGN1bGF0aW9ucy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc2lnbmFsXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgdmFsdWUgPSBUb25lLmRlZmF1bHRBcmcodmFsdWUsIDEpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcywge1xuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuVGlja3MsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9leHRlbmQgdGhlIG1lbW9yeVxuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5tZW1vcnkgPSBJbmZpbml0eTtcblx0ICAgICAgICAvL2NsZWFyIHRoZSBjbG9jayBmcm9tIHRoZSBiZWdpbm5pbmdcblx0ICAgICAgICB0aGlzLmNhbmNlbFNjaGVkdWxlZFZhbHVlcygwKTtcblx0ICAgICAgICAvL3NldCBhbiBpbml0aWFsIGV2ZW50XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiAwLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGlja1NpZ25hbCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogV3JhcHMgVG9uZS5TaWduYWwgbWV0aG9kcyBzbyB0aGF0IHRoZXkgYWxzb1xuXHRcdCAqIHJlY29yZCB0aGUgdGlja3MuXG5cdFx0ICogQHBhcmFtICB7RnVuY3Rpb259IG1ldGhvZFxuXHRcdCAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBmdW5jdGlvbiBfd3JhcFNjaGVkdWxlTWV0aG9kcyhtZXRob2QpIHtcblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gdGhpcy5fZXZlbnRzLnByZXZpb3VzRXZlbnQoZXZlbnQpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3NVbnRpbFRpbWUgPSB0aGlzLl9nZXRUaWNrc1VudGlsRXZlbnQocHJldmlvdXNFdmVudCwgdGltZSk7XG5cdCAgICAgICAgICAgIGV2ZW50LnRpY2tzID0gTWF0aC5tYXgodGlja3NVbnRpbFRpbWUsIDApO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSA9IF93cmFwU2NoZWR1bGVNZXRob2RzKFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSk7XG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lID0gX3dyYXBTY2hlZHVsZU1ldGhvZHMoVG9uZS5TaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUgd2l0aFxuXHRcdCAqICBhIHJhdGUgaGF2aW5nIHRoZSBnaXZlbiB0aW1lIGNvbnN0YW50LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHRpbWVDb25zdGFudFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnNldFRhcmdldEF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSwgY29uc3RhbnQpIHtcblx0ICAgICAgICAvL2Fwcm94aW1hdGUgaXQgd2l0aCBtdWx0aXBsZSBsaW5lYXIgcmFtcHNcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQodGltZSk7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIC8vc3RhcnQgZnJvbSBwcmV2aW91c2x5IHNjaGVkdWxlZCB2YWx1ZVxuXHQgICAgICAgIHZhciBwcmV2RXZlbnQgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHZhciBzZWdtZW50cyA9IE1hdGgucm91bmQoTWF0aC5tYXgoMSAvIGNvbnN0YW50LCAxKSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gc2VnbWVudHM7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgc2VnVGltZSA9IGNvbnN0YW50ICogaSArIHRpbWU7XG5cdCAgICAgICAgICAgIHZhciByYW1wVmFsID0gdGhpcy5fZXhwb25lbnRpYWxBcHByb2FjaChwcmV2RXZlbnQudGltZSwgcHJldkV2ZW50LnZhbHVlLCB2YWx1ZSwgY29uc3RhbnQsIHNlZ1RpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMuX3RvVW5pdHMocmFtcFZhbCksIHNlZ1RpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGV4cG9uZW50aWFsIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcGFyYW1ldGVyIHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBlbmRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIC8vYXByb3hpbWF0ZSBpdCB3aXRoIG11bHRpcGxlIGxpbmVhciByYW1wc1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgLy9zdGFydCBmcm9tIHByZXZpb3VzbHkgc2NoZWR1bGVkIHZhbHVlXG5cdCAgICAgICAgdmFyIHByZXZFdmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgaWYgKHByZXZFdmVudCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICBwcmV2RXZlbnQgPSB7XG5cdCAgICAgICAgICAgICAgICAndmFsdWUnOiB0aGlzLl9pbml0aWFsVmFsdWUsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IDBcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hcHByb3ggMTAgc2VnbWVudHMgcGVyIHNlY29uZFxuXHQgICAgICAgIHZhciBzZWdtZW50cyA9IE1hdGgucm91bmQoTWF0aC5tYXgoKHRpbWUgLSBwcmV2RXZlbnQudGltZSkgKiAxMCwgMSkpO1xuXHQgICAgICAgIHZhciBzZWdtZW50RHVyID0gKHRpbWUgLSBwcmV2RXZlbnQudGltZSkgLyBzZWdtZW50cztcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBzZWdtZW50czsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBzZWdUaW1lID0gc2VnbWVudER1ciAqIGkgKyBwcmV2RXZlbnQudGltZTtcblx0ICAgICAgICAgICAgdmFyIHJhbXBWYWwgPSB0aGlzLl9leHBvbmVudGlhbEludGVycG9sYXRlKHByZXZFdmVudC50aW1lLCBwcmV2RXZlbnQudmFsdWUsIHRpbWUsIHZhbHVlLCBzZWdUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh0aGlzLl90b1VuaXRzKHJhbXBWYWwpLCBzZWdUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgdGljayB2YWx1ZSBhdCB0aGUgdGltZS4gVGFrZXMgaW50byBhY2NvdW50XG5cdFx0ICogYW55IGF1dG9tYXRpb24gY3VydmVzIHNjaGVkdWxlZCBvbiB0aGUgc2lnbmFsLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBUaGUgdGltZSB0byBnZXQgdGhlIHRpY2sgY291bnQgYXRcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgICBUaGUgbnVtYmVyIG9mIHRpY2tzIHdoaWNoIGhhdmUgZWxhcHNlZCBhdCB0aGUgdGltZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBhbnkgYXV0b21hdGlvbnMuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLl9nZXRUaWNrc1VudGlsRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIHRpbWUpIHtcblx0ICAgICAgICBpZiAoZXZlbnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSB7XG5cdCAgICAgICAgICAgICAgICAndGlja3MnOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3RpbWUnOiAwXG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzVW5kZWYoZXZlbnQudGlja3MpKSB7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gdGhpcy5fZXZlbnRzLnByZXZpb3VzRXZlbnQoZXZlbnQpO1xuXHQgICAgICAgICAgICBldmVudC50aWNrcyA9IHRoaXMuX2dldFRpY2tzVW50aWxFdmVudChwcmV2aW91c0V2ZW50LCBldmVudC50aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHZhbDAgPSB0aGlzLmdldFZhbHVlQXRUaW1lKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgIHZhciB2YWwxID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICAvL2lmIGl0J3MgcmlnaHQgb24gdGhlIGxpbmUsIHRha2UgdGhlIHByZXZpb3VzIHZhbHVlXG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5nZXQodGltZSkudGltZSA9PT0gdGltZSAmJiB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuU2V0VmFsdWUpIHtcblx0ICAgICAgICAgICAgdmFsMSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSAtIHRoaXMuc2FtcGxlVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAwLjUgKiAodGltZSAtIGV2ZW50LnRpbWUpICogKHZhbDAgKyB2YWwxKSArIGV2ZW50LnRpY2tzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIHRpY2sgdmFsdWUgYXQgdGhlIHRpbWUuIFRha2VzIGludG8gYWNjb3VudFxuXHRcdCAqIGFueSBhdXRvbWF0aW9uIGN1cnZlcyBzY2hlZHVsZWQgb24gdGhlIHNpZ25hbC5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIGdldCB0aGUgdGljayBjb3VudCBhdFxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgIFRoZSBudW1iZXIgb2YgdGlja3Mgd2hpY2ggaGF2ZSBlbGFwc2VkIGF0IHRoZSB0aW1lXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGFueSBhdXRvbWF0aW9ucy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZ2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLl9nZXRUaWNrc1VudGlsRXZlbnQoZXZlbnQsIHRpbWUpLCAwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgbnVtYmVyIG9mIHRpY2tzIGZyb20gdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0ge1RpY2tzfSB0aWNrcyBUaGUgbnVtYmVyIG9mIHRpY2tzIHRvIGNhbGN1bGF0ZVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gZ2V0IHRoZSBuZXh0IHRpY2sgZnJvbVxuXHRcdCAqIEByZXR1cm4ge1NlY29uZHN9IFRoZSBkdXJhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIHRpY2tzIGZyb20gdGhlIGdpdmVuIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5nZXREdXJhdGlvbk9mVGlja3MgPSBmdW5jdGlvbiAodGlja3MsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRUaWNrID0gdGhpcy5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5nZXRUaW1lT2ZUaWNrKGN1cnJlbnRUaWNrICsgdGlja3MpIC0gdGltZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHaXZlbiBhIHRpY2ssIHJldHVybnMgdGhlIHRpbWUgdGhhdCB0aWNrIG9jY3VycyBhdC5cblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja1xuXHRcdCAqIEByZXR1cm4ge1RpbWV9ICAgICAgVGhlIHRpbWUgdGhhdCB0aGUgdGljayBvY2N1cnMuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmdldFRpbWVPZlRpY2sgPSBmdW5jdGlvbiAodGljaykge1xuXHQgICAgICAgIHZhciBiZWZvcmUgPSB0aGlzLl9ldmVudHMuZ2V0KHRpY2ssICd0aWNrcycpO1xuXHQgICAgICAgIHZhciBhZnRlciA9IHRoaXMuX2V2ZW50cy5nZXRBZnRlcih0aWNrLCAndGlja3MnKTtcblx0ICAgICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aWNrcyA9PT0gdGljaykge1xuXHQgICAgICAgICAgICByZXR1cm4gYmVmb3JlLnRpbWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUgJiYgYWZ0ZXIgJiYgYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIgJiYgYmVmb3JlLnZhbHVlICE9PSBhZnRlci52YWx1ZSkge1xuXHQgICAgICAgICAgICB2YXIgdmFsMCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoYmVmb3JlLnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgdmFsMSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoYWZ0ZXIudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBkZWx0YSA9ICh2YWwxIC0gdmFsMCkgLyAoYWZ0ZXIudGltZSAtIGJlZm9yZS50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGsgPSBNYXRoLnNxcnQoTWF0aC5wb3codmFsMCwgMikgLSAyICogZGVsdGEgKiAoYmVmb3JlLnRpY2tzIC0gdGljaykpO1xuXHQgICAgICAgICAgICB2YXIgc29sMSA9ICgtdmFsMCArIGspIC8gZGVsdGE7XG5cdCAgICAgICAgICAgIHZhciBzb2wyID0gKC12YWwwIC0gaykgLyBkZWx0YTtcblx0ICAgICAgICAgICAgcmV0dXJuIChzb2wxID4gMCA/IHNvbDEgOiBzb2wyKSArIGJlZm9yZS50aW1lO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYmVmb3JlKSB7XG5cdCAgICAgICAgICAgIGlmIChiZWZvcmUudmFsdWUgPT09IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBiZWZvcmUudGltZSArICh0aWNrIC0gYmVmb3JlLnRpY2tzKSAvIGJlZm9yZS52YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aWNrIC8gdGhpcy5faW5pdGlhbFZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDb252ZXJ0IHNvbWUgbnVtYmVyIG9mIHRpY2tzIHRoZWlyIHRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIGFjY291bnRpbmdcblx0XHQgKiBmb3IgYW55IGF1dG9tYXRpb24gY3VydmVzIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgbnVtYmVyIG9mIHRpY2tzIHRvIGNvbnZlcnQgdG8gc2Vjb25kcy5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBbd2hlbj1ub3ddICBXaGVuIGFsb25nIHRoZSBhdXRvbWF0aW9uIHRpbWVsaW5lIHRvIGNvbnZlcnQgdGhlIHRpY2tzLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVGltZX0gICAgICAgVGhlIGR1cmF0aW9uIGluIHNlY29uZHMgb2YgdGhlIHRpY2tzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS50aWNrc1RvVGltZSA9IGZ1bmN0aW9uICh0aWNrcywgd2hlbikge1xuXHQgICAgICAgIHdoZW4gPSB0aGlzLnRvU2Vjb25kcyh3aGVuKTtcblx0ICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZSh0aGlzLmdldER1cmF0aW9uT2ZUaWNrcyh0aWNrcywgd2hlbikpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBpbnZlcnNlIG9mIFt0aWNrc1RvVGltZV0oI3RpY2tzdG90aW1lKS4gQ29udmVydCBhIGR1cmF0aW9uIGluXG5cdFx0ICogc2Vjb25kcyB0byB0aGUgY29ycmVzcG9uZGluZyBudW1iZXIgb2YgdGlja3MgYWNjb3VudGluZyBmb3IgYW55XG5cdFx0ICogYXV0b21hdGlvbiBjdXJ2ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gZHVyYXRpb24gVGhlIHRpbWUgaW50ZXJ2YWwgdG8gY29udmVydCB0byB0aWNrcy5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBbd2hlbj1ub3ddICAgICBXaGVuIGFsb25nIHRoZSBhdXRvbWF0aW9uIHRpbWVsaW5lIHRvIGNvbnZlcnQgdGhlIHRpY2tzLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVGlja3N9ICAgICAgICAgIFRoZSBkdXJhdGlvbiBpbiB0aWNrcy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUudGltZVRvVGlja3MgPSBmdW5jdGlvbiAoZHVyYXRpb24sIHdoZW4pIHtcblx0ICAgICAgICB3aGVuID0gdGhpcy50b1NlY29uZHMod2hlbik7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGlja3MgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHdoZW4pO1xuXHQgICAgICAgIHZhciBlbmRUaWNrcyA9IHRoaXMuZ2V0VGlja3NBdFRpbWUod2hlbiArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGlja3MoZW5kVGlja3MgLSBzdGFydFRpY2tzKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaWNrU2lnbmFsO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgVGltZWxpbmUgU3RhdGUuIFByb3ZpZGVzIHRoZSBtZXRob2RzOiA8Y29kZT5zZXRTdGF0ZUF0VGltZShcInN0YXRlXCIsIHRpbWUpPC9jb2RlPlxuXHRcdCAqICAgICAgICAgIGFuZCA8Y29kZT5nZXRWYWx1ZUF0VGltZSh0aW1lKTwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZWxpbmV9XG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSBpbml0aWFsIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBUaW1lbGluZVN0YXRlLiBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gPGNvZGU+dW5kZWZpbmVkPC9jb2RlPlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlID0gZnVuY3Rpb24gKGluaXRpYWwpIHtcblx0ICAgICAgICBUb25lLlRpbWVsaW5lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGluaXRpYWwgc3RhdGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbml0aWFsID0gaW5pdGlhbDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpbWVsaW5lU3RhdGUsIFRvbmUuVGltZWxpbmUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHNjaGVkdWxlZCBzdGF0ZSBzY2hlZHVsZWQgYmVmb3JlIG9yIGF0XG5cdFx0ICogIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybiAge1N0cmluZ30gIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBpbnB1dCBpbiBzZXRTdGF0ZUF0VGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciBldmVudCA9IHRoaXMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIGlmIChldmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gZXZlbnQuc3RhdGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRpYWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBzdGF0ZSB0byB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHN0YXRlIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSB0byBzZXQuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZVN0YXRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUucHJvdG90eXBlLnNldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHN0YXRlLCB0aW1lKSB7XG5cdCAgICAgICAgLy9hbGwgc3RhdGUgY2hhbmdlcyBuZWVkIHRvIGJlID49IHRoZSBwcmV2aW91cyBzdGF0ZSB0aW1lXG5cdCAgICAgICAgLy9UT0RPIHRocm93IGVycm9yIGlmIHRpbWUgPCB0aGUgcHJldmlvdXMgZXZlbnQgdGltZVxuXHQgICAgICAgIHRoaXMuYWRkKHtcblx0ICAgICAgICAgICAgJ3N0YXRlJzogc3RhdGUsXG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGV2ZW50IGJlZm9yZSB0aGUgdGltZSB3aXRoIHRoZSBnaXZlbiBzdGF0ZVxuXHRcdCAqICBAcGFyYW0ge1RvbmUuU3RhdGV9IHN0YXRlIFRoZSBzdGF0ZSB0byBsb29rIGZvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBjaGVjayBiZWZvcmVcdFx0XHRcblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIFRoZSBldmVudCB3aXRoIHRoZSBnaXZlbiBzdGF0ZSBiZWZvcmUgdGhlIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuZ2V0TGFzdFN0YXRlID0gZnVuY3Rpb24gKHN0YXRlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3RpbWVsaW5lW2ldO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IHN0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZXZlbnQgYWZ0ZXIgdGhlIHRpbWUgd2l0aCB0aGUgZ2l2ZW4gc3RhdGVcblx0XHQgKiAgQHBhcmFtIHtUb25lLlN0YXRlfSBzdGF0ZSBUaGUgc3RhdGUgdG8gbG9vayBmb3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gY2hlY2sgZnJvbVxuXHRcdCAqICBAcmV0dXJuICB7T2JqZWN0fSAgVGhlIGV2ZW50IHdpdGggdGhlIGdpdmVuIHN0YXRlIGFmdGVyIHRoZSB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUucHJvdG90eXBlLmdldE5leHRTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPCB0aGlzLl90aW1lbGluZS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fdGltZWxpbmVbaV07XG5cdCAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IHN0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWVsaW5lU3RhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVXNlcyBbVG9uZS5UaWNrU2lnbmFsXShUaWNrU2lnbmFsKSB0byB0cmFjayBlbGFwc2VkIHRpY2tzIHdpdGhcblx0XHQgKiAgXHRcdGNvbXBsZXggYXV0b21hdGlvbiBjdXJ2ZXMuXG5cdFx0ICpcblx0XHQgKiBcdEBjb25zdHJ1Y3RvclxuXHQgICAgICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIGluaXRpYWwgZnJlcXVlbmN5IHRoYXQgdGhlIHNpZ25hbCB0aWNrcyBhdFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZyZXF1ZW5jeSddLCBUb25lLlRpY2tTb3VyY2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBiZSBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlICB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuVGlja1NpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzdGF0ZSB0aW1lbGluZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgb2Zmc2V0IHZhbHVlcyBvZiB0aGUgdGlja3Ncblx0XHRcdCAqIEB0eXBlIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgIC8vYWRkIHRoZSBmaXJzdCBldmVudFxuXHQgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUoMCwgMCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaWNrU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLmRlZmF1bHRzID0geyAnZnJlcXVlbmN5JzogMSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiwgXCJzdG9wcGVkXCIgb3IgXCJwYXVzZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaWNrU291cmNlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBjbG9jayBhdCB0aGUgZ2l2ZW4gdGltZS4gT3B0aW9uYWxseSBwYXNzIGluIGFuIG9mZnNldFxuXHRcdCAqICBvZiB3aGVyZSB0byBzdGFydCB0aGUgdGljayBjb3VudGVyIGZyb20uXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgdGltZSAgICBUaGUgdGltZSB0aGUgY2xvY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7VGlja3M9MH0gb2Zmc2V0IFRoZSBudW1iZXIgb2YgdGlja3MgdG8gc3RhcnQgdGhlIHNvdXJjZSBhdFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5UaWNrU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKG9mZnNldCkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUob2Zmc2V0LCB0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgY2xvY2suIFN0b3BwaW5nIHRoZSBjbG9jayByZXNldHMgdGhlIHRpY2sgY291bnRlciB0byAwLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBjbG9jay5zdG9wKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL2NhbmNlbCB0aGUgcHJldmlvdXMgc3RvcFxuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3N0YXRlLmdldCh0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LnRpbWUgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmNhbmNlbChldmVudC50aW1lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbChldmVudC50aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXVzZSB0aGUgY2xvY2suIFBhdXNpbmcgZG9lcyBub3QgcmVzZXQgdGhlIHRpY2sgY291bnRlci5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5QYXVzZWQsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIHN0YXJ0L3N0b3AvcGF1c2UgYW5kIHNldFRpY2tBdFRpbWUgZXZlbnRzIHNjaGVkdWxlZCBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdG8gY2xlYXIgdGhlIGV2ZW50cyBhZnRlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGVsYXBzZWQgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIGdldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgVGhlIG51bWJlciBvZiB0aWNrc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBzdG9wRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXRMYXN0U3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICAvL3RoaXMgZXZlbnQgYWxsb3dzIGZvckVhY2hCZXR3ZWVuIHRvIGl0ZXJhdGUgdW50aWwgdGhlIGN1cnJlbnQgdGltZVxuXHQgICAgICAgIHZhciB0bXBFdmVudCA9IHtcblx0ICAgICAgICAgICAgc3RhdGU6IFRvbmUuU3RhdGUuUGF1c2VkLFxuXHQgICAgICAgICAgICB0aW1lOiB0aW1lXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5hZGQodG1wRXZlbnQpO1xuXHQgICAgICAgIC8va2VlcCB0cmFjayBvZiB0aGUgcHJldmlvdXMgb2Zmc2V0IGV2ZW50XG5cdCAgICAgICAgdmFyIGxhc3RTdGF0ZSA9IHN0b3BFdmVudDtcblx0ICAgICAgICB2YXIgZWxhcHNlZFRpY2tzID0gMDtcblx0ICAgICAgICAvL2l0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIGV2ZW50cyBzaW5jZSB0aGUgbGFzdCBzdG9wXG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RvcEV2ZW50LnRpbWUsIHRpbWUgKyB0aGlzLnNhbXBsZVRpbWUsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIHZhciBwZXJpb2RTdGFydFRpbWUgPSBsYXN0U3RhdGUudGltZTtcblx0ICAgICAgICAgICAgLy9pZiB0aGVyZSBpcyBhbiBvZmZzZXQgZXZlbnQgaW4gdGhpcyBwZXJpb2QgdXNlIHRoYXRcblx0ICAgICAgICAgICAgdmFyIG9mZnNldEV2ZW50ID0gdGhpcy5fdGlja09mZnNldC5nZXQoZS50aW1lKTtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldEV2ZW50LnRpbWUgPj0gbGFzdFN0YXRlLnRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRUaWNrcyA9IG9mZnNldEV2ZW50LnRpY2tzO1xuXHQgICAgICAgICAgICAgICAgcGVyaW9kU3RhcnRUaW1lID0gb2Zmc2V0RXZlbnQudGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAobGFzdFN0YXRlLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgZS5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICBlbGFwc2VkVGlja3MgKz0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUoZS50aW1lKSAtIHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKHBlcmlvZFN0YXJ0VGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbGFzdFN0YXRlID0gZTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIC8vcmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZXZlbnRcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5yZW1vdmUodG1wRXZlbnQpO1xuXHQgICAgICAgIC8vcmV0dXJuIHRoZSB0aWNrc1xuXHQgICAgICAgIHJldHVybiBlbGFwc2VkVGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkLiBTdGFydHMgY291bnRpbmcgYXQgMFxuXHRcdCAqICBhbmQgaW5jcmVtZW50cyBhZnRlciB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuIFJldHVybnMgLTEgd2hlbiBzdG9wcGVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaWNrU291cmNlI1xuXHRcdCAqICBAbmFtZSB0aWNrc1xuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZSwgJ3RpY2tzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUaWNrc0F0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSh0LCB0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSBzaW5jZSB0aWNrcz0wIHRoYXQgdGhlIFRpY2tTb3VyY2UgaGFzIGJlZW4gcnVubmluZy4gQWNjb3VudHNcblx0XHQgKiAgZm9yIHRlbXBvIGN1cnZlc1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaWNrU291cmNlI1xuXHRcdCAqICBAbmFtZSBzZWNvbmRzXG5cdFx0ICogIEB0eXBlIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUsICdzZWNvbmRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWNvbmRzQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocykge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5mcmVxdWVuY3kudGltZVRvVGlja3Mocywgbm93KTtcblx0ICAgICAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSh0aWNrcywgbm93KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGVsYXBzZWQgc2Vjb25kcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSBlbGFwc2VkIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9ICBUaGUgbnVtYmVyIG9mIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRTZWNvbmRzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIHN0b3BFdmVudCA9IHRoaXMuX3N0YXRlLmdldExhc3RTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIC8vdGhpcyBldmVudCBhbGxvd3MgZm9yRWFjaEJldHdlZW4gdG8gaXRlcmF0ZSB1bnRpbCB0aGUgY3VycmVudCB0aW1lXG5cdCAgICAgICAgdmFyIHRtcEV2ZW50ID0ge1xuXHQgICAgICAgICAgICBzdGF0ZTogVG9uZS5TdGF0ZS5QYXVzZWQsXG5cdCAgICAgICAgICAgIHRpbWU6IHRpbWVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9rZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBvZmZzZXQgZXZlbnRcblx0ICAgICAgICB2YXIgbGFzdFN0YXRlID0gc3RvcEV2ZW50O1xuXHQgICAgICAgIHZhciBlbGFwc2VkU2Vjb25kcyA9IDA7XG5cdCAgICAgICAgLy9pdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBldmVudHMgc2luY2UgdGhlIGxhc3Qgc3RvcFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hCZXR3ZWVuKHN0b3BFdmVudC50aW1lLCB0aW1lICsgdGhpcy5zYW1wbGVUaW1lLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICB2YXIgcGVyaW9kU3RhcnRUaW1lID0gbGFzdFN0YXRlLnRpbWU7XG5cdCAgICAgICAgICAgIC8vaWYgdGhlcmUgaXMgYW4gb2Zmc2V0IGV2ZW50IGluIHRoaXMgcGVyaW9kIHVzZSB0aGF0XG5cdCAgICAgICAgICAgIHZhciBvZmZzZXRFdmVudCA9IHRoaXMuX3RpY2tPZmZzZXQuZ2V0KGUudGltZSk7XG5cdCAgICAgICAgICAgIGlmIChvZmZzZXRFdmVudC50aW1lID49IGxhc3RTdGF0ZS50aW1lKSB7XG5cdCAgICAgICAgICAgICAgICBlbGFwc2VkU2Vjb25kcyA9IG9mZnNldEV2ZW50LnNlY29uZHM7XG5cdCAgICAgICAgICAgICAgICBwZXJpb2RTdGFydFRpbWUgPSBvZmZzZXRFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChsYXN0U3RhdGUuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBlLnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRTZWNvbmRzICs9IGUudGltZSAtIHBlcmlvZFN0YXJ0VGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBsYXN0U3RhdGUgPSBlO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIHRlbXBvcmFyeSBldmVudFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLnJlbW92ZSh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIHRpY2tzXG5cdCAgICAgICAgcmV0dXJuIGVsYXBzZWRTZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFNldCB0aGUgY2xvY2sncyB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgdmFsdWUgdG8gc2V0XG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBzZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRpY2tTb3VyY2V9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuc2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGlja3MsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldC5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldC5hZGQoe1xuXHQgICAgICAgICAgICAndGltZSc6IHRpbWUsXG5cdCAgICAgICAgICAgICd0aWNrcyc6IHRpY2tzLFxuXHQgICAgICAgICAgICAnc2Vjb25kcyc6IHRoaXMuZnJlcXVlbmN5LmdldER1cmF0aW9uT2ZUaWNrcyh0aWNrcywgdGltZSlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgc2NoZWR1bGVkIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm4gIHtTdHJpbmd9ICBUaGUgbmFtZSBvZiB0aGUgc3RhdGUgaW5wdXQgaW4gc2V0U3RhdGVBdFRpbWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0YXJ0KFwiKzAuMVwiKTtcblx0XHQgKiBzb3VyY2UuZ2V0U3RhdGVBdFRpbWUoXCIrMC4xXCIpOyAvL3JldHVybnMgXCJzdGFydGVkXCJcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSB0aW1lIG9mIHRoZSBnaXZlbiB0aWNrLiBUaGUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ICogaXMgd2hlbiB0byB0ZXN0IGJlZm9yZS4gU2luY2UgdGlja3MgY2FuIGJlIHNldCAod2l0aCBzZXRUaWNrc0F0VGltZSlcblx0XHQgKiB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgdGltZXMgZm9yIGEgZ2l2ZW4gdGljayB2YWx1ZS4gXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIG51bWJlci5cblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gYmVmb3JlIFdoZW4gdG8gbWVhc3VyZSB0aGUgdGljayB2YWx1ZSBmcm9tLiBcblx0XHQgKiBAcmV0dXJuIHtUaW1lfSAgICAgICBUaGUgdGltZSBvZiB0aGUgdGlja1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRUaW1lT2ZUaWNrID0gZnVuY3Rpb24gKHRpY2ssIGJlZm9yZSkge1xuXHQgICAgICAgIGJlZm9yZSA9IFRvbmUuZGVmYXVsdEFyZyhiZWZvcmUsIHRoaXMubm93KCkpO1xuXHQgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl90aWNrT2Zmc2V0LmdldChiZWZvcmUpO1xuXHQgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3N0YXRlLmdldChiZWZvcmUpO1xuXHQgICAgICAgIHZhciBzdGFydFRpbWUgPSBNYXRoLm1heChvZmZzZXQudGltZSwgZXZlbnQudGltZSk7XG5cdCAgICAgICAgdmFyIGFic29sdXRlVGlja3MgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShzdGFydFRpbWUpICsgdGljayAtIG9mZnNldC50aWNrcztcblx0ICAgICAgICByZXR1cm4gdGhpcy5mcmVxdWVuY3kuZ2V0VGltZU9mVGljayhhYnNvbHV0ZVRpY2tzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW52b2tlIHRoZSBjYWxsYmFjayBldmVudCBhdCBhbGwgc2NoZWR1bGVkIHRpY2tzIGJldHdlZW4gdGhlIFxuXHRcdCAqICBzdGFydCB0aW1lIGFuZCB0aGUgZW5kIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgc3RhcnRUaW1lICBUaGUgYmVnaW5uaW5nIG9mIHRoZSBzZWFyY2ggcmFuZ2Vcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgZW5kVGltZSAgICBUaGUgZW5kIG9mIHRoZSBzZWFyY2ggcmFuZ2Vcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb248VGltZSxUaWNrcz59ICBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBlYWNoIHRpY2tcblx0XHQgKiAgQHJldHVybiAge1RvbmUuVGlja1NvdXJjZX0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5mb3JFYWNoVGlja0JldHdlZW4gPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vb25seSBpdGVyYXRlIHRocm91Z2ggdGhlIHNlY3Rpb25zIHdoZXJlIGl0IGlzIFwic3RhcnRlZFwiXG5cdCAgICAgICAgdmFyIGxhc3RTdGF0ZUV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RhcnRUaW1lLCBlbmRUaW1lLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKGxhc3RTdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgZXZlbnQuc3RhdGUgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5mb3JFYWNoVGlja0JldHdlZW4oTWF0aC5tYXgobGFzdFN0YXRlRXZlbnQudGltZSwgc3RhcnRUaW1lKSwgZXZlbnQudGltZSAtIHRoaXMuc2FtcGxlVGltZSwgY2FsbGJhY2spO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGxhc3RTdGF0ZUV2ZW50ID0gZXZlbnQ7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICBzdGFydFRpbWUgPSBNYXRoLm1heChsYXN0U3RhdGVFdmVudC50aW1lLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIGlmIChsYXN0U3RhdGVFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIHRoaXMuX3N0YXRlKSB7XG5cdCAgICAgICAgICAgIC8vZmlndXJlIG91dCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBmcmVxdWVuY3kgdGlja3MgYW5kIHRoZSBcblx0ICAgICAgICAgICAgdmFyIHN0YXJ0VGlja3MgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3NBdFN0YXJ0ID0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUobGFzdFN0YXRlRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBkaWZmID0gc3RhcnRUaWNrcyAtIHRpY2tzQXRTdGFydDtcblx0ICAgICAgICAgICAgdmFyIG9mZnNldCA9IGRpZmYgJSAxO1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSAxIC0gb2Zmc2V0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBuZXh0VGlja1RpbWUgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaW1lT2ZUaWNrKHN0YXJ0VGlja3MgKyBvZmZzZXQpO1xuXHQgICAgICAgICAgICB2YXIgZXJyb3IgPSBudWxsO1xuXHQgICAgICAgICAgICB3aGlsZSAobmV4dFRpY2tUaW1lIDwgZW5kVGltZSAmJiB0aGlzLl9zdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXh0VGlja1RpbWUsIE1hdGgucm91bmQodGhpcy5nZXRUaWNrc0F0VGltZShuZXh0VGlja1RpbWUpKSk7XG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tUaW1lICs9IHRoaXMuZnJlcXVlbmN5LmdldER1cmF0aW9uT2ZUaWNrcygxLCBuZXh0VGlja1RpbWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChlcnJvcikge1xuXHQgICAgICAgICAgICB0aHJvdyBlcnJvcjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaWNrU291cmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc2FtcGxlIGFjY3VyYXRlIGNsb2NrIHdoaWNoIHByb3ZpZGVzIGEgY2FsbGJhY2sgYXQgdGhlIGdpdmVuIHJhdGUuXG5cdFx0ICogICAgICAgICAgV2hpbGUgdGhlIGNhbGxiYWNrIGlzIG5vdCBzYW1wbGUtYWNjdXJhdGUgKGl0IGlzIHN0aWxsIHN1c2NlcHRpYmxlIHRvXG5cdFx0ICogICAgICAgICAgbG9vc2UgSlMgdGltaW5nKSwgdGhlIHRpbWUgcGFzc2VkIGluIGFzIHRoZSBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2tcblx0XHQgKiAgICAgICAgICBpcyBwcmVjaXNlLiBGb3IgbW9zdCBhcHBsaWNhdGlvbnMsIGl0IGlzIGJldHRlciB0byB1c2UgVG9uZS5UcmFuc3BvcnRcblx0XHQgKiAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBDbG9jayBieSBpdHNlbGYgc2luY2UgeW91IGNhbiBzeW5jaHJvbml6ZSBtdWx0aXBsZSBjYWxsYmFja3MuXG5cdFx0ICpcblx0XHQgKiBcdEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqIFx0QHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2l0aCB0aGUgdGltZSBvZiB0aGUgYXVkaW8gZXZlbnRcblx0XHQgKiBcdEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHJhdGUgb2YgdGhlIGNhbGxiYWNrXG5cdFx0ICogXHRAZXhhbXBsZVxuXHRcdCAqIC8vdGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBhcHByb3hpbWF0ZWx5IG9uY2UgYSBzZWNvbmRcblx0XHQgKiAvL2FuZCB3aWxsIHByaW50IHRoZSB0aW1lIGV4YWN0bHkgb25jZSBhIHNlY29uZCBhcGFydC5cblx0XHQgKiB2YXIgY2xvY2sgPSBuZXcgVG9uZS5DbG9jayhmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKHRpbWUpO1xuXHRcdCAqIH0sIDEpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5DbG9jayk7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGludm9rZSBhdCB0aGUgc2NoZWR1bGVkIHRpY2suXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBuZXh0IHRpbWUgdGhlIGNhbGxiYWNrIGlzIHNjaGVkdWxlZC5cblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpY2sgY291bnRlclxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5UaWNrU291cmNlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlID0gbmV3IFRvbmUuVGlja1NvdXJjZShvcHRpb25zLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxhc3QgdGltZSB0aGUgbG9vcCBjYWxsYmFjayB3YXMgaW52b2tlZFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xhc3RVcGRhdGUgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByYXRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBzaG91bGQgYmUgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSAge0JQTX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX3RpY2tTb3VyY2UuZnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdmcmVxdWVuY3knKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3RhdGUgdGltZWxpbmVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZVN0YXRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG5ldyBUb25lLlRpbWVsaW5lU3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkKTtcblx0ICAgICAgICAvL2FkZCBhbiBpbml0aWFsIHN0YXRlXG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbG9vcCBmdW5jdGlvbiBib3VuZCB0byBpdHMgY29udGV4dC5cblx0XHRcdCAqICBUaGlzIGlzIG5lY2Vzc2FyeSB0byByZW1vdmUgdGhlIGV2ZW50IGluIHRoZSBlbmQuXG5cdFx0XHQgKiAgQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ib3VuZExvb3AgPSB0aGlzLl9sb29wLmJpbmQodGhpcyk7XG5cdCAgICAgICAgLy9iaW5kIGEgY2FsbGJhY2sgdG8gdGhlIHdvcmtlciB0aHJlYWRcblx0ICAgICAgICB0aGlzLmNvbnRleHQub24oJ3RpY2snLCB0aGlzLl9ib3VuZExvb3ApO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ2xvY2ssIFRvbmUuRW1pdHRlcik7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2suZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdmcmVxdWVuY3knOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiwgXCJzdG9wcGVkXCIgb3IgXCJwYXVzZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DbG9jayNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNsb2NrLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGNsb2NrIGF0IHRoZSBnaXZlbiB0aW1lLiBPcHRpb25hbGx5IHBhc3MgaW4gYW4gb2Zmc2V0XG5cdFx0ICogIG9mIHdoZXJlIHRvIHN0YXJ0IHRoZSB0aWNrIGNvdW50ZXIgZnJvbS5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICB0aW1lICAgIFRoZSB0aW1lIHRoZSBjbG9jayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtICB7VGlja3M9fSAgb2Zmc2V0ICBXaGVyZSB0aGUgdGljayBjb3VudGVyIHN0YXJ0cyBjb3VudGluZyBmcm9tLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5DbG9ja30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLnN0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgICAgIGlmICh0aW1lIDwgdGhpcy5fbGFzdFVwZGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGNsb2NrLiBTdG9wcGluZyB0aGUgY2xvY2sgcmVzZXRzIHRoZSB0aWNrIGNvdW50ZXIgdG8gMC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DbG9ja30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGNsb2NrLnN0b3AoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlLnN0b3AodGltZSk7XG5cdCAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9sYXN0VXBkYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RvcCcsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGF1c2UgdGhlIGNsb2NrLiBQYXVzaW5nIGRvZXMgbm90IHJlc2V0IHRoZSB0aWNrIGNvdW50ZXIuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBjbG9jayBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2xvY2t9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5QYXVzZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLnBhdXNlKHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGltZSA8IHRoaXMuX2xhc3RVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncGF1c2UnLCB0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuIFN0YXJ0cyBjb3VudGluZyBhdCAwXG5cdFx0ICogIGFuZCBpbmNyZW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC5cblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2xvY2sucHJvdG90eXBlLCAndGlja3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5nZXRUaWNrc0F0VGltZSh0aGlzLm5vdygpKSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UudGlja3MgPSB0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHNpbmNlIHRpY2tzPTAgdGhhdCB0aGUgQ2xvY2sgaGFzIGJlZW4gcnVubmluZy4gQWNjb3VudHNcblx0XHQgKiAgZm9yIHRlbXBvIGN1cnZlc1xuXHRcdCAqICBAdHlwZSB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNsb2NrLnByb3RvdHlwZSwgJ3NlY29uZHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLnNlY29uZHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc2Vjb25kcyA9IHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBlbGFwc2VkIHNlY29uZHMgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGdldCB0aGUgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfSAgVGhlIG51bWJlciBvZiBlbGFwc2VkIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLmdldFNlY29uZHNBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLmdldFNlY29uZHNBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgdGljayB2YWx1ZSB0byBzZXRcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIHNldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuQ2xvY2t9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnNldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpY2tzLCB0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5zZXRUaWNrc0F0VGltZSh0aWNrcywgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgIFRoZSB0aWNrIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZ2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgdGltZSBvZiB0aGUgbmV4dCB0aWNrXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIG51bWJlci5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBiZWZvcmUgXG5cdFx0ICogQHJldHVybiB7VG9uZS5DbG9ja30gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUubmV4dFRpY2tUaW1lID0gZnVuY3Rpb24gKG9mZnNldCwgd2hlbikge1xuXHQgICAgICAgIHdoZW4gPSB0aGlzLnRvU2Vjb25kcyh3aGVuKTtcblx0ICAgICAgICB2YXIgY3VycmVudFRpY2sgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHdoZW4pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLmdldFRpbWVPZlRpY2soY3VycmVudFRpY2sgKyBvZmZzZXQsIHdoZW4pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2NoZWR1bGluZyBsb29wLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuX2xvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHRoaXMuX2xhc3RVcGRhdGU7XG5cdCAgICAgICAgdmFyIGVuZFRpbWUgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHRoaXMuX2xhc3RVcGRhdGUgPSBlbmRUaW1lO1xuXHQgICAgICAgIGlmIChzdGFydFRpbWUgIT09IGVuZFRpbWUpIHtcblx0ICAgICAgICAgICAgLy90aGUgc3RhdGUgY2hhbmdlIGV2ZW50c1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdGFydFRpbWUsIGVuZFRpbWUsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgICAgICBzd2l0Y2ggKGUuc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgVG9uZS5TdGF0ZS5TdGFydGVkOlxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl90aWNrU291cmNlLmdldFRpY2tzQXRUaW1lKGUudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIGUudGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgVG9uZS5TdGF0ZS5TdG9wcGVkOlxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChlLnRpbWUgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgZS50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlIFRvbmUuU3RhdGUuUGF1c2VkOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncGF1c2UnLCBlLnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgICAgICAvL3RoZSB0aWNrIGNhbGxiYWNrc1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLmZvckVhY2hUaWNrQmV0d2VlbihzdGFydFRpbWUsIGVuZFRpbWUsIGZ1bmN0aW9uICh0aW1lLCB0aWNrcykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB0aWNrcyk7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBzY2hlZHVsZWQgc3RhdGUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybiAge1N0cmluZ30gIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBpbnB1dCBpbiBzZXRTdGF0ZUF0VGltZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBjbG9jay5zdGFydChcIiswLjFcIik7XG5cdFx0ICogY2xvY2suZ2V0U3RhdGVBdFRpbWUoXCIrMC4xXCIpOyAvL3JldHVybnMgXCJzdGFydGVkXCJcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLmdldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DbG9ja30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQub2ZmKCd0aWNrJywgdGhpcy5fYm91bmRMb29wKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2JvdW5kTG9vcCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSBJbmZpbml0eTtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNsb2NrO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU2ltaWxhciB0byBUb25lLlRpbWVsaW5lLCBidXQgYWxsIGV2ZW50cyByZXByZXNlbnRcblx0XHQgKiAgICAgICAgIGludGVydmFscyB3aXRoIGJvdGggXCJ0aW1lXCIgYW5kIFwiZHVyYXRpb25cIiB0aW1lcy4gVGhlXG5cdFx0ICogICAgICAgICBldmVudHMgYXJlIHBsYWNlZCBpbiBhIHRyZWUgc3RydWN0dXJlIG9wdGltaXplZFxuXHRcdCAqICAgICAgICAgZm9yIHF1ZXJ5aW5nIGFuIGludGVyc2VjdGlvbiBwb2ludCB3aXRoIHRoZSB0aW1lbGluZVxuXHRcdCAqICAgICAgICAgZXZlbnRzLiBJbnRlcm5hbGx5IHVzZXMgYW4gW0ludGVydmFsIFRyZWVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ludGVydmFsX3RyZWUpXG5cdFx0ICogICAgICAgICB0byByZXByZXNlbnQgdGhlIGRhdGEuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcm9vdCBub2RlIG9mIHRoZSBpbnRldmFsIHRyZWVcblx0XHRcdCAqICBAdHlwZSAge0ludGVydmFsTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcm9vdCA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgS2VlcCB0cmFjayBvZiB0aGUgbGVuZ3RoIG9mIHRoZSB0aW1lbGluZS5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkludGVydmFsVGltZWxpbmUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBldmVudCB0byBhZGQgdG8gdGhlIHRpbWVsaW5lLiBBbGwgZXZlbnRzIG11c3Rcblx0XHQgKiAgaGF2ZSBhIHRpbWUgYW5kIGR1cmF0aW9uIHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gYWRkIHRvIHRoZSB0aW1lbGluZVxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKGV2ZW50LnRpbWUpIHx8IFRvbmUuaXNVbmRlZihldmVudC5kdXJhdGlvbikpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkludGVydmFsVGltZWxpbmU6IGV2ZW50cyBtdXN0IGhhdmUgdGltZSBhbmQgZHVyYXRpb24gcGFyYW1ldGVycycpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBldmVudC50aW1lID0gZXZlbnQudGltZS52YWx1ZU9mKCk7XG5cdCAgICAgICAgdmFyIG5vZGUgPSBuZXcgSW50ZXJ2YWxOb2RlKGV2ZW50LnRpbWUsIGV2ZW50LnRpbWUgKyBldmVudC5kdXJhdGlvbiwgZXZlbnQpO1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBub2RlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QuaW5zZXJ0KG5vZGUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9sZW5ndGgrKztcblx0ICAgICAgICAvLyBSZXN0cnVjdHVyZSB0cmVlIHRvIGJlIGJhbGFuY2VkXG5cdCAgICAgICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgbm9kZS51cGRhdGVIZWlnaHQoKTtcblx0ICAgICAgICAgICAgbm9kZS51cGRhdGVNYXgoKTtcblx0ICAgICAgICAgICAgdGhpcy5fcmViYWxhbmNlKG5vZGUpO1xuXHQgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gcmVtb3ZlIGZyb20gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkludGVydmFsVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoKGV2ZW50LnRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBub2RlID0gcmVzdWx0c1tpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChub2RlLmV2ZW50ID09PSBldmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZU5vZGUobm9kZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGVuZ3RoLS07XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5JbnRlcnZhbFRpbWVsaW5lI1xuXHRcdCAqICBAbmFtZSBsZW5ndGhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgZXZlbnRzIHdob3NlIHRpbWUgdGltZSBpcyBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5yZW1vdmUoZXZlbnQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgcm9vdCBub2RlIGFzIHRoZSBnaXZlbiBub2RlXG5cdFx0ICogIEBwYXJhbSB7SW50ZXJ2YWxOb2RlfSBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9zZXRSb290ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB0aGlzLl9yb290ID0gbm9kZTtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnBhcmVudCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXBsYWNlIHRoZSByZWZlcmVuY2VzIHRvIHRoZSBub2RlIGluIHRoZSBub2RlJ3MgcGFyZW50XG5cdFx0ICogIHdpdGggdGhlIHJlcGxhY2VtZW50IG5vZGUuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgcmVwbGFjZW1lbnRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JlcGxhY2VOb2RlSW5QYXJlbnQgPSBmdW5jdGlvbiAobm9kZSwgcmVwbGFjZW1lbnQpIHtcblx0ICAgICAgICBpZiAobm9kZS5wYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKG5vZGUuaXNMZWZ0Q2hpbGQoKSkge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQubGVmdCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQucmlnaHQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9yZWJhbGFuY2Uobm9kZS5wYXJlbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocmVwbGFjZW1lbnQpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIHRoZSBub2RlIGZyb20gdGhlIHRyZWUgYW5kIHJlcGxhY2UgaXQgd2l0aFxuXHRcdCAqICBhIHN1Y2Nlc3NvciB3aGljaCBmb2xsb3dzIHRoZSBzY2hlbWEuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JlbW92ZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmIChub2RlLmxlZnQgPT09IG51bGwgJiYgbm9kZS5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIG51bGwpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobm9kZS5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIG5vZGUubGVmdCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlLmxlZnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmVwbGFjZU5vZGVJblBhcmVudChub2RlLCBub2RlLnJpZ2h0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgYmFsYW5jZSA9IG5vZGUuZ2V0QmFsYW5jZSgpO1xuXHQgICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQsIHRlbXA7XG5cdCAgICAgICAgICAgIGlmIChiYWxhbmNlID4gMCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKG5vZGUubGVmdC5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnJpZ2h0ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5sZWZ0LnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZXBsYWNlbWVudC5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5wYXJlbnQucmlnaHQgPSByZXBsYWNlbWVudC5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudC5wYXJlbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQubGVmdCA9IG5vZGUubGVmdDtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5yaWdodCA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5yaWdodC5sZWZ0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5sZWZ0ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgdGVtcCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLnJpZ2h0LmxlZnQ7XG5cdCAgICAgICAgICAgICAgICB3aGlsZSAocmVwbGFjZW1lbnQubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQubGVmdDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnBhcmVudCA9IHJlcGxhY2VtZW50LnBhcmVudDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnBhcmVudC5sZWZ0ID0gcmVwbGFjZW1lbnQucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQucGFyZW50O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQubGVmdCA9IG5vZGUubGVmdDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnJpZ2h0ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAobm9kZS5wYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChub2RlLmlzTGVmdENoaWxkKCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5sZWZ0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50LnJpZ2h0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zZXRSb290KHJlcGxhY2VtZW50KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIHJlcGxhY2VtZW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcmViYWxhbmNlKHRlbXApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBub2RlLmRpc3Bvc2UoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUm90YXRlIHRoZSB0cmVlIHRvIHRoZSBsZWZ0XG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JvdGF0ZUxlZnQgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcblx0ICAgICAgICB2YXIgaXNMZWZ0Q2hpbGQgPSBub2RlLmlzTGVmdENoaWxkKCk7XG5cdCAgICAgICAgLy8gTWFrZSBub2RlLnJpZ2h0IHRoZSBuZXcgcm9vdCBvZiB0aGlzIHN1YiB0cmVlIChpbnN0ZWFkIG9mIG5vZGUpXG5cdCAgICAgICAgdmFyIHBpdm90Tm9kZSA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgbm9kZS5yaWdodCA9IHBpdm90Tm9kZS5sZWZ0O1xuXHQgICAgICAgIHBpdm90Tm9kZS5sZWZ0ID0gbm9kZTtcblx0ICAgICAgICBpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGlmIChpc0xlZnRDaGlsZCkge1xuXHQgICAgICAgICAgICAgICAgcGFyZW50LmxlZnQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQucmlnaHQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSb290KHBpdm90Tm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSb3RhdGUgdGhlIHRyZWUgdG8gdGhlIHJpZ2h0XG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JvdGF0ZVJpZ2h0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cdCAgICAgICAgdmFyIGlzTGVmdENoaWxkID0gbm9kZS5pc0xlZnRDaGlsZCgpO1xuXHQgICAgICAgIC8vIE1ha2Ugbm9kZS5sZWZ0IHRoZSBuZXcgcm9vdCBvZiB0aGlzIHN1YiB0cmVlIChpbnN0ZWFkIG9mIG5vZGUpXG5cdCAgICAgICAgdmFyIHBpdm90Tm9kZSA9IG5vZGUubGVmdDtcblx0ICAgICAgICBub2RlLmxlZnQgPSBwaXZvdE5vZGUucmlnaHQ7XG5cdCAgICAgICAgcGl2b3ROb2RlLnJpZ2h0ID0gbm9kZTtcblx0ICAgICAgICBpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGlmIChpc0xlZnRDaGlsZCkge1xuXHQgICAgICAgICAgICAgICAgcGFyZW50LmxlZnQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQucmlnaHQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSb290KHBpdm90Tm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBCYWxhbmNlIHRoZSBCU1Rcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcmViYWxhbmNlID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB2YXIgYmFsYW5jZSA9IG5vZGUuZ2V0QmFsYW5jZSgpO1xuXHQgICAgICAgIGlmIChiYWxhbmNlID4gMSkge1xuXHQgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LmdldEJhbGFuY2UoKSA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZUxlZnQobm9kZS5sZWZ0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZVJpZ2h0KG5vZGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChiYWxhbmNlIDwgLTEpIHtcblx0ICAgICAgICAgICAgaWYgKG5vZGUucmlnaHQuZ2V0QmFsYW5jZSgpID4gMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlUmlnaHQobm9kZS5yaWdodCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVMZWZ0KG5vZGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgYW4gZXZlbnQgd2hvc2UgdGltZSBhbmQgZHVyYXRpb24gc3BhbiB0aGUgZ2l2ZSB0aW1lLiBXaWxsXG5cdFx0ICogIHJldHVybiB0aGUgbWF0Y2ggd2hvc2UgXCJ0aW1lXCIgdmFsdWUgaXMgY2xvc2VzdCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCB0byBhZGQgdG8gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBUaGUgZXZlbnQgd2hpY2ggc3BhbnMgdGhlIGRlc2lyZWQgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoKHRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWF4ID0gcmVzdWx0c1swXTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzW2ldLmxvdyA+IG1heC5sb3cpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbWF4ID0gcmVzdWx0c1tpXTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbWF4LmV2ZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIGFsbE5vZGVzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgICAgIGFsbE5vZGVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXYgPSBhbGxOb2Rlc1tpXS5ldmVudDtcblx0ICAgICAgICAgICAgICAgIGlmIChldikge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGluIHdoaWNoIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIG92ZXJsYXBzIHdpdGggdGhlIHRpbWUgYW5kIGR1cmF0aW9uIHRpbWUgb2YgdGhlIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBvdmVybGFwcGluZ1xuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkludGVydmFsVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoKHRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gcmVzdWx0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ID0gcmVzdWx0c1tpXS5ldmVudDtcblx0ICAgICAgICAgICAgICAgIGlmIChldikge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGluIHdoaWNoIHRoZSB0aW1lIGlzIGdyZWF0ZXJcblx0XHQgKiAgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoRnJvbSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoQWZ0ZXIodGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSByZXN1bHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXYgPSByZXN1bHRzW2ldLmV2ZW50O1xuXHQgICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBhbGxOb2RlcyA9IFtdO1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgICAgIGFsbE5vZGVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGFsbE5vZGVzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgYWxsTm9kZXMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Jvb3QgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdElOVEVSVkFMIE5PREUgSEVMUEVSXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXByZXNlbnRzIGEgbm9kZSBpbiB0aGUgYmluYXJ5IHNlYXJjaCB0cmVlLCB3aXRoIHRoZSBhZGRpdGlvblxuXHRcdCAqICBvZiBhIFwiaGlnaFwiIHZhbHVlIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHRoZSBoaWdoZXN0IHZhbHVlIG9mXG5cdFx0ICogIGl0cyBjaGlsZHJlbi5cblx0XHQgKiAgUmVmZXJlbmNlczpcblx0XHQgKiAgaHR0cHM6Ly9icm9va25vdmFrLndvcmRwcmVzcy5jb20vMjAxMy8xMi8wNy9hdWdtZW50ZWQtaW50ZXJ2YWwtdHJlZS1pbi1jL1xuXHRcdCAqICBodHRwOi8vd3d3Lm1pZi52dS5sdC9+dmFsZGFzL0FMR09SSVRNQUkvTElURVJBVFVSQS9Db3JtZW4vQ29ybWVuLnBkZlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gbG93XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBoaWdoXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgSW50ZXJ2YWxOb2RlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgZXZlbnQpIHtcblx0ICAgICAgICAvL3RoZSBldmVudCBjb250YWluZXJcblx0ICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdCAgICAgICAgLy90aGUgbG93IHZhbHVlXG5cdCAgICAgICAgdGhpcy5sb3cgPSBsb3c7XG5cdCAgICAgICAgLy90aGUgaGlnaCB2YWx1ZVxuXHQgICAgICAgIHRoaXMuaGlnaCA9IGhpZ2g7XG5cdCAgICAgICAgLy90aGUgaGlnaCB2YWx1ZSBmb3IgdGhpcyBhbmQgYWxsIGNoaWxkIG5vZGVzXG5cdCAgICAgICAgdGhpcy5tYXggPSB0aGlzLmhpZ2g7XG5cdCAgICAgICAgLy90aGUgbm9kZXMgdG8gdGhlIGxlZnRcblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbnVsbDtcblx0ICAgICAgICAvL3RoZSBub2RlcyB0byB0aGUgcmlnaHRcblx0ICAgICAgICB0aGlzLl9yaWdodCA9IG51bGw7XG5cdCAgICAgICAgLy90aGUgcGFyZW50IG5vZGVcblx0ICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cdCAgICAgICAgLy90aGUgbnVtYmVyIG9mIGNoaWxkIG5vZGVzXG5cdCAgICAgICAgdGhpcy5oZWlnaHQgPSAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnNlcnQgYSBub2RlIGludG8gdGhlIGNvcnJlY3Qgc3BvdCBpbiB0aGUgdHJlZVxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgaWYgKG5vZGUubG93IDw9IHRoaXMubG93KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmxlZnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGVmdCA9IG5vZGU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmxlZnQuaW5zZXJ0KG5vZGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQgPSBub2RlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQuaW5zZXJ0KG5vZGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2VhcmNoIHRoZSB0cmVlIGZvciBub2RlcyB3aGljaCBvdmVybGFwXG5cdFx0ICogIHdpdGggdGhlIGdpdmVuIHBvaW50XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHBvaW50ICBUaGUgcG9pbnQgdG8gcXVlcnlcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICByZXN1bHRzICBUaGUgYXJyYXkgdG8gcHV0IHRoZSByZXN1bHRzXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnNlYXJjaCA9IGZ1bmN0aW9uIChwb2ludCwgcmVzdWx0cykge1xuXHQgICAgICAgIC8vIElmIHAgaXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSByaWdodG1vc3QgcG9pbnQgb2YgYW55IGludGVydmFsXG5cdCAgICAgICAgLy8gaW4gdGhpcyBub2RlIGFuZCBhbGwgY2hpbGRyZW4sIHRoZXJlIHdvbid0IGJlIGFueSBtYXRjaGVzLlxuXHQgICAgICAgIGlmIChwb2ludCA+IHRoaXMubWF4KSB7XG5cdCAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gU2VhcmNoIGxlZnQgY2hpbGRyZW5cblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubGVmdC5zZWFyY2gocG9pbnQsIHJlc3VsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBDaGVjayB0aGlzIG5vZGVcblx0ICAgICAgICBpZiAodGhpcy5sb3cgPD0gcG9pbnQgJiYgdGhpcy5oaWdoID4gcG9pbnQpIHtcblx0ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBJZiBwIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSB0aW1lIG9mIHRoaXMgaW50ZXJ2YWwsXG5cdCAgICAgICAgLy8gdGhlbiBpdCBjYW4ndCBiZSBpbiBhbnkgY2hpbGQgdG8gdGhlIHJpZ2h0LlxuXHQgICAgICAgIGlmICh0aGlzLmxvdyA+IHBvaW50KSB7XG5cdCAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gU2VhcmNoIHJpZ2h0IGNoaWxkcmVuXG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC5zZWFyY2gocG9pbnQsIHJlc3VsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2VhcmNoIHRoZSB0cmVlIGZvciBub2RlcyB3aGljaCBhcmUgbGVzc1xuXHRcdCAqICB0aGFuIHRoZSBnaXZlbiBwb2ludFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBwb2ludCAgVGhlIHBvaW50IHRvIHF1ZXJ5XG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgcmVzdWx0cyAgVGhlIGFycmF5IHRvIHB1dCB0aGUgcmVzdWx0c1xuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5zZWFyY2hBZnRlciA9IGZ1bmN0aW9uIChwb2ludCwgcmVzdWx0cykge1xuXHQgICAgICAgIC8vIENoZWNrIHRoaXMgbm9kZVxuXHQgICAgICAgIGlmICh0aGlzLmxvdyA+PSBwb2ludCkge1xuXHQgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcyk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGVmdC5zZWFyY2hBZnRlcihwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gc2VhcmNoIHRoZSByaWdodCBzaWRlXG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC5zZWFyY2hBZnRlcihwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoaXMgZWxlbWVudCBhbmQgYm90aCBpdCdzIGJyYW5jaGVzXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2tcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUudHJhdmVyc2UgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubGVmdC50cmF2ZXJzZShjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQudHJhdmVyc2UoY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVXBkYXRlIHRoZSBoZWlnaHQgb2YgdGhlIG5vZGVcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUudXBkYXRlSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwgJiYgdGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLmhlaWdodCA9IE1hdGgubWF4KHRoaXMubGVmdC5oZWlnaHQsIHRoaXMucmlnaHQuaGVpZ2h0KSArIDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yaWdodC5oZWlnaHQgKyAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5sZWZ0LmhlaWdodCArIDE7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSAwO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVXBkYXRlIHRoZSBoZWlnaHQgb2YgdGhlIG5vZGVcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUudXBkYXRlTWF4ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMubWF4ID0gdGhpcy5oaWdoO1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5tYXggPSBNYXRoLm1heCh0aGlzLm1heCwgdGhpcy5sZWZ0Lm1heCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubWF4ID0gTWF0aC5tYXgodGhpcy5tYXgsIHRoaXMucmlnaHQubWF4KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBiYWxhbmNlIGlzIGhvdyB0aGUgbGVhZnMgYXJlIGRpc3RyaWJ1dGVkIG9uIHRoZSBub2RlXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBOZWdhdGl2ZSBudW1iZXJzIGFyZSBiYWxhbmNlZCB0byB0aGUgcmlnaHRcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuZ2V0QmFsYW5jZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgYmFsYW5jZSA9IDA7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCAmJiB0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGJhbGFuY2UgPSB0aGlzLmxlZnQuaGVpZ2h0IC0gdGhpcy5yaWdodC5oZWlnaHQ7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgYmFsYW5jZSA9IHRoaXMubGVmdC5oZWlnaHQgKyAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBiYWxhbmNlID0gLSh0aGlzLnJpZ2h0LmhlaWdodCArIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gYmFsYW5jZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhpcyBub2RlIGlzIHRoZSBsZWZ0IGNoaWxkXG5cdFx0ICogIG9mIGl0cyBwYXJlbnRcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuaXNMZWZ0Q2hpbGQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50ICE9PSBudWxsICYmIHRoaXMucGFyZW50LmxlZnQgPT09IHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGdldC9zZXQgdGhlIGxlZnQgbm9kZVxuXHRcdCAqICBAdHlwZSB7SW50ZXJ2YWxOb2RlfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludGVydmFsTm9kZS5wcm90b3R5cGUsICdsZWZ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGVmdDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGVmdCA9IG5vZGU7XG5cdCAgICAgICAgICAgIGlmIChub2RlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVIZWlnaHQoKTtcblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVNYXgoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBnZXQvc2V0IHRoZSByaWdodCBub2RlXG5cdFx0ICogIEB0eXBlIHtJbnRlcnZhbE5vZGV9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxOb2RlLnByb3RvdHlwZSwgJ3JpZ2h0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmlnaHQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JpZ2h0ID0gbm9kZTtcblx0ICAgICAgICAgICAgaWYgKG5vZGUgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gdGhpcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZUhlaWdodCgpO1xuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZU1heCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIG51bGwgb3V0IHJlZmVyZW5jZXMuXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmV2ZW50ID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRFTkQgSU5URVJWQUwgTk9ERSBIRUxQRVJcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgcmV0dXJuIFRvbmUuSW50ZXJ2YWxUaW1lbGluZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRpY2tzIGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIFRpbWUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgVG9uZS5UaWNrcyBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0IHRoZSBgbmV3YCBrZXl3b3JkLiBUb25lLlRpY2tzIGNhbiBiZSBwYXNzZWRcblx0XHQgKiAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBvZiBhbnkgbWV0aG9kIHdoaWNoIHRha2VzIHRpbWUgYXMgYW4gYXJndW1lbnQuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UcmFuc3BvcnRUaW1lfVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHQgPSBUb25lLlRpY2tzKFwiNG5cIik7Ly9hIHF1YXJ0ZXIgbm90ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcyA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRpY2tzKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0VGltZS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaWNrcyh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaWNrcywgVG9uZS5UcmFuc3BvcnRUaW1lKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB1bml0cyBpZiBub25lIGFyZSBnaXZlbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAnaSc7XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGN1cnJlbnQgdGltZSBpbiB0aGUgZ2l2ZW4gdW5pdHNcblx0XHQgKiBAcmV0dXJuIHtUaWNrc31cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX25vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQudGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9nZXRQUFEoKSAqIGJlYXRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl9zZWNvbmRzVG9Vbml0cyA9IGZ1bmN0aW9uIChzZWNvbmRzKSB7XG5cdCAgICAgICAgcmV0dXJuIHNlY29uZHMgLyAoNjAgLyB0aGlzLl9nZXRCcG0oKSkgKiB0aGlzLl9nZXRQUFEoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gdGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS50b1RpY2tzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgLyB0aGlzLl9nZXRQUFEoKSAqICg2MCAvIHRoaXMuX2dldEJwbSgpKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaWNrcztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyYW5zcG9ydEV2ZW50IGlzIGFuIGludGVybmFsIGNsYXNzIHVzZWQgYnkgKFRvbmUuVHJhbnNwb3J0KVtUcmFuc3BvcnRdXG5cdFx0ICogICAgICAgICB0byBzY2hlZHVsZSBldmVudHMuIERvIG5vIGludm9rZSB0aGlzIGNsYXNzIGRpcmVjdGx5LCBpdCBpc1xuXHRcdCAqICAgICAgICAgaGFuZGxlZCBmcm9tIHdpdGhpbiBUb25lLlRyYW5zcG9ydC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50ID0gZnVuY3Rpb24gKFRyYW5zcG9ydCwgb3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5UcmFuc3BvcnRFdmVudC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogUmVmZXJlbmNlIHRvIHRoZSBUcmFuc3BvcnQgdGhhdCBjcmVhdGVkIGl0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5UcmFuc3BvcnR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydCA9IFRyYW5zcG9ydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB1bmlxdWUgaWQgb2YgdGhlIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pZCA9IFRvbmUuVHJhbnNwb3J0RXZlbnQuX2V2ZW50SWQrKztcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB0aW1lIHRoZSBldmVudCBzdGFydHNcblx0XHRcdCAqIEB0eXBlIHtUaWNrc31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudGltZSA9IFRvbmUuVGlja3Mob3B0aW9ucy50aW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogSWYgdGhlIGV2ZW50IHNob3VsZCBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIGNyZWF0ZWQuXG5cdFx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmNlID0gb3B0aW9ucy5vbmNlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0RXZlbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHRzXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmNlJzogZmFsc2UsXG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ3VycmVudCBJRCBjb3VudGVyXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQuX2V2ZW50SWQgPSAwO1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlIHRoZSBldmVudCBjYWxsYmFjay5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBUaGUgQXVkaW9Db250ZXh0IHRpbWUgaW4gc2Vjb25kcyBvZiB0aGUgZXZlbnRcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29uY2UgJiYgdGhpcy5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuaWQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRFdmVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0RXZlbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCBpcyBhbiBpbnRlcm5hbCBjbGFzcyB1c2VkIGJ5IFRvbmUuVHJhbnNwb3J0XG5cdFx0ICogICAgICAgICB0byBzY2hlZHVsZSByZXBlYXQgZXZlbnRzLiBUaGlzIGNsYXNzIHNob3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5LlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UcmFuc3BvcnRFdmVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQgPSBmdW5jdGlvbiAoVHJhbnNwb3J0LCBvcHRpb25zKSB7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5jYWxsKHRoaXMsIFRyYW5zcG9ydCwgb3B0aW9ucyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFdoZW4gdGhlIGV2ZW50IHNob3VsZCBzdG9wIHJlcGVhdGluZ1xuXHRcdFx0ICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZHVyYXRpb24gPSBUb25lLlRpY2tzKG9wdGlvbnMuZHVyYXRpb24pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGludGVydmFsIG9mIHRoZSByZXBlYXRlZCBldmVudFxuXHRcdFx0ICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ludGVydmFsID0gVG9uZS5UaWNrcyhvcHRpb25zLmludGVydmFsKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBJRCBvZiB0aGUgY3VycmVudCB0aW1lbGluZSBldmVudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBJRCBvZiB0aGUgbmV4dCB0aW1lbGluZSBldmVudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9uZXh0SWQgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAgKiBUaGUgdGltZSBvZiB0aGUgbmV4dCBldmVudFxuXHRcdFx0ICAqIEB0eXBlIHtUaWNrc31cblx0XHRcdCAgKiBAcHJpdmF0ZVxuXHRcdFx0ICAqL1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrID0gdGhpcy50aW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogYSByZWZlcmVuY2UgdG8gdGhlIGJvdW5kIHN0YXJ0IG1ldGhvZFxuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JvdW5kUmVzdGFydCA9IHRoaXMuX3Jlc3RhcnQuYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5vbignc3RhcnQgbG9vcFN0YXJ0JywgdGhpcy5fYm91bmRSZXN0YXJ0KTtcblx0ICAgICAgICB0aGlzLl9yZXN0YXJ0KCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCwgVG9uZS5UcmFuc3BvcnRFdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2R1cmF0aW9uJzogSW5maW5pdHksXG5cdCAgICAgICAgJ2ludGVydmFsJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZSB0aGUgY2FsbGJhY2suIFJldHVybnMgdGhlIHRpY2sgdGltZSB3aGljaFxuXHRcdCAqIHRoZSBuZXh0IGV2ZW50IHNob3VsZCBiZSBzY2hlZHVsZWQgYXQuXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lICBUaGUgQXVkaW9Db250ZXh0IHRpbWUgaW4gc2Vjb25kcyBvZiB0aGUgZXZlbnRcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9jcmVhdGUgbW9yZSBldmVudHMgaWYgbmVjZXNzYXJ5XG5cdCAgICAgICAgdGhpcy5fY3JlYXRlRXZlbnRzKHRpbWUpO1xuXHQgICAgICAgIC8vY2FsbCB0aGUgc3VwZXIgY2xhc3Ncblx0ICAgICAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5pbnZva2UuY2FsbCh0aGlzLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBQdXNoIG1vcmUgZXZlbnRzIG9udG8gdGhlIHRpbWVsaW5lIHRvIGtlZXAgdXAgd2l0aCB0aGUgcG9zaXRpb24gb2YgdGhlIHRpbWVsaW5lXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLl9jcmVhdGVFdmVudHMgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vIHNjaGVkdWxlIHRoZSBuZXh0IGV2ZW50XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5UcmFuc3BvcnQuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKHRpY2tzID49IHRoaXMudGltZSAmJiB0aWNrcyA+PSB0aGlzLl9uZXh0VGljayAmJiB0aGlzLl9uZXh0VGljayArIHRoaXMuX2ludGVydmFsIDwgdGhpcy50aW1lICsgdGhpcy5kdXJhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9uZXh0VGljayArPSB0aGlzLl9pbnRlcnZhbDtcblx0ICAgICAgICAgICAgdGhpcy5fY3VycmVudElkID0gdGhpcy5fbmV4dElkO1xuXHQgICAgICAgICAgICB0aGlzLl9uZXh0SWQgPSB0aGlzLlRyYW5zcG9ydC5zY2hlZHVsZU9uY2UodGhpcy5pbnZva2UuYmluZCh0aGlzKSwgVG9uZS5UaWNrcyh0aGlzLl9uZXh0VGljaykpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBQdXNoIG1vcmUgZXZlbnRzIG9udG8gdGhlIHRpbWVsaW5lIHRvIGtlZXAgdXAgd2l0aCB0aGUgcG9zaXRpb24gb2YgdGhlIHRpbWVsaW5lXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLl9yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9jdXJyZW50SWQpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX25leHRJZCk7XG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSB0aGlzLnRpbWU7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5UcmFuc3BvcnQuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKHRpY2tzID4gdGhpcy50aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX25leHRUaWNrID0gdGhpcy50aW1lICsgTWF0aC5jZWlsKCh0aWNrcyAtIHRoaXMudGltZSkgLyB0aGlzLl9pbnRlcnZhbCkgKiB0aGlzLl9pbnRlcnZhbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY3VycmVudElkID0gdGhpcy5UcmFuc3BvcnQuc2NoZWR1bGVPbmNlKHRoaXMuaW52b2tlLmJpbmQodGhpcyksIFRvbmUuVGlja3ModGhpcy5fbmV4dFRpY2spKTtcblx0ICAgICAgICB0aGlzLl9uZXh0VGljayArPSB0aGlzLl9pbnRlcnZhbDtcblx0ICAgICAgICB0aGlzLl9uZXh0SWQgPSB0aGlzLlRyYW5zcG9ydC5zY2hlZHVsZU9uY2UodGhpcy5pbnZva2UuYmluZCh0aGlzKSwgVG9uZS5UaWNrcyh0aGlzLl9uZXh0VGljaykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9jdXJyZW50SWQpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX25leHRJZCk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQub2ZmKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9ib3VuZFJlc3RhcnQpO1xuXHQgICAgICAgIHRoaXMuX2JvdW5kQ3JlYXRlRXZlbnRzID0gbnVsbDtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5kdXJhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRyYW5zcG9ydCBmb3IgdGltaW5nIG11c2ljYWwgZXZlbnRzLlxuXHRcdCAqICAgICAgICAgIFN1cHBvcnRzIHRlbXBvIGN1cnZlcyBhbmQgdGltZSBjaGFuZ2VzLiBVbmxpa2UgYnJvd3Nlci1iYXNlZCB0aW1pbmcgKHNldEludGVydmFsLCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUpXG5cdFx0ICogICAgICAgICAgVG9uZS5UcmFuc3BvcnQgdGltaW5nIGV2ZW50cyBwYXNzIGluIHRoZSBleGFjdCB0aW1lIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnRcblx0XHQgKiAgICAgICAgICBpbiB0aGUgYXJndW1lbnQgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBQYXNzIHRoYXQgdGltZSB2YWx1ZSB0byB0aGUgb2JqZWN0XG5cdFx0ICogICAgICAgICAgeW91J3JlIHNjaGVkdWxpbmcuIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgQSBzaW5nbGUgdHJhbnNwb3J0IGlzIGNyZWF0ZWQgZm9yIHlvdSB3aGVuIHRoZSBsaWJyYXJ5IGlzIGluaXRpYWxpemVkLlxuXHRcdCAqICAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgVGhlIHRyYW5zcG9ydCBlbWl0cyB0aGUgZXZlbnRzOiBcInN0YXJ0XCIsIFwic3RvcFwiLCBcInBhdXNlXCIsIGFuZCBcImxvb3BcIiB3aGljaCBhcmVcblx0XHQgKiAgICAgICAgICBjYWxsZWQgd2l0aCB0aGUgdGltZSBvZiB0aGF0IGV2ZW50IGFzIHRoZSBhcmd1bWVudC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9yZXBlYXRlZCBldmVudCBldmVyeSA4dGggbm90ZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly9kbyBzb21ldGhpbmcgd2l0aCB0aGUgdGltZVxuXHRcdCAqIH0sIFwiOG5cIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zY2hlZHVsZSBhbiBldmVudCBvbiB0aGUgMTZ0aCBtZWFzdXJlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSB0aW1lXG5cdFx0ICogfSwgXCIxNjowOjBcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0TE9PUElOR1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdElmIHRoZSB0cmFuc3BvcnQgbG9vcHMgb3Igbm90LlxuXHRcdFx0XHQgKiAgQHR5cGUge2Jvb2xlYW59XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLmxvb3AgPSBmYWxzZTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0VGhlIGxvb3Agc3RhcnQgcG9zaXRpb24gaW4gdGlja3Ncblx0XHRcdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSAwO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogXHRUaGUgbG9vcCBlbmQgcG9zaXRpb24gaW4gdGlja3Ncblx0XHRcdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gMDtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdENMT0NLL1RFTVBPXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBQdWxzZXMgcGVyIHF1YXJ0ZXIgaXMgdGhlIG51bWJlciBvZiB0aWNrcyBwZXIgcXVhcnRlciBub3RlLlxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fcHBxID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMuUFBRO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIHdhdGNoZXMgdGhlIG1haW4gb3NjaWxsYXRvciBmb3IgdGltaW5nIHRpY2tzXG5cdFx0XHRcdCAqICBpbml0aWFsbHkgc3RhcnRzIGF0IDEyMGJwbVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICogIEB0eXBlIHtUb25lLkNsb2NrfVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fY2xvY2sgPSBuZXcgVG9uZS5DbG9jayh7XG5cdCAgICAgICAgICAgICAgICAnY2FsbGJhY2snOiB0aGlzLl9wcm9jZXNzVGljay5iaW5kKHRoaXMpLFxuXHQgICAgICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IDBcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2JpbmRDbG9ja0V2ZW50cygpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSBCZWF0cyBQZXIgTWludXRlIG9mIHRoZSBUcmFuc3BvcnQuXG5cdFx0XHRcdCAqICBAdHlwZSB7QlBNfVxuXHRcdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gODA7XG5cdFx0XHRcdCAqIC8vcmFtcCB0aGUgYnBtIHRvIDEyMCBvdmVyIDEwIHNlY29uZHNcblx0XHRcdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnJhbXBUbygxMjAsIDEwKTtcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuYnBtID0gdGhpcy5fY2xvY2suZnJlcXVlbmN5O1xuXHQgICAgICAgICAgICB0aGlzLmJwbS5fdG9Vbml0cyA9IHRoaXMuX3RvVW5pdHMuYmluZCh0aGlzKTtcblx0ICAgICAgICAgICAgdGhpcy5icG0uX2Zyb21Vbml0cyA9IHRoaXMuX2Zyb21Vbml0cy5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLmJwbS51bml0cyA9IFRvbmUuVHlwZS5CUE07XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLnZhbHVlID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMuYnBtO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWFkT25seSgnYnBtJyk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHRpbWUgc2lnbmF0dXJlLCBvciBtb3JlIGFjY3VyYXRlbHkgdGhlIG51bWVyYXRvclxuXHRcdFx0XHQgKiAgb2YgdGhlIHRpbWUgc2lnbmF0dXJlIG92ZXIgYSBkZW5vbWluYXRvciBvZiA0LlxuXHRcdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lU2lnbmF0dXJlID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMudGltZVNpZ25hdHVyZTtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdFRJTUVMSU5FIEVWRU5UU1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgQWxsIHRoZSBldmVudHMgaW4gYW4gb2JqZWN0IHRvIGtlZXAgdHJhY2sgYnkgSURcblx0XHRcdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzID0ge307XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdFRoZSBzY2hlZHVsZWQgZXZlbnRzLlxuXHRcdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmV9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFJlcGVhdGVkIGV2ZW50c1xuXHRcdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzID0gbmV3IFRvbmUuSW50ZXJ2YWxUaW1lbGluZSgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIEFsbCBvZiB0aGUgc3luY2VkIFNpZ25hbHNcblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zeW5jZWRTaWduYWxzID0gW107XG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8vXHRTV0lOR1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHN1YmRpdmlzaW9uIG9mIHRoZSBzd2luZ1xuXHRcdFx0XHQgKiAgQHR5cGUgIHtUaWNrc31cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ1RpY2tzID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMuUFBRIC8gMjtcblx0ICAgICAgICAgICAgLy84blxuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSBzd2luZyBhbW91bnRcblx0XHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ0Ftb3VudCA9IDA7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydCwgVG9uZS5FbWl0dGVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdicG0nOiAxMjAsXG5cdCAgICAgICAgJ3N3aW5nJzogMCxcblx0ICAgICAgICAnc3dpbmdTdWJkaXZpc2lvbic6ICc4bicsXG5cdCAgICAgICAgJ3RpbWVTaWduYXR1cmUnOiA0LFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogJzRtJyxcblx0ICAgICAgICAnUFBRJzogMTkyXG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRJQ0tTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgY2FsbGVkIG9uIGV2ZXJ5IHRpY2tcblx0XHQgKiAgQHBhcmFtICAge251bWJlcn0gdGlja1RpbWUgY2xvY2sgcmVsYXRpdmUgdGljayB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX3Byb2Nlc3NUaWNrID0gZnVuY3Rpb24gKHRpY2tUaW1lLCB0aWNrcykge1xuXHQgICAgICAgIC8vaGFuZGxlIHN3aW5nXG5cdCAgICAgICAgaWYgKHRoaXMuX3N3aW5nQW1vdW50ID4gMCAmJiB0aWNrcyAlIHRoaXMuX3BwcSAhPT0gMCAmJiAvL25vdCBvbiBhIGRvd25iZWF0XG5cdCAgICAgICAgICAgIHRpY2tzICUgKHRoaXMuX3N3aW5nVGlja3MgKiAyKSAhPT0gMCkge1xuXHQgICAgICAgICAgICAvL2FkZCBzb21lIHN3aW5nXG5cdCAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9IHRpY2tzICUgKHRoaXMuX3N3aW5nVGlja3MgKiAyKSAvICh0aGlzLl9zd2luZ1RpY2tzICogMik7XG5cdCAgICAgICAgICAgIHZhciBhbW91bnQgPSBNYXRoLnNpbihwcm9ncmVzcyAqIE1hdGguUEkpICogdGhpcy5fc3dpbmdBbW91bnQ7XG5cdCAgICAgICAgICAgIHRpY2tUaW1lICs9IFRvbmUuVGlja3ModGhpcy5fc3dpbmdUaWNrcyAqIDIgLyAzKS50b1NlY29uZHMoKSAqIGFtb3VudDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9kbyB0aGUgbG9vcCB0ZXN0XG5cdCAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICBpZiAodGlja3MgPj0gdGhpcy5fbG9vcEVuZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb29wRW5kJywgdGlja1RpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY2xvY2suc2V0VGlja3NBdFRpbWUodGhpcy5fbG9vcFN0YXJ0LCB0aWNrVGltZSk7XG5cdCAgICAgICAgICAgICAgICB0aWNrcyA9IHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9vcFN0YXJ0JywgdGlja1RpbWUsIHRoaXMuX2Nsb2NrLmdldFNlY29uZHNBdFRpbWUodGlja1RpbWUpKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9vcCcsIHRpY2tUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2ludm9rZSB0aGUgdGltZWxpbmUgZXZlbnRzIHNjaGVkdWxlZCBvbiB0aGlzIHRpY2tcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5mb3JFYWNoQXRUaW1lKHRpY2tzLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuaW52b2tlKHRpY2tUaW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U0NIRURVTEFCTEUgRVZFTlRTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYW4gZXZlbnQgYWxvbmcgdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBhdCB0aGUgdGltZS5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSAgdGltZSBUaGUgdGltZSB0byBpbnZva2UgdGhlIGNhbGxiYWNrIGF0LlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9IFRoZSBpZCBvZiB0aGUgZXZlbnQgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGNhbmNlbGluZyB0aGUgZXZlbnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIHRoZSBjYWxsYmFjayB3aGVuIHRoZSBUcmFuc3BvcnQgcmVhY2hlcyB0aGUgZGVzaXJlZCB0aW1lXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHRlbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUpO1xuXHRcdCAqIH0sIFwiMTI4aVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdGltZSkge1xuXHQgICAgICAgIHZhciBldmVudCA9IG5ldyBUb25lLlRyYW5zcG9ydEV2ZW50KHRoaXMsIHtcblx0ICAgICAgICAgICAgJ3RpbWUnOiBUb25lLlRyYW5zcG9ydFRpbWUodGltZSksXG5cdCAgICAgICAgICAgICdjYWxsYmFjayc6IGNhbGxiYWNrXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEV2ZW50KGV2ZW50LCB0aGlzLl90aW1lbGluZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGEgcmVwZWF0ZWQgZXZlbnQgYWxvbmcgdGhlIHRpbWVsaW5lLiBUaGUgZXZlbnQgd2lsbCBmaXJlXG5cdFx0ICogIGF0IHRoZSBgaW50ZXJ2YWxgIHN0YXJ0aW5nIGF0IHRoZSBgc3RhcnRUaW1lYCBhbmQgZm9yIHRoZSBzcGVjaWZpZWRcblx0XHQgKiAgYGR1cmF0aW9uYC5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayB0byBpbnZva2UuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICAgIGludGVydmFsICAgVGhlIGR1cmF0aW9uIGJldHdlZW4gc3VjY2Vzc2l2ZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy4gTXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZT19ICAgIHN0YXJ0VGltZSAgV2hlbiBhbG9uZyB0aGUgdGltZWxpbmUgdGhlIGV2ZW50cyBzaG91bGRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCBiZWluZyBpbnZva2VkLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkdXJhdGlvbj1JbmZpbml0eV0gSG93IGxvbmcgdGhlIGV2ZW50IHNob3VsZCByZXBlYXQuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICAgIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50LiBVc2UgdGhpcyB0byBjYW5jZWxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBldmVudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2EgY2FsbGJhY2sgaW52b2tlZCBldmVyeSBlaWdodGggbm90ZSBhZnRlciB0aGUgZmlyc3QgbWVhc3VyZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KGNhbGxiYWNrLCBcIjhuXCIsIFwiMW1cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2NoZWR1bGVSZXBlYXQgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGludGVydmFsLCBzdGFydFRpbWUsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQodGhpcywge1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiBjYWxsYmFjayxcblx0ICAgICAgICAgICAgJ2ludGVydmFsJzogVG9uZS5UaW1lKGludGVydmFsKSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKSxcblx0ICAgICAgICAgICAgJ2R1cmF0aW9uJzogVG9uZS5UaW1lKFRvbmUuZGVmYXVsdEFyZyhkdXJhdGlvbiwgSW5maW5pdHkpKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8va2ljayBpdCBvZmYgaWYgdGhlIFRyYW5zcG9ydCBpcyBzdGFydGVkXG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEV2ZW50KGV2ZW50LCB0aGlzLl9yZXBlYXRlZEV2ZW50cyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGFuIGV2ZW50IHRoYXQgd2lsbCBiZSByZW1vdmVkIGFmdGVyIGl0IGlzIGludm9rZWQuXG5cdFx0ICogIE5vdGUgdGhhdCBpZiB0aGUgZ2l2ZW4gdGltZSBpcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgdHJhbnNwb3J0IHRpbWUsXG5cdFx0ICogIHRoZSBldmVudCB3aWxsIGJlIGludm9rZWQgaW1tZWRpYXRlbHkuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugb25jZS5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSB0aW1lIFRoZSB0aW1lIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZC5cblx0XHQgKiAgQHJldHVybnMge051bWJlcn0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQuXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2NoZWR1bGVPbmNlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aW1lKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFRvbmUuVHJhbnNwb3J0RXZlbnQodGhpcywge1xuXHQgICAgICAgICAgICAndGltZSc6IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKSxcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogY2FsbGJhY2ssXG5cdCAgICAgICAgICAgICdvbmNlJzogdHJ1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hZGRFdmVudChldmVudCwgdGhpcy5fdGltZWxpbmUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhciB0aGUgcGFzc2VkIGluIGV2ZW50IGlkIGZyb20gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBldmVudElkIFRoZSBpZCBvZiB0aGUgZXZlbnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGV2ZW50SWQpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc2NoZWR1bGVkRXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50SWQpKSB7XG5cdCAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5fc2NoZWR1bGVkRXZlbnRzW2V2ZW50SWQudG9TdHJpbmcoKV07XG5cdCAgICAgICAgICAgIGl0ZW0udGltZWxpbmUucmVtb3ZlKGl0ZW0uZXZlbnQpO1xuXHQgICAgICAgICAgICBpdGVtLmV2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NjaGVkdWxlZEV2ZW50c1tldmVudElkLnRvU3RyaW5nKCldO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBBZGQgYW4gZXZlbnQgdG8gdGhlIGNvcnJlY3QgdGltZWxpbmUuIEtlZXAgdHJhY2sgb2YgdGhlXG5cdFx0ICogdGltZWxpbmUgaXQgd2FzIGFkZGVkIHRvLlxuXHRcdCAqIEBwYXJhbSB7VG9uZS5UcmFuc3BvcnRFdmVudH1cdGV2ZW50XG5cdFx0ICogQHBhcmFtIHtUb25lLlRpbWVsaW5lfSB0aW1lbGluZVxuXHRcdCAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBldmVudCBpZCB3aGljaCB3YXMganVzdCBhZGRlZFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX2FkZEV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50LCB0aW1lbGluZSkge1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50c1tldmVudC5pZC50b1N0cmluZygpXSA9IHtcblx0ICAgICAgICAgICAgJ2V2ZW50JzogZXZlbnQsXG5cdCAgICAgICAgICAgICd0aW1lbGluZSc6IHRpbWVsaW5lXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aW1lbGluZS5hZGQoZXZlbnQpO1xuXHQgICAgICAgIHJldHVybiBldmVudC5pZDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIHNjaGVkdWxlZCBldmVudHMgZnJvbSB0aGUgdGltZWxpbmUgYWZ0ZXJcblx0XHQgKiAgdGhlIGdpdmVuIHRpbWUuIFJlcGVhdGVkIGV2ZW50cyB3aWxsIGJlIHJlbW92ZWRcblx0XHQgKiAgaWYgdGhlaXIgc3RhcnRUaW1lIGlzIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gW2FmdGVyPTBdIENsZWFyIGFsbCBldmVudHMgYWZ0ZXJcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB0aW1lLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICBhZnRlciA9IFRvbmUuZGVmYXVsdEFyZyhhZnRlciwgMCk7XG5cdCAgICAgICAgYWZ0ZXIgPSB0aGlzLnRvVGlja3MoYWZ0ZXIpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLl9yZXBlYXRlZEV2ZW50cy5mb3JFYWNoRnJvbShhZnRlciwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2xlYXIoZXZlbnQuaWQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFNUQVJUL1NUT1AvUEFVU0Vcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBCaW5kIHN0YXJ0L3N0b3AvcGF1c2UgZXZlbnRzIGZyb20gdGhlIGNsb2NrIGFuZCBlbWl0IHRoZW0uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX2JpbmRDbG9ja0V2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbignc3RhcnQnLCBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuVGlja3Mob2Zmc2V0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbignc3RvcCcsIGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RvcCcsIHRpbWUpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sub24oJ3BhdXNlJywgZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdwYXVzZScsIHRpbWUpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiwgXCJzdG9wcGVkXCIsIG9yIFwicGF1c2VkXCJcblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay5nZXRTdGF0ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgdHJhbnNwb3J0IGFuZCBhbGwgc291cmNlcyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSB0cmFuc3BvcnQgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lPX0gb2Zmc2V0IFRoZSB0aW1lbGluZSBvZmZzZXQgdG8gc3RhcnQgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IGluIG9uZSBzZWNvbmQgc3RhcnRpbmcgYXQgYmVnaW5uaW5nIG9mIHRoZSA1dGggbWVhc3VyZS5cblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydChcIisxXCIsIFwiNDowOjBcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgY2xvY2tcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQob2Zmc2V0KSkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnRvVGlja3Mob2Zmc2V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY2xvY2suc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgdHJhbnNwb3J0IGFuZCBhbGwgc291cmNlcyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSB0cmFuc3BvcnQgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0b3AoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXVzZSB0aGUgdHJhbnNwb3J0IGFuZCBhbGwgc291cmNlcyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sucGF1c2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVG9nZ2xlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0cmFuc3BvcnQuIElmIGl0IGlzXG5cdFx0ICogc3RhcnRlZCwgaXQgd2lsbCBzdG9wIGl0LCBvdGhlcndpc2UgaXQgd2lsbCBzdGFydCB0aGUgVHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0fSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fY2xvY2suZ2V0U3RhdGVBdFRpbWUodGltZSkgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFNFVFRFUlMvR0VUVEVSU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHNpZ25hdHVyZSBhcyBqdXN0IHRoZSBudW1lcmF0b3Igb3ZlciA0LlxuXHRcdCAqICBGb3IgZXhhbXBsZSA0LzQgd291bGQgYmUganVzdCA0IGFuZCA2Lzggd291bGQgYmUgMy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfEFycmF5fVxuXHRcdCAqICBAbmFtZSB0aW1lU2lnbmF0dXJlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jb21tb24gdGltZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmUgPSA0O1xuXHRcdCAqIC8vIDcvOFxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmUgPSBbNywgOF07XG5cdFx0ICogLy90aGlzIHdpbGwgYmUgcmVkdWNlZCB0byBhIHNpbmdsZSBudW1iZXJcblx0XHQgKiBUb25lLlRyYW5zcG9ydC50aW1lU2lnbmF0dXJlOyAvL3JldHVybnMgMy41XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAndGltZVNpZ25hdHVyZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVTaWduYXR1cmU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lU2lnKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGltZVNpZykpIHtcblx0ICAgICAgICAgICAgICAgIHRpbWVTaWcgPSB0aW1lU2lnWzBdIC8gdGltZVNpZ1sxXSAqIDQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdGltZVNpZ25hdHVyZSA9IHRpbWVTaWc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBXaGVuIHRoZSBUb25lLlRyYW5zcG9ydC5sb29wID0gdHJ1ZSwgdGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGxvb3AuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcFN0YXJ0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHN0YXJ0UG9zaXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKHN0YXJ0UG9zaXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogV2hlbiB0aGUgVG9uZS5UcmFuc3BvcnQubG9vcCA9IHRydWUsIHRoaXMgaXMgdGhlIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgbG9vcC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BFbmQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZW5kUG9zaXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhlbmRQb3NpdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBsb29wIHN0YXJ0IGFuZCBzdG9wIGF0IHRoZSBzYW1lIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gc3RhcnRQb3NpdGlvblxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IGVuZFBvc2l0aW9uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9vcCBvdmVyIHRoZSBmaXJzdCBtZWFzdXJlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2V0TG9vcFBvaW50cygwLCBcIjFtXCIpO1xuXHRcdCAqIFRvbmUuVHJhbnNwb3J0Lmxvb3AgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnNldExvb3BQb2ludHMgPSBmdW5jdGlvbiAoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHtcblx0ICAgICAgICB0aGlzLmxvb3BTdGFydCA9IHN0YXJ0UG9zaXRpb247XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gZW5kUG9zaXRpb247XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzd2luZyB2YWx1ZS4gQmV0d2VlbiAwLTEgd2hlcmUgMSBlcXVhbCB0b1xuXHRcdCAqICB0aGUgbm90ZSArIGhhbGYgdGhlIHN1YmRpdmlzaW9uLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgc3dpbmdcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzd2luZycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N3aW5nQW1vdW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYW1vdW50KSB7XG5cdCAgICAgICAgICAgIC8vc2NhbGUgdGhlIHZhbHVlcyB0byBhIG5vcm1hbCByYW5nZVxuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ0Ftb3VudCA9IGFtb3VudDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIHN1YmRpdmlzaW9uIHdoaWNoIHRoZSBzd2luZyB3aWxsIGJlIGFwcGxpZWQgdG8uXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGFuIDh0aCBub3RlLiBWYWx1ZSBtdXN0IGJlIGxlc3Ncblx0XHQgKiAgdGhhbiBhIHF1YXJ0ZXIgbm90ZS5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBzd2luZ1N1YmRpdmlzaW9uXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc3dpbmdTdWJkaXZpc2lvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fc3dpbmdUaWNrcykudG9Ob3RhdGlvbigpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ViZGl2aXNpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3dpbmdUaWNrcyA9IHRoaXMudG9UaWNrcyhzdWJkaXZpc2lvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIFRyYW5zcG9ydCdzIHBvc2l0aW9uIGluIEJhcnM6QmVhdHM6U2l4dGVlbnRocy5cblx0XHQgKiAgU2V0dGluZyB0aGUgdmFsdWUgd2lsbCBqdW1wIHRvIHRoYXQgcG9zaXRpb24gcmlnaHQgYXdheS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7QmFyc0JlYXRzU2l4dGVlbnRoc31cblx0XHQgKiAgQG5hbWUgcG9zaXRpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdwb3NpdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuX2Nsb2NrLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRpY2tzKS50b0JhcnNCZWF0c1NpeHRlZW50aHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2dyZXNzKSB7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMudG9UaWNrcyhwcm9ncmVzcyk7XG5cdCAgICAgICAgICAgIHRoaXMudGlja3MgPSB0aWNrcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgVHJhbnNwb3J0J3MgcG9zaXRpb24gaW4gc2Vjb25kc1xuXHRcdCAqICBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIGp1bXAgdG8gdGhhdCBwb3NpdGlvbiByaWdodCBhd2F5LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtTZWNvbmRzfVxuXHRcdCAqICBAbmFtZSBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc2Vjb25kcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLnNlY29uZHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLmJwbS50aW1lVG9UaWNrcyhzLCBub3cpO1xuXHQgICAgICAgICAgICB0aGlzLnRpY2tzID0gdGlja3M7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIFRyYW5zcG9ydCdzIGxvb3AgcG9zaXRpb24gYXMgYSBub3JtYWxpemVkIHZhbHVlLiBBbHdheXNcblx0XHQgKiAgcmV0dXJucyAwIGlmIHRoZSB0cmFuc3BvcnQgaWYgbG9vcCBpcyBub3QgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAbmFtZSBwcm9ncmVzc1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAncHJvZ3Jlc3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5fY2xvY2suZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAodGlja3MgLSB0aGlzLl9sb29wU3RhcnQpIC8gKHRoaXMuX2xvb3BFbmQgLSB0aGlzLl9sb29wU3RhcnQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdHJhbnNwb3J0cyBjdXJyZW50IHRpY2sgcG9zaXRpb24uXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICogIEBuYW1lIHRpY2tzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAndGlja3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay50aWNrcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2Nsb2NrLnRpY2tzICE9PSB0KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgICAgIC8vc3RvcCBldmVyeXRoaW5nIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgbm93KTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9jay5zZXRUaWNrc0F0VGltZSh0LCBub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vcmVzdGFydCBpdCB3aXRoIHRoZSBuZXcgdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RhcnQnLCBub3csIHRoaXMuc2Vjb25kcyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb2NrLnNldFRpY2tzQXRUaW1lKHQsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgY2xvY2sncyB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIGdldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgICBUaGUgdGljayB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5fY2xvY2suZ2V0VGlja3NBdFRpbWUodGltZSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGVsYXBzZWQgc2Vjb25kcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSBlbGFwc2VkIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9ICBUaGUgbnVtYmVyIG9mIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmdldFNlY29uZHNBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay5nZXRTZWNvbmRzQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQdWxzZXMgUGVyIFF1YXJ0ZXIgbm90ZS4gVGhpcyBpcyB0aGUgc21hbGxlc3QgcmVzb2x1dGlvblxuXHRcdCAqICB0aGUgVHJhbnNwb3J0IHRpbWluZyBzdXBwb3J0cy4gVGhpcyBzaG91bGQgYmUgc2V0IG9uY2Vcblx0XHQgKiAgb24gaW5pdGlhbGl6YXRpb24gYW5kIG5vdCBzZXQgYWdhaW4uIENoYW5naW5nIHRoaXMgdmFsdWVcblx0XHQgKiAgYWZ0ZXIgb3RoZXIgb2JqZWN0cyBoYXZlIGJlZW4gY3JlYXRlZCBjYW4gY2F1c2UgcHJvYmxlbXMuXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBQUFFcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdQUFEnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcHE7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcHEpIHtcblx0ICAgICAgICAgICAgdmFyIGJwbSA9IHRoaXMuYnBtLnZhbHVlO1xuXHQgICAgICAgICAgICB0aGlzLl9wcHEgPSBwcHE7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLnZhbHVlID0gYnBtO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZnJvbSBCUE0gdG8gZnJlcXVlbmN5IChmYWN0b3JpbmcgaW4gUFBRKVxuXHRcdCAqICBAcGFyYW0gIHtCUE19ICBicG0gVGhlIEJQTSB2YWx1ZSB0byBjb252ZXJ0IHRvIGZyZXF1ZW5jeVxuXHRcdCAqICBAcmV0dXJuICB7RnJlcXVlbmN5fSAgVGhlIEJQTSBhcyBhIGZyZXF1ZW5jeSB3aXRoIFBQUSBmYWN0b3JlZCBpbi5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fZnJvbVVuaXRzID0gZnVuY3Rpb24gKGJwbSkge1xuXHQgICAgICAgIHJldHVybiAxIC8gKDYwIC8gYnBtIC8gdGhpcy5QUFEpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGZyb20gZnJlcXVlbmN5ICh3aXRoIFBQUSkgaW50byBCUE1cblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSAgZnJlcSBUaGUgY2xvY2tzIGZyZXF1ZW5jeSB0byBjb252ZXJ0IHRvIEJQTVxuXHRcdCAqICBAcmV0dXJuICB7QlBNfSAgVGhlIGZyZXF1ZW5jeSB2YWx1ZSBhcyBCUE0uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX3RvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiBmcmVxIC8gdGhpcy5QUFEgKiA2MDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U1lOQ0lOR1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHRpbWUgYWxpZ25lZCB0byB0aGUgbmV4dCBzdWJkaXZpc2lvblxuXHRcdCAqICBvZiB0aGUgVHJhbnNwb3J0LiBJZiB0aGUgVHJhbnNwb3J0IGlzIG5vdCBzdGFydGVkLFxuXHRcdCAqICBpdCB3aWxsIHJldHVybiAwLlxuXHRcdCAqICBOb3RlOiB0aGlzIHdpbGwgbm90IHdvcmsgcHJlY2lzZWx5IGR1cmluZyB0ZW1wbyByYW1wcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHN1YmRpdmlzaW9uICBUaGUgc3ViZGl2aXNpb24gdG8gcXVhbnRpemUgdG9cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIFRoZSBjb250ZXh0IHRpbWUgb2YgdGhlIG5leHQgc3ViZGl2aXNpb24uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoKTsgLy90aGUgdHJhbnNwb3J0IG11c3QgYmUgc3RhcnRlZFxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0Lm5leHRTdWJkaXZpc2lvbihcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLm5leHRTdWJkaXZpc2lvbiA9IGZ1bmN0aW9uIChzdWJkaXZpc2lvbikge1xuXHQgICAgICAgIHN1YmRpdmlzaW9uID0gdGhpcy50b1RpY2tzKHN1YmRpdmlzaW9uKTtcblx0ICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIC8vaWYgdGhlIHRyYW5zcG9ydCdzIG5vdCBzdGFydGVkLCByZXR1cm4gMFxuXHQgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgLy90aGUgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50IHRpY2tzIGFuZCB0aGUgc3ViZGl2aXNpb25cblx0ICAgICAgICAgICAgdmFyIHRyYW5zcG9ydFBvcyA9IHRoaXMuZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgdmFyIHJlbWFpbmluZ1RpY2tzID0gc3ViZGl2aXNpb24gLSB0cmFuc3BvcnRQb3MgJSBzdWJkaXZpc2lvbjtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLm5leHRUaWNrVGltZShyZW1haW5pbmdUaWNrcywgbm93KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEF0dGFjaGVzIHRoZSBzaWduYWwgdG8gdGhlIHRlbXBvIGNvbnRyb2wgc2lnbmFsIHNvIHRoYXRcblx0XHQgKiAgYW55IGNoYW5nZXMgaW4gdGhlIHRlbXBvIHdpbGwgY2hhbmdlIHRoZSBzaWduYWwgaW4gdGhlIHNhbWVcblx0XHQgKiAgcmF0aW8uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VG9uZS5TaWduYWx9IHNpZ25hbFxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHJhdGlvIE9wdGlvbmFsbHkgcGFzcyBpbiB0aGUgcmF0aW8gYmV0d2VlblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0d28gc2lnbmFscy4gT3RoZXJ3aXNlIGl0IHdpbGwgYmUgY29tcHV0ZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGVpciBjdXJyZW50IHZhbHVlcy5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc3luY1NpZ25hbCA9IGZ1bmN0aW9uIChzaWduYWwsIHJhdGlvKSB7XG5cdCAgICAgICAgaWYgKCFyYXRpbykge1xuXHQgICAgICAgICAgICAvL2dldCB0aGUgc3luYyByYXRpb1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKHNpZ25hbC5nZXRWYWx1ZUF0VGltZShub3cpICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByYXRpbyA9IHNpZ25hbC5nZXRWYWx1ZUF0VGltZShub3cpIC8gdGhpcy5icG0uZ2V0VmFsdWVBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJhdGlvID0gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmF0aW9TaWduYWwgPSBuZXcgVG9uZS5HYWluKHJhdGlvKTtcblx0ICAgICAgICB0aGlzLmJwbS5jaGFpbihyYXRpb1NpZ25hbCwgc2lnbmFsLl9wYXJhbSk7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkU2lnbmFscy5wdXNoKHtcblx0ICAgICAgICAgICAgJ3JhdGlvJzogcmF0aW9TaWduYWwsXG5cdCAgICAgICAgICAgICdzaWduYWwnOiBzaWduYWwsXG5cdCAgICAgICAgICAgICdpbml0aWFsJzogc2lnbmFsLnZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgc2lnbmFsLnZhbHVlID0gMDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVW5zeW5jcyBhIHByZXZpb3VzbHkgc3luY2VkIHNpZ25hbCBmcm9tIHRoZSB0cmFuc3BvcnQncyBjb250cm9sLlxuXHRcdCAqICBTZWUgVG9uZS5UcmFuc3BvcnQuc3luY1NpZ25hbC5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5TaWduYWx9IHNpZ25hbFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS51bnN5bmNTaWduYWwgPSBmdW5jdGlvbiAoc2lnbmFsKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX3N5bmNlZFNpZ25hbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgdmFyIHN5bmNlZFNpZ25hbCA9IHRoaXMuX3N5bmNlZFNpZ25hbHNbaV07XG5cdCAgICAgICAgICAgIGlmIChzeW5jZWRTaWduYWwuc2lnbmFsID09PSBzaWduYWwpIHtcblx0ICAgICAgICAgICAgICAgIHN5bmNlZFNpZ25hbC5yYXRpby5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICBzeW5jZWRTaWduYWwuc2lnbmFsLnZhbHVlID0gc3luY2VkU2lnbmFsLmluaXRpYWw7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zeW5jZWRTaWduYWxzLnNwbGljZShpLCAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnYnBtJyk7XG5cdCAgICAgICAgdGhpcy5icG0gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0SU5JVElBTElaQVRJT05cblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIHZhciBUcmFuc3BvcnRDb25zdHJ1Y3RvciA9IFRvbmUuVHJhbnNwb3J0O1xuXHQgICAgVG9uZS5UcmFuc3BvcnQgPSBuZXcgVHJhbnNwb3J0Q29uc3RydWN0b3IoKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuVHJhbnNwb3J0IGluc3RhbmNlb2YgVHJhbnNwb3J0Q29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQgPSBjb250ZXh0LlRyYW5zcG9ydDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydCA9IG5ldyBUcmFuc3BvcnRDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3N0b3JlIHRoZSBUcmFuc3BvcnQgb24gdGhlIGNvbnRleHQgc28gaXQgY2FuIGJlIHJldHJpZXZlZCBsYXRlclxuXHQgICAgICAgIGNvbnRleHQuVHJhbnNwb3J0ID0gVG9uZS5UcmFuc3BvcnQ7XG5cdCAgICB9KTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignY2xvc2UnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0LlRyYW5zcG9ydCBpbnN0YW5jZW9mIFRyYW5zcG9ydENvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIGNvbnRleHQuVHJhbnNwb3J0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVm9sdW1lIGlzIGEgc2ltcGxlIHZvbHVtZSBub2RlLCB1c2VmdWwgZm9yIGNyZWF0aW5nIGEgdm9sdW1lIGZhZGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFt2b2x1bWU9MF0gdGhlIGluaXRpYWwgdm9sdW1lXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHZvbCA9IG5ldyBUb25lLlZvbHVtZSgtMTIpO1xuXHRcdCAqIGluc3RydW1lbnQuY2hhaW4odm9sLCBUb25lLk1hc3Rlcik7XG5cdFx0ICovXG5cdCAgICBUb25lLlZvbHVtZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3ZvbHVtZSddLCBUb25lLlZvbHVtZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSBvdXRwdXQgbm9kZVxuXHRcdFx0ICogQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy52b2x1bWUsIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdW5tdXRlZCB2b2x1bWVcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl91bm11dGVkVm9sdW1lID0gb3B0aW9ucy52b2x1bWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZvbHVtZSBjb250cm9sIGluIGRlY2liZWxzLlxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMub3V0cHV0LmdhaW47XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBtdXRlIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlZvbHVtZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Wb2x1bWUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Wb2x1bWUjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiB2b2x1bWUubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Wb2x1bWUucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMudm9sdW1lLnZhbHVlID09PSAtSW5maW5pdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5tdXRlICYmIG11dGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3VubXV0ZWRWb2x1bWUgPSB0aGlzLnZvbHVtZS52YWx1ZTtcblx0ICAgICAgICAgICAgICAgIC8vbWF5YmUgaXQgc2hvdWxkIHJhbXAgaGVyZT9cblx0ICAgICAgICAgICAgICAgIHRoaXMudm9sdW1lLnZhbHVlID0gLUluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubXV0ZSAmJiAhbXV0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy52b2x1bWUudmFsdWUgPSB0aGlzLl91bm11dGVkVm9sdW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVm9sdW1lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlZvbHVtZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmlucHV0LmRpc3Bvc2UoKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlZvbHVtZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIHNpbmdsZSBtYXN0ZXIgb3V0cHV0IHdoaWNoIGlzIGNvbm5lY3RlZCB0byB0aGVcblx0XHQgKiAgICAgICAgICBBdWRpb0Rlc3RpbmF0aW9uTm9kZSAoYWthIHlvdXIgc3BlYWtlcnMpLlxuXHRcdCAqICAgICAgICAgIEl0IHByb3ZpZGVzIHVzZWZ1bCBjb252ZW5pZW5jZXMgc3VjaCBhcyB0aGUgYWJpbGl0eVxuXHRcdCAqICAgICAgICAgIHRvIHNldCB0aGUgdm9sdW1lIGFuZCBtdXRlIHRoZSBlbnRpcmUgYXBwbGljYXRpb24uXG5cdFx0ICogICAgICAgICAgSXQgYWxzbyBnaXZlcyB5b3UgdGhlIGFiaWxpdHkgdG8gYXBwbHkgbWFzdGVyIGVmZmVjdHMgdG8geW91ciBhcHBsaWNhdGlvbi5cblx0XHQgKiAgICAgICAgICA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgIExpa2UgVG9uZS5UcmFuc3BvcnQsIEEgc2luZ2xlIFRvbmUuTWFzdGVyIGlzIGNyZWF0ZWRcblx0XHQgKiAgICAgICAgICBvbiBpbml0aWFsaXphdGlvbiBhbmQgeW91IGRvIG5vdCBuZWVkIHRvIGV4cGxpY2l0bHkgY29uc3RydWN0IG9uZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RoZSBhdWRpbyB3aWxsIGdvIGZyb20gdGhlIG9zY2lsbGF0b3IgdG8gdGhlIHNwZWFrZXJzXG5cdFx0ICogb3NjaWxsYXRvci5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0XHQgKiAvL2EgY29udmVuaWVuY2UgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIG1hc3RlciBvdXRwdXQgaXMgYWxzbyBwcm92aWRlZDpcblx0XHQgKiBvc2NpbGxhdG9yLnRvTWFzdGVyKCk7XG5cdFx0ICogLy90aGUgYWJvdmUgdHdvIGV4YW1wbGVzIGFyZSBlcXVpdmFsZW50LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5NYXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHByaXZhdGUgdm9sdW1lIG5vZGVcblx0XHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG1hc3RlciBvdXRwdXQuXG5cdFx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLm91dHB1dCwgdGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWFzdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3Rlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk1hc3RlciNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIFRvbmUuTWFzdGVyLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWFzdGVyLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIG1hc3RlciBlZmZlY3RzIGNoYWluLiBOT1RFOiB0aGlzIHdpbGwgZGlzY29ubmVjdCBhbnkgbm9kZXMgd2hpY2ggd2VyZSBwcmV2aW91c2x5XG5cdFx0ICogIGNoYWluZWQgaW4gdGhlIG1hc3RlciBlZmZlY3RzIGNoYWluLlxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvTm9kZXxUb25lfSBhcmdzLi4uIEFsbCBhcmd1bWVudHMgd2lsbCBiZSBjb25uZWN0ZWQgaW4gYSByb3dcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIE1hc3RlciB3aWxsIGJlIHJvdXRlZCB0aHJvdWdoIGl0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NYXN0ZXJ9ICB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zb21lIG92ZXJhbGwgY29tcHJlc3Npb24gdG8ga2VlcCB0aGUgbGV2ZWxzIGluIGNoZWNrXG5cdFx0ICogdmFyIG1hc3RlckNvbXByZXNzb3IgPSBuZXcgVG9uZS5Db21wcmVzc29yKHtcblx0XHQgKiBcdFwidGhyZXNob2xkXCIgOiAtNixcblx0XHQgKiBcdFwicmF0aW9cIiA6IDMsXG5cdFx0ICogXHRcImF0dGFja1wiIDogMC41LFxuXHRcdCAqIFx0XCJyZWxlYXNlXCIgOiAwLjFcblx0XHQgKiB9KTtcblx0XHQgKiAvL2dpdmUgYSBsaXR0bGUgYm9vc3QgdG8gdGhlIGxvd3Ncblx0XHQgKiB2YXIgbG93QnVtcCA9IG5ldyBUb25lLkZpbHRlcigyMDAsIFwibG93c2hlbGZcIik7XG5cdFx0ICogLy9yb3V0ZSBldmVyeXRoaW5nIHRocm91Z2ggdGhlIGZpbHRlclxuXHRcdCAqIC8vYW5kIGNvbXByZXNzb3IgYmVmb3JlIGdvaW5nIHRvIHRoZSBzcGVha2Vyc1xuXHRcdCAqIFRvbmUuTWFzdGVyLmNoYWluKGxvd0J1bXAsIG1hc3RlckNvbXByZXNzb3IpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NYXN0ZXIucHJvdG90eXBlLmNoYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4uYXBwbHkodGhpcy5pbnB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NYXN0ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3Rlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFVR01FTlQgVE9ORSdzIFBST1RPVFlQRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQ29ubmVjdCAndGhpcycgdG8gdGhlIG1hc3RlciBvdXRwdXQuIFNob3J0aGFuZCBmb3IgdGhpcy5jb25uZWN0KFRvbmUuTWFzdGVyKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Nvbm5lY3QgYW4gb3NjaWxsYXRvciB0byB0aGUgbWFzdGVyIG91dHB1dFxuXHRcdCAqIHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkudG9NYXN0ZXIoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS50b01hc3RlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIGlmICh3aW5kb3cuQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgLy8gQWxzbyBhdWdtZW50IEF1ZGlvTm9kZSdzIHByb3RvdHlwZSB0byBpbmNsdWRlIHRvTWFzdGVyIGFzIGEgY29udmVuaWVuY2Vcblx0ICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLnRvTWFzdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHQgICAgLyoqXG5cdFx0ICogIGluaXRpYWxpemUgdGhlIG1vZHVsZSBhbmQgbGlzdGVuIGZvciBuZXcgYXVkaW8gY29udGV4dHNcblx0XHQgKi9cblx0ICAgIHZhciBNYXN0ZXJDb25zdHJ1Y3RvciA9IFRvbmUuTWFzdGVyO1xuXHQgICAgVG9uZS5NYXN0ZXIgPSBuZXcgTWFzdGVyQ29uc3RydWN0b3IoKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgLy8gaWYgaXQgYWxyZWFkeSBleGlzdHMsIGp1c3QgcmVzdG9yZSBpdFxuXHQgICAgICAgIGlmIChjb250ZXh0Lk1hc3RlciBpbnN0YW5jZW9mIE1hc3RlckNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIFRvbmUuTWFzdGVyID0gY29udGV4dC5NYXN0ZXI7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgVG9uZS5NYXN0ZXIgPSBuZXcgTWFzdGVyQ29uc3RydWN0b3IoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgY29udGV4dC5NYXN0ZXIgPSBUb25lLk1hc3Rlcjtcblx0ICAgIH0pO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdjbG9zZScsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuTWFzdGVyIGluc3RhbmNlb2YgTWFzdGVyQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgY29udGV4dC5NYXN0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmUuTWFzdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJhc2UgY2xhc3MgZm9yIHNvdXJjZXMuIFNvdXJjZXMgaGF2ZSBzdGFydC9zdG9wIG1ldGhvZHNcblx0XHQgKiAgICAgICAgICBhbmQgdGhlIGFiaWxpdHkgdG8gYmUgc3luY2VkIHRvIHRoZVxuXHRcdCAqICAgICAgICAgIHN0YXJ0L3N0b3Agb2YgVG9uZS5UcmFuc3BvcnQuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL011bHRpcGxlIHN0YXRlIGNoYW5nZSBldmVudHMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIsXG5cdFx0ICogLy9idXQgbXVzdCBiZSBzZXQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgYW5kIHdpdGggYXNjZW5kaW5nIHRpbWVzXG5cdFx0ICpcblx0XHQgKiAvLyBPS1xuXHRcdCAqIHN0YXRlLnN0YXJ0KCkuc3RvcChcIiswLjJcIik7XG5cdFx0ICogLy8gQU5EXG5cdFx0ICogc3RhdGUuc3RhcnQoKS5zdG9wKFwiKzAuMlwiKS5zdGFydChcIiswLjRcIikuc3RvcChcIiswLjdcIilcblx0XHQgKlxuXHRcdCAqIC8vIEJBRFxuXHRcdCAqIHN0YXRlLnN0b3AoXCIrMC4yXCIpLnN0YXJ0KCk7XG5cdFx0ICogLy8gT1Jcblx0XHQgKiBzdGF0ZS5zdGFydChcIiswLjNcIikuc3RvcChcIiswLjJcIik7XG5cdFx0ICpcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuU291cmNlLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvdXRwdXQgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogc291cmNlLnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFx0S2VlcCB0cmFjayBvZiB0aGUgc2NoZWR1bGVkIHN0YXRlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLm1lbW9yeSA9IDEwMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3luY2VkIGBzdGFydGAgY2FsbGJhY2sgZnVuY3Rpb24gZnJvbSB0aGUgdHJhbnNwb3J0XG5cdFx0XHQgKiAgQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBLZWVwIHRyYWNrIG9mIGFsbCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IGlkc1xuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IFtdO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgb3V0cHV0IGV4cGxpY2l0bHkgc3RlcmVvXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLm91dHB1dC5vdXRwdXQuY2hhbm5lbENvdW50ID0gMjtcblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICAvL211dGUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU291cmNlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU291cmNlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHNvdXJjZS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNvdXJjZS5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vb3ZlcndyaXRlIHRoZXNlIGZ1bmN0aW9uc1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLl9zdGFydCA9IFRvbmUubm9PcDtcblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5yZXN0YXJ0ID0gVG9uZS5ub09wO1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLl9zdG9wID0gVG9uZS5ub09wO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBzb3VyY2UgYXQgdGhlIHNwZWNpZmllZCB0aW1lLiBJZiBubyB0aW1lIGlzIGdpdmVuLFxuXHRcdCAqICBzdGFydCB0aGUgc291cmNlIG5vdy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBzb3VyY2Ugc2hvdWxkIGJlIHN0YXJ0ZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zdGFydChcIiswLjVcIik7IC8vc3RhcnRzIHRoZSBzb3VyY2UgMC41IHNlY29uZHMgZnJvbSBub3dcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSAmJiB0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0LnNlY29uZHM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2lmIGl0J3Mgc3RhcnRlZCwgc3RvcCBpdCBhbmQgcmVzdGFydCBpdFxuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5yZXN0YXJ0KHRpbWUsIG9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RhcnRlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgb2Zmc2V0IHRpbWUgdG8gdGhlIGV2ZW50XG5cdCAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQodGltZSk7XG5cdCAgICAgICAgICAgICAgICBldmVudC5vZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LmR1cmF0aW9uID0gZHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICB2YXIgc2NoZWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHQsIG9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZC5wdXNoKHNjaGVkKTtcblx0ICAgICAgICAgICAgICAgIC8vaWYgaXQncyBhbHJlYWR5IHN0YXJ0ZWRcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3luY2VkU3RhcnQodGhpcy5ub3coKSwgVG9uZS5UcmFuc3BvcnQuc2Vjb25kcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdGFydC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBzb3VyY2UgYXQgdGhlIHNwZWNpZmllZCB0aW1lLiBJZiBubyB0aW1lIGlzIGdpdmVuLFxuXHRcdCAqICBzdG9wIHRoZSBzb3VyY2Ugbm93LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHNvdXJjZSBzaG91bGQgYmUgc3RvcHBlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0b3AoKTsgLy8gc3RvcHMgdGhlIHNvdXJjZSBpbW1lZGlhdGVseVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGltZSkgJiYgdGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydC5zZWNvbmRzO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCF0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBzY2hlZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKHRoaXMuX3N0b3AuYmluZCh0aGlzKSwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZC5wdXNoKHNjaGVkKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN5bmMgdGhlIHNvdXJjZSB0byB0aGUgVHJhbnNwb3J0IHNvIHRoYXQgYWxsIHN1YnNlcXVlbnRcblx0XHQgKiAgY2FsbHMgdG8gYHN0YXJ0YCBhbmQgYHN0b3BgIGFyZSBzeW5jZWQgdG8gdGhlIFRyYW5zcG9ydFRpbWVcblx0XHQgKiAgaW5zdGVhZCBvZiB0aGUgQXVkaW9Db250ZXh0IHRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zeW5jIHRoZSBzb3VyY2Ugc28gdGhhdCBpdCBwbGF5cyBiZXR3ZWVuIDAgYW5kIDAuMyBvbiB0aGUgVHJhbnNwb3J0J3MgdGltZWxpbmVcblx0XHQgKiBzb3VyY2Uuc3luYygpLnN0YXJ0KDApLnN0b3AoMC4zKTtcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoKTtcblx0XHQgKlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB3aXRoIGFuIG9mZnNldCBhbmQgdGhlIHN5bmMnZWQgc291cmNlc1xuXHRcdCAqIC8vd2lsbCBzdGFydCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvblxuXHRcdCAqIHNvdXJjZS5zeW5jKCkuc3RhcnQoMC4xKTtcblx0XHQgKiAvL3RoZSBzb3VyY2Ugd2lsbCBiZSBpbnZva2VkIHdpdGggYW4gb2Zmc2V0IG9mIDAuNFxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KFwiKzAuNVwiLCAwLjUpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLl9zeW5jZWRTdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldCA+IDApIHtcblx0ICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgcGxheWJhY2sgc3RhdGUgYXQgdGhhdCB0aW1lXG5cdCAgICAgICAgICAgICAgICB2YXIgc3RhdGVFdmVudCA9IHRoaXMuX3N0YXRlLmdldChvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgLy8gbGlzdGVuIGZvciBzdGFydCBldmVudHMgd2hpY2ggbWF5IG9jY3VyIGluIHRoZSBtaWRkbGUgb2YgdGhlIHN5bmMnZWQgdGltZVxuXHQgICAgICAgICAgICAgICAgaWYgKHN0YXRlRXZlbnQgJiYgc3RhdGVFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIHN0YXRlRXZlbnQudGltZSAhPT0gb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBvZmZzZXRcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSBvZmZzZXQgLSB0aGlzLnRvU2Vjb25kcyhzdGF0ZUV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVFdmVudC5kdXJhdGlvbikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKHN0YXRlRXZlbnQuZHVyYXRpb24pIC0gc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUsIHRoaXMudG9TZWNvbmRzKHN0YXRlRXZlbnQub2Zmc2V0KSArIHN0YXJ0T2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkU3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHZhciBzZWNvbmRzID0gVG9uZS5UcmFuc3BvcnQuZ2V0U2Vjb25kc0F0VGltZShNYXRoLm1heCh0aW1lIC0gdGhpcy5zYW1wbGVUaW1lLCAwKSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShzZWNvbmRzKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9uKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9zeW5jZWRTdGFydCk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub24oJ3N0b3AgcGF1c2UgbG9vcEVuZCcsIHRoaXMuX3N5bmNlZFN0b3ApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbnN5bmMgdGhlIHNvdXJjZSB0byB0aGUgVHJhbnNwb3J0LiBTZWUgVG9uZS5Tb3VyY2Uuc3luY1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5vZmYoJ3N0b3AgcGF1c2UgbG9vcEVuZCcsIHRoaXMuX3N5bmNlZFN0b3ApO1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5vZmYoJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX3N5bmNlZFN0YXJ0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gZmFsc2U7XG5cdCAgICAgICAgLy8gY2xlYXIgYWxsIG9mIHRoZSBzY2hlZHVsZWQgaWRzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zY2hlZHVsZWQubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5fc2NoZWR1bGVkW2ldO1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihpZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IFtdO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCgwKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKlx0Q2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNvdXJjZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEF1ZGlvQnVmZmVyLmNvcHlUby9Gcm9tQ2hhbm5lbCBwb2x5ZmlsbFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCFBdWRpb0J1ZmZlci5wcm90b3R5cGUuY29weVRvQ2hhbm5lbCkge1xuXHQgICAgICAgICAgICBBdWRpb0J1ZmZlci5wcm90b3R5cGUuY29weVRvQ2hhbm5lbCA9IGZ1bmN0aW9uIChzcmMsIGNoYW5OdW0sIHN0YXJ0KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IHRoaXMuZ2V0Q2hhbm5lbERhdGEoY2hhbk51bSk7XG5cdCAgICAgICAgICAgICAgICBzdGFydCA9IHN0YXJ0IHx8IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5uZWwubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2kgKyBzdGFydF0gPSBzcmNbaV07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIEF1ZGlvQnVmZmVyLnByb3RvdHlwZS5jb3B5RnJvbUNoYW5uZWwgPSBmdW5jdGlvbiAoZGVzdCwgY2hhbk51bSwgc3RhcnQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gdGhpcy5nZXRDaGFubmVsRGF0YShjaGFuTnVtKTtcblx0ICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVzdC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGRlc3RbaV0gPSBjaGFubmVsW2kgKyBzdGFydF07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJ1ZmZlciBsb2FkaW5nIGFuZCBzdG9yYWdlLiBUb25lLkJ1ZmZlciBpcyB1c2VkIGludGVybmFsbHkgYnkgYWxsXG5cdFx0ICogICAgICAgICAgY2xhc3NlcyB0aGF0IG1ha2UgcmVxdWVzdHMgZm9yIGF1ZGlvIGZpbGVzIHN1Y2ggYXMgVG9uZS5QbGF5ZXIsXG5cdFx0ICogICAgICAgICAgVG9uZS5TYW1wbGVyIGFuZCBUb25lLkNvbnZvbHZlci5cblx0XHQgKlxuXHRcdCAqICAgICAgICAgIEFzaWRlIGZyb20gbG9hZCBjYWxsYmFja3MgZnJvbSBpbmRpdmlkdWFsIGJ1ZmZlcnMsIFRvbmUuQnVmZmVyXG5cdFx0ICogIFx0XHRwcm92aWRlcyBldmVudHMgd2hpY2gga2VlcCB0cmFjayBvZiB0aGUgbG9hZGluZyBwcm9ncmVzc1xuXHRcdCAqICBcdFx0b2YgX2FsbF8gb2YgdGhlIGJ1ZmZlcnMuIFRoZXNlIGFyZSBUb25lLkJ1ZmZlci5vbihcImxvYWRcIiAvIFwicHJvZ3Jlc3NcIiAvIFwiZXJyb3JcIilcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7QXVkaW9CdWZmZXJ8U3RyaW5nfSB1cmwgVGhlIHVybCB0byBsb2FkLCBvciB0aGUgYXVkaW8gYnVmZmVyIHRvIHNldC5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBBIGNhbGxiYWNrIHdoaWNoIGlzIGludm9rZWQgYWZ0ZXIgdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQncyByZWNvbW1lbmRlZCB0byB1c2UgYFRvbmUuQnVmZmVyLm9uKCdsb2FkJywgY2FsbGJhY2spYCBpbnN0ZWFkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luY2UgaXQgd2lsbCBnaXZlIHlvdSBhIGNhbGxiYWNrIHdoZW4gX2FsbF8gYnVmZmVycyBhcmUgbG9hZGVkLlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25lcnJvciBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGlmIHRoZXJlIGlzIGFuIGVycm9yXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihcInBhdGgvdG8vc291bmQubXAzXCIsIGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3RoZSBidWZmZXIgaXMgbm93IGF2YWlsYWJsZS5cblx0XHQgKiBcdHZhciBidWZmID0gYnVmZmVyLmdldCgpO1xuXHRcdCAqIH0pO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIGxvYWQgcHJvdmlkZSBmYWxsYmFjayBleHRlbnNpb24gdHlwZXMgaWYgdGhlIGZpcnN0IHR5cGUgaXMgbm90IHN1cHBvcnRlZC5cblx0XHQgKiB2YXIgYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKFwicGF0aC90by9zb3VuZC5bbXAzfG9nZ3x3YXZdXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCcsXG5cdCAgICAgICAgICAgICdvbmVycm9yJ1xuXHQgICAgICAgIF0sIFRvbmUuQnVmZmVyKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3RvcmVzIHRoZSBsb2FkZWQgQXVkaW9CdWZmZXJcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaW5kaWNhdGVzIGlmIHRoZSBidWZmZXIgc2hvdWxkIGJlIHJldmVyc2VkIG9yIG5vdFxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yZXZlcnNlZCA9IG9wdGlvbnMucmV2ZXJzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgWEhSXG5cdFx0XHQgKiAgQHR5cGUgIHtYTUxIdHRwUmVxdWVzdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFByaXZhdGUgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmxvYWQgPSBUb25lLm5vT3A7XG5cdCAgICAgICAgaWYgKG9wdGlvbnMudXJsIGluc3RhbmNlb2YgQXVkaW9CdWZmZXIgfHwgb3B0aW9ucy51cmwgaW5zdGFuY2VvZiBUb25lLkJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLnNldChvcHRpb25zLnVybCk7XG5cdCAgICAgICAgICAgIC8vIGludm9rZSB0aGUgb25sb2FkIGNhbGxiYWNrXG5cdCAgICAgICAgICAgIGlmIChvcHRpb25zLm9ubG9hZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9hZGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29ubG9hZCA9IG9wdGlvbnMub25sb2FkO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKG9wdGlvbnMudXJsKSkge1xuXHQgICAgICAgICAgICB0aGlzLmxvYWQob3B0aW9ucy51cmwpLnRoZW4ob3B0aW9ucy5vbmxvYWQpLmNhdGNoKG9wdGlvbnMub25lcnJvcik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQnVmZmVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndXJsJzogdW5kZWZpbmVkLFxuXHQgICAgICAgICdyZXZlcnNlJzogZmFsc2UsXG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnb25lcnJvcic6IFRvbmUubm9PcFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXNzIGluIGFuIEF1ZGlvQnVmZmVyIG9yIFRvbmUuQnVmZmVyIHRvIHNldCB0aGUgdmFsdWVcblx0XHQgKiAgb2YgdGhpcyBidWZmZXIuXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9CdWZmZXJ8VG9uZS5CdWZmZXJ9IGJ1ZmZlciB0aGUgYnVmZmVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICBpZiAoYnVmZmVyIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIpIHtcblx0ICAgICAgICAgICAgaWYgKGJ1ZmZlci5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IGJ1ZmZlci5nZXQoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlci5fb25sb2FkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25sb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQHJldHVybiB7QXVkaW9CdWZmZXJ9IFRoZSBhdWRpbyBidWZmZXIgc3RvcmVkIGluIHRoZSBvYmplY3QuXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIE1ha2VzIGFuIHhociByZXFlc3QgZm9yIHRoZSBzZWxlY3RlZCB1cmwgdGhlbiBkZWNvZGVzXG5cdFx0ICogIHRoZSBmaWxlIGFzIGFuIGF1ZGlvIGJ1ZmZlci4gSW52b2tlc1xuXHRcdCAqICB0aGUgY2FsbGJhY2sgb25jZSB0aGUgYXVkaW8gYnVmZmVyIGxvYWRzLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGJ1ZmZlciB0byBsb2FkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGZpbGV0eXBlIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICBicm93c2VyLlxuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX0gcmV0dXJucyBhIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2l0aCB0aGUgVG9uZS5CdWZmZXJcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKHVybCwgb25sb2FkLCBvbmVycm9yKSB7XG5cdCAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAobG9hZCwgZXJyb3IpIHtcblx0ICAgICAgICAgICAgdGhpcy5feGhyID0gVG9uZS5CdWZmZXIubG9hZCh1cmwsIC8vc3VjY2Vzc1xuXHQgICAgICAgICAgICBmdW5jdGlvbiAoYnVmZikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2V0KGJ1ZmYpO1xuXHQgICAgICAgICAgICAgICAgbG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIGlmIChvbmxvYWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgLy9lcnJvclxuXHQgICAgICAgICAgICBmdW5jdGlvbiAoZXJyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgZXJyb3IoZXJyKTtcblx0ICAgICAgICAgICAgICAgIGlmIChvbmVycm9yKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb25lcnJvcihlcnIpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHByb21pc2U7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICBpZiAodGhpcy5feGhyKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZSh0aGlzLl94aHIpO1xuXHQgICAgICAgICAgICB0aGlzLl94aHIuYWJvcnQoKTtcblx0ICAgICAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlciBpcyBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID4gMDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGR1cmF0aW9uXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnZHVyYXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGluIHNhbXBsZXNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBsZW5ndGhcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubGVuZ3RoO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2YgZGlzY3JldGUgYXVkaW8gY2hhbm5lbHMuIFJldHVybnMgMCBpZiBubyBidWZmZXJcblx0XHQgKiBpcyBsb2FkZWQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgbnVtYmVyT2ZDaGFubmVsc1xuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ251bWJlck9mQ2hhbm5lbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubnVtYmVyT2ZDaGFubmVscztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBhdWRpbyBidWZmZXIgZnJvbSB0aGUgYXJyYXkuIFRvIGNyZWF0ZSBhIG11bHRpY2hhbm5lbCBBdWRpb0J1ZmZlcixcblx0XHQgKiAgcGFzcyBpbiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkuXG5cdFx0ICogIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbCB0aGUgYXVkaW8gYnVmZmVyXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KSB7XG5cdCAgICAgICAgdmFyIGlzTXVsdGlkaW1lbnNpb25hbCA9IGFycmF5WzBdLmxlbmd0aCA+IDA7XG5cdCAgICAgICAgdmFyIGNoYW5uZWxzID0gaXNNdWx0aWRpbWVuc2lvbmFsID8gYXJyYXkubGVuZ3RoIDogMTtcblx0ICAgICAgICB2YXIgbGVuID0gaXNNdWx0aWRpbWVuc2lvbmFsID8gYXJyYXlbMF0ubGVuZ3RoIDogYXJyYXkubGVuZ3RoO1xuXHQgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyKGNoYW5uZWxzLCBsZW4sIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlKTtcblx0ICAgICAgICBpZiAoIWlzTXVsdGlkaW1lbnNpb25hbCAmJiBjaGFubmVscyA9PT0gMSkge1xuXHQgICAgICAgICAgICBhcnJheSA9IFthcnJheV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2hhbm5lbHM7IGMrKykge1xuXHQgICAgICAgICAgICBidWZmZXIuY29weVRvQ2hhbm5lbChhcnJheVtjXSwgYyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IGJ1ZmZlcjtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBcdFN1bXMgbXVsaXBsZSBjaGFubmVscyBpbnRvIDEgY2hhbm5lbFxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IGNoYW5uZWwgT3B0aW9uYWxseSBvbmx5IGNvcHkgYSBzaW5nbGUgY2hhbm5lbCBmcm9tIHRoZSBhcnJheS5cblx0XHQgKiAgQHJldHVybiB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUudG9Nb25vID0gZnVuY3Rpb24gKGNoYW5OdW0pIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcihjaGFuTnVtKSkge1xuXHQgICAgICAgICAgICB0aGlzLmZyb21BcnJheSh0aGlzLnRvQXJyYXkoY2hhbk51bSkpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBvdXRwdXRBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5sZW5ndGgpO1xuXHQgICAgICAgICAgICB2YXIgbnVtQ2hhbm5lbHMgPSB0aGlzLm51bWJlck9mQ2hhbm5lbHM7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgbnVtQ2hhbm5lbHM7IGNoYW5uZWwrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWxBcnJheSA9IHRoaXMudG9BcnJheShjaGFubmVsKTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbEFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3V0cHV0QXJyYXlbaV0gKz0gY2hhbm5lbEFycmF5W2ldO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vZGl2aWRlIGJ5IHRoZSBudW1iZXIgb2YgY2hhbm5lbHNcblx0ICAgICAgICAgICAgb3V0cHV0QXJyYXkgPSBvdXRwdXRBcnJheS5tYXAoZnVuY3Rpb24gKHNhbXBsZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHNhbXBsZSAvIG51bUNoYW5uZWxzO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5mcm9tQXJyYXkob3V0cHV0QXJyYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBcdEdldCB0aGUgYnVmZmVyIGFzIGFuIGFycmF5LiBTaW5nbGUgY2hhbm5lbCBidWZmZXJzIHdpbGwgcmV0dXJuIGEgMS1kaW1lbnNpb25hbFxuXHRcdCAqIFx0RmxvYXQzMkFycmF5LCBhbmQgbXVsdGljaGFubmVsIGJ1ZmZlcnMgd2lsbCByZXR1cm4gbXVsdGlkaW1lbnNpb25hbCBhcnJheXMuXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gY2hhbm5lbCBPcHRpb25hbGx5IG9ubHkgY29weSBhIHNpbmdsZSBjaGFubmVsIGZyb20gdGhlIGFycmF5LlxuXHRcdCAqICBAcmV0dXJuIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKGNoYW5uZWwpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcihjaGFubmVsKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDaGFubmVsRGF0YShjaGFubmVsKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMubnVtYmVyT2ZDaGFubmVscyA9PT0gMSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy50b0FycmF5KDApO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciByZXQgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCB0aGlzLm51bWJlck9mQ2hhbm5lbHM7IGMrKykge1xuXHQgICAgICAgICAgICAgICAgcmV0W2NdID0gdGhpcy5nZXRDaGFubmVsRGF0YShjKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgRmxvYXQzMkFycmF5IHJlcHJlc2VudGluZyB0aGUgUENNIGF1ZGlvIGRhdGEgZm9yIHRoZSBzcGVjaWZpYyBjaGFubmVsLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBjaGFubmVsICBUaGUgY2hhbm5lbCBudW1iZXIgdG8gcmV0dXJuXG5cdFx0ICogIEByZXR1cm4gIHtGbG9hdDMyQXJyYXl9ICBUaGUgYXVkaW8gYXMgYSBUeXBlZEFycmF5XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZ2V0Q2hhbm5lbERhdGEgPSBmdW5jdGlvbiAoY2hhbm5lbCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2hhbm5lbCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEN1dCBhIHN1YnNlY3Rpb24gb2YgdGhlIGFycmF5IGFuZCByZXR1cm4gYSBidWZmZXIgb2YgdGhlXG5cdFx0ICogIHN1YnNlY3Rpb24uIERvZXMgbm90IG1vZGlmeSB0aGUgb3JpZ2luYWwgYnVmZmVyXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnQgVGhlIHRpbWUgdG8gc3RhcnQgdGhlIHNsaWNlXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGVuZCBUaGUgZW5kIHRpbWUgdG8gc2xpY2UuIElmIG5vbmUgaXMgZ2l2ZW5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIHdpbGwgZGVmYXVsdCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXJcblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIChzdGFydCwgZW5kKSB7XG5cdCAgICAgICAgZW5kID0gVG9uZS5kZWZhdWx0QXJnKGVuZCwgdGhpcy5kdXJhdGlvbik7XG5cdCAgICAgICAgdmFyIHN0YXJ0U2FtcGxlcyA9IE1hdGguZmxvb3IodGhpcy5jb250ZXh0LnNhbXBsZVJhdGUgKiB0aGlzLnRvU2Vjb25kcyhzdGFydCkpO1xuXHQgICAgICAgIHZhciBlbmRTYW1wbGVzID0gTWF0aC5mbG9vcih0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSAqIHRoaXMudG9TZWNvbmRzKGVuZCkpO1xuXHQgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1iZXJPZkNoYW5uZWxzOyBpKyspIHtcblx0ICAgICAgICAgICAgcmVwbGFjZW1lbnRbaV0gPSB0aGlzLnRvQXJyYXkoaSkuc2xpY2Uoc3RhcnRTYW1wbGVzLCBlbmRTYW1wbGVzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHJldEJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcigpLmZyb21BcnJheShyZXBsYWNlbWVudCk7XG5cdCAgICAgICAgcmV0dXJuIHJldEJ1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV2ZXJzZSB0aGUgYnVmZmVyLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLl9yZXZlcnNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmxvYWRlZCkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubnVtYmVyT2ZDaGFubmVsczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKHRoaXMuZ2V0Q2hhbm5lbERhdGEoaSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldmVyc2UgdGhlIGJ1ZmZlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgcmV2ZXJzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ3JldmVyc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZlcnNlZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJldikge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fcmV2ZXJzZWQgIT09IHJldikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmV2ZXJzZWQgPSByZXY7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXZlcnNlKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gU1RBVElDIE1FVEhPRFNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9zdGF0aWNhbGx5IGluaGVyaXRzIEVtaXR0ZXIgbWV0aG9kc1xuXHQgICAgVG9uZS5FbWl0dGVyLm1peGluKFRvbmUuQnVmZmVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgc3RhdGljIHF1ZXVlIGZvciBhbGwgb2YgdGhlIHhociByZXF1ZXN0c1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZSA9IFtdO1xuXHQgICAgLyoqXG5cdFx0ICogIEEgcGF0aCB3aGljaCBpcyBwcmVmaXhlZCBiZWZvcmUgZXZlcnkgdXJsLlxuXHRcdCAqICBAdHlwZSAge1N0cmluZ31cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuYmFzZVVybCA9ICcnO1xuXHQgICAgLyoqXG5cdFx0ICogIENyZWF0ZSBhIFRvbmUuQnVmZmVyIGZyb20gdGhlIGFycmF5LiBUbyBjcmVhdGUgYSBtdWx0aWNoYW5uZWwgQXVkaW9CdWZmZXIsXG5cdFx0ICogIHBhc3MgaW4gYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LlxuXHRcdCAqICBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZpbGwgdGhlIGF1ZGlvIGJ1ZmZlclxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gQSBUb25lLkJ1ZmZlciBjcmVhdGVkIGZyb20gdGhlIGFycmF5XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IFRvbmUuQnVmZmVyKCkuZnJvbUFycmF5KGFycmF5KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDcmVhdGVzIGEgVG9uZS5CdWZmZXIgZnJvbSBhIFVSTCwgcmV0dXJucyBhIHByb21pc2Vcblx0XHQgKiB3aGljaCByZXNvbHZlcyB0byBhIFRvbmUuQnVmZmVyXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSB1cmwgVGhlIHVybCB0byBsb2FkLlxuXHRcdCAqIEByZXR1cm4ge1Byb21pc2U8VG9uZS5CdWZmZXI+fSAgICAgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHRvIGEgVG9uZS5CdWZmZXJcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmZyb21VcmwgPSBmdW5jdGlvbiAodXJsKSB7XG5cdCAgICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcigpO1xuXHQgICAgICAgIHJldHVybiBidWZmZXIubG9hZCh1cmwpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlbW92ZSBhbiB4aHIgcmVxdWVzdCBmcm9tIHRoZSBkb3dubG9hZCBxdWV1ZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5fcmVtb3ZlRnJvbURvd25sb2FkUXVldWUgPSBmdW5jdGlvbiAocmVxdWVzdCkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLmluZGV4T2YocmVxdWVzdCk7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTG9hZHMgYSB1cmwgdXNpbmcgWE1MSHR0cFJlcXVlc3QuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB1cmxcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gb25sb2FkXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IG9uZXJyb3Jcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gb25wcm9ncmVzc1xuXHRcdCAqICBAcmV0dXJuIHtYTUxIdHRwUmVxdWVzdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBvbmxvYWQsIG9uZXJyb3IpIHtcblx0ICAgICAgICAvL2RlZmF1bHRcblx0ICAgICAgICBvbmxvYWQgPSBUb25lLmRlZmF1bHRBcmcob25sb2FkLCBUb25lLm5vT3ApO1xuXHQgICAgICAgIC8vIHRlc3QgaWYgdGhlIHVybCBjb250YWlucyBtdWx0aXBsZSBleHRlbnNpb25zXG5cdCAgICAgICAgdmFyIG1hdGNoZXMgPSB1cmwubWF0Y2goL1xcWyguK1xcfD8pK1xcXSQvKTtcblx0ICAgICAgICBpZiAobWF0Y2hlcykge1xuXHQgICAgICAgICAgICB2YXIgZXh0ZW5zaW9ucyA9IG1hdGNoZXNbMV0uc3BsaXQoJ3wnKTtcblx0ICAgICAgICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnNbMF07XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZShleHRlbnNpb25zW2ldKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnNbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UobWF0Y2hlc1swXSwgZXh0ZW5zaW9uKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gb25FcnJvcihlKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuZW1pdCgnZXJyb3InLCBlKTtcblx0ICAgICAgICAgICAgaWYgKG9uZXJyb3IpIHtcblx0ICAgICAgICAgICAgICAgIG9uZXJyb3IoZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIG9uUHJvZ3Jlc3MoKSB7XG5cdCAgICAgICAgICAgIC8vY2FsY3VsYXRlIHRoZSBwcm9ncmVzc1xuXHQgICAgICAgICAgICB2YXIgdG90YWxQcm9ncmVzcyA9IDA7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRvdGFsUHJvZ3Jlc3MgKz0gVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWVbaV0ucHJvZ3Jlc3M7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuZW1pdCgncHJvZ3Jlc3MnLCB0b3RhbFByb2dyZXNzIC8gVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUubGVuZ3RoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0ICAgICAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIFRvbmUuQnVmZmVyLmJhc2VVcmwgKyB1cmwsIHRydWUpO1xuXHQgICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcblx0ICAgICAgICAvL3N0YXJ0IG91dCBhcyAwXG5cdCAgICAgICAgcmVxdWVzdC5wcm9ncmVzcyA9IDA7XG5cdCAgICAgICAgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUucHVzaChyZXF1ZXN0KTtcblx0ICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMjAwKSB7XG5cdCAgICAgICAgICAgICAgICBUb25lLmNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKHJlcXVlc3QucmVzcG9uc2UpLnRoZW4oZnVuY3Rpb24gKGJ1ZmYpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnByb2dyZXNzID0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBvblByb2dyZXNzKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgb25sb2FkKGJ1ZmYpO1xuXHQgICAgICAgICAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vZW1pdCB0aGUgZXZlbnQgYXQgdGhlIGVuZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBUb25lLkJ1ZmZlci5lbWl0KCdsb2FkJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgICAgICAgICBvbkVycm9yKCdUb25lLkJ1ZmZlcjogY291bGQgbm90IGRlY29kZSBhdWRpbyBkYXRhOiAnICsgdXJsKTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgb25FcnJvcignVG9uZS5CdWZmZXI6IGNvdWxkIG5vdCBsb2NhdGUgZmlsZTogJyArIHVybCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG5cdCAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuXHQgICAgICAgICAgICAgICAgLy9vbmx5IGdvIHRvIDk1JSwgdGhlIGxhc3QgNSUgaXMgd2hlbiB0aGUgYXVkaW8gaXMgZGVjb2RlZFxuXHQgICAgICAgICAgICAgICAgcmVxdWVzdC5wcm9ncmVzcyA9IGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsICogMC45NTtcblx0ICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3MoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJlcXVlc3Quc2VuZCgpO1xuXHQgICAgICAgIHJldHVybiByZXF1ZXN0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIGFsbCBvZiB0aGUgZG93bmxvYWRzIGluIHByb2dyZXNzXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5jYW5jZWxEb3dubG9hZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiBUb25lLkJ1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2hlY2tzIGEgdXJsJ3MgZXh0ZW5zaW9uIHRvIHNlZSBpZiB0aGUgY3VycmVudCBicm93c2VyIGNhbiBwbGF5IHRoYXQgZmlsZSB0eXBlLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSB1cmwvZXh0ZW5zaW9uIHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybiB7Qm9vbGVhbn0gSWYgdGhlIGZpbGUgZXh0ZW5zaW9uIGNhbiBiZSBwbGF5ZWRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZShcIndhdlwiKTsgLy9yZXR1cm5zIHRydWVcblx0XHQgKiBUb25lLkJ1ZmZlci5zdXBwb3J0c1R5cGUoXCJwYXRoL3RvL2ZpbGUud2F2XCIpOyAvL3JldHVybnMgdHJ1ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlID0gZnVuY3Rpb24gKHVybCkge1xuXHQgICAgICAgIHZhciBleHRlbnNpb24gPSB1cmwuc3BsaXQoJy4nKTtcblx0ICAgICAgICBleHRlbnNpb24gPSBleHRlbnNpb25bZXh0ZW5zaW9uLmxlbmd0aCAtIDFdO1xuXHQgICAgICAgIHZhciByZXNwb25zZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJykuY2FuUGxheVR5cGUoJ2F1ZGlvLycgKyBleHRlbnNpb24pO1xuXHQgICAgICAgIHJldHVybiByZXNwb25zZSAhPT0gJyc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgYSBQcm9taXNlIHdoaWNoIHJlc29sdmVzIHdoZW4gYWxsIG9mIHRoZSBidWZmZXJzIGhhdmUgbG9hZGVkXG5cdFx0ICogIEByZXR1cm4ge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLmxvYWRlZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb25sb2FkLCBvbmVycm9yO1xuXHQgICAgICAgIGZ1bmN0aW9uIHJlbW92ZUV2ZW50cygpIHtcblx0ICAgICAgICAgICAgLy9yZW1vdmUgdGhlIGV2ZW50cyB3aGVuIGl0J3MgcmVzb2x2ZWRcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub2ZmKCdsb2FkJywgb25sb2FkKTtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub2ZmKCdlcnJvcicsIG9uZXJyb3IpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHN1Y2Nlc3MsIGZhaWwpIHtcblx0ICAgICAgICAgICAgb25sb2FkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgc3VjY2VzcygpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBvbmVycm9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgZmFpbCgpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAvL2FkZCB0aGUgZXZlbnQgbGlzdGVuZXJzXG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLm9uKCdsb2FkJywgb25sb2FkKTtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub24oJ2Vycm9yJywgb25lcnJvcik7XG5cdCAgICAgICAgfSkudGhlbihyZW1vdmVFdmVudHMpLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIHJlbW92ZUV2ZW50cygpO1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQnVmZmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgZmlyZS1hbmQtZm9yZ2V0IE9zY2lsbGF0b3JOb2RlLiBBZGRzIHRoZVxuXHRcdCAqICAgICBhYmlsaXR5IHRvIHJlc2NoZWR1bGUgdGhlIHN0b3AgbWV0aG9kLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvQnVmZmVyfFRvbmUuQnVmZmVyfSAgYnVmZmVyICAgVGhlIGJ1ZmZlciB0byBwbGF5XG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgb25sb2FkICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIGlzIGRvbmUgcGxheWluZy5cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5Pc2NpbGxhdG9yTm9kZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRoZVxuXHRcdFx0ICogIGJ1ZmZlciBzb3VyY2UgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBvcHRpb25zLm9uZW5kZWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3Igc3RhcnQgdGltZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvciBzdG9wIHRpbWVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBub2RlIHdoaWNoIGVudmVsb3BlcyB0aGUgT3NjaWxsYXRvck5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSAge09zY2lsbGF0b3JOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gdGhpcy5jb250ZXh0LmNyZWF0ZU9zY2lsbGF0b3IoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvbm5lY3QodGhpcy5fZ2Fpbk5vZGUpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX29zY2lsbGF0b3IuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS52YWx1ZSA9IG9wdGlvbnMuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fb3NjaWxsYXRvci5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUudmFsdWUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgdGhhdCB0aGUgYnVmZmVyIHJhbXBzIHRvXG5cdFx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSAxO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT3NjaWxsYXRvck5vZGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdvbmVuZGVkJzogVG9uZS5ub09wXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBvc2NpbGxhdG9yLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvck5vZGUjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBwbGF5YmFjayBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gdGVzdCB0aGUgc3RhdGUgYXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuU3RhdGV9ICBUaGUgcGxheWJhY2sgc3RhdGUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSAmJiB0aW1lID49IHRoaXMuX3N0YXJ0VGltZSAmJiAodGhpcy5fc3RvcFRpbWUgPT09IC0xIHx8IHRpbWUgPD0gdGhpcy5fc3RvcFRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0YXJ0ZWQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdCAgICAgKiBTdGFydCB0aGUgb3NjaWxsYXRvciBub2RlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSBXaGVuIHRvIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgKiBAcmV0dXJuIHtPc2NpbGxhdG9yTm9kZX0gICAgICB0aGlzXG5cdCAgICAgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lID09PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydCh0aGlzLl9zdGFydFRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhub3cpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgdGhpcy5fc3RhcnRUaW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBjYWxsIE9zY2lsbGF0b3JOb2RlLnN0YXJ0IG1vcmUgdGhhbiBvbmNlJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHQgICAgICogU2V0cyBhbiBhcmJpdHJhcnkgY3VzdG9tIHBlcmlvZGljIHdhdmVmb3JtIGdpdmVuIGEgUGVyaW9kaWNXYXZlLlxuXHQgICAgICogQHBhcmFtICB7UGVyaW9kaWNXYXZlfSBwZXJpb2RpY1dhdmUgUGVyaW9kaWNXYXZlIHNob3VsZCBiZSBjcmVhdGVkIHdpdGggY29udGV4dC5jcmVhdGVQZXJpb2RpY1dhdmVcblx0ICAgICAqIEByZXR1cm4ge09zY2lsbGF0b3JOb2RlfSB0aGlzXG5cdCAgICAgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFBlcmlvZGljV2F2ZSA9IGZ1bmN0aW9uIChwZXJpb2RpY1dhdmUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNldFBlcmlvZGljV2F2ZShwZXJpb2RpY1dhdmUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHQgICAgICogU3RvcCB0aGUgb3NjaWxsYXRvciBub2RlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSBXaGVuIHRvIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAqIEByZXR1cm4ge09zY2lsbGF0b3JOb2RlfSAgICAgIHRoaXNcblx0ICAgICAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9jYW5jZWwgdGhlIHByZXZpb3VzIHN0b3Bcblx0ICAgICAgICB0aGlzLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICAvL3Jlc2NoZWR1bGUgaXRcblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGhpcy5fc3RvcFRpbWUpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dCA9IHRoaXMuY29udGV4dC5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdG9wKHRoaXMubm93KCkpO1xuXHQgICAgICAgICAgICB0aGlzLm9uZW5kZWQoKTtcblx0ICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMuX3N0b3BUaW1lIC0gdGhpcy5ub3coKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBhIHNjaGVkdWxlZCBzdG9wIGV2ZW50XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk9zY2lsbGF0b3JOb2RlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuY2FuY2VsU3RvcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCB0aGUgc3RvcCBlbnZlbG9wZVxuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aGlzLl9zdGFydFRpbWUgKyB0aGlzLnNhbXBsZVRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDEsIE1hdGgubWF4KHRoaXMubm93KCksIHRoaXMuX3N0YXJ0VGltZSkpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3NjaWxsYXRvciB0eXBlLiBFaXRoZXIgJ3NpbmUnLCAnc2F3dG9vdGgnLCAnc3F1YXJlJywgb3IgJ3RyaWFuZ2xlJ1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3JOb2RlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk9zY2lsbGF0b3JOb2RlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5vbmVuZGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Pc2NpbGxhdG9yTm9kZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuT3NjaWxsYXRvciBzdXBwb3J0cyBhIG51bWJlciBvZiBmZWF0dXJlcyBpbmNsdWRpbmdcblx0XHQgKiAgICAgICAgIHBoYXNlIHJvdGF0aW9uLCBtdWx0aXBsZSBvc2NpbGxhdG9yIHR5cGVzIChzZWUgVG9uZS5Pc2NpbGxhdG9yLnR5cGUpLFxuXHRcdCAqICAgICAgICAgYW5kIFRyYW5zcG9ydCBzeW5jaW5nIChzZWUgVG9uZS5Pc2NpbGxhdG9yLnN5bmNGcmVxdWVuY3kpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZnJlcXVlbmN5XSBTdGFydGluZyBmcmVxdWVuY3lcblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IFt0eXBlXSBUaGUgb3NjaWxsYXRvciB0eXBlLiBSZWFkIG1vcmUgYWJvdXQgdHlwZSBiZWxvdy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL21ha2UgYW5kIHN0YXJ0IGEgNDQwaHogc2luZSB0b25lXG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoNDQwLCBcInNpbmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWFpbiBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge09zY2lsbGF0b3JOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBlcmlvZGljIHdhdmVcblx0XHRcdCAqICBAdHlwZSB7UGVyaW9kaWNXYXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl93YXZlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGFydGlhbHMgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMucGFydGlhbHMsIFsxXSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgYmV0d2VlbiAwIC0gMzYwXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge3N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG51bGw7XG5cdCAgICAgICAgLy9zZXR1cFxuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5fcGhhc2U7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdwYXJ0aWFscyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBPc2NpbGxhdG9yIHR5cGVzXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IuVHlwZSA9IHtcblx0ICAgICAgICBTaW5lOiAnc2luZScsXG5cdCAgICAgICAgVHJpYW5nbGU6ICd0cmlhbmdsZScsXG5cdCAgICAgICAgU2F3dG9vdGg6ICdzYXd0b290aCcsXG5cdCAgICAgICAgU3F1YXJlOiAnc3F1YXJlJyxcblx0ICAgICAgICBDdXN0b206ICdjdXN0b20nXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL25ldyBvc2NpbGxhdG9yIHdpdGggcHJldmlvdXMgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3JOb2RlKCk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3dhdmUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zZXRQZXJpb2RpY1dhdmUodGhpcy5fd2F2ZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBjb250cm9sIHNpZ25hbCB0byB0aGUgb3NjaWxsYXRvciBmcmVxdWVuY3kgJiBkZXR1bmVcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvcikge1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVzdGFydCB0aGUgb3NjaWxsYXRvci4gRG9lcyBub3Qgc3RvcCB0aGUgb3NjaWxsYXRvciwgYnV0IGluc3RlYWRcblx0XHQgKiBqdXN0IGNhbmNlbHMgYW55IHNjaGVkdWxlZCAnc3RvcCcgZnJvbSBiZWluZyBpbnZva2VkLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lXG5cdFx0ICogQHJldHVybiB7VG9uZS5Pc2NpbGxhdG9yfSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jYW5jZWxTdG9wKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRoaXMudG9TZWNvbmRzKHRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3luYyB0aGUgc2lnbmFsIHRvIHRoZSBUcmFuc3BvcnQncyBicG0uIEFueSBjaGFuZ2VzIHRvIHRoZSB0cmFuc3BvcnRzIGJwbSxcblx0XHQgKiAgd2lsbCBhbHNvIGFmZmVjdCB0aGUgb3NjaWxsYXRvcnMgZnJlcXVlbmN5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gMTIwO1xuXHRcdCAqIG9zYy5mcmVxdWVuY3kudmFsdWUgPSA0NDA7XG5cdFx0ICogLy90aGUgcmF0aW9uIGJldHdlZW4gdGhlIGJwbSBhbmQgdGhlIGZyZXF1ZW5jeSB3aWxsIGJlIG1haW50YWluZWRcblx0XHQgKiBvc2Muc3luY0ZyZXF1ZW5jeSgpO1xuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZSA9IDI0MDtcblx0XHQgKiAvLyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yIGlzIGRvdWJsZWQgdG8gODgwXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLnN5bmNGcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQuc3luY1NpZ25hbCh0aGlzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVuc3luYyB0aGUgb3NjaWxsYXRvcidzIGZyZXF1ZW5jeSBmcm9tIHRoZSBUcmFuc3BvcnQuXG5cdFx0ICogIFNlZSBUb25lLk9zY2lsbGF0b3Iuc3luY0ZyZXF1ZW5jeVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLnVuc3luY0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC51bnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yOiBlaXRoZXIgc2luZSwgc3F1YXJlLCB0cmlhbmdsZSwgb3Igc2F3dG9vdGguIEFsc28gY2FwYWJsZSBvZlxuXHRcdCAqIHNldHRpbmcgdGhlIGZpcnN0IHggbnVtYmVyIG9mIHBhcnRpYWxzIG9mIHRoZSBvc2NpbGxhdG9yLiBGb3IgZXhhbXBsZTogXCJzaW5lNFwiIHdvdWxkXG5cdFx0ICogc2V0IGJlIHRoZSBmaXJzdCA0IHBhcnRpYWxzIG9mIHRoZSBzaW5lIHdhdmUgYW5kIFwidHJpYW5nbGU4XCIgd291bGQgc2V0IHRoZSBmaXJzdFxuXHRcdCAqIDggcGFydGlhbHMgb2YgdGhlIHRyaWFuZ2xlIHdhdmUuXG5cdFx0ICogPGJyPjxicj5cblx0XHQgKiBVc2VzIFBlcmlvZGljV2F2ZSBpbnRlcm5hbGx5IGV2ZW4gZm9yIG5hdGl2ZSB0eXBlcyBzbyB0aGF0IGl0IGNhbiBzZXQgdGhlIHBoYXNlLlxuXHRcdCAqIFBlcmlvZGljV2F2ZSBlcXVhdGlvbnMgYXJlIGZyb20gdGhlXG5cdFx0ICogW1dlYmtpdCBXZWIgQXVkaW8gaW1wbGVtZW50YXRpb25dKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vY29kZXNlYXJjaCNjaHJvbWl1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1NvdXJjZS9tb2R1bGVzL3dlYmF1ZGlvL1BlcmlvZGljV2F2ZS5jcHAmc3E9cGFja2FnZTpjaHJvbWl1bSkuXG5cdFx0ICpcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgaXQgdG8gYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIG9zYy50eXBlID0gXCJzcXVhcmVcIjtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHRoZSBmaXJzdCA2IHBhcnRpYWxzIG9mIGEgc2F3dG9vdGggd2F2ZVxuXHRcdCAqIG9zYy50eXBlID0gXCJzYXd0b290aDZcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0Jhc2ljVHlwZSA9IFtcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNpbmUsXG5cdCAgICAgICAgICAgICAgICBUb25lLk9zY2lsbGF0b3IuVHlwZS5TcXVhcmUsXG5cdCAgICAgICAgICAgICAgICBUb25lLk9zY2lsbGF0b3IuVHlwZS5UcmlhbmdsZSxcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNhd3Rvb3RoXG5cdCAgICAgICAgICAgIF0uaW5jbHVkZXModHlwZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9waGFzZSA9PT0gMCAmJiBpc0Jhc2ljVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd2F2ZSA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICAvL2p1c3QgZ28gd2l0aCB0aGUgYmFzaWMgYXBwcm9hY2hcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID09PSB0eXBlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNvZWZzID0gdGhpcy5fZ2V0UmVhbEltYWdpbmFyeSh0eXBlLCB0aGlzLl9waGFzZSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgcGVyaW9kaWNXYXZlID0gdGhpcy5jb250ZXh0LmNyZWF0ZVBlcmlvZGljV2F2ZShjb2Vmc1swXSwgY29lZnNbMV0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd2F2ZSA9IHBlcmlvZGljV2F2ZTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zZXRQZXJpb2RpY1dhdmUodGhpcy5fd2F2ZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5IGNvbXBvbmVudHMgYmFzZWRcblx0XHQgKiAgb24gdGhlIG9zY2lsbGF0b3IgdHlwZS5cblx0XHQgKiAgQHJldHVybnMge0FycmF5fSBbcmVhbCwgaW1hZ2luYXJ5XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5fZ2V0UmVhbEltYWdpbmFyeSA9IGZ1bmN0aW9uICh0eXBlLCBwaGFzZSkge1xuXHQgICAgICAgIHZhciBmZnRTaXplID0gNDA5Njtcblx0ICAgICAgICB2YXIgcGVyaW9kaWNXYXZlU2l6ZSA9IGZmdFNpemUgLyAyO1xuXHQgICAgICAgIHZhciByZWFsID0gbmV3IEZsb2F0MzJBcnJheShwZXJpb2RpY1dhdmVTaXplKTtcblx0ICAgICAgICB2YXIgaW1hZyA9IG5ldyBGbG9hdDMyQXJyYXkocGVyaW9kaWNXYXZlU2l6ZSk7XG5cdCAgICAgICAgdmFyIHBhcnRpYWxDb3VudCA9IDE7XG5cdCAgICAgICAgaWYgKHR5cGUgPT09IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbSkge1xuXHQgICAgICAgICAgICBwYXJ0aWFsQ291bnQgPSB0aGlzLl9wYXJ0aWFscy5sZW5ndGggKyAxO1xuXHQgICAgICAgICAgICBwZXJpb2RpY1dhdmVTaXplID0gcGFydGlhbENvdW50O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBwYXJ0aWFsID0gL14oc2luZXx0cmlhbmdsZXxzcXVhcmV8c2F3dG9vdGgpKFxcZCspJC8uZXhlYyh0eXBlKTtcblx0ICAgICAgICAgICAgaWYgKHBhcnRpYWwpIHtcblx0ICAgICAgICAgICAgICAgIHBhcnRpYWxDb3VudCA9IHBhcnNlSW50KHBhcnRpYWxbMl0pICsgMTtcblx0ICAgICAgICAgICAgICAgIHR5cGUgPSBwYXJ0aWFsWzFdO1xuXHQgICAgICAgICAgICAgICAgcGFydGlhbENvdW50ID0gTWF0aC5tYXgocGFydGlhbENvdW50LCAyKTtcblx0ICAgICAgICAgICAgICAgIHBlcmlvZGljV2F2ZVNpemUgPSBwYXJ0aWFsQ291bnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgZm9yICh2YXIgbiA9IDE7IG4gPCBwZXJpb2RpY1dhdmVTaXplOyArK24pIHtcblx0ICAgICAgICAgICAgdmFyIHBpRmFjdG9yID0gMiAvIChuICogTWF0aC5QSSk7XG5cdCAgICAgICAgICAgIHZhciBiO1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5TaW5lOlxuXHQgICAgICAgICAgICAgICAgYiA9IG4gPD0gcGFydGlhbENvdW50ID8gMSA6IDA7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5TcXVhcmU6XG5cdCAgICAgICAgICAgICAgICBiID0gbiAmIDEgPyAyICogcGlGYWN0b3IgOiAwO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2F3dG9vdGg6XG5cdCAgICAgICAgICAgICAgICBiID0gcGlGYWN0b3IgKiAobiAmIDEgPyAxIDogLTEpO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuVHJpYW5nbGU6XG5cdCAgICAgICAgICAgICAgICBpZiAobiAmIDEpIHtcblx0ICAgICAgICAgICAgICAgICAgICBiID0gMiAqIChwaUZhY3RvciAqIHBpRmFjdG9yKSAqIChuIC0gMSA+PiAxICYgMSA/IC0xIDogMSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGIgPSAwO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tOlxuXHQgICAgICAgICAgICAgICAgYiA9IHRoaXMuX3BhcnRpYWxzW24gLSAxXTtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5Pc2NpbGxhdG9yOiBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAoYiAhPT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmVhbFtuXSA9IC1iICogTWF0aC5zaW4ocGhhc2UgKiBuKTtcblx0ICAgICAgICAgICAgICAgIGltYWdbbl0gPSBiICogTWF0aC5jb3MocGhhc2UgKiBuKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJlYWxbbl0gPSAwO1xuXHQgICAgICAgICAgICAgICAgaW1hZ1tuXSA9IDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFtcblx0ICAgICAgICAgICAgcmVhbCxcblx0ICAgICAgICAgICAgaW1hZ1xuXHQgICAgICAgIF07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbXB1dGUgdGhlIGludmVyc2UgRkZUIGZvciBhIGdpdmVuIHBoYXNlLlxuXHRcdCAqICBAcGFyYW0gIHtGbG9hdDMyQXJyYXl9ICByZWFsXG5cdFx0ICogIEBwYXJhbSAge0Zsb2F0MzJBcnJheX0gIGltYWdcblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBwaGFzZVxuXHRcdCAqICBAcmV0dXJuICB7QXVkaW9SYW5nZX1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX2ludmVyc2VGRlQgPSBmdW5jdGlvbiAocmVhbCwgaW1hZywgcGhhc2UpIHtcblx0ICAgICAgICB2YXIgc3VtID0gMDtcblx0ICAgICAgICB2YXIgbGVuID0gcmVhbC5sZW5ndGg7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICBzdW0gKz0gcmVhbFtpXSAqIE1hdGguY29zKGkgKiBwaGFzZSkgKyBpbWFnW2ldICogTWF0aC5zaW4oaSAqIHBoYXNlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHN1bTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHJldHVybiAge0F1ZGlvUmFuZ2V9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9nZXRJbml0aWFsVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGNvZWZzID0gdGhpcy5fZ2V0UmVhbEltYWdpbmFyeSh0aGlzLl90eXBlLCAwKTtcblx0ICAgICAgICB2YXIgcmVhbCA9IGNvZWZzWzBdO1xuXHQgICAgICAgIHZhciBpbWFnID0gY29lZnNbMV07XG5cdCAgICAgICAgdmFyIG1heFZhbHVlID0gMDtcblx0ICAgICAgICB2YXIgdHdvUGkgPSBNYXRoLlBJICogMjtcblx0ICAgICAgICAvL2NoZWNrIGZvciBwZWFrcyBpbiA4IHBsYWNlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgIG1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5faW52ZXJzZUZGVChyZWFsLCBpbWFnLCBpIC8gOCAqIHR3b1BpKSwgbWF4VmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gLXRoaXMuX2ludmVyc2VGRlQocmVhbCwgaW1hZywgdGhpcy5fcGhhc2UpIC8gbWF4VmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlICE9PSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b20pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBbXTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJ0aWFscztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBoYXNlID0gMTgwOyAvL2ZsaXBzIHRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BoYXNlICogKDE4MCAvIE1hdGguUEkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGhhc2UgPSBwaGFzZSAqIE1hdGguUEkgLyAxODA7XG5cdCAgICAgICAgICAgIC8vcmVzZXQgdGhlIHR5cGVcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBEaXNwb3NlIGFuZCBkaXNjb25uZWN0LlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fd2F2ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBdWRpb1RvR2FpbiBjb252ZXJ0cyBhbiBpbnB1dCBpbiBBdWRpb1JhbmdlIFstMSwxXSB0byBOb3JtYWxSYW5nZSBbMCwxXS4gXG5cdFx0ICogICAgICAgICBTZWUgVG9uZS5HYWluVG9BdWRpby5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGEyZyA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvVG9HYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICh4ICsgMSkgLyAyO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXVkaW9Ub0dhaW4sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ub0dhaW59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ub0dhaW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbm9ybS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXVkaW9Ub0dhaW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5aZXJvIG91dHB1dHMgMCdzIGF0IGF1ZGlvLXJhdGUuIFRoZSByZWFzb24gdGhpcyBoYXMgdG8gYmVcblx0XHQgKiAgICAgICAgIGl0J3Mgb3duIGNsYXNzIGlzIHRoYXQgbWFueSBicm93c2VycyBvcHRpbWl6ZSBvdXQgVG9uZS5TaWduYWxcblx0XHQgKiAgICAgICAgIHdpdGggYSB2YWx1ZSBvZiAwIGFuZCB3aWxsIG5vdCBwcm9jZXNzIG5vZGVzIGZ1cnRoZXIgZG93biB0aGUgZ3JhcGguXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLlplcm8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5nZXRDb25zdGFudCgwKS5jb25uZWN0KHRoaXMuX2dhaW4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuWmVybywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5aZXJvfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5aZXJvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2dhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlplcm87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgTEZPIHN0YW5kcyBmb3IgbG93IGZyZXF1ZW5jeSBvc2NpbGxhdG9yLiBUb25lLkxGTyBwcm9kdWNlcyBhbiBvdXRwdXQgc2lnbmFsXG5cdFx0ICogICAgICAgICAgd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHRvIGFuIEF1ZGlvUGFyYW0gb3IgVG9uZS5TaWduYWxcblx0XHQgKiAgICAgICAgICBpbiBvcmRlciB0byBtb2R1bGF0ZSB0aGF0IHBhcmFtZXRlciB3aXRoIGFuIG9zY2lsbGF0b3IuIFRoZSBMRk8gY2FuXG5cdFx0ICogICAgICAgICAgYWxzbyBiZSBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydCB0byBzdGFydC9zdG9wIGFuZCBjaGFuZ2Ugd2hlbiB0aGUgdGVtcG8gY2hhbmdlcy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0aW9uLiBUeXBpY2FsbHksIExGT3Mgd2lsbCBiZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBmcmVxdWVuY3kgcmFuZ2Ugb2YgMC4xIHRvIDEwIGhlcnR6LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IG1pbiBUaGUgbWluaW11bSBvdXRwdXQgdmFsdWUgb2YgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSBtYXggVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIExGTy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbGZvID0gbmV3IFRvbmUuTEZPKFwiNG5cIiwgNDAwLCA0MDAwKTtcblx0XHQgKiBsZm8uY29ubmVjdChmaWx0ZXIuZnJlcXVlbmN5KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdtaW4nLFxuXHQgICAgICAgICAgICAnbWF4J1xuXHQgICAgICAgIF0sIFRvbmUuTEZPKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAndHlwZSc6IG9wdGlvbnMudHlwZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8ncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgYW1wbGl0dWRlIG9mIHRoZSBMRk8sIHdoaWNoIGNvbnRyb2xzIHRoZSBvdXRwdXQgcmFuZ2UgYmV0d2VlblxuXHRcdFx0ICogdGhlIG1pbiBhbmQgbWF4IG91dHB1dC4gRm9yIGV4YW1wbGUgaWYgdGhlIG1pbiBpcyAtMTAgYW5kIHRoZSBtYXhcblx0XHRcdCAqIGlzIDEwLCBzZXR0aW5nIHRoZSBhbXBsaXR1ZGUgdG8gMC41IHdvdWxkIG1ha2UgdGhlIExGTyBtb2R1bGF0ZVxuXHRcdFx0ICogYmV0d2VlbiAtNSBhbmQgNS5cblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmFtcGxpdHVkZSA9IHRoaXMuX29zY2lsbGF0b3Iudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlLnVuaXRzID0gVG9uZS5UeXBlLk5vcm1hbFJhbmdlO1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlLnZhbHVlID0gb3B0aW9ucy5hbXBsaXR1ZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZ25hbCB3aGljaCBpcyBvdXRwdXQgd2hlbiB0aGUgTEZPIGlzIHN0b3BwZWRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDAsIFRvbmUuVHlwZS5BdWRpb1JhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBKdXN0IG91dHB1dHMgemVyb3MuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuWmVyb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5femVyb3MgPSBuZXcgVG9uZS5aZXJvKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHRoYXQgdGhlIExGTyBvdXRwdXRzIHdoZW4gaXQncyBzdG9wcGVkXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRWYWx1ZSA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQXVkaW9Ub0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2EyZyA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlciA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2NhbGUob3B0aW9ucy5taW4sIG9wdGlvbnMubWF4KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdW5pdHMgb2YgdGhlIExGTyAodXNlZCBmb3IgY29udmVydGluZylcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UeXBlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl91bml0cyA9IFRvbmUuVHlwZS5EZWZhdWx0O1xuXHQgICAgICAgIHRoaXMudW5pdHMgPSBvcHRpb25zLnVuaXRzO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY2hhaW4odGhpcy5fYTJnLCB0aGlzLl9zY2FsZXIpO1xuXHQgICAgICAgIHRoaXMuX3plcm9zLmNvbm5lY3QodGhpcy5fYTJnKTtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLmNvbm5lY3QodGhpcy5fYTJnKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdhbXBsaXR1ZGUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMucGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTEZPLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdmcmVxdWVuY3knOiAnNG4nLFxuXHQgICAgICAgICdhbXBsaXR1ZGUnOiAxLFxuXHQgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWZhdWx0XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIExGTyB3aWxsIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIExGTyB3aWxsIHN0b3Bcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuc2V0VmFsdWVBdFRpbWUodGhpcy5fc3RvcHBlZFZhbHVlLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN5bmMgdGhlIHN0YXJ0L3N0b3AvcGF1c2UgdG8gdGhlIHRyYW5zcG9ydFxuXHRcdCAqICBhbmQgdGhlIGZyZXF1ZW5jeSB0byB0aGUgYnBtIG9mIHRoZSB0cmFuc3BvcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIGxmby5mcmVxdWVuY3kudmFsdWUgPSBcIjhuXCI7XG5cdFx0ICogIGxmby5zeW5jKCkuc3RhcnQoMClcblx0XHQgKiAgLy90aGUgcmF0ZSBvZiB0aGUgTEZPIHdpbGwgYWx3YXlzIGJlIGFuIGVpZ2h0aCBub3RlLFxuXHRcdCAqICAvL2V2ZW4gYXMgdGhlIHRlbXBvIGNoYW5nZXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3luY0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB1bnN5bmMgdGhlIExGTyBmcm9tIHRyYW5zcG9ydCBjb250cm9sXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnVuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudW5zeW5jRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbml1bXVtIG91dHB1dCBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvVW5pdHModGhpcy5fc2NhbGVyLm1pbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgbWluID0gdGhpcy5fZnJvbVVuaXRzKG1pbik7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlci5taW4gPSBtaW47XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90b1VuaXRzKHRoaXMuX3NjYWxlci5tYXgpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIG1heCA9IHRoaXMuX2Zyb21Vbml0cyhtYXgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZXIubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3I6IHNpbmUsIHNxdWFyZSwgc2F3dG9vdGgsIHRyaWFuZ2xlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkVmFsdWUgPSB0aGlzLl9vc2NpbGxhdG9yLl9nZXRJbml0aWFsVmFsdWUoKTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC52YWx1ZSA9IHRoaXMuX3N0b3BwZWRWYWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkVmFsdWUgPSB0aGlzLl9vc2NpbGxhdG9yLl9nZXRJbml0aWFsVmFsdWUoKTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC52YWx1ZSA9IHRoaXMuX3N0b3BwZWRWYWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvdXRwdXQgdW5pdHMgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge1RvbmUuVHlwZX1cblx0XHQgKiBAbmFtZSB1bml0c1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3VuaXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdW5pdHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdmFyIGN1cnJlbnRNaW4gPSB0aGlzLm1pbjtcblx0ICAgICAgICAgICAgdmFyIGN1cnJlbnRNYXggPSB0aGlzLm1heDtcblx0ICAgICAgICAgICAgLy9jb252ZXJ0IHRoZSBtaW4gYW5kIHRoZSBtYXhcblx0ICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB2YWw7XG5cdCAgICAgICAgICAgIHRoaXMubWluID0gY3VycmVudE1pbjtcblx0ICAgICAgICAgICAgdGhpcy5tYXggPSBjdXJyZW50TWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5zdGF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhlIExGTyB0byBhbiBBdWRpb1BhcmFtLCBBdWRpb05vZGUsIG9yIFRvbmUgTm9kZS5cblx0XHQgKiAgVG9uZS5MRk8gd2lsbCBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgdG8gdGhlIGRlc3RpbmF0aW9uIHVuaXRzIG9mIHRoZVxuXHRcdCAqICB3aWxsIGdldCB0aGUgdW5pdHMgZnJvbSB0aGUgY29ubmVjdGVkIG5vZGUuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUgfCBBdWRpb1BhcmFtIHwgQXVkaW9Ob2RlfSBub2RlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TnVtPTBdIG9wdGlvbmFsbHkgd2hpY2ggb3V0cHV0IHRvIGNvbm5lY3QgZnJvbVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2lucHV0TnVtPTBdIG9wdGlvbmFsbHkgd2hpY2ggaW5wdXQgdG8gY29ubmVjdCB0b1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAobm9kZS5jb25zdHJ1Y3RvciA9PT0gVG9uZS5TaWduYWwgfHwgbm9kZS5jb25zdHJ1Y3RvciA9PT0gVG9uZS5QYXJhbSkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnZlcnQgPSBub2RlLmNvbnZlcnQ7XG5cdCAgICAgICAgICAgIHRoaXMudW5pdHMgPSBub2RlLnVuaXRzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcHJpdmF0ZSBtZXRob2QgYm9ycm93ZWQgZnJvbSBQYXJhbSBjb252ZXJ0c1xuXHRcdCAqICB1bml0cyBmcm9tIHRoZWlyIGRlc3RpbmF0aW9uIHZhbHVlXG5cdFx0ICogIEBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLl9mcm9tVW5pdHMgPSBUb25lLlBhcmFtLnByb3RvdHlwZS5fZnJvbVVuaXRzO1xuXHQgICAgLyoqXG5cdFx0ICogIHByaXZhdGUgbWV0aG9kIGJvcnJvd2VkIGZyb20gUGFyYW0gY29udmVydHNcblx0XHQgKiAgdW5pdHMgdG8gdGhlaXIgZGVzdGluYXRpb24gdmFsdWVcblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuX3RvVW5pdHMgPSBUb25lLlBhcmFtLnByb3RvdHlwZS5fdG9Vbml0cztcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNjb25uZWN0IGFuZCBkaXNwb3NlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdhbXBsaXR1ZGUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3plcm9zLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl96ZXJvcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2EyZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYTJnID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkxGTztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTGltaXRlciB3aWxsIGxpbWl0IHRoZSBsb3VkbmVzcyBvZiBhbiBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogICAgICAgICBJdCBpcyBjb21wb3NlZCBvZiBhIFRvbmUuQ29tcHJlc3NvciB3aXRoIGEgZmFzdCBhdHRhY2tcblx0XHQgKiAgICAgICAgIGFuZCByZWxlYXNlLiBMaW1pdGVycyBhcmUgY29tbW9ubHkgdXNlZCB0byBzYWZlZ3VhcmQgYWdhaW5zdFxuXHRcdCAqICAgICAgICAgc2lnbmFsIGNsaXBwaW5nLiBVbmxpa2UgYSBjb21wcmVzc29yLCBsaW1pdGVycyBkbyBub3QgcHJvdmlkZVxuXHRcdCAqICAgICAgICAgc21vb3RoIGdhaW4gcmVkdWN0aW9uIGFuZCBhbG1vc3QgY29tcGxldGVseSBwcmV2ZW50XG5cdFx0ICogICAgICAgICBhZGRpdGlvbmFsIGdhaW4gYWJvdmUgdGhlIHRocmVzaG9sZC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGhyZXNob2xkIFRoZSB0aGVzaG9sZCBhYm92ZSB3aGljaCB0aGUgbGltaXRpbmcgaXMgYXBwbGllZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGxpbWl0ZXIgPSBuZXcgVG9uZS5MaW1pdGVyKC02KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTGltaXRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3RocmVzaG9sZCddLCBUb25lLkxpbWl0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbXByZXNzb3Jcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuQ29tcHJlc3Nvcih7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4wMDEsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnOiBvcHRpb25zLnRocmVzaG9sZFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHRocmVzaG9sZCBvZiBvZiB0aGUgbGltaXRlclxuXHRcdFx0ICogQHR5cGUge0RlY2liZWx9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IHRoaXMuX2NvbXByZXNzb3IudGhyZXNob2xkO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd0aHJlc2hvbGQnKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxpbWl0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZVxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaW1pdGVyLmRlZmF1bHRzID0geyAndGhyZXNob2xkJzogLTEyIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxpbWl0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGltaXRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd0aHJlc2hvbGQnKTtcblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTGltaXRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTG93cGFzcyBpcyBhIGxvd3Bhc3MgZmVlZGJhY2sgY29tYiBmaWx0ZXIuIEl0IGlzIHNpbWlsYXIgdG9cblx0XHQgKiAgICAgICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLCBidXQgaW5jbHVkZXMgYSBsb3dwYXNzIGZpbHRlci5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgdGltZSBvZiB0aGUgY29tYiBmaWx0ZXJcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZT19IHJlc29uYW5jZSBUaGUgcmVzb25hbmNlIChmZWVkYmFjaykgb2YgdGhlIGNvbWIgZmlsdGVyXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5PX0gZGFtcGVuaW5nIFRoZSBjdXRvZmYgb2YgdGhlIGxvd3Bhc3MgZmlsdGVyIGRhbXBlbnMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbCBhcyBpdCBpcyBmZWRiYWNrLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdLCBUb25lLkxvd3Bhc3NDb21iRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLkRlbGF5KG9wdGlvbnMuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXlUaW1lIG9mIHRoZSBjb21iIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IHRoaXMuX2RlbGF5LmRlbGF5VGltZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbG93cGFzcyBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSAge0JpcXVhZEZpbHRlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICB0aGlzLl9sb3dwYXNzLlEudmFsdWUgPSAtMy4wMTAyOTk5NTY2Mzk4MTI1O1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MudHlwZSA9ICdsb3dwYXNzJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGFtcGVuaW5nIGNvbnRyb2wgb2YgdGhlIGZlZWRiYWNrXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fbG93cGFzcy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5GcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZGFtcGVuaW5nXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZlZWRiYWNrIGdhaW5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5yZXNvbmFuY2UsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBmZWVkYmFjayBvZiB0aGUgZGVsYXllZCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gdGhpcy5fZmVlZGJhY2suZ2Fpbjtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fZGVsYXkuY2hhaW4odGhpcy5fbG93cGFzcywgdGhpcy5fZmVlZGJhY2ssIHRoaXMuX2RlbGF5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxvd3Bhc3NDb21iRmlsdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4xLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiAwLjUsXG5cdCAgICAgICAgJ2RhbXBlbmluZyc6IDMwMDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxvd3Bhc3NDb21iRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvd3Bhc3NDb21iRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJyxcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5NZXJnZSBicmluZ3MgdHdvIHNpZ25hbHMgaW50byB0aGUgbGVmdCBhbmQgcmlnaHRcblx0XHQgKiAgICAgICAgICBjaGFubmVscyBvZiBhIHNpbmdsZSBzdGVyZW8gY2hhbm5lbC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtZXJnZSA9IG5ldyBUb25lLk1lcmdlKCkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3JvdXRpbmcgYSBzaW5lIHRvbmUgaW4gdGhlIGxlZnQgY2hhbm5lbFxuXHRcdCAqIC8vYW5kIG5vaXNlIGluIHRoZSByaWdodCBjaGFubmVsXG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KG1lcmdlLmxlZnQpO1xuXHRcdCAqIHZhciBub2lzZSA9IG5ldyBUb25lLk5vaXNlKCkuY29ubmVjdChtZXJnZS5yaWdodCk7XG5cdFx0ICogLy9zdGFydGluZyBvdXIgb3NjaWxsYXRvcnNcblx0XHQgKiBub2lzZS5zdGFydCgpO1xuXHRcdCAqIG9zYy5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXJnZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbGVmdCBpbnB1dCBjaGFubmVsLlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByaWdodCBpbnB1dCBjaGFubmVsLlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFsxXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yaWdodCA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1lcmdlciBub2RlIGZvciB0aGUgdHdvIGNoYW5uZWxzXG5cdFx0XHQgKiAgQHR5cGUge0NoYW5uZWxNZXJnZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZXIgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVDaGFubmVsTWVyZ2VyKDIpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmxlZnQuY29ubmVjdCh0aGlzLl9tZXJnZXIsIDAsIDApO1xuXHQgICAgICAgIHRoaXMucmlnaHQuY29ubmVjdCh0aGlzLl9tZXJnZXIsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMubGVmdC5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgIHRoaXMucmlnaHQuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICB0aGlzLmxlZnQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgdGhpcy5yaWdodC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1lcmdlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lcmdlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1lcmdlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21lcmdlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2VyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZXJnZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1ldGVyIGdldHMgdGhlIFtSTVNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Jvb3RfbWVhbl9zcXVhcmUpXG5cdFx0ICogICAgICAgICAgb2YgYW4gaW5wdXQgc2lnbmFsIHdpdGggc29tZSBhdmVyYWdpbmcgYXBwbGllZC4gSXQgY2FuIGFsc28gZ2V0IHRoZSByYXdcblx0XHQgKiAgICAgICAgICB2YWx1ZSBvZiB0aGUgaW5wdXQgc2lnbmFsLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBzbW9vdGhpbmcgVGhlIGFtb3VudCBvZiBzbW9vdGhpbmcgYXBwbGllZCBiZXR3ZWVuIGZyYW1lcy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbWV0ZXIgPSBuZXcgVG9uZS5NZXRlcigpO1xuXHRcdCAqIHZhciBtaWMgPSBuZXcgVG9uZS5Vc2VyTWVkaWEoKS5vcGVuKCk7XG5cdFx0ICogLy9jb25uZWN0IG1pYyB0byB0aGUgbWV0ZXJcblx0XHQgKiBtaWMuY29ubmVjdChtZXRlcik7XG5cdFx0ICogLy90aGUgY3VycmVudCBsZXZlbCBvZiB0aGUgbWljIGlucHV0IGluIGRlY2liZWxzXG5cdFx0ICogdmFyIGxldmVsID0gbWV0ZXIuZ2V0VmFsdWUoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzbW9vdGhpbmcnXSwgVG9uZS5NZXRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZSB3aGljaCBjb21wdXRlcyB0aGUgbGV2ZWxzLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkFuYWx5c2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5fYW5hbHlzZXIgPSBuZXcgVG9uZS5BbmFseXNlcignd2F2ZWZvcm0nLCAxMDI0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGNhcnJ5b3ZlciBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCBsYXN0IGZyYW1lLlxuXHRcdFx0ICogIE9ubHkgYXBwbGllZCBtZXRlciBmb3IgXCJsZXZlbFwiIHR5cGUuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNtb290aGluZyA9IG9wdGlvbnMuc21vb3RoaW5nO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWV0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIuZGVmYXVsdHMgPSB7ICdzbW9vdGhpbmcnOiAwLjggfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGN1cnJlbnQgZGVjaWJlbCB2YWx1ZSBvZiB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogIEByZXR1cm5zIHtEZWNpYmVsc31cblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIucHJvdG90eXBlLmdldExldmVsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLnR5cGUgPSAnZmZ0Jztcblx0ICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgICAgICB2YXIgb2Zmc2V0ID0gMjg7XG5cdCAgICAgICAgLy8gbm9ybWFsaXplcyBtb3N0IHNpZ25hbCBsZXZlbHNcblx0ICAgICAgICAvLyBUT0RPOiBjb21wdXRlIGxvdWRuZXNzIGZyb20gRkZUXG5cdCAgICAgICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KHRoaXMsIHZhbHVlcykgKyBvZmZzZXQ7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc2lnbmFsIHZhbHVlIG9mIHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgQHJldHVybnMge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLnR5cGUgPSAnd2F2ZWZvcm0nO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX2FuYWx5c2VyLmdldFZhbHVlKCk7XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlWzBdO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEEgdmFsdWUgZnJvbSAwIC0+IDEgd2hlcmUgMCByZXByZXNlbnRzIG5vIHRpbWUgYXZlcmFnaW5nIHdpdGggdGhlIGxhc3QgYW5hbHlzaXMgZnJhbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTWV0ZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBzbW9vdGhpbmdcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGVyLnByb3RvdHlwZSwgJ3Ntb290aGluZycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zbW9vdGhpbmcgPSB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1ldGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZXRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKlx0QGNsYXNzICBUb25lLlNwbGl0IHNwbGl0cyBhbiBpbmNvbWluZyBzaWduYWwgaW50byBsZWZ0IGFuZCByaWdodCBjaGFubmVscy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzcGxpdCA9IG5ldyBUb25lLlNwbGl0KCk7XG5cdFx0ICogc3RlcmVvU2lnbmFsLmNvbm5lY3Qoc3BsaXQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TcGxpdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygwLCAyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7Q2hhbm5lbFNwbGl0dGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNoYW5uZWxTcGxpdHRlcigyKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jaGFubmVsQ291bnQgPSAyO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIExlZnQgY2hhbm5lbCBvdXRwdXQuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPm91dHB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5vdXRwdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgUmlnaHQgY2hhbm5lbCBvdXRwdXQuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPm91dHB1dFsxXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yaWdodCA9IHRoaXMub3V0cHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jb25uZWN0KHRoaXMubGVmdCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuY29ubmVjdCh0aGlzLnJpZ2h0LCAxLCAwKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNwbGl0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNwbGl0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNwbGl0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMubGVmdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJpZ2h0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3BsaXQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBNaWQvU2lkZSBwcm9jZXNzaW5nIHNlcGFyYXRlcyB0aGUgdGhlICdtaWQnIHNpZ25hbFxuXHRcdCAqICAgICAgICAgKHdoaWNoIGNvbWVzIG91dCBvZiBib3RoIHRoZSBsZWZ0IGFuZCB0aGUgcmlnaHQgY2hhbm5lbClcblx0XHQgKiAgICAgICAgIGFuZCB0aGUgJ3NpZGUnICh3aGljaCBvbmx5IGNvbWVzIG91dCBvZiB0aGUgdGhlIHNpZGUgY2hhbm5lbHMpLiA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgPGNvZGU+XG5cdFx0ICogICAgICAgICBNaWQgPSAoTGVmdCtSaWdodCkvc3FydCgyKTsgICAvLyBvYnRhaW4gbWlkLXNpZ25hbCBmcm9tIGxlZnQgYW5kIHJpZ2h0PGJyPlxuXHRcdCAqICAgICAgICAgU2lkZSA9IChMZWZ0LVJpZ2h0KS9zcXJ0KDIpOyAgIC8vIG9idGFpbiBzaWRlLXNpZ25hbCBmcm9tIGxlZnQgYW5kIHJpZ2g8YnI+XG5cdFx0ICogICAgICAgICA8L2NvZGU+XG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZVNwbGl0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDAsIDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWwgaW50byBsZWZ0IGFuZCByaWdodCBjaGFubmVsc1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHNlbmQuIENvbm5lY3QgdG8gbWlkIHByb2Nlc3NpbmcuIEFsaWFzIGZvclxuXHRcdFx0ICogIDxjb2RlPm91dHB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRBZGQgPSBuZXcgVG9uZS5BZGQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIE11bHRpcGx5IHRoZSBfbWlkQWRkIGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMub3V0cHV0WzBdID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSBvdXRwdXQuIENvbm5lY3QgdG8gc2lkZSBwcm9jZXNzaW5nLiBBbHNvIE91dHB1dCAxXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaWRlU3VidHJhY3QgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIF9taWRBZGQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IHRoaXMub3V0cHV0WzFdID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX21pZEFkZCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuY29ubmVjdCh0aGlzLl9taWRBZGQsIDEsIDEpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fc2lkZVN1YnRyYWN0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX3NpZGVTdWJ0cmFjdCwgMSwgMSk7XG5cdCAgICAgICAgdGhpcy5fbWlkQWRkLmNvbm5lY3QodGhpcy5taWQpO1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdC5jb25uZWN0KHRoaXMuc2lkZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRTaWRlU3BsaXQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlU3BsaXR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZVNwbGl0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkQWRkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRBZGQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVTcGxpdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1pZC9TaWRlIHByb2Nlc3Npbmcgc2VwYXJhdGVzIHRoZSB0aGUgJ21pZCcgc2lnbmFsXG5cdFx0ICogICAgICAgICAod2hpY2ggY29tZXMgb3V0IG9mIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBjaGFubmVsKVxuXHRcdCAqICAgICAgICAgYW5kIHRoZSAnc2lkZScgKHdoaWNoIG9ubHkgY29tZXMgb3V0IG9mIHRoZSB0aGUgc2lkZSBjaGFubmVscykuXG5cdFx0ICogICAgICAgICBNaWRTaWRlTWVyZ2UgbWVyZ2VzIHRoZSBtaWQgYW5kIHNpZGUgc2lnbmFsIGFmdGVyIHRoZXkndmUgYmVlbiBzZXBlcmF0ZWRcblx0XHQgKiAgICAgICAgIGJ5IFRvbmUuTWlkU2lkZVNwbGl0Ljxicj48YnI+XG5cdFx0ICogICAgICAgICA8Y29kZT5cblx0XHQgKiAgICAgICAgIExlZnQgPSAoTWlkK1NpZGUpL3NxcnQoMik7ICAgLy8gb2J0YWluIGxlZnQgc2lnbmFsIGZyb20gbWlkIGFuZCBzaWRlPGJyPlxuXHRcdCAqICAgICAgICAgUmlnaHQgPSAoTWlkLVNpZGUpL3NxcnQoMik7ICAgLy8gb2J0YWluIHJpZ2h0IHNpZ25hbCBmcm9tIG1pZCBhbmQgc2lkZTxicj5cblx0XHQgKiAgICAgICAgIDwvY29kZT5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlTWVyZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBzaWduYWwgaW5wdXQuIEFsaWFzIGZvclxuXHRcdFx0ICogIDxjb2RlPmlucHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJlY29tYmluZSB0aGUgbWlkL3NpZGUgaW50byBMZWZ0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWRkfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbmV3IFRvbmUuQWRkKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgbGVmdCBieSBzcXJ0KDEvMilcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29MZWZ0ID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSBzaWduYWwgaW5wdXQuIEFsaWFzIGZvclxuXHRcdFx0ICogIDxjb2RlPmlucHV0WzFdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICByZWNvbWJpbmUgdGhlIG1pZC9zaWRlIGludG8gUmlnaHRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIHJpZ2h0IGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0ID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBNZXJnZSB0aGUgbGVmdC9yaWdodCBzaWduYWwgYmFjayBpbnRvIGEgc3RlcmVvIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgdGhpcy5taWQuY29ubmVjdCh0aGlzLl9sZWZ0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLnNpZGUuY29ubmVjdCh0aGlzLl9sZWZ0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLm1pZC5jb25uZWN0KHRoaXMuX3JpZ2h0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLnNpZGUuY29ubmVjdCh0aGlzLl9yaWdodCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fbGVmdC5jb25uZWN0KHRoaXMuX3RpbWVzVHdvTGVmdCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQuY29ubmVjdCh0aGlzLl90aW1lc1R3b1JpZ2h0KTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQuY29ubmVjdCh0aGlzLl9tZXJnZSwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29SaWdodC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAxKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVNZXJnZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1pZFNpZGVNZXJnZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlTWVyZ2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5zaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVNZXJnZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IgYXBwbGllcyB0d28gZGlmZmVyZW50IGNvbXByZXNzb3JzIHRvIHRoZSBtaWRcblx0XHQgKiAgICAgICAgIGFuZCBzaWRlIHNpZ25hbCBjb21wb25lbnRzLiBTZWUgVG9uZS5NaWRTaWRlU3BsaXQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgb3B0aW9ucyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIG1pZCBhbmQgc2lkZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc29ycy5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVDb21wcmVzc29yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5NaWRTaWRlQ29tcHJlc3Nvci5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1pZC9zaWRlIHNwbGl0XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVTcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk1pZFNpZGVTcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtaWQvc2lkZSByZWNvbWJpbmF0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVNZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NaWRTaWRlTWVyZ2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBtaWQgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5taWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIHNpZGUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGUgPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMuc2lkZSk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0Lm1pZC5jaGFpbih0aGlzLm1pZCwgdGhpcy5fbWlkU2lkZU1lcmdlLm1pZCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0LnNpZGUuY2hhaW4odGhpcy5zaWRlLCB0aGlzLl9taWRTaWRlTWVyZ2Uuc2lkZSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ3NpZGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRTaWRlQ29tcHJlc3NvciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVDb21wcmVzc29yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtaWQnOiB7XG5cdCAgICAgICAgICAgICdyYXRpbyc6IDMsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnOiAtMjQsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC4wMyxcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDIsXG5cdCAgICAgICAgICAgICdrbmVlJzogMTZcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdzaWRlJzoge1xuXHQgICAgICAgICAgICAncmF0aW8nOiA2LFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJzogLTMwLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuMjUsXG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAzLFxuXHQgICAgICAgICAgICAna25lZSc6IDEwXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZUNvbXByZXNzb3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnc2lkZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5zaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVDb21wcmVzc29yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Nb25vIGNvZXJjZXMgdGhlIGluY29taW5nIG1vbm8gb3Igc3RlcmVvIHNpZ25hbCBpbnRvIGEgbW9ubyBzaWduYWxcblx0XHQgKiAgICAgICAgIHdoZXJlIGJvdGggbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gVGhpcyBjYW4gYmUgdXNlZnVsXG5cdFx0ICogICAgICAgICBmb3IgW3N0ZXJlbyBpbWFnaW5nXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TdGVyZW9faW1hZ2luZykuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ubyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBtZXJnZSB0aGUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NZXJnZSgpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9tZXJnZSwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAxKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1vbm8sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vbm87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIGNvbXByZXNzb3Igd2l0aCBzZXBlcmF0ZSBjb250cm9scyBvdmVyIGxvdy9taWQvaGlnaCBkeW5hbWljc1xuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBsb3cvbWlkL2hpZ2ggY29tcHJlc3NvciBzZXR0aW5ncy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIG11bHRpYmFuZCA9IG5ldyBUb25lLk11bHRpYmFuZENvbXByZXNzb3Ioe1xuXHRcdCAqICBcdFwibG93RnJlcXVlbmN5XCIgOiAyMDAsXG5cdFx0ICogIFx0XCJoaWdoRnJlcXVlbmN5XCIgOiAxMzAwXG5cdFx0ICogIFx0XCJsb3dcIiA6IHtcblx0XHQgKiAgXHRcdFwidGhyZXNob2xkXCIgOiAtMTJcblx0XHQgKiAgXHR9XG5cdFx0ICogIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZENvbXByZXNzb3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhhcmd1bWVudHMsIFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvci5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3BsaXQgdGhlIGluY29taW5nIHNpZ25hbCBpbnRvIGhpZ2gvbWlkL2xvd1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpYmFuZFNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aWJhbmRTcGxpdCh7XG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knOiBvcHRpb25zLmxvd0ZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiBvcHRpb25zLmhpZ2hGcmVxdWVuY3lcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IHRoaXMuX3NwbGl0dGVyLmxvd0ZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gdGhpcy5fc3BsaXR0ZXIuaGlnaEZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3V0cHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgbG93IGZyZXF1ZW5jaWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvdyA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5sb3cpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIG1pZCBmcmVxdWVuY2llcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Db21wcmVzc29yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMubWlkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBoaWdoIGZyZXF1ZW5jaWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2ggPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMuaGlnaCk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBjb21wcmVzc29yXG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIubG93LmNoYWluKHRoaXMubG93LCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIubWlkLmNoYWluKHRoaXMubWlkLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuaGlnaC5jaGFpbih0aGlzLmhpZ2gsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbG93JzogVG9uZS5Db21wcmVzc29yLmRlZmF1bHRzLFxuXHQgICAgICAgICdtaWQnOiBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMsXG5cdCAgICAgICAgJ2hpZ2gnOiBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMsXG5cdCAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IDI1MCxcblx0ICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IDIwMDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTXVsdGliYW5kQ29tcHJlc3Nvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmxvdy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGlnaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQgJiYgIXdpbmRvdy5TdGVyZW9QYW5uZXJOb2RlKSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBAY2xhc3MgU2hpbW1lZCBTdGVyZW9QYW5uZXJOb2RlXG5cdFx0XHQgKiBAcGFyYW0gIHtBdWRpb0NvbnRleHR9IGNvbnRleHRcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB2YXIgU3RlcmVvUGFubmVyTm9kZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgYXVkaW8gY29udGV4dFxuXHRcdFx0XHQgKiBAdHlwZSB7QXVkaW9Db250ZXh0fVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSBsZWZ0L3JpZ2h0IHBhbm5pbmcuIFstMSwgMV1cblx0XHRcdFx0ICogQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHRcdCAqIEBzaWduYWxcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMucGFuID0gbmV3IFRvbmUuU2lnbmFsKDAsIFRvbmUuVHlwZS5BdWRpb1JhbmdlKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIEVxdWFsIHBvd2VyIHNjYWxpbmcgb2YgdGhlIHJpZ2h0IGdhaW5cblx0XHRcdFx0ICogQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciByaWdodFdhdmVTaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmVxdWFsUG93ZXJTY2FsZSgodmFsICsgMSkgLyAyKTtcblx0ICAgICAgICAgICAgfSwgNDA5Nik7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBFcXVhbCBwb3dlciBzY2FsaW5nIG9mIHRoZSBsZWZ0IGdhaW5cblx0XHRcdFx0ICogQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBsZWZ0V2F2ZVNoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZXF1YWxQb3dlclNjYWxlKDEgLSAodmFsICsgMSkgLyAyKTtcblx0ICAgICAgICAgICAgfSwgNDA5Nik7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgbGVmdCBnYWluIHZhbHVlXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgbGVmdEdhaW4gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgcmlnaHQgZ2FpbiB2YWx1ZVxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHJpZ2h0R2FpbiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuU3BsaXR9XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgc3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIEtlZXBzIHRoZSB3YXZlc2hhcGVycyBmcm9tIG9wdGltaXppbmcgMHNcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuWmVyb31cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciB6ZXJvID0gbmV3IFRvbmUuWmVybygpO1xuXHQgICAgICAgICAgICB6ZXJvLmZhbihyaWdodFdhdmVTaGFwZXIsIGxlZnRXYXZlU2hhcGVyKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIE1lcmdlIHRoZSBvdXRnb2luZyBzaWduYWxcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgbWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICAgICAgc3BsaXQubGVmdC5jaGFpbihsZWZ0R2FpbiwgbWVyZ2UubGVmdCk7XG5cdCAgICAgICAgICAgIHNwbGl0LnJpZ2h0LmNoYWluKHJpZ2h0R2FpbiwgbWVyZ2UucmlnaHQpO1xuXHQgICAgICAgICAgICB0aGlzLnBhbi5jaGFpbihsZWZ0V2F2ZVNoYXBlciwgbGVmdEdhaW4uZ2Fpbik7XG5cdCAgICAgICAgICAgIHRoaXMucGFuLmNoYWluKHJpZ2h0V2F2ZVNoYXBlciwgcmlnaHRHYWluLmdhaW4pO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgU3RlcmVvUGFubmVyTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuZGlzY29ubmVjdC5hcHBseSh0aGlzLm91dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFN0ZXJlb1Bhbm5lck5vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmNvbm5lY3QuYXBwbHkodGhpcy5vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICAvL2FkZCBpdCB0byB0aGUgQXVkaW9Db250ZXh0XG5cdCAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVTdGVyZW9QYW5uZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgU3RlcmVvUGFubmVyTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlU3RlcmVvUGFubmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFN0ZXJlb1Bhbm5lck5vZGUodGhpcyk7XG5cdCAgICAgICAgfTtcblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBhbm5lciBpcyBhbiBlcXVhbCBwb3dlciBMZWZ0L1JpZ2h0IFBhbm5lciBhbmQgZG9lcyBub3Rcblx0XHQgKiAgICAgICAgICBzdXBwb3J0IDNELiBQYW5uZXIgdXNlcyB0aGUgU3RlcmVvUGFubmVyTm9kZSB3aGVuIGF2YWlsYWJsZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbaW5pdGlhbFBhbj0wXSBUaGUgaW5pdGFpbCBwYW5uZXIgdmFsdWUgKGNlbnRlcikuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vcGFuIHRoZSBpbnB1dCBzaWduYWwgaGFyZCByaWdodC5cblx0XHQgKiAgdmFyIHBhbm5lciA9IG5ldyBUb25lLlBhbm5lcigxKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyID0gZnVuY3Rpb24gKGluaXRpYWxQYW4pIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiAgdGhlIHBhbm5lciBub2RlXG5cdFx0XHQqICBAdHlwZSB7U3RlcmVvUGFubmVyTm9kZX1cblx0XHRcdCogIEBwcml2YXRlXG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVTdGVyZW9QYW5uZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCogIFRoZSBwYW4gY29udHJvbC4gLTEgPSBoYXJkIGxlZnQsIDEgPSBoYXJkIHJpZ2h0LlxuXHRcdFx0KiAgQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHQqICBAc2lnbmFsXG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMucGFuID0gdGhpcy5fcGFubmVyLnBhbjtcblx0ICAgICAgICAvL2luaXRpYWwgdmFsdWVcblx0ICAgICAgICB0aGlzLnBhbi52YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyhpbml0aWFsUGFuLCAwKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgncGFuJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYW5uZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdwYW4nKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5wYW4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhbm5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIHNwYXRpYWxpemVkIHBhbm5lciBub2RlIHdoaWNoIHN1cHBvcnRzIGVxdWFscG93ZXIgb3IgSFJURiBwYW5uaW5nLlxuXHRcdCAqICAgICAgICAgIFRyaWVzIHRvIG5vcm1hbGl6ZSB0aGUgQVBJIGFjcm9zcyB2YXJpb3VzIGJyb3dzZXJzLiBTZWUgVG9uZS5MaXN0ZW5lclxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBwb3NpdGlvblggVGhlIGluaXRpYWwgeCBwb3NpdGlvbi5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHBvc2l0aW9uWSBUaGUgaW5pdGlhbCB5IHBvc2l0aW9uLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gcG9zaXRpb25aIFRoZSBpbml0aWFsIHogcG9zaXRpb24uXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNEID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3Bvc2l0aW9uWCcsXG5cdCAgICAgICAgICAgICdwb3NpdGlvblknLFxuXHQgICAgICAgICAgICAncG9zaXRpb25aJ1xuXHQgICAgICAgIF0sIFRvbmUuUGFubmVyM0QpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhbm5lciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1Bhbm5lck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVQYW5uZXIoKTtcblx0ICAgICAgICAvL3NldCBzb21lIHZhbHVlc1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5wYW5uaW5nTW9kZWwgPSBvcHRpb25zLnBhbm5pbmdNb2RlbDtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIubWF4RGlzdGFuY2UgPSBvcHRpb25zLm1heERpc3RhbmNlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXN0YW5jZU1vZGVsID0gb3B0aW9ucy5kaXN0YW5jZU1vZGVsO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5jb25lT3V0ZXJHYWluID0gb3B0aW9ucy5jb25lT3V0ZXJHYWluO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5jb25lT3V0ZXJBbmdsZSA9IG9wdGlvbnMuY29uZU91dGVyQW5nbGU7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbmVJbm5lckFuZ2xlID0gb3B0aW9ucy5jb25lSW5uZXJBbmdsZTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIucmVmRGlzdGFuY2UgPSBvcHRpb25zLnJlZkRpc3RhbmNlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5yb2xsb2ZmRmFjdG9yID0gb3B0aW9ucy5yb2xsb2ZmRmFjdG9yO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IG9yaWVudGF0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBbXG5cdCAgICAgICAgICAgIG9wdGlvbnMub3JpZW50YXRpb25YLFxuXHQgICAgICAgICAgICBvcHRpb25zLm9yaWVudGF0aW9uWSxcblx0ICAgICAgICAgICAgb3B0aW9ucy5vcmllbnRhdGlvblpcblx0ICAgICAgICBdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBbXG5cdCAgICAgICAgICAgIG9wdGlvbnMucG9zaXRpb25YLFxuXHQgICAgICAgICAgICBvcHRpb25zLnBvc2l0aW9uWSxcblx0ICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvblpcblx0ICAgICAgICBdO1xuXHQgICAgICAgIC8vIHNldCB0aGUgZGVmYXVsdCBwb3NpdGlvbi9vcmllbnRhdGlvblxuXHQgICAgICAgIHRoaXMub3JpZW50YXRpb25YID0gb3B0aW9ucy5vcmllbnRhdGlvblg7XG5cdCAgICAgICAgdGhpcy5vcmllbnRhdGlvblkgPSBvcHRpb25zLm9yaWVudGF0aW9uWTtcblx0ICAgICAgICB0aGlzLm9yaWVudGF0aW9uWiA9IG9wdGlvbnMub3JpZW50YXRpb25aO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb25YID0gb3B0aW9ucy5wb3NpdGlvblg7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvblkgPSBvcHRpb25zLnBvc2l0aW9uWTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uWiA9IG9wdGlvbnMucG9zaXRpb25aO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFubmVyM0QsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0cyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Bvc2l0aW9uWCc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWSc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWic6IDAsXG5cdCAgICAgICAgJ29yaWVudGF0aW9uWCc6IDAsXG5cdCAgICAgICAgJ29yaWVudGF0aW9uWSc6IDAsXG5cdCAgICAgICAgJ29yaWVudGF0aW9uWic6IDAsXG5cdCAgICAgICAgJ3Bhbm5pbmdNb2RlbCc6ICdlcXVhbHBvd2VyJyxcblx0ICAgICAgICAnbWF4RGlzdGFuY2UnOiAxMDAwMCxcblx0ICAgICAgICAnZGlzdGFuY2VNb2RlbCc6ICdpbnZlcnNlJyxcblx0ICAgICAgICAnY29uZU91dGVyR2Fpbic6IDAsXG5cdCAgICAgICAgJ2NvbmVPdXRlckFuZ2xlJzogMzYwLFxuXHQgICAgICAgICdjb25lSW5uZXJBbmdsZSc6IDM2MCxcblx0ICAgICAgICAncmVmRGlzdGFuY2UnOiAxLFxuXHQgICAgICAgICdyb2xsb2ZmRmFjdG9yJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByYW1wIHRpbWUgd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgc2V0VGFyZ2V0QXRUaW1lXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuX3JhbXBUaW1lQ29uc3RhbnQgPSAwLjAxO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgaW4gM2Qgc3BhY2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGFubmVyM0R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24gKHgsIHksIHopIHtcblx0ICAgICAgICBpZiAodGhpcy5fcGFubmVyLnBvc2l0aW9uWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnBvc2l0aW9uWC5zZXRUYXJnZXRBdFRpbWUoeCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnBvc2l0aW9uWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnBvc2l0aW9uWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIuc2V0UG9zaXRpb24oeCwgeSwgeik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHNvdXJjZSBpbiAzZCBzcGFjZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB5XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHpcblx0XHQgKiAgQHJldHVybiB7VG9uZS5QYW5uZXIzRH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuc2V0T3JpZW50YXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeikge1xuXHQgICAgICAgIGlmICh0aGlzLl9wYW5uZXIub3JpZW50YXRpb25YKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIub3JpZW50YXRpb25YLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIub3JpZW50YXRpb25ZLnNldFRhcmdldEF0VGltZSh5LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIub3JpZW50YXRpb25aLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5zZXRPcmllbnRhdGlvbih4LCB5LCB6KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAncG9zaXRpb25YJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25ZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdwb3NpdGlvblknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ3Bvc2l0aW9uWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBvcmllbnRhdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG9yaWVudGF0aW9uWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAnb3JpZW50YXRpb25YJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IG9yaWVudGF0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgb3JpZW50YXRpb25ZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdvcmllbnRhdGlvblknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogb3JpZW50YXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBvcmllbnRhdGlvblpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ29yaWVudGF0aW9uWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBQcm94eSBhIHByb3BlcnR5IG9uIHRoZSBwYW5uZXIgdG8gYW4gZXhwb3NlZCBwdWJsaWMgcHJvcGVyeVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5ID0gZnVuY3Rpb24gKHByb3ApIHtcblx0ICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsIHByb3AsIHtcblx0ICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wYW5uZXJbcHJvcF0gPSB2YWw7XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bhbm5lcltwcm9wXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGFubmluZyBtb2RlbC4gRWl0aGVyIFwiZXF1YWxwb3dlclwiIG9yIFwiSFJURlwiLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcGFubmluZ01vZGVsXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdwYW5uaW5nTW9kZWwnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIHJlZmVyZW5jZSBkaXN0YW5jZSBmb3IgcmVkdWNpbmcgdm9sdW1lIGFzIHNvdXJjZSBtb3ZlIGZ1cnRoZXIgZnJvbSB0aGUgbGlzdGVuZXJcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHJlZkRpc3RhbmNlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdyZWZEaXN0YW5jZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlc2NyaWJlcyBob3cgcXVpY2tseSB0aGUgdm9sdW1lIGlzIHJlZHVjZWQgYXMgc291cmNlIG1vdmVzIGF3YXkgZnJvbSBsaXN0ZW5lci5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHJvbGxvZmZGYWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ3JvbGxvZmZGYWN0b3InKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGlzdGFuY2UgbW9kZWwgdXNlZCBieSwgIFwibGluZWFyXCIsIFwiaW52ZXJzZVwiLCBvciBcImV4cG9uZW50aWFsXCIuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBkaXN0YW5jZU1vZGVsXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdkaXN0YW5jZU1vZGVsJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFuZ2xlLCBpbiBkZWdyZWVzLCBpbnNpZGUgb2Ygd2hpY2ggdGhlcmUgd2lsbCBiZSBubyB2b2x1bWUgcmVkdWN0aW9uXG5cdFx0ICogIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgY29uZUlubmVyQW5nbGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2NvbmVJbm5lckFuZ2xlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFuZ2xlLCBpbiBkZWdyZWVzLCBvdXRzaWRlIG9mIHdoaWNoIHRoZSB2b2x1bWUgd2lsbCBiZSByZWR1Y2VkXG5cdFx0ICogIHRvIGEgY29uc3RhbnQgdmFsdWUgb2YgY29uZU91dGVyR2FpblxuXHRcdCAqICBAdHlwZSB7RGVncmVlc31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIGNvbmVPdXRlckFuZ2xlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdjb25lT3V0ZXJBbmdsZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBnYWluIG91dHNpZGUgb2YgdGhlIGNvbmVPdXRlckFuZ2xlXG5cdFx0ICogIEB0eXBlIHtHYWlufVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgY29uZU91dGVyR2FpblxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnY29uZU91dGVyR2FpbicpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gc291cmNlIGFuZCBsaXN0ZW5lcixcblx0XHQgKiAgYWZ0ZXIgd2hpY2ggdGhlIHZvbHVtZSB3aWxsIG5vdCBiZSByZWR1Y2VkIGFueSBmdXJ0aGVyLlxuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBtYXhEaXN0YW5jZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnbWF4RGlzdGFuY2UnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFubmVyM0R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYW5uZXIzRDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGFuVm9sIGlzIGEgVG9uZS5QYW5uZXIgYW5kIFRvbmUuVm9sdW1lIGluIG9uZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvUmFuZ2V9IHBhbiB0aGUgaW5pdGlhbCBwYW5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHZvbHVtZSBUaGUgb3V0cHV0IHZvbHVtZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3BhbiB0aGUgaW5jb21pbmcgc2lnbmFsIGxlZnQgYW5kIGRyb3AgdGhlIHZvbHVtZVxuXHRcdCAqIHZhciBwYW5Wb2wgPSBuZXcgVG9uZS5QYW5Wb2woLTAuMjUsIC0xMik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhblZvbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwYW4nLFxuXHQgICAgICAgICAgICAndm9sdW1lJ1xuXHQgICAgICAgIF0sIFRvbmUuUGFuVm9sKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYW5uaW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5QYW5uZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5QYW5uZXIob3B0aW9ucy5wYW4pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBML1IgcGFubmluZyBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb1JhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucGFuID0gdGhpcy5fcGFubmVyLnBhbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdm9sdW1lIGNvbnRyb2wgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbm5lY3QodGhpcy5fdm9sdW1lKTtcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncGFuJyxcblx0ICAgICAgICAgICAgJ3ZvbHVtZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhblZvbCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFuVm9sLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwYW4nOiAwLFxuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBNdXRlL3VubXV0ZSB0aGUgdm9sdW1lXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGFuVm9sI1xuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhblZvbC5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYW5Wb2x9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFuVm9sLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncGFuJyxcblx0ICAgICAgICAgICAgJ3ZvbHVtZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5wYW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFuVm9sO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuU29sbyBsZXRzIHlvdSBpc29sYXRlIGEgc3BlY2lmaWMgYXVkaW8gc3RyZWFtLiBXaGVuXG5cdFx0ICogICAgICAgICBhbiBpbnN0YW5jZSBpcyBzZXQgdG8gYHNvbG89dHJ1ZWAsIGl0IHdpbGwgbXV0ZSBhbGwgb3RoZXIgaW5zdGFuY2VzLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNvbG9BID0gbmV3IFRvbmUuU29sbygpXG5cdFx0ICogdmFyIHNvbG9CID0gbmV3IFRvbmUuU29sbygpXG5cdFx0ICogc29sb0Euc29sbyA9IHRydWVcblx0XHQgKiAvL25vIGF1ZGlvIHdpbGwgcGFzcyB0aHJvdWdoIHNvbG9CXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzb2xvJ10sIFRvbmUuU29sbyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgaW5wdXQgYW5kIG91dHB1dCBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBib3VuZCBfc29sb2VkIG1ldGhvZFxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvbG9CaW5kID0gdGhpcy5fc29sb2VkLmJpbmQodGhpcyk7XG5cdCAgICAgICAgLy9saXN0ZW4gZm9yIHNvbG8gZXZlbnRzIGNsYXNzLXdpZGUuXG5cdCAgICAgICAgdGhpcy5jb250ZXh0Lm9uKCdzb2xvJywgdGhpcy5fc29sb0JpbmQpO1xuXHQgICAgICAgIC8vc2V0IGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuc29sbyA9IG9wdGlvbnMuc29sbztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNvbG8sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5kZWZhdWx0cyA9IHsgc29sbzogZmFsc2UgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJc29sYXRlcyB0aGlzIGluc3RhbmNlIGFuZCBtdXRlcyBhbGwgb3RoZXIgaW5zdGFuY2VzIG9mIFRvbmUuU29sby5cblx0XHQgKiAgT25seSBvbmUgaW5zdGFuY2UgY2FuIGJlIHNvbG9lZCBhdCBhIHRpbWUuIEEgc29sb2VkXG5cdFx0ICogIGluc3RhbmNlIHdpbGwgcmVwb3J0IGBzb2xvPWZhbHNlYCB3aGVuIGFub3RoZXIgaW5zdGFuY2UgaXMgc29sb2VkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Tb2xvI1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgc29sb1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU29sby5wcm90b3R5cGUsICdzb2xvJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTb2xvZWQoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNvbG8pIHtcblx0ICAgICAgICAgICAgaWYgKHNvbG8pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FkZFNvbG8oKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVNvbG8oKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuZW1pdCgnc29sbycsIHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHRoZSBjdXJyZW50IGluc3RhbmNlIGlzIG11dGVkLCBpLmUuIGFub3RoZXIgaW5zdGFuY2UgaXMgc29sb2VkXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNvbG8jXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBtdXRlZFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNvbG8ucHJvdG90eXBlLCAnbXV0ZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LmdhaW4udmFsdWUgPT09IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBBZGQgdGhpcyB0byB0aGUgc29sb2VkIGFycmF5XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX2FkZFNvbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCFUb25lLmlzQXJyYXkodGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbykpIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbyA9IFtdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIXRoaXMuX2lzU29sb2VkKCkpIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5wdXNoKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZW1vdmUgdGhpcyBmcm9tIHRoZSBzb2xvZWQgYXJyYXlcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5fcmVtb3ZlU29sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5faXNTb2xvZWQoKSkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLmluZGV4T2YodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8uc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gSXMgdGhpcyBvbiB0aGUgc29sb2VkIGFycmF5XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX2lzU29sb2VkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbykpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8ubGVuZ3RoICE9PSAwICYmIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8uaW5kZXhPZih0aGlzKSAhPT0gLTE7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgbm8gb25lIGlzIHNvbG9lZFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9ub1NvbG9zID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAhVG9uZS5pc0FycmF5KHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8pIHx8IHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8ubGVuZ3RoID09PSAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTb2xvIHRoZSBjdXJyZW50IGluc3RhbmNlIGFuZCB1bnNvbG8gYWxsIG90aGVyIGluc3RhbmNlcy5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5Tb2xvfSAgaW5zdGFuY2UgIFRoZSBpbnN0YW5jZSB3aGljaCBpcyBiZWluZyBzb2xvZWQvdW5zb2xvZWQuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9zb2xvZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2lzU29sb2VkKCkpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5nYWluLnZhbHVlID0gMTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX25vU29sb3MoKSkge1xuXHQgICAgICAgICAgICAvL25vIG9uZSBpcyBzb2xvZWRcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5nYWluLnZhbHVlID0gMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmdhaW4udmFsdWUgPSAwO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuU29sb30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbnRleHQub2ZmKCdzb2xvJywgdGhpcy5fc29sb0JpbmQpO1xuXHQgICAgICAgIHRoaXMuX3JlbW92ZVNvbG8oKTtcblx0ICAgICAgICB0aGlzLl9zb2xvQmluZCA9IG51bGw7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Tb2xvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBHZXQgdGhlIGN1cnJlbnQgd2F2ZWZvcm0gZGF0YSBvZiB0aGUgY29ubmVjdGVkIGF1ZGlvIHNvdXJjZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHNpemUgVGhlIHNpemUgb2YgdGhlIEZGVC4gVmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnc2l6ZSddLCBUb25lLldhdmVmb3JtKTtcblx0ICAgICAgICBvcHRpb25zLnR5cGUgPSBUb25lLkFuYWx5c2VyLlR5cGUuV2F2ZWZvcm07XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFuYWx5c2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5BbmFseXNlcihvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLldhdmVmb3JtLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0uZGVmYXVsdHMgPSB7ICdzaXplJzogMTAyNCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldHMgdGhlIHdhdmVmb3JtIG9mIHRoZSBhdWRpbyBzb3VyY2UuIFJldHVybnMgdGhlIHdhdmVmb3JtIGRhdGFcblx0XHQgKiAgb2YgbGVuZ3RoIFtzaXplXSgjc2l6ZSkgYXMgYSBGbG9hdDMyQXJyYXkgd2l0aCB2YWx1ZXMgYmV0d2VlbiAtMSBhbmQgMS5cblx0XHQgKiAgQHJldHVybnMge1R5cGVkQXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNpemUgb2YgYW5hbHlzaXMuIFRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLldhdmVmb3JtI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5XYXZlZm9ybS5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc2l6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuc2l6ZSA9IHNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLldhdmVmb3JtfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlZm9ybS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuV2F2ZWZvcm07XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkN0cmxJbnRlcnBvbGF0ZSB3aWxsIGludGVycG9sYXRlIGJldHdlZW4gZ2l2ZW4gdmFsdWVzIGJhc2VkXG5cdFx0ICogICAgICAgICBvbiB0aGUgXCJpbmRleFwiIHByb3BlcnR5LiBQYXNzaW5nIGluIGFuIGFycmF5IG9yIG9iamVjdCBsaXRlcmFsXG5cdFx0ICogICAgICAgICB3aWxsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIHBhcmFtZXRlcnMuIE5vdGUgKGkuZS4gXCJDM1wiKVxuXHRcdCAqICAgICAgICAgYW5kIFRpbWUgKGkuZS4gXCI0biArIDJcIikgY2FuIGJlIGludGVycG9sYXRlZC4gQWxsIG90aGVyIHZhbHVlcyBhcmVcblx0XHQgKiAgICAgICAgIGFzc3VtZWQgdG8gYmUgbnVtYmVycy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGludGVycCA9IG5ldyBUb25lLkN0cmxJbnRlcnBvbGF0ZShbMCwgMiwgOSwgNF0pO1xuXHRcdCAqIGludGVycC5pbmRleCA9IDAuNzU7XG5cdFx0ICogaW50ZXJwLnZhbHVlOyAvL3JldHVybnMgMS41XG5cdFx0ICpcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgaW50ZXJwID0gbmV3IFRvbmUuQ3RybEludGVycG9sYXRlKFtcblx0XHQgKiBcdFsyLCA0LCA1XSxcblx0XHQgKiBcdFs5LCAzLCAyXSxcblx0XHQgKiBdKTtcblx0XHQgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIGFycmF5IG9mIHZhbHVlcyB0byBpbnRlcnBvbGF0ZSBvdmVyXG5cdFx0ICogQHBhcmFtIHtQb3NpdGl2ZX0gaW5kZXggVGhlIGluaXRpYWwgaW50ZXJwb2xhdGlvbiBpbmRleC5cblx0XHQgKiBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3ZhbHVlcycsXG5cdCAgICAgICAgICAgICdpbmRleCdcblx0ICAgICAgICBdLCBUb25lLkN0cmxJbnRlcnBvbGF0ZSk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZXMgdG8gaW50ZXJwb2xhdGUgYmV0d2VlblxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG9wdGlvbnMudmFsdWVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBpbnRlcnBvbGF0ZWQgaW5kZXggYmV0d2VlbiB2YWx1ZXMuIEZvciBleGFtcGxlOiBhIHZhbHVlIG9mIDEuNVxuXHRcdFx0ICogIHdvdWxkIGludGVycG9sYXRlIGVxdWFsbHkgYmV0d2VlbiB0aGUgdmFsdWUgYXQgaW5kZXggMVxuXHRcdFx0ICogIGFuZCB0aGUgdmFsdWUgYXQgaW5kZXggMi4gXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIGludGVycC5pbmRleCA9IDA7IFxuXHRcdFx0ICogaW50ZXJwLnZhbHVlOyAvL3JldHVybnMgdGhlIHZhbHVlIGF0IDBcblx0XHRcdCAqIGludGVycC5pbmRleCA9IDAuNTtcblx0XHRcdCAqIGludGVycC52YWx1ZTsgLy9yZXR1cm5zIHRoZSB2YWx1ZSBiZXR3ZWVuIGluZGljZXMgMCBhbmQgMS4gXG5cdFx0XHQgKiAgQHR5cGUgIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3RybEludGVycG9sYXRlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2luZGV4JzogMCxcblx0ICAgICAgICAndmFsdWVzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgaW50ZXJwb2xhdGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBpbmRleFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybEludGVycG9sYXRlI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxJbnRlcnBvbGF0ZS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgdGhpcy52YWx1ZXMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciBsb3dlclBvc2l0aW9uID0gTWF0aC5mbG9vcihpbmRleCk7XG5cdCAgICAgICAgICAgIHZhciBsb3dlciA9IHRoaXMudmFsdWVzW2xvd2VyUG9zaXRpb25dO1xuXHQgICAgICAgICAgICB2YXIgdXBwZXIgPSB0aGlzLnZhbHVlc1tNYXRoLmNlaWwoaW5kZXgpXTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVycG9sYXRlKGluZGV4IC0gbG93ZXJQb3NpdGlvbiwgbG93ZXIsIHVwcGVyKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBpbnRlcnBvbGF0aW9uIHJvdXRpbmVcblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBpbmRleCAgVGhlIGluZGV4IGJldHdlZW4gdGhlIGxvd2VyIGFuZCB1cHBlclxuXHRcdCAqICBAcGFyYW0gIHsqfSAgbG93ZXIgXG5cdFx0ICogIEBwYXJhbSAgeyp9ICB1cHBlciBcblx0XHQgKiAgQHJldHVybiAgeyp9ICBUaGUgaW50ZXJwb2xhdGVkIHZhbHVlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZS5wcm90b3R5cGUuX2ludGVycG9sYXRlID0gZnVuY3Rpb24gKGluZGV4LCBsb3dlciwgdXBwZXIpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KGxvd2VyKSkge1xuXHQgICAgICAgICAgICB2YXIgcmV0QXJyYXkgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb3dlci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgcmV0QXJyYXlbaV0gPSB0aGlzLl9pbnRlcnBvbGF0ZShpbmRleCwgbG93ZXJbaV0sIHVwcGVyW2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0QXJyYXk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzT2JqZWN0KGxvd2VyKSkge1xuXHQgICAgICAgICAgICB2YXIgcmV0T2JqID0ge307XG5cdCAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gbG93ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldE9ialthdHRyXSA9IHRoaXMuX2ludGVycG9sYXRlKGluZGV4LCBsb3dlclthdHRyXSwgdXBwZXJbYXR0cl0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXRPYmo7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgbG93ZXIgPSB0aGlzLl90b051bWJlcihsb3dlcik7XG5cdCAgICAgICAgICAgIHVwcGVyID0gdGhpcy5fdG9OdW1iZXIodXBwZXIpO1xuXHQgICAgICAgICAgICByZXR1cm4gKDEgLSBpbmRleCkgKiBsb3dlciArIGluZGV4ICogdXBwZXI7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGZyb20gdGhlIGdpdmVuIHR5cGUgaW50byBhIG51bWJlclxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ8U3RyaW5nfSAgdmFsdWVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZS5fdG9OdW1iZXIgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodmFsKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGFzc3VtZSB0aGF0IGl0J3MgVGltZS4uLlxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHModmFsKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkN0cmxJbnRlcnBvbGF0ZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsSW50ZXJwb2xhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkN0cmxNYXJrb3YgcmVwcmVzZW50cyBhIE1hcmtvdiBDaGFpbiB3aGVyZSBlYWNoIGNhbGxcblx0XHQgKiAgICAgICAgIHRvIFRvbmUuQ3RybE1hcmtvdi5uZXh0IHdpbGwgbW92ZSB0byB0aGUgbmV4dCBzdGF0ZS4gSWYgdGhlIG5leHRcblx0XHQgKiAgICAgICAgIHN0YXRlIGNob2ljZSBpcyBhbiBhcnJheSwgdGhlIG5leHQgc3RhdGUgaXMgY2hvc2VuIHJhbmRvbWx5IHdpdGhcblx0XHQgKiAgICAgICAgIGV2ZW4gcHJvYmFiaWxpdHkgZm9yIGFsbCBvZiB0aGUgY2hvaWNlcy4gRm9yIGEgd2VpZ2h0ZWQgcHJvYmFiaWxpdHlcblx0XHQgKiAgICAgICAgIG9mIHRoZSBuZXh0IGNob2ljZXMsIHBhc3MgaW4gYW4gb2JqZWN0IHdpdGggXCJzdGF0ZVwiIGFuZCBcInByb2JhYmlsaXR5XCIgYXR0cmlidXRlcy4gXG5cdFx0ICogICAgICAgICBUaGUgcHJvYmFiaWxpdGllcyB3aWxsIGJlIG5vcm1hbGl6ZWQgYW5kIHRoZW4gY2hvc2VuLiBJZiBubyBuZXh0IG9wdGlvbnNcblx0XHQgKiAgICAgICAgIGFyZSBnaXZlbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUsIHRoZSBzdGF0ZSB3aWxsIHN0YXkgdGhlcmUuIFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgY2hhaW4gPSBuZXcgVG9uZS5DdHJsTWFya292KHtcblx0XHQgKiBcdFwiYmVnaW5uaW5nXCIgOiBbXCJlbmRcIiwgXCJtaWRkbGVcIl0sXG5cdFx0ICogXHRcIm1pZGRsZVwiIDogXCJlbmRcIlxuXHRcdCAqIH0pO1xuXHRcdCAqIGNoYWluLnZhbHVlID0gXCJiZWdpbm5pbmdcIjtcblx0XHQgKiBjaGFpbi5uZXh0KCk7IC8vcmV0dXJucyBcImVuZFwiIG9yIFwibWlkZGxlXCIgd2l0aCA1MCUgcHJvYmFiaWxpdHlcblx0XHQgKlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjaGFpbiA9IG5ldyBUb25lLkN0cmxNYXJrb3Yoe1xuXHRcdCAqIFx0XCJiZWdpbm5pbmdcIiA6IFt7XCJ2YWx1ZVwiIDogXCJlbmRcIiwgXCJwcm9iYWJpbGl0eVwiIDogMC44fSwgXG5cdFx0ICogXHRcdFx0XHRcdHtcInZhbHVlXCIgOiBcIm1pZGRsZVwiLCBcInByb2JhYmlsaXR5XCIgOiAwLjJ9XSxcblx0XHQgKiBcdFwibWlkZGxlXCIgOiBcImVuZFwiXG5cdFx0ICogfSk7XG5cdFx0ICogY2hhaW4udmFsdWUgPSBcImJlZ2lubmluZ1wiO1xuXHRcdCAqIGNoYWluLm5leHQoKTsgLy9yZXR1cm5zIFwiZW5kXCIgd2l0aCA4MCUgcHJvYmFiaWxpdHkgb3IgXCJtaWRkbGVcIiB3aXRoIDIwJS5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IHZhbHVlcyBBbiBvYmplY3Qgd2l0aCB0aGUgc3RhdGUgbmFtZXMgYXMgdGhlIGtleXNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIG5leHQgc3RhdGUocykgYXMgdGhlIHZhbHVlcy4gXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YgPSBmdW5jdGlvbiAodmFsdWVzLCBpbml0aWFsKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBNYXJrb3YgdmFsdWVzIHdpdGggc3RhdGVzIGFzIHRoZSBrZXlzXG5cdFx0XHQgKiAgYW5kIG5leHQgc3RhdGUocykgYXMgdGhlIHZhbHVlcy4gXG5cdFx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gVG9uZS5kZWZhdWx0QXJnKHZhbHVlcywge30pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBNYXJrb3YgdmFsdWVzLiBUaGUgbmV4dFxuXHRcdFx0ICogIHN0YXRlIHdpbGwgYmUgZXZhbHVhdGVkIGFuZCByZXR1cm5lZCB3aGVuIFRvbmUuQ3RybE1hcmtvdi5uZXh0XG5cdFx0XHQgKiAgaXMgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyhpbml0aWFsLCBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcylbMF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3RybE1hcmtvdik7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgbmV4dCBzdGF0ZSBvZiB0aGUgTWFya292IHZhbHVlcy4gXG5cdFx0ICogIEByZXR1cm4gIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMudmFsdWVzLmhhc093blByb3BlcnR5KHRoaXMudmFsdWUpKSB7XG5cdCAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy52YWx1ZXNbdGhpcy52YWx1ZV07XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkobmV4dCkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkaXN0cmlidXRpb24gPSB0aGlzLl9nZXRQcm9iRGlzdHJpYnV0aW9uKG5leHQpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJhbmQgPSBNYXRoLnJhbmRvbSgpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHRvdGFsID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzdHJpYnV0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3QgPSBkaXN0cmlidXRpb25baV07XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmQgPiB0b3RhbCAmJiByYW5kIDwgdG90YWwgKyBkaXN0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaG9zZW4gPSBuZXh0W2ldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChjaG9zZW4pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gY2hvc2VuLnZhbHVlO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNob3Nlbjtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBkaXN0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5leHQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENob29zZSByYW5kb21seSBmcm9tIGFuIGFycmF5IHdlaWdodGVkIG9wdGlvbnMgaW4gdGhlIGZvcm0gXG5cdFx0ICogIHtcInN0YXRlXCIgOiBzdHJpbmcsIFwicHJvYmFiaWxpdHlcIiA6IG51bWJlcn0gb3IgYW4gYXJyYXkgb2YgdmFsdWVzXG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgb3B0aW9ucyBcblx0XHQgKiAgQHJldHVybiAge0FycmF5fSAgVGhlIHJhbmRvbWx5IHNlbGVjdGVkIGNob2ljZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsTWFya292LnByb3RvdHlwZS5fZ2V0UHJvYkRpc3RyaWJ1dGlvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgdmFyIGRpc3RyaWJ1dGlvbiA9IFtdO1xuXHQgICAgICAgIHZhciB0b3RhbCA9IDA7XG5cdCAgICAgICAgdmFyIG5lZWRzTm9ybWFsaXppbmcgPSBmYWxzZTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbaV07XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KG9wdGlvbikpIHtcblx0ICAgICAgICAgICAgICAgIG5lZWRzTm9ybWFsaXppbmcgPSB0cnVlO1xuXHQgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uW2ldID0gb3B0aW9uLnByb2JhYmlsaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uW2ldID0gMSAvIG9wdGlvbnMubGVuZ3RoO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRvdGFsICs9IGRpc3RyaWJ1dGlvbltpXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKG5lZWRzTm9ybWFsaXppbmcpIHtcblx0ICAgICAgICAgICAgLy9ub3JtYWxpemUgdGhlIHZhbHVlc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRpc3RyaWJ1dGlvbi5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uW2pdID0gZGlzdHJpYnV0aW9uW2pdIC8gdG90YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGRpc3RyaWJ1dGlvbjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ3RybE1hcmtvdn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ3RybE1hcmtvdjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEdlbmVyYXRlIHBhdHRlcm5zIGZyb20gYW4gYXJyYXkgb2YgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgSGFzIGEgbnVtYmVyIG9mIGFycGVnZ2lhdGlvbiBhbmQgcmFuZG9taXplZFxuXHRcdCAqICAgICAgICAgc2VsZWN0aW9uIHBhdHRlcm5zLiBcblx0XHQgKiAgICAgICAgICAgPHVsPlxuXHRcdCAqICBcdCAgICAgICAgPGxpPlwidXBcIiAtIGN5Y2xlcyB1cHdhcmQ8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJkb3duXCIgLSBjeWNsZXMgZG93bndhcmQ8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJ1cERvd25cIiAtIHVwIHRoZW4gYW5kIGRvd248L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJkb3duVXBcIiAtIGN5Y2xlcyBkb3duIHRoZW4gYW5kIHVwPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwiYWx0ZXJuYXRlVXBcIiAtIGp1bXAgdXAgdHdvIGFuZCBkb3duIG9uZTwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImFsdGVybmF0ZURvd25cIiAtIGp1bXAgZG93biB0d28gYW5kIHVwIG9uZTwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInJhbmRvbVwiIC0gcmFuZG9tbHkgc2VsZWN0IGFuIGluZGV4PC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwicmFuZG9tV2Fsa1wiIC0gcmFuZG9tbHkgbW92ZXMgb25lIGluZGV4IGF3YXkgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbjwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInJhbmRvbU9uY2VcIiAtIHJhbmRvbWx5IHNlbGVjdCBhbiBpbmRleCB3aXRob3V0IHJlcGVhdGluZyB1bnRpbCBhbGwgdmFsdWVzIGhhdmUgYmVlbiBjaG9zZW4uPC9saT5cblx0XHQgKiAgICAgXHRcdDwvdWw+XG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgdmFsdWVzICAgQW4gYXJyYXkgb2Ygb3B0aW9ucyB0byBjaG9vc2UgZnJvbS5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5DdHJsUGF0dGVybi5UeXBlPX0gIHR5cGUgIFRoZSBuYW1lIG9mIHRoZSBwYXR0ZXJuLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndmFsdWVzJyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5DdHJsUGF0dGVybik7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiB2YWx1ZXMgdG8gYXJwZWdnaWF0ZSBvdmVyXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBvcHRpb25zLnZhbHVlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgdmFsdWVzIGFycmF5XG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHlwZSBwbGFjZWhvbGRlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkN0cmxQYXR0ZXJuLlR5cGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNodWZmbGVkIHZhbHVlcyBmb3IgdGhlIFJhbmRvbU9uY2UgdHlwZVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkaXJlY3Rpb24gb2YgdGhlIG1vdmVtZW50XG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsUGF0dGVybik7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIENvbnRyb2wgUGF0dGVybnNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4uVHlwZSA9IHtcblx0ICAgICAgICBVcDogJ3VwJyxcblx0ICAgICAgICBEb3duOiAnZG93bicsXG5cdCAgICAgICAgVXBEb3duOiAndXBEb3duJyxcblx0ICAgICAgICBEb3duVXA6ICdkb3duVXAnLFxuXHQgICAgICAgIEFsdGVybmF0ZVVwOiAnYWx0ZXJuYXRlVXAnLFxuXHQgICAgICAgIEFsdGVybmF0ZURvd246ICdhbHRlcm5hdGVEb3duJyxcblx0ICAgICAgICBSYW5kb206ICdyYW5kb20nLFxuXHQgICAgICAgIFJhbmRvbVdhbGs6ICdyYW5kb21XYWxrJyxcblx0ICAgICAgICBSYW5kb21PbmNlOiAncmFuZG9tT25jZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLiBcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwLFxuXHQgICAgICAgICd2YWx1ZXMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIHBhdHRlcm4uXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsUGF0dGVybiNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy9zb21lIHNhZmVndWFyZHNcblx0ICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLm1pbih0aGlzLmluZGV4LCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWVzW3RoaXMuaW5kZXhdO1xuXHQgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCAhPT0gdGhpcy5fc2h1ZmZsZWQubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZVZhbHVlcygpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdmFsID0gdGhpcy52YWx1ZXNbdGhpcy5fc2h1ZmZsZWRbdGhpcy5pbmRleF1dO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBhdHRlcm4gdXNlZCB0byBzZWxlY3QgdGhlIG5leHRcblx0XHQgKiAgaXRlbSBmcm9tIHRoZSB2YWx1ZXMgYXJyYXlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybFBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtUb25lLkN0cmxQYXR0ZXJuLlR5cGV9XG5cdFx0ICogIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBudWxsO1xuXHQgICAgICAgICAgICAvL3RoZSBmaXJzdCBpbmRleFxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcERvd24gfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbU9uY2UgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZVVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93biB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93blVwIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVEb3duKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL3RoZSBkaXJlY3Rpb25cblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcERvd24gfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZVVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd25VcCB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlRG93bikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9yYW5kb21zXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZVZhbHVlcygpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uUmFuZG9tKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy52YWx1ZXMubGVuZ3RoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgbmV4dCB2YWx1ZSBnaXZlbiB0aGUgY3VycmVudCBwb3NpdGlvblxuXHRcdCAqICBhbmQgcGF0dGVybi5cblx0XHQgKiAgQHJldHVybiB7Kn0gVGhlIG5leHQgdmFsdWVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdCAgICAgICAgLy9jaG9vc2UgdGhlIG5leHQgaW5kZXhcblx0ICAgICAgICBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd24pIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleC0tO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnZhbHVlcy5sZW5ndGggLSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXBEb3duIHx8IHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duVXApIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4Kys7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4LS07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluZGV4ID49IHRoaXMudmFsdWVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDI7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbSkge1xuXHQgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy52YWx1ZXMubGVuZ3RoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21XYWxrKSB7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpIDwgMC41KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4LS07XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5tYXgodGhpcy5pbmRleCwgMCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4Kys7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5taW4odGhpcy5pbmRleCwgdGhpcy52YWx1ZXMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgICAgIC8vcmVzaHVmZmxlIHRoZSB2YWx1ZXMgZm9yIG5leHQgdGltZVxuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZVZhbHVlcygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlVXApIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDI7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggLT0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlRG93bikge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCAtPSAyO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDE7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2h1ZmZsZXMgdGhlIHZhbHVlcyBhbmQgcGxhY2VzIHRoZSByZXN1bHRzIGludG8gdGhlIF9zaHVmZmxlZFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUuX3NodWZmbGVWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGNvcHkgPSBbXTtcblx0ICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgY29weVtpXSA9IGk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHdoaWxlIChjb3B5Lmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgdmFyIHJhbmRWYWwgPSBjb3B5LnNwbGljZShNYXRoLmZsb29yKGNvcHkubGVuZ3RoICogTWF0aC5yYW5kb20oKSksIDEpO1xuXHQgICAgICAgICAgICB0aGlzLl9zaHVmZmxlZC5wdXNoKHJhbmRWYWxbMF0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ3RybFBhdHRlcm59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsUGF0dGVybjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBDaG9vc2UgYSByYW5kb20gdmFsdWUuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciByYW5kb21XYWxrID0gbmV3IFRvbmUuQ3RybFJhbmRvbSh7XG5cdFx0ICogXHRcIm1pblwiIDogMCxcblx0XHQgKiBcdFwibWF4XCIgOiAxMCxcblx0XHQgKiBcdFwiaW50ZWdlclwiIDogdHJ1ZVxuXHRcdCAqIH0pO1xuXHRcdCAqIHJhbmRvbVdhbGsuZXZhbCgpO1xuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfFRpbWU9fSBtaW4gVGhlIG1pbmltdW0gcmV0dXJuIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxUaW1lPX0gbWF4IFRoZSBtYXhpbXVtIHJldHVybiB2YWx1ZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFJhbmRvbSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdtaW4nLFxuXHQgICAgICAgICAgICAnbWF4J1xuXHQgICAgICAgIF0sIFRvbmUuQ3RybFJhbmRvbSk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaW5pbXVtIHJldHVybiB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfFRpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pbiA9IG9wdGlvbnMubWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtYXhpbXVtIHJldHVybiB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfFRpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1heCA9IG9wdGlvbnMubWF4O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIHRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIGFuIGludGVnZXJcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmludGVnZXIgPSBvcHRpb25zLmludGVnZXI7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsUmFuZG9tKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUmFuZG9tLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICdpbnRlZ2VyJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIGEgcmFuZG9tIHZhbHVlIGJldHdlZW4gbWluIGFuZCBtYXguIFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybFJhbmRvbSNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DdHJsUmFuZG9tLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbWluID0gdGhpcy50b1NlY29uZHModGhpcy5taW4pO1xuXHQgICAgICAgICAgICB2YXIgbWF4ID0gdGhpcy50b1NlY29uZHModGhpcy5tYXgpO1xuXHQgICAgICAgICAgICB2YXIgcmFuZCA9IE1hdGgucmFuZG9tKCk7XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSByYW5kICogbWluICsgKDEgLSByYW5kKSAqIG1heDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW50ZWdlcikge1xuXHQgICAgICAgICAgICAgICAgdmFsID0gTWF0aC5mbG9vcih2YWwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsUmFuZG9tO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgZGF0YSBzdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgbXVsdGlwbGUgYnVmZmVycy5cblx0XHQgKiAgXG5cdFx0ICogIEBwYXJhbSAge09iamVjdHxBcnJheX0gICAgdXJscyAgICAgIEFuIG9iamVjdCBsaXRlcmFsIG9yIGFycmF5XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHVybHMgdG8gbG9hZC5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZC4gXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9hZCBhIHdob2xlIGJhbmsgb2YgcGlhbm8gc2FtcGxlc1xuXHRcdCAqIHZhciBwaWFub1NhbXBsZXMgPSBuZXcgVG9uZS5CdWZmZXJzKHtcblx0XHQgKiBcdFwiQzRcIiA6IFwicGF0aC90by9DNC5tcDNcIlxuXHRcdCAqIFx0XCJDIzRcIiA6IFwicGF0aC90by9DIzQubXAzXCJcblx0XHQgKiBcdFwiRDRcIiA6IFwicGF0aC90by9ENC5tcDNcIlxuXHRcdCAqIFx0XCJEIzRcIiA6IFwicGF0aC90by9EIzQubXAzXCJcblx0XHQgKiBcdC4uLlxuXHRcdCAqIH0sIGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3BsYXkgb25lIG9mIHRoZSBzYW1wbGVzIHdoZW4gdGhleSBhbGwgbG9hZFxuXHRcdCAqIFx0cGxheWVyLmJ1ZmZlciA9IHBpYW5vU2FtcGxlcy5nZXQoXCJDNFwiKTtcblx0XHQgKiBcdHBsYXllci5zdGFydCgpO1xuXHRcdCAqIH0pO1xuXHRcdCAqIFx0QGV4YW1wbGVcblx0XHQgKiAvL1RvIHBhc3MgaW4gYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGluIHRoZSBzZWNvbmQgcGFyYW1ldGVyXG5cdFx0ICogdmFyIGJ1ZmZlcnMgPSBuZXcgVG9uZS5CdWZmZXJzKHVybHMsIHtcblx0XHQgKiBcdFwib25sb2FkXCIgOiBjYWxsYmFjayxcblx0XHQgKiBcdFwiYmFzZVVybFwiIDogXCIuLi9wYXRoL3RvL2F1ZGlvL1wiXG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycyA9IGZ1bmN0aW9uICh1cmxzKSB7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIHVybHMgZnJvbSB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3MsIFtcblx0ICAgICAgICAgICAgJ29ubG9hZCcsXG5cdCAgICAgICAgICAgICdiYXNlVXJsJ1xuXHQgICAgICAgIF0sIFRvbmUuQnVmZmVycyk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgYnVmZmVyc1xuXHRcdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0ge307XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBwYXRoIHdoaWNoIGlzIHByZWZpeGVkIGJlZm9yZSBldmVyeSB1cmwuXG5cdFx0XHQgKiAgQHR5cGUgIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50ID0gMDtcblx0ICAgICAgICAvL2FkZCBlYWNoIG9uZVxuXHQgICAgICAgIGZvciAodmFyIGtleSBpbiB1cmxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCsrO1xuXHQgICAgICAgICAgICB0aGlzLmFkZChrZXksIHVybHNba2V5XSwgdGhpcy5fYnVmZmVyTG9hZGVkLmJpbmQodGhpcywgb3B0aW9ucy5vbmxvYWQpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CdWZmZXJzKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdiYXNlVXJsJzogJydcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJ1ZSBpZiB0aGUgYnVmZmVycyBvYmplY3QgaGFzIGEgYnVmZmVyIGJ5IHRoYXQgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIG5hbWUgIFRoZSBrZXkgb3IgaW5kZXggb2YgdGhlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLlxuXHRcdCAqICBAcmV0dXJuICB7Qm9vbGVhbn1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVycy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IGEgYnVmZmVyIGJ5IG5hbWUuIElmIGFuIGFycmF5IHdhcyBsb2FkZWQsIFxuXHRcdCAqICB0aGVuIHVzZSB0aGUgYXJyYXkgaW5kZXguXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICBuYW1lICBUaGUga2V5IG9yIGluZGV4IG9mIHRoZSBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIGlmICh0aGlzLmhhcyhuYW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyc1tuYW1lXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyczogbm8gYnVmZmVyIG5hbWVkICcgKyBuYW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEEgYnVmZmVyIHdhcyBsb2FkZWQuIGRlY3JlbWVudCB0aGUgY291bnRlci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuX2J1ZmZlckxvYWRlZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudC0tO1xuXHQgICAgICAgIGlmICh0aGlzLl9sb2FkaW5nQ291bnQgPT09IDAgJiYgY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVycyNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlcnMucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaXNMb2FkZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBidWZmTmFtZSBpbiB0aGlzLl9idWZmZXJzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnVmZiA9IHRoaXMuZ2V0KGJ1ZmZOYW1lKTtcblx0ICAgICAgICAgICAgICAgIGlzTG9hZGVkID0gaXNMb2FkZWQgJiYgYnVmZi5sb2FkZWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIGJ1ZmZlciBieSBuYW1lIGFuZCB1cmwgdG8gdGhlIEJ1ZmZlcnNcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBuYW1lICAgICAgQSB1bmlxdWUgbmFtZSB0byBnaXZlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXJcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfFRvbmUuQnVmZmVyfEF1ZGlvYnVmZmVyfSAgdXJsICBFaXRoZXIgdGhlIHVybCBvZiB0aGUgYnVmZXIsIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYWRkZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgY2FsbGJhY2sgPSBUb25lLmRlZmF1bHRBcmcoY2FsbGJhY2ssIFRvbmUubm9PcCk7XG5cdCAgICAgICAgaWYgKHVybCBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0gPSB1cmw7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodXJsIGluc3RhbmNlb2YgQXVkaW9CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXSA9IG5ldyBUb25lLkJ1ZmZlcih1cmwpO1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcodXJsKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzW25hbWVdID0gbmV3IFRvbmUuQnVmZmVyKHRoaXMuYmFzZVVybCArIHVybCwgY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlcnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl9idWZmZXJzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0uZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CdWZmZXJzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBidXNlcyBhcmUgYW5vdGhlciB3YXkgb2Ygcm91dGluZyBhdWRpb1xuXHRcdCAqXG5cdFx0ICogIGF1Z21lbnRzIFRvbmUucHJvdG90eXBlIHRvIGluY2x1ZGUgc2VuZCBhbmQgcmVjaWV2ZVxuXHRcdCAqL1xuXHQgICAgLyoqXG5cdFx0ICogIEFsbCBvZiB0aGUgcm91dGVzXG5cdFx0ICpcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIEJ1c2VzID0ge307XG5cdCAgICAvKipcblx0XHQgKiAgU2VuZCB0aGlzIHNpZ25hbCB0byB0aGUgY2hhbm5lbCBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9IGNoYW5uZWxOYW1lIEEgbmFtZWQgY2hhbm5lbCB0byBzZW5kIHRoZSBzaWduYWwgdG8uXG5cdFx0ICogIEBwYXJhbSAge0RlY2liZWxzfSBhbW91bnQgVGhlIGFtb3VudCBvZiB0aGUgc291cmNlIHRvIHNlbmQgdG8gdGhlIGJ1cy5cblx0XHQgKiAgQHJldHVybiB7R2Fpbk5vZGV9IFRoZSBnYWluIG5vZGUgd2hpY2ggY29ubmVjdHMgdGhpcyBub2RlIHRvIHRoZSBkZXNpcmVkIGNoYW5uZWwuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCB0byBhZGp1c3QgdGhlIGxldmVscyBvZiB0aGUgc2VuZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc2VuZChcInJldmVyYlwiLCAtMTIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIChjaGFubmVsTmFtZSwgYW1vdW50KSB7XG5cdCAgICAgICAgaWYgKCFCdXNlcy5oYXNPd25Qcm9wZXJ0eShjaGFubmVsTmFtZSkpIHtcblx0ICAgICAgICAgICAgQnVzZXNbY2hhbm5lbE5hbWVdID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgYW1vdW50ID0gVG9uZS5kZWZhdWx0QXJnKGFtb3VudCwgMCk7XG5cdCAgICAgICAgdmFyIHNlbmRLbm9iID0gbmV3IFRvbmUuR2FpbihhbW91bnQsIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0KHNlbmRLbm9iKTtcblx0ICAgICAgICBzZW5kS25vYi5jb25uZWN0KEJ1c2VzW2NoYW5uZWxOYW1lXSk7XG5cdCAgICAgICAgcmV0dXJuIHNlbmRLbm9iO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZWNpZXZlIHRoZSBpbnB1dCBmcm9tIHRoZSBkZXNpcmVkIGNoYW5uZWxOYW1lIHRvIHRoZSBpbnB1dFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gY2hhbm5lbE5hbWUgQSBuYW1lZCBjaGFubmVsIHRvIHNlbmQgdGhlIHNpZ25hbCB0by5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gY2hhbm5lbE51bWJlciBUaGUgY2hhbm5lbCB0byBjb25uZWN0IHRvXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcmV2ZXJiRWZmZWN0LnJlY2VpdmUoXCJyZXZlcmJcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5yZWNlaXZlID0gZnVuY3Rpb24gKGNoYW5uZWxOYW1lLCBpbnB1dE51bSkge1xuXHQgICAgICAgIGlmICghQnVzZXMuaGFzT3duUHJvcGVydHkoY2hhbm5lbE5hbWUpKSB7XG5cdCAgICAgICAgICAgIEJ1c2VzW2NoYW5uZWxOYW1lXSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIEJ1c2VzW2NoYW5uZWxOYW1lXS5jb25uZWN0KHRoaXMsIDAsIGlucHV0TnVtKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvL3JlbW92ZSBhbGwgdGhlIHNlbmQvcmVjZWl2ZXMgd2hlbiBhIG5ldyBhdWRpbyBjb250ZXh0IGlzIHBhc3NlZCBpblxuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5CdXNlcykge1xuXHQgICAgICAgICAgICBCdXNlcyA9IGNvbnRleHQuQnVzZXM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgQnVzZXMgPSB7fTtcblx0ICAgICAgICAgICAgY29udGV4dC5CdXNlcyA9IEJ1c2VzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkRyYXcgaXMgdXNlZnVsIGZvciBzeW5jaHJvbml6aW5nIHZpc3VhbHMgYW5kIGF1ZGlvIGV2ZW50cy5cblx0XHQgKiAgICAgICAgIENhbGxiYWNrcyBmcm9tIFRvbmUuVHJhbnNwb3J0IG9yIGFueSBvZiB0aGUgVG9uZS5FdmVudCBjbGFzc2VzXG5cdFx0ICogICAgICAgICBhbHdheXMgaGFwcGVuIF9iZWZvcmVfIHRoZSBzY2hlZHVsZWQgdGltZSBhbmQgYXJlIG5vdCBzeW5jaHJvbml6ZWRcblx0XHQgKiAgICAgICAgIHRvIHRoZSBhbmltYXRpb24gZnJhbWUgc28gdGhleSBhcmUgbm90IGdvb2QgZm9yIHRyaWdnZXJpbmcgdGlnaHRseVxuXHRcdCAqICAgICAgICAgc3luY2hyb25pemVkIHZpc3VhbHMgYW5kIHNvdW5kLiBUb25lLkRyYXcgbWFrZXMgaXQgZWFzeSB0byBzY2hlZHVsZVxuXHRcdCAqICAgICAgICAgY2FsbGJhY2tzIHVzaW5nIHRoZSBBdWRpb0NvbnRleHQgdGltZSBhbmQgdXNlcyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuXG5cdFx0ICogICAgICAgICBcblx0XHQgKiAgQHNpbmdsZXRvblxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdC8vdXNlIHRoZSB0aW1lIGFyZ3VtZW50IHRvIHNjaGVkdWxlIGEgY2FsbGJhY2sgd2l0aCBUb25lLkRyYXdcblx0XHQgKiBcdFRvbmUuRHJhdy5zY2hlZHVsZShmdW5jdGlvbigpe1xuXHRcdCAqIFx0XHQvL2RvIGRyYXdpbmcgb3IgRE9NIG1hbmlwdWxhdGlvbiBoZXJlXG5cdFx0ICogXHR9LCB0aW1lKVxuXHRcdCAqIH0sIFwiKzAuNVwiKVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EcmF3ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIGV2ZW50cy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGR1cmF0aW9uIGFmdGVyIHdoaWNoIGV2ZW50cyBhcmUgbm90IGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQGRlZmF1bHQgMC4yNVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5leHBpcmF0aW9uID0gMC4yNTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgYmVmb3JlIHRoZSBzY2hlZHVsZWQgdGltZSBcblx0XHRcdCAqICB0aGF0IHRoZSBjYWxsYmFjayBjYW4gYmUgaW52b2tlZC4gRGVmYXVsdCBpc1xuXHRcdFx0ICogIGhhbGYgdGhlIHRpbWUgb2YgYW4gYW5pbWF0aW9uIGZyYW1lICgwLjAwOCBzZWNvbmRzKS5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAZGVmYXVsdCAwLjAwOFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hbnRpY2lwYXRpb24gPSAwLjAwODtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZHJhdyBsb29wXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYm91bmREcmF3TG9vcCA9IHRoaXMuX2RyYXdMb29wLmJpbmQodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5EcmF3KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZSBhIGZ1bmN0aW9uIGF0IHRoZSBnaXZlbiB0aW1lIHRvIGJlIGludm9rZWRcblx0XHQgKiAgb24gdGhlIG5lYXJlc3QgYW5pbWF0aW9uIGZyYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBDYWxsYmFjayBpcyBpbnZva2VkIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICB0aW1lICAgICAgVGhlIHRpbWUgcmVsYXRpdmUgdG8gdGhlIEF1ZGlvQ29udGV4dCB0aW1lXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBpbnZva2UgdGhlIGNhbGxiYWNrLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5EcmF3fSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcblx0ICAgICAgICAgICAgdGltZTogdGhpcy50b1NlY29uZHModGltZSlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBkcmF3IGxvb3Agb24gdGhlIGZpcnN0IGV2ZW50XG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kRHJhd0xvb3ApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGV2ZW50cyBzY2hlZHVsZWQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBhZnRlciAgVGltZSBhZnRlciB3aGljaCBzY2hlZHVsZWQgZXZlbnRzIHdpbGwgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2NoZWR1bGluZyB0aW1lbGluZS5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRHJhd30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdy5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCh0aGlzLnRvU2Vjb25kcyhhZnRlcikpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZHJhdyBsb29wXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcucHJvdG90eXBlLl9kcmF3TG9vcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm93ID0gVG9uZS5ub3coKTtcblx0ICAgICAgICB3aGlsZSAodGhpcy5fZXZlbnRzLmxlbmd0aCAmJiB0aGlzLl9ldmVudHMucGVlaygpLnRpbWUgLSB0aGlzLmFudGljaXBhdGlvbiA8PSBub3cpIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzLnNoaWZ0KCk7XG5cdCAgICAgICAgICAgIGlmIChub3cgLSBldmVudC50aW1lIDw9IHRoaXMuZXhwaXJhdGlvbikge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuY2FsbGJhY2soKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kRHJhd0xvb3ApO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvL21ha2UgYSBzaW5nbGV0b25cblx0ICAgIFRvbmUuRHJhdyA9IG5ldyBUb25lLkRyYXcoKTtcblx0ICAgIHJldHVybiBUb25lLkRyYXc7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQm90aCBUb25lLlBhbm5lcjNEIGFuZCBUb25lLkxpc3RlbmVyIGhhdmUgYSBwb3NpdGlvbiBpbiAzRCBzcGFjZVxuXHRcdCAqICAgICAgICAgIHVzaW5nIGEgcmlnaHQtaGFuZGVkIGNhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbS5cblx0XHQgKiAgICAgICAgICBUaGUgdW5pdHMgdXNlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gYXJlIG5vdCBkZWZpbmVkO1xuXHRcdCAqICAgICAgICAgIHRoZXNlIGNvb3JkaW5hdGVzIGFyZSBpbmRlcGVuZGVudC9pbnZhcmlhbnQgb2YgYW55IHBhcnRpY3VsYXJcblx0XHQgKiAgICAgICAgICB1bml0cyBzdWNoIGFzIG1ldGVycyBvciBmZWV0LiBUb25lLlBhbm5lcjNEIG9iamVjdHMgaGF2ZSBhbiBmb3J3YXJkXG5cdFx0ICogICAgICAgICAgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgZGlyZWN0aW9uIHRoZSBzb3VuZCBpcyBwcm9qZWN0aW5nLiBBZGRpdGlvbmFsbHksXG5cdFx0ICogICAgICAgICAgdGhleSBoYXZlIGEgc291bmQgY29uZSByZXByZXNlbnRpbmcgaG93IGRpcmVjdGlvbmFsIHRoZSBzb3VuZCBpcy5cblx0XHQgKiAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHNvdW5kIGNvdWxkIGJlIG9tbmlkaXJlY3Rpb25hbCwgaW4gd2hpY2ggY2FzZSBpdCB3b3VsZFxuXHRcdCAqICAgICAgICAgIGJlIGhlYXJkIGFueXdoZXJlIHJlZ2FyZGxlc3Mgb2YgaXRzIGZvcndhcmQsIG9yIGl0IGNhbiBiZSBtb3JlIGRpcmVjdGlvbmFsXG5cdFx0ICogICAgICAgICAgYW5kIGhlYXJkIG9ubHkgaWYgaXQgaXMgZmFjaW5nIHRoZSBsaXN0ZW5lci4gVG9uZS5MaXN0ZW5lciBvYmplY3RzXG5cdFx0ICogICAgICAgICAgKHJlcHJlc2VudGluZyBhIHBlcnNvbidzIGVhcnMpIGhhdmUgYW4gZm9yd2FyZCBhbmQgdXAgdmVjdG9yXG5cdFx0ICogICAgICAgICAgcmVwcmVzZW50aW5nIGluIHdoaWNoIGRpcmVjdGlvbiB0aGUgcGVyc29uIGlzIGZhY2luZy4gQmVjYXVzZSBib3RoIHRoZVxuXHRcdCAqICAgICAgICAgIHNvdXJjZSBzdHJlYW0gYW5kIHRoZSBsaXN0ZW5lciBjYW4gYmUgbW92aW5nLCB0aGV5IGJvdGggaGF2ZSBhIHZlbG9jaXR5XG5cdFx0ICogICAgICAgICAgdmVjdG9yIHJlcHJlc2VudGluZyBib3RoIHRoZSBzcGVlZCBhbmQgZGlyZWN0aW9uIG9mIG1vdmVtZW50LiBUYWtlbiB0b2dldGhlcixcblx0XHQgKiAgICAgICAgICB0aGVzZSB0d28gdmVsb2NpdGllcyBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBhIGRvcHBsZXIgc2hpZnQgZWZmZWN0IHdoaWNoIGNoYW5nZXMgdGhlIHBpdGNoLlxuXHRcdCAqICAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgTm90ZTogdGhlIHBvc2l0aW9uIG9mIHRoZSBMaXN0ZW5lciB3aWxsIGhhdmUgbm8gZWZmZWN0IG9uIG5vZGVzIG5vdCBjb25uZWN0ZWQgdG8gYSBUb25lLlBhbm5lcjNEXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkcyB0aGUgY3VycmVudCBmb3J3YXJkIG9yaWVudGF0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBbXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDBcblx0ICAgICAgICBdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBbXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDBcblx0ICAgICAgICBdO1xuXHQgICAgICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIHNldCB0aGUgZGVmYXVsdCBwb3NpdGlvbi9mb3J3YXJkXG5cdCAgICAgICAgICAgIHRoaXMuc2V0KExpc3RlbmVyQ29uc3RydWN0b3IuZGVmYXVsdHMpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5MaXN0ZW5lcik7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHMgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwb3NpdGlvblgnOiAwLFxuXHQgICAgICAgICdwb3NpdGlvblknOiAwLFxuXHQgICAgICAgICdwb3NpdGlvblonOiAwLFxuXHQgICAgICAgICdmb3J3YXJkWCc6IDAsXG5cdCAgICAgICAgJ2ZvcndhcmRZJzogMCxcblx0ICAgICAgICAnZm9yd2FyZFonOiAxLFxuXHQgICAgICAgICd1cFgnOiAwLFxuXHQgICAgICAgICd1cFknOiAxLFxuXHQgICAgICAgICd1cFonOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJhbXAgdGltZSB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBzZXRUYXJnZXRBdFRpbWVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5fcmFtcFRpbWVDb25zdGFudCA9IDAuMDE7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGxpc3RlbmVyIGluIDNkIHNwYWNlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkxpc3RlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblouc2V0VGFyZ2V0QXRUaW1lKHosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnNldFBvc2l0aW9uKHgsIHksIHopO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBsaXN0ZW5lciB1c2luZyB0d28gdmVjdG9ycywgdGhlIGZvcndhcmRcblx0XHQgKiAgdmVjdG9yICh3aGljaCBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIGZhY2luZykgYW5kIHRoZSB1cCB2ZWN0b3Jcblx0XHQgKiAgKHdoaWNoIHRoZSB1cCBkaXJlY3Rpb24gb2YgdGhlIGxpc3RlbmVyKS4gQW4gdXAgdmVjdG9yXG5cdFx0ICogIG9mIDAsIDAsIDEgaXMgZXF1aXZhbGVudCB0byB0aGUgbGlzdGVuZXIgc3RhbmRpbmcgdXAgaW4gdGhlIFogZGlyZWN0aW9uLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB1cFhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdXBZXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHVwWlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkxpc3RlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5zZXRPcmllbnRhdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6LCB1cFgsIHVwWSwgdXBaKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRYLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuZm9yd2FyZFkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnVwWC5zZXRUYXJnZXRBdFRpbWUodXBYLCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIudXBZLnNldFRhcmdldEF0VGltZSh1cFksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci51cFouc2V0VGFyZ2V0QXRUaW1lKHVwWiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuc2V0T3JpZW50YXRpb24oeCwgeSwgeiwgdXBYLCB1cFksIHVwWik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3Bvc2l0aW9uWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMF0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblswXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAncG9zaXRpb25ZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblsxXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzFdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25aXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdwb3NpdGlvblonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzJdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMl07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXJzIGZyb250IGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB3aGljaCB3YXkgdGhleSBhcmUgZmFjaW5nLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgZm9yd2FyZFhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ2ZvcndhcmRYJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVycyBmcm9udCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgd2hpY2ggd2F5IHRoZXkgYXJlIGZhY2luZy5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIGZvcndhcmRZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdmb3J3YXJkWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcnMgZnJvbnQgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHdoaWNoIHdheSB0aGV5IGFyZSBmYWNpbmcuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBmb3J3YXJkWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAnZm9yd2FyZFonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzJdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMl07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXIncyB1cCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgdGhlIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgc3RhbmRpbmcgaW4uXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSB1cFhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3VwWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bM10gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblszXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcidzIHVwIGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB0aGUgZGlyZWN0aW9uIHRoZSBsaXN0ZW5lciBpcyBzdGFuZGluZyBpbi5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHVwWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAndXBZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvbls0XSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzRdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVyJ3MgdXAgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHRoZSBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIHN0YW5kaW5nIGluLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgdXBaXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICd1cFonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzVdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bNV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxpc3RlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy9TSU5HTEVUT04gU0VUVVBcblx0ICAgIHZhciBMaXN0ZW5lckNvbnN0cnVjdG9yID0gVG9uZS5MaXN0ZW5lcjtcblx0ICAgIFRvbmUuTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5MaXN0ZW5lciBpbnN0YW5jZW9mIExpc3RlbmVyQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgLy9hIHNpbmdsZSBsaXN0ZW5lciBvYmplY3Rcblx0ICAgICAgICAgICAgVG9uZS5MaXN0ZW5lciA9IGNvbnRleHQuTGlzdGVuZXI7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9tYWtlIG5ldyBMaXN0ZW5lciBpbnNpZGVzXG5cdCAgICAgICAgICAgIFRvbmUuTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb250ZXh0Lkxpc3RlbmVyID0gVG9uZS5MaXN0ZW5lcjtcblx0ICAgIH0pO1xuXHQgICAgLy9FTkQgU0lOR0xFVE9OIFNFVFVQXG5cdCAgICByZXR1cm4gVG9uZS5MaXN0ZW5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQmVjYXVzZSBvZiBhIGJ1ZyBpbiBpT1MgY2F1c2luZyB0aGUgY3VycmVudFRpbWUgdG8gaW5jcmVtZW50XG5cdFx0ICogYmVmb3JlIHRoZSByZW5kZXJpbmcgaXMgc3RhcnRlZCwgc29tZXRpbWVzIGl0IHRha2VzIG11bHRpcGxlXG5cdFx0ICogYXR0ZW1wdHMgdG8gcmVuZGVyIHRoZSBhdWRpbyBjb3JyZWN0bHkuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIGZ1bmN0aW9uIGF0dGVtcHRSZW5kZXIoY2FsbGJhY2ssIGR1cmF0aW9uLCBzYW1wbGVSYXRlLCB0cmllcykge1xuXHQgICAgICAgIHRyaWVzID0gVG9uZS5kZWZhdWx0QXJnKHRyaWVzLCAwKTtcblx0ICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBUb25lLk9mZmxpbmVDb250ZXh0KDIsIGR1cmF0aW9uLCBzYW1wbGVSYXRlKTtcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgIC8vaW52b2tlIHRoZSBjYWxsYmFjay9zY2hlZHVsaW5nXG5cdCAgICAgICAgdmFyIHJlc3BvbnNlID0gY2FsbGJhY2soVG9uZS5UcmFuc3BvcnQpO1xuXHQgICAgICAgIGlmIChjb250ZXh0LmN1cnJlbnRUaW1lID4gMCAmJiB0cmllcyA8IDEwMDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRSZW5kZXIoY2FsbGJhY2ssIGR1cmF0aW9uLCBzYW1wbGVSYXRlLCArK3RyaWVzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAgICAgJ3Jlc3BvbnNlJzogcmVzcG9uc2UsXG5cdCAgICAgICAgICAgICAgICAnY29udGV4dCc6IGNvbnRleHRcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdCAgICAvKipcblx0XHQgKiAgR2VuZXJhdGUgYSBidWZmZXIgYnkgcmVuZGVyaW5nIGFsbCBvZiB0aGUgVG9uZS5qcyBjb2RlIHdpdGhpbiB0aGUgY2FsbGJhY2sgdXNpbmcgdGhlIE9mZmxpbmVBdWRpb0NvbnRleHQuXG5cdFx0ICogIFRoZSBPZmZsaW5lQXVkaW9Db250ZXh0IGlzIGNhcGFibGUgb2YgcmVuZGVyaW5nIG11Y2ggZmFzdGVyIHRoYW4gcmVhbCB0aW1lIGluIG1hbnkgY2FzZXMuXG5cdFx0ICogIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBhbHNvIHBhc3NlcyBpbiBhbiBvZmZsaW5lIGluc3RhbmNlIG9mIFRvbmUuVHJhbnNwb3J0IHdoaWNoIGNhbiBiZSB1c2VkXG5cdFx0ICogIHRvIHNjaGVkdWxlIGV2ZW50cyBhbG9uZyB0aGUgVHJhbnNwb3J0LiAqKk5PVEUqKiBPZmZsaW5lQXVkaW9Db250ZXh0IGhhcyB0aGUgc2FtZSByZXN0cmljdGlvbnNcblx0XHQgKiAgYXMgdGhlIEF1ZGlvQ29udGV4dCBpbiB0aGF0IG9uIGNlcnRhaW4gcGxhdGZvcm1zIChsaWtlIGlPUykgaXQgbXVzdCBiZSBpbnZva2VkIGJ5IGFuIGV4cGxpY2l0XG5cdFx0ICogIHVzZXIgYWN0aW9uIGxpa2UgYSBjbGljayBvciB0YXAuIFxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBBbGwgVG9uZS5qcyBub2RlcyB3aGljaCBhcmUgY3JlYXRlZCBhbmQgc2NoZWR1bGVkIHdpdGhpbiB0aGlzIGNhbGxiYWNrIGFyZSByZWNvcmRlZCBpbnRvIHRoZSBvdXRwdXQgQnVmZmVyLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgZHVyYXRpb24gICAgIHRoZSBhbW91bnQgb2YgdGltZSB0byByZWNvcmQgZm9yLlxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX0gIFRoZSBwcm9taXNlIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgVG9uZS5CdWZmZXIgb2YgdGhlIHJlY29yZGVkIG91dHB1dC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JlbmRlciAyIHNlY29uZHMgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiBUb25lLk9mZmxpbmUoZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vb25seSBub2RlcyBjcmVhdGVkIGluIHRoaXMgY2FsbGJhY2sgd2lsbCBiZSByZWNvcmRlZFxuXHRcdCAqIFx0dmFyIG9zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkudG9NYXN0ZXIoKS5zdGFydCgwKVxuXHRcdCAqIFx0Ly9zY2hlZHVsZSB0aGVpciBldmVudHNcblx0XHQgKiB9LCAyKS50aGVuKGZ1bmN0aW9uKGJ1ZmZlcil7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSBvdXRwdXQgYnVmZmVyXG5cdFx0ICogfSlcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIGFsc28gc2NoZWR1bGUgZXZlbnRzIGFsb25nIHRoZSBUcmFuc3BvcnRcblx0XHQgKiAvL3VzaW5nIHRoZSBwYXNzZWQgaW4gT2ZmbGluZSBUcmFuc3BvcnRcblx0XHQgKiBUb25lLk9mZmxpbmUoZnVuY3Rpb24oVHJhbnNwb3J0KXtcblx0XHQgKiBcdHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkudG9NYXN0ZXIoKVxuXHRcdCAqIFx0VHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0XHRvc2Muc3RhcnQodGltZSkuc3RvcCh0aW1lICsgMC4xKVxuXHRcdCAqIFx0fSwgMSlcblx0XHQgKiBcdFRyYW5zcG9ydC5zdGFydCgwLjIpXG5cdFx0ICogfSwgNCkudGhlbihmdW5jdGlvbihidWZmZXIpe1xuXHRcdCAqIFx0Ly9kbyBzb21ldGhpbmcgd2l0aCB0aGUgb3V0cHV0IGJ1ZmZlclxuXHRcdCAqIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgLy9zZXQgdGhlIE9mZmxpbmVBdWRpb0NvbnRleHRcblx0ICAgICAgICB2YXIgc2FtcGxlUmF0ZSA9IFRvbmUuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgIHZhciBvcmlnaW5hbENvbnRleHQgPSBUb25lLmNvbnRleHQ7XG5cdCAgICAgICAgdmFyIHJlbmRlclJldCA9IGF0dGVtcHRSZW5kZXIoY2FsbGJhY2ssIGR1cmF0aW9uLCBzYW1wbGVSYXRlKTtcblx0ICAgICAgICB2YXIgcmVzcG9uc2UgPSByZW5kZXJSZXQucmVzcG9uc2U7XG5cdCAgICAgICAgdmFyIGNvbnRleHQgPSByZW5kZXJSZXQuY29udGV4dDtcblx0ICAgICAgICB2YXIgcmV0O1xuXHQgICAgICAgIGlmIChyZXNwb25zZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0ICAgICAgICAgICAgLy93YWl0IGZvciB0aGUgcHJvbWlzZSB0byByZXNvbHZlXG5cdCAgICAgICAgICAgIHJldCA9IHJlc3BvbnNlLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgLy90aGVuIHJlbmRlciB0aGUgYXVkaW9cblx0ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnJlbmRlcigpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL3Byb2Nlc3MgdGhlIGF1ZGlvXG5cdCAgICAgICAgICAgIHJldCA9IGNvbnRleHQucmVuZGVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vcmV0dXJuIHRoZSBvcmlnaW5hbCBBdWRpb0NvbnRleHRcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBvcmlnaW5hbENvbnRleHQ7XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIGF1ZGlvXG5cdCAgICAgICAgcmV0dXJuIHJldC50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgLy93cmFwIGl0IGluIGEgVG9uZS5CdWZmZXJcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLkJ1ZmZlcihidWZmZXIpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9mZmxpbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogXHRAY2xhc3MgIFRvbmUuRWZmZWN0IGlzIHRoZSBiYXNlIGNsYXNzIGZvciBlZmZlY3RzLiBDb25uZWN0IHRoZSBlZmZlY3QgYmV0d2VlblxuXHRcdCAqIFx0ICAgICAgICB0aGUgZWZmZWN0U2VuZCBhbmQgZWZmZWN0UmV0dXJuIEdhaW5Ob2RlcywgdGhlbiBjb250cm9sIHRoZSBhbW91bnQgb2Zcblx0XHQgKiBcdCAgICAgICAgZWZmZWN0IHdoaWNoIGdvZXMgdG8gdGhlIG91dHB1dCB1c2luZyB0aGUgd2V0IGNvbnRyb2wuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFt3ZXRdIFRoZSBzdGFydGluZyB3ZXQgdmFsdWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkVmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3dldCddLCBUb25lLkVmZmVjdCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRyeXdldCBrbm9iIHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Dcm9zc0ZhZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG5ldyBUb25lLkNyb3NzRmFkZShvcHRpb25zLndldCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdldCBjb250cm9sIGlzIGhvdyBtdWNoIG9mIHRoZSBlZmZlY3RlZFxuXHRcdFx0ICogIHdpbGwgcGFzcyB0aHJvdWdoIHRvIHRoZSBvdXRwdXQuIDEgPSAxMDAlIGVmZmVjdGVkXG5cdFx0XHQgKiAgc2lnbmFsLCAwID0gMTAwJSBkcnkgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndldCA9IHRoaXMuX2RyeVdldC5mYWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbm5lY3QgdGhlIGVmZmVjdFNlbmQgdG8gdGhlIGlucHV0IG9mIGh0ZSBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29ubmVjdCB0aGUgb3V0cHV0IG9mIHRoZSBlZmZlY3QgdG8gdGhlIGVmZmVjdFJldHVyblxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fZHJ5V2V0LmEpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLmVmZmVjdFNlbmQpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuLmNvbm5lY3QodGhpcy5fZHJ5V2V0LmIpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3dldCddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVmZmVjdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0LmRlZmF1bHRzID0geyAnd2V0JzogMSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYWlucyB0aGUgZWZmZWN0IGluIGJldHdlZW4gdGhlIGVmZmVjdFNlbmQgYW5kIGVmZmVjdFJldHVyblxuXHRcdCAqICBAcGFyYW0gIHtUb25lfSBlZmZlY3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuY29ubmVjdEVmZmVjdCA9IGZ1bmN0aW9uIChlZmZlY3QpIHtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4oZWZmZWN0LCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnd2V0J10pO1xuXHQgICAgICAgIHRoaXMud2V0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkF1dG9GaWx0ZXIgaXMgYSBUb25lLkZpbHRlciB3aXRoIGEgVG9uZS5MRk8gY29ubmVjdGVkIHRvIHRoZSBmaWx0ZXIgY3V0b2ZmIGZyZXF1ZW5jeS5cblx0XHQgKiAgICAgICAgIFNldHRpbmcgdGhlIExGTyByYXRlIGFuZCBkZXB0aCBhbGxvd3MgZm9yIGNvbnRyb2wgb3ZlciB0aGUgZmlsdGVyIG1vZHVsYXRpb24gcmF0ZSBcblx0XHQgKiAgICAgICAgIGFuZCBkZXB0aC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgcmF0ZSBvZiB0aGUgTEZPLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeT19IGJhc2VGcmVxdWVuY3kgVGhlIGxvd2VyIHZhbHVlIG9mIHRoZSBMRk9zIG9zY2lsbGF0aW9uXG5cdCBcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeT19IG9jdGF2ZXMgVGhlIG51bWJlciBvZiBvY3RhdmVzIGFib3ZlIHRoZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jcmVhdGUgYW4gYXV0b2ZpbHRlciBhbmQgc3RhcnQgaXQncyBMRk9cblx0XHQgKiB2YXIgYXV0b0ZpbHRlciA9IG5ldyBUb25lLkF1dG9GaWx0ZXIoXCI0blwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICogLy9yb3V0ZSBhbiBvc2NpbGxhdG9yIHRocm91Z2ggdGhlIGZpbHRlciBhbmQgc3RhcnQgaXRcblx0XHQgKiB2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KGF1dG9GaWx0ZXIpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnb2N0YXZlcydcblx0ICAgICAgICBdLCBUb25lLkF1dG9GaWx0ZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBkcml2ZXMgdGhlIGZpbHRlciBjdXRvZmZcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZSc6IG9wdGlvbnMuZGVwdGhcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSByYW5nZSBvZiB0aGUgZmlsdGVyIG1vZHVsYXRpbmcgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggZnJlcXVlbmN5LiBcblx0XHRcdCAqIDAgPSBubyBtb2R1bGF0aW9uLiAxID0gZnVsbCBtb2R1bGF0aW9uLlxuXHRcdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2xmby5hbXBsaXR1ZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBIb3cgZmFzdCB0aGUgZmlsdGVyIG1vZHVsYXRlcyBiZXR3ZWVuIG1pbiBhbmQgbWF4LiBcblx0XHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmby5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpbHRlciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIob3B0aW9ucy5maWx0ZXIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvY3RhdmVzIHBsYWNlaG9sZGVyXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gMDtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuZmlsdGVyKTtcblx0ICAgICAgICB0aGlzLl9sZm8uY29ubmVjdCh0aGlzLmZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIHRoaXMuYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgIH07XG5cdCAgICAvL2V4dGVuZCBFZmZlY3Rcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXV0b0ZpbHRlciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHRzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMSxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZGVwdGgnOiAxLFxuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogMi42LFxuXHQgICAgICAgICdmaWx0ZXInOiB7XG5cdCAgICAgICAgICAgICd0eXBlJzogJ2xvd3Bhc3MnLFxuXHQgICAgICAgICAgICAncm9sbG9mZic6IC0xMixcblx0ICAgICAgICAgICAgJ1EnOiAxXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0YXJ0IHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0YXJ0LiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCB0aGUgZWZmZWN0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBMRk8gd2lsbCBzdG9wLiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGZpbHRlciB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW2RlbGF5PTBdIERlbGF5IHRpbWUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBlZmZlY3QgYWZ0ZXIgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IGhhcyBzdGFydGVkLiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoZGVsYXkpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3luYyhkZWxheSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVW5zeW5jIHRoZSBmaWx0ZXIgZnJvbSB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2xmby51bnN5bmMoKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUeXBlIG9mIG9zY2lsbGF0b3IgYXR0YWNoZWQgdG8gdGhlIEF1dG9GaWx0ZXIuIFxuXHRcdCAqIFBvc3NpYmxlIHZhbHVlczogXCJzaW5lXCIsIFwic3F1YXJlXCIsIFwidHJpYW5nbGVcIiwgXCJzYXd0b290aFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9GaWx0ZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIGZpbHRlcidzIGN1dG9mZiBmcmVxdWVuY3kuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLm1pbiA9IHRoaXMudG9GcmVxdWVuY3koZnJlcSk7XG5cdCAgICAgICAgICAgIC8vYW5kIHNldCB0aGUgbWF4XG5cdCAgICAgICAgICAgIHRoaXMub2N0YXZlcyA9IHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgZmlsdGVyJ3MgY3V0b2ZmIGZyZXF1ZW5jeS4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0O1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8ubWF4ID0gdGhpcy5iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgb2N0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xmby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZpbHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXV0b0ZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQXV0b1Bhbm5lciBpcyBhIFRvbmUuUGFubmVyIHdpdGggYW4gTEZPIGNvbm5lY3RlZCB0byB0aGUgcGFuIGFtb3VudC4gXG5cdFx0ICogICAgICAgICBNb3JlIG9uIHVzaW5nIGF1dG9wYW5uZXJzIFtoZXJlXShodHRwczovL3d3dy5hYmxldG9uLmNvbS9lbi9ibG9nL2F1dG9wYW4tY2hvcHBlci1lZmZlY3QtYW5kLW1vcmUtbGl2ZXNjaG9vbC8pLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gUmF0ZSBvZiBsZWZ0LXJpZ2h0IG9zY2lsbGF0aW9uLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhbiBhdXRvcGFubmVyIGFuZCBzdGFydCBpdCdzIExGT1xuXHRcdCAqIHZhciBhdXRvUGFubmVyID0gbmV3IFRvbmUuQXV0b1Bhbm5lcihcIjRuXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKiAvL3JvdXRlIGFuIG9zY2lsbGF0b3IgdGhyb3VnaCB0aGUgcGFubmVyIGFuZCBzdGFydCBpdFxuXHRcdCAqIHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QoYXV0b1Bhbm5lcikuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZyZXF1ZW5jeSddLCBUb25lLkF1dG9QYW5uZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBkcml2ZXMgdGhlIHBhbm5pbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZSc6IG9wdGlvbnMuZGVwdGgsXG5cdCAgICAgICAgICAgICdtaW4nOiAtMSxcblx0ICAgICAgICAgICAgJ21heCc6IDFcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbW91bnQgb2YgcGFubmluZyBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0LiBcblx0XHRcdCAqIDAgPSBhbHdheXMgY2VudGVyLiAxID0gZnVsbCByYW5nZSBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0LiBcblx0XHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9sZm8uYW1wbGl0dWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwYW5uZXIgbm9kZSB3aGljaCBkb2VzIHRoZSBwYW5uaW5nXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUGFubmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBuZXcgVG9uZS5QYW5uZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEhvdyBmYXN0IHRoZSBwYW5uZXIgbW9kdWxhdGVzIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQuIFxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX3Bhbm5lcik7XG5cdCAgICAgICAgdGhpcy5fbGZvLmNvbm5lY3QodGhpcy5fcGFubmVyLnBhbik7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2RlcHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICAvL2V4dGVuZCBFZmZlY3Rcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXV0b1Bhbm5lciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHRzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMSxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZGVwdGgnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RhcnQgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RhcnQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0b3AuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgcGFubmVyIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbZGVsYXk9MF0gRGVsYXkgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIGVmZmVjdCBhZnRlciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgaGFzIHN0YXJ0ZWQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uIChkZWxheSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zeW5jKGRlbGF5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIHBhbm5lciBmcm9tIHRoZSB0cmFuc3BvcnRcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9sZm8udW5zeW5jKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVHlwZSBvZiBvc2NpbGxhdG9yIGF0dGFjaGVkIHRvIHRoZSBBdXRvRmlsdGVyLiBcblx0XHQgKiBQb3NzaWJsZSB2YWx1ZXM6IFwic2luZVwiLCBcInNxdWFyZVwiLCBcInRyaWFuZ2xlXCIsIFwic2F3dG9vdGhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9sZm8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2RlcHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXV0b1Bhbm5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkF1dG9XYWggY29ubmVjdHMgYSBUb25lLkZvbGxvd2VyIHRvIGEgYmFuZHBhc3MgZmlsdGVyIChUb25lLkZpbHRlcikuXG5cdFx0ICogICAgICAgICAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVyIGlzIGFkanVzdGVkIHByb3BvcnRpb25hbGx5IHRvIHRoZVxuXHRcdCAqICAgICAgICAgIGluY29taW5nIHNpZ25hbCdzIGFtcGxpdHVkZS4gSW5zcGlyYXRpb24gZnJvbSBbVHVuYS5qc10oaHR0cHM6Ly9naXRodWIuY29tL0RpbmFobW9lL3R1bmEpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2Jhc2VGcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgdGhlIGZpbHRlciBpcyBzZXRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYXQgdGhlIGxvdyBwb2ludCBvZiB0aGUgd2FoXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IFtvY3RhdmVzXSBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIGJhc2VGcmVxdWVuY3lcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbHRlciB3aWxsIHN3ZWVwIHRvIHdoZW4gZnVsbHkgb3BlblxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbc2Vuc2l0aXZpdHldIFRoZSBkZWNpYmVsIHRocmVzaG9sZCBzZW5zaXRpdml0eSBmb3Jcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluY29taW5nIHNpZ25hbC4gTm9ybWFsIHJhbmdlIG9mIC00MCB0byAwLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBhdXRvV2FoID0gbmV3IFRvbmUuQXV0b1dhaCg1MCwgNiwgLTMwKS50b01hc3RlcigpO1xuXHRcdCAqIC8vaW5pdGlhbGl6ZSB0aGUgc3ludGggYW5kIGNvbm5lY3QgdG8gYXV0b3dhaFxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBTeW50aC5jb25uZWN0KGF1dG9XYWgpO1xuXHRcdCAqIC8vUSB2YWx1ZSBpbmZsdWVuY2VzIHRoZSBlZmZlY3Qgb2YgdGhlIHdhaCAtIGRlZmF1bHQgaXMgMlxuXHRcdCAqIGF1dG9XYWguUS52YWx1ZSA9IDY7XG5cdFx0ICogLy9tb3JlIGF1ZGlibGUgb24gaGlnaGVyIG5vdGVzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWggPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJyxcblx0ICAgICAgICAgICAgJ3NlbnNpdGl2aXR5J1xuXHQgICAgICAgIF0sIFRvbmUuQXV0b1dhaCk7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZW52ZWxvcGUgZm9sbG93ZXIuIFNldCB0aGUgYXR0YWNrL3JlbGVhc2Vcblx0XHRcdCAqICB0aW1pbmcgdG8gYWRqdXN0IGhvdyB0aGUgZW52ZWxvcGUgaXMgZm9sbG93ZWQuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRm9sbG93ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZm9sbG93ZXIgPSBuZXcgVG9uZS5Gb2xsb3dlcihvcHRpb25zLmZvbGxvd2VyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZXMgdGhlIGZvbGxvd2VyIHZhbHVlIHRvIHRoZSBmcmVxdWVuY3kgZG9tYWluXG5cdFx0XHQgKiAgQHR5cGUge1RvbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UgPSBuZXcgVG9uZS5TY2FsZUV4cCgwLCAxLCAwLjUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXQgZ2FpbiB0byBhZGp1c3QgdGhlIHNlbnNpdGl2aXR5XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5wdXRCb29zdCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7QmlxdWFkRmlsdGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmFuZHBhc3MgPSBuZXcgVG9uZS5GaWx0ZXIoe1xuXHQgICAgICAgICAgICAncm9sbG9mZic6IC00OCxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IDAsXG5cdCAgICAgICAgICAgICdRJzogb3B0aW9ucy5RXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wZWFraW5nID0gbmV3IFRvbmUuRmlsdGVyKDAsICdwZWFraW5nJyk7XG5cdCAgICAgICAgdGhpcy5fcGVha2luZy5nYWluLnZhbHVlID0gb3B0aW9ucy5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gb2YgdGhlIGZpbHRlci5cblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmdhaW4gPSB0aGlzLl9wZWFraW5nLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcXVhbGl0eSBvZiB0aGUgZmlsdGVyLlxuXHRcdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gdGhpcy5fYmFuZHBhc3MuUTtcblx0ICAgICAgICAvL3RoZSBjb250cm9sIHNpZ25hbCBwYXRoXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNoYWluKHRoaXMuX2lucHV0Qm9vc3QsIHRoaXMuZm9sbG93ZXIsIHRoaXMuX3N3ZWVwUmFuZ2UpO1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UuY29ubmVjdCh0aGlzLl9iYW5kcGFzcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UuY29ubmVjdCh0aGlzLl9wZWFraW5nLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy90aGUgZmlsdGVyZWQgcGF0aFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbih0aGlzLl9iYW5kcGFzcywgdGhpcy5fcGVha2luZywgdGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlXG5cdCAgICAgICAgdGhpcy5fc2V0U3dlZXBSYW5nZSgpO1xuXHQgICAgICAgIHRoaXMuc2Vuc2l0aXZpdHkgPSBvcHRpb25zLnNlbnNpdGl2aXR5O1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1dG9XYWgsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAxMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiA2LFxuXHQgICAgICAgICdzZW5zaXRpdml0eSc6IDAsXG5cdCAgICAgICAgJ1EnOiAyLFxuXHQgICAgICAgICdnYWluJzogMixcblx0ICAgICAgICAnZm9sbG93ZXInOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjMsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyB0aGF0IHRoZSBmaWx0ZXIgd2lsbCBzd2VlcCBhYm92ZSB0aGVcblx0XHQgKiBiYXNlRnJlcXVlbmN5LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9XYWgjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvV2FoLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0YXZlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0YXZlcztcblx0ICAgICAgICAgICAgdGhpcy5fc2V0U3dlZXBSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGJhc2UgZnJlcXVlbmN5IGZyb20gd2hpY2ggdGhlIHN3ZWVwIHdpbGwgc3RhcnQgZnJvbS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvV2FoI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQG5hbWUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b1dhaC5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJhc2VGcmVxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBiYXNlRnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0U3dlZXBSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNlbnNpdGl2aXR5IHRvIGNvbnRyb2wgaG93IHJlc3BvbnNpdmUgdG8gdGhlIGlucHV0IHNpZ25hbCB0aGUgZmlsdGVyIGlzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9XYWgjXG5cdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdCAqIEBuYW1lIHNlbnNpdGl2aXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvV2FoLnByb3RvdHlwZSwgJ3NlbnNpdGl2aXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5nYWluVG9EYigxIC8gdGhpcy5faW5wdXRCb29zdC5nYWluLnZhbHVlKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNlbnNpdGl2eSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pbnB1dEJvb3N0LmdhaW4udmFsdWUgPSAxIC8gVG9uZS5kYlRvR2FpbihzZW5zaXRpdnkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIHNldHMgdGhlIHN3ZWVwIHJhbmdlIG9mIHRoZSBzY2FsZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaC5wcm90b3R5cGUuX3NldFN3ZWVwUmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5taW4gPSB0aGlzLl9iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UubWF4ID0gTWF0aC5taW4odGhpcy5fYmFzZUZyZXF1ZW5jeSAqIE1hdGgucG93KDIsIHRoaXMuX29jdGF2ZXMpLCB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSAvIDIpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXV0b1dhaH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvV2FoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5mb2xsb3dlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mb2xsb3dlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYmFuZHBhc3MuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2JhbmRwYXNzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wZWFraW5nLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wZWFraW5nID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9pbnB1dEJvb3N0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9pbnB1dEJvb3N0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5nYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkF1dG9XYWg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTaWduYWwtcmF0ZSBtb2R1bG8gb3BlcmF0b3IuIE9ubHkgd29ya3MgaW4gQXVkaW9SYW5nZSBbLTEsIDFdIGFuZCBmb3IgbW9kdWx1c1xuXHRcdCAqICAgICAgICAgdmFsdWVzIGluIHRoZSBOb3JtYWxSYW5nZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gbW9kdWx1cyBUaGUgbW9kdWx1cyB0byBhcHBseS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbW9kID0gbmV3IFRvbmUuTW9kdWxvKDAuMilcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDAuNSkuY29ubmVjdChtb2QpO1xuXHRcdCAqIC8vbW9kIG91dHB1dHMgMC4xXG5cdFx0ICovXG5cdCAgICBUb25lLk1vZHVsbyA9IGZ1bmN0aW9uIChtb2R1bHVzKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgd2F2ZXNoYXBlciBnZXRzIHRoZSBpbnRlZ2VyIG11bHRpcGxlIG9mXG5cdFx0XHQgKiAgdGhlIGlucHV0IHNpZ25hbCBhbmQgdGhlIG1vZHVsdXMuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihNYXRoLnBvdygyLCAxNikpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnRlZ2VyIG11bHRpcGxlIGlzIG11bHRpcGxpZWQgYnkgdGhlIG1vZHVsdXNcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhbmQgc3VidHJhY3RlZCBmcm9tIHRoZSBpbnB1dCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtb2R1bHVzIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZFNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbChtb2R1bHVzKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5mYW4odGhpcy5fc2hhcGVyLCB0aGlzLl9zdWJ0cmFjdCk7XG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsLmNvbm5lY3QodGhpcy5fbXVsdGlwbHksIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5jb25uZWN0KHRoaXMuX211bHRpcGx5LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseS5jb25uZWN0KHRoaXMuX3N1YnRyYWN0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9zZXRXYXZlU2hhcGVyKG1vZHVsdXMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9kdWxvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gIG1vZCAgdGhlIG1vZHVsdXMgdG8gYXBwbHlcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9kdWxvLnByb3RvdHlwZS5fc2V0V2F2ZVNoYXBlciA9IGZ1bmN0aW9uIChtb2QpIHtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuc2V0TWFwKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdmFyIG11bHRpcGxlID0gTWF0aC5mbG9vcigodmFsICsgMC4wMDAxKSAvIG1vZCk7XG5cdCAgICAgICAgICAgIHJldHVybiBtdWx0aXBsZTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbW9kdWx1cyB2YWx1ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Nb2R1bG8jXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Nb2R1bG8ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2RTaWduYWwudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtb2QpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kU2lnbmFsLnZhbHVlID0gbW9kO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRXYXZlU2hhcGVyKG1vZCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb2R1bG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9kdWxvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vZHVsbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQml0Y3J1c2hlciBkb3duc2FtcGxlcyB0aGUgaW5jb21pbmcgc2lnbmFsIHRvIGEgZGlmZmVyZW50IGJpdGRlcHRoLlxuXHRcdCAqICAgICAgICAgTG93ZXJpbmcgdGhlIGJpdGRlcHRoIG9mIHRoZSBzaWduYWwgY3JlYXRlcyBkaXN0b3J0aW9uLiBSZWFkIG1vcmUgYWJvdXQgQml0Y3J1c2hpbmdcblx0XHQgKiAgICAgICAgIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpdGNydXNoZXIpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiaXRzIFRoZSBudW1iZXIgb2YgYml0cyB0byBkb3duc2FtcGxlIHRoZSBzaWduYWwuIE5vbWluYWwgcmFuZ2Vcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgb2YgMSB0byA4LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaW5pdGlhbGl6ZSBjcnVzaGVyIGFuZCByb3V0ZSBhIHN5bnRoIHRocm91Z2ggaXRcblx0XHQgKiB2YXIgY3J1c2hlciA9IG5ldyBUb25lLkJpdENydXNoZXIoNCkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5Nb25vU3ludGgoKS5jb25uZWN0KGNydXNoZXIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CaXRDcnVzaGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnYml0cyddLCBUb25lLkJpdENydXNoZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgdmFyIGludlN0ZXBTaXplID0gMSAvIE1hdGgucG93KDIsIG9wdGlvbnMuYml0cyAtIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFN1YnRyYWN0IHRoZSBpbnB1dCBzaWduYWwgYW5kIHRoZSBtb2R1bHVzIG9mIHRoZSBpbnB1dCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2QgZnVuY3Rpb25cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTW9kdWxvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bG8gPSBuZXcgVG9uZS5Nb2R1bG8oaW52U3RlcFNpemUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGtlZXBzIHRyYWNrIG9mIHRoZSBiaXRzXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYml0cyA9IG9wdGlvbnMuYml0cztcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuZmFuKHRoaXMuX3N1YnRyYWN0LCB0aGlzLl9tb2R1bG8pO1xuXHQgICAgICAgIHRoaXMuX21vZHVsby5jb25uZWN0KHRoaXMuX3N1YnRyYWN0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdC5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJpdENydXNoZXIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CaXRDcnVzaGVyLmRlZmF1bHRzID0geyAnYml0cyc6IDQgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBiaXQgZGVwdGggb2YgdGhlIGVmZmVjdC4gTm9taW5hbCByYW5nZSBvZiAxLTguXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQml0Q3J1c2hlciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGJpdHNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJpdENydXNoZXIucHJvdG90eXBlLCAnYml0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JpdHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChiaXRzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2JpdHMgPSBiaXRzO1xuXHQgICAgICAgICAgICB2YXIgaW52U3RlcFNpemUgPSAxIC8gTWF0aC5wb3coMiwgYml0cyAtIDEpO1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bG8udmFsdWUgPSBpbnZTdGVwU2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQml0Q3J1c2hlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CaXRDcnVzaGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bG8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsbyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQml0Q3J1c2hlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ2hlYnlTaGV2IGlzIGEgQ2hlYnlzaGV2IHdhdmVzaGFwZXIsIGFuIGVmZmVjdCB3aGljaCBpcyBnb29kIFxuXHRcdCAqICAgICAgICAgZm9yIG1ha2luZyBkaWZmZXJlbnQgdHlwZXMgb2YgZGlzdG9ydGlvbiBzb3VuZHMuXG5cdFx0ICogICAgICAgICBOb3RlIHRoYXQgb2RkIG9yZGVycyBzb3VuZCB2ZXJ5IGRpZmZlcmVudCBmcm9tIGV2ZW4gb25lcywgXG5cdFx0ICogICAgICAgICBhbmQgb3JkZXIgPSAxIGlzIG5vIGNoYW5nZS4gXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgYXQgW211c2ljLmNvbHVtYmlhLmVkdV0oaHR0cDovL211c2ljLmNvbHVtYmlhLmVkdS9jbWMvbXVzaWNhbmRjb21wdXRlcnMvY2hhcHRlcjQvMDRfMDYucGhwKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfE9iamVjdH0gW29yZGVyXSBUaGUgb3JkZXIgb2YgdGhlIGNoZWJ5c2hldiBwb2x5bm9taWFsLiBOb3JtYWwgcmFuZ2UgYmV0d2VlbiAxLTEwMC4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jcmVhdGUgYSBuZXcgY2hlYnlcblx0XHQgKiB2YXIgY2hlYnkgPSBuZXcgVG9uZS5DaGVieXNoZXYoNTApO1xuXHRcdCAqIC8vY3JlYXRlIGEgbW9ub3N5bnRoIGNvbm5lY3RlZCB0byBvdXIgY2hlYnlcblx0XHQgKiBzeW50aCA9IG5ldyBUb25lLk1vbm9TeW50aCgpLmNvbm5lY3QoY2hlYnkpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydvcmRlciddLCBUb25lLkNoZWJ5c2hldik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoNDA5Nik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBob2xkcyBvbnRvIHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29yZGVyID0gb3B0aW9ucy5vcmRlcjtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fc2hhcGVyKTtcblx0ICAgICAgICB0aGlzLm9yZGVyID0gb3B0aW9ucy5vcmRlcjtcblx0ICAgICAgICB0aGlzLm92ZXJzYW1wbGUgPSBvcHRpb25zLm92ZXJzYW1wbGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DaGVieXNoZXYsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29yZGVyJzogMSxcblx0ICAgICAgICAnb3ZlcnNhbXBsZSc6ICdub25lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBnZXQgdGhlIGNvZWZmaWNpZW50IGZvciB0aGF0IGRlZ3JlZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0geCB0aGUgeCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gICB7bnVtYmVyfSBkZWdyZWUgXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBtZW1vIG1lbW9pemUgdGhlIGNvbXB1dGVkIHZhbHVlLiBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBzcGVlZHMgdXAgY29tcHV0YXRpb24gZ3JlYXRseS4gXG5cdFx0ICogIEByZXR1cm4gIHtudW1iZXJ9ICAgICAgIHRoZSBjb2VmZmljaWVudCBcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZS5fZ2V0Q29lZmZpY2llbnQgPSBmdW5jdGlvbiAoeCwgZGVncmVlLCBtZW1vKSB7XG5cdCAgICAgICAgaWYgKG1lbW8uaGFzT3duUHJvcGVydHkoZGVncmVlKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbWVtb1tkZWdyZWVdO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoZGVncmVlID09PSAwKSB7XG5cdCAgICAgICAgICAgIG1lbW9bZGVncmVlXSA9IDA7XG5cdCAgICAgICAgfSBlbHNlIGlmIChkZWdyZWUgPT09IDEpIHtcblx0ICAgICAgICAgICAgbWVtb1tkZWdyZWVdID0geDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBtZW1vW2RlZ3JlZV0gPSAyICogeCAqIHRoaXMuX2dldENvZWZmaWNpZW50KHgsIGRlZ3JlZSAtIDEsIG1lbW8pIC0gdGhpcy5fZ2V0Q29lZmZpY2llbnQoeCwgZGVncmVlIC0gMiwgbWVtbyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBtZW1vW2RlZ3JlZV07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG9yZGVyIG9mIHRoZSBDaGVieXNoZXYgcG9seW5vbWlhbCB3aGljaCBjcmVhdGVzXG5cdFx0ICogdGhlIGVxdWF0aW9uIHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIGluY29taW5nIFxuXHRcdCAqIHNpZ25hbCB0aHJvdWdoIGEgVG9uZS5XYXZlU2hhcGVyLiBUaGUgZXF1YXRpb25zXG5cdFx0ICogYXJlIGluIHRoZSBmb3JtOjxicj5cblx0XHQgKiBvcmRlciAyOiAyeF4yICsgMTxicj5cblx0XHQgKiBvcmRlciAzOiA0eF4zICsgM3ggPGJyPlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNoZWJ5c2hldiNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb3JkZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNoZWJ5c2hldi5wcm90b3R5cGUsICdvcmRlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yZGVyO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3JkZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JkZXIgPSBvcmRlcjtcblx0ICAgICAgICAgICAgdmFyIGN1cnZlID0gbmV3IEFycmF5KDQwOTYpO1xuXHQgICAgICAgICAgICB2YXIgbGVuID0gY3VydmUubGVuZ3RoO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgeCA9IGkgKiAyIC8gbGVuIC0gMTtcblx0ICAgICAgICAgICAgICAgIGlmICh4ID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9zaG91bGQgb3V0cHV0IDAgd2hlbiBpbnB1dCBpcyAwXG5cdCAgICAgICAgICAgICAgICAgICAgY3VydmVbaV0gPSAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBjdXJ2ZVtpXSA9IHRoaXMuX2dldENvZWZmaWNpZW50KHgsIG9yZGVyLCB7fSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLmN1cnZlID0gY3VydmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3ZlcnNhbXBsaW5nIG9mIHRoZSBlZmZlY3QuIENhbiBlaXRoZXIgYmUgXCJub25lXCIsIFwiMnhcIiBvciBcIjR4XCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hlYnlzaGV2I1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgb3ZlcnNhbXBsZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZSwgJ292ZXJzYW1wbGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG92ZXJzYW1wbGluZykge1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZSA9IG92ZXJzYW1wbGluZztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNoZWJ5c2hldn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ2hlYnlzaGV2O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQmFzZSBjbGFzcyBmb3IgU3RlcmVvIGVmZmVjdHMuIFByb3ZpZGVzIGVmZmVjdFNlbmRML1IgYW5kIGVmZmVjdFJldHVybkwvUi5cblx0XHQgKlxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9FZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3dldCddLCBUb25lLkVmZmVjdCk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkcnl3ZXQga25vYiB0byBjb250cm9sIHRoZSBhbW91bnQgb2YgZWZmZWN0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3Jvc3NGYWRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBuZXcgVG9uZS5Dcm9zc0ZhZGUob3B0aW9ucy53ZXQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3ZXQgY29udHJvbCwgaS5lLiBob3cgbXVjaCBvZiB0aGUgZWZmZWN0ZWRcblx0XHRcdCAqICB3aWxsIHBhc3MgdGhyb3VnaCB0byB0aGUgb3V0cHV0LlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndldCA9IHRoaXMuX2RyeVdldC5mYWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZW4gc3BsaXQgaXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBlZmZlY3RzIHNlbmQgTEVGVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTCA9IHRoaXMuX3NwbGl0LmxlZnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdHMgc2VuZCBSSUdIVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUiA9IHRoaXMuX3NwbGl0LnJpZ2h0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzdGVyZW8gZWZmZWN0IG1lcmdlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdCByZXR1cm4gTEVGVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5MID0gdGhpcy5fbWVyZ2UubGVmdDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0IHJldHVybiBSSUdIVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SID0gdGhpcy5fbWVyZ2UucmlnaHQ7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9zcGxpdCk7XG5cdCAgICAgICAgLy9kcnkgd2V0IGNvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX2RyeVdldCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UuY29ubmVjdCh0aGlzLl9kcnlXZXQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3dldCddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb0VmZmVjdCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9FZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd3ZXQnXSk7XG5cdCAgICAgICAgdGhpcy53ZXQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN0ZXJlb0VmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ2hvcnVzIGlzIGEgc3RlcmVvIGNob3J1cyBlZmZlY3QgY29tcG9zZWQgb2Zcblx0XHQgKiAgICAgICAgIGEgbGVmdCBhbmQgcmlnaHQgZGVsYXkgd2l0aCBhIFRvbmUuTEZPIGFwcGxpZWQgdG8gdGhlIGRlbGF5VGltZSBvZiBlYWNoIGNoYW5uZWwuXG5cdFx0ICogICAgICAgICBJbnNwaXJhdGlvbiBmcm9tIFtUdW5hLmpzXShodHRwczovL2dpdGh1Yi5jb20vRGluYWhtb2UvdHVuYS9ibG9iL21hc3Rlci90dW5hLmpzKS5cblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBvbiB0aGUgY2hvcnVzIGVmZmVjdCBvbiBbU291bmRPblNvdW5kXShodHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL2p1bjA0L2FydGljbGVzL3N5bnRoc2VjcmV0cy5odG0pLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICpcdEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSBvZiB0aGUgTEZPLlxuXHRcdCAqXHRAcGFyYW0ge01pbGxpc2Vjb25kc30gW2RlbGF5VGltZV0gVGhlIGRlbGF5IG9mIHRoZSBjaG9ydXMgZWZmZWN0IGluIG1zLlxuXHRcdCAqXHRAcGFyYW0ge05vcm1hbFJhbmdlfSBbZGVwdGhdIFRoZSBkZXB0aCBvZiB0aGUgY2hvcnVzLlxuXHRcdCAqXHRAZXhhbXBsZVxuXHRcdCAqIHZhciBjaG9ydXMgPSBuZXcgVG9uZS5DaG9ydXMoNCwgMi41LCAwLjUpO1xuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLlBvbHlTeW50aCg0LCBUb25lLk1vbm9TeW50aCkuY29ubmVjdChjaG9ydXMpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkMzXCIsXCJFM1wiLFwiRzNcIl0sIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkNob3J1cyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuQ2hvcnVzKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZXB0aCBvZiB0aGUgY2hvcnVzXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVwdGggPSBvcHRpb25zLmRlcHRoO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheVRpbWVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheVRpbWUgPSBvcHRpb25zLmRlbGF5VGltZSAvIDEwMDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBjb250cm9scyB0aGUgZGVsYXlUaW1lXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9MID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDFcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhbm90aGVyIExGTyBmb3IgdGhlIHJpZ2h0IHNpZGUgd2l0aCBhIDE4MCBkZWdyZWUgcGhhc2UgZGlmZlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICAgICAncGhhc2UnOiAxODBcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBkZWxheSBmb3IgbGVmdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVMID0gbmV3IFRvbmUuRGVsYXkoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBkZWxheSBmb3IgcmlnaHRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlUiA9IG5ldyBUb25lLkRlbGF5KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZnJlcXVlbmN5IG9mIHRoZSBMRk8gd2hpY2ggbW9kdWxhdGVzIHRoZSBkZWxheVRpbWUuXG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm9MLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbih0aGlzLl9kZWxheU5vZGVMLCB0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4odGhpcy5fZGVsYXlOb2RlUiwgdGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAvL2FuZCBwYXNzIHRocm91Z2ggdG8gbWFrZSB0aGUgZGV0dW5lIGFwcGFyZW50XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgLy9sZm8gc2V0dXBcblx0ICAgICAgICB0aGlzLl9sZm9MLmNvbm5lY3QodGhpcy5fZGVsYXlOb2RlTC5kZWxheVRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuY29ubmVjdCh0aGlzLl9kZWxheU5vZGVSLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgbGZvXG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdGFydCgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RhcnQoKTtcblx0ICAgICAgICAvL2hhdmUgb25lIExGTyBmcmVxdWVuY3kgY29udHJvbCB0aGUgb3RoZXJcblx0ICAgICAgICB0aGlzLl9sZm9MLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2xmb1IuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3NldCB0aGUgaW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fZGVwdGg7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kudmFsdWUgPSBvcHRpb25zLmZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydmcmVxdWVuY3knXSk7XG5cdCAgICAgICAgdGhpcy5zcHJlYWQgPSBvcHRpb25zLnNwcmVhZDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNob3J1cywgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hvcnVzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxLjUsXG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDMuNSxcblx0ICAgICAgICAnZGVwdGgnOiAwLjcsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ3NwcmVhZCc6IDE4MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZXB0aCBvZiB0aGUgZWZmZWN0LiBBIGRlcHRoIG9mIDEgbWFrZXMgdGhlIGRlbGF5VGltZVxuXHRcdCAqIG1vZHVsYXRlIGJldHdlZW4gMCBhbmQgMipkZWxheVRpbWUgKGNlbnRlcmVkIGFyb3VuZCB0aGUgZGVsYXlUaW1lKS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBuYW1lIGRlcHRoXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAnZGVwdGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXB0aDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGRlcHRoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlcHRoID0gZGVwdGg7XG5cdCAgICAgICAgICAgIHZhciBkZXZpYXRpb24gPSB0aGlzLl9kZWxheVRpbWUgKiBkZXB0aDtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5taW4gPSBNYXRoLm1heCh0aGlzLl9kZWxheVRpbWUgLSBkZXZpYXRpb24sIDApO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1heCA9IHRoaXMuX2RlbGF5VGltZSArIGRldmlhdGlvbjtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5taW4gPSBNYXRoLm1heCh0aGlzLl9kZWxheVRpbWUgLSBkZXZpYXRpb24sIDApO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1heCA9IHRoaXMuX2RlbGF5VGltZSArIGRldmlhdGlvbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWxheVRpbWUgaW4gbWlsbGlzZWNvbmRzIG9mIHRoZSBjaG9ydXMuIEEgbGFyZ2VyIGRlbGF5VGltZVxuXHRcdCAqIHdpbGwgZ2l2ZSBhIG1vcmUgcHJvbm91bmNlZCBlZmZlY3QuIE5vbWluYWwgcmFuZ2UgYSBkZWxheVRpbWVcblx0XHQgKiBpcyBiZXR3ZWVuIDIgYW5kIDIwbXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hvcnVzI1xuXHRcdCAqIEB0eXBlIHtNaWxsaXNlY29uZHN9XG5cdFx0ICogQG5hbWUgZGVsYXlUaW1lXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAnZGVsYXlUaW1lJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVsYXlUaW1lICogMTAwMDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGRlbGF5VGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZWxheVRpbWUgPSBkZWxheVRpbWUgLyAxMDAwO1xuXHQgICAgICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fZGVwdGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3NjaWxsYXRvciB0eXBlIG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hvcnVzI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hvcnVzLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9MLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBBbW91bnQgb2Ygc3RlcmVvIHNwcmVhZC4gV2hlbiBzZXQgdG8gMCwgYm90aCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBjZW50cmFsbHkuXG5cdFx0ICogV2hlbiBzZXQgdG8gMTgwLCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBoYXJkIGxlZnQgYW5kIHJpZ2h0IHJlc3BlY3RpdmVseS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvUi5waGFzZSAtIHRoaXMuX2xmb0wucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5waGFzZSA9IDkwIC0gc3ByZWFkIC8gMjtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5waGFzZSA9IHNwcmVhZCAvIDIgKyA5MDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2hvcnVzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNob3J1cy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZUwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZUwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZVIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZVIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmcmVxdWVuY3knKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ2hvcnVzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuQ29udm9sdmVyIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIE5hdGl2ZSBXZWIgQXVkaW9cblx0XHQgKiAgICAgICAgICBbQ29udm9sdmVyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtY29udm9sdmVybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICAgICAgICAgIENvbnZvbHV0aW9uIGlzIHVzZWZ1bCBmb3IgcmV2ZXJiIGFuZCBmaWx0ZXIgZW11bGF0aW9uLiBSZWFkIG1vcmUgYWJvdXQgY29udm9sdXRpb24gcmV2ZXJiIG9uXG5cdFx0ICogICAgICAgICAgW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29udm9sdXRpb25fcmV2ZXJiKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ3xUb25lLkJ1ZmZlcnxPYmplY3R9IFt1cmxdIFRoZSBVUkwgb2YgdGhlIGltcHVsc2UgcmVzcG9uc2Ugb3IgdGhlIFRvbmUuQnVmZmVyXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlhbmluZyB0aGUgaW1wdWxzZSByZXNwb25zZS5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pbml0aWFsaXppbmcgdGhlIGNvbnZvbHZlciB3aXRoIGFuIGltcHVsc2UgcmVzcG9uc2Vcblx0XHQgKiB2YXIgY29udm9sdmVyID0gbmV3IFRvbmUuQ29udm9sdmVyKFwiLi9wYXRoL3RvL2lyLndhdlwiKS50b01hc3RlcigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICBdLCBUb25lLkNvbnZvbHZlcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb252b2x2ZXIgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtDb252b2x2ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ29udm9sdmVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbnZvbHV0aW9uIGJ1ZmZlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKG9wdGlvbnMudXJsLCBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnZvbHZlci5idWZmZXIgPSBidWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgICAgIG9wdGlvbnMub25sb2FkKCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fY29udm9sdmVyKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNvbnZvbHZlciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIuZGVmYXVsdHMgPSB7ICdvbmxvYWQnOiBUb25lLm5vT3AgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY29udm9sdmVyJ3MgYnVmZmVyXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnZvbHZlciNcblx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyfVxuXHRcdCAqICBAbmFtZSBidWZmZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNvbnZvbHZlci5wcm90b3R5cGUsICdidWZmZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChidWZmZXIpO1xuXHQgICAgICAgICAgICB0aGlzLl9jb252b2x2ZXIuYnVmZmVyID0gdGhpcy5fYnVmZmVyLmdldCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIExvYWQgYW4gaW1wdWxzZSByZXNwb25zZSB1cmwgYXMgYW4gYXVkaW8gYnVmZmVyLlxuXHRcdCAqICBEZWNvZGVzIHRoZSBhdWRpbyBhc3luY2hyb25vdXNseSBhbmQgaW52b2tlc1xuXHRcdCAqICB0aGUgY2FsbGJhY2sgb25jZSB0aGUgYXVkaW8gYnVmZmVyIGxvYWRzLlxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGJ1ZmZlciB0byBsb2FkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGZpbGV0eXBlIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICBicm93c2VyLlxuXHRcdCAqICBAcGFyYW0gIHtmdW5jdGlvbj19IGNhbGxiYWNrXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubG9hZCh1cmwsIGZ1bmN0aW9uIChidWZmKSB7XG5cdCAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gYnVmZjtcblx0ICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNvbnZvbHZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNvbnZvbHZlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRGlzdG9ydGlvbiBpcyBhIHNpbXBsZSBkaXN0b3J0aW9uIGVmZmVjdCB1c2luZyBUb25lLldhdmVTaGFwZXIuXG5cdFx0ICogICAgICAgICBBbGdvcml0aG0gZnJvbSBbYSBzdGFja292ZXJmbG93IGFuc3dlcl0oaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjIzMTM0MDgpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfE9iamVjdH0gW2Rpc3RvcnRpb25dIFRoZSBhbW91bnQgb2YgZGlzdG9ydGlvbiAobm9taW5hbCByYW5nZSBvZiAwLTEpXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGRpc3QgPSBuZXcgVG9uZS5EaXN0b3J0aW9uKDAuOCkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgZm0gPSBuZXcgVG9uZS5TaW1wbGVGTSgpLmNvbm5lY3QoZGlzdCk7XG5cdFx0ICogLy90aGlzIHNvdW5kcyBnb29kIG9uIGJhc3Mgbm90ZXNcblx0XHQgKiBmbS50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkExXCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkRpc3RvcnRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydkaXN0b3J0aW9uJ10sIFRvbmUuRGlzdG9ydGlvbik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKDQwOTYpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogaG9sZHMgdGhlIGRpc3RvcnRpb24gYW1vdW50XG5cdFx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Rpc3RvcnRpb24gPSBvcHRpb25zLmRpc3RvcnRpb247XG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX3NoYXBlcik7XG5cdCAgICAgICAgdGhpcy5kaXN0b3J0aW9uID0gb3B0aW9ucy5kaXN0b3J0aW9uO1xuXHQgICAgICAgIHRoaXMub3ZlcnNhbXBsZSA9IG9wdGlvbnMub3ZlcnNhbXBsZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkRpc3RvcnRpb24sIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EaXN0b3J0aW9uLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkaXN0b3J0aW9uJzogMC40LFxuXHQgICAgICAgICdvdmVyc2FtcGxlJzogJ25vbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGFtb3VudCBvZiBkaXN0b3J0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkRpc3RvcnRpb24jXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBuYW1lIGRpc3RvcnRpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkRpc3RvcnRpb24ucHJvdG90eXBlLCAnZGlzdG9ydGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3RvcnRpb247XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhbW91bnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGlzdG9ydGlvbiA9IGFtb3VudDtcblx0ICAgICAgICAgICAgdmFyIGsgPSBhbW91bnQgKiAxMDA7XG5cdCAgICAgICAgICAgIHZhciBkZWcgPSBNYXRoLlBJIC8gMTgwO1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIuc2V0TWFwKGZ1bmN0aW9uICh4KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoeCkgPCAwLjAwMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vc2hvdWxkIG91dHB1dCAwIHdoZW4gaW5wdXQgaXMgMFxuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDMgKyBrKSAqIHggKiAyMCAqIGRlZyAvIChNYXRoLlBJICsgayAqIE1hdGguYWJzKHgpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3ZlcnNhbXBsaW5nIG9mIHRoZSBlZmZlY3QuIENhbiBlaXRoZXIgYmUgXCJub25lXCIsIFwiMnhcIiBvciBcIjR4XCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRGlzdG9ydGlvbiNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIG92ZXJzYW1wbGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkRpc3RvcnRpb24ucHJvdG90eXBlLCAnb3ZlcnNhbXBsZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3ZlcnNhbXBsaW5nKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlID0gb3ZlcnNhbXBsaW5nO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRGlzdG9ydGlvbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EaXN0b3J0aW9uLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkRpc3RvcnRpb247XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogXHRAY2xhc3MgIFRvbmUuRmVlZGJhY2tFZmZlY3QgcHJvdmlkZXMgYSBsb29wIGJldHdlZW4gYW4gXG5cdFx0ICogXHQgICAgICAgIGF1ZGlvIHNvdXJjZSBhbmQgaXRzIG93biBvdXRwdXQuIFRoaXMgaXMgYSBiYXNlLWNsYXNzXG5cdFx0ICogXHQgICAgICAgIGZvciBmZWVkYmFjayBlZmZlY3RzLiBcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW2ZlZWRiYWNrXSBUaGUgaW5pdGlhbCBmZWVkYmFjayB2YWx1ZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmZWVkYmFjayddLCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBnYWluIHdoaWNoIGNvbnRyb2xzIHRoZSBmZWVkYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5mZWVkYmFjaywgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHNpZ25hbCB3aGljaCBpcyBmZWQgYmFjayBpbnRvIHRoZSBlZmZlY3QgaW5wdXQuIFxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gdGhpcy5fZmVlZGJhY2tHYWluLmdhaW47XG5cdCAgICAgICAgLy90aGUgZmVlZGJhY2sgbG9vcFxuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuLmNoYWluKHRoaXMuX2ZlZWRiYWNrR2FpbiwgdGhpcy5lZmZlY3RTZW5kKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmVlZGJhY2tFZmZlY3QsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRWZmZWN0LmRlZmF1bHRzID0geyAnZmVlZGJhY2snOiAwLjEyNSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRmVlZGJhY2tFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GZWVkYmFja0VmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkZlZWRiYWNrRGVsYXkgaXMgYSBEZWxheU5vZGUgaW4gd2hpY2ggcGFydCBvZiBvdXRwdXRcblx0XHQgKiAgICAgICAgICBzaWduYWwgaXMgZmVkIGJhY2sgaW50byB0aGUgZGVsYXkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkZlZWRiYWNrRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgYXBwbGllZCB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gZmVlZGJhY2sgVGhlIGFtb3VudCBvZiB0aGUgZWZmZWN0ZWQgc2lnbmFsIHdoaWNoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZmVkIGJhY2sgdGhyb3VnaCB0aGUgZGVsYXkuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZlZWRiYWNrRGVsYXkgPSBuZXcgVG9uZS5GZWVkYmFja0RlbGF5KFwiOG5cIiwgMC41KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciB0b20gPSBuZXcgVG9uZS5EcnVtU3ludGgoe1xuXHRcdCAqIFx0XCJvY3RhdmVzXCIgOiA0LFxuXHRcdCAqIFx0XCJwaXRjaERlY2F5XCIgOiAwLjFcblx0XHQgKiB9KS5jb25uZWN0KGZlZWRiYWNrRGVsYXkpO1xuXHRcdCAqIHRvbS50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkEyXCIsXCIzMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRGVsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ2ZlZWRiYWNrJ1xuXHQgICAgICAgIF0sIFRvbmUuRmVlZGJhY2tEZWxheSk7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG5ldyBUb25lLkRlbGF5KG9wdGlvbnMuZGVsYXlUaW1lLCBvcHRpb25zLm1heERlbGF5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXlUaW1lIG9mIHRoZSBEZWxheU5vZGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9kZWxheU5vZGUuZGVsYXlUaW1lO1xuXHQgICAgICAgIC8vIGNvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fZGVsYXlOb2RlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2RlbGF5VGltZSddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZlZWRiYWNrRGVsYXksIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tEZWxheS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4yNSxcblx0ICAgICAgICAnbWF4RGVsYXknOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZlZWRiYWNrRGVsYXl9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tEZWxheS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GZWVkYmFja0RlbGF5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBhbiBhcnJheSBvZiBjb21iIGZpbHRlciBkZWxheSB2YWx1ZXMgZnJvbSBGcmVldmVyYiBpbXBsZW1lbnRhdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBjb21iRmlsdGVyVHVuaW5ncyA9IFtcblx0ICAgICAgICAxNTU3IC8gNDQxMDAsXG5cdCAgICAgICAgMTYxNyAvIDQ0MTAwLFxuXHQgICAgICAgIDE0OTEgLyA0NDEwMCxcblx0ICAgICAgICAxNDIyIC8gNDQxMDAsXG5cdCAgICAgICAgMTI3NyAvIDQ0MTAwLFxuXHQgICAgICAgIDEzNTYgLyA0NDEwMCxcblx0ICAgICAgICAxMTg4IC8gNDQxMDAsXG5cdCAgICAgICAgMTExNiAvIDQ0MTAwXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIGFuIGFycmF5IG9mIGFsbHBhc3MgZmlsdGVyIGZyZXF1ZW5jeSB2YWx1ZXMgZnJvbSBGcmVldmVyYiBpbXBsZW1lbnRhdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMgPSBbXG5cdCAgICAgICAgMjI1LFxuXHQgICAgICAgIDU1Nixcblx0ICAgICAgICA0NDEsXG5cdCAgICAgICAgMzQxXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZyZWV2ZXJiIGlzIGEgcmV2ZXJiIGJhc2VkIG9uIFtGcmVldmVyYl0oaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvfmpvcy9wYXNwL0ZyZWV2ZXJiLmh0bWwpLlxuXHRcdCAqICAgICAgICAgUmVhZCBtb3JlIG9uIHJldmVyYiBvbiBbU291bmQgT24gU291bmRdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwNDA4MzkwMi9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb206ODAvc29zL2ZlYjAxL2FydGljbGVzL3N5bnRoc2VjcmV0cy5hc3ApLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbcm9vbVNpemVdIENvcnJlbGF0ZWQgdG8gdGhlIGRlY2F5IHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZGFtcGVuaW5nXSBUaGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiBhIGxvd3Bhc3MgZmlsdGVyIGFzIHBhcnRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZXZlcmIuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZyZWV2ZXJiID0gbmV3IFRvbmUuRnJlZXZlcmIoKS50b01hc3RlcigpO1xuXHRcdCAqIGZyZWV2ZXJiLmRhbXBlbmluZy52YWx1ZSA9IDEwMDA7XG5cdFx0ICogLy9yb3V0aW5nIHN5bnRoIHRocm91Z2ggdGhlIHJldmVyYlxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkFNU3ludGgoKS5jb25uZWN0KGZyZWV2ZXJiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlZXZlcmIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncm9vbVNpemUnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0sIFRvbmUuRnJlZXZlcmIpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJvb21TaXplIHZhbHVlIGJldHdlZW4uIEEgbGFyZ2VyIHJvb21TaXplXG5cdFx0XHQgKiAgd2lsbCByZXN1bHQgaW4gYSBsb25nZXIgZGVjYXkuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5yb29tU2l6ZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGRhbXBlbmluZyBvZiB0aGUgcmV2ZXJiZXJhbnQgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kYW1wZW5pbmcsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBjb21iIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbWJGaWx0ZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFsbHBhc3MgZmlsdGVycyBvbiB0aGUgbGVmdFxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFsbHBhc3MgZmlsdGVycyBvbiB0aGUgcmlnaHRcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUiA9IFtdO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSByaWdodFxuXHQgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzLmxlbmd0aDsgbCsrKSB7XG5cdCAgICAgICAgICAgIHZhciBhbGxwYXNzTCA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgYWxscGFzc0wudHlwZSA9ICdhbGxwYXNzJztcblx0ICAgICAgICAgICAgYWxscGFzc0wuZnJlcXVlbmN5LnZhbHVlID0gYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzW2xdO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0wucHVzaChhbGxwYXNzTCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vbWFrZSB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSBsZWZ0XG5cdCAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMubGVuZ3RoOyByKyspIHtcblx0ICAgICAgICAgICAgdmFyIGFsbHBhc3NSID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBhbGxwYXNzUi50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBhbGxwYXNzUi5mcmVxdWVuY3kudmFsdWUgPSBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXNbcl07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUi5wdXNoKGFsbHBhc3NSKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9tYWtlIHRoZSBjb21iIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNvbWJGaWx0ZXJUdW5pbmdzLmxlbmd0aDsgYysrKSB7XG5cdCAgICAgICAgICAgIHZhciBsZnBmID0gbmV3IFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIoY29tYkZpbHRlclR1bmluZ3NbY10pO1xuXHQgICAgICAgICAgICBpZiAoYyA8IGNvbWJGaWx0ZXJUdW5pbmdzLmxlbmd0aCAvIDIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY2hhaW4obGZwZiwgdGhpcy5fYWxscGFzc0ZpbHRlcnNMWzBdKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4obGZwZiwgdGhpcy5fYWxscGFzc0ZpbHRlcnNSWzBdKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnJvb21TaXplLmNvbm5lY3QobGZwZi5yZXNvbmFuY2UpO1xuXHQgICAgICAgICAgICB0aGlzLmRhbXBlbmluZy5jb25uZWN0KGxmcGYuZGFtcGVuaW5nKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29tYkZpbHRlcnMucHVzaChsZnBmKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jaGFpbiB0aGUgYWxscGFzcyBmaWx0ZXJzIHRvZ2V0ZWhyXG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTCk7XG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUik7XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMW3RoaXMuX2FsbHBhc3NGaWx0ZXJzTC5sZW5ndGggLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSW3RoaXMuX2FsbHBhc3NGaWx0ZXJzUi5sZW5ndGggLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncm9vbVNpemUnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRnJlZXZlcmIsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZWV2ZXJiLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdyb29tU2l6ZSc6IDAuNyxcblx0ICAgICAgICAnZGFtcGVuaW5nJzogMzAwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRnJlZXZlcmJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlZXZlcmIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBhbCA9IDA7IGFsIDwgdGhpcy5fYWxscGFzc0ZpbHRlcnNMLmxlbmd0aDsgYWwrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbYWxdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMW2FsXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTCA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgYXIgPSAwOyBhciA8IHRoaXMuX2FsbHBhc3NGaWx0ZXJzUi5sZW5ndGg7IGFyKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSW2FyXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUlthcl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1IgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGNmID0gMDsgY2YgPCB0aGlzLl9jb21iRmlsdGVycy5sZW5ndGg7IGNmKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fY29tYkZpbHRlcnNbY2ZdLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29tYkZpbHRlcnNbY2ZdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY29tYkZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3Jvb21TaXplJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZyZWV2ZXJiO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBhbiBhcnJheSBvZiB0aGUgY29tYiBmaWx0ZXIgZGVsYXkgdGltZSB2YWx1ZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgY29tYkZpbHRlckRlbGF5VGltZXMgPSBbXG5cdCAgICAgICAgMTY4NyAvIDI1MDAwLFxuXHQgICAgICAgIDE2MDEgLyAyNTAwMCxcblx0ICAgICAgICAyMDUzIC8gMjUwMDAsXG5cdCAgICAgICAgMjI1MSAvIDI1MDAwXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSByZXNvbmFuY2VzIG9mIGVhY2ggb2YgdGhlIGNvbWIgZmlsdGVyc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBjb21iRmlsdGVyUmVzb25hbmNlcyA9IFtcblx0ICAgICAgICAwLjc3Myxcblx0ICAgICAgICAwLjgwMixcblx0ICAgICAgICAwLjc1Myxcblx0ICAgICAgICAwLjczM1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgYWxscGFzcyBmaWx0ZXIgZnJlcXVlbmNpZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgYWxscGFzc0ZpbHRlckZyZXFzID0gW1xuXHQgICAgICAgIDM0Nyxcblx0ICAgICAgICAxMTMsXG5cdCAgICAgICAgMzdcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuSkNSZXZlcmIgaXMgYSBzaW1wbGUgW1NjaHJvZWRlciBSZXZlcmJlcmF0b3JdKGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L35qb3MvcGFzcC9TY2hyb2VkZXJfUmV2ZXJiZXJhdG9ycy5odG1sKVxuXHRcdCAqICAgICAgICAgdHVuZWQgYnkgSm9obiBDaG93bmluZyBpbiAxOTcwLlxuXHRcdCAqICAgICAgICAgSXQgaXMgbWFkZSB1cCBvZiB0aHJlZSBhbGxwYXNzIGZpbHRlcnMgYW5kIGZvdXIgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIuXG5cdFx0ICpcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3Jvb21TaXplXSBDb29yZWxhdGVzIHRvIHRoZSBkZWNheSB0aW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciByZXZlcmIgPSBuZXcgVG9uZS5KQ1JldmVyYigwLjQpLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHRcdCAqIHZhciBkZWxheSA9IG5ldyBUb25lLkZlZWRiYWNrRGVsYXkoMC41KTtcblx0XHQgKiAvL2Nvbm5lY3RpbmcgdGhlIHN5bnRoIHRvIHJldmVyYiB0aHJvdWdoIGRlbGF5XG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuRHVvU3ludGgoKS5jaGFpbihkZWxheSwgcmV2ZXJiKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkE0XCIsXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuSkNSZXZlcmIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydyb29tU2l6ZSddLCBUb25lLkpDUmV2ZXJiKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJvb20gc2l6ZSBjb250cm9sIHZhbHVlcyBiZXR3ZWVuIFswLDFdXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5yb29tU2l6ZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgcm9vbSBzaXplXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlUm9vbVNpemUgPSBuZXcgVG9uZS5TY2FsZSgtMC43MzMsIDAuMTk3KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhIHNlcmllcyBvZiBhbGxwYXNzIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcGFyYWxsZWwgZmVlZGJhY2sgY29tYiBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzID0gW107XG5cdCAgICAgICAgLy9tYWtlIHRoZSBhbGxwYXNzIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBhZiA9IDA7IGFmIDwgYWxscGFzc0ZpbHRlckZyZXFzLmxlbmd0aDsgYWYrKykge1xuXHQgICAgICAgICAgICB2YXIgYWxscGFzcyA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgYWxscGFzcy50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBhbGxwYXNzLmZyZXF1ZW5jeS52YWx1ZSA9IGFsbHBhc3NGaWx0ZXJGcmVxc1thZl07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzLnB1c2goYWxscGFzcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYW5kIHRoZSBjb21iIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBjZiA9IDA7IGNmIDwgY29tYkZpbHRlckRlbGF5VGltZXMubGVuZ3RoOyBjZisrKSB7XG5cdCAgICAgICAgICAgIHZhciBmYmNmID0gbmV3IFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyKGNvbWJGaWx0ZXJEZWxheVRpbWVzW2NmXSwgMC4xKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZS5jb25uZWN0KGZiY2YucmVzb25hbmNlKTtcblx0ICAgICAgICAgICAgZmJjZi5yZXNvbmFuY2UudmFsdWUgPSBjb21iRmlsdGVyUmVzb25hbmNlc1tjZl07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzW3RoaXMuX2FsbHBhc3NGaWx0ZXJzLmxlbmd0aCAtIDFdLmNvbm5lY3QoZmJjZik7XG5cdCAgICAgICAgICAgIGlmIChjZiA8IGNvbWJGaWx0ZXJEZWxheVRpbWVzLmxlbmd0aCAvIDIpIHtcblx0ICAgICAgICAgICAgICAgIGZiY2YuY29ubmVjdCh0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZmJjZi5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycy5wdXNoKGZiY2YpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NoYWluIHRoZSBhbGxwYXNzIGZpbHRlcnMgdG9nZXRoZXJcblx0ICAgICAgICB0aGlzLnJvb21TaXplLmNvbm5lY3QodGhpcy5fc2NhbGVSb29tU2l6ZSk7XG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNvbm5lY3QodGhpcy5fYWxscGFzc0ZpbHRlcnNbMF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY29ubmVjdCh0aGlzLl9hbGxwYXNzRmlsdGVyc1swXSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydyb29tU2l6ZSddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkpDUmV2ZXJiLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkpDUmV2ZXJiLmRlZmF1bHRzID0geyAncm9vbVNpemUnOiAwLjUgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSkNSZXZlcmJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSkNSZXZlcmIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBhcGYgPSAwOyBhcGYgPCB0aGlzLl9hbGxwYXNzRmlsdGVycy5sZW5ndGg7IGFwZisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzW2FwZl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1thcGZdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGZiY2YgPSAwOyBmYmNmIDwgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycy5sZW5ndGg7IGZiY2YrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzW2ZiY2ZdLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVyc1tmYmNmXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsncm9vbVNpemUnXSk7XG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuSkNSZXZlcmI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBNaWQvU2lkZSBwcm9jZXNzaW5nIHNlcGFyYXRlcyB0aGUgdGhlICdtaWQnIHNpZ25hbFxuXHRcdCAqICAgICAgICAgKHdoaWNoIGNvbWVzIG91dCBvZiBib3RoIHRoZSBsZWZ0IGFuZCB0aGUgcmlnaHQgY2hhbm5lbClcblx0XHQgKiAgICAgICAgIGFuZCB0aGUgJ3NpZGUnICh3aGljaCBvbmx5IGNvbWVzIG91dCBvZiB0aGUgdGhlIHNpZGUgY2hhbm5lbHMpXG5cdFx0ICogICAgICAgICBhbmQgZWZmZWN0cyB0aGVtIHNlcGFyYXRlbHkgYmVmb3JlIGJlaW5nIHJlY29tYmluZWQuXG5cdFx0ICogICAgICAgICBBcHBsaWVzIGEgTWlkL1NpZGUgc2VwZXJhdGlvbiBhbmQgcmVjb21iaW5hdGlvbi5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmb3VuZCBpbiBba3ZyYXVkaW8gZm9ydW1zXShodHRwOi8vd3d3Lmt2cmF1ZGlvLmNvbS9mb3J1bS92aWV3dG9waWMucGhwP3Q9MjEyNTg3KS5cblx0XHQgKiAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICBUaGlzIGlzIGEgYmFzZS1jbGFzcyBmb3IgTWlkL1NpZGUgRWZmZWN0cy5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9zaWRlIHNwbGl0XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVTcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gbmV3IFRvbmUuTWlkU2lkZVNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9zaWRlIG1lcmdlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVNZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gbmV3IFRvbmUuTWlkU2lkZU1lcmdlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBzZW5kLiBDb25uZWN0IHRvIG1pZCBwcm9jZXNzaW5nXG5cdFx0XHQgKiAgQHR5cGUge1RvbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkU2VuZCA9IHRoaXMuX21pZFNpZGVTcGxpdC5taWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZGUgc2VuZC4gQ29ubmVjdCB0byBzaWRlIHByb2Nlc3Npbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlU2VuZCA9IHRoaXMuX21pZFNpZGVTcGxpdC5zaWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgcmV0dXJuIGNvbm5lY3Rpb25cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkUmV0dXJuID0gdGhpcy5fbWlkU2lkZU1lcmdlLm1pZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSByZXR1cm4gY29ubmVjdGlvblxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlUmV0dXJuID0gdGhpcy5fbWlkU2lkZU1lcmdlLnNpZGU7XG5cdCAgICAgICAgLy90aGUgY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY29ubmVjdCh0aGlzLl9taWRTaWRlU3BsaXQpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVFZmZlY3QsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZUVmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZFNlbmQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZVNlbmQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkUmV0dXJuID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGVSZXR1cm4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBoYXNlciBpcyBhIHBoYXNlciBlZmZlY3QuIFBoYXNlcnMgd29yayBieSBjaGFuZ2luZyB0aGUgcGhhc2Vcblx0XHQgKiAgICAgICAgIG9mIGRpZmZlcmVudCBmcmVxdWVuY3kgY29tcG9uZW50cyBvZiBhbiBpbmNvbWluZyBzaWduYWwuIFJlYWQgbW9yZSBvblxuXHRcdCAqICAgICAgICAgW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUGhhc2VyXyhlZmZlY3QpKS5cblx0XHQgKiAgICAgICAgIEluc3BpcmF0aW9uIGZvciB0aGlzIHBoYXNlciBjb21lcyBmcm9tIFtUdW5hLmpzXShodHRwczovL2dpdGh1Yi5jb20vRGluYWhtb2UvdHVuYS8pLlxuXHRcdCAqXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIHNwZWVkIG9mIHRoZSBwaGFzaW5nLlxuXHRcdCAqXHRAcGFyYW0ge251bWJlcn0gW29jdGF2ZXNdIFRoZSBvY3RhdmVzIG9mIHRoZSBlZmZlY3QuXG5cdFx0ICpcdEBwYXJhbSB7RnJlcXVlbmN5fSBbYmFzZUZyZXF1ZW5jeV0gVGhlIGJhc2UgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXJzLlxuXHRcdCAqXHRAZXhhbXBsZVxuXHRcdCAqIHZhciBwaGFzZXIgPSBuZXcgVG9uZS5QaGFzZXIoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IDE1LFxuXHRcdCAqIFx0XCJvY3RhdmVzXCIgOiA1LFxuXHRcdCAqIFx0XCJiYXNlRnJlcXVlbmN5XCIgOiAxMDAwXG5cdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5GTVN5bnRoKCkuY29ubmVjdChwaGFzZXIpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiRTNcIiwgXCIyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vc2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJyxcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5QaGFzZXIpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBjb250cm9scyB0aGUgZnJlcXVlbmN5IG9uIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBuZXcgVG9uZS5MRk8ob3B0aW9ucy5mcmVxdWVuY3ksIDAsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8gd2hpY2ggY29udHJvbHMgdGhlIGZyZXF1ZW5jeSBvbiB0aGUgcmlnaHQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG5ldyBUb25lLkxGTyhvcHRpb25zLmZyZXF1ZW5jeSwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5waGFzZSA9IDE4MDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYmFzZSBtb2R1bGF0aW9uIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG9jdGF2ZXMgb2YgdGhlIHBoYXNpbmdcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBxdWFsaXR5IGZhY3RvciBvZiB0aGUgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5RLCBUb25lLlR5cGUuUG9zaXRpdmUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhcnJheSBvZiBmaWx0ZXJzIGZvciB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzTCA9IHRoaXMuX21ha2VGaWx0ZXJzKG9wdGlvbnMuc3RhZ2VzLCB0aGlzLl9sZm9MLCB0aGlzLlEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhcnJheSBvZiBmaWx0ZXJzIGZvciB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzUiA9IHRoaXMuX21ha2VGaWx0ZXJzKG9wdGlvbnMuc3RhZ2VzLCB0aGlzLl9sZm9SLCB0aGlzLlEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIGZyZXF1ZW5jeSBvZiB0aGUgZWZmZWN0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmb0wuZnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LnZhbHVlID0gb3B0aW9ucy5mcmVxdWVuY3k7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZW0gdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNvbm5lY3QodGhpcy5fZmlsdGVyc0xbMF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY29ubmVjdCh0aGlzLl9maWx0ZXJzUlswXSk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc0xbb3B0aW9ucy5zdGFnZXMgLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc1Jbb3B0aW9ucy5zdGFnZXMgLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSBmcmVxdWVuY3kgd2l0aCBvbmUgTEZPXG5cdCAgICAgICAgdGhpcy5fbGZvTC5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9sZm9SLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIG9wdGlvbnNcblx0ICAgICAgICB0aGlzLmJhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGxmb1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3RhcnQoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN0YXJ0KCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QaGFzZXIsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0c1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtvYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBoYXNlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMC41LFxuXHQgICAgICAgICdvY3RhdmVzJzogMyxcblx0ICAgICAgICAnc3RhZ2VzJzogMTAsXG5cdCAgICAgICAgJ1EnOiAxMCxcblx0ICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDM1MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gc3RhZ2VzXG5cdFx0ICogIEByZXR1cm5zIHtBcnJheX0gdGhlIG51bWJlciBvZiBmaWx0ZXJzIGFsbCBjb25uZWN0ZWQgdG9nZXRoZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyLnByb3RvdHlwZS5fbWFrZUZpbHRlcnMgPSBmdW5jdGlvbiAoc3RhZ2VzLCBjb25uZWN0VG9GcmVxLCBRKSB7XG5cdCAgICAgICAgdmFyIGZpbHRlcnMgPSBuZXcgQXJyYXkoc3RhZ2VzKTtcblx0ICAgICAgICAvL21ha2UgYWxsIHRoZSBmaWx0ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFnZXM7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZmlsdGVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBmaWx0ZXIudHlwZSA9ICdhbGxwYXNzJztcblx0ICAgICAgICAgICAgUS5jb25uZWN0KGZpbHRlci5RKTtcblx0ICAgICAgICAgICAgY29ubmVjdFRvRnJlcS5jb25uZWN0KGZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICBmaWx0ZXJzW2ldID0gZmlsdGVyO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgZmlsdGVycyk7XG5cdCAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoZSBwaGFzZSBnb2VzIGFib3ZlXG5cdFx0ICogdGhlIGJhc2VGcmVxdWVuY3lcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaGFzZXIjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBoYXNlci5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdGF2ZXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdGF2ZXM7XG5cdCAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLl9iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgb2N0YXZlcyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wubWF4ID0gbWF4O1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1heCA9IG1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0aGUgYmFzZSBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlcnMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGhhc2VyI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGhhc2VyLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgICAgICB0aGlzLl9iYXNlRnJlcXVlbmN5ID0gZnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5taW4gPSBmcmVxO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1pbiA9IGZyZXE7XG5cdCAgICAgICAgICAgIHRoaXMub2N0YXZlcyA9IHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGhhc2VyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBoYXNlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuUS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9MLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9MID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9SLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlcnNMLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNMW2ldLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc0xbaV0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzTCA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl9maWx0ZXJzUi5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzUltqXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNSW2pdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc1IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QaGFzZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBKdXN0IGxpa2UgYSBzdGVyZW8gZmVlZGJhY2sgZWZmZWN0LCBidXQgdGhlIGZlZWRiYWNrIGlzIHJvdXRlZCBmcm9tIGxlZnQgdG8gcmlnaHRcblx0XHQgKiAgICAgICAgIGFuZCByaWdodCB0byBsZWZ0IGluc3RlYWQgb2Ygb24gdGhlIHNhbWUgY2hhbm5lbC5cblx0XHQgKlxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmZWVkYmFjayddLCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZmVlZGJhY2sgZnJvbSB0aGUgb3V0cHV0XG5cdFx0XHQgKiAgYmFjayBpbnRvIHRoZSBpbnB1dCBvZiB0aGUgZWZmZWN0IChyb3V0ZWRcblx0XHRcdCAqICBhY3Jvc3MgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMpLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZmVlZGJhY2ssIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxlZnQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcmlnaHQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSTCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwuY2hhaW4odGhpcy5fZmVlZGJhY2tMUiwgdGhpcy5lZmZlY3RTZW5kUik7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SLmNoYWluKHRoaXMuX2ZlZWRiYWNrUkwsIHRoaXMuZWZmZWN0U2VuZEwpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZmFuKHRoaXMuX2ZlZWRiYWNrTFIuZ2FpbiwgdGhpcy5fZmVlZGJhY2tSTC5nYWluKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZmVlZGJhY2snXSk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSTCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGluZ1BvbmdEZWxheSBpcyBhIGZlZWRiYWNrIGRlbGF5IGVmZmVjdCB3aGVyZSB0aGUgZWNobyBpcyBoZWFyZFxuXHRcdCAqICAgICAgICAgIGZpcnN0IGluIG9uZSBjaGFubmVsIGFuZCBuZXh0IGluIHRoZSBvcHBvc2l0ZSBjaGFubmVsLiBJbiBhIHN0ZXJlb1xuXHRcdCAqICAgICAgICAgIHN5c3RlbSB0aGVzZSBhcmUgdGhlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzLlxuXHRcdCAqICAgICAgICAgIFBpbmdQb25nRGVsYXkgaW4gbW9yZSBzaW1wbGlmaWVkIHRlcm1zIGlzIHR3byBUb25lLkZlZWRiYWNrRGVsYXlzXG5cdFx0ICogICAgICAgICAgd2l0aCBpbmRlcGVuZGVudCBkZWxheSB2YWx1ZXMuIEVhY2ggZGVsYXkgaXMgcm91dGVkIHRvIG9uZSBjaGFubmVsXG5cdFx0ICogICAgICAgICAgKGxlZnQgb3IgcmlnaHQpLCBhbmQgdGhlIGNoYW5uZWwgdHJpZ2dlcmVkIHNlY29uZCB3aWxsIGFsd2F5c1xuXHRcdCAqICAgICAgICAgIHRyaWdnZXIgYXQgdGhlIHNhbWUgaW50ZXJ2YWwgYWZ0ZXIgdGhlIGZpcnN0LlxuXHRcdCAqXG5cdFx0ICogXHRAY29uc3RydWN0b3Jcblx0XHQgKiBcdEBleHRlbmRzIHtUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2RlbGF5VGltZV0gVGhlIGRlbGF5VGltZSBiZXR3ZWVuIGNvbnNlY3V0aXZlIGVjaG9zLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gZmVlZGJhY2sgVGhlIGFtb3VudCBvZiB0aGUgZWZmZWN0ZWQgc2lnbmFsIHdoaWNoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmZWQgYmFjayB0aHJvdWdoIHRoZSBkZWxheS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGluZ1BvbmcgPSBuZXcgVG9uZS5QaW5nUG9uZ0RlbGF5KFwiNG5cIiwgMC4yKS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBkcnVtID0gbmV3IFRvbmUuRHJ1bVN5bnRoKCkuY29ubmVjdChwaW5nUG9uZyk7XG5cdFx0ICogZHJ1bS50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiMzJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaW5nUG9uZ0RlbGF5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdmZWVkYmFjaydcblx0ICAgICAgICBdLCBUb25lLlBpbmdQb25nRGVsYXkpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGUgb24gdGhlIGxlZnQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZWZ0RGVsYXkgPSBuZXcgVG9uZS5EZWxheSgwLCBvcHRpb25zLm1heERlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGUgb24gdGhlIHJpZ2h0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmlnaHREZWxheSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcHJlZGVsYXkgb24gdGhlIHJpZ2h0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmlnaHRQcmVEZWxheSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgdGltZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRlbGF5VGltZSwgVG9uZS5UeXBlLlRpbWUpO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY2hhaW4odGhpcy5fbGVmdERlbGF5LCB0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4odGhpcy5fcmlnaHRQcmVEZWxheSwgdGhpcy5fcmlnaHREZWxheSwgdGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZS5mYW4odGhpcy5fbGVmdERlbGF5LmRlbGF5VGltZSwgdGhpcy5fcmlnaHREZWxheS5kZWxheVRpbWUsIHRoaXMuX3JpZ2h0UHJlRGVsYXkuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvL3JlYXJyYW5nZWQgdGhlIGZlZWRiYWNrIHRvIGJlIGFmdGVyIHRoZSByaWdodFByZURlbGF5XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUi5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUi5jb25uZWN0KHRoaXMuX3JpZ2h0RGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGluZ1BvbmdEZWxheSwgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGluZ1BvbmdEZWxheS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4yNSxcblx0ICAgICAgICAnbWF4RGVsYXlUaW1lJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGluZ1BvbmdEZWxheX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaW5nUG9uZ0RlbGF5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGVmdERlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0RGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0RGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0RGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0UHJlRGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0UHJlRGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGluZ1BvbmdEZWxheTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGl0Y2hTaGlmdCBkb2VzIG5lYXItcmVhbHRpbWUgcGl0Y2ggc2hpZnRpbmcgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgIFRoZSBlZmZlY3QgaXMgYWNoaWV2ZWQgYnkgc3BlZWRpbmcgdXAgb3Igc2xvd2luZyBkb3duIHRoZSBkZWxheVRpbWVcblx0XHQgKiAgICAgICAgIG9mIGEgRGVsYXlOb2RlIHVzaW5nIGEgc2F3dG9vdGggd2F2ZS5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmb3VuZCBpbiBbdGhpcyBwZGZdKGh0dHA6Ly9kc3AtYm9vay5uYXJvZC5ydS9zb3VuZHByb2MucGRmKS5cblx0XHQgKiAgICAgICAgIEFkZGl0aW9uYWwgcmVmZXJlbmNlIGJ5IFtNaWxsZXIgUHVja2V0XShodHRwOi8vbXNwLnVjc2QuZWR1L3RlY2huaXF1ZXMvdjAuMTEvYm9vay1odG1sL25vZGUxMTUuaHRtbCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRmVlZGJhY2tFZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7SW50ZXJ2YWw9fSBwaXRjaCBUaGUgaW50ZXJ2YWwgdG8gdHJhbnNwb3NlIHRoZSBpbmNvbWluZyBzaWduYWwgYnkuXG5cdFx0ICovXG5cdCAgICBUb25lLlBpdGNoU2hpZnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydwaXRjaCddLCBUb25lLlBpdGNoU2hpZnQpO1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGl0Y2ggc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFVzZXMgdHdvIERlbGF5Tm9kZXMgdG8gY292ZXIgdXAgdGhlIGp1bXAgaW5cblx0XHRcdCAqICB0aGUgc2F3dG9vdGggd2F2ZS5cblx0XHRcdCAqICBAdHlwZSAge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlBID0gbmV3IFRvbmUuRGVsYXkoMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpcnN0IExGTy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9BID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAwLjEsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ3Nhd3Rvb3RoJ1xuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5fZGVsYXlBLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNlY29uZCBEZWxheU5vZGVcblx0XHRcdCAqICBAdHlwZSAge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlCID0gbmV3IFRvbmUuRGVsYXkoMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpcnN0IExGTy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9CID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAwLjEsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ3Nhd3Rvb3RoJyxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogMTgwXG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9kZWxheUIuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBDcm9zc2ZhZGUgcXVpY2tseSBiZXR3ZWVuIHRoZSB0d28gZGVsYXkgbGluZXNcblx0XHRcdCAqICB0byBjb3ZlciB1cCB0aGUganVtcCBpbiB0aGUgc2F3dG9vdGggd2F2ZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Dcm9zc0ZhZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZSA9IG5ldyBUb25lLkNyb3NzRmFkZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIExGTyB3aGljaCBhbHRlcm5hdGVzIGJldHdlZW4gdGhlIHR3b1xuXHRcdFx0ICogIGRlbGF5IGxpbmVzIHRvIGNvdmVyIHVwIHRoZSBkaXNwYXJpdHkgaW4gdGhlXG5cdFx0XHQgKiAgc2F3dG9vdGggd2F2ZS5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8gPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ3RyaWFuZ2xlJyxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogOTBcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2Nyb3NzRmFkZS5mYWRlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0RlbGF5ID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZGVsYXkgb24gdGhlIGlucHV0IHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZmVlZGJhY2tEZWxheS5kZWxheVRpbWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2RlbGF5VGltZScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGQgdGhlIGN1cnJlbnQgcGl0Y2hcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9waXRjaCA9IG9wdGlvbnMucGl0Y2g7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZCB0aGUgY3VycmVudCB3aW5kb3dTaXplXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fd2luZG93U2l6ZSA9IG9wdGlvbnMud2luZG93U2l6ZTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIHR3byBkZWxheSBsaW5lcyB1cFxuXHQgICAgICAgIHRoaXMuX2RlbGF5QS5jb25uZWN0KHRoaXMuX2Nyb3NzRmFkZS5hKTtcblx0ICAgICAgICB0aGlzLl9kZWxheUIuY29ubmVjdCh0aGlzLl9jcm9zc0ZhZGUuYik7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kuZmFuKHRoaXMuX2xmb0EuZnJlcXVlbmN5LCB0aGlzLl9sZm9CLmZyZXF1ZW5jeSwgdGhpcy5fY3Jvc3NGYWRlTEZPLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9yb3V0ZSB0aGUgaW5wdXRcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuZmFuKHRoaXMuX2RlbGF5QSwgdGhpcy5fZGVsYXlCKTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGUuY2hhaW4odGhpcy5fZmVlZGJhY2tEZWxheSwgdGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIExGT3MgYXQgdGhlIHNhbWUgdGltZVxuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHRoaXMuX2xmb0Euc3RhcnQobm93KTtcblx0ICAgICAgICB0aGlzLl9sZm9CLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlTEZPLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVcblx0ICAgICAgICB0aGlzLndpbmRvd1NpemUgPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGl0Y2hTaGlmdCwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuUGl0Y2hTaGlmdC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGl0Y2gnOiAwLFxuXHQgICAgICAgICd3aW5kb3dTaXplJzogMC4xLFxuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLFxuXHQgICAgICAgICdmZWVkYmFjayc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXBpdGNoIHRoZSBpbmNvbWluZyBzaWduYWwgYnkgc29tZSBpbnRlcnZhbCAobWVhc3VyZWRcblx0XHQgKiBpbiBzZW1pLXRvbmVzKS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaXRjaFNoaWZ0I1xuXHRcdCAqIEB0eXBlIHtJbnRlcnZhbH1cblx0XHQgKiBAbmFtZSBwaXRjaFxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogcGl0Y2hTaGlmdC5waXRjaCA9IC0xMjsgLy9kb3duIG9uZSBvY3RhdmVcblx0XHQgKiBwaXRjaFNoaWZ0LnBpdGNoID0gNzsgLy91cCBhIGZpZnRoXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QaXRjaFNoaWZ0LnByb3RvdHlwZSwgJ3BpdGNoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGl0Y2g7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9waXRjaCA9IGludGVydmFsO1xuXHQgICAgICAgICAgICB2YXIgZmFjdG9yID0gMDtcblx0ICAgICAgICAgICAgaWYgKGludGVydmFsIDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQS5taW4gPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQS5tYXggPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQi5taW4gPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQi5tYXggPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgICAgICAgICAgZmFjdG9yID0gVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oaW50ZXJ2YWwgLSAxKSArIDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1pbiA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1heCA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1pbiA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1heCA9IDA7XG5cdCAgICAgICAgICAgICAgICBmYWN0b3IgPSBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhpbnRlcnZhbCkgLSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeS52YWx1ZSA9IGZhY3RvciAqICgxLjIgLyB0aGlzLl93aW5kb3dTaXplKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB3aW5kb3cgc2l6ZSBjb3JyZXNwb25kcyByb3VnaGx5IHRvIHRoZSBzYW1wbGUgbGVuZ3RoIGluIGEgbG9vcGluZyBzYW1wbGVyLlxuXHRcdCAqIFNtYWxsZXIgdmFsdWVzIGFyZSBkZXNpcmFibGUgZm9yIGEgbGVzcyBub3RpY2VhYmxlIGRlbGF5IHRpbWUgb2YgdGhlIHBpdGNoIHNoaWZ0ZWRcblx0XHQgKiBzaWduYWwsIGJ1dCBsYXJnZXIgdmFsdWVzIHdpbGwgcmVzdWx0IGluIHNtb290aGVyIHBpdGNoIHNoaWZ0aW5nIGZvciBsYXJnZXIgaW50ZXJ2YWxzLlxuXHRcdCAqIEEgbm9taW5hbCByYW5nZSBvZiAwLjAzIHRvIDAuMSBpcyByZWNvbW1lbmRlZC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaXRjaFNoaWZ0I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHdpbmRvd1NpemVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHBpdGNoU2hpZnQud2luZG93U2l6ZSA9IDAuMTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBpdGNoU2hpZnQucHJvdG90eXBlLCAnd2luZG93U2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3dpbmRvd1NpemUgPSB0aGlzLnRvU2Vjb25kcyhzaXplKTtcblx0ICAgICAgICAgICAgdGhpcy5waXRjaCA9IHRoaXMuX3BpdGNoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QaXRjaFNoaWZ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaXRjaFNoaWZ0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlBLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheUEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Qi5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlCID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9BLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9BID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9CLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9CID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlTEZPLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdkZWxheVRpbWUnKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGl0Y2hTaGlmdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIEJ1ZmZlclNvdXJjZU5vZGUuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtICB7QXVkaW9CdWZmZXJ8VG9uZS5CdWZmZXJ9ICBidWZmZXIgICBUaGUgYnVmZmVyIHRvIHBsYXlcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBvbmxvYWQgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYnVmZmVyJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICBdLCBUb25lLkJ1ZmZlclNvdXJjZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRoZVxuXHRcdFx0ICogIGJ1ZmZlciBzb3VyY2UgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBvcHRpb25zLm9uZW5kZWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpbWUgdGhhdCB0aGUgYnVmZmVyIHdhcyBzdGFydGVkLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBhZGRpdGlvbmFsIGZsYWcgaWYgdGhlIGFjdHVhbCBCdWZmZXJTb3VyY2VOb2RlXG5cdFx0XHQgKiAgaGFzIGJlZW4gc3RhcnRlZC4gYi9jIHN0b3BwaW5nIGFuIHVuc3RhcnRlZCBidWZmZXJcblx0XHRcdCAqICB3aWxsIHRocm93IGl0IGludG8gYW4gaW52YWxpZCBzdGF0ZVxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEZsYWcgaWYgdGhlIHNvdXJjZSBoYXMgYWxyZWFkeSBiZWVuIHN0b3BwZWRcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVN0b3BwZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGltZSB0aGF0IHRoZSBidWZmZXIgaXMgc2NoZWR1bGVkIHRvIHN0b3AuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gLTE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gbm9kZSB3aGljaCBlbnZlbG9wZXMgdGhlIEJ1ZmZlclNvdXJjZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBidWZmZXIgc291cmNlXG5cdFx0XHQgKiAgQHR5cGUgIHtBdWRpb0J1ZmZlclNvdXJjZU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UuY29ubmVjdCh0aGlzLl9nYWluTm9kZSk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLm9uZW5kZWQgPSB0aGlzLl9vbmVuZGVkLmJpbmQodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcHJpdmF0ZSBidWZmZXIgaW5zdGFuY2Vcblx0XHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIob3B0aW9ucy5idWZmZXIsIG9wdGlvbnMub25sb2FkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGxheWJhY2tSYXRlIG9mIHRoZSBidWZmZXJcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9zb3VyY2UucGxheWJhY2tSYXRlLCBUb25lLlR5cGUuUG9zaXRpdmUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlSW4gdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlSW4gPSBvcHRpb25zLmZhZGVJbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZU91dCB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVPdXQgPSBvcHRpb25zLmZhZGVPdXQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY3VydmUgYXBwbGllZCB0byB0aGUgZmFkZXMsIGVpdGhlciBcImxpbmVhclwiIG9yIFwiZXhwb25lbnRpYWxcIlxuXHRcdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY3VydmUgPSBvcHRpb25zLmN1cnZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB0aGF0IHRoZSBidWZmZXIgcmFtcHMgdG9cblx0XHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IDE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgb25lbmRlZCB0aW1lb3V0XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uZW5kZWRUaW1lb3V0ID0gLTE7XG5cdCAgICAgICAgLy9zZXQgc29tZSB2YWx1ZXMgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5sb29wID0gb3B0aW9ucy5sb29wO1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gb3B0aW9ucy5sb29wU3RhcnQ7XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gb3B0aW9ucy5sb29wRW5kO1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlLnZhbHVlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CdWZmZXJTb3VyY2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29uZW5kZWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogMCxcblx0ICAgICAgICAnZmFkZUluJzogMCxcblx0ICAgICAgICAnZmFkZU91dCc6IDAsXG5cdCAgICAgICAgJ2N1cnZlJzogJ2xpbmVhcicsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBwbGF5YmFjayBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gdGVzdCB0aGUgc3RhdGUgYXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuU3RhdGV9ICBUaGUgcGxheWJhY2sgc3RhdGUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLmdldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEgJiYgdGltZSA+PSB0aGlzLl9zdGFydFRpbWUgJiYgIXRoaXMuX3NvdXJjZVN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RhcnRlZDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbc3RhcnRUaW1lPW5vd10gV2hlbiB0aGUgcGxheWVyIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW29mZnNldD0wXSBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBzYW1wbGUgc2hvdWxkIHBsYXkuIElmIG5vIGR1cmF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdpdmVuLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZ1bGwgbGVuZ3RoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzYW1wbGUgKG1pbnVzIGFueSBvZmZzZXQpXG5cdFx0ICogIEBwYXJhbSAge0dhaW59ICBbZ2Fpbj0xXSAgVGhlIGdhaW4gdG8gcGxheSB0aGUgYnVmZmVyIGJhY2sgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgZmFkZUluVGltZSAgVGhlIG9wdGlvbmFsIGZhZGVJbiByYW1wIHRpbWUuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlclNvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uLCBnYWluLCBmYWRlSW5UaW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkJ1ZmZlclNvdXJjZSBjYW4gb25seSBiZSBzdGFydGVkIG9uY2UuJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghdGhpcy5idWZmZXIubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJTb3VyY2U6IGJ1ZmZlciBpcyBlaXRoZXIgbm90IHNldCBvciBub3QgbG9hZGVkLicpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy9pZiBpdCdzIGEgbG9vcCB0aGUgZGVmYXVsdCBvZmZzZXQgaXMgdGhlIGxvb3BzdGFydCBwb2ludFxuXHQgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgdGhpcy5sb29wU3RhcnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IG9mZnNldCBpcyAwXG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgIGdhaW4gPSBUb25lLmRlZmF1bHRBcmcoZ2FpbiwgMSk7XG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IGdhaW47XG5cdCAgICAgICAgZmFkZUluVGltZSA9IHRoaXMudG9TZWNvbmRzKFRvbmUuZGVmYXVsdEFyZyhmYWRlSW5UaW1lLCB0aGlzLmZhZGVJbikpO1xuXHQgICAgICAgIHRoaXMuZmFkZUluID0gZmFkZUluVGltZTtcblx0ICAgICAgICBpZiAoZmFkZUluVGltZSA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuY3VydmUgPT09ICdsaW5lYXInKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMuX2dhaW4sIHRpbWUgKyBmYWRlSW5UaW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKHRoaXMuX2dhaW4sIHRpbWUsIGZhZGVJblRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZShnYWluLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gdGltZTtcblx0ICAgICAgICB2YXIgY29tcHV0ZWREdXIgPSB0aGlzLnRvU2Vjb25kcyhUb25lLmRlZmF1bHRBcmcoZHVyYXRpb24sIHRoaXMuYnVmZmVyLmR1cmF0aW9uIC0gb2Zmc2V0ICUgdGhpcy5idWZmZXIuZHVyYXRpb24pKTtcblx0ICAgICAgICBjb21wdXRlZER1ciA9IE1hdGgubWF4KGNvbXB1dGVkRHVyLCAwKTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoZHVyYXRpb24pKSB7XG5cdCAgICAgICAgICAgIC8vY2xpcCB0aGUgZHVyYXRpb24gd2hlbiBub3QgbG9vcGluZ1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAgICAgY29tcHV0ZWREdXIgPSBNYXRoLm1pbihjb21wdXRlZER1ciwgdGhpcy5idWZmZXIuZHVyYXRpb24gLSBvZmZzZXQgJSB0aGlzLmJ1ZmZlci5kdXJhdGlvbik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHRpbWUgKyBjb21wdXRlZER1ciwgdGhpcy5mYWRlT3V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zdGFydCB0aGUgYnVmZmVyIHNvdXJjZVxuXHQgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgLy9tb2RpZnkgdGhlIG9mZnNldCBpZiBpdCdzIGdyZWF0ZXIgdGhhbiB0aGUgbG9vcCB0aW1lXG5cdCAgICAgICAgICAgIHZhciBsb29wRW5kID0gdGhpcy5sb29wRW5kIHx8IHRoaXMuYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgICAgICB2YXIgbG9vcFN0YXJ0ID0gdGhpcy5sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIHZhciBsb29wRHVyYXRpb24gPSBsb29wRW5kIC0gbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAvL21vdmUgdGhlIG9mZnNldCBiYWNrXG5cdCAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gbG9vcEVuZCkge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gKG9mZnNldCAtIGxvb3BTdGFydCkgJSBsb29wRHVyYXRpb24gKyBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLmdldCgpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wRW5kID0gdGhpcy5sb29wRW5kIHx8IHRoaXMuYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgIGlmIChvZmZzZXQgPCB0aGlzLmJ1ZmZlci5kdXJhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLnN0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBidWZmZXIuIE9wdGlvbmFsbHkgYWRkIGEgcmFtcCB0aW1lIHRvIGZhZGUgdGhlXG5cdFx0ICogIGJ1ZmZlciBvdXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgdGltZSAgICAgICAgIFRoZSB0aW1lIHRoZSBidWZmZXIgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgZmFkZU91dFRpbWUgIEhvdyBsb25nIHRoZSBnYWluIHNob3VsZCBmYWRlIG91dCBmb3Jcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSwgZmFkZU91dFRpbWUpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuYnVmZmVyLmxvYWRlZCkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyU291cmNlOiBidWZmZXIgaXMgZWl0aGVyIG5vdCBzZXQgb3Igbm90IGxvYWRlZC4nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy9pZiB0aGUgZXZlbnQgaGFzIGFscmVhZHkgYmVlbiBzY2hlZHVsZWQsIGNsZWFyIGl0XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0b3BUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zdG9wIGlmIGl0J3Mgc2NoZWR1bGUgYmVmb3JlIHRoZSBzdGFydCB0aW1lXG5cdCAgICAgICAgaWYgKHRpbWUgPD0gdGhpcy5fc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnZhbHVlID0gMDtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSBNYXRoLm1heCh0aGlzLl9zdGFydFRpbWUgKyB0aGlzLmZhZGVJbiArIHRoaXMuc2FtcGxlVGltZSwgdGltZSk7XG5cdCAgICAgICAgLy9jYW5jZWwgdGhlIHByZXZpb3VzIGN1cnZlXG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSB0aW1lO1xuXHQgICAgICAgIC8vdGhlIGZhZGVPdXQgdGltZVxuXHQgICAgICAgIGZhZGVPdXRUaW1lID0gdGhpcy50b1NlY29uZHMoVG9uZS5kZWZhdWx0QXJnKGZhZGVPdXRUaW1lLCB0aGlzLmZhZGVPdXQpKTtcblx0ICAgICAgICB2YXIgaGVsZER1cmF0aW9uID0gdGltZSAtIHRoaXMuX3N0YXJ0VGltZSAtIHRoaXMuZmFkZUluIC0gdGhpcy5zYW1wbGVUaW1lO1xuXHQgICAgICAgIGlmICghdGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgIC8vbWFrZSBzdXJlIHRoZSBmYWRlIGRvZXMgbm90IGdvIGJleW9uZCB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXJcblx0ICAgICAgICAgICAgaGVsZER1cmF0aW9uID0gTWF0aC5taW4oaGVsZER1cmF0aW9uLCB0aGlzLmJ1ZmZlci5kdXJhdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZhZGVPdXRUaW1lID0gTWF0aC5taW4oaGVsZER1cmF0aW9uLCBmYWRlT3V0VGltZSk7XG5cdCAgICAgICAgdmFyIHN0YXJ0RmFkZSA9IHRpbWUgLSBmYWRlT3V0VGltZTtcblx0ICAgICAgICBpZiAoZmFkZU91dFRpbWUgPiB0aGlzLnNhbXBsZVRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSh0aGlzLl9nYWluLCBzdGFydEZhZGUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5jdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSgwLCBzdGFydEZhZGUsIGZhZGVPdXRUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fb25lbmRlZFRpbWVvdXQpO1xuXHQgICAgICAgIHRoaXMuX29uZW5kZWRUaW1lb3V0ID0gVG9uZS5jb250ZXh0LnNldFRpbWVvdXQodGhpcy5fb25lbmRlZC5iaW5kKHRoaXMpLCB0aGlzLl9zdG9wVGltZSAtIHRoaXMubm93KCkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYSBzY2hlZHVsZWQgc3RvcCBldmVudFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuY2FuY2VsU3RvcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSAmJiAhdGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCB0aGUgc3RvcCBlbnZlbG9wZVxuXHQgICAgICAgICAgICB2YXIgZmFkZUluVGltZSA9IHRoaXMudG9TZWNvbmRzKHRoaXMuZmFkZUluKTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGhpcy5fc3RhcnRUaW1lICsgZmFkZUluVGltZSArIHRoaXMuc2FtcGxlVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgTWF0aC5tYXgodGhpcy5ub3coKSwgdGhpcy5fc3RhcnRUaW1lICsgZmFkZUluVGltZSArIHRoaXMuc2FtcGxlVGltZSkpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX29uZW5kZWRUaW1lb3V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGNhbGxiYWNrIHdoZW4gdGhlIGJ1ZmZlciBpcyBlbmRlZC5cblx0XHQgKiAgSW52b2tlcyBgb25lbmRlZGAgYW5kIGRpc3Bvc2VzIHRoZSBub2RlLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLl9vbmVuZGVkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdG9wcGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgLy9hbGxvdyBhZGRpdGlvbmFsIHRpbWUgZm9yIHRoZSBleHBvbmVudGlhbCBjdXJ2ZSB0byBmdWxseSBkZWNheVxuXHQgICAgICAgICAgICB2YXIgYWRkaXRpb25hbFRhaWwgPSB0aGlzLmN1cnZlID09PSAnZXhwb25lbnRpYWwnID8gdGhpcy5mYWRlT3V0ICogMiA6IDA7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VTdGFydGVkICYmIHRoaXMuX3N0b3BUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlLnN0b3AodGhpcy5fc3RvcFRpbWUgKyBhZGRpdGlvbmFsVGFpbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5vbmVuZGVkKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgc3RhcnQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLmxvb3BTdGFydDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UubG9vcFN0YXJ0ID0gdGhpcy50b1NlY29uZHMobG9vcFN0YXJ0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBlbmQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UubG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLmxvb3BFbmQgPSB0aGlzLnRvU2Vjb25kcyhsb29wRW5kKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhdWRpbyBidWZmZXIgYmVsb25naW5nIHRvIHRoZSBwbGF5ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHQgKiBAbmFtZSBidWZmZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdidWZmZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChidWZmZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlciBzaG91bGQgbG9vcCBvbmNlIGl0J3Mgb3Zlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9vcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UubG9vcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3ApIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLmxvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB0aGlzLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5vbmVuZGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gLTE7XG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fb25lbmRlZFRpbWVvdXQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkJ1ZmZlclNvdXJjZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk5vaXNlIGlzIGEgbm9pc2UgZ2VuZXJhdG9yLiBJdCB1c2VzIGxvb3BlZCBub2lzZSBidWZmZXJzIHRvIHNhdmUgb24gcGVyZm9ybWFuY2UuXG5cdFx0ICogICAgICAgICAgVG9uZS5Ob2lzZSBzdXBwb3J0cyB0aGUgbm9pc2UgdHlwZXM6IFwicGlua1wiLCBcIndoaXRlXCIsIGFuZCBcImJyb3duXCIuIFJlYWQgbW9yZSBhYm91dFxuXHRcdCAqICAgICAgICAgIGNvbG9ycyBvZiBub2lzZSBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db2xvcnNfb2Zfbm9pc2UpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfSB0eXBlIHRoZSBub2lzZSB0eXBlICh3aGl0ZXxwaW5rfGJyb3duKVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaW5pdGlhbGl6ZSB0aGUgbm9pc2UgYW5kIHN0YXJ0XG5cdFx0ICogdmFyIG5vaXNlID0gbmV3IFRvbmUuTm9pc2UoXCJwaW5rXCIpLnN0YXJ0KCk7XG5cdFx0ICpcblx0XHQgKiAvL21ha2UgYW4gYXV0b2ZpbHRlciB0byBzaGFwZSB0aGUgbm9pc2Vcblx0XHQgKiB2YXIgYXV0b0ZpbHRlciA9IG5ldyBUb25lLkF1dG9GaWx0ZXIoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IFwiOG1cIixcblx0XHQgKiBcdFwibWluXCIgOiA4MDAsXG5cdFx0ICogXHRcIm1heFwiIDogMTUwMDBcblx0XHQgKiB9KS5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0XHQgKlxuXHRcdCAqIC8vY29ubmVjdCB0aGUgbm9pc2Vcblx0XHQgKiBub2lzZS5jb25uZWN0KGF1dG9GaWx0ZXIpO1xuXHRcdCAqIC8vc3RhcnQgdGhlIGF1dG9maWx0ZXIgTEZPXG5cdFx0ICogYXV0b0ZpbHRlci5zdGFydCgpXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndHlwZSddLCBUb25lLk5vaXNlKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyU291cmNlTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGJ1ZmZlclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbm9pc2UuIEFmZmVjdHNcblx0XHRcdCAqICB0aGUgXCJmcmVxdWVuY3lcIiBvZiB0aGUgbm9pc2UuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTm9pc2UsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICpcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnd2hpdGUnLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG5vaXNlLiBDYW4gYmUgXCJ3aGl0ZVwiLCBcImJyb3duXCIsIG9yIFwicGlua1wiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk5vaXNlI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogbm9pc2UudHlwZSA9IFwid2hpdGVcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vaXNlLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSAhPT0gdHlwZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHR5cGUgaW4gX25vaXNlQnVmZmVycykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vaWYgaXQncyBwbGF5aW5nLCBzdG9wIGFuZCByZXN0YXJ0IGl0XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcChub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydChub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5Ob2lzZTogaW52YWxpZCB0eXBlOiAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbm9pc2UuIEFmZmVjdHNcblx0XHQgKiAgdGhlIFwiZnJlcXVlbmN5XCIgb2YgdGhlIG5vaXNlLlxuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBzaWduYWxcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vaXNlLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBpbnRlcm5hbCBzdGFydCBtZXRob2Rcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGJ1ZmZlciA9IF9ub2lzZUJ1ZmZlcnNbdGhpcy5fdHlwZV07XG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKGJ1ZmZlcikuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmxvb3AgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5wbGF5YmFja1JhdGUudmFsdWUgPSB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLnN0YXJ0KHRoaXMudG9TZWNvbmRzKHRpbWUpLCBNYXRoLnJhbmRvbSgpICogKGJ1ZmZlci5kdXJhdGlvbiAtIDAuMDAxKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGludGVybmFsIHN0b3AgbWV0aG9kXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2Uuc3RvcCh0aGlzLnRvU2Vjb25kcyh0aW1lKSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlc3RhcnRzIHRoZSBub2lzZS5cblx0XHQgKiBAcGFyYW0gIHtbdHlwZV19IHRpbWUgW2Rlc2NyaXB0aW9uXVxuXHRcdCAqIEByZXR1cm4ge1t0eXBlXX0gICAgICBbZGVzY3JpcHRpb25dXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL1RPRE8gY291bGQgYmUgb3B0aW1pemVkIGJ5IGNhbmNlbGxpbmcgdGhlIGJ1ZmZlciBzb3VyY2UgJ3N0b3AnXG5cdCAgICAgICAgLy9zdG9wIGFuZCByZXN0YXJ0XG5cdCAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gVEhFIEJVRkZFUlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9Ob2lzZSBidWZmZXIgc3RhdHNcblx0ICAgIHZhciBidWZmZXJMZW5ndGggPSA0NDEwMCAqIDU7XG5cdCAgICB2YXIgY2hhbm5lbHMgPSAyO1xuXHQgICAgLyoqXG5cdFx0ICpcdFRoZSBub2lzZSBhcnJheXMuIEdlbmVyYXRlZCBvbiBpbml0aWFsaXphdGlvbi5cblx0XHQgKiAgYm9ycm93ZWQgaGVhdmlseSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS96YWNoYXJ5ZGVudG9uL25vaXNlLmpzXG5cdFx0ICogIChjKSAyMDEzIFphY2ggRGVudG9uIChNSVQpXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIF9ub2lzZUFycmF5cyA9IHtcblx0ICAgICAgICAncGluayc6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsTnVtID0gMDsgY2hhbm5lbE51bSA8IGNoYW5uZWxzOyBjaGFubmVsTnVtKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJMZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyW2NoYW5uZWxOdW1dID0gY2hhbm5lbDtcblx0ICAgICAgICAgICAgICAgIHZhciBiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNjtcblx0ICAgICAgICAgICAgICAgIGIwID0gYjEgPSBiMiA9IGIzID0gYjQgPSBiNSA9IGI2ID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgd2hpdGUgPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7XG5cdCAgICAgICAgICAgICAgICAgICAgYjAgPSAwLjk5ODg2ICogYjAgKyB3aGl0ZSAqIDAuMDU1NTE3OTtcblx0ICAgICAgICAgICAgICAgICAgICBiMSA9IDAuOTkzMzIgKiBiMSArIHdoaXRlICogMC4wNzUwNzU5O1xuXHQgICAgICAgICAgICAgICAgICAgIGIyID0gMC45NjkgKiBiMiArIHdoaXRlICogMC4xNTM4NTI7XG5cdCAgICAgICAgICAgICAgICAgICAgYjMgPSAwLjg2NjUgKiBiMyArIHdoaXRlICogMC4zMTA0ODU2O1xuXHQgICAgICAgICAgICAgICAgICAgIGI0ID0gMC41NSAqIGI0ICsgd2hpdGUgKiAwLjUzMjk1MjI7XG5cdCAgICAgICAgICAgICAgICAgICAgYjUgPSAtMC43NjE2ICogYjUgLSB3aGl0ZSAqIDAuMDE2ODk4O1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gPSBiMCArIGIxICsgYjIgKyBiMyArIGI0ICsgYjUgKyBiNiArIHdoaXRlICogMC41MzYyO1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gKj0gMC4xMTtcblx0ICAgICAgICAgICAgICAgICAgICAvLyAocm91Z2hseSkgY29tcGVuc2F0ZSBmb3IgZ2FpblxuXHQgICAgICAgICAgICAgICAgICAgIGI2ID0gd2hpdGUgKiAwLjExNTkyNjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuXHQgICAgICAgIH0oKSxcblx0ICAgICAgICAnYnJvd24nOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY2hhbm5lbE51bSA9IDA7IGNoYW5uZWxOdW0gPCBjaGFubmVsczsgY2hhbm5lbE51bSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyTGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlcltjaGFubmVsTnVtXSA9IGNoYW5uZWw7XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFzdE91dCA9IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHdoaXRlID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxO1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gPSAobGFzdE91dCArIDAuMDIgKiB3aGl0ZSkgLyAxLjAyO1xuXHQgICAgICAgICAgICAgICAgICAgIGxhc3RPdXQgPSBjaGFubmVsW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gKj0gMy41OyAgICAvLyAocm91Z2hseSkgY29tcGVuc2F0ZSBmb3IgZ2FpblxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSgpLFxuXHQgICAgICAgICd3aGl0ZSc6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsTnVtID0gMDsgY2hhbm5lbE51bSA8IGNoYW5uZWxzOyBjaGFubmVsTnVtKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJMZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyW2NoYW5uZWxOdW1dID0gY2hhbm5lbDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2ldID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSgpXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICpcdHN0YXRpYyBub2lzZSBidWZmZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdCAqL1xuXHQgICAgdmFyIF9ub2lzZUJ1ZmZlcnMgPSB7fTtcblx0ICAgIC8vY3JlYXRlIHRoZSBUb25lLkJ1ZmZlcnNcblx0ICAgIGZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlcnMoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgdHlwZSBpbiBfbm9pc2VBcnJheXMpIHtcblx0ICAgICAgICAgICAgX25vaXNlQnVmZmVyc1t0eXBlXSA9IG5ldyBUb25lLkJ1ZmZlcigpLmZyb21BcnJheShfbm9pc2VBcnJheXNbdHlwZV0pO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0ICAgIC8vY3JlYXRlIHRoZSBub2lzZSBidWZmZXJzXG5cdCAgICBUb25lLmdldENvbnRleHQoY3JlYXRlQnVmZmVycyk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBjcmVhdGVCdWZmZXJzKTtcblx0ICAgIHJldHVybiBUb25lLk5vaXNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU2ltcGxlIGNvbnZvbHV0aW9uIGNyZWF0ZWQgd2l0aCBkZWNheWluZyBub2lzZS5cblx0XHQgKiAgXHRcdEdlbmVyYXRlcyBhbiBJbXB1bHNlIFJlc3BvbnNlIEJ1ZmZlclxuXHRcdCAqIFx0XHRcdHdpdGggVG9uZS5PZmZsaW5lIHRoZW4gZmVlZHMgdGhlIElSIGludG8gQ29udm9sdmVyTm9kZS5cblx0XHQgKiBcdFx0XHROb3RlOiB0aGUgUmV2ZXJiIHdpbGwgbm90IG1ha2UgYW55IHNvdW5kIHVudGlsIFtnZW5lcmF0ZV0oI2dlbmVyYXRlKVxuXHRcdCAqIFx0XHRcdGhhcyBiZWVuIGludm9rZWQgYW5kIHJlc29sdmVkLlxuXHRcdCAqXG5cdFx0ICogXHRcdFx0SW5zcGlyYXRpb24gZnJvbSBbUmV2ZXJiR2VuXShodHRwczovL2dpdGh1Yi5jb20vYWRlbGVzcGluYXNzZS9yZXZlcmJHZW4pLlxuXHRcdCAqIFx0XHRcdENvcHlyaWdodCAoYykgMjAxNCBBbGFuIGRlTGVzcGluYXNzZSBBcGFjaGUgMi4wIExpY2Vuc2UuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQ29udm9sdmVyfVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBkZWNheSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCByZXZlcmJlcmF0ZSBmb3IuXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2RlY2F5J10sIFRvbmUuUmV2ZXJiKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENvbnZvbHZlciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0NvbnZvbHZlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVDb252b2x2ZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgcmV2ZXJiXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVjYXkgPSBvcHRpb25zLmRlY2F5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtb3VudCBvZiB0aW1lIGJlZm9yZSB0aGUgcmV2ZXJiIGlzIGZ1bGx5XG5cdFx0XHQgKiByYW1wZWQgaW4uXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucHJlRGVsYXkgPSBvcHRpb25zLnByZURlbGF5O1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9jb252b2x2ZXIpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUmV2ZXJiLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuUmV2ZXJiLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWNheSc6IDEuNSxcblx0ICAgICAgICAncHJlRGVsYXknOiAwLjAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2VuZXJhdGUgdGhlIEltcHVsc2UgUmVzcG9uc2UuIFJldHVybnMgYSBwcm9taXNlIHdoaWxlIHRoZSBJUiBpcyBiZWluZ1xuXHRcdCAqIGdlbmVyYXRlZC5cblx0XHQgKiBAcmV0dXJuIHtQcm9taXNlPFRvbmUuUmV2ZXJiPn0gUHJvbWlzZSB3aGljaCByZXR1cm5zIHRoaXMgb2JqZWN0LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLk9mZmxpbmUoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvL2NyZWF0ZSBhIG5vaXNlIGJ1cnN0IHdoaWNoIGRlY2F5cyBvdmVyIHRoZSBkdXJhdGlvblxuXHQgICAgICAgICAgICB2YXIgbm9pc2VMID0gbmV3IFRvbmUuTm9pc2UoKTtcblx0ICAgICAgICAgICAgdmFyIG5vaXNlUiA9IG5ldyBUb25lLk5vaXNlKCk7XG5cdCAgICAgICAgICAgIHZhciBtZXJnZSA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgICAgIG5vaXNlTC5jb25uZWN0KG1lcmdlLmxlZnQpO1xuXHQgICAgICAgICAgICBub2lzZVIuY29ubmVjdChtZXJnZS5yaWdodCk7XG5cdCAgICAgICAgICAgIHZhciBnYWluTm9kZSA9IG5ldyBUb25lLkdhaW4oKS50b01hc3RlcigpO1xuXHQgICAgICAgICAgICBtZXJnZS5jb25uZWN0KGdhaW5Ob2RlKTtcblx0ICAgICAgICAgICAgbm9pc2VMLnN0YXJ0KDApO1xuXHQgICAgICAgICAgICBub2lzZVIuc3RhcnQoMCk7XG5cdCAgICAgICAgICAgIC8vc2hvcnQgZmFkZSBpblxuXHQgICAgICAgICAgICBnYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIDApO1xuXHQgICAgICAgICAgICBnYWluTm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKDEsIHRoaXMucHJlRGVsYXkpO1xuXHQgICAgICAgICAgICAvL2RlY2F5XG5cdCAgICAgICAgICAgIGdhaW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKDAsIHRoaXMucHJlRGVsYXksIHRoaXMuZGVjYXkgLSB0aGlzLnByZURlbGF5KTtcblx0ICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMuZGVjYXkpLnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9jb252b2x2ZXIuYnVmZmVyID0gYnVmZmVyLmdldCgpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUmV2ZXJifSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUmV2ZXJiO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQmFzZSBjbGFzcyBmb3Igc3RlcmVvIGZlZWRiYWNrIGVmZmVjdHMgd2hlcmUgdGhlIGVmZmVjdFJldHVyblxuXHRcdCAqICAgICAgICAgaXMgZmVkIGJhY2sgaW50byB0aGUgc2FtZSBjaGFubmVsLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZmVlZGJhY2snXSwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb250cm9scyB0aGUgYW1vdW50IG9mIGZlZWRiYWNrXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mZWVkYmFjaywgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGVmdCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0wgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHJpZ2h0IHNpZGUgZmVlYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwuY2hhaW4odGhpcy5fZmVlZGJhY2tMLCB0aGlzLmVmZmVjdFNlbmRMKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIuY2hhaW4odGhpcy5fZmVlZGJhY2tSLCB0aGlzLmVmZmVjdFNlbmRSKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmZhbih0aGlzLl9mZWVkYmFja0wuZ2FpbiwgdGhpcy5fZmVlZGJhY2tSLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZmVlZGJhY2snXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9GZWVkYmFja0VmZmVjdCwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydmZWVkYmFjayddKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1IgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQXBwbGllcyBhIHdpZHRoIGZhY3RvciB0byB0aGUgbWlkL3NpZGUgc2VwZXJhdGlvbi5cblx0XHQgKiAgICAgICAgIDAgaXMgYWxsIG1pZCBhbmQgMSBpcyBhbGwgc2lkZS5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmb3VuZCBpbiBba3ZyYXVkaW8gZm9ydW1zXShodHRwOi8vd3d3Lmt2cmF1ZGlvLmNvbS9mb3J1bS92aWV3dG9waWMucGhwP3Q9MjEyNTg3KS5cblx0XHQgKiAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICA8Y29kZT5cblx0XHQgKiAgICAgICAgIE1pZCAqPSAyKigxLXdpZHRoKTxicj5cblx0XHQgKiAgICAgICAgIFNpZGUgKj0gMip3aWR0aFxuXHRcdCAqICAgICAgICAgPC9jb2RlPlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1pZFNpZGVFZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3dpZHRoXSBUaGUgc3RlcmVvIHdpZHRoLiBBIHdpZHRoIG9mIDAgaXMgbW9ubyBhbmQgMSBpcyBzdGVyZW8uIDAuNSBpcyBubyBjaGFuZ2UuXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1dpZGVuZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd3aWR0aCddLCBUb25lLlN0ZXJlb1dpZGVuZXIpO1xuXHQgICAgICAgIFRvbmUuTWlkU2lkZUVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3aWR0aCBjb250cm9sLiAwID0gMTAwJSBtaWQuIDEgPSAxMDAlIHNpZGUuIDAuNSA9IG5vIGNoYW5nZS5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy53aWR0aCA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLndpZHRoLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnd2lkdGgnXSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUd28gdGltZXMgdGhlICgxLXdpZHRoKSBmb3IgdGhlIG1pZCBjaGFubmVsXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoTWlkID0gbmV3IFRvbmUuTXVsdGlwbHkoMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUd28gdGltZXMgdGhlIHdpZHRoIGZvciB0aGUgc2lkZSBjaGFubmVsXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoU2lkZSA9IG5ldyBUb25lLk11bHRpcGx5KDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE1pZCBtdWx0aXBsaWVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZE11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQuY29ubmVjdCh0aGlzLl9taWRNdWx0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLm1pZFNlbmQuY2hhaW4odGhpcy5fbWlkTXVsdCwgdGhpcy5taWRSZXR1cm4pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogMSAtIHdpZHRoXG5cdFx0XHQgKiBAdHlwZSB7VG9uZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uZU1pbnVzV2lkdGggPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIHRoaXMuX29uZU1pbnVzV2lkdGguY29ubmVjdCh0aGlzLl90d29UaW1lc1dpZHRoTWlkKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29uc3RhbnQoMSkuY29ubmVjdCh0aGlzLl9vbmVNaW51c1dpZHRoLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmNvbm5lY3QodGhpcy5fb25lTWludXNXaWR0aCwgMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2lkZSBtdWx0aXBsaWVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NpZGVNdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmNvbm5lY3QodGhpcy5fdHdvVGltZXNXaWR0aFNpZGUpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlLmNvbm5lY3QodGhpcy5fc2lkZU11bHQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuc2lkZVNlbmQuY2hhaW4odGhpcy5fc2lkZU11bHQsIHRoaXMuc2lkZVJldHVybik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9XaWRlbmVyLCBUb25lLk1pZFNpZGVFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1dpZGVuZXIuZGVmYXVsdHMgPSB7ICd3aWR0aCc6IDAuNSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9XaWRlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1dpZGVuZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5NaWRTaWRlRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd3aWR0aCddKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLndpZHRoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRNdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRNdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zaWRlTXVsdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2lkZU11bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoU2lkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvV2lkZW5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVHJlbW9sbyBtb2R1bGF0ZXMgdGhlIGFtcGxpdHVkZSBvZiBhbiBpbmNvbWluZyBzaWduYWwgdXNpbmcgYSBUb25lLkxGTy5cblx0XHQgKiAgICAgICAgIFRoZSB0eXBlLCBmcmVxdWVuY3ksIGFuZCBkZXB0aCBvZiB0aGUgTEZPIGlzIGNvbnRyb2xsYWJsZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2ZyZXF1ZW5jeV0gVGhlIHJhdGUgb2YgdGhlIGVmZmVjdC5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW2RlcHRoXSBUaGUgZGVwdGggb2YgdGhlIGVmZmVjdC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhIHRyZW1vbG8gYW5kIHN0YXJ0IGl0J3MgTEZPXG5cdFx0ICogdmFyIHRyZW1vbG8gPSBuZXcgVG9uZS5UcmVtb2xvKDksIDAuNzUpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKiAvL3JvdXRlIGFuIG9zY2lsbGF0b3IgdGhyb3VnaCB0aGUgdHJlbW9sbyBhbmQgc3RhcnQgaXRcblx0XHQgKiB2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KHRyZW1vbG8pLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuVHJlbW9sbyk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHJlbWVsbyBMRk8gaW4gdGhlIGxlZnQgY2hhbm5lbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAncGhhc2UnOiBvcHRpb25zLnNwcmVhZCxcblx0ICAgICAgICAgICAgJ21pbic6IDEsXG5cdCAgICAgICAgICAgICdtYXgnOiAwXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRyZW1lbG8gTEZPIGluIHRoZSBsZWZ0IGNoYW5uZWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9SID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ3BoYXNlJzogb3B0aW9ucy5zcHJlYWQsXG5cdCAgICAgICAgICAgICdtaW4nOiAxLFxuXHQgICAgICAgICAgICAnbWF4JzogMFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZXJlIHRoZSBnYWluIGlzIG11bHRpcGxpZWRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlTCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVyZSB0aGUgZ2FpbiBpcyBtdWx0aXBsaWVkXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVkZVIgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgdHJlbW9sby5cblx0XHRcdCAqICBAdHlwZSAge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlcHRoIG9mIHRoZSBlZmZlY3QuIEEgZGVwdGggb2YgMCwgaGFzIG5vIGVmZmVjdFxuXHRcdFx0ICogIG9uIHRoZSBhbXBsaXR1ZGUsIGFuZCBhIGRlcHRoIG9mIDEgbWFrZXMgdGhlIGFtcGxpdHVkZVxuXHRcdFx0ICogIG1vZHVsYXRlIGZ1bGx5IGJldHdlZW4gMCBhbmQgMS5cblx0XHRcdCAqICBAdHlwZSAge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXB0aCwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbih0aGlzLl9hbXBsaXR1ZGVMLCB0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4odGhpcy5fYW1wbGl0dWRlUiwgdGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICB0aGlzLl9sZm9MLmNvbm5lY3QodGhpcy5fYW1wbGl0dWRlTC5nYWluKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLmNvbm5lY3QodGhpcy5fYW1wbGl0dWRlUi5nYWluKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5mYW4odGhpcy5fbGZvTC5mcmVxdWVuY3ksIHRoaXMuX2xmb1IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmRlcHRoLmZhbih0aGlzLl9sZm9SLmFtcGxpdHVkZSwgdGhpcy5fbGZvTC5hbXBsaXR1ZGUpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLnNwcmVhZCA9IG9wdGlvbnMuc3ByZWFkO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJlbW9sbywgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDEwLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdkZXB0aCc6IDAuNSxcblx0ICAgICAgICAnc3ByZWFkJzogMTgwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RhcnQgdGhlIHRyZW1vbG8uXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHRyZW1vbG8gYmVnaW5zLlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIHRoZSB0cmVtb2xvLlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSB0cmVtb2xvIHN0b3BzLlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBlZmZlY3QgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFtkZWxheT0wXSBEZWxheSB0aW1lIGJlZm9yZSBzdGFydGluZyB0aGUgZWZmZWN0IGFmdGVyIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IGhhcyBzdGFydGVkLlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uIChkZWxheSkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3luYyhkZWxheSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zeW5jKGRlbGF5KTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIGZpbHRlciBmcm9tIHRoZSB0cmFuc3BvcnRcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5UcmVtb2xvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9sZm9MLnVuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IudW5zeW5jKCk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQudW5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgVHJlbW9sbydzIG9zY2lsbGF0b3IgdHlwZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmVtb2xvI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJlbW9sby5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvTC50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQW1vdW50IG9mIHN0ZXJlbyBzcHJlYWQuIFdoZW4gc2V0IHRvIDAsIGJvdGggTEZPJ3Mgd2lsbCBiZSBwYW5uZWQgY2VudHJhbGx5LlxuXHRcdCAqIFdoZW4gc2V0IHRvIDE4MCwgTEZPJ3Mgd2lsbCBiZSBwYW5uZWQgaGFyZCBsZWZ0IGFuZCByaWdodCByZXNwZWN0aXZlbHkuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVHJlbW9sbyNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyZW1vbG8ucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvUi5waGFzZSAtIHRoaXMuX2xmb0wucGhhc2U7ICAgIC8vMTgwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5waGFzZSA9IDkwIC0gc3ByZWFkIC8gMjtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5waGFzZSA9IHNwcmVhZCAvIDIgKyA5MDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmVtb2xvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyZW1vbG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIFZpYnJhdG8gZWZmZWN0IGNvbXBvc2VkIG9mIGEgVG9uZS5EZWxheSBhbmQgYSBUb25lLkxGTy4gVGhlIExGT1xuXHRcdCAqICAgICAgICAgbW9kdWxhdGVzIHRoZSBkZWxheVRpbWUgb2YgdGhlIGRlbGF5LCBjYXVzaW5nIHRoZSBwaXRjaCB0byByaXNlXG5cdFx0ICogICAgICAgICBhbmQgZmFsbC4gXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgZnJlcXVlbmN5IG9mIHRoZSB2aWJyYXRvLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBkZXB0aCBUaGUgYW1vdW50IHRoZSBwaXRjaCBpcyBtb2R1bGF0ZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlZpYnJhdG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuVmlicmF0byk7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXkgbm9kZSB1c2VkIGZvciB0aGUgdmlicmF0byBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIExGTyB1c2VkIHRvIGNvbnRyb2wgdGhlIHZpYnJhdG9cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICd0eXBlJzogb3B0aW9ucy50eXBlLFxuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IG9wdGlvbnMubWF4RGVsYXksXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogLTkwICAgIC8vb2Zmc2UgdGhlIHBoYXNlIHNvIHRoZSByZXN0aW5nIHBvc2l0aW9uIGlzIGluIHRoZSBjZW50ZXJcblx0ICAgICAgICB9KS5zdGFydCgpLmNvbm5lY3QodGhpcy5fZGVsYXlOb2RlLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgdmlicmF0b1xuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXB0aCBvZiB0aGUgdmlicmF0by4gXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9sZm8uYW1wbGl0dWRlO1xuXHQgICAgICAgIHRoaXMuZGVwdGgudmFsdWUgPSBvcHRpb25zLmRlcHRoO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4odGhpcy5fZGVsYXlOb2RlLCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5WaWJyYXRvLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuVmlicmF0by5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWF4RGVsYXknOiAwLjAwNSxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNSxcblx0ICAgICAgICAnZGVwdGgnOiAwLjEsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUeXBlIG9mIG9zY2lsbGF0b3IgYXR0YWNoZWQgdG8gdGhlIFZpYnJhdG8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVmlicmF0byNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlZpYnJhdG8ucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmby50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8udHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlZpYnJhdG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVmlicmF0by5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5WaWJyYXRvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRXZlbnQgYWJzdHJhY3RzIGF3YXkgVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUgYW5kIHByb3ZpZGVzIGEgc2NoZWR1bGFibGVcblx0XHQgKiAgICAgICAgICBjYWxsYmFjayBmb3IgYSBzaW5nbGUgb3IgcmVwZWF0YWJsZSBldmVudHMgYWxvbmcgdGhlIHRpbWVsaW5lLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGF0IHRoZSB0aW1lLlxuXHRcdCAqICBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSBvciB2YWx1ZXMgd2hpY2ggc2hvdWxkIGJlIHBhc3NlZCB0b1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBvbiBpbnZvY2F0aW9uLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjaG9yZCA9IG5ldyBUb25lLkV2ZW50KGZ1bmN0aW9uKHRpbWUsIGNob3JkKXtcblx0XHQgKiBcdC8vdGhlIGNob3JkIGFzIHdlbGwgYXMgdGhlIGV4YWN0IHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogXHQvL2FyZSBwYXNzZWQgaW4gYXMgYXJndW1lbnRzIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvblxuXHRcdCAqIH0sIFtcIkQ0XCIsIFwiRTRcIiwgXCJGNFwiXSk7XG5cdFx0ICogLy9zdGFydCB0aGUgY2hvcmQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJhbnNwb3J0IHRpbWVsaW5lXG5cdFx0ICogY2hvcmQuc3RhcnQoKTtcblx0XHQgKiAvL2xvb3AgaXQgZXZlcnkgbWVhc3VyZSBmb3IgOCBtZWFzdXJlc1xuXHRcdCAqIGNob3JkLmxvb3AgPSA4O1xuXHRcdCAqIGNob3JkLmxvb3BFbmQgPSBcIjFtXCI7XG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ3ZhbHVlJ1xuXHQgICAgICAgIF0sIFRvbmUuRXZlbnQpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBMb29wIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUgIHtCb29sZWFufFBvc2l0aXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wID0gb3B0aW9ucy5sb29wO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2UuXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB3aGljaCBpcyBwYXNzZWQgdG8gdGhlXG5cdFx0XHQgKiAgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdFx0XHQgKiAgQHR5cGUgIHsqfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVuIHRoZSBub3RlIGlzIHNjaGVkdWxlZCB0byBzdGFydC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKG9wdGlvbnMubG9vcFN0YXJ0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVuIHRoZSBub3RlIGlzIHNjaGVkdWxlZCB0byBzdGFydC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhvcHRpb25zLmxvb3BFbmQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRyYWNrcyB0aGUgc2NoZWR1bGVkIGV2ZW50c1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGUgbm90ZS4gQSBzcGVlZCBvZiAxXG5cdFx0XHQgKiAgaXMgbm8gY2hhbmdlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGRlbGF5IHRpbWUgZnJvbSB3aGVuIHRoZSBldmVudCBpcyBzY2hlZHVsZWQgdG8gc3RhcnRcblx0XHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0T2Zmc2V0ID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBwcml2YXRlIGhvbGRlciBvZiBwcm9iYWJpbGl0eSB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcHJvYmFiaWxpdHkgPSBvcHRpb25zLnByb2JhYmlsaXR5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhbW91bnQgb2YgdmFyaWF0aW9uIGZyb20gdGhlXG5cdFx0XHQgKiAgZ2l2ZW4gdGltZS5cblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9odW1hbml6ZSA9IG9wdGlvbnMuaHVtYW5pemU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSWYgbXV0ZSBpcyB0cnVlLCB0aGUgY2FsbGJhY2sgd29uJ3QgYmVcblx0XHRcdCAqICBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAnMW0nLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICd2YWx1ZSc6IG51bGwsXG5cdCAgICAgICAgJ3Byb2JhYmlsaXR5JzogMSxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlLFxuXHQgICAgICAgICdodW1hbml6ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlc2NoZWR1bGUgYWxsIG9mIHRoZSBldmVudHMgYWxvbmcgdGhlIHRpbWVsaW5lXG5cdFx0ICogIHdpdGggdGhlIHVwZGF0ZWQgdmFsdWVzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGFmdGVyIE9ubHkgcmVzY2hlZHVsZXMgZXZlbnRzIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLl9yZXNjaGVkdWxlRXZlbnRzID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgLy9pZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgc2NoZWR1bGVzIGFsbCBvZiB0aGUgZXZlbnRzXG5cdCAgICAgICAgYWZ0ZXIgPSBUb25lLmRlZmF1bHRBcmcoYWZ0ZXIsIC0xKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoRnJvbShhZnRlciwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHZhciBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChldmVudC5pZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB2YXIgc3RhcnRUaWNrID0gZXZlbnQudGltZSArIE1hdGgucm91bmQodGhpcy5zdGFydE9mZnNldCAvIHRoaXMuX3BsYXliYWNrUmF0ZSk7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gSW5maW5pdHk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodGhpcy5fbG9vcCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSB0aGlzLl9sb29wICogdGhpcy5fZ2V0TG9vcER1cmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0RXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXRBZnRlcihzdGFydFRpY2spO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0RXZlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBNYXRoLm1pbihkdXJhdGlvbiwgbmV4dEV2ZW50LnRpbWUgLSBzdGFydFRpY2spO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBpZiAoZHVyYXRpb24gIT09IEluZmluaXR5KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vc2NoZWR1bGUgYSBzdG9wIHNpbmNlIGl0J3MgZmluaXRlIGR1cmF0aW9uXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgc3RhcnRUaWNrICsgZHVyYXRpb24gKyAxKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBUb25lLlRpY2tzKGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGludGVydmFsID0gVG9uZS5UaWNrcyh0aGlzLl9nZXRMb29wRHVyYXRpb24oKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQuaWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZVJlcGVhdCh0aGlzLl90aWNrLmJpbmQodGhpcyksIGludGVydmFsLCBUb25lLlRpY2tzKHN0YXJ0VGljayksIGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQuaWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZSh0aGlzLl90aWNrLmJpbmQodGhpcyksIFRvbmUuVGlja3Moc3RhcnRUaWNrKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgbm90ZSwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnRpY2tzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3RhcnQgZnJvbSB0aGUgc2NoZWR1bGVkIHN0YXJ0IHRpbWVcblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQG5hbWUgc3RhcnRPZmZzZXRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3N0YXJ0T2Zmc2V0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2JhYmlsaXR5IG9mIHRoZSBub3RlcyBiZWluZyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2JhYmlsaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdwcm9iYWJpbGl0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2JhYmlsaXR5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvYikge1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9iYWJpbGl0eSA9IHByb2I7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgc2V0IHRvIHRydWUsIHdpbGwgYXBwbHkgc21hbGwgcmFuZG9tIHZhcmlhdGlvblxuXHRcdCAqICB0byB0aGUgY2FsbGJhY2sgdGltZS4gSWYgdGhlIHZhbHVlIGlzIGdpdmVuIGFzIGEgdGltZSwgaXQgd2lsbCByYW5kb21pemVcblx0XHQgKiAgYnkgdGhhdCBhbW91bnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogZXZlbnQuaHVtYW5pemUgPSB0cnVlO1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdCAqICBAbmFtZSBodW1hbml6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnaHVtYW5pemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9odW1hbml6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhcmlhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9odW1hbml6ZSA9IHZhcmlhdGlvbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIHRpbWUgIFdoZW4gdGhlIG5vdGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAnc3RhdGUnOiBUb25lLlN0YXRlLlN0YXJ0ZWQsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IHRpbWUsXG5cdCAgICAgICAgICAgICAgICAnaWQnOiB1bmRlZmluZWRcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBFdmVudCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIHRpbWUgIFdoZW4gdGhlIG5vdGUgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXNFdmVudCA9IHRoaXMuX3N0YXRlLmdldEJlZm9yZSh0aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHJlc2NoZWR1bFRpbWUgPSB0aW1lO1xuXHQgICAgICAgICAgICBpZiAocHJldmlvdXNFdmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgcmVzY2hlZHVsVGltZSA9IHByZXZpb3VzRXZlbnQudGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKHJlc2NoZWR1bFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGFsbCBzY2hlZHVsZWQgZXZlbnRzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgW3RpbWU9MF0gIFRoZSB0aW1lIGFmdGVyIHdoaWNoIGV2ZW50cyB3aWxsIGJlIGNhbmNlbC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLmRlZmF1bHRBcmcodGltZSwgLUluZmluaXR5KTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hGcm9tKHRpbWUsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlci4gQWxzb1xuXHRcdCAqICBjaGVja3MgaWYgdGhlIEV2ZW50IGlzIGRvbmUgcGxheWluZ1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSBvZiB0aGUgZXZlbnQgaW4gc2Vjb25kc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB0aWNrcyA9IFRvbmUuVHJhbnNwb3J0LmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmICghdGhpcy5tdXRlICYmIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpY2tzKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnByb2JhYmlsaXR5IDwgMSAmJiBNYXRoLnJhbmRvbSgpID4gdGhpcy5wcm9iYWJpbGl0eSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmh1bWFuaXplKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdmFyaWF0aW9uID0gMC4wMjtcblx0ICAgICAgICAgICAgICAgIGlmICghVG9uZS5pc0Jvb2xlYW4odGhpcy5odW1hbml6ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24gPSB0aGlzLnRvU2Vjb25kcyh0aGlzLmh1bWFuaXplKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRpbWUgKz0gKE1hdGgucmFuZG9tKCkgKiAyIC0gMSkgKiB2YXJpYXRpb247XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB0aGlzLnZhbHVlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgZHVyYXRpb24gb2YgdGhlIGxvb3AuXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLl9nZXRMb29wRHVyYXRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoKHRoaXMuX2xvb3BFbmQgLSB0aGlzLl9sb29wU3RhcnQpIC8gdGhpcy5fcGxheWJhY2tSYXRlKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIG5vdGUgc2hvdWxkIGxvb3Agb3Igbm90XG5cdFx0ICogIGJldHdlZW4gVG9uZS5FdmVudC5sb29wU3RhcnQgYW5kXG5cdFx0ICogIFRvbmUuRXZlbnQubG9vcEVuZC4gQW4gaW50ZWdlclxuXHRcdCAqICB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mXG5cdFx0ICogIGxvb3BzIHRoZSBFdmVudCBkb2VzIGFmdGVyIGl0IHN0YXJ0cy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFBvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBsb29wXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdsb29wJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3ApIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0VGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIG5vdGUuIERlZmF1bHRzIHRvIDEuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG5vdGUubG9vcCA9IHRydWU7XG5cdFx0ICogLy9yZXBlYXQgdGhlIG5vdGUgdHdpY2UgYXMgZmFzdFxuXHRcdCAqIG5vdGUucGxheWJhY2tSYXRlID0gMjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBsb29wRW5kIHBvaW50IGlzIHRoZSB0aW1lIHRoZSBldmVudCB3aWxsIGxvb3Bcblx0XHQgKiAgaWYgVG9uZS5FdmVudC5sb29wIGlzIHRydWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcEVuZCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wRW5kKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvVGlja3MobG9vcEVuZCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSB3aGVuIHRoZSBsb29wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcFN0YXJ0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3MobG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IHByb2dyZXNzIG9mIHRoZSBsb29wIGludGVydmFsLlxuXHRcdCAqICBSZXR1cm5zIDAgaWYgdGhlIGV2ZW50IGlzIG5vdCBzdGFydGVkIHlldCBvclxuXHRcdCAqICBpdCBpcyBub3Qgc2V0IHRvIGxvb3AuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2dyZXNzXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAncHJvZ3Jlc3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdGlja3MgPSBUb25lLlRyYW5zcG9ydC50aWNrcztcblx0ICAgICAgICAgICAgICAgIHZhciBsYXN0RXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQodGlja3MpO1xuXHQgICAgICAgICAgICAgICAgaWYgKGxhc3RFdmVudCAhPT0gbnVsbCAmJiBsYXN0RXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBsb29wRHVyYXRpb24gPSB0aGlzLl9nZXRMb29wRHVyYXRpb24oKTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcHJvZ3Jlc3MgPSAodGlja3MgLSBsYXN0RXZlbnQudGltZSkgJSBsb29wRHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2dyZXNzIC8gbG9vcER1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY2FuY2VsKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FdmVudDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkxvb3AgY3JlYXRlcyBhIGxvb3BlZCBjYWxsYmFjayBhdCB0aGUgXG5cdFx0ICogICAgICAgICBzcGVjaWZpZWQgaW50ZXJ2YWwuIFRoZSBjYWxsYmFjayBjYW4gYmUgXG5cdFx0ICogICAgICAgICBzdGFydGVkLCBzdG9wcGVkIGFuZCBzY2hlZHVsZWQgYWxvbmdcblx0XHQgKiAgICAgICAgIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZS4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGxvb3AgPSBuZXcgVG9uZS5Mb29wKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly90cmlnZ2VyZWQgZXZlcnkgZWlnaHRoIG5vdGUuIFxuXHRcdCAqIFx0Y29uc29sZS5sb2codGltZSk7XG5cdFx0ICogfSwgXCI4blwiKS5zdGFydCgwKTtcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydCgpO1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBpbnRlcnZhbCBUaGUgdGltZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbGJhY2sgY2FsbHMuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2ludGVydmFsJ1xuXHQgICAgICAgIF0sIFRvbmUuTG9vcCk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBldmVudCB3aGljaCBwcm9kdWNlcyB0aGUgY2FsbGJhY2tzXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudCA9IG5ldyBUb25lLkV2ZW50KHtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogdGhpcy5fdGljay5iaW5kKHRoaXMpLFxuXHQgICAgICAgICAgICAnbG9vcCc6IHRydWUsXG5cdCAgICAgICAgICAgICdsb29wRW5kJzogb3B0aW9ucy5pbnRlcnZhbCxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IG9wdGlvbnMucGxheWJhY2tSYXRlLFxuXHQgICAgICAgICAgICAncHJvYmFiaWxpdHknOiBvcHRpb25zLnByb2JhYmlsaXR5XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZSBuZXh0IGV2ZW50IGluIHRoZSBwYXR0ZXJuXG5cdFx0XHQgKiAgQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLy9zZXQgdGhlIGl0ZXJhdGlvbnNcblx0ICAgICAgICB0aGlzLml0ZXJhdGlvbnMgPSBvcHRpb25zLml0ZXJhdGlvbnM7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Mb29wKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdpbnRlcnZhbCc6ICc0bicsXG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdpdGVyYXRpb25zJzogSW5maW5pdHksXG5cdCAgICAgICAgJ3Byb2JhYmlsaXR5JzogdHJ1ZSxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBsb29wIGF0IHRoZSBzcGVjaWZpZWQgdGltZSBhbG9uZyB0aGUgVHJhbnNwb3J0J3Ncblx0XHQgKiAgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb249fSAgdGltZSAgV2hlbiB0byBzdGFydCB0aGUgTG9vcC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBsb29wIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9uPX0gIHRpbWUgIFdoZW4gdG8gc3RvcCB0aGUgQXJwZWdnaW9cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGFsbCBzY2hlZHVsZWQgZXZlbnRzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgW3RpbWU9MF0gIFRoZSB0aW1lIGFmdGVyIHdoaWNoIGV2ZW50cyB3aWxsIGJlIGNhbmNlbC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudC5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBub3RlcyBzaG91bGQgYmUgY2FsbGVkXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRoZSBldmVudCBvY2N1cnNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdGF0ZSBvZiB0aGUgTG9vcCwgZWl0aGVyIHN0YXJ0ZWQgb3Igc3RvcHBlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQuc3RhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2dyZXNzIG9mIHRoZSBsb29wIGFzIGEgdmFsdWUgYmV0d2VlbiAwLTEuIDAsIHdoZW5cblx0XHQgKiAgdGhlIGxvb3AgaXMgc3RvcHBlZCBvciBkb25lIGl0ZXJhdGluZy4gXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvZ3Jlc3Ncblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3Byb2dyZXNzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQucHJvZ3Jlc3M7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxiYWNrcy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogbG9vcC5pbnRlcnZhbCA9IFwiOG5cIjsgLy9sb29wIGV2ZXJ5IDhuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBpbnRlcnZhbFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdpbnRlcnZhbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50Lmxvb3BFbmQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5sb29wRW5kID0gaW50ZXJ2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIGxvb3AuIFRoZSBub3JtYWwgcGxheWJhY2sgcmF0ZSBpcyAxIChubyBjaGFuZ2UpLiBcblx0XHQgKiAgQSBgcGxheWJhY2tSYXRlYCBvZiAyIHdvdWxkIGJlIHR3aWNlIGFzIGZhc3QuIFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50LnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQucGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSYW5kb20gdmFyaWF0aW9uICsvLTAuMDFzIHRvIHRoZSBzY2hlZHVsZWQgdGltZS4gXG5cdFx0ICogIE9yIGdpdmUgaXQgYSB0aW1lIHZhbHVlIHdoaWNoIGl0IHdpbGwgcmFuZG9taXplIGJ5LlxuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAbmFtZSBodW1hbml6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdodW1hbml6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50Lmh1bWFuaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFyaWF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmh1bWFuaXplID0gdmFyaWF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcm9iYWJseSBvZiB0aGUgY2FsbGJhY2sgYmVpbmcgaW52b2tlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9iYWJpbGl0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdwcm9iYWJpbGl0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50LnByb2JhYmlsaXR5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvYikge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5wcm9iYWJpbGl0eSA9IHByb2I7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgTXV0aW5nIHRoZSBMb29wIG1lYW5zIHRoYXQgbm8gY2FsbGJhY2tzIGFyZSBpbnZva2VkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgbXV0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBsb29wLiBUaGUgZGVmYXVsdFxuXHRcdCAqICB2YWx1ZSBpcyBJbmZpbml0eSAobG9vcCBmb3JldmVyKS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBpdGVyYXRpb25zXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ2l0ZXJhdGlvbnMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9ldmVudC5sb29wID09PSB0cnVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQubG9vcDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaXRlcnMpIHtcblx0ICAgICAgICAgICAgaWYgKGl0ZXJzID09PSBJbmZpbml0eSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnQubG9vcCA9IHRydWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudC5sb29wID0gaXRlcnM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ldmVudCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTG9vcDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGFydCBpcyBhIGNvbGxlY3Rpb24gVG9uZS5FdmVudHMgd2hpY2ggY2FuIGJlXG5cdFx0ICogICAgICAgICBzdGFydGVkL3N0b3BwZWQgYW5kIGxvb3BlZCBhcyBhIHNpbmdsZSB1bml0LlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkV2ZW50fVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIG9uIGVhY2ggZXZlbnRcblx0XHQgKiAgQHBhcmFtIHtBcnJheX0gZXZlbnRzIHRoZSBhcnJheSBvZiBldmVudHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGFydCA9IG5ldyBUb25lLlBhcnQoZnVuY3Rpb24odGltZSwgbm90ZSl7XG5cdFx0ICogXHQvL3RoZSBub3RlcyBnaXZlbiBhcyB0aGUgc2Vjb25kIGVsZW1lbnQgaW4gdGhlIGFycmF5XG5cdFx0ICogXHQvL3dpbGwgYmUgcGFzc2VkIGluIGFzIHRoZSBzZWNvbmQgYXJndW1lbnRcblx0XHQgKiBcdHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKG5vdGUsIFwiOG5cIiwgdGltZSk7XG5cdFx0ICogfSwgW1swLCBcIkMyXCJdLCBbXCIwOjJcIiwgXCJDM1wiXSwgW1wiMDozOjJcIiwgXCJHMlwiXV0pO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdXNlIGFuIGFycmF5IG9mIG9iamVjdHMgYXMgbG9uZyBhcyB0aGUgb2JqZWN0IGhhcyBhIFwidGltZVwiIGF0dHJpYnV0ZVxuXHRcdCAqIHZhciBwYXJ0ID0gbmV3IFRvbmUuUGFydChmdW5jdGlvbih0aW1lLCB2YWx1ZSl7XG5cdFx0ICogXHQvL3RoZSB2YWx1ZSBpcyBhbiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYm90aCB0aGUgbm90ZSBhbmQgdGhlIHZlbG9jaXR5XG5cdFx0ICogXHRzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSh2YWx1ZS5ub3RlLCBcIjhuXCIsIHRpbWUsIHZhbHVlLnZlbG9jaXR5KTtcblx0XHQgKiB9LCBbe1widGltZVwiIDogMCwgXCJub3RlXCIgOiBcIkMzXCIsIFwidmVsb2NpdHlcIjogMC45fSxcblx0XHQgKiBcdCAgIHtcInRpbWVcIiA6IFwiMDoyXCIsIFwibm90ZVwiIDogXCJDNFwiLCBcInZlbG9jaXR5XCI6IDAuNX1cblx0XHQgKiBdKS5zdGFydCgwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdldmVudHMnXG5cdCAgICAgICAgXSwgVG9uZS5QYXJ0KTtcblx0ICAgICAgICBUb25lLkV2ZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW4gYXJyYXkgb2YgT2JqZWN0cy5cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBbXTtcblx0ICAgICAgICAvL2FkZCB0aGUgZXZlbnRzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmV2ZW50c1tpXSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYWRkKG9wdGlvbnMuZXZlbnRzW2ldWzBdLCBvcHRpb25zLmV2ZW50c1tpXVsxXSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmFkZChvcHRpb25zLmV2ZW50c1tpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYXJ0LCBUb25lLkV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdjYWxsYmFjayc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wRW5kJzogJzFtJyxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAncHJvYmFiaWxpdHknOiAxLFxuXHQgICAgICAgICdodW1hbml6ZSc6IGZhbHNlLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2UsXG5cdCAgICAgICAgJ2V2ZW50cyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBwYXJ0IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSAgdGltZSAgICBXaGVuIHRvIHN0YXJ0IHRoZSBwYXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIG9mZnNldCAgVGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFydFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmVnaW4gcGxheWluZyBhdC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aWNrcykgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgdGhpcy5fbG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9UaWNrcyhvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5hZGQoe1xuXHQgICAgICAgICAgICAgICAgJ3N0YXRlJzogVG9uZS5TdGF0ZS5TdGFydGVkLFxuXHQgICAgICAgICAgICAgICAgJ3RpbWUnOiB0aWNrcyxcblx0ICAgICAgICAgICAgICAgICdvZmZzZXQnOiBvZmZzZXRcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdGFydE5vdGUoZXZlbnQsIHRpY2tzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBldmVudCBpbiB0aGUgZ2l2ZW4gZXZlbnQgYXQgdGhlIGNvcnJlY3QgdGltZSBnaXZlblxuXHRcdCAqICB0aGUgdGlja3MgYW5kIG9mZnNldCBhbmQgbG9vcGluZy5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudH0gIGV2ZW50XG5cdFx0ICogIEBwYXJhbSAge1RpY2tzfSAgdGlja3Ncblx0XHQgKiAgQHBhcmFtICB7VGlja3N9ICBvZmZzZXRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3N0YXJ0Tm90ZSA9IGZ1bmN0aW9uIChldmVudCwgdGlja3MsIG9mZnNldCkge1xuXHQgICAgICAgIHRpY2tzIC09IG9mZnNldDtcblx0ICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPj0gdGhpcy5fbG9vcFN0YXJ0ICYmIGV2ZW50LnN0YXJ0T2Zmc2V0IDwgdGhpcy5fbG9vcEVuZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0IDwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9zdGFydCBpdCBvbiB0aGUgbmV4dCBsb29wXG5cdCAgICAgICAgICAgICAgICAgICAgdGlja3MgKz0gdGhpcy5fZ2V0TG9vcER1cmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBldmVudC5zdGFydChUb25lLlRpY2tzKHRpY2tzKSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPCB0aGlzLl9sb29wU3RhcnQgJiYgZXZlbnQuc3RhcnRPZmZzZXQgPj0gb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5sb29wID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICBldmVudC5zdGFydChUb25lLlRpY2tzKHRpY2tzKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0ID49IG9mZnNldCkge1xuXHQgICAgICAgICAgICBldmVudC5zdGFydChUb25lLlRpY2tzKHRpY2tzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3RhcnQgZnJvbSB0aGUgc2NoZWR1bGVkIHN0YXJ0IHRpbWVcblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAbmFtZSBzdGFydE9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdzdGFydE9mZnNldCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0T2Zmc2V0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0T2Zmc2V0ID0gb2Zmc2V0O1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuc3RhcnRPZmZzZXQgKz0gdGhpcy5fc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIHBhcnQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICB0aW1lICBXaGVuIHRvIHN0b3AgdGhlIHBhcnQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB0aWNrcyA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGlja3MpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGlja3MpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LnN0b3AodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldC9TZXQgYW4gRXZlbnQncyB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgSWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW4gYW5kIG5vIGV2ZW50IGV4aXN0cyBhdFxuXHRcdCAqICB0aGUgZ2l2ZW4gdGltZSwgb25lIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoYXQgdmFsdWUuXG5cdFx0ICogIElmIHR3byBldmVudHMgYXJlIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBmaXJzdCBvbmUgd2lsbFxuXHRcdCAqICBiZSByZXR1cm5lZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwYXJ0LmF0KFwiMW1cIik7IC8vcmV0dXJucyB0aGUgcGFydCBhdCB0aGUgZmlyc3QgbWVhc3VyZVxuXHRcdCAqXG5cdFx0ICogcGFydC5hdChcIjJtXCIsIFwiQzJcIik7IC8vc2V0IHRoZSB2YWx1ZSBhdCBcIjJtXCIgdG8gQzIuXG5cdFx0ICogLy9pZiBhbiBldmVudCBkaWRuJ3QgZXhpc3QgYXQgdGhhdCB0aW1lLCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnQgdG8gZ2V0IG9yIHNldC5cblx0XHQgKiAgQHBhcmFtIHsqPX0gdmFsdWUgSWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW4sIHRoZSB2YWx1ZSBvZiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgZXZlbnQgYXQgdGhlIGdpdmVuIHRpbWUgd2lsbCBiZSBzZXQgdG8gaXQuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRXZlbnR9IHRoZSBldmVudCBhdCB0aGUgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgdmFyIHRpY2tUaW1lID0gVG9uZS5UaWNrcygxKS50b1NlY29uZHMoKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHNbaV07XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aW1lLnRvVGlja3MoKSAtIGV2ZW50LnN0YXJ0T2Zmc2V0KSA8IHRpY2tUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodmFsdWUpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQudmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2lmIHRoZXJlIHdhcyBubyBldmVudCBhdCB0aGF0IHRpbWUsIGNyZWF0ZSBvbmVcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuYWRkKHRpbWUsIHZhbHVlKTtcblx0ICAgICAgICAgICAgLy9yZXR1cm4gdGhlIG5ldyBldmVudFxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzW3RoaXMuX2V2ZW50cy5sZW5ndGggLSAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIGFuIGV2ZW50IHRvIHRoZSBwYXJ0LlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgdGhlIG5vdGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW4sIGl0IHNob3VsZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgYSAndGltZScgYXR0cmlidXRlIGFuZCB0aGUgcmVzdFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBvYmplY3Qgd2lsbCBiZSB1c2VkIGFzIHRoZSAndmFsdWUnLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fCp9ICB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJ0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcGFydC5hZGQoXCIxbVwiLCBcIkMjKzExXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGltZSwgdmFsdWUpIHtcblx0ICAgICAgICAvL2V4dHJhY3QgdGhlIHBhcmFtZXRlcnNcblx0ICAgICAgICBpZiAodGltZS5oYXNPd25Qcm9wZXJ0eSgndGltZScpKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGltZTtcblx0ICAgICAgICAgICAgdGltZSA9IHZhbHVlLnRpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgdmFyIGV2ZW50O1xuXHQgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRvbmUuRXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgZXZlbnQuY2FsbGJhY2sgPSB0aGlzLl90aWNrLmJpbmQodGhpcyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSBuZXcgVG9uZS5FdmVudCh7XG5cdCAgICAgICAgICAgICAgICAnY2FsbGJhY2snOiB0aGlzLl90aWNrLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy90aGUgc3RhcnQgb2Zmc2V0XG5cdCAgICAgICAgZXZlbnQuc3RhcnRPZmZzZXQgPSB0aW1lO1xuXHQgICAgICAgIC8vaW5pdGlhbGl6ZSB0aGUgdmFsdWVzXG5cdCAgICAgICAgZXZlbnQuc2V0KHtcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiB0aGlzLmxvb3BFbmQsXG5cdCAgICAgICAgICAgICdsb29wU3RhcnQnOiB0aGlzLmxvb3BTdGFydCxcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0aGlzLmxvb3AsXG5cdCAgICAgICAgICAgICdodW1hbml6ZSc6IHRoaXMuaHVtYW5pemUsXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiB0aGlzLnBsYXliYWNrUmF0ZSxcblx0ICAgICAgICAgICAgJ3Byb2JhYmlsaXR5JzogdGhpcy5wcm9iYWJpbGl0eVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5wdXNoKGV2ZW50KTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBub3RlIGlmIGl0IHNob3VsZCBiZSBwbGF5ZWQgcmlnaHQgbm93XG5cdCAgICAgICAgdGhpcy5fcmVzdGFydEV2ZW50KGV2ZW50KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVzdGFydCB0aGUgZ2l2ZW4gZXZlbnRcblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudH0gIGV2ZW50XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9yZXN0YXJ0RXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZUV2ZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChzdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0Tm90ZShldmVudCwgc3RhdGVFdmVudC50aW1lLCBzdGF0ZUV2ZW50Lm9mZnNldCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvL3N0b3AgdGhlIG5vdGVcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0b3AoVG9uZS5UaWNrcyhzdGF0ZUV2ZW50LnRpbWUpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSBwYXJ0LiBXaWxsIHJlY3Vyc2l2ZWx5IGl0ZXJhdGVcblx0XHQgKiAgaW50byBuZXN0ZWQgcGFydHMgdG8gZmluZCB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiAgQHBhcmFtIHsqfSB2YWx1ZSBPcHRpb25hbGx5IHNlbGVjdCBvbmx5IGEgc3BlY2lmaWMgZXZlbnQgdmFsdWVcblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgLy9leHRyYWN0IHRoZSBwYXJhbWV0ZXJzXG5cdCAgICAgICAgaWYgKHRpbWUuaGFzT3duUHJvcGVydHkoJ3RpbWUnKSkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRpbWU7XG5cdCAgICAgICAgICAgIHRpbWUgPSB2YWx1ZS50aW1lO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9ldmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBUb25lLlBhcnQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnJlbW92ZSh0aW1lLCB2YWx1ZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYodmFsdWUpIHx8IFRvbmUuaXNEZWZpbmVkKHZhbHVlKSAmJiBldmVudC52YWx1ZSA9PT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGFsbCBvZiB0aGUgbm90ZXMgZnJvbSB0aGUgZ3JvdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gW107XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBzY2hlZHVsZWQgc3RhdGUgY2hhbmdlIGV2ZW50czogaS5lLiBcInN0YXJ0XCIgYW5kIFwic3RvcFwiLlxuXHRcdCAqICBAcGFyYW0ge1RpbWVsaW5lUG9zaXRpb259IGFmdGVyIFRoZSB0aW1lIGFmdGVyIHdoaWNoIHRvIGNhbmNlbCB0aGUgc2NoZWR1bGVkIGV2ZW50cy5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuY2FuY2VsKGFmdGVyKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGhpcy50b1RpY2tzKGFmdGVyKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIGV2ZW50c1xuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gY3R4IFRoZSBjb250ZXh0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjdHgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzKSB7XG5cdCAgICAgICAgICAgIGN0eCA9IFRvbmUuZGVmYXVsdEFyZyhjdHgsIHRoaXMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fZXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMuX2V2ZW50c1tpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgVG9uZS5QYXJ0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZS5fZm9yRWFjaChjYWxsYmFjaywgY3R4KTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjdHgsIGUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGF0dHJpYnV0ZSBvZiBhbGwgb2YgdGhlIGV2ZW50c1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBhdHRyICB0aGUgYXR0cmlidXRlIHRvIHNldFxuXHRcdCAqICBAcGFyYW0gIHsqfSAgdmFsdWUgICAgICBUaGUgdmFsdWUgdG8gc2V0IGl0IHRvXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9zZXRBbGwgPSBmdW5jdGlvbiAoYXR0ciwgdmFsdWUpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudFthdHRyXSA9IHZhbHVlO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCB0aWNrIG1ldGhvZFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSBvZiB0aGUgZXZlbnQgaW4gc2Vjb25kc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIGlmICghdGhpcy5tdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgdmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRGV0ZXJtaW5lIGlmIHRoZSBldmVudCBzaG91bGQgYmUgY3VycmVudGx5IGxvb3Bpbmdcblx0XHQgKiAgZ2l2ZW4gdGhlIGxvb3AgYm91bmRyaWVzIG9mIHRoaXMgUGFydC5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gdGVzdFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fdGVzdExvb3BCb3VuZHJpZXMgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPCB0aGlzLl9sb29wU3RhcnQgfHwgZXZlbnQuc3RhcnRPZmZzZXQgPj0gdGhpcy5fbG9vcEVuZCkge1xuXHQgICAgICAgICAgICBldmVudC5jYW5jZWwoMCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIC8vcmVzY2hlZHVsZSBpdCBpZiBpdCdzIHN0b3BwZWRcblx0ICAgICAgICAgICAgdGhpcy5fcmVzdGFydEV2ZW50KGV2ZW50KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgbm90ZXMgYmVpbmcgdHJpZ2dlcmVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2JhYmlsaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ3Byb2JhYmlsaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvYmFiaWxpdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9iKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2JhYmlsaXR5ID0gcHJvYjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QWxsKCdwcm9iYWJpbGl0eScsIHByb2IpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHNldCB0byB0cnVlLCB3aWxsIGFwcGx5IHNtYWxsIHJhbmRvbSB2YXJpYXRpb25cblx0XHQgKiAgdG8gdGhlIGNhbGxiYWNrIHRpbWUuIElmIHRoZSB2YWx1ZSBpcyBnaXZlbiBhcyBhIHRpbWUsIGl0IHdpbGwgcmFuZG9taXplXG5cdFx0ICogIGJ5IHRoYXQgYW1vdW50LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGV2ZW50Lmh1bWFuaXplID0gdHJ1ZTtcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58VGltZX1cblx0XHQgKiAgQG5hbWUgaHVtYW5pemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnaHVtYW5pemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9odW1hbml6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhcmlhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9odW1hbml6ZSA9IHZhcmlhdGlvbjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QWxsKCdodW1hbml6ZScsIHZhcmlhdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIHBhcnQgc2hvdWxkIGxvb3Agb3Igbm90XG5cdFx0ICogIGJldHdlZW4gVG9uZS5QYXJ0Lmxvb3BTdGFydCBhbmRcblx0XHQgKiAgVG9uZS5QYXJ0Lmxvb3BFbmQuIEFuIGludGVnZXJcblx0XHQgKiAgdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhlIG51bWJlciBvZlxuXHRcdCAqICBsb29wcyB0aGUgUGFydCBkb2VzIGFmdGVyIGl0IHN0YXJ0cy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGxvb3Bcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xvb3AgdGhlIHBhcnQgOCB0aW1lc1xuXHRcdCAqIHBhcnQubG9vcCA9IDg7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Ll9sb29wU3RhcnQgPSB0aGlzLl9sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgICAgICBldmVudC5fbG9vcEVuZCA9IHRoaXMuX2xvb3BFbmQ7XG5cdCAgICAgICAgICAgICAgICBldmVudC5sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Rlc3RMb29wQm91bmRyaWVzKGV2ZW50KTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGxvb3BFbmQgcG9pbnQgZGV0ZXJtaW5lcyB3aGVuIGl0IHdpbGxcblx0XHQgKiAgbG9vcCBpZiBUb25lLlBhcnQubG9vcCBpcyB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wRW5kKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhsb29wRW5kKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQubG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGVzdExvb3BCb3VuZHJpZXMoZXZlbnQpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbG9vcFN0YXJ0IHBvaW50IGRldGVybWluZXMgd2hlbiBpdCB3aWxsXG5cdFx0ICogIGxvb3AgaWYgVG9uZS5QYXJ0Lmxvb3AgaXMgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BTdGFydCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wU3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKGxvb3BTdGFydCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3BTdGFydCA9IHRoaXMubG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rlc3RMb29wQm91bmRyaWVzKGV2ZW50KTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBwYXJ0XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QWxsKCdwbGF5YmFja1JhdGUnLCByYXRlKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0VGhlIG51bWJlciBvZiBzY2hlZHVsZWQgbm90ZXMgaW4gdGhlIHBhcnQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgbGVuZ3RoXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudHMubGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5yZW1vdmVBbGwoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFydDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBhdHRlcm4gYXJwZWdnaWF0ZXMgYmV0d2VlbiB0aGUgZ2l2ZW4gbm90ZXNcblx0XHQgKiAgICAgICAgIGluIGEgbnVtYmVyIG9mIHBhdHRlcm5zLiBTZWUgVG9uZS5DdHJsUGF0dGVybiBmb3Jcblx0XHQgKiAgICAgICAgIGEgZnVsbCBsaXN0IG9mIHBhdHRlcm5zLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwYXR0ZXJuID0gbmV3IFRvbmUuUGF0dGVybihmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiAgIC8vdGhlIG9yZGVyIG9mIHRoZSBub3RlcyBwYXNzZWQgaW4gZGVwZW5kcyBvbiB0aGUgcGF0dGVyblxuXHRcdCAqIH0sIFtcIkMyXCIsIFwiRDRcIiwgXCJFNVwiLCBcIkE2XCJdLCBcInVwRG93blwiKTtcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTG9vcH1cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5cblx0XHQgKiAgQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXJwZWdnaWF0ZSBvdmVyLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXR0ZXJuID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ3ZhbHVlcycsXG5cdCAgICAgICAgICAgICdwYXR0ZXJuJ1xuXHQgICAgICAgIF0sIFRvbmUuUGF0dGVybik7XG5cdCAgICAgICAgVG9uZS5Mb29wLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhdHRlcm4gbWFuYWdlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkN0cmxQYXR0ZXJufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXR0ZXJuID0gbmV3IFRvbmUuQ3RybFBhdHRlcm4oe1xuXHQgICAgICAgICAgICAndmFsdWVzJzogb3B0aW9ucy52YWx1ZXMsXG5cdCAgICAgICAgICAgICd0eXBlJzogb3B0aW9ucy5wYXR0ZXJuLFxuXHQgICAgICAgICAgICAnaW5kZXgnOiBvcHRpb25zLmluZGV4XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYXR0ZXJuLCBUb25lLkxvb3ApO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BhdHRlcm4nOiBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXAsXG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICd2YWx1ZXMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgbm90ZXMgc2hvdWxkIGJlIGNhbGxlZFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0aGUgZXZlbnQgb2NjdXJzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4ucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHRoaXMuX3BhdHRlcm4udmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4ubmV4dCgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCBpbmRleCBpbiB0aGUgdmFsdWVzIGFycmF5LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGluZGV4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXR0ZXJuLnByb3RvdHlwZSwgJ2luZGV4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi5pbmRleDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGkpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGF0dGVybi5pbmRleCA9IGk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFycmF5IG9mIGV2ZW50cy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqICBAbmFtZSB2YWx1ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAndmFsdWVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi52YWx1ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhdHRlcm4udmFsdWVzID0gdmFscztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcGF0dGVybi5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHRlcm4udmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBhdHRlcm4gdHlwZS4gU2VlIFRvbmUuQ3RybFBhdHRlcm4gZm9yIHRoZSBmdWxsIGxpc3Qgb2YgcGF0dGVybnMuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIHBhdHRlcm5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAncGF0dGVybicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHRlcm4udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBhdHRlcm4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGF0dGVybi50eXBlID0gcGF0dGVybjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXR0ZXJufSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXR0ZXJuLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4gPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhdHRlcm47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIHNlcXVlbmNlIGlzIGFuIGFsdGVybmF0ZSBub3RhdGlvbiBvZiBhIHBhcnQuIEluc3RlYWRcblx0XHQgKiAgICAgICAgIG9mIHBhc3NpbmcgaW4gYW4gYXJyYXkgb2YgW3RpbWUsIGV2ZW50XSBwYWlycywgcGFzc1xuXHRcdCAqICAgICAgICAgaW4gYW4gYXJyYXkgb2YgZXZlbnRzIHdoaWNoIHdpbGwgYmUgc3BhY2VkIGF0IHRoZVxuXHRcdCAqICAgICAgICAgZ2l2ZW4gc3ViZGl2aXNpb24uIFN1Yi1hcnJheXMgd2lsbCBzdWJkaXZpZGUgdGhhdCBiZWF0XG5cdFx0ICogICAgICAgICBieSB0aGUgbnVtYmVyIG9mIGl0ZW1zIGFyZSBpbiB0aGUgYXJyYXkuXG5cdFx0ICogICAgICAgICBTZXF1ZW5jZSBub3RhdGlvbiBpbnNwaXJhdGlvbiBmcm9tIFtUaWRhbF0oaHR0cDovL3lheHUub3JnL3RpZGFsLylcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IG5vdGVcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICAgIGV2ZW50cyAgVGhlIHNlcXVlbmNlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHN1YmRpdmlzaW9uICBUaGUgc3ViZGl2aXNpb24gYmV0d2VlbiB3aGljaCBldmVudHMgYXJlIHBsYWNlZC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuUGFydH1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2VxID0gbmV3IFRvbmUuU2VxdWVuY2UoZnVuY3Rpb24odGltZSwgbm90ZSl7XG5cdFx0ICogXHRjb25zb2xlLmxvZyhub3RlKTtcblx0XHQgKiAvL3N0cmFpZ2h0IHF1YXRlciBub3Rlc1xuXHRcdCAqIH0sIFtcIkM0XCIsIFwiRTRcIiwgXCJHNFwiLCBcIkE0XCJdLCBcIjRuXCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzZXEgPSBuZXcgVG9uZS5TZXF1ZW5jZShmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKG5vdGUpO1xuXHRcdCAqIC8vc3ViZGl2aXNpb25zIGFyZSBnaXZlbiBhcyBzdWJhcnJheXNcblx0XHQgKiB9LCBbXCJDNFwiLCBbXCJFNFwiLCBcIkQ0XCIsIFwiRTRcIl0sIFwiRzRcIiwgW1wiQTRcIiwgXCJHNFwiXV0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdldmVudHMnLFxuXHQgICAgICAgICAgICAnc3ViZGl2aXNpb24nXG5cdCAgICAgICAgXSwgVG9uZS5TZXF1ZW5jZSk7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIGV2ZW50c1xuXHQgICAgICAgIHZhciBldmVudHMgPSBvcHRpb25zLmV2ZW50cztcblx0ICAgICAgICBkZWxldGUgb3B0aW9ucy5ldmVudHM7XG5cdCAgICAgICAgVG9uZS5QYXJ0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHN1YmRpdmlzb24gb2YgZWFjaCBub3RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUaWNrc31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ViZGl2aXNpb24gPSB0aGlzLnRvVGlja3Mob3B0aW9ucy5zdWJkaXZpc2lvbik7XG5cdCAgICAgICAgLy9pZiBubyB0aW1lIHdhcyBwYXNzZWQgaW4sIHRoZSBsb29wIGVuZCBpcyB0aGUgZW5kIG9mIHRoZSBjeWNsZVxuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYob3B0aW9ucy5sb29wRW5kKSAmJiBUb25lLmlzRGVmaW5lZChldmVudHMpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSBldmVudHMubGVuZ3RoICogdGhpcy5fc3ViZGl2aXNpb247XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vZGVmYXVsdHMgdG8gbG9vcGluZ1xuXHQgICAgICAgIHRoaXMuX2xvb3AgPSB0cnVlO1xuXHQgICAgICAgIC8vYWRkIGFsbCBvZiB0aGUgZXZlbnRzXG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGV2ZW50cykpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYWRkKGksIGV2ZW50c1tpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TZXF1ZW5jZSwgVG9uZS5QYXJ0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5kZWZhdWx0cyA9IHsgJ3N1YmRpdmlzaW9uJzogJzRuJyB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdWJkaXZpc2lvbiBvZiB0aGUgc2VxdWVuY2UuIFRoaXMgY2FuIG9ubHkgYmVcblx0XHQgKiAgc2V0IGluIHRoZSBjb25zdHJ1Y3Rvci4gVGhlIHN1YmRpdmlzaW9uIGlzIHRoZVxuXHRcdCAqICBpbnRlcnZhbCBiZXR3ZWVuIHN1Y2Nlc3NpdmUgc3RlcHMuXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5TZXF1ZW5jZSNcblx0XHQgKiAgQG5hbWUgc3ViZGl2aXNpb25cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUsICdzdWJkaXZpc2lvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fc3ViZGl2aXNpb24pLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEdldC9TZXQgYW4gaW5kZXggb2YgdGhlIHNlcXVlbmNlLiBJZiB0aGUgaW5kZXggY29udGFpbnMgYSBzdWJhcnJheSxcblx0XHQgKiAgYSBUb25lLlNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGF0IHN1Yi1hcnJheSB3aWxsIGJlIHJldHVybmVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzZXF1ZW5jZSA9IG5ldyBUb25lLlNlcXVlbmNlKHBsYXlOb3RlLCBbXCJFNFwiLCBcIkM0XCIsIFwiRiM0XCIsIFtcIkE0XCIsIFwiQmIzXCJdXSlcblx0XHQgKiBzZXF1ZW5jZS5hdCgwKS8vID0+IHJldHVybnMgXCJFNFwiXG5cdFx0ICogLy9zZXQgYSB2YWx1ZVxuXHRcdCAqIHNlcXVlbmNlLmF0KDAsIFwiRzNcIik7XG5cdFx0ICogLy9nZXQgYSBuZXN0ZWQgc2VxdWVuY2Vcblx0XHQgKiBzZXF1ZW5jZS5hdCgzKS5hdCgxKS8vID0+IHJldHVybnMgXCJCYjNcIlxuXHRcdCAqIEBwYXJhbSB7UG9zaXRpdmV9IGluZGV4IFRoZSBpbmRleCB0byBnZXQgb3Igc2V0XG5cdFx0ICogQHBhcmFtIHsqfSB2YWx1ZSBPcHRpb25hbGx5IHBhc3MgaW4gdGhlIHZhbHVlIHRvIHNldCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcblx0ICAgICAgICAvL2lmIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSxcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHZhbHVlKSkge1xuXHQgICAgICAgICAgICAvL3JlbW92ZSB0aGUgY3VycmVudCBldmVudCBhdCB0aGF0IGluZGV4XG5cdCAgICAgICAgICAgIHRoaXMucmVtb3ZlKGluZGV4KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jYWxsIHRoZSBwYXJlbnQncyBtZXRob2Rcblx0ICAgICAgICByZXR1cm4gVG9uZS5QYXJ0LnByb3RvdHlwZS5hdC5jYWxsKHRoaXMsIHRoaXMuX2luZGV4VGltZShpbmRleCksIHZhbHVlKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGFuIGV2ZW50IGF0IGFuIGluZGV4LCBpZiB0aGVyZSdzIGFscmVhZHkgc29tZXRoaW5nXG5cdFx0ICogIGF0IHRoYXQgaW5kZXgsIG92ZXJ3cml0ZSBpdC4gSWYgYHZhbHVlYCBpcyBhbiBhcnJheSxcblx0XHQgKiAgaXQgd2lsbCBiZSBwYXJzZWQgYXMgYSBzdWJzZXF1ZW5jZS5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGluZGV4IFRoZSBpbmRleCB0byBhZGQgdGhlIGV2ZW50IHRvXG5cdFx0ICogIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFkZCBhdCB0aGF0IGluZGV4XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNlcXVlbmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG5cdCAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHZhbHVlKSkge1xuXHQgICAgICAgICAgICAvL21ha2UgYSBzdWJzZXF1ZW5jZSBhbmQgYWRkIHRoYXQgdG8gdGhlIHNlcXVlbmNlXG5cdCAgICAgICAgICAgIHZhciBzdWJTdWJkaXZpc2lvbiA9IE1hdGgucm91bmQodGhpcy5fc3ViZGl2aXNpb24gLyB2YWx1ZS5sZW5ndGgpO1xuXHQgICAgICAgICAgICB2YWx1ZSA9IG5ldyBUb25lLlNlcXVlbmNlKHRoaXMuX3RpY2suYmluZCh0aGlzKSwgdmFsdWUsIFRvbmUuVGlja3Moc3ViU3ViZGl2aXNpb24pKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5hZGQuY2FsbCh0aGlzLCB0aGlzLl9pbmRleFRpbWUoaW5kZXgpLCB2YWx1ZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhIHZhbHVlIGZyb20gdGhlIHNlcXVlbmNlIGJ5IGluZGV4XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGV2ZW50IHRvIHJlbW92ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TZXF1ZW5jZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuUGFydC5wcm90b3R5cGUucmVtb3ZlLmNhbGwodGhpcywgdGhpcy5faW5kZXhUaW1lKGluZGV4KSwgdmFsdWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHRpbWUgb2YgdGhlIGluZGV4IGdpdmVuIHRoZSBTZXF1ZW5jZSdzIHN1YmRpdmlzaW9uXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGluZGV4XG5cdFx0ICogIEByZXR1cm4gIHtUaW1lfSAgVGhlIHRpbWUgb2YgdGhhdCBpbmRleFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUuX2luZGV4VGltZSA9IGZ1bmN0aW9uIChpbmRleCkge1xuXHQgICAgICAgIGlmIChpbmRleCBpbnN0YW5jZW9mIFRvbmUuVHJhbnNwb3J0VGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gaW5kZXg7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3MoaW5kZXggKiB0aGlzLl9zdWJkaXZpc2lvbiArIHRoaXMuc3RhcnRPZmZzZXQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuU2VxdWVuY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2VxdWVuY2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlB1bHNlT3NjaWxsYXRvciBpcyBhIHB1bHNlIG9zY2lsbGF0b3Igd2l0aCBjb250cm9sIG92ZXIgcHVsc2Ugd2lkdGgsXG5cdFx0ICogICAgICAgICBhbHNvIGtub3duIGFzIHRoZSBkdXR5IGN5Y2xlLiBBdCA1MCUgZHV0eSBjeWNsZSAod2lkdGggPSAwLjUpIHRoZSB3YXZlIGlzXG5cdFx0ICogICAgICAgICBhIHNxdWFyZSBhbmQgb25seSBvZGQtbnVtYmVyZWQgaGFybW9uaWNzIGFyZSBwcmVzZW50LiBBdCBhbGwgb3RoZXIgd2lkdGhzXG5cdFx0ICogICAgICAgICBldmVuLW51bWJlcmVkIGhhcm1vbmljcyBhcmUgcHJlc2VudC4gUmVhZCBtb3JlXG5cdFx0ICogICAgICAgICBbaGVyZV0oaHR0cHM6Ly93aWdnbGV3YXZlLndvcmRwcmVzcy5jb20vMjAxNC8wOC8xNi9wdWxzZS13YXZlZm9ybXMtYW5kLWhhcm1vbmljcy8pLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZnJlcXVlbmN5XSBUaGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt3aWR0aF0gVGhlIHdpZHRoIG9mIHRoZSBwdWxzZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwdWxzZSA9IG5ldyBUb25lLlB1bHNlT3NjaWxsYXRvcihcIkU1XCIsIDAuNCkudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3dpZHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgd2lkdGggb2YgdGhlIHB1bHNlLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndpZHRoID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMud2lkdGgsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZ2F0ZSB0aGUgd2lkdGggYW1vdW50XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzYXd0b290aCBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGggPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgZnJlcXVlbmN5OiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgZGV0dW5lOiBvcHRpb25zLmRldHVuZSxcblx0ICAgICAgICAgICAgdHlwZTogJ3Nhd3Rvb3RoJyxcblx0ICAgICAgICAgICAgcGhhc2U6IG9wdGlvbnMucGhhc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX3Nhd3Rvb3RoLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMuX3Nhd3Rvb3RoLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaHJlc2hvbGQgdGhlIHNpZ25hbCB0byB0dXJuIGl0IGludG8gYSBzcXVhcmVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKHZhbCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAtMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLmNoYWluKHRoaXMuX3RocmVzaCwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMud2lkdGguY2hhaW4odGhpcy5fd2lkdGhHYXRlLCB0aGlzLl90aHJlc2gpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3dpZHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QdWxzZU9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzLlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICd3aWR0aCc6IDAuMlxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgdGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguc3RvcCh0aW1lKTtcblx0ICAgICAgICAvL3RoZSB3aWR0aCBpcyBzdGlsbCBjb25uZWN0ZWQgdG8gdGhlIG91dHB1dC5cblx0ICAgICAgICAvL3RoYXQgbmVlZHMgdG8gYmUgc3RvcHBlZCBhbHNvXG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHJlc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlB1bHNlT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2F3dG9vdGgucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zYXd0b290aC5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuIEFsd2F5cyByZXR1cm5zIFwicHVsc2VcIi5cblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QdWxzZU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICdwdWxzZSc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBDYW5ub3Qgc2V0IHBhcnRpYWxzIGZvciB0aGlzIHdhdmVmb3JtIHR5cGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QdWxzZU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwIG1ldGhvZC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QdWxzZU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICd3aWR0aCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMud2lkdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dpZHRoR2F0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aHJlc2guZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QdWxzZU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBXTU9zY2lsbGF0b3IgbW9kdWxhdGVzIHRoZSB3aWR0aCBvZiBhIFRvbmUuUHVsc2VPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICBhdCB0aGUgbW9kdWxhdGlvbkZyZXF1ZW5jeS4gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBjb250aW51b3VzbHlcblx0XHQgKiAgICAgICAgIGNoYW5naW5nIHRoZSB0aW1icmUgb2YgdGhlIG9zY2lsbGF0b3IgYnkgYWx0ZXJpbmcgdGhlIGhhcm1vbmljc1xuXHRcdCAqICAgICAgICAgZ2VuZXJhdGVkLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IG1vZHVsYXRpb25GcmVxdWVuY3kgVGhlIG1vZHVsYXRpb24gZnJlcXVlbmN5IG9mIHRoZSB3aWR0aCBvZiB0aGUgcHVsc2UuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBwd20gPSBuZXcgVG9uZS5QV01Pc2NpbGxhdG9yKFwiQWIzXCIsIDAuMykudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5J1xuXHQgICAgICAgIF0sIFRvbmUuUFdNT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcHVsc2Ugb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlB1bHNlT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcHVsc2UgPSBuZXcgVG9uZS5QdWxzZU9zY2lsbGF0b3Iob3B0aW9ucy5tb2R1bGF0aW9uRnJlcXVlbmN5KTtcblx0ICAgICAgICAvL2NoYW5nZSB0aGUgcHVsc2Ugb3NjaWxsYXRvciB0eXBlXG5cdCAgICAgICAgdGhpcy5fcHVsc2UuX3Nhd3Rvb3RoLnR5cGUgPSAnc2luZSc7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1vZHVsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdkZXR1bmUnOiBvcHRpb25zLmRldHVuZSxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogb3B0aW9ucy5waGFzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNjYWxlIHRoZSBvc2NpbGxhdG9yIHNvIGl0IGRvZXNuJ3QgZ28gc2lsZW50XG5cdFx0XHQgKiAgYXQgdGhlIGV4dHJlbWUgdmFsdWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG5ldyBUb25lLk11bHRpcGx5KDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMuX21vZHVsYXRvci5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpb24gcmF0ZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkZyZXF1ZW5jeSA9IHRoaXMuX3B1bHNlLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNoYWluKHRoaXMuX3NjYWxlLCB0aGlzLl9wdWxzZS53aWR0aCk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2UuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUFdNT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5JzogMC40XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2Uuc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLiBBbHdheXMgcmV0dXJucyBcInB3bVwiLlxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBXTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAncHdtJztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgd2F2ZWZvcm0uIENhbm5vdCBzZXQgcGFydGlhbHMgZm9yIHRoaXMgd2F2ZWZvcm0gdHlwZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBXTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBbXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBXTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsYXRvci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBXTU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QV01Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GTU9zY2lsbGF0b3Jcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBzdGFydGluZyBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGF0aW9uVHlwZSBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHNpbmUgb3NjaWxsYXRvciBmcmVxdWVuY3ktbW9kdWxhdGVkIGJ5IGEgc3F1YXJlIHdhdmVcblx0XHQgKiB2YXIgZm1Pc2MgPSBuZXcgVG9uZS5GTU9zY2lsbGF0b3IoXCJBYjNcIiwgXCJzaW5lXCIsIFwic3F1YXJlXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25UeXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuRk1Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy50eXBlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvcidzIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fY2Fycmllci5kZXR1bmU7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUudmFsdWUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGlvbiBpbmRleCB3aGljaCBpcyBpbiBlc3NlbmNlIHRoZSBkZXB0aCBvciBhbW91bnQgb2YgdGhlIG1vZHVsYXRpb24uIEluIG90aGVyIHRlcm1zIGl0IGlzIHRoZVxuXHRcdFx0ICogIHJhdGlvIG9mIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1vZHVsYXRpbmcgc2lnbmFsIChtZikgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGVcblx0XHRcdCAqICBtb2R1bGF0aW5nIHNpZ25hbCAobWEpIC0tIGFzIGluIG1hL21mLlxuXHRcdFx0ICpcdEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqXHRAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMubW9kdWxhdGlvbkluZGV4KTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGluZyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMubW9kdWxhdGlvblR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgY2FycmllciBhbmQgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9ycy5cblx0XHRcdCAqICBBIGhhcm1vbmljaXR5IG9mIDEgZ2l2ZXMgYm90aCBvc2NpbGxhdG9ycyB0aGUgc2FtZSBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHRoZSBtb2R1bGF0b3IgYW4gb2N0YXZlIGJlbG93IGNhcnJpZXJcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIG1vZHVsYXRpb24gaGFwcGVuc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigwKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5tb2R1bGF0aW9uSW5kZXgsIHRoaXMuX21vZHVsYXRpb25Ob2RlKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY29ubmVjdCh0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fbW9kdWxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GTU9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnOiAyLFxuXHQgICAgICAgICdtb2R1bGF0aW9uVHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25UeXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvblR5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSBjYXJyaWVyIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkZNT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZNT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQU1Pc2NpbGxhdG9yXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuT3NjaWxsYXRvcn1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IG1vZHVsYXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egc2luZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeS1tb2R1bGF0ZWQgYnkgYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIHZhciBmbU9zYyA9IG5ldyBUb25lLkFNT3NjaWxsYXRvcihcIkFiM1wiLCBcInNpbmVcIiwgXCJzcXVhcmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvblR5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5BTU9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKG9wdGlvbnMuZnJlcXVlbmN5LCBvcHRpb25zLnR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fY2Fycmllci5kZXR1bmU7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUudmFsdWUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGluZyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMubW9kdWxhdGlvblR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnZlcnQgdGhlIC0xLDEgb3V0cHV0IHRvIDAsMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkF1ZGlvVG9HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBuZXcgVG9uZS5BdWRpb1RvR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgY2FycmllciBhbmQgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9ycy5cblx0XHRcdCAqICBBIGhhcm1vbmljaXR5IG9mIDEgZ2l2ZXMgYm90aCBvc2NpbGxhdG9ycyB0aGUgc2FtZSBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHRoZSBtb2R1bGF0b3IgYW4gb2N0YXZlIGJlbG93IGNhcnJpZXJcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIG1vZHVsYXRpb24gaGFwcGVuc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigwKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY2hhaW4odGhpcy5fbW9kdWxhdGlvblNjYWxlLCB0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNoYWluKHRoaXMuX21vZHVsYXRpb25Ob2RlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFNT3NjaWxsYXRvciwgVG9uZS5Pc2NpbGxhdG9yKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdtb2R1bGF0aW9uVHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkFNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25UeXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvblR5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSBjYXJyaWVyIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkFNT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFNT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRmF0T3NjaWxsYXRvclxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IG1vZHVsYXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egc2luZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeS1tb2R1bGF0ZWQgYnkgYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIHZhciBmbU9zYyA9IG5ldyBUb25lLkZhdE9zY2lsbGF0b3IoXCJBYjNcIiwgXCJzaW5lXCIsIFwic3F1YXJlXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdzcHJlYWQnXG5cdCAgICAgICAgXSwgVG9uZS5GYXRPc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIG9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0b3RhbCBzcHJlYWQgb2YgdGhlIG9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUgIHtDZW50c31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ByZWFkID0gb3B0aW9ucy5zcHJlYWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSB7RGVncmVlc31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYXJ0aWFscyBhcnJheVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucy5wYXJ0aWFscywgW10pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBjb3VudCBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLmNvdW50ID0gb3B0aW9ucy5jb3VudDtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmF0T3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdzcHJlYWQnOiAyMCxcblx0ICAgICAgICAnY291bnQnOiAzLFxuXHQgICAgICAgICd0eXBlJzogJ3Nhd3Rvb3RoJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBvc2NpbGxhdG9yc1xuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGl0ZXJhdG9yICBUaGUgaXRlcmF0b3IgZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUuX2ZvckVhY2ggPSBmdW5jdGlvbiAoaXRlcmF0b3IpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwodGhpcywgdGhpcy5fb3NjaWxsYXRvcnNbaV0sIGkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGV0dW5lIHNwcmVhZCBiZXR3ZWVuIHRoZSBvc2NpbGxhdG9ycy4gSWYgXCJjb3VudFwiIGlzXG5cdFx0ICogc2V0IHRvIDMgb3NjaWxsYXRvcnMgYW5kIHRoZSBcInNwcmVhZFwiIGlzIHNldCB0byA0MCxcblx0XHQgKiB0aGUgdGhyZWUgb3NjaWxsYXRvcnMgd291bGQgYmUgZGV0dW5lZCBsaWtlIHRoaXM6IFstMjAsIDAsIDIwXVxuXHRcdCAqIGZvciBhIHRvdGFsIGRldHVuZSBzcHJlYWQgb2YgNDAgY2VudHMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7Q2VudHN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3NwcmVhZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NwcmVhZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zcHJlYWQgPSBzcHJlYWQ7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGggPiAxKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSAtc3ByZWFkIC8gMjtcblx0ICAgICAgICAgICAgICAgIHZhciBzdGVwID0gc3ByZWFkIC8gKHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjLCBpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLmRldHVuZS52YWx1ZSA9IHN0YXJ0ICsgc3RlcCAqIGk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBkZXR1bmVkIG9zY2lsbGF0b3JzXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGNvdW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ2NvdW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY291bnQpIHtcblx0ICAgICAgICAgICAgY291bnQgPSBNYXRoLm1heChjb3VudCwgMSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGggIT09IGNvdW50KSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgcGFydGlhbHMgPSB0aGlzLnBhcnRpYWxzO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdCAgICAgICAgICAgICAgICAvL2Rpc3Bvc2UgdGhlIHByZXZpb3VzIG9zY2lsbGF0b3JzXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvc2MuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IFtdO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b20pIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3NjLnBhcnRpYWxzID0gdGhpcy5fcGFydGlhbHM7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3NjLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBvc2MucGhhc2UgPSB0aGlzLl9waGFzZTtcblx0ICAgICAgICAgICAgICAgICAgICBvc2Mudm9sdW1lLnZhbHVlID0gLTYgLSBjb3VudCAqIDEuMTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KG9zYy5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3Qob3NjLmRldHVuZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldID0gb3NjO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgLy9zZXQgdGhlIHNwcmVhZFxuXHQgICAgICAgICAgICAgICAgdGhpcy5zcHJlYWQgPSB0aGlzLl9zcHJlYWQ7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG9zYy5zdGFydCgpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSBjYXJyaWVyIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICBvc2MucGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRmF0T3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GYXRPc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5PbW5pT3NjaWxsYXRvciBhZ2dyZWdhdGVzIFRvbmUuT3NjaWxsYXRvciwgVG9uZS5QdWxzZU9zY2lsbGF0b3IsXG5cdFx0ICogICAgICAgICBUb25lLlBXTU9zY2lsbGF0b3IsIFRvbmUuRk1Pc2NpbGxhdG9yLCBUb25lLkFNT3NjaWxsYXRvciwgYW5kIFRvbmUuRmF0T3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgaW50byBvbmUgY2xhc3MuIFRoZSBvc2NpbGxhdG9yIGNsYXNzIGNhbiBiZSBjaGFuZ2VkIGJ5IHNldHRpbmcgdGhlIGB0eXBlYC5cblx0XHQgKiAgICAgICAgIGBvbW5pT3NjLnR5cGUgPSBcInB3bVwiYCB3aWxsIHNldCBpdCB0byB0aGUgVG9uZS5QV01Pc2NpbGxhdG9yLiBQcmVmaXhpbmdcblx0XHQgKiAgICAgICAgIGFueSBvZiB0aGUgYmFzaWMgdHlwZXMgKFwic2luZVwiLCBcInNxdWFyZTRcIiwgZXRjLikgd2l0aCBcImZtXCIsIFwiYW1cIiwgb3IgXCJmYXRcIlxuXHRcdCAqICAgICAgICAgd2lsbCB1c2UgdGhlIEZNT3NjaWxsYXRvciwgQU1Pc2NpbGxhdG9yIG9yIEZhdE9zY2lsbGF0b3IgcmVzcGVjdGl2ZWx5LlxuXHRcdCAqICAgICAgICAgRm9yIGV4YW1wbGU6IGBvbW5pT3NjLnR5cGUgPSBcImZhdHNhd3Rvb3RoXCJgIHdpbGwgY3JlYXRlIHNldCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgdG8gYSBGYXRPc2NpbGxhdG9yIG9mIHR5cGUgXCJzYXd0b290aFwiLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIGluaXRpYWwgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIG9tbmlPc2MgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihcIkMjNFwiLCBcInB3bVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5PbW5pT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yIHNvdXJjZVxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVR5cGUgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICAvL3NldCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBvcHRpb25zXG5cdCAgICAgICAgdGhpcy5zZXQob3B0aW9ucyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5PbW5pT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ3BoYXNlJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIE9tbmlPc2NUeXBlID0ge1xuXHQgICAgICAgIFB1bHNlOiAnUHVsc2VPc2NpbGxhdG9yJyxcblx0ICAgICAgICBQV006ICdQV01Pc2NpbGxhdG9yJyxcblx0ICAgICAgICBPc2M6ICdPc2NpbGxhdG9yJyxcblx0ICAgICAgICBGTTogJ0ZNT3NjaWxsYXRvcicsXG5cdCAgICAgICAgQU06ICdBTU9zY2lsbGF0b3InLFxuXHQgICAgICAgIEZhdDogJ0ZhdE9zY2lsbGF0b3InXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0byBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdG8gc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLiBDYW4gYmUgYW55IG9mIHRoZSBiYXNpYyB0eXBlczogc2luZSwgc3F1YXJlLCB0cmlhbmdsZSwgc2F3dG9vdGguIE9yXG5cdFx0ICogcHJlZml4IHRoZSBiYXNpYyB0eXBlcyB3aXRoIFwiZm1cIiwgXCJhbVwiLCBvciBcImZhdFwiIHRvIHVzZSB0aGUgRk1Pc2NpbGxhdG9yLCBBTU9zY2lsbGF0b3Igb3IgRmF0T3NjaWxsYXRvclxuXHRcdCAqIHR5cGVzLiBUaGUgb3NjaWxsYXRvciBjb3VsZCBhbHNvIGJlIHNldCB0byBcInB3bVwiIG9yIFwicHVsc2VcIi4gQWxsIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZVxuXHRcdCAqIG9zY2lsbGF0b3IncyBjbGFzcyBhcmUgYWNjZXNzaWJsZSB3aGVuIHRoZSBvc2NpbGxhdG9yIGlzIHNldCB0byB0aGF0IHR5cGUsIGJ1dCB0aHJvd3MgYW4gZXJyb3Jcblx0XHQgKiB3aGVuIGl0J3Mgbm90LlxuXHRcdCAqXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvbW5pT3NjLnR5cGUgPSBcInB3bVwiO1xuXHRcdCAqIC8vbW9kdWxhdGlvbkZyZXF1ZW5jeSBpcyBwYXJhbWV0ZXIgd2hpY2ggaXMgYXZhaWxhYmxlXG5cdFx0ICogLy9vbmx5IHdoZW4gdGhlIHR5cGUgaXMgXCJwd21cIi5cblx0XHQgKiBvbW5pT3NjLm1vZHVsYXRpb25GcmVxdWVuY3kudmFsdWUgPSAwLjU7XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2FuIHNxdWFyZSB3YXZlIGZyZXF1ZW5jeSBtb2R1bGF0ZWQgYnkgYSBzYXd0b290aFxuXHRcdCAqIG9tbmlPc2MudHlwZSA9IFwiZm1zcXVhcmVcIjtcblx0XHQgKiBvbW5pT3NjLm1vZHVsYXRpb25UeXBlID0gXCJzYXd0b290aFwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHByZWZpeCA9ICcnO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0pIHtcblx0ICAgICAgICAgICAgICAgIHByZWZpeCA9ICdmbSc7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuQU0pIHtcblx0ICAgICAgICAgICAgICAgIHByZWZpeCA9ICdhbSc7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICBwcmVmaXggPSAnZmF0Jztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgdGhpcy5fb3NjaWxsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodHlwZS5zdWJzdHIoMCwgMikgPT09ICdmbScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuRk0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZS5zdWJzdHIoMik7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdWJzdHIoMCwgMikgPT09ICdhbScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuQU0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZS5zdWJzdHIoMik7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdWJzdHIoMCwgMykgPT09ICdmYXQnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLkZhdCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlLnN1YnN0cigzKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncHdtJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5QV00pO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwdWxzZScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuUHVsc2UpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5Pc2MpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIFRoaXMgaXMgbm90IGF2YWlsYWJsZSBvbiBcInB3bVwiIGFuZCBcInB1bHNlXCIgb3NjaWxsYXRvciB0eXBlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnBhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCBhIG1lbWJlci9hdHRyaWJ1dGUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gcGFyYW1zXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmFtcFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuT21uaU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChwYXJhbXMsIHZhbHVlKSB7XG5cdCAgICAgICAgLy9tYWtlIHN1cmUgdGhlIHR5cGUgaXMgc2V0IGZpcnN0XG5cdCAgICAgICAgaWYgKHBhcmFtcyA9PT0gJ3R5cGUnKSB7XG5cdCAgICAgICAgICAgIHRoaXMudHlwZSA9IHZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc09iamVjdChwYXJhbXMpICYmIHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgndHlwZScpKSB7XG5cdCAgICAgICAgICAgIHRoaXMudHlwZSA9IHBhcmFtcy50eXBlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3RoZW4gc2V0IHRoZSByZXN0XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuc2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdGhlIG9zY2lsbGF0b3IgdG8gdGhlIGZyZXF1ZW5jeSBhbmQgZGV0dW5lIHNpZ25hbHNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLl9jcmVhdGVOZXdPc2NpbGxhdG9yID0gZnVuY3Rpb24gKG9zY1R5cGUpIHtcblx0ICAgICAgICBpZiAob3NjVHlwZSAhPT0gdGhpcy5fc291cmNlVHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VUeXBlID0gb3NjVHlwZTtcblx0ICAgICAgICAgICAgdmFyIE9zY2lsbGF0b3JDb25zdHJ1Y3RvciA9IFRvbmVbb3NjVHlwZV07XG5cdCAgICAgICAgICAgIC8vc2hvcnQgZGVsYXkgdG8gYXZvaWQgY2xpY2tzIG9uIHRoZSBjaGFuZ2Vcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgb2xkT3NjID0gdGhpcy5fb3NjaWxsYXRvcjtcblx0ICAgICAgICAgICAgICAgIG9sZE9zYy5zdG9wKG5vdyk7XG5cdCAgICAgICAgICAgICAgICAvL2Rpc3Bvc2UgdGhlIG9sZCBvbmVcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbGRPc2MuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgICAgIG9sZE9zYyA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICB9LCB0aGlzLmJsb2NrVGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG5ldyBPc2NpbGxhdG9yQ29uc3RydWN0b3IoKTtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB3aWR0aCBvZiB0aGUgb3NjaWxsYXRvciAob25seSBpZiB0aGUgb3NjaWxsYXRvciBpcyBzZXQgdG8gXCJwdWxzZVwiKVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiBAc2lnbmFsXG5cdFx0ICogQG5hbWUgd2lkdGhcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBvbW5pT3NjID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3IoNDQwLCBcInB1bHNlXCIpO1xuXHRcdCAqIC8vY2FuIGFjY2VzcyB0aGUgd2lkdGggYXR0cmlidXRlIG9ubHkgaWYgdHlwZSA9PT0gXCJwdWxzZVwiXG5cdFx0ICogb21uaU9zYy53aWR0aC52YWx1ZSA9IDAuMjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3dpZHRoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuUHVsc2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLndpZHRoO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIGRldHVuZWQgb3NjaWxsYXRvcnNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGNvdW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdjb3VudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IuY291bnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGNvdW50KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY291bnQgPSBjb3VudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRldHVuZSBzcHJlYWQgYmV0d2VlbiB0aGUgb3NjaWxsYXRvcnMuIElmIFwiY291bnRcIiBpc1xuXHRcdCAqIHNldCB0byAzIG9zY2lsbGF0b3JzIGFuZCB0aGUgXCJzcHJlYWRcIiBpcyBzZXQgdG8gNDAsXG5cdFx0ICogdGhlIHRocmVlIG9zY2lsbGF0b3JzIHdvdWxkIGJlIGRldHVuZWQgbGlrZSB0aGlzOiBbLTIwLCAwLCAyMF1cblx0XHQgKiBmb3IgYSB0b3RhbCBkZXR1bmUgc3ByZWFkIG9mIDQwIGNlbnRzLiBTZWUgVG9uZS5GYXRPc2NpbGxhdG9yXG5cdFx0ICogZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7Q2VudHN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnNwcmVhZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ByZWFkKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3ByZWFkID0gc3ByZWFkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3IuIE9ubHkgaWYgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiBpcyBzZXQgdG8gXCJhbVwiIG9yIFwiZm1cIiB0eXBlcy4gc2VlLiBUb25lLkFNT3NjaWxsYXRvciBvciBUb25lLkZNT3NjaWxsYXRvclxuXHRcdCAqIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uVHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvblR5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSB8fCB0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvblR5cGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1UeXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSB8fCB0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uVHlwZSA9IG1UeXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbW9kdWxhdGlvbiBpbmRleCB3aGljaCBpcyBpbiBlc3NlbmNlIHRoZSBkZXB0aCBvciBhbW91bnQgb2YgdGhlIG1vZHVsYXRpb24uIEluIG90aGVyIHRlcm1zIGl0IGlzIHRoZVxuXHRcdCAqIHJhdGlvIG9mIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1vZHVsYXRpbmcgc2lnbmFsIChtZikgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGVcblx0XHQgKiBtb2R1bGF0aW5nIHNpZ25hbCAobWEpIC0tIGFzIGluIG1hL21mLlxuXHRcdCAqIFNlZSBUb25lLkZNT3NjaWxsYXRvciBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAc2lnbmFsXG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvbkluZGV4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uSW5kZXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvbkluZGV4O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSBjYXJyaWVyIGFuZCB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3JzLlxuXHRcdCAqICBBIGhhcm1vbmljaXR5IG9mIDEgZ2l2ZXMgYm90aCBvc2NpbGxhdG9ycyB0aGUgc2FtZSBmcmVxdWVuY3kuXG5cdFx0ICogIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuIFNlZSBUb25lLkFNT3NjaWxsYXRvciBvciBUb25lLkZNT3NjaWxsYXRvclxuXHRcdCAqICBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiAgQHNpZ25hbFxuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGhhcm1vbmljaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdoYXJtb25pY2l0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNIHx8IHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5oYXJtb25pY2l0eTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1vZHVsYXRpb25GcmVxdWVuY3kgU2lnbmFsIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogKG9ubHkgaWYgdGhlIG9zY2lsbGF0b3IgdHlwZSBpcyBzZXQgdG8gcHdtKS4gU2VlXG5cdFx0ICogVG9uZS5QV01Pc2NpbGxhdG9yIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAc2lnbmFsXG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvbkZyZXF1ZW5jeVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIG9tbmlPc2MgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcig0NDAsIFwicHdtXCIpO1xuXHRcdCAqIC8vY2FuIGFjY2VzcyB0aGUgbW9kdWxhdGlvbkZyZXF1ZW5jeSBhdHRyaWJ1dGUgb25seSBpZiB0eXBlID09PSBcInB3bVwiXG5cdFx0ICogb21uaU9zYy5tb2R1bGF0aW9uRnJlcXVlbmN5LnZhbHVlID0gMC4yO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvbkZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLlBXTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvbkZyZXF1ZW5jeTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLk9tbmlPc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc291cmNlVHlwZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT21uaU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQmFzZS1jbGFzcyBmb3IgYWxsIGluc3RydW1lbnRzXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkluc3RydW1lbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCBhbmQgdm9sdW1lIHRyaW1pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBzb3VyY2Uudm9sdW1lLnZhbHVlID0gLTY7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogS2VlcCB0cmFjayBvZiBhbGwgZXZlbnRzIHNjaGVkdWxlZCB0byB0aGUgdHJhbnNwb3J0XG5cdFx0XHQgKiB3aGVuIHRoZSBpbnN0cnVtZW50IGlzICdzeW5jZWQnXG5cdFx0XHQgKiBAdHlwZSB7QXJyYXk8TnVtYmVyPn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSBbXTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkluc3RydW1lbnQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzXG5cdFx0ICogIEB0eXBlIHtvYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgLyoqIHRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscyAqL1xuXHQgICAgICAgICd2b2x1bWUnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5vdGUgdGhlIG5vdGUgdG8gdHJpZ2dlclxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdG8gdHJpZ2dlciB0aGUgbnRvZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSB0byB0cmlnZ2VyIHRoZSBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBUb25lLm5vT3A7XG5cdCAgICAvKipcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB3aGVuIHRvIHRyaWdnZXIgdGhlIHJlbGVhc2Vcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBUb25lLm5vT3A7XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIGluc3RydW1lbnQuc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBpbnN0cnVtZW50LnRyaWdnZXJBdHRhY2tSZWxlYXNlKCdDNCcsICc4bicsIDApXG5cdFx0ICogaW5zdHJ1bWVudC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnRTQnLCAnOG4nLCAnOG4nKVxuXHRcdCAqIGluc3RydW1lbnQudHJpZ2dlckF0dGFja1JlbGVhc2UoJ0c0JywgJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyQXR0YWNrJywgMSk7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlclJlbGVhc2UnLCAwKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBXcmFwIHRoZSBnaXZlbiBtZXRob2Qgc28gdGhhdCBpdCBjYW4gYmUgc3luY2hyb25pemVkXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZCBXaGljaCBtZXRob2QgdG8gd3JhcCBhbmQgc3luY1xuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZVBvc2l0aW9uIFdoYXQgcG9zaXRpb24gdGhlIHRpbWUgYXJndW1lbnQgYXBwZWFycyBpblxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLl9zeW5jTWV0aG9kID0gZnVuY3Rpb24gKG1ldGhvZCwgdGltZVBvc2l0aW9uKSB7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsTWV0aG9kID0gdGhpc1snX29yaWdpbmFsXycgKyBtZXRob2RdID0gdGhpc1ttZXRob2RdO1xuXHQgICAgICAgIHRoaXNbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB2YXIgdGltZSA9IGFyZ3NbdGltZVBvc2l0aW9uXTtcblx0ICAgICAgICAgICAgdmFyIGlkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgICAgIGFyZ3NbdGltZVBvc2l0aW9uXSA9IHQ7XG5cdCAgICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzLnB1c2goaWQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIGluc3RydW1lbnQgZnJvbSB0aGUgVHJhbnNwb3J0XG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGlkKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSBbXTtcblx0ICAgICAgICBpZiAodGhpcy5fb3JpZ2luYWxfdHJpZ2dlckF0dGFjaykge1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sgPSB0aGlzLl9vcmlnaW5hbF90cmlnZ2VyQXR0YWNrO1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlID0gdGhpcy5fb3JpZ2luYWxfdHJpZ2dlclJlbGVhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHRoZW4gdGhlIHJlbGVhc2UgYWZ0ZXIgdGhlIGR1cmF0aW9uLlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHRyaWdnZXIuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBub3RlIHNob3VsZCBiZSBoZWxkIGZvciBiZWZvcmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmluZyB0aGUgcmVsZWFzZS4gVGhpcyB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gIFdoZW4gdGhlIG5vdGUgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgdGhlIG5vdGUgc2hvdWxkIGJlIHRyaWdnZXJlZCBhdC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciBcIkM0XCIgZm9yIHRoZSBkdXJhdGlvbiBvZiBhbiA4dGggbm90ZVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAobm90ZSwgZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayhub3RlLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSh0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd2b2x1bWUnXSk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5JbnN0cnVtZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRoaXMgaXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3Igb3RoZXIgbW9ub3Bob25pYyBpbnN0cnVtZW50cyB0byBcblx0XHQgKiAgICAgICAgICBleHRlbmQuIElNUE9SVEFOVDogSXQgZG9lcyBub3QgbWFrZSBhbnkgc291bmQgb24gaXRzIG93biBhbmRcblx0XHQgKiAgICAgICAgICBzaG91bGRuJ3QgYmUgZGlyZWN0bHkgaW5zdGFudGlhdGVkLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1vbm9waG9uaWMuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnbGlkZSB0aW1lIGJldHdlZW4gbm90ZXMuIFxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wb3J0YW1lbnRvID0gb3B0aW9ucy5wb3J0YW1lbnRvO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9ub3Bob25pYywgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLmRlZmF1bHRzID0geyAncG9ydGFtZW50byc6IDAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgb2YgdGhlIG5vdGUgb3B0aW9uYWxseSB3aXRoIGEgZ2l2ZW4gdmVsb2NpdHkuIFxuXHRcdCAqICBcblx0XHQgKiAgXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gdHJpZ2dlci5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgV2hlbiB0aGUgbm90ZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHZlbG9jaXR5IFRoZSB2ZWxvY2l0eSBzY2FsZXIgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZXMgaG93IFwibG91ZFwiIHRoZSBub3RlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub3Bob25pY30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2soXCJDNFwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgdGhlIG5vdGUgYSBoYWxmIHNlY29uZCBmcm9tIG5vdyBhdCBoYWxmIHZlbG9jaXR5XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFjayhcIkM0XCIsIFwiKzAuNVwiLCAwLjUpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5zZXROb3RlKG5vdGUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gSWYgbm8gdGltZSBpcyBnaXZlbiwgdGhlIHJlbGVhc2UgaGFwcGVucyBpbW1lZGlhdGx5XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9waG9uaWN9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzeW50aC50cmlnZ2VyUmVsZWFzZSgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggdGhlIGFjdHVhbCBtZXRob2Rcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggdGhlIGFjdHVhbCBtZXRob2Rcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGxldmVsIG9mIHRoZSBvdXRwdXQgYXQgdGhlIGdpdmVuIHRpbWUuIE1lYXN1cmVzXG5cdFx0ICogIHRoZSBlbnZlbG9wZShzKSB2YWx1ZSBhdCB0aGUgdGltZS4gXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0byBxdWVyeSB0aGUgZW52ZWxvcGUgdmFsdWVcblx0XHQgKiAgQHJldHVybiB7Tm9ybWFsUmFuZ2V9IFRoZSBvdXRwdXQgbGV2ZWwgYmV0d2VlbiAwLTFcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZ2V0TGV2ZWxBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5lbnZlbG9wZS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBub3RlIGF0IHRoZSBnaXZlbiB0aW1lLiBJZiBubyB0aW1lIGlzIGdpdmVuLCB0aGUgbm90ZVxuXHRcdCAqICB3aWxsIHNldCBpbW1lZGlhdGVseS4gXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBub3RlIFRoZSBub3RlIHRvIGNoYW5nZSB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBub3RlIHNob3VsZCBiZSBzZXQuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vcGhvbmljfSB0aGlzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2NoYW5nZSB0byBGIzYgaW4gb25lIHF1YXJ0ZXIgbm90ZSBmcm9tIG5vdy5cblx0XHQgKiBzeW50aC5zZXROb3RlKFwiRiM2XCIsIFwiKzRuXCIpO1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jaGFuZ2UgdG8gQmI0IHJpZ2h0IG5vd1xuXHRcdCAqIHN5bnRoLnNldE5vdGUoXCJCYjRcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLnNldE5vdGUgPSBmdW5jdGlvbiAobm90ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5wb3J0YW1lbnRvID4gMCAmJiB0aGlzLmdldExldmVsQXRUaW1lKHRpbWUpID4gMC4wNSkge1xuXHQgICAgICAgICAgICB2YXIgcG9ydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLnBvcnRhbWVudG8pO1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5leHBvbmVudGlhbFJhbXBUbyhub3RlLCBwb3J0VGltZSwgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUobm90ZSwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vbm9waG9uaWM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5TeW50aCBpcyBjb21wb3NlZCBzaW1wbHkgb2YgYSBUb25lLk9tbmlPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICAgcm91dGVkIHRocm91Z2ggYSBUb25lLkFtcGxpdHVkZUVudmVsb3BlLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xLTFfMFlXMloxSjJFUEkzNlA4Zk5DTWNaRzdOMXcxR1psdVBzNG9nNGV2by9wdWI/dz0xMTYzJmg9MjMxXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT21uaU9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihvcHRpb25zLm9zY2lsbGF0b3IpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5vc2NpbGxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5vc2NpbGxhdG9yLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgb3NjaWxsYXRvcnMgdG8gdGhlIG91dHB1dFxuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5jaGFpbih0aGlzLmVudmVsb3BlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3RyaWFuZ2xlJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDA1LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMC4zLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDFcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBhdHRhY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgLy9pZiB0aGVyZSBpcyBubyByZWxlYXNlIHBvcnRpb24sIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQU1TeW50aCB1c2VzIHRoZSBvdXRwdXQgb2Ygb25lIFRvbmUuU3ludGggdG8gbW9kdWxhdGUgdGhlXG5cdFx0ICogICAgICAgICAgYW1wbGl0dWRlIG9mIGFub3RoZXIgVG9uZS5TeW50aC4gVGhlIGhhcm1vbmljaXR5ICh0aGUgcmF0aW8gYmV0d2VlblxuXHRcdCAqICAgICAgICAgIHRoZSB0d28gc2lnbmFscykgYWZmZWN0cyB0aGUgdGltYnJlIG9mIHRoZSBvdXRwdXQgc2lnbmFsIGdyZWF0bHkuXG5cdFx0ICogICAgICAgICAgUmVhZCBtb3JlIGFib3V0IEFtcGxpdHVkZSBNb2R1bGF0aW9uIFN5bnRoZXNpcyBvblxuXHRcdCAqICAgICAgICAgIFtTb3VuZE9uU291bmRdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwNDEwMzY1My9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb206ODAvc29zL21hcjAwL2FydGljbGVzL3N5bnRoc2VjcmV0cy5odG0pLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xVFF1OEVkNGlGcjFZVExLcEIzVTFfaHVyLVV3QnJoNWdkQlhjOEJ4ZkdLdy9wdWI/dz0xMDA5Jmg9NDU3XCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5BTVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5BTVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLlN5bnRoKCk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIncyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IHRoaXMuX2NhcnJpZXIub3NjaWxsYXRvcjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gdGhpcy5fY2Fycmllci5lbnZlbG9wZS5zZXQob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuU3ludGgoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBvc2NpbGxhdG9yIHdoaWNoIGlzIGFwcGxpZWRcblx0XHRcdCAqICB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IHRoaXMuX21vZHVsYXRvci5vc2NpbGxhdG9yLnNldChvcHRpb25zLm1vZHVsYXRpb24pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBlbnZlbG9wZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSB0aGlzLl9tb2R1bGF0b3IuZW52ZWxvcGUuc2V0KG9wdGlvbnMubW9kdWxhdGlvbkVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoNDQwLCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSByYXRpbyBiZXR3ZWVuIHRoZSB0d28gdm9pY2VzLiBBIGhhcm1vbmljaXR5IG9mXG5cdFx0XHQgKiAgMSBpcyBubyBjaGFuZ2UuIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy9waXRjaCB2b2ljZTEgYW4gb2N0YXZlIGJlbG93IHZvaWNlMFxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb252ZXJ0IHRoZSAtMSwxIG91dHB1dCB0byAwLDFcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BdWRpb1RvR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSB0d28gdm9pY2VzIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmZhbih0aGlzLl9jYXJyaWVyLmRldHVuZSwgdGhpcy5fbW9kdWxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNoYWluKHRoaXMuX21vZHVsYXRpb25TY2FsZSwgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5jaGFpbih0aGlzLl9tb2R1bGF0aW9uTm9kZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFNU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDMsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4wMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ21vZHVsYXRpb24nOiB7ICd0eXBlJzogJ3NxdWFyZScgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC41LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCBvY2N1clxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIC8vdGhlIHBvcnQgZ2xpZGVcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIHJlbGVhc2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQU1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFNU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Nb25vU3ludGggaXMgY29tcG9zZWQgb2Ygb25lIG9zY2lsbGF0b3IsIG9uZSBmaWx0ZXIsIGFuZCB0d28gZW52ZWxvcGVzLlxuXHRcdCAqICAgICAgICAgIFRoZSBhbXBsaXR1ZGUgb2YgdGhlIFRvbmUuT3NjaWxsYXRvciBhbmQgdGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlXG5cdFx0ICogICAgICAgICAgVG9uZS5GaWx0ZXIgYXJlIGNvbnRyb2xsZWQgYnkgVG9uZS5FbnZlbG9wZXMuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFnYVkxREY5X0h6a29kcWY4SkkxQ2cyVlpmd1NFbHBGUWZJOTRJUXdhZDM4L3B1Yj93PTkyNCZoPTI0MFwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLk1vbm9TeW50aCh7XG5cdFx0ICogXHRcIm9zY2lsbGF0b3JcIiA6IHtcblx0XHQgKiBcdFx0XCJ0eXBlXCIgOiBcInNxdWFyZVwiXG5cdFx0ICogIH0sXG5cdFx0ICogIFwiZW52ZWxvcGVcIiA6IHtcblx0XHQgKiAgXHRcImF0dGFja1wiIDogMC4xXG5cdFx0ICogIH1cblx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTW9ub1N5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5PbW5pT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKG9wdGlvbnMub3NjaWxsYXRvcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLm9zY2lsbGF0b3IuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIob3B0aW9ucy5maWx0ZXIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaWx0ZXIgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRnJlcXVlbmN5RW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlID0gbmV3IFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUob3B0aW9ucy5maWx0ZXJFbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIG9zY2lsbGF0b3JzIHRvIHRoZSBvdXRwdXRcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuY2hhaW4odGhpcy5maWx0ZXIsIHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGZpbHRlciBlbnZlbG9wZVxuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUuY29ubmVjdCh0aGlzLmZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmaWx0ZXInLFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb25vU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAnQzQnLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzcXVhcmUnIH0sXG5cdCAgICAgICAgJ2ZpbHRlcic6IHtcblx0ICAgICAgICAgICAgJ1EnOiA2LFxuXHQgICAgICAgICAgICAndHlwZSc6ICdsb3dwYXNzJyxcblx0ICAgICAgICAgICAgJ3JvbGxvZmYnOiAtMjRcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDA1LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMC45LFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDFcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdmaWx0ZXJFbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDYsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMixcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjUsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMixcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJzogNyxcblx0ICAgICAgICAgICAgJ2V4cG9uZW50JzogMlxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vdGhlIGVudmVsb3Blc1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmaWx0ZXInLFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Nb25vU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5EdW9TeW50aCBpcyBhIG1vbm9waG9uaWMgc3ludGggY29tcG9zZWQgb2YgdHdvXG5cdFx0ICogICAgICAgICAgTW9ub1N5bnRocyBydW4gaW4gcGFyYWxsZWwgd2l0aCBjb250cm9sIG92ZXIgdGhlXG5cdFx0ICogICAgICAgICAgZnJlcXVlbmN5IHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMgYW5kIHZpYnJhdG8gZWZmZWN0LlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xYkw0R1h2ZlJNTWxxUzdYeUJtOUNqTDlLSlBTVUtiY2RCTnBxT2xrRkx4ay9wdWI/dz0xMDEyJmg9NDQ4XCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGR1b1N5bnRoID0gbmV3IFRvbmUuRHVvU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIGR1b1N5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCIyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5EdW9TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZpcnN0IHZvaWNlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTW9ub1N5bnRofVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2ljZTAgPSBuZXcgVG9uZS5Nb25vU3ludGgob3B0aW9ucy52b2ljZTApO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2Vjb25kIHZvaWNlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTW9ub1N5bnRofVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2ljZTEgPSBuZXcgVG9uZS5Nb25vU3ludGgob3B0aW9ucy52b2ljZTEpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmlicmF0byBMRk8uXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92aWJyYXRvID0gbmV3IFRvbmUuTEZPKG9wdGlvbnMudmlicmF0b1JhdGUsIC01MCwgNTApO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8uc3RhcnQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSB2aWJyYXRvIGZyZXF1ZW5jeVxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmlicmF0b1JhdGUgPSB0aGlzLl92aWJyYXRvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdmlicmF0byBnYWluXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMudmlicmF0b0Ftb3VudCwgVG9uZS5UeXBlLlBvc2l0aXZlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbW91bnQgb2YgdmlicmF0b1xuXHRcdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52aWJyYXRvQW1vdW50ID0gdGhpcy5fdmlicmF0b0dhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZnJlcXVlbmN5IGNvbnRyb2xcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDQ0MCwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMuIEEgaGFybW9uaWNpdHkgb2Zcblx0XHRcdCAqICAxIGlzIG5vIGNoYW5nZS4gSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHZvaWNlMSBhbiBvY3RhdmUgYmVsb3cgdm9pY2UwXG5cdFx0XHQgKiBkdW9TeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8vY29udHJvbCB0aGUgdHdvIHZvaWNlcyBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMudm9pY2UwLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy52b2ljZTEuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvLmNvbm5lY3QodGhpcy5fdmlicmF0b0dhaW4pO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG9HYWluLmZhbih0aGlzLnZvaWNlMC5kZXR1bmUsIHRoaXMudm9pY2UxLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAndm9pY2UwJyxcblx0ICAgICAgICAgICAgJ3ZvaWNlMScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndmlicmF0b0Ftb3VudCcsXG5cdCAgICAgICAgICAgICd2aWJyYXRvUmF0ZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkR1b1N5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZpYnJhdG9BbW91bnQnOiAwLjUsXG5cdCAgICAgICAgJ3ZpYnJhdG9SYXRlJzogNSxcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAxLjUsXG5cdCAgICAgICAgJ3ZvaWNlMCc6IHtcblx0ICAgICAgICAgICAgJ3ZvbHVtZSc6IC0xMCxcblx0ICAgICAgICAgICAgJ3BvcnRhbWVudG8nOiAwLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAgICAgJ2ZpbHRlckVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3ZvaWNlMSc6IHtcblx0ICAgICAgICAgICAgJ3ZvbHVtZSc6IC0xMCxcblx0ICAgICAgICAgICAgJ3BvcnRhbWVudG8nOiAwLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAgICAgJ2ZpbHRlckVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXNcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EdW9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnZvaWNlMS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVzXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EdW9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMudm9pY2UwLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGxldmVsIG9mIHRoZSBvdXRwdXQgYXQgdGhlIGdpdmVuIHRpbWUuIE1lYXN1cmVzXG5cdFx0ICogIHRoZSBlbnZlbG9wZShzKSB2YWx1ZSBhdCB0aGUgdGltZS4gXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0byBxdWVyeSB0aGUgZW52ZWxvcGUgdmFsdWVcblx0XHQgKiAgQHJldHVybiB7Tm9ybWFsUmFuZ2V9IFRoZSBvdXRwdXQgbGV2ZWwgYmV0d2VlbiAwLTFcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGgucHJvdG90eXBlLmdldExldmVsQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gKHRoaXMudm9pY2UwLmdldExldmVsQXRUaW1lKHRpbWUpICsgdGhpcy52b2ljZTEuZ2V0TGV2ZWxBdFRpbWUodGltZSkpIC8gMjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRHVvU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAndm9pY2UwJyxcblx0ICAgICAgICAgICAgJ3ZvaWNlMScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndmlicmF0b0Ftb3VudCcsXG5cdCAgICAgICAgICAgICd2aWJyYXRvUmF0ZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmlicmF0b0Ftb3VudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52aWJyYXRvQW1vdW50ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZpYnJhdG9SYXRlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5EdW9TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBGTVN5bnRoIGlzIGNvbXBvc2VkIG9mIHR3byBUb25lLlN5bnRocyB3aGVyZSBvbmUgVG9uZS5TeW50aCBtb2R1bGF0ZXNcblx0XHQgKiAgICAgICAgICB0aGUgZnJlcXVlbmN5IG9mIGEgc2Vjb25kIFRvbmUuU3ludGguIEEgbG90IG9mIHNwZWN0cmFsIGNvbnRlbnRcblx0XHQgKiAgICAgICAgICBjYW4gYmUgZXhwbG9yZWQgdXNpbmcgdGhlIG1vZHVsYXRpb25JbmRleCBwYXJhbWV0ZXIuIFJlYWQgbW9yZSBhYm91dFxuXHRcdCAqICAgICAgICAgIGZyZXF1ZW5jeSBtb2R1bGF0aW9uIHN5bnRoZXNpcyBvbiBTb3VuZCBPbiBTb3VuZDogW1BhcnQgMV0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDAzMTIzNzA0L2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvYXByMDAvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmh0bSksIFtQYXJ0IDJdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwMzExNTgzNS9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL21heTAwL2FydGljbGVzL3N5bnRoLmh0bSkuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFoMFBVRFpYUGdpNElreDZiVlQ2b25jcllQTGx1Rkt5N2xqNTNwdXhqLURNL3B1Yj93PTkwMiZoPTQ2MlwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBmbVN5bnRoID0gbmV3IFRvbmUuRk1TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogZm1TeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM1XCIsIFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5GTVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLlN5bnRoKG9wdGlvbnMuY2Fycmllcik7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIncyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IHRoaXMuX2NhcnJpZXIub3NjaWxsYXRvcjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSB0aGlzLl9jYXJyaWVyLmVudmVsb3BlLnNldChvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5TeW50aChvcHRpb25zLm1vZHVsYXRvcik7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yJ3Mgb3NjaWxsYXRvciB3aGljaCBpcyBhcHBsaWVkXG5cdFx0XHQgKiAgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSB0aGlzLl9tb2R1bGF0b3Iub3NjaWxsYXRvci5zZXQob3B0aW9ucy5tb2R1bGF0aW9uKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSB0aGlzLl9tb2R1bGF0b3IuZW52ZWxvcGUuc2V0KG9wdGlvbnMubW9kdWxhdGlvbkVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbCg0NDAsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHNcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMuIEEgaGFybW9uaWNpdHkgb2Zcblx0XHRcdCAqICAxIGlzIG5vIGNoYW5nZS4gSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHZvaWNlMSBhbiBvY3RhdmUgYmVsb3cgdm9pY2UwXG5cdFx0XHQgKiBzeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW9uIGluZGV4IHdoaWNoIGVzc2VudGlhbGx5IHRoZSBkZXB0aCBvciBhbW91bnQgb2YgdGhlIG1vZHVsYXRpb24uIEl0IGlzIHRoZVxuXHRcdFx0ICogIHJhdGlvIG9mIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1vZHVsYXRpbmcgc2lnbmFsIChtZikgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGVcblx0XHRcdCAqICBtb2R1bGF0aW5nIHNpZ25hbCAobWEpIC0tIGFzIGluIG1hL21mLlxuXHRcdFx0ICpcdEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqXHRAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMubW9kdWxhdGlvbkluZGV4KTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG5ldyBUb25lLkdhaW4oMCk7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSB0d28gdm9pY2VzIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMubW9kdWxhdGlvbkluZGV4LCB0aGlzLl9tb2R1bGF0aW9uTm9kZSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZmFuKHRoaXMuX2NhcnJpZXIuZGV0dW5lLCB0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY29ubmVjdCh0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GTVN5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAzLFxuXHQgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnOiAxMCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjAxLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbic6IHsgJ3R5cGUnOiAnc3F1YXJlJyB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogXHR0cmlnZ2VyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCBvY2N1clxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GTVN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIHJlbGVhc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRk1TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GTVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZNU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5NZW1icmFuZVN5bnRoIG1ha2VzIGtpY2sgYW5kIHRvbSBzb3VuZHMgdXNpbmcgYSBzaW5nbGUgb3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgIHdpdGggYW4gYW1wbGl0dWRlIGVudmVsb3BlIGFuZCBmcmVxdWVuY3kgcmFtcC4gQSBUb25lLk9tbmlPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICAgaXMgcm91dGVkIHRocm91Z2ggYSBUb25lLkFtcGxpdHVkZUVudmVsb3BlIHRvIHRoZSBvdXRwdXQuIFRoZSBkcnVtXG5cdFx0ICogICAgICAgICAgcXVhbGl0eSBvZiB0aGUgc291bmQgY29tZXMgZnJvbSB0aGUgZnJlcXVlbmN5IGVudmVsb3BlIGFwcGxpZWRcblx0XHQgKiAgICAgICAgICBkdXJpbmcgVG9uZS5NZW1icmFuZVN5bnRoLnRyaWdnZXJBdHRhY2sobm90ZSkuIFRoZSBmcmVxdWVuY3kgZW52ZWxvcGVcblx0XHQgKiAgICAgICAgICBzdGFydHMgYXQgPGNvZGU+bm90ZSAqIC5vY3RhdmVzPC9jb2RlPiBhbmQgcmFtcHMgdG8gPGNvZGU+bm90ZTwvY29kZT5cblx0XHQgKiAgICAgICAgICBvdmVyIHRoZSBkdXJhdGlvbiBvZiA8Y29kZT4ucGl0Y2hEZWNheTwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuTWVtYnJhbmVTeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDMlwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTWVtYnJhbmVTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT21uaU9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihvcHRpb25zLm9zY2lsbGF0b3IpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoZSBwaXRjaCBlbnZlbG9wZSByYW1wcy5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBmcmVxdWVuY3kgZW52ZWxvcGUgdGFrZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBpdGNoRGVjYXkgPSBvcHRpb25zLnBpdGNoRGVjYXk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmNoYWluKHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWVtYnJhbmVTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BpdGNoRGVjYXknOiAwLjA1LFxuXHQgICAgICAgICdvY3RhdmVzJzogMTAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuNCxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDEuNCxcblx0ICAgICAgICAgICAgJ2F0dGFja0N1cnZlJzogJ2V4cG9uZW50aWFsJ1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoIHRoZSBnaXZlbiB2ZWxvY2l0eS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIHRoZSB0aW1lLCBpZiBub3QgZ2l2ZW4gaXMgbm93XG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHZlbG9jaXR5IGRlZmF1bHRzIHRvIDFcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVtYnJhbmVTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICBraWNrLnRyaWdnZXJBdHRhY2soNjApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIG5vdGUgPSB0aGlzLnRvRnJlcXVlbmN5KG5vdGUpO1xuXHQgICAgICAgIHZhciBtYXhOb3RlID0gbm90ZSAqIHRoaXMub2N0YXZlcztcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKG1heE5vdGUsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZShub3RlLCB0aW1lICsgdGhpcy50b1NlY29uZHModGhpcy5waXRjaERlY2F5KSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgbm90ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgcmVsZWFzZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZW1icmFuZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lbWJyYW5lU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZW1icmFuZVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgSW5oYXJtb25pYyByYXRpbyBvZiBmcmVxdWVuY2llcyBiYXNlZCBvbiB0aGUgUm9sYW5kIFRSLTgwOFxuXHRcdCAqICBUYWtlbiBmcm9tIGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L3BhcGVycy90ci04MDgtY3ltYmFsLXBoeXNpY2FsbHktaW5mb3JtZWQtY2lyY3VpdC1iZW5kYWJsZS1kaWdpdGFsLW1vZGVsXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGluaGFybVJhdGlvcyA9IFtcblx0ICAgICAgICAxLFxuXHQgICAgICAgIDEuNDgzLFxuXHQgICAgICAgIDEuOTMyLFxuXHQgICAgICAgIDIuNTQ2LFxuXHQgICAgICAgIDIuNjMsXG5cdCAgICAgICAgMy44OTdcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIGhpZ2hseSBpbmhhcm1vbmljIGFuZCBzcGVjdHJhbGx5IGNvbXBsZXggc291cmNlIHdpdGggYSBoaWdocGFzcyBmaWx0ZXJcblx0XHQgKiAgICAgICAgICBhbmQgYW1wbGl0dWRlIGVudmVsb3BlIHdoaWNoIGlzIGdvb2QgZm9yIG1ha2luZyBtZXRhbG9waG9uZSBzb3VuZHMuIEJhc2VkXG5cdFx0ICogICAgICAgICAgb24gQ3ltYmFsU3ludGggYnkgW0Bwb2x5cmh5dGhtYXRpY10oaHR0cHM6Ly9naXRodWIuY29tL3BvbHlyaHl0aG1hdGljKS5cblx0XHQgKiAgICAgICAgICBJbnNwaXJhdGlvbiBmcm9tIFtTb3VuZCBvbiBTb3VuZF0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNjEwMTQzOTI0L2h0dHBzOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL2p1bDAyL2FydGljbGVzL3N5bnRoc2VjcmV0czA3MDIuYXNwKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBhdmFpbGJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTWV0YWxTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgY3ltYmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiBGTU9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG11bHRpcGxpZXJzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mcmVxTXVsdGlwbGllcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGZvciB0aGUgYm9keVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVlID0gbmV3IFRvbmUuR2FpbigwKS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBoaWdocGFzcyB0aGUgb3V0cHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9oaWdocGFzcyA9IG5ldyBUb25lLkZpbHRlcih7XG5cdCAgICAgICAgICAgICd0eXBlJzogJ2hpZ2hwYXNzJyxcblx0ICAgICAgICAgICAgJ1EnOiAtMy4wMTAyOTk5NTY2Mzk4MTI1XG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoZSBoaWdocGFzc1xuXHRcdFx0ICogIGZpbHRlciBmcmVxdWVuY3kgcmFtcHNcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNjYWxlIHRoZSBib2R5IGVudmVsb3BlXG5cdFx0XHQgKiAgZm9yIHRoZSBiYW5kcGFzc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNjYWxlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyID0gbmV3IFRvbmUuU2NhbGUob3B0aW9ucy5yZXNvbmFuY2UsIDcwMDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBlbnZlbG9wZSB3aGljaCBpcyBjb25uZWN0ZWQgYm90aCB0byB0aGVcblx0XHRcdCAqICBhbXBsaXR1ZGUgYW5kIGhpZ2hwYXNzIGZpbHRlcidzIGN1dG9mZiBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuRW52ZWxvcGUoe1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogb3B0aW9ucy5lbnZlbG9wZS5hdHRhY2ssXG5cdCAgICAgICAgICAgICdhdHRhY2tDdXJ2ZSc6ICdsaW5lYXInLFxuXHQgICAgICAgICAgICAnZGVjYXknOiBvcHRpb25zLmVudmVsb3BlLmRlY2F5LFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogb3B0aW9ucy5lbnZlbG9wZS5yZWxlYXNlXG5cdCAgICAgICAgfSkuY2hhaW4odGhpcy5fZmlsdGVyRnJlcVNjYWxlciwgdGhpcy5faGlnaHBhc3MuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmNvbm5lY3QodGhpcy5fYW1wbGl0dWUuZ2Fpbik7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmhhcm1SYXRpb3MubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIG9zYyA9IG5ldyBUb25lLkZNT3NjaWxsYXRvcih7XG5cdCAgICAgICAgICAgICAgICAndHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICAgICAgICAgJ21vZHVsYXRpb25UeXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgICAgICAgICAnaGFybW9uaWNpdHknOiBvcHRpb25zLmhhcm1vbmljaXR5LFxuXHQgICAgICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IG9wdGlvbnMubW9kdWxhdGlvbkluZGV4XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBvc2MuY29ubmVjdCh0aGlzLl9oaWdocGFzcyk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldID0gb3NjO1xuXHQgICAgICAgICAgICB2YXIgbXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KGluaGFybVJhdGlvc1tpXSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVyc1tpXSA9IG11bHQ7XG5cdCAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKG11bHQsIG9zYy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3NldCB0aGUgb2N0YXZlc1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1ldGFsU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAxLjQsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC4yXG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiA1LjEsXG5cdCAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IDMyLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiA0MDAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogMS41XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjay5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgICAgICBXaGVuIHRoZSBhdHRhY2sgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBbdmVsb2NpdHk9MV0gIFRoZSB2ZWxvY2l0eSB0aGF0IHRoZSBlbnZlbG9wZSBzaG91bGQgYmUgdHJpZ2dlcmVkIGF0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NZXRhbFN5bnRofSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbCkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2ZWwgPSBUb25lLmRlZmF1bHRBcmcodmVsLCAxKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vaWYgdGhlIHN1c3RhaW4gaXMgMCwgc3RvcCB0aGUgb3NjaWxsYXRvciBhcyB3ZWxsXG5cdCAgICAgICAgaWYgKHRoaXMuZW52ZWxvcGUuc3VzdGFpbiA9PT0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICAgICAgV2hlbiB0aGUgcmVsZWFzZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NZXRhbFN5bnRofSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMuZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAwKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2Ugb2YgdGhlIGVudmVsb3BlIGFmdGVyIHRoZSBnaXZlblxuXHRcdCAqICBkdXJhdGlvbi5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIGR1cmF0aW9uICBUaGUgZHVyYXRpb24gYmVmb3JlIHRyaWdnZXJpbmcgdGhlIHJlbGVhc2Vcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgICAgICBXaGVuIHRoZSBhdHRhY2sgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBbdmVsb2NpdHk9MV0gIFRoZSB2ZWxvY2l0eSB0aGF0IHRoZSBlbnZlbG9wZSBzaG91bGQgYmUgdHJpZ2dlcmVkIGF0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NZXRhbFN5bnRofSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBtb2R1bGF0aW9uSW5kZXggb2YgdGhlIG9zY2lsbGF0b3JzIHdoaWNoIG1ha2UgdXAgdGhlIHNvdXJjZS5cblx0XHQgKiAgc2VlIFRvbmUuRk1Pc2NpbGxhdG9yLm1vZHVsYXRpb25JbmRleFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lICBtb2R1bGF0aW9uSW5kZXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLCAnbW9kdWxhdGlvbkluZGV4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvcnNbMF0ubW9kdWxhdGlvbkluZGV4LnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldLm1vZHVsYXRpb25JbmRleC52YWx1ZSA9IHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBoYXJtb25pY2l0eSBvZiB0aGUgb3NjaWxsYXRvcnMgd2hpY2ggbWFrZSB1cCB0aGUgc291cmNlLlxuXHRcdCAqICBzZWUgVG9uZS5GTU9zY2lsbGF0b3IuaGFybW9uaWNpdHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTWV0YWxTeW50aCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSAgaGFybW9uaWNpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLCAnaGFybW9uaWNpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yc1swXS5oYXJtb25pY2l0eS52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXS5oYXJtb25pY2l0eS52YWx1ZSA9IHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIGhpZ2hwYXNzIGZpbHRlciBhdHRhY2hlZCB0byB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTWV0YWxTeW50aCNcblx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiAgQG5hbWUgIHJlc29uYW5jZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdyZXNvbmFuY2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1pbiA9IHZhbDtcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIFwicmVzb25hbmNlXCIgZnJlcXVlbmN5XG5cdFx0ICogIHRoYXQgdGhlIGZpbHRlciByYW1wcyBkdXJpbmcgdGhlIGF0dGFjay9kZWNheSBlbnZlbG9wZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSAgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdHM7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWF4ID0gdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5taW4gKiBNYXRoLnBvdygyLCBvY3RzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZXRhbFN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVyc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mcmVxTXVsdGlwbGllcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9oaWdocGFzcy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faGlnaHBhc3MgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1ldGFsU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Ob2lzZVN5bnRoIGlzIGNvbXBvc2VkIG9mIGEgbm9pc2UgZ2VuZXJhdG9yIChUb25lLk5vaXNlKSwgb25lIGZpbHRlciAoVG9uZS5GaWx0ZXIpLFxuXHRcdCAqICAgICAgICAgIGFuZCB0d28gZW52ZWxvcGVzIChUb25lLkVudmVsb3ApLiBPbmUgZW52ZWxvcGUgY29udHJvbHMgdGhlIGFtcGxpdHVkZVxuXHRcdCAqICAgICAgICAgIG9mIHRoZSBub2lzZSBhbmQgdGhlIG90aGVyIGlzIGNvbnRyb2xzIHRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFycXp1WDlyQmxoVDUwTVJ2RDJUS21sOWJuWmhjWm16WEYxcmZfbzd2ZG5FL3B1Yj93PTkxOCZoPTI0MlwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIG5vaXNlU3ludGggPSBuZXcgVG9uZS5Ob2lzZVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBub2lzZVN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Ob2lzZVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbm9pc2Ugc291cmNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk5vaXNlfVxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiBub2lzZVN5bnRoLnNldChcIm5vaXNlLnR5cGVcIiwgXCJicm93blwiKTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubm9pc2UgPSBuZXcgVG9uZS5Ob2lzZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBub2lzZSB0byB0aGUgb3V0cHV0XG5cdCAgICAgICAgdGhpcy5ub2lzZS5jaGFpbih0aGlzLmVudmVsb3BlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbm9pc2UnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Ob2lzZVN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ25vaXNlJzogeyAndHlwZSc6ICd3aGl0ZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4xLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDBcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVzLiBVbmxpa2Ugb3RoZXJcblx0XHQgKiAgaW5zdHJ1bWVudHMsIFRvbmUuTm9pc2VTeW50aCBkb2Vzbid0IGhhdmUgYSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG5vaXNlU3ludGgudHJpZ2dlckF0dGFjaygpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBub2lzZVxuXHQgICAgICAgIHRoaXMubm9pc2Uuc3RhcnQodGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuZW52ZWxvcGUuc3VzdGFpbiA9PT0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLm5vaXNlLnN0b3AodGltZSA9IHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgcmVsZWFzZSBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLm5vaXNlLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAwKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHRoZW4gdGhlIHJlbGVhc2UuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIHRoZSBkdXJhdGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICAgICB0aGUgdGltZSBvZiB0aGUgYXR0YWNrXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdub2lzZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm5vaXNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm5vaXNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Ob2lzZVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgS2FycGx1cy1TdHJpbmcgc3RyaW5nIHN5bnRoZXNpcy4gT2Z0ZW4gb3V0IG9mIHR1bmUuXG5cdFx0ICogICAgICAgICBXaWxsIGNoYW5nZSB3aGVuIHRoZSBBdWRpb1dvcmtlck5vZGUgaXMgYXZhaWxhYmxlIGFjcm9zc1xuXHRcdCAqICAgICAgICAgYnJvd3NlcnMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gc2VlIHRoZSBkZWZhdWx0c1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwbHVja3kgPSBuZXcgVG9uZS5QbHVja1N5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBwbHVja3kudHJpZ2dlckF0dGFjayhcIkM0XCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuUGx1Y2tTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTm9pc2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25vaXNlID0gbmV3IFRvbmUuTm9pc2UoJ3BpbmsnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIG5vaXNlIGF0IHRoZSBhdHRhY2suXG5cdFx0XHQgKiAgTm9taW5hbCByYW5nZSBvZiBbMC4xLCAyMF1cblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2tOb2lzZSA9IG9wdGlvbnMuYXR0YWNrTm9pc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIExGQ0Zcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Mb3dwYXNzQ29tYkZpbHRlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZjZiA9IG5ldyBUb25lLkxvd3Bhc3NDb21iRmlsdGVyKHtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZSc6IG9wdGlvbnMucmVzb25hbmNlLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJzogb3B0aW9ucy5kYW1wZW5pbmdcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmVzb25hbmNlIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gdGhpcy5fbGZjZi5yZXNvbmFuY2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRhbXBlbmluZyBjb250cm9sLiBpLmUuIHRoZSBsb3dwYXNzIGZpbHRlciBmcmVxdWVuY3kgb2YgdGhlIGNvbWIgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IHRoaXMuX2xmY2YuZGFtcGVuaW5nO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9ub2lzZS5jb25uZWN0KHRoaXMuX2xmY2YpO1xuXHQgICAgICAgIHRoaXMuX2xmY2YuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBsdWNrU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGx1Y2tTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrTm9pc2UnOiAxLFxuXHQgICAgICAgICdkYW1wZW5pbmcnOiA0MDAwLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiAwLjdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IG5vdGUgVGhlIG5vdGUgdG8gdHJpZ2dlci5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIG5vdGUgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGx1Y2tTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUpIHtcblx0ICAgICAgICBub3RlID0gdGhpcy50b0ZyZXF1ZW5jeShub3RlKTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGRlbGF5QW1vdW50ID0gMSAvIG5vdGU7XG5cdCAgICAgICAgdGhpcy5fbGZjZi5kZWxheVRpbWUuc2V0VmFsdWVBdFRpbWUoZGVsYXlBbW91bnQsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlLnN0b3AodGltZSArIGRlbGF5QW1vdW50ICogdGhpcy5hdHRhY2tOb2lzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbHVja1N5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmY2YuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZmNmID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGx1Y2tTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBvbHlTeW50aCBoYW5kbGVzIHZvaWNlIGNyZWF0aW9uIGFuZCBhbGxvY2F0aW9uIGZvciBhbnlcblx0XHQgKiAgICAgICAgICBpbnN0cnVtZW50cyBwYXNzZWQgaW4gYXMgdGhlIHNlY29uZCBwYXJhbXRlci4gUG9seVN5bnRoIGlzXG5cdFx0ICogICAgICAgICAgbm90IGEgc3ludGhlc2l6ZXIgYnkgaXRzZWxmLCBpdCBtZXJlbHkgbWFuYWdlcyB2b2ljZXMgb2Zcblx0XHQgKiAgICAgICAgICBvbmUgb2YgdGhlIG90aGVyIHR5cGVzIG9mIHN5bnRocywgYWxsb3dpbmcgYW55IG9mIHRoZVxuXHRcdCAqICAgICAgICAgIG1vbm9waG9uaWMgc3ludGhlc2l6ZXJzIHRvIGJlIHBvbHlwaG9uaWMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfE9iamVjdH0gW3BvbHlwaG9ueT00XSBUaGUgbnVtYmVyIG9mIHZvaWNlcyB0byBjcmVhdGVcblx0XHQgKiAgQHBhcmFtIHtmdW5jdGlvbn0gW3ZvaWNlPVRvbmUuU3ludGhdIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgdm9pY2VzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXMgVG9uZS5TeW50aCBieSBkZWZhdWx0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBwb2x5c3ludGggY29tcG9zZWQgb2YgNiBWb2ljZXMgb2YgU3ludGhcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5Qb2x5U3ludGgoNiwgVG9uZS5TeW50aCkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3NldCB0aGUgYXR0cmlidXRlcyB1c2luZyB0aGUgc2V0IGludGVyZmFjZVxuXHRcdCAqIHN5bnRoLnNldChcImRldHVuZVwiLCAtMTIwMCk7XG5cdFx0ICogLy9wbGF5IGEgY2hvcmRcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJDNFwiLCBcIkU0XCIsIFwiQTRcIl0sIFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwb2x5cGhvbnknLFxuXHQgICAgICAgICAgICAndm9pY2UnXG5cdCAgICAgICAgXSwgVG9uZS5Qb2x5U3ludGgpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5JbnN0cnVtZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICAvL21heCBwb2x5cGhvbnlcblx0ICAgICAgICBvcHRpb25zLnBvbHlwaG9ueSA9IE1hdGgubWluKFRvbmUuUG9seVN5bnRoLk1BWF9QT0xZUEhPTlksIG9wdGlvbnMucG9seXBob255KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYXJyYXkgb2Ygdm9pY2VzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2ljZXMgPSBuZXcgQXJyYXkob3B0aW9ucy5wb2x5cGhvbnkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBxdWV1ZSBvZiB2b2ljZXMgd2l0aCBkYXRhIGFib3V0IGxhc3QgdHJpZ2dlclxuXHRcdFx0ICogIGFuZCB0aGUgdHJpZ2dlcmVkIG5vdGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJzID0gbmV3IEFycmF5KG9wdGlvbnMucG9seXBob255KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdkZXR1bmUnKTtcblx0ICAgICAgICAvL2NyZWF0ZSB0aGUgdm9pY2VzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLnBvbHlwaG9ueTsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB2ID0gbmV3IG9wdGlvbnMudm9pY2UoYXJndW1lbnRzWzJdLCBhcmd1bWVudHNbM10pO1xuXHQgICAgICAgICAgICBpZiAoISh2IGluc3RhbmNlb2YgVG9uZS5Nb25vcGhvbmljKSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeW50aCBjb25zdHJ1Y3RvciBtdXN0IGJlIGluc3RhbmNlIG9mIFRvbmUuTW9ub3Bob25pYycpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldID0gdjtcblx0ICAgICAgICAgICAgdi5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgaWYgKHYuaGFzT3duUHJvcGVydHkoJ2RldHVuZScpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHYuZGV0dW5lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90cmlnZ2Vyc1tpXSA9IHtcblx0ICAgICAgICAgICAgICAgIHJlbGVhc2U6IC0xLFxuXHQgICAgICAgICAgICAgICAgbm90ZTogbnVsbCxcblx0ICAgICAgICAgICAgICAgIHZvaWNlOiB2XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUG9seVN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BvbHlwaG9ueSc6IDQsXG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3ZvaWNlJzogVG9uZS5TeW50aFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l8QXJyYXl9IG5vdGVzIFRoZSBub3RlcyB0byBwbGF5LiBBY2NlcHRzIGEgc2luZ2xlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlcXVlbmN5IG9yIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICBUaGUgc3RhcnQgdGltZSBvZiB0aGUgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciBhIGNob3JkIGltbWVkaWF0ZWx5IHdpdGggYSB2ZWxvY2l0eSBvZiAwLjJcblx0XHQgKiBwb2x5LnRyaWdnZXJBdHRhY2soW1wiQWIzXCIsIFwiQzRcIiwgXCJGNVwiXSwgdW5kZWZpbmVkLCAwLjIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZXMsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5vdGVzKSkge1xuXHQgICAgICAgICAgICBub3RlcyA9IFtub3Rlc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSBub3Rlc1tpXTtcblx0ICAgICAgICAgICAgLy90cmlnZ2VyIHRoZSBvbGRlc3Qgdm9pY2Vcblx0ICAgICAgICAgICAgdmFyIG9sZGVzdCA9IHRoaXMuX3RyaWdnZXJzWzBdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHRoaXMuX3RyaWdnZXJzLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJpZ2dlcnNbal0ucmVsZWFzZSA8IG9sZGVzdC5yZWxlYXNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb2xkZXN0ID0gdGhpcy5fdHJpZ2dlcnNbal07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgb2xkZXN0LnJlbGVhc2UgPSBJbmZpbml0eTtcblx0ICAgICAgICAgICAgb2xkZXN0Lm5vdGUgPSBKU09OLnN0cmluZ2lmeSh2YWwpO1xuXHQgICAgICAgICAgICBvbGRlc3Qudm9pY2UudHJpZ2dlckF0dGFjayh2YWwsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSBhZnRlciB0aGUgc3BlY2lmaWVkIGR1cmF0aW9uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fEFycmF5fSBub3RlcyBUaGUgbm90ZXMgdG8gcGxheS4gQWNjZXB0cyBhIHNpbmdsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW5jeSBvciBhbiBhcnJheSBvZiBmcmVxdWVuY2llcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZHVyYXRpb24gdGhlIGR1cmF0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIGlmIG5vIHRpbWUgaXMgZ2l2ZW4sIGRlZmF1bHRzIHRvIG5vd1xuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIGF0dGFjayAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgYSBjaG9yZCBmb3IgYSBkdXJhdGlvbiBvZiBhIGhhbGYgbm90ZVxuXHRcdCAqIHBvbHkudHJpZ2dlckF0dGFja1JlbGVhc2UoW1wiRWIzXCIsIFwiRzRcIiwgXCJDNVwiXSwgXCIyblwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NhbiBwYXNzIGluIGFuIGFycmF5IG9mIGR1cmF0aW9ucyBhcyB3ZWxsXG5cdFx0ICogcG9seS50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJFYjNcIiwgXCJHNFwiLCBcIkM1XCJdLCBbXCIyblwiLCBcIjRuXCIsIFwiNG5cIl0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGVzLCBkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKG5vdGVzLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheShkdXJhdGlvbikgJiYgVG9uZS5pc0FycmF5KG5vdGVzKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZCA9IGR1cmF0aW9uW01hdGgubWluKGksIGR1cmF0aW9uLmxlbmd0aCAtIDEpXTtcblx0ICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2Uobm90ZXNbaV0sIHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKG5vdGVzLCB0aW1lICsgdGhpcy50b1NlY29uZHMoZHVyYXRpb24pKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2Ugb2YgdGhlIG5vdGUuIFVubGlrZSBtb25vcGhvbmljIGluc3RydW1lbnRzLFxuXHRcdCAqICBhIG5vdGUgKG9yIGFycmF5IG9mIG5vdGVzKSBuZWVkcyB0byBiZSBwYXNzZWQgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l8QXJyYXl9IG5vdGVzIFRoZSBub3RlcyB0byBwbGF5LiBBY2NlcHRzIGEgc2luZ2xlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlcXVlbmN5IG9yIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICBXaGVuIHRoZSByZWxlYXNlIHdpbGwgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwb2x5LnRyaWdnZXJSZWxlYXNlKFtcIkFiM1wiLCBcIkM0XCIsIFwiRjVcIl0sIFwiKzJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGVzLCB0aW1lKSB7XG5cdCAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5vdGVzKSkge1xuXHQgICAgICAgICAgICBub3RlcyA9IFtub3Rlc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSB2b2ljZVxuXHQgICAgICAgICAgICB2YXIgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeShub3Rlc1tpXSk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIHYgPSAwOyB2IDwgdGhpcy5fdHJpZ2dlcnMubGVuZ3RoOyB2KyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5fdHJpZ2dlcnNbdl07XG5cdCAgICAgICAgICAgICAgICBpZiAoZGVzYy5ub3RlID09PSBzdHJpbmdpZmllZCAmJiBkZXNjLnJlbGVhc2UgPiB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZGVzYy52b2ljZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICBkZXNjLnJlbGVhc2UgPSB0aW1lO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogc3ludGguc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAwKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc4bicpXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAxKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgYSBtZW1iZXIvYXR0cmlidXRlIG9mIHRoZSB2b2ljZXMuXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fHN0cmluZ30gcGFyYW1zXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmFtcFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcG9seS5zZXQoe1xuXHRcdCAqIFx0XCJmaWx0ZXJcIiA6IHtcblx0XHQgKiBcdFx0XCJ0eXBlXCIgOiBcImhpZ2hwYXNzXCJcblx0XHQgKiBcdH0sXG5cdFx0ICogXHRcImVudmVsb3BlXCIgOiB7XG5cdFx0ICogXHRcdFwiYXR0YWNrXCIgOiAwLjI1XG5cdFx0ICogXHR9XG5cdFx0ICogfSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgdmFsdWUsIHJhbXBUaW1lKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLnZvaWNlc1tpXS5zZXQocGFyYW1zLCB2YWx1ZSwgcmFtcFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzeW50aCdzIGF0dHJpYnV0ZXMuIEdpdmVuIG5vIGFyZ3VtZW50cyBnZXRcblx0XHQgKiAgd2lsbCByZXR1cm4gYWxsIGF2YWlsYWJsZSBvYmplY3QgcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZ1xuXHRcdCAqICB2YWx1ZXMuIFBhc3MgaW4gYSBzaW5nbGUgYXR0cmlidXRlIHRvIHJldHJpZXZlIG9yIGFuIGFycmF5XG5cdFx0ICogIG9mIGF0dHJpYnV0ZXMuIFRoZSBhdHRyaWJ1dGUgc3RyaW5ncyBjYW4gYWxzbyBpbmNsdWRlIGEgXCIuXCJcblx0XHQgKiAgdG8gYWNjZXNzIGRlZXBlciBwcm9wZXJ0aWVzLlxuXHRcdCAqICBAcGFyYW0ge0FycmF5PX0gcGFyYW1zIHRoZSBwYXJhbWV0ZXJzIHRvIGdldCwgb3RoZXJ3aXNlIHdpbGwgcmV0dXJuXG5cdFx0ICogIFx0XHRcdFx0XHQgICBhbGwgYXZhaWxhYmxlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52b2ljZXNbMF0uZ2V0KHBhcmFtcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmUgdm9pY2VzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgbm90ZXMgc2hvdWxkIGJlIHJlbGVhc2VkLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnJlbGVhc2VBbGwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RyaWdnZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5fdHJpZ2dlcnNbaV07XG5cdCAgICAgICAgICAgIGlmIChkZXNjLnJlbGVhc2UgPiB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICBkZXNjLnJlbGVhc2UgPSB0aW1lO1xuXHQgICAgICAgICAgICAgICAgZGVzYy52b2ljZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLnZvaWNlc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2RldHVuZScpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2ljZXMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIG5vdGVzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZFxuXHRcdCAqICB0byBhIHBvbHlzeW50aC5cblx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLk1BWF9QT0xZUEhPTlkgPSAyMDtcblx0ICAgIHJldHVybiBUb25lLlBvbHlTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIEF1dG9tYXRpY2FsbHkgaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgcGl0Y2hlZCBzYW1wbGVzLiBQYXNzIGluIGFuIG9iamVjdCB3aGljaCBtYXBzIHRoZSBub3RlJ3MgcGl0Y2ggb3IgbWlkaSB2YWx1ZSB0byB0aGUgdXJsLCB0aGVuIHlvdSBjYW4gdHJpZ2dlciB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIG9mIHRoYXQgbm90ZSBsaWtlIG90aGVyIGluc3RydW1lbnRzLiBCeSBhdXRvbWF0aWNhbGx5IHJlcGl0Y2hpbmcgdGhlIHNhbXBsZXMsIGl0IGlzIHBvc3NpYmxlIHRvIHBsYXkgcGl0Y2hlcyB3aGljaCB3ZXJlIG5vdCBleHBsaWNpdGx5IGluY2x1ZGVkIHdoaWNoIGNhbiBzYXZlIGxvYWRpbmcgdGltZS5cblx0XHQgKiAgICAgICAgRm9yIHNhbXBsZSBvciBidWZmZXIgcGxheWJhY2sgd2hlcmUgcmVwaXRjaGluZyBpcyBub3QgbmVjZXNzYXJ5LCB1c2UgW1RvbmUuUGxheWVyXShodHRwczovL3RvbmVqcy5naXRodWIuaW8vZG9jcy9QbGF5ZXIpLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzYW1wbGVzIEFuIG9iamVjdCBvZiBzYW1wbGVzIG1hcHBpbmcgZWl0aGVyIE1pZGlcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIE51bWJlcnMgb3IgU2NpZW50aWZpYyBQaXRjaCBOb3RhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSB1cmwgb2YgdGhhdCBzYW1wbGUuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYWxsIG9mIHRoZSBzYW1wbGVzIGFyZSBsb2FkZWQuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmc9fSBiYXNlVXJsIFRoZSByb290IFVSTCBvZiBhbGwgb2YgdGhlIHNhbXBsZXMsIHdoaWNoIGlzIHByZXBlbmRlZCB0byBhbGwgdGhlIFVSTHMuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgc2FtcGxlciA9IG5ldyBUb25lLlNhbXBsZXIoe1xuXHRcdCAqIFx0XCJDM1wiIDogXCJwYXRoL3RvL0MzLm1wM1wiLFxuXHRcdCAqIFx0XCJEIzNcIiA6IFwicGF0aC90by9Ec2hhcnAzLm1wM1wiLFxuXHRcdCAqIFx0XCJGIzNcIiA6IFwicGF0aC90by9Gc2hhcnAzLm1wM1wiLFxuXHRcdCAqIFx0XCJBM1wiIDogXCJwYXRoL3RvL0EzLm1wM1wiLFxuXHRcdCAqIH0sIGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3NhbXBsZXIgd2lsbCByZXBpdGNoIHRoZSBjbG9zZXN0IHNhbXBsZVxuXHRcdCAqIFx0c2FtcGxlci50cmlnZ2VyQXR0YWNrKFwiRDNcIilcblx0XHQgKiB9KVxuXHRcdCAqIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIgPSBmdW5jdGlvbiAodXJscykge1xuXHQgICAgICAgIC8vIHNoaWZ0IGFyZ3VtZW50cyBvdmVyIG9uZS4gVGhvc2UgYXJlIHRoZSByZW1haW5kZXIgb2YgdGhlIG9wdGlvbnNcblx0ICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgYXJncy5zaGlmdCgpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmdzLCBbXG5cdCAgICAgICAgICAgICdvbmxvYWQnLFxuXHQgICAgICAgICAgICAnYmFzZVVybCdcblx0ICAgICAgICBdLCBUb25lLlNhbXBsZXIpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIHZhciB1cmxNYXAgPSB7fTtcblx0ICAgICAgICBmb3IgKHZhciBub3RlIGluIHVybHMpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNOb3RlKG5vdGUpKSB7XG5cdCAgICAgICAgICAgICAgICAvL2NvbnZlcnQgdGhlIG5vdGUgbmFtZSB0byBNSURJXG5cdCAgICAgICAgICAgICAgICB2YXIgbWlkID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgICAgICAgICB1cmxNYXBbbWlkXSA9IHVybHNbbm90ZV07XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKHBhcnNlRmxvYXQobm90ZSkpKSB7XG5cdCAgICAgICAgICAgICAgICAvL290aGVyd2lzZSBpZiBpdCdzIG51bWJlcnMgYXNzdW1lIGl0J3MgbWlkaVxuXHQgICAgICAgICAgICAgICAgdXJsTWFwW25vdGVdID0gdXJsc1tub3RlXTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5TYW1wbGVyOiB1cmwga2V5cyBtdXN0IGJlIHRoZSBub3RlXFwncyBwaXRjaCcpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHN0b3JlZCBhbmQgbG9hZGVkIGJ1ZmZlcnNcblx0XHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcnN9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVycyA9IG5ldyBUb25lLkJ1ZmZlcnModXJsTWFwLCBvcHRpb25zLm9ubG9hZCwgb3B0aW9ucy5iYXNlVXJsKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBvYmplY3Qgb2YgYWxsIGN1cnJlbnRseSBwbGF5aW5nIEJ1ZmZlclNvdXJjZXNcblx0XHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IHt9O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGVudmVsb3BlIGFwcGxpZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlLlxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG9wdGlvbnMuYXR0YWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGVudmVsb3BlIGFwcGxpZWQgdG8gdGhlIGVuZCBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNhbXBsZXIsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAY29uc3Rcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgIGF0dGFjazogMCxcblx0ICAgICAgICByZWxlYXNlOiAwLjEsXG5cdCAgICAgICAgb25sb2FkOiBUb25lLm5vT3AsXG5cdCAgICAgICAgYmFzZVVybDogJydcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGluIHN0ZXBzIGJldHdlZW4gdGhlIGdpdmVuIG1pZGkgbm90ZSBhdCB0aGUgY2xvc2V0cyBzYW1wbGUuXG5cdFx0ICogQHBhcmFtICB7TWlkaX0gbWlkaVxuXHRcdCAqIEByZXR1cm4ge0ludGVydmFsfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLl9maW5kQ2xvc2VzdCA9IGZ1bmN0aW9uIChtaWRpKSB7XG5cdCAgICAgICAgLy9zZWFyY2hlcyB3aXRoaW4gOCBvY3RhdmVzIG9mIHRoZSBnaXZlbiBtaWRpIG5vdGVcblx0ICAgICAgICB2YXIgTUFYX0lOVEVSVkFMID0gOTY7XG5cdCAgICAgICAgdmFyIGludGVydmFsID0gMDtcblx0ICAgICAgICB3aGlsZSAoaW50ZXJ2YWwgPCBNQVhfSU5URVJWQUwpIHtcblx0ICAgICAgICAgICAgLy8gY2hlY2sgYWJvdmUgYW5kIGJlbG93XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXJzLmhhcyhtaWRpICsgaW50ZXJ2YWwpKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLWludGVydmFsO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2J1ZmZlcnMuaGFzKG1pZGkgLSBpbnRlcnZhbCkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcnZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpbnRlcnZhbCsrO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHBsYXlcblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSAgICAgV2hlbiB0byBwbGF5IHRoZSBub3RlXG5cdFx0ICogQHBhcmFtICB7Tm9ybWFsUmFuZ2U9fSB2ZWxvY2l0eSBUaGUgdmVsb2NpdHkgdG8gcGxheSB0aGUgc2FtcGxlIGJhY2suXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfSAgICAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB2YXIgbWlkaSA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgIC8vIGZpbmQgdGhlIGNsb3Nlc3Qgbm90ZSBwaXRjaFxuXHQgICAgICAgIHZhciBkaWZmZXJlbmNlID0gdGhpcy5fZmluZENsb3Nlc3QobWlkaSk7XG5cdCAgICAgICAgaWYgKGRpZmZlcmVuY2UgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb3Nlc3ROb3RlID0gbWlkaSAtIGRpZmZlcmVuY2U7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9idWZmZXJzLmdldChjbG9zZXN0Tm90ZSk7XG5cdCAgICAgICAgICAgIC8vIHBsYXkgdGhhdCBub3RlXG5cdCAgICAgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2Uoe1xuXHQgICAgICAgICAgICAgICAgJ2J1ZmZlcic6IGJ1ZmZlcixcblx0ICAgICAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhkaWZmZXJlbmNlKSxcblx0ICAgICAgICAgICAgICAgICdmYWRlSW4nOiB0aGlzLmF0dGFjayxcblx0ICAgICAgICAgICAgICAgICdmYWRlT3V0JzogdGhpcy5yZWxlYXNlLFxuXHQgICAgICAgICAgICAgICAgJ2N1cnZlJzogJ2V4cG9uZW50aWFsJ1xuXHQgICAgICAgICAgICB9KS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgc291cmNlLnN0YXJ0KHRpbWUsIDAsIGJ1ZmZlci5kdXJhdGlvbiwgdmVsb2NpdHkpO1xuXHQgICAgICAgICAgICAvLyBhZGQgaXQgdG8gdGhlIGFjdGl2ZSBzb3VyY2VzXG5cdCAgICAgICAgICAgIGlmICghVG9uZS5pc0FycmF5KHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0pKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5wdXNoKHtcblx0ICAgICAgICAgICAgICAgIG5vdGU6IG1pZGksXG5cdCAgICAgICAgICAgICAgICBzb3VyY2U6IHNvdXJjZVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byByZWxlYXNlLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBcdFdoZW4gdG8gcmVsZWFzZSB0aGUgbm90ZS5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9XHR0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUpIHtcblx0ICAgICAgICB2YXIgbWlkaSA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgIC8vIGZpbmQgdGhlIG5vdGVcblx0ICAgICAgICBpZiAodGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXSAmJiB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLmxlbmd0aCkge1xuXHQgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5zaGlmdCgpLnNvdXJjZTtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lICsgdGhpcy5yZWxlYXNlLCB0aGlzLnJlbGVhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZWxlYXNlIGFsbCBjdXJyZW50bHkgYWN0aXZlIG5vdGVzLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBcdFdoZW4gdG8gcmVsZWFzZSB0aGUgbm90ZXMuXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfVx0dGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5yZWxlYXNlQWxsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgbm90ZSBpbiB0aGlzLl9hY3RpdmVTb3VyY2VzKSB7XG5cdCAgICAgICAgICAgIHZhciBzb3VyY2VzID0gdGhpcy5fYWN0aXZlU291cmNlc1tub3RlXTtcblx0ICAgICAgICAgICAgd2hpbGUgKHNvdXJjZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gc291cmNlcy5zaGlmdCgpLnNvdXJjZTtcblx0ICAgICAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUgKyB0aGlzLnJlbGVhc2UsIHRoaXMucmVsZWFzZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAxKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZSB0aGUgYXR0YWNrIHBoYXNlLCB0aGVuIGFmdGVyIHRoZSBkdXJhdGlvbiwgaW52b2tlIHRoZSByZWxlYXNlLlxuXHRcdCAqIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gcGxheVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIFRoZSB0aW1lIHRoZSBub3RlIHNob3VsZCBiZSBoZWxkXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFdoZW4gdG8gc3RhcnQgdGhlIGF0dGFja1xuXHRcdCAqIEBwYXJhbSAge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IG9mIHRoZSBhdHRhY2tcblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9ICAgICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAobm90ZSwgZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayhub3RlLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZShub3RlLCB0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBub3RlIHRvIHRoZSBzYW1wbGVyLlxuXHRcdCAqICBAcGFyYW0gIHtOb3RlfE1pZGl9ICAgbm90ZSAgICAgIFRoZSBidWZmZXIncyBwaXRjaC5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfFRvbmUuQnVmZmVyfEF1ZGlvYnVmZmVyfSAgdXJsICBFaXRoZXIgdGhlIHVybCBvZiB0aGUgYnVmZXIsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhZGRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobm90ZSwgdXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGlmIChUb25lLmlzTm90ZShub3RlKSkge1xuXHQgICAgICAgICAgICAvL2NvbnZlcnQgdGhlIG5vdGUgbmFtZSB0byBNSURJXG5cdCAgICAgICAgICAgIHZhciBtaWQgPSBUb25lLkZyZXF1ZW5jeShub3RlKS50b01pZGkoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVycy5hZGQobWlkLCB1cmwsIGNhbGxiYWNrKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKCFpc05hTihwYXJzZUZsb2F0KG5vdGUpKSkge1xuXHQgICAgICAgICAgICAvL290aGVyd2lzZSBpZiBpdCdzIG51bWJlcnMgYXNzdW1lIGl0J3MgbWlkaVxuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzLmFkZChub3RlLCB1cmwsIGNhbGxiYWNrKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuU2FtcGxlcjogbm90ZSBtdXN0IGJlIHRoZSBub3RlXFwncyBwaXRjaC4gSW5zdGVhZCBnb3QgJyArIG5vdGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVycyBhcmUgbG9hZGVkIG9yIG5vdFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNhbXBsZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TYW1wbGVyLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcnMubG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXJzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBtaWRpIGluIHRoaXMuX2FjdGl2ZVNvdXJjZXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuc291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNhbXBsZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFBlcmlvZGljV2F2ZSkge1xuXHQgICAgICAgICAgICBPc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0UGVyaW9kaWNXYXZlID0gT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFdhdmVUYWJsZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVBlcmlvZGljV2F2ZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVBlcmlvZGljV2F2ZSA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlV2F2ZVRhYmxlO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1hcHMgYSBOb3JtYWxSYW5nZSBbMCwgMV0gdG8gYW4gQXVkaW9SYW5nZSBbLTEsIDFdLiBcblx0XHQgKiAgICAgICAgIFNlZSBhbHNvIFRvbmUuQXVkaW9Ub0dhaW4uIFxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBnMmEgPSBuZXcgVG9uZS5HYWluVG9BdWRpbygpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluVG9BdWRpbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25vcm0gPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh4KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh4KSAqIDIgLSAxO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR2FpblRvQXVkaW8sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR2FpblRvQXVkaW99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR2FpblRvQXVkaW8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbm9ybS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR2FpblRvQXVkaW87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBOb3JtYWxpemUgdGFrZXMgYW4gaW5wdXQgbWluIGFuZCBtYXggYW5kIG1hcHMgaXQgbGluZWFybHkgdG8gTm9ybWFsUmFuZ2UgWzAsMV1cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IGlucHV0TWluIHRoZSBtaW4gaW5wdXQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IGlucHV0TWF4IHRoZSBtYXggaW5wdXQgdmFsdWVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbm9ybSA9IG5ldyBUb25lLk5vcm1hbGl6ZSgyLCA0KTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDMpLmNvbm5lY3Qobm9ybSk7XG5cdFx0ICogLy9vdXRwdXQgb2Ygbm9ybSBpcyAwLjUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob3JtYWxpemUgPSBmdW5jdGlvbiAoaW5wdXRNaW4sIGlucHV0TWF4KSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1pbiBpbnB1dCB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2lucHV0TWluID0gVG9uZS5kZWZhdWx0QXJnKGlucHV0TWluLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWF4IGlucHV0IHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5wdXRNYXggPSBUb25lLmRlZmF1bHRBcmcoaW5wdXRNYXgsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHN1YnRyYWN0IHRoZSBtaW4gZnJvbSB0aGUgaW5wdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5BZGQoMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZGl2aWRlIGJ5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGlucHV0IGFuZCBvdXRwdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGl2ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NdWx0aXBseSgxKTtcblx0ICAgICAgICB0aGlzLl9zdWIuY29ubmVjdCh0aGlzLl9kaXYpO1xuXHQgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Ob3JtYWxpemUsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSB2YWx1ZSB0aGUgaW5wdXQgc2lnbmFsIHdpbGwgcmVhY2guXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTm9ybWFsaXplI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRNaW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5faW5wdXRNaW4gPSBtaW47XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSB2YWx1ZSB0aGUgaW5wdXQgc2lnbmFsIHdpbGwgcmVhY2guXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTm9ybWFsaXplI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRNYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faW5wdXRNYXggPSBtYXg7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgc2V0IHRoZSB2YWx1ZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9ybWFsaXplLnByb3RvdHlwZS5fc2V0UmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3ViLnZhbHVlID0gLXRoaXMuX2lucHV0TWluO1xuXHQgICAgICAgIHRoaXMuX2Rpdi52YWx1ZSA9IDEgLyAodGhpcy5faW5wdXRNYXggLSB0aGlzLl9pbnB1dE1pbik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vcm1hbGl6ZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3ViLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdWIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Rpdi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGl2ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Ob3JtYWxpemU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsIGV4dGVuZHMgVG9uZS5TaWduYWwsIGJ1dCBhZGRzIHRoZSBhYmlsaXR5IHRvIHN5bmNocm9uaXplIHRoZSBzaWduYWwgdG8gdGhlIHNpZ25hbCB0byB0aGUgVG9uZS5UcmFuc3BvcnRcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcmVhbCBzaWduYWwgb3V0cHV0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLl9vdXRwdXRTaWcgPSBuZXcgVG9uZS5TaWduYWwodGhpcy5faW5pdGlhbFZhbHVlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEtlZXAgdHJhY2sgb2YgdGhlIGxhc3QgdmFsdWUuIChzbWFsbCBvcHRpbWl6YXRpb24pXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xhc3RWYWwgPSB0aGlzLnZhbHVlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGV2ZW50IGlkIG9mIHRoZSB0aWNrIHVwZGF0ZSBsb29wXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KHRoaXMuX29uVGljay5iaW5kKHRoaXMpLCAnMWknKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEEgYm91bmQgdmVyc2lvbiBvZiB0aGUgYW5jaG9yIHZhbHVlIG1ldGhvZHNcblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iaW5kQW5jaG9yVmFsdWUgPSB0aGlzLl9hbmNob3JWYWx1ZS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9uKCdzdGFydCBzdG9wIHBhdXNlJywgdGhpcy5fYmluZEFuY2hvclZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMubWVtb3J5ID0gSW5maW5pdHk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogQ2FsbGJhY2sgd2hpY2ggaXMgaW52b2tlZCBldmVyeSB0aWNrLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5fb25UaWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICBpZiAodGhpcy5fbGFzdFZhbCAhPT0gdmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xhc3RWYWwgPSB2YWw7XG5cdCAgICAgICAgICAgIC8vYXBwcm94aW1hdGUgcmFtcCBjdXJ2ZXMgd2l0aCBsaW5lYXIgcmFtcHNcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0U2lnLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbCwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEFuY2hvciB0aGUgdmFsdWUgYXQgdGhlIHN0YXJ0IGFuZCBzdG9wIG9mIHRoZSBUcmFuc3BvcnRcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWUgVGhlIHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICB0aGlzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLl9hbmNob3JWYWx1ZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHZhbCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoVG9uZS5UcmFuc3BvcnQuc2Vjb25kcyk7XG5cdCAgICAgICAgdGhpcy5fbGFzdFZhbCA9IHZhbDtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZy5zZXRWYWx1ZUF0VGltZSh2YWwsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gVGhpcyB3aWxsXG5cdFx0ICogIHJldHVybiB0aGUgdW5jb252ZXJ0ZWQgKHJhdykgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9ICB0aW1lICBUaGUgdGltZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgVGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiBUb25lLlNpZ25hbC5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTZXQgdGhlIG91dHB1dCBvZiB0aGUgc2lnbmFsIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hhbmdlIHRvIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gdGltZSAgVGhlIHRpbWUgdG8gY2hhbmdlIHRoZSBzaWduYWxcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIExpbmVhciByYW1wIHRvIHRoZSBnaXZlbiB2YWx1ZSBmcm9tIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcG9pbnQgdG8gdGhlIGdpdmVuIHZhbHVlXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hhbmdlIHRvIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gdGltZSAgVGhlIHRpbWUgdG8gY2hhbmdlIHRoZSBzaWduYWxcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEV4cG9uZW50aWFsIHJhbXAgdG8gdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwb2ludCB0byB0aGUgZ2l2ZW4gdmFsdWVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGFuZ2UgdG8gYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSB0aW1lICBUaGUgdGltZSB0byBjaGFuZ2UgdGhlIHNpZ25hbFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUgd2l0aFxuXHRcdCAqICBhIHJhdGUgaGF2aW5nIHRoZSBnaXZlbiB0aW1lIGNvbnN0YW50LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHRpbWVDb25zdGFudFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLnNldFRhcmdldEF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VscyBhbGwgc2NoZWR1bGVkIHBhcmFtZXRlciBjaGFuZ2VzIHdpdGggdGltZXMgZ3JlYXRlciB0aGFuIG9yXG5cdFx0ICogIGVxdWFsIHRvIHN0YXJ0VGltZS5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMgPSBmdW5jdGlvbiAoc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcy5jYWxsKHRoaXMsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCBhbiBhcnJheSBvZiBhcmJpdHJhcnkgdmFsdWVzIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiB0aW1lIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb24uXG5cdFx0ICogIEBwYXJhbSB7RmxvYXQzMkFycmF5fSB2YWx1ZXNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBkdXJhdGlvblxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc2NhbGluZz0xXSBJZiB0aGUgdmFsdWVzIGluIHRoZSBjdXJ2ZSBzaG91bGQgYmUgc2NhbGVkIGJ5IHNvbWUgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUN1cnZlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlcywgc3RhcnRUaW1lLCBkdXJhdGlvbiwgc2NhbGluZykge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gVG9uZS5UcmFuc3BvcnRUaW1lKGR1cmF0aW9uKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVDdXJ2ZUF0VGltZS5jYWxsKHRoaXMsIHZhbHVlcywgc3RhcnRUaW1lLCBkdXJhdGlvbiwgc2NhbGluZyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoaXMgaXMgc2ltaWxhciB0byBbY2FuY2VsU2NoZWR1bGVkVmFsdWVzXSgjY2FuY2VsU2NoZWR1bGVkVmFsdWVzKSBleGNlcHRcblx0XHQgKiAgaXQgaG9sZHMgdGhlIGF1dG9tYXRlZCB2YWx1ZSBhdCB0aW1lIHVudGlsIHRoZSBuZXh0IGF1dG9tYXRlZCBldmVudC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuY2FuY2VsQW5kSG9sZEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxBbmRIb2xkQXRUaW1lLmNhbGwodGhpcywgVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBEaXNwb3NlIGFuZCBkaXNjb25uZWN0XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9zeW5jZWQpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9mZignc3RhcnQgc3RvcCBwYXVzZScsIHRoaXMuX3N5bmNlZENhbGxiYWNrKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKDApO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fb3V0cHV0U2lnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgVG9uZS5HcmFpblBsYXllciBpbXBsZW1lbnRzIFtncmFudWxhciBzeW50aGVzaXNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dyYW51bGFyX3N5bnRoZXNpcykuXG5cdFx0ICogICAgICAgIEdyYW51bGFyIFN5bnRoZXNpcyBlbmFibGVzIHlvdSB0byBhZGp1c3QgcGl0Y2ggYW5kIHBsYXliYWNrIHJhdGUgaW5kZXBlbmRlbnRseS4gVGhlIGdyYWluU2l6ZSBpcyB0aGVcblx0XHQgKiAgICAgICAgYW1vdW50IG9mIHRpbWUgZWFjaCBzbWFsbCBjaHVuayBvZiBhdWRpbyBpcyBwbGF5ZWQgZm9yIGFuZCB0aGUgb3ZlcmxhcCBpcyB0aGVcblx0XHQgKiAgICAgICAgYW1vdW50IG9mIGNyb3NzZmFkaW5nIHRyYW5zaXRpb24gdGltZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgZ3JhaW5zLlxuXHRcdCAqIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiBAcGFyYW0ge1N0cmluZ3xUb25lLkJ1ZmZlcn0gdXJsXHRUaGUgdXJsIHRvIGxvYWQsIG9yIHRoZSBUb25lLkJ1ZmZlciB0byBwbGF5LlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgIF0sIFRvbmUuR3JhaW5QbGF5ZXIpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGF1ZGlvIGJ1ZmZlciBiZWxvbmdpbmcgdG8gdGhlIHBsYXllci5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIob3B0aW9ucy51cmwsIG9wdGlvbnMub25sb2FkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBDcmVhdGUgYSByZXBlYXRpbmcgdGljayB0byBzY2hlZHVsZVxuXHRcdFx0ICogIHRoZSBncmFpbnMuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNsb2NrfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jbG9jayA9IG5ldyBUb25lLkNsb2NrKHRoaXMuX3RpY2suYmluZCh0aGlzKSwgb3B0aW9ucy5ncmFpblNpemUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wRW5kID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEFsbCBvZiB0aGUgY3VycmVudGx5IHBsYXlpbmcgQnVmZmVyU291cmNlc1xuXHRcdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dyYWluU2l6ZSA9IG9wdGlvbnMuZ3JhaW5TaXplO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX292ZXJsYXAgPSBvcHRpb25zLm92ZXJsYXA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWRqdXN0IHRoZSBwaXRjaCBpbmRlcGVuZGVudGx5IG9mIHRoZSBwbGF5YmFja1JhdGUuXG5cdFx0XHQgKiAgQHR5cGUgIHtDZW50c31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gb3B0aW9ucy5kZXR1bmU7XG5cdCAgICAgICAgLy9zZXR1cFxuXHQgICAgICAgIHRoaXMub3ZlcmxhcCA9IG9wdGlvbnMub3ZlcmxhcDtcblx0ICAgICAgICB0aGlzLmxvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICB0aGlzLmdyYWluU2l6ZSA9IG9wdGlvbnMuZ3JhaW5TaXplO1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gb3B0aW9ucy5sb29wU3RhcnQ7XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gb3B0aW9ucy5sb29wRW5kO1xuXHQgICAgICAgIHRoaXMucmV2ZXJzZSA9IG9wdGlvbnMucmV2ZXJzZTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbignc3RvcCcsIHRoaXMuX29uc3RvcC5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdyYWluUGxheWVyLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdvdmVybGFwJzogMC4xLFxuXHQgICAgICAgICdncmFpblNpemUnOiAwLjIsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAnbG9vcEVuZCc6IDAsXG5cdCAgICAgICAgJ3JldmVyc2UnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQbGF5IHRoZSBidWZmZXIgYXQgdGhlIGdpdmVuIHN0YXJ0VGltZS4gT3B0aW9uYWxseSBhZGQgYW4gb2Zmc2V0XG5cdFx0ICogIGFuZC9vciBkdXJhdGlvbiB3aGljaCB3aWxsIHBsYXkgdGhlIGJ1ZmZlciBmcm9tIGEgcG9zaXRpb25cblx0XHQgKiAgd2l0aGluIHRoZSBidWZmZXIgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbc3RhcnRUaW1lPW5vd10gV2hlbiB0aGUgcGxheWVyIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW29mZnNldD0wXSBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBzYW1wbGUgc2hvdWxkIHBsYXkuIElmIG5vIGR1cmF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdpdmVuLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZ1bGwgbGVuZ3RoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzYW1wbGUgKG1pbnVzIGFueSBvZmZzZXQpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdyYWluUGxheWVyfSB0aGlzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqICBAbWV0aG9kIHN0YXJ0XG5cdFx0ICogIEBuYW1lIHN0YXJ0XG5cdFx0ICovXG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IG9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vZmZzZXQgPSBvZmZzZXQ7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suc3RhcnQodGltZSk7XG5cdCAgICAgICAgaWYgKGR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcCh0aW1lICsgdGhpcy50b1NlY29uZHMoZHVyYXRpb24pKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZWQgd2hlbiB0aGUgY2xvY2sgaXMgc3RvcHBlZFxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fb25zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL3N0b3AgdGhlIHBsYXllcnNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lLCAwKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW52b2tlZCBvbiBlYWNoIGNsb2NrIHRpY2suIHNjaGVkdWxlZCBhIG5ld1xuXHRcdCAqICBncmFpbiBhdCB0aGlzIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGZhZGVJbiA9IHRoaXMuX29mZnNldCA8IHRoaXMuX292ZXJsYXAgPyAwIDogdGhpcy5fb3ZlcmxhcDtcblx0ICAgICAgICB2YXIgc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKHtcblx0ICAgICAgICAgICAgJ2J1ZmZlcic6IHRoaXMuYnVmZmVyLFxuXHQgICAgICAgICAgICAnZmFkZUluJzogZmFkZUluLFxuXHQgICAgICAgICAgICAnZmFkZU91dCc6IHRoaXMuX292ZXJsYXAsXG5cdCAgICAgICAgICAgICdsb29wJzogdGhpcy5sb29wLFxuXHQgICAgICAgICAgICAnbG9vcFN0YXJ0JzogdGhpcy5fbG9vcFN0YXJ0LFxuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IHRoaXMuX2xvb3BFbmQsXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyh0aGlzLmRldHVuZSAvIDEwMClcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICBzb3VyY2Uuc3RhcnQodGltZSwgdGhpcy5fb2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLl9vZmZzZXQgKz0gdGhpcy5ncmFpblNpemU7XG5cdCAgICAgICAgc291cmNlLnN0b3AodGltZSArIHRoaXMuZ3JhaW5TaXplKTtcblx0ICAgICAgICAvL2FkZCBpdCB0byB0aGUgYWN0aXZlIHNvdXJjZXNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnB1c2goc291cmNlKTtcblx0ICAgICAgICAvL3JlbW92ZSBpdCB3aGVuIGl0J3MgZG9uZVxuXHQgICAgICAgIHNvdXJjZS5vbmVuZGVkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9hY3RpdmVTb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblx0ICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBKdW1wIHRvIGEgc3BlY2lmaWMgdGltZSBhbmQgcGxheSBpdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIG9mZnNldCAgVGhlIG9mZnNldCB0byBqdW1wIHRvLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSB0aW1lIFdoZW4gdG8gbWFrZSB0aGUganVtcC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuR3JhaW5QbGF5ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24gKG9mZnNldCwgdGltZSkge1xuXHQgICAgICAgIHRoaXMuX29mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgdGhpcy5fdGljayh0aGlzLnRvU2Vjb25kcyh0aW1lKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIHNhbXBsZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdGhpcy5ncmFpblNpemUgPSB0aGlzLl9ncmFpblNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbG9vcCBzdGFydCB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBsb29wIGVuZCB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGlyZWN0aW9uIHRoZSBidWZmZXIgc2hvdWxkIHBsYXkgaW5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSByZXZlcnNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdyZXZlcnNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXIucmV2ZXJzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJldikge1xuXHQgICAgICAgICAgICB0aGlzLmJ1ZmZlci5yZXZlcnNlID0gcmV2O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNpemUgb2YgZWFjaCBjaHVuayBvZiBhdWRpbyB0aGF0IHRoZVxuXHRcdCAqIGJ1ZmZlciBpcyBjaG9wcGVkIGludG8gYW5kIHBsYXllZCBiYWNrIGF0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGdyYWluU2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnZ3JhaW5TaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ3JhaW5TaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9ncmFpblNpemUgPSB0aGlzLnRvU2Vjb25kcyhzaXplKTtcblx0ICAgICAgICAgICAgdGhpcy5fY2xvY2suZnJlcXVlbmN5LnZhbHVlID0gdGhpcy5fcGxheWJhY2tSYXRlIC8gdGhpcy5fZ3JhaW5TaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhpcyBpcyB0aGUgZHVyYXRpb24gb2YgdGhlIGNyb3NzLWZhZGUgYmV0d2VlblxuXHRcdCAqIHN1Y2Vzc2l2ZSBncmFpbnMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgb3ZlcmxhcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnb3ZlcmxhcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX292ZXJsYXA7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX292ZXJsYXAgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5HcmFpblBsYXllcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdyYWluUGxheWVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGxheWVyIGlzIGFuIGF1ZGlvIGZpbGUgcGxheWVyIHdpdGggc3RhcnQsIGxvb3AsIGFuZCBzdG9wIGZ1bmN0aW9ucy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ3xBdWRpb0J1ZmZlcn0gdXJsIEVpdGhlciB0aGUgQXVkaW9CdWZmZXIgb3IgdGhlIHVybCBmcm9tXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggdG8gbG9hZCB0aGUgQXVkaW9CdWZmZXJcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBUaGUgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjb21tZW5kZWQgdG8gdXNlIFRvbmUuQnVmZmVyLm9uKCdsb2FkJykgaW5zdGVhZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGxheWVyID0gbmV3IFRvbmUuUGxheWVyKFwiLi9wYXRoL3RvL3NhbXBsZS5tcDNcIikudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3BsYXkgYXMgc29vbiBhcyB0aGUgYnVmZmVyIGlzIGxvYWRlZFxuXHRcdCAqIHBsYXllci5hdXRvc3RhcnQgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIgPSBmdW5jdGlvbiAodXJsKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnM7XG5cdCAgICAgICAgaWYgKHVybCBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyICYmIHVybC5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgdXJsID0gdXJsLmdldCgpO1xuXHQgICAgICAgICAgICBvcHRpb25zID0gVG9uZS5QbGF5ZXIuZGVmYXVsdHM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgICAgICdvbmxvYWQnXG5cdCAgICAgICAgICAgIF0sIFRvbmUuUGxheWVyKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiB0aGUgZmlsZSBzaG91bGQgcGxheSBhcyBzb29uXG5cdFx0XHQgKiAgYXMgdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vd2lsbCBwbGF5IGFzIHNvb24gYXMgaXQncyBsb2FkZWRcblx0XHRcdCAqIHZhciBwbGF5ZXIgPSBuZXcgVG9uZS5QbGF5ZXIoe1xuXHRcdFx0ICogXHRcInVybFwiIDogXCIuL3BhdGgvdG8vc2FtcGxlLm1wM1wiLFxuXHRcdFx0ICogXHRcImF1dG9zdGFydFwiIDogdHJ1ZSxcblx0XHRcdCAqIH0pLnRvTWFzdGVyKCk7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF1dG9zdGFydCA9IG9wdGlvbnMuYXV0b3N0YXJ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBidWZmZXJcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcih7XG5cdCAgICAgICAgICAgICd1cmwnOiBvcHRpb25zLnVybCxcblx0ICAgICAgICAgICAgJ29ubG9hZCc6IHRoaXMuX29ubG9hZC5iaW5kKHRoaXMsIG9wdGlvbnMub25sb2FkKSxcblx0ICAgICAgICAgICAgJ3JldmVyc2UnOiBvcHRpb25zLnJldmVyc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgQXVkaW9CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldCh1cmwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpZiB0aGUgYnVmZmVyIHNob3VsZCBsb29wIG9uY2UgaXQncyBvdmVyXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaWYgJ2xvb3AnIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgc3RhcnQgYXQgdGhpcyBwb3NpdGlvblxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSBvcHRpb25zLmxvb3BTdGFydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpZiAnbG9vcCcgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBlbmQgYXQgdGhpcyBwb3NpdGlvblxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wRW5kID0gb3B0aW9ucy5sb29wRW5kO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwbGF5YmFjayByYXRlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxsIG9mIHRoZSBhY3RpdmUgYnVmZmVyIHNvdXJjZSBub2Rlc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheTxUb25lLkJ1ZmZlclNvdXJjZT59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZWxhcHNlZCB0aW1lIGNvdW50ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGlja1NvdXJjZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSBuZXcgVG9uZS5UaWNrU291cmNlKG9wdGlvbnMucGxheWJhY2tSYXRlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZUluIHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZUluID0gb3B0aW9ucy5mYWRlSW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZhZGVPdXQgdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlT3V0ID0gb3B0aW9ucy5mYWRlT3V0O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGxheWVyLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdhdXRvc3RhcnQnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAnbG9vcEVuZCc6IDAsXG5cdCAgICAgICAgJ3JldHJpZ2dlcic6IGZhbHNlLFxuXHQgICAgICAgICdyZXZlcnNlJzogZmFsc2UsXG5cdCAgICAgICAgJ2ZhZGVJbic6IDAsXG5cdCAgICAgICAgJ2ZhZGVPdXQnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIExvYWQgdGhlIGF1ZGlvIGZpbGUgYXMgYW4gYXVkaW8gYnVmZmVyLlxuXHRcdCAqICBEZWNvZGVzIHRoZSBhdWRpbyBhc3luY2hyb25vdXNseSBhbmQgaW52b2tlc1xuXHRcdCAqICB0aGUgY2FsbGJhY2sgb25jZSB0aGUgYXVkaW8gYnVmZmVyIGxvYWRzLlxuXHRcdCAqICBOb3RlOiB0aGlzIGRvZXMgbm90IG5lZWQgdG8gYmUgY2FsbGVkIGlmIGEgdXJsXG5cdFx0ICogIHdhcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVjdG9yLiBPbmx5IHVzZSB0aGlzXG5cdFx0ICogIGlmIHlvdSB3YW50IHRvIG1hbnVhbGx5IGxvYWQgYSBuZXcgdXJsLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgYnVmZmVyIHRvIGxvYWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICBGaWxldHlwZSBzdXBwb3J0IGRlcGVuZHMgb24gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICBicm93c2VyLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBpbnZva2Ugb25jZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzYW1wbGUgaXMgbG9hZGVkLlxuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmxvYWQodXJsLCB0aGlzLl9vbmxvYWQuYmluZCh0aGlzLCBjYWxsYmFjaykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludGVybmFsIGNhbGxiYWNrIHdoZW4gdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fb25sb2FkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgY2FsbGJhY2sgPSBUb25lLmRlZmF1bHRBcmcoY2FsbGJhY2ssIFRvbmUubm9PcCk7XG5cdCAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuYXV0b3N0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RhcnQoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW50ZXJuYWwgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGRvbmUgcGxheWluZy5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9vblNvdXJjZUVuZCA9IGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9hY3RpdmVTb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBsYXkgdGhlIGJ1ZmZlciBhdCB0aGUgZ2l2ZW4gc3RhcnRUaW1lLiBPcHRpb25hbGx5IGFkZCBhbiBvZmZzZXRcblx0XHQgKiAgYW5kL29yIGR1cmF0aW9uIHdoaWNoIHdpbGwgcGxheSB0aGUgYnVmZmVyIGZyb20gYSBwb3NpdGlvblxuXHRcdCAqICB3aXRoaW4gdGhlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiAgQG1ldGhvZCBzdGFydFxuXHRcdCAqICBAbmFtZSBzdGFydFxuXHRcdCAqL1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICAvL2lmIGl0J3MgYSBsb29wIHRoZSBkZWZhdWx0IG9mZnNldCBpcyB0aGUgbG9vcHN0YXJ0IHBvaW50XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgdGhpcy5fbG9vcFN0YXJ0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL290aGVyd2lzZSB0aGUgZGVmYXVsdCBvZmZzZXQgaXMgMFxuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jb21wdXRlIHRoZSB2YWx1ZXMgaW4gc2Vjb25kc1xuXHQgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgdmFyIGNvbXB1dGVkRHVyYXRpb24gPSBUb25lLmRlZmF1bHRBcmcoZHVyYXRpb24sIE1hdGgubWF4KHRoaXMuX2J1ZmZlci5kdXJhdGlvbiAtIG9mZnNldCwgMCkpO1xuXHQgICAgICAgIGNvbXB1dGVkRHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhjb21wdXRlZER1cmF0aW9uKTtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGVsYXBzZWQgdGltZSBjb3VudGVyXG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuc3RhcnQoc3RhcnRUaW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgc291cmNlXG5cdCAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBUb25lLkJ1ZmZlclNvdXJjZSh7XG5cdCAgICAgICAgICAgICdidWZmZXInOiB0aGlzLl9idWZmZXIsXG5cdCAgICAgICAgICAgICdsb29wJzogdGhpcy5fbG9vcCxcblx0ICAgICAgICAgICAgJ2xvb3BTdGFydCc6IHRoaXMuX2xvb3BTdGFydCxcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiB0aGlzLl9sb29wRW5kLFxuXHQgICAgICAgICAgICAnb25lbmRlZCc6IHRoaXMuX29uU291cmNlRW5kLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiB0aGlzLl9wbGF5YmFja1JhdGUsXG5cdCAgICAgICAgICAgICdmYWRlSW4nOiB0aGlzLmZhZGVJbixcblx0ICAgICAgICAgICAgJ2ZhZGVPdXQnOiB0aGlzLmZhZGVPdXRcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL3NldCB0aGUgbG9vcGluZyBwcm9wZXJ0aWVzXG5cdCAgICAgICAgaWYgKCF0aGlzLl9sb29wICYmICF0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgLy9pZiBpdCdzIG5vdCBsb29waW5nLCBzZXQgdGhlIHN0YXRlIGNoYW5nZSBhdCB0aGUgZW5kIG9mIHRoZSBzYW1wbGVcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBzdGFydFRpbWUgKyBjb21wdXRlZER1cmF0aW9uIC8gdGhpcy5fcGxheWJhY2tSYXRlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hZGQgaXQgdG8gdGhlIGFycmF5IG9mIGFjdGl2ZSBzb3VyY2VzXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5wdXNoKHNvdXJjZSk7XG5cdCAgICAgICAgLy9zdGFydCBpdFxuXHQgICAgICAgIGlmICh0aGlzLl9sb29wICYmIFRvbmUuaXNVbmRlZihkdXJhdGlvbikpIHtcblx0ICAgICAgICAgICAgc291cmNlLnN0YXJ0KHN0YXJ0VGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RhcnQoc3RhcnRUaW1lLCBvZmZzZXQsIGNvbXB1dGVkRHVyYXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCBwbGF5YmFjay5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgc291cmNlLnN0b3AodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCBhbmQgdGhlbiByZXN0YXJ0IHRoZSBwbGF5ZXIgZnJvbSB0aGUgYmVnaW5uaW5nIChvciBvZmZzZXQpXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGFydCh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2VlayB0byBhIHNwZWNpZmljIHRpbWUgaW4gdGhlIHBsYXllcidzIGJ1ZmZlci4gSWYgdGhlXG5cdFx0ICogIHNvdXJjZSBpcyBubyBsb25nZXIgcGxheWluZyBhdCB0aGF0IHRpbWUsIGl0IHdpbGwgc3RvcC5cblx0XHQgKiAgSWYgeW91IHNlZWsgdG8gYSB0aW1lIHRoYXRcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBvZmZzZXQgVGhlIHRpbWUgdG8gc2VlayB0by5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gdGltZSBUaGUgdGltZSBmb3IgdGhlIHNlZWsgZXZlbnQgdG8gb2NjdXIuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0YXJ0KDAuMik7XG5cdFx0ICogc291cmNlLnN0b3AoMC40KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24gKG9mZnNldCwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgICAgICAvLyBpZiBpdCdzIGN1cnJlbnRseSBwbGF5aW5nLCBzdG9wIGl0XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3AodGltZSk7XG5cdCAgICAgICAgICAgIC8vcmVzdGFydCBpdCBhdCB0aGUgZ2l2ZW4gdGltZVxuXHQgICAgICAgICAgICB0aGlzLl9zdGFydCh0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBsb29wIHN0YXJ0IGFuZCBlbmQuIFdpbGwgb25seSBsb29wIGlmIGxvb3AgaXNcblx0XHQgKiAgc2V0IHRvIHRydWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gbG9vcFN0YXJ0IFRoZSBsb29wIGVuZCB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gbG9vcEVuZCBUaGUgbG9vcCBlbmQgdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xvb3AgMC4xIHNlY29uZHMgb2YgdGhlIGZpbGUuXG5cdFx0ICogcGxheWVyLnNldExvb3BQb2ludHMoMC4yLCAwLjMpO1xuXHRcdCAqIHBsYXllci5sb29wID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5zZXRMb29wUG9pbnRzID0gZnVuY3Rpb24gKGxvb3BTdGFydCwgbG9vcEVuZCkge1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gbG9vcFN0YXJ0O1xuXHQgICAgICAgIHRoaXMubG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgbG9vcCBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIHN0YXJ0IGF0IHRoaXMgcG9zaXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSBjdXJyZW50IHNvdXJjZVxuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgc291cmNlLmxvb3BTdGFydCA9IGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgZW5kIGF0IHRoaXMgcG9zaXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSBjdXJyZW50IHNvdXJjZVxuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgc291cmNlLmxvb3BFbmQgPSBsb29wRW5kO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhdWRpbyBidWZmZXIgYmVsb25naW5nIHRvIHRoZSBwbGF5ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHQgKiBAbmFtZSBidWZmZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdidWZmZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChidWZmZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlciBzaG91bGQgbG9vcCBvbmNlIGl0J3Mgb3Zlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9vcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICAvL2lmIG5vIGNoYW5nZSwgZG8gbm90aGluZ1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCA9PT0gbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKCFsb29wKSB7XG5cdCAgICAgICAgICAgICAgICAvL3N0b3AgdGhlIHBsYXliYWNrIG9uIHRoZSBuZXh0IGN5Y2xlXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdG9wQXROZXh0SXRlcmF0aW9uKG5vdyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvL3JlbW92ZSB0aGUgbmV4dCBzdG9wRXZlbnRcblx0ICAgICAgICAgICAgICAgIHZhciBzdG9wRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXROZXh0U3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBub3cpO1xuXHQgICAgICAgICAgICAgICAgaWYgKHN0b3BFdmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwoc3RvcEV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLmNhbmNlbChzdG9wRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYSBzdG9wIGV2ZW50IGF0IHRoZSBuZXh0IGZ1bGwgaXRlcmF0aW9uLiBVc2VkXG5cdFx0ICogIGZvciBzY2hlZHVsaW5nIHN0b3Agd2hlbiB0aGUgbG9vcCBzdGF0ZSBvciBwbGF5YmFja1JhdGUgY2hhbmdlc1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBub3cgIFRoZSBjdXJyZW50IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fc3RvcEF0TmV4dEl0ZXJhdGlvbiA9IGZ1bmN0aW9uIChub3cpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUobm93KSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHZhciBuZXh0U3RvcCA9IHRoaXMuX3N0YXRlLmdldE5leHRTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIG5vdyk7XG5cdCAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuX2VsYXBzZWRUaW1lLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgIHZhciBpdGVyYXRpb25zID0gTWF0aC5tYXgoTWF0aC5jZWlsKHBvc2l0aW9uIC8gdGhpcy5idWZmZXIuZHVyYXRpb24pLCAxKTtcblx0ICAgICAgICAgICAgdmFyIHN0b3BUaW1lID0gdGhpcy5fZWxhcHNlZFRpbWUuZ2V0VGltZU9mVGljayhpdGVyYXRpb25zICogdGhpcy5idWZmZXIuZHVyYXRpb24sIG5leHRTdG9wID8gbmV4dFN0b3AudGltZSAtIHRoaXMuc2FtcGxlVGltZSA6IEluZmluaXR5KTtcblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHN0b3BUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBsYXliYWNrIHNwZWVkLiAxIGlzIG5vcm1hbCBzcGVlZC4gVGhpcyBpcyBub3QgYSBzaWduYWwgYmVjYXVzZVxuXHRcdCAqIFNhZmFyaSBhbmQgaU9TIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IHBsYXliYWNrUmF0ZSBhcyBhIHNpZ25hbC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdwbGF5YmFja1JhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUocmF0ZSwgbm93KTtcblx0ICAgICAgICAgICAgLy9pZiBpdCdzIG5vdCBsb29waW5nXG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RvcEF0TmV4dEl0ZXJhdGlvbihub3cpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vc2V0IGFsbCB0aGUgc291cmNlc1xuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgc291cmNlLnBsYXliYWNrUmF0ZS5zZXRWYWx1ZUF0VGltZShyYXRlLCBub3cpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIG9mIHRoZSBidWZmZXIuIFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBvc2l0aW9uXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAncG9zaXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUobm93KSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIHRoaXMubG9hZGVkKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZHVyYXRpb24gPSB0aGlzLmJ1ZmZlci5kdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuX2VsYXBzZWRUaW1lLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gJSBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGlyZWN0aW9uIHRoZSBidWZmZXIgc2hvdWxkIHBsYXkgaW5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgcmV2ZXJzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ3JldmVyc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIucmV2ZXJzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJldikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIucmV2ZXJzZSA9IHJldjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGFsbCB0aGUgYnVmZmVyIGlzIGxvYWRlZFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3QuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2Rpc2Nvbm5lY3QgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgc291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0gbnVsbDtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBsYXllcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBsYXllcnMgY29tYmluZXMgbXVsdGlwbGUgW1RvbmUuUGxheWVyXShQbGF5ZXIpIG9iamVjdHMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IHVybHMgQW4gb2JqZWN0IG1hcHBpbmcgYSBuYW1lIHRvIGEgdXJsLlxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9uPX0gb25sb2FkIFRoZSBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiBhbGwgYnVmZmVycyBhcmUgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzID0gZnVuY3Rpb24gKHVybHMpIHtcblx0ICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgYXJncy5zaGlmdCgpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmdzLCBbJ29ubG9hZCddLCBUb25lLlBsYXllcnMpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IHZvbHVtZSBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIHNvdXJjZS52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLy9tYWtlIHRoZSBvdXRwdXQgZXhwbGljaXRseSBzdGVyZW9cblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnQgPSAyO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIC8vbXV0ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY29udGFpbmVyIG9mIGFsbCBvZiB0aGUgcGxheWVyc1xuXHRcdFx0ICogQHR5cGUge09iamVjdH1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzID0ge307XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbG9hZGluZyBjb3VudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogcHJpdmF0ZSBob2xkZXIgb2YgdGhlIGZhZGVJbiB0aW1lXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mYWRlSW4gPSBvcHRpb25zLmZhZGVJbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHByaXZhdGUgaG9sZGVyIG9mIHRoZSBmYWRlT3V0IHRpbWVcblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZhZGVPdXQgPSBvcHRpb25zLmZhZGVPdXQ7XG5cdCAgICAgICAgLy9hZGQgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB1cmxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCsrO1xuXHQgICAgICAgICAgICB0aGlzLmFkZChuYW1lLCB1cmxzW25hbWVdLCB0aGlzLl9idWZmZXJMb2FkZWQuYmluZCh0aGlzLCBvcHRpb25zLm9ubG9hZCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBsYXllcnMsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZSxcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdmYWRlSW4nOiAwLFxuXHQgICAgICAgICdmYWRlT3V0JzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIGJ1ZmZlciB3YXMgbG9hZGVkLiBkZWNyZW1lbnQgdGhlIGNvdW50ZXIuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2tcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuX2J1ZmZlckxvYWRlZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudC0tO1xuXHQgICAgICAgIGlmICh0aGlzLl9sb2FkaW5nQ291bnQgPT09IDAgJiYgY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiBzb3VyY2UubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGZhZGVJbiB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGZhZGVJblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdmYWRlSW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mYWRlSW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmYWRlSW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmFkZUluID0gZmFkZUluO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHBsYXllci5mYWRlSW4gPSBmYWRlSW47XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGZhZGVPdXQgdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBmYWRlT3V0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ2ZhZGVPdXQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mYWRlT3V0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZmFkZU91dCkge1xuXHQgICAgICAgICAgICB0aGlzLl9mYWRlT3V0ID0gZmFkZU91dDtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgICAgICBwbGF5ZXIuZmFkZU91dCA9IGZhZGVPdXQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHN0YXRlIG9mIHRoZSBwbGF5ZXJzIG9iamVjdC4gUmV0dXJucyBcInN0YXJ0ZWRcIiBpZiBhbnkgb2YgdGhlIHBsYXllcnMgYXJlIHBsYXlpbmcuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVycyNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIHN0YXRlXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgcGxheWluZyA9IGZhbHNlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHBsYXlpbmcgPSBwbGF5aW5nIHx8IHBsYXllci5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgcmV0dXJuIHBsYXlpbmcgPyBUb25lLlN0YXRlLlN0YXJ0ZWQgOiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVHJ1ZSBpZiB0aGUgYnVmZmVycyBvYmplY3QgaGFzIGEgYnVmZmVyIGJ5IHRoYXQgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIG5hbWUgIFRoZSBrZXkgb3IgaW5kZXggb2YgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuXG5cdFx0ICogIEByZXR1cm4gIHtCb29sZWFufVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXJzLmhhc093blByb3BlcnR5KG5hbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgYSBwbGF5ZXIgYnkgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgbmFtZSAgVGhlIHBsYXllcnMgbmFtZSBhcyBkZWZpbmVkIGluXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25zdHJ1Y3RvciBvYmplY3Qgb3IgYGFkZGAgbWV0aG9kLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QbGF5ZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuaGFzKG5hbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXJzW25hbWVdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5QbGF5ZXJzOiBubyBwbGF5ZXIgbmFtZWQgJyArIG5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdFx0ICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG5cdFx0ICogQHJldHVybiB7VG9uZS5QbGF5ZXJzfSAgICAgICAgICAgIHRoaXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5fZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIGZvciAodmFyIHBsYXllck5hbWUgaW4gdGhpcy5fcGxheWVycykge1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9wbGF5ZXJzW3BsYXllck5hbWVdLCBwbGF5ZXJOYW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgYWxsIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVycyNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaXNMb2FkZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIGlzTG9hZGVkID0gaXNMb2FkZWQgJiYgcGxheWVyLmxvYWRlZDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHJldHVybiBpc0xvYWRlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBwbGF5ZXIgYnkgbmFtZSBhbmQgdXJsIHRvIHRoZSBQbGF5ZXJzXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgbmFtZSAgICAgIEEgdW5pcXVlIG5hbWUgdG8gZ2l2ZSB0aGUgcGxheWVyXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xUb25lLkJ1ZmZlcnxBdWRpb2J1ZmZlcn0gIHVybCAgRWl0aGVyIHRoZSB1cmwgb2YgdGhlIGJ1ZmVyLFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYWRkZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzW25hbWVdID0gbmV3IFRvbmUuUGxheWVyKHVybCwgY2FsbGJhY2spLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnNbbmFtZV0uZmFkZUluID0gdGhpcy5fZmFkZUluO1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnNbbmFtZV0uZmFkZU91dCA9IHRoaXMuX2ZhZGVPdXQ7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCBhbGwgb2YgdGhlIHBsYXllcnMgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gc3RvcCBhbGwgb2YgdGhlIHBsYXllcnMuXG5cdFx0ICogQHJldHVybiB7VG9uZS5QbGF5ZXJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLnN0b3BBbGwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICBwbGF5ZXIuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRGlzcG9zZSBhbmQgZGlzY29ubmVjdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QbGF5ZXJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgIHBsYXllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGxheWVycyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGxheWVycztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlVzZXJNZWRpYSB1c2VzIE1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEgdG8gb3BlbiB1cFxuXHRcdCAqICAgICAgICAgIGFuZCBleHRlcm5hbCBtaWNyb3Bob25lIG9yIGF1ZGlvIGlucHV0LiBDaGVja1xuXHRcdCAqICAgICAgICAgIFtNZWRpYURldmljZXMgQVBJIFN1cHBvcnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9NZWRpYURldmljZXMvZ2V0VXNlck1lZGlhKVxuXHRcdCAqICAgICAgICAgIHRvIHNlZSB3aGljaCBicm93c2VycyBhcmUgc3VwcG9ydGVkLiBBY2Nlc3MgdG8gYW4gZXh0ZXJuYWwgaW5wdXRcblx0XHQgKiAgICAgICAgICBpcyBsaW1pdGVkIHRvIHNlY3VyZSAoSFRUUFMpIGNvbm5lY3Rpb25zLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHM9fSB2b2x1bWUgVGhlIGxldmVsIG9mIHRoZSBpbnB1dFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbGlzdCB0aGUgaW5wdXRzIGFuZCBvcGVuIHRoZSB0aGlyZCBvbmVcblx0XHQgKiB2YXIgbW90dSA9IG5ldyBUb25lLlVzZXJNZWRpYSgpO1xuXHRcdCAqXG5cdFx0ICogLy9vcGVuaW5nIHRoZSBpbnB1dCBhc2tzIHRoZSB1c2VyIHRvIGFjdGl2YXRlIHRoZWlyIG1pY1xuXHRcdCAqIG1vdHUub3BlbigpLnRoZW4oZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vcHJvbWlzZSByZXNvbHZlcyB3aGVuIGlucHV0IGlzIGF2YWlsYWJsZVxuXHRcdCAqIH0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd2b2x1bWUnXSwgVG9uZS5Vc2VyTWVkaWEpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIE1lZGlhU3RyZWFtTm9kZVxuXHRcdFx0ICogIEB0eXBlIHtNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0gPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtZWRpYSBzdHJlYW0gY3JlYXRlZCBieSBnZXRVc2VyTWVkaWEuXG5cdFx0XHQgKiAgQHR5cGUge0xvY2FsTWVkaWFTdHJlYW19XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9wZW4gZGV2aWNlXG5cdFx0XHQgKiAgQHR5cGUgIHtNZWRpYURldmljZUluZm99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RldmljZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBpbnB1dC52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVXNlck1lZGlhLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVXNlck1lZGlhLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgT3BlbiB0aGUgbWVkaWEgc3RyZWFtLiBJZiBhIHN0cmluZyBpcyBwYXNzZWQgaW4sIGl0IGlzIGFzc3VtZWRcblx0XHQgKiAgdG8gYmUgdGhlIGxhYmVsIG9yIGlkIG9mIHRoZSBzdHJlYW0sIGlmIGEgbnVtYmVyIGlzIHBhc3NlZCBpbixcblx0XHQgKiAgaXQgaXMgdGhlIGlucHV0IG51bWJlciBvZiB0aGUgc3RyZWFtLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSBbbGFiZWxPcklkPVwiZGVmYXVsdFwiXSBUaGUgbGFiZWwgb3IgaWQgb2YgdGhlIGF1ZGlvIGlucHV0IG1lZGlhIGRldmljZS5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggbm8gYXJndW1lbnQsIHRoZSBkZWZhdWx0IHN0cmVhbSBpcyBvcGVuZWQuXG5cdFx0ICogIEByZXR1cm4ge1Byb21pc2V9IFRoZSBwcm9taXNlIGlzIHJlc29sdmVkIHdoZW4gdGhlIHN0cmVhbSBpcyBvcGVuLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAobGFiZWxPcklkKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuVXNlck1lZGlhLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uIChkZXZpY2VzKSB7XG5cdCAgICAgICAgICAgIHZhciBkZXZpY2U7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGxhYmVsT3JJZCkpIHtcblx0ICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZXNbbGFiZWxPcklkXTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZXMuZmluZChmdW5jdGlvbiAoZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRldmljZS5sYWJlbCA9PT0gbGFiZWxPcklkIHx8IGRldmljZS5kZXZpY2VJZCA9PT0gbGFiZWxPcklkO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICAvL2RpZG4ndCBmaW5kIGEgbWF0Y2hpbmcgZGV2aWNlXG5cdCAgICAgICAgICAgICAgICBpZiAoIWRldmljZSAmJiBkZXZpY2VzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICBkZXZpY2UgPSBkZXZpY2VzWzBdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZGV2aWNlICYmIFRvbmUuaXNEZWZpbmVkKGxhYmVsT3JJZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuVXNlck1lZGlhOiBubyBtYXRjaGluZyBkZXZpY2U6ICcgKyBsYWJlbE9ySWQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2RldmljZSA9IGRldmljZTtcblx0ICAgICAgICAgICAgLy9kbyBnZXRVc2VyTWVkaWFcblx0ICAgICAgICAgICAgdmFyIGNvbnN0cmFpbnRzID0ge1xuXHQgICAgICAgICAgICAgICAgYXVkaW86IHtcblx0ICAgICAgICAgICAgICAgICAgICAnZWNob0NhbmNlbGxhdGlvbic6IGZhbHNlLFxuXHQgICAgICAgICAgICAgICAgICAgICdzYW1wbGVSYXRlJzogdGhpcy5jb250ZXh0LnNhbXBsZVJhdGVcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgaWYgKGRldmljZSkge1xuXHQgICAgICAgICAgICAgICAgY29uc3RyYWludHMuYXVkaW8uZGV2aWNlSWQgPSBkZXZpY2UuZGV2aWNlSWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKGNvbnN0cmFpbnRzKS50aGVuKGZ1bmN0aW9uIChzdHJlYW0pIHtcblx0ICAgICAgICAgICAgICAgIC8vc3RhcnQgYSBuZXcgc291cmNlIG9ubHkgaWYgdGhlIHByZXZpb3VzIG9uZSBpcyBjbG9zZWRcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc3RyZWFtKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vV3JhcCBhIE1lZGlhU3RyZWFtU291cmNlTm9kZSBhcm91bmQgdGhlIGxpdmUgaW5wdXQgc3RyZWFtLlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtID0gdGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHN0cmVhbSk7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9Db25uZWN0IHRoZSBNZWRpYVN0cmVhbVNvdXJjZU5vZGUgdG8gYSBnYXRlIGdhaW4gbm9kZVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xvc2UgdGhlIG1lZGlhIHN0cmVhbVxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlVzZXJNZWRpYX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdHJlYW0pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RyZWFtLmdldEF1ZGlvVHJhY2tzKCkuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcblx0ICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBvbGQgbWVkaWEgc3RyZWFtXG5cdCAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9kZXZpY2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIHRoZSBsaXN0IG9mIGF1ZGlvIGlucHV0IGRldmljZXMgYXZhaWxhYmxlLlxuXHRcdCAqICBAcmV0dXJuIHtQcm9taXNlfSBUaGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggdGhlIGRldmljZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVXNlck1lZGlhLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uKGRldmljZXMpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2coZGV2aWNlcylcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEuZW51bWVyYXRlRGV2aWNlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKCkudGhlbihmdW5jdGlvbiAoZGV2aWNlcykge1xuXHQgICAgICAgICAgICByZXR1cm4gZGV2aWNlcy5maWx0ZXIoZnVuY3Rpb24gKGRldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGRldmljZS5raW5kID09PSAnYXVkaW9pbnB1dCc7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBcInN0YXJ0ZWRcIiB3aGVuIHRoZSBtaWNyb3Bob25lIGlzIG9wZW5cblx0XHQgKiAgYW5kIFwic3RvcHBlZFwiIHdoZW4gdGhlIG1pYyBpcyBjbG9zZWQuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtICYmIHRoaXMuX3N0cmVhbS5hY3RpdmUgPyBUb25lLlN0YXRlLlN0YXJ0ZWQgOiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFJldHVybnMgYW4gaWRlbnRpZmllciBmb3IgdGhlIHJlcHJlc2VudGVkIGRldmljZSB0aGF0IGlzXG5cdFx0ICogXHRwZXJzaXN0ZWQgYWNyb3NzIHNlc3Npb25zLiBJdCBpcyB1bi1ndWVzc2FibGUgYnkgb3RoZXIgYXBwbGljYXRpb25zIGFuZFxuXHRcdCAqIFx0dW5pcXVlIHRvIHRoZSBvcmlnaW4gb2YgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uIEl0IGlzIHJlc2V0IHdoZW4gdGhlXG5cdFx0ICogXHR1c2VyIGNsZWFycyBjb29raWVzIChmb3IgUHJpdmF0ZSBCcm93c2luZywgYSBkaWZmZXJlbnQgaWRlbnRpZmllciBpc1xuXHRcdCAqIFx0dXNlZCB0aGF0IGlzIG5vdCBwZXJzaXN0ZWQgYWNyb3NzIHNlc3Npb25zKS4gUmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGVcblx0XHQgKiBcdGRldmljZSBpcyBub3Qgb3Blbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgZGV2aWNlSWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdkZXZpY2VJZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZS5kZXZpY2VJZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRSZXR1cm5zIGEgZ3JvdXAgaWRlbnRpZmllci4gVHdvIGRldmljZXMgaGF2ZSB0aGVcblx0XHQgKiBcdHNhbWUgZ3JvdXAgaWRlbnRpZmllciBpZiB0aGV5IGJlbG9uZyB0byB0aGUgc2FtZSBwaHlzaWNhbCBkZXZpY2UuXG5cdFx0ICogXHRSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZSBkZXZpY2UgaXMgbm90IG9wZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIGdyb3VwSWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdncm91cElkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlLmdyb3VwSWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0UmV0dXJucyBhIGxhYmVsIGRlc2NyaWJpbmcgdGhpcyBkZXZpY2UgKGZvciBleGFtcGxlIFwiQnVpbHQtaW4gTWljcm9waG9uZVwiKS5cblx0XHQgKiBcdFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlIGRldmljZSBpcyBub3Qgb3BlbiBvciBsYWJlbCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogXHRiZWNhdXNlIG9mIHBlcm1pc3Npb25zLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBncm91cElkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnbGFiZWwnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2UubGFiZWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiB1c2VyTWVkaWEubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cC5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlVzZXJNZWRpYX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNsb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIElmIGdldFVzZXJNZWRpYSBpcyBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIuXG5cdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBzdXBwb3J0ZWRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYSwgJ3N1cHBvcnRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuaXNEZWZpbmVkKG5hdmlnYXRvci5tZWRpYURldmljZXMpICYmIFRvbmUuaXNGdW5jdGlvbihuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5Vc2VyTWVkaWE7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5NaWRpIGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIFRpbWUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgVG9uZS5NaWRpIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIG9yIHdpdGhvdXQgdGhlIGBuZXdgIGtleXdvcmQuIFRvbmUuTWlkaSBjYW4gYmUgcGFzc2VkXG5cdFx0ICogICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgb2YgYW55IG1ldGhvZCB3aGljaCB0YWtlcyB0aW1lIGFzIGFuIGFyZ3VtZW50LlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRnJlcXVlbmN5fVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHQgPSBUb25lLk1pZGkoXCI0blwiKTsvL2EgcXVhcnRlciBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5NaWRpKSB7XG5cdCAgICAgICAgICAgIFRvbmUuRnJlcXVlbmN5LmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLk1pZGkodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkaSwgVG9uZS5GcmVxdWVuY3kpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fZGVmYXVsdFVuaXRzID0gJ21pZGknO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgZnJlcXVlbmN5IGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMuY2FsbCh0aGlzLCBmcmVxKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgdGljayBpbiB0aGUgY3VycmVudCB0aW1lIHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7VGlja3N9IHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cy5jYWxsKHRoaXMsIHRpY2tzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20oVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMuY2FsbCh0aGlzLCBiZWF0cykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzLmNhbGwodGhpcywgc2Vjb25kcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgYXMgYSBNSURJIG5vdGVcblx0XHQgKiAgQHJldHVybiAge01JREl9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5NaWRpKDYwKS50b01pZGkoKTsgLy82MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS50b01pZGkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgYXMgYSBNSURJIG5vdGVcblx0XHQgKiAgQHJldHVybiAge01JREl9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5NaWRpKDYwKS50b01pZGkoKTsgLy82MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kubXRvZih0aGlzLnRvTWlkaSgpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJhbnNwb3NlcyB0aGUgZnJlcXVlbmN5IGJ5IHRoZSBnaXZlbiBudW1iZXIgb2Ygc2VtaXRvbmVzLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbH0gIGludGVydmFsXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkZyZXF1ZW5jeX0gQSBuZXcgdHJhbnNwb3NlZCBmcmVxdWVuY3lcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkE0XCIpLnRyYW5zcG9zZSgzKTsgLy9cIkM1XCJcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUudHJhbnNwb3NlID0gZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMudG9NaWRpKCkgKyBpbnRlcnZhbCk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkaTtcblx0fSk7XG5cdFxuXHRyZXR1cm4gVG9uZTtcbn0pKTsiLCIvKiEgcDUuanMgdjAuNy4yIFNlcHRlbWJlciAwMiwgMjAxOCAqLyAhZnVuY3Rpb24oYSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9YSgpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxhKTtlbHNle3ZhciBiO2I9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLGIucDU9YSgpfX0oZnVuY3Rpb24oKXt2YXIgYTtyZXR1cm4gZnVuY3Rpb24gYShiLGMsZCl7ZnVuY3Rpb24gZShnLGgpe2lmKCFjW2ddKXtpZighYltnXSl7dmFyIGk9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighaCYmaSlyZXR1cm4gaShnLCEwKTtpZihmKXJldHVybiBmKGcsITApO3ZhciBqPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrZytcIidcIik7dGhyb3cgai5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGp9dmFyIGs9Y1tnXT17ZXhwb3J0czp7fX07YltnXVswXS5jYWxsKGsuZXhwb3J0cyxmdW5jdGlvbihhKXt2YXIgYz1iW2ddWzFdW2FdO3JldHVybiBlKGN8fGEpfSxrLGsuZXhwb3J0cyxhLGIsYyxkKX1yZXR1cm4gY1tnXS5leHBvcnRzfWZvcih2YXIgZj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGc9MDtnPGQubGVuZ3RoO2crKyllKGRbZ10pO3JldHVybiBlfSh7MTpbZnVuY3Rpb24oYSxiLGMpeyFmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGEpe3ZhciBiPWEuY2hhckNvZGVBdCgwKTtyZXR1cm4gYj09PWZ8fGI9PT1rPzYyOmI9PT1nfHxiPT09bD82MzpiPGg/LTE6YjxoKzEwP2ItaCsyNisyNjpiPGorMjY/Yi1qOmI8aSsyNj9iLWkrMjY6dm9pZCAwfWZ1bmN0aW9uIGMoYSl7ZnVuY3Rpb24gYyhhKXtqW2wrK109YX12YXIgZCxmLGcsaCxpLGo7aWYoYS5sZW5ndGglND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7dmFyIGs9YS5sZW5ndGg7aT1cIj1cIj09PWEuY2hhckF0KGstMik/MjpcIj1cIj09PWEuY2hhckF0KGstMSk/MTowLGo9bmV3IGUoMyphLmxlbmd0aC80LWkpLGc9aT4wP2EubGVuZ3RoLTQ6YS5sZW5ndGg7dmFyIGw9MDtmb3IoZD0wLGY9MDtkPGc7ZCs9NCxmKz0zKWg9YihhLmNoYXJBdChkKSk8PDE4fGIoYS5jaGFyQXQoZCsxKSk8PDEyfGIoYS5jaGFyQXQoZCsyKSk8PDZ8YihhLmNoYXJBdChkKzMpKSxjKCgxNjcxMTY4MCZoKT4+MTYpLGMoKDY1MjgwJmgpPj44KSxjKDI1NSZoKTtyZXR1cm4gMj09PWk/KGg9YihhLmNoYXJBdChkKSk8PDJ8YihhLmNoYXJBdChkKzEpKT4+NCxjKDI1NSZoKSk6MT09PWkmJihoPWIoYS5jaGFyQXQoZCkpPDwxMHxiKGEuY2hhckF0KGQrMSkpPDw0fGIoYS5jaGFyQXQoZCsyKSk+PjIsYyhoPj44JjI1NSksYygyNTUmaCkpLGp9ZnVuY3Rpb24gZChhKXtmdW5jdGlvbiBiKGEpe3JldHVyblwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLmNoYXJBdChhKX1mdW5jdGlvbiBjKGEpe3JldHVybiBiKGE+PjE4JjYzKStiKGE+PjEyJjYzKStiKGE+PjYmNjMpK2IoNjMmYSl9dmFyIGQsZSxmLGc9YS5sZW5ndGglMyxoPVwiXCI7Zm9yKGQ9MCxmPWEubGVuZ3RoLWc7ZDxmO2QrPTMpZT0oYVtkXTw8MTYpKyhhW2QrMV08PDgpK2FbZCsyXSxoKz1jKGUpO3N3aXRjaChnKXtjYXNlIDE6ZT1hW2EubGVuZ3RoLTFdLGgrPWIoZT4+MiksaCs9YihlPDw0JjYzKSxoKz1cIj09XCI7YnJlYWs7Y2FzZSAyOmU9KGFbYS5sZW5ndGgtMl08PDgpK2FbYS5sZW5ndGgtMV0saCs9YihlPj4xMCksaCs9YihlPj40JjYzKSxoKz1iKGU8PDImNjMpLGgrPVwiPVwifXJldHVybiBofXZhciBlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksZj1cIitcIi5jaGFyQ29kZUF0KDApLGc9XCIvXCIuY2hhckNvZGVBdCgwKSxoPVwiMFwiLmNoYXJDb2RlQXQoMCksaT1cImFcIi5jaGFyQ29kZUF0KDApLGo9XCJBXCIuY2hhckNvZGVBdCgwKSxrPVwiLVwiLmNoYXJDb2RlQXQoMCksbD1cIl9cIi5jaGFyQ29kZUF0KDApO2EudG9CeXRlQXJyYXk9YyxhLmZyb21CeXRlQXJyYXk9ZH0odm9pZCAwPT09Yz90aGlzLmJhc2U2NGpzPXt9OmMpfSx7fV0sMjpbZnVuY3Rpb24oYSxiLGMpe30se31dLDM6W2Z1bmN0aW9uKGEsYixjKXsoZnVuY3Rpb24oYil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZCgpe2Z1bmN0aW9uIGEoKXt9dHJ5e3ZhciBiPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBiLmZvbz1mdW5jdGlvbigpe3JldHVybiA0Mn0sYi5jb25zdHJ1Y3Rvcj1hLDQyPT09Yi5mb28oKSYmYi5jb25zdHJ1Y3Rvcj09PWEmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGIuc3ViYXJyYXkmJjA9PT1iLnN1YmFycmF5KDEsMSkuYnl0ZUxlbmd0aH1jYXRjaChhKXtyZXR1cm4hMX19ZnVuY3Rpb24gZSgpe3JldHVybiBmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIGYoYSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBmPyhmLlRZUEVEX0FSUkFZX1NVUFBPUlR8fCh0aGlzLmxlbmd0aD0wLHRoaXMucGFyZW50PXZvaWQgMCksXCJudW1iZXJcIj09dHlwZW9mIGE/Zyh0aGlzLGEpOlwic3RyaW5nXCI9PXR5cGVvZiBhP2godGhpcyxhLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06XCJ1dGY4XCIpOmkodGhpcyxhKSk6YXJndW1lbnRzLmxlbmd0aD4xP25ldyBmKGEsYXJndW1lbnRzWzFdKTpuZXcgZihhKX1mdW5jdGlvbiBnKGEsYil7aWYoYT1wKGEsYjwwPzA6MHxxKGIpKSwhZi5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgYz0wO2M8YjtjKyspYVtjXT0wO3JldHVybiBhfWZ1bmN0aW9uIGgoYSxiLGMpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBjJiZcIlwiIT09Y3x8KGM9XCJ1dGY4XCIpLGE9cChhLDB8cyhiLGMpKSxhLndyaXRlKGIsYyksYX1mdW5jdGlvbiBpKGEsYil7aWYoZi5pc0J1ZmZlcihiKSlyZXR1cm4gaihhLGIpO2lmKFkoYikpcmV0dXJuIGsoYSxiKTtpZihudWxsPT1iKXRocm93IG5ldyBUeXBlRXJyb3IoXCJtdXN0IHN0YXJ0IHdpdGggbnVtYmVyLCBidWZmZXIsIGFycmF5IG9yIHN0cmluZ1wiKTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXIpe2lmKGIuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIGwoYSxiKTtpZihiIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIG0oYSxiKX1yZXR1cm4gYi5sZW5ndGg/bihhLGIpOm8oYSxiKX1mdW5jdGlvbiBqKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTtyZXR1cm4gYT1wKGEsYyksYi5jb3B5KGEsMCwwLGMpLGF9ZnVuY3Rpb24gayhhLGIpe3ZhciBjPTB8cShiLmxlbmd0aCk7YT1wKGEsYyk7Zm9yKHZhciBkPTA7ZDxjO2QrPTEpYVtkXT0yNTUmYltkXTtyZXR1cm4gYX1mdW5jdGlvbiBsKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTthPXAoYSxjKTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlhW2RdPTI1NSZiW2RdO3JldHVybiBhfWZ1bmN0aW9uIG0oYSxiKXtyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyhiLmJ5dGVMZW5ndGgsYT1mLl9hdWdtZW50KG5ldyBVaW50OEFycmF5KGIpKSk6YT1sKGEsbmV3IFVpbnQ4QXJyYXkoYikpLGF9ZnVuY3Rpb24gbihhLGIpe3ZhciBjPTB8cShiLmxlbmd0aCk7YT1wKGEsYyk7Zm9yKHZhciBkPTA7ZDxjO2QrPTEpYVtkXT0yNTUmYltkXTtyZXR1cm4gYX1mdW5jdGlvbiBvKGEsYil7dmFyIGMsZD0wO1wiQnVmZmVyXCI9PT1iLnR5cGUmJlkoYi5kYXRhKSYmKGM9Yi5kYXRhLGQ9MHxxKGMubGVuZ3RoKSksYT1wKGEsZCk7Zm9yKHZhciBlPTA7ZTxkO2UrPTEpYVtlXT0yNTUmY1tlXTtyZXR1cm4gYX1mdW5jdGlvbiBwKGEsYil7cmV0dXJuIGYuVFlQRURfQVJSQVlfU1VQUE9SVD8oYT1mLl9hdWdtZW50KG5ldyBVaW50OEFycmF5KGIpKSxhLl9fcHJvdG9fXz1mLnByb3RvdHlwZSk6KGEubGVuZ3RoPWIsYS5faXNCdWZmZXI9ITApLDAhPT1iJiZiPD1mLnBvb2xTaXplPj4+MSYmKGEucGFyZW50PVopLGF9ZnVuY3Rpb24gcShhKXtpZihhPj1lKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4XCIrZSgpLnRvU3RyaW5nKDE2KStcIiBieXRlc1wiKTtyZXR1cm4gMHxhfWZ1bmN0aW9uIHIoYSxiKXtpZighKHRoaXMgaW5zdGFuY2VvZiByKSlyZXR1cm4gbmV3IHIoYSxiKTt2YXIgYz1uZXcgZihhLGIpO3JldHVybiBkZWxldGUgYy5wYXJlbnQsY31mdW5jdGlvbiBzKGEsYil7XCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPVwiXCIrYSk7dmFyIGM9YS5sZW5ndGg7aWYoMD09PWMpcmV0dXJuIDA7Zm9yKHZhciBkPSExOzspc3dpdGNoKGIpe2Nhc2VcImFzY2lpXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwicmF3XCI6Y2FzZVwicmF3c1wiOnJldHVybiBjO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBSKGEpLmxlbmd0aDtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gMipjO2Nhc2VcImhleFwiOnJldHVybiBjPj4+MTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gVShhKS5sZW5ndGg7ZGVmYXVsdDppZihkKXJldHVybiBSKGEpLmxlbmd0aDtiPShcIlwiK2IpLnRvTG93ZXJDYXNlKCksZD0hMH19ZnVuY3Rpb24gdChhLGIsYyl7dmFyIGQ9ITE7aWYoYnw9MCxjPXZvaWQgMD09PWN8fGM9PT0xLzA/dGhpcy5sZW5ndGg6MHxjLGF8fChhPVwidXRmOFwiKSxiPDAmJihiPTApLGM+dGhpcy5sZW5ndGgmJihjPXRoaXMubGVuZ3RoKSxjPD1iKXJldHVyblwiXCI7Zm9yKDs7KXN3aXRjaChhKXtjYXNlXCJoZXhcIjpyZXR1cm4gRih0aGlzLGIsYyk7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIEIodGhpcyxiLGMpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIEQodGhpcyxiLGMpO2Nhc2VcImJpbmFyeVwiOnJldHVybiBFKHRoaXMsYixjKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gQSh0aGlzLGIsYyk7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIEcodGhpcyxiLGMpO2RlZmF1bHQ6aWYoZCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrYSk7YT0oYStcIlwiKS50b0xvd2VyQ2FzZSgpLGQ9ITB9fWZ1bmN0aW9uIHUoYSxiLGMsZCl7Yz1OdW1iZXIoYyl8fDA7dmFyIGU9YS5sZW5ndGgtYztkPyhkPU51bWJlcihkKSk+ZSYmKGQ9ZSk6ZD1lO3ZhciBmPWIubGVuZ3RoO2lmKGYlMiE9MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGhleCBzdHJpbmdcIik7ZD5mLzImJihkPWYvMik7Zm9yKHZhciBnPTA7ZzxkO2crKyl7dmFyIGg9cGFyc2VJbnQoYi5zdWJzdHIoMipnLDIpLDE2KTtpZihpc05hTihoKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGhleCBzdHJpbmdcIik7YVtjK2ddPWh9cmV0dXJuIGd9ZnVuY3Rpb24gdihhLGIsYyxkKXtyZXR1cm4gVihSKGIsYS5sZW5ndGgtYyksYSxjLGQpfWZ1bmN0aW9uIHcoYSxiLGMsZCl7cmV0dXJuIFYoUyhiKSxhLGMsZCl9ZnVuY3Rpb24geChhLGIsYyxkKXtyZXR1cm4gdyhhLGIsYyxkKX1mdW5jdGlvbiB5KGEsYixjLGQpe3JldHVybiBWKFUoYiksYSxjLGQpfWZ1bmN0aW9uIHooYSxiLGMsZCl7cmV0dXJuIFYoVChiLGEubGVuZ3RoLWMpLGEsYyxkKX1mdW5jdGlvbiBBKGEsYixjKXtyZXR1cm4gMD09PWImJmM9PT1hLmxlbmd0aD9XLmZyb21CeXRlQXJyYXkoYSk6Vy5mcm9tQnl0ZUFycmF5KGEuc2xpY2UoYixjKSl9ZnVuY3Rpb24gQihhLGIsYyl7Yz1NYXRoLm1pbihhLmxlbmd0aCxjKTtmb3IodmFyIGQ9W10sZT1iO2U8Yzspe3ZhciBmPWFbZV0sZz1udWxsLGg9Zj4yMzk/NDpmPjIyMz8zOmY+MTkxPzI6MTtpZihlK2g8PWMpe3ZhciBpLGosayxsO3N3aXRjaChoKXtjYXNlIDE6ZjwxMjgmJihnPWYpO2JyZWFrO2Nhc2UgMjppPWFbZSsxXSwxMjg9PSgxOTImaSkmJihsPSgzMSZmKTw8Nnw2MyZpKT4xMjcmJihnPWwpO2JyZWFrO2Nhc2UgMzppPWFbZSsxXSxqPWFbZSsyXSwxMjg9PSgxOTImaSkmJjEyOD09KDE5MiZqKSYmKGw9KDE1JmYpPDwxMnwoNjMmaSk8PDZ8NjMmaik+MjA0NyYmKGw8NTUyOTZ8fGw+NTczNDMpJiYoZz1sKTticmVhaztjYXNlIDQ6aT1hW2UrMV0saj1hW2UrMl0saz1hW2UrM10sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImaikmJjEyOD09KDE5MiZrKSYmKGw9KDE1JmYpPDwxOHwoNjMmaSk8PDEyfCg2MyZqKTw8Nnw2MyZrKT42NTUzNSYmbDwxMTE0MTEyJiYoZz1sKX19bnVsbD09PWc/KGc9NjU1MzMsaD0xKTpnPjY1NTM1JiYoZy09NjU1MzYsZC5wdXNoKGc+Pj4xMCYxMDIzfDU1Mjk2KSxnPTU2MzIwfDEwMjMmZyksZC5wdXNoKGcpLGUrPWh9cmV0dXJuIEMoZCl9ZnVuY3Rpb24gQyhhKXt2YXIgYj1hLmxlbmd0aDtpZihiPD0kKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhKTtmb3IodmFyIGM9XCJcIixkPTA7ZDxiOyljKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhLnNsaWNlKGQsZCs9JCkpO3JldHVybiBjfWZ1bmN0aW9uIEQoYSxiLGMpe3ZhciBkPVwiXCI7Yz1NYXRoLm1pbihhLmxlbmd0aCxjKTtmb3IodmFyIGU9YjtlPGM7ZSsrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmFbZV0pO3JldHVybiBkfWZ1bmN0aW9uIEUoYSxiLGMpe3ZhciBkPVwiXCI7Yz1NYXRoLm1pbihhLmxlbmd0aCxjKTtmb3IodmFyIGU9YjtlPGM7ZSsrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtlXSk7cmV0dXJuIGR9ZnVuY3Rpb24gRihhLGIsYyl7dmFyIGQ9YS5sZW5ndGg7KCFifHxiPDApJiYoYj0wKSwoIWN8fGM8MHx8Yz5kKSYmKGM9ZCk7Zm9yKHZhciBlPVwiXCIsZj1iO2Y8YztmKyspZSs9UShhW2ZdKTtyZXR1cm4gZX1mdW5jdGlvbiBHKGEsYixjKXtmb3IodmFyIGQ9YS5zbGljZShiLGMpLGU9XCJcIixmPTA7ZjxkLmxlbmd0aDtmKz0yKWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoZFtmXSsyNTYqZFtmKzFdKTtyZXR1cm4gZX1mdW5jdGlvbiBIKGEsYixjKXtpZihhJTEhPTB8fGE8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm9mZnNldCBpcyBub3QgdWludFwiKTtpZihhK2I+Yyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGhcIil9ZnVuY3Rpb24gSShhLGIsYyxkLGUsZyl7aWYoIWYuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImJ1ZmZlciBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlXCIpO2lmKGI+ZXx8YjxnKXRocm93IG5ldyBSYW5nZUVycm9yKFwidmFsdWUgaXMgb3V0IG9mIGJvdW5kc1wiKTtpZihjK2Q+YS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gSihhLGIsYyxkKXtiPDAmJihiPTY1NTM1K2IrMSk7Zm9yKHZhciBlPTAsZj1NYXRoLm1pbihhLmxlbmd0aC1jLDIpO2U8ZjtlKyspYVtjK2VdPShiJjI1NTw8OCooZD9lOjEtZSkpPj4+OCooZD9lOjEtZSl9ZnVuY3Rpb24gSyhhLGIsYyxkKXtiPDAmJihiPTQyOTQ5NjcyOTUrYisxKTtmb3IodmFyIGU9MCxmPU1hdGgubWluKGEubGVuZ3RoLWMsNCk7ZTxmO2UrKylhW2MrZV09Yj4+PjgqKGQ/ZTozLWUpJjI1NX1mdW5jdGlvbiBMKGEsYixjLGQsZSxmKXtpZihiPmV8fGI8Zil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInZhbHVlIGlzIG91dCBvZiBib3VuZHNcIik7aWYoYytkPmEubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiaW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKGM8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBNKGEsYixjLGQsZSl7cmV0dXJuIGV8fEwoYSxiLGMsNCwzLjQwMjgyMzQ2NjM4NTI4ODZlMzgsLTMuNDAyODIzNDY2Mzg1Mjg4NmUzOCksWC53cml0ZShhLGIsYyxkLDIzLDQpLGMrNH1mdW5jdGlvbiBOKGEsYixjLGQsZSl7cmV0dXJuIGV8fEwoYSxiLGMsOCwxLjc5NzY5MzEzNDg2MjMxNTdlMzA4LC0xLjc5NzY5MzEzNDg2MjMxNTdlMzA4KSxYLndyaXRlKGEsYixjLGQsNTIsOCksYys4fWZ1bmN0aW9uIE8oYSl7aWYoYT1QKGEpLnJlcGxhY2UoYWEsXCJcIiksYS5sZW5ndGg8MilyZXR1cm5cIlwiO2Zvcig7YS5sZW5ndGglNCE9MDspYSs9XCI9XCI7cmV0dXJuIGF9ZnVuY3Rpb24gUChhKXtyZXR1cm4gYS50cmltP2EudHJpbSgpOmEucmVwbGFjZSgvXlxccyt8XFxzKyQvZyxcIlwiKX1mdW5jdGlvbiBRKGEpe3JldHVybiBhPDE2P1wiMFwiK2EudG9TdHJpbmcoMTYpOmEudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFIoYSxiKXtiPWJ8fDEvMDtmb3IodmFyIGMsZD1hLmxlbmd0aCxlPW51bGwsZj1bXSxnPTA7ZzxkO2crKyl7aWYoKGM9YS5jaGFyQ29kZUF0KGcpKT41NTI5NSYmYzw1NzM0NCl7aWYoIWUpe2lmKGM+NTYzMTkpeyhiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihnKzE9PT1kKXsoYi09Myk+LTEmJmYucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9ZT1jO2NvbnRpbnVlfWlmKGM8NTYzMjApeyhiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KSxlPWM7Y29udGludWV9Yz02NTUzNisoZS01NTI5Njw8MTB8Yy01NjMyMCl9ZWxzZSBlJiYoYi09Myk+LTEmJmYucHVzaCgyMzksMTkxLDE4OSk7aWYoZT1udWxsLGM8MTI4KXtpZigoYi09MSk8MClicmVhaztmLnB1c2goYyl9ZWxzZSBpZihjPDIwNDgpe2lmKChiLT0yKTwwKWJyZWFrO2YucHVzaChjPj42fDE5Miw2MyZjfDEyOCl9ZWxzZSBpZihjPDY1NTM2KXtpZigoYi09Myk8MClicmVhaztmLnB1c2goYz4+MTJ8MjI0LGM+PjYmNjN8MTI4LDYzJmN8MTI4KX1lbHNle2lmKCEoYzwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIik7aWYoKGItPTQpPDApYnJlYWs7Zi5wdXNoKGM+PjE4fDI0MCxjPj4xMiY2M3wxMjgsYz4+NiY2M3wxMjgsNjMmY3wxMjgpfX1yZXR1cm4gZn1mdW5jdGlvbiBTKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKDI1NSZhLmNoYXJDb2RlQXQoYykpO3JldHVybiBifWZ1bmN0aW9uIFQoYSxiKXtmb3IodmFyIGMsZCxlLGY9W10sZz0wO2c8YS5sZW5ndGgmJiEoKGItPTIpPDApO2crKyljPWEuY2hhckNvZGVBdChnKSxkPWM+PjgsZT1jJTI1NixmLnB1c2goZSksZi5wdXNoKGQpO3JldHVybiBmfWZ1bmN0aW9uIFUoYSl7cmV0dXJuIFcudG9CeXRlQXJyYXkoTyhhKSl9ZnVuY3Rpb24gVihhLGIsYyxkKXtmb3IodmFyIGU9MDtlPGQmJiEoZStjPj1iLmxlbmd0aHx8ZT49YS5sZW5ndGgpO2UrKyliW2UrY109YVtlXTtyZXR1cm4gZX12YXIgVz1hKFwiYmFzZTY0LWpzXCIpLFg9YShcImllZWU3NTRcIiksWT1hKFwiaXNhcnJheVwiKTtjLkJ1ZmZlcj1mLGMuU2xvd0J1ZmZlcj1yLGMuSU5TUEVDVF9NQVhfQllURVM9NTAsZi5wb29sU2l6ZT04MTkyO3ZhciBaPXt9O2YuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDAhPT1iLlRZUEVEX0FSUkFZX1NVUFBPUlQ/Yi5UWVBFRF9BUlJBWV9TVVBQT1JUOmQoKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGYucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxmLl9fcHJvdG9fXz1VaW50OEFycmF5KTooZi5wcm90b3R5cGUubGVuZ3RoPXZvaWQgMCxmLnByb3RvdHlwZS5wYXJlbnQ9dm9pZCAwKSxmLmlzQnVmZmVyPWZ1bmN0aW9uKGEpe3JldHVybiEobnVsbD09YXx8IWEuX2lzQnVmZmVyKX0sZi5jb21wYXJlPWZ1bmN0aW9uKGEsYil7aWYoIWYuaXNCdWZmZXIoYSl8fCFmLmlzQnVmZmVyKGIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzXCIpO2lmKGE9PT1iKXJldHVybiAwO2Zvcih2YXIgYz1hLmxlbmd0aCxkPWIubGVuZ3RoLGU9MCxnPU1hdGgubWluKGMsZCk7ZTxnJiZhW2VdPT09YltlXTspKytlO3JldHVybiBlIT09ZyYmKGM9YVtlXSxkPWJbZV0pLGM8ZD8tMTpkPGM/MTowfSxmLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oYSl7c3dpdGNoKFN0cmluZyhhKS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInJhd1wiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxmLmNvbmNhdD1mdW5jdGlvbihhLGIpe2lmKCFZKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJsaXN0IGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycy5cIik7aWYoMD09PWEubGVuZ3RoKXJldHVybiBuZXcgZigwKTt2YXIgYztpZih2b2lkIDA9PT1iKWZvcihiPTAsYz0wO2M8YS5sZW5ndGg7YysrKWIrPWFbY10ubGVuZ3RoO3ZhciBkPW5ldyBmKGIpLGU9MDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgZz1hW2NdO2cuY29weShkLGUpLGUrPWcubGVuZ3RofXJldHVybiBkfSxmLmJ5dGVMZW5ndGg9cyxmLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBhPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1hP1wiXCI6MD09PWFyZ3VtZW50cy5sZW5ndGg/Qih0aGlzLDAsYSk6dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGYucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihhKXtpZighZi5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PWF8fDA9PT1mLmNvbXBhcmUodGhpcyxhKX0sZi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBhPVwiXCIsYj1jLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoYT10aGlzLnRvU3RyaW5nKFwiaGV4XCIsMCxiKS5tYXRjaCgvLnsyfS9nKS5qb2luKFwiIFwiKSx0aGlzLmxlbmd0aD5iJiYoYSs9XCIgLi4uIFwiKSksXCI8QnVmZmVyIFwiK2ErXCI+XCJ9LGYucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oYSl7aWYoIWYuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXJcIik7cmV0dXJuIHRoaXM9PT1hPzA6Zi5jb21wYXJlKHRoaXMsYSl9LGYucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYixjKXtmb3IodmFyIGQ9LTEsZT0wO2MrZTxhLmxlbmd0aDtlKyspaWYoYVtjK2VdPT09YlstMT09PWQ/MDplLWRdKXtpZigtMT09PWQmJihkPWUpLGUtZCsxPT09Yi5sZW5ndGgpcmV0dXJuIGMrZH1lbHNlIGQ9LTE7cmV0dXJuLTF9aWYoYj4yMTQ3NDgzNjQ3P2I9MjE0NzQ4MzY0NzpiPC0yMTQ3NDgzNjQ4JiYoYj0tMjE0NzQ4MzY0OCksYj4+PTAsMD09PXRoaXMubGVuZ3RoKXJldHVybi0xO2lmKGI+PXRoaXMubGVuZ3RoKXJldHVybi0xO2lmKGI8MCYmKGI9TWF0aC5tYXgodGhpcy5sZW5ndGgrYiwwKSksXCJzdHJpbmdcIj09dHlwZW9mIGEpcmV0dXJuIDA9PT1hLmxlbmd0aD8tMTpTdHJpbmcucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLGEsYik7aWYoZi5pc0J1ZmZlcihhKSlyZXR1cm4gYyh0aGlzLGEsYik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGEpcmV0dXJuIGYuVFlQRURfQVJSQVlfU1VQUE9SVCYmXCJmdW5jdGlvblwiPT09VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcyxhLGIpOmModGhpcyxbYV0sYik7dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlclwiKX0sZi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBjb25zb2xlLmxvZyhcIi5nZXQoKSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdXNpbmcgYXJyYXkgaW5kZXhlcyBpbnN0ZWFkLlwiKSx0aGlzLnJlYWRVSW50OChhKX0sZi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGNvbnNvbGUubG9nKFwiLnNldCgpIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB1c2luZyBhcnJheSBpbmRleGVzIGluc3RlYWQuXCIpLHRoaXMud3JpdGVVSW50OChhLGIpfSxmLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihhLGIsYyxkKXtpZih2b2lkIDA9PT1iKWQ9XCJ1dGY4XCIsYz10aGlzLmxlbmd0aCxiPTA7ZWxzZSBpZih2b2lkIDA9PT1jJiZcInN0cmluZ1wiPT10eXBlb2YgYilkPWIsYz10aGlzLmxlbmd0aCxiPTA7ZWxzZSBpZihpc0Zpbml0ZShiKSlifD0wLGlzRmluaXRlKGMpPyhjfD0wLHZvaWQgMD09PWQmJihkPVwidXRmOFwiKSk6KGQ9YyxjPXZvaWQgMCk7ZWxzZXt2YXIgZT1kO2Q9YixiPTB8YyxjPWV9dmFyIGY9dGhpcy5sZW5ndGgtYjtpZigodm9pZCAwPT09Y3x8Yz5mKSYmKGM9ZiksYS5sZW5ndGg+MCYmKGM8MHx8YjwwKXx8Yj50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzXCIpO2R8fChkPVwidXRmOFwiKTtmb3IodmFyIGc9ITE7Oylzd2l0Y2goZCl7Y2FzZVwiaGV4XCI6cmV0dXJuIHUodGhpcyxhLGIsYyk7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIHYodGhpcyxhLGIsYyk7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gdyh0aGlzLGEsYixjKTtjYXNlXCJiaW5hcnlcIjpyZXR1cm4geCh0aGlzLGEsYixjKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4geSh0aGlzLGEsYixjKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4geih0aGlzLGEsYixjKTtkZWZhdWx0OmlmKGcpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2QpO2Q9KFwiXCIrZCkudG9Mb3dlckNhc2UoKSxnPSEwfX0sZi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciAkPTQwOTY7Zi5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmxlbmd0aDthPX5+YSxiPXZvaWQgMD09PWI/Yzp+fmIsYTwwPyhhKz1jKTwwJiYoYT0wKTphPmMmJihhPWMpLGI8MD8oYis9Yyk8MCYmKGI9MCk6Yj5jJiYoYj1jKSxiPGEmJihiPWEpO3ZhciBkO2lmKGYuVFlQRURfQVJSQVlfU1VQUE9SVClkPWYuX2F1Z21lbnQodGhpcy5zdWJhcnJheShhLGIpKTtlbHNle3ZhciBlPWItYTtkPW5ldyBmKGUsdm9pZCAwKTtmb3IodmFyIGc9MDtnPGU7ZysrKWRbZ109dGhpc1tnK2FdfXJldHVybiBkLmxlbmd0aCYmKGQucGFyZW50PXRoaXMucGFyZW50fHx0aGlzKSxkfSxmLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGEsYixjKXthfD0wLGJ8PTAsY3x8SChhLGIsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZD10aGlzW2FdLGU9MSxmPTA7KytmPGImJihlKj0yNTYpOylkKz10aGlzW2ErZl0qZTtyZXR1cm4gZH0sZi5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihhLGIsYyl7YXw9MCxifD0wLGN8fEgoYSxiLHRoaXMubGVuZ3RoKTtmb3IodmFyIGQ9dGhpc1thKy0tYl0sZT0xO2I+MCYmKGUqPTI1Nik7KWQrPXRoaXNbYSstLWJdKmU7cmV0dXJuIGR9LGYucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsMSx0aGlzLmxlbmd0aCksdGhpc1thXX0sZi5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwyLHRoaXMubGVuZ3RoKSx0aGlzW2FdfHRoaXNbYSsxXTw8OH0sZi5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwyLHRoaXMubGVuZ3RoKSx0aGlzW2FdPDw4fHRoaXNbYSsxXX0sZi5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSwodGhpc1thXXx0aGlzW2ErMV08PDh8dGhpc1thKzJdPDwxNikrMTY3NzcyMTYqdGhpc1thKzNdfSxmLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbYV0rKHRoaXNbYSsxXTw8MTZ8dGhpc1thKzJdPDw4fHRoaXNbYSszXSl9LGYucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihhLGIsYyl7YXw9MCxifD0wLGN8fEgoYSxiLHRoaXMubGVuZ3RoKTtmb3IodmFyIGQ9dGhpc1thXSxlPTEsZj0wOysrZjxiJiYoZSo9MjU2KTspZCs9dGhpc1thK2ZdKmU7cmV0dXJuIGUqPTEyOCxkPj1lJiYoZC09TWF0aC5wb3coMiw4KmIpKSxkfSxmLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oYSxiLGMpe2F8PTAsYnw9MCxjfHxIKGEsYix0aGlzLmxlbmd0aCk7Zm9yKHZhciBkPWIsZT0xLGY9dGhpc1thKy0tZF07ZD4wJiYoZSo9MjU2KTspZis9dGhpc1thKy0tZF0qZTtyZXR1cm4gZSo9MTI4LGY+PWUmJihmLT1NYXRoLnBvdygyLDgqYikpLGZ9LGYucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1thXT8tMSooMjU1LXRoaXNbYV0rMSk6dGhpc1thXX0sZi5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oYSxiKXtifHxIKGEsMix0aGlzLmxlbmd0aCk7dmFyIGM9dGhpc1thXXx0aGlzW2ErMV08PDg7cmV0dXJuIDMyNzY4JmM/NDI5NDkwMTc2MHxjOmN9LGYucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGEsYil7Ynx8SChhLDIsdGhpcy5sZW5ndGgpO3ZhciBjPXRoaXNbYSsxXXx0aGlzW2FdPDw4O3JldHVybiAzMjc2OCZjPzQyOTQ5MDE3NjB8YzpjfSxmLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksdGhpc1thXXx0aGlzW2ErMV08PDh8dGhpc1thKzJdPDwxNnx0aGlzW2ErM108PDI0fSxmLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksdGhpc1thXTw8MjR8dGhpc1thKzFdPDwxNnx0aGlzW2ErMl08PDh8dGhpc1thKzNdfSxmLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksWC5yZWFkKHRoaXMsYSwhMCwyMyw0KX0sZi5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLFgucmVhZCh0aGlzLGEsITEsMjMsNCl9LGYucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsOCx0aGlzLmxlbmd0aCksWC5yZWFkKHRoaXMsYSwhMCw1Miw4KX0sZi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw4LHRoaXMubGVuZ3RoKSxYLnJlYWQodGhpcyxhLCExLDUyLDgpfSxmLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihhLGIsYyxkKXthPSthLGJ8PTAsY3w9MCxkfHxJKHRoaXMsYSxiLGMsTWF0aC5wb3coMiw4KmMpLDApO3ZhciBlPTEsZj0wO2Zvcih0aGlzW2JdPTI1NSZhOysrZjxjJiYoZSo9MjU2KTspdGhpc1tiK2ZdPWEvZSYyNTU7cmV0dXJuIGIrY30sZi5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oYSxiLGMsZCl7YT0rYSxifD0wLGN8PTAsZHx8SSh0aGlzLGEsYixjLE1hdGgucG93KDIsOCpjKSwwKTt2YXIgZT1jLTEsZj0xO2Zvcih0aGlzW2IrZV09MjU1JmE7LS1lPj0wJiYoZio9MjU2KTspdGhpc1tiK2VdPWEvZiYyNTU7cmV0dXJuIGIrY30sZi5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDEsMjU1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGE9TWF0aC5mbG9vcihhKSksdGhpc1tiXT0yNTUmYSxiKzF9LGYucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwyLDY1NTM1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT0yNTUmYSx0aGlzW2IrMV09YT4+PjgpOkoodGhpcyxhLGIsITApLGIrMn0sZi5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsNjU1MzUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj44LHRoaXNbYisxXT0yNTUmYSk6Sih0aGlzLGEsYiwhMSksYisyfSxmLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsNCw0Mjk0OTY3Mjk1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiKzNdPWE+Pj4yNCx0aGlzW2IrMl09YT4+PjE2LHRoaXNbYisxXT1hPj4+OCx0aGlzW2JdPTI1NSZhKTpLKHRoaXMsYSxiLCEwKSxiKzR9LGYucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiw0LDQyOTQ5NjcyOTUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj4yNCx0aGlzW2IrMV09YT4+PjE2LHRoaXNbYisyXT1hPj4+OCx0aGlzW2IrM109MjU1JmEpOksodGhpcyxhLGIsITEpLGIrNH0sZi5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihhLGIsYyxkKXtpZihhPSthLGJ8PTAsIWQpe3ZhciBlPU1hdGgucG93KDIsOCpjLTEpO0kodGhpcyxhLGIsYyxlLTEsLWUpfXZhciBmPTAsZz0xLGg9YTwwPzE6MDtmb3IodGhpc1tiXT0yNTUmYTsrK2Y8YyYmKGcqPTI1Nik7KXRoaXNbYitmXT0oYS9nPj4wKS1oJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGEsYixjLGQpe2lmKGE9K2EsYnw9MCwhZCl7dmFyIGU9TWF0aC5wb3coMiw4KmMtMSk7SSh0aGlzLGEsYixjLGUtMSwtZSl9dmFyIGY9Yy0xLGc9MSxoPWE8MD8xOjA7Zm9yKHRoaXNbYitmXT0yNTUmYTstLWY+PTAmJihnKj0yNTYpOyl0aGlzW2IrZl09KGEvZz4+MCktaCYyNTU7cmV0dXJuIGIrY30sZi5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMSwxMjcsLTEyOCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoYT1NYXRoLmZsb29yKGEpKSxhPDAmJihhPTI1NSthKzEpLHRoaXNbYl09MjU1JmEsYisxfSxmLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwyLDMyNzY3LC0zMjc2OCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPTI1NSZhLHRoaXNbYisxXT1hPj4+OCk6Sih0aGlzLGEsYiwhMCksYisyfSxmLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwyLDMyNzY3LC0zMjc2OCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj44LHRoaXNbYisxXT0yNTUmYSk6Sih0aGlzLGEsYiwhMSksYisyfSxmLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT0yNTUmYSx0aGlzW2IrMV09YT4+PjgsdGhpc1tiKzJdPWE+Pj4xNix0aGlzW2IrM109YT4+PjI0KTpLKHRoaXMsYSxiLCEwKSxiKzR9LGYucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksYTwwJiYoYT00Mjk0OTY3Mjk1K2ErMSksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj4yNCx0aGlzW2IrMV09YT4+PjE2LHRoaXNbYisyXT1hPj4+OCx0aGlzW2IrM109MjU1JmEpOksodGhpcyxhLGIsITEpLGIrNH0sZi5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTSh0aGlzLGEsYiwhMCxjKX0sZi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTSh0aGlzLGEsYiwhMSxjKX0sZi5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIE4odGhpcyxhLGIsITAsYyl9LGYucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBOKHRoaXMsYSxiLCExLGMpfSxmLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGEsYixjLGQpe2lmKGN8fChjPTApLGR8fDA9PT1kfHwoZD10aGlzLmxlbmd0aCksYj49YS5sZW5ndGgmJihiPWEubGVuZ3RoKSxifHwoYj0wKSxkPjAmJmQ8YyYmKGQ9YyksZD09PWMpcmV0dXJuIDA7aWYoMD09PWEubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoYjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihjPDB8fGM+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihkPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kc1wiKTtkPnRoaXMubGVuZ3RoJiYoZD10aGlzLmxlbmd0aCksYS5sZW5ndGgtYjxkLWMmJihkPWEubGVuZ3RoLWIrYyk7dmFyIGUsZz1kLWM7aWYodGhpcz09PWEmJmM8YiYmYjxkKWZvcihlPWctMTtlPj0wO2UtLSlhW2UrYl09dGhpc1tlK2NdO2Vsc2UgaWYoZzwxZTN8fCFmLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGU9MDtlPGc7ZSsrKWFbZStiXT10aGlzW2UrY107ZWxzZSBhLl9zZXQodGhpcy5zdWJhcnJheShjLGMrZyksYik7cmV0dXJuIGd9LGYucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oYSxiLGMpe2lmKGF8fChhPTApLGJ8fChiPTApLGN8fChjPXRoaXMubGVuZ3RoKSxjPGIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJlbmQgPCBzdGFydFwiKTtpZihjIT09YiYmMCE9PXRoaXMubGVuZ3RoKXtpZihiPDB8fGI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwic3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihjPDB8fGM+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJlbmQgb3V0IG9mIGJvdW5kc1wiKTt2YXIgZDtpZihcIm51bWJlclwiPT10eXBlb2YgYSlmb3IoZD1iO2Q8YztkKyspdGhpc1tkXT1hO2Vsc2V7dmFyIGU9UihhLnRvU3RyaW5nKCkpLGY9ZS5sZW5ndGg7Zm9yKGQ9YjtkPGM7ZCsrKXRoaXNbZF09ZVtkJWZdfXJldHVybiB0aGlzfX0sZi5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5KXtpZihmLlRZUEVEX0FSUkFZX1NVUFBPUlQpcmV0dXJuIG5ldyBmKHRoaXMpLmJ1ZmZlcjtmb3IodmFyIGE9bmV3IFVpbnQ4QXJyYXkodGhpcy5sZW5ndGgpLGI9MCxjPWEubGVuZ3RoO2I8YztiKz0xKWFbYl09dGhpc1tiXTtyZXR1cm4gYS5idWZmZXJ9dGhyb3cgbmV3IFR5cGVFcnJvcihcIkJ1ZmZlci50b0FycmF5QnVmZmVyIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpfTt2YXIgXz1mLnByb3RvdHlwZTtmLl9hdWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBhLmNvbnN0cnVjdG9yPWYsYS5faXNCdWZmZXI9ITAsYS5fc2V0PWEuc2V0LGEuZ2V0PV8uZ2V0LGEuc2V0PV8uc2V0LGEud3JpdGU9Xy53cml0ZSxhLnRvU3RyaW5nPV8udG9TdHJpbmcsYS50b0xvY2FsZVN0cmluZz1fLnRvU3RyaW5nLGEudG9KU09OPV8udG9KU09OLGEuZXF1YWxzPV8uZXF1YWxzLGEuY29tcGFyZT1fLmNvbXBhcmUsYS5pbmRleE9mPV8uaW5kZXhPZixhLmNvcHk9Xy5jb3B5LGEuc2xpY2U9Xy5zbGljZSxhLnJlYWRVSW50TEU9Xy5yZWFkVUludExFLGEucmVhZFVJbnRCRT1fLnJlYWRVSW50QkUsYS5yZWFkVUludDg9Xy5yZWFkVUludDgsYS5yZWFkVUludDE2TEU9Xy5yZWFkVUludDE2TEUsYS5yZWFkVUludDE2QkU9Xy5yZWFkVUludDE2QkUsYS5yZWFkVUludDMyTEU9Xy5yZWFkVUludDMyTEUsYS5yZWFkVUludDMyQkU9Xy5yZWFkVUludDMyQkUsYS5yZWFkSW50TEU9Xy5yZWFkSW50TEUsYS5yZWFkSW50QkU9Xy5yZWFkSW50QkUsYS5yZWFkSW50OD1fLnJlYWRJbnQ4LGEucmVhZEludDE2TEU9Xy5yZWFkSW50MTZMRSxhLnJlYWRJbnQxNkJFPV8ucmVhZEludDE2QkUsYS5yZWFkSW50MzJMRT1fLnJlYWRJbnQzMkxFLGEucmVhZEludDMyQkU9Xy5yZWFkSW50MzJCRSxhLnJlYWRGbG9hdExFPV8ucmVhZEZsb2F0TEUsYS5yZWFkRmxvYXRCRT1fLnJlYWRGbG9hdEJFLGEucmVhZERvdWJsZUxFPV8ucmVhZERvdWJsZUxFLGEucmVhZERvdWJsZUJFPV8ucmVhZERvdWJsZUJFLGEud3JpdGVVSW50OD1fLndyaXRlVUludDgsYS53cml0ZVVJbnRMRT1fLndyaXRlVUludExFLGEud3JpdGVVSW50QkU9Xy53cml0ZVVJbnRCRSxhLndyaXRlVUludDE2TEU9Xy53cml0ZVVJbnQxNkxFLGEud3JpdGVVSW50MTZCRT1fLndyaXRlVUludDE2QkUsYS53cml0ZVVJbnQzMkxFPV8ud3JpdGVVSW50MzJMRSxhLndyaXRlVUludDMyQkU9Xy53cml0ZVVJbnQzMkJFLGEud3JpdGVJbnRMRT1fLndyaXRlSW50TEUsYS53cml0ZUludEJFPV8ud3JpdGVJbnRCRSxhLndyaXRlSW50OD1fLndyaXRlSW50OCxhLndyaXRlSW50MTZMRT1fLndyaXRlSW50MTZMRSxhLndyaXRlSW50MTZCRT1fLndyaXRlSW50MTZCRSxhLndyaXRlSW50MzJMRT1fLndyaXRlSW50MzJMRSxhLndyaXRlSW50MzJCRT1fLndyaXRlSW50MzJCRSxhLndyaXRlRmxvYXRMRT1fLndyaXRlRmxvYXRMRSxhLndyaXRlRmxvYXRCRT1fLndyaXRlRmxvYXRCRSxhLndyaXRlRG91YmxlTEU9Xy53cml0ZURvdWJsZUxFLGEud3JpdGVEb3VibGVCRT1fLndyaXRlRG91YmxlQkUsYS5maWxsPV8uZmlsbCxhLmluc3BlY3Q9Xy5pbnNwZWN0LGEudG9BcnJheUJ1ZmZlcj1fLnRvQXJyYXlCdWZmZXIsYX07dmFyIGFhPS9bXitcXC8wLTlBLVphLXotX10vZ30pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se1wiYmFzZTY0LWpzXCI6MSxpZWVlNzU0OjcsaXNhcnJheTo4fV0sNDpbZnVuY3Rpb24oYixjLGQpeyhmdW5jdGlvbihlLGYpeyFmdW5jdGlvbihiLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBkJiZ2b2lkIDAhPT1jP2MuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYSYmYS5hbWQ/YShlKTpiLkVTNlByb21pc2U9ZSgpfSh0aGlzLGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYShhKXt2YXIgYj10eXBlb2YgYTtyZXR1cm4gbnVsbCE9PWEmJihcIm9iamVjdFwiPT09Ynx8XCJmdW5jdGlvblwiPT09Yil9ZnVuY3Rpb24gYyhhKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBhfWZ1bmN0aW9uIGQoYSl7WD1hfWZ1bmN0aW9uIGcoYSl7WT1hfWZ1bmN0aW9uIGgoKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5uZXh0VGljayhtKX19ZnVuY3Rpb24gaSgpe3JldHVybiB2b2lkIDAhPT1XP2Z1bmN0aW9uKCl7VyhtKX06bCgpfWZ1bmN0aW9uIGooKXt2YXIgYT0wLGI9bmV3IF8obSksYz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtyZXR1cm4gYi5vYnNlcnZlKGMse2NoYXJhY3RlckRhdGE6ITB9KSxmdW5jdGlvbigpe2MuZGF0YT1hPSsrYSUyfX1mdW5jdGlvbiBrKCl7dmFyIGE9bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBhLnBvcnQxLm9ubWVzc2FnZT1tLGZ1bmN0aW9uKCl7cmV0dXJuIGEucG9ydDIucG9zdE1lc3NhZ2UoMCl9fWZ1bmN0aW9uIGwoKXt2YXIgYT1zZXRUaW1lb3V0O3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhKG0sMSl9fWZ1bmN0aW9uIG0oKXtmb3IodmFyIGE9MDthPFY7YSs9Mil7KDAsY2FbYV0pKGNhW2ErMV0pLGNhW2FdPXZvaWQgMCxjYVthKzFdPXZvaWQgMH1WPTB9ZnVuY3Rpb24gbigpe3RyeXt2YXIgYT1iLGM9YShcInZlcnR4XCIpO3JldHVybiBXPWMucnVuT25Mb29wfHxjLnJ1bk9uQ29udGV4dCxpKCl9Y2F0Y2goYSl7cmV0dXJuIGwoKX19ZnVuY3Rpb24gbyhhLGIpe3ZhciBjPWFyZ3VtZW50cyxkPXRoaXMsZT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihxKTt2b2lkIDA9PT1lW2VhXSYmSihlKTt2YXIgZj1kLl9zdGF0ZTtyZXR1cm4gZj9mdW5jdGlvbigpe3ZhciBhPWNbZi0xXTtZKGZ1bmN0aW9uKCl7cmV0dXJuIEcoZixlLGEsZC5fcmVzdWx0KX0pfSgpOkMoZCxlLGEsYiksZX1mdW5jdGlvbiBwKGEpe3ZhciBiPXRoaXM7aWYoYSYmXCJvYmplY3RcIj09dHlwZW9mIGEmJmEuY29uc3RydWN0b3I9PT1iKXJldHVybiBhO3ZhciBjPW5ldyBiKHEpO3JldHVybiB5KGMsYSksY31mdW5jdGlvbiBxKCl7fWZ1bmN0aW9uIHIoKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIil9ZnVuY3Rpb24gcygpe3JldHVybiBuZXcgVHlwZUVycm9yKFwiQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLlwiKX1mdW5jdGlvbiB0KGEpe3RyeXtyZXR1cm4gYS50aGVufWNhdGNoKGEpe3JldHVybiBpYS5lcnJvcj1hLGlhfX1mdW5jdGlvbiB1KGEsYixjLGQpe3RyeXthLmNhbGwoYixjLGQpfWNhdGNoKGEpe3JldHVybiBhfX1mdW5jdGlvbiB2KGEsYixjKXtZKGZ1bmN0aW9uKGEpe3ZhciBkPSExLGU9dShjLGIsZnVuY3Rpb24oYyl7ZHx8KGQ9ITAsYiE9PWM/eShhLGMpOkEoYSxjKSl9LGZ1bmN0aW9uKGIpe2R8fChkPSEwLEIoYSxiKSl9LFwiU2V0dGxlOiBcIisoYS5fbGFiZWx8fFwiIHVua25vd24gcHJvbWlzZVwiKSk7IWQmJmUmJihkPSEwLEIoYSxlKSl9LGEpfWZ1bmN0aW9uIHcoYSxiKXtiLl9zdGF0ZT09PWdhP0EoYSxiLl9yZXN1bHQpOmIuX3N0YXRlPT09aGE/QihhLGIuX3Jlc3VsdCk6QyhiLHZvaWQgMCxmdW5jdGlvbihiKXtyZXR1cm4geShhLGIpfSxmdW5jdGlvbihiKXtyZXR1cm4gQihhLGIpfSl9ZnVuY3Rpb24geChhLGIsZCl7Yi5jb25zdHJ1Y3Rvcj09PWEuY29uc3RydWN0b3ImJmQ9PT1vJiZiLmNvbnN0cnVjdG9yLnJlc29sdmU9PT1wP3coYSxiKTpkPT09aWE/KEIoYSxpYS5lcnJvciksaWEuZXJyb3I9bnVsbCk6dm9pZCAwPT09ZD9BKGEsYik6YyhkKT92KGEsYixkKTpBKGEsYil9ZnVuY3Rpb24geShiLGMpe2I9PT1jP0IoYixyKCkpOmEoYyk/eChiLGMsdChjKSk6QShiLGMpfWZ1bmN0aW9uIHooYSl7YS5fb25lcnJvciYmYS5fb25lcnJvcihhLl9yZXN1bHQpLEQoYSl9ZnVuY3Rpb24gQShhLGIpe2EuX3N0YXRlPT09ZmEmJihhLl9yZXN1bHQ9YixhLl9zdGF0ZT1nYSwwIT09YS5fc3Vic2NyaWJlcnMubGVuZ3RoJiZZKEQsYSkpfWZ1bmN0aW9uIEIoYSxiKXthLl9zdGF0ZT09PWZhJiYoYS5fc3RhdGU9aGEsYS5fcmVzdWx0PWIsWSh6LGEpKX1mdW5jdGlvbiBDKGEsYixjLGQpe3ZhciBlPWEuX3N1YnNjcmliZXJzLGY9ZS5sZW5ndGg7YS5fb25lcnJvcj1udWxsLGVbZl09YixlW2YrZ2FdPWMsZVtmK2hhXT1kLDA9PT1mJiZhLl9zdGF0ZSYmWShELGEpfWZ1bmN0aW9uIEQoYSl7dmFyIGI9YS5fc3Vic2NyaWJlcnMsYz1hLl9zdGF0ZTtpZigwIT09Yi5sZW5ndGgpe2Zvcih2YXIgZD12b2lkIDAsZT12b2lkIDAsZj1hLl9yZXN1bHQsZz0wO2c8Yi5sZW5ndGg7Zys9MylkPWJbZ10sZT1iW2crY10sZD9HKGMsZCxlLGYpOmUoZik7YS5fc3Vic2NyaWJlcnMubGVuZ3RoPTB9fWZ1bmN0aW9uIEUoKXt0aGlzLmVycm9yPW51bGx9ZnVuY3Rpb24gRihhLGIpe3RyeXtyZXR1cm4gYShiKX1jYXRjaChhKXtyZXR1cm4gamEuZXJyb3I9YSxqYX19ZnVuY3Rpb24gRyhhLGIsZCxlKXt2YXIgZj1jKGQpLGc9dm9pZCAwLGg9dm9pZCAwLGk9dm9pZCAwLGo9dm9pZCAwO2lmKGYpe2lmKGc9RihkLGUpLGc9PT1qYT8oaj0hMCxoPWcuZXJyb3IsZy5lcnJvcj1udWxsKTppPSEwLGI9PT1nKXJldHVybiB2b2lkIEIoYixzKCkpfWVsc2UgZz1lLGk9ITA7Yi5fc3RhdGUhPT1mYXx8KGYmJmk/eShiLGcpOmo/QihiLGgpOmE9PT1nYT9BKGIsZyk6YT09PWhhJiZCKGIsZykpfWZ1bmN0aW9uIEgoYSxiKXt0cnl7YihmdW5jdGlvbihiKXt5KGEsYil9LGZ1bmN0aW9uKGIpe0IoYSxiKX0pfWNhdGNoKGIpe0IoYSxiKX19ZnVuY3Rpb24gSSgpe3JldHVybiBrYSsrfWZ1bmN0aW9uIEooYSl7YVtlYV09a2ErKyxhLl9zdGF0ZT12b2lkIDAsYS5fcmVzdWx0PXZvaWQgMCxhLl9zdWJzY3JpYmVycz1bXX1mdW5jdGlvbiBLKGEsYil7dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3Rvcj1hLHRoaXMucHJvbWlzZT1uZXcgYShxKSx0aGlzLnByb21pc2VbZWFdfHxKKHRoaXMucHJvbWlzZSksVShiKT8odGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5fcmVtYWluaW5nPWIubGVuZ3RoLHRoaXMuX3Jlc3VsdD1uZXcgQXJyYXkodGhpcy5sZW5ndGgpLDA9PT10aGlzLmxlbmd0aD9BKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpOih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aHx8MCx0aGlzLl9lbnVtZXJhdGUoYiksMD09PXRoaXMuX3JlbWFpbmluZyYmQSh0aGlzLnByb21pc2UsdGhpcy5fcmVzdWx0KSkpOkIodGhpcy5wcm9taXNlLEwoKSl9ZnVuY3Rpb24gTCgpe3JldHVybiBuZXcgRXJyb3IoXCJBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXlcIil9ZnVuY3Rpb24gTShhKXtyZXR1cm4gbmV3IEsodGhpcyxhKS5wcm9taXNlfWZ1bmN0aW9uIE4oYSl7dmFyIGI9dGhpcztyZXR1cm4gbmV3IGIoVShhKT9mdW5jdGlvbihjLGQpe2Zvcih2YXIgZT1hLmxlbmd0aCxmPTA7ZjxlO2YrKyliLnJlc29sdmUoYVtmXSkudGhlbihjLGQpfTpmdW5jdGlvbihhLGIpe3JldHVybiBiKG5ldyBUeXBlRXJyb3IoXCJZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuXCIpKX0pfWZ1bmN0aW9uIE8oYSl7dmFyIGI9dGhpcyxjPW5ldyBiKHEpO3JldHVybiBCKGMsYSksY31mdW5jdGlvbiBQKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIllvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHByb21pc2UgY29uc3RydWN0b3JcIil9ZnVuY3Rpb24gUSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIil9ZnVuY3Rpb24gUihhKXt0aGlzW2VhXT1JKCksdGhpcy5fcmVzdWx0PXRoaXMuX3N0YXRlPXZvaWQgMCx0aGlzLl9zdWJzY3JpYmVycz1bXSxxIT09YSYmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEmJlAoKSx0aGlzIGluc3RhbmNlb2YgUj9IKHRoaXMsYSk6USgpKX1mdW5jdGlvbiBTKCl7dmFyIGE9dm9pZCAwO2lmKHZvaWQgMCE9PWYpYT1mO2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYpYT1zZWxmO2Vsc2UgdHJ5e2E9RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGEpe3Rocm93IG5ldyBFcnJvcihcInBvbHlmaWxsIGZhaWxlZCBiZWNhdXNlIGdsb2JhbCBvYmplY3QgaXMgdW5hdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudFwiKX12YXIgYj1hLlByb21pc2U7aWYoYil7dmFyIGM9bnVsbDt0cnl7Yz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYi5yZXNvbHZlKCkpfWNhdGNoKGEpe31pZihcIltvYmplY3QgUHJvbWlzZV1cIj09PWMmJiFiLmNhc3QpcmV0dXJufWEuUHJvbWlzZT1SfXZhciBUPXZvaWQgMDtUPUFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheTpmdW5jdGlvbihhKXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSl9O3ZhciBVPVQsVj0wLFc9dm9pZCAwLFg9dm9pZCAwLFk9ZnVuY3Rpb24oYSxiKXtjYVtWXT1hLGNhW1YrMV09YiwyPT09KFYrPTIpJiYoWD9YKG0pOmRhKCkpfSxaPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCwkPVp8fHt9LF89JC5NdXRhdGlvbk9ic2VydmVyfHwkLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsYWE9XCJ1bmRlZmluZWRcIj09dHlwZW9mIHNlbGYmJnZvaWQgMCE9PWUmJlwiW29iamVjdCBwcm9jZXNzXVwiPT09e30udG9TdHJpbmcuY2FsbChlKSxiYT1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBpbXBvcnRTY3JpcHRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWwsY2E9bmV3IEFycmF5KDFlMyksZGE9dm9pZCAwO2RhPWFhP2goKTpfP2ooKTpiYT9rKCk6dm9pZCAwPT09WiYmXCJmdW5jdGlvblwiPT10eXBlb2YgYj9uKCk6bCgpO3ZhciBlYT1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpLGZhPXZvaWQgMCxnYT0xLGhhPTIsaWE9bmV3IEUsamE9bmV3IEUsa2E9MDtyZXR1cm4gSy5wcm90b3R5cGUuX2VudW1lcmF0ZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9MDt0aGlzLl9zdGF0ZT09PWZhJiZiPGEubGVuZ3RoO2IrKyl0aGlzLl9lYWNoRW50cnkoYVtiXSxiKX0sSy5wcm90b3R5cGUuX2VhY2hFbnRyeT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3IsZD1jLnJlc29sdmU7aWYoZD09PXApe3ZhciBlPXQoYSk7aWYoZT09PW8mJmEuX3N0YXRlIT09ZmEpdGhpcy5fc2V0dGxlZEF0KGEuX3N0YXRlLGIsYS5fcmVzdWx0KTtlbHNlIGlmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhpcy5fcmVtYWluaW5nLS0sdGhpcy5fcmVzdWx0W2JdPWE7ZWxzZSBpZihjPT09Uil7dmFyIGY9bmV3IGMocSk7eChmLGEsZSksdGhpcy5fd2lsbFNldHRsZUF0KGYsYil9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQobmV3IGMoZnVuY3Rpb24oYil7cmV0dXJuIGIoYSl9KSxiKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChkKGEpLGIpfSxLLnByb3RvdHlwZS5fc2V0dGxlZEF0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLnByb21pc2U7ZC5fc3RhdGU9PT1mYSYmKHRoaXMuX3JlbWFpbmluZy0tLGE9PT1oYT9CKGQsYyk6dGhpcy5fcmVzdWx0W2JdPWMpLDA9PT10aGlzLl9yZW1haW5pbmcmJkEoZCx0aGlzLl9yZXN1bHQpfSxLLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztDKGEsdm9pZCAwLGZ1bmN0aW9uKGEpe3JldHVybiBjLl9zZXR0bGVkQXQoZ2EsYixhKX0sZnVuY3Rpb24oYSl7cmV0dXJuIGMuX3NldHRsZWRBdChoYSxiLGEpfSl9LFIuYWxsPU0sUi5yYWNlPU4sUi5yZXNvbHZlPXAsUi5yZWplY3Q9TyxSLl9zZXRTY2hlZHVsZXI9ZCxSLl9zZXRBc2FwPWcsUi5fYXNhcD1ZLFIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpSLHRoZW46byxjYXRjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsYSl9fSxSLnBvbHlmaWxsPVMsUi5Qcm9taXNlPVIsUn0pfSkuY2FsbCh0aGlzLGIoXCJfcHJvY2Vzc1wiKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se19wcm9jZXNzOjExfV0sNTpbZnVuY3Rpb24oYixjLGQpeyFmdW5jdGlvbihiLGUpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJmEuYW1kKWEoW1wiZXhwb3J0c1wiLFwibW9kdWxlXCJdLGUpO2Vsc2UgaWYodm9pZCAwIT09ZCYmdm9pZCAwIT09YyllKGQsYyk7ZWxzZXt2YXIgZj17ZXhwb3J0czp7fX07ZShmLmV4cG9ydHMsZiksYi5mZXRjaEpzb25wPWYuZXhwb3J0c319KHRoaXMsZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBjKCl7cmV0dXJuXCJqc29ucF9cIitEYXRlLm5vdygpK1wiX1wiK01hdGguY2VpbCgxZTUqTWF0aC5yYW5kb20oKSl9ZnVuY3Rpb24gZChhKXt0cnl7ZGVsZXRlIHdpbmRvd1thXX1jYXRjaChiKXt3aW5kb3dbYV09dm9pZCAwfX1mdW5jdGlvbiBlKGEpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpO2ImJmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBmKGEpe3ZhciBiPWFyZ3VtZW50cy5sZW5ndGg8PTF8fHZvaWQgMD09PWFyZ3VtZW50c1sxXT97fTphcmd1bWVudHNbMV0sZj1hLGg9Yi50aW1lb3V0fHxnLnRpbWVvdXQsaT1iLmpzb25wQ2FsbGJhY2t8fGcuanNvbnBDYWxsYmFjayxqPXZvaWQgMDtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZyxrKXt2YXIgbD1iLmpzb25wQ2FsbGJhY2tGdW5jdGlvbnx8YygpLG09aStcIl9cIitsO3dpbmRvd1tsXT1mdW5jdGlvbihhKXtnKHtvazohMCxqc29uOmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShhKX19KSxqJiZjbGVhclRpbWVvdXQoaiksZShtKSxkKGwpfSxmKz0tMT09PWYuaW5kZXhPZihcIj9cIik/XCI/XCI6XCImXCI7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtuLnNldEF0dHJpYnV0ZShcInNyY1wiLFwiXCIrZitpK1wiPVwiK2wpLGIuY2hhcnNldCYmbi5zZXRBdHRyaWJ1dGUoXCJjaGFyc2V0XCIsYi5jaGFyc2V0KSxuLmlkPW0sZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKG4pLGo9c2V0VGltZW91dChmdW5jdGlvbigpe2sobmV3IEVycm9yKFwiSlNPTlAgcmVxdWVzdCB0byBcIithK1wiIHRpbWVkIG91dFwiKSksZChsKSxlKG0pLHdpbmRvd1tsXT1mdW5jdGlvbigpe2QobCl9fSxoKSxuLm9uZXJyb3I9ZnVuY3Rpb24oKXtrKG5ldyBFcnJvcihcIkpTT05QIHJlcXVlc3QgdG8gXCIrYStcIiBmYWlsZWRcIikpLGQobCksZShtKSxqJiZjbGVhclRpbWVvdXQoail9fSl9dmFyIGc9e3RpbWVvdXQ6NWUzLGpzb25wQ2FsbGJhY2s6XCJjYWxsYmFja1wiLGpzb25wQ2FsbGJhY2tGdW5jdGlvbjpudWxsfTtiLmV4cG9ydHM9Zn0pfSx7fV0sNjpbZnVuY3Rpb24oYixjLGQpe3ZhciBlPWV8fGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2lmKCEodm9pZCAwPT09YXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL01TSUUgWzEtOV1cXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpKXt2YXIgYj1hLmRvY3VtZW50LGM9ZnVuY3Rpb24oKXtyZXR1cm4gYS5VUkx8fGEud2Via2l0VVJMfHxhfSxkPWIuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFwiYVwiKSxlPVwiZG93bmxvYWRcImluIGQsZj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgTW91c2VFdmVudChcImNsaWNrXCIpO2EuZGlzcGF0Y2hFdmVudChiKX0sZz0vY29uc3RydWN0b3IvaS50ZXN0KGEuSFRNTEVsZW1lbnQpfHxhLnNhZmFyaSxoPS9DcmlPU1xcL1tcXGRdKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxpPWZ1bmN0aW9uKGIpeyhhLnNldEltbWVkaWF0ZXx8YS5zZXRUaW1lb3V0KShmdW5jdGlvbigpe3Rocm93IGJ9LDApfSxqPVwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsaz00ZTQsbD1mdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbigpe1wic3RyaW5nXCI9PXR5cGVvZiBhP2MoKS5yZXZva2VPYmplY3RVUkwoYSk6YS5yZW1vdmUoKX07c2V0VGltZW91dChiLGspfSxtPWZ1bmN0aW9uKGEsYixjKXtiPVtdLmNvbmNhdChiKTtmb3IodmFyIGQ9Yi5sZW5ndGg7ZC0tOyl7dmFyIGU9YVtcIm9uXCIrYltkXV07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSl0cnl7ZS5jYWxsKGEsY3x8YSl9Y2F0Y2goYSl7aShhKX19fSxuPWZ1bmN0aW9uKGEpe3JldHVybi9eXFxzKig/OnRleHRcXC9cXFMqfGFwcGxpY2F0aW9uXFwveG1sfFxcUypcXC9cXFMqXFwreG1sKVxccyo7LipjaGFyc2V0XFxzKj1cXHMqdXRmLTgvaS50ZXN0KGEudHlwZSk/bmV3IEJsb2IoW1N0cmluZy5mcm9tQ2hhckNvZGUoNjUyNzkpLGFdLHt0eXBlOmEudHlwZX0pOmF9LG89ZnVuY3Rpb24oYixpLGspe2t8fChiPW4oYikpO3ZhciBvLHA9dGhpcyxxPWIudHlwZSxyPXE9PT1qLHM9ZnVuY3Rpb24oKXttKHAsXCJ3cml0ZXN0YXJ0IHByb2dyZXNzIHdyaXRlIHdyaXRlZW5kXCIuc3BsaXQoXCIgXCIpKX0sdD1mdW5jdGlvbigpe2lmKChofHxyJiZnKSYmYS5GaWxlUmVhZGVyKXt2YXIgZD1uZXcgRmlsZVJlYWRlcjtyZXR1cm4gZC5vbmxvYWRlbmQ9ZnVuY3Rpb24oKXt2YXIgYj1oP2QucmVzdWx0OmQucmVzdWx0LnJlcGxhY2UoL15kYXRhOlteO10qOy8sXCJkYXRhOmF0dGFjaG1lbnQvZmlsZTtcIik7YS5vcGVuKGIsXCJfYmxhbmtcIil8fChhLmxvY2F0aW9uLmhyZWY9YiksYj12b2lkIDAscC5yZWFkeVN0YXRlPXAuRE9ORSxzKCl9LGQucmVhZEFzRGF0YVVSTChiKSx2b2lkKHAucmVhZHlTdGF0ZT1wLklOSVQpfWlmKG98fChvPWMoKS5jcmVhdGVPYmplY3RVUkwoYikpLHIpYS5sb2NhdGlvbi5ocmVmPW87ZWxzZXthLm9wZW4obyxcIl9ibGFua1wiKXx8KGEubG9jYXRpb24uaHJlZj1vKX1wLnJlYWR5U3RhdGU9cC5ET05FLHMoKSxsKG8pfTtpZihwLnJlYWR5U3RhdGU9cC5JTklULGUpcmV0dXJuIG89YygpLmNyZWF0ZU9iamVjdFVSTChiKSx2b2lkIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmhyZWY9byxkLmRvd25sb2FkPWksZihkKSxzKCksbChvKSxwLnJlYWR5U3RhdGU9cC5ET05FfSk7dCgpfSxwPW8ucHJvdG90eXBlLHE9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuZXcgbyhhLGJ8fGEubmFtZXx8XCJkb3dubG9hZFwiLGMpfTtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYj9mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9Ynx8YS5uYW1lfHxcImRvd25sb2FkXCIsY3x8KGE9bihhKSksbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoYSxiKX06KHAuYWJvcnQ9ZnVuY3Rpb24oKXt9LHAucmVhZHlTdGF0ZT1wLklOSVQ9MCxwLldSSVRJTkc9MSxwLkRPTkU9MixwLmVycm9yPXAub253cml0ZXN0YXJ0PXAub25wcm9ncmVzcz1wLm9ud3JpdGU9cC5vbmFib3J0PXAub25lcnJvcj1wLm9ud3JpdGVlbmQ9bnVsbCxxKX19KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmfHxcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3d8fHRoaXMuY29udGVudCk7dm9pZCAwIT09YyYmYy5leHBvcnRzP2MuZXhwb3J0cy5zYXZlQXM9ZTp2b2lkIDAhPT1hJiZudWxsIT09YSYmbnVsbCE9PWEuYW1kJiZhKFwiRmlsZVNhdmVyLmpzXCIsZnVuY3Rpb24oKXtyZXR1cm4gZX0pfSx7fV0sNzpbZnVuY3Rpb24oYSxiLGMpe2MucmVhZD1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaD04KmUtZC0xLGk9KDE8PGgpLTEsaj1pPj4xLGs9LTcsbD1jP2UtMTowLG09Yz8tMToxLG49YVtiK2xdO2ZvcihsKz1tLGY9biYoMTw8LWspLTEsbj4+PS1rLGsrPWg7az4wO2Y9MjU2KmYrYVtiK2xdLGwrPW0say09OCk7Zm9yKGc9ZiYoMTw8LWspLTEsZj4+PS1rLGsrPWQ7az4wO2c9MjU2KmcrYVtiK2xdLGwrPW0say09OCk7aWYoMD09PWYpZj0xLWo7ZWxzZXtpZihmPT09aSlyZXR1cm4gZz9OYU46MS8wKihuPy0xOjEpO2crPU1hdGgucG93KDIsZCksZi09an1yZXR1cm4obj8tMToxKSpnKk1hdGgucG93KDIsZi1kKX0sYy53cml0ZT1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGcsaCxpLGo9OCpmLWUtMSxrPSgxPDxqKS0xLGw9az4+MSxtPTIzPT09ZT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsbj1kPzA6Zi0xLG89ZD8xOi0xLHA9YjwwfHwwPT09YiYmMS9iPDA/MTowO2ZvcihiPU1hdGguYWJzKGIpLGlzTmFOKGIpfHxiPT09MS8wPyhoPWlzTmFOKGIpPzE6MCxnPWspOihnPU1hdGguZmxvb3IoTWF0aC5sb2coYikvTWF0aC5MTjIpLGIqKGk9TWF0aC5wb3coMiwtZykpPDEmJihnLS0saSo9MiksYis9ZytsPj0xP20vaTptKk1hdGgucG93KDIsMS1sKSxiKmk+PTImJihnKyssaS89MiksZytsPj1rPyhoPTAsZz1rKTpnK2w+PTE/KGg9KGIqaS0xKSpNYXRoLnBvdygyLGUpLGcrPWwpOihoPWIqTWF0aC5wb3coMixsLTEpKk1hdGgucG93KDIsZSksZz0wKSk7ZT49ODthW2Mrbl09MjU1Jmgsbis9byxoLz0yNTYsZS09OCk7Zm9yKGc9Zzw8ZXxoLGorPWU7aj4wO2FbYytuXT0yNTUmZyxuKz1vLGcvPTI1NixqLT04KTthW2Mrbi1vXXw9MTI4KnB9fSx7fV0sODpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9LnRvU3RyaW5nO2IuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PWQuY2FsbChhKX19LHt9XSw5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhLmI9PT1iLmImJmEuYT09PWIuYX1mdW5jdGlvbiBlKGEsYil7cmV0dXJuIGEuYjxiLmJ8fGEuYj09PWIuYiYmYS5hPD1iLmF9ZnVuY3Rpb24gZihhLGIsYyl7dmFyIGQ9Yi5iLWEuYixlPWMuYi1iLmJcbjtyZXR1cm4gMDxkK2U/ZDxlP2IuYS1hLmErZC8oZCtlKSooYS5hLWMuYSk6Yi5hLWMuYStlLyhkK2UpKihjLmEtYS5hKTowfWZ1bmN0aW9uIGcoYSxiLGMpe3ZhciBkPWIuYi1hLmIsZT1jLmItYi5iO3JldHVybiAwPGQrZT8oYi5hLWMuYSkqZCsoYi5hLWEuYSkqZTowfWZ1bmN0aW9uIGgoYSxiKXtyZXR1cm4gYS5hPGIuYXx8YS5hPT09Yi5hJiZhLmI8PWIuYn1mdW5jdGlvbiBpKGEsYixjKXt2YXIgZD1iLmEtYS5hLGU9Yy5hLWIuYTtyZXR1cm4gMDxkK2U/ZDxlP2IuYi1hLmIrZC8oZCtlKSooYS5iLWMuYik6Yi5iLWMuYitlLyhkK2UpKihjLmItYS5iKTowfWZ1bmN0aW9uIGooYSxiLGMpe3ZhciBkPWIuYS1hLmEsZT1jLmEtYi5hO3JldHVybiAwPGQrZT8oYi5iLWMuYikqZCsoYi5iLWEuYikqZTowfWZ1bmN0aW9uIGsoYSl7cmV0dXJuIGUoYS5iLmEsYS5hKX1mdW5jdGlvbiBsKGEpe3JldHVybiBlKGEuYSxhLmIuYSl9ZnVuY3Rpb24gbShhLGIsYyxkKXtyZXR1cm4gYT0wPmE/MDphLGM9MD5jPzA6YyxhPD1jPzA9PT1jPyhiK2QpLzI6YithLyhhK2MpKihkLWIpOmQrYy8oYStjKSooYi1kKX1mdW5jdGlvbiBuKGEpe3ZhciBiPXMoYS5iKTtyZXR1cm4gdShiLGEuYyksdShiLmIsYS5jKSx2KGIsYS5hKSxifWZ1bmN0aW9uIG8oYSxiKXt2YXIgYz0hMSxkPSExO2EhPT1iJiYoYi5hIT09YS5hJiYoZD0hMCx4KGIuYSxhLmEpKSxiLmQhPT1hLmQmJihjPSEwLHkoYi5kLGEuZCkpLHQoYixhKSxkfHwodShiLGEuYSksYS5hLmM9YSksY3x8KHYoYixhLmQpLGEuZC5hPWEpKX1mdW5jdGlvbiBwKGEpe3ZhciBiPWEuYixjPSExO2EuZCE9PWEuYi5kJiYoYz0hMCx5KGEuZCxhLmIuZCkpLGEuYz09PWE/eChhLmEsbnVsbCk6KGEuYi5kLmE9JChhKSxhLmEuYz1hLmMsdChhLCQoYSkpLGN8fHYoYSxhLmQpKSxiLmM9PT1iPyh4KGIuYSxudWxsKSx5KGIuZCxudWxsKSk6KGEuZC5hPSQoYiksYi5hLmM9Yi5jLHQoYiwkKGIpKSksdyhhKX1mdW5jdGlvbiBxKGEpe3ZhciBiPXMoYSksYz1iLmI7cmV0dXJuIHQoYixhLmUpLGIuYT1hLmIuYSx1KGMsYi5hKSxiLmQ9Yy5kPWEuZCxiPWIuYix0KGEuYiwkKGEuYikpLHQoYS5iLGIpLGEuYi5hPWIuYSxiLmIuYS5jPWIuYixiLmIuZD1hLmIuZCxiLmY9YS5mLGIuYi5mPWEuYi5mLGJ9ZnVuY3Rpb24gcihhLGIpe3ZhciBjPSExLGQ9cyhhKSxlPWQuYjtyZXR1cm4gYi5kIT09YS5kJiYoYz0hMCx5KGIuZCxhLmQpKSx0KGQsYS5lKSx0KGUsYiksZC5hPWEuYi5hLGUuYT1iLmEsZC5kPWUuZD1hLmQsYS5kLmE9ZSxjfHx2KGQsYS5kKSxkfWZ1bmN0aW9uIHMoYSl7dmFyIGI9bmV3IFosYz1uZXcgWixkPWEuYi5oO3JldHVybiBjLmg9ZCxkLmIuaD1iLGIuaD1hLGEuYi5oPWMsYi5iPWMsYi5jPWIsYi5lPWMsYy5iPWIsYy5jPWMsYy5lPWJ9ZnVuY3Rpb24gdChhLGIpe3ZhciBjPWEuYyxkPWIuYztjLmIuZT1iLGQuYi5lPWEsYS5jPWQsYi5jPWN9ZnVuY3Rpb24gdShhLGIpe3ZhciBjPWIuZixkPW5ldyBhYShiLGMpO2MuZT1kLGIuZj1kLGM9ZC5jPWE7ZG97Yy5hPWQsYz1jLmN9d2hpbGUoYyE9PWEpfWZ1bmN0aW9uIHYoYSxiKXt2YXIgYz1iLmQsZD1uZXcgWShiLGMpO2MuYj1kLGIuZD1kLGQuYT1hLGQuYz1iLmMsYz1hO2Rve2MuZD1kLGM9Yy5lfXdoaWxlKGMhPT1hKX1mdW5jdGlvbiB3KGEpe3ZhciBiPWEuaDthPWEuYi5oLGIuYi5oPWEsYS5iLmg9Yn1mdW5jdGlvbiB4KGEsYil7dmFyIGM9YS5jLGQ9Yztkb3tkLmE9YixkPWQuY313aGlsZShkIT09Yyk7Yz1hLmYsZD1hLmUsZC5mPWMsYy5lPWR9ZnVuY3Rpb24geShhLGIpe3ZhciBjPWEuYSxkPWM7ZG97ZC5kPWIsZD1kLmV9d2hpbGUoZCE9PWMpO2M9YS5kLGQ9YS5iLGQuZD1jLGMuYj1kfWZ1bmN0aW9uIHooYSl7dmFyIGI9MDtyZXR1cm4gTWF0aC5hYnMoYVsxXSk+TWF0aC5hYnMoYVswXSkmJihiPTEpLE1hdGguYWJzKGFbMl0pPk1hdGguYWJzKGFbYl0pJiYoYj0yKSxifWZ1bmN0aW9uIEEoYSxiKXthLmYrPWIuZixhLmIuZis9Yi5iLmZ9ZnVuY3Rpb24gQihhLGIsYyl7cmV0dXJuIGE9YS5hLGI9Yi5hLGM9Yy5hLGIuYi5hPT09YT9jLmIuYT09PWE/ZShiLmEsYy5hKT8wPj1nKGMuYi5hLGIuYSxjLmEpOjA8PWcoYi5iLmEsYy5hLGIuYSk6MD49ZyhjLmIuYSxhLGMuYSk6Yy5iLmE9PT1hPzA8PWcoYi5iLmEsYSxiLmEpOihiPWYoYi5iLmEsYSxiLmEpLGE9ZihjLmIuYSxhLGMuYSksYj49YSl9ZnVuY3Rpb24gQyhhKXthLmEuaT1udWxsO3ZhciBiPWEuZTtiLmEuYz1iLmMsYi5jLmE9Yi5hLGEuZT1udWxsfWZ1bmN0aW9uIEQoYSxiKXtwKGEuYSksYS5jPSExLGEuYT1iLGIuaT1hfWZ1bmN0aW9uIEUoYSl7dmFyIGI9YS5hLmE7ZG97YT1vYShhKX13aGlsZShhLmEuYT09PWIpO3JldHVybiBhLmMmJihiPXIobmEoYSkuYS5iLGEuYS5lKSxEKGEsYiksYT1vYShhKSksYX1mdW5jdGlvbiBGKGEsYixjKXt2YXIgZD1uZXcgbWE7cmV0dXJuIGQuYT1jLGQuZT1UKGEuZixiLmUsZCksYy5pPWR9ZnVuY3Rpb24gRyhhLGIpe3N3aXRjaChhLnMpe2Nhc2UgMTAwMTMwOnJldHVybiAwIT0oMSZiKTtjYXNlIDEwMDEzMTpyZXR1cm4gMCE9PWI7Y2FzZSAxMDAxMzI6cmV0dXJuIDA8YjtjYXNlIDEwMDEzMzpyZXR1cm4gMD5iO2Nhc2UgMTAwMTM0OnJldHVybiAyPD1ifHwtMj49Yn1yZXR1cm4hMX1mdW5jdGlvbiBIKGEpe3ZhciBiPWEuYSxjPWIuZDtjLmM9YS5kLGMuYT1iLEMoYSl9ZnVuY3Rpb24gSShhLGIsYyl7Zm9yKGE9YixiPWIuYTthIT09Yzspe2EuYz0hMTt2YXIgZD1uYShhKSxlPWQuYTtpZihlLmEhPT1iLmEpe2lmKCFkLmMpe0goYSk7YnJlYWt9ZT1yKGIuYy5iLGUuYiksRChkLGUpfWIuYyE9PWUmJihvKCQoZSksZSksbyhiLGUpKSxIKGEpLGI9ZC5hLGE9ZH1yZXR1cm4gYn1mdW5jdGlvbiBKKGEsYixjLGQsZSxmKXt2YXIgZz0hMDtkb3tGKGEsYixjLmIpLGM9Yy5jfXdoaWxlKGMhPT1kKTtmb3IobnVsbD09PWUmJihlPW5hKGIpLmEuYi5jKTtkPW5hKGIpLGM9ZC5hLmIsYy5hPT09ZS5hOyljLmMhPT1lJiYobygkKGMpLGMpLG8oJChlKSxjKSksZC5mPWIuZi1jLmYsZC5kPUcoYSxkLmYpLGIuYj0hMCwhZyYmTihhLGIpJiYoQShjLGUpLEMoYikscChlKSksZz0hMSxiPWQsZT1jO2IuYj0hMCxmJiZQKGEsYil9ZnVuY3Rpb24gSyhhLGIsYyxkLGUpe3ZhciBmPVtiLmdbMF0sYi5nWzFdLGIuZ1syXV07Yi5kPW51bGwsYi5kPWEubz9hLm8oZixjLGQsYS5jKXx8bnVsbDpudWxsLG51bGw9PT1iLmQmJihlP2Eubnx8KFgoYSwxMDAxNTYpLGEubj0hMCk6Yi5kPWNbMF0pfWZ1bmN0aW9uIEwoYSxiLGMpe3ZhciBkPVtudWxsLG51bGwsbnVsbCxudWxsXTtkWzBdPWIuYS5kLGRbMV09Yy5hLmQsSyhhLGIuYSxkLFsuNSwuNSwwLDBdLCExKSxvKGIsYyl9ZnVuY3Rpb24gTShhLGIsYyxkLGUpe3ZhciBmPU1hdGguYWJzKGIuYi1hLmIpK01hdGguYWJzKGIuYS1hLmEpLGc9TWF0aC5hYnMoYy5iLWEuYikrTWF0aC5hYnMoYy5hLWEuYSksaD1lKzE7ZFtlXT0uNSpnLyhmK2cpLGRbaF09LjUqZi8oZitnKSxhLmdbMF0rPWRbZV0qYi5nWzBdK2RbaF0qYy5nWzBdLGEuZ1sxXSs9ZFtlXSpiLmdbMV0rZFtoXSpjLmdbMV0sYS5nWzJdKz1kW2VdKmIuZ1syXStkW2hdKmMuZ1syXX1mdW5jdGlvbiBOKGEsYil7dmFyIGM9bmEoYiksZj1iLmEsaD1jLmE7aWYoZShmLmEsaC5hKSl7aWYoMDxnKGguYi5hLGYuYSxoLmEpKXJldHVybiExO2lmKGQoZi5hLGguYSkpe2lmKGYuYSE9PWguYSl7dmFyIGM9YS5lLGk9Zi5hLmg7aWYoMDw9aSl7dmFyIGM9Yy5iLGo9Yy5kLGs9Yy5lLGw9Yy5jLG09bFtpXTtqW21dPWpbYy5hXSxsW2pbbV1dPW0sbTw9LS1jLmEmJigxPj1tP2thKGMsbSk6ZShrW2pbbT4+MV1dLGtbalttXV0pP2thKGMsbSk6bGEoYyxtKSksa1tpXT1udWxsLGxbaV09Yy5iLGMuYj1pfWVsc2UgZm9yKGMuY1stKGkrMSldPW51bGw7MDxjLmEmJm51bGw9PT1jLmNbYy5kW2MuYS0xXV07KS0tYy5hO0woYSwkKGgpLGYpfX1lbHNlIHEoaC5iKSxvKGYsJChoKSksYi5iPWMuYj0hMH1lbHNle2lmKDA+ZyhmLmIuYSxoLmEsZi5hKSlyZXR1cm4hMTtvYShiKS5iPWIuYj0hMCxxKGYuYiksbygkKGgpLGYpfXJldHVybiEwfWZ1bmN0aW9uIE8oYSxiKXt2YXIgYz1uYShiKSxrPWIuYSxsPWMuYSxuPWsuYSxwPWwuYSxyPWsuYi5hLHM9bC5iLmEsdD1uZXcgYWE7aWYoZyhyLGEuYSxuKSxnKHMsYS5hLHApLG49PT1wfHxNYXRoLm1pbihuLmEsci5hKT5NYXRoLm1heChwLmEscy5hKSlyZXR1cm4hMTtpZihlKG4scCkpe2lmKDA8ZyhzLG4scCkpcmV0dXJuITF9ZWxzZSBpZigwPmcocixwLG4pKXJldHVybiExO3ZhciB1LHYsdz1yLHg9bix5PXMsej1wO2lmKGUodyx4KXx8KHU9dyx3PXgseD11KSxlKHkseil8fCh1PXkseT16LHo9dSksZSh3LHkpfHwodT13LHc9eSx5PXUsdT14LHg9eix6PXUpLGUoeSx4KT9lKHgseik/KHU9Zih3LHkseCksdj1mKHkseCx6KSwwPnUrdiYmKHU9LXUsdj0tdiksdC5iPW0odSx5LmIsdix4LmIpKToodT1nKHcseSx4KSx2PS1nKHcseix4KSwwPnUrdiYmKHU9LXUsdj0tdiksdC5iPW0odSx5LmIsdix6LmIpKTp0LmI9KHkuYit4LmIpLzIsaCh3LHgpfHwodT13LHc9eCx4PXUpLGgoeSx6KXx8KHU9eSx5PXosej11KSxoKHcseSl8fCh1PXcsdz15LHk9dSx1PXgseD16LHo9dSksaCh5LHgpP2goeCx6KT8odT1pKHcseSx4KSx2PWkoeSx4LHopLDA+dSt2JiYodT0tdSx2PS12KSx0LmE9bSh1LHkuYSx2LHguYSkpOih1PWoodyx5LHgpLHY9LWoodyx6LHgpLDA+dSt2JiYodT0tdSx2PS12KSx0LmE9bSh1LHkuYSx2LHouYSkpOnQuYT0oeS5hK3guYSkvMixlKHQsYS5hKSYmKHQuYj1hLmEuYix0LmE9YS5hLmEpLHc9ZShuLHApP246cCxlKHcsdCkmJih0LmI9dy5iLHQuYT13LmEpLGQodCxuKXx8ZCh0LHApKXJldHVybiBOKGEsYiksITE7aWYoIWQocixhLmEpJiYwPD1nKHIsYS5hLHQpfHwhZChzLGEuYSkmJjA+PWcocyxhLmEsdCkpe2lmKHM9PT1hLmEpcmV0dXJuIHEoay5iKSxvKGwuYixrKSxiPUUoYiksaz1uYShiKS5hLEkoYSxuYShiKSxjKSxKKGEsYiwkKGspLGssaywhMCksITA7aWYocj09PWEuYSl7cShsLmIpLG8oay5lLCQobCkpLG49Yz1iLHA9bi5hLmIuYTtkb3tuPW9hKG4pfXdoaWxlKG4uYS5iLmE9PT1wKTtyZXR1cm4gYj1uLG49bmEoYikuYS5iLmMsYy5hPSQobCksbD1JKGEsYyxudWxsKSxKKGEsYixsLmMsay5iLmMsbiwhMCksITB9cmV0dXJuIDA8PWcocixhLmEsdCkmJihvYShiKS5iPWIuYj0hMCxxKGsuYiksay5hLmI9YS5hLmIsay5hLmE9YS5hLmEpLDA+PWcocyxhLmEsdCkmJihiLmI9Yy5iPSEwLHEobC5iKSxsLmEuYj1hLmEuYixsLmEuYT1hLmEuYSksITF9cmV0dXJuIHEoay5iKSxxKGwuYiksbygkKGwpLGspLGsuYS5iPXQuYixrLmEuYT10LmEsay5hLmg9ZGEoYS5lLGsuYSksaz1rLmEsbD1bMCwwLDAsMF0sdD1bbi5kLHIuZCxwLmQscy5kXSxrLmdbMF09ay5nWzFdPWsuZ1syXT0wLE0oayxuLHIsbCwwKSxNKGsscCxzLGwsMiksSyhhLGssdCxsLCEwKSxvYShiKS5iPWIuYj1jLmI9ITAsITF9ZnVuY3Rpb24gUChhLGIpe2Zvcih2YXIgYz1uYShiKTs7KXtmb3IoO2MuYjspYj1jLGM9bmEoYyk7aWYoIWIuYiYmKGM9YixudWxsPT09KGI9b2EoYikpfHwhYi5iKSlicmVhaztiLmI9ITE7dmFyIGQsZj1iLmEsaD1jLmE7aWYoZD1mLmIuYSE9PWguYi5hKWE6e2Q9Yjt2YXIgaT1uYShkKSxqPWQuYSxrPWkuYSxsPXZvaWQgMDtpZihlKGouYi5hLGsuYi5hKSl7aWYoMD5nKGouYi5hLGsuYi5hLGouYSkpe2Q9ITE7YnJlYWsgYX1vYShkKS5iPWQuYj0hMCxsPXEoaiksbyhrLmIsbCksbC5kLmM9ZC5kfWVsc2V7aWYoMDxnKGsuYi5hLGouYi5hLGsuYSkpe2Q9ITE7YnJlYWsgYX1kLmI9aS5iPSEwLGw9cShrKSxvKGouZSxrLmIpLGwuYi5kLmM9ZC5kfWQ9ITB9aWYoZCYmKGMuYz8oQyhjKSxwKGgpLGM9bmEoYiksaD1jLmEpOmIuYyYmKEMoYikscChmKSxiPW9hKGMpLGY9Yi5hKSksZi5hIT09aC5hKWlmKGYuYi5hPT09aC5iLmF8fGIuY3x8Yy5jfHxmLmIuYSE9PWEuYSYmaC5iLmEhPT1hLmEpTihhLGIpO2Vsc2UgaWYoTyhhLGIpKWJyZWFrO2YuYT09PWguYSYmZi5iLmE9PT1oLmIuYSYmKEEoaCxmKSxDKGIpLHAoZiksYj1vYShjKSl9fWZ1bmN0aW9uIFEoYSxiKXthLmE9Yjtmb3IodmFyIGM9Yi5jO251bGw9PT1jLmk7KWlmKChjPWMuYyk9PT1iLmMpe3ZhciBjPWEsZj1iLGg9bmV3IG1hO2guYT1mLmMuYjt2YXIgaT1jLmYsaj1pLmE7ZG97aj1qLmF9d2hpbGUobnVsbCE9PWouYiYmIWkuYyhpLmIsaCxqLmIpKTt2YXIgaT1qLmIsaz1uYShpKSxoPWkuYSxqPWsuYTtpZigwPT09ZyhoLmIuYSxmLGguYSkpaD1pLmEsZChoLmEsZil8fGQoaC5iLmEsZil8fChxKGguYiksaS5jJiYocChoLmMpLGkuYz0hMSksbyhmLmMsaCksUShjLGYpKTtlbHNle3ZhciBsPWUoai5iLmEsaC5iLmEpP2k6ayxrPXZvaWQgMDtpLmR8fGwuYz8oaz1sPT09aT9yKGYuYy5iLGguZSk6cihqLmIuYy5iLGYuYykuYixsLmM/RChsLGspOihoPWMsaT1GKGMsaSxrKSxpLmY9b2EoaSkuZitpLmEuZixpLmQ9RyhoLGkuZikpLFEoYyxmKSk6SihjLGksZi5jLGYuYyxudWxsLCEwKX1yZXR1cm59aWYoYz1FKGMuaSksaD1uYShjKSxpPWguYSxoPUkoYSxoLG51bGwpLGguYz09PWkpe3ZhciBpPWgsaD1pLmMsaj1uYShjKSxrPWMuYSxsPWouYSxtPSExO2suYi5hIT09bC5iLmEmJk8oYSxjKSxkKGsuYSxhLmEpJiYobygkKGgpLGspLGM9RShjKSxoPW5hKGMpLmEsSShhLG5hKGMpLGopLG09ITApLGQobC5hLGEuYSkmJihvKGksJChsKSksaT1JKGEsaixudWxsKSxtPSEwKSxtP0ooYSxjLGkuYyxoLGgsITApOihmPWUobC5hLGsuYSk/JChsKTprLGY9cihpLmMuYixmKSxKKGEsYyxmLGYuYyxmLmMsITEpLGYuYi5pLmM9ITAsUChhLGMpKX1lbHNlIEooYSxjLGguYyxpLGksITApfWZ1bmN0aW9uIFIoYSxiKXt2YXIgYz1uZXcgbWEsZD1uKGEuYik7ZC5hLmI9cWEsZC5hLmE9YixkLmIuYS5iPS1xYSxkLmIuYS5hPWIsYS5hPWQuYi5hLGMuYT1kLGMuZj0wLGMuZD0hMSxjLmM9ITEsYy5oPSEwLGMuYj0hMSxkPWEuZixkPVQoZCxkLmEsYyksYy5lPWR9ZnVuY3Rpb24gUyhhKXt0aGlzLmE9bmV3IFUsdGhpcy5iPWEsdGhpcy5jPUJ9ZnVuY3Rpb24gVChhLGIsYyl7ZG97Yj1iLmN9d2hpbGUobnVsbCE9PWIuYiYmIWEuYyhhLmIsYi5iLGMpKTtyZXR1cm4gYT1uZXcgVShjLGIuYSxiKSxiLmEuYz1hLGIuYT1hfWZ1bmN0aW9uIFUoYSxiLGMpe3RoaXMuYj1hfHxudWxsLHRoaXMuYT1ifHx0aGlzLHRoaXMuYz1jfHx0aGlzfWZ1bmN0aW9uIFYoKXt0aGlzLmQ9cmEsdGhpcy5wPXRoaXMuYj10aGlzLnE9bnVsbCx0aGlzLmo9WzAsMCwwXSx0aGlzLnM9MTAwMTMwLHRoaXMubj0hMSx0aGlzLm89dGhpcy5hPXRoaXMuZT10aGlzLmY9bnVsbCx0aGlzLm09ITEsdGhpcy5jPXRoaXMucj10aGlzLmk9dGhpcy5rPXRoaXMubD10aGlzLmg9bnVsbH1mdW5jdGlvbiBXKGEsYil7aWYoYS5kIT09Yilmb3IoO2EuZCE9PWI7KWlmKGEuZDxiKXN3aXRjaChhLmQpe2Nhc2UgcmE6WChhLDEwMDE1MSksYS51KG51bGwpO2JyZWFrO2Nhc2UgMTpYKGEsMTAwMTUyKSxhLnQoKX1lbHNlIHN3aXRjaChhLmQpe2Nhc2UgMjpYKGEsMTAwMTU0KSxhLnYoKTticmVhaztjYXNlIDE6WChhLDEwMDE1MyksYS53KCl9fWZ1bmN0aW9uIFgoYSxiKXthLnAmJmEucChiLGEuYyl9ZnVuY3Rpb24gWShhLGIpe3RoaXMuYj1hfHx0aGlzLHRoaXMuZD1ifHx0aGlzLHRoaXMuYT1udWxsLHRoaXMuYz0hMX1mdW5jdGlvbiBaKCl7dGhpcy5oPXRoaXMsdGhpcy5pPXRoaXMuZD10aGlzLmE9dGhpcy5lPXRoaXMuYz10aGlzLmI9bnVsbCx0aGlzLmY9MH1mdW5jdGlvbiAkKGEpe3JldHVybiBhLmIuZX1mdW5jdGlvbiBfKCl7dGhpcy5jPW5ldyBhYSx0aGlzLmE9bmV3IFksdGhpcy5iPW5ldyBaLHRoaXMuZD1uZXcgWix0aGlzLmIuYj10aGlzLmQsdGhpcy5kLmI9dGhpcy5ifWZ1bmN0aW9uIGFhKGEsYil7dGhpcy5lPWF8fHRoaXMsdGhpcy5mPWJ8fHRoaXMsdGhpcy5kPXRoaXMuYz1udWxsLHRoaXMuZz1bMCwwLDBdLHRoaXMuaD10aGlzLmE9dGhpcy5iPTB9ZnVuY3Rpb24gYmEoKXt0aGlzLmM9W10sdGhpcy5kPW51bGwsdGhpcy5hPTAsdGhpcy5lPSExLHRoaXMuYj1uZXcgZmF9ZnVuY3Rpb24gY2EoYSl7YS5kPVtdO2Zvcih2YXIgYj0wO2I8YS5hO2IrKylhLmRbYl09YjthLmQuc29ydChmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYixjKXtyZXR1cm4gZShhW2JdLGFbY10pPzE6LTF9fShhLmMpKSxhLmU9ITAsaGEoYS5iKX1mdW5jdGlvbiBkYShhLGIpe2lmKGEuZSl7dmFyIGM9YS5iLGQ9KytjLmE7MipkPmMuZiYmKGMuZio9MixjLmM9Z2EoYy5jLGMuZisxKSk7dmFyIGU7cmV0dXJuIDA9PT1jLmI/ZT1kOihlPWMuYixjLmI9Yy5jW2MuYl0pLGMuZVtlXT1iLGMuY1tlXT1kLGMuZFtkXT1lLGMuaCYmbGEoYyxkKSxlfXJldHVybiBjPWEuYSsrLGEuY1tjXT1iLC0oYysxKX1mdW5jdGlvbiBlYShhKXtpZigwPT09YS5hKXJldHVybiBqYShhLmIpO3ZhciBiPWEuY1thLmRbYS5hLTFdXTtpZigwIT09YS5iLmEmJmUoaWEoYS5iKSxiKSlyZXR1cm4gamEoYS5iKTtkb3stLWEuYX13aGlsZSgwPGEuYSYmbnVsbD09PWEuY1thLmRbYS5hLTFdXSk7cmV0dXJuIGJ9ZnVuY3Rpb24gZmEoKXt0aGlzLmQ9Z2EoWzBdLDMzKSx0aGlzLmU9W251bGwsbnVsbF0sdGhpcy5jPVswLDBdLHRoaXMuYT0wLHRoaXMuZj0zMix0aGlzLmI9MCx0aGlzLmg9ITEsdGhpcy5kWzFdPTF9ZnVuY3Rpb24gZ2EoYSxiKXtmb3IodmFyIGM9QXJyYXkoYiksZD0wO2Q8YS5sZW5ndGg7ZCsrKWNbZF09YVtkXTtmb3IoO2Q8YjtkKyspY1tkXT0wO3JldHVybiBjfWZ1bmN0aW9uIGhhKGEpe2Zvcih2YXIgYj1hLmE7MTw9YjstLWIpa2EoYSxiKTthLmg9ITB9ZnVuY3Rpb24gaWEoYSl7cmV0dXJuIGEuZVthLmRbMV1dfWZ1bmN0aW9uIGphKGEpe3ZhciBiPWEuZCxjPWEuZSxkPWEuYyxlPWJbMV0sZj1jW2VdO3JldHVybiAwPGEuYSYmKGJbMV09YlthLmFdLGRbYlsxXV09MSxjW2VdPW51bGwsZFtlXT1hLmIsYS5iPWUsMDwtLWEuYSYma2EoYSwxKSksZn1mdW5jdGlvbiBrYShhLGIpe2Zvcih2YXIgYz1hLmQsZD1hLmUsZj1hLmMsZz1iLGg9Y1tnXTs7KXt2YXIgaT1nPDwxO2k8YS5hJiZlKGRbY1tpKzFdXSxkW2NbaV1dKSYmKGkrPTEpO3ZhciBqPWNbaV07aWYoaT5hLmF8fGUoZFtoXSxkW2pdKSl7Y1tnXT1oLGZbaF09ZzticmVha31jW2ddPWosZltqXT1nLGc9aX19ZnVuY3Rpb24gbGEoYSxiKXtmb3IodmFyIGM9YS5kLGQ9YS5lLGY9YS5jLGc9YixoPWNbZ107Oyl7dmFyIGk9Zz4+MSxqPWNbaV07aWYoMD09PWl8fGUoZFtqXSxkW2hdKSl7Y1tnXT1oLGZbaF09ZzticmVha31jW2ddPWosZltqXT1nLGc9aX19ZnVuY3Rpb24gbWEoKXt0aGlzLmU9dGhpcy5hPW51bGwsdGhpcy5mPTAsdGhpcy5jPXRoaXMuYj10aGlzLmg9dGhpcy5kPSExfWZ1bmN0aW9uIG5hKGEpe3JldHVybiBhLmUuYy5ifWZ1bmN0aW9uIG9hKGEpe3JldHVybiBhLmUuYS5ifXZhciBwYSxxYT00ZTE1MCxyYT0wO3BhPVYucHJvdG90eXBlLHBhLng9ZnVuY3Rpb24oKXtXKHRoaXMscmEpfSxwYS5CPWZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTAwMTQyOnJldHVybjtjYXNlIDEwMDE0MDpzd2l0Y2goYil7Y2FzZSAxMDAxMzA6Y2FzZSAxMDAxMzE6Y2FzZSAxMDAxMzI6Y2FzZSAxMDAxMzM6Y2FzZSAxMDAxMzQ6cmV0dXJuIHZvaWQodGhpcy5zPWIpfWJyZWFrO2Nhc2UgMTAwMTQxOnJldHVybiB2b2lkKHRoaXMubT0hIWIpO2RlZmF1bHQ6cmV0dXJuIHZvaWQgWCh0aGlzLDEwMDkwMCl9WCh0aGlzLDEwMDkwMSl9LHBhLnk9ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMTAwMTQyOnJldHVybiAwO2Nhc2UgMTAwMTQwOnJldHVybiB0aGlzLnM7Y2FzZSAxMDAxNDE6cmV0dXJuIHRoaXMubTtkZWZhdWx0OlgodGhpcywxMDA5MDApfXJldHVybiExfSxwYS5BPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmpbMF09YSx0aGlzLmpbMV09Yix0aGlzLmpbMl09Y30scGEuej1mdW5jdGlvbihhLGIpe3ZhciBjPWJ8fG51bGw7c3dpdGNoKGEpe2Nhc2UgMTAwMTAwOmNhc2UgMTAwMTA2OnRoaXMuaD1jO2JyZWFrO2Nhc2UgMTAwMTA0OmNhc2UgMTAwMTEwOnRoaXMubD1jO2JyZWFrO2Nhc2UgMTAwMTAxOmNhc2UgMTAwMTA3OnRoaXMuaz1jO2JyZWFrO2Nhc2UgMTAwMTAyOmNhc2UgMTAwMTA4OnRoaXMuaT1jO2JyZWFrO2Nhc2UgMTAwMTAzOmNhc2UgMTAwMTA5OnRoaXMucD1jO2JyZWFrO2Nhc2UgMTAwMTA1OmNhc2UgMTAwMTExOnRoaXMubz1jO2JyZWFrO2Nhc2UgMTAwMTEyOnRoaXMucj1jO2JyZWFrO2RlZmF1bHQ6WCh0aGlzLDEwMDkwMCl9fSxwYS5DPWZ1bmN0aW9uKGEsYil7dmFyIGM9ITEsZD1bMCwwLDBdO1codGhpcywyKTtmb3IodmFyIGU9MDszPmU7KytlKXt2YXIgZj1hW2VdOy0xZTE1MD5mJiYoZj0tMWUxNTAsYz0hMCksMWUxNTA8ZiYmKGY9MWUxNTAsYz0hMCksZFtlXT1mfWMmJlgodGhpcywxMDAxNTUpLGM9dGhpcy5xLG51bGw9PT1jPyhjPW4odGhpcy5iKSxvKGMsYy5iKSk6KHEoYyksYz1jLmUpLGMuYS5kPWIsYy5hLmdbMF09ZFswXSxjLmEuZ1sxXT1kWzFdLGMuYS5nWzJdPWRbMl0sYy5mPTEsYy5iLmY9LTEsdGhpcy5xPWN9LHBhLnU9ZnVuY3Rpb24oYSl7Vyh0aGlzLHJhKSx0aGlzLmQ9MSx0aGlzLmI9bmV3IF8sdGhpcy5jPWF9LHBhLnQ9ZnVuY3Rpb24oKXtXKHRoaXMsMSksdGhpcy5kPTIsdGhpcy5xPW51bGx9LHBhLnY9ZnVuY3Rpb24oKXtXKHRoaXMsMiksdGhpcy5kPTF9LHBhLnc9ZnVuY3Rpb24oKXtXKHRoaXMsMSksdGhpcy5kPXJhO3ZhciBhPXRoaXMualswXSxiPXRoaXMualsxXSxjPXRoaXMualsyXSxmPSExLGg9W2EsYixjXTtpZigwPT09YSYmMD09PWImJjA9PT1jKXtmb3IodmFyIGI9Wy0yZTE1MCwtMmUxNTAsLTJlMTUwXSxpPVsyZTE1MCwyZTE1MCwyZTE1MF0sYz1bXSxqPVtdLGY9dGhpcy5iLmMsYT1mLmU7YSE9PWY7YT1hLmUpZm9yKHZhciBtPTA7Mz5tOysrbSl7dmFyIG49YS5nW21dO248aVttXSYmKGlbbV09bixqW21dPWEpLG4+YlttXSYmKGJbbV09bixjW21dPWEpfWlmKGE9MCxiWzFdLWlbMV0+YlswXS1pWzBdJiYoYT0xKSxiWzJdLWlbMl0+YlthXS1pW2FdJiYoYT0yKSxpW2FdPj1iW2FdKWhbMF09MCxoWzFdPTAsaFsyXT0xO2Vsc2V7Zm9yKGI9MCxpPWpbYV0sYz1jW2FdLGo9WzAsMCwwXSxpPVtpLmdbMF0tYy5nWzBdLGkuZ1sxXS1jLmdbMV0saS5nWzJdLWMuZ1syXV0sbT1bMCwwLDBdLGE9Zi5lO2EhPT1mO2E9YS5lKW1bMF09YS5nWzBdLWMuZ1swXSxtWzFdPWEuZ1sxXS1jLmdbMV0sbVsyXT1hLmdbMl0tYy5nWzJdLGpbMF09aVsxXSptWzJdLWlbMl0qbVsxXSxqWzFdPWlbMl0qbVswXS1pWzBdKm1bMl0salsyXT1pWzBdKm1bMV0taVsxXSptWzBdLChuPWpbMF0qalswXStqWzFdKmpbMV0ralsyXSpqWzJdKT5iJiYoYj1uLGhbMF09alswXSxoWzFdPWpbMV0saFsyXT1qWzJdKTswPj1iJiYoaFswXT1oWzFdPWhbMl09MCxoW3ooaSldPTEpfWY9ITB9Zm9yKGo9eihoKSxhPXRoaXMuYi5jLGI9KGorMSklMyxjPShqKzIpJTMsaj0wPGhbal0/MTotMSxoPWEuZTtoIT09YTtoPWguZSloLmI9aC5nW2JdLGguYT1qKmguZ1tjXTtpZihmKXtmb3IoaD0wLGY9dGhpcy5iLmEsYT1mLmI7YSE9PWY7YT1hLmIpaWYoYj1hLmEsISgwPj1iLmYpKWRve2grPShiLmEuYi1iLmIuYS5iKSooYi5hLmErYi5iLmEuYSksYj1iLmV9d2hpbGUoYiE9PWEuYSk7aWYoMD5oKWZvcihoPXRoaXMuYi5jLGY9aC5lO2YhPT1oO2Y9Zi5lKWYuYT0tZi5hfWZvcih0aGlzLm49ITEsaD10aGlzLmIuYixhPWguaDthIT09aDthPWYpZj1hLmgsYj1hLmUsZChhLmEsYS5iLmEpJiZhLmUuZSE9PWEmJihMKHRoaXMsYixhKSxwKGEpLGE9YixiPWEuZSksYi5lPT09YSYmKGIhPT1hJiYoYiE9PWYmJmIhPT1mLmJ8fChmPWYuaCkscChiKSksYSE9PWYmJmEhPT1mLmJ8fChmPWYuaCkscChhKSk7Zm9yKHRoaXMuZT1oPW5ldyBiYSxmPXRoaXMuYi5jLGE9Zi5lO2EhPT1mO2E9YS5lKWEuaD1kYShoLGEpO2ZvcihjYShoKSx0aGlzLmY9bmV3IFModGhpcyksUih0aGlzLC1xYSksUih0aGlzLHFhKTtudWxsIT09KGg9ZWEodGhpcy5lKSk7KXtmb3IoOzspe2E6aWYoYT10aGlzLmUsMD09PWEuYSlmPWlhKGEuYik7ZWxzZSBpZihmPWEuY1thLmRbYS5hLTFdXSwwIT09YS5iLmEmJihhPWlhKGEuYiksZShhLGYpKSl7Zj1hO2JyZWFrIGF9aWYobnVsbD09PWZ8fCFkKGYsaCkpYnJlYWs7Zj1lYSh0aGlzLmUpLEwodGhpcyxoLmMsZi5jKX1RKHRoaXMsaCl9Zm9yKHRoaXMuYT10aGlzLmYuYS5hLmIuYS5hLGg9MDtudWxsIT09KGY9dGhpcy5mLmEuYS5iKTspZi5ofHwrK2gsQyhmKTtmb3IodGhpcy5mPW51bGwsaD10aGlzLmUsaC5iPW51bGwsaC5kPW51bGwsdGhpcy5lPWguYz1udWxsLGg9dGhpcy5iLGE9aC5hLmI7YSE9PWguYTthPWYpZj1hLmIsYT1hLmEsYS5lLmU9PT1hJiYoQShhLmMsYSkscChhKSk7aWYoIXRoaXMubil7aWYoaD10aGlzLmIsdGhpcy5tKWZvcihhPWguYi5oO2EhPT1oLmI7YT1mKWY9YS5oLGEuYi5kLmMhPT1hLmQuYz9hLmY9YS5kLmM/MTotMTpwKGEpO2Vsc2UgZm9yKGE9aC5hLmI7YSE9PWguYTthPWYpaWYoZj1hLmIsYS5jKXtmb3IoYT1hLmE7ZShhLmIuYSxhLmEpO2E9YS5jLmIpO2Zvcig7ZShhLmEsYS5iLmEpO2E9YS5lKTtmb3IoYj1hLmMuYixjPXZvaWQgMDthLmUhPT1iOylpZihlKGEuYi5hLGIuYSkpe2Zvcig7Yi5lIT09YSYmKGsoYi5lKXx8MD49ZyhiLmEsYi5iLmEsYi5lLmIuYSkpOyljPXIoYi5lLGIpLGI9Yy5iO2I9Yi5jLmJ9ZWxzZXtmb3IoO2IuZSE9PWEmJihsKGEuYy5iKXx8MDw9ZyhhLmIuYSxhLmEsYS5jLmIuYSkpOyljPXIoYSxhLmMuYiksYT1jLmI7YT1hLmV9Zm9yKDtiLmUuZSE9PWE7KWM9cihiLmUsYiksYj1jLmJ9aWYodGhpcy5ofHx0aGlzLml8fHRoaXMua3x8dGhpcy5sKWlmKHRoaXMubSl7Zm9yKGg9dGhpcy5iLGY9aC5hLmI7ZiE9PWguYTtmPWYuYilpZihmLmMpe3RoaXMuaCYmdGhpcy5oKDIsdGhpcy5jKSxhPWYuYTtkb3t0aGlzLmsmJnRoaXMuayhhLmEuZCx0aGlzLmMpLGE9YS5lfXdoaWxlKGEhPT1mLmEpO3RoaXMuaSYmdGhpcy5pKHRoaXMuYyl9fWVsc2V7Zm9yKGg9dGhpcy5iLGY9ISF0aGlzLmwsYT0hMSxiPS0xLGM9aC5hLmQ7YyE9PWguYTtjPWMuZClpZihjLmMpe2F8fCh0aGlzLmgmJnRoaXMuaCg0LHRoaXMuYyksYT0hMCksaj1jLmE7ZG97ZiYmKGk9ai5iLmQuYz8wOjEsYiE9PWkmJihiPWksdGhpcy5sJiZ0aGlzLmwoISFiLHRoaXMuYykpKSx0aGlzLmsmJnRoaXMuayhqLmEuZCx0aGlzLmMpLGo9ai5lfXdoaWxlKGohPT1jLmEpfWEmJnRoaXMuaSYmdGhpcy5pKHRoaXMuYyl9aWYodGhpcy5yKXtmb3IoaD10aGlzLmIsYT1oLmEuYjthIT09aC5hO2E9ZilpZihmPWEuYiwhYS5jKXtiPWEuYSxjPWIuZSxqPXZvaWQgMDtkb3tqPWMsYz1qLmUsai5kPW51bGwsbnVsbD09PWouYi5kJiYoai5jPT09aj94KGouYSxudWxsKTooai5hLmM9ai5jLHQoaiwkKGopKSksaT1qLmIsaS5jPT09aT94KGkuYSxudWxsKTooaS5hLmM9aS5jLHQoaSwkKGkpKSksdyhqKSl9d2hpbGUoaiE9PWIpO2I9YS5kLGE9YS5iLGEuZD1iLGIuYj1hfXJldHVybiB0aGlzLnIodGhpcy5iKSx2b2lkKHRoaXMuYz10aGlzLmI9bnVsbCl9fXRoaXMuYj10aGlzLmM9bnVsbH0sdGhpcy5saWJ0ZXNzPXtHbHVUZXNzZWxhdG9yOlYsd2luZGluZ1J1bGU6e0dMVV9URVNTX1dJTkRJTkdfT0REOjEwMDEzMCxHTFVfVEVTU19XSU5ESU5HX05PTlpFUk86MTAwMTMxLEdMVV9URVNTX1dJTkRJTkdfUE9TSVRJVkU6MTAwMTMyLEdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkU6MTAwMTMzLEdMVV9URVNTX1dJTkRJTkdfQUJTX0dFUV9UV086MTAwMTM0fSxwcmltaXRpdmVUeXBlOntHTF9MSU5FX0xPT1A6MixHTF9UUklBTkdMRVM6NCxHTF9UUklBTkdMRV9TVFJJUDo1LEdMX1RSSUFOR0xFX0ZBTjo2fSxlcnJvclR5cGU6e0dMVV9URVNTX01JU1NJTkdfQkVHSU5fUE9MWUdPTjoxMDAxNTEsR0xVX1RFU1NfTUlTU0lOR19FTkRfUE9MWUdPTjoxMDAxNTMsR0xVX1RFU1NfTUlTU0lOR19CRUdJTl9DT05UT1VSOjEwMDE1MixHTFVfVEVTU19NSVNTSU5HX0VORF9DT05UT1VSOjEwMDE1NCxHTFVfVEVTU19DT09SRF9UT09fTEFSR0U6MTAwMTU1LEdMVV9URVNTX05FRURfQ09NQklORV9DQUxMQkFDSzoxMDAxNTZ9LGdsdUVudW06e0dMVV9URVNTX01FU0g6MTAwMTEyLEdMVV9URVNTX1RPTEVSQU5DRToxMDAxNDIsR0xVX1RFU1NfV0lORElOR19SVUxFOjEwMDE0MCxHTFVfVEVTU19CT1VOREFSWV9PTkxZOjEwMDE0MSxHTFVfSU5WQUxJRF9FTlVNOjEwMDkwMCxHTFVfSU5WQUxJRF9WQUxVRToxMDA5MDEsR0xVX1RFU1NfQkVHSU46MTAwMTAwLEdMVV9URVNTX1ZFUlRFWDoxMDAxMDEsR0xVX1RFU1NfRU5EOjEwMDEwMixHTFVfVEVTU19FUlJPUjoxMDAxMDMsR0xVX1RFU1NfRURHRV9GTEFHOjEwMDEwNCxHTFVfVEVTU19DT01CSU5FOjEwMDEwNSxHTFVfVEVTU19CRUdJTl9EQVRBOjEwMDEwNixHTFVfVEVTU19WRVJURVhfREFUQToxMDAxMDcsR0xVX1RFU1NfRU5EX0RBVEE6MTAwMTA4LEdMVV9URVNTX0VSUk9SX0RBVEE6MTAwMTA5LEdMVV9URVNTX0VER0VfRkxBR19EQVRBOjEwMDExMCxHTFVfVEVTU19DT01CSU5FX0RBVEE6MTAwMTExfX0sVi5wcm90b3R5cGUuZ2x1RGVsZXRlVGVzcz1WLnByb3RvdHlwZS54LFYucHJvdG90eXBlLmdsdVRlc3NQcm9wZXJ0eT1WLnByb3RvdHlwZS5CLFYucHJvdG90eXBlLmdsdUdldFRlc3NQcm9wZXJ0eT1WLnByb3RvdHlwZS55LFYucHJvdG90eXBlLmdsdVRlc3NOb3JtYWw9Vi5wcm90b3R5cGUuQSxWLnByb3RvdHlwZS5nbHVUZXNzQ2FsbGJhY2s9Vi5wcm90b3R5cGUueixWLnByb3RvdHlwZS5nbHVUZXNzVmVydGV4PVYucHJvdG90eXBlLkMsVi5wcm90b3R5cGUuZ2x1VGVzc0JlZ2luUG9seWdvbj1WLnByb3RvdHlwZS51LFYucHJvdG90eXBlLmdsdVRlc3NCZWdpbkNvbnRvdXI9Vi5wcm90b3R5cGUudCxWLnByb3RvdHlwZS5nbHVUZXNzRW5kQ29udG91cj1WLnByb3RvdHlwZS52LFYucHJvdG90eXBlLmdsdVRlc3NFbmRQb2x5Z29uPVYucHJvdG90eXBlLncsdm9pZCAwIT09YiYmKGIuZXhwb3J0cz10aGlzLmxpYnRlc3MpfSx7fV0sMTA6W2Z1bmN0aW9uKGIsYyxkKXsoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGIsZSl7XCJvYmplY3RcIj09dHlwZW9mIGQmJnZvaWQgMCE9PWM/ZShkKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiZhLmFtZD9hKFtcImV4cG9ydHNcIl0sZSk6ZShiLm9wZW50eXBlPXt9KX0odGhpcyxmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBjKCl7dGhpcy50YWJsZT1uZXcgVWludDE2QXJyYXkoMTYpLHRoaXMudHJhbnM9bmV3IFVpbnQxNkFycmF5KDI4OCl9ZnVuY3Rpb24gZChhLGIpe3RoaXMuc291cmNlPWEsdGhpcy5zb3VyY2VJbmRleD0wLHRoaXMudGFnPTAsdGhpcy5iaXRjb3VudD0wLHRoaXMuZGVzdD1iLHRoaXMuZGVzdExlbj0wLHRoaXMubHRyZWU9bmV3IGMsdGhpcy5kdHJlZT1uZXcgY31mdW5jdGlvbiBmKGEsYixjLGQpe3ZhciBlLGY7Zm9yKGU9MDtlPGM7KytlKWFbZV09MDtmb3IoZT0wO2U8MzAtYzsrK2UpYVtlK2NdPWUvY3wwO2ZvcihmPWQsZT0wO2U8MzA7KytlKWJbZV09ZixmKz0xPDxhW2VdfWZ1bmN0aW9uIGcoYSxiKXt2YXIgYztmb3IoYz0wO2M8NzsrK2MpYS50YWJsZVtjXT0wO2ZvcihhLnRhYmxlWzddPTI0LGEudGFibGVbOF09MTUyLGEudGFibGVbOV09MTEyLGM9MDtjPDI0OysrYylhLnRyYW5zW2NdPTI1NitjO2ZvcihjPTA7YzwxNDQ7KytjKWEudHJhbnNbMjQrY109Yztmb3IoYz0wO2M8ODsrK2MpYS50cmFuc1sxNjgrY109MjgwK2M7Zm9yKGM9MDtjPDExMjsrK2MpYS50cmFuc1sxNzYrY109MTQ0K2M7Zm9yKGM9MDtjPDU7KytjKWIudGFibGVbY109MDtmb3IoYi50YWJsZVs1XT0zMixjPTA7YzwzMjsrK2MpYi50cmFuc1tjXT1jfWZ1bmN0aW9uIGgoYSxiLGMsZCl7dmFyIGUsZjtmb3IoZT0wO2U8MTY7KytlKWEudGFibGVbZV09MDtmb3IoZT0wO2U8ZDsrK2UpYS50YWJsZVtiW2MrZV1dKys7Zm9yKGEudGFibGVbMF09MCxmPTAsZT0wO2U8MTY7KytlKXZlW2VdPWYsZis9YS50YWJsZVtlXTtmb3IoZT0wO2U8ZDsrK2UpYltjK2VdJiYoYS50cmFuc1t2ZVtiW2MrZV1dKytdPWUpfWZ1bmN0aW9uIGkoYSl7YS5iaXRjb3VudC0tfHwoYS50YWc9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsrXSxhLmJpdGNvdW50PTcpO3ZhciBiPTEmYS50YWc7cmV0dXJuIGEudGFnPj4+PTEsYn1mdW5jdGlvbiBqKGEsYixjKXtpZighYilyZXR1cm4gYztmb3IoO2EuYml0Y291bnQ8MjQ7KWEudGFnfD1hLnNvdXJjZVthLnNvdXJjZUluZGV4KytdPDxhLmJpdGNvdW50LGEuYml0Y291bnQrPTg7dmFyIGQ9YS50YWcmNjU1MzU+Pj4xNi1iO3JldHVybiBhLnRhZz4+Pj1iLGEuYml0Y291bnQtPWIsZCtjfWZ1bmN0aW9uIGsoYSxiKXtmb3IoO2EuYml0Y291bnQ8MjQ7KWEudGFnfD1hLnNvdXJjZVthLnNvdXJjZUluZGV4KytdPDxhLmJpdGNvdW50LGEuYml0Y291bnQrPTg7dmFyIGM9MCxkPTAsZT0wLGY9YS50YWc7ZG97ZD0yKmQrKDEmZiksZj4+Pj0xLCsrZSxjKz1iLnRhYmxlW2VdLGQtPWIudGFibGVbZV19d2hpbGUoZD49MCk7cmV0dXJuIGEudGFnPWYsYS5iaXRjb3VudC09ZSxiLnRyYW5zW2MrZF19ZnVuY3Rpb24gbChhLGIsYyl7dmFyIGQsZSxmLGcsaSxsO2ZvcihkPWooYSw1LDI1NyksZT1qKGEsNSwxKSxmPWooYSw0LDQpLGc9MDtnPDE5OysrZyl1ZVtnXT0wO2ZvcihnPTA7ZzxmOysrZyl7dmFyIG09aihhLDMsMCk7dWVbc2VbZ11dPW19Zm9yKGgodGUsdWUsMCwxOSksaT0wO2k8ZCtlOyl7dmFyIG49ayhhLHRlKTtzd2l0Y2gobil7Y2FzZSAxNjp2YXIgbz11ZVtpLTFdO2ZvcihsPWooYSwyLDMpO2w7LS1sKXVlW2krK109bzticmVhaztjYXNlIDE3OmZvcihsPWooYSwzLDMpO2w7LS1sKXVlW2krK109MDticmVhaztjYXNlIDE4OmZvcihsPWooYSw3LDExKTtsOy0tbCl1ZVtpKytdPTA7YnJlYWs7ZGVmYXVsdDp1ZVtpKytdPW59fWgoYix1ZSwwLGQpLGgoYyx1ZSxkLGUpfWZ1bmN0aW9uIG0oYSxiLGMpe2Zvcig7Oyl7dmFyIGQ9ayhhLGIpO2lmKDI1Nj09PWQpcmV0dXJuIGtlO2lmKGQ8MjU2KWEuZGVzdFthLmRlc3RMZW4rK109ZDtlbHNle3ZhciBlLGYsZyxoO2ZvcihkLT0yNTcsZT1qKGEsb2VbZF0scGVbZF0pLGY9ayhhLGMpLGc9YS5kZXN0TGVuLWooYSxxZVtmXSxyZVtmXSksaD1nO2g8ZytlOysraClhLmRlc3RbYS5kZXN0TGVuKytdPWEuZGVzdFtoXX19fWZ1bmN0aW9uIG4oYSl7Zm9yKHZhciBiLGMsZDthLmJpdGNvdW50Pjg7KWEuc291cmNlSW5kZXgtLSxhLmJpdGNvdW50LT04O2lmKGI9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsxXSxiPTI1NipiK2Euc291cmNlW2Euc291cmNlSW5kZXhdLGM9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCszXSxjPTI1NipjK2Euc291cmNlW2Euc291cmNlSW5kZXgrMl0sYiE9PSg2NTUzNSZ+YykpcmV0dXJuIGxlO2ZvcihhLnNvdXJjZUluZGV4Kz00LGQ9YjtkOy0tZClhLmRlc3RbYS5kZXN0TGVuKytdPWEuc291cmNlW2Euc291cmNlSW5kZXgrK107cmV0dXJuIGEuYml0Y291bnQ9MCxrZX1mdW5jdGlvbiBvKGEsYil7dmFyIGMsZSxmPW5ldyBkKGEsYik7ZG97c3dpdGNoKGM9aShmKSxqKGYsMiwwKSl7Y2FzZSAwOmU9bihmKTticmVhaztjYXNlIDE6ZT1tKGYsbWUsbmUpO2JyZWFrO2Nhc2UgMjpsKGYsZi5sdHJlZSxmLmR0cmVlKSxlPW0oZixmLmx0cmVlLGYuZHRyZWUpO2JyZWFrO2RlZmF1bHQ6ZT1sZX1pZihlIT09a2UpdGhyb3cgbmV3IEVycm9yKFwiRGF0YSBlcnJvclwiKX13aGlsZSghYyk7cmV0dXJuIGYuZGVzdExlbjxmLmRlc3QubGVuZ3RoP1wiZnVuY3Rpb25cIj09dHlwZW9mIGYuZGVzdC5zbGljZT9mLmRlc3Quc2xpY2UoMCxmLmRlc3RMZW4pOmYuZGVzdC5zdWJhcnJheSgwLGYuZGVzdExlbik6Zi5kZXN0fWZ1bmN0aW9uIHAoYSxiLGMsZCxlKXtyZXR1cm4gTWF0aC5wb3coMS1lLDMpKmErMypNYXRoLnBvdygxLWUsMikqZSpiKzMqKDEtZSkqTWF0aC5wb3coZSwyKSpjK01hdGgucG93KGUsMykqZH1mdW5jdGlvbiBxKCl7dGhpcy54MT1OdW1iZXIuTmFOLHRoaXMueTE9TnVtYmVyLk5hTix0aGlzLngyPU51bWJlci5OYU4sdGhpcy55Mj1OdW1iZXIuTmFOfWZ1bmN0aW9uIHIoKXt0aGlzLmNvbW1hbmRzPVtdLHRoaXMuZmlsbD1cImJsYWNrXCIsdGhpcy5zdHJva2U9bnVsbCx0aGlzLnN0cm9rZVdpZHRoPTF9ZnVuY3Rpb24gcyhhKXt0aHJvdyBuZXcgRXJyb3IoYSl9ZnVuY3Rpb24gdChhLGIpe2F8fHMoYil9ZnVuY3Rpb24gdShhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYX19ZnVuY3Rpb24gdihhKXtyZXR1cm4gYT49LTEyOCYmYTw9MTI3fWZ1bmN0aW9uIHcoYSxiLGMpe2Zvcih2YXIgZD0wLGU9YS5sZW5ndGg7YjxlJiZkPDY0JiYwPT09YVtiXTspKytiLCsrZDtyZXR1cm4gYy5wdXNoKDEyOHxkLTEpLGJ9ZnVuY3Rpb24geChhLGIsYyl7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aCxmPWI7ZjxlJiZkPDY0Oyl7dmFyIGc9YVtmXTtpZighdihnKSlicmVhaztpZigwPT09ZyYmZisxPGUmJjA9PT1hW2YrMV0pYnJlYWs7KytmLCsrZH1jLnB1c2goZC0xKTtmb3IodmFyIGg9YjtoPGY7KytoKWMucHVzaChhW2hdKzI1NiYyNTUpO3JldHVybiBmfWZ1bmN0aW9uIHkoYSxiLGMpe2Zvcih2YXIgZD0wLGU9YS5sZW5ndGgsZj1iO2Y8ZSYmZDw2NDspe3ZhciBnPWFbZl07aWYoMD09PWcpYnJlYWs7aWYodihnKSYmZisxPGUmJnYoYVtmKzFdKSlicmVhazsrK2YsKytkfWMucHVzaCg2NHxkLTEpO2Zvcih2YXIgaD1iO2g8ZjsrK2gpe3ZhciBpPWFbaF07Yy5wdXNoKGkrNjU1MzY+PjgmMjU1LGkrMjU2JjI1NSl9cmV0dXJuIGZ9ZnVuY3Rpb24geihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT0wO2U8Yi5sZW5ndGg7ZSs9MSl7dmFyIGY9YltlXTtkW2YubmFtZV09Zi52YWx1ZX1pZih0aGlzLnRhYmxlTmFtZT1hLHRoaXMuZmllbGRzPWIsYylmb3IodmFyIGc9T2JqZWN0LmtleXMoYyksaD0wO2g8Zy5sZW5ndGg7aCs9MSl7dmFyIGk9Z1toXSxqPWNbaV07dm9pZCAwIT09ZFtpXSYmKGRbaV09ail9fWZ1bmN0aW9uIEEoYSxiLGMpe3ZvaWQgMD09PWMmJihjPWIubGVuZ3RoKTt2YXIgZD1uZXcgQXJyYXkoYi5sZW5ndGgrMSk7ZFswXT17bmFtZTphK1wiQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Y307Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDtlKyspZFtlKzFdPXtuYW1lOmErZSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YltlXX07cmV0dXJuIGR9ZnVuY3Rpb24gQihhLGIsYyl7dmFyIGQ9Yi5sZW5ndGgsZT1uZXcgQXJyYXkoZCsxKTtlWzBdPXtuYW1lOmErXCJDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkfTtmb3IodmFyIGY9MDtmPGQ7ZisrKWVbZisxXT17bmFtZTphK2YsdHlwZTpcIlRBQkxFXCIsdmFsdWU6YyhiW2ZdLGYpfTtyZXR1cm4gZX1mdW5jdGlvbiBDKGEsYixjKXt2YXIgZD1iLmxlbmd0aCxlPVtdO2VbMF09e25hbWU6YStcIkNvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmR9O2Zvcih2YXIgZj0wO2Y8ZDtmKyspZT1lLmNvbmNhdChjKGJbZl0sZikpO3JldHVybiBlfWZ1bmN0aW9uIEQoYSl7MT09PWEuZm9ybWF0P3ouY2FsbCh0aGlzLFwiY292ZXJhZ2VUYWJsZVwiLFt7bmFtZTpcImNvdmVyYWdlRm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9XS5jb25jYXQoQShcImdseXBoXCIsYS5nbHlwaHMpKSk6eGUuYXNzZXJ0KCExLFwiQ2FuJ3QgY3JlYXRlIGNvdmVyYWdlIHRhYmxlIGZvcm1hdCAyIHlldC5cIil9ZnVuY3Rpb24gRShhKXt6LmNhbGwodGhpcyxcInNjcmlwdExpc3RUYWJsZVwiLEMoXCJzY3JpcHRSZWNvcmRcIixhLGZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zY3JpcHQsZD1jLmRlZmF1bHRMYW5nU3lzO3JldHVybiB4ZS5hc3NlcnQoISFkLFwiVW5hYmxlIHRvIHdyaXRlIEdTVUI6IHNjcmlwdCBcIithLnRhZytcIiBoYXMgbm8gZGVmYXVsdCBsYW5ndWFnZSBzeXN0ZW0uXCIpLFt7bmFtZTpcInNjcmlwdFRhZ1wiK2IsdHlwZTpcIlRBR1wiLHZhbHVlOmEudGFnfSx7bmFtZTpcInNjcmlwdFwiK2IsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJzY3JpcHRUYWJsZVwiLFt7bmFtZTpcImRlZmF1bHRMYW5nU3lzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJkZWZhdWx0TGFuZ1N5c1wiLFt7bmFtZTpcImxvb2t1cE9yZGVyXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVxRmVhdHVyZUluZGV4XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmQucmVxRmVhdHVyZUluZGV4fV0uY29uY2F0KEEoXCJmZWF0dXJlSW5kZXhcIixkLmZlYXR1cmVJbmRleGVzKSkpfV0uY29uY2F0KEMoXCJsYW5nU3lzXCIsYy5sYW5nU3lzUmVjb3JkcyxmdW5jdGlvbihhLGIpe3ZhciBjPWEubGFuZ1N5cztyZXR1cm5be25hbWU6XCJsYW5nU3lzVGFnXCIrYix0eXBlOlwiVEFHXCIsdmFsdWU6YS50YWd9LHtuYW1lOlwibGFuZ1N5c1wiK2IsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJsYW5nU3lzXCIsW3tuYW1lOlwibG9va3VwT3JkZXJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXFGZWF0dXJlSW5kZXhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Yy5yZXFGZWF0dXJlSW5kZXh9XS5jb25jYXQoQShcImZlYXR1cmVJbmRleFwiLGMuZmVhdHVyZUluZGV4ZXMpKSl9XX0pKSl9XX0pKX1mdW5jdGlvbiBGKGEpe3ouY2FsbCh0aGlzLFwiZmVhdHVyZUxpc3RUYWJsZVwiLEMoXCJmZWF0dXJlUmVjb3JkXCIsYSxmdW5jdGlvbihhLGIpe3ZhciBjPWEuZmVhdHVyZTtyZXR1cm5be25hbWU6XCJmZWF0dXJlVGFnXCIrYix0eXBlOlwiVEFHXCIsdmFsdWU6YS50YWd9LHtuYW1lOlwiZmVhdHVyZVwiK2IsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJmZWF0dXJlVGFibGVcIixbe25hbWU6XCJmZWF0dXJlUGFyYW1zXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmMuZmVhdHVyZVBhcmFtc31dLmNvbmNhdChBKFwibG9va3VwTGlzdEluZGV4XCIsYy5sb29rdXBMaXN0SW5kZXhlcykpKX1dfSkpfWZ1bmN0aW9uIEcoYSxiKXt6LmNhbGwodGhpcyxcImxvb2t1cExpc3RUYWJsZVwiLEIoXCJsb29rdXBcIixhLGZ1bmN0aW9uKGEpe3ZhciBjPWJbYS5sb29rdXBUeXBlXTtyZXR1cm4geGUuYXNzZXJ0KCEhYyxcIlVuYWJsZSB0byB3cml0ZSBHU1VCIGxvb2t1cCB0eXBlIFwiK2EubG9va3VwVHlwZStcIiB0YWJsZXMuXCIpLG5ldyB6KFwibG9va3VwVGFibGVcIixbe25hbWU6XCJsb29rdXBUeXBlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEubG9va3VwVHlwZX0se25hbWU6XCJsb29rdXBGbGFnXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEubG9va3VwRmxhZ31dLmNvbmNhdChCKFwic3VidGFibGVcIixhLnN1YnRhYmxlcyxjKSkpfSkpfWZ1bmN0aW9uIEgoYSxiKXtyZXR1cm4gYS5nZXRVaW50OChiKX1mdW5jdGlvbiBJKGEsYil7cmV0dXJuIGEuZ2V0VWludDE2KGIsITEpfWZ1bmN0aW9uIEooYSxiKXtyZXR1cm4gYS5nZXRJbnQxNihiLCExKX1mdW5jdGlvbiBLKGEsYil7cmV0dXJuIGEuZ2V0VWludDMyKGIsITEpfWZ1bmN0aW9uIEwoYSxiKXtyZXR1cm4gYS5nZXRJbnQxNihiLCExKSthLmdldFVpbnQxNihiKzIsITEpLzY1NTM1fWZ1bmN0aW9uIE0oYSxiKXtmb3IodmFyIGM9XCJcIixkPWI7ZDxiKzQ7ZCs9MSljKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEuZ2V0SW50OChkKSk7cmV0dXJuIGN9ZnVuY3Rpb24gTihhLGIsYyl7Zm9yKHZhciBkPTAsZT0wO2U8YztlKz0xKWQ8PD04LGQrPWEuZ2V0VWludDgoYitlKTtyZXR1cm4gZH1mdW5jdGlvbiBPKGEsYixjKXtmb3IodmFyIGQ9W10sZT1iO2U8YztlKz0xKWQucHVzaChhLmdldFVpbnQ4KGUpKTtyZXR1cm4gZH1mdW5jdGlvbiBQKGEpe2Zvcih2YXIgYj1cIlwiLGM9MDtjPGEubGVuZ3RoO2MrPTEpYis9U3RyaW5nLmZyb21DaGFyQ29kZShhW2NdKTtyZXR1cm4gYn1mdW5jdGlvbiBRKGEsYil7dGhpcy5kYXRhPWEsdGhpcy5vZmZzZXQ9Yix0aGlzLnJlbGF0aXZlT2Zmc2V0PTB9ZnVuY3Rpb24gUihhLGIpe2IucGFyc2VVU2hvcnQoKSxhLmxlbmd0aD1iLnBhcnNlVUxvbmcoKSxhLmxhbmd1YWdlPWIucGFyc2VVTG9uZygpO3ZhciBjO2EuZ3JvdXBDb3VudD1jPWIucGFyc2VVTG9uZygpLGEuZ2x5cGhJbmRleE1hcD17fTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlmb3IodmFyIGU9Yi5wYXJzZVVMb25nKCksZj1iLnBhcnNlVUxvbmcoKSxnPWIucGFyc2VVTG9uZygpLGg9ZTtoPD1mO2grPTEpYS5nbHlwaEluZGV4TWFwW2hdPWcsZysrfWZ1bmN0aW9uIFMoYSxiLGMsZCxlKXthLmxlbmd0aD1iLnBhcnNlVVNob3J0KCksYS5sYW5ndWFnZT1iLnBhcnNlVVNob3J0KCk7dmFyIGY7YS5zZWdDb3VudD1mPWIucGFyc2VVU2hvcnQoKT4+MSxiLnNraXAoXCJ1U2hvcnRcIiwzKSxhLmdseXBoSW5kZXhNYXA9e307Zm9yKHZhciBnPW5ldyBMZS5QYXJzZXIoYyxkK2UrMTQpLGg9bmV3IExlLlBhcnNlcihjLGQrZSsxNisyKmYpLGk9bmV3IExlLlBhcnNlcihjLGQrZSsxNis0KmYpLGo9bmV3IExlLlBhcnNlcihjLGQrZSsxNis2KmYpLGs9ZCtlKzE2KzgqZixsPTA7bDxmLTE7bCs9MSlmb3IodmFyIG09dm9pZCAwLG49Zy5wYXJzZVVTaG9ydCgpLG89aC5wYXJzZVVTaG9ydCgpLHA9aS5wYXJzZVNob3J0KCkscT1qLnBhcnNlVVNob3J0KCkscj1vO3I8PW47cis9MSkwIT09cT8oaz1qLm9mZnNldCtqLnJlbGF0aXZlT2Zmc2V0LTIsays9cSxrKz0yKihyLW8pLDAhPT0obT1MZS5nZXRVU2hvcnQoYyxrKSkmJihtPW0rcCY2NTUzNSkpOm09citwJjY1NTM1LGEuZ2x5cGhJbmRleE1hcFtyXT1tfWZ1bmN0aW9uIFQoYSxiKXt2YXIgYz17fTtjLnZlcnNpb249TGUuZ2V0VVNob3J0KGEsYikseGUuYXJndW1lbnQoMD09PWMudmVyc2lvbixcImNtYXAgdGFibGUgdmVyc2lvbiBzaG91bGQgYmUgMC5cIiksYy5udW1UYWJsZXM9TGUuZ2V0VVNob3J0KGEsYisyKTtmb3IodmFyIGQ9LTEsZT1jLm51bVRhYmxlcy0xO2U+PTA7ZS09MSl7dmFyIGY9TGUuZ2V0VVNob3J0KGEsYis0KzgqZSksZz1MZS5nZXRVU2hvcnQoYSxiKzQrOCplKzIpO2lmKDM9PT1mJiYoMD09PWd8fDE9PT1nfHwxMD09PWcpfHwwPT09ZiYmKDA9PT1nfHwxPT09Z3x8Mj09PWd8fDM9PT1nfHw0PT09Zykpe2Q9TGUuZ2V0VUxvbmcoYSxiKzQrOCplKzQpO2JyZWFrfX1pZigtMT09PWQpdGhyb3cgbmV3IEVycm9yKFwiTm8gdmFsaWQgY21hcCBzdWItdGFibGVzIGZvdW5kLlwiKTt2YXIgaD1uZXcgTGUuUGFyc2VyKGEsYitkKTtpZihjLmZvcm1hdD1oLnBhcnNlVVNob3J0KCksMTI9PT1jLmZvcm1hdClSKGMsaCk7ZWxzZXtpZig0IT09Yy5mb3JtYXQpdGhyb3cgbmV3IEVycm9yKFwiT25seSBmb3JtYXQgNCBhbmQgMTIgY21hcCB0YWJsZXMgYXJlIHN1cHBvcnRlZCAoZm91bmQgZm9ybWF0IFwiK2MuZm9ybWF0K1wiKS5cIik7UyhjLGgsYSxiLGQpfXJldHVybiBjfWZ1bmN0aW9uIFUoYSxiLGMpe2Euc2VnbWVudHMucHVzaCh7ZW5kOmIsc3RhcnQ6YixkZWx0YTotKGItYyksb2Zmc2V0OjAsZ2x5cGhJbmRleDpjfSl9ZnVuY3Rpb24gVihhKXthLnNlZ21lbnRzLnB1c2goe2VuZDo2NTUzNSxzdGFydDo2NTUzNSxkZWx0YToxLG9mZnNldDowfSl9ZnVuY3Rpb24gVyhhKXt2YXIgYixjPSEwO2ZvcihiPWEubGVuZ3RoLTE7Yj4wO2ItPTEpe2lmKGEuZ2V0KGIpLnVuaWNvZGU+NjU1MzUpe2NvbnNvbGUubG9nKFwiQWRkaW5nIENNQVAgZm9ybWF0IDEyIChuZWVkZWQhKVwiKSxjPSExO2JyZWFrfX12YXIgZD1be25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibnVtVGFibGVzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmM/MToyfSx7bmFtZTpcInBsYXRmb3JtSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6M30se25hbWU6XCJlbmNvZGluZ0lEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwib2Zmc2V0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6Yz8xMjoyMH1dO2N8fChkPWQuY29uY2F0KFt7bmFtZTpcImNtYXAxMlBsYXRmb3JtSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6M30se25hbWU6XCJjbWFwMTJFbmNvZGluZ0lEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjEwfSx7bmFtZTpcImNtYXAxMk9mZnNldFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9XSkpLGQ9ZC5jb25jYXQoW3tuYW1lOlwiZm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjR9LHtuYW1lOlwiY21hcDRMZW5ndGhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJsYW5ndWFnZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNlZ0NvdW50WDJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzZWFyY2hSYW5nZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImVudHJ5U2VsZWN0b3JcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyYW5nZVNoaWZ0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSk7dmFyIGU9bmV3IEllLlRhYmxlKFwiY21hcFwiLGQpO2ZvcihlLnNlZ21lbnRzPVtdLGI9MDtiPGEubGVuZ3RoO2IrPTEpe2Zvcih2YXIgZj1hLmdldChiKSxnPTA7ZzxmLnVuaWNvZGVzLmxlbmd0aDtnKz0xKVUoZSxmLnVuaWNvZGVzW2ddLGIpO2Uuc2VnbWVudHM9ZS5zZWdtZW50cy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnQtYi5zdGFydH0pfVYoZSk7dmFyIGg9ZS5zZWdtZW50cy5sZW5ndGgsaT0wLGo9W10saz1bXSxsPVtdLG09W10sbj1bXSxvPVtdO2ZvcihiPTA7YjxoO2IrPTEpe3ZhciBwPWUuc2VnbWVudHNbYl07cC5lbmQ8PTY1NTM1JiZwLnN0YXJ0PD02NTUzNT8oaj1qLmNvbmNhdCh7bmFtZTpcImVuZF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLmVuZH0pLGs9ay5jb25jYXQoe25hbWU6XCJzdGFydF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLnN0YXJ0fSksbD1sLmNvbmNhdCh7bmFtZTpcImlkRGVsdGFfXCIrYix0eXBlOlwiU0hPUlRcIix2YWx1ZTpwLmRlbHRhfSksbT1tLmNvbmNhdCh7bmFtZTpcImlkUmFuZ2VPZmZzZXRfXCIrYix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6cC5vZmZzZXR9KSx2b2lkIDAhPT1wLmdseXBoSWQmJihuPW4uY29uY2F0KHtuYW1lOlwiZ2x5cGhfXCIrYix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6cC5nbHlwaElkfSkpKTppKz0xLGN8fHZvaWQgMD09PXAuZ2x5cGhJbmRleHx8KG89by5jb25jYXQoe25hbWU6XCJjbWFwMTJTdGFydF9cIitiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnAuc3RhcnR9KSxvPW8uY29uY2F0KHtuYW1lOlwiY21hcDEyRW5kX1wiK2IsdHlwZTpcIlVMT05HXCIsdmFsdWU6cC5lbmR9KSxvPW8uY29uY2F0KHtuYW1lOlwiY21hcDEyR2x5cGhfXCIrYix0eXBlOlwiVUxPTkdcIix2YWx1ZTpwLmdseXBoSW5kZXh9KSl9aWYoZS5zZWdDb3VudFgyPTIqKGgtaSksZS5zZWFyY2hSYW5nZT0yKk1hdGgucG93KDIsTWF0aC5mbG9vcihNYXRoLmxvZyhoLWkpL01hdGgubG9nKDIpKSksZS5lbnRyeVNlbGVjdG9yPU1hdGgubG9nKGUuc2VhcmNoUmFuZ2UvMikvTWF0aC5sb2coMiksZS5yYW5nZVNoaWZ0PWUuc2VnQ291bnRYMi1lLnNlYXJjaFJhbmdlLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChqKSxlLmZpZWxkcy5wdXNoKHtuYW1lOlwicmVzZXJ2ZWRQYWRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0pLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChrKSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQobCksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KG0pLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChuKSxlLmNtYXA0TGVuZ3RoPTE0KzIqai5sZW5ndGgrMisyKmsubGVuZ3RoKzIqbC5sZW5ndGgrMiptLmxlbmd0aCsyKm4ubGVuZ3RoLCFjKXt2YXIgcT0xNis0Km8ubGVuZ3RoO2UuY21hcDEyT2Zmc2V0PTIwK2UuY21hcDRMZW5ndGgsZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KFt7bmFtZTpcImNtYXAxMkZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxMn0se25hbWU6XCJjbWFwMTJSZXNlcnZlZFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImNtYXAxMkxlbmd0aFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnF9LHtuYW1lOlwiY21hcDEyTGFuZ3VhZ2VcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcImNtYXAxMm5Hcm91cHNcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTpvLmxlbmd0aC8zfV0pLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChvKX1yZXR1cm4gZX1mdW5jdGlvbiBYKGEpe3RoaXMuZm9udD1hfWZ1bmN0aW9uIFkoYSl7dGhpcy5jbWFwPWF9ZnVuY3Rpb24gWihhLGIpe3RoaXMuZW5jb2Rpbmc9YSx0aGlzLmNoYXJzZXQ9Yn1mdW5jdGlvbiAkKGEpe3ZhciBiPXRoaXM7c3dpdGNoKGEudmVyc2lvbil7Y2FzZSAxOnRoaXMubmFtZXM9UWUuc2xpY2UoKTticmVhaztjYXNlIDI6dGhpcy5uYW1lcz1uZXcgQXJyYXkoYS5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBjPTA7YzxhLm51bWJlck9mR2x5cGhzO2MrKylhLmdseXBoTmFtZUluZGV4W2NdPFFlLmxlbmd0aD9iLm5hbWVzW2NdPVFlW2EuZ2x5cGhOYW1lSW5kZXhbY11dOmIubmFtZXNbY109YS5uYW1lc1thLmdseXBoTmFtZUluZGV4W2NdLVFlLmxlbmd0aF07YnJlYWs7Y2FzZSAyLjU6dGhpcy5uYW1lcz1uZXcgQXJyYXkoYS5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBkPTA7ZDxhLm51bWJlck9mR2x5cGhzO2QrKyliLm5hbWVzW2RdPVFlW2QrYS5nbHlwaE5hbWVJbmRleFtkXV07YnJlYWs7Y2FzZSAzOmRlZmF1bHQ6dGhpcy5uYW1lcz1bXX19ZnVuY3Rpb24gXyhhKXtmb3IodmFyIGIsYz1hLnRhYmxlcy5jbWFwLmdseXBoSW5kZXhNYXAsZD1PYmplY3Qua2V5cyhjKSxlPTA7ZTxkLmxlbmd0aDtlKz0xKXt2YXIgZj1kW2VdLGc9Y1tmXTtiPWEuZ2x5cGhzLmdldChnKSxiLmFkZFVuaWNvZGUocGFyc2VJbnQoZikpfWZvcih2YXIgaD0wO2g8YS5nbHlwaHMubGVuZ3RoO2grPTEpYj1hLmdseXBocy5nZXQoaCksYS5jZmZFbmNvZGluZz9hLmlzQ0lERm9udD9iLm5hbWU9XCJnaWRcIitoOmIubmFtZT1hLmNmZkVuY29kaW5nLmNoYXJzZXRbaF06YS5nbHlwaE5hbWVzLm5hbWVzJiYoYi5uYW1lPWEuZ2x5cGhOYW1lcy5nbHlwaEluZGV4VG9OYW1lKGgpKX1mdW5jdGlvbiBhYShhLGIsYyxkLGUpe2EuYmVnaW5QYXRoKCksYS5tb3ZlVG8oYixjKSxhLmxpbmVUbyhkLGUpLGEuc3Ryb2tlKCl9ZnVuY3Rpb24gYmEoYSxiKXt2YXIgYz1ifHxuZXcgcjtyZXR1cm57Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJihjPWMoKSksY30sc2V0OmZ1bmN0aW9uKGEpe2M9YX19fWZ1bmN0aW9uIGNhKGEpe3RoaXMuYmluZENvbnN0cnVjdG9yVmFsdWVzKGEpfWZ1bmN0aW9uIGRhKGEsYixjKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5wYXRoLGFbY119LHNldDpmdW5jdGlvbihiKXthW2NdPWJ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9ZnVuY3Rpb24gZWEoYSxiKXt2YXIgYz10aGlzO2lmKHRoaXMuZm9udD1hLHRoaXMuZ2x5cGhzPXt9LEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspYy5nbHlwaHNbZF09YltkXTt0aGlzLmxlbmd0aD1iJiZiLmxlbmd0aHx8MH1mdW5jdGlvbiBmYShhLGIpe3JldHVybiBuZXcgY2Eoe2luZGV4OmIsZm9udDphfSl9ZnVuY3Rpb24gZ2EoYSxiLGMsZCxlLGYpe3JldHVybiBmdW5jdGlvbigpe3ZhciBnPW5ldyBjYSh7aW5kZXg6Yixmb250OmF9KTtyZXR1cm4gZy5wYXRoPWZ1bmN0aW9uKCl7YyhnLGQsZSk7dmFyIGI9ZihhLmdseXBocyxnKTtyZXR1cm4gYi51bml0c1BlckVtPWEudW5pdHNQZXJFbSxifSxkYShnLFwieE1pblwiLFwiX3hNaW5cIiksZGEoZyxcInhNYXhcIixcIl94TWF4XCIpLGRhKGcsXCJ5TWluXCIsXCJfeU1pblwiKSxkYShnLFwieU1heFwiLFwiX3lNYXhcIiksZ319ZnVuY3Rpb24gaGEoYSxiLGMsZCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bmV3IGNhKHtpbmRleDpiLGZvbnQ6YX0pO3JldHVybiBlLnBhdGg9ZnVuY3Rpb24oKXt2YXIgYj1jKGEsZSxkKTtyZXR1cm4gYi51bml0c1BlckVtPWEudW5pdHNQZXJFbSxifSxlfX1mdW5jdGlvbiBpYShhLGIpe2lmKGE9PT1iKXJldHVybiEwO2lmKEFycmF5LmlzQXJyYXkoYSkmJkFycmF5LmlzQXJyYXkoYikpe2lmKGEubGVuZ3RoIT09Yi5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0xKWlmKCFpYShhW2NdLGJbY10pKXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGphKGEpe3JldHVybiBhLmxlbmd0aDwxMjQwPzEwNzphLmxlbmd0aDwzMzkwMD8xMTMxOjMyNzY4fWZ1bmN0aW9uIGthKGEsYixjKXt2YXIgZCxlLGY9W10sZz1bXSxoPUxlLmdldENhcmQxNihhLGIpO2lmKDAhPT1oKXt2YXIgaT1MZS5nZXRCeXRlKGEsYisyKTtkPWIrKGgrMSkqaSsyO2Zvcih2YXIgaj1iKzMsaz0wO2s8aCsxO2srPTEpZi5wdXNoKExlLmdldE9mZnNldChhLGosaSkpLGorPWk7ZT1kK2ZbaF19ZWxzZSBlPWIrMjtmb3IodmFyIGw9MDtsPGYubGVuZ3RoLTE7bCs9MSl7dmFyIG09TGUuZ2V0Qnl0ZXMoYSxkK2ZbbF0sZCtmW2wrMV0pO2MmJihtPWMobSkpLGcucHVzaChtKX1yZXR1cm57b2JqZWN0czpnLHN0YXJ0T2Zmc2V0OmIsZW5kT2Zmc2V0OmV9fWZ1bmN0aW9uIGxhKGEpe2Zvcih2YXIgYj1cIlwiLGM9MTUsZD1bXCIwXCIsXCIxXCIsXCIyXCIsXCIzXCIsXCI0XCIsXCI1XCIsXCI2XCIsXCI3XCIsXCI4XCIsXCI5XCIsXCIuXCIsXCJFXCIsXCJFLVwiLG51bGwsXCItXCJdOzspe3ZhciBlPWEucGFyc2VCeXRlKCksZj1lPj40LGc9MTUmZTtpZihmPT09YylicmVhaztpZihiKz1kW2ZdLGc9PT1jKWJyZWFrO2IrPWRbZ119cmV0dXJuIHBhcnNlRmxvYXQoYil9ZnVuY3Rpb24gbWEoYSxiKXt2YXIgYyxkLGUsZjtpZigyOD09PWIpcmV0dXJuIGM9YS5wYXJzZUJ5dGUoKSxkPWEucGFyc2VCeXRlKCksYzw8OHxkO2lmKDI5PT09YilyZXR1cm4gYz1hLnBhcnNlQnl0ZSgpLGQ9YS5wYXJzZUJ5dGUoKSxlPWEucGFyc2VCeXRlKCksZj1hLnBhcnNlQnl0ZSgpLGM8PDI0fGQ8PDE2fGU8PDh8ZjtpZigzMD09PWIpcmV0dXJuIGxhKGEpO2lmKGI+PTMyJiZiPD0yNDYpcmV0dXJuIGItMTM5O2lmKGI+PTI0NyYmYjw9MjUwKXJldHVybiBjPWEucGFyc2VCeXRlKCksMjU2KihiLTI0NykrYysxMDg7aWYoYj49MjUxJiZiPD0yNTQpcmV0dXJuIGM9YS5wYXJzZUJ5dGUoKSwyNTYqLShiLTI1MSktYy0xMDg7dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiMCBcIitiKX1mdW5jdGlvbiBuYShhKXtmb3IodmFyIGI9e30sYz0wO2M8YS5sZW5ndGg7Yys9MSl7dmFyIGQ9YVtjXVswXSxlPWFbY11bMV0sZj12b2lkIDA7aWYoZj0xPT09ZS5sZW5ndGg/ZVswXTplLGIuaGFzT3duUHJvcGVydHkoZCkmJiFpc05hTihiW2RdKSl0aHJvdyBuZXcgRXJyb3IoXCJPYmplY3QgXCIrYitcIiBhbHJlYWR5IGhhcyBrZXkgXCIrZCk7YltkXT1mfXJldHVybiBifWZ1bmN0aW9uIG9hKGEsYixjKXtiPXZvaWQgMCE9PWI/YjowO3ZhciBkPW5ldyBMZS5QYXJzZXIoYSxiKSxlPVtdLGY9W107Zm9yKGM9dm9pZCAwIT09Yz9jOmEubGVuZ3RoO2QucmVsYXRpdmVPZmZzZXQ8Yzspe3ZhciBnPWQucGFyc2VCeXRlKCk7Zzw9MjE/KDEyPT09ZyYmKGc9MTIwMCtkLnBhcnNlQnl0ZSgpKSxlLnB1c2goW2csZl0pLGY9W10pOmYucHVzaChtYShkLGcpKX1yZXR1cm4gbmEoZSl9ZnVuY3Rpb24gcGEoYSxiKXtyZXR1cm4gYj1iPD0zOTA/TmVbYl06YVtiLTM5MV19ZnVuY3Rpb24gcWEoYSxiLGMpe2Zvcih2YXIgZCxlPXt9LGY9MDtmPGIubGVuZ3RoO2YrPTEpe3ZhciBnPWJbZl07aWYoQXJyYXkuaXNBcnJheShnLnR5cGUpKXt2YXIgaD1bXTtoLmxlbmd0aD1nLnR5cGUubGVuZ3RoO2Zvcih2YXIgaT0wO2k8Zy50eXBlLmxlbmd0aDtpKyspZD12b2lkIDAhPT1hW2cub3BdP2FbZy5vcF1baV06dm9pZCAwLHZvaWQgMD09PWQmJihkPXZvaWQgMCE9PWcudmFsdWUmJnZvaWQgMCE9PWcudmFsdWVbaV0/Zy52YWx1ZVtpXTpudWxsKSxcIlNJRFwiPT09Zy50eXBlW2ldJiYoZD1wYShjLGQpKSxoW2ldPWQ7ZVtnLm5hbWVdPWh9ZWxzZSBkPWFbZy5vcF0sdm9pZCAwPT09ZCYmKGQ9dm9pZCAwIT09Zy52YWx1ZT9nLnZhbHVlOm51bGwpLFwiU0lEXCI9PT1nLnR5cGUmJihkPXBhKGMsZCkpLGVbZy5uYW1lXT1kfXJldHVybiBlfWZ1bmN0aW9uIHJhKGEsYil7dmFyIGM9e307cmV0dXJuIGMuZm9ybWF0TWFqb3I9TGUuZ2V0Q2FyZDgoYSxiKSxjLmZvcm1hdE1pbm9yPUxlLmdldENhcmQ4KGEsYisxKSxjLnNpemU9TGUuZ2V0Q2FyZDgoYSxiKzIpLGMub2Zmc2V0U2l6ZT1MZS5nZXRDYXJkOChhLGIrMyksYy5zdGFydE9mZnNldD1iLGMuZW5kT2Zmc2V0PWIrNCxjfWZ1bmN0aW9uIHNhKGEsYil7cmV0dXJuIHFhKG9hKGEsMCxhLmJ5dGVMZW5ndGgpLFRlLGIpfWZ1bmN0aW9uIHRhKGEsYixjLGQpe3JldHVybiBxYShvYShhLGIsYyksVWUsZCl9ZnVuY3Rpb24gdWEoYSxiLGMsZCl7Zm9yKHZhciBlPVtdLGY9MDtmPGMubGVuZ3RoO2YrPTEpe3ZhciBnPW5ldyBEYXRhVmlldyhuZXcgVWludDhBcnJheShjW2ZdKS5idWZmZXIpLGg9c2EoZyxkKTtoLl9zdWJycz1bXSxoLl9zdWJyc0JpYXM9MDt2YXIgaT1oLnByaXZhdGVbMF0saj1oLnByaXZhdGVbMV07aWYoMCE9PWkmJjAhPT1qKXt2YXIgaz10YShhLGorYixpLGQpO2lmKGguX2RlZmF1bHRXaWR0aFg9ay5kZWZhdWx0V2lkdGhYLGguX25vbWluYWxXaWR0aFg9ay5ub21pbmFsV2lkdGhYLDAhPT1rLnN1YnJzKXt2YXIgbD1qK2suc3VicnMsbT1rYShhLGwrYik7aC5fc3VicnM9bS5vYmplY3RzLGguX3N1YnJzQmlhcz1qYShoLl9zdWJycyl9aC5fcHJpdmF0ZURpY3Q9a31lLnB1c2goaCl9cmV0dXJuIGV9ZnVuY3Rpb24gdmEoYSxiLGMsZCl7dmFyIGUsZixnPW5ldyBMZS5QYXJzZXIoYSxiKTtjLT0xO3ZhciBoPVtcIi5ub3RkZWZcIl0saT1nLnBhcnNlQ2FyZDgoKTtpZigwPT09aSlmb3IodmFyIGo9MDtqPGM7ais9MSllPWcucGFyc2VTSUQoKSxoLnB1c2gocGEoZCxlKSk7ZWxzZSBpZigxPT09aSlmb3IoO2gubGVuZ3RoPD1jOyl7ZT1nLnBhcnNlU0lEKCksZj1nLnBhcnNlQ2FyZDgoKTtmb3IodmFyIGs9MDtrPD1mO2srPTEpaC5wdXNoKHBhKGQsZSkpLGUrPTF9ZWxzZXtpZigyIT09aSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGNoYXJzZXQgZm9ybWF0IFwiK2kpO2Zvcig7aC5sZW5ndGg8PWM7KXtlPWcucGFyc2VTSUQoKSxmPWcucGFyc2VDYXJkMTYoKTtmb3IodmFyIGw9MDtsPD1mO2wrPTEpaC5wdXNoKHBhKGQsZSkpLGUrPTF9fXJldHVybiBofWZ1bmN0aW9uIHdhKGEsYixjKXt2YXIgZCxlPXt9LGY9bmV3IExlLlBhcnNlcihhLGIpLGc9Zi5wYXJzZUNhcmQ4KCk7aWYoMD09PWcpZm9yKHZhciBoPWYucGFyc2VDYXJkOCgpLGk9MDtpPGg7aSs9MSlkPWYucGFyc2VDYXJkOCgpLGVbZF09aTtlbHNle2lmKDEhPT1nKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gZW5jb2RpbmcgZm9ybWF0IFwiK2cpO3ZhciBqPWYucGFyc2VDYXJkOCgpO2Q9MTtmb3IodmFyIGs9MDtrPGo7ays9MSlmb3IodmFyIGw9Zi5wYXJzZUNhcmQ4KCksbT1mLnBhcnNlQ2FyZDgoKSxuPWw7bjw9bCttO24rPTEpZVtuXT1kLGQrPTF9cmV0dXJuIG5ldyBaKGUsYyl9ZnVuY3Rpb24geGEoYSxiLGMpe2Z1bmN0aW9uIGQoYSxiKXt0JiZvLmNsb3NlUGF0aCgpLG8ubW92ZVRvKGEsYiksdD0hMH1mdW5jdGlvbiBlKCl7dmFyIGE7YT1wLmxlbmd0aCUyIT0wLGEmJiFzJiYoeT1wLnNoaWZ0KCkrbikscSs9cC5sZW5ndGg+PjEscC5sZW5ndGg9MCxzPSEwfWZ1bmN0aW9uIGYoYyl7Zm9yKHZhciBtLHIsdyx4LHosQSxCLEMsRCxFLEYsRyxIPTA7SDxjLmxlbmd0aDspe3ZhciBJPWNbSF07c3dpdGNoKEgrPTEsSSl7Y2FzZSAxOmNhc2UgMzplKCk7YnJlYWs7Y2FzZSA0OnAubGVuZ3RoPjEmJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx2Kz1wLnBvcCgpLGQodSx2KTticmVhaztjYXNlIDU6Zm9yKDtwLmxlbmd0aD4wOyl1Kz1wLnNoaWZ0KCksdis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7YnJlYWs7Y2FzZSA2OmZvcig7cC5sZW5ndGg+MCYmKHUrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpLDAhPT1wLmxlbmd0aCk7KXYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2JyZWFrO2Nhc2UgNzpmb3IoO3AubGVuZ3RoPjAmJih2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KSwwIT09cC5sZW5ndGgpOyl1Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTticmVhaztjYXNlIDg6Zm9yKDtwLmxlbmd0aD4wOylnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLFxudT1pK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAxMDp6PXAucG9wKCkrbCxBPWtbel0sQSYmZihBKTticmVhaztjYXNlIDExOnJldHVybjtjYXNlIDEyOnN3aXRjaChJPWNbSF0sSCs9MSxJKXtjYXNlIDM1Omc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWorcC5zaGlmdCgpLEQ9QitwLnNoaWZ0KCksRT1DK3Auc2hpZnQoKSxGPUQrcC5zaGlmdCgpLEc9RStwLnNoaWZ0KCksdT1GK3Auc2hpZnQoKSx2PUcrcC5zaGlmdCgpLHAuc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaixCLEMpLG8uY3VydmVUbyhELEUsRixHLHUsdik7YnJlYWs7Y2FzZSAzNDpnPXUrcC5zaGlmdCgpLGg9dixpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWosRD1CK3Auc2hpZnQoKSxFPWosRj1EK3Auc2hpZnQoKSxHPXYsdT1GK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaixCLEMpLG8uY3VydmVUbyhELEUsRixHLHUsdik7YnJlYWs7Y2FzZSAzNjpnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLEI9aStwLnNoaWZ0KCksQz1qLEQ9QitwLnNoaWZ0KCksRT1qLEY9RCtwLnNoaWZ0KCksRz1FK3Auc2hpZnQoKSx1PUYrcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztjYXNlIDM3Omc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWorcC5zaGlmdCgpLEQ9QitwLnNoaWZ0KCksRT1DK3Auc2hpZnQoKSxGPUQrcC5zaGlmdCgpLEc9RStwLnNoaWZ0KCksTWF0aC5hYnMoRi11KT5NYXRoLmFicyhHLXYpP3U9RitwLnNoaWZ0KCk6dj1HK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaixCLEMpLG8uY3VydmVUbyhELEUsRixHLHUsdik7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmxvZyhcIkdseXBoIFwiK2IuaW5kZXgrXCI6IHVua25vd24gb3BlcmF0b3IgMTIwMFwiK0kpLHAubGVuZ3RoPTB9YnJlYWs7Y2FzZSAxNDpwLmxlbmd0aD4wJiYhcyYmKHk9cC5zaGlmdCgpK24scz0hMCksdCYmKG8uY2xvc2VQYXRoKCksdD0hMSk7YnJlYWs7Y2FzZSAxODplKCk7YnJlYWs7Y2FzZSAxOTpjYXNlIDIwOmUoKSxIKz1xKzc+PjM7YnJlYWs7Y2FzZSAyMTpwLmxlbmd0aD4yJiYhcyYmKHk9cC5zaGlmdCgpK24scz0hMCksdis9cC5wb3AoKSx1Kz1wLnBvcCgpLGQodSx2KTticmVhaztjYXNlIDIyOnAubGVuZ3RoPjEmJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx1Kz1wLnBvcCgpLGQodSx2KTticmVhaztjYXNlIDIzOmUoKTticmVhaztjYXNlIDI0OmZvcig7cC5sZW5ndGg+MjspZz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTt1Kz1wLnNoaWZ0KCksdis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7YnJlYWs7Y2FzZSAyNTpmb3IoO3AubGVuZ3RoPjY7KXUrPXAuc2hpZnQoKSx2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTtnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMjY6Zm9yKHAubGVuZ3RoJTImJih1Kz1wLnNoaWZ0KCkpO3AubGVuZ3RoPjA7KWc9dSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWksdj1qK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMjc6Zm9yKHAubGVuZ3RoJTImJih2Kz1wLnNoaWZ0KCkpO3AubGVuZ3RoPjA7KWc9dStwLnNoaWZ0KCksaD12LGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aixvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMjg6bT1jW0hdLHI9Y1tIKzFdLHAucHVzaCgobTw8MjR8cjw8MTYpPj4xNiksSCs9MjticmVhaztjYXNlIDI5Ono9cC5wb3AoKSthLmdzdWJyc0JpYXMsQT1hLmdzdWJyc1t6XSxBJiZmKEEpO2JyZWFrO2Nhc2UgMzA6Zm9yKDtwLmxlbmd0aD4wJiYoZz11LGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qKygxPT09cC5sZW5ndGg/cC5zaGlmdCgpOjApLG8uY3VydmVUbyhnLGgsaSxqLHUsdiksMCE9PXAubGVuZ3RoKTspZz11K3Auc2hpZnQoKSxoPXYsaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksdT1pKygxPT09cC5sZW5ndGg/cC5zaGlmdCgpOjApLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAzMTpmb3IoO3AubGVuZ3RoPjAmJihnPXUrcC5zaGlmdCgpLGg9dixpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSx1PWkrKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KSwwIT09cC5sZW5ndGgpOylnPXUsaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWorKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztkZWZhdWx0Okk8MzI/Y29uc29sZS5sb2coXCJHbHlwaCBcIitiLmluZGV4K1wiOiB1bmtub3duIG9wZXJhdG9yIFwiK0kpOkk8MjQ3P3AucHVzaChJLTEzOSk6STwyNTE/KG09Y1tIXSxIKz0xLHAucHVzaCgyNTYqKEktMjQ3KSttKzEwOCkpOkk8MjU1PyhtPWNbSF0sSCs9MSxwLnB1c2goMjU2Ki0oSS0yNTEpLW0tMTA4KSk6KG09Y1tIXSxyPWNbSCsxXSx3PWNbSCsyXSx4PWNbSCszXSxIKz00LHAucHVzaCgobTw8MjR8cjw8MTZ8dzw8OHx4KS82NTUzNikpfX19dmFyIGcsaCxpLGosayxsLG0sbixvPW5ldyByLHA9W10scT0wLHM9ITEsdD0hMSx1PTAsdj0wO2lmKGEuaXNDSURGb250KXt2YXIgdz1hLnRhYmxlcy5jZmYudG9wRGljdC5fZmRTZWxlY3RbYi5pbmRleF0seD1hLnRhYmxlcy5jZmYudG9wRGljdC5fZmRBcnJheVt3XTtrPXguX3N1YnJzLGw9eC5fc3VicnNCaWFzLG09eC5fZGVmYXVsdFdpZHRoWCxuPXguX25vbWluYWxXaWR0aFh9ZWxzZSBrPWEudGFibGVzLmNmZi50b3BEaWN0Ll9zdWJycyxsPWEudGFibGVzLmNmZi50b3BEaWN0Ll9zdWJyc0JpYXMsbT1hLnRhYmxlcy5jZmYudG9wRGljdC5fZGVmYXVsdFdpZHRoWCxuPWEudGFibGVzLmNmZi50b3BEaWN0Ll9ub21pbmFsV2lkdGhYO3ZhciB5PW07cmV0dXJuIGYoYyksYi5hZHZhbmNlV2lkdGg9eSxvfWZ1bmN0aW9uIHlhKGEsYixjLGQpe3ZhciBlLGY9W10sZz1uZXcgTGUuUGFyc2VyKGEsYiksaD1nLnBhcnNlQ2FyZDgoKTtpZigwPT09aClmb3IodmFyIGk9MDtpPGM7aSsrKXtpZigoZT1nLnBhcnNlQ2FyZDgoKSk+PWQpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIHRhYmxlIENJRCBGb250IEZEU2VsZWN0IGhhcyBiYWQgRkQgaW5kZXggdmFsdWUgXCIrZStcIiAoRkQgY291bnQgXCIrZCtcIilcIik7Zi5wdXNoKGUpfWVsc2V7aWYoMyE9PWgpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIFRhYmxlIENJRCBGb250IEZEU2VsZWN0IHRhYmxlIGhhcyB1bnN1cHBvcnRlZCBmb3JtYXQgXCIraCk7dmFyIGo9Zy5wYXJzZUNhcmQxNigpLGs9Zy5wYXJzZUNhcmQxNigpO2lmKDAhPT1rKXRocm93IG5ldyBFcnJvcihcIkNGRiBUYWJsZSBDSUQgRm9udCBGRFNlbGVjdCBmb3JtYXQgMyByYW5nZSBoYXMgYmFkIGluaXRpYWwgR0lEIFwiK2spO2Zvcih2YXIgbCxtPTA7bTxqO20rKyl7aWYoZT1nLnBhcnNlQ2FyZDgoKSxsPWcucGFyc2VDYXJkMTYoKSxlPj1kKXRocm93IG5ldyBFcnJvcihcIkNGRiB0YWJsZSBDSUQgRm9udCBGRFNlbGVjdCBoYXMgYmFkIEZEIGluZGV4IHZhbHVlIFwiK2UrXCIgKEZEIGNvdW50IFwiK2QrXCIpXCIpO2lmKGw+Yyl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgVGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgZm9ybWF0IDMgcmFuZ2UgaGFzIGJhZCBHSUQgXCIrbCk7Zm9yKDtrPGw7aysrKWYucHVzaChlKTtrPWx9aWYobCE9PWMpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIFRhYmxlIENJRCBGb250IEZEU2VsZWN0IGZvcm1hdCAzIHJhbmdlIGhhcyBiYWQgZmluYWwgR0lEIFwiK2wpfXJldHVybiBmfWZ1bmN0aW9uIHphKGEsYixjKXtjLnRhYmxlcy5jZmY9e307dmFyIGQ9cmEoYSxiKSxlPWthKGEsZC5lbmRPZmZzZXQsTGUuYnl0ZXNUb1N0cmluZyksZj1rYShhLGUuZW5kT2Zmc2V0KSxnPWthKGEsZi5lbmRPZmZzZXQsTGUuYnl0ZXNUb1N0cmluZyksaD1rYShhLGcuZW5kT2Zmc2V0KTtjLmdzdWJycz1oLm9iamVjdHMsYy5nc3VicnNCaWFzPWphKGMuZ3N1YnJzKTt2YXIgaT11YShhLGIsZi5vYmplY3RzLGcub2JqZWN0cyk7aWYoMSE9PWkubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkNGRiB0YWJsZSBoYXMgdG9vIG1hbnkgZm9udHMgaW4gJ0ZvbnRTZXQnIC0gY291bnQgb2YgZm9udHMgTmFtZUluZGV4Lmxlbmd0aCA9IFwiK2kubGVuZ3RoKTt2YXIgaj1pWzBdO2lmKGMudGFibGVzLmNmZi50b3BEaWN0PWosai5fcHJpdmF0ZURpY3QmJihjLmRlZmF1bHRXaWR0aFg9ai5fcHJpdmF0ZURpY3QuZGVmYXVsdFdpZHRoWCxjLm5vbWluYWxXaWR0aFg9ai5fcHJpdmF0ZURpY3Qubm9taW5hbFdpZHRoWCksdm9pZCAwIT09ai5yb3NbMF0mJnZvaWQgMCE9PWoucm9zWzFdJiYoYy5pc0NJREZvbnQ9ITApLGMuaXNDSURGb250KXt2YXIgaz1qLmZkQXJyYXksbD1qLmZkU2VsZWN0O2lmKDA9PT1rfHwwPT09bCl0aHJvdyBuZXcgRXJyb3IoXCJGb250IGlzIG1hcmtlZCBhcyBhIENJRCBmb250LCBidXQgRkRBcnJheSBhbmQvb3IgRkRTZWxlY3QgaW5mb3JtYXRpb24gaXMgbWlzc2luZ1wiKTtrKz1iO3ZhciBtPWthKGEsayksbj11YShhLGIsbS5vYmplY3RzLGcub2JqZWN0cyk7ai5fZmRBcnJheT1uLGwrPWIsai5fZmRTZWxlY3Q9eWEoYSxsLGMubnVtR2x5cGhzLG4ubGVuZ3RoKX12YXIgbz1iK2oucHJpdmF0ZVsxXSxwPXRhKGEsbyxqLnByaXZhdGVbMF0sZy5vYmplY3RzKTtpZihjLmRlZmF1bHRXaWR0aFg9cC5kZWZhdWx0V2lkdGhYLGMubm9taW5hbFdpZHRoWD1wLm5vbWluYWxXaWR0aFgsMCE9PXAuc3VicnMpe3ZhciBxPW8rcC5zdWJycyxyPWthKGEscSk7Yy5zdWJycz1yLm9iamVjdHMsYy5zdWJyc0JpYXM9amEoYy5zdWJycyl9ZWxzZSBjLnN1YnJzPVtdLGMuc3VicnNCaWFzPTA7dmFyIHM9a2EoYSxiK2ouY2hhclN0cmluZ3MpO2MubkdseXBocz1zLm9iamVjdHMubGVuZ3RoO3ZhciB0PXZhKGEsYitqLmNoYXJzZXQsYy5uR2x5cGhzLGcub2JqZWN0cyk7MD09PWouZW5jb2Rpbmc/Yy5jZmZFbmNvZGluZz1uZXcgWihPZSx0KToxPT09ai5lbmNvZGluZz9jLmNmZkVuY29kaW5nPW5ldyBaKFBlLHQpOmMuY2ZmRW5jb2Rpbmc9d2EoYSxiK2ouZW5jb2RpbmcsdCksYy5lbmNvZGluZz1jLmVuY29kaW5nfHxjLmNmZkVuY29kaW5nLGMuZ2x5cGhzPW5ldyBTZS5HbHlwaFNldChjKTtmb3IodmFyIHU9MDt1PGMubkdseXBoczt1Kz0xKXt2YXIgdj1zLm9iamVjdHNbdV07Yy5nbHlwaHMucHVzaCh1LFNlLmNmZkdseXBoTG9hZGVyKGMsdSx4YSx2KSl9fWZ1bmN0aW9uIEFhKGEsYil7dmFyIGMsZD1OZS5pbmRleE9mKGEpO3JldHVybiBkPj0wJiYoYz1kKSxkPWIuaW5kZXhPZihhKSxkPj0wP2M9ZCtOZS5sZW5ndGg6KGM9TmUubGVuZ3RoK2IubGVuZ3RoLGIucHVzaChhKSksY31mdW5jdGlvbiBCYSgpe3JldHVybiBuZXcgSWUuUmVjb3JkKFwiSGVhZGVyXCIsW3tuYW1lOlwibWFqb3JcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZToxfSx7bmFtZTpcIm1pbm9yXCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6MH0se25hbWU6XCJoZHJTaXplXCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6NH0se25hbWU6XCJtYWpvclwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjF9XSl9ZnVuY3Rpb24gQ2EoYSl7dmFyIGI9bmV3IEllLlJlY29yZChcIk5hbWUgSU5ERVhcIixbe25hbWU6XCJuYW1lc1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pO2IubmFtZXM9W107Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0xKWIubmFtZXMucHVzaCh7bmFtZTpcIm5hbWVfXCIrYyx0eXBlOlwiTkFNRVwiLHZhbHVlOmFbY119KTtyZXR1cm4gYn1mdW5jdGlvbiBEYShhLGIsYyl7Zm9yKHZhciBkPXt9LGU9MDtlPGEubGVuZ3RoO2UrPTEpe3ZhciBmPWFbZV0sZz1iW2YubmFtZV07dm9pZCAwPT09Z3x8aWEoZyxmLnZhbHVlKXx8KFwiU0lEXCI9PT1mLnR5cGUmJihnPUFhKGcsYykpLGRbZi5vcF09e25hbWU6Zi5uYW1lLHR5cGU6Zi50eXBlLHZhbHVlOmd9KX1yZXR1cm4gZH1mdW5jdGlvbiBFYShhLGIpe3ZhciBjPW5ldyBJZS5SZWNvcmQoXCJUb3AgRElDVFwiLFt7bmFtZTpcImRpY3RcIix0eXBlOlwiRElDVFwiLHZhbHVlOnt9fV0pO3JldHVybiBjLmRpY3Q9RGEoVGUsYSxiKSxjfWZ1bmN0aW9uIEZhKGEpe3ZhciBiPW5ldyBJZS5SZWNvcmQoXCJUb3AgRElDVCBJTkRFWFwiLFt7bmFtZTpcInRvcERpY3RzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSk7cmV0dXJuIGIudG9wRGljdHM9W3tuYW1lOlwidG9wRGljdF8wXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6YX1dLGJ9ZnVuY3Rpb24gR2EoYSl7dmFyIGI9bmV3IEllLlJlY29yZChcIlN0cmluZyBJTkRFWFwiLFt7bmFtZTpcInN0cmluZ3NcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKTtiLnN0cmluZ3M9W107Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0xKWIuc3RyaW5ncy5wdXNoKHtuYW1lOlwic3RyaW5nX1wiK2MsdHlwZTpcIlNUUklOR1wiLHZhbHVlOmFbY119KTtyZXR1cm4gYn1mdW5jdGlvbiBIYSgpe3JldHVybiBuZXcgSWUuUmVjb3JkKFwiR2xvYmFsIFN1YnIgSU5ERVhcIixbe25hbWU6XCJzdWJyc1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pfWZ1bmN0aW9uIElhKGEsYil7Zm9yKHZhciBjPW5ldyBJZS5SZWNvcmQoXCJDaGFyc2V0c1wiLFt7bmFtZTpcImZvcm1hdFwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjB9XSksZD0wO2Q8YS5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXSxmPUFhKGUsYik7Yy5maWVsZHMucHVzaCh7bmFtZTpcImdseXBoX1wiK2QsdHlwZTpcIlNJRFwiLHZhbHVlOmZ9KX1yZXR1cm4gY31mdW5jdGlvbiBKYShhKXt2YXIgYj1bXSxjPWEucGF0aDtiLnB1c2goe25hbWU6XCJ3aWR0aFwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTphLmFkdmFuY2VXaWR0aH0pO2Zvcih2YXIgZD0wLGU9MCxmPTA7ZjxjLmNvbW1hbmRzLmxlbmd0aDtmKz0xKXt2YXIgZz12b2lkIDAsaD12b2lkIDAsaT1jLmNvbW1hbmRzW2ZdO2lmKFwiUVwiPT09aS50eXBlKXt2YXIgaj0xLzMsaz0yLzM7aT17dHlwZTpcIkNcIix4OmkueCx5OmkueSx4MTpqKmQrayppLngxLHkxOmoqZStrKmkueTEseDI6aippLngrayppLngxLHkyOmoqaS55K2sqaS55MX19aWYoXCJNXCI9PT1pLnR5cGUpZz1NYXRoLnJvdW5kKGkueC1kKSxoPU1hdGgucm91bmQoaS55LWUpLGIucHVzaCh7bmFtZTpcImR4XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmd9KSxiLnB1c2goe25hbWU6XCJkeVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpofSksYi5wdXNoKHtuYW1lOlwicm1vdmV0b1wiLHR5cGU6XCJPUFwiLHZhbHVlOjIxfSksZD1NYXRoLnJvdW5kKGkueCksZT1NYXRoLnJvdW5kKGkueSk7ZWxzZSBpZihcIkxcIj09PWkudHlwZSlnPU1hdGgucm91bmQoaS54LWQpLGg9TWF0aC5yb3VuZChpLnktZSksYi5wdXNoKHtuYW1lOlwiZHhcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6Z30pLGIucHVzaCh7bmFtZTpcImR5XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmh9KSxiLnB1c2goe25hbWU6XCJybGluZXRvXCIsdHlwZTpcIk9QXCIsdmFsdWU6NX0pLGQ9TWF0aC5yb3VuZChpLngpLGU9TWF0aC5yb3VuZChpLnkpO2Vsc2UgaWYoXCJDXCI9PT1pLnR5cGUpe3ZhciBsPU1hdGgucm91bmQoaS54MS1kKSxtPU1hdGgucm91bmQoaS55MS1lKSxuPU1hdGgucm91bmQoaS54Mi1pLngxKSxvPU1hdGgucm91bmQoaS55Mi1pLnkxKTtnPU1hdGgucm91bmQoaS54LWkueDIpLGg9TWF0aC5yb3VuZChpLnktaS55MiksYi5wdXNoKHtuYW1lOlwiZHgxXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmx9KSxiLnB1c2goe25hbWU6XCJkeTFcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6bX0pLGIucHVzaCh7bmFtZTpcImR4MlwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpufSksYi5wdXNoKHtuYW1lOlwiZHkyXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOm99KSxiLnB1c2goe25hbWU6XCJkeFwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpnfSksYi5wdXNoKHtuYW1lOlwiZHlcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6aH0pLGIucHVzaCh7bmFtZTpcInJyY3VydmV0b1wiLHR5cGU6XCJPUFwiLHZhbHVlOjh9KSxkPU1hdGgucm91bmQoaS54KSxlPU1hdGgucm91bmQoaS55KX19cmV0dXJuIGIucHVzaCh7bmFtZTpcImVuZGNoYXJcIix0eXBlOlwiT1BcIix2YWx1ZToxNH0pLGJ9ZnVuY3Rpb24gS2EoYSl7Zm9yKHZhciBiPW5ldyBJZS5SZWNvcmQoXCJDaGFyU3RyaW5ncyBJTkRFWFwiLFt7bmFtZTpcImNoYXJTdHJpbmdzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSksYz0wO2M8YS5sZW5ndGg7Yys9MSl7dmFyIGQ9YS5nZXQoYyksZT1KYShkKTtiLmNoYXJTdHJpbmdzLnB1c2goe25hbWU6ZC5uYW1lLHR5cGU6XCJDSEFSU1RSSU5HXCIsdmFsdWU6ZX0pfXJldHVybiBifWZ1bmN0aW9uIExhKGEsYil7dmFyIGM9bmV3IEllLlJlY29yZChcIlByaXZhdGUgRElDVFwiLFt7bmFtZTpcImRpY3RcIix0eXBlOlwiRElDVFwiLHZhbHVlOnt9fV0pO3JldHVybiBjLmRpY3Q9RGEoVWUsYSxiKSxjfWZ1bmN0aW9uIE1hKGEsYil7Zm9yKHZhciBjLGQ9bmV3IEllLlRhYmxlKFwiQ0ZGIFwiLFt7bmFtZTpcImhlYWRlclwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJuYW1lSW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwidG9wRGljdEluZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcInN0cmluZ0luZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcImdsb2JhbFN1YnJJbmRleFwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJjaGFyc2V0c1wiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJjaGFyU3RyaW5nc0luZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcInByaXZhdGVEaWN0XCIsdHlwZTpcIlJFQ09SRFwifV0pLGU9MS9iLnVuaXRzUGVyRW0sZj17dmVyc2lvbjpiLnZlcnNpb24sZnVsbE5hbWU6Yi5mdWxsTmFtZSxmYW1pbHlOYW1lOmIuZmFtaWx5TmFtZSx3ZWlnaHQ6Yi53ZWlnaHROYW1lLGZvbnRCQm94OmIuZm9udEJCb3h8fFswLDAsMCwwXSxmb250TWF0cml4OltlLDAsMCxlLDAsMF0sY2hhcnNldDo5OTksZW5jb2Rpbmc6MCxjaGFyU3RyaW5nczo5OTkscHJpdmF0ZTpbMCw5OTldfSxnPXt9LGg9W10saT0xO2k8YS5sZW5ndGg7aSs9MSljPWEuZ2V0KGkpLGgucHVzaChjLm5hbWUpO3ZhciBqPVtdO2QuaGVhZGVyPUJhKCksZC5uYW1lSW5kZXg9Q2EoW2IucG9zdFNjcmlwdE5hbWVdKTt2YXIgaz1FYShmLGopO2QudG9wRGljdEluZGV4PUZhKGspLGQuZ2xvYmFsU3VickluZGV4PUhhKCksZC5jaGFyc2V0cz1JYShoLGopLGQuY2hhclN0cmluZ3NJbmRleD1LYShhKSxkLnByaXZhdGVEaWN0PUxhKGcsaiksZC5zdHJpbmdJbmRleD1HYShqKTt2YXIgbD1kLmhlYWRlci5zaXplT2YoKStkLm5hbWVJbmRleC5zaXplT2YoKStkLnRvcERpY3RJbmRleC5zaXplT2YoKStkLnN0cmluZ0luZGV4LnNpemVPZigpK2QuZ2xvYmFsU3VickluZGV4LnNpemVPZigpO3JldHVybiBmLmNoYXJzZXQ9bCxmLmVuY29kaW5nPTAsZi5jaGFyU3RyaW5ncz1mLmNoYXJzZXQrZC5jaGFyc2V0cy5zaXplT2YoKSxmLnByaXZhdGVbMV09Zi5jaGFyU3RyaW5ncytkLmNoYXJTdHJpbmdzSW5kZXguc2l6ZU9mKCksaz1FYShmLGopLGQudG9wRGljdEluZGV4PUZhKGspLGR9ZnVuY3Rpb24gTmEoYSxiKXt2YXIgYz17fSxkPW5ldyBMZS5QYXJzZXIoYSxiKTtyZXR1cm4gYy52ZXJzaW9uPWQucGFyc2VWZXJzaW9uKCksYy5mb250UmV2aXNpb249TWF0aC5yb3VuZCgxZTMqZC5wYXJzZUZpeGVkKCkpLzFlMyxjLmNoZWNrU3VtQWRqdXN0bWVudD1kLnBhcnNlVUxvbmcoKSxjLm1hZ2ljTnVtYmVyPWQucGFyc2VVTG9uZygpLHhlLmFyZ3VtZW50KDE1OTQ4MzQxNjU9PT1jLm1hZ2ljTnVtYmVyLFwiRm9udCBoZWFkZXIgaGFzIHdyb25nIG1hZ2ljIG51bWJlci5cIiksYy5mbGFncz1kLnBhcnNlVVNob3J0KCksYy51bml0c1BlckVtPWQucGFyc2VVU2hvcnQoKSxjLmNyZWF0ZWQ9ZC5wYXJzZUxvbmdEYXRlVGltZSgpLGMubW9kaWZpZWQ9ZC5wYXJzZUxvbmdEYXRlVGltZSgpLGMueE1pbj1kLnBhcnNlU2hvcnQoKSxjLnlNaW49ZC5wYXJzZVNob3J0KCksYy54TWF4PWQucGFyc2VTaG9ydCgpLGMueU1heD1kLnBhcnNlU2hvcnQoKSxjLm1hY1N0eWxlPWQucGFyc2VVU2hvcnQoKSxjLmxvd2VzdFJlY1BQRU09ZC5wYXJzZVVTaG9ydCgpLGMuZm9udERpcmVjdGlvbkhpbnQ9ZC5wYXJzZVNob3J0KCksYy5pbmRleFRvTG9jRm9ybWF0PWQucGFyc2VTaG9ydCgpLGMuZ2x5cGhEYXRhRm9ybWF0PWQucGFyc2VTaG9ydCgpLGN9ZnVuY3Rpb24gT2EoYSl7dmFyIGI9TWF0aC5yb3VuZCgobmV3IERhdGUpLmdldFRpbWUoKS8xZTMpKzIwODI4NDQ4MDAsYz1iO3JldHVybiBhLmNyZWF0ZWRUaW1lc3RhbXAmJihjPWEuY3JlYXRlZFRpbWVzdGFtcCsyMDgyODQ0ODAwKSxuZXcgSWUuVGFibGUoXCJoZWFkXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjY1NTM2fSx7bmFtZTpcImZvbnRSZXZpc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjY1NTM2fSx7bmFtZTpcImNoZWNrU3VtQWRqdXN0bWVudFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWFnaWNOdW1iZXJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZToxNTk0ODM0MTY1fSx7bmFtZTpcImZsYWdzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidW5pdHNQZXJFbVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxZTN9LHtuYW1lOlwiY3JlYXRlZFwiLHR5cGU6XCJMT05HREFURVRJTUVcIix2YWx1ZTpjfSx7bmFtZTpcIm1vZGlmaWVkXCIsdHlwZTpcIkxPTkdEQVRFVElNRVwiLHZhbHVlOmJ9LHtuYW1lOlwieE1pblwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieU1pblwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieE1heFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieU1heFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibWFjU3R5bGVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJsb3dlc3RSZWNQUEVNXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZm9udERpcmVjdGlvbkhpbnRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZToyfSx7bmFtZTpcImluZGV4VG9Mb2NGb3JtYXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImdseXBoRGF0YUZvcm1hdFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9XSxhKX1mdW5jdGlvbiBQYShhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3JldHVybiBjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLmFzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMuZGVzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMubGluZUdhcD1kLnBhcnNlU2hvcnQoKSxjLmFkdmFuY2VXaWR0aE1heD1kLnBhcnNlVVNob3J0KCksYy5taW5MZWZ0U2lkZUJlYXJpbmc9ZC5wYXJzZVNob3J0KCksYy5taW5SaWdodFNpZGVCZWFyaW5nPWQucGFyc2VTaG9ydCgpLGMueE1heEV4dGVudD1kLnBhcnNlU2hvcnQoKSxjLmNhcmV0U2xvcGVSaXNlPWQucGFyc2VTaG9ydCgpLGMuY2FyZXRTbG9wZVJ1bj1kLnBhcnNlU2hvcnQoKSxjLmNhcmV0T2Zmc2V0PWQucGFyc2VTaG9ydCgpLGQucmVsYXRpdmVPZmZzZXQrPTgsYy5tZXRyaWNEYXRhRm9ybWF0PWQucGFyc2VTaG9ydCgpLGMubnVtYmVyT2ZITWV0cmljcz1kLnBhcnNlVVNob3J0KCksY31mdW5jdGlvbiBRYShhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiaGhlYVwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiRklYRURcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJhc2NlbmRlclwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwiZGVzY2VuZGVyXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJsaW5lR2FwXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJhZHZhbmNlV2lkdGhNYXhcIix0eXBlOlwiVUZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJtaW5MZWZ0U2lkZUJlYXJpbmdcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcIm1pblJpZ2h0U2lkZUJlYXJpbmdcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcInhNYXhFeHRlbnRcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImNhcmV0U2xvcGVSaXNlXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJjYXJldFNsb3BlUnVuXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJjYXJldE9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVzZXJ2ZWQxXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXNlcnZlZDJcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlc2VydmVkM1wiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVzZXJ2ZWQ0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJtZXRyaWNEYXRhRm9ybWF0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJudW1iZXJPZkhNZXRyaWNzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSxhKX1mdW5jdGlvbiBSYShhLGIsYyxkLGUpe2Zvcih2YXIgZixnLGg9bmV3IExlLlBhcnNlcihhLGIpLGk9MDtpPGQ7aSs9MSl7aTxjJiYoZj1oLnBhcnNlVVNob3J0KCksZz1oLnBhcnNlU2hvcnQoKSk7dmFyIGo9ZS5nZXQoaSk7ai5hZHZhbmNlV2lkdGg9ZixqLmxlZnRTaWRlQmVhcmluZz1nfX1mdW5jdGlvbiBTYShhKXtmb3IodmFyIGI9bmV3IEllLlRhYmxlKFwiaG10eFwiLFtdKSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hLmdldChjKSxlPWQuYWR2YW5jZVdpZHRofHwwLGY9ZC5sZWZ0U2lkZUJlYXJpbmd8fDA7Yi5maWVsZHMucHVzaCh7bmFtZTpcImFkdmFuY2VXaWR0aF9cIitjLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTplfSksYi5maWVsZHMucHVzaCh7bmFtZTpcImxlZnRTaWRlQmVhcmluZ19cIitjLHR5cGU6XCJTSE9SVFwiLHZhbHVlOmZ9KX1yZXR1cm4gYn1mdW5jdGlvbiBUYShhKXtmb3IodmFyIGI9bmV3IEllLlRhYmxlKFwibHRhZ1wiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZToxfSx7bmFtZTpcImZsYWdzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJudW1UYWdzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6YS5sZW5ndGh9XSksYz1cIlwiLGQ9MTIrNCphLmxlbmd0aCxlPTA7ZTxhLmxlbmd0aDsrK2Upe3ZhciBmPWMuaW5kZXhPZihhW2VdKTtmPDAmJihmPWMubGVuZ3RoLGMrPWFbZV0pLGIuZmllbGRzLnB1c2goe25hbWU6XCJvZmZzZXQgXCIrZSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZCtmfSksYi5maWVsZHMucHVzaCh7bmFtZTpcImxlbmd0aCBcIitlLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphW2VdLmxlbmd0aH0pfXJldHVybiBiLmZpZWxkcy5wdXNoKHtuYW1lOlwic3RyaW5nUG9vbFwiLHR5cGU6XCJDSEFSQVJSQVlcIix2YWx1ZTpjfSksYn1mdW5jdGlvbiBVYShhLGIpe3ZhciBjPW5ldyBMZS5QYXJzZXIoYSxiKSxkPWMucGFyc2VVTG9uZygpO3hlLmFyZ3VtZW50KDE9PT1kLFwiVW5zdXBwb3J0ZWQgbHRhZyB0YWJsZSB2ZXJzaW9uLlwiKSxjLnNraXAoXCJ1TG9uZ1wiLDEpO2Zvcih2YXIgZT1jLnBhcnNlVUxvbmcoKSxmPVtdLGc9MDtnPGU7ZysrKXtmb3IodmFyIGg9XCJcIixpPWIrYy5wYXJzZVVTaG9ydCgpLGo9Yy5wYXJzZVVTaG9ydCgpLGs9aTtrPGkrajsrK2spaCs9U3RyaW5nLmZyb21DaGFyQ29kZShhLmdldEludDgoaykpO2YucHVzaChoKX1yZXR1cm4gZn1mdW5jdGlvbiBWYShhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3JldHVybiBjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLm51bUdseXBocz1kLnBhcnNlVVNob3J0KCksMT09PWMudmVyc2lvbiYmKGMubWF4UG9pbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbnRvdXJzPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbXBvc2l0ZVBvaW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb21wb3NpdGVDb250b3Vycz1kLnBhcnNlVVNob3J0KCksYy5tYXhab25lcz1kLnBhcnNlVVNob3J0KCksYy5tYXhUd2lsaWdodFBvaW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhTdG9yYWdlPWQucGFyc2VVU2hvcnQoKSxjLm1heEZ1bmN0aW9uRGVmcz1kLnBhcnNlVVNob3J0KCksYy5tYXhJbnN0cnVjdGlvbkRlZnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4U3RhY2tFbGVtZW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhTaXplT2ZJbnN0cnVjdGlvbnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29tcG9uZW50RWxlbWVudHM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29tcG9uZW50RGVwdGg9ZC5wYXJzZVVTaG9ydCgpKSxjfWZ1bmN0aW9uIFdhKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJtYXhwXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjIwNDgwfSx7bmFtZTpcIm51bUdseXBoc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphfV0pfWZ1bmN0aW9uIFhhKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSAwOmlmKDY1NTM1PT09YilyZXR1cm5cInVuZFwiO2lmKGMpcmV0dXJuIGNbYl07YnJlYWs7Y2FzZSAxOnJldHVybiBhZltiXTtjYXNlIDM6cmV0dXJuIGNmW2JdfX1mdW5jdGlvbiBZYShhLGIsYyl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gZGY7Y2FzZSAxOnJldHVybiBmZltjXXx8ZWZbYl07Y2FzZSAzOmlmKDE9PT1ifHwxMD09PWIpcmV0dXJuIGRmfX1mdW5jdGlvbiBaYShhLGIsYyl7Zm9yKHZhciBkPXt9LGU9bmV3IExlLlBhcnNlcihhLGIpLGY9ZS5wYXJzZVVTaG9ydCgpLGc9ZS5wYXJzZVVTaG9ydCgpLGg9ZS5vZmZzZXQrZS5wYXJzZVVTaG9ydCgpLGk9MDtpPGc7aSsrKXt2YXIgaj1lLnBhcnNlVVNob3J0KCksaz1lLnBhcnNlVVNob3J0KCksbD1lLnBhcnNlVVNob3J0KCksbT1lLnBhcnNlVVNob3J0KCksbj1fZVttXXx8bSxvPWUucGFyc2VVU2hvcnQoKSxwPWUucGFyc2VVU2hvcnQoKSxxPVhhKGosbCxjKSxyPVlhKGosayxsKTtpZih2b2lkIDAhPT1yJiZ2b2lkIDAhPT1xKXt2YXIgcz12b2lkIDA7aWYocz1yPT09ZGY/QWUuVVRGMTYoYSxoK3Asbyk6QWUuTUFDU1RSSU5HKGEsaCtwLG8scikpe3ZhciB0PWRbbl07dm9pZCAwPT09dCYmKHQ9ZFtuXT17fSksdFtxXT1zfX19cmV0dXJuIDE9PT1mJiZlLnBhcnNlVVNob3J0KCksZH1mdW5jdGlvbiAkYShhKXt2YXIgYj17fTtmb3IodmFyIGMgaW4gYSliW2FbY11dPXBhcnNlSW50KGMpO3JldHVybiBifWZ1bmN0aW9uIF9hKGEsYixjLGQsZSxmKXtyZXR1cm4gbmV3IEllLlJlY29yZChcIk5hbWVSZWNvcmRcIixbe25hbWU6XCJwbGF0Zm9ybUlEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmF9LHtuYW1lOlwiZW5jb2RpbmdJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpifSx7bmFtZTpcImxhbmd1YWdlSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Y30se25hbWU6XCJuYW1lSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZH0se25hbWU6XCJsZW5ndGhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZX0se25hbWU6XCJvZmZzZXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Zn1dKX1mdW5jdGlvbiBhYihhLGIpe3ZhciBjPWEubGVuZ3RoLGQ9Yi5sZW5ndGgtYysxO2E6Zm9yKHZhciBlPTA7ZTxkO2UrKylmb3IoO2U8ZDtlKyspe2Zvcih2YXIgZj0wO2Y8YztmKyspaWYoYltlK2ZdIT09YVtmXSljb250aW51ZSBhO3JldHVybiBlfXJldHVybi0xfWZ1bmN0aW9uIGJiKGEsYil7dmFyIGM9YWIoYSxiKTtpZihjPDApe2M9Yi5sZW5ndGg7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aDtkPGU7KytkKWIucHVzaChhW2RdKX1yZXR1cm4gY31mdW5jdGlvbiBjYihhLGIpe3ZhciBjLGQ9W10sZT17fSxmPSRhKF9lKTtmb3IodmFyIGcgaW4gYSl7dmFyIGg9ZltnXTtpZih2b2lkIDA9PT1oJiYoaD1nKSxjPXBhcnNlSW50KGgpLGlzTmFOKGMpKXRocm93IG5ldyBFcnJvcignTmFtZSB0YWJsZSBlbnRyeSBcIicrZysnXCIgZG9lcyBub3QgZXhpc3QsIHNlZSBuYW1lVGFibGVOYW1lcyBmb3IgY29tcGxldGUgbGlzdC4nKTtlW2NdPWFbZ10sZC5wdXNoKGMpfWZvcih2YXIgaT0kYShhZiksaj0kYShjZiksaz1bXSxsPVtdLG09MDttPGQubGVuZ3RoO20rKyl7Yz1kW21dO3ZhciBuPWVbY107Zm9yKHZhciBvIGluIG4pe3ZhciBwPW5bb10scT0xLHI9aVtvXSxzPWJmW3JdLHQ9WWEocSxzLHIpLHU9QmUuTUFDU1RSSU5HKHAsdCk7dm9pZCAwPT09dSYmKHE9MCxyPWIuaW5kZXhPZihvKSxyPDAmJihyPWIubGVuZ3RoLGIucHVzaChvKSkscz00LHU9QmUuVVRGMTYocCkpO3ZhciB2PWJiKHUsbCk7ay5wdXNoKF9hKHEscyxyLGMsdS5sZW5ndGgsdikpO3ZhciB3PWpbb107aWYodm9pZCAwIT09dyl7dmFyIHg9QmUuVVRGMTYocCkseT1iYih4LGwpO2sucHVzaChfYSgzLDEsdyxjLHgubGVuZ3RoLHkpKX19fWsuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnBsYXRmb3JtSUQtYi5wbGF0Zm9ybUlEfHxhLmVuY29kaW5nSUQtYi5lbmNvZGluZ0lEfHxhLmxhbmd1YWdlSUQtYi5sYW5ndWFnZUlEfHxhLm5hbWVJRC1iLm5hbWVJRH0pO2Zvcih2YXIgej1uZXcgSWUuVGFibGUoXCJuYW1lXCIsW3tuYW1lOlwiZm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiY291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ay5sZW5ndGh9LHtuYW1lOlwic3RyaW5nT2Zmc2V0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjYrMTIqay5sZW5ndGh9XSksQT0wO0E8ay5sZW5ndGg7QSsrKXouZmllbGRzLnB1c2goe25hbWU6XCJyZWNvcmRfXCIrQSx0eXBlOlwiUkVDT1JEXCIsdmFsdWU6a1tBXX0pO3JldHVybiB6LmZpZWxkcy5wdXNoKHtuYW1lOlwic3RyaW5nc1wiLHR5cGU6XCJMSVRFUkFMXCIsdmFsdWU6bH0pLHp9ZnVuY3Rpb24gZGIoYSl7Zm9yKHZhciBiPTA7YjxoZi5sZW5ndGg7Yis9MSl7dmFyIGM9aGZbYl07aWYoYT49Yy5iZWdpbiYmYTxjLmVuZClyZXR1cm4gYn1yZXR1cm4tMX1mdW5jdGlvbiBlYihhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO2MudmVyc2lvbj1kLnBhcnNlVVNob3J0KCksYy54QXZnQ2hhcldpZHRoPWQucGFyc2VTaG9ydCgpLGMudXNXZWlnaHRDbGFzcz1kLnBhcnNlVVNob3J0KCksYy51c1dpZHRoQ2xhc3M9ZC5wYXJzZVVTaG9ydCgpLGMuZnNUeXBlPWQucGFyc2VVU2hvcnQoKSxjLnlTdWJzY3JpcHRYU2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdWJzY3JpcHRZU2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdWJzY3JpcHRYT2Zmc2V0PWQucGFyc2VTaG9ydCgpLGMueVN1YnNjcmlwdFlPZmZzZXQ9ZC5wYXJzZVNob3J0KCksYy55U3VwZXJzY3JpcHRYU2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdXBlcnNjcmlwdFlTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1cGVyc2NyaXB0WE9mZnNldD1kLnBhcnNlU2hvcnQoKSxjLnlTdXBlcnNjcmlwdFlPZmZzZXQ9ZC5wYXJzZVNob3J0KCksYy55U3RyaWtlb3V0U2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdHJpa2VvdXRQb3NpdGlvbj1kLnBhcnNlU2hvcnQoKSxjLnNGYW1pbHlDbGFzcz1kLnBhcnNlU2hvcnQoKSxjLnBhbm9zZT1bXTtmb3IodmFyIGU9MDtlPDEwO2UrKyljLnBhbm9zZVtlXT1kLnBhcnNlQnl0ZSgpO3JldHVybiBjLnVsVW5pY29kZVJhbmdlMT1kLnBhcnNlVUxvbmcoKSxjLnVsVW5pY29kZVJhbmdlMj1kLnBhcnNlVUxvbmcoKSxjLnVsVW5pY29kZVJhbmdlMz1kLnBhcnNlVUxvbmcoKSxjLnVsVW5pY29kZVJhbmdlND1kLnBhcnNlVUxvbmcoKSxjLmFjaFZlbmRJRD1TdHJpbmcuZnJvbUNoYXJDb2RlKGQucGFyc2VCeXRlKCksZC5wYXJzZUJ5dGUoKSxkLnBhcnNlQnl0ZSgpLGQucGFyc2VCeXRlKCkpLGMuZnNTZWxlY3Rpb249ZC5wYXJzZVVTaG9ydCgpLGMudXNGaXJzdENoYXJJbmRleD1kLnBhcnNlVVNob3J0KCksYy51c0xhc3RDaGFySW5kZXg9ZC5wYXJzZVVTaG9ydCgpLGMuc1R5cG9Bc2NlbmRlcj1kLnBhcnNlU2hvcnQoKSxjLnNUeXBvRGVzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMuc1R5cG9MaW5lR2FwPWQucGFyc2VTaG9ydCgpLGMudXNXaW5Bc2NlbnQ9ZC5wYXJzZVVTaG9ydCgpLGMudXNXaW5EZXNjZW50PWQucGFyc2VVU2hvcnQoKSxjLnZlcnNpb24+PTEmJihjLnVsQ29kZVBhZ2VSYW5nZTE9ZC5wYXJzZVVMb25nKCksYy51bENvZGVQYWdlUmFuZ2UyPWQucGFyc2VVTG9uZygpKSxjLnZlcnNpb24+PTImJihjLnN4SGVpZ2h0PWQucGFyc2VTaG9ydCgpLGMuc0NhcEhlaWdodD1kLnBhcnNlU2hvcnQoKSxjLnVzRGVmYXVsdENoYXI9ZC5wYXJzZVVTaG9ydCgpLGMudXNCcmVha0NoYXI9ZC5wYXJzZVVTaG9ydCgpLGMudXNNYXhDb250ZW50PWQucGFyc2VVU2hvcnQoKSksY31mdW5jdGlvbiBmYihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiT1MvMlwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6M30se25hbWU6XCJ4QXZnQ2hhcldpZHRoXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c1dlaWdodENsYXNzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNXaWR0aENsYXNzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZnNUeXBlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieVN1YnNjcmlwdFhTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6NjUwfSx7bmFtZTpcInlTdWJzY3JpcHRZU2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjY5OX0se25hbWU6XCJ5U3Vic2NyaXB0WE9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieVN1YnNjcmlwdFlPZmZzZXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZToxNDB9LHtuYW1lOlwieVN1cGVyc2NyaXB0WFNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo2NTB9LHtuYW1lOlwieVN1cGVyc2NyaXB0WVNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo2OTl9LHtuYW1lOlwieVN1cGVyc2NyaXB0WE9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieVN1cGVyc2NyaXB0WU9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjQ3OX0se25hbWU6XCJ5U3RyaWtlb3V0U2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjQ5fSx7bmFtZTpcInlTdHJpa2VvdXRQb3NpdGlvblwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjI1OH0se25hbWU6XCJzRmFtaWx5Q2xhc3NcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImJGYW1pbHlUeXBlXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJTZXJpZlN0eWxlXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJXZWlnaHRcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlByb3BvcnRpb25cIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYkNvbnRyYXN0XCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJTdHJva2VWYXJpYXRpb25cIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYkFybVN0eWxlXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJMZXR0ZXJmb3JtXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJNaWRsaW5lXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJYSGVpZ2h0XCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcInVsVW5pY29kZVJhbmdlMVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwidWxVbmljb2RlUmFuZ2UyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJ1bFVuaWNvZGVSYW5nZTNcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcInVsVW5pY29kZVJhbmdlNFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwiYWNoVmVuZElEXCIsdHlwZTpcIkNIQVJBUlJBWVwiLHZhbHVlOlwiWFhYWFwifSx7bmFtZTpcImZzU2VsZWN0aW9uXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNGaXJzdENoYXJJbmRleFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzTGFzdENoYXJJbmRleFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNUeXBvQXNjZW5kZXJcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNUeXBvRGVzY2VuZGVyXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzVHlwb0xpbmVHYXBcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzV2luQXNjZW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNXaW5EZXNjZW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidWxDb2RlUGFnZVJhbmdlMVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwidWxDb2RlUGFnZVJhbmdlMlwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwic3hIZWlnaHRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNDYXBIZWlnaHRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzRGVmYXVsdENoYXJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c0JyZWFrQ2hhclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzTWF4Q29udGV4dFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfV0sYSl9ZnVuY3Rpb24gZ2IoYSxiKXt2YXIgYz17fSxkPW5ldyBMZS5QYXJzZXIoYSxiKTtzd2l0Y2goYy52ZXJzaW9uPWQucGFyc2VWZXJzaW9uKCksYy5pdGFsaWNBbmdsZT1kLnBhcnNlRml4ZWQoKSxjLnVuZGVybGluZVBvc2l0aW9uPWQucGFyc2VTaG9ydCgpLGMudW5kZXJsaW5lVGhpY2tuZXNzPWQucGFyc2VTaG9ydCgpLGMuaXNGaXhlZFBpdGNoPWQucGFyc2VVTG9uZygpLGMubWluTWVtVHlwZTQyPWQucGFyc2VVTG9uZygpLGMubWF4TWVtVHlwZTQyPWQucGFyc2VVTG9uZygpLGMubWluTWVtVHlwZTE9ZC5wYXJzZVVMb25nKCksYy5tYXhNZW1UeXBlMT1kLnBhcnNlVUxvbmcoKSxjLnZlcnNpb24pe2Nhc2UgMTpjLm5hbWVzPVFlLnNsaWNlKCk7YnJlYWs7Y2FzZSAyOmMubnVtYmVyT2ZHbHlwaHM9ZC5wYXJzZVVTaG9ydCgpLGMuZ2x5cGhOYW1lSW5kZXg9bmV3IEFycmF5KGMubnVtYmVyT2ZHbHlwaHMpO2Zvcih2YXIgZT0wO2U8Yy5udW1iZXJPZkdseXBocztlKyspYy5nbHlwaE5hbWVJbmRleFtlXT1kLnBhcnNlVVNob3J0KCk7Yy5uYW1lcz1bXTtmb3IodmFyIGY9MDtmPGMubnVtYmVyT2ZHbHlwaHM7ZisrKWlmKGMuZ2x5cGhOYW1lSW5kZXhbZl0+PVFlLmxlbmd0aCl7dmFyIGc9ZC5wYXJzZUNoYXIoKTtjLm5hbWVzLnB1c2goZC5wYXJzZVN0cmluZyhnKSl9YnJlYWs7Y2FzZSAyLjU6Yy5udW1iZXJPZkdseXBocz1kLnBhcnNlVVNob3J0KCksYy5vZmZzZXQ9bmV3IEFycmF5KGMubnVtYmVyT2ZHbHlwaHMpO2Zvcih2YXIgaD0wO2g8Yy5udW1iZXJPZkdseXBocztoKyspYy5vZmZzZXRbaF09ZC5wYXJzZUNoYXIoKX1yZXR1cm4gY31mdW5jdGlvbiBoYigpe3JldHVybiBuZXcgSWUuVGFibGUoXCJwb3N0XCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjE5NjYwOH0se25hbWU6XCJpdGFsaWNBbmdsZVwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjB9LHtuYW1lOlwidW5kZXJsaW5lUG9zaXRpb25cIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcInVuZGVybGluZVRoaWNrbmVzc1wiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwiaXNGaXhlZFBpdGNoXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtaW5NZW1UeXBlNDJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1heE1lbVR5cGU0MlwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWluTWVtVHlwZTFcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1heE1lbVR5cGUxXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH1dKX1mdW5jdGlvbiBpYihhLGIpe2I9Ynx8MDt2YXIgYz1uZXcgUShhLGIpLGQ9Yy5wYXJzZVZlcnNpb24oMSk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1kfHwxLjE9PT1kLFwiVW5zdXBwb3J0ZWQgR1NVQiB0YWJsZSB2ZXJzaW9uLlwiKSwxPT09ZD97dmVyc2lvbjpkLHNjcmlwdHM6Yy5wYXJzZVNjcmlwdExpc3QoKSxmZWF0dXJlczpjLnBhcnNlRmVhdHVyZUxpc3QoKSxsb29rdXBzOmMucGFyc2VMb29rdXBMaXN0KGxmKX06e3ZlcnNpb246ZCxzY3JpcHRzOmMucGFyc2VTY3JpcHRMaXN0KCksZmVhdHVyZXM6Yy5wYXJzZUZlYXR1cmVMaXN0KCksbG9va3VwczpjLnBhcnNlTG9va3VwTGlzdChsZiksdmFyaWF0aW9uczpjLnBhcnNlRmVhdHVyZVZhcmlhdGlvbnNMaXN0KCl9fWZ1bmN0aW9uIGpiKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJHU1VCXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjY1NTM2fSx7bmFtZTpcInNjcmlwdHNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuU2NyaXB0TGlzdChhLnNjcmlwdHMpfSx7bmFtZTpcImZlYXR1cmVzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkZlYXR1cmVMaXN0KGEuZmVhdHVyZXMpfSx7bmFtZTpcImxvb2t1cHNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuTG9va3VwTGlzdChhLmxvb2t1cHMsbmYpfV0pfWZ1bmN0aW9uIGtiKGEsYil7dmFyIGM9bmV3IExlLlBhcnNlcihhLGIpLGQ9Yy5wYXJzZVVMb25nKCk7eGUuYXJndW1lbnQoMT09PWQsXCJVbnN1cHBvcnRlZCBNRVRBIHRhYmxlIHZlcnNpb24uXCIpLGMucGFyc2VVTG9uZygpLGMucGFyc2VVTG9uZygpO2Zvcih2YXIgZT1jLnBhcnNlVUxvbmcoKSxmPXt9LGc9MDtnPGU7ZysrKXt2YXIgaD1jLnBhcnNlVGFnKCksaT1jLnBhcnNlVUxvbmcoKSxqPWMucGFyc2VVTG9uZygpLGs9QWUuVVRGOChhLGIraSxqKTtmW2hdPWt9cmV0dXJuIGZ9ZnVuY3Rpb24gbGIoYSl7dmFyIGI9T2JqZWN0LmtleXMoYSkubGVuZ3RoLGM9XCJcIixkPTE2KzEyKmIsZT1uZXcgSWUuVGFibGUoXCJtZXRhXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjF9LHtuYW1lOlwiZmxhZ3NcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmR9LHtuYW1lOlwibnVtVGFnc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmJ9XSk7Zm9yKHZhciBmIGluIGEpe3ZhciBnPWMubGVuZ3RoO2MrPWFbZl0sZS5maWVsZHMucHVzaCh7bmFtZTpcInRhZyBcIitmLHR5cGU6XCJUQUdcIix2YWx1ZTpmfSksZS5maWVsZHMucHVzaCh7bmFtZTpcIm9mZnNldCBcIitmLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmQrZ30pLGUuZmllbGRzLnB1c2goe25hbWU6XCJsZW5ndGggXCIrZix0eXBlOlwiVUxPTkdcIix2YWx1ZTphW2ZdLmxlbmd0aH0pfXJldHVybiBlLmZpZWxkcy5wdXNoKHtuYW1lOlwic3RyaW5nUG9vbFwiLHR5cGU6XCJDSEFSQVJSQVlcIix2YWx1ZTpjfSksZX1mdW5jdGlvbiBtYihhKXtyZXR1cm4gTWF0aC5sb2coYSkvTWF0aC5sb2coMil8MH1mdW5jdGlvbiBuYihhKXtmb3IoO2EubGVuZ3RoJTQhPTA7KWEucHVzaCgwKTtmb3IodmFyIGI9MCxjPTA7YzxhLmxlbmd0aDtjKz00KWIrPShhW2NdPDwyNCkrKGFbYysxXTw8MTYpKyhhW2MrMl08PDgpK2FbYyszXTtyZXR1cm4gYiU9TWF0aC5wb3coMiwzMil9ZnVuY3Rpb24gb2IoYSxiLGMsZCl7cmV0dXJuIG5ldyBJZS5SZWNvcmQoXCJUYWJsZSBSZWNvcmRcIixbe25hbWU6XCJ0YWdcIix0eXBlOlwiVEFHXCIsdmFsdWU6dm9pZCAwIT09YT9hOlwiXCJ9LHtuYW1lOlwiY2hlY2tTdW1cIix0eXBlOlwiVUxPTkdcIix2YWx1ZTp2b2lkIDAhPT1iP2I6MH0se25hbWU6XCJvZmZzZXRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTp2b2lkIDAhPT1jP2M6MH0se25hbWU6XCJsZW5ndGhcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTp2b2lkIDAhPT1kP2Q6MH1dKX1mdW5jdGlvbiBwYihhKXt2YXIgYj1uZXcgSWUuVGFibGUoXCJzZm50XCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJUQUdcIix2YWx1ZTpcIk9UVE9cIn0se25hbWU6XCJudW1UYWJsZXNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzZWFyY2hSYW5nZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImVudHJ5U2VsZWN0b3JcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyYW5nZVNoaWZ0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSk7Yi50YWJsZXM9YSxiLm51bVRhYmxlcz1hLmxlbmd0aDt2YXIgYz1NYXRoLnBvdygyLG1iKGIubnVtVGFibGVzKSk7Yi5zZWFyY2hSYW5nZT0xNipjLGIuZW50cnlTZWxlY3Rvcj1tYihjKSxiLnJhbmdlU2hpZnQ9MTYqYi5udW1UYWJsZXMtYi5zZWFyY2hSYW5nZTtmb3IodmFyIGQ9W10sZT1bXSxmPWIuc2l6ZU9mKCkrb2IoKS5zaXplT2YoKSpiLm51bVRhYmxlcztmJTQhPTA7KWYrPTEsZS5wdXNoKHtuYW1lOlwicGFkZGluZ1wiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0pO2Zvcih2YXIgZz0wO2c8YS5sZW5ndGg7Zys9MSl7dmFyIGg9YVtnXTt4ZS5hcmd1bWVudCg0PT09aC50YWJsZU5hbWUubGVuZ3RoLFwiVGFibGUgbmFtZVwiK2gudGFibGVOYW1lK1wiIGlzIGludmFsaWQuXCIpO3ZhciBpPWguc2l6ZU9mKCksaj1vYihoLnRhYmxlTmFtZSxuYihoLmVuY29kZSgpKSxmLGkpO2ZvcihkLnB1c2goe25hbWU6ai50YWcrXCIgVGFibGUgUmVjb3JkXCIsdHlwZTpcIlJFQ09SRFwiLHZhbHVlOmp9KSxlLnB1c2goe25hbWU6aC50YWJsZU5hbWUrXCIgdGFibGVcIix0eXBlOlwiUkVDT1JEXCIsdmFsdWU6aH0pLGYrPWkseGUuYXJndW1lbnQoIWlzTmFOKGYpLFwiU29tZXRoaW5nIHdlbnQgd3JvbmcgY2FsY3VsYXRpbmcgdGhlIG9mZnNldC5cIik7ZiU0IT0wOylmKz0xLGUucHVzaCh7bmFtZTpcInBhZGRpbmdcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudmFsdWUudGFnPmIudmFsdWUudGFnPzE6LTF9KSxiLmZpZWxkcz1iLmZpZWxkcy5jb25jYXQoZCksYi5maWVsZHM9Yi5maWVsZHMuY29uY2F0KGUpLGJ9ZnVuY3Rpb24gcWIoYSxiLGMpe2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCs9MSl7dmFyIGU9YS5jaGFyVG9HbHlwaEluZGV4KGJbZF0pO2lmKGU+MCl7cmV0dXJuIGEuZ2x5cGhzLmdldChlKS5nZXRNZXRyaWNzKCl9fXJldHVybiBjfWZ1bmN0aW9uIHJiKGEpe2Zvcih2YXIgYj0wLGM9MDtjPGEubGVuZ3RoO2MrPTEpYis9YVtjXTtyZXR1cm4gYi9hLmxlbmd0aH1mdW5jdGlvbiBzYihhKXtmb3IodmFyIGIsYz1bXSxkPVtdLGU9W10sZj1bXSxnPVtdLGg9W10saT1bXSxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MDtvPGEuZ2x5cGhzLmxlbmd0aDtvKz0xKXt2YXIgcD1hLmdseXBocy5nZXQobykscT0wfHAudW5pY29kZTtpZihpc05hTihwLmFkdmFuY2VXaWR0aCkpdGhyb3cgbmV3IEVycm9yKFwiR2x5cGggXCIrcC5uYW1lK1wiIChcIitvK1wiKTogYWR2YW5jZVdpZHRoIGlzIG5vdCBhIG51bWJlci5cIik7KGI+cXx8dm9pZCAwPT09YikmJnE+MCYmKGI9cSksajxxJiYoaj1xKTt2YXIgcj1qZi5nZXRVbmljb2RlUmFuZ2UocSk7aWYocjwzMilrfD0xPDxyO2Vsc2UgaWYocjw2NClsfD0xPDxyLTMyO2Vsc2UgaWYocjw5NiltfD0xPDxyLTY0O2Vsc2V7aWYoIShyPDEyMykpdGhyb3cgbmV3IEVycm9yKFwiVW5pY29kZSByYW5nZXMgYml0cyA+IDEyMyBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzYWdlXCIpO258PTE8PHItOTZ9aWYoXCIubm90ZGVmXCIhPT1wLm5hbWUpe3ZhciBzPXAuZ2V0TWV0cmljcygpO2MucHVzaChzLnhNaW4pLGQucHVzaChzLnlNaW4pLGUucHVzaChzLnhNYXgpLGYucHVzaChzLnlNYXgpLGgucHVzaChzLmxlZnRTaWRlQmVhcmluZyksaS5wdXNoKHMucmlnaHRTaWRlQmVhcmluZyksZy5wdXNoKHAuYWR2YW5jZVdpZHRoKX19dmFyIHQ9e3hNaW46TWF0aC5taW4uYXBwbHkobnVsbCxjKSx5TWluOk1hdGgubWluLmFwcGx5KG51bGwsZCkseE1heDpNYXRoLm1heC5hcHBseShudWxsLGUpLHlNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxmKSxhZHZhbmNlV2lkdGhNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxnKSxhZHZhbmNlV2lkdGhBdmc6cmIoZyksbWluTGVmdFNpZGVCZWFyaW5nOk1hdGgubWluLmFwcGx5KG51bGwsaCksbWF4TGVmdFNpZGVCZWFyaW5nOk1hdGgubWF4LmFwcGx5KG51bGwsaCksbWluUmlnaHRTaWRlQmVhcmluZzpNYXRoLm1pbi5hcHBseShudWxsLGkpfTt0LmFzY2VuZGVyPWEuYXNjZW5kZXIsdC5kZXNjZW5kZXI9YS5kZXNjZW5kZXI7dmFyIHU9V2UubWFrZSh7ZmxhZ3M6Myx1bml0c1BlckVtOmEudW5pdHNQZXJFbSx4TWluOnQueE1pbix5TWluOnQueU1pbix4TWF4OnQueE1heCx5TWF4OnQueU1heCxsb3dlc3RSZWNQUEVNOjMsY3JlYXRlZFRpbWVzdGFtcDphLmNyZWF0ZWRUaW1lc3RhbXB9KSx2PVhlLm1ha2Uoe2FzY2VuZGVyOnQuYXNjZW5kZXIsZGVzY2VuZGVyOnQuZGVzY2VuZGVyLGFkdmFuY2VXaWR0aE1heDp0LmFkdmFuY2VXaWR0aE1heCxtaW5MZWZ0U2lkZUJlYXJpbmc6dC5taW5MZWZ0U2lkZUJlYXJpbmcsbWluUmlnaHRTaWRlQmVhcmluZzp0Lm1pblJpZ2h0U2lkZUJlYXJpbmcseE1heEV4dGVudDp0Lm1heExlZnRTaWRlQmVhcmluZysodC54TWF4LXQueE1pbiksbnVtYmVyT2ZITWV0cmljczphLmdseXBocy5sZW5ndGh9KSx3PSRlLm1ha2UoYS5nbHlwaHMubGVuZ3RoKSx4PWpmLm1ha2Uoe3hBdmdDaGFyV2lkdGg6TWF0aC5yb3VuZCh0LmFkdmFuY2VXaWR0aEF2ZyksdXNXZWlnaHRDbGFzczphLnRhYmxlcy5vczIudXNXZWlnaHRDbGFzcyx1c1dpZHRoQ2xhc3M6YS50YWJsZXMub3MyLnVzV2lkdGhDbGFzcyx1c0ZpcnN0Q2hhckluZGV4OmIsdXNMYXN0Q2hhckluZGV4OmosdWxVbmljb2RlUmFuZ2UxOmssdWxVbmljb2RlUmFuZ2UyOmwsdWxVbmljb2RlUmFuZ2UzOm0sdWxVbmljb2RlUmFuZ2U0Om4sZnNTZWxlY3Rpb246YS50YWJsZXMub3MyLmZzU2VsZWN0aW9uLHNUeXBvQXNjZW5kZXI6dC5hc2NlbmRlcixzVHlwb0Rlc2NlbmRlcjp0LmRlc2NlbmRlcixzVHlwb0xpbmVHYXA6MCx1c1dpbkFzY2VudDp0LnlNYXgsdXNXaW5EZXNjZW50Ok1hdGguYWJzKHQueU1pbiksdWxDb2RlUGFnZVJhbmdlMToxLHN4SGVpZ2h0OnFiKGEsXCJ4eXZ3XCIse3lNYXg6TWF0aC5yb3VuZCh0LmFzY2VuZGVyLzIpfSkueU1heCxzQ2FwSGVpZ2h0OnFiKGEsXCJISUtMRUZKTU5UWkJEUFJBR09RU1VWV1hZXCIsdCkueU1heCx1c0RlZmF1bHRDaGFyOmEuaGFzQ2hhcihcIiBcIik/MzI6MCx1c0JyZWFrQ2hhcjphLmhhc0NoYXIoXCIgXCIpPzMyOjB9KSx5PVllLm1ha2UoYS5nbHlwaHMpLHo9TWUubWFrZShhLmdseXBocyksQT1hLmdldEVuZ2xpc2hOYW1lKFwiZm9udEZhbWlseVwiKSxCPWEuZ2V0RW5nbGlzaE5hbWUoXCJmb250U3ViZmFtaWx5XCIpLEM9QStcIiBcIitCLEQ9YS5nZXRFbmdsaXNoTmFtZShcInBvc3RTY3JpcHROYW1lXCIpO0R8fChEPUEucmVwbGFjZSgvXFxzL2csXCJcIikrXCItXCIrQik7dmFyIEU9e307Zm9yKHZhciBGIGluIGEubmFtZXMpRVtGXT1hLm5hbWVzW0ZdO0UudW5pcXVlSUR8fChFLnVuaXF1ZUlEPXtlbjphLmdldEVuZ2xpc2hOYW1lKFwibWFudWZhY3R1cmVyXCIpK1wiOlwiK0N9KSxFLnBvc3RTY3JpcHROYW1lfHwoRS5wb3N0U2NyaXB0TmFtZT17ZW46RH0pLEUucHJlZmVycmVkRmFtaWx5fHwoRS5wcmVmZXJyZWRGYW1pbHk9YS5uYW1lcy5mb250RmFtaWx5KSxFLnByZWZlcnJlZFN1YmZhbWlseXx8KEUucHJlZmVycmVkU3ViZmFtaWx5PWEubmFtZXMuZm9udFN1YmZhbWlseSk7dmFyIEc9W10sSD1nZi5tYWtlKEUsRyksST1HLmxlbmd0aD4wP1plLm1ha2UoRyk6dm9pZCAwLEo9a2YubWFrZSgpLEs9VmUubWFrZShhLmdseXBocyx7dmVyc2lvbjphLmdldEVuZ2xpc2hOYW1lKFwidmVyc2lvblwiKSxmdWxsTmFtZTpDLGZhbWlseU5hbWU6QSx3ZWlnaHROYW1lOkIscG9zdFNjcmlwdE5hbWU6RCx1bml0c1BlckVtOmEudW5pdHNQZXJFbSxmb250QkJveDpbMCx0LnlNaW4sdC5hc2NlbmRlcix0LmFkdmFuY2VXaWR0aE1heF19KSxMPWEubWV0YXMmJk9iamVjdC5rZXlzKGEubWV0YXMpLmxlbmd0aD4wP3BmLm1ha2UoYS5tZXRhcyk6dm9pZCAwLE09W3Usdix3LHgsSCx6LEosSyx5XTtJJiZNLnB1c2goSSksYS50YWJsZXMuZ3N1YiYmTS5wdXNoKG9mLm1ha2UoYS50YWJsZXMuZ3N1YikpLEwmJk0ucHVzaChMKTtmb3IodmFyIE49cGIoTSksTz1OLmVuY29kZSgpLFA9bmIoTyksUT1OLmZpZWxkcyxSPSExLFM9MDtTPFEubGVuZ3RoO1MrPTEpaWYoXCJoZWFkIHRhYmxlXCI9PT1RW1NdLm5hbWUpe1FbU10udmFsdWUuY2hlY2tTdW1BZGp1c3RtZW50PTI5ODExNDY1NTQtUCxSPSEwO2JyZWFrfWlmKCFSKXRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIGhlYWQgdGFibGUgd2l0aCBjaGVja1N1bSB0byBhZGp1c3QuXCIpO3JldHVybiBOfWZ1bmN0aW9uIHRiKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aC0xO2M8PWQ7KXt2YXIgZT1jK2Q+Pj4xLGY9YVtlXS50YWc7aWYoZj09PWIpcmV0dXJuIGU7ZjxiP2M9ZSsxOmQ9ZS0xfXJldHVybi1jLTF9ZnVuY3Rpb24gdWIoYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoLTE7Yzw9ZDspe3ZhciBlPWMrZD4+PjEsZj1hW2VdO2lmKGY9PT1iKXJldHVybiBlO2Y8Yj9jPWUrMTpkPWUtMX1yZXR1cm4tYy0xfWZ1bmN0aW9uIHZiKGEsYil7Zm9yKHZhciBjLGQ9MCxlPWEubGVuZ3RoLTE7ZDw9ZTspe3ZhciBmPWQrZT4+PjE7Yz1hW2ZdO3ZhciBnPWMuc3RhcnQ7aWYoZz09PWIpcmV0dXJuIGM7ZzxiP2Q9ZisxOmU9Zi0xfWlmKGQ+MClyZXR1cm4gYz1hW2QtMV0sYj5jLmVuZD8wOmN9ZnVuY3Rpb24gd2IoYSxiKXt0aGlzLmZvbnQ9YSx0aGlzLnRhYmxlTmFtZT1ifWZ1bmN0aW9uIHhiKGEpe3diLmNhbGwodGhpcyxhLFwiZ3Bvc1wiKX1mdW5jdGlvbiB5YihhKXt3Yi5jYWxsKHRoaXMsYSxcImdzdWJcIil9ZnVuY3Rpb24gemIoYSxiKXt2YXIgYz1hLmxlbmd0aDtpZihjIT09Yi5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBkPTA7ZDxjO2QrKylpZihhW2RdIT09YltkXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBBYihhLGIsYyl7Zm9yKHZhciBkPWEuc3VidGFibGVzLGU9MDtlPGQubGVuZ3RoO2UrKyl7dmFyIGY9ZFtlXTtpZihmLnN1YnN0Rm9ybWF0PT09YilyZXR1cm4gZn1pZihjKXJldHVybiBkLnB1c2goYyksY31mdW5jdGlvbiBCYigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3d9ZnVuY3Rpb24gQ2IoYSl7Zm9yKHZhciBiPW5ldyBBcnJheUJ1ZmZlcihhLmxlbmd0aCksYz1uZXcgVWludDhBcnJheShiKSxkPTA7ZDxhLmxlbmd0aDsrK2QpY1tkXT1hW2RdO3JldHVybiBifWZ1bmN0aW9uIERiKGEpe2Zvcih2YXIgYj1uZXcgZShhLmJ5dGVMZW5ndGgpLGM9bmV3IFVpbnQ4QXJyYXkoYSksZD0wO2Q8Yi5sZW5ndGg7KytkKWJbZF09Y1tkXTtyZXR1cm4gYn1mdW5jdGlvbiBFYihhLGIpe2lmKCFhKXRocm93IGJ9ZnVuY3Rpb24gRmIoYSxiLGMsZCxlKXt2YXIgZjtyZXR1cm4oYiZkKT4wPyhmPWEucGFyc2VCeXRlKCksMD09KGImZSkmJihmPS1mKSxmPWMrZik6Zj0oYiZlKT4wP2M6YythLnBhcnNlU2hvcnQoKSxmfWZ1bmN0aW9uIEdiKGEsYixjKXt2YXIgZD1uZXcgTGUuUGFyc2VyKGIsYyk7YS5udW1iZXJPZkNvbnRvdXJzPWQucGFyc2VTaG9ydCgpLGEuX3hNaW49ZC5wYXJzZVNob3J0KCksYS5feU1pbj1kLnBhcnNlU2hvcnQoKSxhLl94TWF4PWQucGFyc2VTaG9ydCgpLGEuX3lNYXg9ZC5wYXJzZVNob3J0KCk7dmFyIGUsZjtpZihhLm51bWJlck9mQ29udG91cnM+MCl7Zm9yKHZhciBnPWEuZW5kUG9pbnRJbmRpY2VzPVtdLGg9MDtoPGEubnVtYmVyT2ZDb250b3VycztoKz0xKWcucHVzaChkLnBhcnNlVVNob3J0KCkpO2EuaW5zdHJ1Y3Rpb25MZW5ndGg9ZC5wYXJzZVVTaG9ydCgpLGEuaW5zdHJ1Y3Rpb25zPVtdO2Zvcih2YXIgaT0wO2k8YS5pbnN0cnVjdGlvbkxlbmd0aDtpKz0xKWEuaW5zdHJ1Y3Rpb25zLnB1c2goZC5wYXJzZUJ5dGUoKSk7dmFyIGo9Z1tnLmxlbmd0aC0xXSsxO2U9W107Zm9yKHZhciBrPTA7azxqO2srPTEpaWYoZj1kLnBhcnNlQnl0ZSgpLGUucHVzaChmKSwoOCZmKT4wKWZvcih2YXIgbD1kLnBhcnNlQnl0ZSgpLG09MDttPGw7bSs9MSllLnB1c2goZiksays9MTtpZih4ZS5hcmd1bWVudChlLmxlbmd0aD09PWosXCJCYWQgZmxhZ3MuXCIpLGcubGVuZ3RoPjApe3ZhciBuLG89W107aWYoaj4wKXtmb3IodmFyIHA9MDtwPGo7cCs9MSlmPWVbcF0sbj17fSxuLm9uQ3VydmU9ISEoMSZmKSxuLmxhc3RQb2ludE9mQ29udG91cj1nLmluZGV4T2YocCk+PTAsby5wdXNoKG4pO2Zvcih2YXIgcT0wLHI9MDtyPGo7cis9MSlmPWVbcl0sbj1vW3JdLG4ueD1GYihkLGYscSwyLDE2KSxxPW4ueDtmb3IodmFyIHM9MCx0PTA7dDxqO3QrPTEpZj1lW3RdLG49b1t0XSxuLnk9RmIoZCxmLHMsNCwzMikscz1uLnl9YS5wb2ludHM9b31lbHNlIGEucG9pbnRzPVtdfWVsc2UgaWYoMD09PWEubnVtYmVyT2ZDb250b3VycylhLnBvaW50cz1bXTtlbHNle2EuaXNDb21wb3NpdGU9ITAsYS5wb2ludHM9W10sYS5jb21wb25lbnRzPVtdO2Zvcih2YXIgdT0hMDt1Oyl7ZT1kLnBhcnNlVVNob3J0KCk7dmFyIHY9e2dseXBoSW5kZXg6ZC5wYXJzZVVTaG9ydCgpLHhTY2FsZToxLHNjYWxlMDE6MCxzY2FsZTEwOjAseVNjYWxlOjEsZHg6MCxkeTowfTsoMSZlKT4wPygyJmUpPjA/KHYuZHg9ZC5wYXJzZVNob3J0KCksdi5keT1kLnBhcnNlU2hvcnQoKSk6di5tYXRjaGVkUG9pbnRzPVtkLnBhcnNlVVNob3J0KCksZC5wYXJzZVVTaG9ydCgpXTooMiZlKT4wPyh2LmR4PWQucGFyc2VDaGFyKCksdi5keT1kLnBhcnNlQ2hhcigpKTp2Lm1hdGNoZWRQb2ludHM9W2QucGFyc2VCeXRlKCksZC5wYXJzZUJ5dGUoKV0sKDgmZSk+MD92LnhTY2FsZT12LnlTY2FsZT1kLnBhcnNlRjJEb3QxNCgpOig2NCZlKT4wPyh2LnhTY2FsZT1kLnBhcnNlRjJEb3QxNCgpLHYueVNjYWxlPWQucGFyc2VGMkRvdDE0KCkpOigxMjgmZSk+MCYmKHYueFNjYWxlPWQucGFyc2VGMkRvdDE0KCksdi5zY2FsZTAxPWQucGFyc2VGMkRvdDE0KCksdi5zY2FsZTEwPWQucGFyc2VGMkRvdDE0KCksdi55U2NhbGU9ZC5wYXJzZUYyRG90MTQoKSksYS5jb21wb25lbnRzLnB1c2godiksdT0hISgzMiZlKX1pZigyNTYmZSl7YS5pbnN0cnVjdGlvbkxlbmd0aD1kLnBhcnNlVVNob3J0KCksYS5pbnN0cnVjdGlvbnM9W107Zm9yKHZhciB3PTA7dzxhLmluc3RydWN0aW9uTGVuZ3RoO3crPTEpYS5pbnN0cnVjdGlvbnMucHVzaChkLnBhcnNlQnl0ZSgpKX19fWZ1bmN0aW9uIEhiKGEsYil7Zm9yKHZhciBjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF0sZj17eDpiLnhTY2FsZSplLngrYi5zY2FsZTAxKmUueStiLmR4LHk6Yi5zY2FsZTEwKmUueCtiLnlTY2FsZSplLnkrYi5keSxvbkN1cnZlOmUub25DdXJ2ZSxsYXN0UG9pbnRPZkNvbnRvdXI6ZS5sYXN0UG9pbnRPZkNvbnRvdXJ9O2MucHVzaChmKX1yZXR1cm4gY31mdW5jdGlvbiBJYihhKXtmb3IodmFyIGI9W10sYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdO2MucHVzaChlKSxlLmxhc3RQb2ludE9mQ29udG91ciYmKGIucHVzaChjKSxjPVtdKX1yZXR1cm4geGUuYXJndW1lbnQoMD09PWMubGVuZ3RoLFwiVGhlcmUgYXJlIHN0aWxsIHBvaW50cyBsZWZ0IGluIHRoZSBjdXJyZW50IGNvbnRvdXIuXCIpLGJ9ZnVuY3Rpb24gSmIoYSl7dmFyIGI9bmV3IHI7aWYoIWEpcmV0dXJuIGI7Zm9yKHZhciBjPUliKGEpLGQ9MDtkPGMubGVuZ3RoOysrZCl7dmFyIGU9Y1tkXSxmPW51bGwsZz1lW2UubGVuZ3RoLTFdLGg9ZVswXTtpZihnLm9uQ3VydmUpYi5tb3ZlVG8oZy54LGcueSk7ZWxzZSBpZihoLm9uQ3VydmUpYi5tb3ZlVG8oaC54LGgueSk7ZWxzZXt2YXIgaT17eDouNSooZy54K2gueCkseTouNSooZy55K2gueSl9O2IubW92ZVRvKGkueCxpLnkpfWZvcih2YXIgaj0wO2o8ZS5sZW5ndGg7KytqKWlmKGY9ZyxnPWgsaD1lWyhqKzEpJWUubGVuZ3RoXSxnLm9uQ3VydmUpYi5saW5lVG8oZy54LGcueSk7ZWxzZXt2YXIgaz1oO2Yub25DdXJ2ZXx8e3g6LjUqKGcueCtmLngpLHk6LjUqKGcueStmLnkpfSxoLm9uQ3VydmV8fChrPXt4Oi41KihnLngraC54KSx5Oi41KihnLnkraC55KX0pLGIucXVhZHJhdGljQ3VydmVUbyhnLngsZy55LGsueCxrLnkpfWIuY2xvc2VQYXRoKCl9cmV0dXJuIGJ9ZnVuY3Rpb24gS2IoYSxiKXtpZihiLmlzQ29tcG9zaXRlKWZvcih2YXIgYz0wO2M8Yi5jb21wb25lbnRzLmxlbmd0aDtjKz0xKXt2YXIgZD1iLmNvbXBvbmVudHNbY10sZT1hLmdldChkLmdseXBoSW5kZXgpO2lmKGUuZ2V0UGF0aCgpLGUucG9pbnRzKXt2YXIgZj12b2lkIDA7aWYodm9pZCAwPT09ZC5tYXRjaGVkUG9pbnRzKWY9SGIoZS5wb2ludHMsZCk7ZWxzZXtcbmlmKGQubWF0Y2hlZFBvaW50c1swXT5iLnBvaW50cy5sZW5ndGgtMXx8ZC5tYXRjaGVkUG9pbnRzWzFdPmUucG9pbnRzLmxlbmd0aC0xKXRocm93IEVycm9yKFwiTWF0Y2hlZCBwb2ludHMgb3V0IG9mIHJhbmdlIGluIFwiK2IubmFtZSk7dmFyIGc9Yi5wb2ludHNbZC5tYXRjaGVkUG9pbnRzWzBdXSxoPWUucG9pbnRzW2QubWF0Y2hlZFBvaW50c1sxXV0saT17eFNjYWxlOmQueFNjYWxlLHNjYWxlMDE6ZC5zY2FsZTAxLHNjYWxlMTA6ZC5zY2FsZTEwLHlTY2FsZTpkLnlTY2FsZSxkeDowLGR5OjB9O2g9SGIoW2hdLGkpWzBdLGkuZHg9Zy54LWgueCxpLmR5PWcueS1oLnksZj1IYihlLnBvaW50cyxpKX1iLnBvaW50cz1iLnBvaW50cy5jb25jYXQoZil9fXJldHVybiBKYihiLnBvaW50cyl9ZnVuY3Rpb24gTGIoYSxiLGMsZCl7Zm9yKHZhciBlPW5ldyBTZS5HbHlwaFNldChkKSxmPTA7ZjxjLmxlbmd0aC0xO2YrPTEpe3ZhciBnPWNbZl07ZyE9PWNbZisxXT9lLnB1c2goZixTZS50dGZHbHlwaExvYWRlcihkLGYsR2IsYSxiK2csS2IpKTplLnB1c2goZixTZS5nbHlwaExvYWRlcihkLGYpKX1yZXR1cm4gZX1mdW5jdGlvbiBNYihhKXt0aGlzLmZvbnQ9YSx0aGlzLmdldENvbW1hbmRzPWZ1bmN0aW9uKGEpe3JldHVybiB2Zi5nZXRQYXRoKGEpLmNvbW1hbmRzfSx0aGlzLl9mcGdtU3RhdGU9dGhpcy5fcHJlcFN0YXRlPXZvaWQgMCx0aGlzLl9lcnJvclN0YXRlPTB9ZnVuY3Rpb24gTmIoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gT2IoYSl7cmV0dXJuIE1hdGguc2lnbihhKSpNYXRoLnJvdW5kKE1hdGguYWJzKGEpKX1mdW5jdGlvbiBQYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKk1hdGgucm91bmQoTWF0aC5hYnMoMiphKSkvMn1mdW5jdGlvbiBRYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKihNYXRoLnJvdW5kKE1hdGguYWJzKGEpKy41KS0uNSl9ZnVuY3Rpb24gUmIoYSl7cmV0dXJuIE1hdGguc2lnbihhKSpNYXRoLmNlaWwoTWF0aC5hYnMoYSkpfWZ1bmN0aW9uIFNiKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqTWF0aC5mbG9vcihNYXRoLmFicyhhKSl9ZnVuY3Rpb24gVGIoYSxiKXt0aGlzLng9YSx0aGlzLnk9Yix0aGlzLmF4aXM9dm9pZCAwLHRoaXMuc2xvcGU9Yi9hLHRoaXMubm9ybWFsU2xvcGU9LWEvYixPYmplY3QuZnJlZXplKHRoaXMpfWZ1bmN0aW9uIFViKGEsYil7dmFyIGM9TWF0aC5zcXJ0KGEqYStiKmIpO3JldHVybiBhLz1jLGIvPWMsMT09PWEmJjA9PT1iP3hmOjA9PT1hJiYxPT09Yj95ZjpuZXcgVGIoYSxiKX1mdW5jdGlvbiBWYihhLGIsYyxkKXt0aGlzLng9dGhpcy54bz1NYXRoLnJvdW5kKDY0KmEpLzY0LHRoaXMueT10aGlzLnlvPU1hdGgucm91bmQoNjQqYikvNjQsdGhpcy5sYXN0UG9pbnRPZkNvbnRvdXI9Yyx0aGlzLm9uQ3VydmU9ZCx0aGlzLnByZXZQb2ludE9uQ29udG91cj12b2lkIDAsdGhpcy5uZXh0UG9pbnRPbkNvbnRvdXI9dm9pZCAwLHRoaXMueFRvdWNoZWQ9ITEsdGhpcy55VG91Y2hlZD0hMSxPYmplY3QucHJldmVudEV4dGVuc2lvbnModGhpcyl9ZnVuY3Rpb24gV2IoYSxiKXtzd2l0Y2godGhpcy5lbnY9YSx0aGlzLnN0YWNrPVtdLHRoaXMucHJvZz1iLGEpe2Nhc2VcImdseWZcIjp0aGlzLnpwMD10aGlzLnpwMT10aGlzLnpwMj0xLHRoaXMucnAwPXRoaXMucnAxPXRoaXMucnAyPTA7Y2FzZVwicHJlcFwiOnRoaXMuZnY9dGhpcy5wdj10aGlzLmRwdj14Zix0aGlzLnJvdW5kPU9ifX1mdW5jdGlvbiBYYihhKXtmb3IodmFyIGI9YS50Wm9uZT1uZXcgQXJyYXkoYS5nWm9uZS5sZW5ndGgpLGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdPW5ldyBWYigwLDApfWZ1bmN0aW9uIFliKGEsYil7dmFyIGMsZD1hLnByb2csZT1hLmlwLGY9MTtkb3tpZig4OD09PShjPWRbKytlXSkpZisrO2Vsc2UgaWYoODk9PT1jKWYtLTtlbHNlIGlmKDY0PT09YyllKz1kW2UrMV0rMTtlbHNlIGlmKDY1PT09YyllKz0yKmRbZSsxXSsxO2Vsc2UgaWYoYz49MTc2JiZjPD0xODMpZSs9Yy0xNzYrMTtlbHNlIGlmKGM+PTE4NCYmYzw9MTkxKWUrPTIqKGMtMTg0KzEpO2Vsc2UgaWYoYiYmMT09PWYmJjI3PT09YylicmVha313aGlsZShmPjApO2EuaXA9ZX1mdW5jdGlvbiBaYihiLGMpe2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNWVENBW1wiK2IuYXhpcytcIl1cIiksYy5mdj1jLnB2PWMuZHB2PWJ9ZnVuY3Rpb24gJGIoYixjKXthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTUFZUQ0FbXCIrYi5heGlzK1wiXVwiKSxjLnB2PWMuZHB2PWJ9ZnVuY3Rpb24gX2IoYixjKXthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTRlZUQ0FbXCIrYi5heGlzK1wiXVwiKSxjLmZ2PWJ9ZnVuY3Rpb24gYWMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnoyW2VdLGg9Yy56MVtmXTthLkRFQlVHJiZjb25zb2xlLmxvZyhcIlNQVlRMW1wiK2IrXCJdXCIsZSxmKTt2YXIgaSxqO2I/KGk9Zy55LWgueSxqPWgueC1nLngpOihpPWgueC1nLngsaj1oLnktZy55KSxjLnB2PWMuZHB2PVViKGksail9ZnVuY3Rpb24gYmMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnoyW2VdLGg9Yy56MVtmXTthLkRFQlVHJiZjb25zb2xlLmxvZyhcIlNGVlRMW1wiK2IrXCJdXCIsZSxmKTt2YXIgaSxqO2I/KGk9Zy55LWgueSxqPWgueC1nLngpOihpPWgueC1nLngsaj1oLnktZy55KSxjLmZ2PVViKGksail9ZnVuY3Rpb24gY2MoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNQVkZTW11cIixkLGUpLGIucHY9Yi5kcHY9VWIoZSxkKX1mdW5jdGlvbiBkYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1BWRlNbXVwiLGQsZSksYi5mdj1VYihlLGQpfWZ1bmN0aW9uIGVjKGIpe3ZhciBjPWIuc3RhY2ssZD1iLnB2O2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdQVltdXCIpLGMucHVzaCgxNjM4NCpkLngpLGMucHVzaCgxNjM4NCpkLnkpfWZ1bmN0aW9uIGZjKGIpe3ZhciBjPWIuc3RhY2ssZD1iLmZ2O2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdGVltdXCIpLGMucHVzaCgxNjM4NCpkLngpLGMucHVzaCgxNjM4NCpkLnkpfWZ1bmN0aW9uIGdjKGIpe2IuZnY9Yi5wdixhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTRlZUUFZbXVwiKX1mdW5jdGlvbiBoYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCksZj1jLnBvcCgpLGc9Yy5wb3AoKSxoPWMucG9wKCksaT1iLnowLGo9Yi56MSxrPWlbZF0sbD1pW2VdLG09altmXSxuPWpbZ10sbz1iLnoyW2hdO2EuREVCVUcmJmNvbnNvbGUubG9nKFwiSVNFQ1RbXSwgXCIsZCxlLGYsZyxoKTt2YXIgcD1rLngscT1rLnkscj1sLngscz1sLnksdD1tLngsdT1tLnksdj1uLngsdz1uLnkseD0ocC1yKSoodS13KS0ocS1zKSoodC12KSx5PXAqcy1xKnIsej10KnctdSp2O28ueD0oeSoodC12KS16KihwLXIpKS94LG8ueT0oeSoodS13KS16KihxLXMpKS94fWZ1bmN0aW9uIGljKGIpe2IucnAwPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JQMFtdXCIsYi5ycDApfWZ1bmN0aW9uIGpjKGIpe2IucnAxPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JQMVtdXCIsYi5ycDEpfWZ1bmN0aW9uIGtjKGIpe2IucnAyPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JQMltdXCIsYi5ycDIpfWZ1bmN0aW9uIGxjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUDBbXVwiLGMpLGIuenAwPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejA9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56MD1iLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lIHBvaW50ZXJcIil9fWZ1bmN0aW9uIG1jKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUDFbXVwiLGMpLGIuenAxPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejE9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56MT1iLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lIHBvaW50ZXJcIil9fWZ1bmN0aW9uIG5jKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUDJbXVwiLGMpLGIuenAyPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejI9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56Mj1iLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lIHBvaW50ZXJcIil9fWZ1bmN0aW9uIG9jKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUFNbXVwiLGMpLGIuenAwPWIuenAxPWIuenAyPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejA9Yi56MT1iLnoyPWIudFpvbmU7YnJlYWs7Y2FzZSAxOmIuejA9Yi56MT1iLnoyPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gcGMoYil7Yi5sb29wPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0xPT1BbXVwiLGIubG9vcCl9ZnVuY3Rpb24gcWMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlRHW11cIiksYi5yb3VuZD1PYn1mdW5jdGlvbiByYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSVEhHW11cIiksYi5yb3VuZD1RYn1mdW5jdGlvbiBzYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNNRFtdXCIsYyksYi5taW5EaXM9Yy82NH1mdW5jdGlvbiB0YyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFTFNFW11cIiksWWIoYiwhMSl9ZnVuY3Rpb24gdWMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJKTVBSW11cIixjKSxiLmlwKz1jLTF9ZnVuY3Rpb24gdmMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTQ1ZUQ0lbXVwiLGMpLGIuY3ZDdXRJbj1jLzY0fWZ1bmN0aW9uIHdjKGIpe3ZhciBjPWIuc3RhY2s7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRFVQW11cIiksYy5wdXNoKGNbYy5sZW5ndGgtMV0pfWZ1bmN0aW9uIHhjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlBPUFtdXCIpLGIuc3RhY2sucG9wKCl9ZnVuY3Rpb24geWMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQ0xFQVJbXVwiKSxiLnN0YWNrLmxlbmd0aD0wfWZ1bmN0aW9uIHpjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTV0FQW11cIiksYy5wdXNoKGQpLGMucHVzaChlKX1mdW5jdGlvbiBBYyhiKXt2YXIgYz1iLnN0YWNrO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkRFUFRIW11cIiksYy5wdXNoKGMubGVuZ3RoKX1mdW5jdGlvbiBCYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTE9PUENBTExbXVwiLGQsZSk7dmFyIGY9Yi5pcCxnPWIucHJvZztiLnByb2c9Yi5mdW5jc1tkXTtmb3IodmFyIGg9MDtoPGU7aCsrKXNmKGIpLGEuREVCVUcmJmNvbnNvbGUubG9nKCsrYi5zdGVwLGgrMTxlP1wibmV4dCBsb29wY2FsbFwiOlwiZG9uZSBsb29wY2FsbFwiLGgpO2IuaXA9ZixiLnByb2c9Z31mdW5jdGlvbiBDYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkNBTExbXVwiLGMpO3ZhciBkPWIuaXAsZT1iLnByb2c7Yi5wcm9nPWIuZnVuY3NbY10sc2YoYiksYi5pcD1kLGIucHJvZz1lLGEuREVCVUcmJmNvbnNvbGUubG9nKCsrYi5zdGVwLFwicmV0dXJuaW5nIGZyb21cIixjKX1mdW5jdGlvbiBEYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJDSU5ERVhbXVwiLGQpLGMucHVzaChjW2MubGVuZ3RoLWRdKX1mdW5jdGlvbiBFYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNSU5ERVhbXVwiLGQpLGMucHVzaChjLnNwbGljZShjLmxlbmd0aC1kLDEpWzBdKX1mdW5jdGlvbiBGYyhiKXtpZihcImZwZ21cIiE9PWIuZW52KXRocm93IG5ldyBFcnJvcihcIkZERUYgbm90IGFsbG93ZWQgaGVyZVwiKTt2YXIgYz1iLnN0YWNrLGQ9Yi5wcm9nLGU9Yi5pcCxmPWMucG9wKCksZz1lO2ZvcihhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJGREVGW11cIixmKTs0NSE9PWRbKytlXTspO2IuaXA9ZSxiLmZ1bmNzW2ZdPWQuc2xpY2UoZysxLGUpfWZ1bmN0aW9uIEdjKGIsYyl7dmFyIGQ9Yy5zdGFjay5wb3AoKSxlPWMuejBbZF0sZj1jLmZ2LGc9Yy5wdjthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNREFQW1wiK2IrXCJdXCIsZCk7dmFyIGg9Zy5kaXN0YW5jZShlLHpmKTtiJiYoaD1jLnJvdW5kKGgpKSxmLnNldFJlbGF0aXZlKGUsemYsaCxnKSxmLnRvdWNoKGUpLGMucnAwPWMucnAxPWR9ZnVuY3Rpb24gSGMoYixjKXt2YXIgZCxlLGYsZz1jLnoyLGg9Zy5sZW5ndGgtMjthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJJVVBbXCIrYi5heGlzK1wiXVwiKTtmb3IodmFyIGk9MDtpPGg7aSsrKWQ9Z1tpXSxiLnRvdWNoZWQoZCl8fChlPWQucHJldlRvdWNoZWQoYikpIT09ZCYmKGY9ZC5uZXh0VG91Y2hlZChiKSxlPT09ZiYmYi5zZXRSZWxhdGl2ZShkLGQsYi5kaXN0YW5jZShlLGUsITEsITApLGIsITApLGIuaW50ZXJwb2xhdGUoZCxlLGYsYikpfWZ1bmN0aW9uIEljKGIsYyl7Zm9yKHZhciBkPWMuc3RhY2ssZT1iP2MucnAxOmMucnAyLGY9KGI/Yy56MDpjLnoxKVtlXSxnPWMuZnYsaD1jLnB2LGk9Yy5sb29wLGo9Yy56MjtpLS07KXt2YXIgaz1kLnBvcCgpLGw9altrXSxtPWguZGlzdGFuY2UoZixmLCExLCEwKTtnLnNldFJlbGF0aXZlKGwsbCxtLGgpLGcudG91Y2gobCksYS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLChjLmxvb3A+MT9cImxvb3AgXCIrKGMubG9vcC1pKStcIjogXCI6XCJcIikrXCJTSFBbXCIrKGI/XCJycDFcIjpcInJwMlwiKStcIl1cIixrKX1jLmxvb3A9MX1mdW5jdGlvbiBKYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1iP2MucnAxOmMucnAyLGY9KGI/Yy56MDpjLnoxKVtlXSxnPWMuZnYsaD1jLnB2LGk9ZC5wb3AoKSxqPWMuejJbYy5jb250b3Vyc1tpXV0saz1qO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNIQ1tcIitiK1wiXVwiLGkpO3ZhciBsPWguZGlzdGFuY2UoZixmLCExLCEwKTtkb3trIT09ZiYmZy5zZXRSZWxhdGl2ZShrLGssbCxoKSxrPWsubmV4dFBvaW50T25Db250b3VyfXdoaWxlKGshPT1qKX1mdW5jdGlvbiBLYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1iP2MucnAxOmMucnAyLGY9KGI/Yy56MDpjLnoxKVtlXSxnPWMuZnYsaD1jLnB2LGk9ZC5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTSFpbXCIrYitcIl1cIixpKTt2YXIgajtzd2l0Y2goaSl7Y2FzZSAwOmo9Yy50Wm9uZTticmVhaztjYXNlIDE6aj1jLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lXCIpfWZvcih2YXIgayxsPWguZGlzdGFuY2UoZixmLCExLCEwKSxtPWoubGVuZ3RoLTIsbj0wO248bTtuKyspaz1qW25dLGcuc2V0UmVsYXRpdmUoayxrLGwsaCl9ZnVuY3Rpb24gTGMoYil7Zm9yKHZhciBjPWIuc3RhY2ssZD1iLmxvb3AsZT1iLmZ2LGY9Yy5wb3AoKS82NCxnPWIuejI7ZC0tOyl7dmFyIGg9Yy5wb3AoKSxpPWdbaF07YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLChiLmxvb3A+MT9cImxvb3AgXCIrKGIubG9vcC1kKStcIjogXCI6XCJcIikrXCJTSFBJWFtdXCIsaCxmKSxlLnNldFJlbGF0aXZlKGksaSxmKSxlLnRvdWNoKGkpfWIubG9vcD0xfWZ1bmN0aW9uIE1jKGIpe2Zvcih2YXIgYz1iLnN0YWNrLGQ9Yi5ycDEsZT1iLnJwMixmPWIubG9vcCxnPWIuejBbZF0saD1iLnoxW2VdLGk9Yi5mdixqPWIuZHB2LGs9Yi56MjtmLS07KXt2YXIgbD1jLnBvcCgpLG09a1tsXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsKGIubG9vcD4xP1wibG9vcCBcIisoYi5sb29wLWYpK1wiOiBcIjpcIlwiKStcIklQW11cIixsLGQsXCI8LT5cIixlKSxpLmludGVycG9sYXRlKG0sZyxoLGopLGkudG91Y2gobSl9Yi5sb29wPTF9ZnVuY3Rpb24gTmMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKS82NCxmPWQucG9wKCksZz1jLnoxW2ZdLGg9Yy56MFtjLnJwMF0saT1jLmZ2LGo9Yy5wdjtpLnNldFJlbGF0aXZlKGcsaCxlLGopLGkudG91Y2goZyksYS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiTVNJUlBbXCIrYitcIl1cIixlLGYpLGMucnAxPWMucnAwLGMucnAyPWYsYiYmKGMucnAwPWYpfWZ1bmN0aW9uIE9jKGIpe2Zvcih2YXIgYz1iLnN0YWNrLGQ9Yi5ycDAsZT1iLnowW2RdLGY9Yi5sb29wLGc9Yi5mdixoPWIucHYsaT1iLnoxO2YtLTspe3ZhciBqPWMucG9wKCksaz1pW2pdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCwoYi5sb29wPjE/XCJsb29wIFwiKyhiLmxvb3AtZikrXCI6IFwiOlwiXCIpK1wiQUxJR05SUFtdXCIsaiksZy5zZXRSZWxhdGl2ZShrLGUsMCxoKSxnLnRvdWNoKGspfWIubG9vcD0xfWZ1bmN0aW9uIFBjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJUREdbXVwiKSxiLnJvdW5kPVBifWZ1bmN0aW9uIFFjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MFtmXSxoPWMuZnYsaT1jLnB2LGo9Yy5jdnRbZV07YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiTUlBUFtcIitiK1wiXVwiLGUsXCIoXCIsaixcIilcIixmKTt2YXIgaz1pLmRpc3RhbmNlKGcsemYpO2ImJihNYXRoLmFicyhrLWopPGMuY3ZDdXRJbiYmKGs9aiksaz1jLnJvdW5kKGspKSxoLnNldFJlbGF0aXZlKGcsemYsayxpKSwwPT09Yy56cDAmJihnLnhvPWcueCxnLnlvPWcueSksaC50b3VjaChnKSxjLnJwMD1jLnJwMT1mfWZ1bmN0aW9uIFJjKGIpe3ZhciBjPWIucHJvZyxkPWIuaXAsZT1iLnN0YWNrLGY9Y1srK2RdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5QVVNIQltdXCIsZik7Zm9yKHZhciBnPTA7ZzxmO2crKyllLnB1c2goY1srK2RdKTtiLmlwPWR9ZnVuY3Rpb24gU2MoYil7dmFyIGM9Yi5pcCxkPWIucHJvZyxlPWIuc3RhY2ssZj1kWysrY107YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTlBVU0hXW11cIixmKTtmb3IodmFyIGc9MDtnPGY7ZysrKXt2YXIgaD1kWysrY108PDh8ZFsrK2NdOzMyNzY4JmgmJihoPS0oMSsoNjU1MzVeaCkpKSxlLnB1c2goaCl9Yi5pcD1jfWZ1bmN0aW9uIFRjKGIpe3ZhciBjPWIuc3RhY2ssZD1iLnN0b3JlO2R8fChkPWIuc3RvcmU9W10pO3ZhciBlPWMucG9wKCksZj1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIldTXCIsZSxmKSxkW2ZdPWV9ZnVuY3Rpb24gVWMoYil7dmFyIGM9Yi5zdGFjayxkPWIuc3RvcmUsZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJTXCIsZSk7dmFyIGY9ZCYmZFtlXXx8MDtjLnB1c2goZil9ZnVuY3Rpb24gVmMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIldDVlRQXCIsZCxlKSxiLmN2dFtlXT1kLzY0fWZ1bmN0aW9uIFdjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJDVlRcIixkKSxjLnB1c2goNjQqYi5jdnRbZF0pfWZ1bmN0aW9uIFhjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1jLnoyW2VdO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIkdDW1wiK2IrXCJdXCIsZSksZC5wdXNoKDY0KmMuZHB2LmRpc3RhbmNlKGYsemYsYiwhMSkpfWZ1bmN0aW9uIFljKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MVtlXSxoPWMuejBbZl0saT1jLmRwdi5kaXN0YW5jZShoLGcsYixiKTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNRFtcIitiK1wiXVwiLGUsZixcIi0+XCIsaSksYy5zdGFjay5wdXNoKE1hdGgucm91bmQoNjQqaSkpfWZ1bmN0aW9uIFpjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk1QUEVNW11cIiksYi5zdGFjay5wdXNoKGIucHBlbSl9ZnVuY3Rpb24gJGMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRkxJUE9OW11cIiksYi5hdXRvRmxpcD0hMH1mdW5jdGlvbiBfYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTFRbXVwiLGQsZSksYy5wdXNoKGU8ZD8xOjApfWZ1bmN0aW9uIGFkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJMVEVRW11cIixkLGUpLGMucHVzaChlPD1kPzE6MCl9ZnVuY3Rpb24gYmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdUW11cIixkLGUpLGMucHVzaChlPmQ/MTowKX1mdW5jdGlvbiBjZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR1RFUVtdXCIsZCxlKSxjLnB1c2goZT49ZD8xOjApfWZ1bmN0aW9uIGRkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFUVtdXCIsZCxlKSxjLnB1c2goZD09PWU/MTowKX1mdW5jdGlvbiBlZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTkVRW11cIixkLGUpLGMucHVzaChkIT09ZT8xOjApfWZ1bmN0aW9uIGZkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk9ERFtdXCIsZCksYy5wdXNoKE1hdGgudHJ1bmMoZCklMj8xOjApfWZ1bmN0aW9uIGdkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVWRU5bXVwiLGQpLGMucHVzaChNYXRoLnRydW5jKGQpJTI/MDoxKX1mdW5jdGlvbiBoZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIklGW11cIixjKSxjfHwoWWIoYiwhMCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRUlGW11cIikpfWZ1bmN0aW9uIGlkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVJRltdXCIpfWZ1bmN0aW9uIGpkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJBTkRbXVwiLGQsZSksYy5wdXNoKGQmJmU/MTowKX1mdW5jdGlvbiBrZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiT1JbXVwiLGQsZSksYy5wdXNoKGR8fGU/MTowKX1mdW5jdGlvbiBsZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJOT1RbXVwiLGQpLGMucHVzaChkPzA6MSl9ZnVuY3Rpb24gbWQoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWMuZnYsZz1jLnB2LGg9Yy5wcGVtLGk9Yy5kZWx0YUJhc2UrMTYqKGItMSksaj1jLmRlbHRhU2hpZnQsaz1jLnowO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIkRFTFRBUFtcIitiK1wiXVwiLGUsZCk7Zm9yKHZhciBsPTA7bDxlO2wrKyl7dmFyIG09ZC5wb3AoKSxuPWQucG9wKCk7aWYoaSsoKDI0MCZuKT4+NCk9PT1oKXt2YXIgbz0oMTUmbiktODtvPj0wJiZvKyssYS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFQRklYXCIsbSxcImJ5XCIsbypqKTt2YXIgcD1rW21dO2Yuc2V0UmVsYXRpdmUocCxwLG8qaixnKX19fWZ1bmN0aW9uIG5kKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNEQltdXCIsZCksYi5kZWx0YUJhc2U9ZH1mdW5jdGlvbiBvZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTRFNbXVwiLGQpLGIuZGVsdGFTaGlmdD1NYXRoLnBvdyguNSxkKX1mdW5jdGlvbiBwZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQUREW11cIixkLGUpLGMucHVzaChlK2QpfWZ1bmN0aW9uIHFkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTVUJbXVwiLGQsZSksYy5wdXNoKGUtZCl9ZnVuY3Rpb24gcmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkRJVltdXCIsZCxlKSxjLnB1c2goNjQqZS9kKX1mdW5jdGlvbiBzZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTVVMW11cIixkLGUpLGMucHVzaChlKmQvNjQpfWZ1bmN0aW9uIHRkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkFCU1tdXCIsZCksYy5wdXNoKE1hdGguYWJzKGQpKX1mdW5jdGlvbiB1ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJORUdbXVwiLGQpLGMucHVzaCgtZCl9ZnVuY3Rpb24gdmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRkxPT1JbXVwiLGQpLGMucHVzaCg2NCpNYXRoLmZsb29yKGQvNjQpKX1mdW5jdGlvbiB3ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJDRUlMSU5HW11cIixkKSxjLnB1c2goNjQqTWF0aC5jZWlsKGQvNjQpKX1mdW5jdGlvbiB4ZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlJPVU5EW11cIiksZC5wdXNoKDY0KmMucm91bmQoZS82NCkpfWZ1bmN0aW9uIHlkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJXQ1ZURltdXCIsZCxlKSxiLmN2dFtlXT1kKmIucHBlbS9iLmZvbnQudW5pdHNQZXJFbX1mdW5jdGlvbiB6ZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9Yy5wcGVtLGc9Yy5kZWx0YUJhc2UrMTYqKGItMSksaD1jLmRlbHRhU2hpZnQ7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFDW1wiK2IrXCJdXCIsZSxkKTtmb3IodmFyIGk9MDtpPGU7aSsrKXt2YXIgaj1kLnBvcCgpLGs9ZC5wb3AoKTtpZihnKygoMjQwJmspPj40KT09PWYpe3ZhciBsPSgxNSZrKS04O2w+PTAmJmwrKzt2YXIgbT1sKmg7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFDRklYXCIsaixcImJ5XCIsbSksYy5jdnRbal0rPW19fX1mdW5jdGlvbiBBZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNST1VORFtdXCIsYyksYi5yb3VuZD13Zjt2YXIgZDtzd2l0Y2goMTkyJmMpe2Nhc2UgMDpkPS41O2JyZWFrO2Nhc2UgNjQ6ZD0xO2JyZWFrO2Nhc2UgMTI4OmQ9MjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgU1JPVU5EIHZhbHVlXCIpfXN3aXRjaChiLnNyUGVyaW9kPWQsNDgmYyl7Y2FzZSAwOmIuc3JQaGFzZT0wO2JyZWFrO2Nhc2UgMTY6Yi5zclBoYXNlPS4yNSpkO2JyZWFrO2Nhc2UgMzI6Yi5zclBoYXNlPS41KmQ7YnJlYWs7Y2FzZSA0ODpiLnNyUGhhc2U9Ljc1KmQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFNST1VORCB2YWx1ZVwiKX1jJj0xNSxiLnNyVGhyZXNob2xkPTA9PT1jPzA6KGMvOC0uNSkqZH1mdW5jdGlvbiBCZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlM0NVJPVU5EW11cIixjKSxiLnJvdW5kPXdmO3ZhciBkO3N3aXRjaCgxOTImYyl7Y2FzZSAwOmQ9TWF0aC5zcXJ0KDIpLzI7YnJlYWs7Y2FzZSA2NDpkPU1hdGguc3FydCgyKTticmVhaztjYXNlIDEyODpkPTIqTWF0aC5zcXJ0KDIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBTNDVST1VORCB2YWx1ZVwiKX1zd2l0Y2goYi5zclBlcmlvZD1kLDQ4JmMpe2Nhc2UgMDpiLnNyUGhhc2U9MDticmVhaztjYXNlIDE2OmIuc3JQaGFzZT0uMjUqZDticmVhaztjYXNlIDMyOmIuc3JQaGFzZT0uNSpkO2JyZWFrO2Nhc2UgNDg6Yi5zclBoYXNlPS43NSpkO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBTNDVST1VORCB2YWx1ZVwiKX1jJj0xNSxiLnNyVGhyZXNob2xkPTA9PT1jPzA6KGMvOC0uNSkqZH1mdW5jdGlvbiBDZChiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJST0ZGW11cIiksYi5yb3VuZD1OYn1mdW5jdGlvbiBEZChiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSVVRHW11cIiksYi5yb3VuZD1SYn1mdW5jdGlvbiBFZChiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSRFRHW11cIiksYi5yb3VuZD1TYn1mdW5jdGlvbiBGZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNDQU5DVFJMW11cIixjKX1mdW5jdGlvbiBHZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejJbZV0saD1jLnoxW2ZdO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNEUFZUTFtcIitiK1wiXVwiLGUsZik7dmFyIGksajtiPyhpPWcueS1oLnksaj1oLngtZy54KTooaT1oLngtZy54LGo9aC55LWcueSksYy5kcHY9VWIoaSxqKX1mdW5jdGlvbiBIZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPTA7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR0VUSU5GT1tdXCIsZCksMSZkJiYoZT0zNSksMzImZCYmKGV8PTQwOTYpLGMucHVzaChlKX1mdW5jdGlvbiBJZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCksZj1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJPTExbXVwiKSxjLnB1c2goZSksYy5wdXNoKGQpLGMucHVzaChmKX1mdW5jdGlvbiBKZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTUFYW11cIixkLGUpLGMucHVzaChNYXRoLm1heChlLGQpKX1mdW5jdGlvbiBLZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTUlOW11cIixkLGUpLGMucHVzaChNYXRoLm1pbihlLGQpKX1mdW5jdGlvbiBMZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNDQU5UWVBFW11cIixjKX1mdW5jdGlvbiBNZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpLGQ9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiSU5TVENUUkxbXVwiLGMsZCksYyl7Y2FzZSAxOnJldHVybiB2b2lkKGIuaW5oaWJpdEdyaWRGaXQ9ISFkKTtjYXNlIDI6cmV0dXJuIHZvaWQoYi5pZ25vcmVDdnQ9ISFkKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgSU5TVENUUkxbXSBzZWxlY3RvclwiKX19ZnVuY3Rpb24gTmQoYixjKXt2YXIgZD1jLnN0YWNrLGU9Yy5wcm9nLGY9Yy5pcDthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJQVVNIQltcIitiK1wiXVwiKTtmb3IodmFyIGc9MDtnPGI7ZysrKWQucHVzaChlWysrZl0pO2MuaXA9Zn1mdW5jdGlvbiBPZChiLGMpe3ZhciBkPWMuaXAsZT1jLnByb2csZj1jLnN0YWNrO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuaXAsXCJQVVNIV1tcIitiK1wiXVwiKTtmb3IodmFyIGc9MDtnPGI7ZysrKXt2YXIgaD1lWysrZF08PDh8ZVsrK2RdOzMyNzY4JmgmJihoPS0oMSsoNjU1MzVeaCkpKSxmLnB1c2goaCl9Yy5pcD1kfWZ1bmN0aW9uIFBkKGIsYyxkLGUsZixnKXt2YXIgaCxpLGosayxsPWcuc3RhY2ssbT1iJiZsLnBvcCgpLG49bC5wb3AoKSxvPWcucnAwLHA9Zy56MFtvXSxxPWcuejFbbl0scj1nLm1pbkRpcyxzPWcuZnYsdD1nLmRwdjtpPWg9dC5kaXN0YW5jZShxLHAsITAsITApLGo9aT49MD8xOi0xLGk9TWF0aC5hYnMoaSksYiYmKGs9Zy5jdnRbbV0sZSYmTWF0aC5hYnMoaS1rKTxnLmN2Q3V0SW4mJihpPWspKSxkJiZpPHImJihpPXIpLGUmJihpPWcucm91bmQoaSkpLHMuc2V0UmVsYXRpdmUocSxwLGoqaSx0KSxzLnRvdWNoKHEpLGEuREVCVUcmJmNvbnNvbGUubG9nKGcuc3RlcCwoYj9cIk1JUlBbXCI6XCJNRFJQW1wiKSsoYz9cIk1cIjpcIm1cIikrKGQ/XCI+XCI6XCJfXCIpKyhlP1wiUlwiOlwiX1wiKSsoMD09PWY/XCJHclwiOjE9PT1mP1wiQmxcIjoyPT09Zj9cIldoXCI6XCJcIikrXCJdXCIsYj9tK1wiKFwiK2cuY3Z0W21dK1wiLFwiK2srXCIpXCI6XCJcIixuLFwiKGQgPVwiLGgsXCItPlwiLGoqaSxcIilcIiksZy5ycDE9Zy5ycDAsZy5ycDI9bixjJiYoZy5ycDA9bil9ZnVuY3Rpb24gUWQoYSl7YT1hfHx7fSxhLmVtcHR5fHwoRWIoYS5mYW1pbHlOYW1lLFwiV2hlbiBjcmVhdGluZyBhIG5ldyBGb250IG9iamVjdCwgZmFtaWx5TmFtZSBpcyByZXF1aXJlZC5cIiksRWIoYS5zdHlsZU5hbWUsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBzdHlsZU5hbWUgaXMgcmVxdWlyZWQuXCIpLEViKGEudW5pdHNQZXJFbSxcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIHVuaXRzUGVyRW0gaXMgcmVxdWlyZWQuXCIpLEViKGEuYXNjZW5kZXIsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBhc2NlbmRlciBpcyByZXF1aXJlZC5cIiksRWIoYS5kZXNjZW5kZXIsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBkZXNjZW5kZXIgaXMgcmVxdWlyZWQuXCIpLEViKGEuZGVzY2VuZGVyPDAsXCJEZXNjZW5kZXIgc2hvdWxkIGJlIG5lZ2F0aXZlIChlLmcuIC01MTIpLlwiKSx0aGlzLm5hbWVzPXtmb250RmFtaWx5OntlbjphLmZhbWlseU5hbWV8fFwiIFwifSxmb250U3ViZmFtaWx5OntlbjphLnN0eWxlTmFtZXx8XCIgXCJ9LGZ1bGxOYW1lOntlbjphLmZ1bGxOYW1lfHxhLmZhbWlseU5hbWUrXCIgXCIrYS5zdHlsZU5hbWV9LHBvc3RTY3JpcHROYW1lOntlbjphLnBvc3RTY3JpcHROYW1lfHwoYS5mYW1pbHlOYW1lK2Euc3R5bGVOYW1lKS5yZXBsYWNlKC9cXHMvZyxcIlwiKX0sZGVzaWduZXI6e2VuOmEuZGVzaWduZXJ8fFwiIFwifSxkZXNpZ25lclVSTDp7ZW46YS5kZXNpZ25lclVSTHx8XCIgXCJ9LG1hbnVmYWN0dXJlcjp7ZW46YS5tYW51ZmFjdHVyZXJ8fFwiIFwifSxtYW51ZmFjdHVyZXJVUkw6e2VuOmEubWFudWZhY3R1cmVyVVJMfHxcIiBcIn0sbGljZW5zZTp7ZW46YS5saWNlbnNlfHxcIiBcIn0sbGljZW5zZVVSTDp7ZW46YS5saWNlbnNlVVJMfHxcIiBcIn0sdmVyc2lvbjp7ZW46YS52ZXJzaW9ufHxcIlZlcnNpb24gMC4xXCJ9LGRlc2NyaXB0aW9uOntlbjphLmRlc2NyaXB0aW9ufHxcIiBcIn0sY29weXJpZ2h0OntlbjphLmNvcHlyaWdodHx8XCIgXCJ9LHRyYWRlbWFyazp7ZW46YS50cmFkZW1hcmt8fFwiIFwifX0sdGhpcy51bml0c1BlckVtPWEudW5pdHNQZXJFbXx8MWUzLHRoaXMuYXNjZW5kZXI9YS5hc2NlbmRlcix0aGlzLmRlc2NlbmRlcj1hLmRlc2NlbmRlcix0aGlzLmNyZWF0ZWRUaW1lc3RhbXA9YS5jcmVhdGVkVGltZXN0YW1wLHRoaXMudGFibGVzPXtvczI6e3VzV2VpZ2h0Q2xhc3M6YS53ZWlnaHRDbGFzc3x8dGhpcy51c1dlaWdodENsYXNzZXMuTUVESVVNLHVzV2lkdGhDbGFzczphLndpZHRoQ2xhc3N8fHRoaXMudXNXaWR0aENsYXNzZXMuTUVESVVNLGZzU2VsZWN0aW9uOmEuZnNTZWxlY3Rpb258fHRoaXMuZnNTZWxlY3Rpb25WYWx1ZXMuUkVHVUxBUn19KSx0aGlzLnN1cHBvcnRlZD0hMCx0aGlzLmdseXBocz1uZXcgU2UuR2x5cGhTZXQodGhpcyxhLmdseXBoc3x8W10pLHRoaXMuZW5jb2Rpbmc9bmV3IFgodGhpcyksdGhpcy5wb3NpdGlvbj1uZXcgeGIodGhpcyksdGhpcy5zdWJzdGl0dXRpb249bmV3IHliKHRoaXMpLHRoaXMudGFibGVzPXRoaXMudGFibGVzfHx7fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImhpbnRpbmdcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hpbnRpbmc/dGhpcy5faGludGluZzpcInRydWV0eXBlXCI9PT10aGlzLm91dGxpbmVzRm9ybWF0P3RoaXMuX2hpbnRpbmc9bmV3IE1iKHRoaXMpOnZvaWQgMH19KX1mdW5jdGlvbiBSZChhLGIpe3ZhciBjPUpTT04uc3RyaW5naWZ5KGEpLGQ9MjU2O2Zvcih2YXIgZSBpbiBiKXt2YXIgZj1wYXJzZUludChlKTtpZihmJiYhKGY8MjU2KSl7aWYoSlNPTi5zdHJpbmdpZnkoYltlXSk9PT1jKXJldHVybiBmO2Q8PWYmJihkPWYrMSl9fXJldHVybiBiW2RdPWEsZH1mdW5jdGlvbiBTZChhLGIsYyl7dmFyIGQ9UmQoYi5uYW1lLGMpO3JldHVyblt7bmFtZTpcInRhZ19cIithLHR5cGU6XCJUQUdcIix2YWx1ZTpiLnRhZ30se25hbWU6XCJtaW5WYWx1ZV9cIithLHR5cGU6XCJGSVhFRFwiLHZhbHVlOmIubWluVmFsdWU8PDE2fSx7bmFtZTpcImRlZmF1bHRWYWx1ZV9cIithLHR5cGU6XCJGSVhFRFwiLHZhbHVlOmIuZGVmYXVsdFZhbHVlPDwxNn0se25hbWU6XCJtYXhWYWx1ZV9cIithLHR5cGU6XCJGSVhFRFwiLHZhbHVlOmIubWF4VmFsdWU8PDE2fSx7bmFtZTpcImZsYWdzX1wiK2EsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibmFtZUlEX1wiK2EsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmR9XX1mdW5jdGlvbiBUZChhLGIsYyl7dmFyIGQ9e30sZT1uZXcgTGUuUGFyc2VyKGEsYik7cmV0dXJuIGQudGFnPWUucGFyc2VUYWcoKSxkLm1pblZhbHVlPWUucGFyc2VGaXhlZCgpLGQuZGVmYXVsdFZhbHVlPWUucGFyc2VGaXhlZCgpLGQubWF4VmFsdWU9ZS5wYXJzZUZpeGVkKCksZS5za2lwKFwidVNob3J0XCIsMSksZC5uYW1lPWNbZS5wYXJzZVVTaG9ydCgpXXx8e30sZH1mdW5jdGlvbiBVZChhLGIsYyxkKXtmb3IodmFyIGU9UmQoYi5uYW1lLGQpLGY9W3tuYW1lOlwibmFtZUlEX1wiK2EsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmV9LHtuYW1lOlwiZmxhZ3NfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dLGc9MDtnPGMubGVuZ3RoOysrZyl7dmFyIGg9Y1tnXS50YWc7Zi5wdXNoKHtuYW1lOlwiYXhpc19cIithK1wiIFwiK2gsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5jb29yZGluYXRlc1toXTw8MTZ9KX1yZXR1cm4gZn1mdW5jdGlvbiBWZChhLGIsYyxkKXt2YXIgZT17fSxmPW5ldyBMZS5QYXJzZXIoYSxiKTtlLm5hbWU9ZFtmLnBhcnNlVVNob3J0KCldfHx7fSxmLnNraXAoXCJ1U2hvcnRcIiwxKSxlLmNvb3JkaW5hdGVzPXt9O2Zvcih2YXIgZz0wO2c8Yy5sZW5ndGg7KytnKWUuY29vcmRpbmF0ZXNbY1tnXS50YWddPWYucGFyc2VGaXhlZCgpO3JldHVybiBlfWZ1bmN0aW9uIFdkKGEsYil7dmFyIGM9bmV3IEllLlRhYmxlKFwiZnZhclwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJvZmZzZXRUb0RhdGFcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJjb3VudFNpemVQYWlyc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToyfSx7bmFtZTpcImF4aXNDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmF4ZXMubGVuZ3RofSx7bmFtZTpcImF4aXNTaXplXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjIwfSx7bmFtZTpcImluc3RhbmNlQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5pbnN0YW5jZXMubGVuZ3RofSx7bmFtZTpcImluc3RhbmNlU2l6ZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTo0KzQqYS5heGVzLmxlbmd0aH1dKTtjLm9mZnNldFRvRGF0YT1jLnNpemVPZigpO2Zvcih2YXIgZD0wO2Q8YS5heGVzLmxlbmd0aDtkKyspYy5maWVsZHM9Yy5maWVsZHMuY29uY2F0KFNkKGQsYS5heGVzW2RdLGIpKTtmb3IodmFyIGU9MDtlPGEuaW5zdGFuY2VzLmxlbmd0aDtlKyspYy5maWVsZHM9Yy5maWVsZHMuY29uY2F0KFVkKGUsYS5pbnN0YW5jZXNbZV0sYS5heGVzLGIpKTtyZXR1cm4gY31mdW5jdGlvbiBYZChhLGIsYyl7dmFyIGQ9bmV3IExlLlBhcnNlcihhLGIpLGU9ZC5wYXJzZVVMb25nKCk7eGUuYXJndW1lbnQoNjU1MzY9PT1lLFwiVW5zdXBwb3J0ZWQgZnZhciB0YWJsZSB2ZXJzaW9uLlwiKTt2YXIgZj1kLnBhcnNlT2Zmc2V0MTYoKTtkLnNraXAoXCJ1U2hvcnRcIiwxKTtmb3IodmFyIGc9ZC5wYXJzZVVTaG9ydCgpLGg9ZC5wYXJzZVVTaG9ydCgpLGk9ZC5wYXJzZVVTaG9ydCgpLGo9ZC5wYXJzZVVTaG9ydCgpLGs9W10sbD0wO2w8ZztsKyspay5wdXNoKFRkKGEsYitmK2wqaCxjKSk7Zm9yKHZhciBtPVtdLG49YitmK2cqaCxvPTA7bzxpO28rKyltLnB1c2goVmQoYSxuK28qaixrLGMpKTtyZXR1cm57YXhlczprLGluc3RhbmNlczptfX1mdW5jdGlvbiBZZChhLGIpe2I9Ynx8MDt2YXIgYz1uZXcgUShhLGIpLGQ9Yy5wYXJzZVZlcnNpb24oMSk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1kfHwxLjE9PT1kLFwiVW5zdXBwb3J0ZWQgR1BPUyB0YWJsZSB2ZXJzaW9uIFwiK2QpLDE9PT1kP3t2ZXJzaW9uOmQsc2NyaXB0czpjLnBhcnNlU2NyaXB0TGlzdCgpLGZlYXR1cmVzOmMucGFyc2VGZWF0dXJlTGlzdCgpLGxvb2t1cHM6Yy5wYXJzZUxvb2t1cExpc3QoRGYpfTp7dmVyc2lvbjpkLHNjcmlwdHM6Yy5wYXJzZVNjcmlwdExpc3QoKSxmZWF0dXJlczpjLnBhcnNlRmVhdHVyZUxpc3QoKSxsb29rdXBzOmMucGFyc2VMb29rdXBMaXN0KERmKSx2YXJpYXRpb25zOmMucGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3QoKX19ZnVuY3Rpb24gWmQoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcIkdQT1NcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwic2NyaXB0c1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5TY3JpcHRMaXN0KGEuc2NyaXB0cyl9LHtuYW1lOlwiZmVhdHVyZXNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuRmVhdHVyZUxpc3QoYS5mZWF0dXJlcyl9LHtuYW1lOlwibG9va3Vwc1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Mb29rdXBMaXN0KGEubG9va3VwcyxFZil9XSl9ZnVuY3Rpb24gJGQoYSl7dmFyIGI9e307YS5za2lwKFwidVNob3J0XCIpO3ZhciBjPWEucGFyc2VVU2hvcnQoKTt4ZS5hcmd1bWVudCgwPT09YyxcIlVuc3VwcG9ydGVkIGtlcm4gc3ViLXRhYmxlIHZlcnNpb24uXCIpLGEuc2tpcChcInVTaG9ydFwiLDIpO3ZhciBkPWEucGFyc2VVU2hvcnQoKTthLnNraXAoXCJ1U2hvcnRcIiwzKTtmb3IodmFyIGU9MDtlPGQ7ZSs9MSl7dmFyIGY9YS5wYXJzZVVTaG9ydCgpLGc9YS5wYXJzZVVTaG9ydCgpLGg9YS5wYXJzZVNob3J0KCk7YltmK1wiLFwiK2ddPWh9cmV0dXJuIGJ9ZnVuY3Rpb24gX2QoYSl7dmFyIGI9e307YS5za2lwKFwidVNob3J0XCIpLGEucGFyc2VVTG9uZygpPjEmJmNvbnNvbGUud2FybihcIk9ubHkgdGhlIGZpcnN0IGtlcm4gc3VidGFibGUgaXMgc3VwcG9ydGVkLlwiKSxhLnNraXAoXCJ1TG9uZ1wiKTt2YXIgYz1hLnBhcnNlVVNob3J0KCksZD0yNTUmYztpZihhLnNraXAoXCJ1U2hvcnRcIiksMD09PWQpe3ZhciBlPWEucGFyc2VVU2hvcnQoKTthLnNraXAoXCJ1U2hvcnRcIiwzKTtmb3IodmFyIGY9MDtmPGU7Zis9MSl7dmFyIGc9YS5wYXJzZVVTaG9ydCgpLGg9YS5wYXJzZVVTaG9ydCgpLGk9YS5wYXJzZVNob3J0KCk7YltnK1wiLFwiK2hdPWl9fXJldHVybiBifWZ1bmN0aW9uIGFlKGEsYil7dmFyIGM9bmV3IExlLlBhcnNlcihhLGIpLGQ9Yy5wYXJzZVVTaG9ydCgpO2lmKDA9PT1kKXJldHVybiAkZChjKTtpZigxPT09ZClyZXR1cm4gX2QoYyk7dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQga2VybiB0YWJsZSB2ZXJzaW9uIChcIitkK1wiKS5cIil9ZnVuY3Rpb24gYmUoYSxiLGMsZCl7Zm9yKHZhciBlPW5ldyBMZS5QYXJzZXIoYSxiKSxmPWQ/ZS5wYXJzZVVTaG9ydDplLnBhcnNlVUxvbmcsZz1bXSxoPTA7aDxjKzE7aCs9MSl7dmFyIGk9Zi5jYWxsKGUpO2QmJihpKj0yKSxnLnB1c2goaSl9cmV0dXJuIGd9ZnVuY3Rpb24gY2UoYSxjKXtiKFwiZnNcIikucmVhZEZpbGUoYSxmdW5jdGlvbihhLGIpe2lmKGEpcmV0dXJuIGMoYS5tZXNzYWdlKTtjKG51bGwsQ2IoYikpfSl9ZnVuY3Rpb24gZGUoYSxiKXt2YXIgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7Yy5vcGVuKFwiZ2V0XCIsYSwhMCksYy5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiLGMub25sb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIGMucmVzcG9uc2U/YihudWxsLGMucmVzcG9uc2UpOmIoXCJGb250IGNvdWxkIG5vdCBiZSBsb2FkZWQ6IFwiK2Muc3RhdHVzVGV4dCl9LGMub25lcnJvcj1mdW5jdGlvbigpe2IoXCJGb250IGNvdWxkIG5vdCBiZSBsb2FkZWRcIil9LGMuc2VuZCgpfWZ1bmN0aW9uIGVlKGEsYil7Zm9yKHZhciBjPVtdLGQ9MTIsZT0wO2U8YjtlKz0xKXt2YXIgZj1MZS5nZXRUYWcoYSxkKSxnPUxlLmdldFVMb25nKGEsZCs0KSxoPUxlLmdldFVMb25nKGEsZCs4KSxpPUxlLmdldFVMb25nKGEsZCsxMik7Yy5wdXNoKHt0YWc6ZixjaGVja3N1bTpnLG9mZnNldDpoLGxlbmd0aDppLGNvbXByZXNzaW9uOiExfSksZCs9MTZ9cmV0dXJuIGN9ZnVuY3Rpb24gZmUoYSxiKXtmb3IodmFyIGM9W10sZD00NCxlPTA7ZTxiO2UrPTEpe3ZhciBmPUxlLmdldFRhZyhhLGQpLGc9TGUuZ2V0VUxvbmcoYSxkKzQpLGg9TGUuZ2V0VUxvbmcoYSxkKzgpLGk9TGUuZ2V0VUxvbmcoYSxkKzEyKSxqPXZvaWQgMDtqPWg8aSYmXCJXT0ZGXCIsYy5wdXNoKHt0YWc6ZixvZmZzZXQ6Zyxjb21wcmVzc2lvbjpqLGNvbXByZXNzZWRMZW5ndGg6aCxsZW5ndGg6aX0pLGQrPTIwfXJldHVybiBjfWZ1bmN0aW9uIGdlKGEsYil7aWYoXCJXT0ZGXCI9PT1iLmNvbXByZXNzaW9uKXt2YXIgYz1uZXcgVWludDhBcnJheShhLmJ1ZmZlcixiLm9mZnNldCsyLGIuY29tcHJlc3NlZExlbmd0aC0yKSxkPW5ldyBVaW50OEFycmF5KGIubGVuZ3RoKTtpZih3ZShjLGQpLGQuYnl0ZUxlbmd0aCE9PWIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkRlY29tcHJlc3Npb24gZXJyb3I6IFwiK2IudGFnK1wiIGRlY29tcHJlc3NlZCBsZW5ndGggZG9lc24ndCBtYXRjaCByZWNvcmRlZCBsZW5ndGhcIik7cmV0dXJue2RhdGE6bmV3IERhdGFWaWV3KGQuYnVmZmVyLDApLG9mZnNldDowfX1yZXR1cm57ZGF0YTphLG9mZnNldDpiLm9mZnNldH19ZnVuY3Rpb24gaGUoYSl7dmFyIGIsYyxkLGU9bmV3IFFkKHtlbXB0eTohMH0pLGY9bmV3IERhdGFWaWV3KGEsMCksZz1bXSxoPUxlLmdldFRhZyhmLDApO2lmKGg9PT1TdHJpbmcuZnJvbUNoYXJDb2RlKDAsMSwwLDApfHxcInRydWVcIj09PWh8fFwidHlwMVwiPT09aCllLm91dGxpbmVzRm9ybWF0PVwidHJ1ZXR5cGVcIixkPUxlLmdldFVTaG9ydChmLDQpLGc9ZWUoZixkKTtlbHNlIGlmKFwiT1RUT1wiPT09aCllLm91dGxpbmVzRm9ybWF0PVwiY2ZmXCIsZD1MZS5nZXRVU2hvcnQoZiw0KSxnPWVlKGYsZCk7ZWxzZXtpZihcIndPRkZcIiE9PWgpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgT3BlblR5cGUgc2lnbmF0dXJlIFwiK2gpO3ZhciBpPUxlLmdldFRhZyhmLDQpO2lmKGk9PT1TdHJpbmcuZnJvbUNoYXJDb2RlKDAsMSwwLDApKWUub3V0bGluZXNGb3JtYXQ9XCJ0cnVldHlwZVwiO2Vsc2V7aWYoXCJPVFRPXCIhPT1pKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIE9wZW5UeXBlIGZsYXZvciBcIitoKTtlLm91dGxpbmVzRm9ybWF0PVwiY2ZmXCJ9ZD1MZS5nZXRVU2hvcnQoZiwxMiksZz1mZShmLGQpfWZvcih2YXIgaixrLGwsbSxuLG8scCxxLHIscyx0LHU9MDt1PGQ7dSs9MSl7dmFyIHY9Z1t1XSx3PXZvaWQgMDtzd2l0Y2godi50YWcpe2Nhc2VcImNtYXBcIjp3PWdlKGYsdiksZS50YWJsZXMuY21hcD1NZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUuZW5jb2Rpbmc9bmV3IFkoZS50YWJsZXMuY21hcCk7YnJlYWs7Y2FzZVwiY3Z0IFwiOnc9Z2UoZix2KSx0PW5ldyBMZS5QYXJzZXIody5kYXRhLHcub2Zmc2V0KSxlLnRhYmxlcy5jdnQ9dC5wYXJzZVNob3J0TGlzdCh2Lmxlbmd0aC8yKTticmVhaztjYXNlXCJmdmFyXCI6az12O2JyZWFrO2Nhc2VcImZwZ21cIjp3PWdlKGYsdiksdD1uZXcgTGUuUGFyc2VyKHcuZGF0YSx3Lm9mZnNldCksZS50YWJsZXMuZnBnbT10LnBhcnNlQnl0ZUxpc3Qodi5sZW5ndGgpO2JyZWFrO2Nhc2VcImhlYWRcIjp3PWdlKGYsdiksZS50YWJsZXMuaGVhZD1XZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUudW5pdHNQZXJFbT1lLnRhYmxlcy5oZWFkLnVuaXRzUGVyRW0sYj1lLnRhYmxlcy5oZWFkLmluZGV4VG9Mb2NGb3JtYXQ7YnJlYWs7Y2FzZVwiaGhlYVwiOnc9Z2UoZix2KSxlLnRhYmxlcy5oaGVhPVhlLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS5hc2NlbmRlcj1lLnRhYmxlcy5oaGVhLmFzY2VuZGVyLGUuZGVzY2VuZGVyPWUudGFibGVzLmhoZWEuZGVzY2VuZGVyLGUubnVtYmVyT2ZITWV0cmljcz1lLnRhYmxlcy5oaGVhLm51bWJlck9mSE1ldHJpY3M7YnJlYWs7Y2FzZVwiaG10eFwiOm89djticmVhaztjYXNlXCJsdGFnXCI6dz1nZShmLHYpLGM9WmUucGFyc2Uody5kYXRhLHcub2Zmc2V0KTticmVhaztjYXNlXCJtYXhwXCI6dz1nZShmLHYpLGUudGFibGVzLm1heHA9JGUucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLm51bUdseXBocz1lLnRhYmxlcy5tYXhwLm51bUdseXBoczticmVhaztjYXNlXCJuYW1lXCI6cj12O2JyZWFrO2Nhc2VcIk9TLzJcIjp3PWdlKGYsdiksZS50YWJsZXMub3MyPWpmLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCk7YnJlYWs7Y2FzZVwicG9zdFwiOnc9Z2UoZix2KSxlLnRhYmxlcy5wb3N0PWtmLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS5nbHlwaE5hbWVzPW5ldyAkKGUudGFibGVzLnBvc3QpO2JyZWFrO2Nhc2VcInByZXBcIjp3PWdlKGYsdiksdD1uZXcgTGUuUGFyc2VyKHcuZGF0YSx3Lm9mZnNldCksZS50YWJsZXMucHJlcD10LnBhcnNlQnl0ZUxpc3Qodi5sZW5ndGgpO2JyZWFrO2Nhc2VcImdseWZcIjpsPXY7YnJlYWs7Y2FzZVwibG9jYVwiOnE9djticmVhaztjYXNlXCJDRkYgXCI6aj12O2JyZWFrO2Nhc2VcImtlcm5cIjpwPXY7YnJlYWs7Y2FzZVwiR1BPU1wiOm09djticmVhaztjYXNlXCJHU1VCXCI6bj12O2JyZWFrO2Nhc2VcIm1ldGFcIjpzPXZ9fXZhciB4PWdlKGYscik7aWYoZS50YWJsZXMubmFtZT1nZi5wYXJzZSh4LmRhdGEseC5vZmZzZXQsYyksZS5uYW1lcz1lLnRhYmxlcy5uYW1lLGwmJnEpe3ZhciB5PTA9PT1iLHo9Z2UoZixxKSxBPUhmLnBhcnNlKHouZGF0YSx6Lm9mZnNldCxlLm51bUdseXBocyx5KSxCPWdlKGYsbCk7ZS5nbHlwaHM9dmYucGFyc2UoQi5kYXRhLEIub2Zmc2V0LEEsZSl9ZWxzZXtpZighail0aHJvdyBuZXcgRXJyb3IoXCJGb250IGRvZXNuJ3QgY29udGFpbiBUcnVlVHlwZSBvciBDRkYgb3V0bGluZXMuXCIpO3ZhciBDPWdlKGYsaik7VmUucGFyc2UoQy5kYXRhLEMub2Zmc2V0LGUpfXZhciBEPWdlKGYsbyk7aWYoWWUucGFyc2UoRC5kYXRhLEQub2Zmc2V0LGUubnVtYmVyT2ZITWV0cmljcyxlLm51bUdseXBocyxlLmdseXBocyksXyhlKSxwKXt2YXIgRT1nZShmLHApO2Uua2VybmluZ1BhaXJzPUdmLnBhcnNlKEUuZGF0YSxFLm9mZnNldCl9ZWxzZSBlLmtlcm5pbmdQYWlycz17fTtpZihtKXt2YXIgRj1nZShmLG0pO2UudGFibGVzLmdwb3M9RmYucGFyc2UoRi5kYXRhLEYub2Zmc2V0KSxlLnBvc2l0aW9uLmluaXQoKX1pZihuKXt2YXIgRz1nZShmLG4pO2UudGFibGVzLmdzdWI9b2YucGFyc2UoRy5kYXRhLEcub2Zmc2V0KX1pZihrKXt2YXIgSD1nZShmLGspO2UudGFibGVzLmZ2YXI9Q2YucGFyc2UoSC5kYXRhLEgub2Zmc2V0LGUubmFtZXMpfWlmKHMpe3ZhciBJPWdlKGYscyk7ZS50YWJsZXMubWV0YT1wZi5wYXJzZShJLmRhdGEsSS5vZmZzZXQpLGUubWV0YXM9ZS50YWJsZXMubWV0YX1yZXR1cm4gZX1mdW5jdGlvbiBpZShhLGIpeyhcInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93P2NlOmRlKShhLGZ1bmN0aW9uKGEsYyl7aWYoYSlyZXR1cm4gYihhKTt2YXIgZDt0cnl7ZD1oZShjKX1jYXRjaChhKXtyZXR1cm4gYihhLG51bGwpfXJldHVybiBiKG51bGwsZCl9KX1mdW5jdGlvbiBqZShhKXtyZXR1cm4gaGUoQ2IoYihcImZzXCIpLnJlYWRGaWxlU3luYyhhKSkpfVN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXR8fGZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oKXt0cnl7dmFyIGE9e30sYj1PYmplY3QuZGVmaW5lUHJvcGVydHksYz1iKGEsYSxhKSYmYn1jYXRjaChhKXt9cmV0dXJuIGN9KCksYj1mdW5jdGlvbihhKXtpZihudWxsPT10aGlzKXRocm93IFR5cGVFcnJvcigpO3ZhciBiPVN0cmluZyh0aGlzKSxjPWIubGVuZ3RoLGQ9YT9OdW1iZXIoYSk6MDtpZihkIT1kJiYoZD0wKSwhKGQ8MHx8ZD49Yykpe3ZhciBlLGY9Yi5jaGFyQ29kZUF0KGQpO3JldHVybiBmPj01NTI5NiYmZjw9NTYzMTkmJmM+ZCsxJiYoZT1iLmNoYXJDb2RlQXQoZCsxKSk+PTU2MzIwJiZlPD01NzM0Mz8xMDI0KihmLTU1Mjk2KStlLTU2MzIwKzY1NTM2OmZ9fTthP2EoU3RyaW5nLnByb3RvdHlwZSxcImNvZGVQb2ludEF0XCIse3ZhbHVlOmIsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6U3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdD1ifSgpO3ZhciBrZT0wLGxlPS0zLG1lPW5ldyBjLG5lPW5ldyBjLG9lPW5ldyBVaW50OEFycmF5KDMwKSxwZT1uZXcgVWludDE2QXJyYXkoMzApLHFlPW5ldyBVaW50OEFycmF5KDMwKSxyZT1uZXcgVWludDE2QXJyYXkoMzApLHNlPW5ldyBVaW50OEFycmF5KFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSksdGU9bmV3IGMsdWU9bmV3IFVpbnQ4QXJyYXkoMzIwKSx2ZT1uZXcgVWludDE2QXJyYXkoMTYpO2cobWUsbmUpLGYob2UscGUsNCwzKSxmKHFlLHJlLDIsMSksb2VbMjhdPTAscGVbMjhdPTI1ODt2YXIgd2U9bztxLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGlzTmFOKHRoaXMueDEpfHxpc05hTih0aGlzLnkxKXx8aXNOYU4odGhpcy54Mil8fGlzTmFOKHRoaXMueTIpfSxxLnByb3RvdHlwZS5hZGRQb2ludD1mdW5jdGlvbihhLGIpe1wibnVtYmVyXCI9PXR5cGVvZiBhJiYoKGlzTmFOKHRoaXMueDEpfHxpc05hTih0aGlzLngyKSkmJih0aGlzLngxPWEsdGhpcy54Mj1hKSxhPHRoaXMueDEmJih0aGlzLngxPWEpLGE+dGhpcy54MiYmKHRoaXMueDI9YSkpLFwibnVtYmVyXCI9PXR5cGVvZiBiJiYoKGlzTmFOKHRoaXMueTEpfHxpc05hTih0aGlzLnkyKSkmJih0aGlzLnkxPWIsdGhpcy55Mj1iKSxiPHRoaXMueTEmJih0aGlzLnkxPWIpLGI+dGhpcy55MiYmKHRoaXMueTI9YikpfSxxLnByb3RvdHlwZS5hZGRYPWZ1bmN0aW9uKGEpe3RoaXMuYWRkUG9pbnQoYSxudWxsKX0scS5wcm90b3R5cGUuYWRkWT1mdW5jdGlvbihhKXt0aGlzLmFkZFBvaW50KG51bGwsYSl9LHEucHJvdG90eXBlLmFkZEJlemllcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3ZhciBpPXRoaXMsaj1bYSxiXSxrPVtjLGRdLGw9W2UsZl0sbT1bZyxoXTt0aGlzLmFkZFBvaW50KGEsYiksdGhpcy5hZGRQb2ludChnLGgpO2Zvcih2YXIgbj0wO248PTE7bisrKXt2YXIgbz02Kmpbbl0tMTIqa1tuXSs2Kmxbbl0scT0tMypqW25dKzkqa1tuXS05Kmxbbl0rMyptW25dLHI9MyprW25dLTMqaltuXTtpZigwIT09cSl7dmFyIHM9TWF0aC5wb3cobywyKS00KnIqcTtpZighKHM8MCkpe3ZhciB0PSgtbytNYXRoLnNxcnQocykpLygyKnEpOzA8dCYmdDwxJiYoMD09PW4mJmkuYWRkWChwKGpbbl0sa1tuXSxsW25dLG1bbl0sdCkpLDE9PT1uJiZpLmFkZFkocChqW25dLGtbbl0sbFtuXSxtW25dLHQpKSk7dmFyIHU9KC1vLU1hdGguc3FydChzKSkvKDIqcSk7MDx1JiZ1PDEmJigwPT09biYmaS5hZGRYKHAoaltuXSxrW25dLGxbbl0sbVtuXSx1KSksMT09PW4mJmkuYWRkWShwKGpbbl0sa1tuXSxsW25dLG1bbl0sdSkpKX19ZWxzZXtpZigwPT09byljb250aW51ZTt2YXIgdj0tci9vOzA8diYmdjwxJiYoMD09PW4mJmkuYWRkWChwKGpbbl0sa1tuXSxsW25dLG1bbl0sdikpLDE9PT1uJiZpLmFkZFkocChqW25dLGtbbl0sbFtuXSxtW25dLHYpKSl9fX0scS5wcm90b3R5cGUuYWRkUXVhZD1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9YSsyLzMqKGMtYSksaD1iKzIvMyooZC1iKSxpPWcrMS8zKihlLWEpLGo9aCsxLzMqKGYtYik7dGhpcy5hZGRCZXppZXIoYSxiLGcsaCxpLGosZSxmKX0sci5wcm90b3R5cGUubW92ZVRvPWZ1bmN0aW9uKGEsYil7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiTVwiLHg6YSx5OmJ9KX0sci5wcm90b3R5cGUubGluZVRvPWZ1bmN0aW9uKGEsYil7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiTFwiLHg6YSx5OmJ9KX0sci5wcm90b3R5cGUuY3VydmVUbz1yLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJDXCIseDE6YSx5MTpiLHgyOmMseTI6ZCx4OmUseTpmfSl9LHIucHJvdG90eXBlLnF1YWRUbz1yLnByb3RvdHlwZS5xdWFkcmF0aWNDdXJ2ZVRvPWZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIlFcIix4MTphLHkxOmIseDpjLHk6ZH0pfSxyLnByb3RvdHlwZS5jbG9zZT1yLnByb3RvdHlwZS5jbG9zZVBhdGg9ZnVuY3Rpb24oKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJaXCJ9KX0sci5wcm90b3R5cGUuZXh0ZW5kPWZ1bmN0aW9uKGEpe2lmKGEuY29tbWFuZHMpYT1hLmNvbW1hbmRzO2Vsc2UgaWYoYSBpbnN0YW5jZW9mIHEpe3ZhciBiPWE7cmV0dXJuIHRoaXMubW92ZVRvKGIueDEsYi55MSksdGhpcy5saW5lVG8oYi54MixiLnkxKSx0aGlzLmxpbmVUbyhiLngyLGIueTIpLHRoaXMubGluZVRvKGIueDEsYi55Miksdm9pZCB0aGlzLmNsb3NlKCl9QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5jb21tYW5kcyxhKX0sci5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3g9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcyxiPW5ldyBxLGM9MCxkPTAsZT0wLGY9MCxnPTA7Zzx0aGlzLmNvbW1hbmRzLmxlbmd0aDtnKyspe3ZhciBoPWEuY29tbWFuZHNbZ107c3dpdGNoKGgudHlwZSl7Y2FzZVwiTVwiOmIuYWRkUG9pbnQoaC54LGgueSksYz1lPWgueCxkPWY9aC55O2JyZWFrO2Nhc2VcIkxcIjpiLmFkZFBvaW50KGgueCxoLnkpLGU9aC54LGY9aC55O2JyZWFrO2Nhc2VcIlFcIjpiLmFkZFF1YWQoZSxmLGgueDEsaC55MSxoLngsaC55KSxlPWgueCxmPWgueTticmVhaztjYXNlXCJDXCI6Yi5hZGRCZXppZXIoZSxmLGgueDEsaC55MSxoLngyLGgueTIsaC54LGgueSksZT1oLngsZj1oLnk7YnJlYWs7Y2FzZVwiWlwiOmU9YyxmPWQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHBhdGggY29tbWFuZCBcIitoLnR5cGUpfX1yZXR1cm4gYi5pc0VtcHR5KCkmJmIuYWRkUG9pbnQoMCwwKSxifSxyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7YS5iZWdpblBhdGgoKTtmb3IodmFyIGM9MDtjPHRoaXMuY29tbWFuZHMubGVuZ3RoO2MrPTEpe3ZhciBkPWIuY29tbWFuZHNbY107XCJNXCI9PT1kLnR5cGU/YS5tb3ZlVG8oZC54LGQueSk6XCJMXCI9PT1kLnR5cGU/YS5saW5lVG8oZC54LGQueSk6XCJDXCI9PT1kLnR5cGU/YS5iZXppZXJDdXJ2ZVRvKGQueDEsZC55MSxkLngyLGQueTIsZC54LGQueSk6XCJRXCI9PT1kLnR5cGU/YS5xdWFkcmF0aWNDdXJ2ZVRvKGQueDEsZC55MSxkLngsZC55KTpcIlpcIj09PWQudHlwZSYmYS5jbG9zZVBhdGgoKX10aGlzLmZpbGwmJihhLmZpbGxTdHlsZT10aGlzLmZpbGwsYS5maWxsKCkpLHRoaXMuc3Ryb2tlJiYoYS5zdHJva2VTdHlsZT10aGlzLnN0cm9rZSxhLmxpbmVXaWR0aD10aGlzLnN0cm9rZVdpZHRoLGEuc3Ryb2tlKCkpfSxyLnByb3RvdHlwZS50b1BhdGhEYXRhPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYil7cmV0dXJuIE1hdGgucm91bmQoYik9PT1iP1wiXCIrTWF0aC5yb3VuZChiKTpiLnRvRml4ZWQoYSl9ZnVuY3Rpb24gYygpe2Zvcih2YXIgYT1hcmd1bWVudHMsYz1cIlwiLGQ9MDtkPGFyZ3VtZW50cy5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXTtlPj0wJiZkPjAmJihjKz1cIiBcIiksYys9YihlKX1yZXR1cm4gY312YXIgZD10aGlzO2E9dm9pZCAwIT09YT9hOjI7Zm9yKHZhciBlPVwiXCIsZj0wO2Y8dGhpcy5jb21tYW5kcy5sZW5ndGg7Zis9MSl7dmFyIGc9ZC5jb21tYW5kc1tmXTtcIk1cIj09PWcudHlwZT9lKz1cIk1cIitjKGcueCxnLnkpOlwiTFwiPT09Zy50eXBlP2UrPVwiTFwiK2MoZy54LGcueSk6XCJDXCI9PT1nLnR5cGU/ZSs9XCJDXCIrYyhnLngxLGcueTEsZy54MixnLnkyLGcueCxnLnkpOlwiUVwiPT09Zy50eXBlP2UrPVwiUVwiK2MoZy54MSxnLnkxLGcueCxnLnkpOlwiWlwiPT09Zy50eXBlJiYoZSs9XCJaXCIpfXJldHVybiBlfSxyLnByb3RvdHlwZS50b1NWRz1mdW5jdGlvbihhKXt2YXIgYj0nPHBhdGggZD1cIic7cmV0dXJuIGIrPXRoaXMudG9QYXRoRGF0YShhKSxiKz0nXCInLHRoaXMuZmlsbCYmXCJibGFja1wiIT09dGhpcy5maWxsJiYobnVsbD09PXRoaXMuZmlsbD9iKz0nIGZpbGw9XCJub25lXCInOmIrPScgZmlsbD1cIicrdGhpcy5maWxsKydcIicpLHRoaXMuc3Ryb2tlJiYoYis9JyBzdHJva2U9XCInK3RoaXMuc3Ryb2tlKydcIiBzdHJva2Utd2lkdGg9XCInK3RoaXMuc3Ryb2tlV2lkdGgrJ1wiJyksYis9XCIvPlwifSxyLnByb3RvdHlwZS50b0RPTUVsZW1lbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy50b1BhdGhEYXRhKGEpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInBhdGhcIik7cmV0dXJuIGMuc2V0QXR0cmlidXRlKFwiZFwiLGIpLGN9O3ZhciB4ZT17ZmFpbDpzLGFyZ3VtZW50OnQsYXNzZXJ0OnR9LHllPTMyNzY4LHplPTIxNDc0ODM2NDgsQWU9e30sQmU9e30sQ2U9e307QmUuQllURT1mdW5jdGlvbihhKXtyZXR1cm4geGUuYXJndW1lbnQoYT49MCYmYTw9MjU1LFwiQnl0ZSB2YWx1ZSBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAyNTUuXCIpLFthXX0sQ2UuQllURT11KDEpLEJlLkNIQVI9ZnVuY3Rpb24oYSl7cmV0dXJuW2EuY2hhckNvZGVBdCgwKV19LENlLkNIQVI9dSgxKSxCZS5DSEFSQVJSQVk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrPTEpYltjXT1hLmNoYXJDb2RlQXQoYyk7cmV0dXJuIGJ9LENlLkNIQVJBUlJBWT1mdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LEJlLlVTSE9SVD1mdW5jdGlvbihhKXtyZXR1cm5bYT4+OCYyNTUsMjU1JmFdfSxDZS5VU0hPUlQ9dSgyKSxCZS5TSE9SVD1mdW5jdGlvbihhKXtyZXR1cm4gYT49eWUmJihhPS0oMip5ZS1hKSksW2E+PjgmMjU1LDI1NSZhXX0sQ2UuU0hPUlQ9dSgyKSxCZS5VSU5UMjQ9ZnVuY3Rpb24oYSl7cmV0dXJuW2E+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLlVJTlQyND11KDMpLEJlLlVMT05HPWZ1bmN0aW9uKGEpe3JldHVyblthPj4yNCYyNTUsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuVUxPTkc9dSg0KSxCZS5MT05HPWZ1bmN0aW9uKGEpe3JldHVybiBhPj16ZSYmKGE9LSgyKnplLWEpKSxbYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLkxPTkc9dSg0KSxCZS5GSVhFRD1CZS5VTE9ORyxDZS5GSVhFRD1DZS5VTE9ORyxCZS5GV09SRD1CZS5TSE9SVCxDZS5GV09SRD1DZS5TSE9SVCxCZS5VRldPUkQ9QmUuVVNIT1JULENlLlVGV09SRD1DZS5VU0hPUlQsQmUuTE9OR0RBVEVUSU1FPWZ1bmN0aW9uKGEpe3JldHVyblswLDAsMCwwLGE+PjI0JjI1NSxhPj4xNiYyNTUsYT4+OCYyNTUsMjU1JmFdfSxDZS5MT05HREFURVRJTUU9dSg4KSxCZS5UQUc9ZnVuY3Rpb24oYSl7cmV0dXJuIHhlLmFyZ3VtZW50KDQ9PT1hLmxlbmd0aCxcIlRhZyBzaG91bGQgYmUgZXhhY3RseSA0IEFTQ0lJIGNoYXJhY3RlcnMuXCIpLFthLmNoYXJDb2RlQXQoMCksYS5jaGFyQ29kZUF0KDEpLGEuY2hhckNvZGVBdCgyKSxhLmNoYXJDb2RlQXQoMyldfSxDZS5UQUc9dSg0KSxCZS5DYXJkOD1CZS5CWVRFLENlLkNhcmQ4PUNlLkJZVEUsQmUuQ2FyZDE2PUJlLlVTSE9SVCxDZS5DYXJkMTY9Q2UuVVNIT1JULEJlLk9mZlNpemU9QmUuQllURSxDZS5PZmZTaXplPUNlLkJZVEUsQmUuU0lEPUJlLlVTSE9SVCxDZS5TSUQ9Q2UuVVNIT1JULEJlLk5VTUJFUj1mdW5jdGlvbihhKXtyZXR1cm4gYT49LTEwNyYmYTw9MTA3P1thKzEzOV06YT49MTA4JiZhPD0xMTMxPyhhLT0xMDgsWzI0NysoYT4+OCksMjU1JmFdKTphPj0tMTEzMSYmYTw9LTEwOD8oYT0tYS0xMDgsWzI1MSsoYT4+OCksMjU1JmFdKTphPj0tMzI3NjgmJmE8PTMyNzY3P0JlLk5VTUJFUjE2KGEpOkJlLk5VTUJFUjMyKGEpXG59LENlLk5VTUJFUj1mdW5jdGlvbihhKXtyZXR1cm4gQmUuTlVNQkVSKGEpLmxlbmd0aH0sQmUuTlVNQkVSMTY9ZnVuY3Rpb24oYSl7cmV0dXJuWzI4LGE+PjgmMjU1LDI1NSZhXX0sQ2UuTlVNQkVSMTY9dSgzKSxCZS5OVU1CRVIzMj1mdW5jdGlvbihhKXtyZXR1cm5bMjksYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLk5VTUJFUjMyPXUoNSksQmUuUkVBTD1mdW5jdGlvbihhKXt2YXIgYj1hLnRvU3RyaW5nKCksYz0vXFwuKFxcZCo/KSg/Ojl7NSwyMH18MHs1LDIwfSlcXGR7MCwyfSg/OmUoLispfCQpLy5leGVjKGIpO2lmKGMpe3ZhciBkPXBhcnNlRmxvYXQoXCIxZVwiKygoY1syXT8rY1syXTowKStjWzFdLmxlbmd0aCkpO2I9KE1hdGgucm91bmQoYSpkKS9kKS50b1N0cmluZygpfWZvcih2YXIgZT1cIlwiLGY9MCxnPWIubGVuZ3RoO2Y8ZztmKz0xKXt2YXIgaD1iW2ZdO2UrPVwiZVwiPT09aD9cIi1cIj09PWJbKytmXT9cImNcIjpcImJcIjpcIi5cIj09PWg/XCJhXCI6XCItXCI9PT1oP1wiZVwiOmh9ZSs9MSZlLmxlbmd0aD9cImZcIjpcImZmXCI7Zm9yKHZhciBpPVszMF0saj0wLGs9ZS5sZW5ndGg7ajxrO2orPTIpaS5wdXNoKHBhcnNlSW50KGUuc3Vic3RyKGosMiksMTYpKTtyZXR1cm4gaX0sQ2UuUkVBTD1mdW5jdGlvbihhKXtyZXR1cm4gQmUuUkVBTChhKS5sZW5ndGh9LEJlLk5BTUU9QmUuQ0hBUkFSUkFZLENlLk5BTUU9Q2UuQ0hBUkFSUkFZLEJlLlNUUklORz1CZS5DSEFSQVJSQVksQ2UuU1RSSU5HPUNlLkNIQVJBUlJBWSxBZS5VVEY4PWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9W10sZT1jLGY9MDtmPGU7ZisrLGIrPTEpZFtmXT1hLmdldFVpbnQ4KGIpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZCl9LEFlLlVURjE2PWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9W10sZT1jLzIsZj0wO2Y8ZTtmKyssYis9MilkW2ZdPWEuZ2V0VWludDE2KGIpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZCl9LEJlLlVURjE2PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hLmNoYXJDb2RlQXQoYyk7YltiLmxlbmd0aF09ZD4+OCYyNTUsYltiLmxlbmd0aF09MjU1JmR9cmV0dXJuIGJ9LENlLlVURjE2PWZ1bmN0aW9uKGEpe3JldHVybiAyKmEubGVuZ3RofTt2YXIgRGU9e1wieC1tYWMtY3JvYXRpYW5cIjpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsWg4oSiwrTCqOKJoMW9w5jiiJ7CseKJpOKJpeKIhsK14oiC4oiR4oiPxaHiiKvCqsK6zqnFvsO4wr/CocKs4oiaxpLiiYjEhsKrxIzigKbCoMOAw4PDlcWSxZPEkOKAlOKAnOKAneKAmOKAmcO34peK76O/wqnigYTigqzigLnigLrDhsK74oCTwrfigJrigJ7igLDDgsSHw4HEjcOIw43DjsOPw4zDk8OUxJHDksOaw5vDmcSxy4bLnMKvz4DDi8uawrjDisOmy4dcIixcIngtbWFjLWN5cmlsbGljXCI6XCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv4oCgwrDSkMKjwqfigKLCttCGwq7CqeKEotCC0ZLiiaDQg9GT4oiewrHiiaTiiaXRlsK10pHQiNCE0ZTQh9GX0InRmdCK0ZrRmNCFwqziiJrGkuKJiOKIhsKrwrvigKbCoNCL0ZvQjNGc0ZXigJPigJTigJzigJ3igJjigJnDt+KAntCO0Z7Qj9Gf4oSW0IHRkdGP0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y5cIixcIngtbWFjLWdhZWxpY1wiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOG4gsKx4omk4oml4biDxIrEi+G4iuG4i+G4nuG4n8SgxKHhuYDDpsO44bmB4bmW4bmXybzGksW/4bmgwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmeG5oeG6m8O/xbjhuarigqzigLnigLrFtsW34bmrwrfhu7Lhu7PigYrDgsOKw4HDi8OIw43DjsOPw4zDk8OU4pmjw5LDmsObw5nEscOdw73FtMW14bqE4bqF4bqA4bqB4bqC4bqDXCIsXCJ4LW1hYy1ncmVla1wiOlwiw4TCucKyw4nCs8OWw5zOhcOgw6LDpM6EwqjDp8Opw6jDqsOrwqPihKLDrsOv4oCiwr3igLDDtMO2wqbigqzDucO7w7zigKDOk86UzpjOm86ezqDDn8KuwqnOo86qwqfiiaDCsMK3zpHCseKJpOKJpcKlzpLOlc6WzpfOmc6azpzOps6rzqjOqc6szp3CrM6fzqHiiYjOpMKrwrvigKbCoM6lzqfOhs6IxZPigJPigJXigJzigJ3igJjigJnDt86JzorOjM6Ozq3Ors6vz4zOj8+NzrHOss+IzrTOtc+GzrPOt865zr7Ous67zrzOvc6/z4DPjs+Bz4PPhM64z4nPgs+Hz4XOts+Kz4vOkM6wwq1cIixcIngtbWFjLWljZWxhbmRpY1wiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvMOdwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK6zqnDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGE4oKsw5DDsMOew77DvcK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+jv8OSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiLFwieC1tYWMtaW51aXRcIjpcIuGQg+GQhOGQheGQhuGQiuGQi+GQseGQsuGQs+GQtOGQuOGQueGRieGRjuGRj+GRkOGRkeGRleGRluGRpuGRreGRruGRr+GRsOGRsuGRs+GSg+GSi+GSjOGSjeGSjuGSkOGSkcKw4ZKh4ZKl4ZKm4oCiwrbhkqfCrsKp4oSi4ZKo4ZKq4ZKr4ZK74ZOC4ZOD4ZOE4ZOF4ZOH4ZOI4ZOQ4ZOv4ZOw4ZOx4ZOy4ZO04ZO14ZSF4ZOV4ZOW4ZOX4ZOY4ZOa4ZOb4ZOq4ZSo4ZSp4ZSq4ZSr4ZSt4oCmwqDhlK7hlL7hlZXhlZbhlZfigJPigJTigJzigJ3igJjigJnhlZjhlZnhlZrhlZ3hlYbhlYfhlYjhlYnhlYvhlYzhlZDhlb/hloDhloHhloLhloPhloThloXhlo/hlpDhlpHhlpLhlpPhlpThlpXhmbHhmbLhmbPhmbThmbXhmbbhlpbhlqDhlqHhlqLhlqPhlqThlqXhlqbhlbzFgcWCXCIsXCJ4LW1hYy1jZVwiOlwiw4TEgMSBw4nEhMOWw5zDocSFxIzDpMSNxIbEh8OpxbnFusSOw63Ej8SSxJPElsOzxJfDtMO2w7XDusSaxJvDvOKAoMKwxJjCo8Kn4oCiwrbDn8KuwqnihKLEmcKo4omgxKPErsSvxKriiaTiiaXEq8S24oiC4oiRxYLEu8S8xL3EvsS5xLrFhcWGxYPCrOKImsWExYfiiIbCq8K74oCmwqDFiMWQw5XFkcWM4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rFjcWUxZXFmOKAueKAusWZxZbFl8Wg4oCa4oCexaHFmsWbw4HFpMWlw43FvcW+xarDk8OUxavFrsOaxa/FsMWxxbLFs8Odw73Et8W7xYHFvMSiy4dcIixtYWNpbnRvc2g6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK6zqnDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGE4oKs4oC54oC676yB76yC4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU76O/w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCIsXCJ4LW1hYy1yb21hbmlhblwiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgxILImOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCus6pxIPImcK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhOKCrOKAueKAusiayJvigKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvo7/DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIixcIngtbWFjLXR1cmtpc2hcIjpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrOqcOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjEnsSfxLDEscWexZ/igKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvo7/DksOaw5vDme+ioMuGy5zCr8uYy5nLmsK4y53Lm8uHXCJ9O0FlLk1BQ1NUUklORz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1EZVtkXTtpZih2b2lkIDAhPT1lKXtmb3IodmFyIGY9XCJcIixnPTA7ZzxjO2crKyl7dmFyIGg9YS5nZXRVaW50OChiK2cpO2YrPWg8PTEyNz9TdHJpbmcuZnJvbUNoYXJDb2RlKGgpOmVbMTI3JmhdfXJldHVybiBmfX07dmFyIEVlLEZlPVwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtNYXAmJm5ldyBXZWFrTWFwLEdlPWZ1bmN0aW9uKGEpe2lmKCFFZSl7RWU9e307Zm9yKHZhciBiIGluIERlKUVlW2JdPW5ldyBTdHJpbmcoYil9dmFyIGM9RWVbYV07aWYodm9pZCAwIT09Yyl7aWYoRmUpe3ZhciBkPUZlLmdldChjKTtpZih2b2lkIDAhPT1kKXJldHVybiBkfXZhciBlPURlW2FdO2lmKHZvaWQgMCE9PWUpe2Zvcih2YXIgZj17fSxnPTA7ZzxlLmxlbmd0aDtnKyspZltlLmNoYXJDb2RlQXQoZyldPWcrMTI4O3JldHVybiBGZSYmRmUuc2V0KGMsZiksZn19fTtCZS5NQUNTVFJJTkc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1HZShiKTtpZih2b2lkIDAhPT1jKXtmb3IodmFyIGQ9W10sZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNoYXJDb2RlQXQoZSk7aWYoZj49MTI4JiZ2b2lkIDA9PT0oZj1jW2ZdKSlyZXR1cm47ZFtlXT1mfXJldHVybiBkfX0sQ2UuTUFDU1RSSU5HPWZ1bmN0aW9uKGEsYil7dmFyIGM9QmUuTUFDU1RSSU5HKGEsYik7cmV0dXJuIHZvaWQgMCE9PWM/Yy5sZW5ndGg6MH0sQmUuVkFSREVMVEFTPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9W107YjxhLmxlbmd0aDspe3ZhciBkPWFbYl07Yj0wPT09ZD93KGEsYixjKTpkPj0tMTI4JiZkPD0xMjc/eChhLGIsYyk6eShhLGIsYyl9cmV0dXJuIGN9LEJlLklOREVYPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0xLGM9W2JdLGQ9W10sZT0wO2U8YS5sZW5ndGg7ZSs9MSl7dmFyIGY9QmUuT0JKRUNUKGFbZV0pO0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGQsZiksYis9Zi5sZW5ndGgsYy5wdXNoKGIpfWlmKDA9PT1kLmxlbmd0aClyZXR1cm5bMCwwXTtmb3IodmFyIGc9W10saD0xK01hdGguZmxvb3IoTWF0aC5sb2coYikvTWF0aC5sb2coMikpLzh8MCxpPVt2b2lkIDAsQmUuQllURSxCZS5VU0hPUlQsQmUuVUlOVDI0LEJlLlVMT05HXVtoXSxqPTA7ajxjLmxlbmd0aDtqKz0xKXt2YXIgaz1pKGNbal0pO0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGcsayl9cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQoQmUuQ2FyZDE2KGEubGVuZ3RoKSxCZS5PZmZTaXplKGgpLGcsZCl9LENlLklOREVYPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5JTkRFWChhKS5sZW5ndGh9LEJlLkRJQ1Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9T2JqZWN0LmtleXMoYSksZD1jLmxlbmd0aCxlPTA7ZTxkO2UrPTEpe3ZhciBmPXBhcnNlSW50KGNbZV0sMCksZz1hW2ZdO2I9Yi5jb25jYXQoQmUuT1BFUkFORChnLnZhbHVlLGcudHlwZSkpLGI9Yi5jb25jYXQoQmUuT1BFUkFUT1IoZikpfXJldHVybiBifSxDZS5ESUNUPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5ESUNUKGEpLmxlbmd0aH0sQmUuT1BFUkFUT1I9ZnVuY3Rpb24oYSl7cmV0dXJuIGE8MTIwMD9bYV06WzEyLGEtMTIwMF19LEJlLk9QRVJBTkQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtpZihBcnJheS5pc0FycmF5KGIpKWZvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCs9MSl4ZS5hcmd1bWVudChhLmxlbmd0aD09PWIubGVuZ3RoLFwiTm90IGVub3VnaCBhcmd1bWVudHMgZ2l2ZW4gZm9yIHR5cGVcIitiKSxjPWMuY29uY2F0KEJlLk9QRVJBTkQoYVtkXSxiW2RdKSk7ZWxzZSBpZihcIlNJRFwiPT09YiljPWMuY29uY2F0KEJlLk5VTUJFUihhKSk7ZWxzZSBpZihcIm9mZnNldFwiPT09YiljPWMuY29uY2F0KEJlLk5VTUJFUjMyKGEpKTtlbHNlIGlmKFwibnVtYmVyXCI9PT1iKWM9Yy5jb25jYXQoQmUuTlVNQkVSKGEpKTtlbHNle2lmKFwicmVhbFwiIT09Yil0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG9wZXJhbmQgdHlwZSBcIitiKTtjPWMuY29uY2F0KEJlLlJFQUwoYSkpfXJldHVybiBjfSxCZS5PUD1CZS5CWVRFLENlLk9QPUNlLkJZVEU7dmFyIEhlPVwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtNYXAmJm5ldyBXZWFrTWFwO0JlLkNIQVJTVFJJTkc9ZnVuY3Rpb24oYSl7aWYoSGUpe3ZhciBiPUhlLmdldChhKTtpZih2b2lkIDAhPT1iKXJldHVybiBifWZvcih2YXIgYz1bXSxkPWEubGVuZ3RoLGU9MDtlPGQ7ZSs9MSl7dmFyIGY9YVtlXTtjPWMuY29uY2F0KEJlW2YudHlwZV0oZi52YWx1ZSkpfXJldHVybiBIZSYmSGUuc2V0KGEsYyksY30sQ2UuQ0hBUlNUUklORz1mdW5jdGlvbihhKXtyZXR1cm4gQmUuQ0hBUlNUUklORyhhKS5sZW5ndGh9LEJlLk9CSkVDVD1mdW5jdGlvbihhKXt2YXIgYj1CZVthLnR5cGVdO3JldHVybiB4ZS5hcmd1bWVudCh2b2lkIDAhPT1iLFwiTm8gZW5jb2RpbmcgZnVuY3Rpb24gZm9yIHR5cGUgXCIrYS50eXBlKSxiKGEudmFsdWUpfSxDZS5PQkpFQ1Q9ZnVuY3Rpb24oYSl7dmFyIGI9Q2VbYS50eXBlXTtyZXR1cm4geGUuYXJndW1lbnQodm9pZCAwIT09YixcIk5vIHNpemVPZiBmdW5jdGlvbiBmb3IgdHlwZSBcIithLnR5cGUpLGIoYS52YWx1ZSl9LEJlLlRBQkxFPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPWEuZmllbGRzLmxlbmd0aCxkPVtdLGU9W10sZj0wO2Y8YztmKz0xKXt2YXIgZz1hLmZpZWxkc1tmXSxoPUJlW2cudHlwZV07eGUuYXJndW1lbnQodm9pZCAwIT09aCxcIk5vIGVuY29kaW5nIGZ1bmN0aW9uIGZvciBmaWVsZCB0eXBlIFwiK2cudHlwZStcIiAoXCIrZy5uYW1lK1wiKVwiKTt2YXIgaT1hW2cubmFtZV07dm9pZCAwPT09aSYmKGk9Zy52YWx1ZSk7dmFyIGo9aChpKTtcIlRBQkxFXCI9PT1nLnR5cGU/KGUucHVzaChiLmxlbmd0aCksYj1iLmNvbmNhdChbMCwwXSksZC5wdXNoKGopKTpiPWIuY29uY2F0KGopfWZvcih2YXIgaz0wO2s8ZC5sZW5ndGg7ays9MSl7dmFyIGw9ZVtrXSxtPWIubGVuZ3RoO3hlLmFyZ3VtZW50KG08NjU1MzYsXCJUYWJsZSBcIithLnRhYmxlTmFtZStcIiB0b28gYmlnLlwiKSxiW2xdPW0+PjgsYltsKzFdPTI1NSZtLGI9Yi5jb25jYXQoZFtrXSl9cmV0dXJuIGJ9LENlLlRBQkxFPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9YS5maWVsZHMubGVuZ3RoLGQ9MDtkPGM7ZCs9MSl7dmFyIGU9YS5maWVsZHNbZF0sZj1DZVtlLnR5cGVdO3hlLmFyZ3VtZW50KHZvaWQgMCE9PWYsXCJObyBzaXplT2YgZnVuY3Rpb24gZm9yIGZpZWxkIHR5cGUgXCIrZS50eXBlK1wiIChcIitlLm5hbWUrXCIpXCIpO3ZhciBnPWFbZS5uYW1lXTt2b2lkIDA9PT1nJiYoZz1lLnZhbHVlKSxiKz1mKGcpLFwiVEFCTEVcIj09PWUudHlwZSYmKGIrPTIpfXJldHVybiBifSxCZS5SRUNPUkQ9QmUuVEFCTEUsQ2UuUkVDT1JEPUNlLlRBQkxFLEJlLkxJVEVSQUw9ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LENlLkxJVEVSQUw9ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSx6LnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gQmUuVEFCTEUodGhpcyl9LHoucHJvdG90eXBlLnNpemVPZj1mdW5jdGlvbigpe3JldHVybiBDZS5UQUJMRSh0aGlzKX0sRC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6LnByb3RvdHlwZSksRC5wcm90b3R5cGUuY29uc3RydWN0b3I9RCxFLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHoucHJvdG90eXBlKSxFLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FLEYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoei5wcm90b3R5cGUpLEYucHJvdG90eXBlLmNvbnN0cnVjdG9yPUYsRy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6LnByb3RvdHlwZSksRy5wcm90b3R5cGUuY29uc3RydWN0b3I9Rzt2YXIgSWU9e1RhYmxlOnosUmVjb3JkOnosQ292ZXJhZ2U6RCxTY3JpcHRMaXN0OkUsRmVhdHVyZUxpc3Q6RixMb29rdXBMaXN0OkcsdXNob3J0TGlzdDpBLHRhYmxlTGlzdDpCLHJlY29yZExpc3Q6Q30sSmU9e2J5dGU6MSx1U2hvcnQ6MixzaG9ydDoyLHVMb25nOjQsZml4ZWQ6NCxsb25nRGF0ZVRpbWU6OCx0YWc6NH07US5wcm90b3R5cGUucGFyc2VCeXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldFVpbnQ4KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0xLGF9LFEucHJvdG90eXBlLnBhcnNlQ2hhcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YS5nZXRJbnQ4KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0xLGF9LFEucHJvdG90eXBlLnBhcnNlQ2FyZDg9US5wcm90b3R5cGUucGFyc2VCeXRlLFEucHJvdG90eXBlLnBhcnNlVVNob3J0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldFVpbnQxNih0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MixhfSxRLnByb3RvdHlwZS5wYXJzZUNhcmQxNj1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydCxRLnByb3RvdHlwZS5wYXJzZVNJRD1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydCxRLnByb3RvdHlwZS5wYXJzZU9mZnNldDE2PVEucHJvdG90eXBlLnBhcnNlVVNob3J0LFEucHJvdG90eXBlLnBhcnNlU2hvcnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0SW50MTYodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIsYX0sUS5wcm90b3R5cGUucGFyc2VGMkRvdDE0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldEludDE2KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpLzE2Mzg0O3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yLGF9LFEucHJvdG90eXBlLnBhcnNlVUxvbmc9ZnVuY3Rpb24oKXt2YXIgYT1LKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9NCxhfSxRLnByb3RvdHlwZS5wYXJzZU9mZnNldDMyPVEucHJvdG90eXBlLnBhcnNlVUxvbmcsUS5wcm90b3R5cGUucGFyc2VGaXhlZD1mdW5jdGlvbigpe3ZhciBhPUwodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz00LGF9LFEucHJvdG90eXBlLnBhcnNlU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZGF0YSxjPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZD1cIlwiO3RoaXMucmVsYXRpdmVPZmZzZXQrPWE7Zm9yKHZhciBlPTA7ZTxhO2UrKylkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGIuZ2V0VWludDgoYytlKSk7cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlVGFnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VTdHJpbmcoNCl9LFEucHJvdG90eXBlLnBhcnNlTG9uZ0RhdGVUaW1lPWZ1bmN0aW9uKCl7dmFyIGE9Syh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCs0KTtyZXR1cm4gYS09MjA4Mjg0NDgwMCx0aGlzLnJlbGF0aXZlT2Zmc2V0Kz04LGF9LFEucHJvdG90eXBlLnBhcnNlVmVyc2lvbj1mdW5jdGlvbihhKXt2YXIgYj1JKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KSxjPUkodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQrMik7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTQsdm9pZCAwPT09YSYmKGE9NDA5NiksYitjL2EvMTB9LFEucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0xKSx0aGlzLnJlbGF0aXZlT2Zmc2V0Kz1KZVthXSpifSxRLnByb3RvdHlwZS5wYXJzZVVMb25nTGlzdD1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT10aGlzLnBhcnNlVUxvbmcoKSk7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldFVpbnQzMihkKSxkKz00O3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz00KmEsYn0sUS5wcm90b3R5cGUucGFyc2VPZmZzZXQxNkxpc3Q9US5wcm90b3R5cGUucGFyc2VVU2hvcnRMaXN0PWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMucGFyc2VVU2hvcnQoKSk7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldFVpbnQxNihkKSxkKz0yO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yKmEsYn0sUS5wcm90b3R5cGUucGFyc2VTaG9ydExpc3Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldEludDE2KGQpLGQrPTI7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIqYSxifSxRLnByb3RvdHlwZS5wYXJzZUJ5dGVMaXN0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1uZXcgQXJyYXkoYSksYz10aGlzLmRhdGEsZD10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGU9MDtlPGE7ZSsrKWJbZV09Yy5nZXRVaW50OChkKyspO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz1hLGJ9LFEucHJvdG90eXBlLnBhcnNlTGlzdD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Ynx8KGI9YSxhPXRoaXMucGFyc2VVU2hvcnQoKSk7Zm9yKHZhciBkPW5ldyBBcnJheShhKSxlPTA7ZTxhO2UrKylkW2VdPWIuY2FsbChjKTtyZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VMaXN0MzI9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2J8fChiPWEsYT10aGlzLnBhcnNlVUxvbmcoKSk7Zm9yKHZhciBkPW5ldyBBcnJheShhKSxlPTA7ZTxhO2UrKylkW2VdPWIuY2FsbChjKTtyZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VSZWNvcmRMaXN0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztifHwoYj1hLGE9dGhpcy5wYXJzZVVTaG9ydCgpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9T2JqZWN0LmtleXMoYiksZj0wO2Y8YTtmKyspe2Zvcih2YXIgZz17fSxoPTA7aDxlLmxlbmd0aDtoKyspe3ZhciBpPWVbaF0saj1iW2ldO2dbaV09ai5jYWxsKGMpfWRbZl09Z31yZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VSZWNvcmRMaXN0MzI9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2J8fChiPWEsYT10aGlzLnBhcnNlVUxvbmcoKSk7Zm9yKHZhciBkPW5ldyBBcnJheShhKSxlPU9iamVjdC5rZXlzKGIpLGY9MDtmPGE7ZisrKXtmb3IodmFyIGc9e30saD0wO2g8ZS5sZW5ndGg7aCsrKXt2YXIgaT1lW2hdLGo9YltpXTtnW2ldPWouY2FsbChjKX1kW2ZdPWd9cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlU3RydWN0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSlyZXR1cm4gYS5jYWxsKHRoaXMpO2Zvcih2YXIgYz1PYmplY3Qua2V5cyhhKSxkPXt9LGU9MDtlPGMubGVuZ3RoO2UrKyl7dmFyIGY9Y1tlXSxnPWFbZl07ZFtmXT1nLmNhbGwoYil9cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlVmFsdWVSZWNvcmQ9ZnVuY3Rpb24oYSl7aWYodm9pZCAwPT09YSYmKGE9dGhpcy5wYXJzZVVTaG9ydCgpKSwwIT09YSl7dmFyIGI9e307cmV0dXJuIDEmYSYmKGIueFBsYWNlbWVudD10aGlzLnBhcnNlU2hvcnQoKSksMiZhJiYoYi55UGxhY2VtZW50PXRoaXMucGFyc2VTaG9ydCgpKSw0JmEmJihiLnhBZHZhbmNlPXRoaXMucGFyc2VTaG9ydCgpKSw4JmEmJihiLnlBZHZhbmNlPXRoaXMucGFyc2VTaG9ydCgpKSwxNiZhJiYoYi54UGxhRGV2aWNlPXZvaWQgMCx0aGlzLnBhcnNlU2hvcnQoKSksMzImYSYmKGIueVBsYURldmljZT12b2lkIDAsdGhpcy5wYXJzZVNob3J0KCkpLDY0JmEmJihiLnhBZHZEZXZpY2U9dm9pZCAwLHRoaXMucGFyc2VTaG9ydCgpKSwxMjgmYSYmKGIueUFkdkRldmljZT12b2lkIDAsdGhpcy5wYXJzZVNob3J0KCkpLGJ9fSxRLnByb3RvdHlwZS5wYXJzZVZhbHVlUmVjb3JkTGlzdD1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLGI9dGhpcy5wYXJzZVVTaG9ydCgpLGM9dGhpcy5wYXJzZVVTaG9ydCgpLGQ9bmV3IEFycmF5KGMpLGU9MDtlPGM7ZSsrKWRbZV09YS5wYXJzZVZhbHVlUmVjb3JkKGIpO3JldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVBvaW50ZXI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wYXJzZU9mZnNldDE2KCk7aWYoYj4wKXJldHVybiBuZXcgUSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrYikucGFyc2VTdHJ1Y3QoYSl9LFEucHJvdG90eXBlLnBhcnNlUG9pbnRlcjMyPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucGFyc2VPZmZzZXQzMigpO2lmKGI+MClyZXR1cm4gbmV3IFEodGhpcy5kYXRhLHRoaXMub2Zmc2V0K2IpLnBhcnNlU3RydWN0KGEpfSxRLnByb3RvdHlwZS5wYXJzZUxpc3RPZkxpc3RzPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLGM9dGhpcy5wYXJzZU9mZnNldDE2TGlzdCgpLGQ9Yy5sZW5ndGgsZT10aGlzLnJlbGF0aXZlT2Zmc2V0LGY9bmV3IEFycmF5KGQpLGc9MDtnPGQ7ZysrKXt2YXIgaD1jW2ddO2lmKDAhPT1oKWlmKGIucmVsYXRpdmVPZmZzZXQ9aCxhKXtmb3IodmFyIGk9Yi5wYXJzZU9mZnNldDE2TGlzdCgpLGo9bmV3IEFycmF5KGkubGVuZ3RoKSxrPTA7azxpLmxlbmd0aDtrKyspYi5yZWxhdGl2ZU9mZnNldD1oK2lba10saltrXT1hLmNhbGwoYik7ZltnXT1qfWVsc2UgZltnXT1iLnBhcnNlVVNob3J0TGlzdCgpO2Vsc2UgZltnXT12b2lkIDB9cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQ9ZSxmfSxRLnByb3RvdHlwZS5wYXJzZUNvdmVyYWdlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYz10aGlzLnBhcnNlVVNob3J0KCksZD10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWMpcmV0dXJue2Zvcm1hdDoxLGdseXBoczp0aGlzLnBhcnNlVVNob3J0TGlzdChkKX07aWYoMj09PWMpe2Zvcih2YXIgZT1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspZVtmXT17c3RhcnQ6YS5wYXJzZVVTaG9ydCgpLGVuZDphLnBhcnNlVVNob3J0KCksaW5kZXg6YS5wYXJzZVVTaG9ydCgpfTtyZXR1cm57Zm9ybWF0OjIscmFuZ2VzOmV9fXRocm93IG5ldyBFcnJvcihcIjB4XCIrYi50b1N0cmluZygxNikrXCI6IENvdmVyYWdlIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIil9LFEucHJvdG90eXBlLnBhcnNlQ2xhc3NEZWY9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO2lmKDE9PT1iKXJldHVybntmb3JtYXQ6MSxzdGFydEdseXBoOnRoaXMucGFyc2VVU2hvcnQoKSxjbGFzc2VzOnRoaXMucGFyc2VVU2hvcnRMaXN0KCl9O2lmKDI9PT1iKXJldHVybntmb3JtYXQ6MixyYW5nZXM6dGhpcy5wYXJzZVJlY29yZExpc3Qoe3N0YXJ0OlEudVNob3J0LGVuZDpRLnVTaG9ydCxjbGFzc0lkOlEudVNob3J0fSl9O3Rocm93IG5ldyBFcnJvcihcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IENsYXNzRGVmIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIil9LFEubGlzdD1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlTGlzdChhLGIpfX0sUS5saXN0MzI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZUxpc3QzMihhLGIpfX0sUS5yZWNvcmRMaXN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VSZWNvcmRMaXN0KGEsYil9fSxRLnJlY29yZExpc3QzMj1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUmVjb3JkTGlzdDMyKGEsYil9fSxRLnBvaW50ZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyKGEpfX0sUS5wb2ludGVyMzI9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyMzIoYSl9fSxRLnRhZz1RLnByb3RvdHlwZS5wYXJzZVRhZyxRLmJ5dGU9US5wcm90b3R5cGUucGFyc2VCeXRlLFEudVNob3J0PVEub2Zmc2V0MTY9US5wcm90b3R5cGUucGFyc2VVU2hvcnQsUS51U2hvcnRMaXN0PVEucHJvdG90eXBlLnBhcnNlVVNob3J0TGlzdCxRLnVMb25nPVEub2Zmc2V0MzI9US5wcm90b3R5cGUucGFyc2VVTG9uZyxRLnVMb25nTGlzdD1RLnByb3RvdHlwZS5wYXJzZVVMb25nTGlzdCxRLnN0cnVjdD1RLnByb3RvdHlwZS5wYXJzZVN0cnVjdCxRLmNvdmVyYWdlPVEucHJvdG90eXBlLnBhcnNlQ292ZXJhZ2UsUS5jbGFzc0RlZj1RLnByb3RvdHlwZS5wYXJzZUNsYXNzRGVmO3ZhciBLZT17cmVzZXJ2ZWQ6US51U2hvcnQscmVxRmVhdHVyZUluZGV4OlEudVNob3J0LGZlYXR1cmVJbmRleGVzOlEudVNob3J0TGlzdH07US5wcm90b3R5cGUucGFyc2VTY3JpcHRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyKFEucmVjb3JkTGlzdCh7dGFnOlEudGFnLHNjcmlwdDpRLnBvaW50ZXIoe2RlZmF1bHRMYW5nU3lzOlEucG9pbnRlcihLZSksbGFuZ1N5c1JlY29yZHM6US5yZWNvcmRMaXN0KHt0YWc6US50YWcsbGFuZ1N5czpRLnBvaW50ZXIoS2UpfSl9KX0pKXx8W119LFEucHJvdG90eXBlLnBhcnNlRmVhdHVyZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoUS5yZWNvcmRMaXN0KHt0YWc6US50YWcsZmVhdHVyZTpRLnBvaW50ZXIoe2ZlYXR1cmVQYXJhbXM6US5vZmZzZXQxNixsb29rdXBMaXN0SW5kZXhlczpRLnVTaG9ydExpc3R9KX0pKXx8W119LFEucHJvdG90eXBlLnBhcnNlTG9va3VwTGlzdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoUS5saXN0KFEucG9pbnRlcihmdW5jdGlvbigpe3ZhciBiPXRoaXMucGFyc2VVU2hvcnQoKTt4ZS5hcmd1bWVudCgxPD1iJiZiPD05LFwiR1BPUy9HU1VCIGxvb2t1cCB0eXBlIFwiK2IrXCIgdW5rbm93bi5cIik7dmFyIGM9dGhpcy5wYXJzZVVTaG9ydCgpLGQ9MTYmYztyZXR1cm57bG9va3VwVHlwZTpiLGxvb2t1cEZsYWc6YyxzdWJ0YWJsZXM6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKGFbYl0pKSxtYXJrRmlsdGVyaW5nU2V0OmQ/dGhpcy5wYXJzZVVTaG9ydCgpOnZvaWQgMH19KSkpfHxbXX0sUS5wcm90b3R5cGUucGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIzMihmdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKSxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWEmJmI8MSxcIkdQT1MvR1NVQiBmZWF0dXJlIHZhcmlhdGlvbnMgdGFibGUgdW5rbm93bi5cIiksdGhpcy5wYXJzZVJlY29yZExpc3QzMih7Y29uZGl0aW9uU2V0T2Zmc2V0OlEub2Zmc2V0MzIsZmVhdHVyZVRhYmxlU3Vic3RpdHV0aW9uT2Zmc2V0OlEub2Zmc2V0MzJ9KX0pfHxbXX07dmFyIExlPXtnZXRCeXRlOkgsZ2V0Q2FyZDg6SCxnZXRVU2hvcnQ6SSxnZXRDYXJkMTY6SSxnZXRTaG9ydDpKLGdldFVMb25nOkssZ2V0Rml4ZWQ6TCxnZXRUYWc6TSxnZXRPZmZzZXQ6TixnZXRCeXRlczpPLGJ5dGVzVG9TdHJpbmc6UCxQYXJzZXI6UX0sTWU9e3BhcnNlOlQsbWFrZTpXfSxOZT1bXCIubm90ZGVmXCIsXCJzcGFjZVwiLFwiZXhjbGFtXCIsXCJxdW90ZWRibFwiLFwibnVtYmVyc2lnblwiLFwiZG9sbGFyXCIsXCJwZXJjZW50XCIsXCJhbXBlcnNhbmRcIixcInF1b3RlcmlnaHRcIixcInBhcmVubGVmdFwiLFwicGFyZW5yaWdodFwiLFwiYXN0ZXJpc2tcIixcInBsdXNcIixcImNvbW1hXCIsXCJoeXBoZW5cIixcInBlcmlvZFwiLFwic2xhc2hcIixcInplcm9cIixcIm9uZVwiLFwidHdvXCIsXCJ0aHJlZVwiLFwiZm91clwiLFwiZml2ZVwiLFwic2l4XCIsXCJzZXZlblwiLFwiZWlnaHRcIixcIm5pbmVcIixcImNvbG9uXCIsXCJzZW1pY29sb25cIixcImxlc3NcIixcImVxdWFsXCIsXCJncmVhdGVyXCIsXCJxdWVzdGlvblwiLFwiYXRcIixcIkFcIixcIkJcIixcIkNcIixcIkRcIixcIkVcIixcIkZcIixcIkdcIixcIkhcIixcIklcIixcIkpcIixcIktcIixcIkxcIixcIk1cIixcIk5cIixcIk9cIixcIlBcIixcIlFcIixcIlJcIixcIlNcIixcIlRcIixcIlVcIixcIlZcIixcIldcIixcIlhcIixcIllcIixcIlpcIixcImJyYWNrZXRsZWZ0XCIsXCJiYWNrc2xhc2hcIixcImJyYWNrZXRyaWdodFwiLFwiYXNjaWljaXJjdW1cIixcInVuZGVyc2NvcmVcIixcInF1b3RlbGVmdFwiLFwiYVwiLFwiYlwiLFwiY1wiLFwiZFwiLFwiZVwiLFwiZlwiLFwiZ1wiLFwiaFwiLFwiaVwiLFwialwiLFwia1wiLFwibFwiLFwibVwiLFwiblwiLFwib1wiLFwicFwiLFwicVwiLFwiclwiLFwic1wiLFwidFwiLFwidVwiLFwidlwiLFwid1wiLFwieFwiLFwieVwiLFwielwiLFwiYnJhY2VsZWZ0XCIsXCJiYXJcIixcImJyYWNlcmlnaHRcIixcImFzY2lpdGlsZGVcIixcImV4Y2xhbWRvd25cIixcImNlbnRcIixcInN0ZXJsaW5nXCIsXCJmcmFjdGlvblwiLFwieWVuXCIsXCJmbG9yaW5cIixcInNlY3Rpb25cIixcImN1cnJlbmN5XCIsXCJxdW90ZXNpbmdsZVwiLFwicXVvdGVkYmxsZWZ0XCIsXCJndWlsbGVtb3RsZWZ0XCIsXCJndWlsc2luZ2xsZWZ0XCIsXCJndWlsc2luZ2xyaWdodFwiLFwiZmlcIixcImZsXCIsXCJlbmRhc2hcIixcImRhZ2dlclwiLFwiZGFnZ2VyZGJsXCIsXCJwZXJpb2RjZW50ZXJlZFwiLFwicGFyYWdyYXBoXCIsXCJidWxsZXRcIixcInF1b3Rlc2luZ2xiYXNlXCIsXCJxdW90ZWRibGJhc2VcIixcInF1b3RlZGJscmlnaHRcIixcImd1aWxsZW1vdHJpZ2h0XCIsXCJlbGxpcHNpc1wiLFwicGVydGhvdXNhbmRcIixcInF1ZXN0aW9uZG93blwiLFwiZ3JhdmVcIixcImFjdXRlXCIsXCJjaXJjdW1mbGV4XCIsXCJ0aWxkZVwiLFwibWFjcm9uXCIsXCJicmV2ZVwiLFwiZG90YWNjZW50XCIsXCJkaWVyZXNpc1wiLFwicmluZ1wiLFwiY2VkaWxsYVwiLFwiaHVuZ2FydW1sYXV0XCIsXCJvZ29uZWtcIixcImNhcm9uXCIsXCJlbWRhc2hcIixcIkFFXCIsXCJvcmRmZW1pbmluZVwiLFwiTHNsYXNoXCIsXCJPc2xhc2hcIixcIk9FXCIsXCJvcmRtYXNjdWxpbmVcIixcImFlXCIsXCJkb3RsZXNzaVwiLFwibHNsYXNoXCIsXCJvc2xhc2hcIixcIm9lXCIsXCJnZXJtYW5kYmxzXCIsXCJvbmVzdXBlcmlvclwiLFwibG9naWNhbG5vdFwiLFwibXVcIixcInRyYWRlbWFya1wiLFwiRXRoXCIsXCJvbmVoYWxmXCIsXCJwbHVzbWludXNcIixcIlRob3JuXCIsXCJvbmVxdWFydGVyXCIsXCJkaXZpZGVcIixcImJyb2tlbmJhclwiLFwiZGVncmVlXCIsXCJ0aG9yblwiLFwidGhyZWVxdWFydGVyc1wiLFwidHdvc3VwZXJpb3JcIixcInJlZ2lzdGVyZWRcIixcIm1pbnVzXCIsXCJldGhcIixcIm11bHRpcGx5XCIsXCJ0aHJlZXN1cGVyaW9yXCIsXCJjb3B5cmlnaHRcIixcIkFhY3V0ZVwiLFwiQWNpcmN1bWZsZXhcIixcIkFkaWVyZXNpc1wiLFwiQWdyYXZlXCIsXCJBcmluZ1wiLFwiQXRpbGRlXCIsXCJDY2VkaWxsYVwiLFwiRWFjdXRlXCIsXCJFY2lyY3VtZmxleFwiLFwiRWRpZXJlc2lzXCIsXCJFZ3JhdmVcIixcIklhY3V0ZVwiLFwiSWNpcmN1bWZsZXhcIixcIklkaWVyZXNpc1wiLFwiSWdyYXZlXCIsXCJOdGlsZGVcIixcIk9hY3V0ZVwiLFwiT2NpcmN1bWZsZXhcIixcIk9kaWVyZXNpc1wiLFwiT2dyYXZlXCIsXCJPdGlsZGVcIixcIlNjYXJvblwiLFwiVWFjdXRlXCIsXCJVY2lyY3VtZmxleFwiLFwiVWRpZXJlc2lzXCIsXCJVZ3JhdmVcIixcIllhY3V0ZVwiLFwiWWRpZXJlc2lzXCIsXCJaY2Fyb25cIixcImFhY3V0ZVwiLFwiYWNpcmN1bWZsZXhcIixcImFkaWVyZXNpc1wiLFwiYWdyYXZlXCIsXCJhcmluZ1wiLFwiYXRpbGRlXCIsXCJjY2VkaWxsYVwiLFwiZWFjdXRlXCIsXCJlY2lyY3VtZmxleFwiLFwiZWRpZXJlc2lzXCIsXCJlZ3JhdmVcIixcImlhY3V0ZVwiLFwiaWNpcmN1bWZsZXhcIixcImlkaWVyZXNpc1wiLFwiaWdyYXZlXCIsXCJudGlsZGVcIixcIm9hY3V0ZVwiLFwib2NpcmN1bWZsZXhcIixcIm9kaWVyZXNpc1wiLFwib2dyYXZlXCIsXCJvdGlsZGVcIixcInNjYXJvblwiLFwidWFjdXRlXCIsXCJ1Y2lyY3VtZmxleFwiLFwidWRpZXJlc2lzXCIsXCJ1Z3JhdmVcIixcInlhY3V0ZVwiLFwieWRpZXJlc2lzXCIsXCJ6Y2Fyb25cIixcImV4Y2xhbXNtYWxsXCIsXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLFwiZG9sbGFyb2xkc3R5bGVcIixcImRvbGxhcnN1cGVyaW9yXCIsXCJhbXBlcnNhbmRzbWFsbFwiLFwiQWN1dGVzbWFsbFwiLFwicGFyZW5sZWZ0c3VwZXJpb3JcIixcInBhcmVucmlnaHRzdXBlcmlvclwiLFwiMjY2IGZmXCIsXCJvbmVkb3RlbmxlYWRlclwiLFwiemVyb29sZHN0eWxlXCIsXCJvbmVvbGRzdHlsZVwiLFwidHdvb2xkc3R5bGVcIixcInRocmVlb2xkc3R5bGVcIixcImZvdXJvbGRzdHlsZVwiLFwiZml2ZW9sZHN0eWxlXCIsXCJzaXhvbGRzdHlsZVwiLFwic2V2ZW5vbGRzdHlsZVwiLFwiZWlnaHRvbGRzdHlsZVwiLFwibmluZW9sZHN0eWxlXCIsXCJjb21tYXN1cGVyaW9yXCIsXCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoXCIsXCJwZXJpb2RzdXBlcmlvclwiLFwicXVlc3Rpb25zbWFsbFwiLFwiYXN1cGVyaW9yXCIsXCJic3VwZXJpb3JcIixcImNlbnRzdXBlcmlvclwiLFwiZHN1cGVyaW9yXCIsXCJlc3VwZXJpb3JcIixcImlzdXBlcmlvclwiLFwibHN1cGVyaW9yXCIsXCJtc3VwZXJpb3JcIixcIm5zdXBlcmlvclwiLFwib3N1cGVyaW9yXCIsXCJyc3VwZXJpb3JcIixcInNzdXBlcmlvclwiLFwidHN1cGVyaW9yXCIsXCJmZlwiLFwiZmZpXCIsXCJmZmxcIixcInBhcmVubGVmdGluZmVyaW9yXCIsXCJwYXJlbnJpZ2h0aW5mZXJpb3JcIixcIkNpcmN1bWZsZXhzbWFsbFwiLFwiaHlwaGVuc3VwZXJpb3JcIixcIkdyYXZlc21hbGxcIixcIkFzbWFsbFwiLFwiQnNtYWxsXCIsXCJDc21hbGxcIixcIkRzbWFsbFwiLFwiRXNtYWxsXCIsXCJGc21hbGxcIixcIkdzbWFsbFwiLFwiSHNtYWxsXCIsXCJJc21hbGxcIixcIkpzbWFsbFwiLFwiS3NtYWxsXCIsXCJMc21hbGxcIixcIk1zbWFsbFwiLFwiTnNtYWxsXCIsXCJPc21hbGxcIixcIlBzbWFsbFwiLFwiUXNtYWxsXCIsXCJSc21hbGxcIixcIlNzbWFsbFwiLFwiVHNtYWxsXCIsXCJVc21hbGxcIixcIlZzbWFsbFwiLFwiV3NtYWxsXCIsXCJYc21hbGxcIixcIllzbWFsbFwiLFwiWnNtYWxsXCIsXCJjb2xvbm1vbmV0YXJ5XCIsXCJvbmVmaXR0ZWRcIixcInJ1cGlhaFwiLFwiVGlsZGVzbWFsbFwiLFwiZXhjbGFtZG93bnNtYWxsXCIsXCJjZW50b2xkc3R5bGVcIixcIkxzbGFzaHNtYWxsXCIsXCJTY2Fyb25zbWFsbFwiLFwiWmNhcm9uc21hbGxcIixcIkRpZXJlc2lzc21hbGxcIixcIkJyZXZlc21hbGxcIixcIkNhcm9uc21hbGxcIixcIkRvdGFjY2VudHNtYWxsXCIsXCJNYWNyb25zbWFsbFwiLFwiZmlndXJlZGFzaFwiLFwiaHlwaGVuaW5mZXJpb3JcIixcIk9nb25la3NtYWxsXCIsXCJSaW5nc21hbGxcIixcIkNlZGlsbGFzbWFsbFwiLFwicXVlc3Rpb25kb3duc21hbGxcIixcIm9uZWVpZ2h0aFwiLFwidGhyZWVlaWdodGhzXCIsXCJmaXZlZWlnaHRoc1wiLFwic2V2ZW5laWdodGhzXCIsXCJvbmV0aGlyZFwiLFwidHdvdGhpcmRzXCIsXCJ6ZXJvc3VwZXJpb3JcIixcImZvdXJzdXBlcmlvclwiLFwiZml2ZXN1cGVyaW9yXCIsXCJzaXhzdXBlcmlvclwiLFwic2V2ZW5zdXBlcmlvclwiLFwiZWlnaHRzdXBlcmlvclwiLFwibmluZXN1cGVyaW9yXCIsXCJ6ZXJvaW5mZXJpb3JcIixcIm9uZWluZmVyaW9yXCIsXCJ0d29pbmZlcmlvclwiLFwidGhyZWVpbmZlcmlvclwiLFwiZm91cmluZmVyaW9yXCIsXCJmaXZlaW5mZXJpb3JcIixcInNpeGluZmVyaW9yXCIsXCJzZXZlbmluZmVyaW9yXCIsXCJlaWdodGluZmVyaW9yXCIsXCJuaW5laW5mZXJpb3JcIixcImNlbnRpbmZlcmlvclwiLFwiZG9sbGFyaW5mZXJpb3JcIixcInBlcmlvZGluZmVyaW9yXCIsXCJjb21tYWluZmVyaW9yXCIsXCJBZ3JhdmVzbWFsbFwiLFwiQWFjdXRlc21hbGxcIixcIkFjaXJjdW1mbGV4c21hbGxcIixcIkF0aWxkZXNtYWxsXCIsXCJBZGllcmVzaXNzbWFsbFwiLFwiQXJpbmdzbWFsbFwiLFwiQUVzbWFsbFwiLFwiQ2NlZGlsbGFzbWFsbFwiLFwiRWdyYXZlc21hbGxcIixcIkVhY3V0ZXNtYWxsXCIsXCJFY2lyY3VtZmxleHNtYWxsXCIsXCJFZGllcmVzaXNzbWFsbFwiLFwiSWdyYXZlc21hbGxcIixcIklhY3V0ZXNtYWxsXCIsXCJJY2lyY3VtZmxleHNtYWxsXCIsXCJJZGllcmVzaXNzbWFsbFwiLFwiRXRoc21hbGxcIixcIk50aWxkZXNtYWxsXCIsXCJPZ3JhdmVzbWFsbFwiLFwiT2FjdXRlc21hbGxcIixcIk9jaXJjdW1mbGV4c21hbGxcIixcIk90aWxkZXNtYWxsXCIsXCJPZGllcmVzaXNzbWFsbFwiLFwiT0VzbWFsbFwiLFwiT3NsYXNoc21hbGxcIixcIlVncmF2ZXNtYWxsXCIsXCJVYWN1dGVzbWFsbFwiLFwiVWNpcmN1bWZsZXhzbWFsbFwiLFwiVWRpZXJlc2lzc21hbGxcIixcIllhY3V0ZXNtYWxsXCIsXCJUaG9ybnNtYWxsXCIsXCJZZGllcmVzaXNzbWFsbFwiLFwiMDAxLjAwMFwiLFwiMDAxLjAwMVwiLFwiMDAxLjAwMlwiLFwiMDAxLjAwM1wiLFwiQmxhY2tcIixcIkJvbGRcIixcIkJvb2tcIixcIkxpZ2h0XCIsXCJNZWRpdW1cIixcIlJlZ3VsYXJcIixcIlJvbWFuXCIsXCJTZW1pYm9sZFwiXSxPZT1bXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwic3BhY2VcIixcImV4Y2xhbVwiLFwicXVvdGVkYmxcIixcIm51bWJlcnNpZ25cIixcImRvbGxhclwiLFwicGVyY2VudFwiLFwiYW1wZXJzYW5kXCIsXCJxdW90ZXJpZ2h0XCIsXCJwYXJlbmxlZnRcIixcInBhcmVucmlnaHRcIixcImFzdGVyaXNrXCIsXCJwbHVzXCIsXCJjb21tYVwiLFwiaHlwaGVuXCIsXCJwZXJpb2RcIixcInNsYXNoXCIsXCJ6ZXJvXCIsXCJvbmVcIixcInR3b1wiLFwidGhyZWVcIixcImZvdXJcIixcImZpdmVcIixcInNpeFwiLFwic2V2ZW5cIixcImVpZ2h0XCIsXCJuaW5lXCIsXCJjb2xvblwiLFwic2VtaWNvbG9uXCIsXCJsZXNzXCIsXCJlcXVhbFwiLFwiZ3JlYXRlclwiLFwicXVlc3Rpb25cIixcImF0XCIsXCJBXCIsXCJCXCIsXCJDXCIsXCJEXCIsXCJFXCIsXCJGXCIsXCJHXCIsXCJIXCIsXCJJXCIsXCJKXCIsXCJLXCIsXCJMXCIsXCJNXCIsXCJOXCIsXCJPXCIsXCJQXCIsXCJRXCIsXCJSXCIsXCJTXCIsXCJUXCIsXCJVXCIsXCJWXCIsXCJXXCIsXCJYXCIsXCJZXCIsXCJaXCIsXCJicmFja2V0bGVmdFwiLFwiYmFja3NsYXNoXCIsXCJicmFja2V0cmlnaHRcIixcImFzY2lpY2lyY3VtXCIsXCJ1bmRlcnNjb3JlXCIsXCJxdW90ZWxlZnRcIixcImFcIixcImJcIixcImNcIixcImRcIixcImVcIixcImZcIixcImdcIixcImhcIixcImlcIixcImpcIixcImtcIixcImxcIixcIm1cIixcIm5cIixcIm9cIixcInBcIixcInFcIixcInJcIixcInNcIixcInRcIixcInVcIixcInZcIixcIndcIixcInhcIixcInlcIixcInpcIixcImJyYWNlbGVmdFwiLFwiYmFyXCIsXCJicmFjZXJpZ2h0XCIsXCJhc2NpaXRpbGRlXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcImV4Y2xhbWRvd25cIixcImNlbnRcIixcInN0ZXJsaW5nXCIsXCJmcmFjdGlvblwiLFwieWVuXCIsXCJmbG9yaW5cIixcInNlY3Rpb25cIixcImN1cnJlbmN5XCIsXCJxdW90ZXNpbmdsZVwiLFwicXVvdGVkYmxsZWZ0XCIsXCJndWlsbGVtb3RsZWZ0XCIsXCJndWlsc2luZ2xsZWZ0XCIsXCJndWlsc2luZ2xyaWdodFwiLFwiZmlcIixcImZsXCIsXCJcIixcImVuZGFzaFwiLFwiZGFnZ2VyXCIsXCJkYWdnZXJkYmxcIixcInBlcmlvZGNlbnRlcmVkXCIsXCJcIixcInBhcmFncmFwaFwiLFwiYnVsbGV0XCIsXCJxdW90ZXNpbmdsYmFzZVwiLFwicXVvdGVkYmxiYXNlXCIsXCJxdW90ZWRibHJpZ2h0XCIsXCJndWlsbGVtb3RyaWdodFwiLFwiZWxsaXBzaXNcIixcInBlcnRob3VzYW5kXCIsXCJcIixcInF1ZXN0aW9uZG93blwiLFwiXCIsXCJncmF2ZVwiLFwiYWN1dGVcIixcImNpcmN1bWZsZXhcIixcInRpbGRlXCIsXCJtYWNyb25cIixcImJyZXZlXCIsXCJkb3RhY2NlbnRcIixcImRpZXJlc2lzXCIsXCJcIixcInJpbmdcIixcImNlZGlsbGFcIixcIlwiLFwiaHVuZ2FydW1sYXV0XCIsXCJvZ29uZWtcIixcImNhcm9uXCIsXCJlbWRhc2hcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiQUVcIixcIlwiLFwib3JkZmVtaW5pbmVcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiTHNsYXNoXCIsXCJPc2xhc2hcIixcIk9FXCIsXCJvcmRtYXNjdWxpbmVcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJhZVwiLFwiXCIsXCJcIixcIlwiLFwiZG90bGVzc2lcIixcIlwiLFwiXCIsXCJsc2xhc2hcIixcIm9zbGFzaFwiLFwib2VcIixcImdlcm1hbmRibHNcIl0sUGU9W1wiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcInNwYWNlXCIsXCJleGNsYW1zbWFsbFwiLFwiSHVuZ2FydW1sYXV0c21hbGxcIixcIlwiLFwiZG9sbGFyb2xkc3R5bGVcIixcImRvbGxhcnN1cGVyaW9yXCIsXCJhbXBlcnNhbmRzbWFsbFwiLFwiQWN1dGVzbWFsbFwiLFwicGFyZW5sZWZ0c3VwZXJpb3JcIixcInBhcmVucmlnaHRzdXBlcmlvclwiLFwidHdvZG90ZW5sZWFkZXJcIixcIm9uZWRvdGVubGVhZGVyXCIsXCJjb21tYVwiLFwiaHlwaGVuXCIsXCJwZXJpb2RcIixcImZyYWN0aW9uXCIsXCJ6ZXJvb2xkc3R5bGVcIixcIm9uZW9sZHN0eWxlXCIsXCJ0d29vbGRzdHlsZVwiLFwidGhyZWVvbGRzdHlsZVwiLFwiZm91cm9sZHN0eWxlXCIsXCJmaXZlb2xkc3R5bGVcIixcInNpeG9sZHN0eWxlXCIsXCJzZXZlbm9sZHN0eWxlXCIsXCJlaWdodG9sZHN0eWxlXCIsXCJuaW5lb2xkc3R5bGVcIixcImNvbG9uXCIsXCJzZW1pY29sb25cIixcImNvbW1hc3VwZXJpb3JcIixcInRocmVlcXVhcnRlcnNlbWRhc2hcIixcInBlcmlvZHN1cGVyaW9yXCIsXCJxdWVzdGlvbnNtYWxsXCIsXCJcIixcImFzdXBlcmlvclwiLFwiYnN1cGVyaW9yXCIsXCJjZW50c3VwZXJpb3JcIixcImRzdXBlcmlvclwiLFwiZXN1cGVyaW9yXCIsXCJcIixcIlwiLFwiaXN1cGVyaW9yXCIsXCJcIixcIlwiLFwibHN1cGVyaW9yXCIsXCJtc3VwZXJpb3JcIixcIm5zdXBlcmlvclwiLFwib3N1cGVyaW9yXCIsXCJcIixcIlwiLFwicnN1cGVyaW9yXCIsXCJzc3VwZXJpb3JcIixcInRzdXBlcmlvclwiLFwiXCIsXCJmZlwiLFwiZmlcIixcImZsXCIsXCJmZmlcIixcImZmbFwiLFwicGFyZW5sZWZ0aW5mZXJpb3JcIixcIlwiLFwicGFyZW5yaWdodGluZmVyaW9yXCIsXCJDaXJjdW1mbGV4c21hbGxcIixcImh5cGhlbnN1cGVyaW9yXCIsXCJHcmF2ZXNtYWxsXCIsXCJBc21hbGxcIixcIkJzbWFsbFwiLFwiQ3NtYWxsXCIsXCJEc21hbGxcIixcIkVzbWFsbFwiLFwiRnNtYWxsXCIsXCJHc21hbGxcIixcIkhzbWFsbFwiLFwiSXNtYWxsXCIsXCJKc21hbGxcIixcIktzbWFsbFwiLFwiTHNtYWxsXCIsXCJNc21hbGxcIixcIk5zbWFsbFwiLFwiT3NtYWxsXCIsXCJQc21hbGxcIixcIlFzbWFsbFwiLFwiUnNtYWxsXCIsXCJTc21hbGxcIixcIlRzbWFsbFwiLFwiVXNtYWxsXCIsXCJWc21hbGxcIixcIldzbWFsbFwiLFwiWHNtYWxsXCIsXCJZc21hbGxcIixcIlpzbWFsbFwiLFwiY29sb25tb25ldGFyeVwiLFwib25lZml0dGVkXCIsXCJydXBpYWhcIixcIlRpbGRlc21hbGxcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiZXhjbGFtZG93bnNtYWxsXCIsXCJjZW50b2xkc3R5bGVcIixcIkxzbGFzaHNtYWxsXCIsXCJcIixcIlwiLFwiU2Nhcm9uc21hbGxcIixcIlpjYXJvbnNtYWxsXCIsXCJEaWVyZXNpc3NtYWxsXCIsXCJCcmV2ZXNtYWxsXCIsXCJDYXJvbnNtYWxsXCIsXCJcIixcIkRvdGFjY2VudHNtYWxsXCIsXCJcIixcIlwiLFwiTWFjcm9uc21hbGxcIixcIlwiLFwiXCIsXCJmaWd1cmVkYXNoXCIsXCJoeXBoZW5pbmZlcmlvclwiLFwiXCIsXCJcIixcIk9nb25la3NtYWxsXCIsXCJSaW5nc21hbGxcIixcIkNlZGlsbGFzbWFsbFwiLFwiXCIsXCJcIixcIlwiLFwib25lcXVhcnRlclwiLFwib25laGFsZlwiLFwidGhyZWVxdWFydGVyc1wiLFwicXVlc3Rpb25kb3duc21hbGxcIixcIm9uZWVpZ2h0aFwiLFwidGhyZWVlaWdodGhzXCIsXCJmaXZlZWlnaHRoc1wiLFwic2V2ZW5laWdodGhzXCIsXCJvbmV0aGlyZFwiLFwidHdvdGhpcmRzXCIsXCJcIixcIlwiLFwiemVyb3N1cGVyaW9yXCIsXCJvbmVzdXBlcmlvclwiLFwidHdvc3VwZXJpb3JcIixcInRocmVlc3VwZXJpb3JcIixcImZvdXJzdXBlcmlvclwiLFwiZml2ZXN1cGVyaW9yXCIsXCJzaXhzdXBlcmlvclwiLFwic2V2ZW5zdXBlcmlvclwiLFwiZWlnaHRzdXBlcmlvclwiLFwibmluZXN1cGVyaW9yXCIsXCJ6ZXJvaW5mZXJpb3JcIixcIm9uZWluZmVyaW9yXCIsXCJ0d29pbmZlcmlvclwiLFwidGhyZWVpbmZlcmlvclwiLFwiZm91cmluZmVyaW9yXCIsXCJmaXZlaW5mZXJpb3JcIixcInNpeGluZmVyaW9yXCIsXCJzZXZlbmluZmVyaW9yXCIsXCJlaWdodGluZmVyaW9yXCIsXCJuaW5laW5mZXJpb3JcIixcImNlbnRpbmZlcmlvclwiLFwiZG9sbGFyaW5mZXJpb3JcIixcInBlcmlvZGluZmVyaW9yXCIsXCJjb21tYWluZmVyaW9yXCIsXCJBZ3JhdmVzbWFsbFwiLFwiQWFjdXRlc21hbGxcIixcIkFjaXJjdW1mbGV4c21hbGxcIixcIkF0aWxkZXNtYWxsXCIsXCJBZGllcmVzaXNzbWFsbFwiLFwiQXJpbmdzbWFsbFwiLFwiQUVzbWFsbFwiLFwiQ2NlZGlsbGFzbWFsbFwiLFwiRWdyYXZlc21hbGxcIixcIkVhY3V0ZXNtYWxsXCIsXCJFY2lyY3VtZmxleHNtYWxsXCIsXCJFZGllcmVzaXNzbWFsbFwiLFwiSWdyYXZlc21hbGxcIixcIklhY3V0ZXNtYWxsXCIsXCJJY2lyY3VtZmxleHNtYWxsXCIsXCJJZGllcmVzaXNzbWFsbFwiLFwiRXRoc21hbGxcIixcIk50aWxkZXNtYWxsXCIsXCJPZ3JhdmVzbWFsbFwiLFwiT2FjdXRlc21hbGxcIixcIk9jaXJjdW1mbGV4c21hbGxcIixcIk90aWxkZXNtYWxsXCIsXCJPZGllcmVzaXNzbWFsbFwiLFwiT0VzbWFsbFwiLFwiT3NsYXNoc21hbGxcIixcIlVncmF2ZXNtYWxsXCIsXCJVYWN1dGVzbWFsbFwiLFwiVWNpcmN1bWZsZXhzbWFsbFwiLFwiVWRpZXJlc2lzc21hbGxcIixcIllhY3V0ZXNtYWxsXCIsXCJUaG9ybnNtYWxsXCIsXCJZZGllcmVzaXNzbWFsbFwiXSxRZT1bXCIubm90ZGVmXCIsXCIubnVsbFwiLFwibm9ubWFya2luZ3JldHVyblwiLFwic3BhY2VcIixcImV4Y2xhbVwiLFwicXVvdGVkYmxcIixcIm51bWJlcnNpZ25cIixcImRvbGxhclwiLFwicGVyY2VudFwiLFwiYW1wZXJzYW5kXCIsXCJxdW90ZXNpbmdsZVwiLFwicGFyZW5sZWZ0XCIsXCJwYXJlbnJpZ2h0XCIsXCJhc3Rlcmlza1wiLFwicGx1c1wiLFwiY29tbWFcIixcImh5cGhlblwiLFwicGVyaW9kXCIsXCJzbGFzaFwiLFwiemVyb1wiLFwib25lXCIsXCJ0d29cIixcInRocmVlXCIsXCJmb3VyXCIsXCJmaXZlXCIsXCJzaXhcIixcInNldmVuXCIsXCJlaWdodFwiLFwibmluZVwiLFwiY29sb25cIixcInNlbWljb2xvblwiLFwibGVzc1wiLFwiZXF1YWxcIixcImdyZWF0ZXJcIixcInF1ZXN0aW9uXCIsXCJhdFwiLFwiQVwiLFwiQlwiLFwiQ1wiLFwiRFwiLFwiRVwiLFwiRlwiLFwiR1wiLFwiSFwiLFwiSVwiLFwiSlwiLFwiS1wiLFwiTFwiLFwiTVwiLFwiTlwiLFwiT1wiLFwiUFwiLFwiUVwiLFwiUlwiLFwiU1wiLFwiVFwiLFwiVVwiLFwiVlwiLFwiV1wiLFwiWFwiLFwiWVwiLFwiWlwiLFwiYnJhY2tldGxlZnRcIixcImJhY2tzbGFzaFwiLFwiYnJhY2tldHJpZ2h0XCIsXCJhc2NpaWNpcmN1bVwiLFwidW5kZXJzY29yZVwiLFwiZ3JhdmVcIixcImFcIixcImJcIixcImNcIixcImRcIixcImVcIixcImZcIixcImdcIixcImhcIixcImlcIixcImpcIixcImtcIixcImxcIixcIm1cIixcIm5cIixcIm9cIixcInBcIixcInFcIixcInJcIixcInNcIixcInRcIixcInVcIixcInZcIixcIndcIixcInhcIixcInlcIixcInpcIixcImJyYWNlbGVmdFwiLFwiYmFyXCIsXCJicmFjZXJpZ2h0XCIsXCJhc2NpaXRpbGRlXCIsXCJBZGllcmVzaXNcIixcIkFyaW5nXCIsXCJDY2VkaWxsYVwiLFwiRWFjdXRlXCIsXCJOdGlsZGVcIixcIk9kaWVyZXNpc1wiLFwiVWRpZXJlc2lzXCIsXCJhYWN1dGVcIixcImFncmF2ZVwiLFwiYWNpcmN1bWZsZXhcIixcImFkaWVyZXNpc1wiLFwiYXRpbGRlXCIsXCJhcmluZ1wiLFwiY2NlZGlsbGFcIixcImVhY3V0ZVwiLFwiZWdyYXZlXCIsXCJlY2lyY3VtZmxleFwiLFwiZWRpZXJlc2lzXCIsXCJpYWN1dGVcIixcImlncmF2ZVwiLFwiaWNpcmN1bWZsZXhcIixcImlkaWVyZXNpc1wiLFwibnRpbGRlXCIsXCJvYWN1dGVcIixcIm9ncmF2ZVwiLFwib2NpcmN1bWZsZXhcIixcIm9kaWVyZXNpc1wiLFwib3RpbGRlXCIsXCJ1YWN1dGVcIixcInVncmF2ZVwiLFwidWNpcmN1bWZsZXhcIixcInVkaWVyZXNpc1wiLFwiZGFnZ2VyXCIsXCJkZWdyZWVcIixcImNlbnRcIixcInN0ZXJsaW5nXCIsXCJzZWN0aW9uXCIsXCJidWxsZXRcIixcInBhcmFncmFwaFwiLFwiZ2VybWFuZGJsc1wiLFwicmVnaXN0ZXJlZFwiLFwiY29weXJpZ2h0XCIsXCJ0cmFkZW1hcmtcIixcImFjdXRlXCIsXCJkaWVyZXNpc1wiLFwibm90ZXF1YWxcIixcIkFFXCIsXCJPc2xhc2hcIixcImluZmluaXR5XCIsXCJwbHVzbWludXNcIixcImxlc3NlcXVhbFwiLFwiZ3JlYXRlcmVxdWFsXCIsXCJ5ZW5cIixcIm11XCIsXCJwYXJ0aWFsZGlmZlwiLFwic3VtbWF0aW9uXCIsXCJwcm9kdWN0XCIsXCJwaVwiLFwiaW50ZWdyYWxcIixcIm9yZGZlbWluaW5lXCIsXCJvcmRtYXNjdWxpbmVcIixcIk9tZWdhXCIsXCJhZVwiLFwib3NsYXNoXCIsXCJxdWVzdGlvbmRvd25cIixcImV4Y2xhbWRvd25cIixcImxvZ2ljYWxub3RcIixcInJhZGljYWxcIixcImZsb3JpblwiLFwiYXBwcm94ZXF1YWxcIixcIkRlbHRhXCIsXCJndWlsbGVtb3RsZWZ0XCIsXCJndWlsbGVtb3RyaWdodFwiLFwiZWxsaXBzaXNcIixcIm5vbmJyZWFraW5nc3BhY2VcIixcIkFncmF2ZVwiLFwiQXRpbGRlXCIsXCJPdGlsZGVcIixcIk9FXCIsXCJvZVwiLFwiZW5kYXNoXCIsXCJlbWRhc2hcIixcInF1b3RlZGJsbGVmdFwiLFwicXVvdGVkYmxyaWdodFwiLFwicXVvdGVsZWZ0XCIsXCJxdW90ZXJpZ2h0XCIsXCJkaXZpZGVcIixcImxvemVuZ2VcIixcInlkaWVyZXNpc1wiLFwiWWRpZXJlc2lzXCIsXCJmcmFjdGlvblwiLFwiY3VycmVuY3lcIixcImd1aWxzaW5nbGxlZnRcIixcImd1aWxzaW5nbHJpZ2h0XCIsXCJmaVwiLFwiZmxcIixcImRhZ2dlcmRibFwiLFwicGVyaW9kY2VudGVyZWRcIixcInF1b3Rlc2luZ2xiYXNlXCIsXCJxdW90ZWRibGJhc2VcIixcInBlcnRob3VzYW5kXCIsXCJBY2lyY3VtZmxleFwiLFwiRWNpcmN1bWZsZXhcIixcIkFhY3V0ZVwiLFwiRWRpZXJlc2lzXCIsXCJFZ3JhdmVcIixcIklhY3V0ZVwiLFwiSWNpcmN1bWZsZXhcIixcIklkaWVyZXNpc1wiLFwiSWdyYXZlXCIsXCJPYWN1dGVcIixcIk9jaXJjdW1mbGV4XCIsXCJhcHBsZVwiLFwiT2dyYXZlXCIsXCJVYWN1dGVcIixcIlVjaXJjdW1mbGV4XCIsXCJVZ3JhdmVcIixcImRvdGxlc3NpXCIsXCJjaXJjdW1mbGV4XCIsXCJ0aWxkZVwiLFwibWFjcm9uXCIsXCJicmV2ZVwiLFwiZG90YWNjZW50XCIsXCJyaW5nXCIsXCJjZWRpbGxhXCIsXCJodW5nYXJ1bWxhdXRcIixcIm9nb25la1wiLFwiY2Fyb25cIixcIkxzbGFzaFwiLFwibHNsYXNoXCIsXCJTY2Fyb25cIixcInNjYXJvblwiLFwiWmNhcm9uXCIsXCJ6Y2Fyb25cIixcImJyb2tlbmJhclwiLFwiRXRoXCIsXCJldGhcIixcIllhY3V0ZVwiLFwieWFjdXRlXCIsXCJUaG9yblwiLFwidGhvcm5cIixcIm1pbnVzXCIsXCJtdWx0aXBseVwiLFwib25lc3VwZXJpb3JcIixcInR3b3N1cGVyaW9yXCIsXCJ0aHJlZXN1cGVyaW9yXCIsXCJvbmVoYWxmXCIsXCJvbmVxdWFydGVyXCIsXCJ0aHJlZXF1YXJ0ZXJzXCIsXCJmcmFuY1wiLFwiR2JyZXZlXCIsXCJnYnJldmVcIixcIklkb3RhY2NlbnRcIixcIlNjZWRpbGxhXCIsXCJzY2VkaWxsYVwiLFwiQ2FjdXRlXCIsXCJjYWN1dGVcIixcIkNjYXJvblwiLFwiY2Nhcm9uXCIsXCJkY3JvYXRcIl07WC5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXt2YXIgYj1hLmNvZGVQb2ludEF0KDApLGM9dGhpcy5mb250LmdseXBocztpZihjKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCs9MSlmb3IodmFyIGU9Yy5nZXQoZCksZj0wO2Y8ZS51bmljb2Rlcy5sZW5ndGg7Zis9MSlpZihlLnVuaWNvZGVzW2ZdPT09YilyZXR1cm4gZDtyZXR1cm4gbnVsbH0sWS5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jbWFwLmdseXBoSW5kZXhNYXBbYS5jb2RlUG9pbnRBdCgwKV18fDB9LFoucHJvdG90eXBlLmNoYXJUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7dmFyIGI9YS5jb2RlUG9pbnRBdCgwKSxjPXRoaXMuZW5jb2RpbmdbYl07cmV0dXJuIHRoaXMuY2hhcnNldC5pbmRleE9mKGMpfSwkLnByb3RvdHlwZS5uYW1lVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5hbWVzLmluZGV4T2YoYSl9LCQucHJvdG90eXBlLmdseXBoSW5kZXhUb05hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubmFtZXNbYV19O3ZhciBSZT17bGluZTphYX07Y2EucHJvdG90eXBlLmJpbmRDb25zdHJ1Y3RvclZhbHVlcz1mdW5jdGlvbihhKXt0aGlzLmluZGV4PWEuaW5kZXh8fDAsdGhpcy5uYW1lPWEubmFtZXx8bnVsbCx0aGlzLnVuaWNvZGU9YS51bmljb2RlfHx2b2lkIDAsdGhpcy51bmljb2Rlcz1hLnVuaWNvZGVzfHx2b2lkIDAhPT1hLnVuaWNvZGU/W2EudW5pY29kZV06W10sYS54TWluJiYodGhpcy54TWluPWEueE1pbiksYS55TWluJiYodGhpcy55TWluPWEueU1pbiksYS54TWF4JiYodGhpcy54TWF4PWEueE1heCksYS55TWF4JiYodGhpcy55TWF4PWEueU1heCksYS5hZHZhbmNlV2lkdGgmJih0aGlzLmFkdmFuY2VXaWR0aD1hLmFkdmFuY2VXaWR0aCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwYXRoXCIsYmEodGhpcyxhLnBhdGgpKX0sY2EucHJvdG90eXBlLmFkZFVuaWNvZGU9ZnVuY3Rpb24oYSl7MD09PXRoaXMudW5pY29kZXMubGVuZ3RoJiYodGhpcy51bmljb2RlPWEpLHRoaXMudW5pY29kZXMucHVzaChhKX0sY2EucHJvdG90eXBlLmdldEJvdW5kaW5nQm94PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aC5nZXRCb3VuZGluZ0JveCgpfSxjYS5wcm90b3R5cGUuZ2V0UGF0aD1mdW5jdGlvbihhLGIsYyxkLGUpe2E9dm9pZCAwIT09YT9hOjAsYj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/Yzo3Mjt2YXIgZixnO2R8fChkPXt9KTt2YXIgaD1kLnhTY2FsZSxpPWQueVNjYWxlO2lmKGQuaGludGluZyYmZSYmZS5oaW50aW5nJiYoZz10aGlzLnBhdGgmJmUuaGludGluZy5leGVjKHRoaXMsYykpLGcpZj1lLmhpbnRpbmcuZ2V0Q29tbWFuZHMoZyksYT1NYXRoLnJvdW5kKGEpLGI9TWF0aC5yb3VuZChiKSxoPWk9MTtlbHNle2Y9dGhpcy5wYXRoLmNvbW1hbmRzO3ZhciBqPTEvdGhpcy5wYXRoLnVuaXRzUGVyRW0qYzt2b2lkIDA9PT1oJiYoaD1qKSx2b2lkIDA9PT1pJiYoaT1qKX1mb3IodmFyIGs9bmV3IHIsbD0wO2w8Zi5sZW5ndGg7bCs9MSl7dmFyIG09ZltsXTtcIk1cIj09PW0udHlwZT9rLm1vdmVUbyhhK20ueCpoLGIrLW0ueSppKTpcIkxcIj09PW0udHlwZT9rLmxpbmVUbyhhK20ueCpoLGIrLW0ueSppKTpcIlFcIj09PW0udHlwZT9rLnF1YWRyYXRpY0N1cnZlVG8oYSttLngxKmgsYistbS55MSppLGErbS54KmgsYistbS55KmkpOlwiQ1wiPT09bS50eXBlP2suY3VydmVUbyhhK20ueDEqaCxiKy1tLnkxKmksYSttLngyKmgsYistbS55MippLGErbS54KmgsYistbS55KmkpOlwiWlwiPT09bS50eXBlJiZrLmNsb3NlUGF0aCgpfXJldHVybiBrfSxjYS5wcm90b3R5cGUuZ2V0Q29udG91cnM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2lmKHZvaWQgMD09PXRoaXMucG9pbnRzKXJldHVybltdO2Zvcih2YXIgYj1bXSxjPVtdLGQ9MDtkPHRoaXMucG9pbnRzLmxlbmd0aDtkKz0xKXt2YXIgZT1hLnBvaW50c1tkXTtjLnB1c2goZSksZS5sYXN0UG9pbnRPZkNvbnRvdXImJihiLnB1c2goYyksYz1bXSl9cmV0dXJuIHhlLmFyZ3VtZW50KDA9PT1jLmxlbmd0aCxcIlRoZXJlIGFyZSBzdGlsbCBwb2ludHMgbGVmdCBpbiB0aGUgY3VycmVudCBjb250b3VyLlwiKSxifSxjYS5wcm90b3R5cGUuZ2V0TWV0cmljcz1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnBhdGguY29tbWFuZHMsYj1bXSxjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF07XCJaXCIhPT1lLnR5cGUmJihiLnB1c2goZS54KSxjLnB1c2goZS55KSksXCJRXCIhPT1lLnR5cGUmJlwiQ1wiIT09ZS50eXBlfHwoYi5wdXNoKGUueDEpLGMucHVzaChlLnkxKSksXCJDXCI9PT1lLnR5cGUmJihiLnB1c2goZS54MiksYy5wdXNoKGUueTIpKX12YXIgZj17eE1pbjpNYXRoLm1pbi5hcHBseShudWxsLGIpLHlNaW46TWF0aC5taW4uYXBwbHkobnVsbCxjKSx4TWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsYikseU1heDpNYXRoLm1heC5hcHBseShudWxsLGMpLGxlZnRTaWRlQmVhcmluZzp0aGlzLmxlZnRTaWRlQmVhcmluZ307cmV0dXJuIGlzRmluaXRlKGYueE1pbil8fChmLnhNaW49MCksaXNGaW5pdGUoZi54TWF4KXx8KGYueE1heD10aGlzLmFkdmFuY2VXaWR0aCksaXNGaW5pdGUoZi55TWluKXx8KGYueU1pbj0wKSxpc0Zpbml0ZShmLnlNYXgpfHwoZi55TWF4PTApLGYucmlnaHRTaWRlQmVhcmluZz10aGlzLmFkdmFuY2VXaWR0aC1mLmxlZnRTaWRlQmVhcmluZy0oZi54TWF4LWYueE1pbiksZn0sY2EucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oYSxiLGMsZCxlKXt0aGlzLmdldFBhdGgoYixjLGQsZSkuZHJhdyhhKX0sY2EucHJvdG90eXBlLmRyYXdQb2ludHM9ZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZShiLGMsZCxlKXt2YXIgZj0yKk1hdGguUEk7YS5iZWdpblBhdGgoKTtmb3IodmFyIGc9MDtnPGIubGVuZ3RoO2crPTEpYS5tb3ZlVG8oYytiW2ddLngqZSxkK2JbZ10ueSplKSxhLmFyYyhjK2JbZ10ueCplLGQrYltnXS55KmUsMiwwLGYsITEpO2EuY2xvc2VQYXRoKCksYS5maWxsKCl9Yj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/YzowLGQ9dm9pZCAwIT09ZD9kOjI0O2Zvcih2YXIgZj0xL3RoaXMucGF0aC51bml0c1BlckVtKmQsZz1bXSxoPVtdLGk9dGhpcy5wYXRoLGo9MDtqPGkuY29tbWFuZHMubGVuZ3RoO2orPTEpe3ZhciBrPWkuY29tbWFuZHNbal07dm9pZCAwIT09ay54JiZnLnB1c2goe3g6ay54LHk6LWsueX0pLHZvaWQgMCE9PWsueDEmJmgucHVzaCh7eDprLngxLHk6LWsueTF9KSx2b2lkIDAhPT1rLngyJiZoLnB1c2goe3g6ay54Mix5Oi1rLnkyfSl9YS5maWxsU3R5bGU9XCJibHVlXCIsZShnLGIsYyxmKSxhLmZpbGxTdHlsZT1cInJlZFwiLGUoaCxiLGMsZil9LGNhLnByb3RvdHlwZS5kcmF3TWV0cmljcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZTtiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD12b2lkIDAhPT1kP2Q6MjQsZT0xL3RoaXMucGF0aC51bml0c1BlckVtKmQsYS5saW5lV2lkdGg9MSxhLnN0cm9rZVN0eWxlPVwiYmxhY2tcIixSZS5saW5lKGEsYiwtMWU0LGIsMWU0KSxSZS5saW5lKGEsLTFlNCxjLDFlNCxjKTt2YXIgZj10aGlzLnhNaW58fDAsZz10aGlzLnlNaW58fDAsaD10aGlzLnhNYXh8fDAsaT10aGlzLnlNYXh8fDAsaj10aGlzLmFkdmFuY2VXaWR0aHx8MDthLnN0cm9rZVN0eWxlPVwiYmx1ZVwiLFJlLmxpbmUoYSxiK2YqZSwtMWU0LGIrZiplLDFlNCksUmUubGluZShhLGIraCplLC0xZTQsYitoKmUsMWU0KSxSZS5saW5lKGEsLTFlNCxjKy1nKmUsMWU0LGMrLWcqZSksUmUubGluZShhLC0xZTQsYystaSplLDFlNCxjKy1pKmUpLGEuc3Ryb2tlU3R5bGU9XCJncmVlblwiLFJlLmxpbmUoYSxiK2oqZSwtMWU0LGIraiplLDFlNCl9LGVhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5nbHlwaHNbYV0mJih0aGlzLmdseXBoc1thXT10aGlzLmdseXBoc1thXSgpKSx0aGlzLmdseXBoc1thXX0sZWEucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oYSxiKXt0aGlzLmdseXBoc1thXT1iLHRoaXMubGVuZ3RoKyt9O3ZhciBTZT17R2x5cGhTZXQ6ZWEsZ2x5cGhMb2FkZXI6ZmEsdHRmR2x5cGhMb2FkZXI6Z2EsY2ZmR2x5cGhMb2FkZXI6aGF9LFRlPVt7bmFtZTpcInZlcnNpb25cIixvcDowLHR5cGU6XCJTSURcIn0se25hbWU6XCJub3RpY2VcIixvcDoxLHR5cGU6XCJTSURcIn0se25hbWU6XCJjb3B5cmlnaHRcIixvcDoxMjAwLHR5cGU6XCJTSURcIn0se25hbWU6XCJmdWxsTmFtZVwiLG9wOjIsdHlwZTpcIlNJRFwifSx7bmFtZTpcImZhbWlseU5hbWVcIixvcDozLHR5cGU6XCJTSURcIn0se25hbWU6XCJ3ZWlnaHRcIixvcDo0LHR5cGU6XCJTSURcIn0se25hbWU6XCJpc0ZpeGVkUGl0Y2hcIixvcDoxMjAxLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcIml0YWxpY0FuZ2xlXCIsb3A6MTIwMix0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJ1bmRlcmxpbmVQb3NpdGlvblwiLG9wOjEyMDMsdHlwZTpcIm51bWJlclwiLHZhbHVlOi0xMDB9LHtuYW1lOlwidW5kZXJsaW5lVGhpY2tuZXNzXCIsb3A6MTIwNCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6NTB9LHtuYW1lOlwicGFpbnRUeXBlXCIsb3A6MTIwNSx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJjaGFyc3RyaW5nVHlwZVwiLG9wOjEyMDYsdHlwZTpcIm51bWJlclwiLHZhbHVlOjJ9LHtuYW1lOlwiZm9udE1hdHJpeFwiLG9wOjEyMDcsdHlwZTpbXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCJdLHZhbHVlOlsuMDAxLDAsMCwuMDAxLDAsMF19LHtuYW1lOlwidW5pcXVlSWRcIixvcDoxMyx0eXBlOlwibnVtYmVyXCJ9LHtuYW1lOlwiZm9udEJCb3hcIixvcDo1LHR5cGU6W1wibnVtYmVyXCIsXCJudW1iZXJcIixcIm51bWJlclwiLFwibnVtYmVyXCJdLHZhbHVlOlswLDAsMCwwXX0se25hbWU6XCJzdHJva2VXaWR0aFwiLG9wOjEyMDgsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwieHVpZFwiLG9wOjE0LHR5cGU6W10sdmFsdWU6bnVsbH0se25hbWU6XCJjaGFyc2V0XCIsb3A6MTUsdHlwZTpcIm9mZnNldFwiLHZhbHVlOjB9LHtuYW1lOlwiZW5jb2RpbmdcIixvcDoxNix0eXBlOlwib2Zmc2V0XCIsdmFsdWU6MH0se25hbWU6XCJjaGFyU3RyaW5nc1wiLG9wOjE3LHR5cGU6XCJvZmZzZXRcIix2YWx1ZTowfSx7bmFtZTpcInByaXZhdGVcIixvcDoxOCx0eXBlOltcIm51bWJlclwiLFwib2Zmc2V0XCJdLHZhbHVlOlswLDBdfSx7bmFtZTpcInJvc1wiLG9wOjEyMzAsdHlwZTpbXCJTSURcIixcIlNJRFwiLFwibnVtYmVyXCJdfSx7bmFtZTpcImNpZEZvbnRWZXJzaW9uXCIsb3A6MTIzMSx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJjaWRGb250UmV2aXNpb25cIixvcDoxMjMyLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNpZEZvbnRUeXBlXCIsb3A6MTIzMyx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJjaWRDb3VudFwiLG9wOjEyMzQsdHlwZTpcIm51bWJlclwiLHZhbHVlOjg3MjB9LHtuYW1lOlwidWlkQmFzZVwiLG9wOjEyMzUsdHlwZTpcIm51bWJlclwifSx7bmFtZTpcImZkQXJyYXlcIixvcDoxMjM2LHR5cGU6XCJvZmZzZXRcIn0se25hbWU6XCJmZFNlbGVjdFwiLG9wOjEyMzcsdHlwZTpcIm9mZnNldFwifSx7bmFtZTpcImZvbnROYW1lXCIsb3A6MTIzOCx0eXBlOlwiU0lEXCJ9XSxVZT1be25hbWU6XCJzdWJyc1wiLG9wOjE5LHR5cGU6XCJvZmZzZXRcIix2YWx1ZTowfSx7bmFtZTpcImRlZmF1bHRXaWR0aFhcIixvcDoyMCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJub21pbmFsV2lkdGhYXCIsb3A6MjEsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9XSxWZT17cGFyc2U6emEsbWFrZTpNYX0sV2U9e3BhcnNlOk5hLG1ha2U6T2F9LFhlPXtwYXJzZTpQYSxtYWtlOlFhfSxZZT17cGFyc2U6UmEsbWFrZTpTYX0sWmU9e21ha2U6VGEscGFyc2U6VWF9LCRlPXtwYXJzZTpWYSxtYWtlOldhfSxfZT1bXCJjb3B5cmlnaHRcIixcImZvbnRGYW1pbHlcIixcImZvbnRTdWJmYW1pbHlcIixcInVuaXF1ZUlEXCIsXCJmdWxsTmFtZVwiLFwidmVyc2lvblwiLFwicG9zdFNjcmlwdE5hbWVcIixcInRyYWRlbWFya1wiLFwibWFudWZhY3R1cmVyXCIsXCJkZXNpZ25lclwiLFwiZGVzY3JpcHRpb25cIixcIm1hbnVmYWN0dXJlclVSTFwiLFwiZGVzaWduZXJVUkxcIixcImxpY2Vuc2VcIixcImxpY2Vuc2VVUkxcIixcInJlc2VydmVkXCIsXCJwcmVmZXJyZWRGYW1pbHlcIixcInByZWZlcnJlZFN1YmZhbWlseVwiLFwiY29tcGF0aWJsZUZ1bGxOYW1lXCIsXCJzYW1wbGVUZXh0XCIsXCJwb3N0U2NyaXB0RmluZEZvbnROYW1lXCIsXCJ3d3NGYW1pbHlcIixcInd3c1N1YmZhbWlseVwiXSxhZj17MDpcImVuXCIsMTpcImZyXCIsMjpcImRlXCIsMzpcIml0XCIsNDpcIm5sXCIsNTpcInN2XCIsNjpcImVzXCIsNzpcImRhXCIsODpcInB0XCIsOTpcIm5vXCIsMTA6XCJoZVwiLDExOlwiamFcIiwxMjpcImFyXCIsMTM6XCJmaVwiLDE0OlwiZWxcIiwxNTpcImlzXCIsMTY6XCJtdFwiLDE3OlwidHJcIiwxODpcImhyXCIsMTk6XCJ6aC1IYW50XCIsMjA6XCJ1clwiLDIxOlwiaGlcIiwyMjpcInRoXCIsMjM6XCJrb1wiLDI0OlwibHRcIiwyNTpcInBsXCIsMjY6XCJodVwiLDI3OlwiZXNcIiwyODpcImx2XCIsMjk6XCJzZVwiLDMwOlwiZm9cIiwzMTpcImZhXCIsMzI6XCJydVwiLDMzOlwiemhcIiwzNDpcIm5sLUJFXCIsMzU6XCJnYVwiLDM2Olwic3FcIiwzNzpcInJvXCIsMzg6XCJjelwiLDM5Olwic2tcIiw0MDpcInNpXCIsNDE6XCJ5aVwiLDQyOlwic3JcIiw0MzpcIm1rXCIsNDQ6XCJiZ1wiLDQ1OlwidWtcIiw0NjpcImJlXCIsNDc6XCJ1elwiLDQ4Olwia2tcIiw0OTpcImF6LUN5cmxcIiw1MDpcImF6LUFyYWJcIiw1MTpcImh5XCIsNTI6XCJrYVwiLDUzOlwibW9cIiw1NDpcImt5XCIsNTU6XCJ0Z1wiLDU2OlwidGtcIiw1NzpcIm1uLUNOXCIsNTg6XCJtblwiLDU5OlwicHNcIiw2MDpcImtzXCIsNjE6XCJrdVwiLDYyOlwic2RcIiw2MzpcImJvXCIsNjQ6XCJuZVwiLDY1Olwic2FcIiw2NjpcIm1yXCIsNjc6XCJiblwiLDY4OlwiYXNcIiw2OTpcImd1XCIsNzA6XCJwYVwiLDcxOlwib3JcIiw3MjpcIm1sXCIsNzM6XCJrblwiLDc0OlwidGFcIiw3NTpcInRlXCIsNzY6XCJzaVwiLDc3OlwibXlcIiw3ODpcImttXCIsNzk6XCJsb1wiLDgwOlwidmlcIiw4MTpcImlkXCIsODI6XCJ0bFwiLDgzOlwibXNcIiw4NDpcIm1zLUFyYWJcIiw4NTpcImFtXCIsODY6XCJ0aVwiLDg3Olwib21cIiw4ODpcInNvXCIsODk6XCJzd1wiLDkwOlwicndcIiw5MTpcInJuXCIsOTI6XCJueVwiLDkzOlwibWdcIiw5NDpcImVvXCIsMTI4OlwiY3lcIiwxMjk6XCJldVwiLDEzMDpcImNhXCIsMTMxOlwibGFcIiwxMzI6XCJxdVwiLDEzMzpcImduXCIsMTM0OlwiYXlcIiwxMzU6XCJ0dFwiLDEzNjpcInVnXCIsMTM3OlwiZHpcIiwxMzg6XCJqdlwiLDEzOTpcInN1XCIsMTQwOlwiZ2xcIiwxNDE6XCJhZlwiLDE0MjpcImJyXCIsMTQzOlwiaXVcIiwxNDQ6XCJnZFwiLDE0NTpcImd2XCIsMTQ2OlwiZ2FcIiwxNDc6XCJ0b1wiLDE0ODpcImVsLXBvbHl0b25cIiwxNDk6XCJrbFwiLDE1MDpcImF6XCIsMTUxOlwibm5cIn0sYmY9ezA6MCwxOjAsMjowLDM6MCw0OjAsNTowLDY6MCw3OjAsODowLDk6MCwxMDo1LDExOjEsMTI6NCwxMzowLDE0OjYsMTU6MCwxNjowLDE3OjAsMTg6MCwxOToyLDIwOjQsXG4yMTo5LDIyOjIxLDIzOjMsMjQ6MjksMjU6MjksMjY6MjksMjc6MjksMjg6MjksMjk6MCwzMDowLDMxOjQsMzI6NywzMzoyNSwzNDowLDM1OjAsMzY6MCwzNzowLDM4OjI5LDM5OjI5LDQwOjAsNDE6NSw0Mjo3LDQzOjcsNDQ6Nyw0NTo3LDQ2OjcsNDc6Nyw0ODo3LDQ5OjcsNTA6NCw1MToyNCw1MjoyMyw1Mzo3LDU0OjcsNTU6Nyw1Njo3LDU3OjI3LDU4OjcsNTk6NCw2MDo0LDYxOjQsNjI6NCw2MzoyNiw2NDo5LDY1OjksNjY6OSw2NzoxMyw2ODoxMyw2OToxMSw3MDoxMCw3MToxMiw3MjoxNyw3MzoxNiw3NDoxNCw3NToxNSw3NjoxOCw3NzoxOSw3ODoyMCw3OToyMiw4MDozMCw4MTowLDgyOjAsODM6MCw4NDo0LDg1OjI4LDg2OjI4LDg3OjI4LDg4OjAsODk6MCw5MDowLDkxOjAsOTI6MCw5MzowLDk0OjAsMTI4OjAsMTI5OjAsMTMwOjAsMTMxOjAsMTMyOjAsMTMzOjAsMTM0OjAsMTM1OjcsMTM2OjQsMTM3OjI2LDEzODowLDEzOTowLDE0MDowLDE0MTowLDE0MjowLDE0MzoyOCwxNDQ6MCwxNDU6MCwxNDY6MCwxNDc6MCwxNDg6NiwxNDk6MCwxNTA6MCwxNTE6MH0sY2Y9ezEwNzg6XCJhZlwiLDEwNTI6XCJzcVwiLDExNTY6XCJnc3dcIiwxMTE4OlwiYW1cIiw1MTIxOlwiYXItRFpcIiwxNTM2MTpcImFyLUJIXCIsMzA3MzpcImFyXCIsMjA0OTpcImFyLUlRXCIsMTEyNjU6XCJhci1KT1wiLDEzMzEzOlwiYXItS1dcIiwxMjI4OTpcImFyLUxCXCIsNDA5NzpcImFyLUxZXCIsNjE0NTpcImFyeVwiLDgxOTM6XCJhci1PTVwiLDE2Mzg1OlwiYXItUUFcIiwxMDI1OlwiYXItU0FcIiwxMDI0MTpcImFyLVNZXCIsNzE2OTpcImFlYlwiLDE0MzM3OlwiYXItQUVcIiw5MjE3OlwiYXItWUVcIiwxMDY3OlwiaHlcIiwxMTAxOlwiYXNcIiwyMDkyOlwiYXotQ3lybFwiLDEwNjg6XCJhelwiLDExMzM6XCJiYVwiLDEwNjk6XCJldVwiLDEwNTk6XCJiZVwiLDIxMTc6XCJiblwiLDEwOTM6XCJibi1JTlwiLDgyMTg6XCJicy1DeXJsXCIsNTE0NjpcImJzXCIsMTE1MDpcImJyXCIsMTAyNjpcImJnXCIsMTAyNzpcImNhXCIsMzA3NjpcInpoLUhLXCIsNTEyNDpcInpoLU1PXCIsMjA1MjpcInpoXCIsNDEwMDpcInpoLVNHXCIsMTAyODpcInpoLVRXXCIsMTE1NTpcImNvXCIsMTA1MDpcImhyXCIsNDEyMjpcImhyLUJBXCIsMTAyOTpcImNzXCIsMTAzMDpcImRhXCIsMTE2NDpcInByc1wiLDExMjU6XCJkdlwiLDIwNjc6XCJubC1CRVwiLDEwNDM6XCJubFwiLDMwODE6XCJlbi1BVVwiLDEwMjQ5OlwiZW4tQlpcIiw0MTA1OlwiZW4tQ0FcIiw5MjI1OlwiZW4tMDI5XCIsMTYzOTM6XCJlbi1JTlwiLDYxNTM6XCJlbi1JRVwiLDgyMDE6XCJlbi1KTVwiLDE3NDE3OlwiZW4tTVlcIiw1MTI5OlwiZW4tTlpcIiwxMzMyMTpcImVuLVBIXCIsMTg0NDE6XCJlbi1TR1wiLDcxNzc6XCJlbi1aQVwiLDExMjczOlwiZW4tVFRcIiwyMDU3OlwiZW4tR0JcIiwxMDMzOlwiZW5cIiwxMjI5NzpcImVuLVpXXCIsMTA2MTpcImV0XCIsMTA4MDpcImZvXCIsMTEyNDpcImZpbFwiLDEwMzU6XCJmaVwiLDIwNjA6XCJmci1CRVwiLDMwODQ6XCJmci1DQVwiLDEwMzY6XCJmclwiLDUxMzI6XCJmci1MVVwiLDYxNTY6XCJmci1NQ1wiLDQxMDg6XCJmci1DSFwiLDExMjI6XCJmeVwiLDExMTA6XCJnbFwiLDEwNzk6XCJrYVwiLDMwNzk6XCJkZS1BVFwiLDEwMzE6XCJkZVwiLDUxMjc6XCJkZS1MSVwiLDQxMDM6XCJkZS1MVVwiLDIwNTU6XCJkZS1DSFwiLDEwMzI6XCJlbFwiLDExMzU6XCJrbFwiLDEwOTU6XCJndVwiLDExMjg6XCJoYVwiLDEwMzc6XCJoZVwiLDEwODE6XCJoaVwiLDEwMzg6XCJodVwiLDEwMzk6XCJpc1wiLDExMzY6XCJpZ1wiLDEwNTc6XCJpZFwiLDExMTc6XCJpdVwiLDIxNDE6XCJpdS1MYXRuXCIsMjEwODpcImdhXCIsMTA3NjpcInhoXCIsMTA3NzpcInp1XCIsMTA0MDpcIml0XCIsMjA2NDpcIml0LUNIXCIsMTA0MTpcImphXCIsMTA5OTpcImtuXCIsMTA4NzpcImtrXCIsMTEwNzpcImttXCIsMTE1ODpcInF1Y1wiLDExNTk6XCJyd1wiLDEwODk6XCJzd1wiLDExMTE6XCJrb2tcIiwxMDQyOlwia29cIiwxMDg4Olwia3lcIiwxMTA4OlwibG9cIiwxMDYyOlwibHZcIiwxMDYzOlwibHRcIiwyMDk0OlwiZHNiXCIsMTEzNDpcImxiXCIsMTA3MTpcIm1rXCIsMjExMDpcIm1zLUJOXCIsMTA4NjpcIm1zXCIsMTEwMDpcIm1sXCIsMTA4MjpcIm10XCIsMTE1MzpcIm1pXCIsMTE0NjpcImFyblwiLDExMDI6XCJtclwiLDExNDg6XCJtb2hcIiwxMTA0OlwibW5cIiwyMTI4OlwibW4tQ05cIiwxMTIxOlwibmVcIiwxMDQ0OlwibmJcIiwyMDY4Olwibm5cIiwxMTU0Olwib2NcIiwxMDk2Olwib3JcIiwxMTIzOlwicHNcIiwxMDQ1OlwicGxcIiwxMDQ2OlwicHRcIiwyMDcwOlwicHQtUFRcIiwxMDk0OlwicGFcIiwxMTMxOlwicXUtQk9cIiwyMTU1OlwicXUtRUNcIiwzMTc5OlwicXVcIiwxMDQ4Olwicm9cIiwxMDQ3Olwicm1cIiwxMDQ5OlwicnVcIiw5Mjc1Olwic21uXCIsNDE1NTpcInNtai1OT1wiLDUxNzk6XCJzbWpcIiwzMTMxOlwic2UtRklcIiwxMDgzOlwic2VcIiwyMTA3Olwic2UtU0VcIiw4MjUxOlwic21zXCIsNjIwMzpcInNtYS1OT1wiLDcyMjc6XCJzbXNcIiwxMTAzOlwic2FcIiw3MTk0Olwic3ItQ3lybC1CQVwiLDMwOTg6XCJzclwiLDYxNzA6XCJzci1MYXRuLUJBXCIsMjA3NDpcInNyLUxhdG5cIiwxMTMyOlwibnNvXCIsMTA3NDpcInRuXCIsMTExNTpcInNpXCIsMTA1MTpcInNrXCIsMTA2MDpcInNsXCIsMTEyNzQ6XCJlcy1BUlwiLDE2Mzk0OlwiZXMtQk9cIiwxMzMyMjpcImVzLUNMXCIsOTIyNjpcImVzLUNPXCIsNTEzMDpcImVzLUNSXCIsNzE3ODpcImVzLURPXCIsMTIyOTg6XCJlcy1FQ1wiLDE3NDE4OlwiZXMtU1ZcIiw0MTA2OlwiZXMtR1RcIiwxODQ0MjpcImVzLUhOXCIsMjA1ODpcImVzLU1YXCIsMTk0NjY6XCJlcy1OSVwiLDYxNTQ6XCJlcy1QQVwiLDE1MzcwOlwiZXMtUFlcIiwxMDI1MDpcImVzLVBFXCIsMjA0OTA6XCJlcy1QUlwiLDMwODI6XCJlc1wiLDEwMzQ6XCJlc1wiLDIxNTE0OlwiZXMtVVNcIiwxNDM0NjpcImVzLVVZXCIsODIwMjpcImVzLVZFXCIsMjA3NzpcInN2LUZJXCIsMTA1MzpcInN2XCIsMTExNDpcInN5clwiLDEwNjQ6XCJ0Z1wiLDIxNDM6XCJ0em1cIiwxMDk3OlwidGFcIiwxMDkyOlwidHRcIiwxMDk4OlwidGVcIiwxMDU0OlwidGhcIiwxMTA1OlwiYm9cIiwxMDU1OlwidHJcIiwxMDkwOlwidGtcIiwxMTUyOlwidWdcIiwxMDU4OlwidWtcIiwxMDcwOlwiaHNiXCIsMTA1NjpcInVyXCIsMjExNTpcInV6LUN5cmxcIiwxMDkxOlwidXpcIiwxMDY2OlwidmlcIiwxMTA2OlwiY3lcIiwxMTYwOlwid29cIiwxMTU3Olwic2FoXCIsMTE0NDpcImlpXCIsMTEzMDpcInlvXCJ9LGRmPVwidXRmLTE2XCIsZWY9ezA6XCJtYWNpbnRvc2hcIiwxOlwieC1tYWMtamFwYW5lc2VcIiwyOlwieC1tYWMtY2hpbmVzZXRyYWRcIiwzOlwieC1tYWMta29yZWFuXCIsNjpcIngtbWFjLWdyZWVrXCIsNzpcIngtbWFjLWN5cmlsbGljXCIsOTpcIngtbWFjLWRldmFuYWdhaVwiLDEwOlwieC1tYWMtZ3VybXVraGlcIiwxMTpcIngtbWFjLWd1amFyYXRpXCIsMTI6XCJ4LW1hYy1vcml5YVwiLDEzOlwieC1tYWMtYmVuZ2FsaVwiLDE0OlwieC1tYWMtdGFtaWxcIiwxNTpcIngtbWFjLXRlbHVndVwiLDE2OlwieC1tYWMta2FubmFkYVwiLDE3OlwieC1tYWMtbWFsYXlhbGFtXCIsMTg6XCJ4LW1hYy1zaW5oYWxlc2VcIiwxOTpcIngtbWFjLWJ1cm1lc2VcIiwyMDpcIngtbWFjLWtobWVyXCIsMjE6XCJ4LW1hYy10aGFpXCIsMjI6XCJ4LW1hYy1sYW9cIiwyMzpcIngtbWFjLWdlb3JnaWFuXCIsMjQ6XCJ4LW1hYy1hcm1lbmlhblwiLDI1OlwieC1tYWMtY2hpbmVzZXNpbXBcIiwyNjpcIngtbWFjLXRpYmV0YW5cIiwyNzpcIngtbWFjLW1vbmdvbGlhblwiLDI4OlwieC1tYWMtZXRoaW9waWNcIiwyOTpcIngtbWFjLWNlXCIsMzA6XCJ4LW1hYy12aWV0bmFtZXNlXCIsMzE6XCJ4LW1hYy1leHRhcmFiaWNcIn0sZmY9ezE1OlwieC1tYWMtaWNlbGFuZGljXCIsMTc6XCJ4LW1hYy10dXJraXNoXCIsMTg6XCJ4LW1hYy1jcm9hdGlhblwiLDI0OlwieC1tYWMtY2VcIiwyNTpcIngtbWFjLWNlXCIsMjY6XCJ4LW1hYy1jZVwiLDI3OlwieC1tYWMtY2VcIiwyODpcIngtbWFjLWNlXCIsMzA6XCJ4LW1hYy1pY2VsYW5kaWNcIiwzNzpcIngtbWFjLXJvbWFuaWFuXCIsMzg6XCJ4LW1hYy1jZVwiLDM5OlwieC1tYWMtY2VcIiw0MDpcIngtbWFjLWNlXCIsMTQzOlwieC1tYWMtaW51aXRcIiwxNDY6XCJ4LW1hYy1nYWVsaWNcIn0sZ2Y9e3BhcnNlOlphLG1ha2U6Y2J9LGhmPVt7YmVnaW46MCxlbmQ6MTI3fSx7YmVnaW46MTI4LGVuZDoyNTV9LHtiZWdpbjoyNTYsZW5kOjM4M30se2JlZ2luOjM4NCxlbmQ6NTkxfSx7YmVnaW46NTkyLGVuZDo2ODd9LHtiZWdpbjo2ODgsZW5kOjc2N30se2JlZ2luOjc2OCxlbmQ6ODc5fSx7YmVnaW46ODgwLGVuZDoxMDIzfSx7YmVnaW46MTEzOTIsZW5kOjExNTE5fSx7YmVnaW46MTAyNCxlbmQ6MTI3OX0se2JlZ2luOjEzMjgsZW5kOjE0MjN9LHtiZWdpbjoxNDI0LGVuZDoxNTM1fSx7YmVnaW46NDIyNDAsZW5kOjQyNTU5fSx7YmVnaW46MTUzNixlbmQ6MTc5MX0se2JlZ2luOjE5ODQsZW5kOjIwNDd9LHtiZWdpbjoyMzA0LGVuZDoyNDMxfSx7YmVnaW46MjQzMixlbmQ6MjU1OX0se2JlZ2luOjI1NjAsZW5kOjI2ODd9LHtiZWdpbjoyNjg4LGVuZDoyODE1fSx7YmVnaW46MjgxNixlbmQ6Mjk0M30se2JlZ2luOjI5NDQsZW5kOjMwNzF9LHtiZWdpbjozMDcyLGVuZDozMTk5fSx7YmVnaW46MzIwMCxlbmQ6MzMyN30se2JlZ2luOjMzMjgsZW5kOjM0NTV9LHtiZWdpbjozNTg0LGVuZDozNzExfSx7YmVnaW46MzcxMixlbmQ6MzgzOX0se2JlZ2luOjQyNTYsZW5kOjQzNTF9LHtiZWdpbjo2OTEyLGVuZDo3MDM5fSx7YmVnaW46NDM1MixlbmQ6NDYwN30se2JlZ2luOjc2ODAsZW5kOjc5MzV9LHtiZWdpbjo3OTM2LGVuZDo4MTkxfSx7YmVnaW46ODE5MixlbmQ6ODMwM30se2JlZ2luOjgzMDQsZW5kOjgzNTF9LHtiZWdpbjo4MzUyLGVuZDo4Mzk5fSx7YmVnaW46ODQwMCxlbmQ6ODQ0N30se2JlZ2luOjg0NDgsZW5kOjg1Mjd9LHtiZWdpbjo4NTI4LGVuZDo4NTkxfSx7YmVnaW46ODU5MixlbmQ6ODcwM30se2JlZ2luOjg3MDQsZW5kOjg5NTl9LHtiZWdpbjo4OTYwLGVuZDo5MjE1fSx7YmVnaW46OTIxNixlbmQ6OTI3OX0se2JlZ2luOjkyODAsZW5kOjkzMTF9LHtiZWdpbjo5MzEyLGVuZDo5NDcxfSx7YmVnaW46OTQ3MixlbmQ6OTU5OX0se2JlZ2luOjk2MDAsZW5kOjk2MzF9LHtiZWdpbjo5NjMyLGVuZDo5NzI3fSx7YmVnaW46OTcyOCxlbmQ6OTk4M30se2JlZ2luOjk5ODQsZW5kOjEwMTc1fSx7YmVnaW46MTIyODgsZW5kOjEyMzUxfSx7YmVnaW46MTIzNTIsZW5kOjEyNDQ3fSx7YmVnaW46MTI0NDgsZW5kOjEyNTQzfSx7YmVnaW46MTI1NDQsZW5kOjEyNTkxfSx7YmVnaW46MTI1OTIsZW5kOjEyNjg3fSx7YmVnaW46NDMwNzIsZW5kOjQzMTM1fSx7YmVnaW46MTI4MDAsZW5kOjEzMDU1fSx7YmVnaW46MTMwNTYsZW5kOjEzMzExfSx7YmVnaW46NDQwMzIsZW5kOjU1MjE1fSx7YmVnaW46NTUyOTYsZW5kOjU3MzQzfSx7YmVnaW46Njc4NDAsZW5kOjY3ODcxfSx7YmVnaW46MTk5NjgsZW5kOjQwOTU5fSx7YmVnaW46NTczNDQsZW5kOjYzNzQzfSx7YmVnaW46MTI3MzYsZW5kOjEyNzgzfSx7YmVnaW46NjQyNTYsZW5kOjY0MzM1fSx7YmVnaW46NjQzMzYsZW5kOjY1MDIzfSx7YmVnaW46NjUwNTYsZW5kOjY1MDcxfSx7YmVnaW46NjUwNDAsZW5kOjY1MDU1fSx7YmVnaW46NjUxMDQsZW5kOjY1MTM1fSx7YmVnaW46NjUxMzYsZW5kOjY1Mjc5fSx7YmVnaW46NjUyODAsZW5kOjY1NTE5fSx7YmVnaW46NjU1MjAsZW5kOjY1NTM1fSx7YmVnaW46Mzg0MCxlbmQ6NDA5NX0se2JlZ2luOjE3OTIsZW5kOjE4NzF9LHtiZWdpbjoxOTIwLGVuZDoxOTgzfSx7YmVnaW46MzQ1NixlbmQ6MzU4M30se2JlZ2luOjQwOTYsZW5kOjQyNTV9LHtiZWdpbjo0NjA4LGVuZDo0OTkxfSx7YmVnaW46NTAyNCxlbmQ6NTExOX0se2JlZ2luOjUxMjAsZW5kOjU3NTl9LHtiZWdpbjo1NzYwLGVuZDo1NzkxfSx7YmVnaW46NTc5MixlbmQ6NTg4N30se2JlZ2luOjYwMTYsZW5kOjYxNDN9LHtiZWdpbjo2MTQ0LGVuZDo2MzE5fSx7YmVnaW46MTAyNDAsZW5kOjEwNDk1fSx7YmVnaW46NDA5NjAsZW5kOjQyMTI3fSx7YmVnaW46NTg4OCxlbmQ6NTkxOX0se2JlZ2luOjY2MzA0LGVuZDo2NjM1MX0se2JlZ2luOjY2MzUyLGVuZDo2NjM4M30se2JlZ2luOjY2NTYwLGVuZDo2NjYzOX0se2JlZ2luOjExODc4NCxlbmQ6MTE5MDM5fSx7YmVnaW46MTE5ODA4LGVuZDoxMjA4MzF9LHtiZWdpbjoxMDQ0NDgwLGVuZDoxMDQ4NTczfSx7YmVnaW46NjUwMjQsZW5kOjY1MDM5fSx7YmVnaW46OTE3NTA0LGVuZDo5MTc2MzF9LHtiZWdpbjo2NDAwLGVuZDo2NDc5fSx7YmVnaW46NjQ4MCxlbmQ6NjUyN30se2JlZ2luOjY1MjgsZW5kOjY2MjN9LHtiZWdpbjo2NjU2LGVuZDo2Njg3fSx7YmVnaW46MTEyNjQsZW5kOjExMzU5fSx7YmVnaW46MTE1NjgsZW5kOjExNjQ3fSx7YmVnaW46MTk5MDQsZW5kOjE5OTY3fSx7YmVnaW46NDMwMDgsZW5kOjQzMDU1fSx7YmVnaW46NjU1MzYsZW5kOjY1NjYzfSx7YmVnaW46NjU4NTYsZW5kOjY1OTM1fSx7YmVnaW46NjY0MzIsZW5kOjY2NDYzfSx7YmVnaW46NjY0NjQsZW5kOjY2NTI3fSx7YmVnaW46NjY2NDAsZW5kOjY2Njg3fSx7YmVnaW46NjY2ODgsZW5kOjY2NzM1fSx7YmVnaW46Njc1ODQsZW5kOjY3NjQ3fSx7YmVnaW46NjgwOTYsZW5kOjY4MTkxfSx7YmVnaW46MTE5NTUyLGVuZDoxMTk2NDd9LHtiZWdpbjo3MzcyOCxlbmQ6NzQ3NTF9LHtiZWdpbjoxMTk2NDgsZW5kOjExOTY3OX0se2JlZ2luOjcwNDAsZW5kOjcxMDN9LHtiZWdpbjo3MTY4LGVuZDo3MjQ3fSx7YmVnaW46NzI0OCxlbmQ6NzI5NX0se2JlZ2luOjQzMTM2LGVuZDo0MzIzMX0se2JlZ2luOjQzMjY0LGVuZDo0MzMxMX0se2JlZ2luOjQzMzEyLGVuZDo0MzM1OX0se2JlZ2luOjQzNTIwLGVuZDo0MzYxNX0se2JlZ2luOjY1OTM2LGVuZDo2NTk5OX0se2JlZ2luOjY2ZTMsZW5kOjY2MDQ3fSx7YmVnaW46NjYyMDgsZW5kOjY2MjcxfSx7YmVnaW46MTI3MDI0LGVuZDoxMjcxMzV9XSxqZj17cGFyc2U6ZWIsbWFrZTpmYix1bmljb2RlUmFuZ2VzOmhmLGdldFVuaWNvZGVSYW5nZTpkYn0sa2Y9e3BhcnNlOmdiLG1ha2U6aGJ9LGxmPW5ldyBBcnJheSg5KTtsZlsxXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIDE9PT1iP3tzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGRlbHRhR2x5cGhJZDp0aGlzLnBhcnNlVVNob3J0KCl9OjI9PT1iP3tzdWJzdEZvcm1hdDoyLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHN1YnN0aXR1dGU6dGhpcy5wYXJzZU9mZnNldDE2TGlzdCgpfTp2b2lkIHhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IGxvb2t1cCB0eXBlIDEgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKX0sbGZbMl09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBNdWx0aXBsZSBTdWJzdGl0dXRpb24gU3VidGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpLHtzdWJzdEZvcm1hdDphLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHNlcXVlbmNlczp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoKX19LGxmWzNdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgQWx0ZXJuYXRlIFN1YnN0aXR1dGlvbiBTdWJ0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksYWx0ZXJuYXRlU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoKX19LGxmWzRdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgbGlnYXR1cmUgdGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpLHtzdWJzdEZvcm1hdDphLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGxpZ2F0dXJlU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoZnVuY3Rpb24oKXtyZXR1cm57bGlnR2x5cGg6dGhpcy5wYXJzZVVTaG9ydCgpLGNvbXBvbmVudHM6dGhpcy5wYXJzZVVTaG9ydExpc3QodGhpcy5wYXJzZVVTaG9ydCgpLTEpfX0pfX07dmFyIG1mPXtzZXF1ZW5jZUluZGV4OlEudVNob3J0LGxvb2t1cExpc3RJbmRleDpRLnVTaG9ydH07bGZbNV09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO2lmKDE9PT1iKXJldHVybntzdWJzdEZvcm1hdDpiLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHJ1bGVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKSxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm57aW5wdXQ6dGhpcy5wYXJzZVVTaG9ydExpc3QoYS0xKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KGIsbWYpfX0pfTtpZigyPT09YilyZXR1cm57c3Vic3RGb3JtYXQ6Yixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxjbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxjbGFzc1NldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpLGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntjbGFzc2VzOnRoaXMucGFyc2VVU2hvcnRMaXN0KGEtMSksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChiLG1mKX19KX07aWYoMz09PWIpe3ZhciBjPXRoaXMucGFyc2VVU2hvcnQoKSxkPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm57c3Vic3RGb3JtYXQ6Yixjb3ZlcmFnZXM6dGhpcy5wYXJzZUxpc3QoYyxRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QoZCxtZil9fXhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IGxvb2t1cCB0eXBlIDUgZm9ybWF0IG11c3QgYmUgMSwgMiBvciAzLlwiKX0sbGZbNl09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiAxPT09Yj97c3Vic3RGb3JtYXQ6MSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxjaGFpblJ1bGVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3JldHVybntiYWNrdHJhY2s6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxpbnB1dDp0aGlzLnBhcnNlVVNob3J0TGlzdCh0aGlzLnBhcnNlU2hvcnQoKS0xKSxsb29rYWhlYWQ6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KG1mKX19KX06Mj09PWI/e3N1YnN0Rm9ybWF0OjIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksYmFja3RyYWNrQ2xhc3NEZWY6dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksaW5wdXRDbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxsb29rYWhlYWRDbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxjaGFpbkNsYXNzU2V0OnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3JldHVybntiYWNrdHJhY2s6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxpbnB1dDp0aGlzLnBhcnNlVVNob3J0TGlzdCh0aGlzLnBhcnNlU2hvcnQoKS0xKSxsb29rYWhlYWQ6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KG1mKX19KX06Mz09PWI/e3N1YnN0Rm9ybWF0OjMsYmFja3RyYWNrQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxpbnB1dENvdmVyYWdlOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmNvdmVyYWdlKSksbG9va2FoZWFkQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KG1mKX06dm9pZCB4ZS5hc3NlcnQoITEsXCIweFwiK2EudG9TdHJpbmcoMTYpK1wiOiBsb29rdXAgdHlwZSA2IGZvcm1hdCBtdXN0IGJlIDEsIDIgb3IgMy5cIil9LGxmWzddPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3hlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBFeHRlbnNpb24gU3Vic3RpdHV0aW9uIHN1YnRhYmxlIGlkZW50aWZpZXItZm9ybWF0IG11c3QgYmUgMVwiKTt2YXIgYj10aGlzLnBhcnNlVVNob3J0KCksYz1uZXcgUSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5wYXJzZVVMb25nKCkpO3JldHVybntzdWJzdEZvcm1hdDoxLGxvb2t1cFR5cGU6YixleHRlbnNpb246bGZbYl0uY2FsbChjKX19LGxmWzhdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgUmV2ZXJzZSBDaGFpbmluZyBDb250ZXh0dWFsIFNpbmdsZSBTdWJzdGl0dXRpb24gU3VidGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpLHtzdWJzdEZvcm1hdDphLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGJhY2t0cmFja0NvdmVyYWdlOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmNvdmVyYWdlKSksbG9va2FoZWFkQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxzdWJzdGl0dXRlczp0aGlzLnBhcnNlVVNob3J0TGlzdCgpfX07dmFyIG5mPW5ldyBBcnJheSg5KTtuZlsxXT1mdW5jdGlvbihhKXtyZXR1cm4gMT09PWEuc3Vic3RGb3JtYXQ/bmV3IEllLlRhYmxlKFwic3Vic3RpdHV0aW9uVGFibGVcIixbe25hbWU6XCJzdWJzdEZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcImNvdmVyYWdlXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkNvdmVyYWdlKGEuY292ZXJhZ2UpfSx7bmFtZTpcImRlbHRhR2x5cGhJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmRlbHRhR2x5cGhJZH1dKTpuZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjJ9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9XS5jb25jYXQoSWUudXNob3J0TGlzdChcInN1YnN0aXR1dGVcIixhLnN1YnN0aXR1dGUpKSl9LG5mWzNdPWZ1bmN0aW9uKGEpe3JldHVybiB4ZS5hc3NlcnQoMT09PWEuc3Vic3RGb3JtYXQsXCJMb29rdXAgdHlwZSAzIHN1YnN0Rm9ybWF0IG11c3QgYmUgMS5cIiksbmV3IEllLlRhYmxlKFwic3Vic3RpdHV0aW9uVGFibGVcIixbe25hbWU6XCJzdWJzdEZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcImNvdmVyYWdlXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkNvdmVyYWdlKGEuY292ZXJhZ2UpfV0uY29uY2F0KEllLnRhYmxlTGlzdChcImFsdFNldFwiLGEuYWx0ZXJuYXRlU2V0cyxmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiYWx0ZXJuYXRlU2V0VGFibGVcIixJZS51c2hvcnRMaXN0KFwiYWx0ZXJuYXRlXCIsYSkpfSkpKX0sbmZbNF09ZnVuY3Rpb24oYSl7cmV0dXJuIHhlLmFzc2VydCgxPT09YS5zdWJzdEZvcm1hdCxcIkxvb2t1cCB0eXBlIDQgc3Vic3RGb3JtYXQgbXVzdCBiZSAxLlwiKSxuZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9XS5jb25jYXQoSWUudGFibGVMaXN0KFwibGlnU2V0XCIsYS5saWdhdHVyZVNldHMsZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcImxpZ2F0dXJlU2V0VGFibGVcIixJZS50YWJsZUxpc3QoXCJsaWdhdHVyZVwiLGEsZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcImxpZ2F0dXJlVGFibGVcIixbe25hbWU6XCJsaWdHbHlwaFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmxpZ0dseXBofV0uY29uY2F0KEllLnVzaG9ydExpc3QoXCJjb21wb25lbnRcIixhLmNvbXBvbmVudHMsYS5jb21wb25lbnRzLmxlbmd0aCsxKSkpfSkpfSkpKX07dmFyIG9mPXtwYXJzZTppYixtYWtlOmpifSxwZj17cGFyc2U6a2IsbWFrZTpsYn0scWY9e21ha2U6cGIsZm9udFRvVGFibGU6c2IsY29tcHV0ZUNoZWNrU3VtOm5ifTt3Yi5wcm90b3R5cGU9e3NlYXJjaFRhZzp0YixiaW5TZWFyY2g6dWIsZ2V0VGFibGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5mb250LnRhYmxlc1t0aGlzLnRhYmxlTmFtZV07cmV0dXJuIWImJmEmJihiPXRoaXMuZm9udC50YWJsZXNbdGhpcy50YWJsZU5hbWVdPXRoaXMuY3JlYXRlRGVmYXVsdFRhYmxlKCkpLGJ9LGdldFNjcmlwdE5hbWVzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRUYWJsZSgpO3JldHVybiBhP2Euc2NyaXB0cy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEudGFnfSk6W119LGdldERlZmF1bHRTY3JpcHROYW1lOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRUYWJsZSgpO2lmKGEpe2Zvcih2YXIgYj0hMSxjPTA7YzxhLnNjcmlwdHMubGVuZ3RoO2MrKyl7dmFyIGQ9YS5zY3JpcHRzW2NdLnRhZztpZihcIkRGTFRcIj09PWQpcmV0dXJuIGQ7XCJsYXRuXCI9PT1kJiYoYj0hMCl9cmV0dXJuIGI/XCJsYXRuXCI6dm9pZCAwfX0sZ2V0U2NyaXB0VGFibGU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmdldFRhYmxlKGIpO2lmKGMpe2E9YXx8XCJERkxUXCI7dmFyIGQ9Yy5zY3JpcHRzLGU9dGIoYy5zY3JpcHRzLGEpO2lmKGU+PTApcmV0dXJuIGRbZV0uc2NyaXB0O2lmKGIpe3ZhciBmPXt0YWc6YSxzY3JpcHQ6e2RlZmF1bHRMYW5nU3lzOntyZXNlcnZlZDowLHJlcUZlYXR1cmVJbmRleDo2NTUzNSxmZWF0dXJlSW5kZXhlczpbXX0sbGFuZ1N5c1JlY29yZHM6W119fTtyZXR1cm4gZC5zcGxpY2UoLTEtZSwwLGYpLGYuc2NyaXB0fX19LGdldExhbmdTeXNUYWJsZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5nZXRTY3JpcHRUYWJsZShhLGMpO2lmKGQpe2lmKCFifHxcImRmbHRcIj09PWJ8fFwiREZMVFwiPT09YilyZXR1cm4gZC5kZWZhdWx0TGFuZ1N5czt2YXIgZT10YihkLmxhbmdTeXNSZWNvcmRzLGIpO2lmKGU+PTApcmV0dXJuIGQubGFuZ1N5c1JlY29yZHNbZV0ubGFuZ1N5cztpZihjKXt2YXIgZj17dGFnOmIsbGFuZ1N5czp7cmVzZXJ2ZWQ6MCxyZXFGZWF0dXJlSW5kZXg6NjU1MzUsZmVhdHVyZUluZGV4ZXM6W119fTtyZXR1cm4gZC5sYW5nU3lzUmVjb3Jkcy5zcGxpY2UoLTEtZSwwLGYpLGYubGFuZ1N5c319fSxnZXRGZWF0dXJlVGFibGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5nZXRMYW5nU3lzVGFibGUoYSxiLGQpO2lmKGUpe2Zvcih2YXIgZixnPWUuZmVhdHVyZUluZGV4ZXMsaD10aGlzLmZvbnQudGFibGVzW3RoaXMudGFibGVOYW1lXS5mZWF0dXJlcyxpPTA7aTxnLmxlbmd0aDtpKyspaWYoZj1oW2dbaV1dLGYudGFnPT09YylyZXR1cm4gZi5mZWF0dXJlO2lmKGQpe3ZhciBqPWgubGVuZ3RoO3JldHVybiB4ZS5hc3NlcnQoMD09PWp8fGM+PWhbai0xXS50YWcsXCJGZWF0dXJlcyBtdXN0IGJlIGFkZGVkIGluIGFscGhhYmV0aWNhbCBvcmRlci5cIiksZj17dGFnOmMsZmVhdHVyZTp7cGFyYW1zOjAsbG9va3VwTGlzdEluZGV4ZXM6W119fSxoLnB1c2goZiksZy5wdXNoKGopLGYuZmVhdHVyZX19fSxnZXRMb29rdXBUYWJsZXM6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj10aGlzLmdldEZlYXR1cmVUYWJsZShhLGIsYyxlKSxnPVtdO2lmKGYpe2Zvcih2YXIgaCxpPWYubG9va3VwTGlzdEluZGV4ZXMsaj10aGlzLmZvbnQudGFibGVzW3RoaXMudGFibGVOYW1lXS5sb29rdXBzLGs9MDtrPGkubGVuZ3RoO2srKyloPWpbaVtrXV0saC5sb29rdXBUeXBlPT09ZCYmZy5wdXNoKGgpO2lmKDA9PT1nLmxlbmd0aCYmZSl7aD17bG9va3VwVHlwZTpkLGxvb2t1cEZsYWc6MCxzdWJ0YWJsZXM6W10sbWFya0ZpbHRlcmluZ1NldDp2b2lkIDB9O3ZhciBsPWoubGVuZ3RoO3JldHVybiBqLnB1c2goaCksaS5wdXNoKGwpLFtoXX19cmV0dXJuIGd9LGdldEdseXBoQ2xhc3M6ZnVuY3Rpb24oYSxiKXtzd2l0Y2goYS5mb3JtYXQpe2Nhc2UgMTpyZXR1cm4gYS5zdGFydEdseXBoPD1iJiZiPGEuc3RhcnRHbHlwaCthLmNsYXNzZXMubGVuZ3RoP2EuY2xhc3Nlc1tiLWEuc3RhcnRHbHlwaF06MDtjYXNlIDI6dmFyIGM9dmIoYS5yYW5nZXMsYik7cmV0dXJuIGM/Yy5jbGFzc0lkOjB9fSxnZXRDb3ZlcmFnZUluZGV4OmZ1bmN0aW9uKGEsYil7c3dpdGNoKGEuZm9ybWF0KXtjYXNlIDE6dmFyIGM9dWIoYS5nbHlwaHMsYik7cmV0dXJuIGM+PTA/YzotMTtjYXNlIDI6dmFyIGQ9dmIoYS5yYW5nZXMsYik7cmV0dXJuIGQ/ZC5pbmRleCtiLWQuc3RhcnQ6LTF9fSxleHBhbmRDb3ZlcmFnZTpmdW5jdGlvbihhKXtpZigxPT09YS5mb3JtYXQpcmV0dXJuIGEuZ2x5cGhzO2Zvcih2YXIgYj1bXSxjPWEucmFuZ2VzLGQ9MDtkPGMubGVuZ3RoO2QrKylmb3IodmFyIGU9Y1tkXSxmPWUuc3RhcnQsZz1lLmVuZCxoPWY7aDw9ZztoKyspYi5wdXNoKGgpO3JldHVybiBifX0seGIucHJvdG90eXBlPXdiLnByb3RvdHlwZSx4Yi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0RGVmYXVsdFNjcmlwdE5hbWUoKTt0aGlzLmRlZmF1bHRLZXJuaW5nVGFibGVzPXRoaXMuZ2V0S2VybmluZ1RhYmxlcyhhKX0seGIucHJvdG90eXBlLmdldEtlcm5pbmdWYWx1ZT1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT0wO2U8YS5sZW5ndGg7ZSsrKWZvcih2YXIgZj1hW2VdLnN1YnRhYmxlcyxnPTA7ZzxmLmxlbmd0aDtnKyspe3ZhciBoPWZbZ10saT1kLmdldENvdmVyYWdlSW5kZXgoaC5jb3ZlcmFnZSxiKTtpZighKGk8MCkpc3dpdGNoKGgucG9zRm9ybWF0KXtjYXNlIDE6Zm9yKHZhciBqPWgucGFpclNldHNbaV0saz0wO2s8ai5sZW5ndGg7aysrKXt2YXIgbD1qW2tdO2lmKGwuc2Vjb25kR2x5cGg9PT1jKXJldHVybiBsLnZhbHVlMSYmbC52YWx1ZTEueEFkdmFuY2V8fDB9YnJlYWs7Y2FzZSAyOnZhciBtPWQuZ2V0R2x5cGhDbGFzcyhoLmNsYXNzRGVmMSxiKSxuPWQuZ2V0R2x5cGhDbGFzcyhoLmNsYXNzRGVmMixjKSxvPWguY2xhc3NSZWNvcmRzW21dW25dO3JldHVybiBvLnZhbHVlMSYmby52YWx1ZTEueEFkdmFuY2V8fDB9fXJldHVybiAwfSx4Yi5wcm90b3R5cGUuZ2V0S2VybmluZ1RhYmxlcz1mdW5jdGlvbihhLGIpe2lmKHRoaXMuZm9udC50YWJsZXMuZ3BvcylyZXR1cm4gdGhpcy5nZXRMb29rdXBUYWJsZXMoYSxiLFwia2VyblwiLDIpfSx5Yi5wcm90b3R5cGU9d2IucHJvdG90eXBlLHliLnByb3RvdHlwZS5jcmVhdGVEZWZhdWx0VGFibGU9ZnVuY3Rpb24oKXtyZXR1cm57dmVyc2lvbjoxLHNjcmlwdHM6W3t0YWc6XCJERkxUXCIsc2NyaXB0OntkZWZhdWx0TGFuZ1N5czp7cmVzZXJ2ZWQ6MCxyZXFGZWF0dXJlSW5kZXg6NjU1MzUsZmVhdHVyZUluZGV4ZXM6W119LGxhbmdTeXNSZWNvcmRzOltdfX1dLGZlYXR1cmVzOltdLGxvb2t1cHM6W119fSx5Yi5wcm90b3R5cGUuZ2V0U2luZ2xlPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPVtdLGY9dGhpcy5nZXRMb29rdXBUYWJsZXMoYixjLGEsMSksZz0wO2c8Zi5sZW5ndGg7ZysrKWZvcih2YXIgaD1mW2ddLnN1YnRhYmxlcyxpPTA7aTxoLmxlbmd0aDtpKyspe3ZhciBqPWhbaV0saz1kLmV4cGFuZENvdmVyYWdlKGouY292ZXJhZ2UpLGw9dm9pZCAwO2lmKDE9PT1qLnN1YnN0Rm9ybWF0KXt2YXIgbT1qLmRlbHRhR2x5cGhJZDtmb3IobD0wO2w8ay5sZW5ndGg7bCsrKXt2YXIgbj1rW2xdO2UucHVzaCh7c3ViOm4sYnk6bittfSl9fWVsc2V7dmFyIG89ai5zdWJzdGl0dXRlO2ZvcihsPTA7bDxrLmxlbmd0aDtsKyspZS5wdXNoKHtzdWI6a1tsXSxieTpvW2xdfSl9fXJldHVybiBlfSx5Yi5wcm90b3R5cGUuZ2V0QWx0ZXJuYXRlcz1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT1bXSxmPXRoaXMuZ2V0TG9va3VwVGFibGVzKGIsYyxhLDMpLGc9MDtnPGYubGVuZ3RoO2crKylmb3IodmFyIGg9ZltnXS5zdWJ0YWJsZXMsaT0wO2k8aC5sZW5ndGg7aSsrKWZvcih2YXIgaj1oW2ldLGs9ZC5leHBhbmRDb3ZlcmFnZShqLmNvdmVyYWdlKSxsPWouYWx0ZXJuYXRlU2V0cyxtPTA7bTxrLmxlbmd0aDttKyspZS5wdXNoKHtzdWI6a1ttXSxieTpsW21dfSk7cmV0dXJuIGV9LHliLnByb3RvdHlwZS5nZXRMaWdhdHVyZXM9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD10aGlzLGU9W10sZj10aGlzLmdldExvb2t1cFRhYmxlcyhiLGMsYSw0KSxnPTA7ZzxmLmxlbmd0aDtnKyspZm9yKHZhciBoPWZbZ10uc3VidGFibGVzLGk9MDtpPGgubGVuZ3RoO2krKylmb3IodmFyIGo9aFtpXSxrPWQuZXhwYW5kQ292ZXJhZ2Uoai5jb3ZlcmFnZSksbD1qLmxpZ2F0dXJlU2V0cyxtPTA7bTxrLmxlbmd0aDttKyspZm9yKHZhciBuPWtbbV0sbz1sW21dLHA9MDtwPG8ubGVuZ3RoO3ArKyl7dmFyIHE9b1twXTtlLnB1c2goe3N1Yjpbbl0uY29uY2F0KHEuY29tcG9uZW50cyksYnk6cS5saWdHbHlwaH0pfXJldHVybiBlfSx5Yi5wcm90b3R5cGUuYWRkU2luZ2xlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZ2V0TG9va3VwVGFibGVzKGMsZCxhLDEsITApWzBdLGY9QWIoZSwyLHtzdWJzdEZvcm1hdDoyLGNvdmVyYWdlOntmb3JtYXQ6MSxnbHlwaHM6W119LHN1YnN0aXR1dGU6W119KTt4ZS5hc3NlcnQoMT09PWYuY292ZXJhZ2UuZm9ybWF0LFwiTGlnYXR1cmU6IHVuYWJsZSB0byBtb2RpZnkgY292ZXJhZ2UgdGFibGUgZm9ybWF0IFwiK2YuY292ZXJhZ2UuZm9ybWF0KTt2YXIgZz1iLnN1YixoPXRoaXMuYmluU2VhcmNoKGYuY292ZXJhZ2UuZ2x5cGhzLGcpO2g8MCYmKGg9LTEtaCxmLmNvdmVyYWdlLmdseXBocy5zcGxpY2UoaCwwLGcpLGYuc3Vic3RpdHV0ZS5zcGxpY2UoaCwwLDApKSxmLnN1YnN0aXR1dGVbaF09Yi5ieX0seWIucHJvdG90eXBlLmFkZEFsdGVybmF0ZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldExvb2t1cFRhYmxlcyhjLGQsYSwzLCEwKVswXSxmPUFiKGUsMSx7c3Vic3RGb3JtYXQ6MSxjb3ZlcmFnZTp7Zm9ybWF0OjEsZ2x5cGhzOltdfSxhbHRlcm5hdGVTZXRzOltdfSk7eGUuYXNzZXJ0KDE9PT1mLmNvdmVyYWdlLmZvcm1hdCxcIkxpZ2F0dXJlOiB1bmFibGUgdG8gbW9kaWZ5IGNvdmVyYWdlIHRhYmxlIGZvcm1hdCBcIitmLmNvdmVyYWdlLmZvcm1hdCk7dmFyIGc9Yi5zdWIsaD10aGlzLmJpblNlYXJjaChmLmNvdmVyYWdlLmdseXBocyxnKTtoPDAmJihoPS0xLWgsZi5jb3ZlcmFnZS5nbHlwaHMuc3BsaWNlKGgsMCxnKSxmLmFsdGVybmF0ZVNldHMuc3BsaWNlKGgsMCwwKSksZi5hbHRlcm5hdGVTZXRzW2hdPWIuYnl9LHliLnByb3RvdHlwZS5hZGRMaWdhdHVyZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldExvb2t1cFRhYmxlcyhjLGQsYSw0LCEwKVswXSxmPWUuc3VidGFibGVzWzBdO2Z8fChmPXtzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOntmb3JtYXQ6MSxnbHlwaHM6W119LGxpZ2F0dXJlU2V0czpbXX0sZS5zdWJ0YWJsZXNbMF09ZikseGUuYXNzZXJ0KDE9PT1mLmNvdmVyYWdlLmZvcm1hdCxcIkxpZ2F0dXJlOiB1bmFibGUgdG8gbW9kaWZ5IGNvdmVyYWdlIHRhYmxlIGZvcm1hdCBcIitmLmNvdmVyYWdlLmZvcm1hdCk7dmFyIGc9Yi5zdWJbMF0saD1iLnN1Yi5zbGljZSgxKSxpPXtsaWdHbHlwaDpiLmJ5LGNvbXBvbmVudHM6aH0saj10aGlzLmJpblNlYXJjaChmLmNvdmVyYWdlLmdseXBocyxnKTtpZihqPj0wKXtmb3IodmFyIGs9Zi5saWdhdHVyZVNldHNbal0sbD0wO2w8ay5sZW5ndGg7bCsrKWlmKHpiKGtbbF0uY29tcG9uZW50cyxoKSlyZXR1cm47ay5wdXNoKGkpfWVsc2Ugaj0tMS1qLGYuY292ZXJhZ2UuZ2x5cGhzLnNwbGljZShqLDAsZyksZi5saWdhdHVyZVNldHMuc3BsaWNlKGosMCxbaV0pfSx5Yi5wcm90b3R5cGUuZ2V0RmVhdHVyZT1mdW5jdGlvbihhLGIsYyl7aWYoL3NzXFxkXFxkLy50ZXN0KGEpKXJldHVybiB0aGlzLmdldFNpbmdsZShhLGIsYyk7c3dpdGNoKGEpe2Nhc2VcImFhbHRcIjpjYXNlXCJzYWx0XCI6cmV0dXJuIHRoaXMuZ2V0U2luZ2xlKGEsYixjKS5jb25jYXQodGhpcy5nZXRBbHRlcm5hdGVzKGEsYixjKSk7Y2FzZVwiZGxpZ1wiOmNhc2VcImxpZ2FcIjpjYXNlXCJybGlnXCI6cmV0dXJuIHRoaXMuZ2V0TGlnYXR1cmVzKGEsYixjKX19LHliLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoL3NzXFxkXFxkLy50ZXN0KGEpKXJldHVybiB0aGlzLmFkZFNpbmdsZShhLGIsYyxkKTtzd2l0Y2goYSl7Y2FzZVwiYWFsdFwiOmNhc2VcInNhbHRcIjpyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYi5ieT90aGlzLmFkZFNpbmdsZShhLGIsYyxkKTp0aGlzLmFkZEFsdGVybmF0ZShhLGIsYyxkKTtjYXNlXCJkbGlnXCI6Y2FzZVwibGlnYVwiOmNhc2VcInJsaWdcIjpyZXR1cm4gdGhpcy5hZGRMaWdhdHVyZShhLGIsYyxkKX19O3ZhciByZixzZix0Zix1Zix2Zj17Z2V0UGF0aDpKYixwYXJzZTpMYn0sd2Y9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zclBlcmlvZCxjPXRoaXMuc3JQaGFzZSxkPXRoaXMuc3JUaHJlc2hvbGQsZT0xO3JldHVybiBhPDAmJihhPS1hLGU9LTEpLGErPWQtYyxhPU1hdGgudHJ1bmMoYS9iKSpiLGErPWMsYTwwP2MqZTphKmV9LHhmPXt4OjEseTowLGF4aXM6XCJ4XCIsZGlzdGFuY2U6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKGM/YS54bzphLngpLShkP2IueG86Yi54KX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7cmV0dXJuIGQmJmQhPT10aGlzPyhlPWQuZGlzdGFuY2UoYSxiLCEwLCEwKSxmPWQuZGlzdGFuY2UoYSxjLCEwLCEwKSxpPWQuZGlzdGFuY2UoYixiLCExLCEwKSxqPWQuZGlzdGFuY2UoYyxjLCExLCEwKSxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZCB4Zi5zZXRSZWxhdGl2ZShhLGEsKGkraikvMixkLCEwKTp2b2lkIHhmLnNldFJlbGF0aXZlKGEsYSwoaSpoK2oqZykvayxkLCEwKSk6KGU9YS54by1iLnhvLGY9YS54by1jLnhvLGk9Yi54LWIueG8saj1jLngtYy54byxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZChhLng9YS54bysoaStqKS8yKTp2b2lkKGEueD1hLnhvKyhpKmgraipnKS9rKSl9LG5vcm1hbFNsb3BlOk51bWJlci5ORUdBVElWRV9JTkZJTklUWSxzZXRSZWxhdGl2ZTpmdW5jdGlvbihhLGIsYyxkLGUpe2lmKCFkfHxkPT09dGhpcylyZXR1cm4gdm9pZChhLng9KGU/Yi54bzpiLngpK2MpO3ZhciBmPWU/Yi54bzpiLngsZz1lP2IueW86Yi55LGg9ZitjKmQueCxpPWcrYypkLnk7YS54PWgrKGEueS1pKS9kLm5vcm1hbFNsb3BlfSxzbG9wZTowLHRvdWNoOmZ1bmN0aW9uKGEpe2EueFRvdWNoZWQ9ITB9LHRvdWNoZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueFRvdWNoZWR9LHVudG91Y2g6ZnVuY3Rpb24oYSl7YS54VG91Y2hlZD0hMX19LHlmPXt4OjAseToxLGF4aXM6XCJ5XCIsZGlzdGFuY2U6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKGM/YS55bzphLnkpLShkP2IueW86Yi55KX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7cmV0dXJuIGQmJmQhPT10aGlzPyhlPWQuZGlzdGFuY2UoYSxiLCEwLCEwKSxmPWQuZGlzdGFuY2UoYSxjLCEwLCEwKSxpPWQuZGlzdGFuY2UoYixiLCExLCEwKSxqPWQuZGlzdGFuY2UoYyxjLCExLCEwKSxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZCB5Zi5zZXRSZWxhdGl2ZShhLGEsKGkraikvMixkLCEwKTp2b2lkIHlmLnNldFJlbGF0aXZlKGEsYSwoaSpoK2oqZykvayxkLCEwKSk6KGU9YS55by1iLnlvLGY9YS55by1jLnlvLGk9Yi55LWIueW8saj1jLnktYy55byxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZChhLnk9YS55bysoaStqKS8yKTp2b2lkKGEueT1hLnlvKyhpKmgraipnKS9rKSl9LG5vcm1hbFNsb3BlOjAsc2V0UmVsYXRpdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZighZHx8ZD09PXRoaXMpcmV0dXJuIHZvaWQoYS55PShlP2IueW86Yi55KStjKTt2YXIgZj1lP2IueG86Yi54LGc9ZT9iLnlvOmIueSxoPWYrYypkLngsaT1nK2MqZC55O2EueT1pK2Qubm9ybWFsU2xvcGUqKGEueC1oKX0sc2xvcGU6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHRvdWNoOmZ1bmN0aW9uKGEpe2EueVRvdWNoZWQ9ITB9LHRvdWNoZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueVRvdWNoZWR9LHVudG91Y2g6ZnVuY3Rpb24oYSl7YS55VG91Y2hlZD0hMX19O09iamVjdC5mcmVlemUoeGYpLE9iamVjdC5mcmVlemUoeWYpLFRiLnByb3RvdHlwZS5kaXN0YW5jZT1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy54KnhmLmRpc3RhbmNlKGEsYixjLGQpK3RoaXMueSp5Zi5kaXN0YW5jZShhLGIsYyxkKX0sVGIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrO2lmKGc9ZC5kaXN0YW5jZShhLGIsITAsITApLGg9ZC5kaXN0YW5jZShhLGMsITAsITApLGU9ZC5kaXN0YW5jZShiLGIsITEsITApLGY9ZC5kaXN0YW5jZShjLGMsITEsITApLGk9TWF0aC5hYnMoZyksaj1NYXRoLmFicyhoKSwwPT09KGs9aStqKSlyZXR1cm4gdm9pZCB0aGlzLnNldFJlbGF0aXZlKGEsYSwoZStmKS8yLGQsITApO3RoaXMuc2V0UmVsYXRpdmUoYSxhLChlKmorZippKS9rLGQsITApfSxUYi5wcm90b3R5cGUuc2V0UmVsYXRpdmU9ZnVuY3Rpb24oYSxiLGMsZCxlKXtkPWR8fHRoaXM7dmFyIGY9ZT9iLnhvOmIueCxnPWU/Yi55bzpiLnksaD1mK2MqZC54LGk9ZytjKmQueSxqPWQubm9ybWFsU2xvcGUsaz10aGlzLnNsb3BlLGw9YS54LG09YS55O2EueD0oaypsLWoqaCtpLW0pLyhrLWopLGEueT1rKihhLngtbCkrbX0sVGIucHJvdG90eXBlLnRvdWNoPWZ1bmN0aW9uKGEpe2EueFRvdWNoZWQ9ITAsYS55VG91Y2hlZD0hMH0sVmIucHJvdG90eXBlLm5leHRUb3VjaGVkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLm5leHRQb2ludE9uQ29udG91cjshYS50b3VjaGVkKGIpJiZiIT09dGhpczspYj1iLm5leHRQb2ludE9uQ29udG91cjtyZXR1cm4gYn0sVmIucHJvdG90eXBlLnByZXZUb3VjaGVkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLnByZXZQb2ludE9uQ29udG91cjshYS50b3VjaGVkKGIpJiZiIT09dGhpczspYj1iLnByZXZQb2ludE9uQ29udG91cjtyZXR1cm4gYn07dmFyIHpmPU9iamVjdC5mcmVlemUobmV3IFZiKDAsMCkpLEFmPXtjdkN1dEluOjE3LzE2LGRlbHRhQmFzZTo5LGRlbHRhU2hpZnQ6LjEyNSxsb29wOjEsbWluRGlzOjEsYXV0b0ZsaXA6ITB9O01iLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGIsYyl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgc2l6ZSBpcyBub3QgYSBudW1iZXIhXCIpO2lmKCEodGhpcy5fZXJyb3JTdGF0ZT4yKSl7dmFyIGQ9dGhpcy5mb250LGU9dGhpcy5fcHJlcFN0YXRlO2lmKCFlfHxlLnBwZW0hPT1jKXt2YXIgZj10aGlzLl9mcGdtU3RhdGU7aWYoIWYpe1diLnByb3RvdHlwZT1BZixmPXRoaXMuX2ZwZ21TdGF0ZT1uZXcgV2IoXCJmcGdtXCIsZC50YWJsZXMuZnBnbSksZi5mdW5jcz1bXSxmLmZvbnQ9ZCxhLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIEZQR00tLS1cIiksZi5zdGVwPS0xKTt0cnl7c2YoZil9Y2F0Y2goYSl7cmV0dXJuIGNvbnNvbGUubG9nKFwiSGludGluZyBlcnJvciBpbiBGUEdNOlwiK2EpLHZvaWQodGhpcy5fZXJyb3JTdGF0ZT0zKX19V2IucHJvdG90eXBlPWYsZT10aGlzLl9wcmVwU3RhdGU9bmV3IFdiKFwicHJlcFwiLGQudGFibGVzLnByZXApLGUucHBlbT1jO3ZhciBnPWQudGFibGVzLmN2dDtpZihnKWZvcih2YXIgaD1lLmN2dD1uZXcgQXJyYXkoZy5sZW5ndGgpLGk9Yy9kLnVuaXRzUGVyRW0saj0wO2o8Zy5sZW5ndGg7aisrKWhbal09Z1tqXSppO2Vsc2UgZS5jdnQ9W107YS5ERUJVRyYmKGNvbnNvbGUubG9nKFwiLS0tRVhFQyBQUkVQLS0tXCIpLGUuc3RlcD0tMSk7dHJ5e3NmKGUpfWNhdGNoKGEpe3RoaXMuX2Vycm9yU3RhdGU8MiYmY29uc29sZS5sb2coXCJIaW50aW5nIGVycm9yIGluIFBSRVA6XCIrYSksdGhpcy5fZXJyb3JTdGF0ZT0yfX1pZighKHRoaXMuX2Vycm9yU3RhdGU+MSkpdHJ5e3JldHVybiB0ZihiLGUpfWNhdGNoKGEpe3JldHVybiB0aGlzLl9lcnJvclN0YXRlPDEmJihjb25zb2xlLmxvZyhcIkhpbnRpbmcgZXJyb3I6XCIrYSksY29uc29sZS5sb2coXCJOb3RlOiBmdXJ0aGVyIGhpbnRpbmcgZXJyb3JzIGFyZSBzaWxlbmNlZFwiKSksdm9pZCh0aGlzLl9lcnJvclN0YXRlPTEpfX19LHRmPWZ1bmN0aW9uKGIsYyl7dmFyIGQsZSxmLGc9Yy5wcGVtL2MuZm9udC51bml0c1BlckVtLGg9ZyxpPWIuY29tcG9uZW50cztpZihXYi5wcm90b3R5cGU9YyxpKXt2YXIgaj1jLmZvbnQ7ZT1bXSxkPVtdO2Zvcih2YXIgaz0wO2s8aS5sZW5ndGg7aysrKXt2YXIgbD1pW2tdLG09ai5nbHlwaHMuZ2V0KGwuZ2x5cGhJbmRleCk7Zj1uZXcgV2IoXCJnbHlmXCIsbS5pbnN0cnVjdGlvbnMpLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgQ09NUCBcIitrK1wiLS0tXCIpLGYuc3RlcD0tMSksdWYobSxmLGcsaCk7Zm9yKHZhciBuPU1hdGgucm91bmQobC5keCpnKSxvPU1hdGgucm91bmQobC5keSpoKSxwPWYuZ1pvbmUscT1mLmNvbnRvdXJzLHI9MDtyPHAubGVuZ3RoO3IrKyl7dmFyIHM9cFtyXTtzLnhUb3VjaGVkPXMueVRvdWNoZWQ9ITEscy54bz1zLng9cy54K24scy55bz1zLnk9cy55K299dmFyIHQ9ZS5sZW5ndGg7ZS5wdXNoLmFwcGx5KGUscCk7Zm9yKHZhciB1PTA7dTxxLmxlbmd0aDt1KyspZC5wdXNoKHFbdV0rdCl9Yi5pbnN0cnVjdGlvbnMmJiFmLmluaGliaXRHcmlkRml0JiYoZj1uZXcgV2IoXCJnbHlmXCIsYi5pbnN0cnVjdGlvbnMpLGYuZ1pvbmU9Zi56MD1mLnoxPWYuejI9ZSxmLmNvbnRvdXJzPWQsZS5wdXNoKG5ldyBWYigwLDApLG5ldyBWYihNYXRoLnJvdW5kKGIuYWR2YW5jZVdpZHRoKmcpLDApKSxhLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIENPTVBPU0lURS0tLVwiKSxmLnN0ZXA9LTEpLHNmKGYpLGUubGVuZ3RoLT0yKX1lbHNlIGY9bmV3IFdiKFwiZ2x5ZlwiLGIuaW5zdHJ1Y3Rpb25zKSxhLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIEdMWVBILS0tXCIpLGYuc3RlcD0tMSksdWYoYixmLGcsaCksZT1mLmdab25lO3JldHVybiBlfSx1Zj1mdW5jdGlvbihiLGMsZCxlKXtmb3IodmFyIGYsZz1iLnBvaW50c3x8W10saD1nLmxlbmd0aCxpPWMuZ1pvbmU9Yy56MD1jLnoxPWMuejI9W10saj1jLmNvbnRvdXJzPVtdLGs9MDtrPGg7aysrKWY9Z1trXSxpW2tdPW5ldyBWYihmLngqZCxmLnkqZSxmLmxhc3RQb2ludE9mQ29udG91cixmLm9uQ3VydmUpO2Zvcih2YXIgbCxtLG49MDtuPGg7bisrKWY9aVtuXSxsfHwobD1mLGoucHVzaChuKSksZi5sYXN0UG9pbnRPZkNvbnRvdXI/KGYubmV4dFBvaW50T25Db250b3VyPWwsbC5wcmV2UG9pbnRPbkNvbnRvdXI9ZixsPXZvaWQgMCk6KG09aVtuKzFdLGYubmV4dFBvaW50T25Db250b3VyPW0sbS5wcmV2UG9pbnRPbkNvbnRvdXI9Zik7aWYoIWMuaW5oaWJpdEdyaWRGaXQpe2lmKGEuREVCVUcpe2NvbnNvbGUubG9nKFwiUFJPQ0VTU0lORyBHTFlQSFwiLGMuc3RhY2spO2Zvcih2YXIgbz0wO288aDtvKyspY29uc29sZS5sb2cobyxpW29dLngsaVtvXS55KX1pZihpLnB1c2gobmV3IFZiKDAsMCksbmV3IFZiKE1hdGgucm91bmQoYi5hZHZhbmNlV2lkdGgqZCksMCkpLHNmKGMpLGkubGVuZ3RoLT0yLGEuREVCVUcpe2NvbnNvbGUubG9nKFwiRklOSVNIRUQgR0xZUEhcIixjLnN0YWNrKTtmb3IodmFyIHA9MDtwPGg7cCsrKWNvbnNvbGUubG9nKHAsaVtwXS54LGlbcF0ueSl9fX0sc2Y9ZnVuY3Rpb24oYil7dmFyIGM9Yi5wcm9nO2lmKGMpe3ZhciBkLGU9Yy5sZW5ndGg7Zm9yKGIuaXA9MDtiLmlwPGU7Yi5pcCsrKXtpZihhLkRFQlVHJiZiLnN0ZXArKywhKGQ9cmZbY1tiLmlwXV0pKXRocm93IG5ldyBFcnJvcihcInVua25vd24gaW5zdHJ1Y3Rpb246IDB4XCIrTnVtYmVyKGNbYi5pcF0pLnRvU3RyaW5nKDE2KSk7ZChiKX19fSxyZj1bWmIuYmluZCh2b2lkIDAseWYpLFpiLmJpbmQodm9pZCAwLHhmKSwkYi5iaW5kKHZvaWQgMCx5ZiksJGIuYmluZCh2b2lkIDAseGYpLF9iLmJpbmQodm9pZCAwLHlmKSxfYi5iaW5kKHZvaWQgMCx4ZiksYWMuYmluZCh2b2lkIDAsMCksYWMuYmluZCh2b2lkIDAsMSksYmMuYmluZCh2b2lkIDAsMCksYmMuYmluZCh2b2lkIDAsMSksY2MsZGMsZWMsZmMsZ2MsaGMsaWMsamMsa2MsbGMsbWMsbmMsb2MscGMscWMscmMsc2MsdGMsdWMsdmMsdm9pZCAwLHZvaWQgMCx3Yyx4Yyx5Yyx6YyxBYyxEYyxFYyx2b2lkIDAsdm9pZCAwLHZvaWQgMCxCYyxDYyxGYyx2b2lkIDAsR2MuYmluZCh2b2lkIDAsMCksR2MuYmluZCh2b2lkIDAsMSksSGMuYmluZCh2b2lkIDAseWYpLEhjLmJpbmQodm9pZCAwLHhmKSxJYy5iaW5kKHZvaWQgMCwwKSxJYy5iaW5kKHZvaWQgMCwxKSxKYy5iaW5kKHZvaWQgMCwwKSxKYy5iaW5kKHZvaWQgMCwxKSxLYy5iaW5kKHZvaWQgMCwwKSxLYy5iaW5kKHZvaWQgMCwxKSxMYyxNYyxOYy5iaW5kKHZvaWQgMCwwKSxOYy5iaW5kKHZvaWQgMCwxKSxPYyxQYyxRYy5iaW5kKHZvaWQgMCwwKSxRYy5iaW5kKHZvaWQgMCwxKSxSYyxTYyxUYyxVYyxWYyxXYyxYYy5iaW5kKHZvaWQgMCwwKSxYYy5iaW5kKHZvaWQgMCwxKSx2b2lkIDAsWWMuYmluZCh2b2lkIDAsMCksWWMuYmluZCh2b2lkIDAsMSksWmMsdm9pZCAwLCRjLHZvaWQgMCx2b2lkIDAsX2MsYWQsYmQsY2QsZGQsZWQsZmQsZ2QsaGQsaWQsamQsa2QsbGQsbWQuYmluZCh2b2lkIDAsMSksbmQsb2QscGQscWQscmQsc2QsdGQsdWQsdmQsd2QseGQuYmluZCh2b2lkIDAsMCkseGQuYmluZCh2b2lkIDAsMSkseGQuYmluZCh2b2lkIDAsMikseGQuYmluZCh2b2lkIDAsMyksdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHlkLG1kLmJpbmQodm9pZCAwLDIpLG1kLmJpbmQodm9pZCAwLDMpLHpkLmJpbmQodm9pZCAwLDEpLHpkLmJpbmQodm9pZCAwLDIpLHpkLmJpbmQodm9pZCAwLDMpLEFkLEJkLHZvaWQgMCx2b2lkIDAsQ2Qsdm9pZCAwLERkLEVkLHhjLHhjLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsRmQsR2QuYmluZCh2b2lkIDAsMCksR2QuYmluZCh2b2lkIDAsMSksSGQsdm9pZCAwLElkLEpkLEtkLExkLE1kLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE5kLmJpbmQodm9pZCAwLDEpLE5kLmJpbmQodm9pZCAwLDIpLE5kLmJpbmQodm9pZCAwLDMpLE5kLmJpbmQodm9pZCAwLDQpLE5kLmJpbmQodm9pZCAwLDUpLE5kLmJpbmQodm9pZCAwLDYpLE5kLmJpbmQodm9pZCAwLDcpLE5kLmJpbmQodm9pZCAwLDgpLE9kLmJpbmQodm9pZCAwLDEpLE9kLmJpbmQodm9pZCAwLDIpLE9kLmJpbmQodm9pZCAwLDMpLE9kLmJpbmQodm9pZCAwLDQpLE9kLmJpbmQodm9pZCAwLDUpLE9kLmJpbmQodm9pZCAwLDYpLE9kLmJpbmQodm9pZCAwLDcpLE9kLmJpbmQodm9pZCAwLDgpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDAsMCksUGQuYmluZCh2b2lkIDAsMCwwLDAsMCwxKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwwLDIpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDAsMyksUGQuYmluZCh2b2lkIDAsMCwwLDAsMSwwKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwxLDEpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDEsMiksUGQuYmluZCh2b2lkIDAsMCwwLDAsMSwzKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwwLDApLFBkLmJpbmQodm9pZCAwLDAsMCwxLDAsMSksUGQuYmluZCh2b2lkIDAsMCwwLDEsMCwyKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwwLDMpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDEsMCksUGQuYmluZCh2b2lkIDAsMCwwLDEsMSwxKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwxLDIpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDEsMyksUGQuYmluZCh2b2lkIDAsMCwxLDAsMCwwKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwwLDEpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDAsMiksUGQuYmluZCh2b2lkIDAsMCwxLDAsMCwzKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwxLDApLFBkLmJpbmQodm9pZCAwLDAsMSwwLDEsMSksUGQuYmluZCh2b2lkIDAsMCwxLDAsMSwyKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwxLDMpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDAsMCksUGQuYmluZCh2b2lkIDAsMCwxLDEsMCwxKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwwLDIpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDAsMyksUGQuYmluZCh2b2lkIDAsMCwxLDEsMSwwKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwxLDEpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDEsMiksUGQuYmluZCh2b2lkIDAsMCwxLDEsMSwzKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwwLDApLFBkLmJpbmQodm9pZCAwLDEsMCwwLDAsMSksUGQuYmluZCh2b2lkIDAsMSwwLDAsMCwyKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwwLDMpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDEsMCksUGQuYmluZCh2b2lkIDAsMSwwLDAsMSwxKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwxLDIpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDEsMyksUGQuYmluZCh2b2lkIDAsMSwwLDEsMCwwKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwwLDEpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDAsMiksUGQuYmluZCh2b2lkIDAsMSwwLDEsMCwzKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwxLDApLFBkLmJpbmQodm9pZCAwLDEsMCwxLDEsMSksUGQuYmluZCh2b2lkIDAsMSwwLDEsMSwyKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwxLDMpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDAsMCksUGQuYmluZCh2b2lkIDAsMSwxLDAsMCwxKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwwLDIpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDAsMyksUGQuYmluZCh2b2lkIDAsMSwxLDAsMSwwKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwxLDEpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDEsMiksUGQuYmluZCh2b2lkIDAsMSwxLDAsMSwzKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwwLDApLFBkLmJpbmQodm9pZCAwLDEsMSwxLDAsMSksUGQuYmluZCh2b2lkIDAsMSwxLDEsMCwyKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwwLDMpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDEsMCksUGQuYmluZCh2b2lkIDAsMSwxLDEsMSwxKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwxLDIpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDEsMyldO3ZhciBCZj1BcnJheS5mcm9tfHxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXRjaCgvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXT98W15cXHVEODAwLVxcdURGRkZdfC4vZyl8fFtdfTtRZC5wcm90b3R5cGUuaGFzQ2hhcj1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9PXRoaXMuZW5jb2RpbmcuY2hhclRvR2x5cGhJbmRleChhKX0sUWQucHJvdG90eXBlLmNoYXJUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZW5jb2RpbmcuY2hhclRvR2x5cGhJbmRleChhKX0sUWQucHJvdG90eXBlLmNoYXJUb0dseXBoPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY2hhclRvR2x5cGhJbmRleChhKSxjPXRoaXMuZ2x5cGhzLmdldChiKTtyZXR1cm4gY3x8KGM9dGhpcy5nbHlwaHMuZ2V0KDApKSxjfSxRZC5wcm90b3R5cGUuc3RyaW5nVG9HbHlwaHM9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2I9Ynx8dGhpcy5kZWZhdWx0UmVuZGVyT3B0aW9ucztmb3IodmFyIGQ9QmYoYSksZT1bXSxmPTA7ZjxkLmxlbmd0aDtmKz0xKXt2YXIgZz1kW2ZdO2UucHVzaChjLmNoYXJUb0dseXBoSW5kZXgoZykpfXZhciBoPWUubGVuZ3RoO2lmKGIuZmVhdHVyZXMpe3ZhciBpPWIuc2NyaXB0fHx0aGlzLnN1YnN0aXR1dGlvbi5nZXREZWZhdWx0U2NyaXB0TmFtZSgpLGo9W107Yi5mZWF0dXJlcy5saWdhJiYoaj1qLmNvbmNhdCh0aGlzLnN1YnN0aXR1dGlvbi5nZXRGZWF0dXJlKFwibGlnYVwiLGksYi5sYW5ndWFnZSkpKSxiLmZlYXR1cmVzLnJsaWcmJihqPWouY29uY2F0KHRoaXMuc3Vic3RpdHV0aW9uLmdldEZlYXR1cmUoXCJybGlnXCIsaSxiLmxhbmd1YWdlKSkpO2Zvcih2YXIgaz0wO2s8aDtrKz0xKWZvcih2YXIgbD0wO2w8ai5sZW5ndGg7bCsrKXtmb3IodmFyIG09altsXSxuPW0uc3ViLG89bi5sZW5ndGgscD0wO3A8byYmbltwXT09PWVbaytwXTspcCsrO3A9PT1vJiYoZS5zcGxpY2UoayxvLG0uYnkpLGg9aC1vKzEpfX1mb3IodmFyIHE9bmV3IEFycmF5KGgpLHI9dGhpcy5nbHlwaHMuZ2V0KDApLHM9MDtzPGg7cys9MSlxW3NdPWMuZ2x5cGhzLmdldChlW3NdKXx8cjtyZXR1cm4gcX0sUWQucHJvdG90eXBlLm5hbWVUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ2x5cGhOYW1lcy5uYW1lVG9HbHlwaEluZGV4KGEpfSxRZC5wcm90b3R5cGUubmFtZVRvR2x5cGg9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5uYW1lVG9HbHlwaEluZGV4KGEpLGM9dGhpcy5nbHlwaHMuZ2V0KGIpO3JldHVybiBjfHwoYz10aGlzLmdseXBocy5nZXQoMCkpLGN9LFFkLnByb3RvdHlwZS5nbHlwaEluZGV4VG9OYW1lPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdseXBoTmFtZXMuZ2x5cGhJbmRleFRvTmFtZT90aGlzLmdseXBoTmFtZXMuZ2x5cGhJbmRleFRvTmFtZShhKTpcIlwifSxRZC5wcm90b3R5cGUuZ2V0S2VybmluZ1ZhbHVlPWZ1bmN0aW9uKGEsYil7YT1hLmluZGV4fHxhLGI9Yi5pbmRleHx8Yjt2YXIgYz10aGlzLnBvc2l0aW9uLmRlZmF1bHRLZXJuaW5nVGFibGVzO3JldHVybiBjP3RoaXMucG9zaXRpb24uZ2V0S2VybmluZ1ZhbHVlKGMsYSxiKTp0aGlzLmtlcm5pbmdQYWlyc1thK1wiLFwiK2JdfHwwfSxRZC5wcm90b3R5cGUuZGVmYXVsdFJlbmRlck9wdGlvbnM9e2tlcm5pbmc6ITAsZmVhdHVyZXM6e2xpZ2E6ITAscmxpZzohMH19LFFkLnByb3RvdHlwZS5mb3JFYWNoR2x5cGg9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPXRoaXM7Yj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/YzowLGQ9dm9pZCAwIT09ZD9kOjcyLGU9ZXx8dGhpcy5kZWZhdWx0UmVuZGVyT3B0aW9uczt2YXIgaCxpPTEvdGhpcy51bml0c1BlckVtKmQsaj10aGlzLnN0cmluZ1RvR2x5cGhzKGEsZSk7aWYoZS5rZXJuaW5nKXt2YXIgaz1lLnNjcmlwdHx8dGhpcy5wb3NpdGlvbi5nZXREZWZhdWx0U2NyaXB0TmFtZSgpO2g9dGhpcy5wb3NpdGlvbi5nZXRLZXJuaW5nVGFibGVzKGssZS5sYW5ndWFnZSl9Zm9yKHZhciBsPTA7bDxqLmxlbmd0aDtsKz0xKXt2YXIgbT1qW2xdO2lmKGYuY2FsbChnLG0sYixjLGQsZSksbS5hZHZhbmNlV2lkdGgmJihiKz1tLmFkdmFuY2VXaWR0aCppKSxlLmtlcm5pbmcmJmw8ai5sZW5ndGgtMSl7Yis9KGg/Zy5wb3NpdGlvbi5nZXRLZXJuaW5nVmFsdWUoaCxtLmluZGV4LGpbbCsxXS5pbmRleCk6Zy5nZXRLZXJuaW5nVmFsdWUobSxqW2wrMV0pKSppfWUubGV0dGVyU3BhY2luZz9iKz1lLmxldHRlclNwYWNpbmcqZDplLnRyYWNraW5nJiYoYis9ZS50cmFja2luZy8xZTMqZCl9cmV0dXJuIGJ9LFFkLnByb3RvdHlwZS5nZXRQYXRoPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9bmV3IHI7cmV0dXJuIHRoaXMuZm9yRWFjaEdseXBoKGEsYixjLGQsZSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZz1hLmdldFBhdGgoYixjLGQsZSx0aGlzKTtmLmV4dGVuZChnKX0pLGZ9LFFkLnByb3RvdHlwZS5nZXRQYXRocz1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPVtdO3JldHVybiB0aGlzLmZvckVhY2hHbHlwaChhLGIsYyxkLGUsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGc9YS5nZXRQYXRoKGIsYyxkLGUsdGhpcyk7Zi5wdXNoKGcpfSksZn0sUWQucHJvdG90eXBlLmdldEFkdmFuY2VXaWR0aD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuZm9yRWFjaEdseXBoKGEsMCwwLGIsYyxmdW5jdGlvbigpe30pfSxRZC5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5nZXRQYXRoKGIsYyxkLGUsZikuZHJhdyhhKX0sUWQucHJvdG90eXBlLmRyYXdQb2ludHM9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZm9yRWFjaEdseXBoKGIsYyxkLGUsZixmdW5jdGlvbihiLGMsZCxlKXtiLmRyYXdQb2ludHMoYSxjLGQsZSl9KX0sUWQucHJvdG90eXBlLmRyYXdNZXRyaWNzPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmZvckVhY2hHbHlwaChiLGMsZCxlLGYsZnVuY3Rpb24oYixjLGQsZSl7Yi5kcmF3TWV0cmljcyhhLGMsZCxlKX0pfSxRZC5wcm90b3R5cGUuZ2V0RW5nbGlzaE5hbWU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5uYW1lc1thXTtpZihiKXJldHVybiBiLmVufSxRZC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7fWZ1bmN0aW9uIGIoYil7dmFyIGQ9Yy5nZXRFbmdsaXNoTmFtZShiKTthKGQmJmQudHJpbSgpLmxlbmd0aD4wLFwiTm8gRW5nbGlzaCBcIitiK1wiIHNwZWNpZmllZC5cIil9dmFyIGM9dGhpcztiKFwiZm9udEZhbWlseVwiKSxiKFwid2VpZ2h0TmFtZVwiKSxiKFwibWFudWZhY3R1cmVyXCIpLGIoXCJjb3B5cmlnaHRcIiksYihcInZlcnNpb25cIiksYSh0aGlzLnVuaXRzUGVyRW0+MCxcIk5vIHVuaXRzUGVyRW0gc3BlY2lmaWVkLlwiKX0sUWQucHJvdG90eXBlLnRvVGFibGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHFmLmZvbnRUb1RhYmxlKHRoaXMpfSxRZC5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKFwiRm9udC50b0J1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgRm9udC50b0FycmF5QnVmZmVyIGluc3RlYWQuXCIpLHRoaXMudG9BcnJheUJ1ZmZlcigpfSxRZC5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnRvVGFibGVzKCksYj1hLmVuY29kZSgpLGM9bmV3IEFycmF5QnVmZmVyKGIubGVuZ3RoKSxkPW5ldyBVaW50OEFycmF5KGMpLGU9MDtlPGIubGVuZ3RoO2UrKylkW2VdPWJbZV07cmV0dXJuIGN9LFFkLnByb3RvdHlwZS5kb3dubG9hZD1mdW5jdGlvbihhKXt2YXIgYz10aGlzLmdldEVuZ2xpc2hOYW1lKFwiZm9udEZhbWlseVwiKSxkPXRoaXMuZ2V0RW5nbGlzaE5hbWUoXCJmb250U3ViZmFtaWx5XCIpO2E9YXx8Yy5yZXBsYWNlKC9cXHMvZyxcIlwiKStcIi1cIitkK1wiLm90ZlwiO3ZhciBlPXRoaXMudG9BcnJheUJ1ZmZlcigpO2lmKEJiKCkpd2luZG93LnJlcXVlc3RGaWxlU3lzdGVtPXdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbXx8d2luZG93LndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtLHdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSh3aW5kb3cuVEVNUE9SQVJZLGUuYnl0ZUxlbmd0aCxmdW5jdGlvbihiKXtiLnJvb3QuZ2V0RmlsZShhLHtjcmVhdGU6ITB9LGZ1bmN0aW9uKGEpe2EuY3JlYXRlV3JpdGVyKGZ1bmN0aW9uKGIpe3ZhciBjPW5ldyBEYXRhVmlldyhlKSxkPW5ldyBCbG9iKFtjXSx7dHlwZTpcImZvbnQvb3BlbnR5cGVcIn0pO2Iud3JpdGUoZCksYi5hZGRFdmVudExpc3RlbmVyKFwid3JpdGVlbmRcIixmdW5jdGlvbigpe2xvY2F0aW9uLmhyZWY9YS50b1VSTCgpfSwhMSl9KX0pfSxmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYS5uYW1lK1wiOiBcIithLm1lc3NhZ2UpfSk7ZWxzZXt2YXIgZj1iKFwiZnNcIiksZz1EYihlKTtmLndyaXRlRmlsZVN5bmMoYSxnKX19LFFkLnByb3RvdHlwZS5mc1NlbGVjdGlvblZhbHVlcz17SVRBTElDOjEsVU5ERVJTQ09SRToyLE5FR0FUSVZFOjQsT1VUTElORUQ6OCxTVFJJS0VPVVQ6MTYsQk9MRDozMixSRUdVTEFSOjY0LFVTRVJfVFlQT19NRVRSSUNTOjEyOCxXV1M6MjU2LE9CTElRVUU6NTEyfSxRZC5wcm90b3R5cGUudXNXaWR0aENsYXNzZXM9e1VMVFJBX0NPTkRFTlNFRDoxLEVYVFJBX0NPTkRFTlNFRDoyLENPTkRFTlNFRDozLFNFTUlfQ09OREVOU0VEOjQsTUVESVVNOjUsU0VNSV9FWFBBTkRFRDo2LEVYUEFOREVEOjcsRVhUUkFfRVhQQU5ERUQ6OCxVTFRSQV9FWFBBTkRFRDo5fSxRZC5wcm90b3R5cGUudXNXZWlnaHRDbGFzc2VzPXtUSElOOjEwMCxFWFRSQV9MSUdIVDoyMDAsTElHSFQ6MzAwLE5PUk1BTDo0MDAsTUVESVVNOjUwMCxTRU1JX0JPTEQ6NjAwLEJPTEQ6NzAwLEVYVFJBX0JPTEQ6ODAwLEJMQUNLOjkwMH07dmFyIENmPXttYWtlOldkLHBhcnNlOlhkfSxEZj1uZXcgQXJyYXkoMTApO0RmWzFdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4gMT09PWI/e3Bvc0Zvcm1hdDoxLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHZhbHVlOnRoaXMucGFyc2VWYWx1ZVJlY29yZCgpfToyPT09Yj97XG5wb3NGb3JtYXQ6Mixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSx2YWx1ZXM6dGhpcy5wYXJzZVZhbHVlUmVjb3JkTGlzdCgpfTp2b2lkIHhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IEdQT1MgbG9va3VwIHR5cGUgMSBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpfSxEZlsyXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7eGUuYXNzZXJ0KDE9PT1ifHwyPT09YixcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IEdQT1MgbG9va3VwIHR5cGUgMiBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpO3ZhciBjPXRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGQ9dGhpcy5wYXJzZVVTaG9ydCgpLGU9dGhpcy5wYXJzZVVTaG9ydCgpO2lmKDE9PT1iKXJldHVybntwb3NGb3JtYXQ6Yixjb3ZlcmFnZTpjLHZhbHVlRm9ybWF0MTpkLHZhbHVlRm9ybWF0MjplLHBhaXJTZXRzOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmxpc3QoZnVuY3Rpb24oKXtyZXR1cm57c2Vjb25kR2x5cGg6dGhpcy5wYXJzZVVTaG9ydCgpLHZhbHVlMTp0aGlzLnBhcnNlVmFsdWVSZWNvcmQoZCksdmFsdWUyOnRoaXMucGFyc2VWYWx1ZVJlY29yZChlKX19KSkpfTtpZigyPT09Yil7dmFyIGY9dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksZz10aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxoPXRoaXMucGFyc2VVU2hvcnQoKSxpPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm57cG9zRm9ybWF0OmIsY292ZXJhZ2U6Yyx2YWx1ZUZvcm1hdDE6ZCx2YWx1ZUZvcm1hdDI6ZSxjbGFzc0RlZjE6ZixjbGFzc0RlZjI6ZyxjbGFzczFDb3VudDpoLGNsYXNzMkNvdW50OmksY2xhc3NSZWNvcmRzOnRoaXMucGFyc2VMaXN0KGgsUS5saXN0KGksZnVuY3Rpb24oKXtyZXR1cm57dmFsdWUxOnRoaXMucGFyc2VWYWx1ZVJlY29yZChkKSx2YWx1ZTI6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKGUpfX0pKX19fSxEZlszXT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDMgbm90IHN1cHBvcnRlZFwifX0sRGZbNF09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA0IG5vdCBzdXBwb3J0ZWRcIn19LERmWzVdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgNSBub3Qgc3VwcG9ydGVkXCJ9fSxEZls2XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDYgbm90IHN1cHBvcnRlZFwifX0sRGZbN109ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA3IG5vdCBzdXBwb3J0ZWRcIn19LERmWzhdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgOCBub3Qgc3VwcG9ydGVkXCJ9fSxEZls5XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDkgbm90IHN1cHBvcnRlZFwifX07dmFyIEVmPW5ldyBBcnJheSgxMCksRmY9e3BhcnNlOllkLG1ha2U6WmR9LEdmPXtwYXJzZTphZX0sSGY9e3BhcnNlOmJlfTthLkZvbnQ9UWQsYS5HbHlwaD1jYSxhLlBhdGg9cixhLkJvdW5kaW5nQm94PXEsYS5fcGFyc2U9TGUsYS5wYXJzZT1oZSxhLmxvYWQ9aWUsYS5sb2FkU3luYz1qZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0pfSkuY2FsbCh0aGlzLGIoXCJidWZmZXJcIikuQnVmZmVyKX0se2J1ZmZlcjozLGZzOjJ9XSwxMTpbZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGUoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gZihhKXtpZihsPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChhLDApO2lmKChsPT09ZHx8IWwpJiZzZXRUaW1lb3V0KXJldHVybiBsPXNldFRpbWVvdXQsc2V0VGltZW91dChhLDApO3RyeXtyZXR1cm4gbChhLDApfWNhdGNoKGIpe3RyeXtyZXR1cm4gbC5jYWxsKG51bGwsYSwwKX1jYXRjaChiKXtyZXR1cm4gbC5jYWxsKHRoaXMsYSwwKX19fWZ1bmN0aW9uIGcoYSl7aWYobT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGEpO2lmKChtPT09ZXx8IW0pJiZjbGVhclRpbWVvdXQpcmV0dXJuIG09Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChhKTt0cnl7cmV0dXJuIG0oYSl9Y2F0Y2goYil7dHJ5e3JldHVybiBtLmNhbGwobnVsbCxhKX1jYXRjaChiKXtyZXR1cm4gbS5jYWxsKHRoaXMsYSl9fX1mdW5jdGlvbiBoKCl7cSYmbyYmKHE9ITEsby5sZW5ndGg/cD1vLmNvbmNhdChwKTpyPS0xLHAubGVuZ3RoJiZpKCkpfWZ1bmN0aW9uIGkoKXtpZighcSl7dmFyIGE9ZihoKTtxPSEwO2Zvcih2YXIgYj1wLmxlbmd0aDtiOyl7Zm9yKG89cCxwPVtdOysrcjxiOylvJiZvW3JdLnJ1bigpO3I9LTEsYj1wLmxlbmd0aH1vPW51bGwscT0hMSxnKGEpfX1mdW5jdGlvbiBqKGEsYil7dGhpcy5mdW49YSx0aGlzLmFycmF5PWJ9ZnVuY3Rpb24gaygpe312YXIgbCxtLG49Yi5leHBvcnRzPXt9OyFmdW5jdGlvbigpe3RyeXtsPVwiZnVuY3Rpb25cIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpkfWNhdGNoKGEpe2w9ZH10cnl7bT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OmV9Y2F0Y2goYSl7bT1lfX0oKTt2YXIgbyxwPVtdLHE9ITEscj0tMTtuLm5leHRUaWNrPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbYy0xXT1hcmd1bWVudHNbY107cC5wdXNoKG5ldyBqKGEsYikpLDEhPT1wLmxlbmd0aHx8cXx8ZihpKX0sai5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sbi50aXRsZT1cImJyb3dzZXJcIixuLmJyb3dzZXI9ITAsbi5lbnY9e30sbi5hcmd2PVtdLG4udmVyc2lvbj1cIlwiLG4udmVyc2lvbnM9e30sbi5vbj1rLG4uYWRkTGlzdGVuZXI9ayxuLm9uY2U9ayxuLm9mZj1rLG4ucmVtb3ZlTGlzdGVuZXI9ayxuLnJlbW92ZUFsbExpc3RlbmVycz1rLG4uZW1pdD1rLG4ucHJlcGVuZExpc3RlbmVyPWssbi5wcmVwZW5kT25jZUxpc3RlbmVyPWssbi5saXN0ZW5lcnM9ZnVuY3Rpb24oYSl7cmV0dXJuW119LG4uYmluZGluZz1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX0sbi5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm5cIi9cIn0sbi5jaGRpcj1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9LG4udW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LHt9XSwxMjpbZnVuY3Rpb24oYSxiLGMpeyFmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGEpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBhJiYoYT1TdHJpbmcoYSkpLC9bXmEtejAtOVxcLSMkJSYnKisuXFxeX2B8fl0vaS50ZXN0KGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZVwiKTtyZXR1cm4gYS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGMoYSl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPVN0cmluZyhhKSksYX1mdW5jdGlvbiBkKGEpe3ZhciBiPXtuZXh0OmZ1bmN0aW9uKCl7dmFyIGI9YS5zaGlmdCgpO3JldHVybntkb25lOnZvaWQgMD09PWIsdmFsdWU6Yn19fTtyZXR1cm4gci5pdGVyYWJsZSYmKGJbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiBifSksYn1mdW5jdGlvbiBlKGEpe3RoaXMubWFwPXt9LGEgaW5zdGFuY2VvZiBlP2EuZm9yRWFjaChmdW5jdGlvbihhLGIpe3RoaXMuYXBwZW5kKGIsYSl9LHRoaXMpOkFycmF5LmlzQXJyYXkoYSk/YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3RoaXMuYXBwZW5kKGFbMF0sYVsxXSl9LHRoaXMpOmEmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLmZvckVhY2goZnVuY3Rpb24oYil7dGhpcy5hcHBlbmQoYixhW2JdKX0sdGhpcyl9ZnVuY3Rpb24gZihhKXtpZihhLmJvZHlVc2VkKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKFwiQWxyZWFkeSByZWFkXCIpKTthLmJvZHlVc2VkPSEwfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGIsYyl7YS5vbmxvYWQ9ZnVuY3Rpb24oKXtiKGEucmVzdWx0KX0sYS5vbmVycm9yPWZ1bmN0aW9uKCl7YyhhLmVycm9yKX19KX1mdW5jdGlvbiBoKGEpe3ZhciBiPW5ldyBGaWxlUmVhZGVyLGM9ZyhiKTtyZXR1cm4gYi5yZWFkQXNBcnJheUJ1ZmZlcihhKSxjfWZ1bmN0aW9uIGkoYSl7dmFyIGI9bmV3IEZpbGVSZWFkZXIsYz1nKGIpO3JldHVybiBiLnJlYWRBc1RleHQoYSksY31mdW5jdGlvbiBqKGEpe2Zvcih2YXIgYj1uZXcgVWludDhBcnJheShhKSxjPW5ldyBBcnJheShiLmxlbmd0aCksZD0wO2Q8Yi5sZW5ndGg7ZCsrKWNbZF09U3RyaW5nLmZyb21DaGFyQ29kZShiW2RdKTtyZXR1cm4gYy5qb2luKFwiXCIpfWZ1bmN0aW9uIGsoYSl7aWYoYS5zbGljZSlyZXR1cm4gYS5zbGljZSgwKTt2YXIgYj1uZXcgVWludDhBcnJheShhLmJ5dGVMZW5ndGgpO3JldHVybiBiLnNldChuZXcgVWludDhBcnJheShhKSksYi5idWZmZXJ9ZnVuY3Rpb24gbCgpe3JldHVybiB0aGlzLmJvZHlVc2VkPSExLHRoaXMuX2luaXRCb2R5PWZ1bmN0aW9uKGEpe2lmKHRoaXMuX2JvZHlJbml0PWEsYSlpZihcInN0cmluZ1wiPT10eXBlb2YgYSl0aGlzLl9ib2R5VGV4dD1hO2Vsc2UgaWYoci5ibG9iJiZCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpKXRoaXMuX2JvZHlCbG9iPWE7ZWxzZSBpZihyLmZvcm1EYXRhJiZGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSl0aGlzLl9ib2R5Rm9ybURhdGE9YTtlbHNlIGlmKHIuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkpdGhpcy5fYm9keVRleHQ9YS50b1N0cmluZygpO2Vsc2UgaWYoci5hcnJheUJ1ZmZlciYmci5ibG9iJiZ0KGEpKXRoaXMuX2JvZHlBcnJheUJ1ZmZlcj1rKGEuYnVmZmVyKSx0aGlzLl9ib2R5SW5pdD1uZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSk7ZWxzZXtpZighci5hcnJheUJ1ZmZlcnx8IUFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpJiYhdShhKSl0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBCb2R5SW5pdCB0eXBlXCIpO3RoaXMuX2JvZHlBcnJheUJ1ZmZlcj1rKGEpfWVsc2UgdGhpcy5fYm9keVRleHQ9XCJcIjt0aGlzLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpfHwoXCJzdHJpbmdcIj09dHlwZW9mIGE/dGhpcy5oZWFkZXJzLnNldChcImNvbnRlbnQtdHlwZVwiLFwidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04XCIpOnRoaXMuX2JvZHlCbG9iJiZ0aGlzLl9ib2R5QmxvYi50eXBlP3RoaXMuaGVhZGVycy5zZXQoXCJjb250ZW50LXR5cGVcIix0aGlzLl9ib2R5QmxvYi50eXBlKTpyLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpJiZ0aGlzLmhlYWRlcnMuc2V0KFwiY29udGVudC10eXBlXCIsXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOFwiKSl9LHIuYmxvYiYmKHRoaXMuYmxvYj1mdW5jdGlvbigpe3ZhciBhPWYodGhpcyk7aWYoYSlyZXR1cm4gYTtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2JcIik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSl9LHRoaXMuYXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm9keUFycmF5QnVmZmVyP2YodGhpcyl8fFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpOnRoaXMuYmxvYigpLnRoZW4oaCl9KSx0aGlzLnRleHQ9ZnVuY3Rpb24oKXt2YXIgYT1mKHRoaXMpO2lmKGEpcmV0dXJuIGE7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIGkodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGoodGhpcy5fYm9keUFycmF5QnVmZmVyKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcihcImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dFwiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KX0sci5mb3JtRGF0YSYmKHRoaXMuZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihvKX0pLHRoaXMuanNvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpfSx0aGlzfWZ1bmN0aW9uIG0oYSl7dmFyIGI9YS50b1VwcGVyQ2FzZSgpO3JldHVybiB2LmluZGV4T2YoYik+LTE/YjphfWZ1bmN0aW9uIG4oYSxiKXtiPWJ8fHt9O3ZhciBjPWIuYm9keTtpZihhIGluc3RhbmNlb2Ygbil7aWYoYS5ib2R5VXNlZCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQWxyZWFkeSByZWFkXCIpO3RoaXMudXJsPWEudXJsLHRoaXMuY3JlZGVudGlhbHM9YS5jcmVkZW50aWFscyxiLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGUoYS5oZWFkZXJzKSksdGhpcy5tZXRob2Q9YS5tZXRob2QsdGhpcy5tb2RlPWEubW9kZSxjfHxudWxsPT1hLl9ib2R5SW5pdHx8KGM9YS5fYm9keUluaXQsYS5ib2R5VXNlZD0hMCl9ZWxzZSB0aGlzLnVybD1TdHJpbmcoYSk7aWYodGhpcy5jcmVkZW50aWFscz1iLmNyZWRlbnRpYWxzfHx0aGlzLmNyZWRlbnRpYWxzfHxcIm9taXRcIiwhYi5oZWFkZXJzJiZ0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGUoYi5oZWFkZXJzKSksdGhpcy5tZXRob2Q9bShiLm1ldGhvZHx8dGhpcy5tZXRob2R8fFwiR0VUXCIpLHRoaXMubW9kZT1iLm1vZGV8fHRoaXMubW9kZXx8bnVsbCx0aGlzLnJlZmVycmVyPW51bGwsKFwiR0VUXCI9PT10aGlzLm1ldGhvZHx8XCJIRUFEXCI9PT10aGlzLm1ldGhvZCkmJmMpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzXCIpO3RoaXMuX2luaXRCb2R5KGMpfWZ1bmN0aW9uIG8oYSl7dmFyIGI9bmV3IEZvcm1EYXRhO3JldHVybiBhLnRyaW0oKS5zcGxpdChcIiZcIikuZm9yRWFjaChmdW5jdGlvbihhKXtpZihhKXt2YXIgYz1hLnNwbGl0KFwiPVwiKSxkPWMuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZyxcIiBcIiksZT1jLmpvaW4oXCI9XCIpLnJlcGxhY2UoL1xcKy9nLFwiIFwiKTtiLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQoZCksZGVjb2RlVVJJQ29tcG9uZW50KGUpKX19KSxifWZ1bmN0aW9uIHAoYSl7dmFyIGI9bmV3IGU7cmV0dXJuIGEuc3BsaXQoL1xccj9cXG4vKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBjPWEuc3BsaXQoXCI6XCIpLGQ9Yy5zaGlmdCgpLnRyaW0oKTtpZihkKXt2YXIgZT1jLmpvaW4oXCI6XCIpLnRyaW0oKTtiLmFwcGVuZChkLGUpfX0pLGJ9ZnVuY3Rpb24gcShhLGIpe2J8fChiPXt9KSx0aGlzLnR5cGU9XCJkZWZhdWx0XCIsdGhpcy5zdGF0dXM9XCJzdGF0dXNcImluIGI/Yi5zdGF0dXM6MjAwLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwLHRoaXMuc3RhdHVzVGV4dD1cInN0YXR1c1RleHRcImluIGI/Yi5zdGF0dXNUZXh0OlwiT0tcIix0aGlzLmhlYWRlcnM9bmV3IGUoYi5oZWFkZXJzKSx0aGlzLnVybD1iLnVybHx8XCJcIix0aGlzLl9pbml0Qm9keShhKX1pZighYS5mZXRjaCl7dmFyIHI9e3NlYXJjaFBhcmFtczpcIlVSTFNlYXJjaFBhcmFtc1wiaW4gYSxpdGVyYWJsZTpcIlN5bWJvbFwiaW4gYSYmXCJpdGVyYXRvclwiaW4gU3ltYm9sLGJsb2I6XCJGaWxlUmVhZGVyXCJpbiBhJiZcIkJsb2JcImluIGEmJmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgQmxvYiwhMH1jYXRjaChhKXtyZXR1cm4hMX19KCksZm9ybURhdGE6XCJGb3JtRGF0YVwiaW4gYSxhcnJheUJ1ZmZlcjpcIkFycmF5QnVmZmVyXCJpbiBhfTtpZihyLmFycmF5QnVmZmVyKXZhciBzPVtcIltvYmplY3QgSW50OEFycmF5XVwiLFwiW29iamVjdCBVaW50OEFycmF5XVwiLFwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIixcIltvYmplY3QgSW50MTZBcnJheV1cIixcIltvYmplY3QgVWludDE2QXJyYXldXCIsXCJbb2JqZWN0IEludDMyQXJyYXldXCIsXCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiLFwiW29iamVjdCBGbG9hdDMyQXJyYXldXCIsXCJbb2JqZWN0IEZsb2F0NjRBcnJheV1cIl0sdD1mdW5jdGlvbihhKXtyZXR1cm4gYSYmRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSl9LHU9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbihhKXtyZXR1cm4gYSYmcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSk+LTF9O2UucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihhLGQpe2E9YihhKSxkPWMoZCk7dmFyIGU9dGhpcy5tYXBbYV07dGhpcy5tYXBbYV09ZT9lK1wiLFwiK2Q6ZH0sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLm1hcFtiKGEpXX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBhPWIoYSksdGhpcy5oYXMoYSk/dGhpcy5tYXBbYV06bnVsbH0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShiKGEpKX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsZCl7dGhpcy5tYXBbYihhKV09YyhkKX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyBpbiB0aGlzLm1hcCl0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShjKSYmYS5jYWxsKGIsdGhpcy5tYXBbY10sYyx0aGlzKX0sZS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oYixjKXthLnB1c2goYyl9KSxkKGEpfSxlLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGIpe2EucHVzaChiKX0pLGQoYSl9LGUucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGIsYyl7YS5wdXNoKFtjLGJdKX0pLGQoYSl9LHIuaXRlcmFibGUmJihlLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWUucHJvdG90eXBlLmVudHJpZXMpO3ZhciB2PVtcIkRFTEVURVwiLFwiR0VUXCIsXCJIRUFEXCIsXCJPUFRJT05TXCIsXCJQT1NUXCIsXCJQVVRcIl07bi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyx7Ym9keTp0aGlzLl9ib2R5SW5pdH0pfSxsLmNhbGwobi5wcm90b3R5cGUpLGwuY2FsbChxLnByb3RvdHlwZSkscS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHEodGhpcy5fYm9keUluaXQse3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnRoaXMuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyBlKHRoaXMuaGVhZGVycyksdXJsOnRoaXMudXJsfSl9LHEuZXJyb3I9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcShudWxsLHtzdGF0dXM6MCxzdGF0dXNUZXh0OlwiXCJ9KTtyZXR1cm4gYS50eXBlPVwiZXJyb3JcIixhfTt2YXIgdz1bMzAxLDMwMiwzMDMsMzA3LDMwOF07cS5yZWRpcmVjdD1mdW5jdGlvbihhLGIpe2lmKC0xPT09dy5pbmRleE9mKGIpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBzdGF0dXMgY29kZVwiKTtyZXR1cm4gbmV3IHEobnVsbCx7c3RhdHVzOmIsaGVhZGVyczp7bG9jYXRpb246YX19KX0sYS5IZWFkZXJzPWUsYS5SZXF1ZXN0PW4sYS5SZXNwb25zZT1xLGEuZmV0Y2g9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYyxkKXt2YXIgZT1uZXcgbihhLGIpLGY9bmV3IFhNTEh0dHBSZXF1ZXN0O2Yub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGE9e3N0YXR1czpmLnN0YXR1cyxzdGF0dXNUZXh0OmYuc3RhdHVzVGV4dCxoZWFkZXJzOnAoZi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKXx8XCJcIil9O2EudXJsPVwicmVzcG9uc2VVUkxcImluIGY/Zi5yZXNwb25zZVVSTDphLmhlYWRlcnMuZ2V0KFwiWC1SZXF1ZXN0LVVSTFwiKTt2YXIgYj1cInJlc3BvbnNlXCJpbiBmP2YucmVzcG9uc2U6Zi5yZXNwb25zZVRleHQ7YyhuZXcgcShiLGEpKX0sZi5vbmVycm9yPWZ1bmN0aW9uKCl7ZChuZXcgVHlwZUVycm9yKFwiTmV0d29yayByZXF1ZXN0IGZhaWxlZFwiKSl9LGYub250aW1lb3V0PWZ1bmN0aW9uKCl7ZChuZXcgVHlwZUVycm9yKFwiTmV0d29yayByZXF1ZXN0IGZhaWxlZFwiKSl9LGYub3BlbihlLm1ldGhvZCxlLnVybCwhMCksXCJpbmNsdWRlXCI9PT1lLmNyZWRlbnRpYWxzJiYoZi53aXRoQ3JlZGVudGlhbHM9ITApLFwicmVzcG9uc2VUeXBlXCJpbiBmJiZyLmJsb2ImJihmLnJlc3BvbnNlVHlwZT1cImJsb2JcIiksZS5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oYSxiKXtmLnNldFJlcXVlc3RIZWFkZXIoYixhKX0pLGYuc2VuZCh2b2lkIDA9PT1lLl9ib2R5SW5pdD9udWxsOmUuX2JvZHlJbml0KX0pfSxhLmZldGNoLnBvbHlmaWxsPSEwfX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzKX0se31dLDEzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vY29yZS9tYWluXCIpO2EoXCIuL2NvcmUvY29uc3RhbnRzXCIpLGEoXCIuL2NvcmUvZW52aXJvbm1lbnRcIiksYShcIi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGEoXCIuL2NvcmUvaGVscGVyc1wiKSxhKFwiLi9jb3JlL2xlZ2FjeVwiKSxhKFwiLi9jb3JlL3A1LkVsZW1lbnRcIiksYShcIi4vY29yZS9wNS5HcmFwaGljc1wiKSxhKFwiLi9jb3JlL3A1LlJlbmRlcmVyXCIpLGEoXCIuL2NvcmUvcDUuUmVuZGVyZXIyRFwiKSxhKFwiLi9jb3JlL3JlbmRlcmluZ1wiKSxhKFwiLi9jb3JlL3NoaW1cIiksYShcIi4vY29yZS9zdHJ1Y3R1cmVcIiksYShcIi4vY29yZS90cmFuc2Zvcm1cIiksYShcIi4vY29yZS9zaGFwZS8yZF9wcmltaXRpdmVzXCIpLGEoXCIuL2NvcmUvc2hhcGUvYXR0cmlidXRlc1wiKSxhKFwiLi9jb3JlL3NoYXBlL2N1cnZlc1wiKSxhKFwiLi9jb3JlL3NoYXBlL3ZlcnRleFwiKSxhKFwiLi9jb2xvci9jb2xvcl9jb252ZXJzaW9uXCIpLGEoXCIuL2NvbG9yL2NyZWF0aW5nX3JlYWRpbmdcIiksYShcIi4vY29sb3IvcDUuQ29sb3JcIiksYShcIi4vY29sb3Ivc2V0dGluZ1wiKSxhKFwiLi9kYXRhL3A1LlR5cGVkRGljdFwiKSxhKFwiLi9ldmVudHMvYWNjZWxlcmF0aW9uXCIpLGEoXCIuL2V2ZW50cy9rZXlib2FyZFwiKSxhKFwiLi9ldmVudHMvbW91c2VcIiksYShcIi4vZXZlbnRzL3RvdWNoXCIpLGEoXCIuL2ltYWdlL2ZpbHRlcnNcIiksYShcIi4vaW1hZ2UvaW1hZ2VcIiksYShcIi4vaW1hZ2UvbG9hZGluZ19kaXNwbGF5aW5nXCIpLGEoXCIuL2ltYWdlL3A1LkltYWdlXCIpLGEoXCIuL2ltYWdlL3BpeGVsc1wiKSxhKFwiLi9pby9maWxlc1wiKSxhKFwiLi9pby9wNS5UYWJsZVwiKSxhKFwiLi9pby9wNS5UYWJsZVJvd1wiKSxhKFwiLi9pby9wNS5YTUxcIiksYShcIi4vbWF0aC9jYWxjdWxhdGlvblwiKSxhKFwiLi9tYXRoL21hdGhcIiksYShcIi4vbWF0aC9ub2lzZVwiKSxhKFwiLi9tYXRoL3A1LlZlY3RvclwiKSxhKFwiLi9tYXRoL3JhbmRvbVwiKSxhKFwiLi9tYXRoL3RyaWdvbm9tZXRyeVwiKSxhKFwiLi90eXBvZ3JhcGh5L2F0dHJpYnV0ZXNcIiksYShcIi4vdHlwb2dyYXBoeS9sb2FkaW5nX2Rpc3BsYXlpbmdcIiksYShcIi4vdHlwb2dyYXBoeS9wNS5Gb250XCIpLGEoXCIuL3V0aWxpdGllcy9hcnJheV9mdW5jdGlvbnNcIiksYShcIi4vdXRpbGl0aWVzL2NvbnZlcnNpb25cIiksYShcIi4vdXRpbGl0aWVzL3N0cmluZ19mdW5jdGlvbnNcIiksYShcIi4vdXRpbGl0aWVzL3RpbWVfZGF0ZVwiKSxhKFwiLi93ZWJnbC8zZF9wcmltaXRpdmVzXCIpLGEoXCIuL3dlYmdsL2ludGVyYWN0aW9uXCIpLGEoXCIuL3dlYmdsL2xpZ2h0XCIpLGEoXCIuL3dlYmdsL2xvYWRpbmdcIiksYShcIi4vd2ViZ2wvbWF0ZXJpYWxcIiksYShcIi4vd2ViZ2wvcDUuQ2FtZXJhXCIpLGEoXCIuL3dlYmdsL3A1Lkdlb21ldHJ5XCIpLGEoXCIuL3dlYmdsL3A1Lk1hdHJpeFwiKSxhKFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLkltbWVkaWF0ZVwiKSxhKFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMXCIpLGEoXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuUmV0YWluZWRcIiksYShcIi4vd2ViZ2wvcDUuU2hhZGVyXCIpLGEoXCIuL3dlYmdsL3A1LlRleHR1cmVcIiksYShcIi4vd2ViZ2wvdGV4dFwiKSxhKFwiLi9jb3JlL2luaXRcIiksYi5leHBvcnRzPWR9LHtcIi4vY29sb3IvY29sb3JfY29udmVyc2lvblwiOjE0LFwiLi9jb2xvci9jcmVhdGluZ19yZWFkaW5nXCI6MTUsXCIuL2NvbG9yL3A1LkNvbG9yXCI6MTYsXCIuL2NvbG9yL3NldHRpbmdcIjoxNyxcIi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4vY29yZS9lbnZpcm9ubWVudFwiOjE5LFwiLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4vY29yZS9oZWxwZXJzXCI6MjEsXCIuL2NvcmUvaW5pdFwiOjIyLFwiLi9jb3JlL2xlZ2FjeVwiOjIzLFwiLi9jb3JlL21haW5cIjoyNCxcIi4vY29yZS9wNS5FbGVtZW50XCI6MjUsXCIuL2NvcmUvcDUuR3JhcGhpY3NcIjoyNixcIi4vY29yZS9wNS5SZW5kZXJlclwiOjI3LFwiLi9jb3JlL3A1LlJlbmRlcmVyMkRcIjoyOCxcIi4vY29yZS9yZW5kZXJpbmdcIjoyOSxcIi4vY29yZS9zaGFwZS8yZF9wcmltaXRpdmVzXCI6MzAsXCIuL2NvcmUvc2hhcGUvYXR0cmlidXRlc1wiOjMxLFwiLi9jb3JlL3NoYXBlL2N1cnZlc1wiOjMyLFwiLi9jb3JlL3NoYXBlL3ZlcnRleFwiOjMzLFwiLi9jb3JlL3NoaW1cIjozNCxcIi4vY29yZS9zdHJ1Y3R1cmVcIjozNSxcIi4vY29yZS90cmFuc2Zvcm1cIjozNixcIi4vZGF0YS9wNS5UeXBlZERpY3RcIjozNyxcIi4vZXZlbnRzL2FjY2VsZXJhdGlvblwiOjM4LFwiLi9ldmVudHMva2V5Ym9hcmRcIjozOSxcIi4vZXZlbnRzL21vdXNlXCI6NDAsXCIuL2V2ZW50cy90b3VjaFwiOjQxLFwiLi9pbWFnZS9maWx0ZXJzXCI6NDIsXCIuL2ltYWdlL2ltYWdlXCI6NDMsXCIuL2ltYWdlL2xvYWRpbmdfZGlzcGxheWluZ1wiOjQ0LFwiLi9pbWFnZS9wNS5JbWFnZVwiOjQ1LFwiLi9pbWFnZS9waXhlbHNcIjo0NixcIi4vaW8vZmlsZXNcIjo0NyxcIi4vaW8vcDUuVGFibGVcIjo0OCxcIi4vaW8vcDUuVGFibGVSb3dcIjo0OSxcIi4vaW8vcDUuWE1MXCI6NTAsXCIuL21hdGgvY2FsY3VsYXRpb25cIjo1MSxcIi4vbWF0aC9tYXRoXCI6NTIsXCIuL21hdGgvbm9pc2VcIjo1MyxcIi4vbWF0aC9wNS5WZWN0b3JcIjo1NCxcIi4vbWF0aC9yYW5kb21cIjo1NSxcIi4vbWF0aC90cmlnb25vbWV0cnlcIjo1NixcIi4vdHlwb2dyYXBoeS9hdHRyaWJ1dGVzXCI6NTcsXCIuL3R5cG9ncmFwaHkvbG9hZGluZ19kaXNwbGF5aW5nXCI6NTgsXCIuL3R5cG9ncmFwaHkvcDUuRm9udFwiOjU5LFwiLi91dGlsaXRpZXMvYXJyYXlfZnVuY3Rpb25zXCI6NjAsXCIuL3V0aWxpdGllcy9jb252ZXJzaW9uXCI6NjEsXCIuL3V0aWxpdGllcy9zdHJpbmdfZnVuY3Rpb25zXCI6NjIsXCIuL3V0aWxpdGllcy90aW1lX2RhdGVcIjo2MyxcIi4vd2ViZ2wvM2RfcHJpbWl0aXZlc1wiOjY0LFwiLi93ZWJnbC9pbnRlcmFjdGlvblwiOjY1LFwiLi93ZWJnbC9saWdodFwiOjY2LFwiLi93ZWJnbC9sb2FkaW5nXCI6NjcsXCIuL3dlYmdsL21hdGVyaWFsXCI6NjgsXCIuL3dlYmdsL3A1LkNhbWVyYVwiOjY5LFwiLi93ZWJnbC9wNS5HZW9tZXRyeVwiOjcwLFwiLi93ZWJnbC9wNS5NYXRyaXhcIjo3MSxcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTFwiOjc0LFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLkltbWVkaWF0ZVwiOjcyLFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLlJldGFpbmVkXCI6NzMsXCIuL3dlYmdsL3A1LlNoYWRlclwiOjc1LFwiLi93ZWJnbC9wNS5UZXh0dXJlXCI6NzYsXCIuL3dlYmdsL3RleHRcIjo3N31dLDE0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLkNvbG9yQ29udmVyc2lvbj17fSxkLkNvbG9yQ29udmVyc2lvbi5faHNiYVRvSFNMQT1mdW5jdGlvbihhKXt2YXIgYj1hWzBdLGM9YVsxXSxkPWFbMl0sZT0oMi1jKSpkLzI7cmV0dXJuIDAhPT1lJiYoMT09PWU/Yz0wOmU8LjU/Yy89Mi1jOmM9YypkLygyLTIqZSkpLFtiLGMsZSxhWzNdXX0sZC5Db2xvckNvbnZlcnNpb24uX2hzYmFUb1JHQkE9ZnVuY3Rpb24oYSl7dmFyIGI9NiphWzBdLGM9YVsxXSxkPWFbMl0sZT1bXTtpZigwPT09YyllPVtkLGQsZCxhWzNdXTtlbHNle3ZhciBmLGcsaCxpPU1hdGguZmxvb3IoYiksaj1kKigxLWMpLGs9ZCooMS1jKihiLWkpKSxsPWQqKDEtYyooMStpLWIpKTsxPT09aT8oZj1rLGc9ZCxoPWopOjI9PT1pPyhmPWosZz1kLGg9bCk6Mz09PWk/KGY9aixnPWssaD1kKTo0PT09aT8oZj1sLGc9aixoPWQpOjU9PT1pPyhmPWQsZz1qLGg9ayk6KGY9ZCxnPWwsaD1qKSxlPVtmLGcsaCxhWzNdXX1yZXR1cm4gZX0sZC5Db2xvckNvbnZlcnNpb24uX2hzbGFUb0hTQkE9ZnVuY3Rpb24oYSl7dmFyIGIsYz1hWzBdLGQ9YVsxXSxlPWFbMl07cmV0dXJuIGI9ZTwuNT8oMStkKSplOmUrZC1lKmQsZD0yKihiLWUpL2IsW2MsZCxiLGFbM11dfSxkLkNvbG9yQ29udmVyc2lvbi5faHNsYVRvUkdCQT1mdW5jdGlvbihhKXt2YXIgYj02KmFbMF0sYz1hWzFdLGQ9YVsyXSxlPVtdO2lmKDA9PT1jKWU9W2QsZCxkLGFbM11dO2Vsc2V7dmFyIGY7Zj1kPC41PygxK2MpKmQ6ZCtjLWQqYzt2YXIgZz0yKmQtZixoPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYTwwP2ErPTY6YT49NiYmKGEtPTYpLGE8MT9iKyhjLWIpKmE6YTwzP2M6YTw0P2IrKGMtYikqKDQtYSk6Yn07ZT1baChiKzIsZyxmKSxoKGIsZyxmKSxoKGItMixnLGYpLGFbM11dfXJldHVybiBlfSxkLkNvbG9yQ29udmVyc2lvbi5fcmdiYVRvSFNCQT1mdW5jdGlvbihhKXt2YXIgYixjLGQ9YVswXSxlPWFbMV0sZj1hWzJdLGc9TWF0aC5tYXgoZCxlLGYpLGg9Zy1NYXRoLm1pbihkLGUsZik7cmV0dXJuIDA9PT1oPyhiPTAsYz0wKTooYz1oL2csZD09PWc/Yj0oZS1mKS9oOmU9PT1nP2I9MisoZi1kKS9oOmY9PT1nJiYoYj00KyhkLWUpL2gpLGI8MD9iKz02OmI+PTYmJihiLT02KSksW2IvNixjLGcsYVszXV19LGQuQ29sb3JDb252ZXJzaW9uLl9yZ2JhVG9IU0xBPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hWzBdLGU9YVsxXSxmPWFbMl0sZz1NYXRoLm1heChkLGUsZiksaD1NYXRoLm1pbihkLGUsZiksaT1nK2gsaj1nLWg7cmV0dXJuIDA9PT1qPyhiPTAsYz0wKTooYz1pPDE/ai9pOmovKDItaSksZD09PWc/Yj0oZS1mKS9qOmU9PT1nP2I9MisoZi1kKS9qOmY9PT1nJiYoYj00KyhkLWUpL2opLGI8MD9iKz02OmI+PTYmJihiLT02KSksW2IvNixjLGkvMixhWzNdXX0sYi5leHBvcnRzPWQuQ29sb3JDb252ZXJzaW9ufSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDE1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi9wNS5Db2xvclwiKSxhKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGQucHJvdG90eXBlLmFscGhhPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJhbHBoYVwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0QWxwaGEoKX0sZC5wcm90b3R5cGUuYmx1ZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmx1ZVwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0Qmx1ZSgpfSxkLnByb3RvdHlwZS5icmlnaHRuZXNzPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJicmlnaHRuZXNzXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRCcmlnaHRuZXNzKCl9LGQucHJvdG90eXBlLmNvbG9yPWZ1bmN0aW9uKCl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29sb3JcIixhcmd1bWVudHMpLGFyZ3VtZW50c1swXWluc3RhbmNlb2YgZC5Db2xvcilyZXR1cm4gYXJndW1lbnRzWzBdO3ZhciBhPWFyZ3VtZW50c1swXWluc3RhbmNlb2YgQXJyYXk/YXJndW1lbnRzWzBdOmFyZ3VtZW50cztyZXR1cm4gbmV3IGQuQ29sb3IodGhpcyxhKX0sZC5wcm90b3R5cGUuZ3JlZW49ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImdyZWVuXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRHcmVlbigpfSxkLnByb3RvdHlwZS5odWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImh1ZVwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0SHVlKCl9LGQucHJvdG90eXBlLmxlcnBDb2xvcj1mdW5jdGlvbihhLGIsYyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibGVycENvbG9yXCIsYXJndW1lbnRzKTt2YXIgZixnLGgsaSxqLGssbD10aGlzLl9jb2xvck1vZGUsbT10aGlzLl9jb2xvck1heGVzO2lmKGw9PT1lLlJHQilqPWEubGV2ZWxzLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS8yNTV9KSxrPWIubGV2ZWxzLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS8yNTV9KTtlbHNlIGlmKGw9PT1lLkhTQilhLl9nZXRCcmlnaHRuZXNzKCksYi5fZ2V0QnJpZ2h0bmVzcygpLGo9YS5oc2JhLGs9Yi5oc2JhO2Vsc2V7aWYobCE9PWUuSFNMKXRocm93IG5ldyBFcnJvcihsK1wiY2Fubm90IGJlIHVzZWQgZm9yIGludGVycG9sYXRpb24uXCIpO2EuX2dldExpZ2h0bmVzcygpLGIuX2dldExpZ2h0bmVzcygpLGo9YS5oc2xhLGs9Yi5oc2xhfXJldHVybiBjPU1hdGgubWF4KE1hdGgubWluKGMsMSksMCksdm9pZCAwPT09dGhpcy5sZXJwJiYodGhpcy5sZXJwPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYyooYi1hKSthfSksZj10aGlzLmxlcnAoalswXSxrWzBdLGMpLGc9dGhpcy5sZXJwKGpbMV0sa1sxXSxjKSxoPXRoaXMubGVycChqWzJdLGtbMl0sYyksaT10aGlzLmxlcnAoalszXSxrWzNdLGMpLGYqPW1bbF1bMF0sZyo9bVtsXVsxXSxoKj1tW2xdWzJdLGkqPW1bbF1bM10sdGhpcy5jb2xvcihmLGcsaCxpKX0sZC5wcm90b3R5cGUubGlnaHRuZXNzPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsaWdodG5lc3NcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldExpZ2h0bmVzcygpfSxkLnByb3RvdHlwZS5yZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlZFwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0UmVkKCl9LGQucHJvdG90eXBlLnNhdHVyYXRpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdHVyYXRpb25cIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldFNhdHVyYXRpb24oKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5Db2xvclwiOjE2fV0sMTY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpLGY9YShcIi4vY29sb3JfY29udmVyc2lvblwiKTtkLkNvbG9yPWZ1bmN0aW9uKGEsYil7aWYodGhpcy5fc3RvcmVNb2RlQW5kTWF4ZXMoYS5fY29sb3JNb2RlLGEuX2NvbG9yTWF4ZXMpLHRoaXMubW9kZSE9PWUuUkdCJiZ0aGlzLm1vZGUhPT1lLkhTTCYmdGhpcy5tb2RlIT09ZS5IU0IpdGhyb3cgbmV3IEVycm9yKHRoaXMubW9kZStcIiBpcyBhbiBpbnZhbGlkIGNvbG9yTW9kZS5cIik7cmV0dXJuIHRoaXMuX2FycmF5PWQuQ29sb3IuX3BhcnNlSW5wdXRzLmFwcGx5KHRoaXMsYiksdGhpcy5fY2FsY3VsYXRlTGV2ZWxzKCksdGhpc30sZC5Db2xvci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYSl7dGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzbGF8fCh0aGlzLmhzbGE9Zi5fcmdiYVRvSFNMQSh0aGlzLl9hcnJheSkpO3ZhciBiPXRoaXMubGV2ZWxzLGM9dGhpcy5fYXJyYXksZD1jWzNdO3N3aXRjaChhKXtjYXNlXCIjcnJnZ2JiXCI6cmV0dXJuXCIjXCIuY29uY2F0KGJbMF08MTY/XCIwXCIuY29uY2F0KGJbMF0udG9TdHJpbmcoMTYpKTpiWzBdLnRvU3RyaW5nKDE2KSxiWzFdPDE2P1wiMFwiLmNvbmNhdChiWzFdLnRvU3RyaW5nKDE2KSk6YlsxXS50b1N0cmluZygxNiksYlsyXTwxNj9cIjBcIi5jb25jYXQoYlsyXS50b1N0cmluZygxNikpOmJbMl0udG9TdHJpbmcoMTYpKTtjYXNlXCIjcnJnZ2JiYWFcIjpyZXR1cm5cIiNcIi5jb25jYXQoYlswXTwxNj9cIjBcIi5jb25jYXQoYlswXS50b1N0cmluZygxNikpOmJbMF0udG9TdHJpbmcoMTYpLGJbMV08MTY/XCIwXCIuY29uY2F0KGJbMV0udG9TdHJpbmcoMTYpKTpiWzFdLnRvU3RyaW5nKDE2KSxiWzJdPDE2P1wiMFwiLmNvbmNhdChiWzJdLnRvU3RyaW5nKDE2KSk6YlsyXS50b1N0cmluZygxNiksYlszXTwxNj9cIjBcIi5jb25jYXQoYlsyXS50b1N0cmluZygxNikpOmJbM10udG9TdHJpbmcoMTYpKTtjYXNlXCIjcmdiXCI6cmV0dXJuXCIjXCIuY29uY2F0KE1hdGgucm91bmQoMTUqY1swXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1sxXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1syXSkudG9TdHJpbmcoMTYpKTtjYXNlXCIjcmdiYVwiOnJldHVyblwiI1wiLmNvbmNhdChNYXRoLnJvdW5kKDE1KmNbMF0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbMV0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbMl0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbM10pLnRvU3RyaW5nKDE2KSk7Y2FzZVwicmdiXCI6cmV0dXJuXCJyZ2IoXCIuY29uY2F0KGJbMF0sXCIsIFwiLGJbMV0sXCIsIFwiLGJbMl0sXCIpXCIpO2Nhc2VcInJnYiVcIjpyZXR1cm5cInJnYihcIi5jb25jYXQoKDEwMCpjWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1sxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwicmdiYSVcIjpyZXR1cm5cInJnYmEoXCIuY29uY2F0KCgxMDAqY1swXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzJdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1szXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2JcIjpjYXNlXCJoc3ZcIjpyZXR1cm5cImhzYihcIi5jb25jYXQodGhpcy5oc2JhWzBdKnRoaXMubWF4ZXNbZS5IU0JdWzBdLFwiLCBcIix0aGlzLmhzYmFbMV0qdGhpcy5tYXhlc1tlLkhTQl1bMV0sXCIsIFwiLHRoaXMuaHNiYVsyXSp0aGlzLm1heGVzW2UuSFNCXVsyXSxcIilcIik7Y2FzZVwiaHNiJVwiOmNhc2VcImhzdiVcIjpyZXR1cm5cImhzYihcIi5jb25jYXQoKDEwMCp0aGlzLmhzYmFbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwiaHNiYVwiOmNhc2VcImhzdmFcIjpyZXR1cm5cImhzYmEoXCIuY29uY2F0KHRoaXMuaHNiYVswXSp0aGlzLm1heGVzW2UuSFNCXVswXSxcIiwgXCIsdGhpcy5oc2JhWzFdKnRoaXMubWF4ZXNbZS5IU0JdWzFdLFwiLCBcIix0aGlzLmhzYmFbMl0qdGhpcy5tYXhlc1tlLkhTQl1bMl0sXCIsIFwiLGQsXCIpXCIpO2Nhc2VcImhzYmElXCI6Y2FzZVwiaHN2YSVcIjpyZXR1cm5cImhzYmEoXCIuY29uY2F0KCgxMDAqdGhpcy5oc2JhWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2JhWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2JhWzJdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqZCkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2xcIjpyZXR1cm5cImhzbChcIi5jb25jYXQodGhpcy5oc2xhWzBdKnRoaXMubWF4ZXNbZS5IU0xdWzBdLFwiLCBcIix0aGlzLmhzbGFbMV0qdGhpcy5tYXhlc1tlLkhTTF1bMV0sXCIsIFwiLHRoaXMuaHNsYVsyXSp0aGlzLm1heGVzW2UuSFNMXVsyXSxcIilcIik7Y2FzZVwiaHNsJVwiOnJldHVyblwiaHNsKFwiLmNvbmNhdCgoMTAwKnRoaXMuaHNsYVswXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsyXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2xhXCI6cmV0dXJuXCJoc2xhKFwiLmNvbmNhdCh0aGlzLmhzbGFbMF0qdGhpcy5tYXhlc1tlLkhTTF1bMF0sXCIsIFwiLHRoaXMuaHNsYVsxXSp0aGlzLm1heGVzW2UuSFNMXVsxXSxcIiwgXCIsdGhpcy5oc2xhWzJdKnRoaXMubWF4ZXNbZS5IU0xdWzJdLFwiLCBcIixkLFwiKVwiKTtjYXNlXCJoc2xhJVwiOnJldHVyblwiaHNsKFwiLmNvbmNhdCgoMTAwKnRoaXMuaHNsYVswXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsyXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmQpLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwicmdiYVwiOmRlZmF1bHQ6cmV0dXJuXCJyZ2JhKFwiK2JbMF0rXCIsXCIrYlsxXStcIixcIitiWzJdK1wiLFwiK2QrXCIpXCJ9fSxkLkNvbG9yLnByb3RvdHlwZS5zZXRSZWQ9ZnVuY3Rpb24oYSl7dGhpcy5fYXJyYXlbMF09YS90aGlzLm1heGVzW2UuUkdCXVswXSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKX0sZC5Db2xvci5wcm90b3R5cGUuc2V0R3JlZW49ZnVuY3Rpb24oYSl7dGhpcy5fYXJyYXlbMV09YS90aGlzLm1heGVzW2UuUkdCXVsxXSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKX0sZC5Db2xvci5wcm90b3R5cGUuc2V0Qmx1ZT1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVsyXT1hL3RoaXMubWF4ZXNbZS5SR0JdWzJdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5zZXRBbHBoYT1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVszXT1hL3RoaXMubWF4ZXNbdGhpcy5tb2RlXVszXSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKX0sZC5Db2xvci5wcm90b3R5cGUuX2NhbGN1bGF0ZUxldmVscz1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9hcnJheSxiPXRoaXMubGV2ZWxzPW5ldyBBcnJheShhLmxlbmd0aCksYz1hLmxlbmd0aC0xO2M+PTA7LS1jKWJbY109TWF0aC5yb3VuZCgyNTUqYVtjXSl9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRBbHBoYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheVszXSp0aGlzLm1heGVzW3RoaXMubW9kZV1bM119LGQuQ29sb3IucHJvdG90eXBlLl9zdG9yZU1vZGVBbmRNYXhlcz1mdW5jdGlvbihhLGIpe3RoaXMubW9kZT1hLHRoaXMubWF4ZXM9Yn0sZC5Db2xvci5wcm90b3R5cGUuX2dldE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0TWF4ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXhlc30sZC5Db2xvci5wcm90b3R5cGUuX2dldEJsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXlbMl0qdGhpcy5tYXhlc1tlLlJHQl1bMl19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRCcmlnaHRuZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHNiYXx8KHRoaXMuaHNiYT1mLl9yZ2JhVG9IU0JBKHRoaXMuX2FycmF5KSksdGhpcy5oc2JhWzJdKnRoaXMubWF4ZXNbZS5IU0JdWzJdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0R3JlZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXlbMV0qdGhpcy5tYXhlc1tlLlJHQl1bMV19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRIdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlPT09ZS5IU0I/KHRoaXMuaHNiYXx8KHRoaXMuaHNiYT1mLl9yZ2JhVG9IU0JBKHRoaXMuX2FycmF5KSksdGhpcy5oc2JhWzBdKnRoaXMubWF4ZXNbZS5IU0JdWzBdKToodGhpcy5oc2xhfHwodGhpcy5oc2xhPWYuX3JnYmFUb0hTTEEodGhpcy5fYXJyYXkpKSx0aGlzLmhzbGFbMF0qdGhpcy5tYXhlc1tlLkhTTF1bMF0pfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0TGlnaHRuZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHNsYXx8KHRoaXMuaHNsYT1mLl9yZ2JhVG9IU0xBKHRoaXMuX2FycmF5KSksdGhpcy5oc2xhWzJdKnRoaXMubWF4ZXNbZS5IU0xdWzJdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0UmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5WzBdKnRoaXMubWF4ZXNbZS5SR0JdWzBdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0U2F0dXJhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGU9PT1lLkhTQj8odGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzYmFbMV0qdGhpcy5tYXhlc1tlLkhTQl1bMV0pOih0aGlzLmhzbGF8fCh0aGlzLmhzbGE9Zi5fcmdiYVRvSFNMQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNsYVsxXSp0aGlzLm1heGVzW2UuSFNMXVsxXSl9O3ZhciBnPXthbGljZWJsdWU6XCIjZjBmOGZmXCIsYW50aXF1ZXdoaXRlOlwiI2ZhZWJkN1wiLGFxdWE6XCIjMDBmZmZmXCIsYXF1YW1hcmluZTpcIiM3ZmZmZDRcIixhenVyZTpcIiNmMGZmZmZcIixiZWlnZTpcIiNmNWY1ZGNcIixiaXNxdWU6XCIjZmZlNGM0XCIsYmxhY2s6XCIjMDAwMDAwXCIsYmxhbmNoZWRhbG1vbmQ6XCIjZmZlYmNkXCIsYmx1ZTpcIiMwMDAwZmZcIixibHVldmlvbGV0OlwiIzhhMmJlMlwiLGJyb3duOlwiI2E1MmEyYVwiLGJ1cmx5d29vZDpcIiNkZWI4ODdcIixjYWRldGJsdWU6XCIjNWY5ZWEwXCIsY2hhcnRyZXVzZTpcIiM3ZmZmMDBcIixjaG9jb2xhdGU6XCIjZDI2OTFlXCIsY29yYWw6XCIjZmY3ZjUwXCIsY29ybmZsb3dlcmJsdWU6XCIjNjQ5NWVkXCIsY29ybnNpbGs6XCIjZmZmOGRjXCIsY3JpbXNvbjpcIiNkYzE0M2NcIixjeWFuOlwiIzAwZmZmZlwiLGRhcmtibHVlOlwiIzAwMDA4YlwiLGRhcmtjeWFuOlwiIzAwOGI4YlwiLGRhcmtnb2xkZW5yb2Q6XCIjYjg4NjBiXCIsZGFya2dyYXk6XCIjYTlhOWE5XCIsZGFya2dyZWVuOlwiIzAwNjQwMFwiLGRhcmtncmV5OlwiI2E5YTlhOVwiLGRhcmtraGFraTpcIiNiZGI3NmJcIixkYXJrbWFnZW50YTpcIiM4YjAwOGJcIixkYXJrb2xpdmVncmVlbjpcIiM1NTZiMmZcIixkYXJrb3JhbmdlOlwiI2ZmOGMwMFwiLGRhcmtvcmNoaWQ6XCIjOTkzMmNjXCIsZGFya3JlZDpcIiM4YjAwMDBcIixkYXJrc2FsbW9uOlwiI2U5OTY3YVwiLGRhcmtzZWFncmVlbjpcIiM4ZmJjOGZcIixkYXJrc2xhdGVibHVlOlwiIzQ4M2Q4YlwiLGRhcmtzbGF0ZWdyYXk6XCIjMmY0ZjRmXCIsZGFya3NsYXRlZ3JleTpcIiMyZjRmNGZcIixkYXJrdHVycXVvaXNlOlwiIzAwY2VkMVwiLGRhcmt2aW9sZXQ6XCIjOTQwMGQzXCIsZGVlcHBpbms6XCIjZmYxNDkzXCIsZGVlcHNreWJsdWU6XCIjMDBiZmZmXCIsZGltZ3JheTpcIiM2OTY5NjlcIixkaW1ncmV5OlwiIzY5Njk2OVwiLGRvZGdlcmJsdWU6XCIjMWU5MGZmXCIsZmlyZWJyaWNrOlwiI2IyMjIyMlwiLGZsb3JhbHdoaXRlOlwiI2ZmZmFmMFwiLGZvcmVzdGdyZWVuOlwiIzIyOGIyMlwiLGZ1Y2hzaWE6XCIjZmYwMGZmXCIsZ2FpbnNib3JvOlwiI2RjZGNkY1wiLGdob3N0d2hpdGU6XCIjZjhmOGZmXCIsZ29sZDpcIiNmZmQ3MDBcIixnb2xkZW5yb2Q6XCIjZGFhNTIwXCIsZ3JheTpcIiM4MDgwODBcIixncmVlbjpcIiMwMDgwMDBcIixncmVlbnllbGxvdzpcIiNhZGZmMmZcIixncmV5OlwiIzgwODA4MFwiLGhvbmV5ZGV3OlwiI2YwZmZmMFwiLGhvdHBpbms6XCIjZmY2OWI0XCIsaW5kaWFucmVkOlwiI2NkNWM1Y1wiLGluZGlnbzpcIiM0YjAwODJcIixpdm9yeTpcIiNmZmZmZjBcIixraGFraTpcIiNmMGU2OGNcIixsYXZlbmRlcjpcIiNlNmU2ZmFcIixsYXZlbmRlcmJsdXNoOlwiI2ZmZjBmNVwiLGxhd25ncmVlbjpcIiM3Y2ZjMDBcIixsZW1vbmNoaWZmb246XCIjZmZmYWNkXCIsbGlnaHRibHVlOlwiI2FkZDhlNlwiLGxpZ2h0Y29yYWw6XCIjZjA4MDgwXCIsbGlnaHRjeWFuOlwiI2UwZmZmZlwiLGxpZ2h0Z29sZGVucm9keWVsbG93OlwiI2ZhZmFkMlwiLGxpZ2h0Z3JheTpcIiNkM2QzZDNcIixsaWdodGdyZWVuOlwiIzkwZWU5MFwiLGxpZ2h0Z3JleTpcIiNkM2QzZDNcIixsaWdodHBpbms6XCIjZmZiNmMxXCIsbGlnaHRzYWxtb246XCIjZmZhMDdhXCIsbGlnaHRzZWFncmVlbjpcIiMyMGIyYWFcIixsaWdodHNreWJsdWU6XCIjODdjZWZhXCIsbGlnaHRzbGF0ZWdyYXk6XCIjNzc4ODk5XCIsbGlnaHRzbGF0ZWdyZXk6XCIjNzc4ODk5XCIsbGlnaHRzdGVlbGJsdWU6XCIjYjBjNGRlXCIsbGlnaHR5ZWxsb3c6XCIjZmZmZmUwXCIsbGltZTpcIiMwMGZmMDBcIixsaW1lZ3JlZW46XCIjMzJjZDMyXCIsbGluZW46XCIjZmFmMGU2XCIsbWFnZW50YTpcIiNmZjAwZmZcIixtYXJvb246XCIjODAwMDAwXCIsbWVkaXVtYXF1YW1hcmluZTpcIiM2NmNkYWFcIixtZWRpdW1ibHVlOlwiIzAwMDBjZFwiLG1lZGl1bW9yY2hpZDpcIiNiYTU1ZDNcIixtZWRpdW1wdXJwbGU6XCIjOTM3MGRiXCIsbWVkaXVtc2VhZ3JlZW46XCIjM2NiMzcxXCIsbWVkaXVtc2xhdGVibHVlOlwiIzdiNjhlZVwiLG1lZGl1bXNwcmluZ2dyZWVuOlwiIzAwZmE5YVwiLG1lZGl1bXR1cnF1b2lzZTpcIiM0OGQxY2NcIixtZWRpdW12aW9sZXRyZWQ6XCIjYzcxNTg1XCIsbWlkbmlnaHRibHVlOlwiIzE5MTk3MFwiLG1pbnRjcmVhbTpcIiNmNWZmZmFcIixtaXN0eXJvc2U6XCIjZmZlNGUxXCIsbW9jY2FzaW46XCIjZmZlNGI1XCIsbmF2YWpvd2hpdGU6XCIjZmZkZWFkXCIsbmF2eTpcIiMwMDAwODBcIixvbGRsYWNlOlwiI2ZkZjVlNlwiLG9saXZlOlwiIzgwODAwMFwiLG9saXZlZHJhYjpcIiM2YjhlMjNcIixvcmFuZ2U6XCIjZmZhNTAwXCIsb3JhbmdlcmVkOlwiI2ZmNDUwMFwiLG9yY2hpZDpcIiNkYTcwZDZcIixwYWxlZ29sZGVucm9kOlwiI2VlZThhYVwiLHBhbGVncmVlbjpcIiM5OGZiOThcIixwYWxldHVycXVvaXNlOlwiI2FmZWVlZVwiLHBhbGV2aW9sZXRyZWQ6XCIjZGI3MDkzXCIscGFwYXlhd2hpcDpcIiNmZmVmZDVcIixwZWFjaHB1ZmY6XCIjZmZkYWI5XCIscGVydTpcIiNjZDg1M2ZcIixwaW5rOlwiI2ZmYzBjYlwiLHBsdW06XCIjZGRhMGRkXCIscG93ZGVyYmx1ZTpcIiNiMGUwZTZcIixwdXJwbGU6XCIjODAwMDgwXCIscmVkOlwiI2ZmMDAwMFwiLHJvc3licm93bjpcIiNiYzhmOGZcIixyb3lhbGJsdWU6XCIjNDE2OWUxXCIsc2FkZGxlYnJvd246XCIjOGI0NTEzXCIsc2FsbW9uOlwiI2ZhODA3MlwiLHNhbmR5YnJvd246XCIjZjRhNDYwXCIsc2VhZ3JlZW46XCIjMmU4YjU3XCIsc2Vhc2hlbGw6XCIjZmZmNWVlXCIsc2llbm5hOlwiI2EwNTIyZFwiLHNpbHZlcjpcIiNjMGMwYzBcIixza3libHVlOlwiIzg3Y2VlYlwiLHNsYXRlYmx1ZTpcIiM2YTVhY2RcIixzbGF0ZWdyYXk6XCIjNzA4MDkwXCIsc2xhdGVncmV5OlwiIzcwODA5MFwiLHNub3c6XCIjZmZmYWZhXCIsc3ByaW5nZ3JlZW46XCIjMDBmZjdmXCIsc3RlZWxibHVlOlwiIzQ2ODJiNFwiLHRhbjpcIiNkMmI0OGNcIix0ZWFsOlwiIzAwODA4MFwiLHRoaXN0bGU6XCIjZDhiZmQ4XCIsdG9tYXRvOlwiI2ZmNjM0N1wiLHR1cnF1b2lzZTpcIiM0MGUwZDBcIix2aW9sZXQ6XCIjZWU4MmVlXCIsd2hlYXQ6XCIjZjVkZWIzXCIsd2hpdGU6XCIjZmZmZmZmXCIsd2hpdGVzbW9rZTpcIiNmNWY1ZjVcIix5ZWxsb3c6XCIjZmZmZjAwXCIseWVsbG93Z3JlZW46XCIjOWFjZDMyXCJ9LGg9L1xccyovLGk9LyhcXGR7MSwzfSkvLGo9LygoPzpcXGQrKD86XFwuXFxkKyk/KXwoPzpcXC5cXGQrKSkvLGs9bmV3IFJlZ0V4cChqLnNvdXJjZStcIiVcIiksbD17SEVYMzovXiMoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkkL2ksSEVYNDovXiMoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkoW2EtZjAtOV0pJC9pLEhFWDY6L14jKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pJC9pLEhFWDg6L14jKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KSQvaSxSR0I6bmV3IFJlZ0V4cChbXCJecmdiXFxcXChcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksUkdCX1BFUkNFTlQ6bmV3IFJlZ0V4cChbXCJecmdiXFxcXChcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksUkdCQTpuZXcgUmVnRXhwKFtcIl5yZ2JhXFxcXChcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIixcIixqLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksUkdCQV9QRVJDRU5UOm5ldyBSZWdFeHAoW1wiXnJnYmFcXFxcKFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGouc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxIU0w6bmV3IFJlZ0V4cChbXCJeaHNsXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksSFNMQTpuZXcgUmVnRXhwKFtcIl5oc2xhXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixqLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksSFNCOm5ldyBSZWdFeHAoW1wiXmhzYlxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLEhTQkE6bmV3IFJlZ0V4cChbXCJeaHNiYVxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsai5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpfTtkLkNvbG9yLl9wYXJzZUlucHV0cz1mdW5jdGlvbihhLGIsYyxoKXt2YXIgaSxqPWFyZ3VtZW50cy5sZW5ndGgsaz10aGlzLm1vZGUsbT10aGlzLm1heGVzW2tdLG49W107aWYoaj49Myl7Zm9yKG5bMF09YS9tWzBdLG5bMV09Yi9tWzFdLG5bMl09Yy9tWzJdLG5bM109XCJudW1iZXJcIj09dHlwZW9mIGg/aC9tWzNdOjEsaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgbz1uW2ldO288MD9uW2ldPTA6bz4xJiYobltpXT0xKX1yZXR1cm4gaz09PWUuSFNMP2YuX2hzbGFUb1JHQkEobik6az09PWUuSFNCP2YuX2hzYmFUb1JHQkEobik6bn1pZigxPT09aiYmXCJzdHJpbmdcIj09dHlwZW9mIGEpe3ZhciBwPWEudHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoZ1twXSlyZXR1cm4gZC5Db2xvci5fcGFyc2VJbnB1dHMuY2FsbCh0aGlzLGdbcF0pO2lmKGwuSEVYMy50ZXN0KHApKXJldHVybiBuPWwuSEVYMy5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSthLDE2KS8yNTV9KSxuWzNdPTEsbjtpZihsLkhFWDYudGVzdChwKSlyZXR1cm4gbj1sLkhFWDYuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGEsMTYpLzI1NX0pLG5bM109MSxuO2lmKGwuSEVYNC50ZXN0KHApKXJldHVybiBuPWwuSEVYNC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSthLDE2KS8yNTV9KTtpZihsLkhFWDgudGVzdChwKSlyZXR1cm4gbj1sLkhFWDguZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGEsMTYpLzI1NX0pO2lmKGwuUkdCLnRlc3QocCkpcmV0dXJuIG49bC5SR0IuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEvMjU1fSksblszXT0xLG47aWYobC5SR0JfUEVSQ0VOVC50ZXN0KHApKXJldHVybiBuPWwuUkdCX1BFUkNFTlQuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlRmxvYXQoYSkvMTAwfSksblszXT0xLG47aWYobC5SR0JBLnRlc3QocCkpcmV0dXJuIG49bC5SR0JBLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDM9PT1iP3BhcnNlRmxvYXQoYSk6YS8yNTV9KTtpZihsLlJHQkFfUEVSQ0VOVC50ZXN0KHApKXJldHVybiBuPWwuUkdCQV9QRVJDRU5ULmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDM9PT1iP3BhcnNlRmxvYXQoYSk6cGFyc2VGbG9hdChhKS8xMDB9KTtpZihsLkhTTC50ZXN0KHApPyhuPWwuSFNMLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDA9PT1iP3BhcnNlSW50KGEsMTApLzM2MDpwYXJzZUludChhLDEwKS8xMDB9KSxuWzNdPTEpOmwuSFNMQS50ZXN0KHApJiYobj1sLkhTTEEuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOjM9PT1iP3BhcnNlRmxvYXQoYSk6cGFyc2VJbnQoYSwxMCkvMTAwfSkpLG49bi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKGEsMSksMCl9KSxuLmxlbmd0aClyZXR1cm4gZi5faHNsYVRvUkdCQShuKTtpZihsLkhTQi50ZXN0KHApPyhuPWwuSFNCLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDA9PT1iP3BhcnNlSW50KGEsMTApLzM2MDpwYXJzZUludChhLDEwKS8xMDB9KSxuWzNdPTEpOmwuSFNCQS50ZXN0KHApJiYobj1sLkhTQkEuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOjM9PT1iP3BhcnNlRmxvYXQoYSk6cGFyc2VJbnQoYSwxMCkvMTAwfSkpLG4ubGVuZ3RoKXtmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKW5baV09TWF0aC5tYXgoTWF0aC5taW4obltpXSwxKSwwKTtyZXR1cm4gZi5faHNiYVRvUkdCQShuKX1uPVsxLDEsMSwxXX1lbHNle2lmKDEhPT1qJiYyIT09anx8XCJudW1iZXJcIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKGFyZ3VtZW50cytcImlzIG5vdCBhIHZhbGlkIGNvbG9yIHJlcHJlc2VudGF0aW9uLlwiKTtuWzBdPWEvbVsyXSxuWzFdPWEvbVsyXSxuWzJdPWEvbVsyXSxuWzNdPVwibnVtYmVyXCI9PXR5cGVvZiBiP2IvbVszXToxLG49bi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKGEsMSksMCl9KX1yZXR1cm4gbn0sYi5leHBvcnRzPWQuQ29sb3J9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vY29sb3JfY29udmVyc2lvblwiOjE0fV0sMTc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuL3A1LkNvbG9yXCIpLGQucHJvdG90eXBlLmJhY2tncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkLkltYWdlP3RoaXMuaW1hZ2UoYXJndW1lbnRzWzBdLDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTp0aGlzLl9yZW5kZXJlci5iYWNrZ3JvdW5kLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuY2xlYXIoKSx0aGlzfSxkLnByb3RvdHlwZS5jb2xvck1vZGU9ZnVuY3Rpb24oYSxiLGMsZixnKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjb2xvck1vZGVcIixhcmd1bWVudHMpLGE9PT1lLlJHQnx8YT09PWUuSFNCfHxhPT09ZS5IU0wpe3RoaXMuX2NvbG9yTW9kZT1hO3ZhciBoPXRoaXMuX2NvbG9yTWF4ZXNbYV07Mj09PWFyZ3VtZW50cy5sZW5ndGg/KGhbMF09YixoWzFdPWIsaFsyXT1iLGhbM109Yik6ND09PWFyZ3VtZW50cy5sZW5ndGg/KGhbMF09YixoWzFdPWMsaFsyXT1mKTo1PT09YXJndW1lbnRzLmxlbmd0aCYmKGhbMF09YixoWzFdPWMsaFsyXT1mLGhbM109Zyl9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2ZpbGxTZXRcIiwhMCksdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvRmlsbFwiLCEwKSx0aGlzLl9yZW5kZXJlci5maWxsLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUubm9GaWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9kb0ZpbGxcIiwhMSksdGhpc30sZC5wcm90b3R5cGUubm9TdHJva2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvU3Ryb2tlXCIsITEpLHRoaXN9LGQucHJvdG90eXBlLnN0cm9rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfc3Ryb2tlU2V0XCIsITApLHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9kb1N0cm9rZVwiLCEwKSx0aGlzLl9yZW5kZXJlci5zdHJva2UuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5Db2xvclwiOjE2fV0sMTg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1NYXRoLlBJO2IuZXhwb3J0cz17UDJEOlwicDJkXCIsV0VCR0w6XCJ3ZWJnbFwiLEFSUk9XOlwiZGVmYXVsdFwiLENST1NTOlwiY3Jvc3NoYWlyXCIsSEFORDpcInBvaW50ZXJcIixNT1ZFOlwibW92ZVwiLFRFWFQ6XCJ0ZXh0XCIsV0FJVDpcIndhaXRcIixIQUxGX1BJOmQvMixQSTpkLFFVQVJURVJfUEk6ZC80LFRBVToyKmQsVFdPX1BJOjIqZCxERUdSRUVTOlwiZGVncmVlc1wiLFJBRElBTlM6XCJyYWRpYW5zXCIsREVHX1RPX1JBRDpkLzE4MCxSQURfVE9fREVHOjE4MC9kLENPUk5FUjpcImNvcm5lclwiLENPUk5FUlM6XCJjb3JuZXJzXCIsUkFESVVTOlwicmFkaXVzXCIsUklHSFQ6XCJyaWdodFwiLExFRlQ6XCJsZWZ0XCIsQ0VOVEVSOlwiY2VudGVyXCIsVE9QOlwidG9wXCIsQk9UVE9NOlwiYm90dG9tXCIsQkFTRUxJTkU6XCJhbHBoYWJldGljXCIsUE9JTlRTOjAsTElORVM6MSxMSU5FX1NUUklQOjMsTElORV9MT09QOjIsVFJJQU5HTEVTOjQsVFJJQU5HTEVfRkFOOjYsVFJJQU5HTEVfU1RSSVA6NSxRVUFEUzpcInF1YWRzXCIsUVVBRF9TVFJJUDpcInF1YWRfc3RyaXBcIixDTE9TRTpcImNsb3NlXCIsT1BFTjpcIm9wZW5cIixDSE9SRDpcImNob3JkXCIsUElFOlwicGllXCIsUFJPSkVDVDpcInNxdWFyZVwiLFNRVUFSRTpcImJ1dHRcIixST1VORDpcInJvdW5kXCIsQkVWRUw6XCJiZXZlbFwiLE1JVEVSOlwibWl0ZXJcIixSR0I6XCJyZ2JcIixIU0I6XCJoc2JcIixIU0w6XCJoc2xcIixBVVRPOlwiYXV0b1wiLEFMVDoxOCxCQUNLU1BBQ0U6OCxDT05UUk9MOjE3LERFTEVURTo0NixET1dOX0FSUk9XOjQwLEVOVEVSOjEzLEVTQ0FQRToyNyxMRUZUX0FSUk9XOjM3LE9QVElPTjoxOCxSRVRVUk46MTMsUklHSFRfQVJST1c6MzksU0hJRlQ6MTYsVEFCOjksVVBfQVJST1c6MzgsQkxFTkQ6XCJzb3VyY2Utb3ZlclwiLEFERDpcImxpZ2h0ZXJcIixEQVJLRVNUOlwiZGFya2VuXCIsTElHSFRFU1Q6XCJsaWdodGVuXCIsRElGRkVSRU5DRTpcImRpZmZlcmVuY2VcIixFWENMVVNJT046XCJleGNsdXNpb25cIixNVUxUSVBMWTpcIm11bHRpcGx5XCIsU0NSRUVOOlwic2NyZWVuXCIsUkVQTEFDRTpcImNvcHlcIixPVkVSTEFZOlwib3ZlcmxheVwiLEhBUkRfTElHSFQ6XCJoYXJkLWxpZ2h0XCIsU09GVF9MSUdIVDpcInNvZnQtbGlnaHRcIixET0RHRTpcImNvbG9yLWRvZGdlXCIsQlVSTjpcImNvbG9yLWJ1cm5cIixUSFJFU0hPTEQ6XCJ0aHJlc2hvbGRcIixHUkFZOlwiZ3JheVwiLE9QQVFVRTpcIm9wYXF1ZVwiLElOVkVSVDpcImludmVydFwiLFBPU1RFUklaRTpcInBvc3Rlcml6ZVwiLERJTEFURTpcImRpbGF0ZVwiLEVST0RFOlwiZXJvZGVcIixCTFVSOlwiYmx1clwiLE5PUk1BTDpcIm5vcm1hbFwiLElUQUxJQzpcIml0YWxpY1wiLEJPTEQ6XCJib2xkXCIsX0RFRkFVTFRfVEVYVF9GSUxMOlwiIzAwMDAwMFwiLF9ERUZBVUxUX0xFQURNVUxUOjEuMjUsX0NUWF9NSURETEU6XCJtaWRkbGVcIixMSU5FQVI6XCJsaW5lYXJcIixRVUFEUkFUSUM6XCJxdWFkcmF0aWNcIixCRVpJRVI6XCJiZXppZXJcIixDVVJWRTpcImN1cnZlXCIsU1RST0tFOlwic3Ryb2tlXCIsRklMTDpcImZpbGxcIixURVhUVVJFOlwidGV4dHVyZVwiLElNTUVESUFURTpcImltbWVkaWF0ZVwiLE5FQVJFU1Q6XCJuZWFyZXN0XCIsUkVQRUFUOlwicmVwZWF0XCIsQ0xBTVA6XCJjbGFtcFwiLE1JUlJPUjpcIm1pcnJvclwiLExBTkRTQ0FQRTpcImxhbmRzY2FwZVwiLFBPUlRSQUlUOlwicG9ydHJhaXRcIixfREVGQVVMVF9TVFJPS0U6XCIjMDAwMDAwXCIsX0RFRkFVTFRfRklMTDpcIiNGRkZGRkZcIixHUklEOlwiZ3JpZFwiLEFYRVM6XCJheGVzXCJ9fSx7fV0sMTk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKCl7cmV0dXJuIHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aHx8ZG9jdW1lbnQuYm9keSYmZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aHx8MH1mdW5jdGlvbiBlKCl7cmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0fHxkb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodHx8MH1mdW5jdGlvbiBmKGEpe2lmKCEoZG9jdW1lbnQuZnVsbHNjcmVlbkVuYWJsZWR8fGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkfHxkb2N1bWVudC5tb3pGdWxsU2NyZWVuRW5hYmxlZHx8ZG9jdW1lbnQubXNGdWxsc2NyZWVuRW5hYmxlZCkpdGhyb3cgbmV3IEVycm9yKFwiRnVsbHNjcmVlbiBub3QgZW5hYmxlZCBpbiB0aGlzIGJyb3dzZXIuXCIpXG47YS5yZXF1ZXN0RnVsbHNjcmVlbj9hLnJlcXVlc3RGdWxsc2NyZWVuKCk6YS5tb3pSZXF1ZXN0RnVsbFNjcmVlbj9hLm1velJlcXVlc3RGdWxsU2NyZWVuKCk6YS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbj9hLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCk6YS5tc1JlcXVlc3RGdWxsc2NyZWVuJiZhLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKX1mdW5jdGlvbiBnKCl7ZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4/ZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTpkb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuP2RvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTpkb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbj9kb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbigpOmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4mJmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4oKX12YXIgaD1hKFwiLi9tYWluXCIpLGk9YShcIi4vY29uc3RhbnRzXCIpLGo9W2kuQVJST1csaS5DUk9TUyxpLkhBTkQsaS5NT1ZFLGkuVEVYVCxpLldBSVRdO2gucHJvdG90eXBlLl9mcmFtZVJhdGU9MCxoLnByb3RvdHlwZS5fbGFzdEZyYW1lVGltZT13aW5kb3cucGVyZm9ybWFuY2Uubm93KCksaC5wcm90b3R5cGUuX3RhcmdldEZyYW1lUmF0ZT02MDt2YXIgaz13aW5kb3cucHJpbnQ7aC5wcm90b3R5cGUucHJpbnQ9ZnVuY3Rpb24oKXthcmd1bWVudHMubGVuZ3RoP2NvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsYXJndW1lbnRzKTprKCl9LGgucHJvdG90eXBlLmZyYW1lQ291bnQ9MCxoLnByb3RvdHlwZS5mb2N1c2VkPWRvY3VtZW50Lmhhc0ZvY3VzKCksaC5wcm90b3R5cGUuY3Vyc29yPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1cImF1dG9cIixlPXRoaXMuX2N1ckVsZW1lbnQuZWx0O2lmKGouaW5kZXhPZihhKT4tMSlkPWE7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYSl7dmFyIGY9XCJcIjtiJiZjJiZcIm51bWJlclwiPT10eXBlb2YgYiYmXCJudW1iZXJcIj09dHlwZW9mIGMmJihmPWIrXCIgXCIrYyksZD1cImh0dHA6Ly9cIj09PWEuc3Vic3RyaW5nKDAsNyl8fFwiaHR0cHM6Ly9cIj09PWEuc3Vic3RyaW5nKDAsOCk/XCJ1cmwoXCIrYStcIikgXCIrZitcIiwgYXV0b1wiOi9cXC4oY3VyfGpwZ3xqcGVnfGdpZnxwbmd8Q1VSfEpQR3xKUEVHfEdJRnxQTkcpJC8udGVzdChhKT9cInVybChcIithK1wiKSBcIitmK1wiLCBhdXRvXCI6YX1lLnN0eWxlLmN1cnNvcj1kfSxoLnByb3RvdHlwZS5mcmFtZVJhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcImZyYW1lUmF0ZVwiLGFyZ3VtZW50cyksXCJudW1iZXJcIiE9dHlwZW9mIGF8fGE8MD90aGlzLl9mcmFtZVJhdGU6KHRoaXMuX3NldFByb3BlcnR5KFwiX3RhcmdldEZyYW1lUmF0ZVwiLGEpLHRoaXMuX3J1bkZyYW1lcygpLHRoaXMpfSxoLnByb3RvdHlwZS5nZXRGcmFtZVJhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcmFtZVJhdGUoKX0saC5wcm90b3R5cGUuc2V0RnJhbWVSYXRlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZyYW1lUmF0ZShhKX0saC5wcm90b3R5cGUubm9DdXJzb3I9ZnVuY3Rpb24oKXt0aGlzLl9jdXJFbGVtZW50LmVsdC5zdHlsZS5jdXJzb3I9XCJub25lXCJ9LGgucHJvdG90eXBlLmRpc3BsYXlXaWR0aD1zY3JlZW4ud2lkdGgsaC5wcm90b3R5cGUuZGlzcGxheUhlaWdodD1zY3JlZW4uaGVpZ2h0LGgucHJvdG90eXBlLndpbmRvd1dpZHRoPWQoKSxoLnByb3RvdHlwZS53aW5kb3dIZWlnaHQ9ZSgpLGgucHJvdG90eXBlLl9vbnJlc2l6ZT1mdW5jdGlvbihhKXt0aGlzLl9zZXRQcm9wZXJ0eShcIndpbmRvd1dpZHRoXCIsZCgpKSx0aGlzLl9zZXRQcm9wZXJ0eShcIndpbmRvd0hlaWdodFwiLGUoKSk7dmFyIGIsYz10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztcImZ1bmN0aW9uXCI9PXR5cGVvZiBjLndpbmRvd1Jlc2l6ZWQmJih2b2lkIDA9PT0oYj1jLndpbmRvd1Jlc2l6ZWQoYSkpfHxifHxhLnByZXZlbnREZWZhdWx0KCkpfSxoLnByb3RvdHlwZS53aWR0aD0wLGgucHJvdG90eXBlLmhlaWdodD0wLGgucHJvdG90eXBlLmZ1bGxzY3JlZW49ZnVuY3Rpb24oYSl7aWYoaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZnVsbHNjcmVlblwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSlyZXR1cm4gZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnR8fGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tb3pGdWxsU2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVudDthP2YoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTpnKCl9LGgucHJvdG90eXBlLnBpeGVsRGVuc2l0eT1mdW5jdGlvbihhKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwaXhlbERlbnNpdHlcIixhcmd1bWVudHMpO3ZhciBiO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPyhhIT09dGhpcy5fcGl4ZWxEZW5zaXR5JiYodGhpcy5fcGl4ZWxEZW5zaXR5PWEsdGhpcy5fcGl4ZWxzRGlydHk9ITApLGI9dGhpcyx0aGlzLnJlc2l6ZUNhbnZhcyh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LCEwKSk6Yj10aGlzLl9waXhlbERlbnNpdHksYn0saC5wcm90b3R5cGUuZGlzcGxheURlbnNpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmRldmljZVBpeGVsUmF0aW99LGgucHJvdG90eXBlLmdldFVSTD1mdW5jdGlvbigpe3JldHVybiBsb2NhdGlvbi5ocmVmfSxoLnByb3RvdHlwZS5nZXRVUkxQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIGxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KFwiL1wiKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuXCJcIiE9PWF9KX0saC5wcm90b3R5cGUuZ2V0VVJMUGFyYW1zPWZ1bmN0aW9uKCl7Zm9yKHZhciBhLGI9L1s/Jl0oW14mPV0rKSg/OlsmPV0pKFteJj1dKykvZ2ltLGM9e307bnVsbCE9KGE9Yi5leGVjKGxvY2F0aW9uLnNlYXJjaCkpOylhLmluZGV4PT09Yi5sYXN0SW5kZXgmJmIubGFzdEluZGV4KyssY1thWzFdXT1hWzJdO3JldHVybiBjfSxiLmV4cG9ydHM9aH0se1wiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0fV0sMjA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2EoXCIuL2NvbnN0YW50c1wiKTtkLl92YWxpZGF0ZVBhcmFtZXRlcnM9ZC5fZnJpZW5kbHlGaWxlTG9hZEVycm9yPWZ1bmN0aW9uKCl7fTt2YXIgZT1udWxsLGY9XCJodHRwczovL2dpdGh1Yi5jb20vcHJvY2Vzc2luZy9wNS5qcy93aWtpL3A1LmpzLW92ZXJ2aWV3I3doeS1jYW50LWktYXNzaWduLXZhcmlhYmxlcy11c2luZy1wNS1mdW5jdGlvbnMtYW5kLXZhcmlhYmxlcy1iZWZvcmUtc2V0dXBcIixnPWZ1bmN0aW9uKCl7dmFyIGI9e30sYz1mdW5jdGlvbihhKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVyblwiX1wiIT09YVswXSYmKCEoYSBpbiBiKSYmKGJbYV09ITAsITApKX0pLm1hcChmdW5jdGlvbihiKXt2YXIgYztyZXR1cm4gYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBhW2JdP1wiZnVuY3Rpb25cIjpiPT09Yi50b1VwcGVyQ2FzZSgpP1wiY29uc3RhbnRcIjpcInZhcmlhYmxlXCIse25hbWU6Yix0eXBlOmN9fSl9O2U9W10uY29uY2F0KGMoZC5wcm90b3R5cGUpLGMoYShcIi4vY29uc3RhbnRzXCIpKSksZS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGIubmFtZS5sZW5ndGgtYS5uYW1lLmxlbmd0aH0pfSxoPWZ1bmN0aW9uKGEsYil7Ynx8KGI9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSksZXx8ZygpLGUuc29tZShmdW5jdGlvbihjKXtpZihhLm1lc3NhZ2UmJm51bGwhPT1hLm1lc3NhZ2UubWF0Y2goXCJcXFxcVz9cIitjLm5hbWUrXCJcXFxcV1wiKSlyZXR1cm4gYihcIkRpZCB5b3UganVzdCB0cnkgdG8gdXNlIHA1LmpzJ3MgXCIrYy5uYW1lKyhcImZ1bmN0aW9uXCI9PT1jLnR5cGU/XCIoKSBcIjpcIiBcIikrYy50eXBlK1wiPyBJZiBzbywgeW91IG1heSB3YW50IHRvIG1vdmUgaXQgaW50byB5b3VyIHNrZXRjaCdzIHNldHVwKCkgZnVuY3Rpb24uXFxuXFxuRm9yIG1vcmUgZGV0YWlscywgc2VlOiBcIitmKSwhMH0pfTtkLnByb3RvdHlwZS5faGVscEZvck1pc3VzZWRBdFRvcExldmVsQ29kZT1oLFwiY29tcGxldGVcIiE9PWRvY3VtZW50LnJlYWR5U3RhdGUmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsaCwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsaCwhMSl9KSksYi5leHBvcnRzPWR9LHtcIi4uLy4uL2RvY3MvcmVmZXJlbmNlL2RhdGEuanNvblwiOnZvaWQgMCxcIi4vY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNH1dLDIxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vY29uc3RhbnRzXCIpO2IuZXhwb3J0cz17bW9kZUFkanVzdDpmdW5jdGlvbihhLGIsYyxlLGYpe3JldHVybiBmPT09ZC5DT1JORVI/e3g6YSx5OmIsdzpjLGg6ZX06Zj09PWQuQ09STkVSUz97eDphLHk6Yix3OmMtYSxoOmUtYn06Zj09PWQuUkFESVVTP3t4OmEtYyx5OmItZSx3OjIqYyxoOjIqZX06Zj09PWQuQ0VOVEVSP3t4OmEtLjUqYyx5OmItLjUqZSx3OmMsaDplfTp2b2lkIDB9fX0se1wiLi9jb25zdGFudHNcIjoxOH1dLDIyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWZ1bmN0aW9uKCl7d2luZG93Lm1vY2hhfHwod2luZG93LnNldHVwJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuc2V0dXB8fHdpbmRvdy5kcmF3JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuZHJhdykmJiFkLmluc3RhbmNlJiZuZXcgZH07XCJjb21wbGV0ZVwiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9lKCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsZSwhMSl9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMjM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2QucHJvdG90eXBlLmV4aXQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJleGl0KCkgbm90IGltcGxlbWVudGVkLCBzZWUgcmVtb3ZlKClcIil9LGQucHJvdG90eXBlLnB1c2hTdHlsZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInB1c2hTdHlsZSgpIG5vdCB1c2VkLCBzZWUgcHVzaCgpXCIpfSxkLnByb3RvdHlwZS5wb3BTdHlsZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInBvcFN0eWxlKCkgbm90IHVzZWQsIHNlZSBwb3AoKVwiKX0sZC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3ZhciBhPVwic2l6ZSgpIGlzIG5vdCBhIHZhbGlkIHA1IGZ1bmN0aW9uLCB0byBzZXQgdGhlIHNpemUgb2YgdGhlIFwiO3Rocm93IGErPVwiZHJhd2luZyBjYW52YXMsIHBsZWFzZSB1c2UgY3JlYXRlQ2FudmFzKCkgaW5zdGVhZFwiLG5ldyBFcnJvcihhKX0sYi5leHBvcnRzPWR9LHtcIi4vbWFpblwiOjI0fV0sMjQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjthKFwiLi9zaGltXCIpO3ZhciBkPWEoXCIuL2NvbnN0YW50c1wiKSxlPWZ1bmN0aW9uKGEsYixjKXtcImJvb2xlYW5cIj09dHlwZW9mIGImJnZvaWQgMD09PWMmJihjPWIsYj12b2lkIDApLHRoaXMuX3NldHVwRG9uZT0hMSx0aGlzLl9waXhlbERlbnNpdHk9TWF0aC5jZWlsKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKXx8MSx0aGlzLl91c2VyTm9kZT1iLHRoaXMuX2N1ckVsZW1lbnQ9bnVsbCx0aGlzLl9lbGVtZW50cz1bXSx0aGlzLl9yZXF1ZXN0QW5pbUlkPTAsdGhpcy5fcHJlbG9hZENvdW50PTAsdGhpcy5faXNHbG9iYWw9ITEsdGhpcy5fbG9vcD0hMCx0aGlzLl9pbml0aWFsaXplSW5zdGFuY2VWYXJpYWJsZXMoKSx0aGlzLl9kZWZhdWx0Q2FudmFzU2l6ZT17d2lkdGg6MTAwLGhlaWdodDoxMDB9LHRoaXMuX2V2ZW50cz17bW91c2Vtb3ZlOm51bGwsbW91c2Vkb3duOm51bGwsbW91c2V1cDpudWxsLGRyYWdlbmQ6bnVsbCxkcmFnb3ZlcjpudWxsLGNsaWNrOm51bGwsZGJsY2xpY2s6bnVsbCxtb3VzZW92ZXI6bnVsbCxtb3VzZW91dDpudWxsLGtleWRvd246bnVsbCxrZXl1cDpudWxsLGtleXByZXNzOm51bGwsdG91Y2hzdGFydDpudWxsLHRvdWNobW92ZTpudWxsLHRvdWNoZW5kOm51bGwscmVzaXplOm51bGwsYmx1cjpudWxsfSx0aGlzLl9ldmVudHMud2hlZWw9bnVsbCx0aGlzLl9sb2FkaW5nU2NyZWVuSWQ9XCJwNV9sb2FkaW5nXCIsdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHM9e307Zm9yKHZhciBkPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUucHJvdG90eXBlLl9yZWdpc3RlcmVkTWV0aG9kcyksZj0wO2Y8ZC5sZW5ndGg7ZisrKXt2YXIgZz1kW2ZdO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzW2ddPWUucHJvdG90eXBlLl9yZWdpc3RlcmVkTWV0aG9kc1tnXS5zbGljZSgpfXdpbmRvdy5EZXZpY2VPcmllbnRhdGlvbkV2ZW50JiYodGhpcy5fZXZlbnRzLmRldmljZW9yaWVudGF0aW9uPW51bGwpLHdpbmRvdy5EZXZpY2VNb3Rpb25FdmVudCYmIXdpbmRvdy5faXNOb2RlV2Via2l0JiYodGhpcy5fZXZlbnRzLmRldmljZW1vdGlvbj1udWxsKSx0aGlzLl9zdGFydD1mdW5jdGlvbigpe3RoaXMuX3VzZXJOb2RlJiZcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5fdXNlck5vZGUmJih0aGlzLl91c2VyTm9kZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl91c2VyTm9kZSkpO3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzLGI9YS5wcmVsb2FkO2lmKGIpe3ZhciBjPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2xvYWRpbmdTY3JlZW5JZCk7aWYoIWMpe2M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxjLmlubmVySFRNTD1cIkxvYWRpbmcuLi5cIixjLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixjLmlkPXRoaXMuX2xvYWRpbmdTY3JlZW5JZDsodGhpcy5fdXNlck5vZGV8fGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKGMpfXZhciBkPXRoaXMuX3ByZWxvYWRNZXRob2RzO2Zvcih2YXIgZiBpbiBkKXtkW2ZdPWRbZl18fGU7dmFyIGc9ZFtmXTtnIT09ZS5wcm90b3R5cGUmJmchPT1lfHwodGhpcy5faXNHbG9iYWwmJih3aW5kb3dbZl09dGhpcy5fd3JhcFByZWxvYWQodGhpcyxmKSksZz10aGlzKSx0aGlzLl9yZWdpc3RlcmVkUHJlbG9hZE1ldGhvZHNbZl09Z1tmXSxnW2ZdPXRoaXMuX3dyYXBQcmVsb2FkKGcsZil9YigpLHRoaXMuX3J1bklmUHJlbG9hZHNBcmVEb25lKCl9ZWxzZSB0aGlzLl9zZXR1cCgpLHRoaXMuX3J1bkZyYW1lcygpLHRoaXMuX2RyYXcoKX0uYmluZCh0aGlzKSx0aGlzLl9ydW5JZlByZWxvYWRzQXJlRG9uZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKDA9PT1hLl9wcmVsb2FkQ291bnQpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEuX2xvYWRpbmdTY3JlZW5JZCk7YiYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGEuX3NldHVwKCksYS5fcnVuRnJhbWVzKCksYS5fZHJhdygpfX0sdGhpcy5fZGVjcmVtZW50UHJlbG9hZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO1wiZnVuY3Rpb25cIj09dHlwZW9mIGEucHJlbG9hZCYmKGEuX3NldFByb3BlcnR5KFwiX3ByZWxvYWRDb3VudFwiLGEuX3ByZWxvYWRDb3VudC0xKSxhLl9ydW5JZlByZWxvYWRzQXJlRG9uZSgpKX0sdGhpcy5fd3JhcFByZWxvYWQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5jcmVtZW50UHJlbG9hZCgpLHRoaXMuX3JlZ2lzdGVyZWRQcmVsb2FkTWV0aG9kc1tiXS5hcHBseShhLGFyZ3VtZW50cyl9LmJpbmQodGhpcyl9LHRoaXMuX2luY3JlbWVudFByZWxvYWQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczthLl9zZXRQcm9wZXJ0eShcIl9wcmVsb2FkQ291bnRcIixhLl9wcmVsb2FkQ291bnQrMSl9LHRoaXMuX3NldHVwPWZ1bmN0aW9uKCl7dGhpcy5jcmVhdGVDYW52YXModGhpcy5fZGVmYXVsdENhbnZhc1NpemUud2lkdGgsdGhpcy5fZGVmYXVsdENhbnZhc1NpemUuaGVpZ2h0LFwicDJkXCIpO3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGEucHJlbG9hZClmb3IodmFyIGIgaW4gdGhpcy5fcHJlbG9hZE1ldGhvZHMpYVtiXT10aGlzLl9wcmVsb2FkTWV0aG9kc1tiXVtiXSxhW2JdJiZ0aGlzJiYoYVtiXT1hW2JdLmJpbmQodGhpcykpO1wiZnVuY3Rpb25cIj09dHlwZW9mIGEuc2V0dXAmJmEuc2V0dXAoKTtmb3IodmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjYW52YXNcIiksZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdO1widHJ1ZVwiPT09ZS5kYXRhc2V0LmhpZGRlbiYmKGUuc3R5bGUudmlzaWJpbGl0eT1cIlwiLGRlbGV0ZSBlLmRhdGFzZXQuaGlkZGVuKX10aGlzLl9zZXR1cERvbmU9ITB9LmJpbmQodGhpcyksdGhpcy5fZHJhdz1mdW5jdGlvbigpe3ZhciBhPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSxiPWEtdGhpcy5fbGFzdEZyYW1lVGltZSxjPTFlMy90aGlzLl90YXJnZXRGcmFtZVJhdGU7KCF0aGlzLl9sb29wfHxiPj1jLTUpJiYodGhpcy5yZWRyYXcoKSx0aGlzLl9mcmFtZVJhdGU9MWUzLyhhLXRoaXMuX2xhc3RGcmFtZVRpbWUpLHRoaXMuX2xhc3RGcmFtZVRpbWU9YSx2b2lkIDAhPT10aGlzLl91cGRhdGVNb3VzZUNvb3JkcyYmdGhpcy5fdXBkYXRlTW91c2VDb29yZHMoKSksdGhpcy5fbG9vcCYmKHRoaXMuX3JlcXVlc3RBbmltSWQ9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9kcmF3KSl9LmJpbmQodGhpcyksdGhpcy5fcnVuRnJhbWVzPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSW50ZXJ2YWwmJmNsZWFySW50ZXJ2YWwodGhpcy5fdXBkYXRlSW50ZXJ2YWwpfS5iaW5kKHRoaXMpLHRoaXMuX3NldFByb3BlcnR5PWZ1bmN0aW9uKGEsYil7dGhpc1thXT1iLHRoaXMuX2lzR2xvYmFsJiYod2luZG93W2FdPWIpfS5iaW5kKHRoaXMpLHRoaXMucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fbG9hZGluZ1NjcmVlbklkKTtpZihhJiYoYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpLHRoaXMuX2luY3JlbWVudFByZWxvYWQoKSksdGhpcy5fY3VyRWxlbWVudCl7dGhpcy5fbG9vcD0hMSx0aGlzLl9yZXF1ZXN0QW5pbUlkJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVxdWVzdEFuaW1JZCk7Zm9yKHZhciBiIGluIHRoaXMuX2V2ZW50cyl3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLHRoaXMuX2V2ZW50c1tiXSk7Zm9yKHZhciBjPTA7Yzx0aGlzLl9lbGVtZW50cy5sZW5ndGg7YysrKXt2YXIgZD10aGlzLl9lbGVtZW50c1tjXTtkLmVsdC5wYXJlbnROb2RlJiZkLmVsdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQuZWx0KTtmb3IodmFyIGYgaW4gZC5fZXZlbnRzKWQuZWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZixkLl9ldmVudHNbZl0pfXZhciBnPXRoaXM7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucmVtb3ZlLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwIT09YSYmYS5jYWxsKGcpfSl9aWYodGhpcy5faXNHbG9iYWwpe2Zvcih2YXIgaCBpbiBlLnByb3RvdHlwZSl0cnl7ZGVsZXRlIHdpbmRvd1toXX1jYXRjaChhKXt3aW5kb3dbaF09dm9pZCAwfWZvcih2YXIgaSBpbiB0aGlzKWlmKHRoaXMuaGFzT3duUHJvcGVydHkoaSkpdHJ5e2RlbGV0ZSB3aW5kb3dbaV19Y2F0Y2goYSl7d2luZG93W2ldPXZvaWQgMH1lLmluc3RhbmNlPW51bGx9fS5iaW5kKHRoaXMpLHRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmluaXQuZm9yRWFjaChmdW5jdGlvbihhKXt2b2lkIDAhPT1hJiZhLmNhbGwodGhpcyl9LHRoaXMpO3ZhciBoPXRoaXMuX2NyZWF0ZUZyaWVuZGx5R2xvYmFsRnVuY3Rpb25CaW5kZXIoKTtpZihhKWEodGhpcyk7ZWxzZXt0aGlzLl9pc0dsb2JhbD0hMCxlLmluc3RhbmNlPXRoaXM7Zm9yKHZhciBpIGluIGUucHJvdG90eXBlKWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUucHJvdG90eXBlW2ldKXt2YXIgaj1pLnN1YnN0cmluZygyKTt0aGlzLl9ldmVudHMuaGFzT3duUHJvcGVydHkoail8fChNYXRoLmhhc093blByb3BlcnR5KGkpJiZNYXRoW2ldPT09ZS5wcm90b3R5cGVbaV0/aChpLGUucHJvdG90eXBlW2ldKTpoKGksZS5wcm90b3R5cGVbaV0uYmluZCh0aGlzKSkpfWVsc2UgaChpLGUucHJvdG90eXBlW2ldKTtmb3IodmFyIGsgaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KGspJiZoKGssdGhpc1trXSl9Zm9yKHZhciBsIGluIHRoaXMuX2V2ZW50cyl7dmFyIG09dGhpc1tcIl9vblwiK2xdO2lmKG0pe3ZhciBuPW0uYmluZCh0aGlzKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihsLG4se3Bhc3NpdmU6ITF9KSx0aGlzLl9ldmVudHNbbF09bn19dmFyIG89ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcImZvY3VzZWRcIiwhMCl9LmJpbmQodGhpcykscD1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwiZm9jdXNlZFwiLCExKX0uYmluZCh0aGlzKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsbyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIscCksdGhpcy5yZWdpc3Rlck1ldGhvZChcInJlbW92ZVwiLGZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLG8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLHApfSksYz90aGlzLl9zdGFydCgpOlwiY29tcGxldGVcIj09PWRvY3VtZW50LnJlYWR5U3RhdGU/dGhpcy5fc3RhcnQoKTp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIix0aGlzLl9zdGFydC5iaW5kKHRoaXMpLCExKX07ZS5wcm90b3R5cGUuX2luaXRpYWxpemVJbnN0YW5jZVZhcmlhYmxlcz1mdW5jdGlvbigpe3RoaXMuX3N0eWxlcz1bXSx0aGlzLl9iZXppZXJEZXRhaWw9MjAsdGhpcy5fY3VydmVEZXRhaWw9MjAsdGhpcy5fY29sb3JNb2RlPWQuUkdCLHRoaXMuX2NvbG9yTWF4ZXM9e3JnYjpbMjU1LDI1NSwyNTUsMjU1XSxoc2I6WzM2MCwxMDAsMTAwLDFdLGhzbDpbMzYwLDEwMCwxMDAsMV19LHRoaXMuX3BpeGVsc0RpcnR5PSEwfSxlLmluc3RhbmNlPW51bGwsZS5kaXNhYmxlRnJpZW5kbHlFcnJvcnM9ITE7Zm9yKHZhciBmIGluIGQpZS5wcm90b3R5cGVbZl09ZFtmXTtlLnByb3RvdHlwZS5fcHJlbG9hZE1ldGhvZHM9e2xvYWRKU09OOmUucHJvdG90eXBlLGxvYWRJbWFnZTplLnByb3RvdHlwZSxsb2FkU3RyaW5nczplLnByb3RvdHlwZSxsb2FkWE1MOmUucHJvdG90eXBlLGxvYWRCeXRlczplLnByb3RvdHlwZSxsb2FkVGFibGU6ZS5wcm90b3R5cGUsbG9hZEZvbnQ6ZS5wcm90b3R5cGUsbG9hZE1vZGVsOmUucHJvdG90eXBlLGxvYWRTaGFkZXI6ZS5wcm90b3R5cGV9LGUucHJvdG90eXBlLl9yZWdpc3RlcmVkTWV0aG9kcz17aW5pdDpbXSxwcmU6W10scG9zdDpbXSxyZW1vdmU6W119LGUucHJvdG90eXBlLl9yZWdpc3RlcmVkUHJlbG9hZE1ldGhvZHM9e30sZS5wcm90b3R5cGUucmVnaXN0ZXJQcmVsb2FkTWV0aG9kPWZ1bmN0aW9uKGEsYil7ZS5wcm90b3R5cGUuX3ByZWxvYWRNZXRob2RzLmhhc093blByb3BlcnR5KGEpfHwoZS5wcm90b3R5cGUuX3ByZWxvYWRNZXRob2RzW2FdPWIpfSxlLnByb3RvdHlwZS5yZWdpc3Rlck1ldGhvZD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXN8fGUucHJvdG90eXBlO2MuX3JlZ2lzdGVyZWRNZXRob2RzLmhhc093blByb3BlcnR5KGEpfHwoYy5fcmVnaXN0ZXJlZE1ldGhvZHNbYV09W10pLGMuX3JlZ2lzdGVyZWRNZXRob2RzW2FdLnB1c2goYil9LGUucHJvdG90eXBlLl9jcmVhdGVGcmllbmRseUdsb2JhbEZ1bmN0aW9uQmluZGVyPWZ1bmN0aW9uKGEpe2E9YXx8e307dmFyIGI9YS5nbG9iYWxPYmplY3R8fHdpbmRvdyxjPWEubG9nfHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLGQ9e3ByaW50OiEwfTtyZXR1cm4gZnVuY3Rpb24oYSxmKXtpZihlLmRpc2FibGVGcmllbmRseUVycm9ycywxKWJbYV09ZjtlbHNlIHRyeXtpZihhIGluIGImJiEoYSBpbiBkKSl0aHJvdyBuZXcgRXJyb3IoJ2dsb2JhbCBcIicrYSsnXCIgYWxyZWFkeSBleGlzdHMnKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYixhLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sc2V0OmZ1bmN0aW9uKGQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmQsd3JpdGFibGU6ITB9KSxjKCdZb3UganVzdCBjaGFuZ2VkIHRoZSB2YWx1ZSBvZiBcIicrYStcIlxcXCIsIHdoaWNoIHdhcyBhIHA1IGZ1bmN0aW9uLiBUaGlzIGNvdWxkIGNhdXNlIHByb2JsZW1zIGxhdGVyIGlmIHlvdSdyZSBub3QgY2FyZWZ1bC5cIil9fSl9Y2F0Y2goZCl7YygncDUgaGFkIHByb2JsZW1zIGNyZWF0aW5nIHRoZSBnbG9iYWwgZnVuY3Rpb24gXCInK2ErJ1wiLCBwb3NzaWJseSBiZWNhdXNlIHlvdXIgY29kZSBpcyBhbHJlYWR5IHVzaW5nIHRoYXQgbmFtZSBhcyBhIHZhcmlhYmxlLiBZb3UgbWF5IHdhbnQgdG8gcmVuYW1lIHlvdXIgdmFyaWFibGUgdG8gc29tZXRoaW5nIGVsc2UuJyksYlthXT1mfX19LGIuZXhwb3J0cz1lfSx7XCIuL2NvbnN0YW50c1wiOjE4LFwiLi9zaGltXCI6MzR9XSwyNTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMpe3JldHVybiExPT09Yj9mKGEsYyk6ZShhLGIsYyksdGhpc31mdW5jdGlvbiBlKGEsYixjKXtjLl9ldmVudHNbYV0mJmYoYSxjKTt2YXIgZD1iLmJpbmQoYyk7Yy5lbHQuYWRkRXZlbnRMaXN0ZW5lcihhLGQsITEpLGMuX2V2ZW50c1thXT1kfWZ1bmN0aW9uIGYoYSxiKXt2YXIgYz1iLl9ldmVudHNbYV07Yi5lbHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITEpLGIuX2V2ZW50c1thXT1udWxsfXZhciBnPWEoXCIuL21haW5cIik7Zy5FbGVtZW50PWZ1bmN0aW9uKGEsYil7dGhpcy5lbHQ9YSx0aGlzLl9wSW5zdD1iLHRoaXMuX2V2ZW50cz17fSx0aGlzLndpZHRoPXRoaXMuZWx0Lm9mZnNldFdpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuZWx0Lm9mZnNldEhlaWdodH0sZy5FbGVtZW50LnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/dGhpcy5lbHQucGFyZW50Tm9kZTooXCJzdHJpbmdcIj09dHlwZW9mIGE/KFwiI1wiPT09YVswXSYmKGE9YS5zdWJzdHJpbmcoMSkpLGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpOmEgaW5zdGFuY2VvZiBnLkVsZW1lbnQmJihhPWEuZWx0KSxhLmFwcGVuZENoaWxkKHRoaXMuZWx0KSx0aGlzKX0sZy5FbGVtZW50LnByb3RvdHlwZS5pZD1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT90aGlzLmVsdC5pZDoodGhpcy5lbHQuaWQ9YSx0aGlzLndpZHRoPXRoaXMuZWx0Lm9mZnNldFdpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuZWx0Lm9mZnNldEhlaWdodCx0aGlzKX0sZy5FbGVtZW50LnByb3RvdHlwZS5jbGFzcz1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT90aGlzLmVsdC5jbGFzc05hbWU6KHRoaXMuZWx0LmNsYXNzTmFtZT1hLHRoaXMpfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlUHJlc3NlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNlZG93blwiLGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCEwKSx0aGlzLl9wSW5zdC5fc2V0TW91c2VCdXR0b24oYiksYSgpfSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRvdWJsZUNsaWNrZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJkYmxjbGlja1wiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZVdoZWVsPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwid2hlZWxcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VSZWxlYXNlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNldXBcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VDbGlja2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiY2xpY2tcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VNb3ZlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNlbW92ZVwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZU92ZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJtb3VzZW92ZXJcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuY2hhbmdlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcImNoYW5nZVwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5pbnB1dD1mdW5jdGlvbihhKXtyZXR1cm4gZChcImlucHV0XCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlT3V0PWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2VvdXRcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUudG91Y2hTdGFydGVkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwidG91Y2hzdGFydFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS50b3VjaE1vdmVkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwidG91Y2htb3ZlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLnRvdWNoRW5kZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ0b3VjaGVuZFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5kcmFnT3Zlcj1mdW5jdGlvbihhKXtyZXR1cm4gZChcImRyYWdvdmVyXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRyYWdMZWF2ZT1mdW5jdGlvbihhKXtyZXR1cm4gZChcImRyYWdsZWF2ZVwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5kcm9wPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhiKXt2YXIgYz1uZXcgZy5GaWxlKGIpO3JldHVybiBmdW5jdGlvbihiKXtjLmRhdGE9Yi50YXJnZXQucmVzdWx0LGEoYyl9fXJldHVybiB3aW5kb3cuRmlsZSYmd2luZG93LkZpbGVSZWFkZXImJndpbmRvdy5GaWxlTGlzdCYmd2luZG93LkJsb2I/KGUoXCJkcmFnb3ZlclwiLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzKSxlKFwiZHJhZ2xlYXZlXCIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKSxhLnByZXZlbnREZWZhdWx0KCl9LHRoaXMpLHZvaWQgMCE9PWImJmUoXCJkcm9wXCIsYix0aGlzKSxlKFwiZHJvcFwiLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpO2Zvcih2YXIgYj1hLmRhdGFUcmFuc2Zlci5maWxlcyxkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBlPWJbZF0sZj1uZXcgRmlsZVJlYWRlcjtmLm9ubG9hZD1jKGUpLGUudHlwZS5pbmRleE9mKFwidGV4dFwiKT4tMT9mLnJlYWRBc1RleHQoZSk6Zi5yZWFkQXNEYXRhVVJMKGUpfX0sdGhpcykpOmNvbnNvbGUubG9nKFwiVGhlIEZpbGUgQVBJcyBhcmUgbm90IGZ1bGx5IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXIuXCIpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuX3NldFByb3BlcnR5PWZ1bmN0aW9uKGEsYil7dGhpc1thXT1ifSxiLmV4cG9ydHM9Zy5FbGVtZW50fSx7XCIuL21haW5cIjoyNH1dLDI2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKSxlPWEoXCIuL2NvbnN0YW50c1wiKTtkLkdyYXBoaWNzPWZ1bmN0aW9uKGEsYixjLGYpe3ZhciBnPWN8fGUuUDJEO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksKGYuX3VzZXJOb2RlfHxkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZCh0aGlzLmNhbnZhcyksZC5FbGVtZW50LmNhbGwodGhpcyx0aGlzLmNhbnZhcyxmLCExKTtmb3IodmFyIGggaW4gZC5wcm90b3R5cGUpdGhpc1toXXx8KFwiZnVuY3Rpb25cIj09dHlwZW9mIGQucHJvdG90eXBlW2hdP3RoaXNbaF09ZC5wcm90b3R5cGVbaF0uYmluZCh0aGlzKTp0aGlzW2hdPWQucHJvdG90eXBlW2hdKTtyZXR1cm4gZC5wcm90b3R5cGUuX2luaXRpYWxpemVJbnN0YW5jZVZhcmlhYmxlcy5hcHBseSh0aGlzKSx0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yix0aGlzLl9waXhlbERlbnNpdHk9Zi5fcGl4ZWxEZW5zaXR5LGc9PT1lLldFQkdMP3RoaXMuX3JlbmRlcmVyPW5ldyBkLlJlbmRlcmVyR0wodGhpcy5jYW52YXMsdGhpcywhMSk6dGhpcy5fcmVuZGVyZXI9bmV3IGQuUmVuZGVyZXIyRCh0aGlzLmNhbnZhcyx0aGlzLCExKSxmLl9lbGVtZW50cy5wdXNoKHRoaXMpLHRoaXMuX3JlbmRlcmVyLnJlc2l6ZShhLGIpLHRoaXMuX3JlbmRlcmVyLl9hcHBseURlZmF1bHRzKCksdGhpc30sZC5HcmFwaGljcy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLkVsZW1lbnQucHJvdG90eXBlKSxkLkdyYXBoaWNzLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLmVsdC5wYXJlbnROb2RlJiZ0aGlzLmVsdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWx0KTt2YXIgYT10aGlzLl9wSW5zdC5fZWxlbWVudHMuaW5kZXhPZih0aGlzKTstMSE9PWEmJnRoaXMuX3BJbnN0Ll9lbGVtZW50cy5zcGxpY2UoYSwxKTtmb3IodmFyIGIgaW4gdGhpcy5fZXZlbnRzKXRoaXMuZWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoYix0aGlzLl9ldmVudHNbYl0pfSxiLmV4cG9ydHM9ZC5HcmFwaGljc30se1wiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0fV0sMjc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEpe3ZhciBiPTAsYz0wO2lmKGEub2Zmc2V0UGFyZW50KWRve2IrPWEub2Zmc2V0TGVmdCxjKz1hLm9mZnNldFRvcH13aGlsZShhPWEub2Zmc2V0UGFyZW50KTtlbHNlIGIrPWEub2Zmc2V0TGVmdCxjKz1hLm9mZnNldFRvcDtyZXR1cm5bYixjXX12YXIgZT1hKFwiLi9tYWluXCIpLGY9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2UuUmVuZGVyZXI9ZnVuY3Rpb24oYSxiLGMpe2UuRWxlbWVudC5jYWxsKHRoaXMsYSxiKSx0aGlzLmNhbnZhcz1hLGM/KHRoaXMuX2lzTWFpbkNhbnZhcz0hMCx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJfY3VyRWxlbWVudFwiLHRoaXMpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcImNhbnZhc1wiLHRoaXMuY2FudmFzKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJ3aWR0aFwiLHRoaXMud2lkdGgpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcImhlaWdodFwiLHRoaXMuaGVpZ2h0KSk6KHRoaXMuY2FudmFzLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdGhpcy5fc3R5bGVzPVtdKSx0aGlzLl90ZXh0U2l6ZT0xMix0aGlzLl90ZXh0TGVhZGluZz0xNSx0aGlzLl90ZXh0Rm9udD1cInNhbnMtc2VyaWZcIix0aGlzLl90ZXh0U3R5bGU9Zi5OT1JNQUwsdGhpcy5fdGV4dEFzY2VudD1udWxsLHRoaXMuX3RleHREZXNjZW50PW51bGwsdGhpcy5fdGV4dEFsaWduPWYuTEVGVCx0aGlzLl90ZXh0QmFzZWxpbmU9Zi5CQVNFTElORSx0aGlzLl9yZWN0TW9kZT1mLkNPUk5FUix0aGlzLl9lbGxpcHNlTW9kZT1mLkNFTlRFUix0aGlzLl9jdXJ2ZVRpZ2h0bmVzcz0wLHRoaXMuX2ltYWdlTW9kZT1mLkNPUk5FUix0aGlzLl90aW50PW51bGwsdGhpcy5fZG9TdHJva2U9ITAsdGhpcy5fZG9GaWxsPSEwLHRoaXMuX3N0cm9rZVNldD0hMSx0aGlzLl9maWxsU2V0PSExfSxlLlJlbmRlcmVyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUuRWxlbWVudC5wcm90b3R5cGUpLGUuUmVuZGVyZXIucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXtyZXR1cm57cHJvcGVydGllczp7X2RvU3Ryb2tlOnRoaXMuX2RvU3Ryb2tlLF9zdHJva2VTZXQ6dGhpcy5fc3Ryb2tlU2V0LF9kb0ZpbGw6dGhpcy5fZG9GaWxsLF9maWxsU2V0OnRoaXMuX2ZpbGxTZXQsX3RpbnQ6dGhpcy5fdGludCxfaW1hZ2VNb2RlOnRoaXMuX2ltYWdlTW9kZSxfcmVjdE1vZGU6dGhpcy5fcmVjdE1vZGUsX2VsbGlwc2VNb2RlOnRoaXMuX2VsbGlwc2VNb2RlLF90ZXh0Rm9udDp0aGlzLl90ZXh0Rm9udCxfdGV4dExlYWRpbmc6dGhpcy5fdGV4dExlYWRpbmcsX3RleHRTaXplOnRoaXMuX3RleHRTaXplLF90ZXh0QWxpZ246dGhpcy5fdGV4dEFsaWduLF90ZXh0QmFzZWxpbmU6dGhpcy5fdGV4dEJhc2VsaW5lLF90ZXh0U3R5bGU6dGhpcy5fdGV4dFN0eWxlfX19LGUuUmVuZGVyZXIucHJvdG90eXBlLnBvcD1mdW5jdGlvbihhKXthLnByb3BlcnRpZXMmJk9iamVjdC5hc3NpZ24odGhpcyxhLnByb3BlcnRpZXMpfSxlLlJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oYSxiKXt0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yix0aGlzLmVsdC53aWR0aD1hKnRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksdGhpcy5lbHQuaGVpZ2h0PWIqdGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSx0aGlzLmVsdC5zdHlsZS53aWR0aD1hK1wicHhcIix0aGlzLmVsdC5zdHlsZS5oZWlnaHQ9YitcInB4XCIsdGhpcy5faXNNYWluQ2FudmFzJiYodGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwid2lkdGhcIix0aGlzLndpZHRoKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJoZWlnaHRcIix0aGlzLmhlaWdodCkpfSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0TGVhZGluZz1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYT8odGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dExlYWRpbmdcIixhKSx0aGlzLl9wSW5zdCk6dGhpcy5fdGV4dExlYWRpbmd9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRTaXplPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPyh0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0U2l6ZVwiLGEpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRMZWFkaW5nXCIsYSpmLl9ERUZBVUxUX0xFQURNVUxUKSx0aGlzLl9hcHBseVRleHRQcm9wZXJ0aWVzKCkpOnRoaXMuX3RleHRTaXplfSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0U3R5bGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGE/KGEhPT1mLk5PUk1BTCYmYSE9PWYuSVRBTElDJiZhIT09Zi5CT0xEfHx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0U3R5bGVcIixhKSx0aGlzLl9hcHBseVRleHRQcm9wZXJ0aWVzKCkpOnRoaXMuX3RleHRTdHlsZX0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dEFzY2VudD1mdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5fdGV4dEFzY2VudCYmdGhpcy5fdXBkYXRlVGV4dE1ldHJpY3MoKSx0aGlzLl90ZXh0QXNjZW50fSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0RGVzY2VudD1mdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5fdGV4dERlc2NlbnQmJnRoaXMuX3VwZGF0ZVRleHRNZXRyaWNzKCksdGhpcy5fdGV4dERlc2NlbnR9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRBbGlnbj1mdW5jdGlvbihhLGIpe3JldHVybiB2b2lkIDAhPT1hPyh0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QWxpZ25cIixhKSx2b2lkIDAhPT1iJiZ0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QmFzZWxpbmVcIixiKSx0aGlzLl9hcHBseVRleHRQcm9wZXJ0aWVzKCkpOntob3Jpem9udGFsOnRoaXMuX3RleHRBbGlnbix2ZXJ0aWNhbDp0aGlzLl90ZXh0QmFzZWxpbmV9fSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGcsaCxpLGosayxsLG0sbixvLHA9dGhpcy5fcEluc3QscT1OdW1iZXIuTUFYX1ZBTFVFO2lmKCh0aGlzLl9kb0ZpbGx8fHRoaXMuX2RvU3Ryb2tlKSYmdm9pZCAwIT09YSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPWEudG9TdHJpbmcoKSksYT1hLnJlcGxhY2UoLyhcXHQpL2csXCIgIFwiKSxnPWEuc3BsaXQoXCJcXG5cIiksdm9pZCAwIT09ZCl7Zm9yKG89MCxpPTA7aTxnLmxlbmd0aDtpKyspZm9yKGs9XCJcIixuPWdbaV0uc3BsaXQoXCIgXCIpLGg9MDtoPG4ubGVuZ3RoO2grKylsPWsrbltoXStcIiBcIixtPXRoaXMudGV4dFdpZHRoKGwpLG0+ZD8oaz1uW2hdK1wiIFwiLG8rPXAudGV4dExlYWRpbmcoKSk6az1sO3N3aXRjaCh0aGlzLl9yZWN0TW9kZT09PWYuQ0VOVEVSJiYoYi09ZC8yLGMtPWUvMiksdGhpcy5fdGV4dEFsaWduKXtjYXNlIGYuQ0VOVEVSOmIrPWQvMjticmVhaztjYXNlIGYuUklHSFQ6Yis9ZH12YXIgcj0hMTtpZih2b2lkIDAhPT1lKXtzd2l0Y2godGhpcy5fdGV4dEJhc2VsaW5lKXtjYXNlIGYuQk9UVE9NOmMrPWUtbzticmVhaztjYXNlIGYuQ0VOVEVSOmMrPShlLW8pLzI7YnJlYWs7Y2FzZSBmLkJBU0VMSU5FOnI9ITAsdGhpcy5fdGV4dEJhc2VsaW5lPWYuVE9QfXE9YytlLXAudGV4dEFzY2VudCgpfWZvcihpPTA7aTxnLmxlbmd0aDtpKyspe2ZvcihrPVwiXCIsbj1nW2ldLnNwbGl0KFwiIFwiKSxoPTA7aDxuLmxlbmd0aDtoKyspbD1rK25baF0rXCIgXCIsbT10aGlzLnRleHRXaWR0aChsKSxtPmQmJmsubGVuZ3RoPjA/KHRoaXMuX3JlbmRlclRleHQocCxrLGIsYyxxKSxrPW5baF0rXCIgXCIsYys9cC50ZXh0TGVhZGluZygpKTprPWw7dGhpcy5fcmVuZGVyVGV4dChwLGssYixjLHEpLGMrPXAudGV4dExlYWRpbmcoKSxyJiYodGhpcy5fdGV4dEJhc2VsaW5lPWYuQkFTRUxJTkUpfX1lbHNle3ZhciBzPTAsdD1wLnRleHRBbGlnbigpLnZlcnRpY2FsO2Zvcih0PT09Zi5DRU5URVI/cz0oZy5sZW5ndGgtMSkqcC50ZXh0TGVhZGluZygpLzI6dD09PWYuQk9UVE9NJiYocz0oZy5sZW5ndGgtMSkqcC50ZXh0TGVhZGluZygpKSxqPTA7ajxnLmxlbmd0aDtqKyspdGhpcy5fcmVuZGVyVGV4dChwLGdbal0sYixjLXMscSksYys9cC50ZXh0TGVhZGluZygpfXJldHVybiBwfX0sZS5SZW5kZXJlci5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5SZW5kZXJlci5wcm90b3R5cGUuX2lzT3BlblR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mKGE9YXx8dGhpcy5fdGV4dEZvbnQpJiZhLmZvbnQmJmEuZm9udC5zdXBwb3J0ZWR9LGUuUmVuZGVyZXIucHJvdG90eXBlLl91cGRhdGVUZXh0TWV0cmljcz1mdW5jdGlvbigpe2lmKHRoaXMuX2lzT3BlblR5cGUoKSlyZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEFzY2VudFwiLHRoaXMuX3RleHRGb250Ll90ZXh0QXNjZW50KCkpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHREZXNjZW50XCIsdGhpcy5fdGV4dEZvbnQuX3RleHREZXNjZW50KCkpLHRoaXM7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7YS5zdHlsZS5mb250RmFtaWx5PXRoaXMuX3RleHRGb250LGEuc3R5bGUuZm9udFNpemU9dGhpcy5fdGV4dFNpemUrXCJweFwiLGEuaW5uZXJIVE1MPVwiQUJDamdxfFwiO3ZhciBiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7Yi5zdHlsZS5kaXNwbGF5PVwiaW5saW5lLWJsb2NrXCIsYi5zdHlsZS53aWR0aD1cIjFweFwiLGIuc3R5bGUuaGVpZ2h0PVwiMHB4XCI7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtjLmFwcGVuZENoaWxkKGEpLGMuYXBwZW5kQ2hpbGQoYiksYy5zdHlsZS5oZWlnaHQ9XCIwcHhcIixjLnN0eWxlLm92ZXJmbG93PVwiaGlkZGVuXCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjKSxiLnN0eWxlLnZlcnRpY2FsQWxpZ249XCJiYXNlbGluZVwiO3ZhciBlPWQoYiksZj1kKGEpLGc9ZVsxXS1mWzFdO2Iuc3R5bGUudmVydGljYWxBbGlnbj1cImJvdHRvbVwiLGU9ZChiKSxmPWQoYSk7dmFyIGg9ZVsxXS1mWzFdLGk9aC1nO3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGMpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRBc2NlbnRcIixnKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0RGVzY2VudFwiLGkpLHRoaXN9LGIuZXhwb3J0cz1lLlJlbmRlcmVyfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjR9XSwyODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIiksZT1hKFwiLi9jb25zdGFudHNcIiksZj1hKFwiLi4vaW1hZ2UvZmlsdGVyc1wiKTthKFwiLi9wNS5SZW5kZXJlclwiKTt2YXIgZz1cInJnYmEoMCwwLDAsMClcIjtkLlJlbmRlcmVyMkQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBkLlJlbmRlcmVyLmNhbGwodGhpcyxhLGIsYyksdGhpcy5kcmF3aW5nQ29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIiksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiZHJhd2luZ0NvbnRleHRcIix0aGlzLmRyYXdpbmdDb250ZXh0KSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5SZW5kZXJlci5wcm90b3R5cGUpLGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdHM9ZnVuY3Rpb24oKXt0aGlzLl9jYWNoZWRGaWxsU3R5bGU9dGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGU9dm9pZCAwLHRoaXMuX3NldEZpbGwoZS5fREVGQVVMVF9GSUxMKSx0aGlzLl9zZXRTdHJva2UoZS5fREVGQVVMVF9TVFJPS0UpLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZUNhcD1lLlJPVU5ELHRoaXMuZHJhd2luZ0NvbnRleHQuZm9udD1cIm5vcm1hbCAxMnB4IHNhbnMtc2VyaWZcIn0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oYSxiKXtkLlJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLGEsYiksdGhpcy5kcmF3aW5nQ29udGV4dC5zY2FsZSh0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LHRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHkpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJhY2tncm91bmQ9ZnVuY3Rpb24oKXtpZih0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSx0aGlzLnJlc2V0TWF0cml4KCksYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkLkltYWdlKXRoaXMuX3BJbnN0LmltYWdlKGFyZ3VtZW50c1swXSwwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCk7ZWxzZXt2YXIgYT10aGlzLl9nZXRGaWxsKCksYj10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpLGM9Yi50b1N0cmluZygpO3RoaXMuX3NldEZpbGwoYyksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsUmVjdCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5fc2V0RmlsbChhKX10aGlzLmRyYXdpbmdDb250ZXh0LnJlc3RvcmUoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSx0aGlzLnJlc2V0TWF0cml4KCksdGhpcy5kcmF3aW5nQ29udGV4dC5jbGVhclJlY3QoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZHJhd2luZ0NvbnRleHQucmVzdG9yZSgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcEluc3QuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKTt0aGlzLl9zZXRGaWxsKGEudG9TdHJpbmcoKSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc3Ryb2tlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcEluc3QuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKTt0aGlzLl9zZXRTdHJva2UoYS50b1N0cmluZygpKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5pbWFnZT1mdW5jdGlvbihhLGIsYyxlLGYsZyxoLGksail7dmFyIGs7dHJ5e3RoaXMuX3RpbnQmJihkLk1lZGlhRWxlbWVudCYmYSBpbnN0YW5jZW9mIGQuTWVkaWFFbGVtZW50JiZhLmxvYWRQaXhlbHMoKSxhLmNhbnZhcyYmKGs9dGhpcy5fZ2V0VGludGVkSW1hZ2VDYW52YXMoYSkpKSxrfHwoaz1hLmNhbnZhc3x8YS5lbHQpO3ZhciBsPTE7YS53aWR0aCYmYS53aWR0aD4wJiYobD1rLndpZHRoL2Eud2lkdGgpLHRoaXMuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGssbCpiLGwqYyxsKmUsbCpmLGcsaCxpLGopfWNhdGNoKGEpe2lmKFwiTlNfRVJST1JfTk9UX0FWQUlMQUJMRVwiIT09YS5uYW1lKXRocm93IGF9dGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9nZXRUaW50ZWRJbWFnZUNhbnZhcz1mdW5jdGlvbihhKXtpZighYS5jYW52YXMpcmV0dXJuIGE7dmFyIGI9Zi5fdG9QaXhlbHMoYS5jYW52YXMpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtjLndpZHRoPWEuY2FudmFzLndpZHRoLGMuaGVpZ2h0PWEuY2FudmFzLmhlaWdodDtmb3IodmFyIGQ9Yy5nZXRDb250ZXh0KFwiMmRcIiksZT1kLmNyZWF0ZUltYWdlRGF0YShhLmNhbnZhcy53aWR0aCxhLmNhbnZhcy5oZWlnaHQpLGc9ZS5kYXRhLGg9MDtoPGIubGVuZ3RoO2grPTQpe3ZhciBpPWJbaF0saj1iW2grMV0saz1iW2grMl0sbD1iW2grM107Z1toXT1pKnRoaXMuX3RpbnRbMF0vMjU1LGdbaCsxXT1qKnRoaXMuX3RpbnRbMV0vMjU1LGdbaCsyXT1rKnRoaXMuX3RpbnRbMl0vMjU1LGdbaCszXT1sKnRoaXMuX3RpbnRbM10vMjU1fXJldHVybiBkLnB1dEltYWdlRGF0YShlLDAsMCksY30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5ibGVuZE1vZGU9ZnVuY3Rpb24oYSl7dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5ibGVuZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uLGI9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0sYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCxhcmd1bWVudHMubGVuZ3RoLTEpO3RoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWIsdGhpcy5fcEluc3Q/dGhpcy5fcEluc3QuY29weS5hcHBseSh0aGlzLl9wSW5zdCxjKTp0aGlzLmNvcHkuYXBwbHkodGhpcyxjKSx0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1hfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZSxmLGcsaCxpLGo7aWYoOT09PWFyZ3VtZW50cy5sZW5ndGgpYT1hcmd1bWVudHNbMF0sYj1hcmd1bWVudHNbMV0sYz1hcmd1bWVudHNbMl0sZT1hcmd1bWVudHNbM10sZj1hcmd1bWVudHNbNF0sZz1hcmd1bWVudHNbNV0saD1hcmd1bWVudHNbNl0saT1hcmd1bWVudHNbN10saj1hcmd1bWVudHNbOF07ZWxzZXtpZig4IT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJTaWduYXR1cmUgbm90IHN1cHBvcnRlZFwiKTthPXRoaXMuX3BJbnN0LGI9YXJndW1lbnRzWzBdLGM9YXJndW1lbnRzWzFdLGU9YXJndW1lbnRzWzJdLGY9YXJndW1lbnRzWzNdLGc9YXJndW1lbnRzWzRdLGg9YXJndW1lbnRzWzVdLGk9YXJndW1lbnRzWzZdLGo9YXJndW1lbnRzWzddfWQuUmVuZGVyZXIyRC5fY29weUhlbHBlcih0aGlzLGEsYixjLGUsZixnLGgsaSxqKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5fY29weUhlbHBlcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSxqKXtiLmxvYWRQaXhlbHMoKTt2YXIgaz1iLmNhbnZhcy53aWR0aC9iLndpZHRoO2EuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGIuY2FudmFzLGsqYyxrKmQsayplLGsqZixnLGgsaSxqKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiLGMsZSl7aWYodm9pZCAwPT09YyYmdm9pZCAwPT09ZSYmKHZvaWQgMD09PWEmJnZvaWQgMD09PWI/KGE9Yj0wLGM9dGhpcy53aWR0aCxlPXRoaXMuaGVpZ2h0KTpjPWU9MSksYStjPDB8fGIrZTwwfHxhPj10aGlzLndpZHRofHxiPj10aGlzLmhlaWdodClyZXR1cm5bMCwwLDAsMjU1XTt2YXIgZj10aGlzLl9wSW5zdHx8dGhpcyxnPWYuX3BpeGVsRGVuc2l0eTthPU1hdGguZmxvb3IoYSksYj1NYXRoLmZsb29yKGIpLGM9TWF0aC5mbG9vcihjKSxlPU1hdGguZmxvb3IoZSk7dmFyIGg9YSpnLGk9YipnO2lmKDEhPT1jfHwxIT09ZXx8dGhpcyBpbnN0YW5jZW9mIGQuUmVuZGVyZXJHTCl7dmFyIGo9TWF0aC5taW4oYyxmLndpZHRoKSxrPU1hdGgubWluKGUsZi5oZWlnaHQpLGw9aipnLG09aypnLG49bmV3IGQuSW1hZ2UoaixrKTtyZXR1cm4gbi5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLmRyYXdJbWFnZSh0aGlzLmNhbnZhcyxoLGksbCxtLDAsMCxqLGspLG59dmFyIG8scDtyZXR1cm4gZi5fcGl4ZWxzRGlydHk/KG89dGhpcy5kcmF3aW5nQ29udGV4dC5nZXRJbWFnZURhdGEoaCxpLDEsMSkuZGF0YSxwPTApOihvPWYucGl4ZWxzLHA9NCooaCtpKnRoaXMud2lkdGgqZykpLFtvW3ArMF0sb1twKzFdLG9bcCsyXSxvW3ArM11dfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmxvYWRQaXhlbHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdHx8dGhpcztpZihhLl9waXhlbHNEaXJ0eSl7YS5fcGl4ZWxzRGlydHk9ITE7dmFyIGI9YS5fcGl4ZWxEZW5zaXR5LGM9dGhpcy53aWR0aCpiLGQ9dGhpcy5oZWlnaHQqYixlPXRoaXMuZHJhd2luZ0NvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsMCxjLGQpO2EuX3NldFByb3BlcnR5KFwiaW1hZ2VEYXRhXCIsZSksYS5fc2V0UHJvcGVydHkoXCJwaXhlbHNcIixlLmRhdGEpfX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe2E9TWF0aC5mbG9vcihhKSxiPU1hdGguZmxvb3IoYik7dmFyIGU9dGhpcy5fcEluc3R8fHRoaXM7aWYoYyBpbnN0YW5jZW9mIGQuSW1hZ2UpdGhpcy5kcmF3aW5nQ29udGV4dC5zYXZlKCksdGhpcy5kcmF3aW5nQ29udGV4dC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRoaXMuZHJhd2luZ0NvbnRleHQuc2NhbGUoZS5fcGl4ZWxEZW5zaXR5LGUuX3BpeGVsRGVuc2l0eSksdGhpcy5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoYy5jYW52YXMsYSxiKSx0aGlzLmRyYXdpbmdDb250ZXh0LnJlc3RvcmUoKSxlLl9waXhlbHNEaXJ0eT0hMDtlbHNle3ZhciBmPTAsZz0wLGg9MCxpPTAsaj00KihiKmUuX3BpeGVsRGVuc2l0eSoodGhpcy53aWR0aCplLl9waXhlbERlbnNpdHkpK2EqZS5fcGl4ZWxEZW5zaXR5KTtpZihlLmltYWdlRGF0YSYmIWUuX3BpeGVsc0RpcnR5fHxlLmxvYWRQaXhlbHMuY2FsbChlKSxcIm51bWJlclwiPT10eXBlb2YgYylqPGUucGl4ZWxzLmxlbmd0aCYmKGY9YyxnPWMsaD1jLGk9MjU1KTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBBcnJheSl7aWYoYy5sZW5ndGg8NCl0aHJvdyBuZXcgRXJyb3IoXCJwaXhlbCBhcnJheSBtdXN0IGJlIG9mIHRoZSBmb3JtIFtSLCBHLCBCLCBBXVwiKTtqPGUucGl4ZWxzLmxlbmd0aCYmKGY9Y1swXSxnPWNbMV0saD1jWzJdLGk9Y1szXSl9ZWxzZSBjIGluc3RhbmNlb2YgZC5Db2xvciYmajxlLnBpeGVscy5sZW5ndGgmJihmPWMubGV2ZWxzWzBdLGc9Yy5sZXZlbHNbMV0saD1jLmxldmVsc1syXSxpPWMubGV2ZWxzWzNdKTtmb3IodmFyIGs9MDtrPGUuX3BpeGVsRGVuc2l0eTtrKyspZm9yKHZhciBsPTA7bDxlLl9waXhlbERlbnNpdHk7bCsrKWo9NCooKGIqZS5fcGl4ZWxEZW5zaXR5K2wpKnRoaXMud2lkdGgqZS5fcGl4ZWxEZW5zaXR5KyhhKmUuX3BpeGVsRGVuc2l0eStrKSksZS5waXhlbHNbal09ZixlLnBpeGVsc1tqKzFdPWcsZS5waXhlbHNbaisyXT1oLGUucGl4ZWxzW2orM109aX19LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudXBkYXRlUGl4ZWxzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuX3BJbnN0fHx0aGlzLGY9ZS5fcGl4ZWxEZW5zaXR5O3ZvaWQgMD09PWEmJnZvaWQgMD09PWImJnZvaWQgMD09PWMmJnZvaWQgMD09PWQmJihhPTAsYj0wLGM9dGhpcy53aWR0aCxkPXRoaXMuaGVpZ2h0KSxjKj1mLGQqPWYsdGhpcy5kcmF3aW5nQ29udGV4dC5wdXRJbWFnZURhdGEoZS5pbWFnZURhdGEsYSxiLDAsMCxjLGQpLDA9PT1hJiYwPT09YiYmYz09PXRoaXMud2lkdGgmJmQ9PT10aGlzLmhlaWdodHx8KGUuX3BpeGVsc0RpcnR5PSEwKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fYWN1dGVBcmNUb0Jlemllcj1mdW5jdGlvbihhLGIpe3ZhciBjPWIvMixkPU1hdGguY29zKGMpLGU9TWF0aC5zaW4oYyksZj0xL01hdGgudGFuKGMpLGc9YStjLGg9TWF0aC5jb3MoZyksaT1NYXRoLnNpbihnKSxqPSg0LWQpLzMsaz1lKyhkLWopKmY7cmV0dXJue2F4Ok1hdGguY29zKGEpLGF5Ok1hdGguc2luKGEpLGJ4OmoqaCtrKmksYnk6aippLWsqaCxjeDpqKmgtayppLGN5OmoqaStrKmgsZHg6TWF0aC5jb3MoYStiKSxkeTpNYXRoLnNpbihhK2IpfX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5hcmM9ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCl7dmFyIGk9dGhpcy5kcmF3aW5nQ29udGV4dCxqPWMvMixrPWQvMixsPTFlLTUsbT0wLG49W107Zm9yKGErPWosYis9aztnLWY+bDspbT1NYXRoLm1pbihnLWYsZS5IQUxGX1BJKSxuLnB1c2godGhpcy5fYWN1dGVBcmNUb0JlemllcihmLG0pKSxmKz1tO3JldHVybiB0aGlzLl9kb0ZpbGwmJihpLmJlZ2luUGF0aCgpLG4uZm9yRWFjaChmdW5jdGlvbihjLGQpezA9PT1kJiZpLm1vdmVUbyhhK2MuYXgqaixiK2MuYXkqayksaS5iZXppZXJDdXJ2ZVRvKGErYy5ieCpqLGIrYy5ieSprLGErYy5jeCpqLGIrYy5jeSprLGErYy5keCpqLGIrYy5keSprKX0pLGghPT1lLlBJRSYmbnVsbCE9aHx8aS5saW5lVG8oYSxiKSxpLmNsb3NlUGF0aCgpLGkuZmlsbCgpKSx0aGlzLl9kb1N0cm9rZSYmKGkuYmVnaW5QYXRoKCksbi5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7MD09PWQmJmkubW92ZVRvKGErYy5heCpqLGIrYy5heSprKSxpLmJlemllckN1cnZlVG8oYStjLmJ4KmosYitjLmJ5KmssYStjLmN4KmosYitjLmN5KmssYStjLmR4KmosYitjLmR5KmspfSksaD09PWUuUElFPyhpLmxpbmVUbyhhLGIpLGkuY2xvc2VQYXRoKCkpOmg9PT1lLkNIT1JEJiZpLmNsb3NlUGF0aCgpLGkuc3Ryb2tlKCkpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZWxsaXBzZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmRyYXdpbmdDb250ZXh0LGM9dGhpcy5fZG9GaWxsLGQ9dGhpcy5fZG9TdHJva2UsZT1hWzBdLGY9YVsxXSxoPWFbMl0saT1hWzNdO2lmKGMmJiFkKXtpZih0aGlzLl9nZXRGaWxsKCk9PT1nKXJldHVybiB0aGlzfWVsc2UgaWYoIWMmJmQmJnRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpczt2YXIgaj0uNTUyMjg0NzQ5OCxrPWgvMipqLGw9aS8yKmosbT1lK2gsbj1mK2ksbz1lK2gvMixwPWYraS8yO2IuYmVnaW5QYXRoKCksYi5tb3ZlVG8oZSxwKSxiLmJlemllckN1cnZlVG8oZSxwLWwsby1rLGYsbyxmKSxiLmJlemllckN1cnZlVG8obytrLGYsbSxwLWwsbSxwKSxiLmJlemllckN1cnZlVG8obSxwK2wsbytrLG4sbyxuKSxiLmJlemllckN1cnZlVG8oby1rLG4sZSxwK2wsZSxwKSxiLmNsb3NlUGF0aCgpLGMmJmIuZmlsbCgpLGQmJmIuc3Ryb2tlKCl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUubGluZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmRyYXdpbmdDb250ZXh0O3JldHVybiB0aGlzLl9kb1N0cm9rZT90aGlzLl9nZXRTdHJva2UoKT09PWc/dGhpczooZS5saW5lV2lkdGglMj09MSYmZS50cmFuc2xhdGUoLjUsLjUpLGUuYmVnaW5QYXRoKCksZS5tb3ZlVG8oYSxiKSxlLmxpbmVUbyhjLGQpLGUuc3Ryb2tlKCksZS5saW5lV2lkdGglMj09MSYmZS50cmFuc2xhdGUoLS41LC0uNSksdGhpcyk6dGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZHJhd2luZ0NvbnRleHQ7aWYoIXRoaXMuX2RvU3Ryb2tlKXJldHVybiB0aGlzO2lmKHRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpczt2YXIgZD10aGlzLl9nZXRTdHJva2UoKSxmPXRoaXMuX2dldEZpbGwoKTthPU1hdGgucm91bmQoYSksYj1NYXRoLnJvdW5kKGIpLHRoaXMuX3NldEZpbGwoZCksYy5saW5lV2lkdGg+MT8oYy5iZWdpblBhdGgoKSxjLmFyYyhhLGIsYy5saW5lV2lkdGgvMiwwLGUuVFdPX1BJLCExKSxjLmZpbGwoKSk6Yy5maWxsUmVjdChhLGIsMSwxKSx0aGlzLl9zZXRGaWxsKGYpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnF1YWQ9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsaCxpKXt2YXIgaj10aGlzLmRyYXdpbmdDb250ZXh0LGs9dGhpcy5fZG9GaWxsLGw9dGhpcy5fZG9TdHJva2U7aWYoayYmIWwpe2lmKHRoaXMuX2dldEZpbGwoKT09PWcpcmV0dXJuIHRoaXN9ZWxzZSBpZighayYmbCYmdGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO3JldHVybiBqLmJlZ2luUGF0aCgpLGoubW92ZVRvKGEsYiksai5saW5lVG8oYyxkKSxqLmxpbmVUbyhlLGYpLGoubGluZVRvKGgsaSksai5jbG9zZVBhdGgoKSxrJiZqLmZpbGwoKSxsJiZqLnN0cm9rZSgpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucmVjdD1mdW5jdGlvbihhKXt2YXIgYj1hWzBdLGM9YVsxXSxkPWFbMl0sZT1hWzNdLGY9YVs0XSxoPWFbNV0saT1hWzZdLGo9YVs3XSxrPXRoaXMuZHJhd2luZ0NvbnRleHQsbD10aGlzLl9kb0ZpbGwsbT10aGlzLl9kb1N0cm9rZTtpZihsJiYhbSl7aWYodGhpcy5fZ2V0RmlsbCgpPT09ZylyZXR1cm4gdGhpc31lbHNlIGlmKCFsJiZtJiZ0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7aWYodGhpcy5fZG9TdHJva2UmJmsubGluZVdpZHRoJTI9PTEmJmsudHJhbnNsYXRlKC41LC41KSxrLmJlZ2luUGF0aCgpLHZvaWQgMD09PWYpay5yZWN0KGIsYyxkLGUpO2Vsc2V7dm9pZCAwPT09aCYmKGg9Ziksdm9pZCAwPT09aSYmKGk9aCksdm9pZCAwPT09aiYmKGo9aSk7dmFyIG49ZC8yLG89ZS8yO2Q8MipmJiYoZj1uKSxlPDIqZiYmKGY9byksZDwyKmgmJihoPW4pLGU8MipoJiYoaD1vKSxkPDIqaSYmKGk9biksZTwyKmkmJihpPW8pLGQ8MipqJiYoaj1uKSxlPDIqaiYmKGo9byksay5iZWdpblBhdGgoKSxrLm1vdmVUbyhiK2YsYyksay5hcmNUbyhiK2QsYyxiK2QsYytlLGgpLGsuYXJjVG8oYitkLGMrZSxiLGMrZSxpKSxrLmFyY1RvKGIsYytlLGIsYyxqKSxrLmFyY1RvKGIsYyxiK2QsYyxmKSxrLmNsb3NlUGF0aCgpfXJldHVybiB0aGlzLl9kb0ZpbGwmJmsuZmlsbCgpLHRoaXMuX2RvU3Ryb2tlJiZrLnN0cm9rZSgpLHRoaXMuX2RvU3Ryb2tlJiZrLmxpbmVXaWR0aCUyPT0xJiZrLnRyYW5zbGF0ZSgtLjUsLS41KSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRyaWFuZ2xlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZHJhd2luZ0NvbnRleHQsYz10aGlzLl9kb0ZpbGwsZD10aGlzLl9kb1N0cm9rZSxlPWFbMF0sZj1hWzFdLGg9YVsyXSxpPWFbM10saj1hWzRdLGs9YVs1XTtpZihjJiYhZCl7aWYodGhpcy5fZ2V0RmlsbCgpPT09ZylyZXR1cm4gdGhpc31lbHNlIGlmKCFjJiZkJiZ0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7Yi5iZWdpblBhdGgoKSxiLm1vdmVUbyhlLGYpLGIubGluZVRvKGgsaSksYi5saW5lVG8oaixrKSxiLmNsb3NlUGF0aCgpLGMmJmIuZmlsbCgpLGQmJmIuc3Ryb2tlKCl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZW5kU2hhcGU9ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCl7aWYoMD09PWIubGVuZ3RoKXJldHVybiB0aGlzO2lmKCF0aGlzLl9kb1N0cm9rZSYmIXRoaXMuX2RvRmlsbClyZXR1cm4gdGhpczt2YXIgaSxqPWE9PT1lLkNMT1NFO2omJiFnJiZiLnB1c2goYlswXSk7dmFyIGssbCxtPWIubGVuZ3RoO2lmKCFjfHxoIT09ZS5QT0xZR09OJiZudWxsIT09aClpZighZHx8aCE9PWUuUE9MWUdPTiYmbnVsbCE9PWgpaWYoIWZ8fGghPT1lLlBPTFlHT04mJm51bGwhPT1oKWlmKGg9PT1lLlBPSU5UUylmb3Ioaz0wO2s8bTtrKyspaT1iW2tdLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoaVs2XSksdGhpcy5fcEluc3QucG9pbnQoaVswXSxpWzFdKTtlbHNlIGlmKGg9PT1lLkxJTkVTKWZvcihrPTA7aysxPG07ays9MilpPWJba10sdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srMV1bNl0pLHRoaXMuX3BJbnN0LmxpbmUoaVswXSxpWzFdLGJbaysxXVswXSxiW2srMV1bMV0pO2Vsc2UgaWYoaD09PWUuVFJJQU5HTEVTKWZvcihrPTA7aysyPG07ays9MylpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysyXVswXSxiW2srMl1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fZG9GaWxsJiYodGhpcy5fcEluc3QuZmlsbChiW2srMl1bNV0pLHRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbCgpKSx0aGlzLl9kb1N0cm9rZSYmKHRoaXMuX3BJbnN0LnN0cm9rZShiW2srMl1bNl0pLHRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlKCkpO2Vsc2UgaWYoaD09PWUuVFJJQU5HTEVfU1RSSVApZm9yKGs9MDtrKzE8bTtrKyspaT1iW2tdLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYltrKzFdWzBdLGJbaysxXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbaysxXVs2XSksXG50aGlzLl9kb0ZpbGwmJnRoaXMuX3BJbnN0LmZpbGwoYltrKzFdWzVdKSxrKzI8bSYmKHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysyXVswXSxiW2srMl1bMV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzJdWzZdKSx0aGlzLl9kb0ZpbGwmJnRoaXMuX3BJbnN0LmZpbGwoYltrKzJdWzVdKSksdGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKTtlbHNlIGlmKGg9PT1lLlRSSUFOR0xFX0ZBTil7aWYobT4yKXtmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSxrPTI7azxtO2srKylpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYlswXVswXSxiWzBdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2stMV1bMF0sYltrLTFdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbMF1bMF0sYlswXVsxXSksazxtLTEmJih0aGlzLl9kb0ZpbGwmJmlbNV0hPT1iW2srMV1bNV18fHRoaXMuX2RvU3Ryb2tlJiZpWzZdIT09YltrKzFdWzZdKSYmKHRoaXMuX2RvRmlsbCYmKHRoaXMuX3BJbnN0LmZpbGwoaVs1XSksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsKCksdGhpcy5fcEluc3QuZmlsbChiW2srMV1bNV0pKSx0aGlzLl9kb1N0cm9rZSYmKHRoaXMuX3BJbnN0LnN0cm9rZShpWzZdKSx0aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZSgpLHRoaXMuX3BJbnN0LnN0cm9rZShiW2srMV1bNl0pKSx0aGlzLmRyYXdpbmdDb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCkpO3RoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9fWVsc2UgaWYoaD09PWUuUVVBRFMpZm9yKGs9MDtrKzM8bTtrKz00KXtmb3IoaT1iW2tdLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oaVswXSxpWzFdKSxsPTE7bDw0O2wrKyl0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srbF1bMF0sYltrK2xdWzFdKTt0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srM11bNV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzNdWzZdKSx0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2UgaWYoaD09PWUuUVVBRF9TVFJJUCl7aWYobT4zKWZvcihrPTA7aysxPG07ays9MilpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSxrKzM8bT8odGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYltrKzJdWzBdLGJbaysyXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srMV1bMF0sYltrKzFdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srM11bMF0sYltrKzNdWzFdKSx0aGlzLl9kb0ZpbGwmJnRoaXMuX3BJbnN0LmZpbGwoYltrKzNdWzVdKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbayszXVs2XSkpOih0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pKSx0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2V7Zm9yKHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYlswXVswXSxiWzBdWzFdKSxrPTE7azxtO2srKylpPWJba10saS5pc1ZlcnQmJihpLm1vdmVUbz90aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSkpO3RoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZXtmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSxrPTA7azxtO2srKyliW2tdLmlzVmVydD9iW2tdLm1vdmVUbz90aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhbMF0sYltrXVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrXVswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oYltrXVswXSxiW2tdWzFdLGJba11bMl0sYltrXVszXSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNle2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGs9MDtrPG07aysrKWJba10uaXNWZXJ0P2Jba10ubW92ZVRvP3RoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJba11bMF0sYltrXVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrXVswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LmJlemllckN1cnZlVG8oYltrXVswXSxiW2tdWzFdLGJba11bMl0sYltrXVszXSxiW2tdWzRdLGJba11bNV0pO3RoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZSBpZihtPjMpe3ZhciBuPVtdLG89MS10aGlzLl9jdXJ2ZVRpZ2h0bmVzcztmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiWzFdWzBdLGJbMV1bMV0pLGs9MTtrKzI8bTtrKyspaT1iW2tdLG5bMF09W2lbMF0saVsxXV0sblsxXT1baVswXSsobypiW2srMV1bMF0tbypiW2stMV1bMF0pLzYsaVsxXSsobypiW2srMV1bMV0tbypiW2stMV1bMV0pLzZdLG5bMl09W2JbaysxXVswXSsobypiW2tdWzBdLW8qYltrKzJdWzBdKS82LGJbaysxXVsxXSsobypiW2tdWzFdLW8qYltrKzJdWzFdKS82XSxuWzNdPVtiW2srMV1bMF0sYltrKzFdWzFdXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlemllckN1cnZlVG8oblsxXVswXSxuWzFdWzFdLG5bMl1bMF0sblsyXVsxXSxuWzNdWzBdLG5bM11bMV0pO2omJnRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pLHRoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9cmV0dXJuIGM9ITEsZD0hMSxmPSExLGc9ITEsaiYmYi5wb3AoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5ub1Ntb290aD1mdW5jdGlvbigpe3JldHVyblwiaW1hZ2VTbW9vdGhpbmdFbmFibGVkXCJpbiB0aGlzLmRyYXdpbmdDb250ZXh0JiYodGhpcy5kcmF3aW5nQ29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITEpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuXCJpbWFnZVNtb290aGluZ0VuYWJsZWRcImluIHRoaXMuZHJhd2luZ0NvbnRleHQmJih0aGlzLmRyYXdpbmdDb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zdHJva2VDYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1lLlJPVU5EJiZhIT09ZS5TUVVBUkUmJmEhPT1lLlBST0pFQ1R8fCh0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVDYXA9YSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zdHJva2VKb2luPWZ1bmN0aW9uKGEpe3JldHVybiBhIT09ZS5ST1VORCYmYSE9PWUuQkVWRUwmJmEhPT1lLk1JVEVSfHwodGhpcy5kcmF3aW5nQ29udGV4dC5saW5lSm9pbj1hKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnN0cm9rZVdlaWdodD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lV2lkdGg9dm9pZCAwPT09YXx8MD09PWE/MWUtNDphLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2dldEZpbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FjaGVkRmlsbFN0eWxlfHwodGhpcy5fY2FjaGVkRmlsbFN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFN0eWxlKSx0aGlzLl9jYWNoZWRGaWxsU3R5bGV9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX3NldEZpbGw9ZnVuY3Rpb24oYSl7YSE9PXRoaXMuX2NhY2hlZEZpbGxTdHlsZSYmKHRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFN0eWxlPWEsdGhpcy5fY2FjaGVkRmlsbFN0eWxlPWEpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9nZXRTdHJva2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGV8fCh0aGlzLl9jYWNoZWRTdHJva2VTdHlsZT10aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZVN0eWxlKSx0aGlzLl9jYWNoZWRTdHJva2VTdHlsZX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fc2V0U3Ryb2tlPWZ1bmN0aW9uKGEpe2EhPT10aGlzLl9jYWNoZWRTdHJva2VTdHlsZSYmKHRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlU3R5bGU9YSx0aGlzLl9jYWNoZWRTdHJva2VTdHlsZT1hKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5iZXppZXI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXtyZXR1cm4gdGhpcy5fcEluc3QuYmVnaW5TaGFwZSgpLHRoaXMuX3BJbnN0LnZlcnRleChhLGIpLHRoaXMuX3BJbnN0LmJlemllclZlcnRleChjLGQsZSxmLGcsaCksdGhpcy5fcEluc3QuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmN1cnZlPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCl7cmV0dXJuIHRoaXMuX3BJbnN0LmJlZ2luU2hhcGUoKSx0aGlzLl9wSW5zdC5jdXJ2ZVZlcnRleChhLGIpLHRoaXMuX3BJbnN0LmN1cnZlVmVydGV4KGMsZCksdGhpcy5fcEluc3QuY3VydmVWZXJ0ZXgoZSxmKSx0aGlzLl9wSW5zdC5jdXJ2ZVZlcnRleChnLGgpLHRoaXMuX3BJbnN0LmVuZFNoYXBlKCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fZG9GaWxsU3Ryb2tlQ2xvc2U9ZnVuY3Rpb24oKXt0aGlzLl9kb0ZpbGwmJnRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbCgpLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZSgpLHRoaXMuZHJhd2luZ0NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmRyYXdpbmdDb250ZXh0LnRyYW5zZm9ybShhLGIsYyxkLGUsZil9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucmVzZXRNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRoaXMuZHJhd2luZ0NvbnRleHQuc2NhbGUodGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSx0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5KSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhKXt0aGlzLmRyYXdpbmdDb250ZXh0LnJvdGF0ZShhKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnNjYWxlKGEsYiksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zaGVhclg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNmb3JtKDEsMCxNYXRoLnRhbihhKSwxLDAsMCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zaGVhclk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNmb3JtKDEsTWF0aC50YW4oYSksMCwxLDAsMCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yJiYoYj1hLnksYT1hLngpLHRoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNsYXRlKGEsYiksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGEsYixjLGYsZyl7dmFyIGg7dm9pZCAwIT09ZiYmdm9pZCAwIT09ZyYmdGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QmFzZWxpbmU9PT1lLkJBU0VMSU5FJiYoaD0hMCx0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT1lLlRPUCk7dmFyIGk9ZC5SZW5kZXJlci5wcm90b3R5cGUudGV4dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGgmJih0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT1lLkJBU0VMSU5FKSxpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9yZW5kZXJUZXh0PWZ1bmN0aW9uKGEsYixjLGQsZil7aWYoIShkPj1mKSlyZXR1cm4gYS5wdXNoKCksdGhpcy5faXNPcGVuVHlwZSgpP3RoaXMuX3RleHRGb250Ll9yZW5kZXJQYXRoKGIsYyxkLHtyZW5kZXJlcjp0aGlzfSk6KHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9zdHJva2VTZXQmJnRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlVGV4dChiLGMsZCksdGhpcy5fZG9GaWxsJiYodGhpcy5fZmlsbFNldHx8dGhpcy5fc2V0RmlsbChlLl9ERUZBVUxUX1RFWFRfRklMTCksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsVGV4dChiLGMsZCkpKSxhLnBvcCgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCxhfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRleHRXaWR0aD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5faXNPcGVuVHlwZSgpP3RoaXMuX3RleHRGb250Ll90ZXh0V2lkdGgoYSx0aGlzLl90ZXh0U2l6ZSk6dGhpcy5kcmF3aW5nQ29udGV4dC5tZWFzdXJlVGV4dChhKS53aWR0aH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fYXBwbHlUZXh0UHJvcGVydGllcz1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5fcEluc3Q7cmV0dXJuIHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRBc2NlbnRcIixudWxsKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0RGVzY2VudFwiLG51bGwpLGE9dGhpcy5fdGV4dEZvbnQsdGhpcy5faXNPcGVuVHlwZSgpJiYoYT10aGlzLl90ZXh0Rm9udC5mb250LmZhbWlseU5hbWUsdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dFN0eWxlXCIsdGhpcy5fdGV4dEZvbnQuZm9udC5zdHlsZU5hbWUpKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZvbnQ9KHRoaXMuX3RleHRTdHlsZXx8XCJub3JtYWxcIikrXCIgXCIrKHRoaXMuX3RleHRTaXplfHwxMikrXCJweCBcIisoYXx8XCJzYW5zLXNlcmlmXCIpLHRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEFsaWduPXRoaXMuX3RleHRBbGlnbix0aGlzLl90ZXh0QmFzZWxpbmU9PT1lLkNFTlRFUj90aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT1lLl9DVFhfTUlERExFOnRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPXRoaXMuX3RleHRCYXNlbGluZSxifSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC5zYXZlKCksZC5SZW5kZXJlci5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oYSl7dGhpcy5kcmF3aW5nQ29udGV4dC5yZXN0b3JlKCksdGhpcy5fY2FjaGVkRmlsbFN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFN0eWxlLHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlU3R5bGUsZC5SZW5kZXJlci5wcm90b3R5cGUucG9wLmNhbGwodGhpcyxhKX0sYi5leHBvcnRzPWQuUmVuZGVyZXIyRH0se1wiLi4vaW1hZ2UvZmlsdGVyc1wiOjQyLFwiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0LFwiLi9wNS5SZW5kZXJlclwiOjI3fV0sMjk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpLGU9YShcIi4vY29uc3RhbnRzXCIpO2EoXCIuL3A1LkdyYXBoaWNzXCIpLGEoXCIuL3A1LlJlbmRlcmVyMkRcIiksYShcIi4uL3dlYmdsL3A1LlJlbmRlcmVyR0xcIik7dmFyIGY9XCJkZWZhdWx0Q2FudmFzMFwiLGc9XCJwNUNhbnZhc1wiO2QucHJvdG90eXBlLmNyZWF0ZUNhbnZhcz1mdW5jdGlvbihhLGIsYyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlQ2FudmFzXCIsYXJndW1lbnRzKTt2YXIgaCxpPWN8fGUuUDJEO2lmKGk9PT1lLldFQkdMKXtpZihoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpKXtoLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCk7dmFyIGo9dGhpcy5fcmVuZGVyZXI7dGhpcy5fZWxlbWVudHM9dGhpcy5fZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT09an0pfWg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxoLmlkPWYsaC5jbGFzc0xpc3QuYWRkKGcpfWVsc2UgaWYodGhpcy5fZGVmYXVsdEdyYXBoaWNzQ3JlYXRlZCloPXRoaXMuY2FudmFzO2Vsc2V7aD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Zvcih2YXIgaz0wO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGVmYXVsdENhbnZhc1wiK2spOylrKys7Zj1cImRlZmF1bHRDYW52YXNcIitrLGguaWQ9ZixoLmNsYXNzTGlzdC5hZGQoZyl9cmV0dXJuIHRoaXMuX3NldHVwRG9uZXx8KGguZGF0YXNldC5oaWRkZW49ITAsaC5zdHlsZS52aXNpYmlsaXR5PVwiaGlkZGVuXCIpLHRoaXMuX3VzZXJOb2RlP3RoaXMuX3VzZXJOb2RlLmFwcGVuZENoaWxkKGgpOmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaCksaT09PWUuV0VCR0w/KHRoaXMuX3NldFByb3BlcnR5KFwiX3JlbmRlcmVyXCIsbmV3IGQuUmVuZGVyZXJHTChoLHRoaXMsITApKSx0aGlzLl9lbGVtZW50cy5wdXNoKHRoaXMuX3JlbmRlcmVyKSk6dGhpcy5fZGVmYXVsdEdyYXBoaWNzQ3JlYXRlZHx8KHRoaXMuX3NldFByb3BlcnR5KFwiX3JlbmRlcmVyXCIsbmV3IGQuUmVuZGVyZXIyRChoLHRoaXMsITApKSx0aGlzLl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkPSEwLHRoaXMuX2VsZW1lbnRzLnB1c2godGhpcy5fcmVuZGVyZXIpKSx0aGlzLl9yZW5kZXJlci5yZXNpemUoYSxiKSx0aGlzLl9yZW5kZXJlci5fYXBwbHlEZWZhdWx0cygpLHRoaXMuX3JlbmRlcmVyfSxkLnByb3RvdHlwZS5yZXNpemVDYW52YXM9ZnVuY3Rpb24oYSxiLGMpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlc2l6ZUNhbnZhc1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIpe3ZhciBlPXt9O2Zvcih2YXIgZiBpbiB0aGlzLmRyYXdpbmdDb250ZXh0KXt2YXIgZz10aGlzLmRyYXdpbmdDb250ZXh0W2ZdO1wib2JqZWN0XCIhPXR5cGVvZiBnJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBnJiYoZVtmXT1nKX10aGlzLl9yZW5kZXJlci5yZXNpemUoYSxiKSx0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yjtmb3IodmFyIGggaW4gZSl0cnl7dGhpcy5kcmF3aW5nQ29udGV4dFtoXT1lW2hdfWNhdGNoKGEpe31jfHx0aGlzLnJlZHJhdygpfX0sZC5wcm90b3R5cGUubm9DYW52YXM9ZnVuY3Rpb24oKXt0aGlzLmNhbnZhcyYmdGhpcy5jYW52YXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNhbnZhcyl9LGQucHJvdG90eXBlLmNyZWF0ZUdyYXBoaWNzPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlR3JhcGhpY3NcIixhcmd1bWVudHMpLG5ldyBkLkdyYXBoaWNzKGEsYixjLHRoaXMpfSxkLnByb3RvdHlwZS5ibGVuZE1vZGU9ZnVuY3Rpb24oYSl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmxlbmRNb2RlXCIsYXJndW1lbnRzKSxhIT09ZS5CTEVORCYmYSE9PWUuREFSS0VTVCYmYSE9PWUuTElHSFRFU1QmJmEhPT1lLkRJRkZFUkVOQ0UmJmEhPT1lLk1VTFRJUExZJiZhIT09ZS5FWENMVVNJT04mJmEhPT1lLlNDUkVFTiYmYSE9PWUuUkVQTEFDRSYmYSE9PWUuT1ZFUkxBWSYmYSE9PWUuSEFSRF9MSUdIVCYmYSE9PWUuU09GVF9MSUdIVCYmYSE9PWUuRE9ER0UmJmEhPT1lLkJVUk4mJmEhPT1lLkFERCYmYSE9PWUuTk9STUFMKXRocm93IG5ldyBFcnJvcihcIk1vZGUgXCIrYStcIiBub3QgcmVjb2duaXplZC5cIik7dGhpcy5fcmVuZGVyZXIuYmxlbmRNb2RlKGEpfSxiLmV4cG9ydHM9ZH0se1wiLi4vd2ViZ2wvcDUuUmVuZGVyZXJHTFwiOjc0LFwiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0LFwiLi9wNS5HcmFwaGljc1wiOjI2LFwiLi9wNS5SZW5kZXJlcjJEXCI6Mjh9XSwzMDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9tYWluXCIpLGU9YShcIi4uL2NvbnN0YW50c1wiKSxmPWEoXCIuLi9oZWxwZXJzXCIpO2EoXCIuLi9lcnJvcl9oZWxwZXJzXCIpLGQucHJvdG90eXBlLmFyYz1mdW5jdGlvbihhLGIsYyxnLGgsaSxqLGspe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImFyY1wiLGFyZ3VtZW50cyksIXRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmIXRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpcmV0dXJuIHRoaXM7Zm9yKGg9dGhpcy5fdG9SYWRpYW5zKGgpLGk9dGhpcy5fdG9SYWRpYW5zKGkpO2g8MDspaCs9ZS5UV09fUEk7Zm9yKDtpPDA7KWkrPWUuVFdPX1BJO3ZvaWQgMCE9PWgmJnZvaWQgMCE9PWkmJihpLnRvRml4ZWQoMTApPT09aC50b0ZpeGVkKDEwKXx8TWF0aC5hYnMoaS1oKT09PWUuVFdPX1BJPyhoJT1lLlRXT19QSSxpJT1lLlRXT19QSSxoKz1lLlRXT19QSSk6TWF0aC5hYnMoaS1oKT5lLlRXT19QSSYmKGglPWUuVFdPX1BJLGklPWUuVFdPX1BJLGkrPWUuVFdPX1BJKSksaDw9ZS5IQUxGX1BJP2g9TWF0aC5hdGFuKGMvZypNYXRoLnRhbihoKSk6aD5lLkhBTEZfUEkmJmg8PTMqZS5IQUxGX1BJJiYoaD1NYXRoLmF0YW4oYy9nKk1hdGgudGFuKGgpKStlLlBJKSxpPD1lLkhBTEZfUEk/aT1NYXRoLmF0YW4oYy9nKk1hdGgudGFuKGkpKTppPmUuSEFMRl9QSSYmaTw9MyplLkhBTEZfUEkmJihpPU1hdGguYXRhbihjL2cqTWF0aC50YW4oaSkpK2UuUEkpLGg+aSYmKGkrPWUuVFdPX1BJKSxjPU1hdGguYWJzKGMpLGc9TWF0aC5hYnMoZyk7dmFyIGw9Zi5tb2RlQWRqdXN0KGEsYixjLGcsdGhpcy5fcmVuZGVyZXIuX2VsbGlwc2VNb2RlKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuYXJjKGwueCxsLnksbC53LGwuaCxoLGksaixrKSx0aGlzfSxkLnByb3RvdHlwZS5lbGxpcHNlPWZ1bmN0aW9uKGEsYixjLGUsZyl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZWxsaXBzZVwiLGFyZ3VtZW50cyksIXRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmIXRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpcmV0dXJuIHRoaXM7YzwwJiYoYz1NYXRoLmFicyhjKSksdm9pZCAwPT09ZT9lPWM6ZTwwJiYoZT1NYXRoLmFicyhlKSk7dmFyIGg9Zi5tb2RlQWRqdXN0KGEsYixjLGUsdGhpcy5fcmVuZGVyZXIuX2VsbGlwc2VNb2RlKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZWxsaXBzZShbaC54LGgueSxoLncsaC5oLGddKSx0aGlzfSxkLnByb3RvdHlwZS5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxpbmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmdGhpcy5fcmVuZGVyZXIubGluZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBvaW50XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJnRoaXMuX3JlbmRlcmVyLnBvaW50LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucXVhZD1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJxdWFkXCIsYXJndW1lbnRzKSwodGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlfHx0aGlzLl9yZW5kZXJlci5fZG9GaWxsKSYmdGhpcy5fcmVuZGVyZXIucXVhZC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLnJlY3Q9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyZWN0XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2V8fHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpe2Zvcih2YXIgYT1mLm1vZGVBZGp1c3QoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLHRoaXMuX3JlbmRlcmVyLl9yZWN0TW9kZSksYj1bYS54LGEueSxhLncsYS5oXSxjPTQ7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliW2NdPWFyZ3VtZW50c1tjXTt0aGlzLl9yZW5kZXJlci5yZWN0KGIpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS50cmlhbmdsZT1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0cmlhbmdsZVwiLGFyZ3VtZW50cyksKHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZXx8dGhpcy5fcmVuZGVyZXIuX2RvRmlsbCkmJnRoaXMuX3JlbmRlcmVyLnRyaWFuZ2xlKGFyZ3VtZW50cyksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4uL2NvbnN0YW50c1wiOjE4LFwiLi4vZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vaGVscGVyc1wiOjIxLFwiLi4vbWFpblwiOjI0fV0sMzE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vbWFpblwiKSxlPWEoXCIuLi9jb25zdGFudHNcIik7ZC5wcm90b3R5cGUuZWxsaXBzZU1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImVsbGlwc2VNb2RlXCIsYXJndW1lbnRzKSxhIT09ZS5DT1JORVImJmEhPT1lLkNPUk5FUlMmJmEhPT1lLlJBRElVUyYmYSE9PWUuQ0VOVEVSfHwodGhpcy5fcmVuZGVyZXIuX2VsbGlwc2VNb2RlPWEpLHRoaXN9LGQucHJvdG90eXBlLm5vU21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLm5vU21vb3RoKCksdGhpc30sZC5wcm90b3R5cGUucmVjdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlY3RNb2RlXCIsYXJndW1lbnRzKSxhIT09ZS5DT1JORVImJmEhPT1lLkNPUk5FUlMmJmEhPT1lLlJBRElVUyYmYSE9PWUuQ0VOVEVSfHwodGhpcy5fcmVuZGVyZXIuX3JlY3RNb2RlPWEpLHRoaXN9LGQucHJvdG90eXBlLnNtb290aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5zbW9vdGgoKSx0aGlzfSxkLnByb3RvdHlwZS5zdHJva2VDYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInN0cm9rZUNhcFwiLGFyZ3VtZW50cyksYSE9PWUuUk9VTkQmJmEhPT1lLlNRVUFSRSYmYSE9PWUuUFJPSkVDVHx8dGhpcy5fcmVuZGVyZXIuc3Ryb2tlQ2FwKGEpLHRoaXN9LGQucHJvdG90eXBlLnN0cm9rZUpvaW49ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInN0cm9rZUpvaW5cIixhcmd1bWVudHMpLGEhPT1lLlJPVU5EJiZhIT09ZS5CRVZFTCYmYSE9PWUuTUlURVJ8fHRoaXMuX3JlbmRlcmVyLnN0cm9rZUpvaW4oYSksdGhpc30sZC5wcm90b3R5cGUuc3Ryb2tlV2VpZ2h0PWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzdHJva2VXZWlnaHRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnN0cm9rZVdlaWdodChhKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29uc3RhbnRzXCI6MTgsXCIuLi9tYWluXCI6MjR9XSwzMjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9tYWluXCIpO2EoXCIuLi9lcnJvcl9oZWxwZXJzXCIpLGQucHJvdG90eXBlLmJlemllcj1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZXx8dGhpcy5fcmVuZGVyZXIuX2RvRmlsbD8odGhpcy5fcmVuZGVyZXIuYmV6aWVyLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpcyk6dGhpc30sZC5wcm90b3R5cGUuYmV6aWVyRGV0YWlsPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJEZXRhaWxcIixhcmd1bWVudHMpLHRoaXMuX2JlemllckRldGFpbD1hLHRoaXN9LGQucHJvdG90eXBlLmJlemllclBvaW50PWZ1bmN0aW9uKGEsYixjLGUsZil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmV6aWVyUG9pbnRcIixhcmd1bWVudHMpO3ZhciBnPTEtZjtyZXR1cm4gTWF0aC5wb3coZywzKSphKzMqTWF0aC5wb3coZywyKSpmKmIrMypnKk1hdGgucG93KGYsMikqYytNYXRoLnBvdyhmLDMpKmV9LGQucHJvdG90eXBlLmJlemllclRhbmdlbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJUYW5nZW50XCIsYXJndW1lbnRzKTt2YXIgZz0xLWY7cmV0dXJuIDMqZSpNYXRoLnBvdyhmLDIpLTMqYypNYXRoLnBvdyhmLDIpKzYqYypnKmYtNipiKmcqZiszKmIqTWF0aC5wb3coZywyKS0zKmEqTWF0aC5wb3coZywyKX0sZC5wcm90b3R5cGUuY3VydmU9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmdGhpcy5fcmVuZGVyZXIuY3VydmUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5jdXJ2ZURldGFpbD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVEZXRhaWxcIixhcmd1bWVudHMpLHRoaXMuX2N1cnZlRGV0YWlsPWE8Mz8zOmEsdGhpc30sZC5wcm90b3R5cGUuY3VydmVUaWdodG5lc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlVGlnaHRuZXNzXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fY3VydmVUaWdodG5lc3M9YSx0aGlzfSxkLnByb3RvdHlwZS5jdXJ2ZVBvaW50PWZ1bmN0aW9uKGEsYixjLGUsZil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVQb2ludFwiLGFyZ3VtZW50cyk7dmFyIGc9ZipmKmYsaD1mKmY7cmV0dXJuIGEqKC0uNSpnK2gtLjUqZikrYiooMS41KmctMi41KmgrMSkrYyooLTEuNSpnKzIqaCsuNSpmKStlKiguNSpnLS41KmgpfSxkLnByb3RvdHlwZS5jdXJ2ZVRhbmdlbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVRhbmdlbnRcIixhcmd1bWVudHMpO3ZhciBnPWYqZjtyZXR1cm4gYSooLTMqZy8yKzIqZi0uNSkrYiooOSpnLzItNSpmKStjKigtOSpnLzIrNCpmKy41KStlKigzKmcvMi1mKX0sYi5leHBvcnRzPWR9LHtcIi4uL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL21haW5cIjoyNH1dLDMzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL21haW5cIiksZT1hKFwiLi4vY29uc3RhbnRzXCIpLGY9bnVsbCxnPVtdLGg9W10saT0hMSxqPSExLGs9ITEsbD0hMSxtPSEwO2QucHJvdG90eXBlLmJlZ2luQ29udG91cj1mdW5jdGlvbigpe3JldHVybiBoPVtdLGw9ITAsdGhpc30sZC5wcm90b3R5cGUuYmVnaW5TaGFwZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmVnaW5TaGFwZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0Q/dGhpcy5fcmVuZGVyZXIuYmVnaW5TaGFwZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpOihmPWE9PT1lLlBPSU5UU3x8YT09PWUuTElORVN8fGE9PT1lLlRSSUFOR0xFU3x8YT09PWUuVFJJQU5HTEVfRkFOfHxhPT09ZS5UUklBTkdMRV9TVFJJUHx8YT09PWUuUVVBRFN8fGE9PT1lLlFVQURfU1RSSVA/YTpudWxsLGc9W10saD1bXSksdGhpc30sZC5wcm90b3R5cGUuYmV6aWVyVmVydGV4PWZ1bmN0aW9uKCl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmV6aWVyVmVydGV4XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRCl0aGlzLl9yZW5kZXJlci5iZXppZXJWZXJ0ZXguYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTtlbHNle2lmKDA9PT1nLmxlbmd0aCl0aHJvd1widmVydGV4KCkgbXVzdCBiZSB1c2VkIG9uY2UgYmVmb3JlIGNhbGxpbmcgYmV6aWVyVmVydGV4KClcIjtpPSEwO2Zvcih2YXIgYT1bXSxiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKylhW2JdPWFyZ3VtZW50c1tiXTthLmlzVmVydD0hMSxsP2gucHVzaChhKTpnLnB1c2goYSl9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLmN1cnZlVmVydGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlVmVydGV4XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRD90aGlzLl9yZW5kZXJlci5jdXJ2ZVZlcnRleC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpOihqPSEwLHRoaXMudmVydGV4KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pKSx0aGlzfSxkLnByb3RvdHlwZS5lbmRDb250b3VyPWZ1bmN0aW9uKCl7dmFyIGE9aFswXS5zbGljZSgpO2EuaXNWZXJ0PWhbMF0uaXNWZXJ0LGEubW92ZVRvPSExLGgucHVzaChhKSxtJiYoZy5wdXNoKGdbMF0pLG09ITEpO2Zvcih2YXIgYj0wO2I8aC5sZW5ndGg7YisrKWcucHVzaChoW2JdKTtyZXR1cm4gdGhpc30sZC5wcm90b3R5cGUuZW5kU2hhcGU9ZnVuY3Rpb24oYSl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZW5kU2hhcGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEKXRoaXMuX3JlbmRlcmVyLmVuZFNoYXBlKGEsaixpLGssbCxmKTtlbHNle2lmKDA9PT1nLmxlbmd0aClyZXR1cm4gdGhpcztpZighdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiYhdGhpcy5fcmVuZGVyZXIuX2RvRmlsbClyZXR1cm4gdGhpczt2YXIgYj1hPT09ZS5DTE9TRTtiJiYhbCYmZy5wdXNoKGdbMF0pLHRoaXMuX3JlbmRlcmVyLmVuZFNoYXBlKGEsZyxqLGksayxsLGYpLGo9ITEsaT0hMSxrPSExLGw9ITEsbT0hMCxiJiZnLnBvcCgpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS5xdWFkcmF0aWNWZXJ0ZXg9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJxdWFkcmF0aWNWZXJ0ZXhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEKXRoaXMuX3JlbmRlcmVyLnF1YWRyYXRpY1ZlcnRleC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpO2Vsc2V7aWYodGhpcy5fY29udG91ckluaXRlZCl7dmFyIGE9e307cmV0dXJuIGEueD1hcmd1bWVudHNbMF0sYS55PWFyZ3VtZW50c1sxXSxhLngzPWFyZ3VtZW50c1syXSxhLnkzPWFyZ3VtZW50c1szXSxhLnR5cGU9ZS5RVUFEUkFUSUMsdGhpcy5fY29udG91clZlcnRpY2VzLnB1c2goYSksdGhpc31pZighKGcubGVuZ3RoPjApKXRocm93IG5ldyBFcnJvcihcInZlcnRleCgpIG11c3QgYmUgdXNlZCBvbmNlIGJlZm9yZSBjYWxsaW5nIHF1YWRyYXRpY1ZlcnRleCgpXCIpO2s9ITA7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbY109YXJndW1lbnRzW2NdO2IuaXNWZXJ0PSExLGw/aC5wdXNoKGIpOmcucHVzaChiKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUudmVydGV4PWZ1bmN0aW9uKGEsYixjLGQsZSl7aWYodGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhpcy5fcmVuZGVyZXIudmVydGV4LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk7ZWxzZXt2YXIgZj1bXTtmLmlzVmVydD0hMCxmWzBdPWEsZlsxXT1iLGZbMl09MCxmWzNdPTAsZls0XT0wLGZbNV09dGhpcy5fcmVuZGVyZXIuX2dldEZpbGwoKSxmWzZdPXRoaXMuX3JlbmRlcmVyLl9nZXRTdHJva2UoKSxjJiYoZi5tb3ZlVG89YyksbD8oMD09PWgubGVuZ3RoJiYoZi5tb3ZlVG89ITApLGgucHVzaChmKSk6Zy5wdXNoKGYpfXJldHVybiB0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29uc3RhbnRzXCI6MTgsXCIuLi9tYWluXCI6MjR9XSwzNDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZXx8ZnVuY3Rpb24oYSxiKXt3aW5kb3cuc2V0VGltZW91dChhLDFlMy82MCl9fSgpLGZ1bmN0aW9uKCl7XCJ1bmRlZmluZWRcIj09dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHxVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGUuc2xpY2V8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGUsXCJzbGljZVwiLHt2YWx1ZTpBcnJheS5wcm90b3R5cGUuc2xpY2Usd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITF9KX0oKSxmdW5jdGlvbigpe2lmKCFPYmplY3QuYXNzaWduKXt2YXIgYT1PYmplY3Qua2V5cyxiPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxjPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDAhPT1hJiZudWxsIT09YX0sZD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2woKSxlPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsZj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGUuY2FsbChhLGIpfX0sZz1mdW5jdGlvbihiLGUpe2lmKCFjKGIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7dmFyIGcsaCxpLGosaz1PYmplY3QoYik7Zm9yKGc9MTtnPGFyZ3VtZW50cy5sZW5ndGg7KytnKWZvcihoPU9iamVjdChhcmd1bWVudHNbZ10pLGo9YShoKSxkJiZPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiZqLnB1c2guYXBwbHkoaixPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGgpLmZpbHRlcihmKGgpKSksaT0wO2k8ai5sZW5ndGg7KytpKWtbaltpXV09aFtqW2ldXTtyZXR1cm4ga307YihPYmplY3QsXCJhc3NpZ25cIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMH0pfX0oKX0se31dLDM1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKTtkLnByb3RvdHlwZS5ub0xvb3A9ZnVuY3Rpb24oKXt0aGlzLl9sb29wPSExfSxkLnByb3RvdHlwZS5sb29wPWZ1bmN0aW9uKCl7dGhpcy5fbG9vcD0hMCx0aGlzLl9kcmF3KCl9LGQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXt0aGlzLl9zdHlsZXMucHVzaCh7cHJvcHM6e19jb2xvck1vZGU6dGhpcy5fY29sb3JNb2RlfSxyZW5kZXJlcjp0aGlzLl9yZW5kZXJlci5wdXNoKCl9KX0sZC5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fc3R5bGVzLnBvcCgpO2E/KHRoaXMuX3JlbmRlcmVyLnBvcChhLnJlbmRlcmVyKSxPYmplY3QuYXNzaWduKHRoaXMsYS5wcm9wcykpOmNvbnNvbGUud2FybihcInBvcCgpIHdhcyBjYWxsZWQgd2l0aG91dCBtYXRjaGluZyBwdXNoKClcIil9LGQucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbihhKXt2YXIgYj1wYXJzZUludChhKTsoaXNOYU4oYil8fGI8MSkmJihiPTEpO3ZhciBjPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzLGQ9Yy5zZXR1cCxlPWMuZHJhdztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKXt2b2lkIDA9PT1kJiZjLnNjYWxlKGMuX3BpeGVsRGVuc2l0eSxjLl9waXhlbERlbnNpdHkpO2Zvcih2YXIgZj1mdW5jdGlvbihhKXthLmNhbGwoYyl9LGc9MDtnPGI7ZysrKWMucmVzZXRNYXRyaXgoKSxjLl9yZW5kZXJlci5pc1AzRCYmYy5fcmVuZGVyZXIuX3VwZGF0ZSgpLGMuX3NldFByb3BlcnR5KFwiZnJhbWVDb3VudFwiLGMuZnJhbWVDb3VudCsxKSxjLl9yZWdpc3RlcmVkTWV0aG9kcy5wcmUuZm9yRWFjaChmKSxlKCksYy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5mb3JFYWNoKGYpfX0sYi5leHBvcnRzPWR9LHtcIi4vbWFpblwiOjI0fV0sMzY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2QucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuYXBwbHlNYXRyaXgoYSxiLGMsZCxlLGYpLHRoaXN9LGQucHJvdG90eXBlLnBvcE1hdHJpeD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInBvcE1hdHJpeCgpIG5vdCB1c2VkLCBzZWUgcG9wKClcIil9LGQucHJvdG90eXBlLnByaW50TWF0cml4PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicHJpbnRNYXRyaXgoKSBub3QgaW1wbGVtZW50ZWRcIil9LGQucHJvdG90eXBlLnB1c2hNYXRyaXg9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJwdXNoTWF0cml4KCkgbm90IHVzZWQsIHNlZSBwdXNoKClcIil9LGQucHJvdG90eXBlLnJlc2V0TWF0cml4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLnJlc2V0TWF0cml4KCksdGhpc30sZC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJvdGF0ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIucm90YXRlKHRoaXMuX3RvUmFkaWFucyhhKSxiKSx0aGlzfSxkLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInJvdGF0ZVhcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicm90YXRlWFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIucm90YXRlWCh0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwicm90YXRlWVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyb3RhdGVZXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5yb3RhdGVZKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJyb3RhdGVaXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJvdGF0ZVpcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnJvdGF0ZVoodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihhLGIsYyl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2NhbGVcIixhcmd1bWVudHMpLGEgaW5zdGFuY2VvZiBkLlZlY3Rvcil7dmFyIGU9YTthPWUueCxiPWUueSxjPWUuen1lbHNlIGlmKGEgaW5zdGFuY2VvZiBBcnJheSl7dmFyIGY9YTthPWZbMF0sYj1mWzFdLGM9ZlsyXXx8MX1yZXR1cm4gaXNOYU4oYik/Yj1jPWE6aXNOYU4oYykmJihjPTEpLHRoaXMuX3JlbmRlcmVyLnNjYWxlLmNhbGwodGhpcy5fcmVuZGVyZXIsYSxiLGMpLHRoaXN9LGQucHJvdG90eXBlLnNoZWFyWD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2hlYXJYXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5zaGVhclgodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS5zaGVhclk9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNoZWFyWVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuc2hlYXJZKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidHJhbnNsYXRlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRD90aGlzLl9yZW5kZXJlci50cmFuc2xhdGUoYSxiLGMpOnRoaXMuX3JlbmRlcmVyLnRyYW5zbGF0ZShhLGIpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuL21haW5cIjoyNH1dLDM3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5jcmVhdGVTdHJpbmdEaWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZVN0cmluZ0RpY3RcIixhcmd1bWVudHMpLG5ldyBkLlN0cmluZ0RpY3QoYSxiKX0sZC5wcm90b3R5cGUuY3JlYXRlTnVtYmVyRGljdD1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVOdW1iZXJEaWN0XCIsYXJndW1lbnRzKSxuZXcgZC5OdW1iZXJEaWN0KGEsYil9LGQuVHlwZWREaWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEgaW5zdGFuY2VvZiBPYmplY3Q/dGhpcy5kYXRhPWE6KHRoaXMuZGF0YT17fSx0aGlzLmRhdGFbYV09YiksdGhpc30sZC5UeXBlZERpY3QucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGh9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5oYXNLZXk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtpZih0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSkpcmV0dXJuIHRoaXMuZGF0YVthXTtjb25zb2xlLmxvZyhhK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgRGljdGlvbmFyeVwiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe3RoaXMuX3ZhbGlkYXRlKGIpP3RoaXMuZGF0YVthXT1iOmNvbnNvbGUubG9nKFwiVGhvc2UgdmFsdWVzIGRvbnQgd29yayBmb3IgdGhpcyBkaWN0aW9uYXJ5IHR5cGUuXCIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuX2FkZE9iaj1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSl0aGlzLnNldChiLGFbYl0pfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKGEsYil7YSBpbnN0YW5jZW9mIE9iamVjdCYmdm9pZCAwPT09Yj90aGlzLl9hZGRPYmooYSk6dm9pZCAwIT09YT90aGlzLnNldChhLGIpOmNvbnNvbGUubG9nKFwiSW4gb3JkZXIgdG8gY3JlYXRlIGEgbmV3IERpY3Rpb25hcnkgZW50cnkgeW91IG11c3QgcGFzcyBhbiBvYmplY3Qgb3IgYSBrZXksIHZhbHVlIHBhaXJcIil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZGF0YT17fX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhKXtpZighdGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpKXRocm93IG5ldyBFcnJvcihhK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgRGljdGlvbmFyeVwiKTtkZWxldGUgdGhpcy5kYXRhW2FdfSxkLlR5cGVkRGljdC5wcm90b3R5cGUucHJpbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gdGhpcy5kYXRhKWNvbnNvbGUubG9nKFwia2V5OlwiK2ErXCIgdmFsdWU6XCIrdGhpcy5kYXRhW2FdKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnNhdmVUYWJsZT1mdW5jdGlvbihhKXt2YXIgYj1cIlwiO2Zvcih2YXIgYyBpbiB0aGlzLmRhdGEpYis9YytcIixcIit0aGlzLmRhdGFbY10rXCJcXG5cIjt2YXIgZT1uZXcgQmxvYihbYl0se3R5cGU6XCJ0ZXh0L2NzdlwifSk7ZC5wcm90b3R5cGUuZG93bmxvYWRGaWxlKGUsYXx8XCJteWNzdlwiLFwiY3N2XCIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2F2ZUpTT049ZnVuY3Rpb24oYSxiKXtkLnByb3RvdHlwZS5zYXZlSlNPTih0aGlzLmRhdGEsYSxiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihhKXtyZXR1cm4hMH0sZC5TdHJpbmdEaWN0PWZ1bmN0aW9uKCl7ZC5UeXBlZERpY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkLlN0cmluZ0RpY3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5UeXBlZERpY3QucHJvdG90eXBlKSxkLlN0cmluZ0RpY3QucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYX0sZC5OdW1iZXJEaWN0PWZ1bmN0aW9uKCl7ZC5UeXBlZERpY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkLk51bWJlckRpY3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5UeXBlZERpY3QucHJvdG90eXBlKSxkLk51bWJlckRpY3QucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSk/dGhpcy5kYXRhW2FdKz1iOmNvbnNvbGUubG9nKFwiVGhlIGtleSAtIFwiK2ErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkaWN0aW9uYXJ5LlwiKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYSxiKXt0aGlzLmFkZChhLC1iKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5tdWx0PWZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpP3RoaXMuZGF0YVthXSo9Yjpjb25zb2xlLmxvZyhcIlRoZSBrZXkgLSBcIithK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGljdGlvbmFyeS5cIil9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpP3RoaXMuZGF0YVthXS89Yjpjb25zb2xlLmxvZyhcIlRoZSBrZXkgLSBcIithK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGljdGlvbmFyeS5cIil9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuX3ZhbHVlVGVzdD1mdW5jdGlvbihhKXtpZigwPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHNlYXJjaCBmb3IgYSBtaW5pbXVtIG9yIG1heGltdW0gdmFsdWUgb24gYW4gZW1wdHkgTnVtYmVyRGljdFwiKTtpZigxPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpcmV0dXJuIHRoaXMuZGF0YVtPYmplY3Qua2V5cyh0aGlzLmRhdGEpWzBdXTt2YXIgYj10aGlzLmRhdGFbT2JqZWN0LmtleXModGhpcy5kYXRhKVswXV07Zm9yKHZhciBjIGluIHRoaXMuZGF0YSl0aGlzLmRhdGFbY10qYTxiKmEmJihiPXRoaXMuZGF0YVtjXSk7cmV0dXJuIGJ9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWluVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWVUZXN0KDEpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLm1heFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlVGVzdCgtMSl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuX2tleVRlc3Q9ZnVuY3Rpb24oYSl7aWYoMD09PU9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byB1c2UgbWluVmFsdWUgb24gYW4gZW1wdHkgTnVtYmVyRGljdFwiKTtpZigxPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGF0YSlbMF07Zm9yKHZhciBiPU9iamVjdC5rZXlzKHRoaXMuZGF0YSlbMF0sYz0xO2M8T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGg7YysrKU9iamVjdC5rZXlzKHRoaXMuZGF0YSlbY10qYTxiKmEmJihiPU9iamVjdC5rZXlzKHRoaXMuZGF0YSlbY10pO3JldHVybiBifSxkLk51bWJlckRpY3QucHJvdG90eXBlLm1pbktleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rZXlUZXN0KDEpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLm1heEtleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rZXlUZXN0KC0xKX0sYi5leHBvcnRzPWQuVHlwZWREaWN0fSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDM4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5kZXZpY2VPcmllbnRhdGlvbj12b2lkIDAsZC5wcm90b3R5cGUuYWNjZWxlcmF0aW9uWD0wLGQucHJvdG90eXBlLmFjY2VsZXJhdGlvblk9MCxkLnByb3RvdHlwZS5hY2NlbGVyYXRpb25aPTAsZC5wcm90b3R5cGUucEFjY2VsZXJhdGlvblg9MCxkLnByb3RvdHlwZS5wQWNjZWxlcmF0aW9uWT0wLGQucHJvdG90eXBlLnBBY2NlbGVyYXRpb25aPTAsZC5wcm90b3R5cGUuX3VwZGF0ZVBBY2NlbGVyYXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJwQWNjZWxlcmF0aW9uWFwiLHRoaXMuYWNjZWxlcmF0aW9uWCksdGhpcy5fc2V0UHJvcGVydHkoXCJwQWNjZWxlcmF0aW9uWVwiLHRoaXMuYWNjZWxlcmF0aW9uWSksdGhpcy5fc2V0UHJvcGVydHkoXCJwQWNjZWxlcmF0aW9uWlwiLHRoaXMuYWNjZWxlcmF0aW9uWil9LGQucHJvdG90eXBlLnJvdGF0aW9uWD0wLGQucHJvdG90eXBlLnJvdGF0aW9uWT0wLGQucHJvdG90eXBlLnJvdGF0aW9uWj0wLGQucHJvdG90eXBlLnBSb3RhdGlvblg9MCxkLnByb3RvdHlwZS5wUm90YXRpb25ZPTAsZC5wcm90b3R5cGUucFJvdGF0aW9uWj0wO3ZhciBlLGYsZyxoPTAsaT0wLGo9MCxrPVwiY2xvY2t3aXNlXCIsbD1cImNsb2Nrd2lzZVwiLG09XCJjbG9ja3dpc2VcIjtkLnByb3RvdHlwZS5fdXBkYXRlUFJvdGF0aW9ucz1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwicFJvdGF0aW9uWFwiLHRoaXMucm90YXRpb25YKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBSb3RhdGlvbllcIix0aGlzLnJvdGF0aW9uWSksdGhpcy5fc2V0UHJvcGVydHkoXCJwUm90YXRpb25aXCIsdGhpcy5yb3RhdGlvblopfSxkLnByb3RvdHlwZS50dXJuQXhpcz12b2lkIDA7dmFyIG49LjUsbz0zMDtkLnByb3RvdHlwZS5zZXRNb3ZlVGhyZXNob2xkPWZ1bmN0aW9uKGEpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNldE1vdmVUaHJlc2hvbGRcIixhcmd1bWVudHMpLG49YX0sZC5wcm90b3R5cGUuc2V0U2hha2VUaHJlc2hvbGQ9ZnVuY3Rpb24oYSl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2V0U2hha2VUaHJlc2hvbGRcIixhcmd1bWVudHMpLG89YX0sZC5wcm90b3R5cGUuX29uZGV2aWNlb3JpZW50YXRpb249ZnVuY3Rpb24oYSl7dGhpcy5fdXBkYXRlUFJvdGF0aW9ucygpLHRoaXMuX3NldFByb3BlcnR5KFwicm90YXRpb25YXCIsYS5iZXRhKSx0aGlzLl9zZXRQcm9wZXJ0eShcInJvdGF0aW9uWVwiLGEuZ2FtbWEpLHRoaXMuX3NldFByb3BlcnR5KFwicm90YXRpb25aXCIsYS5hbHBoYSksdGhpcy5faGFuZGxlTW90aW9uKCl9LGQucHJvdG90eXBlLl9vbmRldmljZW1vdGlvbj1mdW5jdGlvbihhKXt0aGlzLl91cGRhdGVQQWNjZWxlcmF0aW9ucygpLHRoaXMuX3NldFByb3BlcnR5KFwiYWNjZWxlcmF0aW9uWFwiLDIqYS5hY2NlbGVyYXRpb24ueCksdGhpcy5fc2V0UHJvcGVydHkoXCJhY2NlbGVyYXRpb25ZXCIsMiphLmFjY2VsZXJhdGlvbi55KSx0aGlzLl9zZXRQcm9wZXJ0eShcImFjY2VsZXJhdGlvblpcIiwyKmEuYWNjZWxlcmF0aW9uLnopLHRoaXMuX2hhbmRsZU1vdGlvbigpfSxkLnByb3RvdHlwZS5faGFuZGxlTW90aW9uPWZ1bmN0aW9uKCl7OTA9PT13aW5kb3cub3JpZW50YXRpb258fC05MD09PXdpbmRvdy5vcmllbnRhdGlvbj90aGlzLl9zZXRQcm9wZXJ0eShcImRldmljZU9yaWVudGF0aW9uXCIsXCJsYW5kc2NhcGVcIik6MD09PXdpbmRvdy5vcmllbnRhdGlvbj90aGlzLl9zZXRQcm9wZXJ0eShcImRldmljZU9yaWVudGF0aW9uXCIsXCJwb3J0cmFpdFwiKTp2b2lkIDA9PT13aW5kb3cub3JpZW50YXRpb24mJnRoaXMuX3NldFByb3BlcnR5KFwiZGV2aWNlT3JpZW50YXRpb25cIixcInVuZGVmaW5lZFwiKTt2YXIgYT10aGlzLmRldmljZU1vdmVkfHx3aW5kb3cuZGV2aWNlTW92ZWQ7XCJmdW5jdGlvblwiPT10eXBlb2YgYSYmKE1hdGguYWJzKHRoaXMuYWNjZWxlcmF0aW9uWC10aGlzLnBBY2NlbGVyYXRpb25YKT5ufHxNYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblktdGhpcy5wQWNjZWxlcmF0aW9uWSk+bnx8TWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25aLXRoaXMucEFjY2VsZXJhdGlvblopPm4pJiZhKCk7dmFyIGI9dGhpcy5kZXZpY2VUdXJuZWR8fHdpbmRvdy5kZXZpY2VUdXJuZWQ7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYil7dmFyIGM9dGhpcy5yb3RhdGlvblgrMTgwLGQ9dGhpcy5wUm90YXRpb25YKzE4MCxwPWgrMTgwO2MtZD4wJiZjLWQ8MjcwfHxjLWQ8LTI3MD9rPVwiY2xvY2t3aXNlXCI6KGMtZDwwfHxjLWQ+MjcwKSYmKGs9XCJjb3VudGVyLWNsb2Nrd2lzZVwiKSxrIT09ZSYmKHA9YyksTWF0aC5hYnMoYy1wKT45MCYmTWF0aC5hYnMoYy1wKTwyNzAmJihwPWMsdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLFwiWFwiKSxiKCkpLGU9ayxoPXAtMTgwO3ZhciBxPXRoaXMucm90YXRpb25ZKzE4MCxyPXRoaXMucFJvdGF0aW9uWSsxODAscz1pKzE4MDtxLXI+MCYmcS1yPDI3MHx8cS1yPC0yNzA/bD1cImNsb2Nrd2lzZVwiOihxLXI8MHx8cS10aGlzLnBSb3RhdGlvblk+MjcwKSYmKGw9XCJjb3VudGVyLWNsb2Nrd2lzZVwiKSxsIT09ZiYmKHM9cSksTWF0aC5hYnMocS1zKT45MCYmTWF0aC5hYnMocS1zKTwyNzAmJihzPXEsdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLFwiWVwiKSxiKCkpLGY9bCxpPXMtMTgwLHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWj4wJiZ0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo8MjcwfHx0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo8LTI3MD9tPVwiY2xvY2t3aXNlXCI6KHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWjwwfHx0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo+MjcwKSYmKG09XCJjb3VudGVyLWNsb2Nrd2lzZVwiKSxtIT09ZyYmKGo9dGhpcy5yb3RhdGlvblopLE1hdGguYWJzKHRoaXMucm90YXRpb25aLWopPjkwJiZNYXRoLmFicyh0aGlzLnJvdGF0aW9uWi1qKTwyNzAmJihqPXRoaXMucm90YXRpb25aLHRoaXMuX3NldFByb3BlcnR5KFwidHVybkF4aXNcIixcIlpcIiksYigpKSxnPW0sdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLHZvaWQgMCl9dmFyIHQ9dGhpcy5kZXZpY2VTaGFrZW58fHdpbmRvdy5kZXZpY2VTaGFrZW47aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl7dmFyIHUsdjtudWxsIT09dGhpcy5wQWNjZWxlcmF0aW9uWCYmKHU9TWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25YLXRoaXMucEFjY2VsZXJhdGlvblgpLHY9TWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25ZLXRoaXMucEFjY2VsZXJhdGlvblkpKSx1K3Y+byYmdCgpfX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMzk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKCl7Zm9yKHZhciBhIGluIGYpaWYoZi5oYXNPd25Qcm9wZXJ0eShhKSYmITA9PT1mW2FdKXJldHVybiEwO3JldHVybiExfXZhciBlPWEoXCIuLi9jb3JlL21haW5cIiksZj17fTtlLnByb3RvdHlwZS5pc0tleVByZXNzZWQ9ITEsZS5wcm90b3R5cGUua2V5SXNQcmVzc2VkPSExLGUucHJvdG90eXBlLmtleT1cIlwiLGUucHJvdG90eXBlLmtleUNvZGU9MCxlLnByb3RvdHlwZS5fb25rZXlkb3duPWZ1bmN0aW9uKGEpe2lmKCFmW2Eud2hpY2hdKXt0aGlzLl9zZXRQcm9wZXJ0eShcImlzS2V5UHJlc3NlZFwiLCEwKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleUlzUHJlc3NlZFwiLCEwKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleUNvZGVcIixhLndoaWNoKSxmW2Eud2hpY2hdPSEwLHRoaXMuX3NldFByb3BlcnR5KFwia2V5XCIsYS5rZXl8fFN0cmluZy5mcm9tQ2hhckNvZGUoYS53aGljaCl8fGEud2hpY2gpO3ZhciBiPXRoaXMua2V5UHJlc3NlZHx8d2luZG93LmtleVByZXNzZWQ7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYiYmIWEuY2hhckNvZGUpeyExPT09YihhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX19LGUucHJvdG90eXBlLl9vbmtleXVwPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMua2V5UmVsZWFzZWR8fHdpbmRvdy5rZXlSZWxlYXNlZDtpZihmW2Eud2hpY2hdPSExLGQoKXx8KHRoaXMuX3NldFByb3BlcnR5KFwiaXNLZXlQcmVzc2VkXCIsITEpLHRoaXMuX3NldFByb3BlcnR5KFwia2V5SXNQcmVzc2VkXCIsITEpKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9sYXN0S2V5Q29kZVR5cGVkXCIsbnVsbCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlcIixhLmtleXx8U3RyaW5nLmZyb21DaGFyQ29kZShhLndoaWNoKXx8YS53aGljaCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlDb2RlXCIsYS53aGljaCksXCJmdW5jdGlvblwiPT10eXBlb2YgYil7ITE9PT1iKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fSxlLnByb3RvdHlwZS5fb25rZXlwcmVzcz1mdW5jdGlvbihhKXtpZihhLndoaWNoIT09dGhpcy5fbGFzdEtleUNvZGVUeXBlZCl7dGhpcy5fc2V0UHJvcGVydHkoXCJrZXlDb2RlXCIsYS53aGljaCksdGhpcy5fc2V0UHJvcGVydHkoXCJfbGFzdEtleUNvZGVUeXBlZFwiLGEud2hpY2gpLHRoaXMuX3NldFByb3BlcnR5KFwia2V5XCIsU3RyaW5nLmZyb21DaGFyQ29kZShhLndoaWNoKSk7dmFyIGI9dGhpcy5rZXlUeXBlZHx8d2luZG93LmtleVR5cGVkO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGIpeyExPT09YihhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX19LGUucHJvdG90eXBlLl9vbmJsdXI9ZnVuY3Rpb24oYSl7Zj17fX0sZS5wcm90b3R5cGUua2V5SXNEb3duPWZ1bmN0aW9uKGEpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJrZXlJc0Rvd25cIixhcmd1bWVudHMpLGZbYV19LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyxkKXtkJiYhZC5jbGllbnRYJiYoZC50b3VjaGVzP2Q9ZC50b3VjaGVzWzBdOmQuY2hhbmdlZFRvdWNoZXMmJihkPWQuY2hhbmdlZFRvdWNoZXNbMF0pKTt2YXIgZT1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9YS5zY3JvbGxXaWR0aC9iLGc9YS5zY3JvbGxIZWlnaHQvYztyZXR1cm57eDooZC5jbGllbnRYLWUubGVmdCkvZix5OihkLmNsaWVudFktZS50b3ApL2csd2luWDpkLmNsaWVudFgsd2luWTpkLmNsaWVudFksaWQ6ZC5pZGVudGlmaWVyfX12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpLGY9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2UucHJvdG90eXBlLl9oYXNNb3VzZUludGVyYWN0ZWQ9ITEsZS5wcm90b3R5cGUubW91c2VYPTAsZS5wcm90b3R5cGUubW91c2VZPTAsZS5wcm90b3R5cGUucG1vdXNlWD0wLGUucHJvdG90eXBlLnBtb3VzZVk9MCxlLnByb3RvdHlwZS53aW5Nb3VzZVg9MCxlLnByb3RvdHlwZS53aW5Nb3VzZVk9MCxlLnByb3RvdHlwZS5wd2luTW91c2VYPTAsZS5wcm90b3R5cGUucHdpbk1vdXNlWT0wLGUucHJvdG90eXBlLm1vdXNlQnV0dG9uPTAsZS5wcm90b3R5cGUubW91c2VJc1ByZXNzZWQ9ITEsZS5wcm90b3R5cGUuX3VwZGF0ZU5leHRNb3VzZUNvb3Jkcz1mdW5jdGlvbihhKXtpZihudWxsIT09dGhpcy5fY3VyRWxlbWVudCYmKCFhLnRvdWNoZXN8fGEudG91Y2hlcy5sZW5ndGg+MCkpe3ZhciBiPWQodGhpcy5fY3VyRWxlbWVudC5lbHQsdGhpcy53aWR0aCx0aGlzLmhlaWdodCxhKTt0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlWFwiLGIueCksdGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZVlcIixiLnkpLHRoaXMuX3NldFByb3BlcnR5KFwid2luTW91c2VYXCIsYi53aW5YKSx0aGlzLl9zZXRQcm9wZXJ0eShcIndpbk1vdXNlWVwiLGIud2luWSl9dGhpcy5faGFzTW91c2VJbnRlcmFjdGVkfHwodGhpcy5fdXBkYXRlTW91c2VDb29yZHMoKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9oYXNNb3VzZUludGVyYWN0ZWRcIiwhMCkpfSxlLnByb3RvdHlwZS5fdXBkYXRlTW91c2VDb29yZHM9ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcInBtb3VzZVhcIix0aGlzLm1vdXNlWCksdGhpcy5fc2V0UHJvcGVydHkoXCJwbW91c2VZXCIsdGhpcy5tb3VzZVkpLHRoaXMuX3NldFByb3BlcnR5KFwicHdpbk1vdXNlWFwiLHRoaXMud2luTW91c2VYKSx0aGlzLl9zZXRQcm9wZXJ0eShcInB3aW5Nb3VzZVlcIix0aGlzLndpbk1vdXNlWSksdGhpcy5fc2V0UHJvcGVydHkoXCJfcG1vdXNlV2hlZWxEZWx0YVlcIix0aGlzLl9tb3VzZVdoZWVsRGVsdGFZKX0sZS5wcm90b3R5cGUuX3NldE1vdXNlQnV0dG9uPWZ1bmN0aW9uKGEpezE9PT1hLmJ1dHRvbj90aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlQnV0dG9uXCIsZi5DRU5URVIpOjI9PT1hLmJ1dHRvbj90aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlQnV0dG9uXCIsZi5SSUdIVCk6dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUJ1dHRvblwiLGYuTEVGVCl9LGUucHJvdG90eXBlLl9vbm1vdXNlbW92ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczt0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksdGhpcy5tb3VzZUlzUHJlc3NlZD9cImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlRHJhZ2dlZD8hMT09PWIubW91c2VEcmFnZ2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaE1vdmVkJiYhMT09PWIudG91Y2hNb3ZlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VNb3ZlZCYmITE9PT1iLm1vdXNlTW92ZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29ubW91c2Vkb3duPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMCksdGhpcy5fc2V0TW91c2VCdXR0b24oYSksdGhpcy5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzKGEpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VQcmVzc2VkPyExPT09Yi5tb3VzZVByZXNzZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoU3RhcnRlZCYmITE9PT1iLnRvdWNoU3RhcnRlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb25tb3VzZXVwPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMSksXG5cImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlUmVsZWFzZWQ/ITE9PT1iLm1vdXNlUmVsZWFzZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoRW5kZWQmJiExPT09Yi50b3VjaEVuZGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbmRyYWdlbmQ9ZS5wcm90b3R5cGUuX29ubW91c2V1cCxlLnByb3RvdHlwZS5fb25kcmFnb3Zlcj1lLnByb3RvdHlwZS5fb25tb3VzZW1vdmUsZS5wcm90b3R5cGUuX29uY2xpY2s9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZUNsaWNrZWQpeyExPT09Yi5tb3VzZUNsaWNrZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGUucHJvdG90eXBlLl9vbmRibGNsaWNrPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGIuZG91YmxlQ2xpY2tlZCl7ITE9PT1iLmRvdWJsZUNsaWNrZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGUucHJvdG90eXBlLl9tb3VzZVdoZWVsRGVsdGFZPTAsZS5wcm90b3R5cGUuX3Btb3VzZVdoZWVsRGVsdGFZPTAsZS5wcm90b3R5cGUuX29ud2hlZWw9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYodGhpcy5fc2V0UHJvcGVydHkoXCJfbW91c2VXaGVlbERlbHRhWVwiLGEuZGVsdGFZKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlV2hlZWwpe2EuZGVsdGE9YS5kZWx0YVk7ITE9PT1iLm1vdXNlV2hlZWwoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw0MTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMsZCxlKXtlPWV8fDA7dmFyIGY9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPWEuc2Nyb2xsV2lkdGgvYixoPWEuc2Nyb2xsSGVpZ2h0L2MsaT1kLnRvdWNoZXNbZV18fGQuY2hhbmdlZFRvdWNoZXNbZV07cmV0dXJue3g6KGkuY2xpZW50WC1mLmxlZnQpL2cseTooaS5jbGllbnRZLWYudG9wKS9oLHdpblg6aS5jbGllbnRYLHdpblk6aS5jbGllbnRZLGlkOmkuaWRlbnRpZmllcn19dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKTtlLnByb3RvdHlwZS50b3VjaGVzPVtdLGUucHJvdG90eXBlLl91cGRhdGVUb3VjaENvb3Jkcz1mdW5jdGlvbihhKXtpZihudWxsIT09dGhpcy5fY3VyRWxlbWVudCl7Zm9yKHZhciBiPVtdLGM9MDtjPGEudG91Y2hlcy5sZW5ndGg7YysrKWJbY109ZCh0aGlzLl9jdXJFbGVtZW50LmVsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LGEsYyk7dGhpcy5fc2V0UHJvcGVydHkoXCJ0b3VjaGVzXCIsYil9fSxlLnByb3RvdHlwZS5fb250b3VjaHN0YXJ0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMCksdGhpcy5fdXBkYXRlVG91Y2hDb29yZHMoYSksdGhpcy5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzKGEpLHRoaXMuX3VwZGF0ZU1vdXNlQ29vcmRzKCksXCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaFN0YXJ0ZWQ/ITE9PT1iLnRvdWNoU3RhcnRlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VQcmVzc2VkJiYhMT09PWIubW91c2VQcmVzc2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbnRvdWNobW92ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczt0aGlzLl91cGRhdGVUb3VjaENvb3JkcyhhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksXCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaE1vdmVkPyExPT09Yi50b3VjaE1vdmVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZURyYWdnZWQmJiExPT09Yi5tb3VzZURyYWdnZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29udG91Y2hlbmQ9ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCExKSx0aGlzLl91cGRhdGVUb3VjaENvb3JkcyhhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSk7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7XCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaEVuZGVkPyExPT09Yi50b3VjaEVuZGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVJlbGVhc2VkJiYhMT09PWIubW91c2VSZWxlYXNlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw0MjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSl7dmFyIGI9My41KmF8MDtpZihiPWI8MT8xOmI8MjQ4P2I6MjQ4LGchPT1iKXtnPWIsaD0xK2c8PDEsaT1uZXcgSW50MzJBcnJheShoKSxqPW5ldyBBcnJheShoKTtmb3IodmFyIGM9MDtjPGg7YysrKWpbY109bmV3IEludDMyQXJyYXkoMjU2KTtmb3IodmFyIGQsZSxmLGssbD0xLG09Yi0xO2w8YjtsKyspe2lbYitsXT1pW21dPWU9bSptLGY9altiK2xdLGs9alttLS1dO2Zvcih2YXIgbj0wO248MjU2O24rKylmW25dPWtbbl09ZSpufWQ9aVtiXT1iKmIsZj1qW2JdO2Zvcih2YXIgbz0wO288MjU2O28rKylmW29dPWQqb319ZnVuY3Rpb24gZShhLGIpe2Zvcih2YXIgYz1mLl90b1BpeGVscyhhKSxlPWEud2lkdGgsaz1hLmhlaWdodCxsPWUqayxtPW5ldyBJbnQzMkFycmF5KGwpLG49MDtuPGw7bisrKW1bbl09Zi5fZ2V0QVJHQihjLG4pO3ZhciBvLHAscSxyLHMsdCx1LHYsdyx4LHk9bmV3IEludDMyQXJyYXkobCksej1uZXcgSW50MzJBcnJheShsKSxBPW5ldyBJbnQzMkFycmF5KGwpLEI9bmV3IEludDMyQXJyYXkobCksQz0wO2QoYik7dmFyIEQsRSxGLEc7Zm9yKEU9MDtFPGs7RSsrKXtmb3IoRD0wO0Q8ZTtEKyspe2lmKHI9cT1wPXM9bz0wLCh0PUQtZyk8MCl4PS10LHQ9MDtlbHNle2lmKHQ+PWUpYnJlYWs7eD0wfWZvcihGPXg7RjxoJiYhKHQ+PWUpO0YrKyl7dmFyIEg9bVt0K0NdO0c9altGXSxzKz1HWygtMTY3NzcyMTYmSCk+Pj4yNF0scCs9R1soMTY3MTE2ODAmSCk+PjE2XSxxKz1HWyg2NTI4MCZIKT4+OF0scis9R1syNTUmSF0sbys9aVtGXSx0Kyt9dT1DK0QseVt1XT1zL28selt1XT1wL28sQVt1XT1xL28sQlt1XT1yL299Qys9ZX1mb3IoQz0wLHY9LWcsdz12KmUsRT0wO0U8aztFKyspe2ZvcihEPTA7RDxlO0QrKyl7aWYocj1xPXA9cz1vPTAsdjwwKXg9dT0tdix0PUQ7ZWxzZXtpZih2Pj1rKWJyZWFrO3g9MCx1PXYsdD1EK3d9Zm9yKEY9eDtGPGgmJiEodT49ayk7RisrKUc9altGXSxzKz1HW3lbdF1dLHArPUdbelt0XV0scSs9R1tBW3RdXSxyKz1HW0JbdF1dLG8rPWlbRl0sdSsrLHQrPWU7bVtEK0NdPXMvbzw8MjR8cC9vPDwxNnxxL288PDh8ci9vfUMrPWUsdys9ZSx2Kyt9Zi5fc2V0UGl4ZWxzKGMsbSl9dmFyIGY9e307Zi5fdG9QaXhlbHM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBJbWFnZURhdGE/YS5kYXRhOmEuZ2V0Q29udGV4dChcIjJkXCIpLmdldEltYWdlRGF0YSgwLDAsYS53aWR0aCxhLmhlaWdodCkuZGF0YX0sZi5fZ2V0QVJHQj1mdW5jdGlvbihhLGIpe3ZhciBjPTQqYjtyZXR1cm4gYVtjKzNdPDwyNCY0Mjc4MTkwMDgwfGFbY108PDE2JjE2NzExNjgwfGFbYysxXTw8OCY2NTI4MHwyNTUmYVtjKzJdfSxmLl9zZXRQaXhlbHM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MCxkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKWM9NCpkLGFbYyswXT0oMTY3MTE2ODAmYltkXSk+Pj4xNixhW2MrMV09KDY1MjgwJmJbZF0pPj4+OCxhW2MrMl09MjU1JmJbZF0sYVtjKzNdPSg0Mjc4MTkwMDgwJmJbZF0pPj4+MjR9LGYuX3RvSW1hZ2VEYXRhPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgSW1hZ2VEYXRhP2E6YS5nZXRDb250ZXh0KFwiMmRcIikuZ2V0SW1hZ2VEYXRhKDAsMCxhLndpZHRoLGEuaGVpZ2h0KX0sZi5fY3JlYXRlSW1hZ2VEYXRhPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGYuX3RtcENhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGYuX3RtcEN0eD1mLl90bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLHRoaXMuX3RtcEN0eC5jcmVhdGVJbWFnZURhdGEoYSxiKX0sZi5hcHBseT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRDb250ZXh0KFwiMmRcIiksZT1kLmdldEltYWdlRGF0YSgwLDAsYS53aWR0aCxhLmhlaWdodCksZj1iKGUsYyk7ZiBpbnN0YW5jZW9mIEltYWdlRGF0YT9kLnB1dEltYWdlRGF0YShmLDAsMCwwLDAsYS53aWR0aCxhLmhlaWdodCk6ZC5wdXRJbWFnZURhdGEoZSwwLDAsMCwwLGEud2lkdGgsYS5oZWlnaHQpfSxmLnRocmVzaG9sZD1mdW5jdGlvbihhLGIpe3ZhciBjPWYuX3RvUGl4ZWxzKGEpO3ZvaWQgMD09PWImJihiPS41KTtmb3IodmFyIGQ9TWF0aC5mbG9vcigyNTUqYiksZT0wO2U8Yy5sZW5ndGg7ZSs9NCl7dmFyIGcsaD1jW2VdLGk9Y1tlKzFdLGo9Y1tlKzJdLGs9LjIxMjYqaCsuNzE1MippKy4wNzIyKmo7Zz1rPj1kPzI1NTowLGNbZV09Y1tlKzFdPWNbZSsyXT1nfX0sZi5ncmF5PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1mLl90b1BpeGVscyhhKSxjPTA7YzxiLmxlbmd0aDtjKz00KXt2YXIgZD1iW2NdLGU9YltjKzFdLGc9YltjKzJdLGg9LjIxMjYqZCsuNzE1MiplKy4wNzIyKmc7YltjXT1iW2MrMV09YltjKzJdPWh9fSxmLm9wYXF1ZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9Zi5fdG9QaXhlbHMoYSksYz0wO2M8Yi5sZW5ndGg7Yys9NCliW2MrM109MjU1O3JldHVybiBifSxmLmludmVydD1mdW5jdGlvbihhKXtmb3IodmFyIGI9Zi5fdG9QaXhlbHMoYSksYz0wO2M8Yi5sZW5ndGg7Yys9NCliW2NdPTI1NS1iW2NdLGJbYysxXT0yNTUtYltjKzFdLGJbYysyXT0yNTUtYltjKzJdfSxmLnBvc3Rlcml6ZT1mdW5jdGlvbihhLGIpe3ZhciBjPWYuX3RvUGl4ZWxzKGEpO2lmKGI8Mnx8Yj4yNTUpdGhyb3cgbmV3IEVycm9yKFwiTGV2ZWwgbXVzdCBiZSBncmVhdGVyIHRoYW4gMiBhbmQgbGVzcyB0aGFuIDI1NSBmb3IgcG9zdGVyaXplXCIpO2Zvcih2YXIgZD1iLTEsZT0wO2U8Yy5sZW5ndGg7ZSs9NCl7dmFyIGc9Y1tlXSxoPWNbZSsxXSxpPWNbZSsyXTtjW2VdPTI1NSooZypiPj44KS9kLGNbZSsxXT0yNTUqKGgqYj4+OCkvZCxjW2UrMl09MjU1KihpKmI+PjgpL2R9fSxmLmRpbGF0ZT1mdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0PWYuX3RvUGl4ZWxzKGEpLHU9MCx2PXQubGVuZ3RoP3QubGVuZ3RoLzQ6MCx3PW5ldyBJbnQzMkFycmF5KHYpO3U8djspZm9yKGI9dSxjPXUrYS53aWR0aDt1PGM7KWQ9ZT1mLl9nZXRBUkdCKHQsdSksaT11LTEsaD11KzEsaj11LWEud2lkdGgsaz11K2Eud2lkdGgsaTxiJiYoaT11KSxoPj1jJiYoaD11KSxqPDAmJihqPTApLGs+PXYmJihrPXUpLG49Zi5fZ2V0QVJHQih0LGopLG09Zi5fZ2V0QVJHQih0LGkpLG89Zi5fZ2V0QVJHQih0LGspLGw9Zi5fZ2V0QVJHQih0LGgpLGc9NzcqKGQ+PjE2JjI1NSkrMTUxKihkPj44JjI1NSkrMjgqKDI1NSZkKSxxPTc3KihtPj4xNiYyNTUpKzE1MSoobT4+OCYyNTUpKzI4KigyNTUmbSkscD03NyoobD4+MTYmMjU1KSsxNTEqKGw+PjgmMjU1KSsyOCooMjU1JmwpLHI9NzcqKG4+PjE2JjI1NSkrMTUxKihuPj44JjI1NSkrMjgqKDI1NSZuKSxzPTc3KihvPj4xNiYyNTUpKzE1MSoobz4+OCYyNTUpKzI4KigyNTUmbykscT5nJiYoZT1tLGc9cSkscD5nJiYoZT1sLGc9cCkscj5nJiYoZT1uLGc9cikscz5nJiYoZT1vLGc9cyksd1t1KytdPWU7Zi5fc2V0UGl4ZWxzKHQsdyl9LGYuZXJvZGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZCxlLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdD1mLl90b1BpeGVscyhhKSx1PTAsdj10Lmxlbmd0aD90Lmxlbmd0aC80OjAsdz1uZXcgSW50MzJBcnJheSh2KTt1PHY7KWZvcihiPXUsYz11K2Eud2lkdGg7dTxjOylkPWU9Zi5fZ2V0QVJHQih0LHUpLGk9dS0xLGg9dSsxLGo9dS1hLndpZHRoLGs9dSthLndpZHRoLGk8YiYmKGk9dSksaD49YyYmKGg9dSksajwwJiYoaj0wKSxrPj12JiYoaz11KSxuPWYuX2dldEFSR0IodCxqKSxtPWYuX2dldEFSR0IodCxpKSxvPWYuX2dldEFSR0IodCxrKSxsPWYuX2dldEFSR0IodCxoKSxnPTc3KihkPj4xNiYyNTUpKzE1MSooZD4+OCYyNTUpKzI4KigyNTUmZCkscT03NyoobT4+MTYmMjU1KSsxNTEqKG0+PjgmMjU1KSsyOCooMjU1Jm0pLHA9NzcqKGw+PjE2JjI1NSkrMTUxKihsPj44JjI1NSkrMjgqKDI1NSZsKSxyPTc3KihuPj4xNiYyNTUpKzE1MSoobj4+OCYyNTUpKzI4KigyNTUmbikscz03Nyoobz4+MTYmMjU1KSsxNTEqKG8+PjgmMjU1KSsyOCooMjU1Jm8pLHE8ZyYmKGU9bSxnPXEpLHA8ZyYmKGU9bCxnPXApLHI8ZyYmKGU9bixnPXIpLHM8ZyYmKGU9byxnPXMpLHdbdSsrXT1lO2YuX3NldFBpeGVscyh0LHcpfTt2YXIgZyxoLGksajtmLmJsdXI9ZnVuY3Rpb24oYSxiKXtlKGEsYil9LGIuZXhwb3J0cz1mfSx7fV0sNDM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9W107ZC5wcm90b3R5cGUuY3JlYXRlSW1hZ2U9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlSW1hZ2VcIixhcmd1bWVudHMpLG5ldyBkLkltYWdlKGEsYil9LGQucHJvdG90eXBlLnNhdmVDYW52YXM9ZnVuY3Rpb24oKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlQ2FudmFzXCIsYXJndW1lbnRzKTt2YXIgYSxiLGMsZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7YXJndW1lbnRzWzBdaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudD8oYT1hcmd1bWVudHNbMF0sZS5zaGlmdCgpKTphcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQuRWxlbWVudD8oYT1hcmd1bWVudHNbMF0uZWx0LGUuc2hpZnQoKSk6YT10aGlzLl9jdXJFbGVtZW50JiZ0aGlzLl9jdXJFbGVtZW50LmVsdCxlLmxlbmd0aD49MSYmKGI9ZVswXSksZS5sZW5ndGg+PTImJihjPWVbMV0pLGM9Y3x8ZC5wcm90b3R5cGUuX2NoZWNrRmlsZUV4dGVuc2lvbihiLGMpWzFdfHxcInBuZ1wiO3ZhciBmO3N3aXRjaChjKXtkZWZhdWx0OmY9XCJpbWFnZS9wbmdcIjticmVhaztjYXNlXCJqcGVnXCI6Y2FzZVwianBnXCI6Zj1cImltYWdlL2pwZWdcIn1hLnRvQmxvYihmdW5jdGlvbihhKXtkLnByb3RvdHlwZS5kb3dubG9hZEZpbGUoYSxiLGMpfSxmKX0sZC5wcm90b3R5cGUuc2F2ZUZyYW1lcz1mdW5jdGlvbihhLGIsYyxmLGcpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVGcmFtZXNcIixhcmd1bWVudHMpO3ZhciBoPWN8fDM7aD1kLnByb3RvdHlwZS5jb25zdHJhaW4oaCwwLDE1KSxoKj0xZTM7dmFyIGk9Znx8MTU7aT1kLnByb3RvdHlwZS5jb25zdHJhaW4oaSwwLDIyKTt2YXIgaj0wLGs9ZC5wcm90b3R5cGUuX21ha2VGcmFtZSxsPXRoaXMuX2N1ckVsZW1lbnQuZWx0LG09c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtrKGEraixiLGwpLGorK30sMWUzL2kpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihjbGVhckludGVydmFsKG0pLGcpZyhlKTtlbHNlIGZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgYj1lW2FdO2QucHJvdG90eXBlLmRvd25sb2FkRmlsZShiLmltYWdlRGF0YSxiLmZpbGVuYW1lLGIuZXh0KX1lPVtdfSxoKy4wMSl9LGQucHJvdG90eXBlLl9tYWtlRnJhbWU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2Q9dGhpcz90aGlzLl9jdXJFbGVtZW50LmVsdDpjO3ZhciBmO2lmKGIpc3dpdGNoKGIudG9Mb3dlckNhc2UoKSl7Y2FzZVwicG5nXCI6Zj1cImltYWdlL3BuZ1wiO2JyZWFrO2Nhc2VcImpwZWdcIjpjYXNlXCJqcGdcIjpmPVwiaW1hZ2UvanBlZ1wiO2JyZWFrO2RlZmF1bHQ6Zj1cImltYWdlL3BuZ1wifWVsc2UgYj1cInBuZ1wiLGY9XCJpbWFnZS9wbmdcIjt2YXIgZz1kLnRvRGF0YVVSTChmKTtnPWcucmVwbGFjZShmLFwiaW1hZ2Uvb2N0ZXQtc3RyZWFtXCIpO3ZhciBoPXt9O2guaW1hZ2VEYXRhPWcsaC5maWxlbmFtZT1hLGguZXh0PWIsZS5wdXNoKGgpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw0NDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiKXtyZXR1cm4gYT4wJiZhPGI/YTpifXZhciBlPWEoXCIuLi9jb3JlL21haW5cIiksZj1hKFwiLi9maWx0ZXJzXCIpLGc9YShcIi4uL2NvcmUvaGVscGVyc1wiKSxoPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGUucHJvdG90eXBlLmxvYWRJbWFnZT1mdW5jdGlvbihhLGIsYyl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZEltYWdlXCIsYXJndW1lbnRzKTt2YXIgZD1uZXcgSW1hZ2UsZj1uZXcgZS5JbWFnZSgxLDEsdGhpcyksZz10aGlzO3JldHVybiBkLm9ubG9hZD1mdW5jdGlvbigpe2Yud2lkdGg9Zi5jYW52YXMud2lkdGg9ZC53aWR0aCxmLmhlaWdodD1mLmNhbnZhcy5oZWlnaHQ9ZC5oZWlnaHQsZi5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoZCwwLDApLGYubW9kaWZpZWQ9ITAsXCJmdW5jdGlvblwiPT10eXBlb2YgYiYmYihmKSxnLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGQub25lcnJvcj1mdW5jdGlvbihhKXtlLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoMCxkLnNyYyksXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmYyhhKX0sMCE9PWEuaW5kZXhPZihcImRhdGE6aW1hZ2UvXCIpJiYoZC5jcm9zc09yaWdpbj1cIkFub255bW91c1wiKSxkLnNyYz1hLGZ9LGUucHJvdG90eXBlLmltYWdlPWZ1bmN0aW9uKGEsYixjLGYsaCxpLGosayxsKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJpbWFnZVwiLGFyZ3VtZW50cyk7dmFyIG09YS53aWR0aCxuPWEuaGVpZ2h0O2EuZWx0JiZhLmVsdC52aWRlb1dpZHRoJiYhYS5jYW52YXMmJihtPWEuZWx0LnZpZGVvV2lkdGgsbj1hLmVsdC52aWRlb0hlaWdodCk7dmFyIG89YixwPWMscT1mfHxtLHI9aHx8bixzPWl8fDAsdD1qfHwwLHU9a3x8bSx2PWx8fG47dT1kKHUsbSksdj1kKHYsbik7dmFyIHc9MTthLmVsdCYmIWEuY2FudmFzJiZhLmVsdC5zdHlsZS53aWR0aCYmKHc9YS5lbHQudmlkZW9XaWR0aCYmIWY/YS5lbHQudmlkZW9XaWR0aDphLmVsdC53aWR0aCx3Lz1wYXJzZUludChhLmVsdC5zdHlsZS53aWR0aCwxMCkpLHMqPXcsdCo9dyx2Kj13LHUqPXc7dmFyIHg9Zy5tb2RlQWRqdXN0KG8scCxxLHIsdGhpcy5fcmVuZGVyZXIuX2ltYWdlTW9kZSk7dGhpcy5fcmVuZGVyZXIuaW1hZ2UoYSxzLHQsdSx2LHgueCx4LnkseC53LHguaCl9LGUucHJvdG90eXBlLnRpbnQ9ZnVuY3Rpb24oKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0aW50XCIsYXJndW1lbnRzKTt2YXIgYT10aGlzLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9yZW5kZXJlci5fdGludD1hLmxldmVsc30sZS5wcm90b3R5cGUubm9UaW50PWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3RpbnQ9bnVsbH0sZS5wcm90b3R5cGUuX2dldFRpbnRlZEltYWdlQ2FudmFzPWZ1bmN0aW9uKGEpe2lmKCFhLmNhbnZhcylyZXR1cm4gYTt2YXIgYj1mLl90b1BpeGVscyhhLmNhbnZhcyksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Mud2lkdGg9YS5jYW52YXMud2lkdGgsYy5oZWlnaHQ9YS5jYW52YXMuaGVpZ2h0O2Zvcih2YXIgZD1jLmdldENvbnRleHQoXCIyZFwiKSxlPWQuY3JlYXRlSW1hZ2VEYXRhKGEuY2FudmFzLndpZHRoLGEuY2FudmFzLmhlaWdodCksZz1lLmRhdGEsaD0wO2g8Yi5sZW5ndGg7aCs9NCl7dmFyIGk9YltoXSxqPWJbaCsxXSxrPWJbaCsyXSxsPWJbaCszXTtnW2hdPWkqdGhpcy5fcmVuZGVyZXIuX3RpbnRbMF0vMjU1LGdbaCsxXT1qKnRoaXMuX3JlbmRlcmVyLl90aW50WzFdLzI1NSxnW2grMl09ayp0aGlzLl9yZW5kZXJlci5fdGludFsyXS8yNTUsZ1toKzNdPWwqdGhpcy5fcmVuZGVyZXIuX3RpbnRbM10vMjU1fXJldHVybiBkLnB1dEltYWdlRGF0YShlLDAsMCksY30sZS5wcm90b3R5cGUuaW1hZ2VNb2RlPWZ1bmN0aW9uKGEpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImltYWdlTW9kZVwiLGFyZ3VtZW50cyksYSE9PWguQ09STkVSJiZhIT09aC5DT1JORVJTJiZhIT09aC5DRU5URVJ8fCh0aGlzLl9yZW5kZXJlci5faW1hZ2VNb2RlPWEpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9oZWxwZXJzXCI6MjEsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vZmlsdGVyc1wiOjQyfV0sNDU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4vZmlsdGVyc1wiKTtkLkltYWdlPWZ1bmN0aW9uKGEsYil7dGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSx0aGlzLmNhbnZhcy53aWR0aD10aGlzLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodD10aGlzLmhlaWdodCx0aGlzLmRyYXdpbmdDb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKSx0aGlzLl9waXhlbERlbnNpdHk9MSx0aGlzLl9tb2RpZmllZD0hMSx0aGlzLl9waXhlbHNEaXJ0eT0hMCx0aGlzLnBpeGVscz1bXX0sZC5JbWFnZS5wcm90b3R5cGUuX3NldFByb3BlcnR5PWZ1bmN0aW9uKGEsYil7dGhpc1thXT1iLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5sb2FkUGl4ZWxzPWZ1bmN0aW9uKCl7ZC5SZW5kZXJlcjJELnByb3RvdHlwZS5sb2FkUGl4ZWxzLmNhbGwodGhpcyksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLnVwZGF0ZVBpeGVscz1mdW5jdGlvbihhLGIsYyxlKXtkLlJlbmRlcmVyMkQucHJvdG90eXBlLnVwZGF0ZVBpeGVscy5jYWxsKHRoaXMsYSxiLGMsZSksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gZC5SZW5kZXJlcjJELnByb3RvdHlwZS5nZXQuY2FsbCh0aGlzLGEsYixjLGUpfSxkLkltYWdlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe2QuUmVuZGVyZXIyRC5wcm90b3R5cGUuc2V0LmNhbGwodGhpcyxhLGIsYyksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihhLGIpezA9PT1hJiYwPT09Yj8oYT10aGlzLmNhbnZhcy53aWR0aCxiPXRoaXMuY2FudmFzLmhlaWdodCk6MD09PWE/YT10aGlzLmNhbnZhcy53aWR0aCpiL3RoaXMuY2FudmFzLmhlaWdodDowPT09YiYmKGI9dGhpcy5jYW52YXMuaGVpZ2h0KmEvdGhpcy5jYW52YXMud2lkdGgpLGE9TWF0aC5mbG9vcihhKSxiPU1hdGguZmxvb3IoYik7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtjLndpZHRoPWEsYy5oZWlnaHQ9YixjLmdldENvbnRleHQoXCIyZFwiKS5kcmF3SW1hZ2UodGhpcy5jYW52YXMsMCwwLHRoaXMuY2FudmFzLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodCwwLDAsYy53aWR0aCxjLmhlaWdodCksdGhpcy5jYW52YXMud2lkdGg9dGhpcy53aWR0aD1hLHRoaXMuY2FudmFzLmhlaWdodD10aGlzLmhlaWdodD1iLHRoaXMuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGMsMCwwLGEsYiwwLDAsYSxiKSx0aGlzLnBpeGVscy5sZW5ndGg+MCYmdGhpcy5sb2FkUGl4ZWxzKCksdGhpcy5zZXRNb2RpZmllZCghMCksdGhpcy5fcGl4ZWxzRGlydHk9ITB9LGQuSW1hZ2UucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZSxmLGcsaCxpLGo7aWYoOT09PWFyZ3VtZW50cy5sZW5ndGgpYT1hcmd1bWVudHNbMF0sYj1hcmd1bWVudHNbMV0sYz1hcmd1bWVudHNbMl0sZT1hcmd1bWVudHNbM10sZj1hcmd1bWVudHNbNF0sZz1hcmd1bWVudHNbNV0saD1hcmd1bWVudHNbNl0saT1hcmd1bWVudHNbN10saj1hcmd1bWVudHNbOF07ZWxzZXtpZig4IT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJTaWduYXR1cmUgbm90IHN1cHBvcnRlZFwiKTthPXRoaXMsYj1hcmd1bWVudHNbMF0sYz1hcmd1bWVudHNbMV0sZT1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10sZz1hcmd1bWVudHNbNF0saD1hcmd1bWVudHNbNV0saT1hcmd1bWVudHNbNl0saj1hcmd1bWVudHNbN119ZC5SZW5kZXJlcjJELl9jb3B5SGVscGVyKHRoaXMsYSxiLGMsZSxmLGcsaCxpLGopLHRoaXMuX3BpeGVsc0RpcnR5PSEwfSxkLkltYWdlLnByb3RvdHlwZS5tYXNrPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMpO3ZhciBiPXRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uLGM9MTthIGluc3RhbmNlb2YgZC5SZW5kZXJlciYmKGM9YS5fcEluc3QuX3BpeGVsRGVuc2l0eSk7dmFyIGU9W2EsMCwwLGMqYS53aWR0aCxjKmEuaGVpZ2h0LDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0XTt0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1cImRlc3RpbmF0aW9uLWluXCIsZC5JbWFnZS5wcm90b3R5cGUuY29weS5hcHBseSh0aGlzLGUpLHRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWIsdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbihhLGIpe2UuYXBwbHkodGhpcy5jYW52YXMsZVthLnRvTG93ZXJDYXNlKCldLGIpLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5ibGVuZD1mdW5jdGlvbigpe2QucHJvdG90eXBlLmJsZW5kLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUuc2V0TW9kaWZpZWQ9ZnVuY3Rpb24oYSl7dGhpcy5fbW9kaWZpZWQ9YX0sZC5JbWFnZS5wcm90b3R5cGUuaXNNb2RpZmllZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb2RpZmllZH0sZC5JbWFnZS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbihhLGIpe2QucHJvdG90eXBlLnNhdmVDYW52YXModGhpcy5jYW52YXMsYSxiKX0sYi5leHBvcnRzPWQuSW1hZ2V9LHtcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9maWx0ZXJzXCI6NDJ9XSw0NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi9maWx0ZXJzXCIpO2EoXCIuLi9jb2xvci9wNS5Db2xvclwiKSxkLnByb3RvdHlwZS5waXhlbHM9W10sZC5wcm90b3R5cGUuYmxlbmQ9ZnVuY3Rpb24oKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJibGVuZFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXI/dGhpcy5fcmVuZGVyZXIuYmxlbmQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTpkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJsZW5kLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvcHlcIixhcmd1bWVudHMpLGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY29weS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24oYSxiKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJmaWx0ZXJcIixhcmd1bWVudHMpLHZvaWQgMCE9PXRoaXMuY2FudmFzP2UuYXBwbHkodGhpcy5jYW52YXMsZVthLnRvTG93ZXJDYXNlKCldLGIpOmUuYXBwbHkodGhpcy5lbHQsZVthLnRvTG93ZXJDYXNlKCldLGIpfSxkLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmdldChhLGIsYyxkKX0sZC5wcm90b3R5cGUubG9hZFBpeGVscz1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRQaXhlbHNcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmxvYWRQaXhlbHMoKX0sZC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLl9yZW5kZXJlci5zZXQoYSxiLGMpfSxkLnByb3RvdHlwZS51cGRhdGVQaXhlbHM9ZnVuY3Rpb24oYSxiLGMsZSl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidXBkYXRlUGl4ZWxzXCIsYXJndW1lbnRzKSwwIT09dGhpcy5waXhlbHMubGVuZ3RoJiZ0aGlzLl9yZW5kZXJlci51cGRhdGVQaXhlbHMoYSxiLGMsZSl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb2xvci9wNS5Db2xvclwiOjE2LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL2ZpbHRlcnNcIjo0Mn1dLDQ3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3ZhciBjPXt9O2lmKHZvaWQgMD09PShiPWJ8fFtdKSlmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliW2QudG9TdHJpbmcoKV09ZDtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKyl7dmFyIGY9YltlXSxnPWFbZV07Y1tmXT1nfXJldHVybiBjfWZ1bmN0aW9uIGUoYSl7dmFyIGI9bmV3IGkuWE1MLGM9YS5jaGlsZE5vZGVzO2lmKGMmJmMubGVuZ3RoKXtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGY9ZShjW2RdKTtiLmFkZENoaWxkKGYpfWIuc2V0TmFtZShhLm5vZGVOYW1lKSxiLl9zZXRDb250KGEudGV4dENvbnRlbnQpLGIuX3NldEF0dHJpYnV0ZXMoYSk7Zm9yKHZhciBnPTA7ZzxiLmNoaWxkcmVuLmxlbmd0aDtnKyspYi5jaGlsZHJlbltnXS5wYXJlbnQ9YjtyZXR1cm4gYn1yZXR1cm4gYi5zZXROYW1lKGEubm9kZU5hbWUpLGIuX3NldENvbnQoYS50ZXh0Q29udGVudCksYi5fc2V0QXR0cmlidXRlcyhhKSxifWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEucmVwbGFjZSgvJi9nLFwiJmFtcDtcIikucmVwbGFjZSgvPC9nLFwiJmx0O1wiKS5yZXBsYWNlKC8+L2csXCImZ3Q7XCIpLnJlcGxhY2UoL1wiL2csXCImcXVvdDtcIikucmVwbGFjZSgvJy9nLFwiJiMwMzk7XCIpfWZ1bmN0aW9uIGcoYSxiKXtiJiYhMCE9PWImJlwidHJ1ZVwiIT09Ynx8KGI9XCJcIiksYXx8KGE9XCJ1bnRpdGxlZFwiKTt2YXIgYz1cIlwiO3JldHVybiBhJiZhLmluZGV4T2YoXCIuXCIpPi0xJiYoYz1hLnNwbGl0KFwiLlwiKS5wb3AoKSksYiYmYyE9PWImJihjPWIsYT1hK1wiLlwiK2MpLFthLGNdfWZ1bmN0aW9uIGgoYSl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhLnRhcmdldCl9dmFyIGk9YShcIi4uL2NvcmUvbWFpblwiKTthKFwid2hhdHdnLWZldGNoXCIpLGEoXCJlczYtcHJvbWlzZVwiKS5wb2x5ZmlsbCgpO3ZhciBqPWEoXCJmZXRjaC1qc29ucFwiKTthKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGkucHJvdG90eXBlLmxvYWRKU09OPWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZEpTT05cIixhcmd1bWVudHMpO2Zvcih2YXIgYSxiLGMsZD1hcmd1bWVudHNbMF0sZT17fSxmPVwianNvblwiLGc9MTtnPGFyZ3VtZW50cy5sZW5ndGg7ZysrKXt2YXIgaD1hcmd1bWVudHNbZ107XCJzdHJpbmdcIj09dHlwZW9mIGg/XCJqc29ucFwiIT09aCYmXCJqc29uXCIhPT1ofHwoZj1oKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBoP2E/Yj1oOmE9aDpcIm9iamVjdFwiPT10eXBlb2YgaCYmaC5oYXNPd25Qcm9wZXJ0eShcImpzb25wQ2FsbGJhY2tcIikmJihmPVwianNvbnBcIixjPWgpfXZhciBqPXRoaXM7cmV0dXJuIHRoaXMuaHR0cERvKGQsXCJHRVRcIixjLGYsZnVuY3Rpb24oYil7Zm9yKHZhciBjIGluIGIpZVtjXT1iW2NdO3ZvaWQgMCE9PWEmJmEoYiksai5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihhKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoNSxkKSwhYil0aHJvdyBhO2IoYSl9KSxlfSxpLnByb3RvdHlwZS5sb2FkU3RyaW5ncz1mdW5jdGlvbigpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRTdHJpbmdzXCIsYXJndW1lbnRzKTtmb3IodmFyIGEsYixjPVtdLGQ9MTtkPGFyZ3VtZW50cy5sZW5ndGg7ZCsrKXt2YXIgZT1hcmd1bWVudHNbZF07XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKHZvaWQgMD09PWE/YT1lOnZvaWQgMD09PWImJihiPWUpKX12YXIgZj10aGlzO3JldHVybiBpLnByb3RvdHlwZS5odHRwRG8uY2FsbCh0aGlzLGFyZ3VtZW50c1swXSxcIkdFVFwiLFwidGV4dFwiLGZ1bmN0aW9uKGIpe3ZhciBkPWIucmVwbGFjZSgvXFxyXFxuL2csXCJcXHJcIikucmVwbGFjZSgvXFxuL2csXCJcXHJcIikuc3BsaXQoL1xcci8pO0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGMsZCksdm9pZCAwIT09YSYmYShjKSxmLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGEpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcigzLGFyZ3VtZW50c1swXSksIWIpdGhyb3cgYTtiKGEpfSksY30saS5wcm90b3R5cGUubG9hZFRhYmxlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZT1bXSxmPSExLGc9YS5zdWJzdHJpbmcoYS5sYXN0SW5kZXhPZihcIi5cIikrMSxhLmxlbmd0aCksaD1cIixcIixqPSExO1widHN2XCI9PT1nJiYoaD1cIlxcdFwiKTtmb3IodmFyIGs9MTtrPGFyZ3VtZW50cy5sZW5ndGg7aysrKWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGFyZ3VtZW50c1trXSl2b2lkIDA9PT1iP2I9YXJndW1lbnRzW2tdOnZvaWQgMD09PWMmJihjPWFyZ3VtZW50c1trXSk7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYXJndW1lbnRzW2tdKWlmKGUucHVzaChhcmd1bWVudHNba10pLFwiaGVhZGVyXCI9PT1hcmd1bWVudHNba10mJihmPSEwKSxcImNzdlwiPT09YXJndW1lbnRzW2tdKXtpZihqKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzZXQgbXVsdGlwbGUgc2VwYXJhdG9yIHR5cGVzLlwiKTtoPVwiLFwiLGo9ITB9ZWxzZSBpZihcInRzdlwiPT09YXJndW1lbnRzW2tdKXtpZihqKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzZXQgbXVsdGlwbGUgc2VwYXJhdG9yIHR5cGVzLlwiKTtoPVwiXFx0XCIsaj0hMH12YXIgbD1uZXcgaS5UYWJsZSxtPXRoaXM7cmV0dXJuIHRoaXMuaHR0cERvKGEsXCJHRVRcIixcInRhYmxlXCIsZnVuY3Rpb24oYSl7Zm9yKHZhciBjLGU9e30sZz0wLGo9MSxuPTIsbz00LHA9J1wiJyxxPVwiXFxyXCIscj1cIlxcblwiLHM9W10sdD0wLHU9bnVsbCx2PWZ1bmN0aW9uKCl7ZS5jdXJyZW50U3RhdGU9ZyxlLnRva2VuPVwiXCJ9LHc9ZnVuY3Rpb24oKXt1LnB1c2goZS50b2tlbiksdigpfSx4PWZ1bmN0aW9uKCl7ZS5lc2NhcGVkPSExLHU9W10sdigpfSx5PWZ1bmN0aW9uKCl7ZS5jdXJyZW50U3RhdGU9byxzLnB1c2godSksdT1udWxsfTs7KXtpZihudWxsPT0oYz1hW3QrK10pKXtpZihlLmVzY2FwZWQpdGhyb3cgbmV3IEVycm9yKFwiVW5jbG9zZWQgcXVvdGUgaW4gZmlsZS5cIik7aWYodSl7dygpLHkoKTticmVha319aWYobnVsbD09PXUmJngoKSxlLmN1cnJlbnRTdGF0ZT09PWcpe2lmKGM9PT1wKXtlLmVzY2FwZWQ9ITAsZS5jdXJyZW50U3RhdGU9ajtjb250aW51ZX1lLmN1cnJlbnRTdGF0ZT1qfWlmKGUuY3VycmVudFN0YXRlPT09aiYmZS5lc2NhcGVkKWlmKGM9PT1wKWFbdF09PT1wPyhlLnRva2VuKz1wLHQrKyk6KGUuZXNjYXBlZD0hMSxlLmN1cnJlbnRTdGF0ZT1uKTtlbHNle2lmKGM9PT1xKWNvbnRpbnVlO2UudG9rZW4rPWN9ZWxzZSBjPT09cT8oYVt0XT09PXImJnQrKyx3KCkseSgpKTpjPT09cj8odygpLHkoKSk6Yz09PWg/dygpOmUuY3VycmVudFN0YXRlPT09aiYmKGUudG9rZW4rPWMpfWlmKGYpbC5jb2x1bW5zPXMuc2hpZnQoKTtlbHNlIGZvcihrPTA7azxzWzBdLmxlbmd0aDtrKyspbC5jb2x1bW5zW2tdPVwibnVsbFwiO3ZhciB6O2ZvcihrPTA7azxzLmxlbmd0aDtrKyspKDEhPT1zW2tdLmxlbmd0aHx8XCJ1bmRlZmluZWRcIiE9PXNba11bMF0mJlwiXCIhPT1zW2tdWzBdKSYmKHo9bmV3IGkuVGFibGVSb3csei5hcnI9c1trXSx6Lm9iaj1kKHNba10sbC5jb2x1bW5zKSxsLmFkZFJvdyh6KSk7XCJmdW5jdGlvblwiPT10eXBlb2YgYiYmYihsKSxtLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGIpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcigyLGEpLCFjKXRocm93IGI7YyhiKX0pLGx9LGkucHJvdG90eXBlLmxvYWRYTUw9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYixjPXt9LGQ9MTtkPGFyZ3VtZW50cy5sZW5ndGg7ZCsrKXt2YXIgZT1hcmd1bWVudHNbZF07XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKHZvaWQgMD09PWE/YT1lOnZvaWQgMD09PWImJihiPWUpKX12YXIgZj10aGlzO3JldHVybiB0aGlzLmh0dHBEbyhhcmd1bWVudHNbMF0sXCJHRVRcIixcInhtbFwiLGZ1bmN0aW9uKGIpe2Zvcih2YXIgZCBpbiBiKWNbZF09YltkXTt2b2lkIDAhPT1hJiZhKGMpLGYuX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYSl7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDEsYXJndW1lbnRzWzBdKSwhYil0aHJvdyBhO2IoYSl9KSxjfSxpLnByb3RvdHlwZS5sb2FkQnl0ZXM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9LGU9dGhpcztyZXR1cm4gdGhpcy5odHRwRG8oYSxcIkdFVFwiLFwiYXJyYXlCdWZmZXJcIixmdW5jdGlvbihhKXtkLmJ5dGVzPW5ldyBVaW50OEFycmF5KGEpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGImJmIoZCksZS5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihiKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoNixhKSwhYyl0aHJvdyBiO2MoYil9KSxkfSxpLnByb3RvdHlwZS5odHRwR2V0PWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaHR0cEdldFwiLGFyZ3VtZW50cyk7dmFyIGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gYS5zcGxpY2UoMSwwLFwiR0VUXCIpLGkucHJvdG90eXBlLmh0dHBEby5hcHBseSh0aGlzLGEpfSxpLnByb3RvdHlwZS5odHRwUG9zdD1mdW5jdGlvbigpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImh0dHBQb3N0XCIsYXJndW1lbnRzKTt2YXIgYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBhLnNwbGljZSgxLDAsXCJQT1NUXCIpLGkucHJvdG90eXBlLmh0dHBEby5hcHBseSh0aGlzLGEpfSxpLnByb3RvdHlwZS5odHRwRG89ZnVuY3Rpb24oKXtmb3IodmFyIGEsYixjLGQsZixnPXt9LGg9MCxrPVwidGV4dC9wbGFpblwiLGw9YXJndW1lbnRzLmxlbmd0aC0xO2w+MCYmXCJmdW5jdGlvblwiPT10eXBlb2YgYXJndW1lbnRzW2xdO2wtLSloKys7dmFyIG09YXJndW1lbnRzLmxlbmd0aC1oLG49YXJndW1lbnRzWzBdO2lmKDI9PT1tJiZcInN0cmluZ1wiPT10eXBlb2YgbiYmXCJvYmplY3RcIj09dHlwZW9mIGFyZ3VtZW50c1sxXSlkPW5ldyBSZXF1ZXN0KG4sYXJndW1lbnRzWzFdKSxiPWFyZ3VtZW50c1syXSxjPWFyZ3VtZW50c1szXTtlbHNle2Zvcih2YXIgbyxwPVwiR0VUXCIscT0xO3E8YXJndW1lbnRzLmxlbmd0aDtxKyspe3ZhciByPWFyZ3VtZW50c1txXTtpZihcInN0cmluZ1wiPT10eXBlb2YgcilcIkdFVFwiPT09cnx8XCJQT1NUXCI9PT1yfHxcIlBVVFwiPT09cnx8XCJERUxFVEVcIj09PXI/cD1yOlwianNvblwiPT09cnx8XCJqc29ucFwiPT09cnx8XCJiaW5hcnlcIj09PXJ8fFwiYXJyYXlCdWZmZXJcIj09PXJ8fFwieG1sXCI9PT1yfHxcInRleHRcIj09PXJ8fFwidGFibGVcIj09PXI/YT1yOm89cjtlbHNlIGlmKFwibnVtYmVyXCI9PXR5cGVvZiByKW89ci50b1N0cmluZygpO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIHIpaWYoci5oYXNPd25Qcm9wZXJ0eShcImpzb25wQ2FsbGJhY2tcIikpZm9yKHZhciBzIGluIHIpZ1tzXT1yW3NdO2Vsc2Ugbz1KU09OLnN0cmluZ2lmeShyKSxrPVwiYXBwbGljYXRpb24vanNvblwiO2Vsc2VcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiYoYj9jPXI6Yj1yKX1kPW5ldyBSZXF1ZXN0KG4se21ldGhvZDpwLG1vZGU6XCJjb3JzXCIsYm9keTpvLGhlYWRlcnM6bmV3IEhlYWRlcnMoe1wiQ29udGVudC1UeXBlXCI6a30pfSl9cmV0dXJuIGF8fChhPS0xIT09bi5pbmRleE9mKFwianNvblwiKT9cImpzb25cIjotMSE9PW4uaW5kZXhPZihcInhtbFwiKT9cInhtbFwiOlwidGV4dFwiKSxmPVwianNvbnBcIj09PWE/aihuLGcpOmZldGNoKGQpLGY9Zi50aGVuKGZ1bmN0aW9uKGIpe2lmKCFiLm9rKXt2YXIgYz1uZXcgRXJyb3IoYi5ib2R5KTt0aHJvdyBjLnN0YXR1cz1iLnN0YXR1cyxjLm9rPSExLGN9dmFyIGQ9Yi5oZWFkZXJzLmdldChcImNvbnRlbnQtbGVuZ3RoXCIpO3N3aXRjaChkJiZkPjY0ZTYmJmkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig3LG4pLGEpe2Nhc2VcImpzb25cIjpjYXNlXCJqc29ucFwiOnJldHVybiBiLmpzb24oKTtjYXNlXCJiaW5hcnlcIjpyZXR1cm4gYi5ibG9iKCk7Y2FzZVwiYXJyYXlCdWZmZXJcIjpyZXR1cm4gYi5hcnJheUJ1ZmZlcigpO2Nhc2VcInhtbFwiOnJldHVybiBiLnRleHQoKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBlKChuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYSxcInRleHQveG1sXCIpLmRvY3VtZW50RWxlbWVudCl9KTtkZWZhdWx0OnJldHVybiBiLnRleHQoKX19KSxmLnRoZW4oYnx8ZnVuY3Rpb24oKXt9KSxmLmNhdGNoKGN8fGNvbnNvbGUuZXJyb3IpLGZ9LHdpbmRvdy5VUkw9d2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTCxpLnByb3RvdHlwZS5fcFdyaXRlcnM9W10saS5wcm90b3R5cGUuY3JlYXRlV3JpdGVyPWZ1bmN0aW9uKGEsYil7dmFyIGM7Zm9yKHZhciBkIGluIGkucHJvdG90eXBlLl9wV3JpdGVycylpZihpLnByb3RvdHlwZS5fcFdyaXRlcnNbZF0ubmFtZT09PWEpcmV0dXJuIGM9bmV3IGkuUHJpbnRXcml0ZXIoYSt0aGlzLm1pbGxpcygpLGIpLGkucHJvdG90eXBlLl9wV3JpdGVycy5wdXNoKGMpLGM7cmV0dXJuIGM9bmV3IGkuUHJpbnRXcml0ZXIoYSxiKSxpLnByb3RvdHlwZS5fcFdyaXRlcnMucHVzaChjKSxjfSxpLlByaW50V3JpdGVyPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpczt0aGlzLm5hbWU9YSx0aGlzLmNvbnRlbnQ9XCJcIix0aGlzLndyaXRlPWZ1bmN0aW9uKGEpe3RoaXMuY29udGVudCs9YX0sdGhpcy5wcmludD1mdW5jdGlvbihhKXt0aGlzLmNvbnRlbnQrPWErXCJcXG5cIn0sdGhpcy5jbGVhcj1mdW5jdGlvbigpe3RoaXMuY29udGVudD1cIlwifSx0aGlzLmNsb3NlPWZ1bmN0aW9uKCl7dmFyIGQ9W107ZC5wdXNoKHRoaXMuY29udGVudCksaS5wcm90b3R5cGUud3JpdGVGaWxlKGQsYSxiKTtmb3IodmFyIGUgaW4gaS5wcm90b3R5cGUuX3BXcml0ZXJzKWkucHJvdG90eXBlLl9wV3JpdGVyc1tlXS5uYW1lPT09dGhpcy5uYW1lJiZpLnByb3RvdHlwZS5fcFdyaXRlcnMuc3BsaWNlKGUsMSk7Yy5jbGVhcigpLGM9e319fSxpLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hcmd1bWVudHMsZT10aGlzLl9jdXJFbGVtZW50LmVsdDtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIHZvaWQgaS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhlKTtpZihkWzBdaW5zdGFuY2VvZiBpLlJlbmRlcmVyfHxkWzBdaW5zdGFuY2VvZiBpLkdyYXBoaWNzKXJldHVybiB2b2lkIGkucHJvdG90eXBlLnNhdmVDYW52YXMoZFswXS5lbHQsZFsxXSxkWzJdKTtpZigxPT09ZC5sZW5ndGgmJlwic3RyaW5nXCI9PXR5cGVvZiBkWzBdKWkucHJvdG90eXBlLnNhdmVDYW52YXMoZSxkWzBdKTtlbHNle3N3aXRjaChnKGRbMV0sZFsyXSlbMV0pe2Nhc2VcImpzb25cIjpyZXR1cm4gdm9pZCBpLnByb3RvdHlwZS5zYXZlSlNPTihkWzBdLGRbMV0sZFsyXSk7Y2FzZVwidHh0XCI6cmV0dXJuIHZvaWQgaS5wcm90b3R5cGUuc2F2ZVN0cmluZ3MoZFswXSxkWzFdLGRbMl0pO2RlZmF1bHQ6ZFswXWluc3RhbmNlb2YgQXJyYXk/aS5wcm90b3R5cGUuc2F2ZVN0cmluZ3MoZFswXSxkWzFdLGRbMl0pOmRbMF1pbnN0YW5jZW9mIGkuVGFibGU/aS5wcm90b3R5cGUuc2F2ZVRhYmxlKGRbMF0sZFsxXSxkWzJdKTpkWzBdaW5zdGFuY2VvZiBpLkltYWdlP2kucHJvdG90eXBlLnNhdmVDYW52YXMoZFswXS5jYW52YXMsZFsxXSk6ZFswXWluc3RhbmNlb2YgaS5Tb3VuZEZpbGUmJmkucHJvdG90eXBlLnNhdmVTb3VuZChkWzBdLGRbMV0sZFsyXSxkWzNdKX19fSxpLnByb3RvdHlwZS5zYXZlSlNPTj1mdW5jdGlvbihhLGIsYyl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZUpTT05cIixhcmd1bWVudHMpO3ZhciBkO2Q9Yz9KU09OLnN0cmluZ2lmeShhKTpKU09OLnN0cmluZ2lmeShhLHZvaWQgMCwyKSx0aGlzLnNhdmVTdHJpbmdzKGQuc3BsaXQoXCJcXG5cIiksYixcImpzb25cIil9LGkucHJvdG90eXBlLnNhdmVKU09OT2JqZWN0PWkucHJvdG90eXBlLnNhdmVKU09OLGkucHJvdG90eXBlLnNhdmVKU09OQXJyYXk9aS5wcm90b3R5cGUuc2F2ZUpTT04saS5wcm90b3R5cGUuc2F2ZVN0cmluZ3M9ZnVuY3Rpb24oYSxiLGMpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVTdHJpbmdzXCIsYXJndW1lbnRzKTtmb3IodmFyIGQ9Y3x8XCJ0eHRcIixlPXRoaXMuY3JlYXRlV3JpdGVyKGIsZCksZj0wO2Y8YS5sZW5ndGg7ZisrKWEubGVuZ3RoLGUucHJpbnQoYVtmXSk7ZS5jbG9zZSgpLGUuY2xlYXIoKX0saS5wcm90b3R5cGUuc2F2ZVRhYmxlPWZ1bmN0aW9uKGEsYixjKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlVGFibGVcIixhcmd1bWVudHMpO3ZhciBkO2Q9dm9pZCAwPT09Yz9iLnN1YnN0cmluZyhiLmxhc3RJbmRleE9mKFwiLlwiKSsxLGIubGVuZ3RoKTpjO3ZhciBlPXRoaXMuY3JlYXRlV3JpdGVyKGIsZCksZz1hLmNvbHVtbnMsaD1cIixcIjtpZihcInRzdlwiPT09ZCYmKGg9XCJcXHRcIiksXCJodG1sXCIhPT1kKXtpZihcIjBcIiE9PWdbMF0pe2Zvcih2YXIgaj0wO2o8Zy5sZW5ndGg7aisrKWo8Zy5sZW5ndGgtMT9lLndyaXRlKGdbal0raCk6ZS53cml0ZShnW2pdKTtlLndyaXRlKFwiXFxuXCIpfWZvcih2YXIgaz0wO2s8YS5yb3dzLmxlbmd0aDtrKyspe3ZhciBsO2ZvcihsPTA7bDxhLnJvd3Nba10uYXJyLmxlbmd0aDtsKyspbDxhLnJvd3Nba10uYXJyLmxlbmd0aC0xP2Uud3JpdGUoYS5yb3dzW2tdLmFycltsXStoKTooYS5yb3dzLmxlbmd0aCxlLndyaXRlKGEucm93c1trXS5hcnJbbF0pKTtlLndyaXRlKFwiXFxuXCIpfX1lbHNle2UucHJpbnQoXCI8aHRtbD5cIiksZS5wcmludChcIjxoZWFkPlwiKTt2YXIgbT0nICA8bWV0YSBodHRwLWVxdWl2PVwiY29udGVudC10eXBlXCIgY29udGVudCc7aWYobSs9Jz1cInRleHQvaHRtbDtjaGFyc2V0PXV0Zi04XCIgLz4nLGUucHJpbnQobSksZS5wcmludChcIjwvaGVhZD5cIiksZS5wcmludChcIjxib2R5PlwiKSxlLnByaW50KFwiICA8dGFibGU+XCIpLFwiMFwiIT09Z1swXSl7ZS5wcmludChcIiAgICA8dHI+XCIpO2Zvcih2YXIgbj0wO248Zy5sZW5ndGg7bisrKXt2YXIgbz1mKGdbbl0pO2UucHJpbnQoXCIgICAgICA8dGQ+XCIrbyksZS5wcmludChcIiAgICAgIDwvdGQ+XCIpfWUucHJpbnQoXCIgICAgPC90cj5cIil9Zm9yKHZhciBwPTA7cDxhLnJvd3MubGVuZ3RoO3ArKyl7ZS5wcmludChcIiAgICA8dHI+XCIpO2Zvcih2YXIgcT0wO3E8YS5jb2x1bW5zLmxlbmd0aDtxKyspe3ZhciByPWEucm93c1twXS5nZXRTdHJpbmcocSkscz1mKHIpO2UucHJpbnQoXCIgICAgICA8dGQ+XCIrcyksZS5wcmludChcIiAgICAgIDwvdGQ+XCIpfWUucHJpbnQoXCIgICAgPC90cj5cIil9ZS5wcmludChcIiAgPC90YWJsZT5cIiksZS5wcmludChcIjwvYm9keT5cIiksZS5wcmludChcIjwvaHRtbD5cIil9ZS5jbG9zZSgpLGUuY2xlYXIoKX0saS5wcm90b3R5cGUud3JpdGVGaWxlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1cImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO2kucHJvdG90eXBlLl9pc1NhZmFyaSgpJiYoZD1cInRleHQvcGxhaW5cIik7dmFyIGU9bmV3IEJsb2IoYSx7dHlwZTpkfSk7aS5wcm90b3R5cGUuZG93bmxvYWRGaWxlKGUsYixjKX0saS5wcm90b3R5cGUuZG93bmxvYWRGaWxlPWZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1nKGMsZCksZj1lWzBdO2lmKGIgaW5zdGFuY2VvZiBCbG9iKXtyZXR1cm4gdm9pZCBhKFwiZmlsZS1zYXZlclwiKS5zYXZlQXMoYixmKX12YXIgaj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtpZihqLmhyZWY9YixqLmRvd25sb2FkPWYsai5vbmNsaWNrPWZ1bmN0aW9uKGEpe2goYSksYS5zdG9wUHJvcGFnYXRpb24oKX0sai5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaiksaS5wcm90b3R5cGUuX2lzU2FmYXJpKCkpe3ZhciBrPVwiSGVsbG8sIFNhZmFyaSB1c2VyISBUbyBkb3dubG9hZCB0aGlzIGZpbGUuLi5cXG5cIjtrKz1cIjEuIEdvIHRvIEZpbGUgLS1cXHgzZSBTYXZlIEFzLlxcblwiLGsrPScyLiBDaG9vc2UgXCJQYWdlIFNvdXJjZVwiIGFzIHRoZSBGb3JtYXQuXFxuJyxrKz0nMy4gTmFtZSBpdCB3aXRoIHRoaXMgZXh0ZW5zaW9uOiAuXCInK2VbMV0rJ1wiJyxhbGVydChrKX1qLmNsaWNrKCl9LGkucHJvdG90eXBlLl9jaGVja0ZpbGVFeHRlbnNpb249ZyxpLnByb3RvdHlwZS5faXNTYWZhcmk9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5IVE1MRWxlbWVudCkuaW5kZXhPZihcIkNvbnN0cnVjdG9yXCIpPjB9LGIuZXhwb3J0cz1pfSx7XCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiZXM2LXByb21pc2VcIjo0LFwiZmV0Y2gtanNvbnBcIjo1LFwiZmlsZS1zYXZlclwiOjYsXCJ3aGF0d2ctZmV0Y2hcIjoxMn1dLDQ4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlRhYmxlPWZ1bmN0aW9uKGEpe3RoaXMuY29sdW1ucz1bXSx0aGlzLnJvd3M9W119LGQuVGFibGUucHJvdG90eXBlLmFkZFJvdz1mdW5jdGlvbihhKXt2YXIgYj1hfHxuZXcgZC5UYWJsZVJvdztpZih2b2lkIDA9PT1iLmFycnx8dm9pZCAwPT09Yi5vYmopdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBUYWJsZVJvdzogXCIrYik7cmV0dXJuIGIudGFibGU9dGhpcyx0aGlzLnJvd3MucHVzaChiKSxifSxkLlRhYmxlLnByb3RvdHlwZS5yZW1vdmVSb3c9ZnVuY3Rpb24oYSl7dGhpcy5yb3dzW2FdLnRhYmxlPW51bGw7dmFyIGI9dGhpcy5yb3dzLnNwbGljZShhKzEsdGhpcy5yb3dzLmxlbmd0aCk7dGhpcy5yb3dzLnBvcCgpLHRoaXMucm93cz10aGlzLnJvd3MuY29uY2F0KGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRSb3c9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm93c1thXX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0Um93cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvd3N9LGQuVGFibGUucHJvdG90eXBlLmZpbmRSb3c9ZnVuY3Rpb24oYSxiKXtpZihcInN0cmluZ1wiPT10eXBlb2YgYil7Zm9yKHZhciBjPTA7Yzx0aGlzLnJvd3MubGVuZ3RoO2MrKylpZih0aGlzLnJvd3NbY10ub2JqW2JdPT09YSlyZXR1cm4gdGhpcy5yb3dzW2NdfWVsc2UgZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKylpZih0aGlzLnJvd3NbZF0uYXJyW2JdPT09YSlyZXR1cm4gdGhpcy5yb3dzW2RdO3JldHVybiBudWxsfSxkLlRhYmxlLnByb3RvdHlwZS5maW5kUm93cz1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiKWZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspdGhpcy5yb3dzW2RdLm9ialtiXT09PWEmJmMucHVzaCh0aGlzLnJvd3NbZF0pO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLnJvd3MubGVuZ3RoO2UrKyl0aGlzLnJvd3NbZV0uYXJyW2JdPT09YSYmYy5wdXNoKHRoaXMucm93c1tlXSk7cmV0dXJuIGN9LGQuVGFibGUucHJvdG90eXBlLm1hdGNoUm93PWZ1bmN0aW9uKGEsYil7aWYoXCJudW1iZXJcIj09dHlwZW9mIGIpe2Zvcih2YXIgYz0wO2M8dGhpcy5yb3dzLmxlbmd0aDtjKyspaWYodGhpcy5yb3dzW2NdLmFycltiXS5tYXRjaChhKSlyZXR1cm4gdGhpcy5yb3dzW2NdfWVsc2UgZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKylpZih0aGlzLnJvd3NbZF0ub2JqW2JdLm1hdGNoKGEpKXJldHVybiB0aGlzLnJvd3NbZF07cmV0dXJuIG51bGx9LGQuVGFibGUucHJvdG90eXBlLm1hdGNoUm93cz1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBiKWZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspdGhpcy5yb3dzW2RdLmFycltiXS5tYXRjaChhKSYmYy5wdXNoKHRoaXMucm93c1tkXSk7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMucm93cy5sZW5ndGg7ZSsrKXRoaXMucm93c1tlXS5vYmpbYl0ubWF0Y2goYSkmJmMucHVzaCh0aGlzLnJvd3NbZV0pO3JldHVybiBjfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRDb2x1bW49ZnVuY3Rpb24oYSl7dmFyIGI9W107aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpZm9yKHZhciBjPTA7Yzx0aGlzLnJvd3MubGVuZ3RoO2MrKyliLnB1c2godGhpcy5yb3dzW2NdLm9ialthXSk7ZWxzZSBmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKWIucHVzaCh0aGlzLnJvd3NbZF0uYXJyW2FdKTtyZXR1cm4gYn0sZC5UYWJsZS5wcm90b3R5cGUuY2xlYXJSb3dzPWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMucm93cyx0aGlzLnJvd3M9W119LGQuVGFibGUucHJvdG90eXBlLmFkZENvbHVtbj1mdW5jdGlvbihhKXt2YXIgYj1hfHxudWxsO3RoaXMuY29sdW1ucy5wdXNoKGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRDb2x1bW5Db3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbHVtbnMubGVuZ3RofSxkLlRhYmxlLnByb3RvdHlwZS5nZXRSb3dDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvd3MubGVuZ3RofSxkLlRhYmxlLnByb3RvdHlwZS5yZW1vdmVUb2tlbnM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLFwiXFxcXCQmXCIpfSxkPVtdLGU9MDtlPGEubGVuZ3RoO2UrKylkLnB1c2goYyhhLmNoYXJBdChlKSkpO3ZhciBmPW5ldyBSZWdFeHAoZC5qb2luKFwifFwiKSxcImdcIik7aWYodm9pZCAwPT09Yilmb3IodmFyIGc9MDtnPHRoaXMuY29sdW1ucy5sZW5ndGg7ZysrKWZvcih2YXIgaD0wO2g8dGhpcy5yb3dzLmxlbmd0aDtoKyspe3ZhciBpPXRoaXMucm93c1toXS5hcnJbZ107aT1pLnJlcGxhY2UoZixcIlwiKSx0aGlzLnJvd3NbaF0uYXJyW2ddPWksdGhpcy5yb3dzW2hdLm9ialt0aGlzLmNvbHVtbnNbZ11dPWl9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYilmb3IodmFyIGo9MDtqPHRoaXMucm93cy5sZW5ndGg7aisrKXt2YXIgaz10aGlzLnJvd3Nbal0ub2JqW2JdO2s9ay5yZXBsYWNlKGYsXCJcIiksdGhpcy5yb3dzW2pdLm9ialtiXT1rO3ZhciBsPXRoaXMuY29sdW1ucy5pbmRleE9mKGIpO3RoaXMucm93c1tqXS5hcnJbbF09a31lbHNlIGZvcih2YXIgbT0wO208dGhpcy5yb3dzLmxlbmd0aDttKyspe3ZhciBuPXRoaXMucm93c1ttXS5hcnJbYl07bj1uLnJlcGxhY2UoZixcIlwiKSx0aGlzLnJvd3NbbV0uYXJyW2JdPW4sdGhpcy5yb3dzW21dLm9ialt0aGlzLmNvbHVtbnNbYl1dPW59fSxkLlRhYmxlLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBSZWdFeHAoXCIgXCIsXCJnXCIpO2lmKHZvaWQgMD09PWEpZm9yKHZhciBjPTA7Yzx0aGlzLmNvbHVtbnMubGVuZ3RoO2MrKylmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKXt2YXIgZT10aGlzLnJvd3NbZF0uYXJyW2NdO2U9ZS5yZXBsYWNlKGIsXCJcIiksdGhpcy5yb3dzW2RdLmFycltjXT1lLHRoaXMucm93c1tkXS5vYmpbdGhpcy5jb2x1bW5zW2NdXT1lfWVsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpZm9yKHZhciBmPTA7Zjx0aGlzLnJvd3MubGVuZ3RoO2YrKyl7dmFyIGc9dGhpcy5yb3dzW2ZdLm9ialthXTtnPWcucmVwbGFjZShiLFwiXCIpLHRoaXMucm93c1tmXS5vYmpbYV09Zzt2YXIgaD10aGlzLmNvbHVtbnMuaW5kZXhPZihhKTt0aGlzLnJvd3NbZl0uYXJyW2hdPWd9ZWxzZSBmb3IodmFyIGk9MDtpPHRoaXMucm93cy5sZW5ndGg7aSsrKXt2YXIgaj10aGlzLnJvd3NbaV0uYXJyW2FdO2o9ai5yZXBsYWNlKGIsXCJcIiksdGhpcy5yb3dzW2ldLmFyclthXT1qLHRoaXMucm93c1tpXS5vYmpbdGhpcy5jb2x1bW5zW2FdXT1qfX0sZC5UYWJsZS5wcm90b3R5cGUucmVtb3ZlQ29sdW1uPWZ1bmN0aW9uKGEpe3ZhciBiLGM7XCJzdHJpbmdcIj09dHlwZW9mIGE/KGI9YSxjPXRoaXMuY29sdW1ucy5pbmRleE9mKGEpKTooYz1hLGI9dGhpcy5jb2x1bW5zW2FdKTt2YXIgZD10aGlzLmNvbHVtbnMuc3BsaWNlKGMrMSx0aGlzLmNvbHVtbnMubGVuZ3RoKTt0aGlzLmNvbHVtbnMucG9wKCksdGhpcy5jb2x1bW5zPXRoaXMuY29sdW1ucy5jb25jYXQoZCk7Zm9yKHZhciBlPTA7ZTx0aGlzLnJvd3MubGVuZ3RoO2UrKyl7dmFyIGY9dGhpcy5yb3dzW2VdLmFycixnPWYuc3BsaWNlKGMrMSxmLmxlbmd0aCk7Zi5wb3AoKSx0aGlzLnJvd3NbZV0uYXJyPWYuY29uY2F0KGcpLGRlbGV0ZSB0aGlzLnJvd3NbZV0ub2JqW2JdfX0sZC5UYWJsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLnJvd3NbYV0uc2V0KGIsYyl9LGQuVGFibGUucHJvdG90eXBlLnNldE51bT1mdW5jdGlvbihhLGIsYyl7dGhpcy5yb3dzW2FdLnNldE51bShiLGMpfSxkLlRhYmxlLnByb3RvdHlwZS5zZXRTdHJpbmc9ZnVuY3Rpb24oYSxiLGMpe3RoaXMucm93c1thXS5zZXRTdHJpbmcoYixjKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucm93c1thXS5nZXQoYil9LGQuVGFibGUucHJvdG90eXBlLmdldE51bT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnJvd3NbYV0uZ2V0TnVtKGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5yb3dzW2FdLmdldFN0cmluZyhiKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0T2JqZWN0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQ9e30sZT0wO2U8dGhpcy5yb3dzLmxlbmd0aDtlKyspaWYoYj10aGlzLnJvd3NbZV0ub2JqLFwic3RyaW5nXCI9PXR5cGVvZiBhKXtpZighKHRoaXMuY29sdW1ucy5pbmRleE9mKGEpPj0wKSl0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgdGFibGUgaGFzIG5vIGNvbHVtbiBuYW1lZCBcIicrYSsnXCInKTtjPWJbYV0sZFtjXT1ifWVsc2UgZFtlXT10aGlzLnJvd3NbZV0ub2JqO3JldHVybiBkfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRBcnJheT1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPTA7Yjx0aGlzLnJvd3MubGVuZ3RoO2IrKylhLnB1c2godGhpcy5yb3dzW2JdLmFycik7cmV0dXJuIGF9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQ5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlRhYmxlUm93PWZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZD17fTthJiYoYj1ifHxcIixcIixjPWEuc3BsaXQoYikpO2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZj1lLGc9Y1tlXTtkW2ZdPWd9dGhpcy5hcnI9Yyx0aGlzLm9iaj1kLHRoaXMudGFibGU9bnVsbH0sZC5UYWJsZVJvdy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpe3ZhciBjPXRoaXMudGFibGUuY29sdW1ucy5pbmRleE9mKGEpO2lmKCEoYz49MCkpdGhyb3cgbmV3IEVycm9yKCdUaGlzIHRhYmxlIGhhcyBubyBjb2x1bW4gbmFtZWQgXCInK2ErJ1wiJyk7dGhpcy5vYmpbYV09Yix0aGlzLmFycltjXT1ifWVsc2V7aWYoIShhPHRoaXMudGFibGUuY29sdW1ucy5sZW5ndGgpKXRocm93IG5ldyBFcnJvcihcIkNvbHVtbiAjXCIrYStcIiBpcyBvdXQgb2YgdGhlIHJhbmdlIG9mIHRoaXMgdGFibGVcIik7dGhpcy5hcnJbYV09Yjt2YXIgZD10aGlzLnRhYmxlLmNvbHVtbnNbYV07dGhpcy5vYmpbZF09Yn19LGQuVGFibGVSb3cucHJvdG90eXBlLnNldE51bT1mdW5jdGlvbihhLGIpe3ZhciBjPXBhcnNlRmxvYXQoYik7dGhpcy5zZXQoYSxjKX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuc2V0U3RyaW5nPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi50b1N0cmluZygpO3RoaXMuc2V0KGEsYyl9LGQuVGFibGVSb3cucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYT90aGlzLm9ialthXTp0aGlzLmFyclthXX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuZ2V0TnVtPWZ1bmN0aW9uKGEpe3ZhciBiO2lmKGI9XCJzdHJpbmdcIj09dHlwZW9mIGE/cGFyc2VGbG9hdCh0aGlzLm9ialthXSk6cGFyc2VGbG9hdCh0aGlzLmFyclthXSksXCJOYU5cIj09PWIudG9TdHJpbmcoKSl0aHJvd1wiRXJyb3I6IFwiK3RoaXMub2JqW2FdK1wiIGlzIE5hTiAoTm90IGEgTnVtYmVyKVwiO3JldHVybiBifSxkLlRhYmxlUm93LnByb3RvdHlwZS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGE/dGhpcy5vYmpbYV0udG9TdHJpbmcoKTp0aGlzLmFyclthXS50b1N0cmluZygpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1MDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5YTUw9ZnVuY3Rpb24oKXt0aGlzLm5hbWU9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY29udGVudD1udWxsfSxkLlhNTC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSxkLlhNTC5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9LGQuWE1MLnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKGEpe3RoaXMubmFtZT1hfSxkLlhNTC5wcm90b3R5cGUuaGFzQ2hpbGRyZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg+MH0sZC5YTUwucHJvdG90eXBlLmxpc3RDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5uYW1lfSl9LGQuWE1MLnByb3RvdHlwZS5nZXRDaGlsZHJlbj1mdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4gYi5uYW1lPT09YX0pOnRoaXMuY2hpbGRyZW59LGQuWE1MLnByb3RvdHlwZS5nZXRDaGlsZD1mdW5jdGlvbihhKXtpZihcInN0cmluZ1wiIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5jaGlsZHJlblthXTtmb3IodmFyIGI9MDtiPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5jaGlsZHJlbltiXTtpZihjLm5hbWU9PT1hKXJldHVybiBjfX0sZC5YTUwucHJvdG90eXBlLmFkZENoaWxkPWZ1bmN0aW9uKGEpe2EgaW5zdGFuY2VvZiBkLlhNTCYmdGhpcy5jaGlsZHJlbi5wdXNoKGEpfSxkLlhNTC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oYSl7dmFyIGI9LTE7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpe2Zvcih2YXIgYz0wO2M8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YysrKWlmKHRoaXMuY2hpbGRyZW5bY10ubmFtZT09PWEpe2I9YzticmVha319ZWxzZSBiPWE7LTEhPT1iJiZ0aGlzLmNoaWxkcmVuLnNwbGljZShiLDEpfSxkLlhNTC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKS5sZW5ndGh9LGQuWE1MLnByb3RvdHlwZS5saXN0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpfSxkLlhNTC5wcm90b3R5cGUuaGFzQXR0cmlidXRlPWZ1bmN0aW9uKGEpe3JldHVybiEhdGhpcy5hdHRyaWJ1dGVzW2FdfSxkLlhNTC5wcm90b3R5cGUuZ2V0TnVtPWZ1bmN0aW9uKGEsYil7cmV0dXJuIE51bWJlcih0aGlzLmF0dHJpYnV0ZXNbYV0pfHxifHwwfSxkLlhNTC5wcm90b3R5cGUuZ2V0U3RyaW5nPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFN0cmluZyh0aGlzLmF0dHJpYnV0ZXNbYV0pfHxifHxudWxsfSxkLlhNTC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKGEsYil7dGhpcy5hdHRyaWJ1dGVzW2FdJiYodGhpcy5hdHRyaWJ1dGVzW2FdPWIpfSxkLlhNTC5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jb250ZW50fHxhfHxudWxsfSxkLlhNTC5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbihhKXt0aGlzLmNoaWxkcmVuLmxlbmd0aHx8KHRoaXMuY29udGVudD1hKX0sZC5YTUwucHJvdG90eXBlLl9zZXRDb250PWZ1bmN0aW9uKGEpe3ZhciBiO2I9YSxiPWIucmVwbGFjZSgvXFxzXFxzKy9nLFwiLFwiKSx0aGlzLmNvbnRlbnQ9Yn0sZC5YTUwucHJvdG90eXBlLl9zZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9YS5hdHRyaWJ1dGVzO2lmKGMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07YltlLm5vZGVOYW1lXT1lLm5vZGVWYWx1ZX10aGlzLmF0dHJpYnV0ZXM9Yn0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBNYXRoLmh5cG90KXJldHVybiBNYXRoLmh5cG90LmFwcGx5KG51bGwsYXJndW1lbnRzKTtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxlPVtdLGY9MCxnPTA7ZzxkO2crKyl7dmFyIGg9YXJndW1lbnRzW2ddXG47aWYoKGg9K2gpPT09MS8wfHxoPT09LTEvMClyZXR1cm4gMS8wO2g9TWF0aC5hYnMoaCksaD5mJiYoZj1oKSxlW2ddPWh9MD09PWYmJihmPTEpO2Zvcih2YXIgaT0wLGo9MCxrPTA7azxkO2srKyl7dmFyIGw9ZVtrXS9mLG09bCpsLWosbj1pK207aj1uLWktbSxpPW59cmV0dXJuIE1hdGguc3FydChpKSpmfXZhciBlPWEoXCIuLi9jb3JlL21haW5cIik7ZS5wcm90b3R5cGUuYWJzPU1hdGguYWJzLGUucHJvdG90eXBlLmNlaWw9TWF0aC5jZWlsLGUucHJvdG90eXBlLmNvbnN0cmFpbj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvbnN0cmFpblwiLGFyZ3VtZW50cyksTWF0aC5tYXgoTWF0aC5taW4oYSxjKSxiKX0sZS5wcm90b3R5cGUuZGlzdD1mdW5jdGlvbigpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJkaXN0XCIsYXJndW1lbnRzKSw0PT09YXJndW1lbnRzLmxlbmd0aD9kKGFyZ3VtZW50c1syXS1hcmd1bWVudHNbMF0sYXJndW1lbnRzWzNdLWFyZ3VtZW50c1sxXSk6Nj09PWFyZ3VtZW50cy5sZW5ndGg/ZChhcmd1bWVudHNbM10tYXJndW1lbnRzWzBdLGFyZ3VtZW50c1s0XS1hcmd1bWVudHNbMV0sYXJndW1lbnRzWzVdLWFyZ3VtZW50c1syXSk6dm9pZCAwfSxlLnByb3RvdHlwZS5leHA9TWF0aC5leHAsZS5wcm90b3R5cGUuZmxvb3I9TWF0aC5mbG9vcixlLnByb3RvdHlwZS5sZXJwPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibGVycFwiLGFyZ3VtZW50cyksYyooYi1hKSthfSxlLnByb3RvdHlwZS5sb2c9TWF0aC5sb2csZS5wcm90b3R5cGUubWFnPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1hZ1wiLGFyZ3VtZW50cyksZChhLGIpfSxlLnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1hcFwiLGFyZ3VtZW50cyk7dmFyIGg9KGEtYikvKGMtYikqKGYtZCkrZDtyZXR1cm4gZz9kPGY/dGhpcy5jb25zdHJhaW4oaCxkLGYpOnRoaXMuY29uc3RyYWluKGgsZixkKTpofSxlLnByb3RvdHlwZS5tYXg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWF4XCIsYXJndW1lbnRzKSxhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5P01hdGgubWF4LmFwcGx5KG51bGwsYXJndW1lbnRzWzBdKTpNYXRoLm1heC5hcHBseShudWxsLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlLm1pbj1mdW5jdGlvbigpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtaW5cIixhcmd1bWVudHMpLGFyZ3VtZW50c1swXWluc3RhbmNlb2YgQXJyYXk/TWF0aC5taW4uYXBwbHkobnVsbCxhcmd1bWVudHNbMF0pOk1hdGgubWluLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZS5wcm90b3R5cGUubm9ybT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5vcm1cIixhcmd1bWVudHMpLHRoaXMubWFwKGEsYixjLDAsMSl9LGUucHJvdG90eXBlLnBvdz1NYXRoLnBvdyxlLnByb3RvdHlwZS5yb3VuZD1NYXRoLnJvdW5kLGUucHJvdG90eXBlLnNxPWZ1bmN0aW9uKGEpe3JldHVybiBhKmF9LGUucHJvdG90eXBlLnNxcnQ9TWF0aC5zcXJ0LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDUyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5jcmVhdGVWZWN0b3I9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZD9uZXcgZC5WZWN0b3IodGhpcyxhcmd1bWVudHMpOm5ldyBkLlZlY3RvcihhLGIsYyl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDUzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQsZT1hKFwiLi4vY29yZS9tYWluXCIpLGY9NCxnPTE8PGYsaD04LGk9MTw8aCxqPTQwOTUsaz00LGw9LjUsbT1mdW5jdGlvbihhKXtyZXR1cm4uNSooMS1NYXRoLmNvcyhhKk1hdGguUEkpKX07ZS5wcm90b3R5cGUubm9pc2U9ZnVuY3Rpb24oYSxiLGMpe2lmKGI9Ynx8MCxjPWN8fDAsbnVsbD09ZCl7ZD1uZXcgQXJyYXkoaisxKTtmb3IodmFyIGU9MDtlPGorMTtlKyspZFtlXT1NYXRoLnJhbmRvbSgpfWE8MCYmKGE9LWEpLGI8MCYmKGI9LWIpLGM8MCYmKGM9LWMpO2Zvcih2YXIgbixvLHAscSxyLHM9TWF0aC5mbG9vcihhKSx0PU1hdGguZmxvb3IoYiksdT1NYXRoLmZsb29yKGMpLHY9YS1zLHc9Yi10LHg9Yy11LHk9MCx6PS41LEE9MDtBPGs7QSsrKXt2YXIgQj1zKyh0PDxmKSsodTw8aCk7bj1tKHYpLG89bSh3KSxwPWRbQiZqXSxwKz1uKihkW0IrMSZqXS1wKSxxPWRbQitnJmpdLHErPW4qKGRbQitnKzEmal0tcSkscCs9byoocS1wKSxCKz1pLHE9ZFtCJmpdLHErPW4qKGRbQisxJmpdLXEpLHI9ZFtCK2cmal0scis9biooZFtCK2crMSZqXS1yKSxxKz1vKihyLXEpLHArPW0oeCkqKHEtcCkseSs9cCp6LHoqPWwsczw8PTEsdio9Mix0PDw9MSx3Kj0yLHU8PD0xLHgqPTIsdj49MSYmKHMrKyx2LS0pLHc+PTEmJih0Kyssdy0tKSx4Pj0xJiYodSsrLHgtLSl9cmV0dXJuIHl9LGUucHJvdG90eXBlLm5vaXNlRGV0YWlsPWZ1bmN0aW9uKGEsYil7YT4wJiYoaz1hKSxiPjAmJihsPWIpfSxlLnByb3RvdHlwZS5ub2lzZVNlZWQ9ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXt2YXIgYSxiLGM9NDI5NDk2NzI5NixkPTE2NjQ1MjUsZT0xMDEzOTA0MjIzO3JldHVybntzZXRTZWVkOmZ1bmN0aW9uKGQpe2I9YT0obnVsbD09ZD9NYXRoLnJhbmRvbSgpKmM6ZCk+Pj4wfSxnZXRTZWVkOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHJhbmQ6ZnVuY3Rpb24oKXtyZXR1cm4oYj0oZCpiK2UpJWMpL2N9fX0oKTtiLnNldFNlZWQoYSksZD1uZXcgQXJyYXkoaisxKTtmb3IodmFyIGM9MDtjPGorMTtjKyspZFtjXT1iLnJhbmQoKX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QuVmVjdG9yPWZ1bmN0aW9uKCl7dmFyIGEsYixjO2FyZ3VtZW50c1swXWluc3RhbmNlb2YgZD8odGhpcy5wNT1hcmd1bWVudHNbMF0sYT1hcmd1bWVudHNbMV1bMF18fDAsYj1hcmd1bWVudHNbMV1bMV18fDAsYz1hcmd1bWVudHNbMV1bMl18fDApOihhPWFyZ3VtZW50c1swXXx8MCxiPWFyZ3VtZW50c1sxXXx8MCxjPWFyZ3VtZW50c1syXXx8MCksdGhpcy54PWEsdGhpcy55PWIsdGhpcy56PWN9LGQuVmVjdG9yLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwicDUuVmVjdG9yIE9iamVjdCA6IFtcIit0aGlzLngrXCIsIFwiK3RoaXMueStcIiwgXCIrdGhpcy56K1wiXVwifSxkLlZlY3Rvci5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyh0aGlzLng9YS54fHwwLHRoaXMueT1hLnl8fDAsdGhpcy56PWEuenx8MCx0aGlzKTphIGluc3RhbmNlb2YgQXJyYXk/KHRoaXMueD1hWzBdfHwwLHRoaXMueT1hWzFdfHwwLHRoaXMuej1hWzJdfHwwLHRoaXMpOih0aGlzLng9YXx8MCx0aGlzLnk9Ynx8MCx0aGlzLno9Y3x8MCx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wNT9uZXcgZC5WZWN0b3IodGhpcy5wNSxbdGhpcy54LHRoaXMueSx0aGlzLnpdKTpuZXcgZC5WZWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfSxkLlZlY3Rvci5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyh0aGlzLngrPWEueHx8MCx0aGlzLnkrPWEueXx8MCx0aGlzLnorPWEuenx8MCx0aGlzKTphIGluc3RhbmNlb2YgQXJyYXk/KHRoaXMueCs9YVswXXx8MCx0aGlzLnkrPWFbMV18fDAsdGhpcy56Kz1hWzJdfHwwLHRoaXMpOih0aGlzLngrPWF8fDAsdGhpcy55Kz1ifHwwLHRoaXMueis9Y3x8MCx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj8odGhpcy54LT1hLnh8fDAsdGhpcy55LT1hLnl8fDAsdGhpcy56LT1hLnp8fDAsdGhpcyk6YSBpbnN0YW5jZW9mIEFycmF5Pyh0aGlzLngtPWFbMF18fDAsdGhpcy55LT1hWzFdfHwwLHRoaXMuei09YVsyXXx8MCx0aGlzKToodGhpcy54LT1hfHwwLHRoaXMueS09Ynx8MCx0aGlzLnotPWN8fDAsdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5tdWx0PWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhJiZpc0Zpbml0ZShhKT8odGhpcy54Kj1hLHRoaXMueSo9YSx0aGlzLnoqPWEsdGhpcyk6KGNvbnNvbGUud2FybihcInA1LlZlY3Rvci5wcm90b3R5cGUubXVsdDpcIixcIm4gaXMgdW5kZWZpbmVkIG9yIG5vdCBhIGZpbml0ZSBudW1iZXJcIiksdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGEmJmlzRmluaXRlKGEpPzA9PT1hPyhjb25zb2xlLndhcm4oXCJwNS5WZWN0b3IucHJvdG90eXBlLmRpdjpcIixcImRpdmlkZSBieSAwXCIpLHRoaXMpOih0aGlzLngvPWEsdGhpcy55Lz1hLHRoaXMuei89YSx0aGlzKTooY29uc29sZS53YXJuKFwicDUuVmVjdG9yLnByb3RvdHlwZS5kaXY6XCIsXCJuIGlzIHVuZGVmaW5lZCBvciBub3QgYSBmaW5pdGUgbnVtYmVyXCIpLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUubWFnPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLm1hZ1NxKCkpfSxkLlZlY3Rvci5wcm90b3R5cGUubWFnU3E9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLngsYj10aGlzLnksYz10aGlzLno7cmV0dXJuIGEqYStiKmIrYypjfSxkLlZlY3Rvci5wcm90b3R5cGUuZG90PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yP3RoaXMuZG90KGEueCxhLnksYS56KTp0aGlzLngqKGF8fDApK3RoaXMueSooYnx8MCkrdGhpcy56KihjfHwwKX0sZC5WZWN0b3IucHJvdG90eXBlLmNyb3NzPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueSphLnotdGhpcy56KmEueSxjPXRoaXMueiphLngtdGhpcy54KmEueixlPXRoaXMueCphLnktdGhpcy55KmEueDtyZXR1cm4gdGhpcy5wNT9uZXcgZC5WZWN0b3IodGhpcy5wNSxbYixjLGVdKTpuZXcgZC5WZWN0b3IoYixjLGUpfSxkLlZlY3Rvci5wcm90b3R5cGUuZGlzdD1mdW5jdGlvbihhKXtyZXR1cm4gYS5jb3B5KCkuc3ViKHRoaXMpLm1hZygpfSxkLlZlY3Rvci5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5tYWcoKTtyZXR1cm4gMCE9PWEmJnRoaXMubXVsdCgxL2EpLHRoaXN9LGQuVmVjdG9yLnByb3RvdHlwZS5saW1pdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm1hZ1NxKCk7cmV0dXJuIGI+YSphJiZ0aGlzLmRpdihNYXRoLnNxcnQoYikpLm11bHQoYSksdGhpc30sZC5WZWN0b3IucHJvdG90eXBlLnNldE1hZz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0KGEpfSxkLlZlY3Rvci5wcm90b3R5cGUuaGVhZGluZz1mdW5jdGlvbigpe3ZhciBhPU1hdGguYXRhbjIodGhpcy55LHRoaXMueCk7cmV0dXJuIHRoaXMucDU/dGhpcy5wNS5fZnJvbVJhZGlhbnMoYSk6YX0sZC5WZWN0b3IucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmhlYWRpbmcoKSthO3RoaXMucDUmJihiPXRoaXMucDUuX3RvUmFkaWFucyhiKSk7dmFyIGM9dGhpcy5tYWcoKTtyZXR1cm4gdGhpcy54PU1hdGguY29zKGIpKmMsdGhpcy55PU1hdGguc2luKGIpKmMsdGhpc30sZC5WZWN0b3IucHJvdG90eXBlLmFuZ2xlQmV0d2Vlbj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmRvdChhKS8odGhpcy5tYWcoKSphLm1hZygpKSxjPU1hdGguYWNvcyhNYXRoLm1pbigxLE1hdGgubWF4KC0xLGIpKSk7cmV0dXJuIHRoaXMucDU/dGhpcy5wNS5fZnJvbVJhZGlhbnMoYyk6Y30sZC5WZWN0b3IucHJvdG90eXBlLmxlcnA9ZnVuY3Rpb24oYSxiLGMsZSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj90aGlzLmxlcnAoYS54LGEueSxhLnosYik6KHRoaXMueCs9KGEtdGhpcy54KSplfHwwLHRoaXMueSs9KGItdGhpcy55KSplfHwwLHRoaXMueis9KGMtdGhpcy56KSplfHwwLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUuYXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy54fHwwLHRoaXMueXx8MCx0aGlzLnp8fDBdfSxkLlZlY3Rvci5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZSxmLGc7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj8oZT1hLnh8fDAsZj1hLnl8fDAsZz1hLnp8fDApOmEgaW5zdGFuY2VvZiBBcnJheT8oZT1hWzBdfHwwLGY9YVsxXXx8MCxnPWFbMl18fDApOihlPWF8fDAsZj1ifHwwLGc9Y3x8MCksdGhpcy54PT09ZSYmdGhpcy55PT09ZiYmdGhpcy56PT09Z30sZC5WZWN0b3IuZnJvbUFuZ2xlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMD09PWImJihiPTEpLG5ldyBkLlZlY3RvcihiKk1hdGguY29zKGEpLGIqTWF0aC5zaW4oYSksMCl9LGQuVmVjdG9yLmZyb21BbmdsZXM9ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWMmJihjPTEpO3ZhciBlPU1hdGguY29zKGIpLGY9TWF0aC5zaW4oYiksZz1NYXRoLmNvcyhhKSxoPU1hdGguc2luKGEpO3JldHVybiBuZXcgZC5WZWN0b3IoYypoKmYsLWMqZyxjKmgqZSl9LGQuVmVjdG9yLnJhbmRvbTJEPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbUFuZ2xlKE1hdGgucmFuZG9tKCkqZS5UV09fUEkpfSxkLlZlY3Rvci5yYW5kb20zRD1mdW5jdGlvbigpe3ZhciBhPU1hdGgucmFuZG9tKCkqZS5UV09fUEksYj0yKk1hdGgucmFuZG9tKCktMSxjPU1hdGguc3FydCgxLWIqYiksZj1jKk1hdGguY29zKGEpLGc9YypNYXRoLnNpbihhKTtyZXR1cm4gbmV3IGQuVmVjdG9yKGYsZyxiKX0sZC5WZWN0b3IuYWRkPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz9jLnNldChhKTpjPWEuY29weSgpLGMuYWRkKGIpLGN9LGQuVmVjdG9yLnN1Yj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/Yy5zZXQoYSk6Yz1hLmNvcHkoKSxjLnN1YihiKSxjfSxkLlZlY3Rvci5tdWx0PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz9jLnNldChhKTpjPWEuY29weSgpLGMubXVsdChiKSxjfSxkLlZlY3Rvci5kaXY9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP2Muc2V0KGEpOmM9YS5jb3B5KCksYy5kaXYoYiksY30sZC5WZWN0b3IuZG90PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZG90KGIpfSxkLlZlY3Rvci5jcm9zcz1mdW5jdGlvbihhLGIpe3JldHVybiBhLmNyb3NzKGIpfSxkLlZlY3Rvci5kaXN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZGlzdChiKX0sZC5WZWN0b3IubGVycD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gZD9kLnNldChhKTpkPWEuY29weSgpLGQubGVycChiLGMpLGR9LGQuVmVjdG9yLm1hZz1mdW5jdGlvbihhKXt2YXIgYj1hLngsYz1hLnksZD1hLnosZT1iKmIrYypjK2QqZDtyZXR1cm4gTWF0aC5zcXJ0KGUpfSxiLmV4cG9ydHM9ZC5WZWN0b3J9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDU1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPSExLGY9ITEsZz0wLGg9ZnVuY3Rpb24oKXt2YXIgYSxiLGM9NDI5NDk2NzI5NixkPTE2NjQ1MjUsZT0xMDEzOTA0MjIzO3JldHVybntzZXRTZWVkOmZ1bmN0aW9uKGQpe2I9YT0obnVsbD09ZD9NYXRoLnJhbmRvbSgpKmM6ZCk+Pj4wfSxnZXRTZWVkOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHJhbmQ6ZnVuY3Rpb24oKXtyZXR1cm4oYj0oZCpiK2UpJWMpL2N9fX0oKTtkLnByb3RvdHlwZS5yYW5kb21TZWVkPWZ1bmN0aW9uKGEpe2guc2V0U2VlZChhKSxlPSEwLGY9ITF9LGQucHJvdG90eXBlLnJhbmRvbT1mdW5jdGlvbihhLGIpe3ZhciBjO2lmKGM9ZT9oLnJhbmQoKTpNYXRoLnJhbmRvbSgpLHZvaWQgMD09PWEpcmV0dXJuIGM7aWYodm9pZCAwPT09YilyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2FbTWF0aC5mbG9vcihjKmEubGVuZ3RoKV06YyphO2lmKGE+Yil7dmFyIGQ9YTthPWIsYj1kfXJldHVybiBjKihiLWEpK2F9LGQucHJvdG90eXBlLnJhbmRvbUdhdXNzaWFuPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGg7aWYoZiljPWcsZj0hMTtlbHNle2Rve2Q9dGhpcy5yYW5kb20oMiktMSxlPXRoaXMucmFuZG9tKDIpLTEsaD1kKmQrZSplfXdoaWxlKGg+PTEpO2g9TWF0aC5zcXJ0KC0yKk1hdGgubG9nKGgpL2gpLGM9ZCpoLGc9ZSpoLGY9ITB9dmFyIGk9YXx8MDtyZXR1cm4gYyooYnx8MSkraX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QucHJvdG90eXBlLl9hbmdsZU1vZGU9ZS5SQURJQU5TLGQucHJvdG90eXBlLmFjb3M9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYWNvcyhhKSl9LGQucHJvdG90eXBlLmFzaW49ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYXNpbihhKSl9LGQucHJvdG90eXBlLmF0YW49ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYXRhbihhKSl9LGQucHJvdG90eXBlLmF0YW4yPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYXRhbjIoYSxiKSl9LGQucHJvdG90eXBlLmNvcz1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5jb3ModGhpcy5fdG9SYWRpYW5zKGEpKX0sZC5wcm90b3R5cGUuc2luPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnNpbih0aGlzLl90b1JhZGlhbnMoYSkpfSxkLnByb3RvdHlwZS50YW49ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgudGFuKHRoaXMuX3RvUmFkaWFucyhhKSl9LGQucHJvdG90eXBlLmRlZ3JlZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEqZS5SQURfVE9fREVHfSxkLnByb3RvdHlwZS5yYWRpYW5zPWZ1bmN0aW9uKGEpe3JldHVybiBhKmUuREVHX1RPX1JBRH0sZC5wcm90b3R5cGUuYW5nbGVNb2RlPWZ1bmN0aW9uKGEpe2EhPT1lLkRFR1JFRVMmJmEhPT1lLlJBRElBTlN8fCh0aGlzLl9hbmdsZU1vZGU9YSl9LGQucHJvdG90eXBlLl90b1JhZGlhbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2FuZ2xlTW9kZT09PWUuREVHUkVFUz9hKmUuREVHX1RPX1JBRDphfSxkLnByb3RvdHlwZS5fdG9EZWdyZWVzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hbmdsZU1vZGU9PT1lLlJBRElBTlM/YSplLlJBRF9UT19ERUc6YX0sZC5wcm90b3R5cGUuX2Zyb21SYWRpYW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hbmdsZU1vZGU9PT1lLkRFR1JFRVM/YSplLlJBRF9UT19ERUc6YX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDU3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS50ZXh0QWxpZ249ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dEFsaWduXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0QWxpZ24uYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dExlYWRpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRMZWFkaW5nXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0TGVhZGluZy5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0U2l6ZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dFNpemVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRTaXplLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRTdHlsZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dFN0eWxlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0U3R5bGUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dFdpZHRoPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0V2lkdGhcIixhcmd1bWVudHMpLDA9PT1hLmxlbmd0aD8wOnRoaXMuX3JlbmRlcmVyLnRleHRXaWR0aC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0QXNjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRBc2NlbnRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRBc2NlbnQoKX0sZC5wcm90b3R5cGUudGV4dERlc2NlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dERlc2NlbnRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHREZXNjZW50KCl9LGQucHJvdG90eXBlLl91cGRhdGVUZXh0TWV0cmljcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fdXBkYXRlVGV4dE1ldHJpY3MoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpLGY9YShcIm9wZW50eXBlLmpzXCIpO2EoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUubG9hZEZvbnQ9ZnVuY3Rpb24oYSxiLGMpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRGb250XCIsYXJndW1lbnRzKTt2YXIgZT1uZXcgZC5Gb250KHRoaXMpLGc9dGhpcztyZXR1cm4gZi5sb2FkKGEsZnVuY3Rpb24oZixoKXtpZihmKXJldHVybiB2b2lkIDAhPT1jP2MoZik6KGQuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig0LGEpLHZvaWQgY29uc29sZS5lcnJvcihmLGEpKTtlLmZvbnQ9aCx2b2lkIDAhPT1iJiZiKGUpLGcuX2RlY3JlbWVudFByZWxvYWQoKTt2YXIgaSxqLGs9W1widHRmXCIsXCJvdGZcIixcIndvZmZcIixcIndvZmYyXCJdLGw9YS5zcGxpdChcIlxcXFxcIikucG9wKCkuc3BsaXQoXCIvXCIpLnBvcCgpLG09bC5sYXN0SW5kZXhPZihcIi5cIiksbj1tPDE/bnVsbDpsLnN1YnN0cihtKzEpO2suaW5kZXhPZihuKT4tMSYmKGk9bC5zdWJzdHIoMCxtKSxqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSxqLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXFxuQGZvbnQtZmFjZSB7XFxuZm9udC1mYW1pbHk6IFwiK2krXCI7XFxuc3JjOiB1cmwoXCIrYStcIik7XFxufVxcblwiKSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChqKSl9KSxlfSxkLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGEsYixjLGUsZil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGx8fHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZT90aGlzLl9yZW5kZXJlci50ZXh0LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk6dGhpc30sZC5wcm90b3R5cGUudGV4dEZvbnQ9ZnVuY3Rpb24oYSxiKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0Rm9udFwiLGFyZ3VtZW50cyksYXJndW1lbnRzLmxlbmd0aCl7aWYoIWEpdGhyb3cgbmV3IEVycm9yKFwibnVsbCBmb250IHBhc3NlZCB0byB0ZXh0Rm9udFwiKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX3RleHRGb250XCIsYSksYiYmKHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl90ZXh0U2l6ZVwiLGIpLHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl90ZXh0TGVhZGluZ1wiLGIqZS5fREVGQVVMVF9MRUFETVVMVCkpLHRoaXMuX3JlbmRlcmVyLl9hcHBseVRleHRQcm9wZXJ0aWVzKCl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl90ZXh0Rm9udH0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0LFwib3BlbnR5cGUuanNcIjoxMH1dLDU5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgYz1oKGIse3NhbXBsZUZhY3RvcjouMSxzaW1wbGlmeVRocmVzaG9sZDowfSksZD1uKGEsMCwxKSxmPWQvKGQqYy5zYW1wbGVGYWN0b3IpLGc9W10saT0wO2k8ZDtpKz1mKWcucHVzaChuKGEsaSkpO3JldHVybiBjLnNpbXBsaWZ5VGhyZXNob2xkJiZlKGcsYy5zaW1wbGlmeVRocmVzaG9sZCksZ31mdW5jdGlvbiBlKGEsYil7Yj12b2lkIDA9PT1iPzA6Yjtmb3IodmFyIGM9MCxkPWEubGVuZ3RoLTE7YS5sZW5ndGg+MyYmZD49MDstLWQpaihpKGEsZC0xKSxpKGEsZCksaShhLGQrMSksYikmJihhLnNwbGljZShkJWEubGVuZ3RoLDEpLGMrKyk7cmV0dXJuIGN9ZnVuY3Rpb24gZihhKXtmb3IodmFyIGIsYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKyspXCJNXCI9PT1hW2RdLnR5cGUmJihiJiZjLnB1c2goYiksYj1bXSksYi5wdXNoKGcoYVtkXSkpO3JldHVybiBjLnB1c2goYiksY31mdW5jdGlvbiBnKGEpe3ZhciBiPVthLnR5cGVdO3JldHVyblwiTVwiPT09YS50eXBlfHxcIkxcIj09PWEudHlwZT9iLnB1c2goYS54LGEueSk6XCJDXCI9PT1hLnR5cGU/Yi5wdXNoKGEueDEsYS55MSxhLngyLGEueTIsYS54LGEueSk6XCJRXCI9PT1hLnR5cGUmJmIucHVzaChhLngxLGEueTEsYS54LGEueSksYn1mdW5jdGlvbiBoKGEsYil7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGEpYT1iO2Vsc2UgZm9yKHZhciBjIGluIGIpdm9pZCAwPT09YVtjXSYmKGFbY109YltjXSk7cmV0dXJuIGF9ZnVuY3Rpb24gaShhLGIpe3ZhciBjPWEubGVuZ3RoO3JldHVybiBhW2I8MD9iJWMrYzpiJWNdfWZ1bmN0aW9uIGooYSxiLGMsZCl7aWYoIWQpcmV0dXJuIDA9PT1rKGEsYixjKTt2b2lkIDA9PT1qLnRtcFBvaW50MSYmKGoudG1wUG9pbnQxPVtdLGoudG1wUG9pbnQyPVtdKTt2YXIgZT1qLnRtcFBvaW50MSxmPWoudG1wUG9pbnQyO2UueD1iLngtYS54LGUueT1iLnktYS55LGYueD1jLngtYi54LGYueT1jLnktYi55O3ZhciBnPWUueCpmLngrZS55KmYueSxoPU1hdGguc3FydChlLngqZS54K2UueSplLnkpLGk9TWF0aC5zcXJ0KGYueCpmLngrZi55KmYueSk7cmV0dXJuIE1hdGguYWNvcyhnLyhoKmkpKTxkfWZ1bmN0aW9uIGsoYSxiLGMpe3JldHVybihiWzBdLWFbMF0pKihjWzFdLWFbMV0pLShjWzBdLWFbMF0pKihiWzFdLWFbMV0pfWZ1bmN0aW9uIGwoYSxiLGMsZCxlLGYsZyxoLGkpe3ZhciBqPTEtaSxrPU1hdGgucG93KGosMyksbD1NYXRoLnBvdyhqLDIpLG09aSppLG49bSppLG89ayphKzMqbCppKmMrMypqKmkqaSplK24qZyxwPWsqYiszKmwqaSpkKzMqaippKmkqZituKmgscT1hKzIqaSooYy1hKSttKihlLTIqYythKSxyPWIrMippKihkLWIpK20qKGYtMipkK2IpLHM9YysyKmkqKGUtYykrbSooZy0yKmUrYyksdD1kKzIqaSooZi1kKSttKihoLTIqZitkKSx1PWoqYStpKmMsdj1qKmIraSpkLHc9aiplK2kqZyx4PWoqZitpKmgseT05MC0xODAqTWF0aC5hdGFuMihxLXMsci10KS9NYXRoLlBJO3JldHVybihxPnN8fHI8dCkmJih5Kz0xODApLHt4Om8seTpwLG06e3g6cSx5OnJ9LG46e3g6cyx5OnR9LHN0YXJ0Ont4OnUseTp2fSxlbmQ6e3g6dyx5Onh9LGFscGhhOnl9fWZ1bmN0aW9uIG0oYSxiLGMsZCxlLGYsZyxoLGkpe3JldHVybiBudWxsPT1pP3UoYSxiLGMsZCxlLGYsZyxoKTpsKGEsYixjLGQsZSxmLGcsaCx2KGEsYixjLGQsZSxmLGcsaCxpKSl9ZnVuY3Rpb24gbihhLGIsYyl7YT1wKGEpO2Zvcih2YXIgZCxlLGYsZyxoLGk9XCJcIixqPXt9LGs9MCxuPTAsbz1hLmxlbmd0aDtuPG87bisrKXtpZihmPWFbbl0sXCJNXCI9PT1mWzBdKWQ9K2ZbMV0sZT0rZlsyXTtlbHNle2lmKGc9bShkLGUsZlsxXSxmWzJdLGZbM10sZls0XSxmWzVdLGZbNl0pLGsrZz5iJiYhYylyZXR1cm4gaD1tKGQsZSxmWzFdLGZbMl0sZlszXSxmWzRdLGZbNV0sZls2XSxiLWspLHt4OmgueCx5OmgueSxhbHBoYTpoLmFscGhhfTtrKz1nLGQ9K2ZbNV0sZT0rZls2XX1pKz1mLnNoaWZ0KCkrZn1yZXR1cm4gai5lbmQ9aSxoPWM/azpsKGQsZSxmWzBdLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSwxKSxoLmFscGhhJiYoaD17eDpoLngseTpoLnksYWxwaGE6aC5hbHBoYX0pLGh9ZnVuY3Rpb24gbyhhKXt2YXIgYj1bXSxjPTAsZD0wLGU9MCxmPTAsZz0wO2lmKCFhKXJldHVybiBiO1wiTVwiPT09YVswXVswXSYmKGM9K2FbMF1bMV0sZD0rYVswXVsyXSxlPWMsZj1kLGcrKyxiWzBdPVtcIk1cIixjLGRdKTtmb3IodmFyIGgsaSxqLGs9Mz09PWEubGVuZ3RoJiZcIk1cIj09PWFbMF1bMF0mJlwiUlwiPT09YVsxXVswXS50b1VwcGVyQ2FzZSgpJiZcIlpcIj09PWFbMl1bMF0udG9VcHBlckNhc2UoKSxsPWcsbT1hLmxlbmd0aDtsPG07bCsrKXtpZihiLnB1c2goaT1bXSksaj1hW2xdLGpbMF0hPT1TdHJpbmcucHJvdG90eXBlLnRvVXBwZXJDYXNlLmNhbGwoalswXSkpc3dpdGNoKGlbMF09U3RyaW5nLnByb3RvdHlwZS50b1VwcGVyQ2FzZS5jYWxsKGpbMF0pLGlbMF0pe2Nhc2VcIkFcIjppWzFdPWpbMV0saVsyXT1qWzJdLGlbM109alszXSxpWzRdPWpbNF0saVs1XT1qWzVdLGlbNl09KyhqWzZdK2MpLGlbN109KyhqWzddK2QpO2JyZWFrO2Nhc2VcIlZcIjppWzFdPStqWzFdK2Q7YnJlYWs7Y2FzZVwiSFwiOmlbMV09K2pbMV0rYzticmVhaztjYXNlXCJSXCI6aD1bYyxkXS5jb25jYXQoai5zbGljZSgxKSk7Zm9yKHZhciBuPTIsbz1oLmxlbmd0aDtuPG87bisrKWhbbl09K2hbbl0rYyxoWysrbl09K2hbbl0rZDtiLnBvcCgpLGI9Yi5jb25jYXQocihoLGspKTticmVhaztjYXNlXCJNXCI6ZT0ralsxXStjLGY9K2pbMl0rZDticmVhaztkZWZhdWx0OmZvcihuPTEsbz1qLmxlbmd0aDtuPG87bisrKWlbbl09K2pbbl0rKG4lMj9jOmQpfWVsc2UgaWYoXCJSXCI9PT1qWzBdKWg9W2MsZF0uY29uY2F0KGouc2xpY2UoMSkpLGIucG9wKCksYj1iLmNvbmNhdChyKGgsaykpLGk9W1wiUlwiXS5jb25jYXQoai5zbGljZSgtMikpO2Vsc2UgZm9yKHZhciBwPTAscT1qLmxlbmd0aDtwPHE7cCsrKWlbcF09altwXTtzd2l0Y2goaVswXSl7Y2FzZVwiWlwiOmM9ZSxkPWY7YnJlYWs7Y2FzZVwiSFwiOmM9aVsxXTticmVhaztjYXNlXCJWXCI6ZD1pWzFdO2JyZWFrO2Nhc2VcIk1cIjplPWlbaS5sZW5ndGgtMl0sZj1pW2kubGVuZ3RoLTFdO2JyZWFrO2RlZmF1bHQ6Yz1pW2kubGVuZ3RoLTJdLGQ9aVtpLmxlbmd0aC0xXX19cmV0dXJuIGJ9ZnVuY3Rpb24gcChhLGIpe3ZhciBjLGQ9byhhKSxlPWImJm8oYiksZj17eDowLHk6MCxieDowLGJ5OjAsWDowLFk6MCxxeDpudWxsLHF5Om51bGx9LGc9e3g6MCx5OjAsYng6MCxieTowLFg6MCxZOjAscXg6bnVsbCxxeTpudWxsfSxoPVtdLGk9W10saj1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXtUOjEsUToxfTtpZighYSlyZXR1cm5bXCJDXCIsYi54LGIueSxiLngsYi55LGIueCxiLnldO3N3aXRjaChhWzBdaW4gZnx8KGIucXg9Yi5xeT1udWxsKSxhWzBdKXtjYXNlXCJNXCI6Yi5YPWFbMV0sYi5ZPWFbMl07YnJlYWs7Y2FzZVwiQVwiOmE9W1wiQ1wiXS5jb25jYXQocS5hcHBseSgwLFtiLngsYi55XS5jb25jYXQoYS5zbGljZSgxKSkpKTticmVhaztjYXNlXCJTXCI6XCJDXCI9PT1jfHxcIlNcIj09PWM/KGQ9MipiLngtYi5ieCxlPTIqYi55LWIuYnkpOihkPWIueCxlPWIueSksYT1bXCJDXCIsZCxlXS5jb25jYXQoYS5zbGljZSgxKSk7YnJlYWs7Y2FzZVwiVFwiOlwiUVwiPT09Y3x8XCJUXCI9PT1jPyhiLnF4PTIqYi54LWIucXgsYi5xeT0yKmIueS1iLnF5KTooYi5xeD1iLngsYi5xeT1iLnkpLGE9W1wiQ1wiXS5jb25jYXQodChiLngsYi55LGIucXgsYi5xeSxhWzFdLGFbMl0pKTticmVhaztjYXNlXCJRXCI6Yi5xeD1hWzFdLGIucXk9YVsyXSxhPVtcIkNcIl0uY29uY2F0KHQoYi54LGIueSxhWzFdLGFbMl0sYVszXSxhWzRdKSk7YnJlYWs7Y2FzZVwiTFwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGFbMV0sYVsyXSkpO2JyZWFrO2Nhc2VcIkhcIjphPVtcIkNcIl0uY29uY2F0KHMoYi54LGIueSxhWzFdLGIueSkpO2JyZWFrO2Nhc2VcIlZcIjphPVtcIkNcIl0uY29uY2F0KHMoYi54LGIueSxiLngsYVsxXSkpO2JyZWFrO2Nhc2VcIlpcIjphPVtcIkNcIl0uY29uY2F0KHMoYi54LGIueSxiLlgsYi5ZKSl9cmV0dXJuIGF9LGs9ZnVuY3Rpb24oYSxiKXtpZihhW2JdLmxlbmd0aD43KXthW2JdLnNoaWZ0KCk7Zm9yKHZhciBmPWFbYl07Zi5sZW5ndGg7KWhbYl09XCJBXCIsZSYmKGlbYl09XCJBXCIpLGEuc3BsaWNlKGIrKywwLFtcIkNcIl0uY29uY2F0KGYuc3BsaWNlKDAsNikpKTthLnNwbGljZShiLDEpLGM9TWF0aC5tYXgoZC5sZW5ndGgsZSYmZS5sZW5ndGh8fDApfX0sbD1mdW5jdGlvbihhLGIsZixnLGgpe2EmJmImJlwiTVwiPT09YVtoXVswXSYmXCJNXCIhPT1iW2hdWzBdJiYoYi5zcGxpY2UoaCwwLFtcIk1cIixnLngsZy55XSksZi5ieD0wLGYuYnk9MCxmLng9YVtoXVsxXSxmLnk9YVtoXVsyXSxjPU1hdGgubWF4KGQubGVuZ3RoLGUmJmUubGVuZ3RofHwwKSl9LG09XCJcIixuPVwiXCI7Yz1NYXRoLm1heChkLmxlbmd0aCxlJiZlLmxlbmd0aHx8MCk7Zm9yKHZhciBwPTA7cDxjO3ArKyl7ZFtwXSYmKG09ZFtwXVswXSksXCJDXCIhPT1tJiYoaFtwXT1tLHAmJihuPWhbcC0xXSkpLGRbcF09aihkW3BdLGYsbiksXCJBXCIhPT1oW3BdJiZcIkNcIj09PW0mJihoW3BdPVwiQ1wiKSxrKGQscCksZSYmKGVbcF0mJihtPWVbcF1bMF0pLFwiQ1wiIT09bSYmKGlbcF09bSxwJiYobj1pW3AtMV0pKSxlW3BdPWooZVtwXSxnLG4pLFwiQVwiIT09aVtwXSYmXCJDXCI9PT1tJiYoaVtwXT1cIkNcIiksayhlLHApKSxsKGQsZSxmLGcscCksbChlLGQsZyxmLHApO3ZhciByPWRbcF0sdT1lJiZlW3BdLHY9ci5sZW5ndGgsdz1lJiZ1Lmxlbmd0aDtmLng9clt2LTJdLGYueT1yW3YtMV0sZi5ieD1wYXJzZUZsb2F0KHJbdi00XSl8fGYueCxmLmJ5PXBhcnNlRmxvYXQoclt2LTNdKXx8Zi55LGcuYng9ZSYmKHBhcnNlRmxvYXQodVt3LTRdKXx8Zy54KSxnLmJ5PWUmJihwYXJzZUZsb2F0KHVbdy0zXSl8fGcueSksZy54PWUmJnVbdy0yXSxnLnk9ZSYmdVt3LTFdfXJldHVybiBlP1tkLGVdOmR9ZnVuY3Rpb24gcShhLGIsYyxkLGUsZixnLGgsaSxqKXt2YXIgayxsLG0sbixvLHA9TWF0aC5QSSxyPTEyMCpwLzE4MCxzPXAvMTgwKigrZXx8MCksdD1bXSx1PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm57eDphKk1hdGguY29zKGMpLWIqTWF0aC5zaW4oYykseTphKk1hdGguc2luKGMpK2IqTWF0aC5jb3MoYyl9fTtpZihqKWs9alswXSxsPWpbMV0sbT1qWzJdLG49alszXTtlbHNle289dShhLGIsLXMpLGE9by54LGI9by55LG89dShoLGksLXMpLGg9by54LGk9by55O3ZhciB2PShhLWgpLzIsdz0oYi1pKS8yLHg9dip2LyhjKmMpK3cqdy8oZCpkKTt4PjEmJih4PU1hdGguc3FydCh4KSxjKj14LGQqPXgpO3ZhciB5PWMqYyx6PWQqZCxBPShmPT09Zz8tMToxKSpNYXRoLnNxcnQoTWF0aC5hYnMoKHkqei15Kncqdy16KnYqdikvKHkqdyp3K3oqdip2KSkpO209QSpjKncvZCsoYStoKS8yLG49QSotZCp2L2MrKGIraSkvMixrPU1hdGguYXNpbigoKGItbikvZCkudG9GaXhlZCg5KSksbD1NYXRoLmFzaW4oKChpLW4pL2QpLnRvRml4ZWQoOSkpLGs9YTxtP3AtazprLGw9aDxtP3AtbDpsLGs8MCYmKGs9MipwK2spLGw8MCYmKGw9MipwK2wpLGcmJms+bCYmKGstPTIqcCksIWcmJmw+ayYmKGwtPTIqcCl9dmFyIEI9bC1rO2lmKE1hdGguYWJzKEIpPnIpe3ZhciBDPWwsRD1oLEU9aTtsPWsrciooZyYmbD5rPzE6LTEpLGg9bStjKk1hdGguY29zKGwpLGk9bitkKk1hdGguc2luKGwpLHQ9cShoLGksYyxkLGUsMCxnLEQsRSxbbCxDLG0sbl0pfUI9bC1rO3ZhciBGPU1hdGguY29zKGspLEc9TWF0aC5zaW4oayksSD1NYXRoLmNvcyhsKSxJPU1hdGguc2luKGwpLEo9TWF0aC50YW4oQi80KSxLPTQvMypjKkosTD00LzMqZCpKLE09W2EsYl0sTj1bYStLKkcsYi1MKkZdLE89W2grSypJLGktTCpIXSxQPVtoLGldO2lmKE5bMF09MipNWzBdLU5bMF0sTlsxXT0yKk1bMV0tTlsxXSxqKXJldHVybltOLE8sUF0uY29uY2F0KHQpO3Q9W04sTyxQXS5jb25jYXQodCkuam9pbigpLnNwbGl0KFwiLFwiKTtmb3IodmFyIFE9W10sUj0wLFM9dC5sZW5ndGg7UjxTO1IrKylRW1JdPVIlMj91KHRbUi0xXSx0W1JdLHMpLnk6dSh0W1JdLHRbUisxXSxzKS54O3JldHVybiBRfWZ1bmN0aW9uIHIoYSxiKXtmb3IodmFyIGM9W10sZD0wLGU9YS5sZW5ndGg7ZS0yKiFiPmQ7ZCs9Mil7dmFyIGY9W3t4OithW2QtMl0seTorYVtkLTFdfSx7eDorYVtkXSx5OithW2QrMV19LHt4OithW2QrMl0seTorYVtkKzNdfSx7eDorYVtkKzRdLHk6K2FbZCs1XX1dO2I/ZD9lLTQ9PT1kP2ZbM109e3g6K2FbMF0seTorYVsxXX06ZS0yPT09ZCYmKGZbMl09e3g6K2FbMF0seTorYVsxXX0sZlszXT17eDorYVsyXSx5OithWzNdfSk6ZlswXT17eDorYVtlLTJdLHk6K2FbZS0xXX06ZS00PT09ZD9mWzNdPWZbMl06ZHx8KGZbMF09e3g6K2FbZF0seTorYVtkKzFdfSksYy5wdXNoKFtcIkNcIiwoLWZbMF0ueCs2KmZbMV0ueCtmWzJdLngpLzYsKC1mWzBdLnkrNipmWzFdLnkrZlsyXS55KS82LChmWzFdLngrNipmWzJdLngtZlszXS54KS82LChmWzFdLnkrNipmWzJdLnktZlszXS55KS82LGZbMl0ueCxmWzJdLnldKX1yZXR1cm4gY31mdW5jdGlvbiBzKGEsYixjLGQpe3JldHVyblthLGIsYyxkLGMsZF19ZnVuY3Rpb24gdChhLGIsYyxkLGUsZil7dmFyIGc9MS8zLGg9Mi8zO3JldHVybltnKmEraCpjLGcqYitoKmQsZyplK2gqYyxnKmYraCpkLGUsZl19ZnVuY3Rpb24gdShhLGIsYyxkLGUsZixnLGgsaSl7bnVsbD09aSYmKGk9MSksaT1pPjE/MTppPDA/MDppO2Zvcih2YXIgaj1pLzIsaz0xMixsPVstLjEyNTIsLjEyNTIsLS4zNjc4LC4zNjc4LC0uNTg3MywuNTg3MywtLjc2OTksLjc2OTksLS45MDQxLC45MDQxLC0uOTgxNiwuOTgxNl0sbT0wLG49Wy4yNDkxLC4yNDkxLC4yMzM1LC4yMzM1LC4yMDMyLC4yMDMyLC4xNjAxLC4xNjAxLC4xMDY5LC4xMDY5LC4wNDcyLC4wNDcyXSxvPTA7bzxrO28rKyl7dmFyIHA9aipsW29dK2oscT13KHAsYSxjLGUsZykscj13KHAsYixkLGYsaCkscz1xKnErcipyO20rPW5bb10qTWF0aC5zcXJ0KHMpfXJldHVybiBqKm19ZnVuY3Rpb24gdihhLGIsYyxkLGUsZixnLGgsaSl7aWYoIShpPDB8fHUoYSxiLGMsZCxlLGYsZyxoKTxpKSl7dmFyIGosaz0xLGw9ay8yLG09ay1sLG49LjAxO2ZvcihqPXUoYSxiLGMsZCxlLGYsZyxoLG0pO01hdGguYWJzKGotaSk+bjspbC89MixtKz0oajxpPzE6LTEpKmwsaj11KGEsYixjLGQsZSxmLGcsaCxtKTtyZXR1cm4gbX19ZnVuY3Rpb24gdyhhLGIsYyxkLGUpe3JldHVybiBhKihhKigtMypiKzkqYy05KmQrMyplKSs2KmItMTIqYys2KmQpLTMqYiszKmN9ZnVuY3Rpb24geCgpe2Zvcih2YXIgYT1cIlwiLGI9YXJndW1lbnRzLmxlbmd0aC0xO2I+PTA7LS1iKXt2YXIgYz1hcmd1bWVudHNbYl07YSs9Yz09PU9iamVjdChjKT9KU09OLnN0cmluZ2lmeShjKTpjfXJldHVybiBhfXZhciB5PWEoXCIuLi9jb3JlL21haW5cIiksej1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7eS5Gb250PWZ1bmN0aW9uKGEpe3RoaXMucGFyZW50PWEsdGhpcy5jYWNoZT17fSx0aGlzLmZvbnQ9dm9pZCAwfSx5LkZvbnQucHJvdG90eXBlLmxpc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJub3QgeWV0IGltcGxlbWVudGVkXCIpfSx5LkZvbnQucHJvdG90eXBlLnRleHRCb3VuZHM9ZnVuY3Rpb24oYSxiLGMsZCxlKXtiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD1kfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIuX3RleHRTaXplO3ZhciBmPWUmJmUucmVuZGVyZXImJmUucmVuZGVyZXIuX3BJbnN0fHx0aGlzLnBhcmVudCxnPWYuX3JlbmRlcmVyLGg9Zy5fdGV4dEFsaWdufHx6LkxFRlQsaT1nLl90ZXh0QmFzZWxpbmV8fHouQkFTRUxJTkUsaj14KFwidGV4dEJvdW5kc1wiLGEsYixjLGQsaCxpKSxrPXRoaXMuY2FjaGVbal07aWYoIWspe3ZhciBsLG0sbixvLHAscT1bXSxyPVtdLHM9dGhpcy5fc2NhbGUoZCk7dGhpcy5mb250LmZvckVhY2hHbHlwaChhLGIsYyxkLGUsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YS5nZXRNZXRyaWNzKCk7cS5wdXNoKGIrZS54TWluKnMpLHEucHVzaChiK2UueE1heCpzKSxyLnB1c2goYystZS55TWluKnMpLHIucHVzaChjKy1lLnlNYXgqcyl9KSxsPU1hdGgubWluLmFwcGx5KG51bGwscSksbT1NYXRoLm1pbi5hcHBseShudWxsLHIpLG49TWF0aC5tYXguYXBwbHkobnVsbCxxKSxvPU1hdGgubWF4LmFwcGx5KG51bGwsciksaz17eDpsLHk6bSxoOm8tbSx3Om4tbCxhZHZhbmNlOmwtYn0scD10aGlzLl9oYW5kbGVBbGlnbm1lbnQoZyxhLGsueCxrLnksay53K2suYWR2YW5jZSksay54PXAueCxrLnk9cC55LHRoaXMuY2FjaGVbeChcInRleHRCb3VuZHNcIixhLGIsYyxkLGgsaSldPWt9cmV0dXJuIGt9LHkuRm9udC5wcm90b3R5cGUudGV4dFRvUG9pbnRzPWZ1bmN0aW9uKGEsYixjLGUsZyl7ZnVuY3Rpb24gaChiKXtyZXR1cm4ga1tiXS5uYW1lJiZcInNwYWNlXCI9PT1rW2JdLm5hbWV8fGEubGVuZ3RoPT09ay5sZW5ndGgmJlwiIFwiPT09YVtiXXx8a1tiXS5pbmRleCYmMz09PWtbYl0uaW5kZXh9dmFyIGk9MCxqPVtdLGs9dGhpcy5fZ2V0R2x5cGhzKGEpO2U9ZXx8dGhpcy5wYXJlbnQuX3JlbmRlcmVyLl90ZXh0U2l6ZTtmb3IodmFyIGw9MDtsPGsubGVuZ3RoO2wrKyl7aWYoIWgobCkpZm9yKHZhciBtPWtbbF0uZ2V0UGF0aChiLGMsZSksbj1mKG0uY29tbWFuZHMpLG89MDtvPG4ubGVuZ3RoO28rKylmb3IodmFyIHA9ZChuW29dLGcpLHE9MDtxPHAubGVuZ3RoO3ErKylwW3FdLngrPWksai5wdXNoKHBbcV0pO2krPWtbbF0uYWR2YW5jZVdpZHRoKnRoaXMuX3NjYWxlKGUpfXJldHVybiBqfSx5LkZvbnQucHJvdG90eXBlLl9nZXRHbHlwaHM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZm9udC5zdHJpbmdUb0dseXBocyhhKX0seS5Gb250LnByb3RvdHlwZS5fZ2V0UGF0aD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kJiZkLnJlbmRlcmVyJiZkLnJlbmRlcmVyLl9wSW5zdHx8dGhpcy5wYXJlbnQsZj1lLl9yZW5kZXJlcixnPXRoaXMuX2hhbmRsZUFsaWdubWVudChmLGEsYixjKTtyZXR1cm4gdGhpcy5mb250LmdldFBhdGgoYSxnLngsZy55LGYuX3RleHRTaXplLGQpfSx5LkZvbnQucHJvdG90eXBlLl9nZXRQYXRoRGF0YT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0zO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhJiZhcmd1bWVudHMubGVuZ3RoPjI/YT10aGlzLl9nZXRQYXRoKGEsYixjLGQpOlwib2JqZWN0XCI9PXR5cGVvZiBiJiYoZD1iKSxkJiZcIm51bWJlclwiPT10eXBlb2YgZC5kZWNpbWFscyYmKGU9ZC5kZWNpbWFscyksYS50b1BhdGhEYXRhKGUpfSx5LkZvbnQucHJvdG90eXBlLl9nZXRTVkc9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9MztyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYSYmYXJndW1lbnRzLmxlbmd0aD4yP2E9dGhpcy5fZ2V0UGF0aChhLGIsYyxkKTpcIm9iamVjdFwiPT10eXBlb2YgYiYmKGQ9YiksZCYmKFwibnVtYmVyXCI9PXR5cGVvZiBkLmRlY2ltYWxzJiYoZT1kLmRlY2ltYWxzKSxcIm51bWJlclwiPT10eXBlb2YgZC5zdHJva2VXaWR0aCYmKGEuc3Ryb2tlV2lkdGg9ZC5zdHJva2VXaWR0aCksdm9pZCAwIT09ZC5maWxsJiYoYS5maWxsPWQuZmlsbCksdm9pZCAwIT09ZC5zdHJva2UmJihhLnN0cm9rZT1kLnN0cm9rZSkpLGEudG9TVkcoZSl9LHkuRm9udC5wcm90b3R5cGUuX3JlbmRlclBhdGg9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZj1kJiZkLnJlbmRlcmVyfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIsZz1mLmRyYXdpbmdDb250ZXh0O2U9XCJvYmplY3RcIj09dHlwZW9mIGEmJmEuY29tbWFuZHM/YS5jb21tYW5kczp0aGlzLl9nZXRQYXRoKGEsYixjLGQpLmNvbW1hbmRzLGcuYmVnaW5QYXRoKCk7Zm9yKHZhciBoPTA7aDxlLmxlbmd0aDtoKz0xKXt2YXIgaT1lW2hdO1wiTVwiPT09aS50eXBlP2cubW92ZVRvKGkueCxpLnkpOlwiTFwiPT09aS50eXBlP2cubGluZVRvKGkueCxpLnkpOlwiQ1wiPT09aS50eXBlP2cuYmV6aWVyQ3VydmVUbyhpLngxLGkueTEsaS54MixpLnkyLGkueCxpLnkpOlwiUVwiPT09aS50eXBlP2cucXVhZHJhdGljQ3VydmVUbyhpLngxLGkueTEsaS54LGkueSk6XCJaXCI9PT1pLnR5cGUmJmcuY2xvc2VQYXRoKCl9cmV0dXJuIGYuX2RvU3Ryb2tlJiZmLl9zdHJva2VTZXQmJmcuc3Ryb2tlKCksZi5fZG9GaWxsJiYoZi5fZmlsbFNldHx8Zi5fc2V0RmlsbCh6Ll9ERUZBVUxUX1RFWFRfRklMTCksZy5maWxsKCkpLHRoaXN9LHkuRm9udC5wcm90b3R5cGUuX3RleHRXaWR0aD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmZvbnQuZ2V0QWR2YW5jZVdpZHRoKGEsYil9LHkuRm9udC5wcm90b3R5cGUuX3RleHRBc2NlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZm9udC5hc2NlbmRlcip0aGlzLl9zY2FsZShhKX0seS5Gb250LnByb3RvdHlwZS5fdGV4dERlc2NlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuLXRoaXMuZm9udC5kZXNjZW5kZXIqdGhpcy5fc2NhbGUoYSl9LHkuRm9udC5wcm90b3R5cGUuX3NjYWxlPWZ1bmN0aW9uKGEpe3JldHVybiAxL3RoaXMuZm9udC51bml0c1BlckVtKihhfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIuX3RleHRTaXplKX0seS5Gb250LnByb3RvdHlwZS5faGFuZGxlQWxpZ25tZW50PWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9YS5fdGV4dFNpemU7c3dpdGNoKHZvaWQgMD09PWUmJihlPXRoaXMuX3RleHRXaWR0aChiLGYpKSxhLl90ZXh0QWxpZ24pe2Nhc2Ugei5DRU5URVI6Yy09ZS8yO2JyZWFrO2Nhc2Ugei5SSUdIVDpjLT1lfXN3aXRjaChhLl90ZXh0QmFzZWxpbmUpe2Nhc2Ugei5UT1A6ZCs9dGhpcy5fdGV4dEFzY2VudChmKTticmVhaztjYXNlIHouQ0VOVEVSOmQrPXRoaXMuX3RleHRBc2NlbnQoZikvMjticmVhaztjYXNlIHouQk9UVE9NOmQtPXRoaXMuX3RleHREZXNjZW50KGYpfXJldHVybnt4OmMseTpkfX0sYi5leHBvcnRzPXl9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDYwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5wdXNoKGIpLGF9LGQucHJvdG90eXBlLmFycmF5Q29weT1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7dm9pZCAwIT09ZT8oZz1NYXRoLm1pbihlLGEubGVuZ3RoKSxmPWQsYT1hLnNsaWNlKGIsZytiKSk6KHZvaWQgMCE9PWM/KGc9YyxnPU1hdGgubWluKGcsYS5sZW5ndGgpKTpnPWEubGVuZ3RoLGY9MCxjPWIsYT1hLnNsaWNlKDAsZykpLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoYyxbZixnXS5jb25jYXQoYSkpfSxkLnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5jb25jYXQoYil9LGQucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmV2ZXJzZSgpfSxkLnByb3RvdHlwZS5zaG9ydGVuPWZ1bmN0aW9uKGEpe3JldHVybiBhLnBvcCgpLGF9LGQucHJvdG90eXBlLnNodWZmbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1BcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3JiZBcnJheUJ1ZmZlci5pc1ZpZXcoYSk7YT1ifHxjP2E6YS5zbGljZSgpO2Zvcih2YXIgZCxlLGY9YS5sZW5ndGg7Zj4xOylkPU1hdGgucmFuZG9tKCkqZnwwLGU9YVstLWZdLGFbZl09YVtkXSxhW2RdPWU7cmV0dXJuIGF9LGQucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iP2Euc2xpY2UoMCxNYXRoLm1pbihiLGEubGVuZ3RoKSk6YSxkPWI/YS5zbGljZShNYXRoLm1pbihiLGEubGVuZ3RoKSk6W107cmV0dXJuIGM9XCJzdHJpbmdcIj09dHlwZW9mIGNbMF0/Yy5zb3J0KCk6Yy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEtYn0pLGMuY29uY2F0KGQpfSxkLnByb3RvdHlwZS5zcGxpY2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGEsW2MsMF0uY29uY2F0KGIpKSxhfSxkLnByb3RvdHlwZS5zdWJzZXQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB2b2lkIDAhPT1jP2Euc2xpY2UoYixiK2MpOmEuc2xpY2UoYixhLmxlbmd0aCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDYxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5mbG9hdD1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKHBhcnNlRmxvYXQpOnBhcnNlRmxvYXQoYSl9LGQucHJvdG90eXBlLmludD1mdW5jdGlvbihhLGIpe3JldHVybiBiPWJ8fDEwLFwic3RyaW5nXCI9PXR5cGVvZiBhP3BhcnNlSW50KGEsYik6XCJudW1iZXJcIj09dHlwZW9mIGE/MHxhOlwiYm9vbGVhblwiPT10eXBlb2YgYT9hPzE6MDphIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGQucHJvdG90eXBlLmludChhLGIpfSk6dm9pZCAwfSxkLnByb3RvdHlwZS5zdHI9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChkLnByb3RvdHlwZS5zdHIpOlN0cmluZyhhKX0sZC5wcm90b3R5cGUuYm9vbGVhbj1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYT8wIT09YTpcInN0cmluZ1wiPT10eXBlb2YgYT9cInRydWVcIj09PWEudG9Mb3dlckNhc2UoKTpcImJvb2xlYW5cIj09dHlwZW9mIGE/YTphIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUuYm9vbGVhbik6dm9pZCAwfSxkLnByb3RvdHlwZS5ieXRlPWZ1bmN0aW9uKGEpe3ZhciBiPWQucHJvdG90eXBlLmludChhLDEwKTtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYj8oYisxMjgpJTI1Ni0xMjg6YiBpbnN0YW5jZW9mIEFycmF5P2IubWFwKGQucHJvdG90eXBlLmJ5dGUpOnZvaWQgMH0sZC5wcm90b3R5cGUuY2hhcj1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgYXx8aXNOYU4oYSk/YSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLmNoYXIpOlwic3RyaW5nXCI9PXR5cGVvZiBhP2QucHJvdG90eXBlLmNoYXIocGFyc2VJbnQoYSwxMCkpOnZvaWQgMDpTdHJpbmcuZnJvbUNoYXJDb2RlKGEpfSxkLnByb3RvdHlwZS51bmNoYXI9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGEmJjE9PT1hLmxlbmd0aD9hLmNoYXJDb2RlQXQoMCk6YSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLnVuY2hhcik6dm9pZCAwfSxkLnByb3RvdHlwZS5oZXg9ZnVuY3Rpb24oYSxiKXtpZihiPXZvaWQgMD09PWJ8fG51bGw9PT1iP2I9ODpiLGEgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGQucHJvdG90eXBlLmhleChhLGIpfSk7aWYoXCJudW1iZXJcIj09dHlwZW9mIGEpe2E8MCYmKGE9NDI5NDk2NzI5NSthKzEpO2Zvcih2YXIgYz1OdW1iZXIoYSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7Yy5sZW5ndGg8YjspYz1cIjBcIitjO3JldHVybiBjLmxlbmd0aD49YiYmKGM9Yy5zdWJzdHJpbmcoYy5sZW5ndGgtYixjLmxlbmd0aCkpLGN9fSxkLnByb3RvdHlwZS51bmhleD1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLnVuaGV4KTpwYXJzZUludChcIjB4XCIrYSwxNil9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDYyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyl7dmFyIGQ9YTwwLGU9ZD9hLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDEpOmEudG9TdHJpbmcoKSxmPWUuaW5kZXhPZihcIi5cIiksZz0tMSE9PWY/ZS5zdWJzdHJpbmcoMCxmKTplLGg9LTEhPT1mP2Uuc3Vic3RyaW5nKGYrMSk6XCJcIixpPWQ/XCItXCI6XCJcIjtpZih2b2lkIDAhPT1jKXt2YXIgaj1cIlwiOygtMSE9PWZ8fGMtaC5sZW5ndGg+MCkmJihqPVwiLlwiKSxoLmxlbmd0aD5jJiYoaD1oLnN1YnN0cmluZygwLGMpKTtmb3IodmFyIGs9MDtrPGItZy5sZW5ndGg7aysrKWkrPVwiMFwiO2krPWcsaSs9aixpKz1oO2Zvcih2YXIgbD0wO2w8Yy1oLmxlbmd0aDtsKyspaSs9XCIwXCI7cmV0dXJuIGl9Zm9yKHZhciBtPTA7bTxNYXRoLm1heChiLWcubGVuZ3RoLDApO20rKylpKz1cIjBcIjtyZXR1cm4gaSs9ZX1mdW5jdGlvbiBlKGEsYil7YT1hLnRvU3RyaW5nKCk7dmFyIGM9YS5pbmRleE9mKFwiLlwiKSxkPS0xIT09Yz9hLnN1YnN0cmluZyhjKTpcIlwiLGU9LTEhPT1jP2Euc3Vic3RyaW5nKDAsYyk6YTtpZihlPWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLFwiLFwiKSwwPT09YilkPVwiXCI7ZWxzZSBpZih2b2lkIDAhPT1iKWlmKGI+ZC5sZW5ndGgpe2QrPS0xPT09Yz9cIi5cIjpcIlwiO2Zvcih2YXIgZj1iLWQubGVuZ3RoKzEsZz0wO2c8ZjtnKyspZCs9XCIwXCJ9ZWxzZSBkPWQuc3Vic3RyaW5nKDAsYisxKTtyZXR1cm4gZStkfWZ1bmN0aW9uIGYoYSl7cmV0dXJuIHBhcnNlRmxvYXQoYSk+MD9cIitcIithLnRvU3RyaW5nKCk6YS50b1N0cmluZygpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIHBhcnNlRmxvYXQoYSk+MD9cIiBcIithLnRvU3RyaW5nKCk6YS50b1N0cmluZygpfXZhciBoPWEoXCIuLi9jb3JlL21haW5cIik7YShcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxoLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcImpvaW5cIixhcmd1bWVudHMpLGEuam9pbihiKX0saC5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWF0Y2hcIixhcmd1bWVudHMpLGEubWF0Y2goYil9LGgucHJvdG90eXBlLm1hdGNoQWxsPWZ1bmN0aW9uKGEsYil7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWF0Y2hBbGxcIixhcmd1bWVudHMpO2Zvcih2YXIgYz1uZXcgUmVnRXhwKGIsXCJnXCIpLGQ9Yy5leGVjKGEpLGU9W107bnVsbCE9PWQ7KWUucHVzaChkKSxkPWMuZXhlYyhhKTtyZXR1cm4gZX0saC5wcm90b3R5cGUubmY9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJuZlwiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBkKGEsYixjKX0pOlwiW29iamVjdCBBcmd1bWVudHNdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk/Mz09PWEubGVuZ3RoP3RoaXMubmYoYVswXSxhWzFdLGFbMl0pOjI9PT1hLmxlbmd0aD90aGlzLm5mKGFbMF0sYVsxXSk6dGhpcy5uZihhWzBdKTpkKGEsYixjKX0saC5wcm90b3R5cGUubmZjPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5mY1wiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBlKGEsYil9KTplKGEsYil9LGgucHJvdG90eXBlLm5mcD1mdW5jdGlvbigpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5mcFwiLGFyZ3VtZW50cyk7dmFyIGE9aC5wcm90b3R5cGUubmYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZik6ZihhKX0saC5wcm90b3R5cGUubmZzPWZ1bmN0aW9uKCl7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibmZzXCIsYXJndW1lbnRzKTt2YXIgYT1oLnByb3RvdHlwZS5uZi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChnKTpnKGEpfSxoLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihhLGIpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzcGxpdFwiLGFyZ3VtZW50cyksYS5zcGxpdChiKX0saC5wcm90b3R5cGUuc3BsaXRUb2tlbnM9ZnVuY3Rpb24oYSxiKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzcGxpdFRva2Vuc1wiLGFyZ3VtZW50cyk7dmFyIGM7aWYodm9pZCAwIT09Yil7dmFyIGQ9YixlPS9cXF0vZy5leGVjKGQpLGY9L1xcWy9nLmV4ZWMoZCk7ZiYmZT8oZD1kLnNsaWNlKDAsZS5pbmRleCkrZC5zbGljZShlLmluZGV4KzEpLGY9L1xcWy9nLmV4ZWMoZCksZD1kLnNsaWNlKDAsZi5pbmRleCkrZC5zbGljZShmLmluZGV4KzEpLGM9bmV3IFJlZ0V4cChcIltcXFxcW1wiK2QrXCJcXFxcXV1cIixcImdcIikpOmU/KGQ9ZC5zbGljZSgwLGUuaW5kZXgpK2Quc2xpY2UoZS5pbmRleCsxKSxjPW5ldyBSZWdFeHAoXCJbXCIrZCtcIlxcXFxdXVwiLFwiZ1wiKSk6Zj8oZD1kLnNsaWNlKDAsZi5pbmRleCkrZC5zbGljZShmLmluZGV4KzEpLGM9bmV3IFJlZ0V4cChcIltcIitkK1wiXFxcXFtdXCIsXCJnXCIpKTpjPW5ldyBSZWdFeHAoXCJbXCIrZCtcIl1cIixcImdcIil9ZWxzZSBjPS9cXHMvZztyZXR1cm4gYS5zcGxpdChjKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGF9KX0saC5wcm90b3R5cGUudHJpbT1mdW5jdGlvbihhKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidHJpbVwiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKHRoaXMudHJpbSk6YS50cmltKCl9LGIuZXhwb3J0cz1ofSx7XCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmRheT1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0RGF0ZSgpfSxkLnByb3RvdHlwZS5ob3VyPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRIb3VycygpfSxkLnByb3RvdHlwZS5taW51dGU9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldE1pbnV0ZXMoKX0sZC5wcm90b3R5cGUubWlsbGlzPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKX0sZC5wcm90b3R5cGUubW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldE1vbnRoKCkrMX0sZC5wcm90b3R5cGUuc2Vjb25kPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRTZWNvbmRzKCl9LGQucHJvdG90eXBlLnllYXI9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldEZ1bGxZZWFyKCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDY0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTthKFwiLi9wNS5HZW9tZXRyeVwiKTt2YXIgZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJwbGFuZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwbGFuZVwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPTEpLHZvaWQgMD09PWUmJihlPTEpO3ZhciBmPVwicGxhbmV8XCIrYytcInxcIitlO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChmKSl7dmFyIGc9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYixjLGU9MDtlPD10aGlzLmRldGFpbFk7ZSsrKXtiPWUvdGhpcy5kZXRhaWxZO2Zvcih2YXIgZj0wO2Y8PXRoaXMuZGV0YWlsWDtmKyspYT1mL3RoaXMuZGV0YWlsWCxjPW5ldyBkLlZlY3RvcihhLS41LGItLjUsMCksdGhpcy52ZXJ0aWNlcy5wdXNoKGMpLHRoaXMudXZzLnB1c2goYSxiKX19LGg9bmV3IGQuR2VvbWV0cnkoYyxlLGcpO2guY29tcHV0ZUZhY2VzKCkuY29tcHV0ZU5vcm1hbHMoKSxjPD0xJiZlPD0xP2guX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlIG9uIHBsYW5lIG9iamVjdHMgd2l0aCBtb3JlIHRoYW4gMSBkZXRhaWxYIG9yIDEgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGYsaCl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGYsYSxiLDEpLHRoaXN9LGQucHJvdG90eXBlLmJveD1mdW5jdGlvbihhLGIsYyxlLGYpe3RoaXMuX2Fzc2VydDNkKFwiYm94XCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJveFwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPWIpO3ZhciBnPXRoaXMuX3JlbmRlcmVyLmF0dHJpYnV0ZXMmJnRoaXMuX3JlbmRlcmVyLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZzt2b2lkIDA9PT1lJiYoZT1nPzE6NCksdm9pZCAwPT09ZiYmKGY9Zz8xOjQpO3ZhciBoPVwiYm94fFwiK2UrXCJ8XCIrZjtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goaCkpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIGE9W1swLDQsMiw2XSxbMSwzLDUsN10sWzAsMSw0LDVdLFsyLDYsMyw3XSxbMCwyLDEsM10sWzQsNSw2LDddXTt0aGlzLnN0cm9rZUluZGljZXM9W1swLDFdLFsxLDNdLFszLDJdLFs2LDddLFs4LDldLFs5LDExXSxbMTQsMTVdLFsxNiwxN10sWzE3LDE5XSxbMTgsMTldLFsyMCwyMV0sWzIyLDIzXV07Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspe2Zvcih2YXIgYz1hW2JdLGU9NCpiLGY9MDtmPDQ7ZisrKXt2YXIgZz1jW2ZdLGg9bmV3IGQuVmVjdG9yKCgyKigxJmcpLTEpLzIsKCgyJmcpLTEpLzIsKCg0JmcpLzItMSkvMik7dGhpcy52ZXJ0aWNlcy5wdXNoKGgpLHRoaXMudXZzLnB1c2goMSZmLCgyJmYpLzIpfXRoaXMuZmFjZXMucHVzaChbZSxlKzEsZSsyXSksdGhpcy5mYWNlcy5wdXNoKFtlKzIsZSsxLGUrM10pfX0saj1uZXcgZC5HZW9tZXRyeShlLGYsaSk7ai5jb21wdXRlTm9ybWFscygpLGU8PTQmJmY8PTQ/ai5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gYm94IG9iamVjdHMgd2l0aCBtb3JlIHRoYW4gNCBkZXRhaWxYIG9yIDQgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGgsail9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGgsYSxiLGMpLHRoaXN9LGQucHJvdG90eXBlLnNwaGVyZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwic3BoZXJlXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwaGVyZVwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPTI0KSx2b2lkIDA9PT1jJiYoYz0xNiksdGhpcy5lbGxpcHNvaWQoYSxhLGEsYixjKSx0aGlzfTt2YXIgZj1mdW5jdGlvbihhLGIsYyxlLGYsZyxoKXthPWE8PTA/MTphLGI9YjwwPzA6YixjPWM8PTA/YTpjLGU9ZTwzPzM6ZSxmPWY8MT8xOmYsZz12b2lkIDA9PT1nfHxnLGg9dm9pZCAwPT09aD8wIT09YjpoO3ZhciBpLGosayxsLG0sbj1nPy0yOjAsbz1mKyhoPzI6MCkscD17fSxxPU1hdGguYXRhbjIoYS1iLGMpO2ZvcihpPW47aTw9bzsrK2kpe3ZhciByLHM9aS9mLHQ9YypzO2ZvcihpPDA/KHQ9MCxzPTAscj1hKTppPmY/KHQ9YyxzPTEscj1iKTpyPWErKGItYSkqcywtMiE9PWkmJmkhPT1mKzJ8fChyPTApLHQtPWMvMixwW2ldPTA9PT1yPzE6ZSxqPTA7ajxwW2ldOysrail7dmFyIHU9ai9lO3RoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoTWF0aC5zaW4oMip1Kk1hdGguUEkpKnIsdCxNYXRoLmNvcygyKnUqTWF0aC5QSSkqcikpLHRoaXMudmVydGV4Tm9ybWFscy5wdXNoKG5ldyBkLlZlY3RvcihpPDB8fGk+Zj8wOk1hdGguc2luKDIqdSpNYXRoLlBJKSpNYXRoLmNvcyhxKSxpPDA/LTE6aT5mPzE6TWF0aC5zaW4ocSksaTwwfHxpPmY/MDpNYXRoLmNvcygyKnUqTWF0aC5QSSkqTWF0aC5jb3MocSkpKSx0aGlzLnV2cy5wdXNoKHUscyl9fXZhciB2PTA7aWYoZyl7Zm9yKGs9MDtrPHBbLTFdOysrayltPShrKzEpJXBbLTFdLHRoaXMuZmFjZXMucHVzaChbdix2KzErbSx2KzEra10pO3YrPXBbLTJdK3BbLTFdfWZvcihpPTA7aTxmOysraSl7Zm9yKGo9MDtqPHBbaV07KytqKTE9PT1wW2krMV0/KGw9KGorMSklcFtpXSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K2wsditwW2ldXSkpOihsPShqKzEpJXBbaV0sdGhpcy5mYWNlcy5wdXNoKFt2K2osditsLHYrcFtpXStsXSksdGhpcy5mYWNlcy5wdXNoKFt2K2osditwW2ldK2wsditwW2ldK2pdKSk7dis9cFtpXX1pZihoKWZvcih2Kz1wW2ZdLGo9MDtqPHBbZisxXTsrK2opbD0oaisxKSVwW2YrMV0sdGhpcy5mYWNlcy5wdXNoKFt2K2osditsLHYrcFtmKzFdXSl9O2QucHJvdG90eXBlLmN5bGluZGVyPWZ1bmN0aW9uKGEsYixjLGUsZyxoKXt0aGlzLl9hc3NlcnQzZChcImN5bGluZGVyXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN5bGluZGVyXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9MjQpLHZvaWQgMD09PWUmJihlPTEpLHZvaWQgMD09PWgmJihoPSEwKSxcbnZvaWQgMD09PWcmJihnPSEwKTt2YXIgaT1cImN5bGluZGVyfFwiK2MrXCJ8XCIrZStcInxcIitnK1wifFwiK2g7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGkpKXt2YXIgaj1uZXcgZC5HZW9tZXRyeShjLGUpO2YuY2FsbChqLDEsMSwxLGMsZSxnLGgpLGouY29tcHV0ZU5vcm1hbHMoKSxjPD0yNCYmZTw9MTY/ai5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gY3lsaW5kZXIgb2JqZWN0cyB3aXRoIG1vcmUgdGhhbiAyNCBkZXRhaWxYIG9yIDE2IGRldGFpbFlcIiksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhpLGopfXJldHVybiB0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVyc1NjYWxlZChpLGEsYixhKSx0aGlzfSxkLnByb3RvdHlwZS5jb25lPWZ1bmN0aW9uKGEsYixjLGUsZyl7dGhpcy5fYXNzZXJ0M2QoXCJjb25lXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvbmVcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj1hKSx2b2lkIDA9PT1jJiYoYz0yNCksdm9pZCAwPT09ZSYmKGU9MSksdm9pZCAwPT09ZyYmKGc9ITApO3ZhciBoPVwiY29uZXxcIitjK1wifFwiK2UrXCJ8XCIrZztpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goaCkpe3ZhciBpPW5ldyBkLkdlb21ldHJ5KGMsZSk7Zi5jYWxsKGksMSwwLDEsYyxlLGcsITEpLGkuY29tcHV0ZU5vcm1hbHMoKSxjPD0yNCYmZTw9MTY/aS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gY29uZSBvYmplY3RzIHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMTYgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGgsaSl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGgsYSxiLGEpLHRoaXN9LGQucHJvdG90eXBlLmVsbGlwc29pZD1mdW5jdGlvbihhLGIsYyxlLGYpe3RoaXMuX2Fzc2VydDNkKFwiZWxsaXBzb2lkXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImVsbGlwc29pZFwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPWEpLHZvaWQgMD09PWUmJihlPTI0KSx2b2lkIDA9PT1mJiYoZj0xNik7dmFyIGc9XCJlbGxpcHNvaWR8XCIrZStcInxcIitmO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChnKSl7dmFyIGg9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD10aGlzLmRldGFpbFk7YSsrKWZvcih2YXIgYj1hL3RoaXMuZGV0YWlsWSxjPU1hdGguUEkqYi1NYXRoLlBJLzIsZT1NYXRoLmNvcyhjKSxmPU1hdGguc2luKGMpLGc9MDtnPD10aGlzLmRldGFpbFg7ZysrKXt2YXIgaD1nL3RoaXMuZGV0YWlsWCxpPTIqTWF0aC5QSSpoLGo9TWF0aC5jb3MoaSksaz1NYXRoLnNpbihpKSxsPW5ldyBkLlZlY3RvcihlKmssZixlKmopO3RoaXMudmVydGljZXMucHVzaChsKSx0aGlzLnZlcnRleE5vcm1hbHMucHVzaChsKSx0aGlzLnV2cy5wdXNoKGgsYil9fSxpPW5ldyBkLkdlb21ldHJ5KGUsZixoKTtpLmNvbXB1dGVGYWNlcygpLGU8PTI0JiZmPD0yND9pLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBlbGxpcHNvaWRzIHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMjQgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGcsaSl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGcsYSxiLGMpLHRoaXN9LGQucHJvdG90eXBlLnRvcnVzPWZ1bmN0aW9uKGEsYixjLGUpe2lmKHRoaXMuX2Fzc2VydDNkKFwidG9ydXNcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidG9ydXNcIixhcmd1bWVudHMpLHZvaWQgMD09PWEpYT01MDtlbHNlIGlmKCFhKXJldHVybjtpZih2b2lkIDA9PT1iKWI9MTA7ZWxzZSBpZighYilyZXR1cm47dm9pZCAwPT09YyYmKGM9MjQpLHZvaWQgMD09PWUmJihlPTE2KTt2YXIgZj0oYi9hKS50b1ByZWNpc2lvbig0KSxnPVwidG9ydXN8XCIrZitcInxcIitjK1wifFwiK2U7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGcpKXt2YXIgaD1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspZm9yKHZhciBiPWEvdGhpcy5kZXRhaWxZLGM9MipNYXRoLlBJKmIsZT1NYXRoLmNvcyhjKSxnPU1hdGguc2luKGMpLGg9MStmKmUsaT0wO2k8PXRoaXMuZGV0YWlsWDtpKyspe3ZhciBqPWkvdGhpcy5kZXRhaWxYLGs9MipNYXRoLlBJKmosbD1NYXRoLmNvcyhrKSxtPU1hdGguc2luKGspLG49bmV3IGQuVmVjdG9yKGgqbCxoKm0sZipnKSxvPW5ldyBkLlZlY3RvcihlKmwsZSptLGcpO3RoaXMudmVydGljZXMucHVzaChuKSx0aGlzLnZlcnRleE5vcm1hbHMucHVzaChvKSx0aGlzLnV2cy5wdXNoKGosYil9fSxpPW5ldyBkLkdlb21ldHJ5KGMsZSxoKTtpLmNvbXB1dGVGYWNlcygpLGM8PTI0JiZlPD0xNj9pLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZXMgb24gdG9ydXMgb2JqZWN0IHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMTYgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGcsaSl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGcsYSxhLGEpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3VzZVBvaW50U2hhZGVyKCksdGhpcy5jdXJQb2ludFNoYWRlci5iaW5kU2hhZGVyKCksdm9pZCAwPT09YyYmKGM9MCk7dmFyIGU9W107cmV0dXJuIGUucHVzaChuZXcgZC5WZWN0b3IoYSxiLGMpKSx0aGlzLl9kcmF3UG9pbnRzKGUsdGhpcy5fcG9pbnRWZXJ0ZXhCdWZmZXIpLHRoaXMuY3VyUG9pbnRTaGFkZXIudW5iaW5kU2hhZGVyKCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS50cmlhbmdsZT1mdW5jdGlvbihhKXt2YXIgYj1hWzBdLGM9YVsxXSxlPWFbMl0sZj1hWzNdLGc9YVs0XSxoPWFbNV0saT1cInRyaVwiO2lmKCF0aGlzLmdlb21ldHJ5SW5IYXNoKGkpKXt2YXIgaj1mdW5jdGlvbigpe3ZhciBhPVtdO2EucHVzaChuZXcgZC5WZWN0b3IoMCwwLDApKSxhLnB1c2gobmV3IGQuVmVjdG9yKDAsMSwwKSksYS5wdXNoKG5ldyBkLlZlY3RvcigxLDAsMCkpLHRoaXMuc3Ryb2tlSW5kaWNlcz1bWzAsMV0sWzEsMl0sWzIsMF1dLHRoaXMudmVydGljZXM9YSx0aGlzLmZhY2VzPVtbMCwxLDJdXSx0aGlzLnV2cz1bMCwwLDAsMSwxLDFdfSxrPW5ldyBkLkdlb21ldHJ5KDEsMSxqKTtrLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSxrLmNvbXB1dGVOb3JtYWxzKCksdGhpcy5jcmVhdGVCdWZmZXJzKGksayl9dmFyIGw9dGhpcy51TVZNYXRyaXguY29weSgpO3RyeXt2YXIgbT1uZXcgZC5NYXRyaXgoW2UtYixmLWMsMCwwLGctYixoLWMsMCwwLDAsMCwxLDAsYixjLDAsMV0pLm11bHQodGhpcy51TVZNYXRyaXgpO3RoaXMudU1WTWF0cml4PW0sdGhpcy5kcmF3QnVmZmVycyhpKX1maW5hbGx5e3RoaXMudU1WTWF0cml4PWx9cmV0dXJuIHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZWxsaXBzZT1mdW5jdGlvbihhKXt0aGlzLmFyYyhhWzBdLGFbMV0sYVsyXSxhWzNdLDAsZS5UV09fUEksZS5PUEVOLGFbNF0pfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmFyYz1mdW5jdGlvbihhKXt2YXIgYixjLGY9YXJndW1lbnRzWzBdLGc9YXJndW1lbnRzWzFdLGg9YXJndW1lbnRzWzJdLGk9YXJndW1lbnRzWzNdLGo9YXJndW1lbnRzWzRdLGs9YXJndW1lbnRzWzVdLGw9YXJndW1lbnRzWzZdLG09YXJndW1lbnRzWzddfHwyNTtpZihNYXRoLmFicyhrLWopPj1lLlRXT19QST8oYj1cImVsbGlwc2VcIixjPWIrXCJ8XCIrbStcInxcIik6KGI9XCJhcmNcIixjPWIrXCJ8XCIraitcInxcIitrK1wifFwiK2wrXCJ8XCIrbStcInxcIiksIXRoaXMuZ2VvbWV0cnlJbkhhc2goYykpe3ZhciBuPWZ1bmN0aW9uKCl7aWYodGhpcy5zdHJva2VJbmRpY2VzPVtdLGoudG9GaXhlZCgxMCkhPT1rLnRvRml4ZWQoMTApKXtsIT09ZS5QSUUmJnZvaWQgMCE9PWx8fCh0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKC41LC41LDApKSx0aGlzLnV2cy5wdXNoKFsuNSwuNV0pKTtmb3IodmFyIGE9MDthPD1tO2ErKyl7dmFyIGI9YS9tLGM9KGstaikqYitqLGY9LjUrTWF0aC5jb3MoYykvMixnPS41K01hdGguc2luKGMpLzI7dGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihmLGcsMCkpLHRoaXMudXZzLnB1c2goW2YsZ10pLGE8bS0xJiYodGhpcy5mYWNlcy5wdXNoKFswLGErMSxhKzJdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbYSsxLGErMl0pKX1zd2l0Y2gobCl7Y2FzZSBlLlBJRTp0aGlzLmZhY2VzLnB1c2goWzAsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMix0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFt0aGlzLnZlcnRpY2VzLmxlbmd0aC0yLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCx0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSk7YnJlYWs7Y2FzZSBlLkNIT1JEOnRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLDFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCx0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSk7YnJlYWs7Y2FzZSBlLk9QRU46dGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsMV0pO2JyZWFrO2RlZmF1bHQ6dGhpcy5mYWNlcy5wdXNoKFswLHRoaXMudmVydGljZXMubGVuZ3RoLTIsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFt0aGlzLnZlcnRpY2VzLmxlbmd0aC0yLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKX19fSxvPW5ldyBkLkdlb21ldHJ5KG0sMSxuKTtvLmNvbXB1dGVOb3JtYWxzKCksbTw9NTA/by5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKG8pOmNvbnNvbGUubG9nKFwiQ2Fubm90IHN0cm9rZSBcIitiK1wiIHdpdGggbW9yZSB0aGFuIDUwIGRldGFpbFwiKSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoYyxvKX12YXIgcD10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3RoaXMudU1WTWF0cml4LnRyYW5zbGF0ZShbZixnLDBdKSx0aGlzLnVNVk1hdHJpeC5zY2FsZShoLGksMSksdGhpcy5kcmF3QnVmZmVycyhjKX1maW5hbGx5e3RoaXMudU1WTWF0cml4PXB9cmV0dXJuIHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucmVjdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZyxjPWFbMF0sZT1hWzFdLGY9YVsyXSxnPWFbM10saD1hWzRdfHwoYj8xOjI0KSxpPWFbNV18fChiPzE6MTYpLGo9XCJyZWN0fFwiK2grXCJ8XCIraTtpZighdGhpcy5nZW9tZXRyeUluSGFzaChqKSl7dmFyIGs9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD10aGlzLmRldGFpbFk7YSsrKWZvcih2YXIgYj1hL3RoaXMuZGV0YWlsWSxjPTA7Yzw9dGhpcy5kZXRhaWxYO2MrKyl7dmFyIGU9Yy90aGlzLmRldGFpbFgsZj1uZXcgZC5WZWN0b3IoZSxiLDApO3RoaXMudmVydGljZXMucHVzaChmKSx0aGlzLnV2cy5wdXNoKGUsYil9aD4wJiZpPjAmJih0aGlzLnN0cm9rZUluZGljZXM9W1swLGhdLFtoLChoKzEpKihpKzEpLTFdLFsoaCsxKSooaSsxKS0xLChoKzEpKmldLFsoaCsxKSppLDBdXSl9LGw9bmV3IGQuR2VvbWV0cnkoaCxpLGspO2wuY29tcHV0ZUZhY2VzKCkuY29tcHV0ZU5vcm1hbHMoKS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCksdGhpcy5jcmVhdGVCdWZmZXJzKGosbCl9dmFyIG09dGhpcy51TVZNYXRyaXguY29weSgpO3RyeXt0aGlzLnVNVk1hdHJpeC50cmFuc2xhdGUoW2MsZSwwXSksdGhpcy51TVZNYXRyaXguc2NhbGUoZixnLDEpLHRoaXMuZHJhd0J1ZmZlcnMoail9ZmluYWxseXt0aGlzLnVNVk1hdHJpeD1tfXJldHVybiB0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnF1YWQ9ZnVuY3Rpb24oYSxiLGMsZSxmLGcsaCxpKXt2YXIgaj1cInF1YWR8XCIrYStcInxcIitiK1wifFwiK2MrXCJ8XCIrZStcInxcIitmK1wifFwiK2crXCJ8XCIraCtcInxcIitpO2lmKCF0aGlzLmdlb21ldHJ5SW5IYXNoKGopKXt2YXIgaz1mdW5jdGlvbigpe3RoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoYSxiLDApKSx0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGMsZSwwKSksdGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihmLGcsMCkpLHRoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoaCxpLDApKSx0aGlzLnV2cy5wdXNoKDAsMCwxLDAsMSwxLDAsMSksdGhpcy5zdHJva2VJbmRpY2VzPVtbMCwxXSxbMSwyXSxbMiwzXSxbMywwXV19LGw9bmV3IGQuR2VvbWV0cnkoMiwyLGspO2wuY29tcHV0ZU5vcm1hbHMoKS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCksbC5mYWNlcz1bWzAsMSwyXSxbMiwzLDBdXSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoaixsKX1yZXR1cm4gdGhpcy5kcmF3QnVmZmVycyhqKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmJlemllcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSxqLGssbCl7OD09PWFyZ3VtZW50cy5sZW5ndGgmJihqPWcsaz1oLGc9ZSxoPWQsZD1jLGU9ZCxjPWY9aT1sPTApO3ZhciBtPXRoaXMuX3BJbnN0Ll9iZXppZXJEZXRhaWx8fDIwO3RoaXMuYmVnaW5TaGFwZSgpO2Zvcih2YXIgbj0wO248PW07bisrKXt2YXIgbz1NYXRoLnBvdygxLW4vbSwzKSxwPW4vbSozKk1hdGgucG93KDEtbi9tLDIpLHE9MypNYXRoLnBvdyhuL20sMikqKDEtbi9tKSxyPU1hdGgucG93KG4vbSwzKTt0aGlzLnZlcnRleChhKm8rZCpwK2cqcStqKnIsYipvK2UqcCtoKnEraypyLGMqbytmKnAraSpxK2wqcil9cmV0dXJuIHRoaXMuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmN1cnZlPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpLGosayxsKXs4PT09YXJndW1lbnRzLmxlbmd0aCYmKGo9ZyxrPWgsZz1lLGg9ZCxkPWMsZT1kLGM9Zj1pPWw9MCk7dmFyIG09dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsO3RoaXMuYmVnaW5TaGFwZSgpO2Zvcih2YXIgbj0wO248PW07bisrKXt2YXIgbz0uNSpNYXRoLnBvdyhuL20sMykscD0uNSpNYXRoLnBvdyhuL20sMikscT1uL20qLjUscj0uNSxzPW8qKDMqZC1hLTMqZytqKStwKigyKmEtNSpkKzQqZy1qKStxKigtYStnKStyKigyKmQpLHQ9byooMyplLWItMypoK2spK3AqKDIqYi01KmUrNCpoLWspK3EqKC1iK2gpK3IqKDIqZSksdT1vKigzKmYtYy0zKmkrbCkrcCooMipjLTUqZis0KmktbCkrcSooLWMraSkrciooMipmKTt0aGlzLnZlcnRleChzLHQsdSl9cmV0dXJuIHRoaXMuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gNj09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuYmVnaW5TaGFwZSgpLHRoaXMudmVydGV4KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSx0aGlzLnZlcnRleChhcmd1bWVudHNbM10sYXJndW1lbnRzWzRdLGFyZ3VtZW50c1s1XSksdGhpcy5lbmRTaGFwZSgpKTo0PT09YXJndW1lbnRzLmxlbmd0aCYmKHRoaXMuYmVnaW5TaGFwZSgpLHRoaXMudmVydGV4KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sMCksdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSwwKSx0aGlzLmVuZFNoYXBlKCkpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuYmV6aWVyVmVydGV4PWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4Lmxlbmd0aCl0aHJvdyBFcnJvcihcInZlcnRleCgpIG11c3QgYmUgdXNlZCBvbmNlIGJlZm9yZSBjYWxsaW5nIGJlemllclZlcnRleCgpXCIpO3ZhciBhLGIsYyxkLGUsZj1bXSxnPVtdLGg9W10saT1hcmd1bWVudHMubGVuZ3RoO2lmKGE9MCwwPT09dGhpcy5fbG9va1VwVGFibGVCZXppZXIubGVuZ3RofHx0aGlzLl9sdXRCZXppZXJEZXRhaWwhPT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWwpe3RoaXMuX2xvb2tVcFRhYmxlQmV6aWVyPVtdLHRoaXMuX2x1dEJlemllckRldGFpbD10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7Zm9yKHZhciBqPTEvdGhpcy5fbHV0QmV6aWVyRGV0YWlsLGs9MCxsPTEsbT0wO2s8MTspe2lmKGE9cGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW21dPXRoaXMuX2JlemllckNvZWZmaWNpZW50cyhhKSxsLnRvRml4ZWQoNik9PT1qLnRvRml4ZWQoNikpe2E9cGFyc2VGbG9hdChsLnRvRml4ZWQoNikpK3BhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSwrK20sdGhpcy5fbG9va1VwVGFibGVCZXppZXJbbV09dGhpcy5fYmV6aWVyQ29lZmZpY2llbnRzKGEpO2JyZWFrfWsrPWosbC09aiwrK219fXZhciBuPXRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyLmxlbmd0aDtpZig2PT09aSl7Zm9yKHRoaXMuaXNCZXppZXI9ITAsZj1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF0sYXJndW1lbnRzWzBdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbNF1dLGc9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzVdXSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2ZbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStnWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyk7dGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF09YXJndW1lbnRzWzRdLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdPWFyZ3VtZW50c1s1XX1lbHNlIGlmKDk9PT1pKXtmb3IodGhpcy5pc0Jlemllcj0hMCxmPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXSxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s2XV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1s0XSxhcmd1bWVudHNbN11dLGg9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzJdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbNV0sYXJndW1lbnRzWzhdXSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2ZbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStnWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGQ9aFswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStoWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2hbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0raFszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSx0aGlzLnZlcnRleChiLGMsZCk7dGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF09YXJndW1lbnRzWzZdLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdPWFyZ3VtZW50c1s3XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsyXT1hcmd1bWVudHNbOF19fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnF1YWRyYXRpY1ZlcnRleD1mdW5jdGlvbigpe2lmKDA9PT10aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleC5sZW5ndGgpdGhyb3cgRXJyb3IoXCJ2ZXJ0ZXgoKSBtdXN0IGJlIHVzZWQgb25jZSBiZWZvcmUgY2FsbGluZyBxdWFkcmF0aWNWZXJ0ZXgoKVwiKTt2YXIgYSxiLGMsZCxlLGY9W10sZz1bXSxoPVtdLGk9YXJndW1lbnRzLmxlbmd0aDtpZihhPTAsMD09PXRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljLmxlbmd0aHx8dGhpcy5fbHV0UXVhZHJhdGljRGV0YWlsIT09dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsKXt0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpYz1bXSx0aGlzLl9sdXRRdWFkcmF0aWNEZXRhaWw9dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsO2Zvcih2YXIgaj0xL3RoaXMuX2x1dFF1YWRyYXRpY0RldGFpbCxrPTAsbD0xLG09MDtrPDE7KXtpZihhPXBhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSx0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1ttXT10aGlzLl9xdWFkcmF0aWNDb2VmZmljaWVudHMoYSksbC50b0ZpeGVkKDYpPT09ai50b0ZpeGVkKDYpKXthPXBhcnNlRmxvYXQobC50b0ZpeGVkKDYpKStwYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksKyttLHRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW21dPXRoaXMuX3F1YWRyYXRpY0NvZWZmaWNpZW50cyhhKTticmVha31rKz1qLGwtPWosKyttfX12YXIgbj10aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpYy5sZW5ndGg7aWYoND09PWkpe2Zvcih0aGlzLmlzUXVhZHJhdGljPSEwLGY9W3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMl1dLGc9W3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbM11dLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSx0aGlzLnZlcnRleChiLGMpO3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdPWFyZ3VtZW50c1syXSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXT1hcmd1bWVudHNbM119ZWxzZSBpZig2PT09aSl7Zm9yKHRoaXMuaXNRdWFkcmF0aWM9ITAsZj1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF0sYXJndW1lbnRzWzBdLGFyZ3VtZW50c1szXV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1s0XV0saD1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMl0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1s1XV0sZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLGQ9aFswXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStoWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2hbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sdGhpcy52ZXJ0ZXgoYixjLGQpO3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdPWFyZ3VtZW50c1szXSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXT1hcmd1bWVudHNbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMl09YXJndW1lbnRzWzVdfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5jdXJ2ZVZlcnRleD1mdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZj1bXSxnPVtdLGg9W107YT0wO3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg7aWYoMD09PXRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyLmxlbmd0aHx8dGhpcy5fbHV0QmV6aWVyRGV0YWlsIT09dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsKXt0aGlzLl9sb29rVXBUYWJsZUJlemllcj1bXSx0aGlzLl9sdXRCZXppZXJEZXRhaWw9dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsO2Zvcih2YXIgaj0xL3RoaXMuX2x1dEJlemllckRldGFpbCxrPTAsbD0xLG09MDtrPDE7KXtpZihhPXBhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSx0aGlzLl9sb29rVXBUYWJsZUJlemllclttXT10aGlzLl9iZXppZXJDb2VmZmljaWVudHMoYSksbC50b0ZpeGVkKDYpPT09ai50b0ZpeGVkKDYpKXthPXBhcnNlRmxvYXQobC50b0ZpeGVkKDYpKStwYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksKyttLHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW21dPXRoaXMuX2JlemllckNvZWZmaWNpZW50cyhhKTticmVha31rKz1qLGwtPWosKyttfX12YXIgbj10aGlzLl9sb29rVXBUYWJsZUJlemllci5sZW5ndGg7aWYoMj09PWkpe2lmKHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMF0pLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMV0pLDg9PT10aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4Lmxlbmd0aCl7Zm9yKHRoaXMuaXNDdXJ2ZT0hMCxmPXRoaXMuX2JlemllclRvQ2F0bXVsbChbdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFswXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzJdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs2XV0pLGc9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzFdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbM10sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs1XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzddXSksZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStmWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZ1szXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSx0aGlzLnZlcnRleChiLGMpO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnNoaWZ0KCl9fWVsc2UgaWYoMz09PWkmJih0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzBdKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzFdKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzJdKSwxMj09PXRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgubGVuZ3RoKSl7Zm9yKHRoaXMuaXNDdXJ2ZT0hMCxmPXRoaXMuX2JlemllclRvQ2F0bXVsbChbdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFswXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzNdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs5XV0pLGc9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzFdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs3XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzEwXV0pLGg9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzJdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNV0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs4XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzExXV0pLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZlszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2dbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sZD1oWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2hbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0raFsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStoWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyxkKTtmb3IoZT0wO2U8aTtlKyspdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5zaGlmdCgpfX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vcDUuR2VvbWV0cnlcIjo3MH1dLDY1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLnByb3RvdHlwZS5vcmJpdENvbnRyb2w9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLl9hc3NlcnQzZChcIm9yYml0Q29udHJvbFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJvcmJpdENvbnRyb2xcIixhcmd1bWVudHMpLHRoaXMubW91c2VYPHRoaXMud2lkdGgmJnRoaXMubW91c2VYPjAmJnRoaXMubW91c2VZPHRoaXMuaGVpZ2h0JiZ0aGlzLm1vdXNlWT4wKXt2YXIgYz10aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhO3ZvaWQgMD09PWEmJihhPTEpLHZvaWQgMD09PWImJihiPWEpLCEwIT09dGhpcy5jb250ZXh0TWVudURpc2FibGVkJiYodGhpcy5jYW52YXMub25jb250ZXh0bWVudT1mdW5jdGlvbigpe3JldHVybiExfSx0aGlzLl9zZXRQcm9wZXJ0eShcImNvbnRleHRNZW51RGlzYWJsZWRcIiwhMCkpLCEwIT09dGhpcy53aGVlbERlZmF1bHREaXNhYmxlZCYmKHRoaXMuY2FudmFzLm9ud2hlZWw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdGhpcy5fc2V0UHJvcGVydHkoXCJ3aGVlbERlZmF1bHREaXNhYmxlZFwiLCEwKSk7dmFyIGU9dGhpcy5oZWlnaHQ8dGhpcy53aWR0aD90aGlzLmhlaWdodDp0aGlzLndpZHRoO2lmKHRoaXMuX21vdXNlV2hlZWxEZWx0YVkhPT10aGlzLl9wbW91c2VXaGVlbERlbHRhWSYmKHRoaXMuX21vdXNlV2hlZWxEZWx0YVk+MD90aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLl9vcmJpdCgwLDAsLjUqZSk6dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5fb3JiaXQoMCwwLC0uNSplKSksdGhpcy5tb3VzZUlzUHJlc3NlZClpZih0aGlzLm1vdXNlQnV0dG9uPT09dGhpcy5MRUZUKXt2YXIgZj0tYSoodGhpcy5tb3VzZVgtdGhpcy5wbW91c2VYKS9lLGc9YioodGhpcy5tb3VzZVktdGhpcy5wbW91c2VZKS9lO3RoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuX29yYml0KGYsZywwKX1lbHNlIGlmKHRoaXMubW91c2VCdXR0b249PT10aGlzLlJJR0hUKXt2YXIgaD1jLl9nZXRMb2NhbEF4ZXMoKSxpPU1hdGguc3FydChoLnhbMF0qaC54WzBdK2gueFsyXSpoLnhbMl0pOzAhPT1pJiYoaC54WzBdLz1pLGgueFsyXS89aSk7dmFyIGo9TWF0aC5zcXJ0KGgueVswXSpoLnlbMF0raC55WzJdKmgueVsyXSk7MCE9PWomJihoLnlbMF0vPWosaC55WzJdLz1qKTt2YXIgaz0tMSphKih0aGlzLm1vdXNlWC10aGlzLnBtb3VzZVgpLGw9LTEqYioodGhpcy5tb3VzZVktdGhpcy5wbW91c2VZKTtjLnNldFBvc2l0aW9uKGMuZXllWCtrKmgueFswXStsKmguelswXSxjLmV5ZVksYy5leWVaK2sqaC54WzJdK2wqaC56WzJdKX1yZXR1cm4gdGhpc319LGQucHJvdG90eXBlLmRlYnVnTW9kZT1mdW5jdGlvbigpe3RoaXMuX2Fzc2VydDNkKFwiZGVidWdNb2RlXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImRlYnVnTW9kZVwiLGFyZ3VtZW50cyk7Zm9yKHZhciBhPXRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3QubGVuZ3RoLTE7YT49MDthLS0pdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdFthXS50b1N0cmluZygpIT09dGhpcy5fZ3JpZCgpLnRvU3RyaW5nKCkmJnRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3RbYV0udG9TdHJpbmcoKSE9PXRoaXMuX2F4ZXNJY29uKCkudG9TdHJpbmcoKXx8dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5zcGxpY2UoYSwxKTthcmd1bWVudHNbMF09PT1lLkdSSUQ/dGhpcy5yZWdpc3Rlck1ldGhvZChcInBvc3RcIix0aGlzLl9ncmlkLmNhbGwodGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNF0sYXJndW1lbnRzWzVdKSk6YXJndW1lbnRzWzBdPT09ZS5BWEVTP3RoaXMucmVnaXN0ZXJNZXRob2QoXCJwb3N0XCIsdGhpcy5fYXhlc0ljb24uY2FsbCh0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSkpOih0aGlzLnJlZ2lzdGVyTWV0aG9kKFwicG9zdFwiLHRoaXMuX2dyaWQuY2FsbCh0aGlzLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNF0pKSx0aGlzLnJlZ2lzdGVyTWV0aG9kKFwicG9zdFwiLHRoaXMuX2F4ZXNJY29uLmNhbGwodGhpcyxhcmd1bWVudHNbNV0sYXJndW1lbnRzWzZdLGFyZ3VtZW50c1s3XSxhcmd1bWVudHNbOF0pKSl9LGQucHJvdG90eXBlLm5vRGVidWdNb2RlPWZ1bmN0aW9uKCl7dGhpcy5fYXNzZXJ0M2QoXCJub0RlYnVnTW9kZVwiKTtmb3IodmFyIGE9dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5sZW5ndGgtMTthPj0wO2EtLSl0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0W2FdLnRvU3RyaW5nKCkhPT10aGlzLl9ncmlkKCkudG9TdHJpbmcoKSYmdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdFthXS50b1N0cmluZygpIT09dGhpcy5fYXhlc0ljb24oKS50b1N0cmluZygpfHx0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0LnNwbGljZShhLDEpfSxkLnByb3RvdHlwZS5fZ3JpZD1mdW5jdGlvbihhLGIsYyxkLGUpe3ZvaWQgMD09PWEmJihhPXRoaXMud2lkdGgvMiksdm9pZCAwPT09YiYmKGI9TWF0aC5yb3VuZChhLzMwKTw0PzQ6TWF0aC5yb3VuZChhLzMwKSksdm9pZCAwPT09YyYmKGM9MCksdm9pZCAwPT09ZCYmKGQ9MCksdm9pZCAwPT09ZSYmKGU9MCk7dmFyIGY9YS9iLGc9YS8yO3JldHVybiBmdW5jdGlvbigpe3RoaXMucHVzaCgpLHRoaXMuc3Ryb2tlKDI1NSp0aGlzLl9yZW5kZXJlci5jdXJTdHJva2VDb2xvclswXSwyNTUqdGhpcy5fcmVuZGVyZXIuY3VyU3Ryb2tlQ29sb3JbMV0sMjU1KnRoaXMuX3JlbmRlcmVyLmN1clN0cm9rZUNvbG9yWzJdKSx0aGlzLl9yZW5kZXJlci51TVZNYXRyaXguc2V0KHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzJdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbM10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs0XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzVdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs3XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzhdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxM10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNV0pO2Zvcih2YXIgYT0wO2E8PWI7YSsrKXRoaXMuYmVnaW5TaGFwZSh0aGlzLkxJTkVTKSx0aGlzLnZlcnRleCgtZytjLGQsYSpmLWcrZSksdGhpcy52ZXJ0ZXgoK2crYyxkLGEqZi1nK2UpLHRoaXMuZW5kU2hhcGUoKTtmb3IodmFyIGg9MDtoPD1iO2grKyl0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoaCpmLWcrYyxkLC1nK2UpLHRoaXMudmVydGV4KGgqZi1nK2MsZCwrZytlKSx0aGlzLmVuZFNoYXBlKCk7dGhpcy5wb3AoKX19LGQucHJvdG90eXBlLl9heGVzSWNvbj1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdm9pZCAwPT09YSYmKGE9dGhpcy53aWR0aC8yMD40MD90aGlzLndpZHRoLzIwOjQwKSx2b2lkIDA9PT1iJiYoYj0tdGhpcy53aWR0aC80KSx2b2lkIDA9PT1jJiYoYz1iKSx2b2lkIDA9PT1kJiYoZD1iKSxmdW5jdGlvbigpe3RoaXMucHVzaCgpLHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5zZXQodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzFdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzRdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzddLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEwXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEzXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSksdGhpcy5zdHJva2VXZWlnaHQoMiksdGhpcy5zdHJva2UoMjU1LDAsMCksdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KGIsYyxkKSx0aGlzLnZlcnRleChiK2EsYyxkKSx0aGlzLmVuZFNoYXBlKCksdGhpcy5zdHJva2UoMCwyNTUsMCksdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KGIsYyxkKSx0aGlzLnZlcnRleChiLGMrYSxkKSx0aGlzLmVuZFNoYXBlKCksdGhpcy5zdHJva2UoMCwwLDI1NSksdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KGIsYyxkKSx0aGlzLnZlcnRleChiLGMsZCthKSx0aGlzLmVuZFNoYXBlKCksdGhpcy5wb3AoKX19LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw2NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuYW1iaWVudExpZ2h0PWZ1bmN0aW9uKGEsYixjLGUpe3RoaXMuX2Fzc2VydDNkKFwiYW1iaWVudExpZ2h0XCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImFtYmllbnRMaWdodFwiLGFyZ3VtZW50cyk7dmFyIGY9dGhpcy5jb2xvci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZz10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gZy5zZXRVbmlmb3JtKFwidVVzZUxpZ2h0aW5nXCIsITApLGcuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSx0aGlzLl9yZW5kZXJlci5hbWJpZW50TGlnaHRDb2xvcnMucHVzaChmLl9hcnJheVswXSxmLl9hcnJheVsxXSxmLl9hcnJheVsyXSksZy5zZXRVbmlmb3JtKFwidUFtYmllbnRDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmFtYmllbnRMaWdodENvbG9ycyksZy5zZXRVbmlmb3JtKFwidUFtYmllbnRMaWdodENvdW50XCIsdGhpcy5fcmVuZGVyZXIuYW1iaWVudExpZ2h0Q29sb3JzLmxlbmd0aC8zKSx0aGlzfSxkLnByb3RvdHlwZS5kaXJlY3Rpb25hbExpZ2h0PWZ1bmN0aW9uKGEsYixjLGUsZixnKXt0aGlzLl9hc3NlcnQzZChcImRpcmVjdGlvbmFsTGlnaHRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZGlyZWN0aW9uYWxMaWdodFwiLGFyZ3VtZW50cyk7dmFyIGgsaT10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtoPWEgaW5zdGFuY2VvZiBkLkNvbG9yP2E6dGhpcy5jb2xvcihhLGIsYyk7dmFyIGosayxsLG09YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV07XCJudW1iZXJcIj09dHlwZW9mIG0/KGo9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtM10saz1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSxsPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKTooaj1tLngsaz1tLnksbD1tLnopLGkuc2V0VW5pZm9ybShcInVVc2VMaWdodGluZ1wiLCEwKSxpLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvcik7dmFyIG49TWF0aC5zcXJ0KGoqaitrKmsrbCpsKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbnMucHVzaChqL24say9uLGwvbiksaS5zZXRVbmlmb3JtKFwidUxpZ2h0aW5nRGlyZWN0aW9uXCIsdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbnMpLHRoaXMuX3JlbmRlcmVyLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnMucHVzaChoLl9hcnJheVswXSxoLl9hcnJheVsxXSxoLl9hcnJheVsyXSksaS5zZXRVbmlmb3JtKFwidURpcmVjdGlvbmFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzKSxpLnNldFVuaWZvcm0oXCJ1RGlyZWN0aW9uYWxMaWdodENvdW50XCIsdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodENvbG9ycy5sZW5ndGgvMyksdGhpc30sZC5wcm90b3R5cGUucG9pbnRMaWdodD1mdW5jdGlvbihhLGIsYyxlLGYsZyl7dGhpcy5fYXNzZXJ0M2QoXCJwb2ludExpZ2h0XCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBvaW50TGlnaHRcIixhcmd1bWVudHMpO3ZhciBoO2g9YSBpbnN0YW5jZW9mIGQuQ29sb3I/YTp0aGlzLmNvbG9yKGEsYixjKTt2YXIgaSxqLGssbD1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtcIm51bWJlclwiPT10eXBlb2YgbD8oaT1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0zXSxqPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTJdLGs9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pOihpPWwueCxqPWwueSxrPWwueik7dmFyIG09dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIG0uc2V0VW5pZm9ybShcInVVc2VMaWdodGluZ1wiLCEwKSxtLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvciksdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodFBvc2l0aW9ucy5wdXNoKGksaixrKSxtLnNldFVuaWZvcm0oXCJ1UG9pbnRMaWdodExvY2F0aW9uXCIsdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodFBvc2l0aW9ucyksdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodENvbG9ycy5wdXNoKGguX2FycmF5WzBdLGguX2FycmF5WzFdLGguX2FycmF5WzJdKSxtLnNldFVuaWZvcm0oXCJ1UG9pbnRMaWdodENvbG9yXCIsdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodENvbG9ycyksbS5zZXRVbmlmb3JtKFwidVBvaW50TGlnaHRDb3VudFwiLHRoaXMuX3JlbmRlcmVyLnBvaW50TGlnaHRDb2xvcnMubGVuZ3RoLzMpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDY3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgYz17djpbXSx2dDpbXSx2bjpbXX0sZD17fSxmPTA7ZjxiLmxlbmd0aDsrK2Ype3ZhciBnPWJbZl0udHJpbSgpLnNwbGl0KC9cXGJcXHMrLyk7aWYoZy5sZW5ndGg+MClpZihcInZcIj09PWdbMF18fFwidm5cIj09PWdbMF0pe3ZhciBoPW5ldyBlLlZlY3RvcihwYXJzZUZsb2F0KGdbMV0pLHBhcnNlRmxvYXQoZ1syXSkscGFyc2VGbG9hdChnWzNdKSk7Y1tnWzBdXS5wdXNoKGgpfWVsc2UgaWYoXCJ2dFwiPT09Z1swXSl7dmFyIGk9W3BhcnNlRmxvYXQoZ1sxXSkscGFyc2VGbG9hdChnWzJdKV07Y1tnWzBdXS5wdXNoKGkpfWVsc2UgaWYoXCJmXCI9PT1nWzBdKWZvcih2YXIgaj0zO2o8Zy5sZW5ndGg7KytqKXtmb3IodmFyIGs9W10sbD1bMSxqLTEsal0sbT0wO208bC5sZW5ndGg7KyttKXt2YXIgbj1nW2xbbV1dLG89MDtpZih2b2lkIDAhPT1kW25dKW89ZFtuXTtlbHNle2Zvcih2YXIgcD1uLnNwbGl0KFwiL1wiKSxxPTA7cTxwLmxlbmd0aDtxKyspcFtxXT1wYXJzZUludChwW3FdKS0xO289ZFtuXT1hLnZlcnRpY2VzLmxlbmd0aCxhLnZlcnRpY2VzLnB1c2goYy52W3BbMF1dLmNvcHkoKSksYy52dFtwWzFdXT9hLnV2cy5wdXNoKGMudnRbcFsxXV0uc2xpY2UoKSk6YS51dnMucHVzaChbMCwwXSksYy52bltwWzJdXSYmYS52ZXJ0ZXhOb3JtYWxzLnB1c2goYy52bltwWzJdXS5jb3B5KCkpfWsucHVzaChvKX1rWzBdIT09a1sxXSYma1swXSE9PWtbMl0mJmtbMV0hPT1rWzJdJiZhLmZhY2VzLnB1c2goayl9fXJldHVybiAwPT09YS52ZXJ0ZXhOb3JtYWxzLmxlbmd0aCYmYS5jb21wdXRlTm9ybWFscygpLGF9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKTthKFwiLi9wNS5HZW9tZXRyeVwiKSxlLnByb3RvdHlwZS5sb2FkTW9kZWw9ZnVuY3Rpb24oYSl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZE1vZGVsXCIsYXJndW1lbnRzKTt2YXIgYixjLGY7XCJib29sZWFuXCI9PXR5cGVvZiBhcmd1bWVudHNbMV0/KGI9YXJndW1lbnRzWzFdLGM9YXJndW1lbnRzWzJdLGY9YXJndW1lbnRzWzNdKTooYj0hMSxjPWFyZ3VtZW50c1sxXSxmPWFyZ3VtZW50c1syXSk7dmFyIGc9bmV3IGUuR2VvbWV0cnk7Zy5naWQ9YStcInxcIitiO3ZhciBoPXRoaXM7cmV0dXJuIHRoaXMubG9hZFN0cmluZ3MoYSxmdW5jdGlvbihhKXtkKGcsYSksYiYmZy5ub3JtYWxpemUoKSxoLl9kZWNyZW1lbnRQcmVsb2FkKCksXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmYyhnKX0uYmluZCh0aGlzKSxmKSxnfSxlLnByb3RvdHlwZS5tb2RlbD1mdW5jdGlvbihhKXt0aGlzLl9hc3NlcnQzZChcIm1vZGVsXCIpLGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1vZGVsXCIsYXJndW1lbnRzKSxhLnZlcnRpY2VzLmxlbmd0aD4wJiYodGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goYS5naWQpfHwoYS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhhLmdpZCxhKSksdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnMoYS5naWQpKX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5HZW9tZXRyeVwiOjcwfV0sNjg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuL3A1LlRleHR1cmVcIiksZC5wcm90b3R5cGUubG9hZFNoYWRlcj1mdW5jdGlvbihhLGIpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRTaGFkZXJcIixhcmd1bWVudHMpO3ZhciBjPW5ldyBkLlNoYWRlcixlPXRoaXMsZj0hMSxnPSExO3JldHVybiB0aGlzLmxvYWRTdHJpbmdzKGIsZnVuY3Rpb24oYSl7Yy5fZnJhZ1NyYz1hLmpvaW4oXCJcXG5cIiksZj0hMCxnJiZlLl9kZWNyZW1lbnRQcmVsb2FkKCl9KSx0aGlzLmxvYWRTdHJpbmdzKGEsZnVuY3Rpb24oYSl7Yy5fdmVydFNyYz1hLmpvaW4oXCJcXG5cIiksZz0hMCxmJiZlLl9kZWNyZW1lbnRQcmVsb2FkKCl9KSxjfSxkLnByb3RvdHlwZS5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJjcmVhdGVTaGFkZXJcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlU2hhZGVyXCIsYXJndW1lbnRzKSxuZXcgZC5TaGFkZXIodGhpcy5fcmVuZGVyZXIsYSxiKX0sZC5wcm90b3R5cGUuc2hhZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInNoYWRlclwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzaGFkZXJcIixhcmd1bWVudHMpLHZvaWQgMD09PWEuX3JlbmRlcmVyJiYoYS5fcmVuZGVyZXI9dGhpcy5fcmVuZGVyZXIpLGEuaXNTdHJva2VTaGFkZXIoKT90aGlzLl9yZW5kZXJlci5zZXRTdHJva2VTaGFkZXIoYSk6dGhpcy5fcmVuZGVyZXIuc2V0RmlsbFNoYWRlcihhKSx0aGlzfSxkLnByb3RvdHlwZS5ub3JtYWxNYXRlcmlhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcIm5vcm1hbE1hdGVyaWFsXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5vcm1hbE1hdGVyaWFsXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5kcmF3TW9kZT1lLkZJTEwsdGhpcy5fcmVuZGVyZXIuc2V0RmlsbFNoYWRlcih0aGlzLl9yZW5kZXJlci5fZ2V0Tm9ybWFsU2hhZGVyKCkpLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvcj1bMSwxLDEsMV0sdGhpcy5ub1N0cm9rZSgpLHRoaXN9LGQucHJvdG90eXBlLnRleHR1cmU9ZnVuY3Rpb24oYSl7dGhpcy5fYXNzZXJ0M2QoXCJ0ZXh0dXJlXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHR1cmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmRyYXdNb2RlPWUuVEVYVFVSRTt2YXIgYj10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gYi5zZXRVbmlmb3JtKFwidVNwZWN1bGFyXCIsITEpLGIuc2V0VW5pZm9ybShcImlzVGV4dHVyZVwiLCEwKSxiLnNldFVuaWZvcm0oXCJ1U2FtcGxlclwiLGEpLHRoaXMubm9TdHJva2UoKSx0aGlzfSxkLnByb3RvdHlwZS5hbWJpZW50TWF0ZXJpYWw9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJhbWJpZW50TWF0ZXJpYWxcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYW1iaWVudE1hdGVyaWFsXCIsYXJndW1lbnRzKTt2YXIgZj1kLnByb3RvdHlwZS5jb2xvci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yPWYuX2FycmF5O3ZhciBnPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBnLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvciksZy5zZXRVbmlmb3JtKFwidVNwZWN1bGFyXCIsITEpLGcuc2V0VW5pZm9ybShcImlzVGV4dHVyZVwiLCExKSx0aGlzfSxkLnByb3RvdHlwZS5zcGVjdWxhck1hdGVyaWFsPWZ1bmN0aW9uKGEsYixjLGUpe3RoaXMuX2Fzc2VydDNkKFwic3BlY3VsYXJNYXRlcmlhbFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzcGVjdWxhck1hdGVyaWFsXCIsYXJndW1lbnRzKTt2YXIgZj1kLnByb3RvdHlwZS5jb2xvci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yPWYuX2FycmF5O3ZhciBnPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBnLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvciksZy5zZXRVbmlmb3JtKFwidVNwZWN1bGFyXCIsITApLGcuc2V0VW5pZm9ybShcImlzVGV4dHVyZVwiLCExKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9hcHBseUNvbG9yQmxlbmQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5HTCxjPXRoaXMuZHJhd01vZGU9PT1lLlRFWFRVUkU7cmV0dXJuIGN8fGFbYS5sZW5ndGgtMV08MT8oYi5kZXB0aE1hc2soYyksYi5lbmFibGUoYi5CTEVORCksYi5ibGVuZEVxdWF0aW9uKGIuRlVOQ19BREQpLGIuYmxlbmRGdW5jKGIuU1JDX0FMUEhBLGIuT05FX01JTlVTX1NSQ19BTFBIQSkpOihiLmRlcHRoTWFzayghMCksYi5kaXNhYmxlKGIuQkxFTkQpKSxhfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5UZXh0dXJlXCI6NzZ9XSw2OTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuY2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwiY2FtZXJhXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNhbWVyYVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmEuYXBwbHkodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYSxhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLnBlcnNwZWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwicGVyc3BlY3RpdmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicGVyc3BlY3RpdmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEucGVyc3BlY3RpdmUuYXBwbHkodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYSxhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLm9ydGhvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwib3J0aG9cIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwib3J0aG9cIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEub3J0aG8uYXBwbHkodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYSxhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLmNyZWF0ZUNhbWVyYT1mdW5jdGlvbigpe3RoaXMuX2Fzc2VydDNkKFwiY3JlYXRlQ2FtZXJhXCIpO3ZhciBhPW5ldyBkLkNhbWVyYSh0aGlzLl9yZW5kZXJlcik7cmV0dXJuIGEuX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3MoKSxhLl9zZXREZWZhdWx0Q2FtZXJhKCksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYT1hLGF9LGQuQ2FtZXJhPWZ1bmN0aW9uKGEpe3RoaXMuX3JlbmRlcmVyPWEsdGhpcy5jYW1lcmFUeXBlPVwiZGVmYXVsdFwiLHRoaXMuY2FtZXJhTWF0cml4PW5ldyBkLk1hdHJpeCx0aGlzLnByb2pNYXRyaXg9bmV3IGQuTWF0cml4fSxkLkNhbWVyYS5wcm90b3R5cGUucGVyc3BlY3RpdmU9ZnVuY3Rpb24oYSxiLGMsZSl7dm9pZCAwPT09YT8oYT10aGlzLmRlZmF1bHRDYW1lcmFGT1YsdGhpcy5jYW1lcmFGT1Y9YSk6dGhpcy5jYW1lcmFGT1Y9dGhpcy5fcmVuZGVyZXIuX3BJbnN0Ll90b1JhZGlhbnMoYSksdm9pZCAwPT09YiYmKGI9dGhpcy5kZWZhdWx0QXNwZWN0UmF0aW8pLHZvaWQgMD09PWMmJihjPXRoaXMuZGVmYXVsdENhbWVyYU5lYXIpLHZvaWQgMD09PWUmJihlPXRoaXMuZGVmYXVsdENhbWVyYUZhciksYzw9MWUtNCYmKGM9LjAxLGNvbnNvbGUubG9nKFwiQXZvaWQgcGVyc3BlY3RpdmUgbmVhciBwbGFuZSB2YWx1ZXMgY2xvc2UgdG8gb3IgYmVsb3cgMC4gU2V0dGluZyB2YWx1ZSB0byAwLjAxLlwiKSksZTxjJiZjb25zb2xlLmxvZyhcIlBlcnNwZWN0aXZlIGZhciBwbGFuZSB2YWx1ZSBpcyBsZXNzIHRoYW4gbmVhciBwbGFuZSB2YWx1ZS4gTm90aGluZyB3aWxsIGJlIHNob3duLlwiKSx0aGlzLmNhbWVyYUZPVj10aGlzLl9yZW5kZXJlci5fcEluc3QuX3RvUmFkaWFucyhhKSx0aGlzLmFzcGVjdFJhdGlvPWIsdGhpcy5jYW1lcmFOZWFyPWMsdGhpcy5jYW1lcmFGYXI9ZSx0aGlzLnByb2pNYXRyaXg9ZC5NYXRyaXguaWRlbnRpdHkoKTt2YXIgZj0xL01hdGgudGFuKHRoaXMuY2FtZXJhRk9WLzIpLGc9MS8odGhpcy5jYW1lcmFOZWFyLXRoaXMuY2FtZXJhRmFyKTt0aGlzLnByb2pNYXRyaXguc2V0KGYvYiwwLDAsMCwwLC1mLDAsMCwwLDAsKGUrYykqZywtMSwwLDAsMiplKmMqZywwKSx0aGlzLl9pc0FjdGl2ZSgpJiZ0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5zZXQodGhpcy5wcm9qTWF0cml4Lm1hdDRbMF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbM10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbN10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTBdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzExXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTNdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzE0XSx0aGlzLnByb2pNYXRyaXgubWF0NFsxNV0pLHRoaXMuY2FtZXJhVHlwZT1cImN1c3RvbVwifSxkLkNhbWVyYS5wcm90b3R5cGUub3J0aG89ZnVuY3Rpb24oYSxiLGMsZSxmLGcpe3ZvaWQgMD09PWEmJihhPS10aGlzLl9yZW5kZXJlci53aWR0aC8yKSx2b2lkIDA9PT1iJiYoYj0rdGhpcy5fcmVuZGVyZXIud2lkdGgvMiksdm9pZCAwPT09YyYmKGM9LXRoaXMuX3JlbmRlcmVyLmhlaWdodC8yKSx2b2lkIDA9PT1lJiYoZT0rdGhpcy5fcmVuZGVyZXIuaGVpZ2h0LzIpLHZvaWQgMD09PWYmJihmPTApLHZvaWQgMD09PWcmJihnPU1hdGgubWF4KHRoaXMuX3JlbmRlcmVyLndpZHRoLHRoaXMuX3JlbmRlcmVyLmhlaWdodCkpO3ZhciBoPWItYSxpPWUtYyxqPWctZixrPTIvaCxsPTIvaSxtPS0yL2osbj0tKGIrYSkvaCxvPS0oZStjKS9pLHA9LShnK2YpL2o7dGhpcy5wcm9qTWF0cml4PWQuTWF0cml4LmlkZW50aXR5KCksdGhpcy5wcm9qTWF0cml4LnNldChrLDAsMCwwLDAsLWwsMCwwLDAsMCxtLDAsbixvLHAsMSksdGhpcy5faXNBY3RpdmUoKSYmdGhpcy5fcmVuZGVyZXIudVBNYXRyaXguc2V0KHRoaXMucHJvak1hdHJpeC5tYXQ0WzBdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzFdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzJdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzNdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzRdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzVdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzZdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzddLHRoaXMucHJvak1hdHJpeC5tYXQ0WzhdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzldLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEwXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTJdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEzXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxNF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTVdKSx0aGlzLmNhbWVyYVR5cGU9XCJjdXN0b21cIn0sZC5DYW1lcmEucHJvdG90eXBlLl9yb3RhdGVWaWV3PWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXRoaXMuY2VudGVyWCxnPXRoaXMuY2VudGVyWSxoPXRoaXMuY2VudGVyWjtmLT10aGlzLmV5ZVgsZy09dGhpcy5leWVZLGgtPXRoaXMuZXllWjt2YXIgaT1kLk1hdHJpeC5pZGVudGl0eSh0aGlzLl9yZW5kZXJlci5fcEluc3QpO2kucm90YXRlKGEsYixjLGUpO3ZhciBqPVtmKmkubWF0NFswXStnKmkubWF0NFs0XStoKmkubWF0NFs4XSxmKmkubWF0NFsxXStnKmkubWF0NFs1XStoKmkubWF0NFs5XSxmKmkubWF0NFsyXStnKmkubWF0NFs2XStoKmkubWF0NFsxMF1dO2pbMF0rPXRoaXMuZXllWCxqWzFdKz10aGlzLmV5ZVksalsyXSs9dGhpcy5leWVaLHRoaXMuY2FtZXJhKHRoaXMuZXllWCx0aGlzLmV5ZVksdGhpcy5leWVaLGpbMF0salsxXSxqWzJdLHRoaXMudXBYLHRoaXMudXBZLHRoaXMudXBaKX0sZC5DYW1lcmEucHJvdG90eXBlLnBhbj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9nZXRMb2NhbEF4ZXMoKTt0aGlzLl9yb3RhdGVWaWV3KGEsYi55WzBdLGIueVsxXSxiLnlbMl0pfSxkLkNhbWVyYS5wcm90b3R5cGUudGlsdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9nZXRMb2NhbEF4ZXMoKTt0aGlzLl9yb3RhdGVWaWV3KGEsYi54WzBdLGIueFsxXSxiLnhbMl0pfSxkLkNhbWVyYS5wcm90b3R5cGUubG9va0F0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLmNhbWVyYSh0aGlzLmV5ZVgsdGhpcy5leWVZLHRoaXMuZXllWixhLGIsYyx0aGlzLnVwWCx0aGlzLnVwWSx0aGlzLnVwWil9LGQuQ2FtZXJhLnByb3RvdHlwZS5jYW1lcmE9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGkpe3ZvaWQgMD09PWEmJihhPXRoaXMuZGVmYXVsdEV5ZVgsYj10aGlzLmRlZmF1bHRFeWVZLGM9dGhpcy5kZWZhdWx0RXllWixkPWEsZT1iLGY9MCxnPTAsaD0xLGk9MCksdGhpcy5leWVYPWEsdGhpcy5leWVZPWIsdGhpcy5leWVaPWMsdGhpcy5jZW50ZXJYPWQsdGhpcy5jZW50ZXJZPWUsdGhpcy5jZW50ZXJaPWYsdGhpcy51cFg9Zyx0aGlzLnVwWT1oLHRoaXMudXBaPWk7dmFyIGo9dGhpcy5fZ2V0TG9jYWxBeGVzKCk7dGhpcy5jYW1lcmFNYXRyaXguc2V0KGoueFswXSxqLnlbMF0sai56WzBdLDAsai54WzFdLGoueVsxXSxqLnpbMV0sMCxqLnhbMl0sai55WzJdLGouelsyXSwwLDAsMCwwLDEpO3ZhciBrPS1hLGw9LWIsbT0tYztyZXR1cm4gdGhpcy5jYW1lcmFNYXRyaXgudHJhbnNsYXRlKFtrLGwsbV0pLHRoaXMuX2lzQWN0aXZlKCkmJnRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5zZXQodGhpcy5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzFdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzRdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzddLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzEwXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzEzXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSksdGhpc30sZC5DYW1lcmEucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldExvY2FsQXhlcygpLGU9W2QueFswXSphLGQueFsxXSphLGQueFsyXSphXSxmPVtkLnlbMF0qYixkLnlbMV0qYixkLnlbMl0qYl0sZz1bZC56WzBdKmMsZC56WzFdKmMsZC56WzJdKmNdO3RoaXMuY2FtZXJhKHRoaXMuZXllWCtlWzBdK2ZbMF0rZ1swXSx0aGlzLmV5ZVkrZVsxXStmWzFdK2dbMV0sdGhpcy5leWVaK2VbMl0rZlsyXStnWzJdLHRoaXMuY2VudGVyWCtlWzBdK2ZbMF0rZ1swXSx0aGlzLmNlbnRlclkrZVsxXStmWzFdK2dbMV0sdGhpcy5jZW50ZXJaK2VbMl0rZlsyXStnWzJdLDAsMSwwKX0sZC5DYW1lcmEucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLXRoaXMuZXllWCxlPWItdGhpcy5leWVZLGY9Yy10aGlzLmV5ZVo7dGhpcy5jYW1lcmEoYSxiLGMsdGhpcy5jZW50ZXJYK2QsdGhpcy5jZW50ZXJZK2UsdGhpcy5jZW50ZXJaK2YsMCwxLDApfSxkLkNhbWVyYS5wcm90b3R5cGUuX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3M9ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRDYW1lcmFGT1Y9NjAvMTgwKk1hdGguUEksXG50aGlzLmRlZmF1bHRBc3BlY3RSYXRpbz10aGlzLl9yZW5kZXJlci53aWR0aC90aGlzLl9yZW5kZXJlci5oZWlnaHQsdGhpcy5kZWZhdWx0RXllWD0wLHRoaXMuZGVmYXVsdEV5ZVk9MCx0aGlzLmRlZmF1bHRFeWVaPXRoaXMuX3JlbmRlcmVyLmhlaWdodC8yL01hdGgudGFuKHRoaXMuZGVmYXVsdENhbWVyYUZPVi8yKSx0aGlzLmRlZmF1bHRDZW50ZXJYPTAsdGhpcy5kZWZhdWx0Q2VudGVyWT0wLHRoaXMuZGVmYXVsdENlbnRlclo9MCx0aGlzLmRlZmF1bHRDYW1lcmFOZWFyPS4xKnRoaXMuZGVmYXVsdEV5ZVosdGhpcy5kZWZhdWx0Q2FtZXJhRmFyPTEwKnRoaXMuZGVmYXVsdEV5ZVp9LGQuQ2FtZXJhLnByb3RvdHlwZS5fc2V0RGVmYXVsdENhbWVyYT1mdW5jdGlvbigpe3RoaXMuY2FtZXJhRk9WPXRoaXMuZGVmYXVsdENhbWVyYUZPVix0aGlzLmFzcGVjdFJhdGlvPXRoaXMuZGVmYXVsdEFzcGVjdFJhdGlvLHRoaXMuZXllWD10aGlzLmRlZmF1bHRFeWVYLHRoaXMuZXllWT10aGlzLmRlZmF1bHRFeWVZLHRoaXMuZXllWj10aGlzLmRlZmF1bHRFeWVaLHRoaXMuY2VudGVyWD10aGlzLmRlZmF1bHRDZW50ZXJYLHRoaXMuY2VudGVyWT10aGlzLmRlZmF1bHRDZW50ZXJZLHRoaXMuY2VudGVyWj10aGlzLmRlZmF1bHRDZW50ZXJaLHRoaXMudXBYPTAsdGhpcy51cFk9MSx0aGlzLnVwWj0wLHRoaXMuY2FtZXJhTmVhcj10aGlzLmRlZmF1bHRDYW1lcmFOZWFyLHRoaXMuY2FtZXJhRmFyPXRoaXMuZGVmYXVsdENhbWVyYUZhcix0aGlzLnBlcnNwZWN0aXZlKCksdGhpcy5jYW1lcmEoKSx0aGlzLmNhbWVyYVR5cGU9XCJkZWZhdWx0XCJ9LGQuQ2FtZXJhLnByb3RvdHlwZS5fcmVzaXplPWZ1bmN0aW9uKCl7XCJkZWZhdWx0XCI9PT10aGlzLmNhbWVyYVR5cGU/KHRoaXMuX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3MoKSx0aGlzLl9zZXREZWZhdWx0Q2FtZXJhKCkpOnRoaXMucGVyc3BlY3RpdmUodGhpcy5jYW1lcmFGT1YsdGhpcy5fcmVuZGVyZXIud2lkdGgvdGhpcy5fcmVuZGVyZXIuaGVpZ2h0KX0sZC5DYW1lcmEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZC5DYW1lcmEodGhpcy5fcmVuZGVyZXIpO3JldHVybiBhLmNhbWVyYUZPVj10aGlzLmNhbWVyYUZPVixhLmFzcGVjdFJhdGlvPXRoaXMuYXNwZWN0UmF0aW8sYS5leWVYPXRoaXMuZXllWCxhLmV5ZVk9dGhpcy5leWVZLGEuZXllWj10aGlzLmV5ZVosYS5jZW50ZXJYPXRoaXMuY2VudGVyWCxhLmNlbnRlclk9dGhpcy5jZW50ZXJZLGEuY2VudGVyWj10aGlzLmNlbnRlclosYS5jYW1lcmFOZWFyPXRoaXMuY2FtZXJhTmVhcixhLmNhbWVyYUZhcj10aGlzLmNhbWVyYUZhcixhLmNhbWVyYVR5cGU9dGhpcy5jYW1lcmFUeXBlLGEuY2FtZXJhTWF0cml4PXRoaXMuY2FtZXJhTWF0cml4LmNvcHkoKSxhLnByb2pNYXRyaXg9dGhpcy5wcm9qTWF0cml4LmNvcHkoKSxhfSxkLkNhbWVyYS5wcm90b3R5cGUuX2dldExvY2FsQXhlcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZXllWC10aGlzLmNlbnRlclgsYj10aGlzLmV5ZVktdGhpcy5jZW50ZXJZLGM9dGhpcy5leWVaLXRoaXMuY2VudGVyWixkPU1hdGguc3FydChhKmErYipiK2MqYyk7MCE9PWQmJihhLz1kLGIvPWQsYy89ZCk7dmFyIGU9dGhpcy51cFgsZj10aGlzLnVwWSxnPXRoaXMudXBaLGg9ZipjLWcqYixpPS1lKmMrZyphLGo9ZSpiLWYqYTtlPWIqai1jKmksZj0tYSpqK2MqaCxnPWEqaS1iKmg7dmFyIGs9TWF0aC5zcXJ0KGgqaCtpKmkraipqKTswIT09ayYmKGgvPWssaS89ayxqLz1rKTt2YXIgbD1NYXRoLnNxcnQoZSplK2YqZitnKmcpO3JldHVybiAwIT09bCYmKGUvPWwsZi89bCxnLz1sKSx7eDpbaCxpLGpdLHk6W2UsZixnXSx6OlthLGIsY119fSxkLkNhbWVyYS5wcm90b3R5cGUuX29yYml0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmV5ZVgtdGhpcy5jZW50ZXJYLGU9dGhpcy5leWVZLXRoaXMuY2VudGVyWSxmPXRoaXMuZXllWi10aGlzLmNlbnRlclosZz1NYXRoLnNxcnQoZCpkK2UqZStmKmYpLGg9TWF0aC5hdGFuMihkLGYpLGk9TWF0aC5hY29zKE1hdGgubWF4KC0xLE1hdGgubWluKDEsZS9nKSkpO2grPWEsaSs9YixnKz1jLGc8MCYmKGc9LjEpLGk+TWF0aC5QST9pPU1hdGguUEk6aTw9MCYmKGk9LjAwMSk7dmFyIGo9TWF0aC5zaW4oaSkqZypNYXRoLnNpbihoKSxrPU1hdGguY29zKGkpKmcsbD1NYXRoLnNpbihpKSpnKk1hdGguY29zKGgpO3RoaXMuY2FtZXJhKGordGhpcy5jZW50ZXJYLGsrdGhpcy5jZW50ZXJZLGwrdGhpcy5jZW50ZXJaLHRoaXMuY2VudGVyWCx0aGlzLmNlbnRlclksdGhpcy5jZW50ZXJaLDAsMSwwKX0sZC5DYW1lcmEucHJvdG90eXBlLl9pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzPT09dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYX0sZC5wcm90b3R5cGUuc2V0Q2FtZXJhPWZ1bmN0aW9uKGEpe3RoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmE9YSx0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5zZXQoYS5wcm9qTWF0cml4Lm1hdDRbMF0sYS5wcm9qTWF0cml4Lm1hdDRbMV0sYS5wcm9qTWF0cml4Lm1hdDRbMl0sYS5wcm9qTWF0cml4Lm1hdDRbM10sYS5wcm9qTWF0cml4Lm1hdDRbNF0sYS5wcm9qTWF0cml4Lm1hdDRbNV0sYS5wcm9qTWF0cml4Lm1hdDRbNl0sYS5wcm9qTWF0cml4Lm1hdDRbN10sYS5wcm9qTWF0cml4Lm1hdDRbOF0sYS5wcm9qTWF0cml4Lm1hdDRbOV0sYS5wcm9qTWF0cml4Lm1hdDRbMTBdLGEucHJvak1hdHJpeC5tYXQ0WzExXSxhLnByb2pNYXRyaXgubWF0NFsxMl0sYS5wcm9qTWF0cml4Lm1hdDRbMTNdLGEucHJvak1hdHJpeC5tYXQ0WzE0XSxhLnByb2pNYXRyaXgubWF0NFsxNV0pfSxiLmV4cG9ydHM9ZC5DYW1lcmF9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuR2VvbWV0cnk9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLnZlcnRpY2VzPVtdLHRoaXMubGluZVZlcnRpY2VzPVtdLHRoaXMubGluZU5vcm1hbHM9W10sdGhpcy52ZXJ0ZXhOb3JtYWxzPVtdLHRoaXMuZmFjZXM9W10sdGhpcy51dnM9W10sdGhpcy5lZGdlcz1bXSx0aGlzLmRldGFpbFg9dm9pZCAwIT09YT9hOjEsdGhpcy5kZXRhaWxZPXZvaWQgMCE9PWI/YjoxLGMgaW5zdGFuY2VvZiBGdW5jdGlvbiYmYy5jYWxsKHRoaXMpLHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLmNvbXB1dGVGYWNlcz1mdW5jdGlvbigpe3RoaXMuZmFjZXMubGVuZ3RoPTA7Zm9yKHZhciBhLGIsYyxkLGU9dGhpcy5kZXRhaWxYKzEsZj0wO2Y8dGhpcy5kZXRhaWxZO2YrKylmb3IodmFyIGc9MDtnPHRoaXMuZGV0YWlsWDtnKyspYT1mKmUrZyxiPWYqZStnKzEsYz0oZisxKSplK2crMSxkPShmKzEpKmUrZyx0aGlzLmZhY2VzLnB1c2goW2EsYixkXSksdGhpcy5mYWNlcy5wdXNoKFtkLGIsY10pO3JldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5fZ2V0RmFjZU5vcm1hbD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmZhY2VzW2FdLGM9dGhpcy52ZXJ0aWNlc1tiWzBdXSxlPXRoaXMudmVydGljZXNbYlsxXV0sZj10aGlzLnZlcnRpY2VzW2JbMl1dLGc9ZC5WZWN0b3Iuc3ViKGUsYyksaD1kLlZlY3Rvci5zdWIoZixjKSxpPWQuVmVjdG9yLmNyb3NzKGcsaCksaj1kLlZlY3Rvci5tYWcoaSksaz1qLyhkLlZlY3Rvci5tYWcoZykqZC5WZWN0b3IubWFnKGgpKTtyZXR1cm4gMD09PWt8fGlzTmFOKGspPyhjb25zb2xlLndhcm4oXCJwNS5HZW9tZXRyeS5wcm90b3R5cGUuX2dldEZhY2VOb3JtYWw6XCIsXCJmYWNlIGhhcyBjb2xpbmVhciBzaWRlcyBvciBhIHJlcGVhdGVkIHZlcnRleFwiKSxpKTooaz4xJiYoaz0xKSxpLm11bHQoTWF0aC5hc2luKGspL2opKX0sZC5HZW9tZXRyeS5wcm90b3R5cGUuY29tcHV0ZU5vcm1hbHM9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMudmVydGV4Tm9ybWFscyxjPXRoaXMudmVydGljZXMsZT10aGlzLmZhY2VzO2ZvcihiLmxlbmd0aD0wLGE9MDthPGMubGVuZ3RoOysrYSliLnB1c2gobmV3IGQuVmVjdG9yKTtmb3IodmFyIGY9MDtmPGUubGVuZ3RoOysrZilmb3IodmFyIGc9ZVtmXSxoPXRoaXMuX2dldEZhY2VOb3JtYWwoZiksaT0wO2k8MzsrK2kpe3ZhciBqPWdbaV07YltqXS5hZGQoaCl9Zm9yKGE9MDthPGMubGVuZ3RoOysrYSliW2FdLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5hdmVyYWdlTm9ybWFscz1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspe3ZhciBiPXRoaXMuZGV0YWlsWCsxLGM9ZC5WZWN0b3IuYWRkKHRoaXMudmVydGV4Tm9ybWFsc1thKmJdLHRoaXMudmVydGV4Tm9ybWFsc1thKmIrdGhpcy5kZXRhaWxYXSk7Yz1kLlZlY3Rvci5kaXYoYywyKSx0aGlzLnZlcnRleE5vcm1hbHNbYSpiXT1jLHRoaXMudmVydGV4Tm9ybWFsc1thKmIrdGhpcy5kZXRhaWxYXT1jfXJldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5hdmVyYWdlUG9sZU5vcm1hbHM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IGQuVmVjdG9yKDAsMCwwKSxiPTA7Yjx0aGlzLmRldGFpbFg7YisrKWEuYWRkKHRoaXMudmVydGV4Tm9ybWFsc1tiXSk7Zm9yKGE9ZC5WZWN0b3IuZGl2KGEsdGhpcy5kZXRhaWxYKSxiPTA7Yjx0aGlzLmRldGFpbFg7YisrKXRoaXMudmVydGV4Tm9ybWFsc1tiXT1hO2ZvcihhPW5ldyBkLlZlY3RvcigwLDAsMCksYj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xO2I+dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMS10aGlzLmRldGFpbFg7Yi0tKWEuYWRkKHRoaXMudmVydGV4Tm9ybWFsc1tiXSk7Zm9yKGE9ZC5WZWN0b3IuZGl2KGEsdGhpcy5kZXRhaWxYKSxiPXRoaXMudmVydGljZXMubGVuZ3RoLTE7Yj50aGlzLnZlcnRpY2VzLmxlbmd0aC0xLXRoaXMuZGV0YWlsWDtiLS0pdGhpcy52ZXJ0ZXhOb3JtYWxzW2JdPWE7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLl9tYWtlVHJpYW5nbGVFZGdlcz1mdW5jdGlvbigpe2lmKHRoaXMuZWRnZXMubGVuZ3RoPTAsQXJyYXkuaXNBcnJheSh0aGlzLnN0cm9rZUluZGljZXMpKWZvcih2YXIgYT0wLGI9dGhpcy5zdHJva2VJbmRpY2VzLmxlbmd0aDthPGI7YSsrKXRoaXMuZWRnZXMucHVzaCh0aGlzLnN0cm9rZUluZGljZXNbYV0pO2Vsc2UgZm9yKHZhciBjPTA7Yzx0aGlzLmZhY2VzLmxlbmd0aDtjKyspdGhpcy5lZGdlcy5wdXNoKFt0aGlzLmZhY2VzW2NdWzBdLHRoaXMuZmFjZXNbY11bMV1dKSx0aGlzLmVkZ2VzLnB1c2goW3RoaXMuZmFjZXNbY11bMV0sdGhpcy5mYWNlc1tjXVsyXV0pLHRoaXMuZWRnZXMucHVzaChbdGhpcy5mYWNlc1tjXVsyXSx0aGlzLmZhY2VzW2NdWzBdXSk7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLl9lZGdlc1RvVmVydGljZXM9ZnVuY3Rpb24oKXt0aGlzLmxpbmVWZXJ0aWNlcy5sZW5ndGg9MCx0aGlzLmxpbmVOb3JtYWxzLmxlbmd0aD0wO2Zvcih2YXIgYT0wO2E8dGhpcy5lZGdlcy5sZW5ndGg7YSsrKXt2YXIgYj10aGlzLnZlcnRpY2VzW3RoaXMuZWRnZXNbYV1bMF1dLGM9dGhpcy52ZXJ0aWNlc1t0aGlzLmVkZ2VzW2FdWzFdXSxkPWMuY29weSgpLnN1YihiKS5ub3JtYWxpemUoKSxlPWIuYXJyYXkoKSxmPWIuYXJyYXkoKSxnPWMuYXJyYXkoKSxoPWMuYXJyYXkoKSxpPWQuYXJyYXkoKSxqPWQuYXJyYXkoKTtpLnB1c2goMSksai5wdXNoKC0xKSx0aGlzLmxpbmVOb3JtYWxzLnB1c2goaSxqLGksaSxqLGopLHRoaXMubGluZVZlcnRpY2VzLnB1c2goZSxmLGcsZyxmLGgpfXJldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnZlcnRpY2VzLmxlbmd0aD4wKXtmb3IodmFyIGE9dGhpcy52ZXJ0aWNlc1swXS5jb3B5KCksYj10aGlzLnZlcnRpY2VzWzBdLmNvcHkoKSxjPTA7Yzx0aGlzLnZlcnRpY2VzLmxlbmd0aDtjKyspYS54PU1hdGgubWF4KGEueCx0aGlzLnZlcnRpY2VzW2NdLngpLGIueD1NYXRoLm1pbihiLngsdGhpcy52ZXJ0aWNlc1tjXS54KSxhLnk9TWF0aC5tYXgoYS55LHRoaXMudmVydGljZXNbY10ueSksYi55PU1hdGgubWluKGIueSx0aGlzLnZlcnRpY2VzW2NdLnkpLGEuej1NYXRoLm1heChhLnosdGhpcy52ZXJ0aWNlc1tjXS56KSxiLno9TWF0aC5taW4oYi56LHRoaXMudmVydGljZXNbY10ueik7dmFyIGU9ZC5WZWN0b3IubGVycChhLGIsLjUpLGY9ZC5WZWN0b3Iuc3ViKGEsYiksZz1NYXRoLm1heChNYXRoLm1heChmLngsZi55KSxmLnopLGg9MjAwL2c7Zm9yKGM9MDtjPHRoaXMudmVydGljZXMubGVuZ3RoO2MrKyl0aGlzLnZlcnRpY2VzW2NdLnN1YihlKSx0aGlzLnZlcnRpY2VzW2NdLm11bHQoaCl9cmV0dXJuIHRoaXN9LGIuZXhwb3J0cz1kLkdlb21ldHJ5fSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDcxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPUFycmF5LGY9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheX07XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEZsb2F0MzJBcnJheSYmKGU9RmxvYXQzMkFycmF5LGY9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheXx8YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheX0pLGQuTWF0cml4PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxiPTA7YjxhLmxlbmd0aDsrK2IpYVtiXT1hcmd1bWVudHNbYl07cmV0dXJuIGEubGVuZ3RoJiZhW2EubGVuZ3RoLTFdaW5zdGFuY2VvZiBkJiYodGhpcy5wNT1hW2EubGVuZ3RoLTFdKSxcIm1hdDNcIj09PWFbMF0/dGhpcy5tYXQzPUFycmF5LmlzQXJyYXkoYVsxXSk/YVsxXTpuZXcgZShbMSwwLDAsMCwxLDAsMCwwLDFdKTp0aGlzLm1hdDQ9QXJyYXkuaXNBcnJheShhWzBdKT9hWzBdOm5ldyBlKFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSksdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLnNldD1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuTWF0cml4Pyh0aGlzLm1hdDQ9YS5tYXQ0LHRoaXMpOmYoYSk/KHRoaXMubWF0ND1hLHRoaXMpOigxNj09PWFyZ3VtZW50cy5sZW5ndGgmJih0aGlzLm1hdDRbMF09YXJndW1lbnRzWzBdLHRoaXMubWF0NFsxXT1hcmd1bWVudHNbMV0sdGhpcy5tYXQ0WzJdPWFyZ3VtZW50c1syXSx0aGlzLm1hdDRbM109YXJndW1lbnRzWzNdLHRoaXMubWF0NFs0XT1hcmd1bWVudHNbNF0sdGhpcy5tYXQ0WzVdPWFyZ3VtZW50c1s1XSx0aGlzLm1hdDRbNl09YXJndW1lbnRzWzZdLHRoaXMubWF0NFs3XT1hcmd1bWVudHNbN10sdGhpcy5tYXQ0WzhdPWFyZ3VtZW50c1s4XSx0aGlzLm1hdDRbOV09YXJndW1lbnRzWzldLHRoaXMubWF0NFsxMF09YXJndW1lbnRzWzEwXSx0aGlzLm1hdDRbMTFdPWFyZ3VtZW50c1sxMV0sdGhpcy5tYXQ0WzEyXT1hcmd1bWVudHNbMTJdLHRoaXMubWF0NFsxM109YXJndW1lbnRzWzEzXSx0aGlzLm1hdDRbMTRdPWFyZ3VtZW50c1sxNF0sdGhpcy5tYXQ0WzE1XT1hcmd1bWVudHNbMTVdKSx0aGlzKX0sZC5NYXRyaXgucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgZC5NYXRyaXgodGhpcy5tYXQ0LHRoaXMucDUpfSxkLk1hdHJpeC5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkLk1hdHJpeCh0aGlzLnA1KTtyZXR1cm4gYS5tYXQ0WzBdPXRoaXMubWF0NFswXSxhLm1hdDRbMV09dGhpcy5tYXQ0WzFdLGEubWF0NFsyXT10aGlzLm1hdDRbMl0sYS5tYXQ0WzNdPXRoaXMubWF0NFszXSxhLm1hdDRbNF09dGhpcy5tYXQ0WzRdLGEubWF0NFs1XT10aGlzLm1hdDRbNV0sYS5tYXQ0WzZdPXRoaXMubWF0NFs2XSxhLm1hdDRbN109dGhpcy5tYXQ0WzddLGEubWF0NFs4XT10aGlzLm1hdDRbOF0sYS5tYXQ0WzldPXRoaXMubWF0NFs5XSxhLm1hdDRbMTBdPXRoaXMubWF0NFsxMF0sYS5tYXQ0WzExXT10aGlzLm1hdDRbMTFdLGEubWF0NFsxMl09dGhpcy5tYXQ0WzEyXSxhLm1hdDRbMTNdPXRoaXMubWF0NFsxM10sYS5tYXQ0WzE0XT10aGlzLm1hdDRbMTRdLGEubWF0NFsxNV09dGhpcy5tYXQ0WzE1XSxhfSxkLk1hdHJpeC5pZGVudGl0eT1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IGQuTWF0cml4KGEpfSxkLk1hdHJpeC5wcm90b3R5cGUudHJhbnNwb3NlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxnLGgsaTtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuTWF0cml4PyhiPWEubWF0NFsxXSxjPWEubWF0NFsyXSxlPWEubWF0NFszXSxnPWEubWF0NFs2XSxoPWEubWF0NFs3XSxpPWEubWF0NFsxMV0sdGhpcy5tYXQ0WzBdPWEubWF0NFswXSx0aGlzLm1hdDRbMV09YS5tYXQ0WzRdLHRoaXMubWF0NFsyXT1hLm1hdDRbOF0sdGhpcy5tYXQ0WzNdPWEubWF0NFsxMl0sdGhpcy5tYXQ0WzRdPWIsdGhpcy5tYXQ0WzVdPWEubWF0NFs1XSx0aGlzLm1hdDRbNl09YS5tYXQ0WzldLHRoaXMubWF0NFs3XT1hLm1hdDRbMTNdLHRoaXMubWF0NFs4XT1jLHRoaXMubWF0NFs5XT1nLHRoaXMubWF0NFsxMF09YS5tYXQ0WzEwXSx0aGlzLm1hdDRbMTFdPWEubWF0NFsxNF0sdGhpcy5tYXQ0WzEyXT1lLHRoaXMubWF0NFsxM109aCx0aGlzLm1hdDRbMTRdPWksdGhpcy5tYXQ0WzE1XT1hLm1hdDRbMTVdKTpmKGEpJiYoYj1hWzFdLGM9YVsyXSxlPWFbM10sZz1hWzZdLGg9YVs3XSxpPWFbMTFdLHRoaXMubWF0NFswXT1hWzBdLHRoaXMubWF0NFsxXT1hWzRdLHRoaXMubWF0NFsyXT1hWzhdLHRoaXMubWF0NFszXT1hWzEyXSx0aGlzLm1hdDRbNF09Yix0aGlzLm1hdDRbNV09YVs1XSx0aGlzLm1hdDRbNl09YVs5XSx0aGlzLm1hdDRbN109YVsxM10sdGhpcy5tYXQ0WzhdPWMsdGhpcy5tYXQ0WzldPWcsdGhpcy5tYXQ0WzEwXT1hWzEwXSx0aGlzLm1hdDRbMTFdPWFbMTRdLHRoaXMubWF0NFsxMl09ZSx0aGlzLm1hdDRbMTNdPWgsdGhpcy5tYXQ0WzE0XT1pLHRoaXMubWF0NFsxNV09YVsxNV0pLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHM7YSBpbnN0YW5jZW9mIGQuTWF0cml4PyhiPWEubWF0NFswXSxjPWEubWF0NFsxXSxlPWEubWF0NFsyXSxnPWEubWF0NFszXSxoPWEubWF0NFs0XSxpPWEubWF0NFs1XSxqPWEubWF0NFs2XSxrPWEubWF0NFs3XSxsPWEubWF0NFs4XSxtPWEubWF0NFs5XSxuPWEubWF0NFsxMF0sbz1hLm1hdDRbMTFdLHA9YS5tYXQ0WzEyXSxxPWEubWF0NFsxM10scj1hLm1hdDRbMTRdLHM9YS5tYXQ0WzE1XSk6ZihhKSYmKGI9YVswXSxjPWFbMV0sZT1hWzJdLGc9YVszXSxoPWFbNF0saT1hWzVdLGo9YVs2XSxrPWFbN10sbD1hWzhdLG09YVs5XSxuPWFbMTBdLG89YVsxMV0scD1hWzEyXSxxPWFbMTNdLHI9YVsxNF0scz1hWzE1XSk7dmFyIHQ9YippLWMqaCx1PWIqai1lKmgsdj1iKmstZypoLHc9YypqLWUqaSx4PWMqay1nKmkseT1lKmstZypqLHo9bCpxLW0qcCxBPWwqci1uKnAsQj1sKnMtbypwLEM9bSpyLW4qcSxEPW0qcy1vKnEsRT1uKnMtbypyLEY9dCpFLXUqRCt2KkMrdypCLXgqQSt5Kno7cmV0dXJuIEY/KEY9MS9GLHRoaXMubWF0NFswXT0oaSpFLWoqRCtrKkMpKkYsdGhpcy5tYXQ0WzFdPShlKkQtYypFLWcqQykqRix0aGlzLm1hdDRbMl09KHEqeS1yKngrcyp3KSpGLHRoaXMubWF0NFszXT0obip4LW0qeS1vKncpKkYsdGhpcy5tYXQ0WzRdPShqKkItaCpFLWsqQSkqRix0aGlzLm1hdDRbNV09KGIqRS1lKkIrZypBKSpGLHRoaXMubWF0NFs2XT0ocip2LXAqeS1zKnUpKkYsdGhpcy5tYXQ0WzddPShsKnktbip2K28qdSkqRix0aGlzLm1hdDRbOF09KGgqRC1pKkIrayp6KSpGLHRoaXMubWF0NFs5XT0oYypCLWIqRC1nKnopKkYsdGhpcy5tYXQ0WzEwXT0ocCp4LXEqditzKnQpKkYsdGhpcy5tYXQ0WzExXT0obSp2LWwqeC1vKnQpKkYsdGhpcy5tYXQ0WzEyXT0oaSpBLWgqQy1qKnopKkYsdGhpcy5tYXQ0WzEzXT0oYipDLWMqQStlKnopKkYsdGhpcy5tYXQ0WzE0XT0ocSp1LXAqdy1yKnQpKkYsdGhpcy5tYXQ0WzE1XT0obCp3LW0qdStuKnQpKkYsdGhpcyk6bnVsbH0sZC5NYXRyaXgucHJvdG90eXBlLmludmVydDN4Mz1mdW5jdGlvbigpe3ZhciBhPXRoaXMubWF0M1swXSxiPXRoaXMubWF0M1sxXSxjPXRoaXMubWF0M1syXSxkPXRoaXMubWF0M1szXSxlPXRoaXMubWF0M1s0XSxmPXRoaXMubWF0M1s1XSxnPXRoaXMubWF0M1s2XSxoPXRoaXMubWF0M1s3XSxpPXRoaXMubWF0M1s4XSxqPWkqZS1mKmgsaz0taSpkK2YqZyxsPWgqZC1lKmcsbT1hKmorYiprK2MqbDtyZXR1cm4gbT8obT0xL20sdGhpcy5tYXQzWzBdPWoqbSx0aGlzLm1hdDNbMV09KC1pKmIrYypoKSptLHRoaXMubWF0M1syXT0oZipiLWMqZSkqbSx0aGlzLm1hdDNbM109ayptLHRoaXMubWF0M1s0XT0oaSphLWMqZykqbSx0aGlzLm1hdDNbNV09KC1mKmErYypkKSptLHRoaXMubWF0M1s2XT1sKm0sdGhpcy5tYXQzWzddPSgtaCphK2IqZykqbSx0aGlzLm1hdDNbOF09KGUqYS1iKmQpKm0sdGhpcyk6bnVsbH0sZC5NYXRyaXgucHJvdG90eXBlLnRyYW5zcG9zZTN4Mz1mdW5jdGlvbihhKXt2YXIgYj1hWzFdLGM9YVsyXSxkPWFbNV07cmV0dXJuIHRoaXMubWF0M1sxXT1hWzNdLHRoaXMubWF0M1syXT1hWzZdLHRoaXMubWF0M1szXT1iLHRoaXMubWF0M1s1XT1hWzddLHRoaXMubWF0M1s2XT1jLHRoaXMubWF0M1s3XT1kLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5pbnZlcnNlVHJhbnNwb3NlPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PXRoaXMubWF0Mz9jb25zb2xlLmVycm9yKFwic29ycnksIHRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyB3aXRoIG1hdDNcIik6KHRoaXMubWF0M1swXT1hLm1hdDRbMF0sdGhpcy5tYXQzWzFdPWEubWF0NFsxXSx0aGlzLm1hdDNbMl09YS5tYXQ0WzJdLHRoaXMubWF0M1szXT1hLm1hdDRbNF0sdGhpcy5tYXQzWzRdPWEubWF0NFs1XSx0aGlzLm1hdDNbNV09YS5tYXQ0WzZdLHRoaXMubWF0M1s2XT1hLm1hdDRbOF0sdGhpcy5tYXQzWzddPWEubWF0NFs5XSx0aGlzLm1hdDNbOF09YS5tYXQ0WzEwXSk7dmFyIGI9dGhpcy5pbnZlcnQzeDMoKTtpZihiKWIudHJhbnNwb3NlM3gzKHRoaXMubWF0Myk7ZWxzZSBmb3IodmFyIGM9MDtjPDk7YysrKXRoaXMubWF0M1tjXT0wO3JldHVybiB0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuZGV0ZXJtaW5hbnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1hdDRbMF0qdGhpcy5tYXQ0WzVdLXRoaXMubWF0NFsxXSp0aGlzLm1hdDRbNF0sYj10aGlzLm1hdDRbMF0qdGhpcy5tYXQ0WzZdLXRoaXMubWF0NFsyXSp0aGlzLm1hdDRbNF0sYz10aGlzLm1hdDRbMF0qdGhpcy5tYXQ0WzddLXRoaXMubWF0NFszXSp0aGlzLm1hdDRbNF0sZD10aGlzLm1hdDRbMV0qdGhpcy5tYXQ0WzZdLXRoaXMubWF0NFsyXSp0aGlzLm1hdDRbNV0sZT10aGlzLm1hdDRbMV0qdGhpcy5tYXQ0WzddLXRoaXMubWF0NFszXSp0aGlzLm1hdDRbNV0sZj10aGlzLm1hdDRbMl0qdGhpcy5tYXQ0WzddLXRoaXMubWF0NFszXSp0aGlzLm1hdDRbNl0sZz10aGlzLm1hdDRbOF0qdGhpcy5tYXQ0WzEzXS10aGlzLm1hdDRbOV0qdGhpcy5tYXQ0WzEyXSxoPXRoaXMubWF0NFs4XSp0aGlzLm1hdDRbMTRdLXRoaXMubWF0NFsxMF0qdGhpcy5tYXQ0WzEyXSxpPXRoaXMubWF0NFs4XSp0aGlzLm1hdDRbMTVdLXRoaXMubWF0NFsxMV0qdGhpcy5tYXQ0WzEyXSxqPXRoaXMubWF0NFs5XSp0aGlzLm1hdDRbMTRdLXRoaXMubWF0NFsxMF0qdGhpcy5tYXQ0WzEzXSxrPXRoaXMubWF0NFs5XSp0aGlzLm1hdDRbMTVdLXRoaXMubWF0NFsxMV0qdGhpcy5tYXQ0WzEzXTtyZXR1cm4gYSoodGhpcy5tYXQ0WzEwXSp0aGlzLm1hdDRbMTVdLXRoaXMubWF0NFsxMV0qdGhpcy5tYXQ0WzE0XSktYiprK2MqaitkKmktZSpoK2YqZ30sZC5NYXRyaXgucHJvdG90eXBlLm11bHQ9ZnVuY3Rpb24oYSl7dmFyIGI7aWYoYT09PXRoaXN8fGE9PT10aGlzLm1hdDQpYj10aGlzLmNvcHkoKS5tYXQ0O2Vsc2UgaWYoYSBpbnN0YW5jZW9mIGQuTWF0cml4KWI9YS5tYXQ0O2Vsc2V7aWYoIWYoYSkpcmV0dXJuO2I9YX12YXIgYz10aGlzLm1hdDRbMF0sZT10aGlzLm1hdDRbMV0sZz10aGlzLm1hdDRbMl0saD10aGlzLm1hdDRbM107cmV0dXJuIHRoaXMubWF0NFswXT1jKmJbMF0rZSpiWzRdK2cqYls4XStoKmJbMTJdLHRoaXMubWF0NFsxXT1jKmJbMV0rZSpiWzVdK2cqYls5XStoKmJbMTNdLHRoaXMubWF0NFsyXT1jKmJbMl0rZSpiWzZdK2cqYlsxMF0raCpiWzE0XSx0aGlzLm1hdDRbM109YypiWzNdK2UqYls3XStnKmJbMTFdK2gqYlsxNV0sYz10aGlzLm1hdDRbNF0sZT10aGlzLm1hdDRbNV0sZz10aGlzLm1hdDRbNl0saD10aGlzLm1hdDRbN10sdGhpcy5tYXQ0WzRdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzVdPWMqYlsxXStlKmJbNV0rZypiWzldK2gqYlsxM10sdGhpcy5tYXQ0WzZdPWMqYlsyXStlKmJbNl0rZypiWzEwXStoKmJbMTRdLHRoaXMubWF0NFs3XT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSxjPXRoaXMubWF0NFs4XSxlPXRoaXMubWF0NFs5XSxnPXRoaXMubWF0NFsxMF0saD10aGlzLm1hdDRbMTFdLHRoaXMubWF0NFs4XT1jKmJbMF0rZSpiWzRdK2cqYls4XStoKmJbMTJdLHRoaXMubWF0NFs5XT1jKmJbMV0rZSpiWzVdK2cqYls5XStoKmJbMTNdLHRoaXMubWF0NFsxMF09YypiWzJdK2UqYls2XStnKmJbMTBdK2gqYlsxNF0sdGhpcy5tYXQ0WzExXT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSxjPXRoaXMubWF0NFsxMl0sZT10aGlzLm1hdDRbMTNdLGc9dGhpcy5tYXQ0WzE0XSxoPXRoaXMubWF0NFsxNV0sdGhpcy5tYXQ0WzEyXT1jKmJbMF0rZSpiWzRdK2cqYls4XStoKmJbMTJdLHRoaXMubWF0NFsxM109YypiWzFdK2UqYls1XStnKmJbOV0raCpiWzEzXSx0aGlzLm1hdDRbMTRdPWMqYlsyXStlKmJbNl0rZypiWzEwXStoKmJbMTRdLHRoaXMubWF0NFsxNV09YypiWzNdK2UqYls3XStnKmJbMTFdK2gqYlsxNV0sdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyhiPWEueSxjPWEueixhPWEueCk6YSBpbnN0YW5jZW9mIEFycmF5JiYoYj1hWzFdLGM9YVsyXSxhPWFbMF0pLHRoaXMubWF0NFswXSo9YSx0aGlzLm1hdDRbMV0qPWEsdGhpcy5tYXQ0WzJdKj1hLHRoaXMubWF0NFszXSo9YSx0aGlzLm1hdDRbNF0qPWIsdGhpcy5tYXQ0WzVdKj1iLHRoaXMubWF0NFs2XSo9Yix0aGlzLm1hdDRbN10qPWIsdGhpcy5tYXQ0WzhdKj1jLHRoaXMubWF0NFs5XSo9Yyx0aGlzLm1hdDRbMTBdKj1jLHRoaXMubWF0NFsxMV0qPWMsdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj10aGlzLnA1P3RoaXMucDUuX3RvUmFkaWFucyhhKTphO2IgaW5zdGFuY2VvZiBkLlZlY3Rvcj8oYz1iLnksZT1iLnosYj1iLngpOmIgaW5zdGFuY2VvZiBBcnJheSYmKGM9YlsxXSxlPWJbMl0sYj1iWzBdKTt2YXIgZz1NYXRoLnNxcnQoYipiK2MqYytlKmUpO2IqPTEvZyxjKj0xL2csZSo9MS9nO3ZhciBoPXRoaXMubWF0NFswXSxpPXRoaXMubWF0NFsxXSxqPXRoaXMubWF0NFsyXSxrPXRoaXMubWF0NFszXSxsPXRoaXMubWF0NFs0XSxtPXRoaXMubWF0NFs1XSxuPXRoaXMubWF0NFs2XSxvPXRoaXMubWF0NFs3XSxwPXRoaXMubWF0NFs4XSxxPXRoaXMubWF0NFs5XSxyPXRoaXMubWF0NFsxMF0scz10aGlzLm1hdDRbMTFdLHQ9TWF0aC5zaW4oZiksdT1NYXRoLmNvcyhmKSx2PTEtdSx3PWIqYip2K3UseD1jKmIqditlKnQseT1lKmIqdi1jKnQsej1iKmMqdi1lKnQsQT1jKmMqdit1LEI9ZSpjKnYrYip0LEM9YiplKnYrYyp0LEQ9YyplKnYtYip0LEU9ZSplKnYrdTtyZXR1cm4gdGhpcy5tYXQ0WzBdPWgqdytsKngrcCp5LHRoaXMubWF0NFsxXT1pKncrbSp4K3EqeSx0aGlzLm1hdDRbMl09aip3K24qeCtyKnksdGhpcy5tYXQ0WzNdPWsqdytvKngrcyp5LHRoaXMubWF0NFs0XT1oKnorbCpBK3AqQix0aGlzLm1hdDRbNV09aSp6K20qQStxKkIsdGhpcy5tYXQ0WzZdPWoqeituKkErcipCLHRoaXMubWF0NFs3XT1rKnorbypBK3MqQix0aGlzLm1hdDRbOF09aCpDK2wqRCtwKkUsdGhpcy5tYXQ0WzldPWkqQyttKkQrcSpFLHRoaXMubWF0NFsxMF09aipDK24qRCtyKkUsdGhpcy5tYXQ0WzExXT1rKkMrbypEK3MqRSx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGQ9YVsyXXx8MDt0aGlzLm1hdDRbMTJdKz10aGlzLm1hdDRbMF0qYit0aGlzLm1hdDRbNF0qYyt0aGlzLm1hdDRbOF0qZCx0aGlzLm1hdDRbMTNdKz10aGlzLm1hdDRbMV0qYit0aGlzLm1hdDRbNV0qYyt0aGlzLm1hdDRbOV0qZCx0aGlzLm1hdDRbMTRdKz10aGlzLm1hdDRbMl0qYit0aGlzLm1hdDRbNl0qYyt0aGlzLm1hdDRbMTBdKmQsdGhpcy5tYXQ0WzE1XSs9dGhpcy5tYXQ0WzNdKmIrdGhpcy5tYXQ0WzddKmMrdGhpcy5tYXQ0WzExXSpkfSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbihhKXt0aGlzLnJvdGF0ZShhLDEsMCwwKX0sZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oYSl7dGhpcy5yb3RhdGUoYSwwLDEsMCl9LGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKGEpe3RoaXMucm90YXRlKGEsMCwwLDEpfSxkLk1hdHJpeC5wcm90b3R5cGUucGVyc3BlY3RpdmU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9MS9NYXRoLnRhbihhLzIpLGY9MS8oYy1kKTtyZXR1cm4gdGhpcy5tYXQ0WzBdPWUvYix0aGlzLm1hdDRbMV09MCx0aGlzLm1hdDRbMl09MCx0aGlzLm1hdDRbM109MCx0aGlzLm1hdDRbNF09MCx0aGlzLm1hdDRbNV09ZSx0aGlzLm1hdDRbNl09MCx0aGlzLm1hdDRbN109MCx0aGlzLm1hdDRbOF09MCx0aGlzLm1hdDRbOV09MCx0aGlzLm1hdDRbMTBdPShkK2MpKmYsdGhpcy5tYXQ0WzExXT0tMSx0aGlzLm1hdDRbMTJdPTAsdGhpcy5tYXQ0WzEzXT0wLHRoaXMubWF0NFsxNF09MipkKmMqZix0aGlzLm1hdDRbMTVdPTAsdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLm9ydGhvPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz0xLyhhLWIpLGg9MS8oYy1kKSxpPTEvKGUtZik7cmV0dXJuIHRoaXMubWF0NFswXT0tMipnLHRoaXMubWF0NFsxXT0wLHRoaXMubWF0NFsyXT0wLHRoaXMubWF0NFszXT0wLHRoaXMubWF0NFs0XT0wLHRoaXMubWF0NFs1XT0tMipoLHRoaXMubWF0NFs2XT0wLHRoaXMubWF0NFs3XT0wLHRoaXMubWF0NFs4XT0wLHRoaXMubWF0NFs5XT0wLHRoaXMubWF0NFsxMF09MippLHRoaXMubWF0NFsxMV09MCx0aGlzLm1hdDRbMTJdPShhK2IpKmcsdGhpcy5tYXQ0WzEzXT0oZCtjKSpoLHRoaXMubWF0NFsxNF09KGYrZSkqaSx0aGlzLm1hdDRbMTVdPTEsdGhpc30sYi5leHBvcnRzPWQuTWF0cml4fSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDcyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLlJlbmRlcmVyR0wucHJvdG90eXBlLmJlZ2luU2hhcGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9dm9pZCAwIT09YT9hOmUuTElORV9TVFJJUCx2b2lkIDA9PT10aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXM/KHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUuZWRnZXM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0aWNlcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFscz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUudXZDb29yZHM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5jb2xvckJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS51dkJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGV4QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUucG9pbnRWZXJ0ZXhCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleD1bXSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleD1bXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4PVtdKToodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5lZGdlcy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFscy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcy5sZW5ndGg9MCksdGhpcy5pc0ltbWVkaWF0ZURyYXdpbmc9ITAsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS52ZXJ0ZXg9ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGY7Yz1lPWY9MCwzPT09YXJndW1lbnRzLmxlbmd0aD9jPWFyZ3VtZW50c1syXTo0PT09YXJndW1lbnRzLmxlbmd0aD8oZT1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10pOjU9PT1hcmd1bWVudHMubGVuZ3RoJiYoYz1hcmd1bWVudHNbMl0sZT1hcmd1bWVudHNbM10sZj1hcmd1bWVudHNbNF0pO3ZhciBnPW5ldyBkLlZlY3RvcihhLGIsYyk7dGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLnB1c2goZyk7dmFyIGg9dGhpcy5jdXJGaWxsQ29sb3J8fFsuNSwuNSwuNSwxXTtyZXR1cm4gdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleENvbG9ycy5wdXNoKGhbMF0saFsxXSxoWzJdLGhbM10pLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcy5wdXNoKGUsZiksdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF09YSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsxXT1iLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzJdPWMsdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF09YSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXT1iLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzJdPWMsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5lbmRTaGFwZT1mdW5jdGlvbihhLGIsYyxmLGcsaCl7aWYodGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT09PWUuUE9JTlRTKXRoaXMuX3VzZVBvaW50U2hhZGVyKCksdGhpcy5jdXJQb2ludFNoYWRlci5iaW5kU2hhZGVyKCksdGhpcy5fZHJhd1BvaW50cyh0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMsdGhpcy5pbW1lZGlhdGVNb2RlLnBvaW50VmVydGV4QnVmZmVyKSx0aGlzLmN1clBvaW50U2hhZGVyLnVuYmluZFNoYWRlcigpO2Vsc2UgaWYodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aD4xKXtpZih0aGlzLl91c2VJbW1lZGlhdGVNb2RlU2hhZGVyKCksdGhpcy5fZG9TdHJva2UmJnRoaXMuZHJhd01vZGUhPT1lLlRFWFRVUkUpe2Zvcih2YXIgaT0wO2k8dGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aC0xO2krKyl0aGlzLmltbWVkaWF0ZU1vZGUuZWRnZXMucHVzaChbaSxpKzFdKTthPT09ZS5DTE9TRSYmdGhpcy5pbW1lZGlhdGVNb2RlLmVkZ2VzLnB1c2goW3RoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGgtMSwwXSksZC5HZW9tZXRyeS5wcm90b3R5cGUuX2VkZ2VzVG9WZXJ0aWNlcy5jYWxsKHRoaXMuaW1tZWRpYXRlTW9kZSksdGhpcy5fZHJhd1N0cm9rZUltbWVkaWF0ZU1vZGUoKX1pZih0aGlzLl9kb0ZpbGwpe2lmKHRoaXMuaXNCZXppZXJ8fHRoaXMuaXNRdWFkcmF0aWN8fHRoaXMuaXNDdXJ2ZSl7dmFyIGo9W25ldyBGbG9hdDMyQXJyYXkodGhpcy5fdlRvTkFycmF5KHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcykpXSxrPXRoaXMuX3RyaWFuZ3VsYXRlKGopO3RoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcz1bXTtmb3IodmFyIGw9MCxtPWsubGVuZ3RoO2w8bTtsKz0zKXRoaXMudmVydGV4KGtbbF0sa1tsKzFdLGtbbCsyXSl9dGhpcy5fZHJhd0ZpbGxJbW1lZGlhdGVNb2RlKGEsYixjLGYsZyxoKX19cmV0dXJuIHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcy5sZW5ndGg9MCx0aGlzLmlzSW1tZWRpYXRlRHJhd2luZz0hMSx0aGlzLmlzQmV6aWVyPSExLHRoaXMuaXNRdWFkcmF0aWM9ITEsdGhpcy5pc0N1cnZlPSExLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4Lmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4Lmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgubGVuZ3RoPTAsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd0ZpbGxJbW1lZGlhdGVNb2RlPWZ1bmN0aW9uKGEsYixjLGQsZixnKXt2YXIgaD10aGlzLkdMO2lmKHRoaXMuY3VyRmlsbFNoYWRlci5iaW5kU2hhZGVyKCksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4QnVmZmVyLGguQVJSQVlfQlVGRkVSLHRoaXMuX3ZUb05BcnJheSh0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMpLEZsb2F0MzJBcnJheSxoLkRZTkFNSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxoLkZMT0FULCExLDAsMCkpLHRoaXMuZHJhd01vZGU9PT1lLkZJTEwmJnRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhDb2xvciYmKHRoaXMuX2JpbmRCdWZmZXIodGhpcy5pbW1lZGlhdGVNb2RlLmNvbG9yQnVmZmVyLGguQVJSQVlfQlVGRkVSLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnMsRmxvYXQzMkFycmF5LGguRFlOQU1JQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhDb2xvci5sb2NhdGlvbiw0LGguRkxPQVQsITEsMCwwKSksdGhpcy5kcmF3TW9kZT09PWUuVEVYVFVSRSYmdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVRleENvb3JkJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUudXZCdWZmZXIsaC5BUlJBWV9CVUZGRVIsdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLEZsb2F0MzJBcnJheSxoLkRZTkFNSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMixoLkZMT0FULCExLDAsMCkpLHRoaXMuZHJhd01vZGU9PT1lLkZJTEx8fHRoaXMuZHJhd01vZGU9PT1lLlRFWFRVUkUpc3dpdGNoKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGUpe2Nhc2UgZS5MSU5FX1NUUklQOmNhc2UgZS5MSU5FUzpjYXNlIGUuVFJJQU5HTEVTOnRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9dGhpcy5pc0Jlemllcnx8dGhpcy5pc1F1YWRyYXRpY3x8dGhpcy5pc0N1cnZlP2UuVFJJQU5HTEVTOmUuVFJJQU5HTEVfRkFOfWVsc2Ugc3dpdGNoKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGUpe2Nhc2UgZS5MSU5FX1NUUklQOmNhc2UgZS5MSU5FUzp0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPWUuTElORV9MT09QfWlmKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9PT1lLlFVQURTfHx0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPT09ZS5RVUFEX1NUUklQKXRocm93IG5ldyBFcnJvcihcInNvcnJ5LCBcIit0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlK1wiIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gd2ViZ2wgbW9kZS5cIik7dGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyRmlsbENvbG9yKSxoLmVuYWJsZShoLkJMRU5EKSxoLmRyYXdBcnJheXModGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZSwwLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCx0aGlzLmN1ckZpbGxTaGFkZXIudW5iaW5kU2hhZGVyKCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdTdHJva2VJbW1lZGlhdGVNb2RlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5HTDt0aGlzLmN1clN0cm9rZVNoYWRlci5iaW5kU2hhZGVyKCksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGV4QnVmZmVyLGEuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4odGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0aWNlcyksRmxvYXQzMkFycmF5LGEuU1RBVElDX0RSQVcpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGEuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUubGluZU5vcm1hbEJ1ZmZlcixhLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFscyksRmxvYXQzMkFycmF5LGEuU1RBVElDX0RSQVcpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24ubG9jYXRpb24sNCxhLkZMT0FULCExLDAsMCkpLHRoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1clN0cm9rZUNvbG9yKSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsMCx0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzLmxlbmd0aCksdGhpcy5jdXJTdHJva2VTaGFkZXIudW5iaW5kU2hhZGVyKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxiLmV4cG9ydHM9ZC5SZW5kZXJlckdMfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw3MzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT0wO2QuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2luaXRCdWZmZXJEZWZhdWx0cz1mdW5jdGlvbihhKXtpZih0aGlzLl9mcmVlQnVmZmVycyhhKSwrK2U+MWUzKXt2YXIgYj1PYmplY3Qua2V5cyh0aGlzLmdIYXNoKVswXTtkZWxldGUgdGhpcy5nSGFzaFtiXSxlLS19dGhpcy5nSGFzaFthXT17fX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZnJlZUJ1ZmZlcnM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5nSGFzaFthXTtpZihiKXtkZWxldGUgdGhpcy5nSGFzaFthXSxlLS07dmFyIGM9dGhpcy5HTDtiLnZlcnRleEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi52ZXJ0ZXhCdWZmZXIpLGIubm9ybWFsQnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLm5vcm1hbEJ1ZmZlciksYi5saW5lTm9ybWFsQnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLmxpbmVOb3JtYWxCdWZmZXIpLGIudXZCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIudXZCdWZmZXIpLGIuaW5kZXhCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIuaW5kZXhCdWZmZXIpLGIubGluZVZlcnRleEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi5saW5lVmVydGV4QnVmZmVyKX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuY3JlYXRlQnVmZmVycz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuR0w7dGhpcy5faW5pdEJ1ZmZlckRlZmF1bHRzKGEpO3ZhciBkPXRoaXMuZ0hhc2hbYV07cmV0dXJuIGQubnVtYmVyT2ZJdGVtcz0zKmIuZmFjZXMubGVuZ3RoLGQubGluZVZlcnRleENvdW50PWIubGluZVZlcnRpY2VzLmxlbmd0aCx0aGlzLl91c2VDb2xvclNoYWRlcigpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uJiYoZC5saW5lVmVydGV4QnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLmxpbmVWZXJ0ZXhCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbihiLmxpbmVWZXJ0aWNlcyksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGMuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uJiYoZC5saW5lTm9ybWFsQnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLmxpbmVOb3JtYWxCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbihiLmxpbmVOb3JtYWxzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYURpcmVjdGlvbi5sb2NhdGlvbiw0LGMuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uJiYoZC52ZXJ0ZXhCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQudmVydGV4QnVmZmVyLGMuQVJSQVlfQlVGRkVSLHRoaXMuX3ZUb05BcnJheShiLnZlcnRpY2VzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxjLkZMT0FULCExLDAsMCkpLGQuaW5kZXhCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQuaW5kZXhCdWZmZXIsYy5FTEVNRU5UX0FSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIuZmFjZXMpLFVpbnQxNkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFOb3JtYWwmJihkLm5vcm1hbEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC5ub3JtYWxCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KGIudmVydGV4Tm9ybWFscyksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYU5vcm1hbC5sb2NhdGlvbiwzLGMuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVRleENvb3JkJiYoZC51dkJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC51dkJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIudXZzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMixjLkZMT0FULCExLDAsMCkpLGR9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZHJhd0J1ZmZlcnM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5HTDt0aGlzLl91c2VDb2xvclNoYWRlcigpO3ZhciBjPXRoaXMuZ0hhc2hbYV07cmV0dXJuIHRoaXMuX2RvU3Ryb2tlJiZjLmxpbmVWZXJ0ZXhDb3VudD4wJiYodGhpcy5jdXJTdHJva2VTaGFkZXIuYmluZFNoYWRlcigpLGMubGluZVZlcnRleEJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy5saW5lVmVydGV4QnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxiLkZMT0FULCExLDAsMCkpLGMubGluZU5vcm1hbEJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy5saW5lTm9ybWFsQnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uLmxvY2F0aW9uLDQsYi5GTE9BVCwhMSwwLDApKSx0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJTdHJva2VDb2xvciksdGhpcy5fZHJhd0FycmF5cyhiLlRSSUFOR0xFUyxhKSx0aGlzLmN1clN0cm9rZVNoYWRlci51bmJpbmRTaGFkZXIoKSksITEhPT10aGlzLl9kb0ZpbGwmJih0aGlzLmN1ckZpbGxTaGFkZXIuYmluZFNoYWRlcigpLGMudmVydGV4QnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLnZlcnRleEJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxiLkZMT0FULCExLDAsMCkpLGMuaW5kZXhCdWZmZXImJnRoaXMuX2JpbmRCdWZmZXIoYy5pbmRleEJ1ZmZlcixiLkVMRU1FTlRfQVJSQVlfQlVGRkVSKSxjLm5vcm1hbEJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy5ub3JtYWxCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYU5vcm1hbC5sb2NhdGlvbiwzLGIuRkxPQVQsITEsMCwwKSksYy51dkJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy51dkJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMixiLkZMT0FULCExLDAsMCkpLHRoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1ckZpbGxDb2xvciksdGhpcy5fZHJhd0VsZW1lbnRzKGIuVFJJQU5HTEVTLGEpLHRoaXMuY3VyRmlsbFNoYWRlci51bmJpbmRTaGFkZXIoKSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5kcmF3QnVmZmVyc1NjYWxlZD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3RoaXMudU1WTWF0cml4LnNjYWxlKGIsYyxkKSx0aGlzLmRyYXdCdWZmZXJzKGEpfWZpbmFsbHl7dGhpcy51TVZNYXRyaXg9ZX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdBcnJheXM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5HTC5kcmF3QXJyYXlzKGEsMCx0aGlzLmdIYXNoW2JdLmxpbmVWZXJ0ZXhDb3VudCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdFbGVtZW50cz1mdW5jdGlvbihhLGIpe3RoaXMuR0wuZHJhd0VsZW1lbnRzKGEsdGhpcy5nSGFzaFtiXS5udW1iZXJPZkl0ZW1zLHRoaXMuR0wuVU5TSUdORURfU0hPUlQsMCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9kcmF3UG9pbnRzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5HTDt0aGlzLl9iaW5kQnVmZmVyKGIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KGEpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1clBvaW50U2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clBvaW50U2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYy5GTE9BVCwhMSwwLDApLGMuZHJhd0FycmF5cyhjLlBvaW50cywwLGEubGVuZ3RoKX0sYi5leHBvcnRzPWQuUmVuZGVyZXJHTH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3NDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIiksZj1hKFwibGlidGVzc1wiKTthKFwiLi9wNS5TaGFkZXJcIiksYShcIi4vcDUuQ2FtZXJhXCIpLGEoXCIuLi9jb3JlL3A1LlJlbmRlcmVyXCIpLGEoXCIuL3A1Lk1hdHJpeFwiKTt2YXIgZz17aW1tZWRpYXRlVmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBhVmVydGV4Q29sb3I7XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgdVJlc29sdXRpb247XFxudW5pZm9ybSBmbG9hdCB1UG9pbnRTaXplO1xcblxcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG4gIHZDb2xvciA9IGFWZXJ0ZXhDb2xvcjtcXG4gIGdsX1BvaW50U2l6ZSA9IHVQb2ludFNpemU7XFxufVxcblwiLHZlcnRleENvbG9yVmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBhVmVydGV4Q29sb3I7XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG4gIHZDb2xvciA9IGFWZXJ0ZXhDb2xvcjtcXG59XFxuXCIsdmVydGV4Q29sb3JGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yO1xcbn1cIixub3JtYWxWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMzIGFOb3JtYWw7XFxuYXR0cmlidXRlIHZlYzIgYVRleENvb3JkO1xcblxcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgdU5vcm1hbE1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG52YXJ5aW5nIGhpZ2hwIHZlYzIgdlZlcnRUZXhDb29yZDtcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdlZlcnRleE5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMzKCB1Tm9ybWFsTWF0cml4ICogYU5vcm1hbCApKTtcXG4gIHZWZXJ0VGV4Q29vcmQgPSBhVGV4Q29vcmQ7XFxufVxcblwiLG5vcm1hbEZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2VmVydGV4Tm9ybWFsLCAxLjApO1xcbn1cIixiYXNpY0ZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IHVNYXRlcmlhbENvbG9yO1xcbn1cIixsaWdodFZlcnQ6XCJhdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzMgYU5vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxuXFxudW5pZm9ybSBtYXQ0IHVWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgdU5vcm1hbE1hdHJpeDtcXG51bmlmb3JtIGludCB1QW1iaWVudExpZ2h0Q291bnQ7XFxudW5pZm9ybSBpbnQgdURpcmVjdGlvbmFsTGlnaHRDb3VudDtcXG51bmlmb3JtIGludCB1UG9pbnRMaWdodENvdW50O1xcblxcbnVuaWZvcm0gdmVjMyB1QW1iaWVudENvbG9yWzhdO1xcbnVuaWZvcm0gdmVjMyB1TGlnaHRpbmdEaXJlY3Rpb25bOF07XFxudW5pZm9ybSB2ZWMzIHVEaXJlY3Rpb25hbENvbG9yWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodExvY2F0aW9uWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodENvbG9yWzhdO1xcbnVuaWZvcm0gYm9vbCB1U3BlY3VsYXI7XFxuXFxudmFyeWluZyB2ZWMzIHZWZXJ0ZXhOb3JtYWw7XFxudmFyeWluZyB2ZWMyIHZWZXJ0VGV4Q29vcmQ7XFxudmFyeWluZyB2ZWMzIHZMaWdodFdlaWdodGluZztcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuXFxuICB2ZWMzIHZlcnRleE5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMzKCB1Tm9ybWFsTWF0cml4ICogYU5vcm1hbCApKTtcXG4gIHZWZXJ0ZXhOb3JtYWwgPSB2ZXJ0ZXhOb3JtYWw7XFxuICB2VmVydFRleENvb3JkID0gYVRleENvb3JkO1xcblxcbiAgdmVjNCBtdlBvc2l0aW9uID0gdU1vZGVsVmlld01hdHJpeCAqIHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgdmVjMyBleWVEaXJlY3Rpb24gPSBub3JtYWxpemUoLW12UG9zaXRpb24ueHl6KTtcXG5cXG4gIGZsb2F0IHNoaW5pbmVzcyA9IDMyLjA7XFxuICBmbG9hdCBzcGVjdWxhckZhY3RvciA9IDIuMDtcXG4gIGZsb2F0IGRpZmZ1c2VGYWN0b3IgPSAwLjM7XFxuXFxuICB2ZWMzIGFtYmllbnRMaWdodEZhY3RvciA9IHZlYzMoMC4wKTtcXG5cXG4gIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7XFxuICAgIGlmICh1QW1iaWVudExpZ2h0Q291bnQgPT0gaSkgYnJlYWs7XFxuICAgIGFtYmllbnRMaWdodEZhY3RvciArPSB1QW1iaWVudENvbG9yW2ldO1xcbiAgfVxcblxcblxcbiAgdmVjMyBkaXJlY3Rpb25hbExpZ2h0RmFjdG9yID0gdmVjMygwLjApO1xcblxcbiAgZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHtcXG4gICAgaWYgKHVEaXJlY3Rpb25hbExpZ2h0Q291bnQgPT0gaikgYnJlYWs7XFxuICAgIHZlYzMgZGlyID0gdUxpZ2h0aW5nRGlyZWN0aW9uW2pdO1xcbiAgICBmbG9hdCBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nID0gbWF4KGRvdCh2ZXJ0ZXhOb3JtYWwsIC1kaXIpLCAwLjApO1xcbiAgICBkaXJlY3Rpb25hbExpZ2h0RmFjdG9yICs9IHVEaXJlY3Rpb25hbENvbG9yW2pdICogZGlyZWN0aW9uYWxMaWdodFdlaWdodGluZztcXG4gIH1cXG5cXG5cXG4gIHZlYzMgcG9pbnRMaWdodEZhY3RvciA9IHZlYzMoMC4wKTtcXG5cXG4gIGZvciAoaW50IGsgPSAwOyBrIDwgODsgaysrKSB7XFxuICAgIGlmICh1UG9pbnRMaWdodENvdW50ID09IGspIGJyZWFrO1xcbiAgICB2ZWMzIGxvYyA9ICh1Vmlld01hdHJpeCAqIHZlYzQodVBvaW50TGlnaHRMb2NhdGlvbltrXSwgMS4wKSkueHl6O1xcbiAgICB2ZWMzIGxpZ2h0RGlyZWN0aW9uID0gbm9ybWFsaXplKGxvYyAtIG12UG9zaXRpb24ueHl6KTtcXG5cXG4gICAgZmxvYXQgZGlyZWN0aW9uYWxMaWdodFdlaWdodGluZyA9IG1heChkb3QodmVydGV4Tm9ybWFsLCBsaWdodERpcmVjdGlvbiksIDAuMCk7XFxuXFxuICAgIGZsb2F0IHNwZWN1bGFyTGlnaHRXZWlnaHRpbmcgPSAwLjA7XFxuICAgIGlmICh1U3BlY3VsYXIgKXtcXG4gICAgICB2ZWMzIHJlZmxlY3Rpb25EaXJlY3Rpb24gPSByZWZsZWN0KC1saWdodERpcmVjdGlvbiwgdmVydGV4Tm9ybWFsKTtcXG4gICAgICBzcGVjdWxhckxpZ2h0V2VpZ2h0aW5nID0gcG93KG1heChkb3QocmVmbGVjdGlvbkRpcmVjdGlvbiwgZXllRGlyZWN0aW9uKSwgMC4wKSwgc2hpbmluZXNzKTtcXG4gICAgfVxcblxcbiAgICBwb2ludExpZ2h0RmFjdG9yICs9IHVQb2ludExpZ2h0Q29sb3Jba10gKiAoc3BlY3VsYXJGYWN0b3IgKiBzcGVjdWxhckxpZ2h0V2VpZ2h0aW5nXFxuICAgICAgKyBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nICogZGlmZnVzZUZhY3Rvcik7XFxuICB9XFxuXFxuICB2TGlnaHRXZWlnaHRpbmcgPSAgYW1iaWVudExpZ2h0RmFjdG9yICsgZGlyZWN0aW9uYWxMaWdodEZhY3RvciArIHBvaW50TGlnaHRGYWN0b3I7XFxufVxcblwiLGxpZ2h0VGV4dHVyZUZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBib29sIGlzVGV4dHVyZTtcXG51bmlmb3JtIGJvb2wgdVVzZUxpZ2h0aW5nO1xcblxcbnZhcnlpbmcgdmVjMyB2TGlnaHRXZWlnaHRpbmc7XFxudmFyeWluZyBoaWdocCB2ZWMyIHZWZXJ0VGV4Q29vcmQ7XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IGlzVGV4dHVyZSA/IHRleHR1cmUyRCh1U2FtcGxlciwgdlZlcnRUZXhDb29yZCkgOiB1TWF0ZXJpYWxDb2xvcjtcXG4gIGlmICh1VXNlTGlnaHRpbmcpXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgKj0gdkxpZ2h0V2VpZ2h0aW5nO1xcbn1cIixwaG9uZ1ZlcnQ6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzMgYU5vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxuXFxudW5pZm9ybSB2ZWMzIHVBbWJpZW50Q29sb3JbOF07XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyB1Tm9ybWFsTWF0cml4O1xcbnVuaWZvcm0gaW50IHVBbWJpZW50TGlnaHRDb3VudDtcXG5cXG52YXJ5aW5nIHZlYzMgdk5vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2QW1iaWVudENvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG5cXG4gIHZlYzQgdmlld01vZGVsUG9zaXRpb24gPSB1TW9kZWxWaWV3TWF0cml4ICogdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuXFxuICAvLyBQYXNzIHZhcnlpbmdzIHRvIGZyYWdtZW50IHNoYWRlclxcbiAgdlZpZXdQb3NpdGlvbiA9IHZpZXdNb2RlbFBvc2l0aW9uLnh5ejtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB2aWV3TW9kZWxQb3NpdGlvbjsgIFxcblxcbiAgdk5vcm1hbCA9IG5vcm1hbGl6ZSh1Tm9ybWFsTWF0cml4ICogbm9ybWFsaXplKGFOb3JtYWwpKTtcXG4gIHZUZXhDb29yZCA9IGFUZXhDb29yZDtcXG5cXG4gIHZBbWJpZW50Q29sb3IgPSB2ZWMzKDAuMCk7XFxuICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykge1xcbiAgICBpZiAodUFtYmllbnRMaWdodENvdW50ID09IGkpIGJyZWFrO1xcbiAgICB2QW1iaWVudENvbG9yICs9IHVBbWJpZW50Q29sb3JbaV07XFxuICB9XFxufVxcblwiLFxucGhvbmdGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuLy91bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVZpZXdNYXRyaXg7XFxuXFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gYm9vbCBpc1RleHR1cmU7XFxudW5pZm9ybSBib29sIHVVc2VMaWdodGluZztcXG5cXG51bmlmb3JtIHZlYzMgdUxpZ2h0aW5nRGlyZWN0aW9uWzhdO1xcbnVuaWZvcm0gdmVjMyB1RGlyZWN0aW9uYWxDb2xvcls4XTtcXG51bmlmb3JtIHZlYzMgdVBvaW50TGlnaHRMb2NhdGlvbls4XTtcXG51bmlmb3JtIHZlYzMgdVBvaW50TGlnaHRDb2xvcls4XTtcXG51bmlmb3JtIGJvb2wgdVNwZWN1bGFyO1xcblxcbnVuaWZvcm0gaW50IHVEaXJlY3Rpb25hbExpZ2h0Q291bnQ7XFxudW5pZm9ybSBpbnQgdVBvaW50TGlnaHRDb3VudDtcXG5cXG52YXJ5aW5nIHZlYzMgdk5vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2QW1iaWVudENvbG9yO1xcblxcbnZlYzMgVjtcXG52ZWMzIE47XFxuXFxuY29uc3QgZmxvYXQgc2hpbmluZXNzID0gMzIuMDtcXG5jb25zdCBmbG9hdCBzcGVjdWxhckZhY3RvciA9IDIuMDtcXG5jb25zdCBmbG9hdCBkaWZmdXNlRmFjdG9yID0gMC43MztcXG5cXG5zdHJ1Y3QgTGlnaHRSZXN1bHQge1xcblxcdGZsb2F0IHNwZWN1bGFyO1xcblxcdGZsb2F0IGRpZmZ1c2U7XFxufTtcXG5cXG5mbG9hdCBwaG9uZ1NwZWN1bGFyKFxcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcXG4gIGZsb2F0IHNoaW5pbmVzcykge1xcblxcbiAgdmVjMyBSID0gbm9ybWFsaXplKHJlZmxlY3QoLWxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSk7ICBcXG4gIHJldHVybiBwb3cobWF4KDAuMCwgZG90KFIsIHZpZXdEaXJlY3Rpb24pKSwgc2hpbmluZXNzKTtcXG59XFxuXFxuZmxvYXQgbGFtYmVydERpZmZ1c2UoXFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxcbiAgdmVjMyBzdXJmYWNlTm9ybWFsKSB7XFxuICByZXR1cm4gbWF4KDAuMCwgZG90KC1saWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCkpO1xcbn1cXG5cXG5MaWdodFJlc3VsdCBsaWdodCh2ZWMzIGxpZ2h0VmVjdG9yKSB7XFxuXFxuICB2ZWMzIEwgPSBub3JtYWxpemUobGlnaHRWZWN0b3IpO1xcblxcbiAgLy9jb21wdXRlIG91ciBkaWZmdXNlICYgc3BlY3VsYXIgdGVybXNcXG4gIExpZ2h0UmVzdWx0IGxyO1xcbiAgaWYgKHVTcGVjdWxhcilcXG4gICAgbHIuc3BlY3VsYXIgPSBwaG9uZ1NwZWN1bGFyKEwsIFYsIE4sIHNoaW5pbmVzcyk7XFxuICBsci5kaWZmdXNlID0gbGFtYmVydERpZmZ1c2UoTCwgTik7XFxuICByZXR1cm4gbHI7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKSB7XFxuXFxuICBWID0gbm9ybWFsaXplKHZWaWV3UG9zaXRpb24pO1xcbiAgTiA9IHZOb3JtYWw7XFxuXFxuICB2ZWMzIGRpZmZ1c2UgPSB2ZWMzKDAuMCk7XFxuICBmbG9hdCBzcGVjdWxhciA9IDAuMDtcXG5cXG4gIGZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKSB7XFxuICAgIGlmICh1RGlyZWN0aW9uYWxMaWdodENvdW50ID09IGopIGJyZWFrO1xcblxcbiAgICBMaWdodFJlc3VsdCByZXN1bHQgPSBsaWdodCh1TGlnaHRpbmdEaXJlY3Rpb25bal0pO1xcbiAgICBkaWZmdXNlICs9IHJlc3VsdC5kaWZmdXNlICogdURpcmVjdGlvbmFsQ29sb3Jbal07XFxuICAgIHNwZWN1bGFyICs9IHJlc3VsdC5zcGVjdWxhcjtcXG4gIH1cXG5cXG4gIGZvciAoaW50IGsgPSAwOyBrIDwgODsgaysrKSB7XFxuICAgIGlmICh1UG9pbnRMaWdodENvdW50ID09IGspIGJyZWFrO1xcblxcbiAgICB2ZWMzIGxpZ2h0UG9zaXRpb24gPSAodVZpZXdNYXRyaXggKiB2ZWM0KHVQb2ludExpZ2h0TG9jYXRpb25ba10sIDEuMCkpLnh5ejtcXG4gICAgdmVjMyBsaWdodFZlY3RvciA9IHZWaWV3UG9zaXRpb24gLSBsaWdodFBvc2l0aW9uO1xcblxcdFxcbiAgICAvL2NhbGN1bGF0ZSBhdHRlbnVhdGlvblxcbiAgICBmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKGxpZ2h0VmVjdG9yKTtcXG4gICAgZmxvYXQgZmFsbG9mZiA9IDUwMC4wIC8gKGxpZ2h0RGlzdGFuY2UgKyA1MDAuMCk7XFxuXFxuICAgIExpZ2h0UmVzdWx0IHJlc3VsdCA9IGxpZ2h0KGxpZ2h0VmVjdG9yKTtcXG4gICAgZGlmZnVzZSArPSByZXN1bHQuZGlmZnVzZSAqIGZhbGxvZmYgKiB1UG9pbnRMaWdodENvbG9yW2tdO1xcbiAgICBzcGVjdWxhciArPSByZXN1bHQuc3BlY3VsYXIgKiBmYWxsb2ZmO1xcbiAgfVxcblxcbiAgZ2xfRnJhZ0NvbG9yID0gaXNUZXh0dXJlID8gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4Q29vcmQpIDogdU1hdGVyaWFsQ29sb3I7XFxuICBnbF9GcmFnQ29sb3IucmdiID0gZ2xfRnJhZ0NvbG9yLnJnYiAqIChkaWZmdXNlICogZGlmZnVzZUZhY3RvciArIHZBbWJpZW50Q29sb3IpICsgc3BlY3VsYXIgKiBzcGVjdWxhckZhY3RvcjtcXG59XCIsZm9udFZlcnQ6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleENvb3JkO1xcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG5cXG51bmlmb3JtIHZlYzQgdUdseXBoUmVjdDtcXG51bmlmb3JtIGZsb2F0IHVHbHlwaE9mZnNldDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcbnZhcnlpbmcgZmxvYXQgdztcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcblxcbiAgLy8gc2NhbGUgYnkgdGhlIHNpemUgb2YgdGhlIGdseXBoJ3MgcmVjdGFuZ2xlXFxuICBwb3NpdGlvblZlYzQueHkgKj0gdUdseXBoUmVjdC56dyAtIHVHbHlwaFJlY3QueHk7XFxuXFxuICAvLyBtb3ZlIHRvIHRoZSBjb3JuZXIgb2YgdGhlIGdseXBoXFxuICBwb3NpdGlvblZlYzQueHkgKz0gdUdseXBoUmVjdC54eTtcXG5cXG4gIC8vIG1vdmUgdG8gdGhlIGxldHRlcidzIGxpbmUgb2Zmc2V0XFxuICBwb3NpdGlvblZlYzQueCArPSB1R2x5cGhPZmZzZXQ7XFxuICBcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdlRleENvb3JkID0gYVRleENvb3JkO1xcbiAgdyA9IGdsX1Bvc2l0aW9uLnc7XFxufVxcblwiLGZvbnRGcmFnOlwiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG4jaWYgMFxcbiAgLy8gc2ltdWxhdGUgaW50ZWdlciBtYXRoIHVzaW5nIGZsb2F0c1xcblxcdCNkZWZpbmUgaW50IGZsb2F0XFxuXFx0I2RlZmluZSBpdmVjMiB2ZWMyXFxuXFx0I2RlZmluZSBJTlQoeCkgZmxvYXQoeClcXG5cXG5cXHRpbnQgaWZsb29yKGZsb2F0IHYpIHsgcmV0dXJuIGZsb29yKHYpOyB9XFxuXFx0aXZlYzIgaWZsb29yKHZlYzIgdikgeyByZXR1cm4gZmxvb3Iodik7IH1cXG5cXG4jZWxzZVxcbiAgLy8gdXNlIG5hdGl2ZSBpbnRlZ2VyIG1hdGhcXG5cXHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XFxuXFx0I2RlZmluZSBJTlQoeCkgeFxcblxcblxcdGludCBpZmxvb3IoZmxvYXQgdikgeyByZXR1cm4gaW50KHYpOyB9XFxuXFx0aW50IGlmbG9vcihpbnQgdikgeyByZXR1cm4gdjsgfVxcblxcdGl2ZWMyIGlmbG9vcih2ZWMyIHYpIHsgcmV0dXJuIGl2ZWMyKHYpOyB9XFxuXFxuI2VuZGlmXFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJTdHJva2VzO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyUm93U3Ryb2tlcztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlclJvd3M7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJDb2xTdHJva2VzO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyQ29scztcXG5cXG51bmlmb3JtIGl2ZWMyIHVTdHJva2VJbWFnZVNpemU7XFxudW5pZm9ybSBpdmVjMiB1Q2VsbHNJbWFnZVNpemU7XFxudW5pZm9ybSBpdmVjMiB1R3JpZEltYWdlU2l6ZTtcXG5cXG51bmlmb3JtIGl2ZWMyIHVHcmlkT2Zmc2V0O1xcbnVuaWZvcm0gaXZlYzIgdUdyaWRTaXplO1xcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcblxcbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9uc1xcbmludCByb3VuZChmbG9hdCB2KSB7IHJldHVybiBpZmxvb3IodiArIDAuNSk7IH1cXG5pdmVjMiByb3VuZCh2ZWMyIHYpIHsgcmV0dXJuIGlmbG9vcih2ICsgMC41KTsgfVxcbmZsb2F0IHNhdHVyYXRlKGZsb2F0IHYpIHsgcmV0dXJuIGNsYW1wKHYsIDAuMCwgMS4wKTsgfVxcbnZlYzIgc2F0dXJhdGUodmVjMiB2KSB7IHJldHVybiBjbGFtcCh2LCAwLjAsIDEuMCk7IH1cXG5cXG5pbnQgbXVsKGZsb2F0IHYxLCBpbnQgdjIpIHtcXG4gIHJldHVybiBpZmxvb3IodjEgKiBmbG9hdCh2MikpO1xcbn1cXG5cXG5pdmVjMiBtdWwodmVjMiB2MSwgaXZlYzIgdjIpIHtcXG4gIHJldHVybiBpZmxvb3IodjEgKiB2ZWMyKHYyKSArIDAuNSk7XFxufVxcblxcbi8vIHVucGFjayBhIDE2LWJpdCBpbnRlZ2VyIGZyb20gYSBmbG9hdCB2ZWMyXFxuaW50IGdldEludDE2KHZlYzIgdikge1xcbiAgaXZlYzIgaXYgPSByb3VuZCh2ICogMjU1LjApO1xcbiAgcmV0dXJuIGl2LnggKiBJTlQoMTI4KSArIGl2Lnk7XFxufVxcblxcbnZlYzIgcGl4ZWxTY2FsZTtcXG52ZWMyIGNvdmVyYWdlID0gdmVjMigwLjApO1xcbnZlYzIgd2VpZ2h0ID0gdmVjMigwLjUpO1xcbmNvbnN0IGZsb2F0IG1pbkRpc3RhbmNlID0gMS4wLzgxOTIuMDtcXG5jb25zdCBmbG9hdCBoYXJkbmVzcyA9IDEuMDU7IC8vIGFtb3VudCBvZiBhbnRpYWxpYXNcXG5cXG4vLyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY3VydmVzIGluIGEgZ2x5cGhcXG5jb25zdCBpbnQgTiA9IElOVCgyNTApO1xcblxcbi8vIHJldHJpZXZlcyBhbiBpbmRleGVkIHBpeGVsIGZyb20gYSBzYW1wbGVyXFxudmVjNCBnZXRUZXhlbChzYW1wbGVyMkQgc2FtcGxlciwgaW50IHBvcywgaXZlYzIgc2l6ZSkge1xcbiAgaW50IHdpZHRoID0gc2l6ZS54O1xcbiAgaW50IHkgPSBpZmxvb3IocG9zIC8gd2lkdGgpO1xcbiAgaW50IHggPSBwb3MgLSB5ICogd2lkdGg7ICAvLyBwb3MgJSB3aWR0aFxcblxcbiAgcmV0dXJuIHRleHR1cmUyRChzYW1wbGVyLCAodmVjMih4LCB5KSArIDAuNSkgLyB2ZWMyKHNpemUpKTtcXG59XFxuXFxudm9pZCBjYWx1bGF0ZUNyb3NzaW5ncyh2ZWMyIHAwLCB2ZWMyIHAxLCB2ZWMyIHAyLCBvdXQgdmVjMiBDMSwgb3V0IHZlYzIgQzIpIHtcXG5cXG4gIC8vIGdldCB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBxdWFkcmF0aWMgaW4gdFxcbiAgdmVjMiBhID0gcDAgLSBwMSAqIDIuMCArIHAyO1xcbiAgdmVjMiBiID0gcDAgLSBwMTtcXG4gIHZlYzIgYyA9IHAwIC0gdlRleENvb3JkO1xcblxcbiAgLy8gZm91bmQgb3V0IHdoaWNoIHZhbHVlcyBvZiAndCcgaXQgY3Jvc3NlcyB0aGUgYXhlc1xcbiAgdmVjMiBzdXJkID0gc3FydChtYXgodmVjMigwLjApLCBiICogYiAtIGEgKiBjKSk7XFxuICB2ZWMyIHQxID0gKChiIC0gc3VyZCkgLyBhKS55eDtcXG4gIHZlYzIgdDIgPSAoKGIgKyBzdXJkKSAvIGEpLnl4O1xcblxcbiAgLy8gYXBwcm94aW1hdGUgc3RyYWlnaHQgbGluZXMgdG8gYXZvaWQgcm91bmRpbmcgZXJyb3JzXFxuICBpZiAoYWJzKGEueSkgPCAwLjAwMSlcXG4gICAgdDEueCA9IHQyLnggPSBjLnkgLyAoMi4wICogYi55KTtcXG5cXG4gIGlmIChhYnMoYS54KSA8IDAuMDAxKVxcbiAgICB0MS55ID0gdDIueSA9IGMueCAvICgyLjAgKiBiLngpO1xcblxcbiAgLy8gcGx1ZyBpbnRvIHF1YWRyYXRpYyBmb3JtdWxhIHRvIGZpbmQgdGhlIGNvcnJkaW5hdGVzIG9mIHRoZSBjcm9zc2luZ3NcXG4gIEMxID0gKChhICogdDEgLSBiICogMi4wKSAqIHQxICsgYykgKiBwaXhlbFNjYWxlO1xcbiAgQzIgPSAoKGEgKiB0MiAtIGIgKiAyLjApICogdDIgKyBjKSAqIHBpeGVsU2NhbGU7XFxufVxcblxcbnZvaWQgY292ZXJhZ2VYKHZlYzIgcDAsIHZlYzIgcDEsIHZlYzIgcDIpIHtcXG5cXG4gIHZlYzIgQzEsIEMyO1xcbiAgY2FsdWxhdGVDcm9zc2luZ3MocDAsIHAxLCBwMiwgQzEsIEMyKTtcXG5cXG4gIC8vIGRldGVybWluZSBvbiB3aGljaCBzaWRlIG9mIHRoZSB4LWF4aXMgdGhlIHBvaW50cyBsaWVcXG4gIGJvb2wgeTAgPSBwMC55ID4gdlRleENvb3JkLnk7XFxuICBib29sIHkxID0gcDEueSA+IHZUZXhDb29yZC55O1xcbiAgYm9vbCB5MiA9IHAyLnkgPiB2VGV4Q29vcmQueTtcXG5cXG4gIC8vIGNvdWxkIHdlYiBiZSB1bmRlciB0aGUgY3VydmUgKGFmdGVyIHQxKT9cXG4gIGlmICh5MSA/ICF5MiA6IHkwKSB7XFxuICAgIC8vIGFkZCB0aGUgY292ZXJhZ2UgZm9yIHQxXFxuICAgIGNvdmVyYWdlLnggKz0gc2F0dXJhdGUoQzEueCArIDAuNSk7XFxuICAgIC8vIGNhbGN1bGF0ZSB0aGUgYW50aS1hbGlhc2luZyBmb3IgdDFcXG4gICAgd2VpZ2h0LnggPSBtaW4od2VpZ2h0LngsIGFicyhDMS54KSk7XFxuICB9XFxuXFxuICAvLyBhcmUgd2Ugb3V0c2lkZSB0aGUgY3VydmUgKGFmdGVyIHQyKT9cXG4gIGlmICh5MSA/ICF5MCA6IHkyKSB7XFxuICAgIC8vIHN1YnRyYWN0IHRoZSBjb3ZlcmFnZSBmb3IgdDJcXG4gICAgY292ZXJhZ2UueCAtPSBzYXR1cmF0ZShDMi54ICsgMC41KTtcXG4gICAgLy8gY2FsY3VsYXRlIHRoZSBhbnRpLWFsaWFzaW5nIGZvciB0MlxcbiAgICB3ZWlnaHQueCA9IG1pbih3ZWlnaHQueCwgYWJzKEMyLngpKTtcXG4gIH1cXG59XFxuXFxuLy8gdGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBjb3ZlcmFnZVgsIGJ1dCB3aXRoIHRoZSBheGVzIHN3YXBwZWRcXG52b2lkIGNvdmVyYWdlWSh2ZWMyIHAwLCB2ZWMyIHAxLCB2ZWMyIHAyKSB7XFxuXFxuICB2ZWMyIEMxLCBDMjtcXG4gIGNhbHVsYXRlQ3Jvc3NpbmdzKHAwLCBwMSwgcDIsIEMxLCBDMik7XFxuXFxuICBib29sIHgwID0gcDAueCA+IHZUZXhDb29yZC54O1xcbiAgYm9vbCB4MSA9IHAxLnggPiB2VGV4Q29vcmQueDtcXG4gIGJvb2wgeDIgPSBwMi54ID4gdlRleENvb3JkLng7XFxuXFxuICBpZiAoeDEgPyAheDIgOiB4MCkge1xcbiAgICBjb3ZlcmFnZS55IC09IHNhdHVyYXRlKEMxLnkgKyAwLjUpO1xcbiAgICB3ZWlnaHQueSA9IG1pbih3ZWlnaHQueSwgYWJzKEMxLnkpKTtcXG4gIH1cXG5cXG4gIGlmICh4MSA/ICF4MCA6IHgyKSB7XFxuICAgIGNvdmVyYWdlLnkgKz0gc2F0dXJhdGUoQzIueSArIDAuNSk7XFxuICAgIHdlaWdodC55ID0gbWluKHdlaWdodC55LCBhYnMoQzIueSkpO1xcbiAgfVxcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuXFxuICAvLyBjYWxjdWxhdGUgdGhlIHBpeGVsIHNjYWxlIGJhc2VkIG9uIHNjcmVlbi1jb29yZGluYXRlc1xcbiAgcGl4ZWxTY2FsZSA9IGhhcmRuZXNzIC8gZndpZHRoKHZUZXhDb29yZCk7XFxuXFxuICAvLyB3aGljaCBncmlkIGNlbGwgaXMgdGhpcyBwaXhlbCBpbj9cXG4gIGl2ZWMyIGdyaWRDb29yZCA9IGlmbG9vcih2VGV4Q29vcmQgKiB2ZWMyKHVHcmlkU2l6ZSkpO1xcblxcbiAgLy8gaW50ZXJzZWN0IGN1cnZlcyBpbiB0aGlzIHJvd1xcbiAge1xcbiAgICAvLyB0aGUgaW5kZXggaW50byB0aGUgcm93IGluZm8gYml0bWFwXFxuICAgIGludCByb3dJbmRleCA9IGdyaWRDb29yZC55ICsgdUdyaWRPZmZzZXQueTtcXG4gICAgLy8gZmV0Y2ggdGhlIGluZm8gdGV4ZWxcXG4gICAgdmVjNCByb3dJbmZvID0gZ2V0VGV4ZWwodVNhbXBsZXJSb3dzLCByb3dJbmRleCwgdUdyaWRJbWFnZVNpemUpO1xcbiAgICAvLyB1bnBhY2sgdGhlIHJvd0luZm9cXG4gICAgaW50IHJvd1N0cm9rZUluZGV4ID0gZ2V0SW50MTYocm93SW5mby54eSk7XFxuICAgIGludCByb3dTdHJva2VDb3VudCA9IGdldEludDE2KHJvd0luZm8uencpO1xcblxcbiAgICBmb3IgKGludCBpUm93U3Ryb2tlID0gSU5UKDApOyBpUm93U3Ryb2tlIDwgTjsgaVJvd1N0cm9rZSsrKSB7XFxuICAgICAgaWYgKGlSb3dTdHJva2UgPj0gcm93U3Ryb2tlQ291bnQpXFxuICAgICAgICBicmVhaztcXG5cXG4gICAgICAvLyBlYWNoIHN0cm9rZSBpcyBtYWRlIHVwIG9mIDMgcG9pbnRzOiB0aGUgc3RhcnQgYW5kIGNvbnRyb2wgcG9pbnRcXG4gICAgICAvLyBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGN1cnZlLlxcbiAgICAgIC8vIGZldGNoIHRoZSBpbmRpY2VzIG9mIHRoaXMgcGFpciBvZiBzdHJva2VzOlxcbiAgICAgIHZlYzQgc3Ryb2tlSW5kaWNlcyA9IGdldFRleGVsKHVTYW1wbGVyUm93U3Ryb2tlcywgcm93U3Ryb2tlSW5kZXgrKywgdUNlbGxzSW1hZ2VTaXplKTtcXG5cXG4gICAgICAvLyB1bnBhY2sgdGhlIHN0cm9rZSBpbmRleFxcbiAgICAgIGludCBzdHJva2VQb3MgPSBnZXRJbnQxNihzdHJva2VJbmRpY2VzLnh5KTtcXG5cXG4gICAgICAvLyBmZXRjaCB0aGUgdHdvIHN0cm9rZXNcXG4gICAgICB2ZWM0IHN0cm9rZTAgPSBnZXRUZXhlbCh1U2FtcGxlclN0cm9rZXMsIHN0cm9rZVBvcyArIElOVCgwKSwgdVN0cm9rZUltYWdlU2l6ZSk7XFxuICAgICAgdmVjNCBzdHJva2UxID0gZ2V0VGV4ZWwodVNhbXBsZXJTdHJva2VzLCBzdHJva2VQb3MgKyBJTlQoMSksIHVTdHJva2VJbWFnZVNpemUpO1xcblxcbiAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgY292ZXJhZ2VcXG4gICAgICBjb3ZlcmFnZVgoc3Ryb2tlMC54eSwgc3Ryb2tlMC56dywgc3Ryb2tlMS54eSk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC8vIGludGVyc2VjdCBjdXJ2ZXMgaW4gdGhpcyBjb2x1bW5cXG4gIHtcXG4gICAgaW50IGNvbEluZGV4ID0gZ3JpZENvb3JkLnggKyB1R3JpZE9mZnNldC54O1xcbiAgICB2ZWM0IGNvbEluZm8gPSBnZXRUZXhlbCh1U2FtcGxlckNvbHMsIGNvbEluZGV4LCB1R3JpZEltYWdlU2l6ZSk7XFxuICAgIGludCBjb2xTdHJva2VJbmRleCA9IGdldEludDE2KGNvbEluZm8ueHkpO1xcbiAgICBpbnQgY29sU3Ryb2tlQ291bnQgPSBnZXRJbnQxNihjb2xJbmZvLnp3KTtcXG4gICAgXFxuICAgIGZvciAoaW50IGlDb2xTdHJva2UgPSBJTlQoMCk7IGlDb2xTdHJva2UgPCBOOyBpQ29sU3Ryb2tlKyspIHtcXG4gICAgICBpZiAoaUNvbFN0cm9rZSA+PSBjb2xTdHJva2VDb3VudClcXG4gICAgICAgIGJyZWFrO1xcblxcbiAgICAgIHZlYzQgc3Ryb2tlSW5kaWNlcyA9IGdldFRleGVsKHVTYW1wbGVyQ29sU3Ryb2tlcywgY29sU3Ryb2tlSW5kZXgrKywgdUNlbGxzSW1hZ2VTaXplKTtcXG5cXG4gICAgICBpbnQgc3Ryb2tlUG9zID0gZ2V0SW50MTYoc3Ryb2tlSW5kaWNlcy54eSk7XFxuICAgICAgdmVjNCBzdHJva2UwID0gZ2V0VGV4ZWwodVNhbXBsZXJTdHJva2VzLCBzdHJva2VQb3MgKyBJTlQoMCksIHVTdHJva2VJbWFnZVNpemUpO1xcbiAgICAgIHZlYzQgc3Ryb2tlMSA9IGdldFRleGVsKHVTYW1wbGVyU3Ryb2tlcywgc3Ryb2tlUG9zICsgSU5UKDEpLCB1U3Ryb2tlSW1hZ2VTaXplKTtcXG4gICAgICBjb3ZlcmFnZVkoc3Ryb2tlMC54eSwgc3Ryb2tlMC56dywgc3Ryb2tlMS54eSk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIHdlaWdodCA9IHNhdHVyYXRlKDEuMCAtIHdlaWdodCAqIDIuMCk7XFxuICBmbG9hdCBkaXN0YW5jZSA9IG1heCh3ZWlnaHQueCArIHdlaWdodC55LCBtaW5EaXN0YW5jZSk7IC8vIG1hbmhhdHRhbiBhcHByb3guXFxuICBmbG9hdCBhbnRpYWxpYXMgPSBhYnMoZG90KGNvdmVyYWdlLCB3ZWlnaHQpIC8gZGlzdGFuY2UpO1xcbiAgZmxvYXQgY292ZXIgPSBtaW4oYWJzKGNvdmVyYWdlLngpLCBhYnMoY292ZXJhZ2UueSkpO1xcbiAgZ2xfRnJhZ0NvbG9yID0gdU1hdGVyaWFsQ29sb3I7XFxuICBnbF9GcmFnQ29sb3IuYSAqPSBzYXR1cmF0ZShtYXgoYW50aWFsaWFzLCBjb3ZlcikpO1xcbn1cIixsaW5lVmVydDpcIi8qXFxuICBQYXJ0IG9mIHRoZSBQcm9jZXNzaW5nIHByb2plY3QgLSBodHRwOi8vcHJvY2Vzc2luZy5vcmdcXG4gIENvcHlyaWdodCAoYykgMjAxMi0xNSBUaGUgUHJvY2Vzc2luZyBGb3VuZGF0aW9uXFxuICBDb3B5cmlnaHQgKGMpIDIwMDQtMTIgQmVuIEZyeSBhbmQgQ2FzZXkgUmVhc1xcbiAgQ29weXJpZ2h0IChjKSAyMDAxLTA0IE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3lcXG4gIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcXG4gIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcXG4gIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4xLlxcbiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXFxuICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxcbiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcXG4gIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXFxuICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWxcXG4gIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZVxcbiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCxcXG4gIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQVxcbiovXFxuXFxuI2RlZmluZSBQUk9DRVNTSU5HX0xJTkVfU0hBREVSXFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgdVN0cm9rZVdlaWdodDtcXG5cXG51bmlmb3JtIHZlYzQgdVZpZXdwb3J0O1xcblxcbi8vIHVzaW5nIGEgc2NhbGUgPDEgbW92ZXMgdGhlIGxpbmVzIHRvd2FyZHMgdGhlIGNhbWVyYVxcbi8vIGluIG9yZGVyIHRvIHByZXZlbnQgcG9wcGluZyBlZmZlY3RzIGR1ZSB0byBoYWxmIG9mXFxuLy8gdGhlIGxpbmUgZGlzYXBwZWFyaW5nIGJlaGluZCB0aGUgZ2VvbWV0cnkgZmFjZXMuXFxudmVjMyBzY2FsZSA9IHZlYzMoMC45OTk1KTtcXG5cXG5hdHRyaWJ1dGUgdmVjNCBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgYURpcmVjdGlvbjtcXG4gIFxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzQgcG9zcCA9IHVNb2RlbFZpZXdNYXRyaXggKiBhUG9zaXRpb247XFxuICB2ZWM0IHBvc3EgPSB1TW9kZWxWaWV3TWF0cml4ICogKGFQb3NpdGlvbiArIHZlYzQoYURpcmVjdGlvbi54eXosIDApKTtcXG5cXG4gIC8vIE1vdmluZyB2ZXJ0aWNlcyBzbGlnaHRseSB0b3dhcmQgdGhlIGNhbWVyYVxcbiAgLy8gdG8gYXZvaWQgZGVwdGgtZmlnaHRpbmcgd2l0aCB0aGUgZmlsbCB0cmlhbmdsZXMuXFxuICAvLyBEaXNjdXNzZWQgaGVyZTpcXG4gIC8vIGh0dHA6Ly93d3cub3BlbmdsLm9yZy9kaXNjdXNzaW9uX2JvYXJkcy91YmJ0aHJlYWRzLnBocD91YmI9c2hvd2ZsYXQmTnVtYmVyPTI1Mjg0OCAgXFxuICBwb3NwLnh5eiA9IHBvc3AueHl6ICogc2NhbGU7XFxuICBwb3NxLnh5eiA9IHBvc3EueHl6ICogc2NhbGU7XFxuXFxuICB2ZWM0IHAgPSB1UHJvamVjdGlvbk1hdHJpeCAqIHBvc3A7XFxuICB2ZWM0IHEgPSB1UHJvamVjdGlvbk1hdHJpeCAqIHBvc3E7XFxuXFxuICAvLyBmb3JtdWxhIHRvIGNvbnZlcnQgZnJvbSBjbGlwIHNwYWNlIChyYW5nZSAtMS4uMSkgdG8gc2NyZWVuIHNwYWNlIChyYW5nZSAwLi5bd2lkdGggb3IgaGVpZ2h0XSlcXG4gIC8vIHNjcmVlbl9wID0gKHAueHkvcC53ICsgPDEsMT4pICogMC41ICogdVZpZXdwb3J0Lnp3XFxuXFxuICAvLyBwcmV2ZW50IGRpdmlzaW9uIGJ5IFcgYnkgdHJhbnNmb3JtaW5nIHRoZSB0YW5nZW50IGZvcm11bGEgKGRpdiBieSAwIGNhdXNlc1xcbiAgLy8gdGhlIGxpbmUgdG8gZGlzYXBwZWFyLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb2Nlc3NpbmcvcHJvY2Vzc2luZy9pc3N1ZXMvNTE4MylcXG4gIC8vIHQgPSBzY3JlZW5fcSAtIHNjcmVlbl9wXFxuICAvL1xcbiAgLy8gdGFuZ2VudCBpcyBub3JtYWxpemVkIGFuZCB3ZSBkb24ndCBjYXJlIHdoaWNoIGFEaXJlY3Rpb24gaXQgcG9pbnRzIHRvICgrLSlcXG4gIC8vIHQgPSArLSBub3JtYWxpemUoIHNjcmVlbl9xIC0gc2NyZWVuX3AgKVxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKHEueHkvcS53KzwxLDE+KSowLjUqdVZpZXdwb3J0Lnp3IC0gKHAueHkvcC53KzwxLDE+KSowLjUqdVZpZXdwb3J0Lnp3IClcXG4gIC8vXFxuICAvLyBleHRyYWN0IGNvbW1vbiBmYWN0b3IsIDwxLDE+IC0gPDEsMT4gY2FuY2VscyBvdXRcXG4gIC8vIHQgPSArLSBub3JtYWxpemUoIChxLnh5L3EudyAtIHAueHkvcC53KSAqIDAuNSAqIHVWaWV3cG9ydC56dyApXFxuICAvL1xcbiAgLy8gY29udmVydCB0byBjb21tb24gZGl2aXNvclxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKChxLnh5KnAudyAtIHAueHkqcS53KSAvIChwLncqcS53KSkgKiAwLjUgKiB1Vmlld3BvcnQuencgKVxcbiAgLy9cXG4gIC8vIHJlbW92ZSB0aGUgY29tbW9uIHNjYWxhciBkaXZpc29yL2ZhY3Rvciwgbm90IG5lZWRlZCBkdWUgdG8gbm9ybWFsaXplIGFuZCArLVxcbiAgLy8gKGtlZXAgdVZpZXdwb3J0IC0gY2FuJ3QgcmVtb3ZlIGJlY2F1c2UgaXQgaGFzIGRpZmZlcmVudCBjb21wb25lbnRzIGZvciB4IGFuZCB5XFxuICAvLyAgYW5kIGNvcnJlY3RzIGZvciBhc3BlY3QgcmF0aW8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvY2Vzc2luZy9wcm9jZXNzaW5nL2lzc3Vlcy81MTgxKVxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKHEueHkqcC53IC0gcC54eSpxLncpICogdVZpZXdwb3J0Lnp3IClcXG5cXG4gIHZlYzIgdGFuZ2VudCA9IG5vcm1hbGl6ZSgocS54eSpwLncgLSBwLnh5KnEudykgKiB1Vmlld3BvcnQuencpO1xcblxcbiAgLy8gZmxpcCB0YW5nZW50IHRvIG5vcm1hbCAoaXQncyBhbHJlYWR5IG5vcm1hbGl6ZWQpXFxuICB2ZWMyIG5vcm1hbCA9IHZlYzIoLXRhbmdlbnQueSwgdGFuZ2VudC54KTtcXG5cXG4gIGZsb2F0IHRoaWNrbmVzcyA9IGFEaXJlY3Rpb24udyAqIHVTdHJva2VXZWlnaHQ7XFxuICB2ZWMyIG9mZnNldCA9IG5vcm1hbCAqIHRoaWNrbmVzcyAvIDIuMDtcXG5cXG4gIC8vIFBlcnNwZWN0aXZlIC0tLVxcbiAgLy8gY29udmVydCBmcm9tIHdvcmxkIHRvIGNsaXAgYnkgbXVsdGlwbHlpbmcgd2l0aCBwcm9qZWN0aW9uIHNjYWxpbmcgZmFjdG9yXFxuICAvLyB0byBnZXQgdGhlIHJpZ2h0IHRoaWNrbmVzcyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9jZXNzaW5nL3Byb2Nlc3NpbmcvaXNzdWVzLzUxODIpXFxuICAvLyBpbnZlcnQgWSwgcHJvamVjdGlvbnMgaW4gUHJvY2Vzc2luZyBpbnZlcnQgWVxcbiAgdmVjMiBwZXJzcFNjYWxlID0gKHVQcm9qZWN0aW9uTWF0cml4ICogdmVjNCgxLCAtMSwgMCwgMCkpLnh5O1xcblxcbiAgLy8gTm8gUGVyc3BlY3RpdmUgLS0tXFxuICAvLyBtdWx0aXBseSBieSBXICh0byBjYW5jZWwgb3V0IGRpdmlzaW9uIGJ5IFcgbGF0ZXIgaW4gdGhlIHBpcGVsaW5lKSBhbmRcXG4gIC8vIGNvbnZlcnQgZnJvbSBzY3JlZW4gdG8gY2xpcCAoZGVyaXZlZCBmcm9tIGNsaXAgdG8gc2NyZWVuIGFib3ZlKVxcbiAgdmVjMiBub1BlcnNwU2NhbGUgPSBwLncgLyAoMC41ICogdVZpZXdwb3J0Lnp3KTtcXG5cXG4gIC8vZ2xfUG9zaXRpb24ueHkgPSBwLnh5ICsgb2Zmc2V0Lnh5ICogbWl4KG5vUGVyc3BTY2FsZSwgcGVyc3BTY2FsZSwgZmxvYXQocGVyc3BlY3RpdmUgPiAwKSk7XFxuICBnbF9Qb3NpdGlvbi54eSA9IHAueHkgKyBvZmZzZXQueHkgKiBwZXJzcFNjYWxlO1xcbiAgZ2xfUG9zaXRpb24uencgPSBwLnp3O1xcbn1cXG5cIixsaW5lRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnByZWNpc2lvbiBtZWRpdW1wIGludDtcXG5cXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdU1hdGVyaWFsQ29sb3I7XFxufVwiLHBvaW50VmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG51bmlmb3JtIGZsb2F0IHVQb2ludFNpemU7XFxudmFyeWluZyBmbG9hdCB2U3Ryb2tlV2VpZ2h0O1xcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG52b2lkIG1haW4oKSB7XFxuXFx0dmVjNCBwb3NpdGlvblZlYzQgPSAgdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuXFx0Z2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuXFx0Z2xfUG9pbnRTaXplID0gdVBvaW50U2l6ZTtcXG5cXHR2U3Ryb2tlV2VpZ2h0ID0gdVBvaW50U2l6ZTtcXG59XCIscG9pbnRGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxucHJlY2lzaW9uIG1lZGl1bXAgaW50O1xcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZTdHJva2VXZWlnaHQ7XFxuXFxudm9pZCBtYWluKCl7XFxuXFx0ZmxvYXQgbWFzayA9IDAuMDtcXG5cXG5cXHQvLyBtYWtlIGEgY2lyY3VsYXIgbWFzayB1c2luZyB0aGUgZ2xfUG9pbnRDb29yZCAoZ29lcyBmcm9tIDAgLSAxIG9uIGEgcG9pbnQpXFxuICAgIC8vIG1pZ2h0IGJlIGFibGUgdG8gZ2V0IGEgbmljZXIgZWRnZSBvbiBiaWcgc3Ryb2tld2VpZ2h0cyB3aXRoIHNtb290aHN0ZXAgYnV0IHNsaWdodGx5IGxlc3MgcGVyZm9ybWFudFxcblxcblxcdG1hc2sgPSBzdGVwKDAuOTgsIGxlbmd0aChnbF9Qb2ludENvb3JkICogMi4wIC0gMS4wKSk7XFxuXFxuXFx0Ly8gaWYgc3Ryb2tlV2VpZ2h0IGlzIDEgb3IgbGVzcyBsZXRzIGp1c3QgZHJhdyBhIHNxdWFyZVxcblxcdC8vIHRoaXMgcHJldmVudHMgd2VpcmQgYXJ0aWZhY3RpbmcgZnJvbSBjYXJ2aW5nIGNpcmNsZXMgd2hlbiBvdXIgcG9pbnRzIGFyZSByZWFsbHkgc21hbGxcXG5cXHQvLyBpZiBzdHJva2VXZWlnaHQgaXMgbGFyZ2VyIHRoYW4gMSwgd2UganVzdCB1c2UgaXQgYXMgaXNcXG5cXG5cXHRtYXNrID0gbWl4KDAuMCwgbWFzaywgY2xhbXAoZmxvb3IodlN0cm9rZVdlaWdodCAtIDAuNSksMC4wLDEuMCkpO1xcblxcblxcdC8vIHRocm93IGF3YXkgdGhlIGJvcmRlcnMgb2YgdGhlIG1hc2tcXG4gICAgLy8gb3RoZXJ3aXNlIHdlIGdldCB3ZWlyZCBhbHBoYSBibGVuZGluZyBpc3N1ZXNcXG5cXG5cXHRpZihtYXNrID4gMC45OCl7XFxuICAgICAgZGlzY2FyZDtcXG4gIFxcdH1cXG5cXG4gIFxcdGdsX0ZyYWdDb2xvciA9IHZlYzQodU1hdGVyaWFsQ29sb3IucmdiICogKDEuMCAtIG1hc2spLCB1TWF0ZXJpYWxDb2xvci5hKSA7XFxufVwifTtkLlJlbmRlcmVyR0w9ZnVuY3Rpb24oYSxiLGMsZSl7cmV0dXJuIGQuUmVuZGVyZXIuY2FsbCh0aGlzLGEsYixjKSx0aGlzLmF0dHJpYnV0ZXM9e30sZT1lfHx7fSx0aGlzLmF0dHJpYnV0ZXMuYWxwaGE9dm9pZCAwPT09ZS5hbHBoYXx8ZS5hbHBoYSx0aGlzLmF0dHJpYnV0ZXMuZGVwdGg9dm9pZCAwPT09ZS5kZXB0aHx8ZS5kZXB0aCx0aGlzLmF0dHJpYnV0ZXMuc3RlbmNpbD12b2lkIDA9PT1lLnN0ZW5jaWx8fGUuc3RlbmNpbCx0aGlzLmF0dHJpYnV0ZXMuYW50aWFsaWFzPXZvaWQgMCE9PWUuYW50aWFsaWFzJiZlLmFudGlhbGlhcyx0aGlzLmF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhPXZvaWQgMCE9PWUucHJlbXVsdGlwbGllZEFscGhhJiZlLnByZW11bHRpcGxpZWRBbHBoYSx0aGlzLmF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyPXZvaWQgMD09PWUucHJlc2VydmVEcmF3aW5nQnVmZmVyfHxlLnByZXNlcnZlRHJhd2luZ0J1ZmZlcix0aGlzLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZz12b2lkIDAhPT1lLnBlclBpeGVsTGlnaHRpbmcmJmUucGVyUGl4ZWxMaWdodGluZyx0aGlzLl9pbml0Q29udGV4dCgpLHRoaXMuaXNQM0Q9ITAsdGhpcy5HTD10aGlzLmRyYXdpbmdDb250ZXh0LHRoaXMuYW1iaWVudExpZ2h0Q29sb3JzPVtdLHRoaXMuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbnM9W10sdGhpcy5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzPVtdLHRoaXMucG9pbnRMaWdodFBvc2l0aW9ucz1bXSx0aGlzLnBvaW50TGlnaHRDb2xvcnM9W10sdGhpcy51TVZNYXRyaXg9bmV3IGQuTWF0cml4LHRoaXMudVBNYXRyaXg9bmV3IGQuTWF0cml4LHRoaXMudU5NYXRyaXg9bmV3IGQuTWF0cml4KFwibWF0M1wiKSx0aGlzLl9jdXJDYW1lcmE9bmV3IGQuQ2FtZXJhKHRoaXMpLHRoaXMuX2N1ckNhbWVyYS5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncygpLHRoaXMuX2N1ckNhbWVyYS5fc2V0RGVmYXVsdENhbWVyYSgpLHRoaXMuZ0hhc2g9e30sdGhpcy5fZGVmYXVsdExpZ2h0U2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcj12b2lkIDAsdGhpcy5fZGVmYXVsdE5vcm1hbFNoYWRlcj12b2lkIDAsdGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXI9dm9pZCAwLHRoaXMuY3VyRmlsbFNoYWRlcj12b2lkIDAsdGhpcy5jdXJTdHJva2VTaGFkZXI9dm9pZCAwLHRoaXMuY3VyUG9pbnRTaGFkZXI9dm9pZCAwLHRoaXMuX3VzZUNvbG9yU2hhZGVyKCksdGhpcy5zZXRTdHJva2VTaGFkZXIodGhpcy5fZ2V0TGluZVNoYWRlcigpKSx0aGlzLl91c2VQb2ludFNoYWRlcigpLHRoaXMuX3BvaW50VmVydGV4QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pc0ltbWVkaWF0ZURyYXdpbmc9ITEsdGhpcy5pbW1lZGlhdGVNb2RlPXt9LHRoaXMuZmlsbCgyNTUsMjU1LDI1NSwyNTUpLHRoaXMucG9pbnRTaXplPTUsdGhpcy5zdHJva2VXZWlnaHQoMSksdGhpcy5zdHJva2UoMCwwLDApLHRoaXMudGV4dHVyZXM9W10sdGhpcy5fY3VydmVUaWdodG5lc3M9Nix0aGlzLl9sb29rVXBUYWJsZUJlemllcj1bXSx0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpYz1bXSx0aGlzLl9sdXRCZXppZXJEZXRhaWw9MCx0aGlzLl9sdXRRdWFkcmF0aWNEZXRhaWw9MCx0aGlzLl90ZXNzeT10aGlzLl9pbml0VGVzc3koKSx0aGlzLmZvbnRJbmZvcz17fSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5SZW5kZXJlci5wcm90b3R5cGUpLGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2luaXRDb250ZXh0PWZ1bmN0aW9uKCl7dHJ5e2lmKHRoaXMuZHJhd2luZ0NvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIndlYmdsXCIsdGhpcy5hdHRyaWJ1dGVzKXx8dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLHRoaXMuYXR0cmlidXRlcyksbnVsbD09PXRoaXMuZHJhd2luZ0NvbnRleHQpdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgY3JlYXRpbmcgd2ViZ2wgY29udGV4dFwiKTtjb25zb2xlLmxvZyhcInA1LlJlbmRlcmVyR0w6IGVuYWJsZWQgd2ViZ2wgY29udGV4dFwiKTt2YXIgYT10aGlzLmRyYXdpbmdDb250ZXh0O2EuZW5hYmxlKGEuREVQVEhfVEVTVCksYS5kZXB0aEZ1bmMoYS5MRVFVQUwpLGEudmlld3BvcnQoMCwwLGEuZHJhd2luZ0J1ZmZlcldpZHRoLGEuZHJhd2luZ0J1ZmZlckhlaWdodCksdGhpcy5fdmlld3BvcnQ9dGhpcy5kcmF3aW5nQ29udGV4dC5nZXRQYXJhbWV0ZXIodGhpcy5kcmF3aW5nQ29udGV4dC5WSUVXUE9SVCl9Y2F0Y2goYSl7dGhyb3cgYX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3Jlc2V0Q29udGV4dD1mdW5jdGlvbihhLGIsYyl7dmFyIGU9dGhpcy53aWR0aCxmPXRoaXMuaGVpZ2h0LGc9dGhpcy5jYW52YXMuaWQsaD10aGlzLmNhbnZhcztoJiZoLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCksaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGguaWQ9Zyx0aGlzLl9wSW5zdC5fdXNlck5vZGU/dGhpcy5fcEluc3QuX3VzZXJOb2RlLmFwcGVuZENoaWxkKGgpOmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaCksdGhpcy5fcEluc3QuY2FudmFzPWg7dmFyIGk9bmV3IGQuUmVuZGVyZXJHTCh0aGlzLl9wSW5zdC5jYW52YXMsdGhpcy5fcEluc3QsITAsYSk7dGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiX3JlbmRlcmVyXCIsaSksaS5yZXNpemUoZSxmKSxpLl9hcHBseURlZmF1bHRzKCksdGhpcy5fcEluc3QuX2VsZW1lbnRzLnB1c2goaSksXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmc2V0VGltZW91dChmdW5jdGlvbigpe2MuYXBwbHkod2luZG93Ll9yZW5kZXJlcixiKX0sMCl9LGQucHJvdG90eXBlLnNldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oYSxiKXt0aGlzLl9hc3NlcnQzZChcInNldEF0dHJpYnV0ZXNcIik7dmFyIGM7dm9pZCAwIT09Yj8oYz17fSxjW2FdPWIpOmEgaW5zdGFuY2VvZiBPYmplY3QmJihjPWEpLHRoaXMucHVzaCgpLHRoaXMuX3JlbmRlcmVyLl9yZXNldENvbnRleHQoYyksdGhpcy5wb3AoKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy51TVZNYXRyaXguc2V0KHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMV0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzJdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzVdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbN10sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzhdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTBdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMV0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTNdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSksdGhpcy5hbWJpZW50TGlnaHRDb2xvcnMubGVuZ3RoPTAsdGhpcy5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucy5sZW5ndGg9MCx0aGlzLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnMubGVuZ3RoPTAsdGhpcy5wb2ludExpZ2h0UG9zaXRpb25zLmxlbmd0aD0wLHRoaXMucG9pbnRMaWdodENvbG9ycy5sZW5ndGg9MH0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5iYWNrZ3JvdW5kPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcEluc3QuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKSxiPWEubGV2ZWxzWzBdLzI1NSxjPWEubGV2ZWxzWzFdLzI1NSxkPWEubGV2ZWxzWzJdLzI1NSxlPWEubGV2ZWxzWzNdLzI1NTt0aGlzLkdMLmNsZWFyQ29sb3IoYixjLGQsZSksdGhpcy5HTC5kZXB0aE1hc2soITApLHRoaXMuR0wuY2xlYXIodGhpcy5HTC5DT0xPUl9CVUZGRVJfQklUfHRoaXMuR0wuREVQVEhfQlVGRkVSX0JJVCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihhLGIsYyxmKXt2YXIgZz1kLnByb3RvdHlwZS5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpO3RoaXMuY3VyRmlsbENvbG9yPWcuX2FycmF5LHRoaXMuaXNJbW1lZGlhdGVEcmF3aW5nP3RoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRJbW1lZGlhdGVNb2RlU2hhZGVyKCkpOnRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRDb2xvclNoYWRlcigpKSx0aGlzLmRyYXdNb2RlPWUuRklMTCx0aGlzLmN1ckZpbGxTaGFkZXIuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5jdXJGaWxsQ29sb3IpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnN0cm9rZT1mdW5jdGlvbihhLGIsYyxlKXthcmd1bWVudHNbM109MjU1O3ZhciBmPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyk7dGhpcy5jdXJTdHJva2VDb2xvcj1mLl9hcnJheSx0aGlzLmN1clN0cm9rZVNoYWRlci5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLmN1clN0cm9rZUNvbG9yKSx0aGlzLmN1clBvaW50U2hhZGVyLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLGYuX2FycmF5KX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zdHJva2VXZWlnaHQ9ZnVuY3Rpb24oYSl7dGhpcy5jdXJTdHJva2VXZWlnaHQhPT1hJiYodGhpcy5wb2ludFNpemU9YSx0aGlzLmN1clN0cm9rZVdlaWdodD1hLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLnNldFVuaWZvcm0oXCJ1U3Ryb2tlV2VpZ2h0XCIsYSksdGhpcy5jdXJQb2ludFNoYWRlci5zZXRVbmlmb3JtKFwidVBvaW50U2l6ZVwiLGEpKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiLGMsZSl7cmV0dXJuIGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZ2V0LmFwcGx5KHRoaXMsW2EsYixjLGVdKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5sb2FkUGl4ZWxzPWZ1bmN0aW9uKCl7aWYoITAhPT10aGlzLmF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKXJldHVybiB2b2lkIGNvbnNvbGUubG9nKFwibG9hZFBpeGVscyBvbmx5IHdvcmtzIGluIFdlYkdMIHdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyIGlzIHRydWUuXCIpO3ZhciBhPXRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksYj10aGlzLndpZHRoLGM9dGhpcy5oZWlnaHQ7Yio9YSxjKj1hLHZvaWQgMD09PXRoaXMucGl4ZWxzJiYodGhpcy5waXhlbHM9bmV3IFVpbnQ4QXJyYXkodGhpcy5HTC5kcmF3aW5nQnVmZmVyV2lkdGgqdGhpcy5HTC5kcmF3aW5nQnVmZmVySGVpZ2h0KjQpKSx0aGlzLkdMLnJlYWRQaXhlbHMoMCwwLGIsYyx0aGlzLkdMLlJHQkEsdGhpcy5HTC5VTlNJR05FRF9CWVRFLHRoaXMucGl4ZWxzKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJwaXhlbHNcIix0aGlzLnBpeGVscyl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZ2VvbWV0cnlJbkhhc2g9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZ0hhc2hbYV19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGEsYil7ZC5SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcyxhLGIpLHRoaXMuR0wudmlld3BvcnQoMCwwLHRoaXMuR0wuZHJhd2luZ0J1ZmZlcldpZHRoLHRoaXMuR0wuZHJhd2luZ0J1ZmZlckhlaWdodCksdGhpcy5fdmlld3BvcnQ9dGhpcy5HTC5nZXRQYXJhbWV0ZXIodGhpcy5HTC5WSUVXUE9SVCksdGhpcy5fY3VyQ2FtZXJhLl9yZXNpemUoKSx2b2lkIDAhPT10aGlzLnBpeGVscyYmKHRoaXMucGl4ZWxzPW5ldyBVaW50OEFycmF5KHRoaXMuR0wuZHJhd2luZ0J1ZmZlcldpZHRoKnRoaXMuR0wuZHJhd2luZ0J1ZmZlckhlaWdodCo0KSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHNbMF18fDAsYj1hcmd1bWVudHNbMV18fDAsYz1hcmd1bWVudHNbMl18fDAsZD1hcmd1bWVudHNbM118fDA7dGhpcy5HTC5jbGVhckNvbG9yKGEsYixjLGQpLHRoaXMuR0wuY2xlYXIodGhpcy5HTC5DT0xPUl9CVUZGRVJfQklUfHRoaXMuR0wuREVQVEhfQlVGRkVSX0JJVCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yJiYoYz1hLnosYj1hLnksYT1hLngpLHRoaXMudU1WTWF0cml4LnRyYW5zbGF0ZShbYSxiLGNdKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy51TVZNYXRyaXguc2NhbGUoYSxiLGMpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMD09PWI/dGhpcy5yb3RhdGVaKGEpOihhcmd1bWVudHNbMF09dGhpcy5fcEluc3QuX2Zyb21SYWRpYW5zKGEpLGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUuYXBwbHkodGhpcy51TVZNYXRyaXgsYXJndW1lbnRzKSx0aGlzKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvdGF0ZShhLDEsMCwwKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm90YXRlKGEsMCwxLDApLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3RhdGUoYSwwLDAsMSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKCl7dmFyIGE9ZC5SZW5kZXJlci5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzKSxiPWEucHJvcGVydGllcztyZXR1cm4gYi51TVZNYXRyaXg9dGhpcy51TVZNYXRyaXguY29weSgpLGIudVBNYXRyaXg9dGhpcy51UE1hdHJpeC5jb3B5KCksYi5fY3VyQ2FtZXJhPXRoaXMuX2N1ckNhbWVyYSx0aGlzLl9jdXJDYW1lcmE9dGhpcy5fY3VyQ2FtZXJhLmNvcHkoKSxhfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJlc2V0TWF0cml4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudU1WTWF0cml4PWQuTWF0cml4LmlkZW50aXR5KHRoaXMuX3BJbnN0KSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNldEZpbGxTaGFkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciE9PWEmJih0aGlzLmN1ckZpbGxTaGFkZXI9YSx0aGlzLmN1ckZpbGxTaGFkZXIuaW5pdCgpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2V0UG9pbnRTaGFkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY3VyUG9pbnRTaGFkZXIhPT1hJiYodGhpcy5jdXJQb2ludFNoYWRlcj1hLHRoaXMuY3VyUG9pbnRTaGFkZXIuaW5pdCgpKSx0aGlzLmN1clBvaW50U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNldFN0cm9rZVNoYWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jdXJTdHJva2VTaGFkZXIhPT1hJiYodGhpcy5jdXJTdHJva2VTaGFkZXI9YSx0aGlzLmN1clN0cm9rZVNoYWRlci5pbml0KCkpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91c2VMaWdodFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1ckZpbGxTaGFkZXImJnRoaXMuY3VyRmlsbFNoYWRlci5pc0xpZ2h0U2hhZGVyKCl8fHRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRMaWdodFNoYWRlcigpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VzZUNvbG9yU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciYmdGhpcy5jdXJGaWxsU2hhZGVyIT09dGhpcy5fZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXJ8fHRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRDb2xvclNoYWRlcigpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VzZVBvaW50U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyUG9pbnRTaGFkZXJ8fHRoaXMuc2V0UG9pbnRTaGFkZXIodGhpcy5fZ2V0UG9pbnRTaGFkZXIoKSksdGhpcy5jdXJQb2ludFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXNlSW1tZWRpYXRlTW9kZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1ckZpbGxTaGFkZXImJnRoaXMuY3VyRmlsbFNoYWRlciE9PXRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcnx8dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldEltbWVkaWF0ZU1vZGVTaGFkZXIoKSksdGhpcy5jdXJGaWxsU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRMaWdodFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXJ8fCh0aGlzLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZz90aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5waG9uZ1ZlcnQsZy5waG9uZ0ZyYWcpOnRoaXMuX2RlZmF1bHRMaWdodFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLmxpZ2h0VmVydCxnLmxpZ2h0VGV4dHVyZUZyYWcpKSx0aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldEltbWVkaWF0ZU1vZGVTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLmltbWVkaWF0ZVZlcnQsZy52ZXJ0ZXhDb2xvckZyYWcpKSx0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0Tm9ybWFsU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHROb3JtYWxTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0Tm9ybWFsU2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcubm9ybWFsVmVydCxnLm5vcm1hbEZyYWcpKSx0aGlzLl9kZWZhdWx0Tm9ybWFsU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRDb2xvclNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5ub3JtYWxWZXJ0LGcuYmFzaWNGcmFnKSksdGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRQb2ludFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5wb2ludFZlcnQsZy5wb2ludEZyYWcpKSx0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldExpbmVTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdExpbmVTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0TGluZVNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLmxpbmVWZXJ0LGcubGluZUZyYWcpKSx0aGlzLl9kZWZhdWx0TGluZVNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0Rm9udFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNoYWRlcnx8KHRoaXMuR0wuZ2V0RXh0ZW5zaW9uKFwiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzXCIpLHRoaXMuX2RlZmF1bHRGb250U2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcuZm9udFZlcnQsZy5mb250RnJhZykpLHRoaXMuX2RlZmF1bHRGb250U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRFbXB0eVRleHR1cmU9ZnVuY3Rpb24oKXtpZighdGhpcy5fZW1wdHlUZXh0dXJlKXt2YXIgYT1uZXcgZC5JbWFnZSgxLDEpO2Euc2V0KDAsMCwyNTUpLHRoaXMuX2VtcHR5VGV4dHVyZT1uZXcgZC5UZXh0dXJlKHRoaXMsYSl9cmV0dXJuIHRoaXMuX2VtcHR5VGV4dHVyZX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5nZXRUZXh0dXJlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLnRleHR1cmVzLGM9MDtjPGIubGVuZ3RoOysrYyl7dmFyIGU9YltjXTtpZihlLnNyYz09PWEpcmV0dXJuIGV9dmFyIGY9bmV3IGQuVGV4dHVyZSh0aGlzLGEpO3JldHVybiB0aGlzLnRleHR1cmVzLnB1c2goZiksZn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fYmluZEJ1ZmZlcj1mdW5jdGlvbihhLGIsYyxkLGUpe2lmKHRoaXMuR0wuYmluZEJ1ZmZlcihiLGEpLHZvaWQgMCE9PWMpe3ZhciBmPW5ldyBkKGMpO3RoaXMuR0wuYnVmZmVyRGF0YShiLGYsZSl9fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNtb290aD1mdW5jdGlvbigpeyExPT09dGhpcy5hdHRyaWJ1dGVzLmFudGlhbGlhcyYmdGhpcy5fcEluc3Quc2V0QXR0cmlidXRlcyhcImFudGlhbGlhc1wiLCEwKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5ub1Ntb290aD1mdW5jdGlvbigpeyEwPT09dGhpcy5hdHRyaWJ1dGVzLmFudGlhbGlhcyYmdGhpcy5fcEluc3Quc2V0QXR0cmlidXRlcyhcImFudGlhbGlhc1wiLCExKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZmxhdHRlbj1mdW5jdGlvbihhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuW107aWYoYS5sZW5ndGg+MmU0KXt2YXIgYixjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsZD1cIltvYmplY3QgQXJyYXldXCIsZT1bXSxmPWEuc2xpY2UoKTtiPWYucG9wKCk7ZG97Yy5jYWxsKGIpPT09ZD9mLnB1c2guYXBwbHkoZixiKTplLnB1c2goYil9d2hpbGUoZi5sZW5ndGgmJnZvaWQgMCE9PShiPWYucG9wKCkpKTtyZXR1cm4gZS5yZXZlcnNlKCksZX1yZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sYSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3ZUb05BcnJheT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZmxhdHRlbihhLm1hcChmdW5jdGlvbihhKXtyZXR1cm5bYS54LGEueSxhLnpdfSkpfSxkLnByb3RvdHlwZS5fYXNzZXJ0M2Q9ZnVuY3Rpb24oYSl7aWYoIXRoaXMuX3JlbmRlcmVyLmlzUDNEKXRocm93IG5ldyBFcnJvcihhK1wiKCkgaXMgb25seSBzdXBwb3J0ZWQgaW4gV0VCR0wgbW9kZS4gSWYgeW91J2QgbGlrZSB0byB1c2UgM0QgZ3JhcGhpY3MgYW5kIFdlYkdMLCBzZWUgIGh0dHBzOi8vcDVqcy5vcmcvZXhhbXBsZXMvZm9ybS0zZC1wcmltaXRpdmVzLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9pbml0VGVzc3k9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7YltiLmxlbmd0aF09YVswXSxiW2IubGVuZ3RoXT1hWzFdLGJbYi5sZW5ndGhdPWFbMl19ZnVuY3Rpb24gYihhKXthIT09Zi5wcmltaXRpdmVUeXBlLkdMX1RSSUFOR0xFUyYmY29uc29sZS5sb2coXCJleHBlY3RlZCBUUklBTkdMRVMgYnV0IGdvdCB0eXBlOiBcIithKX1mdW5jdGlvbiBjKGEpe2NvbnNvbGUubG9nKFwiZXJyb3IgY2FsbGJhY2tcIiksY29uc29sZS5sb2coXCJlcnJvciBudW1iZXI6IFwiK2EpfWZ1bmN0aW9uIGQoYSxiLGMpe3JldHVyblthWzBdLGFbMV0sYVsyXV19ZnVuY3Rpb24gZShhKXt9dmFyIGc9bmV3IGYuR2x1VGVzc2VsYXRvcjtyZXR1cm4gZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX1ZFUlRFWF9EQVRBLGEpLGcuZ2x1VGVzc0NhbGxiYWNrKGYuZ2x1RW51bS5HTFVfVEVTU19CRUdJTixiKSxnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfRVJST1IsYyksZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX0NPTUJJTkUsZCksZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX0VER0VfRkxBRyxlKSxnfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl90cmlhbmd1bGF0ZT1mdW5jdGlvbihhKXt0aGlzLl90ZXNzeS5nbHVUZXNzTm9ybWFsKDAsMCwxKTt2YXIgYj1bXTt0aGlzLl90ZXNzeS5nbHVUZXNzQmVnaW5Qb2x5Z29uKGIpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt0aGlzLl90ZXNzeS5nbHVUZXNzQmVnaW5Db250b3VyKCk7Zm9yKHZhciBkPWFbY10sZT0wO2U8ZC5sZW5ndGg7ZSs9Myl7dmFyIGY9W2RbZV0sZFtlKzFdLGRbZSsyXV07dGhpcy5fdGVzc3kuZ2x1VGVzc1ZlcnRleChmLGYpfXRoaXMuX3Rlc3N5LmdsdVRlc3NFbmRDb250b3VyKCl9cmV0dXJuIHRoaXMuX3Rlc3N5LmdsdVRlc3NFbmRQb2x5Z29uKCksYn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fYmV6aWVyQ29lZmZpY2llbnRzPWZ1bmN0aW9uKGEpe3ZhciBiPWEqYSxjPWIqYSxkPTEtYSxlPWQqZDtyZXR1cm5bZSpkLDMqZSphLDMqZCpiLGNdfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9xdWFkcmF0aWNDb2VmZmljaWVudHM9ZnVuY3Rpb24oYSl7dmFyIGI9YSphLGM9MS1hO3JldHVybltjKmMsMipjKmEsYl19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2JlemllclRvQ2F0bXVsbD1mdW5jdGlvbihhKXtyZXR1cm5bYVsxXSxhWzFdKyhhWzJdLWFbMF0pL3RoaXMuX2N1cnZlVGlnaHRuZXNzLGFbMl0tKGFbM10tYVsxXSkvdGhpcy5fY3VydmVUaWdodG5lc3MsYVsyXV19LGIuZXhwb3J0cz1kLlJlbmRlcmVyR0x9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4uL2NvcmUvcDUuUmVuZGVyZXJcIjoyNyxcIi4vcDUuQ2FtZXJhXCI6NjksXCIuL3A1Lk1hdHJpeFwiOjcxLFwiLi9wNS5TaGFkZXJcIjo3NSxsaWJ0ZXNzOjl9XSw3NTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5TaGFkZXI9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3JlbmRlcmVyPWEsdGhpcy5fdmVydFNyYz1iLHRoaXMuX2ZyYWdTcmM9Yyx0aGlzLl92ZXJ0U2hhZGVyPS0xLHRoaXMuX2ZyYWdTaGFkZXI9LTEsdGhpcy5fZ2xQcm9ncmFtPTAsdGhpcy5fbG9hZGVkQXR0cmlidXRlcz0hMSx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5fbG9hZGVkVW5pZm9ybXM9ITEsdGhpcy51bmlmb3Jtcz17fSx0aGlzLl9ib3VuZD0hMSx0aGlzLnNhbXBsZXJzPVtdfSxkLlNoYWRlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2lmKDA9PT10aGlzLl9nbFByb2dyYW0pe3ZhciBhPXRoaXMuX3JlbmRlcmVyLkdMO2lmKHRoaXMuX3ZlcnRTaGFkZXI9YS5jcmVhdGVTaGFkZXIoYS5WRVJURVhfU0hBREVSKSxhLnNoYWRlclNvdXJjZSh0aGlzLl92ZXJ0U2hhZGVyLHRoaXMuX3ZlcnRTcmMpLGEuY29tcGlsZVNoYWRlcih0aGlzLl92ZXJ0U2hhZGVyKSwhYS5nZXRTaGFkZXJQYXJhbWV0ZXIodGhpcy5fdmVydFNoYWRlcixhLkNPTVBJTEVfU1RBVFVTKSlyZXR1cm4gY29uc29sZS5lcnJvcihcIllpa2VzISBBbiBlcnJvciBvY2N1cnJlZCBjb21waWxpbmcgdGhlIHZlcnRleCBzaGFkZXI6XCIrYS5nZXRTaGFkZXJJbmZvTG9nKHRoaXMuX3ZlcnRTaGFkZXIpKSxudWxsO2lmKHRoaXMuX2ZyYWdTaGFkZXI9YS5jcmVhdGVTaGFkZXIoYS5GUkFHTUVOVF9TSEFERVIpLGEuc2hhZGVyU291cmNlKHRoaXMuX2ZyYWdTaGFkZXIsdGhpcy5fZnJhZ1NyYyksYS5jb21waWxlU2hhZGVyKHRoaXMuX2ZyYWdTaGFkZXIpLCFhLmdldFNoYWRlclBhcmFtZXRlcih0aGlzLl9mcmFnU2hhZGVyLGEuQ09NUElMRV9TVEFUVVMpKXJldHVybiBjb25zb2xlLmVycm9yKFwiRGFybiEgQW4gZXJyb3Igb2NjdXJyZWQgY29tcGlsaW5nIHRoZSBmcmFnbWVudCBzaGFkZXI6XCIrYS5nZXRTaGFkZXJJbmZvTG9nKHRoaXMuX2ZyYWdTaGFkZXIpKSxudWxsO3RoaXMuX2dsUHJvZ3JhbT1hLmNyZWF0ZVByb2dyYW0oKSxhLmF0dGFjaFNoYWRlcih0aGlzLl9nbFByb2dyYW0sdGhpcy5fdmVydFNoYWRlciksYS5hdHRhY2hTaGFkZXIodGhpcy5fZ2xQcm9ncmFtLHRoaXMuX2ZyYWdTaGFkZXIpLGEubGlua1Byb2dyYW0odGhpcy5fZ2xQcm9ncmFtKSxhLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5fZ2xQcm9ncmFtLGEuTElOS19TVEFUVVMpfHxjb25zb2xlLmVycm9yKFwiU25hcCEgRXJyb3IgbGlua2luZyBzaGFkZXIgcHJvZ3JhbTogXCIrYS5nZXRQcm9ncmFtSW5mb0xvZyh0aGlzLl9nbFByb2dyYW0pKSx0aGlzLl9sb2FkQXR0cmlidXRlcygpLHRoaXMuX2xvYWRVbmlmb3JtcygpfXJldHVybiB0aGlzfSxkLlNoYWRlci5wcm90b3R5cGUuX2xvYWRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZEF0dHJpYnV0ZXMpe3RoaXMuYXR0cmlidXRlcz17fTtmb3IodmFyIGE9dGhpcy5fcmVuZGVyZXIuR0wsYj1hLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5fZ2xQcm9ncmFtLGEuQUNUSVZFX0FUVFJJQlVURVMpLGM9MDtjPGI7KytjKXt2YXIgZD1hLmdldEFjdGl2ZUF0dHJpYih0aGlzLl9nbFByb2dyYW0sYyksZT1kLm5hbWUsZj1hLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMuX2dsUHJvZ3JhbSxlKSxnPXt9O2cubmFtZT1lLGcubG9jYXRpb249ZixnLnR5cGU9ZC50eXBlLGcuc2l6ZT1kLnNpemUsdGhpcy5hdHRyaWJ1dGVzW2VdPWd9dGhpcy5fbG9hZGVkQXR0cmlidXRlcz0hMH19LGQuU2hhZGVyLnByb3RvdHlwZS5fbG9hZFVuaWZvcm1zPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZFVuaWZvcm1zKXtmb3IodmFyIGE9dGhpcy5fcmVuZGVyZXIuR0wsYj1hLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5fZ2xQcm9ncmFtLGEuQUNUSVZFX1VOSUZPUk1TKSxjPTAsZD0wO2Q8YjsrK2Qpe3ZhciBlPWEuZ2V0QWN0aXZlVW5pZm9ybSh0aGlzLl9nbFByb2dyYW0sZCksZj17fTtmLmxvY2F0aW9uPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMuX2dsUHJvZ3JhbSxlLm5hbWUpLGYuc2l6ZT1lLnNpemU7dmFyIGc9ZS5uYW1lO2Uuc2l6ZT4xJiYoZz1nLnN1YnN0cmluZygwLGcuaW5kZXhPZihcIlswXVwiKSkpLGYubmFtZT1nLGYudHlwZT1lLnR5cGUsZi50eXBlPT09YS5TQU1QTEVSXzJEJiYoZi5zYW1wbGVySW5kZXg9YyxjKyssdGhpcy5zYW1wbGVycy5wdXNoKGYpKSx0aGlzLnVuaWZvcm1zW2ddPWZ9dGhpcy5fbG9hZGVkVW5pZm9ybXM9ITB9fSxkLlNoYWRlci5wcm90b3R5cGUuY29tcGlsZT1mdW5jdGlvbigpe30sZC5TaGFkZXIucHJvdG90eXBlLmJpbmRTaGFkZXI9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLl9ib3VuZHx8KHRoaXMudXNlUHJvZ3JhbSgpLHRoaXMuX2JvdW5kPSEwLHRoaXMuYmluZFRleHR1cmVzKCksdGhpcy5fc2V0TWF0cml4VW5pZm9ybXMoKSx0aGlzPT09dGhpcy5fcmVuZGVyZXIuY3VyU3Ryb2tlU2hhZGVyJiZ0aGlzLl9zZXRWaWV3cG9ydFVuaWZvcm0oKSl9LGQuU2hhZGVyLnByb3RvdHlwZS51bmJpbmRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm91bmQmJih0aGlzLnVuYmluZFRleHR1cmVzKCksdGhpcy5fYm91bmQ9ITEpLHRoaXN9LGQuU2hhZGVyLnByb3RvdHlwZS5iaW5kVGV4dHVyZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5fcmVuZGVyZXIuR0wsYj0wO2I8dGhpcy5zYW1wbGVycy5sZW5ndGg7YisrKXt2YXIgYz10aGlzLnNhbXBsZXJzW2JdLGQ9Yy50ZXh0dXJlO3ZvaWQgMD09PWQmJihkPXRoaXMuX3JlbmRlcmVyLl9nZXRFbXB0eVRleHR1cmUoKSksYS5hY3RpdmVUZXh0dXJlKGEuVEVYVFVSRTArYy5zYW1wbGVySW5kZXgpLGQuYmluZFRleHR1cmUoKSxkLnVwZGF0ZSgpLGEudW5pZm9ybTFpKGMubG9jYXRpb24sYy5zYW1wbGVySW5kZXgpfX0sZC5TaGFkZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTx0aGlzLnNhbXBsZXJzLmxlbmd0aDthKyspe3ZhciBiPXRoaXMuc2FtcGxlcnNbYV0sYz1iLnRleHR1cmU7YyYmYy51cGRhdGUoKX19LGQuU2hhZGVyLnByb3RvdHlwZS51bmJpbmRUZXh0dXJlcz1mdW5jdGlvbigpe30sZC5TaGFkZXIucHJvdG90eXBlLl9zZXRNYXRyaXhVbmlmb3Jtcz1mdW5jdGlvbigpe3RoaXMuc2V0VW5pZm9ybShcInVQcm9qZWN0aW9uTWF0cml4XCIsdGhpcy5fcmVuZGVyZXIudVBNYXRyaXgubWF0NCksdGhpcy5zZXRVbmlmb3JtKFwidU1vZGVsVmlld01hdHJpeFwiLHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5tYXQ0KSx0aGlzLnNldFVuaWZvcm0oXCJ1Vmlld01hdHJpeFwiLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDQpLHRoaXM9PT10aGlzLl9yZW5kZXJlci5jdXJGaWxsU2hhZGVyJiYodGhpcy5fcmVuZGVyZXIudU5NYXRyaXguaW52ZXJzZVRyYW5zcG9zZSh0aGlzLl9yZW5kZXJlci51TVZNYXRyaXgpLHRoaXMuc2V0VW5pZm9ybShcInVOb3JtYWxNYXRyaXhcIix0aGlzLl9yZW5kZXJlci51Tk1hdHJpeC5tYXQzKSl9LGQuU2hhZGVyLnByb3RvdHlwZS5fc2V0Vmlld3BvcnRVbmlmb3JtPWZ1bmN0aW9uKCl7dGhpcy5zZXRVbmlmb3JtKFwidVZpZXdwb3J0XCIsdGhpcy5fcmVuZGVyZXIuX3ZpZXdwb3J0KX0sZC5TaGFkZXIucHJvdG90eXBlLnVzZVByb2dyYW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuR0wudXNlUHJvZ3JhbSh0aGlzLl9nbFByb2dyYW0pLHRoaXN9LGQuU2hhZGVyLnByb3RvdHlwZS5zZXRVbmlmb3JtPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy51bmlmb3Jtc1thXTtpZihjKXt2YXIgZD1jLmxvY2F0aW9uLGU9dGhpcy5fcmVuZGVyZXIuR0w7c3dpdGNoKHRoaXMudXNlUHJvZ3JhbSgpLGMudHlwZSl7Y2FzZSBlLkJPT0w6ITA9PT1iP2UudW5pZm9ybTFpKGQsMSk6ZS51bmlmb3JtMWkoZCwwKTticmVhaztjYXNlIGUuSU5UOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0xaXYoZCxiKTplLnVuaWZvcm0xaShkLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVDpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtMWZ2KGQsYik6ZS51bmlmb3JtMWYoZCxiKTticmVhaztjYXNlIGUuRkxPQVRfTUFUMzplLnVuaWZvcm1NYXRyaXgzZnYoZCwhMSxiKTticmVhaztjYXNlIGUuRkxPQVRfTUFUNDplLnVuaWZvcm1NYXRyaXg0ZnYoZCwhMSxiKTticmVhaztjYXNlIGUuRkxPQVRfVkVDMjpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtMmZ2KGQsYik6ZS51bmlmb3JtMmYoZCxiWzBdLGJbMV0pO2JyZWFrO2Nhc2UgZS5GTE9BVF9WRUMzOlxuYy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTNmdihkLGIpOmUudW5pZm9ybTNmKGQsYlswXSxiWzFdLGJbMl0pO2JyZWFrO2Nhc2UgZS5GTE9BVF9WRUM0OmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm00ZnYoZCxiKTplLnVuaWZvcm00ZihkLGJbMF0sYlsxXSxiWzJdLGJbM10pO2JyZWFrO2Nhc2UgZS5JTlRfVkVDMjpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtMml2KGQsYik6ZS51bmlmb3JtMmkoZCxiWzBdLGJbMV0pO2JyZWFrO2Nhc2UgZS5JTlRfVkVDMzpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtM2l2KGQsYik6ZS51bmlmb3JtM2koZCxiWzBdLGJbMV0sYlsyXSk7YnJlYWs7Y2FzZSBlLklOVF9WRUM0OmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm00aXYoZCxiKTplLnVuaWZvcm00aShkLGJbMF0sYlsxXSxiWzJdLGJbM10pO2JyZWFrO2Nhc2UgZS5TQU1QTEVSXzJEOmUuYWN0aXZlVGV4dHVyZShlLlRFWFRVUkUwK2Muc2FtcGxlckluZGV4KSxjLnRleHR1cmU9dGhpcy5fcmVuZGVyZXIuZ2V0VGV4dHVyZShiKSxlLnVuaWZvcm0xaShjLmxvY2F0aW9uLGMuc2FtcGxlckluZGV4KX1yZXR1cm4gdGhpc319LGQuU2hhZGVyLnByb3RvdHlwZS5pc0xpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVVzZUxpZ2h0aW5nfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVBbWJpZW50TGlnaHRDb3VudHx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51RGlyZWN0aW9uYWxMaWdodENvdW50fHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVQb2ludExpZ2h0Q291bnR8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudUFtYmllbnRDb2xvcnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51RGlyZWN0aW9uYWxDb2xvcnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51UG9pbnRMaWdodExvY2F0aW9ufHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVQb2ludExpZ2h0Q29sb3J8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudUxpZ2h0aW5nRGlyZWN0aW9ufHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVTcGVjdWxhcn0sZC5TaGFkZXIucHJvdG90eXBlLmlzVGV4dHVyZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNhbXBsZXJJbmRleD4wfSxkLlNoYWRlci5wcm90b3R5cGUuaXNDb2xvclNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmF0dHJpYnV0ZXMuYVZlcnRleENvbG9yfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVNYXRlcmlhbENvbG9yfSxkLlNoYWRlci5wcm90b3R5cGUuaXNUZXhMaWdodFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzTGlnaHRTaGFkZXIoKSYmdGhpcy5pc1RleHR1cmVTaGFkZXIoKX0sZC5TaGFkZXIucHJvdG90eXBlLmlzU3Ryb2tlU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVN0cm9rZVdlaWdodH0sZC5TaGFkZXIucHJvdG90eXBlLmVuYWJsZUF0dHJpYj1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9dGhpcy5fcmVuZGVyZXIuR0w7cmV0dXJuLTEhPT1hJiYoZy5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhKSxnLnZlcnRleEF0dHJpYlBvaW50ZXIoYSxiLGMsZCxlLGYpKSx0aGlzfSxiLmV4cG9ydHM9ZC5TaGFkZXJ9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QuVGV4dHVyZT1mdW5jdGlvbihhLGIpe3RoaXMuX3JlbmRlcmVyPWE7dmFyIGM9dGhpcy5fcmVuZGVyZXIuR0w7dGhpcy5zcmM9Yix0aGlzLmdsVGV4PXZvaWQgMCx0aGlzLmdsVGFyZ2V0PWMuVEVYVFVSRV8yRCx0aGlzLmdsRm9ybWF0PWMuUkdCQSx0aGlzLm1pcG1hcHM9ITEsdGhpcy5nbE1pbkZpbHRlcj1jLkxJTkVBUix0aGlzLmdsTWFnRmlsdGVyPWMuTElORUFSLHRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UsdGhpcy5nbFdyYXBUPWMuQ0xBTVBfVE9fRURHRSx0aGlzLmlzU3JjTWVkaWFFbGVtZW50PXZvaWQgMCE9PWQuTWVkaWFFbGVtZW50JiZiIGluc3RhbmNlb2YgZC5NZWRpYUVsZW1lbnQsdGhpcy5fdmlkZW9QcmV2VXBkYXRlVGltZT0wLHRoaXMuaXNTcmNIVE1MRWxlbWVudD12b2lkIDAhPT1kLkVsZW1lbnQmJmIgaW5zdGFuY2VvZiBkLkVsZW1lbnQmJiEoYiBpbnN0YW5jZW9mIGQuR3JhcGhpY3MpLHRoaXMuaXNTcmNQNUltYWdlPWIgaW5zdGFuY2VvZiBkLkltYWdlLHRoaXMuaXNTcmNQNUdyYXBoaWNzPWIgaW5zdGFuY2VvZiBkLkdyYXBoaWNzLHRoaXMuaXNJbWFnZURhdGE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEltYWdlRGF0YSYmYiBpbnN0YW5jZW9mIEltYWdlRGF0YTt2YXIgZT10aGlzLl9nZXRUZXh0dXJlRGF0YUZyb21Tb3VyY2UoKTtyZXR1cm4gdGhpcy53aWR0aD1lLndpZHRoLHRoaXMuaGVpZ2h0PWUuaGVpZ2h0LHRoaXMuaW5pdChlKSx0aGlzfSxkLlRleHR1cmUucHJvdG90eXBlLl9nZXRUZXh0dXJlRGF0YUZyb21Tb3VyY2U9ZnVuY3Rpb24oKXt2YXIgYTtyZXR1cm4gdGhpcy5pc1NyY1A1SW1hZ2U/YT10aGlzLnNyYy5jYW52YXM6dGhpcy5pc1NyY01lZGlhRWxlbWVudHx8dGhpcy5pc1NyY1A1R3JhcGhpY3N8fHRoaXMuaXNTcmNIVE1MRWxlbWVudD9hPXRoaXMuc3JjLmVsdDp0aGlzLmlzSW1hZ2VEYXRhJiYoYT10aGlzLnNyYyksYX0sZC5UZXh0dXJlLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX3JlbmRlcmVyLkdMO2lmKHRoaXMuZ2xUZXg9Yi5jcmVhdGVUZXh0dXJlKCksdGhpcy5iaW5kVGV4dHVyZSgpLGIudGV4UGFyYW1ldGVyaShiLlRFWFRVUkVfMkQsYi5URVhUVVJFX01BR19GSUxURVIsdGhpcy5nbE1hZ0ZpbHRlciksYi50ZXhQYXJhbWV0ZXJpKGIuVEVYVFVSRV8yRCxiLlRFWFRVUkVfTUlOX0ZJTFRFUix0aGlzLmdsTWluRmlsdGVyKSxiLnRleFBhcmFtZXRlcmkoYi5URVhUVVJFXzJELGIuVEVYVFVSRV9XUkFQX1MsdGhpcy5nbFdyYXBTKSxiLnRleFBhcmFtZXRlcmkoYi5URVhUVVJFXzJELGIuVEVYVFVSRV9XUkFQX1QsdGhpcy5nbFdyYXBUKSwwPT09dGhpcy53aWR0aHx8MD09PXRoaXMuaGVpZ2h0fHx0aGlzLmlzU3JjTWVkaWFFbGVtZW50JiYhdGhpcy5zcmMubG9hZGVkbWV0YWRhdGEpe3ZhciBjPW5ldyBVaW50OEFycmF5KFsxLDEsMSwxXSk7Yi50ZXhJbWFnZTJEKHRoaXMuZ2xUYXJnZXQsMCxiLlJHQkEsMSwxLDAsdGhpcy5nbEZvcm1hdCxiLlVOU0lHTkVEX0JZVEUsYyl9ZWxzZSBiLnRleEltYWdlMkQodGhpcy5nbFRhcmdldCwwLHRoaXMuZ2xGb3JtYXQsdGhpcy5nbEZvcm1hdCxiLlVOU0lHTkVEX0JZVEUsYSl9LGQuVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zcmM7aWYoMD09PWEud2lkdGh8fDA9PT1hLmhlaWdodClyZXR1cm4hMTt2YXIgYj10aGlzLl9nZXRUZXh0dXJlRGF0YUZyb21Tb3VyY2UoKSxjPSExLGQ9dGhpcy5fcmVuZGVyZXIuR0w7cmV0dXJuIGIud2lkdGghPT10aGlzLndpZHRofHxiLmhlaWdodCE9PXRoaXMuaGVpZ2h0PyhjPSEwLHRoaXMud2lkdGg9Yi53aWR0aCx0aGlzLmhlaWdodD1iLmhlaWdodCx0aGlzLmlzU3JjUDVJbWFnZT9hLnNldE1vZGlmaWVkKCExKToodGhpcy5pc1NyY01lZGlhRWxlbWVudHx8dGhpcy5pc1NyY0hUTUxFbGVtZW50KSYmYS5zZXRNb2RpZmllZCghMCkpOnRoaXMuaXNTcmNQNUltYWdlP2EuaXNNb2RpZmllZCgpJiYoYz0hMCxhLnNldE1vZGlmaWVkKCExKSk6dGhpcy5pc1NyY01lZGlhRWxlbWVudD9hLmlzTW9kaWZpZWQoKT8oYz0hMCxhLnNldE1vZGlmaWVkKCExKSk6YS5sb2FkZWRtZXRhZGF0YSYmdGhpcy5fdmlkZW9QcmV2VXBkYXRlVGltZSE9PWEudGltZSgpJiYodGhpcy5fdmlkZW9QcmV2VXBkYXRlVGltZT1hLnRpbWUoKSxjPSEwKTp0aGlzLmlzSW1hZ2VEYXRhP2EuX2RpcnR5JiYoYS5fZGlydHk9ITEsYz0hMCk6Yz0hMCxjJiYodGhpcy5iaW5kVGV4dHVyZSgpLGQudGV4SW1hZ2UyRCh0aGlzLmdsVGFyZ2V0LDAsdGhpcy5nbEZvcm1hdCx0aGlzLmdsRm9ybWF0LGQuVU5TSUdORURfQllURSxiKSksY30sZC5UZXh0dXJlLnByb3RvdHlwZS5iaW5kVGV4dHVyZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5HTC5iaW5kVGV4dHVyZSh0aGlzLmdsVGFyZ2V0LHRoaXMuZ2xUZXgpLHRoaXN9LGQuVGV4dHVyZS5wcm90b3R5cGUudW5iaW5kVGV4dHVyZT1mdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLkdMLmJpbmRUZXh0dXJlKHRoaXMuZ2xUYXJnZXQsbnVsbCl9LGQuVGV4dHVyZS5wcm90b3R5cGUuc2V0SW50ZXJwb2xhdGlvbj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX3JlbmRlcmVyLkdMO2E9PT1lLk5FQVJFU1Q/dGhpcy5nbE1pbkZpbHRlcj1jLk5FQVJFU1Q6dGhpcy5nbE1pbkZpbHRlcj1jLkxJTkVBUixiPT09ZS5ORUFSRVNUP3RoaXMuZ2xNYWdGaWx0ZXI9Yy5ORUFSRVNUOnRoaXMuZ2xNYWdGaWx0ZXI9Yy5MSU5FQVIsdGhpcy5iaW5kVGV4dHVyZSgpLGMudGV4UGFyYW1ldGVyaShjLlRFWFRVUkVfMkQsYy5URVhUVVJFX01JTl9GSUxURVIsdGhpcy5nbE1pbkZpbHRlciksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfTUFHX0ZJTFRFUix0aGlzLmdsTWFnRmlsdGVyKSx0aGlzLnVuYmluZFRleHR1cmUoKX0sZC5UZXh0dXJlLnByb3RvdHlwZS5zZXRXcmFwTW9kZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX3JlbmRlcmVyLkdMLGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PShhJmEtMSl9LGY9ZCh0aGlzLndpZHRoKSxnPWQodGhpcy53aWR0aCk7YT09PWUuUkVQRUFUP2YmJmc/dGhpcy5nbFdyYXBTPWMuUkVQRUFUOihjb25zb2xlLndhcm4oXCJZb3UgdHJpZWQgdG8gc2V0IHRoZSB3cmFwIG1vZGUgdG8gUkVQRUFUIGJ1dCB0aGUgdGV4dHVyZSBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIHR3by4gU2V0dGluZyB0byBDTEFNUCBpbnN0ZWFkXCIpLHRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UpOmE9PT1lLk1JUlJPUj9mJiZnP3RoaXMuZ2xXcmFwUz1jLk1JUlJPUkVEX1JFUEVBVDooY29uc29sZS53YXJuKFwiWW91IHRyaWVkIHRvIHNldCB0aGUgd3JhcCBtb2RlIHRvIE1JUlJPUiBidXQgdGhlIHRleHR1cmUgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uIFNldHRpbmcgdG8gQ0xBTVAgaW5zdGVhZFwiKSx0aGlzLmdsV3JhcFM9Yy5DTEFNUF9UT19FREdFKTp0aGlzLmdsV3JhcFM9Yy5DTEFNUF9UT19FREdFLGI9PT1lLlJFUEVBVD9mJiZnP3RoaXMuZ2xXcmFwVD1jLlJFUEVBVDooY29uc29sZS53YXJuKFwiWW91IHRyaWVkIHRvIHNldCB0aGUgd3JhcCBtb2RlIHRvIFJFUEVBVCBidXQgdGhlIHRleHR1cmUgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uIFNldHRpbmcgdG8gQ0xBTVAgaW5zdGVhZFwiKSx0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFKTpiPT09ZS5NSVJST1I/ZiYmZz90aGlzLmdsV3JhcFQ9Yy5NSVJST1JFRF9SRVBFQVQ6KGNvbnNvbGUud2FybihcIllvdSB0cmllZCB0byBzZXQgdGhlIHdyYXAgbW9kZSB0byBNSVJST1IgYnV0IHRoZSB0ZXh0dXJlIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgdHdvLiBTZXR0aW5nIHRvIENMQU1QIGluc3RlYWRcIiksdGhpcy5nbFdyYXBUPWMuQ0xBTVBfVE9fRURHRSk6dGhpcy5nbFdyYXBUPWMuQ0xBTVBfVE9fRURHRSx0aGlzLmJpbmRUZXh0dXJlKCksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfV1JBUF9TLHRoaXMuZ2xXcmFwUyksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfV1JBUF9ULHRoaXMuZ2xXcmFwVCksdGhpcy51bmJpbmRUZXh0dXJlKCl9LGIuZXhwb3J0cz1kLlRleHR1cmV9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDc3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3RoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iLHRoaXMuaW5mb3M9W10sdGhpcy5maW5kSW1hZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy53aWR0aCp0aGlzLmhlaWdodDtpZihhPmIpdGhyb3cgbmV3IEVycm9yKFwiZm9udCBpcyB0b28gY29tcGxleCB0byByZW5kZXIgaW4gM0RcIik7Zm9yKHZhciBjLGQsZT10aGlzLmluZm9zLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgZj10aGlzLmluZm9zW2VdO2lmKGYuaW5kZXgrYTxiKXtjPWYsZD1mLmltYWdlRGF0YTticmVha319aWYoIWMpe3RyeXtkPW5ldyBJbWFnZURhdGEodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9Y2F0Y2goYSl7dmFyIGc9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjYW52YXNcIilbMF0saD0hZztnfHwoZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGcuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGcpKTt2YXIgaT1nLmdldENvbnRleHQoXCIyZFwiKTtpJiYoZD1pLmNyZWF0ZUltYWdlRGF0YSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSksaCYmZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChnKX1jPXtpbmRleDowLGltYWdlRGF0YTpkfSx0aGlzLmluZm9zLnB1c2goYyl9dmFyIGo9Yy5pbmRleDtyZXR1cm4gYy5pbmRleCs9YSxkLl9kaXJ0eT0hMCx7aW1hZ2VEYXRhOmQsaW5kZXg6an19fWZ1bmN0aW9uIGUoYSxiLGMsZCxlKXt2YXIgZj1hLmltYWdlRGF0YSxnPWYuZGF0YSxoPTQqYS5pbmRleCsrO2dbaCsrXT1iLGdbaCsrXT1jLGdbaCsrXT1kLGdbaCsrXT1lfXZhciBmPWEoXCIuLi9jb3JlL21haW5cIiksZz1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4vcDUuU2hhZGVyXCIpLGEoXCIuL3A1LlJlbmRlcmVyR0xcIiksZi5SZW5kZXJlckdMLnByb3RvdHlwZS5fYXBwbHlUZXh0UHJvcGVydGllcz1mdW5jdGlvbigpe30sZi5SZW5kZXJlckdMLnByb3RvdHlwZS50ZXh0V2lkdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2lzT3BlblR5cGUoKT90aGlzLl90ZXh0Rm9udC5fdGV4dFdpZHRoKGEsdGhpcy5fdGV4dFNpemUpOjB9O3ZhciBoPTksaT1oLGo9NjQsaz02NCxsPTY0LG09NjQsbj02NCxvPTY0LHA9TWF0aC5zcXJ0KDMpLHE9ZnVuY3Rpb24oYSl7dGhpcy5mb250PWEsdGhpcy5zdHJva2VJbWFnZUluZm9zPW5ldyBkKGosayksdGhpcy5jb2xEaW1JbWFnZUluZm9zPW5ldyBkKGwsbSksdGhpcy5yb3dEaW1JbWFnZUluZm9zPW5ldyBkKGwsbSksdGhpcy5jb2xDZWxsSW1hZ2VJbmZvcz1uZXcgZChuLG8pLHRoaXMucm93Q2VsbEltYWdlSW5mb3M9bmV3IGQobixvKSx0aGlzLmdseXBoSW5mb3M9e30sdGhpcy5nZXRHbHlwaEluZm89ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhLGIsYyl7ZnVuY3Rpb24gZChhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoO2QtLSA+MDspe3ZhciBlPWFbZF07Yj5lJiYoYj1lKSxjPGUmJihjPWUpfXJldHVybnttaW46YixtYXg6Y319dmFyIGU9dy5sZW5ndGg7dy5wdXNoKGMpO2Zvcih2YXIgZj1kKGEsMSwwKSxnPU1hdGgubWF4KE1hdGguZmxvb3IoZi5taW4qaCksMCksaj1NYXRoLm1pbihNYXRoLmNlaWwoZi5tYXgqaCksaCksaz1nO2s8ajsrK2speVtrXS5wdXNoKGUpO2Zvcih2YXIgbD1kKGIsMSwwKSxtPU1hdGgubWF4KE1hdGguZmxvb3IobC5taW4qaSksMCksbj1NYXRoLm1pbihNYXRoLmNlaWwobC5tYXgqaSksaSksbz1tO288bjsrK28peFtvXS5wdXNoKGUpfWZ1bmN0aW9uIGMoYSxiLGMpe3JldHVybiBhPGI/YjphPmM/YzphfWZ1bmN0aW9uIGQoYSl7cmV0dXJuIGMoMjU1KmEsMCwyNTUpfWZ1bmN0aW9uIGcoYSxiLGMsZCl7dGhpcy5wMD1hLHRoaXMuYzA9Yix0aGlzLmMxPWMsdGhpcy5wMT1kLHRoaXMudG9RdWFkcmF0aWM9ZnVuY3Rpb24oKXtyZXR1cm57eDp0aGlzLnAwLngseTp0aGlzLnAwLnkseDE6dGhpcy5wMS54LHkxOnRoaXMucDEueSxjeDooMyoodGhpcy5jMC54K3RoaXMuYzEueCktKHRoaXMucDAueCt0aGlzLnAxLngpKS80LGN5OigzKih0aGlzLmMwLnkrdGhpcy5jMS55KS0odGhpcy5wMC55K3RoaXMucDEueSkpLzR9fSx0aGlzLnF1YWRFcnJvcj1mdW5jdGlvbigpe3JldHVybiBmLlZlY3Rvci5zdWIoZi5WZWN0b3Iuc3ViKHRoaXMucDEsdGhpcy5wMCksZi5WZWN0b3IubXVsdChmLlZlY3Rvci5zdWIodGhpcy5jMSx0aGlzLmMwKSwzKSkubWFnKCkvMn0sdGhpcy5zcGxpdD1mdW5jdGlvbihhKXt2YXIgYj1mLlZlY3Rvci5sZXJwKHRoaXMucDAsdGhpcy5jMCxhKSxjPWYuVmVjdG9yLmxlcnAodGhpcy5jMCx0aGlzLmMxLGEpLGQ9Zi5WZWN0b3IubGVycChiLGMsYSk7dGhpcy5jMT1mLlZlY3Rvci5sZXJwKHRoaXMuYzEsdGhpcy5wMSxhKSx0aGlzLmMwPWYuVmVjdG9yLmxlcnAoYyx0aGlzLmMxLGEpO3ZhciBlPWYuVmVjdG9yLmxlcnAoZCx0aGlzLmMwLGEpLGg9bmV3IGcodGhpcy5wMCxiLGQsZSk7cmV0dXJuIHRoaXMucDA9ZSxofSx0aGlzLnNwbGl0SW5mbGVjdGlvbnM9ZnVuY3Rpb24oKXt2YXIgYT1mLlZlY3Rvci5zdWIodGhpcy5jMCx0aGlzLnAwKSxiPWYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIodGhpcy5jMSx0aGlzLmMwKSxhKSxjPWYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIoZi5WZWN0b3Iuc3ViKHRoaXMucDEsdGhpcy5jMSksYSksZi5WZWN0b3IubXVsdChiLDIpKSxkPVtdLGU9Yi54KmMueS1iLnkqYy54O2lmKDAhPT1lKXt2YXIgZz1hLngqYy55LWEueSpjLngsaD1hLngqYi55LWEueSpiLngsaT1nKmctNCplKmg7aWYoaT49MCl7ZTwwJiYoZT0tZSxnPS1nLGg9LWgpO3ZhciBqPU1hdGguc3FydChpKSxrPSgtZy1qKS8oMiplKSxsPSgtZytqKS8oMiplKTtrPjAmJms8MSYmKGQucHVzaCh0aGlzLnNwbGl0KGspKSxsPTEtKDEtbCkvKDEtaykpLGw+MCYmbDwxJiZkLnB1c2godGhpcy5zcGxpdChsKSl9fXJldHVybiBkLnB1c2godGhpcyksZH19ZnVuY3Rpb24gaihhLGIsYyxkLGUsaCxpLGope2Zvcih2YXIgaz1uZXcgZyhuZXcgZi5WZWN0b3IoYSxiKSxuZXcgZi5WZWN0b3IoYyxkKSxuZXcgZi5WZWN0b3IoZSxoKSxuZXcgZi5WZWN0b3IoaSxqKSkuc3BsaXRJbmZsZWN0aW9ucygpLGw9W10sbT0zMC9wLG49MDtuPGsubGVuZ3RoO24rKyl7Zm9yKHZhciBvLHE9a1tuXSxyPVtdOyEoKG89bS9xLnF1YWRFcnJvcigpKT49LjEyNSk7KXt2YXIgcz1NYXRoLnBvdyhvLDEvMyksdD1xLnNwbGl0KHMpLHU9cS5zcGxpdCgxLXMvKDEtcykpO2wucHVzaCh0KSxyLnB1c2gocSkscT11fW88MSYmbC5wdXNoKHEuc3BsaXQoLjUpKSxsLnB1c2gocSksQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobCxyLnJldmVyc2UoKSl9cmV0dXJuIGx9ZnVuY3Rpb24gayhhLGMsZCxlKXtiKFthLGRdLFtjLGVdLHt4OmEseTpjLGN4OihhK2QpLzIsY3k6KGMrZSkvMn0pfWZ1bmN0aW9uIGwoYSxiLGMsZCl7cmV0dXJuIE1hdGguYWJzKGMtYSk8MWUtNSYmTWF0aC5hYnMoZC1iKTwxZS01fWZ1bmN0aW9uIG0oYSxiLGMpe2Zvcih2YXIgZD1hLmxlbmd0aCxmPWIuZmluZEltYWdlKGQpLGc9Zi5pbmRleCxoPTAsaT0wO2k8ZDsrK2kpaCs9YVtpXS5sZW5ndGg7Zm9yKHZhciBqPWMuZmluZEltYWdlKGgpLGs9MDtrPGQ7KytrKXt2YXIgbD1hW2tdLG09bC5sZW5ndGgsbj1qLmluZGV4O2UoZixuPj43LDEyNyZuLG0+PjcsMTI3Jm0pO2Zvcih2YXIgbz0wO288bTsrK28pe3ZhciBwPWxbb10rUztlKGoscD4+NywxMjcmcCwwLDApfX1yZXR1cm57Y2VsbEltYWdlSW5mbzpqLGRpbU9mZnNldDpnLGRpbUltYWdlSW5mbzpmfX12YXIgbj10aGlzLmdseXBoSW5mb3NbYS5pbmRleF07aWYobilyZXR1cm4gbjt2YXIgbz1hLmdldEJvdW5kaW5nQm94KCkscT1vLngxLHI9by55MSxzPW8ueDItcSx0PW8ueTItcix1PWEucGF0aC5jb21tYW5kcztpZigwPT09c3x8MD09PXR8fCF1Lmxlbmd0aClyZXR1cm4gdGhpcy5nbHlwaEluZm9zW2EuaW5kZXhdPXt9O3ZhciB2LHc9W10seD1bXSx5PVtdO2Zvcih2PWgtMTt2Pj0wOy0tdil5LnB1c2goW10pO2Zvcih2PWktMTt2Pj0wOy0tdil4LnB1c2goW10pO2Zvcih2YXIgeixBLEIsQyxEPTA7RDx1Lmxlbmd0aDsrK0Qpe3ZhciBFPXVbRF0sRj0oRS54LXEpL3MsRz0oRS55LXIpL3Q7aWYoIWwoeixBLEYsRykpe3N3aXRjaChFLnR5cGUpe2Nhc2VcIk1cIjpCPUYsQz1HO2JyZWFrO2Nhc2VcIkxcIjprKHosQSxGLEcpO2JyZWFrO2Nhc2VcIlFcIjp2YXIgSD0oRS54MS1xKS9zLEk9KEUueTEtcikvdDtiKFt6LEYsSF0sW0EsRyxJXSx7eDp6LHk6QSxjeDpILGN5Okl9KTticmVhaztjYXNlXCJaXCI6bCh6LEEsQixDKT93LnB1c2goe3g6eix5OkF9KTooayh6LEEsQixDKSx3LnB1c2goe3g6Qix5OkN9KSk7YnJlYWs7Y2FzZVwiQ1wiOmZvcih2YXIgSj0oRS54MS1xKS9zLEs9KEUueTEtcikvdCxMPShFLngyLXEpL3MsTT0oRS55Mi1yKS90LE49aih6LEEsSixLLEwsTSxGLEcpLE89MDtPPE4ubGVuZ3RoO08rKyl7dmFyIFA9TltPXS50b1F1YWRyYXRpYygpO2IoW1AueCxQLngxLFAuY3hdLFtQLnksUC55MSxQLmN5XSxQKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInVua25vd24gY29tbWFuZCB0eXBlOiBcIitFLnR5cGUpfXo9RixBPUd9fWZvcih2YXIgUT13Lmxlbmd0aCxSPXRoaXMuc3Ryb2tlSW1hZ2VJbmZvcy5maW5kSW1hZ2UoUSksUz1SLmluZGV4LFQ9MDtUPFE7KytUKXt2YXIgVT13W1RdO2UoUixkKFUueCksZChVLnkpLGQoVS5jeCksZChVLmN5KSl9cmV0dXJuIG49dGhpcy5nbHlwaEluZm9zW2EuaW5kZXhdPXtnbHlwaDphLHVHbHlwaFJlY3Q6W28ueDEsLW8ueTEsby54Miwtby55Ml0sc3Ryb2tlSW1hZ2VJbmZvOlIsc3Ryb2tlczp3LGNvbEluZm86bSh5LHRoaXMuY29sRGltSW1hZ2VJbmZvcyx0aGlzLmNvbENlbGxJbWFnZUluZm9zKSxyb3dJbmZvOm0oeCx0aGlzLnJvd0RpbUltYWdlSW5mb3MsdGhpcy5yb3dDZWxsSW1hZ2VJbmZvcyl9LG4udUdyaWRPZmZzZXQ9W24uY29sSW5mby5kaW1PZmZzZXQsbi5yb3dJbmZvLmRpbU9mZnNldF0sbn19O2YuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3JlbmRlclRleHQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZighKGQ+PWUpJiZ0aGlzLl9kb0ZpbGwpe2lmKCF0aGlzLl9pc09wZW5UeXBlKCkpcmV0dXJuIGNvbnNvbGUubG9nKFwiV0VCR0w6IG9ubHkgb3BlbnR5cGUgZm9udHMgYXJlIHN1cHBvcnRlZFwiKSxhO2EucHVzaCgpO3ZhciBwPXRoaXMuY3VyRmlsbFNoYWRlcixyPXRoaXMuX2RvU3Ryb2tlLHM9dGhpcy5kcmF3TW9kZTt0aGlzLmN1ckZpbGxTaGFkZXI9bnVsbCx0aGlzLl9kb1N0cm9rZT0hMSx0aGlzLmRyYXdNb2RlPWcuVEVYVFVSRTt2YXIgdD10aGlzLl90ZXh0Rm9udC5mb250LHU9dGhpcy5fdGV4dEZvbnQuX2ZvbnRJbmZvO3V8fCh1PXRoaXMuX3RleHRGb250Ll9mb250SW5mbz1uZXcgcSh0KSk7dmFyIHY9dGhpcy5fdGV4dEZvbnQuX2hhbmRsZUFsaWdubWVudCh0aGlzLGIsYyxkKSx3PXRoaXMuX3RleHRTaXplLHg9dy90LnVuaXRzUGVyRW07dGhpcy50cmFuc2xhdGUodi54LHYueSwwKSx0aGlzLnNjYWxlKHgseCwxKTt2YXIgeT10aGlzLkdMLHo9IXRoaXMuX2RlZmF1bHRGb250U2hhZGVyLEE9dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldEZvbnRTaGFkZXIoKSk7eiYmKEEuc2V0VW5pZm9ybShcInVHcmlkSW1hZ2VTaXplXCIsW2wsbV0pLEEuc2V0VW5pZm9ybShcInVDZWxsc0ltYWdlU2l6ZVwiLFtuLG9dKSxBLnNldFVuaWZvcm0oXCJ1U3Ryb2tlSW1hZ2VTaXplXCIsW2osa10pLEEuc2V0VW5pZm9ybShcInVHcmlkU2l6ZVwiLFtoLGldKSksdGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyRmlsbENvbG9yKTt2YXIgQj10aGlzLmdIYXNoLmdseXBoO2lmKCFCKXt2YXIgQz10aGlzLl90ZXh0R2VvbT1uZXcgZi5HZW9tZXRyeSgxLDEsZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD0xO2ErKylmb3IodmFyIGI9MDtiPD0xO2IrKyl0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGYuVmVjdG9yKGIsYSwwKSksdGhpcy51dnMucHVzaChiLGEpfSk7Qy5jb21wdXRlRmFjZXMoKS5jb21wdXRlTm9ybWFscygpLEI9dGhpcy5jcmVhdGVCdWZmZXJzKFwiZ2x5cGhcIixDKX10aGlzLl9iaW5kQnVmZmVyKEIudmVydGV4QnVmZmVyLHkuQVJSQVlfQlVGRkVSKSxBLmVuYWJsZUF0dHJpYihBLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMseS5GTE9BVCwhMSwwLDApLHRoaXMuX2JpbmRCdWZmZXIoQi5pbmRleEJ1ZmZlcix5LkVMRU1FTlRfQVJSQVlfQlVGRkVSKSx0aGlzLl9iaW5kQnVmZmVyKEIudXZCdWZmZXIseS5BUlJBWV9CVUZGRVIpLEEuZW5hYmxlQXR0cmliKEEuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMix5LkZMT0FULCExLDAsMCksQS5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLmN1ckZpbGxDb2xvcik7dHJ5e2Zvcih2YXIgRD0wLEU9bnVsbCxGPSExLEc9dC5zdHJpbmdUb0dseXBocyhiKSxIPTA7SDxHLmxlbmd0aDsrK0gpe3ZhciBJPUdbSF07RSYmKEQrPXQuZ2V0S2VybmluZ1ZhbHVlKEUsSSkpO3ZhciBKPXUuZ2V0R2x5cGhJbmZvKEkpO2lmKEoudUdseXBoUmVjdCl7dmFyIEs9Si5yb3dJbmZvLEw9Si5jb2xJbmZvO0Euc2V0VW5pZm9ybShcInVTYW1wbGVyU3Ryb2tlc1wiLEouc3Ryb2tlSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidVNhbXBsZXJSb3dTdHJva2VzXCIsSy5jZWxsSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidVNhbXBsZXJSb3dzXCIsSy5kaW1JbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlckNvbFN0cm9rZXNcIixMLmNlbGxJbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlckNvbHNcIixMLmRpbUltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVHcmlkT2Zmc2V0XCIsSi51R3JpZE9mZnNldCksQS5zZXRVbmlmb3JtKFwidUdseXBoUmVjdFwiLEoudUdseXBoUmVjdCksQS5zZXRVbmlmb3JtKFwidUdseXBoT2Zmc2V0XCIsRCksRj9BLmJpbmRUZXh0dXJlcygpOihGPSEwLEEuYmluZFNoYWRlcigpKSx5LmRyYXdFbGVtZW50cyh5LlRSSUFOR0xFUyw2LHRoaXMuR0wuVU5TSUdORURfU0hPUlQsMCl9RCs9SS5hZHZhbmNlV2lkdGgsRT1JfX1maW5hbGx5e0EudW5iaW5kU2hhZGVyKCksdGhpcy5jdXJGaWxsU2hhZGVyPXAsdGhpcy5fZG9TdHJva2U9cix0aGlzLmRyYXdNb2RlPXMsYS5wb3AoKX1yZXR1cm4gdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLGF9fX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5SZW5kZXJlckdMXCI6NzQsXCIuL3A1LlNoYWRlclwiOjc1fV19LHt9LFsxM10pKDEzKX0pOyIsIi8qKlxuICogIFN0YXJ0QXVkaW9Db250ZXh0LmpzXG4gKiAgQGF1dGhvciBZb3RhbSBNYW5uXG4gKiAgQGxpY2Vuc2UgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCBNSVQgTGljZW5zZVxuICogIEBjb3B5cmlnaHQgMjAxNiBZb3RhbSBNYW5uXG4gKi9cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpXG5cdCB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KClcblx0fSBlbHNlIHtcblx0XHRyb290LlN0YXJ0QXVkaW9Db250ZXh0ID0gZmFjdG9yeSgpXG4gIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuXG5cdC8vVEFQIExJU1RFTkVSLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cdC8qKlxuXHQgKiBAY2xhc3MgIExpc3RlbnMgZm9yIG5vbi1kcmFnZ2luZyB0YXAgZW5kcyBvbiB0aGUgZ2l2ZW4gZWxlbWVudFxuXHQgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcblx0ICogQGludGVybmFsXG5cdCAqL1xuXHR2YXIgVGFwTGlzdGVuZXIgPSBmdW5jdGlvbihlbGVtZW50LCBjb250ZXh0KXtcblxuXHRcdHRoaXMuX2RyYWdnZWQgPSBmYWxzZVxuXG5cdFx0dGhpcy5fZWxlbWVudCA9IGVsZW1lbnRcblxuXHRcdHRoaXMuX2JpbmRlZE1vdmUgPSB0aGlzLl9tb3ZlZC5iaW5kKHRoaXMpXG5cdFx0dGhpcy5fYmluZGVkRW5kID0gdGhpcy5fZW5kZWQuYmluZCh0aGlzLCBjb250ZXh0KVxuXG5cdFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLCB0aGlzLl9iaW5kZWRFbmQpXG5cdFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIHRoaXMuX2JpbmRlZE1vdmUpXG5cdFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgdGhpcy5fYmluZGVkRW5kKVxuXHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgdGhpcy5fYmluZGVkRW5kKVxuXHR9XG5cblx0LyoqXG5cdCAqIGRyYWcgbW92ZSBldmVudFxuXHQgKi9cblx0VGFwTGlzdGVuZXIucHJvdG90eXBlLl9tb3ZlZCA9IGZ1bmN0aW9uKGUpe1xuXHRcdHRoaXMuX2RyYWdnZWQgPSB0cnVlXG5cdH07XG5cblx0LyoqXG5cdCAqIHRhcCBlbmRlZCBsaXN0ZW5lclxuXHQgKi9cblx0VGFwTGlzdGVuZXIucHJvdG90eXBlLl9lbmRlZCA9IGZ1bmN0aW9uKGNvbnRleHQpe1xuXHRcdGlmICghdGhpcy5fZHJhZ2dlZCl7XG5cdFx0XHRzdGFydENvbnRleHQoY29udGV4dClcblx0XHR9XG5cdFx0dGhpcy5fZHJhZ2dlZCA9IGZhbHNlXG5cdH07XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgdGhlIGJvdW5kIGV2ZW50c1xuXHQgKi9cblx0VGFwTGlzdGVuZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbigpe1xuXHRcdHRoaXMuX2VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIiwgdGhpcy5fYmluZGVkRW5kKVxuXHRcdHRoaXMuX2VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLCB0aGlzLl9iaW5kZWRNb3ZlKVxuXHRcdHRoaXMuX2VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIHRoaXMuX2JpbmRlZEVuZClcblx0XHR0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMuX2JpbmRlZEVuZClcblx0XHR0aGlzLl9iaW5kZWRNb3ZlID0gbnVsbFxuXHRcdHRoaXMuX2JpbmRlZEVuZCA9IG51bGxcblx0XHR0aGlzLl9lbGVtZW50ID0gbnVsbFxuXHR9O1xuXG5cdC8vRU5EIFRBUCBMSVNURU5FUi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cdC8qKlxuXHQgKiBQbGF5cyBhIHNpbGVudCBzb3VuZCBhbmQgYWxzbyBpbnZva2UgdGhlIFwicmVzdW1lXCIgbWV0aG9kXG5cdCAqIEBwYXJhbSB7QXVkaW9Db250ZXh0fSBjb250ZXh0XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBzdGFydENvbnRleHQoY29udGV4dCl7XG5cdFx0Ly8gdGhpcyBhY2NvbXBsaXNoZXMgdGhlIGlPUyBzcGVjaWZpYyByZXF1aXJlbWVudFxuXHRcdHZhciBidWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCAxLCBjb250ZXh0LnNhbXBsZVJhdGUpXG5cdFx0dmFyIHNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKClcblx0XHRzb3VyY2UuYnVmZmVyID0gYnVmZmVyXG5cdFx0c291cmNlLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbilcblx0XHRzb3VyY2Uuc3RhcnQoMClcblxuXHRcdC8vIHJlc3VtZSB0aGUgYXVkaW8gY29udGV4dFxuXHRcdGlmIChjb250ZXh0LnJlc3VtZSl7XG5cdFx0XHRjb250ZXh0LnJlc3VtZSgpXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXVkaW8gY29udGV4dCBpcyBzdGFydGVkXG5cdCAqIEBwYXJhbSAge0F1ZGlvQ29udGV4dH0gIGNvbnRleHRcblx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGlzU3RhcnRlZChjb250ZXh0KXtcblx0XHQgcmV0dXJuIGNvbnRleHQuc3RhdGUgPT09IFwicnVubmluZ1wiXG5cdH1cblxuXHQvKipcblx0ICogSW52b2tlcyB0aGUgY2FsbGJhY2sgYXMgc29vbiBhcyB0aGUgQXVkaW9Db250ZXh0XG5cdCAqIGlzIHN0YXJ0ZWRcblx0ICogQHBhcmFtICB7QXVkaW9Db250ZXh0fSAgIGNvbnRleHRcblx0ICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqL1xuXHRmdW5jdGlvbiBvblN0YXJ0ZWQoY29udGV4dCwgY2FsbGJhY2spe1xuXG5cdFx0ZnVuY3Rpb24gY2hlY2tMb29wKCl7XG5cdFx0XHRpZiAoaXNTdGFydGVkKGNvbnRleHQpKXtcblx0XHRcdFx0Y2FsbGJhY2soKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNoZWNrTG9vcClcblx0XHRcdFx0aWYgKGNvbnRleHQucmVzdW1lKXtcblx0XHRcdFx0XHRjb250ZXh0LnJlc3VtZSgpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaXNTdGFydGVkKGNvbnRleHQpKXtcblx0XHRcdGNhbGxiYWNrKClcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2hlY2tMb29wKClcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgdGFwIGxpc3RlbmVyIHRvIHRoZSBhdWRpbyBjb250ZXh0XG5cdCAqIEBwYXJhbSAge0FycmF5fEVsZW1lbnR8U3RyaW5nfGpRdWVyeX0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge0FycmF5fSB0YXBMaXN0ZW5lcnNcblx0ICovXG5cdGZ1bmN0aW9uIGJpbmRUYXBMaXN0ZW5lcihlbGVtZW50LCB0YXBMaXN0ZW5lcnMsIGNvbnRleHQpe1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnQpIHx8IChOb2RlTGlzdCAmJiBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QpKXtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudC5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdGJpbmRUYXBMaXN0ZW5lcihlbGVtZW50W2ldLCB0YXBMaXN0ZW5lcnMsIGNvbnRleHQpXG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gXCJzdHJpbmdcIil7XG5cdFx0XHRiaW5kVGFwTGlzdGVuZXIoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlbGVtZW50KSwgdGFwTGlzdGVuZXJzLCBjb250ZXh0KVxuXHRcdH0gZWxzZSBpZiAoZWxlbWVudC5qcXVlcnkgJiYgdHlwZW9mIGVsZW1lbnQudG9BcnJheSA9PT0gXCJmdW5jdGlvblwiKXtcblx0XHRcdGJpbmRUYXBMaXN0ZW5lcihlbGVtZW50LnRvQXJyYXkoKSwgdGFwTGlzdGVuZXJzLCBjb250ZXh0KVxuXHRcdH0gZWxzZSBpZiAoRWxlbWVudCAmJiBlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCl7XG5cdFx0XHQvL2lmIGl0J3MgYW4gZWxlbWVudCwgY3JlYXRlIGEgVGFwTGlzdGVuZXJcblx0XHRcdHZhciB0YXAgPSBuZXcgVGFwTGlzdGVuZXIoZWxlbWVudCwgY29udGV4dClcblx0XHRcdHRhcExpc3RlbmVycy5wdXNoKHRhcClcblx0XHR9IFxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7QXVkaW9Db250ZXh0fSBjb250ZXh0IFRoZSBBdWRpb0NvbnRleHQgdG8gc3RhcnQuXG5cdCAqIEBwYXJhbSB7QXJyYXl8U3RyaW5nfEVsZW1lbnR8alF1ZXJ5PX0gZWxlbWVudHMgRm9yIGlPUywgdGhlIGxpc3Qgb2YgZWxlbWVudHNcblx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJpbmQgdGFwIGV2ZW50IGxpc3RlbmVyc1xuXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggd2lsbCBzdGFydCB0aGUgQXVkaW9Db250ZXh0LiBJZlxuXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gZWxlbWVudHMgYXJlIGdpdmVuLCBpdCB3aWxsIGJpbmRcblx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBkb2N1bWVudC5ib2R5LlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSBBdWRpb0NvbnRleHQgaXMgc3RhcnRlZC5cblx0ICogQHJldHVybiB7UHJvbWlzZX0gVGhlIHByb21pc2UgaXMgaW52b2tlZCB3aGVuIHRoZSBBdWRpb0NvbnRleHRcblx0ICogICAgICAgICAgICAgICAgICAgICAgIGlzIHN0YXJ0ZWQuXG5cdCAqL1xuXHRmdW5jdGlvbiBTdGFydEF1ZGlvQ29udGV4dChjb250ZXh0LCBlbGVtZW50cywgY2FsbGJhY2spe1xuXG5cdFx0Ly90aGUgcHJvbWlzZSBpcyBpbnZva2VkIHdoZW4gdGhlIEF1ZGlvQ29udGV4dCBpcyBzdGFydGVkXG5cdFx0dmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihzdWNjZXNzKSB7XG5cdFx0XHRvblN0YXJ0ZWQoY29udGV4dCwgc3VjY2Vzcylcblx0XHR9KVxuXG5cdFx0Ly8gVGhlIFRhcExpc3RlbmVycyBib3VuZCB0byB0aGUgZWxlbWVudHNcblx0XHR2YXIgdGFwTGlzdGVuZXJzID0gW11cblxuXHRcdC8vIGFkZCBhbGwgdGhlIHRhcCBsaXN0ZW5lcnNcblx0XHRpZiAoIWVsZW1lbnRzKXtcblx0XHRcdGVsZW1lbnRzID0gZG9jdW1lbnQuYm9keVxuXHRcdH1cblx0XHRiaW5kVGFwTGlzdGVuZXIoZWxlbWVudHMsIHRhcExpc3RlbmVycywgY29udGV4dClcblxuXHRcdC8vZGlzcG9zZSBhbGwgdGhlc2UgdGFwIGxpc3RlbmVycyB3aGVuIHRoZSBjb250ZXh0IGlzIHN0YXJ0ZWRcblx0XHRwcm9taXNlLnRoZW4oZnVuY3Rpb24oKXtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGFwTGlzdGVuZXJzLmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0dGFwTGlzdGVuZXJzW2ldLmRpc3Bvc2UoKVxuXHRcdFx0fVxuXHRcdFx0dGFwTGlzdGVuZXJzID0gbnVsbFxuXG5cdFx0XHRpZiAoY2FsbGJhY2spe1xuXHRcdFx0XHRjYWxsYmFjaygpXG5cdFx0XHR9XG5cdFx0fSlcblxuXHRcdHJldHVybiBwcm9taXNlXG5cdH1cblxuXHRyZXR1cm4gU3RhcnRBdWRpb0NvbnRleHRcbn0pKSIsImltcG9ydCBwNSBmcm9tICdwNS9saWIvcDUubWluJztcbmltcG9ydCBUb25lIGZyb20gJ3RvbmUnO1xuaW1wb3J0IFN0YXJ0QXVkaW9Db250ZXh0IGZyb20gJ3N0YXJ0YXVkaW9jb250ZXh0JztcblxuY29uc3Qgc2tldGNoID0gKHApID0+IHtcbiAgICBsZXQgbm9pc2VTY2FsZT0wLjAzO1xuICAgIGxldCBuPTAuMDA7XG4gICAgbGV0IGQ9MC42OyBcblxuICAgIGxldCBwaWFubztcblxuICAgIGxldCBtZWxvZHkgPSBbNDAgLTEyLCA0MyAtMTIsIDQ1IC0gMTIsIDQ3IC0xMiwgNDkgLTEyLCA1MiAtIDEyLCA0MCwgNDMsIDQ1LCA0NywgNDksIDUyLCA0MCArIDEyLCA0MyArIDEyLCA0NSArIDEyLCA0OSArIDEyLCA1MCArIDEyLCA1MiArIDEyLCA0MCArIDI0LCA0MyArIDI0LCA0NSArIDI0LCA0OSArIDI0LCA1MCArIDI0LCA1MiArIDI0LCA0MCArIDM2LCA0MyArIDM2LCA0NSArIDM2LCA0NyArIDM2LCA0OSArIDM2LCA1MiArIDM2LCA0MCArIDQ4LCA0MyArIDQ4LCA0NSArIDQ4LCA0NyArIDQ4LCA0OSArIDQ4LCA1MiArIDQ4LDQwICsgNjAsIDQzICsgNjAsIDQ1ICsgNjAsIDQ3ICsgNjAsIDQ5ICsgNDgsIDUyICsgNjBdXG5cbiAgICBwLnByZWxvYWQgPSAoKSA9PiB7XG4gICAgICAgIHBpYW5vID0gbmV3IFRvbmUuU2FtcGxlcih7XG4gICAgICAnQTAnIDogJ0EwLlttcDN8b2dnXScsXG4gICAgICAnQzEnIDogJ0MxLlttcDN8b2dnXScsXG4gICAgICAnRCMxJyA6ICdEczEuW21wM3xvZ2ddJyxcbiAgICAgICdGIzEnIDogJ0ZzMS5bbXAzfG9nZ10nLFxuICAgICAgJ0ExJyA6ICdBMS5bbXAzfG9nZ10nLFxuICAgICAgJ0MyJyA6ICdDMi5bbXAzfG9nZ10nLFxuICAgICAgJ0QjMicgOiAnRHMyLlttcDN8b2dnXScsXG4gICAgICAnRiMyJyA6ICdGczIuW21wM3xvZ2ddJyxcbiAgICAgICdBMicgOiAnQTIuW21wM3xvZ2ddJyxcbiAgICAgICdDMycgOiAnQzMuW21wM3xvZ2ddJyxcbiAgICAgICdEIzMnIDogJ0RzMy5bbXAzfG9nZ10nLFxuICAgICAgJ0YjMycgOiAnRnMzLlttcDN8b2dnXScsXG4gICAgICAnQTMnIDogJ0EzLlttcDN8b2dnXScsXG4gICAgICAnQzQnIDogJ0M0LlttcDN8b2dnXScsXG4gICAgICAnRCM0JyA6ICdEczQuW21wM3xvZ2ddJyxcbiAgICAgICdGIzQnIDogJ0ZzNC5bbXAzfG9nZ10nLFxuICAgICAgJ0E0JyA6ICdBNC5bbXAzfG9nZ10nLFxuICAgICAgJ0M1JyA6ICdDNS5bbXAzfG9nZ10nLFxuICAgICAgJ0QjNScgOiAnRHM1LlttcDN8b2dnXScsXG4gICAgICAnRiM1JyA6ICdGczUuW21wM3xvZ2ddJyxcbiAgICAgICdBNScgOiAnQTUuW21wM3xvZ2ddJyxcbiAgICAgICdDNicgOiAnQzYuW21wM3xvZ2ddJyxcbiAgICAgICdEIzYnIDogJ0RzNi5bbXAzfG9nZ10nLFxuICAgICAgJ0YjNicgOiAnRnM2LlttcDN8b2dnXScsXG4gICAgICAnQTYnIDogJ0E2LlttcDN8b2dnXScsXG4gICAgICAnQzcnIDogJ0M3LlttcDN8b2dnXScsXG4gICAgICAnRCM3JyA6ICdEczcuW21wM3xvZ2ddJyxcbiAgICAgICdGIzcnIDogJ0ZzNy5bbXAzfG9nZ10nLFxuICAgICAgJ0E3JyA6ICdBNy5bbXAzfG9nZ10nLFxuICAgICAgJ0M4JyA6ICdDOC5bbXAzfG9nZ10nXG4gICAgfSwge1xuICAgICAgJ3JlbGVhc2UnIDogMSxcbiAgICAgICdiYXNlVXJsJyA6ICcuL3NvdW5kcy8nXG4gICAgfSkudG9NYXN0ZXIoKTtcbiAgICB9XG4gICAgXG4gICAgbGV0IHZhbDEsIHZhbDIgPSAwO1xuICAgIGxldCBsb2FkZWQgPSBmYWxzZTtcbiAgICBsZXQgYWxwaGEgPSAwO1xuICAgIHAuc2V0dXAgPSAoKSA9PiB7XG4gICAgICAgIGxldCBjYW52YXMgPSBwLmNyZWF0ZUNhbnZhcyg4MDAsIDgwMCwgcC5XRUJHTCk7XG4gICAgICAgIFxuICAgIH1cbiAgICBsZXQgcHRpY2sgPSAwO1xuICAgIGxldCBwdGljazIgPSAwO1xuICAgIHAuZHJhdyA9ICgpID0+IHtcbiAgICAgICAgcC5jYW1lcmEoMCwwLCA4MDAsIDAsIDAsIDAsIDAsIDEsIDApO1xuICAgICAgICBwLmJhY2tncm91bmQoMCk7XG4gICAgICAgIC8vcC5zbW9vdGgoKTtcblxuICAgICAgICBwLnN0cm9rZSgyNTUsMTAwKTtcbiAgICAgICAgcC5saW5lKDAsLTMwMDAsMCwxMDAwKTtcblxuICAgICAgICBwLnRyYW5zbGF0ZSgtcC53aWR0aC8yLCBwLmhlaWdodC80LDApO1xuICAgICAgICBwLnJvdGF0ZVgocC5QSSk7XG4gICAgICAgIFxuICAgICAgICBuPW4rZDtcbiAgICAgICAgZm9yIChsZXQgeT0wOyB5PDIwOyB5KyspIHtcbiAgICAgICAgICAgIGZvcihsZXQgeD0wOyB4PDIwMDsgeCsrKSB7IFxuICAgICAgICAgICAgICAgIGxldCBub2lzZVZhbCA9IHAubm9pc2UoKG4reCkqbm9pc2VTY2FsZSwoLW4reSkqbm9pc2VTY2FsZSx5Km5vaXNlU2NhbGUpOyBcbiAgICAgICAgICAgICAgICBwLm5vU3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgcC5maWxsKChub2lzZVZhbCoyNTApKTsgXG4gICAgICAgICAgICAgICAgaWYoeD09MTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHAuZmlsbCgyNTUsMCwwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoeT09MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsMSA9IG5vaXNlVmFsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmKHk9PTE5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWwyID0gbm9pc2VWYWw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcC5wdXNoKCk7XG4gICAgICAgICAgICAgICAgcC50cmFuc2xhdGUoeCo0LG5vaXNlVmFsKjQwMCk7XG4gICAgICAgICAgICAgICAgcC5zcGhlcmUoMSk7XG4gICAgICAgICAgICAgICAgcC5wb3AoKTtcbiAgICAgICAgICAgIH0gXG4gICAgICAgIH1cbiAgICAgICAgYWxwaGEtPTEwMDtcblxuICAgICAgICBwLnB1c2goKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBwLnRyYW5zbGF0ZSgxMDAqNCx2YWwxKjQwMCk7XG4gICAgICAgICAgICAgICAgcC5maWxsKDI1NSwwLDAsYWxwaGEpO1xuICAgICAgICAgICAgICAgIHAuc3BoZXJlKDUpO1xuICAgICAgICAgICAgICAgIHAucG9wKCk7XG5cbiAgICAgICAgcC5wdXNoKCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcC50cmFuc2xhdGUoMTAwKjQsdmFsMio0MDApO1xuICAgICAgICAgICAgICAgIHAuc3BoZXJlKDUpO1xuICAgICAgICAgICAgICAgIHAucG9wKCk7XG5cbiAgICAgICAgaWYobG9hZGVkKSB7XG4gICAgICAgICAgICBsZXQgdGljayA9IHAuZmxvb3IocC5taWxsaXMoKS8zMDApO1xuICAgICAgICAgICAgaWYocHRpY2shPXRpY2spIHtcbiAgICAgICAgICAgICAgICBsZXQgcm5kID0gcC5yYW5kb20oMik7XG4gICAgICAgICAgICAgICAgaWYocm5kID4gMC41KSB7XG4gICAgICAgICAgICAgICAgICAgIGFscGhhID0gMjU1O1xuICAgICAgICAgICAgICAgICAgICBwaWFuby50cmlnZ2VyQXR0YWNrUmVsZWFzZShUb25lLk1pZGkobWVsb2R5W3AuY2VpbCh2YWwxKjQyKV0gKyA2KS50b0ZyZXF1ZW5jeSgpLFwiMTMyblwiKTtcbiAgICAgICAgICAgICAgICAgICAgcGlhbm8udHJpZ2dlckF0dGFja1JlbGVhc2UoVG9uZS5NaWRpKG1lbG9keVtwLmNlaWwodmFsMio0MildICsgNikudG9GcmVxdWVuY3koKSxcIjEzMm5cIik7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHB0aWNrID0gdGljaztcblxuICAgICAgICAgICAgbGV0IHRpY2syID0gcC5mbG9vcihwLm1pbGxpcygpLzQwMCk7XG4gICAgICAgICAgICBpZihwdGljazIhPXRpY2syKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJuZCA9IHAucmFuZG9tKDIpO1xuICAgICAgICAgICAgICAgIGlmKHJuZCA+IDAuNikge1xuICAgICAgICAgICAgICAgICAgICBhbHBoYSA9IDI1NTtcbiAgICAgICAgICAgICAgICAgICAgcGlhbm8udHJpZ2dlckF0dGFja1JlbGVhc2UoVG9uZS5NaWRpKG1lbG9keVtwLmNlaWwodmFsMio0MildICsgNikudG9GcmVxdWVuY3koKSxcIjY0blwiKTtcbiAgICAgICAgICAgICAgICAgICAgLy9waWFuby50cmlnZ2VyQXR0YWNrUmVsZWFzZShUb25lLk1pZGkocC5mbG9vcih2YWwyKjEwMCkgKyAzMCkudG9GcmVxdWVuY3koKSxcIjEyOG5cIik7ICBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwdGljazIgPSB0aWNrMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcC5rZXlQcmVzc2VkID0gKCkgPT4ge1xuICAgICAgICBpZihwLmtleSA9PSAnbScpIHtcbiAgICAgICAgICAgIHAuc2F2ZShEYXRlLm5vdygpICsgXCIuanBnXCIpO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcC5tb3VzZVByZXNzZWQgPSAoKSA9PiB7XG4gICAgICAgIFN0YXJ0QXVkaW9Db250ZXh0KFRvbmUuY29udGV4dCkudGhlbihmdW5jdGlvbigpe30pO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IHNrZXRjaDtcbm5ldyBwNShza2V0Y2gpOyIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLCBldmFsKShcInRoaXNcIik7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/Day-24-Noise-Pianist/package-lock.json b/Day-24-Noise-Pianist/package-lock.json index f09a1a4..d2a2255 100644 --- a/Day-24-Noise-Pianist/package-lock.json +++ b/Day-24-Noise-Pianist/package-lock.json @@ -29,8 +29,8 @@ "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", "requires": { - "@protobufjs/aspromise": "1.1.2", - "@protobufjs/inquire": "1.1.0" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, "@protobufjs/float": { @@ -73,8 +73,8 @@ "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-0.6.6.tgz", "integrity": "sha512-zDpDY6hyoXw6yEHd8CZrs7VL1Kl/kFhW5JcJWC7h2xqsMxk09v7OSNa4YQfJWJQeCXVStjK9VOqLSkwTETwPrw==", "requires": { - "@types/long": "3.0.32", - "protobufjs": "6.8.8" + "@types/long": "~3.0.32", + "protobufjs": "~6.8.6" } }, "@tensorflow/tfjs-core": { @@ -192,7 +192,7 @@ "integrity": "sha512-HRcWcY+YWt4+s/CvQn+vnSPfRaD4KkuzQFt5MNaELXXHSjelHlSEA8ZcqT69q0GTIuLWZ6JaoKar4yWHVpZHsQ==", "dev": true, "requires": { - "@xtuc/ieee754": "1.2.0" + "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { @@ -308,7 +308,7 @@ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "2.1.21", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -324,7 +324,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "5.7.3" + "acorn": "^5.0.0" } }, "ajv": { @@ -333,10 +333,10 @@ "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", "dev": true, "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-errors": { @@ -375,7 +375,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.3" + "color-convert": "^1.9.0" } }, "anymatch": { @@ -384,8 +384,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "aproba": { @@ -424,7 +424,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -445,9 +445,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -512,13 +512,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -527,7 +527,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -536,7 +536,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -545,7 +545,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -554,9 +554,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -604,15 +604,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", + "depd": "~1.1.2", + "http-errors": "~1.6.3", "iconv-lite": "0.4.23", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.2", "raw-body": "2.3.3", - "type-is": "1.6.16" + "type-is": "~1.6.16" } }, "bonjour": { @@ -621,12 +621,12 @@ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "array-flatten": "2.1.1", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, "brace-expansion": { @@ -635,7 +635,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -645,16 +645,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -663,7 +663,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -680,12 +680,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -694,9 +694,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -705,10 +705,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -717,8 +717,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -727,13 +727,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.1", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -742,7 +742,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "buffer": { @@ -751,9 +751,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-from": { @@ -792,19 +792,19 @@ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { - "bluebird": "3.5.2", - "chownr": "1.1.1", - "glob": "7.1.3", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.3", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.3.0", - "unique-filename": "1.1.1", - "y18n": "4.0.0" + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" } }, "cache-base": { @@ -813,15 +813,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "camelcase": { @@ -836,9 +836,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chokidar": { @@ -847,19 +847,19 @@ "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.4", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "lodash.debounce": "4.0.8", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.1.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, "chownr": { @@ -874,7 +874,7 @@ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", "dev": true, "requires": { - "tslib": "1.9.3" + "tslib": "^1.9.0" } }, "cipher-base": { @@ -883,8 +883,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "class-utils": { @@ -893,10 +893,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -905,7 +905,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -916,9 +916,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "code-point-at": { @@ -933,8 +933,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { @@ -976,7 +976,7 @@ "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", "dev": true, "requires": { - "mime-db": "1.37.0" + "mime-db": ">= 1.36.0 < 2" } }, "compression": { @@ -985,13 +985,13 @@ "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "2.0.15", + "compressible": "~2.0.14", "debug": "2.6.9", - "on-headers": "1.0.1", + "on-headers": "~1.0.1", "safe-buffer": "5.1.2", - "vary": "1.1.2" + "vary": "~1.1.2" } }, "concat-map": { @@ -1006,10 +1006,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "connect-history-api-fallback": { @@ -1024,7 +1024,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -1063,12 +1063,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -1089,8 +1089,8 @@ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -1099,11 +1099,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -1112,12 +1112,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -1126,11 +1126,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { @@ -1139,17 +1139,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.17", - "public-encrypt": "4.0.3", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "cyclist": { @@ -1200,8 +1200,8 @@ "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", "dev": true, "requires": { - "execa": "0.10.0", - "ip-regex": "2.1.0" + "execa": "^0.10.0", + "ip-regex": "^2.1.0" } }, "define-property": { @@ -1210,8 +1210,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -1220,7 +1220,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1229,7 +1229,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1238,9 +1238,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1251,12 +1251,12 @@ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" } }, "depd": { @@ -1271,8 +1271,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "destroy": { @@ -1293,9 +1293,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "dns-equal": { @@ -1310,8 +1310,8 @@ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "dev": true, "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.2" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, "dns-txt": { @@ -1320,7 +1320,7 @@ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { - "buffer-indexof": "1.1.1" + "buffer-indexof": "^1.0.0" } }, "domain-browser": { @@ -1335,10 +1335,10 @@ "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "ee-first": { @@ -1353,13 +1353,13 @@ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.5", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -1380,7 +1380,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "enhanced-resolve": { @@ -1389,9 +1389,9 @@ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.1.0" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "errno": { @@ -1400,7 +1400,7 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "escape-html": { @@ -1421,8 +1421,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "esrecurse": { @@ -1431,7 +1431,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -1464,7 +1464,7 @@ "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "original": "1.0.2" + "original": "^1.0.0" } }, "evp_bytestokey": { @@ -1473,8 +1473,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -1483,13 +1483,13 @@ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "6.0.5", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "expand-brackets": { @@ -1498,13 +1498,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1513,7 +1513,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -1522,7 +1522,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1533,36 +1533,36 @@ "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.3", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", + "proxy-addr": "~2.0.4", "qs": "6.5.2", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.2", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "array-flatten": { @@ -1579,8 +1579,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -1589,7 +1589,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -1600,14 +1600,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1616,7 +1616,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -1625,7 +1625,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -1634,7 +1634,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1643,7 +1643,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1652,9 +1652,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1677,7 +1677,7 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "fill-range": { @@ -1686,10 +1686,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -1698,7 +1698,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1710,12 +1710,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" } }, "find-cache-dir": { @@ -1724,9 +1724,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { @@ -1735,7 +1735,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "flush-write-stream": { @@ -1744,8 +1744,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "follow-redirects": { @@ -1754,7 +1754,7 @@ "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==", "dev": true, "requires": { - "debug": "3.1.0" + "debug": "=3.1.0" }, "dependencies": { "debug": { @@ -1786,7 +1786,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -1801,8 +1801,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-write-stream-atomic": { @@ -1811,10 +1811,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -1830,8 +1830,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.11.1", - "node-pre-gyp": "0.10.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -1857,8 +1857,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -1871,7 +1871,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1935,7 +1935,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -1950,14 +1950,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -1966,12 +1966,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -1986,7 +1986,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { @@ -1995,7 +1995,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -2004,8 +2004,8 @@ "dev": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2024,7 +2024,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -2038,7 +2038,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -2051,8 +2051,8 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, "minizlib": { @@ -2061,7 +2061,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -2084,9 +2084,9 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -2095,16 +2095,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -2113,8 +2113,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -2129,8 +2129,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -2139,10 +2139,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -2161,7 +2161,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -2182,8 +2182,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -2204,10 +2204,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -2224,13 +2224,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -2239,7 +2239,7 @@ "dev": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -2282,9 +2282,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -2293,7 +2293,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -2301,7 +2301,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -2316,13 +2316,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -2337,7 +2337,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -2376,12 +2376,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { @@ -2390,8 +2390,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -2400,7 +2400,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -2417,11 +2417,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.3", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "pify": { @@ -2461,9 +2461,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -2472,8 +2472,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -2482,7 +2482,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2493,8 +2493,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { @@ -2503,8 +2503,8 @@ "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "hmac-drbg": { @@ -2513,9 +2513,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.5", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hpack.js": { @@ -2524,10 +2524,10 @@ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { - "inherits": "2.0.3", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "wbuf": "1.7.3" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, "html-entities": { @@ -2548,10 +2548,10 @@ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.4.0" + "statuses": ">= 1.4.0 < 2" } }, "http-parser-js": { @@ -2566,9 +2566,9 @@ "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "dev": true, "requires": { - "eventemitter3": "3.1.0", - "follow-redirects": "1.5.9", - "requires-port": "1.0.0" + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, "http-proxy-middleware": { @@ -2577,10 +2577,10 @@ "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", "dev": true, "requires": { - "http-proxy": "1.17.0", - "is-glob": "4.0.0", - "lodash": "4.17.11", - "micromatch": "3.1.10" + "http-proxy": "^1.16.2", + "is-glob": "^4.0.0", + "lodash": "^4.17.5", + "micromatch": "^3.1.9" } }, "https-browserify": { @@ -2595,7 +2595,7 @@ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { @@ -2616,8 +2616,8 @@ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "3.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" }, "dependencies": { "find-up": { @@ -2626,7 +2626,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -2635,8 +2635,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -2645,7 +2645,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -2654,7 +2654,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.0.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -2669,7 +2669,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "3.0.0" + "find-up": "^3.0.0" } } } @@ -2692,8 +2692,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2708,8 +2708,8 @@ "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", "dev": true, "requires": { - "default-gateway": "2.7.2", - "ipaddr.js": "1.8.0" + "default-gateway": "^2.6.0", + "ipaddr.js": "^1.5.2" } }, "interpret": { @@ -2748,7 +2748,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2757,7 +2757,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2768,7 +2768,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.12.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -2783,7 +2783,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2792,7 +2792,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2803,9 +2803,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -2840,7 +2840,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -2849,7 +2849,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2858,7 +2858,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2875,7 +2875,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -2884,7 +2884,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-object": { @@ -2893,7 +2893,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-stream": { @@ -2974,7 +2974,7 @@ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "2.0.0" + "invert-kv": "^2.0.0" } }, "loader-runner": { @@ -2989,9 +2989,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -3000,8 +3000,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -3032,8 +3032,8 @@ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "make-dir": { @@ -3042,7 +3042,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "map-age-cleaner": { @@ -3051,7 +3051,7 @@ "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", "dev": true, "requires": { - "p-defer": "1.0.0" + "p-defer": "^1.0.0" } }, "map-cache": { @@ -3066,7 +3066,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "md5.js": { @@ -3075,9 +3075,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "media-typer": { @@ -3092,9 +3092,9 @@ "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "dev": true, "requires": { - "map-age-cleaner": "0.1.2", - "mimic-fn": "1.2.0", - "p-is-promise": "1.1.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" } }, "memory-fs": { @@ -3103,8 +3103,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "merge-descriptors": { @@ -3125,19 +3125,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "miller-rabin": { @@ -3146,8 +3146,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { @@ -3168,7 +3168,7 @@ "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "dev": true, "requires": { - "mime-db": "1.37.0" + "mime-db": "~1.37.0" } }, "mimic-fn": { @@ -3195,7 +3195,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3210,16 +3210,16 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.1", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.3" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -3228,8 +3228,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -3238,7 +3238,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -3258,12 +3258,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -3278,8 +3278,8 @@ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "dns-packet": "1.3.1", - "thunky": "1.0.3" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, "multicast-dns-service-types": { @@ -3301,17 +3301,17 @@ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "negotiator": { @@ -3344,28 +3344,28 @@ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.4", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" }, "dependencies": { @@ -3383,7 +3383,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "npm-run-path": { @@ -3392,7 +3392,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { @@ -3413,9 +3413,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -3424,7 +3424,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -3433,7 +3433,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3444,7 +3444,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.pick": { @@ -3453,7 +3453,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "obuf": { @@ -3483,7 +3483,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "opn": { @@ -3492,7 +3492,7 @@ "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", "dev": true, "requires": { - "is-wsl": "1.1.0" + "is-wsl": "^1.1.0" } }, "original": { @@ -3501,7 +3501,7 @@ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "requires": { - "url-parse": "1.4.3" + "url-parse": "^1.4.3" } }, "os-browserify": { @@ -3516,9 +3516,9 @@ "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", "dev": true, "requires": { - "execa": "0.10.0", - "lcid": "2.0.0", - "mem": "4.0.0" + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "p-defer": { @@ -3545,7 +3545,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -3554,7 +3554,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.3.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -3586,9 +3586,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "parse-asn1": { @@ -3597,11 +3597,11 @@ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.17" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parseurl": { @@ -3664,11 +3664,11 @@ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "pify": { @@ -3689,7 +3689,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -3698,7 +3698,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "portfinder": { @@ -3707,9 +3707,9 @@ "integrity": "sha512-23aeQKW9KgHe6citUrG3r9HjeX6vls0h713TAa+CwTKZwNIr/pD2ApaxYF4Um3ZZyq4ar+Siv3+fhoHaIwSOSw==", "dev": true, "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" } }, "posix-character-classes": { @@ -3741,19 +3741,19 @@ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", "requires": { - "@protobufjs/aspromise": "1.1.2", - "@protobufjs/base64": "1.1.2", - "@protobufjs/codegen": "2.0.4", - "@protobufjs/eventemitter": "1.1.0", - "@protobufjs/fetch": "1.1.0", - "@protobufjs/float": "1.0.2", - "@protobufjs/inquire": "1.1.0", - "@protobufjs/path": "1.1.2", - "@protobufjs/pool": "1.1.0", - "@protobufjs/utf8": "1.1.0", - "@types/long": "4.0.0", - "@types/node": "10.12.6", - "long": "4.0.0" + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" }, "dependencies": { "@types/long": { @@ -3769,7 +3769,7 @@ "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "dev": true, "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.8.0" } }, @@ -3791,12 +3791,12 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pump": { @@ -3805,8 +3805,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -3815,9 +3815,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "3.6.1", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, "punycode": { @@ -3856,7 +3856,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -3865,8 +3865,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -3893,13 +3893,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -3908,9 +3908,9 @@ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "micromatch": "3.1.10", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "regex-not": { @@ -3919,8 +3919,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "remove-trailing-separator": { @@ -3965,7 +3965,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "resolve-from": { @@ -3992,7 +3992,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.3" + "glob": "^7.0.5" } }, "ripemd160": { @@ -4001,8 +4001,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-queue": { @@ -4011,7 +4011,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "safe-buffer": { @@ -4026,7 +4026,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "safer-buffer": { @@ -4041,8 +4041,8 @@ "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "dev": true, "requires": { - "ajv": "6.5.4", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, "seedrandom": { @@ -4078,18 +4078,18 @@ "dev": true, "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" } }, "serialize-javascript": { @@ -4104,13 +4104,13 @@ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.21", - "parseurl": "1.3.2" + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" } }, "serve-static": { @@ -4119,9 +4119,9 @@ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.2" } }, @@ -4137,10 +4137,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -4149,7 +4149,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -4172,8 +4172,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shebang-command": { @@ -4182,7 +4182,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -4203,14 +4203,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -4219,7 +4219,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -4228,7 +4228,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -4239,9 +4239,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -4250,7 +4250,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -4259,7 +4259,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -4268,7 +4268,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -4277,9 +4277,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -4290,7 +4290,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -4299,7 +4299,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4310,8 +4310,8 @@ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", "dev": true, "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.3.2" + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" } }, "sockjs-client": { @@ -4320,12 +4320,12 @@ "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "dev": true, "requires": { - "debug": "3.2.6", - "eventsource": "1.0.7", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.4.3" + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" }, "dependencies": { "debug": { @@ -4334,7 +4334,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "faye-websocket": { @@ -4343,7 +4343,7 @@ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "ms": { @@ -4372,11 +4372,11 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { @@ -4391,12 +4391,12 @@ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", "dev": true, "requires": { - "debug": "2.6.9", - "handle-thing": "1.2.5", - "http-deceiver": "1.2.7", - "safe-buffer": "5.1.2", - "select-hose": "2.0.0", - "spdy-transport": "2.1.0" + "debug": "^2.6.8", + "handle-thing": "^1.2.5", + "http-deceiver": "^1.2.7", + "safe-buffer": "^5.0.1", + "select-hose": "^2.0.0", + "spdy-transport": "^2.0.18" } }, "spdy-transport": { @@ -4405,13 +4405,13 @@ "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", "dev": true, "requires": { - "debug": "2.6.9", - "detect-node": "2.0.4", - "hpack.js": "2.1.6", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2", - "wbuf": "1.7.3" + "debug": "^2.6.8", + "detect-node": "^2.0.3", + "hpack.js": "^2.1.6", + "obuf": "^1.1.1", + "readable-stream": "^2.2.9", + "safe-buffer": "^5.0.1", + "wbuf": "^1.7.2" } }, "split-string": { @@ -4420,7 +4420,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "ssri": { @@ -4429,17 +4429,22 @@ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.1" } }, + "startaudiocontext": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/startaudiocontext/-/startaudiocontext-1.2.1.tgz", + "integrity": "sha1-RtLKtUYseRGArMciPju7wycshZU=" + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -4448,7 +4453,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -4465,8 +4470,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-each": { @@ -4475,8 +4480,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { @@ -4485,11 +4490,11 @@ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -4504,8 +4509,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string_decoder": { @@ -4514,7 +4519,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -4523,7 +4528,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "strip-eof": { @@ -4538,7 +4543,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "tapable": { @@ -4552,8 +4557,8 @@ "resolved": "https://registry.npmjs.org/tensorjs/-/tensorjs-0.2.0.tgz", "integrity": "sha1-zjSJN6Cj+j6M6IW7S0ErUFT5abs=", "requires": { - "google-protobuf": "3.6.1", - "lodash": "4.17.11" + "google-protobuf": "^3.2.0-rc.2", + "lodash": "^4.17.4" } }, "tfjs": { @@ -4561,7 +4566,7 @@ "resolved": "https://registry.npmjs.org/tfjs/-/tfjs-0.6.0.tgz", "integrity": "sha1-Nw7l0hEvVz5ju7cM01C5BnfhGcw=", "requires": { - "tensorjs": "0.2.0" + "tensorjs": "^0.2.0" } }, "through2": { @@ -4570,8 +4575,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "thunky": { @@ -4586,7 +4591,7 @@ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "to-arraybuffer": { @@ -4601,7 +4606,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4610,7 +4615,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4621,10 +4626,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -4633,8 +4638,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "tone": { @@ -4661,7 +4666,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.21" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -4676,8 +4681,8 @@ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "dev": true, "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" + "commander": "~2.13.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -4694,14 +4699,14 @@ "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", "dev": true, "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.7", - "serialize-javascript": "1.5.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.3.0", - "worker-farm": "1.6.0" + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { "source-map": { @@ -4718,10 +4723,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -4730,7 +4735,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -4739,10 +4744,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -4753,7 +4758,7 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "2.0.1" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -4762,7 +4767,7 @@ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "unpipe": { @@ -4777,8 +4782,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -4787,9 +4792,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -4823,7 +4828,7 @@ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "urix": { @@ -4856,8 +4861,8 @@ "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==", "dev": true, "requires": { - "querystringify": "2.1.0", - "requires-port": "1.0.0" + "querystringify": "^2.0.0", + "requires-port": "^1.0.0" } }, "use": { @@ -4920,9 +4925,9 @@ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "dev": true, "requires": { - "chokidar": "2.0.4", - "graceful-fs": "4.1.11", - "neo-async": "2.6.0" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" } }, "wbuf": { @@ -4931,7 +4936,7 @@ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { - "minimalistic-assert": "1.0.1" + "minimalistic-assert": "^1.0.0" } }, "webpack": { @@ -4944,26 +4949,26 @@ "@webassemblyjs/helper-module-context": "1.7.10", "@webassemblyjs/wasm-edit": "1.7.10", "@webassemblyjs/wasm-parser": "1.7.10", - "acorn": "5.7.3", - "acorn-dynamic-import": "3.0.0", - "ajv": "6.5.4", - "ajv-keywords": "3.2.0", - "chrome-trace-event": "1.0.0", - "enhanced-resolve": "4.1.0", - "eslint-scope": "4.0.0", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.3.1", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "neo-async": "2.6.0", - "node-libs-browser": "2.1.0", - "schema-utils": "0.4.7", - "tapable": "1.1.0", - "uglifyjs-webpack-plugin": "1.3.0", - "watchpack": "1.6.0", - "webpack-sources": "1.3.0" + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.1.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" } }, "webpack-cli": { @@ -4972,16 +4977,16 @@ "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", "dev": true, "requires": { - "chalk": "2.4.1", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "global-modules-path": "2.3.0", - "import-local": "2.0.0", - "interpret": "1.1.0", - "loader-utils": "1.1.0", - "supports-color": "5.5.0", - "v8-compile-cache": "2.0.2", - "yargs": "12.0.2" + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.0", + "global-modules-path": "^2.3.0", + "import-local": "^2.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.2" } }, "webpack-dev-middleware": { @@ -4990,10 +4995,10 @@ "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", "dev": true, "requires": { - "memory-fs": "0.4.1", - "mime": "2.3.1", - "range-parser": "1.2.0", - "webpack-log": "2.0.0" + "memory-fs": "~0.4.1", + "mime": "^2.3.1", + "range-parser": "^1.0.3", + "webpack-log": "^2.0.0" }, "dependencies": { "mime": { @@ -5011,32 +5016,32 @@ "dev": true, "requires": { "ansi-html": "0.0.7", - "bonjour": "3.5.0", - "chokidar": "2.0.4", - "compression": "1.7.3", - "connect-history-api-fallback": "1.5.0", - "debug": "3.2.6", - "del": "3.0.0", - "express": "4.16.4", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.18.0", - "import-local": "2.0.0", - "internal-ip": "3.0.1", - "ip": "1.1.5", - "killable": "1.0.1", - "loglevel": "1.6.1", - "opn": "5.4.0", - "portfinder": "1.0.19", - "schema-utils": "1.0.0", - "selfsigned": "1.10.4", - "serve-index": "1.9.1", + "bonjour": "^3.5.0", + "chokidar": "^2.0.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "~0.18.0", + "import-local": "^2.0.0", + "internal-ip": "^3.0.1", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "schema-utils": "^1.0.0", + "selfsigned": "^1.9.1", + "serve-index": "^1.7.2", "sockjs": "0.3.19", "sockjs-client": "1.3.0", - "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "5.5.0", + "spdy": "^3.4.1", + "strip-ansi": "^3.0.0", + "supports-color": "^5.1.0", "webpack-dev-middleware": "3.4.0", - "webpack-log": "2.0.0", + "webpack-log": "^2.0.0", "yargs": "12.0.2" }, "dependencies": { @@ -5052,7 +5057,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "ms": { @@ -5067,9 +5072,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.5.4", - "ajv-errors": "1.0.0", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, "strip-ansi": { @@ -5078,7 +5083,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -5089,8 +5094,8 @@ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "ansi-colors": "3.2.1", - "uuid": "3.3.2" + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" } }, "webpack-sources": { @@ -5099,8 +5104,8 @@ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { - "source-list-map": "2.0.1", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -5117,8 +5122,8 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": "0.5.0", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -5133,7 +5138,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -5148,7 +5153,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -5157,8 +5162,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -5173,7 +5178,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -5182,9 +5187,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -5193,7 +5198,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -5234,18 +5239,18 @@ "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "2.0.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "10.1.0" + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" }, "dependencies": { "find-up": { @@ -5254,7 +5259,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -5263,8 +5268,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -5273,7 +5278,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -5282,7 +5287,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.0.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -5299,7 +5304,7 @@ "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } diff --git a/Day-24-Noise-Pianist/package.json b/Day-24-Noise-Pianist/package.json index 693e879..f0c01cf 100644 --- a/Day-24-Noise-Pianist/package.json +++ b/Day-24-Noise-Pianist/package.json @@ -19,6 +19,7 @@ "dependencies": { "@tensorflow/tfjs": "^0.13.4", "p5": "^0.7.2", + "startaudiocontext": "^1.2.1", "tfjs": "^0.6.0", "tone": "^0.12.80" } diff --git a/Day-24-Noise-Pianist/src/index.js b/Day-24-Noise-Pianist/src/index.js index fb21c50..d705fa3 100644 --- a/Day-24-Noise-Pianist/src/index.js +++ b/Day-24-Noise-Pianist/src/index.js @@ -1,5 +1,6 @@ import p5 from 'p5/lib/p5.min'; import Tone from 'tone'; +import StartAudioContext from 'startaudiocontext'; const sketch = (p) => { let noiseScale=0.03; @@ -139,6 +140,10 @@ const sketch = (p) => { loaded = true; } + + p.mousePressed = () => { + StartAudioContext(Tone.context).then(function(){}); + } } export default sketch; new p5(sketch); \ No newline at end of file diff --git a/Day-25-Entropy/dist/main.js b/Day-25-Entropy/dist/main.js index 230f53a..e8cbffc 100644 --- a/Day-25-Entropy/dist/main.js +++ b/Day-25-Entropy/dist/main.js @@ -1,8 +1,14 @@ -!function(t){var e={};function i(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=t,i.c=e,i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)i.d(r,n,function(e){return t[e]}.bind(null,n));return r},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=2)}([function(t,e,i){var r;void 0===(r=function(){return function(){"use strict";var t;function e(e){e(t)} +!function(t){var e={};function i(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=t,i.c=e,i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)i.d(r,n,function(e){return t[e]}.bind(null,n));return r},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=3)}([function(t,e,i){var r;void 0===(r=function(){return function(){"use strict";var t;function e(e){e(t)} /** * Tone.js * @author Yotam Mann * @license http://opensource.org/licenses/MIT MIT License * @copyright 2014-2018 Yotam Mann - */return function(e){t=e()}(function(){var t=function(){if(!(this instanceof t))throw new Error("constructor needs to be called with the 'new' keyword")};t.prototype.toString=function(){for(var e in t){var i=e[0].match(/^[A-Z]$/),r=t[e]===this.constructor;if(t.isFunction(t[e])&&i&&r)return e}return"Tone"},t.prototype.dispose=function(){return this},t.prototype.set=function(e,i,r){if(t.isObject(e))r=i;else if(t.isString(e)){var n={};n[e]=i,e=n}t:for(var o in e){i=e[o];var s=this;if(-1!==o.indexOf(".")){for(var a=o.split("."),h=0;hthis.memory){var r=this.length-this.memory;this._timeline.splice(0,r)}return this},t.Timeline.prototype.remove=function(t){var e=this._timeline.indexOf(t);return-1!==e&&this._timeline.splice(e,1),this},t.Timeline.prototype.get=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return-1!==r?this._timeline[r]:null},t.Timeline.prototype.peek=function(){return this._timeline[0]},t.Timeline.prototype.shift=function(){return this._timeline.shift()},t.Timeline.prototype.getAfter=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return r+10&&this._timeline[r-1][i]=0?this._timeline[n-1]:null},t.Timeline.prototype.cancel=function(t){if(this._timeline.length>1){var e=this._search(t);if(e>=0)if(this._timeline[e].time===t){for(var i=e;i>=0&&this._timeline[i].time===t;i--)e=i;this._timeline=this._timeline.slice(0,e)}else this._timeline=this._timeline.slice(0,e+1);else this._timeline=[]}else 1===this._timeline.length&&this._timeline[0].time>=t&&(this._timeline=[]);return this},t.Timeline.prototype.cancelBefore=function(t){var e=this._search(t);return e>=0&&(this._timeline=this._timeline.slice(e+1)),this},t.Timeline.prototype.previousEvent=function(t){var e=this._timeline.indexOf(t);return e>0?this._timeline[e-1]:null},t.Timeline.prototype._search=function(e,i){if(0===this._timeline.length)return-1;i=t.defaultArg(i,"time");var r=0,n=this._timeline.length,o=n;if(n>0&&this._timeline[n-1][i]<=e)return n-1;for(;re)return s;a[i]>e?o=s:r=s+1}return-1},t.Timeline.prototype._iterate=function(e,i,r){i=t.defaultArg(i,0),r=t.defaultArg(r,this._timeline.length-1),this._timeline.slice(i,r+1).forEach(function(t){e.call(this,t)}.bind(this))},t.Timeline.prototype.forEach=function(t){return this._iterate(t),this},t.Timeline.prototype.forEachBefore=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(e,0,i),this},t.Timeline.prototype.forEachAfter=function(t,e){var i=this._search(t);return this._iterate(e,i+1),this},t.Timeline.prototype.forEachBetween=function(t,e,i){var r=this._search(t),n=this._search(e);return-1!==r&&-1!==n?(this._timeline[r].time!==t&&(r+=1),this._timeline[n].time===e&&(n-=1),this._iterate(i,r,n)):-1===r&&this._iterate(i,0,n),this},t.Timeline.prototype.forEachFrom=function(t,e){for(var i=this._search(t);i>=0&&this._timeline[i].time>=t;)i--;return this._iterate(e,i+1),this},t.Timeline.prototype.forEachAtTime=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(function(i){i.time===t&&e.call(this,i)},0,i),this},t.Timeline.prototype.dispose=function(){return t.prototype.dispose.call(this),this._timeline=null,this},t.Timeline}),e(function(t){t.supported&&(!window.hasOwnProperty("OfflineAudioContext")&&window.hasOwnProperty("webkitOfflineAudioContext")&&(window.OfflineAudioContext=window.webkitOfflineAudioContext),new OfflineAudioContext(1,1,44100).startRendering()instanceof Promise||(OfflineAudioContext.prototype._native_startRendering=OfflineAudioContext.prototype.startRendering,OfflineAudioContext.prototype.startRendering=function(){return new Promise(function(t){this.oncomplete=function(e){t(e.renderedBuffer)},this._native_startRendering()}.bind(this))}))}),e(function(t){if(t.supported){!window.hasOwnProperty("AudioContext")&&window.hasOwnProperty("webkitAudioContext")&&(window.AudioContext=window.webkitAudioContext),AudioContext.prototype.close||(AudioContext.prototype.close=function(){return t.isFunction(this.suspend)&&this.suspend(),Promise.resolve()}),AudioContext.prototype.resume||(AudioContext.prototype.resume=function(){return Promise.resolve()}),!AudioContext.prototype.createGain&&AudioContext.prototype.createGainNode&&(AudioContext.prototype.createGain=AudioContext.prototype.createGainNode),!AudioContext.prototype.createDelay&&AudioContext.prototype.createDelayNode&&(AudioContext.prototype.createDelay=AudioContext.prototype.createDelayNode);var e=!1,i=new OfflineAudioContext(1,1,44100),r=new Uint32Array([1179011410,48,1163280727,544501094,16,131073,44100,176400,1048580,1635017060,8,0,0,0,0]).buffer;try{i.decodeAudioData(r)instanceof Promise&&(e=!0)}catch(t){e=!1}e||(AudioContext.prototype._native_decodeAudioData=AudioContext.prototype.decodeAudioData,AudioContext.prototype.decodeAudioData=function(t){return new Promise(function(e,i){this._native_decodeAudioData(t,e,i)}.bind(this))})}}),e(function(t){t.Context=function(){t.Emitter.call(this);var i=t.defaults(arguments,["context"],t.Context);if(!i.context&&(i.context=new window.AudioContext,!i.context))throw new Error("could not create AudioContext. Possibly too many AudioContexts running already.");for(var r in this._context=i.context,this._context)this._defineProperty(this._context,r);this._latencyHint=i.latencyHint,this._constants={},this.lookAhead=i.lookAhead,this._computedUpdateInterval=0,this._ticker=new e(this.emit.bind(this,"tick"),i.clockSource,i.updateInterval),this._timeouts=new t.Timeline,this._timeoutIds=0,this.on("tick",this._timeoutLoop.bind(this))},t.extend(t.Context,t.Emitter),t.Emitter.mixin(t.Context),t.Context.defaults={clockSource:"worker",latencyHint:"interactive",lookAhead:.1,updateInterval:.03},t.Context.prototype._defineProperty=function(e,i){t.isUndef(this[i])&&Object.defineProperty(this,i,{get:function(){return"function"==typeof e[i]?e[i].bind(e):e[i]},set:function(t){e[i]=t}})},t.Context.prototype.now=function(){return this._context.currentTime+this.lookAhead},t.Context.prototype.ready=function(){return new Promise(function(t){"running"===this._context.state?t():this._context.resume().then(function(){t()})}.bind(this))},t.Context.prototype.close=function(){return this._context.close().then(function(){t.Context.emit("close",this)}.bind(this))},t.Context.prototype.getConstant=function(t){if(this._constants[t])return this._constants[t];for(var e=this._context.createBuffer(1,128,this._context.sampleRate),i=e.getChannelData(0),r=0;r1&&(this.input=new Array(t)),1===e?this.output=this.context.createGain():e>1&&(this.output=new Array(e))},Object.defineProperty(t.AudioNode.prototype,"channelCount",{get:function(){return this.output.channelCount},set:function(t){return this.output.channelCount=t}}),Object.defineProperty(t.AudioNode.prototype,"channelCountMode",{get:function(){return this.output.channelCountMode},set:function(t){return this.output.channelCountMode=t}}),Object.defineProperty(t.AudioNode.prototype,"channelInterpretation",{get:function(){return this.output.channelInterpretation},set:function(t){return this.output.channelInterpretation=t}}),Object.defineProperty(t.AudioNode.prototype,"numberOfInputs",{get:function(){return this.input?t.isArray(this.input)?this.input.length:1:0}}),Object.defineProperty(t.AudioNode.prototype,"numberOfOutputs",{get:function(){return this.output?t.isArray(this.output)?this.output.length:1:0}}),t.AudioNode.prototype._onConnect=function(){},t.AudioNode.prototype.connect=function(e,i,r){return e._onConnect&&e._onConnect(this),t.isArray(this.output)?(i=t.defaultArg(i,0),this.output[i].connect(e,0,r)):this.output.connect(e,i,r),this},t.AudioNode.prototype.disconnect=function(e,i,r){t.isArray(this.output)?t.isNumber(e)?this.output[e].disconnect():(i=t.defaultArg(i,0),this.output[i].disconnect(e,0,r)):this.output.disconnect.apply(this.output,arguments)},t.AudioNode.prototype.chain=function(){for(var t=this,e=0;e3&&(r=parseFloat(parseFloat(r).toFixed(3))),[i,e,r].join(":")},t.Time.prototype.toTicks=function(){var t=this._beatsToUnits(1),e=this.valueOf()/t;return Math.round(e*this._getPPQ())},t.Time.prototype.toSeconds=function(){return this.valueOf()},t.Time.prototype.toMidi=function(){return t.Frequency.ftom(this.toFrequency())},t.Time}),e(function(t){return t.TransportTime=function(e,i){if(!(this instanceof t.TransportTime))return new t.TransportTime(e,i);t.Time.call(this,e,i)},t.extend(t.TransportTime,t.Time),t.TransportTime.prototype._now=function(){return t.Transport.seconds},t.TransportTime}),e(function(t){return t.Type={Default:"number",Time:"time",Frequency:"frequency",TransportTime:"transportTime",Ticks:"ticks",NormalRange:"normalRange",AudioRange:"audioRange",Decibels:"db",Interval:"interval",BPM:"bpm",Positive:"positive",Gain:"gain",Cents:"cents",Degrees:"degrees",MIDI:"midi",BarsBeatsSixteenths:"barsBeatsSixteenths",Samples:"samples",Hertz:"hertz",Note:"note",Milliseconds:"milliseconds",Seconds:"seconds",Notation:"notation"},t.prototype.toSeconds=function(e){return t.isNumber(e)?e:t.isUndef(e)?this.now():t.isString(e)?new t.Time(e).toSeconds():e instanceof t.TimeBase?e.toSeconds():void 0},t.prototype.toFrequency=function(e){return t.isNumber(e)?e:t.isString(e)||t.isUndef(e)?new t.Frequency(e).valueOf():e instanceof t.TimeBase?e.toFrequency():void 0},t.prototype.toTicks=function(e){return t.isNumber(e)||t.isString(e)?new t.TransportTime(e).toTicks():t.isUndef(e)?t.Transport.ticks:e instanceof t.TimeBase?e.toTicks():void 0},t}),e(function(t){return t.Param=function(){var e=t.defaults(arguments,["param","units","convert"],t.Param);t.AudioNode.call(this),this._param=this.input=e.param,this.units=e.units,this.convert=e.convert,this.overridden=!1,this._events=new t.Timeline(1e3),t.isDefined(e.value)&&this._param&&(this.value=e.value)},t.extend(t.Param,t.AudioNode),t.Param.defaults={units:t.Type.Default,convert:!0,param:void 0},Object.defineProperty(t.Param.prototype,"value",{get:function(){var t=this.now();return this._toUnits(this.getValueAtTime(t))},set:function(t){this._initialValue=this._fromUnits(t),this.cancelScheduledValues(this.context.currentTime),this.setValueAtTime(t,this.context.currentTime)}}),Object.defineProperty(t.Param.prototype,"minValue",{get:function(){return this.units===t.Type.Time||this.units===t.Type.Frequency||this.units===t.Type.NormalRange||this.units===t.Type.Positive||this.units===t.Type.BPM?0:this.units===t.Type.AudioRange?-1:this.units===t.Type.Decibels?-1/0:this._param.minValue}}),Object.defineProperty(t.Param.prototype,"maxValue",{get:function(){return this.units===t.Type.NormalRange||this.units===t.Type.AudioRange?1:this._param.maxValue}}),t.Param.prototype._fromUnits=function(e){if(!this.convert&&!t.isUndef(this.convert)||this.overridden)return e;switch(this.units){case t.Type.Time:return this.toSeconds(e);case t.Type.Frequency:return this.toFrequency(e);case t.Type.Decibels:return t.dbToGain(e);case t.Type.NormalRange:return Math.min(Math.max(e,0),1);case t.Type.AudioRange:return Math.min(Math.max(e,-1),1);case t.Type.Positive:return Math.max(e,0);default:return e}},t.Param.prototype._toUnits=function(e){if(!this.convert&&!t.isUndef(this.convert))return e;switch(this.units){case t.Type.Decibels:return t.gainToDb(e);default:return e}},t.Param.prototype._minOutput=1e-5,t.Param.AutomationType={Linear:"linearRampToValueAtTime",Exponential:"exponentialRampToValueAtTime",Target:"setTargetAtTime",SetValue:"setValueAtTime"},t.Param.prototype.setValueAtTime=function(e,i){return i=this.toSeconds(i),e=this._fromUnits(e),this._events.add({type:t.Param.AutomationType.SetValue,value:e,time:i}),this._param.setValueAtTime(e,i),this},t.Param.prototype.getValueAtTime=function(e){e=this.toSeconds(e);var i=this._events.getAfter(e),r=this._events.get(e),n=t.defaultArg(this._initialValue,this._param.defaultValue),o=n;if(null===r)o=n;else if(r.type===t.Param.AutomationType.Target){var s,a=this._events.getBefore(r.time);s=null===a?n:a.value,o=this._exponentialApproach(r.time,s,r.value,r.constant,e)}else o=null===i?r.value:i.type===t.Param.AutomationType.Linear?this._linearInterpolate(r.time,r.value,i.time,i.value,e):i.type===t.Param.AutomationType.Exponential?this._exponentialInterpolate(r.time,r.value,i.time,i.value,e):r.value;return o},t.Param.prototype.setRampPoint=function(t){t=this.toSeconds(t);var e=this.getValueAtTime(t);return this.cancelAndHoldAtTime(t),0===e&&(e=this._minOutput),this.setValueAtTime(this._toUnits(e),t),this},t.Param.prototype.linearRampToValueAtTime=function(e,i){return e=this._fromUnits(e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Linear,value:e,time:i}),this._param.linearRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampToValueAtTime=function(e,i){return e=this._fromUnits(e),e=Math.max(this._minOutput,e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Exponential,time:i,value:e}),this._param.exponentialRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.linearRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.linearRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.targetRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialApproachValueAtTime(t,i,e),this},t.Param.prototype.exponentialApproachValueAtTime=function(t,e,i){var r=Math.log(this.toSeconds(i)+1)/Math.log(200);return e=this.toSeconds(e),this.setTargetAtTime(t,e,r)},t.Param.prototype.setTargetAtTime=function(e,i,r){if(e=this._fromUnits(e),r<=0)throw new Error("timeConstant must be greater than 0");return i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Target,value:e,time:i,constant:r}),this._param.setTargetAtTime(e,i,r),this},t.Param.prototype.setValueCurveAtTime=function(e,i,r,n){n=t.defaultArg(n,1),r=this.toSeconds(r),i=this.toSeconds(i),this.setValueAtTime(e[0]*n,i);for(var o=r/(e.length-1),s=1;s=0;)this.emit("tick"),this._currentTime+=this.blockTime;return this._context.startRendering()},t.OfflineContext.prototype.close=function(){return this._context=null,Promise.resolve()},t.OfflineContext}),e(function(t){if(t.supported){var e=navigator.userAgent.toLowerCase();e.includes("safari")&&!e.includes("chrome")&&e.includes("mobile")&&(t.OfflineContext.prototype.createBufferSource=function(){var t=this._context.createBufferSource(),e=t.start;return t.start=function(i){this.setTimeout(function(){e.call(t,i)}.bind(this),0)}.bind(this),t})}}),e(function(t){return t.Gain=function(){var e=t.defaults(arguments,["gain","units"],t.Gain);t.AudioNode.call(this),this.input=this.output=this._gainNode=this.context.createGain(),this.gain=new t.Param({param:this._gainNode.gain,units:e.units,value:e.gain,convert:e.convert}),this._readOnly("gain")},t.extend(t.Gain,t.AudioNode),t.Gain.defaults={gain:1,convert:!0},t.Gain.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._gainNode.disconnect(),this._gainNode=null,this._writable("gain"),this.gain.dispose(),this.gain=null},t.Gain}),e(function(t){if(t.supported&&!AudioContext.prototype.createConstantSource){var e=function(t){this.context=t;for(var e=t.createBuffer(1,128,t.sampleRate),i=e.getChannelData(0),r=0;r0&&(n=(1-s)/(1/n)),"linear"===this._attackCurve)this._sig.linearRampTo(i,n,e);else if("exponential"===this._attackCurve)this._sig.targetRampTo(i,n,e);else if(n>0){this._sig.cancelAndHoldAtTime(e);var a=this._attackCurve;if(n0){var r=this.toSeconds(this.release);if("linear"===this._releaseCurve)this._sig.linearRampTo(0,r,e);else if("exponential"===this._releaseCurve)this._sig.targetRampTo(0,r,e);else{var n=this._releaseCurve;t.isArray(n)&&(this._sig.cancelAndHoldAtTime(e),this._sig.setValueCurveAtTime(n,e,r,i))}}return this},t.Envelope.prototype.getValueAtTime=function(t){return this._sig.getValueAtTime(t)},t.Envelope.prototype.triggerAttackRelease=function(t,e,i){return e=this.toSeconds(e),this.triggerAttack(e,i),this.triggerRelease(e+this.toSeconds(t)),this},t.Envelope.prototype.cancel=function(t){return this._sig.cancelScheduledValues(t),this},t.Envelope.prototype.connect=t.SignalBase.prototype.connect,function(){var e,i,r=[];for(e=0;e<128;e++)r[e]=Math.sin(e/127*(Math.PI/2));var n=[];for(e=0;e<127;e++){i=e/127;var o=Math.sin(i*(2*Math.PI)*6.4-Math.PI/2)+1;n[e]=o/10+.83*i}n[127]=1;var s=[];for(e=0;e<128;e++)s[e]=Math.ceil(e/127*5)/5;var a=[];for(e=0;e<128;e++)i=e/127,a[e]=.5*(1-Math.cos(Math.PI*i));var h=[];for(e=0;e<128;e++){i=e/127;var l=4*Math.pow(i,3)+.2,u=Math.cos(l*Math.PI*2*i);h[e]=Math.abs(u*(1-i))}function c(t){for(var e=new Array(t.length),i=0;i0?a:(-n-s)/o)+i.time}return i?0===i.value?1/0:i.time+(e-i.ticks)/i.value:e/this._initialValue},t.TickSignal.prototype.ticksToTime=function(e,i){return i=this.toSeconds(i),new t.Time(this.getDurationOfTicks(e,i))},t.TickSignal.prototype.timeToTicks=function(e,i){i=this.toSeconds(i),e=this.toSeconds(e);var r=this.getTicksAtTime(i),n=this.getTicksAtTime(i+e);return new t.Ticks(n-r)},t.TickSignal}),e(function(t){return t.TimelineState=function(e){t.Timeline.call(this),this._initial=e},t.extend(t.TimelineState,t.Timeline),t.TimelineState.prototype.getValueAtTime=function(t){var e=this.get(t);return null!==e?e.state:this._initial},t.TimelineState.prototype.setStateAtTime=function(t,e){return this.add({state:t,time:e}),this},t.TimelineState.prototype.getLastState=function(t,e){e=this.toSeconds(e);for(var i=this._search(e);i>=0;i--){var r=this._timeline[i];if(r.state===t)return r}},t.TimelineState.prototype.getNextState=function(t,e){e=this.toSeconds(e);var i=this._search(e);if(-1!==i)for(var r=i;r0&&(this._tickOffset.cancel(i.time),this._state.cancel(i.time))}return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this.setTicksAtTime(0,e),this},t.TickSource.prototype.pause=function(e){return e=this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started&&this._state.setStateAtTime(t.State.Paused,e),this},t.TickSource.prototype.cancel=function(t){return t=this.toSeconds(t),this._state.cancel(t),this._tickOffset.cancel(t),this},t.TickSource.prototype.getTicksAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.ticks,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=this.frequency.getTicksAtTime(e.time)-this.frequency.getTicksAtTime(i)),n=e}.bind(this)),this._state.remove(r),o},Object.defineProperty(t.TickSource.prototype,"ticks",{get:function(){return this.getTicksAtTime(this.now())},set:function(t){this.setTicksAtTime(t,this.now())}}),Object.defineProperty(t.TickSource.prototype,"seconds",{get:function(){return this.getSecondsAtTime(this.now())},set:function(t){var e=this.now(),i=this.frequency.timeToTicks(t,e);this.setTicksAtTime(i,e)}}),t.TickSource.prototype.getSecondsAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.seconds,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=e.time-i),n=e}.bind(this)),this._state.remove(r),o},t.TickSource.prototype.setTicksAtTime=function(t,e){return e=this.toSeconds(e),this._tickOffset.cancel(e),this._tickOffset.add({time:e,ticks:t,seconds:this.frequency.getDurationOfTicks(t,e)}),this},t.TickSource.prototype.getStateAtTime=function(t){return t=this.toSeconds(t),this._state.getValueAtTime(t)},t.TickSource.prototype.getTimeOfTick=function(e,i){i=t.defaultArg(i,this.now());var r=this._tickOffset.get(i),n=this._state.get(i),o=Math.max(r.time,n.time),s=this.frequency.getTicksAtTime(o)+e-r.ticks;return this.frequency.getTimeOfTick(s)},t.TickSource.prototype.forEachTickBetween=function(e,i,r){var n=this._state.get(e);if(this._state.forEachBetween(e,i,function(i){n.state===t.State.Started&&i.state!==t.State.Started&&this.forEachTickBetween(Math.max(n.time,e),i.time-this.sampleTime,r),n=i}.bind(this)),e=Math.max(n.time,e),n.state===t.State.Started&&this._state){var o=this.frequency.getTicksAtTime(e),s=(o-this.frequency.getTicksAtTime(n.time))%1;0!==s&&(s=1-s);for(var a=this.frequency.getTimeOfTick(o+s),h=null;a0)if(null===t.left.right)(e=t.left).right=t.right,i=e;else{for(e=t.left.right;null!==e.right;)e=e.right;e.parent.right=e.left,i=e.parent,e.left=t.left,e.right=t.right}else if(null===t.right.left)(e=t.right).left=t.left,i=e;else{for(e=t.right.left;null!==e.left;)e=e.left;e.parent=e.parent,e.parent.left=e.right,i=e.parent,e.left=t.left,e.right=t.right}null!==t.parent?t.isLeftChild()?t.parent.left=e:t.parent.right=e:this._setRoot(e),this._rebalance(i)}t.dispose()},t.IntervalTimeline.prototype._rotateLeft=function(t){var e=t.parent,i=t.isLeftChild(),r=t.right;t.right=r.left,r.left=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rotateRight=function(t){var e=t.parent,i=t.isLeftChild(),r=t.left;t.left=r.right,r.right=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rebalance=function(t){var e=t.getBalance();e>1?t.left.getBalance()<0?this._rotateLeft(t.left):this._rotateRight(t):e<-1&&(t.right.getBalance()>0?this._rotateRight(t.right):this._rotateLeft(t))},t.IntervalTimeline.prototype.get=function(t){if(null!==this._root){var e=[];if(this._root.search(t,e),e.length>0){for(var i=e[0],r=1;ri.low&&(i=e[r]);return i.event}}return null},t.IntervalTimeline.prototype.forEach=function(t){if(null!==this._root){var e=[];this._root.traverse(function(t){e.push(t)});for(var i=0;i=0;r--){var n=i[r].event;n&&e(n)}}return this},t.IntervalTimeline.prototype.forEachFrom=function(t,e){if(null!==this._root){var i=[];this._root.searchAfter(t,i);for(var r=i.length-1;r>=0;r--)e(i[r].event)}return this},t.IntervalTimeline.prototype.dispose=function(){var t=[];null!==this._root&&this._root.traverse(function(e){t.push(e)});for(var e=0;ethis.max||(null!==this.left&&this.left.search(t,e),this.low<=t&&this.high>t&&e.push(this),this.low>t||null!==this.right&&this.right.search(t,e))},e.prototype.searchAfter=function(t,e){this.low>=t&&(e.push(this),null!==this.left&&this.left.searchAfter(t,e)),null!==this.right&&this.right.searchAfter(t,e)},e.prototype.traverse=function(t){t(this),null!==this.left&&this.left.traverse(t),null!==this.right&&this.right.traverse(t)},e.prototype.updateHeight=function(){null!==this.left&&null!==this.right?this.height=Math.max(this.left.height,this.right.height)+1:null!==this.right?this.height=this.right.height+1:null!==this.left?this.height=this.left.height+1:this.height=0},e.prototype.updateMax=function(){this.max=this.high,null!==this.left&&(this.max=Math.max(this.max,this.left.max)),null!==this.right&&(this.max=Math.max(this.max,this.right.max))},e.prototype.getBalance=function(){var t=0;return null!==this.left&&null!==this.right?t=this.left.height-this.right.height:null!==this.left?t=this.left.height+1:null!==this.right&&(t=-(this.right.height+1)),t},e.prototype.isLeftChild=function(){return null!==this.parent&&this.parent.left===this},Object.defineProperty(e.prototype,"left",{get:function(){return this._left},set:function(t){this._left=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),Object.defineProperty(e.prototype,"right",{get:function(){return this._right},set:function(t){this._right=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),e.prototype.dispose=function(){this.parent=null,this._left=null,this._right=null,this.event=null},t.IntervalTimeline}),e(function(t){return t.Ticks=function(e,i){if(!(this instanceof t.Ticks))return new t.Ticks(e,i);t.TransportTime.call(this,e,i)},t.extend(t.Ticks,t.TransportTime),t.Ticks.prototype._defaultUnits="i",t.Ticks.prototype._now=function(){return t.Transport.ticks},t.Ticks.prototype._beatsToUnits=function(t){return this._getPPQ()*t},t.Ticks.prototype._secondsToUnits=function(t){return t/(60/this._getBpm())*this._getPPQ()},t.Ticks.prototype._ticksToUnits=function(t){return t},t.Ticks.prototype.toTicks=function(){return this.valueOf()},t.Ticks.prototype.toSeconds=function(){return this.valueOf()/this._getPPQ()*(60/this._getBpm())},t.Ticks}),e(function(t){return t.TransportEvent=function(e,i){i=t.defaultArg(i,t.TransportEvent.defaults),t.call(this),this.Transport=e,this.id=t.TransportEvent._eventId++,this.time=t.Ticks(i.time),this.callback=i.callback,this._once=i.once},t.extend(t.TransportEvent),t.TransportEvent.defaults={once:!1,callback:t.noOp},t.TransportEvent._eventId=0,t.TransportEvent.prototype.invoke=function(t){this.callback&&(this.callback(t),this._once&&this.Transport&&this.Transport.clear(this.id))},t.TransportEvent.prototype.dispose=function(){return t.prototype.dispose.call(this),this.Transport=null,this.callback=null,this.time=null,this},t.TransportEvent}),e(function(t){return t.TransportRepeatEvent=function(e,i){t.TransportEvent.call(this,e,i),i=t.defaultArg(i,t.TransportRepeatEvent.defaults),this.duration=t.Ticks(i.duration),this._interval=t.Ticks(i.interval),this._currentId=-1,this._nextId=-1,this._nextTick=this.time,this._boundRestart=this._restart.bind(this),this.Transport.on("start loopStart",this._boundRestart),this._restart()},t.extend(t.TransportRepeatEvent,t.TransportEvent),t.TransportRepeatEvent.defaults={duration:1/0,interval:1},t.TransportRepeatEvent.prototype.invoke=function(e){this._createEvents(e),t.TransportEvent.prototype.invoke.call(this,e)},t.TransportRepeatEvent.prototype._createEvents=function(e){var i=this.Transport.getTicksAtTime(e);i>=this.time&&i>=this._nextTick&&this._nextTick+this._intervalthis.time&&(this._nextTick=this.time+Math.ceil((i-this.time)/this._interval)*this._interval),this._currentId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick)),this._nextTick+=this._interval,this._nextId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick))},t.TransportRepeatEvent.prototype.dispose=function(){return this.Transport.clear(this._currentId),this.Transport.clear(this._nextId),this.Transport.off("start loopStart",this._boundRestart),this._boundCreateEvents=null,t.TransportEvent.prototype.dispose.call(this),this.duration=null,this._interval=null,this},t.TransportRepeatEvent}),e(function(t){t.Transport=function(){t.Emitter.call(this),t.getContext(function(){this.loop=!1,this._loopStart=0,this._loopEnd=0,this._ppq=e.defaults.PPQ,this._clock=new t.Clock({callback:this._processTick.bind(this),frequency:0}),this._bindClockEvents(),this.bpm=this._clock.frequency,this.bpm._toUnits=this._toUnits.bind(this),this.bpm._fromUnits=this._fromUnits.bind(this),this.bpm.units=t.Type.BPM,this.bpm.value=e.defaults.bpm,this._readOnly("bpm"),this._timeSignature=e.defaults.timeSignature,this._scheduledEvents={},this._timeline=new t.Timeline,this._repeatedEvents=new t.IntervalTimeline,this._syncedSignals=[],this._swingTicks=e.defaults.PPQ/2,this._swingAmount=0}.bind(this))},t.extend(t.Transport,t.Emitter),t.Transport.defaults={bpm:120,swing:0,swingSubdivision:"8n",timeSignature:4,loopStart:0,loopEnd:"4m",PPQ:192},t.Transport.prototype._processTick=function(e,i){if(this._swingAmount>0&&i%this._ppq!=0&&i%(2*this._swingTicks)!=0){var r=i%(2*this._swingTicks)/(2*this._swingTicks),n=Math.sin(r*Math.PI)*this._swingAmount;e+=t.Ticks(2*this._swingTicks/3).toSeconds()*n}this.loop&&i>=this._loopEnd&&(this.emit("loopEnd",e),this._clock.setTicksAtTime(this._loopStart,e),i=this._loopStart,this.emit("loopStart",e,this._clock.getSecondsAtTime(e)),this.emit("loop",e)),this._timeline.forEachAtTime(i,function(t){t.invoke(e)})},t.Transport.prototype.schedule=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e});return this._addEvent(r,this._timeline)},t.Transport.prototype.scheduleRepeat=function(e,i,r,n){var o=new t.TransportRepeatEvent(this,{callback:e,interval:t.Time(i),time:t.TransportTime(r),duration:t.Time(t.defaultArg(n,1/0))});return this._addEvent(o,this._repeatedEvents)},t.Transport.prototype.scheduleOnce=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e,once:!0});return this._addEvent(r,this._timeline)},t.Transport.prototype.clear=function(t){if(this._scheduledEvents.hasOwnProperty(t)){var e=this._scheduledEvents[t.toString()];e.timeline.remove(e.event),e.event.dispose(),delete this._scheduledEvents[t.toString()]}return this},t.Transport.prototype._addEvent=function(t,e){return this._scheduledEvents[t.id.toString()]={event:t,timeline:e},e.add(t),t.id},t.Transport.prototype.cancel=function(e){return e=t.defaultArg(e,0),e=this.toTicks(e),this._timeline.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this._repeatedEvents.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this},t.Transport.prototype._bindClockEvents=function(){this._clock.on("start",function(e,i){i=t.Ticks(i).toSeconds(),this.emit("start",e,i)}.bind(this)),this._clock.on("stop",function(t){this.emit("stop",t)}.bind(this)),this._clock.on("pause",function(t){this.emit("pause",t)}.bind(this))},Object.defineProperty(t.Transport.prototype,"state",{get:function(){return this._clock.getStateAtTime(this.now())}}),t.Transport.prototype.start=function(e,i){return t.isDefined(i)&&(i=this.toTicks(i)),this._clock.start(e,i),this},t.Transport.prototype.stop=function(t){return this._clock.stop(t),this},t.Transport.prototype.pause=function(t){return this._clock.pause(t),this},t.Transport.prototype.toggle=function(e){return e=this.toSeconds(e),this._clock.getStateAtTime(e)!==t.State.Started?this.start(e):this.stop(e),this},Object.defineProperty(t.Transport.prototype,"timeSignature",{get:function(){return this._timeSignature},set:function(e){t.isArray(e)&&(e=e[0]/e[1]*4),this._timeSignature=e}}),Object.defineProperty(t.Transport.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t)}}),t.Transport.prototype.setLoopPoints=function(t,e){return this.loopStart=t,this.loopEnd=e,this},Object.defineProperty(t.Transport.prototype,"swing",{get:function(){return this._swingAmount},set:function(t){this._swingAmount=t}}),Object.defineProperty(t.Transport.prototype,"swingSubdivision",{get:function(){return t.Ticks(this._swingTicks).toNotation()},set:function(t){this._swingTicks=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"position",{get:function(){var e=this.now(),i=this._clock.getTicksAtTime(e);return t.Ticks(i).toBarsBeatsSixteenths()},set:function(t){var e=this.toTicks(t);this.ticks=e}}),Object.defineProperty(t.Transport.prototype,"seconds",{get:function(){return this._clock.seconds},set:function(t){var e=this.now(),i=this.bpm.timeToTicks(t,e);this.ticks=i}}),Object.defineProperty(t.Transport.prototype,"progress",{get:function(){if(this.loop){var t=this.now();return(this._clock.getTicksAtTime(t)-this._loopStart)/(this._loopEnd-this._loopStart)}return 0}}),Object.defineProperty(t.Transport.prototype,"ticks",{get:function(){return this._clock.ticks},set:function(e){if(this._clock.ticks!==e){var i=this.now();this.state===t.State.Started?(this.emit("stop",i),this._clock.setTicksAtTime(e,i),this.emit("start",i,this.seconds)):this._clock.setTicksAtTime(e,i)}}}),t.Transport.prototype.getTicksAtTime=function(t){return Math.round(this._clock.getTicksAtTime(t))},t.Transport.prototype.getSecondsAtTime=function(t){return this._clock.getSecondsAtTime(t)},Object.defineProperty(t.Transport.prototype,"PPQ",{get:function(){return this._ppq},set:function(t){var e=this.bpm.value;this._ppq=t,this.bpm.value=e}}),t.Transport.prototype._fromUnits=function(t){return 1/(60/t/this.PPQ)},t.Transport.prototype._toUnits=function(t){return t/this.PPQ*60},t.Transport.prototype.nextSubdivision=function(e){if(e=this.toTicks(e),this.state!==t.State.Started)return 0;var i=this.now(),r=e-this.getTicksAtTime(i)%e;return this._clock.nextTickTime(r,i)},t.Transport.prototype.syncSignal=function(e,i){if(!i){var r=this.now();i=0!==e.getValueAtTime(r)?e.getValueAtTime(r)/this.bpm.getValueAtTime(r):0}var n=new t.Gain(i);return this.bpm.chain(n,e._param),this._syncedSignals.push({ratio:n,signal:e,initial:e.value}),e.value=0,this},t.Transport.prototype.unsyncSignal=function(t){for(var e=this._syncedSignals.length-1;e>=0;e--){var i=this._syncedSignals[e];i.signal===t&&(i.ratio.dispose(),i.signal.value=i.initial,this._syncedSignals.splice(e,1))}return this},t.Transport.prototype.dispose=function(){return t.Emitter.prototype.dispose.call(this),this._clock.dispose(),this._clock=null,this._writable("bpm"),this.bpm=null,this._timeline.dispose(),this._timeline=null,this._repeatedEvents.dispose(),this._repeatedEvents=null,this};var e=t.Transport;return t.Transport=new e,t.Context.on("init",function(i){i.Transport instanceof e?t.Transport=i.Transport:t.Transport=new e,i.Transport=t.Transport}),t.Context.on("close",function(t){t.Transport instanceof e&&t.Transport.dispose()}),t.Transport}),e(function(t){return t.Volume=function(){var e=t.defaults(arguments,["volume"],t.Volume);t.AudioNode.call(this),this.output=this.input=new t.Gain(e.volume,t.Type.Decibels),this._unmutedVolume=e.volume,this.volume=this.output.gain,this._readOnly("volume"),this.mute=e.mute},t.extend(t.Volume,t.AudioNode),t.Volume.defaults={volume:0,mute:!1},Object.defineProperty(t.Volume.prototype,"mute",{get:function(){return this.volume.value===-1/0},set:function(t){!this.mute&&t?(this._unmutedVolume=this.volume.value,this.volume.value=-1/0):this.mute&&!t&&(this.volume.value=this._unmutedVolume)}}),t.Volume.prototype.dispose=function(){return this.input.dispose(),t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this.volume.dispose(),this.volume=null,this},t.Volume}),e(function(t){t.Master=function(){t.AudioNode.call(this),t.getContext(function(){this.createInsOuts(1,0),this._volume=this.output=new t.Volume,this.volume=this._volume.volume,this._readOnly("volume"),this.input.chain(this.output,this.context.destination)}.bind(this))},t.extend(t.Master,t.AudioNode),t.Master.defaults={volume:0,mute:!1},Object.defineProperty(t.Master.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Master.prototype.chain=function(){this.input.disconnect(),this.input.chain.apply(this.input,arguments),arguments[arguments.length-1].connect(this.output)},t.Master.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null},t.AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this},window.AudioNode&&(AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this});var e=t.Master;return t.Master=new e,t.Context.on("init",function(i){i.Master instanceof e?t.Master=i.Master:t.Master=new e,i.Master=t.Master}),t.Context.on("close",function(t){t.Master instanceof e&&t.Master.dispose()}),t.Master}),e(function(t){return t.Source=function(e){e=t.defaultArg(e,t.Source.defaults),t.AudioNode.call(this),this._volume=this.output=new t.Volume(e.volume),this.volume=this._volume.volume,this._readOnly("volume"),this._state=new t.TimelineState(t.State.Stopped),this._state.memory=100,this._synced=!1,this._scheduled=[],this._volume.output.output.channelCount=2,this._volume.output.output.channelCountMode="explicit",this.mute=e.mute},t.extend(t.Source,t.AudioNode),t.Source.defaults={volume:0,mute:!1},Object.defineProperty(t.Source.prototype,"state",{get:function(){return this._synced?t.Transport.state===t.State.Started?this._state.getValueAtTime(t.Transport.seconds):t.State.Stopped:this._state.getValueAtTime(this.now())}}),Object.defineProperty(t.Source.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Source.prototype._start=t.noOp,t.Source.prototype.restart=t.noOp,t.Source.prototype._stop=t.noOp,t.Source.prototype.start=function(e,i,r){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started)this._state.cancel(e),this._state.setStateAtTime(t.State.Started,e),this.restart(e,i,r);else if(this._state.setStateAtTime(t.State.Started,e),this._synced){var n=this._state.get(e);n.offset=t.defaultArg(i,0),n.duration=r;var o=t.Transport.schedule(function(t){this._start(t,i,r)}.bind(this),e);this._scheduled.push(o),t.Transport.state===t.State.Started&&this._syncedStart(this.now(),t.Transport.seconds)}else this._start.apply(this,arguments);return this},t.Source.prototype.stop=function(e){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._synced){var i=t.Transport.schedule(this._stop.bind(this),e);this._scheduled.push(i)}else this._stop.apply(this,arguments);return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this},t.Source.prototype.sync=function(){return this._synced=!0,this._syncedStart=function(e,i){if(i>0){var r=this._state.get(i);if(r&&r.state===t.State.Started&&r.time!==i){var n,o=i-this.toSeconds(r.time);r.duration&&(n=this.toSeconds(r.duration)-o),this._start(e,this.toSeconds(r.offset)+o,n)}}}.bind(this),this._syncedStop=function(e){var i=t.Transport.getSecondsAtTime(Math.max(e-this.sampleTime,0));this._state.getValueAtTime(i)===t.State.Started&&this._stop(e)}.bind(this),t.Transport.on("start loopStart",this._syncedStart),t.Transport.on("stop pause loopEnd",this._syncedStop),this},t.Source.prototype.unsync=function(){this._synced&&(t.Transport.off("stop pause loopEnd",this._syncedStop),t.Transport.off("start loopStart",this._syncedStart)),this._synced=!1;for(var e=0;e0}}),Object.defineProperty(t.Buffer.prototype,"duration",{get:function(){return this._buffer?this._buffer.duration:0}}),Object.defineProperty(t.Buffer.prototype,"length",{get:function(){return this._buffer?this._buffer.length:0}}),Object.defineProperty(t.Buffer.prototype,"numberOfChannels",{get:function(){return this._buffer?this._buffer.numberOfChannels:0}}),t.Buffer.prototype.fromArray=function(t){var e=t[0].length>0,i=e?t.length:1,r=e?t[0].length:t.length,n=this.context.createBuffer(i,r,this.context.sampleRate);e||1!==i||(t=[t]);for(var o=0;o=this._startTime&&(-1===this._stopTime||e<=this._stopTime)?t.State.Started:t.State.Stopped},t.OscillatorNode.prototype.start=function(t){if(-1!==this._startTime)throw new Error("cannot call OscillatorNode.start more than once");this._startTime=this.toSeconds(t),this._oscillator.start(this._startTime);var e=this.context.currentTime;return this._gainNode.gain.cancelScheduledValues(e),this._gainNode.gain.setValueAtTime(0,e),this._gainNode.gain.setValueAtTime(1,this._startTime),this},t.OscillatorNode.prototype.setPeriodicWave=function(t){return this._oscillator.setPeriodicWave(t),this},t.OscillatorNode.prototype.stop=function(t){return this.cancelStop(),this._stopTime=this.toSeconds(t),this._gainNode.gain.setValueAtTime(0,this._stopTime),this.context.clearTimeout(this._timeout),this._timeout=this.context.setTimeout(function(){this._oscillator.stop(this.now()),this.onended()}.bind(this),this._stopTime-this.now()),this},t.OscillatorNode.prototype.cancelStop=function(){return-1!==this._startTime&&(this._gainNode.gain.cancelScheduledValues(this._startTime+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime)),this.context.clearTimeout(this._timeout),this._stopTime=-1),this},Object.defineProperty(t.OscillatorNode.prototype,"type",{get:function(){return this._oscillator.type},set:function(t){this._oscillator.type=t}}),t.OscillatorNode.prototype.dispose=function(){return this.context.clearTimeout(this._timeout),t.AudioNode.prototype.dispose.call(this),this.onended=null,this._oscillator.disconnect(),this._oscillator=null,this._gainNode.dispose(),this._gainNode=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this},t.OscillatorNode}),e(function(t){return t.Oscillator=function(){var e=t.defaults(arguments,["frequency","type"],t.Oscillator);t.Source.call(this,e),this._oscillator=null,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this._wave=null,this._partials=t.defaultArg(e.partials,[1]),this._phase=e.phase,this._type=null,this.type=e.type,this.phase=this._phase,this._readOnly(["frequency","detune"])},t.extend(t.Oscillator,t.Source),t.Oscillator.defaults={type:"sine",frequency:440,detune:0,phase:0,partials:[]},t.Oscillator.Type={Sine:"sine",Triangle:"triangle",Sawtooth:"sawtooth",Square:"square",Custom:"custom"},t.Oscillator.prototype._start=function(e){this._oscillator=new t.OscillatorNode,this._wave?this._oscillator.setPeriodicWave(this._wave):this._oscillator.type=this._type,this._oscillator.connect(this.output),this.frequency.connect(this._oscillator.frequency),this.detune.connect(this._oscillator.detune),e=this.toSeconds(e),this._oscillator.start(e)},t.Oscillator.prototype._stop=function(t){return this._oscillator&&(t=this.toSeconds(t),this._oscillator.stop(t)),this},t.Oscillator.prototype.restart=function(t){return this._oscillator.cancelStop(),this._state.cancel(this.toSeconds(t)),this},t.Oscillator.prototype.syncFrequency=function(){return t.Transport.syncSignal(this.frequency),this},t.Oscillator.prototype.unsyncFrequency=function(){return t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Oscillator.prototype,"type",{get:function(){return this._type},set:function(e){var i=[t.Oscillator.Type.Sine,t.Oscillator.Type.Square,t.Oscillator.Type.Triangle,t.Oscillator.Type.Sawtooth].includes(e);if(0===this._phase&&i)this._wave=null,null!==this._oscillator&&this._oscillator.type;else{var r=this._getRealImaginary(e,this._phase),n=this.context.createPeriodicWave(r[0],r[1]);this._wave=n,null!==this._oscillator&&this._oscillator.setPeriodicWave(this._wave)}this._type=e}}),t.Oscillator.prototype._getRealImaginary=function(e,i){var r=2048,n=new Float32Array(r),o=new Float32Array(r),s=1;if(e===t.Oscillator.Type.Custom)r=s=this._partials.length+1;else{var a=/^(sine|triangle|square|sawtooth)(\d+)$/.exec(e);a&&(s=parseInt(a[2])+1,e=a[1],r=s=Math.max(s,2))}for(var h=1;h>1&1?-1:1):0;break;case t.Oscillator.Type.Custom:l=this._partials[h-1];break;default:throw new TypeError("Tone.Oscillator: invalid type: "+e)}0!==l?(n[h]=-l*Math.sin(i*h),o[h]=l*Math.cos(i*h)):(n[h]=0,o[h]=0)}return[n,o]},t.Oscillator.prototype._inverseFFT=function(t,e,i){for(var r=0,n=t.length,o=0;on&&r=this.values.length&&(this.index=0)):e===t.CtrlPattern.Type.Down?(this.index--,this.index<0&&(this.index=this.values.length-1)):e===t.CtrlPattern.Type.UpDown||e===t.CtrlPattern.Type.DownUp?(this._direction===t.CtrlPattern.Type.Up?this.index++:this.index--,this.index<0?(this.index=1,this._direction=t.CtrlPattern.Type.Up):this.index>=this.values.length&&(this.index=this.values.length-2,this._direction=t.CtrlPattern.Type.Down)):e===t.CtrlPattern.Type.Random?this.index=Math.floor(Math.random()*this.values.length):e===t.CtrlPattern.Type.RandomWalk?Math.random()<.5?(this.index--,this.index=Math.max(this.index,0)):(this.index++,this.index=Math.min(this.index,this.values.length-1)):e===t.CtrlPattern.Type.RandomOnce?(this.index++,this.index>=this.values.length&&(this.index=0,this._shuffleValues())):e===t.CtrlPattern.Type.AlternateUp?(this._direction===t.CtrlPattern.Type.Up?(this.index+=2,this._direction=t.CtrlPattern.Type.Down):(this.index-=1,this._direction=t.CtrlPattern.Type.Up),this.index>=this.values.length&&(this.index=0,this._direction=t.CtrlPattern.Type.Up)):e===t.CtrlPattern.Type.AlternateDown&&(this._direction===t.CtrlPattern.Type.Up?(this.index+=1,this._direction=t.CtrlPattern.Type.Down):(this.index-=2,this._direction=t.CtrlPattern.Type.Up),this.index<0&&(this.index=this.values.length-1,this._direction=t.CtrlPattern.Type.Down)),this.value},t.CtrlPattern.prototype._shuffleValues=function(){var t=[];this._shuffled=[];for(var e=0;e0;){var i=t.splice(Math.floor(t.length*Math.random()),1);this._shuffled.push(i[0])}},t.CtrlPattern.prototype.dispose=function(){this._shuffled=null,this.values=null},t.CtrlPattern}),e(function(t){return t.CtrlRandom=function(){var e=t.defaults(arguments,["min","max"],t.CtrlRandom);t.call(this),this.min=e.min,this.max=e.max,this.integer=e.integer},t.extend(t.CtrlRandom),t.CtrlRandom.defaults={min:0,max:1,integer:!1},Object.defineProperty(t.CtrlRandom.prototype,"value",{get:function(){var t=this.toSeconds(this.min),e=this.toSeconds(this.max),i=Math.random(),r=i*t+(1-i)*e;return this.integer&&(r=Math.floor(r)),r}}),t.CtrlRandom}),e(function(t){return t.Buffers=function(e){var i=Array.prototype.slice.call(arguments);i.shift();var r=t.defaults(i,["onload","baseUrl"],t.Buffers);for(var n in t.call(this),this._buffers={},this.baseUrl=r.baseUrl,this._loadingCount=0,e)this._loadingCount++,this.add(n,e[n],this._bufferLoaded.bind(this,r.onload))},t.extend(t.Buffers),t.Buffers.defaults={onload:t.noOp,baseUrl:""},t.Buffers.prototype.has=function(t){return this._buffers.hasOwnProperty(t)},t.Buffers.prototype.get=function(t){if(this.has(t))return this._buffers[t];throw new Error("Tone.Buffers: no buffer named "+t)},t.Buffers.prototype._bufferLoaded=function(t){this._loadingCount--,0===this._loadingCount&&t&&t(this)},Object.defineProperty(t.Buffers.prototype,"loaded",{get:function(){var t=!0;for(var e in this._buffers){var i=this.get(e);t=t&&i.loaded}return t}}),t.Buffers.prototype.add=function(e,i,r){return r=t.defaultArg(r,t.noOp),i instanceof t.Buffer?(this._buffers[e]=i,r(this)):i instanceof AudioBuffer?(this._buffers[e]=new t.Buffer(i),r(this)):t.isString(i)&&(this._buffers[e]=new t.Buffer(this.baseUrl+i,r)),this},t.Buffers.prototype.dispose=function(){for(var e in t.prototype.dispose.call(this),this._buffers)this._buffers[e].dispose();return this._buffers=null,this},t.Buffers}),e(function(t){var e={};return t.prototype.send=function(i,r){e.hasOwnProperty(i)||(e[i]=this.context.createGain()),r=t.defaultArg(r,0);var n=new t.Gain(r,t.Type.Decibels);return this.connect(n),n.connect(e[i]),n},t.prototype.receive=function(t,i){return e.hasOwnProperty(t)||(e[t]=this.context.createGain()),e[t].connect(this,0,i),this},t.Context.on("init",function(t){t.Buses?e=t.Buses:(e={},t.Buses=e)}),t}),e(function(t){return t.Draw=function(){t.call(this),this._events=new t.Timeline,this.expiration=.25,this.anticipation=.008,this._boundDrawLoop=this._drawLoop.bind(this)},t.extend(t.Draw),t.Draw.prototype.schedule=function(t,e){return this._events.add({callback:t,time:this.toSeconds(e)}),1===this._events.length&&requestAnimationFrame(this._boundDrawLoop),this},t.Draw.prototype.cancel=function(t){return this._events.cancel(this.toSeconds(t)),this},t.Draw.prototype._drawLoop=function(){for(var e=t.now();this._events.length&&this._events.peek().time-this.anticipation<=e;){var i=this._events.shift();e-i.time<=this.expiration&&i.callback()}this._events.length>0&&requestAnimationFrame(this._boundDrawLoop)},t.Draw=new t.Draw,t.Draw}),e(function(t){t.Listener=function(){t.call(this),this._orientation=[0,0,0,0,0,0],this._position=[0,0,0],t.getContext(function(){this.set(e.defaults)}.bind(this))},t.extend(t.Listener),t.Listener.defaults={positionX:0,positionY:0,positionZ:0,forwardX:0,forwardY:0,forwardZ:1,upX:0,upY:1,upZ:0},t.Listener.prototype._rampTimeConstant=.01,t.Listener.prototype.setPosition=function(t,e,i){if(this.context.listener.positionX){var r=this.now();this.context.listener.positionX.setTargetAtTime(t,r,this._rampTimeConstant),this.context.listener.positionY.setTargetAtTime(e,r,this._rampTimeConstant),this.context.listener.positionZ.setTargetAtTime(i,r,this._rampTimeConstant)}else this.context.listener.setPosition(t,e,i);return this._position=Array.prototype.slice.call(arguments),this},t.Listener.prototype.setOrientation=function(t,e,i,r,n,o){if(this.context.listener.forwardX){var s=this.now();this.context.listener.forwardX.setTargetAtTime(t,s,this._rampTimeConstant),this.context.listener.forwardY.setTargetAtTime(e,s,this._rampTimeConstant),this.context.listener.forwardZ.setTargetAtTime(i,s,this._rampTimeConstant),this.context.listener.upX.setTargetAtTime(r,s,this._rampTimeConstant),this.context.listener.upY.setTargetAtTime(n,s,this._rampTimeConstant),this.context.listener.upZ.setTargetAtTime(o,s,this._rampTimeConstant)}else this.context.listener.setOrientation(t,e,i,r,n,o);return this._orientation=Array.prototype.slice.call(arguments),this},Object.defineProperty(t.Listener.prototype,"positionX",{set:function(t){this._position[0]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[0]}}),Object.defineProperty(t.Listener.prototype,"positionY",{set:function(t){this._position[1]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[1]}}),Object.defineProperty(t.Listener.prototype,"positionZ",{set:function(t){this._position[2]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[2]}}),Object.defineProperty(t.Listener.prototype,"forwardX",{set:function(t){this._orientation[0]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[0]}}),Object.defineProperty(t.Listener.prototype,"forwardY",{set:function(t){this._orientation[1]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[1]}}),Object.defineProperty(t.Listener.prototype,"forwardZ",{set:function(t){this._orientation[2]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[2]}}),Object.defineProperty(t.Listener.prototype,"upX",{set:function(t){this._orientation[3]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[3]}}),Object.defineProperty(t.Listener.prototype,"upY",{set:function(t){this._orientation[4]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[4]}}),Object.defineProperty(t.Listener.prototype,"upZ",{set:function(t){this._orientation[5]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[5]}}),t.Listener.prototype.dispose=function(){return this._orientation=null,this._position=null,this};var e=t.Listener;return t.Listener=new e,t.Context.on("init",function(i){i.Listener instanceof e?t.Listener=i.Listener:t.Listener=new e,i.Listener=t.Listener}),t.Listener}),e(function(t){return t.Offline=function(e,i){var r,n=t.context.sampleRate,o=t.context,s=function e(i,r,n,o){o=t.defaultArg(o,0);var s=new t.OfflineContext(2,r,n);t.context=s;var a=i(t.Transport);return s.currentTime>0&&o<1e3?e(i,r,n,++o):{response:a,context:s}}(e,i,n),a=s.response,h=s.context;return r=a instanceof Promise?a.then(function(){return h.render()}):h.render(),t.context=o,r.then(function(e){return new t.Buffer(e)})},t.Offline}),e(function(t){return t.Effect=function(){var e=t.defaults(arguments,["wet"],t.Effect);t.AudioNode.call(this),this.createInsOuts(1,1),this._dryWet=new t.CrossFade(e.wet),this.wet=this._dryWet.fade,this.effectSend=new t.Gain,this.effectReturn=new t.Gain,this.input.connect(this._dryWet.a),this.input.connect(this.effectSend),this.effectReturn.connect(this._dryWet.b),this._dryWet.connect(this.output),this._readOnly(["wet"])},t.extend(t.Effect,t.AudioNode),t.Effect.defaults={wet:1},t.Effect.prototype.connectEffect=function(t){return this.effectSend.chain(t,this.effectReturn),this},t.Effect.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this._dryWet.dispose(),this._dryWet=null,this.effectSend.dispose(),this.effectSend=null,this.effectReturn.dispose(),this.effectReturn=null,this._writable(["wet"]),this.wet=null,this},t.Effect}),e(function(t){return t.AutoFilter=function(){var e=t.defaults(arguments,["frequency","baseFrequency","octaves"],t.AutoFilter);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth}),this.depth=this._lfo.amplitude,this.frequency=this._lfo.frequency,this.filter=new t.Filter(e.filter),this._octaves=0,this.connectEffect(this.filter),this._lfo.connect(this.filter.frequency),this.type=e.type,this._readOnly(["frequency","depth"]),this.octaves=e.octaves,this.baseFrequency=e.baseFrequency},t.extend(t.AutoFilter,t.Effect),t.AutoFilter.defaults={frequency:1,type:"sine",depth:1,baseFrequency:200,octaves:2.6,filter:{type:"lowpass",rolloff:-12,Q:1}},t.AutoFilter.prototype.start=function(t){return this._lfo.start(t),this},t.AutoFilter.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoFilter.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoFilter.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoFilter.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),Object.defineProperty(t.AutoFilter.prototype,"baseFrequency",{get:function(){return this._lfo.min},set:function(t){this._lfo.min=this.toFrequency(t),this.octaves=this._octaves}}),Object.defineProperty(t.AutoFilter.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._lfo.max=this.baseFrequency*Math.pow(2,t)}}),t.AutoFilter.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this.filter.dispose(),this.filter=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null,this},t.AutoFilter}),e(function(t){return t.AutoPanner=function(){var e=t.defaults(arguments,["frequency"],t.AutoPanner);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth,min:-1,max:1}),this.depth=this._lfo.amplitude,this._panner=new t.Panner,this.frequency=this._lfo.frequency,this.connectEffect(this._panner),this._lfo.connect(this._panner.pan),this.type=e.type,this._readOnly(["depth","frequency"])},t.extend(t.AutoPanner,t.Effect),t.AutoPanner.defaults={frequency:1,type:"sine",depth:1},t.AutoPanner.prototype.start=function(t){return this._lfo.start(t),this},t.AutoPanner.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoPanner.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoPanner.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoPanner.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.AutoPanner.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this._panner.dispose(),this._panner=null,this._writable(["depth","frequency"]),this.frequency=null,this.depth=null,this},t.AutoPanner}),e(function(t){return t.AutoWah=function(){var e=t.defaults(arguments,["baseFrequency","octaves","sensitivity"],t.AutoWah);t.Effect.call(this,e),this.follower=new t.Follower(e.follower),this._sweepRange=new t.ScaleExp(0,1,.5),this._baseFrequency=e.baseFrequency,this._octaves=e.octaves,this._inputBoost=new t.Gain,this._bandpass=new t.Filter({rolloff:-48,frequency:0,Q:e.Q}),this._peaking=new t.Filter(0,"peaking"),this._peaking.gain.value=e.gain,this.gain=this._peaking.gain,this.Q=this._bandpass.Q,this.effectSend.chain(this._inputBoost,this.follower,this._sweepRange),this._sweepRange.connect(this._bandpass.frequency),this._sweepRange.connect(this._peaking.frequency),this.effectSend.chain(this._bandpass,this._peaking,this.effectReturn),this._setSweepRange(),this.sensitivity=e.sensitivity,this._readOnly(["gain","Q"])},t.extend(t.AutoWah,t.Effect),t.AutoWah.defaults={baseFrequency:100,octaves:6,sensitivity:0,Q:2,gain:2,follower:{attack:.3,release:.5}},Object.defineProperty(t.AutoWah.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"baseFrequency",{get:function(){return this._baseFrequency},set:function(t){this._baseFrequency=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"sensitivity",{get:function(){return t.gainToDb(1/this._inputBoost.gain.value)},set:function(e){this._inputBoost.gain.value=1/t.dbToGain(e)}}),t.AutoWah.prototype._setSweepRange=function(){this._sweepRange.min=this._baseFrequency,this._sweepRange.max=Math.min(this._baseFrequency*Math.pow(2,this._octaves),this.context.sampleRate/2)},t.AutoWah.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this.follower.dispose(),this.follower=null,this._sweepRange.dispose(),this._sweepRange=null,this._bandpass.dispose(),this._bandpass=null,this._peaking.dispose(),this._peaking=null,this._inputBoost.dispose(),this._inputBoost=null,this._writable(["gain","Q"]),this.gain=null,this.Q=null,this},t.AutoWah}),e(function(t){return t.Modulo=function(e){t.SignalBase.call(this),this.createInsOuts(1,0),this._shaper=new t.WaveShaper(Math.pow(2,16)),this._multiply=new t.Multiply,this._subtract=this.output=new t.Subtract,this._modSignal=new t.Signal(e),this.input.fan(this._shaper,this._subtract),this._modSignal.connect(this._multiply,0,0),this._shaper.connect(this._multiply,0,1),this._multiply.connect(this._subtract,0,1),this._setWaveShaper(e)},t.extend(t.Modulo,t.SignalBase),t.Modulo.prototype._setWaveShaper=function(t){this._shaper.setMap(function(e){return Math.floor((e+1e-4)/t)})},Object.defineProperty(t.Modulo.prototype,"value",{get:function(){return this._modSignal.value},set:function(t){this._modSignal.value=t,this._setWaveShaper(t)}}),t.Modulo.prototype.dispose=function(){return t.SignalBase.prototype.dispose.call(this),this._shaper.dispose(),this._shaper=null,this._multiply.dispose(),this._multiply=null,this._subtract.dispose(),this._subtract=null,this._modSignal.dispose(),this._modSignal=null,this},t.Modulo}),e(function(t){return t.BitCrusher=function(){var e=t.defaults(arguments,["bits"],t.BitCrusher);t.Effect.call(this,e);var i=1/Math.pow(2,e.bits-1);this._subtract=new t.Subtract,this._modulo=new t.Modulo(i),this._bits=e.bits,this.effectSend.fan(this._subtract,this._modulo),this._modulo.connect(this._subtract,0,1),this._subtract.connect(this.effectReturn)},t.extend(t.BitCrusher,t.Effect),t.BitCrusher.defaults={bits:4},Object.defineProperty(t.BitCrusher.prototype,"bits",{get:function(){return this._bits},set:function(t){this._bits=t;var e=1/Math.pow(2,t-1);this._modulo.value=e}}),t.BitCrusher.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._subtract.dispose(),this._subtract=null,this._modulo.dispose(),this._modulo=null,this},t.BitCrusher}),e(function(t){return t.Chebyshev=function(){var e=t.defaults(arguments,["order"],t.Chebyshev);t.Effect.call(this,e),this._shaper=new t.WaveShaper(4096),this._order=e.order,this.connectEffect(this._shaper),this.order=e.order,this.oversample=e.oversample},t.extend(t.Chebyshev,t.Effect),t.Chebyshev.defaults={order:1,oversample:"none"},t.Chebyshev.prototype._getCoefficient=function(t,e,i){return i.hasOwnProperty(e)?i[e]:(i[e]=0===e?0:1===e?t:2*t*this._getCoefficient(t,e-1,i)-this._getCoefficient(t,e-2,i),i[e])},Object.defineProperty(t.Chebyshev.prototype,"order",{get:function(){return this._order},set:function(t){this._order=t;for(var e=new Array(4096),i=e.length,r=0;r=this._startTime&&!this._sourceStopped?t.State.Started:t.State.Stopped},t.BufferSource.prototype.start=function(e,i,r,n,o){if(-1!==this._startTime)throw new Error("Tone.BufferSource can only be started once.");if(!this.buffer.loaded)throw new Error("Tone.BufferSource: buffer is either not set or not loaded.");e=this.toSeconds(e),i=this.loop?t.defaultArg(i,this.loopStart):t.defaultArg(i,0),i=this.toSeconds(i),n=t.defaultArg(n,1),this._gain=n,o=this.toSeconds(t.defaultArg(o,this.fadeIn)),this.fadeIn=o,o>0?(this._gainNode.gain.setValueAtTime(0,e),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(this._gain,e+o):this._gainNode.gain.exponentialApproachValueAtTime(this._gain,e,o)):this._gainNode.gain.setValueAtTime(n,e),this._startTime=e;var s=this.toSeconds(t.defaultArg(r,this.buffer.duration-i%this.buffer.duration));if(s=Math.max(s,0),t.isDefined(r)&&(this.loop||(s=Math.min(s,this.buffer.duration-i%this.buffer.duration)),this.stop(e+s,this.fadeOut)),this.loop){var a=this.loopEnd||this.buffer.duration,h=this.loopStart;i>=a&&(i=(i-h)%(a-h)+h)}return this._source.buffer=this.buffer.get(),this._source.loopEnd=this.loopEnd||this.buffer.duration,ithis.sampleTime?(this._gainNode.gain.setValueAtTime(this._gain,n),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(0,e):this._gainNode.gain.exponentialApproachValueAtTime(0,n,i)):this._gainNode.gain.setValueAtTime(0,e),t.context.clearTimeout(this._onendedTimeout),this._onendedTimeout=t.context.setTimeout(this._onended.bind(this),this._stopTime-this.now()),this}},t.BufferSource.prototype.cancelStop=function(){if(-1!==this._startTime&&!this._sourceStopped){var t=this.toSeconds(this.fadeIn);this._gainNode.gain.cancelScheduledValues(this._startTime+t+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime+t+this.sampleTime)),this.context.clearTimeout(this._onendedTimeout),this._stopTime=-1}return this},t.BufferSource.prototype._onended=function(){if(!this._sourceStopped){this._sourceStopped=!0;var t="exponential"===this.curve?2*this.fadeOut:0;this._sourceStarted&&-1!==this._stopTime&&this._source.stop(this._stopTime+t),this.onended(this)}},Object.defineProperty(t.BufferSource.prototype,"loopStart",{get:function(){return this._source.loopStart},set:function(t){this._source.loopStart=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"loopEnd",{get:function(){return this._source.loopEnd},set:function(t){this._source.loopEnd=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"buffer",{get:function(){return this._buffer},set:function(t){this._buffer.set(t)}}),Object.defineProperty(t.BufferSource.prototype,"loop",{get:function(){return this._source.loop},set:function(t){this._source.loop=t,this.cancelStop()}}),t.BufferSource.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.onended=null,this._source.onended=null,this._source.disconnect(),this._source=null,this._gainNode.dispose(),this._gainNode=null,this._buffer.dispose(),this._buffer=null,this._startTime=-1,this.playbackRate=null,t.context.clearTimeout(this._onendedTimeout),this},t.BufferSource}),e(function(t){t.Noise=function(){var e=t.defaults(arguments,["type"],t.Noise);t.Source.call(this,e),this._source=null,this._type=e.type,this._playbackRate=e.playbackRate},t.extend(t.Noise,t.Source),t.Noise.defaults={type:"white",playbackRate:1},Object.defineProperty(t.Noise.prototype,"type",{get:function(){return this._type},set:function(e){if(this._type!==e){if(!(e in i))throw new TypeError("Tone.Noise: invalid type: "+e);if(this._type=e,this.state===t.State.Started){var r=this.now();this._stop(r),this._start(r)}}}}),Object.defineProperty(t.Noise.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._source&&(this._source.playbackRate.value=t)}}),t.Noise.prototype._start=function(e){var r=i[this._type];this._source=new t.BufferSource(r).connect(this.output),this._source.loop=!0,this._source.playbackRate.value=this._playbackRate,this._source.start(this.toSeconds(e),Math.random()*(r.duration-.001))},t.Noise.prototype._stop=function(t){this._source&&(this._source.stop(this.toSeconds(t)),this._source=null)},t.Noise.prototype.restart=function(t){this._stop(t),this._start(t)},t.Noise.prototype.dispose=function(){return t.Source.prototype.dispose.call(this),null!==this._source&&(this._source.disconnect(),this._source=null),this._buffer=null,this};var e={pink:function(){for(var t=[],e=0;e<2;e++){var i,r,n,o,s,a,h,l=new Float32Array(220500);t[e]=l,i=r=n=o=s=a=h=0;for(var u=0;u<220500;u++){var c=2*Math.random()-1;i=.99886*i+.0555179*c,r=.99332*r+.0750759*c,n=.969*n+.153852*c,o=.8665*o+.3104856*c,s=.55*s+.5329522*c,a=-.7616*a-.016898*c,l[u]=i+r+n+o+s+a+h+.5362*c,l[u]*=.11,h=.115926*c}}return t}(),brown:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0,n=0;n<220500;n++){var o=2*Math.random()-1;i[n]=(r+.02*o)/1.02,r=i[n],i[n]*=3.5}}return t}(),white:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0;r<220500;r++)i[r]=2*Math.random()-1}return t}()},i={};function r(){for(var r in e)i[r]=(new t.Buffer).fromArray(e[r])}return t.getContext(r),t.Context.on("init",r),t.Noise}),e(function(t){return t.Reverb=function(){var e=t.defaults(arguments,["decay"],t.Reverb);t.Effect.call(this,e),this._convolver=this.context.createConvolver(),this.decay=e.decay,this.preDelay=e.preDelay,this.connectEffect(this._convolver)},t.extend(t.Reverb,t.Effect),t.Reverb.defaults={decay:1.5,preDelay:.01},t.Reverb.prototype.generate=function(){return t.Offline(function(){var e=new t.Noise,i=new t.Noise,r=new t.Merge;e.connect(r.left),i.connect(r.right);var n=(new t.Gain).toMaster();r.connect(n),e.start(0),i.start(0),n.gain.setValueAtTime(0,0),n.gain.linearRampToValueAtTime(1,this.preDelay),n.gain.exponentialApproachValueAtTime(0,this.preDelay,this.decay-this.preDelay)}.bind(this),this.decay).then(function(t){return this._convolver.buffer=t.get(),this}.bind(this))},t.Reverb.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._convolver.disconnect(),this._convolver=null,this},t.Reverb}),e(function(t){return t.StereoFeedbackEffect=function(){var e=t.defaults(arguments,["feedback"],t.FeedbackEffect);t.StereoEffect.call(this,e),this.feedback=new t.Signal(e.feedback,t.Type.NormalRange),this._feedbackL=new t.Gain,this._feedbackR=new t.Gain,this.effectReturnL.chain(this._feedbackL,this.effectSendL),this.effectReturnR.chain(this._feedbackR,this.effectSendR),this.feedback.fan(this._feedbackL.gain,this._feedbackR.gain),this._readOnly(["feedback"])},t.extend(t.StereoFeedbackEffect,t.StereoEffect),t.StereoFeedbackEffect.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["feedback"]),this.feedback.dispose(),this.feedback=null,this._feedbackL.dispose(),this._feedbackL=null,this._feedbackR.dispose(),this._feedbackR=null,this},t.StereoFeedbackEffect}),e(function(t){return t.StereoWidener=function(){var e=t.defaults(arguments,["width"],t.StereoWidener);t.MidSideEffect.call(this,e),this.width=new t.Signal(e.width,t.Type.NormalRange),this._readOnly(["width"]),this._twoTimesWidthMid=new t.Multiply(2),this._twoTimesWidthSide=new t.Multiply(2),this._midMult=new t.Multiply,this._twoTimesWidthMid.connect(this._midMult,0,1),this.midSend.chain(this._midMult,this.midReturn),this._oneMinusWidth=new t.Subtract,this._oneMinusWidth.connect(this._twoTimesWidthMid),this.context.getConstant(1).connect(this._oneMinusWidth,0,0),this.width.connect(this._oneMinusWidth,0,1),this._sideMult=new t.Multiply,this.width.connect(this._twoTimesWidthSide),this._twoTimesWidthSide.connect(this._sideMult,0,1),this.sideSend.chain(this._sideMult,this.sideReturn)},t.extend(t.StereoWidener,t.MidSideEffect),t.StereoWidener.defaults={width:.5},t.StereoWidener.prototype.dispose=function(){return t.MidSideEffect.prototype.dispose.call(this),this._writable(["width"]),this.width.dispose(),this.width=null,this._midMult.dispose(),this._midMult=null,this._sideMult.dispose(),this._sideMult=null,this._twoTimesWidthMid.dispose(),this._twoTimesWidthMid=null,this._twoTimesWidthSide.dispose(),this._twoTimesWidthSide=null,this._oneMinusWidth.dispose(),this._oneMinusWidth=null,this},t.StereoWidener}),e(function(t){return t.Tremolo=function(){var e=t.defaults(arguments,["frequency","depth"],t.Tremolo);t.StereoEffect.call(this,e),this._lfoL=new t.LFO({phase:e.spread,min:1,max:0}),this._lfoR=new t.LFO({phase:e.spread,min:1,max:0}),this._amplitudeL=new t.Gain,this._amplitudeR=new t.Gain,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.depth=new t.Signal(e.depth,t.Type.NormalRange),this._readOnly(["frequency","depth"]),this.effectSendL.chain(this._amplitudeL,this.effectReturnL),this.effectSendR.chain(this._amplitudeR,this.effectReturnR),this._lfoL.connect(this._amplitudeL.gain),this._lfoR.connect(this._amplitudeR.gain),this.frequency.fan(this._lfoL.frequency,this._lfoR.frequency),this.depth.fan(this._lfoR.amplitude,this._lfoL.amplitude),this.type=e.type,this.spread=e.spread},t.extend(t.Tremolo,t.StereoEffect),t.Tremolo.defaults={frequency:10,type:"sine",depth:.5,spread:180},t.Tremolo.prototype.start=function(t){return this._lfoL.start(t),this._lfoR.start(t),this},t.Tremolo.prototype.stop=function(t){return this._lfoL.stop(t),this._lfoR.stop(t),this},t.Tremolo.prototype.sync=function(e){return this._lfoL.sync(e),this._lfoR.sync(e),t.Transport.syncSignal(this.frequency),this},t.Tremolo.prototype.unsync=function(){return this._lfoL.unsync(),this._lfoR.unsync(),t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Tremolo.prototype,"type",{get:function(){return this._lfoL.type},set:function(t){this._lfoL.type=t,this._lfoR.type=t}}),Object.defineProperty(t.Tremolo.prototype,"spread",{get:function(){return this._lfoR.phase-this._lfoL.phase},set:function(t){this._lfoL.phase=90-t/2,this._lfoR.phase=t/2+90}}),t.Tremolo.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["frequency","depth"]),this._lfoL.dispose(),this._lfoL=null,this._lfoR.dispose(),this._lfoR=null,this._amplitudeL.dispose(),this._amplitudeL=null,this._amplitudeR.dispose(),this._amplitudeR=null,this.frequency=null,this.depth=null,this},t.Tremolo}),e(function(t){return t.Vibrato=function(){var e=t.defaults(arguments,["frequency","depth"],t.Vibrato);t.Effect.call(this,e),this._delayNode=new t.Delay(0,e.maxDelay),this._lfo=new t.LFO({type:e.type,min:0,max:e.maxDelay,frequency:e.frequency,phase:-90}).start().connect(this._delayNode.delayTime),this.frequency=this._lfo.frequency,this.depth=this._lfo.amplitude,this.depth.value=e.depth,this._readOnly(["frequency","depth"]),this.effectSend.chain(this._delayNode,this.effectReturn)},t.extend(t.Vibrato,t.Effect),t.Vibrato.defaults={maxDelay:.005,frequency:5,depth:.1,type:"sine"},Object.defineProperty(t.Vibrato.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.Vibrato.prototype.dispose=function(){t.Effect.prototype.dispose.call(this),this._delayNode.dispose(),this._delayNode=null,this._lfo.dispose(),this._lfo=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null},t.Vibrato}),e(function(t){return t.Event=function(){var e=t.defaults(arguments,["callback","value"],t.Event);t.call(this),this._loop=e.loop,this.callback=e.callback,this.value=e.value,this._loopStart=this.toTicks(e.loopStart),this._loopEnd=this.toTicks(e.loopEnd),this._state=new t.TimelineState(t.State.Stopped),this._playbackRate=1,this._startOffset=0,this._probability=e.probability,this._humanize=e.humanize,this.mute=e.mute,this.playbackRate=e.playbackRate},t.extend(t.Event),t.Event.defaults={callback:t.noOp,loop:!1,loopEnd:"1m",loopStart:0,playbackRate:1,value:null,probability:1,mute:!1,humanize:!1},t.Event.prototype._rescheduleEvents=function(e){return e=t.defaultArg(e,-1),this._state.forEachFrom(e,function(e){var i;if(e.state===t.State.Started){t.isDefined(e.id)&&t.Transport.clear(e.id);var r=e.time+Math.round(this.startOffset/this._playbackRate);if(this._loop){i=1/0,t.isNumber(this._loop)&&(i=this._loop*this._getLoopDuration());var n=this._state.getAfter(r);null!==n&&(i=Math.min(i,n.time-r)),i!==1/0&&(this._state.setStateAtTime(t.State.Stopped,r+i+1),i=t.Ticks(i));var o=t.Ticks(this._getLoopDuration());e.id=t.Transport.scheduleRepeat(this._tick.bind(this),o,t.Ticks(r),i)}else e.id=t.Transport.schedule(this._tick.bind(this),t.Ticks(r))}}.bind(this)),this},Object.defineProperty(t.Event.prototype,"state",{get:function(){return this._state.getValueAtTime(t.Transport.ticks)}}),Object.defineProperty(t.Event.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t}}),Object.defineProperty(t.Event.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t}}),Object.defineProperty(t.Event.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t}}),t.Event.prototype.start=function(e){return e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Stopped&&(this._state.add({state:t.State.Started,time:e,id:void 0}),this._rescheduleEvents(e)),this},t.Event.prototype.stop=function(e){if(this.cancel(e),e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Started){this._state.setStateAtTime(t.State.Stopped,e);var i=this._state.getBefore(e),r=e;null!==i&&(r=i.time),this._rescheduleEvents(r)}return this},t.Event.prototype.cancel=function(e){return e=t.defaultArg(e,-1/0),e=this.toTicks(e),this._state.forEachFrom(e,function(e){t.Transport.clear(e.id)}),this._state.cancel(e),this},t.Event.prototype._tick=function(e){var i=t.Transport.getTicksAtTime(e);if(!this.mute&&this._state.getValueAtTime(i)===t.State.Started){if(this.probability<1&&Math.random()>this.probability)return;if(this.humanize){var r=.02;t.isBoolean(this.humanize)||(r=this.toSeconds(this.humanize)),e+=(2*Math.random()-1)*r}this.callback(e,this.value)}},t.Event.prototype._getLoopDuration=function(){return Math.round((this._loopEnd-this._loopStart)/this._playbackRate)},Object.defineProperty(t.Event.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"progress",{get:function(){if(this._loop){var e=t.Transport.ticks,i=this._state.get(e);if(null!==i&&i.state===t.State.Started){var r=this._getLoopDuration();return(e-i.time)%r/r}return 0}return 0}}),t.Event.prototype.dispose=function(){this.cancel(),this._state.dispose(),this._state=null,this.callback=null,this.value=null},t.Event}),e(function(t){return t.Loop=function(){var e=t.defaults(arguments,["callback","interval"],t.Loop);t.call(this),this._event=new t.Event({callback:this._tick.bind(this),loop:!0,loopEnd:e.interval,playbackRate:e.playbackRate,probability:e.probability}),this.callback=e.callback,this.iterations=e.iterations},t.extend(t.Loop),t.Loop.defaults={interval:"4n",callback:t.noOp,playbackRate:1,iterations:1/0,probability:!0,mute:!1},t.Loop.prototype.start=function(t){return this._event.start(t),this},t.Loop.prototype.stop=function(t){return this._event.stop(t),this},t.Loop.prototype.cancel=function(t){return this._event.cancel(t),this},t.Loop.prototype._tick=function(t){this.callback(t)},Object.defineProperty(t.Loop.prototype,"state",{get:function(){return this._event.state}}),Object.defineProperty(t.Loop.prototype,"progress",{get:function(){return this._event.progress}}),Object.defineProperty(t.Loop.prototype,"interval",{get:function(){return this._event.loopEnd},set:function(t){this._event.loopEnd=t}}),Object.defineProperty(t.Loop.prototype,"playbackRate",{get:function(){return this._event.playbackRate},set:function(t){this._event.playbackRate=t}}),Object.defineProperty(t.Loop.prototype,"humanize",{get:function(){return this._event.humanize},set:function(t){this._event.humanize=t}}),Object.defineProperty(t.Loop.prototype,"probability",{get:function(){return this._event.probability},set:function(t){this._event.probability=t}}),Object.defineProperty(t.Loop.prototype,"mute",{get:function(){return this._event.mute},set:function(t){this._event.mute=t}}),Object.defineProperty(t.Loop.prototype,"iterations",{get:function(){return!0===this._event.loop?1/0:this._event.loop},set:function(t){this._event.loop=t===1/0||t}}),t.Loop.prototype.dispose=function(){this._event.dispose(),this._event=null,this.callback=null},t.Loop}),e(function(t){return t.Part=function(){var e=t.defaults(arguments,["callback","events"],t.Part);t.Event.call(this,e),this._events=[];for(var i=0;i=this._loopStart&&e.startOffset=r&&(e.loop=!1,e.start(t.Ticks(i))):e.startOffset>=r&&e.start(t.Ticks(i))},Object.defineProperty(t.Part.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t,this._forEach(function(t){t.startOffset+=this._startOffset})}}),t.Part.prototype.stop=function(e){var i=this.toTicks(e);return this._state.cancel(i),this._state.setStateAtTime(t.State.Stopped,i),this._forEach(function(t){t.stop(e)}),this},t.Part.prototype.at=function(e,i){e=t.TransportTime(e);for(var r=t.Ticks(1).toSeconds(),n=0;n=0;r--){var n=this._events[r];n instanceof t.Part?n.remove(e,i):n.startOffset===e&&(t.isUndef(i)||t.isDefined(i)&&n.value===i)&&(this._events.splice(r,1),n.dispose())}return this},t.Part.prototype.removeAll=function(){return this._forEach(function(t){t.dispose()}),this._events=[],this},t.Part.prototype.cancel=function(t){return this._forEach(function(e){e.cancel(t)}),this._state.cancel(this.toTicks(t)),this},t.Part.prototype._forEach=function(e,i){if(this._events){i=t.defaultArg(i,this);for(var r=this._events.length-1;r>=0;r--){var n=this._events[r];n instanceof t.Part?n._forEach(e,i):e.call(i,n)}}return this},t.Part.prototype._setAll=function(t,e){this._forEach(function(i){i[t]=e})},t.Part.prototype._tick=function(t,e){this.mute||this.callback(t,e)},t.Part.prototype._testLoopBoundries=function(e){e.startOffset=this._loopEnd?e.cancel(0):e.state===t.State.Stopped&&this._restartEvent(e)},Object.defineProperty(t.Part.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t,this._setAll("probability",t)}}),Object.defineProperty(t.Part.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t,this._setAll("humanize",t)}}),Object.defineProperty(t.Part.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._forEach(function(e){e._loopStart=this._loopStart,e._loopEnd=this._loopEnd,e.loop=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._forEach(function(e){e.loopEnd=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._forEach(function(t){t.loopStart=this.loopStart,this._testLoopBoundries(t)})}}),Object.defineProperty(t.Part.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._setAll("playbackRate",t)}}),Object.defineProperty(t.Part.prototype,"length",{get:function(){return this._events.length}}),t.Part.prototype.dispose=function(){return this.removeAll(),this._state.dispose(),this._state=null,this.callback=null,this._events=null,this},t.Part}),e(function(t){return t.Pattern=function(){var e=t.defaults(arguments,["callback","values","pattern"],t.Pattern);t.Loop.call(this,e),this._pattern=new t.CtrlPattern({values:e.values,type:e.pattern,index:e.index})},t.extend(t.Pattern,t.Loop),t.Pattern.defaults={pattern:t.CtrlPattern.Type.Up,callback:t.noOp,values:[]},t.Pattern.prototype._tick=function(t){this.callback(t,this._pattern.value),this._pattern.next()},Object.defineProperty(t.Pattern.prototype,"index",{get:function(){return this._pattern.index},set:function(t){this._pattern.index=t}}),Object.defineProperty(t.Pattern.prototype,"values",{get:function(){return this._pattern.values},set:function(t){this._pattern.values=t}}),Object.defineProperty(t.Pattern.prototype,"value",{get:function(){return this._pattern.value}}),Object.defineProperty(t.Pattern.prototype,"pattern",{get:function(){return this._pattern.type},set:function(t){this._pattern.type=t}}),t.Pattern.prototype.dispose=function(){t.Loop.prototype.dispose.call(this),this._pattern.dispose(),this._pattern=null},t.Pattern}),e(function(t){return t.Sequence=function(){var e=t.defaults(arguments,["callback","events","subdivision"],t.Sequence),i=e.events;if(delete e.events,t.Part.call(this,e),this._subdivision=this.toTicks(e.subdivision),t.isUndef(e.loopEnd)&&t.isDefined(i)&&(this._loopEnd=i.length*this._subdivision),this._loop=!0,t.isDefined(i))for(var r=0;r1){var e=-t/2,i=t/(this._oscillators.length-1);this._forEach(function(t,r){t.detune.value=e+i*r})}}}),Object.defineProperty(t.FatOscillator.prototype,"count",{get:function(){return this._oscillators.length},set:function(e){if(e=Math.max(e,1),this._oscillators.length!==e){this._forEach(function(t){t.dispose()}),this._oscillators=[];for(var i=0;i0&&this.getLevelAtTime(e)>.05){var i=this.toSeconds(this.portamento);this.frequency.exponentialRampTo(t,i,e)}else this.frequency.setValueAtTime(t,e);return this},t.Monophonic}),e(function(t){return t.Synth=function(e){e=t.defaultArg(e,t.Synth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","frequency","detune","envelope"])},t.extend(t.Synth,t.Monophonic),t.Synth.defaults={oscillator:{type:"triangle"},envelope:{attack:.005,decay:.1,sustain:.3,release:1}},t.Synth.prototype._triggerEnvelopeAttack=function(t,e){return this.envelope.triggerAttack(t,e),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.Synth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.Synth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.frequency=null,this.detune=null,this},t.Synth}),e(function(t){return t.AMSynth=function(e){e=t.defaultArg(e,t.AMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth,this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth,this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this._modulationScale=new t.AudioToGain,this._modulationNode=new t.Gain,this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.chain(this._modulationScale,this._modulationNode.gain),this._carrier.chain(this._modulationNode,this.output),this._readOnly(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.AMSynth,t.Monophonic),t.AMSynth.defaults={harmonicity:3,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.AMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.AMSynth.prototype._triggerEnvelopeRelease=function(t){return this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.AMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationScale.dispose(),this._modulationScale=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.AMSynth}),e(function(t){return t.MonoSynth=function(e){e=t.defaultArg(e,t.MonoSynth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.filter=new t.Filter(e.filter),this.filterEnvelope=new t.FrequencyEnvelope(e.filterEnvelope),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.filter,this.envelope,this.output),this.filterEnvelope.connect(this.filter.frequency),this._readOnly(["oscillator","frequency","detune","filter","filterEnvelope","envelope"])},t.extend(t.MonoSynth,t.Monophonic),t.MonoSynth.defaults={frequency:"C4",detune:0,oscillator:{type:"square"},filter:{Q:6,type:"lowpass",rolloff:-24},envelope:{attack:.005,decay:.1,sustain:.9,release:1},filterEnvelope:{attack:.06,decay:.2,sustain:.5,release:2,baseFrequency:200,octaves:7,exponent:2}},t.MonoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.envelope.triggerAttack(t,e),this.filterEnvelope.triggerAttack(t),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.MonoSynth.prototype._triggerEnvelopeRelease=function(t){return this.envelope.triggerRelease(t),this.filterEnvelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MonoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","filter","filterEnvelope","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.filterEnvelope.dispose(),this.filterEnvelope=null,this.filter.dispose(),this.filter=null,this.frequency=null,this.detune=null,this},t.MonoSynth}),e(function(t){return t.DuoSynth=function(e){e=t.defaultArg(e,t.DuoSynth.defaults),t.Monophonic.call(this,e),this.voice0=new t.MonoSynth(e.voice0),this.voice0.volume.value=-10,this.voice1=new t.MonoSynth(e.voice1),this.voice1.volume.value=-10,this._vibrato=new t.LFO(e.vibratoRate,-50,50),this._vibrato.start(),this.vibratoRate=this._vibrato.frequency,this._vibratoGain=new t.Gain(e.vibratoAmount,t.Type.Positive),this.vibratoAmount=this._vibratoGain.gain,this.frequency=new t.Signal(440,t.Type.Frequency),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.frequency.connect(this.voice0.frequency),this.frequency.chain(this.harmonicity,this.voice1.frequency),this._vibrato.connect(this._vibratoGain),this._vibratoGain.fan(this.voice0.detune,this.voice1.detune),this.voice0.connect(this.output),this.voice1.connect(this.output),this._readOnly(["voice0","voice1","frequency","vibratoAmount","vibratoRate"])},t.extend(t.DuoSynth,t.Monophonic),t.DuoSynth.defaults={vibratoAmount:.5,vibratoRate:5,harmonicity:1.5,voice0:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}},voice1:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}}},t.DuoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.voice0._triggerEnvelopeAttack(t,e),this.voice1._triggerEnvelopeAttack(t,e),this},t.DuoSynth.prototype._triggerEnvelopeRelease=function(t){return this.voice0._triggerEnvelopeRelease(t),this.voice1._triggerEnvelopeRelease(t),this},t.DuoSynth.prototype.getLevelAtTime=function(t){return(this.voice0.getLevelAtTime(t)+this.voice1.getLevelAtTime(t))/2},t.DuoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["voice0","voice1","frequency","vibratoAmount","vibratoRate"]),this.voice0.dispose(),this.voice0=null,this.voice1.dispose(),this.voice1=null,this.frequency.dispose(),this.frequency=null,this._vibratoGain.dispose(),this._vibratoGain=null,this._vibrato=null,this.harmonicity.dispose(),this.harmonicity=null,this.vibratoAmount.dispose(),this.vibratoAmount=null,this.vibratoRate=null,this},t.DuoSynth}),e(function(t){return t.FMSynth=function(e){e=t.defaultArg(e,t.FMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth(e.carrier),this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth(e.modulator),this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.modulationIndex=new t.Multiply(e.modulationIndex),this.modulationIndex.units=t.Type.Positive,this._modulationNode=new t.Gain(0),this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.frequency.chain(this.modulationIndex,this._modulationNode),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.connect(this._modulationNode.gain),this._modulationNode.connect(this._carrier.frequency),this._carrier.connect(this.output),this._readOnly(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.FMSynth,t.Monophonic),t.FMSynth.defaults={harmonicity:3,modulationIndex:10,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.FMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.FMSynth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.FMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.modulationIndex.dispose(),this.modulationIndex=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.FMSynth}),e(function(t){return t.MembraneSynth=function(e){e=t.defaultArg(e,t.MembraneSynth.defaults),t.Instrument.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.octaves=e.octaves,this.pitchDecay=e.pitchDecay,this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","envelope"])},t.extend(t.MembraneSynth,t.Instrument),t.MembraneSynth.defaults={pitchDecay:.05,octaves:10,oscillator:{type:"sine"},envelope:{attack:.001,decay:.4,sustain:.01,release:1.4,attackCurve:"exponential"}},t.MembraneSynth.prototype.triggerAttack=function(t,e,i){e=this.toSeconds(e);var r=(t=this.toFrequency(t))*this.octaves;return this.oscillator.frequency.setValueAtTime(r,e),this.oscillator.frequency.exponentialRampToValueAtTime(t,e+this.toSeconds(this.pitchDecay)),this.envelope.triggerAttack(e,i),this.oscillator.start(e),this},t.MembraneSynth.prototype.triggerRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MembraneSynth.prototype.dispose=function(){return t.Instrument.prototype.dispose.call(this),this._writable(["oscillator","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this},t.MembraneSynth}),e(function(t){var e=[1,1.483,1.932,2.546,2.63,3.897];return t.MetalSynth=function(i){i=t.defaultArg(i,t.MetalSynth.defaults),t.Instrument.call(this,i),this.frequency=new t.Signal(i.frequency,t.Type.Frequency),this._oscillators=[],this._freqMultipliers=[],this._amplitue=new t.Gain(0).connect(this.output),this._highpass=new t.Filter({type:"highpass",Q:-3.0102999566398125}).connect(this._amplitue),this._octaves=i.octaves,this._filterFreqScaler=new t.Scale(i.resonance,7e3),this.envelope=new t.Envelope({attack:i.envelope.attack,attackCurve:"linear",decay:i.envelope.decay,sustain:0,release:i.envelope.release}).chain(this._filterFreqScaler,this._highpass.frequency),this.envelope.connect(this._amplitue.gain);for(var r=0;re&&(o.voice.triggerRelease(e),o.release=e)}return this},t.PolySynth.prototype.sync=function(){return this._syncMethod("triggerAttack",1),this._syncMethod("triggerRelease",1),this},t.PolySynth.prototype.set=function(t,e,i){for(var r=0;rt&&(i.release=t,i.voice.triggerRelease(t))}return this},t.PolySynth.prototype.dispose=function(){t.Instrument.prototype.dispose.call(this);for(var e=0;e0)r=i[0];else if(!r&&t.isDefined(e))throw new Error("Tone.UserMedia: no matching device: "+e);this._device=r;var n={audio:{echoCancellation:!1,sampleRate:this.context.sampleRate}};return r&&(n.audio.deviceId=r.deviceId),navigator.mediaDevices.getUserMedia(n).then(function(t){return this._stream||(this._stream=t,this._mediaStream=this.context.createMediaStreamSource(t),this._mediaStream.connect(this.output)),this}.bind(this))}.bind(this))},t.UserMedia.prototype.close=function(){return this._stream&&(this._stream.getAudioTracks().forEach(function(t){t.stop()}),this._stream=null,this._mediaStream.disconnect(),this._mediaStream=null),this._device=null,this},t.UserMedia.enumerateDevices=function(){return navigator.mediaDevices.enumerateDevices().then(function(t){return t.filter(function(t){return"audioinput"===t.kind})})},Object.defineProperty(t.UserMedia.prototype,"state",{get:function(){return this._stream&&this._stream.active?t.State.Started:t.State.Stopped}}),Object.defineProperty(t.UserMedia.prototype,"deviceId",{get:function(){if(this._device)return this._device.deviceId}}),Object.defineProperty(t.UserMedia.prototype,"groupId",{get:function(){if(this._device)return this._device.groupId}}),Object.defineProperty(t.UserMedia.prototype,"label",{get:function(){if(this._device)return this._device.label}}),Object.defineProperty(t.UserMedia.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.UserMedia.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.close(),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null,this},Object.defineProperty(t.UserMedia,"supported",{get:function(){return t.isDefined(navigator.mediaDevices)&&t.isFunction(navigator.mediaDevices.getUserMedia)}}),t.UserMedia}),e(function(t){return t.Midi=function(e,i){if(!(this instanceof t.Midi))return new t.Midi(e,i);t.Frequency.call(this,e,i)},t.extend(t.Midi,t.Frequency),t.Midi.prototype._defaultUnits="midi",t.Midi.prototype._frequencyToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._frequencyToUnits.call(this,e))},t.Midi.prototype._ticksToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._ticksToUnits.call(this,e))},t.Midi.prototype._beatsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._beatsToUnits.call(this,e))},t.Midi.prototype._secondsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._secondsToUnits.call(this,e))},t.Midi.prototype.toMidi=function(){return this.valueOf()},t.Midi.prototype.toFrequency=function(){return t.Frequency.mtof(this.toMidi())},t.Midi.prototype.transpose=function(t){return new this.constructor(this.toMidi()+t)},t.Midi}),t}()}.call(e,i,e,t))||(t.exports=r)},function(t,e,i){(function(e){var i;t.exports=function t(e,r,n){function o(a,h){if(!r[a]){if(!e[a]){var l="function"==typeof i&&i;if(!h&&l)return i(a,!0);if(s)return s(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var c=r[a]={exports:{}};e[a][0].call(c.exports,function(t){var i=e[a][1][t];return o(i||t)},c,c.exports,t,e,r,n)}return r[a].exports}for(var s="function"==typeof i&&i,a=0;a0)throw new Error("Invalid string. Length must be a multiple of 4");var u=t.length;h="="===t.charAt(u-2)?2:"="===t.charAt(u-1)?1:0,l=new i(3*t.length/4-h),s=h>0?t.length-4:t.length;var c=0;for(n=0,o=0;n>16),r((65280&a)>>8),r(255&a);return 2===h?r(255&(a=e(t.charAt(n))<<2|e(t.charAt(n+1))>>4)):1===h&&(r((a=e(t.charAt(n))<<10|e(t.charAt(n+1))<<4|e(t.charAt(n+2))>>2)>>8&255),r(255&a)),l},t.fromByteArray=function(t){function e(t){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t)}function i(t){return e(t>>18&63)+e(t>>12&63)+e(t>>6&63)+e(63&t)}var r,n,o,s=t.length%3,a="";for(r=0,o=t.length-s;r>2),a+=e(n<<4&63),a+="==";break;case 2:n=(t[t.length-2]<<8)+t[t.length-1],a+=e(n>>10),a+=e(n>>4&63),a+=e(n<<2&63),a+="="}return a}}(void 0===i?this.base64js={}:i)},{}],2:[function(t,e,i){},{}],3:[function(t,i,r){(function(e){"use strict";function i(){return n.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function n(t){return this instanceof n?(n.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof t?function(t,e){if(t=s(t,e<0?0:0|a(e)),!n.TYPED_ARRAY_SUPPORT)for(var i=0;i1?arguments[1]:"utf8"):function(t,e){if(n.isBuffer(e))return function(t,e){var i=0|a(e.length);return t=s(t,i),e.copy(t,0,0,i),t}(t,e);if(F(e))return function(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r1?new n(t,arguments[1]):new n(t)}function o(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r>>1&&(t.parent=I),t}function a(t){if(t>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|t}function h(t,e){"string"!=typeof t&&(t=""+t);var i=t.length;if(0===i)return 0;for(var r=!1;;)switch(e){case"ascii":case"binary":case"raw":case"raws":return i;case"utf8":case"utf-8":return k(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return C(t).length;default:if(r)return k(t).length;e=(""+e).toLowerCase(),r=!0}}function l(t,e,i,r){i=Number(i)||0;var n=t.length-i;r?(r=Number(r))>n&&(r=n):r=n;var o=e.length;if(o%2!=0)throw new Error("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,n=i%256,o.push(n),o.push(r);return o}(e,t.length-i),t,i,r)}function m(t,e,i){return 0===e&&i===t.length?O.fromByteArray(t):O.fromByteArray(t.slice(e,i))}function y(t,e,i){i=Math.min(t.length,i);for(var r=[],n=e;n239?4:l>223?3:l>191?2:1;if(n+c<=i)switch(c){case 1:l<128&&(u=l);break;case 2:128==(192&(o=t[n+1]))&&(h=(31&l)<<6|63&o)>127&&(u=h);break;case 3:o=t[n+1],s=t[n+2],128==(192&o)&&128==(192&s)&&(h=(15&l)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(u=h);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&l)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(u=h)}null===u?(u=65533,c=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),n+=c}return function(t){var e=t.length;if(e<=D)return String.fromCharCode.apply(String,t);for(var i="",r=0;rr)&&(i=r);for(var n="",o=e;oi)throw new RangeError("Trying to access beyond buffer length")}function x(t,e,i,r,o,s){if(!n.isBuffer(t))throw new TypeError("buffer must be a Buffer instance");if(e>o||et.length)throw new RangeError("index out of range")}function w(t,e,i,r){e<0&&(e=65535+e+1);for(var n=0,o=Math.min(t.length-i,2);n>>8*(r?n:1-n)}function T(t,e,i,r){e<0&&(e=4294967295+e+1);for(var n=0,o=Math.min(t.length-i,4);n>>8*(r?n:3-n)&255}function P(t,e,i,r,n,o){if(e>n||et.length)throw new RangeError("index out of range");if(i<0)throw new RangeError("index out of range")}function A(t,e,i,r,n){return n||P(t,e,i,4,3.4028234663852886e38,-3.4028234663852886e38),L.write(t,e,i,r,23,4),i+4}function M(t,e,i,r,n){return n||P(t,e,i,8,1.7976931348623157e308,-1.7976931348623157e308),L.write(t,e,i,r,52,8),i+8}function E(t){return t<16?"0"+t.toString(16):t.toString(16)}function k(t,e){e=e||1/0;for(var i,r=t.length,n=null,o=[],s=0;s55295&&i<57344){if(!n){if(i>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}n=i;continue}if(i<56320){(e-=3)>-1&&o.push(239,191,189),n=i;continue}i=65536+(n-55296<<10|i-56320)}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,i<128){if((e-=1)<0)break;o.push(i)}else if(i<2048){if((e-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((e-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function C(t){return O.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(B,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function R(t,e,i,r){for(var n=0;n=e.length||n>=t.length);n++)e[n+i]=t[n];return n}var O=t("base64-js"),L=t("ieee754"),F=t("isarray");r.Buffer=n,r.SlowBuffer=function t(e,i){if(!(this instanceof t))return new t(e,i);var r=new n(e,i);return delete r.parent,r},r.INSPECT_MAX_BYTES=50,n.poolSize=8192;var I={};n.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){function t(){}try{var e=new Uint8Array(1);return e.foo=function(){return 42},e.constructor=t,42===e.foo()&&e.constructor===t&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}(),n.TYPED_ARRAY_SUPPORT?(n.prototype.__proto__=Uint8Array.prototype,n.__proto__=Uint8Array):(n.prototype.length=void 0,n.prototype.parent=void 0),n.isBuffer=function(t){return!(null==t||!t._isBuffer)},n.compare=function(t,e){if(!n.isBuffer(t)||!n.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var i=t.length,r=e.length,o=0,s=Math.min(i,r);othis.length&&(i=this.length),i<=e)return"";for(;;)switch(t){case"hex":return _(this,e,i);case"utf8":case"utf-8":return y(this,e,i);case"ascii":return v(this,e,i);case"binary":return g(this,e,i);case"base64":return m(this,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return b(this,e,i);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}.apply(this,arguments)},n.prototype.equals=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===n.compare(this,t)},n.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},n.prototype.compare=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?0:n.compare(this,t)},n.prototype.indexOf=function(t,e){function i(t,e,i){for(var r=-1,n=0;i+n2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e>>=0,0===this.length)return-1;if(e>=this.length)return-1;if(e<0&&(e=Math.max(this.length+e,0)),"string"==typeof t)return 0===t.length?-1:String.prototype.indexOf.call(this,t,e);if(n.isBuffer(t))return i(this,t,e);if("number"==typeof t)return n.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,t,e):i(this,[t],e);throw new TypeError("val must be string, number or Buffer")},n.prototype.get=function(t){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(t)},n.prototype.set=function(t,e){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(t,e)},n.prototype.write=function(t,e,i,r){if(void 0===e)r="utf8",i=this.length,e=0;else if(void 0===i&&"string"==typeof e)r=e,i=this.length,e=0;else if(isFinite(e))e|=0,isFinite(i)?(i|=0,void 0===r&&(r="utf8")):(r=i,i=void 0);else{var n=r;r=e,e=0|i,i=n}var o=this.length-e;if((void 0===i||i>o)&&(i=o),t.length>0&&(i<0||e<0)||e>this.length)throw new RangeError("attempt to write outside buffer bounds");r||(r="utf8");for(var s=!1;;)switch(r){case"hex":return l(this,t,e,i);case"utf8":case"utf-8":return u(this,t,e,i);case"ascii":return c(this,t,e,i);case"binary":return p(this,t,e,i);case"base64":return d(this,t,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return f(this,t,e,i);default:if(s)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),s=!0}},n.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var D=4096;n.prototype.slice=function(t,e){var i,r=this.length;if(t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(n*=256);)r+=this[t+--e]*n;return r},n.prototype.readUInt8=function(t,e){return e||S(t,1,this.length),this[t]},n.prototype.readUInt16LE=function(t,e){return e||S(t,2,this.length),this[t]|this[t+1]<<8},n.prototype.readUInt16BE=function(t,e){return e||S(t,2,this.length),this[t]<<8|this[t+1]},n.prototype.readUInt32LE=function(t,e){return e||S(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},n.prototype.readUInt32BE=function(t,e){return e||S(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},n.prototype.readIntLE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=this[t],n=1,o=0;++o=(n*=128)&&(r-=Math.pow(2,8*e)),r},n.prototype.readIntBE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=e,n=1,o=this[t+--r];r>0&&(n*=256);)o+=this[t+--r]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},n.prototype.readInt8=function(t,e){return e||S(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},n.prototype.readInt16LE=function(t,e){e||S(t,2,this.length);var i=this[t]|this[t+1]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt16BE=function(t,e){e||S(t,2,this.length);var i=this[t+1]|this[t]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt32LE=function(t,e){return e||S(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},n.prototype.readInt32BE=function(t,e){return e||S(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},n.prototype.readFloatLE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!0,23,4)},n.prototype.readFloatBE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!1,23,4)},n.prototype.readDoubleLE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!0,52,8)},n.prototype.readDoubleBE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!1,52,8)},n.prototype.writeUIntLE=function(t,e,i,r){t=+t,e|=0,i|=0,r||x(this,t,e,i,Math.pow(2,8*i),0);var n=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+n]=t/o&255;return e+i},n.prototype.writeUInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,255,0),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},n.prototype.writeUInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeUInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeUInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):T(this,t,e,!0),e+4},n.prototype.writeUInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeIntLE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=0,s=1,a=t<0?1:0;for(this[e]=255&t;++o>0)-a&255;return e+i},n.prototype.writeIntBE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=i-1,s=1,a=t<0?1:0;for(this[e+o]=255&t;--o>=0&&(s*=256);)this[e+o]=(t/s>>0)-a&255;return e+i},n.prototype.writeInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,127,-128),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},n.prototype.writeInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):T(this,t,e,!0),e+4},n.prototype.writeInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeFloatLE=function(t,e,i){return A(this,t,e,!0,i)},n.prototype.writeFloatBE=function(t,e,i){return A(this,t,e,!1,i)},n.prototype.writeDoubleLE=function(t,e,i){return M(this,t,e,!0,i)},n.prototype.writeDoubleBE=function(t,e,i){return M(this,t,e,!1,i)},n.prototype.copy=function(t,e,i,r){if(i||(i=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;o--)t[o+e]=this[o+i];else if(s<1e3||!n.TYPED_ARRAY_SUPPORT)for(o=0;o=this.length)throw new RangeError("start out of bounds");if(i<0||i>this.length)throw new RangeError("end out of bounds");var r;if("number"==typeof t)for(r=e;r>1,u=-7,c=i?n-1:0,p=i?-1:1,d=t[e+c];for(c+=p,o=d&(1<<-u)-1,d>>=-u,u+=a;u>0;o=256*o+t[e+c],c+=p,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=r;u>0;s=256*s+t[e+c],c+=p,u-=8);if(0===o)o=1-l;else{if(o===h)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,r),o-=l}return(d?-1:1)*s*Math.pow(2,o-r)},i.write=function(t,e,i,r,n,o){var s,a,h,l=8*o-n-1,u=(1<>1,p=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,f=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+c>=1?p/h:p*Math.pow(2,1-c))*h>=2&&(s++,h/=2),s+c>=u?(a=0,s=u):s+c>=1?(a=(e*h-1)*Math.pow(2,n),s+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,n),s=0));n>=8;t[i+d]=255&a,d+=f,a/=256,n-=8);for(s=s<0;t[i+d]=255&s,d+=f,s/=256,l-=8);t[i+d-f]|=128*m}},{}],8:[function(t,e,i){var r={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},{}],9:[function(t,e,i){"use strict";function r(t,e){return t.b===e.b&&t.a===e.a}function n(t,e){return t.bt?0:t)<=(i=0>i?0:i)?0===i?(e+r)/2:e+t/(t+i)*(r-e):r+i/(t+i)*(e-r)}function d(t){var e=g(t.b);return b(e,t.c),b(e.b,t.c),S(e,t.a),e}function f(t,e){var i=!1,r=!1;t!==e&&(e.a!==t.a&&(r=!0,w(e.a,t.a)),e.d!==t.d&&(i=!0,T(e.d,t.d)),_(e,t),r||(b(e,t.a),t.a.c=t),i||(S(e,t.d),t.d.a=t))}function m(t){var e=t.b,i=!1;t.d!==t.b.d&&(i=!0,T(t.d,t.b.d)),t.c===t?w(t.a,null):(t.b.d.a=J(t),t.a.c=t.c,_(t,J(t)),i||S(t,t.d)),e.c===e?(w(e.a,null),T(e.d,null)):(t.d.a=J(e),e.a.c=e.c,_(e,J(e))),x(t)}function y(t){var e=g(t),i=e.b;return _(e,t.e),e.a=t.b.a,b(i,e.a),e.d=i.d=t.d,e=e.b,_(t.b,J(t.b)),_(t.b,e),t.b.a=e.a,e.b.a.c=e.b,e.b.d=t.b.d,e.f=t.f,e.b.f=t.b.f,e}function v(t,e){var i=!1,r=g(t),n=r.b;return e.d!==t.d&&(i=!0,T(e.d,t.d)),_(r,t.e),_(n,e),r.a=t.b.a,n.a=e.a,r.d=n.d=t.d,t.d.a=n,i||S(r,t.d),r}function g(t){var e=new Z,i=new Z,r=t.b.h;return i.h=r,r.b.h=e,e.h=t,t.b.h=i,e.b=i,e.c=e,e.e=i,i.b=e,i.c=i,i.e=e}function _(t,e){var i=t.c,r=e.c;i.b.e=e,r.b.e=t,t.c=r,e.c=i}function b(t,e){var i=e.f,r=new K(e,i);i.e=r,e.f=r,i=r.c=t;do{i.a=r,i=i.c}while(i!==t)}function S(t,e){var i=e.d,r=new Q(e,i);i.b=r,e.d=r,r.a=t,r.c=e.c,i=t;do{i.d=r,i=i.e}while(i!==t)}function x(t){var e=t.h;t=t.b.h,e.b.h=t,t.b.h=e}function w(t,e){var i=t.c,r=i;do{r.a=e,r=r.c}while(r!==i);i=t.f,(r=t.e).f=i,i.e=r}function T(t,e){var i=t.a,r=i;do{r.d=e,r=r.e}while(r!==i);i=t.d,(r=t.b).d=i,i.b=r}function P(t){var e=0;return Math.abs(t[1])>Math.abs(t[0])&&(e=1),Math.abs(t[2])>Math.abs(t[e])&&(e=2),e}function A(t,e){t.f+=e.f,t.b.f+=e.b.f}function M(t,e,i){return t=t.a,e=e.a,i=i.a,e.b.a===t?i.b.a===t?n(e.a,i.a)?0>=s(i.b.a,e.a,i.a):0<=s(e.b.a,i.a,e.a):0>=s(i.b.a,t,i.a):i.b.a===t?0<=s(e.b.a,t,e.a):(e=o(e.b.a,t,e.a),t=o(i.b.a,t,i.a),e>=t)}function E(t){t.a.i=null;var e=t.e;e.a.c=e.c,e.c.a=e.a,t.e=null}function k(t,e){m(t.a),t.c=!1,t.a=e,e.i=t}function C(t){var e=t.a.a;do{t=ut(t)}while(t.a.a===e);return t.c&&(e=v(lt(t).a.b,t.a.e),k(t,e),t=ut(t)),t}function R(t,e,i){var r=new ht;return r.a=i,r.e=z(t.f,e.e,r),i.i=r}function O(t,e){switch(t.s){case 100130:return 0!=(1&e);case 100131:return 0!==e;case 100132:return 0e;case 100134:return 2<=e||-2>=e}return!1}function L(t){var e=t.a,i=e.d;i.c=t.d,i.a=e,E(t)}function F(t,e,i){for(t=e,e=e.a;t!==i;){t.c=!1;var r=lt(t),n=r.a;if(n.a!==e.a){if(!r.c){L(t);break}n=v(e.c.b,n.b),k(r,n)}e.c!==n&&(f(J(n),n),f(e,n)),L(t),e=r.a,t=r}return e}function I(t,e,i,r,n,o){var s=!0;do{R(t,e,i.b),i=i.c}while(i!==r);for(null===n&&(n=lt(e).a.b.c);r=lt(e),(i=r.a.b).a===n.a;)i.c!==n&&(f(J(i),i),f(J(n),i)),r.f=e.f-i.f,r.d=O(t,r.f),e.b=!0,!s&&N(t,e)&&(A(i,n),E(e),m(n)),s=!1,e=r,n=i;e.b=!0,o&&q(t,e)}function D(t,e,i,r,n){var o=[e.g[0],e.g[1],e.g[2]];e.d=null,e.d=t.o&&t.o(o,i,r,t.c)||null,null===e.d&&(n?t.n||(Y(t,100156),t.n=!0):e.d=i[0])}function U(t,e,i){var r=[null,null,null,null];r[0]=e.a.d,r[1]=i.a.d,D(t,e.a,r,[.5,.5,0,0],!1),f(e,i)}function B(t,e,i,r,n){var o=Math.abs(e.b-t.b)+Math.abs(e.a-t.a),s=Math.abs(i.b-t.b)+Math.abs(i.a-t.a),a=n+1;r[n]=.5*s/(o+s),r[a]=.5*o/(o+s),t.g[0]+=r[n]*e.g[0]+r[a]*i.g[0],t.g[1]+=r[n]*e.g[1]+r[a]*i.g[1],t.g[2]+=r[n]*e.g[2]+r[a]*i.g[2]}function N(t,e){var i=lt(e),o=e.a,a=i.a;if(n(o.a,a.a)){if(0=p?st(i,p):n(u[l[p>>1]],u[l[p]])?st(i,p):at(i,p)),u[h]=null,c[h]=i.b,i.b=h}else for(i.c[-(h+1)]=null;0s(o.b.a,a.a,o.a))return!1;ut(e).b=e.b=!0,y(o.b),f(J(a),o)}return!0}function G(t,e){var i=lt(e),u=e.a,c=i.a,d=u.a,m=c.a,v=u.b.a,g=c.b.a,_=new K;if(s(v,t.a,d),s(g,t.a,m),d===m||Math.min(d.a,v.a)>Math.max(m.a,g.a))return!1;if(n(d,m)){if(0s(v,m,d))return!1;var b,S,x=v,w=d,T=g,P=m;if(n(x,w)||(b=x,x=w,w=b),n(T,P)||(b=T,T=P,P=b),n(x,T)||(b=x,x=T,T=b,b=w,w=P,P=b),n(T,w)?n(w,P)?(b=o(x,T,w),S=o(T,w,P),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,w.b)):(b=s(x,T,w),S=-s(x,P,w),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,P.b)):_.b=(T.b+w.b)/2,a(x,w)||(b=x,x=w,w=b),a(T,P)||(b=T,T=P,P=b),a(x,T)||(b=x,x=T,T=b,b=w,w=P,P=b),a(T,w)?a(w,P)?(b=h(x,T,w),S=h(T,w,P),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,w.a)):(b=l(x,T,w),S=-l(x,P,w),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,P.a)):_.a=(T.a+w.a)/2,n(_,t.a)&&(_.b=t.a.b,_.a=t.a.a),n(x=n(d,m)?d:m,_)&&(_.b=x.b,_.a=x.a),r(_,d)||r(_,m))return N(t,e),!1;if(!r(v,t.a)&&0<=s(v,t.a,_)||!r(g,t.a)&&0>=s(g,t.a,_)){if(g===t.a)return y(u.b),f(c.b,u),e=C(e),u=lt(e).a,F(t,lt(e),i),I(t,e,J(u),u,u,!0),!0;if(v===t.a){y(c.b),f(u.e,J(c)),d=i=e,m=d.a.b.a;do{d=ut(d)}while(d.a.b.a===m);return d=lt(e=d).a.b.c,i.a=J(c),c=F(t,i,null),I(t,e,c.c,u.b.c,d,!0),!0}return 0<=s(v,t.a,_)&&(ut(e).b=e.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=s(g,t.a,_)&&(e.b=i.b=!0,y(c.b),c.a.b=t.a.b,c.a.a=t.a.a),!1}return y(u.b),y(c.b),f(J(c),u),u.a.b=_.b,u.a.a=_.a,u.a.h=et(t.e,u.a),u=u.a,c=[0,0,0,0],_=[d.d,v.d,m.d,g.d],u.g[0]=u.g[1]=u.g[2]=0,B(u,d,v,c,0),B(u,m,g,c,2),D(t,u,_,c,!0),ut(e).b=e.b=i.b=!0,!1}function q(t,e){for(var i=lt(e);;){for(;i.b;)e=i,i=lt(i);if(!e.b&&(i=e,null===(e=ut(e))||!e.b))break;e.b=!1;var r,o=e.a,a=i.a;if(r=o.b.a!==a.b.a)t:{var h=lt(r=e),l=r.a,u=h.a,c=void 0;if(n(l.b.a,u.b.a)){if(0>s(l.b.a,u.b.a,l.a)){r=!1;break t}ut(r).b=r.b=!0,c=y(l),f(u.b,c),c.d.c=r.d}else{if(0r.f&&(r.f*=2,r.c=rt(r.c,r.f+1)),0===r.b?i=n:(i=r.b,r.b=r.c[r.b]),r.e[i]=e,r.c[i]=n,r.d[n]=i,r.h&&at(r,n),i}return r=t.a++,t.c[r]=e,-(r+1)}function it(t){if(0===t.a)return ot(t.b);var e=t.c[t.d[t.a-1]];if(0!==t.b.a&&n(nt(t.b),e))return ot(t.b);do{--t.a}while(0t.a||n(r[a],r[l])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function at(t,e){for(var i=t.d,r=t.e,o=t.c,s=e,a=i[s];;){var h=s>>1,l=i[h];if(0===h||n(r[l],r[a])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function ht(){this.e=this.a=null,this.f=0,this.c=this.b=this.h=this.d=!1}function lt(t){return t.e.c.b}function ut(t){return t.e.a.b}var ct,pt=4e150,dt=0;(ct=H.prototype).x=function(){X(this,dt)},ct.B=function(t,e){switch(t){case 100142:return;case 100140:switch(e){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=e)}break;case 100141:return void(this.m=!!e);default:return void Y(this,100900)}Y(this,100901)},ct.y=function(t){switch(t){case 100142:return 0;case 100140:return this.s;case 100141:return this.m;default:Y(this,100900)}return!1},ct.A=function(t,e,i){this.j[0]=t,this.j[1]=e,this.j[2]=i},ct.z=function(t,e){var i=e||null;switch(t){case 100100:case 100106:this.h=i;break;case 100104:case 100110:this.l=i;break;case 100101:case 100107:this.k=i;break;case 100102:case 100108:this.i=i;break;case 100103:case 100109:this.p=i;break;case 100105:case 100111:this.o=i;break;case 100112:this.r=i;break;default:Y(this,100900)}},ct.C=function(t,e){var i=!1,r=[0,0,0];X(this,2);for(var n=0;3>n;++n){var o=t[n];-1e150>o&&(o=-1e150,i=!0),1e150p;++p){var d=t.g[p];de[p]&&(e[p]=d,i[p]=t)}if(t=0,e[1]-h[1]>e[0]-h[0]&&(t=1),e[2]-h[2]>e[t]-h[t]&&(t=2),h[t]>=e[t])a[0]=0,a[1]=0,a[2]=1;else{for(e=0,h=l[t],i=i[t],l=[0,0,0],h=[h.g[0]-i.g[0],h.g[1]-i.g[1],h.g[2]-i.g[2]],p=[0,0,0],t=o.e;t!==o;t=t.e)p[0]=t.g[0]-i.g[0],p[1]=t.g[1]-i.g[1],p[2]=t.g[2]-i.g[2],l[0]=h[1]*p[2]-h[2]*p[1],l[1]=h[2]*p[0]-h[0]*p[2],l[2]=h[0]*p[1]-h[1]*p[0],(d=l[0]*l[0]+l[1]*l[1]+l[2]*l[2])>e&&(e=d,a[0]=l[0],a[1]=l[1],a[2]=l[2]);0>=e&&(a[0]=a[1]=a[2]=0,a[P(h)]=1)}o=!0}for(l=P(a),t=this.b.c,e=(l+1)%3,i=(l+2)%3,l=0=(e=t.a).f))do{a+=(e.a.b-e.b.a.b)*(e.a.a+e.b.a.a),e=e.e}while(e!==t.a);if(0>a)for(a=this.b.c,o=a.e;o!==a;o=o.e)o.a=-o.a}for(this.n=!1,a=this.b.b,t=a.h;t!==a;t=o)o=t.h,e=t.e,r(t.a,t.b.a)&&t.e.e!==t&&(U(this,e,t),m(t),e=(t=e).e),e.e===t&&(e!==t&&(e!==o&&e!==o.b||(o=o.h),m(e)),t!==o&&t!==o.b||(o=o.h),m(t));for(this.e=a=new $,o=this.b.c,t=o.e;t!==o;t=t.e)t.h=et(a,t);for(tt(a),this.f=new function(t){this.a=new W,this.b=t,this.c=M}(this),j(this,-pt),j(this,pt);null!==(a=it(this.e));){for(;;){t:if(t=this.e,0===t.a)o=nt(t.b);else if(o=t.c[t.d[t.a-1]],0!==t.b.a&&(t=nt(t.b),n(t,o))){o=t;break t}if(null===o||!r(o,a))break;o=it(this.e),U(this,a.c,o.c)}V(this,a)}for(this.a=this.f.a.a.b.a.a,a=0;null!==(o=this.f.a.a.b);)o.h||++a,E(o);for(this.f=null,(a=this.e).b=null,a.d=null,this.e=a.c=null,a=this.b,t=a.a.b;t!==a.a;t=o)o=t.b,(t=t.a).e.e===t&&(A(t.c,t),m(t));if(!this.n){if(a=this.b,this.m)for(t=a.b.h;t!==a.b;t=o)o=t.h,t.b.d.c!==t.d.c?t.f=t.d.c?1:-1:m(t);else for(t=a.a.b;t!==a.a;t=o)if(o=t.b,t.c){for(t=t.a;n(t.b.a,t.a);t=t.c.b);for(;n(t.a,t.b.a);t=t.e);for(e=t.c.b,i=void 0;t.e!==e;)if(n(t.b.a,e.a)){for(;e.e!==t&&(u(e.e)||0>=s(e.a,e.b.a,e.e.b.a));)i=v(e.e,e),e=i.b;e=e.c.b}else{for(;e.e!==t&&(c(t.c.b)||0<=s(t.b.a,t.a,t.c.b.a));)i=v(t,t.c.b),t=i.b;t=t.e}for(;e.e.e!==t;)i=v(e.e,e),e=i.b}if(this.h||this.i||this.k||this.l)if(this.m){for(a=this.b,o=a.a.b;o!==a.a;o=o.b)if(o.c){this.h&&this.h(2,this.c),t=o.a;do{this.k&&this.k(t.a.d,this.c),t=t.e}while(t!==o.a);this.i&&this.i(this.c)}}else{for(a=this.b,o=!!this.l,t=!1,e=-1,i=a.a.d;i!==a.a;i=i.d)if(i.c){t||(this.h&&this.h(4,this.c),t=!0),l=i.a;do{o&&(h=l.b.d.c?0:1,e!==h&&(e=h,this.l&&this.l(!!e,this.c))),this.k&&this.k(l.a.d,this.c),l=l.e}while(l!==i.a)}t&&this.i&&this.i(this.c)}if(this.r){for(a=this.b,t=a.a.b;t!==a.a;t=o)if(o=t.b,!t.c){e=t.a,i=e.e,l=void 0;do{i=(l=i).e,l.d=null,null===l.b.d&&(l.c===l?w(l.a,null):(l.a.c=l.c,_(l,J(l))),(h=l.b).c===h?w(h.a,null):(h.a.c=h.c,_(h,J(h))),x(l))}while(l!==e);e=t.d,(t=t.b).d=e,e.b=t}return this.r(this.b),void(this.c=this.b=null)}}this.b=this.c=null},this.libtess={GluTesselator:H,windingRule:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},errorType:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156},gluEnum:{GLU_TESS_MESH:100112,GLU_TESS_TOLERANCE:100142,GLU_TESS_WINDING_RULE:100140,GLU_TESS_BOUNDARY_ONLY:100141,GLU_INVALID_ENUM:100900,GLU_INVALID_VALUE:100901,GLU_TESS_BEGIN:100100,GLU_TESS_VERTEX:100101,GLU_TESS_END:100102,GLU_TESS_ERROR:100103,GLU_TESS_EDGE_FLAG:100104,GLU_TESS_COMBINE:100105,GLU_TESS_BEGIN_DATA:100106,GLU_TESS_VERTEX_DATA:100107,GLU_TESS_END_DATA:100108,GLU_TESS_ERROR_DATA:100109,GLU_TESS_EDGE_FLAG_DATA:100110,GLU_TESS_COMBINE_DATA:100111}},H.prototype.gluDeleteTess=H.prototype.x,H.prototype.gluTessProperty=H.prototype.B,H.prototype.gluGetTessProperty=H.prototype.y,H.prototype.gluTessNormal=H.prototype.A,H.prototype.gluTessCallback=H.prototype.z,H.prototype.gluTessVertex=H.prototype.C,H.prototype.gluTessBeginPolygon=H.prototype.u,H.prototype.gluTessBeginContour=H.prototype.t,H.prototype.gluTessEndContour=H.prototype.v,H.prototype.gluTessEndPolygon=H.prototype.w,void 0!==e&&(e.exports=this.libtess)},{}],10:[function(t,e,i){(function(r){!function(t,r){r("object"==typeof i&&void 0!==e?i:t.opentype={})}(this,function(e){"use strict";function i(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function n(t,e){this.source=t,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=e,this.destLen=0,this.ltree=new i,this.dtree=new i}function o(t,e,i,r){var n,o;for(n=0;n>>=1,e}function h(t,e,i){if(!e)return i;for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>16-e;return t.tag>>>=e,t.bitcount-=e,r+i}function l(t,e){for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>=1,++n,i+=e.table[n],r-=e.table[n]}while(r>=0);return t.tag=o,t.bitcount-=n,e.trans[i+r]}function u(t,e,i){var r,n,o,a,u,c;for(r=h(t,5,257),n=h(t,5,1),o=h(t,4,4),a=0;a<19;++a)Le[a]=0;for(a=0;a8;)t.sourceIndex--,t.bitcount-=8;if(e=256*(e=t.source[t.sourceIndex+1])+t.source[t.sourceIndex],i=256*(i=t.source[t.sourceIndex+3])+t.source[t.sourceIndex+2],e!==(65535&~i))return Te;for(t.sourceIndex+=4,r=e;r;--r)t.dest[t.destLen++]=t.source[t.sourceIndex++];return t.bitcount=0,we}function d(t,e,i,r,n){return Math.pow(1-n,3)*t+3*Math.pow(1-n,2)*n*e+3*(1-n)*Math.pow(n,2)*i+Math.pow(n,3)*r}function f(){this.x1=Number.NaN,this.y1=Number.NaN,this.x2=Number.NaN,this.y2=Number.NaN}function m(){this.commands=[],this.fill="black",this.stroke=null,this.strokeWidth=1}function y(t){throw new Error(t)}function v(t,e){t||y(e)}function g(t){return function(){return t}}function _(t){return t>=-128&&t<=127}function b(t,e,i){for(var r=0,n=t.length;e>8&255,h+256&255)}return o}function w(t,e,i){for(var r=this,n=0;n>4,o=15&r;if(15===n)break;if(e+=i[n],15===o)break;e+=i[o]}return parseFloat(e)}(t);if(e>=32&&e<=246)return e-139;if(e>=247&&e<=250)return i=t.parseByte(),256*(e-247)+i+108;if(e>=251&&e<=254)return i=t.parseByte(),256*-(e-251)-i-108;throw new Error("Invalid b0 "+e)}function Y(t,e,i){e=void 0!==e?e:0;var r=new Ye.Parser(t,e),n=[],o=[];for(i=void 0!==i?i:t.length;r.relativeOffset>1,f.length=0,v=!0}var o,s,a,h,l,u,c,p,d=new m,f=[],y=0,v=!1,g=!1,_=0,b=0;if(t.isCIDFont){var S=t.tables.cff.topDict._fdSelect[e.index],x=t.tables.cff.topDict._fdArray[S];l=x._subrs,u=x._subrsBias,c=x._defaultWidthX,p=x._nominalWidthX}else l=t.tables.cff.topDict._subrs,u=t.tables.cff.topDict._subrsBias,c=t.tables.cff.topDict._defaultWidthX,p=t.tables.cff.topDict._nominalWidthX;var w=c;return function i(c){for(var m,S,x,T,P,A,M,E,k,C,R,O,L=0;L1&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_,b);break;case 5:for(;f.length>0;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 6:for(;f.length>0&&(_+=f.shift(),d.lineTo(_,b),0!==f.length);)b+=f.shift(),d.lineTo(_,b);break;case 7:for(;f.length>0&&(b+=f.shift(),d.lineTo(_,b),0!==f.length);)_+=f.shift(),d.lineTo(_,b);break;case 8:for(;f.length>0;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 10:P=f.pop()+u,(A=l[P])&&i(A);break;case 11:return;case 12:switch(F=c[L],L+=1,F){case 35:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h+f.shift(),k=M+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),b=O+f.shift(),f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;case 34:o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h,k=M+f.shift(),C=h,R=k+f.shift(),O=b,_=R+f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;case 36:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h,k=M+f.shift(),C=h,R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;case 37:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),M=a+f.shift(),E=h+f.shift(),k=M+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),Math.abs(R-_)>Math.abs(O-b)?_=R+f.shift():b=O+f.shift(),d.curveTo(o,s,a,h,M,E),d.curveTo(k,C,R,O,_,b);break;default:console.log("Glyph "+e.index+": unknown operator 1200"+F),f.length=0}break;case 14:f.length>0&&!v&&(w=f.shift()+p,v=!0),g&&(d.closePath(),g=!1);break;case 18:n();break;case 19:case 20:n(),L+=y+7>>3;break;case 21:f.length>2&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_+=f.pop(),b);break;case 22:f.length>1&&!v&&(w=f.shift()+p,v=!0),r(_+=f.pop(),b);break;case 23:n();break;case 24:for(;f.length>2;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 25:for(;f.length>6;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 26:for(f.length%2&&(_+=f.shift());f.length>0;)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a,b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 27:for(f.length%2&&(b+=f.shift());f.length>0;)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h,d.curveTo(o,s,a,h,_,b);break;case 28:m=c[L],S=c[L+1],f.push((m<<24|S<<16)>>16),L+=2;break;case 29:P=f.pop()+t.gsubrsBias,(A=t.gsubrs[P])&&i(A);break;case 30:for(;f.length>0&&(o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;case 31:for(;f.length>0&&(o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;default:F<32?console.log("Glyph "+e.index+": unknown operator "+F):F<247?f.push(F-139):F<251?(m=c[L],L+=1,f.push(256*(F-247)+m+108)):F<255?(m=c[L],L+=1,f.push(256*-(F-251)-m-108)):(m=c[L],S=c[L+1],x=c[L+2],T=c[L+3],L+=4,f.push((m<<24|S<<16|x<<8|T)/65536))}}}(i),e.advanceWidth=w,d}function et(t,e){var i,r=Ze.indexOf(t);return r>=0&&(i=r),(r=e.indexOf(t))>=0?i=r+Ze.length:(i=Ze.length+e.length,e.push(t)),i}function it(t,e,i){for(var r={},n=0;ne.value.tag?1:-1}),e.fields=e.fields.concat(r),e.fields=e.fields.concat(n),e}function mt(t,e,i){for(var r=0;r0)return t.glyphs.get(n).getMetrics()}return i}function yt(t,e){for(var i=0,r=t.length-1;i<=r;){var n=i+r>>>1,o=t[n].tag;if(o===e)return n;o>>1,o=t[n];if(o===e)return n;o>>1,s=(i=t[o]).start;if(s===e)return i;s0)return i=t[r-1],e>i.end?0:i}function _t(t,e){this.font=t,this.tableName=e}function bt(t){_t.call(this,t,"gpos")}function St(t){_t.call(this,t,"gsub")}function xt(t,e){var i=t.length;if(i!==e.length)return!1;for(var r=0;r0?(o=t.parseByte(),0==(e&n)&&(o=-o),o=i+o):o=(e&n)>0?i:i+t.parseShort(),o}function Et(t,e,i){var r,n,o=new Ye.Parser(e,i);if(t.numberOfContours=o.parseShort(),t._xMin=o.parseShort(),t._yMin=o.parseShort(),t._xMax=o.parseShort(),t._yMax=o.parseShort(),t.numberOfContours>0){for(var s=t.endPointIndices=[],a=0;a0)for(var c=o.parseByte(),p=0;p0){var d,f=[];if(l>0){for(var m=0;m=0,f.push(d);for(var y=0,v=0;v0?(2&r)>0?(S.dx=o.parseShort(),S.dy=o.parseShort()):S.matchedPoints=[o.parseUShort(),o.parseUShort()]:(2&r)>0?(S.dx=o.parseChar(),S.dy=o.parseChar()):S.matchedPoints=[o.parseByte(),o.parseByte()],(8&r)>0?S.xScale=S.yScale=o.parseF2Dot14():(64&r)>0?(S.xScale=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()):(128&r)>0&&(S.xScale=o.parseF2Dot14(),S.scale01=o.parseF2Dot14(),S.scale10=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()),t.components.push(S),b=!!(32&r)}if(256&r){t.instructionLength=o.parseUShort(),t.instructions=[];for(var x=0;xe.points.length-1||r.matchedPoints[1]>n.points.length-1)throw Error("Matched points out of range in "+e.name);var s=e.points[r.matchedPoints[0]],a=n.points[r.matchedPoints[1]],h={xScale:r.xScale,scale01:r.scale01,scale10:r.scale10,yScale:r.yScale,dx:0,dy:0};a=kt([a],h)[0],h.dx=s.x-a.x,h.dy=s.y-a.y,o=kt(n.points,h)}e.points=e.points.concat(o)}}return Ct(e.points)}function Ot(t){this.font=t,this.getCommands=function(t){return Ri.getPath(t).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function Lt(t){return t}function Ft(t){return Math.sign(t)*Math.round(Math.abs(t))}function It(t){return Math.sign(t)*Math.round(Math.abs(2*t))/2}function Dt(t){return Math.sign(t)*(Math.round(Math.abs(t)+.5)-.5)}function Ut(t){return Math.sign(t)*Math.ceil(Math.abs(t))}function Bt(t){return Math.sign(t)*Math.floor(Math.abs(t))}function Nt(t,e){this.x=t,this.y=e,this.axis=void 0,this.slope=e/t,this.normalSlope=-t/e,Object.freeze(this)}function Gt(t,e){var i=Math.sqrt(t*t+e*e);return e/=i,1==(t/=i)&&0===e?Li:0===t&&1===e?Fi:new Nt(t,e)}function qt(t,e,i,r){this.x=this.xo=Math.round(64*t)/64,this.y=this.yo=Math.round(64*e)/64,this.lastPointOfContour=i,this.onCurve=r,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}function Vt(t,e){switch(this.env=t,this.stack=[],this.prog=e,t){case"glyf":this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=Li,this.round=Ft}}function jt(t){for(var e=t.tZone=new Array(t.gZone.length),i=0;i=176&&i<=183)n+=i-176+1;else if(i>=184&&i<=191)n+=2*(i-184+1);else if(e&&1===o&&27===i)break}while(o>0);t.ip=n}function Wt(t,i){e.DEBUG&&console.log(i.step,"SVTCA["+t.axis+"]"),i.fv=i.pv=i.dpv=t}function Ht(t,i){e.DEBUG&&console.log(i.step,"SPVTCA["+t.axis+"]"),i.pv=i.dpv=t}function Xt(t,i){e.DEBUG&&console.log(i.step,"SFVTCA["+t.axis+"]"),i.fv=t}function Yt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.pv=i.dpv=Gt(r,n)}function Qt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SFVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.fv=Gt(r,n)}function Zt(t){e.DEBUG&&console.log(t.step,"POP[]"),t.stack.pop()}function Jt(t,i){var r=i.stack.pop(),n=i.z0[r],o=i.fv,s=i.pv;e.DEBUG&&console.log(i.step,"MDAP["+t+"]",r);var a=s.distance(n,Ii);t&&(a=i.round(a)),o.setRelative(n,Ii,a,s),o.touch(n),i.rp0=i.rp1=r}function Kt(t,i){var r,n,o,s=i.z2,a=s.length-2;e.DEBUG&&console.log(i.step,"IUP["+t.axis+"]");for(var h=0;h1?"loop "+(i.loop-h)+": ":"")+"SHP["+(t?"rp1":"rp2")+"]",u)}i.loop=1}function te(t,i){var r=i.stack,n=t?i.rp1:i.rp2,o=(t?i.z0:i.z1)[n],s=i.fv,a=i.pv,h=r.pop(),l=i.z2[i.contours[h]],u=l;e.DEBUG&&console.log(i.step,"SHC["+t+"]",h);var c=a.distance(o,o,!1,!0);do{u!==o&&s.setRelative(u,u,c,a),u=u.nextPointOnContour}while(u!==l)}function ee(t,i){var r,n=i.stack,o=t?i.rp1:i.rp2,s=(t?i.z0:i.z1)[o],a=i.fv,h=i.pv,l=n.pop();switch(e.DEBUG&&console.log(i.step,"SHZ["+t+"]",l),l){case 0:r=i.tZone;break;case 1:r=i.gZone;break;default:throw new Error("Invalid zone")}for(var u,c=h.distance(s,s,!1,!0),p=r.length-2,d=0;d",h),i.stack.push(Math.round(64*h))}function se(t,i){var r=i.stack,n=r.pop(),o=i.fv,s=i.pv,a=i.ppem,h=i.deltaBase+16*(t-1),l=i.deltaShift,u=i.z0;e.DEBUG&&console.log(i.step,"DELTAP["+t+"]",n,r);for(var c=0;c>4)===a){var f=(15&d)-8;f>=0&&f++,e.DEBUG&&console.log(i.step,"DELTAPFIX",p,"by",f*l);var m=u[p];o.setRelative(m,m,f*l,s)}}}function ae(t,i){var r=i.stack,n=r.pop();e.DEBUG&&console.log(i.step,"ROUND[]"),r.push(64*i.round(n/64))}function he(t,i){var r=i.stack,n=r.pop(),o=i.ppem,s=i.deltaBase+16*(t-1),a=i.deltaShift;e.DEBUG&&console.log(i.step,"DELTAC["+t+"]",n,r);for(var h=0;h>4)===o){var c=(15&u)-8;c>=0&&c++;var p=c*a;e.DEBUG&&console.log(i.step,"DELTACFIX",l,"by",p),i.cvt[l]+=p}}}function le(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log(i.step,"SDPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.dpv=Gt(r,n)}function ue(t,i){var r=i.stack,n=i.prog,o=i.ip;e.DEBUG&&console.log(i.step,"PUSHB["+t+"]");for(var s=0;s=0?1:-1,h=Math.abs(h),t&&(u=s.cvt[p],n&&Math.abs(h-u)":"_")+(n?"R":"_")+(0===o?"Gr":1===o?"Bl":2===o?"Wh":"")+"]",t?p+"("+s.cvt[p]+","+u+")":"",d,"(d =",a,"->",l*h,")"),s.rp1=s.rp0,s.rp2=d,i&&(s.rp0=d)}function de(t){(t=t||{}).empty||(At(t.familyName,"When creating a new Font object, familyName is required."),At(t.styleName,"When creating a new Font object, styleName is required."),At(t.unitsPerEm,"When creating a new Font object, unitsPerEm is required."),At(t.ascender,"When creating a new Font object, ascender is required."),At(t.descender,"When creating a new Font object, descender is required."),At(t.descender<0,"Descender should be negative (e.g. -512)."),this.names={fontFamily:{en:t.familyName||" "},fontSubfamily:{en:t.styleName||" "},fullName:{en:t.fullName||t.familyName+" "+t.styleName},postScriptName:{en:t.postScriptName||(t.familyName+t.styleName).replace(/\s/g,"")},designer:{en:t.designer||" "},designerURL:{en:t.designerURL||" "},manufacturer:{en:t.manufacturer||" "},manufacturerURL:{en:t.manufacturerURL||" "},license:{en:t.license||" "},licenseURL:{en:t.licenseURL||" "},version:{en:t.version||"Version 0.1"},description:{en:t.description||" "},copyright:{en:t.copyright||" "},trademark:{en:t.trademark||" "}},this.unitsPerEm=t.unitsPerEm||1e3,this.ascender=t.ascender,this.descender=t.descender,this.createdTimestamp=t.createdTimestamp,this.tables={os2:{usWeightClass:t.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:t.widthClass||this.usWidthClasses.MEDIUM,fsSelection:t.fsSelection||this.fsSelectionValues.REGULAR}}),this.supported=!0,this.glyphs=new ei.GlyphSet(this,t.glyphs||[]),this.encoding=new U(this),this.position=new bt(this),this.substitution=new St(this),this.tables=this.tables||{},Object.defineProperty(this,"hinting",{get:function(){return this._hinting?this._hinting:"truetype"===this.outlinesFormat?this._hinting=new Ot(this):void 0}})}function fe(t,e){var i=JSON.stringify(t),r=256;for(var n in e){var o=parseInt(n);if(o&&!(o<256)){if(JSON.stringify(e[n])===i)return o;r<=o&&(r=o+1)}}return e[r]=t,r}function me(t,e,i){var r=fe(e.name,i);return[{name:"tag_"+t,type:"TAG",value:e.tag},{name:"minValue_"+t,type:"FIXED",value:e.minValue<<16},{name:"defaultValue_"+t,type:"FIXED",value:e.defaultValue<<16},{name:"maxValue_"+t,type:"FIXED",value:e.maxValue<<16},{name:"flags_"+t,type:"USHORT",value:0},{name:"nameID_"+t,type:"USHORT",value:r}]}function ye(t,e,i){var r={},n=new Ye.Parser(t,e);return r.tag=n.parseTag(),r.minValue=n.parseFixed(),r.defaultValue=n.parseFixed(),r.maxValue=n.parseFixed(),n.skip("uShort",1),r.name=i[n.parseUShort()]||{},r}function ve(t,e,i,r){for(var n=fe(e.name,r),o=[{name:"nameID_"+t,type:"USHORT",value:n},{name:"flags_"+t,type:"USHORT",value:0}],s=0;s=i)){var n,o=e.charCodeAt(r);return o>=55296&&o<=56319&&i>r+1&&(n=e.charCodeAt(r+1))>=56320&&n<=57343?1024*(o-55296)+n-56320+65536:o}};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}();var we=0,Te=-3,Pe=new i,Ae=new i,Me=new Uint8Array(30),Ee=new Uint16Array(30),ke=new Uint8Array(30),Ce=new Uint16Array(30),Re=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Oe=new i,Le=new Uint8Array(320),Fe=new Uint16Array(16);(function(t,e){var i;for(i=0;i<7;++i)t.table[i]=0;for(t.table[7]=24,t.table[8]=152,t.table[9]=112,i=0;i<24;++i)t.trans[i]=256+i;for(i=0;i<144;++i)t.trans[24+i]=i;for(i=0;i<8;++i)t.trans[168+i]=280+i;for(i=0;i<112;++i)t.trans[176+i]=144+i;for(i=0;i<5;++i)e.table[i]=0;for(e.table[5]=32,i=0;i<32;++i)e.trans[i]=i})(Pe,Ae),o(Me,Ee,4,3),o(ke,Ce,2,1),Me[28]=0,Ee[28]=258;var Ie=function(t,e){var i,r,o=new n(t,e);do{switch(i=a(o),h(o,2,0)){case 0:r=p(o);break;case 1:r=c(o,Pe,Ae);break;case 2:u(o,o.ltree,o.dtree),r=c(o,o.ltree,o.dtree);break;default:r=Te}if(r!==we)throw new Error("Data error")}while(!i);return o.destLenthis.x2&&(this.x2=t)),"number"==typeof e&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),ethis.y2&&(this.y2=e))},f.prototype.addX=function(t){this.addPoint(t,null)},f.prototype.addY=function(t){this.addPoint(null,t)},f.prototype.addBezier=function(t,e,i,r,n,o,s,a){var h=this,l=[t,e],u=[i,r],c=[n,o],p=[s,a];this.addPoint(t,e),this.addPoint(s,a);for(var f=0;f<=1;f++){var m=6*l[f]-12*u[f]+6*c[f],y=-3*l[f]+9*u[f]-9*c[f]+3*p[f],v=3*u[f]-3*l[f];if(0!==y){var g=Math.pow(m,2)-4*v*y;if(!(g<0)){var _=(-m+Math.sqrt(g))/(2*y);0<_&&_<1&&(0===f&&h.addX(d(l[f],u[f],c[f],p[f],_)),1===f&&h.addY(d(l[f],u[f],c[f],p[f],_)));var b=(-m-Math.sqrt(g))/(2*y);0=0&&r>0&&(i+=" "),i+=e(n)}return i}t=void 0!==t?t:2;for(var r="",n=0;n=0&&t<=255,"Byte value should be between 0 and 255."),[t]},Ge.BYTE=g(1),Ne.CHAR=function(t){return[t.charCodeAt(0)]},Ge.CHAR=g(1),Ne.CHARARRAY=function(t){for(var e=[],i=0;i>8&255,255&t]},Ge.USHORT=g(2),Ne.SHORT=function(t){return t>=32768&&(t=-(65536-t)),[t>>8&255,255&t]},Ge.SHORT=g(2),Ne.UINT24=function(t){return[t>>16&255,t>>8&255,255&t]},Ge.UINT24=g(3),Ne.ULONG=function(t){return[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.ULONG=g(4),Ne.LONG=function(t){return t>=Ue&&(t=-(2*Ue-t)),[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONG=g(4),Ne.FIXED=Ne.ULONG,Ge.FIXED=Ge.ULONG,Ne.FWORD=Ne.SHORT,Ge.FWORD=Ge.SHORT,Ne.UFWORD=Ne.USHORT,Ge.UFWORD=Ge.USHORT,Ne.LONGDATETIME=function(t){return[0,0,0,0,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONGDATETIME=g(8),Ne.TAG=function(t){return De.argument(4===t.length,"Tag should be exactly 4 ASCII characters."),[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]},Ge.TAG=g(4),Ne.Card8=Ne.BYTE,Ge.Card8=Ge.BYTE,Ne.Card16=Ne.USHORT,Ge.Card16=Ge.USHORT,Ne.OffSize=Ne.BYTE,Ge.OffSize=Ge.BYTE,Ne.SID=Ne.USHORT,Ge.SID=Ge.USHORT,Ne.NUMBER=function(t){return t>=-107&&t<=107?[t+139]:t>=108&&t<=1131?[247+((t-=108)>>8),255&t]:t>=-1131&&t<=-108?[251+((t=-t-108)>>8),255&t]:t>=-32768&&t<=32767?Ne.NUMBER16(t):Ne.NUMBER32(t)},Ge.NUMBER=function(t){return Ne.NUMBER(t).length},Ne.NUMBER16=function(t){return[28,t>>8&255,255&t]},Ge.NUMBER16=g(3),Ne.NUMBER32=function(t){return[29,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.NUMBER32=g(5),Ne.REAL=function(t){var e=t.toString(),i=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(e);if(i){var r=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));e=(Math.round(t*r)/r).toString()}for(var n="",o=0,s=e.length;o>8&255,e[e.length]=255&r}return e},Ge.UTF16=function(t){return 2*t.length};var qe={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};Be.MACSTRING=function(t,e,i,r){var n=qe[r];if(void 0!==n){for(var o="",s=0;s=128&&void 0===(o=i[o]))return;r[n]=o}return r}},Ge.MACSTRING=function(t,e){var i=Ne.MACSTRING(t,e);return void 0!==i?i.length:0},Ne.VARDELTAS=function(t){for(var e=0,i=[];e=-128&&r<=127?S(t,e,i):x(t,e,i)}return i},Ne.INDEX=function(t){for(var e=1,i=[e],r=[],n=0;n>8,e[c+1]=255&p,e=e.concat(r[u])}return e},Ge.TABLE=function(t){for(var e=0,i=t.fields.length,r=0;r0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parsePointer32=function(t){var e=this.parseOffset32();if(e>0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parseListOfLists=function(t){for(var e=this,i=this.parseOffset16List(),r=i.length,n=this.relativeOffset,o=new Array(r),s=0;s=0;n-=1){var o=Ye.getUShort(t,e+4+8*n),s=Ye.getUShort(t,e+4+8*n+2);if(3===o&&(0===s||1===s||10===s)||0===o&&(0===s||1===s||2===s||3===s||4===s)){r=Ye.getULong(t,e+4+8*n+4);break}}if(-1===r)throw new Error("No valid cmap sub-tables found.");var a=new Ye.Parser(t,e+r);if(i.format=a.parseUShort(),12===i.format)!function(t,e){var i;e.parseUShort(),t.length=e.parseULong(),t.language=e.parseULong(),t.groupCount=i=e.parseULong(),t.glyphIndexMap={};for(var r=0;r>1,e.skip("uShort",3),t.glyphIndexMap={};for(var s=new Ye.Parser(i,r+n+14),a=new Ye.Parser(i,r+n+16+2*o),h=new Ye.Parser(i,r+n+16+4*o),l=new Ye.Parser(i,r+n+16+6*o),u=r+n+16+8*o,c=0;c0;e-=1)if(t.get(e).unicode>65535){console.log("Adding CMAP format 12 (needed!)"),i=!1;break}var r=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:i?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:i?12:20}];i||(r=r.concat([{name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}])),r=r.concat([{name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);var n=new We.Table("cmap",r);for(n.segments=[],e=0;e=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");o.push(n)}else{if(3!==a)throw new Error("CFF Table CID Font FDSelect table has unsupported format "+a);var l=s.parseCard16(),u=s.parseCard16();if(0!==u)throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+u);for(var c,p=0;p=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");if(c>i)throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+c);for(;u=1&&(i.ulCodePageRange1=r.parseULong(),i.ulCodePageRange2=r.parseULong()),i.version>=2&&(i.sxHeight=r.parseShort(),i.sCapHeight=r.parseShort(),i.usDefaultChar=r.parseUShort(),i.usBreakChar=r.parseUShort(),i.usMaxContent=r.parseUShort()),i},make:function(t){return new We.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],t)},unicodeRanges:gi,getUnicodeRange:function(t){for(var e=0;e=i.begin&&t=$e.length){var s=r.parseChar();i.names.push(r.parseString(s))}break;case 2.5:i.numberOfGlyphs=r.parseUShort(),i.offset=new Array(i.numberOfGlyphs);for(var a=0;ay||void 0===e)&&y>0&&(e=y),l 123 are reserved for internal usage");d|=1<0?hi.make(O):void 0,I=bi.make(),D=ni.make(t.glyphs,{version:t.getEnglishName("version"),fullName:E,familyName:A,weightName:M,postScriptName:k,unitsPerEm:t.unitsPerEm,fontBBox:[0,_.yMin,_.ascender,_.advanceWidthMax]}),U=t.metas&&Object.keys(t.metas).length>0?Pi.make(t.metas):void 0,B=[b,S,x,w,L,P,I,D,T];F&&B.push(F),t.tables.gsub&&B.push(Ti.make(t.tables.gsub)),U&&B.push(U);for(var N=ft(B),G=pt(N.encode()),q=N.fields,V=!1,j=0;j=0)return r[n].script;if(e){var o={tag:t,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return r.splice(-1-n,0,o),o.script}}},getLangSysTable:function(t,e,i){var r=this.getScriptTable(t,i);if(r){if(!e||"dflt"===e||"DFLT"===e)return r.defaultLangSys;var n=yt(r.langSysRecords,e);if(n>=0)return r.langSysRecords[n].langSys;if(i){var o={tag:e,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return r.langSysRecords.splice(-1-n,0,o),o.langSys}}},getFeatureTable:function(t,e,i,r){var n=this.getLangSysTable(t,e,r);if(n){for(var o,s=n.featureIndexes,a=this.font.tables[this.tableName].features,h=0;h=a[l-1].tag,"Features must be added in alphabetical order."),o={tag:i,feature:{params:0,lookupListIndexes:[]}},a.push(o),s.push(l),o.feature}}},getLookupTables:function(t,e,i,r,n){var o=this.getFeatureTable(t,e,i,n),s=[];if(o){for(var a,h=o.lookupListIndexes,l=this.font.tables[this.tableName].lookups,u=0;u=0?i:-1;case 2:var r=gt(t.ranges,e);return r?r.index+e-r.start:-1}},expandCoverage:function(t){if(1===t.format)return t.glyphs;for(var e=[],i=t.ranges,r=0;r=0){for(var u=o.ligatureSets[l],c=0;c2)){var r=this.font,n=this._prepState;if(!n||n.ppem!==i){var o=this._fpgmState;if(!o){Vt.prototype=Di,(o=this._fpgmState=new Vt("fpgm",r.tables.fpgm)).funcs=[],o.font=r,e.DEBUG&&(console.log("---EXEC FPGM---"),o.step=-1);try{Ei(o)}catch(t){return console.log("Hinting error in FPGM:"+t),void(this._errorState=3)}}Vt.prototype=o,(n=this._prepState=new Vt("prep",r.tables.prep)).ppem=i;var s=r.tables.cvt;if(s)for(var a=n.cvt=new Array(s.length),h=i/r.unitsPerEm,l=0;l1))try{return ki(t,n)}catch(t){return this._errorState<1&&(console.log("Hinting error:"+t),console.log("Note: further hinting errors are silenced")),void(this._errorState=1)}}},ki=function(t,i){var r,n,o,s=i.ppem/i.font.unitsPerEm,a=s,h=t.components;if(Vt.prototype=i,h){var l=i.font;n=[],r=[];for(var u=0;u1?"loop "+(t.loop-r)+": ":"")+"SHPIX[]",a,o),n.setRelative(h,h,o),n.touch(h)}t.loop=1},function(t){for(var i=t.stack,r=t.rp1,n=t.rp2,o=t.loop,s=t.z0[r],a=t.z1[n],h=t.fv,l=t.dpv,u=t.z2;o--;){var c=i.pop(),p=u[c];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"IP[]",c,r,"<->",n),h.interpolate(p,s,a,l),h.touch(p)}t.loop=1},ie.bind(void 0,0),ie.bind(void 0,1),function(t){for(var i=t.stack,r=t.rp0,n=t.z0[r],o=t.loop,s=t.fv,a=t.pv,h=t.z1;o--;){var l=i.pop(),u=h[l];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"ALIGNRP[]",l),s.setRelative(u,n,0,a),s.touch(u)}t.loop=1},function(t){e.DEBUG&&console.log(t.step,"RTDG[]"),t.round=It},re.bind(void 0,0),re.bind(void 0,1),function(t){var i=t.prog,r=t.ip,n=t.stack,o=i[++r];e.DEBUG&&console.log(t.step,"NPUSHB[]",o);for(var s=0;sr?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"GTEQ[]",r,n),i.push(n>=r?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"EQ[]",r,n),i.push(r===n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"NEQ[]",r,n),i.push(r!==n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ODD[]",r),i.push(Math.trunc(r)%2?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"EVEN[]",r),i.push(Math.trunc(r)%2?0:1)},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"IF[]",i),i||(zt(t,!0),e.DEBUG&&console.log(t.step,"EIF[]"))},function(t){e.DEBUG&&console.log(t.step,"EIF[]")},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"AND[]",r,n),i.push(r&&n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"OR[]",r,n),i.push(r||n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NOT[]",r),i.push(r?0:1)},se.bind(void 0,1),function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDB[]",i),t.deltaBase=i},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDS[]",i),t.deltaShift=Math.pow(.5,i)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"ADD[]",r,n),i.push(n+r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"SUB[]",r,n),i.push(n-r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"DIV[]",r,n),i.push(64*n/r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MUL[]",r,n),i.push(n*r/64)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ABS[]",r),i.push(Math.abs(r))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NEG[]",r),i.push(-r)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"FLOOR[]",r),i.push(64*Math.floor(r/64))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"CEILING[]",r),i.push(64*Math.ceil(r/64))},ae.bind(void 0,0),ae.bind(void 0,1),ae.bind(void 0,2),ae.bind(void 0,3),void 0,void 0,void 0,void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"WCVTF[]",r,n),t.cvt[n]=r*t.ppem/t.font.unitsPerEm},se.bind(void 0,2),se.bind(void 0,3),he.bind(void 0,1),he.bind(void 0,2),he.bind(void 0,3),function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"SROUND[]",r),t.round=Oi,192&r){case 0:i=.5;break;case 64:i=1;break;case 128:i=2;break;default:throw new Error("invalid SROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid SROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"S45ROUND[]",r),t.round=Oi,192&r){case 0:i=Math.sqrt(2)/2;break;case 64:i=Math.sqrt(2);break;case 128:i=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid S45ROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},void 0,void 0,function(t){e.DEBUG&&console.log(t.step,"ROFF[]"),t.round=Lt},void 0,function(t){e.DEBUG&&console.log(t.step,"RUTG[]"),t.round=Ut},function(t){e.DEBUG&&console.log(t.step,"RDTG[]"),t.round=Bt},Zt,Zt,void 0,void 0,void 0,void 0,void 0,function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANCTRL[]",i)},le.bind(void 0,0),le.bind(void 0,1),function(t){var i=t.stack,r=i.pop(),n=0;e.DEBUG&&console.log(t.step,"GETINFO[]",r),1&r&&(n=35),32&r&&(n|=4096),i.push(n)},void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop(),o=i.pop();e.DEBUG&&console.log(t.step,"ROLL[]"),i.push(n),i.push(r),i.push(o)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MAX[]",r,n),i.push(Math.max(n,r))},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MIN[]",r,n),i.push(Math.min(n,r))},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANTYPE[]",i)},function(t){var i=t.stack.pop(),r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"INSTCTRL[]",i,r),i){case 1:return void(t.inhibitGridFit=!!r);case 2:return void(t.ignoreCvt=!!r);default:throw new Error("invalid INSTCTRL[] selector")}},void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,ue.bind(void 0,1),ue.bind(void 0,2),ue.bind(void 0,3),ue.bind(void 0,4),ue.bind(void 0,5),ue.bind(void 0,6),ue.bind(void 0,7),ue.bind(void 0,8),ce.bind(void 0,1),ce.bind(void 0,2),ce.bind(void 0,3),ce.bind(void 0,4),ce.bind(void 0,5),ce.bind(void 0,6),ce.bind(void 0,7),ce.bind(void 0,8),pe.bind(void 0,0,0,0,0,0),pe.bind(void 0,0,0,0,0,1),pe.bind(void 0,0,0,0,0,2),pe.bind(void 0,0,0,0,0,3),pe.bind(void 0,0,0,0,1,0),pe.bind(void 0,0,0,0,1,1),pe.bind(void 0,0,0,0,1,2),pe.bind(void 0,0,0,0,1,3),pe.bind(void 0,0,0,1,0,0),pe.bind(void 0,0,0,1,0,1),pe.bind(void 0,0,0,1,0,2),pe.bind(void 0,0,0,1,0,3),pe.bind(void 0,0,0,1,1,0),pe.bind(void 0,0,0,1,1,1),pe.bind(void 0,0,0,1,1,2),pe.bind(void 0,0,0,1,1,3),pe.bind(void 0,0,1,0,0,0),pe.bind(void 0,0,1,0,0,1),pe.bind(void 0,0,1,0,0,2),pe.bind(void 0,0,1,0,0,3),pe.bind(void 0,0,1,0,1,0),pe.bind(void 0,0,1,0,1,1),pe.bind(void 0,0,1,0,1,2),pe.bind(void 0,0,1,0,1,3),pe.bind(void 0,0,1,1,0,0),pe.bind(void 0,0,1,1,0,1),pe.bind(void 0,0,1,1,0,2),pe.bind(void 0,0,1,1,0,3),pe.bind(void 0,0,1,1,1,0),pe.bind(void 0,0,1,1,1,1),pe.bind(void 0,0,1,1,1,2),pe.bind(void 0,0,1,1,1,3),pe.bind(void 0,1,0,0,0,0),pe.bind(void 0,1,0,0,0,1),pe.bind(void 0,1,0,0,0,2),pe.bind(void 0,1,0,0,0,3),pe.bind(void 0,1,0,0,1,0),pe.bind(void 0,1,0,0,1,1),pe.bind(void 0,1,0,0,1,2),pe.bind(void 0,1,0,0,1,3),pe.bind(void 0,1,0,1,0,0),pe.bind(void 0,1,0,1,0,1),pe.bind(void 0,1,0,1,0,2),pe.bind(void 0,1,0,1,0,3),pe.bind(void 0,1,0,1,1,0),pe.bind(void 0,1,0,1,1,1),pe.bind(void 0,1,0,1,1,2),pe.bind(void 0,1,0,1,1,3),pe.bind(void 0,1,1,0,0,0),pe.bind(void 0,1,1,0,0,1),pe.bind(void 0,1,1,0,0,2),pe.bind(void 0,1,1,0,0,3),pe.bind(void 0,1,1,0,1,0),pe.bind(void 0,1,1,0,1,1),pe.bind(void 0,1,1,0,1,2),pe.bind(void 0,1,1,0,1,3),pe.bind(void 0,1,1,1,0,0),pe.bind(void 0,1,1,1,0,1),pe.bind(void 0,1,1,1,0,2),pe.bind(void 0,1,1,1,0,3),pe.bind(void 0,1,1,1,1,0),pe.bind(void 0,1,1,1,1,1),pe.bind(void 0,1,1,1,1,2),pe.bind(void 0,1,1,1,1,3)];var Ui=Array.from||function(t){return t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]?|[^\uD800-\uDFFF]|./g)||[]};de.prototype.hasChar=function(t){return null!==this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyphIndex=function(t){return this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyph=function(t){var e=this.charToGlyphIndex(t),i=this.glyphs.get(e);return i||(i=this.glyphs.get(0)),i},de.prototype.stringToGlyphs=function(t,e){e=e||this.defaultRenderOptions;for(var i=Ui(t),r=[],n=0;n1&&console.warn("Only the first kern subtable is supported."),t.skip("uLong");var i=255&t.parseUShort();if(t.skip("uShort"),0===i){var r=t.parseUShort();t.skip("uShort",3);for(var n=0;n1)for(var i=1;i-1?e:t}(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(i)}function c(t){var e=new FormData;return t.trim().split("&").forEach(function(t){if(t){var i=t.split("="),r=i.shift().replace(/\+/g," "),n=i.join("=").replace(/\+/g," ");e.append(decodeURIComponent(r),decodeURIComponent(n))}}),e}function p(t){var e=new n;return t.split(/\r?\n/).forEach(function(t){var i=t.split(":"),r=i.shift().trim();if(r){var n=i.join(":").trim();e.append(r,n)}}),e}function d(t,e){e||(e={}),this.type="default",this.status="status"in e?e.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new n(e.headers),this.url=e.url||"",this._initBody(t)}if(!t.fetch){var f={searchParams:"URLSearchParams"in t,iterable:"Symbol"in t&&"iterator"in Symbol,blob:"FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in t,arrayBuffer:"ArrayBuffer"in t};if(f.arrayBuffer)var m=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],y=function(t){return t&&DataView.prototype.isPrototypeOf(t)},v=ArrayBuffer.isView||function(t){return t&&m.indexOf(Object.prototype.toString.call(t))>-1};n.prototype.append=function(t,r){t=e(t),r=i(r);var n=this.map[t];this.map[t]=n?n+","+r:r},n.prototype.delete=function(t){delete this.map[e(t)]},n.prototype.get=function(t){return t=e(t),this.has(t)?this.map[t]:null},n.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},n.prototype.set=function(t,r){this.map[e(t)]=i(r)},n.prototype.forEach=function(t,e){for(var i in this.map)this.map.hasOwnProperty(i)&&t.call(e,this.map[i],i,this)},n.prototype.keys=function(){var t=[];return this.forEach(function(e,i){t.push(i)}),r(t)},n.prototype.values=function(){var t=[];return this.forEach(function(e){t.push(e)}),r(t)},n.prototype.entries=function(){var t=[];return this.forEach(function(e,i){t.push([i,e])}),r(t)},f.iterable&&(n.prototype[Symbol.iterator]=n.prototype.entries);var g=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];u.prototype.clone=function(){return new u(this,{body:this._bodyInit})},l.call(u.prototype),l.call(d.prototype),d.prototype.clone=function(){return new d(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new n(this.headers),url:this.url})},d.error=function(){var t=new d(null,{status:0,statusText:""});return t.type="error",t};var _=[301,302,303,307,308];d.redirect=function(t,e){if(-1===_.indexOf(e))throw new RangeError("Invalid status code");return new d(null,{status:e,headers:{location:t}})},t.Headers=n,t.Request=u,t.Response=d,t.fetch=function(t,e){return new Promise(function(i,r){var n=new u(t,e),o=new XMLHttpRequest;o.onload=function(){var t={status:o.status,statusText:o.statusText,headers:p(o.getAllResponseHeaders()||"")};t.url="responseURL"in o?o.responseURL:t.headers.get("X-Request-URL");var e="response"in o?o.response:o.responseText;i(new d(e,t))},o.onerror=function(){r(new TypeError("Network request failed"))},o.ontimeout=function(){r(new TypeError("Network request failed"))},o.open(n.method,n.url,!0),"include"===n.credentials&&(o.withCredentials=!0),"responseType"in o&&f.blob&&(o.responseType="blob"),n.headers.forEach(function(t,e){o.setRequestHeader(e,t)}),o.send(void 0===n._bodyInit?null:n._bodyInit)})},t.fetch.polyfill=!0}}("undefined"!=typeof self?self:this)},{}],13:[function(t,e,i){"use strict";var r=t("./core/main");t("./core/constants"),t("./core/environment"),t("./core/error_helpers"),t("./core/helpers"),t("./core/legacy"),t("./core/p5.Element"),t("./core/p5.Graphics"),t("./core/p5.Renderer"),t("./core/p5.Renderer2D"),t("./core/rendering"),t("./core/shim"),t("./core/structure"),t("./core/transform"),t("./core/shape/2d_primitives"),t("./core/shape/attributes"),t("./core/shape/curves"),t("./core/shape/vertex"),t("./color/color_conversion"),t("./color/creating_reading"),t("./color/p5.Color"),t("./color/setting"),t("./data/p5.TypedDict"),t("./events/acceleration"),t("./events/keyboard"),t("./events/mouse"),t("./events/touch"),t("./image/filters"),t("./image/image"),t("./image/loading_displaying"),t("./image/p5.Image"),t("./image/pixels"),t("./io/files"),t("./io/p5.Table"),t("./io/p5.TableRow"),t("./io/p5.XML"),t("./math/calculation"),t("./math/math"),t("./math/noise"),t("./math/p5.Vector"),t("./math/random"),t("./math/trigonometry"),t("./typography/attributes"),t("./typography/loading_displaying"),t("./typography/p5.Font"),t("./utilities/array_functions"),t("./utilities/conversion"),t("./utilities/string_functions"),t("./utilities/time_date"),t("./webgl/3d_primitives"),t("./webgl/interaction"),t("./webgl/light"),t("./webgl/loading"),t("./webgl/material"),t("./webgl/p5.Camera"),t("./webgl/p5.Geometry"),t("./webgl/p5.Matrix"),t("./webgl/p5.RendererGL.Immediate"),t("./webgl/p5.RendererGL"),t("./webgl/p5.RendererGL.Retained"),t("./webgl/p5.Shader"),t("./webgl/p5.Texture"),t("./webgl/text"),t("./core/init"),e.exports=r},{"./color/color_conversion":14,"./color/creating_reading":15,"./color/p5.Color":16,"./color/setting":17,"./core/constants":18,"./core/environment":19,"./core/error_helpers":20,"./core/helpers":21,"./core/init":22,"./core/legacy":23,"./core/main":24,"./core/p5.Element":25,"./core/p5.Graphics":26,"./core/p5.Renderer":27,"./core/p5.Renderer2D":28,"./core/rendering":29,"./core/shape/2d_primitives":30,"./core/shape/attributes":31,"./core/shape/curves":32,"./core/shape/vertex":33,"./core/shim":34,"./core/structure":35,"./core/transform":36,"./data/p5.TypedDict":37,"./events/acceleration":38,"./events/keyboard":39,"./events/mouse":40,"./events/touch":41,"./image/filters":42,"./image/image":43,"./image/loading_displaying":44,"./image/p5.Image":45,"./image/pixels":46,"./io/files":47,"./io/p5.Table":48,"./io/p5.TableRow":49,"./io/p5.XML":50,"./math/calculation":51,"./math/math":52,"./math/noise":53,"./math/p5.Vector":54,"./math/random":55,"./math/trigonometry":56,"./typography/attributes":57,"./typography/loading_displaying":58,"./typography/p5.Font":59,"./utilities/array_functions":60,"./utilities/conversion":61,"./utilities/string_functions":62,"./utilities/time_date":63,"./webgl/3d_primitives":64,"./webgl/interaction":65,"./webgl/light":66,"./webgl/loading":67,"./webgl/material":68,"./webgl/p5.Camera":69,"./webgl/p5.Geometry":70,"./webgl/p5.Matrix":71,"./webgl/p5.RendererGL":74,"./webgl/p5.RendererGL.Immediate":72,"./webgl/p5.RendererGL.Retained":73,"./webgl/p5.Shader":75,"./webgl/p5.Texture":76,"./webgl/text":77}],14:[function(t,e,i){"use strict";var r=t("../core/main");r.ColorConversion={},r.ColorConversion._hsbaToHSLA=function(t){var e=t[0],i=t[1],r=t[2],n=(2-i)*r/2;return 0!==n&&(1===n?i=0:n<.5?i/=2-i:i=i*r/(2-2*n)),[e,i,n,t[3]]},r.ColorConversion._hsbaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s,a,h=Math.floor(e),l=r*(1-i),u=r*(1-i*(e-h)),c=r*(1-i*(1+h-e));1===h?(o=u,s=r,a=l):2===h?(o=l,s=r,a=c):3===h?(o=l,s=u,a=r):4===h?(o=c,s=l,a=r):5===h?(o=r,s=l,a=u):(o=r,s=c,a=l),n=[o,s,a,t[3]]}return n},r.ColorConversion._hslaToHSBA=function(t){var e,i=t[0],r=t[1],n=t[2];return[i,r=2*((e=n<.5?(1+r)*n:n+r-n*r)-n)/e,e,t[3]]},r.ColorConversion._hslaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s=2*r-(o=r<.5?(1+i)*r:r+i-r*i),a=function(t,e,i){return t<0?t+=6:t>=6&&(t-=6),t<1?e+(i-e)*t:t<3?i:t<4?e+(i-e)*(4-t):e};n=[a(e+2,s,o),a(e,s,o),a(e-2,s,o),t[3]]}return n},r.ColorConversion._rgbaToHSBA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=s-Math.min(r,n,o);return 0===a?(e=0,i=0):(i=a/s,r===s?e=(n-o)/a:n===s?e=2+(o-r)/a:o===s&&(e=4+(r-n)/a),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,s,t[3]]},r.ColorConversion._rgbaToHSLA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=Math.min(r,n,o),h=s+a,l=s-a;return 0===l?(e=0,i=0):(i=h<1?l/h:l/(2-h),r===s?e=(n-o)/l:n===s?e=2+(o-r)/l:o===s&&(e=4+(r-n)/l),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,h/2,t[3]]},e.exports=r.ColorConversion},{"../core/main":24}],15:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),t("../core/error_helpers"),r.prototype.alpha=function(t){return r._validateParameters("alpha",arguments),this.color(t)._getAlpha()},r.prototype.blue=function(t){return r._validateParameters("blue",arguments),this.color(t)._getBlue()},r.prototype.brightness=function(t){return r._validateParameters("brightness",arguments),this.color(t)._getBrightness()},r.prototype.color=function(){if(r._validateParameters("color",arguments),arguments[0]instanceof r.Color)return arguments[0];var t=arguments[0]instanceof Array?arguments[0]:arguments;return new r.Color(this,t)},r.prototype.green=function(t){return r._validateParameters("green",arguments),this.color(t)._getGreen()},r.prototype.hue=function(t){return r._validateParameters("hue",arguments),this.color(t)._getHue()},r.prototype.lerpColor=function(t,e,i){r._validateParameters("lerpColor",arguments);var o,s,a,h,l,u,c=this._colorMode,p=this._colorMaxes;if(c===n.RGB)l=t.levels.map(function(t){return t/255}),u=e.levels.map(function(t){return t/255});else if(c===n.HSB)t._getBrightness(),e._getBrightness(),l=t.hsba,u=e.hsba;else{if(c!==n.HSL)throw new Error(c+"cannot be used for interpolation.");t._getLightness(),e._getLightness(),l=t.hsla,u=e.hsla}return i=Math.max(Math.min(i,1),0),void 0===this.lerp&&(this.lerp=function(t,e,i){return i*(e-t)+t}),o=this.lerp(l[0],u[0],i),s=this.lerp(l[1],u[1],i),a=this.lerp(l[2],u[2],i),h=this.lerp(l[3],u[3],i),o*=p[c][0],s*=p[c][1],a*=p[c][2],h*=p[c][3],this.color(o,s,a,h)},r.prototype.lightness=function(t){return r._validateParameters("lightness",arguments),this.color(t)._getLightness()},r.prototype.red=function(t){return r._validateParameters("red",arguments),this.color(t)._getRed()},r.prototype.saturation=function(t){return r._validateParameters("saturation",arguments),this.color(t)._getSaturation()},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"./p5.Color":16}],16:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("./color_conversion");r.Color=function(t,e){if(this._storeModeAndMaxes(t._colorMode,t._colorMaxes),this.mode!==n.RGB&&this.mode!==n.HSL&&this.mode!==n.HSB)throw new Error(this.mode+" is an invalid colorMode.");return this._array=r.Color._parseInputs.apply(this,e),this._calculateLevels(),this},r.Color.prototype.toString=function(t){this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsla||(this.hsla=o._rgbaToHSLA(this._array));var e=this.levels,i=this._array,r=i[3];switch(t){case"#rrggbb":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16));case"#rrggbbaa":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16),e[3]<16?"0".concat(e[2].toString(16)):e[3].toString(16));case"#rgb":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16));case"#rgba":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16),Math.round(15*i[3]).toString(16));case"rgb":return"rgb(".concat(e[0],", ",e[1],", ",e[2],")");case"rgb%":return"rgb(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%)");case"rgba%":return"rgba(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%, ",(100*i[3]).toPrecision(3),"%)");case"hsb":case"hsv":return"hsb(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],")");case"hsb%":case"hsv%":return"hsb(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%)");case"hsba":case"hsva":return"hsba(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],", ",r,")");case"hsba%":case"hsva%":return"hsba(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"hsl":return"hsl(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],")");case"hsl%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%)");case"hsla":return"hsla(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],", ",r,")");case"hsla%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"rgba":default:return"rgba("+e[0]+","+e[1]+","+e[2]+","+r+")"}},r.Color.prototype.setRed=function(t){this._array[0]=t/this.maxes[n.RGB][0],this._calculateLevels()},r.Color.prototype.setGreen=function(t){this._array[1]=t/this.maxes[n.RGB][1],this._calculateLevels()},r.Color.prototype.setBlue=function(t){this._array[2]=t/this.maxes[n.RGB][2],this._calculateLevels()},r.Color.prototype.setAlpha=function(t){this._array[3]=t/this.maxes[this.mode][3],this._calculateLevels()},r.Color.prototype._calculateLevels=function(){for(var t=this._array,e=this.levels=new Array(t.length),i=t.length-1;i>=0;--i)e[i]=Math.round(255*t[i])},r.Color.prototype._getAlpha=function(){return this._array[3]*this.maxes[this.mode][3]},r.Color.prototype._storeModeAndMaxes=function(t,e){this.mode=t,this.maxes=e},r.Color.prototype._getMode=function(){return this.mode},r.Color.prototype._getMaxes=function(){return this.maxes},r.Color.prototype._getBlue=function(){return this._array[2]*this.maxes[n.RGB][2]},r.Color.prototype._getBrightness=function(){return this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[2]*this.maxes[n.HSB][2]},r.Color.prototype._getGreen=function(){return this._array[1]*this.maxes[n.RGB][1]},r.Color.prototype._getHue=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[0]*this.maxes[n.HSB][0]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[0]*this.maxes[n.HSL][0])},r.Color.prototype._getLightness=function(){return this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[2]*this.maxes[n.HSL][2]},r.Color.prototype._getRed=function(){return this._array[0]*this.maxes[n.RGB][0]},r.Color.prototype._getSaturation=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[1]*this.maxes[n.HSB][1]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[1]*this.maxes[n.HSL][1])};var s={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},a=/\s*/,h=/(\d{1,3})/,l=/((?:\d+(?:\.\d+)?)|(?:\.\d+))/,u=new RegExp(l.source+"%"),c={HEX3:/^#([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX4:/^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX6:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,HEX8:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,RGB:new RegExp(["^rgb\\(",h.source,",",h.source,",",h.source,"\\)$"].join(a.source),"i"),RGB_PERCENT:new RegExp(["^rgb\\(",u.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),RGBA:new RegExp(["^rgba\\(",h.source,",",h.source,",",h.source,",",l.source,"\\)$"].join(a.source),"i"),RGBA_PERCENT:new RegExp(["^rgba\\(",u.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSL:new RegExp(["^hsl\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSLA:new RegExp(["^hsla\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSB:new RegExp(["^hsb\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSBA:new RegExp(["^hsba\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i")};r.Color._parseInputs=function(t,e,i,a){var h,l=arguments.length,u=this.mode,p=this.maxes[u],d=[];if(l>=3){for(d[0]=t/p[0],d[1]=e/p[1],d[2]=i/p[2],d[3]="number"==typeof a?a/p[3]:1,h=d.length-1;h>=0;--h){var f=d[h];f<0?d[h]=0:f>1&&(d[h]=1)}return u===n.HSL?o._hslaToRGBA(d):u===n.HSB?o._hsbaToRGBA(d):d}if(1===l&&"string"==typeof t){var m=t.trim().toLowerCase();if(s[m])return r.Color._parseInputs.call(this,s[m]);if(c.HEX3.test(m))return(d=c.HEX3.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255}))[3]=1,d;if(c.HEX6.test(m))return(d=c.HEX6.exec(m).slice(1).map(function(t){return parseInt(t,16)/255}))[3]=1,d;if(c.HEX4.test(m))return d=c.HEX4.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255});if(c.HEX8.test(m))return d=c.HEX8.exec(m).slice(1).map(function(t){return parseInt(t,16)/255});if(c.RGB.test(m))return(d=c.RGB.exec(m).slice(1).map(function(t){return t/255}))[3]=1,d;if(c.RGB_PERCENT.test(m))return(d=c.RGB_PERCENT.exec(m).slice(1).map(function(t){return parseFloat(t)/100}))[3]=1,d;if(c.RGBA.test(m))return d=c.RGBA.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):t/255});if(c.RGBA_PERCENT.test(m))return d=c.RGBA_PERCENT.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):parseFloat(t)/100});if(c.HSL.test(m)?(d=c.HSL.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSLA.test(m)&&(d=c.HSLA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),(d=d.map(function(t){return Math.max(Math.min(t,1),0)})).length)return o._hslaToRGBA(d);if(c.HSB.test(m)?(d=c.HSB.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSBA.test(m)&&(d=c.HSBA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),d.length){for(h=d.length-1;h>=0;--h)d[h]=Math.max(Math.min(d[h],1),0);return o._hsbaToRGBA(d)}d=[1,1,1,1]}else{if(1!==l&&2!==l||"number"!=typeof t)throw new Error(arguments+"is not a valid color representation.");d[0]=t/p[2],d[1]=t/p[2],d[2]=t/p[2],d[3]="number"==typeof e?e/p[3]:1,d=d.map(function(t){return Math.max(Math.min(t,1),0)})}return d},e.exports=r.Color},{"../core/constants":18,"../core/main":24,"./color_conversion":14}],17:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),r.prototype.background=function(){return arguments[0]instanceof r.Image?this.image(arguments[0],0,0,this.width,this.height):this._renderer.background.apply(this._renderer,arguments),this},r.prototype.clear=function(){return this._renderer.clear(),this},r.prototype.colorMode=function(t,e,i,o,s){if(r._validateParameters("colorMode",arguments),t===n.RGB||t===n.HSB||t===n.HSL){this._colorMode=t;var a=this._colorMaxes[t];2===arguments.length?(a[0]=e,a[1]=e,a[2]=e,a[3]=e):4===arguments.length?(a[0]=e,a[1]=i,a[2]=o):5===arguments.length&&(a[0]=e,a[1]=i,a[2]=o,a[3]=s)}return this},r.prototype.fill=function(){return this._renderer._setProperty("_fillSet",!0),this._renderer._setProperty("_doFill",!0),this._renderer.fill.apply(this._renderer,arguments),this},r.prototype.noFill=function(){return this._renderer._setProperty("_doFill",!1),this},r.prototype.noStroke=function(){return this._renderer._setProperty("_doStroke",!1),this},r.prototype.stroke=function(){return this._renderer._setProperty("_strokeSet",!0),this._renderer._setProperty("_doStroke",!0),this._renderer.stroke.apply(this._renderer,arguments),this},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Color":16}],18:[function(t,e,i){"use strict";var r=Math.PI;e.exports={P2D:"p2d",WEBGL:"webgl",ARROW:"default",CROSS:"crosshair",HAND:"pointer",MOVE:"move",TEXT:"text",WAIT:"wait",HALF_PI:r/2,PI:r,QUARTER_PI:r/4,TAU:2*r,TWO_PI:2*r,DEGREES:"degrees",RADIANS:"radians",DEG_TO_RAD:r/180,RAD_TO_DEG:180/r,CORNER:"corner",CORNERS:"corners",RADIUS:"radius",RIGHT:"right",LEFT:"left",CENTER:"center",TOP:"top",BOTTOM:"bottom",BASELINE:"alphabetic",POINTS:0,LINES:1,LINE_STRIP:3,LINE_LOOP:2,TRIANGLES:4,TRIANGLE_FAN:6,TRIANGLE_STRIP:5,QUADS:"quads",QUAD_STRIP:"quad_strip",CLOSE:"close",OPEN:"open",CHORD:"chord",PIE:"pie",PROJECT:"square",SQUARE:"butt",ROUND:"round",BEVEL:"bevel",MITER:"miter",RGB:"rgb",HSB:"hsb",HSL:"hsl",AUTO:"auto",ALT:18,BACKSPACE:8,CONTROL:17,DELETE:46,DOWN_ARROW:40,ENTER:13,ESCAPE:27,LEFT_ARROW:37,OPTION:18,RETURN:13,RIGHT_ARROW:39,SHIFT:16,TAB:9,UP_ARROW:38,BLEND:"source-over",ADD:"lighter",DARKEST:"darken",LIGHTEST:"lighten",DIFFERENCE:"difference",EXCLUSION:"exclusion",MULTIPLY:"multiply",SCREEN:"screen",REPLACE:"copy",OVERLAY:"overlay",HARD_LIGHT:"hard-light",SOFT_LIGHT:"soft-light",DODGE:"color-dodge",BURN:"color-burn",THRESHOLD:"threshold",GRAY:"gray",OPAQUE:"opaque",INVERT:"invert",POSTERIZE:"posterize",DILATE:"dilate",ERODE:"erode",BLUR:"blur",NORMAL:"normal",ITALIC:"italic",BOLD:"bold",_DEFAULT_TEXT_FILL:"#000000",_DEFAULT_LEADMULT:1.25,_CTX_MIDDLE:"middle",LINEAR:"linear",QUADRATIC:"quadratic",BEZIER:"bezier",CURVE:"curve",STROKE:"stroke",FILL:"fill",TEXTURE:"texture",IMMEDIATE:"immediate",NEAREST:"nearest",REPEAT:"repeat",CLAMP:"clamp",MIRROR:"mirror",LANDSCAPE:"landscape",PORTRAIT:"portrait",_DEFAULT_STROKE:"#000000",_DEFAULT_FILL:"#FFFFFF",GRID:"grid",AXES:"axes"}},{}],19:[function(t,e,i){"use strict";function r(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth||0}function n(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight||0}var o=t("./main"),s=t("./constants"),a=[s.ARROW,s.CROSS,s.HAND,s.MOVE,s.TEXT,s.WAIT];o.prototype._frameRate=0,o.prototype._lastFrameTime=window.performance.now(),o.prototype._targetFrameRate=60;var h=window.print;o.prototype.print=function(){arguments.length?console.log.apply(console,arguments):h()},o.prototype.frameCount=0,o.prototype.focused=document.hasFocus(),o.prototype.cursor=function(t,e,i){var r="auto",n=this._curElement.elt;if(a.indexOf(t)>-1)r=t;else if("string"==typeof t){var o="";e&&i&&"number"==typeof e&&"number"==typeof i&&(o=e+" "+i),r="http://"===t.substring(0,7)||"https://"===t.substring(0,8)?"url("+t+") "+o+", auto":/\.(cur|jpg|jpeg|gif|png|CUR|JPG|JPEG|GIF|PNG)$/.test(t)?"url("+t+") "+o+", auto":t}n.style.cursor=r},o.prototype.frameRate=function(t){return o._validateParameters("frameRate",arguments),"number"!=typeof t||t<0?this._frameRate:(this._setProperty("_targetFrameRate",t),this._runFrames(),this)},o.prototype.getFrameRate=function(){return this.frameRate()},o.prototype.setFrameRate=function(t){return this.frameRate(t)},o.prototype.noCursor=function(){this._curElement.elt.style.cursor="none"},o.prototype.displayWidth=screen.width,o.prototype.displayHeight=screen.height,o.prototype.windowWidth=r(),o.prototype.windowHeight=n(),o.prototype._onresize=function(t){this._setProperty("windowWidth",r()),this._setProperty("windowHeight",n());var e,i=this._isGlobal?window:this;"function"==typeof i.windowResized&&(void 0===(e=i.windowResized(t))||e||t.preventDefault())},o.prototype.width=0,o.prototype.height=0,o.prototype.fullscreen=function(t){if(o._validateParameters("fullscreen",arguments),void 0===t)return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;t?function(t){if(!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled))throw new Error("Fullscreen not enabled in this browser.");t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.msRequestFullscreen&&t.msRequestFullscreen()}(document.documentElement):document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.msExitFullscreen&&document.msExitFullscreen()},o.prototype.pixelDensity=function(t){var e;return o._validateParameters("pixelDensity",arguments),"number"==typeof t?(t!==this._pixelDensity&&(this._pixelDensity=t,this._pixelsDirty=!0),e=this,this.resizeCanvas(this.width,this.height,!0)):e=this._pixelDensity,e},o.prototype.displayDensity=function(){return window.devicePixelRatio},o.prototype.getURL=function(){return location.href},o.prototype.getURLPath=function(){return location.pathname.split("/").filter(function(t){return""!==t})},o.prototype.getURLParams=function(){for(var t,e=/[?&]([^&=]+)(?:[&=])([^&=]+)/gim,i={};null!=(t=e.exec(location.search));)t.index===e.lastIndex&&e.lastIndex++,i[t[1]]=t[2];return i},e.exports=o},{"./constants":18,"./main":24}],20:[function(t,e,i){"use strict";var r=t("./main");t("./constants"),r._validateParameters=r._friendlyFileLoadError=function(){};var n=null,o=function(){var e={},i=function(t){return Object.getOwnPropertyNames(t).filter(function(t){return!("_"===t[0]||t in e||(e[t]=!0,0))}).map(function(e){var i;return i="function"==typeof t[e]?"function":e===e.toUpperCase()?"constant":"variable",{name:e,type:i}})};(n=[].concat(i(r.prototype),i(t("./constants")))).sort(function(t,e){return e.name.length-t.name.length})},s=function(t,e){e||(e=console.log.bind(console)),n||o(),n.some(function(i){if(t.message&&null!==t.message.match("\\W?"+i.name+"\\W"))return e("Did you just try to use p5.js's "+i.name+("function"===i.type?"() ":" ")+i.type+"? If so, you may want to move it into your sketch's setup() function.\n\nFor more details, see: https://github.com/processing/p5.js/wiki/p5.js-overview#why-cant-i-assign-variables-using-p5-functions-and-variables-before-setup"),!0})};r.prototype._helpForMisusedAtTopLevelCode=s,"complete"!==document.readyState&&(window.addEventListener("error",s,!1),window.addEventListener("load",function(){window.removeEventListener("error",s,!1)})),e.exports=r},{"../../docs/reference/data.json":void 0,"./constants":18,"./main":24}],21:[function(t,e,i){"use strict";var r=t("./constants");e.exports={modeAdjust:function(t,e,i,n,o){return o===r.CORNER?{x:t,y:e,w:i,h:n}:o===r.CORNERS?{x:t,y:e,w:i-t,h:n-e}:o===r.RADIUS?{x:t-i,y:e-n,w:2*i,h:2*n}:o===r.CENTER?{x:t-.5*i,y:e-.5*n,w:i,h:n}:void 0}}},{"./constants":18}],22:[function(t,e,i){"use strict";var r=t("../core/main"),n=function(){window.mocha||(window.setup&&"function"==typeof window.setup||window.draw&&"function"==typeof window.draw)&&!r.instance&&new r};"complete"===document.readyState?n():window.addEventListener("load",n,!1)},{"../core/main":24}],23:[function(t,e,i){"use strict";var r=t("./main");r.prototype.exit=function(){throw new Error("exit() not implemented, see remove()")},r.prototype.pushStyle=function(){throw new Error("pushStyle() not used, see push()")},r.prototype.popStyle=function(){throw new Error("popStyle() not used, see pop()")},r.prototype.size=function(){var t="size() is not a valid p5 function, to set the size of the ";throw new Error(t+="drawing canvas, please use createCanvas() instead")},e.exports=r},{"./main":24}],24:[function(t,e,i){"use strict";t("./shim");var r=t("./constants"),n=function(t,e,i){"boolean"==typeof e&&void 0===i&&(i=e,e=void 0),this._setupDone=!1,this._pixelDensity=Math.ceil(window.devicePixelRatio)||1,this._userNode=e,this._curElement=null,this._elements=[],this._requestAnimId=0,this._preloadCount=0,this._isGlobal=!1,this._loop=!0,this._initializeInstanceVariables(),this._defaultCanvasSize={width:100,height:100},this._events={mousemove:null,mousedown:null,mouseup:null,dragend:null,dragover:null,click:null,dblclick:null,mouseover:null,mouseout:null,keydown:null,keyup:null,keypress:null,touchstart:null,touchmove:null,touchend:null,resize:null,blur:null},this._events.wheel=null,this._loadingScreenId="p5_loading",this._registeredMethods={};for(var r=Object.getOwnPropertyNames(n.prototype._registeredMethods),o=0;o=i-5)&&(this.redraw(),this._frameRate=1e3/(t-this._lastFrameTime),this._lastFrameTime=t,void 0!==this._updateMouseCoords&&this._updateMouseCoords()),this._loop&&(this._requestAnimId=window.requestAnimationFrame(this._draw))}.bind(this),this._runFrames=function(){this._updateInterval&&clearInterval(this._updateInterval)}.bind(this),this._setProperty=function(t,e){this[t]=e,this._isGlobal&&(window[t]=e)}.bind(this),this.remove=function(){var t=document.getElementById(this._loadingScreenId);if(t&&(t.parentNode.removeChild(t),this._incrementPreload()),this._curElement){for(var e in this._loop=!1,this._requestAnimId&&window.cancelAnimationFrame(this._requestAnimId),this._events)window.removeEventListener(e,this._events[e]);for(var i=0;i-1?o.readAsText(n):o.readAsDataURL(n)}},this)):console.log("The File APIs are not fully supported in this browser."),this},s.Element.prototype._setProperty=function(t,e){this[t]=e},e.exports=s.Element},{"./main":24}],26:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");r.Graphics=function(t,e,i,o){var s=i||n.P2D;for(var a in this.canvas=document.createElement("canvas"),(o._userNode||document.body).appendChild(this.canvas),r.Element.call(this,this.canvas,o,!1),r.prototype)this[a]||("function"==typeof r.prototype[a]?this[a]=r.prototype[a].bind(this):this[a]=r.prototype[a]);return r.prototype._initializeInstanceVariables.apply(this),this.width=t,this.height=e,this._pixelDensity=o._pixelDensity,s===n.WEBGL?this._renderer=new r.RendererGL(this.canvas,this,!1):this._renderer=new r.Renderer2D(this.canvas,this,!1),o._elements.push(this),this._renderer.resize(t,e),this._renderer._applyDefaults(),this},r.Graphics.prototype=Object.create(r.Element.prototype),r.Graphics.prototype.remove=function(){this.elt.parentNode&&this.elt.parentNode.removeChild(this.elt);var t=this._pInst._elements.indexOf(this);for(var e in-1!==t&&this._pInst._elements.splice(t,1),this._events)this.elt.removeEventListener(e,this._events[e])},e.exports=r.Graphics},{"./constants":18,"./main":24}],27:[function(t,e,i){"use strict";function r(t){var e=0,i=0;if(t.offsetParent)do{e+=t.offsetLeft,i+=t.offsetTop}while(t=t.offsetParent);else e+=t.offsetLeft,i+=t.offsetTop;return[e,i]}var n=t("./main"),o=t("../core/constants");n.Renderer=function(t,e,i){n.Element.call(this,t,e),this.canvas=t,i?(this._isMainCanvas=!0,this._pInst._setProperty("_curElement",this),this._pInst._setProperty("canvas",this.canvas),this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height)):(this.canvas.style.display="none",this._styles=[]),this._textSize=12,this._textLeading=15,this._textFont="sans-serif",this._textStyle=o.NORMAL,this._textAscent=null,this._textDescent=null,this._textAlign=o.LEFT,this._textBaseline=o.BASELINE,this._rectMode=o.CORNER,this._ellipseMode=o.CENTER,this._curveTightness=0,this._imageMode=o.CORNER,this._tint=null,this._doStroke=!0,this._doFill=!0,this._strokeSet=!1,this._fillSet=!1},n.Renderer.prototype=Object.create(n.Element.prototype),n.Renderer.prototype.push=function(){return{properties:{_doStroke:this._doStroke,_strokeSet:this._strokeSet,_doFill:this._doFill,_fillSet:this._fillSet,_tint:this._tint,_imageMode:this._imageMode,_rectMode:this._rectMode,_ellipseMode:this._ellipseMode,_textFont:this._textFont,_textLeading:this._textLeading,_textSize:this._textSize,_textAlign:this._textAlign,_textBaseline:this._textBaseline,_textStyle:this._textStyle}}},n.Renderer.prototype.pop=function(t){t.properties&&Object.assign(this,t.properties)},n.Renderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.elt.width=t*this._pInst._pixelDensity,this.elt.height=e*this._pInst._pixelDensity,this.elt.style.width=t+"px",this.elt.style.height=e+"px",this._isMainCanvas&&(this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height))},n.Renderer.prototype.textLeading=function(t){return"number"==typeof t?(this._setProperty("_textLeading",t),this._pInst):this._textLeading},n.Renderer.prototype.textSize=function(t){return"number"==typeof t?(this._setProperty("_textSize",t),this._setProperty("_textLeading",t*o._DEFAULT_LEADMULT),this._applyTextProperties()):this._textSize},n.Renderer.prototype.textStyle=function(t){return t?(t!==o.NORMAL&&t!==o.ITALIC&&t!==o.BOLD||this._setProperty("_textStyle",t),this._applyTextProperties()):this._textStyle},n.Renderer.prototype.textAscent=function(){return null===this._textAscent&&this._updateTextMetrics(),this._textAscent},n.Renderer.prototype.textDescent=function(){return null===this._textDescent&&this._updateTextMetrics(),this._textDescent},n.Renderer.prototype.textAlign=function(t,e){return void 0!==t?(this._setProperty("_textAlign",t),void 0!==e&&this._setProperty("_textBaseline",e),this._applyTextProperties()):{horizontal:this._textAlign,vertical:this._textBaseline}},n.Renderer.prototype.text=function(t,e,i,r,n){var s,a,h,l,u,c,p,d,f=this._pInst,m=Number.MAX_VALUE;if((this._doFill||this._doStroke)&&void 0!==t){if("string"!=typeof t&&(t=t.toString()),t=t.replace(/(\t)/g," "),s=t.split("\n"),void 0!==r){for(d=0,h=0;hr?(u=p[a]+" ",d+=f.textLeading()):u=c;switch(this._rectMode===o.CENTER&&(e-=r/2,i-=n/2),this._textAlign){case o.CENTER:e+=r/2;break;case o.RIGHT:e+=r}var y=!1;if(void 0!==n){switch(this._textBaseline){case o.BOTTOM:i+=n-d;break;case o.CENTER:i+=(n-d)/2;break;case o.BASELINE:y=!0,this._textBaseline=o.TOP}m=i+n-f.textAscent()}for(h=0;hr&&u.length>0?(this._renderText(f,u,e,i,m),u=p[a]+" ",i+=f.textLeading()):u=c;this._renderText(f,u,e,i,m),i+=f.textLeading(),y&&(this._textBaseline=o.BASELINE)}}else{var v=0,g=f.textAlign().vertical;for(g===o.CENTER?v=(s.length-1)*f.textLeading()/2:g===o.BOTTOM&&(v=(s.length-1)*f.textLeading()),l=0;l0&&(c=u.width/t.width),this.drawingContext.drawImage(u,c*e,c*i,c*n,c*o,s,a,h,l)}catch(t){if("NS_ERROR_NOT_AVAILABLE"!==t.name)throw t}this._pInst._pixelsDirty=!0},r.Renderer2D.prototype._getTintedImageCanvas=function(t){if(!t.canvas)return t;var e=o._toPixels(t.canvas),i=document.createElement("canvas");i.width=t.canvas.width,i.height=t.canvas.height;for(var r=i.getContext("2d"),n=r.createImageData(t.canvas.width,t.canvas.height),s=n.data,a=0;a=this.width||e>=this.height)return[0,0,0,255];var o=this._pInst||this,s=o._pixelDensity;t=Math.floor(t),e=Math.floor(e),i=Math.floor(i),n=Math.floor(n);var a,h,l=t*s,u=e*s;if(1!==i||1!==n||this instanceof r.RendererGL){var c=Math.min(i,o.width),p=Math.min(n,o.height),d=c*s,f=p*s,m=new r.Image(c,p);return m.canvas.getContext("2d").drawImage(this.canvas,l,u,d,f,0,0,c,p),m}return o._pixelsDirty?(a=this.drawingContext.getImageData(l,u,1,1).data,h=0):(a=o.pixels,h=4*(l+u*this.width*s)),[a[h+0],a[h+1],a[h+2],a[h+3]]},r.Renderer2D.prototype.loadPixels=function(){var t=this._pInst||this;if(t._pixelsDirty){t._pixelsDirty=!1;var e=t._pixelDensity,i=this.width*e,r=this.height*e,n=this.drawingContext.getImageData(0,0,i,r);t._setProperty("imageData",n),t._setProperty("pixels",n.data)}},r.Renderer2D.prototype.set=function(t,e,i){t=Math.floor(t),e=Math.floor(e);var n=this._pInst||this;if(i instanceof r.Image)this.drawingContext.save(),this.drawingContext.setTransform(1,0,0,1,0,0),this.drawingContext.scale(n._pixelDensity,n._pixelDensity),this.drawingContext.drawImage(i.canvas,t,e),this.drawingContext.restore(),n._pixelsDirty=!0;else{var o=0,s=0,a=0,h=0,l=4*(e*n._pixelDensity*(this.width*n._pixelDensity)+t*n._pixelDensity);if(n.imageData&&!n._pixelsDirty||n.loadPixels.call(n),"number"==typeof i)l1e-5;)c=Math.min(s-o,n.HALF_PI),p.push(this._acuteArcToBezier(o,c)),o+=c;return this._doFill&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a!==n.PIE&&null!=a||h.lineTo(t,e),h.closePath(),h.fill()),this._doStroke&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a===n.PIE?(h.lineTo(t,e),h.closePath()):a===n.CHORD&&h.closePath(),h.stroke()),this},r.Renderer2D.prototype.ellipse=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;var l=.5522847498,u=a/2*l,c=h/2*l,p=n+a,d=o+h,f=n+a/2,m=o+h/2;e.beginPath(),e.moveTo(n,m),e.bezierCurveTo(n,m-c,f-u,o,f,o),e.bezierCurveTo(f+u,o,p,m-c,p,m),e.bezierCurveTo(p,m+c,f+u,d,f,d),e.bezierCurveTo(f-u,d,n,m+c,n,m),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.line=function(t,e,i,r){var n=this.drawingContext;return this._doStroke?this._getStroke()===s?this:(n.lineWidth%2==1&&n.translate(.5,.5),n.beginPath(),n.moveTo(t,e),n.lineTo(i,r),n.stroke(),n.lineWidth%2==1&&n.translate(-.5,-.5),this):this},r.Renderer2D.prototype.point=function(t,e){var i=this.drawingContext;if(!this._doStroke)return this;if(this._getStroke()===s)return this;var r=this._getStroke(),o=this._getFill();t=Math.round(t),e=Math.round(e),this._setFill(r),i.lineWidth>1?(i.beginPath(),i.arc(t,e,i.lineWidth/2,0,n.TWO_PI,!1),i.fill()):i.fillRect(t,e,1,1),this._setFill(o)},r.Renderer2D.prototype.quad=function(t,e,i,r,n,o,a,h){var l=this.drawingContext,u=this._doFill,c=this._doStroke;if(u&&!c){if(this._getFill()===s)return this}else if(!u&&c&&this._getStroke()===s)return this;return l.beginPath(),l.moveTo(t,e),l.lineTo(i,r),l.lineTo(n,o),l.lineTo(a,h),l.closePath(),u&&l.fill(),c&&l.stroke(),this},r.Renderer2D.prototype.rect=function(t){var e=t[0],i=t[1],r=t[2],n=t[3],o=t[4],a=t[5],h=t[6],l=t[7],u=this.drawingContext,c=this._doFill,p=this._doStroke;if(c&&!p){if(this._getFill()===s)return this}else if(!c&&p&&this._getStroke()===s)return this;if(this._doStroke&&u.lineWidth%2==1&&u.translate(.5,.5),u.beginPath(),void 0===o)u.rect(e,i,r,n);else{void 0===a&&(a=o),void 0===h&&(h=a),void 0===l&&(l=h);var d=r/2,f=n/2;r<2*o&&(o=d),n<2*o&&(o=f),r<2*a&&(a=d),n<2*a&&(a=f),r<2*h&&(h=d),n<2*h&&(h=f),r<2*l&&(l=d),n<2*l&&(l=f),u.beginPath(),u.moveTo(e+o,i),u.arcTo(e+r,i,e+r,i+n,a),u.arcTo(e+r,i+n,e,i+n,h),u.arcTo(e,i+n,e,i,l),u.arcTo(e,i,e+r,i,o),u.closePath()}return this._doFill&&u.fill(),this._doStroke&&u.stroke(),this._doStroke&&u.lineWidth%2==1&&u.translate(-.5,-.5),this},r.Renderer2D.prototype.triangle=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3],l=t[4],u=t[5];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;e.beginPath(),e.moveTo(n,o),e.lineTo(a,h),e.lineTo(l,u),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.endShape=function(t,e,i,r,o,s,a){if(0===e.length)return this;if(!this._doStroke&&!this._doFill)return this;var h,l=t===n.CLOSE;l&&!s&&e.push(e[0]);var u,c,p=e.length;if(!i||a!==n.POLYGON&&null!==a)if(!r||a!==n.POLYGON&&null!==a)if(!o||a!==n.POLYGON&&null!==a)if(a===n.POINTS)for(u=0;u2){for(this.drawingContext.beginPath(),u=2;u3)for(u=0;u+13){var d=[],f=1-this._curveTightness;for(this.drawingContext.beginPath(),this.drawingContext.moveTo(e[1][0],e[1][1]),u=1;u+2=o))return t.push(),this._isOpenType()?this._textFont._renderPath(e,i,r,{renderer:this}):(this._doStroke&&this._strokeSet&&this.drawingContext.strokeText(e,i,r),this._doFill&&(this._fillSet||this._setFill(n._DEFAULT_TEXT_FILL),this.drawingContext.fillText(e,i,r))),t.pop(),this._pInst._pixelsDirty=!0,t},r.Renderer2D.prototype.textWidth=function(t){return this._isOpenType()?this._textFont._textWidth(t,this._textSize):this.drawingContext.measureText(t).width},r.Renderer2D.prototype._applyTextProperties=function(){var t,e=this._pInst;return this._setProperty("_textAscent",null),this._setProperty("_textDescent",null),t=this._textFont,this._isOpenType()&&(t=this._textFont.font.familyName,this._setProperty("_textStyle",this._textFont.font.styleName)),this.drawingContext.font=(this._textStyle||"normal")+" "+(this._textSize||12)+"px "+(t||"sans-serif"),this.drawingContext.textAlign=this._textAlign,this._textBaseline===n.CENTER?this.drawingContext.textBaseline=n._CTX_MIDDLE:this.drawingContext.textBaseline=this._textBaseline,e},r.Renderer2D.prototype.push=function(){return this.drawingContext.save(),r.Renderer.prototype.push.apply(this)},r.Renderer2D.prototype.pop=function(t){this.drawingContext.restore(),this._cachedFillStyle=this.drawingContext.fillStyle,this._cachedStrokeStyle=this.drawingContext.strokeStyle,r.Renderer.prototype.pop.call(this,t)},e.exports=r.Renderer2D},{"../image/filters":42,"./constants":18,"./main":24,"./p5.Renderer":27}],29:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");t("./p5.Graphics"),t("./p5.Renderer2D"),t("../webgl/p5.RendererGL");var o="defaultCanvas0",s="p5Canvas";r.prototype.createCanvas=function(t,e,i){r._validateParameters("createCanvas",arguments);var a,h=i||n.P2D;if(h===n.WEBGL){if(a=document.getElementById(o)){a.parentNode.removeChild(a);var l=this._renderer;this._elements=this._elements.filter(function(t){return t!==l})}(a=document.createElement("canvas")).id=o,a.classList.add(s)}else if(this._defaultGraphicsCreated)a=this.canvas;else{a=document.createElement("canvas");for(var u=0;document.getElementById("defaultCanvas"+u);)u++;o="defaultCanvas"+u,a.id=o,a.classList.add(s)}return this._setupDone||(a.dataset.hidden=!0,a.style.visibility="hidden"),this._userNode?this._userNode.appendChild(a):document.body.appendChild(a),h===n.WEBGL?(this._setProperty("_renderer",new r.RendererGL(a,this,!0)),this._elements.push(this._renderer)):this._defaultGraphicsCreated||(this._setProperty("_renderer",new r.Renderer2D(a,this,!0)),this._defaultGraphicsCreated=!0,this._elements.push(this._renderer)),this._renderer.resize(t,e),this._renderer._applyDefaults(),this._renderer},r.prototype.resizeCanvas=function(t,e,i){if(r._validateParameters("resizeCanvas",arguments),this._renderer){var n={};for(var o in this.drawingContext){var s=this.drawingContext[o];"object"!=typeof s&&"function"!=typeof s&&(n[o]=s)}for(var a in this._renderer.resize(t,e),this.width=t,this.height=e,n)try{this.drawingContext[a]=n[a]}catch(t){}i||this.redraw()}},r.prototype.noCanvas=function(){this.canvas&&this.canvas.parentNode.removeChild(this.canvas)},r.prototype.createGraphics=function(t,e,i){return r._validateParameters("createGraphics",arguments),new r.Graphics(t,e,i,this)},r.prototype.blendMode=function(t){if(r._validateParameters("blendMode",arguments),t!==n.BLEND&&t!==n.DARKEST&&t!==n.LIGHTEST&&t!==n.DIFFERENCE&&t!==n.MULTIPLY&&t!==n.EXCLUSION&&t!==n.SCREEN&&t!==n.REPLACE&&t!==n.OVERLAY&&t!==n.HARD_LIGHT&&t!==n.SOFT_LIGHT&&t!==n.DODGE&&t!==n.BURN&&t!==n.ADD&&t!==n.NORMAL)throw new Error("Mode "+t+" not recognized.");this._renderer.blendMode(t)},e.exports=r},{"../webgl/p5.RendererGL":74,"./constants":18,"./main":24,"./p5.Graphics":26,"./p5.Renderer2D":28}],30:[function(t,e,i){"use strict";var r=t("../main"),n=t("../constants"),o=t("../helpers");t("../error_helpers"),r.prototype.arc=function(t,e,i,s,a,h,l,u){if(r._validateParameters("arc",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;for(a=this._toRadians(a),h=this._toRadians(h);a<0;)a+=n.TWO_PI;for(;h<0;)h+=n.TWO_PI;void 0!==a&&void 0!==h&&(h.toFixed(10)===a.toFixed(10)||Math.abs(h-a)===n.TWO_PI?(a%=n.TWO_PI,h%=n.TWO_PI,a+=n.TWO_PI):Math.abs(h-a)>n.TWO_PI&&(a%=n.TWO_PI,h%=n.TWO_PI,h+=n.TWO_PI)),a<=n.HALF_PI?a=Math.atan(i/s*Math.tan(a)):a>n.HALF_PI&&a<=3*n.HALF_PI&&(a=Math.atan(i/s*Math.tan(a))+n.PI),h<=n.HALF_PI?h=Math.atan(i/s*Math.tan(h)):h>n.HALF_PI&&h<=3*n.HALF_PI&&(h=Math.atan(i/s*Math.tan(h))+n.PI),a>h&&(h+=n.TWO_PI),i=Math.abs(i),s=Math.abs(s);var c=o.modeAdjust(t,e,i,s,this._renderer._ellipseMode);return this._renderer.arc(c.x,c.y,c.w,c.h,a,h,l,u),this},r.prototype.ellipse=function(t,e,i,n,s){if(r._validateParameters("ellipse",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;i<0&&(i=Math.abs(i)),void 0===n?n=i:n<0&&(n=Math.abs(n));var a=o.modeAdjust(t,e,i,n,this._renderer._ellipseMode);return this._renderer.ellipse([a.x,a.y,a.w,a.h,s]),this},r.prototype.line=function(){return r._validateParameters("line",arguments),this._renderer._doStroke&&this._renderer.line.apply(this._renderer,arguments),this},r.prototype.point=function(){return r._validateParameters("point",arguments),this._renderer._doStroke&&this._renderer.point.apply(this._renderer,arguments),this},r.prototype.quad=function(){return r._validateParameters("quad",arguments),(this._renderer._doStroke||this._renderer._doFill)&&this._renderer.quad.apply(this._renderer,arguments),this},r.prototype.rect=function(){if(r._validateParameters("rect",arguments),this._renderer._doStroke||this._renderer._doFill){for(var t=o.modeAdjust(arguments[0],arguments[1],arguments[2],arguments[3],this._renderer._rectMode),e=[t.x,t.y,t.w,t.h],i=4;i0))throw new Error("vertex() must be used once before calling quadraticVertex()");u=!0;for(var e=[],i=0;id||Math.abs(this.accelerationY-this.pAccelerationY)>d||Math.abs(this.accelerationZ-this.pAccelerationZ)>d)&&t();var e=this.deviceTurned||window.deviceTurned;if("function"==typeof e){var i=this.rotationX+180,r=this.pRotationX+180,m=a+180;i-r>0&&i-r<270||i-r<-270?u="clockwise":(i-r<0||i-r>270)&&(u="counter-clockwise"),u!==n&&(m=i),Math.abs(i-m)>90&&Math.abs(i-m)<270&&(m=i,this._setProperty("turnAxis","X"),e()),n=u,a=m-180;var y=this.rotationY+180,v=this.pRotationY+180,g=h+180;y-v>0&&y-v<270||y-v<-270?c="clockwise":(y-v<0||y-this.pRotationY>270)&&(c="counter-clockwise"),c!==o&&(g=y),Math.abs(y-g)>90&&Math.abs(y-g)<270&&(g=y,this._setProperty("turnAxis","Y"),e()),o=c,h=g-180,this.rotationZ-this.pRotationZ>0&&this.rotationZ-this.pRotationZ<270||this.rotationZ-this.pRotationZ<-270?p="clockwise":(this.rotationZ-this.pRotationZ<0||this.rotationZ-this.pRotationZ>270)&&(p="counter-clockwise"),p!==s&&(l=this.rotationZ),Math.abs(this.rotationZ-l)>90&&Math.abs(this.rotationZ-l)<270&&(l=this.rotationZ,this._setProperty("turnAxis","Z"),e()),s=p,this._setProperty("turnAxis",void 0)}var _,b,S=this.deviceShaken||window.deviceShaken;"function"==typeof S&&(null!==this.pAccelerationX&&(_=Math.abs(this.accelerationX-this.pAccelerationX),b=Math.abs(this.accelerationY-this.pAccelerationY)),_+b>f&&S())},e.exports=r},{"../core/main":24}],39:[function(t,e,i){"use strict";var r=t("../core/main"),n={};r.prototype.isKeyPressed=!1,r.prototype.keyIsPressed=!1,r.prototype.key="",r.prototype.keyCode=0,r.prototype._onkeydown=function(t){if(!n[t.which]){this._setProperty("isKeyPressed",!0),this._setProperty("keyIsPressed",!0),this._setProperty("keyCode",t.which),n[t.which]=!0,this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which);var e=this.keyPressed||window.keyPressed;"function"!=typeof e||t.charCode||!1===e(t)&&t.preventDefault()}},r.prototype._onkeyup=function(t){var e=this.keyReleased||window.keyReleased;n[t.which]=!1,function(){for(var t in n)if(n.hasOwnProperty(t)&&!0===n[t])return!0;return!1}()||(this._setProperty("isKeyPressed",!1),this._setProperty("keyIsPressed",!1)),this._setProperty("_lastKeyCodeTyped",null),this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which),this._setProperty("keyCode",t.which),"function"==typeof e&&!1===e(t)&&t.preventDefault()},r.prototype._onkeypress=function(t){if(t.which!==this._lastKeyCodeTyped){this._setProperty("keyCode",t.which),this._setProperty("_lastKeyCodeTyped",t.which),this._setProperty("key",String.fromCharCode(t.which));var e=this.keyTyped||window.keyTyped;"function"==typeof e&&!1===e(t)&&t.preventDefault()}},r.prototype._onblur=function(t){n={}},r.prototype.keyIsDown=function(t){return r._validateParameters("keyIsDown",arguments),n[t]},e.exports=r},{"../core/main":24}],40:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._hasMouseInteracted=!1,r.prototype.mouseX=0,r.prototype.mouseY=0,r.prototype.pmouseX=0,r.prototype.pmouseY=0,r.prototype.winMouseX=0,r.prototype.winMouseY=0,r.prototype.pwinMouseX=0,r.prototype.pwinMouseY=0,r.prototype.mouseButton=0,r.prototype.mouseIsPressed=!1,r.prototype._updateNextMouseCoords=function(t){if(null!==this._curElement&&(!t.touches||t.touches.length>0)){var e=function(t,e,i,r){r&&!r.clientX&&(r.touches?r=r.touches[0]:r.changedTouches&&(r=r.changedTouches[0]));var n=t.getBoundingClientRect(),o=t.scrollWidth/e,s=t.scrollHeight/i;return{x:(r.clientX-n.left)/o,y:(r.clientY-n.top)/s,winX:r.clientX,winY:r.clientY,id:r.identifier}}(this._curElement.elt,this.width,this.height,t);this._setProperty("mouseX",e.x),this._setProperty("mouseY",e.y),this._setProperty("winMouseX",e.winX),this._setProperty("winMouseY",e.winY)}this._hasMouseInteracted||(this._updateMouseCoords(),this._setProperty("_hasMouseInteracted",!0))},r.prototype._updateMouseCoords=function(){this._setProperty("pmouseX",this.mouseX),this._setProperty("pmouseY",this.mouseY),this._setProperty("pwinMouseX",this.winMouseX),this._setProperty("pwinMouseY",this.winMouseY),this._setProperty("_pmouseWheelDeltaY",this._mouseWheelDeltaY)},r.prototype._setMouseButton=function(t){1===t.button?this._setProperty("mouseButton",n.CENTER):2===t.button?this._setProperty("mouseButton",n.RIGHT):this._setProperty("mouseButton",n.LEFT)},r.prototype._onmousemove=function(t){var e=this._isGlobal?window:this;this._updateNextMouseCoords(t),this.mouseIsPressed?"function"==typeof e.mouseDragged?!1===e.mouseDragged(t)&&t.preventDefault():"function"==typeof e.touchMoved&&!1===e.touchMoved(t)&&t.preventDefault():"function"==typeof e.mouseMoved&&!1===e.mouseMoved(t)&&t.preventDefault()},r.prototype._onmousedown=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!0),this._setMouseButton(t),this._updateNextMouseCoords(t),"function"==typeof e.mousePressed?!1===e.mousePressed(t)&&t.preventDefault():"function"==typeof e.touchStarted&&!1===e.touchStarted(t)&&t.preventDefault()},r.prototype._onmouseup=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!1),"function"==typeof e.mouseReleased?!1===e.mouseReleased(t)&&t.preventDefault():"function"==typeof e.touchEnded&&!1===e.touchEnded(t)&&t.preventDefault()},r.prototype._ondragend=r.prototype._onmouseup,r.prototype._ondragover=r.prototype._onmousemove,r.prototype._onclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.mouseClicked&&!1===e.mouseClicked(t)&&t.preventDefault()},r.prototype._ondblclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.doubleClicked&&!1===e.doubleClicked(t)&&t.preventDefault()},r.prototype._mouseWheelDeltaY=0,r.prototype._pmouseWheelDeltaY=0,r.prototype._onwheel=function(t){var e=this._isGlobal?window:this;this._setProperty("_mouseWheelDeltaY",t.deltaY),"function"==typeof e.mouseWheel&&(t.delta=t.deltaY,!1===e.mouseWheel(t)&&t.preventDefault())},e.exports=r},{"../core/constants":18,"../core/main":24}],41:[function(t,e,i){"use strict";function r(t,e,i,r,n){n=n||0;var o=t.getBoundingClientRect(),s=t.scrollWidth/e,a=t.scrollHeight/i,h=r.touches[n]||r.changedTouches[n];return{x:(h.clientX-o.left)/s,y:(h.clientY-o.top)/a,winX:h.clientX,winY:h.clientY,id:h.identifier}}var n=t("../core/main");n.prototype.touches=[],n.prototype._updateTouchCoords=function(t){if(null!==this._curElement){for(var e=[],i=0;i=r)break;x=0}for(P=x;P=r);P++){var O=c[g+R];A=a[P],v+=A[(-16777216&O)>>>24],f+=A[(16711680&O)>>16],m+=A[(65280&O)>>8],y+=A[255&O],d+=s[P],g++}M[_=R+w]=v/d,E[_]=f/d,k[_]=m/d,C[_]=y/d}R+=r}for(R=0,S=(b=-n)*r,T=0;T=l)break;x=0,_=b,g=w+S}for(P=x;P=l);P++)A=a[P],v+=A[M[g]],f+=A[E[g]],m+=A[k[g]],y+=A[C[g]],d+=s[P],_++,g+=r;c[w+R]=v/d<<24|f/d<<16|m/d<<8|y/d}R+=r,S+=r,b++}h._setPixels(i,c)}var n,o,s,a,h={_toPixels:function(t){return t instanceof ImageData?t.data:t.getContext("2d").getImageData(0,0,t.width,t.height).data},_getARGB:function(t,e){var i=4*e;return t[i+3]<<24&4278190080|t[i]<<16&16711680|t[i+1]<<8&65280|255&t[i+2]},_setPixels:function(t,e){for(var i=0,r=0,n=t.length;r>>16,t[i+1]=(65280&e[r])>>>8,t[i+2]=255&e[r],t[i+3]=(4278190080&e[r])>>>24},_toImageData:function(t){return t instanceof ImageData?t:t.getContext("2d").getImageData(0,0,t.width,t.height)},_createImageData:function(t,e){return h._tmpCanvas=document.createElement("canvas"),h._tmpCtx=h._tmpCanvas.getContext("2d"),this._tmpCtx.createImageData(t,e)},apply:function(t,e,i){var r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),o=e(n,i);o instanceof ImageData?r.putImageData(o,0,0,0,0,t.width,t.height):r.putImageData(n,0,0,0,0,t.width,t.height)},threshold:function(t,e){var i=h._toPixels(t);void 0===e&&(e=.5);for(var r=Math.floor(255*e),n=0;n=r?255:0,i[n]=i[n+1]=i[n+2]=o}},gray:function(t){for(var e=h._toPixels(t),i=0;i255)throw new Error("Level must be greater than 2 and less than 255 for posterize");for(var r=e-1,n=0;n>8)/r,i[n+1]=255*(s*e>>8)/r,i[n+2]=255*(a*e>>8)/r}},dilate:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))>(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m>o&&(n=c,o=m),v>o&&(n=d,o=v),g>o&&(n=f,o=g),x[b++]=n;h._setPixels(_,x)},erode:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))<(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m=1&&(e=o[0]),o.length>=2&&(i=o[1]),i=i||r.prototype._checkFileExtension(e,i)[1]||"png"){default:n="image/png";break;case"jpeg":case"jpg":n="image/jpeg"}t.toBlob(function(t){r.prototype.downloadFile(t,e,i)},n)},r.prototype.saveFrames=function(t,e,i,o,s){r._validateParameters("saveFrames",arguments);var a=i||3;a=r.prototype.constrain(a,0,15),a*=1e3;var h=o||15;h=r.prototype.constrain(h,0,22);var l=0,u=r.prototype._makeFrame,c=this._curElement.elt,p=setInterval(function(){u(t+l,e,c),l++},1e3/h);setTimeout(function(){if(clearInterval(p),s)s(n);else for(var t=0;t0&&t0&&this.loadPixels(),this.setModified(!0),this._pixelsDirty=!0},r.Image.prototype.copy=function(){var t,e,i,n,o,s,a,h,l;if(9===arguments.length)t=arguments[0],e=arguments[1],i=arguments[2],n=arguments[3],o=arguments[4],s=arguments[5],a=arguments[6],h=arguments[7],l=arguments[8];else{if(8!==arguments.length)throw new Error("Signature not supported");t=this,e=arguments[0],i=arguments[1],n=arguments[2],o=arguments[3],s=arguments[4],a=arguments[5],h=arguments[6],l=arguments[7]}r.Renderer2D._copyHelper(this,t,e,i,n,o,s,a,h,l),this._pixelsDirty=!0},r.Image.prototype.mask=function(t){void 0===t&&(t=this);var e=this.drawingContext.globalCompositeOperation,i=1;t instanceof r.Renderer&&(i=t._pInst._pixelDensity);var n=[t,0,0,i*t.width,i*t.height,0,0,this.width,this.height];this.drawingContext.globalCompositeOperation="destination-in",r.Image.prototype.copy.apply(this,n),this.drawingContext.globalCompositeOperation=e,this.setModified(!0)},r.Image.prototype.filter=function(t,e){n.apply(this.canvas,n[t.toLowerCase()],e),this.setModified(!0)},r.Image.prototype.blend=function(){r.prototype.blend.apply(this,arguments),this.setModified(!0)},r.Image.prototype.setModified=function(t){this._modified=t},r.Image.prototype.isModified=function(){return this._modified},r.Image.prototype.save=function(t,e){r.prototype.saveCanvas(this.canvas,t,e)},e.exports=r.Image},{"../core/main":24,"./filters":42}],46:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("./filters");t("../color/p5.Color"),r.prototype.pixels=[],r.prototype.blend=function(){r._validateParameters("blend",arguments),this._renderer?this._renderer.blend.apply(this._renderer,arguments):r.Renderer2D.prototype.blend.apply(this,arguments)},r.prototype.copy=function(){r._validateParameters("copy",arguments),r.Renderer2D.prototype.copy.apply(this._renderer,arguments)},r.prototype.filter=function(t,e){r._validateParameters("filter",arguments),void 0!==this.canvas?n.apply(this.canvas,n[t.toLowerCase()],e):n.apply(this.elt,n[t.toLowerCase()],e)},r.prototype.get=function(t,e,i,r){return this._renderer.get(t,e,i,r)},r.prototype.loadPixels=function(){r._validateParameters("loadPixels",arguments),this._renderer.loadPixels()},r.prototype.set=function(t,e,i){this._renderer.set(t,e,i)},r.prototype.updatePixels=function(t,e,i,n){r._validateParameters("updatePixels",arguments),0!==this.pixels.length&&this._renderer.updatePixels(t,e,i,n)},e.exports=r},{"../color/p5.Color":16,"../core/main":24,"./filters":42}],47:[function(t,e,i){"use strict";function r(t,e){var i={};if(void 0===(e=e||[]))for(var r=0;r/g,">").replace(/"/g,""").replace(/'/g,"'")}function o(t,e){e&&!0!==e&&"true"!==e||(e=""),t||(t="untitled");var i="";return t&&t.indexOf(".")>-1&&(i=t.split(".").pop()),e&&i!==e&&(t=t+"."+(i=e)),[t,i]}var s=t("../core/main");t("whatwg-fetch"),t("es6-promise").polyfill();var a=t("fetch-jsonp");t("../core/error_helpers"),s.prototype.loadJSON=function(){s._validateParameters("loadJSON",arguments);for(var t,e,i,r=arguments[0],n={},o="json",a=1;a0&&"function"==typeof arguments[u];u--)h++;var c=arguments.length-h,p=arguments[0];if(2===c&&"string"==typeof p&&"object"==typeof arguments[1])r=new Request(p,arguments[1]),e=arguments[2],i=arguments[3];else{for(var d,f="GET",m=1;m64e6&&s._friendlyFileLoadError(7,p),t){case"json":case"jsonp":return e.json();case"binary":return e.blob();case"arrayBuffer":return e.arrayBuffer();case"xml":return e.text().then(function(t){return function t(e){var i=new s.XML,r=e.childNodes;if(r&&r.length){for(var n=0;n"),o.print("");var p=' "),o.print(""),o.print(" "),"0"!==a[0]){o.print(" ");for(var d=0;d"+f),o.print(" ")}o.print(" ")}for(var m=0;m");for(var y=0;y"+g),o.print(" ")}o.print(" ")}o.print("
"),o.print(""),o.print("")}o.close(),o.clear()},s.prototype.writeFile=function(t,e,i){var r="application/octet-stream";s.prototype._isSafari()&&(r="text/plain");var n=new Blob(t,{type:r});s.prototype.downloadFile(n,e,i)},s.prototype.downloadFile=function(e,i,r){var n=o(i,r),a=n[0];if(e instanceof Blob)t("file-saver").saveAs(e,a);else{var h=document.createElement("a");if(h.href=e,h.download=a,h.onclick=function(t){(function(t){document.body.removeChild(t.target)})(t),t.stopPropagation()},h.style.display="none",document.body.appendChild(h),s.prototype._isSafari()){var l="Hello, Safari user! To download this file...\n";l+="1. Go to File --\x3e Save As.\n",l+='2. Choose "Page Source" as the Format.\n',l+='3. Name it with this extension: ."'+n[1]+'"',alert(l)}h.click()}},s.prototype._checkFileExtension=o,s.prototype._isSafari=function(){return Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0},e.exports=s},{"../core/error_helpers":20,"../core/main":24,"es6-promise":4,"fetch-jsonp":5,"file-saver":6,"whatwg-fetch":12}],48:[function(t,e,i){"use strict";var r=t("../core/main");r.Table=function(t){this.columns=[],this.rows=[]},r.Table.prototype.addRow=function(t){var e=t||new r.TableRow;if(void 0===e.arr||void 0===e.obj)throw new Error("invalid TableRow: "+e);return e.table=this,this.rows.push(e),e},r.Table.prototype.removeRow=function(t){this.rows[t].table=null;var e=this.rows.splice(t+1,this.rows.length);this.rows.pop(),this.rows=this.rows.concat(e)},r.Table.prototype.getRow=function(t){return this.rows[t]},r.Table.prototype.getRows=function(){return this.rows},r.Table.prototype.findRow=function(t,e){if("string"==typeof e){for(var i=0;i=0))throw new Error('This table has no column named "'+t+'"');i=e[t],r[i]=e}else r[n]=this.rows[n].obj;return r},r.Table.prototype.getArray=function(){for(var t=[],e=0;e=0))throw new Error('This table has no column named "'+t+'"');this.obj[t]=e,this.arr[i]=e}else{if(!(t0},r.XML.prototype.listChildren=function(){return this.children.map(function(t){return t.name})},r.XML.prototype.getChildren=function(t){return t?this.children.filter(function(e){return e.name===t}):this.children},r.XML.prototype.getChild=function(t){if("string"!=typeof t)return this.children[t];for(var e=0;eo&&(o=a),n[s]=a}0===o&&(o=1);for(var h=0,l=0,u=0;u=1&&(f++,v--),g>=1&&(m++,g--),_>=1&&(y++,_--)}return b},n.prototype.noiseDetail=function(t,e){t>0&&(s=t),e>0&&(a=e)},n.prototype.noiseSeed=function(t){var e=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();e.setSeed(t),r=new Array(o+1);for(var i=0;it*t&&this.div(Math.sqrt(e)).mult(t),this},r.Vector.prototype.setMag=function(t){return this.normalize().mult(t)},r.Vector.prototype.heading=function(){var t=Math.atan2(this.y,this.x);return this.p5?this.p5._fromRadians(t):t},r.Vector.prototype.rotate=function(t){var e=this.heading()+t;this.p5&&(e=this.p5._toRadians(e));var i=this.mag();return this.x=Math.cos(e)*i,this.y=Math.sin(e)*i,this},r.Vector.prototype.angleBetween=function(t){var e=this.dot(t)/(this.mag()*t.mag()),i=Math.acos(Math.min(1,Math.max(-1,e)));return this.p5?this.p5._fromRadians(i):i},r.Vector.prototype.lerp=function(t,e,i,n){return t instanceof r.Vector?this.lerp(t.x,t.y,t.z,e):(this.x+=(t-this.x)*n||0,this.y+=(e-this.y)*n||0,this.z+=(i-this.z)*n||0,this)},r.Vector.prototype.array=function(){return[this.x||0,this.y||0,this.z||0]},r.Vector.prototype.equals=function(t,e,i){var n,o,s;return t instanceof r.Vector?(n=t.x||0,o=t.y||0,s=t.z||0):t instanceof Array?(n=t[0]||0,o=t[1]||0,s=t[2]||0):(n=t||0,o=e||0,s=i||0),this.x===n&&this.y===o&&this.z===s},r.Vector.fromAngle=function(t,e){return void 0===e&&(e=1),new r.Vector(e*Math.cos(t),e*Math.sin(t),0)},r.Vector.fromAngles=function(t,e,i){void 0===i&&(i=1);var n=Math.cos(e),o=Math.sin(e),s=Math.cos(t),a=Math.sin(t);return new r.Vector(i*a*o,-i*s,i*a*n)},r.Vector.random2D=function(){return this.fromAngle(Math.random()*n.TWO_PI)},r.Vector.random3D=function(){var t=Math.random()*n.TWO_PI,e=2*Math.random()-1,i=Math.sqrt(1-e*e),o=i*Math.cos(t),s=i*Math.sin(t);return new r.Vector(o,s,e)},r.Vector.add=function(t,e,i){return i?i.set(t):i=t.copy(),i.add(e),i},r.Vector.sub=function(t,e,i){return i?i.set(t):i=t.copy(),i.sub(e),i},r.Vector.mult=function(t,e,i){return i?i.set(t):i=t.copy(),i.mult(e),i},r.Vector.div=function(t,e,i){return i?i.set(t):i=t.copy(),i.div(e),i},r.Vector.dot=function(t,e){return t.dot(e)},r.Vector.cross=function(t,e){return t.cross(e)},r.Vector.dist=function(t,e){return t.dist(e)},r.Vector.lerp=function(t,e,i,r){return r?r.set(t):r=t.copy(),r.lerp(e,i),r},r.Vector.mag=function(t){var e=t.x,i=t.y,r=t.z,n=e*e+i*i+r*r;return Math.sqrt(n)},e.exports=r.Vector},{"../core/constants":18,"../core/main":24}],55:[function(t,e,i){"use strict";var r=t("../core/main"),n=!1,o=!1,s=0,a=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();r.prototype.randomSeed=function(t){a.setSeed(t),n=!0,o=!1},r.prototype.random=function(t,e){var i;if(i=n?a.rand():Math.random(),void 0===t)return i;if(void 0===e)return t instanceof Array?t[Math.floor(i*t.length)]:i*t;if(t>e){var r=t;t=e,e=r}return i*(e-t)+t},r.prototype.randomGaussian=function(t,e){var i,r,n,a;if(o)i=s,o=!1;else{do{r=this.random(2)-1,n=this.random(2)-1,a=r*r+n*n}while(a>=1);a=Math.sqrt(-2*Math.log(a)/a),i=r*a,s=n*a,o=!0}var h=t||0;return i*(e||1)+h},e.exports=r},{"../core/main":24}],56:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._angleMode=n.RADIANS,r.prototype.acos=function(t){return this._fromRadians(Math.acos(t))},r.prototype.asin=function(t){return this._fromRadians(Math.asin(t))},r.prototype.atan=function(t){return this._fromRadians(Math.atan(t))},r.prototype.atan2=function(t,e){return this._fromRadians(Math.atan2(t,e))},r.prototype.cos=function(t){return Math.cos(this._toRadians(t))},r.prototype.sin=function(t){return Math.sin(this._toRadians(t))},r.prototype.tan=function(t){return Math.tan(this._toRadians(t))},r.prototype.degrees=function(t){return t*n.RAD_TO_DEG},r.prototype.radians=function(t){return t*n.DEG_TO_RAD},r.prototype.angleMode=function(t){t!==n.DEGREES&&t!==n.RADIANS||(this._angleMode=t)},r.prototype._toRadians=function(t){return this._angleMode===n.DEGREES?t*n.DEG_TO_RAD:t},r.prototype._toDegrees=function(t){return this._angleMode===n.RADIANS?t*n.RAD_TO_DEG:t},r.prototype._fromRadians=function(t){return this._angleMode===n.DEGREES?t*n.RAD_TO_DEG:t},e.exports=r},{"../core/constants":18,"../core/main":24}],57:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.textAlign=function(t,e){return r._validateParameters("textAlign",arguments),this._renderer.textAlign.apply(this._renderer,arguments)},r.prototype.textLeading=function(t){return r._validateParameters("textLeading",arguments),this._renderer.textLeading.apply(this._renderer,arguments)},r.prototype.textSize=function(t){return r._validateParameters("textSize",arguments),this._renderer.textSize.apply(this._renderer,arguments)},r.prototype.textStyle=function(t){return r._validateParameters("textStyle",arguments),this._renderer.textStyle.apply(this._renderer,arguments)},r.prototype.textWidth=function(t){return r._validateParameters("textWidth",arguments),0===t.length?0:this._renderer.textWidth.apply(this._renderer,arguments)},r.prototype.textAscent=function(){return r._validateParameters("textAscent",arguments),this._renderer.textAscent()},r.prototype.textDescent=function(){return r._validateParameters("textDescent",arguments),this._renderer.textDescent()},r.prototype._updateTextMetrics=function(){return this._renderer._updateTextMetrics()},e.exports=r},{"../core/main":24}],58:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("opentype.js");t("../core/error_helpers"),r.prototype.loadFont=function(t,e,i){r._validateParameters("loadFont",arguments);var n=new r.Font(this),s=this;return o.load(t,function(o,a){if(o)return void 0!==i?i(o):(r._friendlyFileLoadError(4,t),void console.error(o,t));n.font=a,void 0!==e&&e(n),s._decrementPreload();var h,l,u=t.split("\\").pop().split("/").pop(),c=u.lastIndexOf("."),p=c<1?null:u.substr(c+1);["ttf","otf","woff","woff2"].indexOf(p)>-1&&(h=u.substr(0,c),(l=document.createElement("style")).appendChild(document.createTextNode("\n@font-face {\nfont-family: "+h+";\nsrc: url("+t+");\n}\n")),document.head.appendChild(l))}),n},r.prototype.text=function(t,e,i,n,o){return r._validateParameters("text",arguments),this._renderer._doFill||this._renderer._doStroke?this._renderer.text.apply(this._renderer,arguments):this},r.prototype.textFont=function(t,e){if(r._validateParameters("textFont",arguments),arguments.length){if(!t)throw new Error("null font passed to textFont");return this._renderer._setProperty("_textFont",t),e&&(this._renderer._setProperty("_textSize",e),this._renderer._setProperty("_textLeading",e*n._DEFAULT_LEADMULT)),this._renderer._applyTextProperties()}return this._renderer._textFont},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"opentype.js":10}],59:[function(t,e,i){"use strict";function r(t,e){for(var i=function(t,e){if("object"!=typeof t)t=e;else for(var i in e)void 0===t[i]&&(t[i]=e[i]);return t}(e,{sampleFactor:.1,simplifyThreshold:0}),r=c(t,0,1),o=r/(r*i.sampleFactor),s=[],a=0;a3&&r>=0;--r)h(a(t,r-1),a(t,r),a(t,r+1),e)&&(t.splice(r%t.length,1),i++);return i}function o(t){for(var e,i=[],r=0;rg||v<_)&&(T+=180),{x:f,y:m,m:{x:y,y:v},n:{x:g,y:_},start:{x:b,y:S},end:{x:x,y:w},alpha:T}}function u(t,e,i,r,n,o,s,a,h){return null==h?v(t,e,i,r,n,o,s,a):l(t,e,i,r,n,o,s,a,function(t,e,i,r,n,o,s,a,h){if(!(h<0||v(t,e,i,r,n,o,s,a).01;)u/=2,l=v(t,e,i,r,n,o,s,a,c+=(le&&!i)return{x:(a=u(r,n,o[1],o[2],o[3],o[4],o[5],o[6],e-h)).x,y:a.y,alpha:a.alpha};h+=s,r=+o[5],n=+o[6]}o.shift()}return(a=i?h:l(r,n,o[0],o[1],o[2],o[3],o[4],o[5],1)).alpha&&(a={x:a.x,y:a.y,alpha:a.alpha}),a}function p(t){var e=[],i=0,r=0,n=0,o=0,s=0;if(!t)return e;"M"===t[0][0]&&(i=+t[0][1],r=+t[0][2],n=i,o=r,s++,e[0]=["M",i,r]);for(var a,h,l,u=3===t.length&&"M"===t[0][0]&&"R"===t[1][0].toUpperCase()&&"Z"===t[2][0].toUpperCase(),c=s,p=t.length;c1&&(w=Math.sqrt(w),r*=w,n*=w);var T=r*r,P=n*n,A=(s===a?-1:1)*Math.sqrt(Math.abs((T*P-T*x*x-P*S*S)/(T*x*x+P*S*S)));d=A*r*x/n+(e+h)/2,f=A*-n*S/r+(i+l)/2,c=Math.asin(((i-f)/n).toFixed(9)),p=Math.asin(((l-f)/n).toFixed(9)),c=ep&&(c-=2*y),!a&&p>c&&(p-=2*y)}var M=p-c;if(Math.abs(M)>v){var E=p,k=h,C=l;p=c+v*(a&&p>c?1:-1),h=d+r*Math.cos(p),l=f+n*Math.sin(p),_=t(h,l,r,n,o,0,a,k,C,[p,E,d,f])}M=p-c;var R=Math.cos(c),O=Math.sin(c),L=Math.cos(p),F=Math.sin(p),I=Math.tan(M/4),D=4/3*r*I,U=4/3*n*I,B=[e,i],N=[e+D*O,i-U*R],G=[h+D*F,l-U*L],q=[h,l];if(N[0]=2*B[0]-N[0],N[1]=2*B[1]-N[1],u)return[N,G,q].concat(_);for(var V=[],j=0,z=(_=[N,G,q].concat(_).join().split(",")).length;j7){t[e].shift();for(var o=t[e];o.length;)a[e]="A",n&&(h[e]="A"),t.splice(e++,0,["C"].concat(o.splice(0,6)));t.splice(e,1),i=Math.max(r.length,n&&n.length||0)}},c=function(t,e,o,s,a){t&&e&&"M"===t[a][0]&&"M"!==e[a][0]&&(e.splice(a,0,["M",s.x,s.y]),o.bx=0,o.by=0,o.x=t[a][1],o.y=t[a][2],i=Math.max(r.length,n&&n.length||0))},d="",f="";i=Math.max(r.length,n&&n.length||0);for(var v=0;vr;r+=2){var o=[{x:+t[r-2],y:+t[r-1]},{x:+t[r],y:+t[r+1]},{x:+t[r+2],y:+t[r+3]},{x:+t[r+4],y:+t[r+5]}];e?r?n-4===r?o[3]={x:+t[0],y:+t[1]}:n-2===r&&(o[2]={x:+t[0],y:+t[1]},o[3]={x:+t[2],y:+t[3]}):o[0]={x:+t[n-2],y:+t[n-1]}:n-4===r?o[3]=o[2]:r||(o[0]={x:+t[r],y:+t[r+1]}),i.push(["C",(-o[0].x+6*o[1].x+o[2].x)/6,(-o[0].y+6*o[1].y+o[2].y)/6,(o[1].x+6*o[2].x-o[3].x)/6,(o[1].y+6*o[2].y-o[3].y)/6,o[2].x,o[2].y])}return i}function m(t,e,i,r){return[t,e,i,r,i,r]}function y(t,e,i,r,n,o){var s=1/3,a=2/3;return[s*t+a*i,s*e+a*r,s*n+a*i,s*o+a*r,n,o]}function v(t,e,i,r,n,o,s,a,h){null==h&&(h=1);for(var l=(h=h>1?1:h<0?0:h)/2,u=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],c=0,p=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],d=0;d<12;d++){var f=l*u[d]+l,m=g(f,t,i,n,s),y=g(f,e,r,o,a),v=m*m+y*y;c+=p[d]*Math.sqrt(v)}return l*c}function g(t,e,i,r,n){return t*(t*(-3*e+9*i-9*r+3*n)+6*e-12*i+6*r)-3*e+3*i}function _(){for(var t="",e=arguments.length-1;e>=0;--e){var i=arguments[e];t+=i===Object(i)?JSON.stringify(i):i}return t}var b=t("../core/main"),S=t("../core/constants");b.Font=function(t){this.parent=t,this.cache={},this.font=void 0},b.Font.prototype.list=function(){throw new Error("not yet implemented")},b.Font.prototype.textBounds=function(t,e,i,r,n){e=void 0!==e?e:0,i=void 0!==i?i:0,r=r||this.parent._renderer._textSize;var o=n&&n.renderer&&n.renderer._pInst||this.parent,s=o._renderer,a=s._textAlign||S.LEFT,h=s._textBaseline||S.BASELINE,l=_("textBounds",t,e,i,r,a,h),u=this.cache[l];if(!u){var c,p,d,f,m,y=[],v=[],g=this._scale(r);this.font.forEachGlyph(t,e,i,r,n,function(t,e,i,r){var n=t.getMetrics();y.push(e+n.xMin*g),y.push(e+n.xMax*g),v.push(i+-n.yMin*g),v.push(i+-n.yMax*g)}),c=Math.min.apply(null,y),p=Math.min.apply(null,v),d=Math.max.apply(null,y),f=Math.max.apply(null,v),u={x:c,y:p,h:f-p,w:d-c,advance:c-e},m=this._handleAlignment(s,t,u.x,u.y,u.w+u.advance),u.x=m.x,u.y=m.y,this.cache[_("textBounds",t,e,i,r,a,h)]=u}return u},b.Font.prototype.textToPoints=function(t,e,i,n,s){function a(e){return u[e].name&&"space"===u[e].name||t.length===u.length&&" "===t[e]||u[e].index&&3===u[e].index}var h=0,l=[],u=this._getGlyphs(t);n=n||this.parent._renderer._textSize;for(var c=0;c2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&"number"==typeof r.decimals&&(n=r.decimals),t.toPathData(n)},b.Font.prototype._getSVG=function(t,e,i,r){var n=3;return"string"==typeof t&&arguments.length>2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&("number"==typeof r.decimals&&(n=r.decimals),"number"==typeof r.strokeWidth&&(t.strokeWidth=r.strokeWidth),void 0!==r.fill&&(t.fill=r.fill),void 0!==r.stroke&&(t.stroke=r.stroke)),t.toSVG(n)},b.Font.prototype._renderPath=function(t,e,i,r){var n,o=r&&r.renderer||this.parent._renderer,s=o.drawingContext;n="object"==typeof t&&t.commands?t.commands:this._getPath(t,e,i,r).commands,s.beginPath();for(var a=0;a1;)i=Math.random()*o|0,r=t[--o],t[o]=t[i],t[i]=r;return t},r.prototype.sort=function(t,e){var i=e?t.slice(0,Math.min(e,t.length)):t,r=e?t.slice(Math.min(e,t.length)):[];return(i="string"==typeof i[0]?i.sort():i.sort(function(t,e){return t-e})).concat(r)},r.prototype.splice=function(t,e,i){return Array.prototype.splice.apply(t,[i,0].concat(e)),t},r.prototype.subset=function(t,e,i){return void 0!==i?t.slice(e,e+i):t.slice(e,t.length)},e.exports=r},{"../core/main":24}],61:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.float=function(t){return t instanceof Array?t.map(parseFloat):parseFloat(t)},r.prototype.int=function(t,e){return e=e||10,"string"==typeof t?parseInt(t,e):"number"==typeof t?0|t:"boolean"==typeof t?t?1:0:t instanceof Array?t.map(function(t){return r.prototype.int(t,e)}):void 0},r.prototype.str=function(t){return t instanceof Array?t.map(r.prototype.str):String(t)},r.prototype.boolean=function(t){return"number"==typeof t?0!==t:"string"==typeof t?"true"===t.toLowerCase():"boolean"==typeof t?t:t instanceof Array?t.map(r.prototype.boolean):void 0},r.prototype.byte=function(t){var e=r.prototype.int(t,10);return"number"==typeof e?(e+128)%256-128:e instanceof Array?e.map(r.prototype.byte):void 0},r.prototype.char=function(t){return"number"!=typeof t||isNaN(t)?t instanceof Array?t.map(r.prototype.char):"string"==typeof t?r.prototype.char(parseInt(t,10)):void 0:String.fromCharCode(t)},r.prototype.unchar=function(t){return"string"==typeof t&&1===t.length?t.charCodeAt(0):t instanceof Array?t.map(r.prototype.unchar):void 0},r.prototype.hex=function(t,e){if(e=void 0===e||null===e?e=8:e,t instanceof Array)return t.map(function(t){return r.prototype.hex(t,e)});if("number"==typeof t){t<0&&(t=4294967295+t+1);for(var i=Number(t).toString(16).toUpperCase();i.length=e&&(i=i.substring(i.length-e,i.length)),i}},r.prototype.unhex=function(t){return t instanceof Array?t.map(r.prototype.unhex):parseInt("0x"+t,16)},e.exports=r},{"../core/main":24}],62:[function(t,e,i){"use strict";function r(t,e,i){var r=t<0,n=r?t.toString().substring(1):t.toString(),o=n.indexOf("."),s=-1!==o?n.substring(0,o):n,a=-1!==o?n.substring(o+1):"",h=r?"-":"";if(void 0!==i){var l="";(-1!==o||i-a.length>0)&&(l="."),a.length>i&&(a=a.substring(0,i));for(var u=0;ur.length)for(var o=e-(r+=-1===i?".":"").length+1,s=0;s0?"+"+t.toString():t.toString()}function s(t){return parseFloat(t)>0?" "+t.toString():t.toString()}var a=t("../core/main");t("../core/error_helpers"),a.prototype.join=function(t,e){return a._validateParameters("join",arguments),t.join(e)},a.prototype.match=function(t,e){return a._validateParameters("match",arguments),t.match(e)},a.prototype.matchAll=function(t,e){a._validateParameters("matchAll",arguments);for(var i=new RegExp(e,"g"),r=i.exec(t),n=[];null!==r;)n.push(r),r=i.exec(t);return n},a.prototype.nf=function(t,e,i){return a._validateParameters("nf",arguments),t instanceof Array?t.map(function(t){return r(t,e,i)}):"[object Arguments]"===Object.prototype.toString.call(t)?3===t.length?this.nf(t[0],t[1],t[2]):2===t.length?this.nf(t[0],t[1]):this.nf(t[0]):r(t,e,i)},a.prototype.nfc=function(t,e){return a._validateParameters("nfc",arguments),t instanceof Array?t.map(function(t){return n(t,e)}):n(t,e)},a.prototype.nfp=function(){a._validateParameters("nfp",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(o):o(t)},a.prototype.nfs=function(){a._validateParameters("nfs",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(s):s(t)},a.prototype.split=function(t,e){return a._validateParameters("split",arguments),t.split(e)},a.prototype.splitTokens=function(t,e){var i;if(a._validateParameters("splitTokens",arguments),void 0!==e){var r=e,n=/\]/g.exec(r),o=/\[/g.exec(r);o&&n?(r=r.slice(0,n.index)+r.slice(n.index+1),o=/\[/g.exec(r),r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("[\\["+r+"\\]]","g")):n?(r=r.slice(0,n.index)+r.slice(n.index+1),i=new RegExp("["+r+"\\]]","g")):o?(r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("["+r+"\\[]","g")):i=new RegExp("["+r+"]","g")}else i=/\s/g;return t.split(i).filter(function(t){return t})},a.prototype.trim=function(t){return a._validateParameters("trim",arguments),t instanceof Array?t.map(this.trim):t.trim()},e.exports=a},{"../core/error_helpers":20,"../core/main":24}],63:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.day=function(){return(new Date).getDate()},r.prototype.hour=function(){return(new Date).getHours()},r.prototype.minute=function(){return(new Date).getMinutes()},r.prototype.millis=function(){return window.performance.now()},r.prototype.month=function(){return(new Date).getMonth()+1},r.prototype.second=function(){return(new Date).getSeconds()},r.prototype.year=function(){return(new Date).getFullYear()},e.exports=r},{"../core/main":24}],64:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry");var n=t("../core/constants");r.prototype.plane=function(t,e,i,n){this._assert3d("plane"),r._validateParameters("plane",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=1),void 0===n&&(n=1);var o="plane|"+i+"|"+n;if(!this._renderer.geometryInHash(o)){var s=new r.Geometry(i,n,function(){for(var t,e,i,n=0;n<=this.detailY;n++){e=n/this.detailY;for(var o=0;o<=this.detailX;o++)t=o/this.detailX,i=new r.Vector(t-.5,e-.5,0),this.vertices.push(i),this.uvs.push(t,e)}});s.computeFaces().computeNormals(),i<=1&&n<=1?s._makeTriangleEdges()._edgesToVertices():console.log("Cannot draw stroke on plane objects with more than 1 detailX or 1 detailY"),this._renderer.createBuffers(o,s)}return this._renderer.drawBuffersScaled(o,t,e,1),this},r.prototype.box=function(t,e,i,n,o){this._assert3d("box"),r._validateParameters("box",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=e);var s=this._renderer.attributes&&this._renderer.attributes.perPixelLighting;void 0===n&&(n=s?1:4),void 0===o&&(o=s?1:4);var a="box|"+n+"|"+o;if(!this._renderer.geometryInHash(a)){var h=new r.Geometry(n,o,function(){var t=[[0,4,2,6],[1,3,5,7],[0,1,4,5],[2,6,3,7],[0,2,1,3],[4,5,6,7]];this.strokeIndices=[[0,1],[1,3],[3,2],[6,7],[8,9],[9,11],[14,15],[16,17],[17,19],[18,19],[20,21],[22,23]];for(var e=0;eo?(_=i,g=1,v=e):v=t+(e-t)*g,-2!==h&&h!==o+2||(v=0),_-=i/2,m[h]=0===v?1:n,l=0;lo?0:Math.sin(2*b*Math.PI)*Math.cos(y),h<0?-1:h>o?1:Math.sin(y),h<0||h>o?0:Math.cos(2*b*Math.PI)*Math.cos(y))),this.uvs.push(b,g)}}var S=0;if(s){for(u=0;u=n.TWO_PI?(e="ellipse")+"|"+p+"|":(e="arc")+"|"+l+"|"+u+"|"+c+"|"+p+"|",!this.geometryInHash(i)){var d=new r.Geometry(p,1,function(){if(this.strokeIndices=[],l.toFixed(10)!==u.toFixed(10)){c!==n.PIE&&void 0!==c||(this.vertices.push(new r.Vector(.5,.5,0)),this.uvs.push([.5,.5]));for(var t=0;t<=p;t++){var e=t/p,i=(u-l)*e+l,o=.5+Math.cos(i)/2,s=.5+Math.sin(i)/2;this.vertices.push(new r.Vector(o,s,0)),this.uvs.push([o,s]),t0&&h>0&&(this.strokeIndices=[[0,a],[a,(a+1)*(h+1)-1],[(a+1)*(h+1)-1,(a+1)*h],[(a+1)*h,0]])});u.computeFaces().computeNormals()._makeTriangleEdges()._edgesToVertices(),this.createBuffers(l,u)}var c=this.uMVMatrix.copy();try{this.uMVMatrix.translate([i,n,0]),this.uMVMatrix.scale(o,s,1),this.drawBuffers(l)}finally{this.uMVMatrix=c}return this},r.RendererGL.prototype.quad=function(t,e,i,n,o,s,a,h){var l="quad|"+t+"|"+e+"|"+i+"|"+n+"|"+o+"|"+s+"|"+a+"|"+h;if(!this.geometryInHash(l)){var u=new r.Geometry(2,2,function(){this.vertices.push(new r.Vector(t,e,0)),this.vertices.push(new r.Vector(i,n,0)),this.vertices.push(new r.Vector(o,s,0)),this.vertices.push(new r.Vector(a,h,0)),this.uvs.push(0,0,1,0,1,1,0,1),this.strokeIndices=[[0,1],[1,2],[2,3],[3,0]]});u.computeNormals()._makeTriangleEdges()._edgesToVertices(),u.faces=[[0,1,2],[2,3,0]],this.createBuffers(l,u)}return this.drawBuffers(l),this},r.RendererGL.prototype.bezier=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._bezierDetail||20;this.beginShape();for(var d=0;d<=p;d++){var f=Math.pow(1-d/p,3),m=d/p*3*Math.pow(1-d/p,2),y=3*Math.pow(d/p,2)*(1-d/p),v=Math.pow(d/p,3);this.vertex(t*f+r*m+s*y+l*v,e*f+n*m+a*y+u*v,i*f+o*m+h*y+c*v)}return this.endShape(),this},r.RendererGL.prototype.curve=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._curveDetail;this.beginShape();for(var d=0;d<=p;d++){var f=.5*Math.pow(d/p,3),m=.5*Math.pow(d/p,2),y=d/p*.5,v=f*(3*r-t-3*s+l)+m*(2*t-5*r+4*s-l)+y*(-t+s)+2*r*.5,g=f*(3*n-e-3*a+u)+m*(2*e-5*n+4*a-u)+y*(-e+a)+2*n*.5,_=f*(3*o-i-3*h+c)+m*(2*i-5*o+4*h-c)+y*(-i+h)+2*o*.5;this.vertex(v,g,_)}return this.endShape(),this},r.RendererGL.prototype.line=function(){return 6===arguments.length?(this.beginShape(),this.vertex(arguments[0],arguments[1],arguments[2]),this.vertex(arguments[3],arguments[4],arguments[5]),this.endShape()):4===arguments.length&&(this.beginShape(),this.vertex(arguments[0],arguments[1],0),this.vertex(arguments[2],arguments[3],0),this.endShape()),this},r.RendererGL.prototype.bezierVertex=function(){if(0===this.immediateMode._bezierVertex.length)throw Error("vertex() must be used once before calling bezierVertex()");var t,e,i,r,n,o=[],s=[],a=[],h=arguments.length;if(t=0,0===this._lookUpTableBezier.length||this._lutBezierDetail!==this._pInst._curveDetail){this._lookUpTableBezier=[],this._lutBezierDetail=this._pInst._curveDetail;for(var l=1/this._lutBezierDetail,u=0,c=1,p=0;u<1;){if(t=parseFloat(u.toFixed(6)),this._lookUpTableBezier[p]=this._bezierCoefficients(t),c.toFixed(6)===l.toFixed(6)){t=parseFloat(c.toFixed(6))+parseFloat(u.toFixed(6)),++p,this._lookUpTableBezier[p]=this._bezierCoefficients(t);break}u+=l,c-=l,++p}}var d=this._lookUpTableBezier.length;if(6===h){for(this.isBezier=!0,o=[this.immediateMode._bezierVertex[0],arguments[0],arguments[2],arguments[4]],s=[this.immediateMode._bezierVertex[1],arguments[1],arguments[3],arguments[5]],n=0;n0&&this.mouseY0){var i=this._renderer._curCamera;void 0===t&&(t=1),void 0===e&&(e=t),!0!==this.contextMenuDisabled&&(this.canvas.oncontextmenu=function(){return!1},this._setProperty("contextMenuDisabled",!0)),!0!==this.wheelDefaultDisabled&&(this.canvas.onwheel=function(){return!1},this._setProperty("wheelDefaultDisabled",!0));var n=this.height0?this._renderer._curCamera._orbit(0,0,.5*n):this._renderer._curCamera._orbit(0,0,-.5*n)),this.mouseIsPressed)if(this.mouseButton===this.LEFT){var o=-t*(this.mouseX-this.pmouseX)/n,s=e*(this.mouseY-this.pmouseY)/n;this._renderer._curCamera._orbit(o,s,0)}else if(this.mouseButton===this.RIGHT){var a=i._getLocalAxes(),h=Math.sqrt(a.x[0]*a.x[0]+a.x[2]*a.x[2]);0!==h&&(a.x[0]/=h,a.x[2]/=h);var l=Math.sqrt(a.y[0]*a.y[0]+a.y[2]*a.y[2]);0!==l&&(a.y[0]/=l,a.y[2]/=l);var u=-1*t*(this.mouseX-this.pmouseX),c=-1*e*(this.mouseY-this.pmouseY);i.setPosition(i.eyeX+u*a.x[0]+c*a.z[0],i.eyeY,i.eyeZ+u*a.x[2]+c*a.z[2])}return this}},r.prototype.debugMode=function(){this._assert3d("debugMode"),r._validateParameters("debugMode",arguments);for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1);arguments[0]===n.GRID?this.registerMethod("post",this._grid.call(this,arguments[1],arguments[2],arguments[3],arguments[4],arguments[5])):arguments[0]===n.AXES?this.registerMethod("post",this._axesIcon.call(this,arguments[1],arguments[2],arguments[3],arguments[4])):(this.registerMethod("post",this._grid.call(this,arguments[0],arguments[1],arguments[2],arguments[3],arguments[4])),this.registerMethod("post",this._axesIcon.call(this,arguments[5],arguments[6],arguments[7],arguments[8])))},r.prototype.noDebugMode=function(){this._assert3d("noDebugMode");for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1)},r.prototype._grid=function(t,e,i,r,n){void 0===t&&(t=this.width/2),void 0===e&&(e=Math.round(t/30)<4?4:Math.round(t/30)),void 0===i&&(i=0),void 0===r&&(r=0),void 0===n&&(n=0);var o=t/e,s=t/2;return function(){this.push(),this.stroke(255*this._renderer.curStrokeColor[0],255*this._renderer.curStrokeColor[1],255*this._renderer.curStrokeColor[2]),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]);for(var t=0;t<=e;t++)this.beginShape(this.LINES),this.vertex(-s+i,r,t*o-s+n),this.vertex(+s+i,r,t*o-s+n),this.endShape();for(var a=0;a<=e;a++)this.beginShape(this.LINES),this.vertex(a*o-s+i,r,-s+n),this.vertex(a*o-s+i,r,+s+n),this.endShape();this.pop()}},r.prototype._axesIcon=function(t,e,i,r){return void 0===t&&(t=this.width/20>40?this.width/20:40),void 0===e&&(e=-this.width/4),void 0===i&&(i=e),void 0===r&&(r=e),function(){this.push(),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]),this.strokeWeight(2),this.stroke(255,0,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e+t,i,r),this.endShape(),this.stroke(0,255,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i+t,r),this.endShape(),this.stroke(0,0,255),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i,r+t),this.endShape(),this.pop()}},e.exports=r},{"../core/constants":18,"../core/main":24}],66:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.ambientLight=function(t,e,i,n){this._assert3d("ambientLight"),r._validateParameters("ambientLight",arguments);var o=this.color.apply(this,arguments),s=this._renderer._useLightShader();return s.setUniform("uUseLighting",!0),s.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.ambientLightColors.push(o._array[0],o._array[1],o._array[2]),s.setUniform("uAmbientColor",this._renderer.ambientLightColors),s.setUniform("uAmbientLightCount",this._renderer.ambientLightColors.length/3),this},r.prototype.directionalLight=function(t,e,i,n,o,s){this._assert3d("directionalLight"),r._validateParameters("directionalLight",arguments);var a,h=this._renderer._useLightShader();a=t instanceof r.Color?t:this.color(t,e,i);var l,u,c,p=arguments[arguments.length-1];"number"==typeof p?(l=arguments[arguments.length-3],u=arguments[arguments.length-2],c=arguments[arguments.length-1]):(l=p.x,u=p.y,c=p.z),h.setUniform("uUseLighting",!0),h.setUniform("uMaterialColor",this._renderer.curFillColor);var d=Math.sqrt(l*l+u*u+c*c);return this._renderer.directionalLightDirections.push(l/d,u/d,c/d),h.setUniform("uLightingDirection",this._renderer.directionalLightDirections),this._renderer.directionalLightColors.push(a._array[0],a._array[1],a._array[2]),h.setUniform("uDirectionalColor",this._renderer.directionalLightColors),h.setUniform("uDirectionalLightCount",this._renderer.directionalLightColors.length/3),this},r.prototype.pointLight=function(t,e,i,n,o,s){var a;this._assert3d("pointLight"),r._validateParameters("pointLight",arguments),a=t instanceof r.Color?t:this.color(t,e,i);var h,l,u,c=arguments[arguments.length-1];"number"==typeof c?(h=arguments[arguments.length-3],l=arguments[arguments.length-2],u=arguments[arguments.length-1]):(h=c.x,l=c.y,u=c.z);var p=this._renderer._useLightShader();return p.setUniform("uUseLighting",!0),p.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.pointLightPositions.push(h,l,u),p.setUniform("uPointLightLocation",this._renderer.pointLightPositions),this._renderer.pointLightColors.push(a._array[0],a._array[1],a._array[2]),p.setUniform("uPointLightColor",this._renderer.pointLightColors),p.setUniform("uPointLightCount",this._renderer.pointLightColors.length/3),this},e.exports=r},{"../core/main":24}],67:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry"),r.prototype.loadModel=function(t){var e,i,n;r._validateParameters("loadModel",arguments),"boolean"==typeof arguments[1]?(e=arguments[1],i=arguments[2],n=arguments[3]):(e=!1,i=arguments[1],n=arguments[2]);var o=new r.Geometry;o.gid=t+"|"+e;var s=this;return this.loadStrings(t,function(t){(function(t,e){for(var i={v:[],vt:[],vn:[]},n={},o=0;o0)if("v"===s[0]||"vn"===s[0]){var a=new r.Vector(parseFloat(s[1]),parseFloat(s[2]),parseFloat(s[3]));i[s[0]].push(a)}else if("vt"===s[0]){var h=[parseFloat(s[1]),parseFloat(s[2])];i[s[0]].push(h)}else if("f"===s[0])for(var l=3;l0&&(this._renderer.geometryInHash(t.gid)||(t._makeTriangleEdges()._edgesToVertices(),this._renderer.createBuffers(t.gid,t)),this._renderer.drawBuffers(t.gid))},e.exports=r},{"../core/main":24,"./p5.Geometry":70}],68:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Texture"),r.prototype.loadShader=function(t,e){r._validateParameters("loadShader",arguments);var i=new r.Shader,n=this,o=!1,s=!1;return this.loadStrings(e,function(t){i._fragSrc=t.join("\n"),o=!0,s&&n._decrementPreload()}),this.loadStrings(t,function(t){i._vertSrc=t.join("\n"),s=!0,o&&n._decrementPreload()}),i},r.prototype.createShader=function(t,e){return this._assert3d("createShader"),r._validateParameters("createShader",arguments),new r.Shader(this._renderer,t,e)},r.prototype.shader=function(t){return this._assert3d("shader"),r._validateParameters("shader",arguments),void 0===t._renderer&&(t._renderer=this._renderer),t.isStrokeShader()?this._renderer.setStrokeShader(t):this._renderer.setFillShader(t),this},r.prototype.normalMaterial=function(){return this._assert3d("normalMaterial"),r._validateParameters("normalMaterial",arguments),this._renderer.drawMode=n.FILL,this._renderer.setFillShader(this._renderer._getNormalShader()),this._renderer.curFillColor=[1,1,1,1],this.noStroke(),this},r.prototype.texture=function(t){this._assert3d("texture"),r._validateParameters("texture",arguments),this._renderer.drawMode=n.TEXTURE;var e=this._renderer._useLightShader();return e.setUniform("uSpecular",!1),e.setUniform("isTexture",!0),e.setUniform("uSampler",t),this.noStroke(),this},r.prototype.ambientMaterial=function(t,e,i,n){this._assert3d("ambientMaterial"),r._validateParameters("ambientMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!1),s.setUniform("isTexture",!1),this},r.prototype.specularMaterial=function(t,e,i,n){this._assert3d("specularMaterial"),r._validateParameters("specularMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!0),s.setUniform("isTexture",!1),this},r.RendererGL.prototype._applyColorBlend=function(t){var e=this.GL,i=this.drawMode===n.TEXTURE;return i||t[t.length-1]<1?(e.depthMask(i),e.enable(e.BLEND),e.blendEquation(e.FUNC_ADD),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA)):(e.depthMask(!0),e.disable(e.BLEND)),t},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Texture":76}],69:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.camera=function(){return this._assert3d("camera"),r._validateParameters("camera",arguments),this._renderer._curCamera.camera.apply(this._renderer._curCamera,arguments),this},r.prototype.perspective=function(){return this._assert3d("perspective"),r._validateParameters("perspective",arguments),this._renderer._curCamera.perspective.apply(this._renderer._curCamera,arguments),this},r.prototype.ortho=function(){return this._assert3d("ortho"),r._validateParameters("ortho",arguments),this._renderer._curCamera.ortho.apply(this._renderer._curCamera,arguments),this},r.prototype.createCamera=function(){this._assert3d("createCamera");var t=new r.Camera(this._renderer);return t._computeCameraDefaultSettings(),t._setDefaultCamera(),this._renderer._curCamera=t,t},r.Camera=function(t){this._renderer=t,this.cameraType="default",this.cameraMatrix=new r.Matrix,this.projMatrix=new r.Matrix},r.Camera.prototype.perspective=function(t,e,i,n){void 0===t?(t=this.defaultCameraFOV,this.cameraFOV=t):this.cameraFOV=this._renderer._pInst._toRadians(t),void 0===e&&(e=this.defaultAspectRatio),void 0===i&&(i=this.defaultCameraNear),void 0===n&&(n=this.defaultCameraFar),i<=1e-4&&(i=.01,console.log("Avoid perspective near plane values close to or below 0. Setting value to 0.01.")),nMath.PI?h=Math.PI:h<=0&&(h=.001);var l=Math.sin(h)*s*Math.sin(a),u=Math.cos(h)*s,c=Math.sin(h)*s*Math.cos(a);this.camera(l+this.centerX,u+this.centerY,c+this.centerZ,this.centerX,this.centerY,this.centerZ,0,1,0)},r.Camera.prototype._isActive=function(){return this===this._renderer._curCamera},r.prototype.setCamera=function(t){this._renderer._curCamera=t,this._renderer.uPMatrix.set(t.projMatrix.mat4[0],t.projMatrix.mat4[1],t.projMatrix.mat4[2],t.projMatrix.mat4[3],t.projMatrix.mat4[4],t.projMatrix.mat4[5],t.projMatrix.mat4[6],t.projMatrix.mat4[7],t.projMatrix.mat4[8],t.projMatrix.mat4[9],t.projMatrix.mat4[10],t.projMatrix.mat4[11],t.projMatrix.mat4[12],t.projMatrix.mat4[13],t.projMatrix.mat4[14],t.projMatrix.mat4[15])},e.exports=r.Camera},{"../core/main":24}],70:[function(t,e,i){"use strict";var r=t("../core/main");r.Geometry=function(t,e,i){return this.vertices=[],this.lineVertices=[],this.lineNormals=[],this.vertexNormals=[],this.faces=[],this.uvs=[],this.edges=[],this.detailX=void 0!==t?t:1,this.detailY=void 0!==e?e:1,i instanceof Function&&i.call(this),this},r.Geometry.prototype.computeFaces=function(){this.faces.length=0;for(var t,e,i,r,n=this.detailX+1,o=0;o1&&(u=1),h.mult(Math.asin(u)/l))},r.Geometry.prototype.computeNormals=function(){var t,e=this.vertexNormals,i=this.vertices,n=this.faces;for(e.length=0,t=0;tthis.vertices.length-1-this.detailX;e--)t.add(this.vertexNormals[e]);for(t=r.Vector.div(t,this.detailX),e=this.vertices.length-1;e>this.vertices.length-1-this.detailX;e--)this.vertexNormals[e]=t;return this},r.Geometry.prototype._makeTriangleEdges=function(){if(this.edges.length=0,Array.isArray(this.strokeIndices))for(var t=0,e=this.strokeIndices.length;t0){for(var t=this.vertices[0].copy(),e=this.vertices[0].copy(),i=0;i1){if(this._useImmediateModeShader(),this._doStroke&&this.drawMode!==n.TEXTURE){for(var h=0;h1e3){var e=Object.keys(this.gHash)[0];delete this.gHash[e],n--}this.gHash[t]={}},r.RendererGL.prototype._freeBuffers=function(t){var e=this.gHash[t];if(e){delete this.gHash[t],n--;var i=this.GL;e.vertexBuffer&&i.deleteBuffer(e.vertexBuffer),e.normalBuffer&&i.deleteBuffer(e.normalBuffer),e.lineNormalBuffer&&i.deleteBuffer(e.lineNormalBuffer),e.uvBuffer&&i.deleteBuffer(e.uvBuffer),e.indexBuffer&&i.deleteBuffer(e.indexBuffer),e.lineVertexBuffer&&i.deleteBuffer(e.lineVertexBuffer)}},r.RendererGL.prototype.createBuffers=function(t,e){var i=this.GL;this._initBufferDefaults(t);var r=this.gHash[t];return r.numberOfItems=3*e.faces.length,r.lineVertexCount=e.lineVertices.length,this._useColorShader(),this.curStrokeShader.attributes.aPosition&&(r.lineVertexBuffer=i.createBuffer(),this._bindBuffer(r.lineVertexBuffer,i.ARRAY_BUFFER,this._flatten(e.lineVertices),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),this.curStrokeShader.attributes.aDirection&&(r.lineNormalBuffer=i.createBuffer(),this._bindBuffer(r.lineNormalBuffer,i.ARRAY_BUFFER,this._flatten(e.lineNormals),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aPosition&&(r.vertexBuffer=i.createBuffer(),this._bindBuffer(r.vertexBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertices),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),r.indexBuffer=i.createBuffer(),this._bindBuffer(r.indexBuffer,i.ELEMENT_ARRAY_BUFFER,this._flatten(e.faces),Uint16Array,i.STATIC_DRAW),this.curFillShader.attributes.aNormal&&(r.normalBuffer=i.createBuffer(),this._bindBuffer(r.normalBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertexNormals),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aTexCoord&&(r.uvBuffer=i.createBuffer(),this._bindBuffer(r.uvBuffer,i.ARRAY_BUFFER,this._flatten(e.uvs),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,i.FLOAT,!1,0,0)),r},r.RendererGL.prototype.drawBuffers=function(t){var e=this.GL;this._useColorShader();var i=this.gHash[t];return this._doStroke&&i.lineVertexCount>0&&(this.curStrokeShader.bindShader(),i.lineVertexBuffer&&(this._bindBuffer(i.lineVertexBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.lineNormalBuffer&&(this._bindBuffer(i.lineNormalBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curStrokeColor),this._drawArrays(e.TRIANGLES,t),this.curStrokeShader.unbindShader()),!1!==this._doFill&&(this.curFillShader.bindShader(),i.vertexBuffer&&(this._bindBuffer(i.vertexBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.indexBuffer&&this._bindBuffer(i.indexBuffer,e.ELEMENT_ARRAY_BUFFER),i.normalBuffer&&(this._bindBuffer(i.normalBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,e.FLOAT,!1,0,0)),i.uvBuffer&&(this._bindBuffer(i.uvBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curFillColor),this._drawElements(e.TRIANGLES,t),this.curFillShader.unbindShader()),this},r.RendererGL.prototype.drawBuffersScaled=function(t,e,i,r){var n=this.uMVMatrix.copy();try{this.uMVMatrix.scale(e,i,r),this.drawBuffers(t)}finally{this.uMVMatrix=n}},r.RendererGL.prototype._drawArrays=function(t,e){return this.GL.drawArrays(t,0,this.gHash[e].lineVertexCount),this._pInst._pixelsDirty=!0,this},r.RendererGL.prototype._drawElements=function(t,e){this.GL.drawElements(t,this.gHash[e].numberOfItems,this.GL.UNSIGNED_SHORT,0),this._pInst._pixelsDirty=!0},r.RendererGL.prototype._drawPoints=function(t,e){var i=this.GL;this._bindBuffer(e,i.ARRAY_BUFFER,this._vToNArray(t),Float32Array,i.STATIC_DRAW),this.curPointShader.enableAttrib(this.curPointShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0),i.drawArrays(i.Points,0,t.length)},e.exports=r.RendererGL},{"../core/main":24}],74:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("libtess");t("./p5.Shader"),t("./p5.Camera"),t("../core/p5.Renderer"),t("./p5.Matrix");var s={immediateVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uResolution;\nuniform float uPointSize;\n\nvarying vec4 vColor;\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n gl_PointSize = uPointSize;\n}\n",vertexColorVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n}\n",vertexColorFrag:"precision mediump float;\nvarying vec4 vColor;\nvoid main(void) {\n gl_FragColor = vColor;\n}",normalVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\n\nvarying vec3 vVertexNormal;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vVertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertTexCoord = aTexCoord;\n}\n",normalFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nvoid main(void) {\n gl_FragColor = vec4(vVertexNormal, 1.0);\n}",basicFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nuniform vec4 uMaterialColor;\nvoid main(void) {\n gl_FragColor = uMaterialColor;\n}",lightVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uViewMatrix;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nuniform vec3 uAmbientColor[8];\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nvarying vec3 vVertexNormal;\nvarying vec2 vVertTexCoord;\nvarying vec3 vLightWeighting;\n\nvoid main(void){\n\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\n vec3 vertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertexNormal = vertexNormal;\n vVertTexCoord = aTexCoord;\n\n vec4 mvPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n vec3 eyeDirection = normalize(-mvPosition.xyz);\n\n float shininess = 32.0;\n float specularFactor = 2.0;\n float diffuseFactor = 0.3;\n\n vec3 ambientLightFactor = vec3(0.0);\n\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n ambientLightFactor += uAmbientColor[i];\n }\n\n\n vec3 directionalLightFactor = vec3(0.0);\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n vec3 dir = uLightingDirection[j];\n float directionalLightWeighting = max(dot(vertexNormal, -dir), 0.0);\n directionalLightFactor += uDirectionalColor[j] * directionalLightWeighting;\n }\n\n\n vec3 pointLightFactor = vec3(0.0);\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n vec3 loc = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightDirection = normalize(loc - mvPosition.xyz);\n\n float directionalLightWeighting = max(dot(vertexNormal, lightDirection), 0.0);\n\n float specularLightWeighting = 0.0;\n if (uSpecular ){\n vec3 reflectionDirection = reflect(-lightDirection, vertexNormal);\n specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess);\n }\n\n pointLightFactor += uPointLightColor[k] * (specularFactor * specularLightWeighting\n + directionalLightWeighting * diffuseFactor);\n }\n\n vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightFactor;\n}\n",lightTextureFrag:"precision mediump float;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nvarying vec3 vLightWeighting;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n gl_FragColor = isTexture ? texture2D(uSampler, vVertTexCoord) : uMaterialColor;\n if (uUseLighting)\n gl_FragColor.rgb *= vLightWeighting;\n}",phongVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform vec3 uAmbientColor[8];\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvoid main(void){\n\n vec4 viewModelPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n\n // Pass varyings to fragment shader\n vViewPosition = viewModelPosition.xyz;\n gl_Position = uProjectionMatrix * viewModelPosition; \n\n vNormal = normalize(uNormalMatrix * normalize(aNormal));\n vTexCoord = aTexCoord;\n\n vAmbientColor = vec3(0.0);\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n vAmbientColor += uAmbientColor[i];\n }\n}\n",phongFrag:"precision mediump float;\n\n//uniform mat4 uModelViewMatrix;\nuniform mat4 uViewMatrix;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvec3 V;\nvec3 N;\n\nconst float shininess = 32.0;\nconst float specularFactor = 2.0;\nconst float diffuseFactor = 0.73;\n\nstruct LightResult {\n\tfloat specular;\n\tfloat diffuse;\n};\n\nfloat phongSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float shininess) {\n\n vec3 R = normalize(reflect(-lightDirection, surfaceNormal)); \n return pow(max(0.0, dot(R, viewDirection)), shininess);\n}\n\nfloat lambertDiffuse(\n vec3 lightDirection,\n vec3 surfaceNormal) {\n return max(0.0, dot(-lightDirection, surfaceNormal));\n}\n\nLightResult light(vec3 lightVector) {\n\n vec3 L = normalize(lightVector);\n\n //compute our diffuse & specular terms\n LightResult lr;\n if (uSpecular)\n lr.specular = phongSpecular(L, V, N, shininess);\n lr.diffuse = lambertDiffuse(L, N);\n return lr;\n}\n\nvoid main(void) {\n\n V = normalize(vViewPosition);\n N = vNormal;\n\n vec3 diffuse = vec3(0.0);\n float specular = 0.0;\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n\n LightResult result = light(uLightingDirection[j]);\n diffuse += result.diffuse * uDirectionalColor[j];\n specular += result.specular;\n }\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n\n vec3 lightPosition = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightVector = vViewPosition - lightPosition;\n\t\n //calculate attenuation\n float lightDistance = length(lightVector);\n float falloff = 500.0 / (lightDistance + 500.0);\n\n LightResult result = light(lightVector);\n diffuse += result.diffuse * falloff * uPointLightColor[k];\n specular += result.specular * falloff;\n }\n\n gl_FragColor = isTexture ? texture2D(uSampler, vTexCoord) : uMaterialColor;\n gl_FragColor.rgb = gl_FragColor.rgb * (diffuse * diffuseFactor + vAmbientColor) + specular * specularFactor;\n}",fontVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nuniform vec4 uGlyphRect;\nuniform float uGlyphOffset;\n\nvarying vec2 vTexCoord;\nvarying float w;\n\nvoid main() {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n\n // scale by the size of the glyph's rectangle\n positionVec4.xy *= uGlyphRect.zw - uGlyphRect.xy;\n\n // move to the corner of the glyph\n positionVec4.xy += uGlyphRect.xy;\n\n // move to the letter's line offset\n positionVec4.x += uGlyphOffset;\n \n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vTexCoord = aTexCoord;\n w = gl_Position.w;\n}\n",fontFrag:"#extension GL_OES_standard_derivatives : enable\nprecision mediump float;\n\n#if 0\n // simulate integer math using floats\n\t#define int float\n\t#define ivec2 vec2\n\t#define INT(x) float(x)\n\n\tint ifloor(float v) { return floor(v); }\n\tivec2 ifloor(vec2 v) { return floor(v); }\n\n#else\n // use native integer math\n\tprecision mediump int;\n\t#define INT(x) x\n\n\tint ifloor(float v) { return int(v); }\n\tint ifloor(int v) { return v; }\n\tivec2 ifloor(vec2 v) { return ivec2(v); }\n\n#endif\n\nuniform sampler2D uSamplerStrokes;\nuniform sampler2D uSamplerRowStrokes;\nuniform sampler2D uSamplerRows;\nuniform sampler2D uSamplerColStrokes;\nuniform sampler2D uSamplerCols;\n\nuniform ivec2 uStrokeImageSize;\nuniform ivec2 uCellsImageSize;\nuniform ivec2 uGridImageSize;\n\nuniform ivec2 uGridOffset;\nuniform ivec2 uGridSize;\nuniform vec4 uMaterialColor;\n\nvarying vec2 vTexCoord;\n\n// some helper functions\nint round(float v) { return ifloor(v + 0.5); }\nivec2 round(vec2 v) { return ifloor(v + 0.5); }\nfloat saturate(float v) { return clamp(v, 0.0, 1.0); }\nvec2 saturate(vec2 v) { return clamp(v, 0.0, 1.0); }\n\nint mul(float v1, int v2) {\n return ifloor(v1 * float(v2));\n}\n\nivec2 mul(vec2 v1, ivec2 v2) {\n return ifloor(v1 * vec2(v2) + 0.5);\n}\n\n// unpack a 16-bit integer from a float vec2\nint getInt16(vec2 v) {\n ivec2 iv = round(v * 255.0);\n return iv.x * INT(128) + iv.y;\n}\n\nvec2 pixelScale;\nvec2 coverage = vec2(0.0);\nvec2 weight = vec2(0.5);\nconst float minDistance = 1.0/8192.0;\nconst float hardness = 1.05; // amount of antialias\n\n// the maximum number of curves in a glyph\nconst int N = INT(250);\n\n// retrieves an indexed pixel from a sampler\nvec4 getTexel(sampler2D sampler, int pos, ivec2 size) {\n int width = size.x;\n int y = ifloor(pos / width);\n int x = pos - y * width; // pos % width\n\n return texture2D(sampler, (vec2(x, y) + 0.5) / vec2(size));\n}\n\nvoid calulateCrossings(vec2 p0, vec2 p1, vec2 p2, out vec2 C1, out vec2 C2) {\n\n // get the coefficients of the quadratic in t\n vec2 a = p0 - p1 * 2.0 + p2;\n vec2 b = p0 - p1;\n vec2 c = p0 - vTexCoord;\n\n // found out which values of 't' it crosses the axes\n vec2 surd = sqrt(max(vec2(0.0), b * b - a * c));\n vec2 t1 = ((b - surd) / a).yx;\n vec2 t2 = ((b + surd) / a).yx;\n\n // approximate straight lines to avoid rounding errors\n if (abs(a.y) < 0.001)\n t1.x = t2.x = c.y / (2.0 * b.y);\n\n if (abs(a.x) < 0.001)\n t1.y = t2.y = c.x / (2.0 * b.x);\n\n // plug into quadratic formula to find the corrdinates of the crossings\n C1 = ((a * t1 - b * 2.0) * t1 + c) * pixelScale;\n C2 = ((a * t2 - b * 2.0) * t2 + c) * pixelScale;\n}\n\nvoid coverageX(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n // determine on which side of the x-axis the points lie\n bool y0 = p0.y > vTexCoord.y;\n bool y1 = p1.y > vTexCoord.y;\n bool y2 = p2.y > vTexCoord.y;\n\n // could web be under the curve (after t1)?\n if (y1 ? !y2 : y0) {\n // add the coverage for t1\n coverage.x += saturate(C1.x + 0.5);\n // calculate the anti-aliasing for t1\n weight.x = min(weight.x, abs(C1.x));\n }\n\n // are we outside the curve (after t2)?\n if (y1 ? !y0 : y2) {\n // subtract the coverage for t2\n coverage.x -= saturate(C2.x + 0.5);\n // calculate the anti-aliasing for t2\n weight.x = min(weight.x, abs(C2.x));\n }\n}\n\n// this is essentially the same as coverageX, but with the axes swapped\nvoid coverageY(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n bool x0 = p0.x > vTexCoord.x;\n bool x1 = p1.x > vTexCoord.x;\n bool x2 = p2.x > vTexCoord.x;\n\n if (x1 ? !x2 : x0) {\n coverage.y -= saturate(C1.y + 0.5);\n weight.y = min(weight.y, abs(C1.y));\n }\n\n if (x1 ? !x0 : x2) {\n coverage.y += saturate(C2.y + 0.5);\n weight.y = min(weight.y, abs(C2.y));\n }\n}\n\nvoid main() {\n\n // calculate the pixel scale based on screen-coordinates\n pixelScale = hardness / fwidth(vTexCoord);\n\n // which grid cell is this pixel in?\n ivec2 gridCoord = ifloor(vTexCoord * vec2(uGridSize));\n\n // intersect curves in this row\n {\n // the index into the row info bitmap\n int rowIndex = gridCoord.y + uGridOffset.y;\n // fetch the info texel\n vec4 rowInfo = getTexel(uSamplerRows, rowIndex, uGridImageSize);\n // unpack the rowInfo\n int rowStrokeIndex = getInt16(rowInfo.xy);\n int rowStrokeCount = getInt16(rowInfo.zw);\n\n for (int iRowStroke = INT(0); iRowStroke < N; iRowStroke++) {\n if (iRowStroke >= rowStrokeCount)\n break;\n\n // each stroke is made up of 3 points: the start and control point\n // and the start of the next curve.\n // fetch the indices of this pair of strokes:\n vec4 strokeIndices = getTexel(uSamplerRowStrokes, rowStrokeIndex++, uCellsImageSize);\n\n // unpack the stroke index\n int strokePos = getInt16(strokeIndices.xy);\n\n // fetch the two strokes\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n\n // calculate the coverage\n coverageX(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n // intersect curves in this column\n {\n int colIndex = gridCoord.x + uGridOffset.x;\n vec4 colInfo = getTexel(uSamplerCols, colIndex, uGridImageSize);\n int colStrokeIndex = getInt16(colInfo.xy);\n int colStrokeCount = getInt16(colInfo.zw);\n \n for (int iColStroke = INT(0); iColStroke < N; iColStroke++) {\n if (iColStroke >= colStrokeCount)\n break;\n\n vec4 strokeIndices = getTexel(uSamplerColStrokes, colStrokeIndex++, uCellsImageSize);\n\n int strokePos = getInt16(strokeIndices.xy);\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n coverageY(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n weight = saturate(1.0 - weight * 2.0);\n float distance = max(weight.x + weight.y, minDistance); // manhattan approx.\n float antialias = abs(dot(coverage, weight) / distance);\n float cover = min(abs(coverage.x), abs(coverage.y));\n gl_FragColor = uMaterialColor;\n gl_FragColor.a *= saturate(max(antialias, cover));\n}",lineVert:"/*\n Part of the Processing project - http://processing.org\n Copyright (c) 2012-15 The Processing Foundation\n Copyright (c) 2004-12 Ben Fry and Casey Reas\n Copyright (c) 2001-04 Massachusetts Institute of Technology\n This library is free software; you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, version 2.1.\n This library is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General\n Public License along with this library; if not, write to the\n Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n Boston, MA 02111-1307 USA\n*/\n\n#define PROCESSING_LINE_SHADER\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uStrokeWeight;\n\nuniform vec4 uViewport;\n\n// using a scale <1 moves the lines towards the camera\n// in order to prevent popping effects due to half of\n// the line disappearing behind the geometry faces.\nvec3 scale = vec3(0.9995);\n\nattribute vec4 aPosition;\nattribute vec4 aDirection;\n \nvoid main() {\n vec4 posp = uModelViewMatrix * aPosition;\n vec4 posq = uModelViewMatrix * (aPosition + vec4(aDirection.xyz, 0));\n\n // Moving vertices slightly toward the camera\n // to avoid depth-fighting with the fill triangles.\n // Discussed here:\n // http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=252848 \n posp.xyz = posp.xyz * scale;\n posq.xyz = posq.xyz * scale;\n\n vec4 p = uProjectionMatrix * posp;\n vec4 q = uProjectionMatrix * posq;\n\n // formula to convert from clip space (range -1..1) to screen space (range 0..[width or height])\n // screen_p = (p.xy/p.w + <1,1>) * 0.5 * uViewport.zw\n\n // prevent division by W by transforming the tangent formula (div by 0 causes\n // the line to disappear, see https://github.com/processing/processing/issues/5183)\n // t = screen_q - screen_p\n //\n // tangent is normalized and we don't care which aDirection it points to (+-)\n // t = +- normalize( screen_q - screen_p )\n // t = +- normalize( (q.xy/q.w+<1,1>)*0.5*uViewport.zw - (p.xy/p.w+<1,1>)*0.5*uViewport.zw )\n //\n // extract common factor, <1,1> - <1,1> cancels out\n // t = +- normalize( (q.xy/q.w - p.xy/p.w) * 0.5 * uViewport.zw )\n //\n // convert to common divisor\n // t = +- normalize( ((q.xy*p.w - p.xy*q.w) / (p.w*q.w)) * 0.5 * uViewport.zw )\n //\n // remove the common scalar divisor/factor, not needed due to normalize and +-\n // (keep uViewport - can't remove because it has different components for x and y\n // and corrects for aspect ratio, see https://github.com/processing/processing/issues/5181)\n // t = +- normalize( (q.xy*p.w - p.xy*q.w) * uViewport.zw )\n\n vec2 tangent = normalize((q.xy*p.w - p.xy*q.w) * uViewport.zw);\n\n // flip tangent to normal (it's already normalized)\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n float thickness = aDirection.w * uStrokeWeight;\n vec2 offset = normal * thickness / 2.0;\n\n // Perspective ---\n // convert from world to clip by multiplying with projection scaling factor\n // to get the right thickness (see https://github.com/processing/processing/issues/5182)\n // invert Y, projections in Processing invert Y\n vec2 perspScale = (uProjectionMatrix * vec4(1, -1, 0, 0)).xy;\n\n // No Perspective ---\n // multiply by W (to cancel out division by W later in the pipeline) and\n // convert from screen to clip (derived from clip to screen above)\n vec2 noPerspScale = p.w / (0.5 * uViewport.zw);\n\n //gl_Position.xy = p.xy + offset.xy * mix(noPerspScale, perspScale, float(perspective > 0));\n gl_Position.xy = p.xy + offset.xy * perspScale;\n gl_Position.zw = p.zw;\n}\n",lineFrag:"precision mediump float;\nprecision mediump int;\n\nuniform vec4 uMaterialColor;\n\nvoid main() {\n gl_FragColor = uMaterialColor;\n}",pointVert:"attribute vec3 aPosition;\nuniform float uPointSize;\nvarying float vStrokeWeight;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvoid main() {\n\tvec4 positionVec4 = vec4(aPosition, 1.0);\n\tgl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\tgl_PointSize = uPointSize;\n\tvStrokeWeight = uPointSize;\n}",pointFrag:"precision mediump float;\nprecision mediump int;\nuniform vec4 uMaterialColor;\nvarying float vStrokeWeight;\n\nvoid main(){\n\tfloat mask = 0.0;\n\n\t// make a circular mask using the gl_PointCoord (goes from 0 - 1 on a point)\n // might be able to get a nicer edge on big strokeweights with smoothstep but slightly less performant\n\n\tmask = step(0.98, length(gl_PointCoord * 2.0 - 1.0));\n\n\t// if strokeWeight is 1 or less lets just draw a square\n\t// this prevents weird artifacting from carving circles when our points are really small\n\t// if strokeWeight is larger than 1, we just use it as is\n\n\tmask = mix(0.0, mask, clamp(floor(vStrokeWeight - 0.5),0.0,1.0));\n\n\t// throw away the borders of the mask\n // otherwise we get weird alpha blending issues\n\n\tif(mask > 0.98){\n discard;\n \t}\n\n \tgl_FragColor = vec4(uMaterialColor.rgb * (1.0 - mask), uMaterialColor.a) ;\n}"};r.RendererGL=function(t,e,i,n){return r.Renderer.call(this,t,e,i),this.attributes={},n=n||{},this.attributes.alpha=void 0===n.alpha||n.alpha,this.attributes.depth=void 0===n.depth||n.depth,this.attributes.stencil=void 0===n.stencil||n.stencil,this.attributes.antialias=void 0!==n.antialias&&n.antialias,this.attributes.premultipliedAlpha=void 0!==n.premultipliedAlpha&&n.premultipliedAlpha,this.attributes.preserveDrawingBuffer=void 0===n.preserveDrawingBuffer||n.preserveDrawingBuffer,this.attributes.perPixelLighting=void 0!==n.perPixelLighting&&n.perPixelLighting,this._initContext(),this.isP3D=!0,this.GL=this.drawingContext,this.ambientLightColors=[],this.directionalLightDirections=[],this.directionalLightColors=[],this.pointLightPositions=[],this.pointLightColors=[],this.uMVMatrix=new r.Matrix,this.uPMatrix=new r.Matrix,this.uNMatrix=new r.Matrix("mat3"),this._curCamera=new r.Camera(this),this._curCamera._computeCameraDefaultSettings(),this._curCamera._setDefaultCamera(),this.gHash={},this._defaultLightShader=void 0,this._defaultImmediateModeShader=void 0,this._defaultNormalShader=void 0,this._defaultColorShader=void 0,this._defaultPointShader=void 0,this.curFillShader=void 0,this.curStrokeShader=void 0,this.curPointShader=void 0,this._useColorShader(),this.setStrokeShader(this._getLineShader()),this._usePointShader(),this._pointVertexBuffer=this.GL.createBuffer(),this.isImmediateDrawing=!1,this.immediateMode={},this.fill(255,255,255,255),this.pointSize=5,this.strokeWeight(1),this.stroke(0,0,0),this.textures=[],this._curveTightness=6,this._lookUpTableBezier=[],this._lookUpTableQuadratic=[],this._lutBezierDetail=0,this._lutQuadraticDetail=0,this._tessy=this._initTessy(),this.fontInfos={},this},r.RendererGL.prototype=Object.create(r.Renderer.prototype),r.RendererGL.prototype._initContext=function(){try{if(this.drawingContext=this.canvas.getContext("webgl",this.attributes)||this.canvas.getContext("experimental-webgl",this.attributes),null===this.drawingContext)throw new Error("Error creating webgl context");console.log("p5.RendererGL: enabled webgl context");var t=this.drawingContext;t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),this._viewport=this.drawingContext.getParameter(this.drawingContext.VIEWPORT)}catch(t){throw t}},r.RendererGL.prototype._resetContext=function(t,e,i){var n=this.width,o=this.height,s=this.canvas.id,a=this.canvas;a&&a.parentNode.removeChild(a),(a=document.createElement("canvas")).id=s,this._pInst._userNode?this._pInst._userNode.appendChild(a):document.body.appendChild(a),this._pInst.canvas=a;var h=new r.RendererGL(this._pInst.canvas,this._pInst,!0,t);this._pInst._setProperty("_renderer",h),h.resize(n,o),h._applyDefaults(),this._pInst._elements.push(h),"function"==typeof i&&setTimeout(function(){i.apply(window._renderer,e)},0)},r.prototype.setAttributes=function(t,e){var i;this._assert3d("setAttributes"),void 0!==e?(i={})[t]=e:t instanceof Object&&(i=t),this.push(),this._renderer._resetContext(i),this.pop()},r.RendererGL.prototype._update=function(){this.uMVMatrix.set(this._curCamera.cameraMatrix.mat4[0],this._curCamera.cameraMatrix.mat4[1],this._curCamera.cameraMatrix.mat4[2],this._curCamera.cameraMatrix.mat4[3],this._curCamera.cameraMatrix.mat4[4],this._curCamera.cameraMatrix.mat4[5],this._curCamera.cameraMatrix.mat4[6],this._curCamera.cameraMatrix.mat4[7],this._curCamera.cameraMatrix.mat4[8],this._curCamera.cameraMatrix.mat4[9],this._curCamera.cameraMatrix.mat4[10],this._curCamera.cameraMatrix.mat4[11],this._curCamera.cameraMatrix.mat4[12],this._curCamera.cameraMatrix.mat4[13],this._curCamera.cameraMatrix.mat4[14],this._curCamera.cameraMatrix.mat4[15]),this.ambientLightColors.length=0,this.directionalLightDirections.length=0,this.directionalLightColors.length=0,this.pointLightPositions.length=0,this.pointLightColors.length=0},r.RendererGL.prototype.background=function(){var t=this._pInst.color.apply(this._pInst,arguments),e=t.levels[0]/255,i=t.levels[1]/255,r=t.levels[2]/255,n=t.levels[3]/255;this.GL.clearColor(e,i,r,n),this.GL.depthMask(!0),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.fill=function(t,e,i,o){var s=r.prototype.color.apply(this._pInst,arguments);this.curFillColor=s._array,this.isImmediateDrawing?this.setFillShader(this._getImmediateModeShader()):this.setFillShader(this._getColorShader()),this.drawMode=n.FILL,this.curFillShader.setUniform("uMaterialColor",this.curFillColor)},r.RendererGL.prototype.stroke=function(t,e,i,n){arguments[3]=255;var o=r.prototype.color.apply(this._pInst,arguments);this.curStrokeColor=o._array,this.curStrokeShader.setUniform("uMaterialColor",this.curStrokeColor),this.curPointShader.setUniform("uMaterialColor",o._array)},r.RendererGL.prototype.strokeWeight=function(t){this.curStrokeWeight!==t&&(this.pointSize=t,this.curStrokeWeight=t,this.curStrokeShader.setUniform("uStrokeWeight",t),this.curPointShader.setUniform("uPointSize",t))},r.RendererGL.prototype.get=function(t,e,i,n){return r.Renderer2D.prototype.get.apply(this,[t,e,i,n])},r.RendererGL.prototype.loadPixels=function(){if(!0===this.attributes.preserveDrawingBuffer){var t=this._pInst._pixelDensity,e=this.width,i=this.height;e*=t,i*=t,void 0===this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4)),this.GL.readPixels(0,0,e,i,this.GL.RGBA,this.GL.UNSIGNED_BYTE,this.pixels),this._pInst._setProperty("pixels",this.pixels)}else console.log("loadPixels only works in WebGL when preserveDrawingBuffer is true.")},r.RendererGL.prototype.geometryInHash=function(t){return void 0!==this.gHash[t]},r.RendererGL.prototype.resize=function(t,e){r.Renderer.prototype.resize.call(this,t,e),this.GL.viewport(0,0,this.GL.drawingBufferWidth,this.GL.drawingBufferHeight),this._viewport=this.GL.getParameter(this.GL.VIEWPORT),this._curCamera._resize(),void 0!==this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4))},r.RendererGL.prototype.clear=function(){var t=arguments[0]||0,e=arguments[1]||0,i=arguments[2]||0,r=arguments[3]||0;this.GL.clearColor(t,e,i,r),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.translate=function(t,e,i){return t instanceof r.Vector&&(i=t.z,e=t.y,t=t.x),this.uMVMatrix.translate([t,e,i]),this},r.RendererGL.prototype.scale=function(t,e,i){return this.uMVMatrix.scale(t,e,i),this},r.RendererGL.prototype.rotate=function(t,e){return void 0===e?this.rotateZ(t):(arguments[0]=this._pInst._fromRadians(t),r.Matrix.prototype.rotate.apply(this.uMVMatrix,arguments),this)},r.RendererGL.prototype.rotateX=function(t){return this.rotate(t,1,0,0),this},r.RendererGL.prototype.rotateY=function(t){return this.rotate(t,0,1,0),this},r.RendererGL.prototype.rotateZ=function(t){return this.rotate(t,0,0,1),this},r.RendererGL.prototype.push=function(){var t=r.Renderer.prototype.push.apply(this),e=t.properties;return e.uMVMatrix=this.uMVMatrix.copy(),e.uPMatrix=this.uPMatrix.copy(),e._curCamera=this._curCamera,this._curCamera=this._curCamera.copy(),t},r.RendererGL.prototype.resetMatrix=function(){return this.uMVMatrix=r.Matrix.identity(this._pInst),this},r.RendererGL.prototype.setFillShader=function(t){return this.curFillShader!==t&&(this.curFillShader=t,this.curFillShader.init()),this.curFillShader},r.RendererGL.prototype.setPointShader=function(t){return this.curPointShader!==t&&(this.curPointShader=t,this.curPointShader.init()),this.curPointShader},r.RendererGL.prototype.setStrokeShader=function(t){return this.curStrokeShader!==t&&(this.curStrokeShader=t,this.curStrokeShader.init()),this.curStrokeShader},r.RendererGL.prototype._useLightShader=function(){return this.curFillShader&&this.curFillShader.isLightShader()||this.setFillShader(this._getLightShader()),this.curFillShader},r.RendererGL.prototype._useColorShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultImmediateModeShader||this.setFillShader(this._getColorShader()),this.curFillShader},r.RendererGL.prototype._usePointShader=function(){return this.curPointShader||this.setPointShader(this._getPointShader()),this.curPointShader},r.RendererGL.prototype._useImmediateModeShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultColorShader||this.setFillShader(this._getImmediateModeShader()),this.curFillShader},r.RendererGL.prototype._getLightShader=function(){return this._defaultLightShader||(this.attributes.perPixelLighting?this._defaultLightShader=new r.Shader(this,s.phongVert,s.phongFrag):this._defaultLightShader=new r.Shader(this,s.lightVert,s.lightTextureFrag)),this._defaultLightShader},r.RendererGL.prototype._getImmediateModeShader=function(){return this._defaultImmediateModeShader||(this._defaultImmediateModeShader=new r.Shader(this,s.immediateVert,s.vertexColorFrag)),this._defaultImmediateModeShader},r.RendererGL.prototype._getNormalShader=function(){return this._defaultNormalShader||(this._defaultNormalShader=new r.Shader(this,s.normalVert,s.normalFrag)),this._defaultNormalShader},r.RendererGL.prototype._getColorShader=function(){return this._defaultColorShader||(this._defaultColorShader=new r.Shader(this,s.normalVert,s.basicFrag)),this._defaultColorShader},r.RendererGL.prototype._getPointShader=function(){return this._defaultPointShader||(this._defaultPointShader=new r.Shader(this,s.pointVert,s.pointFrag)),this._defaultPointShader},r.RendererGL.prototype._getLineShader=function(){return this._defaultLineShader||(this._defaultLineShader=new r.Shader(this,s.lineVert,s.lineFrag)),this._defaultLineShader},r.RendererGL.prototype._getFontShader=function(){return this._defaultFontShader||(this.GL.getExtension("OES_standard_derivatives"),this._defaultFontShader=new r.Shader(this,s.fontVert,s.fontFrag)),this._defaultFontShader},r.RendererGL.prototype._getEmptyTexture=function(){if(!this._emptyTexture){var t=new r.Image(1,1);t.set(0,0,255),this._emptyTexture=new r.Texture(this,t)}return this._emptyTexture},r.RendererGL.prototype.getTexture=function(t){for(var e=this.textures,i=0;i2e4){var e,i=Object.prototype.toString,r=[],n=t.slice();e=n.pop();do{"[object Array]"===i.call(e)?n.push.apply(n,e):r.push(e)}while(n.length&&void 0!==(e=n.pop()));return r.reverse(),r}return[].concat.apply([],t)},r.RendererGL.prototype._vToNArray=function(t){return this._flatten(t.map(function(t){return[t.x,t.y,t.z]}))},r.prototype._assert3d=function(t){if(!this._renderer.isP3D)throw new Error(t+"() is only supported in WEBGL mode. If you'd like to use 3D graphics and WebGL, see https://p5js.org/examples/form-3d-primitives.html for more information.")},r.RendererGL.prototype._initTessy=function(){var t=new o.GluTesselator;return t.gluTessCallback(o.gluEnum.GLU_TESS_VERTEX_DATA,function(t,e){e[e.length]=t[0],e[e.length]=t[1],e[e.length]=t[2]}),t.gluTessCallback(o.gluEnum.GLU_TESS_BEGIN,function(t){t!==o.primitiveType.GL_TRIANGLES&&console.log("expected TRIANGLES but got type: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_ERROR,function(t){console.log("error callback"),console.log("error number: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_COMBINE,function(t,e,i){return[t[0],t[1],t[2]]}),t.gluTessCallback(o.gluEnum.GLU_TESS_EDGE_FLAG,function(t){}),t},r.RendererGL.prototype._triangulate=function(t){this._tessy.gluTessNormal(0,0,1);var e=[];this._tessy.gluTessBeginPolygon(e);for(var i=0;i1&&(s=s.substring(0,s.indexOf("[0]"))),o.name=s,o.type=n.type,o.type===t.SAMPLER_2D&&(o.samplerIndex=i,i++,this.samplers.push(o)),this.uniforms[s]=o}this._loadedUniforms=!0}},r.Shader.prototype.compile=function(){},r.Shader.prototype.bindShader=function(){this.init(),this._bound||(this.useProgram(),this._bound=!0,this.bindTextures(),this._setMatrixUniforms(),this===this._renderer.curStrokeShader&&this._setViewportUniform())},r.Shader.prototype.unbindShader=function(){return this._bound&&(this.unbindTextures(),this._bound=!1),this},r.Shader.prototype.bindTextures=function(){for(var t=this._renderer.GL,e=0;e1?e.length&&n.uniform1iv(r,e):n.uniform1i(r,e);break;case n.FLOAT:i.size>1?e.length&&n.uniform1fv(r,e):n.uniform1f(r,e);break;case n.FLOAT_MAT3:n.uniformMatrix3fv(r,!1,e);break;case n.FLOAT_MAT4:n.uniformMatrix4fv(r,!1,e);break;case n.FLOAT_VEC2:i.size>1?e.length&&n.uniform2fv(r,e):n.uniform2f(r,e[0],e[1]);break;case n.FLOAT_VEC3:i.size>1?e.length&&n.uniform3fv(r,e):n.uniform3f(r,e[0],e[1],e[2]);break;case n.FLOAT_VEC4:i.size>1?e.length&&n.uniform4fv(r,e):n.uniform4f(r,e[0],e[1],e[2],e[3]);break;case n.INT_VEC2:i.size>1?e.length&&n.uniform2iv(r,e):n.uniform2i(r,e[0],e[1]);break;case n.INT_VEC3:i.size>1?e.length&&n.uniform3iv(r,e):n.uniform3i(r,e[0],e[1],e[2]);break;case n.INT_VEC4:i.size>1?e.length&&n.uniform4iv(r,e):n.uniform4i(r,e[0],e[1],e[2],e[3]);break;case n.SAMPLER_2D:n.activeTexture(n.TEXTURE0+i.samplerIndex),i.texture=this._renderer.getTexture(e),n.uniform1i(i.location,i.samplerIndex)}return this}},r.Shader.prototype.isLightShader=function(){return void 0!==this.uniforms.uUseLighting||void 0!==this.uniforms.uAmbientLightCount||void 0!==this.uniforms.uDirectionalLightCount||void 0!==this.uniforms.uPointLightCount||void 0!==this.uniforms.uAmbientColor||void 0!==this.uniforms.uDirectionalColor||void 0!==this.uniforms.uPointLightLocation||void 0!==this.uniforms.uPointLightColor||void 0!==this.uniforms.uLightingDirection||void 0!==this.uniforms.uSpecular},r.Shader.prototype.isTextureShader=function(){return this.samplerIndex>0},r.Shader.prototype.isColorShader=function(){return void 0!==this.attributes.aVertexColor||void 0!==this.uniforms.uMaterialColor},r.Shader.prototype.isTexLightShader=function(){return this.isLightShader()&&this.isTextureShader()},r.Shader.prototype.isStrokeShader=function(){return void 0!==this.uniforms.uStrokeWeight},r.Shader.prototype.enableAttrib=function(t,e,i,r,n,o){var s=this._renderer.GL;return-1!==t&&(s.enableVertexAttribArray(t),s.vertexAttribPointer(t,e,i,r,n,o)),this},e.exports=r.Shader},{"../core/main":24}],76:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.Texture=function(t,e){this._renderer=t;var i=this._renderer.GL;this.src=e,this.glTex=void 0,this.glTarget=i.TEXTURE_2D,this.glFormat=i.RGBA,this.mipmaps=!1,this.glMinFilter=i.LINEAR,this.glMagFilter=i.LINEAR,this.glWrapS=i.CLAMP_TO_EDGE,this.glWrapT=i.CLAMP_TO_EDGE,this.isSrcMediaElement=void 0!==r.MediaElement&&e instanceof r.MediaElement,this._videoPrevUpdateTime=0,this.isSrcHTMLElement=void 0!==r.Element&&e instanceof r.Element&&!(e instanceof r.Graphics),this.isSrcP5Image=e instanceof r.Image,this.isSrcP5Graphics=e instanceof r.Graphics,this.isImageData="undefined"!=typeof ImageData&&e instanceof ImageData;var n=this._getTextureDataFromSource();return this.width=n.width,this.height=n.height,this.init(n),this},r.Texture.prototype._getTextureDataFromSource=function(){var t;return this.isSrcP5Image?t=this.src.canvas:this.isSrcMediaElement||this.isSrcP5Graphics||this.isSrcHTMLElement?t=this.src.elt:this.isImageData&&(t=this.src),t},r.Texture.prototype.init=function(t){var e=this._renderer.GL;if(this.glTex=e.createTexture(),this.bindTexture(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,this.glMagFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,this.glMinFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,this.glWrapS),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,this.glWrapT),0===this.width||0===this.height||this.isSrcMediaElement&&!this.src.loadedmetadata){var i=new Uint8Array([1,1,1,1]);e.texImage2D(this.glTarget,0,e.RGBA,1,1,0,this.glFormat,e.UNSIGNED_BYTE,i)}else e.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,e.UNSIGNED_BYTE,t)},r.Texture.prototype.update=function(){var t=this.src;if(0===t.width||0===t.height)return!1;var e=this._getTextureDataFromSource(),i=!1,r=this._renderer.GL;return e.width!==this.width||e.height!==this.height?(i=!0,this.width=e.width,this.height=e.height,this.isSrcP5Image?t.setModified(!1):(this.isSrcMediaElement||this.isSrcHTMLElement)&&t.setModified(!0)):this.isSrcP5Image?t.isModified()&&(i=!0,t.setModified(!1)):this.isSrcMediaElement?t.isModified()?(i=!0,t.setModified(!1)):t.loadedmetadata&&this._videoPrevUpdateTime!==t.time()&&(this._videoPrevUpdateTime=t.time(),i=!0):this.isImageData?t._dirty&&(t._dirty=!1,i=!0):i=!0,i&&(this.bindTexture(),r.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,r.UNSIGNED_BYTE,e)),i},r.Texture.prototype.bindTexture=function(){return this._renderer.GL.bindTexture(this.glTarget,this.glTex),this},r.Texture.prototype.unbindTexture=function(){this._renderer.GL.bindTexture(this.glTarget,null)},r.Texture.prototype.setInterpolation=function(t,e){var i=this._renderer.GL;t===n.NEAREST?this.glMinFilter=i.NEAREST:this.glMinFilter=i.LINEAR,e===n.NEAREST?this.glMagFilter=i.NEAREST:this.glMagFilter=i.LINEAR,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,this.glMinFilter),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,this.glMagFilter),this.unbindTexture()},r.Texture.prototype.setWrapMode=function(t,e){var i=this._renderer.GL,r=function(t){return 0==(t&t-1)},o=r(this.width),s=r(this.width);t===n.REPEAT?o&&s?this.glWrapS=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):t===n.MIRROR?o&&s?this.glWrapS=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):this.glWrapS=i.CLAMP_TO_EDGE,e===n.REPEAT?o&&s?this.glWrapT=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):e===n.MIRROR?o&&s?this.glWrapT=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):this.glWrapT=i.CLAMP_TO_EDGE,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,this.glWrapS),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,this.glWrapT),this.unbindTexture()},e.exports=r.Texture},{"../core/constants":18,"../core/main":24}],77:[function(t,e,i){"use strict";function r(t,e){this.width=t,this.height=e,this.infos=[],this.findImage=function(t){var e=this.width*this.height;if(t>e)throw new Error("font is too complex to render in 3D");for(var i,r,n=this.infos.length-1;n>=0;--n){var o=this.infos[n];if(o.index+t0;){var n=t[r];e>n&&(e=n),ii?i:t}(255*t,0,255)}function r(t,e,i,r,n,s,a,h){for(var u=new function t(e,i,r,n){this.p0=e,this.c0=i,this.c1=r,this.p1=n,this.toQuadratic=function(){return{x:this.p0.x,y:this.p0.y,x1:this.p1.x,y1:this.p1.y,cx:(3*(this.c0.x+this.c1.x)-(this.p0.x+this.p1.x))/4,cy:(3*(this.c0.y+this.c1.y)-(this.p0.y+this.p1.y))/4}},this.quadError=function(){return o.Vector.sub(o.Vector.sub(this.p1,this.p0),o.Vector.mult(o.Vector.sub(this.c1,this.c0),3)).mag()/2},this.split=function(e){var i=o.Vector.lerp(this.p0,this.c0,e),r=o.Vector.lerp(this.c0,this.c1,e),n=o.Vector.lerp(i,r,e);this.c1=o.Vector.lerp(this.c1,this.p1,e),this.c0=o.Vector.lerp(r,this.c1,e);var s=o.Vector.lerp(n,this.c0,e),a=new t(this.p0,i,n,s);return this.p0=s,a},this.splitInflections=function(){var t=o.Vector.sub(this.c0,this.p0),e=o.Vector.sub(o.Vector.sub(this.c1,this.c0),t),i=o.Vector.sub(o.Vector.sub(o.Vector.sub(this.p1,this.c1),t),o.Vector.mult(e,2)),r=[],n=e.x*i.y-e.y*i.x;if(0!==n){var s=t.x*i.y-t.y*i.x,a=t.x*e.y-t.y*e.x,h=s*s-4*n*a;if(h>=0){n<0&&(n=-n,s=-s,a=-a);var l=Math.sqrt(h),u=(-s-l)/(2*n),c=(-s+l)/(2*n);u>0&&u<1&&(r.push(this.split(u)),c=1-(1-c)/(1-u)),c>0&&c<1&&r.push(this.split(c))}}return r.push(this),r}}(new o.Vector(t,e),new o.Vector(i,r),new o.Vector(n,s),new o.Vector(a,h)).splitInflections(),c=[],p=30/l,d=0;d=.125);){var v=Math.pow(f,1/3),g=m.split(v),_=m.split(1-v/(1-v));c.push(g),y.push(m),m=_}f<1&&c.push(m.split(.5)),c.push(m),Array.prototype.push.apply(c,y.reverse())}return c}function s(t,i,r,n){e([t,r],[i,n],{x:t,y:i,cx:(t+r)/2,cy:(i+n)/2})}function u(t,e,i,r){return Math.abs(i-t)<1e-5&&Math.abs(r-e)<1e-5}function c(t,e,i){for(var r=t.length,o=e.findImage(r),s=o.index,a=0,h=0;h>7,127&d,p>>7,127&p);for(var f=0;f>7,127&m,0,0)}}return{cellImageInfo:l,dimOffset:s,dimImageInfo:o}}var p=this.glyphInfos[t.index];if(p)return p;var d=t.getBoundingBox(),f=d.x1,m=d.y1,y=d.x2-f,v=d.y2-m,g=t.path.commands;if(0===y||0===v||!g.length)return this.glyphInfos[t.index]={};var _,b=[],S=[],x=[];for(_=a-1;_>=0;--_)x.push([]);for(_=h-1;_>=0;--_)S.push([]);for(var w,T,P,A,M=0;M=n)&&this._doFill){if(!this._isOpenType())return console.log("WEBGL: only opentype fonts are supported"),t;t.push();var l=this.curFillShader,c=this._doStroke,p=this.drawMode;this.curFillShader=null,this._doStroke=!1,this.drawMode=s.TEXTURE;var d=this._textFont.font,f=this._textFont._fontInfo;f||(f=this._textFont._fontInfo=new u(d));var m=this._textFont._handleAlignment(this,e,i,r),y=this._textSize,v=y/d.unitsPerEm;this.translate(m.x,m.y,0),this.scale(v,v,1);var g=this.GL,_=!this._defaultFontShader,b=this.setFillShader(this._getFontShader());_&&(b.setUniform("uGridImageSize",[64,64]),b.setUniform("uCellsImageSize",[64,64]),b.setUniform("uStrokeImageSize",[64,64]),b.setUniform("uGridSize",[a,h])),this._applyColorBlend(this.curFillColor);var S=this.gHash.glyph;if(!S){var x=this._textGeom=new o.Geometry(1,1,function(){for(var t=0;t<=1;t++)for(var e=0;e<=1;e++)this.vertices.push(new o.Vector(e,t,0)),this.uvs.push(e,t)});x.computeFaces().computeNormals(),S=this.createBuffers("glyph",x)}this._bindBuffer(S.vertexBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aPosition.location,3,g.FLOAT,!1,0,0),this._bindBuffer(S.indexBuffer,g.ELEMENT_ARRAY_BUFFER),this._bindBuffer(S.uvBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aTexCoord.location,2,g.FLOAT,!1,0,0),b.setUniform("uMaterialColor",this.curFillColor);try{for(var w=0,T=null,P=!1,A=d.stringToGlyphs(e),M=0;M{var e=new s.a.Noise("pink").start();e.volume.value=-20;var i=new s.a.AutoFilter({frequency:"8m",min:800,max:5e3}).connect(s.a.Master);e.connect(i),i.start();var r=new s.a.Chorus(.8,2.5,.2).toMaster();let n=new s.a.FMSynth({harmonicity:10,modulationIndex:80,detune:0,oscillator:{type:"sine"},envelope:{attack:.001,decay:.003,sustain:.06,release:.3},modulation:{type:"square"},modulationEnvelope:{attack:.01,decay:.02,sustain:.03,release:.033},portamento:.01}).connect(r);function o(e,i){this.ex=0,this.ey=0,this.easing=.05,this.red=t.random(100,255),this.g=t.random(255),this.b=t.random(255),this.canPlay=!0,this.alpha=0,2==arguments.length?(this.pos=t.createVector(e,i),this.stuck=!0):(this.pos=t.createVector(t.random(-150,150),t.random(-150,150)),this.stuck=!1),this.r=u,this.walk=function(){var e=t.createVector(t.random(-.5,.5),t.random(-.5,.5));this.pos.add(e),t.constrain(this.pos.x,-150,150),t.constrain(this.pos.y,-150,150)},this.checkStuck=function(t){for(var e=0;e{t.createCanvas(800,800,t.WEBGL);h[0]=new o(0,0),u*=.995;for(var e=0;e<500;e++)l[e]=new o,u*=.995}),t.draw=(()=>{t.camera(-100,-100,400-t.frameCount/80,0,0,0,0,1,0),t.background(0),t.smooth(),t.rotateZ(t.frameCount/600);for(var e=0;e=0;e--)l[e].walk(),l[e].checkStuck(h)&&(l[e].setHue(c%360),c+=2,h.push(l[e]),l.splice(e,1));for(l[l.length-1].r;l.length<500&&u>1;)u*=.995,l.push(new o);t.fill(255),t.sphere(6)}),t.keyPressed=(()=>{"m"==t.key&&t.save(Date.now()+".jpg")})};e.default=a,new n.a(a)},function(t,e){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RvbmUvYnVpbGQvVG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcDUvbGliL3A1Lm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsIl9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fIiwidW5kZWZpbmVkIiwiVG9uZSIsIk1vZHVsZSIsImZ1bmMiLCJNYWluIiwidGhpcyIsIkVycm9yIiwidG9TdHJpbmciLCJjbGFzc05hbWUiLCJpc0xldHRlciIsIm1hdGNoIiwic2FtZUNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiLCJpc0Z1bmN0aW9uIiwiZGlzcG9zZSIsInNldCIsInBhcmFtcyIsInJhbXBUaW1lIiwiaXNPYmplY3QiLCJpc1N0cmluZyIsInRtcE9iaiIsInBhcmFtTG9vcCIsImF0dHIiLCJwYXJlbnQiLCJpbmRleE9mIiwiYXR0clNwbGl0Iiwic3BsaXQiLCJsZW5ndGgiLCJzcGxpY2UiLCJpbm5lclBhcmFtIiwiam9pbiIsInBhcmFtIiwiaXNVbmRlZiIsIlNpZ25hbCIsIlBhcmFtIiwicmFtcFRvIiwiQXVkaW9QYXJhbSIsIlRpbWVCYXNlIiwiX2NvbGxlY3REZWZhdWx0cyIsInJldCIsInN1YlJldCIsImoiLCJzdWJBdHRyIiwiaXNEZWZpbmVkIiwiY29uc3RyIiwiZGVmYXVsdHMiLCJrZXlzIiwiX3N1cGVyIiwic3VwZXJEZWZzIiwicHVzaCIsInZhbHVlcyIsIm9wdGlvbnMiLCJkZWZhdWx0QXJnIiwiZ2l2ZW4iLCJmYWxsYmFjayIsImdpdmVuUHJvcCIsImZhbGxiYWNrUHJvcCIsImNvbm5lY3RTZXJpZXMiLCJjdXJyZW50VW5pdCIsImFyZ3VtZW50cyIsInRvVW5pdCIsImNvbm5lY3QiLCJ2YWwiLCJpc051bWJlciIsImFyZyIsImlzQm9vbGVhbiIsImlzQXJyYXkiLCJBcnJheSIsImlzTm90ZSIsInRlc3QiLCJub09wIiwiX3JlYWRPbmx5Iiwid3JpdGFibGUiLCJfd3JpdGFibGUiLCJTdGF0ZSIsIlN0YXJ0ZWQiLCJTdG9wcGVkIiwiUGF1c2VkIiwiZXF1YWxQb3dlclNjYWxlIiwicGVyY2VudCIsInBpRmFjdG9yIiwiTWF0aCIsIlBJIiwic2luIiwiZGJUb0dhaW4iLCJkYiIsInBvdyIsImdhaW5Ub0RiIiwiZ2FpbiIsImxvZyIsIkxOMTAiLCJpbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8iLCJpbnRlcnZhbCIsIm5vdyIsImNvbnRleHQiLCJleHRlbmQiLCJjaGlsZCIsIlRlbXBDb25zdHJ1Y3RvciIsImF1ZGlvQ29udGV4dCIsIkNvbnRleHQiLCJlbWl0Iiwic2V0Q29udGV4dCIsImN0eCIsInNhbXBsZVJhdGUiLCJoYXNBdWRpb0NvbnRleHQiLCJ3aW5kb3ciLCJoYXNQcm9taXNlcyIsImhhc1dvcmtlcnMiLCJnZXRDb250ZXh0IiwicmVzb2x2ZSIsImluaXRpYWxpemVkIiwicmVzQ2FsbGJhY2siLCJvZmYiLCJvbiIsInZlcnNpb24iLCJFbWl0dGVyIiwiX2V2ZW50cyIsImV2ZW50IiwiY2FsbGJhY2siLCJldmVudHMiLCJldmVudE5hbWUiLCJvbmNlIiwiYm91bmRDYWxsYmFjayIsImFwcGx5IiwiZXYiLCJldmVudExpc3QiLCJhcmdzIiwic2xpY2UiLCJsZW4iLCJtaXhpbiIsImZ1bmN0aW9ucyIsImVtaXR0ZXJGdW5jIiwiVGltZWxpbmUiLCJfdGltZWxpbmUiLCJtZW1vcnkiLCJJbmZpbml0eSIsImFkZCIsInRpbWUiLCJ2YWx1ZU9mIiwiaW5kZXgiLCJfc2VhcmNoIiwiZGlmZiIsInJlbW92ZSIsImNvbXBhcmF0b3IiLCJwZWVrIiwic2hpZnQiLCJnZXRBZnRlciIsImdldEJlZm9yZSIsImNhbmNlbCIsImFmdGVyIiwiY2FuY2VsQmVmb3JlIiwicHJldmlvdXNFdmVudCIsImJlZ2lubmluZyIsImVuZCIsIm1pZFBvaW50IiwiZmxvb3IiLCJuZXh0RXZlbnQiLCJfaXRlcmF0ZSIsImxvd2VyQm91bmQiLCJ1cHBlckJvdW5kIiwiZm9yRWFjaCIsImZvckVhY2hCZWZvcmUiLCJmb3JFYWNoQWZ0ZXIiLCJmb3JFYWNoQmV0d2VlbiIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJmb3JFYWNoRnJvbSIsImZvckVhY2hBdFRpbWUiLCJzdXBwb3J0ZWQiLCJPZmZsaW5lQXVkaW9Db250ZXh0Iiwid2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dCIsInN0YXJ0UmVuZGVyaW5nIiwiUHJvbWlzZSIsIl9uYXRpdmVfc3RhcnRSZW5kZXJpbmciLCJkb25lIiwib25jb21wbGV0ZSIsImUiLCJyZW5kZXJlZEJ1ZmZlciIsIkF1ZGlvQ29udGV4dCIsIndlYmtpdEF1ZGlvQ29udGV4dCIsImNsb3NlIiwic3VzcGVuZCIsInJlc3VtZSIsImNyZWF0ZUdhaW4iLCJjcmVhdGVHYWluTm9kZSIsImNyZWF0ZURlbGF5IiwiY3JlYXRlRGVsYXlOb2RlIiwiZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSIsIm9mZmxpbmVDb250ZXh0IiwiYXVkaW9EYXRhIiwiVWludDMyQXJyYXkiLCJidWZmZXIiLCJkZWNvZGVBdWRpb0RhdGEiLCJfbmF0aXZlX2RlY29kZUF1ZGlvRGF0YSIsInN1Y2Nlc3MiLCJlcnJvciIsInByb3AiLCJfY29udGV4dCIsIl9kZWZpbmVQcm9wZXJ0eSIsIl9sYXRlbmN5SGludCIsImxhdGVuY3lIaW50IiwiX2NvbnN0YW50cyIsImxvb2tBaGVhZCIsIl9jb21wdXRlZFVwZGF0ZUludGVydmFsIiwiX3RpY2tlciIsIlRpY2tlciIsImNsb2NrU291cmNlIiwidXBkYXRlSW50ZXJ2YWwiLCJfdGltZW91dHMiLCJfdGltZW91dElkcyIsIl90aW1lb3V0TG9vcCIsImN1cnJlbnRUaW1lIiwicmVhZHkiLCJzdGF0ZSIsInRoZW4iLCJnZXRDb25zdGFudCIsImNyZWF0ZUJ1ZmZlciIsImFyciIsImdldENoYW5uZWxEYXRhIiwiY29uc3RhbnQiLCJjcmVhdGVCdWZmZXJTb3VyY2UiLCJjaGFubmVsQ291bnQiLCJjaGFubmVsQ291bnRNb2RlIiwibG9vcCIsInN0YXJ0Iiwic2V0VGltZW91dCIsImZuIiwidGltZW91dCIsImlkIiwiY2xlYXJUaW1lb3V0IiwidHlwZSIsImhpbnQiLCJjb24iLCJkaXNjb25uZWN0IiwiX3R5cGUiLCJfdXBkYXRlSW50ZXJ2YWwiLCJfY2FsbGJhY2siLCJfY3JlYXRlQ2xvY2siLCJUeXBlIiwiV29ya2VyIiwiVGltZW91dCIsIk9mZmxpbmUiLCJfY3JlYXRlV29ya2VyIiwiVVJMIiwid2Via2l0VVJMIiwiYmxvYiIsIkJsb2IiLCJ0b0ZpeGVkIiwiYmxvYlVybCIsImNyZWF0ZU9iamVjdFVSTCIsIndvcmtlciIsIm9ubWVzc2FnZSIsIl93b3JrZXIiLCJfY3JlYXRlVGltZW91dCIsIl90aW1lb3V0IiwibWF4IiwicG9zdE1lc3NhZ2UiLCJfZGlzcG9zZUNsb2NrIiwidGVybWluYXRlIiwibmF0aXZlQ29ubmVjdCIsIkF1ZGlvTm9kZSIsIm5hdGl2ZURpc2Nvbm5lY3QiLCJ0b25lQ29ubmVjdCIsIkIiLCJvdXROdW0iLCJpbk51bSIsImlucHV0IiwiVE9ORV9TSUxFTkNFX1ZFUlNJT05fTE9HR0lORyIsImNvbnNvbGUiLCJ3YXJuIiwiY3JlYXRlSW5zT3V0cyIsImlucHV0cyIsIm91dHB1dHMiLCJvdXRwdXQiLCJjaGFubmVsSW50ZXJwcmV0YXRpb24iLCJfb25Db25uZWN0IiwidW5pdCIsIm91dHB1dE51bSIsImlucHV0TnVtIiwiZGVzdGluYXRpb24iLCJjaGFpbiIsImZhbiIsIlNpZ25hbEJhc2UiLCJub2RlIiwib3V0cHV0TnVtYmVyIiwiaW5wdXROdW1iZXIiLCJfcGFyYW0iLCJjYW5jZWxTY2hlZHVsZWRWYWx1ZXMiLCJvdmVycmlkZGVuIiwidWEiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwiV2F2ZVNoYXBlck5vZGUiLCJfaW50ZXJuYWxOb2RlIiwiX25hdGl2ZV9jcmVhdGVXYXZlU2hhcGVyIiwiX2N1cnZlIiwiY3VydmUiLCJhcnJheSIsIkZsb2F0MzJBcnJheSIsImNyZWF0ZVdhdmVTaGFwZXIiLCJXYXZlU2hhcGVyIiwibWFwcGluZyIsImJ1ZmZlckxlbiIsIl9zaGFwZXIiLCJpc0Zpbml0ZSIsInNldE1hcCIsIm5vcm1hbGl6ZWQiLCJvdmVyc2FtcGxlIiwib3ZlcnNhbXBsaW5nIiwiUmFuZ2VFcnJvciIsInVuaXRzIiwiX3ZhbCIsIl91bml0cyIsInBhcnNlRmxvYXQiLCJjaGFyQXQiLCJfZGVmYXVsdFVuaXRzIiwidG9TZWNvbmRzIiwidG9UaWNrcyIsInRvRnJlcXVlbmN5IiwidG9NaWRpIiwiX2V4cHJlc3Npb25zIiwicmVnZXhwIiwibWV0aG9kIiwiZG90IiwicGFyc2VJbnQiLCJzY2FsYXIiLCJfYmVhdHNUb1VuaXRzIiwiX2dldFRpbWVTaWduYXR1cmUiLCJfdGlja3NUb1VuaXRzIiwiaHoiLCJfZnJlcXVlbmN5VG9Vbml0cyIsInRyIiwicSIsInRvdGFsIiwiX3NlY29uZHNUb1VuaXRzIiwic2FtcGxlcyIsImRlZmF1bHQiLCJfZ2V0QnBtIiwiVHJhbnNwb3J0IiwiYnBtIiwidGltZVNpZ25hdHVyZSIsIl9nZXRQUFEiLCJQUFEiLCJfbm93IiwiZnJlcSIsImJlYXRzIiwic2Vjb25kcyIsInRpY2tzIiwiX25vQXJnIiwidHJpbSIsImV4cHIiLCJtYXRjaGluZyIsInRvU2FtcGxlcyIsInRvTWlsbGlzZWNvbmRzIiwiRnJlcXVlbmN5IiwiYXNzaWduIiwibWlkaSIsIm10b2YiLCJub3RlIiwicGl0Y2giLCJvY3RhdmUiLCJub3RlTnVtYmVyIiwibm90ZVRvU2NhbGVJbmRleCIsInRyYW5zcG9zZSIsImhhcm1vbml6ZSIsImludGVydmFscyIsIm1hcCIsImZ0b20iLCJ0b05vdGUiLCJsb2cyIiwiQTQiLCJyb3VuZCIsInNjYWxlSW5kZXhUb05vdGUiLCJxdWFydGVyVGltZSIsInF1YXJ0ZXJzIiwiY2JiIiwiY2IiLCJjIyIsImN4IiwiZGJiIiwiZCMiLCJkeCIsImViYiIsImViIiwiZSMiLCJleCIsImZiYiIsImZiIiwiZiIsImYjIiwiZngiLCJnYmIiLCJnYiIsImciLCJnIyIsImd4IiwiYWJiIiwiYWIiLCJhIiwiYSMiLCJheCIsImJiYiIsImJiIiwiYiIsImIjIiwiYngiLCJmcmVxdWVuY3kiLCJUaW1lIiwicXVhbnRpemUiLCJjYXB0dXJlIiwicXVhbnRUbyIsIm5leHRTdWJkaXZpc2lvbiIsInN1YmRpdiIsInN1YmRpdmlzaW9uIiwidG9Ob3RhdGlvbiIsInRlc3ROb3RhdGlvbnMiLCJwb3dlciIsImNsb3Nlc3QiLCJjbG9zZXN0U2Vjb25kcyIsIm5vdGF0aW9uIiwibm90YXRpb25TZWNvbmRzIiwiYWJzIiwidG9CYXJzQmVhdHNTaXh0ZWVudGhzIiwibWVhc3VyZXMiLCJzaXh0ZWVudGhzIiwiVHJhbnNwb3J0VGltZSIsIkRlZmF1bHQiLCJUaWNrcyIsIk5vcm1hbFJhbmdlIiwiQXVkaW9SYW5nZSIsIkRlY2liZWxzIiwiSW50ZXJ2YWwiLCJCUE0iLCJQb3NpdGl2ZSIsIkdhaW4iLCJDZW50cyIsIkRlZ3JlZXMiLCJNSURJIiwiQmFyc0JlYXRzU2l4dGVlbnRocyIsIlNhbXBsZXMiLCJIZXJ0eiIsIk5vdGUiLCJNaWxsaXNlY29uZHMiLCJTZWNvbmRzIiwiTm90YXRpb24iLCJjb252ZXJ0IiwiX3RvVW5pdHMiLCJnZXRWYWx1ZUF0VGltZSIsIl9pbml0aWFsVmFsdWUiLCJfZnJvbVVuaXRzIiwic2V0VmFsdWVBdFRpbWUiLCJtaW5WYWx1ZSIsIm1heFZhbHVlIiwibWluIiwiX21pbk91dHB1dCIsIkF1dG9tYXRpb25UeXBlIiwiTGluZWFyIiwiRXhwb25lbnRpYWwiLCJUYXJnZXQiLCJTZXRWYWx1ZSIsImJlZm9yZSIsImluaXRpYWxWYWx1ZSIsImRlZmF1bHRWYWx1ZSIsInByZXZpb3VzVmFsIiwicHJldmlvdXMiLCJfZXhwb25lbnRpYWxBcHByb2FjaCIsIl9saW5lYXJJbnRlcnBvbGF0ZSIsIl9leHBvbmVudGlhbEludGVycG9sYXRlIiwic2V0UmFtcFBvaW50IiwiY3VycmVudFZhbCIsImNhbmNlbEFuZEhvbGRBdFRpbWUiLCJsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZSIsImV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUiLCJleHBvbmVudGlhbFJhbXBUbyIsImxpbmVhclJhbXBUbyIsInRhcmdldFJhbXBUbyIsImV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSIsInRpbWVDb25zdGFudCIsInNldFRhcmdldEF0VGltZSIsInNldFZhbHVlQ3VydmVBdFRpbWUiLCJkdXJhdGlvbiIsInNjYWxpbmciLCJzZWdUaW1lIiwidmFsdWVBdFRpbWUiLCJ0MCIsInYwIiwidjEiLCJleHAiLCJ0MSIsIk9mZmxpbmVDb250ZXh0IiwiY2hhbm5lbHMiLCJfZHVyYXRpb24iLCJfY3VycmVudFRpbWUiLCJyZW5kZXIiLCJibG9ja1RpbWUiLCJidWZmZXJTb3VyY2UiLCJfbmF0aXZlX3N0YXJ0IiwiX2dhaW5Ob2RlIiwiY3JlYXRlQ29uc3RhbnRTb3VyY2UiLCJDb25zdGFudFNvdXJjZU5vZGUiLCJfYnVmZmVyU291cmNlIiwiZ2Fpbk5vZGUiLCJfb3V0cHV0Iiwib2Zmc2V0Iiwic3RvcCIsIl9wcm94aWVzIiwiX3NvdXJjZVN0YXJ0ZWQiLCJfY29uc3RhbnRTb3VyY2UiLCJfaXNQYXJhbSIsIl9hcHBseUF1dG9tYXRpb25zIiwiX2Nvbm5lY3RQcm94aWVzIiwicHJveHkiLCJmcm9tIiwicHJldmlvdXNNZXRob2QiLCJzaWduYWwiLCJQb3ciLCJfZXhwIiwiX2V4cFNjYWxlciIsIl9leHBGdW5jIiwiRW52ZWxvcGUiLCJhdHRhY2siLCJkZWNheSIsInN1c3RhaW4iLCJyZWxlYXNlIiwiX2F0dGFja0N1cnZlIiwiX3JlbGVhc2VDdXJ2ZSIsIl9zaWciLCJhdHRhY2tDdXJ2ZSIsInJlbGVhc2VDdXJ2ZSIsIkluIiwiY3VydmVEZWYiLCJPdXQiLCJ0cmlnZ2VyQXR0YWNrIiwidmVsb2NpdHkiLCJvcmlnaW5hbEF0dGFjayIsImN1cnJlbnRWYWx1ZSIsInBlcmNlbnRDb21wbGV0ZSIsInNsaWNlSW5kZXgiLCJ0cmlnZ2VyUmVsZWFzZSIsInRyaWdnZXJBdHRhY2tSZWxlYXNlIiwiayIsImNvc2luZUN1cnZlIiwicmlwcGxlQ3VydmUiLCJjdXJ2ZUxlbiIsInNpbmVXYXZlIiwic3RhaXJzQ3VydmUiLCJjZWlsIiwic2luZUN1cnZlIiwiY29zIiwiYm91bmNlQ3VydmUiLCJpbnZlcnRDdXJ2ZSIsIm91dCIsImxpbmVhciIsImV4cG9uZW50aWFsIiwiYm91bmNlIiwiY29zaW5lIiwicmV2ZXJzZSIsInJldmVyc2VDdXJ2ZSIsInN0ZXAiLCJyaXBwbGUiLCJzaW5lIiwiQW1wbGl0dWRlRW52ZWxvcGUiLCJBbmFseXNlck5vZGUiLCJnZXRGbG9hdFRpbWVEb21haW5EYXRhIiwidWludDgiLCJVaW50OEFycmF5IiwiZ2V0Qnl0ZVRpbWVEb21haW5EYXRhIiwiQW5hbHlzZXIiLCJfYW5hbHlzZXIiLCJjcmVhdGVBbmFseXNlciIsIl9idWZmZXIiLCJzaXplIiwic21vb3RoaW5nIiwiV2F2ZWZvcm0iLCJGRlQiLCJnZXRWYWx1ZSIsImdldEZsb2F0RnJlcXVlbmN5RGF0YSIsImZyZXF1ZW5jeUJpbkNvdW50IiwiZmZ0U2l6ZSIsIlR5cGVFcnJvciIsInNtb290aGluZ1RpbWVDb25zdGFudCIsIkNvbXByZXNzb3IiLCJfY29tcHJlc3NvciIsImNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvciIsInRocmVzaG9sZCIsImtuZWUiLCJyYXRpbyIsIkFkZCIsIl9zdW0iLCJNdWx0aXBseSIsIl9tdWx0IiwiTmVnYXRlIiwiX211bHRpcGx5IiwiU3VidHJhY3QiLCJfbmVnIiwiRXF1YWxQb3dlckdhaW4iLCJfZXFQb3dlciIsIkNyb3NzRmFkZSIsImluaXRpYWxGYWRlIiwiZmFkZSIsIl9lcXVhbFBvd2VyQSIsIl9lcXVhbFBvd2VyQiIsIl9vbmUiLCJfaW52ZXJ0IiwiRmlsdGVyIiwiX2ZpbHRlcnMiLCJkZXR1bmUiLCJRIiwiX3JvbGxvZmYiLCJyb2xsb2ZmIiwiY2FzY2FkaW5nQ291bnQiLCJjb3VudCIsImZpbHRlciIsImNyZWF0ZUJpcXVhZEZpbHRlciIsImNvbm5lY3Rpb25DaGFpbiIsImNvbmNhdCIsIk11bHRpYmFuZFNwbGl0IiwibG93IiwiX2xvd01pZEZpbHRlciIsIm1pZCIsImhpZ2giLCJsb3dGcmVxdWVuY3kiLCJoaWdoRnJlcXVlbmN5IiwiRVEzIiwiX211bHRpYmFuZFNwbGl0IiwiX2xvd0dhaW4iLCJfbWlkR2FpbiIsIl9oaWdoR2FpbiIsIlNjYWxlIiwib3V0cHV0TWluIiwib3V0cHV0TWF4IiwiX291dHB1dE1pbiIsIl9vdXRwdXRNYXgiLCJfc2NhbGUiLCJfYWRkIiwiX3NldFJhbmdlIiwiU2NhbGVFeHAiLCJleHBvbmVudCIsIkRlbGF5IiwiX21heERlbGF5IiwibWF4RGVsYXkiLCJkZWxheVRpbWUiLCJfZGVsYXlOb2RlIiwiRmVlZGJhY2tDb21iRmlsdGVyIiwiX2RlbGF5IiwiX2ZlZWRiYWNrIiwicmVzb25hbmNlIiwiQWJzIiwiX2FicyIsIkZvbGxvd2VyIiwiX2ZpbHRlciIsIl9mcmVxdWVuY3lWYWx1ZXMiLCJfc3ViIiwiX2F0dGFjayIsIl9yZWxlYXNlIiwiX3NldEF0dGFja1JlbGVhc2UiLCJtaW5UaW1lIiwiU2NhbGVkRW52ZWxvcGUiLCJGcmVxdWVuY3lFbnZlbG9wZSIsIl9vY3RhdmVzIiwib2N0YXZlcyIsImJhc2VGcmVxdWVuY3kiLCJHcmVhdGVyVGhhblplcm8iLCJfdGhyZXNoIiwiR3JlYXRlclRoYW4iLCJfZ3R6IiwiR2F0ZSIsIl9mb2xsb3dlciIsIl9ndCIsInRocmVzaCIsImF0dGFja1RpbWUiLCJyZWxlYXNlVGltZSIsIl93cmFwU2NoZWR1bGVNZXRob2RzIiwidGlja3NVbnRpbFRpbWUiLCJfZ2V0VGlja3NVbnRpbEV2ZW50IiwiVGlja1NpZ25hbCIsInByZXZFdmVudCIsInNlZ21lbnRzIiwicmFtcFZhbCIsInNlZ21lbnREdXIiLCJ2YWwwIiwidmFsMSIsInNhbXBsZVRpbWUiLCJnZXRUaWNrc0F0VGltZSIsImdldER1cmF0aW9uT2ZUaWNrcyIsImN1cnJlbnRUaWNrIiwiZ2V0VGltZU9mVGljayIsInRpY2siLCJkZWx0YSIsInNxcnQiLCJzb2wxIiwidGlja3NUb1RpbWUiLCJ3aGVuIiwidGltZVRvVGlja3MiLCJzdGFydFRpY2tzIiwiZW5kVGlja3MiLCJUaW1lbGluZVN0YXRlIiwiaW5pdGlhbCIsIl9pbml0aWFsIiwic2V0U3RhdGVBdFRpbWUiLCJnZXRMYXN0U3RhdGUiLCJnZXROZXh0U3RhdGUiLCJUaWNrU291cmNlIiwiX3N0YXRlIiwiX3RpY2tPZmZzZXQiLCJzZXRUaWNrc0F0VGltZSIsInBhdXNlIiwic3RvcEV2ZW50IiwidG1wRXZlbnQiLCJsYXN0U3RhdGUiLCJlbGFwc2VkVGlja3MiLCJwZXJpb2RTdGFydFRpbWUiLCJvZmZzZXRFdmVudCIsImdldFNlY29uZHNBdFRpbWUiLCJlbGFwc2VkU2Vjb25kcyIsImdldFN0YXRlQXRUaW1lIiwiYWJzb2x1dGVUaWNrcyIsImZvckVhY2hUaWNrQmV0d2VlbiIsImxhc3RTdGF0ZUV2ZW50IiwibmV4dFRpY2tUaW1lIiwiQ2xvY2siLCJfbmV4dFRpY2siLCJfdGlja1NvdXJjZSIsIl9sYXN0VXBkYXRlIiwiX2JvdW5kTG9vcCIsIl9sb29wIiwiSW50ZXJ2YWxUaW1lbGluZSIsIl9yb290IiwiX2xlbmd0aCIsIkludGVydmFsTm9kZSIsImluc2VydCIsInVwZGF0ZUhlaWdodCIsInVwZGF0ZU1heCIsIl9yZWJhbGFuY2UiLCJyZXN1bHRzIiwic2VhcmNoIiwiX3JlbW92ZU5vZGUiLCJfc2V0Um9vdCIsIl9yZXBsYWNlTm9kZUluUGFyZW50IiwicmVwbGFjZW1lbnQiLCJpc0xlZnRDaGlsZCIsImxlZnQiLCJyaWdodCIsInRlbXAiLCJnZXRCYWxhbmNlIiwiX3JvdGF0ZUxlZnQiLCJwaXZvdE5vZGUiLCJfcm90YXRlUmlnaHQiLCJiYWxhbmNlIiwiYWxsTm9kZXMiLCJ0cmF2ZXJzZSIsInNlYXJjaEFmdGVyIiwiX2xlZnQiLCJfcmlnaHQiLCJoZWlnaHQiLCJwb2ludCIsIlRyYW5zcG9ydEV2ZW50IiwiX2V2ZW50SWQiLCJfb25jZSIsImludm9rZSIsImNsZWFyIiwiVHJhbnNwb3J0UmVwZWF0RXZlbnQiLCJfaW50ZXJ2YWwiLCJfY3VycmVudElkIiwiX25leHRJZCIsIl9ib3VuZFJlc3RhcnQiLCJfcmVzdGFydCIsIl9jcmVhdGVFdmVudHMiLCJzY2hlZHVsZU9uY2UiLCJfYm91bmRDcmVhdGVFdmVudHMiLCJfbG9vcFN0YXJ0IiwiX2xvb3BFbmQiLCJfcHBxIiwiVHJhbnNwb3J0Q29uc3RydWN0b3IiLCJfY2xvY2siLCJfcHJvY2Vzc1RpY2siLCJfYmluZENsb2NrRXZlbnRzIiwiX3RpbWVTaWduYXR1cmUiLCJfc2NoZWR1bGVkRXZlbnRzIiwiX3JlcGVhdGVkRXZlbnRzIiwiX3N5bmNlZFNpZ25hbHMiLCJfc3dpbmdUaWNrcyIsIl9zd2luZ0Ftb3VudCIsInN3aW5nIiwic3dpbmdTdWJkaXZpc2lvbiIsImxvb3BTdGFydCIsImxvb3BFbmQiLCJ0aWNrVGltZSIsInByb2dyZXNzIiwiYW1vdW50Iiwic2NoZWR1bGUiLCJfYWRkRXZlbnQiLCJzY2hlZHVsZVJlcGVhdCIsImV2ZW50SWQiLCJpdGVtIiwidGltZWxpbmUiLCJ0b2dnbGUiLCJ0aW1lU2lnIiwic3RhcnRQb3NpdGlvbiIsImVuZFBvc2l0aW9uIiwic2V0TG9vcFBvaW50cyIsInBwcSIsInJlbWFpbmluZ1RpY2tzIiwic3luY1NpZ25hbCIsInJhdGlvU2lnbmFsIiwidW5zeW5jU2lnbmFsIiwic3luY2VkU2lnbmFsIiwiVm9sdW1lIiwidm9sdW1lIiwiX3VubXV0ZWRWb2x1bWUiLCJtdXRlIiwiTWFzdGVyIiwiX3ZvbHVtZSIsInRvTWFzdGVyIiwiTWFzdGVyQ29uc3RydWN0b3IiLCJTb3VyY2UiLCJfc3luY2VkIiwiX3NjaGVkdWxlZCIsIl9zdGFydCIsInJlc3RhcnQiLCJfc3RvcCIsInNjaGVkIiwiX3N5bmNlZFN0YXJ0Iiwic3luYyIsInN0YXRlRXZlbnQiLCJzdGFydE9mZnNldCIsIl9zeW5jZWRTdG9wIiwidW5zeW5jIiwiQXVkaW9CdWZmZXIiLCJjb3B5VG9DaGFubmVsIiwic3JjIiwiY2hhbk51bSIsImNoYW5uZWwiLCJjb3B5RnJvbUNoYW5uZWwiLCJkZXN0IiwiQnVmZmVyIiwiX3JldmVyc2VkIiwiX3hociIsIl9vbmxvYWQiLCJ1cmwiLCJvbmxvYWQiLCJsb2FkZWQiLCJsb2FkIiwiY2F0Y2giLCJvbmVycm9yIiwiYnVmZiIsImVyciIsIl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZSIsImFib3J0IiwibnVtYmVyT2ZDaGFubmVscyIsImZyb21BcnJheSIsImlzTXVsdGlkaW1lbnNpb25hbCIsInRvTW9ubyIsInRvQXJyYXkiLCJvdXRwdXRBcnJheSIsIm51bUNoYW5uZWxzIiwiY2hhbm5lbEFycmF5Iiwic2FtcGxlIiwic3RhcnRTYW1wbGVzIiwiZW5kU2FtcGxlcyIsIl9yZXZlcnNlIiwicmV2IiwiX2Rvd25sb2FkUXVldWUiLCJiYXNlVXJsIiwiZnJvbVVybCIsInJlcXVlc3QiLCJtYXRjaGVzIiwiZXh0ZW5zaW9ucyIsImV4dGVuc2lvbiIsInN1cHBvcnRzVHlwZSIsInJlcGxhY2UiLCJvbkVycm9yIiwib25Qcm9ncmVzcyIsInRvdGFsUHJvZ3Jlc3MiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJyZXNwb25zZVR5cGUiLCJhZGRFdmVudExpc3RlbmVyIiwic3RhdHVzIiwicmVzcG9uc2UiLCJsZW5ndGhDb21wdXRhYmxlIiwic2VuZCIsImNhbmNlbERvd25sb2FkcyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNhblBsYXlUeXBlIiwicmVtb3ZlRXZlbnRzIiwiZmFpbCIsIk9zY2lsbGF0b3JOb2RlIiwib25lbmRlZCIsIl9zdGFydFRpbWUiLCJfc3RvcFRpbWUiLCJfb3NjaWxsYXRvciIsImNyZWF0ZU9zY2lsbGF0b3IiLCJfZ2FpbiIsInNldFBlcmlvZGljV2F2ZSIsInBlcmlvZGljV2F2ZSIsImNhbmNlbFN0b3AiLCJPc2NpbGxhdG9yIiwiX3dhdmUiLCJfcGFydGlhbHMiLCJwYXJ0aWFscyIsIl9waGFzZSIsInBoYXNlIiwiU2luZSIsIlRyaWFuZ2xlIiwiU2F3dG9vdGgiLCJTcXVhcmUiLCJDdXN0b20iLCJzeW5jRnJlcXVlbmN5IiwidW5zeW5jRnJlcXVlbmN5IiwiaXNCYXNpY1R5cGUiLCJjb2VmcyIsIl9nZXRSZWFsSW1hZ2luYXJ5IiwiY3JlYXRlUGVyaW9kaWNXYXZlIiwicGVyaW9kaWNXYXZlU2l6ZSIsInJlYWwiLCJpbWFnIiwicGFydGlhbENvdW50IiwicGFydGlhbCIsImV4ZWMiLCJfaW52ZXJzZUZGVCIsInN1bSIsIl9nZXRJbml0aWFsVmFsdWUiLCJ0d29QaSIsIkF1ZGlvVG9HYWluIiwiX25vcm0iLCJ4IiwiWmVybyIsIkxGTyIsImFtcGxpdHVkZSIsIl9zdG9wcGVkU2lnbmFsIiwiX3plcm9zIiwiX3N0b3BwZWRWYWx1ZSIsIl9hMmciLCJfc2NhbGVyIiwiY3VycmVudE1pbiIsImN1cnJlbnRNYXgiLCJMaW1pdGVyIiwiTG93cGFzc0NvbWJGaWx0ZXIiLCJfbG93cGFzcyIsImRhbXBlbmluZyIsIk1lcmdlIiwiX21lcmdlciIsImNyZWF0ZUNoYW5uZWxNZXJnZXIiLCJNZXRlciIsImdldExldmVsIiwiU3BsaXQiLCJfc3BsaXR0ZXIiLCJjcmVhdGVDaGFubmVsU3BsaXR0ZXIiLCJNaWRTaWRlU3BsaXQiLCJfc3BsaXQiLCJfbWlkQWRkIiwiU1FSVDFfMiIsIl9zaWRlU3VidHJhY3QiLCJzaWRlIiwiTWlkU2lkZU1lcmdlIiwiX3RpbWVzVHdvTGVmdCIsIl90aW1lc1R3b1JpZ2h0IiwiX21lcmdlIiwiTWlkU2lkZUNvbXByZXNzb3IiLCJfbWlkU2lkZVNwbGl0IiwiX21pZFNpZGVNZXJnZSIsIk1vbm8iLCJNdWx0aWJhbmRDb21wcmVzc29yIiwiU3RlcmVvUGFubmVyTm9kZSIsInBhbiIsInJpZ2h0V2F2ZVNoYXBlciIsImxlZnRXYXZlU2hhcGVyIiwibGVmdEdhaW4iLCJyaWdodEdhaW4iLCJtZXJnZSIsImNyZWF0ZVN0ZXJlb1Bhbm5lciIsIlBhbm5lciIsImluaXRpYWxQYW4iLCJfcGFubmVyIiwiUGFubmVyM0QiLCJjcmVhdGVQYW5uZXIiLCJwYW5uaW5nTW9kZWwiLCJtYXhEaXN0YW5jZSIsImRpc3RhbmNlTW9kZWwiLCJjb25lT3V0ZXJHYWluIiwiY29uZU91dGVyQW5nbGUiLCJjb25lSW5uZXJBbmdsZSIsInJlZkRpc3RhbmNlIiwicm9sbG9mZkZhY3RvciIsIl9vcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uWCIsIm9yaWVudGF0aW9uWSIsIm9yaWVudGF0aW9uWiIsIl9wb3NpdGlvbiIsInBvc2l0aW9uWCIsInBvc2l0aW9uWSIsInBvc2l0aW9uWiIsIl9yYW1wVGltZUNvbnN0YW50Iiwic2V0UG9zaXRpb24iLCJ5IiwieiIsInNldE9yaWVudGF0aW9uIiwicG9zIiwiX2FsaWFzUHJvcGVydHkiLCJQYW5Wb2wiLCJTb2xvIiwiX3NvbG9CaW5kIiwiX3NvbG9lZCIsInNvbG8iLCJfaXNTb2xvZWQiLCJfYWRkU29sbyIsIl9yZW1vdmVTb2xvIiwiX2N1cnJlbnRTb2xvIiwiX25vU29sb3MiLCJDdHJsSW50ZXJwb2xhdGUiLCJsb3dlclBvc2l0aW9uIiwibG93ZXIiLCJ1cHBlciIsIl9pbnRlcnBvbGF0ZSIsInJldEFycmF5IiwicmV0T2JqIiwiX3RvTnVtYmVyIiwiQ3RybE1hcmtvdiIsIm5leHQiLCJkaXN0cmlidXRpb24iLCJfZ2V0UHJvYkRpc3RyaWJ1dGlvbiIsInJhbmQiLCJyYW5kb20iLCJkaXN0IiwiY2hvc2VuIiwibmVlZHNOb3JtYWxpemluZyIsIm9wdGlvbiIsInByb2JhYmlsaXR5IiwiQ3RybFBhdHRlcm4iLCJfc2h1ZmZsZWQiLCJfZGlyZWN0aW9uIiwiVXAiLCJEb3duIiwiVXBEb3duIiwiRG93blVwIiwiQWx0ZXJuYXRlVXAiLCJBbHRlcm5hdGVEb3duIiwiUmFuZG9tIiwiUmFuZG9tV2FsayIsIlJhbmRvbU9uY2UiLCJfc2h1ZmZsZVZhbHVlcyIsImNvcHkiLCJyYW5kVmFsIiwiQ3RybFJhbmRvbSIsImludGVnZXIiLCJCdWZmZXJzIiwidXJscyIsIl9idWZmZXJzIiwiX2xvYWRpbmdDb3VudCIsIl9idWZmZXJMb2FkZWQiLCJoYXMiLCJpc0xvYWRlZCIsImJ1ZmZOYW1lIiwiQnVzZXMiLCJjaGFubmVsTmFtZSIsInNlbmRLbm9iIiwicmVjZWl2ZSIsIkRyYXciLCJleHBpcmF0aW9uIiwiYW50aWNpcGF0aW9uIiwiX2JvdW5kRHJhd0xvb3AiLCJfZHJhd0xvb3AiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJMaXN0ZW5lciIsIkxpc3RlbmVyQ29uc3RydWN0b3IiLCJmb3J3YXJkWCIsImZvcndhcmRZIiwiZm9yd2FyZFoiLCJ1cFgiLCJ1cFkiLCJ1cFoiLCJsaXN0ZW5lciIsIm9yaWdpbmFsQ29udGV4dCIsInJlbmRlclJldCIsImF0dGVtcHRSZW5kZXIiLCJ0cmllcyIsIkVmZmVjdCIsIl9kcnlXZXQiLCJ3ZXQiLCJlZmZlY3RTZW5kIiwiZWZmZWN0UmV0dXJuIiwiY29ubmVjdEVmZmVjdCIsImVmZmVjdCIsIkF1dG9GaWx0ZXIiLCJfbGZvIiwiZGVwdGgiLCJkZWxheSIsIm9jdCIsIkF1dG9QYW5uZXIiLCJBdXRvV2FoIiwiZm9sbG93ZXIiLCJfc3dlZXBSYW5nZSIsIl9iYXNlRnJlcXVlbmN5IiwiX2lucHV0Qm9vc3QiLCJfYmFuZHBhc3MiLCJfcGVha2luZyIsIl9zZXRTd2VlcFJhbmdlIiwic2Vuc2l0aXZpdHkiLCJiYXNlRnJlcSIsInNlbnNpdGl2eSIsIk1vZHVsbyIsIm1vZHVsdXMiLCJfc3VidHJhY3QiLCJfbW9kU2lnbmFsIiwiX3NldFdhdmVTaGFwZXIiLCJtb2QiLCJCaXRDcnVzaGVyIiwiaW52U3RlcFNpemUiLCJiaXRzIiwiX21vZHVsbyIsIl9iaXRzIiwiQ2hlYnlzaGV2IiwiX29yZGVyIiwib3JkZXIiLCJfZ2V0Q29lZmZpY2llbnQiLCJkZWdyZWUiLCJtZW1vIiwiU3RlcmVvRWZmZWN0IiwiZWZmZWN0U2VuZEwiLCJlZmZlY3RTZW5kUiIsImVmZmVjdFJldHVybkwiLCJlZmZlY3RSZXR1cm5SIiwiQ2hvcnVzIiwiX2RlcHRoIiwiX2RlbGF5VGltZSIsIl9sZm9MIiwiX2xmb1IiLCJfZGVsYXlOb2RlTCIsIl9kZWxheU5vZGVSIiwic3ByZWFkIiwiZGV2aWF0aW9uIiwiQ29udm9sdmVyIiwiX2NvbnZvbHZlciIsImNyZWF0ZUNvbnZvbHZlciIsIkRpc3RvcnRpb24iLCJfZGlzdG9ydGlvbiIsImRpc3RvcnRpb24iLCJkZWciLCJGZWVkYmFja0VmZmVjdCIsIl9mZWVkYmFja0dhaW4iLCJmZWVkYmFjayIsIkZlZWRiYWNrRGVsYXkiLCJjb21iRmlsdGVyVHVuaW5ncyIsImFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcyIsIkZyZWV2ZXJiIiwicm9vbVNpemUiLCJfY29tYkZpbHRlcnMiLCJfYWxscGFzc0ZpbHRlcnNMIiwiX2FsbHBhc3NGaWx0ZXJzUiIsImFsbHBhc3NMIiwiYWxscGFzc1IiLCJsZnBmIiwiYWwiLCJhciIsImNmIiwiY29tYkZpbHRlckRlbGF5VGltZXMiLCJjb21iRmlsdGVyUmVzb25hbmNlcyIsImFsbHBhc3NGaWx0ZXJGcmVxcyIsIkpDUmV2ZXJiIiwiX3NjYWxlUm9vbVNpemUiLCJfYWxscGFzc0ZpbHRlcnMiLCJfZmVlZGJhY2tDb21iRmlsdGVycyIsImFmIiwiYWxscGFzcyIsImZiY2YiLCJhcGYiLCJNaWRTaWRlRWZmZWN0IiwibWlkU2VuZCIsInNpZGVTZW5kIiwibWlkUmV0dXJuIiwic2lkZVJldHVybiIsIlBoYXNlciIsIl9maWx0ZXJzTCIsIl9tYWtlRmlsdGVycyIsInN0YWdlcyIsIl9maWx0ZXJzUiIsImNvbm5lY3RUb0ZyZXEiLCJmaWx0ZXJzIiwiU3RlcmVvWEZlZWRiYWNrRWZmZWN0IiwiX2ZlZWRiYWNrTFIiLCJfZmVlZGJhY2tSTCIsIlBpbmdQb25nRGVsYXkiLCJfbGVmdERlbGF5IiwibWF4RGVsYXlUaW1lIiwiX3JpZ2h0RGVsYXkiLCJfcmlnaHRQcmVEZWxheSIsIlBpdGNoU2hpZnQiLCJfZnJlcXVlbmN5IiwiX2RlbGF5QSIsIl9sZm9BIiwiX2RlbGF5QiIsIl9sZm9CIiwiX2Nyb3NzRmFkZSIsIl9jcm9zc0ZhZGVMRk8iLCJfZmVlZGJhY2tEZWxheSIsIl9waXRjaCIsIl93aW5kb3dTaXplIiwid2luZG93U2l6ZSIsImZhY3RvciIsIkJ1ZmZlclNvdXJjZSIsIl9zb3VyY2VTdG9wcGVkIiwiX3NvdXJjZSIsIl9vbmVuZGVkIiwicGxheWJhY2tSYXRlIiwiZmFkZUluIiwiZmFkZU91dCIsIl9vbmVuZGVkVGltZW91dCIsImZhZGVJblRpbWUiLCJjb21wdXRlZER1ciIsImZhZGVPdXRUaW1lIiwiaGVsZER1cmF0aW9uIiwic3RhcnRGYWRlIiwiYWRkaXRpb25hbFRhaWwiLCJOb2lzZSIsIl9wbGF5YmFja1JhdGUiLCJfbm9pc2VCdWZmZXJzIiwicmF0ZSIsIl9ub2lzZUFycmF5cyIsInBpbmsiLCJjaGFubmVsTnVtIiwiYjAiLCJiMSIsImIyIiwiYjMiLCJiNCIsImI1IiwiYjYiLCJ3aGl0ZSIsImJyb3duIiwibGFzdE91dCIsImNyZWF0ZUJ1ZmZlcnMiLCJSZXZlcmIiLCJwcmVEZWxheSIsImdlbmVyYXRlIiwibm9pc2VMIiwibm9pc2VSIiwiU3RlcmVvRmVlZGJhY2tFZmZlY3QiLCJfZmVlZGJhY2tMIiwiX2ZlZWRiYWNrUiIsIlN0ZXJlb1dpZGVuZXIiLCJ3aWR0aCIsIl90d29UaW1lc1dpZHRoTWlkIiwiX3R3b1RpbWVzV2lkdGhTaWRlIiwiX21pZE11bHQiLCJfb25lTWludXNXaWR0aCIsIl9zaWRlTXVsdCIsIlRyZW1vbG8iLCJfYW1wbGl0dWRlTCIsIl9hbXBsaXR1ZGVSIiwiVmlicmF0byIsIkV2ZW50IiwiX3N0YXJ0T2Zmc2V0IiwiX3Byb2JhYmlsaXR5IiwiX2h1bWFuaXplIiwiaHVtYW5pemUiLCJfcmVzY2hlZHVsZUV2ZW50cyIsInN0YXJ0VGljayIsIl9nZXRMb29wRHVyYXRpb24iLCJfdGljayIsInByb2IiLCJ2YXJpYXRpb24iLCJyZXNjaGVkdWxUaW1lIiwibGFzdEV2ZW50IiwibG9vcER1cmF0aW9uIiwiTG9vcCIsIl9ldmVudCIsIml0ZXJhdGlvbnMiLCJpdGVycyIsIlBhcnQiLCJfZm9yRWFjaCIsIl9zdGFydE5vdGUiLCJhdCIsIl9yZXN0YXJ0RXZlbnQiLCJyZW1vdmVBbGwiLCJfc2V0QWxsIiwiX3Rlc3RMb29wQm91bmRyaWVzIiwiUGF0dGVybiIsIl9wYXR0ZXJuIiwicGF0dGVybiIsInZhbHMiLCJTZXF1ZW5jZSIsIl9zdWJkaXZpc2lvbiIsIl9pbmRleFRpbWUiLCJzdWJTdWJkaXZpc2lvbiIsIlB1bHNlT3NjaWxsYXRvciIsIl93aWR0aEdhdGUiLCJfc2F3dG9vdGgiLCJQV01Pc2NpbGxhdG9yIiwiX3B1bHNlIiwibW9kdWxhdGlvbkZyZXF1ZW5jeSIsIl9tb2R1bGF0b3IiLCJGTU9zY2lsbGF0b3IiLCJfY2FycmllciIsIm1vZHVsYXRpb25JbmRleCIsIm1vZHVsYXRpb25UeXBlIiwiaGFybW9uaWNpdHkiLCJfbW9kdWxhdGlvbk5vZGUiLCJBTU9zY2lsbGF0b3IiLCJfbW9kdWxhdGlvblNjYWxlIiwiRmF0T3NjaWxsYXRvciIsIl9vc2NpbGxhdG9ycyIsIl9zcHJlYWQiLCJvc2MiLCJpdGVyYXRvciIsIk9tbmlPc2NpbGxhdG9yIiwiX3NvdXJjZVR5cGUiLCJPbW5pT3NjVHlwZSIsInByZWZpeCIsInN1YnN0ciIsIl9jcmVhdGVOZXdPc2NpbGxhdG9yIiwib3NjVHlwZSIsIk9zY2lsbGF0b3JDb25zdHJ1Y3RvciIsIm9sZE9zYyIsIm1UeXBlIiwiSW5zdHJ1bWVudCIsIl9zeW5jTWV0aG9kIiwidGltZVBvc2l0aW9uIiwib3JpZ2luYWxNZXRob2QiLCJfb3JpZ2luYWxfdHJpZ2dlckF0dGFjayIsIl9vcmlnaW5hbF90cmlnZ2VyUmVsZWFzZSIsIk1vbm9waG9uaWMiLCJwb3J0YW1lbnRvIiwiX3RyaWdnZXJFbnZlbG9wZUF0dGFjayIsInNldE5vdGUiLCJfdHJpZ2dlckVudmVsb3BlUmVsZWFzZSIsImdldExldmVsQXRUaW1lIiwiZW52ZWxvcGUiLCJwb3J0VGltZSIsIlN5bnRoIiwib3NjaWxsYXRvciIsIkFNU3ludGgiLCJtb2R1bGF0aW9uIiwibW9kdWxhdGlvbkVudmVsb3BlIiwiTW9ub1N5bnRoIiwiZmlsdGVyRW52ZWxvcGUiLCJEdW9TeW50aCIsInZvaWNlMCIsInZvaWNlMSIsIl92aWJyYXRvIiwidmlicmF0b1JhdGUiLCJfdmlicmF0b0dhaW4iLCJ2aWJyYXRvQW1vdW50IiwiRk1TeW50aCIsImNhcnJpZXIiLCJtb2R1bGF0b3IiLCJNZW1icmFuZVN5bnRoIiwicGl0Y2hEZWNheSIsIm1heE5vdGUiLCJpbmhhcm1SYXRpb3MiLCJNZXRhbFN5bnRoIiwiX2ZyZXFNdWx0aXBsaWVycyIsIl9hbXBsaXR1ZSIsIl9oaWdocGFzcyIsIl9maWx0ZXJGcmVxU2NhbGVyIiwibXVsdCIsInZlbCIsIm9jdHMiLCJOb2lzZVN5bnRoIiwibm9pc2UiLCJQbHVja1N5bnRoIiwiX25vaXNlIiwiYXR0YWNrTm9pc2UiLCJfbGZjZiIsImRlbGF5QW1vdW50IiwiUG9seVN5bnRoIiwicG9seXBob255IiwiTUFYX1BPTFlQSE9OWSIsInZvaWNlcyIsIl90cmlnZ2VycyIsInYiLCJ2b2ljZSIsIm5vdGVzIiwib2xkZXN0IiwiSlNPTiIsInN0cmluZ2lmeSIsInN0cmluZ2lmaWVkIiwiZGVzYyIsInJlbGVhc2VBbGwiLCJTYW1wbGVyIiwidXJsTWFwIiwiaXNOYU4iLCJfYWN0aXZlU291cmNlcyIsIl9maW5kQ2xvc2VzdCIsImRpZmZlcmVuY2UiLCJjbG9zZXN0Tm90ZSIsInNvdXJjZSIsInNvdXJjZXMiLCJzZXRXYXZlVGFibGUiLCJjcmVhdGVXYXZlVGFibGUiLCJHYWluVG9BdWRpbyIsIk5vcm1hbGl6ZSIsImlucHV0TWluIiwiaW5wdXRNYXgiLCJfaW5wdXRNaW4iLCJfaW5wdXRNYXgiLCJfZGl2IiwiVHJhbnNwb3J0VGltZWxpbmVTaWduYWwiLCJfb3V0cHV0U2lnIiwiX2xhc3RWYWwiLCJfb25UaWNrIiwiX2JpbmRBbmNob3JWYWx1ZSIsIl9hbmNob3JWYWx1ZSIsIl9zeW5jZWRDYWxsYmFjayIsIkdyYWluUGxheWVyIiwiZ3JhaW5TaXplIiwiX2dyYWluU2l6ZSIsIl9vdmVybGFwIiwib3ZlcmxhcCIsIl9vbnN0b3AiLCJfb2Zmc2V0Iiwic2VlayIsIlBsYXllciIsImF1dG9zdGFydCIsIl9lbGFwc2VkVGltZSIsInJldHJpZ2dlciIsIl9vblNvdXJjZUVuZCIsImNvbXB1dGVkRHVyYXRpb24iLCJfc3RvcEF0TmV4dEl0ZXJhdGlvbiIsIm5leHRTdG9wIiwicG9zaXRpb24iLCJzdG9wVGltZSIsIlBsYXllcnMiLCJfcGxheWVycyIsIl9mYWRlSW4iLCJfZmFkZU91dCIsInBsYXllciIsInBsYXlpbmciLCJwbGF5ZXJOYW1lIiwic3RvcEFsbCIsIlVzZXJNZWRpYSIsIl9tZWRpYVN0cmVhbSIsIl9zdHJlYW0iLCJfZGV2aWNlIiwibGFiZWxPcklkIiwiZW51bWVyYXRlRGV2aWNlcyIsImRldmljZXMiLCJkZXZpY2UiLCJmaW5kIiwibGFiZWwiLCJkZXZpY2VJZCIsImNvbnN0cmFpbnRzIiwiYXVkaW8iLCJlY2hvQ2FuY2VsbGF0aW9uIiwibWVkaWFEZXZpY2VzIiwiZ2V0VXNlck1lZGlhIiwic3RyZWFtIiwiY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UiLCJnZXRBdWRpb1RyYWNrcyIsInRyYWNrIiwia2luZCIsImFjdGl2ZSIsImdyb3VwSWQiLCJNaWRpIiwiZmFjdG9yeSIsImdsb2JhbCIsInJlcXVpcmUiLCJoIiwiY29kZSIsIjEiLCJjaGFyQ29kZUF0IiwidG9CeXRlQXJyYXkiLCJmcm9tQnl0ZUFycmF5IiwiYmFzZTY0anMiLCIyIiwiMyIsIlRZUEVEX0FSUkFZX1NVUFBPUlQiLCJ3cml0ZSIsImlzQnVmZmVyIiwiWSIsIkFycmF5QnVmZmVyIiwiYnl0ZUxlbmd0aCIsIl9hdWdtZW50IiwiZGF0YSIsIl9fcHJvdG9fXyIsIl9pc0J1ZmZlciIsInBvb2xTaXplIiwiWiIsIlIiLCJVIiwidSIsIk51bWJlciIsIlYiLCJ3IiwiUyIsIlQiLCJBIiwiVyIsIiQiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIlgiLCJOIiwiUCIsImFhIiwiTyIsIlNsb3dCdWZmZXIiLCJJTlNQRUNUX01BWF9CWVRFUyIsImZvbyIsInN1YmFycmF5IiwiY29tcGFyZSIsImlzRW5jb2RpbmciLCJlcXVhbHMiLCJpbnNwZWN0IiwicmVhZFVJbnQ4Iiwid3JpdGVVSW50OCIsInRvSlNPTiIsIl9hcnIiLCJyZWFkVUludExFIiwicmVhZFVJbnRCRSIsInJlYWRVSW50MTZMRSIsInJlYWRVSW50MTZCRSIsInJlYWRVSW50MzJMRSIsInJlYWRVSW50MzJCRSIsInJlYWRJbnRMRSIsInJlYWRJbnRCRSIsInJlYWRJbnQ4IiwicmVhZEludDE2TEUiLCJyZWFkSW50MTZCRSIsInJlYWRJbnQzMkxFIiwicmVhZEludDMyQkUiLCJyZWFkRmxvYXRMRSIsInJlYWQiLCJyZWFkRmxvYXRCRSIsInJlYWREb3VibGVMRSIsInJlYWREb3VibGVCRSIsIndyaXRlVUludExFIiwid3JpdGVVSW50QkUiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVVSW50MTZCRSIsIndyaXRlVUludDMyTEUiLCJ3cml0ZVVJbnQzMkJFIiwid3JpdGVJbnRMRSIsIndyaXRlSW50QkUiLCJ3cml0ZUludDgiLCJ3cml0ZUludDE2TEUiLCJ3cml0ZUludDE2QkUiLCJ3cml0ZUludDMyTEUiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZUZsb2F0TEUiLCJ3cml0ZUZsb2F0QkUiLCJ3cml0ZURvdWJsZUxFIiwid3JpdGVEb3VibGVCRSIsIl9zZXQiLCJmaWxsIiwidG9BcnJheUJ1ZmZlciIsIl8iLCJ0b0xvY2FsZVN0cmluZyIsInNlbGYiLCJiYXNlNjQtanMiLCJpZWVlNzU0IiwiaXNhcnJheSIsIjQiLCJFUzZQcm9taXNlIiwiY2EiLCJlYSIsIl9yZXN1bHQiLCJpYSIsImdhIiwiaGEiLCJfbGFiZWwiLCJfb25lcnJvciIsImZhIiwiX3N1YnNjcmliZXJzIiwiamEiLCJrYSIsIl9pbnN0YW5jZUNvbnN0cnVjdG9yIiwicHJvbWlzZSIsIl9yZW1haW5pbmciLCJfZW51bWVyYXRlIiwiZGEiLCJNdXRhdGlvbk9ic2VydmVyIiwiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIsImJhIiwiVWludDhDbGFtcGVkQXJyYXkiLCJpbXBvcnRTY3JpcHRzIiwiTWVzc2FnZUNoYW5uZWwiLCJuZXh0VGljayIsImNyZWF0ZVRleHROb2RlIiwib2JzZXJ2ZSIsImNoYXJhY3RlckRhdGEiLCJwb3J0MSIsInBvcnQyIiwicnVuT25Mb29wIiwicnVuT25Db250ZXh0Iiwic3Vic3RyaW5nIiwiX2VhY2hFbnRyeSIsIl9zZXR0bGVkQXQiLCJfd2lsbFNldHRsZUF0IiwiYWxsIiwicmFjZSIsInJlamVjdCIsIl9zZXRTY2hlZHVsZXIiLCJfc2V0QXNhcCIsIl9hc2FwIiwicG9seWZpbGwiLCJGdW5jdGlvbiIsImNhc3QiLCJfcHJvY2VzcyIsIjUiLCJmZXRjaEpzb25wIiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInJlbW92ZUNoaWxkIiwianNvbnBDYWxsYmFjayIsImpzb25wQ2FsbGJhY2tGdW5jdGlvbiIsIkRhdGUiLCJvayIsImpzb24iLCJzZXRBdHRyaWJ1dGUiLCJjaGFyc2V0IiwiYXBwZW5kQ2hpbGQiLCI2IiwiY3JlYXRlRWxlbWVudE5TIiwiSFRNTEVsZW1lbnQiLCJzYWZhcmkiLCJzZXRJbW1lZGlhdGUiLCJyZXZva2VPYmplY3RVUkwiLCJyZWFkeVN0YXRlIiwiSU5JVCIsImhyZWYiLCJkb3dubG9hZCIsIk1vdXNlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiRE9ORSIsIkZpbGVSZWFkZXIiLCJvbmxvYWRlbmQiLCJyZXN1bHQiLCJsb2NhdGlvbiIsInJlYWRBc0RhdGFVUkwiLCJtc1NhdmVPck9wZW5CbG9iIiwiV1JJVElORyIsIm9ud3JpdGVzdGFydCIsIm9ucHJvZ3Jlc3MiLCJvbndyaXRlIiwib25hYm9ydCIsIm9ud3JpdGVlbmQiLCJjb250ZW50Iiwic2F2ZUFzIiwiNyIsIk5hTiIsIkxOMiIsIjgiLCI5Iiwib2EiLCJuYSIsIm1hIiwibGEiLCJxYSIsInJhIiwic29ydCIsInBhIiwibGlidGVzcyIsIkdsdVRlc3NlbGF0b3IiLCJ3aW5kaW5nUnVsZSIsIkdMVV9URVNTX1dJTkRJTkdfT0REIiwiR0xVX1RFU1NfV0lORElOR19OT05aRVJPIiwiR0xVX1RFU1NfV0lORElOR19QT1NJVElWRSIsIkdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkUiLCJHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFfVFdPIiwicHJpbWl0aXZlVHlwZSIsIkdMX0xJTkVfTE9PUCIsIkdMX1RSSUFOR0xFUyIsIkdMX1RSSUFOR0xFX1NUUklQIiwiR0xfVFJJQU5HTEVfRkFOIiwiZXJyb3JUeXBlIiwiR0xVX1RFU1NfTUlTU0lOR19CRUdJTl9QT0xZR09OIiwiR0xVX1RFU1NfTUlTU0lOR19FTkRfUE9MWUdPTiIsIkdMVV9URVNTX01JU1NJTkdfQkVHSU5fQ09OVE9VUiIsIkdMVV9URVNTX01JU1NJTkdfRU5EX0NPTlRPVVIiLCJHTFVfVEVTU19DT09SRF9UT09fTEFSR0UiLCJHTFVfVEVTU19ORUVEX0NPTUJJTkVfQ0FMTEJBQ0siLCJnbHVFbnVtIiwiR0xVX1RFU1NfTUVTSCIsIkdMVV9URVNTX1RPTEVSQU5DRSIsIkdMVV9URVNTX1dJTkRJTkdfUlVMRSIsIkdMVV9URVNTX0JPVU5EQVJZX09OTFkiLCJHTFVfSU5WQUxJRF9FTlVNIiwiR0xVX0lOVkFMSURfVkFMVUUiLCJHTFVfVEVTU19CRUdJTiIsIkdMVV9URVNTX1ZFUlRFWCIsIkdMVV9URVNTX0VORCIsIkdMVV9URVNTX0VSUk9SIiwiR0xVX1RFU1NfRURHRV9GTEFHIiwiR0xVX1RFU1NfQ09NQklORSIsIkdMVV9URVNTX0JFR0lOX0RBVEEiLCJHTFVfVEVTU19WRVJURVhfREFUQSIsIkdMVV9URVNTX0VORF9EQVRBIiwiR0xVX1RFU1NfRVJST1JfREFUQSIsIkdMVV9URVNTX0VER0VfRkxBR19EQVRBIiwiR0xVX1RFU1NfQ09NQklORV9EQVRBIiwiZ2x1RGVsZXRlVGVzcyIsImdsdVRlc3NQcm9wZXJ0eSIsImdsdUdldFRlc3NQcm9wZXJ0eSIsImdsdVRlc3NOb3JtYWwiLCJnbHVUZXNzQ2FsbGJhY2siLCJnbHVUZXNzVmVydGV4IiwiZ2x1VGVzc0JlZ2luUG9seWdvbiIsImdsdVRlc3NCZWdpbkNvbnRvdXIiLCJnbHVUZXNzRW5kQ29udG91ciIsImdsdVRlc3NFbmRQb2x5Z29uIiwiMTAiLCJvcGVudHlwZSIsInRhYmxlIiwiVWludDE2QXJyYXkiLCJ0cmFucyIsInNvdXJjZUluZGV4IiwidGFnIiwiYml0Y291bnQiLCJkZXN0TGVuIiwibHRyZWUiLCJkdHJlZSIsInZlIiwidWUiLCJzZSIsInRlIiwia2UiLCJvZSIsInBlIiwicWUiLCJyZSIsImxlIiwieDEiLCJ5MSIsIngyIiwieTIiLCJjb21tYW5kcyIsInN0cm9rZSIsInN0cm9rZVdpZHRoIiwidGFibGVOYW1lIiwiZmllbGRzIiwiZm9ybWF0IiwiZ2x5cGhzIiwieGUiLCJhc3NlcnQiLCJzY3JpcHQiLCJkZWZhdWx0TGFuZ1N5cyIsInJlcUZlYXR1cmVJbmRleCIsImZlYXR1cmVJbmRleGVzIiwibGFuZ1N5c1JlY29yZHMiLCJsYW5nU3lzIiwiZmVhdHVyZSIsImZlYXR1cmVQYXJhbXMiLCJsb29rdXBMaXN0SW5kZXhlcyIsImxvb2t1cFR5cGUiLCJsb29rdXBGbGFnIiwic3VidGFibGVzIiwiZ2V0VWludDgiLCJnZXRVaW50MTYiLCJnZXRVaW50MzIiLCJnZXRJbnQxNiIsInJlbGF0aXZlT2Zmc2V0IiwiZ2x5cGhJbmRleCIsImZvbnQiLCJjbWFwIiwiZW5jb2RpbmciLCJuYW1lcyIsIlFlIiwibnVtYmVyT2ZHbHlwaHMiLCJnbHlwaE5hbWVJbmRleCIsImJpbmRDb25zdHJ1Y3RvclZhbHVlcyIsInBhdGgiLCJjb25maWd1cmFibGUiLCJMZSIsImdldENhcmQxNiIsImdldEJ5dGUiLCJnZXRPZmZzZXQiLCJnZXRCeXRlcyIsIm9iamVjdHMiLCJlbmRPZmZzZXQiLCJwYXJzZUJ5dGUiLCJQYXJzZXIiLCJOZSIsIm9wIiwic2EiLCJUZSIsInRhIiwiVWUiLCJEYXRhVmlldyIsIl9zdWJycyIsIl9zdWJyc0JpYXMiLCJwcml2YXRlIiwiX2RlZmF1bHRXaWR0aFgiLCJkZWZhdWx0V2lkdGhYIiwiX25vbWluYWxXaWR0aFgiLCJub21pbmFsV2lkdGhYIiwic3VicnMiLCJfcHJpdmF0ZURpY3QiLCJ4YSIsImNsb3NlUGF0aCIsIm1vdmVUbyIsImlzQ0lERm9udCIsInRhYmxlcyIsImNmZiIsInRvcERpY3QiLCJfZmRTZWxlY3QiLCJfZmRBcnJheSIsInBvcCIsImxpbmVUbyIsImN1cnZlVG8iLCJnc3VicnNCaWFzIiwiZ3N1YnJzIiwiYWR2YW5jZVdpZHRoIiwiQWEiLCJEYSIsIkVhIiwiSWUiLCJSZWNvcmQiLCJkaWN0IiwiRmEiLCJ0b3BEaWN0cyIsIkphIiwiWGEiLCJZYSIsImRmIiwiZmYiLCJlZiIsIiRhIiwiX2EiLCJtYiIsIm5iIiwib2IiLCJwYiIsIlRhYmxlIiwibnVtVGFibGVzIiwic2VhcmNoUmFuZ2UiLCJlbnRyeVNlbGVjdG9yIiwicmFuZ2VTaGlmdCIsInNpemVPZiIsImFyZ3VtZW50IiwiZW5jb2RlIiwicWIiLCJjaGFyVG9HbHlwaEluZGV4IiwiZ2V0TWV0cmljcyIsInRiIiwidWIiLCJ2YiIsIndiIiwieGIiLCJ5YiIsInpiIiwiQWIiLCJzdWJzdEZvcm1hdCIsIkNiIiwiRGIiLCJFYiIsIkZiIiwicGFyc2VTaG9ydCIsIkdiIiwibnVtYmVyT2ZDb250b3VycyIsIl94TWluIiwiX3lNaW4iLCJfeE1heCIsIl95TWF4IiwiZW5kUG9pbnRJbmRpY2VzIiwicGFyc2VVU2hvcnQiLCJpbnN0cnVjdGlvbkxlbmd0aCIsImluc3RydWN0aW9ucyIsIm9uQ3VydmUiLCJsYXN0UG9pbnRPZkNvbnRvdXIiLCJwb2ludHMiLCJpc0NvbXBvc2l0ZSIsImNvbXBvbmVudHMiLCJ4U2NhbGUiLCJzY2FsZTAxIiwic2NhbGUxMCIsInlTY2FsZSIsImR5IiwibWF0Y2hlZFBvaW50cyIsInBhcnNlQ2hhciIsInBhcnNlRjJEb3QxNCIsIkhiIiwiSmIiLCJJYiIsInF1YWRyYXRpY0N1cnZlVG8iLCJLYiIsImdldFBhdGgiLCJNYiIsImdldENvbW1hbmRzIiwidmYiLCJfZnBnbVN0YXRlIiwiX3ByZXBTdGF0ZSIsIl9lcnJvclN0YXRlIiwiTmIiLCJPYiIsInNpZ24iLCJQYiIsIlFiIiwiUmIiLCJTYiIsIlRiIiwiYXhpcyIsInNsb3BlIiwibm9ybWFsU2xvcGUiLCJmcmVlemUiLCJVYiIsInhmIiwieWYiLCJWYiIsInhvIiwieW8iLCJwcmV2UG9pbnRPbkNvbnRvdXIiLCJuZXh0UG9pbnRPbkNvbnRvdXIiLCJ4VG91Y2hlZCIsInlUb3VjaGVkIiwicHJldmVudEV4dGVuc2lvbnMiLCJXYiIsImVudiIsInN0YWNrIiwicHJvZyIsInpwMCIsInpwMSIsInpwMiIsInJwMCIsInJwMSIsInJwMiIsImZ2IiwicHYiLCJkcHYiLCJYYiIsInRab25lIiwiZ1pvbmUiLCJZYiIsImlwIiwiWmIiLCJERUJVRyIsIiRiIiwiX2IiLCJhYyIsInoyIiwiejEiLCJiYyIsInhjIiwiR2MiLCJ6MCIsImRpc3RhbmNlIiwiemYiLCJzZXRSZWxhdGl2ZSIsInRvdWNoIiwiSGMiLCJ0b3VjaGVkIiwicHJldlRvdWNoZWQiLCJuZXh0VG91Y2hlZCIsImludGVycG9sYXRlIiwiSWMiLCJKYyIsImNvbnRvdXJzIiwiS2MiLCJOYyIsIlFjIiwiY3Z0IiwiY3ZDdXRJbiIsIlhjIiwiWWMiLCJtZCIsInBwZW0iLCJkZWx0YUJhc2UiLCJkZWx0YVNoaWZ0IiwieGQiLCJ6ZCIsIkdkIiwiTmQiLCJPZCIsIlBkIiwibWluRGlzIiwiUWQiLCJlbXB0eSIsImZhbWlseU5hbWUiLCJzdHlsZU5hbWUiLCJ1bml0c1BlckVtIiwiYXNjZW5kZXIiLCJkZXNjZW5kZXIiLCJmb250RmFtaWx5IiwiZW4iLCJmb250U3ViZmFtaWx5IiwiZnVsbE5hbWUiLCJwb3N0U2NyaXB0TmFtZSIsImRlc2lnbmVyIiwiZGVzaWduZXJVUkwiLCJtYW51ZmFjdHVyZXIiLCJtYW51ZmFjdHVyZXJVUkwiLCJsaWNlbnNlIiwibGljZW5zZVVSTCIsImRlc2NyaXB0aW9uIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiY3JlYXRlZFRpbWVzdGFtcCIsIm9zMiIsInVzV2VpZ2h0Q2xhc3MiLCJ3ZWlnaHRDbGFzcyIsInVzV2VpZ2h0Q2xhc3NlcyIsIk1FRElVTSIsInVzV2lkdGhDbGFzcyIsIndpZHRoQ2xhc3MiLCJ1c1dpZHRoQ2xhc3NlcyIsImZzU2VsZWN0aW9uIiwiZnNTZWxlY3Rpb25WYWx1ZXMiLCJSRUdVTEFSIiwiU2UiLCJHbHlwaFNldCIsInN1YnN0aXR1dGlvbiIsIl9oaW50aW5nIiwib3V0bGluZXNGb3JtYXQiLCJSZCIsIlNkIiwiVGQiLCJwYXJzZVRhZyIsInBhcnNlRml4ZWQiLCJza2lwIiwiVWQiLCJjb29yZGluYXRlcyIsIlZkIiwiY2UiLCJyZWFkRmlsZSIsIm1lc3NhZ2UiLCJlZSIsImdldFRhZyIsImdldFVMb25nIiwiY2hlY2tzdW0iLCJjb21wcmVzc2lvbiIsImdlIiwiY29tcHJlc3NlZExlbmd0aCIsIndlIiwiaGUiLCJnZXRVU2hvcnQiLCJmZSIsIk1lIiwicGFyc2UiLCJwYXJzZVNob3J0TGlzdCIsImZwZ20iLCJwYXJzZUJ5dGVMaXN0IiwiaGVhZCIsIldlIiwiaW5kZXhUb0xvY0Zvcm1hdCIsImhoZWEiLCJYZSIsIm51bWJlck9mSE1ldHJpY3MiLCJaZSIsIm1heHAiLCIkZSIsIm51bUdseXBocyIsImpmIiwicG9zdCIsImtmIiwiZ2x5cGhOYW1lcyIsInByZXAiLCJnZiIsIkhmIiwiVmUiLCJZZSIsImdseXBoSW5kZXhNYXAiLCJhZGRVbmljb2RlIiwiY2ZmRW5jb2RpbmciLCJnbHlwaEluZGV4VG9OYW1lIiwia2VybmluZ1BhaXJzIiwiR2YiLCJncG9zIiwiRmYiLCJpbml0IiwiZ3N1YiIsIm9mIiwiZnZhciIsIkNmIiwibWV0YSIsInBmIiwibWV0YXMiLCJjb2RlUG9pbnRBdCIsIm1lIiwibmUiLCJpc0VtcHR5IiwiYWRkUG9pbnQiLCJhZGRYIiwiYWRkWSIsImFkZEJlemllciIsImFkZFF1YWQiLCJiZXppZXJDdXJ2ZVRvIiwicXVhZFRvIiwiZ2V0Qm91bmRpbmdCb3giLCJkcmF3IiwiYmVnaW5QYXRoIiwiZmlsbFN0eWxlIiwic3Ryb2tlU3R5bGUiLCJsaW5lV2lkdGgiLCJ0b1BhdGhEYXRhIiwidG9TVkciLCJ0b0RPTUVsZW1lbnQiLCJ6ZSIsIkFlIiwiQmUiLCJDZSIsIkJZVEUiLCJDSEFSIiwiQ0hBUkFSUkFZIiwiVVNIT1JUIiwiU0hPUlQiLCJVSU5UMjQiLCJVTE9ORyIsIkxPTkciLCJGSVhFRCIsIkZXT1JEIiwiVUZXT1JEIiwiTE9OR0RBVEVUSU1FIiwiVEFHIiwiQ2FyZDgiLCJDYXJkMTYiLCJPZmZTaXplIiwiU0lEIiwiTlVNQkVSIiwiTlVNQkVSMTYiLCJOVU1CRVIzMiIsIlJFQUwiLCJOQU1FIiwiU1RSSU5HIiwiVVRGOCIsIlVURjE2IiwiRGUiLCJ4LW1hYy1jcm9hdGlhbiIsIngtbWFjLWN5cmlsbGljIiwieC1tYWMtZ2FlbGljIiwieC1tYWMtZ3JlZWsiLCJ4LW1hYy1pY2VsYW5kaWMiLCJ4LW1hYy1pbnVpdCIsIngtbWFjLWNlIiwibWFjaW50b3NoIiwieC1tYWMtcm9tYW5pYW4iLCJ4LW1hYy10dXJraXNoIiwiTUFDU1RSSU5HIiwiRWUiLCJGZSIsIldlYWtNYXAiLCJHZSIsIlZBUkRFTFRBUyIsIklOREVYIiwiT0JKRUNUIiwiRElDVCIsIk9QRVJBTkQiLCJPUEVSQVRPUiIsIk9QIiwiSGUiLCJDSEFSU1RSSU5HIiwiVEFCTEUiLCJSRUNPUkQiLCJMSVRFUkFMIiwiQ292ZXJhZ2UiLCJTY3JpcHRMaXN0IiwiRmVhdHVyZUxpc3QiLCJMb29rdXBMaXN0IiwidXNob3J0TGlzdCIsInRhYmxlTGlzdCIsInJlY29yZExpc3QiLCJKZSIsImJ5dGUiLCJ1U2hvcnQiLCJzaG9ydCIsInVMb25nIiwiZml4ZWQiLCJsb25nRGF0ZVRpbWUiLCJnZXRJbnQ4IiwicGFyc2VDYXJkOCIsInBhcnNlQ2FyZDE2IiwicGFyc2VTSUQiLCJwYXJzZU9mZnNldDE2IiwicGFyc2VVTG9uZyIsInBhcnNlT2Zmc2V0MzIiLCJwYXJzZVN0cmluZyIsInBhcnNlTG9uZ0RhdGVUaW1lIiwicGFyc2VWZXJzaW9uIiwicGFyc2VVTG9uZ0xpc3QiLCJwYXJzZU9mZnNldDE2TGlzdCIsInBhcnNlVVNob3J0TGlzdCIsInBhcnNlTGlzdCIsInBhcnNlTGlzdDMyIiwicGFyc2VSZWNvcmRMaXN0IiwicGFyc2VSZWNvcmRMaXN0MzIiLCJwYXJzZVN0cnVjdCIsInBhcnNlVmFsdWVSZWNvcmQiLCJ4UGxhY2VtZW50IiwieVBsYWNlbWVudCIsInhBZHZhbmNlIiwieUFkdmFuY2UiLCJ4UGxhRGV2aWNlIiwieVBsYURldmljZSIsInhBZHZEZXZpY2UiLCJ5QWR2RGV2aWNlIiwicGFyc2VWYWx1ZVJlY29yZExpc3QiLCJwYXJzZVBvaW50ZXIiLCJwYXJzZVBvaW50ZXIzMiIsInBhcnNlTGlzdE9mTGlzdHMiLCJwYXJzZUNvdmVyYWdlIiwicmFuZ2VzIiwicGFyc2VDbGFzc0RlZiIsInN0YXJ0R2x5cGgiLCJjbGFzc2VzIiwiY2xhc3NJZCIsImxpc3QiLCJsaXN0MzIiLCJyZWNvcmRMaXN0MzIiLCJwb2ludGVyIiwicG9pbnRlcjMyIiwib2Zmc2V0MTYiLCJ1U2hvcnRMaXN0Iiwib2Zmc2V0MzIiLCJ1TG9uZ0xpc3QiLCJzdHJ1Y3QiLCJjb3ZlcmFnZSIsImNsYXNzRGVmIiwiS2UiLCJyZXNlcnZlZCIsInBhcnNlU2NyaXB0TGlzdCIsInBhcnNlRmVhdHVyZUxpc3QiLCJwYXJzZUxvb2t1cExpc3QiLCJtYXJrRmlsdGVyaW5nU2V0IiwicGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3QiLCJjb25kaXRpb25TZXRPZmZzZXQiLCJmZWF0dXJlVGFibGVTdWJzdGl0dXRpb25PZmZzZXQiLCJnZXRDYXJkOCIsImdldFNob3J0IiwiZ2V0Rml4ZWQiLCJieXRlc1RvU3RyaW5nIiwibGFuZ3VhZ2UiLCJncm91cENvdW50Iiwic2VnQ291bnQiLCJtYWtlIiwidW5pY29kZSIsInVuaWNvZGVzIiwiZ2x5cGhJZCIsInNlZ0NvdW50WDIiLCJjbWFwNExlbmd0aCIsImNtYXAxMk9mZnNldCIsIk9lIiwiUGUiLCJuYW1lVG9HbHlwaEluZGV4IiwiUmUiLCJsaW5lIiwieE1pbiIsInlNaW4iLCJ4TWF4IiwieU1heCIsImhpbnRpbmciLCJnZXRDb250b3VycyIsImxlZnRTaWRlQmVhcmluZyIsInJpZ2h0U2lkZUJlYXJpbmciLCJkcmF3UG9pbnRzIiwiYXJjIiwiZHJhd01ldHJpY3MiLCJnbHlwaExvYWRlciIsInR0ZkdseXBoTG9hZGVyIiwiY2ZmR2x5cGhMb2FkZXIiLCJmb3JtYXRNYWpvciIsImZvcm1hdE1pbm9yIiwib2Zmc2V0U2l6ZSIsInJvcyIsImZkQXJyYXkiLCJmZFNlbGVjdCIsInlhIiwic3VicnNCaWFzIiwiY2hhclN0cmluZ3MiLCJuR2x5cGhzIiwidmEiLCJ3YSIsIndlaWdodCIsIndlaWdodE5hbWUiLCJmb250QkJveCIsImZvbnRNYXRyaXgiLCJoZWFkZXIiLCJuYW1lSW5kZXgiLCJDYSIsInRvcERpY3RJbmRleCIsImdsb2JhbFN1YnJJbmRleCIsImNoYXJzZXRzIiwiSWEiLCJjaGFyU3RyaW5nc0luZGV4IiwiS2EiLCJwcml2YXRlRGljdCIsIkxhIiwic3RyaW5nSW5kZXgiLCJzdHJpbmdzIiwiR2EiLCJmb250UmV2aXNpb24iLCJjaGVja1N1bUFkanVzdG1lbnQiLCJtYWdpY051bWJlciIsImZsYWdzIiwiY3JlYXRlZCIsIm1vZGlmaWVkIiwibWFjU3R5bGUiLCJsb3dlc3RSZWNQUEVNIiwiZm9udERpcmVjdGlvbkhpbnQiLCJnbHlwaERhdGFGb3JtYXQiLCJnZXRUaW1lIiwibGluZUdhcCIsImFkdmFuY2VXaWR0aE1heCIsIm1pbkxlZnRTaWRlQmVhcmluZyIsIm1pblJpZ2h0U2lkZUJlYXJpbmciLCJ4TWF4RXh0ZW50IiwiY2FyZXRTbG9wZVJpc2UiLCJjYXJldFNsb3BlUnVuIiwiY2FyZXRPZmZzZXQiLCJtZXRyaWNEYXRhRm9ybWF0IiwibWF4UG9pbnRzIiwibWF4Q29udG91cnMiLCJtYXhDb21wb3NpdGVQb2ludHMiLCJtYXhDb21wb3NpdGVDb250b3VycyIsIm1heFpvbmVzIiwibWF4VHdpbGlnaHRQb2ludHMiLCJtYXhTdG9yYWdlIiwibWF4RnVuY3Rpb25EZWZzIiwibWF4SW5zdHJ1Y3Rpb25EZWZzIiwibWF4U3RhY2tFbGVtZW50cyIsIm1heFNpemVPZkluc3RydWN0aW9ucyIsIm1heENvbXBvbmVudEVsZW1lbnRzIiwibWF4Q29tcG9uZW50RGVwdGgiLCJfZSIsIjAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiLCIyMCIsIjIxIiwiMjIiLCIyMyIsIjI0IiwiMjUiLCIyNiIsIjI3IiwiMjgiLCIyOSIsIjMwIiwiMzEiLCIzMiIsIjMzIiwiMzQiLCIzNSIsIjM2IiwiMzciLCIzOCIsIjM5IiwiNDAiLCI0MSIsIjQyIiwiNDMiLCI0NCIsIjQ1IiwiNDYiLCI0NyIsIjQ4IiwiNDkiLCI1MCIsIjUxIiwiNTIiLCI1MyIsIjU0IiwiNTUiLCI1NiIsIjU3IiwiNTgiLCI1OSIsIjYwIiwiNjEiLCI2MiIsIjYzIiwiNjQiLCI2NSIsIjY2IiwiNjciLCI2OCIsIjY5IiwiNzAiLCI3MSIsIjcyIiwiNzMiLCI3NCIsIjc1IiwiNzYiLCI3NyIsIjc4IiwiNzkiLCI4MCIsIjgxIiwiODIiLCI4MyIsIjg0IiwiODUiLCI4NiIsIjg3IiwiODgiLCI4OSIsIjkwIiwiOTEiLCI5MiIsIjkzIiwiOTQiLCIxMjgiLCIxMjkiLCIxMzAiLCIxMzEiLCIxMzIiLCIxMzMiLCIxMzQiLCIxMzUiLCIxMzYiLCIxMzciLCIxMzgiLCIxMzkiLCIxNDAiLCIxNDEiLCIxNDIiLCIxNDMiLCIxNDQiLCIxNDUiLCIxNDYiLCIxNDciLCIxNDgiLCIxNDkiLCIxNTAiLCIxNTEiLCJiZiIsIjEwNzgiLCIxMDUyIiwiMTE1NiIsIjExMTgiLCI1MTIxIiwiMTUzNjEiLCIzMDczIiwiMjA0OSIsIjExMjY1IiwiMTMzMTMiLCIxMjI4OSIsIjQwOTciLCI2MTQ1IiwiODE5MyIsIjE2Mzg1IiwiMTAyNSIsIjEwMjQxIiwiNzE2OSIsIjE0MzM3IiwiOTIxNyIsIjEwNjciLCIxMTAxIiwiMjA5MiIsIjEwNjgiLCIxMTMzIiwiMTA2OSIsIjEwNTkiLCIyMTE3IiwiMTA5MyIsIjgyMTgiLCI1MTQ2IiwiMTE1MCIsIjEwMjYiLCIxMDI3IiwiMzA3NiIsIjUxMjQiLCIyMDUyIiwiNDEwMCIsIjEwMjgiLCIxMTU1IiwiMTA1MCIsIjQxMjIiLCIxMDI5IiwiMTAzMCIsIjExNjQiLCIxMTI1IiwiMjA2NyIsIjEwNDMiLCIzMDgxIiwiMTAyNDkiLCI0MTA1IiwiOTIyNSIsIjE2MzkzIiwiNjE1MyIsIjgyMDEiLCIxNzQxNyIsIjUxMjkiLCIxMzMyMSIsIjE4NDQxIiwiNzE3NyIsIjExMjczIiwiMjA1NyIsIjEwMzMiLCIxMjI5NyIsIjEwNjEiLCIxMDgwIiwiMTEyNCIsIjEwMzUiLCIyMDYwIiwiMzA4NCIsIjEwMzYiLCI1MTMyIiwiNjE1NiIsIjQxMDgiLCIxMTIyIiwiMTExMCIsIjEwNzkiLCIzMDc5IiwiMTAzMSIsIjUxMjciLCI0MTAzIiwiMjA1NSIsIjEwMzIiLCIxMTM1IiwiMTA5NSIsIjExMjgiLCIxMDM3IiwiMTA4MSIsIjEwMzgiLCIxMDM5IiwiMTEzNiIsIjEwNTciLCIxMTE3IiwiMjE0MSIsIjIxMDgiLCIxMDc2IiwiMTA3NyIsIjEwNDAiLCIyMDY0IiwiMTA0MSIsIjEwOTkiLCIxMDg3IiwiMTEwNyIsIjExNTgiLCIxMTU5IiwiMTA4OSIsIjExMTEiLCIxMDQyIiwiMTA4OCIsIjExMDgiLCIxMDYyIiwiMTA2MyIsIjIwOTQiLCIxMTM0IiwiMTA3MSIsIjIxMTAiLCIxMDg2IiwiMTEwMCIsIjEwODIiLCIxMTUzIiwiMTE0NiIsIjExMDIiLCIxMTQ4IiwiMTEwNCIsIjIxMjgiLCIxMTIxIiwiMTA0NCIsIjIwNjgiLCIxMTU0IiwiMTA5NiIsIjExMjMiLCIxMDQ1IiwiMTA0NiIsIjIwNzAiLCIxMDk0IiwiMTEzMSIsIjIxNTUiLCIzMTc5IiwiMTA0OCIsIjEwNDciLCIxMDQ5IiwiOTI3NSIsIjQxNTUiLCI1MTc5IiwiMzEzMSIsIjEwODMiLCIyMTA3IiwiODI1MSIsIjYyMDMiLCI3MjI3IiwiMTEwMyIsIjcxOTQiLCIzMDk4IiwiNjE3MCIsIjIwNzQiLCIxMTMyIiwiMTA3NCIsIjExMTUiLCIxMDUxIiwiMTA2MCIsIjExMjc0IiwiMTYzOTQiLCIxMzMyMiIsIjkyMjYiLCI1MTMwIiwiNzE3OCIsIjEyMjk4IiwiMTc0MTgiLCI0MTA2IiwiMTg0NDIiLCIyMDU4IiwiMTk0NjYiLCI2MTU0IiwiMTUzNzAiLCIxMDI1MCIsIjIwNDkwIiwiMzA4MiIsIjEwMzQiLCIyMTUxNCIsIjE0MzQ2IiwiODIwMiIsIjIwNzciLCIxMDUzIiwiMTExNCIsIjEwNjQiLCIyMTQzIiwiMTA5NyIsIjEwOTIiLCIxMDk4IiwiMTA1NCIsIjExMDUiLCIxMDU1IiwiMTA5MCIsIjExNTIiLCIxMDU4IiwiMTA3MCIsIjEwNTYiLCIyMTE1IiwiMTA5MSIsIjEwNjYiLCIxMTA2IiwiMTE2MCIsIjExNTciLCIxMTQ0IiwiMTEzMCIsInBsYXRmb3JtSUQiLCJlbmNvZGluZ0lEIiwibGFuZ3VhZ2VJRCIsIm5hbWVJRCIsImhmIiwiYmVnaW4iLCJ4QXZnQ2hhcldpZHRoIiwiZnNUeXBlIiwieVN1YnNjcmlwdFhTaXplIiwieVN1YnNjcmlwdFlTaXplIiwieVN1YnNjcmlwdFhPZmZzZXQiLCJ5U3Vic2NyaXB0WU9mZnNldCIsInlTdXBlcnNjcmlwdFhTaXplIiwieVN1cGVyc2NyaXB0WVNpemUiLCJ5U3VwZXJzY3JpcHRYT2Zmc2V0IiwieVN1cGVyc2NyaXB0WU9mZnNldCIsInlTdHJpa2VvdXRTaXplIiwieVN0cmlrZW91dFBvc2l0aW9uIiwic0ZhbWlseUNsYXNzIiwicGFub3NlIiwidWxVbmljb2RlUmFuZ2UxIiwidWxVbmljb2RlUmFuZ2UyIiwidWxVbmljb2RlUmFuZ2UzIiwidWxVbmljb2RlUmFuZ2U0IiwiYWNoVmVuZElEIiwidXNGaXJzdENoYXJJbmRleCIsInVzTGFzdENoYXJJbmRleCIsInNUeXBvQXNjZW5kZXIiLCJzVHlwb0Rlc2NlbmRlciIsInNUeXBvTGluZUdhcCIsInVzV2luQXNjZW50IiwidXNXaW5EZXNjZW50IiwidWxDb2RlUGFnZVJhbmdlMSIsInVsQ29kZVBhZ2VSYW5nZTIiLCJzeEhlaWdodCIsInNDYXBIZWlnaHQiLCJ1c0RlZmF1bHRDaGFyIiwidXNCcmVha0NoYXIiLCJ1c01heENvbnRlbnQiLCJ1bmljb2RlUmFuZ2VzIiwiZ2V0VW5pY29kZVJhbmdlIiwiaXRhbGljQW5nbGUiLCJ1bmRlcmxpbmVQb3NpdGlvbiIsInVuZGVybGluZVRoaWNrbmVzcyIsImlzRml4ZWRQaXRjaCIsIm1pbk1lbVR5cGU0MiIsIm1heE1lbVR5cGU0MiIsIm1pbk1lbVR5cGUxIiwibWF4TWVtVHlwZTEiLCJsZiIsImRlbHRhR2x5cGhJZCIsInN1YnN0aXR1dGUiLCJzZXF1ZW5jZXMiLCJhbHRlcm5hdGVTZXRzIiwibGlnYXR1cmVTZXRzIiwibGlnR2x5cGgiLCJtZiIsInNlcXVlbmNlSW5kZXgiLCJsb29rdXBMaXN0SW5kZXgiLCJydWxlU2V0cyIsImxvb2t1cFJlY29yZHMiLCJjbGFzc1NldHMiLCJjb3ZlcmFnZXMiLCJjaGFpblJ1bGVTZXRzIiwiYmFja3RyYWNrIiwibG9va2FoZWFkIiwiYmFja3RyYWNrQ2xhc3NEZWYiLCJpbnB1dENsYXNzRGVmIiwibG9va2FoZWFkQ2xhc3NEZWYiLCJjaGFpbkNsYXNzU2V0IiwiYmFja3RyYWNrQ292ZXJhZ2UiLCJpbnB1dENvdmVyYWdlIiwibG9va2FoZWFkQ292ZXJhZ2UiLCJzdWJzdGl0dXRlcyIsIm5mIiwic2NyaXB0cyIsImZlYXR1cmVzIiwibG9va3VwcyIsInZhcmlhdGlvbnMiLCJxZiIsImZvbnRUb1RhYmxlIiwiYWR2YW5jZVdpZHRoQXZnIiwicmIiLCJtYXhMZWZ0U2lkZUJlYXJpbmciLCJoYXNDaGFyIiwiZ2V0RW5nbGlzaE5hbWUiLCJ1bmlxdWVJRCIsInByZWZlcnJlZEZhbWlseSIsInByZWZlcnJlZFN1YmZhbWlseSIsImNvbXB1dGVDaGVja1N1bSIsInNlYXJjaFRhZyIsImJpblNlYXJjaCIsImdldFRhYmxlIiwiY3JlYXRlRGVmYXVsdFRhYmxlIiwiZ2V0U2NyaXB0TmFtZXMiLCJnZXREZWZhdWx0U2NyaXB0TmFtZSIsImdldFNjcmlwdFRhYmxlIiwiZ2V0TGFuZ1N5c1RhYmxlIiwiZ2V0RmVhdHVyZVRhYmxlIiwiZ2V0TG9va3VwVGFibGVzIiwiZ2V0R2x5cGhDbGFzcyIsImdldENvdmVyYWdlSW5kZXgiLCJleHBhbmRDb3ZlcmFnZSIsImRlZmF1bHRLZXJuaW5nVGFibGVzIiwiZ2V0S2VybmluZ1RhYmxlcyIsImdldEtlcm5pbmdWYWx1ZSIsInBvc0Zvcm1hdCIsInBhaXJTZXRzIiwic2Vjb25kR2x5cGgiLCJ2YWx1ZTEiLCJjbGFzc0RlZjEiLCJjbGFzc0RlZjIiLCJjbGFzc1JlY29yZHMiLCJnZXRTaW5nbGUiLCJzdWIiLCJieSIsImdldEFsdGVybmF0ZXMiLCJnZXRMaWdhdHVyZXMiLCJhZGRTaW5nbGUiLCJhZGRBbHRlcm5hdGUiLCJhZGRMaWdhdHVyZSIsImdldEZlYXR1cmUiLCJyZiIsInNmIiwidGYiLCJ1ZiIsIndmIiwic3JQZXJpb2QiLCJzclBoYXNlIiwic3JUaHJlc2hvbGQiLCJ0cnVuYyIsIk5FR0FUSVZFX0lORklOSVRZIiwidW50b3VjaCIsIlBPU0lUSVZFX0lORklOSVRZIiwiQWYiLCJhdXRvRmxpcCIsImZ1bmNzIiwiaW5oaWJpdEdyaWRGaXQiLCJzdG9yZSIsImlnbm9yZUN2dCIsIkJmIiwiY2hhclRvR2x5cGgiLCJzdHJpbmdUb0dseXBocyIsImRlZmF1bHRSZW5kZXJPcHRpb25zIiwibGlnYSIsInJsaWciLCJuYW1lVG9HbHlwaCIsImtlcm5pbmciLCJmb3JFYWNoR2x5cGgiLCJsZXR0ZXJTcGFjaW5nIiwidHJhY2tpbmciLCJnZXRQYXRocyIsImdldEFkdmFuY2VXaWR0aCIsInZhbGlkYXRlIiwidG9UYWJsZXMiLCJ0b0J1ZmZlciIsInJlcXVlc3RGaWxlU3lzdGVtIiwid2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0iLCJURU1QT1JBUlkiLCJyb290IiwiZ2V0RmlsZSIsImNyZWF0ZVdyaXRlciIsInRvVVJMIiwid3JpdGVGaWxlU3luYyIsIklUQUxJQyIsIlVOREVSU0NPUkUiLCJORUdBVElWRSIsIk9VVExJTkVEIiwiU1RSSUtFT1VUIiwiQk9MRCIsIlVTRVJfVFlQT19NRVRSSUNTIiwiV1dTIiwiT0JMSVFVRSIsIlVMVFJBX0NPTkRFTlNFRCIsIkVYVFJBX0NPTkRFTlNFRCIsIkNPTkRFTlNFRCIsIlNFTUlfQ09OREVOU0VEIiwiU0VNSV9FWFBBTkRFRCIsIkVYUEFOREVEIiwiRVhUUkFfRVhQQU5ERUQiLCJVTFRSQV9FWFBBTkRFRCIsIlRISU4iLCJFWFRSQV9MSUdIVCIsIkxJR0hUIiwiTk9STUFMIiwiU0VNSV9CT0xEIiwiRVhUUkFfQk9MRCIsIkJMQUNLIiwiYXhlcyIsImluc3RhbmNlcyIsIm9mZnNldFRvRGF0YSIsIkRmIiwidmFsdWVGb3JtYXQxIiwidmFsdWVGb3JtYXQyIiwidmFsdWUyIiwiY2xhc3MxQ291bnQiLCJjbGFzczJDb3VudCIsIkVmIiwiJGQiLCJfZCIsIkZvbnQiLCJHbHlwaCIsIlBhdGgiLCJCb3VuZGluZ0JveCIsIl9wYXJzZSIsInN0YXR1c1RleHQiLCJsb2FkU3luYyIsInJlYWRGaWxlU3luYyIsImZzIiwicnVuIiwiZnVuIiwidGl0bGUiLCJicm93c2VyIiwiYXJndiIsInZlcnNpb25zIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsInJlbW92ZUFsbExpc3RlbmVycyIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJiaW5kaW5nIiwiY3dkIiwiY2hkaXIiLCJ1bWFzayIsIml0ZXJhYmxlIiwiYXBwZW5kIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImJvZHlVc2VkIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJpc1Byb3RvdHlwZU9mIiwiX2JvZHlCbG9iIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJzZWFyY2hQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJhcnJheUJ1ZmZlciIsIl9ib2R5QXJyYXlCdWZmZXIiLCJoZWFkZXJzIiwidGV4dCIsInJlYWRBc1RleHQiLCJib2R5IiwiY3JlZGVudGlhbHMiLCJ0b1VwcGVyQ2FzZSIsInJlZmVycmVyIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZmV0Y2giLCJpc1ZpZXciLCJkZWxldGUiLCJlbnRyaWVzIiwiY2xvbmUiLCJyZWRpcmVjdCIsIkhlYWRlcnMiLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsIm9udGltZW91dCIsIndpdGhDcmVkZW50aWFscyIsInNldFJlcXVlc3RIZWFkZXIiLCIuL2NvbG9yL2NvbG9yX2NvbnZlcnNpb24iLCIuL2NvbG9yL2NyZWF0aW5nX3JlYWRpbmciLCIuL2NvbG9yL3A1LkNvbG9yIiwiLi9jb2xvci9zZXR0aW5nIiwiLi9jb3JlL2NvbnN0YW50cyIsIi4vY29yZS9lbnZpcm9ubWVudCIsIi4vY29yZS9lcnJvcl9oZWxwZXJzIiwiLi9jb3JlL2hlbHBlcnMiLCIuL2NvcmUvaW5pdCIsIi4vY29yZS9sZWdhY3kiLCIuL2NvcmUvbWFpbiIsIi4vY29yZS9wNS5FbGVtZW50IiwiLi9jb3JlL3A1LkdyYXBoaWNzIiwiLi9jb3JlL3A1LlJlbmRlcmVyIiwiLi9jb3JlL3A1LlJlbmRlcmVyMkQiLCIuL2NvcmUvcmVuZGVyaW5nIiwiLi9jb3JlL3NoYXBlLzJkX3ByaW1pdGl2ZXMiLCIuL2NvcmUvc2hhcGUvYXR0cmlidXRlcyIsIi4vY29yZS9zaGFwZS9jdXJ2ZXMiLCIuL2NvcmUvc2hhcGUvdmVydGV4IiwiLi9jb3JlL3NoaW0iLCIuL2NvcmUvc3RydWN0dXJlIiwiLi9jb3JlL3RyYW5zZm9ybSIsIi4vZGF0YS9wNS5UeXBlZERpY3QiLCIuL2V2ZW50cy9hY2NlbGVyYXRpb24iLCIuL2V2ZW50cy9rZXlib2FyZCIsIi4vZXZlbnRzL21vdXNlIiwiLi9ldmVudHMvdG91Y2giLCIuL2ltYWdlL2ZpbHRlcnMiLCIuL2ltYWdlL2ltYWdlIiwiLi9pbWFnZS9sb2FkaW5nX2Rpc3BsYXlpbmciLCIuL2ltYWdlL3A1LkltYWdlIiwiLi9pbWFnZS9waXhlbHMiLCIuL2lvL2ZpbGVzIiwiLi9pby9wNS5UYWJsZSIsIi4vaW8vcDUuVGFibGVSb3ciLCIuL2lvL3A1LlhNTCIsIi4vbWF0aC9jYWxjdWxhdGlvbiIsIi4vbWF0aC9tYXRoIiwiLi9tYXRoL25vaXNlIiwiLi9tYXRoL3A1LlZlY3RvciIsIi4vbWF0aC9yYW5kb20iLCIuL21hdGgvdHJpZ29ub21ldHJ5IiwiLi90eXBvZ3JhcGh5L2F0dHJpYnV0ZXMiLCIuL3R5cG9ncmFwaHkvbG9hZGluZ19kaXNwbGF5aW5nIiwiLi90eXBvZ3JhcGh5L3A1LkZvbnQiLCIuL3V0aWxpdGllcy9hcnJheV9mdW5jdGlvbnMiLCIuL3V0aWxpdGllcy9jb252ZXJzaW9uIiwiLi91dGlsaXRpZXMvc3RyaW5nX2Z1bmN0aW9ucyIsIi4vdXRpbGl0aWVzL3RpbWVfZGF0ZSIsIi4vd2ViZ2wvM2RfcHJpbWl0aXZlcyIsIi4vd2ViZ2wvaW50ZXJhY3Rpb24iLCIuL3dlYmdsL2xpZ2h0IiwiLi93ZWJnbC9sb2FkaW5nIiwiLi93ZWJnbC9tYXRlcmlhbCIsIi4vd2ViZ2wvcDUuQ2FtZXJhIiwiLi93ZWJnbC9wNS5HZW9tZXRyeSIsIi4vd2ViZ2wvcDUuTWF0cml4IiwiLi93ZWJnbC9wNS5SZW5kZXJlckdMIiwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLkltbWVkaWF0ZSIsIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5SZXRhaW5lZCIsIi4vd2ViZ2wvcDUuU2hhZGVyIiwiLi93ZWJnbC9wNS5UZXh0dXJlIiwiLi93ZWJnbC90ZXh0IiwiQ29sb3JDb252ZXJzaW9uIiwiX2hzYmFUb0hTTEEiLCJfaHNiYVRvUkdCQSIsIl9oc2xhVG9IU0JBIiwiX2hzbGFUb1JHQkEiLCJfcmdiYVRvSFNCQSIsIl9yZ2JhVG9IU0xBIiwiLi4vY29yZS9tYWluIiwiYWxwaGEiLCJfdmFsaWRhdGVQYXJhbWV0ZXJzIiwiY29sb3IiLCJfZ2V0QWxwaGEiLCJibHVlIiwiX2dldEJsdWUiLCJicmlnaHRuZXNzIiwiX2dldEJyaWdodG5lc3MiLCJDb2xvciIsImdyZWVuIiwiX2dldEdyZWVuIiwiaHVlIiwiX2dldEh1ZSIsImxlcnBDb2xvciIsIl9jb2xvck1vZGUiLCJfY29sb3JNYXhlcyIsIlJHQiIsImxldmVscyIsIkhTQiIsImhzYmEiLCJIU0wiLCJfZ2V0TGlnaHRuZXNzIiwiaHNsYSIsImxlcnAiLCJsaWdodG5lc3MiLCJyZWQiLCJfZ2V0UmVkIiwic2F0dXJhdGlvbiIsIl9nZXRTYXR1cmF0aW9uIiwiLi4vY29yZS9jb25zdGFudHMiLCIuLi9jb3JlL2Vycm9yX2hlbHBlcnMiLCIuL3A1LkNvbG9yIiwiX3N0b3JlTW9kZUFuZE1heGVzIiwiX2FycmF5IiwiX3BhcnNlSW5wdXRzIiwiX2NhbGN1bGF0ZUxldmVscyIsInRvUHJlY2lzaW9uIiwibWF4ZXMiLCJzZXRSZWQiLCJzZXRHcmVlbiIsInNldEJsdWUiLCJzZXRBbHBoYSIsIl9nZXRNb2RlIiwiX2dldE1heGVzIiwiYWxpY2VibHVlIiwiYW50aXF1ZXdoaXRlIiwiYXF1YSIsImFxdWFtYXJpbmUiLCJhenVyZSIsImJlaWdlIiwiYmlzcXVlIiwiYmxhY2siLCJibGFuY2hlZGFsbW9uZCIsImJsdWV2aW9sZXQiLCJidXJseXdvb2QiLCJjYWRldGJsdWUiLCJjaGFydHJldXNlIiwiY2hvY29sYXRlIiwiY29yYWwiLCJjb3JuZmxvd2VyYmx1ZSIsImNvcm5zaWxrIiwiY3JpbXNvbiIsImN5YW4iLCJkYXJrYmx1ZSIsImRhcmtjeWFuIiwiZGFya2dvbGRlbnJvZCIsImRhcmtncmF5IiwiZGFya2dyZWVuIiwiZGFya2dyZXkiLCJkYXJra2hha2kiLCJkYXJrbWFnZW50YSIsImRhcmtvbGl2ZWdyZWVuIiwiZGFya29yYW5nZSIsImRhcmtvcmNoaWQiLCJkYXJrcmVkIiwiZGFya3NhbG1vbiIsImRhcmtzZWFncmVlbiIsImRhcmtzbGF0ZWJsdWUiLCJkYXJrc2xhdGVncmF5IiwiZGFya3NsYXRlZ3JleSIsImRhcmt0dXJxdW9pc2UiLCJkYXJrdmlvbGV0IiwiZGVlcHBpbmsiLCJkZWVwc2t5Ymx1ZSIsImRpbWdyYXkiLCJkaW1ncmV5IiwiZG9kZ2VyYmx1ZSIsImZpcmVicmljayIsImZsb3JhbHdoaXRlIiwiZm9yZXN0Z3JlZW4iLCJmdWNoc2lhIiwiZ2FpbnNib3JvIiwiZ2hvc3R3aGl0ZSIsImdvbGQiLCJnb2xkZW5yb2QiLCJncmF5IiwiZ3JlZW55ZWxsb3ciLCJncmV5IiwiaG9uZXlkZXciLCJob3RwaW5rIiwiaW5kaWFucmVkIiwiaW5kaWdvIiwiaXZvcnkiLCJraGFraSIsImxhdmVuZGVyIiwibGF2ZW5kZXJibHVzaCIsImxhd25ncmVlbiIsImxlbW9uY2hpZmZvbiIsImxpZ2h0Ymx1ZSIsImxpZ2h0Y29yYWwiLCJsaWdodGN5YW4iLCJsaWdodGdvbGRlbnJvZHllbGxvdyIsImxpZ2h0Z3JheSIsImxpZ2h0Z3JlZW4iLCJsaWdodGdyZXkiLCJsaWdodHBpbmsiLCJsaWdodHNhbG1vbiIsImxpZ2h0c2VhZ3JlZW4iLCJsaWdodHNreWJsdWUiLCJsaWdodHNsYXRlZ3JheSIsImxpZ2h0c2xhdGVncmV5IiwibGlnaHRzdGVlbGJsdWUiLCJsaWdodHllbGxvdyIsImxpbWUiLCJsaW1lZ3JlZW4iLCJsaW5lbiIsIm1hZ2VudGEiLCJtYXJvb24iLCJtZWRpdW1hcXVhbWFyaW5lIiwibWVkaXVtYmx1ZSIsIm1lZGl1bW9yY2hpZCIsIm1lZGl1bXB1cnBsZSIsIm1lZGl1bXNlYWdyZWVuIiwibWVkaXVtc2xhdGVibHVlIiwibWVkaXVtc3ByaW5nZ3JlZW4iLCJtZWRpdW10dXJxdW9pc2UiLCJtZWRpdW12aW9sZXRyZWQiLCJtaWRuaWdodGJsdWUiLCJtaW50Y3JlYW0iLCJtaXN0eXJvc2UiLCJtb2NjYXNpbiIsIm5hdmFqb3doaXRlIiwibmF2eSIsIm9sZGxhY2UiLCJvbGl2ZSIsIm9saXZlZHJhYiIsIm9yYW5nZSIsIm9yYW5nZXJlZCIsIm9yY2hpZCIsInBhbGVnb2xkZW5yb2QiLCJwYWxlZ3JlZW4iLCJwYWxldHVycXVvaXNlIiwicGFsZXZpb2xldHJlZCIsInBhcGF5YXdoaXAiLCJwZWFjaHB1ZmYiLCJwZXJ1IiwicGx1bSIsInBvd2RlcmJsdWUiLCJwdXJwbGUiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZXNtb2tlIiwieWVsbG93IiwieWVsbG93Z3JlZW4iLCJSZWdFeHAiLCJIRVgzIiwiSEVYNCIsIkhFWDYiLCJIRVg4IiwiUkdCX1BFUkNFTlQiLCJSR0JBIiwiUkdCQV9QRVJDRU5UIiwiSFNMQSIsIkhTQkEiLCIuL2NvbG9yX2NvbnZlcnNpb24iLCJiYWNrZ3JvdW5kIiwiSW1hZ2UiLCJpbWFnZSIsIl9yZW5kZXJlciIsImNvbG9yTW9kZSIsIl9zZXRQcm9wZXJ0eSIsIm5vRmlsbCIsIm5vU3Ryb2tlIiwiUDJEIiwiV0VCR0wiLCJBUlJPVyIsIkNST1NTIiwiSEFORCIsIk1PVkUiLCJURVhUIiwiV0FJVCIsIkhBTEZfUEkiLCJRVUFSVEVSX1BJIiwiVEFVIiwiVFdPX1BJIiwiREVHUkVFUyIsIlJBRElBTlMiLCJERUdfVE9fUkFEIiwiUkFEX1RPX0RFRyIsIkNPUk5FUiIsIkNPUk5FUlMiLCJSQURJVVMiLCJSSUdIVCIsIkxFRlQiLCJDRU5URVIiLCJUT1AiLCJCT1RUT00iLCJCQVNFTElORSIsIlBPSU5UUyIsIkxJTkVTIiwiTElORV9TVFJJUCIsIkxJTkVfTE9PUCIsIlRSSUFOR0xFUyIsIlRSSUFOR0xFX0ZBTiIsIlRSSUFOR0xFX1NUUklQIiwiUVVBRFMiLCJRVUFEX1NUUklQIiwiQ0xPU0UiLCJPUEVOIiwiQ0hPUkQiLCJQSUUiLCJQUk9KRUNUIiwiU1FVQVJFIiwiUk9VTkQiLCJCRVZFTCIsIk1JVEVSIiwiQVVUTyIsIkFMVCIsIkJBQ0tTUEFDRSIsIkNPTlRST0wiLCJERUxFVEUiLCJET1dOX0FSUk9XIiwiRU5URVIiLCJFU0NBUEUiLCJMRUZUX0FSUk9XIiwiT1BUSU9OIiwiUkVUVVJOIiwiUklHSFRfQVJST1ciLCJTSElGVCIsIlRBQiIsIlVQX0FSUk9XIiwiQkxFTkQiLCJBREQiLCJEQVJLRVNUIiwiTElHSFRFU1QiLCJESUZGRVJFTkNFIiwiRVhDTFVTSU9OIiwiTVVMVElQTFkiLCJTQ1JFRU4iLCJSRVBMQUNFIiwiT1ZFUkxBWSIsIkhBUkRfTElHSFQiLCJTT0ZUX0xJR0hUIiwiRE9ER0UiLCJCVVJOIiwiVEhSRVNIT0xEIiwiR1JBWSIsIk9QQVFVRSIsIklOVkVSVCIsIlBPU1RFUklaRSIsIkRJTEFURSIsIkVST0RFIiwiQkxVUiIsIl9ERUZBVUxUX1RFWFRfRklMTCIsIl9ERUZBVUxUX0xFQURNVUxUIiwiX0NUWF9NSURETEUiLCJMSU5FQVIiLCJRVUFEUkFUSUMiLCJCRVpJRVIiLCJDVVJWRSIsIlNUUk9LRSIsIkZJTEwiLCJURVhUVVJFIiwiSU1NRURJQVRFIiwiTkVBUkVTVCIsIlJFUEVBVCIsIkNMQU1QIiwiTUlSUk9SIiwiTEFORFNDQVBFIiwiUE9SVFJBSVQiLCJfREVGQVVMVF9TVFJPS0UiLCJfREVGQVVMVF9GSUxMIiwiR1JJRCIsIkFYRVMiLCJpbm5lcldpZHRoIiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50V2lkdGgiLCJpbm5lckhlaWdodCIsImNsaWVudEhlaWdodCIsIl9mcmFtZVJhdGUiLCJfbGFzdEZyYW1lVGltZSIsInBlcmZvcm1hbmNlIiwiX3RhcmdldEZyYW1lUmF0ZSIsInByaW50IiwiZnJhbWVDb3VudCIsImZvY3VzZWQiLCJoYXNGb2N1cyIsImN1cnNvciIsIl9jdXJFbGVtZW50IiwiZWx0Iiwic3R5bGUiLCJmcmFtZVJhdGUiLCJfcnVuRnJhbWVzIiwiZ2V0RnJhbWVSYXRlIiwic2V0RnJhbWVSYXRlIiwibm9DdXJzb3IiLCJkaXNwbGF5V2lkdGgiLCJzY3JlZW4iLCJkaXNwbGF5SGVpZ2h0Iiwid2luZG93V2lkdGgiLCJ3aW5kb3dIZWlnaHQiLCJfb25yZXNpemUiLCJfaXNHbG9iYWwiLCJ3aW5kb3dSZXNpemVkIiwicHJldmVudERlZmF1bHQiLCJmdWxsc2NyZWVuIiwiZnVsbHNjcmVlbkVsZW1lbnQiLCJ3ZWJraXRGdWxsc2NyZWVuRWxlbWVudCIsIm1vekZ1bGxTY3JlZW5FbGVtZW50IiwibXNGdWxsc2NyZWVuRWxlbWVudCIsImZ1bGxzY3JlZW5FbmFibGVkIiwid2Via2l0RnVsbHNjcmVlbkVuYWJsZWQiLCJtb3pGdWxsU2NyZWVuRW5hYmxlZCIsIm1zRnVsbHNjcmVlbkVuYWJsZWQiLCJyZXF1ZXN0RnVsbHNjcmVlbiIsIm1velJlcXVlc3RGdWxsU2NyZWVuIiwid2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4iLCJtc1JlcXVlc3RGdWxsc2NyZWVuIiwiZXhpdEZ1bGxzY3JlZW4iLCJtb3pDYW5jZWxGdWxsU2NyZWVuIiwid2Via2l0RXhpdEZ1bGxzY3JlZW4iLCJtc0V4aXRGdWxsc2NyZWVuIiwicGl4ZWxEZW5zaXR5IiwiX3BpeGVsRGVuc2l0eSIsIl9waXhlbHNEaXJ0eSIsInJlc2l6ZUNhbnZhcyIsImRpc3BsYXlEZW5zaXR5IiwiZGV2aWNlUGl4ZWxSYXRpbyIsImdldFVSTCIsImdldFVSTFBhdGgiLCJwYXRobmFtZSIsImdldFVSTFBhcmFtcyIsImxhc3RJbmRleCIsIi4vY29uc3RhbnRzIiwiLi9tYWluIiwiX2ZyaWVuZGx5RmlsZUxvYWRFcnJvciIsInNvbWUiLCJfaGVscEZvck1pc3VzZWRBdFRvcExldmVsQ29kZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCIuLi8uLi9kb2NzL3JlZmVyZW5jZS9kYXRhLmpzb24iLCJtb2RlQWRqdXN0IiwibW9jaGEiLCJzZXR1cCIsImluc3RhbmNlIiwiZXhpdCIsInB1c2hTdHlsZSIsInBvcFN0eWxlIiwiX3NldHVwRG9uZSIsIl91c2VyTm9kZSIsIl9lbGVtZW50cyIsIl9yZXF1ZXN0QW5pbUlkIiwiX3ByZWxvYWRDb3VudCIsIl9pbml0aWFsaXplSW5zdGFuY2VWYXJpYWJsZXMiLCJfZGVmYXVsdENhbnZhc1NpemUiLCJtb3VzZW1vdmUiLCJtb3VzZWRvd24iLCJtb3VzZXVwIiwiZHJhZ2VuZCIsImRyYWdvdmVyIiwiY2xpY2siLCJkYmxjbGljayIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0Iiwia2V5ZG93biIsImtleXVwIiwia2V5cHJlc3MiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIiwidG91Y2hlbmQiLCJyZXNpemUiLCJibHVyIiwid2hlZWwiLCJfbG9hZGluZ1NjcmVlbklkIiwiX3JlZ2lzdGVyZWRNZXRob2RzIiwiRGV2aWNlT3JpZW50YXRpb25FdmVudCIsImRldmljZW9yaWVudGF0aW9uIiwiRGV2aWNlTW90aW9uRXZlbnQiLCJfaXNOb2RlV2Via2l0IiwiZGV2aWNlbW90aW9uIiwicHJlbG9hZCIsImlubmVySFRNTCIsIl9wcmVsb2FkTWV0aG9kcyIsIl93cmFwUHJlbG9hZCIsIl9yZWdpc3RlcmVkUHJlbG9hZE1ldGhvZHMiLCJfcnVuSWZQcmVsb2Fkc0FyZURvbmUiLCJfc2V0dXAiLCJfZHJhdyIsInBhcmVudE5vZGUiLCJfZGVjcmVtZW50UHJlbG9hZCIsIl9pbmNyZW1lbnRQcmVsb2FkIiwiY3JlYXRlQ2FudmFzIiwiZGF0YXNldCIsImhpZGRlbiIsInZpc2liaWxpdHkiLCJyZWRyYXciLCJfdXBkYXRlTW91c2VDb29yZHMiLCJjbGVhckludGVydmFsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJfY3JlYXRlRnJpZW5kbHlHbG9iYWxGdW5jdGlvbkJpbmRlciIsInBhc3NpdmUiLCJyZWdpc3Rlck1ldGhvZCIsIl9zdHlsZXMiLCJfYmV6aWVyRGV0YWlsIiwiX2N1cnZlRGV0YWlsIiwicmdiIiwiaHNiIiwiaHNsIiwiZGlzYWJsZUZyaWVuZGx5RXJyb3JzIiwibG9hZEpTT04iLCJsb2FkSW1hZ2UiLCJsb2FkU3RyaW5ncyIsImxvYWRYTUwiLCJsb2FkQnl0ZXMiLCJsb2FkVGFibGUiLCJsb2FkRm9udCIsImxvYWRNb2RlbCIsImxvYWRTaGFkZXIiLCJwcmUiLCJyZWdpc3RlclByZWxvYWRNZXRob2QiLCJnbG9iYWxPYmplY3QiLCIuL3NoaW0iLCJFbGVtZW50IiwiX3BJbnN0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJjbGFzcyIsIm1vdXNlUHJlc3NlZCIsIl9zZXRNb3VzZUJ1dHRvbiIsImRvdWJsZUNsaWNrZWQiLCJtb3VzZVdoZWVsIiwibW91c2VSZWxlYXNlZCIsIm1vdXNlQ2xpY2tlZCIsIm1vdXNlTW92ZWQiLCJtb3VzZU92ZXIiLCJjaGFuZ2VkIiwibW91c2VPdXQiLCJ0b3VjaFN0YXJ0ZWQiLCJ0b3VjaE1vdmVkIiwidG91Y2hFbmRlZCIsImRyYWdPdmVyIiwiZHJhZ0xlYXZlIiwiZHJvcCIsIkZpbGUiLCJ0YXJnZXQiLCJGaWxlTGlzdCIsInN0b3BQcm9wYWdhdGlvbiIsImRhdGFUcmFuc2ZlciIsImZpbGVzIiwiR3JhcGhpY3MiLCJjYW52YXMiLCJSZW5kZXJlckdMIiwiUmVuZGVyZXIyRCIsIl9hcHBseURlZmF1bHRzIiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0TGVmdCIsIm9mZnNldFRvcCIsIlJlbmRlcmVyIiwiX2lzTWFpbkNhbnZhcyIsImRpc3BsYXkiLCJfdGV4dFNpemUiLCJfdGV4dExlYWRpbmciLCJfdGV4dEZvbnQiLCJfdGV4dFN0eWxlIiwiX3RleHRBc2NlbnQiLCJfdGV4dERlc2NlbnQiLCJfdGV4dEFsaWduIiwiX3RleHRCYXNlbGluZSIsIl9yZWN0TW9kZSIsIl9lbGxpcHNlTW9kZSIsIl9jdXJ2ZVRpZ2h0bmVzcyIsIl9pbWFnZU1vZGUiLCJfdGludCIsIl9kb1N0cm9rZSIsIl9kb0ZpbGwiLCJfc3Ryb2tlU2V0IiwiX2ZpbGxTZXQiLCJwcm9wZXJ0aWVzIiwidGV4dExlYWRpbmciLCJ0ZXh0U2l6ZSIsIl9hcHBseVRleHRQcm9wZXJ0aWVzIiwidGV4dFN0eWxlIiwidGV4dEFzY2VudCIsIl91cGRhdGVUZXh0TWV0cmljcyIsInRleHREZXNjZW50IiwidGV4dEFsaWduIiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwiTUFYX1ZBTFVFIiwidGV4dFdpZHRoIiwiX3JlbmRlclRleHQiLCJfaXNPcGVuVHlwZSIsImZvbnRTaXplIiwib3ZlcmZsb3ciLCJ2ZXJ0aWNhbEFsaWduIiwiZHJhd2luZ0NvbnRleHQiLCJfY2FjaGVkRmlsbFN0eWxlIiwiX2NhY2hlZFN0cm9rZVN0eWxlIiwiX3NldEZpbGwiLCJfc2V0U3Ryb2tlIiwibGluZUNhcCIsInNjYWxlIiwic2F2ZSIsInJlc2V0TWF0cml4IiwiX2dldEZpbGwiLCJmaWxsUmVjdCIsInJlc3RvcmUiLCJjbGVhclJlY3QiLCJNZWRpYUVsZW1lbnQiLCJsb2FkUGl4ZWxzIiwiX2dldFRpbnRlZEltYWdlQ2FudmFzIiwiZHJhd0ltYWdlIiwiX3RvUGl4ZWxzIiwiY3JlYXRlSW1hZ2VEYXRhIiwicHV0SW1hZ2VEYXRhIiwiYmxlbmRNb2RlIiwiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIiwiYmxlbmQiLCJfY29weUhlbHBlciIsImdldEltYWdlRGF0YSIsInBpeGVscyIsInNldFRyYW5zZm9ybSIsImltYWdlRGF0YSIsInVwZGF0ZVBpeGVscyIsIl9hY3V0ZUFyY1RvQmV6aWVyIiwiYXkiLCJjeSIsImVsbGlwc2UiLCJfZ2V0U3Ryb2tlIiwidHJhbnNsYXRlIiwicXVhZCIsInJlY3QiLCJhcmNUbyIsInRyaWFuZ2xlIiwiZW5kU2hhcGUiLCJQT0xZR09OIiwiX2RvRmlsbFN0cm9rZUNsb3NlIiwiaXNWZXJ0Iiwibm9TbW9vdGgiLCJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCJzbW9vdGgiLCJzdHJva2VDYXAiLCJzdHJva2VKb2luIiwibGluZUpvaW4iLCJzdHJva2VXZWlnaHQiLCJiZXppZXIiLCJiZWdpblNoYXBlIiwidmVydGV4IiwiYmV6aWVyVmVydGV4IiwiY3VydmVWZXJ0ZXgiLCJhcHBseU1hdHJpeCIsInRyYW5zZm9ybSIsInJvdGF0ZSIsInNoZWFyWCIsInNoZWFyWSIsIlZlY3RvciIsInRleHRCYXNlbGluZSIsIl9yZW5kZXJQYXRoIiwicmVuZGVyZXIiLCJzdHJva2VUZXh0IiwiZmlsbFRleHQiLCJfdGV4dFdpZHRoIiwibWVhc3VyZVRleHQiLCIuLi9pbWFnZS9maWx0ZXJzIiwiLi9wNS5SZW5kZXJlciIsImNsYXNzTGlzdCIsIl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkIiwibm9DYW52YXMiLCJjcmVhdGVHcmFwaGljcyIsIi4uL3dlYmdsL3A1LlJlbmRlcmVyR0wiLCIuL3A1LkdyYXBoaWNzIiwiLi9wNS5SZW5kZXJlcjJEIiwiX3RvUmFkaWFucyIsImF0YW4iLCIuLi9jb25zdGFudHMiLCIuLi9lcnJvcl9oZWxwZXJzIiwiLi4vaGVscGVycyIsIi4uL21haW4iLCJlbGxpcHNlTW9kZSIsInJlY3RNb2RlIiwiYmV6aWVyRGV0YWlsIiwiYmV6aWVyUG9pbnQiLCJiZXppZXJUYW5nZW50IiwiY3VydmVEZXRhaWwiLCJjdXJ2ZVRpZ2h0bmVzcyIsImN1cnZlUG9pbnQiLCJjdXJ2ZVRhbmdlbnQiLCJiZWdpbkNvbnRvdXIiLCJpc1AzRCIsImVuZENvbnRvdXIiLCJxdWFkcmF0aWNWZXJ0ZXgiLCJfY29udG91ckluaXRlZCIsIngzIiwieTMiLCJfY29udG91clZlcnRpY2VzIiwid2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwibW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwib1JlcXVlc3RBbmltYXRpb25GcmFtZSIsIm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJub0xvb3AiLCJwcm9wcyIsIl91cGRhdGUiLCJwb3BNYXRyaXgiLCJwcmludE1hdHJpeCIsInB1c2hNYXRyaXgiLCJyb3RhdGVYIiwiX2Fzc2VydDNkIiwicm90YXRlWSIsInJvdGF0ZVoiLCJjcmVhdGVTdHJpbmdEaWN0IiwiU3RyaW5nRGljdCIsImNyZWF0ZU51bWJlckRpY3QiLCJOdW1iZXJEaWN0IiwiVHlwZWREaWN0IiwiaGFzS2V5IiwiX3ZhbGlkYXRlIiwiX2FkZE9iaiIsInNhdmVUYWJsZSIsImRvd25sb2FkRmlsZSIsInNhdmVKU09OIiwiZGl2IiwiX3ZhbHVlVGVzdCIsIl9rZXlUZXN0IiwibWluS2V5IiwibWF4S2V5IiwiZGV2aWNlT3JpZW50YXRpb24iLCJhY2NlbGVyYXRpb25YIiwiYWNjZWxlcmF0aW9uWSIsImFjY2VsZXJhdGlvbloiLCJwQWNjZWxlcmF0aW9uWCIsInBBY2NlbGVyYXRpb25ZIiwicEFjY2VsZXJhdGlvbloiLCJfdXBkYXRlUEFjY2VsZXJhdGlvbnMiLCJyb3RhdGlvblgiLCJyb3RhdGlvblkiLCJyb3RhdGlvbloiLCJwUm90YXRpb25YIiwicFJvdGF0aW9uWSIsInBSb3RhdGlvbloiLCJfdXBkYXRlUFJvdGF0aW9ucyIsInR1cm5BeGlzIiwic2V0TW92ZVRocmVzaG9sZCIsInNldFNoYWtlVGhyZXNob2xkIiwiX29uZGV2aWNlb3JpZW50YXRpb24iLCJiZXRhIiwiZ2FtbWEiLCJfaGFuZGxlTW90aW9uIiwiX29uZGV2aWNlbW90aW9uIiwiYWNjZWxlcmF0aW9uIiwib3JpZW50YXRpb24iLCJkZXZpY2VNb3ZlZCIsImRldmljZVR1cm5lZCIsImRldmljZVNoYWtlbiIsImlzS2V5UHJlc3NlZCIsImtleUlzUHJlc3NlZCIsImtleUNvZGUiLCJfb25rZXlkb3duIiwid2hpY2giLCJrZXlQcmVzc2VkIiwiY2hhckNvZGUiLCJfb25rZXl1cCIsImtleVJlbGVhc2VkIiwiX29ua2V5cHJlc3MiLCJfbGFzdEtleUNvZGVUeXBlZCIsImtleVR5cGVkIiwiX29uYmx1ciIsImtleUlzRG93biIsIl9oYXNNb3VzZUludGVyYWN0ZWQiLCJtb3VzZVgiLCJtb3VzZVkiLCJwbW91c2VYIiwicG1vdXNlWSIsIndpbk1vdXNlWCIsIndpbk1vdXNlWSIsInB3aW5Nb3VzZVgiLCJwd2luTW91c2VZIiwibW91c2VCdXR0b24iLCJtb3VzZUlzUHJlc3NlZCIsIl91cGRhdGVOZXh0TW91c2VDb29yZHMiLCJ0b3VjaGVzIiwiY2xpZW50WCIsImNoYW5nZWRUb3VjaGVzIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwic2Nyb2xsV2lkdGgiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRZIiwidG9wIiwid2luWCIsIndpblkiLCJpZGVudGlmaWVyIiwiX21vdXNlV2hlZWxEZWx0YVkiLCJidXR0b24iLCJfb25tb3VzZW1vdmUiLCJtb3VzZURyYWdnZWQiLCJfb25tb3VzZWRvd24iLCJfb25tb3VzZXVwIiwiX29uZHJhZ2VuZCIsIl9vbmRyYWdvdmVyIiwiX29uY2xpY2siLCJfb25kYmxjbGljayIsIl9wbW91c2VXaGVlbERlbHRhWSIsIl9vbndoZWVsIiwiZGVsdGFZIiwiX3VwZGF0ZVRvdWNoQ29vcmRzIiwiX29udG91Y2hzdGFydCIsIl9vbnRvdWNobW92ZSIsIl9vbnRvdWNoZW5kIiwiSW50MzJBcnJheSIsIl9nZXRBUkdCIiwiX3NldFBpeGVscyIsIkltYWdlRGF0YSIsIl90b0ltYWdlRGF0YSIsIl9jcmVhdGVJbWFnZURhdGEiLCJfdG1wQ2FudmFzIiwiX3RtcEN0eCIsIm9wYXF1ZSIsImludmVydCIsInBvc3Rlcml6ZSIsImRpbGF0ZSIsImVyb2RlIiwiY3JlYXRlSW1hZ2UiLCJzYXZlQ2FudmFzIiwiSFRNTENhbnZhc0VsZW1lbnQiLCJfY2hlY2tGaWxlRXh0ZW5zaW9uIiwidG9CbG9iIiwic2F2ZUZyYW1lcyIsImNvbnN0cmFpbiIsIl9tYWtlRnJhbWUiLCJzZXRJbnRlcnZhbCIsImZpbGVuYW1lIiwiZXh0IiwidG9EYXRhVVJMIiwiY3Jvc3NPcmlnaW4iLCJ2aWRlb1dpZHRoIiwidmlkZW9IZWlnaHQiLCJ0aW50Iiwibm9UaW50IiwiaW1hZ2VNb2RlIiwiLi4vY29yZS9oZWxwZXJzIiwiLi9maWx0ZXJzIiwiX21vZGlmaWVkIiwic2V0TW9kaWZpZWQiLCJtYXNrIiwiaXNNb2RpZmllZCIsIi4uL2NvbG9yL3A1LkNvbG9yIiwiaHR0cERvIiwibGFzdEluZGV4T2YiLCJjdXJyZW50U3RhdGUiLCJ0b2tlbiIsImVzY2FwZWQiLCJjb2x1bW5zIiwiVGFibGVSb3ciLCJvYmoiLCJhZGRSb3ciLCJieXRlcyIsImh0dHBHZXQiLCJodHRwUG9zdCIsIkNvbnRlbnQtVHlwZSIsIlhNTCIsImNoaWxkTm9kZXMiLCJhZGRDaGlsZCIsInNldE5hbWUiLCJub2RlTmFtZSIsIl9zZXRDb250IiwidGV4dENvbnRlbnQiLCJfc2V0QXR0cmlidXRlcyIsImNoaWxkcmVuIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiX3BXcml0ZXJzIiwiUHJpbnRXcml0ZXIiLCJtaWxsaXMiLCJ3cml0ZUZpbGUiLCJzYXZlU3RyaW5ncyIsIlNvdW5kRmlsZSIsInNhdmVTb3VuZCIsInNhdmVKU09OT2JqZWN0Iiwic2F2ZUpTT05BcnJheSIsInJvd3MiLCJnZXRTdHJpbmciLCJfaXNTYWZhcmkiLCJvbmNsaWNrIiwiYWxlcnQiLCJlczYtcHJvbWlzZSIsImZldGNoLWpzb25wIiwiZmlsZS1zYXZlciIsIndoYXR3Zy1mZXRjaCIsInJlbW92ZVJvdyIsImdldFJvdyIsImdldFJvd3MiLCJmaW5kUm93IiwiZmluZFJvd3MiLCJtYXRjaFJvdyIsIm1hdGNoUm93cyIsImdldENvbHVtbiIsImNsZWFyUm93cyIsImFkZENvbHVtbiIsImdldENvbHVtbkNvdW50IiwiZ2V0Um93Q291bnQiLCJyZW1vdmVUb2tlbnMiLCJyZW1vdmVDb2x1bW4iLCJzZXROdW0iLCJzZXRTdHJpbmciLCJnZXROdW0iLCJnZXRPYmplY3QiLCJnZXRBcnJheSIsImF0dHJpYnV0ZXMiLCJnZXRQYXJlbnQiLCJnZXROYW1lIiwiaGFzQ2hpbGRyZW4iLCJsaXN0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbiIsImdldENoaWxkIiwiZ2V0QXR0cmlidXRlQ291bnQiLCJsaXN0QXR0cmlidXRlcyIsImhhc0F0dHJpYnV0ZSIsImdldENvbnRlbnQiLCJzZXRDb250ZW50Iiwibm9kZVZhbHVlIiwiaHlwb3QiLCJtYWciLCJub3JtIiwic3EiLCJjcmVhdGVWZWN0b3IiLCJub2lzZURldGFpbCIsIm5vaXNlU2VlZCIsInNldFNlZWQiLCJnZXRTZWVkIiwicDUiLCJtYWdTcSIsImNyb3NzIiwibm9ybWFsaXplIiwibGltaXQiLCJzZXRNYWciLCJoZWFkaW5nIiwiYXRhbjIiLCJfZnJvbVJhZGlhbnMiLCJhbmdsZUJldHdlZW4iLCJhY29zIiwiZnJvbUFuZ2xlIiwiZnJvbUFuZ2xlcyIsInJhbmRvbTJEIiwicmFuZG9tM0QiLCJyYW5kb21TZWVkIiwicmFuZG9tR2F1c3NpYW4iLCJfYW5nbGVNb2RlIiwiYXNpbiIsImRlZ3JlZXMiLCJyYWRpYW5zIiwiYW5nbGVNb2RlIiwiX3RvRGVncmVlcyIsInRleHRGb250Iiwib3BlbnR5cGUuanMiLCJzYW1wbGVGYWN0b3IiLCJzaW1wbGlmeVRocmVzaG9sZCIsInRtcFBvaW50MSIsInRtcFBvaW50MiIsInF4IiwicXkiLCJjYWNoZSIsInRleHRCb3VuZHMiLCJhZHZhbmNlIiwiX2hhbmRsZUFsaWdubWVudCIsInRleHRUb1BvaW50cyIsIl9nZXRHbHlwaHMiLCJfZ2V0UGF0aCIsIl9nZXRQYXRoRGF0YSIsImRlY2ltYWxzIiwiX2dldFNWRyIsImFycmF5Q29weSIsInNob3J0ZW4iLCJzaHVmZmxlIiwic3Vic2V0IiwiZmxvYXQiLCJpbnQiLCJzdHIiLCJib29sZWFuIiwiY2hhciIsInVuY2hhciIsImhleCIsInVuaGV4IiwibWF0Y2hBbGwiLCJuZmMiLCJuZnAiLCJuZnMiLCJzcGxpdFRva2VucyIsImRheSIsImdldERhdGUiLCJob3VyIiwiZ2V0SG91cnMiLCJtaW51dGUiLCJnZXRNaW51dGVzIiwibW9udGgiLCJnZXRNb250aCIsInNlY29uZCIsImdldFNlY29uZHMiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJwbGFuZSIsImdlb21ldHJ5SW5IYXNoIiwiR2VvbWV0cnkiLCJkZXRhaWxZIiwiZGV0YWlsWCIsInZlcnRpY2VzIiwidXZzIiwiY29tcHV0ZUZhY2VzIiwiY29tcHV0ZU5vcm1hbHMiLCJfbWFrZVRyaWFuZ2xlRWRnZXMiLCJfZWRnZXNUb1ZlcnRpY2VzIiwiZHJhd0J1ZmZlcnNTY2FsZWQiLCJib3giLCJwZXJQaXhlbExpZ2h0aW5nIiwic3Ryb2tlSW5kaWNlcyIsImZhY2VzIiwic3BoZXJlIiwiZWxsaXBzb2lkIiwidmVydGV4Tm9ybWFscyIsImN5bGluZGVyIiwiY29uZSIsInRvcnVzIiwiX3VzZVBvaW50U2hhZGVyIiwiY3VyUG9pbnRTaGFkZXIiLCJiaW5kU2hhZGVyIiwiX2RyYXdQb2ludHMiLCJfcG9pbnRWZXJ0ZXhCdWZmZXIiLCJ1bmJpbmRTaGFkZXIiLCJ1TVZNYXRyaXgiLCJNYXRyaXgiLCJkcmF3QnVmZmVycyIsImltbWVkaWF0ZU1vZGUiLCJfYmV6aWVyVmVydGV4IiwiX2xvb2tVcFRhYmxlQmV6aWVyIiwiX2x1dEJlemllckRldGFpbCIsIl9iZXppZXJDb2VmZmljaWVudHMiLCJpc0JlemllciIsIl9xdWFkcmF0aWNWZXJ0ZXgiLCJfbG9va1VwVGFibGVRdWFkcmF0aWMiLCJfbHV0UXVhZHJhdGljRGV0YWlsIiwiX3F1YWRyYXRpY0NvZWZmaWNpZW50cyIsImlzUXVhZHJhdGljIiwiX2N1cnZlVmVydGV4IiwiaXNDdXJ2ZSIsIl9iZXppZXJUb0NhdG11bGwiLCIuL3A1Lkdlb21ldHJ5Iiwib3JiaXRDb250cm9sIiwiX2N1ckNhbWVyYSIsImNvbnRleHRNZW51RGlzYWJsZWQiLCJvbmNvbnRleHRtZW51Iiwid2hlZWxEZWZhdWx0RGlzYWJsZWQiLCJvbndoZWVsIiwiX29yYml0IiwiX2dldExvY2FsQXhlcyIsImV5ZVgiLCJleWVZIiwiZXllWiIsImRlYnVnTW9kZSIsIl9ncmlkIiwiX2F4ZXNJY29uIiwibm9EZWJ1Z01vZGUiLCJjdXJTdHJva2VDb2xvciIsImNhbWVyYU1hdHJpeCIsIm1hdDQiLCJhbWJpZW50TGlnaHQiLCJfdXNlTGlnaHRTaGFkZXIiLCJzZXRVbmlmb3JtIiwiY3VyRmlsbENvbG9yIiwiYW1iaWVudExpZ2h0Q29sb3JzIiwiZGlyZWN0aW9uYWxMaWdodCIsImRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25zIiwiZGlyZWN0aW9uYWxMaWdodENvbG9ycyIsInBvaW50TGlnaHQiLCJwb2ludExpZ2h0UG9zaXRpb25zIiwicG9pbnRMaWdodENvbG9ycyIsImdpZCIsInZ0Iiwidm4iLCJtb2RlbCIsIlNoYWRlciIsIl9mcmFnU3JjIiwiX3ZlcnRTcmMiLCJjcmVhdGVTaGFkZXIiLCJzaGFkZXIiLCJpc1N0cm9rZVNoYWRlciIsInNldFN0cm9rZVNoYWRlciIsInNldEZpbGxTaGFkZXIiLCJub3JtYWxNYXRlcmlhbCIsImRyYXdNb2RlIiwiX2dldE5vcm1hbFNoYWRlciIsInRleHR1cmUiLCJhbWJpZW50TWF0ZXJpYWwiLCJzcGVjdWxhck1hdGVyaWFsIiwiX2FwcGx5Q29sb3JCbGVuZCIsIkdMIiwiZGVwdGhNYXNrIiwiZW5hYmxlIiwiYmxlbmRFcXVhdGlvbiIsIkZVTkNfQUREIiwiYmxlbmRGdW5jIiwiU1JDX0FMUEhBIiwiT05FX01JTlVTX1NSQ19BTFBIQSIsImRpc2FibGUiLCIuL3A1LlRleHR1cmUiLCJjYW1lcmEiLCJwZXJzcGVjdGl2ZSIsIm9ydGhvIiwiY3JlYXRlQ2FtZXJhIiwiQ2FtZXJhIiwiX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3MiLCJfc2V0RGVmYXVsdENhbWVyYSIsImNhbWVyYVR5cGUiLCJwcm9qTWF0cml4IiwiZGVmYXVsdENhbWVyYUZPViIsImNhbWVyYUZPViIsImRlZmF1bHRBc3BlY3RSYXRpbyIsImRlZmF1bHRDYW1lcmFOZWFyIiwiZGVmYXVsdENhbWVyYUZhciIsImFzcGVjdFJhdGlvIiwiY2FtZXJhTmVhciIsImNhbWVyYUZhciIsImlkZW50aXR5IiwiX2lzQWN0aXZlIiwidVBNYXRyaXgiLCJfcm90YXRlVmlldyIsImNlbnRlclgiLCJjZW50ZXJZIiwiY2VudGVyWiIsInRpbHQiLCJsb29rQXQiLCJkZWZhdWx0RXllWCIsImRlZmF1bHRFeWVZIiwiZGVmYXVsdEV5ZVoiLCJtb3ZlIiwiZGVmYXVsdENlbnRlclgiLCJkZWZhdWx0Q2VudGVyWSIsImRlZmF1bHRDZW50ZXJaIiwiX3Jlc2l6ZSIsInNldENhbWVyYSIsImxpbmVWZXJ0aWNlcyIsImxpbmVOb3JtYWxzIiwiZWRnZXMiLCJfZ2V0RmFjZU5vcm1hbCIsImF2ZXJhZ2VOb3JtYWxzIiwiYXZlcmFnZVBvbGVOb3JtYWxzIiwibWF0MyIsImludmVydDN4MyIsInRyYW5zcG9zZTN4MyIsImludmVyc2VUcmFuc3Bvc2UiLCJkZXRlcm1pbmFudCIsInNoYXBlTW9kZSIsInZlcnRleENvbG9ycyIsInV2Q29vcmRzIiwidmVydGV4QnVmZmVyIiwiY29sb3JCdWZmZXIiLCJ1dkJ1ZmZlciIsImxpbmVWZXJ0ZXhCdWZmZXIiLCJsaW5lTm9ybWFsQnVmZmVyIiwicG9pbnRWZXJ0ZXhCdWZmZXIiLCJpc0ltbWVkaWF0ZURyYXdpbmciLCJfdXNlSW1tZWRpYXRlTW9kZVNoYWRlciIsIl9kcmF3U3Ryb2tlSW1tZWRpYXRlTW9kZSIsIl92VG9OQXJyYXkiLCJfdHJpYW5ndWxhdGUiLCJfZHJhd0ZpbGxJbW1lZGlhdGVNb2RlIiwiY3VyRmlsbFNoYWRlciIsImFQb3NpdGlvbiIsIl9iaW5kQnVmZmVyIiwiQVJSQVlfQlVGRkVSIiwiRFlOQU1JQ19EUkFXIiwiZW5hYmxlQXR0cmliIiwiRkxPQVQiLCJhVmVydGV4Q29sb3IiLCJhVGV4Q29vcmQiLCJkcmF3QXJyYXlzIiwiY3VyU3Ryb2tlU2hhZGVyIiwiX2ZsYXR0ZW4iLCJTVEFUSUNfRFJBVyIsImFEaXJlY3Rpb24iLCJfaW5pdEJ1ZmZlckRlZmF1bHRzIiwiX2ZyZWVCdWZmZXJzIiwiZ0hhc2giLCJkZWxldGVCdWZmZXIiLCJub3JtYWxCdWZmZXIiLCJpbmRleEJ1ZmZlciIsIm51bWJlck9mSXRlbXMiLCJsaW5lVmVydGV4Q291bnQiLCJfdXNlQ29sb3JTaGFkZXIiLCJFTEVNRU5UX0FSUkFZX0JVRkZFUiIsImFOb3JtYWwiLCJfZHJhd0FycmF5cyIsIl9kcmF3RWxlbWVudHMiLCJkcmF3RWxlbWVudHMiLCJVTlNJR05FRF9TSE9SVCIsIlBvaW50cyIsImltbWVkaWF0ZVZlcnQiLCJ2ZXJ0ZXhDb2xvclZlcnQiLCJ2ZXJ0ZXhDb2xvckZyYWciLCJub3JtYWxWZXJ0Iiwibm9ybWFsRnJhZyIsImJhc2ljRnJhZyIsImxpZ2h0VmVydCIsImxpZ2h0VGV4dHVyZUZyYWciLCJwaG9uZ1ZlcnQiLCJwaG9uZ0ZyYWciLCJmb250VmVydCIsImZvbnRGcmFnIiwibGluZVZlcnQiLCJsaW5lRnJhZyIsInBvaW50VmVydCIsInBvaW50RnJhZyIsInN0ZW5jaWwiLCJhbnRpYWxpYXMiLCJwcmVtdWx0aXBsaWVkQWxwaGEiLCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIiLCJfaW5pdENvbnRleHQiLCJ1Tk1hdHJpeCIsIl9kZWZhdWx0TGlnaHRTaGFkZXIiLCJfZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXIiLCJfZGVmYXVsdE5vcm1hbFNoYWRlciIsIl9kZWZhdWx0Q29sb3JTaGFkZXIiLCJfZGVmYXVsdFBvaW50U2hhZGVyIiwiX2dldExpbmVTaGFkZXIiLCJwb2ludFNpemUiLCJ0ZXh0dXJlcyIsIl90ZXNzeSIsIl9pbml0VGVzc3kiLCJmb250SW5mb3MiLCJERVBUSF9URVNUIiwiZGVwdGhGdW5jIiwiTEVRVUFMIiwidmlld3BvcnQiLCJkcmF3aW5nQnVmZmVyV2lkdGgiLCJkcmF3aW5nQnVmZmVySGVpZ2h0IiwiX3ZpZXdwb3J0IiwiZ2V0UGFyYW1ldGVyIiwiVklFV1BPUlQiLCJfcmVzZXRDb250ZXh0Iiwic2V0QXR0cmlidXRlcyIsImNsZWFyQ29sb3IiLCJDT0xPUl9CVUZGRVJfQklUIiwiREVQVEhfQlVGRkVSX0JJVCIsIl9nZXRJbW1lZGlhdGVNb2RlU2hhZGVyIiwiX2dldENvbG9yU2hhZGVyIiwiY3VyU3Ryb2tlV2VpZ2h0IiwicmVhZFBpeGVscyIsIlVOU0lHTkVEX0JZVEUiLCJzZXRQb2ludFNoYWRlciIsImlzTGlnaHRTaGFkZXIiLCJfZ2V0TGlnaHRTaGFkZXIiLCJfZ2V0UG9pbnRTaGFkZXIiLCJfZGVmYXVsdExpbmVTaGFkZXIiLCJfZ2V0Rm9udFNoYWRlciIsIl9kZWZhdWx0Rm9udFNoYWRlciIsImdldEV4dGVuc2lvbiIsIl9nZXRFbXB0eVRleHR1cmUiLCJfZW1wdHlUZXh0dXJlIiwiVGV4dHVyZSIsImdldFRleHR1cmUiLCJiaW5kQnVmZmVyIiwiYnVmZmVyRGF0YSIsIi4uL2NvcmUvcDUuUmVuZGVyZXIiLCIuL3A1LkNhbWVyYSIsIi4vcDUuTWF0cml4IiwiLi9wNS5TaGFkZXIiLCJfdmVydFNoYWRlciIsIl9mcmFnU2hhZGVyIiwiX2dsUHJvZ3JhbSIsIl9sb2FkZWRBdHRyaWJ1dGVzIiwiX2xvYWRlZFVuaWZvcm1zIiwidW5pZm9ybXMiLCJfYm91bmQiLCJzYW1wbGVycyIsIlZFUlRFWF9TSEFERVIiLCJzaGFkZXJTb3VyY2UiLCJjb21waWxlU2hhZGVyIiwiZ2V0U2hhZGVyUGFyYW1ldGVyIiwiQ09NUElMRV9TVEFUVVMiLCJnZXRTaGFkZXJJbmZvTG9nIiwiRlJBR01FTlRfU0hBREVSIiwiY3JlYXRlUHJvZ3JhbSIsImF0dGFjaFNoYWRlciIsImxpbmtQcm9ncmFtIiwiZ2V0UHJvZ3JhbVBhcmFtZXRlciIsIkxJTktfU1RBVFVTIiwiZ2V0UHJvZ3JhbUluZm9Mb2ciLCJfbG9hZEF0dHJpYnV0ZXMiLCJfbG9hZFVuaWZvcm1zIiwiQUNUSVZFX0FUVFJJQlVURVMiLCJnZXRBY3RpdmVBdHRyaWIiLCJnZXRBdHRyaWJMb2NhdGlvbiIsIkFDVElWRV9VTklGT1JNUyIsImdldEFjdGl2ZVVuaWZvcm0iLCJnZXRVbmlmb3JtTG9jYXRpb24iLCJTQU1QTEVSXzJEIiwic2FtcGxlckluZGV4IiwiY29tcGlsZSIsInVzZVByb2dyYW0iLCJiaW5kVGV4dHVyZXMiLCJfc2V0TWF0cml4VW5pZm9ybXMiLCJfc2V0Vmlld3BvcnRVbmlmb3JtIiwidW5iaW5kVGV4dHVyZXMiLCJhY3RpdmVUZXh0dXJlIiwiVEVYVFVSRTAiLCJiaW5kVGV4dHVyZSIsInVwZGF0ZSIsInVuaWZvcm0xaSIsInVwZGF0ZVRleHR1cmVzIiwiQk9PTCIsIklOVCIsInVuaWZvcm0xaXYiLCJ1bmlmb3JtMWZ2IiwidW5pZm9ybTFmIiwiRkxPQVRfTUFUMyIsInVuaWZvcm1NYXRyaXgzZnYiLCJGTE9BVF9NQVQ0IiwidW5pZm9ybU1hdHJpeDRmdiIsIkZMT0FUX1ZFQzIiLCJ1bmlmb3JtMmZ2IiwidW5pZm9ybTJmIiwiRkxPQVRfVkVDMyIsInVuaWZvcm0zZnYiLCJ1bmlmb3JtM2YiLCJGTE9BVF9WRUM0IiwidW5pZm9ybTRmdiIsInVuaWZvcm00ZiIsIklOVF9WRUMyIiwidW5pZm9ybTJpdiIsInVuaWZvcm0yaSIsIklOVF9WRUMzIiwidW5pZm9ybTNpdiIsInVuaWZvcm0zaSIsIklOVF9WRUM0IiwidW5pZm9ybTRpdiIsInVuaWZvcm00aSIsInVVc2VMaWdodGluZyIsInVBbWJpZW50TGlnaHRDb3VudCIsInVEaXJlY3Rpb25hbExpZ2h0Q291bnQiLCJ1UG9pbnRMaWdodENvdW50IiwidUFtYmllbnRDb2xvciIsInVEaXJlY3Rpb25hbENvbG9yIiwidVBvaW50TGlnaHRMb2NhdGlvbiIsInVQb2ludExpZ2h0Q29sb3IiLCJ1TGlnaHRpbmdEaXJlY3Rpb24iLCJ1U3BlY3VsYXIiLCJpc1RleHR1cmVTaGFkZXIiLCJpc0NvbG9yU2hhZGVyIiwidU1hdGVyaWFsQ29sb3IiLCJpc1RleExpZ2h0U2hhZGVyIiwidVN0cm9rZVdlaWdodCIsImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwidmVydGV4QXR0cmliUG9pbnRlciIsImdsVGV4IiwiZ2xUYXJnZXQiLCJURVhUVVJFXzJEIiwiZ2xGb3JtYXQiLCJtaXBtYXBzIiwiZ2xNaW5GaWx0ZXIiLCJnbE1hZ0ZpbHRlciIsImdsV3JhcFMiLCJDTEFNUF9UT19FREdFIiwiZ2xXcmFwVCIsImlzU3JjTWVkaWFFbGVtZW50IiwiX3ZpZGVvUHJldlVwZGF0ZVRpbWUiLCJpc1NyY0hUTUxFbGVtZW50IiwiaXNTcmNQNUltYWdlIiwiaXNTcmNQNUdyYXBoaWNzIiwiaXNJbWFnZURhdGEiLCJfZ2V0VGV4dHVyZURhdGFGcm9tU291cmNlIiwiY3JlYXRlVGV4dHVyZSIsInRleFBhcmFtZXRlcmkiLCJURVhUVVJFX01BR19GSUxURVIiLCJURVhUVVJFX01JTl9GSUxURVIiLCJURVhUVVJFX1dSQVBfUyIsIlRFWFRVUkVfV1JBUF9UIiwibG9hZGVkbWV0YWRhdGEiLCJ0ZXhJbWFnZTJEIiwiX2RpcnR5IiwidW5iaW5kVGV4dHVyZSIsInNldEludGVycG9sYXRpb24iLCJzZXRXcmFwTW9kZSIsIk1JUlJPUkVEX1JFUEVBVCIsImluZm9zIiwiZmluZEltYWdlIiwic3Ryb2tlSW1hZ2VJbmZvcyIsImNvbERpbUltYWdlSW5mb3MiLCJyb3dEaW1JbWFnZUluZm9zIiwiY29sQ2VsbEltYWdlSW5mb3MiLCJyb3dDZWxsSW1hZ2VJbmZvcyIsImdseXBoSW5mb3MiLCJnZXRHbHlwaEluZm8iLCJwMCIsImMwIiwiYzEiLCJwMSIsInRvUXVhZHJhdGljIiwicXVhZEVycm9yIiwic3BsaXRJbmZsZWN0aW9ucyIsImNlbGxJbWFnZUluZm8iLCJkaW1PZmZzZXQiLCJkaW1JbWFnZUluZm8iLCJnbHlwaCIsInVHbHlwaFJlY3QiLCJzdHJva2VJbWFnZUluZm8iLCJzdHJva2VzIiwiY29sSW5mbyIsInJvd0luZm8iLCJ1R3JpZE9mZnNldCIsIl9mb250SW5mbyIsIl90ZXh0R2VvbSIsIi4vcDUuUmVuZGVyZXJHTCIsIl9fd2VicGFja19leHBvcnRzX18iLCJwNV9saWJfcDVfbWluX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18iLCJwNV9saWJfcDVfbWluX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCIsInRvbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyIsInRvbmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0Iiwic2tldGNoIiwiYXV0b0ZpbHRlciIsImNob3J1cyIsImZtIiwiV2Fsa2VyIiwiZXkiLCJlYXNpbmciLCJjYW5QbGF5Iiwic3R1Y2siLCJyYWRpdXMxIiwid2FsayIsImNoZWNrU3R1Y2siLCJvdGhlcnMiLCJkaXN0U3EiLCJzZXRIdWUiLCJodSIsInNob3ciLCJ0cmVlMSIsIndhbGtlcnMxIiwiZXZhbCJdLCJtYXBwaW5ncyI6ImFBQ0EsSUFBQUEsS0FHQSxTQUFBQyxFQUFBQyxHQUdBLEdBQUFGLEVBQUFFLEdBQ0EsT0FBQUYsRUFBQUUsR0FBQUMsUUFHQSxJQUFBQyxFQUFBSixFQUFBRSxJQUNBRyxFQUFBSCxFQUNBSSxHQUFBLEVBQ0FILFlBVUEsT0FOQUksRUFBQUwsR0FBQU0sS0FBQUosRUFBQUQsUUFBQUMsSUFBQUQsUUFBQUYsR0FHQUcsRUFBQUUsR0FBQSxFQUdBRixFQUFBRCxRQUtBRixFQUFBUSxFQUFBRixFQUdBTixFQUFBUyxFQUFBVixFQUdBQyxFQUFBVSxFQUFBLFNBQUFSLEVBQUFTLEVBQUFDLEdBQ0FaLEVBQUFhLEVBQUFYLEVBQUFTLElBQ0FHLE9BQUFDLGVBQUFiLEVBQUFTLEdBQTBDSyxZQUFBLEVBQUFDLElBQUFMLEtBSzFDWixFQUFBa0IsRUFBQSxTQUFBaEIsR0FDQSxvQkFBQWlCLGVB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VUFBQXZvQyxJQUF1VndvQyxFQUFBLEtBQUFoMkIsRUFBQSxLQUFBSyxFQUFBLEtBQUFDLEVBQUEsS0FBQWtHLEVBQUEsS0FBQStDLEVBQUEsS0FBQWEsRUFBQSxLQUFBMkIsRUFBQSxLQUFBRyxFQUFBLEtBQUFDLEVBQUEsS0FBQTBELEdBQUEsS0FBQW9tQixHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxVQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxRQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxVQUFBQyxHQUFBLFVBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsUUFBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsVUFBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxhQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxNQUF3K0JDLElBQUs3RyxFQUFBLEVBQUFoMkIsRUFBQSxFQUFBSyxFQUFBLEVBQUFDLEVBQUEsRUFBQWtHLEVBQUEsRUFBQStDLEVBQUEsRUFBQWEsRUFBQSxFQUFBMkIsRUFBQSxFQUFBRyxFQUFBLEVBQUFDLEVBQUEsRUFBQTBELEdBQUEsRUFBQW9tQixHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQzdwK0JDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEdBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEdBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxHQUFraUI1dkMsSUFBSzh2QyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLE1BQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxNQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsVUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxVQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFNBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxNQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFVBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsU0FBQUMsS0FBQSxNQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLE1BQUFDLEtBQUEsU0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsYUFBQUMsS0FBQSxLQUFBQyxLQUFBLGFBQUFDLEtBQUEsVUFBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFD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NjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLFFBQXVCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsUUFBQTc3RSxJQUFBLFVBQTRCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLFFBQXVCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQXdCODJELElBQU1kLE1BSCtqVSxTQUFBem1ELEVBQUFLLEdBQWlCLElBQUFqYixLQUFRQyxFQUFBLElBQUE0d0QsR0FBQVEsT0FBQXoyQyxFQUFBSyxHQUFzQmpiLEVBQUE4SSxRQUFBN0ksRUFBQXcyRCxjQUFBejJELEVBQUFtbkYsY0FBQWxuRixFQUFBZzJELGFBQUFqMkQsRUFBQTgrRCxjQUFBNytELEVBQUF3MkQsY0FBQXoyRCxFQUFBay9ELGFBQUFqL0QsRUFBQXcyRCxjQUFBejJELEVBQUFvbkYsT0FBQW5uRixFQUFBdzJELGNBQUF6MkQsRUFBQXFuRixnQkFBQXBuRixFQUFBZzJELGFBQUFqMkQsRUFBQXNuRixnQkFBQXJuRixFQUFBZzJELGFBQUFqMkQsRUFBQXVuRixrQkFBQXRuRixFQUFBZzJELGFBQUFqMkQsRUFBQXduRixrQkFBQXZuRixFQUFBZzJELGFBQUFqMkQsRUFBQXluRixrQkFBQXhuRixFQUFBZzJELGFBQUFqMkQsRUFBQTBuRixrQkFBQXpuRixFQUFBZzJELGFBQUFqMkQsRUFBQTJuRixvQkFBQTFuRixFQUFBZzJELGFBQUFqMkQsRUFBQTRuRixvQkFBQTNuRixFQUFBZzJELGFBQUFqMkQsRUFBQTZuRixlQUFBNW5GLEVBQUFnMkQsYUFBQWoyRCxFQUFBOG5GLG1CQUFBN25GLEVBQUFnMkQsYUFBQWoyRCxFQUFBK25GLGFBQUE5bkYsRUFBQWcyRCxhQUFBajJELEVBQUFnb0YsVUFBdWhCLFFBQUFwN0UsRUFBQSxFQUFZQSxFQUFBLEdBQUtBLElBQUE1TSxFQUFBZ29GLE9BQUFwN0UsR0FBQTNNLEVBQUFteEQsWUFBOEIsT0FBQXB4RCxFQUFBaW9GLGdCQUFBaG9GLEVBQUEycEUsYUFBQTVwRSxFQUFBa29GLGdCQUFBam9GLEVBQUEycEUsYUFBQTVwRSxFQUFBbW9GLGdCQUFBbG9GLEVBQUEycEUsYUFBQTVwRSxFQUFBb29GLGdCQUFBbm9GLEVBQUEycEUsYUFBQTVwRSxFQUFBcW9GLFVBQUFycEMsT0FBQUMsYUFBQWgvQyxFQUFBbXhELFlBQUFueEQsRUFBQW14RCxZQUFBbnhELEVBQUFteEQsWUFBQW54RCxFQUFBbXhELGFBQUFweEQsRUFBQXEvRCxZQUFBcC9ELEVBQUF3MkQsY0FBQXoyRCxFQUFBc29GLGlCQUFBcm9GLEVBQUF3MkQsY0FBQXoyRCxFQUFBdW9GLGdCQUFBdG9GLEVBQUF3MkQsY0FBQXoyRCxFQUFBd29GLGNBQUF2b0YsRUFBQWcyRCxhQUFBajJELEVBQUF5b0YsZUFBQXhvRixFQUFBZzJELGFBQUFqMkQsRUFBQTBvRixhQUFBem9GLEVBQUFnMkQsYUFBQWoyRCxFQUFBMm9GLFlBQUExb0YsRUFBQXcyRCxjQUFBejJELEVBQUE0b0YsYUFBQTNvRixFQUFBdzJELGNBQUF6MkQsRUFBQThJLFNBQUEsSUFBQTlJLEVBQUE2b0YsaUJBQUE1b0YsRUFBQTJwRSxhQUFBNXBFLEVBQUE4b0YsaUJBQUE3b0YsRUFBQTJwRSxjQUFBNXBFLEVBQUE4SSxTQUFBLElBQUE5SSxFQUFBK29GLFNBQUE5b0YsRUFBQWcyRCxhQUFBajJELEVBQUFncEYsV0FBQS9vRixFQUFBZzJELGFBQUFqMkQsRUFBQWlwRixjQUFBaHBGLEVBQUF3MkQsY0FBQXoyRCxFQUFBa3BGLFlBQUFqcEYsRUFBQXcyRCxjQUFBejJELEVBQUFtcEYsYUFBQWxwRixFQUFBdzJELGVBQUF6MkQsR0FHcHJWd3RFLEtBSDg0VyxTQUFBNXlELEdBQWUsV0FBQTQ0QyxHQUFBaUIsTUFBQSxTQUE2QnYwRCxLQUFBLFVBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLElBQXVDVixLQUFBLGdCQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUE0Q1YsS0FBQSxnQkFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBNkNWLEtBQUEsZUFBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBNENWLEtBQUEsU0FBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBc0NWLEtBQUEsa0JBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLE1BQWdEVixLQUFBLGtCQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxNQUFnRFYsS0FBQSxvQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBZ0RWLEtBQUEsb0JBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLE1BQWtEVixLQUFBLG9CQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxNQUFrRFYsS0FBQSxvQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsTUFBa0RWLEtBQUEsc0JBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQWtEVixLQUFBLHNCQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxNQUFvRFYsS0FBQSxpQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsS0FBOENWLEtBQUEscUJBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLE1BQW1EVixLQUFBLGVBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQTJDVixLQUFBLGNBQUFnUSxLQUFBLE9BQUF0UCxNQUFBLElBQXlDVixLQUFBLGNBQUFnUSxLQUFBLE9BQUF0UCxNQUFBLElBQXlDVixLQUFBLFVBQUFnUSxLQUFBLE9BQUF0UCxNQUFBLElBQXFDVixLQUFBLGNBQUFnUSxLQUFBLE9BQUF0UCxNQUFBLElBQXlDVixLQUFBLFlBQUFnUSxLQUFBLE9BQUF0UCxNQUFBLElBQXVDVixLQUFBLG1CQUFBZ1EsS0FBQSxPQUFBdFAsTUFBQSxJQUE4Q1YsS0FBQSxZQUFBZ1EsS0FBQSxPQUFBdFAsTUFBQSxJQUF1Q1YsS0FBQSxjQUFBZ1EsS0FBQSxPQUFBdFAsTUFBQSxJQUF5Q1YsS0FBQSxXQUFBZ1EsS0FBQSxPQUFBdFAsTUFBQSxJQUFzQ1YsS0FBQSxXQUFBZ1EsS0FBQSxPQUFBdFAsTUFBQSxJQUFzQ1YsS0FBQSxrQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBOENWLEtBQUEsa0JBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQThDVixLQUFBLGtCQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUE4Q1YsS0FBQSxrQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBOENWLEtBQUEsWUFBQWdRLEtBQUEsWUFBQXRQLE1BQUEsU0FBaURWLEtBQUEsY0FBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBMkNWLEtBQUEsbUJBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLElBQWdEVixLQUFBLGtCQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUErQ1YsS0FBQSxnQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBNENWLEtBQUEsaUJBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQTZDVixLQUFBLGVBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQTJDVixLQUFBLGNBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLElBQTJDVixLQUFBLGVBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLElBQTRDVixLQUFBLG1CQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUErQ1YsS0FBQSxtQkFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBK0NWLEtBQUEsV0FBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBdUNWLEtBQUEsYUFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBeUNWLEtBQUEsZ0JBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLElBQTZDVixLQUFBLGNBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLElBQTJDVixLQUFBLGVBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLElBQTBDZ2EsSUFHbjdhd3VFLGNBQUFuQyxHQUFBb0MsZ0JBSDY5VCxTQUFBenVFLEdBQWUsUUFBQUssRUFBQSxFQUFZQSxFQUFBZ3NFLEdBQUExakYsT0FBWTBYLEdBQUEsR0FBTSxJQUFBamIsRUFBQWluRixHQUFBaHNFLEdBQVksR0FBQUwsR0FBQTVhLEVBQUFrbkYsT0FBQXRzRSxFQUFBNWEsRUFBQXFMLElBQUEsT0FBQTRQLEVBQWdDLFdBR2pnVW9uRCxJQUFLaEIsTUFIODNhLFNBQUF6bUQsRUFBQUssR0FBaUIsSUFBQWpiLEtBQVFDLEVBQUEsSUFBQTR3RCxHQUFBUSxPQUFBejJDLEVBQUFLLEdBQXNCLE9BQUFqYixFQUFBOEksUUFBQTdJLEVBQUErcEUsZUFBQWhxRSxFQUFBc3BGLFlBQUFycEYsRUFBQWdnRSxhQUFBamdFLEVBQUF1cEYsa0JBQUF0cEYsRUFBQWcyRCxhQUFBajJELEVBQUF3cEYsbUJBQUF2cEYsRUFBQWcyRCxhQUFBajJELEVBQUF5cEYsYUFBQXhwRixFQUFBMnBFLGFBQUE1cEUsRUFBQTBwRixhQUFBenBGLEVBQUEycEUsYUFBQTVwRSxFQUFBMnBGLGFBQUExcEYsRUFBQTJwRSxhQUFBNXBFLEVBQUE0cEYsWUFBQTNwRixFQUFBMnBFLGFBQUE1cEUsRUFBQTZwRixZQUFBNXBGLEVBQUEycEUsYUFBQTVwRSxFQUFBOEksU0FBcVMsT0FBQTlJLEVBQUFzd0QsTUFBQUMsR0FBQTVtRCxRQUEwQixNQUFNLE9BQUEzSixFQUFBd3dELGVBQUF2d0QsRUFBQXcyRCxjQUFBejJELEVBQUF5d0QsZUFBQSxJQUFBMXFELE1BQUEvRixFQUFBd3dELGdCQUFxRixRQUFBNWpELEVBQUEsRUFBWUEsRUFBQTVNLEVBQUF3d0QsZUFBbUI1akQsSUFBQTVNLEVBQUF5d0QsZUFBQTdqRCxHQUFBM00sRUFBQXcyRCxjQUF3Q3oyRCxFQUFBc3dELFNBQVcsUUFBQXAyQyxFQUFBLEVBQVlBLEVBQUFsYSxFQUFBd3dELGVBQW1CdDJDLElBQUEsR0FBQWxhLEVBQUF5d0QsZUFBQXYyQyxJQUFBcTJDLEdBQUFodEQsT0FBQSxDQUF1QyxJQUFBZ1gsRUFBQXRhLEVBQUFzM0QsWUFBb0J2M0QsRUFBQXN3RCxNQUFBenJELEtBQUE1RSxFQUFBNnBFLFlBQUF2dkQsSUFBK0IsTUFBTSxTQUFBdmEsRUFBQXd3RCxlQUFBdndELEVBQUF3MkQsY0FBQXoyRCxFQUFBcWhCLE9BQUEsSUFBQXRiLE1BQUEvRixFQUFBd3dELGdCQUErRSxRQUFBeFQsRUFBQSxFQUFZQSxFQUFBaDlDLEVBQUF3d0QsZUFBbUJ4VCxJQUFBaDlDLEVBQUFxaEIsT0FBQTI3QixHQUFBLzhDLEVBQUFzM0QsWUFBOEIsT0FBQXYzRCxHQUdwcWN3dEUsS0FINnFjLFdBQWMsV0FBQWhhLEdBQUFpQixNQUFBLFNBQTZCdjBELEtBQUEsVUFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsU0FBMkNWLEtBQUEsY0FBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBMENWLEtBQUEsb0JBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQWdEVixLQUFBLHFCQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFpRFYsS0FBQSxlQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUEyQ1YsS0FBQSxlQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUEyQ1YsS0FBQSxlQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUEyQ1YsS0FBQSxjQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUEwQ1YsS0FBQSxjQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxPQUd4aWRrcEYsR0FBQSxJQUFBL2pGLE1BQUEsR0FBaUIrakYsR0FBQSxjQUFpQixJQUFBbHZFLEVBQUEzWSxLQUFBb2YsT0FBQXBmLEtBQUFndUQsZUFBQWgxQyxFQUFBaFosS0FBQXcwRCxjQUEyRCxXQUFBeDdDLEdBQWMyNkMsWUFBQSxFQUFBMFcsU0FBQXJxRSxLQUFBa3BFLGFBQUF0akQsRUFBQXlrRCxVQUFBeWQsYUFBQTluRixLQUFBdzBELGVBQXFGLElBQUF4N0MsR0FBUTI2QyxZQUFBLEVBQUEwVyxTQUFBcnFFLEtBQUFrcEUsYUFBQXRqRCxFQUFBeWtELFVBQUEwZCxXQUFBL25GLEtBQUFpb0UsMEJBQXlGbmIsR0FBQUMsUUFBQSxPQUFBcDBDLEVBQUF6WSxTQUFBLCtDQUFpRjJuRixHQUFBLGNBQWtCLElBQUFsdkUsRUFBQTNZLEtBQUF3MEQsY0FBeUIsT0FBQTFILEdBQUFnRyxTQUFBLElBQUFuNkMsRUFBQSxvRUFBNkZnN0MsWUFBQWg3QyxFQUFBMHhELFNBQUFycUUsS0FBQWtwRSxhQUFBdGpELEVBQUF5a0QsVUFBQTJkLFVBQUFob0YsS0FBQW9wRSxxQkFBd0Z5ZSxHQUFBLGNBQWtCLElBQUFsdkUsRUFBQTNZLEtBQUF3MEQsY0FBeUIsT0FBQTFILEdBQUFnRyxTQUFBLElBQUFuNkMsRUFBQSxxRUFBOEZnN0MsWUFBQWg3QyxFQUFBMHhELFNBQUFycUUsS0FBQWtwRSxhQUFBdGpELEVBQUF5a0QsVUFBQTRkLGNBQUFqb0YsS0FBQW9wRSxxQkFBNEZ5ZSxHQUFBLGNBQWtCLElBQUFsdkUsRUFBQTNZLEtBQUF3MEQsY0FBeUIsT0FBQTFILEdBQUFnRyxTQUFBLElBQUFuNkMsRUFBQSxvREFBNkVnN0MsWUFBQWg3QyxFQUFBMHhELFNBQUFycUUsS0FBQWtwRSxhQUFBdGpELEVBQUF5a0QsVUFBQTZkLGFBQUFsb0YsS0FBQW9wRSxpQkFBQSxXQUFtRyxPQUFPK2UsU0FBQW5vRixLQUFBdzBELGNBQUFPLFdBQUEvMEQsS0FBQWtvRSxnQkFBQWxvRSxLQUFBdzBELGNBQUEsUUFBdUYsSUFBQTR6QixJQUFRQyxjQUFBemlFLEVBQUFxaEQsT0FBQXFoQixnQkFBQTFpRSxFQUFBcWhELFFBQWlENGdCLEdBQUEsY0FBaUIsSUFBQWx2RSxFQUFBM1ksS0FBQW9mLE9BQUFwZixLQUFBZ3VELGVBQUFoMUMsRUFBQWhaLEtBQUF3MEQsY0FBMkQsT0FBQXg3QyxFQUFBLE9BQWdCMjZDLFlBQUEzNkMsRUFBQXF4RCxTQUFBcnFFLEtBQUFrcEUsYUFBQXRqRCxFQUFBeWtELFVBQUFrZSxTQUFBdm9GLEtBQUFvcEUsaUJBQUEsV0FBK0YsSUFBQXp3RCxFQUFBM1ksS0FBQXcwRCxjQUFBeDdDLEVBQUFoWixLQUFBdzBELGNBQThDLE9BQU9ua0QsTUFBQXJRLEtBQUFrb0UsZ0JBQUF2dkQsRUFBQSxHQUFBNnZFLGNBQUF4b0YsS0FBQXFvRSxnQkFBQXJ2RCxFQUFBb3ZFLFFBQTZFLE9BQUFwdkUsRUFBQSxPQUFnQjI2QyxZQUFBMzZDLEVBQUFxeEQsU0FBQXJxRSxLQUFBa3BFLGFBQUF0akQsRUFBQXlrRCxVQUFBQyxTQUFBdHFFLEtBQUFrcEUsYUFBQXRqRCxFQUFBMGtELFVBQUFtZSxVQUFBem9GLEtBQUFvcEUsaUJBQUEsV0FBdUksSUFBQXp3RCxFQUFBM1ksS0FBQXcwRCxjQUFBeDdDLEVBQUFoWixLQUFBdzBELGNBQThDLE9BQU9pVixRQUFBenBFLEtBQUFrb0UsZ0JBQUF2dkQsRUFBQSxHQUFBNnZFLGNBQUF4b0YsS0FBQXFvRSxnQkFBQXJ2RCxFQUFBb3ZFLFFBQStFLE9BQUFwdkUsRUFBQSxDQUFVLElBQUFqYixFQUFBaUMsS0FBQXcwRCxjQUFBeDJELEVBQUFnQyxLQUFBdzBELGNBQThDLE9BQU9iLFlBQUEzNkMsRUFBQTB2RSxVQUFBMW9GLEtBQUFtb0UsVUFBQXBxRSxFQUFBNm5CLEVBQUFra0QsUUFBQWxrRCxFQUFBeWtELFdBQUFtZSxjQUFBeG9GLEtBQUFxb0UsZ0JBQUFycUUsRUFBQW9xRixLQUEwR3Q3QixHQUFBQyxRQUFBLE9BQUFwMEMsRUFBQXpZLFNBQUEsa0RBQThFMm5GLEdBQUEsY0FBa0IsSUFBQWx2RSxFQUFBM1ksS0FBQW9mLE9BQUFwZixLQUFBZ3VELGVBQUFoMUMsRUFBQWhaLEtBQUF3MEQsY0FBMkQsV0FBQXg3QyxHQUFjMjZDLFlBQUEsRUFBQTBXLFNBQUFycUUsS0FBQWtwRSxhQUFBdGpELEVBQUF5a0QsVUFBQXNlLGNBQUEzb0YsS0FBQW9wRSxpQkFBQSxXQUFvRyxPQUFPd2YsVUFBQTVvRixLQUFBa29FLGtCQUFBNzNELE1BQUFyUSxLQUFBa29FLGdCQUFBbG9FLEtBQUFnMEQsYUFBQSxHQUFBNjBCLFVBQUE3b0YsS0FBQWtvRSxrQkFBQXNnQixjQUFBeG9GLEtBQUFxb0UsZ0JBQUErZixRQUE0SixJQUFBcHZFLEdBQVEyNkMsWUFBQSxFQUFBMFcsU0FBQXJxRSxLQUFBa3BFLGFBQUF0akQsRUFBQXlrRCxVQUFBeWUsa0JBQUE5b0YsS0FBQWtwRSxhQUFBdGpELEVBQUEwa0QsVUFBQXllLGNBQUEvb0YsS0FBQWtwRSxhQUFBdGpELEVBQUEwa0QsVUFBQTBlLGtCQUFBaHBGLEtBQUFrcEUsYUFBQXRqRCxFQUFBMGtELFVBQUEyZSxjQUFBanBGLEtBQUFvcEUsaUJBQUEsV0FBZ1AsT0FBT3dmLFVBQUE1b0YsS0FBQWtvRSxrQkFBQTczRCxNQUFBclEsS0FBQWtvRSxnQkFBQWxvRSxLQUFBZzBELGFBQUEsR0FBQTYwQixVQUFBN29GLEtBQUFrb0Usa0JBQUFzZ0IsY0FBQXhvRixLQUFBcW9FLGdCQUFBK2YsUUFBNEosSUFBQXB2RSxHQUFRMjZDLFlBQUEsRUFBQXUxQixrQkFBQWxwRixLQUFBbW9FLFVBQUF2aUQsRUFBQWtrRCxRQUFBbGtELEVBQUF5a0QsV0FBQThlLGNBQUFucEYsS0FBQW1vRSxVQUFBdmlELEVBQUFra0QsUUFBQWxrRCxFQUFBeWtELFdBQUErZSxrQkFBQXBwRixLQUFBbW9FLFVBQUF2aUQsRUFBQWtrRCxRQUFBbGtELEVBQUF5a0QsV0FBQW1lLGNBQUF4b0YsS0FBQXFvRSxnQkFBQStmLFVBQXlOdDdCLEdBQUFDLFFBQUEsT0FBQXAwQyxFQUFBelksU0FBQSxrREFBb0YybkYsR0FBQSxjQUFrQixJQUFBbHZFLEVBQUEzWSxLQUFBdzBELGNBQXlCMUgsR0FBQWdHLFNBQUEsSUFBQW42QyxFQUFBLG9FQUFzRixJQUFBSyxFQUFBaFosS0FBQXcwRCxjQUFBejJELEVBQUEsSUFBQTZuQixFQUFBNWxCLEtBQUErN0MsS0FBQS83QyxLQUFBb2YsT0FBQXBmLEtBQUEybkUsY0FBMEUsT0FBT2hVLFlBQUEsRUFBQWxHLFdBQUF6MEMsRUFBQWlkLFVBQUE0eEQsR0FBQTd1RSxHQUFBbmIsS0FBQUUsS0FBb0Q4cEYsR0FBQSxjQUFrQixJQUFBbHZFLEVBQUEzWSxLQUFBdzBELGNBQXlCLE9BQUExSCxHQUFBZ0csU0FBQSxJQUFBbjZDLEVBQUEsOEZBQXVIZzdDLFlBQUFoN0MsRUFBQTB4RCxTQUFBcnFFLEtBQUFrcEUsYUFBQXRqRCxFQUFBeWtELFVBQUE2ZSxrQkFBQWxwRixLQUFBbW9FLFVBQUF2aUQsRUFBQWtrRCxRQUFBbGtELEVBQUF5a0QsV0FBQStlLGtCQUFBcHBGLEtBQUFtb0UsVUFBQXZpRCxFQUFBa2tELFFBQUFsa0QsRUFBQXlrRCxXQUFBZ2YsWUFBQXJwRixLQUFBa29FLG9CQUEwTSxJQUFBb2hCLEdBQUEsSUFBQXhsRixNQUFBLEdBQW9Cd2xGLEdBQUEsWUFBQTN3RSxHQUFrQixXQUFBQSxFQUFBZzdDLFlBQUEsSUFBQXBDLEdBQUFpQixNQUFBLHNCQUE0RHYwRCxLQUFBLGNBQUFnUSxLQUFBLFNBQUF0UCxNQUFBLElBQTJDVixLQUFBLFdBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQUE0eUQsR0FBQWlWLFNBQUE3dEQsRUFBQTB4RCxZQUFpRXBzRSxLQUFBLGVBQUFnUSxLQUFBLFNBQUF0UCxNQUFBZ2EsRUFBQW12RSxnQkFBdUQsSUFBQXYyQixHQUFBaUIsTUFBQSxzQkFBc0N2MEQsS0FBQSxjQUFBZ1EsS0FBQSxTQUFBdFAsTUFBQSxJQUEyQ1YsS0FBQSxXQUFBZ1EsS0FBQSxRQUFBdFAsTUFBQSxJQUFBNHlELEdBQUFpVixTQUFBN3RELEVBQUEweEQsWUFBK0Rqa0QsT0FBQW1yQyxHQUFBcVYsV0FBQSxhQUFBanVELEVBQUFvdkUsZUFBb0R1QixHQUFBLFlBQUEzd0UsR0FBbUIsT0FBQW0wQyxHQUFBQyxPQUFBLElBQUFwMEMsRUFBQWc3QyxZQUFBLDRDQUFBcEMsR0FBQWlCLE1BQUEsc0JBQThHdjBELEtBQUEsY0FBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBMkNWLEtBQUEsV0FBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBQTR5RCxHQUFBaVYsU0FBQTd0RCxFQUFBMHhELFlBQStEamtELE9BQUFtckMsR0FBQXNWLFVBQUEsU0FBQWx1RCxFQUFBc3ZFLGNBQUEsU0FBQXR2RSxHQUEyRCxXQUFBNDRDLEdBQUFpQixNQUFBLG9CQUFBakIsR0FBQXFWLFdBQUEsWUFBQWp1RCxTQUEwRTJ3RSxHQUFBLFlBQUEzd0UsR0FBbUIsT0FBQW0wQyxHQUFBQyxPQUFBLElBQUFwMEMsRUFBQWc3QyxZQUFBLDRDQUFBcEMsR0FBQWlCLE1BQUEsc0JBQThHdjBELEtBQUEsY0FBQWdRLEtBQUEsU0FBQXRQLE1BQUEsSUFBMkNWLEtBQUEsV0FBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBQTR5RCxHQUFBaVYsU0FBQTd0RCxFQUFBMHhELFlBQStEamtELE9BQUFtckMsR0FBQXNWLFVBQUEsU0FBQWx1RCxFQUFBdXZFLGFBQUEsU0FBQXZ2RSxHQUEwRCxXQUFBNDRDLEdBQUFpQixNQUFBLG1CQUFBakIsR0FBQXNWLFVBQUEsV0FBQWx1RCxFQUFBLFNBQUFBLEdBQTZFLFdBQUE0NEMsR0FBQWlCLE1BQUEsa0JBQXNDdjBELEtBQUEsV0FBQWdRLEtBQUEsU0FBQXRQLE1BQUFnYSxFQUFBd3ZFLFdBQStDL2hFLE9BQUFtckMsR0FBQXFWLFdBQUEsWUFBQWp1RCxFQUFBbzhDLFdBQUFwOEMsRUFBQW84QyxXQUFBenpELE9BQUEsYUFBaUYsSUFBQSsvRCxJQUFRakMsTUFIOGxULFNBQUF6bUQsRUFBQUssR0FBd0IsSUFBQWpiLEVBQUEsSUFBQTZuQixFQUFBak4sRUFBUEssS0FBQSxHQUFPaGIsRUFBQUQsRUFBQWdxRSxhQUFBLEdBQXFDLE9BQUFqYixHQUFBZ0csU0FBQSxJQUFBOTBELEdBQUEsTUFBQUEsRUFBQSx1Q0FBQUEsR0FBNEU2SSxRQUFBN0ksRUFBQXVyRixRQUFBeHJGLEVBQUEwc0Usa0JBQUErZSxTQUFBenJGLEVBQUEyc0UsbUJBQUErZSxRQUFBMXJGLEVBQUE0c0UsZ0JBQUFrZCxNQUFvR2hoRixRQUFBN0ksRUFBQXVyRixRQUFBeHJGLEVBQUEwc0Usa0JBQUErZSxTQUFBenJGLEVBQUEyc0UsbUJBQUErZSxRQUFBMXJGLEVBQUE0c0UsZ0JBQUFrZCxJQUFBNkIsV0FBQTNyRixFQUFBOHNFLCtCQUczMFRVLEtBSHc5VCxTQUFBNXlELEdBQWUsV0FBQTQ0QyxHQUFBaUIsTUFBQSxTQUE2QnYwRCxLQUFBLFVBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLFFBQTBDVixLQUFBLFVBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQUE0eUQsR0FBQWtWLFdBQUE5dEQsRUFBQTR3RSxXQUFpRXRyRixLQUFBLFdBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQUE0eUQsR0FBQW1WLFlBQUEvdEQsRUFBQTZ3RSxZQUFvRXZyRixLQUFBLFVBQUFnUSxLQUFBLFFBQUF0UCxNQUFBLElBQUE0eUQsR0FBQW9WLFdBQUFodUQsRUFBQTh3RSxRQUFBSCxTQUdscVU3bkIsSUFBS3JDLE1BSGt1VSxTQUFBem1ELEVBQUFLLEdBQWlCLElBQUFqYixFQUFBLElBQUE2d0QsR0FBQVEsT0FBQXoyQyxFQUFBSyxHQUFBaGIsRUFBQUQsRUFBQTRwRSxhQUEwQzdhLEdBQUFnRyxTQUFBLElBQUE5MEQsRUFBQSxtQ0FBQUQsRUFBQTRwRSxhQUFBNXBFLEVBQUE0cEUsYUFBbUYsUUFBQWg5RCxFQUFBNU0sRUFBQTRwRSxhQUFBMXZELEtBQTZCSyxFQUFBLEVBQUtBLEVBQUEzTixFQUFJMk4sSUFBQSxDQUFLLElBQUF5aUMsRUFBQWg5QyxFQUFBZ2dFLFdBQUFyZ0UsRUFBQUssRUFBQTRwRSxhQUFBdmxFLEVBQUFyRSxFQUFBNHBFLGFBQUFsbUQsRUFBQXVoRCxHQUFBMEIsS0FBQS9yRCxFQUFBSyxFQUFBdGIsRUFBQTBFLEdBQXdFNlYsRUFBQThpQyxHQUFBdDVCLEVBQU8sT0FBQXhKLEdBRzErVXN6RCxLQUhtL1UsU0FBQTV5RCxHQUFlLElBQUFLLEVBQUE1YSxPQUFBcUUsS0FBQWtXLEdBQUFyWCxPQUFBdkQsRUFBQSxHQUFBQyxFQUFBLE1BQUFnYixFQUFBck8sRUFBQSxJQUFBNG1ELEdBQUFpQixNQUFBLFNBQW1FdjBELEtBQUEsVUFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBc0NWLEtBQUEsUUFBQWdRLEtBQUEsUUFBQXRQLE1BQUEsSUFBb0NWLEtBQUEsU0FBQWdRLEtBQUEsUUFBQXRQLE1BQUFYLElBQXFDQyxLQUFBLFVBQUFnUSxLQUFBLFFBQUF0UCxNQUFBcWEsS0FBdUMsUUFBQWYsS0FBQVUsRUFBQSxDQUFnQixJQUFBTCxFQUFBdmEsRUFBQXVELE9BQWV2RCxHQUFBNGEsRUFBQVYsR0FBQXROLEVBQUFnaUQsT0FBQS9wRCxNQUF1QjNFLEtBQUEsT0FBQWdhLEVBQUFoSyxLQUFBLE1BQUF0UCxNQUFBc1osSUFBaUN0TixFQUFBZ2lELE9BQUEvcEQsTUFBaUIzRSxLQUFBLFVBQUFnYSxFQUFBaEssS0FBQSxRQUFBdFAsTUFBQVgsRUFBQXNhLElBQXdDM04sRUFBQWdpRCxPQUFBL3BELE1BQWlCM0UsS0FBQSxVQUFBZ2EsRUFBQWhLLEtBQUEsUUFBQXRQLE1BQUFnYSxFQUFBVixHQUFBM1csU0FBa0QsT0FBQXFKLEVBQUFnaUQsT0FBQS9wRCxNQUFzQjNFLEtBQUEsYUFBQWdRLEtBQUEsWUFBQXRQLE1BQUFaLElBQTJDNE0sSUFHOTlWZy9FLElBQUtwZSxLQUFBaFosR0FBQXEzQixZQUg2cFosU0FBQWp4RSxHQUFlLFFBQUFLLEVBQUFqYixLQUFBQyxLQUFBMk0sS0FBQXNOLEtBQUFLLEtBQUF5aUMsS0FBQXI5QyxLQUFBMEUsRUFBQSxFQUFBcWYsRUFBQSxFQUFBOWpCLEVBQUEsRUFBQUcsRUFBQSxFQUFBcUIsRUFBQSxFQUFBaEIsRUFBQSxFQUFxRUEsRUFBQXdhLEVBQUFrMEMsT0FBQXZyRCxPQUFrQm5ELEdBQUEsR0FBTSxJQUFBcUIsRUFBQW1aLEVBQUFrMEMsT0FBQXR1RCxJQUFBSixHQUFBc1csRUFBQSxFQUFBalYsRUFBQWdzRSxRQUFvQyxHQUFBcjFCLE1BQUEzMkMsRUFBQTJ4RCxjQUFBLFVBQUFseEQsTUFBQSxTQUFBVCxFQUFBdkIsS0FBQSxLQUFBRSxFQUFBLHFDQUFvRzZhLEVBQUF2RSxRQUFBLElBQUF1RSxJQUFBdkUsRUFBQSxJQUFBdUUsRUFBQXZFLEdBQUFyUyxFQUFBcVMsSUFBQXJTLEVBQUFxUyxHQUF5QyxJQUFBalcsRUFBQTBoRSxHQUFBa25CLGdCQUFBM3lFLEdBQTRCLEdBQUFqVyxFQUFBLEdBQUFpakIsR0FBQSxHQUFBampCLE9BQWdCLEdBQUFBLEVBQUEsR0FBQWIsR0FBQSxHQUFBYSxFQUFBLFFBQXdCLEdBQUFBLEVBQUEsR0FBQVYsR0FBQSxHQUFBVSxFQUFBLE9BQXdCLENBQUssS0FBQUEsRUFBQSxlQUFBeUIsTUFBQSw2REFBeUZkLEdBQUEsR0FBQVgsRUFBQSxHQUFXLGVBQUFnQixFQUFBdkIsS0FBQSxDQUF1QixJQUFBd0IsRUFBQUQsRUFBQTB6RCxhQUFxQm4xRCxFQUFBNkUsS0FBQW5ELEVBQUEwc0UsTUFBQW51RSxFQUFBNEUsS0FBQW5ELEVBQUEyc0UsTUFBQXpoRSxFQUFBL0gsS0FBQW5ELEVBQUE0c0UsTUFBQXAwRCxFQUFBclYsS0FBQW5ELEVBQUE2c0UsTUFBQXZ4QixFQUFBbjRDLEtBQUFuRCxFQUFBZ3RFLGlCQUFBL3VFLEVBQUFrRixLQUFBbkQsRUFBQWl0RSxrQkFBQXAwRCxFQUFBMVYsS0FBQXBELEVBQUEyeEQsZUFBeUksSUFBQXZ5RCxHQUFPdXRFLEtBQUF2bkUsS0FBQXNYLElBQUE1VSxNQUFBLEtBQUF2SixHQUFBcXVFLEtBQUF4bkUsS0FBQXNYLElBQUE1VSxNQUFBLEtBQUF0SixHQUFBcXVFLEtBQUF6bkUsS0FBQThLLElBQUFwSSxNQUFBLEtBQUFxRCxHQUFBMmhFLEtBQUExbkUsS0FBQThLLElBQUFwSSxNQUFBLEtBQUEyUSxHQUFBMDNELGdCQUFBL3FFLEtBQUE4SyxJQUFBcEksTUFBQSxLQUFBZ1IsR0FBQXV4RSxnQkFBdnVCLFNBQUFseEUsR0FBZSxRQUFBSyxFQUFBLEVBQUFqYixFQUFBLEVBQWdCQSxFQUFBNGEsRUFBQXJYLE9BQVd2RCxHQUFBLEVBQUFpYixHQUFBTCxFQUFBNWEsR0FBYSxPQUFBaWIsRUFBQUwsRUFBQXJYLE9BQWdyQndvRixDQUFBeHhFLEdBQUFzM0QsbUJBQUFockUsS0FBQXNYLElBQUE1VSxNQUFBLEtBQUF5ekMsR0FBQWd2QyxtQkFBQW5sRixLQUFBOEssSUFBQXBJLE1BQUEsS0FBQXl6QyxHQUFBODBCLG9CQUFBanJFLEtBQUFzWCxJQUFBNVUsTUFBQSxLQUFBNUosSUFBNlNrQixFQUFBKzhELFNBQUFoakQsRUFBQWdqRCxTQUFBLzhELEVBQUFnOUQsVUFBQWpqRCxFQUFBaWpELFVBQThDLElBQUF0ZixFQUFBbWpCLEdBQUE4TCxNQUFlMkQsTUFBQSxFQUFBeFQsV0FBQS9pRCxFQUFBK2lELFdBQUF5USxLQUFBdnRFLEVBQUF1dEUsS0FBQUMsS0FBQXh0RSxFQUFBd3RFLEtBQUFDLEtBQUF6dEUsRUFBQXl0RSxLQUFBQyxLQUFBMXRFLEVBQUEwdEUsS0FBQWdELGNBQUEsRUFBQTNTLGlCQUFBaGtELEVBQUFna0QsbUJBQW9Jbm5CLEVBQUFvcUIsR0FBQTJMLE1BQWE1UCxTQUFBLzhELEVBQUErOEQsU0FBQUMsVUFBQWg5RCxFQUFBZzlELFVBQUErVCxnQkFBQS93RSxFQUFBK3dFLGdCQUFBQyxtQkFBQWh4RSxFQUFBZ3hFLG1CQUFBQyxvQkFBQWp4RSxFQUFBaXhFLG9CQUFBQyxXQUFBbHhFLEVBQUFtckYsb0JBQUFuckYsRUFBQXl0RSxLQUFBenRFLEVBQUF1dEUsTUFBQXRNLGlCQUFBbG5ELEVBQUFrMEMsT0FBQXZyRCxTQUErT203QyxFQUFBdWpCLEdBQUF1TCxLQUFBNXlELEVBQUFrMEMsT0FBQXZyRCxRQUFBczRCLEVBQUFzbUMsR0FBQXFMLE1BQXdDMlosY0FBQXRnRixLQUFBb1MsTUFBQXBZLEVBQUFpckYsaUJBQUFodEIsY0FBQWxrRCxFQUFBODNDLE9BQUFtTSxJQUFBQyxjQUFBSSxhQUFBdGtELEVBQUE4M0MsT0FBQW1NLElBQUFLLGFBQUFvcEIsaUJBQUFydEUsRUFBQXN0RSxnQkFBQWxrRixFQUFBNGpGLGdCQUFBdmtFLEVBQUF3a0UsZ0JBQUF0b0YsRUFBQXVvRixnQkFBQXBvRixFQUFBcW9GLGdCQUFBaG5GLEVBQUFpK0QsWUFBQXprRCxFQUFBODNDLE9BQUFtTSxJQUFBUSxZQUFBbXBCLGNBQUEzbkYsRUFBQSs4RCxTQUFBNnFCLGVBQUE1bkYsRUFBQWc5RCxVQUFBNnFCLGFBQUEsRUFBQUMsWUFBQTluRixFQUFBMHRFLEtBQUFxYSxhQUFBL2hGLEtBQUFzVixJQUFBdGIsRUFBQXd0RSxNQUFBd2EsaUJBQUEsRUFBQUUsU0FBQTl6QixHQUFBcjZDLEVBQUEsUUFBMmEyekQsS0FBQTFuRSxLQUFBb1MsTUFBQXBZLEVBQUErOEQsU0FBQSxLQUE4QjJRLEtBQUF5YSxXQUFBL3pCLEdBQUFyNkMsRUFBQSw0QkFBQS9aLEdBQUEwdEUsS0FBQTBhLGNBQUFydUUsRUFBQXF4RSxRQUFBLFVBQUEvQyxZQUFBdHVFLEVBQUFxeEUsUUFBQSxZQUE2SC9yRCxFQUFBeWlDLEdBQUE2SyxLQUFBNXlELEVBQUFrMEMsUUFBQTN1QixFQUFBaWhDLEdBQUFvTSxLQUFBNXlELEVBQUFrMEMsUUFBQWpRLEVBQUFqa0MsRUFBQXN4RSxlQUFBLGNBQUEvNUUsRUFBQXlJLEVBQUFzeEUsZUFBQSxpQkFBQWh0QyxFQUFBTCxFQUFBLElBQUExc0MsRUFBQWd0QyxFQUFBdmtDLEVBQUFzeEUsZUFBQSxrQkFBOEovc0MsTUFBQU4sRUFBQXptQixRQUFBLGNBQUFqbUIsR0FBaUMsSUFBQWl0QyxLQUFTLFFBQUFDLEtBQUF6a0MsRUFBQTAxQyxNQUFBbFIsRUFBQUMsR0FBQXprQyxFQUFBMDFDLE1BQUFqUixHQUFxQ0QsRUFBQStzQyxXQUFBL3NDLEVBQUErc0MsVUFBeUJwdUIsR0FBQW5qRCxFQUFBc3hFLGVBQUEsb0JBQUFodEMsSUFBMENFLEVBQUE4ZSxpQkFBQTllLEVBQUE4ZSxnQkFBdUNILEdBQUE1ZSxJQUFLQyxFQUFBZ3RDLGtCQUFBaHRDLEVBQUFndEMsZ0JBQUF4eEUsRUFBQTAxQyxNQUFBd04sWUFBQTFlLEVBQUFpdEMscUJBQUFqdEMsRUFBQWl0QyxtQkFBQXp4RSxFQUFBMDFDLE1BQUEwTixlQUErSCxJQUFBMWUsS0FBQUMsRUFBQWlqQixHQUFBZ0wsS0FBQXB1QixFQUFBRSxHQUFBRSxFQUFBRixFQUFBLzdDLE9BQUEsRUFBQXcrRCxHQUFBeUwsS0FBQWx1QixRQUFBLEVBQUFHLEVBQUE0aUIsR0FBQW1MLE9BQUE5dEIsRUFBQWdqQixHQUFBOEssS0FBQTV5RCxFQUFBazBDLFFBQXVGaG1ELFFBQUE4UixFQUFBc3hFLGVBQUEsV0FBQWp1QixTQUFBL2UsRUFBQXVlLFdBQUE1ZSxFQUFBa3hCLFdBQUE1OUQsRUFBQStyRCxlQUFBL2UsRUFBQXdlLFdBQUEvaUQsRUFBQStpRCxXQUFBcVMsVUFBQSxFQUFBbnZFLEVBQUF3dEUsS0FBQXh0RSxFQUFBKzhELFNBQUEvOEQsRUFBQSt3RSxtQkFBbUtqeUIsRUFBQS9rQyxFQUFBK29ELE9BQUF0akUsT0FBQXFFLEtBQUFrVyxFQUFBK29ELE9BQUFwZ0UsT0FBQSxFQUFBbWdFLEdBQUE4SixLQUFBNXlELEVBQUErb0QsWUFBQSxFQUFBL2pCLEdBQUFyQixFQUFBOUcsRUFBQWlILEVBQUE3aUIsRUFBQTBqQixFQUFBcGYsRUFBQXNmLEVBQUFDLEVBQUF4ZixHQUF5RnNmLEdBQUFJLEVBQUEvNkMsS0FBQTI2QyxHQUFBNWtDLEVBQUE4M0MsT0FBQTJRLE1BQUF6akIsRUFBQS82QyxLQUFBeStELEdBQUFrSyxLQUFBNXlELEVBQUE4M0MsT0FBQTJRLE9BQUExakIsR0FBQUMsRUFBQS82QyxLQUFBODZDLEdBQXdFLFFBQUFHLEVBQUEwVSxHQUFBNVUsR0FBQUcsRUFBQXVVLEdBQUF4VSxFQUFBa1YsVUFBQW50QyxFQUFBaTRCLEVBQUE4TyxPQUFBdlEsR0FBQSxFQUFBTSxFQUFBLEVBQXlEQSxFQUFBOTJCLEVBQUF0a0IsT0FBV283QyxHQUFBLG9CQUFBOTJCLEVBQUE4MkIsR0FBQXorQyxLQUFBLENBQWtDMm5CLEVBQUE4MkIsR0FBQS85QyxNQUFBcXdFLG1CQUFBLFdBQUFseEIsRUFBQTFCLEdBQUEsRUFBZ0QsTUFBTSxJQUFBQSxFQUFBLFVBQUFuOEMsTUFBQSxzREFBNEUsT0FBQTQ5QyxHQUdqdmZ3c0MsZ0JBQUFoNEIsSUFBMkNpQixHQUFBaDBELFdBQWNnckYsVUFBQW4zQixHQUFBbzNCLFVBQUFuM0IsR0FBQW8zQixTQUFBLFNBQUE3eEUsR0FBK0MsSUFBQUssRUFBQWhaLEtBQUFrdUQsS0FBQXVDLE9BQUF6d0QsS0FBQTBzRCxXQUF1QyxPQUFBMXpDLEdBQUFMLElBQUFLLEVBQUFoWixLQUFBa3VELEtBQUF1QyxPQUFBendELEtBQUEwc0QsV0FBQTFzRCxLQUFBeXFGLHNCQUFBenhFLEdBQThFMHhFLGVBQUEsV0FBMkIsSUFBQS94RSxFQUFBM1ksS0FBQXdxRixXQUFzQixPQUFBN3hFLElBQUE0d0UsUUFBQTV5RSxJQUFBLFNBQUFnQyxHQUFtQyxPQUFBQSxFQUFBeXlDLFVBQWtCdS9CLHFCQUFBLFdBQWlDLElBQUFoeUUsRUFBQTNZLEtBQUF3cUYsV0FBc0IsR0FBQTd4RSxFQUFBLENBQU0sUUFBQUssR0FBQSxFQUFBamIsRUFBQSxFQUFpQkEsRUFBQTRhLEVBQUE0d0UsUUFBQWpvRixPQUFtQnZELElBQUEsQ0FBSyxJQUFBQyxFQUFBMmEsRUFBQTR3RSxRQUFBeHJGLEdBQUFxdEQsSUFBdUIsWUFBQXB0RCxFQUFBLE9BQUFBLEVBQXVCLFNBQUFBLElBQUFnYixHQUFBLEdBQW1CLE9BQUFBLEVBQUEsZ0JBQXdCNHhFLGVBQUEsU0FBQWp5RSxFQUFBSyxHQUE4QixJQUFBamIsRUFBQWlDLEtBQUF3cUYsU0FBQXh4RSxHQUF1QixHQUFBamIsRUFBQSxDQUFNNGEsS0FBQSxPQUFZLElBQUEzYSxFQUFBRCxFQUFBd3JGLFFBQUE1K0UsRUFBQXdvRCxHQUFBcDFELEVBQUF3ckYsUUFBQTV3RSxHQUFrQyxHQUFBaE8sR0FBQSxTQUFBM00sRUFBQTJNLEdBQUFxaUQsT0FBMkIsR0FBQWgwQyxFQUFBLENBQU0sSUFBQWYsR0FBT216QyxJQUFBenlDLEVBQUFxMEMsUUFBY0MsZ0JBQWdCdWQsU0FBQSxFQUFBdGQsZ0JBQUEsTUFBQUMsbUJBQW1EQyxvQkFBcUIsT0FBQXB2RCxFQUFBdUQsUUFBQSxFQUFBb0osRUFBQSxFQUFBc04sS0FBQSswQyxVQUFxQzY5QixnQkFBQSxTQUFBbHlFLEVBQUFLLEVBQUFqYixHQUFpQyxJQUFBQyxFQUFBZ0MsS0FBQTRxRixlQUFBanlFLEVBQUE1YSxHQUErQixHQUFBQyxFQUFBLENBQU0sSUFBQWdiLEdBQUEsU0FBQUEsR0FBQSxTQUFBQSxFQUFBLE9BQUFoYixFQUFBaXZELGVBQXNELElBQUF0aUQsRUFBQXdvRCxHQUFBbjFELEVBQUFvdkQsZUFBQXAwQyxHQUE2QixHQUFBck8sR0FBQSxTQUFBM00sRUFBQW92RCxlQUFBemlELEdBQUEwaUQsUUFBMkMsR0FBQXR2RCxFQUFBLENBQU0sSUFBQWthLEdBQU9tekMsSUFBQXB5QyxFQUFBcTBDLFNBQWVtZCxTQUFBLEVBQUF0ZCxnQkFBQSxNQUFBQyxvQkFBcUQsT0FBQW52RCxFQUFBb3ZELGVBQUE3ckQsUUFBQSxFQUFBb0osRUFBQSxFQUFBc04sS0FBQW8xQyxXQUFxRHk5QixnQkFBQSxTQUFBbnlFLEVBQUFLLEVBQUFqYixFQUFBQyxHQUFtQyxJQUFBMk0sRUFBQTNLLEtBQUE2cUYsZ0JBQUFseUUsRUFBQUssRUFBQWhiLEdBQWtDLEdBQUEyTSxFQUFBLENBQU0sUUFBQXNOLEVBQUFLLEVBQUEzTixFQUFBd2lELGVBQUFwUyxFQUFBLzZDLEtBQUFrdUQsS0FBQXVDLE9BQUF6d0QsS0FBQTBzRCxXQUFBODhCLFNBQUE5ckYsRUFBQSxFQUE2RUEsRUFBQTRhLEVBQUFoWCxPQUFXNUQsSUFBQSxJQUFBdWEsRUFBQThpQyxFQUFBemlDLEVBQUE1YSxLQUFBMHRELE1BQUFydEQsRUFBQSxPQUFBa2EsRUFBQXExQyxRQUE0QyxHQUFBdHZELEVBQUEsQ0FBTSxJQUFBb0UsRUFBQTI0QyxFQUFBejVDLE9BQWUsT0FBQXdyRCxHQUFBQyxPQUFBLElBQUEzcUQsR0FBQXJFLEdBQUFnOUMsRUFBQTM0QyxFQUFBLEdBQUFncEQsSUFBQSxpREFBQW56QyxHQUEwRm16QyxJQUFBcnRELEVBQUF1dkQsU0FBZTNzRCxPQUFBLEVBQUE2c0QsdUJBQStCelMsRUFBQW40QyxLQUFBcVYsR0FBQUssRUFBQTFWLEtBQUFSLEdBQUE2VixFQUFBcTFDLFdBQWlDeTlCLGdCQUFBLFNBQUFweUUsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxHQUFxQyxJQUFBc04sRUFBQWpZLEtBQUE4cUYsZ0JBQUFueUUsRUFBQUssRUFBQWpiLEVBQUE0TSxHQUFBMk4sS0FBeUMsR0FBQUwsRUFBQSxDQUFNLFFBQUE4aUMsRUFBQXI5QyxFQUFBdWEsRUFBQXUxQyxrQkFBQXByRCxFQUFBcEMsS0FBQWt1RCxLQUFBdUMsT0FBQXp3RCxLQUFBMHNELFdBQUErOEIsUUFBQWhvRSxFQUFBLEVBQStFQSxFQUFBL2pCLEVBQUE0RCxPQUFXbWdCLEtBQUFzNUIsRUFBQTM0QyxFQUFBMUUsRUFBQStqQixLQUFBZ3NDLGFBQUF6dkQsR0FBQXNhLEVBQUExVixLQUFBbTRDLEdBQTBDLE9BQUF6aUMsRUFBQWhYLFFBQUFxSixFQUFBLENBQW9Cb3dDLEdBQUcwUyxXQUFBenZELEVBQUEwdkQsV0FBQSxFQUFBQyxhQUFBaWQsc0JBQUEsR0FBZ0UsSUFBQWp0RSxFQUFBeUUsRUFBQWQsT0FBZSxPQUFBYyxFQUFBUSxLQUFBbTRDLEdBQUFyOUMsRUFBQWtGLEtBQUFqRixJQUFBbzlDLElBQWdDLE9BQUF6aUMsR0FBUzB5RSxjQUFBLFNBQUFyeUUsRUFBQUssR0FBNkIsT0FBQUwsRUFBQWkwQyxRQUFpQixjQUFBajBDLEVBQUE2d0QsWUFBQXh3RCxLQUFBTCxFQUFBNndELFdBQUE3d0QsRUFBQTh3RCxRQUFBbm9FLE9BQUFxWCxFQUFBOHdELFFBQUF6d0QsRUFBQUwsRUFBQTZ3RCxZQUFBLEVBQTJGLFdBQUF6ckUsRUFBQXMxRCxHQUFBMTZDLEVBQUEyd0QsT0FBQXR3RCxHQUE0QixPQUFBamIsSUFBQTJyRSxRQUFBLElBQXNCdWhCLGlCQUFBLFNBQUF0eUUsRUFBQUssR0FBZ0MsT0FBQUwsRUFBQWkwQyxRQUFpQixXQUFBN3VELEVBQUFxMUQsR0FBQXo2QyxFQUFBazBDLE9BQUE3ekMsR0FBNEIsT0FBQWpiLEdBQUEsRUFBQUEsR0FBQSxFQUFpQixXQUFBQyxFQUFBcTFELEdBQUExNkMsRUFBQTJ3RCxPQUFBdHdELEdBQTRCLE9BQUFoYixJQUFBc0ssTUFBQTBRLEVBQUFoYixFQUFBMlAsT0FBQSxJQUErQnU5RSxlQUFBLFNBQUF2eUUsR0FBNEIsT0FBQUEsRUFBQWkwQyxPQUFBLE9BQUFqMEMsRUFBQWswQyxPQUFnQyxRQUFBN3pDLEtBQUFqYixFQUFBNGEsRUFBQTJ3RCxPQUFBdHJFLEVBQUEsRUFBNEJBLEVBQUFELEVBQUF1RCxPQUFXdEQsSUFBQSxRQUFBMk0sRUFBQTVNLEVBQUFDLEdBQUFpYSxFQUFBdE4sRUFBQWdELE1BQUEySyxFQUFBM04sRUFBQXZCLElBQUEyeEMsRUFBQTlpQyxFQUF5QzhpQyxHQUFBemlDLEVBQUt5aUMsSUFBQS9oQyxFQUFBcFcsS0FBQW00QyxHQUFjLE9BQUEvaEMsSUFBVXU2QyxHQUFBajBELFVBQUFnMEQsR0FBQWgwRCxVQUFBaTBELEdBQUFqMEQsVUFBQTZoRSxLQUFBLFdBQXdELElBQUF4b0QsRUFBQTNZLEtBQUEycUYsdUJBQWtDM3FGLEtBQUFtckYscUJBQUFuckYsS0FBQW9yRixpQkFBQXp5RSxJQUFtRDQ2QyxHQUFBajBELFVBQUErckYsZ0JBQUEsU0FBQTF5RSxFQUFBSyxFQUFBamIsR0FBOEMsUUFBQUMsRUFBQWdDLEtBQUEySyxFQUFBLEVBQW1CQSxFQUFBZ08sRUFBQXJYLE9BQVdxSixJQUFBLFFBQUFzTixFQUFBVSxFQUFBaE8sR0FBQWdqRCxVQUFBcjFDLEVBQUEsRUFBaUNBLEVBQUFMLEVBQUEzVyxPQUFXZ1gsSUFBQSxDQUFLLElBQUF5aUMsRUFBQTlpQyxFQUFBSyxHQUFBNWEsRUFBQU0sRUFBQWl0RixpQkFBQWx3QyxFQUFBc3ZCLFNBQUFyeEQsR0FBOEMsS0FBQXRiLEVBQUEsVUFBQXE5QyxFQUFBdXdDLFdBQThCLGVBQUFscEYsRUFBQTI0QyxFQUFBd3dDLFNBQUE3dEYsR0FBQStqQixFQUFBLEVBQW1DQSxFQUFBcmYsRUFBQWQsT0FBV21nQixJQUFBLENBQUssSUFBQTlqQixFQUFBeUUsRUFBQXFmLEdBQVcsR0FBQTlqQixFQUFBNnRGLGNBQUF6dEYsRUFBQSxPQUFBSixFQUFBOHRGLFFBQUE5dEYsRUFBQTh0RixPQUFBOWlCLFVBQUEsRUFBMkQsTUFBTSxXQUFBN3FFLEVBQUFFLEVBQUFndEYsY0FBQWp3QyxFQUFBMndDLFVBQUExeUUsR0FBQTdaLEVBQUFuQixFQUFBZ3RGLGNBQUFqd0MsRUFBQTR3QyxVQUFBNXRGLEdBQUFJLEVBQUE0OEMsRUFBQTZ3QyxhQUFBOXRGLEdBQUFxQixHQUFvRyxPQUFBaEIsRUFBQXN0RixRQUFBdHRGLEVBQUFzdEYsT0FBQTlpQixVQUFBLEdBQXVDLFVBQVNwVixHQUFBajBELFVBQUE4ckYsaUJBQUEsU0FBQXp5RSxFQUFBSyxHQUE2QyxHQUFBaFosS0FBQWt1RCxLQUFBdUMsT0FBQXdRLEtBQUEsT0FBQWpoRSxLQUFBK3FGLGdCQUFBcHlFLEVBQUFLLEVBQUEsV0FBbUV3NkMsR0FBQWwwRCxVQUFBZzBELEdBQUFoMEQsVUFBQWswRCxHQUFBbDBELFVBQUFtckYsbUJBQUEsV0FBc0UsT0FBTzVqRixRQUFBLEVBQUEwaUYsVUFBb0JuK0IsSUFBQSxPQUFBNEIsUUFBbUJDLGdCQUFnQnVkLFNBQUEsRUFBQXRkLGdCQUFBLE1BQUFDLG1CQUFtREMscUJBQW9CbzhCLFlBQUFDLGFBQTBCajJCLEdBQUFsMEQsVUFBQXVzRixVQUFBLFNBQUFsekUsRUFBQUssRUFBQWpiLEdBQXdDLFFBQUE0TSxLQUFBc04sRUFBQWpZLEtBQUErcUYsZ0JBQUEveEUsRUFBQWpiLEVBQUE0YSxFQUFBLEdBQUFMLEVBQUEsRUFBd0RBLEVBQUFMLEVBQUEzVyxPQUFXZ1gsSUFBQSxRQUFBeWlDLEVBQUE5aUMsRUFBQUssR0FBQXExQyxVQUFBandELEVBQUEsRUFBaUNBLEVBQUFxOUMsRUFBQXo1QyxPQUFXNUQsSUFBQSxDQUFLLElBQUEwRSxFQUFBMjRDLEVBQUFyOUMsR0FBQStqQixFQUFwSHpoQixLQUFvSGtyRixlQUFBOW9GLEVBQUFpb0UsVUFBQTFzRSxPQUFBLEVBQW1ELE9BQUF5RSxFQUFBdXhELFlBQUEsQ0FBc0IsSUFBQTcxRCxFQUFBc0UsRUFBQTBsRixhQUFxQixJQUFBbnFGLEVBQUEsRUFBUUEsRUFBQThqQixFQUFBbmdCLE9BQVczRCxJQUFBLENBQUssSUFBQXdCLEVBQUFzaUIsRUFBQTlqQixHQUFXZ04sRUFBQS9ILE1BQVFrcEYsSUFBQTNzRixFQUFBNHNGLEdBQUE1c0YsRUFBQXJCLFNBQWdCLENBQUssSUFBQUssRUFBQWlFLEVBQUEybEYsV0FBbUIsSUFBQXBxRixFQUFBLEVBQVFBLEVBQUE4akIsRUFBQW5nQixPQUFXM0QsSUFBQWdOLEVBQUEvSCxNQUFZa3BGLElBQUFycUUsRUFBQTlqQixHQUFBb3VGLEdBQUE1dEYsRUFBQVIsTUFBb0IsT0FBQWdOLEdBQVM2b0QsR0FBQWwwRCxVQUFBMHNGLGNBQUEsU0FBQXJ6RSxFQUFBSyxFQUFBamIsR0FBNEMsUUFBQTRNLEtBQUFzTixFQUFBalksS0FBQStxRixnQkFBQS94RSxFQUFBamIsRUFBQTRhLEVBQUEsR0FBQUwsRUFBQSxFQUF3REEsRUFBQUwsRUFBQTNXLE9BQVdnWCxJQUFBLFFBQUF5aUMsRUFBQTlpQyxFQUFBSyxHQUFBcTFDLFVBQUFqd0QsRUFBQSxFQUFpQ0EsRUFBQXE5QyxFQUFBejVDLE9BQVc1RCxJQUFBLFFBQUEwRSxFQUFBMjRDLEVBQUFyOUMsR0FBQStqQixFQUEvR3poQixLQUErR2tyRixlQUFBOW9GLEVBQUFpb0UsVUFBQTFzRSxFQUFBeUUsRUFBQTZsRixjQUFBbnFGLEVBQUEsRUFBd0VBLEVBQUEyakIsRUFBQW5nQixPQUFXeEQsSUFBQTZNLEVBQUEvSCxNQUFZa3BGLElBQUFycUUsRUFBQTNqQixHQUFBaXVGLEdBQUFwdUYsRUFBQUcsS0FBbUIsT0FBQTZNLEdBQVM2b0QsR0FBQWwwRCxVQUFBMnNGLGFBQUEsU0FBQXR6RSxFQUFBSyxFQUFBamIsR0FBMkMsUUFBQTRNLEtBQUFzTixFQUFBalksS0FBQStxRixnQkFBQS94RSxFQUFBamIsRUFBQTRhLEVBQUEsR0FBQUwsRUFBQSxFQUF3REEsRUFBQUwsRUFBQTNXLE9BQVdnWCxJQUFBLFFBQUF5aUMsRUFBQTlpQyxFQUFBSyxHQUFBcTFDLFVBQUFqd0QsRUFBQSxFQUFpQ0EsRUFBQXE5QyxFQUFBejVDLE9BQVc1RCxJQUFBLFFBQUEwRSxFQUFBMjRDLEVBQUFyOUMsR0FBQStqQixFQUEvR3poQixLQUErR2tyRixlQUFBOW9GLEVBQUFpb0UsVUFBQTFzRSxFQUFBeUUsRUFBQThsRixhQUFBcHFGLEVBQUEsRUFBdUVBLEVBQUEyakIsRUFBQW5nQixPQUFXeEQsSUFBQSxRQUFBcUIsRUFBQXNpQixFQUFBM2pCLEdBQUFLLEVBQUFSLEVBQUFHLEdBQUEwQixFQUFBLEVBQThCQSxFQUFBckIsRUFBQW1ELE9BQVc5QixJQUFBLENBQUssSUFBQWlWLEVBQUF0VyxFQUFBcUIsR0FBV21MLEVBQUEvSCxNQUFRa3BGLEtBQUEzc0YsR0FBQWluQixPQUFBM1IsRUFBQXNnRCxZQUFBZzNCLEdBQUF0M0UsRUFBQTB6RSxXQUE2QyxPQUFBeDlFLEdBQVM2b0QsR0FBQWwwRCxVQUFBNHNGLFVBQUEsU0FBQXZ6RSxFQUFBSyxFQUFBamIsRUFBQUMsR0FBMEMsSUFBQTJNLEVBQUEzSyxLQUFBK3FGLGdCQUFBaHRGLEVBQUFDLEVBQUEyYSxFQUFBLFNBQUFWLEVBQUF5N0MsR0FBQS9vRCxFQUFBLEdBQW9EZ3BELFlBQUEsRUFBQTBXLFVBQXdCemQsT0FBQSxFQUFBQyxXQUFtQms3QixnQkFBaUJqN0IsR0FBQUMsT0FBQSxJQUFBOTBDLEVBQUFveUQsU0FBQXpkLE9BQUEsb0RBQUEzMEMsRUFBQW95RCxTQUFBemQsUUFBdUcsSUFBQXQwQyxFQUFBVSxFQUFBOHlFLElBQUEvd0MsRUFBQS82QyxLQUFBdXFGLFVBQUF0eUUsRUFBQW95RCxTQUFBeGQsT0FBQXYwQyxHQUFrRHlpQyxFQUFBLElBQUFBLEdBQUEsRUFBQUEsRUFBQTlpQyxFQUFBb3lELFNBQUF4ZCxPQUFBdHJELE9BQUF3NUMsRUFBQSxFQUFBemlDLEdBQUFMLEVBQUE4dkUsV0FBQXhtRixPQUFBdzVDLEVBQUEsTUFBQTlpQyxFQUFBOHZFLFdBQUFodEMsR0FBQS9oQyxFQUFBK3lFLElBQThGdjRCLEdBQUFsMEQsVUFBQTZzRixhQUFBLFNBQUF4ekUsRUFBQUssRUFBQWpiLEVBQUFDLEdBQTZDLElBQUEyTSxFQUFBM0ssS0FBQStxRixnQkFBQWh0RixFQUFBQyxFQUFBMmEsRUFBQSxTQUFBVixFQUFBeTdDLEdBQUEvb0QsRUFBQSxHQUFvRGdwRCxZQUFBLEVBQUEwVyxVQUF3QnpkLE9BQUEsRUFBQUMsV0FBbUJvN0IsbUJBQW9CbjdCLEdBQUFDLE9BQUEsSUFBQTkwQyxFQUFBb3lELFNBQUF6ZCxPQUFBLG9EQUFBMzBDLEVBQUFveUQsU0FBQXpkLFFBQXVHLElBQUF0MEMsRUFBQVUsRUFBQTh5RSxJQUFBL3dDLEVBQUEvNkMsS0FBQXVxRixVQUFBdHlFLEVBQUFveUQsU0FBQXhkLE9BQUF2MEMsR0FBa0R5aUMsRUFBQSxJQUFBQSxHQUFBLEVBQUFBLEVBQUE5aUMsRUFBQW95RCxTQUFBeGQsT0FBQXRyRCxPQUFBdzVDLEVBQUEsRUFBQXppQyxHQUFBTCxFQUFBZ3dFLGNBQUExbUYsT0FBQXc1QyxFQUFBLE1BQUE5aUMsRUFBQWd3RSxjQUFBbHRDLEdBQUEvaEMsRUFBQSt5RSxJQUFvR3Y0QixHQUFBbDBELFVBQUE4c0YsWUFBQSxTQUFBenpFLEVBQUFLLEVBQUFqYixFQUFBQyxHQUE0QyxJQUFBMk0sRUFBQTNLLEtBQUErcUYsZ0JBQUFodEYsRUFBQUMsRUFBQTJhLEVBQUEsU0FBQVYsRUFBQXROLEVBQUFnakQsVUFBQSxHQUEyRDExQyxPQUFPMDdDLFlBQUEsRUFBQTBXLFVBQXdCemQsT0FBQSxFQUFBQyxXQUFtQnE3QixpQkFBaUJ2OUUsRUFBQWdqRCxVQUFBLEdBQUExMUMsR0FBQTYwQyxHQUFBQyxPQUFBLElBQUE5MEMsRUFBQW95RCxTQUFBemQsT0FBQSxvREFBQTMwQyxFQUFBb3lELFNBQUF6ZCxRQUEwSCxJQUFBdDBDLEVBQUFVLEVBQUE4eUUsSUFBQSxHQUFBL3dDLEVBQUEvaEMsRUFBQTh5RSxJQUFBcGtGLE1BQUEsR0FBQWhLLEdBQW1DeXFGLFNBQUFudkUsRUFBQSt5RSxHQUFBaDNCLFdBQUFoYSxHQUEyQjM0QyxFQUFBcEMsS0FBQXVxRixVQUFBdHlFLEVBQUFveUQsU0FBQXhkLE9BQUF2MEMsR0FBdUMsR0FBQWxXLEdBQUEsR0FBUyxRQUFBcWYsRUFBQXhKLEVBQUFpd0UsYUFBQTlsRixHQUFBekUsRUFBQSxFQUFnQ0EsRUFBQThqQixFQUFBbmdCLE9BQVczRCxJQUFBLEdBQUE4MUQsR0FBQWh5QyxFQUFBOWpCLEdBQUFvM0QsV0FBQWhhLEdBQUEsT0FBb0N0NUIsRUFBQTdlLEtBQUFsRixRQUFVMEUsR0FBQSxFQUFBQSxFQUFBNlYsRUFBQW95RCxTQUFBeGQsT0FBQXRyRCxPQUFBYSxFQUFBLEVBQUFrVyxHQUFBTCxFQUFBaXdFLGFBQUEzbUYsT0FBQWEsRUFBQSxHQUFBMUUsS0FBMkU4MUQsR0FBQWwwRCxVQUFBK3NGLFdBQUEsU0FBQTF6RSxFQUFBSyxFQUFBamIsR0FBeUMsWUFBQWlHLEtBQUEyVSxHQUFBLE9BQUEzWSxLQUFBNnJGLFVBQUFsekUsRUFBQUssRUFBQWpiLEdBQWlELE9BQUE0YSxHQUFVLDZCQUFBM1ksS0FBQTZyRixVQUFBbHpFLEVBQUFLLEVBQUFqYixHQUFBcW9CLE9BQUFwbUIsS0FBQWdzRixjQUFBcnpFLEVBQUFLLEVBQUFqYixJQUFxRix3Q0FBQWlDLEtBQUFpc0YsYUFBQXR6RSxFQUFBSyxFQUFBamIsS0FBa0V5MUQsR0FBQWwwRCxVQUFBNkksSUFBQSxTQUFBd1EsRUFBQUssRUFBQWpiLEVBQUFDLEdBQW9DLFlBQUFnRyxLQUFBMlUsR0FBQSxPQUFBM1ksS0FBQWtzRixVQUFBdnpFLEVBQUFLLEVBQUFqYixFQUFBQyxHQUFtRCxPQUFBMmEsR0FBVSw2Q0FBQUssRUFBQSt5RSxHQUFBL3JGLEtBQUFrc0YsVUFBQXZ6RSxFQUFBSyxFQUFBamIsRUFBQUMsR0FBQWdDLEtBQUFtc0YsYUFBQXh6RSxFQUFBSyxFQUFBamIsRUFBQUMsR0FBcUcsd0NBQUFnQyxLQUFBb3NGLFlBQUF6ekUsRUFBQUssRUFBQWpiLEVBQUFDLEtBQW9FLElBQUFzdUYsR0FBQUMsR0FBQUMsR0FBQUMsR0FBQXoyQixJQUFvQkgsUUFBQUosR0FBQTJKLE1BRnB6aUIsU0FBQXptRCxFQUFBSyxFQUFBamIsRUFBQUMsR0FBcUIsUUFBQTJNLEVBQUEsSUFBQTR5RCxHQUFBQyxTQUFBeC9ELEdBQUFpYSxFQUFBLEVBQWlDQSxFQUFBbGEsRUFBQXVELE9BQUEsRUFBYTJXLEdBQUEsR0FBTSxJQUFBSyxFQUFBdmEsRUFBQWthLEdBQVdLLElBQUF2YSxFQUFBa2EsRUFBQSxHQUFBdE4sRUFBQS9ILEtBQUFxVixFQUFBc2xELEdBQUF3UCxlQUFBL3VFLEVBQUFpYSxFQUFBZzhDLEdBQUF0N0MsRUFBQUssRUFBQVYsRUFBQXM5QyxLQUFBanJELEVBQUEvSCxLQUFBcVYsRUFBQXNsRCxHQUFBdVAsWUFBQTl1RSxFQUFBaWEsSUFBc0YsT0FBQXROLElBRThwaUIraEYsR0FBQSxTQUFBL3pFLEdBQWdCLElBQUFLLEVBQUFoWixLQUFBMnNGLFNBQUE1dUYsRUFBQWlDLEtBQUE0c0YsUUFBQTV1RixFQUFBZ0MsS0FBQTZzRixZQUFBbGlGLEVBQUEsRUFBMEQsT0FBQWdPLEVBQUEsSUFBQUEsS0FBQWhPLEdBQUEsR0FBQWdPLEdBQUEzYSxFQUFBRCxFQUFBNGEsRUFBQS9ULEtBQUFrb0YsTUFBQW4wRSxFQUFBSyxNQUFBTCxHQUFBNWEsR0FBQSxFQUFBQSxFQUFBNE0sRUFBQWdPLEVBQUFoTyxHQUFvRXNzRCxJQUFLcjlCLEVBQUEsRUFBQXFFLEVBQUEsRUFBQTI0QixLQUFBLElBQUE0QyxTQUFBLFNBQUE3Z0QsRUFBQUssRUFBQWpiLEVBQUFDLEdBQTRDLE9BQUFELEVBQUE0YSxFQUFBeStDLEdBQUF6K0MsRUFBQWloQixJQUFBNTdCLEVBQUFnYixFQUFBbytDLEdBQUFwK0MsRUFBQTRnQixJQUFnQ29nQyxZQUFBLFNBQUFyaEQsRUFBQUssRUFBQWpiLEVBQUFDLEdBQStCLElBQUEyTSxFQUFBc04sRUFBQUssRUFBQXlpQyxFQUFBcjlDLEVBQUEwRSxFQUFBcWYsRUFBa0IsT0FBQXpqQixPQUFBZ0MsTUFBQTJLLEVBQUEzTSxFQUFBdzdELFNBQUE3Z0QsRUFBQUssR0FBQSxNQUFBZixFQUFBamEsRUFBQXc3RCxTQUFBN2dELEVBQUE1YSxHQUFBLE1BQUFMLEVBQUFNLEVBQUF3N0QsU0FBQXhnRCxLQUFBLE1BQUE1VyxFQUFBcEUsRUFBQXc3RCxTQUFBejdELEtBQUEsTUFBQXVhLEVBQUExVCxLQUFBc1YsSUFBQXZQLEdBQUFvd0MsRUFBQW4yQyxLQUFBc1YsSUFBQWpDLEdBQUEsS0FBQXdKLEVBQUFuSixFQUFBeWlDLFFBQUFrYyxHQUFBeUMsWUFBQS9nRCxLQUFBamIsRUFBQTBFLEdBQUEsRUFBQXBFLEdBQUEsUUFBQWk1RCxHQUFBeUMsWUFBQS9nRCxLQUFBamIsRUFBQXE5QyxFQUFBMzRDLEVBQUFrVyxHQUFBbUosRUFBQXpqQixHQUFBLEtBQUEyTSxFQUFBZ08sRUFBQXkrQyxHQUFBcCtDLEVBQUFvK0MsR0FBQW4vQyxFQUFBVSxFQUFBeStDLEdBQUFyNUQsRUFBQXE1RCxHQUFBMTVELEVBQUFzYixFQUFBNGdCLEVBQUE1Z0IsRUFBQW8rQyxHQUFBaDFELEVBQUFyRSxFQUFBNjdCLEVBQUE3N0IsRUFBQXE1RCxHQUFBOStDLEVBQUExVCxLQUFBc1YsSUFBQXZQLEdBQUFvd0MsRUFBQW4yQyxLQUFBc1YsSUFBQWpDLEdBQUEsS0FBQXdKLEVBQUFuSixFQUFBeWlDLFFBQUFwaUMsRUFBQWloQixFQUFBamhCLEVBQUF5K0MsSUFBQTE1RCxFQUFBMEUsR0FBQSxRQUFBdVcsRUFBQWloQixFQUFBamhCLEVBQUF5K0MsSUFBQTE1RCxFQUFBcTlDLEVBQUEzNEMsRUFBQWtXLEdBQUFtSixLQUF1WHExQyxZQUFBdmEsT0FBQXd3QyxrQkFBQXJ6QixZQUFBLFNBQUEvZ0QsRUFBQUssRUFBQWpiLEVBQUFDLEVBQUEyTSxHQUFzRSxHQUFBM00sT0FBQWdDLEtBQUEsQ0FBZ0QsSUFBQWlZLEVBQUF0TixFQUFBcU8sRUFBQW8rQyxHQUFBcCtDLEVBQUE0Z0IsRUFBQXRoQixFQUFBM04sRUFBQXFPLEVBQUFxK0MsR0FBQXIrQyxFQUFBaWxCLEVBQUE4YyxFQUFBOWlDLEVBQUFsYSxFQUFBQyxFQUFBNDdCLEVBQUFsOEIsRUFBQTRhLEVBQUF2YSxFQUFBQyxFQUFBaWdDLEVBQWtEdGxCLEVBQUFpaEIsRUFBQW1oQixHQUFBcGlDLEVBQUFzbEIsRUFBQXZnQyxHQUFBTSxFQUFBODRELGlCQUFsR24rQyxFQUFBaWhCLEdBQUFqdkIsRUFBQXFPLEVBQUFvK0MsR0FBQXArQyxFQUFBNGdCLEdBQUE3N0IsR0FBOEg4NEQsTUFBQSxFQUFBOEMsTUFBQSxTQUFBaGhELEdBQTJCQSxFQUFBNitDLFVBQUEsR0FBY3FDLFFBQUEsU0FBQWxoRCxHQUFxQixPQUFBQSxFQUFBNitDLFVBQWtCdzFCLFFBQUEsU0FBQXIwRSxHQUFxQkEsRUFBQTYrQyxVQUFBLElBQWVOLElBQUt0OUIsRUFBQSxFQUFBcUUsRUFBQSxFQUFBMjRCLEtBQUEsSUFBQTRDLFNBQUEsU0FBQTdnRCxFQUFBSyxFQUFBamIsRUFBQUMsR0FBNEMsT0FBQUQsRUFBQTRhLEVBQUEwK0MsR0FBQTErQyxFQUFBc2xCLElBQUFqZ0MsRUFBQWdiLEVBQUFxK0MsR0FBQXIrQyxFQUFBaWxCLElBQWdDKzdCLFlBQUEsU0FBQXJoRCxFQUFBSyxFQUFBamIsRUFBQUMsR0FBK0IsSUFBQTJNLEVBQUFzTixFQUFBSyxFQUFBeWlDLEVBQUFyOUMsRUFBQTBFLEVBQUFxZixFQUFrQixPQUFBempCLE9BQUFnQyxNQUFBMkssRUFBQTNNLEVBQUF3N0QsU0FBQTdnRCxFQUFBSyxHQUFBLE1BQUFmLEVBQUFqYSxFQUFBdzdELFNBQUE3Z0QsRUFBQTVhLEdBQUEsTUFBQUwsRUFBQU0sRUFBQXc3RCxTQUFBeGdELEtBQUEsTUFBQTVXLEVBQUFwRSxFQUFBdzdELFNBQUF6N0QsS0FBQSxNQUFBdWEsRUFBQTFULEtBQUFzVixJQUFBdlAsR0FBQW93QyxFQUFBbjJDLEtBQUFzVixJQUFBakMsR0FBQSxLQUFBd0osRUFBQW5KLEVBQUF5aUMsUUFBQW1jLEdBQUF3QyxZQUFBL2dELEtBQUFqYixFQUFBMEUsR0FBQSxFQUFBcEUsR0FBQSxRQUFBazVELEdBQUF3QyxZQUFBL2dELEtBQUFqYixFQUFBcTlDLEVBQUEzNEMsRUFBQWtXLEdBQUFtSixFQUFBempCLEdBQUEsS0FBQTJNLEVBQUFnTyxFQUFBMCtDLEdBQUFyK0MsRUFBQXErQyxHQUFBcC9DLEVBQUFVLEVBQUEwK0MsR0FBQXQ1RCxFQUFBczVELEdBQUEzNUQsRUFBQXNiLEVBQUFpbEIsRUFBQWpsQixFQUFBcStDLEdBQUFqMUQsRUFBQXJFLEVBQUFrZ0MsRUFBQWxnQyxFQUFBczVELEdBQUEvK0MsRUFBQTFULEtBQUFzVixJQUFBdlAsR0FBQW93QyxFQUFBbjJDLEtBQUFzVixJQUFBakMsR0FBQSxLQUFBd0osRUFBQW5KLEVBQUF5aUMsUUFBQXBpQyxFQUFBc2xCLEVBQUF0bEIsRUFBQTArQyxJQUFBMzVELEVBQUEwRSxHQUFBLFFBQUF1VyxFQUFBc2xCLEVBQUF0bEIsRUFBQTArQyxJQUFBMzVELEVBQUFxOUMsRUFBQTM0QyxFQUFBa1csR0FBQW1KLEtBQXVYcTFDLFlBQUEsRUFBQTRDLFlBQUEsU0FBQS9nRCxFQUFBSyxFQUFBamIsRUFBQUMsRUFBQTJNLEdBQStDLEdBQUEzTSxPQUFBZ0MsS0FBQSxDQUFnRCxJQUFBaVksRUFBQXROLEVBQUFxTyxFQUFBbytDLEdBQUFwK0MsRUFBQTRnQixFQUFBdGhCLEVBQUEzTixFQUFBcU8sRUFBQXErQyxHQUFBcitDLEVBQUFpbEIsRUFBQThjLEVBQUE5aUMsRUFBQWxhLEVBQUFDLEVBQUE0N0IsRUFBQWw4QixFQUFBNGEsRUFBQXZhLEVBQUFDLEVBQUFpZ0MsRUFBa0R0bEIsRUFBQXNsQixFQUFBdmdDLEVBQUFNLEVBQUE4NEQsYUFBQW4rQyxFQUFBaWhCLEVBQUFtaEIsUUFBbEdwaUMsRUFBQXNsQixHQUFBdHpCLEVBQUFxTyxFQUFBcStDLEdBQUFyK0MsRUFBQWlsQixHQUFBbGdDLEdBQThIODRELE1BQUF0YSxPQUFBMHdDLGtCQUFBdHpCLE1BQUEsU0FBQWhoRCxHQUFrREEsRUFBQTgrQyxVQUFBLEdBQWNvQyxRQUFBLFNBQUFsaEQsR0FBcUIsT0FBQUEsRUFBQTgrQyxVQUFrQnUxQixRQUFBLFNBQUFyMEUsR0FBcUJBLEVBQUE4K0MsVUFBQSxJQUFnQnI1RCxPQUFBMjRELE9BQUFFLElBQUE3NEQsT0FBQTI0RCxPQUFBRyxJQUFBUCxHQUFBcjNELFVBQUFrNkQsU0FBQSxTQUFBN2dELEVBQUFLLEVBQUFqYixFQUFBQyxHQUE0RSxPQUFBZ0MsS0FBQTQ1QixFQUFBcTlCLEdBQUF1QyxTQUFBN2dELEVBQUFLLEVBQUFqYixFQUFBQyxHQUFBZ0MsS0FBQWkrQixFQUFBaTVCLEdBQUFzQyxTQUFBN2dELEVBQUFLLEVBQUFqYixFQUFBQyxJQUErRDI0RCxHQUFBcjNELFVBQUEwNkQsWUFBQSxTQUFBcmhELEVBQUFLLEVBQUFqYixFQUFBQyxHQUE0QyxJQUFBMk0sRUFBQXNOLEVBQUFLLEVBQUF5aUMsRUFBQXI5QyxFQUFBMEUsRUFBQXFmLEVBQWtCbkosRUFBQXRhLEVBQUF3N0QsU0FBQTdnRCxFQUFBSyxHQUFBLE1BQUEraEMsRUFBQS84QyxFQUFBdzdELFNBQUE3Z0QsRUFBQTVhLEdBQUEsTUFBQTRNLEVBQUEzTSxFQUFBdzdELFNBQUF4Z0QsS0FBQSxNQUFBZixFQUFBamEsRUFBQXc3RCxTQUFBejdELEtBQUEsTUFBQUwsRUFBQWtILEtBQUFzVixJQUFBNUIsR0FBQWxXLEVBQUF3QyxLQUFBc1YsSUFBQTZnQyxHQUFBLEtBQUF0NUIsRUFBQS9qQixFQUFBMEUsR0FBMExwQyxLQUFBMDVELFlBQUEvZ0QsS0FBQWhPLEVBQUF2SSxFQUFBNlYsRUFBQXZhLEdBQUErakIsRUFBQXpqQixHQUFBLEdBQTFMZ0MsS0FBQTA1RCxZQUFBL2dELEtBQUFoTyxFQUFBc04sR0FBQSxFQUFBamEsR0FBQSxJQUFpTzI0RCxHQUFBcjNELFVBQUFvNkQsWUFBQSxTQUFBL2dELEVBQUFLLEVBQUFqYixFQUFBQyxFQUFBMk0sR0FBOEMzTSxLQUFBZ0MsS0FBVSxJQUFBaVksRUFBQXROLEVBQUFxTyxFQUFBbytDLEdBQUFwK0MsRUFBQTRnQixFQUFBdGhCLEVBQUEzTixFQUFBcU8sRUFBQXErQyxHQUFBcitDLEVBQUFpbEIsRUFBQThjLEVBQUE5aUMsRUFBQWxhLEVBQUFDLEVBQUE0N0IsRUFBQWw4QixFQUFBNGEsRUFBQXZhLEVBQUFDLEVBQUFpZ0MsRUFBQTc3QixFQUFBcEUsRUFBQTg0RCxZQUFBcjFDLEVBQUF6aEIsS0FBQTYyRCxNQUFBbDVELEVBQUFnYixFQUFBaWhCLEVBQUE5N0IsRUFBQTZhLEVBQUFzbEIsRUFBMkZ0bEIsRUFBQWloQixHQUFBblksRUFBQTlqQixFQUFBeUUsRUFBQTI0QyxFQUFBcjlDLEVBQUFJLElBQUEyakIsRUFBQXJmLEdBQUF1VyxFQUFBc2xCLEVBQUF4YyxHQUFBOUksRUFBQWloQixFQUFBajhCLEdBQUFHLEdBQXdDNjRELEdBQUFyM0QsVUFBQXE2RCxNQUFBLFNBQUFoaEQsR0FBZ0NBLEVBQUE2K0MsVUFBQSxFQUFBNytDLEVBQUE4K0MsVUFBQSxHQUE0Qk4sR0FBQTczRCxVQUFBeTZELFlBQUEsU0FBQXBoRCxHQUFzQyxRQUFBSyxFQUFBaFosS0FBQXUzRCxvQkFBa0M1K0MsRUFBQWtoRCxRQUFBN2dELFFBQUFoWixNQUF3QmdaLElBQUF1K0MsbUJBQXdCLE9BQUF2K0MsR0FBU20rQyxHQUFBNzNELFVBQUF3NkQsWUFBQSxTQUFBbmhELEdBQXNDLFFBQUFLLEVBQUFoWixLQUFBczNELG9CQUFrQzMrQyxFQUFBa2hELFFBQUE3Z0QsUUFBQWhaLE1BQXdCZ1osSUFBQXMrQyxtQkFBd0IsT0FBQXQrQyxHQUFVLElBQUF5Z0QsR0FBQXI3RCxPQUFBMjRELE9BQUEsSUFBQUksR0FBQSxNQUFBKzFCLElBQXNDMXlCLFFBQUEsTUFBQUssVUFBQSxFQUFBQyxXQUFBLEtBQUFwdEQsS0FBQSxFQUFBMnRELE9BQUEsRUFBQTh4QixVQUFBLEdBQXVFcjNCLEdBQUF4MkQsVUFBQSs1QixLQUFBLFNBQUFyZ0IsRUFBQWpiLEdBQWdDLG9CQUFBQSxFQUFBLFVBQUFrQyxNQUFBLCtCQUFxRSxLQUFBRCxLQUFBbTJELFlBQUEsSUFBMEIsSUFBQW40RCxFQUFBZ0MsS0FBQWt1RCxLQUFBdmpELEVBQUEzSyxLQUFBazJELFdBQWtDLElBQUF2ckQsS0FBQWl3RCxPQUFBNzhELEVBQUEsQ0FBbUIsSUFBQWthLEVBQUFqWSxLQUFBaTJELFdBQXNCLElBQUFoK0MsRUFBQSxDQUFPMC9DLEdBQUFyNEQsVUFBQTR0RixJQUFBajFFLEVBQUFqWSxLQUFBaTJELFdBQUEsSUFBQTBCLEdBQUEsT0FBQTM1RCxFQUFBeXlELE9BQUE2TyxPQUFBOHRCLFNBQUFuMUUsRUFBQWkyQyxLQUFBbHdELEVBQUEyYSxFQUFBbWdELFFBQUF2b0QsUUFBQW5MLElBQUEsbUJBQUE2UyxFQUFBMEssTUFBQSxHQUF1SSxJQUFJNHBFLEdBQUF0MEUsR0FBTSxNQUFBVSxHQUFTLE9BQUFwSSxRQUFBbkwsSUFBQSx5QkFBQXVULFFBQUEzWSxLQUFBbTJELFlBQUEsSUFBeUV3QixHQUFBcjRELFVBQUEyWSxHQUFBdE4sRUFBQTNLLEtBQUFrMkQsV0FBQSxJQUFBeUIsR0FBQSxPQUFBMzVELEVBQUF5eUQsT0FBQTZQLE9BQUExRixLQUFBNzhELEVBQXVFLElBQUF1YSxFQUFBdGEsRUFBQXl5RCxPQUFBOEosSUFBbUIsR0FBQWppRCxFQUFBLFFBQUF5aUMsRUFBQXB3QyxFQUFBNHZELElBQUEsSUFBQXoyRCxNQUFBd1UsRUFBQWhYLFFBQUE1RCxFQUFBSyxFQUFBQyxFQUFBMDlELFdBQUF0NUQsRUFBQSxFQUE4REEsRUFBQWtXLEVBQUFoWCxPQUFXYyxJQUFBMjRDLEVBQUEzNEMsR0FBQWtXLEVBQUFsVyxHQUFBMUUsT0FBZ0JpTixFQUFBNHZELE9BQWM1aEQsRUFBQW1nRCxRQUFBdm9ELFFBQUFuTCxJQUFBLG1CQUFBdUYsRUFBQWdZLE1BQUEsR0FBb0QsSUFBSTRwRSxHQUFBNWhGLEdBQU0sTUFBQWdPLEdBQVMzWSxLQUFBbTJELFlBQUEsR0FBQTVsRCxRQUFBbkwsSUFBQSx5QkFBQXVULEdBQUEzWSxLQUFBbTJELFlBQUEsR0FBZ0YsS0FBQW4yRCxLQUFBbTJELFlBQUEsT0FBNkIsT0FBQXEyQixHQUFBeHpFLEVBQUFyTyxHQUFlLE1BQUFnTyxHQUFTLE9BQUEzWSxLQUFBbTJELFlBQUEsSUFBQTVsRCxRQUFBbkwsSUFBQSxpQkFBQXVULEdBQUFwSSxRQUFBbkwsSUFBQSxtREFBQXBGLEtBQUFtMkQsWUFBQSxNQUFpSnEyQixHQUFBLFNBQUF4ekUsRUFBQWpiLEdBQWtCLElBQUFDLEVBQUEyTSxFQUFBc04sRUFBQUssRUFBQXZhLEVBQUE2OEQsS0FBQTc4RCxFQUFBbXdELEtBQUF3TixXQUFBM2dCLEVBQUF6aUMsRUFBQTVhLEVBQUFzYixFQUFBKzdDLFdBQXdELEdBQUE0QyxHQUFBcjRELFVBQUF2QixFQUFBTCxFQUFBLENBQXFCLElBQUEwRSxFQUFBckUsRUFBQW13RCxLQUFhdmpELEtBQUEzTSxLQUFVLFFBQUF5akIsRUFBQSxFQUFZQSxFQUFBL2pCLEVBQUE0RCxPQUFXbWdCLElBQUEsQ0FBSyxJQUFBOWpCLEVBQUFELEVBQUErakIsR0FBQTNqQixFQUFBc0UsRUFBQXlxRCxPQUFBdHVELElBQUFaLEVBQUFzd0QsWUFBd0NoMkMsRUFBQSxJQUFBMC9DLEdBQUEsT0FBQTc1RCxFQUFBNDJELGNBQUEvN0MsRUFBQW1nRCxRQUFBdm9ELFFBQUFuTCxJQUFBLGdCQUFBcWMsRUFBQSxPQUFBeEosRUFBQTBLLE1BQUEsR0FBQThwRSxHQUFBM3VGLEVBQUFtYSxFQUFBSyxFQUFBeWlDLEdBQXNHLFFBQUE1N0MsRUFBQXlGLEtBQUFvUyxNQUFBclosRUFBQStaLEdBQUFZLEdBQUFuYSxFQUFBeUcsS0FBQW9TLE1BQUFyWixFQUFBeTNELEdBQUFyYSxHQUFBdjdDLEVBQUF5WSxFQUFBeWdELE1BQUFqa0QsRUFBQXdELEVBQUFraUQsU0FBQTM3RCxFQUFBLEVBQTZFQSxFQUFBZ0IsRUFBQThCLE9BQVc5QyxJQUFBLENBQUssSUFBQWlCLEVBQUFELEVBQUFoQixHQUFXaUIsRUFBQSszRCxTQUFBLzNELEVBQUFnNEQsVUFBQSxFQUFBaDRELEVBQUEyM0QsR0FBQTMzRCxFQUFBbTZCLEVBQUFuNkIsRUFBQW02QixFQUFBejZCLEVBQUFNLEVBQUE0M0QsR0FBQTUzRCxFQUFBdytCLEVBQUF4K0IsRUFBQXcrQixFQUFBOS9CLEVBQXVELElBQUFTLEVBQUErTCxFQUFBckosT0FBZXFKLEVBQUEvSCxLQUFBMEUsTUFBQXFELEVBQUFuTCxHQUFrQixRQUFBODhDLEVBQUEsRUFBWUEsRUFBQTduQyxFQUFBblQsT0FBV2c3QyxJQUFBdCtDLEVBQUE0RSxLQUFBNlIsRUFBQTZuQyxHQUFBMTlDLEdBQW1Cb2EsRUFBQTA3QyxlQUFBejhDLEVBQUFvMUUsa0JBQUFwMUUsRUFBQSxJQUFBMC9DLEdBQUEsT0FBQTMrQyxFQUFBMDdDLGVBQUFnRSxNQUFBemdELEVBQUFzaEQsR0FBQXRoRCxFQUFBa2hELEdBQUFsaEQsRUFBQWloRCxHQUFBdnVELEVBQUFzTixFQUFBa2lELFNBQUFuOEQsRUFBQTJNLEVBQUEvSCxLQUFBLElBQUF1MEQsR0FBQSxTQUFBQSxHQUFBdnlELEtBQUFvUyxNQUFBZ0MsRUFBQW00QyxhQUFBNzRDLEdBQUEsSUFBQUssRUFBQW1nRCxRQUFBdm9ELFFBQUFuTCxJQUFBLHdCQUFBNlMsRUFBQTBLLE1BQUEsR0FBQTRwRSxHQUFBdDBFLEdBQUF0TixFQUFBckosUUFBQSxRQUFpUDJXLEVBQUEsSUFBQTAvQyxHQUFBLE9BQUEzK0MsRUFBQTA3QyxjQUFBLzdDLEVBQUFtZ0QsUUFBQXZvRCxRQUFBbkwsSUFBQSxvQkFBQTZTLEVBQUEwSyxNQUFBLEdBQUE4cEUsR0FBQXp6RSxFQUFBZixFQUFBSyxFQUFBeWlDLEdBQUFwd0MsRUFBQXNOLEVBQUF5Z0QsTUFBZ0gsT0FBQS90RCxHQUFTOGhGLEdBQUEsU0FBQXp6RSxFQUFBamIsRUFBQUMsRUFBQTJNLEdBQXNCLFFBQUFzTixFQUFBSyxFQUFBVSxFQUFBNjdDLFdBQUE5WixFQUFBemlDLEVBQUFoWCxPQUFBNUQsRUFBQUssRUFBQTI2RCxNQUFBMzZELEVBQUF3N0QsR0FBQXg3RCxFQUFBbzdELEdBQUFwN0QsRUFBQW03RCxNQUFBOTJELEVBQUFyRSxFQUFBbzhELFlBQUExNEMsRUFBQSxFQUFvRkEsRUFBQXM1QixFQUFJdDVCLElBQUF4SixFQUFBSyxFQUFBbUosR0FBQS9qQixFQUFBK2pCLEdBQUEsSUFBQTAxQyxHQUFBbC9DLEVBQUEyaEIsRUFBQTU3QixFQUFBaWEsRUFBQWdtQixFQUFBdHpCLEVBQUFzTixFQUFBMjhDLG1CQUFBMzhDLEVBQUEwOEMsU0FBbUUsUUFBQWgzRCxFQUFBRyxFQUFBcUIsRUFBQSxFQUFnQkEsRUFBQTQ3QyxFQUFJNTdDLElBQUE4WSxFQUFBdmEsRUFBQXlCLEdBQUF4QixNQUFBc2EsRUFBQTdWLEVBQUFRLEtBQUF6RCxJQUFBOFksRUFBQTI4QyxvQkFBQTM4QyxFQUFBcy9DLG1CQUFBNTVELElBQUEyNUQsbUJBQUFyL0MsRUFBQXRhLE9BQUEsSUFBQUcsRUFBQUosRUFBQXlCLEVBQUEsR0FBQThZLEVBQUFzL0MsbUJBQUF6NUQsSUFBQXc1RCxtQkFBQXIvQyxHQUFxSyxJQUFBbGEsRUFBQXN2RixlQUFBLENBQXNCLEdBQUExMEUsRUFBQW1nRCxNQUFBLENBQVl2b0QsUUFBQW5MLElBQUEsbUJBQUFySCxFQUFBODVELE9BQXdDLFFBQUExNUQsRUFBQSxFQUFZQSxFQUFBNDhDLEVBQUk1OEMsSUFBQW9TLFFBQUFuTCxJQUFBakgsRUFBQVQsRUFBQVMsR0FBQXk3QixFQUFBbDhCLEVBQUFTLEdBQUE4L0IsR0FBaUMsR0FBQXZnQyxFQUFBa0YsS0FBQSxJQUFBdTBELEdBQUEsU0FBQUEsR0FBQXZ5RCxLQUFBb1MsTUFBQWdDLEVBQUFtNEMsYUFBQW56RCxHQUFBLElBQUF1dUYsR0FBQXh1RixHQUFBTCxFQUFBNEQsUUFBQSxFQUFBcVgsRUFBQW1nRCxNQUFBLENBQXlGdm9ELFFBQUFuTCxJQUFBLGlCQUFBckgsRUFBQTg1RCxPQUFzQyxRQUFBcjRELEVBQUEsRUFBWUEsRUFBQXU3QyxFQUFJdjdDLElBQUErUSxRQUFBbkwsSUFBQTVGLEVBQUE5QixFQUFBOEIsR0FBQW82QixFQUFBbDhCLEVBQUE4QixHQUFBeStCLE1BQW1Dc3VELEdBQUEsU0FBQXZ6RSxHQUFnQixJQUFBamIsRUFBQWliLEVBQUE4K0MsS0FBYSxHQUFBLzVELEVBQUEsQ0FBTSxJQUFBQyxFQUFBMk0sRUFBQTVNLEVBQUF1RCxPQUFpQixJQUFBMFgsRUFBQTQvQyxHQUFBLEVBQVc1L0MsRUFBQTQvQyxHQUFBanVELEVBQU9xTyxFQUFBNC9DLEtBQUEsQ0FBUSxHQUFBamdELEVBQUFtZ0QsT0FBQTkvQyxFQUFBMkosU0FBQTNrQixFQUFBc3VGLEdBQUF2dUYsRUFBQWliLEVBQUE0L0MsTUFBQSxVQUFBMzRELE1BQUEsMEJBQUFzOEMsT0FBQXgrQyxFQUFBaWIsRUFBQTQvQyxLQUFBMTRELFNBQUEsS0FBOEdsQyxFQUFBZ2IsTUFBT3N6RSxJQUFBenpCLEdBQUEzNUQsVUFBQSxFQUFBZzRELElBQUEyQixHQUFBMzVELFVBQUEsRUFBQSszRCxJQUFBOEIsR0FBQTc1RCxVQUFBLEVBQUFnNEQsSUFBQTZCLEdBQUE3NUQsVUFBQSxFQUFBKzNELElBQUErQixHQUFBOTVELFVBQUEsRUFBQWc0RCxJQUFBOEIsR0FBQTk1RCxVQUFBLEVBQUErM0QsSUFBQWdDLEdBQUEvNUQsVUFBQSxLQUFBKzVELEdBQUEvNUQsVUFBQSxLQUFBazZELEdBQUFsNkQsVUFBQSxLQUFBazZELEdBQUFsNkQsVUFBQSxLQUZ4Z3BCLFNBQUE4WixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBNU0sRUFBQSt5RCxNQUFrQ240QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxVQUFBM2tCLEVBQUEyTSxHQUFBcU8sRUFBQXMvQyxHQUFBdC9DLEVBQUF1L0MsSUFBQXZCLEdBQUFyc0QsRUFBQTNNLElBQThELFNBQUFnYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBNU0sRUFBQSt5RCxNQUFrQ240QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxVQUFBM2tCLEVBQUEyTSxHQUFBcU8sRUFBQXEvQyxHQUFBckIsR0FBQXJzRCxFQUFBM00sSUFBd0QsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQWdiLEVBQUFzL0MsR0FBcUIzL0MsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsU0FBQTVrQixFQUFBNkUsS0FBQSxNQUFBNUUsRUFBQTQ3QixHQUFBNzdCLEVBQUE2RSxLQUFBLE1BQUE1RSxFQUFBaWdDLElBQXlFLFNBQUFqbEIsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBZ2IsRUFBQXEvQyxHQUFxQjEvQyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxTQUFBNWtCLEVBQUE2RSxLQUFBLE1BQUE1RSxFQUFBNDdCLEdBQUE3N0IsRUFBQTZFLEtBQUEsTUFBQTVFLEVBQUFpZ0MsSUFBeUUsU0FBQWpsQixHQUFlQSxFQUFBcS9DLEdBQUFyL0MsRUFBQXMvQyxHQUFBMy9DLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLGFBQWtELFNBQUEzSixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBNU0sRUFBQSt5RCxNQUFBNzRDLEVBQUFsYSxFQUFBK3lELE1BQUF4NEMsRUFBQXZhLEVBQUEreUQsTUFBQS9WLEVBQUFoOUMsRUFBQSt5RCxNQUFBcHpELEVBQUFzYixFQUFBdWdELEdBQUFuM0QsRUFBQTRXLEVBQUFtZ0QsR0FBQTEzQyxFQUFBL2pCLEVBQUFNLEdBQUFMLEVBQUFELEVBQUFpTixHQUFBN00sRUFBQXNFLEVBQUE2VixHQUFBOVksRUFBQWlELEVBQUFrVyxHQUFBbmEsRUFBQTZhLEVBQUFrZ0QsR0FBQW5lLEdBQW9IcGlDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQSxZQUFBcEgsRUFBQTJNLEVBQUFzTixFQUFBSyxFQUFBeWlDLEdBQTRDLElBQUF2N0MsRUFBQWlpQixFQUFBbVksRUFBQW5sQixFQUFBZ04sRUFBQXdjLEVBQUF6L0IsRUFBQWIsRUFBQWk4QixFQUFBbjZCLEVBQUE5QixFQUFBc2dDLEVBQUFyL0IsRUFBQWQsRUFBQTg3QixFQUFBMGlCLEVBQUF4K0MsRUFBQW1nQyxFQUFBdVgsRUFBQXIyQyxFQUFBeTZCLEVBQUE2aUIsRUFBQXQ5QyxFQUFBOCtCLEVBQUFyRSxHQUFBcDZCLEVBQUFoQixJQUFBODlDLEVBQUFHLElBQUFob0MsRUFBQWhWLElBQUFiLEVBQUE0MkMsR0FBQXZYLEVBQUF6K0IsRUFBQUMsRUFBQWdWLEVBQUFqVyxFQUFBMC9CLEVBQUF0L0IsRUFBQTY5QyxFQUFBSCxFQUFBOUcsRUFBa0dyM0MsRUFBQXk3QixHQUFBcUUsR0FBQXIvQixFQUFBNDJDLEdBQUF0WCxHQUFBMStCLEVBQUFoQixJQUFBbzdCLEVBQUF6N0IsRUFBQTgvQixNQUFBcWUsRUFBQUcsR0FBQXZlLEdBQUF6cEIsRUFBQWhWLElBQUFtNkIsR0FBZ0QsU0FBQTVnQixHQUFlQSxFQUFBay9DLElBQUFsL0MsRUFBQTYrQyxNQUFBL0csTUFBQW40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxTQUFBM0osRUFBQWsvQyxNQUFnRSxTQUFBbC9DLEdBQWVBLEVBQUFtL0MsSUFBQW4vQyxFQUFBNitDLE1BQUEvRyxNQUFBbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFNBQUEzSixFQUFBbS9DLE1BQWdFLFNBQUFuL0MsR0FBZUEsRUFBQW8vQyxJQUFBcC9DLEVBQUE2K0MsTUFBQS9HLE1BQUFuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsU0FBQTNKLEVBQUFvL0MsTUFBZ0UsU0FBQXAvQyxHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBL0csTUFBb0IsT0FBQW40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxTQUFBNWtCLEdBQUFpYixFQUFBKytDLElBQUFoNkQsS0FBMEQsT0FBQWliLEVBQUF5L0MsT0FBQUQsR0FBQXgvQyxLQUFBdWdELEdBQUF2Z0QsRUFBQXkvQyxNQUFtQyxNQUFNLE9BQUF6L0MsRUFBQXVnRCxHQUFBdmdELEVBQUEwL0MsTUFBb0IsTUFBTSxrQkFBQXo0RCxNQUFBLDBCQUFpRCxTQUFBK1ksR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQS9HLE1BQW9CLE9BQUFuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsU0FBQTVrQixHQUFBaWIsRUFBQWcvQyxJQUFBajZELEtBQTBELE9BQUFpYixFQUFBeS9DLE9BQUFELEdBQUF4L0MsS0FBQW1nRCxHQUFBbmdELEVBQUF5L0MsTUFBbUMsTUFBTSxPQUFBei9DLEVBQUFtZ0QsR0FBQW5nRCxFQUFBMC9DLE1BQW9CLE1BQU0sa0JBQUF6NEQsTUFBQSwwQkFBaUQsU0FBQStZLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUEvRyxNQUFvQixPQUFBbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFNBQUE1a0IsR0FBQWliLEVBQUFpL0MsSUFBQWw2RCxLQUEwRCxPQUFBaWIsRUFBQXkvQyxPQUFBRCxHQUFBeC9DLEtBQUFrZ0QsR0FBQWxnRCxFQUFBeS9DLE1BQW1DLE1BQU0sT0FBQXovQyxFQUFBa2dELEdBQUFsZ0QsRUFBQTAvQyxNQUFvQixNQUFNLGtCQUFBejRELE1BQUEsMEJBQWlELFNBQUErWSxHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBL0csTUFBb0IsT0FBQW40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxTQUFBNWtCLEdBQUFpYixFQUFBKytDLElBQUEvK0MsRUFBQWcvQyxJQUFBaC9DLEVBQUFpL0MsSUFBQWw2RCxLQUFzRSxPQUFBaWIsRUFBQXkvQyxPQUFBRCxHQUFBeC9DLEtBQUF1Z0QsR0FBQXZnRCxFQUFBbWdELEdBQUFuZ0QsRUFBQWtnRCxHQUFBbGdELEVBQUF5L0MsTUFBNkMsTUFBTSxPQUFBei9DLEVBQUF1Z0QsR0FBQXZnRCxFQUFBbWdELEdBQUFuZ0QsRUFBQWtnRCxHQUFBbGdELEVBQUEwL0MsTUFBOEIsTUFBTSxrQkFBQXo0RCxNQUFBLDBCQUFpRCxTQUFBK1ksR0FBZUEsRUFBQXRMLEtBQUFzTCxFQUFBNitDLE1BQUEvRyxNQUFBbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFVBQUEzSixFQUFBdEwsT0FBbUUsU0FBQXNMLEdBQWVMLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFNBQUEzSixFQUFBaEMsTUFBQXEvQyxJQUFnRCxTQUFBcjlDLEdBQWVMLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFVBQUEzSixFQUFBaEMsTUFBQXcvQyxJQUFpRCxTQUFBeDlDLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUEvRyxNQUFvQm40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxRQUFBNWtCLEdBQUFpYixFQUFBcWlELE9BQUF0OUQsRUFBQSxJQUFxRCxTQUFBaWIsR0FBZUwsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsVUFBQWcyQyxHQUFBMy9DLEdBQUEsSUFBK0MsU0FBQUEsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQS9HLE1BQW9CbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFNBQUE1a0IsR0FBQWliLEVBQUE0L0MsSUFBQTc2RCxFQUFBLEdBQWtELFNBQUFpYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBL0csTUFBb0JuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsV0FBQTVrQixHQUFBaWIsRUFBQXdoRCxRQUFBejhELEVBQUEsU0FFb3FrQixTQUYzbWtCLFNBQUFpYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFjbC9DLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFNBQUE1a0IsRUFBQTZFLEtBQUE3RSxJQUFBdUQsT0FBQSxLQUU4a2tCKzNELEdBRmo5akIsU0FBQXJnRCxHQUFlTCxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxXQUFBM0osRUFBQTYrQyxNQUFBdjJELE9BQUEsR0FBd0QsU0FBQTBYLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFVBQUE1a0IsRUFBQTZFLEtBQUE1RSxHQUFBRCxFQUFBNkUsS0FBQStILElBQTBELFNBQUFxTyxHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFjbC9DLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFdBQUE1a0IsRUFBQTZFLEtBQUE3RSxFQUFBdUQsU0FBdWUsU0FBQTBYLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUF3Qm40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxXQUFBM2tCLEdBQUFELEVBQUE2RSxLQUFBN0UsSUFBQXVELE9BQUF0RCxLQUFnRSxTQUFBZ2IsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQXdCbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFdBQUEza0IsR0FBQUQsRUFBQTZFLEtBQUE3RSxFQUFBd0QsT0FBQXhELEVBQUF1RCxPQUFBdEQsRUFBQSxhQUU2b2lCLGdCQUYxc2pCLFNBQUFnYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBNU0sRUFBQSt5RCxNQUFrQ240QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxhQUFBM2tCLEVBQUEyTSxHQUE4QyxJQUFBc04sRUFBQWUsRUFBQTQvQyxHQUFBdGdELEVBQUFVLEVBQUE4K0MsS0FBb0I5K0MsRUFBQTgrQyxLQUFBOStDLEVBQUFvMEUsTUFBQXB2RixHQUFrQixRQUFBKzhDLEVBQUEsRUFBWUEsRUFBQXB3QyxFQUFJb3dDLElBQUF3eEMsR0FBQXZ6RSxHQUFBTCxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLE1BQUE0VCxFQUFBMkosS0FBQW80QixFQUFBLEVBQUFwd0MsRUFBQSxnQ0FBQW93QyxHQUFpRi9oQyxFQUFBNC9DLEdBQUEzZ0QsRUFBQWUsRUFBQTgrQyxLQUFBeC9DLEdBQWdCLFNBQUFVLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUEvRyxNQUFvQm40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxTQUFBNWtCLEdBQXdDLElBQUFDLEVBQUFnYixFQUFBNC9DLEdBQUFqdUQsRUFBQXFPLEVBQUE4K0MsS0FBb0I5K0MsRUFBQTgrQyxLQUFBOStDLEVBQUFvMEUsTUFBQXJ2RixHQUFBd3VGLEdBQUF2ekUsS0FBQTQvQyxHQUFBNTZELEVBQUFnYixFQUFBOCtDLEtBQUFudEQsRUFBQWdPLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsTUFBQTRULEVBQUEySixLQUFBLGlCQUFBNWtCLElBQW9ULFNBQUFpYixHQUFlLFlBQUFBLEVBQUE0K0MsSUFBQSxVQUFBMzNELE1BQUEseUJBQTJELElBQUFsQyxFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFnYixFQUFBOCtDLEtBQUFudEQsRUFBQXFPLEVBQUE0L0MsR0FBQTNnRCxFQUFBbGEsRUFBQSt5RCxNQUFBeDRDLEVBQUEzTixFQUE0QyxJQUFBZ08sRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsU0FBQTFLLEdBQTRDLEtBQUFqYSxJQUFBMk0sS0FBY3FPLEVBQUE0L0MsR0FBQWp1RCxFQUFBcU8sRUFBQW8wRSxNQUFBbjFFLEdBQUFqYSxFQUFBMEosTUFBQTRRLEVBQUEsRUFBQTNOLFNBRWk1aEIsRUFBQTJ1RCxHQUFBcDZELFVBQUEsS0FBQW82RCxHQUFBcDZELFVBQUEsS0FBQTA2RCxHQUFBMTZELFVBQUEsRUFBQWc0RCxJQUFBMEMsR0FBQTE2RCxVQUFBLEVBQUErM0QsSUFBQWdELEdBQUEvNkQsVUFBQSxLQUFBKzZELEdBQUEvNkQsVUFBQSxLQUFBZzdELEdBQUFoN0QsVUFBQSxLQUFBZzdELEdBQUFoN0QsVUFBQSxLQUFBazdELEdBQUFsN0QsVUFBQSxLQUFBazdELEdBQUFsN0QsVUFBQSxLQUZsa2YsU0FBQThaLEdBQWUsUUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQWdiLEVBQUF0TCxLQUFBL0MsRUFBQXFPLEVBQUFxL0MsR0FBQXBnRCxFQUFBbGEsRUFBQSt5RCxNQUFBLEdBQUF4NEMsRUFBQVUsRUFBQWtnRCxHQUFzRGw3RCxLQUFJLENBQUUsSUFBQSs4QyxFQUFBaDlDLEVBQUEreUQsTUFBQXB6RCxFQUFBNGEsRUFBQXlpQyxHQUFxQnBpQyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosTUFBQTNKLEVBQUF0TCxLQUFBLFdBQUFzTCxFQUFBdEwsS0FBQTFQLEdBQUEsbUJBQUErOEMsRUFBQTlpQyxHQUFBdE4sRUFBQSt1RCxZQUFBaDhELElBQUF1YSxHQUFBdE4sRUFBQWd2RCxNQUFBajhELEdBQWlIc2IsRUFBQXRMLEtBQUEsR0FBUyxTQUFBc0wsR0FBZSxRQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBZ2IsRUFBQW0vQyxJQUFBeHRELEVBQUFxTyxFQUFBby9DLElBQUFuZ0QsRUFBQWUsRUFBQXRMLEtBQUE0SyxFQUFBVSxFQUFBdWdELEdBQUF2N0QsR0FBQSs4QyxFQUFBL2hDLEVBQUFtZ0QsR0FBQXh1RCxHQUFBak4sRUFBQXNiLEVBQUFxL0MsR0FBQWoyRCxFQUFBNFcsRUFBQXUvQyxJQUFBOTJDLEVBQUF6SSxFQUFBa2dELEdBQXFGamhELEtBQUksQ0FBRSxJQUFBdGEsRUFBQUksRUFBQSt5RCxNQUFBaHpELEVBQUEyakIsRUFBQTlqQixHQUFxQmdiLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixNQUFBM0osRUFBQXRMLEtBQUEsV0FBQXNMLEVBQUF0TCxLQUFBdUssR0FBQSxnQkFBQXRhLEVBQUFLLEVBQUEsTUFBQTJNLEdBQUFqTixFQUFBczhELFlBQUFsOEQsRUFBQXdhLEVBQUF5aUMsRUFBQTM0QyxHQUFBMUUsRUFBQWk4RCxNQUFBNzdELEdBQXdIa2IsRUFBQXRMLEtBQUEsR0FFaW5lMnNELEdBQUFuN0QsVUFBQSxLQUFBbTdELEdBQUFuN0QsVUFBQSxLQUZ6NWQsU0FBQThaLEdBQWUsUUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQWdiLEVBQUFrL0MsSUFBQXZ0RCxFQUFBcU8sRUFBQXVnRCxHQUFBdjdELEdBQUFpYSxFQUFBZSxFQUFBdEwsS0FBQTRLLEVBQUFVLEVBQUFxL0MsR0FBQXRkLEVBQUEvaEMsRUFBQXMvQyxHQUFBNTZELEVBQUFzYixFQUFBbWdELEdBQWtFbGhELEtBQUksQ0FBRSxJQUFBN1YsRUFBQXJFLEVBQUEreUQsTUFBQXJ2QyxFQUFBL2pCLEVBQUEwRSxHQUFxQnVXLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixNQUFBM0osRUFBQXRMLEtBQUEsV0FBQXNMLEVBQUF0TCxLQUFBdUssR0FBQSxxQkFBQTdWLEdBQUFrVyxFQUFBb2hELFlBQUFqNEMsRUFBQTlXLEVBQUEsRUFBQW93QyxHQUFBemlDLEVBQUFxaEQsTUFBQWw0QyxHQUFtSHpJLEVBQUF0TCxLQUFBLEdBQVMsU0FBQXNMLEdBQWVMLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFVBQUEzSixFQUFBaEMsTUFBQXUvQyxJQUVrcWQrRCxHQUFBcDdELFVBQUEsS0FBQW83RCxHQUFBcDdELFVBQUEsS0FGMTBjLFNBQUE4WixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTgrQyxLQUFBOTVELEVBQUFnYixFQUFBNC9DLEdBQUFqdUQsRUFBQXFPLEVBQUE2K0MsTUFBQTUvQyxFQUFBbGEsSUFBQUMsR0FBdUMyYSxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxXQUFBMUssR0FBMEMsUUFBQUssRUFBQSxFQUFZQSxFQUFBTCxFQUFJSyxJQUFBM04sRUFBQS9ILEtBQUE3RSxJQUFBQyxJQUFtQmdiLEVBQUE0L0MsR0FBQTU2RCxHQUFPLFNBQUFnYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTQvQyxHQUFBNTZELEVBQUFnYixFQUFBOCtDLEtBQUFudEQsRUFBQXFPLEVBQUE2K0MsTUFBQTUvQyxFQUFBamEsSUFBQUQsR0FBdUM0YSxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxXQUFBMUssR0FBMEMsUUFBQUssRUFBQSxFQUFZQSxFQUFBTCxFQUFJSyxJQUFBLENBQUssSUFBQXlpQyxFQUFBLzhDLElBQUFELElBQUEsRUFBQUMsSUFBQUQsR0FBdUIsTUFBQWc5QyxRQUFBLFNBQUFBLEtBQUFwd0MsRUFBQS9ILEtBQUFtNEMsR0FBc0MvaEMsRUFBQTQvQyxHQUFBNzZELEdBQU8sU0FBQWliLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQWdiLEVBQUFzMEUsTUFBd0J0dkYsTUFBQWdiLEVBQUFzMEUsVUFBa0IsSUFBQTNpRixFQUFBNU0sRUFBQSt5RCxNQUFBNzRDLEVBQUFsYSxFQUFBK3lELE1BQXdCbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLEtBQUFoWSxFQUFBc04sR0FBQWphLEVBQUFpYSxHQUFBdE4sR0FBNkMsU0FBQXFPLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQWdiLEVBQUFzMEUsTUFBQTNpRixFQUFBNU0sRUFBQSt5RCxNQUFrQ240QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxLQUFBaFksR0FBb0MsSUFBQXNOLEVBQUFqYSxLQUFBMk0sSUFBQSxFQUFpQjVNLEVBQUE2RSxLQUFBcVYsSUFBVSxTQUFBZSxHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBNU0sRUFBQSt5RCxNQUFrQ240QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxRQUFBM2tCLEVBQUEyTSxHQUFBcU8sRUFBQXVoRCxJQUFBNXZELEdBQUEzTSxFQUFBLElBQXVELFNBQUFnYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBd0JuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsT0FBQTNrQixHQUFBRCxFQUFBNkUsS0FBQSxHQUFBb1csRUFBQXVoRCxJQUFBdjhELEtBRTBvYnk4RCxHQUFBdjdELFVBQUEsS0FBQXU3RCxHQUFBdjdELFVBQUEsWUFBQXc3RCxHQUFBeDdELFVBQUEsS0FBQXc3RCxHQUFBeDdELFVBQUEsS0FGenhhLFNBQUE4WixHQUFlTCxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxXQUFBM0osRUFBQTYrQyxNQUFBajFELEtBQUFvVyxFQUFBNGhELFlBRTB3YSxFQUY5c2EsU0FBQTVoRCxHQUFlTCxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxZQUFBM0osRUFBQW0wRSxVQUFBLFFBRStyYSxTQUZ6b2EsU0FBQW4wRSxHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBNU0sRUFBQSt5RCxNQUFrQ240QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxPQUFBM2tCLEVBQUEyTSxHQUFBNU0sRUFBQTZFLEtBQUErSCxFQUFBM00sRUFBQSxNQUF3RCxTQUFBZ2IsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQUFubUQsRUFBQTVNLEVBQUEreUQsTUFBa0NuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsU0FBQTNrQixFQUFBMk0sR0FBQTVNLEVBQUE2RSxLQUFBK0gsR0FBQTNNLEVBQUEsTUFBMkQsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLE9BQUEza0IsRUFBQTJNLEdBQUE1TSxFQUFBNkUsS0FBQStILEVBQUEzTSxFQUFBLE1BQXdELFNBQUFnYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBNU0sRUFBQSt5RCxNQUFrQ240QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxTQUFBM2tCLEVBQUEyTSxHQUFBNU0sRUFBQTZFLEtBQUErSCxHQUFBM00sRUFBQSxNQUEyRCxTQUFBZ2IsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQUFubUQsRUFBQTVNLEVBQUEreUQsTUFBa0NuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsT0FBQTNrQixFQUFBMk0sR0FBQTVNLEVBQUE2RSxLQUFBNUUsSUFBQTJNLEVBQUEsTUFBMEQsU0FBQXFPLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFFBQUEza0IsRUFBQTJNLEdBQUE1TSxFQUFBNkUsS0FBQTVFLElBQUEyTSxFQUFBLE1BQTJELFNBQUFxTyxHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBd0JuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsUUFBQTNrQixHQUFBRCxFQUFBNkUsS0FBQWdDLEtBQUFrb0YsTUFBQTl1RixHQUFBLFFBQW1FLFNBQUFnYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBd0JuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsU0FBQTNrQixHQUFBRCxFQUFBNkUsS0FBQWdDLEtBQUFrb0YsTUFBQTl1RixHQUFBLFFBQW9FLFNBQUFnYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBL0csTUFBb0JuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsT0FBQTVrQixPQUFBNDZELEdBQUEzL0MsR0FBQSxHQUFBTCxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxXQUF5RixTQUFBM0osR0FBZUwsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsVUFBcUMsU0FBQTNKLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFFBQUEza0IsRUFBQTJNLEdBQUE1TSxFQUFBNkUsS0FBQTVFLEdBQUEyTSxFQUFBLE1BQTBELFNBQUFxTyxHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBNU0sRUFBQSt5RCxNQUFrQ240QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxPQUFBM2tCLEVBQUEyTSxHQUFBNU0sRUFBQTZFLEtBQUE1RSxHQUFBMk0sRUFBQSxNQUF5RCxTQUFBcU8sR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQXdCbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFFBQUEza0IsR0FBQUQsRUFBQTZFLEtBQUE1RSxFQUFBLE1BRXU0WDI4RCxHQUFBejdELFVBQUEsS0FGNy9XLFNBQUE4WixHQUFlLElBQUFoYixFQUFBZ2IsRUFBQTYrQyxNQUFBL0csTUFBd0JuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsUUFBQTNrQixHQUFBZ2IsRUFBQTZoRCxVQUFBNzhELEdBQXFELFNBQUFnYixHQUFlLElBQUFoYixFQUFBZ2IsRUFBQTYrQyxNQUFBL0csTUFBd0JuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsUUFBQTNrQixHQUFBZ2IsRUFBQThoRCxXQUFBbDJELEtBQUFLLElBQUEsR0FBQWpILElBQW1FLFNBQUFnYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBNU0sRUFBQSt5RCxNQUFrQ240QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxRQUFBM2tCLEVBQUEyTSxHQUFBNU0sRUFBQTZFLEtBQUErSCxFQUFBM00sSUFBcUQsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFFBQUEza0IsRUFBQTJNLEdBQUE1TSxFQUFBNkUsS0FBQStILEVBQUEzTSxJQUFxRCxTQUFBZ2IsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQUFubUQsRUFBQTVNLEVBQUEreUQsTUFBa0NuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsUUFBQTNrQixFQUFBMk0sR0FBQTVNLEVBQUE2RSxLQUFBLEdBQUErSCxFQUFBM00sSUFBd0QsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFFBQUEza0IsRUFBQTJNLEdBQUE1TSxFQUFBNkUsS0FBQStILEVBQUEzTSxFQUFBLEtBQXdELFNBQUFnYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBd0JuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsUUFBQTNrQixHQUFBRCxFQUFBNkUsS0FBQWdDLEtBQUFzVixJQUFBbGMsS0FBMkQsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUF3Qm40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxRQUFBM2tCLEdBQUFELEVBQUE2RSxNQUFBNUUsSUFBa0QsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUF3Qm40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxVQUFBM2tCLEdBQUFELEVBQUE2RSxLQUFBLEdBQUFnQyxLQUFBMEUsTUFBQXRMLEVBQUEsTUFBcUUsU0FBQWdiLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUF3Qm40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxZQUFBM2tCLEdBQUFELEVBQUE2RSxLQUFBLEdBQUFnQyxLQUFBbWQsS0FBQS9qQixFQUFBLE1BRTJrVis4RCxHQUFBNzdELFVBQUEsS0FBQTY3RCxHQUFBNzdELFVBQUEsS0FBQTY3RCxHQUFBNzdELFVBQUEsS0FBQTY3RCxHQUFBNzdELFVBQUEsaUNBRjU1VSxTQUFBOFosR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQTc1RCxFQUFBRCxFQUFBK3lELE1BQUFubUQsRUFBQTVNLEVBQUEreUQsTUFBa0NuNEMsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsVUFBQTNrQixFQUFBMk0sR0FBQXFPLEVBQUF1aEQsSUFBQTV2RCxHQUFBM00sRUFBQWdiLEVBQUE0aEQsS0FBQTVoRCxFQUFBazFDLEtBQUF3TixZQUUyMlVmLEdBQUF6N0QsVUFBQSxLQUFBeTdELEdBQUF6N0QsVUFBQSxLQUFBODdELEdBQUE5N0QsVUFBQSxLQUFBODdELEdBQUE5N0QsVUFBQSxLQUFBODdELEdBQUE5N0QsVUFBQSxLQUY1K1QsU0FBQThaLEdBQWUsSUFBeUVoYixFQUF6RUQsRUFBQWliLEVBQUE2K0MsTUFBQS9HLE1BQStFLE9BQTNEbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFdBQUE1a0IsR0FBQWliLEVBQUFoQyxNQUFBMDFFLEdBQTJELElBQUEzdUYsR0FBYyxPQUFBQyxFQUFBLEdBQVksTUFBTSxRQUFBQSxFQUFBLEVBQVksTUFBTSxTQUFBQSxFQUFBLEVBQWEsTUFBTSxrQkFBQWlDLE1BQUEsd0JBQWdELE9BQUErWSxFQUFBMnpFLFNBQUEzdUYsRUFBQSxHQUFBRCxHQUEwQixPQUFBaWIsRUFBQTR6RSxRQUFBLEVBQW1CLE1BQU0sUUFBQTV6RSxFQUFBNHpFLFFBQUEsSUFBQTV1RixFQUF3QixNQUFNLFFBQUFnYixFQUFBNHpFLFFBQUEsR0FBQTV1RixFQUF1QixNQUFNLFFBQUFnYixFQUFBNHpFLFFBQUEsSUFBQTV1RixFQUF3QixNQUFNLGtCQUFBaUMsTUFBQSx3QkFBZ0RsQyxHQUFBLEdBQUFpYixFQUFBNnpFLFlBQUEsSUFBQTl1RixFQUFBLEdBQUFBLEVBQUEsTUFBQUMsR0FBdUMsU0FBQWdiLEdBQWUsSUFBMkVoYixFQUEzRUQsRUFBQWliLEVBQUE2K0MsTUFBQS9HLE1BQWlGLE9BQTdEbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLGFBQUE1a0IsR0FBQWliLEVBQUFoQyxNQUFBMDFFLEdBQTZELElBQUEzdUYsR0FBYyxPQUFBQyxFQUFBNEcsS0FBQWttQixLQUFBLEtBQXdCLE1BQU0sUUFBQTlzQixFQUFBNEcsS0FBQWttQixLQUFBLEdBQXVCLE1BQU0sU0FBQTlzQixFQUFBLEVBQUE0RyxLQUFBa21CLEtBQUEsR0FBMEIsTUFBTSxrQkFBQTdxQixNQUFBLDBCQUFrRCxPQUFBK1ksRUFBQTJ6RSxTQUFBM3VGLEVBQUEsR0FBQUQsR0FBMEIsT0FBQWliLEVBQUE0ekUsUUFBQSxFQUFtQixNQUFNLFFBQUE1ekUsRUFBQTR6RSxRQUFBLElBQUE1dUYsRUFBd0IsTUFBTSxRQUFBZ2IsRUFBQTR6RSxRQUFBLEdBQUE1dUYsRUFBdUIsTUFBTSxRQUFBZ2IsRUFBQTR6RSxRQUFBLElBQUE1dUYsRUFBd0IsTUFBTSxrQkFBQWlDLE1BQUEsMEJBQWtEbEMsR0FBQSxHQUFBaWIsRUFBQTZ6RSxZQUFBLElBQUE5dUYsRUFBQSxHQUFBQSxFQUFBLE1BQUFDLFFBRTZuUyxTQUZ0bFMsU0FBQWdiLEdBQWVMLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFVBQUEzSixFQUFBaEMsTUFBQW8vQyxTQUV1a1MsRUFGdGhTLFNBQUFwOUMsR0FBZUwsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsVUFBQTNKLEVBQUFoQyxNQUFBeS9DLElBQWlELFNBQUF6OUMsR0FBZUwsRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsVUFBQTNKLEVBQUFoQyxNQUFBMC9DLElBRXU4UjJDLFdBQUEsOEJBRnQ1UixTQUFBcmdELEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUEvRyxNQUFvQm40QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxhQUFBNWtCLElBRW0zUms5RCxHQUFBLzdELFVBQUEsS0FBQSs3RCxHQUFBLzdELFVBQUEsS0FGM29SLFNBQUE4WixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBLEVBQTRCZ08sRUFBQW1nRCxPQUFBdm9ELFFBQUFuTCxJQUFBNFQsRUFBQTJKLEtBQUEsWUFBQTNrQixHQUFBLEVBQUFBLElBQUEyTSxFQUFBLE9BQUEzTSxJQUFBMk0sR0FBQSxNQUFBNU0sRUFBQTZFLEtBQUErSCxTQUVnbVIsRUFGL2dSLFNBQUFxTyxHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBNU0sRUFBQSt5RCxNQUFBNzRDLEVBQUFsYSxFQUFBK3lELE1BQTRDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFVBQUE1a0IsRUFBQTZFLEtBQUErSCxHQUFBNU0sRUFBQTZFLEtBQUE1RSxHQUFBRCxFQUFBNkUsS0FBQXFWLElBQW9FLFNBQUFlLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUE3NUQsRUFBQUQsRUFBQSt5RCxNQUFBbm1ELEVBQUE1TSxFQUFBK3lELE1BQWtDbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLFFBQUEza0IsRUFBQTJNLEdBQUE1TSxFQUFBNkUsS0FBQWdDLEtBQUE4SyxJQUFBL0UsRUFBQTNNLEtBQStELFNBQUFnYixHQUFlLElBQUFqYixFQUFBaWIsRUFBQTYrQyxNQUFBNzVELEVBQUFELEVBQUEreUQsTUFBQW5tRCxFQUFBNU0sRUFBQSt5RCxNQUFrQ240QyxFQUFBbWdELE9BQUF2b0QsUUFBQW5MLElBQUE0VCxFQUFBMkosS0FBQSxRQUFBM2tCLEVBQUEyTSxHQUFBNU0sRUFBQTZFLEtBQUFnQyxLQUFBc1gsSUFBQXZSLEVBQUEzTSxLQUErRCxTQUFBZ2IsR0FBZSxJQUFBamIsRUFBQWliLEVBQUE2K0MsTUFBQS9HLE1BQW9CbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLGFBQUE1a0IsSUFBNEMsU0FBQWliLEdBQWUsSUFBQWpiLEVBQUFpYixFQUFBNitDLE1BQUEvRyxNQUFBOXlELEVBQUFnYixFQUFBNitDLE1BQUEvRyxNQUFvQyxPQUFBbjRDLEVBQUFtZ0QsT0FBQXZvRCxRQUFBbkwsSUFBQTRULEVBQUEySixLQUFBLGFBQUE1a0IsRUFBQUMsR0FBQUQsR0FBd0QsbUJBQUFpYixFQUFBcTBFLGlCQUFBcnZGLEdBQXlDLG1CQUFBZ2IsRUFBQXUwRSxZQUFBdnZGLEdBQW9DLGtCQUFBaUMsTUFBQSxzQ0FFeTZQLGtPQUFBaTdELEdBQUFoOEQsVUFBQSxLQUFBZzhELEdBQUFoOEQsVUFBQSxLQUFBZzhELEdBQUFoOEQsVUFBQSxLQUFBZzhELEdBQUFoOEQsVUFBQSxLQUFBZzhELEdBQUFoOEQsVUFBQSxLQUFBZzhELEdBQUFoOEQsVUFBQSxLQUFBZzhELEdBQUFoOEQsVUFBQSxLQUFBZzhELEdBQUFoOEQsVUFBQSxLQUFBaThELEdBQUFqOEQsVUFBQSxLQUFBaThELEdBQUFqOEQsVUFBQSxLQUFBaThELEdBQUFqOEQsVUFBQSxLQUFBaThELEdBQUFqOEQsVUFBQSxLQUFBaThELEdBQUFqOEQsVUFBQSxLQUFBaThELEdBQUFqOEQsVUFBQSxLQUFBaThELEdBQUFqOEQsVUFBQSxLQUFBaThELEdBQUFqOEQsVUFBQSxLQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdB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QUEsRUFBQSxvQkFBQUEsRUFBQSxlQUFBQSxFQUFBLG9CQUFBQSxFQUFBLG9CQUFBQSxFQUFBLDhCQUFBQSxFQUFBLDJCQUFBQSxFQUFBLHVCQUFBQSxFQUFBLHVCQUFBQSxFQUFBLDRCQUFBQSxFQUFBLDRCQUFBQSxFQUFBLG9CQUFBQSxFQUFBLG1CQUFBQSxFQUFBLHVCQUFBQSxFQUFBLHlCQUFBQSxFQUFBLHFCQUFBQSxFQUFBLGtCQUFBQSxFQUFBLGtCQUFBQSxFQUFBLG1CQUFBQSxFQUFBLGlCQUFBQSxFQUFBLDhCQUFBQSxFQUFBLG9CQUFBQSxFQUFBLGtCQUFBQSxFQUFBLGNBQUFBLEVBQUEsaUJBQUFBLEVBQUEsb0JBQUFBLEVBQUEsZUFBQUEsRUFBQSxzQkFBQUEsRUFBQSxlQUFBQSxFQUFBLGdCQUFBQSxFQUFBLG9CQUFBQSxFQUFBLGlCQUFBQSxFQUFBLHVCQUFBQSxFQUFBLDJCQUFBQSxFQUFBLG1DQUFBQSxFQUFBLHdCQUFBQSxFQUFBLCtCQUFBQSxFQUFBLDBCQUFBQSxFQUFBLGdDQUFBQSxFQUFBLHlCQUFBQSxFQUFBLHlCQUFBQSxFQUFBLHVCQUFBQSxFQUFBLGlCQUFBQSxFQUFBLG1CQUFBQSxFQUFBLG9CQUFBQSxFQUFBLHFCQUFBQSxFQUFBLHVCQUFBQSxFQUFBLHFCQUFBQSxFQUFBLG1DQUFBQSxFQUFBLHlCQUFBQSxFQUFBLGtDQUFBQSxFQUFBLHFCQUFBQSxFQUFBLHNCQUFBQSxFQUFBLGdCQUFBQSxFQUFBLGVBQUFLLEVBQUF4YixRQUFBUSxJQUF3L0NxM0YsMkJBQUEsR0FBQUMsMkJBQUEsR0FBQUMsbUJBQUEsR0FBQUMsa0JBQUEsR0FBQUMsbUJBQUEsR0FBQUMscUJBQUEsR0FBQUMsdUJBQUEsR0FBQUMsaUJBQUEsR0FBQUMsY0FBQSxHQUFBQyxnQkFBQSxHQUFBQyxjQUFBLEdBQUFDLG9CQUFBLEdBQUFDLHFCQUFBLEdBQUFDLHFCQUFBLEdBQUFDLHVCQUFBLEdBQUFDLG1CQUFBLEdBQUFDLDZCQUFBLEdBQUFDLDBCQUFBLEdBQUFDLHNCQUFBLEdBQUFDLHNCQUFB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VUFBQUMsVUFBQSxVQUFBQyxPQUFBLFVBQUFDLE1BQUEsVUFBQUMsTUFBQSxVQUFBQyxTQUFBLFVBQUFDLGNBQUEsVUFBQUMsVUFBQSxVQUFBQyxhQUFBLFVBQUFDLFVBQUEsVUFBQUMsV0FBQSxVQUFBQyxVQUFBLFVBQUFDLHFCQUFBLFVBQUFDLFVBQUEsVUFBQUMsV0FBQSxVQUFBQyxVQUFBLFVBQUFDLFVBQUEsVUFBQUMsWUFBQSxVQUFBQyxjQUFBLFVBQUFDLGFBQUEsVUFBQUMsZUFBQSxVQUFBQyxlQUFBLFVBQUFDLGVBQUEsVUFBQUMsWUFBQSxVQUFBQyxLQUFBLFVBQUFDLFVBQUEsVUFBQUMsTUFBQSxVQUFBQyxRQUFBLFVBQUFDLE9BQUEsVUFBQUMsaUJBQUEsVUFBQUMsV0FBQSxVQUFBQyxhQUFBLFVBQUFDLGFBQUEsVUFBQUMsZUFBQSxVQUFBQyxnQkFBQSxVQUFBQyxrQkFBQSxVQUFBQyxnQkFBQSxVQUFBQyxnQkFBQSxVQUFBQyxhQUFBLFVBQUFDLFVBQUEsVUFBQUMsVUFBQSxVQUFBQyxTQUFBLFVBQUFDLFlBQUEsVUFBQUMsS0FBQSxVQUFBQyxRQUFBLFVBQUFDLE1BQUEsVUFBQUMsVUFBQSxVQUFBQyxPQUFBLFVBQUFDLFVBQUEsVUFBQUMsT0FBQSxVQUFBQyxjQUFBLFVBQUFDLFVBQUEsVUFBQUMsY0FBQSxVQUFBQyxjQUFBLFVBQUFDLFdBQUEsVUFBQUMsVUFBQSxVQUFBQyxLQUFBLFVBQUF2M0QsS0FBQSxVQUFBdzNELEtBQUEsVUFBQUMsV0FBQSxVQUFBQyxPQUFBLFVBQUFySSxJQUFBLFVBQUFzSSxVQUFBLFVBQUFDLFVBQUEsVUFBQUMsWUFBQSxVQUFBQyxPQUFBLFVBQUFDLFdBQUEsVUFBQUMsU0FBQSxVQUFBQyxTQUFBLFVBQUFDLE9BQUEsVUFBQUMsT0FBQSxVQUFBQyxRQUFBLFVBQUFDLFVBQUEsVUFBQUMsVUFBQSxVQUFBQyxVQUFBLFVBQUFDLEtBQUEsVUFBQUMsWUFBQSxVQUFBQyxVQUFBLFVBQUFDLElBQUEsVUFBQUMsS0FBQSxVQUFBQyxRQUFBLFVBQUFDLE9B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Z3hJLFdBQUFNLEtBQ0FDLEVBQUF2eEksR0FBQW14SSxPQUFBQyxFQUFBLEtBQ0FBLEdBQUEsRUFDQUUsRUFBQXBzSSxLQUFBcXNJLEVBQUF2eEksSUFDQXV4SSxFQUFBMXRJLE9BQUE3RCxFQUFBLElBS0EsSUFEQXV4SSxJQUFBM3RJLE9BQUEsR0FBQTlDLEVBQ0F5d0ksRUFBQTN0SSxPQXZEQSxLQXVEQWt0SSxFQUFBLEdBQ0FBLEdBcERBLEtBcURBUyxFQUFBcnNJLEtBQUEsSUFBQXVySSxHQUVBM3VJLEVBQUF5aEQsS0FBQSxLQUNBemhELEVBQUF1MUgsT0FBQSxLQTJCQXYxSCxFQUFBdWxILFdBQUEsTUFDQSxLQUFBdmxILEVBQUFQLEtBQ0FPLEVBQUF5N0csS0FBQWwyRCxLQUFBdi9DLE1BQUEsV0FJZWtvSSxFQUFBLFVBQ2YsSUFBSUUsRUFBQWoxSCxFQUFFbzFILGtCQzFOTixJQUFBejFILEVBR0FBLEVBQUEsV0FDQSxPQUFBdFksS0FEQSxHQUlBLElBRUFzWSxLQUFBK3JDLFNBQUEsY0FBQUEsS0FBQSxFQUFBNnFGLE1BQUEsUUFDQyxNQUFBdmtJLEdBRUQsaUJBQUF2RSxTQUFBa1MsRUFBQWxTLFFBT0EzSSxFQUFBRCxRQUFBOGEiLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAyKTtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KXtcblxuXHQvL1VNRFxuXHRpZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRcdGRlZmluZShmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBmYWN0b3J5KCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuIFx0fSBlbHNlIHtcblx0XHRyb290LlRvbmUgPSBmYWN0b3J5KCk7XG5cdH1cblxufSh0aGlzLCBmdW5jdGlvbigpe1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXHRcblx0dmFyIFRvbmU7XG5cdC8vY29uc3RydWN0cyB0aGUgbWFpbiBUb25lIG9iamVjdFxuXHRmdW5jdGlvbiBNYWluKGZ1bmMpe1xuXHRcdFRvbmUgPSBmdW5jKCk7XG5cdH1cblx0Ly9pbnZva2VzIGVhY2ggb2YgdGhlIG1vZHVsZXMgd2l0aCB0aGUgbWFpbiBUb25lIG9iamVjdCBhcyB0aGUgYXJndW1lbnRcblx0ZnVuY3Rpb24gTW9kdWxlKGZ1bmMpe1xuXHRcdGZ1bmMoVG9uZSk7XG5cdH1cdC8qKlxuXHQgKiAgVG9uZS5qc1xuXHQgKiAgQGF1dGhvciBZb3RhbSBNYW5uXG5cdCAqICBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVCBMaWNlbnNlXG5cdCAqICBAY29weXJpZ2h0IDIwMTQtMjAxOCBZb3RhbSBNYW5uXG5cdCAqL1xuXHRNYWluKGZ1bmN0aW9uICgpIHtcblx0ICAgIFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VE9ORVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lIGlzIHRoZSBiYXNlIGNsYXNzIG9mIGFsbCBvdGhlciBjbGFzc2VzLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIHZhciBUb25lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUb25lKSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbnN0cnVjdG9yIG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBcXCduZXdcXCcga2V5d29yZCcpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEByZXR1cm5zIHtTdHJpbmd9IHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIGFzIGEgc3RyaW5nXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmb3IgKHZhciBjbGFzc05hbWUgaW4gVG9uZSkge1xuXHQgICAgICAgICAgICB2YXIgaXNMZXR0ZXIgPSBjbGFzc05hbWVbMF0ubWF0Y2goL15bQS1aXSQvKTtcblx0ICAgICAgICAgICAgdmFyIHNhbWVDb25zdHJ1Y3RvciA9IFRvbmVbY2xhc3NOYW1lXSA9PT0gdGhpcy5jb25zdHJ1Y3Rvcjtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNGdW5jdGlvbihUb25lW2NsYXNzTmFtZV0pICYmIGlzTGV0dGVyICYmIHNhbWVDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gJ1RvbmUnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgZGlzY29ubmVjdCBhbmQgZGlzcG9zZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRHRVQvU0VUXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIHBhcmFtZXRlcnMgYXQgb25jZS4gRWl0aGVyIHBhc3MgaW4gYW5cblx0XHQgKiAgb2JqZWN0IG1hcHBpbmcgcGFyYW1ldGVycyB0byB2YWx1ZXMsIG9yIHRvIHNldCBhXG5cdFx0ICogIHNpbmdsZSBwYXJhbWV0ZXIsIGJ5IHBhc3NpbmcgaW4gYSBzdHJpbmcgYW5kIHZhbHVlLlxuXHRcdCAqICBUaGUgbGFzdCBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCByYW1wIHRpbWUgd2hpY2hcblx0XHQgKiAgd2lsbCByYW1wIGFueSBzaWduYWwgdmFsdWVzIHRvIHRoZWlyIGRlc3RpbmF0aW9uIHZhbHVlXG5cdFx0ICogIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBwYXJhbXNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByYW1wVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZX0gdGhpc1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NldCB2YWx1ZXMgdXNpbmcgYW4gb2JqZWN0XG5cdFx0ICogZmlsdGVyLnNldCh7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogMzAwLFxuXHRcdCAqIFx0XCJ0eXBlXCIgOiBoaWdocGFzc1xuXHRcdCAqIH0pO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGZpbHRlci5zZXQoXCJ0eXBlXCIsIFwiaGlnaHBhc3NcIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9yYW1wIHRvIHRoZSB2YWx1ZSAyMjAgb3ZlciAzIHNlY29uZHMuXG5cdFx0ICogb3NjaWxsYXRvci5zZXQoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IDIyMFxuXHRcdCAqIH0sIDMpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgdmFsdWUsIHJhbXBUaW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QocGFyYW1zKSkge1xuXHQgICAgICAgICAgICByYW1wVGltZSA9IHZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHZhciB0bXBPYmogPSB7fTtcblx0ICAgICAgICAgICAgdG1wT2JqW3BhcmFtc10gPSB2YWx1ZTtcblx0ICAgICAgICAgICAgcGFyYW1zID0gdG1wT2JqO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBwYXJhbUxvb3A6XG5cdCAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gcGFyYW1zKSB7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcmFtc1thdHRyXTtcblx0ICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICAgICAgaWYgKGF0dHIuaW5kZXhPZignLicpICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyU3BsaXQgPSBhdHRyLnNwbGl0KCcuJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyU3BsaXQubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFthdHRyU3BsaXRbaV1dO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgVG9uZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0clNwbGl0LnNwbGljZSgwLCBpICsgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5uZXJQYXJhbSA9IGF0dHJTcGxpdC5qb2luKCcuJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuc2V0KGlubmVyUGFyYW0sIHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHBhcmFtTG9vcDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBhdHRyID0gYXR0clNwbGl0W2F0dHJTcGxpdC5sZW5ndGggLSAxXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHZhciBwYXJhbSA9IHBhcmVudFthdHRyXTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYocGFyYW0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5TaWduYWwgJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlNpZ25hbCB8fCBUb25lLlBhcmFtICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5QYXJhbSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS52YWx1ZSAhPT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihyYW1wVGltZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5yYW1wVG8odmFsdWUsIHJhbXBUaW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBBdWRpb1BhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnZhbHVlICE9PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5UaW1lQmFzZSAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJlbnRbYXR0cl0gPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBUb25lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcGFyYW0uc2V0KHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gIT09IHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcGFyZW50W2F0dHJdID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBvYmplY3QncyBhdHRyaWJ1dGVzLiBHaXZlbiBubyBhcmd1bWVudHMgZ2V0XG5cdFx0ICogIHdpbGwgcmV0dXJuIGFsbCBhdmFpbGFibGUgb2JqZWN0IHByb3BlcnRpZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmdcblx0XHQgKiAgdmFsdWVzLiBQYXNzIGluIGEgc2luZ2xlIGF0dHJpYnV0ZSB0byByZXRyaWV2ZSBvciBhbiBhcnJheVxuXHRcdCAqICBvZiBhdHRyaWJ1dGVzLiBUaGUgYXR0cmlidXRlIHN0cmluZ3MgY2FuIGFsc28gaW5jbHVkZSBhIFwiLlwiXG5cdFx0ICogIHRvIGFjY2VzcyBkZWVwZXIgcHJvcGVydGllcy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogb3NjLmdldCgpO1xuXHRcdCAqIC8vcmV0dXJucyB7XCJ0eXBlXCIgOiBcInNpbmVcIiwgXCJmcmVxdWVuY3lcIiA6IDQ0MCwgLi4uZXRjfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG9zYy5nZXQoXCJ0eXBlXCIpO1xuXHRcdCAqIC8vcmV0dXJucyB7IFwidHlwZVwiIDogXCJzaW5lXCJ9XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL3VzZSBkb3Qgbm90YXRpb24gdG8gYWNjZXNzIGRlZXAgcHJvcGVydGllc1xuXHRcdCAqIHN5bnRoLmdldChbXCJlbnZlbG9wZS5hdHRhY2tcIiwgXCJlbnZlbG9wZS5yZWxlYXNlXCJdKTtcblx0XHQgKiAvL3JldHVybnMge1wiZW52ZWxvcGVcIiA6IHtcImF0dGFja1wiIDogMC4yLCBcInJlbGVhc2VcIiA6IDAuNH19XG5cdFx0ICogIEBwYXJhbSB7QXJyYXk9fHN0cmluZ3x1bmRlZmluZWR9IHBhcmFtcyB0aGUgcGFyYW1ldGVycyB0byBnZXQsIG90aGVyd2lzZSB3aWxsIHJldHVyblxuXHRcdCAqICBcdFx0XHRcdFx0ICAgICAgICAgICAgICAgICAgYWxsIGF2YWlsYWJsZS5cblx0XHQgKiAgQHJldHVybnMge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgcGFyYW1zID0gdGhpcy5fY29sbGVjdERlZmF1bHRzKHRoaXMuY29uc3RydWN0b3IpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHBhcmFtcyA9IFtwYXJhbXNdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmV0ID0ge307XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGF0dHIgPSBwYXJhbXNbaV07XG5cdCAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICB2YXIgc3ViUmV0ID0gcmV0O1xuXHQgICAgICAgICAgICBpZiAoYXR0ci5pbmRleE9mKCcuJykgIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYXR0clNwbGl0ID0gYXR0ci5zcGxpdCgnLicpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRyU3BsaXQubGVuZ3RoIC0gMTsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHN1YkF0dHIgPSBhdHRyU3BsaXRbal07XG5cdCAgICAgICAgICAgICAgICAgICAgc3ViUmV0W3N1YkF0dHJdID0gc3ViUmV0W3N1YkF0dHJdIHx8IHt9O1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YlJldCA9IHN1YlJldFtzdWJBdHRyXTtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbc3ViQXR0cl07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBhdHRyID0gYXR0clNwbGl0W2F0dHJTcGxpdC5sZW5ndGggLSAxXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YXIgcGFyYW0gPSBwYXJlbnRbYXR0cl07XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KHBhcmFtc1thdHRyXSkpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLmdldCgpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuU2lnbmFsICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5TaWduYWwpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLnZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuUGFyYW0gJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlBhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS52YWx1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLnZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgVG9uZSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0uZ2V0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoIVRvbmUuaXNGdW5jdGlvbihwYXJhbSkgJiYgVG9uZS5pc0RlZmluZWQocGFyYW0pKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjb2xsZWN0IGFsbCBvZiB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGluIG9uZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjb25zdHIgdGhlIGNvbnN0cnVjdG9yIHRvIGZpbmQgdGhlIGRlZmF1bHRzIGZyb21cblx0XHQgKiAgQHJldHVybiB7QXJyYXl9IGFsbCBvZiB0aGUgYXR0cmlidXRlcyB3aGljaCBiZWxvbmcgdG8gdGhlIGNsYXNzXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5fY29sbGVjdERlZmF1bHRzID0gZnVuY3Rpb24gKGNvbnN0cikge1xuXHQgICAgICAgIHZhciByZXQgPSBbXTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoY29uc3RyLmRlZmF1bHRzKSkge1xuXHQgICAgICAgICAgICByZXQgPSBPYmplY3Qua2V5cyhjb25zdHIuZGVmYXVsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoY29uc3RyLl9zdXBlcikpIHtcblx0ICAgICAgICAgICAgdmFyIHN1cGVyRGVmcyA9IHRoaXMuX2NvbGxlY3REZWZhdWx0cyhjb25zdHIuX3N1cGVyKTtcblx0ICAgICAgICAgICAgLy9maWx0ZXIgb3V0IHJlcGVhdHNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdXBlckRlZnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChyZXQuaW5kZXhPZihzdXBlckRlZnNbaV0pID09PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKHN1cGVyRGVmc1tpXSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJldDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRERUZBVUxUU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICB2YWx1ZXMgIFRoZSBhcmd1bWVudHMgYXJyYXlcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICBrZXlzICAgIFRoZSBuYW1lcyBvZiB0aGUgYXJndW1lbnRzXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBjb25zdHIgVGhlIGNsYXNzIGNvbnN0cnVjdG9yXG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBBbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlICBkZWZhdWx0cyBiZXR3ZWVuIHRoZSBjbGFzcycgZGVmYXVsdHNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgcGFzc2VkIGluIGFyZ3VtZW50cy5cblx0XHQgKi9cblx0ICAgIFRvbmUuZGVmYXVsdHMgPSBmdW5jdGlvbiAodmFsdWVzLCBrZXlzLCBjb25zdHIpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IHt9O1xuXHQgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxICYmIFRvbmUuaXNPYmplY3QodmFsdWVzWzBdKSkge1xuXHQgICAgICAgICAgICBvcHRpb25zID0gdmFsdWVzWzBdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgb3B0aW9uc1trZXlzW2ldXSA9IHZhbHVlc1tpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoY29uc3RyLmRlZmF1bHRzKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIGNvbnN0ci5kZWZhdWx0cyk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzT2JqZWN0KGNvbnN0cikpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBjb25zdHIpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBvcHRpb25zO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIGBnaXZlbmAgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCwgdXNlIHRoZSBgZmFsbGJhY2tgLlxuXHRcdCAqICBJZiBib3RoIGBnaXZlbmAgYW5kIGBmYWxsYmFja2AgYXJlIG9iamVjdCBsaXRlcmFscywgaXQgd2lsbFxuXHRcdCAqICByZXR1cm4gYSBkZWVwIGNvcHkgd2hpY2ggaW5jbHVkZXMgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIGZyb20gYm90aFxuXHRcdCAqICBvYmplY3RzLiBJZiBhIHBhcmFtZXRlciBpcyB1bmRlZmluZWQgaW4gZ2l2ZW4sIGl0IHdpbGwgcmV0dXJuXG5cdFx0ICogIHRoZSBmYWxsYmFjayBwcm9wZXJ0eS5cblx0XHQgKiAgPGJyPjxicj5cblx0XHQgKiAgV0FSTklORzogaWYgb2JqZWN0IGlzIHNlbGYgcmVmZXJlbnRpYWwsIGl0IHdpbGwgZ28gaW50byBhbiBhblxuXHRcdCAqICBpbmZpbml0ZSByZWN1cnNpdmUgbG9vcC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHBhcmFtICB7Kn0gZ2l2ZW5cblx0XHQgKiAgQHBhcmFtICB7Kn0gZmFsbGJhY2tcblx0XHQgKiAgQHJldHVybiB7Kn1cblx0XHQgKi9cblx0ICAgIFRvbmUuZGVmYXVsdEFyZyA9IGZ1bmN0aW9uIChnaXZlbiwgZmFsbGJhY2spIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc09iamVjdChnaXZlbikgJiYgVG9uZS5pc09iamVjdChmYWxsYmFjaykpIHtcblx0ICAgICAgICAgICAgdmFyIHJldCA9IHt9O1xuXHQgICAgICAgICAgICAvL21ha2UgYSBkZWVwIGNvcHkgb2YgdGhlIGdpdmVuIG9iamVjdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBnaXZlblByb3AgaW4gZ2l2ZW4pIHtcblx0ICAgICAgICAgICAgICAgIHJldFtnaXZlblByb3BdID0gVG9uZS5kZWZhdWx0QXJnKGZhbGxiYWNrW2dpdmVuUHJvcF0sIGdpdmVuW2dpdmVuUHJvcF0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGZvciAodmFyIGZhbGxiYWNrUHJvcCBpbiBmYWxsYmFjaykge1xuXHQgICAgICAgICAgICAgICAgcmV0W2ZhbGxiYWNrUHJvcF0gPSBUb25lLmRlZmF1bHRBcmcoZ2l2ZW5bZmFsbGJhY2tQcm9wXSwgZmFsbGJhY2tbZmFsbGJhY2tQcm9wXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHJldDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5pc1VuZGVmKGdpdmVuKSA/IGZhbGxiYWNrIDogZ2l2ZW47XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdENPTk5FQ1RJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBjb25uZWN0IHRvZ2V0aGVyIGFsbCBvZiB0aGUgYXJndW1lbnRzIGluIHNlcmllc1xuXHRcdCAqICBAcGFyYW0gey4uLkF1ZGlvUGFyYW18VG9uZXxBdWRpb05vZGV9IG5vZGVzXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLmNvbm5lY3RTZXJpZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRVbml0ID0gYXJndW1lbnRzWzBdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB0b1VuaXQgPSBhcmd1bWVudHNbaV07XG5cdCAgICAgICAgICAgIGN1cnJlbnRVbml0LmNvbm5lY3QodG9Vbml0KTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQgPSB0b1VuaXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gVFlQRSBDSEVDS0lOR1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJnIGlzIHVuZGVmaW5lZFxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIHVuZGVmaW5lZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzVW5kZWYgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmcgaXMgbm90IHVuZGVmaW5lZFxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIHVuZGVmaW5lZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzRGVmaW5lZCA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICByZXR1cm4gIVRvbmUuaXNVbmRlZih2YWwpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmcgaXMgYSBmdW5jdGlvblxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgZnVuY3Rpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc0Z1bmN0aW9uID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlci5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIG51bWJlclxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzTnVtYmVyID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgZ2l2ZW4gYXJndW1lbnQgaXMgYW4gb2JqZWN0IGxpdGVyYWwgKGkuZS4gYHt9YCk7XG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYW4gb2JqZWN0IGxpdGVyYWwuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNPYmplY3QgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBPYmplY3RdJyAmJiBhcmcuY29uc3RydWN0b3IgPT09IE9iamVjdDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgYSBib29sZWFuLlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgYm9vbGVhblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzQm9vbGVhbiA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhbiBBcnJheVxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGFuIGFycmF5XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNBcnJheSA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIHN0cmluZy5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIHN0cmluZ1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzU3RyaW5nID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGVzdCBpZiB0aGUgYXJndW1lbnQgaXMgaW4gdGhlIGZvcm0gb2YgYSBub3RlIGluIHNjaWVudGlmaWMgcGl0Y2ggbm90YXRpb24uXG5cdFx0ICogIGUuZy4gXCJDNFwiXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBzdHJpbmdcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc05vdGUgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuaXNTdHJpbmcoYXJnKSAmJiAvXihbYS1nXXsxfSg/OmJ8I3x4fGJiKT8pKC0/WzAtOV0rKS9pLnRlc3QoYXJnKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQW4gZW1wdHkgZnVuY3Rpb24uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUubm9PcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTWFrZSB0aGUgcHJvcGVydHkgbm90IHdyaXRhYmxlLiBJbnRlcm5hbCB1c2Ugb25seS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcGVydHkgIHRoZSBwcm9wZXJ0eSB0byBtYWtlIG5vdCB3cml0YWJsZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuX3JlYWRPbmx5ID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydHkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5KHByb3BlcnR5W2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eSwge1xuXHQgICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuXHQgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIE1ha2UgYW4gYXR0cmlidXRlIHdyaXRlYWJsZS4gSW50ZXJhbCB1c2Ugb25seS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcGVydHkgIHRoZSBwcm9wZXJ0eSB0byBtYWtlIHdyaXRhYmxlXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5fd3JpdGFibGUgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0eS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd3JpdGFibGUocHJvcGVydHlbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB7IHdyaXRhYmxlOiB0cnVlIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBQb3NzaWJsZSBwbGF5IHN0YXRlcy5cblx0XHQgKiBAZW51bSB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGF0ZSA9IHtcblx0ICAgICAgICBTdGFydGVkOiAnc3RhcnRlZCcsXG5cdCAgICAgICAgU3RvcHBlZDogJ3N0b3BwZWQnLFxuXHQgICAgICAgIFBhdXNlZDogJ3BhdXNlZCdcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBFcXVhbCBwb3dlciBnYWluIHNjYWxlLiBHb29kIGZvciBjcm9zcy1mYWRpbmcuXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSBwZXJjZW50ICgwLTEpXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gICAgICAgICBvdXRwdXQgZ2FpbiAoMC0xKVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmVxdWFsUG93ZXJTY2FsZSA9IGZ1bmN0aW9uIChwZXJjZW50KSB7XG5cdCAgICAgICAgdmFyIHBpRmFjdG9yID0gMC41ICogTWF0aC5QSTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5zaW4ocGVyY2VudCAqIHBpRmFjdG9yKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBkZWNpYmVscyBpbnRvIGdhaW4uXG5cdFx0ICogIEBwYXJhbSAge0RlY2liZWxzfSBkYlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZGJUb0dhaW4gPSBmdW5jdGlvbiAoZGIpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5wb3coMTAsIGRiIC8gMjApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGdhaW4gdG8gZGVjaWJlbHMuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gZ2FpbiAoMC0xKVxuXHRcdCAqICBAcmV0dXJuIHtEZWNpYmVsc31cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5nYWluVG9EYiA9IGZ1bmN0aW9uIChnYWluKSB7XG5cdCAgICAgICAgcmV0dXJuIDIwICogKE1hdGgubG9nKGdhaW4pIC8gTWF0aC5MTjEwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhbiBpbnRlcnZhbCAoaW4gc2VtaXRvbmVzKSB0byBhIGZyZXF1ZW5jeSByYXRpby5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWx9IGludGVydmFsIHRoZSBudW1iZXIgb2Ygc2VtaXRvbmVzIGFib3ZlIHRoZSBiYXNlIG5vdGVcblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSAgICAgICAgICB0aGUgZnJlcXVlbmN5IHJhdGlvXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB0b25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbygwKTsgLy8gMVxuXHRcdCAqIHRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKDEyKTsgLy8gMlxuXHRcdCAqIHRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKC0xMik7IC8vIDAuNVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8gPSBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5wb3coMiwgaW50ZXJ2YWwgLyAxMik7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VElNSU5HXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBvZiB0aGUgQXVkaW9Db250ZXh0IGNsb2NrLlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBjdXJyZW50VGltZSBmcm9tIHRoZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuY29udGV4dC5ub3coKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIEF1ZGlvQ29udGV4dCBjbG9jay5cblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSB0aGUgY3VycmVudFRpbWUgZnJvbSB0aGUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUubm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLmNvbnRleHQubm93KCk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0SU5IRVJJVEFOQ0Vcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIGhhdmUgYSBjaGlsZCBpbmhlcml0IGFsbCBvZiBUb25lJ3MgKG9yIGEgcGFyZW50J3MpIHByb3RvdHlwZVxuXHRcdCAqICB0byBpbmhlcml0IHRoZSBwYXJlbnQncyBwcm9wZXJ0aWVzLCBtYWtlIHN1cmUgdG8gY2FsbFxuXHRcdCAqICBQYXJlbnQuY2FsbCh0aGlzKSBpbiB0aGUgY2hpbGQncyBjb25zdHJ1Y3RvclxuXHRcdCAqXG5cdFx0ICogIGJhc2VkIG9uIGNsb3N1cmUgbGlicmFyeSdzIGluaGVyaXQgZnVuY3Rpb25cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSBcdGNoaWxkXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gcGFyZW50IChvcHRpb25hbCkgcGFyZW50IHRvIGluaGVyaXQgZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBubyBwYXJlbnQgaXMgc3VwcGxpZWQsIHRoZSBjaGlsZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGluaGVyaXQgZnJvbSBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmV4dGVuZCA9IGZ1bmN0aW9uIChjaGlsZCwgcGFyZW50KSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihwYXJlbnQpKSB7XG5cdCAgICAgICAgICAgIHBhcmVudCA9IFRvbmU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIFRlbXBDb25zdHJ1Y3RvcigpIHtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVGVtcENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7XG5cdCAgICAgICAgY2hpbGQucHJvdG90eXBlID0gbmV3IFRlbXBDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIC8qKiBAb3ZlcnJpZGUgKi9cblx0ICAgICAgICBjaGlsZC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjaGlsZDtcblx0ICAgICAgICBjaGlsZC5fc3VwZXIgPSBwYXJlbnQ7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0Q09OVEVYVFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUHJpdmF0ZSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHR5cGUge0F1ZGlvQ29udGV4dH1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBhdWRpb0NvbnRleHQgPSBudWxsO1xuXHQgICAgLyoqXG5cdFx0ICogIEEgc3RhdGljIHBvaW50ZXIgdG8gdGhlIGF1ZGlvIGNvbnRleHQgYWNjZXNzaWJsZSBhcyBUb25lLmNvbnRleHQuXG5cdFx0ICogIEB0eXBlIHtUb25lLkNvbnRleHR9XG5cdFx0ICogIEBuYW1lIGNvbnRleHRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLCAnY29udGV4dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGF1ZGlvQ29udGV4dDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuQ29udGV4dCAmJiBjb250ZXh0IGluc3RhbmNlb2YgVG9uZS5Db250ZXh0KSB7XG5cdCAgICAgICAgICAgICAgICBhdWRpb0NvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYXVkaW9Db250ZXh0ID0gbmV3IFRvbmUuQ29udGV4dChjb250ZXh0KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL2luaXRpYWxpemUgdGhlIG5ldyBhdWRpbyBjb250ZXh0XG5cdCAgICAgICAgICAgIFRvbmUuQ29udGV4dC5lbWl0KCdpbml0JywgYXVkaW9Db250ZXh0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEB0eXBlIHtUb25lLkNvbnRleHR9XG5cdFx0ICogIEBuYW1lIGNvbnRleHRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUjXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUucHJvdG90eXBlLCAnY29udGV4dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuY29udGV4dDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUb25lIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhIGNvbnRleHQgb24gaW5pdCwgYnV0IGlmIHlvdSBhcmUgd29ya2luZ1xuXHRcdCAqICB3aXRoIG90aGVyIGxpYnJhcmllcyB3aGljaCBhbHNvIGNyZWF0ZSBhbiBBdWRpb0NvbnRleHQsIGl0IGNhbiBiZVxuXHRcdCAqICB1c2VmdWwgdG8gc2V0IHlvdXIgb3duLiBJZiB5b3UgYXJlIGdvaW5nIHRvIHNldCB5b3VyIG93biBjb250ZXh0LFxuXHRcdCAqICBiZSBzdXJlIHRvIGRvIGl0IGF0IHRoZSBzdGFydCBvZiB5b3VyIGNvZGUsIGJlZm9yZSBjcmVhdGluZyBhbnkgb2JqZWN0cy5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcGFyYW0ge0F1ZGlvQ29udGV4dH0gY3R4IFRoZSBuZXcgYXVkaW8gY29udGV4dCB0byBzZXRcblx0XHQgKi9cblx0ICAgIFRvbmUuc2V0Q29udGV4dCA9IGZ1bmN0aW9uIChjdHgpIHtcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBjdHg7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVRUUklCVVRFU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBzZWNvbmRzIG9mIDEgcHJvY2Vzc2luZyBibG9jayAoMTI4IHNhbXBsZXMpXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIGJsb2NrVGltZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUucHJvdG90eXBlLCAnYmxvY2tUaW1lJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gMTI4IC8gdGhpcy5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGR1cmF0aW9uIGluIHNlY29uZHMgb2Ygb25lIHNhbXBsZS5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2FtcGxlVGltZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUucHJvdG90eXBlLCAnc2FtcGxlVGltZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIDEgLyB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGV0aGVyIG9yIG5vdCBhbGwgdGhlIHRlY2hub2xvZ2llcyB0aGF0IFRvbmUuanMgcmVsaWVzIG9uIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3Nlci5cblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBuYW1lIHN1cHBvcnRlZFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUsICdzdXBwb3J0ZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBoYXNBdWRpb0NvbnRleHQgPSB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ0F1ZGlvQ29udGV4dCcpIHx8IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnd2Via2l0QXVkaW9Db250ZXh0Jyk7XG5cdCAgICAgICAgICAgIHZhciBoYXNQcm9taXNlcyA9IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnUHJvbWlzZScpO1xuXHQgICAgICAgICAgICB2YXIgaGFzV29ya2VycyA9IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnV29ya2VyJyk7XG5cdCAgICAgICAgICAgIHJldHVybiBoYXNBdWRpb0NvbnRleHQgJiYgaGFzUHJvbWlzZXMgJiYgaGFzV29ya2Vycztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBCb29sZWFuIHZhbHVlIGlmIHRoZSBhdWRpbyBjb250ZXh0IGhhcyBiZWVuIGluaXRpYWxpemVkLlxuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbmFtZSBpbml0aWFsaXplZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUsICdpbml0aWFsaXplZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGF1ZGlvQ29udGV4dCAhPT0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGNvbnRleHQgd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIHJlc29sdmUgIENhbGxiYWNrIHdoZW4gdGhlIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWRcblx0XHQgKiAgQHJldHVybiAge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLmdldENvbnRleHQgPSBmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHQgICAgICAgIGlmIChUb25lLmluaXRpYWxpemVkKSB7XG5cdCAgICAgICAgICAgIHJlc29sdmUoVG9uZS5jb250ZXh0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgcmVzQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXNvbHZlKFRvbmUuY29udGV4dCk7XG5cdCAgICAgICAgICAgICAgICBUb25lLkNvbnRleHQub2ZmKCdpbml0JywgcmVzQ2FsbGJhY2spO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCByZXNDYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB2ZXJzaW9uIG51bWJlclxuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS52ZXJzaW9uID0gJ3IxMic7XG5cdCAgICByZXR1cm4gVG9uZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRW1pdHRlciBnaXZlcyBjbGFzc2VzIHdoaWNoIGV4dGVuZCBpdFxuXHRcdCAqICAgICAgICAgdGhlIGFiaWxpdHkgdG8gbGlzdGVuIGZvciBhbmQgZW1pdCBldmVudHMuXG5cdFx0ICogICAgICAgICBJbnNwaXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZyb20gSmVyb21lIEV0aWVubmUncyBbTWljcm9FdmVudF0oaHR0cHM6Ly9naXRodWIuY29tL2plcm9tZWV0aWVubmUvbWljcm9ldmVudC5qcykuXG5cdFx0ICogICAgICAgICBNSVQgKGMpIDIwMTEgSmVyb21lIEV0aWVubmUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENvbnRhaW5zIGFsbCBvZiB0aGUgZXZlbnRzLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSB7fTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVtaXR0ZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIEJpbmQgYSBjYWxsYmFjayB0byBhIHNwZWNpZmljIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIGV2ZW50ICAgICBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gbGlzdGVuIGZvci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCBpcyBlbWl0dGVkXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9zcGxpdCB0aGUgZXZlbnRcblx0ICAgICAgICB2YXIgZXZlbnRzID0gZXZlbnQuc3BsaXQoL1xcVysvKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnROYW1lID0gZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnROYW1lXSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudE5hbWVdLnB1c2goY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQmluZCBhIGNhbGxiYWNrIHdoaWNoIGlzIG9ubHkgaW52b2tlZCBvbmNlXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgZXZlbnQgICAgIFRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBsaXN0ZW4gZm9yLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50IGlzIGVtaXR0ZWRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBjYWxsYmFjaykge1xuXHQgICAgICAgIHZhciBib3VuZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvL2ludm9rZSB0aGUgY2FsbGJhY2tcblx0ICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgdGhpcy5vZmYoZXZlbnQsIGJvdW5kQ2FsbGJhY2spO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm9uKGV2ZW50LCBib3VuZENhbGxiYWNrKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lci5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBldmVudCAgICAgVGhlIGV2ZW50IHRvIHN0b3AgbGlzdGVuaW5nIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHdoaWNoIHdhcyBib3VuZCB0b1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZXZlbnQgd2l0aCBUb25lLkVtaXR0ZXIub24uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vIGNhbGxiYWNrIGlzIGdpdmVuLCBhbGwgY2FsbGJhY2tzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50cyBhcmUgcmVtb3ZlZC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50cyA9IGV2ZW50LnNwbGl0KC9cXFcrLyk7XG5cdCAgICAgICAgZm9yICh2YXIgZXYgPSAwOyBldiA8IGV2ZW50cy5sZW5ndGg7IGV2KyspIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSBldmVudHNbZXZdO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihjYWxsYmFjaykpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnRdID0gW107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBldmVudExpc3QgPSB0aGlzLl9ldmVudHNbZXZlbnRdO1xuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudExpc3RbaV0gPT09IGNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudExpc3Quc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2UgYWxsIG9mIHRoZSBjYWxsYmFja3MgYm91bmQgdG8gdGhlIGV2ZW50XG5cdFx0ICogIHdpdGggYW55IGFyZ3VtZW50cyBwYXNzZWQgaW4uXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGV2ZW50ICBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJncy4uLiBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9ucyBsaXN0ZW5pbmcuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzKSB7XG5cdCAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5zbGljZSgxKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShldmVudCkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldmVudExpc3QgPSB0aGlzLl9ldmVudHNbZXZlbnRdLnNsaWNlKDApO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV2ZW50TGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50TGlzdFtpXS5hcHBseSh0aGlzLCBhcmdzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIEVtaXR0ZXIgZnVuY3Rpb25zIChvbi9vZmYvZW1pdCkgdG8gdGhlIG9iamVjdFxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R8RnVuY3Rpb259ICBvYmplY3QgIFRoZSBvYmplY3Qgb3IgY2xhc3MgdG8gZXh0ZW5kLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLm1peGluID0gZnVuY3Rpb24gKG9iamVjdCkge1xuXHQgICAgICAgIHZhciBmdW5jdGlvbnMgPSBbXG5cdCAgICAgICAgICAgICdvbicsXG5cdCAgICAgICAgICAgICdvbmNlJyxcblx0ICAgICAgICAgICAgJ29mZicsXG5cdCAgICAgICAgICAgICdlbWl0J1xuXHQgICAgICAgIF07XG5cdCAgICAgICAgb2JqZWN0Ll9ldmVudHMgPSB7fTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZnVuYyA9IGZ1bmN0aW9uc1tpXTtcblx0ICAgICAgICAgICAgdmFyIGVtaXR0ZXJGdW5jID0gVG9uZS5FbWl0dGVyLnByb3RvdHlwZVtmdW5jXTtcblx0ICAgICAgICAgICAgb2JqZWN0W2Z1bmNdID0gZW1pdHRlckZ1bmM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lLkVtaXR0ZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkVtaXR0ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRW1pdHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgVGltZWxpbmUgY2xhc3MgZm9yIHNjaGVkdWxpbmcgYW5kIG1haW50YWluaW5nIHN0YXRlXG5cdFx0ICogICAgICAgICBhbG9uZyBhIHRpbWVsaW5lLiBBbGwgZXZlbnRzIG11c3QgaGF2ZSBhIFwidGltZVwiIHByb3BlcnR5LlxuXHRcdCAqICAgICAgICAgSW50ZXJuYWxseSwgZXZlbnRzIGFyZSBzdG9yZWQgaW4gdGltZSBvcmRlciBmb3IgZmFzdFxuXHRcdCAqICAgICAgICAgcmV0cmlldmFsLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gW21lbW9yeT1JbmZpbml0eV0gVGhlIG51bWJlciBvZiBwcmV2aW91cyBldmVudHMgdGhhdCBhcmUgcmV0YWluZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnbWVtb3J5J10sIFRvbmUuVGltZWxpbmUpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXJyYXkgb2Ygc2NoZWR1bGVkIHRpbWVsaW5lIGV2ZW50c1xuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1lbW9yeSBvZiB0aGUgdGltZWxpbmUsIGkuZS5cblx0XHRcdCAqICBob3cgbWFueSBldmVudHMgaW4gdGhlIHBhc3QgaXQgd2lsbCByZXRhaW5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1lbW9yeSA9IG9wdGlvbnMubWVtb3J5O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZWxpbmUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUuZGVmYXVsdHMgPSB7ICdtZW1vcnknOiBJbmZpbml0eSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaW1lbGluZSNcblx0XHQgKiAgQG5hbWUgbGVuZ3RoXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGltZWxpbmUucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmUubGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEluc2VydCBhbiBldmVudCBvYmplY3Qgb250byB0aGUgdGltZWxpbmUuIEV2ZW50cyBtdXN0IGhhdmUgYSBcInRpbWVcIiBhdHRyaWJ1dGUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgb2JqZWN0IHRvIGluc2VydCBpbnRvIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAvL3RoZSBldmVudCBuZWVkcyB0byBoYXZlIGEgdGltZSBhdHRyaWJ1dGVcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKGV2ZW50LnRpbWUpKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5UaW1lbGluZTogZXZlbnRzIG11c3QgaGF2ZSBhIHRpbWUgYXR0cmlidXRlJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGV2ZW50LnRpbWUgPSBldmVudC50aW1lLnZhbHVlT2YoKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2goZXZlbnQudGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuc3BsaWNlKGluZGV4ICsgMSwgMCwgZXZlbnQpO1xuXHQgICAgICAgIC8vaWYgdGhlIGxlbmd0aCBpcyBtb3JlIHRoYW4gdGhlIG1lbW9yeSwgcmVtb3ZlIHRoZSBwcmV2aW91cyBvbmVzXG5cdCAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gdGhpcy5tZW1vcnkpIHtcblx0ICAgICAgICAgICAgdmFyIGRpZmYgPSB0aGlzLmxlbmd0aCAtIHRoaXMubWVtb3J5O1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZS5zcGxpY2UoMCwgZGlmZik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgb2JqZWN0IHRvIHJlbW92ZSBmcm9tIHRoZSBsaXN0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fdGltZWxpbmUuaW5kZXhPZihldmVudCk7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZS5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBuZWFyZXN0IGV2ZW50IHdob3NlIHRpbWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGV2ZW50IG9iamVjdCBzZXQgYWZ0ZXIgdGhhdCB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHRpbWUsIGNvbXBhcmF0b3IpIHtcblx0ICAgICAgICBjb21wYXJhdG9yID0gVG9uZS5kZWZhdWx0QXJnKGNvbXBhcmF0b3IsICd0aW1lJyk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUsIGNvbXBhcmF0b3IpO1xuXHQgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4XTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZmlyc3QgZXZlbnQgaW4gdGhlIHRpbWVsaW5lIHdpdGhvdXQgcmVtb3ZpbmcgaXRcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGZpcnN0IGV2ZW50IG9iamVjdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbMF07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZmlyc3QgZXZlbnQgaW4gdGhlIHRpbWVsaW5lIGFuZCByZW1vdmUgaXRcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGZpcnN0IGV2ZW50IG9iamVjdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuc2hpZnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lLnNoaWZ0KCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgZXZlbnQgd2hpY2ggaXMgc2NoZWR1bGVkIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGV2ZW50IG9iamVjdCBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZ2V0QWZ0ZXIgPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSwgY29tcGFyYXRvcik7XG5cdCAgICAgICAgaWYgKGluZGV4ICsgMSA8IHRoaXMuX3RpbWVsaW5lLmxlbmd0aCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXggKyAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgZXZlbnQgYmVmb3JlIHRoZSBldmVudCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGNvbXBhcmF0b3IgV2hpY2ggdmFsdWUgaW4gdGhlIG9iamVjdCB0byBjb21wYXJlXG5cdFx0ICogIEByZXR1cm5zIHtPYmplY3R9IFRoZSBldmVudCBvYmplY3QgYmVmb3JlIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5nZXRCZWZvcmUgPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgbGVuID0gdGhpcy5fdGltZWxpbmUubGVuZ3RoO1xuXHQgICAgICAgIC8vaWYgaXQncyBhZnRlciB0aGUgbGFzdCBpdGVtLCByZXR1cm4gdGhlIGxhc3QgaXRlbVxuXHQgICAgICAgIGlmIChsZW4gPiAwICYmIHRoaXMuX3RpbWVsaW5lW2xlbiAtIDFdW2NvbXBhcmF0b3JdIDwgdGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbbGVuIC0gMV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lLCBjb21wYXJhdG9yKTtcblx0ICAgICAgICBpZiAoaW5kZXggLSAxID49IDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4IC0gMV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgZXZlbnRzIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lLmxlbmd0aCA+IDEpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKGFmdGVyKTtcblx0ICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVtpbmRleF0udGltZSA9PT0gYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL2dldCB0aGUgZmlyc3QgaXRlbSB3aXRoIHRoYXQgdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW2ldLnRpbWUgPT09IGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IHRoaXMuX3RpbWVsaW5lLnNsaWNlKDAsIGluZGV4KTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSB0aGlzLl90aW1lbGluZS5zbGljZSgwLCBpbmRleCArIDEpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBbXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGltZWxpbmUubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgICAgIC8vdGhlIGZpcnN0IGl0ZW0ncyB0aW1lXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVswXS50aW1lID49IGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgZXZlbnRzIGJlZm9yZSBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gY2FuY2VsIGJlZm9yZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmNhbmNlbEJlZm9yZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gdGhpcy5fdGltZWxpbmUuc2xpY2UoaW5kZXggKyAxKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgcHJldmlvdXMgZXZlbnQgaWYgdGhlcmUgaXMgb25lLiBudWxsIG90aGVyd2lzZVxuXHRcdCAqIEBwYXJhbSAge09iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHRvIGZpbmQgdGhlIHByZXZpb3VzIG9uZSBvZlxuXHRcdCAqIEByZXR1cm4ge09iamVjdH0gICAgICAgVGhlIGV2ZW50IHJpZ2h0IGJlZm9yZSB0aGUgZ2l2ZW4gZXZlbnRcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLnByZXZpb3VzRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl90aW1lbGluZS5pbmRleE9mKGV2ZW50KTtcblx0ICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtpbmRleCAtIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRG9lcyBhIGJpbmFyeSBzZWFyY2ggb24gdGhlIHRpbWVsaW5lIGFycmF5IGFuZCByZXR1cm5zIHRoZVxuXHRcdCAqICBuZWFyZXN0IGV2ZW50IGluZGV4IHdob3NlIHRpbWUgaXMgYWZ0ZXIgb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIElmIGEgdGltZSBpcyBzZWFyY2hlZCBiZWZvcmUgdGhlIGZpcnN0IGluZGV4IGluIHRoZSB0aW1lbGluZSwgLTEgaXMgcmV0dXJuZWQuXG5cdFx0ICogIElmIHRoZSB0aW1lIGlzIGFmdGVyIHRoZSBlbmQsIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBpdGVtIGlzIHJldHVybmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGNvbXBhcmF0b3IgV2hpY2ggdmFsdWUgaW4gdGhlIG9iamVjdCB0byBjb21wYXJlXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9IHRoZSBpbmRleCBpbiB0aGUgdGltZWxpbmUgYXJyYXlcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLl9zZWFyY2ggPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGlmICh0aGlzLl90aW1lbGluZS5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb21wYXJhdG9yID0gVG9uZS5kZWZhdWx0QXJnKGNvbXBhcmF0b3IsICd0aW1lJyk7XG5cdCAgICAgICAgdmFyIGJlZ2lubmluZyA9IDA7XG5cdCAgICAgICAgdmFyIGxlbiA9IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDtcblx0ICAgICAgICB2YXIgZW5kID0gbGVuO1xuXHQgICAgICAgIGlmIChsZW4gPiAwICYmIHRoaXMuX3RpbWVsaW5lW2xlbiAtIDFdW2NvbXBhcmF0b3JdIDw9IHRpbWUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGxlbiAtIDE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHdoaWxlIChiZWdpbm5pbmcgPCBlbmQpIHtcblx0ICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBtaWRwb2ludCBmb3Igcm91Z2hseSBlcXVhbCBwYXJ0aXRpb25cblx0ICAgICAgICAgICAgdmFyIG1pZFBvaW50ID0gTWF0aC5mbG9vcihiZWdpbm5pbmcgKyAoZW5kIC0gYmVnaW5uaW5nKSAvIDIpO1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl90aW1lbGluZVttaWRQb2ludF07XG5cdCAgICAgICAgICAgIHZhciBuZXh0RXZlbnQgPSB0aGlzLl90aW1lbGluZVttaWRQb2ludCArIDFdO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnRbY29tcGFyYXRvcl0gPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIC8vY2hvb3NlIHRoZSBsYXN0IG9uZSB0aGF0IGhhcyB0aGUgc2FtZSB0aW1lXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gbWlkUG9pbnQ7IGkgPCB0aGlzLl90aW1lbGluZS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0ZXN0RXZlbnQgPSB0aGlzLl90aW1lbGluZVtpXTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGVzdEV2ZW50W2NvbXBhcmF0b3JdID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG1pZFBvaW50ID0gaTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbWlkUG9pbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRbY29tcGFyYXRvcl0gPCB0aW1lICYmIG5leHRFdmVudFtjb21wYXJhdG9yXSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBtaWRQb2ludDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFtjb21wYXJhdG9yXSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIC8vc2VhcmNoIGxvd2VyXG5cdCAgICAgICAgICAgICAgICBlbmQgPSBtaWRQb2ludDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vc2VhcmNoIHVwcGVyXG5cdCAgICAgICAgICAgICAgICBiZWdpbm5pbmcgPSBtaWRQb2ludCArIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBpdGVyYXRvci4gQXBwbGllcyBleHRyYSBzYWZldHkgY2hlY2tzIGZvclxuXHRcdCAqICByZW1vdmluZyBpdGVtcyBmcm9tIHRoZSBhcnJheS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFja1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSAgICBsb3dlckJvdW5kXG5cdFx0ICogIEBwYXJhbSAge051bWJlcj19ICAgIHVwcGVyQm91bmRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLl9pdGVyYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBsb3dlckJvdW5kLCB1cHBlckJvdW5kKSB7XG5cdCAgICAgICAgbG93ZXJCb3VuZCA9IFRvbmUuZGVmYXVsdEFyZyhsb3dlckJvdW5kLCAwKTtcblx0ICAgICAgICB1cHBlckJvdW5kID0gVG9uZS5kZWZhdWx0QXJnKHVwcGVyQm91bmQsIHRoaXMuX3RpbWVsaW5lLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNsaWNlKGxvd2VyQm91bmQsIHVwcGVyQm91bmQgKyAxKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXlcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2spO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYXQgb3IgYmVmb3JlIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEJlZm9yZSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciB1cHBlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmICh1cHBlckJvdW5kICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCAwLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hBZnRlciA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciBsb3dlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIGxvd2VyQm91bmQgKyAxKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGJldHdlZW4gdGhlIHN0YXJ0VGltZSBhbmQgZW5kVGltZS4gXG5cdFx0ICogIFRoZSB0aW1lcmFuZ2UgaXMgaW5jbHVzaXZlIG9mIHRoZSBzdGFydFRpbWUsIGJ1dCBleGNsdXNpdmUgb2YgdGhlIGVuZFRpbWUuIFxuXHRcdCAqICByYW5nZSA9IFtzdGFydFRpbWUsIGVuZFRpbWUpLiBcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgc3RhcnRUaW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgZW5kVGltZSBUaGUgZW5kIG9mIHRoZSB0ZXN0IGludGVydmFsLiBcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEJldHdlZW4gPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHZhciBsb3dlckJvdW5kID0gdGhpcy5fc2VhcmNoKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlzLl9zZWFyY2goZW5kVGltZSk7XG5cdCAgICAgICAgaWYgKGxvd2VyQm91bmQgIT09IC0xICYmIHVwcGVyQm91bmQgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90aW1lbGluZVtsb3dlckJvdW5kXS50aW1lICE9PSBzdGFydFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGxvd2VyQm91bmQgKz0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL2V4Y2x1c2l2ZSBvZiB0aGUgZW5kIHRpbWVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW3VwcGVyQm91bmRdLnRpbWUgPT09IGVuZFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIHVwcGVyQm91bmQgLT0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCBsb3dlckJvdW5kLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGxvd2VyQm91bmQgPT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIDAsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGF0IG9yIGFmdGVyIHRoZSBnaXZlbiB0aW1lLiBTaW1pbGFyIHRvXG5cdFx0ICogIGZvckVhY2hBZnRlciwgYnV0IGluY2x1ZGVzIHRoZSBpdGVtKHMpIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEZyb20gPSBmdW5jdGlvbiAodGltZSwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL2l0ZXJhdGUgb3ZlciB0aGUgaXRlbXMgaW4gcmV2ZXJzZSBzbyB0aGF0IHJlbW92aW5nIGFuIGl0ZW0gZG9lc24ndCBicmVhayB0aGluZ3Ncblx0ICAgICAgICB2YXIgbG93ZXJCb3VuZCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICAvL3dvcmsgYmFja3dhcmRzIHVudGlsIHRoZSBldmVudCB0aW1lIGlzIGxlc3MgdGhhbiB0aW1lXG5cdCAgICAgICAgd2hpbGUgKGxvd2VyQm91bmQgPj0gMCAmJiB0aGlzLl90aW1lbGluZVtsb3dlckJvdW5kXS50aW1lID49IHRpbWUpIHtcblx0ICAgICAgICAgICAgbG93ZXJCb3VuZC0tO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9pdGVyYXRlKGNhbGxiYWNrLCBsb3dlckJvdW5kICsgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciB1cHBlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGlmICh1cHBlckJvdW5kICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pdGVyYXRlKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRpbWUgPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSwgMCwgdXBwZXJCb3VuZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZWxpbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghd2luZG93Lmhhc093blByb3BlcnR5KCdPZmZsaW5lQXVkaW9Db250ZXh0JykgJiYgd2luZG93Lmhhc093blByb3BlcnR5KCd3ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0JykpIHtcblx0ICAgICAgICAgICAgd2luZG93Lk9mZmxpbmVBdWRpb0NvbnRleHQgPSB3aW5kb3cud2Via2l0T2ZmbGluZUF1ZGlvQ29udGV4dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yZXR1cm5zIHByb21pc2U/XG5cdCAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgT2ZmbGluZUF1ZGlvQ29udGV4dCgxLCAxLCA0NDEwMCk7XG5cdCAgICAgICAgdmFyIHJldCA9IGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTtcblx0ICAgICAgICBpZiAoIShyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuXHQgICAgICAgICAgICBPZmZsaW5lQXVkaW9Db250ZXh0LnByb3RvdHlwZS5fbmF0aXZlX3N0YXJ0UmVuZGVyaW5nID0gT2ZmbGluZUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuc3RhcnRSZW5kZXJpbmc7XG5cdCAgICAgICAgICAgIE9mZmxpbmVBdWRpb0NvbnRleHQucHJvdG90eXBlLnN0YXJ0UmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChkb25lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlLnJlbmRlcmVkQnVmZmVyKTtcblx0ICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX25hdGl2ZV9zdGFydFJlbmRlcmluZygpO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghd2luZG93Lmhhc093blByb3BlcnR5KCdBdWRpb0NvbnRleHQnKSAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3dlYmtpdEF1ZGlvQ29udGV4dCcpKSB7XG5cdCAgICAgICAgICAgIHdpbmRvdy5BdWRpb0NvbnRleHQgPSB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL25vdCBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgYnV0IG9ubHkgYW4gQVBJIHBsYWNlaG9sZGVyXG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNsb3NlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0Z1bmN0aW9uKHRoaXMuc3VzcGVuZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnN1c3BlbmQoKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9ub3QgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnRcblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUucmVzdW1lKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NyZWF0ZUdhaW5cblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2FpbiAmJiBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUdhaW5Ob2RlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2FpbiA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2Fpbk5vZGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY3JlYXRlRGVsYXlcblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlRGVsYXkgJiYgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheU5vZGUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheSA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlRGVsYXlOb2RlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3Rlc3QgZGVjb2RlQXVkaW9EYXRhIHJldHVybnMgYSBwcm9taXNlXG5cdCAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vaGF5b25hby93ZWItYXVkaW8tYXBpLXNoaW0vYmxvYi9tYXN0ZXIvc3JjL0F1ZGlvQ29udGV4dC5qc1xuXHQgICAgICAgIC8vIE1JVCBMaWNlbnNlIChjKSAyMDE1IEBtb2hheW9uYW9cblx0ICAgICAgICB2YXIgZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSA9IGZhbHNlO1xuXHQgICAgICAgIHZhciBvZmZsaW5lQ29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDEsIDEsIDQ0MTAwKTtcblx0ICAgICAgICB2YXIgYXVkaW9EYXRhID0gbmV3IFVpbnQzMkFycmF5KFtcblx0ICAgICAgICAgICAgMTE3OTAxMTQxMCxcblx0ICAgICAgICAgICAgNDgsXG5cdCAgICAgICAgICAgIDExNjMyODA3MjcsXG5cdCAgICAgICAgICAgIDU0NDUwMTA5NCxcblx0ICAgICAgICAgICAgMTYsXG5cdCAgICAgICAgICAgIDEzMTA3Myxcblx0ICAgICAgICAgICAgNDQxMDAsXG5cdCAgICAgICAgICAgIDE3NjQwMCxcblx0ICAgICAgICAgICAgMTA0ODU4MCxcblx0ICAgICAgICAgICAgMTYzNTAxNzA2MCxcblx0ICAgICAgICAgICAgOCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMFxuXHQgICAgICAgIF0pLmJ1ZmZlcjtcblx0ICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICB2YXIgcmV0ID0gb2ZmbGluZUNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKGF1ZGlvRGF0YSk7XG5cdCAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdCAgICAgICAgICAgICAgICBkZWNvZGVBdWRpb0RhdGFQcm9taXNlID0gdHJ1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSA9IGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIWRlY29kZUF1ZGlvRGF0YVByb21pc2UpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5fbmF0aXZlX2RlY29kZUF1ZGlvRGF0YSA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuZGVjb2RlQXVkaW9EYXRhO1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmRlY29kZUF1ZGlvRGF0YSA9IGZ1bmN0aW9uIChhdWRpb0RhdGEpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoc3VjY2VzcywgZXJyb3IpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9uYXRpdmVfZGVjb2RlQXVkaW9EYXRhKGF1ZGlvRGF0YSwgc3VjY2VzcywgZXJyb3IpO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBBdWRpb0NvbnRleHQuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICogIEBwYXJhbSB7QXVkaW9Db250ZXh0PX0gY29udGV4dCBvcHRpb25hbGx5IHBhc3MgaW4gYSBjb250ZXh0XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydjb250ZXh0J10sIFRvbmUuQ29udGV4dCk7XG5cdCAgICAgICAgaWYgKCFvcHRpb25zLmNvbnRleHQpIHtcblx0ICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0ID0gbmV3IHdpbmRvdy5BdWRpb0NvbnRleHQoKTtcblx0ICAgICAgICAgICAgaWYgKCFvcHRpb25zLmNvbnRleHQpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGNyZWF0ZSBBdWRpb0NvbnRleHQuIFBvc3NpYmx5IHRvbyBtYW55IEF1ZGlvQ29udGV4dHMgcnVubmluZyBhbHJlYWR5LicpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2NvbnRleHQgPSBvcHRpb25zLmNvbnRleHQ7XG5cdCAgICAgICAgLy8gZXh0ZW5kIGFsbCBvZiB0aGUgbWV0aG9kc1xuXHQgICAgICAgIGZvciAodmFyIHByb3AgaW4gdGhpcy5fY29udGV4dCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZWZpbmVQcm9wZXJ0eSh0aGlzLl9jb250ZXh0LCBwcm9wKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlZmF1bHQgbGF0ZW5jeSBoaW50XG5cdFx0XHQgKiAgQHR5cGUgIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xhdGVuY3lIaW50ID0gb3B0aW9ucy5sYXRlbmN5SGludDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBvYmplY3QgY29udGFpbmluZyBhbGwgb2YgdGhlIGNvbnN0YW50cyBBdWRpb0J1ZmZlclNvdXJjZU5vZGVzXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IHt9O1xuXHQgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgLy8gV09SS0VSXG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgZXZlbnRzIGFyZSBzY2hlZHVsZWRcblx0XHRcdCAqICBpbnRvIHRoZSBmdXR1cmVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG9va0FoZWFkID0gb3B0aW9ucy5sb29rQWhlYWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSByZWZlcmVuY2UgdG8gdGhlIGFjdHVhbCBjb21wdXRlZCB1cGRhdGUgaW50ZXJ2YWxcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29tcHV0ZWRVcGRhdGVJbnRlcnZhbCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSByZWxpYWJsZSBjYWxsYmFjayBtZXRob2Rcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7VGlja2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGlja2VyID0gbmV3IFRpY2tlcih0aGlzLmVtaXQuYmluZCh0aGlzLCAndGljaycpLCBvcHRpb25zLmNsb2NrU291cmNlLCBvcHRpb25zLnVwZGF0ZUludGVydmFsKTtcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8vIFRJTUVPVVRTXG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIHNldFRpbWVvdXQgZXZlbnRzLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZW91dHMgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0aW1lb3V0IGlkIGNvdW50ZXJcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lb3V0SWRzID0gMDtcblx0ICAgICAgICB0aGlzLm9uKCd0aWNrJywgdGhpcy5fdGltZW91dExvb3AuYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Db250ZXh0LCBUb25lLkVtaXR0ZXIpO1xuXHQgICAgVG9uZS5FbWl0dGVyLm1peGluKFRvbmUuQ29udGV4dCk7XG5cdCAgICAvKipcblx0XHQgKiBkZWZhdWx0c1xuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdjbG9ja1NvdXJjZSc6ICd3b3JrZXInLFxuXHQgICAgICAgICdsYXRlbmN5SGludCc6ICdpbnRlcmFjdGl2ZScsXG5cdCAgICAgICAgJ2xvb2tBaGVhZCc6IDAuMSxcblx0ICAgICAgICAndXBkYXRlSW50ZXJ2YWwnOiAwLjAzXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmluZSBhIHByb3BlcnR5IG9uIHRoaXMgVG9uZS5Db250ZXh0LlxuXHRcdCAqICBUaGlzIGlzIHVzZWQgdG8gZXh0ZW5kIHRoZSBuYXRpdmUgQXVkaW9Db250ZXh0XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvQ29udGV4dH0gIGNvbnRleHRcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgcHJvcFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5fZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoY29udGV4dCwgcHJvcCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpc1twcm9wXSkpIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3AsIHtcblx0ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGV4dFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXS5iaW5kKGNvbnRleHQpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjb250ZXh0W3Byb3BdID0gdmFsO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IGF1ZGlvIGNvbnRleHQgdGltZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQuY3VycmVudFRpbWUgKyB0aGlzLmxvb2tBaGVhZDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUHJvbWlzZSB3aGljaCBpcyBpbnZva2VkIHdoZW4gdGhlIGNvbnRleHQgaXMgcnVubmluZy5cblx0XHQgKiAgVHJpZXMgdG8gcmVzdW1lIHRoZSBjb250ZXh0IGlmIGl0J3Mgbm90IHN0YXJ0ZWQuXG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5yZWFkeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGRvbmUpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQuc3RhdGUgPT09ICdydW5uaW5nJykge1xuXHQgICAgICAgICAgICAgICAgZG9uZSgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5yZXN1bWUoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFByb21pc2Ugd2hpY2ggaXMgaW52b2tlZCB3aGVuIHRoZSBjb250ZXh0IGlzIHJ1bm5pbmcuXG5cdFx0ICogIFRyaWVzIHRvIHJlc3VtZSB0aGUgY29udGV4dCBpZiBpdCdzIG5vdCBzdGFydGVkLlxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQuY2xvc2UoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgVG9uZS5Db250ZXh0LmVtaXQoJ2Nsb3NlJywgdGhpcyk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2VuZXJhdGUgYSBsb29wZWQgYnVmZmVyIGF0IHNvbWUgY29uc3RhbnQgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHZhbFxuXHRcdCAqICBAcmV0dXJuICB7QnVmZmVyU291cmNlTm9kZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuZ2V0Q29uc3RhbnQgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2NvbnN0YW50c1t2YWxdKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25zdGFudHNbdmFsXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5fY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgMTI4LCB0aGlzLl9jb250ZXh0LnNhbXBsZVJhdGUpO1xuXHQgICAgICAgICAgICB2YXIgYXJyID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgYXJyW2ldID0gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBjb25zdGFudCA9IHRoaXMuX2NvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LmNoYW5uZWxDb3VudCA9IDE7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgICAgICBjb25zdGFudC5idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgICAgIGNvbnN0YW50Lmxvb3AgPSB0cnVlO1xuXHQgICAgICAgICAgICBjb25zdGFudC5zdGFydCgwKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzW3ZhbF0gPSBjb25zdGFudDtcblx0ICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByaXZhdGUgbG9vcCB3aGljaCBrZWVwcyB0cmFjayBvZiB0aGUgY29udGV4dCBzY2hlZHVsZWQgdGltZW91dHNcblx0XHQgKiAgSXMgaW52b2tlZCBmcm9tIHRoZSBjbG9jayBzb3VyY2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuX3RpbWVvdXRMb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHdoaWxlICh0aGlzLl90aW1lb3V0cyAmJiB0aGlzLl90aW1lb3V0cy5sZW5ndGggJiYgdGhpcy5fdGltZW91dHMucGVlaygpLnRpbWUgPD0gbm93KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRzLnNoaWZ0KCkuY2FsbGJhY2soKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEEgc2V0VGltZW91dCB3aGljaCBpcyBnYXVyZW50ZWVkIGJ5IHRoZSBjbG9jayBzb3VyY2UuXG5cdFx0ICogIEFsc28gcnVucyBpbiB0aGUgb2ZmbGluZSBjb250ZXh0LlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGZuICAgICAgIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHQgKiAgQHBhcmFtICB7U2Vjb25kc30gICAgdGltZW91dCAgVGhlIHRpbWVvdXQgaW4gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfSBJRCB0byB1c2Ugd2hlbiBpbnZva2luZyBUb25lLkNvbnRleHQuY2xlYXJUaW1lb3V0XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAoZm4sIHRpbWVvdXQpIHtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0SWRzKys7XG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dHMuYWRkKHtcblx0ICAgICAgICAgICAgY2FsbGJhY2s6IGZuLFxuXHQgICAgICAgICAgICB0aW1lOiBub3cgKyB0aW1lb3V0LFxuXHQgICAgICAgICAgICBpZDogdGhpcy5fdGltZW91dElkc1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aW1lb3V0SWRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhcnMgYSBwcmV2aW91c2x5IHNjaGVkdWxlZCB0aW1lb3V0IHdpdGggVG9uZS5jb250ZXh0LnNldFRpbWVvdXRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgaWQgIFRoZSBJRCByZXR1cm5lZCBmcm9tIHNldFRpbWVvdXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ29udGV4dH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24gKGlkKSB7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LmlkID09PSBpZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUoZXZlbnQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEhvdyBvZnRlbiB0aGUgV2ViIFdvcmtlciBjYWxsYmFjayBpcyBpbnZva2VkLlxuXHRcdCAqICBUaGlzIG51bWJlciBjb3JyZXNwb25kcyB0byBob3cgcmVzcG9uc2l2ZSB0aGUgc2NoZWR1bGluZ1xuXHRcdCAqICBjYW4gYmUuIENvbnRleHQudXBkYXRlSW50ZXJ2YWwgKyBDb250ZXh0Lmxvb2tBaGVhZCBnaXZlcyB5b3UgdGhlXG5cdFx0ICogIHRvdGFsIGxhdGVuY3kgYmV0d2VlbiBzY2hlZHVsaW5nIGFuIGV2ZW50IGFuZCBoZWFyaW5nIGl0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db250ZXh0I1xuXHRcdCAqICBAbmFtZSB1cGRhdGVJbnRlcnZhbFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udGV4dC5wcm90b3R5cGUsICd1cGRhdGVJbnRlcnZhbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tlci51cGRhdGVJbnRlcnZhbDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlci51cGRhdGVJbnRlcnZhbCA9IGludGVydmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFdoYXQgdGhlIHNvdXJjZSBvZiB0aGUgY2xvY2sgaXMsIGVpdGhlciBcIndvcmtlclwiIChXZWIgV29ya2VyIFtkZWZhdWx0XSksXG5cdFx0ICogIFwidGltZW91dFwiIChzZXRUaW1lb3V0KSwgb3IgXCJvZmZsaW5lXCIgKG5vbmUpLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db250ZXh0I1xuXHRcdCAqICBAbmFtZSBjbG9ja1NvdXJjZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udGV4dC5wcm90b3R5cGUsICdjbG9ja1NvdXJjZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tlci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHR5cGUgb2YgcGxheWJhY2ssIHdoaWNoIGFmZmVjdHMgdHJhZGVvZmZzIGJldHdlZW4gYXVkaW9cblx0XHQgKiAgb3V0cHV0IGxhdGVuY3kgYW5kIHJlc3BvbnNpdmVuZXNzLlxuXHRcdCAqXG5cdFx0ICogIEluIGFkZGl0aW9uIHRvIHNldHRpbmcgdGhlIHZhbHVlIGluIHNlY29uZHMsIHRoZSBsYXRlbmN5SGludCBhbHNvXG5cdFx0ICogIGFjY2VwdHMgdGhlIHN0cmluZ3MgXCJpbnRlcmFjdGl2ZVwiIChwcmlvcml0aXplcyBsb3cgbGF0ZW5jeSksXG5cdFx0ICogIFwicGxheWJhY2tcIiAocHJpb3JpdGl6ZXMgc3VzdGFpbmVkIHBsYXliYWNrKSwgXCJiYWxhbmNlZFwiIChiYWxhbmNlc1xuXHRcdCAqICBsYXRlbmN5IGFuZCBwZXJmb3JtYW5jZSksIGFuZCBcImZhc3Rlc3RcIiAobG93ZXN0IGxhdGVuY3ksIG1pZ2h0IGdsaXRjaCBtb3JlIG9mdGVuKS5cblx0XHQgKiAgQHR5cGUge1N0cmluZ3xTZWNvbmRzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Db250ZXh0I1xuXHRcdCAqICBAbmFtZSBsYXRlbmN5SGludFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHRoZSBsb29rQWhlYWQgdG8gMC4zIHNlY29uZHNcblx0XHQgKiBUb25lLmNvbnRleHQubGF0ZW5jeUhpbnQgPSAwLjM7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db250ZXh0LnByb3RvdHlwZSwgJ2xhdGVuY3lIaW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGF0ZW5jeUhpbnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChoaW50KSB7XG5cdCAgICAgICAgICAgIHZhciBsb29rQWhlYWQgPSBoaW50O1xuXHQgICAgICAgICAgICB0aGlzLl9sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzU3RyaW5nKGhpbnQpKSB7XG5cdCAgICAgICAgICAgICAgICBzd2l0Y2ggKGhpbnQpIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2ludGVyYWN0aXZlJzpcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjE7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdwbGF5YmFjayc6XG5cdCAgICAgICAgICAgICAgICAgICAgbG9va0FoZWFkID0gMC44O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubGF0ZW5jeUhpbnQgPSBoaW50O1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnYmFsYW5jZWQnOlxuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuMjU7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdmYXN0ZXN0Jzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gJ2ludGVyYWN0aXZlJztcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjAxO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZUludGVydmFsID0gbG9va0FoZWFkIC8gMztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbmxpa2Ugb3RoZXIgZGlzcG9zZSBtZXRob2RzLCB0aGlzIHJldHVybnMgYSBQcm9taXNlXG5cdFx0ICogIHdoaWNoIGV4ZWN1dGVzIHdoZW4gdGhlIGNvbnRleHQgaXMgY2xvc2VkIGFuZCBkaXNwb3NlZFxuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLmNsb3NlKCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrZXIgPSBudWxsO1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lb3V0cy5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRzID0gbnVsbDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY29uIGluIHRoaXMuX2NvbnN0YW50cykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzW2Nvbl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IG51bGw7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgQSBjbGFzcyB3aGljaCBwcm92aWRlcyBhIHJlbGlhYmxlIGNhbGxiYWNrIHVzaW5nIGVpdGhlclxuXHRcdCAqICAgICAgICBhIFdlYiBXb3JrZXIsIG9yIGlmIHRoYXQgaXNuJ3Qgc3VwcG9ydGVkLCBmYWxscyBiYWNrIHRvIHNldFRpbWVvdXQuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBUaWNrZXIgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHR5cGUsIHVwZGF0ZUludGVydmFsKSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBFaXRoZXIgXCJ3b3JrZXJcIiBvciBcInRpbWVvdXRcIlxuXHRcdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB1cGRhdGUgaW50ZXJ2YWwgb2YgdGhlIHdvcmtlclxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl91cGRhdGVJbnRlcnZhbCA9IHVwZGF0ZUludGVydmFsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGNhbGxiYWNrIHRvIGludm9rZSBhdCByZWd1bGFyIGludGVydmFsc1xuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gVG9uZS5kZWZhdWx0QXJnKGNhbGxiYWNrLCBUb25lLm5vT3ApO1xuXHQgICAgICAgIC8vY3JlYXRlIHRoZSBjbG9jayBzb3VyY2UgZm9yIHRoZSBmaXJzdCB0aW1lXG5cdCAgICAgICAgdGhpcy5fY3JlYXRlQ2xvY2soKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcG9zc2libGUgdGlja2VyIHR5cGVzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLlR5cGUgPSB7XG5cdCAgICAgICAgV29ya2VyOiAnd29ya2VyJyxcblx0ICAgICAgICBUaW1lb3V0OiAndGltZW91dCcsXG5cdCAgICAgICAgT2ZmbGluZTogJ29mZmxpbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdlbmVyYXRlIGEgd2ViIHdvcmtlclxuXHRcdCAqICBAcmV0dXJuICB7V2ViV29ya2VyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fY3JlYXRlV29ya2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vVVJMIFNoaW1cblx0ICAgICAgICB3aW5kb3cuVVJMID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xuXHQgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoWy8vdGhlIGluaXRpYWwgdGltZW91dCB0aW1lXG5cdCAgICAgICAgICAgICd2YXIgdGltZW91dFRpbWUgPSAnICsgKHRoaXMuX3VwZGF0ZUludGVydmFsICogMTAwMCkudG9GaXhlZCgxKSArICc7JyArIC8vb25tZXNzYWdlIGNhbGxiYWNrXG5cdCAgICAgICAgICAgICdzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKG1zZyl7JyArICdcXHR0aW1lb3V0VGltZSA9IHBhcnNlSW50KG1zZy5kYXRhKTsnICsgJ307JyArIC8vdGhlIHRpY2sgZnVuY3Rpb24gd2hpY2ggcG9zdHMgYSBtZXNzYWdlXG5cdCAgICAgICAgICAgIC8vYW5kIHNjaGVkdWxlcyBhIG5ldyB0aWNrXG5cdCAgICAgICAgICAgICdmdW5jdGlvbiB0aWNrKCl7JyArICdcXHRzZXRUaW1lb3V0KHRpY2ssIHRpbWVvdXRUaW1lKTsnICsgJ1xcdHNlbGYucG9zdE1lc3NhZ2UoXFwndGlja1xcJyk7JyArICd9JyArIC8vY2FsbCB0aWNrIGluaXRpYWxseVxuXHQgICAgICAgICAgICAndGljaygpOyddKTtcblx0ICAgICAgICB2YXIgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cdCAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoYmxvYlVybCk7XG5cdCAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd29ya2VyID0gd29ya2VyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENyZWF0ZSBhIHRpbWVvdXQgbG9vcFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9jcmVhdGVUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGltZW91dCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9jYWxsYmFjaygpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5fdXBkYXRlSW50ZXJ2YWwgKiAxMDAwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDcmVhdGUgdGhlIGNsb2NrIHNvdXJjZS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fY3JlYXRlQ2xvY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRpY2tlci5UeXBlLldvcmtlcikge1xuXHQgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlV29ya2VyKCk7XG5cdCAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHdvcmtlcnMgbm90IHN1cHBvcnRlZCwgZmFsbGJhY2sgdG8gdGltZW91dFxuXHQgICAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IFRpY2tlci5UeXBlLlRpbWVvdXQ7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVDbG9jaygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUaWNrZXIuVHlwZS5UaW1lb3V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVRpbWVvdXQoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQG1lbWJlck9mIFRpY2tlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHVwZGF0ZUludGVydmFsXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUaWNrZXIucHJvdG90eXBlLCAndXBkYXRlSW50ZXJ2YWwnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVJbnRlcnZhbDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUludGVydmFsID0gTWF0aC5tYXgoaW50ZXJ2YWwsIDEyOCAvIDQ0MTAwKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRpY2tlci5UeXBlLldvcmtlcikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd29ya2VyLnBvc3RNZXNzYWdlKE1hdGgubWF4KGludGVydmFsICogMTAwMCwgMSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgdGlja2VyLCBlaXRoZXIgYSB3b3JrZXIgb3IgYSB0aW1lb3V0XG5cdFx0ICogQG1lbWJlck9mIFRpY2tlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRpY2tlci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGlzcG9zZUNsb2NrKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9jcmVhdGVDbG9jaygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXAgdGhlIGN1cnJlbnQgY2xvY2sgc291cmNlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuX2Rpc3Bvc2VDbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdGltZW91dCkge1xuXHQgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5fd29ya2VyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3dvcmtlci50ZXJtaW5hdGUoKTtcblx0ICAgICAgICAgICAgdGhpcy5fd29ya2VyLm9ubWVzc2FnZSA9IG51bGw7XG5cdCAgICAgICAgICAgIHRoaXMuX3dvcmtlciA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9kaXNwb3NlQ2xvY2soKTtcblx0ICAgICAgICB0aGlzLl9jYWxsYmFjayA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNoaW0gYWxsIGNvbm5lY3QvZGlzY29ubmVjdCBhbmQgc29tZSBkZXByZWNhdGVkIG1ldGhvZHMgd2hpY2ggYXJlIHN0aWxsIGluXG5cdFx0ICogIHNvbWUgb2xkZXIgaW1wbGVtZW50YXRpb25zLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5nZXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbmF0aXZlQ29ubmVjdCA9IEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdDtcblx0ICAgICAgICB2YXIgbmF0aXZlRGlzY29ubmVjdCA9IEF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdDtcblx0ICAgICAgICAvL3JlcGxhY2UgdGhlIG9sZCBjb25uZWN0IG1ldGhvZFxuXHQgICAgICAgIGZ1bmN0aW9uIHRvbmVDb25uZWN0KEIsIG91dE51bSwgaW5OdW0pIHtcblx0ICAgICAgICAgICAgaWYgKEIuaW5wdXQpIHtcblx0ICAgICAgICAgICAgICAgIGluTnVtID0gVG9uZS5kZWZhdWx0QXJnKGluTnVtLCAwKTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkoQi5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0KEIuaW5wdXRbaW5OdW1dKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdChCLmlucHV0LCBvdXROdW0sIGluTnVtKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKEIgaW5zdGFuY2VvZiBBdWRpb05vZGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlQ29ubmVjdC5jYWxsKHRoaXMsIEIsIG91dE51bSwgaW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQjtcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVDb25uZWN0LmNhbGwodGhpcywgQiwgb3V0TnVtKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEI7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXJyb3IgY29ubmVjdGluZyB0byBub2RlOiAnICsgQiArICdcXG4nICsgZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yZXBsYWNlIHRoZSBvbGQgZGlzY29ubmVjdCBtZXRob2Rcblx0ICAgICAgICBmdW5jdGlvbiB0b25lRGlzY29ubmVjdChCLCBvdXROdW0sIGluTnVtKSB7XG5cdCAgICAgICAgICAgIGlmIChCICYmIEIuaW5wdXQgJiYgVG9uZS5pc0FycmF5KEIuaW5wdXQpKSB7XG5cdCAgICAgICAgICAgICAgICBpbk51bSA9IFRvbmUuZGVmYXVsdEFyZyhpbk51bSwgMCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoQi5pbnB1dFtpbk51bV0sIG91dE51bSwgMCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoQiAmJiBCLmlucHV0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoQi5pbnB1dCwgb3V0TnVtLCBpbk51bSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgICAgIG5hdGl2ZURpc2Nvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Vycm9yIGRpc2Nvbm5lY3Rpbmcgbm9kZTogJyArIEIgKyAnXFxuJyArIGUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChBdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3QgIT09IHRvbmVDb25uZWN0KSB7XG5cdCAgICAgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IHRvbmVDb25uZWN0O1xuXHQgICAgICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSB0b25lRGlzY29ubmVjdDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vIHNldCB0aGUgYXVkaW8gY29udGV4dCBpbml0aWFsbHksIGFuZCBpZiBvbmUgaXMgbm90IGFscmVhZHkgY3JlYXRlZFxuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkICYmICFUb25lLmluaXRpYWxpemVkKSB7XG5cdCAgICAgICAgVG9uZS5jb250ZXh0ID0gbmV3IFRvbmUuQ29udGV4dCgpO1xuXHQgICAgICAgIC8vIGxvZyBvbiBmaXJzdCBpbml0aWFsaXphdGlvblxuXHQgICAgICAgIC8vIGFsbG93IG9wdGlvbmFsIHNpbGVuY2luZyBvZiB0aGlzIGxvZ1xuXHQgICAgICAgIGlmICghd2luZG93LlRPTkVfU0lMRU5DRV9WRVJTSU9OX0xPR0dJTkcpIHtcblx0ICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblx0ICAgICAgICAgICAgY29uc29sZS5sb2coJyVjICogVG9uZS5qcyAnICsgVG9uZS52ZXJzaW9uICsgJyAqICcsICdiYWNrZ3JvdW5kOiAjMDAwOyBjb2xvcjogI2ZmZicpO1xuXHQgICAgICAgIH1cblx0ICAgIH0gZWxzZSBpZiAoIVRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcblx0ICAgICAgICBjb25zb2xlLndhcm4oJ1RoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFRvbmUuanMnKTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBUb25lLkNvbnRleHQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BdWRpb05vZGUgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGNsYXNzZXMgd2hpY2ggcHJvY2VzcyBhdWRpby5cblx0XHQgKiAgICAgICAgIEF1ZGlvTm9kZXMgaGF2ZSBpbnB1dHMgYW5kIG91dHB1dHMuXG5cdFx0ICogIEBwYXJhbVx0e0F1ZGlvQ29udGV4dD19IGNvbnRleHRcdFRoZSBhdWRpbyBjb250ZXh0IHRvIHVzZSB3aXRoIHRoZSBjbGFzc1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvL3VzZSB0aGUgZGVmYXVsdCBjb250ZXh0IGlmIG9uZSBpcyBub3QgcGFzc2VkIGluXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydjb250ZXh0J10sIHsgJ2NvbnRleHQnOiBUb25lLmNvbnRleHQgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgQXVkaW9Db250ZXh0IG9mIHRoaXMgaW5zdGFuY2Vcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7QXVkaW9Db250ZXh0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG9wdGlvbnMuY29udGV4dDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGF1ZGlvIGNvbnRleHQgYmVsb25naW5nIHRvIHRoaXMgaW5zdGFuY2UuXG5cdFx0ICogQHR5cGUge1RvbmUuQ29udGV4dH1cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogQG5hbWUgY29udGV4dFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NvbnRleHQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENyZWF0ZSBpbnB1dCBhbmQgb3V0cHV0cyBmb3IgdGhpcyBvYmplY3QuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIFtpbnB1dD0wXSAgIFRoZSBudW1iZXIgb2YgaW5wdXRzXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIFtvdXRwdXRzPTBdICBUaGUgbnVtYmVyIG9mIG91dHB1dHNcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQXVkaW9Ob2RlfSAgdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNyZWF0ZUluc091dHMgPSBmdW5jdGlvbiAoaW5wdXRzLCBvdXRwdXRzKSB7XG5cdCAgICAgICAgaWYgKGlucHV0cyA9PT0gMSkge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGlucHV0cyA+IDEpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dCA9IG5ldyBBcnJheShpbnB1dHMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAob3V0cHV0cyA9PT0gMSkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChvdXRwdXRzID4gMSkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBBcnJheShvdXRwdXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYW5uZWxDb3VudCBpcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHVzZWQgd2hlbiB1cC1taXhpbmcgYW5kIGRvd24tbWl4aW5nXG5cdFx0ICogIGNvbm5lY3Rpb25zIHRvIGFueSBpbnB1dHMgdG8gdGhlIG5vZGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIgZXhjZXB0IGZvclxuXHRcdCAqICBzcGVjaWZpYyBub2RlcyB3aGVyZSBpdHMgdmFsdWUgaXMgc3BlY2lhbGx5IGRldGVybWluZWQuXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBjaGFubmVsQ291bnRcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnY2hhbm5lbENvdW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYykge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50ID0gYztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjaGFubmVsQ291bnRNb2RlIGRldGVybWluZXMgaG93IGNoYW5uZWxzIHdpbGwgYmUgY291bnRlZCB3aGVuIHVwLW1peGluZyBhbmRcblx0XHQgKiAgZG93bi1taXhpbmcgY29ubmVjdGlvbnMgdG8gYW55IGlucHV0cyB0byB0aGUgbm9kZS5cblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJtYXhcIi4gVGhpcyBhdHRyaWJ1dGUgaGFzIG5vIGVmZmVjdCBmb3Igbm9kZXMgd2l0aCBubyBpbnB1dHMuXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgY2hhbm5lbENvdW50TW9kZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjaGFubmVsQ291bnRNb2RlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50TW9kZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG0pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxDb3VudE1vZGUgPSBtO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYW5uZWxJbnRlcnByZXRhdGlvbiBkZXRlcm1pbmVzIGhvdyBpbmRpdmlkdWFsIGNoYW5uZWxzIHdpbGwgYmUgdHJlYXRlZFxuXHRcdCAqICB3aGVuIHVwLW1peGluZyBhbmQgZG93bi1taXhpbmcgY29ubmVjdGlvbnMgdG8gYW55IGlucHV0cyB0byB0aGUgbm9kZS5cblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJzcGVha2Vyc1wiLlxuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIGNoYW5uZWxJbnRlcnByZXRhdGlvblxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjaGFubmVsSW50ZXJwcmV0YXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsSW50ZXJwcmV0YXRpb247XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsSW50ZXJwcmV0YXRpb24gPSBpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaW5wdXRzIGZlZWRpbmcgaW50byB0aGUgQXVkaW9Ob2RlLlxuXHRcdCAqICBGb3Igc291cmNlIG5vZGVzLCB0aGlzIHdpbGwgYmUgMC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgbnVtYmVyT2ZJbnB1dHNcblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdudW1iZXJPZklucHV0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5sZW5ndGg7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIG91dHB1dHMgY29taW5nIG91dCBvZiB0aGUgQXVkaW9Ob2RlLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBudW1iZXJPZk91dHB1dHNcblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdudW1iZXJPZk91dHB1dHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQubGVuZ3RoO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDYWxsZWQgd2hlbiBhbiBhdWRpbyBwYXJhbSBjb25uZWN0cyB0byB0aGlzIG5vZGVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLl9vbkNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdGhlIG91dHB1dCBvZiBhIFRvbmVOb2RlIHRvIGFuIEF1ZGlvUGFyYW0sIEF1ZGlvTm9kZSwgb3IgVG9uZU5vZGVcblx0XHQgKiAgQHBhcmFtICB7VG9uZSB8IEF1ZGlvUGFyYW0gfCBBdWRpb05vZGV9IHVuaXRcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBvdXRwdXQgdG8gY29ubmVjdCBmcm9tXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBpbnB1dCB0byBjb25uZWN0IHRvXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAodW5pdCwgb3V0cHV0TnVtLCBpbnB1dE51bSkge1xuXHQgICAgICAgIGlmICh1bml0Ll9vbkNvbm5lY3QpIHtcblx0ICAgICAgICAgICAgdW5pdC5fb25Db25uZWN0KHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICBvdXRwdXROdW0gPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TnVtLCAwKTtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXRbb3V0cHV0TnVtXS5jb25uZWN0KHVuaXQsIDAsIGlucHV0TnVtKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dC5jb25uZWN0KHVuaXQsIG91dHB1dE51bSwgaW5wdXROdW0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZGlzY29ubmVjdCB0aGUgb3V0cHV0XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfEF1ZGlvTm9kZX0gb3V0cHV0IEVpdGhlciB0aGUgb3V0cHV0IGluZGV4IHRvIGRpc2Nvbm5lY3Rcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIG91dHB1dCBpcyBhbiBhcnJheSwgb3IgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgdG8gZGlzY29ubmVjdCBmcm9tLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBvdXRwdXROdW0sIGlucHV0TnVtKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIoZGVzdGluYXRpb24pKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFtkZXN0aW5hdGlvbl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgb3V0cHV0TnVtID0gVG9uZS5kZWZhdWx0QXJnKG91dHB1dE51bSwgMCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm91dHB1dFtvdXRwdXROdW1dLmRpc2Nvbm5lY3QoZGVzdGluYXRpb24sIDAsIGlucHV0TnVtKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmRpc2Nvbm5lY3QuYXBwbHkodGhpcy5vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhpcyBub2RlIHRvIHRoZSByZXN0IG9mIHRoZSBub2RlcyBpbiBzZXJpZXMuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vY29ubmVjdCBhIG5vZGUgdG8gYW4gZWZmZWN0LCBwYW5Wb2wgYW5kIHRoZW4gdG8gdGhlIG1hc3RlciBvdXRwdXRcblx0XHQgKiAgbm9kZS5jaGFpbihlZmZlY3QsIHBhblZvbCwgVG9uZS5NYXN0ZXIpO1xuXHRcdCAqICBAcGFyYW0gey4uLkF1ZGlvUGFyYW18VG9uZXxBdWRpb05vZGV9IG5vZGVzXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmNoYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBjdXJyZW50VW5pdCA9IHRoaXM7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHRvVW5pdCA9IGFyZ3VtZW50c1tpXTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQuY29ubmVjdCh0b1VuaXQpO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdCA9IHRvVW5pdDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGlzIG5vZGUgdG8gdGhlIHJlc3Qgb2YgdGhlIG5vZGVzIGluIHBhcmFsbGVsLlxuXHRcdCAqICBAcGFyYW0gey4uLkF1ZGlvUGFyYW18VG9uZXxBdWRpb05vZGV9IG5vZGVzXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmZhbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLmNvbm5lY3QoYXJndW1lbnRzW2ldKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgaWYgKHdpbmRvdy5BdWRpb05vZGUpIHtcblx0ICAgICAgICAvL2dpdmUgbmF0aXZlIG5vZGVzIGNoYWluIGFuZCBmYW4gbWV0aG9kc1xuXHQgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuY2hhaW4gPSBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY2hhaW47XG5cdCAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5mYW4gPSBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZmFuO1xuXHQgICAgfVxuXHQgICAgLyoqXG5cdFx0ICogRGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodGhpcy5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXQgaW5zdGFuY2VvZiBBdWRpb05vZGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodGhpcy5vdXRwdXQpKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dCBpbnN0YW5jZW9mIEF1ZGlvTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0ID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXVkaW9Ob2RlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJhc2UgY2xhc3MgZm9yIGFsbCBTaWduYWxzLiBVc2VkIEludGVybmFsbHkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWxCYXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TaWduYWxCYXNlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgV2hlbiBzaWduYWxzIGNvbm5lY3QgdG8gb3RoZXIgc2lnbmFscyBvciBBdWRpb1BhcmFtcyxcblx0XHQgKiAgdGhleSB0YWtlIG92ZXIgdGhlIG91dHB1dCB2YWx1ZSBvZiB0aGF0IHNpZ25hbCBvciBBdWRpb1BhcmFtLlxuXHRcdCAqICBGb3IgYWxsIG90aGVyIG5vZGVzLCB0aGUgYmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgYSBkZWZhdWx0IDxjb2RlPmNvbm5lY3Q8L2NvZGU+LlxuXHRcdCAqXG5cdFx0ICogIEBvdmVycmlkZVxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvUGFyYW18QXVkaW9Ob2RlfFRvbmUuU2lnbmFsfFRvbmV9IG5vZGVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW1iZXI9MF0gVGhlIG91dHB1dCBudW1iZXIgdG8gY29ubmVjdCBmcm9tLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2lucHV0TnVtYmVyPTBdIFRoZSBpbnB1dCBudW1iZXIgdG8gY29ubmVjdCB0by5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsQmFzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUsIG91dHB1dE51bWJlciwgaW5wdXROdW1iZXIpIHtcblx0ICAgICAgICAvL3plcm8gaXQgb3V0IHNvIHRoYXQgdGhlIHNpZ25hbCBjYW4gaGF2ZSBmdWxsIGNvbnRyb2xcblx0ICAgICAgICBpZiAoVG9uZS5TaWduYWwgJiYgVG9uZS5TaWduYWwgPT09IG5vZGUuY29uc3RydWN0b3IgfHwgVG9uZS5QYXJhbSAmJiBUb25lLlBhcmFtID09PSBub2RlLmNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIGNoYW5nZXNcblx0ICAgICAgICAgICAgbm9kZS5fcGFyYW0uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKDApO1xuXHQgICAgICAgICAgICAvL3Jlc2V0IHRoZSB2YWx1ZVxuXHQgICAgICAgICAgICBub2RlLl9wYXJhbS52YWx1ZSA9IDA7XG5cdCAgICAgICAgICAgIC8vbWFyayB0aGUgdmFsdWUgYXMgb3ZlcnJpZGRlblxuXHQgICAgICAgICAgICBub2RlLm92ZXJyaWRkZW4gPSB0cnVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcblx0ICAgICAgICAgICAgbm9kZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoMCk7XG5cdCAgICAgICAgICAgIG5vZGUudmFsdWUgPSAwO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdC5jYWxsKHRoaXMsIG5vZGUsIG91dHB1dE51bWJlciwgaW5wdXROdW1iZXIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNpZ25hbEJhc2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIC8vZml4ZXMgc2FmYXJpIG9ubHkgYnVnIHdoaWNoIGlzIHN0aWxsIHByZXNlbnQgaW4gMTFcblx0ICAgICAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG5cdCAgICAgICAgdmFyIGlzU2FmYXJpID0gdWEuaW5jbHVkZXMoJ3NhZmFyaScpICYmICF1YS5pbmNsdWRlcygnY2hyb21lJyk7XG5cdCAgICAgICAgaWYgKGlzU2FmYXJpKSB7XG5cdCAgICAgICAgICAgIHZhciBXYXZlU2hhcGVyTm9kZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbE5vZGUgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBjb250ZXh0Ll9uYXRpdmVfY3JlYXRlV2F2ZVNoYXBlcigpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB0aGlzLl9pbnRlcm5hbE5vZGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZpbmVQcm9wZXJ0eSh0aGlzLl9pbnRlcm5hbE5vZGUsIHByb3ApO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2F2ZVNoYXBlck5vZGUucHJvdG90eXBlLCAnY3VydmUnLCB7XG5cdCAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VydmU7XG5cdCAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoY3VydmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoY3VydmUubGVuZ3RoICsgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgYXJyYXkuc2V0KGN1cnZlLCAxKTtcblx0ICAgICAgICAgICAgICAgICAgICBhcnJheVswXSA9IGN1cnZlWzBdO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTm9kZS5jdXJ2ZSA9IGFycmF5O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgV2F2ZVNoYXBlck5vZGUucHJvdG90eXBlLl9kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChjb250ZXh0LCBwcm9wKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXNbcHJvcF0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3AsIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHRbcHJvcF0gPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXS5iaW5kKGNvbnRleHQpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtwcm9wXTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0W3Byb3BdID0gdmFsO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuX25hdGl2ZV9jcmVhdGVXYXZlU2hhcGVyID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVXYXZlU2hhcGVyO1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVdhdmVTaGFwZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdhdmVTaGFwZXJOb2RlKHRoaXMpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBzIHRoZSBuYXRpdmUgV2ViIEF1ZGlvIEFQSVxuXHRcdCAqICAgICAgICAgW1dhdmVTaGFwZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS13YXZlc2hhcGVybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufEFycmF5fE51bWJlcn0gbWFwcGluZyBUaGUgZnVuY3Rpb24gdXNlZCB0byBkZWZpbmUgdGhlIHZhbHVlcy5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXBwaW5nIGZ1bmN0aW9uIHNob3VsZCB0YWtlIHR3byBhcmd1bWVudHM6XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgaXMgdGhlIHZhbHVlIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHNlY29uZCBpcyB0aGUgYXJyYXkgcG9zaXRpb24uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHRoYXQgYXJyYXkgd2lsbCBiZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGFzIHRoZSB3YXZlIHNoYXBpbmcgZnVuY3Rpb24uIFRoZSBpbnB1dFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGlzIGFuIEF1ZGlvUmFuZ2UgWy0xLCAxXSB2YWx1ZSBhbmQgdGhlIG91dHB1dFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGNhbiB0YWtlIG9uIGFueSBudW1lcmljYWwgdmFsdWVzLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBbYnVmZmVyTGVuPTEwMjRdIFRoZSBsZW5ndGggb2YgdGhlIFdhdmVTaGFwZXJOb2RlIGJ1ZmZlci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdGltZXNUd28gPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uKHZhbCl7XG5cdFx0ICogXHRyZXR1cm4gdmFsICogMjtcblx0XHQgKiB9LCAyMDQ4KTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egd2F2ZXNoYXBlciBjYW4gYWxzbyBiZSBjb25zdHJ1Y3RlZCB3aXRoIGFuIGFycmF5IG9mIHZhbHVlc1xuXHRcdCAqIHZhciBpbnZlcnQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKFsxLCAtMV0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlU2hhcGVyID0gZnVuY3Rpb24gKG1hcHBpbmcsIGJ1ZmZlckxlbikge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB3YXZlc2hhcGVyXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlV2F2ZVNoYXBlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB3YXZlc2hhcGVycyBjdXJ2ZVxuXHRcdFx0ICogIEB0eXBlIHtGbG9hdDMyQXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2N1cnZlID0gbnVsbDtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtYXBwaW5nKSkge1xuXHQgICAgICAgICAgICB0aGlzLmN1cnZlID0gbWFwcGluZztcblx0ICAgICAgICB9IGVsc2UgaWYgKGlzRmluaXRlKG1hcHBpbmcpIHx8IFRvbmUuaXNVbmRlZihtYXBwaW5nKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG5ldyBGbG9hdDMyQXJyYXkoVG9uZS5kZWZhdWx0QXJnKG1hcHBpbmcsIDEwMjQpKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNGdW5jdGlvbihtYXBwaW5nKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG5ldyBGbG9hdDMyQXJyYXkoVG9uZS5kZWZhdWx0QXJnKGJ1ZmZlckxlbiwgMTAyNCkpO1xuXHQgICAgICAgICAgICB0aGlzLnNldE1hcChtYXBwaW5nKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5XYXZlU2hhcGVyLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIFVzZXMgYSBtYXBwaW5nIGZ1bmN0aW9uIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIGN1cnZlLlxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBwaW5nIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGRlZmluZSB0aGUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXBwaW5nIGZ1bmN0aW9uIHRha2UgdHdvIGFyZ3VtZW50czpcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgaXMgdGhlIHZhbHVlIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggZ29lcyBmcm9tIC0xIHRvIDEgb3ZlciB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGN1cnZlIGFycmF5LiBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBhcnJheSBwb3NpdGlvbi5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuV2F2ZVNoYXBlcn0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbWFwIHRoZSBpbnB1dCBzaWduYWwgZnJvbSBbLTEsIDFdIHRvIFswLCAxMF1cblx0XHQgKiBzaGFwZXIuc2V0TWFwKGZ1bmN0aW9uKHZhbCwgaW5kZXgpe1xuXHRcdCAqIFx0cmV0dXJuICh2YWwgKyAxKSAqIDU7XG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUuc2V0TWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcblx0ICAgICAgICB2YXIgYXJyYXkgPSBuZXcgQXJyYXkodGhpcy5fY3VydmUubGVuZ3RoKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5fY3VydmUubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWQgPSBpIC8gKGxlbiAtIDEpICogMiAtIDE7XG5cdCAgICAgICAgICAgIGFycmF5W2ldID0gbWFwcGluZyhub3JtYWxpemVkLCBpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5jdXJ2ZSA9IGFycmF5O1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhcnJheSB0byBzZXQgYXMgdGhlIHdhdmVzaGFwZXIgY3VydmUuIEZvciBsaW5lYXIgY3VydmVzXG5cdFx0ICogYXJyYXkgbGVuZ3RoIGRvZXMgbm90IG1ha2UgbXVjaCBkaWZmZXJlbmNlLCBidXQgZm9yIGNvbXBsZXggY3VydmVzXG5cdFx0ICogbG9uZ2VyIGFycmF5cyB3aWxsIHByb3ZpZGUgc21vb3RoZXIgaW50ZXJwb2xhdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5XYXZlU2hhcGVyI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBjdXJ2ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUsICdjdXJ2ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5jdXJ2ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1hcHBpbmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3VydmUgPSBuZXcgRmxvYXQzMkFycmF5KG1hcHBpbmcpO1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIuY3VydmUgPSB0aGlzLl9jdXJ2ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFNwZWNpZmllcyB3aGF0IHR5cGUgb2Ygb3ZlcnNhbXBsaW5nIChpZiBhbnkpIHNob3VsZCBiZSB1c2VkIHdoZW5cblx0XHQgKiBhcHBseWluZyB0aGUgc2hhcGluZyBjdXJ2ZS4gQ2FuIGVpdGhlciBiZSBcIm5vbmVcIiwgXCIyeFwiIG9yIFwiNHhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5XYXZlU2hhcGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgb3ZlcnNhbXBsZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUsICdvdmVyc2FtcGxlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvdmVyc2FtcGxpbmcpIHtcblx0ICAgICAgICAgICAgaWYgKFtcblx0ICAgICAgICAgICAgICAgICAgICAnbm9uZScsXG5cdCAgICAgICAgICAgICAgICAgICAgJzJ4Jyxcblx0ICAgICAgICAgICAgICAgICAgICAnNHgnXG5cdCAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKG92ZXJzYW1wbGluZykpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlID0gb3ZlcnNhbXBsaW5nO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RvbmUuV2F2ZVNoYXBlcjogb3ZlcnNhbXBsaW5nIG11c3QgYmUgZWl0aGVyIFxcJ25vbmVcXCcsIFxcJzJ4XFwnLCBvciBcXCc0eFxcJycpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLldhdmVTaGFwZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZVNoYXBlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLldhdmVTaGFwZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UaW1lQmFzZSBpcyBhIGZsZXhpYmxlIGVuY29kaW5nIG9mIHRpbWVcblx0XHQgKiAgICAgICAgIHdoaWNoIGNhbiBiZSBldmFsdWF0ZWQgdG8gYW5kIGZyb20gYSBzdHJpbmcuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlIGFzIGEgbnVtYmVyIG9yIHN0cmluZ1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFVuaXQgdmFsdWVzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UaW1lQmFzZSg0LCBcIm5cIilcblx0XHQgKiBUb25lLlRpbWVCYXNlKDIsIFwidFwiKVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoXCIydFwiKVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoXCIydFwiKSArIFRvbmUuVGltZUJhc2UoXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIC8vYWxsb3dzIGl0IHRvIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCAnbmV3J1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSB2YWx1ZVxuXHRcdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ8U3RyaW5nfFRvbmUuVGltZUJhc2V9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIHVuaXRzXG5cdFx0XHRcdCAqIEB0eXBlIHtTdHJpbmc/fVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB1bml0cztcblx0ICAgICAgICAgICAgLy90ZXN0IGlmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG51bWJlclxuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXMuX3VuaXRzKSAmJiBUb25lLmlzU3RyaW5nKHRoaXMuX3ZhbCkgJiYgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHQgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0aGlzLl92YWwpID09IHRoaXMuX3ZhbCAmJiB0aGlzLl92YWwuY2hhckF0KDApICE9PSAnKycpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHBhcnNlRmxvYXQodGhpcy5fdmFsKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdGhpcy5fZGVmYXVsdFVuaXRzO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbCAmJiB2YWwuY29uc3RydWN0b3IgPT09IHRoaXMuY29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgICAgIC8vaWYgdGhleSdyZSB0aGUgc2FtZSB0eXBlLCBqdXN0IGNvcHkgdmFsdWVzIG92ZXJcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC5fdmFsO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB2YWwuX3VuaXRzO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fZGVmYXVsdFVuaXRzKSB7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdzJzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdpJzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9UaWNrcygpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnaHonOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnbWlkaSc6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLnRvTWlkaSgpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBkZWZhdWx0IHVuaXRzICcgKyB0aGlzLl9kZWZhdWx0VW5pdHMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWVCYXNlKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpbWVCYXNlKTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFCU1RSQUNUIFNZTlRBWCBUUkVFIFBBUlNFUlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQWxsIHRoZSBwcmltYXJ5IGV4cHJlc3Npb25zLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9leHByZXNzaW9ucyA9IHtcblx0ICAgICAgICAnbic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKW4oXFwuPykkL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlLCBkb3QpIHtcblx0ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNjYWxhciA9IGRvdCA9PT0gJy4nID8gMS41IDogMTtcblx0ICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHModGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpKSAqIHNjYWxhcjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyg0IC8gdmFsdWUpICogc2NhbGFyO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndCc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKXQkL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHMoOCAvIChwYXJzZUludCh2YWx1ZSkgKiAzKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdtJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspbSQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VJbnQodmFsdWUpICogdGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2knOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKylpJC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tzVG9Vbml0cyhwYXJzZUludCh2YWx1ZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnaHonOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPyloeiQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmVxdWVuY3lUb1VuaXRzKHBhcnNlRmxvYXQodmFsdWUpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3RyJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT8pOihcXGQrKD86XFwuXFxkKyk/KTo/KFxcZCsoPzpcXC5cXGQrKT8pPyQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChtLCBxLCBzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xuXHQgICAgICAgICAgICAgICAgaWYgKG0gJiYgbSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5fYmVhdHNUb1VuaXRzKHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSAqIHBhcnNlRmxvYXQobSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHEgJiYgcSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHMgJiYgcyAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocykgLyA0KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3MnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPylzJC8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2Vjb25kc1RvVW5pdHMocGFyc2VGbG9hdCh2YWx1ZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnc2FtcGxlcyc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKXNhbXBsZXMkLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSkgLyB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2RlZmF1bHQnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPykkLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHByZXNzaW9uc1t0aGlzLl9kZWZhdWx0VW5pdHNdLm1ldGhvZC5jYWxsKHRoaXMsIHZhbHVlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZGVmYXVsdFVuaXRzID0gJ3MnO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VFJBTlNQT1JUIEZBTExCQUNLU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGJwbSwgb3IgMTIwIGlmIFRyYW5zcG9ydCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2dldEJwbSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gMTIwO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIHRpbWVTaWduYXR1cmUgb3IgNCBpZiBUcmFuc3BvcnQgaXMgbm90IGF2YWlsYWJsZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9nZXRUaW1lU2lnbmF0dXJlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gNDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJuIHRoZSBQUFEgb3IgMTkyIGlmIFRyYW5zcG9ydCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2dldFBQUSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LlBQUTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gMTkyO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiB3aGljaGV2ZXIgY29udGV4dCBpcyByZWxldmFudFxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMubm93KCk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VU5JVCBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBmcmVxdWVuY3kgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIGZyZXE7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiA2MCAvIHRoaXMuX2dldEJwbSgpICogYmVhdHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gc2Vjb25kcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gdGlja3MgKiAodGhpcy5fYmVhdHNUb1VuaXRzKDEpIC8gdGhpcy5fZ2V0UFBRKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFdpdGggbm8gYXJndW1lbnRzLCByZXR1cm4gJ25vdydcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9ub0FyZyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fbm93KCk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RVhQUkVTU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEV2YWx1YXRlIHRoZSB0aW1lIHZhbHVlLiBSZXR1cm5zIHRoZSB0aW1lXG5cdFx0ICogIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRoaXMuX3ZhbCkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vQXJnKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHRoaXMuX3ZhbCkgJiYgVG9uZS5pc1VuZGVmKHRoaXMuX3VuaXRzKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciB1bml0cyBpbiB0aGlzLl9leHByZXNzaW9ucykge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25zW3VuaXRzXS5yZWdleHAudGVzdCh0aGlzLl92YWwudHJpbSgpKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuaXRzID0gdW5pdHM7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKHRoaXMuX3VuaXRzKSkge1xuXHQgICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMuX2V4cHJlc3Npb25zW3RoaXMuX3VuaXRzXTtcblx0ICAgICAgICAgICAgdmFyIG1hdGNoaW5nID0gdGhpcy5fdmFsLnRvU3RyaW5nKCkudHJpbSgpLm1hdGNoKGV4cHIucmVnZXhwKTtcblx0ICAgICAgICAgICAgaWYgKG1hdGNoaW5nKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXhwci5tZXRob2QuYXBwbHkodGhpcywgbWF0Y2hpbmcuc2xpY2UoMSkpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGV4cHIubWV0aG9kLmNhbGwodGhpcywgcGFyc2VGbG9hdCh0aGlzLl92YWwpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIGluIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgaW4gaGVydHpcblx0XHQgKiAgQHJldHVybiB7RnJlcXVlbmN5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9GcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyB0aGlzLnRvU2Vjb25kcygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gc2FtcGxlc1xuXHRcdCAqICBAcmV0dXJuICB7U2FtcGxlc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLnRvU2FtcGxlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHMoKSAqIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7TWlsbGlzZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9NaWxsaXNlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudG9TZWNvbmRzKCkgKiAxMDAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlRpbWVCYXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3ZhbCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdW5pdHMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWVCYXNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRnJlcXVlbmN5IGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIEZyZXF1ZW5jeSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBFdmVudHVhbGx5IGFsbCB0aW1lIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHRvIGhlcnR6XG5cdFx0ICogICAgICAgICB1c2luZyB0aGUgYGV2YWxgIG1ldGhvZC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWVCYXNlfVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJDM1wiKSAvLyAyNjFcblx0XHQgKiBUb25lLkZyZXF1ZW5jeSgzOCwgXCJtaWRpXCIpIC8vXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJDM1wiKS50cmFuc3Bvc2UoNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLkZyZXF1ZW5jeSkge1xuXHQgICAgICAgICAgICBUb25lLlRpbWVCYXNlLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLkZyZXF1ZW5jeSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GcmVxdWVuY3ksIFRvbmUuVGltZUJhc2UpO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVVHTUVOVCBCQVNFIEVYUFJFU1NJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fZXhwcmVzc2lvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMsIHtcblx0ICAgICAgICAnbWlkaSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/bWlkaSkvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRVbml0cyA9PT0gJ21pZGknKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kubXRvZih2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdub3RlJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFthLWddezF9KD86YnwjfHh8YmIpPykoLT9bMC05XSspL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHBpdGNoLCBvY3RhdmUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IG5vdGVUb1NjYWxlSW5kZXhbcGl0Y2gudG9Mb3dlckNhc2UoKV07XG5cdCAgICAgICAgICAgICAgICB2YXIgbm90ZU51bWJlciA9IGluZGV4ICsgKHBhcnNlSW50KG9jdGF2ZSkgKyAxKSAqIDEyO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRVbml0cyA9PT0gJ21pZGknKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vdGVOdW1iZXI7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5tdG9mKG5vdGVOdW1iZXIpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndHInOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPyk6KFxcZCsoPzpcXC5cXGQrKT8pOj8oXFxkKyg/OlxcLlxcZCspPyk/Lyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAobSwgcSwgcykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHRvdGFsID0gMTtcblx0ICAgICAgICAgICAgICAgIGlmIChtICYmIG0gIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICo9IHRoaXMuX2JlYXRzVG9Vbml0cyh0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkgKiBwYXJzZUZsb2F0KG0pKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChxICYmIHEgIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICo9IHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUZsb2F0KHEpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChzICYmIHMgIT09ICcwJykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICo9IHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUZsb2F0KHMpIC8gNCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEVYUFJFU1NJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUcmFuc3Bvc2VzIHRoZSBmcmVxdWVuY3kgYnkgdGhlIGdpdmVuIG51bWJlciBvZiBzZW1pdG9uZXMuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsfSAgaW50ZXJ2YWxcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRnJlcXVlbmN5fSBBIG5ldyB0cmFuc3Bvc2VkIGZyZXF1ZW5jeVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQTRcIikudHJhbnNwb3NlKDMpOyAvL1wiQzVcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRyYW5zcG9zZSA9IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnZhbHVlT2YoKSAqIFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGludGVydmFsKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRha2VzIGFuIGFycmF5IG9mIHNlbWl0b25lIGludGVydmFscyBhbmQgcmV0dXJuc1xuXHRcdCAqICBhbiBhcnJheSBvZiBmcmVxdWVuY2llcyB0cmFuc3Bvc2VkIGJ5IHRob3NlIGludGVydmFscy5cblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICBpbnRlcnZhbHNcblx0XHQgKiAgQHJldHVybiAge0FycmF5PFRvbmUuRnJlcXVlbmN5Pn0gUmV0dXJucyBhbiBhcnJheSBvZiBGcmVxdWVuY2llc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQTRcIikuaGFybW9uaXplKFswLCAzLCA3XSk7IC8vW1wiQTRcIiwgXCJDNVwiLCBcIkU1XCJdXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuaGFybW9uaXplID0gZnVuY3Rpb24gKGludGVydmFscykge1xuXHQgICAgICAgIHJldHVybiBpbnRlcnZhbHMubWFwKGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc3Bvc2UoaW50ZXJ2YWwpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VU5JVCBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IGFzIGEgTUlESSBub3RlXG5cdFx0ICogIEByZXR1cm4gIHtNSURJfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQzRcIikudG9NaWRpKCk7IC8vNjBcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b01pZGkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20odGhpcy52YWx1ZU9mKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgaW4gU2NpZW50aWZpYyBQaXRjaCBOb3RhdGlvblxuXHRcdCAqICBAcmV0dXJuICB7Tm90ZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeSg2OSwgXCJtaWRpXCIpLnRvTm90ZSgpOyAvL1wiQTRcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvTm90ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgZnJlcSA9IHRoaXMudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICB2YXIgbG9nID0gTWF0aC5sb2cyKGZyZXEgLyBUb25lLkZyZXF1ZW5jeS5BNCk7XG5cdCAgICAgICAgdmFyIG5vdGVOdW1iZXIgPSBNYXRoLnJvdW5kKDEyICogbG9nKSArIDU3O1xuXHQgICAgICAgIHZhciBvY3RhdmUgPSBNYXRoLmZsb29yKG5vdGVOdW1iZXIgLyAxMik7XG5cdCAgICAgICAgaWYgKG9jdGF2ZSA8IDApIHtcblx0ICAgICAgICAgICAgbm90ZU51bWJlciArPSAtMTIgKiBvY3RhdmU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBub3RlTmFtZSA9IHNjYWxlSW5kZXhUb05vdGVbbm90ZU51bWJlciAlIDEyXTtcblx0ICAgICAgICByZXR1cm4gbm90ZU5hbWUgKyBvY3RhdmUudG9TdHJpbmcoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBkdXJhdGlvbiBvZiBvbmUgY3ljbGUgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAxIC8gVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9TZWNvbmRzLmNhbGwodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgaW4gSGVydHpcblx0XHQgKiAgQHJldHVybiAge0ZyZXF1ZW5jeX1cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9GcmVxdWVuY3kuY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBkdXJhdGlvbiBvZiBvbmUgY3ljbGUgaW4gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJUaW1lID0gdGhpcy5fYmVhdHNUb1VuaXRzKDEpO1xuXHQgICAgICAgIHZhciBxdWFydGVycyA9IHRoaXMudmFsdWVPZigpIC8gcXVhcnRlclRpbWU7XG5cdCAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IocXVhcnRlcnMgKiBUb25lLlRyYW5zcG9ydC5QUFEpO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFVOSVQgQ09OVkVSU0lPTlMgSEVMUEVSU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiAwXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX25vQXJnID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIGZyZXF1ZW5jeSBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gZnJlcTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fdGlja3NUb1VuaXRzID0gZnVuY3Rpb24gKHRpY2tzKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyAodGlja3MgKiA2MCAvIChUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgKiBUb25lLlRyYW5zcG9ydC5QUFEpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiAxIC8gVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cy5jYWxsKHRoaXMsIGJlYXRzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzZWNvbmQgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtTZWNvbmRzfSBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIHNlY29uZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAnaHonO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RlJFUVVFTkNZIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBOb3RlIHRvIHNjYWxlIGluZGV4XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgdmFyIG5vdGVUb1NjYWxlSW5kZXggPSB7XG5cdCAgICAgICAgJ2NiYic6IC0yLFxuXHQgICAgICAgICdjYic6IC0xLFxuXHQgICAgICAgICdjJzogMCxcblx0ICAgICAgICAnYyMnOiAxLFxuXHQgICAgICAgICdjeCc6IDIsXG5cdCAgICAgICAgJ2RiYic6IDAsXG5cdCAgICAgICAgJ2RiJzogMSxcblx0ICAgICAgICAnZCc6IDIsXG5cdCAgICAgICAgJ2QjJzogMyxcblx0ICAgICAgICAnZHgnOiA0LFxuXHQgICAgICAgICdlYmInOiAyLFxuXHQgICAgICAgICdlYic6IDMsXG5cdCAgICAgICAgJ2UnOiA0LFxuXHQgICAgICAgICdlIyc6IDUsXG5cdCAgICAgICAgJ2V4JzogNixcblx0ICAgICAgICAnZmJiJzogMyxcblx0ICAgICAgICAnZmInOiA0LFxuXHQgICAgICAgICdmJzogNSxcblx0ICAgICAgICAnZiMnOiA2LFxuXHQgICAgICAgICdmeCc6IDcsXG5cdCAgICAgICAgJ2diYic6IDUsXG5cdCAgICAgICAgJ2diJzogNixcblx0ICAgICAgICAnZyc6IDcsXG5cdCAgICAgICAgJ2cjJzogOCxcblx0ICAgICAgICAnZ3gnOiA5LFxuXHQgICAgICAgICdhYmInOiA3LFxuXHQgICAgICAgICdhYic6IDgsXG5cdCAgICAgICAgJ2EnOiA5LFxuXHQgICAgICAgICdhIyc6IDEwLFxuXHQgICAgICAgICdheCc6IDExLFxuXHQgICAgICAgICdiYmInOiA5LFxuXHQgICAgICAgICdiYic6IDEwLFxuXHQgICAgICAgICdiJzogMTEsXG5cdCAgICAgICAgJ2IjJzogMTIsXG5cdCAgICAgICAgJ2J4JzogMTNcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc2NhbGUgaW5kZXggdG8gbm90ZSAoc2hhcnBzKVxuXHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIHNjYWxlSW5kZXhUb05vdGUgPSBbXG5cdCAgICAgICAgJ0MnLFxuXHQgICAgICAgICdDIycsXG5cdCAgICAgICAgJ0QnLFxuXHQgICAgICAgICdEIycsXG5cdCAgICAgICAgJ0UnLFxuXHQgICAgICAgICdGJyxcblx0ICAgICAgICAnRiMnLFxuXHQgICAgICAgICdHJyxcblx0ICAgICAgICAnRyMnLFxuXHQgICAgICAgICdBJyxcblx0ICAgICAgICAnQSMnLFxuXHQgICAgICAgICdCJ1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgW2NvbmNlcnQgcGl0Y2hdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbmNlcnRfcGl0Y2gpXG5cdFx0ICogIEE0J3MgdmFsdWVzIGluIEhlcnR6LlxuXHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5BNCA9IDQ0MDtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgTUlESSBub3RlIHRvIGZyZXF1ZW5jeSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7TUlESX0gbWlkaSBUaGUgbWlkaSBudW1iZXIgdG8gY29udmVydC5cblx0XHQgKiAgQHJldHVybiB7RnJlcXVlbmN5fSB0aGUgY29ycmVzcG9uZGluZyBmcmVxdWVuY3kgdmFsdWVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5Lm10b2YoNjkpOyAvLyByZXR1cm5zIDQ0MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kubXRvZiA9IGZ1bmN0aW9uIChtaWRpKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LkE0ICogTWF0aC5wb3coMiwgKG1pZGkgLSA2OSkgLyAxMik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBmcmVxdWVuY3kgdmFsdWUgdG8gYSBNSURJIG5vdGUuXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHZhbHVlIHRvIGZyZXF1ZW5jeSB2YWx1ZSB0byBjb252ZXJ0LlxuXHRcdCAqICBAcmV0dXJucyAge01JREl9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeS5mdG9tKDQ0MCk7IC8vIHJldHVybnMgNjlcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LmZ0b20gPSBmdW5jdGlvbiAoZnJlcXVlbmN5KSB7XG5cdCAgICAgICAgcmV0dXJuIDY5ICsgTWF0aC5yb3VuZCgxMiAqIE1hdGgubG9nMihmcmVxdWVuY3kgLyBUb25lLkZyZXF1ZW5jeS5BNCkpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRpbWUgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgVGltZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBUb25lLlRpbWUgY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCB0aGUgYG5ld2Aga2V5d29yZC4gVG9uZS5UaW1lIGNhbiBiZSBwYXNzZWRcblx0XHQgKiAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBvZiBhbnkgbWV0aG9kIHdoaWNoIHRha2VzIHRpbWUgYXMgYW4gYXJndW1lbnQuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UaW1lQmFzZX1cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIHZhbCAgICBUaGUgdGltZSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nPX0gIHVuaXRzICBUaGUgdW5pdHMgb2YgdGhlIHZhbHVlLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB0ID0gVG9uZS5UaW1lKFwiNG5cIik7Ly9hIHF1YXJ0ZXIgbm90ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuVGltZSkge1xuXHQgICAgICAgICAgICBUb25lLlRpbWVCYXNlLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWUodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZSwgVG9uZS5UaW1lQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBFeHRlbmQgdGhlIGJhc2UgZXhwcmVzc2lvbnNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zID0gT2JqZWN0LmFzc2lnbih7fSwgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zLCB7XG5cdCAgICAgICAgJ3F1YW50aXplJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eQCguKykvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChjYXB0dXJlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRUbyA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGNhcHR1cmUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC5uZXh0U3ViZGl2aXNpb24ocXVhbnRUbyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbm93Jzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eXFwrKC4rKS8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKGNhcHR1cmUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3coKSArIG5ldyB0aGlzLmNvbnN0cnVjdG9yKGNhcHR1cmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUXVhbnRpemUgdGhlIHRpbWUgYnkgdGhlIGdpdmVuIHN1YmRpdmlzaW9uLiBPcHRpb25hbGx5IGFkZCBhXG5cdFx0ICogIHBlcmNlbnRhZ2Ugd2hpY2ggd2lsbCBtb3ZlIHRoZSB0aW1lIHZhbHVlIHRvd2FyZHMgdGhlIGlkZWFsXG5cdFx0ICogIHF1YW50aXplZCB2YWx1ZSBieSB0aGF0IHBlcmNlbnRhZ2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcnxUaW1lfSAgdmFsICAgIFRoZSBzdWJkaXZpc2lvbiB0byBxdWFudGl6ZSB0b1xuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIFtwZXJjZW50PTFdICBNb3ZlIHRoZSB0aW1lIHZhbHVlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvd2FyZHMgdGhlIHF1YW50aXplZCB2YWx1ZSBieVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHBlcmNlbnRhZ2UuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UaW1lKDIxKS5xdWFudGl6ZSgyKSAvL3JldHVybnMgMjJcblx0XHQgKiBUb25lLlRpbWUoMC42KS5xdWFudGl6ZShcIjRuXCIsIDAuNSkgLy9yZXR1cm5zIDAuNTVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUucXVhbnRpemUgPSBmdW5jdGlvbiAoc3ViZGl2LCBwZXJjZW50KSB7XG5cdCAgICAgICAgcGVyY2VudCA9IFRvbmUuZGVmYXVsdEFyZyhwZXJjZW50LCAxKTtcblx0ICAgICAgICB2YXIgc3ViZGl2aXNpb24gPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihzdWJkaXYpO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWVPZigpO1xuXHQgICAgICAgIHZhciBtdWx0aXBsZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdWJkaXZpc2lvbik7XG5cdCAgICAgICAgdmFyIGlkZWFsID0gbXVsdGlwbGUgKiBzdWJkaXZpc2lvbjtcblx0ICAgICAgICB2YXIgZGlmZiA9IGlkZWFsIC0gdmFsdWU7XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlICsgZGlmZiAqIHBlcmNlbnQ7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBDT05WRVJTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIFRpbWUgdG8gTm90YXRpb24uIFRoZSBub3RhdGlvbiB2YWx1ZXMgYXJlIHdpbGwgYmUgdGhlXG5cdFx0ICogIGNsb3Nlc3QgcmVwcmVzZW50YXRpb24gYmV0d2VlbiAxbSB0byAxMjh0aCBub3RlLlxuXHRcdCAqICBAcmV0dXJuIHtOb3RhdGlvbn1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2lmIHRoZSBUcmFuc3BvcnQgaXMgYXQgMTIwYnBtOlxuXHRcdCAqIFRvbmUuVGltZSgyKS50b05vdGF0aW9uKCk7Ly9yZXR1cm5zIFwiMW1cIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b05vdGF0aW9uID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciB0aW1lID0gdGhpcy50b1NlY29uZHMoKTtcblx0ICAgICAgICB2YXIgdGVzdE5vdGF0aW9ucyA9IFsnMW0nXTtcblx0ICAgICAgICBmb3IgKHZhciBwb3dlciA9IDE7IHBvd2VyIDwgODsgcG93ZXIrKykge1xuXHQgICAgICAgICAgICB2YXIgc3ViZGl2ID0gTWF0aC5wb3coMiwgcG93ZXIpO1xuXHQgICAgICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goc3ViZGl2ICsgJ24uJyk7XG5cdCAgICAgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaChzdWJkaXYgKyAnbicpO1xuXHQgICAgICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goc3ViZGl2ICsgJ3QnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGVzdE5vdGF0aW9ucy5wdXNoKCcwJyk7XG5cdCAgICAgICAgLy9maW5kIHRoZSBjbG9zZXRzIG5vdGF0aW9uIHJlcHJlc2VudGF0aW9uXG5cdCAgICAgICAgdmFyIGNsb3Nlc3QgPSB0ZXN0Tm90YXRpb25zWzBdO1xuXHQgICAgICAgIHZhciBjbG9zZXN0U2Vjb25kcyA9IFRvbmUuVGltZSh0ZXN0Tm90YXRpb25zWzBdKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB0ZXN0Tm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG5vdGF0aW9uKSB7XG5cdCAgICAgICAgICAgIHZhciBub3RhdGlvblNlY29uZHMgPSBUb25lLlRpbWUobm90YXRpb24pLnRvU2Vjb25kcygpO1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnMobm90YXRpb25TZWNvbmRzIC0gdGltZSkgPCBNYXRoLmFicyhjbG9zZXN0U2Vjb25kcyAtIHRpbWUpKSB7XG5cdCAgICAgICAgICAgICAgICBjbG9zZXN0ID0gbm90YXRpb247XG5cdCAgICAgICAgICAgICAgICBjbG9zZXN0U2Vjb25kcyA9IG5vdGF0aW9uU2Vjb25kcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiBjbG9zZXN0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgZW5jb2RlZCBhcyBCYXJzOkJlYXRzOlNpeHRlZW50aHMuXG5cdFx0ICogIEByZXR1cm4gIHtCYXJzQmVhdHNTaXh0ZWVudGhzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b0JhcnNCZWF0c1NpeHRlZW50aHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJUaW1lID0gdGhpcy5fYmVhdHNUb1VuaXRzKDEpO1xuXHQgICAgICAgIHZhciBxdWFydGVycyA9IHRoaXMudmFsdWVPZigpIC8gcXVhcnRlclRpbWU7XG5cdCAgICAgICAgdmFyIG1lYXN1cmVzID0gTWF0aC5mbG9vcihxdWFydGVycyAvIHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSk7XG5cdCAgICAgICAgdmFyIHNpeHRlZW50aHMgPSBxdWFydGVycyAlIDEgKiA0O1xuXHQgICAgICAgIHF1YXJ0ZXJzID0gTWF0aC5mbG9vcihxdWFydGVycykgJSB0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCk7XG5cdCAgICAgICAgc2l4dGVlbnRocyA9IHNpeHRlZW50aHMudG9TdHJpbmcoKTtcblx0ICAgICAgICBpZiAoc2l4dGVlbnRocy5sZW5ndGggPiAzKSB7XG5cdCAgICAgICAgICAgIC8vIHRoZSBhZGRpdGlvbmFsIHBhcnNlRmxvYXQgcmVtb3ZlcyBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9lc1xuXHQgICAgICAgICAgICBzaXh0ZWVudGhzID0gcGFyc2VGbG9hdChwYXJzZUZsb2F0KHNpeHRlZW50aHMpLnRvRml4ZWQoMykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcHJvZ3Jlc3MgPSBbXG5cdCAgICAgICAgICAgIG1lYXN1cmVzLFxuXHQgICAgICAgICAgICBxdWFydGVycyxcblx0ICAgICAgICAgICAgc2l4dGVlbnRoc1xuXHQgICAgICAgIF07XG5cdCAgICAgICAgcmV0dXJuIHByb2dyZXNzLmpvaW4oJzonKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHRpY2tzLlxuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJUaW1lID0gdGhpcy5fYmVhdHNUb1VuaXRzKDEpO1xuXHQgICAgICAgIHZhciBxdWFydGVycyA9IHRoaXMudmFsdWVPZigpIC8gcXVhcnRlclRpbWU7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQocXVhcnRlcnMgKiB0aGlzLl9nZXRQUFEoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBhcyBhIG1pZGkgbm90ZS5cblx0XHQgKiAgQHJldHVybiAge01pZGl9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvTWlkaSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbSh0aGlzLnRvRnJlcXVlbmN5KCkpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmFuc3BvcnRUaW1lIGlzIGEgdGhlIHRpbWUgYWxvbmcgdGhlIFRyYW5zcG9ydCdzXG5cdFx0ICogICAgICAgICB0aW1lbGluZS4gSXQgaXMgc2ltaWxhciB0byBUb25lLlRpbWUsIGJ1dCBpbnN0ZWFkIG9mIGV2YWx1YXRpbmdcblx0XHQgKiAgICAgICAgIGFnYWluc3QgdGhlIEF1ZGlvQ29udGV4dCdzIGNsb2NrLCBpdCBpcyBldmFsdWF0ZWQgYWdhaW5zdFxuXHRcdCAqICAgICAgICAgdGhlIFRyYW5zcG9ydCdzIHBvc2l0aW9uLiBTZWUgW1RyYW5zcG9ydFRpbWUgd2lraV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvVHJhbnNwb3J0VGltZSkuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlIGFzIGEgbnVtYmVyIG9yIHN0cmluZ1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFVuaXQgdmFsdWVzXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWV9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWUgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UcmFuc3BvcnRUaW1lKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVGltZS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UcmFuc3BvcnRUaW1lKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydFRpbWUsIFRvbmUuVGltZSk7XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiB3aGljaGV2ZXIgY29udGV4dCBpcyByZWxldmFudFxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZS5wcm90b3R5cGUuX25vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQuc2Vjb25kcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnRUaW1lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUWVBFU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiBVbml0cyB3aGljaCBhIHZhbHVlIGNhbiB0YWtlIG9uLlxuXHRcdCAqIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLlR5cGUgPSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRGVmYXVsdCB1bml0c1xuXHRcdFx0ICogIEB0eXBlZGVmIHtEZWZhdWx0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgRGVmYXVsdDogJ251bWJlcicsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGltZSBjYW4gYmUgZGVzY3JpYmVkIGluIGEgbnVtYmVyIG9mIHdheXMuIFJlYWQgbW9yZSBbVGltZV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvVGltZSkuXG5cdFx0XHQgKlxuXHRcdFx0ICogICogTnVtYmVycywgd2hpY2ggd2lsbCBiZSB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHRpbWUgKGluIHNlY29uZHMpLlxuXHRcdFx0ICogICogTm90YXRpb24sIChcIjRuXCIsIFwiOHRcIikgZGVzY3JpYmVzIHRpbWUgaW4gQlBNIGFuZCB0aW1lIHNpZ25hdHVyZSByZWxhdGl2ZSB2YWx1ZXMuXG5cdFx0XHQgKiAgKiBUcmFuc3BvcnRUaW1lLCAoXCI0OjM6MlwiKSB3aWxsIGFsc28gcHJvdmlkZSB0ZW1wbyBhbmQgdGltZSBzaWduYXR1cmUgcmVsYXRpdmUgdGltZXNcblx0XHRcdCAqICBpbiB0aGUgZm9ybSBCQVJTOlFVQVJURVJTOlNJWFRFRU5USFMuXG5cdFx0XHQgKiAgKiBGcmVxdWVuY3ksIChcIjhoelwiKSBpcyBjb252ZXJ0ZWQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY3ljbGUgaW4gc2Vjb25kcy5cblx0XHRcdCAqICAqIE5vdy1SZWxhdGl2ZSwgKFwiKzFcIikgcHJlZml4IGFueSBvZiB0aGUgYWJvdmUgd2l0aCBcIitcIiBhbmQgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCBhc1xuXHRcdFx0ICogIFwidGhlIGN1cnJlbnQgdGltZSBwbHVzIHdoYXRldmVyIGV4cHJlc3Npb24gZm9sbG93c1wiLlxuXHRcdFx0ICogICogRXhwcmVzc2lvbnMsIChcIjM6MCArIDIgLSAoMW0gLyA3KVwiKSBhbnkgb2YgdGhlIGFib3ZlIGNhbiBhbHNvIGJlIGNvbWJpbmVkXG5cdFx0XHQgKiAgaW50byBhIG1hdGhlbWF0aWNhbCBleHByZXNzaW9uIHdoaWNoIHdpbGwgYmUgZXZhbHVhdGVkIHRvIGNvbXB1dGUgdGhlIGRlc2lyZWQgdGltZS5cblx0XHRcdCAqICAqIE5vIEFyZ3VtZW50LCBmb3IgbWV0aG9kcyB3aGljaCBhY2NlcHQgdGltZSwgbm8gYXJndW1lbnQgd2lsbCBiZSBpbnRlcnByZXRlZCBhc1xuXHRcdFx0ICogIFwibm93XCIgKGkuZS4gdGhlIGN1cnJlbnRUaW1lKS5cblx0XHRcdCAqXG5cdFx0XHQgKiAgQHR5cGVkZWYge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBUaW1lOiAndGltZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRnJlcXVlbmN5IGNhbiBiZSBkZXNjcmliZWQgc2ltaWxhciB0byB0aW1lLCBleGNlcHQgdWx0aW1hdGVseSB0aGVcblx0XHRcdCAqICB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBmcmVxdWVuY3kgaW5zdGVhZCBvZiBzZWNvbmRzLiBBIG51bWJlclxuXHRcdFx0ICogIGlzIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgdmFsdWUgaW4gaGVydHouIEFkZGl0aW9uYWxseSBhbnkgb2YgdGhlXG5cdFx0XHQgKiAgVGltZSBlbmNvZGluZ3MgY2FuIGJlIHVzZWQuIE5vdGUgbmFtZXMgaW4gdGhlIGZvcm1cblx0XHRcdCAqICBvZiBOT1RFIE9DVEFWRSAoaS5lLiBDNCkgYXJlIGFsc28gYWNjZXB0ZWQgYW5kIGNvbnZlcnRlZCB0byB0aGVpclxuXHRcdFx0ICogIGZyZXF1ZW5jeSB2YWx1ZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7RnJlcXVlbmN5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgRnJlcXVlbmN5OiAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUcmFuc3BvcnRUaW1lIGRlc2NyaWJlcyBhIHBvc2l0aW9uIGFsb25nIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZS4gSXQgaXNcblx0XHRcdCAqICBzaW1pbGFyIHRvIFRpbWUgaW4gdGhhdCBpdCB1c2VzIGFsbCB0aGUgc2FtZSBlbmNvZGluZ3MsIGJ1dCBUcmFuc3BvcnRUaW1lIHNwZWNpZmljYWxseVxuXHRcdFx0ICogIHBlcnRhaW5zIHRvIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZSwgd2hpY2ggaXMgc3RhcnRhYmxlLCBzdG9wcGFibGUsIGxvb3BhYmxlLCBhbmQgc2Vla2FibGUuXG5cdFx0XHQgKiAgW1JlYWQgbW9yZV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvVHJhbnNwb3J0VGltZSlcblx0XHRcdCAqICBAdHlwZWRlZiB7VHJhbnNwb3J0VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIFRyYW5zcG9ydFRpbWU6ICd0cmFuc3BvcnRUaW1lJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaWNrcyBhcmUgdGhlIGJhc2ljIHN1YnVuaXQgb2YgdGhlIFRyYW5zcG9ydC4gVGhleSBhcmVcblx0XHRcdCAqICB0aGUgc21hbGxlc3QgdW5pdCBvZiB0aW1lIHRoYXQgdGhlIFRyYW5zcG9ydCBzdXBwb3J0cy5cblx0XHRcdCAqICBAdHlwZWRlZiB7VGlja3N9XG5cdFx0XHQgKi9cblx0ICAgICAgICBUaWNrczogJ3RpY2tzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBOb3JtYWwgdmFsdWVzIGFyZSB3aXRoaW4gdGhlIHJhbmdlIFswLCAxXS5cblx0XHRcdCAqICBAdHlwZWRlZiB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKi9cblx0ICAgICAgICBOb3JtYWxSYW5nZTogJ25vcm1hbFJhbmdlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBdWRpb1JhbmdlIHZhbHVlcyBhcmUgYmV0d2VlbiBbLTEsIDFdLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtBdWRpb1JhbmdlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQXVkaW9SYW5nZTogJ2F1ZGlvUmFuZ2UnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIERlY2liZWxzIGFyZSBhIGxvZ2FyaXRobWljIHVuaXQgb2YgbWVhc3VyZW1lbnQgd2hpY2ggaXMgdXNlZnVsIGZvciB2b2x1bWVcblx0XHRcdCAqICBiZWNhdXNlIG9mIHRoZSBsb2dhcml0aG1pYyB3YXkgdGhhdCB3ZSBwZXJjZWl2ZSBsb3VkbmVzcy4gMCBkZWNpYmVsc1xuXHRcdFx0ICogIG1lYW5zIG5vIGNoYW5nZSBpbiB2b2x1bWUuIC0xMGRiIGlzIGFwcHJveGltYXRlbHkgaGFsZiBhcyBsb3VkIGFuZCAxMGRiXG5cdFx0XHQgKiAgaXMgdHdpY2UgaXMgbG91ZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7RGVjaWJlbHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBEZWNpYmVsczogJ2RiJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYWxmLXN0ZXAgbm90ZSBpbmNyZW1lbnRzLCBpLmUuIDEyIGlzIGFuIG9jdGF2ZSBhYm92ZSB0aGUgcm9vdC4gYW5kIDEgaXMgYSBoYWxmLXN0ZXAgdXAuXG5cdFx0XHQgKiAgQHR5cGVkZWYge0ludGVydmFsfVxuXHRcdFx0ICovXG5cdCAgICAgICAgSW50ZXJ2YWw6ICdpbnRlcnZhbCcsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQmVhdHMgcGVyIG1pbnV0ZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7QlBNfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQlBNOiAnYnBtJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMC5cblx0XHRcdCAqICBAdHlwZWRlZiB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBQb3NpdGl2ZTogJ3Bvc2l0aXZlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBHYWluIGlzIHRoZSByYXRpbyBiZXR3ZWVuIGlucHV0IGFuZCBvdXRwdXQgb2YgYSBzaWduYWwuXG5cdFx0XHQgKiAgQSBnYWluIG9mIDAgaXMgdGhlIHNhbWUgYXMgc2lsZW5jaW5nIHRoZSBzaWduYWwuIEEgZ2FpbiBvZlxuXHRcdFx0ICogIDEsIGNhdXNlcyBubyBjaGFuZ2UgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZWRlZiB7R2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIEdhaW46ICdnYWluJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGNlbnQgaXMgYSBodW5kcmVkdGggb2YgYSBzZW1pdG9uZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7Q2VudHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBDZW50czogJ2NlbnRzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbmdsZSBiZXR3ZWVuIDAgYW5kIDM2MC5cblx0XHRcdCAqICBAdHlwZWRlZiB7RGVncmVlc31cblx0XHRcdCAqL1xuXHQgICAgICAgIERlZ3JlZXM6ICdkZWdyZWVzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIG51bWJlciByZXByZXNlbnRpbmcgYSBtaWRpIG5vdGUuXG5cdFx0XHQgKiAgQHR5cGVkZWYge01JREl9XG5cdFx0XHQgKi9cblx0ICAgICAgICBNSURJOiAnbWlkaScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBjb2xvbi1zZXBhcmF0ZWQgcmVwcmVzZW50YXRpb24gb2YgdGltZSBpbiB0aGUgZm9ybSBvZlxuXHRcdFx0ICogIEJhcnM6QmVhdHM6U2l4dGVlbnRocy5cblx0XHRcdCAqICBAdHlwZWRlZiB7QmFyc0JlYXRzU2l4dGVlbnRoc31cblx0XHRcdCAqL1xuXHQgICAgICAgIEJhcnNCZWF0c1NpeHRlZW50aHM6ICdiYXJzQmVhdHNTaXh0ZWVudGhzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTYW1wbGluZyBpcyB0aGUgcmVkdWN0aW9uIG9mIGEgY29udGludW91cyBzaWduYWwgdG8gYSBkaXNjcmV0ZSBzaWduYWwuXG5cdFx0XHQgKiAgQXVkaW8gaXMgdHlwaWNhbGx5IHNhbXBsZWQgNDQxMDAgdGltZXMgcGVyIHNlY29uZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7U2FtcGxlc31cblx0XHRcdCAqL1xuXHQgICAgICAgIFNhbXBsZXM6ICdzYW1wbGVzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIZXJ0eiBhcmUgYSBmcmVxdWVuY3kgcmVwcmVzZW50YXRpb24gZGVmaW5lZCBhcyBvbmUgY3ljbGUgcGVyIHNlY29uZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7SGVydHp9XG5cdFx0XHQgKi9cblx0ICAgICAgICBIZXJ0ejogJ2hlcnR6Jyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGZyZXF1ZW5jeSByZXByZXNlbnRlZCBieSBhIGxldHRlciBuYW1lLFxuXHRcdFx0ICogIGFjY2lkZW50YWwgYW5kIG9jdGF2ZS4gVGhpcyBzeXN0ZW0gaXMga25vd24gYXNcblx0XHRcdCAqICBbU2NpZW50aWZpYyBQaXRjaCBOb3RhdGlvbl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2NpZW50aWZpY19waXRjaF9ub3RhdGlvbikuXG5cdFx0XHQgKiAgQHR5cGVkZWYge05vdGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICBOb3RlOiAnbm90ZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgT25lIG1pbGxpc2Vjb25kIGlzIGEgdGhvdXNhbmR0aCBvZiBhIHNlY29uZC5cblx0XHRcdCAqICBAdHlwZWRlZiB7TWlsbGlzZWNvbmRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgTWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmRzJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTZWNvbmRzIGFyZSB0aGUgdGltZSB1bml0IG9mIHRoZSBBdWRpb0NvbnRleHQuIEluIHRoZSBlbmQsXG5cdFx0XHQgKiAgYWxsIHZhbHVlcyBuZWVkIHRvIGJlIGV2YWx1YXRlZCB0byBzZWNvbmRzLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtTZWNvbmRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgU2Vjb25kczogJ3NlY29uZHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGR1cmF0aW9uIHJlbGF0aXZlIHRvIGEgbWVhc3VyZS5cblx0XHRcdCAqICAqIFwiNG5cIiA9IHF1YXJ0ZXIgbm90ZVxuXHRcdFx0ICogICogXCIybVwiID0gdHdvIG1lYXN1cmVzXG5cdFx0XHQgKiAgKiBcIjh0XCIgPSBlaWdodGgtbm90ZSB0cmlwbGV0XG5cdFx0XHQgKiAgQHR5cGVkZWYge05vdGF0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgTm90YXRpb246ICdub3RhdGlvbidcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIEFVR01FTlQgVE9ORSdzIFBST1RPVFlQRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBUaW1lIGludG8gc2Vjb25kcy5cblx0XHQgKlxuXHRcdCAqICBVbmxpa2UgdGhlIG1ldGhvZCB3aGljaCBpdCBvdmVycmlkZXMsIHRoaXMgdGFrZXMgaW50byBhY2NvdW50XG5cdFx0ICogIHRyYW5zcG9ydHRpbWUgYW5kIG11c2ljYWwgbm90YXRpb24uXG5cdFx0ICpcblx0XHQgKiAgVGltZSA6IDEuNDBcblx0XHQgKiAgTm90YXRpb246IDRuIG9yIDFtIG9yIDJ0XG5cdFx0ICogIE5vdyBSZWxhdGl2ZTogKzNuXG5cdFx0ICogIE1hdGg6IDNuKzE2biBvciBldmVuIGNvbXBsaWNhdGVkIGV4cHJlc3Npb25zICgoM24qMikvNiArIDEpXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJuIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcih0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGltZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5ub3coKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpbWUodGltZSkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aW1lIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGltZS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBmcmVxdWVuY3kgcmVwcmVzZW50YXRpb24gaW50byBhIG51bWJlci5cblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4ge0hlcnR6fSAgICAgIHRoZSBmcmVxdWVuY3kgaW4gaGVydHpcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcihmcmVxKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gZnJlcTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcoZnJlcSkgfHwgVG9uZS5pc1VuZGVmKGZyZXEpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5GcmVxdWVuY3koZnJlcSkudmFsdWVPZigpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoZnJlcSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZyZXEudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSB0aW1lIHJlcHJlc2VudGF0aW9uIGludG8gdGlja3MuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHJldHVybiB7VGlja3N9ICB0aGUgdGltZSBpbiB0aWNrc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodGltZSkgfHwgVG9uZS5pc1N0cmluZyh0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKS50b1RpY2tzKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzVW5kZWYodGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0LnRpY2tzO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGltZSBpbnN0YW5jZW9mIFRvbmUuVGltZUJhc2UpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRpbWUudG9UaWNrcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGFyYW0gd3JhcHMgdGhlIG5hdGl2ZSBXZWIgQXVkaW8ncyBBdWRpb1BhcmFtIHRvIHByb3ZpZGVcblx0XHQgKiAgICAgICAgIGFkZGl0aW9uYWwgdW5pdCBjb252ZXJzaW9uIGZ1bmN0aW9uYWxpdHkuIEl0IGFsc29cblx0XHQgKiAgICAgICAgIHNlcnZlcyBhcyBhIGJhc2UtY2xhc3MgZm9yIGNsYXNzZXMgd2hpY2ggaGF2ZSBhIHNpbmdsZSxcblx0XHQgKiAgICAgICAgIGF1dG9tYXRhYmxlIHBhcmFtZXRlci5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0gIHtBdWRpb1BhcmFtfSAgcGFyYW0gIFRoZSBwYXJhbWV0ZXIgdG8gd3JhcC5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5UeXBlfSB1bml0cyBUaGUgdW5pdHMgb2YgdGhlIGF1ZGlvIHBhcmFtLlxuXHRcdCAqICBAcGFyYW0gIHtCb29sZWFufSBjb252ZXJ0IElmIHRoZSBwYXJhbSBzaG91bGQgYmUgY29udmVydGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwYXJhbScsXG5cdCAgICAgICAgICAgICd1bml0cycsXG5cdCAgICAgICAgICAgICdjb252ZXJ0J1xuXHQgICAgICAgIF0sIFRvbmUuUGFyYW0pO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG5hdGl2ZSBwYXJhbWV0ZXIgdG8gY29udHJvbFxuXHRcdFx0ICogIEB0eXBlICB7QXVkaW9QYXJhbX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0ID0gb3B0aW9ucy5wYXJhbTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdW5pdHMgb2YgdGhlIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlR5cGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnVuaXRzID0gb3B0aW9ucy51bml0cztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiB0aGUgdmFsdWUgc2hvdWxkIGJlIGNvbnZlcnRlZCBvciBub3Rcblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY29udmVydCA9IG9wdGlvbnMuY29udmVydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUcnVlIGlmIHRoZSBzaWduYWwgdmFsdWUgaXMgYmVpbmcgb3ZlcnJpZGRlbiBieVxuXHRcdFx0ICogIGEgY29ubmVjdGVkIHNpZ25hbC5cblx0XHRcdCAqICBAcmVhZE9ubHlcblx0XHRcdCAqICBAdHlwZSAge2Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3ZlcnJpZGRlbiA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHRpbWVsaW5lIHdoaWNoIHRyYWNrcyBhbGwgb2YgdGhlIGF1dG9tYXRpb25zLlxuXHRcdFx0ICogQHR5cGUge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFRvbmUuVGltZWxpbmUoMTAwMCk7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKG9wdGlvbnMudmFsdWUpICYmIHRoaXMuX3BhcmFtKSB7XG5cdCAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhcmFtLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVmYXVsdCxcblx0ICAgICAgICAnY29udmVydCc6IHRydWUsXG5cdCAgICAgICAgJ3BhcmFtJzogdW5kZWZpbmVkXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYXJhbSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJhbS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90b1VuaXRzKHRoaXMuZ2V0VmFsdWVBdFRpbWUobm93KSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pbml0aWFsVmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgICAgICB0aGlzLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLnNldFZhbHVlQXRUaW1lKHZhbHVlLCB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXJcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYXJhbSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJhbS5wcm90b3R5cGUsICdtaW5WYWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5UaW1lIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5GcmVxdWVuY3kgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLk5vcm1hbFJhbmdlIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5Qb3NpdGl2ZSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQlBNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQXVkaW9SYW5nZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5EZWNpYmVscykge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC1JbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJhbS5taW5WYWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXJcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYXJhbSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJhbS5wcm90b3R5cGUsICdtYXhWYWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQXVkaW9SYW5nZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW0ubWF4VmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IHRoZSBnaXZlbiB2YWx1ZSBmcm9tIHRoZSB0eXBlIHNwZWNpZmllZCBieSBUb25lLlBhcmFtLnVuaXRzXG5cdFx0ICogIGludG8gdGhlIGRlc3RpbmF0aW9uIHZhbHVlIChzdWNoIGFzIEdhaW4gb3IgRnJlcXVlbmN5KS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7Kn0gdmFsIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG5cdFx0ICogIEByZXR1cm4ge251bWJlcn0gICAgIHRoZSBudW1iZXIgd2hpY2ggdGhlIHZhbHVlIHNob3VsZCBiZSBzZXQgdG9cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9mcm9tVW5pdHMgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKCh0aGlzLmNvbnZlcnQgfHwgVG9uZS5pc1VuZGVmKHRoaXMuY29udmVydCkpICYmICF0aGlzLm92ZXJyaWRkZW4pIHtcblx0ICAgICAgICAgICAgc3dpdGNoICh0aGlzLnVuaXRzKSB7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLlRpbWU6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHModmFsKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuRnJlcXVlbmN5OlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9GcmVxdWVuY3kodmFsKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuRGVjaWJlbHM6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5kYlRvR2Fpbih2YWwpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWwsIDApLCAxKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuQXVkaW9SYW5nZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWwsIC0xKSwgMSk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLlBvc2l0aXZlOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHZhbCwgMCk7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ29udmVydCB0aGUgcGFyYW1ldGVycyB2YWx1ZSBpbnRvIHRoZSB1bml0cyBzcGVjaWZpZWQgYnkgVG9uZS5QYXJhbS51bml0cy5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwYXJhbSAge251bWJlcn0gdmFsIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG5cdFx0ICogQHJldHVybiB7bnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX3RvVW5pdHMgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udmVydCB8fCBUb25lLmlzVW5kZWYodGhpcy5jb252ZXJ0KSkge1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudW5pdHMpIHtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuRGVjaWJlbHM6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5nYWluVG9EYih2YWwpO1xuXHQgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgbWluaW11bSBvdXRwdXQgdmFsdWVcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9taW5PdXRwdXQgPSAwLjAwMDAxO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBldmVudCB0eXBlc1xuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZSA9IHtcblx0ICAgICAgICBMaW5lYXI6ICdsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZScsXG5cdCAgICAgICAgRXhwb25lbnRpYWw6ICdleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICBUYXJnZXQ6ICdzZXRUYXJnZXRBdFRpbWUnLFxuXHQgICAgICAgIFNldFZhbHVlOiAnc2V0VmFsdWVBdFRpbWUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhIHBhcmFtZXRlciB2YWx1ZSBjaGFuZ2UgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7Kn1cdHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSAgdGltZSBUaGUgdGltZSB3aGVuIHRoZSBjaGFuZ2Ugc2hvdWxkIG9jY3VyLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHRoZSBmcmVxdWVuY3kgdG8gXCJHNFwiIGluIGV4YWN0bHkgMSBzZWNvbmQgZnJvbSBub3cuXG5cdFx0ICogZnJlcS5zZXRWYWx1ZUF0VGltZShcIkc0XCIsIFwiKzFcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLnNldFZhbHVlQXRUaW1lKHZhbHVlLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzaWduYWxzIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBTdWJzZXF1ZW50IHNjaGVkdWxpbmdcblx0XHQgKiAgbWF5IGludmFsaWRhdGUgdGhlIHJldHVybmVkIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgV2hlbiB0byBnZXQgdGhlIHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgYWZ0ZXIgPSB0aGlzLl9ldmVudHMuZ2V0QWZ0ZXIodGltZSk7XG5cdCAgICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgdmFyIGluaXRpYWxWYWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyh0aGlzLl9pbml0aWFsVmFsdWUsIHRoaXMuX3BhcmFtLmRlZmF1bHRWYWx1ZSk7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXHQgICAgICAgIC8vaWYgaXQgd2FzIHNldCBieVxuXHQgICAgICAgIGlmIChiZWZvcmUgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSBpbml0aWFsVmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5UYXJnZXQpIHtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzID0gdGhpcy5fZXZlbnRzLmdldEJlZm9yZShiZWZvcmUudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c1ZhbDtcblx0ICAgICAgICAgICAgaWYgKHByZXZpb3VzID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbCA9IGluaXRpYWxWYWx1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsID0gcHJldmlvdXMudmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9leHBvbmVudGlhbEFwcHJvYWNoKGJlZm9yZS50aW1lLCBwcmV2aW91c1ZhbCwgYmVmb3JlLnZhbHVlLCBiZWZvcmUuY29uc3RhbnQsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSBiZWZvcmUudmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcikge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2xpbmVhckludGVycG9sYXRlKGJlZm9yZS50aW1lLCBiZWZvcmUudmFsdWUsIGFmdGVyLnRpbWUsIGFmdGVyLnZhbHVlLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9leHBvbmVudGlhbEludGVycG9sYXRlKGJlZm9yZS50aW1lLCBiZWZvcmUudmFsdWUsIGFmdGVyLnRpbWUsIGFmdGVyLnZhbHVlLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGJlZm9yZS52YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDcmVhdGVzIGEgc2NoZWR1bGUgcG9pbnQgd2l0aCB0aGUgY3VycmVudCB2YWx1ZSBhdCB0aGUgY3VycmVudCB0aW1lLlxuXHRcdCAqICBUaGlzIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgYW4gYXV0b21hdGlvbiBhbmNob3IgcG9pbnQgaW4gb3JkZXIgdG9cblx0XHQgKiAgc2NoZWR1bGUgY2hhbmdlcyBmcm9tIHRoZSBjdXJyZW50IHZhbHVlLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gbm93IChPcHRpb25hbGx5KSBwYXNzIHRoZSBub3cgdmFsdWUgaW4uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRSYW1wUG9pbnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgY3VycmVudFZhbCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgdGhpcy5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmIChjdXJyZW50VmFsID09PSAwKSB7XG5cdCAgICAgICAgICAgIGN1cnJlbnRWYWwgPSB0aGlzLl9taW5PdXRwdXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuc2V0VmFsdWVBdFRpbWUodGhpcy5fdG9Vbml0cyhjdXJyZW50VmFsKSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhIGxpbmVhciBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbSB0aGVcblx0XHQgKiAgcHJldmlvdXMgc2NoZWR1bGVkIHBhcmFtZXRlciB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBlbmRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5kVGltZSkge1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICBlbmRUaW1lID0gdGhpcy50b1NlY29uZHMoZW5kVGltZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IGVuZFRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgZW5kVGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhbiBleHBvbmVudGlhbCBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgcHJldmlvdXMgc2NoZWR1bGVkIHBhcmFtZXRlciB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBlbmRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBlbmRUaW1lKSB7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIHZhbHVlID0gTWF0aC5tYXgodGhpcy5fbWluT3V0cHV0LCB2YWx1ZSk7XG5cdCAgICAgICAgZW5kVGltZSA9IHRoaXMudG9TZWNvbmRzKGVuZFRpbWUpO1xuXHQgICAgICAgIC8vc3RvcmUgdGhlIGV2ZW50XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5FeHBvbmVudGlhbCxcblx0ICAgICAgICAgICAgJ3RpbWUnOiBlbmRUaW1lLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIGVuZFRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gZXhwb25lbnRpYWwgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb21cblx0XHQgKiAgdGhlIGN1cnJlbnQgdGltZSBhbmQgY3VycmVudCB2YWx1ZSB0byB0aGUgZ2l2ZW4gdmFsdWUgb3ZlciB0aGVcblx0XHQgKiAgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWUgICBUaGUgdmFsdWUgdG8gcmFtcCB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vZXhwb25lbnRpYWxseSByYW1wIHRvIHRoZSB2YWx1ZSAyIG92ZXIgNCBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5leHBvbmVudGlhbFJhbXBUbygyLCA0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvID0gZnVuY3Rpb24gKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLnNldFJhbXBQb2ludChzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lICsgdGhpcy50b1NlY29uZHMocmFtcFRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGxpbmVhciBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgY3VycmVudCB0aW1lIGFuZCBjdXJyZW50IHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZSBvdmVyIHRoZVxuXHRcdCAqICBkdXJhdGlvbiBvZiB0aGUgcmFtcFRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0W3N0YXJ0VGltZT1ub3ddIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9saW5lYXJseSByYW1wIHRvIHRoZSB2YWx1ZSA0IG92ZXIgMyBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5saW5lYXJSYW1wVG8oNCwgMyk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5saW5lYXJSYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lICsgdGhpcy50b1NlY29uZHMocmFtcFRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBTaW5jZSBpdFxuXHRcdCAqICBpcyBhbiBleHBvbmVudGlhbCBhcHByb2FjaCBpdCB3aWxsIGNvbnRpbnVlIGFwcHJvYWNoaW5nIGFmdGVyIHRoZSByYW1wIGR1cmF0aW9uLiBUaGVcblx0XHQgKiAgcmFtcFRpbWUgaXMgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0byByZWFjaCBvdmVyIDk5JSBvZiB0aGUgd2F5IHRvd2FyZHMgdGhlIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2V4cG9uZW50aWFsbHkgcmFtcCB0byB0aGUgdmFsdWUgMiBvdmVyIDQgc2Vjb25kcy5cblx0XHQgKiBzaWduYWwuZXhwb25lbnRpYWxSYW1wVG8oMiwgNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS50YXJnZXRSYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUodmFsdWUsIHN0YXJ0VGltZSwgcmFtcFRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFNpbmNlIGl0XG5cdFx0ICogIGlzIGFuIGV4cG9uZW50aWFsIGFwcHJvYWNoIGl0IHdpbGwgY29udGludWUgYXBwcm9hY2hpbmcgYWZ0ZXIgdGhlIHJhbXAgZHVyYXRpb24uIFRoZVxuXHRcdCAqICByYW1wVGltZSBpcyB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRvIHJlYWNoIG92ZXIgOTklIG9mIHRoZSB3YXkgdG93YXJkcyB0aGUgdmFsdWUuIFRoaXMgbWV0aG9kc1xuXHRcdCAqICBpcyBzaW1pbGFyIHRvIHNldFRhcmdldEF0VGltZSBleGNlcHQgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIGEgdGltZSBpbnN0ZWFkIG9mIGEgJ3RpbWVDb25zdGFudCdcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHR0aW1lIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vZXhwb25lbnRpYWxseSByYW1wIHRvIHRoZSB2YWx1ZSAyIG92ZXIgNCBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5leHBvbmVudGlhbFJhbXBUbygyLCA0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSwgcmFtcFRpbWUpIHtcblx0ICAgICAgICB2YXIgdGltZUNvbnN0YW50ID0gTWF0aC5sb2codGhpcy50b1NlY29uZHMocmFtcFRpbWUpICsgMSkgLyBNYXRoLmxvZygyMDApO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5zZXRUYXJnZXRBdFRpbWUodmFsdWUsIHRpbWUsIHRpbWVDb25zdGFudCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoXG5cdFx0ICogIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRpbWUgY29uc3RhbnQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGltZUNvbnN0YW50XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5zZXRUYXJnZXRBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KSB7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIC8vIFRoZSB2YWx1ZSB3aWxsIG5ldmVyIGJlIGFibGUgdG8gYXBwcm9hY2ggd2l0aG91dCB0aW1lQ29uc3RhbnQgPiAwLlxuXHQgICAgICAgIGlmICh0aW1lQ29uc3RhbnQgPD0gMCkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RpbWVDb25zdGFudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5UYXJnZXQsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IHN0YXJ0VGltZSxcblx0ICAgICAgICAgICAgJ2NvbnN0YW50JzogdGltZUNvbnN0YW50XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uc2V0VGFyZ2V0QXRUaW1lKHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgYW4gYXJyYXkgb2YgYXJiaXRyYXJ5IHBhcmFtZXRlciB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge0FycmF5fSB2YWx1ZXNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBkdXJhdGlvblxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc2NhbGluZz0xXSBJZiB0aGUgdmFsdWVzIGluIHRoZSBjdXJ2ZSBzaG91bGQgYmUgc2NhbGVkIGJ5IHNvbWUgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFZhbHVlQ3VydmVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWVzLCBzdGFydFRpbWUsIGR1cmF0aW9uLCBzY2FsaW5nKSB7XG5cdCAgICAgICAgc2NhbGluZyA9IFRvbmUuZGVmYXVsdEFyZyhzY2FsaW5nLCAxKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0VmFsdWVBdFRpbWUodmFsdWVzWzBdICogc2NhbGluZywgc3RhcnRUaW1lKTtcblx0ICAgICAgICB2YXIgc2VnVGltZSA9IGR1cmF0aW9uIC8gKHZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlc1tpXSAqIHNjYWxpbmcsIHN0YXJ0VGltZSArIGkgKiBzZWdUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbHMgYWxsIHNjaGVkdWxlZCBwYXJhbWV0ZXIgY2hhbmdlcyB3aXRoIHRpbWVzIGdyZWF0ZXIgdGhhbiBvclxuXHRcdCAqICBlcXVhbCB0byBzdGFydFRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVkVmFsdWVzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoaXMgaXMgc2ltaWxhciB0byBbY2FuY2VsU2NoZWR1bGVkVmFsdWVzXSgjY2FuY2VsU2NoZWR1bGVkVmFsdWVzKSBleGNlcHRcblx0XHQgKiAgaXQgaG9sZHMgdGhlIGF1dG9tYXRlZCB2YWx1ZSBhdCB0aW1lIHVudGlsIHRoZSBuZXh0IGF1dG9tYXRlZCBldmVudC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuY2FuY2VsQW5kSG9sZEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHZhbHVlQXRUaW1lID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICAvL2lmIHRoZXJlIGlzIGFuIGV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgICAgLy9hbmQgdGhhdCBldmVuIGlzIG5vdCBhIFwic2V0XCJcblx0ICAgICAgICB2YXIgYmVmb3JlID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICB2YXIgYWZ0ZXIgPSB0aGlzLl9ldmVudHMuZ2V0QWZ0ZXIodGltZSk7XG5cdCAgICAgICAgaWYgKGJlZm9yZSAmJiBiZWZvcmUudGltZSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAvL3JlbW92ZSBldmVyeXRoaW5nIGFmdGVyXG5cdCAgICAgICAgICAgIGlmIChhZnRlcikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbChhZnRlci50aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwodGltZSArIDAuMDAwMDAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgLy9jYW5jZWwgdGhlIG5leHQgZXZlbnQocylcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbChhZnRlci50aW1lKTtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlQXRUaW1lLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlQXRUaW1lLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodmFsdWVBdFRpbWUsIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZUF0VGltZSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zZXQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVBdFRpbWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmICh0aGlzLl9wYXJhbS5jYW5jZWxBbmRIb2xkQXRUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFyYW0uc2V0VmFsdWVBdFRpbWUodmFsdWVBdFRpbWUsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmFtcHMgdG8gdGhlIGdpdmVuIHZhbHVlIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKiAgQXV0b21hdGljYWxseSBzZWxlY3RzIHRoZSBiZXN0IHJhbXAgdHlwZSAoZXhwb25lbnRpYWwgb3IgbGluZWFyKVxuXHRcdCAqICBkZXBlbmRpbmcgb24gdGhlIGB1bml0c2Agb2YgdGhlIHNpZ25hbFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgXHRUaGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JhbXAgdG8gdGhlIHZhbHVlIGVpdGhlciBsaW5lYXJseSBvciBleHBvbmVudGlhbGx5XG5cdFx0ICogLy9kZXBlbmRpbmcgb24gdGhlIFwidW5pdHNcIiB2YWx1ZSBvZiB0aGUgc2lnbmFsXG5cdFx0ICogc2lnbmFsLnJhbXBUbygwLCAxMCk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zY2hlZHVsZSBpdCB0byByYW1wIHN0YXJ0aW5nIGF0IGEgc3BlY2lmaWMgdGltZVxuXHRcdCAqIHNpZ25hbC5yYW1wVG8oMCwgMTAsIDUpXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5yYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICByYW1wVGltZSA9IFRvbmUuZGVmYXVsdEFyZyhyYW1wVGltZSwgMC4xKTtcblx0ICAgICAgICBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkZyZXF1ZW5jeSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuQlBNIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5EZWNpYmVscykge1xuXHQgICAgICAgICAgICB0aGlzLmV4cG9uZW50aWFsUmFtcFRvKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUbyh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFVVE9NQVRJT04gQ1VSVkUgQ0FMQ1VMQVRJT05TXG5cdCAgICAvL1x0TUlUIExpY2Vuc2UsIGNvcHlyaWdodCAoYykgMjAxNCBKb3JkYW4gU2FudGVsbFxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBDYWxjdWxhdGVzIHRoZSB0aGUgdmFsdWUgYWxvbmcgdGhlIGN1cnZlIHByb2R1Y2VkIGJ5IHNldFRhcmdldEF0VGltZVxuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2V4cG9uZW50aWFsQXBwcm9hY2ggPSBmdW5jdGlvbiAodDAsIHYwLCB2MSwgdGltZUNvbnN0YW50LCB0KSB7XG5cdCAgICAgICAgcmV0dXJuIHYxICsgKHYwIC0gdjEpICogTWF0aC5leHAoLSh0IC0gdDApIC8gdGltZUNvbnN0YW50KTtcblx0ICAgIH07XG5cdCAgICAvLyBDYWxjdWxhdGVzIHRoZSB0aGUgdmFsdWUgYWxvbmcgdGhlIGN1cnZlIHByb2R1Y2VkIGJ5IGxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fbGluZWFySW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAodDAsIHYwLCB0MSwgdjEsIHQpIHtcblx0ICAgICAgICByZXR1cm4gdjAgKyAodjEgLSB2MCkgKiAoKHQgLSB0MCkgLyAodDEgLSB0MCkpO1xuXHQgICAgfTtcblx0ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHRoZSB2YWx1ZSBhbG9uZyB0aGUgY3VydmUgcHJvZHVjZWQgYnkgZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZVxuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAodDAsIHYwLCB0MSwgdjEsIHQpIHtcblx0ICAgICAgICByZXR1cm4gdjAgKiBNYXRoLnBvdyh2MSAvIHYwLCAodCAtIHQwKSAvICh0MSAtIHQwKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFyYW07XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIE9mZmxpbmVBdWRpb0NvbnRleHRcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQ29udGV4dH1cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgY2hhbm5lbHMgIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdG8gcmVuZGVyXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGR1cmF0aW9uICBUaGUgZHVyYXRpb24gdG8gcmVuZGVyIGluIHNhbXBsZXNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHNhbXBsZVJhdGUgdGhlIHNhbXBsZSByYXRlIHRvIHJlbmRlciBhdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dCA9IGZ1bmN0aW9uIChjaGFubmVscywgZHVyYXRpb24sIHNhbXBsZVJhdGUpIHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb2ZmbGluZSBjb250ZXh0XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge09mZmxpbmVBdWRpb0NvbnRleHR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB2YXIgb2ZmbGluZUNvbnRleHQgPSBuZXcgT2ZmbGluZUF1ZGlvQ29udGV4dChjaGFubmVscywgZHVyYXRpb24gKiBzYW1wbGVSYXRlLCBzYW1wbGVSYXRlKTtcblx0ICAgICAgICAvL3dyYXAgdGhlIG1ldGhvZHMvbWVtYmVyc1xuXHQgICAgICAgIFRvbmUuQ29udGV4dC5jYWxsKHRoaXMsIHtcblx0ICAgICAgICAgICAgJ2NvbnRleHQnOiBvZmZsaW5lQ29udGV4dCxcblx0ICAgICAgICAgICAgJ2Nsb2NrU291cmNlJzogJ29mZmxpbmUnLFxuXHQgICAgICAgICAgICAnbG9va0FoZWFkJzogMCxcblx0ICAgICAgICAgICAgJ3VwZGF0ZUludGVydmFsJzogMTI4IC8gc2FtcGxlUmF0ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgcHJpdmF0ZSByZWZlcmVuY2UgdG8gdGhlIGR1cmF0aW9uXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW4gYXJ0aWZpY2lhbCBjbG9jayBzb3VyY2Vcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgPSAwO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT2ZmbGluZUNvbnRleHQsIFRvbmUuQ29udGV4dCk7XG5cdCAgICAvKipcblx0XHQgKiAgT3ZlcnJpZGUgdGhlIG5vdyBtZXRob2QgdG8gcG9pbnQgdG8gdGhlIGludGVybmFsIGNsb2NrIHRpbWVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFRpbWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbmRlciB0aGUgb3V0cHV0IG9mIHRoZSBPZmZsaW5lQ29udGV4dFxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB3aGlsZSAodGhpcy5fZHVyYXRpb24gLSB0aGlzLl9jdXJyZW50VGltZSA+PSAwKSB7XG5cdCAgICAgICAgICAgIC8vaW52b2tlIGFsbCB0aGUgY2FsbGJhY2tzIG9uIHRoYXQgdGltZVxuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3RpY2snKTtcblx0ICAgICAgICAgICAgLy9pbmNyZW1lbnQgdGhlIGNsb2NrXG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lICs9IHRoaXMuYmxvY2tUaW1lO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dC5zdGFydFJlbmRlcmluZygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbG9zZSB0aGUgY29udGV4dFxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2NvbnRleHQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5PZmZsaW5lQ29udGV4dDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuXHQgICAgICAgIHZhciBpc01vYmlsZVNhZmFyaSA9IHVhLmluY2x1ZGVzKCdzYWZhcmknKSAmJiAhdWEuaW5jbHVkZXMoJ2Nocm9tZScpICYmIHVhLmluY2x1ZGVzKCdtb2JpbGUnKTtcblx0ICAgICAgICBpZiAoaXNNb2JpbGVTYWZhcmkpIHtcblx0ICAgICAgICAgICAgLy9tb2JpbGUgc2FmYXJpIGhhcyBhIGJpemFycmUgYnVnIHdpdGggdGhlIG9mZmxpbmUgY29udGV4dFxuXHQgICAgICAgICAgICAvL3doZW4gYSBCdWZmZXJTb3VyY2VOb2RlIGlzIHN0YXJ0ZWQsIGl0IHN0YXJ0cyB0aGUgb2ZmbGluZSBjb250ZXh0XG5cdCAgICAgICAgICAgIC8vXG5cdCAgICAgICAgICAgIC8vZGVmZXJyaW5nIGFsbCBCdWZmZXJTb3VyY2Ugc3RhcnRzIHRpbGwgdGhlIGxhc3QgcG9zc2libGUgbW9tZW50XG5cdCAgICAgICAgICAgIC8vcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCBvZiB0aGlzIGhhcHBlbmluZ1xuXHQgICAgICAgICAgICBUb25lLk9mZmxpbmVDb250ZXh0LnByb3RvdHlwZS5jcmVhdGVCdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnVmZmVyU291cmNlID0gdGhpcy5fY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICAgICAgICAgIHZhciBfbmF0aXZlX3N0YXJ0ID0gYnVmZmVyU291cmNlLnN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyU291cmNlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBfbmF0aXZlX3N0YXJ0LmNhbGwoYnVmZmVyU291cmNlLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIDApO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclNvdXJjZTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIHRoaW4gd3JhcHBlciBhcm91bmQgdGhlIE5hdGl2ZSBXZWIgQXVkaW8gR2Fpbk5vZGUuXG5cdFx0ICogICAgICAgICBUaGUgR2Fpbk5vZGUgaXMgYSBiYXNpYyBidWlsZGluZyBibG9jayBvZiB0aGUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICBBUEkgYW5kIGlzIHVzZWZ1bCBmb3Igcm91dGluZyBhdWRpbyBhbmQgYWRqdXN0aW5nIGdhaW5zLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gIGdhaW4gIFRoZSBpbml0aWFsIGdhaW4gb2YgdGhlIEdhaW5Ob2RlXG5cdFx0ICogIEBwYXJhbSB7VG9uZS5UeXBlPX0gdW5pdHMgVGhlIHVuaXRzIG9mIHRoZSBnYWluIHBhcmFtZXRlci5cblx0XHQgKi9cblx0ICAgIFRvbmUuR2FpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ3VuaXRzJ1xuXHQgICAgICAgIF0sIFRvbmUuR2Fpbik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgR2Fpbk5vZGVcblx0XHRcdCAqICBAdHlwZSAge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLl9nYWluTm9kZSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gcGFyYW1ldGVyIG9mIHRoZSBnYWluIG5vZGUuXG5cdFx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5nYWluID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9nYWluTm9kZS5nYWluLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBvcHRpb25zLnVuaXRzLFxuXHQgICAgICAgICAgICAndmFsdWUnOiBvcHRpb25zLmdhaW4sXG5cdCAgICAgICAgICAgICdjb252ZXJ0Jzogb3B0aW9ucy5jb252ZXJ0XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2dhaW4nKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdhaW4sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdnYWluJzogMSxcblx0ICAgICAgICAnY29udmVydCc6IHRydWVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkdhaW59ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdnYWluJyk7XG5cdCAgICAgICAgdGhpcy5nYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmdhaW4gPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdhaW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCAmJiAhQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVDb25zdGFudFNvdXJjZSkge1xuXHQgICAgICAgIHZhciBDb25zdGFudFNvdXJjZU5vZGUgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgMTI4LCBjb250ZXh0LnNhbXBsZVJhdGUpO1xuXHQgICAgICAgICAgICB2YXIgYXJyID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgYXJyW2ldID0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UubG9vcCA9IHRydWU7XG5cdCAgICAgICAgICAgIHZhciBnYWluTm9kZSA9IHRoaXMuX291dHB1dCA9IGNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgICAgICB0aGlzLm9mZnNldCA9IGdhaW5Ob2RlLmdhaW47XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5jb25uZWN0KGdhaW5Ob2RlKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIENvbnN0YW50U291cmNlTm9kZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2Uuc3RhcnQodGltZSk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLnN0b3AodGltZSk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXQuY29ubmVjdC5hcHBseSh0aGlzLl9vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXQuZGlzY29ubmVjdC5hcHBseSh0aGlzLl9vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVDb25zdGFudFNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudFNvdXJjZU5vZGUodGhpcyk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnN0YW50U291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50U291cmNlTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc2lnbmFsIGlzIGFuIGF1ZGlvLXJhdGUgdmFsdWUuIFRvbmUuU2lnbmFsIGlzIGEgY29yZSBjb21wb25lbnQgb2YgdGhlIGxpYnJhcnkuXG5cdFx0ICogICAgICAgICAgVW5saWtlIGEgbnVtYmVyLCBTaWduYWxzIGNhbiBiZSBzY2hlZHVsZWQgd2l0aCBzYW1wbGUtbGV2ZWwgYWNjdXJhY3kuIFRvbmUuU2lnbmFsXG5cdFx0ICogICAgICAgICAgaGFzIGFsbCBvZiB0aGUgbWV0aG9kcyBhdmFpbGFibGUgdG8gbmF0aXZlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgIFtBdWRpb1BhcmFtXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1hdWRpb3BhcmFtLWludGVyZmFjZSlcblx0XHQgKiAgICAgICAgICBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgY29udmVuaWVuY2VzLiBSZWFkIG1vcmUgYWJvdXQgd29ya2luZyB3aXRoIHNpZ25hbHNcblx0XHQgKiAgICAgICAgICBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1RvbmVqcy9Ub25lLmpzL3dpa2kvU2lnbmFscykuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlBhcmFtfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxBdWRpb1BhcmFtfSBbdmFsdWVdIEluaXRpYWwgdmFsdWUgb2YgdGhlIHNpZ25hbC4gSWYgYW4gQXVkaW9QYXJhbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHBhc3NlZCBpbiwgdGhhdCBwYXJhbWV0ZXIgd2lsbCBiZSB3cmFwcGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNvbnRyb2xsZWQgYnkgdGhlIFNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IFt1bml0cz1OdW1iZXJdIHVuaXQgVGhlIHVuaXRzIHRoZSBzaWduYWwgaXMgaW4uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgxMCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd2YWx1ZScsXG5cdCAgICAgICAgICAgICd1bml0cydcblx0ICAgICAgICBdLCBUb25lLlNpZ25hbCk7XG5cdCAgICAgICAgVG9uZS5QYXJhbS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiBXaGVuIGEgc2lnbmFsIGlzIGNvbm5lY3RlZCB0byBhbm90aGVyIHNpZ25hbCBvciBhdWRpbyBwYXJhbSxcblx0XHRcdCogdGhpcyBzaWduYWwgYmVjb21lcyBhIHByb3h5IGZvciBpdFxuXHRcdFx0KiBAdHlwZSB7QXJyYXl9XG5cdFx0XHQqIEBwcml2YXRlXG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCogSW5kaWNhdGVzIGlmIHRoZSBjb25zdGFudCBzb3VyY2Ugd2FzIHN0YXJ0ZWQgb3Igbm90XG5cdFx0XHQqIEBwcml2YXRlXG5cdFx0XHQqIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0Ki9cblx0ICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY29uc3RhbnQgc291cmNlIG5vZGUgd2hpY2ggZ2VuZXJhdGVzIHRoZSBzaWduYWxcblx0XHRcdCAqIEB0eXBlIHtDb25zdGFudFNvdXJjZU5vZGV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2UgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ29uc3RhbnRTb3VyY2UoKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuX2NvbnN0YW50U291cmNlLm9mZnNldDtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBub2RlIHdoZXJlIHRoZSBjb25zdGFudCBzaWduYWwgdmFsdWUgaXMgc2NhbGVkLlxuXHRcdFx0ICogQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5fY29uc3RhbnRTb3VyY2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbm9kZSB3aGVyZSB0aGUgdmFsdWUgaXMgc2V0LlxuXHRcdFx0ICogQHR5cGUge1RvbmUuUGFyYW19XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMuX3BhcmFtID0gdGhpcy5vdXRwdXQub2Zmc2V0O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2lnbmFsLCBUb25lLlBhcmFtKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndmFsdWUnOiAwLFxuXHQgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWZhdWx0LFxuXHQgICAgICAgICdjb252ZXJ0JzogdHJ1ZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGVuIHNpZ25hbHMgY29ubmVjdCB0byBvdGhlciBzaWduYWxzIG9yIEF1ZGlvUGFyYW1zLFxuXHRcdCAqICB0aGV5IHRha2Ugb3ZlciB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoYXQgc2lnbmFsIG9yIEF1ZGlvUGFyYW0uXG5cdFx0ICogIEZvciBhbGwgb3RoZXIgbm9kZXMsIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBhIGRlZmF1bHQgPGNvZGU+Y29ubmVjdDwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQG92ZXJyaWRlXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9QYXJhbXxBdWRpb05vZGV8VG9uZS5TaWduYWx8VG9uZX0gbm9kZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bWJlcj0wXSBUaGUgb3V0cHV0IG51bWJlciB0byBjb25uZWN0IGZyb20uXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW1iZXI9MF0gVGhlIGlucHV0IG51bWJlciB0byBjb25uZWN0IHRvLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWx9IHRoaXNcblx0XHQgKiAgQG1ldGhvZFxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIC8vdGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gd2hlcmUgdGhpcyBub2RlIHdpbGwgZm9yd2FyZCBhdXRvbWF0aW9uc1xuXHQgICAgICAgIC8vdG8gY29ubmVjdGVkIG5vZGVzIHdpdGhvdXQgYW55IHNpZ25hbCBpZiBwb3NzaWJsZS5cblx0ICAgICAgICBpZiAodGhpcy5faXNQYXJhbShub2RlKSAmJiAhdGhpcy5fc291cmNlU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgICAgIG5vZGUub3ZlcnJpZGRlbiA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGx5QXV0b21hdGlvbnMobm9kZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fc291cmNlU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZS5zdGFydCgwKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUYWtlcyBhIG5vZGUgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgaWYgaXQgaXMgYSBQYXJhbSBvciBBdWRpb1BhcmFtXG5cdFx0ICogQHBhcmFtICB7Kn0gbm9kZSBUaGUgbm9kZSB0byB0ZXN0XG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLl9pc1BhcmFtID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5QYXJhbSAmJiBUb25lLlBhcmFtID09PSBub2RlLmNvbnN0cnVjdG9yIHx8IG5vZGUgaW5zdGFuY2VvZiBBdWRpb1BhcmFtO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIERpc2NhcmQgdGhlIG9wdGltaXphdGlvbiBhbmQgY29ubmVjdCBhbGwgb2YgdGhlIHByb3hpZXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLl9jb25uZWN0UHJveGllcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZVN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlLnN0YXJ0KDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9wcm94aWVzLmZvckVhY2goZnVuY3Rpb24gKHByb3h5KSB7XG5cdCAgICAgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdC5jYWxsKHRoaXMsIHByb3h5KTtcblx0ICAgICAgICAgICAgaWYgKHByb3h5Ll9wcm94aWVzKSB7XG5cdCAgICAgICAgICAgICAgICBwcm94eS5fY29ubmVjdFByb3hpZXMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlZCB3aGVuIGEgbm9kZSBpcyBjb25uZWN0ZWQgdG8gdGhpc1xuXHRcdCAqIEBwYXJhbSAge0F1ZGlvTm9kZX0gZnJvbVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX29uQ29ubmVjdCA9IGZ1bmN0aW9uIChmcm9tKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLl9pc1BhcmFtKGZyb20pKSB7XG5cdCAgICAgICAgICAgIC8vY29ubmVjdCBhbGwgdGhlIHByb3hpZXNcblx0ICAgICAgICAgICAgdGhpcy5fY29ubmVjdFByb3hpZXMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQXBwbHkgYWxsIHRoZSBjdXJyZW50IGF1dG9tYXRpb25zIHRvIHRoZSBnaXZlbiBwYXJhbWV0ZXJcblx0XHQgKiBAcGFyYW0gIHtBdWRpb1BhcmFtfSBwYXJhbVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX2FwcGx5QXV0b21hdGlvbnMgPSBmdW5jdGlvbiAocGFyYW0pIHtcblx0ICAgICAgICB2YXIgbm93ID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lO1xuXHQgICAgICAgIHBhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhub3cpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZShub3cpO1xuXHQgICAgICAgIHBhcmFtLnNldFZhbHVlQXRUaW1lKGN1cnJlbnRWYWwsIG5vdyk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmZvckVhY2hGcm9tKG5vdywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHBhcmFtW2V2ZW50LnR5cGVdKGV2ZW50LnZhbHVlLCBldmVudC50aW1lLCBldmVudC5jb25zdGFudCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRGlzY29ubmVjdCBmcm9tIHRoZSBnaXZlbiBub2RlIG9yIGFsbCBub2RlcyBpZiBubyBwYXJhbSBpcyBnaXZlbi5cblx0XHQgKiBAcGFyYW0gIHtBdWRpb05vZGV8QXVkaW9QYXJhbX0gbm9kZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2lnbmFsfSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fcHJveGllcy5pbmNsdWRlcyhub2RlKSkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9wcm94aWVzLmluZGV4T2Yobm9kZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKCFub2RlKSB7XG5cdCAgICAgICAgICAgIC8vbm8gYXJndW1lbnQsIGRpc2Nvbm5lY3QgZXZlcnl0aGluZ1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzID0gW107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc2Nvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGN1cnJlbnQgc2lnbmFsIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgV2hlbiB0byBnZXQgdGhlIHNpZ25hbCB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3BhcmFtLmdldFZhbHVlQXRUaW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJhbS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5QYXJhbS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLy93cmFwIGFsbCBvZiB0aGUgYXV0b21hdGlvbiBtZXRob2RzXG5cdCAgICBbXG5cdCAgICAgICAgJ3NldFZhbHVlQXRUaW1lJyxcblx0ICAgICAgICAnbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgICdleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICAnc2V0VGFyZ2V0QXRUaW1lJ1xuXHQgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcblx0ICAgICAgICB2YXIgcHJldmlvdXNNZXRob2QgPSBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdCAgICAgICAgICAgIHByZXZpb3VzTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIGFyZ3NbMF0gPSB0aGlzLl9mcm9tVW5pdHMoYXJnc1swXSk7XG5cdCAgICAgICAgICAgIGFyZ3NbMV0gPSB0aGlzLnRvU2Vjb25kcyhhcmdzWzFdKTtcblx0ICAgICAgICAgICAgLy9hcHBseSBpdCB0byB0aGUgcHJveGllc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLmZvckVhY2goZnVuY3Rpb24gKHNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc2lnbmFsW21ldGhvZF0uYXBwbHkoc2lnbmFsLCBhcmdzKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfTtcblx0ICAgIH0pO1xuXHQgICAgW1xuXHQgICAgICAgICdjYW5jZWxTY2hlZHVsZWRWYWx1ZXMnLFxuXHQgICAgICAgICdjYW5jZWxBbmRIb2xkQXRUaW1lJ1xuXHQgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcblx0ICAgICAgICB2YXIgcHJldmlvdXNNZXRob2QgPSBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdCAgICAgICAgICAgIHByZXZpb3VzTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIGFyZ3NbMF0gPSB0aGlzLnRvU2Vjb25kcyhhcmdzWzBdKTtcblx0ICAgICAgICAgICAgLy9hcHBseSBpdCB0byB0aGUgcHJveGllc1xuXHQgICAgICAgICAgICB0aGlzLl9wcm94aWVzLmZvckVhY2goZnVuY3Rpb24gKHNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc2lnbmFsW21ldGhvZF0uYXBwbHkoc2lnbmFsLCBhcmdzKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfTtcblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2UuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wcm94aWVzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TaWduYWw7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBQb3cgYXBwbGllcyBhbiBleHBvbmVudCB0byB0aGUgaW5jb21pbmcgc2lnbmFsLiBUaGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogICAgICAgICBtdXN0IGJlIEF1ZGlvUmFuZ2UuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IGV4cCBUaGUgZXhwb25lbnQgdG8gYXBwbHkgdG8gdGhlIGluY29taW5nIHNpZ25hbCwgbXVzdCBiZSBhdCBsZWFzdCAyLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcG93ID0gbmV3IFRvbmUuUG93KDIpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KHBvdyk7XG5cdFx0ICogLy9vdXRwdXQgb2YgcG93IGlzIDAuMjUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb3cgPSBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiB0aGUgZXhwb25lbnRcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwID0gVG9uZS5kZWZhdWx0QXJnKGV4cCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHBTY2FsZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKHRoaXMuX2V4cEZ1bmModGhpcy5fZXhwKSwgODE5Mik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Qb3csIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdmFsdWUgb2YgdGhlIGV4cG9uZW50LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBvdyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Qb3cucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHA7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwID0gZXhwO1xuXHQgICAgICAgICAgICB0aGlzLl9leHBTY2FsZXIuc2V0TWFwKHRoaXMuX2V4cEZ1bmModGhpcy5fZXhwKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGZ1bmN0aW9uIHdoaWNoIG1hcHMgdGhlIHdhdmVzaGFwZXJcblx0XHQgKiAgQHBhcmFtICAge251bWJlcn0gZXhwXG5cdFx0ICogIEByZXR1cm4ge2Z1bmN0aW9ufVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb3cucHJvdG90eXBlLl9leHBGdW5jID0gZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLnBvdyhNYXRoLmFicyh2YWwpLCBleHApO1xuXHQgICAgICAgIH07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb3d9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG93LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2V4cFNjYWxlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXhwU2NhbGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Qb3c7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5FbnZlbG9wZSBpcyBhbiBbQURTUl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3ludGhlc2l6ZXIjQURTUl9lbnZlbG9wZSlcblx0XHQgKiAgICAgICAgICBlbnZlbG9wZSBnZW5lcmF0b3IuIFRvbmUuRW52ZWxvcGUgb3V0cHV0cyBhIHNpZ25hbCB3aGljaFxuXHRcdCAqICAgICAgICAgIGNhbiBiZSBjb25uZWN0ZWQgdG8gYW4gQXVkaW9QYXJhbSBvciBUb25lLlNpZ25hbC5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvZS9lYS9BRFNSX3BhcmFtZXRlci5zdmdcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFthdHRhY2tdIFRoZSBhbW91bnQgb2YgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlIHRvIGdvIGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAwIHRvIGl0J3MgbWF4aW11bSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHRUaGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgdGhlIGF0dGFjayB0aGF0IGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgXHR0byBmYWxsIHRvIHRoZSBzdXN0YWluIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc3VzdGFpbl1cdFRoZSBwZXJjZW50IG9mIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgdGhlIGVudmVsb3BlIHJlc3RzIGF0IHVudGlsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0dGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0VGhlIGFtb3VudCBvZiB0aW1lIGFmdGVyIHRoZSByZWxlYXNlIGlzIHRyaWdnZXJlZCBpdCB0YWtlcyB0byByZWFjaCAwLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYW4gYW1wbGl0dWRlIGVudmVsb3BlXG5cdFx0ICogdmFyIGdhaW5Ob2RlID0gVG9uZS5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0XHQgKiB2YXIgZW52ID0gbmV3IFRvbmUuRW52ZWxvcGUoe1xuXHRcdCAqIFx0XCJhdHRhY2tcIiA6IDAuMSxcblx0XHQgKiBcdFwiZGVjYXlcIiA6IDAuMixcblx0XHQgKiBcdFwic3VzdGFpblwiIDogMSxcblx0XHQgKiBcdFwicmVsZWFzZVwiIDogMC44LFxuXHRcdCAqIH0pO1xuXHRcdCAqIGVudi5jb25uZWN0KGdhaW5Ob2RlLmdhaW4pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2dldCBhbGwgb2YgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ2RlY2F5Jyxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkVudmVsb3BlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZW4gdHJpZ2dlckF0dGFjayBpcyBjYWxsZWQsIHRoZSBhdHRhY2sgdGltZSBpcyB0aGUgYW1vdW50IG9mXG5cdFx0XHQgKiAgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlIHRvIHJlYWNoIGl0J3MgbWF4aW11bSB2YWx1ZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXR0YWNrID0gb3B0aW9ucy5hdHRhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWZ0ZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZSwgdGhlIHZhbHVlIHdpbGwgZmFsbFxuXHRcdFx0ICogIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSBkZWNheSB0aW1lIHRvIGl0J3Mgc3VzdGFpbiB2YWx1ZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVjYXkgPSBvcHRpb25zLmRlY2F5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogXHRUaGUgc3VzdGFpbiB2YWx1ZSBpcyB0aGUgdmFsdWVcblx0XHRcdCAqIFx0d2hpY2ggdGhlIGVudmVsb3BlIHJlc3RzIGF0IGFmdGVyIHRyaWdnZXJBdHRhY2sgaXNcblx0XHRcdCAqIFx0Y2FsbGVkLCBidXQgYmVmb3JlIHRyaWdnZXJSZWxlYXNlIGlzIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zdXN0YWluID0gb3B0aW9ucy5zdXN0YWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFmdGVyIHRyaWdnZXJSZWxlYXNlIGlzIGNhbGxlZCwgdGhlIGVudmVsb3BlJ3Ncblx0XHRcdCAqICB2YWx1ZSB3aWxsIGZhbGwgdG8gaXQncyBtaW1pbnVtIHZhbHVlIG92ZXIgdGhlXG5cdFx0XHQgKiAgZHVyYXRpb24gb2YgdGhlIHJlbGVhc2UgdGltZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbmV4dCB0aW1lIHRoZSBlbnZlbG9wZSBpcyBhdCBzdGFuZGJ5XG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSAnbGluZWFyJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbmV4dCB0aW1lIHRoZSBlbnZlbG9wZSBpcyBhdCBzdGFuZGJ5XG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gJ2V4cG9uZW50aWFsJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaWcgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlNpZ25hbCgwKTtcblx0ICAgICAgICAvL3NldCB0aGUgYXR0YWNrQ3VydmUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5hdHRhY2tDdXJ2ZSA9IG9wdGlvbnMuYXR0YWNrQ3VydmU7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlQ3VydmUgPSBvcHRpb25zLnJlbGVhc2VDdXJ2ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVudmVsb3BlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgJ3N1c3RhaW4nOiAwLjUsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAxLFxuXHQgICAgICAgICdhdHRhY2tDdXJ2ZSc6ICdsaW5lYXInLFxuXHQgICAgICAgICdyZWxlYXNlQ3VydmUnOiAnZXhwb25lbnRpYWwnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVhZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZW52ZWxvcGUuIFVzZWZ1bCBmb3Jcblx0XHQgKiBzeW5jcm9uaXppbmcgdmlzdWFsIG91dHB1dCB0byB0aGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSB2YWx1ZVxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNoYXBlIG9mIHRoZSBhdHRhY2suXG5cdFx0ICogQ2FuIGJlIGFueSBvZiB0aGVzZSBzdHJpbmdzOlxuXHRcdCAqIDx1bD5cblx0XHQgKiAgIDxsaT5saW5lYXI8L2xpPlxuXHRcdCAqICAgPGxpPmV4cG9uZW50aWFsPC9saT5cblx0XHQgKiAgIDxsaT5zaW5lPC9saT5cblx0XHQgKiAgIDxsaT5jb3NpbmU8L2xpPlxuXHRcdCAqICAgPGxpPmJvdW5jZTwvbGk+XG5cdFx0ICogICA8bGk+cmlwcGxlPC9saT5cblx0XHQgKiAgIDxsaT5zdGVwPC9saT5cblx0XHQgKiA8L3VsPlxuXHRcdCAqIENhbiBhbHNvIGJlIGFuIGFycmF5IHdoaWNoIGRlc2NyaWJlcyB0aGUgY3VydmUuIFZhbHVlc1xuXHRcdCAqIGluIHRoZSBhcnJheSBhcmUgZXZlbmx5IHN1YmRpdmlkZWQgYW5kIGxpbmVhcmx5XG5cdFx0ICogaW50ZXJwb2xhdGVkIG92ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSBhdHRhY2suXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge1N0cmluZ3xBcnJheX1cblx0XHQgKiBAbmFtZSBhdHRhY2tDdXJ2ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogZW52LmF0dGFja0N1cnZlID0gXCJsaW5lYXJcIjtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIGFsc28gYmUgYW4gYXJyYXlcblx0XHQgKiBlbnYuYXR0YWNrQ3VydmUgPSBbMCwgMC4yLCAwLjMsIDAuNCwgMV1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkVudmVsb3BlLnByb3RvdHlwZSwgJ2F0dGFja0N1cnZlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc1N0cmluZyh0aGlzLl9hdHRhY2tDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkodGhpcy5fYXR0YWNrQ3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICAvL2xvb2sgdXAgdGhlIG5hbWUgaW4gdGhlIGN1cnZlcyBhcnJheVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgdHlwZSBpbiBUb25lLkVudmVsb3BlLlR5cGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5FbnZlbG9wZS5UeXBlW3R5cGVdLkluID09PSB0aGlzLl9hdHRhY2tDdXJ2ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvL290aGVyd2lzZSBqdXN0IHJldHVybiB0aGUgYXJyYXlcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY3VydmUpIHtcblx0ICAgICAgICAgICAgLy9jaGVjayBpZiBpdCdzIGEgdmFsaWQgdHlwZVxuXHQgICAgICAgICAgICBpZiAoVG9uZS5FbnZlbG9wZS5UeXBlLmhhc093blByb3BlcnR5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGN1cnZlRGVmID0gVG9uZS5FbnZlbG9wZS5UeXBlW2N1cnZlXTtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGN1cnZlRGVmKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gY3VydmVEZWYuSW47XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gY3VydmVEZWY7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0FycmF5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5FbnZlbG9wZTogaW52YWxpZCBjdXJ2ZTogJyArIGN1cnZlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNoYXBlIG9mIHRoZSByZWxlYXNlLiBTZWUgdGhlIGF0dGFjayBjdXJ2ZSB0eXBlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5FbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfEFycmF5fVxuXHRcdCAqIEBuYW1lIHJlbGVhc2VDdXJ2ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogZW52LnJlbGVhc2VDdXJ2ZSA9IFwibGluZWFyXCI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUsICdyZWxlYXNlQ3VydmUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzU3RyaW5nKHRoaXMuX3JlbGVhc2VDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlQ3VydmU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0FycmF5KHRoaXMuX3JlbGVhc2VDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vbG9vayB1cCB0aGUgbmFtZSBpbiB0aGUgY3VydmVzIGFycmF5XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB0eXBlIGluIFRvbmUuRW52ZWxvcGUuVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGVbdHlwZV0uT3V0ID09PSB0aGlzLl9yZWxlYXNlQ3VydmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgLy9vdGhlcndpc2UganVzdCByZXR1cm4gdGhlIGFycmF5XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVsZWFzZUN1cnZlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjdXJ2ZSkge1xuXHQgICAgICAgICAgICAvL2NoZWNrIGlmIGl0J3MgYSB2YWxpZCB0eXBlXG5cdCAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGUuaGFzT3duUHJvcGVydHkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY3VydmVEZWYgPSBUb25lLkVudmVsb3BlLlR5cGVbY3VydmVdO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QoY3VydmVEZWYpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVsZWFzZUN1cnZlID0gY3VydmVEZWYuT3V0O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBjdXJ2ZURlZjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5FbnZlbG9wZTogaW52YWxpZCBjdXJ2ZTogJyArIGN1cnZlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjay9kZWNheSBwb3J0aW9uIG9mIHRoZSBBRFNSIGVudmVsb3BlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIGVudmVsb3BlIHNjYWxlcyB0aGUgdmFsZXMuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIGJldHdlZW4gMC0xXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vdHJpZ2dlciB0aGUgYXR0YWNrIDAuNSBzZWNvbmRzIGZyb20gbm93IHdpdGggYSB2ZWxvY2l0eSBvZiAwLjJcblx0XHQgKiAgZW52LnRyaWdnZXJBdHRhY2soXCIrMC41XCIsIDAuMik7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBvcmlnaW5hbEF0dGFjayA9IHRoaXMudG9TZWNvbmRzKHRoaXMuYXR0YWNrKTtcblx0ICAgICAgICB2YXIgYXR0YWNrID0gb3JpZ2luYWxBdHRhY2s7XG5cdCAgICAgICAgdmFyIGRlY2F5ID0gdGhpcy50b1NlY29uZHModGhpcy5kZWNheSk7XG5cdCAgICAgICAgdmVsb2NpdHkgPSBUb25lLmRlZmF1bHRBcmcodmVsb2NpdHksIDEpO1xuXHQgICAgICAgIC8vY2hlY2sgaWYgaXQncyBub3QgYSBjb21wbGV0ZSBhdHRhY2tcblx0ICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAoY3VycmVudFZhbHVlID4gMCkge1xuXHQgICAgICAgICAgICAvL3N1YnRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIGZyb20gdGhlIGF0dGFjayB0aW1lXG5cdCAgICAgICAgICAgIHZhciBhdHRhY2tSYXRlID0gMSAvIGF0dGFjaztcblx0ICAgICAgICAgICAgdmFyIHJlbWFpbmluZ0Rpc3RhbmNlID0gMSAtIGN1cnJlbnRWYWx1ZTtcblx0ICAgICAgICAgICAgLy90aGUgYXR0YWNrIGlzIG5vdyB0aGUgcmVtYWluaW5nIHRpbWVcblx0ICAgICAgICAgICAgYXR0YWNrID0gcmVtYWluaW5nRGlzdGFuY2UgLyBhdHRhY2tSYXRlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2F0dGFja1xuXHQgICAgICAgIGlmICh0aGlzLl9hdHRhY2tDdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLmxpbmVhclJhbXBUbyh2ZWxvY2l0eSwgYXR0YWNrLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2F0dGFja0N1cnZlID09PSAnZXhwb25lbnRpYWwnKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy50YXJnZXRSYW1wVG8odmVsb2NpdHksIGF0dGFjaywgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhdHRhY2sgPiAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgY3VydmUgPSB0aGlzLl9hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICAgICAgLy90YWtlIG9ubHkgYSBwb3J0aW9uIG9mIHRoZSBjdXJ2ZVxuXHQgICAgICAgICAgICBpZiAoYXR0YWNrIDwgb3JpZ2luYWxBdHRhY2spIHtcblx0ICAgICAgICAgICAgICAgIHZhciBwZXJjZW50Q29tcGxldGUgPSAxIC0gYXR0YWNrIC8gb3JpZ2luYWxBdHRhY2s7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2xpY2VJbmRleCA9IE1hdGguZmxvb3IocGVyY2VudENvbXBsZXRlICogdGhpcy5fYXR0YWNrQ3VydmUubGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIGN1cnZlID0gdGhpcy5fYXR0YWNrQ3VydmUuc2xpY2Uoc2xpY2VJbmRleCk7XG5cdCAgICAgICAgICAgICAgICAvL3RoZSBmaXJzdCBpbmRleCBpcyB0aGUgY3VycmVudCB2YWx1ZVxuXHQgICAgICAgICAgICAgICAgY3VydmVbMF0gPSBjdXJyZW50VmFsdWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fc2lnLnNldFZhbHVlQ3VydmVBdFRpbWUoY3VydmUsIHRpbWUsIGF0dGFjaywgdmVsb2NpdHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2RlY2F5XG5cdCAgICAgICAgaWYgKGRlY2F5KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NpZy50YXJnZXRSYW1wVG8odmVsb2NpdHkgKiB0aGlzLnN1c3RhaW4sIGRlY2F5LCBhdHRhY2sgKyB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXJzIHRoZSByZWxlYXNlIG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy90cmlnZ2VyIHJlbGVhc2UgaW1tZWRpYXRlbHlcblx0XHQgKiAgZW52LnRyaWdnZXJSZWxlYXNlKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPiAwKSB7XG5cdCAgICAgICAgICAgIHZhciByZWxlYXNlID0gdGhpcy50b1NlY29uZHModGhpcy5yZWxlYXNlKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3JlbGVhc2VDdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NpZy5saW5lYXJSYW1wVG8oMCwgcmVsZWFzZSwgdGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcmVsZWFzZUN1cnZlID09PSAnZXhwb25lbnRpYWwnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaWcudGFyZ2V0UmFtcFRvKDAsIHJlbGVhc2UsIHRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdmFyIGN1cnZlID0gdGhpcy5fcmVsZWFzZUN1cnZlO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWcuY2FuY2VsQW5kSG9sZEF0VGltZSh0aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWcuc2V0VmFsdWVDdXJ2ZUF0VGltZShjdXJ2ZSwgdGltZSwgcmVsZWFzZSwgY3VycmVudFZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzY2hlZHVsZWQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFRoaXMgd2lsbFxuXHRcdCAqICByZXR1cm4gdGhlIHVuY29udmVydGVkIChyYXcpIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgVGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc2lnLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyQXR0YWNrUmVsZWFzZSBpcyBzaG9ydGhhbmQgZm9yIHRyaWdnZXJBdHRhY2ssIHRoZW4gd2FpdGluZ1xuXHRcdCAqICBzb21lIGR1cmF0aW9uLCB0aGVuIHRyaWdnZXJSZWxlYXNlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGR1cmF0aW9uIFRoZSBkdXJhdGlvbiBvZiB0aGUgc3VzdGFpbi5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHRoZW4gdGhlIHJlbGVhc2UgYWZ0ZXIgMC42IHNlY29uZHMuXG5cdFx0ICogZW52LnRyaWdnZXJBdHRhY2tSZWxlYXNlKDAuNik7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbikpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWxzIGFsbCBzY2hlZHVsZWQgZW52ZWxvcGUgY2hhbmdlcyBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gYWZ0ZXJcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIHRoaXMuX3NpZy5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoYWZ0ZXIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBCb3Jyb3dzIHRoZSBjb25uZWN0IG1ldGhvZCBmcm9tIFRvbmUuU2lnbmFsLlxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmNvbm5lY3QgPSBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3Q7XG5cdCAgICAvKipcblx0IFx0ICogIEdlbmVyYXRlIHNvbWUgY29tcGxleCBlbnZlbG9wZSBjdXJ2ZXMuXG5cdCBcdCAqL1xuXHQgICAgKGZ1bmN0aW9uIF9jcmVhdGVDdXJ2ZXMoKSB7XG5cdCAgICAgICAgdmFyIGN1cnZlTGVuID0gMTI4O1xuXHQgICAgICAgIHZhciBpLCBrO1xuXHQgICAgICAgIC8vY29zaW5lIGN1cnZlXG5cdCAgICAgICAgdmFyIGNvc2luZUN1cnZlID0gW107XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgY29zaW5lQ3VydmVbaV0gPSBNYXRoLnNpbihpIC8gKGN1cnZlTGVuIC0gMSkgKiAoTWF0aC5QSSAvIDIpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yaXBwbGUgY3VydmVcblx0ICAgICAgICB2YXIgcmlwcGxlQ3VydmUgPSBbXTtcblx0ICAgICAgICB2YXIgcmlwcGxlQ3VydmVGcmVxID0gNi40O1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbiAtIDE7IGkrKykge1xuXHQgICAgICAgICAgICBrID0gaSAvIChjdXJ2ZUxlbiAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgc2luZVdhdmUgPSBNYXRoLnNpbihrICogKE1hdGguUEkgKiAyKSAqIHJpcHBsZUN1cnZlRnJlcSAtIE1hdGguUEkgLyAyKSArIDE7XG5cdCAgICAgICAgICAgIHJpcHBsZUN1cnZlW2ldID0gc2luZVdhdmUgLyAxMCArIGsgKiAwLjgzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByaXBwbGVDdXJ2ZVtjdXJ2ZUxlbiAtIDFdID0gMTtcblx0ICAgICAgICAvL3N0YWlycyBjdXJ2ZVxuXHQgICAgICAgIHZhciBzdGFpcnNDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIHZhciBzdGVwcyA9IDU7XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgc3RhaXJzQ3VydmVbaV0gPSBNYXRoLmNlaWwoaSAvIChjdXJ2ZUxlbiAtIDEpICogc3RlcHMpIC8gc3RlcHM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaW4tb3V0IGVhc2luZyBjdXJ2ZVxuXHQgICAgICAgIHZhciBzaW5lQ3VydmUgPSBbXTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBrID0gaSAvIChjdXJ2ZUxlbiAtIDEpO1xuXHQgICAgICAgICAgICBzaW5lQ3VydmVbaV0gPSAwLjUgKiAoMSAtIE1hdGguY29zKE1hdGguUEkgKiBrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYSBib3VuY2UgY3VydmVcblx0ICAgICAgICB2YXIgYm91bmNlQ3VydmUgPSBbXTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBrID0gaSAvIChjdXJ2ZUxlbiAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgZnJlcSA9IE1hdGgucG93KGssIDMpICogNCArIDAuMjtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IE1hdGguY29zKGZyZXEgKiBNYXRoLlBJICogMiAqIGspO1xuXHQgICAgICAgICAgICBib3VuY2VDdXJ2ZVtpXSA9IE1hdGguYWJzKHZhbCAqICgxIC0gaykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJbnZlcnQgYSB2YWx1ZSBjdXJ2ZSB0byBtYWtlIGl0IHdvcmsgZm9yIHRoZSByZWxlYXNlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIGZ1bmN0aW9uIGludmVydEN1cnZlKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIHZhciBvdXQgPSBuZXcgQXJyYXkoY3VydmUubGVuZ3RoKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjdXJ2ZS5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgb3V0W2pdID0gMSAtIGN1cnZlW2pdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBvdXQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJldmVyc2UgdGhlIGN1cnZlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIGZ1bmN0aW9uIHJldmVyc2VDdXJ2ZShjdXJ2ZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gY3VydmUuc2xpY2UoMCkucmV2ZXJzZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhdHRhY2sgYW5kIHJlbGVhc2UgY3VydmUgYXJyYXlzXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUuVHlwZSA9IHtcblx0ICAgICAgICAgICAgJ2xpbmVhcic6ICdsaW5lYXInLFxuXHQgICAgICAgICAgICAnZXhwb25lbnRpYWwnOiAnZXhwb25lbnRpYWwnLFxuXHQgICAgICAgICAgICAnYm91bmNlJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IGludmVydEN1cnZlKGJvdW5jZUN1cnZlKSxcblx0ICAgICAgICAgICAgICAgIE91dDogYm91bmNlQ3VydmVcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2Nvc2luZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBjb3NpbmVDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogcmV2ZXJzZUN1cnZlKGNvc2luZUN1cnZlKVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnc3RlcCc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBzdGFpcnNDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogaW52ZXJ0Q3VydmUoc3RhaXJzQ3VydmUpXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdyaXBwbGUnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogcmlwcGxlQ3VydmUsXG5cdCAgICAgICAgICAgICAgICBPdXQ6IGludmVydEN1cnZlKHJpcHBsZUN1cnZlKVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnc2luZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiBzaW5lQ3VydmUsXG5cdCAgICAgICAgICAgICAgICBPdXQ6IGludmVydEN1cnZlKHNpbmVDdXJ2ZSlcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH07XG5cdCAgICB9KCkpO1xuXHQgICAgLyoqXG5cdFx0ICogIERpc2Nvbm5lY3QgYW5kIGRpc3Bvc2UuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVudmVsb3BlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2lnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaWcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2F0dGFja0N1cnZlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgaXMgYSBUb25lLkVudmVsb3BlIGNvbm5lY3RlZCB0byBhIGdhaW4gbm9kZS5cblx0XHQgKiAgICAgICAgICBVbmxpa2UgVG9uZS5FbnZlbG9wZSwgd2hpY2ggb3V0cHV0cyB0aGUgZW52ZWxvcGUncyB2YWx1ZSwgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSBhY2NlcHRzXG5cdFx0ICogICAgICAgICAgYW4gYXVkaW8gc2lnbmFsIGFzIHRoZSBpbnB1dCBhbmQgd2lsbCBhcHBseSB0aGUgZW52ZWxvcGUgdG8gdGhlIGFtcGxpdHVkZVxuXHRcdCAqICAgICAgICAgIG9mIHRoZSBzaWduYWwuIFJlYWQgbW9yZSBhYm91dCBBRFNSIEVudmVsb3BlcyBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW50aGVzaXplciNBRFNSX2VudmVsb3BlKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW52ZWxvcGV9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdIFRoZSBhbW91bnQgb2YgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGVudmVsb3BlIHRvIGdvIGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIHRvIGl0J3MgbWF4aW11bSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHRUaGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgdGhlIGF0dGFjayB0aGF0IGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgXHR0byBmYWxsIHRvIHRoZSBzdXN0YWluIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc3VzdGFpbl1cdFRoZSBwZXJjZW50IG9mIHRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgdGhlIGVudmVsb3BlIHJlc3RzIGF0IHVudGlsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0dGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0VGhlIGFtb3VudCBvZiB0aW1lIGFmdGVyIHRoZSByZWxlYXNlIGlzIHRyaWdnZXJlZCBpdCB0YWtlcyB0byByZWFjaCAwLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBhbXBFbnYgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSh7XG5cdFx0ICogXHRcImF0dGFja1wiOiAwLjEsXG5cdFx0ICogXHRcImRlY2F5XCI6IDAuMixcblx0XHQgKiBcdFwic3VzdGFpblwiOiAxLjAsXG5cdFx0ICogXHRcInJlbGVhc2VcIjogMC44XG5cdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL2NyZWF0ZSBhbiBvc2NpbGxhdG9yIGFuZCBjb25uZWN0IGl0XG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KGFtcEVudikuc3RhcnQoKTtcblx0XHQgKiAvL3RyaWdnZXIgdGhlIGVudmVsb3BlcyBhdHRhY2sgYW5kIHJlbGVhc2UgXCI4dFwiIGFwYXJ0XG5cdFx0ICogYW1wRW52LnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiOHRcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkFtcGxpdHVkZUVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXQgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIHRoaXMuX3NpZy5jb25uZWN0KHRoaXMub3V0cHV0LmdhaW4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUsIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBBbmFseXNlck5vZGUuZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSBwb2x5ZmlsbFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCFBbmFseXNlck5vZGUucHJvdG90eXBlLmdldEZsb2F0VGltZURvbWFpbkRhdGEpIHtcblx0ICAgICAgICAgICAgLy9yZWZlcmVuY2VkIGh0dHBzOi8vZ2l0aHViLmNvbS9tb2hheW9uYW8vZ2V0LWZsb2F0LXRpbWUtZG9tYWluLWRhdGFcblx0ICAgICAgICAgICAgQW5hbHlzZXJOb2RlLnByb3RvdHlwZS5nZXRGbG9hdFRpbWVEb21haW5EYXRhID0gZnVuY3Rpb24gKGFycmF5KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdWludDggPSBuZXcgVWludDhBcnJheShhcnJheS5sZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5nZXRCeXRlVGltZURvbWFpbkRhdGEodWludDgpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1aW50OC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGFycmF5W2ldID0gKHVpbnQ4W2ldIC0gMTI4KSAvIDEyODtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBXZWIgQXVkaW8nc1xuXHRcdCAqICAgICAgICAgIFtBbmFseXNlck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jaWRsLWRlZi1BbmFseXNlck5vZGUpLlxuXHRcdCAqICAgICAgICAgIEV4dHJhY3RzIEZGVCBvciBXYXZlZm9ybSBkYXRhIGZyb20gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge1N0cmluZz19IHR5cGUgVGhlIHJldHVybiB0eXBlIG9mIHRoZSBhbmFseXNpcywgZWl0aGVyIFwiZmZ0XCIsIG9yIFwid2F2ZWZvcm1cIi5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBzaXplIFRoZSBzaXplIG9mIHRoZSBGRlQuIFZhbHVlIG11c3QgYmUgYSBwb3dlciBvZlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ3NpemUnXG5cdCAgICAgICAgXSwgVG9uZS5BbmFseXNlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtBbmFseXNlck5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVBbmFseXNlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNpcyB0eXBlXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYnVmZmVyIHRoYXQgdGhlIEZGVCBkYXRhIGlzIHdyaXR0ZW4gdG9cblx0XHRcdCAqICBAdHlwZSB7VHlwZWRBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICAvL3NldCB0aGUgdmFsdWVzIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuc2l6ZSA9IG9wdGlvbnMuc2l6ZTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BbmFseXNlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdzaXplJzogMTAyNCxcblx0ICAgICAgICAndHlwZSc6ICdmZnQnLFxuXHQgICAgICAgICdzbW9vdGhpbmcnOiAwLjhcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUG9zc2libGUgcmV0dXJuIHR5cGVzIG9mIGFuYWx5c2VyLmdldFZhbHVlKClcblx0XHQgKiAgQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIuVHlwZSA9IHtcblx0ICAgICAgICBXYXZlZm9ybTogJ3dhdmVmb3JtJyxcblx0ICAgICAgICBGRlQ6ICdmZnQnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJ1biB0aGUgYW5hbHlzaXMgZ2l2ZW4gdGhlIGN1cnJlbnQgc2V0dGluZ3MgYW5kIHJldHVybiB0aGVcblx0XHQgKiAgcmVzdWx0IGFzIGEgVHlwZWRBcnJheS5cblx0XHQgKiAgQHJldHVybnMge1R5cGVkQXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5BbmFseXNlci5UeXBlLkZGVCkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5nZXRGbG9hdEZyZXF1ZW5jeURhdGEodGhpcy5fYnVmZmVyKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQW5hbHlzZXIuVHlwZS5XYXZlZm9ybSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5nZXRGbG9hdFRpbWVEb21haW5EYXRhKHRoaXMuX2J1ZmZlcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzaXplIG9mIGFuYWx5c2lzLiBUaGlzIG11c3QgYmUgYSBwb3dlciBvZiB0d28gaW4gdGhlIHJhbmdlIDMyIHRvIDMyNzY4LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5BbmFseXNlciNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLCAnc2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5mZnRTaXplID0gc2l6ZSAqIDI7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFuYWx5c2lzIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGFuYWx5c2VyLmdldFZhbHVlKCksIGVpdGhlciBcImZmdFwiIG9yIFwid2F2ZWZvcm1cIi5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQW5hbHlzZXIjXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFuYWx5c2VyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodHlwZSAhPT0gVG9uZS5BbmFseXNlci5UeXBlLldhdmVmb3JtICYmIHR5cGUgIT09IFRvbmUuQW5hbHlzZXIuVHlwZS5GRlQpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RvbmUuQW5hbHlzZXI6IGludmFsaWQgdHlwZTogJyArIHR5cGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIDAgcmVwcmVzZW50cyBubyB0aW1lIGF2ZXJhZ2luZyB3aXRoIHRoZSBsYXN0IGFuYWx5c2lzIGZyYW1lLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5BbmFseXNlciNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBzbW9vdGhpbmdcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFuYWx5c2VyLnByb3RvdHlwZSwgJ3Ntb290aGluZycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zbW9vdGhpbmdUaW1lQ29uc3RhbnQgPSB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkFuYWx5c2VyfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BbmFseXNlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ29tcHJlc3NvciBpcyBhIHRoaW4gd3JhcHBlciBhcm91bmQgdGhlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgW0R5bmFtaWNzQ29tcHJlc3Nvck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWR5bmFtaWNzY29tcHJlc3Nvcm5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKiAgICAgICAgIENvbXByZXNzaW9uIHJlZHVjZXMgdGhlIHZvbHVtZSBvZiBsb3VkIHNvdW5kcyBvciBhbXBsaWZpZXMgcXVpZXQgc291bmRzXG5cdFx0ICogICAgICAgICBieSBuYXJyb3dpbmcgb3IgXCJjb21wcmVzc2luZ1wiIGFuIGF1ZGlvIHNpZ25hbCdzIGR5bmFtaWMgcmFuZ2UuXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRHluYW1pY19yYW5nZV9jb21wcmVzc2lvbikuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc3xPYmplY3R9IFt0aHJlc2hvbGRdIFRoZSB2YWx1ZSBhYm92ZSB3aGljaCB0aGUgY29tcHJlc3Npb24gc3RhcnRzIHRvIGJlIGFwcGxpZWQuXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IFtyYXRpb10gVGhlIGdhaW4gcmVkdWN0aW9uIHJhdGlvLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjb21wID0gbmV3IFRvbmUuQ29tcHJlc3NvcigtMzAsIDMpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db21wcmVzc29yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCcsXG5cdCAgICAgICAgICAgICdyYXRpbydcblx0ICAgICAgICBdLCBUb25lLkNvbXByZXNzb3IpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbXByZXNzb3Igbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEeW5hbWljc0NvbXByZXNzb3JOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0aHJlc2hvbGQgdmF1ZVxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fY29tcHJlc3Nvci50aHJlc2hvbGQsXG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWNpYmVscyxcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBmYWxzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhdHRhY2sgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9jb21wcmVzc29yLmF0dGFjaywgVG9uZS5UeXBlLlRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByZWxlYXNlIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX2NvbXByZXNzb3IucmVsZWFzZSwgVG9uZS5UeXBlLlRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBrbmVlIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmtuZWUgPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2NvbXByZXNzb3Iua25lZSxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlY2liZWxzLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJhdGlvIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJhdGlvID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9jb21wcmVzc29yLnJhdGlvLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAna25lZScsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJyxcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyYXRpbycsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5zZXQob3B0aW9ucyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Db21wcmVzc29yLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncmF0aW8nOiAxMixcblx0ICAgICAgICAndGhyZXNob2xkJzogLTI0LFxuXHQgICAgICAgICdyZWxlYXNlJzogMC4yNSxcblx0ICAgICAgICAnYXR0YWNrJzogMC4wMDMsXG5cdCAgICAgICAgJ2tuZWUnOiAzMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Db21wcmVzc29yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbXByZXNzb3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdrbmVlJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnLFxuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JhdGlvJyxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmF0dGFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVsZWFzZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnRocmVzaG9sZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy50aHJlc2hvbGQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmF0aW8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmF0aW8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMua25lZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5rbmVlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Db21wcmVzc29yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQWRkIGEgc2lnbmFsIGFuZCBhIG51bWJlciBvciB0d28gc2lnbmFscy4gV2hlbiBubyB2YWx1ZSBpc1xuXHRcdCAqICAgICAgICAgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLCBUb25lLkFkZCB3aWxsIHN1bSA8Y29kZT5pbnB1dFswXTwvY29kZT5cblx0XHQgKiAgICAgICAgIGFuZCA8Y29kZT5pbnB1dFsxXTwvY29kZT4uIElmIGEgdmFsdWUgaXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLCBcblx0XHQgKiAgICAgICAgIHRoZSBpdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBpbnB1dC5cblx0XHQgKiAgXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWUgSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIFRvbmUuQWRkIHdpbGwgc3VtIHRoZSBmaXJzdFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWNvbmQgaW5wdXRzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDIpO1xuXHRcdCAqIHZhciBhZGQgPSBuZXcgVG9uZS5BZGQoMik7XG5cdFx0ICogc2lnbmFsLmNvbm5lY3QoYWRkKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgYWRkIGVxdWFscyA0XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pZiBjb25zdHJ1Y3RlZCB3aXRoIG5vIGFyZ3VtZW50c1xuXHRcdCAqIC8vaXQgd2lsbCBhZGQgdGhlIGZpcnN0IGFuZCBzZWNvbmQgaW5wdXRzXG5cdFx0ICogdmFyIGFkZCA9IG5ldyBUb25lLkFkZCgpO1xuXHRcdCAqIHZhciBzaWcwID0gbmV3IFRvbmUuU2lnbmFsKDMpLmNvbm5lY3QoYWRkLCAwLCAwKTtcblx0XHQgKiB2YXIgc2lnMSA9IG5ldyBUb25lLlNpZ25hbCg0KS5jb25uZWN0KGFkZCwgMCwgMSk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGFkZCBlcXVhbHMgNy4gXG5cdFx0ICovXG5cdCAgICBUb25lLkFkZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzdW1taW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IHRoaXMuaW5wdXRbMF0gPSB0aGlzLmlucHV0WzFdID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5TaWduYWwodmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNvbm5lY3QodGhpcy5fc3VtKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFkZCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BZGR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQWRkLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3VtLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdW0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFkZDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBNdWx0aXBseSB0d28gaW5jb21pbmcgc2lnbmFscy4gT3IsIGlmIGEgbnVtYmVyIGlzIGdpdmVuIGluIHRoZSBjb25zdHJ1Y3Rvcixcblx0XHQgKiAgICAgICAgICBtdWx0aXBsaWVzIHRoZSBpbmNvbWluZyBzaWduYWwgYnkgdGhhdCB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlIENvbnN0YW50IHZhbHVlIHRvIG11bHRpcGxlLiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIHJldHVybiB0aGUgcHJvZHVjdCBvZiB0aGUgZmlyc3QgYW5kIHNlY29uZCBpbnB1dHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KCk7XG5cdFx0ICogdmFyIHNpZ0EgPSBuZXcgVG9uZS5TaWduYWwoMyk7XG5cdFx0ICogdmFyIHNpZ0IgPSBuZXcgVG9uZS5TaWduYWwoNCk7XG5cdFx0ICogc2lnQS5jb25uZWN0KG11bHQsIDAsIDApO1xuXHRcdCAqIHNpZ0IuY29ubmVjdChtdWx0LCAwLCAxKTtcblx0XHQgKiAvL291dHB1dCBvZiBtdWx0IGlzIDEyLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMTApO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMikuY29ubmVjdChtdWx0KTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgbXVsdCBpcyAyMC5cblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGlwbHkgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXQgbm9kZSBpcyB0aGUgc2FtZSBhcyB0aGUgb3V0cHV0IG5vZGVcblx0XHRcdCAqICBpdCBpcyBhbHNvIHRoZSBHYWluTm9kZSB3aGljaCBoYW5kbGVzIHRoZSBzY2FsaW5nIG9mIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICpcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHQgPSB0aGlzLmlucHV0WzBdID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHNjYWxpbmcgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvUGFyYW19XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFsxXSA9IHRoaXMub3V0cHV0LmdhaW47XG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyh2YWx1ZSwgMCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NdWx0aXBseSwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk11bHRpcGx5fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpcGx5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbXVsdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk11bHRpcGx5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTmVnYXRlIHRoZSBpbmNvbWluZyBzaWduYWwuIGkuZS4gYW4gaW5wdXQgc2lnbmFsIG9mIDEwIHdpbGwgb3V0cHV0IC0xMFxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBuZWcgPSBuZXcgVG9uZS5OZWdhdGUoKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKC0yKS5jb25uZWN0KG5lZyk7XG5cdFx0ICogLy9vdXRwdXQgb2YgbmVnIGlzIHBvc2l0aXZlIDIuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5OZWdhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbmVnYXRpb24gaXMgZG9uZSBieSBtdWx0aXBseWluZyBieSAtMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk11bHRpcGx5KC0xKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5lZ2F0ZSwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5OZWdhdGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTmVnYXRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTmVnYXRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU3VidHJhY3QgdGhlIHNpZ25hbCBjb25uZWN0ZWQgdG8gPGNvZGU+aW5wdXRbMV08L2NvZGU+IGZyb20gdGhlIHNpZ25hbCBjb25uZWN0ZWQgXG5cdFx0ICogICAgICAgICB0byA8Y29kZT5pbnB1dFswXTwvY29kZT4uIElmIGFuIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3RvciwgdGhlIFxuXHRcdCAqICAgICAgICAgc2lnbmFscyA8Y29kZT4udmFsdWU8L2NvZGU+IHdpbGwgYmUgc3VidHJhY3RlZCBmcm9tIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3VidHJhY3QgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsLiBJZiB0aGUgdmFsdWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBpcyBvbWl0dGVkLCBpdCB3aWxsIHN1YnRyYWN0IHRoZSBzZWNvbmQgc2lnbmFsIGZyb20gdGhlIGZpcnN0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzdWIgPSBuZXcgVG9uZS5TdWJ0cmFjdCgxKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDQpLmNvbm5lY3Qoc3ViKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2Ygc3ViIGlzIDMuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzdWIgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHRcdCAqIHZhciBzaWdBID0gbmV3IFRvbmUuU2lnbmFsKDEwKTtcblx0XHQgKiB2YXIgc2lnQiA9IG5ldyBUb25lLlNpZ25hbCgyLjUpO1xuXHRcdCAqIHNpZ0EuY29ubmVjdChzdWIsIDAsIDApO1xuXHRcdCAqIHNpZ0IuY29ubmVjdChzdWIsIDAsIDEpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIHN1YiBpcyA3LjVcblx0XHQgKi9cblx0ICAgIFRvbmUuU3VidHJhY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc3VtbWluZyBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdW0gPSB0aGlzLmlucHV0WzBdID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgbmVnYXRlIHRoZSBpbnB1dCBvZiB0aGUgc2Vjb25kIGlucHV0IGJlZm9yZSBjb25uZWN0aW5nIGl0XG5cdFx0XHQgKiAgdG8gdGhlIHN1bW1pbmcgbm9kZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5OZWdhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25lZyA9IG5ldyBUb25lLk5lZ2F0ZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSB2YWx1ZSBpcyBzZXRcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLlNpZ25hbCh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uY2hhaW4odGhpcy5fbmVnLCB0aGlzLl9zdW0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3VidHJhY3QsIFRvbmUuU2lnbmFsKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsQmFzZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdWJ0cmFjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX25lZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbmVnID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdW0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3VidHJhY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBDb252ZXJ0IGFuIGluY29taW5nIHNpZ25hbCBiZXR3ZWVuIDAsIDEgdG8gYW4gZXF1YWwgcG93ZXIgZ2FpbiBzY2FsZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZXFQb3dHYWluID0gbmV3IFRvbmUuRXF1YWxQb3dlckdhaW4oKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRXF1YWxQb3dlckdhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXFQb3dlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnModmFsKSA8IDAuMDAxKSB7XG5cdCAgICAgICAgICAgICAgICAvL3Nob3VsZCBvdXRwdXQgMCB3aGVuIGlucHV0IGlzIDBcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZXF1YWxQb3dlclNjYWxlKHZhbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyksIDQwOTYpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRXF1YWxQb3dlckdhaW4sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRXF1YWxQb3dlckdhaW59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXF1YWxQb3dlckdhaW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZXFQb3dlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXFQb3dlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRXF1YWxQb3dlckdhaW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzICBUb25lLkNyb3NzZmFkZSBwcm92aWRlcyBlcXVhbCBwb3dlciBmYWRpbmcgYmV0d2VlbiB0d28gaW5wdXRzLlxuXHRcdCAqICAgICAgICAgTW9yZSBvbiBjcm9zc2ZhZGluZyB0ZWNobmlxdWUgW2hlcmVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZhZGVfKGF1ZGlvX2VuZ2luZWVyaW5nKSNDcm9zc2ZhZGluZykuXG5cdFx0ICpcblx0XHQgKiBAY29uc3RydWN0b3Jcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogQHBhcmFtIHtOb3JtYWxSYW5nZX0gW2luaXRpYWxGYWRlPTAuNV1cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBjcm9zc0ZhZGUgPSBuZXcgVG9uZS5Dcm9zc0ZhZGUoMC41KTtcblx0XHQgKiAvL2Nvbm5lY3QgZWZmZWN0IEEgdG8gY3Jvc3NmYWRlIGZyb21cblx0XHQgKiAvL2VmZmVjdCBvdXRwdXQgMCB0byBjcm9zc2ZhZGUgaW5wdXQgMFxuXHRcdCAqIGVmZmVjdEEuY29ubmVjdChjcm9zc0ZhZGUsIDAsIDApO1xuXHRcdCAqIC8vY29ubmVjdCBlZmZlY3QgQiB0byBjcm9zc2ZhZGUgZnJvbVxuXHRcdCAqIC8vZWZmZWN0IG91dHB1dCAwIHRvIGNyb3NzZmFkZSBpbnB1dCAxXG5cdFx0ICogZWZmZWN0Qi5jb25uZWN0KGNyb3NzRmFkZSwgMCwgMSk7XG5cdFx0ICogY3Jvc3NGYWRlLmZhZGUudmFsdWUgPSAwO1xuXHRcdCAqIC8vIF4gb25seSBlZmZlY3RBIGlzIG91dHB1dFxuXHRcdCAqIGNyb3NzRmFkZS5mYWRlLnZhbHVlID0gMTtcblx0XHQgKiAvLyBeIG9ubHkgZWZmZWN0QiBpcyBvdXRwdXRcblx0XHQgKiBjcm9zc0ZhZGUuZmFkZS52YWx1ZSA9IDAuNTtcblx0XHQgKiAvLyBeIHRoZSB0d28gc2lnbmFscyBhcmUgbWl4ZWQgZXF1YWxseS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3Jvc3NGYWRlID0gZnVuY3Rpb24gKGluaXRpYWxGYWRlKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzBdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hID0gdGhpcy5pbnB1dFswXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+aW5wdXRbMV08L2NvZGU+LlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmIgPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogXHRUaGUgbWl4IGJldHdlZW4gdGhlIHR3byBpbnB1dHMuIEEgZmFkZSB2YWx1ZSBvZiAwXG5cdFx0XHQgKiBcdHdpbGwgb3V0cHV0IDEwMCUgPGNvZGU+aW5wdXRbMF08L2NvZGU+IGFuZFxuXHRcdFx0ICogXHRhIHZhbHVlIG9mIDEgd2lsbCBvdXRwdXQgMTAwJSA8Y29kZT5pbnB1dFsxXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZSA9IG5ldyBUb25lLlNpZ25hbChUb25lLmRlZmF1bHRBcmcoaW5pdGlhbEZhZGUsIDAuNSksIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZXF1YWwgcG93ZXIgZ2FpbiBjcm9zcyBmYWRlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5FcXVhbFBvd2VyR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJBID0gbmV3IFRvbmUuRXF1YWxQb3dlckdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBlcXVhbCBwb3dlciBnYWluIGNyb3NzIGZhZGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkVxdWFsUG93ZXJHYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckIgPSBuZXcgVG9uZS5FcXVhbFBvd2VyR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGludmVydCB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uZSA9IHRoaXMuY29udGV4dC5nZXRDb25zdGFudCgxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpbnZlcnQgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnZlcnQgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmEuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5iLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuZmFkZS5jaGFpbih0aGlzLl9lcXVhbFBvd2VyQiwgdGhpcy5iLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX29uZS5jb25uZWN0KHRoaXMuX2ludmVydCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5mYWRlLmNvbm5lY3QodGhpcy5faW52ZXJ0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9pbnZlcnQuY2hhaW4odGhpcy5fZXF1YWxQb3dlckEsIHRoaXMuYS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZmFkZScpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3Jvc3NGYWRlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ3Jvc3NGYWRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNyb3NzRmFkZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmYWRlJyk7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJBID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmFkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mYWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9pbnZlcnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ludmVydCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb25lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5iLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNyb3NzRmFkZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkZpbHRlciBpcyBhIGZpbHRlciB3aGljaCBhbGxvd3MgZm9yIGFsbCBvZiB0aGUgc2FtZSBuYXRpdmUgbWV0aG9kc1xuXHRcdCAqICAgICAgICAgIGFzIHRoZSBbQmlxdWFkRmlsdGVyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtYmlxdWFkZmlsdGVybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICAgICAgICAgIFRvbmUuRmlsdGVyIGhhcyB0aGUgYWRkZWQgYWJpbGl0eSB0byBzZXQgdGhlIGZpbHRlciByb2xsb2ZmIGF0IC0xMlxuXHRcdCAqICAgICAgICAgIChkZWZhdWx0KSwgLTI0IGFuZCAtNDguXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVyLlxuXHRcdCAqICBAcGFyYW0ge3N0cmluZz19IHR5cGUgVGhlIHR5cGUgb2YgZmlsdGVyLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHJvbGxvZmYgVGhlIGRyb3AgaW4gZGVjaWJlbHMgcGVyIG9jdGF2ZSBhZnRlciB0aGUgY3V0b2ZmIGZyZXF1ZW5jeS5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIGNob2ljZXM6IC0xMiwgLTI0LCBhbmQgLTQ4XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBmaWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIoMjAwLCBcImhpZ2hwYXNzXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAncm9sbG9mZidcblx0ICAgICAgICBdLCBUb25lLkZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZpbHRlcihzKVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwoMCwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBvZiB0aGUgZmlsdGVyLCBvbmx5IHVzZWQgaW4gY2VydGFpbiBmaWx0ZXIgdHlwZXNcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG5ldyBUb25lLlNpZ25hbCh7XG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZ2Fpbixcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBmYWxzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBRIG9yIFF1YWxpdHkgb2YgdGhlIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5RKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdHlwZSBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge3N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcm9sbG9mZiB2YWx1ZSBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcm9sbG9mZiA9IG9wdGlvbnMucm9sbG9mZjtcblx0ICAgICAgICAvL3NldCB0aGUgcm9sbG9mZjtcblx0ICAgICAgICB0aGlzLnJvbGxvZmYgPSBvcHRpb25zLnJvbGxvZmY7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GaWx0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICpcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GaWx0ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnbG93cGFzcycsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDM1MCxcblx0ICAgICAgICAncm9sbG9mZic6IC0xMixcblx0ICAgICAgICAnUSc6IDEsXG5cdCAgICAgICAgJ2dhaW4nOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGZpbHRlci4gVHlwZXM6IFwibG93cGFzc1wiLCBcImhpZ2hwYXNzXCIsXG5cdFx0ICogXCJiYW5kcGFzc1wiLCBcImxvd3NoZWxmXCIsIFwiaGlnaHNoZWxmXCIsIFwibm90Y2hcIiwgXCJhbGxwYXNzXCIsIG9yIFwicGVha2luZ1wiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZpbHRlciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZpbHRlci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdmFyIHR5cGVzID0gW1xuXHQgICAgICAgICAgICAgICAgJ2xvd3Bhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ2hpZ2hwYXNzJyxcblx0ICAgICAgICAgICAgICAgICdiYW5kcGFzcycsXG5cdCAgICAgICAgICAgICAgICAnbG93c2hlbGYnLFxuXHQgICAgICAgICAgICAgICAgJ2hpZ2hzaGVsZicsXG5cdCAgICAgICAgICAgICAgICAnbm90Y2gnLFxuXHQgICAgICAgICAgICAgICAgJ2FsbHBhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ3BlYWtpbmcnXG5cdCAgICAgICAgICAgIF07XG5cdCAgICAgICAgICAgIGlmICh0eXBlcy5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5GaWx0ZXI6IGludmFsaWQgdHlwZSAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXS50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJvbGxvZmYgb2YgdGhlIGZpbHRlciB3aGljaCBpcyB0aGUgZHJvcCBpbiBkYlxuXHRcdCAqIHBlciBvY3RhdmUuIEltcGxlbWVudGVkIGludGVybmFsbHkgYnkgY2FzY2FkaW5nIGZpbHRlcnMuXG5cdFx0ICogT25seSBhY2NlcHRzIHRoZSB2YWx1ZXMgLTEyLCAtMjQsIC00OCBhbmQgLTk2LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZpbHRlciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHJvbGxvZmZcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZpbHRlci5wcm90b3R5cGUsICdyb2xsb2ZmJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcm9sbG9mZjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJvbGxvZmYpIHtcblx0ICAgICAgICAgICAgcm9sbG9mZiA9IHBhcnNlSW50KHJvbGxvZmYsIDEwKTtcblx0ICAgICAgICAgICAgdmFyIHBvc3NpYmlsaXRpZXMgPSBbXG5cdCAgICAgICAgICAgICAgICAtMTIsXG5cdCAgICAgICAgICAgICAgICAtMjQsXG5cdCAgICAgICAgICAgICAgICAtNDgsXG5cdCAgICAgICAgICAgICAgICAtOTZcblx0ICAgICAgICAgICAgXTtcblx0ICAgICAgICAgICAgdmFyIGNhc2NhZGluZ0NvdW50ID0gcG9zc2liaWxpdGllcy5pbmRleE9mKHJvbGxvZmYpO1xuXHQgICAgICAgICAgICAvL2NoZWNrIHRoZSByb2xsb2ZmIGlzIHZhbGlkXG5cdCAgICAgICAgICAgIGlmIChjYXNjYWRpbmdDb3VudCA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUb25lLkZpbHRlcjogcm9sbG9mZiBjYW4gb25seSBiZSAtMTIsIC0yNCwgLTQ4IG9yIC05NicpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNhc2NhZGluZ0NvdW50ICs9IDE7XG5cdCAgICAgICAgICAgIHRoaXMuX3JvbGxvZmYgPSByb2xsb2ZmO1xuXHQgICAgICAgICAgICAvL2ZpcnN0IGRpc2Nvbm5lY3QgdGhlIGZpbHRlcnMgYW5kIHRocm93IHRoZW0gYXdheVxuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0gPSBudWxsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnMgPSBuZXcgQXJyYXkoY2FzY2FkaW5nQ291bnQpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjb3VudCA9IDA7IGNvdW50IDwgY2FzY2FkaW5nQ291bnQ7IGNvdW50KyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBmaWx0ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgICAgICBmaWx0ZXIudHlwZSA9IHRoaXMuX3R5cGU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KGZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdChmaWx0ZXIuZGV0dW5lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuUS5jb25uZWN0KGZpbHRlci5RKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZ2Fpbi5jb25uZWN0KGZpbHRlci5nYWluKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbY291bnRdID0gZmlsdGVyO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vY29ubmVjdCB0aGVtIHVwXG5cdCAgICAgICAgICAgIHZhciBjb25uZWN0aW9uQ2hhaW4gPSBbdGhpcy5pbnB1dF0uY29uY2F0KHRoaXMuX2ZpbHRlcnMpLmNvbmNhdChbdGhpcy5vdXRwdXRdKTtcblx0ICAgICAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIGNvbm5lY3Rpb25DaGFpbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLlEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5nYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmdhaW4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWwgaW50byB0aHJlZSBiYW5kcyAobG93LCBtaWQsIGhpZ2gpXG5cdFx0ICogICAgICAgICB3aXRoIHR3byBjcm9zc292ZXIgZnJlcXVlbmN5IGNvbnRyb2xzLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2xvd0ZyZXF1ZW5jeV0gdGhlIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2hpZ2hGcmVxdWVuY3ldIHRoZSBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZFNwbGl0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5J1xuXHQgICAgICAgIF0sIFRvbmUuTXVsdGliYW5kU3BsaXQpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGlucHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3V0cHV0c1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgQXJyYXkoMyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvdyBiYW5kLiBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93ID0gdGhpcy5vdXRwdXRbMF0gPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2xvd3Bhc3MnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbG93ZXIgZmlsdGVyIG9mIHRoZSBtaWQgYmFuZFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG93TWlkRmlsdGVyID0gbmV3IFRvbmUuRmlsdGVyKDAsICdoaWdocGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgYmFuZCBvdXRwdXQuIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMV08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLm91dHB1dFsxXSA9IG5ldyBUb25lLkZpbHRlcigwLCAnbG93cGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBoaWdoIGJhbmQgb3V0cHV0LiBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzJdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZpbHRlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IHRoaXMub3V0cHV0WzJdID0gbmV3IFRvbmUuRmlsdGVyKDAsICdoaWdocGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmxvd0ZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5oaWdoRnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcXVhbGl0eSBvZiBhbGwgdGhlIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLlEpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZmFuKHRoaXMubG93LCB0aGlzLmhpZ2gpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4odGhpcy5fbG93TWlkRmlsdGVyLCB0aGlzLm1pZCk7XG5cdCAgICAgICAgLy90aGUgZnJlcXVlbmN5IGNvbnRyb2wgc2lnbmFsXG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kuY29ubmVjdCh0aGlzLmxvdy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fbG93TWlkRmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5LmNvbm5lY3QodGhpcy5taWQuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kuY29ubmVjdCh0aGlzLmhpZ2guZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3RoZSBRIHZhbHVlXG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5sb3cuUSk7XG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5fbG93TWlkRmlsdGVyLlEpO1xuXHQgICAgICAgIHRoaXMuUS5jb25uZWN0KHRoaXMubWlkLlEpO1xuXHQgICAgICAgIHRoaXMuUS5jb25uZWN0KHRoaXMuaGlnaC5RKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NdWx0aWJhbmRTcGxpdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kU3BsaXQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IDQwMCxcblx0ICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IDI1MDAsXG5cdCAgICAgICAgJ1EnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NdWx0aWJhbmRTcGxpdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRTcGxpdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmxvdy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sb3cgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xvd01pZEZpbHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbG93TWlkRmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oaWdoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTXVsdGliYW5kU3BsaXQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkVRMyBpcyBhIHRocmVlIGJhbmQgRVEgd2l0aCBjb250cm9sIG92ZXIgbG93LCBtaWQsIGFuZCBoaWdoIGdhaW4gYXNcblx0XHQgKiAgICAgICAgIHdlbGwgYXMgdGhlIGxvdyBhbmQgaGlnaCBjcm9zc292ZXIgZnJlcXVlbmNpZXMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfE9iamVjdH0gW2xvd0xldmVsXSBUaGUgZ2FpbiBhcHBsaWVkIHRvIHRoZSBsb3dzLlxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbbWlkTGV2ZWxdIFRoZSBnYWluIGFwcGxpZWQgdG8gdGhlIG1pZC5cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc30gW2hpZ2hMZXZlbF0gVGhlIGdhaW4gYXBwbGllZCB0byB0aGUgaGlnaC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZXEgPSBuZXcgVG9uZS5FUTMoLTEwLCAzLCAtMjApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FUTMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdoaWdoJ1xuXHQgICAgICAgIF0sIFRvbmUuRVEzKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvdXRwdXQgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG11bHRpYmFuZCBzcGxpdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpYmFuZFNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aWJhbmRTcGxpdCh7XG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knOiBvcHRpb25zLmxvd0ZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiBvcHRpb25zLmhpZ2hGcmVxdWVuY3lcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBmb3IgdGhlIGxvd2VyIHNpZ25hbHNcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG93R2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5sb3csIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gZm9yIHRoZSBtaWQgc2lnbmFsc1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLm1pZCwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBoaWdoIHBhcnRcblx0XHRcdCAqIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faGlnaEdhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMuaGlnaCwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBsb3cgcGFydFxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3cgPSB0aGlzLl9sb3dHYWluLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBpbiBkZWNpYmVscyBvZiB0aGUgbWlkIHBhcnRcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gdGhpcy5fbWlkR2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIGhpZ2ggcGFydFxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoID0gdGhpcy5faGlnaEdhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgUSB2YWx1ZSBmb3IgYWxsIG9mIHRoZSBmaWx0ZXJzLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSB0aGlzLl9tdWx0aWJhbmRTcGxpdC5RO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IHRoaXMuX211bHRpYmFuZFNwbGl0Lmxvd0ZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL2hpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IHRoaXMuX211bHRpYmFuZFNwbGl0LmhpZ2hGcmVxdWVuY3k7XG5cdCAgICAgICAgLy90aGUgZnJlcXVlbmN5IGJhbmRzXG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQubG93LmNoYWluKHRoaXMuX2xvd0dhaW4sIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdC5taWQuY2hhaW4odGhpcy5fbWlkR2FpbiwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0LmhpZ2guY2hhaW4odGhpcy5faGlnaEdhaW4sIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FUTMsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRVEzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdsb3cnOiAwLFxuXHQgICAgICAgICdtaWQnOiAwLFxuXHQgICAgICAgICdoaWdoJzogMCxcblx0ICAgICAgICAnbG93RnJlcXVlbmN5JzogNDAwLFxuXHQgICAgICAgICdoaWdoRnJlcXVlbmN5JzogMjUwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FUTN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRVEzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbG93R2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbG93R2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkR2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faGlnaEdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2hpZ2hHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvdyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FUTM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgUGVyZm9ybXMgYSBsaW5lYXIgc2NhbGluZyBvbiBhbiBpbnB1dCBzaWduYWwuXG5cdFx0ICogICAgICAgICAgU2NhbGVzIGEgTm9ybWFsUmFuZ2UgaW5wdXQgdG8gYmV0d2VlblxuXHRcdCAqICAgICAgICAgIG91dHB1dE1pbiBhbmQgb3V0cHV0TWF4LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1pbj0wXSBUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDAuIFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1heD0xXVx0VGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAxLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2NhbGUgPSBuZXcgVG9uZS5TY2FsZSg1MCwgMTAwKTtcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDAuNSkuY29ubmVjdChzY2FsZSk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIHNjYWxlIGVxdWFscyA3NVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZSA9IGZ1bmN0aW9uIChvdXRwdXRNaW4sIG91dHB1dE1heCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vdXRwdXRNaW4gPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TWluLCAwKTtcblx0ICAgICAgICAvKiogXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3V0cHV0TWF4ID0gVG9uZS5kZWZhdWx0QXJnKG91dHB1dE1heCwgMSk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpcGx5KDEpO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWRkID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5BZGQoMCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuY29ubmVjdCh0aGlzLl9hZGQpO1xuXHQgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TY2FsZSwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW4gXG5cdFx0ICogdGhlIHZhbHVlIGlucHV0IHZhbHVlIGlzIDAuIFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZS5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRNaW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0TWluID0gbWluO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlbiBcblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMS4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dE1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXRNYXggPSBtYXg7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgc2V0IHRoZSB2YWx1ZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGUucHJvdG90eXBlLl9zZXRSYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9hZGQudmFsdWUgPSB0aGlzLl9vdXRwdXRNaW47XG5cdCAgICAgICAgdGhpcy5fc2NhbGUudmFsdWUgPSB0aGlzLl9vdXRwdXRNYXggLSB0aGlzLl9vdXRwdXRNaW47XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TY2FsZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hZGQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FkZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TY2FsZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgUGVyZm9ybXMgYW4gZXhwb25lbnRpYWwgc2NhbGluZyBvbiBhbiBpbnB1dCBzaWduYWwuXG5cdFx0ICogICAgICAgICAgU2NhbGVzIGEgTm9ybWFsUmFuZ2UgdmFsdWUgWzAsMV0gZXhwb25lbnRpYWxseVxuXHRcdCAqICAgICAgICAgIHRvIHRoZSBvdXRwdXQgcmFuZ2Ugb2Ygb3V0cHV0TWluIHRvIG91dHB1dE1heC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXRNaW49MF0gVGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAwLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1heD0xXVx0VGhlIG91dHB1dCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyAxLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2V4cG9uZW50PTJdIFRoZSBleHBvbmVudCB3aGljaCBzY2FsZXMgdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2NhbGVFeHAgPSBuZXcgVG9uZS5TY2FsZUV4cCgwLCAxMDAsIDIpO1xuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KHNjYWxlRXhwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVFeHAgPSBmdW5jdGlvbiAob3V0cHV0TWluLCBvdXRwdXRNYXgsIGV4cG9uZW50KSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIGlucHV0IHRvIHRoZSBvdXRwdXQgcmFuZ2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlNjYWxlKG91dHB1dE1pbiwgb3V0cHV0TWF4KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBvd31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLlBvdyhUb25lLmRlZmF1bHRBcmcoZXhwb25lbnQsIDIpKTtcblx0ICAgICAgICB0aGlzLl9leHAuY29ubmVjdCh0aGlzLl9zY2FsZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TY2FsZUV4cCwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIEluc3RlYWQgb2YgaW50ZXJwb2xhdGluZyBsaW5lYXJseSBiZXR3ZWVuIHRoZSA8Y29kZT5taW48L2NvZGU+IGFuZFxuXHRcdCAqIDxjb2RlPm1heDwvY29kZT4gdmFsdWVzLCBzZXR0aW5nIHRoZSBleHBvbmVudCB3aWxsIGludGVycG9sYXRlIGJldHdlZW5cblx0XHQgKiB0aGUgdHdvIHZhbHVlcyB3aXRoIGFuIGV4cG9uZW50aWFsIGN1cnZlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlRXhwI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgZXhwb25lbnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlRXhwLnByb3RvdHlwZSwgJ2V4cG9uZW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwLnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cC52YWx1ZSA9IGV4cDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW5cblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZUV4cCNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1pbiA9IG1pbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIG91dHB1dCB2YWx1ZS4gVGhpcyBudW1iZXIgaXMgb3V0cHV0IHdoZW5cblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZUV4cCNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWF4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1heCA9IG1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2NhbGVFeHB9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9leHAuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2V4cCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2NhbGVFeHA7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCBXZWIgQXVkaW8ncyBuYXRpdmUgW0RlbGF5Tm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtZGVsYXlub2RlLWludGVyZmFjZSkuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBkZWxheVRpbWUgVGhlIGRlbGF5IGFwcGxpZWQgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gbWF4RGVsYXkgVGhlIG1heGltdW0gZGVsYXkgdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRGVsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ21heERlbGF5J1xuXHQgICAgICAgIF0sIFRvbmUuRGVsYXkpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbWF4aW11bSBkZWxheSB0aW1lIGluaXRpYWxpemVkIHdpdGggdGhlIG5vZGVcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWF4RGVsYXkgPSBNYXRoLm1heCh0aGlzLnRvU2Vjb25kcyhvcHRpb25zLm1heERlbGF5KSwgdGhpcy50b1NlY29uZHMob3B0aW9ucy5kZWxheVRpbWUpKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbmF0aXZlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlRGVsYXkodGhpcy5fbWF4RGVsYXkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSB0aGUgaW5jb21pbmcgc2lnbmFsIGlzXG5cdFx0XHQgKiAgZGVsYXllZC5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fZGVsYXlOb2RlLmRlbGF5VGltZSxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLlRpbWUsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZGVsYXlUaW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2RlbGF5VGltZScpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRGVsYXksIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EZWxheS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWF4RGVsYXknOiAxLFxuXHQgICAgICAgICdkZWxheVRpbWUnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gZGVsYXkgdGltZS4gVGhpcyBjYW5ub3QgYmUgY2hhbmdlZC4gVGhlIHZhbHVlIGlzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3Rvci5cblx0XHQgKiBAbWVtYmVyb2YgVG9uZS5EZWxheSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBtYXhEZWxheVxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRGVsYXkucHJvdG90eXBlLCAnbWF4RGVsYXknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXhEZWxheTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRGVsYXl9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRlbGF5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdkZWxheVRpbWUnKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRGVsYXk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBDb21iIGZpbHRlcnMgYXJlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcyBmb3IgcGh5c2ljYWwgbW9kZWxpbmcuIFJlYWQgbW9yZVxuXHRcdCAqICAgICAgICAgYWJvdXQgY29tYiBmaWx0ZXJzIG9uIFtDQ1JNQSdzIHdlYnNpdGVdKGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L35qb3MvcGFzcC9GZWVkYmFja19Db21iX0ZpbHRlcnMuaHRtbCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2RlbGF5VGltZV0gVGhlIGRlbGF5IHRpbWUgb2YgdGhlIGZpbHRlci5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZT19IHJlc29uYW5jZSBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIHRoZSBmaWx0ZXIgaGFzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZSdcblx0ICAgICAgICBdLCBUb25lLkZlZWRiYWNrQ29tYkZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZGVsYXkgb2YgdGhlIGNvbWIgZmlsdGVyLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZGVsYXkuZGVsYXlUaW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmZWVkYmFjayBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5yZXNvbmFuY2UsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBmZWVkYmFjayBvZiB0aGUgZGVsYXllZCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gdGhpcy5fZmVlZGJhY2suZ2Fpbjtcblx0ICAgICAgICB0aGlzLl9kZWxheS5jaGFpbih0aGlzLl9mZWVkYmFjaywgdGhpcy5fZGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4xLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiAwLjVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRmVlZGJhY2tDb21iRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBHZXQgdGhlIGN1cnJlbnQgd2F2ZWZvcm0gZGF0YSBvZiB0aGUgY29ubmVjdGVkIGF1ZGlvIHNvdXJjZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHNpemUgVGhlIHNpemUgb2YgdGhlIEZGVC4gVmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICovXG5cdCAgICBUb25lLkZGVCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3NpemUnXSwgVG9uZS5GRlQpO1xuXHQgICAgICAgIG9wdGlvbnMudHlwZSA9IFRvbmUuQW5hbHlzZXIuVHlwZS5GRlQ7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFuYWx5c2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5BbmFseXNlcihvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZGVCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkZGVC5kZWZhdWx0cyA9IHsgJ3NpemUnOiAxMDI0IH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0cyB0aGUgd2F2ZWZvcm0gb2YgdGhlIGF1ZGlvIHNvdXJjZS4gUmV0dXJucyB0aGUgd2F2ZWZvcm0gZGF0YVxuXHRcdCAqICBvZiBsZW5ndGggW3NpemVdKCNzaXplKSBhcyBhIEZsb2F0MzJBcnJheSB3aXRoIHZhbHVlcyBiZXR3ZWVuIC0xIGFuZCAxLlxuXHRcdCAqICBAcmV0dXJucyB7VHlwZWRBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuRkZULnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNpemUgb2YgYW5hbHlzaXMuIFRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkZGVCNcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgc2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRkZULnByb3RvdHlwZSwgJ3NpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5zaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zaXplID0gc2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRkZUfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GRlQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZGVDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFJldHVybiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYW4gaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoLTEpO1xuXHRcdCAqIHZhciBhYnMgPSBuZXcgVG9uZS5BYnMoKTtcblx0XHQgKiBzaWduYWwuY29ubmVjdChhYnMpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBhYnMgaXMgMS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQWJzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxlc3NUaGFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hYnMgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKE1hdGguYWJzKHZhbCkgPCAwLjAwMSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnModmFsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sIDEwMjQpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQWJzLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgbWV0aG9kXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFic30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BYnMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYWJzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hYnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFicztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkZvbGxvd2VyIGlzIGEgIGNydWRlIGVudmVsb3BlIGZvbGxvd2VyIHdoaWNoIHdpbGwgZm9sbG93XG5cdFx0ICogICAgICAgICAgdGhlIGFtcGxpdHVkZSBvZiBhbiBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogICAgICAgICAgVGFrZSBjYXJlIHdpdGggc21hbGwgKDwgMC4wMikgYXR0YWNrIG9yIGRlY2F5IHZhbHVlc1xuXHRcdCAqICAgICAgICAgIGFzIGZvbGxvd2VyIGhhcyBzb21lIHJpcHBsZSB3aGljaCBpcyBleGFnZ2VyYXRlZFxuXHRcdCAqICAgICAgICAgIGF0IHRoZXNlIHZhbHVlcy4gUmVhZCBtb3JlIGFib3V0IGVudmVsb3BlIGZvbGxvd2VycyAoYWxzbyBrbm93blxuXHRcdCAqICAgICAgICAgIGFzIGVudmVsb3BlIGRldGVjdG9ycykgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRW52ZWxvcGVfZGV0ZWN0b3IpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdIFRoZSByYXRlIGF0IHdoaWNoIHRoZSBmb2xsb3dlciByaXNlcy5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmVsZWFzZSBUaGUgcmF0ZSBhdCB3aGljaCB0aGUgZm9sb3dlciBmYWxscy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZm9sbG93ZXIgPSBuZXcgVG9uZS5Gb2xsb3dlcigwLjIsIDAuNCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRm9sbG93ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFic31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWJzID0gbmV3IFRvbmUuQWJzKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxvd3Bhc3MgZmlsdGVyIHdoaWNoIHNtb290aHMgdGhlIGlucHV0XG5cdFx0XHQgKiAgQHR5cGUge0JpcXVhZEZpbHRlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIudHlwZSA9ICdsb3dwYXNzJztcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuZnJlcXVlbmN5LnZhbHVlID0gMDtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuUS52YWx1ZSA9IC0xMDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbmV3IFRvbmUuRGVsYXkodGhpcy5ibG9ja1RpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoaXMga2VlcHMgaXQgZmFyIGZyb20gMCwgZXZlbiBmb3IgdmVyeSBzbWFsbCBkaWZmZXJlbmNlc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMTAwMDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2F0dGFjayA9IG9wdGlvbnMuYXR0YWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JlbGVhc2UgPSBvcHRpb25zLnJlbGVhc2U7XG5cdCAgICAgICAgLy90aGUgc21vb3RoZWQgc2lnbmFsIHRvIGdldCB0aGUgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLl9hYnMsIHRoaXMuX2ZpbHRlciwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vdGhlIGRpZmZlcmVuY2UgcGF0aFxuXHQgICAgICAgIHRoaXMuX2Ficy5jb25uZWN0KHRoaXMuX3N1YiwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyLmNoYWluKHRoaXMuX2RlbGF5LCB0aGlzLl9zdWIpO1xuXHQgICAgICAgIC8vdGhyZXNob2xkIHRoZSBkaWZmZXJlbmNlIGFuZCB1c2UgdGhlIHRocmVzaCB0byBzZXQgdGhlIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuX3N1Yi5jaGFpbih0aGlzLl9tdWx0LCB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMsIHRoaXMuX2ZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBhdHRhY2sgYW5kIHJlbGVhc2UgdmFsdWVzIGluIHRoZSB0YWJsZVxuXHQgICAgICAgIHRoaXMuX3NldEF0dGFja1JlbGVhc2UodGhpcy5fYXR0YWNrLCB0aGlzLl9yZWxlYXNlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZvbGxvd2VyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrJzogMC4wNSxcblx0ICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXRzIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2UgdGltZXMgaW4gdGhlIHdhdmUgc2hhcGVyXG5cdFx0ICogIEBwYXJhbSAgIHtUaW1lfSBhdHRhY2tcblx0XHQgKiAgQHBhcmFtICAge1RpbWV9IHJlbGVhc2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLl9zZXRBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGF0dGFjaywgcmVsZWFzZSkge1xuXHQgICAgICAgIHZhciBtaW5UaW1lID0gdGhpcy5ibG9ja1RpbWU7XG5cdCAgICAgICAgYXR0YWNrID0gVG9uZS5UaW1lKGF0dGFjaykudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICByZWxlYXNlID0gVG9uZS5UaW1lKHJlbGVhc2UpLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgYXR0YWNrID0gTWF0aC5tYXgoYXR0YWNrLCBtaW5UaW1lKTtcblx0ICAgICAgICByZWxlYXNlID0gTWF0aC5tYXgocmVsZWFzZSwgbWluVGltZSk7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5VmFsdWVzLnNldE1hcChmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmICh2YWwgPD0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGF0dGFjaztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiByZWxlYXNlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF0dGFjayB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZvbGxvd2VyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGF0dGFja1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLCAnYXR0YWNrJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNrO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYXR0YWNrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2F0dGFjayA9IGF0dGFjaztcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QXR0YWNrUmVsZWFzZSh0aGlzLl9hdHRhY2ssIHRoaXMuX3JlbGVhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJlbGVhc2UgdGltZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Gb2xsb3dlciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSByZWxlYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUsICdyZWxlYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVsZWFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJlbGVhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmVsZWFzZSA9IHJlbGVhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldEF0dGFja1JlbGVhc2UodGhpcy5fYXR0YWNrLCB0aGlzLl9yZWxlYXNlKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBCb3Jyb3dzIHRoZSBjb25uZWN0IG1ldGhvZCBmcm9tIFNpZ25hbCBzbyB0aGF0IHRoZSBvdXRwdXQgY2FuIGJlIHVzZWRcblx0XHQgKiAgYXMgYSBUb25lLlNpZ25hbCBjb250cm9sIHNpZ25hbC5cblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyLnByb3RvdHlwZS5jb25uZWN0ID0gVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0O1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRm9sbG93ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5VmFsdWVzLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3ViLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9zdWIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Ficy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYWJzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRm9sbG93ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlNjYWxlZEVudmVsb3AgaXMgYW4gZW52ZWxvcGUgd2hpY2ggY2FuIGJlIHNjYWxlZFxuXHRcdCAqICAgICAgICAgdG8gYW55IHJhbmdlLiBJdCdzIHVzZWZ1bCBmb3IgYXBwbHlpbmcgYW4gZW52ZWxvcGVcblx0XHQgKiAgICAgICAgIHRvIGEgZnJlcXVlbmN5IG9yIGFueSBvdGhlciBub24tTm9ybWFsUmFuZ2Ugc2lnbmFsXG5cdFx0ICogICAgICAgICBwYXJhbWV0ZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW52ZWxvcGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbYXR0YWNrXVx0dGhlIGF0dGFjayB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHR0aGUgZGVjYXkgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbc3VzdGFpbl0gXHRhIHBlcmNlbnRhZ2UgKDAtMSkgb2YgdGhlIGZ1bGwgYW1wbGl0dWRlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHR0aGUgcmVsZWFzZSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIHNjYWxlZEVudiA9IG5ldyBUb25lLlNjYWxlZEVudmVsb3BlKHtcblx0XHQgKiAgXHRcImF0dGFja1wiIDogMC4yLFxuXHRcdCAqICBcdFwibWluXCIgOiAyMDAsXG5cdFx0ICogIFx0XCJtYXhcIiA6IDIwMDBcblx0XHQgKiAgfSk7XG5cdFx0ICogIHNjYWxlZEVudi5jb25uZWN0KG9zY2lsbGF0b3IuZnJlcXVlbmN5KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9nZXQgYWxsIG9mIHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdkZWNheScsXG5cdCAgICAgICAgICAgICdzdXN0YWluJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5TY2FsZWRFbnZlbG9wZS5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIGluY29taW5nIHNpZ25hbCBieSBhbiBleHBvbmVudFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBvd31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXhwID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Qb3cob3B0aW9ucy5leHBvbmVudCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc2NhbGUgdGhlIHNpZ25hbCB0byB0aGUgZGVzaXJlZCByYW5nZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2NhbGUob3B0aW9ucy5taW4sIG9wdGlvbnMubWF4KTtcblx0ICAgICAgICB0aGlzLl9zaWcuY2hhaW4odGhpcy5fZXhwLCB0aGlzLl9zY2FsZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TY2FsZWRFbnZlbG9wZSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlZEVudmVsb3BlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICdleHBvbmVudCc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBtaW4gb3V0cHV0IHZhbHVlLiBUaGlzIGlzIHRoZSB2YWx1ZSB3aGljaCBpdFxuXHRcdCAqIHN0YXJ0cyBhdC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZWRFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1pbiA9IG1pbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIG1heCBvdXRwdXQgdmFsdWUuIEluIG90aGVyIHdvcmRzLCB0aGUgdmFsdWVcblx0XHQgKiBhdCB0aGUgcGVhayBvZiB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlZEVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5tYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgZXhwb25lbnQgdmFsdWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVkRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBleHBvbmVudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLCAnZXhwb25lbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHAudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwLnZhbHVlID0gZXhwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNjYWxlZEVudmVsb3BlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V4cC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXhwID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TY2FsZWRFbnZlbG9wZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUgaXMgYSBUb25lLlNjYWxlZEVudmVsb3BlLCBidXQgaW5zdGVhZCBvZiBgbWluYCBhbmQgYG1heGBcblx0XHQgKiAgICAgICAgIGl0J3MgZ290IGEgYGJhc2VGcmVxdWVuY3lgIGFuZCBgb2N0YXZlc2AgcGFyYW1ldGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVudmVsb3BlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja11cdHRoZSBhdHRhY2sgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2RlY2F5XVx0dGhlIGRlY2F5IHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3N1c3RhaW5dIFx0YSBwZXJjZW50YWdlICgwLTEpIG9mIHRoZSBmdWxsIGFtcGxpdHVkZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtyZWxlYXNlXVx0dGhlIHJlbGVhc2UgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBmcmVxRW52ID0gbmV3IFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUoe1xuXHRcdCAqICBcdFwiYXR0YWNrXCIgOiAwLjIsXG5cdFx0ICogIFx0XCJiYXNlRnJlcXVlbmN5XCIgOiBcIkMyXCIsXG5cdFx0ICogIFx0XCJvY3RhdmVzXCIgOiA0XG5cdFx0ICogIH0pO1xuXHRcdCAqICBmcmVxRW52LmNvbm5lY3Qob3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAnZGVjYXknLFxuXHQgICAgICAgICAgICAnc3VzdGFpbicsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvL21lcmdlIGl0IHdpdGggdGhlIGZyZXF1ZW5jeSBlbnZlbG9wZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU3RvcmVzIHRoZSBvY3RhdmUgdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLy9zZXR1cFxuXHQgICAgICAgIHRoaXMuYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeUVudmVsb3BlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogNCxcblx0ICAgICAgICAnZXhwb25lbnQnOiAyXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgbWluaW51bSBvdXRwdXQgdmFsdWUuIFRoaXMgaXMgdGhlIHZhbHVlIHdoaWNoIGl0XG5cdFx0ICogc3RhcnRzIGF0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQG5hbWUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLCAnYmFzZUZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5taW4gPSB0aGlzLnRvRnJlcXVlbmN5KG1pbik7XG5cdCAgICAgICAgICAgIC8vYWxzbyB1cGRhdGUgdGhlIG9jdGF2ZXNcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgYmFzZUZyZXF1ZW5jeSB0aGF0IHRoZVxuXHRcdCAqIGVudmVsb3BlIHdpbGwgc2NhbGUgdG8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZyZXF1ZW5jeUVudmVsb3BlLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0YXZlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0YXZlcztcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWF4ID0gdGhpcy5iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgb2N0YXZlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBleHBvbmVudCB2YWx1ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGV4cG9uZW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUsICdleHBvbmVudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAudmFsdWUgPSBleHA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRnJlcXVlbmN5RW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEdyZWF0ZXJUaGFuWmVybyBvdXRwdXRzIDEgd2hlbiB0aGUgaW5wdXQgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIHplcm9cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZ3QwID0gbmV3IFRvbmUuR3JlYXRlclRoYW5aZXJvKCk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgwLjAxKS5jb25uZWN0KGd0MCk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGd0MCBpcyAxLlxuXHRcdCAqIHNpZy52YWx1ZSA9IDA7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGd0MCBpcyAwLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhblplcm8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGhyZXNoID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKHZhbCA8PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSwgMTI3KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgZmlyc3QgdGhyZXNob2xkZWQgc2lnbmFsIGJ5IGEgbGFyZ2UgdmFsdWUuXG5cdFx0XHQgKiAgdGhpcyB3aWxsIGhlbHAgd2l0aCB2YWx1ZXMgd2hpY2ggYXJlIHZlcnkgY2xvc2UgdG8gMFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aXBseSgxMDAwMCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmNvbm5lY3QodGhpcy5fdGhyZXNoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdyZWF0ZXJUaGFuWmVybywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNwb3NlIG1ldGhvZFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HcmVhdGVyVGhhblplcm99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW5aZXJvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGhyZXNoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdyZWF0ZXJUaGFuWmVybztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBPdXRwdXQgMSBpZiB0aGUgc2lnbmFsIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUsIG90aGVyd2lzZSBvdXRwdXRzIDAuXG5cdFx0ICogICAgICAgICAgY2FuIGNvbXBhcmUgdHdvIHNpZ25hbHMgb3IgYSBzaWduYWwgYW5kIGEgbnVtYmVyLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmFsdWU9MF0gdGhlIHZhbHVlIHRvIGNvbXBhcmUgdG8gdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBndCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuKDIpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoNCkuY29ubmVjdChndCk7XG5cdFx0ICogLy9vdXRwdXQgb2YgZ3QgaXMgZXF1YWwgMS5cblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW4gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbC5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzdWJ0cmFjdCB0aGUgYW1vdW50IGZyb20gdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5TdWJ0cmFjdCh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5pbnB1dFsxXSA9IHRoaXMuX3BhcmFtLmlucHV0WzFdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbXBhcmUgdGhhdCBhbW91bnQgdG8gemVyb1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdyZWF0ZXJUaGFuWmVyb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ3R6ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HcmVhdGVyVGhhblplcm8oKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jb25uZWN0KHRoaXMuX2d0eik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HcmVhdGVyVGhhbiwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgbWV0aG9kXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdyZWF0ZXJUaGFufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyZWF0ZXJUaGFuLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZ3R6LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ndHogPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdyZWF0ZXJUaGFuO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuR2F0ZSBvbmx5IHBhc3NlcyBhIHNpZ25hbCB0aHJvdWdoIHdoZW4gdGhlIGluY29taW5nXG5cdFx0ICogICAgICAgICAgc2lnbmFsIGV4Y2VlZHMgYSBzcGVjaWZpZWQgdGhyZXNob2xkLiBUbyBkbyB0aGlzLCBHYXRlIHVzZXNcblx0XHQgKiAgICAgICAgICBhIFRvbmUuRm9sbG93ZXIgdG8gZm9sbG93IHRoZSBhbXBsaXR1ZGUgb2YgdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBBIGNvbW1vbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIGlzIGEgW05vaXNlIEdhdGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05vaXNlX2dhdGUpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN8T2JqZWN0fSBbdGhyZXNob2xkXSBUaGUgdGhyZXNob2xkIGFib3ZlIHdoaWNoIHRoZSBnYXRlIHdpbGwgb3Blbi5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gYXR0YWNrIFRoZSBmb2xsb3dlcidzIGF0dGFjayB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJlbGVhc2UgVGhlIGZvbGxvd2VyJ3MgcmVsZWFzZSB0aW1lXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGdhdGUgPSBuZXcgVG9uZS5HYXRlKC0zMCwgMC4yLCAwLjMpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIG1pYyA9IG5ldyBUb25lLlVzZXJNZWRpYSgpLmNvbm5lY3QoZ2F0ZSk7XG5cdFx0ICogLy90aGUgZ2F0ZSB3aWxsIG9ubHkgcGFzcyB0aHJvdWdoIHRoZSBpbmNvbWluZ1xuXHRcdCAqIC8vc2lnbmFsIHdoZW4gaXQncyBsb3VkZXIgdGhhbiAtMzBkYlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCcsXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkdhdGUpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkZvbGxvd2VyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mb2xsb3dlciA9IG5ldyBUb25lLkZvbGxvd2VyKG9wdGlvbnMuYXR0YWNrLCBvcHRpb25zLnJlbGVhc2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdyZWF0ZXJUaGFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ndCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuKFRvbmUuZGJUb0dhaW4ob3B0aW9ucy50aHJlc2hvbGQpKTtcblx0ICAgICAgICAvL3RoZSBjb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLy90aGUgY29udHJvbCBzaWduYWxcblx0ICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMuX2d0LCB0aGlzLl9mb2xsb3dlciwgdGhpcy5vdXRwdXQuZ2Fpbik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HYXRlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuR2F0ZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrJzogMC4xLFxuXHQgICAgICAgICdyZWxlYXNlJzogMC4xLFxuXHQgICAgICAgICd0aHJlc2hvbGQnOiAtNDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdGhyZXNob2xkIG9mIHRoZSBnYXRlIGluIGRlY2liZWxzXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR2F0ZSNcblx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0ICogQG5hbWUgdGhyZXNob2xkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HYXRlLnByb3RvdHlwZSwgJ3RocmVzaG9sZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuZ2FpblRvRGIodGhpcy5fZ3QudmFsdWUpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGhyZXNoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2d0LnZhbHVlID0gVG9uZS5kYlRvR2Fpbih0aHJlc2gpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF0dGFjayBzcGVlZCBvZiB0aGUgZ2F0ZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdhdGUjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgYXR0YWNrXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HYXRlLnByb3RvdHlwZSwgJ2F0dGFjaycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbGxvd2VyLmF0dGFjaztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGF0dGFja1RpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZm9sbG93ZXIuYXR0YWNrID0gYXR0YWNrVGltZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByZWxlYXNlIHNwZWVkIG9mIHRoZSBnYXRlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR2F0ZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSByZWxlYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HYXRlLnByb3RvdHlwZSwgJ3JlbGVhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb2xsb3dlci5yZWxlYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmVsZWFzZVRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZm9sbG93ZXIucmVsZWFzZSA9IHJlbGVhc2VUaW1lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HYXRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdhdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9mb2xsb3dlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZvbGxvd2VyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9ndCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR2F0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIFRvbmUuVGlja1NpZ25hbCBleHRlbmRzIFRvbmUuU2lnbmFsLCBidXQgYWRkcyB0aGUgY2FwYWJpbGl0eVxuXHRcdCAqICAgICAgICB0byBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBlbGFwc2VkIHRpY2tzLiBleHBvbmVudGlhbCBhbmQgdGFyZ2V0IGN1cnZlc1xuXHRcdCAqICAgICAgICBhcmUgYXBwcm94aW1hdGVkIHdpdGggbXVsdGlwbGUgbGluZWFyIHJhbXBzLlxuXHRcdCAqXG5cdFx0ICogICAgICAgIFRoYW5rIHlvdSBCcnVubyBEaWFzLCBILiBTb2ZpYSBQaW50bywgYW5kIERhdmlkIE0uIE1hdG9zLCBmb3IgeW91ciBbV0FDIHBhcGVyXShodHRwczovL3NtYXJ0ZWNoLmdhdGVjaC5lZHUvYml0c3RyZWFtL2hhbmRsZS8xODUzLzU0NTg4L1dBQzIwMTYtNDkucGRmKVxuXHRcdCAqICAgICAgICBkZXNjcmliaW5nIGludGVncmF0aW5nIHRpbWluZyBmdW5jdGlvbnMgZm9yIHRlbXBvIGNhbGN1bGF0aW9ucy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc2lnbmFsXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuU2lnbmFsfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgdmFsdWUgPSBUb25lLmRlZmF1bHRBcmcodmFsdWUsIDEpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcywge1xuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuVGlja3MsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9leHRlbmQgdGhlIG1lbW9yeVxuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5tZW1vcnkgPSBJbmZpbml0eTtcblx0ICAgICAgICAvL2NsZWFyIHRoZSBjbG9jayBmcm9tIHRoZSBiZWdpbm5pbmdcblx0ICAgICAgICB0aGlzLmNhbmNlbFNjaGVkdWxlZFZhbHVlcygwKTtcblx0ICAgICAgICAvL3NldCBhbiBpbml0aWFsIGV2ZW50XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgICd0eXBlJzogVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiAwLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGlja1NpZ25hbCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogV3JhcHMgVG9uZS5TaWduYWwgbWV0aG9kcyBzbyB0aGF0IHRoZXkgYWxzb1xuXHRcdCAqIHJlY29yZCB0aGUgdGlja3MuXG5cdFx0ICogQHBhcmFtICB7RnVuY3Rpb259IG1ldGhvZFxuXHRcdCAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBmdW5jdGlvbiBfd3JhcFNjaGVkdWxlTWV0aG9kcyhtZXRob2QpIHtcblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gdGhpcy5fZXZlbnRzLnByZXZpb3VzRXZlbnQoZXZlbnQpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3NVbnRpbFRpbWUgPSB0aGlzLl9nZXRUaWNrc1VudGlsRXZlbnQocHJldmlvdXNFdmVudCwgdGltZSk7XG5cdCAgICAgICAgICAgIGV2ZW50LnRpY2tzID0gTWF0aC5tYXgodGlja3NVbnRpbFRpbWUsIDApO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSA9IF93cmFwU2NoZWR1bGVNZXRob2RzKFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSk7XG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lID0gX3dyYXBTY2hlZHVsZU1ldGhvZHMoVG9uZS5TaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUgd2l0aFxuXHRcdCAqICBhIHJhdGUgaGF2aW5nIHRoZSBnaXZlbiB0aW1lIGNvbnN0YW50LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHRpbWVDb25zdGFudFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnNldFRhcmdldEF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSwgY29uc3RhbnQpIHtcblx0ICAgICAgICAvL2Fwcm94aW1hdGUgaXQgd2l0aCBtdWx0aXBsZSBsaW5lYXIgcmFtcHNcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQodGltZSk7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIC8vc3RhcnQgZnJvbSBwcmV2aW91c2x5IHNjaGVkdWxlZCB2YWx1ZVxuXHQgICAgICAgIHZhciBwcmV2RXZlbnQgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHZhciBzZWdtZW50cyA9IE1hdGgucm91bmQoTWF0aC5tYXgoMSAvIGNvbnN0YW50LCAxKSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gc2VnbWVudHM7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgc2VnVGltZSA9IGNvbnN0YW50ICogaSArIHRpbWU7XG5cdCAgICAgICAgICAgIHZhciByYW1wVmFsID0gdGhpcy5fZXhwb25lbnRpYWxBcHByb2FjaChwcmV2RXZlbnQudGltZSwgcHJldkV2ZW50LnZhbHVlLCB2YWx1ZSwgY29uc3RhbnQsIHNlZ1RpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMuX3RvVW5pdHMocmFtcFZhbCksIHNlZ1RpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGV4cG9uZW50aWFsIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcGFyYW1ldGVyIHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBlbmRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIC8vYXByb3hpbWF0ZSBpdCB3aXRoIG11bHRpcGxlIGxpbmVhciByYW1wc1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgLy9zdGFydCBmcm9tIHByZXZpb3VzbHkgc2NoZWR1bGVkIHZhbHVlXG5cdCAgICAgICAgdmFyIHByZXZFdmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgaWYgKHByZXZFdmVudCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICBwcmV2RXZlbnQgPSB7XG5cdCAgICAgICAgICAgICAgICAndmFsdWUnOiB0aGlzLl9pbml0aWFsVmFsdWUsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IDBcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hcHByb3ggMTAgc2VnbWVudHMgcGVyIHNlY29uZFxuXHQgICAgICAgIHZhciBzZWdtZW50cyA9IE1hdGgucm91bmQoTWF0aC5tYXgoKHRpbWUgLSBwcmV2RXZlbnQudGltZSkgKiAxMCwgMSkpO1xuXHQgICAgICAgIHZhciBzZWdtZW50RHVyID0gKHRpbWUgLSBwcmV2RXZlbnQudGltZSkgLyBzZWdtZW50cztcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBzZWdtZW50czsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBzZWdUaW1lID0gc2VnbWVudER1ciAqIGkgKyBwcmV2RXZlbnQudGltZTtcblx0ICAgICAgICAgICAgdmFyIHJhbXBWYWwgPSB0aGlzLl9leHBvbmVudGlhbEludGVycG9sYXRlKHByZXZFdmVudC50aW1lLCBwcmV2RXZlbnQudmFsdWUsIHRpbWUsIHZhbHVlLCBzZWdUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh0aGlzLl90b1VuaXRzKHJhbXBWYWwpLCBzZWdUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgdGljayB2YWx1ZSBhdCB0aGUgdGltZS4gVGFrZXMgaW50byBhY2NvdW50XG5cdFx0ICogYW55IGF1dG9tYXRpb24gY3VydmVzIHNjaGVkdWxlZCBvbiB0aGUgc2lnbmFsLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBUaGUgdGltZSB0byBnZXQgdGhlIHRpY2sgY291bnQgYXRcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgICBUaGUgbnVtYmVyIG9mIHRpY2tzIHdoaWNoIGhhdmUgZWxhcHNlZCBhdCB0aGUgdGltZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBhbnkgYXV0b21hdGlvbnMuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLl9nZXRUaWNrc1VudGlsRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIHRpbWUpIHtcblx0ICAgICAgICBpZiAoZXZlbnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSB7XG5cdCAgICAgICAgICAgICAgICAndGlja3MnOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3RpbWUnOiAwXG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzVW5kZWYoZXZlbnQudGlja3MpKSB7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gdGhpcy5fZXZlbnRzLnByZXZpb3VzRXZlbnQoZXZlbnQpO1xuXHQgICAgICAgICAgICBldmVudC50aWNrcyA9IHRoaXMuX2dldFRpY2tzVW50aWxFdmVudChwcmV2aW91c0V2ZW50LCBldmVudC50aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHZhbDAgPSB0aGlzLmdldFZhbHVlQXRUaW1lKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgIHZhciB2YWwxID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICAvL2lmIGl0J3MgcmlnaHQgb24gdGhlIGxpbmUsIHRha2UgdGhlIHByZXZpb3VzIHZhbHVlXG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5nZXQodGltZSkudGltZSA9PT0gdGltZSAmJiB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuU2V0VmFsdWUpIHtcblx0ICAgICAgICAgICAgdmFsMSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSAtIHRoaXMuc2FtcGxlVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAwLjUgKiAodGltZSAtIGV2ZW50LnRpbWUpICogKHZhbDAgKyB2YWwxKSArIGV2ZW50LnRpY2tzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIHRpY2sgdmFsdWUgYXQgdGhlIHRpbWUuIFRha2VzIGludG8gYWNjb3VudFxuXHRcdCAqIGFueSBhdXRvbWF0aW9uIGN1cnZlcyBzY2hlZHVsZWQgb24gdGhlIHNpZ25hbC5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIGdldCB0aGUgdGljayBjb3VudCBhdFxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgIFRoZSBudW1iZXIgb2YgdGlja3Mgd2hpY2ggaGF2ZSBlbGFwc2VkIGF0IHRoZSB0aW1lXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGFueSBhdXRvbWF0aW9ucy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZ2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLl9nZXRUaWNrc1VudGlsRXZlbnQoZXZlbnQsIHRpbWUpLCAwKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgbnVtYmVyIG9mIHRpY2tzIGZyb20gdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0ge1RpY2tzfSB0aWNrcyBUaGUgbnVtYmVyIG9mIHRpY2tzIHRvIGNhbGN1bGF0ZVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gZ2V0IHRoZSBuZXh0IHRpY2sgZnJvbVxuXHRcdCAqIEByZXR1cm4ge1NlY29uZHN9IFRoZSBkdXJhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIHRpY2tzIGZyb20gdGhlIGdpdmVuIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5nZXREdXJhdGlvbk9mVGlja3MgPSBmdW5jdGlvbiAodGlja3MsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRUaWNrID0gdGhpcy5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5nZXRUaW1lT2ZUaWNrKGN1cnJlbnRUaWNrICsgdGlja3MpIC0gdGltZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHaXZlbiBhIHRpY2ssIHJldHVybnMgdGhlIHRpbWUgdGhhdCB0aWNrIG9jY3VycyBhdC5cblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja1xuXHRcdCAqIEByZXR1cm4ge1RpbWV9ICAgICAgVGhlIHRpbWUgdGhhdCB0aGUgdGljayBvY2N1cnMuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmdldFRpbWVPZlRpY2sgPSBmdW5jdGlvbiAodGljaykge1xuXHQgICAgICAgIHZhciBiZWZvcmUgPSB0aGlzLl9ldmVudHMuZ2V0KHRpY2ssICd0aWNrcycpO1xuXHQgICAgICAgIHZhciBhZnRlciA9IHRoaXMuX2V2ZW50cy5nZXRBZnRlcih0aWNrLCAndGlja3MnKTtcblx0ICAgICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aWNrcyA9PT0gdGljaykge1xuXHQgICAgICAgICAgICByZXR1cm4gYmVmb3JlLnRpbWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUgJiYgYWZ0ZXIgJiYgYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIgJiYgYmVmb3JlLnZhbHVlICE9PSBhZnRlci52YWx1ZSkge1xuXHQgICAgICAgICAgICB2YXIgdmFsMCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoYmVmb3JlLnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgdmFsMSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoYWZ0ZXIudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBkZWx0YSA9ICh2YWwxIC0gdmFsMCkgLyAoYWZ0ZXIudGltZSAtIGJlZm9yZS50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGsgPSBNYXRoLnNxcnQoTWF0aC5wb3codmFsMCwgMikgLSAyICogZGVsdGEgKiAoYmVmb3JlLnRpY2tzIC0gdGljaykpO1xuXHQgICAgICAgICAgICB2YXIgc29sMSA9ICgtdmFsMCArIGspIC8gZGVsdGE7XG5cdCAgICAgICAgICAgIHZhciBzb2wyID0gKC12YWwwIC0gaykgLyBkZWx0YTtcblx0ICAgICAgICAgICAgcmV0dXJuIChzb2wxID4gMCA/IHNvbDEgOiBzb2wyKSArIGJlZm9yZS50aW1lO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYmVmb3JlKSB7XG5cdCAgICAgICAgICAgIGlmIChiZWZvcmUudmFsdWUgPT09IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBiZWZvcmUudGltZSArICh0aWNrIC0gYmVmb3JlLnRpY2tzKSAvIGJlZm9yZS52YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aWNrIC8gdGhpcy5faW5pdGlhbFZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDb252ZXJ0IHNvbWUgbnVtYmVyIG9mIHRpY2tzIHRoZWlyIHRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIGFjY291bnRpbmdcblx0XHQgKiBmb3IgYW55IGF1dG9tYXRpb24gY3VydmVzIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgbnVtYmVyIG9mIHRpY2tzIHRvIGNvbnZlcnQgdG8gc2Vjb25kcy5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBbd2hlbj1ub3ddICBXaGVuIGFsb25nIHRoZSBhdXRvbWF0aW9uIHRpbWVsaW5lIHRvIGNvbnZlcnQgdGhlIHRpY2tzLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVGltZX0gICAgICAgVGhlIGR1cmF0aW9uIGluIHNlY29uZHMgb2YgdGhlIHRpY2tzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS50aWNrc1RvVGltZSA9IGZ1bmN0aW9uICh0aWNrcywgd2hlbikge1xuXHQgICAgICAgIHdoZW4gPSB0aGlzLnRvU2Vjb25kcyh3aGVuKTtcblx0ICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZSh0aGlzLmdldER1cmF0aW9uT2ZUaWNrcyh0aWNrcywgd2hlbikpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBpbnZlcnNlIG9mIFt0aWNrc1RvVGltZV0oI3RpY2tzdG90aW1lKS4gQ29udmVydCBhIGR1cmF0aW9uIGluXG5cdFx0ICogc2Vjb25kcyB0byB0aGUgY29ycmVzcG9uZGluZyBudW1iZXIgb2YgdGlja3MgYWNjb3VudGluZyBmb3IgYW55XG5cdFx0ICogYXV0b21hdGlvbiBjdXJ2ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gZHVyYXRpb24gVGhlIHRpbWUgaW50ZXJ2YWwgdG8gY29udmVydCB0byB0aWNrcy5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBbd2hlbj1ub3ddICAgICBXaGVuIGFsb25nIHRoZSBhdXRvbWF0aW9uIHRpbWVsaW5lIHRvIGNvbnZlcnQgdGhlIHRpY2tzLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVGlja3N9ICAgICAgICAgIFRoZSBkdXJhdGlvbiBpbiB0aWNrcy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUudGltZVRvVGlja3MgPSBmdW5jdGlvbiAoZHVyYXRpb24sIHdoZW4pIHtcblx0ICAgICAgICB3aGVuID0gdGhpcy50b1NlY29uZHMod2hlbik7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGlja3MgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHdoZW4pO1xuXHQgICAgICAgIHZhciBlbmRUaWNrcyA9IHRoaXMuZ2V0VGlja3NBdFRpbWUod2hlbiArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGlja3MoZW5kVGlja3MgLSBzdGFydFRpY2tzKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaWNrU2lnbmFsO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgVGltZWxpbmUgU3RhdGUuIFByb3ZpZGVzIHRoZSBtZXRob2RzOiA8Y29kZT5zZXRTdGF0ZUF0VGltZShcInN0YXRlXCIsIHRpbWUpPC9jb2RlPlxuXHRcdCAqICAgICAgICAgIGFuZCA8Y29kZT5nZXRWYWx1ZUF0VGltZSh0aW1lKTwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZWxpbmV9XG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSBpbml0aWFsIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBUaW1lbGluZVN0YXRlLiBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gPGNvZGU+dW5kZWZpbmVkPC9jb2RlPlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlID0gZnVuY3Rpb24gKGluaXRpYWwpIHtcblx0ICAgICAgICBUb25lLlRpbWVsaW5lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGluaXRpYWwgc3RhdGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbml0aWFsID0gaW5pdGlhbDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpbWVsaW5lU3RhdGUsIFRvbmUuVGltZWxpbmUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHNjaGVkdWxlZCBzdGF0ZSBzY2hlZHVsZWQgYmVmb3JlIG9yIGF0XG5cdFx0ICogIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybiAge1N0cmluZ30gIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBpbnB1dCBpbiBzZXRTdGF0ZUF0VGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciBldmVudCA9IHRoaXMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIGlmIChldmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gZXZlbnQuc3RhdGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRpYWw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBzdGF0ZSB0byB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHN0YXRlIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSB0byBzZXQuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZVN0YXRlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUucHJvdG90eXBlLnNldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHN0YXRlLCB0aW1lKSB7XG5cdCAgICAgICAgLy9hbGwgc3RhdGUgY2hhbmdlcyBuZWVkIHRvIGJlID49IHRoZSBwcmV2aW91cyBzdGF0ZSB0aW1lXG5cdCAgICAgICAgLy9UT0RPIHRocm93IGVycm9yIGlmIHRpbWUgPCB0aGUgcHJldmlvdXMgZXZlbnQgdGltZVxuXHQgICAgICAgIHRoaXMuYWRkKHtcblx0ICAgICAgICAgICAgJ3N0YXRlJzogc3RhdGUsXG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGV2ZW50IGJlZm9yZSB0aGUgdGltZSB3aXRoIHRoZSBnaXZlbiBzdGF0ZVxuXHRcdCAqICBAcGFyYW0ge1RvbmUuU3RhdGV9IHN0YXRlIFRoZSBzdGF0ZSB0byBsb29rIGZvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBjaGVjayBiZWZvcmVcdFx0XHRcblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIFRoZSBldmVudCB3aXRoIHRoZSBnaXZlbiBzdGF0ZSBiZWZvcmUgdGhlIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuZ2V0TGFzdFN0YXRlID0gZnVuY3Rpb24gKHN0YXRlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3RpbWVsaW5lW2ldO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IHN0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZXZlbnQgYWZ0ZXIgdGhlIHRpbWUgd2l0aCB0aGUgZ2l2ZW4gc3RhdGVcblx0XHQgKiAgQHBhcmFtIHtUb25lLlN0YXRlfSBzdGF0ZSBUaGUgc3RhdGUgdG8gbG9vayBmb3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gY2hlY2sgZnJvbVxuXHRcdCAqICBAcmV0dXJuICB7T2JqZWN0fSAgVGhlIGV2ZW50IHdpdGggdGhlIGdpdmVuIHN0YXRlIGFmdGVyIHRoZSB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUucHJvdG90eXBlLmdldE5leHRTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPCB0aGlzLl90aW1lbGluZS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fdGltZWxpbmVbaV07XG5cdCAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IHN0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpbWVsaW5lU3RhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVXNlcyBbVG9uZS5UaWNrU2lnbmFsXShUaWNrU2lnbmFsKSB0byB0cmFjayBlbGFwc2VkIHRpY2tzIHdpdGhcblx0XHQgKiAgXHRcdGNvbXBsZXggYXV0b21hdGlvbiBjdXJ2ZXMuXG5cdFx0ICpcblx0XHQgKiBcdEBjb25zdHJ1Y3RvclxuXHQgICAgICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIGluaXRpYWwgZnJlcXVlbmN5IHRoYXQgdGhlIHNpZ25hbCB0aWNrcyBhdFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZyZXF1ZW5jeSddLCBUb25lLlRpY2tTb3VyY2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBiZSBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlICB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuVGlja1NpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzdGF0ZSB0aW1lbGluZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgb2Zmc2V0IHZhbHVlcyBvZiB0aGUgdGlja3Ncblx0XHRcdCAqIEB0eXBlIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgIC8vYWRkIHRoZSBmaXJzdCBldmVudFxuXHQgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUoMCwgMCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaWNrU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLmRlZmF1bHRzID0geyAnZnJlcXVlbmN5JzogMSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiwgXCJzdG9wcGVkXCIgb3IgXCJwYXVzZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaWNrU291cmNlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBjbG9jayBhdCB0aGUgZ2l2ZW4gdGltZS4gT3B0aW9uYWxseSBwYXNzIGluIGFuIG9mZnNldFxuXHRcdCAqICBvZiB3aGVyZSB0byBzdGFydCB0aGUgdGljayBjb3VudGVyIGZyb20uXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgdGltZSAgICBUaGUgdGltZSB0aGUgY2xvY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7VGlja3M9MH0gb2Zmc2V0IFRoZSBudW1iZXIgb2YgdGlja3MgdG8gc3RhcnQgdGhlIHNvdXJjZSBhdFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5UaWNrU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKG9mZnNldCkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUob2Zmc2V0LCB0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgY2xvY2suIFN0b3BwaW5nIHRoZSBjbG9jayByZXNldHMgdGhlIHRpY2sgY291bnRlciB0byAwLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBjbG9jay5zdG9wKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL2NhbmNlbCB0aGUgcHJldmlvdXMgc3RvcFxuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3N0YXRlLmdldCh0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LnRpbWUgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmNhbmNlbChldmVudC50aW1lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbChldmVudC50aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXVzZSB0aGUgY2xvY2suIFBhdXNpbmcgZG9lcyBub3QgcmVzZXQgdGhlIHRpY2sgY291bnRlci5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5QYXVzZWQsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIHN0YXJ0L3N0b3AvcGF1c2UgYW5kIHNldFRpY2tBdFRpbWUgZXZlbnRzIHNjaGVkdWxlZCBhZnRlciB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdG8gY2xlYXIgdGhlIGV2ZW50cyBhZnRlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaWNrU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGVsYXBzZWQgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIGdldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgVGhlIG51bWJlciBvZiB0aWNrc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBzdG9wRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXRMYXN0U3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICAvL3RoaXMgZXZlbnQgYWxsb3dzIGZvckVhY2hCZXR3ZWVuIHRvIGl0ZXJhdGUgdW50aWwgdGhlIGN1cnJlbnQgdGltZVxuXHQgICAgICAgIHZhciB0bXBFdmVudCA9IHtcblx0ICAgICAgICAgICAgc3RhdGU6IFRvbmUuU3RhdGUuUGF1c2VkLFxuXHQgICAgICAgICAgICB0aW1lOiB0aW1lXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5hZGQodG1wRXZlbnQpO1xuXHQgICAgICAgIC8va2VlcCB0cmFjayBvZiB0aGUgcHJldmlvdXMgb2Zmc2V0IGV2ZW50XG5cdCAgICAgICAgdmFyIGxhc3RTdGF0ZSA9IHN0b3BFdmVudDtcblx0ICAgICAgICB2YXIgZWxhcHNlZFRpY2tzID0gMDtcblx0ICAgICAgICAvL2l0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIGV2ZW50cyBzaW5jZSB0aGUgbGFzdCBzdG9wXG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RvcEV2ZW50LnRpbWUsIHRpbWUgKyB0aGlzLnNhbXBsZVRpbWUsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIHZhciBwZXJpb2RTdGFydFRpbWUgPSBsYXN0U3RhdGUudGltZTtcblx0ICAgICAgICAgICAgLy9pZiB0aGVyZSBpcyBhbiBvZmZzZXQgZXZlbnQgaW4gdGhpcyBwZXJpb2QgdXNlIHRoYXRcblx0ICAgICAgICAgICAgdmFyIG9mZnNldEV2ZW50ID0gdGhpcy5fdGlja09mZnNldC5nZXQoZS50aW1lKTtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldEV2ZW50LnRpbWUgPj0gbGFzdFN0YXRlLnRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRUaWNrcyA9IG9mZnNldEV2ZW50LnRpY2tzO1xuXHQgICAgICAgICAgICAgICAgcGVyaW9kU3RhcnRUaW1lID0gb2Zmc2V0RXZlbnQudGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAobGFzdFN0YXRlLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgZS5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICBlbGFwc2VkVGlja3MgKz0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUoZS50aW1lKSAtIHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKHBlcmlvZFN0YXJ0VGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbGFzdFN0YXRlID0gZTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIC8vcmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZXZlbnRcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5yZW1vdmUodG1wRXZlbnQpO1xuXHQgICAgICAgIC8vcmV0dXJuIHRoZSB0aWNrc1xuXHQgICAgICAgIHJldHVybiBlbGFwc2VkVGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkLiBTdGFydHMgY291bnRpbmcgYXQgMFxuXHRcdCAqICBhbmQgaW5jcmVtZW50cyBhZnRlciB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuIFJldHVybnMgLTEgd2hlbiBzdG9wcGVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaWNrU291cmNlI1xuXHRcdCAqICBAbmFtZSB0aWNrc1xuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZSwgJ3RpY2tzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUaWNrc0F0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSh0LCB0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSBzaW5jZSB0aWNrcz0wIHRoYXQgdGhlIFRpY2tTb3VyY2UgaGFzIGJlZW4gcnVubmluZy4gQWNjb3VudHNcblx0XHQgKiAgZm9yIHRlbXBvIGN1cnZlc1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UaWNrU291cmNlI1xuXHRcdCAqICBAbmFtZSBzZWNvbmRzXG5cdFx0ICogIEB0eXBlIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUsICdzZWNvbmRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWNvbmRzQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocykge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5mcmVxdWVuY3kudGltZVRvVGlja3Mocywgbm93KTtcblx0ICAgICAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSh0aWNrcywgbm93KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGVsYXBzZWQgc2Vjb25kcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSBlbGFwc2VkIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9ICBUaGUgbnVtYmVyIG9mIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRTZWNvbmRzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIHN0b3BFdmVudCA9IHRoaXMuX3N0YXRlLmdldExhc3RTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIC8vdGhpcyBldmVudCBhbGxvd3MgZm9yRWFjaEJldHdlZW4gdG8gaXRlcmF0ZSB1bnRpbCB0aGUgY3VycmVudCB0aW1lXG5cdCAgICAgICAgdmFyIHRtcEV2ZW50ID0ge1xuXHQgICAgICAgICAgICBzdGF0ZTogVG9uZS5TdGF0ZS5QYXVzZWQsXG5cdCAgICAgICAgICAgIHRpbWU6IHRpbWVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9rZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBvZmZzZXQgZXZlbnRcblx0ICAgICAgICB2YXIgbGFzdFN0YXRlID0gc3RvcEV2ZW50O1xuXHQgICAgICAgIHZhciBlbGFwc2VkU2Vjb25kcyA9IDA7XG5cdCAgICAgICAgLy9pdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBldmVudHMgc2luY2UgdGhlIGxhc3Qgc3RvcFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hCZXR3ZWVuKHN0b3BFdmVudC50aW1lLCB0aW1lICsgdGhpcy5zYW1wbGVUaW1lLCBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICB2YXIgcGVyaW9kU3RhcnRUaW1lID0gbGFzdFN0YXRlLnRpbWU7XG5cdCAgICAgICAgICAgIC8vaWYgdGhlcmUgaXMgYW4gb2Zmc2V0IGV2ZW50IGluIHRoaXMgcGVyaW9kIHVzZSB0aGF0XG5cdCAgICAgICAgICAgIHZhciBvZmZzZXRFdmVudCA9IHRoaXMuX3RpY2tPZmZzZXQuZ2V0KGUudGltZSk7XG5cdCAgICAgICAgICAgIGlmIChvZmZzZXRFdmVudC50aW1lID49IGxhc3RTdGF0ZS50aW1lKSB7XG5cdCAgICAgICAgICAgICAgICBlbGFwc2VkU2Vjb25kcyA9IG9mZnNldEV2ZW50LnNlY29uZHM7XG5cdCAgICAgICAgICAgICAgICBwZXJpb2RTdGFydFRpbWUgPSBvZmZzZXRFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChsYXN0U3RhdGUuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBlLnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRTZWNvbmRzICs9IGUudGltZSAtIHBlcmlvZFN0YXJ0VGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBsYXN0U3RhdGUgPSBlO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIHRlbXBvcmFyeSBldmVudFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLnJlbW92ZSh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIHRpY2tzXG5cdCAgICAgICAgcmV0dXJuIGVsYXBzZWRTZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFNldCB0aGUgY2xvY2sncyB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgdmFsdWUgdG8gc2V0XG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBzZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRpY2tTb3VyY2V9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuc2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGlja3MsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldC5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldC5hZGQoe1xuXHQgICAgICAgICAgICAndGltZSc6IHRpbWUsXG5cdCAgICAgICAgICAgICd0aWNrcyc6IHRpY2tzLFxuXHQgICAgICAgICAgICAnc2Vjb25kcyc6IHRoaXMuZnJlcXVlbmN5LmdldER1cmF0aW9uT2ZUaWNrcyh0aWNrcywgdGltZSlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgc2NoZWR1bGVkIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm4gIHtTdHJpbmd9ICBUaGUgbmFtZSBvZiB0aGUgc3RhdGUgaW5wdXQgaW4gc2V0U3RhdGVBdFRpbWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0YXJ0KFwiKzAuMVwiKTtcblx0XHQgKiBzb3VyY2UuZ2V0U3RhdGVBdFRpbWUoXCIrMC4xXCIpOyAvL3JldHVybnMgXCJzdGFydGVkXCJcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSB0aW1lIG9mIHRoZSBnaXZlbiB0aWNrLiBUaGUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ICogaXMgd2hlbiB0byB0ZXN0IGJlZm9yZS4gU2luY2UgdGlja3MgY2FuIGJlIHNldCAod2l0aCBzZXRUaWNrc0F0VGltZSlcblx0XHQgKiB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgdGltZXMgZm9yIGEgZ2l2ZW4gdGljayB2YWx1ZS4gXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIG51bWJlci5cblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gYmVmb3JlIFdoZW4gdG8gbWVhc3VyZSB0aGUgdGljayB2YWx1ZSBmcm9tLiBcblx0XHQgKiBAcmV0dXJuIHtUaW1lfSAgICAgICBUaGUgdGltZSBvZiB0aGUgdGlja1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRUaW1lT2ZUaWNrID0gZnVuY3Rpb24gKHRpY2ssIGJlZm9yZSkge1xuXHQgICAgICAgIGJlZm9yZSA9IFRvbmUuZGVmYXVsdEFyZyhiZWZvcmUsIHRoaXMubm93KCkpO1xuXHQgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl90aWNrT2Zmc2V0LmdldChiZWZvcmUpO1xuXHQgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3N0YXRlLmdldChiZWZvcmUpO1xuXHQgICAgICAgIHZhciBzdGFydFRpbWUgPSBNYXRoLm1heChvZmZzZXQudGltZSwgZXZlbnQudGltZSk7XG5cdCAgICAgICAgdmFyIGFic29sdXRlVGlja3MgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShzdGFydFRpbWUpICsgdGljayAtIG9mZnNldC50aWNrcztcblx0ICAgICAgICByZXR1cm4gdGhpcy5mcmVxdWVuY3kuZ2V0VGltZU9mVGljayhhYnNvbHV0ZVRpY2tzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW52b2tlIHRoZSBjYWxsYmFjayBldmVudCBhdCBhbGwgc2NoZWR1bGVkIHRpY2tzIGJldHdlZW4gdGhlIFxuXHRcdCAqICBzdGFydCB0aW1lIGFuZCB0aGUgZW5kIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgc3RhcnRUaW1lICBUaGUgYmVnaW5uaW5nIG9mIHRoZSBzZWFyY2ggcmFuZ2Vcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgZW5kVGltZSAgICBUaGUgZW5kIG9mIHRoZSBzZWFyY2ggcmFuZ2Vcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb248VGltZSxUaWNrcz59ICBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBlYWNoIHRpY2tcblx0XHQgKiAgQHJldHVybiAge1RvbmUuVGlja1NvdXJjZX0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5mb3JFYWNoVGlja0JldHdlZW4gPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vb25seSBpdGVyYXRlIHRocm91Z2ggdGhlIHNlY3Rpb25zIHdoZXJlIGl0IGlzIFwic3RhcnRlZFwiXG5cdCAgICAgICAgdmFyIGxhc3RTdGF0ZUV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RhcnRUaW1lLCBlbmRUaW1lLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKGxhc3RTdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgZXZlbnQuc3RhdGUgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5mb3JFYWNoVGlja0JldHdlZW4oTWF0aC5tYXgobGFzdFN0YXRlRXZlbnQudGltZSwgc3RhcnRUaW1lKSwgZXZlbnQudGltZSAtIHRoaXMuc2FtcGxlVGltZSwgY2FsbGJhY2spO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGxhc3RTdGF0ZUV2ZW50ID0gZXZlbnQ7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICBzdGFydFRpbWUgPSBNYXRoLm1heChsYXN0U3RhdGVFdmVudC50aW1lLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIGlmIChsYXN0U3RhdGVFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIHRoaXMuX3N0YXRlKSB7XG5cdCAgICAgICAgICAgIC8vZmlndXJlIG91dCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBmcmVxdWVuY3kgdGlja3MgYW5kIHRoZSBcblx0ICAgICAgICAgICAgdmFyIHN0YXJ0VGlja3MgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3NBdFN0YXJ0ID0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUobGFzdFN0YXRlRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgIHZhciBkaWZmID0gc3RhcnRUaWNrcyAtIHRpY2tzQXRTdGFydDtcblx0ICAgICAgICAgICAgdmFyIG9mZnNldCA9IGRpZmYgJSAxO1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSAxIC0gb2Zmc2V0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBuZXh0VGlja1RpbWUgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaW1lT2ZUaWNrKHN0YXJ0VGlja3MgKyBvZmZzZXQpO1xuXHQgICAgICAgICAgICB2YXIgZXJyb3IgPSBudWxsO1xuXHQgICAgICAgICAgICB3aGlsZSAobmV4dFRpY2tUaW1lIDwgZW5kVGltZSAmJiB0aGlzLl9zdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXh0VGlja1RpbWUsIE1hdGgucm91bmQodGhpcy5nZXRUaWNrc0F0VGltZShuZXh0VGlja1RpbWUpKSk7XG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tUaW1lICs9IHRoaXMuZnJlcXVlbmN5LmdldER1cmF0aW9uT2ZUaWNrcygxLCBuZXh0VGlja1RpbWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChlcnJvcikge1xuXHQgICAgICAgICAgICB0aHJvdyBlcnJvcjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaWNrU291cmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc2FtcGxlIGFjY3VyYXRlIGNsb2NrIHdoaWNoIHByb3ZpZGVzIGEgY2FsbGJhY2sgYXQgdGhlIGdpdmVuIHJhdGUuXG5cdFx0ICogICAgICAgICAgV2hpbGUgdGhlIGNhbGxiYWNrIGlzIG5vdCBzYW1wbGUtYWNjdXJhdGUgKGl0IGlzIHN0aWxsIHN1c2NlcHRpYmxlIHRvXG5cdFx0ICogICAgICAgICAgbG9vc2UgSlMgdGltaW5nKSwgdGhlIHRpbWUgcGFzc2VkIGluIGFzIHRoZSBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2tcblx0XHQgKiAgICAgICAgICBpcyBwcmVjaXNlLiBGb3IgbW9zdCBhcHBsaWNhdGlvbnMsIGl0IGlzIGJldHRlciB0byB1c2UgVG9uZS5UcmFuc3BvcnRcblx0XHQgKiAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBDbG9jayBieSBpdHNlbGYgc2luY2UgeW91IGNhbiBzeW5jaHJvbml6ZSBtdWx0aXBsZSBjYWxsYmFja3MuXG5cdFx0ICpcblx0XHQgKiBcdEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqIFx0QHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2l0aCB0aGUgdGltZSBvZiB0aGUgYXVkaW8gZXZlbnRcblx0XHQgKiBcdEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHJhdGUgb2YgdGhlIGNhbGxiYWNrXG5cdFx0ICogXHRAZXhhbXBsZVxuXHRcdCAqIC8vdGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBhcHByb3hpbWF0ZWx5IG9uY2UgYSBzZWNvbmRcblx0XHQgKiAvL2FuZCB3aWxsIHByaW50IHRoZSB0aW1lIGV4YWN0bHkgb25jZSBhIHNlY29uZCBhcGFydC5cblx0XHQgKiB2YXIgY2xvY2sgPSBuZXcgVG9uZS5DbG9jayhmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKHRpbWUpO1xuXHRcdCAqIH0sIDEpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5DbG9jayk7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGludm9rZSBhdCB0aGUgc2NoZWR1bGVkIHRpY2suXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBuZXh0IHRpbWUgdGhlIGNhbGxiYWNrIGlzIHNjaGVkdWxlZC5cblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpY2sgY291bnRlclxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5UaWNrU291cmNlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlID0gbmV3IFRvbmUuVGlja1NvdXJjZShvcHRpb25zLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxhc3QgdGltZSB0aGUgbG9vcCBjYWxsYmFjayB3YXMgaW52b2tlZFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xhc3RVcGRhdGUgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByYXRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBzaG91bGQgYmUgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSAge0JQTX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX3RpY2tTb3VyY2UuZnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdmcmVxdWVuY3knKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3RhdGUgdGltZWxpbmVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZVN0YXRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG5ldyBUb25lLlRpbWVsaW5lU3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkKTtcblx0ICAgICAgICAvL2FkZCBhbiBpbml0aWFsIHN0YXRlXG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbG9vcCBmdW5jdGlvbiBib3VuZCB0byBpdHMgY29udGV4dC5cblx0XHRcdCAqICBUaGlzIGlzIG5lY2Vzc2FyeSB0byByZW1vdmUgdGhlIGV2ZW50IGluIHRoZSBlbmQuXG5cdFx0XHQgKiAgQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ib3VuZExvb3AgPSB0aGlzLl9sb29wLmJpbmQodGhpcyk7XG5cdCAgICAgICAgLy9iaW5kIGEgY2FsbGJhY2sgdG8gdGhlIHdvcmtlciB0aHJlYWRcblx0ICAgICAgICB0aGlzLmNvbnRleHQub24oJ3RpY2snLCB0aGlzLl9ib3VuZExvb3ApO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ2xvY2ssIFRvbmUuRW1pdHRlcik7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2suZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdmcmVxdWVuY3knOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiwgXCJzdG9wcGVkXCIgb3IgXCJwYXVzZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DbG9jayNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNsb2NrLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGNsb2NrIGF0IHRoZSBnaXZlbiB0aW1lLiBPcHRpb25hbGx5IHBhc3MgaW4gYW4gb2Zmc2V0XG5cdFx0ICogIG9mIHdoZXJlIHRvIHN0YXJ0IHRoZSB0aWNrIGNvdW50ZXIgZnJvbS5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICB0aW1lICAgIFRoZSB0aW1lIHRoZSBjbG9jayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtICB7VGlja3M9fSAgb2Zmc2V0ICBXaGVyZSB0aGUgdGljayBjb3VudGVyIHN0YXJ0cyBjb3VudGluZyBmcm9tLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5DbG9ja30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLnN0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgICAgIGlmICh0aW1lIDwgdGhpcy5fbGFzdFVwZGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGNsb2NrLiBTdG9wcGluZyB0aGUgY2xvY2sgcmVzZXRzIHRoZSB0aWNrIGNvdW50ZXIgdG8gMC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DbG9ja30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGNsb2NrLnN0b3AoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlLnN0b3AodGltZSk7XG5cdCAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9sYXN0VXBkYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RvcCcsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGF1c2UgdGhlIGNsb2NrLiBQYXVzaW5nIGRvZXMgbm90IHJlc2V0IHRoZSB0aWNrIGNvdW50ZXIuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBjbG9jayBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2xvY2t9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5QYXVzZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLnBhdXNlKHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGltZSA8IHRoaXMuX2xhc3RVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncGF1c2UnLCB0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuIFN0YXJ0cyBjb3VudGluZyBhdCAwXG5cdFx0ICogIGFuZCBpbmNyZW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC5cblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2xvY2sucHJvdG90eXBlLCAndGlja3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5nZXRUaWNrc0F0VGltZSh0aGlzLm5vdygpKSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UudGlja3MgPSB0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHNpbmNlIHRpY2tzPTAgdGhhdCB0aGUgQ2xvY2sgaGFzIGJlZW4gcnVubmluZy4gQWNjb3VudHNcblx0XHQgKiAgZm9yIHRlbXBvIGN1cnZlc1xuXHRcdCAqICBAdHlwZSB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNsb2NrLnByb3RvdHlwZSwgJ3NlY29uZHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLnNlY29uZHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc2Vjb25kcyA9IHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBlbGFwc2VkIHNlY29uZHMgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGdldCB0aGUgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfSAgVGhlIG51bWJlciBvZiBlbGFwc2VkIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLmdldFNlY29uZHNBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLmdldFNlY29uZHNBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgdGljayB2YWx1ZSB0byBzZXRcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIHNldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuQ2xvY2t9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLnNldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpY2tzLCB0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5zZXRUaWNrc0F0VGltZSh0aWNrcywgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgIFRoZSB0aWNrIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZ2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgdGltZSBvZiB0aGUgbmV4dCB0aWNrXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIG51bWJlci5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBiZWZvcmUgXG5cdFx0ICogQHJldHVybiB7VG9uZS5DbG9ja30gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUubmV4dFRpY2tUaW1lID0gZnVuY3Rpb24gKG9mZnNldCwgd2hlbikge1xuXHQgICAgICAgIHdoZW4gPSB0aGlzLnRvU2Vjb25kcyh3aGVuKTtcblx0ICAgICAgICB2YXIgY3VycmVudFRpY2sgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHdoZW4pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aWNrU291cmNlLmdldFRpbWVPZlRpY2soY3VycmVudFRpY2sgKyBvZmZzZXQsIHdoZW4pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2NoZWR1bGluZyBsb29wLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuX2xvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHRoaXMuX2xhc3RVcGRhdGU7XG5cdCAgICAgICAgdmFyIGVuZFRpbWUgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHRoaXMuX2xhc3RVcGRhdGUgPSBlbmRUaW1lO1xuXHQgICAgICAgIGlmIChzdGFydFRpbWUgIT09IGVuZFRpbWUpIHtcblx0ICAgICAgICAgICAgLy90aGUgc3RhdGUgY2hhbmdlIGV2ZW50c1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdGFydFRpbWUsIGVuZFRpbWUsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgICAgICBzd2l0Y2ggKGUuc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgVG9uZS5TdGF0ZS5TdGFydGVkOlxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl90aWNrU291cmNlLmdldFRpY2tzQXRUaW1lKGUudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIGUudGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgVG9uZS5TdGF0ZS5TdG9wcGVkOlxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChlLnRpbWUgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgZS50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlIFRvbmUuU3RhdGUuUGF1c2VkOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncGF1c2UnLCBlLnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgICAgICAvL3RoZSB0aWNrIGNhbGxiYWNrc1xuXHQgICAgICAgICAgICB0aGlzLl90aWNrU291cmNlLmZvckVhY2hUaWNrQmV0d2VlbihzdGFydFRpbWUsIGVuZFRpbWUsIGZ1bmN0aW9uICh0aW1lLCB0aWNrcykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB0aWNrcyk7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBzY2hlZHVsZWQgc3RhdGUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybiAge1N0cmluZ30gIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBpbnB1dCBpbiBzZXRTdGF0ZUF0VGltZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBjbG9jay5zdGFydChcIiswLjFcIik7XG5cdFx0ICogY2xvY2suZ2V0U3RhdGVBdFRpbWUoXCIrMC4xXCIpOyAvL3JldHVybnMgXCJzdGFydGVkXCJcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2xvY2sucHJvdG90eXBlLmdldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DbG9ja30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQub2ZmKCd0aWNrJywgdGhpcy5fYm91bmRMb29wKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGlja1NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2JvdW5kTG9vcCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSBJbmZpbml0eTtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNsb2NrO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU2ltaWxhciB0byBUb25lLlRpbWVsaW5lLCBidXQgYWxsIGV2ZW50cyByZXByZXNlbnRcblx0XHQgKiAgICAgICAgIGludGVydmFscyB3aXRoIGJvdGggXCJ0aW1lXCIgYW5kIFwiZHVyYXRpb25cIiB0aW1lcy4gVGhlXG5cdFx0ICogICAgICAgICBldmVudHMgYXJlIHBsYWNlZCBpbiBhIHRyZWUgc3RydWN0dXJlIG9wdGltaXplZFxuXHRcdCAqICAgICAgICAgZm9yIHF1ZXJ5aW5nIGFuIGludGVyc2VjdGlvbiBwb2ludCB3aXRoIHRoZSB0aW1lbGluZVxuXHRcdCAqICAgICAgICAgZXZlbnRzLiBJbnRlcm5hbGx5IHVzZXMgYW4gW0ludGVydmFsIFRyZWVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ludGVydmFsX3RyZWUpXG5cdFx0ICogICAgICAgICB0byByZXByZXNlbnQgdGhlIGRhdGEuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcm9vdCBub2RlIG9mIHRoZSBpbnRldmFsIHRyZWVcblx0XHRcdCAqICBAdHlwZSAge0ludGVydmFsTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcm9vdCA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgS2VlcCB0cmFjayBvZiB0aGUgbGVuZ3RoIG9mIHRoZSB0aW1lbGluZS5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkludGVydmFsVGltZWxpbmUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBldmVudCB0byBhZGQgdG8gdGhlIHRpbWVsaW5lLiBBbGwgZXZlbnRzIG11c3Rcblx0XHQgKiAgaGF2ZSBhIHRpbWUgYW5kIGR1cmF0aW9uIHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gYWRkIHRvIHRoZSB0aW1lbGluZVxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKGV2ZW50LnRpbWUpIHx8IFRvbmUuaXNVbmRlZihldmVudC5kdXJhdGlvbikpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkludGVydmFsVGltZWxpbmU6IGV2ZW50cyBtdXN0IGhhdmUgdGltZSBhbmQgZHVyYXRpb24gcGFyYW1ldGVycycpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBldmVudC50aW1lID0gZXZlbnQudGltZS52YWx1ZU9mKCk7XG5cdCAgICAgICAgdmFyIG5vZGUgPSBuZXcgSW50ZXJ2YWxOb2RlKGV2ZW50LnRpbWUsIGV2ZW50LnRpbWUgKyBldmVudC5kdXJhdGlvbiwgZXZlbnQpO1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBub2RlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QuaW5zZXJ0KG5vZGUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9sZW5ndGgrKztcblx0ICAgICAgICAvLyBSZXN0cnVjdHVyZSB0cmVlIHRvIGJlIGJhbGFuY2VkXG5cdCAgICAgICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgbm9kZS51cGRhdGVIZWlnaHQoKTtcblx0ICAgICAgICAgICAgbm9kZS51cGRhdGVNYXgoKTtcblx0ICAgICAgICAgICAgdGhpcy5fcmViYWxhbmNlKG5vZGUpO1xuXHQgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge09iamVjdH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gcmVtb3ZlIGZyb20gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkludGVydmFsVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoKGV2ZW50LnRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBub2RlID0gcmVzdWx0c1tpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChub2RlLmV2ZW50ID09PSBldmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZU5vZGUobm9kZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGVuZ3RoLS07XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5JbnRlcnZhbFRpbWVsaW5lI1xuXHRcdCAqICBAbmFtZSBsZW5ndGhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgZXZlbnRzIHdob3NlIHRpbWUgdGltZSBpcyBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5yZW1vdmUoZXZlbnQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgcm9vdCBub2RlIGFzIHRoZSBnaXZlbiBub2RlXG5cdFx0ICogIEBwYXJhbSB7SW50ZXJ2YWxOb2RlfSBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9zZXRSb290ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB0aGlzLl9yb290ID0gbm9kZTtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yb290LnBhcmVudCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXBsYWNlIHRoZSByZWZlcmVuY2VzIHRvIHRoZSBub2RlIGluIHRoZSBub2RlJ3MgcGFyZW50XG5cdFx0ICogIHdpdGggdGhlIHJlcGxhY2VtZW50IG5vZGUuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgcmVwbGFjZW1lbnRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JlcGxhY2VOb2RlSW5QYXJlbnQgPSBmdW5jdGlvbiAobm9kZSwgcmVwbGFjZW1lbnQpIHtcblx0ICAgICAgICBpZiAobm9kZS5wYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKG5vZGUuaXNMZWZ0Q2hpbGQoKSkge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQubGVmdCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQucmlnaHQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9yZWJhbGFuY2Uobm9kZS5wYXJlbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocmVwbGFjZW1lbnQpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIHRoZSBub2RlIGZyb20gdGhlIHRyZWUgYW5kIHJlcGxhY2UgaXQgd2l0aFxuXHRcdCAqICBhIHN1Y2Nlc3NvciB3aGljaCBmb2xsb3dzIHRoZSBzY2hlbWEuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JlbW92ZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmIChub2RlLmxlZnQgPT09IG51bGwgJiYgbm9kZS5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIG51bGwpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobm9kZS5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIG5vZGUubGVmdCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlLmxlZnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmVwbGFjZU5vZGVJblBhcmVudChub2RlLCBub2RlLnJpZ2h0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgYmFsYW5jZSA9IG5vZGUuZ2V0QmFsYW5jZSgpO1xuXHQgICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQsIHRlbXA7XG5cdCAgICAgICAgICAgIGlmIChiYWxhbmNlID4gMCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKG5vZGUubGVmdC5yaWdodCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnJpZ2h0ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5sZWZ0LnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZXBsYWNlbWVudC5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5wYXJlbnQucmlnaHQgPSByZXBsYWNlbWVudC5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudC5wYXJlbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQubGVmdCA9IG5vZGUubGVmdDtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5yaWdodCA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5yaWdodC5sZWZ0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5sZWZ0ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgdGVtcCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLnJpZ2h0LmxlZnQ7XG5cdCAgICAgICAgICAgICAgICB3aGlsZSAocmVwbGFjZW1lbnQubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQubGVmdDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnBhcmVudCA9IHJlcGxhY2VtZW50LnBhcmVudDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnBhcmVudC5sZWZ0ID0gcmVwbGFjZW1lbnQucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQucGFyZW50O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQubGVmdCA9IG5vZGUubGVmdDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnJpZ2h0ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAobm9kZS5wYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChub2RlLmlzTGVmdENoaWxkKCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5sZWZ0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50LnJpZ2h0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zZXRSb290KHJlcGxhY2VtZW50KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIHJlcGxhY2VtZW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcmViYWxhbmNlKHRlbXApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBub2RlLmRpc3Bvc2UoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUm90YXRlIHRoZSB0cmVlIHRvIHRoZSBsZWZ0XG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JvdGF0ZUxlZnQgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcblx0ICAgICAgICB2YXIgaXNMZWZ0Q2hpbGQgPSBub2RlLmlzTGVmdENoaWxkKCk7XG5cdCAgICAgICAgLy8gTWFrZSBub2RlLnJpZ2h0IHRoZSBuZXcgcm9vdCBvZiB0aGlzIHN1YiB0cmVlIChpbnN0ZWFkIG9mIG5vZGUpXG5cdCAgICAgICAgdmFyIHBpdm90Tm9kZSA9IG5vZGUucmlnaHQ7XG5cdCAgICAgICAgbm9kZS5yaWdodCA9IHBpdm90Tm9kZS5sZWZ0O1xuXHQgICAgICAgIHBpdm90Tm9kZS5sZWZ0ID0gbm9kZTtcblx0ICAgICAgICBpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGlmIChpc0xlZnRDaGlsZCkge1xuXHQgICAgICAgICAgICAgICAgcGFyZW50LmxlZnQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQucmlnaHQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSb290KHBpdm90Tm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSb3RhdGUgdGhlIHRyZWUgdG8gdGhlIHJpZ2h0XG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3JvdGF0ZVJpZ2h0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cdCAgICAgICAgdmFyIGlzTGVmdENoaWxkID0gbm9kZS5pc0xlZnRDaGlsZCgpO1xuXHQgICAgICAgIC8vIE1ha2Ugbm9kZS5sZWZ0IHRoZSBuZXcgcm9vdCBvZiB0aGlzIHN1YiB0cmVlIChpbnN0ZWFkIG9mIG5vZGUpXG5cdCAgICAgICAgdmFyIHBpdm90Tm9kZSA9IG5vZGUubGVmdDtcblx0ICAgICAgICBub2RlLmxlZnQgPSBwaXZvdE5vZGUucmlnaHQ7XG5cdCAgICAgICAgcGl2b3ROb2RlLnJpZ2h0ID0gbm9kZTtcblx0ICAgICAgICBpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGlmIChpc0xlZnRDaGlsZCkge1xuXHQgICAgICAgICAgICAgICAgcGFyZW50LmxlZnQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQucmlnaHQgPSBwaXZvdE5vZGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRSb290KHBpdm90Tm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBCYWxhbmNlIHRoZSBCU1Rcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcmViYWxhbmNlID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICB2YXIgYmFsYW5jZSA9IG5vZGUuZ2V0QmFsYW5jZSgpO1xuXHQgICAgICAgIGlmIChiYWxhbmNlID4gMSkge1xuXHQgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LmdldEJhbGFuY2UoKSA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZUxlZnQobm9kZS5sZWZ0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZVJpZ2h0KG5vZGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChiYWxhbmNlIDwgLTEpIHtcblx0ICAgICAgICAgICAgaWYgKG5vZGUucmlnaHQuZ2V0QmFsYW5jZSgpID4gMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlUmlnaHQobm9kZS5yaWdodCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVMZWZ0KG5vZGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgYW4gZXZlbnQgd2hvc2UgdGltZSBhbmQgZHVyYXRpb24gc3BhbiB0aGUgZ2l2ZSB0aW1lLiBXaWxsXG5cdFx0ICogIHJldHVybiB0aGUgbWF0Y2ggd2hvc2UgXCJ0aW1lXCIgdmFsdWUgaXMgY2xvc2VzdCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCB0byBhZGQgdG8gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBUaGUgZXZlbnQgd2hpY2ggc3BhbnMgdGhlIGRlc2lyZWQgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoKHRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWF4ID0gcmVzdWx0c1swXTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzW2ldLmxvdyA+IG1heC5sb3cpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbWF4ID0gcmVzdWx0c1tpXTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbWF4LmV2ZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIGFsbE5vZGVzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgICAgIGFsbE5vZGVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXYgPSBhbGxOb2Rlc1tpXS5ldmVudDtcblx0ICAgICAgICAgICAgICAgIGlmIChldikge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGluIHdoaWNoIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIG92ZXJsYXBzIHdpdGggdGhlIHRpbWUgYW5kIGR1cmF0aW9uIHRpbWUgb2YgdGhlIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBvdmVybGFwcGluZ1xuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkludGVydmFsVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoKHRpbWUsIHJlc3VsdHMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gcmVzdWx0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ID0gcmVzdWx0c1tpXS5ldmVudDtcblx0ICAgICAgICAgICAgICAgIGlmIChldikge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGluIHdoaWNoIHRoZSB0aW1lIGlzIGdyZWF0ZXJcblx0XHQgKiAgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSBUaGUgdGltZSB0byBjaGVjayBpZiBpdGVtcyBhcmUgYmVmb3JlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoRnJvbSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3Quc2VhcmNoQWZ0ZXIodGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSByZXN1bHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXYgPSByZXN1bHRzW2ldLmV2ZW50O1xuXHQgICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBhbGxOb2RlcyA9IFtdO1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgICAgIGFsbE5vZGVzLnB1c2gobm9kZSk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGFsbE5vZGVzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgYWxsTm9kZXMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Jvb3QgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdElOVEVSVkFMIE5PREUgSEVMUEVSXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXByZXNlbnRzIGEgbm9kZSBpbiB0aGUgYmluYXJ5IHNlYXJjaCB0cmVlLCB3aXRoIHRoZSBhZGRpdGlvblxuXHRcdCAqICBvZiBhIFwiaGlnaFwiIHZhbHVlIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHRoZSBoaWdoZXN0IHZhbHVlIG9mXG5cdFx0ICogIGl0cyBjaGlsZHJlbi5cblx0XHQgKiAgUmVmZXJlbmNlczpcblx0XHQgKiAgaHR0cHM6Ly9icm9va25vdmFrLndvcmRwcmVzcy5jb20vMjAxMy8xMi8wNy9hdWdtZW50ZWQtaW50ZXJ2YWwtdHJlZS1pbi1jL1xuXHRcdCAqICBodHRwOi8vd3d3Lm1pZi52dS5sdC9+dmFsZGFzL0FMR09SSVRNQUkvTElURVJBVFVSQS9Db3JtZW4vQ29ybWVuLnBkZlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gbG93XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBoaWdoXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgSW50ZXJ2YWxOb2RlID0gZnVuY3Rpb24gKGxvdywgaGlnaCwgZXZlbnQpIHtcblx0ICAgICAgICAvL3RoZSBldmVudCBjb250YWluZXJcblx0ICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XG5cdCAgICAgICAgLy90aGUgbG93IHZhbHVlXG5cdCAgICAgICAgdGhpcy5sb3cgPSBsb3c7XG5cdCAgICAgICAgLy90aGUgaGlnaCB2YWx1ZVxuXHQgICAgICAgIHRoaXMuaGlnaCA9IGhpZ2g7XG5cdCAgICAgICAgLy90aGUgaGlnaCB2YWx1ZSBmb3IgdGhpcyBhbmQgYWxsIGNoaWxkIG5vZGVzXG5cdCAgICAgICAgdGhpcy5tYXggPSB0aGlzLmhpZ2g7XG5cdCAgICAgICAgLy90aGUgbm9kZXMgdG8gdGhlIGxlZnRcblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbnVsbDtcblx0ICAgICAgICAvL3RoZSBub2RlcyB0byB0aGUgcmlnaHRcblx0ICAgICAgICB0aGlzLl9yaWdodCA9IG51bGw7XG5cdCAgICAgICAgLy90aGUgcGFyZW50IG5vZGVcblx0ICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cdCAgICAgICAgLy90aGUgbnVtYmVyIG9mIGNoaWxkIG5vZGVzXG5cdCAgICAgICAgdGhpcy5oZWlnaHQgPSAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnNlcnQgYSBub2RlIGludG8gdGhlIGNvcnJlY3Qgc3BvdCBpbiB0aGUgdHJlZVxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgaWYgKG5vZGUubG93IDw9IHRoaXMubG93KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmxlZnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGVmdCA9IG5vZGU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmxlZnQuaW5zZXJ0KG5vZGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQgPSBub2RlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQuaW5zZXJ0KG5vZGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2VhcmNoIHRoZSB0cmVlIGZvciBub2RlcyB3aGljaCBvdmVybGFwXG5cdFx0ICogIHdpdGggdGhlIGdpdmVuIHBvaW50XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHBvaW50ICBUaGUgcG9pbnQgdG8gcXVlcnlcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICByZXN1bHRzICBUaGUgYXJyYXkgdG8gcHV0IHRoZSByZXN1bHRzXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnNlYXJjaCA9IGZ1bmN0aW9uIChwb2ludCwgcmVzdWx0cykge1xuXHQgICAgICAgIC8vIElmIHAgaXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSByaWdodG1vc3QgcG9pbnQgb2YgYW55IGludGVydmFsXG5cdCAgICAgICAgLy8gaW4gdGhpcyBub2RlIGFuZCBhbGwgY2hpbGRyZW4sIHRoZXJlIHdvbid0IGJlIGFueSBtYXRjaGVzLlxuXHQgICAgICAgIGlmIChwb2ludCA+IHRoaXMubWF4KSB7XG5cdCAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gU2VhcmNoIGxlZnQgY2hpbGRyZW5cblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubGVmdC5zZWFyY2gocG9pbnQsIHJlc3VsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBDaGVjayB0aGlzIG5vZGVcblx0ICAgICAgICBpZiAodGhpcy5sb3cgPD0gcG9pbnQgJiYgdGhpcy5oaWdoID4gcG9pbnQpIHtcblx0ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBJZiBwIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSB0aW1lIG9mIHRoaXMgaW50ZXJ2YWwsXG5cdCAgICAgICAgLy8gdGhlbiBpdCBjYW4ndCBiZSBpbiBhbnkgY2hpbGQgdG8gdGhlIHJpZ2h0LlxuXHQgICAgICAgIGlmICh0aGlzLmxvdyA+IHBvaW50KSB7XG5cdCAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gU2VhcmNoIHJpZ2h0IGNoaWxkcmVuXG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC5zZWFyY2gocG9pbnQsIHJlc3VsdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2VhcmNoIHRoZSB0cmVlIGZvciBub2RlcyB3aGljaCBhcmUgbGVzc1xuXHRcdCAqICB0aGFuIHRoZSBnaXZlbiBwb2ludFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBwb2ludCAgVGhlIHBvaW50IHRvIHF1ZXJ5XG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgcmVzdWx0cyAgVGhlIGFycmF5IHRvIHB1dCB0aGUgcmVzdWx0c1xuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5zZWFyY2hBZnRlciA9IGZ1bmN0aW9uIChwb2ludCwgcmVzdWx0cykge1xuXHQgICAgICAgIC8vIENoZWNrIHRoaXMgbm9kZVxuXHQgICAgICAgIGlmICh0aGlzLmxvdyA+PSBwb2ludCkge1xuXHQgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcyk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGVmdC5zZWFyY2hBZnRlcihwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gc2VhcmNoIHRoZSByaWdodCBzaWRlXG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC5zZWFyY2hBZnRlcihwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoaXMgZWxlbWVudCBhbmQgYm90aCBpdCdzIGJyYW5jaGVzXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2tcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUudHJhdmVyc2UgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubGVmdC50cmF2ZXJzZShjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMucmlnaHQudHJhdmVyc2UoY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVXBkYXRlIHRoZSBoZWlnaHQgb2YgdGhlIG5vZGVcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUudXBkYXRlSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwgJiYgdGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLmhlaWdodCA9IE1hdGgubWF4KHRoaXMubGVmdC5oZWlnaHQsIHRoaXMucmlnaHQuaGVpZ2h0KSArIDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5yaWdodC5oZWlnaHQgKyAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5sZWZ0LmhlaWdodCArIDE7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSAwO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVXBkYXRlIHRoZSBoZWlnaHQgb2YgdGhlIG5vZGVcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUudXBkYXRlTWF4ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMubWF4ID0gdGhpcy5oaWdoO1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5tYXggPSBNYXRoLm1heCh0aGlzLm1heCwgdGhpcy5sZWZ0Lm1heCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMubWF4ID0gTWF0aC5tYXgodGhpcy5tYXgsIHRoaXMucmlnaHQubWF4KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBiYWxhbmNlIGlzIGhvdyB0aGUgbGVhZnMgYXJlIGRpc3RyaWJ1dGVkIG9uIHRoZSBub2RlXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBOZWdhdGl2ZSBudW1iZXJzIGFyZSBiYWxhbmNlZCB0byB0aGUgcmlnaHRcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuZ2V0QmFsYW5jZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgYmFsYW5jZSA9IDA7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCAmJiB0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGJhbGFuY2UgPSB0aGlzLmxlZnQuaGVpZ2h0IC0gdGhpcy5yaWdodC5oZWlnaHQ7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgYmFsYW5jZSA9IHRoaXMubGVmdC5oZWlnaHQgKyAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBiYWxhbmNlID0gLSh0aGlzLnJpZ2h0LmhlaWdodCArIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gYmFsYW5jZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhpcyBub2RlIGlzIHRoZSBsZWZ0IGNoaWxkXG5cdFx0ICogIG9mIGl0cyBwYXJlbnRcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuaXNMZWZ0Q2hpbGQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50ICE9PSBudWxsICYmIHRoaXMucGFyZW50LmxlZnQgPT09IHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGdldC9zZXQgdGhlIGxlZnQgbm9kZVxuXHRcdCAqICBAdHlwZSB7SW50ZXJ2YWxOb2RlfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEludGVydmFsTm9kZS5wcm90b3R5cGUsICdsZWZ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGVmdDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGVmdCA9IG5vZGU7XG5cdCAgICAgICAgICAgIGlmIChub2RlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVIZWlnaHQoKTtcblx0ICAgICAgICAgICAgdGhpcy51cGRhdGVNYXgoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBnZXQvc2V0IHRoZSByaWdodCBub2RlXG5cdFx0ICogIEB0eXBlIHtJbnRlcnZhbE5vZGV9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxOb2RlLnByb3RvdHlwZSwgJ3JpZ2h0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmlnaHQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JpZ2h0ID0gbm9kZTtcblx0ICAgICAgICAgICAgaWYgKG5vZGUgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gdGhpcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZUhlaWdodCgpO1xuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZU1heCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIG51bGwgb3V0IHJlZmVyZW5jZXMuXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmV2ZW50ID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRFTkQgSU5URVJWQUwgTk9ERSBIRUxQRVJcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgcmV0dXJuIFRvbmUuSW50ZXJ2YWxUaW1lbGluZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRpY2tzIGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIFRpbWUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgVG9uZS5UaWNrcyBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0IHRoZSBgbmV3YCBrZXl3b3JkLiBUb25lLlRpY2tzIGNhbiBiZSBwYXNzZWRcblx0XHQgKiAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBvZiBhbnkgbWV0aG9kIHdoaWNoIHRha2VzIHRpbWUgYXMgYW4gYXJndW1lbnQuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UcmFuc3BvcnRUaW1lfVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHQgPSBUb25lLlRpY2tzKFwiNG5cIik7Ly9hIHF1YXJ0ZXIgbm90ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcyA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRpY2tzKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0VGltZS5jYWxsKHRoaXMsIHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaWNrcyh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaWNrcywgVG9uZS5UcmFuc3BvcnRUaW1lKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB1bml0cyBpZiBub25lIGFyZSBnaXZlbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAnaSc7XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGN1cnJlbnQgdGltZSBpbiB0aGUgZ2l2ZW4gdW5pdHNcblx0XHQgKiBAcmV0dXJuIHtUaWNrc31cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX25vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQudGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cyA9IGZ1bmN0aW9uIChiZWF0cykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9nZXRQUFEoKSAqIGJlYXRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl9zZWNvbmRzVG9Vbml0cyA9IGZ1bmN0aW9uIChzZWNvbmRzKSB7XG5cdCAgICAgICAgcmV0dXJuIHNlY29uZHMgLyAoNjAgLyB0aGlzLl9nZXRCcG0oKSkgKiB0aGlzLl9nZXRQUFEoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gdGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS50b1RpY2tzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLnRvU2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgLyB0aGlzLl9nZXRQUFEoKSAqICg2MCAvIHRoaXMuX2dldEJwbSgpKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaWNrcztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyYW5zcG9ydEV2ZW50IGlzIGFuIGludGVybmFsIGNsYXNzIHVzZWQgYnkgKFRvbmUuVHJhbnNwb3J0KVtUcmFuc3BvcnRdXG5cdFx0ICogICAgICAgICB0byBzY2hlZHVsZSBldmVudHMuIERvIG5vIGludm9rZSB0aGlzIGNsYXNzIGRpcmVjdGx5LCBpdCBpc1xuXHRcdCAqICAgICAgICAgaGFuZGxlZCBmcm9tIHdpdGhpbiBUb25lLlRyYW5zcG9ydC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50ID0gZnVuY3Rpb24gKFRyYW5zcG9ydCwgb3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5UcmFuc3BvcnRFdmVudC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogUmVmZXJlbmNlIHRvIHRoZSBUcmFuc3BvcnQgdGhhdCBjcmVhdGVkIGl0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5UcmFuc3BvcnR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydCA9IFRyYW5zcG9ydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB1bmlxdWUgaWQgb2YgdGhlIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pZCA9IFRvbmUuVHJhbnNwb3J0RXZlbnQuX2V2ZW50SWQrKztcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB0aW1lIHRoZSBldmVudCBzdGFydHNcblx0XHRcdCAqIEB0eXBlIHtUaWNrc31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudGltZSA9IFRvbmUuVGlja3Mob3B0aW9ucy50aW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogSWYgdGhlIGV2ZW50IHNob3VsZCBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIGNyZWF0ZWQuXG5cdFx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmNlID0gb3B0aW9ucy5vbmNlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0RXZlbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHRzXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmNlJzogZmFsc2UsXG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ3VycmVudCBJRCBjb3VudGVyXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQuX2V2ZW50SWQgPSAwO1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlIHRoZSBldmVudCBjYWxsYmFjay5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBUaGUgQXVkaW9Db250ZXh0IHRpbWUgaW4gc2Vjb25kcyBvZiB0aGUgZXZlbnRcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29uY2UgJiYgdGhpcy5UcmFuc3BvcnQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuaWQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRFdmVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0RXZlbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCBpcyBhbiBpbnRlcm5hbCBjbGFzcyB1c2VkIGJ5IFRvbmUuVHJhbnNwb3J0XG5cdFx0ICogICAgICAgICB0byBzY2hlZHVsZSByZXBlYXQgZXZlbnRzLiBUaGlzIGNsYXNzIHNob3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5LlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UcmFuc3BvcnRFdmVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQgPSBmdW5jdGlvbiAoVHJhbnNwb3J0LCBvcHRpb25zKSB7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5jYWxsKHRoaXMsIFRyYW5zcG9ydCwgb3B0aW9ucyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFdoZW4gdGhlIGV2ZW50IHNob3VsZCBzdG9wIHJlcGVhdGluZ1xuXHRcdFx0ICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZHVyYXRpb24gPSBUb25lLlRpY2tzKG9wdGlvbnMuZHVyYXRpb24pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGludGVydmFsIG9mIHRoZSByZXBlYXRlZCBldmVudFxuXHRcdFx0ICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ludGVydmFsID0gVG9uZS5UaWNrcyhvcHRpb25zLmludGVydmFsKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBJRCBvZiB0aGUgY3VycmVudCB0aW1lbGluZSBldmVudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jdXJyZW50SWQgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBJRCBvZiB0aGUgbmV4dCB0aW1lbGluZSBldmVudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9uZXh0SWQgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAgKiBUaGUgdGltZSBvZiB0aGUgbmV4dCBldmVudFxuXHRcdFx0ICAqIEB0eXBlIHtUaWNrc31cblx0XHRcdCAgKiBAcHJpdmF0ZVxuXHRcdFx0ICAqL1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrID0gdGhpcy50aW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogYSByZWZlcmVuY2UgdG8gdGhlIGJvdW5kIHN0YXJ0IG1ldGhvZFxuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JvdW5kUmVzdGFydCA9IHRoaXMuX3Jlc3RhcnQuYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5vbignc3RhcnQgbG9vcFN0YXJ0JywgdGhpcy5fYm91bmRSZXN0YXJ0KTtcblx0ICAgICAgICB0aGlzLl9yZXN0YXJ0KCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCwgVG9uZS5UcmFuc3BvcnRFdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2R1cmF0aW9uJzogSW5maW5pdHksXG5cdCAgICAgICAgJ2ludGVydmFsJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZSB0aGUgY2FsbGJhY2suIFJldHVybnMgdGhlIHRpY2sgdGltZSB3aGljaFxuXHRcdCAqIHRoZSBuZXh0IGV2ZW50IHNob3VsZCBiZSBzY2hlZHVsZWQgYXQuXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lICBUaGUgQXVkaW9Db250ZXh0IHRpbWUgaW4gc2Vjb25kcyBvZiB0aGUgZXZlbnRcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9jcmVhdGUgbW9yZSBldmVudHMgaWYgbmVjZXNzYXJ5XG5cdCAgICAgICAgdGhpcy5fY3JlYXRlRXZlbnRzKHRpbWUpO1xuXHQgICAgICAgIC8vY2FsbCB0aGUgc3VwZXIgY2xhc3Ncblx0ICAgICAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5pbnZva2UuY2FsbCh0aGlzLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBQdXNoIG1vcmUgZXZlbnRzIG9udG8gdGhlIHRpbWVsaW5lIHRvIGtlZXAgdXAgd2l0aCB0aGUgcG9zaXRpb24gb2YgdGhlIHRpbWVsaW5lXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLl9jcmVhdGVFdmVudHMgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vIHNjaGVkdWxlIHRoZSBuZXh0IGV2ZW50XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5UcmFuc3BvcnQuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKHRpY2tzID49IHRoaXMudGltZSAmJiB0aWNrcyA+PSB0aGlzLl9uZXh0VGljayAmJiB0aGlzLl9uZXh0VGljayArIHRoaXMuX2ludGVydmFsIDwgdGhpcy50aW1lICsgdGhpcy5kdXJhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9uZXh0VGljayArPSB0aGlzLl9pbnRlcnZhbDtcblx0ICAgICAgICAgICAgdGhpcy5fY3VycmVudElkID0gdGhpcy5fbmV4dElkO1xuXHQgICAgICAgICAgICB0aGlzLl9uZXh0SWQgPSB0aGlzLlRyYW5zcG9ydC5zY2hlZHVsZU9uY2UodGhpcy5pbnZva2UuYmluZCh0aGlzKSwgVG9uZS5UaWNrcyh0aGlzLl9uZXh0VGljaykpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBQdXNoIG1vcmUgZXZlbnRzIG9udG8gdGhlIHRpbWVsaW5lIHRvIGtlZXAgdXAgd2l0aCB0aGUgcG9zaXRpb24gb2YgdGhlIHRpbWVsaW5lXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQucHJvdG90eXBlLl9yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9jdXJyZW50SWQpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX25leHRJZCk7XG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSB0aGlzLnRpbWU7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5UcmFuc3BvcnQuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKHRpY2tzID4gdGhpcy50aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX25leHRUaWNrID0gdGhpcy50aW1lICsgTWF0aC5jZWlsKCh0aWNrcyAtIHRoaXMudGltZSkgLyB0aGlzLl9pbnRlcnZhbCkgKiB0aGlzLl9pbnRlcnZhbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY3VycmVudElkID0gdGhpcy5UcmFuc3BvcnQuc2NoZWR1bGVPbmNlKHRoaXMuaW52b2tlLmJpbmQodGhpcyksIFRvbmUuVGlja3ModGhpcy5fbmV4dFRpY2spKTtcblx0ICAgICAgICB0aGlzLl9uZXh0VGljayArPSB0aGlzLl9pbnRlcnZhbDtcblx0ICAgICAgICB0aGlzLl9uZXh0SWQgPSB0aGlzLlRyYW5zcG9ydC5zY2hlZHVsZU9uY2UodGhpcy5pbnZva2UuYmluZCh0aGlzKSwgVG9uZS5UaWNrcyh0aGlzLl9uZXh0VGljaykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9jdXJyZW50SWQpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX25leHRJZCk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQub2ZmKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9ib3VuZFJlc3RhcnQpO1xuXHQgICAgICAgIHRoaXMuX2JvdW5kQ3JlYXRlRXZlbnRzID0gbnVsbDtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5kdXJhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRyYW5zcG9ydCBmb3IgdGltaW5nIG11c2ljYWwgZXZlbnRzLlxuXHRcdCAqICAgICAgICAgIFN1cHBvcnRzIHRlbXBvIGN1cnZlcyBhbmQgdGltZSBjaGFuZ2VzLiBVbmxpa2UgYnJvd3Nlci1iYXNlZCB0aW1pbmcgKHNldEludGVydmFsLCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUpXG5cdFx0ICogICAgICAgICAgVG9uZS5UcmFuc3BvcnQgdGltaW5nIGV2ZW50cyBwYXNzIGluIHRoZSBleGFjdCB0aW1lIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnRcblx0XHQgKiAgICAgICAgICBpbiB0aGUgYXJndW1lbnQgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBQYXNzIHRoYXQgdGltZSB2YWx1ZSB0byB0aGUgb2JqZWN0XG5cdFx0ICogICAgICAgICAgeW91J3JlIHNjaGVkdWxpbmcuIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgQSBzaW5nbGUgdHJhbnNwb3J0IGlzIGNyZWF0ZWQgZm9yIHlvdSB3aGVuIHRoZSBsaWJyYXJ5IGlzIGluaXRpYWxpemVkLlxuXHRcdCAqICAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgVGhlIHRyYW5zcG9ydCBlbWl0cyB0aGUgZXZlbnRzOiBcInN0YXJ0XCIsIFwic3RvcFwiLCBcInBhdXNlXCIsIGFuZCBcImxvb3BcIiB3aGljaCBhcmVcblx0XHQgKiAgICAgICAgICBjYWxsZWQgd2l0aCB0aGUgdGltZSBvZiB0aGF0IGV2ZW50IGFzIHRoZSBhcmd1bWVudC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbWl0dGVyfVxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9yZXBlYXRlZCBldmVudCBldmVyeSA4dGggbm90ZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly9kbyBzb21ldGhpbmcgd2l0aCB0aGUgdGltZVxuXHRcdCAqIH0sIFwiOG5cIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zY2hlZHVsZSBhbiBldmVudCBvbiB0aGUgMTZ0aCBtZWFzdXJlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSB0aW1lXG5cdFx0ICogfSwgXCIxNjowOjBcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0TE9PUElOR1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdElmIHRoZSB0cmFuc3BvcnQgbG9vcHMgb3Igbm90LlxuXHRcdFx0XHQgKiAgQHR5cGUge2Jvb2xlYW59XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLmxvb3AgPSBmYWxzZTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0VGhlIGxvb3Agc3RhcnQgcG9zaXRpb24gaW4gdGlja3Ncblx0XHRcdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSAwO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogXHRUaGUgbG9vcCBlbmQgcG9zaXRpb24gaW4gdGlja3Ncblx0XHRcdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gMDtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdENMT0NLL1RFTVBPXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBQdWxzZXMgcGVyIHF1YXJ0ZXIgaXMgdGhlIG51bWJlciBvZiB0aWNrcyBwZXIgcXVhcnRlciBub3RlLlxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fcHBxID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMuUFBRO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIHdhdGNoZXMgdGhlIG1haW4gb3NjaWxsYXRvciBmb3IgdGltaW5nIHRpY2tzXG5cdFx0XHRcdCAqICBpbml0aWFsbHkgc3RhcnRzIGF0IDEyMGJwbVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICogIEB0eXBlIHtUb25lLkNsb2NrfVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fY2xvY2sgPSBuZXcgVG9uZS5DbG9jayh7XG5cdCAgICAgICAgICAgICAgICAnY2FsbGJhY2snOiB0aGlzLl9wcm9jZXNzVGljay5iaW5kKHRoaXMpLFxuXHQgICAgICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IDBcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2JpbmRDbG9ja0V2ZW50cygpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSBCZWF0cyBQZXIgTWludXRlIG9mIHRoZSBUcmFuc3BvcnQuXG5cdFx0XHRcdCAqICBAdHlwZSB7QlBNfVxuXHRcdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gODA7XG5cdFx0XHRcdCAqIC8vcmFtcCB0aGUgYnBtIHRvIDEyMCBvdmVyIDEwIHNlY29uZHNcblx0XHRcdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnJhbXBUbygxMjAsIDEwKTtcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuYnBtID0gdGhpcy5fY2xvY2suZnJlcXVlbmN5O1xuXHQgICAgICAgICAgICB0aGlzLmJwbS5fdG9Vbml0cyA9IHRoaXMuX3RvVW5pdHMuYmluZCh0aGlzKTtcblx0ICAgICAgICAgICAgdGhpcy5icG0uX2Zyb21Vbml0cyA9IHRoaXMuX2Zyb21Vbml0cy5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLmJwbS51bml0cyA9IFRvbmUuVHlwZS5CUE07XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLnZhbHVlID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMuYnBtO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWFkT25seSgnYnBtJyk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHRpbWUgc2lnbmF0dXJlLCBvciBtb3JlIGFjY3VyYXRlbHkgdGhlIG51bWVyYXRvclxuXHRcdFx0XHQgKiAgb2YgdGhlIHRpbWUgc2lnbmF0dXJlIG92ZXIgYSBkZW5vbWluYXRvciBvZiA0LlxuXHRcdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lU2lnbmF0dXJlID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMudGltZVNpZ25hdHVyZTtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdFRJTUVMSU5FIEVWRU5UU1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgQWxsIHRoZSBldmVudHMgaW4gYW4gb2JqZWN0IHRvIGtlZXAgdHJhY2sgYnkgSURcblx0XHRcdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzID0ge307XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdFRoZSBzY2hlZHVsZWQgZXZlbnRzLlxuXHRcdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmV9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBuZXcgVG9uZS5UaW1lbGluZSgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFJlcGVhdGVkIGV2ZW50c1xuXHRcdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzID0gbmV3IFRvbmUuSW50ZXJ2YWxUaW1lbGluZSgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIEFsbCBvZiB0aGUgc3luY2VkIFNpZ25hbHNcblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zeW5jZWRTaWduYWxzID0gW107XG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8vXHRTV0lOR1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHN1YmRpdmlzaW9uIG9mIHRoZSBzd2luZ1xuXHRcdFx0XHQgKiAgQHR5cGUgIHtUaWNrc31cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ1RpY2tzID0gVHJhbnNwb3J0Q29uc3RydWN0b3IuZGVmYXVsdHMuUFBRIC8gMjtcblx0ICAgICAgICAgICAgLy84blxuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFRoZSBzd2luZyBhbW91bnRcblx0XHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ0Ftb3VudCA9IDA7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydCwgVG9uZS5FbWl0dGVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdicG0nOiAxMjAsXG5cdCAgICAgICAgJ3N3aW5nJzogMCxcblx0ICAgICAgICAnc3dpbmdTdWJkaXZpc2lvbic6ICc4bicsXG5cdCAgICAgICAgJ3RpbWVTaWduYXR1cmUnOiA0LFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogJzRtJyxcblx0ICAgICAgICAnUFBRJzogMTkyXG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRJQ0tTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgY2FsbGVkIG9uIGV2ZXJ5IHRpY2tcblx0XHQgKiAgQHBhcmFtICAge251bWJlcn0gdGlja1RpbWUgY2xvY2sgcmVsYXRpdmUgdGljayB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX3Byb2Nlc3NUaWNrID0gZnVuY3Rpb24gKHRpY2tUaW1lLCB0aWNrcykge1xuXHQgICAgICAgIC8vaGFuZGxlIHN3aW5nXG5cdCAgICAgICAgaWYgKHRoaXMuX3N3aW5nQW1vdW50ID4gMCAmJiB0aWNrcyAlIHRoaXMuX3BwcSAhPT0gMCAmJiAvL25vdCBvbiBhIGRvd25iZWF0XG5cdCAgICAgICAgICAgIHRpY2tzICUgKHRoaXMuX3N3aW5nVGlja3MgKiAyKSAhPT0gMCkge1xuXHQgICAgICAgICAgICAvL2FkZCBzb21lIHN3aW5nXG5cdCAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9IHRpY2tzICUgKHRoaXMuX3N3aW5nVGlja3MgKiAyKSAvICh0aGlzLl9zd2luZ1RpY2tzICogMik7XG5cdCAgICAgICAgICAgIHZhciBhbW91bnQgPSBNYXRoLnNpbihwcm9ncmVzcyAqIE1hdGguUEkpICogdGhpcy5fc3dpbmdBbW91bnQ7XG5cdCAgICAgICAgICAgIHRpY2tUaW1lICs9IFRvbmUuVGlja3ModGhpcy5fc3dpbmdUaWNrcyAqIDIgLyAzKS50b1NlY29uZHMoKSAqIGFtb3VudDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9kbyB0aGUgbG9vcCB0ZXN0XG5cdCAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICBpZiAodGlja3MgPj0gdGhpcy5fbG9vcEVuZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb29wRW5kJywgdGlja1RpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY2xvY2suc2V0VGlja3NBdFRpbWUodGhpcy5fbG9vcFN0YXJ0LCB0aWNrVGltZSk7XG5cdCAgICAgICAgICAgICAgICB0aWNrcyA9IHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9vcFN0YXJ0JywgdGlja1RpbWUsIHRoaXMuX2Nsb2NrLmdldFNlY29uZHNBdFRpbWUodGlja1RpbWUpKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnbG9vcCcsIHRpY2tUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2ludm9rZSB0aGUgdGltZWxpbmUgZXZlbnRzIHNjaGVkdWxlZCBvbiB0aGlzIHRpY2tcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5mb3JFYWNoQXRUaW1lKHRpY2tzLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuaW52b2tlKHRpY2tUaW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U0NIRURVTEFCTEUgRVZFTlRTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYW4gZXZlbnQgYWxvbmcgdGhlIHRpbWVsaW5lLlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBhdCB0aGUgdGltZS5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSAgdGltZSBUaGUgdGltZSB0byBpbnZva2UgdGhlIGNhbGxiYWNrIGF0LlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9IFRoZSBpZCBvZiB0aGUgZXZlbnQgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGNhbmNlbGluZyB0aGUgZXZlbnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIHRoZSBjYWxsYmFjayB3aGVuIHRoZSBUcmFuc3BvcnQgcmVhY2hlcyB0aGUgZGVzaXJlZCB0aW1lXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHRlbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUpO1xuXHRcdCAqIH0sIFwiMTI4aVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdGltZSkge1xuXHQgICAgICAgIHZhciBldmVudCA9IG5ldyBUb25lLlRyYW5zcG9ydEV2ZW50KHRoaXMsIHtcblx0ICAgICAgICAgICAgJ3RpbWUnOiBUb25lLlRyYW5zcG9ydFRpbWUodGltZSksXG5cdCAgICAgICAgICAgICdjYWxsYmFjayc6IGNhbGxiYWNrXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEV2ZW50KGV2ZW50LCB0aGlzLl90aW1lbGluZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGEgcmVwZWF0ZWQgZXZlbnQgYWxvbmcgdGhlIHRpbWVsaW5lLiBUaGUgZXZlbnQgd2lsbCBmaXJlXG5cdFx0ICogIGF0IHRoZSBgaW50ZXJ2YWxgIHN0YXJ0aW5nIGF0IHRoZSBgc3RhcnRUaW1lYCBhbmQgZm9yIHRoZSBzcGVjaWZpZWRcblx0XHQgKiAgYGR1cmF0aW9uYC5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayB0byBpbnZva2UuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICAgIGludGVydmFsICAgVGhlIGR1cmF0aW9uIGJldHdlZW4gc3VjY2Vzc2l2ZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy4gTXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZT19ICAgIHN0YXJ0VGltZSAgV2hlbiBhbG9uZyB0aGUgdGltZWxpbmUgdGhlIGV2ZW50cyBzaG91bGRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCBiZWluZyBpbnZva2VkLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkdXJhdGlvbj1JbmZpbml0eV0gSG93IGxvbmcgdGhlIGV2ZW50IHNob3VsZCByZXBlYXQuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICAgIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50LiBVc2UgdGhpcyB0byBjYW5jZWxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBldmVudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2EgY2FsbGJhY2sgaW52b2tlZCBldmVyeSBlaWdodGggbm90ZSBhZnRlciB0aGUgZmlyc3QgbWVhc3VyZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KGNhbGxiYWNrLCBcIjhuXCIsIFwiMW1cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2NoZWR1bGVSZXBlYXQgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGludGVydmFsLCBzdGFydFRpbWUsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQodGhpcywge1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiBjYWxsYmFjayxcblx0ICAgICAgICAgICAgJ2ludGVydmFsJzogVG9uZS5UaW1lKGludGVydmFsKSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKSxcblx0ICAgICAgICAgICAgJ2R1cmF0aW9uJzogVG9uZS5UaW1lKFRvbmUuZGVmYXVsdEFyZyhkdXJhdGlvbiwgSW5maW5pdHkpKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8va2ljayBpdCBvZmYgaWYgdGhlIFRyYW5zcG9ydCBpcyBzdGFydGVkXG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEV2ZW50KGV2ZW50LCB0aGlzLl9yZXBlYXRlZEV2ZW50cyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGFuIGV2ZW50IHRoYXQgd2lsbCBiZSByZW1vdmVkIGFmdGVyIGl0IGlzIGludm9rZWQuXG5cdFx0ICogIE5vdGUgdGhhdCBpZiB0aGUgZ2l2ZW4gdGltZSBpcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgdHJhbnNwb3J0IHRpbWUsXG5cdFx0ICogIHRoZSBldmVudCB3aWxsIGJlIGludm9rZWQgaW1tZWRpYXRlbHkuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugb25jZS5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSB0aW1lIFRoZSB0aW1lIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZC5cblx0XHQgKiAgQHJldHVybnMge051bWJlcn0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQuXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2NoZWR1bGVPbmNlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aW1lKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFRvbmUuVHJhbnNwb3J0RXZlbnQodGhpcywge1xuXHQgICAgICAgICAgICAndGltZSc6IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKSxcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogY2FsbGJhY2ssXG5cdCAgICAgICAgICAgICdvbmNlJzogdHJ1ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hZGRFdmVudChldmVudCwgdGhpcy5fdGltZWxpbmUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhciB0aGUgcGFzc2VkIGluIGV2ZW50IGlkIGZyb20gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBldmVudElkIFRoZSBpZCBvZiB0aGUgZXZlbnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGV2ZW50SWQpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc2NoZWR1bGVkRXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50SWQpKSB7XG5cdCAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5fc2NoZWR1bGVkRXZlbnRzW2V2ZW50SWQudG9TdHJpbmcoKV07XG5cdCAgICAgICAgICAgIGl0ZW0udGltZWxpbmUucmVtb3ZlKGl0ZW0uZXZlbnQpO1xuXHQgICAgICAgICAgICBpdGVtLmV2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NjaGVkdWxlZEV2ZW50c1tldmVudElkLnRvU3RyaW5nKCldO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBBZGQgYW4gZXZlbnQgdG8gdGhlIGNvcnJlY3QgdGltZWxpbmUuIEtlZXAgdHJhY2sgb2YgdGhlXG5cdFx0ICogdGltZWxpbmUgaXQgd2FzIGFkZGVkIHRvLlxuXHRcdCAqIEBwYXJhbSB7VG9uZS5UcmFuc3BvcnRFdmVudH1cdGV2ZW50XG5cdFx0ICogQHBhcmFtIHtUb25lLlRpbWVsaW5lfSB0aW1lbGluZVxuXHRcdCAqIEByZXR1cm5zIHtOdW1iZXJ9IHRoZSBldmVudCBpZCB3aGljaCB3YXMganVzdCBhZGRlZFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX2FkZEV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50LCB0aW1lbGluZSkge1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50c1tldmVudC5pZC50b1N0cmluZygpXSA9IHtcblx0ICAgICAgICAgICAgJ2V2ZW50JzogZXZlbnQsXG5cdCAgICAgICAgICAgICd0aW1lbGluZSc6IHRpbWVsaW5lXG5cdCAgICAgICAgfTtcblx0ICAgICAgICB0aW1lbGluZS5hZGQoZXZlbnQpO1xuXHQgICAgICAgIHJldHVybiBldmVudC5pZDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIHNjaGVkdWxlZCBldmVudHMgZnJvbSB0aGUgdGltZWxpbmUgYWZ0ZXJcblx0XHQgKiAgdGhlIGdpdmVuIHRpbWUuIFJlcGVhdGVkIGV2ZW50cyB3aWxsIGJlIHJlbW92ZWRcblx0XHQgKiAgaWYgdGhlaXIgc3RhcnRUaW1lIGlzIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gW2FmdGVyPTBdIENsZWFyIGFsbCBldmVudHMgYWZ0ZXJcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB0aW1lLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICBhZnRlciA9IFRvbmUuZGVmYXVsdEFyZyhhZnRlciwgMCk7XG5cdCAgICAgICAgYWZ0ZXIgPSB0aGlzLnRvVGlja3MoYWZ0ZXIpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLl9yZXBlYXRlZEV2ZW50cy5mb3JFYWNoRnJvbShhZnRlciwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2xlYXIoZXZlbnQuaWQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFNUQVJUL1NUT1AvUEFVU0Vcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBCaW5kIHN0YXJ0L3N0b3AvcGF1c2UgZXZlbnRzIGZyb20gdGhlIGNsb2NrIGFuZCBlbWl0IHRoZW0uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX2JpbmRDbG9ja0V2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbignc3RhcnQnLCBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuVGlja3Mob2Zmc2V0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbignc3RvcCcsIGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RvcCcsIHRpbWUpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sub24oJ3BhdXNlJywgZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdwYXVzZScsIHRpbWUpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiwgXCJzdG9wcGVkXCIsIG9yIFwicGF1c2VkXCJcblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay5nZXRTdGF0ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgdHJhbnNwb3J0IGFuZCBhbGwgc291cmNlcyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSB0cmFuc3BvcnQgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lPX0gb2Zmc2V0IFRoZSB0aW1lbGluZSBvZmZzZXQgdG8gc3RhcnQgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IGluIG9uZSBzZWNvbmQgc3RhcnRpbmcgYXQgYmVnaW5uaW5nIG9mIHRoZSA1dGggbWVhc3VyZS5cblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydChcIisxXCIsIFwiNDowOjBcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgY2xvY2tcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQob2Zmc2V0KSkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnRvVGlja3Mob2Zmc2V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY2xvY2suc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgdHJhbnNwb3J0IGFuZCBhbGwgc291cmNlcyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSB0cmFuc3BvcnQgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0b3AoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXVzZSB0aGUgdHJhbnNwb3J0IGFuZCBhbGwgc291cmNlcyBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sucGF1c2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVG9nZ2xlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0cmFuc3BvcnQuIElmIGl0IGlzXG5cdFx0ICogc3RhcnRlZCwgaXQgd2lsbCBzdG9wIGl0LCBvdGhlcndpc2UgaXQgd2lsbCBzdGFydCB0aGUgVHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0fSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fY2xvY2suZ2V0U3RhdGVBdFRpbWUodGltZSkgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFNFVFRFUlMvR0VUVEVSU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHNpZ25hdHVyZSBhcyBqdXN0IHRoZSBudW1lcmF0b3Igb3ZlciA0LlxuXHRcdCAqICBGb3IgZXhhbXBsZSA0LzQgd291bGQgYmUganVzdCA0IGFuZCA2Lzggd291bGQgYmUgMy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfEFycmF5fVxuXHRcdCAqICBAbmFtZSB0aW1lU2lnbmF0dXJlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jb21tb24gdGltZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmUgPSA0O1xuXHRcdCAqIC8vIDcvOFxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmUgPSBbNywgOF07XG5cdFx0ICogLy90aGlzIHdpbGwgYmUgcmVkdWNlZCB0byBhIHNpbmdsZSBudW1iZXJcblx0XHQgKiBUb25lLlRyYW5zcG9ydC50aW1lU2lnbmF0dXJlOyAvL3JldHVybnMgMy41XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAndGltZVNpZ25hdHVyZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVTaWduYXR1cmU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lU2lnKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGltZVNpZykpIHtcblx0ICAgICAgICAgICAgICAgIHRpbWVTaWcgPSB0aW1lU2lnWzBdIC8gdGltZVNpZ1sxXSAqIDQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdGltZVNpZ25hdHVyZSA9IHRpbWVTaWc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBXaGVuIHRoZSBUb25lLlRyYW5zcG9ydC5sb29wID0gdHJ1ZSwgdGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGxvb3AuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcFN0YXJ0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHN0YXJ0UG9zaXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKHN0YXJ0UG9zaXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogV2hlbiB0aGUgVG9uZS5UcmFuc3BvcnQubG9vcCA9IHRydWUsIHRoaXMgaXMgdGhlIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgbG9vcC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BFbmQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZW5kUG9zaXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhlbmRQb3NpdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBsb29wIHN0YXJ0IGFuZCBzdG9wIGF0IHRoZSBzYW1lIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gc3RhcnRQb3NpdGlvblxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IGVuZFBvc2l0aW9uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9vcCBvdmVyIHRoZSBmaXJzdCBtZWFzdXJlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2V0TG9vcFBvaW50cygwLCBcIjFtXCIpO1xuXHRcdCAqIFRvbmUuVHJhbnNwb3J0Lmxvb3AgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnNldExvb3BQb2ludHMgPSBmdW5jdGlvbiAoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHtcblx0ICAgICAgICB0aGlzLmxvb3BTdGFydCA9IHN0YXJ0UG9zaXRpb247XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gZW5kUG9zaXRpb247XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzd2luZyB2YWx1ZS4gQmV0d2VlbiAwLTEgd2hlcmUgMSBlcXVhbCB0b1xuXHRcdCAqICB0aGUgbm90ZSArIGhhbGYgdGhlIHN1YmRpdmlzaW9uLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgc3dpbmdcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzd2luZycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N3aW5nQW1vdW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYW1vdW50KSB7XG5cdCAgICAgICAgICAgIC8vc2NhbGUgdGhlIHZhbHVlcyB0byBhIG5vcm1hbCByYW5nZVxuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ0Ftb3VudCA9IGFtb3VudDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIHN1YmRpdmlzaW9uIHdoaWNoIHRoZSBzd2luZyB3aWxsIGJlIGFwcGxpZWQgdG8uXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGFuIDh0aCBub3RlLiBWYWx1ZSBtdXN0IGJlIGxlc3Ncblx0XHQgKiAgdGhhbiBhIHF1YXJ0ZXIgbm90ZS5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBzd2luZ1N1YmRpdmlzaW9uXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc3dpbmdTdWJkaXZpc2lvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fc3dpbmdUaWNrcykudG9Ob3RhdGlvbigpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ViZGl2aXNpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3dpbmdUaWNrcyA9IHRoaXMudG9UaWNrcyhzdWJkaXZpc2lvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIFRyYW5zcG9ydCdzIHBvc2l0aW9uIGluIEJhcnM6QmVhdHM6U2l4dGVlbnRocy5cblx0XHQgKiAgU2V0dGluZyB0aGUgdmFsdWUgd2lsbCBqdW1wIHRvIHRoYXQgcG9zaXRpb24gcmlnaHQgYXdheS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7QmFyc0JlYXRzU2l4dGVlbnRoc31cblx0XHQgKiAgQG5hbWUgcG9zaXRpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdwb3NpdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuX2Nsb2NrLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRpY2tzKS50b0JhcnNCZWF0c1NpeHRlZW50aHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2dyZXNzKSB7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMudG9UaWNrcyhwcm9ncmVzcyk7XG5cdCAgICAgICAgICAgIHRoaXMudGlja3MgPSB0aWNrcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgVHJhbnNwb3J0J3MgcG9zaXRpb24gaW4gc2Vjb25kc1xuXHRcdCAqICBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIGp1bXAgdG8gdGhhdCBwb3NpdGlvbiByaWdodCBhd2F5LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtTZWNvbmRzfVxuXHRcdCAqICBAbmFtZSBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnc2Vjb25kcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLnNlY29uZHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLmJwbS50aW1lVG9UaWNrcyhzLCBub3cpO1xuXHQgICAgICAgICAgICB0aGlzLnRpY2tzID0gdGlja3M7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIFRyYW5zcG9ydCdzIGxvb3AgcG9zaXRpb24gYXMgYSBub3JtYWxpemVkIHZhbHVlLiBBbHdheXNcblx0XHQgKiAgcmV0dXJucyAwIGlmIHRoZSB0cmFuc3BvcnQgaWYgbG9vcCBpcyBub3QgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAbmFtZSBwcm9ncmVzc1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAncHJvZ3Jlc3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5fY2xvY2suZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAodGlja3MgLSB0aGlzLl9sb29wU3RhcnQpIC8gKHRoaXMuX2xvb3BFbmQgLSB0aGlzLl9sb29wU3RhcnQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdHJhbnNwb3J0cyBjdXJyZW50IHRpY2sgcG9zaXRpb24uXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICogIEBuYW1lIHRpY2tzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAndGlja3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay50aWNrcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2Nsb2NrLnRpY2tzICE9PSB0KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgICAgIC8vc3RvcCBldmVyeXRoaW5nIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgbm93KTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9jay5zZXRUaWNrc0F0VGltZSh0LCBub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vcmVzdGFydCBpdCB3aXRoIHRoZSBuZXcgdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnc3RhcnQnLCBub3csIHRoaXMuc2Vjb25kcyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb2NrLnNldFRpY2tzQXRUaW1lKHQsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgY2xvY2sncyB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIGdldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgICBUaGUgdGljayB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5fY2xvY2suZ2V0VGlja3NBdFRpbWUodGltZSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGVsYXBzZWQgc2Vjb25kcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSBlbGFwc2VkIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9ICBUaGUgbnVtYmVyIG9mIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmdldFNlY29uZHNBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jbG9jay5nZXRTZWNvbmRzQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQdWxzZXMgUGVyIFF1YXJ0ZXIgbm90ZS4gVGhpcyBpcyB0aGUgc21hbGxlc3QgcmVzb2x1dGlvblxuXHRcdCAqICB0aGUgVHJhbnNwb3J0IHRpbWluZyBzdXBwb3J0cy4gVGhpcyBzaG91bGQgYmUgc2V0IG9uY2Vcblx0XHQgKiAgb24gaW5pdGlhbGl6YXRpb24gYW5kIG5vdCBzZXQgYWdhaW4uIENoYW5naW5nIHRoaXMgdmFsdWVcblx0XHQgKiAgYWZ0ZXIgb3RoZXIgb2JqZWN0cyBoYXZlIGJlZW4gY3JlYXRlZCBjYW4gY2F1c2UgcHJvYmxlbXMuXG5cdFx0ICpcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVHJhbnNwb3J0I1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBQUFFcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdQUFEnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcHE7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcHEpIHtcblx0ICAgICAgICAgICAgdmFyIGJwbSA9IHRoaXMuYnBtLnZhbHVlO1xuXHQgICAgICAgICAgICB0aGlzLl9wcHEgPSBwcHE7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLnZhbHVlID0gYnBtO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZnJvbSBCUE0gdG8gZnJlcXVlbmN5IChmYWN0b3JpbmcgaW4gUFBRKVxuXHRcdCAqICBAcGFyYW0gIHtCUE19ICBicG0gVGhlIEJQTSB2YWx1ZSB0byBjb252ZXJ0IHRvIGZyZXF1ZW5jeVxuXHRcdCAqICBAcmV0dXJuICB7RnJlcXVlbmN5fSAgVGhlIEJQTSBhcyBhIGZyZXF1ZW5jeSB3aXRoIFBQUSBmYWN0b3JlZCBpbi5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fZnJvbVVuaXRzID0gZnVuY3Rpb24gKGJwbSkge1xuXHQgICAgICAgIHJldHVybiAxIC8gKDYwIC8gYnBtIC8gdGhpcy5QUFEpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGZyb20gZnJlcXVlbmN5ICh3aXRoIFBQUSkgaW50byBCUE1cblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSAgZnJlcSBUaGUgY2xvY2tzIGZyZXF1ZW5jeSB0byBjb252ZXJ0IHRvIEJQTVxuXHRcdCAqICBAcmV0dXJuICB7QlBNfSAgVGhlIGZyZXF1ZW5jeSB2YWx1ZSBhcyBCUE0uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuX3RvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiBmcmVxIC8gdGhpcy5QUFEgKiA2MDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U1lOQ0lOR1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHRpbWUgYWxpZ25lZCB0byB0aGUgbmV4dCBzdWJkaXZpc2lvblxuXHRcdCAqICBvZiB0aGUgVHJhbnNwb3J0LiBJZiB0aGUgVHJhbnNwb3J0IGlzIG5vdCBzdGFydGVkLFxuXHRcdCAqICBpdCB3aWxsIHJldHVybiAwLlxuXHRcdCAqICBOb3RlOiB0aGlzIHdpbGwgbm90IHdvcmsgcHJlY2lzZWx5IGR1cmluZyB0ZW1wbyByYW1wcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHN1YmRpdmlzaW9uICBUaGUgc3ViZGl2aXNpb24gdG8gcXVhbnRpemUgdG9cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIFRoZSBjb250ZXh0IHRpbWUgb2YgdGhlIG5leHQgc3ViZGl2aXNpb24uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoKTsgLy90aGUgdHJhbnNwb3J0IG11c3QgYmUgc3RhcnRlZFxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0Lm5leHRTdWJkaXZpc2lvbihcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLm5leHRTdWJkaXZpc2lvbiA9IGZ1bmN0aW9uIChzdWJkaXZpc2lvbikge1xuXHQgICAgICAgIHN1YmRpdmlzaW9uID0gdGhpcy50b1RpY2tzKHN1YmRpdmlzaW9uKTtcblx0ICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIC8vaWYgdGhlIHRyYW5zcG9ydCdzIG5vdCBzdGFydGVkLCByZXR1cm4gMFxuXHQgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgLy90aGUgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50IHRpY2tzIGFuZCB0aGUgc3ViZGl2aXNpb25cblx0ICAgICAgICAgICAgdmFyIHRyYW5zcG9ydFBvcyA9IHRoaXMuZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgdmFyIHJlbWFpbmluZ1RpY2tzID0gc3ViZGl2aXNpb24gLSB0cmFuc3BvcnRQb3MgJSBzdWJkaXZpc2lvbjtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLm5leHRUaWNrVGltZShyZW1haW5pbmdUaWNrcywgbm93KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEF0dGFjaGVzIHRoZSBzaWduYWwgdG8gdGhlIHRlbXBvIGNvbnRyb2wgc2lnbmFsIHNvIHRoYXRcblx0XHQgKiAgYW55IGNoYW5nZXMgaW4gdGhlIHRlbXBvIHdpbGwgY2hhbmdlIHRoZSBzaWduYWwgaW4gdGhlIHNhbWVcblx0XHQgKiAgcmF0aW8uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VG9uZS5TaWduYWx9IHNpZ25hbFxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHJhdGlvIE9wdGlvbmFsbHkgcGFzcyBpbiB0aGUgcmF0aW8gYmV0d2VlblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0d28gc2lnbmFscy4gT3RoZXJ3aXNlIGl0IHdpbGwgYmUgY29tcHV0ZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGVpciBjdXJyZW50IHZhbHVlcy5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc3luY1NpZ25hbCA9IGZ1bmN0aW9uIChzaWduYWwsIHJhdGlvKSB7XG5cdCAgICAgICAgaWYgKCFyYXRpbykge1xuXHQgICAgICAgICAgICAvL2dldCB0aGUgc3luYyByYXRpb1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKHNpZ25hbC5nZXRWYWx1ZUF0VGltZShub3cpICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByYXRpbyA9IHNpZ25hbC5nZXRWYWx1ZUF0VGltZShub3cpIC8gdGhpcy5icG0uZ2V0VmFsdWVBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJhdGlvID0gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmF0aW9TaWduYWwgPSBuZXcgVG9uZS5HYWluKHJhdGlvKTtcblx0ICAgICAgICB0aGlzLmJwbS5jaGFpbihyYXRpb1NpZ25hbCwgc2lnbmFsLl9wYXJhbSk7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkU2lnbmFscy5wdXNoKHtcblx0ICAgICAgICAgICAgJ3JhdGlvJzogcmF0aW9TaWduYWwsXG5cdCAgICAgICAgICAgICdzaWduYWwnOiBzaWduYWwsXG5cdCAgICAgICAgICAgICdpbml0aWFsJzogc2lnbmFsLnZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgc2lnbmFsLnZhbHVlID0gMDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVW5zeW5jcyBhIHByZXZpb3VzbHkgc3luY2VkIHNpZ25hbCBmcm9tIHRoZSB0cmFuc3BvcnQncyBjb250cm9sLlxuXHRcdCAqICBTZWUgVG9uZS5UcmFuc3BvcnQuc3luY1NpZ25hbC5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5TaWduYWx9IHNpZ25hbFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS51bnN5bmNTaWduYWwgPSBmdW5jdGlvbiAoc2lnbmFsKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX3N5bmNlZFNpZ25hbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgdmFyIHN5bmNlZFNpZ25hbCA9IHRoaXMuX3N5bmNlZFNpZ25hbHNbaV07XG5cdCAgICAgICAgICAgIGlmIChzeW5jZWRTaWduYWwuc2lnbmFsID09PSBzaWduYWwpIHtcblx0ICAgICAgICAgICAgICAgIHN5bmNlZFNpZ25hbC5yYXRpby5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICBzeW5jZWRTaWduYWwuc2lnbmFsLnZhbHVlID0gc3luY2VkU2lnbmFsLmluaXRpYWw7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zeW5jZWRTaWduYWxzLnNwbGljZShpLCAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnYnBtJyk7XG5cdCAgICAgICAgdGhpcy5icG0gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0SU5JVElBTElaQVRJT05cblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIHZhciBUcmFuc3BvcnRDb25zdHJ1Y3RvciA9IFRvbmUuVHJhbnNwb3J0O1xuXHQgICAgVG9uZS5UcmFuc3BvcnQgPSBuZXcgVHJhbnNwb3J0Q29uc3RydWN0b3IoKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuVHJhbnNwb3J0IGluc3RhbmNlb2YgVHJhbnNwb3J0Q29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQgPSBjb250ZXh0LlRyYW5zcG9ydDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydCA9IG5ldyBUcmFuc3BvcnRDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3N0b3JlIHRoZSBUcmFuc3BvcnQgb24gdGhlIGNvbnRleHQgc28gaXQgY2FuIGJlIHJldHJpZXZlZCBsYXRlclxuXHQgICAgICAgIGNvbnRleHQuVHJhbnNwb3J0ID0gVG9uZS5UcmFuc3BvcnQ7XG5cdCAgICB9KTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignY2xvc2UnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0LlRyYW5zcG9ydCBpbnN0YW5jZW9mIFRyYW5zcG9ydENvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIGNvbnRleHQuVHJhbnNwb3J0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVm9sdW1lIGlzIGEgc2ltcGxlIHZvbHVtZSBub2RlLCB1c2VmdWwgZm9yIGNyZWF0aW5nIGEgdm9sdW1lIGZhZGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFt2b2x1bWU9MF0gdGhlIGluaXRpYWwgdm9sdW1lXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHZvbCA9IG5ldyBUb25lLlZvbHVtZSgtMTIpO1xuXHRcdCAqIGluc3RydW1lbnQuY2hhaW4odm9sLCBUb25lLk1hc3Rlcik7XG5cdFx0ICovXG5cdCAgICBUb25lLlZvbHVtZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3ZvbHVtZSddLCBUb25lLlZvbHVtZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSBvdXRwdXQgbm9kZVxuXHRcdFx0ICogQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy52b2x1bWUsIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdW5tdXRlZCB2b2x1bWVcblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl91bm11dGVkVm9sdW1lID0gb3B0aW9ucy52b2x1bWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZvbHVtZSBjb250cm9sIGluIGRlY2liZWxzLlxuXHRcdFx0ICogIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMub3V0cHV0LmdhaW47XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBtdXRlIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlZvbHVtZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Wb2x1bWUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Wb2x1bWUjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiB2b2x1bWUubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Wb2x1bWUucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMudm9sdW1lLnZhbHVlID09PSAtSW5maW5pdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5tdXRlICYmIG11dGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3VubXV0ZWRWb2x1bWUgPSB0aGlzLnZvbHVtZS52YWx1ZTtcblx0ICAgICAgICAgICAgICAgIC8vbWF5YmUgaXQgc2hvdWxkIHJhbXAgaGVyZT9cblx0ICAgICAgICAgICAgICAgIHRoaXMudm9sdW1lLnZhbHVlID0gLUluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubXV0ZSAmJiAhbXV0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy52b2x1bWUudmFsdWUgPSB0aGlzLl91bm11dGVkVm9sdW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVm9sdW1lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlZvbHVtZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmlucHV0LmRpc3Bvc2UoKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlZvbHVtZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIHNpbmdsZSBtYXN0ZXIgb3V0cHV0IHdoaWNoIGlzIGNvbm5lY3RlZCB0byB0aGVcblx0XHQgKiAgICAgICAgICBBdWRpb0Rlc3RpbmF0aW9uTm9kZSAoYWthIHlvdXIgc3BlYWtlcnMpLlxuXHRcdCAqICAgICAgICAgIEl0IHByb3ZpZGVzIHVzZWZ1bCBjb252ZW5pZW5jZXMgc3VjaCBhcyB0aGUgYWJpbGl0eVxuXHRcdCAqICAgICAgICAgIHRvIHNldCB0aGUgdm9sdW1lIGFuZCBtdXRlIHRoZSBlbnRpcmUgYXBwbGljYXRpb24uXG5cdFx0ICogICAgICAgICAgSXQgYWxzbyBnaXZlcyB5b3UgdGhlIGFiaWxpdHkgdG8gYXBwbHkgbWFzdGVyIGVmZmVjdHMgdG8geW91ciBhcHBsaWNhdGlvbi5cblx0XHQgKiAgICAgICAgICA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgIExpa2UgVG9uZS5UcmFuc3BvcnQsIEEgc2luZ2xlIFRvbmUuTWFzdGVyIGlzIGNyZWF0ZWRcblx0XHQgKiAgICAgICAgICBvbiBpbml0aWFsaXphdGlvbiBhbmQgeW91IGRvIG5vdCBuZWVkIHRvIGV4cGxpY2l0bHkgY29uc3RydWN0IG9uZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RoZSBhdWRpbyB3aWxsIGdvIGZyb20gdGhlIG9zY2lsbGF0b3IgdG8gdGhlIHNwZWFrZXJzXG5cdFx0ICogb3NjaWxsYXRvci5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0XHQgKiAvL2EgY29udmVuaWVuY2UgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIG1hc3RlciBvdXRwdXQgaXMgYWxzbyBwcm92aWRlZDpcblx0XHQgKiBvc2NpbGxhdG9yLnRvTWFzdGVyKCk7XG5cdFx0ICogLy90aGUgYWJvdmUgdHdvIGV4YW1wbGVzIGFyZSBlcXVpdmFsZW50LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5NYXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHByaXZhdGUgdm9sdW1lIG5vZGVcblx0XHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG1hc3RlciBvdXRwdXQuXG5cdFx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLm91dHB1dCwgdGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWFzdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3Rlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk1hc3RlciNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIFRvbmUuTWFzdGVyLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWFzdGVyLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIG1hc3RlciBlZmZlY3RzIGNoYWluLiBOT1RFOiB0aGlzIHdpbGwgZGlzY29ubmVjdCBhbnkgbm9kZXMgd2hpY2ggd2VyZSBwcmV2aW91c2x5XG5cdFx0ICogIGNoYWluZWQgaW4gdGhlIG1hc3RlciBlZmZlY3RzIGNoYWluLlxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvTm9kZXxUb25lfSBhcmdzLi4uIEFsbCBhcmd1bWVudHMgd2lsbCBiZSBjb25uZWN0ZWQgaW4gYSByb3dcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIE1hc3RlciB3aWxsIGJlIHJvdXRlZCB0aHJvdWdoIGl0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NYXN0ZXJ9ICB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zb21lIG92ZXJhbGwgY29tcHJlc3Npb24gdG8ga2VlcCB0aGUgbGV2ZWxzIGluIGNoZWNrXG5cdFx0ICogdmFyIG1hc3RlckNvbXByZXNzb3IgPSBuZXcgVG9uZS5Db21wcmVzc29yKHtcblx0XHQgKiBcdFwidGhyZXNob2xkXCIgOiAtNixcblx0XHQgKiBcdFwicmF0aW9cIiA6IDMsXG5cdFx0ICogXHRcImF0dGFja1wiIDogMC41LFxuXHRcdCAqIFx0XCJyZWxlYXNlXCIgOiAwLjFcblx0XHQgKiB9KTtcblx0XHQgKiAvL2dpdmUgYSBsaXR0bGUgYm9vc3QgdG8gdGhlIGxvd3Ncblx0XHQgKiB2YXIgbG93QnVtcCA9IG5ldyBUb25lLkZpbHRlcigyMDAsIFwibG93c2hlbGZcIik7XG5cdFx0ICogLy9yb3V0ZSBldmVyeXRoaW5nIHRocm91Z2ggdGhlIGZpbHRlclxuXHRcdCAqIC8vYW5kIGNvbXByZXNzb3IgYmVmb3JlIGdvaW5nIHRvIHRoZSBzcGVha2Vyc1xuXHRcdCAqIFRvbmUuTWFzdGVyLmNoYWluKGxvd0J1bXAsIG1hc3RlckNvbXByZXNzb3IpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NYXN0ZXIucHJvdG90eXBlLmNoYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4uYXBwbHkodGhpcy5pbnB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NYXN0ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3Rlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEFVR01FTlQgVE9ORSdzIFBST1RPVFlQRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgQ29ubmVjdCAndGhpcycgdG8gdGhlIG1hc3RlciBvdXRwdXQuIFNob3J0aGFuZCBmb3IgdGhpcy5jb25uZWN0KFRvbmUuTWFzdGVyKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Nvbm5lY3QgYW4gb3NjaWxsYXRvciB0byB0aGUgbWFzdGVyIG91dHB1dFxuXHRcdCAqIHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkudG9NYXN0ZXIoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS50b01hc3RlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIGlmICh3aW5kb3cuQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgLy8gQWxzbyBhdWdtZW50IEF1ZGlvTm9kZSdzIHByb3RvdHlwZSB0byBpbmNsdWRlIHRvTWFzdGVyIGFzIGEgY29udmVuaWVuY2Vcblx0ICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLnRvTWFzdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHQgICAgLyoqXG5cdFx0ICogIGluaXRpYWxpemUgdGhlIG1vZHVsZSBhbmQgbGlzdGVuIGZvciBuZXcgYXVkaW8gY29udGV4dHNcblx0XHQgKi9cblx0ICAgIHZhciBNYXN0ZXJDb25zdHJ1Y3RvciA9IFRvbmUuTWFzdGVyO1xuXHQgICAgVG9uZS5NYXN0ZXIgPSBuZXcgTWFzdGVyQ29uc3RydWN0b3IoKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgLy8gaWYgaXQgYWxyZWFkeSBleGlzdHMsIGp1c3QgcmVzdG9yZSBpdFxuXHQgICAgICAgIGlmIChjb250ZXh0Lk1hc3RlciBpbnN0YW5jZW9mIE1hc3RlckNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgIFRvbmUuTWFzdGVyID0gY29udGV4dC5NYXN0ZXI7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgVG9uZS5NYXN0ZXIgPSBuZXcgTWFzdGVyQ29uc3RydWN0b3IoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgY29udGV4dC5NYXN0ZXIgPSBUb25lLk1hc3Rlcjtcblx0ICAgIH0pO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdjbG9zZScsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuTWFzdGVyIGluc3RhbmNlb2YgTWFzdGVyQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgY29udGV4dC5NYXN0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmUuTWFzdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJhc2UgY2xhc3MgZm9yIHNvdXJjZXMuIFNvdXJjZXMgaGF2ZSBzdGFydC9zdG9wIG1ldGhvZHNcblx0XHQgKiAgICAgICAgICBhbmQgdGhlIGFiaWxpdHkgdG8gYmUgc3luY2VkIHRvIHRoZVxuXHRcdCAqICAgICAgICAgIHN0YXJ0L3N0b3Agb2YgVG9uZS5UcmFuc3BvcnQuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL011bHRpcGxlIHN0YXRlIGNoYW5nZSBldmVudHMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIsXG5cdFx0ICogLy9idXQgbXVzdCBiZSBzZXQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgYW5kIHdpdGggYXNjZW5kaW5nIHRpbWVzXG5cdFx0ICpcblx0XHQgKiAvLyBPS1xuXHRcdCAqIHN0YXRlLnN0YXJ0KCkuc3RvcChcIiswLjJcIik7XG5cdFx0ICogLy8gQU5EXG5cdFx0ICogc3RhdGUuc3RhcnQoKS5zdG9wKFwiKzAuMlwiKS5zdGFydChcIiswLjRcIikuc3RvcChcIiswLjdcIilcblx0XHQgKlxuXHRcdCAqIC8vIEJBRFxuXHRcdCAqIHN0YXRlLnN0b3AoXCIrMC4yXCIpLnN0YXJ0KCk7XG5cdFx0ICogLy8gT1Jcblx0XHQgKiBzdGF0ZS5zdGFydChcIiswLjNcIikuc3RvcChcIiswLjJcIik7XG5cdFx0ICpcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuU291cmNlLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvdXRwdXQgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogc291cmNlLnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFx0S2VlcCB0cmFjayBvZiB0aGUgc2NoZWR1bGVkIHN0YXRlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLm1lbW9yeSA9IDEwMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3luY2VkIGBzdGFydGAgY2FsbGJhY2sgZnVuY3Rpb24gZnJvbSB0aGUgdHJhbnNwb3J0XG5cdFx0XHQgKiAgQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBLZWVwIHRyYWNrIG9mIGFsbCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IGlkc1xuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IFtdO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgb3V0cHV0IGV4cGxpY2l0bHkgc3RlcmVvXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLm91dHB1dC5vdXRwdXQuY2hhbm5lbENvdW50ID0gMjtcblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICAvL211dGUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU291cmNlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU291cmNlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5UcmFuc3BvcnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHNvdXJjZS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNvdXJjZS5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vb3ZlcndyaXRlIHRoZXNlIGZ1bmN0aW9uc1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLl9zdGFydCA9IFRvbmUubm9PcDtcblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5yZXN0YXJ0ID0gVG9uZS5ub09wO1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLl9zdG9wID0gVG9uZS5ub09wO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBzb3VyY2UgYXQgdGhlIHNwZWNpZmllZCB0aW1lLiBJZiBubyB0aW1lIGlzIGdpdmVuLFxuXHRcdCAqICBzdGFydCB0aGUgc291cmNlIG5vdy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBzb3VyY2Ugc2hvdWxkIGJlIHN0YXJ0ZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zdGFydChcIiswLjVcIik7IC8vc3RhcnRzIHRoZSBzb3VyY2UgMC41IHNlY29uZHMgZnJvbSBub3dcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSAmJiB0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0LnNlY29uZHM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2lmIGl0J3Mgc3RhcnRlZCwgc3RvcCBpdCBhbmQgcmVzdGFydCBpdFxuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5yZXN0YXJ0KHRpbWUsIG9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RhcnRlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgb2Zmc2V0IHRpbWUgdG8gdGhlIGV2ZW50XG5cdCAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQodGltZSk7XG5cdCAgICAgICAgICAgICAgICBldmVudC5vZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LmR1cmF0aW9uID0gZHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICB2YXIgc2NoZWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHQsIG9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCB0aW1lKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZC5wdXNoKHNjaGVkKTtcblx0ICAgICAgICAgICAgICAgIC8vaWYgaXQncyBhbHJlYWR5IHN0YXJ0ZWRcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3luY2VkU3RhcnQodGhpcy5ub3coKSwgVG9uZS5UcmFuc3BvcnQuc2Vjb25kcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdGFydC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBzb3VyY2UgYXQgdGhlIHNwZWNpZmllZCB0aW1lLiBJZiBubyB0aW1lIGlzIGdpdmVuLFxuXHRcdCAqICBzdG9wIHRoZSBzb3VyY2Ugbm93LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHNvdXJjZSBzaG91bGQgYmUgc3RvcHBlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0b3AoKTsgLy8gc3RvcHMgdGhlIHNvdXJjZSBpbW1lZGlhdGVseVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGltZSkgJiYgdGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydC5zZWNvbmRzO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCF0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBzY2hlZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKHRoaXMuX3N0b3AuYmluZCh0aGlzKSwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlZC5wdXNoKHNjaGVkKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN5bmMgdGhlIHNvdXJjZSB0byB0aGUgVHJhbnNwb3J0IHNvIHRoYXQgYWxsIHN1YnNlcXVlbnRcblx0XHQgKiAgY2FsbHMgdG8gYHN0YXJ0YCBhbmQgYHN0b3BgIGFyZSBzeW5jZWQgdG8gdGhlIFRyYW5zcG9ydFRpbWVcblx0XHQgKiAgaW5zdGVhZCBvZiB0aGUgQXVkaW9Db250ZXh0IHRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zeW5jIHRoZSBzb3VyY2Ugc28gdGhhdCBpdCBwbGF5cyBiZXR3ZWVuIDAgYW5kIDAuMyBvbiB0aGUgVHJhbnNwb3J0J3MgdGltZWxpbmVcblx0XHQgKiBzb3VyY2Uuc3luYygpLnN0YXJ0KDApLnN0b3AoMC4zKTtcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoKTtcblx0XHQgKlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB3aXRoIGFuIG9mZnNldCBhbmQgdGhlIHN5bmMnZWQgc291cmNlc1xuXHRcdCAqIC8vd2lsbCBzdGFydCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvblxuXHRcdCAqIHNvdXJjZS5zeW5jKCkuc3RhcnQoMC4xKTtcblx0XHQgKiAvL3RoZSBzb3VyY2Ugd2lsbCBiZSBpbnZva2VkIHdpdGggYW4gb2Zmc2V0IG9mIDAuNFxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KFwiKzAuNVwiLCAwLjUpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLl9zeW5jZWRTdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldCA+IDApIHtcblx0ICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgcGxheWJhY2sgc3RhdGUgYXQgdGhhdCB0aW1lXG5cdCAgICAgICAgICAgICAgICB2YXIgc3RhdGVFdmVudCA9IHRoaXMuX3N0YXRlLmdldChvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgLy8gbGlzdGVuIGZvciBzdGFydCBldmVudHMgd2hpY2ggbWF5IG9jY3VyIGluIHRoZSBtaWRkbGUgb2YgdGhlIHN5bmMnZWQgdGltZVxuXHQgICAgICAgICAgICAgICAgaWYgKHN0YXRlRXZlbnQgJiYgc3RhdGVFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIHN0YXRlRXZlbnQudGltZSAhPT0gb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBvZmZzZXRcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSBvZmZzZXQgLSB0aGlzLnRvU2Vjb25kcyhzdGF0ZUV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVFdmVudC5kdXJhdGlvbikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKHN0YXRlRXZlbnQuZHVyYXRpb24pIC0gc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUsIHRoaXMudG9TZWNvbmRzKHN0YXRlRXZlbnQub2Zmc2V0KSArIHN0YXJ0T2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3luY2VkU3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHZhciBzZWNvbmRzID0gVG9uZS5UcmFuc3BvcnQuZ2V0U2Vjb25kc0F0VGltZShNYXRoLm1heCh0aW1lIC0gdGhpcy5zYW1wbGVUaW1lLCAwKSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShzZWNvbmRzKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9uKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9zeW5jZWRTdGFydCk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub24oJ3N0b3AgcGF1c2UgbG9vcEVuZCcsIHRoaXMuX3N5bmNlZFN0b3ApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbnN5bmMgdGhlIHNvdXJjZSB0byB0aGUgVHJhbnNwb3J0LiBTZWUgVG9uZS5Tb3VyY2Uuc3luY1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5vZmYoJ3N0b3AgcGF1c2UgbG9vcEVuZCcsIHRoaXMuX3N5bmNlZFN0b3ApO1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5vZmYoJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX3N5bmNlZFN0YXJ0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gZmFsc2U7XG5cdCAgICAgICAgLy8gY2xlYXIgYWxsIG9mIHRoZSBzY2hlZHVsZWQgaWRzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zY2hlZHVsZWQubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5fc2NoZWR1bGVkW2ldO1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihpZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IFtdO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCgwKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKlx0Q2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNvdXJjZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEF1ZGlvQnVmZmVyLmNvcHlUby9Gcm9tQ2hhbm5lbCBwb2x5ZmlsbFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCFBdWRpb0J1ZmZlci5wcm90b3R5cGUuY29weVRvQ2hhbm5lbCkge1xuXHQgICAgICAgICAgICBBdWRpb0J1ZmZlci5wcm90b3R5cGUuY29weVRvQ2hhbm5lbCA9IGZ1bmN0aW9uIChzcmMsIGNoYW5OdW0sIHN0YXJ0KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IHRoaXMuZ2V0Q2hhbm5lbERhdGEoY2hhbk51bSk7XG5cdCAgICAgICAgICAgICAgICBzdGFydCA9IHN0YXJ0IHx8IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5uZWwubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2kgKyBzdGFydF0gPSBzcmNbaV07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIEF1ZGlvQnVmZmVyLnByb3RvdHlwZS5jb3B5RnJvbUNoYW5uZWwgPSBmdW5jdGlvbiAoZGVzdCwgY2hhbk51bSwgc3RhcnQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gdGhpcy5nZXRDaGFubmVsRGF0YShjaGFuTnVtKTtcblx0ICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVzdC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGRlc3RbaV0gPSBjaGFubmVsW2kgKyBzdGFydF07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEJ1ZmZlciBsb2FkaW5nIGFuZCBzdG9yYWdlLiBUb25lLkJ1ZmZlciBpcyB1c2VkIGludGVybmFsbHkgYnkgYWxsXG5cdFx0ICogICAgICAgICAgY2xhc3NlcyB0aGF0IG1ha2UgcmVxdWVzdHMgZm9yIGF1ZGlvIGZpbGVzIHN1Y2ggYXMgVG9uZS5QbGF5ZXIsXG5cdFx0ICogICAgICAgICAgVG9uZS5TYW1wbGVyIGFuZCBUb25lLkNvbnZvbHZlci5cblx0XHQgKlxuXHRcdCAqICAgICAgICAgIEFzaWRlIGZyb20gbG9hZCBjYWxsYmFja3MgZnJvbSBpbmRpdmlkdWFsIGJ1ZmZlcnMsIFRvbmUuQnVmZmVyXG5cdFx0ICogIFx0XHRwcm92aWRlcyBldmVudHMgd2hpY2gga2VlcCB0cmFjayBvZiB0aGUgbG9hZGluZyBwcm9ncmVzc1xuXHRcdCAqICBcdFx0b2YgX2FsbF8gb2YgdGhlIGJ1ZmZlcnMuIFRoZXNlIGFyZSBUb25lLkJ1ZmZlci5vbihcImxvYWRcIiAvIFwicHJvZ3Jlc3NcIiAvIFwiZXJyb3JcIilcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7QXVkaW9CdWZmZXJ8U3RyaW5nfSB1cmwgVGhlIHVybCB0byBsb2FkLCBvciB0aGUgYXVkaW8gYnVmZmVyIHRvIHNldC5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBBIGNhbGxiYWNrIHdoaWNoIGlzIGludm9rZWQgYWZ0ZXIgdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQncyByZWNvbW1lbmRlZCB0byB1c2UgYFRvbmUuQnVmZmVyLm9uKCdsb2FkJywgY2FsbGJhY2spYCBpbnN0ZWFkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luY2UgaXQgd2lsbCBnaXZlIHlvdSBhIGNhbGxiYWNrIHdoZW4gX2FsbF8gYnVmZmVycyBhcmUgbG9hZGVkLlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25lcnJvciBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGlmIHRoZXJlIGlzIGFuIGVycm9yXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihcInBhdGgvdG8vc291bmQubXAzXCIsIGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3RoZSBidWZmZXIgaXMgbm93IGF2YWlsYWJsZS5cblx0XHQgKiBcdHZhciBidWZmID0gYnVmZmVyLmdldCgpO1xuXHRcdCAqIH0pO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIGxvYWQgcHJvdmlkZSBmYWxsYmFjayBleHRlbnNpb24gdHlwZXMgaWYgdGhlIGZpcnN0IHR5cGUgaXMgbm90IHN1cHBvcnRlZC5cblx0XHQgKiB2YXIgYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKFwicGF0aC90by9zb3VuZC5bbXAzfG9nZ3x3YXZdXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCcsXG5cdCAgICAgICAgICAgICdvbmVycm9yJ1xuXHQgICAgICAgIF0sIFRvbmUuQnVmZmVyKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3RvcmVzIHRoZSBsb2FkZWQgQXVkaW9CdWZmZXJcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaW5kaWNhdGVzIGlmIHRoZSBidWZmZXIgc2hvdWxkIGJlIHJldmVyc2VkIG9yIG5vdFxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yZXZlcnNlZCA9IG9wdGlvbnMucmV2ZXJzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgWEhSXG5cdFx0XHQgKiAgQHR5cGUgIHtYTUxIdHRwUmVxdWVzdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFByaXZhdGUgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vbmxvYWQgPSBUb25lLm5vT3A7XG5cdCAgICAgICAgaWYgKG9wdGlvbnMudXJsIGluc3RhbmNlb2YgQXVkaW9CdWZmZXIgfHwgb3B0aW9ucy51cmwgaW5zdGFuY2VvZiBUb25lLkJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLnNldChvcHRpb25zLnVybCk7XG5cdCAgICAgICAgICAgIC8vIGludm9rZSB0aGUgb25sb2FkIGNhbGxiYWNrXG5cdCAgICAgICAgICAgIGlmIChvcHRpb25zLm9ubG9hZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9hZGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29ubG9hZCA9IG9wdGlvbnMub25sb2FkO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKG9wdGlvbnMudXJsKSkge1xuXHQgICAgICAgICAgICB0aGlzLmxvYWQob3B0aW9ucy51cmwpLnRoZW4ob3B0aW9ucy5vbmxvYWQpLmNhdGNoKG9wdGlvbnMub25lcnJvcik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQnVmZmVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndXJsJzogdW5kZWZpbmVkLFxuXHQgICAgICAgICdyZXZlcnNlJzogZmFsc2UsXG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnb25lcnJvcic6IFRvbmUubm9PcFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXNzIGluIGFuIEF1ZGlvQnVmZmVyIG9yIFRvbmUuQnVmZmVyIHRvIHNldCB0aGUgdmFsdWVcblx0XHQgKiAgb2YgdGhpcyBidWZmZXIuXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9CdWZmZXJ8VG9uZS5CdWZmZXJ9IGJ1ZmZlciB0aGUgYnVmZmVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICBpZiAoYnVmZmVyIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIpIHtcblx0ICAgICAgICAgICAgaWYgKGJ1ZmZlci5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2J1ZmZlciA9IGJ1ZmZlci5nZXQoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlci5fb25sb2FkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25sb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQHJldHVybiB7QXVkaW9CdWZmZXJ9IFRoZSBhdWRpbyBidWZmZXIgc3RvcmVkIGluIHRoZSBvYmplY3QuXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIE1ha2VzIGFuIHhociByZXFlc3QgZm9yIHRoZSBzZWxlY3RlZCB1cmwgdGhlbiBkZWNvZGVzXG5cdFx0ICogIHRoZSBmaWxlIGFzIGFuIGF1ZGlvIGJ1ZmZlci4gSW52b2tlc1xuXHRcdCAqICB0aGUgY2FsbGJhY2sgb25jZSB0aGUgYXVkaW8gYnVmZmVyIGxvYWRzLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGJ1ZmZlciB0byBsb2FkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGZpbGV0eXBlIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICBicm93c2VyLlxuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX0gcmV0dXJucyBhIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2l0aCB0aGUgVG9uZS5CdWZmZXJcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKHVybCwgb25sb2FkLCBvbmVycm9yKSB7XG5cdCAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAobG9hZCwgZXJyb3IpIHtcblx0ICAgICAgICAgICAgdGhpcy5feGhyID0gVG9uZS5CdWZmZXIubG9hZCh1cmwsIC8vc3VjY2Vzc1xuXHQgICAgICAgICAgICBmdW5jdGlvbiAoYnVmZikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuc2V0KGJ1ZmYpO1xuXHQgICAgICAgICAgICAgICAgbG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIGlmIChvbmxvYWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgLy9lcnJvclxuXHQgICAgICAgICAgICBmdW5jdGlvbiAoZXJyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgZXJyb3IoZXJyKTtcblx0ICAgICAgICAgICAgICAgIGlmIChvbmVycm9yKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb25lcnJvcihlcnIpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHByb21pc2U7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICBpZiAodGhpcy5feGhyKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZSh0aGlzLl94aHIpO1xuXHQgICAgICAgICAgICB0aGlzLl94aHIuYWJvcnQoKTtcblx0ICAgICAgICAgICAgdGhpcy5feGhyID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlciBpcyBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID4gMDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGR1cmF0aW9uXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnZHVyYXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGluIHNhbXBsZXNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBsZW5ndGhcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubGVuZ3RoO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2YgZGlzY3JldGUgYXVkaW8gY2hhbm5lbHMuIFJldHVybnMgMCBpZiBubyBidWZmZXJcblx0XHQgKiBpcyBsb2FkZWQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgbnVtYmVyT2ZDaGFubmVsc1xuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ251bWJlck9mQ2hhbm5lbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubnVtYmVyT2ZDaGFubmVscztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBhdWRpbyBidWZmZXIgZnJvbSB0aGUgYXJyYXkuIFRvIGNyZWF0ZSBhIG11bHRpY2hhbm5lbCBBdWRpb0J1ZmZlcixcblx0XHQgKiAgcGFzcyBpbiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkuXG5cdFx0ICogIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbCB0aGUgYXVkaW8gYnVmZmVyXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KSB7XG5cdCAgICAgICAgdmFyIGlzTXVsdGlkaW1lbnNpb25hbCA9IGFycmF5WzBdLmxlbmd0aCA+IDA7XG5cdCAgICAgICAgdmFyIGNoYW5uZWxzID0gaXNNdWx0aWRpbWVuc2lvbmFsID8gYXJyYXkubGVuZ3RoIDogMTtcblx0ICAgICAgICB2YXIgbGVuID0gaXNNdWx0aWRpbWVuc2lvbmFsID8gYXJyYXlbMF0ubGVuZ3RoIDogYXJyYXkubGVuZ3RoO1xuXHQgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyKGNoYW5uZWxzLCBsZW4sIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlKTtcblx0ICAgICAgICBpZiAoIWlzTXVsdGlkaW1lbnNpb25hbCAmJiBjaGFubmVscyA9PT0gMSkge1xuXHQgICAgICAgICAgICBhcnJheSA9IFthcnJheV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2hhbm5lbHM7IGMrKykge1xuXHQgICAgICAgICAgICBidWZmZXIuY29weVRvQ2hhbm5lbChhcnJheVtjXSwgYyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IGJ1ZmZlcjtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBcdFN1bXMgbXVsaXBsZSBjaGFubmVscyBpbnRvIDEgY2hhbm5lbFxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IGNoYW5uZWwgT3B0aW9uYWxseSBvbmx5IGNvcHkgYSBzaW5nbGUgY2hhbm5lbCBmcm9tIHRoZSBhcnJheS5cblx0XHQgKiAgQHJldHVybiB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUudG9Nb25vID0gZnVuY3Rpb24gKGNoYW5OdW0pIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcihjaGFuTnVtKSkge1xuXHQgICAgICAgICAgICB0aGlzLmZyb21BcnJheSh0aGlzLnRvQXJyYXkoY2hhbk51bSkpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBvdXRwdXRBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5sZW5ndGgpO1xuXHQgICAgICAgICAgICB2YXIgbnVtQ2hhbm5lbHMgPSB0aGlzLm51bWJlck9mQ2hhbm5lbHM7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgbnVtQ2hhbm5lbHM7IGNoYW5uZWwrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWxBcnJheSA9IHRoaXMudG9BcnJheShjaGFubmVsKTtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbEFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3V0cHV0QXJyYXlbaV0gKz0gY2hhbm5lbEFycmF5W2ldO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vZGl2aWRlIGJ5IHRoZSBudW1iZXIgb2YgY2hhbm5lbHNcblx0ICAgICAgICAgICAgb3V0cHV0QXJyYXkgPSBvdXRwdXRBcnJheS5tYXAoZnVuY3Rpb24gKHNhbXBsZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHNhbXBsZSAvIG51bUNoYW5uZWxzO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5mcm9tQXJyYXkob3V0cHV0QXJyYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBcdEdldCB0aGUgYnVmZmVyIGFzIGFuIGFycmF5LiBTaW5nbGUgY2hhbm5lbCBidWZmZXJzIHdpbGwgcmV0dXJuIGEgMS1kaW1lbnNpb25hbFxuXHRcdCAqIFx0RmxvYXQzMkFycmF5LCBhbmQgbXVsdGljaGFubmVsIGJ1ZmZlcnMgd2lsbCByZXR1cm4gbXVsdGlkaW1lbnNpb25hbCBhcnJheXMuXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gY2hhbm5lbCBPcHRpb25hbGx5IG9ubHkgY29weSBhIHNpbmdsZSBjaGFubmVsIGZyb20gdGhlIGFycmF5LlxuXHRcdCAqICBAcmV0dXJuIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKGNoYW5uZWwpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcihjaGFubmVsKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDaGFubmVsRGF0YShjaGFubmVsKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMubnVtYmVyT2ZDaGFubmVscyA9PT0gMSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy50b0FycmF5KDApO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciByZXQgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCB0aGlzLm51bWJlck9mQ2hhbm5lbHM7IGMrKykge1xuXHQgICAgICAgICAgICAgICAgcmV0W2NdID0gdGhpcy5nZXRDaGFubmVsRGF0YShjKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgRmxvYXQzMkFycmF5IHJlcHJlc2VudGluZyB0aGUgUENNIGF1ZGlvIGRhdGEgZm9yIHRoZSBzcGVjaWZpYyBjaGFubmVsLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBjaGFubmVsICBUaGUgY2hhbm5lbCBudW1iZXIgdG8gcmV0dXJuXG5cdFx0ICogIEByZXR1cm4gIHtGbG9hdDMyQXJyYXl9ICBUaGUgYXVkaW8gYXMgYSBUeXBlZEFycmF5XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuZ2V0Q2hhbm5lbERhdGEgPSBmdW5jdGlvbiAoY2hhbm5lbCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2hhbm5lbCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEN1dCBhIHN1YnNlY3Rpb24gb2YgdGhlIGFycmF5IGFuZCByZXR1cm4gYSBidWZmZXIgb2YgdGhlXG5cdFx0ICogIHN1YnNlY3Rpb24uIERvZXMgbm90IG1vZGlmeSB0aGUgb3JpZ2luYWwgYnVmZmVyXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnQgVGhlIHRpbWUgdG8gc3RhcnQgdGhlIHNsaWNlXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGVuZCBUaGUgZW5kIHRpbWUgdG8gc2xpY2UuIElmIG5vbmUgaXMgZ2l2ZW5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIHdpbGwgZGVmYXVsdCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXJcblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIChzdGFydCwgZW5kKSB7XG5cdCAgICAgICAgZW5kID0gVG9uZS5kZWZhdWx0QXJnKGVuZCwgdGhpcy5kdXJhdGlvbik7XG5cdCAgICAgICAgdmFyIHN0YXJ0U2FtcGxlcyA9IE1hdGguZmxvb3IodGhpcy5jb250ZXh0LnNhbXBsZVJhdGUgKiB0aGlzLnRvU2Vjb25kcyhzdGFydCkpO1xuXHQgICAgICAgIHZhciBlbmRTYW1wbGVzID0gTWF0aC5mbG9vcih0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSAqIHRoaXMudG9TZWNvbmRzKGVuZCkpO1xuXHQgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1iZXJPZkNoYW5uZWxzOyBpKyspIHtcblx0ICAgICAgICAgICAgcmVwbGFjZW1lbnRbaV0gPSB0aGlzLnRvQXJyYXkoaSkuc2xpY2Uoc3RhcnRTYW1wbGVzLCBlbmRTYW1wbGVzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHJldEJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcigpLmZyb21BcnJheShyZXBsYWNlbWVudCk7XG5cdCAgICAgICAgcmV0dXJuIHJldEJ1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV2ZXJzZSB0aGUgYnVmZmVyLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLl9yZXZlcnNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLmxvYWRlZCkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubnVtYmVyT2ZDaGFubmVsczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKHRoaXMuZ2V0Q2hhbm5lbERhdGEoaSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldmVyc2UgdGhlIGJ1ZmZlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgcmV2ZXJzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ3JldmVyc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZlcnNlZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJldikge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fcmV2ZXJzZWQgIT09IHJldikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmV2ZXJzZWQgPSByZXY7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXZlcnNlKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gU1RBVElDIE1FVEhPRFNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9zdGF0aWNhbGx5IGluaGVyaXRzIEVtaXR0ZXIgbWV0aG9kc1xuXHQgICAgVG9uZS5FbWl0dGVyLm1peGluKFRvbmUuQnVmZmVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgc3RhdGljIHF1ZXVlIGZvciBhbGwgb2YgdGhlIHhociByZXF1ZXN0c1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZSA9IFtdO1xuXHQgICAgLyoqXG5cdFx0ICogIEEgcGF0aCB3aGljaCBpcyBwcmVmaXhlZCBiZWZvcmUgZXZlcnkgdXJsLlxuXHRcdCAqICBAdHlwZSAge1N0cmluZ31cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuYmFzZVVybCA9ICcnO1xuXHQgICAgLyoqXG5cdFx0ICogIENyZWF0ZSBhIFRvbmUuQnVmZmVyIGZyb20gdGhlIGFycmF5LiBUbyBjcmVhdGUgYSBtdWx0aWNoYW5uZWwgQXVkaW9CdWZmZXIsXG5cdFx0ICogIHBhc3MgaW4gYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LlxuXHRcdCAqICBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZpbGwgdGhlIGF1ZGlvIGJ1ZmZlclxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gQSBUb25lLkJ1ZmZlciBjcmVhdGVkIGZyb20gdGhlIGFycmF5XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IFRvbmUuQnVmZmVyKCkuZnJvbUFycmF5KGFycmF5KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDcmVhdGVzIGEgVG9uZS5CdWZmZXIgZnJvbSBhIFVSTCwgcmV0dXJucyBhIHByb21pc2Vcblx0XHQgKiB3aGljaCByZXNvbHZlcyB0byBhIFRvbmUuQnVmZmVyXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSB1cmwgVGhlIHVybCB0byBsb2FkLlxuXHRcdCAqIEByZXR1cm4ge1Byb21pc2U8VG9uZS5CdWZmZXI+fSAgICAgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHRvIGEgVG9uZS5CdWZmZXJcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmZyb21VcmwgPSBmdW5jdGlvbiAodXJsKSB7XG5cdCAgICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcigpO1xuXHQgICAgICAgIHJldHVybiBidWZmZXIubG9hZCh1cmwpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlbW92ZSBhbiB4aHIgcmVxdWVzdCBmcm9tIHRoZSBkb3dubG9hZCBxdWV1ZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5fcmVtb3ZlRnJvbURvd25sb2FkUXVldWUgPSBmdW5jdGlvbiAocmVxdWVzdCkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLmluZGV4T2YocmVxdWVzdCk7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTG9hZHMgYSB1cmwgdXNpbmcgWE1MSHR0cFJlcXVlc3QuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB1cmxcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gb25sb2FkXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IG9uZXJyb3Jcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gb25wcm9ncmVzc1xuXHRcdCAqICBAcmV0dXJuIHtYTUxIdHRwUmVxdWVzdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBvbmxvYWQsIG9uZXJyb3IpIHtcblx0ICAgICAgICAvL2RlZmF1bHRcblx0ICAgICAgICBvbmxvYWQgPSBUb25lLmRlZmF1bHRBcmcob25sb2FkLCBUb25lLm5vT3ApO1xuXHQgICAgICAgIC8vIHRlc3QgaWYgdGhlIHVybCBjb250YWlucyBtdWx0aXBsZSBleHRlbnNpb25zXG5cdCAgICAgICAgdmFyIG1hdGNoZXMgPSB1cmwubWF0Y2goL1xcWyguK1xcfD8pK1xcXSQvKTtcblx0ICAgICAgICBpZiAobWF0Y2hlcykge1xuXHQgICAgICAgICAgICB2YXIgZXh0ZW5zaW9ucyA9IG1hdGNoZXNbMV0uc3BsaXQoJ3wnKTtcblx0ICAgICAgICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnNbMF07XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZShleHRlbnNpb25zW2ldKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnNbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UobWF0Y2hlc1swXSwgZXh0ZW5zaW9uKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gb25FcnJvcihlKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuZW1pdCgnZXJyb3InLCBlKTtcblx0ICAgICAgICAgICAgaWYgKG9uZXJyb3IpIHtcblx0ICAgICAgICAgICAgICAgIG9uZXJyb3IoZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIG9uUHJvZ3Jlc3MoKSB7XG5cdCAgICAgICAgICAgIC8vY2FsY3VsYXRlIHRoZSBwcm9ncmVzc1xuXHQgICAgICAgICAgICB2YXIgdG90YWxQcm9ncmVzcyA9IDA7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRvdGFsUHJvZ3Jlc3MgKz0gVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWVbaV0ucHJvZ3Jlc3M7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuZW1pdCgncHJvZ3Jlc3MnLCB0b3RhbFByb2dyZXNzIC8gVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUubGVuZ3RoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0ICAgICAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIFRvbmUuQnVmZmVyLmJhc2VVcmwgKyB1cmwsIHRydWUpO1xuXHQgICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcblx0ICAgICAgICAvL3N0YXJ0IG91dCBhcyAwXG5cdCAgICAgICAgcmVxdWVzdC5wcm9ncmVzcyA9IDA7XG5cdCAgICAgICAgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUucHVzaChyZXF1ZXN0KTtcblx0ICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMjAwKSB7XG5cdCAgICAgICAgICAgICAgICBUb25lLmNvbnRleHQuZGVjb2RlQXVkaW9EYXRhKHJlcXVlc3QucmVzcG9uc2UpLnRoZW4oZnVuY3Rpb24gKGJ1ZmYpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnByb2dyZXNzID0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBvblByb2dyZXNzKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgb25sb2FkKGJ1ZmYpO1xuXHQgICAgICAgICAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vZW1pdCB0aGUgZXZlbnQgYXQgdGhlIGVuZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBUb25lLkJ1ZmZlci5lbWl0KCdsb2FkJyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgICAgICAgICBvbkVycm9yKCdUb25lLkJ1ZmZlcjogY291bGQgbm90IGRlY29kZSBhdWRpbyBkYXRhOiAnICsgdXJsKTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgb25FcnJvcignVG9uZS5CdWZmZXI6IGNvdWxkIG5vdCBsb2NhdGUgZmlsZTogJyArIHVybCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG5cdCAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuXHQgICAgICAgICAgICAgICAgLy9vbmx5IGdvIHRvIDk1JSwgdGhlIGxhc3QgNSUgaXMgd2hlbiB0aGUgYXVkaW8gaXMgZGVjb2RlZFxuXHQgICAgICAgICAgICAgICAgcmVxdWVzdC5wcm9ncmVzcyA9IGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsICogMC45NTtcblx0ICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3MoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJlcXVlc3Quc2VuZCgpO1xuXHQgICAgICAgIHJldHVybiByZXF1ZXN0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIGFsbCBvZiB0aGUgZG93bmxvYWRzIGluIHByb2dyZXNzXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5jYW5jZWxEb3dubG9hZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZShyZXF1ZXN0KTtcblx0ICAgICAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiBUb25lLkJ1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2hlY2tzIGEgdXJsJ3MgZXh0ZW5zaW9uIHRvIHNlZSBpZiB0aGUgY3VycmVudCBicm93c2VyIGNhbiBwbGF5IHRoYXQgZmlsZSB0eXBlLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSB1cmwvZXh0ZW5zaW9uIHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybiB7Qm9vbGVhbn0gSWYgdGhlIGZpbGUgZXh0ZW5zaW9uIGNhbiBiZSBwbGF5ZWRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZShcIndhdlwiKTsgLy9yZXR1cm5zIHRydWVcblx0XHQgKiBUb25lLkJ1ZmZlci5zdXBwb3J0c1R5cGUoXCJwYXRoL3RvL2ZpbGUud2F2XCIpOyAvL3JldHVybnMgdHJ1ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlID0gZnVuY3Rpb24gKHVybCkge1xuXHQgICAgICAgIHZhciBleHRlbnNpb24gPSB1cmwuc3BsaXQoJy4nKTtcblx0ICAgICAgICBleHRlbnNpb24gPSBleHRlbnNpb25bZXh0ZW5zaW9uLmxlbmd0aCAtIDFdO1xuXHQgICAgICAgIHZhciByZXNwb25zZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJykuY2FuUGxheVR5cGUoJ2F1ZGlvLycgKyBleHRlbnNpb24pO1xuXHQgICAgICAgIHJldHVybiByZXNwb25zZSAhPT0gJyc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgYSBQcm9taXNlIHdoaWNoIHJlc29sdmVzIHdoZW4gYWxsIG9mIHRoZSBidWZmZXJzIGhhdmUgbG9hZGVkXG5cdFx0ICogIEByZXR1cm4ge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLmxvYWRlZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb25sb2FkLCBvbmVycm9yO1xuXHQgICAgICAgIGZ1bmN0aW9uIHJlbW92ZUV2ZW50cygpIHtcblx0ICAgICAgICAgICAgLy9yZW1vdmUgdGhlIGV2ZW50cyB3aGVuIGl0J3MgcmVzb2x2ZWRcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub2ZmKCdsb2FkJywgb25sb2FkKTtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub2ZmKCdlcnJvcicsIG9uZXJyb3IpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHN1Y2Nlc3MsIGZhaWwpIHtcblx0ICAgICAgICAgICAgb25sb2FkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgc3VjY2VzcygpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBvbmVycm9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgZmFpbCgpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAvL2FkZCB0aGUgZXZlbnQgbGlzdGVuZXJzXG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLm9uKCdsb2FkJywgb25sb2FkKTtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub24oJ2Vycm9yJywgb25lcnJvcik7XG5cdCAgICAgICAgfSkudGhlbihyZW1vdmVFdmVudHMpLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIHJlbW92ZUV2ZW50cygpO1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQnVmZmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgZmlyZS1hbmQtZm9yZ2V0IE9zY2lsbGF0b3JOb2RlLiBBZGRzIHRoZVxuXHRcdCAqICAgICBhYmlsaXR5IHRvIHJlc2NoZWR1bGUgdGhlIHN0b3AgbWV0aG9kLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvQnVmZmVyfFRvbmUuQnVmZmVyfSAgYnVmZmVyICAgVGhlIGJ1ZmZlciB0byBwbGF5XG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgb25sb2FkICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIGlzIGRvbmUgcGxheWluZy5cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5Pc2NpbGxhdG9yTm9kZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRoZVxuXHRcdFx0ICogIGJ1ZmZlciBzb3VyY2UgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBvcHRpb25zLm9uZW5kZWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3Igc3RhcnQgdGltZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvciBzdG9wIHRpbWVcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBub2RlIHdoaWNoIGVudmVsb3BlcyB0aGUgT3NjaWxsYXRvck5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSAge09zY2lsbGF0b3JOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gdGhpcy5jb250ZXh0LmNyZWF0ZU9zY2lsbGF0b3IoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvbm5lY3QodGhpcy5fZ2Fpbk5vZGUpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX29zY2lsbGF0b3IuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS52YWx1ZSA9IG9wdGlvbnMuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fb3NjaWxsYXRvci5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUudmFsdWUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgdGhhdCB0aGUgYnVmZmVyIHJhbXBzIHRvXG5cdFx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSAxO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT3NjaWxsYXRvck5vZGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdvbmVuZGVkJzogVG9uZS5ub09wXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBvc2NpbGxhdG9yLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvck5vZGUjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBwbGF5YmFjayBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gdGVzdCB0aGUgc3RhdGUgYXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuU3RhdGV9ICBUaGUgcGxheWJhY2sgc3RhdGUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSAmJiB0aW1lID49IHRoaXMuX3N0YXJ0VGltZSAmJiAodGhpcy5fc3RvcFRpbWUgPT09IC0xIHx8IHRpbWUgPD0gdGhpcy5fc3RvcFRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0YXJ0ZWQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdCAgICAgKiBTdGFydCB0aGUgb3NjaWxsYXRvciBub2RlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSBXaGVuIHRvIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgKiBAcmV0dXJuIHtPc2NpbGxhdG9yTm9kZX0gICAgICB0aGlzXG5cdCAgICAgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lID09PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydCh0aGlzLl9zdGFydFRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhub3cpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgdGhpcy5fc3RhcnRUaW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBjYWxsIE9zY2lsbGF0b3JOb2RlLnN0YXJ0IG1vcmUgdGhhbiBvbmNlJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHQgICAgICogU2V0cyBhbiBhcmJpdHJhcnkgY3VzdG9tIHBlcmlvZGljIHdhdmVmb3JtIGdpdmVuIGEgUGVyaW9kaWNXYXZlLlxuXHQgICAgICogQHBhcmFtICB7UGVyaW9kaWNXYXZlfSBwZXJpb2RpY1dhdmUgUGVyaW9kaWNXYXZlIHNob3VsZCBiZSBjcmVhdGVkIHdpdGggY29udGV4dC5jcmVhdGVQZXJpb2RpY1dhdmVcblx0ICAgICAqIEByZXR1cm4ge09zY2lsbGF0b3JOb2RlfSB0aGlzXG5cdCAgICAgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFBlcmlvZGljV2F2ZSA9IGZ1bmN0aW9uIChwZXJpb2RpY1dhdmUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNldFBlcmlvZGljV2F2ZShwZXJpb2RpY1dhdmUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHQgICAgICogU3RvcCB0aGUgb3NjaWxsYXRvciBub2RlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSBXaGVuIHRvIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAqIEByZXR1cm4ge09zY2lsbGF0b3JOb2RlfSAgICAgIHRoaXNcblx0ICAgICAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy9jYW5jZWwgdGhlIHByZXZpb3VzIHN0b3Bcblx0ICAgICAgICB0aGlzLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICAvL3Jlc2NoZWR1bGUgaXRcblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGhpcy5fc3RvcFRpbWUpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dCA9IHRoaXMuY29udGV4dC5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdG9wKHRoaXMubm93KCkpO1xuXHQgICAgICAgICAgICB0aGlzLm9uZW5kZWQoKTtcblx0ICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMuX3N0b3BUaW1lIC0gdGhpcy5ub3coKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBhIHNjaGVkdWxlZCBzdG9wIGV2ZW50XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk9zY2lsbGF0b3JOb2RlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuY2FuY2VsU3RvcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCB0aGUgc3RvcCBlbnZlbG9wZVxuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aGlzLl9zdGFydFRpbWUgKyB0aGlzLnNhbXBsZVRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDEsIE1hdGgubWF4KHRoaXMubm93KCksIHRoaXMuX3N0YXJ0VGltZSkpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3NjaWxsYXRvciB0eXBlLiBFaXRoZXIgJ3NpbmUnLCAnc2F3dG9vdGgnLCAnc3F1YXJlJywgb3IgJ3RyaWFuZ2xlJ1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3JOb2RlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk9zY2lsbGF0b3JOb2RlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5vbmVuZGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Pc2NpbGxhdG9yTm9kZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuT3NjaWxsYXRvciBzdXBwb3J0cyBhIG51bWJlciBvZiBmZWF0dXJlcyBpbmNsdWRpbmdcblx0XHQgKiAgICAgICAgIHBoYXNlIHJvdGF0aW9uLCBtdWx0aXBsZSBvc2NpbGxhdG9yIHR5cGVzIChzZWUgVG9uZS5Pc2NpbGxhdG9yLnR5cGUpLFxuXHRcdCAqICAgICAgICAgYW5kIFRyYW5zcG9ydCBzeW5jaW5nIChzZWUgVG9uZS5Pc2NpbGxhdG9yLnN5bmNGcmVxdWVuY3kpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZnJlcXVlbmN5XSBTdGFydGluZyBmcmVxdWVuY3lcblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IFt0eXBlXSBUaGUgb3NjaWxsYXRvciB0eXBlLiBSZWFkIG1vcmUgYWJvdXQgdHlwZSBiZWxvdy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL21ha2UgYW5kIHN0YXJ0IGEgNDQwaHogc2luZSB0b25lXG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoNDQwLCBcInNpbmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWFpbiBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge09zY2lsbGF0b3JOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBlcmlvZGljIHdhdmVcblx0XHRcdCAqICBAdHlwZSB7UGVyaW9kaWNXYXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl93YXZlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGFydGlhbHMgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMucGFydGlhbHMsIFsxXSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgYmV0d2VlbiAwIC0gMzYwXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge3N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG51bGw7XG5cdCAgICAgICAgLy9zZXR1cFxuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5fcGhhc2U7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdwYXJ0aWFscyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBPc2NpbGxhdG9yIHR5cGVzXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IuVHlwZSA9IHtcblx0ICAgICAgICBTaW5lOiAnc2luZScsXG5cdCAgICAgICAgVHJpYW5nbGU6ICd0cmlhbmdsZScsXG5cdCAgICAgICAgU2F3dG9vdGg6ICdzYXd0b290aCcsXG5cdCAgICAgICAgU3F1YXJlOiAnc3F1YXJlJyxcblx0ICAgICAgICBDdXN0b206ICdjdXN0b20nXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL25ldyBvc2NpbGxhdG9yIHdpdGggcHJldmlvdXMgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3JOb2RlKCk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3dhdmUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zZXRQZXJpb2RpY1dhdmUodGhpcy5fd2F2ZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBjb250cm9sIHNpZ25hbCB0byB0aGUgb3NjaWxsYXRvciBmcmVxdWVuY3kgJiBkZXR1bmVcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fb3NjaWxsYXRvcikge1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVzdGFydCB0aGUgb3NjaWxsYXRvci4gRG9lcyBub3Qgc3RvcCB0aGUgb3NjaWxsYXRvciwgYnV0IGluc3RlYWRcblx0XHQgKiBqdXN0IGNhbmNlbHMgYW55IHNjaGVkdWxlZCAnc3RvcCcgZnJvbSBiZWluZyBpbnZva2VkLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lXG5cdFx0ICogQHJldHVybiB7VG9uZS5Pc2NpbGxhdG9yfSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jYW5jZWxTdG9wKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRoaXMudG9TZWNvbmRzKHRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3luYyB0aGUgc2lnbmFsIHRvIHRoZSBUcmFuc3BvcnQncyBicG0uIEFueSBjaGFuZ2VzIHRvIHRoZSB0cmFuc3BvcnRzIGJwbSxcblx0XHQgKiAgd2lsbCBhbHNvIGFmZmVjdCB0aGUgb3NjaWxsYXRvcnMgZnJlcXVlbmN5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gMTIwO1xuXHRcdCAqIG9zYy5mcmVxdWVuY3kudmFsdWUgPSA0NDA7XG5cdFx0ICogLy90aGUgcmF0aW9uIGJldHdlZW4gdGhlIGJwbSBhbmQgdGhlIGZyZXF1ZW5jeSB3aWxsIGJlIG1haW50YWluZWRcblx0XHQgKiBvc2Muc3luY0ZyZXF1ZW5jeSgpO1xuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZSA9IDI0MDtcblx0XHQgKiAvLyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yIGlzIGRvdWJsZWQgdG8gODgwXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLnN5bmNGcmVxdWVuY3kgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQuc3luY1NpZ25hbCh0aGlzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVuc3luYyB0aGUgb3NjaWxsYXRvcidzIGZyZXF1ZW5jeSBmcm9tIHRoZSBUcmFuc3BvcnQuXG5cdFx0ICogIFNlZSBUb25lLk9zY2lsbGF0b3Iuc3luY0ZyZXF1ZW5jeVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLnVuc3luY0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC51bnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yOiBlaXRoZXIgc2luZSwgc3F1YXJlLCB0cmlhbmdsZSwgb3Igc2F3dG9vdGguIEFsc28gY2FwYWJsZSBvZlxuXHRcdCAqIHNldHRpbmcgdGhlIGZpcnN0IHggbnVtYmVyIG9mIHBhcnRpYWxzIG9mIHRoZSBvc2NpbGxhdG9yLiBGb3IgZXhhbXBsZTogXCJzaW5lNFwiIHdvdWxkXG5cdFx0ICogc2V0IGJlIHRoZSBmaXJzdCA0IHBhcnRpYWxzIG9mIHRoZSBzaW5lIHdhdmUgYW5kIFwidHJpYW5nbGU4XCIgd291bGQgc2V0IHRoZSBmaXJzdFxuXHRcdCAqIDggcGFydGlhbHMgb2YgdGhlIHRyaWFuZ2xlIHdhdmUuXG5cdFx0ICogPGJyPjxicj5cblx0XHQgKiBVc2VzIFBlcmlvZGljV2F2ZSBpbnRlcm5hbGx5IGV2ZW4gZm9yIG5hdGl2ZSB0eXBlcyBzbyB0aGF0IGl0IGNhbiBzZXQgdGhlIHBoYXNlLlxuXHRcdCAqIFBlcmlvZGljV2F2ZSBlcXVhdGlvbnMgYXJlIGZyb20gdGhlXG5cdFx0ICogW1dlYmtpdCBXZWIgQXVkaW8gaW1wbGVtZW50YXRpb25dKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vY29kZXNlYXJjaCNjaHJvbWl1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1NvdXJjZS9tb2R1bGVzL3dlYmF1ZGlvL1BlcmlvZGljV2F2ZS5jcHAmc3E9cGFja2FnZTpjaHJvbWl1bSkuXG5cdFx0ICpcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgaXQgdG8gYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIG9zYy50eXBlID0gXCJzcXVhcmVcIjtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHRoZSBmaXJzdCA2IHBhcnRpYWxzIG9mIGEgc2F3dG9vdGggd2F2ZVxuXHRcdCAqIG9zYy50eXBlID0gXCJzYXd0b290aDZcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0Jhc2ljVHlwZSA9IFtcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNpbmUsXG5cdCAgICAgICAgICAgICAgICBUb25lLk9zY2lsbGF0b3IuVHlwZS5TcXVhcmUsXG5cdCAgICAgICAgICAgICAgICBUb25lLk9zY2lsbGF0b3IuVHlwZS5UcmlhbmdsZSxcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNhd3Rvb3RoXG5cdCAgICAgICAgICAgIF0uaW5jbHVkZXModHlwZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9waGFzZSA9PT0gMCAmJiBpc0Jhc2ljVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd2F2ZSA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICAvL2p1c3QgZ28gd2l0aCB0aGUgYmFzaWMgYXBwcm9hY2hcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID09PSB0eXBlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNvZWZzID0gdGhpcy5fZ2V0UmVhbEltYWdpbmFyeSh0eXBlLCB0aGlzLl9waGFzZSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgcGVyaW9kaWNXYXZlID0gdGhpcy5jb250ZXh0LmNyZWF0ZVBlcmlvZGljV2F2ZShjb2Vmc1swXSwgY29lZnNbMV0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fd2F2ZSA9IHBlcmlvZGljV2F2ZTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zZXRQZXJpb2RpY1dhdmUodGhpcy5fd2F2ZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5IGNvbXBvbmVudHMgYmFzZWRcblx0XHQgKiAgb24gdGhlIG9zY2lsbGF0b3IgdHlwZS5cblx0XHQgKiAgQHJldHVybnMge0FycmF5fSBbcmVhbCwgaW1hZ2luYXJ5XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5fZ2V0UmVhbEltYWdpbmFyeSA9IGZ1bmN0aW9uICh0eXBlLCBwaGFzZSkge1xuXHQgICAgICAgIHZhciBmZnRTaXplID0gNDA5Njtcblx0ICAgICAgICB2YXIgcGVyaW9kaWNXYXZlU2l6ZSA9IGZmdFNpemUgLyAyO1xuXHQgICAgICAgIHZhciByZWFsID0gbmV3IEZsb2F0MzJBcnJheShwZXJpb2RpY1dhdmVTaXplKTtcblx0ICAgICAgICB2YXIgaW1hZyA9IG5ldyBGbG9hdDMyQXJyYXkocGVyaW9kaWNXYXZlU2l6ZSk7XG5cdCAgICAgICAgdmFyIHBhcnRpYWxDb3VudCA9IDE7XG5cdCAgICAgICAgaWYgKHR5cGUgPT09IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbSkge1xuXHQgICAgICAgICAgICBwYXJ0aWFsQ291bnQgPSB0aGlzLl9wYXJ0aWFscy5sZW5ndGggKyAxO1xuXHQgICAgICAgICAgICBwZXJpb2RpY1dhdmVTaXplID0gcGFydGlhbENvdW50O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBwYXJ0aWFsID0gL14oc2luZXx0cmlhbmdsZXxzcXVhcmV8c2F3dG9vdGgpKFxcZCspJC8uZXhlYyh0eXBlKTtcblx0ICAgICAgICAgICAgaWYgKHBhcnRpYWwpIHtcblx0ICAgICAgICAgICAgICAgIHBhcnRpYWxDb3VudCA9IHBhcnNlSW50KHBhcnRpYWxbMl0pICsgMTtcblx0ICAgICAgICAgICAgICAgIHR5cGUgPSBwYXJ0aWFsWzFdO1xuXHQgICAgICAgICAgICAgICAgcGFydGlhbENvdW50ID0gTWF0aC5tYXgocGFydGlhbENvdW50LCAyKTtcblx0ICAgICAgICAgICAgICAgIHBlcmlvZGljV2F2ZVNpemUgPSBwYXJ0aWFsQ291bnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgZm9yICh2YXIgbiA9IDE7IG4gPCBwZXJpb2RpY1dhdmVTaXplOyArK24pIHtcblx0ICAgICAgICAgICAgdmFyIHBpRmFjdG9yID0gMiAvIChuICogTWF0aC5QSSk7XG5cdCAgICAgICAgICAgIHZhciBiO1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5TaW5lOlxuXHQgICAgICAgICAgICAgICAgYiA9IG4gPD0gcGFydGlhbENvdW50ID8gMSA6IDA7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5TcXVhcmU6XG5cdCAgICAgICAgICAgICAgICBiID0gbiAmIDEgPyAyICogcGlGYWN0b3IgOiAwO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2F3dG9vdGg6XG5cdCAgICAgICAgICAgICAgICBiID0gcGlGYWN0b3IgKiAobiAmIDEgPyAxIDogLTEpO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuVHJpYW5nbGU6XG5cdCAgICAgICAgICAgICAgICBpZiAobiAmIDEpIHtcblx0ICAgICAgICAgICAgICAgICAgICBiID0gMiAqIChwaUZhY3RvciAqIHBpRmFjdG9yKSAqIChuIC0gMSA+PiAxICYgMSA/IC0xIDogMSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGIgPSAwO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tOlxuXHQgICAgICAgICAgICAgICAgYiA9IHRoaXMuX3BhcnRpYWxzW24gLSAxXTtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5Pc2NpbGxhdG9yOiBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAoYiAhPT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmVhbFtuXSA9IC1iICogTWF0aC5zaW4ocGhhc2UgKiBuKTtcblx0ICAgICAgICAgICAgICAgIGltYWdbbl0gPSBiICogTWF0aC5jb3MocGhhc2UgKiBuKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJlYWxbbl0gPSAwO1xuXHQgICAgICAgICAgICAgICAgaW1hZ1tuXSA9IDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFtcblx0ICAgICAgICAgICAgcmVhbCxcblx0ICAgICAgICAgICAgaW1hZ1xuXHQgICAgICAgIF07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbXB1dGUgdGhlIGludmVyc2UgRkZUIGZvciBhIGdpdmVuIHBoYXNlLlxuXHRcdCAqICBAcGFyYW0gIHtGbG9hdDMyQXJyYXl9ICByZWFsXG5cdFx0ICogIEBwYXJhbSAge0Zsb2F0MzJBcnJheX0gIGltYWdcblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBwaGFzZVxuXHRcdCAqICBAcmV0dXJuICB7QXVkaW9SYW5nZX1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX2ludmVyc2VGRlQgPSBmdW5jdGlvbiAocmVhbCwgaW1hZywgcGhhc2UpIHtcblx0ICAgICAgICB2YXIgc3VtID0gMDtcblx0ICAgICAgICB2YXIgbGVuID0gcmVhbC5sZW5ndGg7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICBzdW0gKz0gcmVhbFtpXSAqIE1hdGguY29zKGkgKiBwaGFzZSkgKyBpbWFnW2ldICogTWF0aC5zaW4oaSAqIHBoYXNlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHN1bTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHJldHVybiAge0F1ZGlvUmFuZ2V9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9nZXRJbml0aWFsVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGNvZWZzID0gdGhpcy5fZ2V0UmVhbEltYWdpbmFyeSh0aGlzLl90eXBlLCAwKTtcblx0ICAgICAgICB2YXIgcmVhbCA9IGNvZWZzWzBdO1xuXHQgICAgICAgIHZhciBpbWFnID0gY29lZnNbMV07XG5cdCAgICAgICAgdmFyIG1heFZhbHVlID0gMDtcblx0ICAgICAgICB2YXIgdHdvUGkgPSBNYXRoLlBJICogMjtcblx0ICAgICAgICAvL2NoZWNrIGZvciBwZWFrcyBpbiA4IHBsYWNlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgIG1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5faW52ZXJzZUZGVChyZWFsLCBpbWFnLCBpIC8gOCAqIHR3b1BpKSwgbWF4VmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gLXRoaXMuX2ludmVyc2VGRlQocmVhbCwgaW1hZywgdGhpcy5fcGhhc2UpIC8gbWF4VmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlICE9PSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b20pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBbXTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJ0aWFscztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBoYXNlID0gMTgwOyAvL2ZsaXBzIHRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BoYXNlICogKDE4MCAvIE1hdGguUEkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGhhc2UgPSBwaGFzZSAqIE1hdGguUEkgLyAxODA7XG5cdCAgICAgICAgICAgIC8vcmVzZXQgdGhlIHR5cGVcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBEaXNwb3NlIGFuZCBkaXNjb25uZWN0LlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fd2F2ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBdWRpb1RvR2FpbiBjb252ZXJ0cyBhbiBpbnB1dCBpbiBBdWRpb1JhbmdlIFstMSwxXSB0byBOb3JtYWxSYW5nZSBbMCwxXS4gXG5cdFx0ICogICAgICAgICBTZWUgVG9uZS5HYWluVG9BdWRpby5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGEyZyA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvVG9HYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICh4ICsgMSkgLyAyO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXVkaW9Ub0dhaW4sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ub0dhaW59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ub0dhaW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbm9ybS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXVkaW9Ub0dhaW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5aZXJvIG91dHB1dHMgMCdzIGF0IGF1ZGlvLXJhdGUuIFRoZSByZWFzb24gdGhpcyBoYXMgdG8gYmVcblx0XHQgKiAgICAgICAgIGl0J3Mgb3duIGNsYXNzIGlzIHRoYXQgbWFueSBicm93c2VycyBvcHRpbWl6ZSBvdXQgVG9uZS5TaWduYWxcblx0XHQgKiAgICAgICAgIHdpdGggYSB2YWx1ZSBvZiAwIGFuZCB3aWxsIG5vdCBwcm9jZXNzIG5vZGVzIGZ1cnRoZXIgZG93biB0aGUgZ3JhcGguXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLlplcm8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5nZXRDb25zdGFudCgwKS5jb25uZWN0KHRoaXMuX2dhaW4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuWmVybywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5aZXJvfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5aZXJvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2dhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlplcm87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgTEZPIHN0YW5kcyBmb3IgbG93IGZyZXF1ZW5jeSBvc2NpbGxhdG9yLiBUb25lLkxGTyBwcm9kdWNlcyBhbiBvdXRwdXQgc2lnbmFsXG5cdFx0ICogICAgICAgICAgd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHRvIGFuIEF1ZGlvUGFyYW0gb3IgVG9uZS5TaWduYWxcblx0XHQgKiAgICAgICAgICBpbiBvcmRlciB0byBtb2R1bGF0ZSB0aGF0IHBhcmFtZXRlciB3aXRoIGFuIG9zY2lsbGF0b3IuIFRoZSBMRk8gY2FuXG5cdFx0ICogICAgICAgICAgYWxzbyBiZSBzeW5jZWQgdG8gdGhlIHRyYW5zcG9ydCB0byBzdGFydC9zdG9wIGFuZCBjaGFuZ2Ugd2hlbiB0aGUgdGVtcG8gY2hhbmdlcy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0aW9uLiBUeXBpY2FsbHksIExGT3Mgd2lsbCBiZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBmcmVxdWVuY3kgcmFuZ2Ugb2YgMC4xIHRvIDEwIGhlcnR6LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IG1pbiBUaGUgbWluaW11bSBvdXRwdXQgdmFsdWUgb2YgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSBtYXggVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIExGTy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbGZvID0gbmV3IFRvbmUuTEZPKFwiNG5cIiwgNDAwLCA0MDAwKTtcblx0XHQgKiBsZm8uY29ubmVjdChmaWx0ZXIuZnJlcXVlbmN5KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdtaW4nLFxuXHQgICAgICAgICAgICAnbWF4J1xuXHQgICAgICAgIF0sIFRvbmUuTEZPKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAndHlwZSc6IG9wdGlvbnMudHlwZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8ncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgYW1wbGl0dWRlIG9mIHRoZSBMRk8sIHdoaWNoIGNvbnRyb2xzIHRoZSBvdXRwdXQgcmFuZ2UgYmV0d2VlblxuXHRcdFx0ICogdGhlIG1pbiBhbmQgbWF4IG91dHB1dC4gRm9yIGV4YW1wbGUgaWYgdGhlIG1pbiBpcyAtMTAgYW5kIHRoZSBtYXhcblx0XHRcdCAqIGlzIDEwLCBzZXR0aW5nIHRoZSBhbXBsaXR1ZGUgdG8gMC41IHdvdWxkIG1ha2UgdGhlIExGTyBtb2R1bGF0ZVxuXHRcdFx0ICogYmV0d2VlbiAtNSBhbmQgNS5cblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmFtcGxpdHVkZSA9IHRoaXMuX29zY2lsbGF0b3Iudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlLnVuaXRzID0gVG9uZS5UeXBlLk5vcm1hbFJhbmdlO1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlLnZhbHVlID0gb3B0aW9ucy5hbXBsaXR1ZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZ25hbCB3aGljaCBpcyBvdXRwdXQgd2hlbiB0aGUgTEZPIGlzIHN0b3BwZWRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDAsIFRvbmUuVHlwZS5BdWRpb1JhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBKdXN0IG91dHB1dHMgemVyb3MuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuWmVyb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5femVyb3MgPSBuZXcgVG9uZS5aZXJvKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHRoYXQgdGhlIExGTyBvdXRwdXRzIHdoZW4gaXQncyBzdG9wcGVkXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRWYWx1ZSA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQXVkaW9Ub0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2EyZyA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlciA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2NhbGUob3B0aW9ucy5taW4sIG9wdGlvbnMubWF4KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdW5pdHMgb2YgdGhlIExGTyAodXNlZCBmb3IgY29udmVydGluZylcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UeXBlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl91bml0cyA9IFRvbmUuVHlwZS5EZWZhdWx0O1xuXHQgICAgICAgIHRoaXMudW5pdHMgPSBvcHRpb25zLnVuaXRzO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY2hhaW4odGhpcy5fYTJnLCB0aGlzLl9zY2FsZXIpO1xuXHQgICAgICAgIHRoaXMuX3plcm9zLmNvbm5lY3QodGhpcy5fYTJnKTtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLmNvbm5lY3QodGhpcy5fYTJnKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdhbXBsaXR1ZGUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMucGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTEZPLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdmcmVxdWVuY3knOiAnNG4nLFxuXHQgICAgICAgICdhbXBsaXR1ZGUnOiAxLFxuXHQgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWZhdWx0XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIExGTyB3aWxsIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIExGTyB3aWxsIHN0b3Bcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuc2V0VmFsdWVBdFRpbWUodGhpcy5fc3RvcHBlZFZhbHVlLCB0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN5bmMgdGhlIHN0YXJ0L3N0b3AvcGF1c2UgdG8gdGhlIHRyYW5zcG9ydFxuXHRcdCAqICBhbmQgdGhlIGZyZXF1ZW5jeSB0byB0aGUgYnBtIG9mIHRoZSB0cmFuc3BvcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIGxmby5mcmVxdWVuY3kudmFsdWUgPSBcIjhuXCI7XG5cdFx0ICogIGxmby5zeW5jKCkuc3RhcnQoMClcblx0XHQgKiAgLy90aGUgcmF0ZSBvZiB0aGUgTEZPIHdpbGwgYWx3YXlzIGJlIGFuIGVpZ2h0aCBub3RlLFxuXHRcdCAqICAvL2V2ZW4gYXMgdGhlIHRlbXBvIGNoYW5nZXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3luY0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB1bnN5bmMgdGhlIExGTyBmcm9tIHRyYW5zcG9ydCBjb250cm9sXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnVuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudW5zeW5jRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbml1bXVtIG91dHB1dCBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvVW5pdHModGhpcy5fc2NhbGVyLm1pbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgbWluID0gdGhpcy5fZnJvbVVuaXRzKG1pbik7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlci5taW4gPSBtaW47XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90b1VuaXRzKHRoaXMuX3NjYWxlci5tYXgpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIG1heCA9IHRoaXMuX2Zyb21Vbml0cyhtYXgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZXIubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3I6IHNpbmUsIHNxdWFyZSwgc2F3dG9vdGgsIHRyaWFuZ2xlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkVmFsdWUgPSB0aGlzLl9vc2NpbGxhdG9yLl9nZXRJbml0aWFsVmFsdWUoKTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC52YWx1ZSA9IHRoaXMuX3N0b3BwZWRWYWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkVmFsdWUgPSB0aGlzLl9vc2NpbGxhdG9yLl9nZXRJbml0aWFsVmFsdWUoKTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC52YWx1ZSA9IHRoaXMuX3N0b3BwZWRWYWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvdXRwdXQgdW5pdHMgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogQHR5cGUge1RvbmUuVHlwZX1cblx0XHQgKiBAbmFtZSB1bml0c1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3VuaXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdW5pdHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdmFyIGN1cnJlbnRNaW4gPSB0aGlzLm1pbjtcblx0ICAgICAgICAgICAgdmFyIGN1cnJlbnRNYXggPSB0aGlzLm1heDtcblx0ICAgICAgICAgICAgLy9jb252ZXJ0IHRoZSBtaW4gYW5kIHRoZSBtYXhcblx0ICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB2YWw7XG5cdCAgICAgICAgICAgIHRoaXMubWluID0gY3VycmVudE1pbjtcblx0ICAgICAgICAgICAgdGhpcy5tYXggPSBjdXJyZW50TWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5zdGF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhlIExGTyB0byBhbiBBdWRpb1BhcmFtLCBBdWRpb05vZGUsIG9yIFRvbmUgTm9kZS5cblx0XHQgKiAgVG9uZS5MRk8gd2lsbCBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgdG8gdGhlIGRlc3RpbmF0aW9uIHVuaXRzIG9mIHRoZVxuXHRcdCAqICB3aWxsIGdldCB0aGUgdW5pdHMgZnJvbSB0aGUgY29ubmVjdGVkIG5vZGUuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUgfCBBdWRpb1BhcmFtIHwgQXVkaW9Ob2RlfSBub2RlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TnVtPTBdIG9wdGlvbmFsbHkgd2hpY2ggb3V0cHV0IHRvIGNvbm5lY3QgZnJvbVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW2lucHV0TnVtPTBdIG9wdGlvbmFsbHkgd2hpY2ggaW5wdXQgdG8gY29ubmVjdCB0b1xuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAobm9kZS5jb25zdHJ1Y3RvciA9PT0gVG9uZS5TaWduYWwgfHwgbm9kZS5jb25zdHJ1Y3RvciA9PT0gVG9uZS5QYXJhbSkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnZlcnQgPSBub2RlLmNvbnZlcnQ7XG5cdCAgICAgICAgICAgIHRoaXMudW5pdHMgPSBub2RlLnVuaXRzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcHJpdmF0ZSBtZXRob2QgYm9ycm93ZWQgZnJvbSBQYXJhbSBjb252ZXJ0c1xuXHRcdCAqICB1bml0cyBmcm9tIHRoZWlyIGRlc3RpbmF0aW9uIHZhbHVlXG5cdFx0ICogIEBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLl9mcm9tVW5pdHMgPSBUb25lLlBhcmFtLnByb3RvdHlwZS5fZnJvbVVuaXRzO1xuXHQgICAgLyoqXG5cdFx0ICogIHByaXZhdGUgbWV0aG9kIGJvcnJvd2VkIGZyb20gUGFyYW0gY29udmVydHNcblx0XHQgKiAgdW5pdHMgdG8gdGhlaXIgZGVzdGluYXRpb24gdmFsdWVcblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuX3RvVW5pdHMgPSBUb25lLlBhcmFtLnByb3RvdHlwZS5fdG9Vbml0cztcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNjb25uZWN0IGFuZCBkaXNwb3NlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdhbXBsaXR1ZGUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3plcm9zLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl96ZXJvcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2EyZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYTJnID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkxGTztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTGltaXRlciB3aWxsIGxpbWl0IHRoZSBsb3VkbmVzcyBvZiBhbiBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogICAgICAgICBJdCBpcyBjb21wb3NlZCBvZiBhIFRvbmUuQ29tcHJlc3NvciB3aXRoIGEgZmFzdCBhdHRhY2tcblx0XHQgKiAgICAgICAgIGFuZCByZWxlYXNlLiBMaW1pdGVycyBhcmUgY29tbW9ubHkgdXNlZCB0byBzYWZlZ3VhcmQgYWdhaW5zdFxuXHRcdCAqICAgICAgICAgc2lnbmFsIGNsaXBwaW5nLiBVbmxpa2UgYSBjb21wcmVzc29yLCBsaW1pdGVycyBkbyBub3QgcHJvdmlkZVxuXHRcdCAqICAgICAgICAgc21vb3RoIGdhaW4gcmVkdWN0aW9uIGFuZCBhbG1vc3QgY29tcGxldGVseSBwcmV2ZW50XG5cdFx0ICogICAgICAgICBhZGRpdGlvbmFsIGdhaW4gYWJvdmUgdGhlIHRocmVzaG9sZC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGhyZXNob2xkIFRoZSB0aGVzaG9sZCBhYm92ZSB3aGljaCB0aGUgbGltaXRpbmcgaXMgYXBwbGllZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGxpbWl0ZXIgPSBuZXcgVG9uZS5MaW1pdGVyKC02KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTGltaXRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3RocmVzaG9sZCddLCBUb25lLkxpbWl0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbXByZXNzb3Jcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21wcmVzc29yID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuQ29tcHJlc3Nvcih7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4wMDEsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnOiBvcHRpb25zLnRocmVzaG9sZFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHRocmVzaG9sZCBvZiBvZiB0aGUgbGltaXRlclxuXHRcdFx0ICogQHR5cGUge0RlY2liZWx9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IHRoaXMuX2NvbXByZXNzb3IudGhyZXNob2xkO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd0aHJlc2hvbGQnKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxpbWl0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZVxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaW1pdGVyLmRlZmF1bHRzID0geyAndGhyZXNob2xkJzogLTEyIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxpbWl0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGltaXRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd0aHJlc2hvbGQnKTtcblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTGltaXRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTG93cGFzcyBpcyBhIGxvd3Bhc3MgZmVlZGJhY2sgY29tYiBmaWx0ZXIuIEl0IGlzIHNpbWlsYXIgdG9cblx0XHQgKiAgICAgICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLCBidXQgaW5jbHVkZXMgYSBsb3dwYXNzIGZpbHRlci5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgdGltZSBvZiB0aGUgY29tYiBmaWx0ZXJcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZT19IHJlc29uYW5jZSBUaGUgcmVzb25hbmNlIChmZWVkYmFjaykgb2YgdGhlIGNvbWIgZmlsdGVyXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5PX0gZGFtcGVuaW5nIFRoZSBjdXRvZmYgb2YgdGhlIGxvd3Bhc3MgZmlsdGVyIGRhbXBlbnMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbCBhcyBpdCBpcyBmZWRiYWNrLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdLCBUb25lLkxvd3Bhc3NDb21iRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLkRlbGF5KG9wdGlvbnMuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXlUaW1lIG9mIHRoZSBjb21iIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IHRoaXMuX2RlbGF5LmRlbGF5VGltZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbG93cGFzcyBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSAge0JpcXVhZEZpbHRlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICB0aGlzLl9sb3dwYXNzLlEudmFsdWUgPSAtMy4wMTAyOTk5NTY2Mzk4MTI1O1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MudHlwZSA9ICdsb3dwYXNzJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGFtcGVuaW5nIGNvbnRyb2wgb2YgdGhlIGZlZWRiYWNrXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fbG93cGFzcy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5GcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZGFtcGVuaW5nXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZlZWRiYWNrIGdhaW5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5yZXNvbmFuY2UsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBmZWVkYmFjayBvZiB0aGUgZGVsYXllZCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gdGhpcy5fZmVlZGJhY2suZ2Fpbjtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fZGVsYXkuY2hhaW4odGhpcy5fbG93cGFzcywgdGhpcy5fZmVlZGJhY2ssIHRoaXMuX2RlbGF5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxvd3Bhc3NDb21iRmlsdGVyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4xLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiAwLjUsXG5cdCAgICAgICAgJ2RhbXBlbmluZyc6IDMwMDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxvd3Bhc3NDb21iRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvd3Bhc3NDb21iRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJyxcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5NZXJnZSBicmluZ3MgdHdvIHNpZ25hbHMgaW50byB0aGUgbGVmdCBhbmQgcmlnaHRcblx0XHQgKiAgICAgICAgICBjaGFubmVscyBvZiBhIHNpbmdsZSBzdGVyZW8gY2hhbm5lbC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtZXJnZSA9IG5ldyBUb25lLk1lcmdlKCkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3JvdXRpbmcgYSBzaW5lIHRvbmUgaW4gdGhlIGxlZnQgY2hhbm5lbFxuXHRcdCAqIC8vYW5kIG5vaXNlIGluIHRoZSByaWdodCBjaGFubmVsXG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KG1lcmdlLmxlZnQpO1xuXHRcdCAqIHZhciBub2lzZSA9IG5ldyBUb25lLk5vaXNlKCkuY29ubmVjdChtZXJnZS5yaWdodCk7XG5cdFx0ICogLy9zdGFydGluZyBvdXIgb3NjaWxsYXRvcnNcblx0XHQgKiBub2lzZS5zdGFydCgpO1xuXHRcdCAqIG9zYy5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXJnZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbGVmdCBpbnB1dCBjaGFubmVsLlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByaWdodCBpbnB1dCBjaGFubmVsLlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFsxXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yaWdodCA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1lcmdlciBub2RlIGZvciB0aGUgdHdvIGNoYW5uZWxzXG5cdFx0XHQgKiAgQHR5cGUge0NoYW5uZWxNZXJnZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZXIgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVDaGFubmVsTWVyZ2VyKDIpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmxlZnQuY29ubmVjdCh0aGlzLl9tZXJnZXIsIDAsIDApO1xuXHQgICAgICAgIHRoaXMucmlnaHQuY29ubmVjdCh0aGlzLl9tZXJnZXIsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMubGVmdC5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgIHRoaXMucmlnaHQuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICB0aGlzLmxlZnQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgdGhpcy5yaWdodC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1lcmdlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lcmdlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1lcmdlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21lcmdlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2VyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZXJnZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1ldGVyIGdldHMgdGhlIFtSTVNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Jvb3RfbWVhbl9zcXVhcmUpXG5cdFx0ICogICAgICAgICAgb2YgYW4gaW5wdXQgc2lnbmFsIHdpdGggc29tZSBhdmVyYWdpbmcgYXBwbGllZC4gSXQgY2FuIGFsc28gZ2V0IHRoZSByYXdcblx0XHQgKiAgICAgICAgICB2YWx1ZSBvZiB0aGUgaW5wdXQgc2lnbmFsLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBzbW9vdGhpbmcgVGhlIGFtb3VudCBvZiBzbW9vdGhpbmcgYXBwbGllZCBiZXR3ZWVuIGZyYW1lcy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbWV0ZXIgPSBuZXcgVG9uZS5NZXRlcigpO1xuXHRcdCAqIHZhciBtaWMgPSBuZXcgVG9uZS5Vc2VyTWVkaWEoKS5vcGVuKCk7XG5cdFx0ICogLy9jb25uZWN0IG1pYyB0byB0aGUgbWV0ZXJcblx0XHQgKiBtaWMuY29ubmVjdChtZXRlcik7XG5cdFx0ICogLy90aGUgY3VycmVudCBsZXZlbCBvZiB0aGUgbWljIGlucHV0IGluIGRlY2liZWxzXG5cdFx0ICogdmFyIGxldmVsID0gbWV0ZXIuZ2V0VmFsdWUoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzbW9vdGhpbmcnXSwgVG9uZS5NZXRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZSB3aGljaCBjb21wdXRlcyB0aGUgbGV2ZWxzLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkFuYWx5c2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5fYW5hbHlzZXIgPSBuZXcgVG9uZS5BbmFseXNlcignd2F2ZWZvcm0nLCAxMDI0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGNhcnJ5b3ZlciBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCBsYXN0IGZyYW1lLlxuXHRcdFx0ICogIE9ubHkgYXBwbGllZCBtZXRlciBmb3IgXCJsZXZlbFwiIHR5cGUuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNtb290aGluZyA9IG9wdGlvbnMuc21vb3RoaW5nO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWV0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIuZGVmYXVsdHMgPSB7ICdzbW9vdGhpbmcnOiAwLjggfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGN1cnJlbnQgZGVjaWJlbCB2YWx1ZSBvZiB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogIEByZXR1cm5zIHtEZWNpYmVsc31cblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIucHJvdG90eXBlLmdldExldmVsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLnR5cGUgPSAnZmZ0Jztcblx0ICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgICAgICB2YXIgb2Zmc2V0ID0gMjg7XG5cdCAgICAgICAgLy8gbm9ybWFsaXplcyBtb3N0IHNpZ25hbCBsZXZlbHNcblx0ICAgICAgICAvLyBUT0RPOiBjb21wdXRlIGxvdWRuZXNzIGZyb20gRkZUXG5cdCAgICAgICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KHRoaXMsIHZhbHVlcykgKyBvZmZzZXQ7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc2lnbmFsIHZhbHVlIG9mIHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgQHJldHVybnMge051bWJlcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLnR5cGUgPSAnd2F2ZWZvcm0nO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX2FuYWx5c2VyLmdldFZhbHVlKCk7XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlWzBdO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEEgdmFsdWUgZnJvbSAwIC0+IDEgd2hlcmUgMCByZXByZXNlbnRzIG5vIHRpbWUgYXZlcmFnaW5nIHdpdGggdGhlIGxhc3QgYW5hbHlzaXMgZnJhbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTWV0ZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBzbW9vdGhpbmdcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGVyLnByb3RvdHlwZSwgJ3Ntb290aGluZycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zbW9vdGhpbmcgPSB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1ldGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZXRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKlx0QGNsYXNzICBUb25lLlNwbGl0IHNwbGl0cyBhbiBpbmNvbWluZyBzaWduYWwgaW50byBsZWZ0IGFuZCByaWdodCBjaGFubmVscy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzcGxpdCA9IG5ldyBUb25lLlNwbGl0KCk7XG5cdFx0ICogc3RlcmVvU2lnbmFsLmNvbm5lY3Qoc3BsaXQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TcGxpdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygwLCAyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7Q2hhbm5lbFNwbGl0dGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNoYW5uZWxTcGxpdHRlcigyKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jaGFubmVsQ291bnQgPSAyO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIExlZnQgY2hhbm5lbCBvdXRwdXQuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPm91dHB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sZWZ0ID0gdGhpcy5vdXRwdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgUmlnaHQgY2hhbm5lbCBvdXRwdXQuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPm91dHB1dFsxXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yaWdodCA9IHRoaXMub3V0cHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jb25uZWN0KHRoaXMubGVmdCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuY29ubmVjdCh0aGlzLnJpZ2h0LCAxLCAwKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNwbGl0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNwbGl0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNwbGl0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMubGVmdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5sZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJpZ2h0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3BsaXQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBNaWQvU2lkZSBwcm9jZXNzaW5nIHNlcGFyYXRlcyB0aGUgdGhlICdtaWQnIHNpZ25hbFxuXHRcdCAqICAgICAgICAgKHdoaWNoIGNvbWVzIG91dCBvZiBib3RoIHRoZSBsZWZ0IGFuZCB0aGUgcmlnaHQgY2hhbm5lbClcblx0XHQgKiAgICAgICAgIGFuZCB0aGUgJ3NpZGUnICh3aGljaCBvbmx5IGNvbWVzIG91dCBvZiB0aGUgdGhlIHNpZGUgY2hhbm5lbHMpLiA8YnI+PGJyPlxuXHRcdCAqICAgICAgICAgPGNvZGU+XG5cdFx0ICogICAgICAgICBNaWQgPSAoTGVmdCtSaWdodCkvc3FydCgyKTsgICAvLyBvYnRhaW4gbWlkLXNpZ25hbCBmcm9tIGxlZnQgYW5kIHJpZ2h0PGJyPlxuXHRcdCAqICAgICAgICAgU2lkZSA9IChMZWZ0LVJpZ2h0KS9zcXJ0KDIpOyAgIC8vIG9idGFpbiBzaWRlLXNpZ25hbCBmcm9tIGxlZnQgYW5kIHJpZ2g8YnI+XG5cdFx0ICogICAgICAgICA8L2NvZGU+XG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZVNwbGl0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDAsIDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWwgaW50byBsZWZ0IGFuZCByaWdodCBjaGFubmVsc1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHNlbmQuIENvbm5lY3QgdG8gbWlkIHByb2Nlc3NpbmcuIEFsaWFzIGZvclxuXHRcdFx0ICogIDxjb2RlPm91dHB1dFswXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRBZGQgPSBuZXcgVG9uZS5BZGQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIE11bHRpcGx5IHRoZSBfbWlkQWRkIGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMub3V0cHV0WzBdID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSBvdXRwdXQuIENvbm5lY3QgdG8gc2lkZSBwcm9jZXNzaW5nLiBBbHNvIE91dHB1dCAxXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaWRlU3VidHJhY3QgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIF9taWRBZGQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IHRoaXMub3V0cHV0WzFdID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX21pZEFkZCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuY29ubmVjdCh0aGlzLl9taWRBZGQsIDEsIDEpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fc2lkZVN1YnRyYWN0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX3NpZGVTdWJ0cmFjdCwgMSwgMSk7XG5cdCAgICAgICAgdGhpcy5fbWlkQWRkLmNvbm5lY3QodGhpcy5taWQpO1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdC5jb25uZWN0KHRoaXMuc2lkZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRTaWRlU3BsaXQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlU3BsaXR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZVNwbGl0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkQWRkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRBZGQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVTcGxpdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1pZC9TaWRlIHByb2Nlc3Npbmcgc2VwYXJhdGVzIHRoZSB0aGUgJ21pZCcgc2lnbmFsXG5cdFx0ICogICAgICAgICAod2hpY2ggY29tZXMgb3V0IG9mIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBjaGFubmVsKVxuXHRcdCAqICAgICAgICAgYW5kIHRoZSAnc2lkZScgKHdoaWNoIG9ubHkgY29tZXMgb3V0IG9mIHRoZSB0aGUgc2lkZSBjaGFubmVscykuXG5cdFx0ICogICAgICAgICBNaWRTaWRlTWVyZ2UgbWVyZ2VzIHRoZSBtaWQgYW5kIHNpZGUgc2lnbmFsIGFmdGVyIHRoZXkndmUgYmVlbiBzZXBlcmF0ZWRcblx0XHQgKiAgICAgICAgIGJ5IFRvbmUuTWlkU2lkZVNwbGl0Ljxicj48YnI+XG5cdFx0ICogICAgICAgICA8Y29kZT5cblx0XHQgKiAgICAgICAgIExlZnQgPSAoTWlkK1NpZGUpL3NxcnQoMik7ICAgLy8gb2J0YWluIGxlZnQgc2lnbmFsIGZyb20gbWlkIGFuZCBzaWRlPGJyPlxuXHRcdCAqICAgICAgICAgUmlnaHQgPSAoTWlkLVNpZGUpL3NxcnQoMik7ICAgLy8gb2J0YWluIHJpZ2h0IHNpZ25hbCBmcm9tIG1pZCBhbmQgc2lkZTxicj5cblx0XHQgKiAgICAgICAgIDwvY29kZT5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlTWVyZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBzaWduYWwgaW5wdXQuIEFsaWFzIGZvclxuXHRcdFx0ICogIDxjb2RlPmlucHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJlY29tYmluZSB0aGUgbWlkL3NpZGUgaW50byBMZWZ0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWRkfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbmV3IFRvbmUuQWRkKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgbGVmdCBieSBzcXJ0KDEvMilcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29MZWZ0ID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSBzaWduYWwgaW5wdXQuIEFsaWFzIGZvclxuXHRcdFx0ICogIDxjb2RlPmlucHV0WzFdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICByZWNvbWJpbmUgdGhlIG1pZC9zaWRlIGludG8gUmlnaHRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIHJpZ2h0IGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0ID0gbmV3IFRvbmUuTXVsdGlwbHkoTWF0aC5TUVJUMV8yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBNZXJnZSB0aGUgbGVmdC9yaWdodCBzaWduYWwgYmFjayBpbnRvIGEgc3RlcmVvIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgdGhpcy5taWQuY29ubmVjdCh0aGlzLl9sZWZ0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLnNpZGUuY29ubmVjdCh0aGlzLl9sZWZ0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLm1pZC5jb25uZWN0KHRoaXMuX3JpZ2h0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLnNpZGUuY29ubmVjdCh0aGlzLl9yaWdodCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fbGVmdC5jb25uZWN0KHRoaXMuX3RpbWVzVHdvTGVmdCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQuY29ubmVjdCh0aGlzLl90aW1lc1R3b1JpZ2h0KTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQuY29ubmVjdCh0aGlzLl9tZXJnZSwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29SaWdodC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAxKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVNZXJnZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1pZFNpZGVNZXJnZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlTWVyZ2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5zaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVNZXJnZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IgYXBwbGllcyB0d28gZGlmZmVyZW50IGNvbXByZXNzb3JzIHRvIHRoZSBtaWRcblx0XHQgKiAgICAgICAgIGFuZCBzaWRlIHNpZ25hbCBjb21wb25lbnRzLiBTZWUgVG9uZS5NaWRTaWRlU3BsaXQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgb3B0aW9ucyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIG1pZCBhbmQgc2lkZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc29ycy5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVDb21wcmVzc29yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5NaWRTaWRlQ29tcHJlc3Nvci5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1pZC9zaWRlIHNwbGl0XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVTcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk1pZFNpZGVTcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtaWQvc2lkZSByZWNvbWJpbmF0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVNZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NaWRTaWRlTWVyZ2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBtaWQgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5taWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIHNpZGUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGUgPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMuc2lkZSk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0Lm1pZC5jaGFpbih0aGlzLm1pZCwgdGhpcy5fbWlkU2lkZU1lcmdlLm1pZCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0LnNpZGUuY2hhaW4odGhpcy5zaWRlLCB0aGlzLl9taWRTaWRlTWVyZ2Uuc2lkZSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ3NpZGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRTaWRlQ29tcHJlc3NvciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVDb21wcmVzc29yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtaWQnOiB7XG5cdCAgICAgICAgICAgICdyYXRpbyc6IDMsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnOiAtMjQsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC4wMyxcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDIsXG5cdCAgICAgICAgICAgICdrbmVlJzogMTZcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdzaWRlJzoge1xuXHQgICAgICAgICAgICAncmF0aW8nOiA2LFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJzogLTMwLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuMjUsXG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAzLFxuXHQgICAgICAgICAgICAna25lZSc6IDEwXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZUNvbXByZXNzb3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnc2lkZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5zaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVDb21wcmVzc29yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Nb25vIGNvZXJjZXMgdGhlIGluY29taW5nIG1vbm8gb3Igc3RlcmVvIHNpZ25hbCBpbnRvIGEgbW9ubyBzaWduYWxcblx0XHQgKiAgICAgICAgIHdoZXJlIGJvdGggbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gVGhpcyBjYW4gYmUgdXNlZnVsXG5cdFx0ICogICAgICAgICBmb3IgW3N0ZXJlbyBpbWFnaW5nXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TdGVyZW9faW1hZ2luZykuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ubyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBtZXJnZSB0aGUgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NZXJnZSgpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9tZXJnZSwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAxKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1vbm8sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vbm87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIGNvbXByZXNzb3Igd2l0aCBzZXBlcmF0ZSBjb250cm9scyBvdmVyIGxvdy9taWQvaGlnaCBkeW5hbWljc1xuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBsb3cvbWlkL2hpZ2ggY29tcHJlc3NvciBzZXR0aW5ncy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIG11bHRpYmFuZCA9IG5ldyBUb25lLk11bHRpYmFuZENvbXByZXNzb3Ioe1xuXHRcdCAqICBcdFwibG93RnJlcXVlbmN5XCIgOiAyMDAsXG5cdFx0ICogIFx0XCJoaWdoRnJlcXVlbmN5XCIgOiAxMzAwXG5cdFx0ICogIFx0XCJsb3dcIiA6IHtcblx0XHQgKiAgXHRcdFwidGhyZXNob2xkXCIgOiAtMTJcblx0XHQgKiAgXHR9XG5cdFx0ICogIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZENvbXByZXNzb3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhhcmd1bWVudHMsIFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvci5kZWZhdWx0cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3BsaXQgdGhlIGluY29taW5nIHNpZ25hbCBpbnRvIGhpZ2gvbWlkL2xvd1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpYmFuZFNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5NdWx0aWJhbmRTcGxpdCh7XG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knOiBvcHRpb25zLmxvd0ZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiBvcHRpb25zLmhpZ2hGcmVxdWVuY3lcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBsb3cvbWlkIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IHRoaXMuX3NwbGl0dGVyLmxvd0ZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gdGhpcy5fc3BsaXR0ZXIuaGlnaEZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3V0cHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgbG93IGZyZXF1ZW5jaWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvdyA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5sb3cpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIG1pZCBmcmVxdWVuY2llcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Db21wcmVzc29yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMubWlkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBoaWdoIGZyZXF1ZW5jaWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2ggPSBuZXcgVG9uZS5Db21wcmVzc29yKG9wdGlvbnMuaGlnaCk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBjb21wcmVzc29yXG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIubG93LmNoYWluKHRoaXMubG93LCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIubWlkLmNoYWluKHRoaXMubWlkLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuaGlnaC5jaGFpbih0aGlzLmhpZ2gsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdoaWdoJyxcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbG93JzogVG9uZS5Db21wcmVzc29yLmRlZmF1bHRzLFxuXHQgICAgICAgICdtaWQnOiBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMsXG5cdCAgICAgICAgJ2hpZ2gnOiBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMsXG5cdCAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IDI1MCxcblx0ICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IDIwMDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTXVsdGliYW5kQ29tcHJlc3Nvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmxvdy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGlnaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQgJiYgIXdpbmRvdy5TdGVyZW9QYW5uZXJOb2RlKSB7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBAY2xhc3MgU2hpbW1lZCBTdGVyZW9QYW5uZXJOb2RlXG5cdFx0XHQgKiBAcGFyYW0gIHtBdWRpb0NvbnRleHR9IGNvbnRleHRcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB2YXIgU3RlcmVvUGFubmVyTm9kZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgYXVkaW8gY29udGV4dFxuXHRcdFx0XHQgKiBAdHlwZSB7QXVkaW9Db250ZXh0fVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSBsZWZ0L3JpZ2h0IHBhbm5pbmcuIFstMSwgMV1cblx0XHRcdFx0ICogQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHRcdCAqIEBzaWduYWxcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMucGFuID0gbmV3IFRvbmUuU2lnbmFsKDAsIFRvbmUuVHlwZS5BdWRpb1JhbmdlKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIEVxdWFsIHBvd2VyIHNjYWxpbmcgb2YgdGhlIHJpZ2h0IGdhaW5cblx0XHRcdFx0ICogQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciByaWdodFdhdmVTaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmVxdWFsUG93ZXJTY2FsZSgodmFsICsgMSkgLyAyKTtcblx0ICAgICAgICAgICAgfSwgNDA5Nik7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBFcXVhbCBwb3dlciBzY2FsaW5nIG9mIHRoZSBsZWZ0IGdhaW5cblx0XHRcdFx0ICogQHR5cGUge1RvbmUuV2F2ZVNoYXBlcn1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBsZWZ0V2F2ZVNoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZXF1YWxQb3dlclNjYWxlKDEgLSAodmFsICsgMSkgLyAyKTtcblx0ICAgICAgICAgICAgfSwgNDA5Nik7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgbGVmdCBnYWluIHZhbHVlXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgbGVmdEdhaW4gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgcmlnaHQgZ2FpbiB2YWx1ZVxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHJpZ2h0R2FpbiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFNwbGl0IHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuU3BsaXR9XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgc3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIEtlZXBzIHRoZSB3YXZlc2hhcGVycyBmcm9tIG9wdGltaXppbmcgMHNcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuWmVyb31cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciB6ZXJvID0gbmV3IFRvbmUuWmVybygpO1xuXHQgICAgICAgICAgICB6ZXJvLmZhbihyaWdodFdhdmVTaGFwZXIsIGxlZnRXYXZlU2hhcGVyKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIE1lcmdlIHRoZSBvdXRnb2luZyBzaWduYWxcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgbWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICAgICAgc3BsaXQubGVmdC5jaGFpbihsZWZ0R2FpbiwgbWVyZ2UubGVmdCk7XG5cdCAgICAgICAgICAgIHNwbGl0LnJpZ2h0LmNoYWluKHJpZ2h0R2FpbiwgbWVyZ2UucmlnaHQpO1xuXHQgICAgICAgICAgICB0aGlzLnBhbi5jaGFpbihsZWZ0V2F2ZVNoYXBlciwgbGVmdEdhaW4uZ2Fpbik7XG5cdCAgICAgICAgICAgIHRoaXMucGFuLmNoYWluKHJpZ2h0V2F2ZVNoYXBlciwgcmlnaHRHYWluLmdhaW4pO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgU3RlcmVvUGFubmVyTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuZGlzY29ubmVjdC5hcHBseSh0aGlzLm91dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFN0ZXJlb1Bhbm5lck5vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmNvbm5lY3QuYXBwbHkodGhpcy5vdXRwdXQsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICAvL2FkZCBpdCB0byB0aGUgQXVkaW9Db250ZXh0XG5cdCAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVTdGVyZW9QYW5uZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgU3RlcmVvUGFubmVyTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlU3RlcmVvUGFubmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFN0ZXJlb1Bhbm5lck5vZGUodGhpcyk7XG5cdCAgICAgICAgfTtcblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBhbm5lciBpcyBhbiBlcXVhbCBwb3dlciBMZWZ0L1JpZ2h0IFBhbm5lciBhbmQgZG9lcyBub3Rcblx0XHQgKiAgICAgICAgICBzdXBwb3J0IDNELiBQYW5uZXIgdXNlcyB0aGUgU3RlcmVvUGFubmVyTm9kZSB3aGVuIGF2YWlsYWJsZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbaW5pdGlhbFBhbj0wXSBUaGUgaW5pdGFpbCBwYW5uZXIgdmFsdWUgKGNlbnRlcikuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIC8vcGFuIHRoZSBpbnB1dCBzaWduYWwgaGFyZCByaWdodC5cblx0XHQgKiAgdmFyIHBhbm5lciA9IG5ldyBUb25lLlBhbm5lcigxKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyID0gZnVuY3Rpb24gKGluaXRpYWxQYW4pIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiAgdGhlIHBhbm5lciBub2RlXG5cdFx0XHQqICBAdHlwZSB7U3RlcmVvUGFubmVyTm9kZX1cblx0XHRcdCogIEBwcml2YXRlXG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVTdGVyZW9QYW5uZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCogIFRoZSBwYW4gY29udHJvbC4gLTEgPSBoYXJkIGxlZnQsIDEgPSBoYXJkIHJpZ2h0LlxuXHRcdFx0KiAgQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHQqICBAc2lnbmFsXG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMucGFuID0gdGhpcy5fcGFubmVyLnBhbjtcblx0ICAgICAgICAvL2luaXRpYWwgdmFsdWVcblx0ICAgICAgICB0aGlzLnBhbi52YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyhpbml0aWFsUGFuLCAwKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgncGFuJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYW5uZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdwYW4nKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5wYW4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhbm5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIHNwYXRpYWxpemVkIHBhbm5lciBub2RlIHdoaWNoIHN1cHBvcnRzIGVxdWFscG93ZXIgb3IgSFJURiBwYW5uaW5nLlxuXHRcdCAqICAgICAgICAgIFRyaWVzIHRvIG5vcm1hbGl6ZSB0aGUgQVBJIGFjcm9zcyB2YXJpb3VzIGJyb3dzZXJzLiBTZWUgVG9uZS5MaXN0ZW5lclxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBwb3NpdGlvblggVGhlIGluaXRpYWwgeCBwb3NpdGlvbi5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHBvc2l0aW9uWSBUaGUgaW5pdGlhbCB5IHBvc2l0aW9uLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gcG9zaXRpb25aIFRoZSBpbml0aWFsIHogcG9zaXRpb24uXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNEID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3Bvc2l0aW9uWCcsXG5cdCAgICAgICAgICAgICdwb3NpdGlvblknLFxuXHQgICAgICAgICAgICAncG9zaXRpb25aJ1xuXHQgICAgICAgIF0sIFRvbmUuUGFubmVyM0QpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhbm5lciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1Bhbm5lck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVQYW5uZXIoKTtcblx0ICAgICAgICAvL3NldCBzb21lIHZhbHVlc1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5wYW5uaW5nTW9kZWwgPSBvcHRpb25zLnBhbm5pbmdNb2RlbDtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIubWF4RGlzdGFuY2UgPSBvcHRpb25zLm1heERpc3RhbmNlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXN0YW5jZU1vZGVsID0gb3B0aW9ucy5kaXN0YW5jZU1vZGVsO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5jb25lT3V0ZXJHYWluID0gb3B0aW9ucy5jb25lT3V0ZXJHYWluO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5jb25lT3V0ZXJBbmdsZSA9IG9wdGlvbnMuY29uZU91dGVyQW5nbGU7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbmVJbm5lckFuZ2xlID0gb3B0aW9ucy5jb25lSW5uZXJBbmdsZTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIucmVmRGlzdGFuY2UgPSBvcHRpb25zLnJlZkRpc3RhbmNlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5yb2xsb2ZmRmFjdG9yID0gb3B0aW9ucy5yb2xsb2ZmRmFjdG9yO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IG9yaWVudGF0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBbXG5cdCAgICAgICAgICAgIG9wdGlvbnMub3JpZW50YXRpb25YLFxuXHQgICAgICAgICAgICBvcHRpb25zLm9yaWVudGF0aW9uWSxcblx0ICAgICAgICAgICAgb3B0aW9ucy5vcmllbnRhdGlvblpcblx0ICAgICAgICBdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBbXG5cdCAgICAgICAgICAgIG9wdGlvbnMucG9zaXRpb25YLFxuXHQgICAgICAgICAgICBvcHRpb25zLnBvc2l0aW9uWSxcblx0ICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvblpcblx0ICAgICAgICBdO1xuXHQgICAgICAgIC8vIHNldCB0aGUgZGVmYXVsdCBwb3NpdGlvbi9vcmllbnRhdGlvblxuXHQgICAgICAgIHRoaXMub3JpZW50YXRpb25YID0gb3B0aW9ucy5vcmllbnRhdGlvblg7XG5cdCAgICAgICAgdGhpcy5vcmllbnRhdGlvblkgPSBvcHRpb25zLm9yaWVudGF0aW9uWTtcblx0ICAgICAgICB0aGlzLm9yaWVudGF0aW9uWiA9IG9wdGlvbnMub3JpZW50YXRpb25aO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb25YID0gb3B0aW9ucy5wb3NpdGlvblg7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvblkgPSBvcHRpb25zLnBvc2l0aW9uWTtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uWiA9IG9wdGlvbnMucG9zaXRpb25aO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFubmVyM0QsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0cyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Bvc2l0aW9uWCc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWSc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWic6IDAsXG5cdCAgICAgICAgJ29yaWVudGF0aW9uWCc6IDAsXG5cdCAgICAgICAgJ29yaWVudGF0aW9uWSc6IDAsXG5cdCAgICAgICAgJ29yaWVudGF0aW9uWic6IDAsXG5cdCAgICAgICAgJ3Bhbm5pbmdNb2RlbCc6ICdlcXVhbHBvd2VyJyxcblx0ICAgICAgICAnbWF4RGlzdGFuY2UnOiAxMDAwMCxcblx0ICAgICAgICAnZGlzdGFuY2VNb2RlbCc6ICdpbnZlcnNlJyxcblx0ICAgICAgICAnY29uZU91dGVyR2Fpbic6IDAsXG5cdCAgICAgICAgJ2NvbmVPdXRlckFuZ2xlJzogMzYwLFxuXHQgICAgICAgICdjb25lSW5uZXJBbmdsZSc6IDM2MCxcblx0ICAgICAgICAncmVmRGlzdGFuY2UnOiAxLFxuXHQgICAgICAgICdyb2xsb2ZmRmFjdG9yJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSByYW1wIHRpbWUgd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgc2V0VGFyZ2V0QXRUaW1lXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuX3JhbXBUaW1lQ29uc3RhbnQgPSAwLjAxO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgaW4gM2Qgc3BhY2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGFubmVyM0R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24gKHgsIHksIHopIHtcblx0ICAgICAgICBpZiAodGhpcy5fcGFubmVyLnBvc2l0aW9uWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnBvc2l0aW9uWC5zZXRUYXJnZXRBdFRpbWUoeCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnBvc2l0aW9uWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnBvc2l0aW9uWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIuc2V0UG9zaXRpb24oeCwgeSwgeik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHNvdXJjZSBpbiAzZCBzcGFjZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB5XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHpcblx0XHQgKiAgQHJldHVybiB7VG9uZS5QYW5uZXIzRH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuc2V0T3JpZW50YXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeikge1xuXHQgICAgICAgIGlmICh0aGlzLl9wYW5uZXIub3JpZW50YXRpb25YKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIub3JpZW50YXRpb25YLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIub3JpZW50YXRpb25ZLnNldFRhcmdldEF0VGltZSh5LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIub3JpZW50YXRpb25aLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5zZXRPcmllbnRhdGlvbih4LCB5LCB6KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAncG9zaXRpb25YJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25ZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdwb3NpdGlvblknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ3Bvc2l0aW9uWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBvcmllbnRhdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG9yaWVudGF0aW9uWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAnb3JpZW50YXRpb25YJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IG9yaWVudGF0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgb3JpZW50YXRpb25ZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdvcmllbnRhdGlvblknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogb3JpZW50YXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBvcmllbnRhdGlvblpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ29yaWVudGF0aW9uWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBQcm94eSBhIHByb3BlcnR5IG9uIHRoZSBwYW5uZXIgdG8gYW4gZXhwb3NlZCBwdWJsaWMgcHJvcGVyeVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5ID0gZnVuY3Rpb24gKHByb3ApIHtcblx0ICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsIHByb3AsIHtcblx0ICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wYW5uZXJbcHJvcF0gPSB2YWw7XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bhbm5lcltwcm9wXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGFubmluZyBtb2RlbC4gRWl0aGVyIFwiZXF1YWxwb3dlclwiIG9yIFwiSFJURlwiLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcGFubmluZ01vZGVsXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdwYW5uaW5nTW9kZWwnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIHJlZmVyZW5jZSBkaXN0YW5jZSBmb3IgcmVkdWNpbmcgdm9sdW1lIGFzIHNvdXJjZSBtb3ZlIGZ1cnRoZXIgZnJvbSB0aGUgbGlzdGVuZXJcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHJlZkRpc3RhbmNlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdyZWZEaXN0YW5jZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlc2NyaWJlcyBob3cgcXVpY2tseSB0aGUgdm9sdW1lIGlzIHJlZHVjZWQgYXMgc291cmNlIG1vdmVzIGF3YXkgZnJvbSBsaXN0ZW5lci5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHJvbGxvZmZGYWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ3JvbGxvZmZGYWN0b3InKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGlzdGFuY2UgbW9kZWwgdXNlZCBieSwgIFwibGluZWFyXCIsIFwiaW52ZXJzZVwiLCBvciBcImV4cG9uZW50aWFsXCIuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBkaXN0YW5jZU1vZGVsXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdkaXN0YW5jZU1vZGVsJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFuZ2xlLCBpbiBkZWdyZWVzLCBpbnNpZGUgb2Ygd2hpY2ggdGhlcmUgd2lsbCBiZSBubyB2b2x1bWUgcmVkdWN0aW9uXG5cdFx0ICogIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgY29uZUlubmVyQW5nbGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2NvbmVJbm5lckFuZ2xlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFuZ2xlLCBpbiBkZWdyZWVzLCBvdXRzaWRlIG9mIHdoaWNoIHRoZSB2b2x1bWUgd2lsbCBiZSByZWR1Y2VkXG5cdFx0ICogIHRvIGEgY29uc3RhbnQgdmFsdWUgb2YgY29uZU91dGVyR2FpblxuXHRcdCAqICBAdHlwZSB7RGVncmVlc31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIGNvbmVPdXRlckFuZ2xlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdjb25lT3V0ZXJBbmdsZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBnYWluIG91dHNpZGUgb2YgdGhlIGNvbmVPdXRlckFuZ2xlXG5cdFx0ICogIEB0eXBlIHtHYWlufVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgY29uZU91dGVyR2FpblxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnY29uZU91dGVyR2FpbicpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gc291cmNlIGFuZCBsaXN0ZW5lcixcblx0XHQgKiAgYWZ0ZXIgd2hpY2ggdGhlIHZvbHVtZSB3aWxsIG5vdCBiZSByZWR1Y2VkIGFueSBmdXJ0aGVyLlxuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBtYXhEaXN0YW5jZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnbWF4RGlzdGFuY2UnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFubmVyM0R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYW5uZXIzRDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGFuVm9sIGlzIGEgVG9uZS5QYW5uZXIgYW5kIFRvbmUuVm9sdW1lIGluIG9uZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0F1ZGlvUmFuZ2V9IHBhbiB0aGUgaW5pdGlhbCBwYW5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHZvbHVtZSBUaGUgb3V0cHV0IHZvbHVtZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3BhbiB0aGUgaW5jb21pbmcgc2lnbmFsIGxlZnQgYW5kIGRyb3AgdGhlIHZvbHVtZVxuXHRcdCAqIHZhciBwYW5Wb2wgPSBuZXcgVG9uZS5QYW5Wb2woLTAuMjUsIC0xMik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhblZvbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwYW4nLFxuXHQgICAgICAgICAgICAndm9sdW1lJ1xuXHQgICAgICAgIF0sIFRvbmUuUGFuVm9sKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYW5uaW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5QYW5uZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5QYW5uZXIob3B0aW9ucy5wYW4pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBML1IgcGFubmluZyBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb1JhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucGFuID0gdGhpcy5fcGFubmVyLnBhbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdm9sdW1lIGNvbnRyb2wgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbm5lY3QodGhpcy5fdm9sdW1lKTtcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncGFuJyxcblx0ICAgICAgICAgICAgJ3ZvbHVtZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhblZvbCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFuVm9sLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwYW4nOiAwLFxuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBNdXRlL3VubXV0ZSB0aGUgdm9sdW1lXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGFuVm9sI1xuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhblZvbC5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYW5Wb2x9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFuVm9sLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncGFuJyxcblx0ICAgICAgICAgICAgJ3ZvbHVtZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5wYW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFuVm9sO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuU29sbyBsZXRzIHlvdSBpc29sYXRlIGEgc3BlY2lmaWMgYXVkaW8gc3RyZWFtLiBXaGVuXG5cdFx0ICogICAgICAgICBhbiBpbnN0YW5jZSBpcyBzZXQgdG8gYHNvbG89dHJ1ZWAsIGl0IHdpbGwgbXV0ZSBhbGwgb3RoZXIgaW5zdGFuY2VzLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNvbG9BID0gbmV3IFRvbmUuU29sbygpXG5cdFx0ICogdmFyIHNvbG9CID0gbmV3IFRvbmUuU29sbygpXG5cdFx0ICogc29sb0Euc29sbyA9IHRydWVcblx0XHQgKiAvL25vIGF1ZGlvIHdpbGwgcGFzcyB0aHJvdWdoIHNvbG9CXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzb2xvJ10sIFRvbmUuU29sbyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgaW5wdXQgYW5kIG91dHB1dCBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBib3VuZCBfc29sb2VkIG1ldGhvZFxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvbG9CaW5kID0gdGhpcy5fc29sb2VkLmJpbmQodGhpcyk7XG5cdCAgICAgICAgLy9saXN0ZW4gZm9yIHNvbG8gZXZlbnRzIGNsYXNzLXdpZGUuXG5cdCAgICAgICAgdGhpcy5jb250ZXh0Lm9uKCdzb2xvJywgdGhpcy5fc29sb0JpbmQpO1xuXHQgICAgICAgIC8vc2V0IGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuc29sbyA9IG9wdGlvbnMuc29sbztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNvbG8sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5kZWZhdWx0cyA9IHsgc29sbzogZmFsc2UgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJc29sYXRlcyB0aGlzIGluc3RhbmNlIGFuZCBtdXRlcyBhbGwgb3RoZXIgaW5zdGFuY2VzIG9mIFRvbmUuU29sby5cblx0XHQgKiAgT25seSBvbmUgaW5zdGFuY2UgY2FuIGJlIHNvbG9lZCBhdCBhIHRpbWUuIEEgc29sb2VkXG5cdFx0ICogIGluc3RhbmNlIHdpbGwgcmVwb3J0IGBzb2xvPWZhbHNlYCB3aGVuIGFub3RoZXIgaW5zdGFuY2UgaXMgc29sb2VkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Tb2xvI1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgc29sb1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU29sby5wcm90b3R5cGUsICdzb2xvJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTb2xvZWQoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNvbG8pIHtcblx0ICAgICAgICAgICAgaWYgKHNvbG8pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FkZFNvbG8oKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVNvbG8oKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuZW1pdCgnc29sbycsIHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHRoZSBjdXJyZW50IGluc3RhbmNlIGlzIG11dGVkLCBpLmUuIGFub3RoZXIgaW5zdGFuY2UgaXMgc29sb2VkXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNvbG8jXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBtdXRlZFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNvbG8ucHJvdG90eXBlLCAnbXV0ZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LmdhaW4udmFsdWUgPT09IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBBZGQgdGhpcyB0byB0aGUgc29sb2VkIGFycmF5XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX2FkZFNvbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCFUb25lLmlzQXJyYXkodGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbykpIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbyA9IFtdO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIXRoaXMuX2lzU29sb2VkKCkpIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5wdXNoKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZW1vdmUgdGhpcyBmcm9tIHRoZSBzb2xvZWQgYXJyYXlcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5fcmVtb3ZlU29sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5faXNTb2xvZWQoKSkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLmluZGV4T2YodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8uc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQHJldHVybiB7Qm9vbGVhbn0gSXMgdGhpcyBvbiB0aGUgc29sb2VkIGFycmF5XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX2lzU29sb2VkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbykpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8ubGVuZ3RoICE9PSAwICYmIHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8uaW5kZXhPZih0aGlzKSAhPT0gLTE7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgbm8gb25lIGlzIHNvbG9lZFxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9ub1NvbG9zID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiAhVG9uZS5pc0FycmF5KHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8pIHx8IHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8ubGVuZ3RoID09PSAwO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTb2xvIHRoZSBjdXJyZW50IGluc3RhbmNlIGFuZCB1bnNvbG8gYWxsIG90aGVyIGluc3RhbmNlcy5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5Tb2xvfSAgaW5zdGFuY2UgIFRoZSBpbnN0YW5jZSB3aGljaCBpcyBiZWluZyBzb2xvZWQvdW5zb2xvZWQuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9zb2xvZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX2lzU29sb2VkKCkpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5nYWluLnZhbHVlID0gMTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX25vU29sb3MoKSkge1xuXHQgICAgICAgICAgICAvL25vIG9uZSBpcyBzb2xvZWRcblx0ICAgICAgICAgICAgdGhpcy5pbnB1dC5nYWluLnZhbHVlID0gMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmdhaW4udmFsdWUgPSAwO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuU29sb30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLmNvbnRleHQub2ZmKCdzb2xvJywgdGhpcy5fc29sb0JpbmQpO1xuXHQgICAgICAgIHRoaXMuX3JlbW92ZVNvbG8oKTtcblx0ICAgICAgICB0aGlzLl9zb2xvQmluZCA9IG51bGw7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Tb2xvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBHZXQgdGhlIGN1cnJlbnQgd2F2ZWZvcm0gZGF0YSBvZiB0aGUgY29ubmVjdGVkIGF1ZGlvIHNvdXJjZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHNpemUgVGhlIHNpemUgb2YgdGhlIEZGVC4gVmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnc2l6ZSddLCBUb25lLldhdmVmb3JtKTtcblx0ICAgICAgICBvcHRpb25zLnR5cGUgPSBUb25lLkFuYWx5c2VyLlR5cGUuV2F2ZWZvcm07XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW5hbHlzZXIgbm9kZS5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFuYWx5c2VyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5BbmFseXNlcihvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLldhdmVmb3JtLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0uZGVmYXVsdHMgPSB7ICdzaXplJzogMTAyNCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldHMgdGhlIHdhdmVmb3JtIG9mIHRoZSBhdWRpbyBzb3VyY2UuIFJldHVybnMgdGhlIHdhdmVmb3JtIGRhdGFcblx0XHQgKiAgb2YgbGVuZ3RoIFtzaXplXSgjc2l6ZSkgYXMgYSBGbG9hdDMyQXJyYXkgd2l0aCB2YWx1ZXMgYmV0d2VlbiAtMSBhbmQgMS5cblx0XHQgKiAgQHJldHVybnMge1R5cGVkQXJyYXl9XG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtLnByb3RvdHlwZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNpemUgb2YgYW5hbHlzaXMuIFRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLldhdmVmb3JtI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5XYXZlZm9ybS5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc2l6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYW5hbHlzZXIuc2l6ZSA9IHNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLldhdmVmb3JtfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlZm9ybS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuV2F2ZWZvcm07XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkN0cmxJbnRlcnBvbGF0ZSB3aWxsIGludGVycG9sYXRlIGJldHdlZW4gZ2l2ZW4gdmFsdWVzIGJhc2VkXG5cdFx0ICogICAgICAgICBvbiB0aGUgXCJpbmRleFwiIHByb3BlcnR5LiBQYXNzaW5nIGluIGFuIGFycmF5IG9yIG9iamVjdCBsaXRlcmFsXG5cdFx0ICogICAgICAgICB3aWxsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIHBhcmFtZXRlcnMuIE5vdGUgKGkuZS4gXCJDM1wiKVxuXHRcdCAqICAgICAgICAgYW5kIFRpbWUgKGkuZS4gXCI0biArIDJcIikgY2FuIGJlIGludGVycG9sYXRlZC4gQWxsIG90aGVyIHZhbHVlcyBhcmVcblx0XHQgKiAgICAgICAgIGFzc3VtZWQgdG8gYmUgbnVtYmVycy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGludGVycCA9IG5ldyBUb25lLkN0cmxJbnRlcnBvbGF0ZShbMCwgMiwgOSwgNF0pO1xuXHRcdCAqIGludGVycC5pbmRleCA9IDAuNzU7XG5cdFx0ICogaW50ZXJwLnZhbHVlOyAvL3JldHVybnMgMS41XG5cdFx0ICpcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgaW50ZXJwID0gbmV3IFRvbmUuQ3RybEludGVycG9sYXRlKFtcblx0XHQgKiBcdFsyLCA0LCA1XSxcblx0XHQgKiBcdFs5LCAzLCAyXSxcblx0XHQgKiBdKTtcblx0XHQgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIGFycmF5IG9mIHZhbHVlcyB0byBpbnRlcnBvbGF0ZSBvdmVyXG5cdFx0ICogQHBhcmFtIHtQb3NpdGl2ZX0gaW5kZXggVGhlIGluaXRpYWwgaW50ZXJwb2xhdGlvbiBpbmRleC5cblx0XHQgKiBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3ZhbHVlcycsXG5cdCAgICAgICAgICAgICdpbmRleCdcblx0ICAgICAgICBdLCBUb25lLkN0cmxJbnRlcnBvbGF0ZSk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZXMgdG8gaW50ZXJwb2xhdGUgYmV0d2VlblxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG9wdGlvbnMudmFsdWVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBpbnRlcnBvbGF0ZWQgaW5kZXggYmV0d2VlbiB2YWx1ZXMuIEZvciBleGFtcGxlOiBhIHZhbHVlIG9mIDEuNVxuXHRcdFx0ICogIHdvdWxkIGludGVycG9sYXRlIGVxdWFsbHkgYmV0d2VlbiB0aGUgdmFsdWUgYXQgaW5kZXggMVxuXHRcdFx0ICogIGFuZCB0aGUgdmFsdWUgYXQgaW5kZXggMi4gXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIGludGVycC5pbmRleCA9IDA7IFxuXHRcdFx0ICogaW50ZXJwLnZhbHVlOyAvL3JldHVybnMgdGhlIHZhbHVlIGF0IDBcblx0XHRcdCAqIGludGVycC5pbmRleCA9IDAuNTtcblx0XHRcdCAqIGludGVycC52YWx1ZTsgLy9yZXR1cm5zIHRoZSB2YWx1ZSBiZXR3ZWVuIGluZGljZXMgMCBhbmQgMS4gXG5cdFx0XHQgKiAgQHR5cGUgIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3RybEludGVycG9sYXRlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2luZGV4JzogMCxcblx0ICAgICAgICAndmFsdWVzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgaW50ZXJwb2xhdGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBpbmRleFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybEludGVycG9sYXRlI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxJbnRlcnBvbGF0ZS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleDtcblx0ICAgICAgICAgICAgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgdGhpcy52YWx1ZXMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciBsb3dlclBvc2l0aW9uID0gTWF0aC5mbG9vcihpbmRleCk7XG5cdCAgICAgICAgICAgIHZhciBsb3dlciA9IHRoaXMudmFsdWVzW2xvd2VyUG9zaXRpb25dO1xuXHQgICAgICAgICAgICB2YXIgdXBwZXIgPSB0aGlzLnZhbHVlc1tNYXRoLmNlaWwoaW5kZXgpXTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ludGVycG9sYXRlKGluZGV4IC0gbG93ZXJQb3NpdGlvbiwgbG93ZXIsIHVwcGVyKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBpbnRlcnBvbGF0aW9uIHJvdXRpbmVcblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBpbmRleCAgVGhlIGluZGV4IGJldHdlZW4gdGhlIGxvd2VyIGFuZCB1cHBlclxuXHRcdCAqICBAcGFyYW0gIHsqfSAgbG93ZXIgXG5cdFx0ICogIEBwYXJhbSAgeyp9ICB1cHBlciBcblx0XHQgKiAgQHJldHVybiAgeyp9ICBUaGUgaW50ZXJwb2xhdGVkIHZhbHVlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZS5wcm90b3R5cGUuX2ludGVycG9sYXRlID0gZnVuY3Rpb24gKGluZGV4LCBsb3dlciwgdXBwZXIpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KGxvd2VyKSkge1xuXHQgICAgICAgICAgICB2YXIgcmV0QXJyYXkgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb3dlci5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgcmV0QXJyYXlbaV0gPSB0aGlzLl9pbnRlcnBvbGF0ZShpbmRleCwgbG93ZXJbaV0sIHVwcGVyW2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0QXJyYXk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzT2JqZWN0KGxvd2VyKSkge1xuXHQgICAgICAgICAgICB2YXIgcmV0T2JqID0ge307XG5cdCAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gbG93ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHJldE9ialthdHRyXSA9IHRoaXMuX2ludGVycG9sYXRlKGluZGV4LCBsb3dlclthdHRyXSwgdXBwZXJbYXR0cl0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXRPYmo7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgbG93ZXIgPSB0aGlzLl90b051bWJlcihsb3dlcik7XG5cdCAgICAgICAgICAgIHVwcGVyID0gdGhpcy5fdG9OdW1iZXIodXBwZXIpO1xuXHQgICAgICAgICAgICByZXR1cm4gKDEgLSBpbmRleCkgKiBsb3dlciArIGluZGV4ICogdXBwZXI7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGZyb20gdGhlIGdpdmVuIHR5cGUgaW50byBhIG51bWJlclxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ8U3RyaW5nfSAgdmFsdWVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZS5fdG9OdW1iZXIgPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodmFsKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGFzc3VtZSB0aGF0IGl0J3MgVGltZS4uLlxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHModmFsKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkN0cmxJbnRlcnBvbGF0ZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsSW50ZXJwb2xhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkN0cmxNYXJrb3YgcmVwcmVzZW50cyBhIE1hcmtvdiBDaGFpbiB3aGVyZSBlYWNoIGNhbGxcblx0XHQgKiAgICAgICAgIHRvIFRvbmUuQ3RybE1hcmtvdi5uZXh0IHdpbGwgbW92ZSB0byB0aGUgbmV4dCBzdGF0ZS4gSWYgdGhlIG5leHRcblx0XHQgKiAgICAgICAgIHN0YXRlIGNob2ljZSBpcyBhbiBhcnJheSwgdGhlIG5leHQgc3RhdGUgaXMgY2hvc2VuIHJhbmRvbWx5IHdpdGhcblx0XHQgKiAgICAgICAgIGV2ZW4gcHJvYmFiaWxpdHkgZm9yIGFsbCBvZiB0aGUgY2hvaWNlcy4gRm9yIGEgd2VpZ2h0ZWQgcHJvYmFiaWxpdHlcblx0XHQgKiAgICAgICAgIG9mIHRoZSBuZXh0IGNob2ljZXMsIHBhc3MgaW4gYW4gb2JqZWN0IHdpdGggXCJzdGF0ZVwiIGFuZCBcInByb2JhYmlsaXR5XCIgYXR0cmlidXRlcy4gXG5cdFx0ICogICAgICAgICBUaGUgcHJvYmFiaWxpdGllcyB3aWxsIGJlIG5vcm1hbGl6ZWQgYW5kIHRoZW4gY2hvc2VuLiBJZiBubyBuZXh0IG9wdGlvbnNcblx0XHQgKiAgICAgICAgIGFyZSBnaXZlbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUsIHRoZSBzdGF0ZSB3aWxsIHN0YXkgdGhlcmUuIFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgY2hhaW4gPSBuZXcgVG9uZS5DdHJsTWFya292KHtcblx0XHQgKiBcdFwiYmVnaW5uaW5nXCIgOiBbXCJlbmRcIiwgXCJtaWRkbGVcIl0sXG5cdFx0ICogXHRcIm1pZGRsZVwiIDogXCJlbmRcIlxuXHRcdCAqIH0pO1xuXHRcdCAqIGNoYWluLnZhbHVlID0gXCJiZWdpbm5pbmdcIjtcblx0XHQgKiBjaGFpbi5uZXh0KCk7IC8vcmV0dXJucyBcImVuZFwiIG9yIFwibWlkZGxlXCIgd2l0aCA1MCUgcHJvYmFiaWxpdHlcblx0XHQgKlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjaGFpbiA9IG5ldyBUb25lLkN0cmxNYXJrb3Yoe1xuXHRcdCAqIFx0XCJiZWdpbm5pbmdcIiA6IFt7XCJ2YWx1ZVwiIDogXCJlbmRcIiwgXCJwcm9iYWJpbGl0eVwiIDogMC44fSwgXG5cdFx0ICogXHRcdFx0XHRcdHtcInZhbHVlXCIgOiBcIm1pZGRsZVwiLCBcInByb2JhYmlsaXR5XCIgOiAwLjJ9XSxcblx0XHQgKiBcdFwibWlkZGxlXCIgOiBcImVuZFwiXG5cdFx0ICogfSk7XG5cdFx0ICogY2hhaW4udmFsdWUgPSBcImJlZ2lubmluZ1wiO1xuXHRcdCAqIGNoYWluLm5leHQoKTsgLy9yZXR1cm5zIFwiZW5kXCIgd2l0aCA4MCUgcHJvYmFiaWxpdHkgb3IgXCJtaWRkbGVcIiB3aXRoIDIwJS5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IHZhbHVlcyBBbiBvYmplY3Qgd2l0aCB0aGUgc3RhdGUgbmFtZXMgYXMgdGhlIGtleXNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIG5leHQgc3RhdGUocykgYXMgdGhlIHZhbHVlcy4gXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YgPSBmdW5jdGlvbiAodmFsdWVzLCBpbml0aWFsKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBNYXJrb3YgdmFsdWVzIHdpdGggc3RhdGVzIGFzIHRoZSBrZXlzXG5cdFx0XHQgKiAgYW5kIG5leHQgc3RhdGUocykgYXMgdGhlIHZhbHVlcy4gXG5cdFx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gVG9uZS5kZWZhdWx0QXJnKHZhbHVlcywge30pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBNYXJrb3YgdmFsdWVzLiBUaGUgbmV4dFxuXHRcdFx0ICogIHN0YXRlIHdpbGwgYmUgZXZhbHVhdGVkIGFuZCByZXR1cm5lZCB3aGVuIFRvbmUuQ3RybE1hcmtvdi5uZXh0XG5cdFx0XHQgKiAgaXMgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyhpbml0aWFsLCBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcylbMF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ3RybE1hcmtvdik7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgbmV4dCBzdGF0ZSBvZiB0aGUgTWFya292IHZhbHVlcy4gXG5cdFx0ICogIEByZXR1cm4gIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMudmFsdWVzLmhhc093blByb3BlcnR5KHRoaXMudmFsdWUpKSB7XG5cdCAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy52YWx1ZXNbdGhpcy52YWx1ZV07XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzQXJyYXkobmV4dCkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkaXN0cmlidXRpb24gPSB0aGlzLl9nZXRQcm9iRGlzdHJpYnV0aW9uKG5leHQpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJhbmQgPSBNYXRoLnJhbmRvbSgpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHRvdGFsID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzdHJpYnV0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3QgPSBkaXN0cmlidXRpb25baV07XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmQgPiB0b3RhbCAmJiByYW5kIDwgdG90YWwgKyBkaXN0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaG9zZW4gPSBuZXh0W2ldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChjaG9zZW4pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gY2hvc2VuLnZhbHVlO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNob3Nlbjtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBkaXN0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5leHQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENob29zZSByYW5kb21seSBmcm9tIGFuIGFycmF5IHdlaWdodGVkIG9wdGlvbnMgaW4gdGhlIGZvcm0gXG5cdFx0ICogIHtcInN0YXRlXCIgOiBzdHJpbmcsIFwicHJvYmFiaWxpdHlcIiA6IG51bWJlcn0gb3IgYW4gYXJyYXkgb2YgdmFsdWVzXG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgb3B0aW9ucyBcblx0XHQgKiAgQHJldHVybiAge0FycmF5fSAgVGhlIHJhbmRvbWx5IHNlbGVjdGVkIGNob2ljZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsTWFya292LnByb3RvdHlwZS5fZ2V0UHJvYkRpc3RyaWJ1dGlvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgdmFyIGRpc3RyaWJ1dGlvbiA9IFtdO1xuXHQgICAgICAgIHZhciB0b3RhbCA9IDA7XG5cdCAgICAgICAgdmFyIG5lZWRzTm9ybWFsaXppbmcgPSBmYWxzZTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbaV07XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KG9wdGlvbikpIHtcblx0ICAgICAgICAgICAgICAgIG5lZWRzTm9ybWFsaXppbmcgPSB0cnVlO1xuXHQgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uW2ldID0gb3B0aW9uLnByb2JhYmlsaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uW2ldID0gMSAvIG9wdGlvbnMubGVuZ3RoO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRvdGFsICs9IGRpc3RyaWJ1dGlvbltpXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKG5lZWRzTm9ybWFsaXppbmcpIHtcblx0ICAgICAgICAgICAgLy9ub3JtYWxpemUgdGhlIHZhbHVlc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRpc3RyaWJ1dGlvbi5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uW2pdID0gZGlzdHJpYnV0aW9uW2pdIC8gdG90YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGRpc3RyaWJ1dGlvbjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ3RybE1hcmtvdn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ3RybE1hcmtvdjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEdlbmVyYXRlIHBhdHRlcm5zIGZyb20gYW4gYXJyYXkgb2YgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgSGFzIGEgbnVtYmVyIG9mIGFycGVnZ2lhdGlvbiBhbmQgcmFuZG9taXplZFxuXHRcdCAqICAgICAgICAgc2VsZWN0aW9uIHBhdHRlcm5zLiBcblx0XHQgKiAgICAgICAgICAgPHVsPlxuXHRcdCAqICBcdCAgICAgICAgPGxpPlwidXBcIiAtIGN5Y2xlcyB1cHdhcmQ8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJkb3duXCIgLSBjeWNsZXMgZG93bndhcmQ8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJ1cERvd25cIiAtIHVwIHRoZW4gYW5kIGRvd248L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJkb3duVXBcIiAtIGN5Y2xlcyBkb3duIHRoZW4gYW5kIHVwPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwiYWx0ZXJuYXRlVXBcIiAtIGp1bXAgdXAgdHdvIGFuZCBkb3duIG9uZTwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImFsdGVybmF0ZURvd25cIiAtIGp1bXAgZG93biB0d28gYW5kIHVwIG9uZTwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInJhbmRvbVwiIC0gcmFuZG9tbHkgc2VsZWN0IGFuIGluZGV4PC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwicmFuZG9tV2Fsa1wiIC0gcmFuZG9tbHkgbW92ZXMgb25lIGluZGV4IGF3YXkgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbjwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInJhbmRvbU9uY2VcIiAtIHJhbmRvbWx5IHNlbGVjdCBhbiBpbmRleCB3aXRob3V0IHJlcGVhdGluZyB1bnRpbCBhbGwgdmFsdWVzIGhhdmUgYmVlbiBjaG9zZW4uPC9saT5cblx0XHQgKiAgICAgXHRcdDwvdWw+XG5cdFx0ICogIEBwYXJhbSAge0FycmF5fSAgdmFsdWVzICAgQW4gYXJyYXkgb2Ygb3B0aW9ucyB0byBjaG9vc2UgZnJvbS5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5DdHJsUGF0dGVybi5UeXBlPX0gIHR5cGUgIFRoZSBuYW1lIG9mIHRoZSBwYXR0ZXJuLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndmFsdWVzJyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5DdHJsUGF0dGVybik7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiB2YWx1ZXMgdG8gYXJwZWdnaWF0ZSBvdmVyXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBvcHRpb25zLnZhbHVlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgdmFsdWVzIGFycmF5XG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHlwZSBwbGFjZWhvbGRlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkN0cmxQYXR0ZXJuLlR5cGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNodWZmbGVkIHZhbHVlcyBmb3IgdGhlIFJhbmRvbU9uY2UgdHlwZVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkaXJlY3Rpb24gb2YgdGhlIG1vdmVtZW50XG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsUGF0dGVybik7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIENvbnRyb2wgUGF0dGVybnNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4uVHlwZSA9IHtcblx0ICAgICAgICBVcDogJ3VwJyxcblx0ICAgICAgICBEb3duOiAnZG93bicsXG5cdCAgICAgICAgVXBEb3duOiAndXBEb3duJyxcblx0ICAgICAgICBEb3duVXA6ICdkb3duVXAnLFxuXHQgICAgICAgIEFsdGVybmF0ZVVwOiAnYWx0ZXJuYXRlVXAnLFxuXHQgICAgICAgIEFsdGVybmF0ZURvd246ICdhbHRlcm5hdGVEb3duJyxcblx0ICAgICAgICBSYW5kb206ICdyYW5kb20nLFxuXHQgICAgICAgIFJhbmRvbVdhbGs6ICdyYW5kb21XYWxrJyxcblx0ICAgICAgICBSYW5kb21PbmNlOiAncmFuZG9tT25jZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLiBcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwLFxuXHQgICAgICAgICd2YWx1ZXMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIHBhdHRlcm4uXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsUGF0dGVybiNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy9zb21lIHNhZmVndWFyZHNcblx0ICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzWzBdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLm1pbih0aGlzLmluZGV4LCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWVzW3RoaXMuaW5kZXhdO1xuXHQgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzLmxlbmd0aCAhPT0gdGhpcy5fc2h1ZmZsZWQubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZVZhbHVlcygpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdmFsID0gdGhpcy52YWx1ZXNbdGhpcy5fc2h1ZmZsZWRbdGhpcy5pbmRleF1dO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBhdHRlcm4gdXNlZCB0byBzZWxlY3QgdGhlIG5leHRcblx0XHQgKiAgaXRlbSBmcm9tIHRoZSB2YWx1ZXMgYXJyYXlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybFBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtUb25lLkN0cmxQYXR0ZXJuLlR5cGV9XG5cdFx0ICogIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBudWxsO1xuXHQgICAgICAgICAgICAvL3RoZSBmaXJzdCBpbmRleFxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcERvd24gfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbU9uY2UgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZVVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93biB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93blVwIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVEb3duKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL3RoZSBkaXJlY3Rpb25cblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcERvd24gfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZVVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd25VcCB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlRG93bikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9yYW5kb21zXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZVZhbHVlcygpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uUmFuZG9tKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy52YWx1ZXMubGVuZ3RoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgbmV4dCB2YWx1ZSBnaXZlbiB0aGUgY3VycmVudCBwb3NpdGlvblxuXHRcdCAqICBhbmQgcGF0dGVybi5cblx0XHQgKiAgQHJldHVybiB7Kn0gVGhlIG5leHQgdmFsdWVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdCAgICAgICAgLy9jaG9vc2UgdGhlIG5leHQgaW5kZXhcblx0ICAgICAgICBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd24pIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleC0tO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnZhbHVlcy5sZW5ndGggLSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXBEb3duIHx8IHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duVXApIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4Kys7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4LS07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluZGV4ID49IHRoaXMudmFsdWVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDI7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbSkge1xuXHQgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy52YWx1ZXMubGVuZ3RoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21XYWxrKSB7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpIDwgMC41KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4LS07XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5tYXgodGhpcy5pbmRleCwgMCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4Kys7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gTWF0aC5taW4odGhpcy5pbmRleCwgdGhpcy52YWx1ZXMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gMDtcblx0ICAgICAgICAgICAgICAgIC8vcmVzaHVmZmxlIHRoZSB2YWx1ZXMgZm9yIG5leHQgdGltZVxuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2h1ZmZsZVZhbHVlcygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlVXApIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvbiA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDI7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggLT0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlRG93bikge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCAtPSAyO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDE7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2h1ZmZsZXMgdGhlIHZhbHVlcyBhbmQgcGxhY2VzIHRoZSByZXN1bHRzIGludG8gdGhlIF9zaHVmZmxlZFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUuX3NodWZmbGVWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGNvcHkgPSBbXTtcblx0ICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgY29weVtpXSA9IGk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHdoaWxlIChjb3B5Lmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgdmFyIHJhbmRWYWwgPSBjb3B5LnNwbGljZShNYXRoLmZsb29yKGNvcHkubGVuZ3RoICogTWF0aC5yYW5kb20oKSksIDEpO1xuXHQgICAgICAgICAgICB0aGlzLl9zaHVmZmxlZC5wdXNoKHJhbmRWYWxbMF0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ3RybFBhdHRlcm59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc2h1ZmZsZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsUGF0dGVybjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBDaG9vc2UgYSByYW5kb20gdmFsdWUuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciByYW5kb21XYWxrID0gbmV3IFRvbmUuQ3RybFJhbmRvbSh7XG5cdFx0ICogXHRcIm1pblwiIDogMCxcblx0XHQgKiBcdFwibWF4XCIgOiAxMCxcblx0XHQgKiBcdFwiaW50ZWdlclwiIDogdHJ1ZVxuXHRcdCAqIH0pO1xuXHRcdCAqIHJhbmRvbVdhbGsuZXZhbCgpO1xuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfFRpbWU9fSBtaW4gVGhlIG1pbmltdW0gcmV0dXJuIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcnxUaW1lPX0gbWF4IFRoZSBtYXhpbXVtIHJldHVybiB2YWx1ZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFJhbmRvbSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdtaW4nLFxuXHQgICAgICAgICAgICAnbWF4J1xuXHQgICAgICAgIF0sIFRvbmUuQ3RybFJhbmRvbSk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaW5pbXVtIHJldHVybiB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfFRpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pbiA9IG9wdGlvbnMubWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtYXhpbXVtIHJldHVybiB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfFRpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1heCA9IG9wdGlvbnMubWF4O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIHRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIGFuIGludGVnZXJcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmludGVnZXIgPSBvcHRpb25zLmludGVnZXI7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsUmFuZG9tKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUmFuZG9tLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICdpbnRlZ2VyJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIGEgcmFuZG9tIHZhbHVlIGJldHdlZW4gbWluIGFuZCBtYXguIFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ3RybFJhbmRvbSNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DdHJsUmFuZG9tLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbWluID0gdGhpcy50b1NlY29uZHModGhpcy5taW4pO1xuXHQgICAgICAgICAgICB2YXIgbWF4ID0gdGhpcy50b1NlY29uZHModGhpcy5tYXgpO1xuXHQgICAgICAgICAgICB2YXIgcmFuZCA9IE1hdGgucmFuZG9tKCk7XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSByYW5kICogbWluICsgKDEgLSByYW5kKSAqIG1heDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW50ZWdlcikge1xuXHQgICAgICAgICAgICAgICAgdmFsID0gTWF0aC5mbG9vcih2YWwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsUmFuZG9tO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgZGF0YSBzdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgbXVsdGlwbGUgYnVmZmVycy5cblx0XHQgKiAgXG5cdFx0ICogIEBwYXJhbSAge09iamVjdHxBcnJheX0gICAgdXJscyAgICAgIEFuIG9iamVjdCBsaXRlcmFsIG9yIGFycmF5XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHVybHMgdG8gbG9hZC5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZC4gXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9hZCBhIHdob2xlIGJhbmsgb2YgcGlhbm8gc2FtcGxlc1xuXHRcdCAqIHZhciBwaWFub1NhbXBsZXMgPSBuZXcgVG9uZS5CdWZmZXJzKHtcblx0XHQgKiBcdFwiQzRcIiA6IFwicGF0aC90by9DNC5tcDNcIlxuXHRcdCAqIFx0XCJDIzRcIiA6IFwicGF0aC90by9DIzQubXAzXCJcblx0XHQgKiBcdFwiRDRcIiA6IFwicGF0aC90by9ENC5tcDNcIlxuXHRcdCAqIFx0XCJEIzRcIiA6IFwicGF0aC90by9EIzQubXAzXCJcblx0XHQgKiBcdC4uLlxuXHRcdCAqIH0sIGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3BsYXkgb25lIG9mIHRoZSBzYW1wbGVzIHdoZW4gdGhleSBhbGwgbG9hZFxuXHRcdCAqIFx0cGxheWVyLmJ1ZmZlciA9IHBpYW5vU2FtcGxlcy5nZXQoXCJDNFwiKTtcblx0XHQgKiBcdHBsYXllci5zdGFydCgpO1xuXHRcdCAqIH0pO1xuXHRcdCAqIFx0QGV4YW1wbGVcblx0XHQgKiAvL1RvIHBhc3MgaW4gYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGluIHRoZSBzZWNvbmQgcGFyYW1ldGVyXG5cdFx0ICogdmFyIGJ1ZmZlcnMgPSBuZXcgVG9uZS5CdWZmZXJzKHVybHMsIHtcblx0XHQgKiBcdFwib25sb2FkXCIgOiBjYWxsYmFjayxcblx0XHQgKiBcdFwiYmFzZVVybFwiIDogXCIuLi9wYXRoL3RvL2F1ZGlvL1wiXG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycyA9IGZ1bmN0aW9uICh1cmxzKSB7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIHVybHMgZnJvbSB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3MsIFtcblx0ICAgICAgICAgICAgJ29ubG9hZCcsXG5cdCAgICAgICAgICAgICdiYXNlVXJsJ1xuXHQgICAgICAgIF0sIFRvbmUuQnVmZmVycyk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgYnVmZmVyc1xuXHRcdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0ge307XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBwYXRoIHdoaWNoIGlzIHByZWZpeGVkIGJlZm9yZSBldmVyeSB1cmwuXG5cdFx0XHQgKiAgQHR5cGUgIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50ID0gMDtcblx0ICAgICAgICAvL2FkZCBlYWNoIG9uZVxuXHQgICAgICAgIGZvciAodmFyIGtleSBpbiB1cmxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCsrO1xuXHQgICAgICAgICAgICB0aGlzLmFkZChrZXksIHVybHNba2V5XSwgdGhpcy5fYnVmZmVyTG9hZGVkLmJpbmQodGhpcywgb3B0aW9ucy5vbmxvYWQpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CdWZmZXJzKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdiYXNlVXJsJzogJydcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJ1ZSBpZiB0aGUgYnVmZmVycyBvYmplY3QgaGFzIGEgYnVmZmVyIGJ5IHRoYXQgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIG5hbWUgIFRoZSBrZXkgb3IgaW5kZXggb2YgdGhlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLlxuXHRcdCAqICBAcmV0dXJuICB7Qm9vbGVhbn1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVycy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IGEgYnVmZmVyIGJ5IG5hbWUuIElmIGFuIGFycmF5IHdhcyBsb2FkZWQsIFxuXHRcdCAqICB0aGVuIHVzZSB0aGUgYXJyYXkgaW5kZXguXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICBuYW1lICBUaGUga2V5IG9yIGluZGV4IG9mIHRoZSBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIGlmICh0aGlzLmhhcyhuYW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyc1tuYW1lXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyczogbm8gYnVmZmVyIG5hbWVkICcgKyBuYW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEEgYnVmZmVyIHdhcyBsb2FkZWQuIGRlY3JlbWVudCB0aGUgY291bnRlci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuX2J1ZmZlckxvYWRlZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudC0tO1xuXHQgICAgICAgIGlmICh0aGlzLl9sb2FkaW5nQ291bnQgPT09IDAgJiYgY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVycyNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlcnMucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaXNMb2FkZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBidWZmTmFtZSBpbiB0aGlzLl9idWZmZXJzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnVmZiA9IHRoaXMuZ2V0KGJ1ZmZOYW1lKTtcblx0ICAgICAgICAgICAgICAgIGlzTG9hZGVkID0gaXNMb2FkZWQgJiYgYnVmZi5sb2FkZWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIGJ1ZmZlciBieSBuYW1lIGFuZCB1cmwgdG8gdGhlIEJ1ZmZlcnNcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBuYW1lICAgICAgQSB1bmlxdWUgbmFtZSB0byBnaXZlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWZmZXJcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfFRvbmUuQnVmZmVyfEF1ZGlvYnVmZmVyfSAgdXJsICBFaXRoZXIgdGhlIHVybCBvZiB0aGUgYnVmZXIsIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYWRkZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChuYW1lLCB1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgY2FsbGJhY2sgPSBUb25lLmRlZmF1bHRBcmcoY2FsbGJhY2ssIFRvbmUubm9PcCk7XG5cdCAgICAgICAgaWYgKHVybCBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0gPSB1cmw7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodXJsIGluc3RhbmNlb2YgQXVkaW9CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXSA9IG5ldyBUb25lLkJ1ZmZlcih1cmwpO1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcodXJsKSkge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzW25hbWVdID0gbmV3IFRvbmUuQnVmZmVyKHRoaXMuYmFzZVVybCArIHVybCwgY2FsbGJhY2spO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlcnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl9idWZmZXJzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0uZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CdWZmZXJzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBidXNlcyBhcmUgYW5vdGhlciB3YXkgb2Ygcm91dGluZyBhdWRpb1xuXHRcdCAqXG5cdFx0ICogIGF1Z21lbnRzIFRvbmUucHJvdG90eXBlIHRvIGluY2x1ZGUgc2VuZCBhbmQgcmVjaWV2ZVxuXHRcdCAqL1xuXHQgICAgLyoqXG5cdFx0ICogIEFsbCBvZiB0aGUgcm91dGVzXG5cdFx0ICpcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIEJ1c2VzID0ge307XG5cdCAgICAvKipcblx0XHQgKiAgU2VuZCB0aGlzIHNpZ25hbCB0byB0aGUgY2hhbm5lbCBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9IGNoYW5uZWxOYW1lIEEgbmFtZWQgY2hhbm5lbCB0byBzZW5kIHRoZSBzaWduYWwgdG8uXG5cdFx0ICogIEBwYXJhbSAge0RlY2liZWxzfSBhbW91bnQgVGhlIGFtb3VudCBvZiB0aGUgc291cmNlIHRvIHNlbmQgdG8gdGhlIGJ1cy5cblx0XHQgKiAgQHJldHVybiB7R2Fpbk5vZGV9IFRoZSBnYWluIG5vZGUgd2hpY2ggY29ubmVjdHMgdGhpcyBub2RlIHRvIHRoZSBkZXNpcmVkIGNoYW5uZWwuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICBDYW4gYmUgdXNlZCB0byBhZGp1c3QgdGhlIGxldmVscyBvZiB0aGUgc2VuZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc2VuZChcInJldmVyYlwiLCAtMTIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIChjaGFubmVsTmFtZSwgYW1vdW50KSB7XG5cdCAgICAgICAgaWYgKCFCdXNlcy5oYXNPd25Qcm9wZXJ0eShjaGFubmVsTmFtZSkpIHtcblx0ICAgICAgICAgICAgQnVzZXNbY2hhbm5lbE5hbWVdID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgYW1vdW50ID0gVG9uZS5kZWZhdWx0QXJnKGFtb3VudCwgMCk7XG5cdCAgICAgICAgdmFyIHNlbmRLbm9iID0gbmV3IFRvbmUuR2FpbihhbW91bnQsIFRvbmUuVHlwZS5EZWNpYmVscyk7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0KHNlbmRLbm9iKTtcblx0ICAgICAgICBzZW5kS25vYi5jb25uZWN0KEJ1c2VzW2NoYW5uZWxOYW1lXSk7XG5cdCAgICAgICAgcmV0dXJuIHNlbmRLbm9iO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZWNpZXZlIHRoZSBpbnB1dCBmcm9tIHRoZSBkZXNpcmVkIGNoYW5uZWxOYW1lIHRvIHRoZSBpbnB1dFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gY2hhbm5lbE5hbWUgQSBuYW1lZCBjaGFubmVsIHRvIHNlbmQgdGhlIHNpZ25hbCB0by5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gY2hhbm5lbE51bWJlciBUaGUgY2hhbm5lbCB0byBjb25uZWN0IHRvXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcmV2ZXJiRWZmZWN0LnJlY2VpdmUoXCJyZXZlcmJcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5yZWNlaXZlID0gZnVuY3Rpb24gKGNoYW5uZWxOYW1lLCBpbnB1dE51bSkge1xuXHQgICAgICAgIGlmICghQnVzZXMuaGFzT3duUHJvcGVydHkoY2hhbm5lbE5hbWUpKSB7XG5cdCAgICAgICAgICAgIEJ1c2VzW2NoYW5uZWxOYW1lXSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIEJ1c2VzW2NoYW5uZWxOYW1lXS5jb25uZWN0KHRoaXMsIDAsIGlucHV0TnVtKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvL3JlbW92ZSBhbGwgdGhlIHNlbmQvcmVjZWl2ZXMgd2hlbiBhIG5ldyBhdWRpbyBjb250ZXh0IGlzIHBhc3NlZCBpblxuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5CdXNlcykge1xuXHQgICAgICAgICAgICBCdXNlcyA9IGNvbnRleHQuQnVzZXM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgQnVzZXMgPSB7fTtcblx0ICAgICAgICAgICAgY29udGV4dC5CdXNlcyA9IEJ1c2VzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkRyYXcgaXMgdXNlZnVsIGZvciBzeW5jaHJvbml6aW5nIHZpc3VhbHMgYW5kIGF1ZGlvIGV2ZW50cy5cblx0XHQgKiAgICAgICAgIENhbGxiYWNrcyBmcm9tIFRvbmUuVHJhbnNwb3J0IG9yIGFueSBvZiB0aGUgVG9uZS5FdmVudCBjbGFzc2VzXG5cdFx0ICogICAgICAgICBhbHdheXMgaGFwcGVuIF9iZWZvcmVfIHRoZSBzY2hlZHVsZWQgdGltZSBhbmQgYXJlIG5vdCBzeW5jaHJvbml6ZWRcblx0XHQgKiAgICAgICAgIHRvIHRoZSBhbmltYXRpb24gZnJhbWUgc28gdGhleSBhcmUgbm90IGdvb2QgZm9yIHRyaWdnZXJpbmcgdGlnaHRseVxuXHRcdCAqICAgICAgICAgc3luY2hyb25pemVkIHZpc3VhbHMgYW5kIHNvdW5kLiBUb25lLkRyYXcgbWFrZXMgaXQgZWFzeSB0byBzY2hlZHVsZVxuXHRcdCAqICAgICAgICAgY2FsbGJhY2tzIHVzaW5nIHRoZSBBdWRpb0NvbnRleHQgdGltZSBhbmQgdXNlcyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuXG5cdFx0ICogICAgICAgICBcblx0XHQgKiAgQHNpbmdsZXRvblxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdC8vdXNlIHRoZSB0aW1lIGFyZ3VtZW50IHRvIHNjaGVkdWxlIGEgY2FsbGJhY2sgd2l0aCBUb25lLkRyYXdcblx0XHQgKiBcdFRvbmUuRHJhdy5zY2hlZHVsZShmdW5jdGlvbigpe1xuXHRcdCAqIFx0XHQvL2RvIGRyYXdpbmcgb3IgRE9NIG1hbmlwdWxhdGlvbiBoZXJlXG5cdFx0ICogXHR9LCB0aW1lKVxuXHRcdCAqIH0sIFwiKzAuNVwiKVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EcmF3ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIGV2ZW50cy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGR1cmF0aW9uIGFmdGVyIHdoaWNoIGV2ZW50cyBhcmUgbm90IGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQGRlZmF1bHQgMC4yNVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5leHBpcmF0aW9uID0gMC4yNTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgYmVmb3JlIHRoZSBzY2hlZHVsZWQgdGltZSBcblx0XHRcdCAqICB0aGF0IHRoZSBjYWxsYmFjayBjYW4gYmUgaW52b2tlZC4gRGVmYXVsdCBpc1xuXHRcdFx0ICogIGhhbGYgdGhlIHRpbWUgb2YgYW4gYW5pbWF0aW9uIGZyYW1lICgwLjAwOCBzZWNvbmRzKS5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAZGVmYXVsdCAwLjAwOFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hbnRpY2lwYXRpb24gPSAwLjAwODtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZHJhdyBsb29wXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYm91bmREcmF3TG9vcCA9IHRoaXMuX2RyYXdMb29wLmJpbmQodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5EcmF3KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZSBhIGZ1bmN0aW9uIGF0IHRoZSBnaXZlbiB0aW1lIHRvIGJlIGludm9rZWRcblx0XHQgKiAgb24gdGhlIG5lYXJlc3QgYW5pbWF0aW9uIGZyYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBDYWxsYmFjayBpcyBpbnZva2VkIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICB0aW1lICAgICAgVGhlIHRpbWUgcmVsYXRpdmUgdG8gdGhlIEF1ZGlvQ29udGV4dCB0aW1lXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBpbnZva2UgdGhlIGNhbGxiYWNrLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5EcmF3fSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmFkZCh7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcblx0ICAgICAgICAgICAgdGltZTogdGhpcy50b1NlY29uZHModGltZSlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBkcmF3IGxvb3Agb24gdGhlIGZpcnN0IGV2ZW50XG5cdCAgICAgICAgaWYgKHRoaXMuX2V2ZW50cy5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kRHJhd0xvb3ApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGV2ZW50cyBzY2hlZHVsZWQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBhZnRlciAgVGltZSBhZnRlciB3aGljaCBzY2hlZHVsZWQgZXZlbnRzIHdpbGwgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2NoZWR1bGluZyB0aW1lbGluZS5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRHJhd30gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdy5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCh0aGlzLnRvU2Vjb25kcyhhZnRlcikpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZHJhdyBsb29wXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcucHJvdG90eXBlLl9kcmF3TG9vcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgbm93ID0gVG9uZS5ub3coKTtcblx0ICAgICAgICB3aGlsZSAodGhpcy5fZXZlbnRzLmxlbmd0aCAmJiB0aGlzLl9ldmVudHMucGVlaygpLnRpbWUgLSB0aGlzLmFudGljaXBhdGlvbiA8PSBub3cpIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzLnNoaWZ0KCk7XG5cdCAgICAgICAgICAgIGlmIChub3cgLSBldmVudC50aW1lIDw9IHRoaXMuZXhwaXJhdGlvbikge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuY2FsbGJhY2soKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kRHJhd0xvb3ApO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvL21ha2UgYSBzaW5nbGV0b25cblx0ICAgIFRvbmUuRHJhdyA9IG5ldyBUb25lLkRyYXcoKTtcblx0ICAgIHJldHVybiBUb25lLkRyYXc7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQm90aCBUb25lLlBhbm5lcjNEIGFuZCBUb25lLkxpc3RlbmVyIGhhdmUgYSBwb3NpdGlvbiBpbiAzRCBzcGFjZVxuXHRcdCAqICAgICAgICAgIHVzaW5nIGEgcmlnaHQtaGFuZGVkIGNhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbS5cblx0XHQgKiAgICAgICAgICBUaGUgdW5pdHMgdXNlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gYXJlIG5vdCBkZWZpbmVkO1xuXHRcdCAqICAgICAgICAgIHRoZXNlIGNvb3JkaW5hdGVzIGFyZSBpbmRlcGVuZGVudC9pbnZhcmlhbnQgb2YgYW55IHBhcnRpY3VsYXJcblx0XHQgKiAgICAgICAgICB1bml0cyBzdWNoIGFzIG1ldGVycyBvciBmZWV0LiBUb25lLlBhbm5lcjNEIG9iamVjdHMgaGF2ZSBhbiBmb3J3YXJkXG5cdFx0ICogICAgICAgICAgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgZGlyZWN0aW9uIHRoZSBzb3VuZCBpcyBwcm9qZWN0aW5nLiBBZGRpdGlvbmFsbHksXG5cdFx0ICogICAgICAgICAgdGhleSBoYXZlIGEgc291bmQgY29uZSByZXByZXNlbnRpbmcgaG93IGRpcmVjdGlvbmFsIHRoZSBzb3VuZCBpcy5cblx0XHQgKiAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHNvdW5kIGNvdWxkIGJlIG9tbmlkaXJlY3Rpb25hbCwgaW4gd2hpY2ggY2FzZSBpdCB3b3VsZFxuXHRcdCAqICAgICAgICAgIGJlIGhlYXJkIGFueXdoZXJlIHJlZ2FyZGxlc3Mgb2YgaXRzIGZvcndhcmQsIG9yIGl0IGNhbiBiZSBtb3JlIGRpcmVjdGlvbmFsXG5cdFx0ICogICAgICAgICAgYW5kIGhlYXJkIG9ubHkgaWYgaXQgaXMgZmFjaW5nIHRoZSBsaXN0ZW5lci4gVG9uZS5MaXN0ZW5lciBvYmplY3RzXG5cdFx0ICogICAgICAgICAgKHJlcHJlc2VudGluZyBhIHBlcnNvbidzIGVhcnMpIGhhdmUgYW4gZm9yd2FyZCBhbmQgdXAgdmVjdG9yXG5cdFx0ICogICAgICAgICAgcmVwcmVzZW50aW5nIGluIHdoaWNoIGRpcmVjdGlvbiB0aGUgcGVyc29uIGlzIGZhY2luZy4gQmVjYXVzZSBib3RoIHRoZVxuXHRcdCAqICAgICAgICAgIHNvdXJjZSBzdHJlYW0gYW5kIHRoZSBsaXN0ZW5lciBjYW4gYmUgbW92aW5nLCB0aGV5IGJvdGggaGF2ZSBhIHZlbG9jaXR5XG5cdFx0ICogICAgICAgICAgdmVjdG9yIHJlcHJlc2VudGluZyBib3RoIHRoZSBzcGVlZCBhbmQgZGlyZWN0aW9uIG9mIG1vdmVtZW50LiBUYWtlbiB0b2dldGhlcixcblx0XHQgKiAgICAgICAgICB0aGVzZSB0d28gdmVsb2NpdGllcyBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBhIGRvcHBsZXIgc2hpZnQgZWZmZWN0IHdoaWNoIGNoYW5nZXMgdGhlIHBpdGNoLlxuXHRcdCAqICAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgTm90ZTogdGhlIHBvc2l0aW9uIG9mIHRoZSBMaXN0ZW5lciB3aWxsIGhhdmUgbm8gZWZmZWN0IG9uIG5vZGVzIG5vdCBjb25uZWN0ZWQgdG8gYSBUb25lLlBhbm5lcjNEXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkcyB0aGUgY3VycmVudCBmb3J3YXJkIG9yaWVudGF0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBbXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDBcblx0ICAgICAgICBdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBbXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDAsXG5cdCAgICAgICAgICAgIDBcblx0ICAgICAgICBdO1xuXHQgICAgICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIHNldCB0aGUgZGVmYXVsdCBwb3NpdGlvbi9mb3J3YXJkXG5cdCAgICAgICAgICAgIHRoaXMuc2V0KExpc3RlbmVyQ29uc3RydWN0b3IuZGVmYXVsdHMpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5MaXN0ZW5lcik7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHMgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwb3NpdGlvblgnOiAwLFxuXHQgICAgICAgICdwb3NpdGlvblknOiAwLFxuXHQgICAgICAgICdwb3NpdGlvblonOiAwLFxuXHQgICAgICAgICdmb3J3YXJkWCc6IDAsXG5cdCAgICAgICAgJ2ZvcndhcmRZJzogMCxcblx0ICAgICAgICAnZm9yd2FyZFonOiAxLFxuXHQgICAgICAgICd1cFgnOiAwLFxuXHQgICAgICAgICd1cFknOiAxLFxuXHQgICAgICAgICd1cFonOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJhbXAgdGltZSB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBzZXRUYXJnZXRBdFRpbWVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5fcmFtcFRpbWVDb25zdGFudCA9IDAuMDE7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGxpc3RlbmVyIGluIDNkIHNwYWNlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkxpc3RlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5wb3NpdGlvblouc2V0VGFyZ2V0QXRUaW1lKHosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnNldFBvc2l0aW9uKHgsIHksIHopO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldHMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBsaXN0ZW5lciB1c2luZyB0d28gdmVjdG9ycywgdGhlIGZvcndhcmRcblx0XHQgKiAgdmVjdG9yICh3aGljaCBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIGZhY2luZykgYW5kIHRoZSB1cCB2ZWN0b3Jcblx0XHQgKiAgKHdoaWNoIHRoZSB1cCBkaXJlY3Rpb24gb2YgdGhlIGxpc3RlbmVyKS4gQW4gdXAgdmVjdG9yXG5cdFx0ICogIG9mIDAsIDAsIDEgaXMgZXF1aXZhbGVudCB0byB0aGUgbGlzdGVuZXIgc3RhbmRpbmcgdXAgaW4gdGhlIFogZGlyZWN0aW9uLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB1cFhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdXBZXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHVwWlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkxpc3RlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5zZXRPcmllbnRhdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6LCB1cFgsIHVwWSwgdXBaKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRYLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuZm9yd2FyZFkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnVwWC5zZXRUYXJnZXRBdFRpbWUodXBYLCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIudXBZLnNldFRhcmdldEF0VGltZSh1cFksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci51cFouc2V0VGFyZ2V0QXRUaW1lKHVwWiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuc2V0T3JpZW50YXRpb24oeCwgeSwgeiwgdXBYLCB1cFksIHVwWik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3Bvc2l0aW9uWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMF0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblswXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAncG9zaXRpb25ZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblsxXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzFdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25aXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdwb3NpdGlvblonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzJdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMl07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXJzIGZyb250IGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB3aGljaCB3YXkgdGhleSBhcmUgZmFjaW5nLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgZm9yd2FyZFhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ2ZvcndhcmRYJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVycyBmcm9udCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgd2hpY2ggd2F5IHRoZXkgYXJlIGZhY2luZy5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIGZvcndhcmRZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdmb3J3YXJkWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcnMgZnJvbnQgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHdoaWNoIHdheSB0aGV5IGFyZSBmYWNpbmcuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBmb3J3YXJkWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAnZm9yd2FyZFonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzJdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMl07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXIncyB1cCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgdGhlIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgc3RhbmRpbmcgaW4uXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSB1cFhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3VwWCcsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bM10gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblszXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcidzIHVwIGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB0aGUgZGlyZWN0aW9uIHRoZSBsaXN0ZW5lciBpcyBzdGFuZGluZyBpbi5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHVwWVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAndXBZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvbls0XSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzRdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVyJ3MgdXAgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHRoZSBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIHN0YW5kaW5nIGluLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgdXBaXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICd1cFonLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzVdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bNV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxpc3RlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxpc3RlbmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy9TSU5HTEVUT04gU0VUVVBcblx0ICAgIHZhciBMaXN0ZW5lckNvbnN0cnVjdG9yID0gVG9uZS5MaXN0ZW5lcjtcblx0ICAgIFRvbmUuTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5MaXN0ZW5lciBpbnN0YW5jZW9mIExpc3RlbmVyQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgLy9hIHNpbmdsZSBsaXN0ZW5lciBvYmplY3Rcblx0ICAgICAgICAgICAgVG9uZS5MaXN0ZW5lciA9IGNvbnRleHQuTGlzdGVuZXI7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9tYWtlIG5ldyBMaXN0ZW5lciBpbnNpZGVzXG5cdCAgICAgICAgICAgIFRvbmUuTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb250ZXh0Lkxpc3RlbmVyID0gVG9uZS5MaXN0ZW5lcjtcblx0ICAgIH0pO1xuXHQgICAgLy9FTkQgU0lOR0xFVE9OIFNFVFVQXG5cdCAgICByZXR1cm4gVG9uZS5MaXN0ZW5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQmVjYXVzZSBvZiBhIGJ1ZyBpbiBpT1MgY2F1c2luZyB0aGUgY3VycmVudFRpbWUgdG8gaW5jcmVtZW50XG5cdFx0ICogYmVmb3JlIHRoZSByZW5kZXJpbmcgaXMgc3RhcnRlZCwgc29tZXRpbWVzIGl0IHRha2VzIG11bHRpcGxlXG5cdFx0ICogYXR0ZW1wdHMgdG8gcmVuZGVyIHRoZSBhdWRpbyBjb3JyZWN0bHkuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIGZ1bmN0aW9uIGF0dGVtcHRSZW5kZXIoY2FsbGJhY2ssIGR1cmF0aW9uLCBzYW1wbGVSYXRlLCB0cmllcykge1xuXHQgICAgICAgIHRyaWVzID0gVG9uZS5kZWZhdWx0QXJnKHRyaWVzLCAwKTtcblx0ICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBUb25lLk9mZmxpbmVDb250ZXh0KDIsIGR1cmF0aW9uLCBzYW1wbGVSYXRlKTtcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgIC8vaW52b2tlIHRoZSBjYWxsYmFjay9zY2hlZHVsaW5nXG5cdCAgICAgICAgdmFyIHJlc3BvbnNlID0gY2FsbGJhY2soVG9uZS5UcmFuc3BvcnQpO1xuXHQgICAgICAgIGlmIChjb250ZXh0LmN1cnJlbnRUaW1lID4gMCAmJiB0cmllcyA8IDEwMDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRSZW5kZXIoY2FsbGJhY2ssIGR1cmF0aW9uLCBzYW1wbGVSYXRlLCArK3RyaWVzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAgICAgJ3Jlc3BvbnNlJzogcmVzcG9uc2UsXG5cdCAgICAgICAgICAgICAgICAnY29udGV4dCc6IGNvbnRleHRcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdCAgICAvKipcblx0XHQgKiAgR2VuZXJhdGUgYSBidWZmZXIgYnkgcmVuZGVyaW5nIGFsbCBvZiB0aGUgVG9uZS5qcyBjb2RlIHdpdGhpbiB0aGUgY2FsbGJhY2sgdXNpbmcgdGhlIE9mZmxpbmVBdWRpb0NvbnRleHQuXG5cdFx0ICogIFRoZSBPZmZsaW5lQXVkaW9Db250ZXh0IGlzIGNhcGFibGUgb2YgcmVuZGVyaW5nIG11Y2ggZmFzdGVyIHRoYW4gcmVhbCB0aW1lIGluIG1hbnkgY2FzZXMuXG5cdFx0ICogIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBhbHNvIHBhc3NlcyBpbiBhbiBvZmZsaW5lIGluc3RhbmNlIG9mIFRvbmUuVHJhbnNwb3J0IHdoaWNoIGNhbiBiZSB1c2VkXG5cdFx0ICogIHRvIHNjaGVkdWxlIGV2ZW50cyBhbG9uZyB0aGUgVHJhbnNwb3J0LiAqKk5PVEUqKiBPZmZsaW5lQXVkaW9Db250ZXh0IGhhcyB0aGUgc2FtZSByZXN0cmljdGlvbnNcblx0XHQgKiAgYXMgdGhlIEF1ZGlvQ29udGV4dCBpbiB0aGF0IG9uIGNlcnRhaW4gcGxhdGZvcm1zIChsaWtlIGlPUykgaXQgbXVzdCBiZSBpbnZva2VkIGJ5IGFuIGV4cGxpY2l0XG5cdFx0ICogIHVzZXIgYWN0aW9uIGxpa2UgYSBjbGljayBvciB0YXAuIFxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBBbGwgVG9uZS5qcyBub2RlcyB3aGljaCBhcmUgY3JlYXRlZCBhbmQgc2NoZWR1bGVkIHdpdGhpbiB0aGlzIGNhbGxiYWNrIGFyZSByZWNvcmRlZCBpbnRvIHRoZSBvdXRwdXQgQnVmZmVyLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgZHVyYXRpb24gICAgIHRoZSBhbW91bnQgb2YgdGltZSB0byByZWNvcmQgZm9yLlxuXHRcdCAqICBAcmV0dXJuICB7UHJvbWlzZX0gIFRoZSBwcm9taXNlIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgVG9uZS5CdWZmZXIgb2YgdGhlIHJlY29yZGVkIG91dHB1dC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JlbmRlciAyIHNlY29uZHMgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiBUb25lLk9mZmxpbmUoZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vb25seSBub2RlcyBjcmVhdGVkIGluIHRoaXMgY2FsbGJhY2sgd2lsbCBiZSByZWNvcmRlZFxuXHRcdCAqIFx0dmFyIG9zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkudG9NYXN0ZXIoKS5zdGFydCgwKVxuXHRcdCAqIFx0Ly9zY2hlZHVsZSB0aGVpciBldmVudHNcblx0XHQgKiB9LCAyKS50aGVuKGZ1bmN0aW9uKGJ1ZmZlcil7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSBvdXRwdXQgYnVmZmVyXG5cdFx0ICogfSlcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIGFsc28gc2NoZWR1bGUgZXZlbnRzIGFsb25nIHRoZSBUcmFuc3BvcnRcblx0XHQgKiAvL3VzaW5nIHRoZSBwYXNzZWQgaW4gT2ZmbGluZSBUcmFuc3BvcnRcblx0XHQgKiBUb25lLk9mZmxpbmUoZnVuY3Rpb24oVHJhbnNwb3J0KXtcblx0XHQgKiBcdHZhciBvc2MgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkudG9NYXN0ZXIoKVxuXHRcdCAqIFx0VHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0XHRvc2Muc3RhcnQodGltZSkuc3RvcCh0aW1lICsgMC4xKVxuXHRcdCAqIFx0fSwgMSlcblx0XHQgKiBcdFRyYW5zcG9ydC5zdGFydCgwLjIpXG5cdFx0ICogfSwgNCkudGhlbihmdW5jdGlvbihidWZmZXIpe1xuXHRcdCAqIFx0Ly9kbyBzb21ldGhpbmcgd2l0aCB0aGUgb3V0cHV0IGJ1ZmZlclxuXHRcdCAqIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgLy9zZXQgdGhlIE9mZmxpbmVBdWRpb0NvbnRleHRcblx0ICAgICAgICB2YXIgc2FtcGxlUmF0ZSA9IFRvbmUuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgIHZhciBvcmlnaW5hbENvbnRleHQgPSBUb25lLmNvbnRleHQ7XG5cdCAgICAgICAgdmFyIHJlbmRlclJldCA9IGF0dGVtcHRSZW5kZXIoY2FsbGJhY2ssIGR1cmF0aW9uLCBzYW1wbGVSYXRlKTtcblx0ICAgICAgICB2YXIgcmVzcG9uc2UgPSByZW5kZXJSZXQucmVzcG9uc2U7XG5cdCAgICAgICAgdmFyIGNvbnRleHQgPSByZW5kZXJSZXQuY29udGV4dDtcblx0ICAgICAgICB2YXIgcmV0O1xuXHQgICAgICAgIGlmIChyZXNwb25zZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0ICAgICAgICAgICAgLy93YWl0IGZvciB0aGUgcHJvbWlzZSB0byByZXNvbHZlXG5cdCAgICAgICAgICAgIHJldCA9IHJlc3BvbnNlLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgLy90aGVuIHJlbmRlciB0aGUgYXVkaW9cblx0ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnJlbmRlcigpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL3Byb2Nlc3MgdGhlIGF1ZGlvXG5cdCAgICAgICAgICAgIHJldCA9IGNvbnRleHQucmVuZGVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vcmV0dXJuIHRoZSBvcmlnaW5hbCBBdWRpb0NvbnRleHRcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBvcmlnaW5hbENvbnRleHQ7XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIGF1ZGlvXG5cdCAgICAgICAgcmV0dXJuIHJldC50aGVuKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgLy93cmFwIGl0IGluIGEgVG9uZS5CdWZmZXJcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLkJ1ZmZlcihidWZmZXIpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9mZmxpbmU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogXHRAY2xhc3MgIFRvbmUuRWZmZWN0IGlzIHRoZSBiYXNlIGNsYXNzIGZvciBlZmZlY3RzLiBDb25uZWN0IHRoZSBlZmZlY3QgYmV0d2VlblxuXHRcdCAqIFx0ICAgICAgICB0aGUgZWZmZWN0U2VuZCBhbmQgZWZmZWN0UmV0dXJuIEdhaW5Ob2RlcywgdGhlbiBjb250cm9sIHRoZSBhbW91bnQgb2Zcblx0XHQgKiBcdCAgICAgICAgZWZmZWN0IHdoaWNoIGdvZXMgdG8gdGhlIG91dHB1dCB1c2luZyB0aGUgd2V0IGNvbnRyb2wuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFt3ZXRdIFRoZSBzdGFydGluZyB3ZXQgdmFsdWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkVmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3dldCddLCBUb25lLkVmZmVjdCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRyeXdldCBrbm9iIHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Dcm9zc0ZhZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG5ldyBUb25lLkNyb3NzRmFkZShvcHRpb25zLndldCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdldCBjb250cm9sIGlzIGhvdyBtdWNoIG9mIHRoZSBlZmZlY3RlZFxuXHRcdFx0ICogIHdpbGwgcGFzcyB0aHJvdWdoIHRvIHRoZSBvdXRwdXQuIDEgPSAxMDAlIGVmZmVjdGVkXG5cdFx0XHQgKiAgc2lnbmFsLCAwID0gMTAwJSBkcnkgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndldCA9IHRoaXMuX2RyeVdldC5mYWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbm5lY3QgdGhlIGVmZmVjdFNlbmQgdG8gdGhlIGlucHV0IG9mIGh0ZSBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29ubmVjdCB0aGUgb3V0cHV0IG9mIHRoZSBlZmZlY3QgdG8gdGhlIGVmZmVjdFJldHVyblxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fZHJ5V2V0LmEpO1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLmVmZmVjdFNlbmQpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuLmNvbm5lY3QodGhpcy5fZHJ5V2V0LmIpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3dldCddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVmZmVjdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0LmRlZmF1bHRzID0geyAnd2V0JzogMSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYWlucyB0aGUgZWZmZWN0IGluIGJldHdlZW4gdGhlIGVmZmVjdFNlbmQgYW5kIGVmZmVjdFJldHVyblxuXHRcdCAqICBAcGFyYW0gIHtUb25lfSBlZmZlY3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuY29ubmVjdEVmZmVjdCA9IGZ1bmN0aW9uIChlZmZlY3QpIHtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4oZWZmZWN0LCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnd2V0J10pO1xuXHQgICAgICAgIHRoaXMud2V0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkF1dG9GaWx0ZXIgaXMgYSBUb25lLkZpbHRlciB3aXRoIGEgVG9uZS5MRk8gY29ubmVjdGVkIHRvIHRoZSBmaWx0ZXIgY3V0b2ZmIGZyZXF1ZW5jeS5cblx0XHQgKiAgICAgICAgIFNldHRpbmcgdGhlIExGTyByYXRlIGFuZCBkZXB0aCBhbGxvd3MgZm9yIGNvbnRyb2wgb3ZlciB0aGUgZmlsdGVyIG1vZHVsYXRpb24gcmF0ZSBcblx0XHQgKiAgICAgICAgIGFuZCBkZXB0aC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgcmF0ZSBvZiB0aGUgTEZPLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeT19IGJhc2VGcmVxdWVuY3kgVGhlIGxvd2VyIHZhbHVlIG9mIHRoZSBMRk9zIG9zY2lsbGF0aW9uXG5cdCBcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeT19IG9jdGF2ZXMgVGhlIG51bWJlciBvZiBvY3RhdmVzIGFib3ZlIHRoZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jcmVhdGUgYW4gYXV0b2ZpbHRlciBhbmQgc3RhcnQgaXQncyBMRk9cblx0XHQgKiB2YXIgYXV0b0ZpbHRlciA9IG5ldyBUb25lLkF1dG9GaWx0ZXIoXCI0blwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICogLy9yb3V0ZSBhbiBvc2NpbGxhdG9yIHRocm91Z2ggdGhlIGZpbHRlciBhbmQgc3RhcnQgaXRcblx0XHQgKiB2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KGF1dG9GaWx0ZXIpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnb2N0YXZlcydcblx0ICAgICAgICBdLCBUb25lLkF1dG9GaWx0ZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBkcml2ZXMgdGhlIGZpbHRlciBjdXRvZmZcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZSc6IG9wdGlvbnMuZGVwdGhcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSByYW5nZSBvZiB0aGUgZmlsdGVyIG1vZHVsYXRpbmcgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggZnJlcXVlbmN5LiBcblx0XHRcdCAqIDAgPSBubyBtb2R1bGF0aW9uLiAxID0gZnVsbCBtb2R1bGF0aW9uLlxuXHRcdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2xmby5hbXBsaXR1ZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBIb3cgZmFzdCB0aGUgZmlsdGVyIG1vZHVsYXRlcyBiZXR3ZWVuIG1pbiBhbmQgbWF4LiBcblx0XHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmby5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpbHRlciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIob3B0aW9ucy5maWx0ZXIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvY3RhdmVzIHBsYWNlaG9sZGVyXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gMDtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuZmlsdGVyKTtcblx0ICAgICAgICB0aGlzLl9sZm8uY29ubmVjdCh0aGlzLmZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIHRoaXMuYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgIH07XG5cdCAgICAvL2V4dGVuZCBFZmZlY3Rcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXV0b0ZpbHRlciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHRzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMSxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZGVwdGgnOiAxLFxuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogMi42LFxuXHQgICAgICAgICdmaWx0ZXInOiB7XG5cdCAgICAgICAgICAgICd0eXBlJzogJ2xvd3Bhc3MnLFxuXHQgICAgICAgICAgICAncm9sbG9mZic6IC0xMixcblx0ICAgICAgICAgICAgJ1EnOiAxXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0YXJ0IHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0YXJ0LiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCB0aGUgZWZmZWN0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBMRk8gd2lsbCBzdG9wLiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGZpbHRlciB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW2RlbGF5PTBdIERlbGF5IHRpbWUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBlZmZlY3QgYWZ0ZXIgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IGhhcyBzdGFydGVkLiBcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvRmlsdGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoZGVsYXkpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3luYyhkZWxheSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVW5zeW5jIHRoZSBmaWx0ZXIgZnJvbSB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2xmby51bnN5bmMoKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUeXBlIG9mIG9zY2lsbGF0b3IgYXR0YWNoZWQgdG8gdGhlIEF1dG9GaWx0ZXIuIFxuXHRcdCAqIFBvc3NpYmxlIHZhbHVlczogXCJzaW5lXCIsIFwic3F1YXJlXCIsIFwidHJpYW5nbGVcIiwgXCJzYXd0b290aFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9GaWx0ZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIGZpbHRlcidzIGN1dG9mZiBmcmVxdWVuY3kuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqIEBuYW1lIG1pblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLm1pbiA9IHRoaXMudG9GcmVxdWVuY3koZnJlcSk7XG5cdCAgICAgICAgICAgIC8vYW5kIHNldCB0aGUgbWF4XG5cdCAgICAgICAgICAgIHRoaXMub2N0YXZlcyA9IHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgZmlsdGVyJ3MgY3V0b2ZmIGZyZXF1ZW5jeS4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0O1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8ubWF4ID0gdGhpcy5iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgb2N0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xmby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZpbHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXV0b0ZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQXV0b1Bhbm5lciBpcyBhIFRvbmUuUGFubmVyIHdpdGggYW4gTEZPIGNvbm5lY3RlZCB0byB0aGUgcGFuIGFtb3VudC4gXG5cdFx0ICogICAgICAgICBNb3JlIG9uIHVzaW5nIGF1dG9wYW5uZXJzIFtoZXJlXShodHRwczovL3d3dy5hYmxldG9uLmNvbS9lbi9ibG9nL2F1dG9wYW4tY2hvcHBlci1lZmZlY3QtYW5kLW1vcmUtbGl2ZXNjaG9vbC8pLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gUmF0ZSBvZiBsZWZ0LXJpZ2h0IG9zY2lsbGF0aW9uLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhbiBhdXRvcGFubmVyIGFuZCBzdGFydCBpdCdzIExGT1xuXHRcdCAqIHZhciBhdXRvUGFubmVyID0gbmV3IFRvbmUuQXV0b1Bhbm5lcihcIjRuXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKiAvL3JvdXRlIGFuIG9zY2lsbGF0b3IgdGhyb3VnaCB0aGUgcGFubmVyIGFuZCBzdGFydCBpdFxuXHRcdCAqIHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QoYXV0b1Bhbm5lcikuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZyZXF1ZW5jeSddLCBUb25lLkF1dG9QYW5uZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBkcml2ZXMgdGhlIHBhbm5pbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZSc6IG9wdGlvbnMuZGVwdGgsXG5cdCAgICAgICAgICAgICdtaW4nOiAtMSxcblx0ICAgICAgICAgICAgJ21heCc6IDFcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbW91bnQgb2YgcGFubmluZyBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0LiBcblx0XHRcdCAqIDAgPSBhbHdheXMgY2VudGVyLiAxID0gZnVsbCByYW5nZSBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0LiBcblx0XHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9sZm8uYW1wbGl0dWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwYW5uZXIgbm9kZSB3aGljaCBkb2VzIHRoZSBwYW5uaW5nXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUGFubmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBuZXcgVG9uZS5QYW5uZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEhvdyBmYXN0IHRoZSBwYW5uZXIgbW9kdWxhdGVzIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQuIFxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX3Bhbm5lcik7XG5cdCAgICAgICAgdGhpcy5fbGZvLmNvbm5lY3QodGhpcy5fcGFubmVyLnBhbik7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2RlcHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICAvL2V4dGVuZCBFZmZlY3Rcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXV0b1Bhbm5lciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHRzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMSxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZGVwdGgnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RhcnQgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RhcnQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0b3AuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgcGFubmVyIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbZGVsYXk9MF0gRGVsYXkgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIGVmZmVjdCBhZnRlciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgaGFzIHN0YXJ0ZWQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uIChkZWxheSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zeW5jKGRlbGF5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIHBhbm5lciBmcm9tIHRoZSB0cmFuc3BvcnRcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9sZm8udW5zeW5jKCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVHlwZSBvZiBvc2NpbGxhdG9yIGF0dGFjaGVkIHRvIHRoZSBBdXRvRmlsdGVyLiBcblx0XHQgKiBQb3NzaWJsZSB2YWx1ZXM6IFwic2luZVwiLCBcInNxdWFyZVwiLCBcInRyaWFuZ2xlXCIsIFwic2F3dG9vdGhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdXRvUGFubmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9QYW5uZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9sZm8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2RlcHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXV0b1Bhbm5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkF1dG9XYWggY29ubmVjdHMgYSBUb25lLkZvbGxvd2VyIHRvIGEgYmFuZHBhc3MgZmlsdGVyIChUb25lLkZpbHRlcikuXG5cdFx0ICogICAgICAgICAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVyIGlzIGFkanVzdGVkIHByb3BvcnRpb25hbGx5IHRvIHRoZVxuXHRcdCAqICAgICAgICAgIGluY29taW5nIHNpZ25hbCdzIGFtcGxpdHVkZS4gSW5zcGlyYXRpb24gZnJvbSBbVHVuYS5qc10oaHR0cHM6Ly9naXRodWIuY29tL0RpbmFobW9lL3R1bmEpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2Jhc2VGcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgdGhlIGZpbHRlciBpcyBzZXRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYXQgdGhlIGxvdyBwb2ludCBvZiB0aGUgd2FoXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV9IFtvY3RhdmVzXSBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIGJhc2VGcmVxdWVuY3lcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbHRlciB3aWxsIHN3ZWVwIHRvIHdoZW4gZnVsbHkgb3BlblxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbc2Vuc2l0aXZpdHldIFRoZSBkZWNpYmVsIHRocmVzaG9sZCBzZW5zaXRpdml0eSBmb3Jcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluY29taW5nIHNpZ25hbC4gTm9ybWFsIHJhbmdlIG9mIC00MCB0byAwLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBhdXRvV2FoID0gbmV3IFRvbmUuQXV0b1dhaCg1MCwgNiwgLTMwKS50b01hc3RlcigpO1xuXHRcdCAqIC8vaW5pdGlhbGl6ZSB0aGUgc3ludGggYW5kIGNvbm5lY3QgdG8gYXV0b3dhaFxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBTeW50aC5jb25uZWN0KGF1dG9XYWgpO1xuXHRcdCAqIC8vUSB2YWx1ZSBpbmZsdWVuY2VzIHRoZSBlZmZlY3Qgb2YgdGhlIHdhaCAtIGRlZmF1bHQgaXMgMlxuXHRcdCAqIGF1dG9XYWguUS52YWx1ZSA9IDY7XG5cdFx0ICogLy9tb3JlIGF1ZGlibGUgb24gaGlnaGVyIG5vdGVzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWggPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJyxcblx0ICAgICAgICAgICAgJ3NlbnNpdGl2aXR5J1xuXHQgICAgICAgIF0sIFRvbmUuQXV0b1dhaCk7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZW52ZWxvcGUgZm9sbG93ZXIuIFNldCB0aGUgYXR0YWNrL3JlbGVhc2Vcblx0XHRcdCAqICB0aW1pbmcgdG8gYWRqdXN0IGhvdyB0aGUgZW52ZWxvcGUgaXMgZm9sbG93ZWQuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRm9sbG93ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZm9sbG93ZXIgPSBuZXcgVG9uZS5Gb2xsb3dlcihvcHRpb25zLmZvbGxvd2VyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZXMgdGhlIGZvbGxvd2VyIHZhbHVlIHRvIHRoZSBmcmVxdWVuY3kgZG9tYWluXG5cdFx0XHQgKiAgQHR5cGUge1RvbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UgPSBuZXcgVG9uZS5TY2FsZUV4cCgwLCAxLCAwLjUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXQgZ2FpbiB0byBhZGp1c3QgdGhlIHNlbnNpdGl2aXR5XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5wdXRCb29zdCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7QmlxdWFkRmlsdGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmFuZHBhc3MgPSBuZXcgVG9uZS5GaWx0ZXIoe1xuXHQgICAgICAgICAgICAncm9sbG9mZic6IC00OCxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IDAsXG5cdCAgICAgICAgICAgICdRJzogb3B0aW9ucy5RXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wZWFraW5nID0gbmV3IFRvbmUuRmlsdGVyKDAsICdwZWFraW5nJyk7XG5cdCAgICAgICAgdGhpcy5fcGVha2luZy5nYWluLnZhbHVlID0gb3B0aW9ucy5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gb2YgdGhlIGZpbHRlci5cblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmdhaW4gPSB0aGlzLl9wZWFraW5nLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcXVhbGl0eSBvZiB0aGUgZmlsdGVyLlxuXHRcdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gdGhpcy5fYmFuZHBhc3MuUTtcblx0ICAgICAgICAvL3RoZSBjb250cm9sIHNpZ25hbCBwYXRoXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNoYWluKHRoaXMuX2lucHV0Qm9vc3QsIHRoaXMuZm9sbG93ZXIsIHRoaXMuX3N3ZWVwUmFuZ2UpO1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UuY29ubmVjdCh0aGlzLl9iYW5kcGFzcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UuY29ubmVjdCh0aGlzLl9wZWFraW5nLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy90aGUgZmlsdGVyZWQgcGF0aFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbih0aGlzLl9iYW5kcGFzcywgdGhpcy5fcGVha2luZywgdGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlXG5cdCAgICAgICAgdGhpcy5fc2V0U3dlZXBSYW5nZSgpO1xuXHQgICAgICAgIHRoaXMuc2Vuc2l0aXZpdHkgPSBvcHRpb25zLnNlbnNpdGl2aXR5O1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkF1dG9XYWgsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAxMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiA2LFxuXHQgICAgICAgICdzZW5zaXRpdml0eSc6IDAsXG5cdCAgICAgICAgJ1EnOiAyLFxuXHQgICAgICAgICdnYWluJzogMixcblx0ICAgICAgICAnZm9sbG93ZXInOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjMsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyB0aGF0IHRoZSBmaWx0ZXIgd2lsbCBzd2VlcCBhYm92ZSB0aGVcblx0XHQgKiBiYXNlRnJlcXVlbmN5LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9XYWgjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvV2FoLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0YXZlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0YXZlcztcblx0ICAgICAgICAgICAgdGhpcy5fc2V0U3dlZXBSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGJhc2UgZnJlcXVlbmN5IGZyb20gd2hpY2ggdGhlIHN3ZWVwIHdpbGwgc3RhcnQgZnJvbS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvV2FoI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQG5hbWUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXV0b1dhaC5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJhc2VGcmVxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBiYXNlRnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0U3dlZXBSYW5nZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNlbnNpdGl2aXR5IHRvIGNvbnRyb2wgaG93IHJlc3BvbnNpdmUgdG8gdGhlIGlucHV0IHNpZ25hbCB0aGUgZmlsdGVyIGlzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9XYWgjXG5cdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdCAqIEBuYW1lIHNlbnNpdGl2aXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvV2FoLnByb3RvdHlwZSwgJ3NlbnNpdGl2aXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5nYWluVG9EYigxIC8gdGhpcy5faW5wdXRCb29zdC5nYWluLnZhbHVlKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNlbnNpdGl2eSkge1xuXHQgICAgICAgICAgICB0aGlzLl9pbnB1dEJvb3N0LmdhaW4udmFsdWUgPSAxIC8gVG9uZS5kYlRvR2FpbihzZW5zaXRpdnkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIHNldHMgdGhlIHN3ZWVwIHJhbmdlIG9mIHRoZSBzY2FsZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaC5wcm90b3R5cGUuX3NldFN3ZWVwUmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5taW4gPSB0aGlzLl9iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMuX3N3ZWVwUmFuZ2UubWF4ID0gTWF0aC5taW4odGhpcy5fYmFzZUZyZXF1ZW5jeSAqIE1hdGgucG93KDIsIHRoaXMuX29jdGF2ZXMpLCB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSAvIDIpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXV0b1dhaH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvV2FoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5mb2xsb3dlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mb2xsb3dlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYmFuZHBhc3MuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2JhbmRwYXNzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wZWFraW5nLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wZWFraW5nID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9pbnB1dEJvb3N0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9pbnB1dEJvb3N0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5nYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkF1dG9XYWg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTaWduYWwtcmF0ZSBtb2R1bG8gb3BlcmF0b3IuIE9ubHkgd29ya3MgaW4gQXVkaW9SYW5nZSBbLTEsIDFdIGFuZCBmb3IgbW9kdWx1c1xuXHRcdCAqICAgICAgICAgdmFsdWVzIGluIHRoZSBOb3JtYWxSYW5nZS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gbW9kdWx1cyBUaGUgbW9kdWx1cyB0byBhcHBseS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbW9kID0gbmV3IFRvbmUuTW9kdWxvKDAuMilcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDAuNSkuY29ubmVjdChtb2QpO1xuXHRcdCAqIC8vbW9kIG91dHB1dHMgMC4xXG5cdFx0ICovXG5cdCAgICBUb25lLk1vZHVsbyA9IGZ1bmN0aW9uIChtb2R1bHVzKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgd2F2ZXNoYXBlciBnZXRzIHRoZSBpbnRlZ2VyIG11bHRpcGxlIG9mXG5cdFx0XHQgKiAgdGhlIGlucHV0IHNpZ25hbCBhbmQgdGhlIG1vZHVsdXMuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihNYXRoLnBvdygyLCAxNikpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnRlZ2VyIG11bHRpcGxlIGlzIG11bHRpcGxpZWQgYnkgdGhlIG1vZHVsdXNcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhbmQgc3VidHJhY3RlZCBmcm9tIHRoZSBpbnB1dCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtb2R1bHVzIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZFNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbChtb2R1bHVzKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5mYW4odGhpcy5fc2hhcGVyLCB0aGlzLl9zdWJ0cmFjdCk7XG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsLmNvbm5lY3QodGhpcy5fbXVsdGlwbHksIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5jb25uZWN0KHRoaXMuX211bHRpcGx5LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseS5jb25uZWN0KHRoaXMuX3N1YnRyYWN0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9zZXRXYXZlU2hhcGVyKG1vZHVsdXMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9kdWxvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gIG1vZCAgdGhlIG1vZHVsdXMgdG8gYXBwbHlcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9kdWxvLnByb3RvdHlwZS5fc2V0V2F2ZVNoYXBlciA9IGZ1bmN0aW9uIChtb2QpIHtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuc2V0TWFwKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgdmFyIG11bHRpcGxlID0gTWF0aC5mbG9vcigodmFsICsgMC4wMDAxKSAvIG1vZCk7XG5cdCAgICAgICAgICAgIHJldHVybiBtdWx0aXBsZTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbW9kdWx1cyB2YWx1ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Nb2R1bG8jXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Nb2R1bG8ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2RTaWduYWwudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtb2QpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kU2lnbmFsLnZhbHVlID0gbW9kO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRXYXZlU2hhcGVyKG1vZCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb2R1bG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9kdWxvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vZHVsbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQml0Y3J1c2hlciBkb3duc2FtcGxlcyB0aGUgaW5jb21pbmcgc2lnbmFsIHRvIGEgZGlmZmVyZW50IGJpdGRlcHRoLlxuXHRcdCAqICAgICAgICAgTG93ZXJpbmcgdGhlIGJpdGRlcHRoIG9mIHRoZSBzaWduYWwgY3JlYXRlcyBkaXN0b3J0aW9uLiBSZWFkIG1vcmUgYWJvdXQgQml0Y3J1c2hpbmdcblx0XHQgKiAgICAgICAgIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpdGNydXNoZXIpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiaXRzIFRoZSBudW1iZXIgb2YgYml0cyB0byBkb3duc2FtcGxlIHRoZSBzaWduYWwuIE5vbWluYWwgcmFuZ2Vcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgb2YgMSB0byA4LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaW5pdGlhbGl6ZSBjcnVzaGVyIGFuZCByb3V0ZSBhIHN5bnRoIHRocm91Z2ggaXRcblx0XHQgKiB2YXIgY3J1c2hlciA9IG5ldyBUb25lLkJpdENydXNoZXIoNCkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5Nb25vU3ludGgoKS5jb25uZWN0KGNydXNoZXIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CaXRDcnVzaGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnYml0cyddLCBUb25lLkJpdENydXNoZXIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgdmFyIGludlN0ZXBTaXplID0gMSAvIE1hdGgucG93KDIsIG9wdGlvbnMuYml0cyAtIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFN1YnRyYWN0IHRoZSBpbnB1dCBzaWduYWwgYW5kIHRoZSBtb2R1bHVzIG9mIHRoZSBpbnB1dCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2QgZnVuY3Rpb25cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTW9kdWxvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bG8gPSBuZXcgVG9uZS5Nb2R1bG8oaW52U3RlcFNpemUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGtlZXBzIHRyYWNrIG9mIHRoZSBiaXRzXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYml0cyA9IG9wdGlvbnMuYml0cztcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuZmFuKHRoaXMuX3N1YnRyYWN0LCB0aGlzLl9tb2R1bG8pO1xuXHQgICAgICAgIHRoaXMuX21vZHVsby5jb25uZWN0KHRoaXMuX3N1YnRyYWN0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdC5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJpdENydXNoZXIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CaXRDcnVzaGVyLmRlZmF1bHRzID0geyAnYml0cyc6IDQgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBiaXQgZGVwdGggb2YgdGhlIGVmZmVjdC4gTm9taW5hbCByYW5nZSBvZiAxLTguXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQml0Q3J1c2hlciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGJpdHNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJpdENydXNoZXIucHJvdG90eXBlLCAnYml0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JpdHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChiaXRzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2JpdHMgPSBiaXRzO1xuXHQgICAgICAgICAgICB2YXIgaW52U3RlcFNpemUgPSAxIC8gTWF0aC5wb3coMiwgYml0cyAtIDEpO1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bG8udmFsdWUgPSBpbnZTdGVwU2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQml0Q3J1c2hlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CaXRDcnVzaGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bG8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsbyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQml0Q3J1c2hlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ2hlYnlTaGV2IGlzIGEgQ2hlYnlzaGV2IHdhdmVzaGFwZXIsIGFuIGVmZmVjdCB3aGljaCBpcyBnb29kIFxuXHRcdCAqICAgICAgICAgZm9yIG1ha2luZyBkaWZmZXJlbnQgdHlwZXMgb2YgZGlzdG9ydGlvbiBzb3VuZHMuXG5cdFx0ICogICAgICAgICBOb3RlIHRoYXQgb2RkIG9yZGVycyBzb3VuZCB2ZXJ5IGRpZmZlcmVudCBmcm9tIGV2ZW4gb25lcywgXG5cdFx0ICogICAgICAgICBhbmQgb3JkZXIgPSAxIGlzIG5vIGNoYW5nZS4gXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgYXQgW211c2ljLmNvbHVtYmlhLmVkdV0oaHR0cDovL211c2ljLmNvbHVtYmlhLmVkdS9jbWMvbXVzaWNhbmRjb21wdXRlcnMvY2hhcHRlcjQvMDRfMDYucGhwKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfE9iamVjdH0gW29yZGVyXSBUaGUgb3JkZXIgb2YgdGhlIGNoZWJ5c2hldiBwb2x5bm9taWFsLiBOb3JtYWwgcmFuZ2UgYmV0d2VlbiAxLTEwMC4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jcmVhdGUgYSBuZXcgY2hlYnlcblx0XHQgKiB2YXIgY2hlYnkgPSBuZXcgVG9uZS5DaGVieXNoZXYoNTApO1xuXHRcdCAqIC8vY3JlYXRlIGEgbW9ub3N5bnRoIGNvbm5lY3RlZCB0byBvdXIgY2hlYnlcblx0XHQgKiBzeW50aCA9IG5ldyBUb25lLk1vbm9TeW50aCgpLmNvbm5lY3QoY2hlYnkpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydvcmRlciddLCBUb25lLkNoZWJ5c2hldik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoNDA5Nik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBob2xkcyBvbnRvIHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29yZGVyID0gb3B0aW9ucy5vcmRlcjtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fc2hhcGVyKTtcblx0ICAgICAgICB0aGlzLm9yZGVyID0gb3B0aW9ucy5vcmRlcjtcblx0ICAgICAgICB0aGlzLm92ZXJzYW1wbGUgPSBvcHRpb25zLm92ZXJzYW1wbGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DaGVieXNoZXYsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29yZGVyJzogMSxcblx0ICAgICAgICAnb3ZlcnNhbXBsZSc6ICdub25lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBnZXQgdGhlIGNvZWZmaWNpZW50IGZvciB0aGF0IGRlZ3JlZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0geCB0aGUgeCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gICB7bnVtYmVyfSBkZWdyZWUgXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBtZW1vIG1lbW9pemUgdGhlIGNvbXB1dGVkIHZhbHVlLiBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBzcGVlZHMgdXAgY29tcHV0YXRpb24gZ3JlYXRseS4gXG5cdFx0ICogIEByZXR1cm4gIHtudW1iZXJ9ICAgICAgIHRoZSBjb2VmZmljaWVudCBcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZS5fZ2V0Q29lZmZpY2llbnQgPSBmdW5jdGlvbiAoeCwgZGVncmVlLCBtZW1vKSB7XG5cdCAgICAgICAgaWYgKG1lbW8uaGFzT3duUHJvcGVydHkoZGVncmVlKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbWVtb1tkZWdyZWVdO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoZGVncmVlID09PSAwKSB7XG5cdCAgICAgICAgICAgIG1lbW9bZGVncmVlXSA9IDA7XG5cdCAgICAgICAgfSBlbHNlIGlmIChkZWdyZWUgPT09IDEpIHtcblx0ICAgICAgICAgICAgbWVtb1tkZWdyZWVdID0geDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBtZW1vW2RlZ3JlZV0gPSAyICogeCAqIHRoaXMuX2dldENvZWZmaWNpZW50KHgsIGRlZ3JlZSAtIDEsIG1lbW8pIC0gdGhpcy5fZ2V0Q29lZmZpY2llbnQoeCwgZGVncmVlIC0gMiwgbWVtbyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBtZW1vW2RlZ3JlZV07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG9yZGVyIG9mIHRoZSBDaGVieXNoZXYgcG9seW5vbWlhbCB3aGljaCBjcmVhdGVzXG5cdFx0ICogdGhlIGVxdWF0aW9uIHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIGluY29taW5nIFxuXHRcdCAqIHNpZ25hbCB0aHJvdWdoIGEgVG9uZS5XYXZlU2hhcGVyLiBUaGUgZXF1YXRpb25zXG5cdFx0ICogYXJlIGluIHRoZSBmb3JtOjxicj5cblx0XHQgKiBvcmRlciAyOiAyeF4yICsgMTxicj5cblx0XHQgKiBvcmRlciAzOiA0eF4zICsgM3ggPGJyPlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNoZWJ5c2hldiNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb3JkZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNoZWJ5c2hldi5wcm90b3R5cGUsICdvcmRlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yZGVyO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3JkZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JkZXIgPSBvcmRlcjtcblx0ICAgICAgICAgICAgdmFyIGN1cnZlID0gbmV3IEFycmF5KDQwOTYpO1xuXHQgICAgICAgICAgICB2YXIgbGVuID0gY3VydmUubGVuZ3RoO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgeCA9IGkgKiAyIC8gbGVuIC0gMTtcblx0ICAgICAgICAgICAgICAgIGlmICh4ID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9zaG91bGQgb3V0cHV0IDAgd2hlbiBpbnB1dCBpcyAwXG5cdCAgICAgICAgICAgICAgICAgICAgY3VydmVbaV0gPSAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBjdXJ2ZVtpXSA9IHRoaXMuX2dldENvZWZmaWNpZW50KHgsIG9yZGVyLCB7fSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLmN1cnZlID0gY3VydmU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3ZlcnNhbXBsaW5nIG9mIHRoZSBlZmZlY3QuIENhbiBlaXRoZXIgYmUgXCJub25lXCIsIFwiMnhcIiBvciBcIjR4XCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hlYnlzaGV2I1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgb3ZlcnNhbXBsZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZSwgJ292ZXJzYW1wbGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG92ZXJzYW1wbGluZykge1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZSA9IG92ZXJzYW1wbGluZztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNoZWJ5c2hldn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ2hlYnlzaGV2O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQmFzZSBjbGFzcyBmb3IgU3RlcmVvIGVmZmVjdHMuIFByb3ZpZGVzIGVmZmVjdFNlbmRML1IgYW5kIGVmZmVjdFJldHVybkwvUi5cblx0XHQgKlxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9FZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3dldCddLCBUb25lLkVmZmVjdCk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkcnl3ZXQga25vYiB0byBjb250cm9sIHRoZSBhbW91bnQgb2YgZWZmZWN0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3Jvc3NGYWRlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBuZXcgVG9uZS5Dcm9zc0ZhZGUob3B0aW9ucy53ZXQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3ZXQgY29udHJvbCwgaS5lLiBob3cgbXVjaCBvZiB0aGUgZWZmZWN0ZWRcblx0XHRcdCAqICB3aWxsIHBhc3MgdGhyb3VnaCB0byB0aGUgb3V0cHV0LlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndldCA9IHRoaXMuX2RyeVdldC5mYWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZW4gc3BsaXQgaXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3BsaXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBlZmZlY3RzIHNlbmQgTEVGVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTCA9IHRoaXMuX3NwbGl0LmxlZnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdHMgc2VuZCBSSUdIVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUiA9IHRoaXMuX3NwbGl0LnJpZ2h0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzdGVyZW8gZWZmZWN0IG1lcmdlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdCByZXR1cm4gTEVGVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5MID0gdGhpcy5fbWVyZ2UubGVmdDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0IHJldHVybiBSSUdIVFxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SID0gdGhpcy5fbWVyZ2UucmlnaHQ7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9zcGxpdCk7XG5cdCAgICAgICAgLy9kcnkgd2V0IGNvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX2RyeVdldCwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UuY29ubmVjdCh0aGlzLl9kcnlXZXQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3dldCddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb0VmZmVjdCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9FZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd3ZXQnXSk7XG5cdCAgICAgICAgdGhpcy53ZXQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN0ZXJlb0VmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ2hvcnVzIGlzIGEgc3RlcmVvIGNob3J1cyBlZmZlY3QgY29tcG9zZWQgb2Zcblx0XHQgKiAgICAgICAgIGEgbGVmdCBhbmQgcmlnaHQgZGVsYXkgd2l0aCBhIFRvbmUuTEZPIGFwcGxpZWQgdG8gdGhlIGRlbGF5VGltZSBvZiBlYWNoIGNoYW5uZWwuXG5cdFx0ICogICAgICAgICBJbnNwaXJhdGlvbiBmcm9tIFtUdW5hLmpzXShodHRwczovL2dpdGh1Yi5jb20vRGluYWhtb2UvdHVuYS9ibG9iL21hc3Rlci90dW5hLmpzKS5cblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBvbiB0aGUgY2hvcnVzIGVmZmVjdCBvbiBbU291bmRPblNvdW5kXShodHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL2p1bjA0L2FydGljbGVzL3N5bnRoc2VjcmV0cy5odG0pLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICpcdEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSBvZiB0aGUgTEZPLlxuXHRcdCAqXHRAcGFyYW0ge01pbGxpc2Vjb25kc30gW2RlbGF5VGltZV0gVGhlIGRlbGF5IG9mIHRoZSBjaG9ydXMgZWZmZWN0IGluIG1zLlxuXHRcdCAqXHRAcGFyYW0ge05vcm1hbFJhbmdlfSBbZGVwdGhdIFRoZSBkZXB0aCBvZiB0aGUgY2hvcnVzLlxuXHRcdCAqXHRAZXhhbXBsZVxuXHRcdCAqIHZhciBjaG9ydXMgPSBuZXcgVG9uZS5DaG9ydXMoNCwgMi41LCAwLjUpO1xuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLlBvbHlTeW50aCg0LCBUb25lLk1vbm9TeW50aCkuY29ubmVjdChjaG9ydXMpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkMzXCIsXCJFM1wiLFwiRzNcIl0sIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkNob3J1cyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuQ2hvcnVzKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZXB0aCBvZiB0aGUgY2hvcnVzXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVwdGggPSBvcHRpb25zLmRlcHRoO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheVRpbWVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheVRpbWUgPSBvcHRpb25zLmRlbGF5VGltZSAvIDEwMDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBjb250cm9scyB0aGUgZGVsYXlUaW1lXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9MID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDFcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhbm90aGVyIExGTyBmb3IgdGhlIHJpZ2h0IHNpZGUgd2l0aCBhIDE4MCBkZWdyZWUgcGhhc2UgZGlmZlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICAgICAncGhhc2UnOiAxODBcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBkZWxheSBmb3IgbGVmdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVMID0gbmV3IFRvbmUuRGVsYXkoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBkZWxheSBmb3IgcmlnaHRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlUiA9IG5ldyBUb25lLkRlbGF5KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZnJlcXVlbmN5IG9mIHRoZSBMRk8gd2hpY2ggbW9kdWxhdGVzIHRoZSBkZWxheVRpbWUuXG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm9MLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbih0aGlzLl9kZWxheU5vZGVMLCB0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4odGhpcy5fZGVsYXlOb2RlUiwgdGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAvL2FuZCBwYXNzIHRocm91Z2ggdG8gbWFrZSB0aGUgZGV0dW5lIGFwcGFyZW50XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgLy9sZm8gc2V0dXBcblx0ICAgICAgICB0aGlzLl9sZm9MLmNvbm5lY3QodGhpcy5fZGVsYXlOb2RlTC5kZWxheVRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuY29ubmVjdCh0aGlzLl9kZWxheU5vZGVSLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgbGZvXG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdGFydCgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RhcnQoKTtcblx0ICAgICAgICAvL2hhdmUgb25lIExGTyBmcmVxdWVuY3kgY29udHJvbCB0aGUgb3RoZXJcblx0ICAgICAgICB0aGlzLl9sZm9MLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2xmb1IuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3NldCB0aGUgaW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fZGVwdGg7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kudmFsdWUgPSBvcHRpb25zLmZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydmcmVxdWVuY3knXSk7XG5cdCAgICAgICAgdGhpcy5zcHJlYWQgPSBvcHRpb25zLnNwcmVhZDtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNob3J1cywgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hvcnVzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxLjUsXG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDMuNSxcblx0ICAgICAgICAnZGVwdGgnOiAwLjcsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ3NwcmVhZCc6IDE4MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZXB0aCBvZiB0aGUgZWZmZWN0LiBBIGRlcHRoIG9mIDEgbWFrZXMgdGhlIGRlbGF5VGltZVxuXHRcdCAqIG1vZHVsYXRlIGJldHdlZW4gMCBhbmQgMipkZWxheVRpbWUgKGNlbnRlcmVkIGFyb3VuZCB0aGUgZGVsYXlUaW1lKS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBuYW1lIGRlcHRoXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAnZGVwdGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXB0aDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGRlcHRoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlcHRoID0gZGVwdGg7XG5cdCAgICAgICAgICAgIHZhciBkZXZpYXRpb24gPSB0aGlzLl9kZWxheVRpbWUgKiBkZXB0aDtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5taW4gPSBNYXRoLm1heCh0aGlzLl9kZWxheVRpbWUgLSBkZXZpYXRpb24sIDApO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1heCA9IHRoaXMuX2RlbGF5VGltZSArIGRldmlhdGlvbjtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5taW4gPSBNYXRoLm1heCh0aGlzLl9kZWxheVRpbWUgLSBkZXZpYXRpb24sIDApO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1heCA9IHRoaXMuX2RlbGF5VGltZSArIGRldmlhdGlvbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWxheVRpbWUgaW4gbWlsbGlzZWNvbmRzIG9mIHRoZSBjaG9ydXMuIEEgbGFyZ2VyIGRlbGF5VGltZVxuXHRcdCAqIHdpbGwgZ2l2ZSBhIG1vcmUgcHJvbm91bmNlZCBlZmZlY3QuIE5vbWluYWwgcmFuZ2UgYSBkZWxheVRpbWVcblx0XHQgKiBpcyBiZXR3ZWVuIDIgYW5kIDIwbXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hvcnVzI1xuXHRcdCAqIEB0eXBlIHtNaWxsaXNlY29uZHN9XG5cdFx0ICogQG5hbWUgZGVsYXlUaW1lXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAnZGVsYXlUaW1lJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVsYXlUaW1lICogMTAwMDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGRlbGF5VGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZWxheVRpbWUgPSBkZWxheVRpbWUgLyAxMDAwO1xuXHQgICAgICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fZGVwdGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3NjaWxsYXRvciB0eXBlIG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hvcnVzI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hvcnVzLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9MLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBBbW91bnQgb2Ygc3RlcmVvIHNwcmVhZC4gV2hlbiBzZXQgdG8gMCwgYm90aCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBjZW50cmFsbHkuXG5cdFx0ICogV2hlbiBzZXQgdG8gMTgwLCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBoYXJkIGxlZnQgYW5kIHJpZ2h0IHJlc3BlY3RpdmVseS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvUi5waGFzZSAtIHRoaXMuX2xmb0wucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5waGFzZSA9IDkwIC0gc3ByZWFkIC8gMjtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5waGFzZSA9IHNwcmVhZCAvIDIgKyA5MDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2hvcnVzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNob3J1cy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZUwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZUwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZVIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZVIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmcmVxdWVuY3knKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ2hvcnVzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuQ29udm9sdmVyIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIE5hdGl2ZSBXZWIgQXVkaW9cblx0XHQgKiAgICAgICAgICBbQ29udm9sdmVyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtY29udm9sdmVybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICAgICAgICAgIENvbnZvbHV0aW9uIGlzIHVzZWZ1bCBmb3IgcmV2ZXJiIGFuZCBmaWx0ZXIgZW11bGF0aW9uLiBSZWFkIG1vcmUgYWJvdXQgY29udm9sdXRpb24gcmV2ZXJiIG9uXG5cdFx0ICogICAgICAgICAgW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29udm9sdXRpb25fcmV2ZXJiKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ3xUb25lLkJ1ZmZlcnxPYmplY3R9IFt1cmxdIFRoZSBVUkwgb2YgdGhlIGltcHVsc2UgcmVzcG9uc2Ugb3IgdGhlIFRvbmUuQnVmZmVyXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlhbmluZyB0aGUgaW1wdWxzZSByZXNwb25zZS5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pbml0aWFsaXppbmcgdGhlIGNvbnZvbHZlciB3aXRoIGFuIGltcHVsc2UgcmVzcG9uc2Vcblx0XHQgKiB2YXIgY29udm9sdmVyID0gbmV3IFRvbmUuQ29udm9sdmVyKFwiLi9wYXRoL3RvL2lyLndhdlwiKS50b01hc3RlcigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICBdLCBUb25lLkNvbnZvbHZlcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb252b2x2ZXIgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtDb252b2x2ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ29udm9sdmVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbnZvbHV0aW9uIGJ1ZmZlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKG9wdGlvbnMudXJsLCBmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnZvbHZlci5idWZmZXIgPSBidWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgICAgIG9wdGlvbnMub25sb2FkKCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fY29udm9sdmVyKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNvbnZvbHZlciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIuZGVmYXVsdHMgPSB7ICdvbmxvYWQnOiBUb25lLm5vT3AgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY29udm9sdmVyJ3MgYnVmZmVyXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnZvbHZlciNcblx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyfVxuXHRcdCAqICBAbmFtZSBidWZmZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNvbnZvbHZlci5wcm90b3R5cGUsICdidWZmZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChidWZmZXIpO1xuXHQgICAgICAgICAgICB0aGlzLl9jb252b2x2ZXIuYnVmZmVyID0gdGhpcy5fYnVmZmVyLmdldCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIExvYWQgYW4gaW1wdWxzZSByZXNwb25zZSB1cmwgYXMgYW4gYXVkaW8gYnVmZmVyLlxuXHRcdCAqICBEZWNvZGVzIHRoZSBhdWRpbyBhc3luY2hyb25vdXNseSBhbmQgaW52b2tlc1xuXHRcdCAqICB0aGUgY2FsbGJhY2sgb25jZSB0aGUgYXVkaW8gYnVmZmVyIGxvYWRzLlxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGJ1ZmZlciB0byBsb2FkLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGZpbGV0eXBlIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICBicm93c2VyLlxuXHRcdCAqICBAcGFyYW0gIHtmdW5jdGlvbj19IGNhbGxiYWNrXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubG9hZCh1cmwsIGZ1bmN0aW9uIChidWZmKSB7XG5cdCAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gYnVmZjtcblx0ICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNvbnZvbHZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db252b2x2ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNvbnZvbHZlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRGlzdG9ydGlvbiBpcyBhIHNpbXBsZSBkaXN0b3J0aW9uIGVmZmVjdCB1c2luZyBUb25lLldhdmVTaGFwZXIuXG5cdFx0ICogICAgICAgICBBbGdvcml0aG0gZnJvbSBbYSBzdGFja292ZXJmbG93IGFuc3dlcl0oaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjIzMTM0MDgpLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfE9iamVjdH0gW2Rpc3RvcnRpb25dIFRoZSBhbW91bnQgb2YgZGlzdG9ydGlvbiAobm9taW5hbCByYW5nZSBvZiAwLTEpXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGRpc3QgPSBuZXcgVG9uZS5EaXN0b3J0aW9uKDAuOCkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgZm0gPSBuZXcgVG9uZS5TaW1wbGVGTSgpLmNvbm5lY3QoZGlzdCk7XG5cdFx0ICogLy90aGlzIHNvdW5kcyBnb29kIG9uIGJhc3Mgbm90ZXNcblx0XHQgKiBmbS50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkExXCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkRpc3RvcnRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydkaXN0b3J0aW9uJ10sIFRvbmUuRGlzdG9ydGlvbik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKDQwOTYpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogaG9sZHMgdGhlIGRpc3RvcnRpb24gYW1vdW50XG5cdFx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Rpc3RvcnRpb24gPSBvcHRpb25zLmRpc3RvcnRpb247XG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX3NoYXBlcik7XG5cdCAgICAgICAgdGhpcy5kaXN0b3J0aW9uID0gb3B0aW9ucy5kaXN0b3J0aW9uO1xuXHQgICAgICAgIHRoaXMub3ZlcnNhbXBsZSA9IG9wdGlvbnMub3ZlcnNhbXBsZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkRpc3RvcnRpb24sIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EaXN0b3J0aW9uLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkaXN0b3J0aW9uJzogMC40LFxuXHQgICAgICAgICdvdmVyc2FtcGxlJzogJ25vbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGFtb3VudCBvZiBkaXN0b3J0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkRpc3RvcnRpb24jXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBuYW1lIGRpc3RvcnRpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkRpc3RvcnRpb24ucHJvdG90eXBlLCAnZGlzdG9ydGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3RvcnRpb247XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhbW91bnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGlzdG9ydGlvbiA9IGFtb3VudDtcblx0ICAgICAgICAgICAgdmFyIGsgPSBhbW91bnQgKiAxMDA7XG5cdCAgICAgICAgICAgIHZhciBkZWcgPSBNYXRoLlBJIC8gMTgwO1xuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIuc2V0TWFwKGZ1bmN0aW9uICh4KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoeCkgPCAwLjAwMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vc2hvdWxkIG91dHB1dCAwIHdoZW4gaW5wdXQgaXMgMFxuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDMgKyBrKSAqIHggKiAyMCAqIGRlZyAvIChNYXRoLlBJICsgayAqIE1hdGguYWJzKHgpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3ZlcnNhbXBsaW5nIG9mIHRoZSBlZmZlY3QuIENhbiBlaXRoZXIgYmUgXCJub25lXCIsIFwiMnhcIiBvciBcIjR4XCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRGlzdG9ydGlvbiNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIG92ZXJzYW1wbGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkRpc3RvcnRpb24ucHJvdG90eXBlLCAnb3ZlcnNhbXBsZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3ZlcnNhbXBsaW5nKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlID0gb3ZlcnNhbXBsaW5nO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRGlzdG9ydGlvbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EaXN0b3J0aW9uLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkRpc3RvcnRpb247XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogXHRAY2xhc3MgIFRvbmUuRmVlZGJhY2tFZmZlY3QgcHJvdmlkZXMgYSBsb29wIGJldHdlZW4gYW4gXG5cdFx0ICogXHQgICAgICAgIGF1ZGlvIHNvdXJjZSBhbmQgaXRzIG93biBvdXRwdXQuIFRoaXMgaXMgYSBiYXNlLWNsYXNzXG5cdFx0ICogXHQgICAgICAgIGZvciBmZWVkYmFjayBlZmZlY3RzLiBcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW2ZlZWRiYWNrXSBUaGUgaW5pdGlhbCBmZWVkYmFjayB2YWx1ZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmZWVkYmFjayddLCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBnYWluIHdoaWNoIGNvbnRyb2xzIHRoZSBmZWVkYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5mZWVkYmFjaywgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHNpZ25hbCB3aGljaCBpcyBmZWQgYmFjayBpbnRvIHRoZSBlZmZlY3QgaW5wdXQuIFxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gdGhpcy5fZmVlZGJhY2tHYWluLmdhaW47XG5cdCAgICAgICAgLy90aGUgZmVlZGJhY2sgbG9vcFxuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuLmNoYWluKHRoaXMuX2ZlZWRiYWNrR2FpbiwgdGhpcy5lZmZlY3RTZW5kKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmVlZGJhY2tFZmZlY3QsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRWZmZWN0LmRlZmF1bHRzID0geyAnZmVlZGJhY2snOiAwLjEyNSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRmVlZGJhY2tFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GZWVkYmFja0VmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkZlZWRiYWNrRGVsYXkgaXMgYSBEZWxheU5vZGUgaW4gd2hpY2ggcGFydCBvZiBvdXRwdXRcblx0XHQgKiAgICAgICAgICBzaWduYWwgaXMgZmVkIGJhY2sgaW50byB0aGUgZGVsYXkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkZlZWRiYWNrRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgYXBwbGllZCB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gZmVlZGJhY2sgVGhlIGFtb3VudCBvZiB0aGUgZWZmZWN0ZWQgc2lnbmFsIHdoaWNoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZmVkIGJhY2sgdGhyb3VnaCB0aGUgZGVsYXkuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZlZWRiYWNrRGVsYXkgPSBuZXcgVG9uZS5GZWVkYmFja0RlbGF5KFwiOG5cIiwgMC41KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciB0b20gPSBuZXcgVG9uZS5EcnVtU3ludGgoe1xuXHRcdCAqIFx0XCJvY3RhdmVzXCIgOiA0LFxuXHRcdCAqIFx0XCJwaXRjaERlY2F5XCIgOiAwLjFcblx0XHQgKiB9KS5jb25uZWN0KGZlZWRiYWNrRGVsYXkpO1xuXHRcdCAqIHRvbS50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkEyXCIsXCIzMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrRGVsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ2ZlZWRiYWNrJ1xuXHQgICAgICAgIF0sIFRvbmUuRmVlZGJhY2tEZWxheSk7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG5ldyBUb25lLkRlbGF5KG9wdGlvbnMuZGVsYXlUaW1lLCBvcHRpb25zLm1heERlbGF5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXlUaW1lIG9mIHRoZSBEZWxheU5vZGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9kZWxheU5vZGUuZGVsYXlUaW1lO1xuXHQgICAgICAgIC8vIGNvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fZGVsYXlOb2RlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2RlbGF5VGltZSddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZlZWRiYWNrRGVsYXksIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tEZWxheS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4yNSxcblx0ICAgICAgICAnbWF4RGVsYXknOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZlZWRiYWNrRGVsYXl9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tEZWxheS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GZWVkYmFja0RlbGF5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBhbiBhcnJheSBvZiBjb21iIGZpbHRlciBkZWxheSB2YWx1ZXMgZnJvbSBGcmVldmVyYiBpbXBsZW1lbnRhdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBjb21iRmlsdGVyVHVuaW5ncyA9IFtcblx0ICAgICAgICAxNTU3IC8gNDQxMDAsXG5cdCAgICAgICAgMTYxNyAvIDQ0MTAwLFxuXHQgICAgICAgIDE0OTEgLyA0NDEwMCxcblx0ICAgICAgICAxNDIyIC8gNDQxMDAsXG5cdCAgICAgICAgMTI3NyAvIDQ0MTAwLFxuXHQgICAgICAgIDEzNTYgLyA0NDEwMCxcblx0ICAgICAgICAxMTg4IC8gNDQxMDAsXG5cdCAgICAgICAgMTExNiAvIDQ0MTAwXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIGFuIGFycmF5IG9mIGFsbHBhc3MgZmlsdGVyIGZyZXF1ZW5jeSB2YWx1ZXMgZnJvbSBGcmVldmVyYiBpbXBsZW1lbnRhdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMgPSBbXG5cdCAgICAgICAgMjI1LFxuXHQgICAgICAgIDU1Nixcblx0ICAgICAgICA0NDEsXG5cdCAgICAgICAgMzQxXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZyZWV2ZXJiIGlzIGEgcmV2ZXJiIGJhc2VkIG9uIFtGcmVldmVyYl0oaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvfmpvcy9wYXNwL0ZyZWV2ZXJiLmh0bWwpLlxuXHRcdCAqICAgICAgICAgUmVhZCBtb3JlIG9uIHJldmVyYiBvbiBbU291bmQgT24gU291bmRdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwNDA4MzkwMi9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb206ODAvc29zL2ZlYjAxL2FydGljbGVzL3N5bnRoc2VjcmV0cy5hc3ApLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbcm9vbVNpemVdIENvcnJlbGF0ZWQgdG8gdGhlIGRlY2F5IHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZGFtcGVuaW5nXSBUaGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiBhIGxvd3Bhc3MgZmlsdGVyIGFzIHBhcnRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZXZlcmIuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZyZWV2ZXJiID0gbmV3IFRvbmUuRnJlZXZlcmIoKS50b01hc3RlcigpO1xuXHRcdCAqIGZyZWV2ZXJiLmRhbXBlbmluZy52YWx1ZSA9IDEwMDA7XG5cdFx0ICogLy9yb3V0aW5nIHN5bnRoIHRocm91Z2ggdGhlIHJldmVyYlxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkFNU3ludGgoKS5jb25uZWN0KGZyZWV2ZXJiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlZXZlcmIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncm9vbVNpemUnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0sIFRvbmUuRnJlZXZlcmIpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJvb21TaXplIHZhbHVlIGJldHdlZW4uIEEgbGFyZ2VyIHJvb21TaXplXG5cdFx0XHQgKiAgd2lsbCByZXN1bHQgaW4gYSBsb25nZXIgZGVjYXkuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5yb29tU2l6ZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGRhbXBlbmluZyBvZiB0aGUgcmV2ZXJiZXJhbnQgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kYW1wZW5pbmcsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBjb21iIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbWJGaWx0ZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFsbHBhc3MgZmlsdGVycyBvbiB0aGUgbGVmdFxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFsbHBhc3MgZmlsdGVycyBvbiB0aGUgcmlnaHRcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUiA9IFtdO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSByaWdodFxuXHQgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzLmxlbmd0aDsgbCsrKSB7XG5cdCAgICAgICAgICAgIHZhciBhbGxwYXNzTCA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgYWxscGFzc0wudHlwZSA9ICdhbGxwYXNzJztcblx0ICAgICAgICAgICAgYWxscGFzc0wuZnJlcXVlbmN5LnZhbHVlID0gYWxscGFzc0ZpbHRlckZyZXF1ZW5jaWVzW2xdO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0wucHVzaChhbGxwYXNzTCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vbWFrZSB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSBsZWZ0XG5cdCAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMubGVuZ3RoOyByKyspIHtcblx0ICAgICAgICAgICAgdmFyIGFsbHBhc3NSID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBhbGxwYXNzUi50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBhbGxwYXNzUi5mcmVxdWVuY3kudmFsdWUgPSBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXNbcl07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUi5wdXNoKGFsbHBhc3NSKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9tYWtlIHRoZSBjb21iIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNvbWJGaWx0ZXJUdW5pbmdzLmxlbmd0aDsgYysrKSB7XG5cdCAgICAgICAgICAgIHZhciBsZnBmID0gbmV3IFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIoY29tYkZpbHRlclR1bmluZ3NbY10pO1xuXHQgICAgICAgICAgICBpZiAoYyA8IGNvbWJGaWx0ZXJUdW5pbmdzLmxlbmd0aCAvIDIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY2hhaW4obGZwZiwgdGhpcy5fYWxscGFzc0ZpbHRlcnNMWzBdKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4obGZwZiwgdGhpcy5fYWxscGFzc0ZpbHRlcnNSWzBdKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnJvb21TaXplLmNvbm5lY3QobGZwZi5yZXNvbmFuY2UpO1xuXHQgICAgICAgICAgICB0aGlzLmRhbXBlbmluZy5jb25uZWN0KGxmcGYuZGFtcGVuaW5nKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29tYkZpbHRlcnMucHVzaChsZnBmKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jaGFpbiB0aGUgYWxscGFzcyBmaWx0ZXJzIHRvZ2V0ZWhyXG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTCk7XG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUik7XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMW3RoaXMuX2FsbHBhc3NGaWx0ZXJzTC5sZW5ndGggLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSW3RoaXMuX2FsbHBhc3NGaWx0ZXJzUi5sZW5ndGggLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncm9vbVNpemUnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRnJlZXZlcmIsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZWV2ZXJiLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdyb29tU2l6ZSc6IDAuNyxcblx0ICAgICAgICAnZGFtcGVuaW5nJzogMzAwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRnJlZXZlcmJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlZXZlcmIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBhbCA9IDA7IGFsIDwgdGhpcy5fYWxscGFzc0ZpbHRlcnNMLmxlbmd0aDsgYWwrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbYWxdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMW2FsXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTCA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgYXIgPSAwOyBhciA8IHRoaXMuX2FsbHBhc3NGaWx0ZXJzUi5sZW5ndGg7IGFyKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSW2FyXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUlthcl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1IgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGNmID0gMDsgY2YgPCB0aGlzLl9jb21iRmlsdGVycy5sZW5ndGg7IGNmKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fY29tYkZpbHRlcnNbY2ZdLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fY29tYkZpbHRlcnNbY2ZdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY29tYkZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3Jvb21TaXplJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZyZWV2ZXJiO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBhbiBhcnJheSBvZiB0aGUgY29tYiBmaWx0ZXIgZGVsYXkgdGltZSB2YWx1ZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgY29tYkZpbHRlckRlbGF5VGltZXMgPSBbXG5cdCAgICAgICAgMTY4NyAvIDI1MDAwLFxuXHQgICAgICAgIDE2MDEgLyAyNTAwMCxcblx0ICAgICAgICAyMDUzIC8gMjUwMDAsXG5cdCAgICAgICAgMjI1MSAvIDI1MDAwXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSByZXNvbmFuY2VzIG9mIGVhY2ggb2YgdGhlIGNvbWIgZmlsdGVyc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBjb21iRmlsdGVyUmVzb25hbmNlcyA9IFtcblx0ICAgICAgICAwLjc3Myxcblx0ICAgICAgICAwLjgwMixcblx0ICAgICAgICAwLjc1Myxcblx0ICAgICAgICAwLjczM1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgYWxscGFzcyBmaWx0ZXIgZnJlcXVlbmNpZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgYWxscGFzc0ZpbHRlckZyZXFzID0gW1xuXHQgICAgICAgIDM0Nyxcblx0ICAgICAgICAxMTMsXG5cdCAgICAgICAgMzdcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuSkNSZXZlcmIgaXMgYSBzaW1wbGUgW1NjaHJvZWRlciBSZXZlcmJlcmF0b3JdKGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L35qb3MvcGFzcC9TY2hyb2VkZXJfUmV2ZXJiZXJhdG9ycy5odG1sKVxuXHRcdCAqICAgICAgICAgdHVuZWQgYnkgSm9obiBDaG93bmluZyBpbiAxOTcwLlxuXHRcdCAqICAgICAgICAgSXQgaXMgbWFkZSB1cCBvZiB0aHJlZSBhbGxwYXNzIGZpbHRlcnMgYW5kIGZvdXIgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIuXG5cdFx0ICpcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3Jvb21TaXplXSBDb29yZWxhdGVzIHRvIHRoZSBkZWNheSB0aW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciByZXZlcmIgPSBuZXcgVG9uZS5KQ1JldmVyYigwLjQpLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHRcdCAqIHZhciBkZWxheSA9IG5ldyBUb25lLkZlZWRiYWNrRGVsYXkoMC41KTtcblx0XHQgKiAvL2Nvbm5lY3RpbmcgdGhlIHN5bnRoIHRvIHJldmVyYiB0aHJvdWdoIGRlbGF5XG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuRHVvU3ludGgoKS5jaGFpbihkZWxheSwgcmV2ZXJiKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkE0XCIsXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuSkNSZXZlcmIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydyb29tU2l6ZSddLCBUb25lLkpDUmV2ZXJiKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJvb20gc2l6ZSBjb250cm9sIHZhbHVlcyBiZXR3ZWVuIFswLDFdXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5yb29tU2l6ZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgcm9vbSBzaXplXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlUm9vbVNpemUgPSBuZXcgVG9uZS5TY2FsZSgtMC43MzMsIDAuMTk3KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBhIHNlcmllcyBvZiBhbGxwYXNzIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcGFyYWxsZWwgZmVlZGJhY2sgY29tYiBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzID0gW107XG5cdCAgICAgICAgLy9tYWtlIHRoZSBhbGxwYXNzIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBhZiA9IDA7IGFmIDwgYWxscGFzc0ZpbHRlckZyZXFzLmxlbmd0aDsgYWYrKykge1xuXHQgICAgICAgICAgICB2YXIgYWxscGFzcyA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgYWxscGFzcy50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBhbGxwYXNzLmZyZXF1ZW5jeS52YWx1ZSA9IGFsbHBhc3NGaWx0ZXJGcmVxc1thZl07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzLnB1c2goYWxscGFzcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYW5kIHRoZSBjb21iIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBjZiA9IDA7IGNmIDwgY29tYkZpbHRlckRlbGF5VGltZXMubGVuZ3RoOyBjZisrKSB7XG5cdCAgICAgICAgICAgIHZhciBmYmNmID0gbmV3IFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyKGNvbWJGaWx0ZXJEZWxheVRpbWVzW2NmXSwgMC4xKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZS5jb25uZWN0KGZiY2YucmVzb25hbmNlKTtcblx0ICAgICAgICAgICAgZmJjZi5yZXNvbmFuY2UudmFsdWUgPSBjb21iRmlsdGVyUmVzb25hbmNlc1tjZl07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzW3RoaXMuX2FsbHBhc3NGaWx0ZXJzLmxlbmd0aCAtIDFdLmNvbm5lY3QoZmJjZik7XG5cdCAgICAgICAgICAgIGlmIChjZiA8IGNvbWJGaWx0ZXJEZWxheVRpbWVzLmxlbmd0aCAvIDIpIHtcblx0ICAgICAgICAgICAgICAgIGZiY2YuY29ubmVjdCh0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZmJjZi5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycy5wdXNoKGZiY2YpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NoYWluIHRoZSBhbGxwYXNzIGZpbHRlcnMgdG9nZXRoZXJcblx0ICAgICAgICB0aGlzLnJvb21TaXplLmNvbm5lY3QodGhpcy5fc2NhbGVSb29tU2l6ZSk7XG5cdCAgICAgICAgVG9uZS5jb25uZWN0U2VyaWVzLmFwcGx5KFRvbmUsIHRoaXMuX2FsbHBhc3NGaWx0ZXJzKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNvbm5lY3QodGhpcy5fYWxscGFzc0ZpbHRlcnNbMF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY29ubmVjdCh0aGlzLl9hbGxwYXNzRmlsdGVyc1swXSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydyb29tU2l6ZSddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkpDUmV2ZXJiLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkpDUmV2ZXJiLmRlZmF1bHRzID0geyAncm9vbVNpemUnOiAwLjUgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSkNSZXZlcmJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSkNSZXZlcmIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBhcGYgPSAwOyBhcGYgPCB0aGlzLl9hbGxwYXNzRmlsdGVycy5sZW5ndGg7IGFwZisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzW2FwZl0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1thcGZdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGZiY2YgPSAwOyBmYmNmIDwgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycy5sZW5ndGg7IGZiY2YrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzW2ZiY2ZdLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVyc1tmYmNmXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsncm9vbVNpemUnXSk7XG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuSkNSZXZlcmI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBNaWQvU2lkZSBwcm9jZXNzaW5nIHNlcGFyYXRlcyB0aGUgdGhlICdtaWQnIHNpZ25hbFxuXHRcdCAqICAgICAgICAgKHdoaWNoIGNvbWVzIG91dCBvZiBib3RoIHRoZSBsZWZ0IGFuZCB0aGUgcmlnaHQgY2hhbm5lbClcblx0XHQgKiAgICAgICAgIGFuZCB0aGUgJ3NpZGUnICh3aGljaCBvbmx5IGNvbWVzIG91dCBvZiB0aGUgdGhlIHNpZGUgY2hhbm5lbHMpXG5cdFx0ICogICAgICAgICBhbmQgZWZmZWN0cyB0aGVtIHNlcGFyYXRlbHkgYmVmb3JlIGJlaW5nIHJlY29tYmluZWQuXG5cdFx0ICogICAgICAgICBBcHBsaWVzIGEgTWlkL1NpZGUgc2VwZXJhdGlvbiBhbmQgcmVjb21iaW5hdGlvbi5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmb3VuZCBpbiBba3ZyYXVkaW8gZm9ydW1zXShodHRwOi8vd3d3Lmt2cmF1ZGlvLmNvbS9mb3J1bS92aWV3dG9waWMucGhwP3Q9MjEyNTg3KS5cblx0XHQgKiAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICBUaGlzIGlzIGEgYmFzZS1jbGFzcyBmb3IgTWlkL1NpZGUgRWZmZWN0cy5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9zaWRlIHNwbGl0XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVTcGxpdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gbmV3IFRvbmUuTWlkU2lkZVNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZC9zaWRlIG1lcmdlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk1pZFNpZGVNZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gbmV3IFRvbmUuTWlkU2lkZU1lcmdlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBzZW5kLiBDb25uZWN0IHRvIG1pZCBwcm9jZXNzaW5nXG5cdFx0XHQgKiAgQHR5cGUge1RvbmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkU2VuZCA9IHRoaXMuX21pZFNpZGVTcGxpdC5taWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNpZGUgc2VuZC4gQ29ubmVjdCB0byBzaWRlIHByb2Nlc3Npbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlU2VuZCA9IHRoaXMuX21pZFNpZGVTcGxpdC5zaWRlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgcmV0dXJuIGNvbm5lY3Rpb25cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkUmV0dXJuID0gdGhpcy5fbWlkU2lkZU1lcmdlLm1pZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSByZXR1cm4gY29ubmVjdGlvblxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlUmV0dXJuID0gdGhpcy5fbWlkU2lkZU1lcmdlLnNpZGU7XG5cdCAgICAgICAgLy90aGUgY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY29ubmVjdCh0aGlzLl9taWRTaWRlU3BsaXQpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVFZmZlY3QsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZUVmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZFNlbmQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZVNlbmQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkUmV0dXJuID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnNpZGVSZXR1cm4gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1pZFNpZGVFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBoYXNlciBpcyBhIHBoYXNlciBlZmZlY3QuIFBoYXNlcnMgd29yayBieSBjaGFuZ2luZyB0aGUgcGhhc2Vcblx0XHQgKiAgICAgICAgIG9mIGRpZmZlcmVudCBmcmVxdWVuY3kgY29tcG9uZW50cyBvZiBhbiBpbmNvbWluZyBzaWduYWwuIFJlYWQgbW9yZSBvblxuXHRcdCAqICAgICAgICAgW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUGhhc2VyXyhlZmZlY3QpKS5cblx0XHQgKiAgICAgICAgIEluc3BpcmF0aW9uIGZvciB0aGlzIHBoYXNlciBjb21lcyBmcm9tIFtUdW5hLmpzXShodHRwczovL2dpdGh1Yi5jb20vRGluYWhtb2UvdHVuYS8pLlxuXHRcdCAqXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIHNwZWVkIG9mIHRoZSBwaGFzaW5nLlxuXHRcdCAqXHRAcGFyYW0ge251bWJlcn0gW29jdGF2ZXNdIFRoZSBvY3RhdmVzIG9mIHRoZSBlZmZlY3QuXG5cdFx0ICpcdEBwYXJhbSB7RnJlcXVlbmN5fSBbYmFzZUZyZXF1ZW5jeV0gVGhlIGJhc2UgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXJzLlxuXHRcdCAqXHRAZXhhbXBsZVxuXHRcdCAqIHZhciBwaGFzZXIgPSBuZXcgVG9uZS5QaGFzZXIoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IDE1LFxuXHRcdCAqIFx0XCJvY3RhdmVzXCIgOiA1LFxuXHRcdCAqIFx0XCJiYXNlRnJlcXVlbmN5XCIgOiAxMDAwXG5cdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5GTVN5bnRoKCkuY29ubmVjdChwaGFzZXIpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiRTNcIiwgXCIyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vc2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJyxcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5QaGFzZXIpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBjb250cm9scyB0aGUgZnJlcXVlbmN5IG9uIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBuZXcgVG9uZS5MRk8ob3B0aW9ucy5mcmVxdWVuY3ksIDAsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZm8gd2hpY2ggY29udHJvbHMgdGhlIGZyZXF1ZW5jeSBvbiB0aGUgcmlnaHQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG5ldyBUb25lLkxGTyhvcHRpb25zLmZyZXF1ZW5jeSwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5waGFzZSA9IDE4MDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYmFzZSBtb2R1bGF0aW9uIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG9jdGF2ZXMgb2YgdGhlIHBoYXNpbmdcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBxdWFsaXR5IGZhY3RvciBvZiB0aGUgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5RLCBUb25lLlR5cGUuUG9zaXRpdmUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhcnJheSBvZiBmaWx0ZXJzIGZvciB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzTCA9IHRoaXMuX21ha2VGaWx0ZXJzKG9wdGlvbnMuc3RhZ2VzLCB0aGlzLl9sZm9MLCB0aGlzLlEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhcnJheSBvZiBmaWx0ZXJzIGZvciB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzUiA9IHRoaXMuX21ha2VGaWx0ZXJzKG9wdGlvbnMuc3RhZ2VzLCB0aGlzLl9sZm9SLCB0aGlzLlEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIGZyZXF1ZW5jeSBvZiB0aGUgZWZmZWN0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmb0wuZnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LnZhbHVlID0gb3B0aW9ucy5mcmVxdWVuY3k7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZW0gdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNvbm5lY3QodGhpcy5fZmlsdGVyc0xbMF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY29ubmVjdCh0aGlzLl9maWx0ZXJzUlswXSk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc0xbb3B0aW9ucy5zdGFnZXMgLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc1Jbb3B0aW9ucy5zdGFnZXMgLSAxXS5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuUik7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSBmcmVxdWVuY3kgd2l0aCBvbmUgTEZPXG5cdCAgICAgICAgdGhpcy5fbGZvTC5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9sZm9SLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIG9wdGlvbnNcblx0ICAgICAgICB0aGlzLmJhc2VGcmVxdWVuY3kgPSBvcHRpb25zLmJhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGxmb1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3RhcnQoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN0YXJ0KCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QaGFzZXIsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0c1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtvYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBoYXNlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMC41LFxuXHQgICAgICAgICdvY3RhdmVzJzogMyxcblx0ICAgICAgICAnc3RhZ2VzJzogMTAsXG5cdCAgICAgICAgJ1EnOiAxMCxcblx0ICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDM1MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gc3RhZ2VzXG5cdFx0ICogIEByZXR1cm5zIHtBcnJheX0gdGhlIG51bWJlciBvZiBmaWx0ZXJzIGFsbCBjb25uZWN0ZWQgdG9nZXRoZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyLnByb3RvdHlwZS5fbWFrZUZpbHRlcnMgPSBmdW5jdGlvbiAoc3RhZ2VzLCBjb25uZWN0VG9GcmVxLCBRKSB7XG5cdCAgICAgICAgdmFyIGZpbHRlcnMgPSBuZXcgQXJyYXkoc3RhZ2VzKTtcblx0ICAgICAgICAvL21ha2UgYWxsIHRoZSBmaWx0ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFnZXM7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZmlsdGVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBmaWx0ZXIudHlwZSA9ICdhbGxwYXNzJztcblx0ICAgICAgICAgICAgUS5jb25uZWN0KGZpbHRlci5RKTtcblx0ICAgICAgICAgICAgY29ubmVjdFRvRnJlcS5jb25uZWN0KGZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICBmaWx0ZXJzW2ldID0gZmlsdGVyO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgZmlsdGVycyk7XG5cdCAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoZSBwaGFzZSBnb2VzIGFib3ZlXG5cdFx0ICogdGhlIGJhc2VGcmVxdWVuY3lcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaGFzZXIjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBoYXNlci5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdGF2ZXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdGF2ZXM7XG5cdCAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLl9iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgb2N0YXZlcyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wubWF4ID0gbWF4O1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1heCA9IG1heDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0aGUgYmFzZSBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlcnMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGhhc2VyI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGhhc2VyLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgICAgICB0aGlzLl9iYXNlRnJlcXVlbmN5ID0gZnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5taW4gPSBmcmVxO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1pbiA9IGZyZXE7XG5cdCAgICAgICAgICAgIHRoaXMub2N0YXZlcyA9IHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGhhc2VyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBoYXNlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuUS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9MLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9MID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9SLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlcnNMLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNMW2ldLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc0xbaV0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzTCA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl9maWx0ZXJzUi5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzUltqXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNSW2pdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyc1IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QaGFzZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBKdXN0IGxpa2UgYSBzdGVyZW8gZmVlZGJhY2sgZWZmZWN0LCBidXQgdGhlIGZlZWRiYWNrIGlzIHJvdXRlZCBmcm9tIGxlZnQgdG8gcmlnaHRcblx0XHQgKiAgICAgICAgIGFuZCByaWdodCB0byBsZWZ0IGluc3RlYWQgb2Ygb24gdGhlIHNhbWUgY2hhbm5lbC5cblx0XHQgKlxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmZWVkYmFjayddLCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZmVlZGJhY2sgZnJvbSB0aGUgb3V0cHV0XG5cdFx0XHQgKiAgYmFjayBpbnRvIHRoZSBpbnB1dCBvZiB0aGUgZWZmZWN0IChyb3V0ZWRcblx0XHRcdCAqICBhY3Jvc3MgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbHMpLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZmVlZGJhY2ssIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxlZnQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcmlnaHQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSTCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwuY2hhaW4odGhpcy5fZmVlZGJhY2tMUiwgdGhpcy5lZmZlY3RTZW5kUik7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SLmNoYWluKHRoaXMuX2ZlZWRiYWNrUkwsIHRoaXMuZWZmZWN0U2VuZEwpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZmFuKHRoaXMuX2ZlZWRiYWNrTFIuZ2FpbiwgdGhpcy5fZmVlZGJhY2tSTC5nYWluKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZmVlZGJhY2snXSk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSTCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGluZ1BvbmdEZWxheSBpcyBhIGZlZWRiYWNrIGRlbGF5IGVmZmVjdCB3aGVyZSB0aGUgZWNobyBpcyBoZWFyZFxuXHRcdCAqICAgICAgICAgIGZpcnN0IGluIG9uZSBjaGFubmVsIGFuZCBuZXh0IGluIHRoZSBvcHBvc2l0ZSBjaGFubmVsLiBJbiBhIHN0ZXJlb1xuXHRcdCAqICAgICAgICAgIHN5c3RlbSB0aGVzZSBhcmUgdGhlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzLlxuXHRcdCAqICAgICAgICAgIFBpbmdQb25nRGVsYXkgaW4gbW9yZSBzaW1wbGlmaWVkIHRlcm1zIGlzIHR3byBUb25lLkZlZWRiYWNrRGVsYXlzXG5cdFx0ICogICAgICAgICAgd2l0aCBpbmRlcGVuZGVudCBkZWxheSB2YWx1ZXMuIEVhY2ggZGVsYXkgaXMgcm91dGVkIHRvIG9uZSBjaGFubmVsXG5cdFx0ICogICAgICAgICAgKGxlZnQgb3IgcmlnaHQpLCBhbmQgdGhlIGNoYW5uZWwgdHJpZ2dlcmVkIHNlY29uZCB3aWxsIGFsd2F5c1xuXHRcdCAqICAgICAgICAgIHRyaWdnZXIgYXQgdGhlIHNhbWUgaW50ZXJ2YWwgYWZ0ZXIgdGhlIGZpcnN0LlxuXHRcdCAqXG5cdFx0ICogXHRAY29uc3RydWN0b3Jcblx0XHQgKiBcdEBleHRlbmRzIHtUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2RlbGF5VGltZV0gVGhlIGRlbGF5VGltZSBiZXR3ZWVuIGNvbnNlY3V0aXZlIGVjaG9zLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gZmVlZGJhY2sgVGhlIGFtb3VudCBvZiB0aGUgZWZmZWN0ZWQgc2lnbmFsIHdoaWNoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmZWQgYmFjayB0aHJvdWdoIHRoZSBkZWxheS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGluZ1BvbmcgPSBuZXcgVG9uZS5QaW5nUG9uZ0RlbGF5KFwiNG5cIiwgMC4yKS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBkcnVtID0gbmV3IFRvbmUuRHJ1bVN5bnRoKCkuY29ubmVjdChwaW5nUG9uZyk7XG5cdFx0ICogZHJ1bS50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiMzJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaW5nUG9uZ0RlbGF5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdmZWVkYmFjaydcblx0ICAgICAgICBdLCBUb25lLlBpbmdQb25nRGVsYXkpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGUgb24gdGhlIGxlZnQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZWZ0RGVsYXkgPSBuZXcgVG9uZS5EZWxheSgwLCBvcHRpb25zLm1heERlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGUgb24gdGhlIHJpZ2h0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmlnaHREZWxheSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcHJlZGVsYXkgb24gdGhlIHJpZ2h0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmlnaHRQcmVEZWxheSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgdGltZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRlbGF5VGltZSwgVG9uZS5UeXBlLlRpbWUpO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY2hhaW4odGhpcy5fbGVmdERlbGF5LCB0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4odGhpcy5fcmlnaHRQcmVEZWxheSwgdGhpcy5fcmlnaHREZWxheSwgdGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZS5mYW4odGhpcy5fbGVmdERlbGF5LmRlbGF5VGltZSwgdGhpcy5fcmlnaHREZWxheS5kZWxheVRpbWUsIHRoaXMuX3JpZ2h0UHJlRGVsYXkuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvL3JlYXJyYW5nZWQgdGhlIGZlZWRiYWNrIHRvIGJlIGFmdGVyIHRoZSByaWdodFByZURlbGF5XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUi5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMUi5jb25uZWN0KHRoaXMuX3JpZ2h0RGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGluZ1BvbmdEZWxheSwgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGluZ1BvbmdEZWxheS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMC4yNSxcblx0ICAgICAgICAnbWF4RGVsYXlUaW1lJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGluZ1BvbmdEZWxheX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaW5nUG9uZ0RlbGF5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGVmdERlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0RGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0RGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0RGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0UHJlRGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3JpZ2h0UHJlRGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGluZ1BvbmdEZWxheTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGl0Y2hTaGlmdCBkb2VzIG5lYXItcmVhbHRpbWUgcGl0Y2ggc2hpZnRpbmcgdG8gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgIFRoZSBlZmZlY3QgaXMgYWNoaWV2ZWQgYnkgc3BlZWRpbmcgdXAgb3Igc2xvd2luZyBkb3duIHRoZSBkZWxheVRpbWVcblx0XHQgKiAgICAgICAgIG9mIGEgRGVsYXlOb2RlIHVzaW5nIGEgc2F3dG9vdGggd2F2ZS5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmb3VuZCBpbiBbdGhpcyBwZGZdKGh0dHA6Ly9kc3AtYm9vay5uYXJvZC5ydS9zb3VuZHByb2MucGRmKS5cblx0XHQgKiAgICAgICAgIEFkZGl0aW9uYWwgcmVmZXJlbmNlIGJ5IFtNaWxsZXIgUHVja2V0XShodHRwOi8vbXNwLnVjc2QuZWR1L3RlY2huaXF1ZXMvdjAuMTEvYm9vay1odG1sL25vZGUxMTUuaHRtbCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRmVlZGJhY2tFZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7SW50ZXJ2YWw9fSBwaXRjaCBUaGUgaW50ZXJ2YWwgdG8gdHJhbnNwb3NlIHRoZSBpbmNvbWluZyBzaWduYWwgYnkuXG5cdFx0ICovXG5cdCAgICBUb25lLlBpdGNoU2hpZnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydwaXRjaCddLCBUb25lLlBpdGNoU2hpZnQpO1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGl0Y2ggc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFVzZXMgdHdvIERlbGF5Tm9kZXMgdG8gY292ZXIgdXAgdGhlIGp1bXAgaW5cblx0XHRcdCAqICB0aGUgc2F3dG9vdGggd2F2ZS5cblx0XHRcdCAqICBAdHlwZSAge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlBID0gbmV3IFRvbmUuRGVsYXkoMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpcnN0IExGTy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9BID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAwLjEsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ3Nhd3Rvb3RoJ1xuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5fZGVsYXlBLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHNlY29uZCBEZWxheU5vZGVcblx0XHRcdCAqICBAdHlwZSAge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlCID0gbmV3IFRvbmUuRGVsYXkoMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpcnN0IExGTy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9CID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgICAgICdtYXgnOiAwLjEsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ3Nhd3Rvb3RoJyxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogMTgwXG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9kZWxheUIuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBDcm9zc2ZhZGUgcXVpY2tseSBiZXR3ZWVuIHRoZSB0d28gZGVsYXkgbGluZXNcblx0XHRcdCAqICB0byBjb3ZlciB1cCB0aGUganVtcCBpbiB0aGUgc2F3dG9vdGggd2F2ZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Dcm9zc0ZhZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZSA9IG5ldyBUb25lLkNyb3NzRmFkZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIExGTyB3aGljaCBhbHRlcm5hdGVzIGJldHdlZW4gdGhlIHR3b1xuXHRcdFx0ICogIGRlbGF5IGxpbmVzIHRvIGNvdmVyIHVwIHRoZSBkaXNwYXJpdHkgaW4gdGhlXG5cdFx0XHQgKiAgc2F3dG9vdGggd2F2ZS5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8gPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ3RyaWFuZ2xlJyxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogOTBcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2Nyb3NzRmFkZS5mYWRlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0RlbGF5ID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZGVsYXkgb24gdGhlIGlucHV0IHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZmVlZGJhY2tEZWxheS5kZWxheVRpbWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2RlbGF5VGltZScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGQgdGhlIGN1cnJlbnQgcGl0Y2hcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9waXRjaCA9IG9wdGlvbnMucGl0Y2g7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZCB0aGUgY3VycmVudCB3aW5kb3dTaXplXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fd2luZG93U2l6ZSA9IG9wdGlvbnMud2luZG93U2l6ZTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIHR3byBkZWxheSBsaW5lcyB1cFxuXHQgICAgICAgIHRoaXMuX2RlbGF5QS5jb25uZWN0KHRoaXMuX2Nyb3NzRmFkZS5hKTtcblx0ICAgICAgICB0aGlzLl9kZWxheUIuY29ubmVjdCh0aGlzLl9jcm9zc0ZhZGUuYik7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kuZmFuKHRoaXMuX2xmb0EuZnJlcXVlbmN5LCB0aGlzLl9sZm9CLmZyZXF1ZW5jeSwgdGhpcy5fY3Jvc3NGYWRlTEZPLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9yb3V0ZSB0aGUgaW5wdXRcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuZmFuKHRoaXMuX2RlbGF5QSwgdGhpcy5fZGVsYXlCKTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGUuY2hhaW4odGhpcy5fZmVlZGJhY2tEZWxheSwgdGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIExGT3MgYXQgdGhlIHNhbWUgdGltZVxuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgIHRoaXMuX2xmb0Euc3RhcnQobm93KTtcblx0ICAgICAgICB0aGlzLl9sZm9CLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlTEZPLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVcblx0ICAgICAgICB0aGlzLndpbmRvd1NpemUgPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGl0Y2hTaGlmdCwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuUGl0Y2hTaGlmdC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGl0Y2gnOiAwLFxuXHQgICAgICAgICd3aW5kb3dTaXplJzogMC4xLFxuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLFxuXHQgICAgICAgICdmZWVkYmFjayc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXBpdGNoIHRoZSBpbmNvbWluZyBzaWduYWwgYnkgc29tZSBpbnRlcnZhbCAobWVhc3VyZWRcblx0XHQgKiBpbiBzZW1pLXRvbmVzKS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaXRjaFNoaWZ0I1xuXHRcdCAqIEB0eXBlIHtJbnRlcnZhbH1cblx0XHQgKiBAbmFtZSBwaXRjaFxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogcGl0Y2hTaGlmdC5waXRjaCA9IC0xMjsgLy9kb3duIG9uZSBvY3RhdmVcblx0XHQgKiBwaXRjaFNoaWZ0LnBpdGNoID0gNzsgLy91cCBhIGZpZnRoXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QaXRjaFNoaWZ0LnByb3RvdHlwZSwgJ3BpdGNoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGl0Y2g7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9waXRjaCA9IGludGVydmFsO1xuXHQgICAgICAgICAgICB2YXIgZmFjdG9yID0gMDtcblx0ICAgICAgICAgICAgaWYgKGludGVydmFsIDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQS5taW4gPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQS5tYXggPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQi5taW4gPSAwO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fbGZvQi5tYXggPSB0aGlzLl93aW5kb3dTaXplO1xuXHQgICAgICAgICAgICAgICAgZmFjdG9yID0gVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oaW50ZXJ2YWwgLSAxKSArIDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1pbiA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1heCA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1pbiA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1heCA9IDA7XG5cdCAgICAgICAgICAgICAgICBmYWN0b3IgPSBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhpbnRlcnZhbCkgLSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeS52YWx1ZSA9IGZhY3RvciAqICgxLjIgLyB0aGlzLl93aW5kb3dTaXplKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB3aW5kb3cgc2l6ZSBjb3JyZXNwb25kcyByb3VnaGx5IHRvIHRoZSBzYW1wbGUgbGVuZ3RoIGluIGEgbG9vcGluZyBzYW1wbGVyLlxuXHRcdCAqIFNtYWxsZXIgdmFsdWVzIGFyZSBkZXNpcmFibGUgZm9yIGEgbGVzcyBub3RpY2VhYmxlIGRlbGF5IHRpbWUgb2YgdGhlIHBpdGNoIHNoaWZ0ZWRcblx0XHQgKiBzaWduYWwsIGJ1dCBsYXJnZXIgdmFsdWVzIHdpbGwgcmVzdWx0IGluIHNtb290aGVyIHBpdGNoIHNoaWZ0aW5nIGZvciBsYXJnZXIgaW50ZXJ2YWxzLlxuXHRcdCAqIEEgbm9taW5hbCByYW5nZSBvZiAwLjAzIHRvIDAuMSBpcyByZWNvbW1lbmRlZC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaXRjaFNoaWZ0I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHdpbmRvd1NpemVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHBpdGNoU2hpZnQud2luZG93U2l6ZSA9IDAuMTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBpdGNoU2hpZnQucHJvdG90eXBlLCAnd2luZG93U2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3dpbmRvd1NpemUgPSB0aGlzLnRvU2Vjb25kcyhzaXplKTtcblx0ICAgICAgICAgICAgdGhpcy5waXRjaCA9IHRoaXMuX3BpdGNoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QaXRjaFNoaWZ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaXRjaFNoaWZ0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlBLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheUEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Qi5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlCID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9BLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9BID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9CLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9CID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlTEZPLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdkZWxheVRpbWUnKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0RlbGF5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGl0Y2hTaGlmdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIEJ1ZmZlclNvdXJjZU5vZGUuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtICB7QXVkaW9CdWZmZXJ8VG9uZS5CdWZmZXJ9ICBidWZmZXIgICBUaGUgYnVmZmVyIHRvIHBsYXlcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBvbmxvYWQgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYnVmZmVyJyxcblx0ICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICBdLCBUb25lLkJ1ZmZlclNvdXJjZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRoZVxuXHRcdFx0ICogIGJ1ZmZlciBzb3VyY2UgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdFx0ICogIEB0eXBlICB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBvcHRpb25zLm9uZW5kZWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpbWUgdGhhdCB0aGUgYnVmZmVyIHdhcyBzdGFydGVkLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBhZGRpdGlvbmFsIGZsYWcgaWYgdGhlIGFjdHVhbCBCdWZmZXJTb3VyY2VOb2RlXG5cdFx0XHQgKiAgaGFzIGJlZW4gc3RhcnRlZC4gYi9jIHN0b3BwaW5nIGFuIHVuc3RhcnRlZCBidWZmZXJcblx0XHRcdCAqICB3aWxsIHRocm93IGl0IGludG8gYW4gaW52YWxpZCBzdGF0ZVxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlU3RhcnRlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEZsYWcgaWYgdGhlIHNvdXJjZSBoYXMgYWxyZWFkeSBiZWVuIHN0b3BwZWRcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVN0b3BwZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGltZSB0aGF0IHRoZSBidWZmZXIgaXMgc2NoZWR1bGVkIHRvIHN0b3AuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gLTE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdhaW4gbm9kZSB3aGljaCBlbnZlbG9wZXMgdGhlIEJ1ZmZlclNvdXJjZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBidWZmZXIgc291cmNlXG5cdFx0XHQgKiAgQHR5cGUgIHtBdWRpb0J1ZmZlclNvdXJjZU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UuY29ubmVjdCh0aGlzLl9nYWluTm9kZSk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLm9uZW5kZWQgPSB0aGlzLl9vbmVuZGVkLmJpbmQodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcHJpdmF0ZSBidWZmZXIgaW5zdGFuY2Vcblx0XHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIob3B0aW9ucy5idWZmZXIsIG9wdGlvbnMub25sb2FkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGxheWJhY2tSYXRlIG9mIHRoZSBidWZmZXJcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9zb3VyY2UucGxheWJhY2tSYXRlLCBUb25lLlR5cGUuUG9zaXRpdmUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlSW4gdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlSW4gPSBvcHRpb25zLmZhZGVJbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZU91dCB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVPdXQgPSBvcHRpb25zLmZhZGVPdXQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY3VydmUgYXBwbGllZCB0byB0aGUgZmFkZXMsIGVpdGhlciBcImxpbmVhclwiIG9yIFwiZXhwb25lbnRpYWxcIlxuXHRcdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY3VydmUgPSBvcHRpb25zLmN1cnZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB0aGF0IHRoZSBidWZmZXIgcmFtcHMgdG9cblx0XHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IDE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgb25lbmRlZCB0aW1lb3V0XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uZW5kZWRUaW1lb3V0ID0gLTE7XG5cdCAgICAgICAgLy9zZXQgc29tZSB2YWx1ZXMgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5sb29wID0gb3B0aW9ucy5sb29wO1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gb3B0aW9ucy5sb29wU3RhcnQ7XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gb3B0aW9ucy5sb29wRW5kO1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlLnZhbHVlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CdWZmZXJTb3VyY2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29uZW5kZWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogMCxcblx0ICAgICAgICAnZmFkZUluJzogMCxcblx0ICAgICAgICAnZmFkZU91dCc6IDAsXG5cdCAgICAgICAgJ2N1cnZlJzogJ2xpbmVhcicsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBwbGF5YmFjayBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgVGhlIHRpbWUgdG8gdGVzdCB0aGUgc3RhdGUgYXRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuU3RhdGV9ICBUaGUgcGxheWJhY2sgc3RhdGUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLmdldFN0YXRlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEgJiYgdGltZSA+PSB0aGlzLl9zdGFydFRpbWUgJiYgIXRoaXMuX3NvdXJjZVN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RhcnRlZDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbc3RhcnRUaW1lPW5vd10gV2hlbiB0aGUgcGxheWVyIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW29mZnNldD0wXSBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBzYW1wbGUgc2hvdWxkIHBsYXkuIElmIG5vIGR1cmF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdpdmVuLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZ1bGwgbGVuZ3RoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzYW1wbGUgKG1pbnVzIGFueSBvZmZzZXQpXG5cdFx0ICogIEBwYXJhbSAge0dhaW59ICBbZ2Fpbj0xXSAgVGhlIGdhaW4gdG8gcGxheSB0aGUgYnVmZmVyIGJhY2sgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgZmFkZUluVGltZSAgVGhlIG9wdGlvbmFsIGZhZGVJbiByYW1wIHRpbWUuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlclNvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uLCBnYWluLCBmYWRlSW5UaW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkJ1ZmZlclNvdXJjZSBjYW4gb25seSBiZSBzdGFydGVkIG9uY2UuJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghdGhpcy5idWZmZXIubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJTb3VyY2U6IGJ1ZmZlciBpcyBlaXRoZXIgbm90IHNldCBvciBub3QgbG9hZGVkLicpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy9pZiBpdCdzIGEgbG9vcCB0aGUgZGVmYXVsdCBvZmZzZXQgaXMgdGhlIGxvb3BzdGFydCBwb2ludFxuXHQgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgdGhpcy5sb29wU3RhcnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IG9mZnNldCBpcyAwXG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgIGdhaW4gPSBUb25lLmRlZmF1bHRBcmcoZ2FpbiwgMSk7XG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IGdhaW47XG5cdCAgICAgICAgZmFkZUluVGltZSA9IHRoaXMudG9TZWNvbmRzKFRvbmUuZGVmYXVsdEFyZyhmYWRlSW5UaW1lLCB0aGlzLmZhZGVJbikpO1xuXHQgICAgICAgIHRoaXMuZmFkZUluID0gZmFkZUluVGltZTtcblx0ICAgICAgICBpZiAoZmFkZUluVGltZSA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuY3VydmUgPT09ICdsaW5lYXInKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMuX2dhaW4sIHRpbWUgKyBmYWRlSW5UaW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKHRoaXMuX2dhaW4sIHRpbWUsIGZhZGVJblRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZShnYWluLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gdGltZTtcblx0ICAgICAgICB2YXIgY29tcHV0ZWREdXIgPSB0aGlzLnRvU2Vjb25kcyhUb25lLmRlZmF1bHRBcmcoZHVyYXRpb24sIHRoaXMuYnVmZmVyLmR1cmF0aW9uIC0gb2Zmc2V0ICUgdGhpcy5idWZmZXIuZHVyYXRpb24pKTtcblx0ICAgICAgICBjb21wdXRlZER1ciA9IE1hdGgubWF4KGNvbXB1dGVkRHVyLCAwKTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoZHVyYXRpb24pKSB7XG5cdCAgICAgICAgICAgIC8vY2xpcCB0aGUgZHVyYXRpb24gd2hlbiBub3QgbG9vcGluZ1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAgICAgY29tcHV0ZWREdXIgPSBNYXRoLm1pbihjb21wdXRlZER1ciwgdGhpcy5idWZmZXIuZHVyYXRpb24gLSBvZmZzZXQgJSB0aGlzLmJ1ZmZlci5kdXJhdGlvbik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHRpbWUgKyBjb21wdXRlZER1ciwgdGhpcy5mYWRlT3V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zdGFydCB0aGUgYnVmZmVyIHNvdXJjZVxuXHQgICAgICAgIGlmICh0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgLy9tb2RpZnkgdGhlIG9mZnNldCBpZiBpdCdzIGdyZWF0ZXIgdGhhbiB0aGUgbG9vcCB0aW1lXG5cdCAgICAgICAgICAgIHZhciBsb29wRW5kID0gdGhpcy5sb29wRW5kIHx8IHRoaXMuYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgICAgICB2YXIgbG9vcFN0YXJ0ID0gdGhpcy5sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIHZhciBsb29wRHVyYXRpb24gPSBsb29wRW5kIC0gbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAvL21vdmUgdGhlIG9mZnNldCBiYWNrXG5cdCAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gbG9vcEVuZCkge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gKG9mZnNldCAtIGxvb3BTdGFydCkgJSBsb29wRHVyYXRpb24gKyBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLmdldCgpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wRW5kID0gdGhpcy5sb29wRW5kIHx8IHRoaXMuYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgIGlmIChvZmZzZXQgPCB0aGlzLmJ1ZmZlci5kdXJhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLnN0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBidWZmZXIuIE9wdGlvbmFsbHkgYWRkIGEgcmFtcCB0aW1lIHRvIGZhZGUgdGhlXG5cdFx0ICogIGJ1ZmZlciBvdXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgdGltZSAgICAgICAgIFRoZSB0aW1lIHRoZSBidWZmZXIgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgZmFkZU91dFRpbWUgIEhvdyBsb25nIHRoZSBnYWluIHNob3VsZCBmYWRlIG91dCBmb3Jcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSwgZmFkZU91dFRpbWUpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuYnVmZmVyLmxvYWRlZCkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyU291cmNlOiBidWZmZXIgaXMgZWl0aGVyIG5vdCBzZXQgb3Igbm90IGxvYWRlZC4nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy9pZiB0aGUgZXZlbnQgaGFzIGFscmVhZHkgYmVlbiBzY2hlZHVsZWQsIGNsZWFyIGl0XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0b3BUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aGlzLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9zdG9wIGlmIGl0J3Mgc2NoZWR1bGUgYmVmb3JlIHRoZSBzdGFydCB0aW1lXG5cdCAgICAgICAgaWYgKHRpbWUgPD0gdGhpcy5fc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnZhbHVlID0gMDtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSBNYXRoLm1heCh0aGlzLl9zdGFydFRpbWUgKyB0aGlzLmZhZGVJbiArIHRoaXMuc2FtcGxlVGltZSwgdGltZSk7XG5cdCAgICAgICAgLy9jYW5jZWwgdGhlIHByZXZpb3VzIGN1cnZlXG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSB0aW1lO1xuXHQgICAgICAgIC8vdGhlIGZhZGVPdXQgdGltZVxuXHQgICAgICAgIGZhZGVPdXRUaW1lID0gdGhpcy50b1NlY29uZHMoVG9uZS5kZWZhdWx0QXJnKGZhZGVPdXRUaW1lLCB0aGlzLmZhZGVPdXQpKTtcblx0ICAgICAgICB2YXIgaGVsZER1cmF0aW9uID0gdGltZSAtIHRoaXMuX3N0YXJ0VGltZSAtIHRoaXMuZmFkZUluIC0gdGhpcy5zYW1wbGVUaW1lO1xuXHQgICAgICAgIGlmICghdGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgIC8vbWFrZSBzdXJlIHRoZSBmYWRlIGRvZXMgbm90IGdvIGJleW9uZCB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXJcblx0ICAgICAgICAgICAgaGVsZER1cmF0aW9uID0gTWF0aC5taW4oaGVsZER1cmF0aW9uLCB0aGlzLmJ1ZmZlci5kdXJhdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZhZGVPdXRUaW1lID0gTWF0aC5taW4oaGVsZER1cmF0aW9uLCBmYWRlT3V0VGltZSk7XG5cdCAgICAgICAgdmFyIHN0YXJ0RmFkZSA9IHRpbWUgLSBmYWRlT3V0VGltZTtcblx0ICAgICAgICBpZiAoZmFkZU91dFRpbWUgPiB0aGlzLnNhbXBsZVRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSh0aGlzLl9nYWluLCBzdGFydEZhZGUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5jdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSgwLCBzdGFydEZhZGUsIGZhZGVPdXRUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fb25lbmRlZFRpbWVvdXQpO1xuXHQgICAgICAgIHRoaXMuX29uZW5kZWRUaW1lb3V0ID0gVG9uZS5jb250ZXh0LnNldFRpbWVvdXQodGhpcy5fb25lbmRlZC5iaW5kKHRoaXMpLCB0aGlzLl9zdG9wVGltZSAtIHRoaXMubm93KCkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYSBzY2hlZHVsZWQgc3RvcCBldmVudFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuY2FuY2VsU3RvcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSAmJiAhdGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCB0aGUgc3RvcCBlbnZlbG9wZVxuXHQgICAgICAgICAgICB2YXIgZmFkZUluVGltZSA9IHRoaXMudG9TZWNvbmRzKHRoaXMuZmFkZUluKTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGhpcy5fc3RhcnRUaW1lICsgZmFkZUluVGltZSArIHRoaXMuc2FtcGxlVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgTWF0aC5tYXgodGhpcy5ub3coKSwgdGhpcy5fc3RhcnRUaW1lICsgZmFkZUluVGltZSArIHRoaXMuc2FtcGxlVGltZSkpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJUaW1lb3V0KHRoaXMuX29uZW5kZWRUaW1lb3V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGNhbGxiYWNrIHdoZW4gdGhlIGJ1ZmZlciBpcyBlbmRlZC5cblx0XHQgKiAgSW52b2tlcyBgb25lbmRlZGAgYW5kIGRpc3Bvc2VzIHRoZSBub2RlLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLl9vbmVuZGVkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdG9wcGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgLy9hbGxvdyBhZGRpdGlvbmFsIHRpbWUgZm9yIHRoZSBleHBvbmVudGlhbCBjdXJ2ZSB0byBmdWxseSBkZWNheVxuXHQgICAgICAgICAgICB2YXIgYWRkaXRpb25hbFRhaWwgPSB0aGlzLmN1cnZlID09PSAnZXhwb25lbnRpYWwnID8gdGhpcy5mYWRlT3V0ICogMiA6IDA7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VTdGFydGVkICYmIHRoaXMuX3N0b3BUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlLnN0b3AodGhpcy5fc3RvcFRpbWUgKyBhZGRpdGlvbmFsVGFpbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5vbmVuZGVkKHRoaXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgc3RhcnQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLmxvb3BTdGFydDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UubG9vcFN0YXJ0ID0gdGhpcy50b1NlY29uZHMobG9vcFN0YXJ0KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBlbmQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UubG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLmxvb3BFbmQgPSB0aGlzLnRvU2Vjb25kcyhsb29wRW5kKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhdWRpbyBidWZmZXIgYmVsb25naW5nIHRvIHRoZSBwbGF5ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHQgKiBAbmFtZSBidWZmZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdidWZmZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChidWZmZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlciBzaG91bGQgbG9vcCBvbmNlIGl0J3Mgb3Zlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9vcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UubG9vcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3ApIHtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlLmxvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB0aGlzLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5vbmVuZGVkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gLTE7XG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fb25lbmRlZFRpbWVvdXQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkJ1ZmZlclNvdXJjZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk5vaXNlIGlzIGEgbm9pc2UgZ2VuZXJhdG9yLiBJdCB1c2VzIGxvb3BlZCBub2lzZSBidWZmZXJzIHRvIHNhdmUgb24gcGVyZm9ybWFuY2UuXG5cdFx0ICogICAgICAgICAgVG9uZS5Ob2lzZSBzdXBwb3J0cyB0aGUgbm9pc2UgdHlwZXM6IFwicGlua1wiLCBcIndoaXRlXCIsIGFuZCBcImJyb3duXCIuIFJlYWQgbW9yZSBhYm91dFxuXHRcdCAqICAgICAgICAgIGNvbG9ycyBvZiBub2lzZSBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db2xvcnNfb2Zfbm9pc2UpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfSB0eXBlIHRoZSBub2lzZSB0eXBlICh3aGl0ZXxwaW5rfGJyb3duKVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaW5pdGlhbGl6ZSB0aGUgbm9pc2UgYW5kIHN0YXJ0XG5cdFx0ICogdmFyIG5vaXNlID0gbmV3IFRvbmUuTm9pc2UoXCJwaW5rXCIpLnN0YXJ0KCk7XG5cdFx0ICpcblx0XHQgKiAvL21ha2UgYW4gYXV0b2ZpbHRlciB0byBzaGFwZSB0aGUgbm9pc2Vcblx0XHQgKiB2YXIgYXV0b0ZpbHRlciA9IG5ldyBUb25lLkF1dG9GaWx0ZXIoe1xuXHRcdCAqIFx0XCJmcmVxdWVuY3lcIiA6IFwiOG1cIixcblx0XHQgKiBcdFwibWluXCIgOiA4MDAsXG5cdFx0ICogXHRcIm1heFwiIDogMTUwMDBcblx0XHQgKiB9KS5jb25uZWN0KFRvbmUuTWFzdGVyKTtcblx0XHQgKlxuXHRcdCAqIC8vY29ubmVjdCB0aGUgbm9pc2Vcblx0XHQgKiBub2lzZS5jb25uZWN0KGF1dG9GaWx0ZXIpO1xuXHRcdCAqIC8vc3RhcnQgdGhlIGF1dG9maWx0ZXIgTEZPXG5cdFx0ICogYXV0b0ZpbHRlci5zdGFydCgpXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndHlwZSddLCBUb25lLk5vaXNlKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyU291cmNlTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGJ1ZmZlclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvQnVmZmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbm9pc2UuIEFmZmVjdHNcblx0XHRcdCAqICB0aGUgXCJmcmVxdWVuY3lcIiBvZiB0aGUgbm9pc2UuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTm9pc2UsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICpcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiAnd2hpdGUnLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG5vaXNlLiBDYW4gYmUgXCJ3aGl0ZVwiLCBcImJyb3duXCIsIG9yIFwicGlua1wiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk5vaXNlI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogbm9pc2UudHlwZSA9IFwid2hpdGVcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vaXNlLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSAhPT0gdHlwZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHR5cGUgaW4gX25vaXNlQnVmZmVycykge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vaWYgaXQncyBwbGF5aW5nLCBzdG9wIGFuZCByZXN0YXJ0IGl0XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcChub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydChub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5Ob2lzZTogaW52YWxpZCB0eXBlOiAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbm9pc2UuIEFmZmVjdHNcblx0XHQgKiAgdGhlIFwiZnJlcXVlbmN5XCIgb2YgdGhlIG5vaXNlLlxuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBzaWduYWxcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vaXNlLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBpbnRlcm5hbCBzdGFydCBtZXRob2Rcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGJ1ZmZlciA9IF9ub2lzZUJ1ZmZlcnNbdGhpcy5fdHlwZV07XG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKGJ1ZmZlcikuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmxvb3AgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5wbGF5YmFja1JhdGUudmFsdWUgPSB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLnN0YXJ0KHRoaXMudG9TZWNvbmRzKHRpbWUpLCBNYXRoLnJhbmRvbSgpICogKGJ1ZmZlci5kdXJhdGlvbiAtIDAuMDAxKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGludGVybmFsIHN0b3AgbWV0aG9kXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2Uuc3RvcCh0aGlzLnRvU2Vjb25kcyh0aW1lKSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlc3RhcnRzIHRoZSBub2lzZS5cblx0XHQgKiBAcGFyYW0gIHtbdHlwZV19IHRpbWUgW2Rlc2NyaXB0aW9uXVxuXHRcdCAqIEByZXR1cm4ge1t0eXBlXX0gICAgICBbZGVzY3JpcHRpb25dXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL1RPRE8gY291bGQgYmUgb3B0aW1pemVkIGJ5IGNhbmNlbGxpbmcgdGhlIGJ1ZmZlciBzb3VyY2UgJ3N0b3AnXG5cdCAgICAgICAgLy9zdG9wIGFuZCByZXN0YXJ0XG5cdCAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gVEhFIEJVRkZFUlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9Ob2lzZSBidWZmZXIgc3RhdHNcblx0ICAgIHZhciBidWZmZXJMZW5ndGggPSA0NDEwMCAqIDU7XG5cdCAgICB2YXIgY2hhbm5lbHMgPSAyO1xuXHQgICAgLyoqXG5cdFx0ICpcdFRoZSBub2lzZSBhcnJheXMuIEdlbmVyYXRlZCBvbiBpbml0aWFsaXphdGlvbi5cblx0XHQgKiAgYm9ycm93ZWQgaGVhdmlseSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS96YWNoYXJ5ZGVudG9uL25vaXNlLmpzXG5cdFx0ICogIChjKSAyMDEzIFphY2ggRGVudG9uIChNSVQpXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIF9ub2lzZUFycmF5cyA9IHtcblx0ICAgICAgICAncGluayc6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsTnVtID0gMDsgY2hhbm5lbE51bSA8IGNoYW5uZWxzOyBjaGFubmVsTnVtKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJMZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyW2NoYW5uZWxOdW1dID0gY2hhbm5lbDtcblx0ICAgICAgICAgICAgICAgIHZhciBiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNjtcblx0ICAgICAgICAgICAgICAgIGIwID0gYjEgPSBiMiA9IGIzID0gYjQgPSBiNSA9IGI2ID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgd2hpdGUgPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7XG5cdCAgICAgICAgICAgICAgICAgICAgYjAgPSAwLjk5ODg2ICogYjAgKyB3aGl0ZSAqIDAuMDU1NTE3OTtcblx0ICAgICAgICAgICAgICAgICAgICBiMSA9IDAuOTkzMzIgKiBiMSArIHdoaXRlICogMC4wNzUwNzU5O1xuXHQgICAgICAgICAgICAgICAgICAgIGIyID0gMC45NjkgKiBiMiArIHdoaXRlICogMC4xNTM4NTI7XG5cdCAgICAgICAgICAgICAgICAgICAgYjMgPSAwLjg2NjUgKiBiMyArIHdoaXRlICogMC4zMTA0ODU2O1xuXHQgICAgICAgICAgICAgICAgICAgIGI0ID0gMC41NSAqIGI0ICsgd2hpdGUgKiAwLjUzMjk1MjI7XG5cdCAgICAgICAgICAgICAgICAgICAgYjUgPSAtMC43NjE2ICogYjUgLSB3aGl0ZSAqIDAuMDE2ODk4O1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gPSBiMCArIGIxICsgYjIgKyBiMyArIGI0ICsgYjUgKyBiNiArIHdoaXRlICogMC41MzYyO1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gKj0gMC4xMTtcblx0ICAgICAgICAgICAgICAgICAgICAvLyAocm91Z2hseSkgY29tcGVuc2F0ZSBmb3IgZ2FpblxuXHQgICAgICAgICAgICAgICAgICAgIGI2ID0gd2hpdGUgKiAwLjExNTkyNjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuXHQgICAgICAgIH0oKSxcblx0ICAgICAgICAnYnJvd24nOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgY2hhbm5lbE51bSA9IDA7IGNoYW5uZWxOdW0gPCBjaGFubmVsczsgY2hhbm5lbE51bSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyTGVuZ3RoKTtcblx0ICAgICAgICAgICAgICAgIGJ1ZmZlcltjaGFubmVsTnVtXSA9IGNoYW5uZWw7XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFzdE91dCA9IDA7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHdoaXRlID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxO1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gPSAobGFzdE91dCArIDAuMDIgKiB3aGl0ZSkgLyAxLjAyO1xuXHQgICAgICAgICAgICAgICAgICAgIGxhc3RPdXQgPSBjaGFubmVsW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gKj0gMy41OyAgICAvLyAocm91Z2hseSkgY29tcGVuc2F0ZSBmb3IgZ2FpblxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSgpLFxuXHQgICAgICAgICd3aGl0ZSc6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsTnVtID0gMDsgY2hhbm5lbE51bSA8IGNoYW5uZWxzOyBjaGFubmVsTnVtKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJMZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyW2NoYW5uZWxOdW1dID0gY2hhbm5lbDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBjaGFubmVsW2ldID0gTWF0aC5yYW5kb20oKSAqIDIgLSAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSgpXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICpcdHN0YXRpYyBub2lzZSBidWZmZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdCAqL1xuXHQgICAgdmFyIF9ub2lzZUJ1ZmZlcnMgPSB7fTtcblx0ICAgIC8vY3JlYXRlIHRoZSBUb25lLkJ1ZmZlcnNcblx0ICAgIGZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlcnMoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgdHlwZSBpbiBfbm9pc2VBcnJheXMpIHtcblx0ICAgICAgICAgICAgX25vaXNlQnVmZmVyc1t0eXBlXSA9IG5ldyBUb25lLkJ1ZmZlcigpLmZyb21BcnJheShfbm9pc2VBcnJheXNbdHlwZV0pO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0ICAgIC8vY3JlYXRlIHRoZSBub2lzZSBidWZmZXJzXG5cdCAgICBUb25lLmdldENvbnRleHQoY3JlYXRlQnVmZmVycyk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBjcmVhdGVCdWZmZXJzKTtcblx0ICAgIHJldHVybiBUb25lLk5vaXNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU2ltcGxlIGNvbnZvbHV0aW9uIGNyZWF0ZWQgd2l0aCBkZWNheWluZyBub2lzZS5cblx0XHQgKiAgXHRcdEdlbmVyYXRlcyBhbiBJbXB1bHNlIFJlc3BvbnNlIEJ1ZmZlclxuXHRcdCAqIFx0XHRcdHdpdGggVG9uZS5PZmZsaW5lIHRoZW4gZmVlZHMgdGhlIElSIGludG8gQ29udm9sdmVyTm9kZS5cblx0XHQgKiBcdFx0XHROb3RlOiB0aGUgUmV2ZXJiIHdpbGwgbm90IG1ha2UgYW55IHNvdW5kIHVudGlsIFtnZW5lcmF0ZV0oI2dlbmVyYXRlKVxuXHRcdCAqIFx0XHRcdGhhcyBiZWVuIGludm9rZWQgYW5kIHJlc29sdmVkLlxuXHRcdCAqXG5cdFx0ICogXHRcdFx0SW5zcGlyYXRpb24gZnJvbSBbUmV2ZXJiR2VuXShodHRwczovL2dpdGh1Yi5jb20vYWRlbGVzcGluYXNzZS9yZXZlcmJHZW4pLlxuXHRcdCAqIFx0XHRcdENvcHlyaWdodCAoYykgMjAxNCBBbGFuIGRlTGVzcGluYXNzZSBBcGFjaGUgMi4wIExpY2Vuc2UuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQ29udm9sdmVyfVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBkZWNheSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCByZXZlcmJlcmF0ZSBmb3IuXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2RlY2F5J10sIFRvbmUuUmV2ZXJiKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENvbnZvbHZlciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0NvbnZvbHZlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVDb252b2x2ZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgcmV2ZXJiXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVjYXkgPSBvcHRpb25zLmRlY2F5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtb3VudCBvZiB0aW1lIGJlZm9yZSB0aGUgcmV2ZXJiIGlzIGZ1bGx5XG5cdFx0XHQgKiByYW1wZWQgaW4uXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucHJlRGVsYXkgPSBvcHRpb25zLnByZURlbGF5O1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9jb252b2x2ZXIpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUmV2ZXJiLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuUmV2ZXJiLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWNheSc6IDEuNSxcblx0ICAgICAgICAncHJlRGVsYXknOiAwLjAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2VuZXJhdGUgdGhlIEltcHVsc2UgUmVzcG9uc2UuIFJldHVybnMgYSBwcm9taXNlIHdoaWxlIHRoZSBJUiBpcyBiZWluZ1xuXHRcdCAqIGdlbmVyYXRlZC5cblx0XHQgKiBAcmV0dXJuIHtQcm9taXNlPFRvbmUuUmV2ZXJiPn0gUHJvbWlzZSB3aGljaCByZXR1cm5zIHRoaXMgb2JqZWN0LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLk9mZmxpbmUoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvL2NyZWF0ZSBhIG5vaXNlIGJ1cnN0IHdoaWNoIGRlY2F5cyBvdmVyIHRoZSBkdXJhdGlvblxuXHQgICAgICAgICAgICB2YXIgbm9pc2VMID0gbmV3IFRvbmUuTm9pc2UoKTtcblx0ICAgICAgICAgICAgdmFyIG5vaXNlUiA9IG5ldyBUb25lLk5vaXNlKCk7XG5cdCAgICAgICAgICAgIHZhciBtZXJnZSA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgICAgIG5vaXNlTC5jb25uZWN0KG1lcmdlLmxlZnQpO1xuXHQgICAgICAgICAgICBub2lzZVIuY29ubmVjdChtZXJnZS5yaWdodCk7XG5cdCAgICAgICAgICAgIHZhciBnYWluTm9kZSA9IG5ldyBUb25lLkdhaW4oKS50b01hc3RlcigpO1xuXHQgICAgICAgICAgICBtZXJnZS5jb25uZWN0KGdhaW5Ob2RlKTtcblx0ICAgICAgICAgICAgbm9pc2VMLnN0YXJ0KDApO1xuXHQgICAgICAgICAgICBub2lzZVIuc3RhcnQoMCk7XG5cdCAgICAgICAgICAgIC8vc2hvcnQgZmFkZSBpblxuXHQgICAgICAgICAgICBnYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIDApO1xuXHQgICAgICAgICAgICBnYWluTm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKDEsIHRoaXMucHJlRGVsYXkpO1xuXHQgICAgICAgICAgICAvL2RlY2F5XG5cdCAgICAgICAgICAgIGdhaW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKDAsIHRoaXMucHJlRGVsYXksIHRoaXMuZGVjYXkgLSB0aGlzLnByZURlbGF5KTtcblx0ICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMuZGVjYXkpLnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9jb252b2x2ZXIuYnVmZmVyID0gYnVmZmVyLmdldCgpO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUmV2ZXJifSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb252b2x2ZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUmV2ZXJiO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQmFzZSBjbGFzcyBmb3Igc3RlcmVvIGZlZWRiYWNrIGVmZmVjdHMgd2hlcmUgdGhlIGVmZmVjdFJldHVyblxuXHRcdCAqICAgICAgICAgaXMgZmVkIGJhY2sgaW50byB0aGUgc2FtZSBjaGFubmVsLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZmVlZGJhY2snXSwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb250cm9scyB0aGUgYW1vdW50IG9mIGZlZWRiYWNrXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mZWVkYmFjaywgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGVmdCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0wgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHJpZ2h0IHNpZGUgZmVlYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgaXQgdXBcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwuY2hhaW4odGhpcy5fZmVlZGJhY2tMLCB0aGlzLmVmZmVjdFNlbmRMKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIuY2hhaW4odGhpcy5fZmVlZGJhY2tSLCB0aGlzLmVmZmVjdFNlbmRSKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmZhbih0aGlzLl9mZWVkYmFja0wuZ2FpbiwgdGhpcy5fZmVlZGJhY2tSLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZmVlZGJhY2snXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9GZWVkYmFja0VmZmVjdCwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydmZWVkYmFjayddKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1IgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQXBwbGllcyBhIHdpZHRoIGZhY3RvciB0byB0aGUgbWlkL3NpZGUgc2VwZXJhdGlvbi5cblx0XHQgKiAgICAgICAgIDAgaXMgYWxsIG1pZCBhbmQgMSBpcyBhbGwgc2lkZS5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmb3VuZCBpbiBba3ZyYXVkaW8gZm9ydW1zXShodHRwOi8vd3d3Lmt2cmF1ZGlvLmNvbS9mb3J1bS92aWV3dG9waWMucGhwP3Q9MjEyNTg3KS5cblx0XHQgKiAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICA8Y29kZT5cblx0XHQgKiAgICAgICAgIE1pZCAqPSAyKigxLXdpZHRoKTxicj5cblx0XHQgKiAgICAgICAgIFNpZGUgKj0gMip3aWR0aFxuXHRcdCAqICAgICAgICAgPC9jb2RlPlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1pZFNpZGVFZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3dpZHRoXSBUaGUgc3RlcmVvIHdpZHRoLiBBIHdpZHRoIG9mIDAgaXMgbW9ubyBhbmQgMSBpcyBzdGVyZW8uIDAuNSBpcyBubyBjaGFuZ2UuXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1dpZGVuZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd3aWR0aCddLCBUb25lLlN0ZXJlb1dpZGVuZXIpO1xuXHQgICAgICAgIFRvbmUuTWlkU2lkZUVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3aWR0aCBjb250cm9sLiAwID0gMTAwJSBtaWQuIDEgPSAxMDAlIHNpZGUuIDAuNSA9IG5vIGNoYW5nZS5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy53aWR0aCA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLndpZHRoLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnd2lkdGgnXSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUd28gdGltZXMgdGhlICgxLXdpZHRoKSBmb3IgdGhlIG1pZCBjaGFubmVsXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoTWlkID0gbmV3IFRvbmUuTXVsdGlwbHkoMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUd28gdGltZXMgdGhlIHdpZHRoIGZvciB0aGUgc2lkZSBjaGFubmVsXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoU2lkZSA9IG5ldyBUb25lLk11bHRpcGx5KDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE1pZCBtdWx0aXBsaWVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZE11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQuY29ubmVjdCh0aGlzLl9taWRNdWx0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLm1pZFNlbmQuY2hhaW4odGhpcy5fbWlkTXVsdCwgdGhpcy5taWRSZXR1cm4pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogMSAtIHdpZHRoXG5cdFx0XHQgKiBAdHlwZSB7VG9uZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uZU1pbnVzV2lkdGggPSBuZXcgVG9uZS5TdWJ0cmFjdCgpO1xuXHQgICAgICAgIHRoaXMuX29uZU1pbnVzV2lkdGguY29ubmVjdCh0aGlzLl90d29UaW1lc1dpZHRoTWlkKTtcblx0ICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29uc3RhbnQoMSkuY29ubmVjdCh0aGlzLl9vbmVNaW51c1dpZHRoLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmNvbm5lY3QodGhpcy5fb25lTWludXNXaWR0aCwgMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2lkZSBtdWx0aXBsaWVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NpZGVNdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmNvbm5lY3QodGhpcy5fdHdvVGltZXNXaWR0aFNpZGUpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlLmNvbm5lY3QodGhpcy5fc2lkZU11bHQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuc2lkZVNlbmQuY2hhaW4odGhpcy5fc2lkZU11bHQsIHRoaXMuc2lkZVJldHVybik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9XaWRlbmVyLCBUb25lLk1pZFNpZGVFZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1dpZGVuZXIuZGVmYXVsdHMgPSB7ICd3aWR0aCc6IDAuNSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9XaWRlbmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1dpZGVuZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5NaWRTaWRlRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd3aWR0aCddKTtcblx0ICAgICAgICB0aGlzLndpZHRoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLndpZHRoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRNdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRNdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zaWRlTXVsdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2lkZU11bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90d29UaW1lc1dpZHRoU2lkZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvV2lkZW5lcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVHJlbW9sbyBtb2R1bGF0ZXMgdGhlIGFtcGxpdHVkZSBvZiBhbiBpbmNvbWluZyBzaWduYWwgdXNpbmcgYSBUb25lLkxGTy5cblx0XHQgKiAgICAgICAgIFRoZSB0eXBlLCBmcmVxdWVuY3ksIGFuZCBkZXB0aCBvZiB0aGUgTEZPIGlzIGNvbnRyb2xsYWJsZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gW2ZyZXF1ZW5jeV0gVGhlIHJhdGUgb2YgdGhlIGVmZmVjdC5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW2RlcHRoXSBUaGUgZGVwdGggb2YgdGhlIGVmZmVjdC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhIHRyZW1vbG8gYW5kIHN0YXJ0IGl0J3MgTEZPXG5cdFx0ICogdmFyIHRyZW1vbG8gPSBuZXcgVG9uZS5UcmVtb2xvKDksIDAuNzUpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKiAvL3JvdXRlIGFuIG9zY2lsbGF0b3IgdGhyb3VnaCB0aGUgdHJlbW9sbyBhbmQgc3RhcnQgaXRcblx0XHQgKiB2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS5jb25uZWN0KHRyZW1vbG8pLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuVHJlbW9sbyk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHJlbWVsbyBMRk8gaW4gdGhlIGxlZnQgY2hhbm5lbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAncGhhc2UnOiBvcHRpb25zLnNwcmVhZCxcblx0ICAgICAgICAgICAgJ21pbic6IDEsXG5cdCAgICAgICAgICAgICdtYXgnOiAwXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRyZW1lbG8gTEZPIGluIHRoZSBsZWZ0IGNoYW5uZWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9SID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ3BoYXNlJzogb3B0aW9ucy5zcHJlYWQsXG5cdCAgICAgICAgICAgICdtaW4nOiAxLFxuXHQgICAgICAgICAgICAnbWF4JzogMFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZXJlIHRoZSBnYWluIGlzIG11bHRpcGxpZWRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlTCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVyZSB0aGUgZ2FpbiBpcyBtdWx0aXBsaWVkXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVkZVIgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgdHJlbW9sby5cblx0XHRcdCAqICBAdHlwZSAge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlcHRoIG9mIHRoZSBlZmZlY3QuIEEgZGVwdGggb2YgMCwgaGFzIG5vIGVmZmVjdFxuXHRcdFx0ICogIG9uIHRoZSBhbXBsaXR1ZGUsIGFuZCBhIGRlcHRoIG9mIDEgbWFrZXMgdGhlIGFtcGxpdHVkZVxuXHRcdFx0ICogIG1vZHVsYXRlIGZ1bGx5IGJldHdlZW4gMCBhbmQgMS5cblx0XHRcdCAqICBAdHlwZSAge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXB0aCwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbih0aGlzLl9hbXBsaXR1ZGVMLCB0aGlzLmVmZmVjdFJldHVybkwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIuY2hhaW4odGhpcy5fYW1wbGl0dWRlUiwgdGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICB0aGlzLl9sZm9MLmNvbm5lY3QodGhpcy5fYW1wbGl0dWRlTC5nYWluKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLmNvbm5lY3QodGhpcy5fYW1wbGl0dWRlUi5nYWluKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5mYW4odGhpcy5fbGZvTC5mcmVxdWVuY3ksIHRoaXMuX2xmb1IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmRlcHRoLmZhbih0aGlzLl9sZm9SLmFtcGxpdHVkZSwgdGhpcy5fbGZvTC5hbXBsaXR1ZGUpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLnNwcmVhZCA9IG9wdGlvbnMuc3ByZWFkO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJlbW9sbywgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDEwLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdkZXB0aCc6IDAuNSxcblx0ICAgICAgICAnc3ByZWFkJzogMTgwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RhcnQgdGhlIHRyZW1vbG8uXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHRyZW1vbG8gYmVnaW5zLlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIHRoZSB0cmVtb2xvLlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSB0cmVtb2xvIHN0b3BzLlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBlZmZlY3QgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFtkZWxheT0wXSBEZWxheSB0aW1lIGJlZm9yZSBzdGFydGluZyB0aGUgZWZmZWN0IGFmdGVyIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwb3J0IGhhcyBzdGFydGVkLlxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uIChkZWxheSkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wuc3luYyhkZWxheSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zeW5jKGRlbGF5KTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIGZpbHRlciBmcm9tIHRoZSB0cmFuc3BvcnRcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5UcmVtb2xvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9sZm9MLnVuc3luYygpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IudW5zeW5jKCk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQudW5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgVHJlbW9sbydzIG9zY2lsbGF0b3IgdHlwZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmVtb2xvI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJlbW9sby5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvTC50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQW1vdW50IG9mIHN0ZXJlbyBzcHJlYWQuIFdoZW4gc2V0IHRvIDAsIGJvdGggTEZPJ3Mgd2lsbCBiZSBwYW5uZWQgY2VudHJhbGx5LlxuXHRcdCAqIFdoZW4gc2V0IHRvIDE4MCwgTEZPJ3Mgd2lsbCBiZSBwYW5uZWQgaGFyZCBsZWZ0IGFuZCByaWdodCByZXNwZWN0aXZlbHkuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVHJlbW9sbyNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyZW1vbG8ucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvUi5waGFzZSAtIHRoaXMuX2xmb0wucGhhc2U7ICAgIC8vMTgwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5waGFzZSA9IDkwIC0gc3ByZWFkIC8gMjtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi5waGFzZSA9IHNwcmVhZCAvIDIgKyA5MDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmVtb2xvfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyZW1vbG8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyZW1vbG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIFZpYnJhdG8gZWZmZWN0IGNvbXBvc2VkIG9mIGEgVG9uZS5EZWxheSBhbmQgYSBUb25lLkxGTy4gVGhlIExGT1xuXHRcdCAqICAgICAgICAgbW9kdWxhdGVzIHRoZSBkZWxheVRpbWUgb2YgdGhlIGRlbGF5LCBjYXVzaW5nIHRoZSBwaXRjaCB0byByaXNlXG5cdFx0ICogICAgICAgICBhbmQgZmFsbC4gXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgZnJlcXVlbmN5IG9mIHRoZSB2aWJyYXRvLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBkZXB0aCBUaGUgYW1vdW50IHRoZSBwaXRjaCBpcyBtb2R1bGF0ZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlZpYnJhdG8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuVmlicmF0byk7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVsYXkgbm9kZSB1c2VkIGZvciB0aGUgdmlicmF0byBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIExGTyB1c2VkIHRvIGNvbnRyb2wgdGhlIHZpYnJhdG9cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICd0eXBlJzogb3B0aW9ucy50eXBlLFxuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IG9wdGlvbnMubWF4RGVsYXksXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogLTkwICAgIC8vb2Zmc2UgdGhlIHBoYXNlIHNvIHRoZSByZXN0aW5nIHBvc2l0aW9uIGlzIGluIHRoZSBjZW50ZXJcblx0ICAgICAgICB9KS5zdGFydCgpLmNvbm5lY3QodGhpcy5fZGVsYXlOb2RlLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgdmlicmF0b1xuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXB0aCBvZiB0aGUgdmlicmF0by4gXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9sZm8uYW1wbGl0dWRlO1xuXHQgICAgICAgIHRoaXMuZGVwdGgudmFsdWUgPSBvcHRpb25zLmRlcHRoO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4odGhpcy5fZGVsYXlOb2RlLCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5WaWJyYXRvLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuVmlicmF0by5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbWF4RGVsYXknOiAwLjAwNSxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNSxcblx0ICAgICAgICAnZGVwdGgnOiAwLjEsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUeXBlIG9mIG9zY2lsbGF0b3IgYXR0YWNoZWQgdG8gdGhlIFZpYnJhdG8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuVmlicmF0byNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlZpYnJhdG8ucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmby50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8udHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlZpYnJhdG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVmlicmF0by5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5WaWJyYXRvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRXZlbnQgYWJzdHJhY3RzIGF3YXkgVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUgYW5kIHByb3ZpZGVzIGEgc2NoZWR1bGFibGVcblx0XHQgKiAgICAgICAgICBjYWxsYmFjayBmb3IgYSBzaW5nbGUgb3IgcmVwZWF0YWJsZSBldmVudHMgYWxvbmcgdGhlIHRpbWVsaW5lLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGF0IHRoZSB0aW1lLlxuXHRcdCAqICBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSBvciB2YWx1ZXMgd2hpY2ggc2hvdWxkIGJlIHBhc3NlZCB0b1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBvbiBpbnZvY2F0aW9uLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjaG9yZCA9IG5ldyBUb25lLkV2ZW50KGZ1bmN0aW9uKHRpbWUsIGNob3JkKXtcblx0XHQgKiBcdC8vdGhlIGNob3JkIGFzIHdlbGwgYXMgdGhlIGV4YWN0IHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogXHQvL2FyZSBwYXNzZWQgaW4gYXMgYXJndW1lbnRzIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvblxuXHRcdCAqIH0sIFtcIkQ0XCIsIFwiRTRcIiwgXCJGNFwiXSk7XG5cdFx0ICogLy9zdGFydCB0aGUgY2hvcmQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJhbnNwb3J0IHRpbWVsaW5lXG5cdFx0ICogY2hvcmQuc3RhcnQoKTtcblx0XHQgKiAvL2xvb3AgaXQgZXZlcnkgbWVhc3VyZSBmb3IgOCBtZWFzdXJlc1xuXHRcdCAqIGNob3JkLmxvb3AgPSA4O1xuXHRcdCAqIGNob3JkLmxvb3BFbmQgPSBcIjFtXCI7XG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ3ZhbHVlJ1xuXHQgICAgICAgIF0sIFRvbmUuRXZlbnQpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBMb29wIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUgIHtCb29sZWFufFBvc2l0aXZlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wID0gb3B0aW9ucy5sb29wO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2UuXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB3aGljaCBpcyBwYXNzZWQgdG8gdGhlXG5cdFx0XHQgKiAgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdFx0XHQgKiAgQHR5cGUgIHsqfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVuIHRoZSBub3RlIGlzIHNjaGVkdWxlZCB0byBzdGFydC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKG9wdGlvbnMubG9vcFN0YXJ0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBXaGVuIHRoZSBub3RlIGlzIHNjaGVkdWxlZCB0byBzdGFydC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhvcHRpb25zLmxvb3BFbmQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRyYWNrcyB0aGUgc2NoZWR1bGVkIGV2ZW50c1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGUgbm90ZS4gQSBzcGVlZCBvZiAxXG5cdFx0XHQgKiAgaXMgbm8gY2hhbmdlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGRlbGF5IHRpbWUgZnJvbSB3aGVuIHRoZSBldmVudCBpcyBzY2hlZHVsZWQgdG8gc3RhcnRcblx0XHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0T2Zmc2V0ID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBwcml2YXRlIGhvbGRlciBvZiBwcm9iYWJpbGl0eSB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcHJvYmFiaWxpdHkgPSBvcHRpb25zLnByb2JhYmlsaXR5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhbW91bnQgb2YgdmFyaWF0aW9uIGZyb20gdGhlXG5cdFx0XHQgKiAgZ2l2ZW4gdGltZS5cblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9odW1hbml6ZSA9IG9wdGlvbnMuaHVtYW5pemU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSWYgbXV0ZSBpcyB0cnVlLCB0aGUgY2FsbGJhY2sgd29uJ3QgYmVcblx0XHRcdCAqICBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgIHRoaXMucGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAnMW0nLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICd2YWx1ZSc6IG51bGwsXG5cdCAgICAgICAgJ3Byb2JhYmlsaXR5JzogMSxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlLFxuXHQgICAgICAgICdodW1hbml6ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlc2NoZWR1bGUgYWxsIG9mIHRoZSBldmVudHMgYWxvbmcgdGhlIHRpbWVsaW5lXG5cdFx0ICogIHdpdGggdGhlIHVwZGF0ZWQgdmFsdWVzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGFmdGVyIE9ubHkgcmVzY2hlZHVsZXMgZXZlbnRzIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLl9yZXNjaGVkdWxlRXZlbnRzID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgLy9pZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgc2NoZWR1bGVzIGFsbCBvZiB0aGUgZXZlbnRzXG5cdCAgICAgICAgYWZ0ZXIgPSBUb25lLmRlZmF1bHRBcmcoYWZ0ZXIsIC0xKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoRnJvbShhZnRlciwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHZhciBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChldmVudC5pZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB2YXIgc3RhcnRUaWNrID0gZXZlbnQudGltZSArIE1hdGgucm91bmQodGhpcy5zdGFydE9mZnNldCAvIHRoaXMuX3BsYXliYWNrUmF0ZSk7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gSW5maW5pdHk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIodGhpcy5fbG9vcCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSB0aGlzLl9sb29wICogdGhpcy5fZ2V0TG9vcER1cmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0RXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXRBZnRlcihzdGFydFRpY2spO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0RXZlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBNYXRoLm1pbihkdXJhdGlvbiwgbmV4dEV2ZW50LnRpbWUgLSBzdGFydFRpY2spO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBpZiAoZHVyYXRpb24gIT09IEluZmluaXR5KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vc2NoZWR1bGUgYSBzdG9wIHNpbmNlIGl0J3MgZmluaXRlIGR1cmF0aW9uXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgc3RhcnRUaWNrICsgZHVyYXRpb24gKyAxKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBUb25lLlRpY2tzKGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGludGVydmFsID0gVG9uZS5UaWNrcyh0aGlzLl9nZXRMb29wRHVyYXRpb24oKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQuaWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZVJlcGVhdCh0aGlzLl90aWNrLmJpbmQodGhpcyksIGludGVydmFsLCBUb25lLlRpY2tzKHN0YXJ0VGljayksIGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQuaWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZSh0aGlzLl90aWNrLmJpbmQodGhpcyksIFRvbmUuVGlja3Moc3RhcnRUaWNrKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgbm90ZSwgZWl0aGVyIFwic3RhcnRlZFwiIG9yIFwic3RvcHBlZFwiLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnRpY2tzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3RhcnQgZnJvbSB0aGUgc2NoZWR1bGVkIHN0YXJ0IHRpbWVcblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQG5hbWUgc3RhcnRPZmZzZXRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3N0YXJ0T2Zmc2V0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2JhYmlsaXR5IG9mIHRoZSBub3RlcyBiZWluZyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2JhYmlsaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdwcm9iYWJpbGl0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2JhYmlsaXR5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvYikge1xuXHQgICAgICAgICAgICB0aGlzLl9wcm9iYWJpbGl0eSA9IHByb2I7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgc2V0IHRvIHRydWUsIHdpbGwgYXBwbHkgc21hbGwgcmFuZG9tIHZhcmlhdGlvblxuXHRcdCAqICB0byB0aGUgY2FsbGJhY2sgdGltZS4gSWYgdGhlIHZhbHVlIGlzIGdpdmVuIGFzIGEgdGltZSwgaXQgd2lsbCByYW5kb21pemVcblx0XHQgKiAgYnkgdGhhdCBhbW91bnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogZXZlbnQuaHVtYW5pemUgPSB0cnVlO1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdCAqICBAbmFtZSBodW1hbml6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnaHVtYW5pemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9odW1hbml6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhcmlhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9odW1hbml6ZSA9IHZhcmlhdGlvbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIHRpbWUgIFdoZW4gdGhlIG5vdGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAnc3RhdGUnOiBUb25lLlN0YXRlLlN0YXJ0ZWQsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IHRpbWUsXG5cdCAgICAgICAgICAgICAgICAnaWQnOiB1bmRlZmluZWRcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBFdmVudCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIHRpbWUgIFdoZW4gdGhlIG5vdGUgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXNFdmVudCA9IHRoaXMuX3N0YXRlLmdldEJlZm9yZSh0aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHJlc2NoZWR1bFRpbWUgPSB0aW1lO1xuXHQgICAgICAgICAgICBpZiAocHJldmlvdXNFdmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgcmVzY2hlZHVsVGltZSA9IHByZXZpb3VzRXZlbnQudGltZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKHJlc2NoZWR1bFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGFsbCBzY2hlZHVsZWQgZXZlbnRzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgW3RpbWU9MF0gIFRoZSB0aW1lIGFmdGVyIHdoaWNoIGV2ZW50cyB3aWxsIGJlIGNhbmNlbC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLmRlZmF1bHRBcmcodGltZSwgLUluZmluaXR5KTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hGcm9tKHRpbWUsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlci4gQWxzb1xuXHRcdCAqICBjaGVja3MgaWYgdGhlIEV2ZW50IGlzIGRvbmUgcGxheWluZ1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSBvZiB0aGUgZXZlbnQgaW4gc2Vjb25kc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB0aWNrcyA9IFRvbmUuVHJhbnNwb3J0LmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmICghdGhpcy5tdXRlICYmIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpY2tzKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnByb2JhYmlsaXR5IDwgMSAmJiBNYXRoLnJhbmRvbSgpID4gdGhpcy5wcm9iYWJpbGl0eSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmh1bWFuaXplKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdmFyaWF0aW9uID0gMC4wMjtcblx0ICAgICAgICAgICAgICAgIGlmICghVG9uZS5pc0Jvb2xlYW4odGhpcy5odW1hbml6ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24gPSB0aGlzLnRvU2Vjb25kcyh0aGlzLmh1bWFuaXplKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRpbWUgKz0gKE1hdGgucmFuZG9tKCkgKiAyIC0gMSkgKiB2YXJpYXRpb247XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB0aGlzLnZhbHVlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgZHVyYXRpb24gb2YgdGhlIGxvb3AuXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLl9nZXRMb29wRHVyYXRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoKHRoaXMuX2xvb3BFbmQgLSB0aGlzLl9sb29wU3RhcnQpIC8gdGhpcy5fcGxheWJhY2tSYXRlKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIG5vdGUgc2hvdWxkIGxvb3Agb3Igbm90XG5cdFx0ICogIGJldHdlZW4gVG9uZS5FdmVudC5sb29wU3RhcnQgYW5kXG5cdFx0ICogIFRvbmUuRXZlbnQubG9vcEVuZC4gQW4gaW50ZWdlclxuXHRcdCAqICB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mXG5cdFx0ICogIGxvb3BzIHRoZSBFdmVudCBkb2VzIGFmdGVyIGl0IHN0YXJ0cy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFBvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBsb29wXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdsb29wJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3ApIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0VGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIG5vdGUuIERlZmF1bHRzIHRvIDEuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG5vdGUubG9vcCA9IHRydWU7XG5cdFx0ICogLy9yZXBlYXQgdGhlIG5vdGUgdHdpY2UgYXMgZmFzdFxuXHRcdCAqIG5vdGUucGxheWJhY2tSYXRlID0gMjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBsb29wRW5kIHBvaW50IGlzIHRoZSB0aW1lIHRoZSBldmVudCB3aWxsIGxvb3Bcblx0XHQgKiAgaWYgVG9uZS5FdmVudC5sb29wIGlzIHRydWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcEVuZCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wRW5kKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvVGlja3MobG9vcEVuZCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSB3aGVuIHRoZSBsb29wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcFN0YXJ0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3MobG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IHByb2dyZXNzIG9mIHRoZSBsb29wIGludGVydmFsLlxuXHRcdCAqICBSZXR1cm5zIDAgaWYgdGhlIGV2ZW50IGlzIG5vdCBzdGFydGVkIHlldCBvclxuXHRcdCAqICBpdCBpcyBub3Qgc2V0IHRvIGxvb3AuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2dyZXNzXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAncHJvZ3Jlc3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdGlja3MgPSBUb25lLlRyYW5zcG9ydC50aWNrcztcblx0ICAgICAgICAgICAgICAgIHZhciBsYXN0RXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQodGlja3MpO1xuXHQgICAgICAgICAgICAgICAgaWYgKGxhc3RFdmVudCAhPT0gbnVsbCAmJiBsYXN0RXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBsb29wRHVyYXRpb24gPSB0aGlzLl9nZXRMb29wRHVyYXRpb24oKTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcHJvZ3Jlc3MgPSAodGlja3MgLSBsYXN0RXZlbnQudGltZSkgJSBsb29wRHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2dyZXNzIC8gbG9vcER1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY2FuY2VsKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FdmVudDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkxvb3AgY3JlYXRlcyBhIGxvb3BlZCBjYWxsYmFjayBhdCB0aGUgXG5cdFx0ICogICAgICAgICBzcGVjaWZpZWQgaW50ZXJ2YWwuIFRoZSBjYWxsYmFjayBjYW4gYmUgXG5cdFx0ICogICAgICAgICBzdGFydGVkLCBzdG9wcGVkIGFuZCBzY2hlZHVsZWQgYWxvbmdcblx0XHQgKiAgICAgICAgIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZS4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGxvb3AgPSBuZXcgVG9uZS5Mb29wKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly90cmlnZ2VyZWQgZXZlcnkgZWlnaHRoIG5vdGUuIFxuXHRcdCAqIFx0Y29uc29sZS5sb2codGltZSk7XG5cdFx0ICogfSwgXCI4blwiKS5zdGFydCgwKTtcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydCgpO1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBpbnRlcnZhbCBUaGUgdGltZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbGJhY2sgY2FsbHMuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2ludGVydmFsJ1xuXHQgICAgICAgIF0sIFRvbmUuTG9vcCk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBldmVudCB3aGljaCBwcm9kdWNlcyB0aGUgY2FsbGJhY2tzXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudCA9IG5ldyBUb25lLkV2ZW50KHtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogdGhpcy5fdGljay5iaW5kKHRoaXMpLFxuXHQgICAgICAgICAgICAnbG9vcCc6IHRydWUsXG5cdCAgICAgICAgICAgICdsb29wRW5kJzogb3B0aW9ucy5pbnRlcnZhbCxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IG9wdGlvbnMucGxheWJhY2tSYXRlLFxuXHQgICAgICAgICAgICAncHJvYmFiaWxpdHknOiBvcHRpb25zLnByb2JhYmlsaXR5XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZSBuZXh0IGV2ZW50IGluIHRoZSBwYXR0ZXJuXG5cdFx0XHQgKiAgQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLy9zZXQgdGhlIGl0ZXJhdGlvbnNcblx0ICAgICAgICB0aGlzLml0ZXJhdGlvbnMgPSBvcHRpb25zLml0ZXJhdGlvbnM7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Mb29wKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdpbnRlcnZhbCc6ICc0bicsXG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdpdGVyYXRpb25zJzogSW5maW5pdHksXG5cdCAgICAgICAgJ3Byb2JhYmlsaXR5JzogdHJ1ZSxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBsb29wIGF0IHRoZSBzcGVjaWZpZWQgdGltZSBhbG9uZyB0aGUgVHJhbnNwb3J0J3Ncblx0XHQgKiAgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb249fSAgdGltZSAgV2hlbiB0byBzdGFydCB0aGUgTG9vcC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBsb29wIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9uPX0gIHRpbWUgIFdoZW4gdG8gc3RvcCB0aGUgQXJwZWdnaW9cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGFsbCBzY2hlZHVsZWQgZXZlbnRzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgW3RpbWU9MF0gIFRoZSB0aW1lIGFmdGVyIHdoaWNoIGV2ZW50cyB3aWxsIGJlIGNhbmNlbC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuTG9vcH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudC5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBub3RlcyBzaG91bGQgYmUgY2FsbGVkXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRoZSBldmVudCBvY2N1cnNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdGF0ZSBvZiB0aGUgTG9vcCwgZWl0aGVyIHN0YXJ0ZWQgb3Igc3RvcHBlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQuc3RhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2dyZXNzIG9mIHRoZSBsb29wIGFzIGEgdmFsdWUgYmV0d2VlbiAwLTEuIDAsIHdoZW5cblx0XHQgKiAgdGhlIGxvb3AgaXMgc3RvcHBlZCBvciBkb25lIGl0ZXJhdGluZy4gXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvZ3Jlc3Ncblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3Byb2dyZXNzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQucHJvZ3Jlc3M7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxiYWNrcy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogbG9vcC5pbnRlcnZhbCA9IFwiOG5cIjsgLy9sb29wIGV2ZXJ5IDhuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBpbnRlcnZhbFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdpbnRlcnZhbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50Lmxvb3BFbmQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5sb29wRW5kID0gaW50ZXJ2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIGxvb3AuIFRoZSBub3JtYWwgcGxheWJhY2sgcmF0ZSBpcyAxIChubyBjaGFuZ2UpLiBcblx0XHQgKiAgQSBgcGxheWJhY2tSYXRlYCBvZiAyIHdvdWxkIGJlIHR3aWNlIGFzIGZhc3QuIFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50LnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQucGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSYW5kb20gdmFyaWF0aW9uICsvLTAuMDFzIHRvIHRoZSBzY2hlZHVsZWQgdGltZS4gXG5cdFx0ICogIE9yIGdpdmUgaXQgYSB0aW1lIHZhbHVlIHdoaWNoIGl0IHdpbGwgcmFuZG9taXplIGJ5LlxuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAbmFtZSBodW1hbml6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdodW1hbml6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50Lmh1bWFuaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFyaWF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmh1bWFuaXplID0gdmFyaWF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcm9iYWJseSBvZiB0aGUgY2FsbGJhY2sgYmVpbmcgaW52b2tlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9iYWJpbGl0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdwcm9iYWJpbGl0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50LnByb2JhYmlsaXR5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvYikge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5wcm9iYWJpbGl0eSA9IHByb2I7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgTXV0aW5nIHRoZSBMb29wIG1lYW5zIHRoYXQgbm8gY2FsbGJhY2tzIGFyZSBpbnZva2VkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgbXV0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTG9vcC5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBsb29wLiBUaGUgZGVmYXVsdFxuXHRcdCAqICB2YWx1ZSBpcyBJbmZpbml0eSAobG9vcCBmb3JldmVyKS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBpdGVyYXRpb25zXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ2l0ZXJhdGlvbnMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9ldmVudC5sb29wID09PSB0cnVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQubG9vcDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaXRlcnMpIHtcblx0ICAgICAgICAgICAgaWYgKGl0ZXJzID09PSBJbmZpbml0eSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnQubG9vcCA9IHRydWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudC5sb29wID0gaXRlcnM7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ldmVudCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTG9vcDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGFydCBpcyBhIGNvbGxlY3Rpb24gVG9uZS5FdmVudHMgd2hpY2ggY2FuIGJlXG5cdFx0ICogICAgICAgICBzdGFydGVkL3N0b3BwZWQgYW5kIGxvb3BlZCBhcyBhIHNpbmdsZSB1bml0LlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkV2ZW50fVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIG9uIGVhY2ggZXZlbnRcblx0XHQgKiAgQHBhcmFtIHtBcnJheX0gZXZlbnRzIHRoZSBhcnJheSBvZiBldmVudHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGFydCA9IG5ldyBUb25lLlBhcnQoZnVuY3Rpb24odGltZSwgbm90ZSl7XG5cdFx0ICogXHQvL3RoZSBub3RlcyBnaXZlbiBhcyB0aGUgc2Vjb25kIGVsZW1lbnQgaW4gdGhlIGFycmF5XG5cdFx0ICogXHQvL3dpbGwgYmUgcGFzc2VkIGluIGFzIHRoZSBzZWNvbmQgYXJndW1lbnRcblx0XHQgKiBcdHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKG5vdGUsIFwiOG5cIiwgdGltZSk7XG5cdFx0ICogfSwgW1swLCBcIkMyXCJdLCBbXCIwOjJcIiwgXCJDM1wiXSwgW1wiMDozOjJcIiwgXCJHMlwiXV0pO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdXNlIGFuIGFycmF5IG9mIG9iamVjdHMgYXMgbG9uZyBhcyB0aGUgb2JqZWN0IGhhcyBhIFwidGltZVwiIGF0dHJpYnV0ZVxuXHRcdCAqIHZhciBwYXJ0ID0gbmV3IFRvbmUuUGFydChmdW5jdGlvbih0aW1lLCB2YWx1ZSl7XG5cdFx0ICogXHQvL3RoZSB2YWx1ZSBpcyBhbiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYm90aCB0aGUgbm90ZSBhbmQgdGhlIHZlbG9jaXR5XG5cdFx0ICogXHRzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSh2YWx1ZS5ub3RlLCBcIjhuXCIsIHRpbWUsIHZhbHVlLnZlbG9jaXR5KTtcblx0XHQgKiB9LCBbe1widGltZVwiIDogMCwgXCJub3RlXCIgOiBcIkMzXCIsIFwidmVsb2NpdHlcIjogMC45fSxcblx0XHQgKiBcdCAgIHtcInRpbWVcIiA6IFwiMDoyXCIsIFwibm90ZVwiIDogXCJDNFwiLCBcInZlbG9jaXR5XCI6IDAuNX1cblx0XHQgKiBdKS5zdGFydCgwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdldmVudHMnXG5cdCAgICAgICAgXSwgVG9uZS5QYXJ0KTtcblx0ICAgICAgICBUb25lLkV2ZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQW4gYXJyYXkgb2YgT2JqZWN0cy5cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBbXTtcblx0ICAgICAgICAvL2FkZCB0aGUgZXZlbnRzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmV2ZW50c1tpXSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYWRkKG9wdGlvbnMuZXZlbnRzW2ldWzBdLCBvcHRpb25zLmV2ZW50c1tpXVsxXSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmFkZChvcHRpb25zLmV2ZW50c1tpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYXJ0LCBUb25lLkV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdjYWxsYmFjayc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wRW5kJzogJzFtJyxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAncHJvYmFiaWxpdHknOiAxLFxuXHQgICAgICAgICdodW1hbml6ZSc6IGZhbHNlLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2UsXG5cdCAgICAgICAgJ2V2ZW50cyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBwYXJ0IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSAgdGltZSAgICBXaGVuIHRvIHN0YXJ0IHRoZSBwYXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIG9mZnNldCAgVGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFydFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmVnaW4gcGxheWluZyBhdC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aWNrcykgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgdGhpcy5fbG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9UaWNrcyhvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5hZGQoe1xuXHQgICAgICAgICAgICAgICAgJ3N0YXRlJzogVG9uZS5TdGF0ZS5TdGFydGVkLFxuXHQgICAgICAgICAgICAgICAgJ3RpbWUnOiB0aWNrcyxcblx0ICAgICAgICAgICAgICAgICdvZmZzZXQnOiBvZmZzZXRcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdGFydE5vdGUoZXZlbnQsIHRpY2tzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBldmVudCBpbiB0aGUgZ2l2ZW4gZXZlbnQgYXQgdGhlIGNvcnJlY3QgdGltZSBnaXZlblxuXHRcdCAqICB0aGUgdGlja3MgYW5kIG9mZnNldCBhbmQgbG9vcGluZy5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudH0gIGV2ZW50XG5cdFx0ICogIEBwYXJhbSAge1RpY2tzfSAgdGlja3Ncblx0XHQgKiAgQHBhcmFtICB7VGlja3N9ICBvZmZzZXRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3N0YXJ0Tm90ZSA9IGZ1bmN0aW9uIChldmVudCwgdGlja3MsIG9mZnNldCkge1xuXHQgICAgICAgIHRpY2tzIC09IG9mZnNldDtcblx0ICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPj0gdGhpcy5fbG9vcFN0YXJ0ICYmIGV2ZW50LnN0YXJ0T2Zmc2V0IDwgdGhpcy5fbG9vcEVuZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0IDwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9zdGFydCBpdCBvbiB0aGUgbmV4dCBsb29wXG5cdCAgICAgICAgICAgICAgICAgICAgdGlja3MgKz0gdGhpcy5fZ2V0TG9vcER1cmF0aW9uKCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBldmVudC5zdGFydChUb25lLlRpY2tzKHRpY2tzKSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPCB0aGlzLl9sb29wU3RhcnQgJiYgZXZlbnQuc3RhcnRPZmZzZXQgPj0gb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5sb29wID0gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICBldmVudC5zdGFydChUb25lLlRpY2tzKHRpY2tzKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXJ0T2Zmc2V0ID49IG9mZnNldCkge1xuXHQgICAgICAgICAgICBldmVudC5zdGFydChUb25lLlRpY2tzKHRpY2tzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc3RhcnQgZnJvbSB0aGUgc2NoZWR1bGVkIHN0YXJ0IHRpbWVcblx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAbmFtZSBzdGFydE9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdzdGFydE9mZnNldCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0T2Zmc2V0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0T2Zmc2V0ID0gb2Zmc2V0O1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuc3RhcnRPZmZzZXQgKz0gdGhpcy5fc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIHBhcnQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICB0aW1lICBXaGVuIHRvIHN0b3AgdGhlIHBhcnQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB0aWNrcyA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGlja3MpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGlja3MpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LnN0b3AodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldC9TZXQgYW4gRXZlbnQncyB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgSWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW4gYW5kIG5vIGV2ZW50IGV4aXN0cyBhdFxuXHRcdCAqICB0aGUgZ2l2ZW4gdGltZSwgb25lIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoYXQgdmFsdWUuXG5cdFx0ICogIElmIHR3byBldmVudHMgYXJlIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBmaXJzdCBvbmUgd2lsbFxuXHRcdCAqICBiZSByZXR1cm5lZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwYXJ0LmF0KFwiMW1cIik7IC8vcmV0dXJucyB0aGUgcGFydCBhdCB0aGUgZmlyc3QgbWVhc3VyZVxuXHRcdCAqXG5cdFx0ICogcGFydC5hdChcIjJtXCIsIFwiQzJcIik7IC8vc2V0IHRoZSB2YWx1ZSBhdCBcIjJtXCIgdG8gQzIuXG5cdFx0ICogLy9pZiBhbiBldmVudCBkaWRuJ3QgZXhpc3QgYXQgdGhhdCB0aW1lLCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnQgdG8gZ2V0IG9yIHNldC5cblx0XHQgKiAgQHBhcmFtIHsqPX0gdmFsdWUgSWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW4sIHRoZSB2YWx1ZSBvZiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgZXZlbnQgYXQgdGhlIGdpdmVuIHRpbWUgd2lsbCBiZSBzZXQgdG8gaXQuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRXZlbnR9IHRoZSBldmVudCBhdCB0aGUgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgdmFyIHRpY2tUaW1lID0gVG9uZS5UaWNrcygxKS50b1NlY29uZHMoKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHNbaV07XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aW1lLnRvVGlja3MoKSAtIGV2ZW50LnN0YXJ0T2Zmc2V0KSA8IHRpY2tUaW1lKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodmFsdWUpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQudmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2lmIHRoZXJlIHdhcyBubyBldmVudCBhdCB0aGF0IHRpbWUsIGNyZWF0ZSBvbmVcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuYWRkKHRpbWUsIHZhbHVlKTtcblx0ICAgICAgICAgICAgLy9yZXR1cm4gdGhlIG5ldyBldmVudFxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzW3RoaXMuX2V2ZW50cy5sZW5ndGggLSAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIGFuIGV2ZW50IHRvIHRoZSBwYXJ0LlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgdGhlIG5vdGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGFuIG9iamVjdCBpcyBwYXNzZWQgaW4sIGl0IHNob3VsZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgYSAndGltZScgYXR0cmlidXRlIGFuZCB0aGUgcmVzdFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBvYmplY3Qgd2lsbCBiZSB1c2VkIGFzIHRoZSAndmFsdWUnLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fCp9ICB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJ0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcGFydC5hZGQoXCIxbVwiLCBcIkMjKzExXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGltZSwgdmFsdWUpIHtcblx0ICAgICAgICAvL2V4dHJhY3QgdGhlIHBhcmFtZXRlcnNcblx0ICAgICAgICBpZiAodGltZS5oYXNPd25Qcm9wZXJ0eSgndGltZScpKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGltZTtcblx0ICAgICAgICAgICAgdGltZSA9IHZhbHVlLnRpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgdmFyIGV2ZW50O1xuXHQgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRvbmUuRXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgZXZlbnQuY2FsbGJhY2sgPSB0aGlzLl90aWNrLmJpbmQodGhpcyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgZXZlbnQgPSBuZXcgVG9uZS5FdmVudCh7XG5cdCAgICAgICAgICAgICAgICAnY2FsbGJhY2snOiB0aGlzLl90aWNrLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy90aGUgc3RhcnQgb2Zmc2V0XG5cdCAgICAgICAgZXZlbnQuc3RhcnRPZmZzZXQgPSB0aW1lO1xuXHQgICAgICAgIC8vaW5pdGlhbGl6ZSB0aGUgdmFsdWVzXG5cdCAgICAgICAgZXZlbnQuc2V0KHtcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiB0aGlzLmxvb3BFbmQsXG5cdCAgICAgICAgICAgICdsb29wU3RhcnQnOiB0aGlzLmxvb3BTdGFydCxcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0aGlzLmxvb3AsXG5cdCAgICAgICAgICAgICdodW1hbml6ZSc6IHRoaXMuaHVtYW5pemUsXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiB0aGlzLnBsYXliYWNrUmF0ZSxcblx0ICAgICAgICAgICAgJ3Byb2JhYmlsaXR5JzogdGhpcy5wcm9iYWJpbGl0eVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5wdXNoKGV2ZW50KTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBub3RlIGlmIGl0IHNob3VsZCBiZSBwbGF5ZWQgcmlnaHQgbm93XG5cdCAgICAgICAgdGhpcy5fcmVzdGFydEV2ZW50KGV2ZW50KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVzdGFydCB0aGUgZ2l2ZW4gZXZlbnRcblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudH0gIGV2ZW50XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9yZXN0YXJ0RXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZUV2ZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChzdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0Tm90ZShldmVudCwgc3RhdGVFdmVudC50aW1lLCBzdGF0ZUV2ZW50Lm9mZnNldCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvL3N0b3AgdGhlIG5vdGVcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0b3AoVG9uZS5UaWNrcyhzdGF0ZUV2ZW50LnRpbWUpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSBwYXJ0LiBXaWxsIHJlY3Vyc2l2ZWx5IGl0ZXJhdGVcblx0XHQgKiAgaW50byBuZXN0ZWQgcGFydHMgdG8gZmluZCB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiAgQHBhcmFtIHsqfSB2YWx1ZSBPcHRpb25hbGx5IHNlbGVjdCBvbmx5IGEgc3BlY2lmaWMgZXZlbnQgdmFsdWVcblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgLy9leHRyYWN0IHRoZSBwYXJhbWV0ZXJzXG5cdCAgICAgICAgaWYgKHRpbWUuaGFzT3duUHJvcGVydHkoJ3RpbWUnKSkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRpbWU7XG5cdCAgICAgICAgICAgIHRpbWUgPSB2YWx1ZS50aW1lO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9ldmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBUb25lLlBhcnQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnJlbW92ZSh0aW1lLCB2YWx1ZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYodmFsdWUpIHx8IFRvbmUuaXNEZWZpbmVkKHZhbHVlKSAmJiBldmVudC52YWx1ZSA9PT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGFsbCBvZiB0aGUgbm90ZXMgZnJvbSB0aGUgZ3JvdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLnJlbW92ZUFsbCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gW107XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBzY2hlZHVsZWQgc3RhdGUgY2hhbmdlIGV2ZW50czogaS5lLiBcInN0YXJ0XCIgYW5kIFwic3RvcFwiLlxuXHRcdCAqICBAcGFyYW0ge1RpbWVsaW5lUG9zaXRpb259IGFmdGVyIFRoZSB0aW1lIGFmdGVyIHdoaWNoIHRvIGNhbmNlbCB0aGUgc2NoZWR1bGVkIGV2ZW50cy5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuY2FuY2VsKGFmdGVyKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGhpcy50b1RpY2tzKGFmdGVyKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIGV2ZW50c1xuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gY3R4IFRoZSBjb250ZXh0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjdHgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzKSB7XG5cdCAgICAgICAgICAgIGN0eCA9IFRvbmUuZGVmYXVsdEFyZyhjdHgsIHRoaXMpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fZXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMuX2V2ZW50c1tpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgVG9uZS5QYXJ0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZS5fZm9yRWFjaChjYWxsYmFjaywgY3R4KTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjdHgsIGUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGF0dHJpYnV0ZSBvZiBhbGwgb2YgdGhlIGV2ZW50c1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBhdHRyICB0aGUgYXR0cmlidXRlIHRvIHNldFxuXHRcdCAqICBAcGFyYW0gIHsqfSAgdmFsdWUgICAgICBUaGUgdmFsdWUgdG8gc2V0IGl0IHRvXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl9zZXRBbGwgPSBmdW5jdGlvbiAoYXR0ciwgdmFsdWUpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudFthdHRyXSA9IHZhbHVlO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCB0aWNrIG1ldGhvZFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSBvZiB0aGUgZXZlbnQgaW4gc2Vjb25kc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIGlmICghdGhpcy5tdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgdmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRGV0ZXJtaW5lIGlmIHRoZSBldmVudCBzaG91bGQgYmUgY3VycmVudGx5IGxvb3Bpbmdcblx0XHQgKiAgZ2l2ZW4gdGhlIGxvb3AgYm91bmRyaWVzIG9mIHRoaXMgUGFydC5cblx0XHQgKiAgQHBhcmFtICB7VG9uZS5FdmVudH0gIGV2ZW50ICBUaGUgZXZlbnQgdG8gdGVzdFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fdGVzdExvb3BCb3VuZHJpZXMgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPCB0aGlzLl9sb29wU3RhcnQgfHwgZXZlbnQuc3RhcnRPZmZzZXQgPj0gdGhpcy5fbG9vcEVuZCkge1xuXHQgICAgICAgICAgICBldmVudC5jYW5jZWwoMCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIC8vcmVzY2hlZHVsZSBpdCBpZiBpdCdzIHN0b3BwZWRcblx0ICAgICAgICAgICAgdGhpcy5fcmVzdGFydEV2ZW50KGV2ZW50KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgbm90ZXMgYmVpbmcgdHJpZ2dlcmVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2JhYmlsaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ3Byb2JhYmlsaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvYmFiaWxpdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9iKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2JhYmlsaXR5ID0gcHJvYjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QWxsKCdwcm9iYWJpbGl0eScsIHByb2IpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIElmIHNldCB0byB0cnVlLCB3aWxsIGFwcGx5IHNtYWxsIHJhbmRvbSB2YXJpYXRpb25cblx0XHQgKiAgdG8gdGhlIGNhbGxiYWNrIHRpbWUuIElmIHRoZSB2YWx1ZSBpcyBnaXZlbiBhcyBhIHRpbWUsIGl0IHdpbGwgcmFuZG9taXplXG5cdFx0ICogIGJ5IHRoYXQgYW1vdW50LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGV2ZW50Lmh1bWFuaXplID0gdHJ1ZTtcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58VGltZX1cblx0XHQgKiAgQG5hbWUgaHVtYW5pemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnaHVtYW5pemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9odW1hbml6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhcmlhdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9odW1hbml6ZSA9IHZhcmlhdGlvbjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QWxsKCdodW1hbml6ZScsIHZhcmlhdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIHBhcnQgc2hvdWxkIGxvb3Agb3Igbm90XG5cdFx0ICogIGJldHdlZW4gVG9uZS5QYXJ0Lmxvb3BTdGFydCBhbmRcblx0XHQgKiAgVG9uZS5QYXJ0Lmxvb3BFbmQuIEFuIGludGVnZXJcblx0XHQgKiAgdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhlIG51bWJlciBvZlxuXHRcdCAqICBsb29wcyB0aGUgUGFydCBkb2VzIGFmdGVyIGl0IHN0YXJ0cy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGxvb3Bcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xvb3AgdGhlIHBhcnQgOCB0aW1lc1xuXHRcdCAqIHBhcnQubG9vcCA9IDg7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Ll9sb29wU3RhcnQgPSB0aGlzLl9sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgICAgICBldmVudC5fbG9vcEVuZCA9IHRoaXMuX2xvb3BFbmQ7XG5cdCAgICAgICAgICAgICAgICBldmVudC5sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Rlc3RMb29wQm91bmRyaWVzKGV2ZW50KTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGxvb3BFbmQgcG9pbnQgZGV0ZXJtaW5lcyB3aGVuIGl0IHdpbGxcblx0XHQgKiAgbG9vcCBpZiBUb25lLlBhcnQubG9vcCBpcyB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wRW5kKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhsb29wRW5kKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQubG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGVzdExvb3BCb3VuZHJpZXMoZXZlbnQpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbG9vcFN0YXJ0IHBvaW50IGRldGVybWluZXMgd2hlbiBpdCB3aWxsXG5cdFx0ICogIGxvb3AgaWYgVG9uZS5QYXJ0Lmxvb3AgaXMgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BTdGFydCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wU3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcFN0YXJ0ID0gdGhpcy50b1RpY2tzKGxvb3BTdGFydCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3BTdGFydCA9IHRoaXMubG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rlc3RMb29wQm91bmRyaWVzKGV2ZW50KTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBwYXJ0XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QWxsKCdwbGF5YmFja1JhdGUnLCByYXRlKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0VGhlIG51bWJlciBvZiBzY2hlZHVsZWQgbm90ZXMgaW4gdGhlIHBhcnQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgbGVuZ3RoXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudHMubGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhcnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5yZW1vdmVBbGwoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFydDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBhdHRlcm4gYXJwZWdnaWF0ZXMgYmV0d2VlbiB0aGUgZ2l2ZW4gbm90ZXNcblx0XHQgKiAgICAgICAgIGluIGEgbnVtYmVyIG9mIHBhdHRlcm5zLiBTZWUgVG9uZS5DdHJsUGF0dGVybiBmb3Jcblx0XHQgKiAgICAgICAgIGEgZnVsbCBsaXN0IG9mIHBhdHRlcm5zLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwYXR0ZXJuID0gbmV3IFRvbmUuUGF0dGVybihmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiAgIC8vdGhlIG9yZGVyIG9mIHRoZSBub3RlcyBwYXNzZWQgaW4gZGVwZW5kcyBvbiB0aGUgcGF0dGVyblxuXHRcdCAqIH0sIFtcIkMyXCIsIFwiRDRcIiwgXCJFNVwiLCBcIkE2XCJdLCBcInVwRG93blwiKTtcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTG9vcH1cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5cblx0XHQgKiAgQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXJwZWdnaWF0ZSBvdmVyLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXR0ZXJuID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ3ZhbHVlcycsXG5cdCAgICAgICAgICAgICdwYXR0ZXJuJ1xuXHQgICAgICAgIF0sIFRvbmUuUGF0dGVybik7XG5cdCAgICAgICAgVG9uZS5Mb29wLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhdHRlcm4gbWFuYWdlclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkN0cmxQYXR0ZXJufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXR0ZXJuID0gbmV3IFRvbmUuQ3RybFBhdHRlcm4oe1xuXHQgICAgICAgICAgICAndmFsdWVzJzogb3B0aW9ucy52YWx1ZXMsXG5cdCAgICAgICAgICAgICd0eXBlJzogb3B0aW9ucy5wYXR0ZXJuLFxuXHQgICAgICAgICAgICAnaW5kZXgnOiBvcHRpb25zLmluZGV4XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYXR0ZXJuLCBUb25lLkxvb3ApO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BhdHRlcm4nOiBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXAsXG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICd2YWx1ZXMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgbm90ZXMgc2hvdWxkIGJlIGNhbGxlZFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0aGUgZXZlbnQgb2NjdXJzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4ucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHRoaXMuX3BhdHRlcm4udmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4ubmV4dCgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCBpbmRleCBpbiB0aGUgdmFsdWVzIGFycmF5LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGluZGV4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXR0ZXJuLnByb3RvdHlwZSwgJ2luZGV4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi5pbmRleDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGkpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGF0dGVybi5pbmRleCA9IGk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGFycmF5IG9mIGV2ZW50cy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqICBAbmFtZSB2YWx1ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAndmFsdWVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi52YWx1ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BhdHRlcm4udmFsdWVzID0gdmFscztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcGF0dGVybi5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUgeyp9XG5cdFx0ICogIEBuYW1lIHZhbHVlXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHRlcm4udmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHBhdHRlcm4gdHlwZS4gU2VlIFRvbmUuQ3RybFBhdHRlcm4gZm9yIHRoZSBmdWxsIGxpc3Qgb2YgcGF0dGVybnMuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBuYW1lIHBhdHRlcm5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAncGF0dGVybicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdHRlcm4udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBhdHRlcm4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGF0dGVybi50eXBlID0gcGF0dGVybjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXR0ZXJufSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXR0ZXJuLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTG9vcC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4gPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhdHRlcm47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBIHNlcXVlbmNlIGlzIGFuIGFsdGVybmF0ZSBub3RhdGlvbiBvZiBhIHBhcnQuIEluc3RlYWRcblx0XHQgKiAgICAgICAgIG9mIHBhc3NpbmcgaW4gYW4gYXJyYXkgb2YgW3RpbWUsIGV2ZW50XSBwYWlycywgcGFzc1xuXHRcdCAqICAgICAgICAgaW4gYW4gYXJyYXkgb2YgZXZlbnRzIHdoaWNoIHdpbGwgYmUgc3BhY2VkIGF0IHRoZVxuXHRcdCAqICAgICAgICAgZ2l2ZW4gc3ViZGl2aXNpb24uIFN1Yi1hcnJheXMgd2lsbCBzdWJkaXZpZGUgdGhhdCBiZWF0XG5cdFx0ICogICAgICAgICBieSB0aGUgbnVtYmVyIG9mIGl0ZW1zIGFyZSBpbiB0aGUgYXJyYXkuXG5cdFx0ICogICAgICAgICBTZXF1ZW5jZSBub3RhdGlvbiBpbnNwaXJhdGlvbiBmcm9tIFtUaWRhbF0oaHR0cDovL3lheHUub3JnL3RpZGFsLylcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IG5vdGVcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICAgIGV2ZW50cyAgVGhlIHNlcXVlbmNlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHN1YmRpdmlzaW9uICBUaGUgc3ViZGl2aXNpb24gYmV0d2VlbiB3aGljaCBldmVudHMgYXJlIHBsYWNlZC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuUGFydH1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2VxID0gbmV3IFRvbmUuU2VxdWVuY2UoZnVuY3Rpb24odGltZSwgbm90ZSl7XG5cdFx0ICogXHRjb25zb2xlLmxvZyhub3RlKTtcblx0XHQgKiAvL3N0cmFpZ2h0IHF1YXRlciBub3Rlc1xuXHRcdCAqIH0sIFtcIkM0XCIsIFwiRTRcIiwgXCJHNFwiLCBcIkE0XCJdLCBcIjRuXCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzZXEgPSBuZXcgVG9uZS5TZXF1ZW5jZShmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKG5vdGUpO1xuXHRcdCAqIC8vc3ViZGl2aXNpb25zIGFyZSBnaXZlbiBhcyBzdWJhcnJheXNcblx0XHQgKiB9LCBbXCJDNFwiLCBbXCJFNFwiLCBcIkQ0XCIsIFwiRTRcIl0sIFwiRzRcIiwgW1wiQTRcIiwgXCJHNFwiXV0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdjYWxsYmFjaycsXG5cdCAgICAgICAgICAgICdldmVudHMnLFxuXHQgICAgICAgICAgICAnc3ViZGl2aXNpb24nXG5cdCAgICAgICAgXSwgVG9uZS5TZXF1ZW5jZSk7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIGV2ZW50c1xuXHQgICAgICAgIHZhciBldmVudHMgPSBvcHRpb25zLmV2ZW50cztcblx0ICAgICAgICBkZWxldGUgb3B0aW9ucy5ldmVudHM7XG5cdCAgICAgICAgVG9uZS5QYXJ0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHN1YmRpdmlzb24gb2YgZWFjaCBub3RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUaWNrc31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ViZGl2aXNpb24gPSB0aGlzLnRvVGlja3Mob3B0aW9ucy5zdWJkaXZpc2lvbik7XG5cdCAgICAgICAgLy9pZiBubyB0aW1lIHdhcyBwYXNzZWQgaW4sIHRoZSBsb29wIGVuZCBpcyB0aGUgZW5kIG9mIHRoZSBjeWNsZVxuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYob3B0aW9ucy5sb29wRW5kKSAmJiBUb25lLmlzRGVmaW5lZChldmVudHMpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSBldmVudHMubGVuZ3RoICogdGhpcy5fc3ViZGl2aXNpb247XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vZGVmYXVsdHMgdG8gbG9vcGluZ1xuXHQgICAgICAgIHRoaXMuX2xvb3AgPSB0cnVlO1xuXHQgICAgICAgIC8vYWRkIGFsbCBvZiB0aGUgZXZlbnRzXG5cdCAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGV2ZW50cykpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYWRkKGksIGV2ZW50c1tpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TZXF1ZW5jZSwgVG9uZS5QYXJ0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5kZWZhdWx0cyA9IHsgJ3N1YmRpdmlzaW9uJzogJzRuJyB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdWJkaXZpc2lvbiBvZiB0aGUgc2VxdWVuY2UuIFRoaXMgY2FuIG9ubHkgYmVcblx0XHQgKiAgc2V0IGluIHRoZSBjb25zdHJ1Y3Rvci4gVGhlIHN1YmRpdmlzaW9uIGlzIHRoZVxuXHRcdCAqICBpbnRlcnZhbCBiZXR3ZWVuIHN1Y2Nlc3NpdmUgc3RlcHMuXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5TZXF1ZW5jZSNcblx0XHQgKiAgQG5hbWUgc3ViZGl2aXNpb25cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUsICdzdWJkaXZpc2lvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fc3ViZGl2aXNpb24pLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEdldC9TZXQgYW4gaW5kZXggb2YgdGhlIHNlcXVlbmNlLiBJZiB0aGUgaW5kZXggY29udGFpbnMgYSBzdWJhcnJheSxcblx0XHQgKiAgYSBUb25lLlNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGF0IHN1Yi1hcnJheSB3aWxsIGJlIHJldHVybmVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzZXF1ZW5jZSA9IG5ldyBUb25lLlNlcXVlbmNlKHBsYXlOb3RlLCBbXCJFNFwiLCBcIkM0XCIsIFwiRiM0XCIsIFtcIkE0XCIsIFwiQmIzXCJdXSlcblx0XHQgKiBzZXF1ZW5jZS5hdCgwKS8vID0+IHJldHVybnMgXCJFNFwiXG5cdFx0ICogLy9zZXQgYSB2YWx1ZVxuXHRcdCAqIHNlcXVlbmNlLmF0KDAsIFwiRzNcIik7XG5cdFx0ICogLy9nZXQgYSBuZXN0ZWQgc2VxdWVuY2Vcblx0XHQgKiBzZXF1ZW5jZS5hdCgzKS5hdCgxKS8vID0+IHJldHVybnMgXCJCYjNcIlxuXHRcdCAqIEBwYXJhbSB7UG9zaXRpdmV9IGluZGV4IFRoZSBpbmRleCB0byBnZXQgb3Igc2V0XG5cdFx0ICogQHBhcmFtIHsqfSB2YWx1ZSBPcHRpb25hbGx5IHBhc3MgaW4gdGhlIHZhbHVlIHRvIHNldCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcblx0ICAgICAgICAvL2lmIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSxcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHZhbHVlKSkge1xuXHQgICAgICAgICAgICAvL3JlbW92ZSB0aGUgY3VycmVudCBldmVudCBhdCB0aGF0IGluZGV4XG5cdCAgICAgICAgICAgIHRoaXMucmVtb3ZlKGluZGV4KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jYWxsIHRoZSBwYXJlbnQncyBtZXRob2Rcblx0ICAgICAgICByZXR1cm4gVG9uZS5QYXJ0LnByb3RvdHlwZS5hdC5jYWxsKHRoaXMsIHRoaXMuX2luZGV4VGltZShpbmRleCksIHZhbHVlKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGFuIGV2ZW50IGF0IGFuIGluZGV4LCBpZiB0aGVyZSdzIGFscmVhZHkgc29tZXRoaW5nXG5cdFx0ICogIGF0IHRoYXQgaW5kZXgsIG92ZXJ3cml0ZSBpdC4gSWYgYHZhbHVlYCBpcyBhbiBhcnJheSxcblx0XHQgKiAgaXQgd2lsbCBiZSBwYXJzZWQgYXMgYSBzdWJzZXF1ZW5jZS5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGluZGV4IFRoZSBpbmRleCB0byBhZGQgdGhlIGV2ZW50IHRvXG5cdFx0ICogIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFkZCBhdCB0aGF0IGluZGV4XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNlcXVlbmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG5cdCAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHZhbHVlKSkge1xuXHQgICAgICAgICAgICAvL21ha2UgYSBzdWJzZXF1ZW5jZSBhbmQgYWRkIHRoYXQgdG8gdGhlIHNlcXVlbmNlXG5cdCAgICAgICAgICAgIHZhciBzdWJTdWJkaXZpc2lvbiA9IE1hdGgucm91bmQodGhpcy5fc3ViZGl2aXNpb24gLyB2YWx1ZS5sZW5ndGgpO1xuXHQgICAgICAgICAgICB2YWx1ZSA9IG5ldyBUb25lLlNlcXVlbmNlKHRoaXMuX3RpY2suYmluZCh0aGlzKSwgdmFsdWUsIFRvbmUuVGlja3Moc3ViU3ViZGl2aXNpb24pKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5hZGQuY2FsbCh0aGlzLCB0aGlzLl9pbmRleFRpbWUoaW5kZXgpLCB2YWx1ZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhIHZhbHVlIGZyb20gdGhlIHNlcXVlbmNlIGJ5IGluZGV4XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGV2ZW50IHRvIHJlbW92ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TZXF1ZW5jZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuUGFydC5wcm90b3R5cGUucmVtb3ZlLmNhbGwodGhpcywgdGhpcy5faW5kZXhUaW1lKGluZGV4KSwgdmFsdWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHRpbWUgb2YgdGhlIGluZGV4IGdpdmVuIHRoZSBTZXF1ZW5jZSdzIHN1YmRpdmlzaW9uXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGluZGV4XG5cdFx0ICogIEByZXR1cm4gIHtUaW1lfSAgVGhlIHRpbWUgb2YgdGhhdCBpbmRleFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUuX2luZGV4VGltZSA9IGZ1bmN0aW9uIChpbmRleCkge1xuXHQgICAgICAgIGlmIChpbmRleCBpbnN0YW5jZW9mIFRvbmUuVHJhbnNwb3J0VGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gaW5kZXg7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3MoaW5kZXggKiB0aGlzLl9zdWJkaXZpc2lvbiArIHRoaXMuc3RhcnRPZmZzZXQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuU2VxdWVuY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2VxdWVuY2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlB1bHNlT3NjaWxsYXRvciBpcyBhIHB1bHNlIG9zY2lsbGF0b3Igd2l0aCBjb250cm9sIG92ZXIgcHVsc2Ugd2lkdGgsXG5cdFx0ICogICAgICAgICBhbHNvIGtub3duIGFzIHRoZSBkdXR5IGN5Y2xlLiBBdCA1MCUgZHV0eSBjeWNsZSAod2lkdGggPSAwLjUpIHRoZSB3YXZlIGlzXG5cdFx0ICogICAgICAgICBhIHNxdWFyZSBhbmQgb25seSBvZGQtbnVtYmVyZWQgaGFybW9uaWNzIGFyZSBwcmVzZW50LiBBdCBhbGwgb3RoZXIgd2lkdGhzXG5cdFx0ICogICAgICAgICBldmVuLW51bWJlcmVkIGhhcm1vbmljcyBhcmUgcHJlc2VudC4gUmVhZCBtb3JlXG5cdFx0ICogICAgICAgICBbaGVyZV0oaHR0cHM6Ly93aWdnbGV3YXZlLndvcmRwcmVzcy5jb20vMjAxNC8wOC8xNi9wdWxzZS13YXZlZm9ybXMtYW5kLWhhcm1vbmljcy8pLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZnJlcXVlbmN5XSBUaGUgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt3aWR0aF0gVGhlIHdpZHRoIG9mIHRoZSBwdWxzZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwdWxzZSA9IG5ldyBUb25lLlB1bHNlT3NjaWxsYXRvcihcIkU1XCIsIDAuNCkudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3dpZHRoJ1xuXHQgICAgICAgIF0sIFRvbmUuT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgd2lkdGggb2YgdGhlIHB1bHNlLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndpZHRoID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMud2lkdGgsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZ2F0ZSB0aGUgd2lkdGggYW1vdW50XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzYXd0b290aCBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGggPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgZnJlcXVlbmN5OiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgZGV0dW5lOiBvcHRpb25zLmRldHVuZSxcblx0ICAgICAgICAgICAgdHlwZTogJ3Nhd3Rvb3RoJyxcblx0ICAgICAgICAgICAgcGhhc2U6IG9wdGlvbnMucGhhc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX3Nhd3Rvb3RoLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMuX3Nhd3Rvb3RoLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaHJlc2hvbGQgdGhlIHNpZ25hbCB0byB0dXJuIGl0IGludG8gYSBzcXVhcmVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKHZhbCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAtMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLmNoYWluKHRoaXMuX3RocmVzaCwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMud2lkdGguY2hhaW4odGhpcy5fd2lkdGhHYXRlLCB0aGlzLl90aHJlc2gpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ3dpZHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QdWxzZU9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzLlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICd3aWR0aCc6IDAuMlxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgdGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguc3RvcCh0aW1lKTtcblx0ICAgICAgICAvL3RoZSB3aWR0aCBpcyBzdGlsbCBjb25uZWN0ZWQgdG8gdGhlIG91dHB1dC5cblx0ICAgICAgICAvL3RoYXQgbmVlZHMgdG8gYmUgc3RvcHBlZCBhbHNvXG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHJlc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlB1bHNlT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2F3dG9vdGgucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zYXd0b290aC5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuIEFsd2F5cyByZXR1cm5zIFwicHVsc2VcIi5cblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QdWxzZU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICdwdWxzZSc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBDYW5ub3Qgc2V0IHBhcnRpYWxzIGZvciB0aGlzIHdhdmVmb3JtIHR5cGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QdWxzZU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwIG1ldGhvZC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QdWxzZU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICd3aWR0aCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMud2lkdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dpZHRoR2F0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aHJlc2guZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QdWxzZU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlBXTU9zY2lsbGF0b3IgbW9kdWxhdGVzIHRoZSB3aWR0aCBvZiBhIFRvbmUuUHVsc2VPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICBhdCB0aGUgbW9kdWxhdGlvbkZyZXF1ZW5jeS4gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBjb250aW51b3VzbHlcblx0XHQgKiAgICAgICAgIGNoYW5naW5nIHRoZSB0aW1icmUgb2YgdGhlIG9zY2lsbGF0b3IgYnkgYWx0ZXJpbmcgdGhlIGhhcm1vbmljc1xuXHRcdCAqICAgICAgICAgZ2VuZXJhdGVkLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IG1vZHVsYXRpb25GcmVxdWVuY3kgVGhlIG1vZHVsYXRpb24gZnJlcXVlbmN5IG9mIHRoZSB3aWR0aCBvZiB0aGUgcHVsc2UuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIHZhciBwd20gPSBuZXcgVG9uZS5QV01Pc2NpbGxhdG9yKFwiQWIzXCIsIDAuMykudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5J1xuXHQgICAgICAgIF0sIFRvbmUuUFdNT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcHVsc2Ugb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlB1bHNlT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcHVsc2UgPSBuZXcgVG9uZS5QdWxzZU9zY2lsbGF0b3Iob3B0aW9ucy5tb2R1bGF0aW9uRnJlcXVlbmN5KTtcblx0ICAgICAgICAvL2NoYW5nZSB0aGUgcHVsc2Ugb3NjaWxsYXRvciB0eXBlXG5cdCAgICAgICAgdGhpcy5fcHVsc2UuX3Nhd3Rvb3RoLnR5cGUgPSAnc2luZSc7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1vZHVsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdkZXR1bmUnOiBvcHRpb25zLmRldHVuZSxcblx0ICAgICAgICAgICAgJ3BoYXNlJzogb3B0aW9ucy5waGFzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNjYWxlIHRoZSBvc2NpbGxhdG9yIHNvIGl0IGRvZXNuJ3QgZ28gc2lsZW50XG5cdFx0XHQgKiAgYXQgdGhlIGV4dHJlbWUgdmFsdWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG5ldyBUb25lLk11bHRpcGx5KDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMuX21vZHVsYXRvci5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpb24gcmF0ZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkZyZXF1ZW5jeSA9IHRoaXMuX3B1bHNlLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNoYWluKHRoaXMuX3NjYWxlLCB0aGlzLl9wdWxzZS53aWR0aCk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2UuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUFdNT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5JzogMC40XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2Uuc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLiBBbHdheXMgcmV0dXJucyBcInB3bVwiLlxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBXTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAncHdtJztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgd2F2ZWZvcm0uIENhbm5vdCBzZXQgcGFydGlhbHMgZm9yIHRoaXMgd2F2ZWZvcm0gdHlwZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBXTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBbXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBXTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsYXRvci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBXTU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QV01Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GTU9zY2lsbGF0b3Jcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBzdGFydGluZyBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGF0aW9uVHlwZSBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHNpbmUgb3NjaWxsYXRvciBmcmVxdWVuY3ktbW9kdWxhdGVkIGJ5IGEgc3F1YXJlIHdhdmVcblx0XHQgKiB2YXIgZm1Pc2MgPSBuZXcgVG9uZS5GTU9zY2lsbGF0b3IoXCJBYjNcIiwgXCJzaW5lXCIsIFwic3F1YXJlXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25UeXBlJ1xuXHQgICAgICAgIF0sIFRvbmUuRk1Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy50eXBlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvcidzIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fY2Fycmllci5kZXR1bmU7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUudmFsdWUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGlvbiBpbmRleCB3aGljaCBpcyBpbiBlc3NlbmNlIHRoZSBkZXB0aCBvciBhbW91bnQgb2YgdGhlIG1vZHVsYXRpb24uIEluIG90aGVyIHRlcm1zIGl0IGlzIHRoZVxuXHRcdFx0ICogIHJhdGlvIG9mIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1vZHVsYXRpbmcgc2lnbmFsIChtZikgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGVcblx0XHRcdCAqICBtb2R1bGF0aW5nIHNpZ25hbCAobWEpIC0tIGFzIGluIG1hL21mLlxuXHRcdFx0ICpcdEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqXHRAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMubW9kdWxhdGlvbkluZGV4KTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGluZyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMubW9kdWxhdGlvblR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgY2FycmllciBhbmQgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9ycy5cblx0XHRcdCAqICBBIGhhcm1vbmljaXR5IG9mIDEgZ2l2ZXMgYm90aCBvc2NpbGxhdG9ycyB0aGUgc2FtZSBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHRoZSBtb2R1bGF0b3IgYW4gb2N0YXZlIGJlbG93IGNhcnJpZXJcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIG1vZHVsYXRpb24gaGFwcGVuc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigwKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5tb2R1bGF0aW9uSW5kZXgsIHRoaXMuX21vZHVsYXRpb25Ob2RlKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY29ubmVjdCh0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fbW9kdWxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GTU9zY2lsbGF0b3IsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnOiAyLFxuXHQgICAgICAgICdtb2R1bGF0aW9uVHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25UeXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvblR5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSBjYXJyaWVyIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkZNT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXggPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZNT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQU1Pc2NpbGxhdG9yXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuT3NjaWxsYXRvcn1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IG1vZHVsYXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egc2luZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeS1tb2R1bGF0ZWQgYnkgYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIHZhciBmbU9zYyA9IG5ldyBUb25lLkFNT3NjaWxsYXRvcihcIkFiM1wiLCBcInNpbmVcIiwgXCJzcXVhcmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvblR5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5BTU9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKG9wdGlvbnMuZnJlcXVlbmN5LCBvcHRpb25zLnR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fY2Fycmllci5kZXR1bmU7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUudmFsdWUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGluZyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMubW9kdWxhdGlvblR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnZlcnQgdGhlIC0xLDEgb3V0cHV0IHRvIDAsMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkF1ZGlvVG9HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBuZXcgVG9uZS5BdWRpb1RvR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgY2FycmllciBhbmQgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9ycy5cblx0XHRcdCAqICBBIGhhcm1vbmljaXR5IG9mIDEgZ2l2ZXMgYm90aCBvc2NpbGxhdG9ycyB0aGUgc2FtZSBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHRoZSBtb2R1bGF0b3IgYW4gb2N0YXZlIGJlbG93IGNhcnJpZXJcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIG1vZHVsYXRpb24gaGFwcGVuc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigwKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY2hhaW4odGhpcy5fbW9kdWxhdGlvblNjYWxlLCB0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNoYWluKHRoaXMuX21vZHVsYXRpb25Ob2RlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFNT3NjaWxsYXRvciwgVG9uZS5Pc2NpbGxhdG9yKTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdtb2R1bGF0aW9uVHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkFNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25UeXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvblR5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSBjYXJyaWVyIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY2Fycmllci5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkFNT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFNT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRmF0T3NjaWxsYXRvclxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IG1vZHVsYXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egc2luZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeS1tb2R1bGF0ZWQgYnkgYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIHZhciBmbU9zYyA9IG5ldyBUb25lLkZhdE9zY2lsbGF0b3IoXCJBYjNcIiwgXCJzaW5lXCIsIFwic3F1YXJlXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdzcHJlYWQnXG5cdCAgICAgICAgXSwgVG9uZS5GYXRPc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIG9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0b3RhbCBzcHJlYWQgb2YgdGhlIG9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUgIHtDZW50c31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ByZWFkID0gb3B0aW9ucy5zcHJlYWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSB7RGVncmVlc31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGhhc2UgPSBvcHRpb25zLnBoYXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYXJ0aWFscyBhcnJheVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucy5wYXJ0aWFscywgW10pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBjb3VudCBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLmNvdW50ID0gb3B0aW9ucy5jb3VudDtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmF0T3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAncGhhc2UnOiAwLFxuXHQgICAgICAgICdzcHJlYWQnOiAyMCxcblx0ICAgICAgICAnY291bnQnOiAzLFxuXHQgICAgICAgICd0eXBlJzogJ3Nhd3Rvb3RoJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBvc2NpbGxhdG9yc1xuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGl0ZXJhdG9yICBUaGUgaXRlcmF0b3IgZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUuX2ZvckVhY2ggPSBmdW5jdGlvbiAoaXRlcmF0b3IpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwodGhpcywgdGhpcy5fb3NjaWxsYXRvcnNbaV0sIGkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGV0dW5lIHNwcmVhZCBiZXR3ZWVuIHRoZSBvc2NpbGxhdG9ycy4gSWYgXCJjb3VudFwiIGlzXG5cdFx0ICogc2V0IHRvIDMgb3NjaWxsYXRvcnMgYW5kIHRoZSBcInNwcmVhZFwiIGlzIHNldCB0byA0MCxcblx0XHQgKiB0aGUgdGhyZWUgb3NjaWxsYXRvcnMgd291bGQgYmUgZGV0dW5lZCBsaWtlIHRoaXM6IFstMjAsIDAsIDIwXVxuXHRcdCAqIGZvciBhIHRvdGFsIGRldHVuZSBzcHJlYWQgb2YgNDAgY2VudHMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7Q2VudHN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3NwcmVhZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NwcmVhZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zcHJlYWQgPSBzcHJlYWQ7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGggPiAxKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSAtc3ByZWFkIC8gMjtcblx0ICAgICAgICAgICAgICAgIHZhciBzdGVwID0gc3ByZWFkIC8gKHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjLCBpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLmRldHVuZS52YWx1ZSA9IHN0YXJ0ICsgc3RlcCAqIGk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBkZXR1bmVkIG9zY2lsbGF0b3JzXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGNvdW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ2NvdW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY291bnQpIHtcblx0ICAgICAgICAgICAgY291bnQgPSBNYXRoLm1heChjb3VudCwgMSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGggIT09IGNvdW50KSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgcGFydGlhbHMgPSB0aGlzLnBhcnRpYWxzO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdCAgICAgICAgICAgICAgICAvL2Rpc3Bvc2UgdGhlIHByZXZpb3VzIG9zY2lsbGF0b3JzXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvc2MuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IFtdO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b20pIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3NjLnBhcnRpYWxzID0gdGhpcy5fcGFydGlhbHM7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3NjLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBvc2MucGhhc2UgPSB0aGlzLl9waGFzZTtcblx0ICAgICAgICAgICAgICAgICAgICBvc2Mudm9sdW1lLnZhbHVlID0gLTYgLSBjb3VudCAqIDEuMTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KG9zYy5mcmVxdWVuY3kpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3Qob3NjLmRldHVuZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgb3NjLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldID0gb3NjO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgLy9zZXQgdGhlIHNwcmVhZFxuXHQgICAgICAgICAgICAgICAgdGhpcy5zcHJlYWQgPSB0aGlzLl9zcHJlYWQ7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG9zYy5zdGFydCgpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSBjYXJyaWVyIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmF0T3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICBvc2MucGFydGlhbHMgPSBwYXJ0aWFscztcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRmF0T3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3BhcnRpYWxzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GYXRPc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5PbW5pT3NjaWxsYXRvciBhZ2dyZWdhdGVzIFRvbmUuT3NjaWxsYXRvciwgVG9uZS5QdWxzZU9zY2lsbGF0b3IsXG5cdFx0ICogICAgICAgICBUb25lLlBXTU9zY2lsbGF0b3IsIFRvbmUuRk1Pc2NpbGxhdG9yLCBUb25lLkFNT3NjaWxsYXRvciwgYW5kIFRvbmUuRmF0T3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgaW50byBvbmUgY2xhc3MuIFRoZSBvc2NpbGxhdG9yIGNsYXNzIGNhbiBiZSBjaGFuZ2VkIGJ5IHNldHRpbmcgdGhlIGB0eXBlYC5cblx0XHQgKiAgICAgICAgIGBvbW5pT3NjLnR5cGUgPSBcInB3bVwiYCB3aWxsIHNldCBpdCB0byB0aGUgVG9uZS5QV01Pc2NpbGxhdG9yLiBQcmVmaXhpbmdcblx0XHQgKiAgICAgICAgIGFueSBvZiB0aGUgYmFzaWMgdHlwZXMgKFwic2luZVwiLCBcInNxdWFyZTRcIiwgZXRjLikgd2l0aCBcImZtXCIsIFwiYW1cIiwgb3IgXCJmYXRcIlxuXHRcdCAqICAgICAgICAgd2lsbCB1c2UgdGhlIEZNT3NjaWxsYXRvciwgQU1Pc2NpbGxhdG9yIG9yIEZhdE9zY2lsbGF0b3IgcmVzcGVjdGl2ZWx5LlxuXHRcdCAqICAgICAgICAgRm9yIGV4YW1wbGU6IGBvbW5pT3NjLnR5cGUgPSBcImZhdHNhd3Rvb3RoXCJgIHdpbGwgY3JlYXRlIHNldCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgdG8gYSBGYXRPc2NpbGxhdG9yIG9mIHR5cGUgXCJzYXd0b290aFwiLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIGluaXRpYWwgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIG9tbmlPc2MgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihcIkMjNFwiLCBcInB3bVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5PbW5pT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yIHNvdXJjZVxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVR5cGUgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICAvL3NldCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIC8vc2V0IHRoZSBvcHRpb25zXG5cdCAgICAgICAgdGhpcy5zZXQob3B0aW9ucyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5PbW5pT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ3BoYXNlJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIE9tbmlPc2NUeXBlID0ge1xuXHQgICAgICAgIFB1bHNlOiAnUHVsc2VPc2NpbGxhdG9yJyxcblx0ICAgICAgICBQV006ICdQV01Pc2NpbGxhdG9yJyxcblx0ICAgICAgICBPc2M6ICdPc2NpbGxhdG9yJyxcblx0ICAgICAgICBGTTogJ0ZNT3NjaWxsYXRvcicsXG5cdCAgICAgICAgQU06ICdBTU9zY2lsbGF0b3InLFxuXHQgICAgICAgIEZhdDogJ0ZhdE9zY2lsbGF0b3InXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0byBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdG8gc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLiBDYW4gYmUgYW55IG9mIHRoZSBiYXNpYyB0eXBlczogc2luZSwgc3F1YXJlLCB0cmlhbmdsZSwgc2F3dG9vdGguIE9yXG5cdFx0ICogcHJlZml4IHRoZSBiYXNpYyB0eXBlcyB3aXRoIFwiZm1cIiwgXCJhbVwiLCBvciBcImZhdFwiIHRvIHVzZSB0aGUgRk1Pc2NpbGxhdG9yLCBBTU9zY2lsbGF0b3Igb3IgRmF0T3NjaWxsYXRvclxuXHRcdCAqIHR5cGVzLiBUaGUgb3NjaWxsYXRvciBjb3VsZCBhbHNvIGJlIHNldCB0byBcInB3bVwiIG9yIFwicHVsc2VcIi4gQWxsIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZVxuXHRcdCAqIG9zY2lsbGF0b3IncyBjbGFzcyBhcmUgYWNjZXNzaWJsZSB3aGVuIHRoZSBvc2NpbGxhdG9yIGlzIHNldCB0byB0aGF0IHR5cGUsIGJ1dCB0aHJvd3MgYW4gZXJyb3Jcblx0XHQgKiB3aGVuIGl0J3Mgbm90LlxuXHRcdCAqXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvbW5pT3NjLnR5cGUgPSBcInB3bVwiO1xuXHRcdCAqIC8vbW9kdWxhdGlvbkZyZXF1ZW5jeSBpcyBwYXJhbWV0ZXIgd2hpY2ggaXMgYXZhaWxhYmxlXG5cdFx0ICogLy9vbmx5IHdoZW4gdGhlIHR5cGUgaXMgXCJwd21cIi5cblx0XHQgKiBvbW5pT3NjLm1vZHVsYXRpb25GcmVxdWVuY3kudmFsdWUgPSAwLjU7XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2FuIHNxdWFyZSB3YXZlIGZyZXF1ZW5jeSBtb2R1bGF0ZWQgYnkgYSBzYXd0b290aFxuXHRcdCAqIG9tbmlPc2MudHlwZSA9IFwiZm1zcXVhcmVcIjtcblx0XHQgKiBvbW5pT3NjLm1vZHVsYXRpb25UeXBlID0gXCJzYXd0b290aFwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHByZWZpeCA9ICcnO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0pIHtcblx0ICAgICAgICAgICAgICAgIHByZWZpeCA9ICdmbSc7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuQU0pIHtcblx0ICAgICAgICAgICAgICAgIHByZWZpeCA9ICdhbSc7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICBwcmVmaXggPSAnZmF0Jztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgdGhpcy5fb3NjaWxsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICBpZiAodHlwZS5zdWJzdHIoMCwgMikgPT09ICdmbScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuRk0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZS5zdWJzdHIoMik7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdWJzdHIoMCwgMikgPT09ICdhbScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuQU0pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZS5zdWJzdHIoMik7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5zdWJzdHIoMCwgMykgPT09ICdmYXQnKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLkZhdCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlLnN1YnN0cigzKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncHdtJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5QV00pO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwdWxzZScpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuUHVsc2UpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5Pc2MpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQSBwYXJ0aWFsIHJlcHJlc2VudHNcblx0XHQgKiB0aGUgYW1wbGl0dWRlIGF0IGEgaGFybW9uaWMuIFRoZSBmaXJzdCBoYXJtb25pYyBpcyB0aGVcblx0XHQgKiBmdW5kYW1lbnRhbCBmcmVxdWVuY3ksIHRoZSBzZWNvbmQgaXMgdGhlIG9jdGF2ZSBhbmQgc28gb25cblx0XHQgKiBmb2xsb3dpbmcgdGhlIGhhcm1vbmljIHNlcmllcy5cblx0XHQgKiBTZXR0aW5nIHRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdHlwZSB0byBcImN1c3RvbVwiLlxuXHRcdCAqIFRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSB0eXBlIGlzIG5vdCBcImN1c3RvbVwiLlxuXHRcdCAqIFRoaXMgaXMgbm90IGF2YWlsYWJsZSBvbiBcInB3bVwiIGFuZCBcInB1bHNlXCIgb3NjaWxsYXRvciB0eXBlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGFydGlhbHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnBhcnRpYWxzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGFydGlhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCBhIG1lbWJlci9hdHRyaWJ1dGUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gcGFyYW1zXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmFtcFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuT21uaU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChwYXJhbXMsIHZhbHVlKSB7XG5cdCAgICAgICAgLy9tYWtlIHN1cmUgdGhlIHR5cGUgaXMgc2V0IGZpcnN0XG5cdCAgICAgICAgaWYgKHBhcmFtcyA9PT0gJ3R5cGUnKSB7XG5cdCAgICAgICAgICAgIHRoaXMudHlwZSA9IHZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc09iamVjdChwYXJhbXMpICYmIHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgndHlwZScpKSB7XG5cdCAgICAgICAgICAgIHRoaXMudHlwZSA9IHBhcmFtcy50eXBlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3RoZW4gc2V0IHRoZSByZXN0XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuc2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdGhlIG9zY2lsbGF0b3IgdG8gdGhlIGZyZXF1ZW5jeSBhbmQgZGV0dW5lIHNpZ25hbHNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLl9jcmVhdGVOZXdPc2NpbGxhdG9yID0gZnVuY3Rpb24gKG9zY1R5cGUpIHtcblx0ICAgICAgICBpZiAob3NjVHlwZSAhPT0gdGhpcy5fc291cmNlVHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VUeXBlID0gb3NjVHlwZTtcblx0ICAgICAgICAgICAgdmFyIE9zY2lsbGF0b3JDb25zdHJ1Y3RvciA9IFRvbmVbb3NjVHlwZV07XG5cdCAgICAgICAgICAgIC8vc2hvcnQgZGVsYXkgdG8gYXZvaWQgY2xpY2tzIG9uIHRoZSBjaGFuZ2Vcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgb2xkT3NjID0gdGhpcy5fb3NjaWxsYXRvcjtcblx0ICAgICAgICAgICAgICAgIG9sZE9zYy5zdG9wKG5vdyk7XG5cdCAgICAgICAgICAgICAgICAvL2Rpc3Bvc2UgdGhlIG9sZCBvbmVcblx0ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbGRPc2MuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgICAgIG9sZE9zYyA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICB9LCB0aGlzLmJsb2NrVGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG5ldyBPc2NpbGxhdG9yQ29uc3RydWN0b3IoKTtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3QodGhpcy5fb3NjaWxsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KG5vdyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB3aWR0aCBvZiB0aGUgb3NjaWxsYXRvciAob25seSBpZiB0aGUgb3NjaWxsYXRvciBpcyBzZXQgdG8gXCJwdWxzZVwiKVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiBAc2lnbmFsXG5cdFx0ICogQG5hbWUgd2lkdGhcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBvbW5pT3NjID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3IoNDQwLCBcInB1bHNlXCIpO1xuXHRcdCAqIC8vY2FuIGFjY2VzcyB0aGUgd2lkdGggYXR0cmlidXRlIG9ubHkgaWYgdHlwZSA9PT0gXCJwdWxzZVwiXG5cdFx0ICogb21uaU9zYy53aWR0aC52YWx1ZSA9IDAuMjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3dpZHRoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuUHVsc2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLndpZHRoO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIGRldHVuZWQgb3NjaWxsYXRvcnNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGNvdW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdjb3VudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IuY291bnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGNvdW50KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY291bnQgPSBjb3VudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRldHVuZSBzcHJlYWQgYmV0d2VlbiB0aGUgb3NjaWxsYXRvcnMuIElmIFwiY291bnRcIiBpc1xuXHRcdCAqIHNldCB0byAzIG9zY2lsbGF0b3JzIGFuZCB0aGUgXCJzcHJlYWRcIiBpcyBzZXQgdG8gNDAsXG5cdFx0ICogdGhlIHRocmVlIG9zY2lsbGF0b3JzIHdvdWxkIGJlIGRldHVuZWQgbGlrZSB0aGlzOiBbLTIwLCAwLCAyMF1cblx0XHQgKiBmb3IgYSB0b3RhbCBkZXR1bmUgc3ByZWFkIG9mIDQwIGNlbnRzLiBTZWUgVG9uZS5GYXRPc2NpbGxhdG9yXG5cdFx0ICogZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7Q2VudHN9XG5cdFx0ICogQG5hbWUgc3ByZWFkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnNwcmVhZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ByZWFkKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3ByZWFkID0gc3ByZWFkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3IuIE9ubHkgaWYgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiBpcyBzZXQgdG8gXCJhbVwiIG9yIFwiZm1cIiB0eXBlcy4gc2VlLiBUb25lLkFNT3NjaWxsYXRvciBvciBUb25lLkZNT3NjaWxsYXRvclxuXHRcdCAqIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uVHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvblR5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSB8fCB0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvblR5cGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1UeXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSB8fCB0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uVHlwZSA9IG1UeXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbW9kdWxhdGlvbiBpbmRleCB3aGljaCBpcyBpbiBlc3NlbmNlIHRoZSBkZXB0aCBvciBhbW91bnQgb2YgdGhlIG1vZHVsYXRpb24uIEluIG90aGVyIHRlcm1zIGl0IGlzIHRoZVxuXHRcdCAqIHJhdGlvIG9mIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1vZHVsYXRpbmcgc2lnbmFsIChtZikgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGVcblx0XHQgKiBtb2R1bGF0aW5nIHNpZ25hbCAobWEpIC0tIGFzIGluIG1hL21mLlxuXHRcdCAqIFNlZSBUb25lLkZNT3NjaWxsYXRvciBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAc2lnbmFsXG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvbkluZGV4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uSW5kZXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvbkluZGV4O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSBjYXJyaWVyIGFuZCB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3JzLlxuXHRcdCAqICBBIGhhcm1vbmljaXR5IG9mIDEgZ2l2ZXMgYm90aCBvc2NpbGxhdG9ycyB0aGUgc2FtZSBmcmVxdWVuY3kuXG5cdFx0ICogIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuIFNlZSBUb25lLkFNT3NjaWxsYXRvciBvciBUb25lLkZNT3NjaWxsYXRvclxuXHRcdCAqICBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiAgQHNpZ25hbFxuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGhhcm1vbmljaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdoYXJtb25pY2l0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNIHx8IHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5oYXJtb25pY2l0eTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1vZHVsYXRpb25GcmVxdWVuY3kgU2lnbmFsIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogKG9ubHkgaWYgdGhlIG9zY2lsbGF0b3IgdHlwZSBpcyBzZXQgdG8gcHdtKS4gU2VlXG5cdFx0ICogVG9uZS5QV01Pc2NpbGxhdG9yIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAc2lnbmFsXG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvbkZyZXF1ZW5jeVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIG9tbmlPc2MgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcig0NDAsIFwicHdtXCIpO1xuXHRcdCAqIC8vY2FuIGFjY2VzcyB0aGUgbW9kdWxhdGlvbkZyZXF1ZW5jeSBhdHRyaWJ1dGUgb25seSBpZiB0eXBlID09PSBcInB3bVwiXG5cdFx0ICogb21uaU9zYy5tb2R1bGF0aW9uRnJlcXVlbmN5LnZhbHVlID0gMC4yO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnbW9kdWxhdGlvbkZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLlBXTSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IubW9kdWxhdGlvbkZyZXF1ZW5jeTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLk9tbmlPc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc291cmNlVHlwZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT21uaU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQmFzZS1jbGFzcyBmb3IgYWxsIGluc3RydW1lbnRzXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkluc3RydW1lbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCBhbmQgdm9sdW1lIHRyaW1pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBzb3VyY2Uudm9sdW1lLnZhbHVlID0gLTY7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogS2VlcCB0cmFjayBvZiBhbGwgZXZlbnRzIHNjaGVkdWxlZCB0byB0aGUgdHJhbnNwb3J0XG5cdFx0XHQgKiB3aGVuIHRoZSBpbnN0cnVtZW50IGlzICdzeW5jZWQnXG5cdFx0XHQgKiBAdHlwZSB7QXJyYXk8TnVtYmVyPn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSBbXTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkluc3RydW1lbnQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzXG5cdFx0ICogIEB0eXBlIHtvYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgLyoqIHRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscyAqL1xuXHQgICAgICAgICd2b2x1bWUnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5vdGUgdGhlIG5vdGUgdG8gdHJpZ2dlclxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdG8gdHJpZ2dlciB0aGUgbnRvZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSB0byB0cmlnZ2VyIHRoZSBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBUb25lLm5vT3A7XG5cdCAgICAvKipcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB3aGVuIHRvIHRyaWdnZXIgdGhlIHJlbGVhc2Vcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBUb25lLm5vT3A7XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIGluc3RydW1lbnQuc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBpbnN0cnVtZW50LnRyaWdnZXJBdHRhY2tSZWxlYXNlKCdDNCcsICc4bicsIDApXG5cdFx0ICogaW5zdHJ1bWVudC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnRTQnLCAnOG4nLCAnOG4nKVxuXHRcdCAqIGluc3RydW1lbnQudHJpZ2dlckF0dGFja1JlbGVhc2UoJ0c0JywgJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyQXR0YWNrJywgMSk7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlclJlbGVhc2UnLCAwKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBXcmFwIHRoZSBnaXZlbiBtZXRob2Qgc28gdGhhdCBpdCBjYW4gYmUgc3luY2hyb25pemVkXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZCBXaGljaCBtZXRob2QgdG8gd3JhcCBhbmQgc3luY1xuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZVBvc2l0aW9uIFdoYXQgcG9zaXRpb24gdGhlIHRpbWUgYXJndW1lbnQgYXBwZWFycyBpblxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLl9zeW5jTWV0aG9kID0gZnVuY3Rpb24gKG1ldGhvZCwgdGltZVBvc2l0aW9uKSB7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsTWV0aG9kID0gdGhpc1snX29yaWdpbmFsXycgKyBtZXRob2RdID0gdGhpc1ttZXRob2RdO1xuXHQgICAgICAgIHRoaXNbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB2YXIgdGltZSA9IGFyZ3NbdGltZVBvc2l0aW9uXTtcblx0ICAgICAgICAgICAgdmFyIGlkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgICAgIGFyZ3NbdGltZVBvc2l0aW9uXSA9IHQ7XG5cdCAgICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzLnB1c2goaWQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIGluc3RydW1lbnQgZnJvbSB0aGUgVHJhbnNwb3J0XG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGlkKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSBbXTtcblx0ICAgICAgICBpZiAodGhpcy5fb3JpZ2luYWxfdHJpZ2dlckF0dGFjaykge1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sgPSB0aGlzLl9vcmlnaW5hbF90cmlnZ2VyQXR0YWNrO1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlID0gdGhpcy5fb3JpZ2luYWxfdHJpZ2dlclJlbGVhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHRoZW4gdGhlIHJlbGVhc2UgYWZ0ZXIgdGhlIGR1cmF0aW9uLlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHRyaWdnZXIuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBub3RlIHNob3VsZCBiZSBoZWxkIGZvciBiZWZvcmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmluZyB0aGUgcmVsZWFzZS4gVGhpcyB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gIFdoZW4gdGhlIG5vdGUgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgdGhlIG5vdGUgc2hvdWxkIGJlIHRyaWdnZXJlZCBhdC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciBcIkM0XCIgZm9yIHRoZSBkdXJhdGlvbiBvZiBhbiA4dGggbm90ZVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAobm90ZSwgZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayhub3RlLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSh0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd2b2x1bWUnXSk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5JbnN0cnVtZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRoaXMgaXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3Igb3RoZXIgbW9ub3Bob25pYyBpbnN0cnVtZW50cyB0byBcblx0XHQgKiAgICAgICAgICBleHRlbmQuIElNUE9SVEFOVDogSXQgZG9lcyBub3QgbWFrZSBhbnkgc291bmQgb24gaXRzIG93biBhbmRcblx0XHQgKiAgICAgICAgICBzaG91bGRuJ3QgYmUgZGlyZWN0bHkgaW5zdGFudGlhdGVkLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1vbm9waG9uaWMuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnbGlkZSB0aW1lIGJldHdlZW4gbm90ZXMuIFxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wb3J0YW1lbnRvID0gb3B0aW9ucy5wb3J0YW1lbnRvO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9ub3Bob25pYywgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLmRlZmF1bHRzID0geyAncG9ydGFtZW50byc6IDAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgb2YgdGhlIG5vdGUgb3B0aW9uYWxseSB3aXRoIGEgZ2l2ZW4gdmVsb2NpdHkuIFxuXHRcdCAqICBcblx0XHQgKiAgXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gdHJpZ2dlci5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgV2hlbiB0aGUgbm90ZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHZlbG9jaXR5IFRoZSB2ZWxvY2l0eSBzY2FsZXIgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZXMgaG93IFwibG91ZFwiIHRoZSBub3RlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub3Bob25pY30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2soXCJDNFwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgdGhlIG5vdGUgYSBoYWxmIHNlY29uZCBmcm9tIG5vdyBhdCBoYWxmIHZlbG9jaXR5XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFjayhcIkM0XCIsIFwiKzAuNVwiLCAwLjUpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5zZXROb3RlKG5vdGUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gSWYgbm8gdGltZSBpcyBnaXZlbiwgdGhlIHJlbGVhc2UgaGFwcGVucyBpbW1lZGlhdGx5XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9waG9uaWN9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzeW50aC50cmlnZ2VyUmVsZWFzZSgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggdGhlIGFjdHVhbCBtZXRob2Rcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggdGhlIGFjdHVhbCBtZXRob2Rcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGxldmVsIG9mIHRoZSBvdXRwdXQgYXQgdGhlIGdpdmVuIHRpbWUuIE1lYXN1cmVzXG5cdFx0ICogIHRoZSBlbnZlbG9wZShzKSB2YWx1ZSBhdCB0aGUgdGltZS4gXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0byBxdWVyeSB0aGUgZW52ZWxvcGUgdmFsdWVcblx0XHQgKiAgQHJldHVybiB7Tm9ybWFsUmFuZ2V9IFRoZSBvdXRwdXQgbGV2ZWwgYmV0d2VlbiAwLTFcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZ2V0TGV2ZWxBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5lbnZlbG9wZS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBub3RlIGF0IHRoZSBnaXZlbiB0aW1lLiBJZiBubyB0aW1lIGlzIGdpdmVuLCB0aGUgbm90ZVxuXHRcdCAqICB3aWxsIHNldCBpbW1lZGlhdGVseS4gXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBub3RlIFRoZSBub3RlIHRvIGNoYW5nZSB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBub3RlIHNob3VsZCBiZSBzZXQuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vcGhvbmljfSB0aGlzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2NoYW5nZSB0byBGIzYgaW4gb25lIHF1YXJ0ZXIgbm90ZSBmcm9tIG5vdy5cblx0XHQgKiBzeW50aC5zZXROb3RlKFwiRiM2XCIsIFwiKzRuXCIpO1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jaGFuZ2UgdG8gQmI0IHJpZ2h0IG5vd1xuXHRcdCAqIHN5bnRoLnNldE5vdGUoXCJCYjRcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLnNldE5vdGUgPSBmdW5jdGlvbiAobm90ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5wb3J0YW1lbnRvID4gMCAmJiB0aGlzLmdldExldmVsQXRUaW1lKHRpbWUpID4gMC4wNSkge1xuXHQgICAgICAgICAgICB2YXIgcG9ydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLnBvcnRhbWVudG8pO1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5leHBvbmVudGlhbFJhbXBUbyhub3RlLCBwb3J0VGltZSwgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUobm90ZSwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vbm9waG9uaWM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5TeW50aCBpcyBjb21wb3NlZCBzaW1wbHkgb2YgYSBUb25lLk9tbmlPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICAgcm91dGVkIHRocm91Z2ggYSBUb25lLkFtcGxpdHVkZUVudmVsb3BlLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xLTFfMFlXMloxSjJFUEkzNlA4Zk5DTWNaRzdOMXcxR1psdVBzNG9nNGV2by9wdWI/dz0xMTYzJmg9MjMxXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT21uaU9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihvcHRpb25zLm9zY2lsbGF0b3IpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5vc2NpbGxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5vc2NpbGxhdG9yLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgb3NjaWxsYXRvcnMgdG8gdGhlIG91dHB1dFxuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5jaGFpbih0aGlzLmVudmVsb3BlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3RyaWFuZ2xlJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDA1LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMC4zLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDFcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBhdHRhY2sgc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgLy9pZiB0aGVyZSBpcyBubyByZWxlYXNlIHBvcnRpb24sIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQU1TeW50aCB1c2VzIHRoZSBvdXRwdXQgb2Ygb25lIFRvbmUuU3ludGggdG8gbW9kdWxhdGUgdGhlXG5cdFx0ICogICAgICAgICAgYW1wbGl0dWRlIG9mIGFub3RoZXIgVG9uZS5TeW50aC4gVGhlIGhhcm1vbmljaXR5ICh0aGUgcmF0aW8gYmV0d2VlblxuXHRcdCAqICAgICAgICAgIHRoZSB0d28gc2lnbmFscykgYWZmZWN0cyB0aGUgdGltYnJlIG9mIHRoZSBvdXRwdXQgc2lnbmFsIGdyZWF0bHkuXG5cdFx0ICogICAgICAgICAgUmVhZCBtb3JlIGFib3V0IEFtcGxpdHVkZSBNb2R1bGF0aW9uIFN5bnRoZXNpcyBvblxuXHRcdCAqICAgICAgICAgIFtTb3VuZE9uU291bmRdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwNDEwMzY1My9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb206ODAvc29zL21hcjAwL2FydGljbGVzL3N5bnRoc2VjcmV0cy5odG0pLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xVFF1OEVkNGlGcjFZVExLcEIzVTFfaHVyLVV3QnJoNWdkQlhjOEJ4ZkdLdy9wdWI/dz0xMDA5Jmg9NDU3XCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5BTVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5BTVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLlN5bnRoKCk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIncyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IHRoaXMuX2NhcnJpZXIub3NjaWxsYXRvcjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gdGhpcy5fY2Fycmllci5lbnZlbG9wZS5zZXQob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuU3ludGgoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBvc2NpbGxhdG9yIHdoaWNoIGlzIGFwcGxpZWRcblx0XHRcdCAqICB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IHRoaXMuX21vZHVsYXRvci5vc2NpbGxhdG9yLnNldChvcHRpb25zLm1vZHVsYXRpb24pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBlbnZlbG9wZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSB0aGlzLl9tb2R1bGF0b3IuZW52ZWxvcGUuc2V0KG9wdGlvbnMubW9kdWxhdGlvbkVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoNDQwLCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhcm1vbmljaXR5IGlzIHRoZSByYXRpbyBiZXR3ZWVuIHRoZSB0d28gdm9pY2VzLiBBIGhhcm1vbmljaXR5IG9mXG5cdFx0XHQgKiAgMSBpcyBubyBjaGFuZ2UuIEhhcm1vbmljaXR5ID0gMiBtZWFucyBhIGNoYW5nZSBvZiBhbiBvY3RhdmUuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy9waXRjaCB2b2ljZTEgYW4gb2N0YXZlIGJlbG93IHZvaWNlMFxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb252ZXJ0IHRoZSAtMSwxIG91dHB1dCB0byAwLDFcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BdWRpb1RvR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSB0d28gdm9pY2VzIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmZhbih0aGlzLl9jYXJyaWVyLmRldHVuZSwgdGhpcy5fbW9kdWxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmNoYWluKHRoaXMuX21vZHVsYXRpb25TY2FsZSwgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5jaGFpbih0aGlzLl9tb2R1bGF0aW9uTm9kZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFNU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDMsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4wMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ21vZHVsYXRpb24nOiB7ICd0eXBlJzogJ3NxdWFyZScgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC41LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCBvY2N1clxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIC8vdGhlIHBvcnQgZ2xpZGVcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIHJlbGVhc2Vcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQU1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFNU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Nb25vU3ludGggaXMgY29tcG9zZWQgb2Ygb25lIG9zY2lsbGF0b3IsIG9uZSBmaWx0ZXIsIGFuZCB0d28gZW52ZWxvcGVzLlxuXHRcdCAqICAgICAgICAgIFRoZSBhbXBsaXR1ZGUgb2YgdGhlIFRvbmUuT3NjaWxsYXRvciBhbmQgdGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlXG5cdFx0ICogICAgICAgICAgVG9uZS5GaWx0ZXIgYXJlIGNvbnRyb2xsZWQgYnkgVG9uZS5FbnZlbG9wZXMuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFnYVkxREY5X0h6a29kcWY4SkkxQ2cyVlpmd1NFbHBGUWZJOTRJUXdhZDM4L3B1Yj93PTkyNCZoPTI0MFwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLk1vbm9TeW50aCh7XG5cdFx0ICogXHRcIm9zY2lsbGF0b3JcIiA6IHtcblx0XHQgKiBcdFx0XCJ0eXBlXCIgOiBcInNxdWFyZVwiXG5cdFx0ICogIH0sXG5cdFx0ICogIFwiZW52ZWxvcGVcIiA6IHtcblx0XHQgKiAgXHRcImF0dGFja1wiIDogMC4xXG5cdFx0ICogIH1cblx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTW9ub1N5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5PbW5pT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKG9wdGlvbnMub3NjaWxsYXRvcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLm9zY2lsbGF0b3IuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5maWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIob3B0aW9ucy5maWx0ZXIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmaWx0ZXIgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRnJlcXVlbmN5RW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlID0gbmV3IFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUob3B0aW9ucy5maWx0ZXJFbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIG9zY2lsbGF0b3JzIHRvIHRoZSBvdXRwdXRcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuY2hhaW4odGhpcy5maWx0ZXIsIHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGZpbHRlciBlbnZlbG9wZVxuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUuY29ubmVjdCh0aGlzLmZpbHRlci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmaWx0ZXInLFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb25vU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAnQzQnLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzcXVhcmUnIH0sXG5cdCAgICAgICAgJ2ZpbHRlcic6IHtcblx0ICAgICAgICAgICAgJ1EnOiA2LFxuXHQgICAgICAgICAgICAndHlwZSc6ICdsb3dwYXNzJyxcblx0ICAgICAgICAgICAgJ3JvbGxvZmYnOiAtMjRcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDA1LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMC45LFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDFcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdmaWx0ZXJFbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDYsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMixcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjUsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMixcblx0ICAgICAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJzogNyxcblx0ICAgICAgICAgICAgJ2V4cG9uZW50JzogMlxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vdGhlIGVudmVsb3Blc1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub1N5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdmaWx0ZXInLFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Nb25vU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5EdW9TeW50aCBpcyBhIG1vbm9waG9uaWMgc3ludGggY29tcG9zZWQgb2YgdHdvXG5cdFx0ICogICAgICAgICAgTW9ub1N5bnRocyBydW4gaW4gcGFyYWxsZWwgd2l0aCBjb250cm9sIG92ZXIgdGhlXG5cdFx0ICogICAgICAgICAgZnJlcXVlbmN5IHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMgYW5kIHZpYnJhdG8gZWZmZWN0LlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZHJhd2luZ3MvZC8xYkw0R1h2ZlJNTWxxUzdYeUJtOUNqTDlLSlBTVUtiY2RCTnBxT2xrRkx4ay9wdWI/dz0xMDEyJmg9NDQ4XCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGR1b1N5bnRoID0gbmV3IFRvbmUuRHVvU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIGR1b1N5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCIyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5EdW9TeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZpcnN0IHZvaWNlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTW9ub1N5bnRofVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2ljZTAgPSBuZXcgVG9uZS5Nb25vU3ludGgob3B0aW9ucy52b2ljZTApO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2Vjb25kIHZvaWNlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTW9ub1N5bnRofVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2ljZTEgPSBuZXcgVG9uZS5Nb25vU3ludGgob3B0aW9ucy52b2ljZTEpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmlicmF0byBMRk8uXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92aWJyYXRvID0gbmV3IFRvbmUuTEZPKG9wdGlvbnMudmlicmF0b1JhdGUsIC01MCwgNTApO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8uc3RhcnQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSB2aWJyYXRvIGZyZXF1ZW5jeVxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmlicmF0b1JhdGUgPSB0aGlzLl92aWJyYXRvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgdmlicmF0byBnYWluXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMudmlicmF0b0Ftb3VudCwgVG9uZS5UeXBlLlBvc2l0aXZlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbW91bnQgb2YgdmlicmF0b1xuXHRcdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52aWJyYXRvQW1vdW50ID0gdGhpcy5fdmlicmF0b0dhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZnJlcXVlbmN5IGNvbnRyb2xcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDQ0MCwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMuIEEgaGFybW9uaWNpdHkgb2Zcblx0XHRcdCAqICAxIGlzIG5vIGNoYW5nZS4gSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHZvaWNlMSBhbiBvY3RhdmUgYmVsb3cgdm9pY2UwXG5cdFx0XHQgKiBkdW9TeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8vY29udHJvbCB0aGUgdHdvIHZvaWNlcyBmcmVxdWVuY3lcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMudm9pY2UwLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy52b2ljZTEuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvLmNvbm5lY3QodGhpcy5fdmlicmF0b0dhaW4pO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG9HYWluLmZhbih0aGlzLnZvaWNlMC5kZXR1bmUsIHRoaXMudm9pY2UxLmRldHVuZSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAndm9pY2UwJyxcblx0ICAgICAgICAgICAgJ3ZvaWNlMScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndmlicmF0b0Ftb3VudCcsXG5cdCAgICAgICAgICAgICd2aWJyYXRvUmF0ZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkR1b1N5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZpYnJhdG9BbW91bnQnOiAwLjUsXG5cdCAgICAgICAgJ3ZpYnJhdG9SYXRlJzogNSxcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAxLjUsXG5cdCAgICAgICAgJ3ZvaWNlMCc6IHtcblx0ICAgICAgICAgICAgJ3ZvbHVtZSc6IC0xMCxcblx0ICAgICAgICAgICAgJ3BvcnRhbWVudG8nOiAwLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAgICAgJ2ZpbHRlckVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3ZvaWNlMSc6IHtcblx0ICAgICAgICAgICAgJ3ZvbHVtZSc6IC0xMCxcblx0ICAgICAgICAgICAgJ3BvcnRhbWVudG8nOiAwLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAgICAgJ2ZpbHRlckVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICAgICAnZGVjYXknOiAwLFxuXHQgICAgICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXNcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EdW9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnZvaWNlMS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVzXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EdW9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMudm9pY2UwLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIGxldmVsIG9mIHRoZSBvdXRwdXQgYXQgdGhlIGdpdmVuIHRpbWUuIE1lYXN1cmVzXG5cdFx0ICogIHRoZSBlbnZlbG9wZShzKSB2YWx1ZSBhdCB0aGUgdGltZS4gXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0byBxdWVyeSB0aGUgZW52ZWxvcGUgdmFsdWVcblx0XHQgKiAgQHJldHVybiB7Tm9ybWFsUmFuZ2V9IFRoZSBvdXRwdXQgbGV2ZWwgYmV0d2VlbiAwLTFcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGgucHJvdG90eXBlLmdldExldmVsQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gKHRoaXMudm9pY2UwLmdldExldmVsQXRUaW1lKHRpbWUpICsgdGhpcy52b2ljZTEuZ2V0TGV2ZWxBdFRpbWUodGltZSkpIC8gMjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRHVvU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRHVvU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAndm9pY2UwJyxcblx0ICAgICAgICAgICAgJ3ZvaWNlMScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndmlicmF0b0Ftb3VudCcsXG5cdCAgICAgICAgICAgICd2aWJyYXRvUmF0ZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmlicmF0b0Ftb3VudC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy52aWJyYXRvQW1vdW50ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZpYnJhdG9SYXRlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5EdW9TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBGTVN5bnRoIGlzIGNvbXBvc2VkIG9mIHR3byBUb25lLlN5bnRocyB3aGVyZSBvbmUgVG9uZS5TeW50aCBtb2R1bGF0ZXNcblx0XHQgKiAgICAgICAgICB0aGUgZnJlcXVlbmN5IG9mIGEgc2Vjb25kIFRvbmUuU3ludGguIEEgbG90IG9mIHNwZWN0cmFsIGNvbnRlbnRcblx0XHQgKiAgICAgICAgICBjYW4gYmUgZXhwbG9yZWQgdXNpbmcgdGhlIG1vZHVsYXRpb25JbmRleCBwYXJhbWV0ZXIuIFJlYWQgbW9yZSBhYm91dFxuXHRcdCAqICAgICAgICAgIGZyZXF1ZW5jeSBtb2R1bGF0aW9uIHN5bnRoZXNpcyBvbiBTb3VuZCBPbiBTb3VuZDogW1BhcnQgMV0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDAzMTIzNzA0L2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvYXByMDAvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmh0bSksIFtQYXJ0IDJdKGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE2MDQwMzExNTgzNS9odHRwOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL21heTAwL2FydGljbGVzL3N5bnRoLmh0bSkuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFoMFBVRFpYUGdpNElreDZiVlQ2b25jcllQTGx1Rkt5N2xqNTNwdXhqLURNL3B1Yj93PTkwMiZoPTQ2MlwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Nb25vcGhvbmljfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBmbVN5bnRoID0gbmV3IFRvbmUuRk1TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogZm1TeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM1XCIsIFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5GTVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciB2b2ljZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TeW50aH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLlN5bnRoKG9wdGlvbnMuY2Fycmllcik7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIncyBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IHRoaXMuX2NhcnJpZXIub3NjaWxsYXRvcjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSB0aGlzLl9jYXJyaWVyLmVudmVsb3BlLnNldChvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5TeW50aChvcHRpb25zLm1vZHVsYXRvcik7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yJ3Mgb3NjaWxsYXRvciB3aGljaCBpcyBhcHBsaWVkXG5cdFx0XHQgKiAgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSB0aGlzLl9tb2R1bGF0b3Iub3NjaWxsYXRvci5zZXQob3B0aW9ucy5tb2R1bGF0aW9uKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSB0aGlzLl9tb2R1bGF0b3IuZW52ZWxvcGUuc2V0KG9wdGlvbnMubW9kdWxhdGlvbkVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbCg0NDAsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHNcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMuIEEgaGFybW9uaWNpdHkgb2Zcblx0XHRcdCAqICAxIGlzIG5vIGNoYW5nZS4gSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHZvaWNlMSBhbiBvY3RhdmUgYmVsb3cgdm9pY2UwXG5cdFx0XHQgKiBzeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW9uIGluZGV4IHdoaWNoIGVzc2VudGlhbGx5IHRoZSBkZXB0aCBvciBhbW91bnQgb2YgdGhlIG1vZHVsYXRpb24uIEl0IGlzIHRoZVxuXHRcdFx0ICogIHJhdGlvIG9mIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG1vZHVsYXRpbmcgc2lnbmFsIChtZikgdG8gdGhlIGFtcGxpdHVkZSBvZiB0aGVcblx0XHRcdCAqICBtb2R1bGF0aW5nIHNpZ25hbCAobWEpIC0tIGFzIGluIG1hL21mLlxuXHRcdFx0ICpcdEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqXHRAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMubW9kdWxhdGlvbkluZGV4KTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleC51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG5ldyBUb25lLkdhaW4oMCk7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSB0d28gdm9pY2VzIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMuaGFybW9uaWNpdHksIHRoaXMuX21vZHVsYXRvci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKHRoaXMubW9kdWxhdGlvbkluZGV4LCB0aGlzLl9tb2R1bGF0aW9uTm9kZSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZmFuKHRoaXMuX2NhcnJpZXIuZGV0dW5lLCB0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY29ubmVjdCh0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GTVN5bnRoLCBUb25lLk1vbm9waG9uaWMpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiAzLFxuXHQgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnOiAxMCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjAxLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbic6IHsgJ3R5cGUnOiAnc3F1YXJlJyB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogXHR0cmlnZ2VyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCBvY2N1clxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GTVN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgdHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIHJlbGVhc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRk1TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GTVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZNU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5NZW1icmFuZVN5bnRoIG1ha2VzIGtpY2sgYW5kIHRvbSBzb3VuZHMgdXNpbmcgYSBzaW5nbGUgb3NjaWxsYXRvclxuXHRcdCAqICAgICAgICAgIHdpdGggYW4gYW1wbGl0dWRlIGVudmVsb3BlIGFuZCBmcmVxdWVuY3kgcmFtcC4gQSBUb25lLk9tbmlPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICAgaXMgcm91dGVkIHRocm91Z2ggYSBUb25lLkFtcGxpdHVkZUVudmVsb3BlIHRvIHRoZSBvdXRwdXQuIFRoZSBkcnVtXG5cdFx0ICogICAgICAgICAgcXVhbGl0eSBvZiB0aGUgc291bmQgY29tZXMgZnJvbSB0aGUgZnJlcXVlbmN5IGVudmVsb3BlIGFwcGxpZWRcblx0XHQgKiAgICAgICAgICBkdXJpbmcgVG9uZS5NZW1icmFuZVN5bnRoLnRyaWdnZXJBdHRhY2sobm90ZSkuIFRoZSBmcmVxdWVuY3kgZW52ZWxvcGVcblx0XHQgKiAgICAgICAgICBzdGFydHMgYXQgPGNvZGU+bm90ZSAqIC5vY3RhdmVzPC9jb2RlPiBhbmQgcmFtcHMgdG8gPGNvZGU+bm90ZTwvY29kZT5cblx0XHQgKiAgICAgICAgICBvdmVyIHRoZSBkdXJhdGlvbiBvZiA8Y29kZT4ucGl0Y2hEZWNheTwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuTWVtYnJhbmVTeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDMlwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTWVtYnJhbmVTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT21uaU9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcihvcHRpb25zLm9zY2lsbGF0b3IpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoZSBwaXRjaCBlbnZlbG9wZSByYW1wcy5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBmcmVxdWVuY3kgZW52ZWxvcGUgdGFrZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBpdGNoRGVjYXkgPSBvcHRpb25zLnBpdGNoRGVjYXk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmNoYWluKHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWVtYnJhbmVTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BpdGNoRGVjYXknOiAwLjA1LFxuXHQgICAgICAgICdvY3RhdmVzJzogMTAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NpbmUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuNCxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDEuNCxcblx0ICAgICAgICAgICAgJ2F0dGFja0N1cnZlJzogJ2V4cG9uZW50aWFsJ1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgbm90ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoIHRoZSBnaXZlbiB2ZWxvY2l0eS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIHRoZSB0aW1lLCBpZiBub3QgZ2l2ZW4gaXMgbm93XG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHZlbG9jaXR5IGRlZmF1bHRzIHRvIDFcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVtYnJhbmVTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICBraWNrLnRyaWdnZXJBdHRhY2soNjApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIG5vdGUgPSB0aGlzLnRvRnJlcXVlbmN5KG5vdGUpO1xuXHQgICAgICAgIHZhciBtYXhOb3RlID0gbm90ZSAqIHRoaXMub2N0YXZlcztcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKG1heE5vdGUsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZShub3RlLCB0aW1lICsgdGhpcy50b1NlY29uZHModGhpcy5waXRjaERlY2F5KSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgbm90ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgcmVsZWFzZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZW1icmFuZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3Iuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lbWJyYW5lU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NZW1icmFuZVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgSW5oYXJtb25pYyByYXRpbyBvZiBmcmVxdWVuY2llcyBiYXNlZCBvbiB0aGUgUm9sYW5kIFRSLTgwOFxuXHRcdCAqICBUYWtlbiBmcm9tIGh0dHBzOi8vY2NybWEuc3RhbmZvcmQuZWR1L3BhcGVycy90ci04MDgtY3ltYmFsLXBoeXNpY2FsbHktaW5mb3JtZWQtY2lyY3VpdC1iZW5kYWJsZS1kaWdpdGFsLW1vZGVsXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGluaGFybVJhdGlvcyA9IFtcblx0ICAgICAgICAxLFxuXHQgICAgICAgIDEuNDgzLFxuXHQgICAgICAgIDEuOTMyLFxuXHQgICAgICAgIDIuNTQ2LFxuXHQgICAgICAgIDIuNjMsXG5cdCAgICAgICAgMy44OTdcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBIGhpZ2hseSBpbmhhcm1vbmljIGFuZCBzcGVjdHJhbGx5IGNvbXBsZXggc291cmNlIHdpdGggYSBoaWdocGFzcyBmaWx0ZXJcblx0XHQgKiAgICAgICAgICBhbmQgYW1wbGl0dWRlIGVudmVsb3BlIHdoaWNoIGlzIGdvb2QgZm9yIG1ha2luZyBtZXRhbG9waG9uZSBzb3VuZHMuIEJhc2VkXG5cdFx0ICogICAgICAgICAgb24gQ3ltYmFsU3ludGggYnkgW0Bwb2x5cmh5dGhtYXRpY10oaHR0cHM6Ly9naXRodWIuY29tL3BvbHlyaHl0aG1hdGljKS5cblx0XHQgKiAgICAgICAgICBJbnNwaXJhdGlvbiBmcm9tIFtTb3VuZCBvbiBTb3VuZF0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNjEwMTQzOTI0L2h0dHBzOi8vd3d3LnNvdW5kb25zb3VuZC5jb20vc29zL2p1bDAyL2FydGljbGVzL3N5bnRoc2VjcmV0czA3MDIuYXNwKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBUaGUgb3B0aW9ucyBhdmFpbGJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTWV0YWxTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgY3ltYmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiBGTU9zY2lsbGF0b3JzXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG11bHRpcGxpZXJzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mcmVxTXVsdGlwbGllcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGZvciB0aGUgYm9keVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVlID0gbmV3IFRvbmUuR2FpbigwKS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBoaWdocGFzcyB0aGUgb3V0cHV0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9oaWdocGFzcyA9IG5ldyBUb25lLkZpbHRlcih7XG5cdCAgICAgICAgICAgICd0eXBlJzogJ2hpZ2hwYXNzJyxcblx0ICAgICAgICAgICAgJ1EnOiAtMy4wMTAyOTk5NTY2Mzk4MTI1XG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoZSBoaWdocGFzc1xuXHRcdFx0ICogIGZpbHRlciBmcmVxdWVuY3kgcmFtcHNcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNjYWxlIHRoZSBib2R5IGVudmVsb3BlXG5cdFx0XHQgKiAgZm9yIHRoZSBiYW5kcGFzc1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNjYWxlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyID0gbmV3IFRvbmUuU2NhbGUob3B0aW9ucy5yZXNvbmFuY2UsIDcwMDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBlbnZlbG9wZSB3aGljaCBpcyBjb25uZWN0ZWQgYm90aCB0byB0aGVcblx0XHRcdCAqICBhbXBsaXR1ZGUgYW5kIGhpZ2hwYXNzIGZpbHRlcidzIGN1dG9mZiBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuRW52ZWxvcGUoe1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogb3B0aW9ucy5lbnZlbG9wZS5hdHRhY2ssXG5cdCAgICAgICAgICAgICdhdHRhY2tDdXJ2ZSc6ICdsaW5lYXInLFxuXHQgICAgICAgICAgICAnZGVjYXknOiBvcHRpb25zLmVudmVsb3BlLmRlY2F5LFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogb3B0aW9ucy5lbnZlbG9wZS5yZWxlYXNlXG5cdCAgICAgICAgfSkuY2hhaW4odGhpcy5fZmlsdGVyRnJlcVNjYWxlciwgdGhpcy5faGlnaHBhc3MuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmNvbm5lY3QodGhpcy5fYW1wbGl0dWUuZ2Fpbik7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmhhcm1SYXRpb3MubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIG9zYyA9IG5ldyBUb25lLkZNT3NjaWxsYXRvcih7XG5cdCAgICAgICAgICAgICAgICAndHlwZSc6ICdzcXVhcmUnLFxuXHQgICAgICAgICAgICAgICAgJ21vZHVsYXRpb25UeXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgICAgICAgICAnaGFybW9uaWNpdHknOiBvcHRpb25zLmhhcm1vbmljaXR5LFxuXHQgICAgICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IG9wdGlvbnMubW9kdWxhdGlvbkluZGV4XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBvc2MuY29ubmVjdCh0aGlzLl9oaWdocGFzcyk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldID0gb3NjO1xuXHQgICAgICAgICAgICB2YXIgbXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KGluaGFybVJhdGlvc1tpXSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVyc1tpXSA9IG11bHQ7XG5cdCAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNoYWluKG11bHQsIG9zYy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3NldCB0aGUgb2N0YXZlc1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1ldGFsU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMjAwLFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAxLjQsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC4yXG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnaGFybW9uaWNpdHknOiA1LjEsXG5cdCAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IDMyLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiA0MDAwLFxuXHQgICAgICAgICdvY3RhdmVzJzogMS41XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjay5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgICAgICBXaGVuIHRoZSBhdHRhY2sgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBbdmVsb2NpdHk9MV0gIFRoZSB2ZWxvY2l0eSB0aGF0IHRoZSBlbnZlbG9wZSBzaG91bGQgYmUgdHJpZ2dlcmVkIGF0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NZXRhbFN5bnRofSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbCkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2ZWwgPSBUb25lLmRlZmF1bHRBcmcodmVsLCAxKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vaWYgdGhlIHN1c3RhaW4gaXMgMCwgc3RvcCB0aGUgb3NjaWxsYXRvciBhcyB3ZWxsXG5cdCAgICAgICAgaWYgKHRoaXMuZW52ZWxvcGUuc3VzdGFpbiA9PT0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLmF0dGFjayArIHRoaXMuZW52ZWxvcGUuZGVjYXkpO1xuXHQgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICAgICAgV2hlbiB0aGUgcmVsZWFzZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NZXRhbFN5bnRofSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMuZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAwKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2Ugb2YgdGhlIGVudmVsb3BlIGFmdGVyIHRoZSBnaXZlblxuXHRcdCAqICBkdXJhdGlvbi5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIGR1cmF0aW9uICBUaGUgZHVyYXRpb24gYmVmb3JlIHRyaWdnZXJpbmcgdGhlIHJlbGVhc2Vcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgICAgICBXaGVuIHRoZSBhdHRhY2sgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9ICBbdmVsb2NpdHk9MV0gIFRoZSB2ZWxvY2l0eSB0aGF0IHRoZSBlbnZlbG9wZSBzaG91bGQgYmUgdHJpZ2dlcmVkIGF0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5NZXRhbFN5bnRofSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBtb2R1bGF0aW9uSW5kZXggb2YgdGhlIG9zY2lsbGF0b3JzIHdoaWNoIG1ha2UgdXAgdGhlIHNvdXJjZS5cblx0XHQgKiAgc2VlIFRvbmUuRk1Pc2NpbGxhdG9yLm1vZHVsYXRpb25JbmRleFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lICBtb2R1bGF0aW9uSW5kZXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLCAnbW9kdWxhdGlvbkluZGV4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvcnNbMF0ubW9kdWxhdGlvbkluZGV4LnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldLm1vZHVsYXRpb25JbmRleC52YWx1ZSA9IHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBoYXJtb25pY2l0eSBvZiB0aGUgb3NjaWxsYXRvcnMgd2hpY2ggbWFrZSB1cCB0aGUgc291cmNlLlxuXHRcdCAqICBzZWUgVG9uZS5GTU9zY2lsbGF0b3IuaGFybW9uaWNpdHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTWV0YWxTeW50aCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSAgaGFybW9uaWNpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLCAnaGFybW9uaWNpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yc1swXS5oYXJtb25pY2l0eS52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXS5oYXJtb25pY2l0eS52YWx1ZSA9IHZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIGhpZ2hwYXNzIGZpbHRlciBhdHRhY2hlZCB0byB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTWV0YWxTeW50aCNcblx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiAgQG5hbWUgIHJlc29uYW5jZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdyZXNvbmFuY2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1pbiA9IHZhbDtcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIFwicmVzb25hbmNlXCIgZnJlcXVlbmN5XG5cdFx0ICogIHRoYXQgdGhlIGZpbHRlciByYW1wcyBkdXJpbmcgdGhlIGF0dGFjay9kZWNheSBlbnZlbG9wZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSAgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdvY3RhdmVzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9jdHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9jdHM7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWF4ID0gdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5taW4gKiBNYXRoLnBvdygyLCBvY3RzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZXRhbFN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVyc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mcmVxTXVsdGlwbGllcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FtcGxpdHVlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9oaWdocGFzcy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faGlnaHBhc3MgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1ldGFsU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Ob2lzZVN5bnRoIGlzIGNvbXBvc2VkIG9mIGEgbm9pc2UgZ2VuZXJhdG9yIChUb25lLk5vaXNlKSwgb25lIGZpbHRlciAoVG9uZS5GaWx0ZXIpLFxuXHRcdCAqICAgICAgICAgIGFuZCB0d28gZW52ZWxvcGVzIChUb25lLkVudmVsb3ApLiBPbmUgZW52ZWxvcGUgY29udHJvbHMgdGhlIGFtcGxpdHVkZVxuXHRcdCAqICAgICAgICAgIG9mIHRoZSBub2lzZSBhbmQgdGhlIG90aGVyIGlzIGNvbnRyb2xzIHRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFycXp1WDlyQmxoVDUwTVJ2RDJUS21sOWJuWmhjWm16WEYxcmZfbzd2ZG5FL3B1Yj93PTkxOCZoPTI0MlwiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHN5bnRoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIG5vaXNlU3ludGggPSBuZXcgVG9uZS5Ob2lzZVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBub2lzZVN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Ob2lzZVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbm9pc2Ugc291cmNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk5vaXNlfVxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiBub2lzZVN5bnRoLnNldChcIm5vaXNlLnR5cGVcIiwgXCJicm93blwiKTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubm9pc2UgPSBuZXcgVG9uZS5Ob2lzZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBub2lzZSB0byB0aGUgb3V0cHV0XG5cdCAgICAgICAgdGhpcy5ub2lzZS5jaGFpbih0aGlzLmVudmVsb3BlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnbm9pc2UnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Ob2lzZVN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ25vaXNlJzogeyAndHlwZSc6ICd3aGl0ZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4xLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDBcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVzLiBVbmxpa2Ugb3RoZXJcblx0XHQgKiAgaW5zdHJ1bWVudHMsIFRvbmUuTm9pc2VTeW50aCBkb2Vzbid0IGhhdmUgYSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIG5vaXNlU3ludGgudHJpZ2dlckF0dGFjaygpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBub2lzZVxuXHQgICAgICAgIHRoaXMubm9pc2Uuc3RhcnQodGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuZW52ZWxvcGUuc3VzdGFpbiA9PT0gMCkge1xuXHQgICAgICAgICAgICB0aGlzLm5vaXNlLnN0b3AodGltZSA9IHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgcmVsZWFzZSBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLm5vaXNlLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAwKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHRoZW4gdGhlIHJlbGVhc2UuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIHRoZSBkdXJhdGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICAgICB0aGUgdGltZSBvZiB0aGUgYXR0YWNrXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdub2lzZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm5vaXNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm5vaXNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Ob2lzZVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgS2FycGx1cy1TdHJpbmcgc3RyaW5nIHN5bnRoZXNpcy4gT2Z0ZW4gb3V0IG9mIHR1bmUuXG5cdFx0ICogICAgICAgICBXaWxsIGNoYW5nZSB3aGVuIHRoZSBBdWRpb1dvcmtlck5vZGUgaXMgYXZhaWxhYmxlIGFjcm9zc1xuXHRcdCAqICAgICAgICAgYnJvd3NlcnMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gc2VlIHRoZSBkZWZhdWx0c1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwbHVja3kgPSBuZXcgVG9uZS5QbHVja1N5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBwbHVja3kudHJpZ2dlckF0dGFjayhcIkM0XCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuUGx1Y2tTeW50aC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTm9pc2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25vaXNlID0gbmV3IFRvbmUuTm9pc2UoJ3BpbmsnKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIG5vaXNlIGF0IHRoZSBhdHRhY2suXG5cdFx0XHQgKiAgTm9taW5hbCByYW5nZSBvZiBbMC4xLCAyMF1cblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2tOb2lzZSA9IG9wdGlvbnMuYXR0YWNrTm9pc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIExGQ0Zcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Mb3dwYXNzQ29tYkZpbHRlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZjZiA9IG5ldyBUb25lLkxvd3Bhc3NDb21iRmlsdGVyKHtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZSc6IG9wdGlvbnMucmVzb25hbmNlLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJzogb3B0aW9ucy5kYW1wZW5pbmdcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmVzb25hbmNlIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gdGhpcy5fbGZjZi5yZXNvbmFuY2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRhbXBlbmluZyBjb250cm9sLiBpLmUuIHRoZSBsb3dwYXNzIGZpbHRlciBmcmVxdWVuY3kgb2YgdGhlIGNvbWIgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IHRoaXMuX2xmY2YuZGFtcGVuaW5nO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9ub2lzZS5jb25uZWN0KHRoaXMuX2xmY2YpO1xuXHQgICAgICAgIHRoaXMuX2xmY2YuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZydcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBsdWNrU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGx1Y2tTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYXR0YWNrTm9pc2UnOiAxLFxuXHQgICAgICAgICdkYW1wZW5pbmcnOiA0MDAwLFxuXHQgICAgICAgICdyZXNvbmFuY2UnOiAwLjdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IG5vdGUgVGhlIG5vdGUgdG8gdHJpZ2dlci5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIG5vdGUgc2hvdWxkIGJlIHRyaWdnZXJlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGx1Y2tTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUpIHtcblx0ICAgICAgICBub3RlID0gdGhpcy50b0ZyZXF1ZW5jeShub3RlKTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGRlbGF5QW1vdW50ID0gMSAvIG5vdGU7XG5cdCAgICAgICAgdGhpcy5fbGZjZi5kZWxheVRpbWUuc2V0VmFsdWVBdFRpbWUoZGVsYXlBbW91bnQsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlLnN0b3AodGltZSArIGRlbGF5QW1vdW50ICogdGhpcy5hdHRhY2tOb2lzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbHVja1N5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmY2YuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX25vaXNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZmNmID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGx1Y2tTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBvbHlTeW50aCBoYW5kbGVzIHZvaWNlIGNyZWF0aW9uIGFuZCBhbGxvY2F0aW9uIGZvciBhbnlcblx0XHQgKiAgICAgICAgICBpbnN0cnVtZW50cyBwYXNzZWQgaW4gYXMgdGhlIHNlY29uZCBwYXJhbXRlci4gUG9seVN5bnRoIGlzXG5cdFx0ICogICAgICAgICAgbm90IGEgc3ludGhlc2l6ZXIgYnkgaXRzZWxmLCBpdCBtZXJlbHkgbWFuYWdlcyB2b2ljZXMgb2Zcblx0XHQgKiAgICAgICAgICBvbmUgb2YgdGhlIG90aGVyIHR5cGVzIG9mIHN5bnRocywgYWxsb3dpbmcgYW55IG9mIHRoZVxuXHRcdCAqICAgICAgICAgIG1vbm9waG9uaWMgc3ludGhlc2l6ZXJzIHRvIGJlIHBvbHlwaG9uaWMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfE9iamVjdH0gW3BvbHlwaG9ueT00XSBUaGUgbnVtYmVyIG9mIHZvaWNlcyB0byBjcmVhdGVcblx0XHQgKiAgQHBhcmFtIHtmdW5jdGlvbn0gW3ZvaWNlPVRvbmUuU3ludGhdIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgdm9pY2VzXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXMgVG9uZS5TeW50aCBieSBkZWZhdWx0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBwb2x5c3ludGggY29tcG9zZWQgb2YgNiBWb2ljZXMgb2YgU3ludGhcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5Qb2x5U3ludGgoNiwgVG9uZS5TeW50aCkudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3NldCB0aGUgYXR0cmlidXRlcyB1c2luZyB0aGUgc2V0IGludGVyZmFjZVxuXHRcdCAqIHN5bnRoLnNldChcImRldHVuZVwiLCAtMTIwMCk7XG5cdFx0ICogLy9wbGF5IGEgY2hvcmRcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJDNFwiLCBcIkU0XCIsIFwiQTRcIl0sIFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdwb2x5cGhvbnknLFxuXHQgICAgICAgICAgICAndm9pY2UnXG5cdCAgICAgICAgXSwgVG9uZS5Qb2x5U3ludGgpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5JbnN0cnVtZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICAvL21heCBwb2x5cGhvbnlcblx0ICAgICAgICBvcHRpb25zLnBvbHlwaG9ueSA9IE1hdGgubWluKFRvbmUuUG9seVN5bnRoLk1BWF9QT0xZUEhPTlksIG9wdGlvbnMucG9seXBob255KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYXJyYXkgb2Ygdm9pY2VzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2ljZXMgPSBuZXcgQXJyYXkob3B0aW9ucy5wb2x5cGhvbnkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBxdWV1ZSBvZiB2b2ljZXMgd2l0aCBkYXRhIGFib3V0IGxhc3QgdHJpZ2dlclxuXHRcdFx0ICogIGFuZCB0aGUgdHJpZ2dlcmVkIG5vdGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJzID0gbmV3IEFycmF5KG9wdGlvbnMucG9seXBob255KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGluIGNlbnRzXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGV0dW5lLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdkZXR1bmUnKTtcblx0ICAgICAgICAvL2NyZWF0ZSB0aGUgdm9pY2VzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLnBvbHlwaG9ueTsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB2ID0gbmV3IG9wdGlvbnMudm9pY2UoYXJndW1lbnRzWzJdLCBhcmd1bWVudHNbM10pO1xuXHQgICAgICAgICAgICBpZiAoISh2IGluc3RhbmNlb2YgVG9uZS5Nb25vcGhvbmljKSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeW50aCBjb25zdHJ1Y3RvciBtdXN0IGJlIGluc3RhbmNlIG9mIFRvbmUuTW9ub3Bob25pYycpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldID0gdjtcblx0ICAgICAgICAgICAgdi5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgaWYgKHYuaGFzT3duUHJvcGVydHkoJ2RldHVuZScpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHYuZGV0dW5lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90cmlnZ2Vyc1tpXSA9IHtcblx0ICAgICAgICAgICAgICAgIHJlbGVhc2U6IC0xLFxuXHQgICAgICAgICAgICAgICAgbm90ZTogbnVsbCxcblx0ICAgICAgICAgICAgICAgIHZvaWNlOiB2XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUG9seVN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3BvbHlwaG9ueSc6IDQsXG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3ZvaWNlJzogVG9uZS5TeW50aFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l8QXJyYXl9IG5vdGVzIFRoZSBub3RlcyB0byBwbGF5LiBBY2NlcHRzIGEgc2luZ2xlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlcXVlbmN5IG9yIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICBUaGUgc3RhcnQgdGltZSBvZiB0aGUgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciBhIGNob3JkIGltbWVkaWF0ZWx5IHdpdGggYSB2ZWxvY2l0eSBvZiAwLjJcblx0XHQgKiBwb2x5LnRyaWdnZXJBdHRhY2soW1wiQWIzXCIsIFwiQzRcIiwgXCJGNVwiXSwgdW5kZWZpbmVkLCAwLjIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZXMsIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5vdGVzKSkge1xuXHQgICAgICAgICAgICBub3RlcyA9IFtub3Rlc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSBub3Rlc1tpXTtcblx0ICAgICAgICAgICAgLy90cmlnZ2VyIHRoZSBvbGRlc3Qgdm9pY2Vcblx0ICAgICAgICAgICAgdmFyIG9sZGVzdCA9IHRoaXMuX3RyaWdnZXJzWzBdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHRoaXMuX3RyaWdnZXJzLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJpZ2dlcnNbal0ucmVsZWFzZSA8IG9sZGVzdC5yZWxlYXNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb2xkZXN0ID0gdGhpcy5fdHJpZ2dlcnNbal07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgb2xkZXN0LnJlbGVhc2UgPSBJbmZpbml0eTtcblx0ICAgICAgICAgICAgb2xkZXN0Lm5vdGUgPSBKU09OLnN0cmluZ2lmeSh2YWwpO1xuXHQgICAgICAgICAgICBvbGRlc3Qudm9pY2UudHJpZ2dlckF0dGFjayh2YWwsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSBhZnRlciB0aGUgc3BlY2lmaWVkIGR1cmF0aW9uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fEFycmF5fSBub3RlcyBUaGUgbm90ZXMgdG8gcGxheS4gQWNjZXB0cyBhIHNpbmdsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZXF1ZW5jeSBvciBhbiBhcnJheSBvZiBmcmVxdWVuY2llcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZHVyYXRpb24gdGhlIGR1cmF0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIGlmIG5vIHRpbWUgaXMgZ2l2ZW4sIGRlZmF1bHRzIHRvIG5vd1xuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIGF0dGFjayAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgYSBjaG9yZCBmb3IgYSBkdXJhdGlvbiBvZiBhIGhhbGYgbm90ZVxuXHRcdCAqIHBvbHkudHJpZ2dlckF0dGFja1JlbGVhc2UoW1wiRWIzXCIsIFwiRzRcIiwgXCJDNVwiXSwgXCIyblwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NhbiBwYXNzIGluIGFuIGFycmF5IG9mIGR1cmF0aW9ucyBhcyB3ZWxsXG5cdFx0ICogcG9seS50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJFYjNcIiwgXCJHNFwiLCBcIkM1XCJdLCBbXCIyblwiLCBcIjRuXCIsIFwiNG5cIl0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGVzLCBkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKG5vdGVzLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheShkdXJhdGlvbikgJiYgVG9uZS5pc0FycmF5KG5vdGVzKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZCA9IGR1cmF0aW9uW01hdGgubWluKGksIGR1cmF0aW9uLmxlbmd0aCAtIDEpXTtcblx0ICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2Uobm90ZXNbaV0sIHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKG5vdGVzLCB0aW1lICsgdGhpcy50b1NlY29uZHMoZHVyYXRpb24pKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2Ugb2YgdGhlIG5vdGUuIFVubGlrZSBtb25vcGhvbmljIGluc3RydW1lbnRzLFxuXHRcdCAqICBhIG5vdGUgKG9yIGFycmF5IG9mIG5vdGVzKSBuZWVkcyB0byBiZSBwYXNzZWQgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l8QXJyYXl9IG5vdGVzIFRoZSBub3RlcyB0byBwbGF5LiBBY2NlcHRzIGEgc2luZ2xlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlcXVlbmN5IG9yIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICBXaGVuIHRoZSByZWxlYXNlIHdpbGwgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwb2x5LnRyaWdnZXJSZWxlYXNlKFtcIkFiM1wiLCBcIkM0XCIsIFwiRjVcIl0sIFwiKzJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGVzLCB0aW1lKSB7XG5cdCAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5vdGVzKSkge1xuXHQgICAgICAgICAgICBub3RlcyA9IFtub3Rlc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSB2b2ljZVxuXHQgICAgICAgICAgICB2YXIgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeShub3Rlc1tpXSk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIHYgPSAwOyB2IDwgdGhpcy5fdHJpZ2dlcnMubGVuZ3RoOyB2KyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5fdHJpZ2dlcnNbdl07XG5cdCAgICAgICAgICAgICAgICBpZiAoZGVzYy5ub3RlID09PSBzdHJpbmdpZmllZCAmJiBkZXNjLnJlbGVhc2UgPiB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZGVzYy52b2ljZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICBkZXNjLnJlbGVhc2UgPSB0aW1lO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogc3ludGguc3luYygpXG5cdFx0ICogLy9zY2hlZHVsZSAzIG5vdGVzIHdoZW4gdGhlIHRyYW5zcG9ydCBmaXJzdCBzdGFydHNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAwKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc4bicpXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzRuJylcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgdG8gaGVhciB0aGUgbm90ZXNcblx0XHQgKiBUcmFuc3BvcnQuc3RhcnQoKVxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAxKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgYSBtZW1iZXIvYXR0cmlidXRlIG9mIHRoZSB2b2ljZXMuXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fHN0cmluZ30gcGFyYW1zXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmFtcFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogcG9seS5zZXQoe1xuXHRcdCAqIFx0XCJmaWx0ZXJcIiA6IHtcblx0XHQgKiBcdFx0XCJ0eXBlXCIgOiBcImhpZ2hwYXNzXCJcblx0XHQgKiBcdH0sXG5cdFx0ICogXHRcImVudmVsb3BlXCIgOiB7XG5cdFx0ICogXHRcdFwiYXR0YWNrXCIgOiAwLjI1XG5cdFx0ICogXHR9XG5cdFx0ICogfSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgdmFsdWUsIHJhbXBUaW1lKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLnZvaWNlc1tpXS5zZXQocGFyYW1zLCB2YWx1ZSwgcmFtcFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzeW50aCdzIGF0dHJpYnV0ZXMuIEdpdmVuIG5vIGFyZ3VtZW50cyBnZXRcblx0XHQgKiAgd2lsbCByZXR1cm4gYWxsIGF2YWlsYWJsZSBvYmplY3QgcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZ1xuXHRcdCAqICB2YWx1ZXMuIFBhc3MgaW4gYSBzaW5nbGUgYXR0cmlidXRlIHRvIHJldHJpZXZlIG9yIGFuIGFycmF5XG5cdFx0ICogIG9mIGF0dHJpYnV0ZXMuIFRoZSBhdHRyaWJ1dGUgc3RyaW5ncyBjYW4gYWxzbyBpbmNsdWRlIGEgXCIuXCJcblx0XHQgKiAgdG8gYWNjZXNzIGRlZXBlciBwcm9wZXJ0aWVzLlxuXHRcdCAqICBAcGFyYW0ge0FycmF5PX0gcGFyYW1zIHRoZSBwYXJhbWV0ZXJzIHRvIGdldCwgb3RoZXJ3aXNlIHdpbGwgcmV0dXJuXG5cdFx0ICogIFx0XHRcdFx0XHQgICBhbGwgYXZhaWxhYmxlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52b2ljZXNbMF0uZ2V0KHBhcmFtcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmUgdm9pY2VzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgbm90ZXMgc2hvdWxkIGJlIHJlbGVhc2VkLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnJlbGVhc2VBbGwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RyaWdnZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBkZXNjID0gdGhpcy5fdHJpZ2dlcnNbaV07XG5cdCAgICAgICAgICAgIGlmIChkZXNjLnJlbGVhc2UgPiB0aW1lKSB7XG5cdCAgICAgICAgICAgICAgICBkZXNjLnJlbGVhc2UgPSB0aW1lO1xuXHQgICAgICAgICAgICAgICAgZGVzYy52b2ljZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB0aGlzLnZvaWNlc1tpXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2RldHVuZScpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2ljZXMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RyaWdnZXJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIG5vdGVzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZFxuXHRcdCAqICB0byBhIHBvbHlzeW50aC5cblx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLk1BWF9QT0xZUEhPTlkgPSAyMDtcblx0ICAgIHJldHVybiBUb25lLlBvbHlTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIEF1dG9tYXRpY2FsbHkgaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgcGl0Y2hlZCBzYW1wbGVzLiBQYXNzIGluIGFuIG9iamVjdCB3aGljaCBtYXBzIHRoZSBub3RlJ3MgcGl0Y2ggb3IgbWlkaSB2YWx1ZSB0byB0aGUgdXJsLCB0aGVuIHlvdSBjYW4gdHJpZ2dlciB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIG9mIHRoYXQgbm90ZSBsaWtlIG90aGVyIGluc3RydW1lbnRzLiBCeSBhdXRvbWF0aWNhbGx5IHJlcGl0Y2hpbmcgdGhlIHNhbXBsZXMsIGl0IGlzIHBvc3NpYmxlIHRvIHBsYXkgcGl0Y2hlcyB3aGljaCB3ZXJlIG5vdCBleHBsaWNpdGx5IGluY2x1ZGVkIHdoaWNoIGNhbiBzYXZlIGxvYWRpbmcgdGltZS5cblx0XHQgKiAgICAgICAgRm9yIHNhbXBsZSBvciBidWZmZXIgcGxheWJhY2sgd2hlcmUgcmVwaXRjaGluZyBpcyBub3QgbmVjZXNzYXJ5LCB1c2UgW1RvbmUuUGxheWVyXShodHRwczovL3RvbmVqcy5naXRodWIuaW8vZG9jcy9QbGF5ZXIpLlxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBzYW1wbGVzIEFuIG9iamVjdCBvZiBzYW1wbGVzIG1hcHBpbmcgZWl0aGVyIE1pZGlcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIE51bWJlcnMgb3IgU2NpZW50aWZpYyBQaXRjaCBOb3RhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSB1cmwgb2YgdGhhdCBzYW1wbGUuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYWxsIG9mIHRoZSBzYW1wbGVzIGFyZSBsb2FkZWQuXG5cdFx0ICogQHBhcmFtIHtTdHJpbmc9fSBiYXNlVXJsIFRoZSByb290IFVSTCBvZiBhbGwgb2YgdGhlIHNhbXBsZXMsIHdoaWNoIGlzIHByZXBlbmRlZCB0byBhbGwgdGhlIFVSTHMuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgc2FtcGxlciA9IG5ldyBUb25lLlNhbXBsZXIoe1xuXHRcdCAqIFx0XCJDM1wiIDogXCJwYXRoL3RvL0MzLm1wM1wiLFxuXHRcdCAqIFx0XCJEIzNcIiA6IFwicGF0aC90by9Ec2hhcnAzLm1wM1wiLFxuXHRcdCAqIFx0XCJGIzNcIiA6IFwicGF0aC90by9Gc2hhcnAzLm1wM1wiLFxuXHRcdCAqIFx0XCJBM1wiIDogXCJwYXRoL3RvL0EzLm1wM1wiLFxuXHRcdCAqIH0sIGZ1bmN0aW9uKCl7XG5cdFx0ICogXHQvL3NhbXBsZXIgd2lsbCByZXBpdGNoIHRoZSBjbG9zZXN0IHNhbXBsZVxuXHRcdCAqIFx0c2FtcGxlci50cmlnZ2VyQXR0YWNrKFwiRDNcIilcblx0XHQgKiB9KVxuXHRcdCAqIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIgPSBmdW5jdGlvbiAodXJscykge1xuXHQgICAgICAgIC8vIHNoaWZ0IGFyZ3VtZW50cyBvdmVyIG9uZS4gVGhvc2UgYXJlIHRoZSByZW1haW5kZXIgb2YgdGhlIG9wdGlvbnNcblx0ICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgYXJncy5zaGlmdCgpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmdzLCBbXG5cdCAgICAgICAgICAgICdvbmxvYWQnLFxuXHQgICAgICAgICAgICAnYmFzZVVybCdcblx0ICAgICAgICBdLCBUb25lLlNhbXBsZXIpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIHZhciB1cmxNYXAgPSB7fTtcblx0ICAgICAgICBmb3IgKHZhciBub3RlIGluIHVybHMpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNOb3RlKG5vdGUpKSB7XG5cdCAgICAgICAgICAgICAgICAvL2NvbnZlcnQgdGhlIG5vdGUgbmFtZSB0byBNSURJXG5cdCAgICAgICAgICAgICAgICB2YXIgbWlkID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgICAgICAgICB1cmxNYXBbbWlkXSA9IHVybHNbbm90ZV07XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKHBhcnNlRmxvYXQobm90ZSkpKSB7XG5cdCAgICAgICAgICAgICAgICAvL290aGVyd2lzZSBpZiBpdCdzIG51bWJlcnMgYXNzdW1lIGl0J3MgbWlkaVxuXHQgICAgICAgICAgICAgICAgdXJsTWFwW25vdGVdID0gdXJsc1tub3RlXTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5TYW1wbGVyOiB1cmwga2V5cyBtdXN0IGJlIHRoZSBub3RlXFwncyBwaXRjaCcpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHN0b3JlZCBhbmQgbG9hZGVkIGJ1ZmZlcnNcblx0XHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcnN9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVycyA9IG5ldyBUb25lLkJ1ZmZlcnModXJsTWFwLCBvcHRpb25zLm9ubG9hZCwgb3B0aW9ucy5iYXNlVXJsKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBvYmplY3Qgb2YgYWxsIGN1cnJlbnRseSBwbGF5aW5nIEJ1ZmZlclNvdXJjZXNcblx0XHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IHt9O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGVudmVsb3BlIGFwcGxpZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlLlxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG9wdGlvbnMuYXR0YWNrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGVudmVsb3BlIGFwcGxpZWQgdG8gdGhlIGVuZCBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNhbXBsZXIsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAY29uc3Rcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgIGF0dGFjazogMCxcblx0ICAgICAgICByZWxlYXNlOiAwLjEsXG5cdCAgICAgICAgb25sb2FkOiBUb25lLm5vT3AsXG5cdCAgICAgICAgYmFzZVVybDogJydcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGluIHN0ZXBzIGJldHdlZW4gdGhlIGdpdmVuIG1pZGkgbm90ZSBhdCB0aGUgY2xvc2V0cyBzYW1wbGUuXG5cdFx0ICogQHBhcmFtICB7TWlkaX0gbWlkaVxuXHRcdCAqIEByZXR1cm4ge0ludGVydmFsfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLl9maW5kQ2xvc2VzdCA9IGZ1bmN0aW9uIChtaWRpKSB7XG5cdCAgICAgICAgLy9zZWFyY2hlcyB3aXRoaW4gOCBvY3RhdmVzIG9mIHRoZSBnaXZlbiBtaWRpIG5vdGVcblx0ICAgICAgICB2YXIgTUFYX0lOVEVSVkFMID0gOTY7XG5cdCAgICAgICAgdmFyIGludGVydmFsID0gMDtcblx0ICAgICAgICB3aGlsZSAoaW50ZXJ2YWwgPCBNQVhfSU5URVJWQUwpIHtcblx0ICAgICAgICAgICAgLy8gY2hlY2sgYWJvdmUgYW5kIGJlbG93XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9idWZmZXJzLmhhcyhtaWRpICsgaW50ZXJ2YWwpKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLWludGVydmFsO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2J1ZmZlcnMuaGFzKG1pZGkgLSBpbnRlcnZhbCkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcnZhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpbnRlcnZhbCsrO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHBsYXlcblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSAgICAgV2hlbiB0byBwbGF5IHRoZSBub3RlXG5cdFx0ICogQHBhcmFtICB7Tm9ybWFsUmFuZ2U9fSB2ZWxvY2l0eSBUaGUgdmVsb2NpdHkgdG8gcGxheSB0aGUgc2FtcGxlIGJhY2suXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfSAgICAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB2YXIgbWlkaSA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgIC8vIGZpbmQgdGhlIGNsb3Nlc3Qgbm90ZSBwaXRjaFxuXHQgICAgICAgIHZhciBkaWZmZXJlbmNlID0gdGhpcy5fZmluZENsb3Nlc3QobWlkaSk7XG5cdCAgICAgICAgaWYgKGRpZmZlcmVuY2UgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb3Nlc3ROb3RlID0gbWlkaSAtIGRpZmZlcmVuY2U7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9idWZmZXJzLmdldChjbG9zZXN0Tm90ZSk7XG5cdCAgICAgICAgICAgIC8vIHBsYXkgdGhhdCBub3RlXG5cdCAgICAgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2Uoe1xuXHQgICAgICAgICAgICAgICAgJ2J1ZmZlcic6IGJ1ZmZlcixcblx0ICAgICAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhkaWZmZXJlbmNlKSxcblx0ICAgICAgICAgICAgICAgICdmYWRlSW4nOiB0aGlzLmF0dGFjayxcblx0ICAgICAgICAgICAgICAgICdmYWRlT3V0JzogdGhpcy5yZWxlYXNlLFxuXHQgICAgICAgICAgICAgICAgJ2N1cnZlJzogJ2V4cG9uZW50aWFsJ1xuXHQgICAgICAgICAgICB9KS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAgICAgc291cmNlLnN0YXJ0KHRpbWUsIDAsIGJ1ZmZlci5kdXJhdGlvbiwgdmVsb2NpdHkpO1xuXHQgICAgICAgICAgICAvLyBhZGQgaXQgdG8gdGhlIGFjdGl2ZSBzb3VyY2VzXG5cdCAgICAgICAgICAgIGlmICghVG9uZS5pc0FycmF5KHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0pKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5wdXNoKHtcblx0ICAgICAgICAgICAgICAgIG5vdGU6IG1pZGksXG5cdCAgICAgICAgICAgICAgICBzb3VyY2U6IHNvdXJjZVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byByZWxlYXNlLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBcdFdoZW4gdG8gcmVsZWFzZSB0aGUgbm90ZS5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9XHR0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKG5vdGUsIHRpbWUpIHtcblx0ICAgICAgICB2YXIgbWlkaSA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgIC8vIGZpbmQgdGhlIG5vdGVcblx0ICAgICAgICBpZiAodGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXSAmJiB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLmxlbmd0aCkge1xuXHQgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5zaGlmdCgpLnNvdXJjZTtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lICsgdGhpcy5yZWxlYXNlLCB0aGlzLnJlbGVhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZWxlYXNlIGFsbCBjdXJyZW50bHkgYWN0aXZlIG5vdGVzLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBcdFdoZW4gdG8gcmVsZWFzZSB0aGUgbm90ZXMuXG5cdFx0ICogQHJldHVybiB7VG9uZS5TYW1wbGVyfVx0dGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5yZWxlYXNlQWxsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgbm90ZSBpbiB0aGlzLl9hY3RpdmVTb3VyY2VzKSB7XG5cdCAgICAgICAgICAgIHZhciBzb3VyY2VzID0gdGhpcy5fYWN0aXZlU291cmNlc1tub3RlXTtcblx0ICAgICAgICAgICAgd2hpbGUgKHNvdXJjZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gc291cmNlcy5zaGlmdCgpLnNvdXJjZTtcblx0ICAgICAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUgKyB0aGlzLnJlbGVhc2UsIHRoaXMucmVsZWFzZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAxKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZSB0aGUgYXR0YWNrIHBoYXNlLCB0aGVuIGFmdGVyIHRoZSBkdXJhdGlvbiwgaW52b2tlIHRoZSByZWxlYXNlLlxuXHRcdCAqIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gcGxheVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IGR1cmF0aW9uIFRoZSB0aW1lIHRoZSBub3RlIHNob3VsZCBiZSBoZWxkXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFdoZW4gdG8gc3RhcnQgdGhlIGF0dGFja1xuXHRcdCAqIEBwYXJhbSAge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IG9mIHRoZSBhdHRhY2tcblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9ICAgICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAobm90ZSwgZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayhub3RlLCB0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZShub3RlLCB0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBub3RlIHRvIHRoZSBzYW1wbGVyLlxuXHRcdCAqICBAcGFyYW0gIHtOb3RlfE1pZGl9ICAgbm90ZSAgICAgIFRoZSBidWZmZXIncyBwaXRjaC5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfFRvbmUuQnVmZmVyfEF1ZGlvYnVmZmVyfSAgdXJsICBFaXRoZXIgdGhlIHVybCBvZiB0aGUgYnVmZXIsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhZGRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobm90ZSwgdXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIGlmIChUb25lLmlzTm90ZShub3RlKSkge1xuXHQgICAgICAgICAgICAvL2NvbnZlcnQgdGhlIG5vdGUgbmFtZSB0byBNSURJXG5cdCAgICAgICAgICAgIHZhciBtaWQgPSBUb25lLkZyZXF1ZW5jeShub3RlKS50b01pZGkoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVycy5hZGQobWlkLCB1cmwsIGNhbGxiYWNrKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKCFpc05hTihwYXJzZUZsb2F0KG5vdGUpKSkge1xuXHQgICAgICAgICAgICAvL290aGVyd2lzZSBpZiBpdCdzIG51bWJlcnMgYXNzdW1lIGl0J3MgbWlkaVxuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzLmFkZChub3RlLCB1cmwsIGNhbGxiYWNrKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuU2FtcGxlcjogbm90ZSBtdXN0IGJlIHRoZSBub3RlXFwncyBwaXRjaC4gSW5zdGVhZCBnb3QgJyArIG5vdGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVycyBhcmUgbG9hZGVkIG9yIG5vdFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNhbXBsZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TYW1wbGVyLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcnMubG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXJzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBtaWRpIGluIHRoaXMuX2FjdGl2ZVNvdXJjZXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuc291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNhbXBsZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCkge1xuXHQgICAgICAgIGlmICghT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFBlcmlvZGljV2F2ZSkge1xuXHQgICAgICAgICAgICBPc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0UGVyaW9kaWNXYXZlID0gT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLnNldFdhdmVUYWJsZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVBlcmlvZGljV2F2ZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVBlcmlvZGljV2F2ZSA9IEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlV2F2ZVRhYmxlO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1hcHMgYSBOb3JtYWxSYW5nZSBbMCwgMV0gdG8gYW4gQXVkaW9SYW5nZSBbLTEsIDFdLiBcblx0XHQgKiAgICAgICAgIFNlZSBhbHNvIFRvbmUuQXVkaW9Ub0dhaW4uIFxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBnMmEgPSBuZXcgVG9uZS5HYWluVG9BdWRpbygpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluVG9BdWRpbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25vcm0gPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKGZ1bmN0aW9uICh4KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh4KSAqIDIgLSAxO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR2FpblRvQXVkaW8sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR2FpblRvQXVkaW99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR2FpblRvQXVkaW8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbm9ybS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR2FpblRvQXVkaW87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBOb3JtYWxpemUgdGFrZXMgYW4gaW5wdXQgbWluIGFuZCBtYXggYW5kIG1hcHMgaXQgbGluZWFybHkgdG8gTm9ybWFsUmFuZ2UgWzAsMV1cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IGlucHV0TWluIHRoZSBtaW4gaW5wdXQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IGlucHV0TWF4IHRoZSBtYXggaW5wdXQgdmFsdWVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbm9ybSA9IG5ldyBUb25lLk5vcm1hbGl6ZSgyLCA0KTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDMpLmNvbm5lY3Qobm9ybSk7XG5cdFx0ICogLy9vdXRwdXQgb2Ygbm9ybSBpcyAwLjUuIFxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob3JtYWxpemUgPSBmdW5jdGlvbiAoaW5wdXRNaW4sIGlucHV0TWF4KSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1pbiBpbnB1dCB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2lucHV0TWluID0gVG9uZS5kZWZhdWx0QXJnKGlucHV0TWluLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWF4IGlucHV0IHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5wdXRNYXggPSBUb25lLmRlZmF1bHRBcmcoaW5wdXRNYXgsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHN1YnRyYWN0IHRoZSBtaW4gZnJvbSB0aGUgaW5wdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5BZGQoMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgZGl2aWRlIGJ5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGlucHV0IGFuZCBvdXRwdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGl2ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5NdWx0aXBseSgxKTtcblx0ICAgICAgICB0aGlzLl9zdWIuY29ubmVjdCh0aGlzLl9kaXYpO1xuXHQgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Ob3JtYWxpemUsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSB2YWx1ZSB0aGUgaW5wdXQgc2lnbmFsIHdpbGwgcmVhY2guXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTm9ybWFsaXplI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRNaW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5faW5wdXRNaW4gPSBtaW47XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSB2YWx1ZSB0aGUgaW5wdXQgc2lnbmFsIHdpbGwgcmVhY2guXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTm9ybWFsaXplI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRNYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faW5wdXRNYXggPSBtYXg7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgc2V0IHRoZSB2YWx1ZXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9ybWFsaXplLnByb3RvdHlwZS5fc2V0UmFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3ViLnZhbHVlID0gLXRoaXMuX2lucHV0TWluO1xuXHQgICAgICAgIHRoaXMuX2Rpdi52YWx1ZSA9IDEgLyAodGhpcy5faW5wdXRNYXggLSB0aGlzLl9pbnB1dE1pbik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vcm1hbGl6ZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc3ViLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdWIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Rpdi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGl2ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Ob3JtYWxpemU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsIGV4dGVuZHMgVG9uZS5TaWduYWwsIGJ1dCBhZGRzIHRoZSBhYmlsaXR5IHRvIHN5bmNocm9uaXplIHRoZSBzaWduYWwgdG8gdGhlIHNpZ25hbCB0byB0aGUgVG9uZS5UcmFuc3BvcnRcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgcmVhbCBzaWduYWwgb3V0cHV0XG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLl9vdXRwdXRTaWcgPSBuZXcgVG9uZS5TaWduYWwodGhpcy5faW5pdGlhbFZhbHVlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEtlZXAgdHJhY2sgb2YgdGhlIGxhc3QgdmFsdWUuIChzbWFsbCBvcHRpbWl6YXRpb24pXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xhc3RWYWwgPSB0aGlzLnZhbHVlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGV2ZW50IGlkIG9mIHRoZSB0aWNrIHVwZGF0ZSBsb29wXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KHRoaXMuX29uVGljay5iaW5kKHRoaXMpLCAnMWknKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEEgYm91bmQgdmVyc2lvbiBvZiB0aGUgYW5jaG9yIHZhbHVlIG1ldGhvZHNcblx0XHRcdCAqIEB0eXBlIHtGdW5jdGlvbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iaW5kQW5jaG9yVmFsdWUgPSB0aGlzLl9hbmNob3JWYWx1ZS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9uKCdzdGFydCBzdG9wIHBhdXNlJywgdGhpcy5fYmluZEFuY2hvclZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMubWVtb3J5ID0gSW5maW5pdHk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogQ2FsbGJhY2sgd2hpY2ggaXMgaW52b2tlZCBldmVyeSB0aWNrLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5fb25UaWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICBpZiAodGhpcy5fbGFzdFZhbCAhPT0gdmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xhc3RWYWwgPSB2YWw7XG5cdCAgICAgICAgICAgIC8vYXBwcm94aW1hdGUgcmFtcCBjdXJ2ZXMgd2l0aCBsaW5lYXIgcmFtcHNcblx0ICAgICAgICAgICAgdGhpcy5fb3V0cHV0U2lnLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbCwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEFuY2hvciB0aGUgdmFsdWUgYXQgdGhlIHN0YXJ0IGFuZCBzdG9wIG9mIHRoZSBUcmFuc3BvcnRcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWUgVGhlIHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICB0aGlzXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLl9hbmNob3JWYWx1ZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHZhbCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoVG9uZS5UcmFuc3BvcnQuc2Vjb25kcyk7XG5cdCAgICAgICAgdGhpcy5fbGFzdFZhbCA9IHZhbDtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZy5zZXRWYWx1ZUF0VGltZSh2YWwsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gVGhpcyB3aWxsXG5cdFx0ICogIHJldHVybiB0aGUgdW5jb252ZXJ0ZWQgKHJhdykgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9ICB0aW1lICBUaGUgdGltZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgVGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiBUb25lLlNpZ25hbC5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTZXQgdGhlIG91dHB1dCBvZiB0aGUgc2lnbmFsIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hhbmdlIHRvIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gdGltZSAgVGhlIHRpbWUgdG8gY2hhbmdlIHRoZSBzaWduYWxcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIExpbmVhciByYW1wIHRvIHRoZSBnaXZlbiB2YWx1ZSBmcm9tIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcG9pbnQgdG8gdGhlIGdpdmVuIHZhbHVlXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hhbmdlIHRvIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gdGltZSAgVGhlIHRpbWUgdG8gY2hhbmdlIHRoZSBzaWduYWxcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEV4cG9uZW50aWFsIHJhbXAgdG8gdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwb2ludCB0byB0aGUgZ2l2ZW4gdmFsdWVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGFuZ2UgdG8gYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSB0aW1lICBUaGUgdGltZSB0byBjaGFuZ2UgdGhlIHNpZ25hbFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUgd2l0aFxuXHRcdCAqICBhIHJhdGUgaGF2aW5nIHRoZSBnaXZlbiB0aW1lIGNvbnN0YW50LlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHRpbWVDb25zdGFudFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLnNldFRhcmdldEF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lLmNhbGwodGhpcywgdmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VscyBhbGwgc2NoZWR1bGVkIHBhcmFtZXRlciBjaGFuZ2VzIHdpdGggdGltZXMgZ3JlYXRlciB0aGFuIG9yXG5cdFx0ICogIGVxdWFsIHRvIHN0YXJ0VGltZS5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMgPSBmdW5jdGlvbiAoc3RhcnRUaW1lKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcy5jYWxsKHRoaXMsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCBhbiBhcnJheSBvZiBhcmJpdHJhcnkgdmFsdWVzIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiB0aW1lIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb24uXG5cdFx0ICogIEBwYXJhbSB7RmxvYXQzMkFycmF5fSB2YWx1ZXNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBkdXJhdGlvblxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbc2NhbGluZz0xXSBJZiB0aGUgdmFsdWVzIGluIHRoZSBjdXJ2ZSBzaG91bGQgYmUgc2NhbGVkIGJ5IHNvbWUgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUN1cnZlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlcywgc3RhcnRUaW1lLCBkdXJhdGlvbiwgc2NhbGluZykge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gVG9uZS5UcmFuc3BvcnRUaW1lKGR1cmF0aW9uKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVDdXJ2ZUF0VGltZS5jYWxsKHRoaXMsIHZhbHVlcywgc3RhcnRUaW1lLCBkdXJhdGlvbiwgc2NhbGluZyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoaXMgaXMgc2ltaWxhciB0byBbY2FuY2VsU2NoZWR1bGVkVmFsdWVzXSgjY2FuY2VsU2NoZWR1bGVkVmFsdWVzKSBleGNlcHRcblx0XHQgKiAgaXQgaG9sZHMgdGhlIGF1dG9tYXRlZCB2YWx1ZSBhdCB0aW1lIHVudGlsIHRoZSBuZXh0IGF1dG9tYXRlZCBldmVudC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuY2FuY2VsQW5kSG9sZEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxBbmRIb2xkQXRUaW1lLmNhbGwodGhpcywgVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBEaXNwb3NlIGFuZCBkaXNjb25uZWN0XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5jbGVhcih0aGlzLl9zeW5jZWQpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9mZignc3RhcnQgc3RvcCBwYXVzZScsIHRoaXMuX3N5bmNlZENhbGxiYWNrKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKDApO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fb3V0cHV0U2lnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgVG9uZS5HcmFpblBsYXllciBpbXBsZW1lbnRzIFtncmFudWxhciBzeW50aGVzaXNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dyYW51bGFyX3N5bnRoZXNpcykuXG5cdFx0ICogICAgICAgIEdyYW51bGFyIFN5bnRoZXNpcyBlbmFibGVzIHlvdSB0byBhZGp1c3QgcGl0Y2ggYW5kIHBsYXliYWNrIHJhdGUgaW5kZXBlbmRlbnRseS4gVGhlIGdyYWluU2l6ZSBpcyB0aGVcblx0XHQgKiAgICAgICAgYW1vdW50IG9mIHRpbWUgZWFjaCBzbWFsbCBjaHVuayBvZiBhdWRpbyBpcyBwbGF5ZWQgZm9yIGFuZCB0aGUgb3ZlcmxhcCBpcyB0aGVcblx0XHQgKiAgICAgICAgYW1vdW50IG9mIGNyb3NzZmFkaW5nIHRyYW5zaXRpb24gdGltZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgZ3JhaW5zLlxuXHRcdCAqIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiBAcGFyYW0ge1N0cmluZ3xUb25lLkJ1ZmZlcn0gdXJsXHRUaGUgdXJsIHRvIGxvYWQsIG9yIHRoZSBUb25lLkJ1ZmZlciB0byBwbGF5LlxuXHRcdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgIF0sIFRvbmUuR3JhaW5QbGF5ZXIpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGF1ZGlvIGJ1ZmZlciBiZWxvbmdpbmcgdG8gdGhlIHBsYXllci5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIob3B0aW9ucy51cmwsIG9wdGlvbnMub25sb2FkKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBDcmVhdGUgYSByZXBlYXRpbmcgdGljayB0byBzY2hlZHVsZVxuXHRcdFx0ICogIHRoZSBncmFpbnMuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNsb2NrfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jbG9jayA9IG5ldyBUb25lLkNsb2NrKHRoaXMuX3RpY2suYmluZCh0aGlzKSwgb3B0aW9ucy5ncmFpblNpemUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wRW5kID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEFsbCBvZiB0aGUgY3VycmVudGx5IHBsYXlpbmcgQnVmZmVyU291cmNlc1xuXHRcdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dyYWluU2l6ZSA9IG9wdGlvbnMuZ3JhaW5TaXplO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX292ZXJsYXAgPSBvcHRpb25zLm92ZXJsYXA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWRqdXN0IHRoZSBwaXRjaCBpbmRlcGVuZGVudGx5IG9mIHRoZSBwbGF5YmFja1JhdGUuXG5cdFx0XHQgKiAgQHR5cGUgIHtDZW50c31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gb3B0aW9ucy5kZXR1bmU7XG5cdCAgICAgICAgLy9zZXR1cFxuXHQgICAgICAgIHRoaXMub3ZlcmxhcCA9IG9wdGlvbnMub3ZlcmxhcDtcblx0ICAgICAgICB0aGlzLmxvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICB0aGlzLmdyYWluU2l6ZSA9IG9wdGlvbnMuZ3JhaW5TaXplO1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gb3B0aW9ucy5sb29wU3RhcnQ7XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gb3B0aW9ucy5sb29wRW5kO1xuXHQgICAgICAgIHRoaXMucmV2ZXJzZSA9IG9wdGlvbnMucmV2ZXJzZTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbignc3RvcCcsIHRoaXMuX29uc3RvcC5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdyYWluUGxheWVyLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdvdmVybGFwJzogMC4xLFxuXHQgICAgICAgICdncmFpblNpemUnOiAwLjIsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAnbG9vcEVuZCc6IDAsXG5cdCAgICAgICAgJ3JldmVyc2UnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQbGF5IHRoZSBidWZmZXIgYXQgdGhlIGdpdmVuIHN0YXJ0VGltZS4gT3B0aW9uYWxseSBhZGQgYW4gb2Zmc2V0XG5cdFx0ICogIGFuZC9vciBkdXJhdGlvbiB3aGljaCB3aWxsIHBsYXkgdGhlIGJ1ZmZlciBmcm9tIGEgcG9zaXRpb25cblx0XHQgKiAgd2l0aGluIHRoZSBidWZmZXIgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbc3RhcnRUaW1lPW5vd10gV2hlbiB0aGUgcGxheWVyIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW29mZnNldD0wXSBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtcGxlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBzdGFydCBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19IGR1cmF0aW9uIEhvdyBsb25nIHRoZSBzYW1wbGUgc2hvdWxkIHBsYXkuIElmIG5vIGR1cmF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGdpdmVuLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZ1bGwgbGVuZ3RoXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzYW1wbGUgKG1pbnVzIGFueSBvZmZzZXQpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdyYWluUGxheWVyfSB0aGlzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqICBAbWV0aG9kIHN0YXJ0XG5cdFx0ICogIEBuYW1lIHN0YXJ0XG5cdFx0ICovXG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IG9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vZmZzZXQgPSBvZmZzZXQ7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suc3RhcnQodGltZSk7XG5cdCAgICAgICAgaWYgKGR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RvcCh0aW1lICsgdGhpcy50b1NlY29uZHMoZHVyYXRpb24pKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludm9rZWQgd2hlbiB0aGUgY2xvY2sgaXMgc3RvcHBlZFxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fb25zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL3N0b3AgdGhlIHBsYXllcnNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lLCAwKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW52b2tlZCBvbiBlYWNoIGNsb2NrIHRpY2suIHNjaGVkdWxlZCBhIG5ld1xuXHRcdCAqICBncmFpbiBhdCB0aGlzIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGZhZGVJbiA9IHRoaXMuX29mZnNldCA8IHRoaXMuX292ZXJsYXAgPyAwIDogdGhpcy5fb3ZlcmxhcDtcblx0ICAgICAgICB2YXIgc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKHtcblx0ICAgICAgICAgICAgJ2J1ZmZlcic6IHRoaXMuYnVmZmVyLFxuXHQgICAgICAgICAgICAnZmFkZUluJzogZmFkZUluLFxuXHQgICAgICAgICAgICAnZmFkZU91dCc6IHRoaXMuX292ZXJsYXAsXG5cdCAgICAgICAgICAgICdsb29wJzogdGhpcy5sb29wLFxuXHQgICAgICAgICAgICAnbG9vcFN0YXJ0JzogdGhpcy5fbG9vcFN0YXJ0LFxuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IHRoaXMuX2xvb3BFbmQsXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyh0aGlzLmRldHVuZSAvIDEwMClcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICBzb3VyY2Uuc3RhcnQodGltZSwgdGhpcy5fb2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLl9vZmZzZXQgKz0gdGhpcy5ncmFpblNpemU7XG5cdCAgICAgICAgc291cmNlLnN0b3AodGltZSArIHRoaXMuZ3JhaW5TaXplKTtcblx0ICAgICAgICAvL2FkZCBpdCB0byB0aGUgYWN0aXZlIHNvdXJjZXNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnB1c2goc291cmNlKTtcblx0ICAgICAgICAvL3JlbW92ZSBpdCB3aGVuIGl0J3MgZG9uZVxuXHQgICAgICAgIHNvdXJjZS5vbmVuZGVkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9hY3RpdmVTb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblx0ICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBKdW1wIHRvIGEgc3BlY2lmaWMgdGltZSBhbmQgcGxheSBpdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIG9mZnNldCAgVGhlIG9mZnNldCB0byBqdW1wIHRvLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSB0aW1lIFdoZW4gdG8gbWFrZSB0aGUganVtcC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuR3JhaW5QbGF5ZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24gKG9mZnNldCwgdGltZSkge1xuXHQgICAgICAgIHRoaXMuX29mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgdGhpcy5fdGljayh0aGlzLnRvU2Vjb25kcyh0aW1lKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIHNhbXBsZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdGhpcy5ncmFpblNpemUgPSB0aGlzLl9ncmFpblNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbG9vcCBzdGFydCB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBsb29wIGVuZCB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGlyZWN0aW9uIHRoZSBidWZmZXIgc2hvdWxkIHBsYXkgaW5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSByZXZlcnNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdyZXZlcnNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXIucmV2ZXJzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJldikge1xuXHQgICAgICAgICAgICB0aGlzLmJ1ZmZlci5yZXZlcnNlID0gcmV2O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHNpemUgb2YgZWFjaCBjaHVuayBvZiBhdWRpbyB0aGF0IHRoZVxuXHRcdCAqIGJ1ZmZlciBpcyBjaG9wcGVkIGludG8gYW5kIHBsYXllZCBiYWNrIGF0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGdyYWluU2l6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnZ3JhaW5TaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ3JhaW5TaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9ncmFpblNpemUgPSB0aGlzLnRvU2Vjb25kcyhzaXplKTtcblx0ICAgICAgICAgICAgdGhpcy5fY2xvY2suZnJlcXVlbmN5LnZhbHVlID0gdGhpcy5fcGxheWJhY2tSYXRlIC8gdGhpcy5fZ3JhaW5TaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhpcyBpcyB0aGUgZHVyYXRpb24gb2YgdGhlIGNyb3NzLWZhZGUgYmV0d2VlblxuXHRcdCAqIHN1Y2Vzc2l2ZSBncmFpbnMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgb3ZlcmxhcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnb3ZlcmxhcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX292ZXJsYXA7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX292ZXJsYXAgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwXG5cdFx0ICogQHJldHVybiB7VG9uZS5HcmFpblBsYXllcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmJ1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fY2xvY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkdyYWluUGxheWVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGxheWVyIGlzIGFuIGF1ZGlvIGZpbGUgcGxheWVyIHdpdGggc3RhcnQsIGxvb3AsIGFuZCBzdG9wIGZ1bmN0aW9ucy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ3xBdWRpb0J1ZmZlcn0gdXJsIEVpdGhlciB0aGUgQXVkaW9CdWZmZXIgb3IgdGhlIHVybCBmcm9tXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggdG8gbG9hZCB0aGUgQXVkaW9CdWZmZXJcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbj19IG9ubG9hZCBUaGUgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjb21tZW5kZWQgdG8gdXNlIFRvbmUuQnVmZmVyLm9uKCdsb2FkJykgaW5zdGVhZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgcGxheWVyID0gbmV3IFRvbmUuUGxheWVyKFwiLi9wYXRoL3RvL3NhbXBsZS5tcDNcIikudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3BsYXkgYXMgc29vbiBhcyB0aGUgYnVmZmVyIGlzIGxvYWRlZFxuXHRcdCAqIHBsYXllci5hdXRvc3RhcnQgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIgPSBmdW5jdGlvbiAodXJsKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnM7XG5cdCAgICAgICAgaWYgKHVybCBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyICYmIHVybC5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgdXJsID0gdXJsLmdldCgpO1xuXHQgICAgICAgICAgICBvcHRpb25zID0gVG9uZS5QbGF5ZXIuZGVmYXVsdHM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICAgICAndXJsJyxcblx0ICAgICAgICAgICAgICAgICdvbmxvYWQnXG5cdCAgICAgICAgICAgIF0sIFRvbmUuUGxheWVyKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiB0aGUgZmlsZSBzaG91bGQgcGxheSBhcyBzb29uXG5cdFx0XHQgKiAgYXMgdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vd2lsbCBwbGF5IGFzIHNvb24gYXMgaXQncyBsb2FkZWRcblx0XHRcdCAqIHZhciBwbGF5ZXIgPSBuZXcgVG9uZS5QbGF5ZXIoe1xuXHRcdFx0ICogXHRcInVybFwiIDogXCIuL3BhdGgvdG8vc2FtcGxlLm1wM1wiLFxuXHRcdFx0ICogXHRcImF1dG9zdGFydFwiIDogdHJ1ZSxcblx0XHRcdCAqIH0pLnRvTWFzdGVyKCk7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF1dG9zdGFydCA9IG9wdGlvbnMuYXV0b3N0YXJ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBidWZmZXJcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcih7XG5cdCAgICAgICAgICAgICd1cmwnOiBvcHRpb25zLnVybCxcblx0ICAgICAgICAgICAgJ29ubG9hZCc6IHRoaXMuX29ubG9hZC5iaW5kKHRoaXMsIG9wdGlvbnMub25sb2FkKSxcblx0ICAgICAgICAgICAgJ3JldmVyc2UnOiBvcHRpb25zLnJldmVyc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgQXVkaW9CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldCh1cmwpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpZiB0aGUgYnVmZmVyIHNob3VsZCBsb29wIG9uY2UgaXQncyBvdmVyXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaWYgJ2xvb3AnIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgc3RhcnQgYXQgdGhpcyBwb3NpdGlvblxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSBvcHRpb25zLmxvb3BTdGFydDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpZiAnbG9vcCcgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBlbmQgYXQgdGhpcyBwb3NpdGlvblxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wRW5kID0gb3B0aW9ucy5sb29wRW5kO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwbGF5YmFjayByYXRlXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxsIG9mIHRoZSBhY3RpdmUgYnVmZmVyIHNvdXJjZSBub2Rlc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheTxUb25lLkJ1ZmZlclNvdXJjZT59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZWxhcHNlZCB0aW1lIGNvdW50ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGlja1NvdXJjZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSBuZXcgVG9uZS5UaWNrU291cmNlKG9wdGlvbnMucGxheWJhY2tSYXRlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZUluIHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZUluID0gb3B0aW9ucy5mYWRlSW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZhZGVPdXQgdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlT3V0ID0gb3B0aW9ucy5mYWRlT3V0O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGxheWVyLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29ubG9hZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdhdXRvc3RhcnQnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcFN0YXJ0JzogMCxcblx0ICAgICAgICAnbG9vcEVuZCc6IDAsXG5cdCAgICAgICAgJ3JldHJpZ2dlcic6IGZhbHNlLFxuXHQgICAgICAgICdyZXZlcnNlJzogZmFsc2UsXG5cdCAgICAgICAgJ2ZhZGVJbic6IDAsXG5cdCAgICAgICAgJ2ZhZGVPdXQnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIExvYWQgdGhlIGF1ZGlvIGZpbGUgYXMgYW4gYXVkaW8gYnVmZmVyLlxuXHRcdCAqICBEZWNvZGVzIHRoZSBhdWRpbyBhc3luY2hyb25vdXNseSBhbmQgaW52b2tlc1xuXHRcdCAqICB0aGUgY2FsbGJhY2sgb25jZSB0aGUgYXVkaW8gYnVmZmVyIGxvYWRzLlxuXHRcdCAqICBOb3RlOiB0aGlzIGRvZXMgbm90IG5lZWQgdG8gYmUgY2FsbGVkIGlmIGEgdXJsXG5cdFx0ICogIHdhcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVjdG9yLiBPbmx5IHVzZSB0aGlzXG5cdFx0ICogIGlmIHlvdSB3YW50IHRvIG1hbnVhbGx5IGxvYWQgYSBuZXcgdXJsLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgYnVmZmVyIHRvIGxvYWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICBGaWxldHlwZSBzdXBwb3J0IGRlcGVuZHMgb24gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICBicm93c2VyLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBpbnZva2Ugb25jZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzYW1wbGUgaXMgbG9hZGVkLlxuXHRcdCAqICBAcmV0dXJucyB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmxvYWQodXJsLCB0aGlzLl9vbmxvYWQuYmluZCh0aGlzLCBjYWxsYmFjaykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEludGVybmFsIGNhbGxiYWNrIHdoZW4gdGhlIGJ1ZmZlciBpcyBsb2FkZWQuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fb25sb2FkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgY2FsbGJhY2sgPSBUb25lLmRlZmF1bHRBcmcoY2FsbGJhY2ssIFRvbmUubm9PcCk7XG5cdCAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuYXV0b3N0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RhcnQoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW50ZXJuYWwgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGRvbmUgcGxheWluZy5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9vblNvdXJjZUVuZCA9IGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9hY3RpdmVTb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBsYXkgdGhlIGJ1ZmZlciBhdCB0aGUgZ2l2ZW4gc3RhcnRUaW1lLiBPcHRpb25hbGx5IGFkZCBhbiBvZmZzZXRcblx0XHQgKiAgYW5kL29yIGR1cmF0aW9uIHdoaWNoIHdpbGwgcGxheSB0aGUgYnVmZmVyIGZyb20gYSBwb3NpdGlvblxuXHRcdCAqICB3aXRoaW4gdGhlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiAgQG1ldGhvZCBzdGFydFxuXHRcdCAqICBAbmFtZSBzdGFydFxuXHRcdCAqL1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICAvL2lmIGl0J3MgYSBsb29wIHRoZSBkZWZhdWx0IG9mZnNldCBpcyB0aGUgbG9vcHN0YXJ0IHBvaW50XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgdGhpcy5fbG9vcFN0YXJ0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL290aGVyd2lzZSB0aGUgZGVmYXVsdCBvZmZzZXQgaXMgMFxuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCAwKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jb21wdXRlIHRoZSB2YWx1ZXMgaW4gc2Vjb25kc1xuXHQgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgdmFyIGNvbXB1dGVkRHVyYXRpb24gPSBUb25lLmRlZmF1bHRBcmcoZHVyYXRpb24sIE1hdGgubWF4KHRoaXMuX2J1ZmZlci5kdXJhdGlvbiAtIG9mZnNldCwgMCkpO1xuXHQgICAgICAgIGNvbXB1dGVkRHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhjb21wdXRlZER1cmF0aW9uKTtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGVsYXBzZWQgdGltZSBjb3VudGVyXG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuc3RhcnQoc3RhcnRUaW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIC8vbWFrZSB0aGUgc291cmNlXG5cdCAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBUb25lLkJ1ZmZlclNvdXJjZSh7XG5cdCAgICAgICAgICAgICdidWZmZXInOiB0aGlzLl9idWZmZXIsXG5cdCAgICAgICAgICAgICdsb29wJzogdGhpcy5fbG9vcCxcblx0ICAgICAgICAgICAgJ2xvb3BTdGFydCc6IHRoaXMuX2xvb3BTdGFydCxcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiB0aGlzLl9sb29wRW5kLFxuXHQgICAgICAgICAgICAnb25lbmRlZCc6IHRoaXMuX29uU291cmNlRW5kLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICdwbGF5YmFja1JhdGUnOiB0aGlzLl9wbGF5YmFja1JhdGUsXG5cdCAgICAgICAgICAgICdmYWRlSW4nOiB0aGlzLmZhZGVJbixcblx0ICAgICAgICAgICAgJ2ZhZGVPdXQnOiB0aGlzLmZhZGVPdXRcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL3NldCB0aGUgbG9vcGluZyBwcm9wZXJ0aWVzXG5cdCAgICAgICAgaWYgKCF0aGlzLl9sb29wICYmICF0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgLy9pZiBpdCdzIG5vdCBsb29waW5nLCBzZXQgdGhlIHN0YXRlIGNoYW5nZSBhdCB0aGUgZW5kIG9mIHRoZSBzYW1wbGVcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBzdGFydFRpbWUgKyBjb21wdXRlZER1cmF0aW9uIC8gdGhpcy5fcGxheWJhY2tSYXRlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hZGQgaXQgdG8gdGhlIGFycmF5IG9mIGFjdGl2ZSBzb3VyY2VzXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5wdXNoKHNvdXJjZSk7XG5cdCAgICAgICAgLy9zdGFydCBpdFxuXHQgICAgICAgIGlmICh0aGlzLl9sb29wICYmIFRvbmUuaXNVbmRlZihkdXJhdGlvbikpIHtcblx0ICAgICAgICAgICAgc291cmNlLnN0YXJ0KHN0YXJ0VGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RhcnQoc3RhcnRUaW1lLCBvZmZzZXQsIGNvbXB1dGVkRHVyYXRpb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCBwbGF5YmFjay5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgc291cmNlLnN0b3AodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCBhbmQgdGhlbiByZXN0YXJ0IHRoZSBwbGF5ZXIgZnJvbSB0aGUgYmVnaW5uaW5nIChvciBvZmZzZXQpXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUucmVzdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7XG5cdCAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGFydCh0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2VlayB0byBhIHNwZWNpZmljIHRpbWUgaW4gdGhlIHBsYXllcidzIGJ1ZmZlci4gSWYgdGhlXG5cdFx0ICogIHNvdXJjZSBpcyBubyBsb25nZXIgcGxheWluZyBhdCB0aGF0IHRpbWUsIGl0IHdpbGwgc3RvcC5cblx0XHQgKiAgSWYgeW91IHNlZWsgdG8gYSB0aW1lIHRoYXRcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBvZmZzZXQgVGhlIHRpbWUgdG8gc2VlayB0by5cblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gdGltZSBUaGUgdGltZSBmb3IgdGhlIHNlZWsgZXZlbnQgdG8gb2NjdXIuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0YXJ0KDAuMik7XG5cdFx0ICogc291cmNlLnN0b3AoMC40KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24gKG9mZnNldCwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnRvU2Vjb25kcyhvZmZzZXQpO1xuXHQgICAgICAgICAgICAvLyBpZiBpdCdzIGN1cnJlbnRseSBwbGF5aW5nLCBzdG9wIGl0XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3AodGltZSk7XG5cdCAgICAgICAgICAgIC8vcmVzdGFydCBpdCBhdCB0aGUgZ2l2ZW4gdGltZVxuXHQgICAgICAgICAgICB0aGlzLl9zdGFydCh0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSBsb29wIHN0YXJ0IGFuZCBlbmQuIFdpbGwgb25seSBsb29wIGlmIGxvb3AgaXNcblx0XHQgKiAgc2V0IHRvIHRydWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gbG9vcFN0YXJ0IFRoZSBsb29wIGVuZCB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gbG9vcEVuZCBUaGUgbG9vcCBlbmQgdGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xvb3AgMC4xIHNlY29uZHMgb2YgdGhlIGZpbGUuXG5cdFx0ICogcGxheWVyLnNldExvb3BQb2ludHMoMC4yLCAwLjMpO1xuXHRcdCAqIHBsYXllci5sb29wID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5zZXRMb29wUG9pbnRzID0gZnVuY3Rpb24gKGxvb3BTdGFydCwgbG9vcEVuZCkge1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gbG9vcFN0YXJ0O1xuXHQgICAgICAgIHRoaXMubG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgbG9vcCBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIHN0YXJ0IGF0IHRoaXMgcG9zaXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSBjdXJyZW50IHNvdXJjZVxuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgc291cmNlLmxvb3BTdGFydCA9IGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgZW5kIGF0IHRoaXMgcG9zaXRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGxvb3BFbmRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSBjdXJyZW50IHNvdXJjZVxuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgc291cmNlLmxvb3BFbmQgPSBsb29wRW5kO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBhdWRpbyBidWZmZXIgYmVsb25naW5nIHRvIHRoZSBwbGF5ZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtUb25lLkJ1ZmZlcn1cblx0XHQgKiBAbmFtZSBidWZmZXJcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdidWZmZXInLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyLnNldChidWZmZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlciBzaG91bGQgbG9vcCBvbmNlIGl0J3Mgb3Zlci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9vcFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICAvL2lmIG5vIGNoYW5nZSwgZG8gbm90aGluZ1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCA9PT0gbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKCFsb29wKSB7XG5cdCAgICAgICAgICAgICAgICAvL3N0b3AgdGhlIHBsYXliYWNrIG9uIHRoZSBuZXh0IGN5Y2xlXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdG9wQXROZXh0SXRlcmF0aW9uKG5vdyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvL3JlbW92ZSB0aGUgbmV4dCBzdG9wRXZlbnRcblx0ICAgICAgICAgICAgICAgIHZhciBzdG9wRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXROZXh0U3RhdGUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBub3cpO1xuXHQgICAgICAgICAgICAgICAgaWYgKHN0b3BFdmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwoc3RvcEV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLmNhbmNlbChzdG9wRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYSBzdG9wIGV2ZW50IGF0IHRoZSBuZXh0IGZ1bGwgaXRlcmF0aW9uLiBVc2VkXG5cdFx0ICogIGZvciBzY2hlZHVsaW5nIHN0b3Agd2hlbiB0aGUgbG9vcCBzdGF0ZSBvciBwbGF5YmFja1JhdGUgY2hhbmdlc1xuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBub3cgIFRoZSBjdXJyZW50IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5fc3RvcEF0TmV4dEl0ZXJhdGlvbiA9IGZ1bmN0aW9uIChub3cpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUobm93KSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHZhciBuZXh0U3RvcCA9IHRoaXMuX3N0YXRlLmdldE5leHRTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIG5vdyk7XG5cdCAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuX2VsYXBzZWRUaW1lLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgIHZhciBpdGVyYXRpb25zID0gTWF0aC5tYXgoTWF0aC5jZWlsKHBvc2l0aW9uIC8gdGhpcy5idWZmZXIuZHVyYXRpb24pLCAxKTtcblx0ICAgICAgICAgICAgdmFyIHN0b3BUaW1lID0gdGhpcy5fZWxhcHNlZFRpbWUuZ2V0VGltZU9mVGljayhpdGVyYXRpb25zICogdGhpcy5idWZmZXIuZHVyYXRpb24sIG5leHRTdG9wID8gbmV4dFN0b3AudGltZSAtIHRoaXMuc2FtcGxlVGltZSA6IEluZmluaXR5KTtcblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHN0b3BUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBsYXliYWNrIHNwZWVkLiAxIGlzIG5vcm1hbCBzcGVlZC4gVGhpcyBpcyBub3QgYSBzaWduYWwgYmVjYXVzZVxuXHRcdCAqIFNhZmFyaSBhbmQgaU9TIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IHBsYXliYWNrUmF0ZSBhcyBhIHNpZ25hbC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdwbGF5YmFja1JhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5YmFja1JhdGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUocmF0ZSwgbm93KTtcblx0ICAgICAgICAgICAgLy9pZiBpdCdzIG5vdCBsb29waW5nXG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RvcEF0TmV4dEl0ZXJhdGlvbihub3cpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vc2V0IGFsbCB0aGUgc291cmNlc1xuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICAgICAgc291cmNlLnBsYXliYWNrUmF0ZS5zZXRWYWx1ZUF0VGltZShyYXRlLCBub3cpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIG9mIHRoZSBidWZmZXIuIFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBvc2l0aW9uXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAncG9zaXRpb24nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUobm93KSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIHRoaXMubG9hZGVkKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZHVyYXRpb24gPSB0aGlzLmJ1ZmZlci5kdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuX2VsYXBzZWRUaW1lLmdldFRpY2tzQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gJSBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGlyZWN0aW9uIHRoZSBidWZmZXIgc2hvdWxkIHBsYXkgaW5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgcmV2ZXJzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ3JldmVyc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIucmV2ZXJzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJldikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIucmV2ZXJzZSA9IHJldjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGFsbCB0aGUgYnVmZmVyIGlzIGxvYWRlZFxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3QuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2Rpc2Nvbm5lY3QgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgc291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0gbnVsbDtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBsYXllcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlBsYXllcnMgY29tYmluZXMgbXVsdGlwbGUgW1RvbmUuUGxheWVyXShQbGF5ZXIpIG9iamVjdHMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IHVybHMgQW4gb2JqZWN0IG1hcHBpbmcgYSBuYW1lIHRvIGEgdXJsLlxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9uPX0gb25sb2FkIFRoZSBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiBhbGwgYnVmZmVycyBhcmUgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzID0gZnVuY3Rpb24gKHVybHMpIHtcblx0ICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgYXJncy5zaGlmdCgpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmdzLCBbJ29ubG9hZCddLCBUb25lLlBsYXllcnMpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IHZvbHVtZSBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIHNvdXJjZS52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLy9tYWtlIHRoZSBvdXRwdXQgZXhwbGljaXRseSBzdGVyZW9cblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnQgPSAyO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIC8vbXV0ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY29udGFpbmVyIG9mIGFsbCBvZiB0aGUgcGxheWVyc1xuXHRcdFx0ICogQHR5cGUge09iamVjdH1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzID0ge307XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgbG9hZGluZyBjb3VudFxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogcHJpdmF0ZSBob2xkZXIgb2YgdGhlIGZhZGVJbiB0aW1lXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mYWRlSW4gPSBvcHRpb25zLmZhZGVJbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHByaXZhdGUgaG9sZGVyIG9mIHRoZSBmYWRlT3V0IHRpbWVcblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZhZGVPdXQgPSBvcHRpb25zLmZhZGVPdXQ7XG5cdCAgICAgICAgLy9hZGQgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdCAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB1cmxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCsrO1xuXHQgICAgICAgICAgICB0aGlzLmFkZChuYW1lLCB1cmxzW25hbWVdLCB0aGlzLl9idWZmZXJMb2FkZWQuYmluZCh0aGlzLCBvcHRpb25zLm9ubG9hZCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBsYXllcnMsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZSxcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdmYWRlSW4nOiAwLFxuXHQgICAgICAgICdmYWRlT3V0JzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBIGJ1ZmZlciB3YXMgbG9hZGVkLiBkZWNyZW1lbnQgdGhlIGNvdW50ZXIuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2tcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuX2J1ZmZlckxvYWRlZCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudC0tO1xuXHQgICAgICAgIGlmICh0aGlzLl9sb2FkaW5nQ291bnQgPT09IDAgJiYgY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiBzb3VyY2UubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGZhZGVJbiB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGZhZGVJblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdmYWRlSW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mYWRlSW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmYWRlSW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmFkZUluID0gZmFkZUluO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHBsYXllci5mYWRlSW4gPSBmYWRlSW47XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGZhZGVPdXQgdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBmYWRlT3V0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ2ZhZGVPdXQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9mYWRlT3V0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZmFkZU91dCkge1xuXHQgICAgICAgICAgICB0aGlzLl9mYWRlT3V0ID0gZmFkZU91dDtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgICAgICBwbGF5ZXIuZmFkZU91dCA9IGZhZGVPdXQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHN0YXRlIG9mIHRoZSBwbGF5ZXJzIG9iamVjdC4gUmV0dXJucyBcInN0YXJ0ZWRcIiBpZiBhbnkgb2YgdGhlIHBsYXllcnMgYXJlIHBsYXlpbmcuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVycyNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIHN0YXRlXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgcGxheWluZyA9IGZhbHNlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHBsYXlpbmcgPSBwbGF5aW5nIHx8IHBsYXllci5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgcmV0dXJuIHBsYXlpbmcgPyBUb25lLlN0YXRlLlN0YXJ0ZWQgOiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVHJ1ZSBpZiB0aGUgYnVmZmVycyBvYmplY3QgaGFzIGEgYnVmZmVyIGJ5IHRoYXQgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIG5hbWUgIFRoZSBrZXkgb3IgaW5kZXggb2YgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuXG5cdFx0ICogIEByZXR1cm4gIHtCb29sZWFufVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXJzLmhhc093blByb3BlcnR5KG5hbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgYSBwbGF5ZXIgYnkgbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgbmFtZSAgVGhlIHBsYXllcnMgbmFtZSBhcyBkZWZpbmVkIGluXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25zdHJ1Y3RvciBvYmplY3Qgb3IgYGFkZGAgbWV0aG9kLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QbGF5ZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuaGFzKG5hbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXJzW25hbWVdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5QbGF5ZXJzOiBubyBwbGF5ZXIgbmFtZWQgJyArIG5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdFx0ICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG5cdFx0ICogQHJldHVybiB7VG9uZS5QbGF5ZXJzfSAgICAgICAgICAgIHRoaXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5fZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIGZvciAodmFyIHBsYXllck5hbWUgaW4gdGhpcy5fcGxheWVycykge1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9wbGF5ZXJzW3BsYXllck5hbWVdLCBwbGF5ZXJOYW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgYWxsIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVycyNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaXNMb2FkZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIGlzTG9hZGVkID0gaXNMb2FkZWQgJiYgcGxheWVyLmxvYWRlZDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHJldHVybiBpc0xvYWRlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYSBwbGF5ZXIgYnkgbmFtZSBhbmQgdXJsIHRvIHRoZSBQbGF5ZXJzXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgbmFtZSAgICAgIEEgdW5pcXVlIG5hbWUgdG8gZ2l2ZSB0aGUgcGxheWVyXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xUb25lLkJ1ZmZlcnxBdWRpb2J1ZmZlcn0gIHVybCAgRWl0aGVyIHRoZSB1cmwgb2YgdGhlIGJ1ZmVyLFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYWRkZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzW25hbWVdID0gbmV3IFRvbmUuUGxheWVyKHVybCwgY2FsbGJhY2spLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnNbbmFtZV0uZmFkZUluID0gdGhpcy5fZmFkZUluO1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnNbbmFtZV0uZmFkZU91dCA9IHRoaXMuX2ZhZGVPdXQ7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RvcCBhbGwgb2YgdGhlIHBsYXllcnMgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0ge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gc3RvcCBhbGwgb2YgdGhlIHBsYXllcnMuXG5cdFx0ICogQHJldHVybiB7VG9uZS5QbGF5ZXJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLnN0b3BBbGwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICBwbGF5ZXIuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRGlzcG9zZSBhbmQgZGlzY29ubmVjdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QbGF5ZXJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgIHBsYXllci5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGxheWVycyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGxheWVycztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlVzZXJNZWRpYSB1c2VzIE1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEgdG8gb3BlbiB1cFxuXHRcdCAqICAgICAgICAgIGFuZCBleHRlcm5hbCBtaWNyb3Bob25lIG9yIGF1ZGlvIGlucHV0LiBDaGVja1xuXHRcdCAqICAgICAgICAgIFtNZWRpYURldmljZXMgQVBJIFN1cHBvcnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9NZWRpYURldmljZXMvZ2V0VXNlck1lZGlhKVxuXHRcdCAqICAgICAgICAgIHRvIHNlZSB3aGljaCBicm93c2VycyBhcmUgc3VwcG9ydGVkLiBBY2Nlc3MgdG8gYW4gZXh0ZXJuYWwgaW5wdXRcblx0XHQgKiAgICAgICAgICBpcyBsaW1pdGVkIHRvIHNlY3VyZSAoSFRUUFMpIGNvbm5lY3Rpb25zLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHM9fSB2b2x1bWUgVGhlIGxldmVsIG9mIHRoZSBpbnB1dFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbGlzdCB0aGUgaW5wdXRzIGFuZCBvcGVuIHRoZSB0aGlyZCBvbmVcblx0XHQgKiB2YXIgbW90dSA9IG5ldyBUb25lLlVzZXJNZWRpYSgpO1xuXHRcdCAqXG5cdFx0ICogLy9vcGVuaW5nIHRoZSBpbnB1dCBhc2tzIHRoZSB1c2VyIHRvIGFjdGl2YXRlIHRoZWlyIG1pY1xuXHRcdCAqIG1vdHUub3BlbigpLnRoZW4oZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vcHJvbWlzZSByZXNvbHZlcyB3aGVuIGlucHV0IGlzIGF2YWlsYWJsZVxuXHRcdCAqIH0pO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd2b2x1bWUnXSwgVG9uZS5Vc2VyTWVkaWEpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIE1lZGlhU3RyZWFtTm9kZVxuXHRcdFx0ICogIEB0eXBlIHtNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0gPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtZWRpYSBzdHJlYW0gY3JlYXRlZCBieSBnZXRVc2VyTWVkaWEuXG5cdFx0XHQgKiAgQHR5cGUge0xvY2FsTWVkaWFTdHJlYW19XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9wZW4gZGV2aWNlXG5cdFx0XHQgKiAgQHR5cGUgIHtNZWRpYURldmljZUluZm99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RldmljZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBpbnB1dC52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVXNlck1lZGlhLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVXNlck1lZGlhLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgT3BlbiB0aGUgbWVkaWEgc3RyZWFtLiBJZiBhIHN0cmluZyBpcyBwYXNzZWQgaW4sIGl0IGlzIGFzc3VtZWRcblx0XHQgKiAgdG8gYmUgdGhlIGxhYmVsIG9yIGlkIG9mIHRoZSBzdHJlYW0sIGlmIGEgbnVtYmVyIGlzIHBhc3NlZCBpbixcblx0XHQgKiAgaXQgaXMgdGhlIGlucHV0IG51bWJlciBvZiB0aGUgc3RyZWFtLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSBbbGFiZWxPcklkPVwiZGVmYXVsdFwiXSBUaGUgbGFiZWwgb3IgaWQgb2YgdGhlIGF1ZGlvIGlucHV0IG1lZGlhIGRldmljZS5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggbm8gYXJndW1lbnQsIHRoZSBkZWZhdWx0IHN0cmVhbSBpcyBvcGVuZWQuXG5cdFx0ICogIEByZXR1cm4ge1Byb21pc2V9IFRoZSBwcm9taXNlIGlzIHJlc29sdmVkIHdoZW4gdGhlIHN0cmVhbSBpcyBvcGVuLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAobGFiZWxPcklkKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuVXNlck1lZGlhLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uIChkZXZpY2VzKSB7XG5cdCAgICAgICAgICAgIHZhciBkZXZpY2U7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGxhYmVsT3JJZCkpIHtcblx0ICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZXNbbGFiZWxPcklkXTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZXMuZmluZChmdW5jdGlvbiAoZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRldmljZS5sYWJlbCA9PT0gbGFiZWxPcklkIHx8IGRldmljZS5kZXZpY2VJZCA9PT0gbGFiZWxPcklkO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICAvL2RpZG4ndCBmaW5kIGEgbWF0Y2hpbmcgZGV2aWNlXG5cdCAgICAgICAgICAgICAgICBpZiAoIWRldmljZSAmJiBkZXZpY2VzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICBkZXZpY2UgPSBkZXZpY2VzWzBdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZGV2aWNlICYmIFRvbmUuaXNEZWZpbmVkKGxhYmVsT3JJZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuVXNlck1lZGlhOiBubyBtYXRjaGluZyBkZXZpY2U6ICcgKyBsYWJlbE9ySWQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2RldmljZSA9IGRldmljZTtcblx0ICAgICAgICAgICAgLy9kbyBnZXRVc2VyTWVkaWFcblx0ICAgICAgICAgICAgdmFyIGNvbnN0cmFpbnRzID0ge1xuXHQgICAgICAgICAgICAgICAgYXVkaW86IHtcblx0ICAgICAgICAgICAgICAgICAgICAnZWNob0NhbmNlbGxhdGlvbic6IGZhbHNlLFxuXHQgICAgICAgICAgICAgICAgICAgICdzYW1wbGVSYXRlJzogdGhpcy5jb250ZXh0LnNhbXBsZVJhdGVcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgaWYgKGRldmljZSkge1xuXHQgICAgICAgICAgICAgICAgY29uc3RyYWludHMuYXVkaW8uZGV2aWNlSWQgPSBkZXZpY2UuZGV2aWNlSWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKGNvbnN0cmFpbnRzKS50aGVuKGZ1bmN0aW9uIChzdHJlYW0pIHtcblx0ICAgICAgICAgICAgICAgIC8vc3RhcnQgYSBuZXcgc291cmNlIG9ubHkgaWYgdGhlIHByZXZpb3VzIG9uZSBpcyBjbG9zZWRcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc3RyZWFtKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vV3JhcCBhIE1lZGlhU3RyZWFtU291cmNlTm9kZSBhcm91bmQgdGhlIGxpdmUgaW5wdXQgc3RyZWFtLlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtID0gdGhpcy5jb250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHN0cmVhbSk7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9Db25uZWN0IHRoZSBNZWRpYVN0cmVhbVNvdXJjZU5vZGUgdG8gYSBnYXRlIGdhaW4gbm9kZVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xvc2UgdGhlIG1lZGlhIHN0cmVhbVxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlVzZXJNZWRpYX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdHJlYW0pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RyZWFtLmdldEF1ZGlvVHJhY2tzKCkuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcblx0ICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBvbGQgbWVkaWEgc3RyZWFtXG5cdCAgICAgICAgICAgIHRoaXMuX21lZGlhU3RyZWFtLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9kZXZpY2UgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIHRoZSBsaXN0IG9mIGF1ZGlvIGlucHV0IGRldmljZXMgYXZhaWxhYmxlLlxuXHRcdCAqICBAcmV0dXJuIHtQcm9taXNlfSBUaGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdpdGggdGhlIGRldmljZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVXNlck1lZGlhLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uKGRldmljZXMpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2coZGV2aWNlcylcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEuZW51bWVyYXRlRGV2aWNlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKCkudGhlbihmdW5jdGlvbiAoZGV2aWNlcykge1xuXHQgICAgICAgICAgICByZXR1cm4gZGV2aWNlcy5maWx0ZXIoZnVuY3Rpb24gKGRldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGRldmljZS5raW5kID09PSAnYXVkaW9pbnB1dCc7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBcInN0YXJ0ZWRcIiB3aGVuIHRoZSBtaWNyb3Bob25lIGlzIG9wZW5cblx0XHQgKiAgYW5kIFwic3RvcHBlZFwiIHdoZW4gdGhlIG1pYyBpcyBjbG9zZWQuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtICYmIHRoaXMuX3N0cmVhbS5hY3RpdmUgPyBUb25lLlN0YXRlLlN0YXJ0ZWQgOiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFJldHVybnMgYW4gaWRlbnRpZmllciBmb3IgdGhlIHJlcHJlc2VudGVkIGRldmljZSB0aGF0IGlzXG5cdFx0ICogXHRwZXJzaXN0ZWQgYWNyb3NzIHNlc3Npb25zLiBJdCBpcyB1bi1ndWVzc2FibGUgYnkgb3RoZXIgYXBwbGljYXRpb25zIGFuZFxuXHRcdCAqIFx0dW5pcXVlIHRvIHRoZSBvcmlnaW4gb2YgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uIEl0IGlzIHJlc2V0IHdoZW4gdGhlXG5cdFx0ICogXHR1c2VyIGNsZWFycyBjb29raWVzIChmb3IgUHJpdmF0ZSBCcm93c2luZywgYSBkaWZmZXJlbnQgaWRlbnRpZmllciBpc1xuXHRcdCAqIFx0dXNlZCB0aGF0IGlzIG5vdCBwZXJzaXN0ZWQgYWNyb3NzIHNlc3Npb25zKS4gUmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGVcblx0XHQgKiBcdGRldmljZSBpcyBub3Qgb3Blbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgZGV2aWNlSWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdkZXZpY2VJZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZS5kZXZpY2VJZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRSZXR1cm5zIGEgZ3JvdXAgaWRlbnRpZmllci4gVHdvIGRldmljZXMgaGF2ZSB0aGVcblx0XHQgKiBcdHNhbWUgZ3JvdXAgaWRlbnRpZmllciBpZiB0aGV5IGJlbG9uZyB0byB0aGUgc2FtZSBwaHlzaWNhbCBkZXZpY2UuXG5cdFx0ICogXHRSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZSBkZXZpY2UgaXMgbm90IG9wZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIGdyb3VwSWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdncm91cElkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlLmdyb3VwSWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0UmV0dXJucyBhIGxhYmVsIGRlc2NyaWJpbmcgdGhpcyBkZXZpY2UgKGZvciBleGFtcGxlIFwiQnVpbHQtaW4gTWljcm9waG9uZVwiKS5cblx0XHQgKiBcdFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlIGRldmljZSBpcyBub3Qgb3BlbiBvciBsYWJlbCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogXHRiZWNhdXNlIG9mIHBlcm1pc3Npb25zLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBncm91cElkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnbGFiZWwnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2UubGFiZWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUgdGhlIG91dHB1dC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9tdXRlIHRoZSBvdXRwdXRcblx0XHQgKiB1c2VyTWVkaWEubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cC5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlVzZXJNZWRpYX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNsb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIElmIGdldFVzZXJNZWRpYSBpcyBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIuXG5cdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBzdXBwb3J0ZWRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYSwgJ3N1cHBvcnRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuaXNEZWZpbmVkKG5hdmlnYXRvci5tZWRpYURldmljZXMpICYmIFRvbmUuaXNGdW5jdGlvbihuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5Vc2VyTWVkaWE7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5NaWRpIGlzIGEgcHJpbWl0aXZlIHR5cGUgZm9yIGVuY29kaW5nIFRpbWUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgVG9uZS5NaWRpIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIG9yIHdpdGhvdXQgdGhlIGBuZXdgIGtleXdvcmQuIFRvbmUuTWlkaSBjYW4gYmUgcGFzc2VkXG5cdFx0ICogICAgICAgICBpbnRvIHRoZSBwYXJhbWV0ZXIgb2YgYW55IG1ldGhvZCB3aGljaCB0YWtlcyB0aW1lIGFzIGFuIGFyZ3VtZW50LlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRnJlcXVlbmN5fVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHQgPSBUb25lLk1pZGkoXCI0blwiKTsvL2EgcXVhcnRlciBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5NaWRpKSB7XG5cdCAgICAgICAgICAgIFRvbmUuRnJlcXVlbmN5LmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLk1pZGkodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkaSwgVG9uZS5GcmVxdWVuY3kpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fZGVmYXVsdFVuaXRzID0gJ21pZGknO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgZnJlcXVlbmN5IGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9mcmVxdWVuY3lUb1VuaXRzID0gZnVuY3Rpb24gKGZyZXEpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMuY2FsbCh0aGlzLCBmcmVxKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgdGljayBpbiB0aGUgY3VycmVudCB0aW1lIHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7VGlja3N9IHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cy5jYWxsKHRoaXMsIHRpY2tzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGJlYXRzIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBiZWF0c1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5LmZ0b20oVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMuY2FsbCh0aGlzLCBiZWF0cykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzLmNhbGwodGhpcywgc2Vjb25kcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgYXMgYSBNSURJIG5vdGVcblx0XHQgKiAgQHJldHVybiAge01JREl9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5NaWRpKDYwKS50b01pZGkoKTsgLy82MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS50b01pZGkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgYXMgYSBNSURJIG5vdGVcblx0XHQgKiAgQHJldHVybiAge01JREl9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5NaWRpKDYwKS50b01pZGkoKTsgLy82MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kubXRvZih0aGlzLnRvTWlkaSgpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJhbnNwb3NlcyB0aGUgZnJlcXVlbmN5IGJ5IHRoZSBnaXZlbiBudW1iZXIgb2Ygc2VtaXRvbmVzLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbH0gIGludGVydmFsXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkZyZXF1ZW5jeX0gQSBuZXcgdHJhbnNwb3NlZCBmcmVxdWVuY3lcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkE0XCIpLnRyYW5zcG9zZSgzKTsgLy9cIkM1XCJcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUudHJhbnNwb3NlID0gZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMudG9NaWRpKCkgKyBpbnRlcnZhbCk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkaTtcblx0fSk7XG5cdFxuXHRyZXR1cm4gVG9uZTtcbn0pKTsiLCIvKiEgcDUuanMgdjAuNy4yIFNlcHRlbWJlciAwMiwgMjAxOCAqLyAhZnVuY3Rpb24oYSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9YSgpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxhKTtlbHNle3ZhciBiO2I9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLGIucDU9YSgpfX0oZnVuY3Rpb24oKXt2YXIgYTtyZXR1cm4gZnVuY3Rpb24gYShiLGMsZCl7ZnVuY3Rpb24gZShnLGgpe2lmKCFjW2ddKXtpZighYltnXSl7dmFyIGk9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighaCYmaSlyZXR1cm4gaShnLCEwKTtpZihmKXJldHVybiBmKGcsITApO3ZhciBqPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrZytcIidcIik7dGhyb3cgai5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGp9dmFyIGs9Y1tnXT17ZXhwb3J0czp7fX07YltnXVswXS5jYWxsKGsuZXhwb3J0cyxmdW5jdGlvbihhKXt2YXIgYz1iW2ddWzFdW2FdO3JldHVybiBlKGN8fGEpfSxrLGsuZXhwb3J0cyxhLGIsYyxkKX1yZXR1cm4gY1tnXS5leHBvcnRzfWZvcih2YXIgZj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGc9MDtnPGQubGVuZ3RoO2crKyllKGRbZ10pO3JldHVybiBlfSh7MTpbZnVuY3Rpb24oYSxiLGMpeyFmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGEpe3ZhciBiPWEuY2hhckNvZGVBdCgwKTtyZXR1cm4gYj09PWZ8fGI9PT1rPzYyOmI9PT1nfHxiPT09bD82MzpiPGg/LTE6YjxoKzEwP2ItaCsyNisyNjpiPGorMjY/Yi1qOmI8aSsyNj9iLWkrMjY6dm9pZCAwfWZ1bmN0aW9uIGMoYSl7ZnVuY3Rpb24gYyhhKXtqW2wrK109YX12YXIgZCxmLGcsaCxpLGo7aWYoYS5sZW5ndGglND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7dmFyIGs9YS5sZW5ndGg7aT1cIj1cIj09PWEuY2hhckF0KGstMik/MjpcIj1cIj09PWEuY2hhckF0KGstMSk/MTowLGo9bmV3IGUoMyphLmxlbmd0aC80LWkpLGc9aT4wP2EubGVuZ3RoLTQ6YS5sZW5ndGg7dmFyIGw9MDtmb3IoZD0wLGY9MDtkPGc7ZCs9NCxmKz0zKWg9YihhLmNoYXJBdChkKSk8PDE4fGIoYS5jaGFyQXQoZCsxKSk8PDEyfGIoYS5jaGFyQXQoZCsyKSk8PDZ8YihhLmNoYXJBdChkKzMpKSxjKCgxNjcxMTY4MCZoKT4+MTYpLGMoKDY1MjgwJmgpPj44KSxjKDI1NSZoKTtyZXR1cm4gMj09PWk/KGg9YihhLmNoYXJBdChkKSk8PDJ8YihhLmNoYXJBdChkKzEpKT4+NCxjKDI1NSZoKSk6MT09PWkmJihoPWIoYS5jaGFyQXQoZCkpPDwxMHxiKGEuY2hhckF0KGQrMSkpPDw0fGIoYS5jaGFyQXQoZCsyKSk+PjIsYyhoPj44JjI1NSksYygyNTUmaCkpLGp9ZnVuY3Rpb24gZChhKXtmdW5jdGlvbiBiKGEpe3JldHVyblwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLmNoYXJBdChhKX1mdW5jdGlvbiBjKGEpe3JldHVybiBiKGE+PjE4JjYzKStiKGE+PjEyJjYzKStiKGE+PjYmNjMpK2IoNjMmYSl9dmFyIGQsZSxmLGc9YS5sZW5ndGglMyxoPVwiXCI7Zm9yKGQ9MCxmPWEubGVuZ3RoLWc7ZDxmO2QrPTMpZT0oYVtkXTw8MTYpKyhhW2QrMV08PDgpK2FbZCsyXSxoKz1jKGUpO3N3aXRjaChnKXtjYXNlIDE6ZT1hW2EubGVuZ3RoLTFdLGgrPWIoZT4+MiksaCs9YihlPDw0JjYzKSxoKz1cIj09XCI7YnJlYWs7Y2FzZSAyOmU9KGFbYS5sZW5ndGgtMl08PDgpK2FbYS5sZW5ndGgtMV0saCs9YihlPj4xMCksaCs9YihlPj40JjYzKSxoKz1iKGU8PDImNjMpLGgrPVwiPVwifXJldHVybiBofXZhciBlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksZj1cIitcIi5jaGFyQ29kZUF0KDApLGc9XCIvXCIuY2hhckNvZGVBdCgwKSxoPVwiMFwiLmNoYXJDb2RlQXQoMCksaT1cImFcIi5jaGFyQ29kZUF0KDApLGo9XCJBXCIuY2hhckNvZGVBdCgwKSxrPVwiLVwiLmNoYXJDb2RlQXQoMCksbD1cIl9cIi5jaGFyQ29kZUF0KDApO2EudG9CeXRlQXJyYXk9YyxhLmZyb21CeXRlQXJyYXk9ZH0odm9pZCAwPT09Yz90aGlzLmJhc2U2NGpzPXt9OmMpfSx7fV0sMjpbZnVuY3Rpb24oYSxiLGMpe30se31dLDM6W2Z1bmN0aW9uKGEsYixjKXsoZnVuY3Rpb24oYil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZCgpe2Z1bmN0aW9uIGEoKXt9dHJ5e3ZhciBiPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBiLmZvbz1mdW5jdGlvbigpe3JldHVybiA0Mn0sYi5jb25zdHJ1Y3Rvcj1hLDQyPT09Yi5mb28oKSYmYi5jb25zdHJ1Y3Rvcj09PWEmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGIuc3ViYXJyYXkmJjA9PT1iLnN1YmFycmF5KDEsMSkuYnl0ZUxlbmd0aH1jYXRjaChhKXtyZXR1cm4hMX19ZnVuY3Rpb24gZSgpe3JldHVybiBmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIGYoYSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBmPyhmLlRZUEVEX0FSUkFZX1NVUFBPUlR8fCh0aGlzLmxlbmd0aD0wLHRoaXMucGFyZW50PXZvaWQgMCksXCJudW1iZXJcIj09dHlwZW9mIGE/Zyh0aGlzLGEpOlwic3RyaW5nXCI9PXR5cGVvZiBhP2godGhpcyxhLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06XCJ1dGY4XCIpOmkodGhpcyxhKSk6YXJndW1lbnRzLmxlbmd0aD4xP25ldyBmKGEsYXJndW1lbnRzWzFdKTpuZXcgZihhKX1mdW5jdGlvbiBnKGEsYil7aWYoYT1wKGEsYjwwPzA6MHxxKGIpKSwhZi5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgYz0wO2M8YjtjKyspYVtjXT0wO3JldHVybiBhfWZ1bmN0aW9uIGgoYSxiLGMpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBjJiZcIlwiIT09Y3x8KGM9XCJ1dGY4XCIpLGE9cChhLDB8cyhiLGMpKSxhLndyaXRlKGIsYyksYX1mdW5jdGlvbiBpKGEsYil7aWYoZi5pc0J1ZmZlcihiKSlyZXR1cm4gaihhLGIpO2lmKFkoYikpcmV0dXJuIGsoYSxiKTtpZihudWxsPT1iKXRocm93IG5ldyBUeXBlRXJyb3IoXCJtdXN0IHN0YXJ0IHdpdGggbnVtYmVyLCBidWZmZXIsIGFycmF5IG9yIHN0cmluZ1wiKTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXIpe2lmKGIuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIGwoYSxiKTtpZihiIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIG0oYSxiKX1yZXR1cm4gYi5sZW5ndGg/bihhLGIpOm8oYSxiKX1mdW5jdGlvbiBqKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTtyZXR1cm4gYT1wKGEsYyksYi5jb3B5KGEsMCwwLGMpLGF9ZnVuY3Rpb24gayhhLGIpe3ZhciBjPTB8cShiLmxlbmd0aCk7YT1wKGEsYyk7Zm9yKHZhciBkPTA7ZDxjO2QrPTEpYVtkXT0yNTUmYltkXTtyZXR1cm4gYX1mdW5jdGlvbiBsKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTthPXAoYSxjKTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlhW2RdPTI1NSZiW2RdO3JldHVybiBhfWZ1bmN0aW9uIG0oYSxiKXtyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyhiLmJ5dGVMZW5ndGgsYT1mLl9hdWdtZW50KG5ldyBVaW50OEFycmF5KGIpKSk6YT1sKGEsbmV3IFVpbnQ4QXJyYXkoYikpLGF9ZnVuY3Rpb24gbihhLGIpe3ZhciBjPTB8cShiLmxlbmd0aCk7YT1wKGEsYyk7Zm9yKHZhciBkPTA7ZDxjO2QrPTEpYVtkXT0yNTUmYltkXTtyZXR1cm4gYX1mdW5jdGlvbiBvKGEsYil7dmFyIGMsZD0wO1wiQnVmZmVyXCI9PT1iLnR5cGUmJlkoYi5kYXRhKSYmKGM9Yi5kYXRhLGQ9MHxxKGMubGVuZ3RoKSksYT1wKGEsZCk7Zm9yKHZhciBlPTA7ZTxkO2UrPTEpYVtlXT0yNTUmY1tlXTtyZXR1cm4gYX1mdW5jdGlvbiBwKGEsYil7cmV0dXJuIGYuVFlQRURfQVJSQVlfU1VQUE9SVD8oYT1mLl9hdWdtZW50KG5ldyBVaW50OEFycmF5KGIpKSxhLl9fcHJvdG9fXz1mLnByb3RvdHlwZSk6KGEubGVuZ3RoPWIsYS5faXNCdWZmZXI9ITApLDAhPT1iJiZiPD1mLnBvb2xTaXplPj4+MSYmKGEucGFyZW50PVopLGF9ZnVuY3Rpb24gcShhKXtpZihhPj1lKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4XCIrZSgpLnRvU3RyaW5nKDE2KStcIiBieXRlc1wiKTtyZXR1cm4gMHxhfWZ1bmN0aW9uIHIoYSxiKXtpZighKHRoaXMgaW5zdGFuY2VvZiByKSlyZXR1cm4gbmV3IHIoYSxiKTt2YXIgYz1uZXcgZihhLGIpO3JldHVybiBkZWxldGUgYy5wYXJlbnQsY31mdW5jdGlvbiBzKGEsYil7XCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPVwiXCIrYSk7dmFyIGM9YS5sZW5ndGg7aWYoMD09PWMpcmV0dXJuIDA7Zm9yKHZhciBkPSExOzspc3dpdGNoKGIpe2Nhc2VcImFzY2lpXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwicmF3XCI6Y2FzZVwicmF3c1wiOnJldHVybiBjO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBSKGEpLmxlbmd0aDtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gMipjO2Nhc2VcImhleFwiOnJldHVybiBjPj4+MTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gVShhKS5sZW5ndGg7ZGVmYXVsdDppZihkKXJldHVybiBSKGEpLmxlbmd0aDtiPShcIlwiK2IpLnRvTG93ZXJDYXNlKCksZD0hMH19ZnVuY3Rpb24gdChhLGIsYyl7dmFyIGQ9ITE7aWYoYnw9MCxjPXZvaWQgMD09PWN8fGM9PT0xLzA/dGhpcy5sZW5ndGg6MHxjLGF8fChhPVwidXRmOFwiKSxiPDAmJihiPTApLGM+dGhpcy5sZW5ndGgmJihjPXRoaXMubGVuZ3RoKSxjPD1iKXJldHVyblwiXCI7Zm9yKDs7KXN3aXRjaChhKXtjYXNlXCJoZXhcIjpyZXR1cm4gRih0aGlzLGIsYyk7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIEIodGhpcyxiLGMpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIEQodGhpcyxiLGMpO2Nhc2VcImJpbmFyeVwiOnJldHVybiBFKHRoaXMsYixjKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gQSh0aGlzLGIsYyk7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIEcodGhpcyxiLGMpO2RlZmF1bHQ6aWYoZCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrYSk7YT0oYStcIlwiKS50b0xvd2VyQ2FzZSgpLGQ9ITB9fWZ1bmN0aW9uIHUoYSxiLGMsZCl7Yz1OdW1iZXIoYyl8fDA7dmFyIGU9YS5sZW5ndGgtYztkPyhkPU51bWJlcihkKSk+ZSYmKGQ9ZSk6ZD1lO3ZhciBmPWIubGVuZ3RoO2lmKGYlMiE9MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGhleCBzdHJpbmdcIik7ZD5mLzImJihkPWYvMik7Zm9yKHZhciBnPTA7ZzxkO2crKyl7dmFyIGg9cGFyc2VJbnQoYi5zdWJzdHIoMipnLDIpLDE2KTtpZihpc05hTihoKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGhleCBzdHJpbmdcIik7YVtjK2ddPWh9cmV0dXJuIGd9ZnVuY3Rpb24gdihhLGIsYyxkKXtyZXR1cm4gVihSKGIsYS5sZW5ndGgtYyksYSxjLGQpfWZ1bmN0aW9uIHcoYSxiLGMsZCl7cmV0dXJuIFYoUyhiKSxhLGMsZCl9ZnVuY3Rpb24geChhLGIsYyxkKXtyZXR1cm4gdyhhLGIsYyxkKX1mdW5jdGlvbiB5KGEsYixjLGQpe3JldHVybiBWKFUoYiksYSxjLGQpfWZ1bmN0aW9uIHooYSxiLGMsZCl7cmV0dXJuIFYoVChiLGEubGVuZ3RoLWMpLGEsYyxkKX1mdW5jdGlvbiBBKGEsYixjKXtyZXR1cm4gMD09PWImJmM9PT1hLmxlbmd0aD9XLmZyb21CeXRlQXJyYXkoYSk6Vy5mcm9tQnl0ZUFycmF5KGEuc2xpY2UoYixjKSl9ZnVuY3Rpb24gQihhLGIsYyl7Yz1NYXRoLm1pbihhLmxlbmd0aCxjKTtmb3IodmFyIGQ9W10sZT1iO2U8Yzspe3ZhciBmPWFbZV0sZz1udWxsLGg9Zj4yMzk/NDpmPjIyMz8zOmY+MTkxPzI6MTtpZihlK2g8PWMpe3ZhciBpLGosayxsO3N3aXRjaChoKXtjYXNlIDE6ZjwxMjgmJihnPWYpO2JyZWFrO2Nhc2UgMjppPWFbZSsxXSwxMjg9PSgxOTImaSkmJihsPSgzMSZmKTw8Nnw2MyZpKT4xMjcmJihnPWwpO2JyZWFrO2Nhc2UgMzppPWFbZSsxXSxqPWFbZSsyXSwxMjg9PSgxOTImaSkmJjEyOD09KDE5MiZqKSYmKGw9KDE1JmYpPDwxMnwoNjMmaSk8PDZ8NjMmaik+MjA0NyYmKGw8NTUyOTZ8fGw+NTczNDMpJiYoZz1sKTticmVhaztjYXNlIDQ6aT1hW2UrMV0saj1hW2UrMl0saz1hW2UrM10sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImaikmJjEyOD09KDE5MiZrKSYmKGw9KDE1JmYpPDwxOHwoNjMmaSk8PDEyfCg2MyZqKTw8Nnw2MyZrKT42NTUzNSYmbDwxMTE0MTEyJiYoZz1sKX19bnVsbD09PWc/KGc9NjU1MzMsaD0xKTpnPjY1NTM1JiYoZy09NjU1MzYsZC5wdXNoKGc+Pj4xMCYxMDIzfDU1Mjk2KSxnPTU2MzIwfDEwMjMmZyksZC5wdXNoKGcpLGUrPWh9cmV0dXJuIEMoZCl9ZnVuY3Rpb24gQyhhKXt2YXIgYj1hLmxlbmd0aDtpZihiPD0kKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhKTtmb3IodmFyIGM9XCJcIixkPTA7ZDxiOyljKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhLnNsaWNlKGQsZCs9JCkpO3JldHVybiBjfWZ1bmN0aW9uIEQoYSxiLGMpe3ZhciBkPVwiXCI7Yz1NYXRoLm1pbihhLmxlbmd0aCxjKTtmb3IodmFyIGU9YjtlPGM7ZSsrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmFbZV0pO3JldHVybiBkfWZ1bmN0aW9uIEUoYSxiLGMpe3ZhciBkPVwiXCI7Yz1NYXRoLm1pbihhLmxlbmd0aCxjKTtmb3IodmFyIGU9YjtlPGM7ZSsrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtlXSk7cmV0dXJuIGR9ZnVuY3Rpb24gRihhLGIsYyl7dmFyIGQ9YS5sZW5ndGg7KCFifHxiPDApJiYoYj0wKSwoIWN8fGM8MHx8Yz5kKSYmKGM9ZCk7Zm9yKHZhciBlPVwiXCIsZj1iO2Y8YztmKyspZSs9UShhW2ZdKTtyZXR1cm4gZX1mdW5jdGlvbiBHKGEsYixjKXtmb3IodmFyIGQ9YS5zbGljZShiLGMpLGU9XCJcIixmPTA7ZjxkLmxlbmd0aDtmKz0yKWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoZFtmXSsyNTYqZFtmKzFdKTtyZXR1cm4gZX1mdW5jdGlvbiBIKGEsYixjKXtpZihhJTEhPTB8fGE8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm9mZnNldCBpcyBub3QgdWludFwiKTtpZihhK2I+Yyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGhcIil9ZnVuY3Rpb24gSShhLGIsYyxkLGUsZyl7aWYoIWYuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImJ1ZmZlciBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlXCIpO2lmKGI+ZXx8YjxnKXRocm93IG5ldyBSYW5nZUVycm9yKFwidmFsdWUgaXMgb3V0IG9mIGJvdW5kc1wiKTtpZihjK2Q+YS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gSihhLGIsYyxkKXtiPDAmJihiPTY1NTM1K2IrMSk7Zm9yKHZhciBlPTAsZj1NYXRoLm1pbihhLmxlbmd0aC1jLDIpO2U8ZjtlKyspYVtjK2VdPShiJjI1NTw8OCooZD9lOjEtZSkpPj4+OCooZD9lOjEtZSl9ZnVuY3Rpb24gSyhhLGIsYyxkKXtiPDAmJihiPTQyOTQ5NjcyOTUrYisxKTtmb3IodmFyIGU9MCxmPU1hdGgubWluKGEubGVuZ3RoLWMsNCk7ZTxmO2UrKylhW2MrZV09Yj4+PjgqKGQ/ZTozLWUpJjI1NX1mdW5jdGlvbiBMKGEsYixjLGQsZSxmKXtpZihiPmV8fGI8Zil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInZhbHVlIGlzIG91dCBvZiBib3VuZHNcIik7aWYoYytkPmEubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiaW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKGM8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBNKGEsYixjLGQsZSl7cmV0dXJuIGV8fEwoYSxiLGMsNCwzLjQwMjgyMzQ2NjM4NTI4ODZlMzgsLTMuNDAyODIzNDY2Mzg1Mjg4NmUzOCksWC53cml0ZShhLGIsYyxkLDIzLDQpLGMrNH1mdW5jdGlvbiBOKGEsYixjLGQsZSl7cmV0dXJuIGV8fEwoYSxiLGMsOCwxLjc5NzY5MzEzNDg2MjMxNTdlMzA4LC0xLjc5NzY5MzEzNDg2MjMxNTdlMzA4KSxYLndyaXRlKGEsYixjLGQsNTIsOCksYys4fWZ1bmN0aW9uIE8oYSl7aWYoYT1QKGEpLnJlcGxhY2UoYWEsXCJcIiksYS5sZW5ndGg8MilyZXR1cm5cIlwiO2Zvcig7YS5sZW5ndGglNCE9MDspYSs9XCI9XCI7cmV0dXJuIGF9ZnVuY3Rpb24gUChhKXtyZXR1cm4gYS50cmltP2EudHJpbSgpOmEucmVwbGFjZSgvXlxccyt8XFxzKyQvZyxcIlwiKX1mdW5jdGlvbiBRKGEpe3JldHVybiBhPDE2P1wiMFwiK2EudG9TdHJpbmcoMTYpOmEudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFIoYSxiKXtiPWJ8fDEvMDtmb3IodmFyIGMsZD1hLmxlbmd0aCxlPW51bGwsZj1bXSxnPTA7ZzxkO2crKyl7aWYoKGM9YS5jaGFyQ29kZUF0KGcpKT41NTI5NSYmYzw1NzM0NCl7aWYoIWUpe2lmKGM+NTYzMTkpeyhiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihnKzE9PT1kKXsoYi09Myk+LTEmJmYucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9ZT1jO2NvbnRpbnVlfWlmKGM8NTYzMjApeyhiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KSxlPWM7Y29udGludWV9Yz02NTUzNisoZS01NTI5Njw8MTB8Yy01NjMyMCl9ZWxzZSBlJiYoYi09Myk+LTEmJmYucHVzaCgyMzksMTkxLDE4OSk7aWYoZT1udWxsLGM8MTI4KXtpZigoYi09MSk8MClicmVhaztmLnB1c2goYyl9ZWxzZSBpZihjPDIwNDgpe2lmKChiLT0yKTwwKWJyZWFrO2YucHVzaChjPj42fDE5Miw2MyZjfDEyOCl9ZWxzZSBpZihjPDY1NTM2KXtpZigoYi09Myk8MClicmVhaztmLnB1c2goYz4+MTJ8MjI0LGM+PjYmNjN8MTI4LDYzJmN8MTI4KX1lbHNle2lmKCEoYzwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIik7aWYoKGItPTQpPDApYnJlYWs7Zi5wdXNoKGM+PjE4fDI0MCxjPj4xMiY2M3wxMjgsYz4+NiY2M3wxMjgsNjMmY3wxMjgpfX1yZXR1cm4gZn1mdW5jdGlvbiBTKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKDI1NSZhLmNoYXJDb2RlQXQoYykpO3JldHVybiBifWZ1bmN0aW9uIFQoYSxiKXtmb3IodmFyIGMsZCxlLGY9W10sZz0wO2c8YS5sZW5ndGgmJiEoKGItPTIpPDApO2crKyljPWEuY2hhckNvZGVBdChnKSxkPWM+PjgsZT1jJTI1NixmLnB1c2goZSksZi5wdXNoKGQpO3JldHVybiBmfWZ1bmN0aW9uIFUoYSl7cmV0dXJuIFcudG9CeXRlQXJyYXkoTyhhKSl9ZnVuY3Rpb24gVihhLGIsYyxkKXtmb3IodmFyIGU9MDtlPGQmJiEoZStjPj1iLmxlbmd0aHx8ZT49YS5sZW5ndGgpO2UrKyliW2UrY109YVtlXTtyZXR1cm4gZX12YXIgVz1hKFwiYmFzZTY0LWpzXCIpLFg9YShcImllZWU3NTRcIiksWT1hKFwiaXNhcnJheVwiKTtjLkJ1ZmZlcj1mLGMuU2xvd0J1ZmZlcj1yLGMuSU5TUEVDVF9NQVhfQllURVM9NTAsZi5wb29sU2l6ZT04MTkyO3ZhciBaPXt9O2YuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDAhPT1iLlRZUEVEX0FSUkFZX1NVUFBPUlQ/Yi5UWVBFRF9BUlJBWV9TVVBQT1JUOmQoKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGYucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxmLl9fcHJvdG9fXz1VaW50OEFycmF5KTooZi5wcm90b3R5cGUubGVuZ3RoPXZvaWQgMCxmLnByb3RvdHlwZS5wYXJlbnQ9dm9pZCAwKSxmLmlzQnVmZmVyPWZ1bmN0aW9uKGEpe3JldHVybiEobnVsbD09YXx8IWEuX2lzQnVmZmVyKX0sZi5jb21wYXJlPWZ1bmN0aW9uKGEsYil7aWYoIWYuaXNCdWZmZXIoYSl8fCFmLmlzQnVmZmVyKGIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzXCIpO2lmKGE9PT1iKXJldHVybiAwO2Zvcih2YXIgYz1hLmxlbmd0aCxkPWIubGVuZ3RoLGU9MCxnPU1hdGgubWluKGMsZCk7ZTxnJiZhW2VdPT09YltlXTspKytlO3JldHVybiBlIT09ZyYmKGM9YVtlXSxkPWJbZV0pLGM8ZD8tMTpkPGM/MTowfSxmLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oYSl7c3dpdGNoKFN0cmluZyhhKS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInJhd1wiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxmLmNvbmNhdD1mdW5jdGlvbihhLGIpe2lmKCFZKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJsaXN0IGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycy5cIik7aWYoMD09PWEubGVuZ3RoKXJldHVybiBuZXcgZigwKTt2YXIgYztpZih2b2lkIDA9PT1iKWZvcihiPTAsYz0wO2M8YS5sZW5ndGg7YysrKWIrPWFbY10ubGVuZ3RoO3ZhciBkPW5ldyBmKGIpLGU9MDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgZz1hW2NdO2cuY29weShkLGUpLGUrPWcubGVuZ3RofXJldHVybiBkfSxmLmJ5dGVMZW5ndGg9cyxmLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBhPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1hP1wiXCI6MD09PWFyZ3VtZW50cy5sZW5ndGg/Qih0aGlzLDAsYSk6dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGYucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihhKXtpZighZi5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PWF8fDA9PT1mLmNvbXBhcmUodGhpcyxhKX0sZi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBhPVwiXCIsYj1jLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoYT10aGlzLnRvU3RyaW5nKFwiaGV4XCIsMCxiKS5tYXRjaCgvLnsyfS9nKS5qb2luKFwiIFwiKSx0aGlzLmxlbmd0aD5iJiYoYSs9XCIgLi4uIFwiKSksXCI8QnVmZmVyIFwiK2ErXCI+XCJ9LGYucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oYSl7aWYoIWYuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXJcIik7cmV0dXJuIHRoaXM9PT1hPzA6Zi5jb21wYXJlKHRoaXMsYSl9LGYucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYixjKXtmb3IodmFyIGQ9LTEsZT0wO2MrZTxhLmxlbmd0aDtlKyspaWYoYVtjK2VdPT09YlstMT09PWQ/MDplLWRdKXtpZigtMT09PWQmJihkPWUpLGUtZCsxPT09Yi5sZW5ndGgpcmV0dXJuIGMrZH1lbHNlIGQ9LTE7cmV0dXJuLTF9aWYoYj4yMTQ3NDgzNjQ3P2I9MjE0NzQ4MzY0NzpiPC0yMTQ3NDgzNjQ4JiYoYj0tMjE0NzQ4MzY0OCksYj4+PTAsMD09PXRoaXMubGVuZ3RoKXJldHVybi0xO2lmKGI+PXRoaXMubGVuZ3RoKXJldHVybi0xO2lmKGI8MCYmKGI9TWF0aC5tYXgodGhpcy5sZW5ndGgrYiwwKSksXCJzdHJpbmdcIj09dHlwZW9mIGEpcmV0dXJuIDA9PT1hLmxlbmd0aD8tMTpTdHJpbmcucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLGEsYik7aWYoZi5pc0J1ZmZlcihhKSlyZXR1cm4gYyh0aGlzLGEsYik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGEpcmV0dXJuIGYuVFlQRURfQVJSQVlfU1VQUE9SVCYmXCJmdW5jdGlvblwiPT09VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcyxhLGIpOmModGhpcyxbYV0sYik7dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlclwiKX0sZi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBjb25zb2xlLmxvZyhcIi5nZXQoKSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdXNpbmcgYXJyYXkgaW5kZXhlcyBpbnN0ZWFkLlwiKSx0aGlzLnJlYWRVSW50OChhKX0sZi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGNvbnNvbGUubG9nKFwiLnNldCgpIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB1c2luZyBhcnJheSBpbmRleGVzIGluc3RlYWQuXCIpLHRoaXMud3JpdGVVSW50OChhLGIpfSxmLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihhLGIsYyxkKXtpZih2b2lkIDA9PT1iKWQ9XCJ1dGY4XCIsYz10aGlzLmxlbmd0aCxiPTA7ZWxzZSBpZih2b2lkIDA9PT1jJiZcInN0cmluZ1wiPT10eXBlb2YgYilkPWIsYz10aGlzLmxlbmd0aCxiPTA7ZWxzZSBpZihpc0Zpbml0ZShiKSlifD0wLGlzRmluaXRlKGMpPyhjfD0wLHZvaWQgMD09PWQmJihkPVwidXRmOFwiKSk6KGQ9YyxjPXZvaWQgMCk7ZWxzZXt2YXIgZT1kO2Q9YixiPTB8YyxjPWV9dmFyIGY9dGhpcy5sZW5ndGgtYjtpZigodm9pZCAwPT09Y3x8Yz5mKSYmKGM9ZiksYS5sZW5ndGg+MCYmKGM8MHx8YjwwKXx8Yj50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzXCIpO2R8fChkPVwidXRmOFwiKTtmb3IodmFyIGc9ITE7Oylzd2l0Y2goZCl7Y2FzZVwiaGV4XCI6cmV0dXJuIHUodGhpcyxhLGIsYyk7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIHYodGhpcyxhLGIsYyk7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gdyh0aGlzLGEsYixjKTtjYXNlXCJiaW5hcnlcIjpyZXR1cm4geCh0aGlzLGEsYixjKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4geSh0aGlzLGEsYixjKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4geih0aGlzLGEsYixjKTtkZWZhdWx0OmlmKGcpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2QpO2Q9KFwiXCIrZCkudG9Mb3dlckNhc2UoKSxnPSEwfX0sZi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciAkPTQwOTY7Zi5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmxlbmd0aDthPX5+YSxiPXZvaWQgMD09PWI/Yzp+fmIsYTwwPyhhKz1jKTwwJiYoYT0wKTphPmMmJihhPWMpLGI8MD8oYis9Yyk8MCYmKGI9MCk6Yj5jJiYoYj1jKSxiPGEmJihiPWEpO3ZhciBkO2lmKGYuVFlQRURfQVJSQVlfU1VQUE9SVClkPWYuX2F1Z21lbnQodGhpcy5zdWJhcnJheShhLGIpKTtlbHNle3ZhciBlPWItYTtkPW5ldyBmKGUsdm9pZCAwKTtmb3IodmFyIGc9MDtnPGU7ZysrKWRbZ109dGhpc1tnK2FdfXJldHVybiBkLmxlbmd0aCYmKGQucGFyZW50PXRoaXMucGFyZW50fHx0aGlzKSxkfSxmLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGEsYixjKXthfD0wLGJ8PTAsY3x8SChhLGIsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZD10aGlzW2FdLGU9MSxmPTA7KytmPGImJihlKj0yNTYpOylkKz10aGlzW2ErZl0qZTtyZXR1cm4gZH0sZi5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihhLGIsYyl7YXw9MCxifD0wLGN8fEgoYSxiLHRoaXMubGVuZ3RoKTtmb3IodmFyIGQ9dGhpc1thKy0tYl0sZT0xO2I+MCYmKGUqPTI1Nik7KWQrPXRoaXNbYSstLWJdKmU7cmV0dXJuIGR9LGYucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsMSx0aGlzLmxlbmd0aCksdGhpc1thXX0sZi5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwyLHRoaXMubGVuZ3RoKSx0aGlzW2FdfHRoaXNbYSsxXTw8OH0sZi5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwyLHRoaXMubGVuZ3RoKSx0aGlzW2FdPDw4fHRoaXNbYSsxXX0sZi5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSwodGhpc1thXXx0aGlzW2ErMV08PDh8dGhpc1thKzJdPDwxNikrMTY3NzcyMTYqdGhpc1thKzNdfSxmLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbYV0rKHRoaXNbYSsxXTw8MTZ8dGhpc1thKzJdPDw4fHRoaXNbYSszXSl9LGYucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihhLGIsYyl7YXw9MCxifD0wLGN8fEgoYSxiLHRoaXMubGVuZ3RoKTtmb3IodmFyIGQ9dGhpc1thXSxlPTEsZj0wOysrZjxiJiYoZSo9MjU2KTspZCs9dGhpc1thK2ZdKmU7cmV0dXJuIGUqPTEyOCxkPj1lJiYoZC09TWF0aC5wb3coMiw4KmIpKSxkfSxmLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oYSxiLGMpe2F8PTAsYnw9MCxjfHxIKGEsYix0aGlzLmxlbmd0aCk7Zm9yKHZhciBkPWIsZT0xLGY9dGhpc1thKy0tZF07ZD4wJiYoZSo9MjU2KTspZis9dGhpc1thKy0tZF0qZTtyZXR1cm4gZSo9MTI4LGY+PWUmJihmLT1NYXRoLnBvdygyLDgqYikpLGZ9LGYucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1thXT8tMSooMjU1LXRoaXNbYV0rMSk6dGhpc1thXX0sZi5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oYSxiKXtifHxIKGEsMix0aGlzLmxlbmd0aCk7dmFyIGM9dGhpc1thXXx0aGlzW2ErMV08PDg7cmV0dXJuIDMyNzY4JmM/NDI5NDkwMTc2MHxjOmN9LGYucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGEsYil7Ynx8SChhLDIsdGhpcy5sZW5ndGgpO3ZhciBjPXRoaXNbYSsxXXx0aGlzW2FdPDw4O3JldHVybiAzMjc2OCZjPzQyOTQ5MDE3NjB8YzpjfSxmLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksdGhpc1thXXx0aGlzW2ErMV08PDh8dGhpc1thKzJdPDwxNnx0aGlzW2ErM108PDI0fSxmLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksdGhpc1thXTw8MjR8dGhpc1thKzFdPDwxNnx0aGlzW2ErMl08PDh8dGhpc1thKzNdfSxmLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksWC5yZWFkKHRoaXMsYSwhMCwyMyw0KX0sZi5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLFgucmVhZCh0aGlzLGEsITEsMjMsNCl9LGYucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsOCx0aGlzLmxlbmd0aCksWC5yZWFkKHRoaXMsYSwhMCw1Miw4KX0sZi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw4LHRoaXMubGVuZ3RoKSxYLnJlYWQodGhpcyxhLCExLDUyLDgpfSxmLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihhLGIsYyxkKXthPSthLGJ8PTAsY3w9MCxkfHxJKHRoaXMsYSxiLGMsTWF0aC5wb3coMiw4KmMpLDApO3ZhciBlPTEsZj0wO2Zvcih0aGlzW2JdPTI1NSZhOysrZjxjJiYoZSo9MjU2KTspdGhpc1tiK2ZdPWEvZSYyNTU7cmV0dXJuIGIrY30sZi5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oYSxiLGMsZCl7YT0rYSxifD0wLGN8PTAsZHx8SSh0aGlzLGEsYixjLE1hdGgucG93KDIsOCpjKSwwKTt2YXIgZT1jLTEsZj0xO2Zvcih0aGlzW2IrZV09MjU1JmE7LS1lPj0wJiYoZio9MjU2KTspdGhpc1tiK2VdPWEvZiYyNTU7cmV0dXJuIGIrY30sZi5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDEsMjU1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGE9TWF0aC5mbG9vcihhKSksdGhpc1tiXT0yNTUmYSxiKzF9LGYucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwyLDY1NTM1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT0yNTUmYSx0aGlzW2IrMV09YT4+PjgpOkoodGhpcyxhLGIsITApLGIrMn0sZi5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsNjU1MzUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj44LHRoaXNbYisxXT0yNTUmYSk6Sih0aGlzLGEsYiwhMSksYisyfSxmLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsNCw0Mjk0OTY3Mjk1LDApLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiKzNdPWE+Pj4yNCx0aGlzW2IrMl09YT4+PjE2LHRoaXNbYisxXT1hPj4+OCx0aGlzW2JdPTI1NSZhKTpLKHRoaXMsYSxiLCEwKSxiKzR9LGYucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiw0LDQyOTQ5NjcyOTUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj4yNCx0aGlzW2IrMV09YT4+PjE2LHRoaXNbYisyXT1hPj4+OCx0aGlzW2IrM109MjU1JmEpOksodGhpcyxhLGIsITEpLGIrNH0sZi5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihhLGIsYyxkKXtpZihhPSthLGJ8PTAsIWQpe3ZhciBlPU1hdGgucG93KDIsOCpjLTEpO0kodGhpcyxhLGIsYyxlLTEsLWUpfXZhciBmPTAsZz0xLGg9YTwwPzE6MDtmb3IodGhpc1tiXT0yNTUmYTsrK2Y8YyYmKGcqPTI1Nik7KXRoaXNbYitmXT0oYS9nPj4wKS1oJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGEsYixjLGQpe2lmKGE9K2EsYnw9MCwhZCl7dmFyIGU9TWF0aC5wb3coMiw4KmMtMSk7SSh0aGlzLGEsYixjLGUtMSwtZSl9dmFyIGY9Yy0xLGc9MSxoPWE8MD8xOjA7Zm9yKHRoaXNbYitmXT0yNTUmYTstLWY+PTAmJihnKj0yNTYpOyl0aGlzW2IrZl09KGEvZz4+MCktaCYyNTU7cmV0dXJuIGIrY30sZi5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMSwxMjcsLTEyOCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoYT1NYXRoLmZsb29yKGEpKSxhPDAmJihhPTI1NSthKzEpLHRoaXNbYl09MjU1JmEsYisxfSxmLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwyLDMyNzY3LC0zMjc2OCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPTI1NSZhLHRoaXNbYisxXT1hPj4+OCk6Sih0aGlzLGEsYiwhMCksYisyfSxmLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwyLDMyNzY3LC0zMjc2OCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj44LHRoaXNbYisxXT0yNTUmYSk6Sih0aGlzLGEsYiwhMSksYisyfSxmLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tiXT0yNTUmYSx0aGlzW2IrMV09YT4+PjgsdGhpc1tiKzJdPWE+Pj4xNix0aGlzW2IrM109YT4+PjI0KTpLKHRoaXMsYSxiLCEwKSxiKzR9LGYucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksYTwwJiYoYT00Mjk0OTY3Mjk1K2ErMSksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPWE+Pj4yNCx0aGlzW2IrMV09YT4+PjE2LHRoaXNbYisyXT1hPj4+OCx0aGlzW2IrM109MjU1JmEpOksodGhpcyxhLGIsITEpLGIrNH0sZi5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTSh0aGlzLGEsYiwhMCxjKX0sZi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTSh0aGlzLGEsYiwhMSxjKX0sZi5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIE4odGhpcyxhLGIsITAsYyl9LGYucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBOKHRoaXMsYSxiLCExLGMpfSxmLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGEsYixjLGQpe2lmKGN8fChjPTApLGR8fDA9PT1kfHwoZD10aGlzLmxlbmd0aCksYj49YS5sZW5ndGgmJihiPWEubGVuZ3RoKSxifHwoYj0wKSxkPjAmJmQ8YyYmKGQ9YyksZD09PWMpcmV0dXJuIDA7aWYoMD09PWEubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoYjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihjPDB8fGM+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihkPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kc1wiKTtkPnRoaXMubGVuZ3RoJiYoZD10aGlzLmxlbmd0aCksYS5sZW5ndGgtYjxkLWMmJihkPWEubGVuZ3RoLWIrYyk7dmFyIGUsZz1kLWM7aWYodGhpcz09PWEmJmM8YiYmYjxkKWZvcihlPWctMTtlPj0wO2UtLSlhW2UrYl09dGhpc1tlK2NdO2Vsc2UgaWYoZzwxZTN8fCFmLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGU9MDtlPGc7ZSsrKWFbZStiXT10aGlzW2UrY107ZWxzZSBhLl9zZXQodGhpcy5zdWJhcnJheShjLGMrZyksYik7cmV0dXJuIGd9LGYucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oYSxiLGMpe2lmKGF8fChhPTApLGJ8fChiPTApLGN8fChjPXRoaXMubGVuZ3RoKSxjPGIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJlbmQgPCBzdGFydFwiKTtpZihjIT09YiYmMCE9PXRoaXMubGVuZ3RoKXtpZihiPDB8fGI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwic3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihjPDB8fGM+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJlbmQgb3V0IG9mIGJvdW5kc1wiKTt2YXIgZDtpZihcIm51bWJlclwiPT10eXBlb2YgYSlmb3IoZD1iO2Q8YztkKyspdGhpc1tkXT1hO2Vsc2V7dmFyIGU9UihhLnRvU3RyaW5nKCkpLGY9ZS5sZW5ndGg7Zm9yKGQ9YjtkPGM7ZCsrKXRoaXNbZF09ZVtkJWZdfXJldHVybiB0aGlzfX0sZi5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5KXtpZihmLlRZUEVEX0FSUkFZX1NVUFBPUlQpcmV0dXJuIG5ldyBmKHRoaXMpLmJ1ZmZlcjtmb3IodmFyIGE9bmV3IFVpbnQ4QXJyYXkodGhpcy5sZW5ndGgpLGI9MCxjPWEubGVuZ3RoO2I8YztiKz0xKWFbYl09dGhpc1tiXTtyZXR1cm4gYS5idWZmZXJ9dGhyb3cgbmV3IFR5cGVFcnJvcihcIkJ1ZmZlci50b0FycmF5QnVmZmVyIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpfTt2YXIgXz1mLnByb3RvdHlwZTtmLl9hdWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiBhLmNvbnN0cnVjdG9yPWYsYS5faXNCdWZmZXI9ITAsYS5fc2V0PWEuc2V0LGEuZ2V0PV8uZ2V0LGEuc2V0PV8uc2V0LGEud3JpdGU9Xy53cml0ZSxhLnRvU3RyaW5nPV8udG9TdHJpbmcsYS50b0xvY2FsZVN0cmluZz1fLnRvU3RyaW5nLGEudG9KU09OPV8udG9KU09OLGEuZXF1YWxzPV8uZXF1YWxzLGEuY29tcGFyZT1fLmNvbXBhcmUsYS5pbmRleE9mPV8uaW5kZXhPZixhLmNvcHk9Xy5jb3B5LGEuc2xpY2U9Xy5zbGljZSxhLnJlYWRVSW50TEU9Xy5yZWFkVUludExFLGEucmVhZFVJbnRCRT1fLnJlYWRVSW50QkUsYS5yZWFkVUludDg9Xy5yZWFkVUludDgsYS5yZWFkVUludDE2TEU9Xy5yZWFkVUludDE2TEUsYS5yZWFkVUludDE2QkU9Xy5yZWFkVUludDE2QkUsYS5yZWFkVUludDMyTEU9Xy5yZWFkVUludDMyTEUsYS5yZWFkVUludDMyQkU9Xy5yZWFkVUludDMyQkUsYS5yZWFkSW50TEU9Xy5yZWFkSW50TEUsYS5yZWFkSW50QkU9Xy5yZWFkSW50QkUsYS5yZWFkSW50OD1fLnJlYWRJbnQ4LGEucmVhZEludDE2TEU9Xy5yZWFkSW50MTZMRSxhLnJlYWRJbnQxNkJFPV8ucmVhZEludDE2QkUsYS5yZWFkSW50MzJMRT1fLnJlYWRJbnQzMkxFLGEucmVhZEludDMyQkU9Xy5yZWFkSW50MzJCRSxhLnJlYWRGbG9hdExFPV8ucmVhZEZsb2F0TEUsYS5yZWFkRmxvYXRCRT1fLnJlYWRGbG9hdEJFLGEucmVhZERvdWJsZUxFPV8ucmVhZERvdWJsZUxFLGEucmVhZERvdWJsZUJFPV8ucmVhZERvdWJsZUJFLGEud3JpdGVVSW50OD1fLndyaXRlVUludDgsYS53cml0ZVVJbnRMRT1fLndyaXRlVUludExFLGEud3JpdGVVSW50QkU9Xy53cml0ZVVJbnRCRSxhLndyaXRlVUludDE2TEU9Xy53cml0ZVVJbnQxNkxFLGEud3JpdGVVSW50MTZCRT1fLndyaXRlVUludDE2QkUsYS53cml0ZVVJbnQzMkxFPV8ud3JpdGVVSW50MzJMRSxhLndyaXRlVUludDMyQkU9Xy53cml0ZVVJbnQzMkJFLGEud3JpdGVJbnRMRT1fLndyaXRlSW50TEUsYS53cml0ZUludEJFPV8ud3JpdGVJbnRCRSxhLndyaXRlSW50OD1fLndyaXRlSW50OCxhLndyaXRlSW50MTZMRT1fLndyaXRlSW50MTZMRSxhLndyaXRlSW50MTZCRT1fLndyaXRlSW50MTZCRSxhLndyaXRlSW50MzJMRT1fLndyaXRlSW50MzJMRSxhLndyaXRlSW50MzJCRT1fLndyaXRlSW50MzJCRSxhLndyaXRlRmxvYXRMRT1fLndyaXRlRmxvYXRMRSxhLndyaXRlRmxvYXRCRT1fLndyaXRlRmxvYXRCRSxhLndyaXRlRG91YmxlTEU9Xy53cml0ZURvdWJsZUxFLGEud3JpdGVEb3VibGVCRT1fLndyaXRlRG91YmxlQkUsYS5maWxsPV8uZmlsbCxhLmluc3BlY3Q9Xy5pbnNwZWN0LGEudG9BcnJheUJ1ZmZlcj1fLnRvQXJyYXlCdWZmZXIsYX07dmFyIGFhPS9bXitcXC8wLTlBLVphLXotX10vZ30pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se1wiYmFzZTY0LWpzXCI6MSxpZWVlNzU0OjcsaXNhcnJheTo4fV0sNDpbZnVuY3Rpb24oYixjLGQpeyhmdW5jdGlvbihlLGYpeyFmdW5jdGlvbihiLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBkJiZ2b2lkIDAhPT1jP2MuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYSYmYS5hbWQ/YShlKTpiLkVTNlByb21pc2U9ZSgpfSh0aGlzLGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYShhKXt2YXIgYj10eXBlb2YgYTtyZXR1cm4gbnVsbCE9PWEmJihcIm9iamVjdFwiPT09Ynx8XCJmdW5jdGlvblwiPT09Yil9ZnVuY3Rpb24gYyhhKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBhfWZ1bmN0aW9uIGQoYSl7WD1hfWZ1bmN0aW9uIGcoYSl7WT1hfWZ1bmN0aW9uIGgoKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5uZXh0VGljayhtKX19ZnVuY3Rpb24gaSgpe3JldHVybiB2b2lkIDAhPT1XP2Z1bmN0aW9uKCl7VyhtKX06bCgpfWZ1bmN0aW9uIGooKXt2YXIgYT0wLGI9bmV3IF8obSksYz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtyZXR1cm4gYi5vYnNlcnZlKGMse2NoYXJhY3RlckRhdGE6ITB9KSxmdW5jdGlvbigpe2MuZGF0YT1hPSsrYSUyfX1mdW5jdGlvbiBrKCl7dmFyIGE9bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBhLnBvcnQxLm9ubWVzc2FnZT1tLGZ1bmN0aW9uKCl7cmV0dXJuIGEucG9ydDIucG9zdE1lc3NhZ2UoMCl9fWZ1bmN0aW9uIGwoKXt2YXIgYT1zZXRUaW1lb3V0O3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhKG0sMSl9fWZ1bmN0aW9uIG0oKXtmb3IodmFyIGE9MDthPFY7YSs9Mil7KDAsY2FbYV0pKGNhW2ErMV0pLGNhW2FdPXZvaWQgMCxjYVthKzFdPXZvaWQgMH1WPTB9ZnVuY3Rpb24gbigpe3RyeXt2YXIgYT1iLGM9YShcInZlcnR4XCIpO3JldHVybiBXPWMucnVuT25Mb29wfHxjLnJ1bk9uQ29udGV4dCxpKCl9Y2F0Y2goYSl7cmV0dXJuIGwoKX19ZnVuY3Rpb24gbyhhLGIpe3ZhciBjPWFyZ3VtZW50cyxkPXRoaXMsZT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihxKTt2b2lkIDA9PT1lW2VhXSYmSihlKTt2YXIgZj1kLl9zdGF0ZTtyZXR1cm4gZj9mdW5jdGlvbigpe3ZhciBhPWNbZi0xXTtZKGZ1bmN0aW9uKCl7cmV0dXJuIEcoZixlLGEsZC5fcmVzdWx0KX0pfSgpOkMoZCxlLGEsYiksZX1mdW5jdGlvbiBwKGEpe3ZhciBiPXRoaXM7aWYoYSYmXCJvYmplY3RcIj09dHlwZW9mIGEmJmEuY29uc3RydWN0b3I9PT1iKXJldHVybiBhO3ZhciBjPW5ldyBiKHEpO3JldHVybiB5KGMsYSksY31mdW5jdGlvbiBxKCl7fWZ1bmN0aW9uIHIoKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIil9ZnVuY3Rpb24gcygpe3JldHVybiBuZXcgVHlwZUVycm9yKFwiQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLlwiKX1mdW5jdGlvbiB0KGEpe3RyeXtyZXR1cm4gYS50aGVufWNhdGNoKGEpe3JldHVybiBpYS5lcnJvcj1hLGlhfX1mdW5jdGlvbiB1KGEsYixjLGQpe3RyeXthLmNhbGwoYixjLGQpfWNhdGNoKGEpe3JldHVybiBhfX1mdW5jdGlvbiB2KGEsYixjKXtZKGZ1bmN0aW9uKGEpe3ZhciBkPSExLGU9dShjLGIsZnVuY3Rpb24oYyl7ZHx8KGQ9ITAsYiE9PWM/eShhLGMpOkEoYSxjKSl9LGZ1bmN0aW9uKGIpe2R8fChkPSEwLEIoYSxiKSl9LFwiU2V0dGxlOiBcIisoYS5fbGFiZWx8fFwiIHVua25vd24gcHJvbWlzZVwiKSk7IWQmJmUmJihkPSEwLEIoYSxlKSl9LGEpfWZ1bmN0aW9uIHcoYSxiKXtiLl9zdGF0ZT09PWdhP0EoYSxiLl9yZXN1bHQpOmIuX3N0YXRlPT09aGE/QihhLGIuX3Jlc3VsdCk6QyhiLHZvaWQgMCxmdW5jdGlvbihiKXtyZXR1cm4geShhLGIpfSxmdW5jdGlvbihiKXtyZXR1cm4gQihhLGIpfSl9ZnVuY3Rpb24geChhLGIsZCl7Yi5jb25zdHJ1Y3Rvcj09PWEuY29uc3RydWN0b3ImJmQ9PT1vJiZiLmNvbnN0cnVjdG9yLnJlc29sdmU9PT1wP3coYSxiKTpkPT09aWE/KEIoYSxpYS5lcnJvciksaWEuZXJyb3I9bnVsbCk6dm9pZCAwPT09ZD9BKGEsYik6YyhkKT92KGEsYixkKTpBKGEsYil9ZnVuY3Rpb24geShiLGMpe2I9PT1jP0IoYixyKCkpOmEoYyk/eChiLGMsdChjKSk6QShiLGMpfWZ1bmN0aW9uIHooYSl7YS5fb25lcnJvciYmYS5fb25lcnJvcihhLl9yZXN1bHQpLEQoYSl9ZnVuY3Rpb24gQShhLGIpe2EuX3N0YXRlPT09ZmEmJihhLl9yZXN1bHQ9YixhLl9zdGF0ZT1nYSwwIT09YS5fc3Vic2NyaWJlcnMubGVuZ3RoJiZZKEQsYSkpfWZ1bmN0aW9uIEIoYSxiKXthLl9zdGF0ZT09PWZhJiYoYS5fc3RhdGU9aGEsYS5fcmVzdWx0PWIsWSh6LGEpKX1mdW5jdGlvbiBDKGEsYixjLGQpe3ZhciBlPWEuX3N1YnNjcmliZXJzLGY9ZS5sZW5ndGg7YS5fb25lcnJvcj1udWxsLGVbZl09YixlW2YrZ2FdPWMsZVtmK2hhXT1kLDA9PT1mJiZhLl9zdGF0ZSYmWShELGEpfWZ1bmN0aW9uIEQoYSl7dmFyIGI9YS5fc3Vic2NyaWJlcnMsYz1hLl9zdGF0ZTtpZigwIT09Yi5sZW5ndGgpe2Zvcih2YXIgZD12b2lkIDAsZT12b2lkIDAsZj1hLl9yZXN1bHQsZz0wO2c8Yi5sZW5ndGg7Zys9MylkPWJbZ10sZT1iW2crY10sZD9HKGMsZCxlLGYpOmUoZik7YS5fc3Vic2NyaWJlcnMubGVuZ3RoPTB9fWZ1bmN0aW9uIEUoKXt0aGlzLmVycm9yPW51bGx9ZnVuY3Rpb24gRihhLGIpe3RyeXtyZXR1cm4gYShiKX1jYXRjaChhKXtyZXR1cm4gamEuZXJyb3I9YSxqYX19ZnVuY3Rpb24gRyhhLGIsZCxlKXt2YXIgZj1jKGQpLGc9dm9pZCAwLGg9dm9pZCAwLGk9dm9pZCAwLGo9dm9pZCAwO2lmKGYpe2lmKGc9RihkLGUpLGc9PT1qYT8oaj0hMCxoPWcuZXJyb3IsZy5lcnJvcj1udWxsKTppPSEwLGI9PT1nKXJldHVybiB2b2lkIEIoYixzKCkpfWVsc2UgZz1lLGk9ITA7Yi5fc3RhdGUhPT1mYXx8KGYmJmk/eShiLGcpOmo/QihiLGgpOmE9PT1nYT9BKGIsZyk6YT09PWhhJiZCKGIsZykpfWZ1bmN0aW9uIEgoYSxiKXt0cnl7YihmdW5jdGlvbihiKXt5KGEsYil9LGZ1bmN0aW9uKGIpe0IoYSxiKX0pfWNhdGNoKGIpe0IoYSxiKX19ZnVuY3Rpb24gSSgpe3JldHVybiBrYSsrfWZ1bmN0aW9uIEooYSl7YVtlYV09a2ErKyxhLl9zdGF0ZT12b2lkIDAsYS5fcmVzdWx0PXZvaWQgMCxhLl9zdWJzY3JpYmVycz1bXX1mdW5jdGlvbiBLKGEsYil7dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3Rvcj1hLHRoaXMucHJvbWlzZT1uZXcgYShxKSx0aGlzLnByb21pc2VbZWFdfHxKKHRoaXMucHJvbWlzZSksVShiKT8odGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5fcmVtYWluaW5nPWIubGVuZ3RoLHRoaXMuX3Jlc3VsdD1uZXcgQXJyYXkodGhpcy5sZW5ndGgpLDA9PT10aGlzLmxlbmd0aD9BKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpOih0aGlzLmxlbmd0aD10aGlzLmxlbmd0aHx8MCx0aGlzLl9lbnVtZXJhdGUoYiksMD09PXRoaXMuX3JlbWFpbmluZyYmQSh0aGlzLnByb21pc2UsdGhpcy5fcmVzdWx0KSkpOkIodGhpcy5wcm9taXNlLEwoKSl9ZnVuY3Rpb24gTCgpe3JldHVybiBuZXcgRXJyb3IoXCJBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXlcIil9ZnVuY3Rpb24gTShhKXtyZXR1cm4gbmV3IEsodGhpcyxhKS5wcm9taXNlfWZ1bmN0aW9uIE4oYSl7dmFyIGI9dGhpcztyZXR1cm4gbmV3IGIoVShhKT9mdW5jdGlvbihjLGQpe2Zvcih2YXIgZT1hLmxlbmd0aCxmPTA7ZjxlO2YrKyliLnJlc29sdmUoYVtmXSkudGhlbihjLGQpfTpmdW5jdGlvbihhLGIpe3JldHVybiBiKG5ldyBUeXBlRXJyb3IoXCJZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuXCIpKX0pfWZ1bmN0aW9uIE8oYSl7dmFyIGI9dGhpcyxjPW5ldyBiKHEpO3JldHVybiBCKGMsYSksY31mdW5jdGlvbiBQKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIllvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHByb21pc2UgY29uc3RydWN0b3JcIil9ZnVuY3Rpb24gUSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIil9ZnVuY3Rpb24gUihhKXt0aGlzW2VhXT1JKCksdGhpcy5fcmVzdWx0PXRoaXMuX3N0YXRlPXZvaWQgMCx0aGlzLl9zdWJzY3JpYmVycz1bXSxxIT09YSYmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEmJlAoKSx0aGlzIGluc3RhbmNlb2YgUj9IKHRoaXMsYSk6USgpKX1mdW5jdGlvbiBTKCl7dmFyIGE9dm9pZCAwO2lmKHZvaWQgMCE9PWYpYT1mO2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYpYT1zZWxmO2Vsc2UgdHJ5e2E9RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGEpe3Rocm93IG5ldyBFcnJvcihcInBvbHlmaWxsIGZhaWxlZCBiZWNhdXNlIGdsb2JhbCBvYmplY3QgaXMgdW5hdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudFwiKX12YXIgYj1hLlByb21pc2U7aWYoYil7dmFyIGM9bnVsbDt0cnl7Yz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYi5yZXNvbHZlKCkpfWNhdGNoKGEpe31pZihcIltvYmplY3QgUHJvbWlzZV1cIj09PWMmJiFiLmNhc3QpcmV0dXJufWEuUHJvbWlzZT1SfXZhciBUPXZvaWQgMDtUPUFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheTpmdW5jdGlvbihhKXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSl9O3ZhciBVPVQsVj0wLFc9dm9pZCAwLFg9dm9pZCAwLFk9ZnVuY3Rpb24oYSxiKXtjYVtWXT1hLGNhW1YrMV09YiwyPT09KFYrPTIpJiYoWD9YKG0pOmRhKCkpfSxaPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCwkPVp8fHt9LF89JC5NdXRhdGlvbk9ic2VydmVyfHwkLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsYWE9XCJ1bmRlZmluZWRcIj09dHlwZW9mIHNlbGYmJnZvaWQgMCE9PWUmJlwiW29iamVjdCBwcm9jZXNzXVwiPT09e30udG9TdHJpbmcuY2FsbChlKSxiYT1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBpbXBvcnRTY3JpcHRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWwsY2E9bmV3IEFycmF5KDFlMyksZGE9dm9pZCAwO2RhPWFhP2goKTpfP2ooKTpiYT9rKCk6dm9pZCAwPT09WiYmXCJmdW5jdGlvblwiPT10eXBlb2YgYj9uKCk6bCgpO3ZhciBlYT1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpLGZhPXZvaWQgMCxnYT0xLGhhPTIsaWE9bmV3IEUsamE9bmV3IEUsa2E9MDtyZXR1cm4gSy5wcm90b3R5cGUuX2VudW1lcmF0ZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9MDt0aGlzLl9zdGF0ZT09PWZhJiZiPGEubGVuZ3RoO2IrKyl0aGlzLl9lYWNoRW50cnkoYVtiXSxiKX0sSy5wcm90b3R5cGUuX2VhY2hFbnRyeT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3IsZD1jLnJlc29sdmU7aWYoZD09PXApe3ZhciBlPXQoYSk7aWYoZT09PW8mJmEuX3N0YXRlIT09ZmEpdGhpcy5fc2V0dGxlZEF0KGEuX3N0YXRlLGIsYS5fcmVzdWx0KTtlbHNlIGlmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhpcy5fcmVtYWluaW5nLS0sdGhpcy5fcmVzdWx0W2JdPWE7ZWxzZSBpZihjPT09Uil7dmFyIGY9bmV3IGMocSk7eChmLGEsZSksdGhpcy5fd2lsbFNldHRsZUF0KGYsYil9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQobmV3IGMoZnVuY3Rpb24oYil7cmV0dXJuIGIoYSl9KSxiKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChkKGEpLGIpfSxLLnByb3RvdHlwZS5fc2V0dGxlZEF0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLnByb21pc2U7ZC5fc3RhdGU9PT1mYSYmKHRoaXMuX3JlbWFpbmluZy0tLGE9PT1oYT9CKGQsYyk6dGhpcy5fcmVzdWx0W2JdPWMpLDA9PT10aGlzLl9yZW1haW5pbmcmJkEoZCx0aGlzLl9yZXN1bHQpfSxLLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztDKGEsdm9pZCAwLGZ1bmN0aW9uKGEpe3JldHVybiBjLl9zZXR0bGVkQXQoZ2EsYixhKX0sZnVuY3Rpb24oYSl7cmV0dXJuIGMuX3NldHRsZWRBdChoYSxiLGEpfSl9LFIuYWxsPU0sUi5yYWNlPU4sUi5yZXNvbHZlPXAsUi5yZWplY3Q9TyxSLl9zZXRTY2hlZHVsZXI9ZCxSLl9zZXRBc2FwPWcsUi5fYXNhcD1ZLFIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpSLHRoZW46byxjYXRjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsYSl9fSxSLnBvbHlmaWxsPVMsUi5Qcm9taXNlPVIsUn0pfSkuY2FsbCh0aGlzLGIoXCJfcHJvY2Vzc1wiKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se19wcm9jZXNzOjExfV0sNTpbZnVuY3Rpb24oYixjLGQpeyFmdW5jdGlvbihiLGUpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJmEuYW1kKWEoW1wiZXhwb3J0c1wiLFwibW9kdWxlXCJdLGUpO2Vsc2UgaWYodm9pZCAwIT09ZCYmdm9pZCAwIT09YyllKGQsYyk7ZWxzZXt2YXIgZj17ZXhwb3J0czp7fX07ZShmLmV4cG9ydHMsZiksYi5mZXRjaEpzb25wPWYuZXhwb3J0c319KHRoaXMsZnVuY3Rpb24oYSxiKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBjKCl7cmV0dXJuXCJqc29ucF9cIitEYXRlLm5vdygpK1wiX1wiK01hdGguY2VpbCgxZTUqTWF0aC5yYW5kb20oKSl9ZnVuY3Rpb24gZChhKXt0cnl7ZGVsZXRlIHdpbmRvd1thXX1jYXRjaChiKXt3aW5kb3dbYV09dm9pZCAwfX1mdW5jdGlvbiBlKGEpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpO2ImJmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBmKGEpe3ZhciBiPWFyZ3VtZW50cy5sZW5ndGg8PTF8fHZvaWQgMD09PWFyZ3VtZW50c1sxXT97fTphcmd1bWVudHNbMV0sZj1hLGg9Yi50aW1lb3V0fHxnLnRpbWVvdXQsaT1iLmpzb25wQ2FsbGJhY2t8fGcuanNvbnBDYWxsYmFjayxqPXZvaWQgMDtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZyxrKXt2YXIgbD1iLmpzb25wQ2FsbGJhY2tGdW5jdGlvbnx8YygpLG09aStcIl9cIitsO3dpbmRvd1tsXT1mdW5jdGlvbihhKXtnKHtvazohMCxqc29uOmZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShhKX19KSxqJiZjbGVhclRpbWVvdXQoaiksZShtKSxkKGwpfSxmKz0tMT09PWYuaW5kZXhPZihcIj9cIik/XCI/XCI6XCImXCI7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtuLnNldEF0dHJpYnV0ZShcInNyY1wiLFwiXCIrZitpK1wiPVwiK2wpLGIuY2hhcnNldCYmbi5zZXRBdHRyaWJ1dGUoXCJjaGFyc2V0XCIsYi5jaGFyc2V0KSxuLmlkPW0sZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKG4pLGo9c2V0VGltZW91dChmdW5jdGlvbigpe2sobmV3IEVycm9yKFwiSlNPTlAgcmVxdWVzdCB0byBcIithK1wiIHRpbWVkIG91dFwiKSksZChsKSxlKG0pLHdpbmRvd1tsXT1mdW5jdGlvbigpe2QobCl9fSxoKSxuLm9uZXJyb3I9ZnVuY3Rpb24oKXtrKG5ldyBFcnJvcihcIkpTT05QIHJlcXVlc3QgdG8gXCIrYStcIiBmYWlsZWRcIikpLGQobCksZShtKSxqJiZjbGVhclRpbWVvdXQoail9fSl9dmFyIGc9e3RpbWVvdXQ6NWUzLGpzb25wQ2FsbGJhY2s6XCJjYWxsYmFja1wiLGpzb25wQ2FsbGJhY2tGdW5jdGlvbjpudWxsfTtiLmV4cG9ydHM9Zn0pfSx7fV0sNjpbZnVuY3Rpb24oYixjLGQpe3ZhciBlPWV8fGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2lmKCEodm9pZCAwPT09YXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL01TSUUgWzEtOV1cXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpKXt2YXIgYj1hLmRvY3VtZW50LGM9ZnVuY3Rpb24oKXtyZXR1cm4gYS5VUkx8fGEud2Via2l0VVJMfHxhfSxkPWIuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLFwiYVwiKSxlPVwiZG93bmxvYWRcImluIGQsZj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgTW91c2VFdmVudChcImNsaWNrXCIpO2EuZGlzcGF0Y2hFdmVudChiKX0sZz0vY29uc3RydWN0b3IvaS50ZXN0KGEuSFRNTEVsZW1lbnQpfHxhLnNhZmFyaSxoPS9DcmlPU1xcL1tcXGRdKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxpPWZ1bmN0aW9uKGIpeyhhLnNldEltbWVkaWF0ZXx8YS5zZXRUaW1lb3V0KShmdW5jdGlvbigpe3Rocm93IGJ9LDApfSxqPVwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsaz00ZTQsbD1mdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbigpe1wic3RyaW5nXCI9PXR5cGVvZiBhP2MoKS5yZXZva2VPYmplY3RVUkwoYSk6YS5yZW1vdmUoKX07c2V0VGltZW91dChiLGspfSxtPWZ1bmN0aW9uKGEsYixjKXtiPVtdLmNvbmNhdChiKTtmb3IodmFyIGQ9Yi5sZW5ndGg7ZC0tOyl7dmFyIGU9YVtcIm9uXCIrYltkXV07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSl0cnl7ZS5jYWxsKGEsY3x8YSl9Y2F0Y2goYSl7aShhKX19fSxuPWZ1bmN0aW9uKGEpe3JldHVybi9eXFxzKig/OnRleHRcXC9cXFMqfGFwcGxpY2F0aW9uXFwveG1sfFxcUypcXC9cXFMqXFwreG1sKVxccyo7LipjaGFyc2V0XFxzKj1cXHMqdXRmLTgvaS50ZXN0KGEudHlwZSk/bmV3IEJsb2IoW1N0cmluZy5mcm9tQ2hhckNvZGUoNjUyNzkpLGFdLHt0eXBlOmEudHlwZX0pOmF9LG89ZnVuY3Rpb24oYixpLGspe2t8fChiPW4oYikpO3ZhciBvLHA9dGhpcyxxPWIudHlwZSxyPXE9PT1qLHM9ZnVuY3Rpb24oKXttKHAsXCJ3cml0ZXN0YXJ0IHByb2dyZXNzIHdyaXRlIHdyaXRlZW5kXCIuc3BsaXQoXCIgXCIpKX0sdD1mdW5jdGlvbigpe2lmKChofHxyJiZnKSYmYS5GaWxlUmVhZGVyKXt2YXIgZD1uZXcgRmlsZVJlYWRlcjtyZXR1cm4gZC5vbmxvYWRlbmQ9ZnVuY3Rpb24oKXt2YXIgYj1oP2QucmVzdWx0OmQucmVzdWx0LnJlcGxhY2UoL15kYXRhOlteO10qOy8sXCJkYXRhOmF0dGFjaG1lbnQvZmlsZTtcIik7YS5vcGVuKGIsXCJfYmxhbmtcIil8fChhLmxvY2F0aW9uLmhyZWY9YiksYj12b2lkIDAscC5yZWFkeVN0YXRlPXAuRE9ORSxzKCl9LGQucmVhZEFzRGF0YVVSTChiKSx2b2lkKHAucmVhZHlTdGF0ZT1wLklOSVQpfWlmKG98fChvPWMoKS5jcmVhdGVPYmplY3RVUkwoYikpLHIpYS5sb2NhdGlvbi5ocmVmPW87ZWxzZXthLm9wZW4obyxcIl9ibGFua1wiKXx8KGEubG9jYXRpb24uaHJlZj1vKX1wLnJlYWR5U3RhdGU9cC5ET05FLHMoKSxsKG8pfTtpZihwLnJlYWR5U3RhdGU9cC5JTklULGUpcmV0dXJuIG89YygpLmNyZWF0ZU9iamVjdFVSTChiKSx2b2lkIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmhyZWY9byxkLmRvd25sb2FkPWksZihkKSxzKCksbChvKSxwLnJlYWR5U3RhdGU9cC5ET05FfSk7dCgpfSxwPW8ucHJvdG90eXBlLHE9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuZXcgbyhhLGJ8fGEubmFtZXx8XCJkb3dubG9hZFwiLGMpfTtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYj9mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9Ynx8YS5uYW1lfHxcImRvd25sb2FkXCIsY3x8KGE9bihhKSksbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoYSxiKX06KHAuYWJvcnQ9ZnVuY3Rpb24oKXt9LHAucmVhZHlTdGF0ZT1wLklOSVQ9MCxwLldSSVRJTkc9MSxwLkRPTkU9MixwLmVycm9yPXAub253cml0ZXN0YXJ0PXAub25wcm9ncmVzcz1wLm9ud3JpdGU9cC5vbmFib3J0PXAub25lcnJvcj1wLm9ud3JpdGVlbmQ9bnVsbCxxKX19KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmfHxcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3d8fHRoaXMuY29udGVudCk7dm9pZCAwIT09YyYmYy5leHBvcnRzP2MuZXhwb3J0cy5zYXZlQXM9ZTp2b2lkIDAhPT1hJiZudWxsIT09YSYmbnVsbCE9PWEuYW1kJiZhKFwiRmlsZVNhdmVyLmpzXCIsZnVuY3Rpb24oKXtyZXR1cm4gZX0pfSx7fV0sNzpbZnVuY3Rpb24oYSxiLGMpe2MucmVhZD1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaD04KmUtZC0xLGk9KDE8PGgpLTEsaj1pPj4xLGs9LTcsbD1jP2UtMTowLG09Yz8tMToxLG49YVtiK2xdO2ZvcihsKz1tLGY9biYoMTw8LWspLTEsbj4+PS1rLGsrPWg7az4wO2Y9MjU2KmYrYVtiK2xdLGwrPW0say09OCk7Zm9yKGc9ZiYoMTw8LWspLTEsZj4+PS1rLGsrPWQ7az4wO2c9MjU2KmcrYVtiK2xdLGwrPW0say09OCk7aWYoMD09PWYpZj0xLWo7ZWxzZXtpZihmPT09aSlyZXR1cm4gZz9OYU46MS8wKihuPy0xOjEpO2crPU1hdGgucG93KDIsZCksZi09an1yZXR1cm4obj8tMToxKSpnKk1hdGgucG93KDIsZi1kKX0sYy53cml0ZT1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGcsaCxpLGo9OCpmLWUtMSxrPSgxPDxqKS0xLGw9az4+MSxtPTIzPT09ZT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsbj1kPzA6Zi0xLG89ZD8xOi0xLHA9YjwwfHwwPT09YiYmMS9iPDA/MTowO2ZvcihiPU1hdGguYWJzKGIpLGlzTmFOKGIpfHxiPT09MS8wPyhoPWlzTmFOKGIpPzE6MCxnPWspOihnPU1hdGguZmxvb3IoTWF0aC5sb2coYikvTWF0aC5MTjIpLGIqKGk9TWF0aC5wb3coMiwtZykpPDEmJihnLS0saSo9MiksYis9ZytsPj0xP20vaTptKk1hdGgucG93KDIsMS1sKSxiKmk+PTImJihnKyssaS89MiksZytsPj1rPyhoPTAsZz1rKTpnK2w+PTE/KGg9KGIqaS0xKSpNYXRoLnBvdygyLGUpLGcrPWwpOihoPWIqTWF0aC5wb3coMixsLTEpKk1hdGgucG93KDIsZSksZz0wKSk7ZT49ODthW2Mrbl09MjU1Jmgsbis9byxoLz0yNTYsZS09OCk7Zm9yKGc9Zzw8ZXxoLGorPWU7aj4wO2FbYytuXT0yNTUmZyxuKz1vLGcvPTI1NixqLT04KTthW2Mrbi1vXXw9MTI4KnB9fSx7fV0sODpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9LnRvU3RyaW5nO2IuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PWQuY2FsbChhKX19LHt9XSw5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhLmI9PT1iLmImJmEuYT09PWIuYX1mdW5jdGlvbiBlKGEsYil7cmV0dXJuIGEuYjxiLmJ8fGEuYj09PWIuYiYmYS5hPD1iLmF9ZnVuY3Rpb24gZihhLGIsYyl7dmFyIGQ9Yi5iLWEuYixlPWMuYi1iLmJcbjtyZXR1cm4gMDxkK2U/ZDxlP2IuYS1hLmErZC8oZCtlKSooYS5hLWMuYSk6Yi5hLWMuYStlLyhkK2UpKihjLmEtYS5hKTowfWZ1bmN0aW9uIGcoYSxiLGMpe3ZhciBkPWIuYi1hLmIsZT1jLmItYi5iO3JldHVybiAwPGQrZT8oYi5hLWMuYSkqZCsoYi5hLWEuYSkqZTowfWZ1bmN0aW9uIGgoYSxiKXtyZXR1cm4gYS5hPGIuYXx8YS5hPT09Yi5hJiZhLmI8PWIuYn1mdW5jdGlvbiBpKGEsYixjKXt2YXIgZD1iLmEtYS5hLGU9Yy5hLWIuYTtyZXR1cm4gMDxkK2U/ZDxlP2IuYi1hLmIrZC8oZCtlKSooYS5iLWMuYik6Yi5iLWMuYitlLyhkK2UpKihjLmItYS5iKTowfWZ1bmN0aW9uIGooYSxiLGMpe3ZhciBkPWIuYS1hLmEsZT1jLmEtYi5hO3JldHVybiAwPGQrZT8oYi5iLWMuYikqZCsoYi5iLWEuYikqZTowfWZ1bmN0aW9uIGsoYSl7cmV0dXJuIGUoYS5iLmEsYS5hKX1mdW5jdGlvbiBsKGEpe3JldHVybiBlKGEuYSxhLmIuYSl9ZnVuY3Rpb24gbShhLGIsYyxkKXtyZXR1cm4gYT0wPmE/MDphLGM9MD5jPzA6YyxhPD1jPzA9PT1jPyhiK2QpLzI6YithLyhhK2MpKihkLWIpOmQrYy8oYStjKSooYi1kKX1mdW5jdGlvbiBuKGEpe3ZhciBiPXMoYS5iKTtyZXR1cm4gdShiLGEuYyksdShiLmIsYS5jKSx2KGIsYS5hKSxifWZ1bmN0aW9uIG8oYSxiKXt2YXIgYz0hMSxkPSExO2EhPT1iJiYoYi5hIT09YS5hJiYoZD0hMCx4KGIuYSxhLmEpKSxiLmQhPT1hLmQmJihjPSEwLHkoYi5kLGEuZCkpLHQoYixhKSxkfHwodShiLGEuYSksYS5hLmM9YSksY3x8KHYoYixhLmQpLGEuZC5hPWEpKX1mdW5jdGlvbiBwKGEpe3ZhciBiPWEuYixjPSExO2EuZCE9PWEuYi5kJiYoYz0hMCx5KGEuZCxhLmIuZCkpLGEuYz09PWE/eChhLmEsbnVsbCk6KGEuYi5kLmE9JChhKSxhLmEuYz1hLmMsdChhLCQoYSkpLGN8fHYoYSxhLmQpKSxiLmM9PT1iPyh4KGIuYSxudWxsKSx5KGIuZCxudWxsKSk6KGEuZC5hPSQoYiksYi5hLmM9Yi5jLHQoYiwkKGIpKSksdyhhKX1mdW5jdGlvbiBxKGEpe3ZhciBiPXMoYSksYz1iLmI7cmV0dXJuIHQoYixhLmUpLGIuYT1hLmIuYSx1KGMsYi5hKSxiLmQ9Yy5kPWEuZCxiPWIuYix0KGEuYiwkKGEuYikpLHQoYS5iLGIpLGEuYi5hPWIuYSxiLmIuYS5jPWIuYixiLmIuZD1hLmIuZCxiLmY9YS5mLGIuYi5mPWEuYi5mLGJ9ZnVuY3Rpb24gcihhLGIpe3ZhciBjPSExLGQ9cyhhKSxlPWQuYjtyZXR1cm4gYi5kIT09YS5kJiYoYz0hMCx5KGIuZCxhLmQpKSx0KGQsYS5lKSx0KGUsYiksZC5hPWEuYi5hLGUuYT1iLmEsZC5kPWUuZD1hLmQsYS5kLmE9ZSxjfHx2KGQsYS5kKSxkfWZ1bmN0aW9uIHMoYSl7dmFyIGI9bmV3IFosYz1uZXcgWixkPWEuYi5oO3JldHVybiBjLmg9ZCxkLmIuaD1iLGIuaD1hLGEuYi5oPWMsYi5iPWMsYi5jPWIsYi5lPWMsYy5iPWIsYy5jPWMsYy5lPWJ9ZnVuY3Rpb24gdChhLGIpe3ZhciBjPWEuYyxkPWIuYztjLmIuZT1iLGQuYi5lPWEsYS5jPWQsYi5jPWN9ZnVuY3Rpb24gdShhLGIpe3ZhciBjPWIuZixkPW5ldyBhYShiLGMpO2MuZT1kLGIuZj1kLGM9ZC5jPWE7ZG97Yy5hPWQsYz1jLmN9d2hpbGUoYyE9PWEpfWZ1bmN0aW9uIHYoYSxiKXt2YXIgYz1iLmQsZD1uZXcgWShiLGMpO2MuYj1kLGIuZD1kLGQuYT1hLGQuYz1iLmMsYz1hO2Rve2MuZD1kLGM9Yy5lfXdoaWxlKGMhPT1hKX1mdW5jdGlvbiB3KGEpe3ZhciBiPWEuaDthPWEuYi5oLGIuYi5oPWEsYS5iLmg9Yn1mdW5jdGlvbiB4KGEsYil7dmFyIGM9YS5jLGQ9Yztkb3tkLmE9YixkPWQuY313aGlsZShkIT09Yyk7Yz1hLmYsZD1hLmUsZC5mPWMsYy5lPWR9ZnVuY3Rpb24geShhLGIpe3ZhciBjPWEuYSxkPWM7ZG97ZC5kPWIsZD1kLmV9d2hpbGUoZCE9PWMpO2M9YS5kLGQ9YS5iLGQuZD1jLGMuYj1kfWZ1bmN0aW9uIHooYSl7dmFyIGI9MDtyZXR1cm4gTWF0aC5hYnMoYVsxXSk+TWF0aC5hYnMoYVswXSkmJihiPTEpLE1hdGguYWJzKGFbMl0pPk1hdGguYWJzKGFbYl0pJiYoYj0yKSxifWZ1bmN0aW9uIEEoYSxiKXthLmYrPWIuZixhLmIuZis9Yi5iLmZ9ZnVuY3Rpb24gQihhLGIsYyl7cmV0dXJuIGE9YS5hLGI9Yi5hLGM9Yy5hLGIuYi5hPT09YT9jLmIuYT09PWE/ZShiLmEsYy5hKT8wPj1nKGMuYi5hLGIuYSxjLmEpOjA8PWcoYi5iLmEsYy5hLGIuYSk6MD49ZyhjLmIuYSxhLGMuYSk6Yy5iLmE9PT1hPzA8PWcoYi5iLmEsYSxiLmEpOihiPWYoYi5iLmEsYSxiLmEpLGE9ZihjLmIuYSxhLGMuYSksYj49YSl9ZnVuY3Rpb24gQyhhKXthLmEuaT1udWxsO3ZhciBiPWEuZTtiLmEuYz1iLmMsYi5jLmE9Yi5hLGEuZT1udWxsfWZ1bmN0aW9uIEQoYSxiKXtwKGEuYSksYS5jPSExLGEuYT1iLGIuaT1hfWZ1bmN0aW9uIEUoYSl7dmFyIGI9YS5hLmE7ZG97YT1vYShhKX13aGlsZShhLmEuYT09PWIpO3JldHVybiBhLmMmJihiPXIobmEoYSkuYS5iLGEuYS5lKSxEKGEsYiksYT1vYShhKSksYX1mdW5jdGlvbiBGKGEsYixjKXt2YXIgZD1uZXcgbWE7cmV0dXJuIGQuYT1jLGQuZT1UKGEuZixiLmUsZCksYy5pPWR9ZnVuY3Rpb24gRyhhLGIpe3N3aXRjaChhLnMpe2Nhc2UgMTAwMTMwOnJldHVybiAwIT0oMSZiKTtjYXNlIDEwMDEzMTpyZXR1cm4gMCE9PWI7Y2FzZSAxMDAxMzI6cmV0dXJuIDA8YjtjYXNlIDEwMDEzMzpyZXR1cm4gMD5iO2Nhc2UgMTAwMTM0OnJldHVybiAyPD1ifHwtMj49Yn1yZXR1cm4hMX1mdW5jdGlvbiBIKGEpe3ZhciBiPWEuYSxjPWIuZDtjLmM9YS5kLGMuYT1iLEMoYSl9ZnVuY3Rpb24gSShhLGIsYyl7Zm9yKGE9YixiPWIuYTthIT09Yzspe2EuYz0hMTt2YXIgZD1uYShhKSxlPWQuYTtpZihlLmEhPT1iLmEpe2lmKCFkLmMpe0goYSk7YnJlYWt9ZT1yKGIuYy5iLGUuYiksRChkLGUpfWIuYyE9PWUmJihvKCQoZSksZSksbyhiLGUpKSxIKGEpLGI9ZC5hLGE9ZH1yZXR1cm4gYn1mdW5jdGlvbiBKKGEsYixjLGQsZSxmKXt2YXIgZz0hMDtkb3tGKGEsYixjLmIpLGM9Yy5jfXdoaWxlKGMhPT1kKTtmb3IobnVsbD09PWUmJihlPW5hKGIpLmEuYi5jKTtkPW5hKGIpLGM9ZC5hLmIsYy5hPT09ZS5hOyljLmMhPT1lJiYobygkKGMpLGMpLG8oJChlKSxjKSksZC5mPWIuZi1jLmYsZC5kPUcoYSxkLmYpLGIuYj0hMCwhZyYmTihhLGIpJiYoQShjLGUpLEMoYikscChlKSksZz0hMSxiPWQsZT1jO2IuYj0hMCxmJiZQKGEsYil9ZnVuY3Rpb24gSyhhLGIsYyxkLGUpe3ZhciBmPVtiLmdbMF0sYi5nWzFdLGIuZ1syXV07Yi5kPW51bGwsYi5kPWEubz9hLm8oZixjLGQsYS5jKXx8bnVsbDpudWxsLG51bGw9PT1iLmQmJihlP2Eubnx8KFgoYSwxMDAxNTYpLGEubj0hMCk6Yi5kPWNbMF0pfWZ1bmN0aW9uIEwoYSxiLGMpe3ZhciBkPVtudWxsLG51bGwsbnVsbCxudWxsXTtkWzBdPWIuYS5kLGRbMV09Yy5hLmQsSyhhLGIuYSxkLFsuNSwuNSwwLDBdLCExKSxvKGIsYyl9ZnVuY3Rpb24gTShhLGIsYyxkLGUpe3ZhciBmPU1hdGguYWJzKGIuYi1hLmIpK01hdGguYWJzKGIuYS1hLmEpLGc9TWF0aC5hYnMoYy5iLWEuYikrTWF0aC5hYnMoYy5hLWEuYSksaD1lKzE7ZFtlXT0uNSpnLyhmK2cpLGRbaF09LjUqZi8oZitnKSxhLmdbMF0rPWRbZV0qYi5nWzBdK2RbaF0qYy5nWzBdLGEuZ1sxXSs9ZFtlXSpiLmdbMV0rZFtoXSpjLmdbMV0sYS5nWzJdKz1kW2VdKmIuZ1syXStkW2hdKmMuZ1syXX1mdW5jdGlvbiBOKGEsYil7dmFyIGM9bmEoYiksZj1iLmEsaD1jLmE7aWYoZShmLmEsaC5hKSl7aWYoMDxnKGguYi5hLGYuYSxoLmEpKXJldHVybiExO2lmKGQoZi5hLGguYSkpe2lmKGYuYSE9PWguYSl7dmFyIGM9YS5lLGk9Zi5hLmg7aWYoMDw9aSl7dmFyIGM9Yy5iLGo9Yy5kLGs9Yy5lLGw9Yy5jLG09bFtpXTtqW21dPWpbYy5hXSxsW2pbbV1dPW0sbTw9LS1jLmEmJigxPj1tP2thKGMsbSk6ZShrW2pbbT4+MV1dLGtbalttXV0pP2thKGMsbSk6bGEoYyxtKSksa1tpXT1udWxsLGxbaV09Yy5iLGMuYj1pfWVsc2UgZm9yKGMuY1stKGkrMSldPW51bGw7MDxjLmEmJm51bGw9PT1jLmNbYy5kW2MuYS0xXV07KS0tYy5hO0woYSwkKGgpLGYpfX1lbHNlIHEoaC5iKSxvKGYsJChoKSksYi5iPWMuYj0hMH1lbHNle2lmKDA+ZyhmLmIuYSxoLmEsZi5hKSlyZXR1cm4hMTtvYShiKS5iPWIuYj0hMCxxKGYuYiksbygkKGgpLGYpfXJldHVybiEwfWZ1bmN0aW9uIE8oYSxiKXt2YXIgYz1uYShiKSxrPWIuYSxsPWMuYSxuPWsuYSxwPWwuYSxyPWsuYi5hLHM9bC5iLmEsdD1uZXcgYWE7aWYoZyhyLGEuYSxuKSxnKHMsYS5hLHApLG49PT1wfHxNYXRoLm1pbihuLmEsci5hKT5NYXRoLm1heChwLmEscy5hKSlyZXR1cm4hMTtpZihlKG4scCkpe2lmKDA8ZyhzLG4scCkpcmV0dXJuITF9ZWxzZSBpZigwPmcocixwLG4pKXJldHVybiExO3ZhciB1LHYsdz1yLHg9bix5PXMsej1wO2lmKGUodyx4KXx8KHU9dyx3PXgseD11KSxlKHkseil8fCh1PXkseT16LHo9dSksZSh3LHkpfHwodT13LHc9eSx5PXUsdT14LHg9eix6PXUpLGUoeSx4KT9lKHgseik/KHU9Zih3LHkseCksdj1mKHkseCx6KSwwPnUrdiYmKHU9LXUsdj0tdiksdC5iPW0odSx5LmIsdix4LmIpKToodT1nKHcseSx4KSx2PS1nKHcseix4KSwwPnUrdiYmKHU9LXUsdj0tdiksdC5iPW0odSx5LmIsdix6LmIpKTp0LmI9KHkuYit4LmIpLzIsaCh3LHgpfHwodT13LHc9eCx4PXUpLGgoeSx6KXx8KHU9eSx5PXosej11KSxoKHcseSl8fCh1PXcsdz15LHk9dSx1PXgseD16LHo9dSksaCh5LHgpP2goeCx6KT8odT1pKHcseSx4KSx2PWkoeSx4LHopLDA+dSt2JiYodT0tdSx2PS12KSx0LmE9bSh1LHkuYSx2LHguYSkpOih1PWoodyx5LHgpLHY9LWoodyx6LHgpLDA+dSt2JiYodT0tdSx2PS12KSx0LmE9bSh1LHkuYSx2LHouYSkpOnQuYT0oeS5hK3guYSkvMixlKHQsYS5hKSYmKHQuYj1hLmEuYix0LmE9YS5hLmEpLHc9ZShuLHApP246cCxlKHcsdCkmJih0LmI9dy5iLHQuYT13LmEpLGQodCxuKXx8ZCh0LHApKXJldHVybiBOKGEsYiksITE7aWYoIWQocixhLmEpJiYwPD1nKHIsYS5hLHQpfHwhZChzLGEuYSkmJjA+PWcocyxhLmEsdCkpe2lmKHM9PT1hLmEpcmV0dXJuIHEoay5iKSxvKGwuYixrKSxiPUUoYiksaz1uYShiKS5hLEkoYSxuYShiKSxjKSxKKGEsYiwkKGspLGssaywhMCksITA7aWYocj09PWEuYSl7cShsLmIpLG8oay5lLCQobCkpLG49Yz1iLHA9bi5hLmIuYTtkb3tuPW9hKG4pfXdoaWxlKG4uYS5iLmE9PT1wKTtyZXR1cm4gYj1uLG49bmEoYikuYS5iLmMsYy5hPSQobCksbD1JKGEsYyxudWxsKSxKKGEsYixsLmMsay5iLmMsbiwhMCksITB9cmV0dXJuIDA8PWcocixhLmEsdCkmJihvYShiKS5iPWIuYj0hMCxxKGsuYiksay5hLmI9YS5hLmIsay5hLmE9YS5hLmEpLDA+PWcocyxhLmEsdCkmJihiLmI9Yy5iPSEwLHEobC5iKSxsLmEuYj1hLmEuYixsLmEuYT1hLmEuYSksITF9cmV0dXJuIHEoay5iKSxxKGwuYiksbygkKGwpLGspLGsuYS5iPXQuYixrLmEuYT10LmEsay5hLmg9ZGEoYS5lLGsuYSksaz1rLmEsbD1bMCwwLDAsMF0sdD1bbi5kLHIuZCxwLmQscy5kXSxrLmdbMF09ay5nWzFdPWsuZ1syXT0wLE0oayxuLHIsbCwwKSxNKGsscCxzLGwsMiksSyhhLGssdCxsLCEwKSxvYShiKS5iPWIuYj1jLmI9ITAsITF9ZnVuY3Rpb24gUChhLGIpe2Zvcih2YXIgYz1uYShiKTs7KXtmb3IoO2MuYjspYj1jLGM9bmEoYyk7aWYoIWIuYiYmKGM9YixudWxsPT09KGI9b2EoYikpfHwhYi5iKSlicmVhaztiLmI9ITE7dmFyIGQsZj1iLmEsaD1jLmE7aWYoZD1mLmIuYSE9PWguYi5hKWE6e2Q9Yjt2YXIgaT1uYShkKSxqPWQuYSxrPWkuYSxsPXZvaWQgMDtpZihlKGouYi5hLGsuYi5hKSl7aWYoMD5nKGouYi5hLGsuYi5hLGouYSkpe2Q9ITE7YnJlYWsgYX1vYShkKS5iPWQuYj0hMCxsPXEoaiksbyhrLmIsbCksbC5kLmM9ZC5kfWVsc2V7aWYoMDxnKGsuYi5hLGouYi5hLGsuYSkpe2Q9ITE7YnJlYWsgYX1kLmI9aS5iPSEwLGw9cShrKSxvKGouZSxrLmIpLGwuYi5kLmM9ZC5kfWQ9ITB9aWYoZCYmKGMuYz8oQyhjKSxwKGgpLGM9bmEoYiksaD1jLmEpOmIuYyYmKEMoYikscChmKSxiPW9hKGMpLGY9Yi5hKSksZi5hIT09aC5hKWlmKGYuYi5hPT09aC5iLmF8fGIuY3x8Yy5jfHxmLmIuYSE9PWEuYSYmaC5iLmEhPT1hLmEpTihhLGIpO2Vsc2UgaWYoTyhhLGIpKWJyZWFrO2YuYT09PWguYSYmZi5iLmE9PT1oLmIuYSYmKEEoaCxmKSxDKGIpLHAoZiksYj1vYShjKSl9fWZ1bmN0aW9uIFEoYSxiKXthLmE9Yjtmb3IodmFyIGM9Yi5jO251bGw9PT1jLmk7KWlmKChjPWMuYyk9PT1iLmMpe3ZhciBjPWEsZj1iLGg9bmV3IG1hO2guYT1mLmMuYjt2YXIgaT1jLmYsaj1pLmE7ZG97aj1qLmF9d2hpbGUobnVsbCE9PWouYiYmIWkuYyhpLmIsaCxqLmIpKTt2YXIgaT1qLmIsaz1uYShpKSxoPWkuYSxqPWsuYTtpZigwPT09ZyhoLmIuYSxmLGguYSkpaD1pLmEsZChoLmEsZil8fGQoaC5iLmEsZil8fChxKGguYiksaS5jJiYocChoLmMpLGkuYz0hMSksbyhmLmMsaCksUShjLGYpKTtlbHNle3ZhciBsPWUoai5iLmEsaC5iLmEpP2k6ayxrPXZvaWQgMDtpLmR8fGwuYz8oaz1sPT09aT9yKGYuYy5iLGguZSk6cihqLmIuYy5iLGYuYykuYixsLmM/RChsLGspOihoPWMsaT1GKGMsaSxrKSxpLmY9b2EoaSkuZitpLmEuZixpLmQ9RyhoLGkuZikpLFEoYyxmKSk6SihjLGksZi5jLGYuYyxudWxsLCEwKX1yZXR1cm59aWYoYz1FKGMuaSksaD1uYShjKSxpPWguYSxoPUkoYSxoLG51bGwpLGguYz09PWkpe3ZhciBpPWgsaD1pLmMsaj1uYShjKSxrPWMuYSxsPWouYSxtPSExO2suYi5hIT09bC5iLmEmJk8oYSxjKSxkKGsuYSxhLmEpJiYobygkKGgpLGspLGM9RShjKSxoPW5hKGMpLmEsSShhLG5hKGMpLGopLG09ITApLGQobC5hLGEuYSkmJihvKGksJChsKSksaT1JKGEsaixudWxsKSxtPSEwKSxtP0ooYSxjLGkuYyxoLGgsITApOihmPWUobC5hLGsuYSk/JChsKTprLGY9cihpLmMuYixmKSxKKGEsYyxmLGYuYyxmLmMsITEpLGYuYi5pLmM9ITAsUChhLGMpKX1lbHNlIEooYSxjLGguYyxpLGksITApfWZ1bmN0aW9uIFIoYSxiKXt2YXIgYz1uZXcgbWEsZD1uKGEuYik7ZC5hLmI9cWEsZC5hLmE9YixkLmIuYS5iPS1xYSxkLmIuYS5hPWIsYS5hPWQuYi5hLGMuYT1kLGMuZj0wLGMuZD0hMSxjLmM9ITEsYy5oPSEwLGMuYj0hMSxkPWEuZixkPVQoZCxkLmEsYyksYy5lPWR9ZnVuY3Rpb24gUyhhKXt0aGlzLmE9bmV3IFUsdGhpcy5iPWEsdGhpcy5jPUJ9ZnVuY3Rpb24gVChhLGIsYyl7ZG97Yj1iLmN9d2hpbGUobnVsbCE9PWIuYiYmIWEuYyhhLmIsYi5iLGMpKTtyZXR1cm4gYT1uZXcgVShjLGIuYSxiKSxiLmEuYz1hLGIuYT1hfWZ1bmN0aW9uIFUoYSxiLGMpe3RoaXMuYj1hfHxudWxsLHRoaXMuYT1ifHx0aGlzLHRoaXMuYz1jfHx0aGlzfWZ1bmN0aW9uIFYoKXt0aGlzLmQ9cmEsdGhpcy5wPXRoaXMuYj10aGlzLnE9bnVsbCx0aGlzLmo9WzAsMCwwXSx0aGlzLnM9MTAwMTMwLHRoaXMubj0hMSx0aGlzLm89dGhpcy5hPXRoaXMuZT10aGlzLmY9bnVsbCx0aGlzLm09ITEsdGhpcy5jPXRoaXMucj10aGlzLmk9dGhpcy5rPXRoaXMubD10aGlzLmg9bnVsbH1mdW5jdGlvbiBXKGEsYil7aWYoYS5kIT09Yilmb3IoO2EuZCE9PWI7KWlmKGEuZDxiKXN3aXRjaChhLmQpe2Nhc2UgcmE6WChhLDEwMDE1MSksYS51KG51bGwpO2JyZWFrO2Nhc2UgMTpYKGEsMTAwMTUyKSxhLnQoKX1lbHNlIHN3aXRjaChhLmQpe2Nhc2UgMjpYKGEsMTAwMTU0KSxhLnYoKTticmVhaztjYXNlIDE6WChhLDEwMDE1MyksYS53KCl9fWZ1bmN0aW9uIFgoYSxiKXthLnAmJmEucChiLGEuYyl9ZnVuY3Rpb24gWShhLGIpe3RoaXMuYj1hfHx0aGlzLHRoaXMuZD1ifHx0aGlzLHRoaXMuYT1udWxsLHRoaXMuYz0hMX1mdW5jdGlvbiBaKCl7dGhpcy5oPXRoaXMsdGhpcy5pPXRoaXMuZD10aGlzLmE9dGhpcy5lPXRoaXMuYz10aGlzLmI9bnVsbCx0aGlzLmY9MH1mdW5jdGlvbiAkKGEpe3JldHVybiBhLmIuZX1mdW5jdGlvbiBfKCl7dGhpcy5jPW5ldyBhYSx0aGlzLmE9bmV3IFksdGhpcy5iPW5ldyBaLHRoaXMuZD1uZXcgWix0aGlzLmIuYj10aGlzLmQsdGhpcy5kLmI9dGhpcy5ifWZ1bmN0aW9uIGFhKGEsYil7dGhpcy5lPWF8fHRoaXMsdGhpcy5mPWJ8fHRoaXMsdGhpcy5kPXRoaXMuYz1udWxsLHRoaXMuZz1bMCwwLDBdLHRoaXMuaD10aGlzLmE9dGhpcy5iPTB9ZnVuY3Rpb24gYmEoKXt0aGlzLmM9W10sdGhpcy5kPW51bGwsdGhpcy5hPTAsdGhpcy5lPSExLHRoaXMuYj1uZXcgZmF9ZnVuY3Rpb24gY2EoYSl7YS5kPVtdO2Zvcih2YXIgYj0wO2I8YS5hO2IrKylhLmRbYl09YjthLmQuc29ydChmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYixjKXtyZXR1cm4gZShhW2JdLGFbY10pPzE6LTF9fShhLmMpKSxhLmU9ITAsaGEoYS5iKX1mdW5jdGlvbiBkYShhLGIpe2lmKGEuZSl7dmFyIGM9YS5iLGQ9KytjLmE7MipkPmMuZiYmKGMuZio9MixjLmM9Z2EoYy5jLGMuZisxKSk7dmFyIGU7cmV0dXJuIDA9PT1jLmI/ZT1kOihlPWMuYixjLmI9Yy5jW2MuYl0pLGMuZVtlXT1iLGMuY1tlXT1kLGMuZFtkXT1lLGMuaCYmbGEoYyxkKSxlfXJldHVybiBjPWEuYSsrLGEuY1tjXT1iLC0oYysxKX1mdW5jdGlvbiBlYShhKXtpZigwPT09YS5hKXJldHVybiBqYShhLmIpO3ZhciBiPWEuY1thLmRbYS5hLTFdXTtpZigwIT09YS5iLmEmJmUoaWEoYS5iKSxiKSlyZXR1cm4gamEoYS5iKTtkb3stLWEuYX13aGlsZSgwPGEuYSYmbnVsbD09PWEuY1thLmRbYS5hLTFdXSk7cmV0dXJuIGJ9ZnVuY3Rpb24gZmEoKXt0aGlzLmQ9Z2EoWzBdLDMzKSx0aGlzLmU9W251bGwsbnVsbF0sdGhpcy5jPVswLDBdLHRoaXMuYT0wLHRoaXMuZj0zMix0aGlzLmI9MCx0aGlzLmg9ITEsdGhpcy5kWzFdPTF9ZnVuY3Rpb24gZ2EoYSxiKXtmb3IodmFyIGM9QXJyYXkoYiksZD0wO2Q8YS5sZW5ndGg7ZCsrKWNbZF09YVtkXTtmb3IoO2Q8YjtkKyspY1tkXT0wO3JldHVybiBjfWZ1bmN0aW9uIGhhKGEpe2Zvcih2YXIgYj1hLmE7MTw9YjstLWIpa2EoYSxiKTthLmg9ITB9ZnVuY3Rpb24gaWEoYSl7cmV0dXJuIGEuZVthLmRbMV1dfWZ1bmN0aW9uIGphKGEpe3ZhciBiPWEuZCxjPWEuZSxkPWEuYyxlPWJbMV0sZj1jW2VdO3JldHVybiAwPGEuYSYmKGJbMV09YlthLmFdLGRbYlsxXV09MSxjW2VdPW51bGwsZFtlXT1hLmIsYS5iPWUsMDwtLWEuYSYma2EoYSwxKSksZn1mdW5jdGlvbiBrYShhLGIpe2Zvcih2YXIgYz1hLmQsZD1hLmUsZj1hLmMsZz1iLGg9Y1tnXTs7KXt2YXIgaT1nPDwxO2k8YS5hJiZlKGRbY1tpKzFdXSxkW2NbaV1dKSYmKGkrPTEpO3ZhciBqPWNbaV07aWYoaT5hLmF8fGUoZFtoXSxkW2pdKSl7Y1tnXT1oLGZbaF09ZzticmVha31jW2ddPWosZltqXT1nLGc9aX19ZnVuY3Rpb24gbGEoYSxiKXtmb3IodmFyIGM9YS5kLGQ9YS5lLGY9YS5jLGc9YixoPWNbZ107Oyl7dmFyIGk9Zz4+MSxqPWNbaV07aWYoMD09PWl8fGUoZFtqXSxkW2hdKSl7Y1tnXT1oLGZbaF09ZzticmVha31jW2ddPWosZltqXT1nLGc9aX19ZnVuY3Rpb24gbWEoKXt0aGlzLmU9dGhpcy5hPW51bGwsdGhpcy5mPTAsdGhpcy5jPXRoaXMuYj10aGlzLmg9dGhpcy5kPSExfWZ1bmN0aW9uIG5hKGEpe3JldHVybiBhLmUuYy5ifWZ1bmN0aW9uIG9hKGEpe3JldHVybiBhLmUuYS5ifXZhciBwYSxxYT00ZTE1MCxyYT0wO3BhPVYucHJvdG90eXBlLHBhLng9ZnVuY3Rpb24oKXtXKHRoaXMscmEpfSxwYS5CPWZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTAwMTQyOnJldHVybjtjYXNlIDEwMDE0MDpzd2l0Y2goYil7Y2FzZSAxMDAxMzA6Y2FzZSAxMDAxMzE6Y2FzZSAxMDAxMzI6Y2FzZSAxMDAxMzM6Y2FzZSAxMDAxMzQ6cmV0dXJuIHZvaWQodGhpcy5zPWIpfWJyZWFrO2Nhc2UgMTAwMTQxOnJldHVybiB2b2lkKHRoaXMubT0hIWIpO2RlZmF1bHQ6cmV0dXJuIHZvaWQgWCh0aGlzLDEwMDkwMCl9WCh0aGlzLDEwMDkwMSl9LHBhLnk9ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMTAwMTQyOnJldHVybiAwO2Nhc2UgMTAwMTQwOnJldHVybiB0aGlzLnM7Y2FzZSAxMDAxNDE6cmV0dXJuIHRoaXMubTtkZWZhdWx0OlgodGhpcywxMDA5MDApfXJldHVybiExfSxwYS5BPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmpbMF09YSx0aGlzLmpbMV09Yix0aGlzLmpbMl09Y30scGEuej1mdW5jdGlvbihhLGIpe3ZhciBjPWJ8fG51bGw7c3dpdGNoKGEpe2Nhc2UgMTAwMTAwOmNhc2UgMTAwMTA2OnRoaXMuaD1jO2JyZWFrO2Nhc2UgMTAwMTA0OmNhc2UgMTAwMTEwOnRoaXMubD1jO2JyZWFrO2Nhc2UgMTAwMTAxOmNhc2UgMTAwMTA3OnRoaXMuaz1jO2JyZWFrO2Nhc2UgMTAwMTAyOmNhc2UgMTAwMTA4OnRoaXMuaT1jO2JyZWFrO2Nhc2UgMTAwMTAzOmNhc2UgMTAwMTA5OnRoaXMucD1jO2JyZWFrO2Nhc2UgMTAwMTA1OmNhc2UgMTAwMTExOnRoaXMubz1jO2JyZWFrO2Nhc2UgMTAwMTEyOnRoaXMucj1jO2JyZWFrO2RlZmF1bHQ6WCh0aGlzLDEwMDkwMCl9fSxwYS5DPWZ1bmN0aW9uKGEsYil7dmFyIGM9ITEsZD1bMCwwLDBdO1codGhpcywyKTtmb3IodmFyIGU9MDszPmU7KytlKXt2YXIgZj1hW2VdOy0xZTE1MD5mJiYoZj0tMWUxNTAsYz0hMCksMWUxNTA8ZiYmKGY9MWUxNTAsYz0hMCksZFtlXT1mfWMmJlgodGhpcywxMDAxNTUpLGM9dGhpcy5xLG51bGw9PT1jPyhjPW4odGhpcy5iKSxvKGMsYy5iKSk6KHEoYyksYz1jLmUpLGMuYS5kPWIsYy5hLmdbMF09ZFswXSxjLmEuZ1sxXT1kWzFdLGMuYS5nWzJdPWRbMl0sYy5mPTEsYy5iLmY9LTEsdGhpcy5xPWN9LHBhLnU9ZnVuY3Rpb24oYSl7Vyh0aGlzLHJhKSx0aGlzLmQ9MSx0aGlzLmI9bmV3IF8sdGhpcy5jPWF9LHBhLnQ9ZnVuY3Rpb24oKXtXKHRoaXMsMSksdGhpcy5kPTIsdGhpcy5xPW51bGx9LHBhLnY9ZnVuY3Rpb24oKXtXKHRoaXMsMiksdGhpcy5kPTF9LHBhLnc9ZnVuY3Rpb24oKXtXKHRoaXMsMSksdGhpcy5kPXJhO3ZhciBhPXRoaXMualswXSxiPXRoaXMualsxXSxjPXRoaXMualsyXSxmPSExLGg9W2EsYixjXTtpZigwPT09YSYmMD09PWImJjA9PT1jKXtmb3IodmFyIGI9Wy0yZTE1MCwtMmUxNTAsLTJlMTUwXSxpPVsyZTE1MCwyZTE1MCwyZTE1MF0sYz1bXSxqPVtdLGY9dGhpcy5iLmMsYT1mLmU7YSE9PWY7YT1hLmUpZm9yKHZhciBtPTA7Mz5tOysrbSl7dmFyIG49YS5nW21dO248aVttXSYmKGlbbV09bixqW21dPWEpLG4+YlttXSYmKGJbbV09bixjW21dPWEpfWlmKGE9MCxiWzFdLWlbMV0+YlswXS1pWzBdJiYoYT0xKSxiWzJdLWlbMl0+YlthXS1pW2FdJiYoYT0yKSxpW2FdPj1iW2FdKWhbMF09MCxoWzFdPTAsaFsyXT0xO2Vsc2V7Zm9yKGI9MCxpPWpbYV0sYz1jW2FdLGo9WzAsMCwwXSxpPVtpLmdbMF0tYy5nWzBdLGkuZ1sxXS1jLmdbMV0saS5nWzJdLWMuZ1syXV0sbT1bMCwwLDBdLGE9Zi5lO2EhPT1mO2E9YS5lKW1bMF09YS5nWzBdLWMuZ1swXSxtWzFdPWEuZ1sxXS1jLmdbMV0sbVsyXT1hLmdbMl0tYy5nWzJdLGpbMF09aVsxXSptWzJdLWlbMl0qbVsxXSxqWzFdPWlbMl0qbVswXS1pWzBdKm1bMl0salsyXT1pWzBdKm1bMV0taVsxXSptWzBdLChuPWpbMF0qalswXStqWzFdKmpbMV0ralsyXSpqWzJdKT5iJiYoYj1uLGhbMF09alswXSxoWzFdPWpbMV0saFsyXT1qWzJdKTswPj1iJiYoaFswXT1oWzFdPWhbMl09MCxoW3ooaSldPTEpfWY9ITB9Zm9yKGo9eihoKSxhPXRoaXMuYi5jLGI9KGorMSklMyxjPShqKzIpJTMsaj0wPGhbal0/MTotMSxoPWEuZTtoIT09YTtoPWguZSloLmI9aC5nW2JdLGguYT1qKmguZ1tjXTtpZihmKXtmb3IoaD0wLGY9dGhpcy5iLmEsYT1mLmI7YSE9PWY7YT1hLmIpaWYoYj1hLmEsISgwPj1iLmYpKWRve2grPShiLmEuYi1iLmIuYS5iKSooYi5hLmErYi5iLmEuYSksYj1iLmV9d2hpbGUoYiE9PWEuYSk7aWYoMD5oKWZvcihoPXRoaXMuYi5jLGY9aC5lO2YhPT1oO2Y9Zi5lKWYuYT0tZi5hfWZvcih0aGlzLm49ITEsaD10aGlzLmIuYixhPWguaDthIT09aDthPWYpZj1hLmgsYj1hLmUsZChhLmEsYS5iLmEpJiZhLmUuZSE9PWEmJihMKHRoaXMsYixhKSxwKGEpLGE9YixiPWEuZSksYi5lPT09YSYmKGIhPT1hJiYoYiE9PWYmJmIhPT1mLmJ8fChmPWYuaCkscChiKSksYSE9PWYmJmEhPT1mLmJ8fChmPWYuaCkscChhKSk7Zm9yKHRoaXMuZT1oPW5ldyBiYSxmPXRoaXMuYi5jLGE9Zi5lO2EhPT1mO2E9YS5lKWEuaD1kYShoLGEpO2ZvcihjYShoKSx0aGlzLmY9bmV3IFModGhpcyksUih0aGlzLC1xYSksUih0aGlzLHFhKTtudWxsIT09KGg9ZWEodGhpcy5lKSk7KXtmb3IoOzspe2E6aWYoYT10aGlzLmUsMD09PWEuYSlmPWlhKGEuYik7ZWxzZSBpZihmPWEuY1thLmRbYS5hLTFdXSwwIT09YS5iLmEmJihhPWlhKGEuYiksZShhLGYpKSl7Zj1hO2JyZWFrIGF9aWYobnVsbD09PWZ8fCFkKGYsaCkpYnJlYWs7Zj1lYSh0aGlzLmUpLEwodGhpcyxoLmMsZi5jKX1RKHRoaXMsaCl9Zm9yKHRoaXMuYT10aGlzLmYuYS5hLmIuYS5hLGg9MDtudWxsIT09KGY9dGhpcy5mLmEuYS5iKTspZi5ofHwrK2gsQyhmKTtmb3IodGhpcy5mPW51bGwsaD10aGlzLmUsaC5iPW51bGwsaC5kPW51bGwsdGhpcy5lPWguYz1udWxsLGg9dGhpcy5iLGE9aC5hLmI7YSE9PWguYTthPWYpZj1hLmIsYT1hLmEsYS5lLmU9PT1hJiYoQShhLmMsYSkscChhKSk7aWYoIXRoaXMubil7aWYoaD10aGlzLmIsdGhpcy5tKWZvcihhPWguYi5oO2EhPT1oLmI7YT1mKWY9YS5oLGEuYi5kLmMhPT1hLmQuYz9hLmY9YS5kLmM/MTotMTpwKGEpO2Vsc2UgZm9yKGE9aC5hLmI7YSE9PWguYTthPWYpaWYoZj1hLmIsYS5jKXtmb3IoYT1hLmE7ZShhLmIuYSxhLmEpO2E9YS5jLmIpO2Zvcig7ZShhLmEsYS5iLmEpO2E9YS5lKTtmb3IoYj1hLmMuYixjPXZvaWQgMDthLmUhPT1iOylpZihlKGEuYi5hLGIuYSkpe2Zvcig7Yi5lIT09YSYmKGsoYi5lKXx8MD49ZyhiLmEsYi5iLmEsYi5lLmIuYSkpOyljPXIoYi5lLGIpLGI9Yy5iO2I9Yi5jLmJ9ZWxzZXtmb3IoO2IuZSE9PWEmJihsKGEuYy5iKXx8MDw9ZyhhLmIuYSxhLmEsYS5jLmIuYSkpOyljPXIoYSxhLmMuYiksYT1jLmI7YT1hLmV9Zm9yKDtiLmUuZSE9PWE7KWM9cihiLmUsYiksYj1jLmJ9aWYodGhpcy5ofHx0aGlzLml8fHRoaXMua3x8dGhpcy5sKWlmKHRoaXMubSl7Zm9yKGg9dGhpcy5iLGY9aC5hLmI7ZiE9PWguYTtmPWYuYilpZihmLmMpe3RoaXMuaCYmdGhpcy5oKDIsdGhpcy5jKSxhPWYuYTtkb3t0aGlzLmsmJnRoaXMuayhhLmEuZCx0aGlzLmMpLGE9YS5lfXdoaWxlKGEhPT1mLmEpO3RoaXMuaSYmdGhpcy5pKHRoaXMuYyl9fWVsc2V7Zm9yKGg9dGhpcy5iLGY9ISF0aGlzLmwsYT0hMSxiPS0xLGM9aC5hLmQ7YyE9PWguYTtjPWMuZClpZihjLmMpe2F8fCh0aGlzLmgmJnRoaXMuaCg0LHRoaXMuYyksYT0hMCksaj1jLmE7ZG97ZiYmKGk9ai5iLmQuYz8wOjEsYiE9PWkmJihiPWksdGhpcy5sJiZ0aGlzLmwoISFiLHRoaXMuYykpKSx0aGlzLmsmJnRoaXMuayhqLmEuZCx0aGlzLmMpLGo9ai5lfXdoaWxlKGohPT1jLmEpfWEmJnRoaXMuaSYmdGhpcy5pKHRoaXMuYyl9aWYodGhpcy5yKXtmb3IoaD10aGlzLmIsYT1oLmEuYjthIT09aC5hO2E9ZilpZihmPWEuYiwhYS5jKXtiPWEuYSxjPWIuZSxqPXZvaWQgMDtkb3tqPWMsYz1qLmUsai5kPW51bGwsbnVsbD09PWouYi5kJiYoai5jPT09aj94KGouYSxudWxsKTooai5hLmM9ai5jLHQoaiwkKGopKSksaT1qLmIsaS5jPT09aT94KGkuYSxudWxsKTooaS5hLmM9aS5jLHQoaSwkKGkpKSksdyhqKSl9d2hpbGUoaiE9PWIpO2I9YS5kLGE9YS5iLGEuZD1iLGIuYj1hfXJldHVybiB0aGlzLnIodGhpcy5iKSx2b2lkKHRoaXMuYz10aGlzLmI9bnVsbCl9fXRoaXMuYj10aGlzLmM9bnVsbH0sdGhpcy5saWJ0ZXNzPXtHbHVUZXNzZWxhdG9yOlYsd2luZGluZ1J1bGU6e0dMVV9URVNTX1dJTkRJTkdfT0REOjEwMDEzMCxHTFVfVEVTU19XSU5ESU5HX05PTlpFUk86MTAwMTMxLEdMVV9URVNTX1dJTkRJTkdfUE9TSVRJVkU6MTAwMTMyLEdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkU6MTAwMTMzLEdMVV9URVNTX1dJTkRJTkdfQUJTX0dFUV9UV086MTAwMTM0fSxwcmltaXRpdmVUeXBlOntHTF9MSU5FX0xPT1A6MixHTF9UUklBTkdMRVM6NCxHTF9UUklBTkdMRV9TVFJJUDo1LEdMX1RSSUFOR0xFX0ZBTjo2fSxlcnJvclR5cGU6e0dMVV9URVNTX01JU1NJTkdfQkVHSU5fUE9MWUdPTjoxMDAxNTEsR0xVX1RFU1NfTUlTU0lOR19FTkRfUE9MWUdPTjoxMDAxNTMsR0xVX1RFU1NfTUlTU0lOR19CRUdJTl9DT05UT1VSOjEwMDE1MixHTFVfVEVTU19NSVNTSU5HX0VORF9DT05UT1VSOjEwMDE1NCxHTFVfVEVTU19DT09SRF9UT09fTEFSR0U6MTAwMTU1LEdMVV9URVNTX05FRURfQ09NQklORV9DQUxMQkFDSzoxMDAxNTZ9LGdsdUVudW06e0dMVV9URVNTX01FU0g6MTAwMTEyLEdMVV9URVNTX1RPTEVSQU5DRToxMDAxNDIsR0xVX1RFU1NfV0lORElOR19SVUxFOjEwMDE0MCxHTFVfVEVTU19CT1VOREFSWV9PTkxZOjEwMDE0MSxHTFVfSU5WQUxJRF9FTlVNOjEwMDkwMCxHTFVfSU5WQUxJRF9WQUxVRToxMDA5MDEsR0xVX1RFU1NfQkVHSU46MTAwMTAwLEdMVV9URVNTX1ZFUlRFWDoxMDAxMDEsR0xVX1RFU1NfRU5EOjEwMDEwMixHTFVfVEVTU19FUlJPUjoxMDAxMDMsR0xVX1RFU1NfRURHRV9GTEFHOjEwMDEwNCxHTFVfVEVTU19DT01CSU5FOjEwMDEwNSxHTFVfVEVTU19CRUdJTl9EQVRBOjEwMDEwNixHTFVfVEVTU19WRVJURVhfREFUQToxMDAxMDcsR0xVX1RFU1NfRU5EX0RBVEE6MTAwMTA4LEdMVV9URVNTX0VSUk9SX0RBVEE6MTAwMTA5LEdMVV9URVNTX0VER0VfRkxBR19EQVRBOjEwMDExMCxHTFVfVEVTU19DT01CSU5FX0RBVEE6MTAwMTExfX0sVi5wcm90b3R5cGUuZ2x1RGVsZXRlVGVzcz1WLnByb3RvdHlwZS54LFYucHJvdG90eXBlLmdsdVRlc3NQcm9wZXJ0eT1WLnByb3RvdHlwZS5CLFYucHJvdG90eXBlLmdsdUdldFRlc3NQcm9wZXJ0eT1WLnByb3RvdHlwZS55LFYucHJvdG90eXBlLmdsdVRlc3NOb3JtYWw9Vi5wcm90b3R5cGUuQSxWLnByb3RvdHlwZS5nbHVUZXNzQ2FsbGJhY2s9Vi5wcm90b3R5cGUueixWLnByb3RvdHlwZS5nbHVUZXNzVmVydGV4PVYucHJvdG90eXBlLkMsVi5wcm90b3R5cGUuZ2x1VGVzc0JlZ2luUG9seWdvbj1WLnByb3RvdHlwZS51LFYucHJvdG90eXBlLmdsdVRlc3NCZWdpbkNvbnRvdXI9Vi5wcm90b3R5cGUudCxWLnByb3RvdHlwZS5nbHVUZXNzRW5kQ29udG91cj1WLnByb3RvdHlwZS52LFYucHJvdG90eXBlLmdsdVRlc3NFbmRQb2x5Z29uPVYucHJvdG90eXBlLncsdm9pZCAwIT09YiYmKGIuZXhwb3J0cz10aGlzLmxpYnRlc3MpfSx7fV0sMTA6W2Z1bmN0aW9uKGIsYyxkKXsoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGIsZSl7XCJvYmplY3RcIj09dHlwZW9mIGQmJnZvaWQgMCE9PWM/ZShkKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiZhLmFtZD9hKFtcImV4cG9ydHNcIl0sZSk6ZShiLm9wZW50eXBlPXt9KX0odGhpcyxmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBjKCl7dGhpcy50YWJsZT1uZXcgVWludDE2QXJyYXkoMTYpLHRoaXMudHJhbnM9bmV3IFVpbnQxNkFycmF5KDI4OCl9ZnVuY3Rpb24gZChhLGIpe3RoaXMuc291cmNlPWEsdGhpcy5zb3VyY2VJbmRleD0wLHRoaXMudGFnPTAsdGhpcy5iaXRjb3VudD0wLHRoaXMuZGVzdD1iLHRoaXMuZGVzdExlbj0wLHRoaXMubHRyZWU9bmV3IGMsdGhpcy5kdHJlZT1uZXcgY31mdW5jdGlvbiBmKGEsYixjLGQpe3ZhciBlLGY7Zm9yKGU9MDtlPGM7KytlKWFbZV09MDtmb3IoZT0wO2U8MzAtYzsrK2UpYVtlK2NdPWUvY3wwO2ZvcihmPWQsZT0wO2U8MzA7KytlKWJbZV09ZixmKz0xPDxhW2VdfWZ1bmN0aW9uIGcoYSxiKXt2YXIgYztmb3IoYz0wO2M8NzsrK2MpYS50YWJsZVtjXT0wO2ZvcihhLnRhYmxlWzddPTI0LGEudGFibGVbOF09MTUyLGEudGFibGVbOV09MTEyLGM9MDtjPDI0OysrYylhLnRyYW5zW2NdPTI1NitjO2ZvcihjPTA7YzwxNDQ7KytjKWEudHJhbnNbMjQrY109Yztmb3IoYz0wO2M8ODsrK2MpYS50cmFuc1sxNjgrY109MjgwK2M7Zm9yKGM9MDtjPDExMjsrK2MpYS50cmFuc1sxNzYrY109MTQ0K2M7Zm9yKGM9MDtjPDU7KytjKWIudGFibGVbY109MDtmb3IoYi50YWJsZVs1XT0zMixjPTA7YzwzMjsrK2MpYi50cmFuc1tjXT1jfWZ1bmN0aW9uIGgoYSxiLGMsZCl7dmFyIGUsZjtmb3IoZT0wO2U8MTY7KytlKWEudGFibGVbZV09MDtmb3IoZT0wO2U8ZDsrK2UpYS50YWJsZVtiW2MrZV1dKys7Zm9yKGEudGFibGVbMF09MCxmPTAsZT0wO2U8MTY7KytlKXZlW2VdPWYsZis9YS50YWJsZVtlXTtmb3IoZT0wO2U8ZDsrK2UpYltjK2VdJiYoYS50cmFuc1t2ZVtiW2MrZV1dKytdPWUpfWZ1bmN0aW9uIGkoYSl7YS5iaXRjb3VudC0tfHwoYS50YWc9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsrXSxhLmJpdGNvdW50PTcpO3ZhciBiPTEmYS50YWc7cmV0dXJuIGEudGFnPj4+PTEsYn1mdW5jdGlvbiBqKGEsYixjKXtpZighYilyZXR1cm4gYztmb3IoO2EuYml0Y291bnQ8MjQ7KWEudGFnfD1hLnNvdXJjZVthLnNvdXJjZUluZGV4KytdPDxhLmJpdGNvdW50LGEuYml0Y291bnQrPTg7dmFyIGQ9YS50YWcmNjU1MzU+Pj4xNi1iO3JldHVybiBhLnRhZz4+Pj1iLGEuYml0Y291bnQtPWIsZCtjfWZ1bmN0aW9uIGsoYSxiKXtmb3IoO2EuYml0Y291bnQ8MjQ7KWEudGFnfD1hLnNvdXJjZVthLnNvdXJjZUluZGV4KytdPDxhLmJpdGNvdW50LGEuYml0Y291bnQrPTg7dmFyIGM9MCxkPTAsZT0wLGY9YS50YWc7ZG97ZD0yKmQrKDEmZiksZj4+Pj0xLCsrZSxjKz1iLnRhYmxlW2VdLGQtPWIudGFibGVbZV19d2hpbGUoZD49MCk7cmV0dXJuIGEudGFnPWYsYS5iaXRjb3VudC09ZSxiLnRyYW5zW2MrZF19ZnVuY3Rpb24gbChhLGIsYyl7dmFyIGQsZSxmLGcsaSxsO2ZvcihkPWooYSw1LDI1NyksZT1qKGEsNSwxKSxmPWooYSw0LDQpLGc9MDtnPDE5OysrZyl1ZVtnXT0wO2ZvcihnPTA7ZzxmOysrZyl7dmFyIG09aihhLDMsMCk7dWVbc2VbZ11dPW19Zm9yKGgodGUsdWUsMCwxOSksaT0wO2k8ZCtlOyl7dmFyIG49ayhhLHRlKTtzd2l0Y2gobil7Y2FzZSAxNjp2YXIgbz11ZVtpLTFdO2ZvcihsPWooYSwyLDMpO2w7LS1sKXVlW2krK109bzticmVhaztjYXNlIDE3OmZvcihsPWooYSwzLDMpO2w7LS1sKXVlW2krK109MDticmVhaztjYXNlIDE4OmZvcihsPWooYSw3LDExKTtsOy0tbCl1ZVtpKytdPTA7YnJlYWs7ZGVmYXVsdDp1ZVtpKytdPW59fWgoYix1ZSwwLGQpLGgoYyx1ZSxkLGUpfWZ1bmN0aW9uIG0oYSxiLGMpe2Zvcig7Oyl7dmFyIGQ9ayhhLGIpO2lmKDI1Nj09PWQpcmV0dXJuIGtlO2lmKGQ8MjU2KWEuZGVzdFthLmRlc3RMZW4rK109ZDtlbHNle3ZhciBlLGYsZyxoO2ZvcihkLT0yNTcsZT1qKGEsb2VbZF0scGVbZF0pLGY9ayhhLGMpLGc9YS5kZXN0TGVuLWooYSxxZVtmXSxyZVtmXSksaD1nO2g8ZytlOysraClhLmRlc3RbYS5kZXN0TGVuKytdPWEuZGVzdFtoXX19fWZ1bmN0aW9uIG4oYSl7Zm9yKHZhciBiLGMsZDthLmJpdGNvdW50Pjg7KWEuc291cmNlSW5kZXgtLSxhLmJpdGNvdW50LT04O2lmKGI9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsxXSxiPTI1NipiK2Euc291cmNlW2Euc291cmNlSW5kZXhdLGM9YS5zb3VyY2VbYS5zb3VyY2VJbmRleCszXSxjPTI1NipjK2Euc291cmNlW2Euc291cmNlSW5kZXgrMl0sYiE9PSg2NTUzNSZ+YykpcmV0dXJuIGxlO2ZvcihhLnNvdXJjZUluZGV4Kz00LGQ9YjtkOy0tZClhLmRlc3RbYS5kZXN0TGVuKytdPWEuc291cmNlW2Euc291cmNlSW5kZXgrK107cmV0dXJuIGEuYml0Y291bnQ9MCxrZX1mdW5jdGlvbiBvKGEsYil7dmFyIGMsZSxmPW5ldyBkKGEsYik7ZG97c3dpdGNoKGM9aShmKSxqKGYsMiwwKSl7Y2FzZSAwOmU9bihmKTticmVhaztjYXNlIDE6ZT1tKGYsbWUsbmUpO2JyZWFrO2Nhc2UgMjpsKGYsZi5sdHJlZSxmLmR0cmVlKSxlPW0oZixmLmx0cmVlLGYuZHRyZWUpO2JyZWFrO2RlZmF1bHQ6ZT1sZX1pZihlIT09a2UpdGhyb3cgbmV3IEVycm9yKFwiRGF0YSBlcnJvclwiKX13aGlsZSghYyk7cmV0dXJuIGYuZGVzdExlbjxmLmRlc3QubGVuZ3RoP1wiZnVuY3Rpb25cIj09dHlwZW9mIGYuZGVzdC5zbGljZT9mLmRlc3Quc2xpY2UoMCxmLmRlc3RMZW4pOmYuZGVzdC5zdWJhcnJheSgwLGYuZGVzdExlbik6Zi5kZXN0fWZ1bmN0aW9uIHAoYSxiLGMsZCxlKXtyZXR1cm4gTWF0aC5wb3coMS1lLDMpKmErMypNYXRoLnBvdygxLWUsMikqZSpiKzMqKDEtZSkqTWF0aC5wb3coZSwyKSpjK01hdGgucG93KGUsMykqZH1mdW5jdGlvbiBxKCl7dGhpcy54MT1OdW1iZXIuTmFOLHRoaXMueTE9TnVtYmVyLk5hTix0aGlzLngyPU51bWJlci5OYU4sdGhpcy55Mj1OdW1iZXIuTmFOfWZ1bmN0aW9uIHIoKXt0aGlzLmNvbW1hbmRzPVtdLHRoaXMuZmlsbD1cImJsYWNrXCIsdGhpcy5zdHJva2U9bnVsbCx0aGlzLnN0cm9rZVdpZHRoPTF9ZnVuY3Rpb24gcyhhKXt0aHJvdyBuZXcgRXJyb3IoYSl9ZnVuY3Rpb24gdChhLGIpe2F8fHMoYil9ZnVuY3Rpb24gdShhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYX19ZnVuY3Rpb24gdihhKXtyZXR1cm4gYT49LTEyOCYmYTw9MTI3fWZ1bmN0aW9uIHcoYSxiLGMpe2Zvcih2YXIgZD0wLGU9YS5sZW5ndGg7YjxlJiZkPDY0JiYwPT09YVtiXTspKytiLCsrZDtyZXR1cm4gYy5wdXNoKDEyOHxkLTEpLGJ9ZnVuY3Rpb24geChhLGIsYyl7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aCxmPWI7ZjxlJiZkPDY0Oyl7dmFyIGc9YVtmXTtpZighdihnKSlicmVhaztpZigwPT09ZyYmZisxPGUmJjA9PT1hW2YrMV0pYnJlYWs7KytmLCsrZH1jLnB1c2goZC0xKTtmb3IodmFyIGg9YjtoPGY7KytoKWMucHVzaChhW2hdKzI1NiYyNTUpO3JldHVybiBmfWZ1bmN0aW9uIHkoYSxiLGMpe2Zvcih2YXIgZD0wLGU9YS5sZW5ndGgsZj1iO2Y8ZSYmZDw2NDspe3ZhciBnPWFbZl07aWYoMD09PWcpYnJlYWs7aWYodihnKSYmZisxPGUmJnYoYVtmKzFdKSlicmVhazsrK2YsKytkfWMucHVzaCg2NHxkLTEpO2Zvcih2YXIgaD1iO2g8ZjsrK2gpe3ZhciBpPWFbaF07Yy5wdXNoKGkrNjU1MzY+PjgmMjU1LGkrMjU2JjI1NSl9cmV0dXJuIGZ9ZnVuY3Rpb24geihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT0wO2U8Yi5sZW5ndGg7ZSs9MSl7dmFyIGY9YltlXTtkW2YubmFtZV09Zi52YWx1ZX1pZih0aGlzLnRhYmxlTmFtZT1hLHRoaXMuZmllbGRzPWIsYylmb3IodmFyIGc9T2JqZWN0LmtleXMoYyksaD0wO2g8Zy5sZW5ndGg7aCs9MSl7dmFyIGk9Z1toXSxqPWNbaV07dm9pZCAwIT09ZFtpXSYmKGRbaV09ail9fWZ1bmN0aW9uIEEoYSxiLGMpe3ZvaWQgMD09PWMmJihjPWIubGVuZ3RoKTt2YXIgZD1uZXcgQXJyYXkoYi5sZW5ndGgrMSk7ZFswXT17bmFtZTphK1wiQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Y307Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDtlKyspZFtlKzFdPXtuYW1lOmErZSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YltlXX07cmV0dXJuIGR9ZnVuY3Rpb24gQihhLGIsYyl7dmFyIGQ9Yi5sZW5ndGgsZT1uZXcgQXJyYXkoZCsxKTtlWzBdPXtuYW1lOmErXCJDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkfTtmb3IodmFyIGY9MDtmPGQ7ZisrKWVbZisxXT17bmFtZTphK2YsdHlwZTpcIlRBQkxFXCIsdmFsdWU6YyhiW2ZdLGYpfTtyZXR1cm4gZX1mdW5jdGlvbiBDKGEsYixjKXt2YXIgZD1iLmxlbmd0aCxlPVtdO2VbMF09e25hbWU6YStcIkNvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmR9O2Zvcih2YXIgZj0wO2Y8ZDtmKyspZT1lLmNvbmNhdChjKGJbZl0sZikpO3JldHVybiBlfWZ1bmN0aW9uIEQoYSl7MT09PWEuZm9ybWF0P3ouY2FsbCh0aGlzLFwiY292ZXJhZ2VUYWJsZVwiLFt7bmFtZTpcImNvdmVyYWdlRm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9XS5jb25jYXQoQShcImdseXBoXCIsYS5nbHlwaHMpKSk6eGUuYXNzZXJ0KCExLFwiQ2FuJ3QgY3JlYXRlIGNvdmVyYWdlIHRhYmxlIGZvcm1hdCAyIHlldC5cIil9ZnVuY3Rpb24gRShhKXt6LmNhbGwodGhpcyxcInNjcmlwdExpc3RUYWJsZVwiLEMoXCJzY3JpcHRSZWNvcmRcIixhLGZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zY3JpcHQsZD1jLmRlZmF1bHRMYW5nU3lzO3JldHVybiB4ZS5hc3NlcnQoISFkLFwiVW5hYmxlIHRvIHdyaXRlIEdTVUI6IHNjcmlwdCBcIithLnRhZytcIiBoYXMgbm8gZGVmYXVsdCBsYW5ndWFnZSBzeXN0ZW0uXCIpLFt7bmFtZTpcInNjcmlwdFRhZ1wiK2IsdHlwZTpcIlRBR1wiLHZhbHVlOmEudGFnfSx7bmFtZTpcInNjcmlwdFwiK2IsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJzY3JpcHRUYWJsZVwiLFt7bmFtZTpcImRlZmF1bHRMYW5nU3lzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJkZWZhdWx0TGFuZ1N5c1wiLFt7bmFtZTpcImxvb2t1cE9yZGVyXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVxRmVhdHVyZUluZGV4XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmQucmVxRmVhdHVyZUluZGV4fV0uY29uY2F0KEEoXCJmZWF0dXJlSW5kZXhcIixkLmZlYXR1cmVJbmRleGVzKSkpfV0uY29uY2F0KEMoXCJsYW5nU3lzXCIsYy5sYW5nU3lzUmVjb3JkcyxmdW5jdGlvbihhLGIpe3ZhciBjPWEubGFuZ1N5cztyZXR1cm5be25hbWU6XCJsYW5nU3lzVGFnXCIrYix0eXBlOlwiVEFHXCIsdmFsdWU6YS50YWd9LHtuYW1lOlwibGFuZ1N5c1wiK2IsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJsYW5nU3lzXCIsW3tuYW1lOlwibG9va3VwT3JkZXJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXFGZWF0dXJlSW5kZXhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Yy5yZXFGZWF0dXJlSW5kZXh9XS5jb25jYXQoQShcImZlYXR1cmVJbmRleFwiLGMuZmVhdHVyZUluZGV4ZXMpKSl9XX0pKSl9XX0pKX1mdW5jdGlvbiBGKGEpe3ouY2FsbCh0aGlzLFwiZmVhdHVyZUxpc3RUYWJsZVwiLEMoXCJmZWF0dXJlUmVjb3JkXCIsYSxmdW5jdGlvbihhLGIpe3ZhciBjPWEuZmVhdHVyZTtyZXR1cm5be25hbWU6XCJmZWF0dXJlVGFnXCIrYix0eXBlOlwiVEFHXCIsdmFsdWU6YS50YWd9LHtuYW1lOlwiZmVhdHVyZVwiK2IsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IHooXCJmZWF0dXJlVGFibGVcIixbe25hbWU6XCJmZWF0dXJlUGFyYW1zXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmMuZmVhdHVyZVBhcmFtc31dLmNvbmNhdChBKFwibG9va3VwTGlzdEluZGV4XCIsYy5sb29rdXBMaXN0SW5kZXhlcykpKX1dfSkpfWZ1bmN0aW9uIEcoYSxiKXt6LmNhbGwodGhpcyxcImxvb2t1cExpc3RUYWJsZVwiLEIoXCJsb29rdXBcIixhLGZ1bmN0aW9uKGEpe3ZhciBjPWJbYS5sb29rdXBUeXBlXTtyZXR1cm4geGUuYXNzZXJ0KCEhYyxcIlVuYWJsZSB0byB3cml0ZSBHU1VCIGxvb2t1cCB0eXBlIFwiK2EubG9va3VwVHlwZStcIiB0YWJsZXMuXCIpLG5ldyB6KFwibG9va3VwVGFibGVcIixbe25hbWU6XCJsb29rdXBUeXBlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEubG9va3VwVHlwZX0se25hbWU6XCJsb29rdXBGbGFnXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEubG9va3VwRmxhZ31dLmNvbmNhdChCKFwic3VidGFibGVcIixhLnN1YnRhYmxlcyxjKSkpfSkpfWZ1bmN0aW9uIEgoYSxiKXtyZXR1cm4gYS5nZXRVaW50OChiKX1mdW5jdGlvbiBJKGEsYil7cmV0dXJuIGEuZ2V0VWludDE2KGIsITEpfWZ1bmN0aW9uIEooYSxiKXtyZXR1cm4gYS5nZXRJbnQxNihiLCExKX1mdW5jdGlvbiBLKGEsYil7cmV0dXJuIGEuZ2V0VWludDMyKGIsITEpfWZ1bmN0aW9uIEwoYSxiKXtyZXR1cm4gYS5nZXRJbnQxNihiLCExKSthLmdldFVpbnQxNihiKzIsITEpLzY1NTM1fWZ1bmN0aW9uIE0oYSxiKXtmb3IodmFyIGM9XCJcIixkPWI7ZDxiKzQ7ZCs9MSljKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEuZ2V0SW50OChkKSk7cmV0dXJuIGN9ZnVuY3Rpb24gTihhLGIsYyl7Zm9yKHZhciBkPTAsZT0wO2U8YztlKz0xKWQ8PD04LGQrPWEuZ2V0VWludDgoYitlKTtyZXR1cm4gZH1mdW5jdGlvbiBPKGEsYixjKXtmb3IodmFyIGQ9W10sZT1iO2U8YztlKz0xKWQucHVzaChhLmdldFVpbnQ4KGUpKTtyZXR1cm4gZH1mdW5jdGlvbiBQKGEpe2Zvcih2YXIgYj1cIlwiLGM9MDtjPGEubGVuZ3RoO2MrPTEpYis9U3RyaW5nLmZyb21DaGFyQ29kZShhW2NdKTtyZXR1cm4gYn1mdW5jdGlvbiBRKGEsYil7dGhpcy5kYXRhPWEsdGhpcy5vZmZzZXQ9Yix0aGlzLnJlbGF0aXZlT2Zmc2V0PTB9ZnVuY3Rpb24gUihhLGIpe2IucGFyc2VVU2hvcnQoKSxhLmxlbmd0aD1iLnBhcnNlVUxvbmcoKSxhLmxhbmd1YWdlPWIucGFyc2VVTG9uZygpO3ZhciBjO2EuZ3JvdXBDb3VudD1jPWIucGFyc2VVTG9uZygpLGEuZ2x5cGhJbmRleE1hcD17fTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlmb3IodmFyIGU9Yi5wYXJzZVVMb25nKCksZj1iLnBhcnNlVUxvbmcoKSxnPWIucGFyc2VVTG9uZygpLGg9ZTtoPD1mO2grPTEpYS5nbHlwaEluZGV4TWFwW2hdPWcsZysrfWZ1bmN0aW9uIFMoYSxiLGMsZCxlKXthLmxlbmd0aD1iLnBhcnNlVVNob3J0KCksYS5sYW5ndWFnZT1iLnBhcnNlVVNob3J0KCk7dmFyIGY7YS5zZWdDb3VudD1mPWIucGFyc2VVU2hvcnQoKT4+MSxiLnNraXAoXCJ1U2hvcnRcIiwzKSxhLmdseXBoSW5kZXhNYXA9e307Zm9yKHZhciBnPW5ldyBMZS5QYXJzZXIoYyxkK2UrMTQpLGg9bmV3IExlLlBhcnNlcihjLGQrZSsxNisyKmYpLGk9bmV3IExlLlBhcnNlcihjLGQrZSsxNis0KmYpLGo9bmV3IExlLlBhcnNlcihjLGQrZSsxNis2KmYpLGs9ZCtlKzE2KzgqZixsPTA7bDxmLTE7bCs9MSlmb3IodmFyIG09dm9pZCAwLG49Zy5wYXJzZVVTaG9ydCgpLG89aC5wYXJzZVVTaG9ydCgpLHA9aS5wYXJzZVNob3J0KCkscT1qLnBhcnNlVVNob3J0KCkscj1vO3I8PW47cis9MSkwIT09cT8oaz1qLm9mZnNldCtqLnJlbGF0aXZlT2Zmc2V0LTIsays9cSxrKz0yKihyLW8pLDAhPT0obT1MZS5nZXRVU2hvcnQoYyxrKSkmJihtPW0rcCY2NTUzNSkpOm09citwJjY1NTM1LGEuZ2x5cGhJbmRleE1hcFtyXT1tfWZ1bmN0aW9uIFQoYSxiKXt2YXIgYz17fTtjLnZlcnNpb249TGUuZ2V0VVNob3J0KGEsYikseGUuYXJndW1lbnQoMD09PWMudmVyc2lvbixcImNtYXAgdGFibGUgdmVyc2lvbiBzaG91bGQgYmUgMC5cIiksYy5udW1UYWJsZXM9TGUuZ2V0VVNob3J0KGEsYisyKTtmb3IodmFyIGQ9LTEsZT1jLm51bVRhYmxlcy0xO2U+PTA7ZS09MSl7dmFyIGY9TGUuZ2V0VVNob3J0KGEsYis0KzgqZSksZz1MZS5nZXRVU2hvcnQoYSxiKzQrOCplKzIpO2lmKDM9PT1mJiYoMD09PWd8fDE9PT1nfHwxMD09PWcpfHwwPT09ZiYmKDA9PT1nfHwxPT09Z3x8Mj09PWd8fDM9PT1nfHw0PT09Zykpe2Q9TGUuZ2V0VUxvbmcoYSxiKzQrOCplKzQpO2JyZWFrfX1pZigtMT09PWQpdGhyb3cgbmV3IEVycm9yKFwiTm8gdmFsaWQgY21hcCBzdWItdGFibGVzIGZvdW5kLlwiKTt2YXIgaD1uZXcgTGUuUGFyc2VyKGEsYitkKTtpZihjLmZvcm1hdD1oLnBhcnNlVVNob3J0KCksMTI9PT1jLmZvcm1hdClSKGMsaCk7ZWxzZXtpZig0IT09Yy5mb3JtYXQpdGhyb3cgbmV3IEVycm9yKFwiT25seSBmb3JtYXQgNCBhbmQgMTIgY21hcCB0YWJsZXMgYXJlIHN1cHBvcnRlZCAoZm91bmQgZm9ybWF0IFwiK2MuZm9ybWF0K1wiKS5cIik7UyhjLGgsYSxiLGQpfXJldHVybiBjfWZ1bmN0aW9uIFUoYSxiLGMpe2Euc2VnbWVudHMucHVzaCh7ZW5kOmIsc3RhcnQ6YixkZWx0YTotKGItYyksb2Zmc2V0OjAsZ2x5cGhJbmRleDpjfSl9ZnVuY3Rpb24gVihhKXthLnNlZ21lbnRzLnB1c2goe2VuZDo2NTUzNSxzdGFydDo2NTUzNSxkZWx0YToxLG9mZnNldDowfSl9ZnVuY3Rpb24gVyhhKXt2YXIgYixjPSEwO2ZvcihiPWEubGVuZ3RoLTE7Yj4wO2ItPTEpe2lmKGEuZ2V0KGIpLnVuaWNvZGU+NjU1MzUpe2NvbnNvbGUubG9nKFwiQWRkaW5nIENNQVAgZm9ybWF0IDEyIChuZWVkZWQhKVwiKSxjPSExO2JyZWFrfX12YXIgZD1be25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibnVtVGFibGVzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmM/MToyfSx7bmFtZTpcInBsYXRmb3JtSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6M30se25hbWU6XCJlbmNvZGluZ0lEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwib2Zmc2V0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6Yz8xMjoyMH1dO2N8fChkPWQuY29uY2F0KFt7bmFtZTpcImNtYXAxMlBsYXRmb3JtSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6M30se25hbWU6XCJjbWFwMTJFbmNvZGluZ0lEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjEwfSx7bmFtZTpcImNtYXAxMk9mZnNldFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9XSkpLGQ9ZC5jb25jYXQoW3tuYW1lOlwiZm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjR9LHtuYW1lOlwiY21hcDRMZW5ndGhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJsYW5ndWFnZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNlZ0NvdW50WDJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzZWFyY2hSYW5nZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImVudHJ5U2VsZWN0b3JcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyYW5nZVNoaWZ0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSk7dmFyIGU9bmV3IEllLlRhYmxlKFwiY21hcFwiLGQpO2ZvcihlLnNlZ21lbnRzPVtdLGI9MDtiPGEubGVuZ3RoO2IrPTEpe2Zvcih2YXIgZj1hLmdldChiKSxnPTA7ZzxmLnVuaWNvZGVzLmxlbmd0aDtnKz0xKVUoZSxmLnVuaWNvZGVzW2ddLGIpO2Uuc2VnbWVudHM9ZS5zZWdtZW50cy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnQtYi5zdGFydH0pfVYoZSk7dmFyIGg9ZS5zZWdtZW50cy5sZW5ndGgsaT0wLGo9W10saz1bXSxsPVtdLG09W10sbj1bXSxvPVtdO2ZvcihiPTA7YjxoO2IrPTEpe3ZhciBwPWUuc2VnbWVudHNbYl07cC5lbmQ8PTY1NTM1JiZwLnN0YXJ0PD02NTUzNT8oaj1qLmNvbmNhdCh7bmFtZTpcImVuZF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLmVuZH0pLGs9ay5jb25jYXQoe25hbWU6XCJzdGFydF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLnN0YXJ0fSksbD1sLmNvbmNhdCh7bmFtZTpcImlkRGVsdGFfXCIrYix0eXBlOlwiU0hPUlRcIix2YWx1ZTpwLmRlbHRhfSksbT1tLmNvbmNhdCh7bmFtZTpcImlkUmFuZ2VPZmZzZXRfXCIrYix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6cC5vZmZzZXR9KSx2b2lkIDAhPT1wLmdseXBoSWQmJihuPW4uY29uY2F0KHtuYW1lOlwiZ2x5cGhfXCIrYix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6cC5nbHlwaElkfSkpKTppKz0xLGN8fHZvaWQgMD09PXAuZ2x5cGhJbmRleHx8KG89by5jb25jYXQoe25hbWU6XCJjbWFwMTJTdGFydF9cIitiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnAuc3RhcnR9KSxvPW8uY29uY2F0KHtuYW1lOlwiY21hcDEyRW5kX1wiK2IsdHlwZTpcIlVMT05HXCIsdmFsdWU6cC5lbmR9KSxvPW8uY29uY2F0KHtuYW1lOlwiY21hcDEyR2x5cGhfXCIrYix0eXBlOlwiVUxPTkdcIix2YWx1ZTpwLmdseXBoSW5kZXh9KSl9aWYoZS5zZWdDb3VudFgyPTIqKGgtaSksZS5zZWFyY2hSYW5nZT0yKk1hdGgucG93KDIsTWF0aC5mbG9vcihNYXRoLmxvZyhoLWkpL01hdGgubG9nKDIpKSksZS5lbnRyeVNlbGVjdG9yPU1hdGgubG9nKGUuc2VhcmNoUmFuZ2UvMikvTWF0aC5sb2coMiksZS5yYW5nZVNoaWZ0PWUuc2VnQ291bnRYMi1lLnNlYXJjaFJhbmdlLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChqKSxlLmZpZWxkcy5wdXNoKHtuYW1lOlwicmVzZXJ2ZWRQYWRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0pLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChrKSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQobCksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KG0pLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChuKSxlLmNtYXA0TGVuZ3RoPTE0KzIqai5sZW5ndGgrMisyKmsubGVuZ3RoKzIqbC5sZW5ndGgrMiptLmxlbmd0aCsyKm4ubGVuZ3RoLCFjKXt2YXIgcT0xNis0Km8ubGVuZ3RoO2UuY21hcDEyT2Zmc2V0PTIwK2UuY21hcDRMZW5ndGgsZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KFt7bmFtZTpcImNtYXAxMkZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxMn0se25hbWU6XCJjbWFwMTJSZXNlcnZlZFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImNtYXAxMkxlbmd0aFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnF9LHtuYW1lOlwiY21hcDEyTGFuZ3VhZ2VcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcImNtYXAxMm5Hcm91cHNcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTpvLmxlbmd0aC8zfV0pLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChvKX1yZXR1cm4gZX1mdW5jdGlvbiBYKGEpe3RoaXMuZm9udD1hfWZ1bmN0aW9uIFkoYSl7dGhpcy5jbWFwPWF9ZnVuY3Rpb24gWihhLGIpe3RoaXMuZW5jb2Rpbmc9YSx0aGlzLmNoYXJzZXQ9Yn1mdW5jdGlvbiAkKGEpe3ZhciBiPXRoaXM7c3dpdGNoKGEudmVyc2lvbil7Y2FzZSAxOnRoaXMubmFtZXM9UWUuc2xpY2UoKTticmVhaztjYXNlIDI6dGhpcy5uYW1lcz1uZXcgQXJyYXkoYS5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBjPTA7YzxhLm51bWJlck9mR2x5cGhzO2MrKylhLmdseXBoTmFtZUluZGV4W2NdPFFlLmxlbmd0aD9iLm5hbWVzW2NdPVFlW2EuZ2x5cGhOYW1lSW5kZXhbY11dOmIubmFtZXNbY109YS5uYW1lc1thLmdseXBoTmFtZUluZGV4W2NdLVFlLmxlbmd0aF07YnJlYWs7Y2FzZSAyLjU6dGhpcy5uYW1lcz1uZXcgQXJyYXkoYS5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBkPTA7ZDxhLm51bWJlck9mR2x5cGhzO2QrKyliLm5hbWVzW2RdPVFlW2QrYS5nbHlwaE5hbWVJbmRleFtkXV07YnJlYWs7Y2FzZSAzOmRlZmF1bHQ6dGhpcy5uYW1lcz1bXX19ZnVuY3Rpb24gXyhhKXtmb3IodmFyIGIsYz1hLnRhYmxlcy5jbWFwLmdseXBoSW5kZXhNYXAsZD1PYmplY3Qua2V5cyhjKSxlPTA7ZTxkLmxlbmd0aDtlKz0xKXt2YXIgZj1kW2VdLGc9Y1tmXTtiPWEuZ2x5cGhzLmdldChnKSxiLmFkZFVuaWNvZGUocGFyc2VJbnQoZikpfWZvcih2YXIgaD0wO2g8YS5nbHlwaHMubGVuZ3RoO2grPTEpYj1hLmdseXBocy5nZXQoaCksYS5jZmZFbmNvZGluZz9hLmlzQ0lERm9udD9iLm5hbWU9XCJnaWRcIitoOmIubmFtZT1hLmNmZkVuY29kaW5nLmNoYXJzZXRbaF06YS5nbHlwaE5hbWVzLm5hbWVzJiYoYi5uYW1lPWEuZ2x5cGhOYW1lcy5nbHlwaEluZGV4VG9OYW1lKGgpKX1mdW5jdGlvbiBhYShhLGIsYyxkLGUpe2EuYmVnaW5QYXRoKCksYS5tb3ZlVG8oYixjKSxhLmxpbmVUbyhkLGUpLGEuc3Ryb2tlKCl9ZnVuY3Rpb24gYmEoYSxiKXt2YXIgYz1ifHxuZXcgcjtyZXR1cm57Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGMmJihjPWMoKSksY30sc2V0OmZ1bmN0aW9uKGEpe2M9YX19fWZ1bmN0aW9uIGNhKGEpe3RoaXMuYmluZENvbnN0cnVjdG9yVmFsdWVzKGEpfWZ1bmN0aW9uIGRhKGEsYixjKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5wYXRoLGFbY119LHNldDpmdW5jdGlvbihiKXthW2NdPWJ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9ZnVuY3Rpb24gZWEoYSxiKXt2YXIgYz10aGlzO2lmKHRoaXMuZm9udD1hLHRoaXMuZ2x5cGhzPXt9LEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspYy5nbHlwaHNbZF09YltkXTt0aGlzLmxlbmd0aD1iJiZiLmxlbmd0aHx8MH1mdW5jdGlvbiBmYShhLGIpe3JldHVybiBuZXcgY2Eoe2luZGV4OmIsZm9udDphfSl9ZnVuY3Rpb24gZ2EoYSxiLGMsZCxlLGYpe3JldHVybiBmdW5jdGlvbigpe3ZhciBnPW5ldyBjYSh7aW5kZXg6Yixmb250OmF9KTtyZXR1cm4gZy5wYXRoPWZ1bmN0aW9uKCl7YyhnLGQsZSk7dmFyIGI9ZihhLmdseXBocyxnKTtyZXR1cm4gYi51bml0c1BlckVtPWEudW5pdHNQZXJFbSxifSxkYShnLFwieE1pblwiLFwiX3hNaW5cIiksZGEoZyxcInhNYXhcIixcIl94TWF4XCIpLGRhKGcsXCJ5TWluXCIsXCJfeU1pblwiKSxkYShnLFwieU1heFwiLFwiX3lNYXhcIiksZ319ZnVuY3Rpb24gaGEoYSxiLGMsZCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bmV3IGNhKHtpbmRleDpiLGZvbnQ6YX0pO3JldHVybiBlLnBhdGg9ZnVuY3Rpb24oKXt2YXIgYj1jKGEsZSxkKTtyZXR1cm4gYi51bml0c1BlckVtPWEudW5pdHNQZXJFbSxifSxlfX1mdW5jdGlvbiBpYShhLGIpe2lmKGE9PT1iKXJldHVybiEwO2lmKEFycmF5LmlzQXJyYXkoYSkmJkFycmF5LmlzQXJyYXkoYikpe2lmKGEubGVuZ3RoIT09Yi5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0xKWlmKCFpYShhW2NdLGJbY10pKXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGphKGEpe3JldHVybiBhLmxlbmd0aDwxMjQwPzEwNzphLmxlbmd0aDwzMzkwMD8xMTMxOjMyNzY4fWZ1bmN0aW9uIGthKGEsYixjKXt2YXIgZCxlLGY9W10sZz1bXSxoPUxlLmdldENhcmQxNihhLGIpO2lmKDAhPT1oKXt2YXIgaT1MZS5nZXRCeXRlKGEsYisyKTtkPWIrKGgrMSkqaSsyO2Zvcih2YXIgaj1iKzMsaz0wO2s8aCsxO2srPTEpZi5wdXNoKExlLmdldE9mZnNldChhLGosaSkpLGorPWk7ZT1kK2ZbaF19ZWxzZSBlPWIrMjtmb3IodmFyIGw9MDtsPGYubGVuZ3RoLTE7bCs9MSl7dmFyIG09TGUuZ2V0Qnl0ZXMoYSxkK2ZbbF0sZCtmW2wrMV0pO2MmJihtPWMobSkpLGcucHVzaChtKX1yZXR1cm57b2JqZWN0czpnLHN0YXJ0T2Zmc2V0OmIsZW5kT2Zmc2V0OmV9fWZ1bmN0aW9uIGxhKGEpe2Zvcih2YXIgYj1cIlwiLGM9MTUsZD1bXCIwXCIsXCIxXCIsXCIyXCIsXCIzXCIsXCI0XCIsXCI1XCIsXCI2XCIsXCI3XCIsXCI4XCIsXCI5XCIsXCIuXCIsXCJFXCIsXCJFLVwiLG51bGwsXCItXCJdOzspe3ZhciBlPWEucGFyc2VCeXRlKCksZj1lPj40LGc9MTUmZTtpZihmPT09YylicmVhaztpZihiKz1kW2ZdLGc9PT1jKWJyZWFrO2IrPWRbZ119cmV0dXJuIHBhcnNlRmxvYXQoYil9ZnVuY3Rpb24gbWEoYSxiKXt2YXIgYyxkLGUsZjtpZigyOD09PWIpcmV0dXJuIGM9YS5wYXJzZUJ5dGUoKSxkPWEucGFyc2VCeXRlKCksYzw8OHxkO2lmKDI5PT09YilyZXR1cm4gYz1hLnBhcnNlQnl0ZSgpLGQ9YS5wYXJzZUJ5dGUoKSxlPWEucGFyc2VCeXRlKCksZj1hLnBhcnNlQnl0ZSgpLGM8PDI0fGQ8PDE2fGU8PDh8ZjtpZigzMD09PWIpcmV0dXJuIGxhKGEpO2lmKGI+PTMyJiZiPD0yNDYpcmV0dXJuIGItMTM5O2lmKGI+PTI0NyYmYjw9MjUwKXJldHVybiBjPWEucGFyc2VCeXRlKCksMjU2KihiLTI0NykrYysxMDg7aWYoYj49MjUxJiZiPD0yNTQpcmV0dXJuIGM9YS5wYXJzZUJ5dGUoKSwyNTYqLShiLTI1MSktYy0xMDg7dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiMCBcIitiKX1mdW5jdGlvbiBuYShhKXtmb3IodmFyIGI9e30sYz0wO2M8YS5sZW5ndGg7Yys9MSl7dmFyIGQ9YVtjXVswXSxlPWFbY11bMV0sZj12b2lkIDA7aWYoZj0xPT09ZS5sZW5ndGg/ZVswXTplLGIuaGFzT3duUHJvcGVydHkoZCkmJiFpc05hTihiW2RdKSl0aHJvdyBuZXcgRXJyb3IoXCJPYmplY3QgXCIrYitcIiBhbHJlYWR5IGhhcyBrZXkgXCIrZCk7YltkXT1mfXJldHVybiBifWZ1bmN0aW9uIG9hKGEsYixjKXtiPXZvaWQgMCE9PWI/YjowO3ZhciBkPW5ldyBMZS5QYXJzZXIoYSxiKSxlPVtdLGY9W107Zm9yKGM9dm9pZCAwIT09Yz9jOmEubGVuZ3RoO2QucmVsYXRpdmVPZmZzZXQ8Yzspe3ZhciBnPWQucGFyc2VCeXRlKCk7Zzw9MjE/KDEyPT09ZyYmKGc9MTIwMCtkLnBhcnNlQnl0ZSgpKSxlLnB1c2goW2csZl0pLGY9W10pOmYucHVzaChtYShkLGcpKX1yZXR1cm4gbmEoZSl9ZnVuY3Rpb24gcGEoYSxiKXtyZXR1cm4gYj1iPD0zOTA/TmVbYl06YVtiLTM5MV19ZnVuY3Rpb24gcWEoYSxiLGMpe2Zvcih2YXIgZCxlPXt9LGY9MDtmPGIubGVuZ3RoO2YrPTEpe3ZhciBnPWJbZl07aWYoQXJyYXkuaXNBcnJheShnLnR5cGUpKXt2YXIgaD1bXTtoLmxlbmd0aD1nLnR5cGUubGVuZ3RoO2Zvcih2YXIgaT0wO2k8Zy50eXBlLmxlbmd0aDtpKyspZD12b2lkIDAhPT1hW2cub3BdP2FbZy5vcF1baV06dm9pZCAwLHZvaWQgMD09PWQmJihkPXZvaWQgMCE9PWcudmFsdWUmJnZvaWQgMCE9PWcudmFsdWVbaV0/Zy52YWx1ZVtpXTpudWxsKSxcIlNJRFwiPT09Zy50eXBlW2ldJiYoZD1wYShjLGQpKSxoW2ldPWQ7ZVtnLm5hbWVdPWh9ZWxzZSBkPWFbZy5vcF0sdm9pZCAwPT09ZCYmKGQ9dm9pZCAwIT09Zy52YWx1ZT9nLnZhbHVlOm51bGwpLFwiU0lEXCI9PT1nLnR5cGUmJihkPXBhKGMsZCkpLGVbZy5uYW1lXT1kfXJldHVybiBlfWZ1bmN0aW9uIHJhKGEsYil7dmFyIGM9e307cmV0dXJuIGMuZm9ybWF0TWFqb3I9TGUuZ2V0Q2FyZDgoYSxiKSxjLmZvcm1hdE1pbm9yPUxlLmdldENhcmQ4KGEsYisxKSxjLnNpemU9TGUuZ2V0Q2FyZDgoYSxiKzIpLGMub2Zmc2V0U2l6ZT1MZS5nZXRDYXJkOChhLGIrMyksYy5zdGFydE9mZnNldD1iLGMuZW5kT2Zmc2V0PWIrNCxjfWZ1bmN0aW9uIHNhKGEsYil7cmV0dXJuIHFhKG9hKGEsMCxhLmJ5dGVMZW5ndGgpLFRlLGIpfWZ1bmN0aW9uIHRhKGEsYixjLGQpe3JldHVybiBxYShvYShhLGIsYyksVWUsZCl9ZnVuY3Rpb24gdWEoYSxiLGMsZCl7Zm9yKHZhciBlPVtdLGY9MDtmPGMubGVuZ3RoO2YrPTEpe3ZhciBnPW5ldyBEYXRhVmlldyhuZXcgVWludDhBcnJheShjW2ZdKS5idWZmZXIpLGg9c2EoZyxkKTtoLl9zdWJycz1bXSxoLl9zdWJyc0JpYXM9MDt2YXIgaT1oLnByaXZhdGVbMF0saj1oLnByaXZhdGVbMV07aWYoMCE9PWkmJjAhPT1qKXt2YXIgaz10YShhLGorYixpLGQpO2lmKGguX2RlZmF1bHRXaWR0aFg9ay5kZWZhdWx0V2lkdGhYLGguX25vbWluYWxXaWR0aFg9ay5ub21pbmFsV2lkdGhYLDAhPT1rLnN1YnJzKXt2YXIgbD1qK2suc3VicnMsbT1rYShhLGwrYik7aC5fc3VicnM9bS5vYmplY3RzLGguX3N1YnJzQmlhcz1qYShoLl9zdWJycyl9aC5fcHJpdmF0ZURpY3Q9a31lLnB1c2goaCl9cmV0dXJuIGV9ZnVuY3Rpb24gdmEoYSxiLGMsZCl7dmFyIGUsZixnPW5ldyBMZS5QYXJzZXIoYSxiKTtjLT0xO3ZhciBoPVtcIi5ub3RkZWZcIl0saT1nLnBhcnNlQ2FyZDgoKTtpZigwPT09aSlmb3IodmFyIGo9MDtqPGM7ais9MSllPWcucGFyc2VTSUQoKSxoLnB1c2gocGEoZCxlKSk7ZWxzZSBpZigxPT09aSlmb3IoO2gubGVuZ3RoPD1jOyl7ZT1nLnBhcnNlU0lEKCksZj1nLnBhcnNlQ2FyZDgoKTtmb3IodmFyIGs9MDtrPD1mO2srPTEpaC5wdXNoKHBhKGQsZSkpLGUrPTF9ZWxzZXtpZigyIT09aSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGNoYXJzZXQgZm9ybWF0IFwiK2kpO2Zvcig7aC5sZW5ndGg8PWM7KXtlPWcucGFyc2VTSUQoKSxmPWcucGFyc2VDYXJkMTYoKTtmb3IodmFyIGw9MDtsPD1mO2wrPTEpaC5wdXNoKHBhKGQsZSkpLGUrPTF9fXJldHVybiBofWZ1bmN0aW9uIHdhKGEsYixjKXt2YXIgZCxlPXt9LGY9bmV3IExlLlBhcnNlcihhLGIpLGc9Zi5wYXJzZUNhcmQ4KCk7aWYoMD09PWcpZm9yKHZhciBoPWYucGFyc2VDYXJkOCgpLGk9MDtpPGg7aSs9MSlkPWYucGFyc2VDYXJkOCgpLGVbZF09aTtlbHNle2lmKDEhPT1nKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gZW5jb2RpbmcgZm9ybWF0IFwiK2cpO3ZhciBqPWYucGFyc2VDYXJkOCgpO2Q9MTtmb3IodmFyIGs9MDtrPGo7ays9MSlmb3IodmFyIGw9Zi5wYXJzZUNhcmQ4KCksbT1mLnBhcnNlQ2FyZDgoKSxuPWw7bjw9bCttO24rPTEpZVtuXT1kLGQrPTF9cmV0dXJuIG5ldyBaKGUsYyl9ZnVuY3Rpb24geGEoYSxiLGMpe2Z1bmN0aW9uIGQoYSxiKXt0JiZvLmNsb3NlUGF0aCgpLG8ubW92ZVRvKGEsYiksdD0hMH1mdW5jdGlvbiBlKCl7dmFyIGE7YT1wLmxlbmd0aCUyIT0wLGEmJiFzJiYoeT1wLnNoaWZ0KCkrbikscSs9cC5sZW5ndGg+PjEscC5sZW5ndGg9MCxzPSEwfWZ1bmN0aW9uIGYoYyl7Zm9yKHZhciBtLHIsdyx4LHosQSxCLEMsRCxFLEYsRyxIPTA7SDxjLmxlbmd0aDspe3ZhciBJPWNbSF07c3dpdGNoKEgrPTEsSSl7Y2FzZSAxOmNhc2UgMzplKCk7YnJlYWs7Y2FzZSA0OnAubGVuZ3RoPjEmJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx2Kz1wLnBvcCgpLGQodSx2KTticmVhaztjYXNlIDU6Zm9yKDtwLmxlbmd0aD4wOyl1Kz1wLnNoaWZ0KCksdis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7YnJlYWs7Y2FzZSA2OmZvcig7cC5sZW5ndGg+MCYmKHUrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpLDAhPT1wLmxlbmd0aCk7KXYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2JyZWFrO2Nhc2UgNzpmb3IoO3AubGVuZ3RoPjAmJih2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KSwwIT09cC5sZW5ndGgpOyl1Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTticmVhaztjYXNlIDg6Zm9yKDtwLmxlbmd0aD4wOylnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLFxudT1pK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAxMDp6PXAucG9wKCkrbCxBPWtbel0sQSYmZihBKTticmVhaztjYXNlIDExOnJldHVybjtjYXNlIDEyOnN3aXRjaChJPWNbSF0sSCs9MSxJKXtjYXNlIDM1Omc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWorcC5zaGlmdCgpLEQ9QitwLnNoaWZ0KCksRT1DK3Auc2hpZnQoKSxGPUQrcC5zaGlmdCgpLEc9RStwLnNoaWZ0KCksdT1GK3Auc2hpZnQoKSx2PUcrcC5zaGlmdCgpLHAuc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaixCLEMpLG8uY3VydmVUbyhELEUsRixHLHUsdik7YnJlYWs7Y2FzZSAzNDpnPXUrcC5zaGlmdCgpLGg9dixpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWosRD1CK3Auc2hpZnQoKSxFPWosRj1EK3Auc2hpZnQoKSxHPXYsdT1GK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaixCLEMpLG8uY3VydmVUbyhELEUsRixHLHUsdik7YnJlYWs7Y2FzZSAzNjpnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLEI9aStwLnNoaWZ0KCksQz1qLEQ9QitwLnNoaWZ0KCksRT1qLEY9RCtwLnNoaWZ0KCksRz1FK3Auc2hpZnQoKSx1PUYrcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztjYXNlIDM3Omc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWorcC5zaGlmdCgpLEQ9QitwLnNoaWZ0KCksRT1DK3Auc2hpZnQoKSxGPUQrcC5zaGlmdCgpLEc9RStwLnNoaWZ0KCksTWF0aC5hYnMoRi11KT5NYXRoLmFicyhHLXYpP3U9RitwLnNoaWZ0KCk6dj1HK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaixCLEMpLG8uY3VydmVUbyhELEUsRixHLHUsdik7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmxvZyhcIkdseXBoIFwiK2IuaW5kZXgrXCI6IHVua25vd24gb3BlcmF0b3IgMTIwMFwiK0kpLHAubGVuZ3RoPTB9YnJlYWs7Y2FzZSAxNDpwLmxlbmd0aD4wJiYhcyYmKHk9cC5zaGlmdCgpK24scz0hMCksdCYmKG8uY2xvc2VQYXRoKCksdD0hMSk7YnJlYWs7Y2FzZSAxODplKCk7YnJlYWs7Y2FzZSAxOTpjYXNlIDIwOmUoKSxIKz1xKzc+PjM7YnJlYWs7Y2FzZSAyMTpwLmxlbmd0aD4yJiYhcyYmKHk9cC5zaGlmdCgpK24scz0hMCksdis9cC5wb3AoKSx1Kz1wLnBvcCgpLGQodSx2KTticmVhaztjYXNlIDIyOnAubGVuZ3RoPjEmJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx1Kz1wLnBvcCgpLGQodSx2KTticmVhaztjYXNlIDIzOmUoKTticmVhaztjYXNlIDI0OmZvcig7cC5sZW5ndGg+MjspZz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTt1Kz1wLnNoaWZ0KCksdis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7YnJlYWs7Y2FzZSAyNTpmb3IoO3AubGVuZ3RoPjY7KXUrPXAuc2hpZnQoKSx2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTtnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMjY6Zm9yKHAubGVuZ3RoJTImJih1Kz1wLnNoaWZ0KCkpO3AubGVuZ3RoPjA7KWc9dSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWksdj1qK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMjc6Zm9yKHAubGVuZ3RoJTImJih2Kz1wLnNoaWZ0KCkpO3AubGVuZ3RoPjA7KWc9dStwLnNoaWZ0KCksaD12LGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aixvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2Nhc2UgMjg6bT1jW0hdLHI9Y1tIKzFdLHAucHVzaCgobTw8MjR8cjw8MTYpPj4xNiksSCs9MjticmVhaztjYXNlIDI5Ono9cC5wb3AoKSthLmdzdWJyc0JpYXMsQT1hLmdzdWJyc1t6XSxBJiZmKEEpO2JyZWFrO2Nhc2UgMzA6Zm9yKDtwLmxlbmd0aD4wJiYoZz11LGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qKygxPT09cC5sZW5ndGg/cC5zaGlmdCgpOjApLG8uY3VydmVUbyhnLGgsaSxqLHUsdiksMCE9PXAubGVuZ3RoKTspZz11K3Auc2hpZnQoKSxoPXYsaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksdT1pKygxPT09cC5sZW5ndGg/cC5zaGlmdCgpOjApLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAzMTpmb3IoO3AubGVuZ3RoPjAmJihnPXUrcC5zaGlmdCgpLGg9dixpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSx1PWkrKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KSwwIT09cC5sZW5ndGgpOylnPXUsaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWorKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztkZWZhdWx0Okk8MzI/Y29uc29sZS5sb2coXCJHbHlwaCBcIitiLmluZGV4K1wiOiB1bmtub3duIG9wZXJhdG9yIFwiK0kpOkk8MjQ3P3AucHVzaChJLTEzOSk6STwyNTE/KG09Y1tIXSxIKz0xLHAucHVzaCgyNTYqKEktMjQ3KSttKzEwOCkpOkk8MjU1PyhtPWNbSF0sSCs9MSxwLnB1c2goMjU2Ki0oSS0yNTEpLW0tMTA4KSk6KG09Y1tIXSxyPWNbSCsxXSx3PWNbSCsyXSx4PWNbSCszXSxIKz00LHAucHVzaCgobTw8MjR8cjw8MTZ8dzw8OHx4KS82NTUzNikpfX19dmFyIGcsaCxpLGosayxsLG0sbixvPW5ldyByLHA9W10scT0wLHM9ITEsdD0hMSx1PTAsdj0wO2lmKGEuaXNDSURGb250KXt2YXIgdz1hLnRhYmxlcy5jZmYudG9wRGljdC5fZmRTZWxlY3RbYi5pbmRleF0seD1hLnRhYmxlcy5jZmYudG9wRGljdC5fZmRBcnJheVt3XTtrPXguX3N1YnJzLGw9eC5fc3VicnNCaWFzLG09eC5fZGVmYXVsdFdpZHRoWCxuPXguX25vbWluYWxXaWR0aFh9ZWxzZSBrPWEudGFibGVzLmNmZi50b3BEaWN0Ll9zdWJycyxsPWEudGFibGVzLmNmZi50b3BEaWN0Ll9zdWJyc0JpYXMsbT1hLnRhYmxlcy5jZmYudG9wRGljdC5fZGVmYXVsdFdpZHRoWCxuPWEudGFibGVzLmNmZi50b3BEaWN0Ll9ub21pbmFsV2lkdGhYO3ZhciB5PW07cmV0dXJuIGYoYyksYi5hZHZhbmNlV2lkdGg9eSxvfWZ1bmN0aW9uIHlhKGEsYixjLGQpe3ZhciBlLGY9W10sZz1uZXcgTGUuUGFyc2VyKGEsYiksaD1nLnBhcnNlQ2FyZDgoKTtpZigwPT09aClmb3IodmFyIGk9MDtpPGM7aSsrKXtpZigoZT1nLnBhcnNlQ2FyZDgoKSk+PWQpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIHRhYmxlIENJRCBGb250IEZEU2VsZWN0IGhhcyBiYWQgRkQgaW5kZXggdmFsdWUgXCIrZStcIiAoRkQgY291bnQgXCIrZCtcIilcIik7Zi5wdXNoKGUpfWVsc2V7aWYoMyE9PWgpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIFRhYmxlIENJRCBGb250IEZEU2VsZWN0IHRhYmxlIGhhcyB1bnN1cHBvcnRlZCBmb3JtYXQgXCIraCk7dmFyIGo9Zy5wYXJzZUNhcmQxNigpLGs9Zy5wYXJzZUNhcmQxNigpO2lmKDAhPT1rKXRocm93IG5ldyBFcnJvcihcIkNGRiBUYWJsZSBDSUQgRm9udCBGRFNlbGVjdCBmb3JtYXQgMyByYW5nZSBoYXMgYmFkIGluaXRpYWwgR0lEIFwiK2spO2Zvcih2YXIgbCxtPTA7bTxqO20rKyl7aWYoZT1nLnBhcnNlQ2FyZDgoKSxsPWcucGFyc2VDYXJkMTYoKSxlPj1kKXRocm93IG5ldyBFcnJvcihcIkNGRiB0YWJsZSBDSUQgRm9udCBGRFNlbGVjdCBoYXMgYmFkIEZEIGluZGV4IHZhbHVlIFwiK2UrXCIgKEZEIGNvdW50IFwiK2QrXCIpXCIpO2lmKGw+Yyl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgVGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgZm9ybWF0IDMgcmFuZ2UgaGFzIGJhZCBHSUQgXCIrbCk7Zm9yKDtrPGw7aysrKWYucHVzaChlKTtrPWx9aWYobCE9PWMpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIFRhYmxlIENJRCBGb250IEZEU2VsZWN0IGZvcm1hdCAzIHJhbmdlIGhhcyBiYWQgZmluYWwgR0lEIFwiK2wpfXJldHVybiBmfWZ1bmN0aW9uIHphKGEsYixjKXtjLnRhYmxlcy5jZmY9e307dmFyIGQ9cmEoYSxiKSxlPWthKGEsZC5lbmRPZmZzZXQsTGUuYnl0ZXNUb1N0cmluZyksZj1rYShhLGUuZW5kT2Zmc2V0KSxnPWthKGEsZi5lbmRPZmZzZXQsTGUuYnl0ZXNUb1N0cmluZyksaD1rYShhLGcuZW5kT2Zmc2V0KTtjLmdzdWJycz1oLm9iamVjdHMsYy5nc3VicnNCaWFzPWphKGMuZ3N1YnJzKTt2YXIgaT11YShhLGIsZi5vYmplY3RzLGcub2JqZWN0cyk7aWYoMSE9PWkubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkNGRiB0YWJsZSBoYXMgdG9vIG1hbnkgZm9udHMgaW4gJ0ZvbnRTZXQnIC0gY291bnQgb2YgZm9udHMgTmFtZUluZGV4Lmxlbmd0aCA9IFwiK2kubGVuZ3RoKTt2YXIgaj1pWzBdO2lmKGMudGFibGVzLmNmZi50b3BEaWN0PWosai5fcHJpdmF0ZURpY3QmJihjLmRlZmF1bHRXaWR0aFg9ai5fcHJpdmF0ZURpY3QuZGVmYXVsdFdpZHRoWCxjLm5vbWluYWxXaWR0aFg9ai5fcHJpdmF0ZURpY3Qubm9taW5hbFdpZHRoWCksdm9pZCAwIT09ai5yb3NbMF0mJnZvaWQgMCE9PWoucm9zWzFdJiYoYy5pc0NJREZvbnQ9ITApLGMuaXNDSURGb250KXt2YXIgaz1qLmZkQXJyYXksbD1qLmZkU2VsZWN0O2lmKDA9PT1rfHwwPT09bCl0aHJvdyBuZXcgRXJyb3IoXCJGb250IGlzIG1hcmtlZCBhcyBhIENJRCBmb250LCBidXQgRkRBcnJheSBhbmQvb3IgRkRTZWxlY3QgaW5mb3JtYXRpb24gaXMgbWlzc2luZ1wiKTtrKz1iO3ZhciBtPWthKGEsayksbj11YShhLGIsbS5vYmplY3RzLGcub2JqZWN0cyk7ai5fZmRBcnJheT1uLGwrPWIsai5fZmRTZWxlY3Q9eWEoYSxsLGMubnVtR2x5cGhzLG4ubGVuZ3RoKX12YXIgbz1iK2oucHJpdmF0ZVsxXSxwPXRhKGEsbyxqLnByaXZhdGVbMF0sZy5vYmplY3RzKTtpZihjLmRlZmF1bHRXaWR0aFg9cC5kZWZhdWx0V2lkdGhYLGMubm9taW5hbFdpZHRoWD1wLm5vbWluYWxXaWR0aFgsMCE9PXAuc3VicnMpe3ZhciBxPW8rcC5zdWJycyxyPWthKGEscSk7Yy5zdWJycz1yLm9iamVjdHMsYy5zdWJyc0JpYXM9amEoYy5zdWJycyl9ZWxzZSBjLnN1YnJzPVtdLGMuc3VicnNCaWFzPTA7dmFyIHM9a2EoYSxiK2ouY2hhclN0cmluZ3MpO2MubkdseXBocz1zLm9iamVjdHMubGVuZ3RoO3ZhciB0PXZhKGEsYitqLmNoYXJzZXQsYy5uR2x5cGhzLGcub2JqZWN0cyk7MD09PWouZW5jb2Rpbmc/Yy5jZmZFbmNvZGluZz1uZXcgWihPZSx0KToxPT09ai5lbmNvZGluZz9jLmNmZkVuY29kaW5nPW5ldyBaKFBlLHQpOmMuY2ZmRW5jb2Rpbmc9d2EoYSxiK2ouZW5jb2RpbmcsdCksYy5lbmNvZGluZz1jLmVuY29kaW5nfHxjLmNmZkVuY29kaW5nLGMuZ2x5cGhzPW5ldyBTZS5HbHlwaFNldChjKTtmb3IodmFyIHU9MDt1PGMubkdseXBoczt1Kz0xKXt2YXIgdj1zLm9iamVjdHNbdV07Yy5nbHlwaHMucHVzaCh1LFNlLmNmZkdseXBoTG9hZGVyKGMsdSx4YSx2KSl9fWZ1bmN0aW9uIEFhKGEsYil7dmFyIGMsZD1OZS5pbmRleE9mKGEpO3JldHVybiBkPj0wJiYoYz1kKSxkPWIuaW5kZXhPZihhKSxkPj0wP2M9ZCtOZS5sZW5ndGg6KGM9TmUubGVuZ3RoK2IubGVuZ3RoLGIucHVzaChhKSksY31mdW5jdGlvbiBCYSgpe3JldHVybiBuZXcgSWUuUmVjb3JkKFwiSGVhZGVyXCIsW3tuYW1lOlwibWFqb3JcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZToxfSx7bmFtZTpcIm1pbm9yXCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6MH0se25hbWU6XCJoZHJTaXplXCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6NH0se25hbWU6XCJtYWpvclwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjF9XSl9ZnVuY3Rpb24gQ2EoYSl7dmFyIGI9bmV3IEllLlJlY29yZChcIk5hbWUgSU5ERVhcIixbe25hbWU6XCJuYW1lc1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pO2IubmFtZXM9W107Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0xKWIubmFtZXMucHVzaCh7bmFtZTpcIm5hbWVfXCIrYyx0eXBlOlwiTkFNRVwiLHZhbHVlOmFbY119KTtyZXR1cm4gYn1mdW5jdGlvbiBEYShhLGIsYyl7Zm9yKHZhciBkPXt9LGU9MDtlPGEubGVuZ3RoO2UrPTEpe3ZhciBmPWFbZV0sZz1iW2YubmFtZV07dm9pZCAwPT09Z3x8aWEoZyxmLnZhbHVlKXx8KFwiU0lEXCI9PT1mLnR5cGUmJihnPUFhKGcsYykpLGRbZi5vcF09e25hbWU6Zi5uYW1lLHR5cGU6Zi50eXBlLHZhbHVlOmd9KX1yZXR1cm4gZH1mdW5jdGlvbiBFYShhLGIpe3ZhciBjPW5ldyBJZS5SZWNvcmQoXCJUb3AgRElDVFwiLFt7bmFtZTpcImRpY3RcIix0eXBlOlwiRElDVFwiLHZhbHVlOnt9fV0pO3JldHVybiBjLmRpY3Q9RGEoVGUsYSxiKSxjfWZ1bmN0aW9uIEZhKGEpe3ZhciBiPW5ldyBJZS5SZWNvcmQoXCJUb3AgRElDVCBJTkRFWFwiLFt7bmFtZTpcInRvcERpY3RzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSk7cmV0dXJuIGIudG9wRGljdHM9W3tuYW1lOlwidG9wRGljdF8wXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6YX1dLGJ9ZnVuY3Rpb24gR2EoYSl7dmFyIGI9bmV3IEllLlJlY29yZChcIlN0cmluZyBJTkRFWFwiLFt7bmFtZTpcInN0cmluZ3NcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKTtiLnN0cmluZ3M9W107Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0xKWIuc3RyaW5ncy5wdXNoKHtuYW1lOlwic3RyaW5nX1wiK2MsdHlwZTpcIlNUUklOR1wiLHZhbHVlOmFbY119KTtyZXR1cm4gYn1mdW5jdGlvbiBIYSgpe3JldHVybiBuZXcgSWUuUmVjb3JkKFwiR2xvYmFsIFN1YnIgSU5ERVhcIixbe25hbWU6XCJzdWJyc1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pfWZ1bmN0aW9uIElhKGEsYil7Zm9yKHZhciBjPW5ldyBJZS5SZWNvcmQoXCJDaGFyc2V0c1wiLFt7bmFtZTpcImZvcm1hdFwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjB9XSksZD0wO2Q8YS5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXSxmPUFhKGUsYik7Yy5maWVsZHMucHVzaCh7bmFtZTpcImdseXBoX1wiK2QsdHlwZTpcIlNJRFwiLHZhbHVlOmZ9KX1yZXR1cm4gY31mdW5jdGlvbiBKYShhKXt2YXIgYj1bXSxjPWEucGF0aDtiLnB1c2goe25hbWU6XCJ3aWR0aFwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTphLmFkdmFuY2VXaWR0aH0pO2Zvcih2YXIgZD0wLGU9MCxmPTA7ZjxjLmNvbW1hbmRzLmxlbmd0aDtmKz0xKXt2YXIgZz12b2lkIDAsaD12b2lkIDAsaT1jLmNvbW1hbmRzW2ZdO2lmKFwiUVwiPT09aS50eXBlKXt2YXIgaj0xLzMsaz0yLzM7aT17dHlwZTpcIkNcIix4OmkueCx5OmkueSx4MTpqKmQrayppLngxLHkxOmoqZStrKmkueTEseDI6aippLngrayppLngxLHkyOmoqaS55K2sqaS55MX19aWYoXCJNXCI9PT1pLnR5cGUpZz1NYXRoLnJvdW5kKGkueC1kKSxoPU1hdGgucm91bmQoaS55LWUpLGIucHVzaCh7bmFtZTpcImR4XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmd9KSxiLnB1c2goe25hbWU6XCJkeVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpofSksYi5wdXNoKHtuYW1lOlwicm1vdmV0b1wiLHR5cGU6XCJPUFwiLHZhbHVlOjIxfSksZD1NYXRoLnJvdW5kKGkueCksZT1NYXRoLnJvdW5kKGkueSk7ZWxzZSBpZihcIkxcIj09PWkudHlwZSlnPU1hdGgucm91bmQoaS54LWQpLGg9TWF0aC5yb3VuZChpLnktZSksYi5wdXNoKHtuYW1lOlwiZHhcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6Z30pLGIucHVzaCh7bmFtZTpcImR5XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmh9KSxiLnB1c2goe25hbWU6XCJybGluZXRvXCIsdHlwZTpcIk9QXCIsdmFsdWU6NX0pLGQ9TWF0aC5yb3VuZChpLngpLGU9TWF0aC5yb3VuZChpLnkpO2Vsc2UgaWYoXCJDXCI9PT1pLnR5cGUpe3ZhciBsPU1hdGgucm91bmQoaS54MS1kKSxtPU1hdGgucm91bmQoaS55MS1lKSxuPU1hdGgucm91bmQoaS54Mi1pLngxKSxvPU1hdGgucm91bmQoaS55Mi1pLnkxKTtnPU1hdGgucm91bmQoaS54LWkueDIpLGg9TWF0aC5yb3VuZChpLnktaS55MiksYi5wdXNoKHtuYW1lOlwiZHgxXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmx9KSxiLnB1c2goe25hbWU6XCJkeTFcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6bX0pLGIucHVzaCh7bmFtZTpcImR4MlwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpufSksYi5wdXNoKHtuYW1lOlwiZHkyXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOm99KSxiLnB1c2goe25hbWU6XCJkeFwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpnfSksYi5wdXNoKHtuYW1lOlwiZHlcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6aH0pLGIucHVzaCh7bmFtZTpcInJyY3VydmV0b1wiLHR5cGU6XCJPUFwiLHZhbHVlOjh9KSxkPU1hdGgucm91bmQoaS54KSxlPU1hdGgucm91bmQoaS55KX19cmV0dXJuIGIucHVzaCh7bmFtZTpcImVuZGNoYXJcIix0eXBlOlwiT1BcIix2YWx1ZToxNH0pLGJ9ZnVuY3Rpb24gS2EoYSl7Zm9yKHZhciBiPW5ldyBJZS5SZWNvcmQoXCJDaGFyU3RyaW5ncyBJTkRFWFwiLFt7bmFtZTpcImNoYXJTdHJpbmdzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSksYz0wO2M8YS5sZW5ndGg7Yys9MSl7dmFyIGQ9YS5nZXQoYyksZT1KYShkKTtiLmNoYXJTdHJpbmdzLnB1c2goe25hbWU6ZC5uYW1lLHR5cGU6XCJDSEFSU1RSSU5HXCIsdmFsdWU6ZX0pfXJldHVybiBifWZ1bmN0aW9uIExhKGEsYil7dmFyIGM9bmV3IEllLlJlY29yZChcIlByaXZhdGUgRElDVFwiLFt7bmFtZTpcImRpY3RcIix0eXBlOlwiRElDVFwiLHZhbHVlOnt9fV0pO3JldHVybiBjLmRpY3Q9RGEoVWUsYSxiKSxjfWZ1bmN0aW9uIE1hKGEsYil7Zm9yKHZhciBjLGQ9bmV3IEllLlRhYmxlKFwiQ0ZGIFwiLFt7bmFtZTpcImhlYWRlclwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJuYW1lSW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwidG9wRGljdEluZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcInN0cmluZ0luZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcImdsb2JhbFN1YnJJbmRleFwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJjaGFyc2V0c1wiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJjaGFyU3RyaW5nc0luZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcInByaXZhdGVEaWN0XCIsdHlwZTpcIlJFQ09SRFwifV0pLGU9MS9iLnVuaXRzUGVyRW0sZj17dmVyc2lvbjpiLnZlcnNpb24sZnVsbE5hbWU6Yi5mdWxsTmFtZSxmYW1pbHlOYW1lOmIuZmFtaWx5TmFtZSx3ZWlnaHQ6Yi53ZWlnaHROYW1lLGZvbnRCQm94OmIuZm9udEJCb3h8fFswLDAsMCwwXSxmb250TWF0cml4OltlLDAsMCxlLDAsMF0sY2hhcnNldDo5OTksZW5jb2Rpbmc6MCxjaGFyU3RyaW5nczo5OTkscHJpdmF0ZTpbMCw5OTldfSxnPXt9LGg9W10saT0xO2k8YS5sZW5ndGg7aSs9MSljPWEuZ2V0KGkpLGgucHVzaChjLm5hbWUpO3ZhciBqPVtdO2QuaGVhZGVyPUJhKCksZC5uYW1lSW5kZXg9Q2EoW2IucG9zdFNjcmlwdE5hbWVdKTt2YXIgaz1FYShmLGopO2QudG9wRGljdEluZGV4PUZhKGspLGQuZ2xvYmFsU3VickluZGV4PUhhKCksZC5jaGFyc2V0cz1JYShoLGopLGQuY2hhclN0cmluZ3NJbmRleD1LYShhKSxkLnByaXZhdGVEaWN0PUxhKGcsaiksZC5zdHJpbmdJbmRleD1HYShqKTt2YXIgbD1kLmhlYWRlci5zaXplT2YoKStkLm5hbWVJbmRleC5zaXplT2YoKStkLnRvcERpY3RJbmRleC5zaXplT2YoKStkLnN0cmluZ0luZGV4LnNpemVPZigpK2QuZ2xvYmFsU3VickluZGV4LnNpemVPZigpO3JldHVybiBmLmNoYXJzZXQ9bCxmLmVuY29kaW5nPTAsZi5jaGFyU3RyaW5ncz1mLmNoYXJzZXQrZC5jaGFyc2V0cy5zaXplT2YoKSxmLnByaXZhdGVbMV09Zi5jaGFyU3RyaW5ncytkLmNoYXJTdHJpbmdzSW5kZXguc2l6ZU9mKCksaz1FYShmLGopLGQudG9wRGljdEluZGV4PUZhKGspLGR9ZnVuY3Rpb24gTmEoYSxiKXt2YXIgYz17fSxkPW5ldyBMZS5QYXJzZXIoYSxiKTtyZXR1cm4gYy52ZXJzaW9uPWQucGFyc2VWZXJzaW9uKCksYy5mb250UmV2aXNpb249TWF0aC5yb3VuZCgxZTMqZC5wYXJzZUZpeGVkKCkpLzFlMyxjLmNoZWNrU3VtQWRqdXN0bWVudD1kLnBhcnNlVUxvbmcoKSxjLm1hZ2ljTnVtYmVyPWQucGFyc2VVTG9uZygpLHhlLmFyZ3VtZW50KDE1OTQ4MzQxNjU9PT1jLm1hZ2ljTnVtYmVyLFwiRm9udCBoZWFkZXIgaGFzIHdyb25nIG1hZ2ljIG51bWJlci5cIiksYy5mbGFncz1kLnBhcnNlVVNob3J0KCksYy51bml0c1BlckVtPWQucGFyc2VVU2hvcnQoKSxjLmNyZWF0ZWQ9ZC5wYXJzZUxvbmdEYXRlVGltZSgpLGMubW9kaWZpZWQ9ZC5wYXJzZUxvbmdEYXRlVGltZSgpLGMueE1pbj1kLnBhcnNlU2hvcnQoKSxjLnlNaW49ZC5wYXJzZVNob3J0KCksYy54TWF4PWQucGFyc2VTaG9ydCgpLGMueU1heD1kLnBhcnNlU2hvcnQoKSxjLm1hY1N0eWxlPWQucGFyc2VVU2hvcnQoKSxjLmxvd2VzdFJlY1BQRU09ZC5wYXJzZVVTaG9ydCgpLGMuZm9udERpcmVjdGlvbkhpbnQ9ZC5wYXJzZVNob3J0KCksYy5pbmRleFRvTG9jRm9ybWF0PWQucGFyc2VTaG9ydCgpLGMuZ2x5cGhEYXRhRm9ybWF0PWQucGFyc2VTaG9ydCgpLGN9ZnVuY3Rpb24gT2EoYSl7dmFyIGI9TWF0aC5yb3VuZCgobmV3IERhdGUpLmdldFRpbWUoKS8xZTMpKzIwODI4NDQ4MDAsYz1iO3JldHVybiBhLmNyZWF0ZWRUaW1lc3RhbXAmJihjPWEuY3JlYXRlZFRpbWVzdGFtcCsyMDgyODQ0ODAwKSxuZXcgSWUuVGFibGUoXCJoZWFkXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjY1NTM2fSx7bmFtZTpcImZvbnRSZXZpc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjY1NTM2fSx7bmFtZTpcImNoZWNrU3VtQWRqdXN0bWVudFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWFnaWNOdW1iZXJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZToxNTk0ODM0MTY1fSx7bmFtZTpcImZsYWdzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidW5pdHNQZXJFbVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxZTN9LHtuYW1lOlwiY3JlYXRlZFwiLHR5cGU6XCJMT05HREFURVRJTUVcIix2YWx1ZTpjfSx7bmFtZTpcIm1vZGlmaWVkXCIsdHlwZTpcIkxPTkdEQVRFVElNRVwiLHZhbHVlOmJ9LHtuYW1lOlwieE1pblwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieU1pblwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieE1heFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieU1heFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibWFjU3R5bGVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJsb3dlc3RSZWNQUEVNXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZm9udERpcmVjdGlvbkhpbnRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZToyfSx7bmFtZTpcImluZGV4VG9Mb2NGb3JtYXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImdseXBoRGF0YUZvcm1hdFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9XSxhKX1mdW5jdGlvbiBQYShhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3JldHVybiBjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLmFzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMuZGVzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMubGluZUdhcD1kLnBhcnNlU2hvcnQoKSxjLmFkdmFuY2VXaWR0aE1heD1kLnBhcnNlVVNob3J0KCksYy5taW5MZWZ0U2lkZUJlYXJpbmc9ZC5wYXJzZVNob3J0KCksYy5taW5SaWdodFNpZGVCZWFyaW5nPWQucGFyc2VTaG9ydCgpLGMueE1heEV4dGVudD1kLnBhcnNlU2hvcnQoKSxjLmNhcmV0U2xvcGVSaXNlPWQucGFyc2VTaG9ydCgpLGMuY2FyZXRTbG9wZVJ1bj1kLnBhcnNlU2hvcnQoKSxjLmNhcmV0T2Zmc2V0PWQucGFyc2VTaG9ydCgpLGQucmVsYXRpdmVPZmZzZXQrPTgsYy5tZXRyaWNEYXRhRm9ybWF0PWQucGFyc2VTaG9ydCgpLGMubnVtYmVyT2ZITWV0cmljcz1kLnBhcnNlVVNob3J0KCksY31mdW5jdGlvbiBRYShhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiaGhlYVwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiRklYRURcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJhc2NlbmRlclwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwiZGVzY2VuZGVyXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJsaW5lR2FwXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJhZHZhbmNlV2lkdGhNYXhcIix0eXBlOlwiVUZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJtaW5MZWZ0U2lkZUJlYXJpbmdcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcIm1pblJpZ2h0U2lkZUJlYXJpbmdcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcInhNYXhFeHRlbnRcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImNhcmV0U2xvcGVSaXNlXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJjYXJldFNsb3BlUnVuXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJjYXJldE9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVzZXJ2ZWQxXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXNlcnZlZDJcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlc2VydmVkM1wiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVzZXJ2ZWQ0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJtZXRyaWNEYXRhRm9ybWF0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJudW1iZXJPZkhNZXRyaWNzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSxhKX1mdW5jdGlvbiBSYShhLGIsYyxkLGUpe2Zvcih2YXIgZixnLGg9bmV3IExlLlBhcnNlcihhLGIpLGk9MDtpPGQ7aSs9MSl7aTxjJiYoZj1oLnBhcnNlVVNob3J0KCksZz1oLnBhcnNlU2hvcnQoKSk7dmFyIGo9ZS5nZXQoaSk7ai5hZHZhbmNlV2lkdGg9ZixqLmxlZnRTaWRlQmVhcmluZz1nfX1mdW5jdGlvbiBTYShhKXtmb3IodmFyIGI9bmV3IEllLlRhYmxlKFwiaG10eFwiLFtdKSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hLmdldChjKSxlPWQuYWR2YW5jZVdpZHRofHwwLGY9ZC5sZWZ0U2lkZUJlYXJpbmd8fDA7Yi5maWVsZHMucHVzaCh7bmFtZTpcImFkdmFuY2VXaWR0aF9cIitjLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTplfSksYi5maWVsZHMucHVzaCh7bmFtZTpcImxlZnRTaWRlQmVhcmluZ19cIitjLHR5cGU6XCJTSE9SVFwiLHZhbHVlOmZ9KX1yZXR1cm4gYn1mdW5jdGlvbiBUYShhKXtmb3IodmFyIGI9bmV3IEllLlRhYmxlKFwibHRhZ1wiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZToxfSx7bmFtZTpcImZsYWdzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJudW1UYWdzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6YS5sZW5ndGh9XSksYz1cIlwiLGQ9MTIrNCphLmxlbmd0aCxlPTA7ZTxhLmxlbmd0aDsrK2Upe3ZhciBmPWMuaW5kZXhPZihhW2VdKTtmPDAmJihmPWMubGVuZ3RoLGMrPWFbZV0pLGIuZmllbGRzLnB1c2goe25hbWU6XCJvZmZzZXQgXCIrZSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZCtmfSksYi5maWVsZHMucHVzaCh7bmFtZTpcImxlbmd0aCBcIitlLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphW2VdLmxlbmd0aH0pfXJldHVybiBiLmZpZWxkcy5wdXNoKHtuYW1lOlwic3RyaW5nUG9vbFwiLHR5cGU6XCJDSEFSQVJSQVlcIix2YWx1ZTpjfSksYn1mdW5jdGlvbiBVYShhLGIpe3ZhciBjPW5ldyBMZS5QYXJzZXIoYSxiKSxkPWMucGFyc2VVTG9uZygpO3hlLmFyZ3VtZW50KDE9PT1kLFwiVW5zdXBwb3J0ZWQgbHRhZyB0YWJsZSB2ZXJzaW9uLlwiKSxjLnNraXAoXCJ1TG9uZ1wiLDEpO2Zvcih2YXIgZT1jLnBhcnNlVUxvbmcoKSxmPVtdLGc9MDtnPGU7ZysrKXtmb3IodmFyIGg9XCJcIixpPWIrYy5wYXJzZVVTaG9ydCgpLGo9Yy5wYXJzZVVTaG9ydCgpLGs9aTtrPGkrajsrK2spaCs9U3RyaW5nLmZyb21DaGFyQ29kZShhLmdldEludDgoaykpO2YucHVzaChoKX1yZXR1cm4gZn1mdW5jdGlvbiBWYShhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3JldHVybiBjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLm51bUdseXBocz1kLnBhcnNlVVNob3J0KCksMT09PWMudmVyc2lvbiYmKGMubWF4UG9pbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbnRvdXJzPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbXBvc2l0ZVBvaW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb21wb3NpdGVDb250b3Vycz1kLnBhcnNlVVNob3J0KCksYy5tYXhab25lcz1kLnBhcnNlVVNob3J0KCksYy5tYXhUd2lsaWdodFBvaW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhTdG9yYWdlPWQucGFyc2VVU2hvcnQoKSxjLm1heEZ1bmN0aW9uRGVmcz1kLnBhcnNlVVNob3J0KCksYy5tYXhJbnN0cnVjdGlvbkRlZnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4U3RhY2tFbGVtZW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhTaXplT2ZJbnN0cnVjdGlvbnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29tcG9uZW50RWxlbWVudHM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29tcG9uZW50RGVwdGg9ZC5wYXJzZVVTaG9ydCgpKSxjfWZ1bmN0aW9uIFdhKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJtYXhwXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjIwNDgwfSx7bmFtZTpcIm51bUdseXBoc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphfV0pfWZ1bmN0aW9uIFhhKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSAwOmlmKDY1NTM1PT09YilyZXR1cm5cInVuZFwiO2lmKGMpcmV0dXJuIGNbYl07YnJlYWs7Y2FzZSAxOnJldHVybiBhZltiXTtjYXNlIDM6cmV0dXJuIGNmW2JdfX1mdW5jdGlvbiBZYShhLGIsYyl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gZGY7Y2FzZSAxOnJldHVybiBmZltjXXx8ZWZbYl07Y2FzZSAzOmlmKDE9PT1ifHwxMD09PWIpcmV0dXJuIGRmfX1mdW5jdGlvbiBaYShhLGIsYyl7Zm9yKHZhciBkPXt9LGU9bmV3IExlLlBhcnNlcihhLGIpLGY9ZS5wYXJzZVVTaG9ydCgpLGc9ZS5wYXJzZVVTaG9ydCgpLGg9ZS5vZmZzZXQrZS5wYXJzZVVTaG9ydCgpLGk9MDtpPGc7aSsrKXt2YXIgaj1lLnBhcnNlVVNob3J0KCksaz1lLnBhcnNlVVNob3J0KCksbD1lLnBhcnNlVVNob3J0KCksbT1lLnBhcnNlVVNob3J0KCksbj1fZVttXXx8bSxvPWUucGFyc2VVU2hvcnQoKSxwPWUucGFyc2VVU2hvcnQoKSxxPVhhKGosbCxjKSxyPVlhKGosayxsKTtpZih2b2lkIDAhPT1yJiZ2b2lkIDAhPT1xKXt2YXIgcz12b2lkIDA7aWYocz1yPT09ZGY/QWUuVVRGMTYoYSxoK3Asbyk6QWUuTUFDU1RSSU5HKGEsaCtwLG8scikpe3ZhciB0PWRbbl07dm9pZCAwPT09dCYmKHQ9ZFtuXT17fSksdFtxXT1zfX19cmV0dXJuIDE9PT1mJiZlLnBhcnNlVVNob3J0KCksZH1mdW5jdGlvbiAkYShhKXt2YXIgYj17fTtmb3IodmFyIGMgaW4gYSliW2FbY11dPXBhcnNlSW50KGMpO3JldHVybiBifWZ1bmN0aW9uIF9hKGEsYixjLGQsZSxmKXtyZXR1cm4gbmV3IEllLlJlY29yZChcIk5hbWVSZWNvcmRcIixbe25hbWU6XCJwbGF0Zm9ybUlEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmF9LHtuYW1lOlwiZW5jb2RpbmdJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpifSx7bmFtZTpcImxhbmd1YWdlSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Y30se25hbWU6XCJuYW1lSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZH0se25hbWU6XCJsZW5ndGhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZX0se25hbWU6XCJvZmZzZXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Zn1dKX1mdW5jdGlvbiBhYihhLGIpe3ZhciBjPWEubGVuZ3RoLGQ9Yi5sZW5ndGgtYysxO2E6Zm9yKHZhciBlPTA7ZTxkO2UrKylmb3IoO2U8ZDtlKyspe2Zvcih2YXIgZj0wO2Y8YztmKyspaWYoYltlK2ZdIT09YVtmXSljb250aW51ZSBhO3JldHVybiBlfXJldHVybi0xfWZ1bmN0aW9uIGJiKGEsYil7dmFyIGM9YWIoYSxiKTtpZihjPDApe2M9Yi5sZW5ndGg7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aDtkPGU7KytkKWIucHVzaChhW2RdKX1yZXR1cm4gY31mdW5jdGlvbiBjYihhLGIpe3ZhciBjLGQ9W10sZT17fSxmPSRhKF9lKTtmb3IodmFyIGcgaW4gYSl7dmFyIGg9ZltnXTtpZih2b2lkIDA9PT1oJiYoaD1nKSxjPXBhcnNlSW50KGgpLGlzTmFOKGMpKXRocm93IG5ldyBFcnJvcignTmFtZSB0YWJsZSBlbnRyeSBcIicrZysnXCIgZG9lcyBub3QgZXhpc3QsIHNlZSBuYW1lVGFibGVOYW1lcyBmb3IgY29tcGxldGUgbGlzdC4nKTtlW2NdPWFbZ10sZC5wdXNoKGMpfWZvcih2YXIgaT0kYShhZiksaj0kYShjZiksaz1bXSxsPVtdLG09MDttPGQubGVuZ3RoO20rKyl7Yz1kW21dO3ZhciBuPWVbY107Zm9yKHZhciBvIGluIG4pe3ZhciBwPW5bb10scT0xLHI9aVtvXSxzPWJmW3JdLHQ9WWEocSxzLHIpLHU9QmUuTUFDU1RSSU5HKHAsdCk7dm9pZCAwPT09dSYmKHE9MCxyPWIuaW5kZXhPZihvKSxyPDAmJihyPWIubGVuZ3RoLGIucHVzaChvKSkscz00LHU9QmUuVVRGMTYocCkpO3ZhciB2PWJiKHUsbCk7ay5wdXNoKF9hKHEscyxyLGMsdS5sZW5ndGgsdikpO3ZhciB3PWpbb107aWYodm9pZCAwIT09dyl7dmFyIHg9QmUuVVRGMTYocCkseT1iYih4LGwpO2sucHVzaChfYSgzLDEsdyxjLHgubGVuZ3RoLHkpKX19fWsuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnBsYXRmb3JtSUQtYi5wbGF0Zm9ybUlEfHxhLmVuY29kaW5nSUQtYi5lbmNvZGluZ0lEfHxhLmxhbmd1YWdlSUQtYi5sYW5ndWFnZUlEfHxhLm5hbWVJRC1iLm5hbWVJRH0pO2Zvcih2YXIgej1uZXcgSWUuVGFibGUoXCJuYW1lXCIsW3tuYW1lOlwiZm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiY291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ay5sZW5ndGh9LHtuYW1lOlwic3RyaW5nT2Zmc2V0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjYrMTIqay5sZW5ndGh9XSksQT0wO0E8ay5sZW5ndGg7QSsrKXouZmllbGRzLnB1c2goe25hbWU6XCJyZWNvcmRfXCIrQSx0eXBlOlwiUkVDT1JEXCIsdmFsdWU6a1tBXX0pO3JldHVybiB6LmZpZWxkcy5wdXNoKHtuYW1lOlwic3RyaW5nc1wiLHR5cGU6XCJMSVRFUkFMXCIsdmFsdWU6bH0pLHp9ZnVuY3Rpb24gZGIoYSl7Zm9yKHZhciBiPTA7YjxoZi5sZW5ndGg7Yis9MSl7dmFyIGM9aGZbYl07aWYoYT49Yy5iZWdpbiYmYTxjLmVuZClyZXR1cm4gYn1yZXR1cm4tMX1mdW5jdGlvbiBlYihhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO2MudmVyc2lvbj1kLnBhcnNlVVNob3J0KCksYy54QXZnQ2hhcldpZHRoPWQucGFyc2VTaG9ydCgpLGMudXNXZWlnaHRDbGFzcz1kLnBhcnNlVVNob3J0KCksYy51c1dpZHRoQ2xhc3M9ZC5wYXJzZVVTaG9ydCgpLGMuZnNUeXBlPWQucGFyc2VVU2hvcnQoKSxjLnlTdWJzY3JpcHRYU2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdWJzY3JpcHRZU2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdWJzY3JpcHRYT2Zmc2V0PWQucGFyc2VTaG9ydCgpLGMueVN1YnNjcmlwdFlPZmZzZXQ9ZC5wYXJzZVNob3J0KCksYy55U3VwZXJzY3JpcHRYU2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdXBlcnNjcmlwdFlTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1cGVyc2NyaXB0WE9mZnNldD1kLnBhcnNlU2hvcnQoKSxjLnlTdXBlcnNjcmlwdFlPZmZzZXQ9ZC5wYXJzZVNob3J0KCksYy55U3RyaWtlb3V0U2l6ZT1kLnBhcnNlU2hvcnQoKSxjLnlTdHJpa2VvdXRQb3NpdGlvbj1kLnBhcnNlU2hvcnQoKSxjLnNGYW1pbHlDbGFzcz1kLnBhcnNlU2hvcnQoKSxjLnBhbm9zZT1bXTtmb3IodmFyIGU9MDtlPDEwO2UrKyljLnBhbm9zZVtlXT1kLnBhcnNlQnl0ZSgpO3JldHVybiBjLnVsVW5pY29kZVJhbmdlMT1kLnBhcnNlVUxvbmcoKSxjLnVsVW5pY29kZVJhbmdlMj1kLnBhcnNlVUxvbmcoKSxjLnVsVW5pY29kZVJhbmdlMz1kLnBhcnNlVUxvbmcoKSxjLnVsVW5pY29kZVJhbmdlND1kLnBhcnNlVUxvbmcoKSxjLmFjaFZlbmRJRD1TdHJpbmcuZnJvbUNoYXJDb2RlKGQucGFyc2VCeXRlKCksZC5wYXJzZUJ5dGUoKSxkLnBhcnNlQnl0ZSgpLGQucGFyc2VCeXRlKCkpLGMuZnNTZWxlY3Rpb249ZC5wYXJzZVVTaG9ydCgpLGMudXNGaXJzdENoYXJJbmRleD1kLnBhcnNlVVNob3J0KCksYy51c0xhc3RDaGFySW5kZXg9ZC5wYXJzZVVTaG9ydCgpLGMuc1R5cG9Bc2NlbmRlcj1kLnBhcnNlU2hvcnQoKSxjLnNUeXBvRGVzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMuc1R5cG9MaW5lR2FwPWQucGFyc2VTaG9ydCgpLGMudXNXaW5Bc2NlbnQ9ZC5wYXJzZVVTaG9ydCgpLGMudXNXaW5EZXNjZW50PWQucGFyc2VVU2hvcnQoKSxjLnZlcnNpb24+PTEmJihjLnVsQ29kZVBhZ2VSYW5nZTE9ZC5wYXJzZVVMb25nKCksYy51bENvZGVQYWdlUmFuZ2UyPWQucGFyc2VVTG9uZygpKSxjLnZlcnNpb24+PTImJihjLnN4SGVpZ2h0PWQucGFyc2VTaG9ydCgpLGMuc0NhcEhlaWdodD1kLnBhcnNlU2hvcnQoKSxjLnVzRGVmYXVsdENoYXI9ZC5wYXJzZVVTaG9ydCgpLGMudXNCcmVha0NoYXI9ZC5wYXJzZVVTaG9ydCgpLGMudXNNYXhDb250ZW50PWQucGFyc2VVU2hvcnQoKSksY31mdW5jdGlvbiBmYihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiT1MvMlwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6M30se25hbWU6XCJ4QXZnQ2hhcldpZHRoXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c1dlaWdodENsYXNzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNXaWR0aENsYXNzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZnNUeXBlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieVN1YnNjcmlwdFhTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6NjUwfSx7bmFtZTpcInlTdWJzY3JpcHRZU2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjY5OX0se25hbWU6XCJ5U3Vic2NyaXB0WE9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieVN1YnNjcmlwdFlPZmZzZXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZToxNDB9LHtuYW1lOlwieVN1cGVyc2NyaXB0WFNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo2NTB9LHtuYW1lOlwieVN1cGVyc2NyaXB0WVNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo2OTl9LHtuYW1lOlwieVN1cGVyc2NyaXB0WE9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwieVN1cGVyc2NyaXB0WU9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjQ3OX0se25hbWU6XCJ5U3RyaWtlb3V0U2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjQ5fSx7bmFtZTpcInlTdHJpa2VvdXRQb3NpdGlvblwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjI1OH0se25hbWU6XCJzRmFtaWx5Q2xhc3NcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImJGYW1pbHlUeXBlXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJTZXJpZlN0eWxlXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJXZWlnaHRcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlByb3BvcnRpb25cIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYkNvbnRyYXN0XCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJTdHJva2VWYXJpYXRpb25cIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYkFybVN0eWxlXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJMZXR0ZXJmb3JtXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJNaWRsaW5lXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcImJYSGVpZ2h0XCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSx7bmFtZTpcInVsVW5pY29kZVJhbmdlMVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwidWxVbmljb2RlUmFuZ2UyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJ1bFVuaWNvZGVSYW5nZTNcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcInVsVW5pY29kZVJhbmdlNFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwiYWNoVmVuZElEXCIsdHlwZTpcIkNIQVJBUlJBWVwiLHZhbHVlOlwiWFhYWFwifSx7bmFtZTpcImZzU2VsZWN0aW9uXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNGaXJzdENoYXJJbmRleFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzTGFzdENoYXJJbmRleFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNUeXBvQXNjZW5kZXJcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNUeXBvRGVzY2VuZGVyXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzVHlwb0xpbmVHYXBcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzV2luQXNjZW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNXaW5EZXNjZW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidWxDb2RlUGFnZVJhbmdlMVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwidWxDb2RlUGFnZVJhbmdlMlwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwic3hIZWlnaHRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNDYXBIZWlnaHRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzRGVmYXVsdENoYXJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c0JyZWFrQ2hhclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzTWF4Q29udGV4dFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfV0sYSl9ZnVuY3Rpb24gZ2IoYSxiKXt2YXIgYz17fSxkPW5ldyBMZS5QYXJzZXIoYSxiKTtzd2l0Y2goYy52ZXJzaW9uPWQucGFyc2VWZXJzaW9uKCksYy5pdGFsaWNBbmdsZT1kLnBhcnNlRml4ZWQoKSxjLnVuZGVybGluZVBvc2l0aW9uPWQucGFyc2VTaG9ydCgpLGMudW5kZXJsaW5lVGhpY2tuZXNzPWQucGFyc2VTaG9ydCgpLGMuaXNGaXhlZFBpdGNoPWQucGFyc2VVTG9uZygpLGMubWluTWVtVHlwZTQyPWQucGFyc2VVTG9uZygpLGMubWF4TWVtVHlwZTQyPWQucGFyc2VVTG9uZygpLGMubWluTWVtVHlwZTE9ZC5wYXJzZVVMb25nKCksYy5tYXhNZW1UeXBlMT1kLnBhcnNlVUxvbmcoKSxjLnZlcnNpb24pe2Nhc2UgMTpjLm5hbWVzPVFlLnNsaWNlKCk7YnJlYWs7Y2FzZSAyOmMubnVtYmVyT2ZHbHlwaHM9ZC5wYXJzZVVTaG9ydCgpLGMuZ2x5cGhOYW1lSW5kZXg9bmV3IEFycmF5KGMubnVtYmVyT2ZHbHlwaHMpO2Zvcih2YXIgZT0wO2U8Yy5udW1iZXJPZkdseXBocztlKyspYy5nbHlwaE5hbWVJbmRleFtlXT1kLnBhcnNlVVNob3J0KCk7Yy5uYW1lcz1bXTtmb3IodmFyIGY9MDtmPGMubnVtYmVyT2ZHbHlwaHM7ZisrKWlmKGMuZ2x5cGhOYW1lSW5kZXhbZl0+PVFlLmxlbmd0aCl7dmFyIGc9ZC5wYXJzZUNoYXIoKTtjLm5hbWVzLnB1c2goZC5wYXJzZVN0cmluZyhnKSl9YnJlYWs7Y2FzZSAyLjU6Yy5udW1iZXJPZkdseXBocz1kLnBhcnNlVVNob3J0KCksYy5vZmZzZXQ9bmV3IEFycmF5KGMubnVtYmVyT2ZHbHlwaHMpO2Zvcih2YXIgaD0wO2g8Yy5udW1iZXJPZkdseXBocztoKyspYy5vZmZzZXRbaF09ZC5wYXJzZUNoYXIoKX1yZXR1cm4gY31mdW5jdGlvbiBoYigpe3JldHVybiBuZXcgSWUuVGFibGUoXCJwb3N0XCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjE5NjYwOH0se25hbWU6XCJpdGFsaWNBbmdsZVwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjB9LHtuYW1lOlwidW5kZXJsaW5lUG9zaXRpb25cIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcInVuZGVybGluZVRoaWNrbmVzc1wiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwiaXNGaXhlZFBpdGNoXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtaW5NZW1UeXBlNDJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1heE1lbVR5cGU0MlwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWluTWVtVHlwZTFcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1heE1lbVR5cGUxXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH1dKX1mdW5jdGlvbiBpYihhLGIpe2I9Ynx8MDt2YXIgYz1uZXcgUShhLGIpLGQ9Yy5wYXJzZVZlcnNpb24oMSk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1kfHwxLjE9PT1kLFwiVW5zdXBwb3J0ZWQgR1NVQiB0YWJsZSB2ZXJzaW9uLlwiKSwxPT09ZD97dmVyc2lvbjpkLHNjcmlwdHM6Yy5wYXJzZVNjcmlwdExpc3QoKSxmZWF0dXJlczpjLnBhcnNlRmVhdHVyZUxpc3QoKSxsb29rdXBzOmMucGFyc2VMb29rdXBMaXN0KGxmKX06e3ZlcnNpb246ZCxzY3JpcHRzOmMucGFyc2VTY3JpcHRMaXN0KCksZmVhdHVyZXM6Yy5wYXJzZUZlYXR1cmVMaXN0KCksbG9va3VwczpjLnBhcnNlTG9va3VwTGlzdChsZiksdmFyaWF0aW9uczpjLnBhcnNlRmVhdHVyZVZhcmlhdGlvbnNMaXN0KCl9fWZ1bmN0aW9uIGpiKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJHU1VCXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjY1NTM2fSx7bmFtZTpcInNjcmlwdHNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuU2NyaXB0TGlzdChhLnNjcmlwdHMpfSx7bmFtZTpcImZlYXR1cmVzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkZlYXR1cmVMaXN0KGEuZmVhdHVyZXMpfSx7bmFtZTpcImxvb2t1cHNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuTG9va3VwTGlzdChhLmxvb2t1cHMsbmYpfV0pfWZ1bmN0aW9uIGtiKGEsYil7dmFyIGM9bmV3IExlLlBhcnNlcihhLGIpLGQ9Yy5wYXJzZVVMb25nKCk7eGUuYXJndW1lbnQoMT09PWQsXCJVbnN1cHBvcnRlZCBNRVRBIHRhYmxlIHZlcnNpb24uXCIpLGMucGFyc2VVTG9uZygpLGMucGFyc2VVTG9uZygpO2Zvcih2YXIgZT1jLnBhcnNlVUxvbmcoKSxmPXt9LGc9MDtnPGU7ZysrKXt2YXIgaD1jLnBhcnNlVGFnKCksaT1jLnBhcnNlVUxvbmcoKSxqPWMucGFyc2VVTG9uZygpLGs9QWUuVVRGOChhLGIraSxqKTtmW2hdPWt9cmV0dXJuIGZ9ZnVuY3Rpb24gbGIoYSl7dmFyIGI9T2JqZWN0LmtleXMoYSkubGVuZ3RoLGM9XCJcIixkPTE2KzEyKmIsZT1uZXcgSWUuVGFibGUoXCJtZXRhXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjF9LHtuYW1lOlwiZmxhZ3NcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmR9LHtuYW1lOlwibnVtVGFnc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmJ9XSk7Zm9yKHZhciBmIGluIGEpe3ZhciBnPWMubGVuZ3RoO2MrPWFbZl0sZS5maWVsZHMucHVzaCh7bmFtZTpcInRhZyBcIitmLHR5cGU6XCJUQUdcIix2YWx1ZTpmfSksZS5maWVsZHMucHVzaCh7bmFtZTpcIm9mZnNldCBcIitmLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmQrZ30pLGUuZmllbGRzLnB1c2goe25hbWU6XCJsZW5ndGggXCIrZix0eXBlOlwiVUxPTkdcIix2YWx1ZTphW2ZdLmxlbmd0aH0pfXJldHVybiBlLmZpZWxkcy5wdXNoKHtuYW1lOlwic3RyaW5nUG9vbFwiLHR5cGU6XCJDSEFSQVJSQVlcIix2YWx1ZTpjfSksZX1mdW5jdGlvbiBtYihhKXtyZXR1cm4gTWF0aC5sb2coYSkvTWF0aC5sb2coMil8MH1mdW5jdGlvbiBuYihhKXtmb3IoO2EubGVuZ3RoJTQhPTA7KWEucHVzaCgwKTtmb3IodmFyIGI9MCxjPTA7YzxhLmxlbmd0aDtjKz00KWIrPShhW2NdPDwyNCkrKGFbYysxXTw8MTYpKyhhW2MrMl08PDgpK2FbYyszXTtyZXR1cm4gYiU9TWF0aC5wb3coMiwzMil9ZnVuY3Rpb24gb2IoYSxiLGMsZCl7cmV0dXJuIG5ldyBJZS5SZWNvcmQoXCJUYWJsZSBSZWNvcmRcIixbe25hbWU6XCJ0YWdcIix0eXBlOlwiVEFHXCIsdmFsdWU6dm9pZCAwIT09YT9hOlwiXCJ9LHtuYW1lOlwiY2hlY2tTdW1cIix0eXBlOlwiVUxPTkdcIix2YWx1ZTp2b2lkIDAhPT1iP2I6MH0se25hbWU6XCJvZmZzZXRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTp2b2lkIDAhPT1jP2M6MH0se25hbWU6XCJsZW5ndGhcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTp2b2lkIDAhPT1kP2Q6MH1dKX1mdW5jdGlvbiBwYihhKXt2YXIgYj1uZXcgSWUuVGFibGUoXCJzZm50XCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJUQUdcIix2YWx1ZTpcIk9UVE9cIn0se25hbWU6XCJudW1UYWJsZXNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJzZWFyY2hSYW5nZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImVudHJ5U2VsZWN0b3JcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyYW5nZVNoaWZ0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSk7Yi50YWJsZXM9YSxiLm51bVRhYmxlcz1hLmxlbmd0aDt2YXIgYz1NYXRoLnBvdygyLG1iKGIubnVtVGFibGVzKSk7Yi5zZWFyY2hSYW5nZT0xNipjLGIuZW50cnlTZWxlY3Rvcj1tYihjKSxiLnJhbmdlU2hpZnQ9MTYqYi5udW1UYWJsZXMtYi5zZWFyY2hSYW5nZTtmb3IodmFyIGQ9W10sZT1bXSxmPWIuc2l6ZU9mKCkrb2IoKS5zaXplT2YoKSpiLm51bVRhYmxlcztmJTQhPTA7KWYrPTEsZS5wdXNoKHtuYW1lOlwicGFkZGluZ1wiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0pO2Zvcih2YXIgZz0wO2c8YS5sZW5ndGg7Zys9MSl7dmFyIGg9YVtnXTt4ZS5hcmd1bWVudCg0PT09aC50YWJsZU5hbWUubGVuZ3RoLFwiVGFibGUgbmFtZVwiK2gudGFibGVOYW1lK1wiIGlzIGludmFsaWQuXCIpO3ZhciBpPWguc2l6ZU9mKCksaj1vYihoLnRhYmxlTmFtZSxuYihoLmVuY29kZSgpKSxmLGkpO2ZvcihkLnB1c2goe25hbWU6ai50YWcrXCIgVGFibGUgUmVjb3JkXCIsdHlwZTpcIlJFQ09SRFwiLHZhbHVlOmp9KSxlLnB1c2goe25hbWU6aC50YWJsZU5hbWUrXCIgdGFibGVcIix0eXBlOlwiUkVDT1JEXCIsdmFsdWU6aH0pLGYrPWkseGUuYXJndW1lbnQoIWlzTmFOKGYpLFwiU29tZXRoaW5nIHdlbnQgd3JvbmcgY2FsY3VsYXRpbmcgdGhlIG9mZnNldC5cIik7ZiU0IT0wOylmKz0xLGUucHVzaCh7bmFtZTpcInBhZGRpbmdcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudmFsdWUudGFnPmIudmFsdWUudGFnPzE6LTF9KSxiLmZpZWxkcz1iLmZpZWxkcy5jb25jYXQoZCksYi5maWVsZHM9Yi5maWVsZHMuY29uY2F0KGUpLGJ9ZnVuY3Rpb24gcWIoYSxiLGMpe2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCs9MSl7dmFyIGU9YS5jaGFyVG9HbHlwaEluZGV4KGJbZF0pO2lmKGU+MCl7cmV0dXJuIGEuZ2x5cGhzLmdldChlKS5nZXRNZXRyaWNzKCl9fXJldHVybiBjfWZ1bmN0aW9uIHJiKGEpe2Zvcih2YXIgYj0wLGM9MDtjPGEubGVuZ3RoO2MrPTEpYis9YVtjXTtyZXR1cm4gYi9hLmxlbmd0aH1mdW5jdGlvbiBzYihhKXtmb3IodmFyIGIsYz1bXSxkPVtdLGU9W10sZj1bXSxnPVtdLGg9W10saT1bXSxqPTAsaz0wLGw9MCxtPTAsbj0wLG89MDtvPGEuZ2x5cGhzLmxlbmd0aDtvKz0xKXt2YXIgcD1hLmdseXBocy5nZXQobykscT0wfHAudW5pY29kZTtpZihpc05hTihwLmFkdmFuY2VXaWR0aCkpdGhyb3cgbmV3IEVycm9yKFwiR2x5cGggXCIrcC5uYW1lK1wiIChcIitvK1wiKTogYWR2YW5jZVdpZHRoIGlzIG5vdCBhIG51bWJlci5cIik7KGI+cXx8dm9pZCAwPT09YikmJnE+MCYmKGI9cSksajxxJiYoaj1xKTt2YXIgcj1qZi5nZXRVbmljb2RlUmFuZ2UocSk7aWYocjwzMilrfD0xPDxyO2Vsc2UgaWYocjw2NClsfD0xPDxyLTMyO2Vsc2UgaWYocjw5NiltfD0xPDxyLTY0O2Vsc2V7aWYoIShyPDEyMykpdGhyb3cgbmV3IEVycm9yKFwiVW5pY29kZSByYW5nZXMgYml0cyA+IDEyMyBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzYWdlXCIpO258PTE8PHItOTZ9aWYoXCIubm90ZGVmXCIhPT1wLm5hbWUpe3ZhciBzPXAuZ2V0TWV0cmljcygpO2MucHVzaChzLnhNaW4pLGQucHVzaChzLnlNaW4pLGUucHVzaChzLnhNYXgpLGYucHVzaChzLnlNYXgpLGgucHVzaChzLmxlZnRTaWRlQmVhcmluZyksaS5wdXNoKHMucmlnaHRTaWRlQmVhcmluZyksZy5wdXNoKHAuYWR2YW5jZVdpZHRoKX19dmFyIHQ9e3hNaW46TWF0aC5taW4uYXBwbHkobnVsbCxjKSx5TWluOk1hdGgubWluLmFwcGx5KG51bGwsZCkseE1heDpNYXRoLm1heC5hcHBseShudWxsLGUpLHlNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxmKSxhZHZhbmNlV2lkdGhNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxnKSxhZHZhbmNlV2lkdGhBdmc6cmIoZyksbWluTGVmdFNpZGVCZWFyaW5nOk1hdGgubWluLmFwcGx5KG51bGwsaCksbWF4TGVmdFNpZGVCZWFyaW5nOk1hdGgubWF4LmFwcGx5KG51bGwsaCksbWluUmlnaHRTaWRlQmVhcmluZzpNYXRoLm1pbi5hcHBseShudWxsLGkpfTt0LmFzY2VuZGVyPWEuYXNjZW5kZXIsdC5kZXNjZW5kZXI9YS5kZXNjZW5kZXI7dmFyIHU9V2UubWFrZSh7ZmxhZ3M6Myx1bml0c1BlckVtOmEudW5pdHNQZXJFbSx4TWluOnQueE1pbix5TWluOnQueU1pbix4TWF4OnQueE1heCx5TWF4OnQueU1heCxsb3dlc3RSZWNQUEVNOjMsY3JlYXRlZFRpbWVzdGFtcDphLmNyZWF0ZWRUaW1lc3RhbXB9KSx2PVhlLm1ha2Uoe2FzY2VuZGVyOnQuYXNjZW5kZXIsZGVzY2VuZGVyOnQuZGVzY2VuZGVyLGFkdmFuY2VXaWR0aE1heDp0LmFkdmFuY2VXaWR0aE1heCxtaW5MZWZ0U2lkZUJlYXJpbmc6dC5taW5MZWZ0U2lkZUJlYXJpbmcsbWluUmlnaHRTaWRlQmVhcmluZzp0Lm1pblJpZ2h0U2lkZUJlYXJpbmcseE1heEV4dGVudDp0Lm1heExlZnRTaWRlQmVhcmluZysodC54TWF4LXQueE1pbiksbnVtYmVyT2ZITWV0cmljczphLmdseXBocy5sZW5ndGh9KSx3PSRlLm1ha2UoYS5nbHlwaHMubGVuZ3RoKSx4PWpmLm1ha2Uoe3hBdmdDaGFyV2lkdGg6TWF0aC5yb3VuZCh0LmFkdmFuY2VXaWR0aEF2ZyksdXNXZWlnaHRDbGFzczphLnRhYmxlcy5vczIudXNXZWlnaHRDbGFzcyx1c1dpZHRoQ2xhc3M6YS50YWJsZXMub3MyLnVzV2lkdGhDbGFzcyx1c0ZpcnN0Q2hhckluZGV4OmIsdXNMYXN0Q2hhckluZGV4OmosdWxVbmljb2RlUmFuZ2UxOmssdWxVbmljb2RlUmFuZ2UyOmwsdWxVbmljb2RlUmFuZ2UzOm0sdWxVbmljb2RlUmFuZ2U0Om4sZnNTZWxlY3Rpb246YS50YWJsZXMub3MyLmZzU2VsZWN0aW9uLHNUeXBvQXNjZW5kZXI6dC5hc2NlbmRlcixzVHlwb0Rlc2NlbmRlcjp0LmRlc2NlbmRlcixzVHlwb0xpbmVHYXA6MCx1c1dpbkFzY2VudDp0LnlNYXgsdXNXaW5EZXNjZW50Ok1hdGguYWJzKHQueU1pbiksdWxDb2RlUGFnZVJhbmdlMToxLHN4SGVpZ2h0OnFiKGEsXCJ4eXZ3XCIse3lNYXg6TWF0aC5yb3VuZCh0LmFzY2VuZGVyLzIpfSkueU1heCxzQ2FwSGVpZ2h0OnFiKGEsXCJISUtMRUZKTU5UWkJEUFJBR09RU1VWV1hZXCIsdCkueU1heCx1c0RlZmF1bHRDaGFyOmEuaGFzQ2hhcihcIiBcIik/MzI6MCx1c0JyZWFrQ2hhcjphLmhhc0NoYXIoXCIgXCIpPzMyOjB9KSx5PVllLm1ha2UoYS5nbHlwaHMpLHo9TWUubWFrZShhLmdseXBocyksQT1hLmdldEVuZ2xpc2hOYW1lKFwiZm9udEZhbWlseVwiKSxCPWEuZ2V0RW5nbGlzaE5hbWUoXCJmb250U3ViZmFtaWx5XCIpLEM9QStcIiBcIitCLEQ9YS5nZXRFbmdsaXNoTmFtZShcInBvc3RTY3JpcHROYW1lXCIpO0R8fChEPUEucmVwbGFjZSgvXFxzL2csXCJcIikrXCItXCIrQik7dmFyIEU9e307Zm9yKHZhciBGIGluIGEubmFtZXMpRVtGXT1hLm5hbWVzW0ZdO0UudW5pcXVlSUR8fChFLnVuaXF1ZUlEPXtlbjphLmdldEVuZ2xpc2hOYW1lKFwibWFudWZhY3R1cmVyXCIpK1wiOlwiK0N9KSxFLnBvc3RTY3JpcHROYW1lfHwoRS5wb3N0U2NyaXB0TmFtZT17ZW46RH0pLEUucHJlZmVycmVkRmFtaWx5fHwoRS5wcmVmZXJyZWRGYW1pbHk9YS5uYW1lcy5mb250RmFtaWx5KSxFLnByZWZlcnJlZFN1YmZhbWlseXx8KEUucHJlZmVycmVkU3ViZmFtaWx5PWEubmFtZXMuZm9udFN1YmZhbWlseSk7dmFyIEc9W10sSD1nZi5tYWtlKEUsRyksST1HLmxlbmd0aD4wP1plLm1ha2UoRyk6dm9pZCAwLEo9a2YubWFrZSgpLEs9VmUubWFrZShhLmdseXBocyx7dmVyc2lvbjphLmdldEVuZ2xpc2hOYW1lKFwidmVyc2lvblwiKSxmdWxsTmFtZTpDLGZhbWlseU5hbWU6QSx3ZWlnaHROYW1lOkIscG9zdFNjcmlwdE5hbWU6RCx1bml0c1BlckVtOmEudW5pdHNQZXJFbSxmb250QkJveDpbMCx0LnlNaW4sdC5hc2NlbmRlcix0LmFkdmFuY2VXaWR0aE1heF19KSxMPWEubWV0YXMmJk9iamVjdC5rZXlzKGEubWV0YXMpLmxlbmd0aD4wP3BmLm1ha2UoYS5tZXRhcyk6dm9pZCAwLE09W3Usdix3LHgsSCx6LEosSyx5XTtJJiZNLnB1c2goSSksYS50YWJsZXMuZ3N1YiYmTS5wdXNoKG9mLm1ha2UoYS50YWJsZXMuZ3N1YikpLEwmJk0ucHVzaChMKTtmb3IodmFyIE49cGIoTSksTz1OLmVuY29kZSgpLFA9bmIoTyksUT1OLmZpZWxkcyxSPSExLFM9MDtTPFEubGVuZ3RoO1MrPTEpaWYoXCJoZWFkIHRhYmxlXCI9PT1RW1NdLm5hbWUpe1FbU10udmFsdWUuY2hlY2tTdW1BZGp1c3RtZW50PTI5ODExNDY1NTQtUCxSPSEwO2JyZWFrfWlmKCFSKXRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIGhlYWQgdGFibGUgd2l0aCBjaGVja1N1bSB0byBhZGp1c3QuXCIpO3JldHVybiBOfWZ1bmN0aW9uIHRiKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aC0xO2M8PWQ7KXt2YXIgZT1jK2Q+Pj4xLGY9YVtlXS50YWc7aWYoZj09PWIpcmV0dXJuIGU7ZjxiP2M9ZSsxOmQ9ZS0xfXJldHVybi1jLTF9ZnVuY3Rpb24gdWIoYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoLTE7Yzw9ZDspe3ZhciBlPWMrZD4+PjEsZj1hW2VdO2lmKGY9PT1iKXJldHVybiBlO2Y8Yj9jPWUrMTpkPWUtMX1yZXR1cm4tYy0xfWZ1bmN0aW9uIHZiKGEsYil7Zm9yKHZhciBjLGQ9MCxlPWEubGVuZ3RoLTE7ZDw9ZTspe3ZhciBmPWQrZT4+PjE7Yz1hW2ZdO3ZhciBnPWMuc3RhcnQ7aWYoZz09PWIpcmV0dXJuIGM7ZzxiP2Q9ZisxOmU9Zi0xfWlmKGQ+MClyZXR1cm4gYz1hW2QtMV0sYj5jLmVuZD8wOmN9ZnVuY3Rpb24gd2IoYSxiKXt0aGlzLmZvbnQ9YSx0aGlzLnRhYmxlTmFtZT1ifWZ1bmN0aW9uIHhiKGEpe3diLmNhbGwodGhpcyxhLFwiZ3Bvc1wiKX1mdW5jdGlvbiB5YihhKXt3Yi5jYWxsKHRoaXMsYSxcImdzdWJcIil9ZnVuY3Rpb24gemIoYSxiKXt2YXIgYz1hLmxlbmd0aDtpZihjIT09Yi5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBkPTA7ZDxjO2QrKylpZihhW2RdIT09YltkXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBBYihhLGIsYyl7Zm9yKHZhciBkPWEuc3VidGFibGVzLGU9MDtlPGQubGVuZ3RoO2UrKyl7dmFyIGY9ZFtlXTtpZihmLnN1YnN0Rm9ybWF0PT09YilyZXR1cm4gZn1pZihjKXJldHVybiBkLnB1c2goYyksY31mdW5jdGlvbiBCYigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3d9ZnVuY3Rpb24gQ2IoYSl7Zm9yKHZhciBiPW5ldyBBcnJheUJ1ZmZlcihhLmxlbmd0aCksYz1uZXcgVWludDhBcnJheShiKSxkPTA7ZDxhLmxlbmd0aDsrK2QpY1tkXT1hW2RdO3JldHVybiBifWZ1bmN0aW9uIERiKGEpe2Zvcih2YXIgYj1uZXcgZShhLmJ5dGVMZW5ndGgpLGM9bmV3IFVpbnQ4QXJyYXkoYSksZD0wO2Q8Yi5sZW5ndGg7KytkKWJbZF09Y1tkXTtyZXR1cm4gYn1mdW5jdGlvbiBFYihhLGIpe2lmKCFhKXRocm93IGJ9ZnVuY3Rpb24gRmIoYSxiLGMsZCxlKXt2YXIgZjtyZXR1cm4oYiZkKT4wPyhmPWEucGFyc2VCeXRlKCksMD09KGImZSkmJihmPS1mKSxmPWMrZik6Zj0oYiZlKT4wP2M6YythLnBhcnNlU2hvcnQoKSxmfWZ1bmN0aW9uIEdiKGEsYixjKXt2YXIgZD1uZXcgTGUuUGFyc2VyKGIsYyk7YS5udW1iZXJPZkNvbnRvdXJzPWQucGFyc2VTaG9ydCgpLGEuX3hNaW49ZC5wYXJzZVNob3J0KCksYS5feU1pbj1kLnBhcnNlU2hvcnQoKSxhLl94TWF4PWQucGFyc2VTaG9ydCgpLGEuX3lNYXg9ZC5wYXJzZVNob3J0KCk7dmFyIGUsZjtpZihhLm51bWJlck9mQ29udG91cnM+MCl7Zm9yKHZhciBnPWEuZW5kUG9pbnRJbmRpY2VzPVtdLGg9MDtoPGEubnVtYmVyT2ZDb250b3VycztoKz0xKWcucHVzaChkLnBhcnNlVVNob3J0KCkpO2EuaW5zdHJ1Y3Rpb25MZW5ndGg9ZC5wYXJzZVVTaG9ydCgpLGEuaW5zdHJ1Y3Rpb25zPVtdO2Zvcih2YXIgaT0wO2k8YS5pbnN0cnVjdGlvbkxlbmd0aDtpKz0xKWEuaW5zdHJ1Y3Rpb25zLnB1c2goZC5wYXJzZUJ5dGUoKSk7dmFyIGo9Z1tnLmxlbmd0aC0xXSsxO2U9W107Zm9yKHZhciBrPTA7azxqO2srPTEpaWYoZj1kLnBhcnNlQnl0ZSgpLGUucHVzaChmKSwoOCZmKT4wKWZvcih2YXIgbD1kLnBhcnNlQnl0ZSgpLG09MDttPGw7bSs9MSllLnB1c2goZiksays9MTtpZih4ZS5hcmd1bWVudChlLmxlbmd0aD09PWosXCJCYWQgZmxhZ3MuXCIpLGcubGVuZ3RoPjApe3ZhciBuLG89W107aWYoaj4wKXtmb3IodmFyIHA9MDtwPGo7cCs9MSlmPWVbcF0sbj17fSxuLm9uQ3VydmU9ISEoMSZmKSxuLmxhc3RQb2ludE9mQ29udG91cj1nLmluZGV4T2YocCk+PTAsby5wdXNoKG4pO2Zvcih2YXIgcT0wLHI9MDtyPGo7cis9MSlmPWVbcl0sbj1vW3JdLG4ueD1GYihkLGYscSwyLDE2KSxxPW4ueDtmb3IodmFyIHM9MCx0PTA7dDxqO3QrPTEpZj1lW3RdLG49b1t0XSxuLnk9RmIoZCxmLHMsNCwzMikscz1uLnl9YS5wb2ludHM9b31lbHNlIGEucG9pbnRzPVtdfWVsc2UgaWYoMD09PWEubnVtYmVyT2ZDb250b3VycylhLnBvaW50cz1bXTtlbHNle2EuaXNDb21wb3NpdGU9ITAsYS5wb2ludHM9W10sYS5jb21wb25lbnRzPVtdO2Zvcih2YXIgdT0hMDt1Oyl7ZT1kLnBhcnNlVVNob3J0KCk7dmFyIHY9e2dseXBoSW5kZXg6ZC5wYXJzZVVTaG9ydCgpLHhTY2FsZToxLHNjYWxlMDE6MCxzY2FsZTEwOjAseVNjYWxlOjEsZHg6MCxkeTowfTsoMSZlKT4wPygyJmUpPjA/KHYuZHg9ZC5wYXJzZVNob3J0KCksdi5keT1kLnBhcnNlU2hvcnQoKSk6di5tYXRjaGVkUG9pbnRzPVtkLnBhcnNlVVNob3J0KCksZC5wYXJzZVVTaG9ydCgpXTooMiZlKT4wPyh2LmR4PWQucGFyc2VDaGFyKCksdi5keT1kLnBhcnNlQ2hhcigpKTp2Lm1hdGNoZWRQb2ludHM9W2QucGFyc2VCeXRlKCksZC5wYXJzZUJ5dGUoKV0sKDgmZSk+MD92LnhTY2FsZT12LnlTY2FsZT1kLnBhcnNlRjJEb3QxNCgpOig2NCZlKT4wPyh2LnhTY2FsZT1kLnBhcnNlRjJEb3QxNCgpLHYueVNjYWxlPWQucGFyc2VGMkRvdDE0KCkpOigxMjgmZSk+MCYmKHYueFNjYWxlPWQucGFyc2VGMkRvdDE0KCksdi5zY2FsZTAxPWQucGFyc2VGMkRvdDE0KCksdi5zY2FsZTEwPWQucGFyc2VGMkRvdDE0KCksdi55U2NhbGU9ZC5wYXJzZUYyRG90MTQoKSksYS5jb21wb25lbnRzLnB1c2godiksdT0hISgzMiZlKX1pZigyNTYmZSl7YS5pbnN0cnVjdGlvbkxlbmd0aD1kLnBhcnNlVVNob3J0KCksYS5pbnN0cnVjdGlvbnM9W107Zm9yKHZhciB3PTA7dzxhLmluc3RydWN0aW9uTGVuZ3RoO3crPTEpYS5pbnN0cnVjdGlvbnMucHVzaChkLnBhcnNlQnl0ZSgpKX19fWZ1bmN0aW9uIEhiKGEsYil7Zm9yKHZhciBjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF0sZj17eDpiLnhTY2FsZSplLngrYi5zY2FsZTAxKmUueStiLmR4LHk6Yi5zY2FsZTEwKmUueCtiLnlTY2FsZSplLnkrYi5keSxvbkN1cnZlOmUub25DdXJ2ZSxsYXN0UG9pbnRPZkNvbnRvdXI6ZS5sYXN0UG9pbnRPZkNvbnRvdXJ9O2MucHVzaChmKX1yZXR1cm4gY31mdW5jdGlvbiBJYihhKXtmb3IodmFyIGI9W10sYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdO2MucHVzaChlKSxlLmxhc3RQb2ludE9mQ29udG91ciYmKGIucHVzaChjKSxjPVtdKX1yZXR1cm4geGUuYXJndW1lbnQoMD09PWMubGVuZ3RoLFwiVGhlcmUgYXJlIHN0aWxsIHBvaW50cyBsZWZ0IGluIHRoZSBjdXJyZW50IGNvbnRvdXIuXCIpLGJ9ZnVuY3Rpb24gSmIoYSl7dmFyIGI9bmV3IHI7aWYoIWEpcmV0dXJuIGI7Zm9yKHZhciBjPUliKGEpLGQ9MDtkPGMubGVuZ3RoOysrZCl7dmFyIGU9Y1tkXSxmPW51bGwsZz1lW2UubGVuZ3RoLTFdLGg9ZVswXTtpZihnLm9uQ3VydmUpYi5tb3ZlVG8oZy54LGcueSk7ZWxzZSBpZihoLm9uQ3VydmUpYi5tb3ZlVG8oaC54LGgueSk7ZWxzZXt2YXIgaT17eDouNSooZy54K2gueCkseTouNSooZy55K2gueSl9O2IubW92ZVRvKGkueCxpLnkpfWZvcih2YXIgaj0wO2o8ZS5sZW5ndGg7KytqKWlmKGY9ZyxnPWgsaD1lWyhqKzEpJWUubGVuZ3RoXSxnLm9uQ3VydmUpYi5saW5lVG8oZy54LGcueSk7ZWxzZXt2YXIgaz1oO2Yub25DdXJ2ZXx8e3g6LjUqKGcueCtmLngpLHk6LjUqKGcueStmLnkpfSxoLm9uQ3VydmV8fChrPXt4Oi41KihnLngraC54KSx5Oi41KihnLnkraC55KX0pLGIucXVhZHJhdGljQ3VydmVUbyhnLngsZy55LGsueCxrLnkpfWIuY2xvc2VQYXRoKCl9cmV0dXJuIGJ9ZnVuY3Rpb24gS2IoYSxiKXtpZihiLmlzQ29tcG9zaXRlKWZvcih2YXIgYz0wO2M8Yi5jb21wb25lbnRzLmxlbmd0aDtjKz0xKXt2YXIgZD1iLmNvbXBvbmVudHNbY10sZT1hLmdldChkLmdseXBoSW5kZXgpO2lmKGUuZ2V0UGF0aCgpLGUucG9pbnRzKXt2YXIgZj12b2lkIDA7aWYodm9pZCAwPT09ZC5tYXRjaGVkUG9pbnRzKWY9SGIoZS5wb2ludHMsZCk7ZWxzZXtcbmlmKGQubWF0Y2hlZFBvaW50c1swXT5iLnBvaW50cy5sZW5ndGgtMXx8ZC5tYXRjaGVkUG9pbnRzWzFdPmUucG9pbnRzLmxlbmd0aC0xKXRocm93IEVycm9yKFwiTWF0Y2hlZCBwb2ludHMgb3V0IG9mIHJhbmdlIGluIFwiK2IubmFtZSk7dmFyIGc9Yi5wb2ludHNbZC5tYXRjaGVkUG9pbnRzWzBdXSxoPWUucG9pbnRzW2QubWF0Y2hlZFBvaW50c1sxXV0saT17eFNjYWxlOmQueFNjYWxlLHNjYWxlMDE6ZC5zY2FsZTAxLHNjYWxlMTA6ZC5zY2FsZTEwLHlTY2FsZTpkLnlTY2FsZSxkeDowLGR5OjB9O2g9SGIoW2hdLGkpWzBdLGkuZHg9Zy54LWgueCxpLmR5PWcueS1oLnksZj1IYihlLnBvaW50cyxpKX1iLnBvaW50cz1iLnBvaW50cy5jb25jYXQoZil9fXJldHVybiBKYihiLnBvaW50cyl9ZnVuY3Rpb24gTGIoYSxiLGMsZCl7Zm9yKHZhciBlPW5ldyBTZS5HbHlwaFNldChkKSxmPTA7ZjxjLmxlbmd0aC0xO2YrPTEpe3ZhciBnPWNbZl07ZyE9PWNbZisxXT9lLnB1c2goZixTZS50dGZHbHlwaExvYWRlcihkLGYsR2IsYSxiK2csS2IpKTplLnB1c2goZixTZS5nbHlwaExvYWRlcihkLGYpKX1yZXR1cm4gZX1mdW5jdGlvbiBNYihhKXt0aGlzLmZvbnQ9YSx0aGlzLmdldENvbW1hbmRzPWZ1bmN0aW9uKGEpe3JldHVybiB2Zi5nZXRQYXRoKGEpLmNvbW1hbmRzfSx0aGlzLl9mcGdtU3RhdGU9dGhpcy5fcHJlcFN0YXRlPXZvaWQgMCx0aGlzLl9lcnJvclN0YXRlPTB9ZnVuY3Rpb24gTmIoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gT2IoYSl7cmV0dXJuIE1hdGguc2lnbihhKSpNYXRoLnJvdW5kKE1hdGguYWJzKGEpKX1mdW5jdGlvbiBQYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKk1hdGgucm91bmQoTWF0aC5hYnMoMiphKSkvMn1mdW5jdGlvbiBRYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKihNYXRoLnJvdW5kKE1hdGguYWJzKGEpKy41KS0uNSl9ZnVuY3Rpb24gUmIoYSl7cmV0dXJuIE1hdGguc2lnbihhKSpNYXRoLmNlaWwoTWF0aC5hYnMoYSkpfWZ1bmN0aW9uIFNiKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqTWF0aC5mbG9vcihNYXRoLmFicyhhKSl9ZnVuY3Rpb24gVGIoYSxiKXt0aGlzLng9YSx0aGlzLnk9Yix0aGlzLmF4aXM9dm9pZCAwLHRoaXMuc2xvcGU9Yi9hLHRoaXMubm9ybWFsU2xvcGU9LWEvYixPYmplY3QuZnJlZXplKHRoaXMpfWZ1bmN0aW9uIFViKGEsYil7dmFyIGM9TWF0aC5zcXJ0KGEqYStiKmIpO3JldHVybiBhLz1jLGIvPWMsMT09PWEmJjA9PT1iP3hmOjA9PT1hJiYxPT09Yj95ZjpuZXcgVGIoYSxiKX1mdW5jdGlvbiBWYihhLGIsYyxkKXt0aGlzLng9dGhpcy54bz1NYXRoLnJvdW5kKDY0KmEpLzY0LHRoaXMueT10aGlzLnlvPU1hdGgucm91bmQoNjQqYikvNjQsdGhpcy5sYXN0UG9pbnRPZkNvbnRvdXI9Yyx0aGlzLm9uQ3VydmU9ZCx0aGlzLnByZXZQb2ludE9uQ29udG91cj12b2lkIDAsdGhpcy5uZXh0UG9pbnRPbkNvbnRvdXI9dm9pZCAwLHRoaXMueFRvdWNoZWQ9ITEsdGhpcy55VG91Y2hlZD0hMSxPYmplY3QucHJldmVudEV4dGVuc2lvbnModGhpcyl9ZnVuY3Rpb24gV2IoYSxiKXtzd2l0Y2godGhpcy5lbnY9YSx0aGlzLnN0YWNrPVtdLHRoaXMucHJvZz1iLGEpe2Nhc2VcImdseWZcIjp0aGlzLnpwMD10aGlzLnpwMT10aGlzLnpwMj0xLHRoaXMucnAwPXRoaXMucnAxPXRoaXMucnAyPTA7Y2FzZVwicHJlcFwiOnRoaXMuZnY9dGhpcy5wdj10aGlzLmRwdj14Zix0aGlzLnJvdW5kPU9ifX1mdW5jdGlvbiBYYihhKXtmb3IodmFyIGI9YS50Wm9uZT1uZXcgQXJyYXkoYS5nWm9uZS5sZW5ndGgpLGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdPW5ldyBWYigwLDApfWZ1bmN0aW9uIFliKGEsYil7dmFyIGMsZD1hLnByb2csZT1hLmlwLGY9MTtkb3tpZig4OD09PShjPWRbKytlXSkpZisrO2Vsc2UgaWYoODk9PT1jKWYtLTtlbHNlIGlmKDY0PT09YyllKz1kW2UrMV0rMTtlbHNlIGlmKDY1PT09YyllKz0yKmRbZSsxXSsxO2Vsc2UgaWYoYz49MTc2JiZjPD0xODMpZSs9Yy0xNzYrMTtlbHNlIGlmKGM+PTE4NCYmYzw9MTkxKWUrPTIqKGMtMTg0KzEpO2Vsc2UgaWYoYiYmMT09PWYmJjI3PT09YylicmVha313aGlsZShmPjApO2EuaXA9ZX1mdW5jdGlvbiBaYihiLGMpe2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNWVENBW1wiK2IuYXhpcytcIl1cIiksYy5mdj1jLnB2PWMuZHB2PWJ9ZnVuY3Rpb24gJGIoYixjKXthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTUFZUQ0FbXCIrYi5heGlzK1wiXVwiKSxjLnB2PWMuZHB2PWJ9ZnVuY3Rpb24gX2IoYixjKXthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTRlZUQ0FbXCIrYi5heGlzK1wiXVwiKSxjLmZ2PWJ9ZnVuY3Rpb24gYWMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnoyW2VdLGg9Yy56MVtmXTthLkRFQlVHJiZjb25zb2xlLmxvZyhcIlNQVlRMW1wiK2IrXCJdXCIsZSxmKTt2YXIgaSxqO2I/KGk9Zy55LWgueSxqPWgueC1nLngpOihpPWgueC1nLngsaj1oLnktZy55KSxjLnB2PWMuZHB2PVViKGksail9ZnVuY3Rpb24gYmMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnoyW2VdLGg9Yy56MVtmXTthLkRFQlVHJiZjb25zb2xlLmxvZyhcIlNGVlRMW1wiK2IrXCJdXCIsZSxmKTt2YXIgaSxqO2I/KGk9Zy55LWgueSxqPWgueC1nLngpOihpPWgueC1nLngsaj1oLnktZy55KSxjLmZ2PVViKGksail9ZnVuY3Rpb24gY2MoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNQVkZTW11cIixkLGUpLGIucHY9Yi5kcHY9VWIoZSxkKX1mdW5jdGlvbiBkYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1BWRlNbXVwiLGQsZSksYi5mdj1VYihlLGQpfWZ1bmN0aW9uIGVjKGIpe3ZhciBjPWIuc3RhY2ssZD1iLnB2O2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdQVltdXCIpLGMucHVzaCgxNjM4NCpkLngpLGMucHVzaCgxNjM4NCpkLnkpfWZ1bmN0aW9uIGZjKGIpe3ZhciBjPWIuc3RhY2ssZD1iLmZ2O2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdGVltdXCIpLGMucHVzaCgxNjM4NCpkLngpLGMucHVzaCgxNjM4NCpkLnkpfWZ1bmN0aW9uIGdjKGIpe2IuZnY9Yi5wdixhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTRlZUUFZbXVwiKX1mdW5jdGlvbiBoYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCksZj1jLnBvcCgpLGc9Yy5wb3AoKSxoPWMucG9wKCksaT1iLnowLGo9Yi56MSxrPWlbZF0sbD1pW2VdLG09altmXSxuPWpbZ10sbz1iLnoyW2hdO2EuREVCVUcmJmNvbnNvbGUubG9nKFwiSVNFQ1RbXSwgXCIsZCxlLGYsZyxoKTt2YXIgcD1rLngscT1rLnkscj1sLngscz1sLnksdD1tLngsdT1tLnksdj1uLngsdz1uLnkseD0ocC1yKSoodS13KS0ocS1zKSoodC12KSx5PXAqcy1xKnIsej10KnctdSp2O28ueD0oeSoodC12KS16KihwLXIpKS94LG8ueT0oeSoodS13KS16KihxLXMpKS94fWZ1bmN0aW9uIGljKGIpe2IucnAwPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JQMFtdXCIsYi5ycDApfWZ1bmN0aW9uIGpjKGIpe2IucnAxPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JQMVtdXCIsYi5ycDEpfWZ1bmN0aW9uIGtjKGIpe2IucnAyPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JQMltdXCIsYi5ycDIpfWZ1bmN0aW9uIGxjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUDBbXVwiLGMpLGIuenAwPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejA9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56MD1iLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lIHBvaW50ZXJcIil9fWZ1bmN0aW9uIG1jKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUDFbXVwiLGMpLGIuenAxPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejE9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56MT1iLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lIHBvaW50ZXJcIil9fWZ1bmN0aW9uIG5jKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUDJbXVwiLGMpLGIuenAyPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejI9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56Mj1iLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lIHBvaW50ZXJcIil9fWZ1bmN0aW9uIG9jKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7c3dpdGNoKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNaUFNbXVwiLGMpLGIuenAwPWIuenAxPWIuenAyPWMsYyl7Y2FzZSAwOmIudFpvbmV8fFhiKGIpLGIuejA9Yi56MT1iLnoyPWIudFpvbmU7YnJlYWs7Y2FzZSAxOmIuejA9Yi56MT1iLnoyPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gcGMoYil7Yi5sb29wPWIuc3RhY2sucG9wKCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0xPT1BbXVwiLGIubG9vcCl9ZnVuY3Rpb24gcWMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlRHW11cIiksYi5yb3VuZD1PYn1mdW5jdGlvbiByYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSVEhHW11cIiksYi5yb3VuZD1RYn1mdW5jdGlvbiBzYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNNRFtdXCIsYyksYi5taW5EaXM9Yy82NH1mdW5jdGlvbiB0YyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFTFNFW11cIiksWWIoYiwhMSl9ZnVuY3Rpb24gdWMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJKTVBSW11cIixjKSxiLmlwKz1jLTF9ZnVuY3Rpb24gdmMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTQ1ZUQ0lbXVwiLGMpLGIuY3ZDdXRJbj1jLzY0fWZ1bmN0aW9uIHdjKGIpe3ZhciBjPWIuc3RhY2s7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRFVQW11cIiksYy5wdXNoKGNbYy5sZW5ndGgtMV0pfWZ1bmN0aW9uIHhjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlBPUFtdXCIpLGIuc3RhY2sucG9wKCl9ZnVuY3Rpb24geWMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQ0xFQVJbXVwiKSxiLnN0YWNrLmxlbmd0aD0wfWZ1bmN0aW9uIHpjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTV0FQW11cIiksYy5wdXNoKGQpLGMucHVzaChlKX1mdW5jdGlvbiBBYyhiKXt2YXIgYz1iLnN0YWNrO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkRFUFRIW11cIiksYy5wdXNoKGMubGVuZ3RoKX1mdW5jdGlvbiBCYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTE9PUENBTExbXVwiLGQsZSk7dmFyIGY9Yi5pcCxnPWIucHJvZztiLnByb2c9Yi5mdW5jc1tkXTtmb3IodmFyIGg9MDtoPGU7aCsrKXNmKGIpLGEuREVCVUcmJmNvbnNvbGUubG9nKCsrYi5zdGVwLGgrMTxlP1wibmV4dCBsb29wY2FsbFwiOlwiZG9uZSBsb29wY2FsbFwiLGgpO2IuaXA9ZixiLnByb2c9Z31mdW5jdGlvbiBDYyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkNBTExbXVwiLGMpO3ZhciBkPWIuaXAsZT1iLnByb2c7Yi5wcm9nPWIuZnVuY3NbY10sc2YoYiksYi5pcD1kLGIucHJvZz1lLGEuREVCVUcmJmNvbnNvbGUubG9nKCsrYi5zdGVwLFwicmV0dXJuaW5nIGZyb21cIixjKX1mdW5jdGlvbiBEYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJDSU5ERVhbXVwiLGQpLGMucHVzaChjW2MubGVuZ3RoLWRdKX1mdW5jdGlvbiBFYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNSU5ERVhbXVwiLGQpLGMucHVzaChjLnNwbGljZShjLmxlbmd0aC1kLDEpWzBdKX1mdW5jdGlvbiBGYyhiKXtpZihcImZwZ21cIiE9PWIuZW52KXRocm93IG5ldyBFcnJvcihcIkZERUYgbm90IGFsbG93ZWQgaGVyZVwiKTt2YXIgYz1iLnN0YWNrLGQ9Yi5wcm9nLGU9Yi5pcCxmPWMucG9wKCksZz1lO2ZvcihhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJGREVGW11cIixmKTs0NSE9PWRbKytlXTspO2IuaXA9ZSxiLmZ1bmNzW2ZdPWQuc2xpY2UoZysxLGUpfWZ1bmN0aW9uIEdjKGIsYyl7dmFyIGQ9Yy5zdGFjay5wb3AoKSxlPWMuejBbZF0sZj1jLmZ2LGc9Yy5wdjthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNREFQW1wiK2IrXCJdXCIsZCk7dmFyIGg9Zy5kaXN0YW5jZShlLHpmKTtiJiYoaD1jLnJvdW5kKGgpKSxmLnNldFJlbGF0aXZlKGUsemYsaCxnKSxmLnRvdWNoKGUpLGMucnAwPWMucnAxPWR9ZnVuY3Rpb24gSGMoYixjKXt2YXIgZCxlLGYsZz1jLnoyLGg9Zy5sZW5ndGgtMjthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJJVVBbXCIrYi5heGlzK1wiXVwiKTtmb3IodmFyIGk9MDtpPGg7aSsrKWQ9Z1tpXSxiLnRvdWNoZWQoZCl8fChlPWQucHJldlRvdWNoZWQoYikpIT09ZCYmKGY9ZC5uZXh0VG91Y2hlZChiKSxlPT09ZiYmYi5zZXRSZWxhdGl2ZShkLGQsYi5kaXN0YW5jZShlLGUsITEsITApLGIsITApLGIuaW50ZXJwb2xhdGUoZCxlLGYsYikpfWZ1bmN0aW9uIEljKGIsYyl7Zm9yKHZhciBkPWMuc3RhY2ssZT1iP2MucnAxOmMucnAyLGY9KGI/Yy56MDpjLnoxKVtlXSxnPWMuZnYsaD1jLnB2LGk9Yy5sb29wLGo9Yy56MjtpLS07KXt2YXIgaz1kLnBvcCgpLGw9altrXSxtPWguZGlzdGFuY2UoZixmLCExLCEwKTtnLnNldFJlbGF0aXZlKGwsbCxtLGgpLGcudG91Y2gobCksYS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLChjLmxvb3A+MT9cImxvb3AgXCIrKGMubG9vcC1pKStcIjogXCI6XCJcIikrXCJTSFBbXCIrKGI/XCJycDFcIjpcInJwMlwiKStcIl1cIixrKX1jLmxvb3A9MX1mdW5jdGlvbiBKYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1iP2MucnAxOmMucnAyLGY9KGI/Yy56MDpjLnoxKVtlXSxnPWMuZnYsaD1jLnB2LGk9ZC5wb3AoKSxqPWMuejJbYy5jb250b3Vyc1tpXV0saz1qO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNIQ1tcIitiK1wiXVwiLGkpO3ZhciBsPWguZGlzdGFuY2UoZixmLCExLCEwKTtkb3trIT09ZiYmZy5zZXRSZWxhdGl2ZShrLGssbCxoKSxrPWsubmV4dFBvaW50T25Db250b3VyfXdoaWxlKGshPT1qKX1mdW5jdGlvbiBLYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1iP2MucnAxOmMucnAyLGY9KGI/Yy56MDpjLnoxKVtlXSxnPWMuZnYsaD1jLnB2LGk9ZC5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJTSFpbXCIrYitcIl1cIixpKTt2YXIgajtzd2l0Y2goaSl7Y2FzZSAwOmo9Yy50Wm9uZTticmVhaztjYXNlIDE6aj1jLmdab25lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB6b25lXCIpfWZvcih2YXIgayxsPWguZGlzdGFuY2UoZixmLCExLCEwKSxtPWoubGVuZ3RoLTIsbj0wO248bTtuKyspaz1qW25dLGcuc2V0UmVsYXRpdmUoayxrLGwsaCl9ZnVuY3Rpb24gTGMoYil7Zm9yKHZhciBjPWIuc3RhY2ssZD1iLmxvb3AsZT1iLmZ2LGY9Yy5wb3AoKS82NCxnPWIuejI7ZC0tOyl7dmFyIGg9Yy5wb3AoKSxpPWdbaF07YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLChiLmxvb3A+MT9cImxvb3AgXCIrKGIubG9vcC1kKStcIjogXCI6XCJcIikrXCJTSFBJWFtdXCIsaCxmKSxlLnNldFJlbGF0aXZlKGksaSxmKSxlLnRvdWNoKGkpfWIubG9vcD0xfWZ1bmN0aW9uIE1jKGIpe2Zvcih2YXIgYz1iLnN0YWNrLGQ9Yi5ycDEsZT1iLnJwMixmPWIubG9vcCxnPWIuejBbZF0saD1iLnoxW2VdLGk9Yi5mdixqPWIuZHB2LGs9Yi56MjtmLS07KXt2YXIgbD1jLnBvcCgpLG09a1tsXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsKGIubG9vcD4xP1wibG9vcCBcIisoYi5sb29wLWYpK1wiOiBcIjpcIlwiKStcIklQW11cIixsLGQsXCI8LT5cIixlKSxpLmludGVycG9sYXRlKG0sZyxoLGopLGkudG91Y2gobSl9Yi5sb29wPTF9ZnVuY3Rpb24gTmMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKS82NCxmPWQucG9wKCksZz1jLnoxW2ZdLGg9Yy56MFtjLnJwMF0saT1jLmZ2LGo9Yy5wdjtpLnNldFJlbGF0aXZlKGcsaCxlLGopLGkudG91Y2goZyksYS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiTVNJUlBbXCIrYitcIl1cIixlLGYpLGMucnAxPWMucnAwLGMucnAyPWYsYiYmKGMucnAwPWYpfWZ1bmN0aW9uIE9jKGIpe2Zvcih2YXIgYz1iLnN0YWNrLGQ9Yi5ycDAsZT1iLnowW2RdLGY9Yi5sb29wLGc9Yi5mdixoPWIucHYsaT1iLnoxO2YtLTspe3ZhciBqPWMucG9wKCksaz1pW2pdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCwoYi5sb29wPjE/XCJsb29wIFwiKyhiLmxvb3AtZikrXCI6IFwiOlwiXCIpK1wiQUxJR05SUFtdXCIsaiksZy5zZXRSZWxhdGl2ZShrLGUsMCxoKSxnLnRvdWNoKGspfWIubG9vcD0xfWZ1bmN0aW9uIFBjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJUREdbXVwiKSxiLnJvdW5kPVBifWZ1bmN0aW9uIFFjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MFtmXSxoPWMuZnYsaT1jLnB2LGo9Yy5jdnRbZV07YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiTUlBUFtcIitiK1wiXVwiLGUsXCIoXCIsaixcIilcIixmKTt2YXIgaz1pLmRpc3RhbmNlKGcsemYpO2ImJihNYXRoLmFicyhrLWopPGMuY3ZDdXRJbiYmKGs9aiksaz1jLnJvdW5kKGspKSxoLnNldFJlbGF0aXZlKGcsemYsayxpKSwwPT09Yy56cDAmJihnLnhvPWcueCxnLnlvPWcueSksaC50b3VjaChnKSxjLnJwMD1jLnJwMT1mfWZ1bmN0aW9uIFJjKGIpe3ZhciBjPWIucHJvZyxkPWIuaXAsZT1iLnN0YWNrLGY9Y1srK2RdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5QVVNIQltdXCIsZik7Zm9yKHZhciBnPTA7ZzxmO2crKyllLnB1c2goY1srK2RdKTtiLmlwPWR9ZnVuY3Rpb24gU2MoYil7dmFyIGM9Yi5pcCxkPWIucHJvZyxlPWIuc3RhY2ssZj1kWysrY107YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTlBVU0hXW11cIixmKTtmb3IodmFyIGc9MDtnPGY7ZysrKXt2YXIgaD1kWysrY108PDh8ZFsrK2NdOzMyNzY4JmgmJihoPS0oMSsoNjU1MzVeaCkpKSxlLnB1c2goaCl9Yi5pcD1jfWZ1bmN0aW9uIFRjKGIpe3ZhciBjPWIuc3RhY2ssZD1iLnN0b3JlO2R8fChkPWIuc3RvcmU9W10pO3ZhciBlPWMucG9wKCksZj1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIldTXCIsZSxmKSxkW2ZdPWV9ZnVuY3Rpb24gVWMoYil7dmFyIGM9Yi5zdGFjayxkPWIuc3RvcmUsZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJTXCIsZSk7dmFyIGY9ZCYmZFtlXXx8MDtjLnB1c2goZil9ZnVuY3Rpb24gVmMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIldDVlRQXCIsZCxlKSxiLmN2dFtlXT1kLzY0fWZ1bmN0aW9uIFdjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJDVlRcIixkKSxjLnB1c2goNjQqYi5jdnRbZF0pfWZ1bmN0aW9uIFhjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1jLnoyW2VdO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIkdDW1wiK2IrXCJdXCIsZSksZC5wdXNoKDY0KmMuZHB2LmRpc3RhbmNlKGYsemYsYiwhMSkpfWZ1bmN0aW9uIFljKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MVtlXSxoPWMuejBbZl0saT1jLmRwdi5kaXN0YW5jZShoLGcsYixiKTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNRFtcIitiK1wiXVwiLGUsZixcIi0+XCIsaSksYy5zdGFjay5wdXNoKE1hdGgucm91bmQoNjQqaSkpfWZ1bmN0aW9uIFpjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk1QUEVNW11cIiksYi5zdGFjay5wdXNoKGIucHBlbSl9ZnVuY3Rpb24gJGMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRkxJUE9OW11cIiksYi5hdXRvRmxpcD0hMH1mdW5jdGlvbiBfYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTFRbXVwiLGQsZSksYy5wdXNoKGU8ZD8xOjApfWZ1bmN0aW9uIGFkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJMVEVRW11cIixkLGUpLGMucHVzaChlPD1kPzE6MCl9ZnVuY3Rpb24gYmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkdUW11cIixkLGUpLGMucHVzaChlPmQ/MTowKX1mdW5jdGlvbiBjZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR1RFUVtdXCIsZCxlKSxjLnB1c2goZT49ZD8xOjApfWZ1bmN0aW9uIGRkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFUVtdXCIsZCxlKSxjLnB1c2goZD09PWU/MTowKX1mdW5jdGlvbiBlZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTkVRW11cIixkLGUpLGMucHVzaChkIT09ZT8xOjApfWZ1bmN0aW9uIGZkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk9ERFtdXCIsZCksYy5wdXNoKE1hdGgudHJ1bmMoZCklMj8xOjApfWZ1bmN0aW9uIGdkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVWRU5bXVwiLGQpLGMucHVzaChNYXRoLnRydW5jKGQpJTI/MDoxKX1mdW5jdGlvbiBoZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIklGW11cIixjKSxjfHwoWWIoYiwhMCksYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRUlGW11cIikpfWZ1bmN0aW9uIGlkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVJRltdXCIpfWZ1bmN0aW9uIGpkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJBTkRbXVwiLGQsZSksYy5wdXNoKGQmJmU/MTowKX1mdW5jdGlvbiBrZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiT1JbXVwiLGQsZSksYy5wdXNoKGR8fGU/MTowKX1mdW5jdGlvbiBsZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJOT1RbXVwiLGQpLGMucHVzaChkPzA6MSl9ZnVuY3Rpb24gbWQoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWMuZnYsZz1jLnB2LGg9Yy5wcGVtLGk9Yy5kZWx0YUJhc2UrMTYqKGItMSksaj1jLmRlbHRhU2hpZnQsaz1jLnowO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIkRFTFRBUFtcIitiK1wiXVwiLGUsZCk7Zm9yKHZhciBsPTA7bDxlO2wrKyl7dmFyIG09ZC5wb3AoKSxuPWQucG9wKCk7aWYoaSsoKDI0MCZuKT4+NCk9PT1oKXt2YXIgbz0oMTUmbiktODtvPj0wJiZvKyssYS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFQRklYXCIsbSxcImJ5XCIsbypqKTt2YXIgcD1rW21dO2Yuc2V0UmVsYXRpdmUocCxwLG8qaixnKX19fWZ1bmN0aW9uIG5kKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNEQltdXCIsZCksYi5kZWx0YUJhc2U9ZH1mdW5jdGlvbiBvZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTRFNbXVwiLGQpLGIuZGVsdGFTaGlmdD1NYXRoLnBvdyguNSxkKX1mdW5jdGlvbiBwZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQUREW11cIixkLGUpLGMucHVzaChlK2QpfWZ1bmN0aW9uIHFkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTVUJbXVwiLGQsZSksYy5wdXNoKGUtZCl9ZnVuY3Rpb24gcmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkRJVltdXCIsZCxlKSxjLnB1c2goNjQqZS9kKX1mdW5jdGlvbiBzZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTVVMW11cIixkLGUpLGMucHVzaChlKmQvNjQpfWZ1bmN0aW9uIHRkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkFCU1tdXCIsZCksYy5wdXNoKE1hdGguYWJzKGQpKX1mdW5jdGlvbiB1ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJORUdbXVwiLGQpLGMucHVzaCgtZCl9ZnVuY3Rpb24gdmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRkxPT1JbXVwiLGQpLGMucHVzaCg2NCpNYXRoLmZsb29yKGQvNjQpKX1mdW5jdGlvbiB3ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJDRUlMSU5HW11cIixkKSxjLnB1c2goNjQqTWF0aC5jZWlsKGQvNjQpKX1mdW5jdGlvbiB4ZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlJPVU5EW11cIiksZC5wdXNoKDY0KmMucm91bmQoZS82NCkpfWZ1bmN0aW9uIHlkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJXQ1ZURltdXCIsZCxlKSxiLmN2dFtlXT1kKmIucHBlbS9iLmZvbnQudW5pdHNQZXJFbX1mdW5jdGlvbiB6ZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9Yy5wcGVtLGc9Yy5kZWx0YUJhc2UrMTYqKGItMSksaD1jLmRlbHRhU2hpZnQ7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFDW1wiK2IrXCJdXCIsZSxkKTtmb3IodmFyIGk9MDtpPGU7aSsrKXt2YXIgaj1kLnBvcCgpLGs9ZC5wb3AoKTtpZihnKygoMjQwJmspPj40KT09PWYpe3ZhciBsPSgxNSZrKS04O2w+PTAmJmwrKzt2YXIgbT1sKmg7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFDRklYXCIsaixcImJ5XCIsbSksYy5jdnRbal0rPW19fX1mdW5jdGlvbiBBZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNST1VORFtdXCIsYyksYi5yb3VuZD13Zjt2YXIgZDtzd2l0Y2goMTkyJmMpe2Nhc2UgMDpkPS41O2JyZWFrO2Nhc2UgNjQ6ZD0xO2JyZWFrO2Nhc2UgMTI4OmQ9MjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgU1JPVU5EIHZhbHVlXCIpfXN3aXRjaChiLnNyUGVyaW9kPWQsNDgmYyl7Y2FzZSAwOmIuc3JQaGFzZT0wO2JyZWFrO2Nhc2UgMTY6Yi5zclBoYXNlPS4yNSpkO2JyZWFrO2Nhc2UgMzI6Yi5zclBoYXNlPS41KmQ7YnJlYWs7Y2FzZSA0ODpiLnNyUGhhc2U9Ljc1KmQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFNST1VORCB2YWx1ZVwiKX1jJj0xNSxiLnNyVGhyZXNob2xkPTA9PT1jPzA6KGMvOC0uNSkqZH1mdW5jdGlvbiBCZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlM0NVJPVU5EW11cIixjKSxiLnJvdW5kPXdmO3ZhciBkO3N3aXRjaCgxOTImYyl7Y2FzZSAwOmQ9TWF0aC5zcXJ0KDIpLzI7YnJlYWs7Y2FzZSA2NDpkPU1hdGguc3FydCgyKTticmVhaztjYXNlIDEyODpkPTIqTWF0aC5zcXJ0KDIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBTNDVST1VORCB2YWx1ZVwiKX1zd2l0Y2goYi5zclBlcmlvZD1kLDQ4JmMpe2Nhc2UgMDpiLnNyUGhhc2U9MDticmVhaztjYXNlIDE2OmIuc3JQaGFzZT0uMjUqZDticmVhaztjYXNlIDMyOmIuc3JQaGFzZT0uNSpkO2JyZWFrO2Nhc2UgNDg6Yi5zclBoYXNlPS43NSpkO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBTNDVST1VORCB2YWx1ZVwiKX1jJj0xNSxiLnNyVGhyZXNob2xkPTA9PT1jPzA6KGMvOC0uNSkqZH1mdW5jdGlvbiBDZChiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJST0ZGW11cIiksYi5yb3VuZD1OYn1mdW5jdGlvbiBEZChiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSVVRHW11cIiksYi5yb3VuZD1SYn1mdW5jdGlvbiBFZChiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSRFRHW11cIiksYi5yb3VuZD1TYn1mdW5jdGlvbiBGZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNDQU5DVFJMW11cIixjKX1mdW5jdGlvbiBHZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejJbZV0saD1jLnoxW2ZdO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNEUFZUTFtcIitiK1wiXVwiLGUsZik7dmFyIGksajtiPyhpPWcueS1oLnksaj1oLngtZy54KTooaT1oLngtZy54LGo9aC55LWcueSksYy5kcHY9VWIoaSxqKX1mdW5jdGlvbiBIZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPTA7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR0VUSU5GT1tdXCIsZCksMSZkJiYoZT0zNSksMzImZCYmKGV8PTQwOTYpLGMucHVzaChlKX1mdW5jdGlvbiBJZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCksZj1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJPTExbXVwiKSxjLnB1c2goZSksYy5wdXNoKGQpLGMucHVzaChmKX1mdW5jdGlvbiBKZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTUFYW11cIixkLGUpLGMucHVzaChNYXRoLm1heChlLGQpKX1mdW5jdGlvbiBLZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTUlOW11cIixkLGUpLGMucHVzaChNYXRoLm1pbihlLGQpKX1mdW5jdGlvbiBMZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNDQU5UWVBFW11cIixjKX1mdW5jdGlvbiBNZChiKXt2YXIgYz1iLnN0YWNrLnBvcCgpLGQ9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiSU5TVENUUkxbXVwiLGMsZCksYyl7Y2FzZSAxOnJldHVybiB2b2lkKGIuaW5oaWJpdEdyaWRGaXQ9ISFkKTtjYXNlIDI6cmV0dXJuIHZvaWQoYi5pZ25vcmVDdnQ9ISFkKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgSU5TVENUUkxbXSBzZWxlY3RvclwiKX19ZnVuY3Rpb24gTmQoYixjKXt2YXIgZD1jLnN0YWNrLGU9Yy5wcm9nLGY9Yy5pcDthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJQVVNIQltcIitiK1wiXVwiKTtmb3IodmFyIGc9MDtnPGI7ZysrKWQucHVzaChlWysrZl0pO2MuaXA9Zn1mdW5jdGlvbiBPZChiLGMpe3ZhciBkPWMuaXAsZT1jLnByb2csZj1jLnN0YWNrO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuaXAsXCJQVVNIV1tcIitiK1wiXVwiKTtmb3IodmFyIGc9MDtnPGI7ZysrKXt2YXIgaD1lWysrZF08PDh8ZVsrK2RdOzMyNzY4JmgmJihoPS0oMSsoNjU1MzVeaCkpKSxmLnB1c2goaCl9Yy5pcD1kfWZ1bmN0aW9uIFBkKGIsYyxkLGUsZixnKXt2YXIgaCxpLGosayxsPWcuc3RhY2ssbT1iJiZsLnBvcCgpLG49bC5wb3AoKSxvPWcucnAwLHA9Zy56MFtvXSxxPWcuejFbbl0scj1nLm1pbkRpcyxzPWcuZnYsdD1nLmRwdjtpPWg9dC5kaXN0YW5jZShxLHAsITAsITApLGo9aT49MD8xOi0xLGk9TWF0aC5hYnMoaSksYiYmKGs9Zy5jdnRbbV0sZSYmTWF0aC5hYnMoaS1rKTxnLmN2Q3V0SW4mJihpPWspKSxkJiZpPHImJihpPXIpLGUmJihpPWcucm91bmQoaSkpLHMuc2V0UmVsYXRpdmUocSxwLGoqaSx0KSxzLnRvdWNoKHEpLGEuREVCVUcmJmNvbnNvbGUubG9nKGcuc3RlcCwoYj9cIk1JUlBbXCI6XCJNRFJQW1wiKSsoYz9cIk1cIjpcIm1cIikrKGQ/XCI+XCI6XCJfXCIpKyhlP1wiUlwiOlwiX1wiKSsoMD09PWY/XCJHclwiOjE9PT1mP1wiQmxcIjoyPT09Zj9cIldoXCI6XCJcIikrXCJdXCIsYj9tK1wiKFwiK2cuY3Z0W21dK1wiLFwiK2srXCIpXCI6XCJcIixuLFwiKGQgPVwiLGgsXCItPlwiLGoqaSxcIilcIiksZy5ycDE9Zy5ycDAsZy5ycDI9bixjJiYoZy5ycDA9bil9ZnVuY3Rpb24gUWQoYSl7YT1hfHx7fSxhLmVtcHR5fHwoRWIoYS5mYW1pbHlOYW1lLFwiV2hlbiBjcmVhdGluZyBhIG5ldyBGb250IG9iamVjdCwgZmFtaWx5TmFtZSBpcyByZXF1aXJlZC5cIiksRWIoYS5zdHlsZU5hbWUsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBzdHlsZU5hbWUgaXMgcmVxdWlyZWQuXCIpLEViKGEudW5pdHNQZXJFbSxcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIHVuaXRzUGVyRW0gaXMgcmVxdWlyZWQuXCIpLEViKGEuYXNjZW5kZXIsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBhc2NlbmRlciBpcyByZXF1aXJlZC5cIiksRWIoYS5kZXNjZW5kZXIsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBkZXNjZW5kZXIgaXMgcmVxdWlyZWQuXCIpLEViKGEuZGVzY2VuZGVyPDAsXCJEZXNjZW5kZXIgc2hvdWxkIGJlIG5lZ2F0aXZlIChlLmcuIC01MTIpLlwiKSx0aGlzLm5hbWVzPXtmb250RmFtaWx5OntlbjphLmZhbWlseU5hbWV8fFwiIFwifSxmb250U3ViZmFtaWx5OntlbjphLnN0eWxlTmFtZXx8XCIgXCJ9LGZ1bGxOYW1lOntlbjphLmZ1bGxOYW1lfHxhLmZhbWlseU5hbWUrXCIgXCIrYS5zdHlsZU5hbWV9LHBvc3RTY3JpcHROYW1lOntlbjphLnBvc3RTY3JpcHROYW1lfHwoYS5mYW1pbHlOYW1lK2Euc3R5bGVOYW1lKS5yZXBsYWNlKC9cXHMvZyxcIlwiKX0sZGVzaWduZXI6e2VuOmEuZGVzaWduZXJ8fFwiIFwifSxkZXNpZ25lclVSTDp7ZW46YS5kZXNpZ25lclVSTHx8XCIgXCJ9LG1hbnVmYWN0dXJlcjp7ZW46YS5tYW51ZmFjdHVyZXJ8fFwiIFwifSxtYW51ZmFjdHVyZXJVUkw6e2VuOmEubWFudWZhY3R1cmVyVVJMfHxcIiBcIn0sbGljZW5zZTp7ZW46YS5saWNlbnNlfHxcIiBcIn0sbGljZW5zZVVSTDp7ZW46YS5saWNlbnNlVVJMfHxcIiBcIn0sdmVyc2lvbjp7ZW46YS52ZXJzaW9ufHxcIlZlcnNpb24gMC4xXCJ9LGRlc2NyaXB0aW9uOntlbjphLmRlc2NyaXB0aW9ufHxcIiBcIn0sY29weXJpZ2h0OntlbjphLmNvcHlyaWdodHx8XCIgXCJ9LHRyYWRlbWFyazp7ZW46YS50cmFkZW1hcmt8fFwiIFwifX0sdGhpcy51bml0c1BlckVtPWEudW5pdHNQZXJFbXx8MWUzLHRoaXMuYXNjZW5kZXI9YS5hc2NlbmRlcix0aGlzLmRlc2NlbmRlcj1hLmRlc2NlbmRlcix0aGlzLmNyZWF0ZWRUaW1lc3RhbXA9YS5jcmVhdGVkVGltZXN0YW1wLHRoaXMudGFibGVzPXtvczI6e3VzV2VpZ2h0Q2xhc3M6YS53ZWlnaHRDbGFzc3x8dGhpcy51c1dlaWdodENsYXNzZXMuTUVESVVNLHVzV2lkdGhDbGFzczphLndpZHRoQ2xhc3N8fHRoaXMudXNXaWR0aENsYXNzZXMuTUVESVVNLGZzU2VsZWN0aW9uOmEuZnNTZWxlY3Rpb258fHRoaXMuZnNTZWxlY3Rpb25WYWx1ZXMuUkVHVUxBUn19KSx0aGlzLnN1cHBvcnRlZD0hMCx0aGlzLmdseXBocz1uZXcgU2UuR2x5cGhTZXQodGhpcyxhLmdseXBoc3x8W10pLHRoaXMuZW5jb2Rpbmc9bmV3IFgodGhpcyksdGhpcy5wb3NpdGlvbj1uZXcgeGIodGhpcyksdGhpcy5zdWJzdGl0dXRpb249bmV3IHliKHRoaXMpLHRoaXMudGFibGVzPXRoaXMudGFibGVzfHx7fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImhpbnRpbmdcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hpbnRpbmc/dGhpcy5faGludGluZzpcInRydWV0eXBlXCI9PT10aGlzLm91dGxpbmVzRm9ybWF0P3RoaXMuX2hpbnRpbmc9bmV3IE1iKHRoaXMpOnZvaWQgMH19KX1mdW5jdGlvbiBSZChhLGIpe3ZhciBjPUpTT04uc3RyaW5naWZ5KGEpLGQ9MjU2O2Zvcih2YXIgZSBpbiBiKXt2YXIgZj1wYXJzZUludChlKTtpZihmJiYhKGY8MjU2KSl7aWYoSlNPTi5zdHJpbmdpZnkoYltlXSk9PT1jKXJldHVybiBmO2Q8PWYmJihkPWYrMSl9fXJldHVybiBiW2RdPWEsZH1mdW5jdGlvbiBTZChhLGIsYyl7dmFyIGQ9UmQoYi5uYW1lLGMpO3JldHVyblt7bmFtZTpcInRhZ19cIithLHR5cGU6XCJUQUdcIix2YWx1ZTpiLnRhZ30se25hbWU6XCJtaW5WYWx1ZV9cIithLHR5cGU6XCJGSVhFRFwiLHZhbHVlOmIubWluVmFsdWU8PDE2fSx7bmFtZTpcImRlZmF1bHRWYWx1ZV9cIithLHR5cGU6XCJGSVhFRFwiLHZhbHVlOmIuZGVmYXVsdFZhbHVlPDwxNn0se25hbWU6XCJtYXhWYWx1ZV9cIithLHR5cGU6XCJGSVhFRFwiLHZhbHVlOmIubWF4VmFsdWU8PDE2fSx7bmFtZTpcImZsYWdzX1wiK2EsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwibmFtZUlEX1wiK2EsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmR9XX1mdW5jdGlvbiBUZChhLGIsYyl7dmFyIGQ9e30sZT1uZXcgTGUuUGFyc2VyKGEsYik7cmV0dXJuIGQudGFnPWUucGFyc2VUYWcoKSxkLm1pblZhbHVlPWUucGFyc2VGaXhlZCgpLGQuZGVmYXVsdFZhbHVlPWUucGFyc2VGaXhlZCgpLGQubWF4VmFsdWU9ZS5wYXJzZUZpeGVkKCksZS5za2lwKFwidVNob3J0XCIsMSksZC5uYW1lPWNbZS5wYXJzZVVTaG9ydCgpXXx8e30sZH1mdW5jdGlvbiBVZChhLGIsYyxkKXtmb3IodmFyIGU9UmQoYi5uYW1lLGQpLGY9W3tuYW1lOlwibmFtZUlEX1wiK2EsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmV9LHtuYW1lOlwiZmxhZ3NfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dLGc9MDtnPGMubGVuZ3RoOysrZyl7dmFyIGg9Y1tnXS50YWc7Zi5wdXNoKHtuYW1lOlwiYXhpc19cIithK1wiIFwiK2gsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5jb29yZGluYXRlc1toXTw8MTZ9KX1yZXR1cm4gZn1mdW5jdGlvbiBWZChhLGIsYyxkKXt2YXIgZT17fSxmPW5ldyBMZS5QYXJzZXIoYSxiKTtlLm5hbWU9ZFtmLnBhcnNlVVNob3J0KCldfHx7fSxmLnNraXAoXCJ1U2hvcnRcIiwxKSxlLmNvb3JkaW5hdGVzPXt9O2Zvcih2YXIgZz0wO2c8Yy5sZW5ndGg7KytnKWUuY29vcmRpbmF0ZXNbY1tnXS50YWddPWYucGFyc2VGaXhlZCgpO3JldHVybiBlfWZ1bmN0aW9uIFdkKGEsYil7dmFyIGM9bmV3IEllLlRhYmxlKFwiZnZhclwiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJvZmZzZXRUb0RhdGFcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJjb3VudFNpemVQYWlyc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToyfSx7bmFtZTpcImF4aXNDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmF4ZXMubGVuZ3RofSx7bmFtZTpcImF4aXNTaXplXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjIwfSx7bmFtZTpcImluc3RhbmNlQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5pbnN0YW5jZXMubGVuZ3RofSx7bmFtZTpcImluc3RhbmNlU2l6ZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTo0KzQqYS5heGVzLmxlbmd0aH1dKTtjLm9mZnNldFRvRGF0YT1jLnNpemVPZigpO2Zvcih2YXIgZD0wO2Q8YS5heGVzLmxlbmd0aDtkKyspYy5maWVsZHM9Yy5maWVsZHMuY29uY2F0KFNkKGQsYS5heGVzW2RdLGIpKTtmb3IodmFyIGU9MDtlPGEuaW5zdGFuY2VzLmxlbmd0aDtlKyspYy5maWVsZHM9Yy5maWVsZHMuY29uY2F0KFVkKGUsYS5pbnN0YW5jZXNbZV0sYS5heGVzLGIpKTtyZXR1cm4gY31mdW5jdGlvbiBYZChhLGIsYyl7dmFyIGQ9bmV3IExlLlBhcnNlcihhLGIpLGU9ZC5wYXJzZVVMb25nKCk7eGUuYXJndW1lbnQoNjU1MzY9PT1lLFwiVW5zdXBwb3J0ZWQgZnZhciB0YWJsZSB2ZXJzaW9uLlwiKTt2YXIgZj1kLnBhcnNlT2Zmc2V0MTYoKTtkLnNraXAoXCJ1U2hvcnRcIiwxKTtmb3IodmFyIGc9ZC5wYXJzZVVTaG9ydCgpLGg9ZC5wYXJzZVVTaG9ydCgpLGk9ZC5wYXJzZVVTaG9ydCgpLGo9ZC5wYXJzZVVTaG9ydCgpLGs9W10sbD0wO2w8ZztsKyspay5wdXNoKFRkKGEsYitmK2wqaCxjKSk7Zm9yKHZhciBtPVtdLG49YitmK2cqaCxvPTA7bzxpO28rKyltLnB1c2goVmQoYSxuK28qaixrLGMpKTtyZXR1cm57YXhlczprLGluc3RhbmNlczptfX1mdW5jdGlvbiBZZChhLGIpe2I9Ynx8MDt2YXIgYz1uZXcgUShhLGIpLGQ9Yy5wYXJzZVZlcnNpb24oMSk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1kfHwxLjE9PT1kLFwiVW5zdXBwb3J0ZWQgR1BPUyB0YWJsZSB2ZXJzaW9uIFwiK2QpLDE9PT1kP3t2ZXJzaW9uOmQsc2NyaXB0czpjLnBhcnNlU2NyaXB0TGlzdCgpLGZlYXR1cmVzOmMucGFyc2VGZWF0dXJlTGlzdCgpLGxvb2t1cHM6Yy5wYXJzZUxvb2t1cExpc3QoRGYpfTp7dmVyc2lvbjpkLHNjcmlwdHM6Yy5wYXJzZVNjcmlwdExpc3QoKSxmZWF0dXJlczpjLnBhcnNlRmVhdHVyZUxpc3QoKSxsb29rdXBzOmMucGFyc2VMb29rdXBMaXN0KERmKSx2YXJpYXRpb25zOmMucGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3QoKX19ZnVuY3Rpb24gWmQoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcIkdQT1NcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwic2NyaXB0c1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5TY3JpcHRMaXN0KGEuc2NyaXB0cyl9LHtuYW1lOlwiZmVhdHVyZXNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuRmVhdHVyZUxpc3QoYS5mZWF0dXJlcyl9LHtuYW1lOlwibG9va3Vwc1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Mb29rdXBMaXN0KGEubG9va3VwcyxFZil9XSl9ZnVuY3Rpb24gJGQoYSl7dmFyIGI9e307YS5za2lwKFwidVNob3J0XCIpO3ZhciBjPWEucGFyc2VVU2hvcnQoKTt4ZS5hcmd1bWVudCgwPT09YyxcIlVuc3VwcG9ydGVkIGtlcm4gc3ViLXRhYmxlIHZlcnNpb24uXCIpLGEuc2tpcChcInVTaG9ydFwiLDIpO3ZhciBkPWEucGFyc2VVU2hvcnQoKTthLnNraXAoXCJ1U2hvcnRcIiwzKTtmb3IodmFyIGU9MDtlPGQ7ZSs9MSl7dmFyIGY9YS5wYXJzZVVTaG9ydCgpLGc9YS5wYXJzZVVTaG9ydCgpLGg9YS5wYXJzZVNob3J0KCk7YltmK1wiLFwiK2ddPWh9cmV0dXJuIGJ9ZnVuY3Rpb24gX2QoYSl7dmFyIGI9e307YS5za2lwKFwidVNob3J0XCIpLGEucGFyc2VVTG9uZygpPjEmJmNvbnNvbGUud2FybihcIk9ubHkgdGhlIGZpcnN0IGtlcm4gc3VidGFibGUgaXMgc3VwcG9ydGVkLlwiKSxhLnNraXAoXCJ1TG9uZ1wiKTt2YXIgYz1hLnBhcnNlVVNob3J0KCksZD0yNTUmYztpZihhLnNraXAoXCJ1U2hvcnRcIiksMD09PWQpe3ZhciBlPWEucGFyc2VVU2hvcnQoKTthLnNraXAoXCJ1U2hvcnRcIiwzKTtmb3IodmFyIGY9MDtmPGU7Zis9MSl7dmFyIGc9YS5wYXJzZVVTaG9ydCgpLGg9YS5wYXJzZVVTaG9ydCgpLGk9YS5wYXJzZVNob3J0KCk7YltnK1wiLFwiK2hdPWl9fXJldHVybiBifWZ1bmN0aW9uIGFlKGEsYil7dmFyIGM9bmV3IExlLlBhcnNlcihhLGIpLGQ9Yy5wYXJzZVVTaG9ydCgpO2lmKDA9PT1kKXJldHVybiAkZChjKTtpZigxPT09ZClyZXR1cm4gX2QoYyk7dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQga2VybiB0YWJsZSB2ZXJzaW9uIChcIitkK1wiKS5cIil9ZnVuY3Rpb24gYmUoYSxiLGMsZCl7Zm9yKHZhciBlPW5ldyBMZS5QYXJzZXIoYSxiKSxmPWQ/ZS5wYXJzZVVTaG9ydDplLnBhcnNlVUxvbmcsZz1bXSxoPTA7aDxjKzE7aCs9MSl7dmFyIGk9Zi5jYWxsKGUpO2QmJihpKj0yKSxnLnB1c2goaSl9cmV0dXJuIGd9ZnVuY3Rpb24gY2UoYSxjKXtiKFwiZnNcIikucmVhZEZpbGUoYSxmdW5jdGlvbihhLGIpe2lmKGEpcmV0dXJuIGMoYS5tZXNzYWdlKTtjKG51bGwsQ2IoYikpfSl9ZnVuY3Rpb24gZGUoYSxiKXt2YXIgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7Yy5vcGVuKFwiZ2V0XCIsYSwhMCksYy5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiLGMub25sb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIGMucmVzcG9uc2U/YihudWxsLGMucmVzcG9uc2UpOmIoXCJGb250IGNvdWxkIG5vdCBiZSBsb2FkZWQ6IFwiK2Muc3RhdHVzVGV4dCl9LGMub25lcnJvcj1mdW5jdGlvbigpe2IoXCJGb250IGNvdWxkIG5vdCBiZSBsb2FkZWRcIil9LGMuc2VuZCgpfWZ1bmN0aW9uIGVlKGEsYil7Zm9yKHZhciBjPVtdLGQ9MTIsZT0wO2U8YjtlKz0xKXt2YXIgZj1MZS5nZXRUYWcoYSxkKSxnPUxlLmdldFVMb25nKGEsZCs0KSxoPUxlLmdldFVMb25nKGEsZCs4KSxpPUxlLmdldFVMb25nKGEsZCsxMik7Yy5wdXNoKHt0YWc6ZixjaGVja3N1bTpnLG9mZnNldDpoLGxlbmd0aDppLGNvbXByZXNzaW9uOiExfSksZCs9MTZ9cmV0dXJuIGN9ZnVuY3Rpb24gZmUoYSxiKXtmb3IodmFyIGM9W10sZD00NCxlPTA7ZTxiO2UrPTEpe3ZhciBmPUxlLmdldFRhZyhhLGQpLGc9TGUuZ2V0VUxvbmcoYSxkKzQpLGg9TGUuZ2V0VUxvbmcoYSxkKzgpLGk9TGUuZ2V0VUxvbmcoYSxkKzEyKSxqPXZvaWQgMDtqPWg8aSYmXCJXT0ZGXCIsYy5wdXNoKHt0YWc6ZixvZmZzZXQ6Zyxjb21wcmVzc2lvbjpqLGNvbXByZXNzZWRMZW5ndGg6aCxsZW5ndGg6aX0pLGQrPTIwfXJldHVybiBjfWZ1bmN0aW9uIGdlKGEsYil7aWYoXCJXT0ZGXCI9PT1iLmNvbXByZXNzaW9uKXt2YXIgYz1uZXcgVWludDhBcnJheShhLmJ1ZmZlcixiLm9mZnNldCsyLGIuY29tcHJlc3NlZExlbmd0aC0yKSxkPW5ldyBVaW50OEFycmF5KGIubGVuZ3RoKTtpZih3ZShjLGQpLGQuYnl0ZUxlbmd0aCE9PWIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkRlY29tcHJlc3Npb24gZXJyb3I6IFwiK2IudGFnK1wiIGRlY29tcHJlc3NlZCBsZW5ndGggZG9lc24ndCBtYXRjaCByZWNvcmRlZCBsZW5ndGhcIik7cmV0dXJue2RhdGE6bmV3IERhdGFWaWV3KGQuYnVmZmVyLDApLG9mZnNldDowfX1yZXR1cm57ZGF0YTphLG9mZnNldDpiLm9mZnNldH19ZnVuY3Rpb24gaGUoYSl7dmFyIGIsYyxkLGU9bmV3IFFkKHtlbXB0eTohMH0pLGY9bmV3IERhdGFWaWV3KGEsMCksZz1bXSxoPUxlLmdldFRhZyhmLDApO2lmKGg9PT1TdHJpbmcuZnJvbUNoYXJDb2RlKDAsMSwwLDApfHxcInRydWVcIj09PWh8fFwidHlwMVwiPT09aCllLm91dGxpbmVzRm9ybWF0PVwidHJ1ZXR5cGVcIixkPUxlLmdldFVTaG9ydChmLDQpLGc9ZWUoZixkKTtlbHNlIGlmKFwiT1RUT1wiPT09aCllLm91dGxpbmVzRm9ybWF0PVwiY2ZmXCIsZD1MZS5nZXRVU2hvcnQoZiw0KSxnPWVlKGYsZCk7ZWxzZXtpZihcIndPRkZcIiE9PWgpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgT3BlblR5cGUgc2lnbmF0dXJlIFwiK2gpO3ZhciBpPUxlLmdldFRhZyhmLDQpO2lmKGk9PT1TdHJpbmcuZnJvbUNoYXJDb2RlKDAsMSwwLDApKWUub3V0bGluZXNGb3JtYXQ9XCJ0cnVldHlwZVwiO2Vsc2V7aWYoXCJPVFRPXCIhPT1pKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIE9wZW5UeXBlIGZsYXZvciBcIitoKTtlLm91dGxpbmVzRm9ybWF0PVwiY2ZmXCJ9ZD1MZS5nZXRVU2hvcnQoZiwxMiksZz1mZShmLGQpfWZvcih2YXIgaixrLGwsbSxuLG8scCxxLHIscyx0LHU9MDt1PGQ7dSs9MSl7dmFyIHY9Z1t1XSx3PXZvaWQgMDtzd2l0Y2godi50YWcpe2Nhc2VcImNtYXBcIjp3PWdlKGYsdiksZS50YWJsZXMuY21hcD1NZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUuZW5jb2Rpbmc9bmV3IFkoZS50YWJsZXMuY21hcCk7YnJlYWs7Y2FzZVwiY3Z0IFwiOnc9Z2UoZix2KSx0PW5ldyBMZS5QYXJzZXIody5kYXRhLHcub2Zmc2V0KSxlLnRhYmxlcy5jdnQ9dC5wYXJzZVNob3J0TGlzdCh2Lmxlbmd0aC8yKTticmVhaztjYXNlXCJmdmFyXCI6az12O2JyZWFrO2Nhc2VcImZwZ21cIjp3PWdlKGYsdiksdD1uZXcgTGUuUGFyc2VyKHcuZGF0YSx3Lm9mZnNldCksZS50YWJsZXMuZnBnbT10LnBhcnNlQnl0ZUxpc3Qodi5sZW5ndGgpO2JyZWFrO2Nhc2VcImhlYWRcIjp3PWdlKGYsdiksZS50YWJsZXMuaGVhZD1XZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUudW5pdHNQZXJFbT1lLnRhYmxlcy5oZWFkLnVuaXRzUGVyRW0sYj1lLnRhYmxlcy5oZWFkLmluZGV4VG9Mb2NGb3JtYXQ7YnJlYWs7Y2FzZVwiaGhlYVwiOnc9Z2UoZix2KSxlLnRhYmxlcy5oaGVhPVhlLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS5hc2NlbmRlcj1lLnRhYmxlcy5oaGVhLmFzY2VuZGVyLGUuZGVzY2VuZGVyPWUudGFibGVzLmhoZWEuZGVzY2VuZGVyLGUubnVtYmVyT2ZITWV0cmljcz1lLnRhYmxlcy5oaGVhLm51bWJlck9mSE1ldHJpY3M7YnJlYWs7Y2FzZVwiaG10eFwiOm89djticmVhaztjYXNlXCJsdGFnXCI6dz1nZShmLHYpLGM9WmUucGFyc2Uody5kYXRhLHcub2Zmc2V0KTticmVhaztjYXNlXCJtYXhwXCI6dz1nZShmLHYpLGUudGFibGVzLm1heHA9JGUucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLm51bUdseXBocz1lLnRhYmxlcy5tYXhwLm51bUdseXBoczticmVhaztjYXNlXCJuYW1lXCI6cj12O2JyZWFrO2Nhc2VcIk9TLzJcIjp3PWdlKGYsdiksZS50YWJsZXMub3MyPWpmLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCk7YnJlYWs7Y2FzZVwicG9zdFwiOnc9Z2UoZix2KSxlLnRhYmxlcy5wb3N0PWtmLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS5nbHlwaE5hbWVzPW5ldyAkKGUudGFibGVzLnBvc3QpO2JyZWFrO2Nhc2VcInByZXBcIjp3PWdlKGYsdiksdD1uZXcgTGUuUGFyc2VyKHcuZGF0YSx3Lm9mZnNldCksZS50YWJsZXMucHJlcD10LnBhcnNlQnl0ZUxpc3Qodi5sZW5ndGgpO2JyZWFrO2Nhc2VcImdseWZcIjpsPXY7YnJlYWs7Y2FzZVwibG9jYVwiOnE9djticmVhaztjYXNlXCJDRkYgXCI6aj12O2JyZWFrO2Nhc2VcImtlcm5cIjpwPXY7YnJlYWs7Y2FzZVwiR1BPU1wiOm09djticmVhaztjYXNlXCJHU1VCXCI6bj12O2JyZWFrO2Nhc2VcIm1ldGFcIjpzPXZ9fXZhciB4PWdlKGYscik7aWYoZS50YWJsZXMubmFtZT1nZi5wYXJzZSh4LmRhdGEseC5vZmZzZXQsYyksZS5uYW1lcz1lLnRhYmxlcy5uYW1lLGwmJnEpe3ZhciB5PTA9PT1iLHo9Z2UoZixxKSxBPUhmLnBhcnNlKHouZGF0YSx6Lm9mZnNldCxlLm51bUdseXBocyx5KSxCPWdlKGYsbCk7ZS5nbHlwaHM9dmYucGFyc2UoQi5kYXRhLEIub2Zmc2V0LEEsZSl9ZWxzZXtpZighail0aHJvdyBuZXcgRXJyb3IoXCJGb250IGRvZXNuJ3QgY29udGFpbiBUcnVlVHlwZSBvciBDRkYgb3V0bGluZXMuXCIpO3ZhciBDPWdlKGYsaik7VmUucGFyc2UoQy5kYXRhLEMub2Zmc2V0LGUpfXZhciBEPWdlKGYsbyk7aWYoWWUucGFyc2UoRC5kYXRhLEQub2Zmc2V0LGUubnVtYmVyT2ZITWV0cmljcyxlLm51bUdseXBocyxlLmdseXBocyksXyhlKSxwKXt2YXIgRT1nZShmLHApO2Uua2VybmluZ1BhaXJzPUdmLnBhcnNlKEUuZGF0YSxFLm9mZnNldCl9ZWxzZSBlLmtlcm5pbmdQYWlycz17fTtpZihtKXt2YXIgRj1nZShmLG0pO2UudGFibGVzLmdwb3M9RmYucGFyc2UoRi5kYXRhLEYub2Zmc2V0KSxlLnBvc2l0aW9uLmluaXQoKX1pZihuKXt2YXIgRz1nZShmLG4pO2UudGFibGVzLmdzdWI9b2YucGFyc2UoRy5kYXRhLEcub2Zmc2V0KX1pZihrKXt2YXIgSD1nZShmLGspO2UudGFibGVzLmZ2YXI9Q2YucGFyc2UoSC5kYXRhLEgub2Zmc2V0LGUubmFtZXMpfWlmKHMpe3ZhciBJPWdlKGYscyk7ZS50YWJsZXMubWV0YT1wZi5wYXJzZShJLmRhdGEsSS5vZmZzZXQpLGUubWV0YXM9ZS50YWJsZXMubWV0YX1yZXR1cm4gZX1mdW5jdGlvbiBpZShhLGIpeyhcInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93P2NlOmRlKShhLGZ1bmN0aW9uKGEsYyl7aWYoYSlyZXR1cm4gYihhKTt2YXIgZDt0cnl7ZD1oZShjKX1jYXRjaChhKXtyZXR1cm4gYihhLG51bGwpfXJldHVybiBiKG51bGwsZCl9KX1mdW5jdGlvbiBqZShhKXtyZXR1cm4gaGUoQ2IoYihcImZzXCIpLnJlYWRGaWxlU3luYyhhKSkpfVN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXR8fGZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oKXt0cnl7dmFyIGE9e30sYj1PYmplY3QuZGVmaW5lUHJvcGVydHksYz1iKGEsYSxhKSYmYn1jYXRjaChhKXt9cmV0dXJuIGN9KCksYj1mdW5jdGlvbihhKXtpZihudWxsPT10aGlzKXRocm93IFR5cGVFcnJvcigpO3ZhciBiPVN0cmluZyh0aGlzKSxjPWIubGVuZ3RoLGQ9YT9OdW1iZXIoYSk6MDtpZihkIT1kJiYoZD0wKSwhKGQ8MHx8ZD49Yykpe3ZhciBlLGY9Yi5jaGFyQ29kZUF0KGQpO3JldHVybiBmPj01NTI5NiYmZjw9NTYzMTkmJmM+ZCsxJiYoZT1iLmNoYXJDb2RlQXQoZCsxKSk+PTU2MzIwJiZlPD01NzM0Mz8xMDI0KihmLTU1Mjk2KStlLTU2MzIwKzY1NTM2OmZ9fTthP2EoU3RyaW5nLnByb3RvdHlwZSxcImNvZGVQb2ludEF0XCIse3ZhbHVlOmIsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6U3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdD1ifSgpO3ZhciBrZT0wLGxlPS0zLG1lPW5ldyBjLG5lPW5ldyBjLG9lPW5ldyBVaW50OEFycmF5KDMwKSxwZT1uZXcgVWludDE2QXJyYXkoMzApLHFlPW5ldyBVaW50OEFycmF5KDMwKSxyZT1uZXcgVWludDE2QXJyYXkoMzApLHNlPW5ldyBVaW50OEFycmF5KFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSksdGU9bmV3IGMsdWU9bmV3IFVpbnQ4QXJyYXkoMzIwKSx2ZT1uZXcgVWludDE2QXJyYXkoMTYpO2cobWUsbmUpLGYob2UscGUsNCwzKSxmKHFlLHJlLDIsMSksb2VbMjhdPTAscGVbMjhdPTI1ODt2YXIgd2U9bztxLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGlzTmFOKHRoaXMueDEpfHxpc05hTih0aGlzLnkxKXx8aXNOYU4odGhpcy54Mil8fGlzTmFOKHRoaXMueTIpfSxxLnByb3RvdHlwZS5hZGRQb2ludD1mdW5jdGlvbihhLGIpe1wibnVtYmVyXCI9PXR5cGVvZiBhJiYoKGlzTmFOKHRoaXMueDEpfHxpc05hTih0aGlzLngyKSkmJih0aGlzLngxPWEsdGhpcy54Mj1hKSxhPHRoaXMueDEmJih0aGlzLngxPWEpLGE+dGhpcy54MiYmKHRoaXMueDI9YSkpLFwibnVtYmVyXCI9PXR5cGVvZiBiJiYoKGlzTmFOKHRoaXMueTEpfHxpc05hTih0aGlzLnkyKSkmJih0aGlzLnkxPWIsdGhpcy55Mj1iKSxiPHRoaXMueTEmJih0aGlzLnkxPWIpLGI+dGhpcy55MiYmKHRoaXMueTI9YikpfSxxLnByb3RvdHlwZS5hZGRYPWZ1bmN0aW9uKGEpe3RoaXMuYWRkUG9pbnQoYSxudWxsKX0scS5wcm90b3R5cGUuYWRkWT1mdW5jdGlvbihhKXt0aGlzLmFkZFBvaW50KG51bGwsYSl9LHEucHJvdG90eXBlLmFkZEJlemllcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3ZhciBpPXRoaXMsaj1bYSxiXSxrPVtjLGRdLGw9W2UsZl0sbT1bZyxoXTt0aGlzLmFkZFBvaW50KGEsYiksdGhpcy5hZGRQb2ludChnLGgpO2Zvcih2YXIgbj0wO248PTE7bisrKXt2YXIgbz02Kmpbbl0tMTIqa1tuXSs2Kmxbbl0scT0tMypqW25dKzkqa1tuXS05Kmxbbl0rMyptW25dLHI9MyprW25dLTMqaltuXTtpZigwIT09cSl7dmFyIHM9TWF0aC5wb3cobywyKS00KnIqcTtpZighKHM8MCkpe3ZhciB0PSgtbytNYXRoLnNxcnQocykpLygyKnEpOzA8dCYmdDwxJiYoMD09PW4mJmkuYWRkWChwKGpbbl0sa1tuXSxsW25dLG1bbl0sdCkpLDE9PT1uJiZpLmFkZFkocChqW25dLGtbbl0sbFtuXSxtW25dLHQpKSk7dmFyIHU9KC1vLU1hdGguc3FydChzKSkvKDIqcSk7MDx1JiZ1PDEmJigwPT09biYmaS5hZGRYKHAoaltuXSxrW25dLGxbbl0sbVtuXSx1KSksMT09PW4mJmkuYWRkWShwKGpbbl0sa1tuXSxsW25dLG1bbl0sdSkpKX19ZWxzZXtpZigwPT09byljb250aW51ZTt2YXIgdj0tci9vOzA8diYmdjwxJiYoMD09PW4mJmkuYWRkWChwKGpbbl0sa1tuXSxsW25dLG1bbl0sdikpLDE9PT1uJiZpLmFkZFkocChqW25dLGtbbl0sbFtuXSxtW25dLHYpKSl9fX0scS5wcm90b3R5cGUuYWRkUXVhZD1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9YSsyLzMqKGMtYSksaD1iKzIvMyooZC1iKSxpPWcrMS8zKihlLWEpLGo9aCsxLzMqKGYtYik7dGhpcy5hZGRCZXppZXIoYSxiLGcsaCxpLGosZSxmKX0sci5wcm90b3R5cGUubW92ZVRvPWZ1bmN0aW9uKGEsYil7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiTVwiLHg6YSx5OmJ9KX0sci5wcm90b3R5cGUubGluZVRvPWZ1bmN0aW9uKGEsYil7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiTFwiLHg6YSx5OmJ9KX0sci5wcm90b3R5cGUuY3VydmVUbz1yLnByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJDXCIseDE6YSx5MTpiLHgyOmMseTI6ZCx4OmUseTpmfSl9LHIucHJvdG90eXBlLnF1YWRUbz1yLnByb3RvdHlwZS5xdWFkcmF0aWNDdXJ2ZVRvPWZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIlFcIix4MTphLHkxOmIseDpjLHk6ZH0pfSxyLnByb3RvdHlwZS5jbG9zZT1yLnByb3RvdHlwZS5jbG9zZVBhdGg9ZnVuY3Rpb24oKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJaXCJ9KX0sci5wcm90b3R5cGUuZXh0ZW5kPWZ1bmN0aW9uKGEpe2lmKGEuY29tbWFuZHMpYT1hLmNvbW1hbmRzO2Vsc2UgaWYoYSBpbnN0YW5jZW9mIHEpe3ZhciBiPWE7cmV0dXJuIHRoaXMubW92ZVRvKGIueDEsYi55MSksdGhpcy5saW5lVG8oYi54MixiLnkxKSx0aGlzLmxpbmVUbyhiLngyLGIueTIpLHRoaXMubGluZVRvKGIueDEsYi55Miksdm9pZCB0aGlzLmNsb3NlKCl9QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5jb21tYW5kcyxhKX0sci5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3g9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcyxiPW5ldyBxLGM9MCxkPTAsZT0wLGY9MCxnPTA7Zzx0aGlzLmNvbW1hbmRzLmxlbmd0aDtnKyspe3ZhciBoPWEuY29tbWFuZHNbZ107c3dpdGNoKGgudHlwZSl7Y2FzZVwiTVwiOmIuYWRkUG9pbnQoaC54LGgueSksYz1lPWgueCxkPWY9aC55O2JyZWFrO2Nhc2VcIkxcIjpiLmFkZFBvaW50KGgueCxoLnkpLGU9aC54LGY9aC55O2JyZWFrO2Nhc2VcIlFcIjpiLmFkZFF1YWQoZSxmLGgueDEsaC55MSxoLngsaC55KSxlPWgueCxmPWgueTticmVhaztjYXNlXCJDXCI6Yi5hZGRCZXppZXIoZSxmLGgueDEsaC55MSxoLngyLGgueTIsaC54LGgueSksZT1oLngsZj1oLnk7YnJlYWs7Y2FzZVwiWlwiOmU9YyxmPWQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHBhdGggY29tbWFuZCBcIitoLnR5cGUpfX1yZXR1cm4gYi5pc0VtcHR5KCkmJmIuYWRkUG9pbnQoMCwwKSxifSxyLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7YS5iZWdpblBhdGgoKTtmb3IodmFyIGM9MDtjPHRoaXMuY29tbWFuZHMubGVuZ3RoO2MrPTEpe3ZhciBkPWIuY29tbWFuZHNbY107XCJNXCI9PT1kLnR5cGU/YS5tb3ZlVG8oZC54LGQueSk6XCJMXCI9PT1kLnR5cGU/YS5saW5lVG8oZC54LGQueSk6XCJDXCI9PT1kLnR5cGU/YS5iZXppZXJDdXJ2ZVRvKGQueDEsZC55MSxkLngyLGQueTIsZC54LGQueSk6XCJRXCI9PT1kLnR5cGU/YS5xdWFkcmF0aWNDdXJ2ZVRvKGQueDEsZC55MSxkLngsZC55KTpcIlpcIj09PWQudHlwZSYmYS5jbG9zZVBhdGgoKX10aGlzLmZpbGwmJihhLmZpbGxTdHlsZT10aGlzLmZpbGwsYS5maWxsKCkpLHRoaXMuc3Ryb2tlJiYoYS5zdHJva2VTdHlsZT10aGlzLnN0cm9rZSxhLmxpbmVXaWR0aD10aGlzLnN0cm9rZVdpZHRoLGEuc3Ryb2tlKCkpfSxyLnByb3RvdHlwZS50b1BhdGhEYXRhPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYil7cmV0dXJuIE1hdGgucm91bmQoYik9PT1iP1wiXCIrTWF0aC5yb3VuZChiKTpiLnRvRml4ZWQoYSl9ZnVuY3Rpb24gYygpe2Zvcih2YXIgYT1hcmd1bWVudHMsYz1cIlwiLGQ9MDtkPGFyZ3VtZW50cy5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXTtlPj0wJiZkPjAmJihjKz1cIiBcIiksYys9YihlKX1yZXR1cm4gY312YXIgZD10aGlzO2E9dm9pZCAwIT09YT9hOjI7Zm9yKHZhciBlPVwiXCIsZj0wO2Y8dGhpcy5jb21tYW5kcy5sZW5ndGg7Zis9MSl7dmFyIGc9ZC5jb21tYW5kc1tmXTtcIk1cIj09PWcudHlwZT9lKz1cIk1cIitjKGcueCxnLnkpOlwiTFwiPT09Zy50eXBlP2UrPVwiTFwiK2MoZy54LGcueSk6XCJDXCI9PT1nLnR5cGU/ZSs9XCJDXCIrYyhnLngxLGcueTEsZy54MixnLnkyLGcueCxnLnkpOlwiUVwiPT09Zy50eXBlP2UrPVwiUVwiK2MoZy54MSxnLnkxLGcueCxnLnkpOlwiWlwiPT09Zy50eXBlJiYoZSs9XCJaXCIpfXJldHVybiBlfSxyLnByb3RvdHlwZS50b1NWRz1mdW5jdGlvbihhKXt2YXIgYj0nPHBhdGggZD1cIic7cmV0dXJuIGIrPXRoaXMudG9QYXRoRGF0YShhKSxiKz0nXCInLHRoaXMuZmlsbCYmXCJibGFja1wiIT09dGhpcy5maWxsJiYobnVsbD09PXRoaXMuZmlsbD9iKz0nIGZpbGw9XCJub25lXCInOmIrPScgZmlsbD1cIicrdGhpcy5maWxsKydcIicpLHRoaXMuc3Ryb2tlJiYoYis9JyBzdHJva2U9XCInK3RoaXMuc3Ryb2tlKydcIiBzdHJva2Utd2lkdGg9XCInK3RoaXMuc3Ryb2tlV2lkdGgrJ1wiJyksYis9XCIvPlwifSxyLnByb3RvdHlwZS50b0RPTUVsZW1lbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy50b1BhdGhEYXRhKGEpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcInBhdGhcIik7cmV0dXJuIGMuc2V0QXR0cmlidXRlKFwiZFwiLGIpLGN9O3ZhciB4ZT17ZmFpbDpzLGFyZ3VtZW50OnQsYXNzZXJ0OnR9LHllPTMyNzY4LHplPTIxNDc0ODM2NDgsQWU9e30sQmU9e30sQ2U9e307QmUuQllURT1mdW5jdGlvbihhKXtyZXR1cm4geGUuYXJndW1lbnQoYT49MCYmYTw9MjU1LFwiQnl0ZSB2YWx1ZSBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAyNTUuXCIpLFthXX0sQ2UuQllURT11KDEpLEJlLkNIQVI9ZnVuY3Rpb24oYSl7cmV0dXJuW2EuY2hhckNvZGVBdCgwKV19LENlLkNIQVI9dSgxKSxCZS5DSEFSQVJSQVk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrPTEpYltjXT1hLmNoYXJDb2RlQXQoYyk7cmV0dXJuIGJ9LENlLkNIQVJBUlJBWT1mdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LEJlLlVTSE9SVD1mdW5jdGlvbihhKXtyZXR1cm5bYT4+OCYyNTUsMjU1JmFdfSxDZS5VU0hPUlQ9dSgyKSxCZS5TSE9SVD1mdW5jdGlvbihhKXtyZXR1cm4gYT49eWUmJihhPS0oMip5ZS1hKSksW2E+PjgmMjU1LDI1NSZhXX0sQ2UuU0hPUlQ9dSgyKSxCZS5VSU5UMjQ9ZnVuY3Rpb24oYSl7cmV0dXJuW2E+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLlVJTlQyND11KDMpLEJlLlVMT05HPWZ1bmN0aW9uKGEpe3JldHVyblthPj4yNCYyNTUsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuVUxPTkc9dSg0KSxCZS5MT05HPWZ1bmN0aW9uKGEpe3JldHVybiBhPj16ZSYmKGE9LSgyKnplLWEpKSxbYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLkxPTkc9dSg0KSxCZS5GSVhFRD1CZS5VTE9ORyxDZS5GSVhFRD1DZS5VTE9ORyxCZS5GV09SRD1CZS5TSE9SVCxDZS5GV09SRD1DZS5TSE9SVCxCZS5VRldPUkQ9QmUuVVNIT1JULENlLlVGV09SRD1DZS5VU0hPUlQsQmUuTE9OR0RBVEVUSU1FPWZ1bmN0aW9uKGEpe3JldHVyblswLDAsMCwwLGE+PjI0JjI1NSxhPj4xNiYyNTUsYT4+OCYyNTUsMjU1JmFdfSxDZS5MT05HREFURVRJTUU9dSg4KSxCZS5UQUc9ZnVuY3Rpb24oYSl7cmV0dXJuIHhlLmFyZ3VtZW50KDQ9PT1hLmxlbmd0aCxcIlRhZyBzaG91bGQgYmUgZXhhY3RseSA0IEFTQ0lJIGNoYXJhY3RlcnMuXCIpLFthLmNoYXJDb2RlQXQoMCksYS5jaGFyQ29kZUF0KDEpLGEuY2hhckNvZGVBdCgyKSxhLmNoYXJDb2RlQXQoMyldfSxDZS5UQUc9dSg0KSxCZS5DYXJkOD1CZS5CWVRFLENlLkNhcmQ4PUNlLkJZVEUsQmUuQ2FyZDE2PUJlLlVTSE9SVCxDZS5DYXJkMTY9Q2UuVVNIT1JULEJlLk9mZlNpemU9QmUuQllURSxDZS5PZmZTaXplPUNlLkJZVEUsQmUuU0lEPUJlLlVTSE9SVCxDZS5TSUQ9Q2UuVVNIT1JULEJlLk5VTUJFUj1mdW5jdGlvbihhKXtyZXR1cm4gYT49LTEwNyYmYTw9MTA3P1thKzEzOV06YT49MTA4JiZhPD0xMTMxPyhhLT0xMDgsWzI0NysoYT4+OCksMjU1JmFdKTphPj0tMTEzMSYmYTw9LTEwOD8oYT0tYS0xMDgsWzI1MSsoYT4+OCksMjU1JmFdKTphPj0tMzI3NjgmJmE8PTMyNzY3P0JlLk5VTUJFUjE2KGEpOkJlLk5VTUJFUjMyKGEpXG59LENlLk5VTUJFUj1mdW5jdGlvbihhKXtyZXR1cm4gQmUuTlVNQkVSKGEpLmxlbmd0aH0sQmUuTlVNQkVSMTY9ZnVuY3Rpb24oYSl7cmV0dXJuWzI4LGE+PjgmMjU1LDI1NSZhXX0sQ2UuTlVNQkVSMTY9dSgzKSxCZS5OVU1CRVIzMj1mdW5jdGlvbihhKXtyZXR1cm5bMjksYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLk5VTUJFUjMyPXUoNSksQmUuUkVBTD1mdW5jdGlvbihhKXt2YXIgYj1hLnRvU3RyaW5nKCksYz0vXFwuKFxcZCo/KSg/Ojl7NSwyMH18MHs1LDIwfSlcXGR7MCwyfSg/OmUoLispfCQpLy5leGVjKGIpO2lmKGMpe3ZhciBkPXBhcnNlRmxvYXQoXCIxZVwiKygoY1syXT8rY1syXTowKStjWzFdLmxlbmd0aCkpO2I9KE1hdGgucm91bmQoYSpkKS9kKS50b1N0cmluZygpfWZvcih2YXIgZT1cIlwiLGY9MCxnPWIubGVuZ3RoO2Y8ZztmKz0xKXt2YXIgaD1iW2ZdO2UrPVwiZVwiPT09aD9cIi1cIj09PWJbKytmXT9cImNcIjpcImJcIjpcIi5cIj09PWg/XCJhXCI6XCItXCI9PT1oP1wiZVwiOmh9ZSs9MSZlLmxlbmd0aD9cImZcIjpcImZmXCI7Zm9yKHZhciBpPVszMF0saj0wLGs9ZS5sZW5ndGg7ajxrO2orPTIpaS5wdXNoKHBhcnNlSW50KGUuc3Vic3RyKGosMiksMTYpKTtyZXR1cm4gaX0sQ2UuUkVBTD1mdW5jdGlvbihhKXtyZXR1cm4gQmUuUkVBTChhKS5sZW5ndGh9LEJlLk5BTUU9QmUuQ0hBUkFSUkFZLENlLk5BTUU9Q2UuQ0hBUkFSUkFZLEJlLlNUUklORz1CZS5DSEFSQVJSQVksQ2UuU1RSSU5HPUNlLkNIQVJBUlJBWSxBZS5VVEY4PWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9W10sZT1jLGY9MDtmPGU7ZisrLGIrPTEpZFtmXT1hLmdldFVpbnQ4KGIpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZCl9LEFlLlVURjE2PWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9W10sZT1jLzIsZj0wO2Y8ZTtmKyssYis9MilkW2ZdPWEuZ2V0VWludDE2KGIpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZCl9LEJlLlVURjE2PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hLmNoYXJDb2RlQXQoYyk7YltiLmxlbmd0aF09ZD4+OCYyNTUsYltiLmxlbmd0aF09MjU1JmR9cmV0dXJuIGJ9LENlLlVURjE2PWZ1bmN0aW9uKGEpe3JldHVybiAyKmEubGVuZ3RofTt2YXIgRGU9e1wieC1tYWMtY3JvYXRpYW5cIjpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsWg4oSiwrTCqOKJoMW9w5jiiJ7CseKJpOKJpeKIhsK14oiC4oiR4oiPxaHiiKvCqsK6zqnFvsO4wr/CocKs4oiaxpLiiYjEhsKrxIzigKbCoMOAw4PDlcWSxZPEkOKAlOKAnOKAneKAmOKAmcO34peK76O/wqnigYTigqzigLnigLrDhsK74oCTwrfigJrigJ7igLDDgsSHw4HEjcOIw43DjsOPw4zDk8OUxJHDksOaw5vDmcSxy4bLnMKvz4DDi8uawrjDisOmy4dcIixcIngtbWFjLWN5cmlsbGljXCI6XCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv4oCgwrDSkMKjwqfigKLCttCGwq7CqeKEotCC0ZLiiaDQg9GT4oiewrHiiaTiiaXRlsK10pHQiNCE0ZTQh9GX0InRmdCK0ZrRmNCFwqziiJrGkuKJiOKIhsKrwrvigKbCoNCL0ZvQjNGc0ZXigJPigJTigJzigJ3igJjigJnDt+KAntCO0Z7Qj9Gf4oSW0IHRkdGP0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y5cIixcIngtbWFjLWdhZWxpY1wiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOG4gsKx4omk4oml4biDxIrEi+G4iuG4i+G4nuG4n8SgxKHhuYDDpsO44bmB4bmW4bmXybzGksW/4bmgwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmeG5oeG6m8O/xbjhuarigqzigLnigLrFtsW34bmrwrfhu7Lhu7PigYrDgsOKw4HDi8OIw43DjsOPw4zDk8OU4pmjw5LDmsObw5nEscOdw73FtMW14bqE4bqF4bqA4bqB4bqC4bqDXCIsXCJ4LW1hYy1ncmVla1wiOlwiw4TCucKyw4nCs8OWw5zOhcOgw6LDpM6EwqjDp8Opw6jDqsOrwqPihKLDrsOv4oCiwr3igLDDtMO2wqbigqzDucO7w7zigKDOk86UzpjOm86ezqDDn8KuwqnOo86qwqfiiaDCsMK3zpHCseKJpOKJpcKlzpLOlc6WzpfOmc6azpzOps6rzqjOqc6szp3CrM6fzqHiiYjOpMKrwrvigKbCoM6lzqfOhs6IxZPigJPigJXigJzigJ3igJjigJnDt86JzorOjM6Ozq3Ors6vz4zOj8+NzrHOss+IzrTOtc+GzrPOt865zr7Ous67zrzOvc6/z4DPjs+Bz4PPhM64z4nPgs+Hz4XOts+Kz4vOkM6wwq1cIixcIngtbWFjLWljZWxhbmRpY1wiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvMOdwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK6zqnDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGE4oKsw5DDsMOew77DvcK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+jv8OSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiLFwieC1tYWMtaW51aXRcIjpcIuGQg+GQhOGQheGQhuGQiuGQi+GQseGQsuGQs+GQtOGQuOGQueGRieGRjuGRj+GRkOGRkeGRleGRluGRpuGRreGRruGRr+GRsOGRsuGRs+GSg+GSi+GSjOGSjeGSjuGSkOGSkcKw4ZKh4ZKl4ZKm4oCiwrbhkqfCrsKp4oSi4ZKo4ZKq4ZKr4ZK74ZOC4ZOD4ZOE4ZOF4ZOH4ZOI4ZOQ4ZOv4ZOw4ZOx4ZOy4ZO04ZO14ZSF4ZOV4ZOW4ZOX4ZOY4ZOa4ZOb4ZOq4ZSo4ZSp4ZSq4ZSr4ZSt4oCmwqDhlK7hlL7hlZXhlZbhlZfigJPigJTigJzigJ3igJjigJnhlZjhlZnhlZrhlZ3hlYbhlYfhlYjhlYnhlYvhlYzhlZDhlb/hloDhloHhloLhloPhloThloXhlo/hlpDhlpHhlpLhlpPhlpThlpXhmbHhmbLhmbPhmbThmbXhmbbhlpbhlqDhlqHhlqLhlqPhlqThlqXhlqbhlbzFgcWCXCIsXCJ4LW1hYy1jZVwiOlwiw4TEgMSBw4nEhMOWw5zDocSFxIzDpMSNxIbEh8OpxbnFusSOw63Ej8SSxJPElsOzxJfDtMO2w7XDusSaxJvDvOKAoMKwxJjCo8Kn4oCiwrbDn8KuwqnihKLEmcKo4omgxKPErsSvxKriiaTiiaXEq8S24oiC4oiRxYLEu8S8xL3EvsS5xLrFhcWGxYPCrOKImsWExYfiiIbCq8K74oCmwqDFiMWQw5XFkcWM4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rFjcWUxZXFmOKAueKAusWZxZbFl8Wg4oCa4oCexaHFmsWbw4HFpMWlw43FvcW+xarDk8OUxavFrsOaxa/FsMWxxbLFs8Odw73Et8W7xYHFvMSiy4dcIixtYWNpbnRvc2g6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK6zqnDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGE4oKs4oC54oC676yB76yC4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU76O/w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCIsXCJ4LW1hYy1yb21hbmlhblwiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgxILImOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCus6pxIPImcK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhOKCrOKAueKAusiayJvigKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvo7/DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIixcIngtbWFjLXR1cmtpc2hcIjpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrOqcOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjEnsSfxLDEscWexZ/igKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvo7/DksOaw5vDme+ioMuGy5zCr8uYy5nLmsK4y53Lm8uHXCJ9O0FlLk1BQ1NUUklORz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1EZVtkXTtpZih2b2lkIDAhPT1lKXtmb3IodmFyIGY9XCJcIixnPTA7ZzxjO2crKyl7dmFyIGg9YS5nZXRVaW50OChiK2cpO2YrPWg8PTEyNz9TdHJpbmcuZnJvbUNoYXJDb2RlKGgpOmVbMTI3JmhdfXJldHVybiBmfX07dmFyIEVlLEZlPVwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtNYXAmJm5ldyBXZWFrTWFwLEdlPWZ1bmN0aW9uKGEpe2lmKCFFZSl7RWU9e307Zm9yKHZhciBiIGluIERlKUVlW2JdPW5ldyBTdHJpbmcoYil9dmFyIGM9RWVbYV07aWYodm9pZCAwIT09Yyl7aWYoRmUpe3ZhciBkPUZlLmdldChjKTtpZih2b2lkIDAhPT1kKXJldHVybiBkfXZhciBlPURlW2FdO2lmKHZvaWQgMCE9PWUpe2Zvcih2YXIgZj17fSxnPTA7ZzxlLmxlbmd0aDtnKyspZltlLmNoYXJDb2RlQXQoZyldPWcrMTI4O3JldHVybiBGZSYmRmUuc2V0KGMsZiksZn19fTtCZS5NQUNTVFJJTkc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1HZShiKTtpZih2b2lkIDAhPT1jKXtmb3IodmFyIGQ9W10sZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNoYXJDb2RlQXQoZSk7aWYoZj49MTI4JiZ2b2lkIDA9PT0oZj1jW2ZdKSlyZXR1cm47ZFtlXT1mfXJldHVybiBkfX0sQ2UuTUFDU1RSSU5HPWZ1bmN0aW9uKGEsYil7dmFyIGM9QmUuTUFDU1RSSU5HKGEsYik7cmV0dXJuIHZvaWQgMCE9PWM/Yy5sZW5ndGg6MH0sQmUuVkFSREVMVEFTPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9W107YjxhLmxlbmd0aDspe3ZhciBkPWFbYl07Yj0wPT09ZD93KGEsYixjKTpkPj0tMTI4JiZkPD0xMjc/eChhLGIsYyk6eShhLGIsYyl9cmV0dXJuIGN9LEJlLklOREVYPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0xLGM9W2JdLGQ9W10sZT0wO2U8YS5sZW5ndGg7ZSs9MSl7dmFyIGY9QmUuT0JKRUNUKGFbZV0pO0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGQsZiksYis9Zi5sZW5ndGgsYy5wdXNoKGIpfWlmKDA9PT1kLmxlbmd0aClyZXR1cm5bMCwwXTtmb3IodmFyIGc9W10saD0xK01hdGguZmxvb3IoTWF0aC5sb2coYikvTWF0aC5sb2coMikpLzh8MCxpPVt2b2lkIDAsQmUuQllURSxCZS5VU0hPUlQsQmUuVUlOVDI0LEJlLlVMT05HXVtoXSxqPTA7ajxjLmxlbmd0aDtqKz0xKXt2YXIgaz1pKGNbal0pO0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGcsayl9cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQoQmUuQ2FyZDE2KGEubGVuZ3RoKSxCZS5PZmZTaXplKGgpLGcsZCl9LENlLklOREVYPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5JTkRFWChhKS5sZW5ndGh9LEJlLkRJQ1Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9T2JqZWN0LmtleXMoYSksZD1jLmxlbmd0aCxlPTA7ZTxkO2UrPTEpe3ZhciBmPXBhcnNlSW50KGNbZV0sMCksZz1hW2ZdO2I9Yi5jb25jYXQoQmUuT1BFUkFORChnLnZhbHVlLGcudHlwZSkpLGI9Yi5jb25jYXQoQmUuT1BFUkFUT1IoZikpfXJldHVybiBifSxDZS5ESUNUPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5ESUNUKGEpLmxlbmd0aH0sQmUuT1BFUkFUT1I9ZnVuY3Rpb24oYSl7cmV0dXJuIGE8MTIwMD9bYV06WzEyLGEtMTIwMF19LEJlLk9QRVJBTkQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtpZihBcnJheS5pc0FycmF5KGIpKWZvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCs9MSl4ZS5hcmd1bWVudChhLmxlbmd0aD09PWIubGVuZ3RoLFwiTm90IGVub3VnaCBhcmd1bWVudHMgZ2l2ZW4gZm9yIHR5cGVcIitiKSxjPWMuY29uY2F0KEJlLk9QRVJBTkQoYVtkXSxiW2RdKSk7ZWxzZSBpZihcIlNJRFwiPT09YiljPWMuY29uY2F0KEJlLk5VTUJFUihhKSk7ZWxzZSBpZihcIm9mZnNldFwiPT09YiljPWMuY29uY2F0KEJlLk5VTUJFUjMyKGEpKTtlbHNlIGlmKFwibnVtYmVyXCI9PT1iKWM9Yy5jb25jYXQoQmUuTlVNQkVSKGEpKTtlbHNle2lmKFwicmVhbFwiIT09Yil0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG9wZXJhbmQgdHlwZSBcIitiKTtjPWMuY29uY2F0KEJlLlJFQUwoYSkpfXJldHVybiBjfSxCZS5PUD1CZS5CWVRFLENlLk9QPUNlLkJZVEU7dmFyIEhlPVwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtNYXAmJm5ldyBXZWFrTWFwO0JlLkNIQVJTVFJJTkc9ZnVuY3Rpb24oYSl7aWYoSGUpe3ZhciBiPUhlLmdldChhKTtpZih2b2lkIDAhPT1iKXJldHVybiBifWZvcih2YXIgYz1bXSxkPWEubGVuZ3RoLGU9MDtlPGQ7ZSs9MSl7dmFyIGY9YVtlXTtjPWMuY29uY2F0KEJlW2YudHlwZV0oZi52YWx1ZSkpfXJldHVybiBIZSYmSGUuc2V0KGEsYyksY30sQ2UuQ0hBUlNUUklORz1mdW5jdGlvbihhKXtyZXR1cm4gQmUuQ0hBUlNUUklORyhhKS5sZW5ndGh9LEJlLk9CSkVDVD1mdW5jdGlvbihhKXt2YXIgYj1CZVthLnR5cGVdO3JldHVybiB4ZS5hcmd1bWVudCh2b2lkIDAhPT1iLFwiTm8gZW5jb2RpbmcgZnVuY3Rpb24gZm9yIHR5cGUgXCIrYS50eXBlKSxiKGEudmFsdWUpfSxDZS5PQkpFQ1Q9ZnVuY3Rpb24oYSl7dmFyIGI9Q2VbYS50eXBlXTtyZXR1cm4geGUuYXJndW1lbnQodm9pZCAwIT09YixcIk5vIHNpemVPZiBmdW5jdGlvbiBmb3IgdHlwZSBcIithLnR5cGUpLGIoYS52YWx1ZSl9LEJlLlRBQkxFPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPWEuZmllbGRzLmxlbmd0aCxkPVtdLGU9W10sZj0wO2Y8YztmKz0xKXt2YXIgZz1hLmZpZWxkc1tmXSxoPUJlW2cudHlwZV07eGUuYXJndW1lbnQodm9pZCAwIT09aCxcIk5vIGVuY29kaW5nIGZ1bmN0aW9uIGZvciBmaWVsZCB0eXBlIFwiK2cudHlwZStcIiAoXCIrZy5uYW1lK1wiKVwiKTt2YXIgaT1hW2cubmFtZV07dm9pZCAwPT09aSYmKGk9Zy52YWx1ZSk7dmFyIGo9aChpKTtcIlRBQkxFXCI9PT1nLnR5cGU/KGUucHVzaChiLmxlbmd0aCksYj1iLmNvbmNhdChbMCwwXSksZC5wdXNoKGopKTpiPWIuY29uY2F0KGopfWZvcih2YXIgaz0wO2s8ZC5sZW5ndGg7ays9MSl7dmFyIGw9ZVtrXSxtPWIubGVuZ3RoO3hlLmFyZ3VtZW50KG08NjU1MzYsXCJUYWJsZSBcIithLnRhYmxlTmFtZStcIiB0b28gYmlnLlwiKSxiW2xdPW0+PjgsYltsKzFdPTI1NSZtLGI9Yi5jb25jYXQoZFtrXSl9cmV0dXJuIGJ9LENlLlRBQkxFPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9YS5maWVsZHMubGVuZ3RoLGQ9MDtkPGM7ZCs9MSl7dmFyIGU9YS5maWVsZHNbZF0sZj1DZVtlLnR5cGVdO3hlLmFyZ3VtZW50KHZvaWQgMCE9PWYsXCJObyBzaXplT2YgZnVuY3Rpb24gZm9yIGZpZWxkIHR5cGUgXCIrZS50eXBlK1wiIChcIitlLm5hbWUrXCIpXCIpO3ZhciBnPWFbZS5uYW1lXTt2b2lkIDA9PT1nJiYoZz1lLnZhbHVlKSxiKz1mKGcpLFwiVEFCTEVcIj09PWUudHlwZSYmKGIrPTIpfXJldHVybiBifSxCZS5SRUNPUkQ9QmUuVEFCTEUsQ2UuUkVDT1JEPUNlLlRBQkxFLEJlLkxJVEVSQUw9ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LENlLkxJVEVSQUw9ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSx6LnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gQmUuVEFCTEUodGhpcyl9LHoucHJvdG90eXBlLnNpemVPZj1mdW5jdGlvbigpe3JldHVybiBDZS5UQUJMRSh0aGlzKX0sRC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6LnByb3RvdHlwZSksRC5wcm90b3R5cGUuY29uc3RydWN0b3I9RCxFLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHoucHJvdG90eXBlKSxFLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FLEYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoei5wcm90b3R5cGUpLEYucHJvdG90eXBlLmNvbnN0cnVjdG9yPUYsRy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6LnByb3RvdHlwZSksRy5wcm90b3R5cGUuY29uc3RydWN0b3I9Rzt2YXIgSWU9e1RhYmxlOnosUmVjb3JkOnosQ292ZXJhZ2U6RCxTY3JpcHRMaXN0OkUsRmVhdHVyZUxpc3Q6RixMb29rdXBMaXN0OkcsdXNob3J0TGlzdDpBLHRhYmxlTGlzdDpCLHJlY29yZExpc3Q6Q30sSmU9e2J5dGU6MSx1U2hvcnQ6MixzaG9ydDoyLHVMb25nOjQsZml4ZWQ6NCxsb25nRGF0ZVRpbWU6OCx0YWc6NH07US5wcm90b3R5cGUucGFyc2VCeXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldFVpbnQ4KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0xLGF9LFEucHJvdG90eXBlLnBhcnNlQ2hhcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YS5nZXRJbnQ4KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0xLGF9LFEucHJvdG90eXBlLnBhcnNlQ2FyZDg9US5wcm90b3R5cGUucGFyc2VCeXRlLFEucHJvdG90eXBlLnBhcnNlVVNob3J0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldFVpbnQxNih0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MixhfSxRLnByb3RvdHlwZS5wYXJzZUNhcmQxNj1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydCxRLnByb3RvdHlwZS5wYXJzZVNJRD1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydCxRLnByb3RvdHlwZS5wYXJzZU9mZnNldDE2PVEucHJvdG90eXBlLnBhcnNlVVNob3J0LFEucHJvdG90eXBlLnBhcnNlU2hvcnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0SW50MTYodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIsYX0sUS5wcm90b3R5cGUucGFyc2VGMkRvdDE0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldEludDE2KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpLzE2Mzg0O3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yLGF9LFEucHJvdG90eXBlLnBhcnNlVUxvbmc9ZnVuY3Rpb24oKXt2YXIgYT1LKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9NCxhfSxRLnByb3RvdHlwZS5wYXJzZU9mZnNldDMyPVEucHJvdG90eXBlLnBhcnNlVUxvbmcsUS5wcm90b3R5cGUucGFyc2VGaXhlZD1mdW5jdGlvbigpe3ZhciBhPUwodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz00LGF9LFEucHJvdG90eXBlLnBhcnNlU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZGF0YSxjPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZD1cIlwiO3RoaXMucmVsYXRpdmVPZmZzZXQrPWE7Zm9yKHZhciBlPTA7ZTxhO2UrKylkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGIuZ2V0VWludDgoYytlKSk7cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlVGFnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VTdHJpbmcoNCl9LFEucHJvdG90eXBlLnBhcnNlTG9uZ0RhdGVUaW1lPWZ1bmN0aW9uKCl7dmFyIGE9Syh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCs0KTtyZXR1cm4gYS09MjA4Mjg0NDgwMCx0aGlzLnJlbGF0aXZlT2Zmc2V0Kz04LGF9LFEucHJvdG90eXBlLnBhcnNlVmVyc2lvbj1mdW5jdGlvbihhKXt2YXIgYj1JKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KSxjPUkodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQrMik7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTQsdm9pZCAwPT09YSYmKGE9NDA5NiksYitjL2EvMTB9LFEucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oYSxiKXt2b2lkIDA9PT1iJiYoYj0xKSx0aGlzLnJlbGF0aXZlT2Zmc2V0Kz1KZVthXSpifSxRLnByb3RvdHlwZS5wYXJzZVVMb25nTGlzdD1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT10aGlzLnBhcnNlVUxvbmcoKSk7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldFVpbnQzMihkKSxkKz00O3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz00KmEsYn0sUS5wcm90b3R5cGUucGFyc2VPZmZzZXQxNkxpc3Q9US5wcm90b3R5cGUucGFyc2VVU2hvcnRMaXN0PWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMucGFyc2VVU2hvcnQoKSk7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldFVpbnQxNihkKSxkKz0yO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yKmEsYn0sUS5wcm90b3R5cGUucGFyc2VTaG9ydExpc3Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldEludDE2KGQpLGQrPTI7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIqYSxifSxRLnByb3RvdHlwZS5wYXJzZUJ5dGVMaXN0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1uZXcgQXJyYXkoYSksYz10aGlzLmRhdGEsZD10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGU9MDtlPGE7ZSsrKWJbZV09Yy5nZXRVaW50OChkKyspO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz1hLGJ9LFEucHJvdG90eXBlLnBhcnNlTGlzdD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Ynx8KGI9YSxhPXRoaXMucGFyc2VVU2hvcnQoKSk7Zm9yKHZhciBkPW5ldyBBcnJheShhKSxlPTA7ZTxhO2UrKylkW2VdPWIuY2FsbChjKTtyZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VMaXN0MzI9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2J8fChiPWEsYT10aGlzLnBhcnNlVUxvbmcoKSk7Zm9yKHZhciBkPW5ldyBBcnJheShhKSxlPTA7ZTxhO2UrKylkW2VdPWIuY2FsbChjKTtyZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VSZWNvcmRMaXN0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztifHwoYj1hLGE9dGhpcy5wYXJzZVVTaG9ydCgpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9T2JqZWN0LmtleXMoYiksZj0wO2Y8YTtmKyspe2Zvcih2YXIgZz17fSxoPTA7aDxlLmxlbmd0aDtoKyspe3ZhciBpPWVbaF0saj1iW2ldO2dbaV09ai5jYWxsKGMpfWRbZl09Z31yZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VSZWNvcmRMaXN0MzI9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2J8fChiPWEsYT10aGlzLnBhcnNlVUxvbmcoKSk7Zm9yKHZhciBkPW5ldyBBcnJheShhKSxlPU9iamVjdC5rZXlzKGIpLGY9MDtmPGE7ZisrKXtmb3IodmFyIGc9e30saD0wO2g8ZS5sZW5ndGg7aCsrKXt2YXIgaT1lW2hdLGo9YltpXTtnW2ldPWouY2FsbChjKX1kW2ZdPWd9cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlU3RydWN0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSlyZXR1cm4gYS5jYWxsKHRoaXMpO2Zvcih2YXIgYz1PYmplY3Qua2V5cyhhKSxkPXt9LGU9MDtlPGMubGVuZ3RoO2UrKyl7dmFyIGY9Y1tlXSxnPWFbZl07ZFtmXT1nLmNhbGwoYil9cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlVmFsdWVSZWNvcmQ9ZnVuY3Rpb24oYSl7aWYodm9pZCAwPT09YSYmKGE9dGhpcy5wYXJzZVVTaG9ydCgpKSwwIT09YSl7dmFyIGI9e307cmV0dXJuIDEmYSYmKGIueFBsYWNlbWVudD10aGlzLnBhcnNlU2hvcnQoKSksMiZhJiYoYi55UGxhY2VtZW50PXRoaXMucGFyc2VTaG9ydCgpKSw0JmEmJihiLnhBZHZhbmNlPXRoaXMucGFyc2VTaG9ydCgpKSw4JmEmJihiLnlBZHZhbmNlPXRoaXMucGFyc2VTaG9ydCgpKSwxNiZhJiYoYi54UGxhRGV2aWNlPXZvaWQgMCx0aGlzLnBhcnNlU2hvcnQoKSksMzImYSYmKGIueVBsYURldmljZT12b2lkIDAsdGhpcy5wYXJzZVNob3J0KCkpLDY0JmEmJihiLnhBZHZEZXZpY2U9dm9pZCAwLHRoaXMucGFyc2VTaG9ydCgpKSwxMjgmYSYmKGIueUFkdkRldmljZT12b2lkIDAsdGhpcy5wYXJzZVNob3J0KCkpLGJ9fSxRLnByb3RvdHlwZS5wYXJzZVZhbHVlUmVjb3JkTGlzdD1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLGI9dGhpcy5wYXJzZVVTaG9ydCgpLGM9dGhpcy5wYXJzZVVTaG9ydCgpLGQ9bmV3IEFycmF5KGMpLGU9MDtlPGM7ZSsrKWRbZV09YS5wYXJzZVZhbHVlUmVjb3JkKGIpO3JldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVBvaW50ZXI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wYXJzZU9mZnNldDE2KCk7aWYoYj4wKXJldHVybiBuZXcgUSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrYikucGFyc2VTdHJ1Y3QoYSl9LFEucHJvdG90eXBlLnBhcnNlUG9pbnRlcjMyPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucGFyc2VPZmZzZXQzMigpO2lmKGI+MClyZXR1cm4gbmV3IFEodGhpcy5kYXRhLHRoaXMub2Zmc2V0K2IpLnBhcnNlU3RydWN0KGEpfSxRLnByb3RvdHlwZS5wYXJzZUxpc3RPZkxpc3RzPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLGM9dGhpcy5wYXJzZU9mZnNldDE2TGlzdCgpLGQ9Yy5sZW5ndGgsZT10aGlzLnJlbGF0aXZlT2Zmc2V0LGY9bmV3IEFycmF5KGQpLGc9MDtnPGQ7ZysrKXt2YXIgaD1jW2ddO2lmKDAhPT1oKWlmKGIucmVsYXRpdmVPZmZzZXQ9aCxhKXtmb3IodmFyIGk9Yi5wYXJzZU9mZnNldDE2TGlzdCgpLGo9bmV3IEFycmF5KGkubGVuZ3RoKSxrPTA7azxpLmxlbmd0aDtrKyspYi5yZWxhdGl2ZU9mZnNldD1oK2lba10saltrXT1hLmNhbGwoYik7ZltnXT1qfWVsc2UgZltnXT1iLnBhcnNlVVNob3J0TGlzdCgpO2Vsc2UgZltnXT12b2lkIDB9cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQ9ZSxmfSxRLnByb3RvdHlwZS5wYXJzZUNvdmVyYWdlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYz10aGlzLnBhcnNlVVNob3J0KCksZD10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWMpcmV0dXJue2Zvcm1hdDoxLGdseXBoczp0aGlzLnBhcnNlVVNob3J0TGlzdChkKX07aWYoMj09PWMpe2Zvcih2YXIgZT1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspZVtmXT17c3RhcnQ6YS5wYXJzZVVTaG9ydCgpLGVuZDphLnBhcnNlVVNob3J0KCksaW5kZXg6YS5wYXJzZVVTaG9ydCgpfTtyZXR1cm57Zm9ybWF0OjIscmFuZ2VzOmV9fXRocm93IG5ldyBFcnJvcihcIjB4XCIrYi50b1N0cmluZygxNikrXCI6IENvdmVyYWdlIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIil9LFEucHJvdG90eXBlLnBhcnNlQ2xhc3NEZWY9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO2lmKDE9PT1iKXJldHVybntmb3JtYXQ6MSxzdGFydEdseXBoOnRoaXMucGFyc2VVU2hvcnQoKSxjbGFzc2VzOnRoaXMucGFyc2VVU2hvcnRMaXN0KCl9O2lmKDI9PT1iKXJldHVybntmb3JtYXQ6MixyYW5nZXM6dGhpcy5wYXJzZVJlY29yZExpc3Qoe3N0YXJ0OlEudVNob3J0LGVuZDpRLnVTaG9ydCxjbGFzc0lkOlEudVNob3J0fSl9O3Rocm93IG5ldyBFcnJvcihcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IENsYXNzRGVmIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIil9LFEubGlzdD1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlTGlzdChhLGIpfX0sUS5saXN0MzI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZUxpc3QzMihhLGIpfX0sUS5yZWNvcmRMaXN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VSZWNvcmRMaXN0KGEsYil9fSxRLnJlY29yZExpc3QzMj1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUmVjb3JkTGlzdDMyKGEsYil9fSxRLnBvaW50ZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyKGEpfX0sUS5wb2ludGVyMzI9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyMzIoYSl9fSxRLnRhZz1RLnByb3RvdHlwZS5wYXJzZVRhZyxRLmJ5dGU9US5wcm90b3R5cGUucGFyc2VCeXRlLFEudVNob3J0PVEub2Zmc2V0MTY9US5wcm90b3R5cGUucGFyc2VVU2hvcnQsUS51U2hvcnRMaXN0PVEucHJvdG90eXBlLnBhcnNlVVNob3J0TGlzdCxRLnVMb25nPVEub2Zmc2V0MzI9US5wcm90b3R5cGUucGFyc2VVTG9uZyxRLnVMb25nTGlzdD1RLnByb3RvdHlwZS5wYXJzZVVMb25nTGlzdCxRLnN0cnVjdD1RLnByb3RvdHlwZS5wYXJzZVN0cnVjdCxRLmNvdmVyYWdlPVEucHJvdG90eXBlLnBhcnNlQ292ZXJhZ2UsUS5jbGFzc0RlZj1RLnByb3RvdHlwZS5wYXJzZUNsYXNzRGVmO3ZhciBLZT17cmVzZXJ2ZWQ6US51U2hvcnQscmVxRmVhdHVyZUluZGV4OlEudVNob3J0LGZlYXR1cmVJbmRleGVzOlEudVNob3J0TGlzdH07US5wcm90b3R5cGUucGFyc2VTY3JpcHRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VQb2ludGVyKFEucmVjb3JkTGlzdCh7dGFnOlEudGFnLHNjcmlwdDpRLnBvaW50ZXIoe2RlZmF1bHRMYW5nU3lzOlEucG9pbnRlcihLZSksbGFuZ1N5c1JlY29yZHM6US5yZWNvcmRMaXN0KHt0YWc6US50YWcsbGFuZ1N5czpRLnBvaW50ZXIoS2UpfSl9KX0pKXx8W119LFEucHJvdG90eXBlLnBhcnNlRmVhdHVyZUxpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoUS5yZWNvcmRMaXN0KHt0YWc6US50YWcsZmVhdHVyZTpRLnBvaW50ZXIoe2ZlYXR1cmVQYXJhbXM6US5vZmZzZXQxNixsb29rdXBMaXN0SW5kZXhlczpRLnVTaG9ydExpc3R9KX0pKXx8W119LFEucHJvdG90eXBlLnBhcnNlTG9va3VwTGlzdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoUS5saXN0KFEucG9pbnRlcihmdW5jdGlvbigpe3ZhciBiPXRoaXMucGFyc2VVU2hvcnQoKTt4ZS5hcmd1bWVudCgxPD1iJiZiPD05LFwiR1BPUy9HU1VCIGxvb2t1cCB0eXBlIFwiK2IrXCIgdW5rbm93bi5cIik7dmFyIGM9dGhpcy5wYXJzZVVTaG9ydCgpLGQ9MTYmYztyZXR1cm57bG9va3VwVHlwZTpiLGxvb2t1cEZsYWc6YyxzdWJ0YWJsZXM6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKGFbYl0pKSxtYXJrRmlsdGVyaW5nU2V0OmQ/dGhpcy5wYXJzZVVTaG9ydCgpOnZvaWQgMH19KSkpfHxbXX0sUS5wcm90b3R5cGUucGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIzMihmdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKSxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWEmJmI8MSxcIkdQT1MvR1NVQiBmZWF0dXJlIHZhcmlhdGlvbnMgdGFibGUgdW5rbm93bi5cIiksdGhpcy5wYXJzZVJlY29yZExpc3QzMih7Y29uZGl0aW9uU2V0T2Zmc2V0OlEub2Zmc2V0MzIsZmVhdHVyZVRhYmxlU3Vic3RpdHV0aW9uT2Zmc2V0OlEub2Zmc2V0MzJ9KX0pfHxbXX07dmFyIExlPXtnZXRCeXRlOkgsZ2V0Q2FyZDg6SCxnZXRVU2hvcnQ6SSxnZXRDYXJkMTY6SSxnZXRTaG9ydDpKLGdldFVMb25nOkssZ2V0Rml4ZWQ6TCxnZXRUYWc6TSxnZXRPZmZzZXQ6TixnZXRCeXRlczpPLGJ5dGVzVG9TdHJpbmc6UCxQYXJzZXI6UX0sTWU9e3BhcnNlOlQsbWFrZTpXfSxOZT1bXCIubm90ZGVmXCIsXCJzcGFjZVwiLFwiZXhjbGFtXCIsXCJxdW90ZWRibFwiLFwibnVtYmVyc2lnblwiLFwiZG9sbGFyXCIsXCJwZXJjZW50XCIsXCJhbXBlcnNhbmRcIixcInF1b3RlcmlnaHRcIixcInBhcmVubGVmdFwiLFwicGFyZW5yaWdodFwiLFwiYXN0ZXJpc2tcIixcInBsdXNcIixcImNvbW1hXCIsXCJoeXBoZW5cIixcInBlcmlvZFwiLFwic2xhc2hcIixcInplcm9cIixcIm9uZVwiLFwidHdvXCIsXCJ0aHJlZVwiLFwiZm91clwiLFwiZml2ZVwiLFwic2l4XCIsXCJzZXZlblwiLFwiZWlnaHRcIixcIm5pbmVcIixcImNvbG9uXCIsXCJzZW1pY29sb25cIixcImxlc3NcIixcImVxdWFsXCIsXCJncmVhdGVyXCIsXCJxdWVzdGlvblwiLFwiYXRcIixcIkFcIixcIkJcIixcIkNcIixcIkRcIixcIkVcIixcIkZcIixcIkdcIixcIkhcIixcIklcIixcIkpcIixcIktcIixcIkxcIixcIk1cIixcIk5cIixcIk9cIixcIlBcIixcIlFcIixcIlJcIixcIlNcIixcIlRcIixcIlVcIixcIlZcIixcIldcIixcIlhcIixcIllcIixcIlpcIixcImJyYWNrZXRsZWZ0XCIsXCJiYWNrc2xhc2hcIixcImJyYWNrZXRyaWdodFwiLFwiYXNjaWljaXJjdW1cIixcInVuZGVyc2NvcmVcIixcInF1b3RlbGVmdFwiLFwiYVwiLFwiYlwiLFwiY1wiLFwiZFwiLFwiZVwiLFwiZlwiLFwiZ1wiLFwiaFwiLFwiaVwiLFwialwiLFwia1wiLFwibFwiLFwibVwiLFwiblwiLFwib1wiLFwicFwiLFwicVwiLFwiclwiLFwic1wiLFwidFwiLFwidVwiLFwidlwiLFwid1wiLFwieFwiLFwieVwiLFwielwiLFwiYnJhY2VsZWZ0XCIsXCJiYXJcIixcImJyYWNlcmlnaHRcIixcImFzY2lpdGlsZGVcIixcImV4Y2xhbWRvd25cIixcImNlbnRcIixcInN0ZXJsaW5nXCIsXCJmcmFjdGlvblwiLFwieWVuXCIsXCJmbG9yaW5cIixcInNlY3Rpb25cIixcImN1cnJlbmN5XCIsXCJxdW90ZXNpbmdsZVwiLFwicXVvdGVkYmxsZWZ0XCIsXCJndWlsbGVtb3RsZWZ0XCIsXCJndWlsc2luZ2xsZWZ0XCIsXCJndWlsc2luZ2xyaWdodFwiLFwiZmlcIixcImZsXCIsXCJlbmRhc2hcIixcImRhZ2dlclwiLFwiZGFnZ2VyZGJsXCIsXCJwZXJpb2RjZW50ZXJlZFwiLFwicGFyYWdyYXBoXCIsXCJidWxsZXRcIixcInF1b3Rlc2luZ2xiYXNlXCIsXCJxdW90ZWRibGJhc2VcIixcInF1b3RlZGJscmlnaHRcIixcImd1aWxsZW1vdHJpZ2h0XCIsXCJlbGxpcHNpc1wiLFwicGVydGhvdXNhbmRcIixcInF1ZXN0aW9uZG93blwiLFwiZ3JhdmVcIixcImFjdXRlXCIsXCJjaXJjdW1mbGV4XCIsXCJ0aWxkZVwiLFwibWFjcm9uXCIsXCJicmV2ZVwiLFwiZG90YWNjZW50XCIsXCJkaWVyZXNpc1wiLFwicmluZ1wiLFwiY2VkaWxsYVwiLFwiaHVuZ2FydW1sYXV0XCIsXCJvZ29uZWtcIixcImNhcm9uXCIsXCJlbWRhc2hcIixcIkFFXCIsXCJvcmRmZW1pbmluZVwiLFwiTHNsYXNoXCIsXCJPc2xhc2hcIixcIk9FXCIsXCJvcmRtYXNjdWxpbmVcIixcImFlXCIsXCJkb3RsZXNzaVwiLFwibHNsYXNoXCIsXCJvc2xhc2hcIixcIm9lXCIsXCJnZXJtYW5kYmxzXCIsXCJvbmVzdXBlcmlvclwiLFwibG9naWNhbG5vdFwiLFwibXVcIixcInRyYWRlbWFya1wiLFwiRXRoXCIsXCJvbmVoYWxmXCIsXCJwbHVzbWludXNcIixcIlRob3JuXCIsXCJvbmVxdWFydGVyXCIsXCJkaXZpZGVcIixcImJyb2tlbmJhclwiLFwiZGVncmVlXCIsXCJ0aG9yblwiLFwidGhyZWVxdWFydGVyc1wiLFwidHdvc3VwZXJpb3JcIixcInJlZ2lzdGVyZWRcIixcIm1pbnVzXCIsXCJldGhcIixcIm11bHRpcGx5XCIsXCJ0aHJlZXN1cGVyaW9yXCIsXCJjb3B5cmlnaHRcIixcIkFhY3V0ZVwiLFwiQWNpcmN1bWZsZXhcIixcIkFkaWVyZXNpc1wiLFwiQWdyYXZlXCIsXCJBcmluZ1wiLFwiQXRpbGRlXCIsXCJDY2VkaWxsYVwiLFwiRWFjdXRlXCIsXCJFY2lyY3VtZmxleFwiLFwiRWRpZXJlc2lzXCIsXCJFZ3JhdmVcIixcIklhY3V0ZVwiLFwiSWNpcmN1bWZsZXhcIixcIklkaWVyZXNpc1wiLFwiSWdyYXZlXCIsXCJOdGlsZGVcIixcIk9hY3V0ZVwiLFwiT2NpcmN1bWZsZXhcIixcIk9kaWVyZXNpc1wiLFwiT2dyYXZlXCIsXCJPdGlsZGVcIixcIlNjYXJvblwiLFwiVWFjdXRlXCIsXCJVY2lyY3VtZmxleFwiLFwiVWRpZXJlc2lzXCIsXCJVZ3JhdmVcIixcIllhY3V0ZVwiLFwiWWRpZXJlc2lzXCIsXCJaY2Fyb25cIixcImFhY3V0ZVwiLFwiYWNpcmN1bWZsZXhcIixcImFkaWVyZXNpc1wiLFwiYWdyYXZlXCIsXCJhcmluZ1wiLFwiYXRpbGRlXCIsXCJjY2VkaWxsYVwiLFwiZWFjdXRlXCIsXCJlY2lyY3VtZmxleFwiLFwiZWRpZXJlc2lzXCIsXCJlZ3JhdmVcIixcImlhY3V0ZVwiLFwiaWNpcmN1bWZsZXhcIixcImlkaWVyZXNpc1wiLFwiaWdyYXZlXCIsXCJudGlsZGVcIixcIm9hY3V0ZVwiLFwib2NpcmN1bWZsZXhcIixcIm9kaWVyZXNpc1wiLFwib2dyYXZlXCIsXCJvdGlsZGVcIixcInNjYXJvblwiLFwidWFjdXRlXCIsXCJ1Y2lyY3VtZmxleFwiLFwidWRpZXJlc2lzXCIsXCJ1Z3JhdmVcIixcInlhY3V0ZVwiLFwieWRpZXJlc2lzXCIsXCJ6Y2Fyb25cIixcImV4Y2xhbXNtYWxsXCIsXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLFwiZG9sbGFyb2xkc3R5bGVcIixcImRvbGxhcnN1cGVyaW9yXCIsXCJhbXBlcnNhbmRzbWFsbFwiLFwiQWN1dGVzbWFsbFwiLFwicGFyZW5sZWZ0c3VwZXJpb3JcIixcInBhcmVucmlnaHRzdXBlcmlvclwiLFwiMjY2IGZmXCIsXCJvbmVkb3RlbmxlYWRlclwiLFwiemVyb29sZHN0eWxlXCIsXCJvbmVvbGRzdHlsZVwiLFwidHdvb2xkc3R5bGVcIixcInRocmVlb2xkc3R5bGVcIixcImZvdXJvbGRzdHlsZVwiLFwiZml2ZW9sZHN0eWxlXCIsXCJzaXhvbGRzdHlsZVwiLFwic2V2ZW5vbGRzdHlsZVwiLFwiZWlnaHRvbGRzdHlsZVwiLFwibmluZW9sZHN0eWxlXCIsXCJjb21tYXN1cGVyaW9yXCIsXCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoXCIsXCJwZXJpb2RzdXBlcmlvclwiLFwicXVlc3Rpb25zbWFsbFwiLFwiYXN1cGVyaW9yXCIsXCJic3VwZXJpb3JcIixcImNlbnRzdXBlcmlvclwiLFwiZHN1cGVyaW9yXCIsXCJlc3VwZXJpb3JcIixcImlzdXBlcmlvclwiLFwibHN1cGVyaW9yXCIsXCJtc3VwZXJpb3JcIixcIm5zdXBlcmlvclwiLFwib3N1cGVyaW9yXCIsXCJyc3VwZXJpb3JcIixcInNzdXBlcmlvclwiLFwidHN1cGVyaW9yXCIsXCJmZlwiLFwiZmZpXCIsXCJmZmxcIixcInBhcmVubGVmdGluZmVyaW9yXCIsXCJwYXJlbnJpZ2h0aW5mZXJpb3JcIixcIkNpcmN1bWZsZXhzbWFsbFwiLFwiaHlwaGVuc3VwZXJpb3JcIixcIkdyYXZlc21hbGxcIixcIkFzbWFsbFwiLFwiQnNtYWxsXCIsXCJDc21hbGxcIixcIkRzbWFsbFwiLFwiRXNtYWxsXCIsXCJGc21hbGxcIixcIkdzbWFsbFwiLFwiSHNtYWxsXCIsXCJJc21hbGxcIixcIkpzbWFsbFwiLFwiS3NtYWxsXCIsXCJMc21hbGxcIixcIk1zbWFsbFwiLFwiTnNtYWxsXCIsXCJPc21hbGxcIixcIlBzbWFsbFwiLFwiUXNtYWxsXCIsXCJSc21hbGxcIixcIlNzbWFsbFwiLFwiVHNtYWxsXCIsXCJVc21hbGxcIixcIlZzbWFsbFwiLFwiV3NtYWxsXCIsXCJYc21hbGxcIixcIllzbWFsbFwiLFwiWnNtYWxsXCIsXCJjb2xvbm1vbmV0YXJ5XCIsXCJvbmVmaXR0ZWRcIixcInJ1cGlhaFwiLFwiVGlsZGVzbWFsbFwiLFwiZXhjbGFtZG93bnNtYWxsXCIsXCJjZW50b2xkc3R5bGVcIixcIkxzbGFzaHNtYWxsXCIsXCJTY2Fyb25zbWFsbFwiLFwiWmNhcm9uc21hbGxcIixcIkRpZXJlc2lzc21hbGxcIixcIkJyZXZlc21hbGxcIixcIkNhcm9uc21hbGxcIixcIkRvdGFjY2VudHNtYWxsXCIsXCJNYWNyb25zbWFsbFwiLFwiZmlndXJlZGFzaFwiLFwiaHlwaGVuaW5mZXJpb3JcIixcIk9nb25la3NtYWxsXCIsXCJSaW5nc21hbGxcIixcIkNlZGlsbGFzbWFsbFwiLFwicXVlc3Rpb25kb3duc21hbGxcIixcIm9uZWVpZ2h0aFwiLFwidGhyZWVlaWdodGhzXCIsXCJmaXZlZWlnaHRoc1wiLFwic2V2ZW5laWdodGhzXCIsXCJvbmV0aGlyZFwiLFwidHdvdGhpcmRzXCIsXCJ6ZXJvc3VwZXJpb3JcIixcImZvdXJzdXBlcmlvclwiLFwiZml2ZXN1cGVyaW9yXCIsXCJzaXhzdXBlcmlvclwiLFwic2V2ZW5zdXBlcmlvclwiLFwiZWlnaHRzdXBlcmlvclwiLFwibmluZXN1cGVyaW9yXCIsXCJ6ZXJvaW5mZXJpb3JcIixcIm9uZWluZmVyaW9yXCIsXCJ0d29pbmZlcmlvclwiLFwidGhyZWVpbmZlcmlvclwiLFwiZm91cmluZmVyaW9yXCIsXCJmaXZlaW5mZXJpb3JcIixcInNpeGluZmVyaW9yXCIsXCJzZXZlbmluZmVyaW9yXCIsXCJlaWdodGluZmVyaW9yXCIsXCJuaW5laW5mZXJpb3JcIixcImNlbnRpbmZlcmlvclwiLFwiZG9sbGFyaW5mZXJpb3JcIixcInBlcmlvZGluZmVyaW9yXCIsXCJjb21tYWluZmVyaW9yXCIsXCJBZ3JhdmVzbWFsbFwiLFwiQWFjdXRlc21hbGxcIixcIkFjaXJjdW1mbGV4c21hbGxcIixcIkF0aWxkZXNtYWxsXCIsXCJBZGllcmVzaXNzbWFsbFwiLFwiQXJpbmdzbWFsbFwiLFwiQUVzbWFsbFwiLFwiQ2NlZGlsbGFzbWFsbFwiLFwiRWdyYXZlc21hbGxcIixcIkVhY3V0ZXNtYWxsXCIsXCJFY2lyY3VtZmxleHNtYWxsXCIsXCJFZGllcmVzaXNzbWFsbFwiLFwiSWdyYXZlc21hbGxcIixcIklhY3V0ZXNtYWxsXCIsXCJJY2lyY3VtZmxleHNtYWxsXCIsXCJJZGllcmVzaXNzbWFsbFwiLFwiRXRoc21hbGxcIixcIk50aWxkZXNtYWxsXCIsXCJPZ3JhdmVzbWFsbFwiLFwiT2FjdXRlc21hbGxcIixcIk9jaXJjdW1mbGV4c21hbGxcIixcIk90aWxkZXNtYWxsXCIsXCJPZGllcmVzaXNzbWFsbFwiLFwiT0VzbWFsbFwiLFwiT3NsYXNoc21hbGxcIixcIlVncmF2ZXNtYWxsXCIsXCJVYWN1dGVzbWFsbFwiLFwiVWNpcmN1bWZsZXhzbWFsbFwiLFwiVWRpZXJlc2lzc21hbGxcIixcIllhY3V0ZXNtYWxsXCIsXCJUaG9ybnNtYWxsXCIsXCJZZGllcmVzaXNzbWFsbFwiLFwiMDAxLjAwMFwiLFwiMDAxLjAwMVwiLFwiMDAxLjAwMlwiLFwiMDAxLjAwM1wiLFwiQmxhY2tcIixcIkJvbGRcIixcIkJvb2tcIixcIkxpZ2h0XCIsXCJNZWRpdW1cIixcIlJlZ3VsYXJcIixcIlJvbWFuXCIsXCJTZW1pYm9sZFwiXSxPZT1bXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwic3BhY2VcIixcImV4Y2xhbVwiLFwicXVvdGVkYmxcIixcIm51bWJlcnNpZ25cIixcImRvbGxhclwiLFwicGVyY2VudFwiLFwiYW1wZXJzYW5kXCIsXCJxdW90ZXJpZ2h0XCIsXCJwYXJlbmxlZnRcIixcInBhcmVucmlnaHRcIixcImFzdGVyaXNrXCIsXCJwbHVzXCIsXCJjb21tYVwiLFwiaHlwaGVuXCIsXCJwZXJpb2RcIixcInNsYXNoXCIsXCJ6ZXJvXCIsXCJvbmVcIixcInR3b1wiLFwidGhyZWVcIixcImZvdXJcIixcImZpdmVcIixcInNpeFwiLFwic2V2ZW5cIixcImVpZ2h0XCIsXCJuaW5lXCIsXCJjb2xvblwiLFwic2VtaWNvbG9uXCIsXCJsZXNzXCIsXCJlcXVhbFwiLFwiZ3JlYXRlclwiLFwicXVlc3Rpb25cIixcImF0XCIsXCJBXCIsXCJCXCIsXCJDXCIsXCJEXCIsXCJFXCIsXCJGXCIsXCJHXCIsXCJIXCIsXCJJXCIsXCJKXCIsXCJLXCIsXCJMXCIsXCJNXCIsXCJOXCIsXCJPXCIsXCJQXCIsXCJRXCIsXCJSXCIsXCJTXCIsXCJUXCIsXCJVXCIsXCJWXCIsXCJXXCIsXCJYXCIsXCJZXCIsXCJaXCIsXCJicmFja2V0bGVmdFwiLFwiYmFja3NsYXNoXCIsXCJicmFja2V0cmlnaHRcIixcImFzY2lpY2lyY3VtXCIsXCJ1bmRlcnNjb3JlXCIsXCJxdW90ZWxlZnRcIixcImFcIixcImJcIixcImNcIixcImRcIixcImVcIixcImZcIixcImdcIixcImhcIixcImlcIixcImpcIixcImtcIixcImxcIixcIm1cIixcIm5cIixcIm9cIixcInBcIixcInFcIixcInJcIixcInNcIixcInRcIixcInVcIixcInZcIixcIndcIixcInhcIixcInlcIixcInpcIixcImJyYWNlbGVmdFwiLFwiYmFyXCIsXCJicmFjZXJpZ2h0XCIsXCJhc2NpaXRpbGRlXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcImV4Y2xhbWRvd25cIixcImNlbnRcIixcInN0ZXJsaW5nXCIsXCJmcmFjdGlvblwiLFwieWVuXCIsXCJmbG9yaW5cIixcInNlY3Rpb25cIixcImN1cnJlbmN5XCIsXCJxdW90ZXNpbmdsZVwiLFwicXVvdGVkYmxsZWZ0XCIsXCJndWlsbGVtb3RsZWZ0XCIsXCJndWlsc2luZ2xsZWZ0XCIsXCJndWlsc2luZ2xyaWdodFwiLFwiZmlcIixcImZsXCIsXCJcIixcImVuZGFzaFwiLFwiZGFnZ2VyXCIsXCJkYWdnZXJkYmxcIixcInBlcmlvZGNlbnRlcmVkXCIsXCJcIixcInBhcmFncmFwaFwiLFwiYnVsbGV0XCIsXCJxdW90ZXNpbmdsYmFzZVwiLFwicXVvdGVkYmxiYXNlXCIsXCJxdW90ZWRibHJpZ2h0XCIsXCJndWlsbGVtb3RyaWdodFwiLFwiZWxsaXBzaXNcIixcInBlcnRob3VzYW5kXCIsXCJcIixcInF1ZXN0aW9uZG93blwiLFwiXCIsXCJncmF2ZVwiLFwiYWN1dGVcIixcImNpcmN1bWZsZXhcIixcInRpbGRlXCIsXCJtYWNyb25cIixcImJyZXZlXCIsXCJkb3RhY2NlbnRcIixcImRpZXJlc2lzXCIsXCJcIixcInJpbmdcIixcImNlZGlsbGFcIixcIlwiLFwiaHVuZ2FydW1sYXV0XCIsXCJvZ29uZWtcIixcImNhcm9uXCIsXCJlbWRhc2hcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiQUVcIixcIlwiLFwib3JkZmVtaW5pbmVcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiTHNsYXNoXCIsXCJPc2xhc2hcIixcIk9FXCIsXCJvcmRtYXNjdWxpbmVcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJhZVwiLFwiXCIsXCJcIixcIlwiLFwiZG90bGVzc2lcIixcIlwiLFwiXCIsXCJsc2xhc2hcIixcIm9zbGFzaFwiLFwib2VcIixcImdlcm1hbmRibHNcIl0sUGU9W1wiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcInNwYWNlXCIsXCJleGNsYW1zbWFsbFwiLFwiSHVuZ2FydW1sYXV0c21hbGxcIixcIlwiLFwiZG9sbGFyb2xkc3R5bGVcIixcImRvbGxhcnN1cGVyaW9yXCIsXCJhbXBlcnNhbmRzbWFsbFwiLFwiQWN1dGVzbWFsbFwiLFwicGFyZW5sZWZ0c3VwZXJpb3JcIixcInBhcmVucmlnaHRzdXBlcmlvclwiLFwidHdvZG90ZW5sZWFkZXJcIixcIm9uZWRvdGVubGVhZGVyXCIsXCJjb21tYVwiLFwiaHlwaGVuXCIsXCJwZXJpb2RcIixcImZyYWN0aW9uXCIsXCJ6ZXJvb2xkc3R5bGVcIixcIm9uZW9sZHN0eWxlXCIsXCJ0d29vbGRzdHlsZVwiLFwidGhyZWVvbGRzdHlsZVwiLFwiZm91cm9sZHN0eWxlXCIsXCJmaXZlb2xkc3R5bGVcIixcInNpeG9sZHN0eWxlXCIsXCJzZXZlbm9sZHN0eWxlXCIsXCJlaWdodG9sZHN0eWxlXCIsXCJuaW5lb2xkc3R5bGVcIixcImNvbG9uXCIsXCJzZW1pY29sb25cIixcImNvbW1hc3VwZXJpb3JcIixcInRocmVlcXVhcnRlcnNlbWRhc2hcIixcInBlcmlvZHN1cGVyaW9yXCIsXCJxdWVzdGlvbnNtYWxsXCIsXCJcIixcImFzdXBlcmlvclwiLFwiYnN1cGVyaW9yXCIsXCJjZW50c3VwZXJpb3JcIixcImRzdXBlcmlvclwiLFwiZXN1cGVyaW9yXCIsXCJcIixcIlwiLFwiaXN1cGVyaW9yXCIsXCJcIixcIlwiLFwibHN1cGVyaW9yXCIsXCJtc3VwZXJpb3JcIixcIm5zdXBlcmlvclwiLFwib3N1cGVyaW9yXCIsXCJcIixcIlwiLFwicnN1cGVyaW9yXCIsXCJzc3VwZXJpb3JcIixcInRzdXBlcmlvclwiLFwiXCIsXCJmZlwiLFwiZmlcIixcImZsXCIsXCJmZmlcIixcImZmbFwiLFwicGFyZW5sZWZ0aW5mZXJpb3JcIixcIlwiLFwicGFyZW5yaWdodGluZmVyaW9yXCIsXCJDaXJjdW1mbGV4c21hbGxcIixcImh5cGhlbnN1cGVyaW9yXCIsXCJHcmF2ZXNtYWxsXCIsXCJBc21hbGxcIixcIkJzbWFsbFwiLFwiQ3NtYWxsXCIsXCJEc21hbGxcIixcIkVzbWFsbFwiLFwiRnNtYWxsXCIsXCJHc21hbGxcIixcIkhzbWFsbFwiLFwiSXNtYWxsXCIsXCJKc21hbGxcIixcIktzbWFsbFwiLFwiTHNtYWxsXCIsXCJNc21hbGxcIixcIk5zbWFsbFwiLFwiT3NtYWxsXCIsXCJQc21hbGxcIixcIlFzbWFsbFwiLFwiUnNtYWxsXCIsXCJTc21hbGxcIixcIlRzbWFsbFwiLFwiVXNtYWxsXCIsXCJWc21hbGxcIixcIldzbWFsbFwiLFwiWHNtYWxsXCIsXCJZc21hbGxcIixcIlpzbWFsbFwiLFwiY29sb25tb25ldGFyeVwiLFwib25lZml0dGVkXCIsXCJydXBpYWhcIixcIlRpbGRlc21hbGxcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiZXhjbGFtZG93bnNtYWxsXCIsXCJjZW50b2xkc3R5bGVcIixcIkxzbGFzaHNtYWxsXCIsXCJcIixcIlwiLFwiU2Nhcm9uc21hbGxcIixcIlpjYXJvbnNtYWxsXCIsXCJEaWVyZXNpc3NtYWxsXCIsXCJCcmV2ZXNtYWxsXCIsXCJDYXJvbnNtYWxsXCIsXCJcIixcIkRvdGFjY2VudHNtYWxsXCIsXCJcIixcIlwiLFwiTWFjcm9uc21hbGxcIixcIlwiLFwiXCIsXCJmaWd1cmVkYXNoXCIsXCJoeXBoZW5pbmZlcmlvclwiLFwiXCIsXCJcIixcIk9nb25la3NtYWxsXCIsXCJSaW5nc21hbGxcIixcIkNlZGlsbGFzbWFsbFwiLFwiXCIsXCJcIixcIlwiLFwib25lcXVhcnRlclwiLFwib25laGFsZlwiLFwidGhyZWVxdWFydGVyc1wiLFwicXVlc3Rpb25kb3duc21hbGxcIixcIm9uZWVpZ2h0aFwiLFwidGhyZWVlaWdodGhzXCIsXCJmaXZlZWlnaHRoc1wiLFwic2V2ZW5laWdodGhzXCIsXCJvbmV0aGlyZFwiLFwidHdvdGhpcmRzXCIsXCJcIixcIlwiLFwiemVyb3N1cGVyaW9yXCIsXCJvbmVzdXBlcmlvclwiLFwidHdvc3VwZXJpb3JcIixcInRocmVlc3VwZXJpb3JcIixcImZvdXJzdXBlcmlvclwiLFwiZml2ZXN1cGVyaW9yXCIsXCJzaXhzdXBlcmlvclwiLFwic2V2ZW5zdXBlcmlvclwiLFwiZWlnaHRzdXBlcmlvclwiLFwibmluZXN1cGVyaW9yXCIsXCJ6ZXJvaW5mZXJpb3JcIixcIm9uZWluZmVyaW9yXCIsXCJ0d29pbmZlcmlvclwiLFwidGhyZWVpbmZlcmlvclwiLFwiZm91cmluZmVyaW9yXCIsXCJmaXZlaW5mZXJpb3JcIixcInNpeGluZmVyaW9yXCIsXCJzZXZlbmluZmVyaW9yXCIsXCJlaWdodGluZmVyaW9yXCIsXCJuaW5laW5mZXJpb3JcIixcImNlbnRpbmZlcmlvclwiLFwiZG9sbGFyaW5mZXJpb3JcIixcInBlcmlvZGluZmVyaW9yXCIsXCJjb21tYWluZmVyaW9yXCIsXCJBZ3JhdmVzbWFsbFwiLFwiQWFjdXRlc21hbGxcIixcIkFjaXJjdW1mbGV4c21hbGxcIixcIkF0aWxkZXNtYWxsXCIsXCJBZGllcmVzaXNzbWFsbFwiLFwiQXJpbmdzbWFsbFwiLFwiQUVzbWFsbFwiLFwiQ2NlZGlsbGFzbWFsbFwiLFwiRWdyYXZlc21hbGxcIixcIkVhY3V0ZXNtYWxsXCIsXCJFY2lyY3VtZmxleHNtYWxsXCIsXCJFZGllcmVzaXNzbWFsbFwiLFwiSWdyYXZlc21hbGxcIixcIklhY3V0ZXNtYWxsXCIsXCJJY2lyY3VtZmxleHNtYWxsXCIsXCJJZGllcmVzaXNzbWFsbFwiLFwiRXRoc21hbGxcIixcIk50aWxkZXNtYWxsXCIsXCJPZ3JhdmVzbWFsbFwiLFwiT2FjdXRlc21hbGxcIixcIk9jaXJjdW1mbGV4c21hbGxcIixcIk90aWxkZXNtYWxsXCIsXCJPZGllcmVzaXNzbWFsbFwiLFwiT0VzbWFsbFwiLFwiT3NsYXNoc21hbGxcIixcIlVncmF2ZXNtYWxsXCIsXCJVYWN1dGVzbWFsbFwiLFwiVWNpcmN1bWZsZXhzbWFsbFwiLFwiVWRpZXJlc2lzc21hbGxcIixcIllhY3V0ZXNtYWxsXCIsXCJUaG9ybnNtYWxsXCIsXCJZZGllcmVzaXNzbWFsbFwiXSxRZT1bXCIubm90ZGVmXCIsXCIubnVsbFwiLFwibm9ubWFya2luZ3JldHVyblwiLFwic3BhY2VcIixcImV4Y2xhbVwiLFwicXVvdGVkYmxcIixcIm51bWJlcnNpZ25cIixcImRvbGxhclwiLFwicGVyY2VudFwiLFwiYW1wZXJzYW5kXCIsXCJxdW90ZXNpbmdsZVwiLFwicGFyZW5sZWZ0XCIsXCJwYXJlbnJpZ2h0XCIsXCJhc3Rlcmlza1wiLFwicGx1c1wiLFwiY29tbWFcIixcImh5cGhlblwiLFwicGVyaW9kXCIsXCJzbGFzaFwiLFwiemVyb1wiLFwib25lXCIsXCJ0d29cIixcInRocmVlXCIsXCJmb3VyXCIsXCJmaXZlXCIsXCJzaXhcIixcInNldmVuXCIsXCJlaWdodFwiLFwibmluZVwiLFwiY29sb25cIixcInNlbWljb2xvblwiLFwibGVzc1wiLFwiZXF1YWxcIixcImdyZWF0ZXJcIixcInF1ZXN0aW9uXCIsXCJhdFwiLFwiQVwiLFwiQlwiLFwiQ1wiLFwiRFwiLFwiRVwiLFwiRlwiLFwiR1wiLFwiSFwiLFwiSVwiLFwiSlwiLFwiS1wiLFwiTFwiLFwiTVwiLFwiTlwiLFwiT1wiLFwiUFwiLFwiUVwiLFwiUlwiLFwiU1wiLFwiVFwiLFwiVVwiLFwiVlwiLFwiV1wiLFwiWFwiLFwiWVwiLFwiWlwiLFwiYnJhY2tldGxlZnRcIixcImJhY2tzbGFzaFwiLFwiYnJhY2tldHJpZ2h0XCIsXCJhc2NpaWNpcmN1bVwiLFwidW5kZXJzY29yZVwiLFwiZ3JhdmVcIixcImFcIixcImJcIixcImNcIixcImRcIixcImVcIixcImZcIixcImdcIixcImhcIixcImlcIixcImpcIixcImtcIixcImxcIixcIm1cIixcIm5cIixcIm9cIixcInBcIixcInFcIixcInJcIixcInNcIixcInRcIixcInVcIixcInZcIixcIndcIixcInhcIixcInlcIixcInpcIixcImJyYWNlbGVmdFwiLFwiYmFyXCIsXCJicmFjZXJpZ2h0XCIsXCJhc2NpaXRpbGRlXCIsXCJBZGllcmVzaXNcIixcIkFyaW5nXCIsXCJDY2VkaWxsYVwiLFwiRWFjdXRlXCIsXCJOdGlsZGVcIixcIk9kaWVyZXNpc1wiLFwiVWRpZXJlc2lzXCIsXCJhYWN1dGVcIixcImFncmF2ZVwiLFwiYWNpcmN1bWZsZXhcIixcImFkaWVyZXNpc1wiLFwiYXRpbGRlXCIsXCJhcmluZ1wiLFwiY2NlZGlsbGFcIixcImVhY3V0ZVwiLFwiZWdyYXZlXCIsXCJlY2lyY3VtZmxleFwiLFwiZWRpZXJlc2lzXCIsXCJpYWN1dGVcIixcImlncmF2ZVwiLFwiaWNpcmN1bWZsZXhcIixcImlkaWVyZXNpc1wiLFwibnRpbGRlXCIsXCJvYWN1dGVcIixcIm9ncmF2ZVwiLFwib2NpcmN1bWZsZXhcIixcIm9kaWVyZXNpc1wiLFwib3RpbGRlXCIsXCJ1YWN1dGVcIixcInVncmF2ZVwiLFwidWNpcmN1bWZsZXhcIixcInVkaWVyZXNpc1wiLFwiZGFnZ2VyXCIsXCJkZWdyZWVcIixcImNlbnRcIixcInN0ZXJsaW5nXCIsXCJzZWN0aW9uXCIsXCJidWxsZXRcIixcInBhcmFncmFwaFwiLFwiZ2VybWFuZGJsc1wiLFwicmVnaXN0ZXJlZFwiLFwiY29weXJpZ2h0XCIsXCJ0cmFkZW1hcmtcIixcImFjdXRlXCIsXCJkaWVyZXNpc1wiLFwibm90ZXF1YWxcIixcIkFFXCIsXCJPc2xhc2hcIixcImluZmluaXR5XCIsXCJwbHVzbWludXNcIixcImxlc3NlcXVhbFwiLFwiZ3JlYXRlcmVxdWFsXCIsXCJ5ZW5cIixcIm11XCIsXCJwYXJ0aWFsZGlmZlwiLFwic3VtbWF0aW9uXCIsXCJwcm9kdWN0XCIsXCJwaVwiLFwiaW50ZWdyYWxcIixcIm9yZGZlbWluaW5lXCIsXCJvcmRtYXNjdWxpbmVcIixcIk9tZWdhXCIsXCJhZVwiLFwib3NsYXNoXCIsXCJxdWVzdGlvbmRvd25cIixcImV4Y2xhbWRvd25cIixcImxvZ2ljYWxub3RcIixcInJhZGljYWxcIixcImZsb3JpblwiLFwiYXBwcm94ZXF1YWxcIixcIkRlbHRhXCIsXCJndWlsbGVtb3RsZWZ0XCIsXCJndWlsbGVtb3RyaWdodFwiLFwiZWxsaXBzaXNcIixcIm5vbmJyZWFraW5nc3BhY2VcIixcIkFncmF2ZVwiLFwiQXRpbGRlXCIsXCJPdGlsZGVcIixcIk9FXCIsXCJvZVwiLFwiZW5kYXNoXCIsXCJlbWRhc2hcIixcInF1b3RlZGJsbGVmdFwiLFwicXVvdGVkYmxyaWdodFwiLFwicXVvdGVsZWZ0XCIsXCJxdW90ZXJpZ2h0XCIsXCJkaXZpZGVcIixcImxvemVuZ2VcIixcInlkaWVyZXNpc1wiLFwiWWRpZXJlc2lzXCIsXCJmcmFjdGlvblwiLFwiY3VycmVuY3lcIixcImd1aWxzaW5nbGxlZnRcIixcImd1aWxzaW5nbHJpZ2h0XCIsXCJmaVwiLFwiZmxcIixcImRhZ2dlcmRibFwiLFwicGVyaW9kY2VudGVyZWRcIixcInF1b3Rlc2luZ2xiYXNlXCIsXCJxdW90ZWRibGJhc2VcIixcInBlcnRob3VzYW5kXCIsXCJBY2lyY3VtZmxleFwiLFwiRWNpcmN1bWZsZXhcIixcIkFhY3V0ZVwiLFwiRWRpZXJlc2lzXCIsXCJFZ3JhdmVcIixcIklhY3V0ZVwiLFwiSWNpcmN1bWZsZXhcIixcIklkaWVyZXNpc1wiLFwiSWdyYXZlXCIsXCJPYWN1dGVcIixcIk9jaXJjdW1mbGV4XCIsXCJhcHBsZVwiLFwiT2dyYXZlXCIsXCJVYWN1dGVcIixcIlVjaXJjdW1mbGV4XCIsXCJVZ3JhdmVcIixcImRvdGxlc3NpXCIsXCJjaXJjdW1mbGV4XCIsXCJ0aWxkZVwiLFwibWFjcm9uXCIsXCJicmV2ZVwiLFwiZG90YWNjZW50XCIsXCJyaW5nXCIsXCJjZWRpbGxhXCIsXCJodW5nYXJ1bWxhdXRcIixcIm9nb25la1wiLFwiY2Fyb25cIixcIkxzbGFzaFwiLFwibHNsYXNoXCIsXCJTY2Fyb25cIixcInNjYXJvblwiLFwiWmNhcm9uXCIsXCJ6Y2Fyb25cIixcImJyb2tlbmJhclwiLFwiRXRoXCIsXCJldGhcIixcIllhY3V0ZVwiLFwieWFjdXRlXCIsXCJUaG9yblwiLFwidGhvcm5cIixcIm1pbnVzXCIsXCJtdWx0aXBseVwiLFwib25lc3VwZXJpb3JcIixcInR3b3N1cGVyaW9yXCIsXCJ0aHJlZXN1cGVyaW9yXCIsXCJvbmVoYWxmXCIsXCJvbmVxdWFydGVyXCIsXCJ0aHJlZXF1YXJ0ZXJzXCIsXCJmcmFuY1wiLFwiR2JyZXZlXCIsXCJnYnJldmVcIixcIklkb3RhY2NlbnRcIixcIlNjZWRpbGxhXCIsXCJzY2VkaWxsYVwiLFwiQ2FjdXRlXCIsXCJjYWN1dGVcIixcIkNjYXJvblwiLFwiY2Nhcm9uXCIsXCJkY3JvYXRcIl07WC5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXt2YXIgYj1hLmNvZGVQb2ludEF0KDApLGM9dGhpcy5mb250LmdseXBocztpZihjKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCs9MSlmb3IodmFyIGU9Yy5nZXQoZCksZj0wO2Y8ZS51bmljb2Rlcy5sZW5ndGg7Zis9MSlpZihlLnVuaWNvZGVzW2ZdPT09YilyZXR1cm4gZDtyZXR1cm4gbnVsbH0sWS5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jbWFwLmdseXBoSW5kZXhNYXBbYS5jb2RlUG9pbnRBdCgwKV18fDB9LFoucHJvdG90eXBlLmNoYXJUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7dmFyIGI9YS5jb2RlUG9pbnRBdCgwKSxjPXRoaXMuZW5jb2RpbmdbYl07cmV0dXJuIHRoaXMuY2hhcnNldC5pbmRleE9mKGMpfSwkLnByb3RvdHlwZS5uYW1lVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5hbWVzLmluZGV4T2YoYSl9LCQucHJvdG90eXBlLmdseXBoSW5kZXhUb05hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubmFtZXNbYV19O3ZhciBSZT17bGluZTphYX07Y2EucHJvdG90eXBlLmJpbmRDb25zdHJ1Y3RvclZhbHVlcz1mdW5jdGlvbihhKXt0aGlzLmluZGV4PWEuaW5kZXh8fDAsdGhpcy5uYW1lPWEubmFtZXx8bnVsbCx0aGlzLnVuaWNvZGU9YS51bmljb2RlfHx2b2lkIDAsdGhpcy51bmljb2Rlcz1hLnVuaWNvZGVzfHx2b2lkIDAhPT1hLnVuaWNvZGU/W2EudW5pY29kZV06W10sYS54TWluJiYodGhpcy54TWluPWEueE1pbiksYS55TWluJiYodGhpcy55TWluPWEueU1pbiksYS54TWF4JiYodGhpcy54TWF4PWEueE1heCksYS55TWF4JiYodGhpcy55TWF4PWEueU1heCksYS5hZHZhbmNlV2lkdGgmJih0aGlzLmFkdmFuY2VXaWR0aD1hLmFkdmFuY2VXaWR0aCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwYXRoXCIsYmEodGhpcyxhLnBhdGgpKX0sY2EucHJvdG90eXBlLmFkZFVuaWNvZGU9ZnVuY3Rpb24oYSl7MD09PXRoaXMudW5pY29kZXMubGVuZ3RoJiYodGhpcy51bmljb2RlPWEpLHRoaXMudW5pY29kZXMucHVzaChhKX0sY2EucHJvdG90eXBlLmdldEJvdW5kaW5nQm94PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aC5nZXRCb3VuZGluZ0JveCgpfSxjYS5wcm90b3R5cGUuZ2V0UGF0aD1mdW5jdGlvbihhLGIsYyxkLGUpe2E9dm9pZCAwIT09YT9hOjAsYj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/Yzo3Mjt2YXIgZixnO2R8fChkPXt9KTt2YXIgaD1kLnhTY2FsZSxpPWQueVNjYWxlO2lmKGQuaGludGluZyYmZSYmZS5oaW50aW5nJiYoZz10aGlzLnBhdGgmJmUuaGludGluZy5leGVjKHRoaXMsYykpLGcpZj1lLmhpbnRpbmcuZ2V0Q29tbWFuZHMoZyksYT1NYXRoLnJvdW5kKGEpLGI9TWF0aC5yb3VuZChiKSxoPWk9MTtlbHNle2Y9dGhpcy5wYXRoLmNvbW1hbmRzO3ZhciBqPTEvdGhpcy5wYXRoLnVuaXRzUGVyRW0qYzt2b2lkIDA9PT1oJiYoaD1qKSx2b2lkIDA9PT1pJiYoaT1qKX1mb3IodmFyIGs9bmV3IHIsbD0wO2w8Zi5sZW5ndGg7bCs9MSl7dmFyIG09ZltsXTtcIk1cIj09PW0udHlwZT9rLm1vdmVUbyhhK20ueCpoLGIrLW0ueSppKTpcIkxcIj09PW0udHlwZT9rLmxpbmVUbyhhK20ueCpoLGIrLW0ueSppKTpcIlFcIj09PW0udHlwZT9rLnF1YWRyYXRpY0N1cnZlVG8oYSttLngxKmgsYistbS55MSppLGErbS54KmgsYistbS55KmkpOlwiQ1wiPT09bS50eXBlP2suY3VydmVUbyhhK20ueDEqaCxiKy1tLnkxKmksYSttLngyKmgsYistbS55MippLGErbS54KmgsYistbS55KmkpOlwiWlwiPT09bS50eXBlJiZrLmNsb3NlUGF0aCgpfXJldHVybiBrfSxjYS5wcm90b3R5cGUuZ2V0Q29udG91cnM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2lmKHZvaWQgMD09PXRoaXMucG9pbnRzKXJldHVybltdO2Zvcih2YXIgYj1bXSxjPVtdLGQ9MDtkPHRoaXMucG9pbnRzLmxlbmd0aDtkKz0xKXt2YXIgZT1hLnBvaW50c1tkXTtjLnB1c2goZSksZS5sYXN0UG9pbnRPZkNvbnRvdXImJihiLnB1c2goYyksYz1bXSl9cmV0dXJuIHhlLmFyZ3VtZW50KDA9PT1jLmxlbmd0aCxcIlRoZXJlIGFyZSBzdGlsbCBwb2ludHMgbGVmdCBpbiB0aGUgY3VycmVudCBjb250b3VyLlwiKSxifSxjYS5wcm90b3R5cGUuZ2V0TWV0cmljcz1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnBhdGguY29tbWFuZHMsYj1bXSxjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF07XCJaXCIhPT1lLnR5cGUmJihiLnB1c2goZS54KSxjLnB1c2goZS55KSksXCJRXCIhPT1lLnR5cGUmJlwiQ1wiIT09ZS50eXBlfHwoYi5wdXNoKGUueDEpLGMucHVzaChlLnkxKSksXCJDXCI9PT1lLnR5cGUmJihiLnB1c2goZS54MiksYy5wdXNoKGUueTIpKX12YXIgZj17eE1pbjpNYXRoLm1pbi5hcHBseShudWxsLGIpLHlNaW46TWF0aC5taW4uYXBwbHkobnVsbCxjKSx4TWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsYikseU1heDpNYXRoLm1heC5hcHBseShudWxsLGMpLGxlZnRTaWRlQmVhcmluZzp0aGlzLmxlZnRTaWRlQmVhcmluZ307cmV0dXJuIGlzRmluaXRlKGYueE1pbil8fChmLnhNaW49MCksaXNGaW5pdGUoZi54TWF4KXx8KGYueE1heD10aGlzLmFkdmFuY2VXaWR0aCksaXNGaW5pdGUoZi55TWluKXx8KGYueU1pbj0wKSxpc0Zpbml0ZShmLnlNYXgpfHwoZi55TWF4PTApLGYucmlnaHRTaWRlQmVhcmluZz10aGlzLmFkdmFuY2VXaWR0aC1mLmxlZnRTaWRlQmVhcmluZy0oZi54TWF4LWYueE1pbiksZn0sY2EucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oYSxiLGMsZCxlKXt0aGlzLmdldFBhdGgoYixjLGQsZSkuZHJhdyhhKX0sY2EucHJvdG90eXBlLmRyYXdQb2ludHM9ZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZShiLGMsZCxlKXt2YXIgZj0yKk1hdGguUEk7YS5iZWdpblBhdGgoKTtmb3IodmFyIGc9MDtnPGIubGVuZ3RoO2crPTEpYS5tb3ZlVG8oYytiW2ddLngqZSxkK2JbZ10ueSplKSxhLmFyYyhjK2JbZ10ueCplLGQrYltnXS55KmUsMiwwLGYsITEpO2EuY2xvc2VQYXRoKCksYS5maWxsKCl9Yj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/YzowLGQ9dm9pZCAwIT09ZD9kOjI0O2Zvcih2YXIgZj0xL3RoaXMucGF0aC51bml0c1BlckVtKmQsZz1bXSxoPVtdLGk9dGhpcy5wYXRoLGo9MDtqPGkuY29tbWFuZHMubGVuZ3RoO2orPTEpe3ZhciBrPWkuY29tbWFuZHNbal07dm9pZCAwIT09ay54JiZnLnB1c2goe3g6ay54LHk6LWsueX0pLHZvaWQgMCE9PWsueDEmJmgucHVzaCh7eDprLngxLHk6LWsueTF9KSx2b2lkIDAhPT1rLngyJiZoLnB1c2goe3g6ay54Mix5Oi1rLnkyfSl9YS5maWxsU3R5bGU9XCJibHVlXCIsZShnLGIsYyxmKSxhLmZpbGxTdHlsZT1cInJlZFwiLGUoaCxiLGMsZil9LGNhLnByb3RvdHlwZS5kcmF3TWV0cmljcz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZTtiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD12b2lkIDAhPT1kP2Q6MjQsZT0xL3RoaXMucGF0aC51bml0c1BlckVtKmQsYS5saW5lV2lkdGg9MSxhLnN0cm9rZVN0eWxlPVwiYmxhY2tcIixSZS5saW5lKGEsYiwtMWU0LGIsMWU0KSxSZS5saW5lKGEsLTFlNCxjLDFlNCxjKTt2YXIgZj10aGlzLnhNaW58fDAsZz10aGlzLnlNaW58fDAsaD10aGlzLnhNYXh8fDAsaT10aGlzLnlNYXh8fDAsaj10aGlzLmFkdmFuY2VXaWR0aHx8MDthLnN0cm9rZVN0eWxlPVwiYmx1ZVwiLFJlLmxpbmUoYSxiK2YqZSwtMWU0LGIrZiplLDFlNCksUmUubGluZShhLGIraCplLC0xZTQsYitoKmUsMWU0KSxSZS5saW5lKGEsLTFlNCxjKy1nKmUsMWU0LGMrLWcqZSksUmUubGluZShhLC0xZTQsYystaSplLDFlNCxjKy1pKmUpLGEuc3Ryb2tlU3R5bGU9XCJncmVlblwiLFJlLmxpbmUoYSxiK2oqZSwtMWU0LGIraiplLDFlNCl9LGVhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5nbHlwaHNbYV0mJih0aGlzLmdseXBoc1thXT10aGlzLmdseXBoc1thXSgpKSx0aGlzLmdseXBoc1thXX0sZWEucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oYSxiKXt0aGlzLmdseXBoc1thXT1iLHRoaXMubGVuZ3RoKyt9O3ZhciBTZT17R2x5cGhTZXQ6ZWEsZ2x5cGhMb2FkZXI6ZmEsdHRmR2x5cGhMb2FkZXI6Z2EsY2ZmR2x5cGhMb2FkZXI6aGF9LFRlPVt7bmFtZTpcInZlcnNpb25cIixvcDowLHR5cGU6XCJTSURcIn0se25hbWU6XCJub3RpY2VcIixvcDoxLHR5cGU6XCJTSURcIn0se25hbWU6XCJjb3B5cmlnaHRcIixvcDoxMjAwLHR5cGU6XCJTSURcIn0se25hbWU6XCJmdWxsTmFtZVwiLG9wOjIsdHlwZTpcIlNJRFwifSx7bmFtZTpcImZhbWlseU5hbWVcIixvcDozLHR5cGU6XCJTSURcIn0se25hbWU6XCJ3ZWlnaHRcIixvcDo0LHR5cGU6XCJTSURcIn0se25hbWU6XCJpc0ZpeGVkUGl0Y2hcIixvcDoxMjAxLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcIml0YWxpY0FuZ2xlXCIsb3A6MTIwMix0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJ1bmRlcmxpbmVQb3NpdGlvblwiLG9wOjEyMDMsdHlwZTpcIm51bWJlclwiLHZhbHVlOi0xMDB9LHtuYW1lOlwidW5kZXJsaW5lVGhpY2tuZXNzXCIsb3A6MTIwNCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6NTB9LHtuYW1lOlwicGFpbnRUeXBlXCIsb3A6MTIwNSx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJjaGFyc3RyaW5nVHlwZVwiLG9wOjEyMDYsdHlwZTpcIm51bWJlclwiLHZhbHVlOjJ9LHtuYW1lOlwiZm9udE1hdHJpeFwiLG9wOjEyMDcsdHlwZTpbXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCIsXCJyZWFsXCJdLHZhbHVlOlsuMDAxLDAsMCwuMDAxLDAsMF19LHtuYW1lOlwidW5pcXVlSWRcIixvcDoxMyx0eXBlOlwibnVtYmVyXCJ9LHtuYW1lOlwiZm9udEJCb3hcIixvcDo1LHR5cGU6W1wibnVtYmVyXCIsXCJudW1iZXJcIixcIm51bWJlclwiLFwibnVtYmVyXCJdLHZhbHVlOlswLDAsMCwwXX0se25hbWU6XCJzdHJva2VXaWR0aFwiLG9wOjEyMDgsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwieHVpZFwiLG9wOjE0LHR5cGU6W10sdmFsdWU6bnVsbH0se25hbWU6XCJjaGFyc2V0XCIsb3A6MTUsdHlwZTpcIm9mZnNldFwiLHZhbHVlOjB9LHtuYW1lOlwiZW5jb2RpbmdcIixvcDoxNix0eXBlOlwib2Zmc2V0XCIsdmFsdWU6MH0se25hbWU6XCJjaGFyU3RyaW5nc1wiLG9wOjE3LHR5cGU6XCJvZmZzZXRcIix2YWx1ZTowfSx7bmFtZTpcInByaXZhdGVcIixvcDoxOCx0eXBlOltcIm51bWJlclwiLFwib2Zmc2V0XCJdLHZhbHVlOlswLDBdfSx7bmFtZTpcInJvc1wiLG9wOjEyMzAsdHlwZTpbXCJTSURcIixcIlNJRFwiLFwibnVtYmVyXCJdfSx7bmFtZTpcImNpZEZvbnRWZXJzaW9uXCIsb3A6MTIzMSx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJjaWRGb250UmV2aXNpb25cIixvcDoxMjMyLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNpZEZvbnRUeXBlXCIsb3A6MTIzMyx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJjaWRDb3VudFwiLG9wOjEyMzQsdHlwZTpcIm51bWJlclwiLHZhbHVlOjg3MjB9LHtuYW1lOlwidWlkQmFzZVwiLG9wOjEyMzUsdHlwZTpcIm51bWJlclwifSx7bmFtZTpcImZkQXJyYXlcIixvcDoxMjM2LHR5cGU6XCJvZmZzZXRcIn0se25hbWU6XCJmZFNlbGVjdFwiLG9wOjEyMzcsdHlwZTpcIm9mZnNldFwifSx7bmFtZTpcImZvbnROYW1lXCIsb3A6MTIzOCx0eXBlOlwiU0lEXCJ9XSxVZT1be25hbWU6XCJzdWJyc1wiLG9wOjE5LHR5cGU6XCJvZmZzZXRcIix2YWx1ZTowfSx7bmFtZTpcImRlZmF1bHRXaWR0aFhcIixvcDoyMCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJub21pbmFsV2lkdGhYXCIsb3A6MjEsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9XSxWZT17cGFyc2U6emEsbWFrZTpNYX0sV2U9e3BhcnNlOk5hLG1ha2U6T2F9LFhlPXtwYXJzZTpQYSxtYWtlOlFhfSxZZT17cGFyc2U6UmEsbWFrZTpTYX0sWmU9e21ha2U6VGEscGFyc2U6VWF9LCRlPXtwYXJzZTpWYSxtYWtlOldhfSxfZT1bXCJjb3B5cmlnaHRcIixcImZvbnRGYW1pbHlcIixcImZvbnRTdWJmYW1pbHlcIixcInVuaXF1ZUlEXCIsXCJmdWxsTmFtZVwiLFwidmVyc2lvblwiLFwicG9zdFNjcmlwdE5hbWVcIixcInRyYWRlbWFya1wiLFwibWFudWZhY3R1cmVyXCIsXCJkZXNpZ25lclwiLFwiZGVzY3JpcHRpb25cIixcIm1hbnVmYWN0dXJlclVSTFwiLFwiZGVzaWduZXJVUkxcIixcImxpY2Vuc2VcIixcImxpY2Vuc2VVUkxcIixcInJlc2VydmVkXCIsXCJwcmVmZXJyZWRGYW1pbHlcIixcInByZWZlcnJlZFN1YmZhbWlseVwiLFwiY29tcGF0aWJsZUZ1bGxOYW1lXCIsXCJzYW1wbGVUZXh0XCIsXCJwb3N0U2NyaXB0RmluZEZvbnROYW1lXCIsXCJ3d3NGYW1pbHlcIixcInd3c1N1YmZhbWlseVwiXSxhZj17MDpcImVuXCIsMTpcImZyXCIsMjpcImRlXCIsMzpcIml0XCIsNDpcIm5sXCIsNTpcInN2XCIsNjpcImVzXCIsNzpcImRhXCIsODpcInB0XCIsOTpcIm5vXCIsMTA6XCJoZVwiLDExOlwiamFcIiwxMjpcImFyXCIsMTM6XCJmaVwiLDE0OlwiZWxcIiwxNTpcImlzXCIsMTY6XCJtdFwiLDE3OlwidHJcIiwxODpcImhyXCIsMTk6XCJ6aC1IYW50XCIsMjA6XCJ1clwiLDIxOlwiaGlcIiwyMjpcInRoXCIsMjM6XCJrb1wiLDI0OlwibHRcIiwyNTpcInBsXCIsMjY6XCJodVwiLDI3OlwiZXNcIiwyODpcImx2XCIsMjk6XCJzZVwiLDMwOlwiZm9cIiwzMTpcImZhXCIsMzI6XCJydVwiLDMzOlwiemhcIiwzNDpcIm5sLUJFXCIsMzU6XCJnYVwiLDM2Olwic3FcIiwzNzpcInJvXCIsMzg6XCJjelwiLDM5Olwic2tcIiw0MDpcInNpXCIsNDE6XCJ5aVwiLDQyOlwic3JcIiw0MzpcIm1rXCIsNDQ6XCJiZ1wiLDQ1OlwidWtcIiw0NjpcImJlXCIsNDc6XCJ1elwiLDQ4Olwia2tcIiw0OTpcImF6LUN5cmxcIiw1MDpcImF6LUFyYWJcIiw1MTpcImh5XCIsNTI6XCJrYVwiLDUzOlwibW9cIiw1NDpcImt5XCIsNTU6XCJ0Z1wiLDU2OlwidGtcIiw1NzpcIm1uLUNOXCIsNTg6XCJtblwiLDU5OlwicHNcIiw2MDpcImtzXCIsNjE6XCJrdVwiLDYyOlwic2RcIiw2MzpcImJvXCIsNjQ6XCJuZVwiLDY1Olwic2FcIiw2NjpcIm1yXCIsNjc6XCJiblwiLDY4OlwiYXNcIiw2OTpcImd1XCIsNzA6XCJwYVwiLDcxOlwib3JcIiw3MjpcIm1sXCIsNzM6XCJrblwiLDc0OlwidGFcIiw3NTpcInRlXCIsNzY6XCJzaVwiLDc3OlwibXlcIiw3ODpcImttXCIsNzk6XCJsb1wiLDgwOlwidmlcIiw4MTpcImlkXCIsODI6XCJ0bFwiLDgzOlwibXNcIiw4NDpcIm1zLUFyYWJcIiw4NTpcImFtXCIsODY6XCJ0aVwiLDg3Olwib21cIiw4ODpcInNvXCIsODk6XCJzd1wiLDkwOlwicndcIiw5MTpcInJuXCIsOTI6XCJueVwiLDkzOlwibWdcIiw5NDpcImVvXCIsMTI4OlwiY3lcIiwxMjk6XCJldVwiLDEzMDpcImNhXCIsMTMxOlwibGFcIiwxMzI6XCJxdVwiLDEzMzpcImduXCIsMTM0OlwiYXlcIiwxMzU6XCJ0dFwiLDEzNjpcInVnXCIsMTM3OlwiZHpcIiwxMzg6XCJqdlwiLDEzOTpcInN1XCIsMTQwOlwiZ2xcIiwxNDE6XCJhZlwiLDE0MjpcImJyXCIsMTQzOlwiaXVcIiwxNDQ6XCJnZFwiLDE0NTpcImd2XCIsMTQ2OlwiZ2FcIiwxNDc6XCJ0b1wiLDE0ODpcImVsLXBvbHl0b25cIiwxNDk6XCJrbFwiLDE1MDpcImF6XCIsMTUxOlwibm5cIn0sYmY9ezA6MCwxOjAsMjowLDM6MCw0OjAsNTowLDY6MCw3OjAsODowLDk6MCwxMDo1LDExOjEsMTI6NCwxMzowLDE0OjYsMTU6MCwxNjowLDE3OjAsMTg6MCwxOToyLDIwOjQsXG4yMTo5LDIyOjIxLDIzOjMsMjQ6MjksMjU6MjksMjY6MjksMjc6MjksMjg6MjksMjk6MCwzMDowLDMxOjQsMzI6NywzMzoyNSwzNDowLDM1OjAsMzY6MCwzNzowLDM4OjI5LDM5OjI5LDQwOjAsNDE6NSw0Mjo3LDQzOjcsNDQ6Nyw0NTo3LDQ2OjcsNDc6Nyw0ODo3LDQ5OjcsNTA6NCw1MToyNCw1MjoyMyw1Mzo3LDU0OjcsNTU6Nyw1Njo3LDU3OjI3LDU4OjcsNTk6NCw2MDo0LDYxOjQsNjI6NCw2MzoyNiw2NDo5LDY1OjksNjY6OSw2NzoxMyw2ODoxMyw2OToxMSw3MDoxMCw3MToxMiw3MjoxNyw3MzoxNiw3NDoxNCw3NToxNSw3NjoxOCw3NzoxOSw3ODoyMCw3OToyMiw4MDozMCw4MTowLDgyOjAsODM6MCw4NDo0LDg1OjI4LDg2OjI4LDg3OjI4LDg4OjAsODk6MCw5MDowLDkxOjAsOTI6MCw5MzowLDk0OjAsMTI4OjAsMTI5OjAsMTMwOjAsMTMxOjAsMTMyOjAsMTMzOjAsMTM0OjAsMTM1OjcsMTM2OjQsMTM3OjI2LDEzODowLDEzOTowLDE0MDowLDE0MTowLDE0MjowLDE0MzoyOCwxNDQ6MCwxNDU6MCwxNDY6MCwxNDc6MCwxNDg6NiwxNDk6MCwxNTA6MCwxNTE6MH0sY2Y9ezEwNzg6XCJhZlwiLDEwNTI6XCJzcVwiLDExNTY6XCJnc3dcIiwxMTE4OlwiYW1cIiw1MTIxOlwiYXItRFpcIiwxNTM2MTpcImFyLUJIXCIsMzA3MzpcImFyXCIsMjA0OTpcImFyLUlRXCIsMTEyNjU6XCJhci1KT1wiLDEzMzEzOlwiYXItS1dcIiwxMjI4OTpcImFyLUxCXCIsNDA5NzpcImFyLUxZXCIsNjE0NTpcImFyeVwiLDgxOTM6XCJhci1PTVwiLDE2Mzg1OlwiYXItUUFcIiwxMDI1OlwiYXItU0FcIiwxMDI0MTpcImFyLVNZXCIsNzE2OTpcImFlYlwiLDE0MzM3OlwiYXItQUVcIiw5MjE3OlwiYXItWUVcIiwxMDY3OlwiaHlcIiwxMTAxOlwiYXNcIiwyMDkyOlwiYXotQ3lybFwiLDEwNjg6XCJhelwiLDExMzM6XCJiYVwiLDEwNjk6XCJldVwiLDEwNTk6XCJiZVwiLDIxMTc6XCJiblwiLDEwOTM6XCJibi1JTlwiLDgyMTg6XCJicy1DeXJsXCIsNTE0NjpcImJzXCIsMTE1MDpcImJyXCIsMTAyNjpcImJnXCIsMTAyNzpcImNhXCIsMzA3NjpcInpoLUhLXCIsNTEyNDpcInpoLU1PXCIsMjA1MjpcInpoXCIsNDEwMDpcInpoLVNHXCIsMTAyODpcInpoLVRXXCIsMTE1NTpcImNvXCIsMTA1MDpcImhyXCIsNDEyMjpcImhyLUJBXCIsMTAyOTpcImNzXCIsMTAzMDpcImRhXCIsMTE2NDpcInByc1wiLDExMjU6XCJkdlwiLDIwNjc6XCJubC1CRVwiLDEwNDM6XCJubFwiLDMwODE6XCJlbi1BVVwiLDEwMjQ5OlwiZW4tQlpcIiw0MTA1OlwiZW4tQ0FcIiw5MjI1OlwiZW4tMDI5XCIsMTYzOTM6XCJlbi1JTlwiLDYxNTM6XCJlbi1JRVwiLDgyMDE6XCJlbi1KTVwiLDE3NDE3OlwiZW4tTVlcIiw1MTI5OlwiZW4tTlpcIiwxMzMyMTpcImVuLVBIXCIsMTg0NDE6XCJlbi1TR1wiLDcxNzc6XCJlbi1aQVwiLDExMjczOlwiZW4tVFRcIiwyMDU3OlwiZW4tR0JcIiwxMDMzOlwiZW5cIiwxMjI5NzpcImVuLVpXXCIsMTA2MTpcImV0XCIsMTA4MDpcImZvXCIsMTEyNDpcImZpbFwiLDEwMzU6XCJmaVwiLDIwNjA6XCJmci1CRVwiLDMwODQ6XCJmci1DQVwiLDEwMzY6XCJmclwiLDUxMzI6XCJmci1MVVwiLDYxNTY6XCJmci1NQ1wiLDQxMDg6XCJmci1DSFwiLDExMjI6XCJmeVwiLDExMTA6XCJnbFwiLDEwNzk6XCJrYVwiLDMwNzk6XCJkZS1BVFwiLDEwMzE6XCJkZVwiLDUxMjc6XCJkZS1MSVwiLDQxMDM6XCJkZS1MVVwiLDIwNTU6XCJkZS1DSFwiLDEwMzI6XCJlbFwiLDExMzU6XCJrbFwiLDEwOTU6XCJndVwiLDExMjg6XCJoYVwiLDEwMzc6XCJoZVwiLDEwODE6XCJoaVwiLDEwMzg6XCJodVwiLDEwMzk6XCJpc1wiLDExMzY6XCJpZ1wiLDEwNTc6XCJpZFwiLDExMTc6XCJpdVwiLDIxNDE6XCJpdS1MYXRuXCIsMjEwODpcImdhXCIsMTA3NjpcInhoXCIsMTA3NzpcInp1XCIsMTA0MDpcIml0XCIsMjA2NDpcIml0LUNIXCIsMTA0MTpcImphXCIsMTA5OTpcImtuXCIsMTA4NzpcImtrXCIsMTEwNzpcImttXCIsMTE1ODpcInF1Y1wiLDExNTk6XCJyd1wiLDEwODk6XCJzd1wiLDExMTE6XCJrb2tcIiwxMDQyOlwia29cIiwxMDg4Olwia3lcIiwxMTA4OlwibG9cIiwxMDYyOlwibHZcIiwxMDYzOlwibHRcIiwyMDk0OlwiZHNiXCIsMTEzNDpcImxiXCIsMTA3MTpcIm1rXCIsMjExMDpcIm1zLUJOXCIsMTA4NjpcIm1zXCIsMTEwMDpcIm1sXCIsMTA4MjpcIm10XCIsMTE1MzpcIm1pXCIsMTE0NjpcImFyblwiLDExMDI6XCJtclwiLDExNDg6XCJtb2hcIiwxMTA0OlwibW5cIiwyMTI4OlwibW4tQ05cIiwxMTIxOlwibmVcIiwxMDQ0OlwibmJcIiwyMDY4Olwibm5cIiwxMTU0Olwib2NcIiwxMDk2Olwib3JcIiwxMTIzOlwicHNcIiwxMDQ1OlwicGxcIiwxMDQ2OlwicHRcIiwyMDcwOlwicHQtUFRcIiwxMDk0OlwicGFcIiwxMTMxOlwicXUtQk9cIiwyMTU1OlwicXUtRUNcIiwzMTc5OlwicXVcIiwxMDQ4Olwicm9cIiwxMDQ3Olwicm1cIiwxMDQ5OlwicnVcIiw5Mjc1Olwic21uXCIsNDE1NTpcInNtai1OT1wiLDUxNzk6XCJzbWpcIiwzMTMxOlwic2UtRklcIiwxMDgzOlwic2VcIiwyMTA3Olwic2UtU0VcIiw4MjUxOlwic21zXCIsNjIwMzpcInNtYS1OT1wiLDcyMjc6XCJzbXNcIiwxMTAzOlwic2FcIiw3MTk0Olwic3ItQ3lybC1CQVwiLDMwOTg6XCJzclwiLDYxNzA6XCJzci1MYXRuLUJBXCIsMjA3NDpcInNyLUxhdG5cIiwxMTMyOlwibnNvXCIsMTA3NDpcInRuXCIsMTExNTpcInNpXCIsMTA1MTpcInNrXCIsMTA2MDpcInNsXCIsMTEyNzQ6XCJlcy1BUlwiLDE2Mzk0OlwiZXMtQk9cIiwxMzMyMjpcImVzLUNMXCIsOTIyNjpcImVzLUNPXCIsNTEzMDpcImVzLUNSXCIsNzE3ODpcImVzLURPXCIsMTIyOTg6XCJlcy1FQ1wiLDE3NDE4OlwiZXMtU1ZcIiw0MTA2OlwiZXMtR1RcIiwxODQ0MjpcImVzLUhOXCIsMjA1ODpcImVzLU1YXCIsMTk0NjY6XCJlcy1OSVwiLDYxNTQ6XCJlcy1QQVwiLDE1MzcwOlwiZXMtUFlcIiwxMDI1MDpcImVzLVBFXCIsMjA0OTA6XCJlcy1QUlwiLDMwODI6XCJlc1wiLDEwMzQ6XCJlc1wiLDIxNTE0OlwiZXMtVVNcIiwxNDM0NjpcImVzLVVZXCIsODIwMjpcImVzLVZFXCIsMjA3NzpcInN2LUZJXCIsMTA1MzpcInN2XCIsMTExNDpcInN5clwiLDEwNjQ6XCJ0Z1wiLDIxNDM6XCJ0em1cIiwxMDk3OlwidGFcIiwxMDkyOlwidHRcIiwxMDk4OlwidGVcIiwxMDU0OlwidGhcIiwxMTA1OlwiYm9cIiwxMDU1OlwidHJcIiwxMDkwOlwidGtcIiwxMTUyOlwidWdcIiwxMDU4OlwidWtcIiwxMDcwOlwiaHNiXCIsMTA1NjpcInVyXCIsMjExNTpcInV6LUN5cmxcIiwxMDkxOlwidXpcIiwxMDY2OlwidmlcIiwxMTA2OlwiY3lcIiwxMTYwOlwid29cIiwxMTU3Olwic2FoXCIsMTE0NDpcImlpXCIsMTEzMDpcInlvXCJ9LGRmPVwidXRmLTE2XCIsZWY9ezA6XCJtYWNpbnRvc2hcIiwxOlwieC1tYWMtamFwYW5lc2VcIiwyOlwieC1tYWMtY2hpbmVzZXRyYWRcIiwzOlwieC1tYWMta29yZWFuXCIsNjpcIngtbWFjLWdyZWVrXCIsNzpcIngtbWFjLWN5cmlsbGljXCIsOTpcIngtbWFjLWRldmFuYWdhaVwiLDEwOlwieC1tYWMtZ3VybXVraGlcIiwxMTpcIngtbWFjLWd1amFyYXRpXCIsMTI6XCJ4LW1hYy1vcml5YVwiLDEzOlwieC1tYWMtYmVuZ2FsaVwiLDE0OlwieC1tYWMtdGFtaWxcIiwxNTpcIngtbWFjLXRlbHVndVwiLDE2OlwieC1tYWMta2FubmFkYVwiLDE3OlwieC1tYWMtbWFsYXlhbGFtXCIsMTg6XCJ4LW1hYy1zaW5oYWxlc2VcIiwxOTpcIngtbWFjLWJ1cm1lc2VcIiwyMDpcIngtbWFjLWtobWVyXCIsMjE6XCJ4LW1hYy10aGFpXCIsMjI6XCJ4LW1hYy1sYW9cIiwyMzpcIngtbWFjLWdlb3JnaWFuXCIsMjQ6XCJ4LW1hYy1hcm1lbmlhblwiLDI1OlwieC1tYWMtY2hpbmVzZXNpbXBcIiwyNjpcIngtbWFjLXRpYmV0YW5cIiwyNzpcIngtbWFjLW1vbmdvbGlhblwiLDI4OlwieC1tYWMtZXRoaW9waWNcIiwyOTpcIngtbWFjLWNlXCIsMzA6XCJ4LW1hYy12aWV0bmFtZXNlXCIsMzE6XCJ4LW1hYy1leHRhcmFiaWNcIn0sZmY9ezE1OlwieC1tYWMtaWNlbGFuZGljXCIsMTc6XCJ4LW1hYy10dXJraXNoXCIsMTg6XCJ4LW1hYy1jcm9hdGlhblwiLDI0OlwieC1tYWMtY2VcIiwyNTpcIngtbWFjLWNlXCIsMjY6XCJ4LW1hYy1jZVwiLDI3OlwieC1tYWMtY2VcIiwyODpcIngtbWFjLWNlXCIsMzA6XCJ4LW1hYy1pY2VsYW5kaWNcIiwzNzpcIngtbWFjLXJvbWFuaWFuXCIsMzg6XCJ4LW1hYy1jZVwiLDM5OlwieC1tYWMtY2VcIiw0MDpcIngtbWFjLWNlXCIsMTQzOlwieC1tYWMtaW51aXRcIiwxNDY6XCJ4LW1hYy1nYWVsaWNcIn0sZ2Y9e3BhcnNlOlphLG1ha2U6Y2J9LGhmPVt7YmVnaW46MCxlbmQ6MTI3fSx7YmVnaW46MTI4LGVuZDoyNTV9LHtiZWdpbjoyNTYsZW5kOjM4M30se2JlZ2luOjM4NCxlbmQ6NTkxfSx7YmVnaW46NTkyLGVuZDo2ODd9LHtiZWdpbjo2ODgsZW5kOjc2N30se2JlZ2luOjc2OCxlbmQ6ODc5fSx7YmVnaW46ODgwLGVuZDoxMDIzfSx7YmVnaW46MTEzOTIsZW5kOjExNTE5fSx7YmVnaW46MTAyNCxlbmQ6MTI3OX0se2JlZ2luOjEzMjgsZW5kOjE0MjN9LHtiZWdpbjoxNDI0LGVuZDoxNTM1fSx7YmVnaW46NDIyNDAsZW5kOjQyNTU5fSx7YmVnaW46MTUzNixlbmQ6MTc5MX0se2JlZ2luOjE5ODQsZW5kOjIwNDd9LHtiZWdpbjoyMzA0LGVuZDoyNDMxfSx7YmVnaW46MjQzMixlbmQ6MjU1OX0se2JlZ2luOjI1NjAsZW5kOjI2ODd9LHtiZWdpbjoyNjg4LGVuZDoyODE1fSx7YmVnaW46MjgxNixlbmQ6Mjk0M30se2JlZ2luOjI5NDQsZW5kOjMwNzF9LHtiZWdpbjozMDcyLGVuZDozMTk5fSx7YmVnaW46MzIwMCxlbmQ6MzMyN30se2JlZ2luOjMzMjgsZW5kOjM0NTV9LHtiZWdpbjozNTg0LGVuZDozNzExfSx7YmVnaW46MzcxMixlbmQ6MzgzOX0se2JlZ2luOjQyNTYsZW5kOjQzNTF9LHtiZWdpbjo2OTEyLGVuZDo3MDM5fSx7YmVnaW46NDM1MixlbmQ6NDYwN30se2JlZ2luOjc2ODAsZW5kOjc5MzV9LHtiZWdpbjo3OTM2LGVuZDo4MTkxfSx7YmVnaW46ODE5MixlbmQ6ODMwM30se2JlZ2luOjgzMDQsZW5kOjgzNTF9LHtiZWdpbjo4MzUyLGVuZDo4Mzk5fSx7YmVnaW46ODQwMCxlbmQ6ODQ0N30se2JlZ2luOjg0NDgsZW5kOjg1Mjd9LHtiZWdpbjo4NTI4LGVuZDo4NTkxfSx7YmVnaW46ODU5MixlbmQ6ODcwM30se2JlZ2luOjg3MDQsZW5kOjg5NTl9LHtiZWdpbjo4OTYwLGVuZDo5MjE1fSx7YmVnaW46OTIxNixlbmQ6OTI3OX0se2JlZ2luOjkyODAsZW5kOjkzMTF9LHtiZWdpbjo5MzEyLGVuZDo5NDcxfSx7YmVnaW46OTQ3MixlbmQ6OTU5OX0se2JlZ2luOjk2MDAsZW5kOjk2MzF9LHtiZWdpbjo5NjMyLGVuZDo5NzI3fSx7YmVnaW46OTcyOCxlbmQ6OTk4M30se2JlZ2luOjk5ODQsZW5kOjEwMTc1fSx7YmVnaW46MTIyODgsZW5kOjEyMzUxfSx7YmVnaW46MTIzNTIsZW5kOjEyNDQ3fSx7YmVnaW46MTI0NDgsZW5kOjEyNTQzfSx7YmVnaW46MTI1NDQsZW5kOjEyNTkxfSx7YmVnaW46MTI1OTIsZW5kOjEyNjg3fSx7YmVnaW46NDMwNzIsZW5kOjQzMTM1fSx7YmVnaW46MTI4MDAsZW5kOjEzMDU1fSx7YmVnaW46MTMwNTYsZW5kOjEzMzExfSx7YmVnaW46NDQwMzIsZW5kOjU1MjE1fSx7YmVnaW46NTUyOTYsZW5kOjU3MzQzfSx7YmVnaW46Njc4NDAsZW5kOjY3ODcxfSx7YmVnaW46MTk5NjgsZW5kOjQwOTU5fSx7YmVnaW46NTczNDQsZW5kOjYzNzQzfSx7YmVnaW46MTI3MzYsZW5kOjEyNzgzfSx7YmVnaW46NjQyNTYsZW5kOjY0MzM1fSx7YmVnaW46NjQzMzYsZW5kOjY1MDIzfSx7YmVnaW46NjUwNTYsZW5kOjY1MDcxfSx7YmVnaW46NjUwNDAsZW5kOjY1MDU1fSx7YmVnaW46NjUxMDQsZW5kOjY1MTM1fSx7YmVnaW46NjUxMzYsZW5kOjY1Mjc5fSx7YmVnaW46NjUyODAsZW5kOjY1NTE5fSx7YmVnaW46NjU1MjAsZW5kOjY1NTM1fSx7YmVnaW46Mzg0MCxlbmQ6NDA5NX0se2JlZ2luOjE3OTIsZW5kOjE4NzF9LHtiZWdpbjoxOTIwLGVuZDoxOTgzfSx7YmVnaW46MzQ1NixlbmQ6MzU4M30se2JlZ2luOjQwOTYsZW5kOjQyNTV9LHtiZWdpbjo0NjA4LGVuZDo0OTkxfSx7YmVnaW46NTAyNCxlbmQ6NTExOX0se2JlZ2luOjUxMjAsZW5kOjU3NTl9LHtiZWdpbjo1NzYwLGVuZDo1NzkxfSx7YmVnaW46NTc5MixlbmQ6NTg4N30se2JlZ2luOjYwMTYsZW5kOjYxNDN9LHtiZWdpbjo2MTQ0LGVuZDo2MzE5fSx7YmVnaW46MTAyNDAsZW5kOjEwNDk1fSx7YmVnaW46NDA5NjAsZW5kOjQyMTI3fSx7YmVnaW46NTg4OCxlbmQ6NTkxOX0se2JlZ2luOjY2MzA0LGVuZDo2NjM1MX0se2JlZ2luOjY2MzUyLGVuZDo2NjM4M30se2JlZ2luOjY2NTYwLGVuZDo2NjYzOX0se2JlZ2luOjExODc4NCxlbmQ6MTE5MDM5fSx7YmVnaW46MTE5ODA4LGVuZDoxMjA4MzF9LHtiZWdpbjoxMDQ0NDgwLGVuZDoxMDQ4NTczfSx7YmVnaW46NjUwMjQsZW5kOjY1MDM5fSx7YmVnaW46OTE3NTA0LGVuZDo5MTc2MzF9LHtiZWdpbjo2NDAwLGVuZDo2NDc5fSx7YmVnaW46NjQ4MCxlbmQ6NjUyN30se2JlZ2luOjY1MjgsZW5kOjY2MjN9LHtiZWdpbjo2NjU2LGVuZDo2Njg3fSx7YmVnaW46MTEyNjQsZW5kOjExMzU5fSx7YmVnaW46MTE1NjgsZW5kOjExNjQ3fSx7YmVnaW46MTk5MDQsZW5kOjE5OTY3fSx7YmVnaW46NDMwMDgsZW5kOjQzMDU1fSx7YmVnaW46NjU1MzYsZW5kOjY1NjYzfSx7YmVnaW46NjU4NTYsZW5kOjY1OTM1fSx7YmVnaW46NjY0MzIsZW5kOjY2NDYzfSx7YmVnaW46NjY0NjQsZW5kOjY2NTI3fSx7YmVnaW46NjY2NDAsZW5kOjY2Njg3fSx7YmVnaW46NjY2ODgsZW5kOjY2NzM1fSx7YmVnaW46Njc1ODQsZW5kOjY3NjQ3fSx7YmVnaW46NjgwOTYsZW5kOjY4MTkxfSx7YmVnaW46MTE5NTUyLGVuZDoxMTk2NDd9LHtiZWdpbjo3MzcyOCxlbmQ6NzQ3NTF9LHtiZWdpbjoxMTk2NDgsZW5kOjExOTY3OX0se2JlZ2luOjcwNDAsZW5kOjcxMDN9LHtiZWdpbjo3MTY4LGVuZDo3MjQ3fSx7YmVnaW46NzI0OCxlbmQ6NzI5NX0se2JlZ2luOjQzMTM2LGVuZDo0MzIzMX0se2JlZ2luOjQzMjY0LGVuZDo0MzMxMX0se2JlZ2luOjQzMzEyLGVuZDo0MzM1OX0se2JlZ2luOjQzNTIwLGVuZDo0MzYxNX0se2JlZ2luOjY1OTM2LGVuZDo2NTk5OX0se2JlZ2luOjY2ZTMsZW5kOjY2MDQ3fSx7YmVnaW46NjYyMDgsZW5kOjY2MjcxfSx7YmVnaW46MTI3MDI0LGVuZDoxMjcxMzV9XSxqZj17cGFyc2U6ZWIsbWFrZTpmYix1bmljb2RlUmFuZ2VzOmhmLGdldFVuaWNvZGVSYW5nZTpkYn0sa2Y9e3BhcnNlOmdiLG1ha2U6aGJ9LGxmPW5ldyBBcnJheSg5KTtsZlsxXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIDE9PT1iP3tzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGRlbHRhR2x5cGhJZDp0aGlzLnBhcnNlVVNob3J0KCl9OjI9PT1iP3tzdWJzdEZvcm1hdDoyLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHN1YnN0aXR1dGU6dGhpcy5wYXJzZU9mZnNldDE2TGlzdCgpfTp2b2lkIHhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IGxvb2t1cCB0eXBlIDEgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKX0sbGZbMl09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBNdWx0aXBsZSBTdWJzdGl0dXRpb24gU3VidGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpLHtzdWJzdEZvcm1hdDphLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHNlcXVlbmNlczp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoKX19LGxmWzNdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgQWx0ZXJuYXRlIFN1YnN0aXR1dGlvbiBTdWJ0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksYWx0ZXJuYXRlU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoKX19LGxmWzRdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgbGlnYXR1cmUgdGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpLHtzdWJzdEZvcm1hdDphLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGxpZ2F0dXJlU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoZnVuY3Rpb24oKXtyZXR1cm57bGlnR2x5cGg6dGhpcy5wYXJzZVVTaG9ydCgpLGNvbXBvbmVudHM6dGhpcy5wYXJzZVVTaG9ydExpc3QodGhpcy5wYXJzZVVTaG9ydCgpLTEpfX0pfX07dmFyIG1mPXtzZXF1ZW5jZUluZGV4OlEudVNob3J0LGxvb2t1cExpc3RJbmRleDpRLnVTaG9ydH07bGZbNV09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO2lmKDE9PT1iKXJldHVybntzdWJzdEZvcm1hdDpiLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHJ1bGVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKSxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm57aW5wdXQ6dGhpcy5wYXJzZVVTaG9ydExpc3QoYS0xKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KGIsbWYpfX0pfTtpZigyPT09YilyZXR1cm57c3Vic3RGb3JtYXQ6Yixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxjbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxjbGFzc1NldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpLGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntjbGFzc2VzOnRoaXMucGFyc2VVU2hvcnRMaXN0KGEtMSksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChiLG1mKX19KX07aWYoMz09PWIpe3ZhciBjPXRoaXMucGFyc2VVU2hvcnQoKSxkPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm57c3Vic3RGb3JtYXQ6Yixjb3ZlcmFnZXM6dGhpcy5wYXJzZUxpc3QoYyxRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QoZCxtZil9fXhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IGxvb2t1cCB0eXBlIDUgZm9ybWF0IG11c3QgYmUgMSwgMiBvciAzLlwiKX0sbGZbNl09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiAxPT09Yj97c3Vic3RGb3JtYXQ6MSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxjaGFpblJ1bGVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3JldHVybntiYWNrdHJhY2s6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxpbnB1dDp0aGlzLnBhcnNlVVNob3J0TGlzdCh0aGlzLnBhcnNlU2hvcnQoKS0xKSxsb29rYWhlYWQ6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KG1mKX19KX06Mj09PWI/e3N1YnN0Rm9ybWF0OjIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksYmFja3RyYWNrQ2xhc3NEZWY6dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksaW5wdXRDbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxsb29rYWhlYWRDbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxjaGFpbkNsYXNzU2V0OnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3JldHVybntiYWNrdHJhY2s6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxpbnB1dDp0aGlzLnBhcnNlVVNob3J0TGlzdCh0aGlzLnBhcnNlU2hvcnQoKS0xKSxsb29rYWhlYWQ6dGhpcy5wYXJzZVVTaG9ydExpc3QoKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KG1mKX19KX06Mz09PWI/e3N1YnN0Rm9ybWF0OjMsYmFja3RyYWNrQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxpbnB1dENvdmVyYWdlOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmNvdmVyYWdlKSksbG9va2FoZWFkQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KG1mKX06dm9pZCB4ZS5hc3NlcnQoITEsXCIweFwiK2EudG9TdHJpbmcoMTYpK1wiOiBsb29rdXAgdHlwZSA2IGZvcm1hdCBtdXN0IGJlIDEsIDIgb3IgMy5cIil9LGxmWzddPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3hlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBFeHRlbnNpb24gU3Vic3RpdHV0aW9uIHN1YnRhYmxlIGlkZW50aWZpZXItZm9ybWF0IG11c3QgYmUgMVwiKTt2YXIgYj10aGlzLnBhcnNlVVNob3J0KCksYz1uZXcgUSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5wYXJzZVVMb25nKCkpO3JldHVybntzdWJzdEZvcm1hdDoxLGxvb2t1cFR5cGU6YixleHRlbnNpb246bGZbYl0uY2FsbChjKX19LGxmWzhdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSxcIkdTVUIgUmV2ZXJzZSBDaGFpbmluZyBDb250ZXh0dWFsIFNpbmdsZSBTdWJzdGl0dXRpb24gU3VidGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpLHtzdWJzdEZvcm1hdDphLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGJhY2t0cmFja0NvdmVyYWdlOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmNvdmVyYWdlKSksbG9va2FoZWFkQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxzdWJzdGl0dXRlczp0aGlzLnBhcnNlVVNob3J0TGlzdCgpfX07dmFyIG5mPW5ldyBBcnJheSg5KTtuZlsxXT1mdW5jdGlvbihhKXtyZXR1cm4gMT09PWEuc3Vic3RGb3JtYXQ/bmV3IEllLlRhYmxlKFwic3Vic3RpdHV0aW9uVGFibGVcIixbe25hbWU6XCJzdWJzdEZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcImNvdmVyYWdlXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkNvdmVyYWdlKGEuY292ZXJhZ2UpfSx7bmFtZTpcImRlbHRhR2x5cGhJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmRlbHRhR2x5cGhJZH1dKTpuZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjJ9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9XS5jb25jYXQoSWUudXNob3J0TGlzdChcInN1YnN0aXR1dGVcIixhLnN1YnN0aXR1dGUpKSl9LG5mWzNdPWZ1bmN0aW9uKGEpe3JldHVybiB4ZS5hc3NlcnQoMT09PWEuc3Vic3RGb3JtYXQsXCJMb29rdXAgdHlwZSAzIHN1YnN0Rm9ybWF0IG11c3QgYmUgMS5cIiksbmV3IEllLlRhYmxlKFwic3Vic3RpdHV0aW9uVGFibGVcIixbe25hbWU6XCJzdWJzdEZvcm1hdFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcImNvdmVyYWdlXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkNvdmVyYWdlKGEuY292ZXJhZ2UpfV0uY29uY2F0KEllLnRhYmxlTGlzdChcImFsdFNldFwiLGEuYWx0ZXJuYXRlU2V0cyxmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiYWx0ZXJuYXRlU2V0VGFibGVcIixJZS51c2hvcnRMaXN0KFwiYWx0ZXJuYXRlXCIsYSkpfSkpKX0sbmZbNF09ZnVuY3Rpb24oYSl7cmV0dXJuIHhlLmFzc2VydCgxPT09YS5zdWJzdEZvcm1hdCxcIkxvb2t1cCB0eXBlIDQgc3Vic3RGb3JtYXQgbXVzdCBiZSAxLlwiKSxuZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9XS5jb25jYXQoSWUudGFibGVMaXN0KFwibGlnU2V0XCIsYS5saWdhdHVyZVNldHMsZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcImxpZ2F0dXJlU2V0VGFibGVcIixJZS50YWJsZUxpc3QoXCJsaWdhdHVyZVwiLGEsZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcImxpZ2F0dXJlVGFibGVcIixbe25hbWU6XCJsaWdHbHlwaFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmxpZ0dseXBofV0uY29uY2F0KEllLnVzaG9ydExpc3QoXCJjb21wb25lbnRcIixhLmNvbXBvbmVudHMsYS5jb21wb25lbnRzLmxlbmd0aCsxKSkpfSkpfSkpKX07dmFyIG9mPXtwYXJzZTppYixtYWtlOmpifSxwZj17cGFyc2U6a2IsbWFrZTpsYn0scWY9e21ha2U6cGIsZm9udFRvVGFibGU6c2IsY29tcHV0ZUNoZWNrU3VtOm5ifTt3Yi5wcm90b3R5cGU9e3NlYXJjaFRhZzp0YixiaW5TZWFyY2g6dWIsZ2V0VGFibGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5mb250LnRhYmxlc1t0aGlzLnRhYmxlTmFtZV07cmV0dXJuIWImJmEmJihiPXRoaXMuZm9udC50YWJsZXNbdGhpcy50YWJsZU5hbWVdPXRoaXMuY3JlYXRlRGVmYXVsdFRhYmxlKCkpLGJ9LGdldFNjcmlwdE5hbWVzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRUYWJsZSgpO3JldHVybiBhP2Euc2NyaXB0cy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEudGFnfSk6W119LGdldERlZmF1bHRTY3JpcHROYW1lOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRUYWJsZSgpO2lmKGEpe2Zvcih2YXIgYj0hMSxjPTA7YzxhLnNjcmlwdHMubGVuZ3RoO2MrKyl7dmFyIGQ9YS5zY3JpcHRzW2NdLnRhZztpZihcIkRGTFRcIj09PWQpcmV0dXJuIGQ7XCJsYXRuXCI9PT1kJiYoYj0hMCl9cmV0dXJuIGI/XCJsYXRuXCI6dm9pZCAwfX0sZ2V0U2NyaXB0VGFibGU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmdldFRhYmxlKGIpO2lmKGMpe2E9YXx8XCJERkxUXCI7dmFyIGQ9Yy5zY3JpcHRzLGU9dGIoYy5zY3JpcHRzLGEpO2lmKGU+PTApcmV0dXJuIGRbZV0uc2NyaXB0O2lmKGIpe3ZhciBmPXt0YWc6YSxzY3JpcHQ6e2RlZmF1bHRMYW5nU3lzOntyZXNlcnZlZDowLHJlcUZlYXR1cmVJbmRleDo2NTUzNSxmZWF0dXJlSW5kZXhlczpbXX0sbGFuZ1N5c1JlY29yZHM6W119fTtyZXR1cm4gZC5zcGxpY2UoLTEtZSwwLGYpLGYuc2NyaXB0fX19LGdldExhbmdTeXNUYWJsZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5nZXRTY3JpcHRUYWJsZShhLGMpO2lmKGQpe2lmKCFifHxcImRmbHRcIj09PWJ8fFwiREZMVFwiPT09YilyZXR1cm4gZC5kZWZhdWx0TGFuZ1N5czt2YXIgZT10YihkLmxhbmdTeXNSZWNvcmRzLGIpO2lmKGU+PTApcmV0dXJuIGQubGFuZ1N5c1JlY29yZHNbZV0ubGFuZ1N5cztpZihjKXt2YXIgZj17dGFnOmIsbGFuZ1N5czp7cmVzZXJ2ZWQ6MCxyZXFGZWF0dXJlSW5kZXg6NjU1MzUsZmVhdHVyZUluZGV4ZXM6W119fTtyZXR1cm4gZC5sYW5nU3lzUmVjb3Jkcy5zcGxpY2UoLTEtZSwwLGYpLGYubGFuZ1N5c319fSxnZXRGZWF0dXJlVGFibGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5nZXRMYW5nU3lzVGFibGUoYSxiLGQpO2lmKGUpe2Zvcih2YXIgZixnPWUuZmVhdHVyZUluZGV4ZXMsaD10aGlzLmZvbnQudGFibGVzW3RoaXMudGFibGVOYW1lXS5mZWF0dXJlcyxpPTA7aTxnLmxlbmd0aDtpKyspaWYoZj1oW2dbaV1dLGYudGFnPT09YylyZXR1cm4gZi5mZWF0dXJlO2lmKGQpe3ZhciBqPWgubGVuZ3RoO3JldHVybiB4ZS5hc3NlcnQoMD09PWp8fGM+PWhbai0xXS50YWcsXCJGZWF0dXJlcyBtdXN0IGJlIGFkZGVkIGluIGFscGhhYmV0aWNhbCBvcmRlci5cIiksZj17dGFnOmMsZmVhdHVyZTp7cGFyYW1zOjAsbG9va3VwTGlzdEluZGV4ZXM6W119fSxoLnB1c2goZiksZy5wdXNoKGopLGYuZmVhdHVyZX19fSxnZXRMb29rdXBUYWJsZXM6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj10aGlzLmdldEZlYXR1cmVUYWJsZShhLGIsYyxlKSxnPVtdO2lmKGYpe2Zvcih2YXIgaCxpPWYubG9va3VwTGlzdEluZGV4ZXMsaj10aGlzLmZvbnQudGFibGVzW3RoaXMudGFibGVOYW1lXS5sb29rdXBzLGs9MDtrPGkubGVuZ3RoO2srKyloPWpbaVtrXV0saC5sb29rdXBUeXBlPT09ZCYmZy5wdXNoKGgpO2lmKDA9PT1nLmxlbmd0aCYmZSl7aD17bG9va3VwVHlwZTpkLGxvb2t1cEZsYWc6MCxzdWJ0YWJsZXM6W10sbWFya0ZpbHRlcmluZ1NldDp2b2lkIDB9O3ZhciBsPWoubGVuZ3RoO3JldHVybiBqLnB1c2goaCksaS5wdXNoKGwpLFtoXX19cmV0dXJuIGd9LGdldEdseXBoQ2xhc3M6ZnVuY3Rpb24oYSxiKXtzd2l0Y2goYS5mb3JtYXQpe2Nhc2UgMTpyZXR1cm4gYS5zdGFydEdseXBoPD1iJiZiPGEuc3RhcnRHbHlwaCthLmNsYXNzZXMubGVuZ3RoP2EuY2xhc3Nlc1tiLWEuc3RhcnRHbHlwaF06MDtjYXNlIDI6dmFyIGM9dmIoYS5yYW5nZXMsYik7cmV0dXJuIGM/Yy5jbGFzc0lkOjB9fSxnZXRDb3ZlcmFnZUluZGV4OmZ1bmN0aW9uKGEsYil7c3dpdGNoKGEuZm9ybWF0KXtjYXNlIDE6dmFyIGM9dWIoYS5nbHlwaHMsYik7cmV0dXJuIGM+PTA/YzotMTtjYXNlIDI6dmFyIGQ9dmIoYS5yYW5nZXMsYik7cmV0dXJuIGQ/ZC5pbmRleCtiLWQuc3RhcnQ6LTF9fSxleHBhbmRDb3ZlcmFnZTpmdW5jdGlvbihhKXtpZigxPT09YS5mb3JtYXQpcmV0dXJuIGEuZ2x5cGhzO2Zvcih2YXIgYj1bXSxjPWEucmFuZ2VzLGQ9MDtkPGMubGVuZ3RoO2QrKylmb3IodmFyIGU9Y1tkXSxmPWUuc3RhcnQsZz1lLmVuZCxoPWY7aDw9ZztoKyspYi5wdXNoKGgpO3JldHVybiBifX0seGIucHJvdG90eXBlPXdiLnByb3RvdHlwZSx4Yi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0RGVmYXVsdFNjcmlwdE5hbWUoKTt0aGlzLmRlZmF1bHRLZXJuaW5nVGFibGVzPXRoaXMuZ2V0S2VybmluZ1RhYmxlcyhhKX0seGIucHJvdG90eXBlLmdldEtlcm5pbmdWYWx1ZT1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT0wO2U8YS5sZW5ndGg7ZSsrKWZvcih2YXIgZj1hW2VdLnN1YnRhYmxlcyxnPTA7ZzxmLmxlbmd0aDtnKyspe3ZhciBoPWZbZ10saT1kLmdldENvdmVyYWdlSW5kZXgoaC5jb3ZlcmFnZSxiKTtpZighKGk8MCkpc3dpdGNoKGgucG9zRm9ybWF0KXtjYXNlIDE6Zm9yKHZhciBqPWgucGFpclNldHNbaV0saz0wO2s8ai5sZW5ndGg7aysrKXt2YXIgbD1qW2tdO2lmKGwuc2Vjb25kR2x5cGg9PT1jKXJldHVybiBsLnZhbHVlMSYmbC52YWx1ZTEueEFkdmFuY2V8fDB9YnJlYWs7Y2FzZSAyOnZhciBtPWQuZ2V0R2x5cGhDbGFzcyhoLmNsYXNzRGVmMSxiKSxuPWQuZ2V0R2x5cGhDbGFzcyhoLmNsYXNzRGVmMixjKSxvPWguY2xhc3NSZWNvcmRzW21dW25dO3JldHVybiBvLnZhbHVlMSYmby52YWx1ZTEueEFkdmFuY2V8fDB9fXJldHVybiAwfSx4Yi5wcm90b3R5cGUuZ2V0S2VybmluZ1RhYmxlcz1mdW5jdGlvbihhLGIpe2lmKHRoaXMuZm9udC50YWJsZXMuZ3BvcylyZXR1cm4gdGhpcy5nZXRMb29rdXBUYWJsZXMoYSxiLFwia2VyblwiLDIpfSx5Yi5wcm90b3R5cGU9d2IucHJvdG90eXBlLHliLnByb3RvdHlwZS5jcmVhdGVEZWZhdWx0VGFibGU9ZnVuY3Rpb24oKXtyZXR1cm57dmVyc2lvbjoxLHNjcmlwdHM6W3t0YWc6XCJERkxUXCIsc2NyaXB0OntkZWZhdWx0TGFuZ1N5czp7cmVzZXJ2ZWQ6MCxyZXFGZWF0dXJlSW5kZXg6NjU1MzUsZmVhdHVyZUluZGV4ZXM6W119LGxhbmdTeXNSZWNvcmRzOltdfX1dLGZlYXR1cmVzOltdLGxvb2t1cHM6W119fSx5Yi5wcm90b3R5cGUuZ2V0U2luZ2xlPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPVtdLGY9dGhpcy5nZXRMb29rdXBUYWJsZXMoYixjLGEsMSksZz0wO2c8Zi5sZW5ndGg7ZysrKWZvcih2YXIgaD1mW2ddLnN1YnRhYmxlcyxpPTA7aTxoLmxlbmd0aDtpKyspe3ZhciBqPWhbaV0saz1kLmV4cGFuZENvdmVyYWdlKGouY292ZXJhZ2UpLGw9dm9pZCAwO2lmKDE9PT1qLnN1YnN0Rm9ybWF0KXt2YXIgbT1qLmRlbHRhR2x5cGhJZDtmb3IobD0wO2w8ay5sZW5ndGg7bCsrKXt2YXIgbj1rW2xdO2UucHVzaCh7c3ViOm4sYnk6bittfSl9fWVsc2V7dmFyIG89ai5zdWJzdGl0dXRlO2ZvcihsPTA7bDxrLmxlbmd0aDtsKyspZS5wdXNoKHtzdWI6a1tsXSxieTpvW2xdfSl9fXJldHVybiBlfSx5Yi5wcm90b3R5cGUuZ2V0QWx0ZXJuYXRlcz1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT1bXSxmPXRoaXMuZ2V0TG9va3VwVGFibGVzKGIsYyxhLDMpLGc9MDtnPGYubGVuZ3RoO2crKylmb3IodmFyIGg9ZltnXS5zdWJ0YWJsZXMsaT0wO2k8aC5sZW5ndGg7aSsrKWZvcih2YXIgaj1oW2ldLGs9ZC5leHBhbmRDb3ZlcmFnZShqLmNvdmVyYWdlKSxsPWouYWx0ZXJuYXRlU2V0cyxtPTA7bTxrLmxlbmd0aDttKyspZS5wdXNoKHtzdWI6a1ttXSxieTpsW21dfSk7cmV0dXJuIGV9LHliLnByb3RvdHlwZS5nZXRMaWdhdHVyZXM9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD10aGlzLGU9W10sZj10aGlzLmdldExvb2t1cFRhYmxlcyhiLGMsYSw0KSxnPTA7ZzxmLmxlbmd0aDtnKyspZm9yKHZhciBoPWZbZ10uc3VidGFibGVzLGk9MDtpPGgubGVuZ3RoO2krKylmb3IodmFyIGo9aFtpXSxrPWQuZXhwYW5kQ292ZXJhZ2Uoai5jb3ZlcmFnZSksbD1qLmxpZ2F0dXJlU2V0cyxtPTA7bTxrLmxlbmd0aDttKyspZm9yKHZhciBuPWtbbV0sbz1sW21dLHA9MDtwPG8ubGVuZ3RoO3ArKyl7dmFyIHE9b1twXTtlLnB1c2goe3N1Yjpbbl0uY29uY2F0KHEuY29tcG9uZW50cyksYnk6cS5saWdHbHlwaH0pfXJldHVybiBlfSx5Yi5wcm90b3R5cGUuYWRkU2luZ2xlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZ2V0TG9va3VwVGFibGVzKGMsZCxhLDEsITApWzBdLGY9QWIoZSwyLHtzdWJzdEZvcm1hdDoyLGNvdmVyYWdlOntmb3JtYXQ6MSxnbHlwaHM6W119LHN1YnN0aXR1dGU6W119KTt4ZS5hc3NlcnQoMT09PWYuY292ZXJhZ2UuZm9ybWF0LFwiTGlnYXR1cmU6IHVuYWJsZSB0byBtb2RpZnkgY292ZXJhZ2UgdGFibGUgZm9ybWF0IFwiK2YuY292ZXJhZ2UuZm9ybWF0KTt2YXIgZz1iLnN1YixoPXRoaXMuYmluU2VhcmNoKGYuY292ZXJhZ2UuZ2x5cGhzLGcpO2g8MCYmKGg9LTEtaCxmLmNvdmVyYWdlLmdseXBocy5zcGxpY2UoaCwwLGcpLGYuc3Vic3RpdHV0ZS5zcGxpY2UoaCwwLDApKSxmLnN1YnN0aXR1dGVbaF09Yi5ieX0seWIucHJvdG90eXBlLmFkZEFsdGVybmF0ZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldExvb2t1cFRhYmxlcyhjLGQsYSwzLCEwKVswXSxmPUFiKGUsMSx7c3Vic3RGb3JtYXQ6MSxjb3ZlcmFnZTp7Zm9ybWF0OjEsZ2x5cGhzOltdfSxhbHRlcm5hdGVTZXRzOltdfSk7eGUuYXNzZXJ0KDE9PT1mLmNvdmVyYWdlLmZvcm1hdCxcIkxpZ2F0dXJlOiB1bmFibGUgdG8gbW9kaWZ5IGNvdmVyYWdlIHRhYmxlIGZvcm1hdCBcIitmLmNvdmVyYWdlLmZvcm1hdCk7dmFyIGc9Yi5zdWIsaD10aGlzLmJpblNlYXJjaChmLmNvdmVyYWdlLmdseXBocyxnKTtoPDAmJihoPS0xLWgsZi5jb3ZlcmFnZS5nbHlwaHMuc3BsaWNlKGgsMCxnKSxmLmFsdGVybmF0ZVNldHMuc3BsaWNlKGgsMCwwKSksZi5hbHRlcm5hdGVTZXRzW2hdPWIuYnl9LHliLnByb3RvdHlwZS5hZGRMaWdhdHVyZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldExvb2t1cFRhYmxlcyhjLGQsYSw0LCEwKVswXSxmPWUuc3VidGFibGVzWzBdO2Z8fChmPXtzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOntmb3JtYXQ6MSxnbHlwaHM6W119LGxpZ2F0dXJlU2V0czpbXX0sZS5zdWJ0YWJsZXNbMF09ZikseGUuYXNzZXJ0KDE9PT1mLmNvdmVyYWdlLmZvcm1hdCxcIkxpZ2F0dXJlOiB1bmFibGUgdG8gbW9kaWZ5IGNvdmVyYWdlIHRhYmxlIGZvcm1hdCBcIitmLmNvdmVyYWdlLmZvcm1hdCk7dmFyIGc9Yi5zdWJbMF0saD1iLnN1Yi5zbGljZSgxKSxpPXtsaWdHbHlwaDpiLmJ5LGNvbXBvbmVudHM6aH0saj10aGlzLmJpblNlYXJjaChmLmNvdmVyYWdlLmdseXBocyxnKTtpZihqPj0wKXtmb3IodmFyIGs9Zi5saWdhdHVyZVNldHNbal0sbD0wO2w8ay5sZW5ndGg7bCsrKWlmKHpiKGtbbF0uY29tcG9uZW50cyxoKSlyZXR1cm47ay5wdXNoKGkpfWVsc2Ugaj0tMS1qLGYuY292ZXJhZ2UuZ2x5cGhzLnNwbGljZShqLDAsZyksZi5saWdhdHVyZVNldHMuc3BsaWNlKGosMCxbaV0pfSx5Yi5wcm90b3R5cGUuZ2V0RmVhdHVyZT1mdW5jdGlvbihhLGIsYyl7aWYoL3NzXFxkXFxkLy50ZXN0KGEpKXJldHVybiB0aGlzLmdldFNpbmdsZShhLGIsYyk7c3dpdGNoKGEpe2Nhc2VcImFhbHRcIjpjYXNlXCJzYWx0XCI6cmV0dXJuIHRoaXMuZ2V0U2luZ2xlKGEsYixjKS5jb25jYXQodGhpcy5nZXRBbHRlcm5hdGVzKGEsYixjKSk7Y2FzZVwiZGxpZ1wiOmNhc2VcImxpZ2FcIjpjYXNlXCJybGlnXCI6cmV0dXJuIHRoaXMuZ2V0TGlnYXR1cmVzKGEsYixjKX19LHliLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoL3NzXFxkXFxkLy50ZXN0KGEpKXJldHVybiB0aGlzLmFkZFNpbmdsZShhLGIsYyxkKTtzd2l0Y2goYSl7Y2FzZVwiYWFsdFwiOmNhc2VcInNhbHRcIjpyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYi5ieT90aGlzLmFkZFNpbmdsZShhLGIsYyxkKTp0aGlzLmFkZEFsdGVybmF0ZShhLGIsYyxkKTtjYXNlXCJkbGlnXCI6Y2FzZVwibGlnYVwiOmNhc2VcInJsaWdcIjpyZXR1cm4gdGhpcy5hZGRMaWdhdHVyZShhLGIsYyxkKX19O3ZhciByZixzZix0Zix1Zix2Zj17Z2V0UGF0aDpKYixwYXJzZTpMYn0sd2Y9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zclBlcmlvZCxjPXRoaXMuc3JQaGFzZSxkPXRoaXMuc3JUaHJlc2hvbGQsZT0xO3JldHVybiBhPDAmJihhPS1hLGU9LTEpLGErPWQtYyxhPU1hdGgudHJ1bmMoYS9iKSpiLGErPWMsYTwwP2MqZTphKmV9LHhmPXt4OjEseTowLGF4aXM6XCJ4XCIsZGlzdGFuY2U6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKGM/YS54bzphLngpLShkP2IueG86Yi54KX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7cmV0dXJuIGQmJmQhPT10aGlzPyhlPWQuZGlzdGFuY2UoYSxiLCEwLCEwKSxmPWQuZGlzdGFuY2UoYSxjLCEwLCEwKSxpPWQuZGlzdGFuY2UoYixiLCExLCEwKSxqPWQuZGlzdGFuY2UoYyxjLCExLCEwKSxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZCB4Zi5zZXRSZWxhdGl2ZShhLGEsKGkraikvMixkLCEwKTp2b2lkIHhmLnNldFJlbGF0aXZlKGEsYSwoaSpoK2oqZykvayxkLCEwKSk6KGU9YS54by1iLnhvLGY9YS54by1jLnhvLGk9Yi54LWIueG8saj1jLngtYy54byxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZChhLng9YS54bysoaStqKS8yKTp2b2lkKGEueD1hLnhvKyhpKmgraipnKS9rKSl9LG5vcm1hbFNsb3BlOk51bWJlci5ORUdBVElWRV9JTkZJTklUWSxzZXRSZWxhdGl2ZTpmdW5jdGlvbihhLGIsYyxkLGUpe2lmKCFkfHxkPT09dGhpcylyZXR1cm4gdm9pZChhLng9KGU/Yi54bzpiLngpK2MpO3ZhciBmPWU/Yi54bzpiLngsZz1lP2IueW86Yi55LGg9ZitjKmQueCxpPWcrYypkLnk7YS54PWgrKGEueS1pKS9kLm5vcm1hbFNsb3BlfSxzbG9wZTowLHRvdWNoOmZ1bmN0aW9uKGEpe2EueFRvdWNoZWQ9ITB9LHRvdWNoZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueFRvdWNoZWR9LHVudG91Y2g6ZnVuY3Rpb24oYSl7YS54VG91Y2hlZD0hMX19LHlmPXt4OjAseToxLGF4aXM6XCJ5XCIsZGlzdGFuY2U6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKGM/YS55bzphLnkpLShkP2IueW86Yi55KX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7cmV0dXJuIGQmJmQhPT10aGlzPyhlPWQuZGlzdGFuY2UoYSxiLCEwLCEwKSxmPWQuZGlzdGFuY2UoYSxjLCEwLCEwKSxpPWQuZGlzdGFuY2UoYixiLCExLCEwKSxqPWQuZGlzdGFuY2UoYyxjLCExLCEwKSxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZCB5Zi5zZXRSZWxhdGl2ZShhLGEsKGkraikvMixkLCEwKTp2b2lkIHlmLnNldFJlbGF0aXZlKGEsYSwoaSpoK2oqZykvayxkLCEwKSk6KGU9YS55by1iLnlvLGY9YS55by1jLnlvLGk9Yi55LWIueW8saj1jLnktYy55byxnPU1hdGguYWJzKGUpLGg9TWF0aC5hYnMoZiksMD09PShrPWcraCk/dm9pZChhLnk9YS55bysoaStqKS8yKTp2b2lkKGEueT1hLnlvKyhpKmgraipnKS9rKSl9LG5vcm1hbFNsb3BlOjAsc2V0UmVsYXRpdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZighZHx8ZD09PXRoaXMpcmV0dXJuIHZvaWQoYS55PShlP2IueW86Yi55KStjKTt2YXIgZj1lP2IueG86Yi54LGc9ZT9iLnlvOmIueSxoPWYrYypkLngsaT1nK2MqZC55O2EueT1pK2Qubm9ybWFsU2xvcGUqKGEueC1oKX0sc2xvcGU6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHRvdWNoOmZ1bmN0aW9uKGEpe2EueVRvdWNoZWQ9ITB9LHRvdWNoZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEueVRvdWNoZWR9LHVudG91Y2g6ZnVuY3Rpb24oYSl7YS55VG91Y2hlZD0hMX19O09iamVjdC5mcmVlemUoeGYpLE9iamVjdC5mcmVlemUoeWYpLFRiLnByb3RvdHlwZS5kaXN0YW5jZT1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy54KnhmLmRpc3RhbmNlKGEsYixjLGQpK3RoaXMueSp5Zi5kaXN0YW5jZShhLGIsYyxkKX0sVGIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrO2lmKGc9ZC5kaXN0YW5jZShhLGIsITAsITApLGg9ZC5kaXN0YW5jZShhLGMsITAsITApLGU9ZC5kaXN0YW5jZShiLGIsITEsITApLGY9ZC5kaXN0YW5jZShjLGMsITEsITApLGk9TWF0aC5hYnMoZyksaj1NYXRoLmFicyhoKSwwPT09KGs9aStqKSlyZXR1cm4gdm9pZCB0aGlzLnNldFJlbGF0aXZlKGEsYSwoZStmKS8yLGQsITApO3RoaXMuc2V0UmVsYXRpdmUoYSxhLChlKmorZippKS9rLGQsITApfSxUYi5wcm90b3R5cGUuc2V0UmVsYXRpdmU9ZnVuY3Rpb24oYSxiLGMsZCxlKXtkPWR8fHRoaXM7dmFyIGY9ZT9iLnhvOmIueCxnPWU/Yi55bzpiLnksaD1mK2MqZC54LGk9ZytjKmQueSxqPWQubm9ybWFsU2xvcGUsaz10aGlzLnNsb3BlLGw9YS54LG09YS55O2EueD0oaypsLWoqaCtpLW0pLyhrLWopLGEueT1rKihhLngtbCkrbX0sVGIucHJvdG90eXBlLnRvdWNoPWZ1bmN0aW9uKGEpe2EueFRvdWNoZWQ9ITAsYS55VG91Y2hlZD0hMH0sVmIucHJvdG90eXBlLm5leHRUb3VjaGVkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLm5leHRQb2ludE9uQ29udG91cjshYS50b3VjaGVkKGIpJiZiIT09dGhpczspYj1iLm5leHRQb2ludE9uQ29udG91cjtyZXR1cm4gYn0sVmIucHJvdG90eXBlLnByZXZUb3VjaGVkPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLnByZXZQb2ludE9uQ29udG91cjshYS50b3VjaGVkKGIpJiZiIT09dGhpczspYj1iLnByZXZQb2ludE9uQ29udG91cjtyZXR1cm4gYn07dmFyIHpmPU9iamVjdC5mcmVlemUobmV3IFZiKDAsMCkpLEFmPXtjdkN1dEluOjE3LzE2LGRlbHRhQmFzZTo5LGRlbHRhU2hpZnQ6LjEyNSxsb29wOjEsbWluRGlzOjEsYXV0b0ZsaXA6ITB9O01iLnByb3RvdHlwZS5leGVjPWZ1bmN0aW9uKGIsYyl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgc2l6ZSBpcyBub3QgYSBudW1iZXIhXCIpO2lmKCEodGhpcy5fZXJyb3JTdGF0ZT4yKSl7dmFyIGQ9dGhpcy5mb250LGU9dGhpcy5fcHJlcFN0YXRlO2lmKCFlfHxlLnBwZW0hPT1jKXt2YXIgZj10aGlzLl9mcGdtU3RhdGU7aWYoIWYpe1diLnByb3RvdHlwZT1BZixmPXRoaXMuX2ZwZ21TdGF0ZT1uZXcgV2IoXCJmcGdtXCIsZC50YWJsZXMuZnBnbSksZi5mdW5jcz1bXSxmLmZvbnQ9ZCxhLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIEZQR00tLS1cIiksZi5zdGVwPS0xKTt0cnl7c2YoZil9Y2F0Y2goYSl7cmV0dXJuIGNvbnNvbGUubG9nKFwiSGludGluZyBlcnJvciBpbiBGUEdNOlwiK2EpLHZvaWQodGhpcy5fZXJyb3JTdGF0ZT0zKX19V2IucHJvdG90eXBlPWYsZT10aGlzLl9wcmVwU3RhdGU9bmV3IFdiKFwicHJlcFwiLGQudGFibGVzLnByZXApLGUucHBlbT1jO3ZhciBnPWQudGFibGVzLmN2dDtpZihnKWZvcih2YXIgaD1lLmN2dD1uZXcgQXJyYXkoZy5sZW5ndGgpLGk9Yy9kLnVuaXRzUGVyRW0saj0wO2o8Zy5sZW5ndGg7aisrKWhbal09Z1tqXSppO2Vsc2UgZS5jdnQ9W107YS5ERUJVRyYmKGNvbnNvbGUubG9nKFwiLS0tRVhFQyBQUkVQLS0tXCIpLGUuc3RlcD0tMSk7dHJ5e3NmKGUpfWNhdGNoKGEpe3RoaXMuX2Vycm9yU3RhdGU8MiYmY29uc29sZS5sb2coXCJIaW50aW5nIGVycm9yIGluIFBSRVA6XCIrYSksdGhpcy5fZXJyb3JTdGF0ZT0yfX1pZighKHRoaXMuX2Vycm9yU3RhdGU+MSkpdHJ5e3JldHVybiB0ZihiLGUpfWNhdGNoKGEpe3JldHVybiB0aGlzLl9lcnJvclN0YXRlPDEmJihjb25zb2xlLmxvZyhcIkhpbnRpbmcgZXJyb3I6XCIrYSksY29uc29sZS5sb2coXCJOb3RlOiBmdXJ0aGVyIGhpbnRpbmcgZXJyb3JzIGFyZSBzaWxlbmNlZFwiKSksdm9pZCh0aGlzLl9lcnJvclN0YXRlPTEpfX19LHRmPWZ1bmN0aW9uKGIsYyl7dmFyIGQsZSxmLGc9Yy5wcGVtL2MuZm9udC51bml0c1BlckVtLGg9ZyxpPWIuY29tcG9uZW50cztpZihXYi5wcm90b3R5cGU9YyxpKXt2YXIgaj1jLmZvbnQ7ZT1bXSxkPVtdO2Zvcih2YXIgaz0wO2s8aS5sZW5ndGg7aysrKXt2YXIgbD1pW2tdLG09ai5nbHlwaHMuZ2V0KGwuZ2x5cGhJbmRleCk7Zj1uZXcgV2IoXCJnbHlmXCIsbS5pbnN0cnVjdGlvbnMpLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgQ09NUCBcIitrK1wiLS0tXCIpLGYuc3RlcD0tMSksdWYobSxmLGcsaCk7Zm9yKHZhciBuPU1hdGgucm91bmQobC5keCpnKSxvPU1hdGgucm91bmQobC5keSpoKSxwPWYuZ1pvbmUscT1mLmNvbnRvdXJzLHI9MDtyPHAubGVuZ3RoO3IrKyl7dmFyIHM9cFtyXTtzLnhUb3VjaGVkPXMueVRvdWNoZWQ9ITEscy54bz1zLng9cy54K24scy55bz1zLnk9cy55K299dmFyIHQ9ZS5sZW5ndGg7ZS5wdXNoLmFwcGx5KGUscCk7Zm9yKHZhciB1PTA7dTxxLmxlbmd0aDt1KyspZC5wdXNoKHFbdV0rdCl9Yi5pbnN0cnVjdGlvbnMmJiFmLmluaGliaXRHcmlkRml0JiYoZj1uZXcgV2IoXCJnbHlmXCIsYi5pbnN0cnVjdGlvbnMpLGYuZ1pvbmU9Zi56MD1mLnoxPWYuejI9ZSxmLmNvbnRvdXJzPWQsZS5wdXNoKG5ldyBWYigwLDApLG5ldyBWYihNYXRoLnJvdW5kKGIuYWR2YW5jZVdpZHRoKmcpLDApKSxhLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIENPTVBPU0lURS0tLVwiKSxmLnN0ZXA9LTEpLHNmKGYpLGUubGVuZ3RoLT0yKX1lbHNlIGY9bmV3IFdiKFwiZ2x5ZlwiLGIuaW5zdHJ1Y3Rpb25zKSxhLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIEdMWVBILS0tXCIpLGYuc3RlcD0tMSksdWYoYixmLGcsaCksZT1mLmdab25lO3JldHVybiBlfSx1Zj1mdW5jdGlvbihiLGMsZCxlKXtmb3IodmFyIGYsZz1iLnBvaW50c3x8W10saD1nLmxlbmd0aCxpPWMuZ1pvbmU9Yy56MD1jLnoxPWMuejI9W10saj1jLmNvbnRvdXJzPVtdLGs9MDtrPGg7aysrKWY9Z1trXSxpW2tdPW5ldyBWYihmLngqZCxmLnkqZSxmLmxhc3RQb2ludE9mQ29udG91cixmLm9uQ3VydmUpO2Zvcih2YXIgbCxtLG49MDtuPGg7bisrKWY9aVtuXSxsfHwobD1mLGoucHVzaChuKSksZi5sYXN0UG9pbnRPZkNvbnRvdXI/KGYubmV4dFBvaW50T25Db250b3VyPWwsbC5wcmV2UG9pbnRPbkNvbnRvdXI9ZixsPXZvaWQgMCk6KG09aVtuKzFdLGYubmV4dFBvaW50T25Db250b3VyPW0sbS5wcmV2UG9pbnRPbkNvbnRvdXI9Zik7aWYoIWMuaW5oaWJpdEdyaWRGaXQpe2lmKGEuREVCVUcpe2NvbnNvbGUubG9nKFwiUFJPQ0VTU0lORyBHTFlQSFwiLGMuc3RhY2spO2Zvcih2YXIgbz0wO288aDtvKyspY29uc29sZS5sb2cobyxpW29dLngsaVtvXS55KX1pZihpLnB1c2gobmV3IFZiKDAsMCksbmV3IFZiKE1hdGgucm91bmQoYi5hZHZhbmNlV2lkdGgqZCksMCkpLHNmKGMpLGkubGVuZ3RoLT0yLGEuREVCVUcpe2NvbnNvbGUubG9nKFwiRklOSVNIRUQgR0xZUEhcIixjLnN0YWNrKTtmb3IodmFyIHA9MDtwPGg7cCsrKWNvbnNvbGUubG9nKHAsaVtwXS54LGlbcF0ueSl9fX0sc2Y9ZnVuY3Rpb24oYil7dmFyIGM9Yi5wcm9nO2lmKGMpe3ZhciBkLGU9Yy5sZW5ndGg7Zm9yKGIuaXA9MDtiLmlwPGU7Yi5pcCsrKXtpZihhLkRFQlVHJiZiLnN0ZXArKywhKGQ9cmZbY1tiLmlwXV0pKXRocm93IG5ldyBFcnJvcihcInVua25vd24gaW5zdHJ1Y3Rpb246IDB4XCIrTnVtYmVyKGNbYi5pcF0pLnRvU3RyaW5nKDE2KSk7ZChiKX19fSxyZj1bWmIuYmluZCh2b2lkIDAseWYpLFpiLmJpbmQodm9pZCAwLHhmKSwkYi5iaW5kKHZvaWQgMCx5ZiksJGIuYmluZCh2b2lkIDAseGYpLF9iLmJpbmQodm9pZCAwLHlmKSxfYi5iaW5kKHZvaWQgMCx4ZiksYWMuYmluZCh2b2lkIDAsMCksYWMuYmluZCh2b2lkIDAsMSksYmMuYmluZCh2b2lkIDAsMCksYmMuYmluZCh2b2lkIDAsMSksY2MsZGMsZWMsZmMsZ2MsaGMsaWMsamMsa2MsbGMsbWMsbmMsb2MscGMscWMscmMsc2MsdGMsdWMsdmMsdm9pZCAwLHZvaWQgMCx3Yyx4Yyx5Yyx6YyxBYyxEYyxFYyx2b2lkIDAsdm9pZCAwLHZvaWQgMCxCYyxDYyxGYyx2b2lkIDAsR2MuYmluZCh2b2lkIDAsMCksR2MuYmluZCh2b2lkIDAsMSksSGMuYmluZCh2b2lkIDAseWYpLEhjLmJpbmQodm9pZCAwLHhmKSxJYy5iaW5kKHZvaWQgMCwwKSxJYy5iaW5kKHZvaWQgMCwxKSxKYy5iaW5kKHZvaWQgMCwwKSxKYy5iaW5kKHZvaWQgMCwxKSxLYy5iaW5kKHZvaWQgMCwwKSxLYy5iaW5kKHZvaWQgMCwxKSxMYyxNYyxOYy5iaW5kKHZvaWQgMCwwKSxOYy5iaW5kKHZvaWQgMCwxKSxPYyxQYyxRYy5iaW5kKHZvaWQgMCwwKSxRYy5iaW5kKHZvaWQgMCwxKSxSYyxTYyxUYyxVYyxWYyxXYyxYYy5iaW5kKHZvaWQgMCwwKSxYYy5iaW5kKHZvaWQgMCwxKSx2b2lkIDAsWWMuYmluZCh2b2lkIDAsMCksWWMuYmluZCh2b2lkIDAsMSksWmMsdm9pZCAwLCRjLHZvaWQgMCx2b2lkIDAsX2MsYWQsYmQsY2QsZGQsZWQsZmQsZ2QsaGQsaWQsamQsa2QsbGQsbWQuYmluZCh2b2lkIDAsMSksbmQsb2QscGQscWQscmQsc2QsdGQsdWQsdmQsd2QseGQuYmluZCh2b2lkIDAsMCkseGQuYmluZCh2b2lkIDAsMSkseGQuYmluZCh2b2lkIDAsMikseGQuYmluZCh2b2lkIDAsMyksdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHlkLG1kLmJpbmQodm9pZCAwLDIpLG1kLmJpbmQodm9pZCAwLDMpLHpkLmJpbmQodm9pZCAwLDEpLHpkLmJpbmQodm9pZCAwLDIpLHpkLmJpbmQodm9pZCAwLDMpLEFkLEJkLHZvaWQgMCx2b2lkIDAsQ2Qsdm9pZCAwLERkLEVkLHhjLHhjLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsRmQsR2QuYmluZCh2b2lkIDAsMCksR2QuYmluZCh2b2lkIDAsMSksSGQsdm9pZCAwLElkLEpkLEtkLExkLE1kLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE5kLmJpbmQodm9pZCAwLDEpLE5kLmJpbmQodm9pZCAwLDIpLE5kLmJpbmQodm9pZCAwLDMpLE5kLmJpbmQodm9pZCAwLDQpLE5kLmJpbmQodm9pZCAwLDUpLE5kLmJpbmQodm9pZCAwLDYpLE5kLmJpbmQodm9pZCAwLDcpLE5kLmJpbmQodm9pZCAwLDgpLE9kLmJpbmQodm9pZCAwLDEpLE9kLmJpbmQodm9pZCAwLDIpLE9kLmJpbmQodm9pZCAwLDMpLE9kLmJpbmQodm9pZCAwLDQpLE9kLmJpbmQodm9pZCAwLDUpLE9kLmJpbmQodm9pZCAwLDYpLE9kLmJpbmQodm9pZCAwLDcpLE9kLmJpbmQodm9pZCAwLDgpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDAsMCksUGQuYmluZCh2b2lkIDAsMCwwLDAsMCwxKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwwLDIpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDAsMyksUGQuYmluZCh2b2lkIDAsMCwwLDAsMSwwKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwxLDEpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDEsMiksUGQuYmluZCh2b2lkIDAsMCwwLDAsMSwzKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwwLDApLFBkLmJpbmQodm9pZCAwLDAsMCwxLDAsMSksUGQuYmluZCh2b2lkIDAsMCwwLDEsMCwyKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwwLDMpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDEsMCksUGQuYmluZCh2b2lkIDAsMCwwLDEsMSwxKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwxLDIpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDEsMyksUGQuYmluZCh2b2lkIDAsMCwxLDAsMCwwKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwwLDEpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDAsMiksUGQuYmluZCh2b2lkIDAsMCwxLDAsMCwzKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwxLDApLFBkLmJpbmQodm9pZCAwLDAsMSwwLDEsMSksUGQuYmluZCh2b2lkIDAsMCwxLDAsMSwyKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwxLDMpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDAsMCksUGQuYmluZCh2b2lkIDAsMCwxLDEsMCwxKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwwLDIpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDAsMyksUGQuYmluZCh2b2lkIDAsMCwxLDEsMSwwKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwxLDEpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDEsMiksUGQuYmluZCh2b2lkIDAsMCwxLDEsMSwzKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwwLDApLFBkLmJpbmQodm9pZCAwLDEsMCwwLDAsMSksUGQuYmluZCh2b2lkIDAsMSwwLDAsMCwyKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwwLDMpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDEsMCksUGQuYmluZCh2b2lkIDAsMSwwLDAsMSwxKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwxLDIpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDEsMyksUGQuYmluZCh2b2lkIDAsMSwwLDEsMCwwKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwwLDEpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDAsMiksUGQuYmluZCh2b2lkIDAsMSwwLDEsMCwzKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwxLDApLFBkLmJpbmQodm9pZCAwLDEsMCwxLDEsMSksUGQuYmluZCh2b2lkIDAsMSwwLDEsMSwyKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwxLDMpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDAsMCksUGQuYmluZCh2b2lkIDAsMSwxLDAsMCwxKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwwLDIpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDAsMyksUGQuYmluZCh2b2lkIDAsMSwxLDAsMSwwKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwxLDEpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDEsMiksUGQuYmluZCh2b2lkIDAsMSwxLDAsMSwzKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwwLDApLFBkLmJpbmQodm9pZCAwLDEsMSwxLDAsMSksUGQuYmluZCh2b2lkIDAsMSwxLDEsMCwyKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwwLDMpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDEsMCksUGQuYmluZCh2b2lkIDAsMSwxLDEsMSwxKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwxLDIpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDEsMyldO3ZhciBCZj1BcnJheS5mcm9tfHxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXRjaCgvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXT98W15cXHVEODAwLVxcdURGRkZdfC4vZyl8fFtdfTtRZC5wcm90b3R5cGUuaGFzQ2hhcj1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9PXRoaXMuZW5jb2RpbmcuY2hhclRvR2x5cGhJbmRleChhKX0sUWQucHJvdG90eXBlLmNoYXJUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZW5jb2RpbmcuY2hhclRvR2x5cGhJbmRleChhKX0sUWQucHJvdG90eXBlLmNoYXJUb0dseXBoPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY2hhclRvR2x5cGhJbmRleChhKSxjPXRoaXMuZ2x5cGhzLmdldChiKTtyZXR1cm4gY3x8KGM9dGhpcy5nbHlwaHMuZ2V0KDApKSxjfSxRZC5wcm90b3R5cGUuc3RyaW5nVG9HbHlwaHM9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2I9Ynx8dGhpcy5kZWZhdWx0UmVuZGVyT3B0aW9ucztmb3IodmFyIGQ9QmYoYSksZT1bXSxmPTA7ZjxkLmxlbmd0aDtmKz0xKXt2YXIgZz1kW2ZdO2UucHVzaChjLmNoYXJUb0dseXBoSW5kZXgoZykpfXZhciBoPWUubGVuZ3RoO2lmKGIuZmVhdHVyZXMpe3ZhciBpPWIuc2NyaXB0fHx0aGlzLnN1YnN0aXR1dGlvbi5nZXREZWZhdWx0U2NyaXB0TmFtZSgpLGo9W107Yi5mZWF0dXJlcy5saWdhJiYoaj1qLmNvbmNhdCh0aGlzLnN1YnN0aXR1dGlvbi5nZXRGZWF0dXJlKFwibGlnYVwiLGksYi5sYW5ndWFnZSkpKSxiLmZlYXR1cmVzLnJsaWcmJihqPWouY29uY2F0KHRoaXMuc3Vic3RpdHV0aW9uLmdldEZlYXR1cmUoXCJybGlnXCIsaSxiLmxhbmd1YWdlKSkpO2Zvcih2YXIgaz0wO2s8aDtrKz0xKWZvcih2YXIgbD0wO2w8ai5sZW5ndGg7bCsrKXtmb3IodmFyIG09altsXSxuPW0uc3ViLG89bi5sZW5ndGgscD0wO3A8byYmbltwXT09PWVbaytwXTspcCsrO3A9PT1vJiYoZS5zcGxpY2UoayxvLG0uYnkpLGg9aC1vKzEpfX1mb3IodmFyIHE9bmV3IEFycmF5KGgpLHI9dGhpcy5nbHlwaHMuZ2V0KDApLHM9MDtzPGg7cys9MSlxW3NdPWMuZ2x5cGhzLmdldChlW3NdKXx8cjtyZXR1cm4gcX0sUWQucHJvdG90eXBlLm5hbWVUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ2x5cGhOYW1lcy5uYW1lVG9HbHlwaEluZGV4KGEpfSxRZC5wcm90b3R5cGUubmFtZVRvR2x5cGg9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5uYW1lVG9HbHlwaEluZGV4KGEpLGM9dGhpcy5nbHlwaHMuZ2V0KGIpO3JldHVybiBjfHwoYz10aGlzLmdseXBocy5nZXQoMCkpLGN9LFFkLnByb3RvdHlwZS5nbHlwaEluZGV4VG9OYW1lPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdseXBoTmFtZXMuZ2x5cGhJbmRleFRvTmFtZT90aGlzLmdseXBoTmFtZXMuZ2x5cGhJbmRleFRvTmFtZShhKTpcIlwifSxRZC5wcm90b3R5cGUuZ2V0S2VybmluZ1ZhbHVlPWZ1bmN0aW9uKGEsYil7YT1hLmluZGV4fHxhLGI9Yi5pbmRleHx8Yjt2YXIgYz10aGlzLnBvc2l0aW9uLmRlZmF1bHRLZXJuaW5nVGFibGVzO3JldHVybiBjP3RoaXMucG9zaXRpb24uZ2V0S2VybmluZ1ZhbHVlKGMsYSxiKTp0aGlzLmtlcm5pbmdQYWlyc1thK1wiLFwiK2JdfHwwfSxRZC5wcm90b3R5cGUuZGVmYXVsdFJlbmRlck9wdGlvbnM9e2tlcm5pbmc6ITAsZmVhdHVyZXM6e2xpZ2E6ITAscmxpZzohMH19LFFkLnByb3RvdHlwZS5mb3JFYWNoR2x5cGg9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPXRoaXM7Yj12b2lkIDAhPT1iP2I6MCxjPXZvaWQgMCE9PWM/YzowLGQ9dm9pZCAwIT09ZD9kOjcyLGU9ZXx8dGhpcy5kZWZhdWx0UmVuZGVyT3B0aW9uczt2YXIgaCxpPTEvdGhpcy51bml0c1BlckVtKmQsaj10aGlzLnN0cmluZ1RvR2x5cGhzKGEsZSk7aWYoZS5rZXJuaW5nKXt2YXIgaz1lLnNjcmlwdHx8dGhpcy5wb3NpdGlvbi5nZXREZWZhdWx0U2NyaXB0TmFtZSgpO2g9dGhpcy5wb3NpdGlvbi5nZXRLZXJuaW5nVGFibGVzKGssZS5sYW5ndWFnZSl9Zm9yKHZhciBsPTA7bDxqLmxlbmd0aDtsKz0xKXt2YXIgbT1qW2xdO2lmKGYuY2FsbChnLG0sYixjLGQsZSksbS5hZHZhbmNlV2lkdGgmJihiKz1tLmFkdmFuY2VXaWR0aCppKSxlLmtlcm5pbmcmJmw8ai5sZW5ndGgtMSl7Yis9KGg/Zy5wb3NpdGlvbi5nZXRLZXJuaW5nVmFsdWUoaCxtLmluZGV4LGpbbCsxXS5pbmRleCk6Zy5nZXRLZXJuaW5nVmFsdWUobSxqW2wrMV0pKSppfWUubGV0dGVyU3BhY2luZz9iKz1lLmxldHRlclNwYWNpbmcqZDplLnRyYWNraW5nJiYoYis9ZS50cmFja2luZy8xZTMqZCl9cmV0dXJuIGJ9LFFkLnByb3RvdHlwZS5nZXRQYXRoPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9bmV3IHI7cmV0dXJuIHRoaXMuZm9yRWFjaEdseXBoKGEsYixjLGQsZSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZz1hLmdldFBhdGgoYixjLGQsZSx0aGlzKTtmLmV4dGVuZChnKX0pLGZ9LFFkLnByb3RvdHlwZS5nZXRQYXRocz1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPVtdO3JldHVybiB0aGlzLmZvckVhY2hHbHlwaChhLGIsYyxkLGUsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGc9YS5nZXRQYXRoKGIsYyxkLGUsdGhpcyk7Zi5wdXNoKGcpfSksZn0sUWQucHJvdG90eXBlLmdldEFkdmFuY2VXaWR0aD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuZm9yRWFjaEdseXBoKGEsMCwwLGIsYyxmdW5jdGlvbigpe30pfSxRZC5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5nZXRQYXRoKGIsYyxkLGUsZikuZHJhdyhhKX0sUWQucHJvdG90eXBlLmRyYXdQb2ludHM9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZm9yRWFjaEdseXBoKGIsYyxkLGUsZixmdW5jdGlvbihiLGMsZCxlKXtiLmRyYXdQb2ludHMoYSxjLGQsZSl9KX0sUWQucHJvdG90eXBlLmRyYXdNZXRyaWNzPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmZvckVhY2hHbHlwaChiLGMsZCxlLGYsZnVuY3Rpb24oYixjLGQsZSl7Yi5kcmF3TWV0cmljcyhhLGMsZCxlKX0pfSxRZC5wcm90b3R5cGUuZ2V0RW5nbGlzaE5hbWU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5uYW1lc1thXTtpZihiKXJldHVybiBiLmVufSxRZC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7fWZ1bmN0aW9uIGIoYil7dmFyIGQ9Yy5nZXRFbmdsaXNoTmFtZShiKTthKGQmJmQudHJpbSgpLmxlbmd0aD4wLFwiTm8gRW5nbGlzaCBcIitiK1wiIHNwZWNpZmllZC5cIil9dmFyIGM9dGhpcztiKFwiZm9udEZhbWlseVwiKSxiKFwid2VpZ2h0TmFtZVwiKSxiKFwibWFudWZhY3R1cmVyXCIpLGIoXCJjb3B5cmlnaHRcIiksYihcInZlcnNpb25cIiksYSh0aGlzLnVuaXRzUGVyRW0+MCxcIk5vIHVuaXRzUGVyRW0gc3BlY2lmaWVkLlwiKX0sUWQucHJvdG90eXBlLnRvVGFibGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHFmLmZvbnRUb1RhYmxlKHRoaXMpfSxRZC5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKFwiRm9udC50b0J1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgRm9udC50b0FycmF5QnVmZmVyIGluc3RlYWQuXCIpLHRoaXMudG9BcnJheUJ1ZmZlcigpfSxRZC5wcm90b3R5cGUudG9BcnJheUJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnRvVGFibGVzKCksYj1hLmVuY29kZSgpLGM9bmV3IEFycmF5QnVmZmVyKGIubGVuZ3RoKSxkPW5ldyBVaW50OEFycmF5KGMpLGU9MDtlPGIubGVuZ3RoO2UrKylkW2VdPWJbZV07cmV0dXJuIGN9LFFkLnByb3RvdHlwZS5kb3dubG9hZD1mdW5jdGlvbihhKXt2YXIgYz10aGlzLmdldEVuZ2xpc2hOYW1lKFwiZm9udEZhbWlseVwiKSxkPXRoaXMuZ2V0RW5nbGlzaE5hbWUoXCJmb250U3ViZmFtaWx5XCIpO2E9YXx8Yy5yZXBsYWNlKC9cXHMvZyxcIlwiKStcIi1cIitkK1wiLm90ZlwiO3ZhciBlPXRoaXMudG9BcnJheUJ1ZmZlcigpO2lmKEJiKCkpd2luZG93LnJlcXVlc3RGaWxlU3lzdGVtPXdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbXx8d2luZG93LndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtLHdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSh3aW5kb3cuVEVNUE9SQVJZLGUuYnl0ZUxlbmd0aCxmdW5jdGlvbihiKXtiLnJvb3QuZ2V0RmlsZShhLHtjcmVhdGU6ITB9LGZ1bmN0aW9uKGEpe2EuY3JlYXRlV3JpdGVyKGZ1bmN0aW9uKGIpe3ZhciBjPW5ldyBEYXRhVmlldyhlKSxkPW5ldyBCbG9iKFtjXSx7dHlwZTpcImZvbnQvb3BlbnR5cGVcIn0pO2Iud3JpdGUoZCksYi5hZGRFdmVudExpc3RlbmVyKFwid3JpdGVlbmRcIixmdW5jdGlvbigpe2xvY2F0aW9uLmhyZWY9YS50b1VSTCgpfSwhMSl9KX0pfSxmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYS5uYW1lK1wiOiBcIithLm1lc3NhZ2UpfSk7ZWxzZXt2YXIgZj1iKFwiZnNcIiksZz1EYihlKTtmLndyaXRlRmlsZVN5bmMoYSxnKX19LFFkLnByb3RvdHlwZS5mc1NlbGVjdGlvblZhbHVlcz17SVRBTElDOjEsVU5ERVJTQ09SRToyLE5FR0FUSVZFOjQsT1VUTElORUQ6OCxTVFJJS0VPVVQ6MTYsQk9MRDozMixSRUdVTEFSOjY0LFVTRVJfVFlQT19NRVRSSUNTOjEyOCxXV1M6MjU2LE9CTElRVUU6NTEyfSxRZC5wcm90b3R5cGUudXNXaWR0aENsYXNzZXM9e1VMVFJBX0NPTkRFTlNFRDoxLEVYVFJBX0NPTkRFTlNFRDoyLENPTkRFTlNFRDozLFNFTUlfQ09OREVOU0VEOjQsTUVESVVNOjUsU0VNSV9FWFBBTkRFRDo2LEVYUEFOREVEOjcsRVhUUkFfRVhQQU5ERUQ6OCxVTFRSQV9FWFBBTkRFRDo5fSxRZC5wcm90b3R5cGUudXNXZWlnaHRDbGFzc2VzPXtUSElOOjEwMCxFWFRSQV9MSUdIVDoyMDAsTElHSFQ6MzAwLE5PUk1BTDo0MDAsTUVESVVNOjUwMCxTRU1JX0JPTEQ6NjAwLEJPTEQ6NzAwLEVYVFJBX0JPTEQ6ODAwLEJMQUNLOjkwMH07dmFyIENmPXttYWtlOldkLHBhcnNlOlhkfSxEZj1uZXcgQXJyYXkoMTApO0RmWzFdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4gMT09PWI/e3Bvc0Zvcm1hdDoxLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHZhbHVlOnRoaXMucGFyc2VWYWx1ZVJlY29yZCgpfToyPT09Yj97XG5wb3NGb3JtYXQ6Mixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSx2YWx1ZXM6dGhpcy5wYXJzZVZhbHVlUmVjb3JkTGlzdCgpfTp2b2lkIHhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IEdQT1MgbG9va3VwIHR5cGUgMSBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpfSxEZlsyXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7eGUuYXNzZXJ0KDE9PT1ifHwyPT09YixcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IEdQT1MgbG9va3VwIHR5cGUgMiBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpO3ZhciBjPXRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGQ9dGhpcy5wYXJzZVVTaG9ydCgpLGU9dGhpcy5wYXJzZVVTaG9ydCgpO2lmKDE9PT1iKXJldHVybntwb3NGb3JtYXQ6Yixjb3ZlcmFnZTpjLHZhbHVlRm9ybWF0MTpkLHZhbHVlRm9ybWF0MjplLHBhaXJTZXRzOnRoaXMucGFyc2VMaXN0KFEucG9pbnRlcihRLmxpc3QoZnVuY3Rpb24oKXtyZXR1cm57c2Vjb25kR2x5cGg6dGhpcy5wYXJzZVVTaG9ydCgpLHZhbHVlMTp0aGlzLnBhcnNlVmFsdWVSZWNvcmQoZCksdmFsdWUyOnRoaXMucGFyc2VWYWx1ZVJlY29yZChlKX19KSkpfTtpZigyPT09Yil7dmFyIGY9dGhpcy5wYXJzZVBvaW50ZXIoUS5jbGFzc0RlZiksZz10aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxoPXRoaXMucGFyc2VVU2hvcnQoKSxpPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm57cG9zRm9ybWF0OmIsY292ZXJhZ2U6Yyx2YWx1ZUZvcm1hdDE6ZCx2YWx1ZUZvcm1hdDI6ZSxjbGFzc0RlZjE6ZixjbGFzc0RlZjI6ZyxjbGFzczFDb3VudDpoLGNsYXNzMkNvdW50OmksY2xhc3NSZWNvcmRzOnRoaXMucGFyc2VMaXN0KGgsUS5saXN0KGksZnVuY3Rpb24oKXtyZXR1cm57dmFsdWUxOnRoaXMucGFyc2VWYWx1ZVJlY29yZChkKSx2YWx1ZTI6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKGUpfX0pKX19fSxEZlszXT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDMgbm90IHN1cHBvcnRlZFwifX0sRGZbNF09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA0IG5vdCBzdXBwb3J0ZWRcIn19LERmWzVdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgNSBub3Qgc3VwcG9ydGVkXCJ9fSxEZls2XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDYgbm90IHN1cHBvcnRlZFwifX0sRGZbN109ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA3IG5vdCBzdXBwb3J0ZWRcIn19LERmWzhdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgOCBub3Qgc3VwcG9ydGVkXCJ9fSxEZls5XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDkgbm90IHN1cHBvcnRlZFwifX07dmFyIEVmPW5ldyBBcnJheSgxMCksRmY9e3BhcnNlOllkLG1ha2U6WmR9LEdmPXtwYXJzZTphZX0sSGY9e3BhcnNlOmJlfTthLkZvbnQ9UWQsYS5HbHlwaD1jYSxhLlBhdGg9cixhLkJvdW5kaW5nQm94PXEsYS5fcGFyc2U9TGUsYS5wYXJzZT1oZSxhLmxvYWQ9aWUsYS5sb2FkU3luYz1qZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0pfSkuY2FsbCh0aGlzLGIoXCJidWZmZXJcIikuQnVmZmVyKX0se2J1ZmZlcjozLGZzOjJ9XSwxMTpbZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGUoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gZihhKXtpZihsPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChhLDApO2lmKChsPT09ZHx8IWwpJiZzZXRUaW1lb3V0KXJldHVybiBsPXNldFRpbWVvdXQsc2V0VGltZW91dChhLDApO3RyeXtyZXR1cm4gbChhLDApfWNhdGNoKGIpe3RyeXtyZXR1cm4gbC5jYWxsKG51bGwsYSwwKX1jYXRjaChiKXtyZXR1cm4gbC5jYWxsKHRoaXMsYSwwKX19fWZ1bmN0aW9uIGcoYSl7aWYobT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGEpO2lmKChtPT09ZXx8IW0pJiZjbGVhclRpbWVvdXQpcmV0dXJuIG09Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChhKTt0cnl7cmV0dXJuIG0oYSl9Y2F0Y2goYil7dHJ5e3JldHVybiBtLmNhbGwobnVsbCxhKX1jYXRjaChiKXtyZXR1cm4gbS5jYWxsKHRoaXMsYSl9fX1mdW5jdGlvbiBoKCl7cSYmbyYmKHE9ITEsby5sZW5ndGg/cD1vLmNvbmNhdChwKTpyPS0xLHAubGVuZ3RoJiZpKCkpfWZ1bmN0aW9uIGkoKXtpZighcSl7dmFyIGE9ZihoKTtxPSEwO2Zvcih2YXIgYj1wLmxlbmd0aDtiOyl7Zm9yKG89cCxwPVtdOysrcjxiOylvJiZvW3JdLnJ1bigpO3I9LTEsYj1wLmxlbmd0aH1vPW51bGwscT0hMSxnKGEpfX1mdW5jdGlvbiBqKGEsYil7dGhpcy5mdW49YSx0aGlzLmFycmF5PWJ9ZnVuY3Rpb24gaygpe312YXIgbCxtLG49Yi5leHBvcnRzPXt9OyFmdW5jdGlvbigpe3RyeXtsPVwiZnVuY3Rpb25cIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpkfWNhdGNoKGEpe2w9ZH10cnl7bT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OmV9Y2F0Y2goYSl7bT1lfX0oKTt2YXIgbyxwPVtdLHE9ITEscj0tMTtuLm5leHRUaWNrPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbYy0xXT1hcmd1bWVudHNbY107cC5wdXNoKG5ldyBqKGEsYikpLDEhPT1wLmxlbmd0aHx8cXx8ZihpKX0sai5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sbi50aXRsZT1cImJyb3dzZXJcIixuLmJyb3dzZXI9ITAsbi5lbnY9e30sbi5hcmd2PVtdLG4udmVyc2lvbj1cIlwiLG4udmVyc2lvbnM9e30sbi5vbj1rLG4uYWRkTGlzdGVuZXI9ayxuLm9uY2U9ayxuLm9mZj1rLG4ucmVtb3ZlTGlzdGVuZXI9ayxuLnJlbW92ZUFsbExpc3RlbmVycz1rLG4uZW1pdD1rLG4ucHJlcGVuZExpc3RlbmVyPWssbi5wcmVwZW5kT25jZUxpc3RlbmVyPWssbi5saXN0ZW5lcnM9ZnVuY3Rpb24oYSl7cmV0dXJuW119LG4uYmluZGluZz1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX0sbi5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm5cIi9cIn0sbi5jaGRpcj1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9LG4udW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LHt9XSwxMjpbZnVuY3Rpb24oYSxiLGMpeyFmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGEpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBhJiYoYT1TdHJpbmcoYSkpLC9bXmEtejAtOVxcLSMkJSYnKisuXFxeX2B8fl0vaS50ZXN0KGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZVwiKTtyZXR1cm4gYS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGMoYSl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPVN0cmluZyhhKSksYX1mdW5jdGlvbiBkKGEpe3ZhciBiPXtuZXh0OmZ1bmN0aW9uKCl7dmFyIGI9YS5zaGlmdCgpO3JldHVybntkb25lOnZvaWQgMD09PWIsdmFsdWU6Yn19fTtyZXR1cm4gci5pdGVyYWJsZSYmKGJbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiBifSksYn1mdW5jdGlvbiBlKGEpe3RoaXMubWFwPXt9LGEgaW5zdGFuY2VvZiBlP2EuZm9yRWFjaChmdW5jdGlvbihhLGIpe3RoaXMuYXBwZW5kKGIsYSl9LHRoaXMpOkFycmF5LmlzQXJyYXkoYSk/YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3RoaXMuYXBwZW5kKGFbMF0sYVsxXSl9LHRoaXMpOmEmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLmZvckVhY2goZnVuY3Rpb24oYil7dGhpcy5hcHBlbmQoYixhW2JdKX0sdGhpcyl9ZnVuY3Rpb24gZihhKXtpZihhLmJvZHlVc2VkKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKFwiQWxyZWFkeSByZWFkXCIpKTthLmJvZHlVc2VkPSEwfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGIsYyl7YS5vbmxvYWQ9ZnVuY3Rpb24oKXtiKGEucmVzdWx0KX0sYS5vbmVycm9yPWZ1bmN0aW9uKCl7YyhhLmVycm9yKX19KX1mdW5jdGlvbiBoKGEpe3ZhciBiPW5ldyBGaWxlUmVhZGVyLGM9ZyhiKTtyZXR1cm4gYi5yZWFkQXNBcnJheUJ1ZmZlcihhKSxjfWZ1bmN0aW9uIGkoYSl7dmFyIGI9bmV3IEZpbGVSZWFkZXIsYz1nKGIpO3JldHVybiBiLnJlYWRBc1RleHQoYSksY31mdW5jdGlvbiBqKGEpe2Zvcih2YXIgYj1uZXcgVWludDhBcnJheShhKSxjPW5ldyBBcnJheShiLmxlbmd0aCksZD0wO2Q8Yi5sZW5ndGg7ZCsrKWNbZF09U3RyaW5nLmZyb21DaGFyQ29kZShiW2RdKTtyZXR1cm4gYy5qb2luKFwiXCIpfWZ1bmN0aW9uIGsoYSl7aWYoYS5zbGljZSlyZXR1cm4gYS5zbGljZSgwKTt2YXIgYj1uZXcgVWludDhBcnJheShhLmJ5dGVMZW5ndGgpO3JldHVybiBiLnNldChuZXcgVWludDhBcnJheShhKSksYi5idWZmZXJ9ZnVuY3Rpb24gbCgpe3JldHVybiB0aGlzLmJvZHlVc2VkPSExLHRoaXMuX2luaXRCb2R5PWZ1bmN0aW9uKGEpe2lmKHRoaXMuX2JvZHlJbml0PWEsYSlpZihcInN0cmluZ1wiPT10eXBlb2YgYSl0aGlzLl9ib2R5VGV4dD1hO2Vsc2UgaWYoci5ibG9iJiZCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpKXRoaXMuX2JvZHlCbG9iPWE7ZWxzZSBpZihyLmZvcm1EYXRhJiZGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSl0aGlzLl9ib2R5Rm9ybURhdGE9YTtlbHNlIGlmKHIuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkpdGhpcy5fYm9keVRleHQ9YS50b1N0cmluZygpO2Vsc2UgaWYoci5hcnJheUJ1ZmZlciYmci5ibG9iJiZ0KGEpKXRoaXMuX2JvZHlBcnJheUJ1ZmZlcj1rKGEuYnVmZmVyKSx0aGlzLl9ib2R5SW5pdD1uZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSk7ZWxzZXtpZighci5hcnJheUJ1ZmZlcnx8IUFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpJiYhdShhKSl0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBCb2R5SW5pdCB0eXBlXCIpO3RoaXMuX2JvZHlBcnJheUJ1ZmZlcj1rKGEpfWVsc2UgdGhpcy5fYm9keVRleHQ9XCJcIjt0aGlzLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpfHwoXCJzdHJpbmdcIj09dHlwZW9mIGE/dGhpcy5oZWFkZXJzLnNldChcImNvbnRlbnQtdHlwZVwiLFwidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04XCIpOnRoaXMuX2JvZHlCbG9iJiZ0aGlzLl9ib2R5QmxvYi50eXBlP3RoaXMuaGVhZGVycy5zZXQoXCJjb250ZW50LXR5cGVcIix0aGlzLl9ib2R5QmxvYi50eXBlKTpyLnNlYXJjaFBhcmFtcyYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpJiZ0aGlzLmhlYWRlcnMuc2V0KFwiY29udGVudC10eXBlXCIsXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOFwiKSl9LHIuYmxvYiYmKHRoaXMuYmxvYj1mdW5jdGlvbigpe3ZhciBhPWYodGhpcyk7aWYoYSlyZXR1cm4gYTtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2JcIik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSl9LHRoaXMuYXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm9keUFycmF5QnVmZmVyP2YodGhpcyl8fFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpOnRoaXMuYmxvYigpLnRoZW4oaCl9KSx0aGlzLnRleHQ9ZnVuY3Rpb24oKXt2YXIgYT1mKHRoaXMpO2lmKGEpcmV0dXJuIGE7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIGkodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGoodGhpcy5fYm9keUFycmF5QnVmZmVyKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcihcImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dFwiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KX0sci5mb3JtRGF0YSYmKHRoaXMuZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihvKX0pLHRoaXMuanNvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpfSx0aGlzfWZ1bmN0aW9uIG0oYSl7dmFyIGI9YS50b1VwcGVyQ2FzZSgpO3JldHVybiB2LmluZGV4T2YoYik+LTE/YjphfWZ1bmN0aW9uIG4oYSxiKXtiPWJ8fHt9O3ZhciBjPWIuYm9keTtpZihhIGluc3RhbmNlb2Ygbil7aWYoYS5ib2R5VXNlZCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQWxyZWFkeSByZWFkXCIpO3RoaXMudXJsPWEudXJsLHRoaXMuY3JlZGVudGlhbHM9YS5jcmVkZW50aWFscyxiLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGUoYS5oZWFkZXJzKSksdGhpcy5tZXRob2Q9YS5tZXRob2QsdGhpcy5tb2RlPWEubW9kZSxjfHxudWxsPT1hLl9ib2R5SW5pdHx8KGM9YS5fYm9keUluaXQsYS5ib2R5VXNlZD0hMCl9ZWxzZSB0aGlzLnVybD1TdHJpbmcoYSk7aWYodGhpcy5jcmVkZW50aWFscz1iLmNyZWRlbnRpYWxzfHx0aGlzLmNyZWRlbnRpYWxzfHxcIm9taXRcIiwhYi5oZWFkZXJzJiZ0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGUoYi5oZWFkZXJzKSksdGhpcy5tZXRob2Q9bShiLm1ldGhvZHx8dGhpcy5tZXRob2R8fFwiR0VUXCIpLHRoaXMubW9kZT1iLm1vZGV8fHRoaXMubW9kZXx8bnVsbCx0aGlzLnJlZmVycmVyPW51bGwsKFwiR0VUXCI9PT10aGlzLm1ldGhvZHx8XCJIRUFEXCI9PT10aGlzLm1ldGhvZCkmJmMpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzXCIpO3RoaXMuX2luaXRCb2R5KGMpfWZ1bmN0aW9uIG8oYSl7dmFyIGI9bmV3IEZvcm1EYXRhO3JldHVybiBhLnRyaW0oKS5zcGxpdChcIiZcIikuZm9yRWFjaChmdW5jdGlvbihhKXtpZihhKXt2YXIgYz1hLnNwbGl0KFwiPVwiKSxkPWMuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZyxcIiBcIiksZT1jLmpvaW4oXCI9XCIpLnJlcGxhY2UoL1xcKy9nLFwiIFwiKTtiLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQoZCksZGVjb2RlVVJJQ29tcG9uZW50KGUpKX19KSxifWZ1bmN0aW9uIHAoYSl7dmFyIGI9bmV3IGU7cmV0dXJuIGEuc3BsaXQoL1xccj9cXG4vKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBjPWEuc3BsaXQoXCI6XCIpLGQ9Yy5zaGlmdCgpLnRyaW0oKTtpZihkKXt2YXIgZT1jLmpvaW4oXCI6XCIpLnRyaW0oKTtiLmFwcGVuZChkLGUpfX0pLGJ9ZnVuY3Rpb24gcShhLGIpe2J8fChiPXt9KSx0aGlzLnR5cGU9XCJkZWZhdWx0XCIsdGhpcy5zdGF0dXM9XCJzdGF0dXNcImluIGI/Yi5zdGF0dXM6MjAwLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwLHRoaXMuc3RhdHVzVGV4dD1cInN0YXR1c1RleHRcImluIGI/Yi5zdGF0dXNUZXh0OlwiT0tcIix0aGlzLmhlYWRlcnM9bmV3IGUoYi5oZWFkZXJzKSx0aGlzLnVybD1iLnVybHx8XCJcIix0aGlzLl9pbml0Qm9keShhKX1pZighYS5mZXRjaCl7dmFyIHI9e3NlYXJjaFBhcmFtczpcIlVSTFNlYXJjaFBhcmFtc1wiaW4gYSxpdGVyYWJsZTpcIlN5bWJvbFwiaW4gYSYmXCJpdGVyYXRvclwiaW4gU3ltYm9sLGJsb2I6XCJGaWxlUmVhZGVyXCJpbiBhJiZcIkJsb2JcImluIGEmJmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgQmxvYiwhMH1jYXRjaChhKXtyZXR1cm4hMX19KCksZm9ybURhdGE6XCJGb3JtRGF0YVwiaW4gYSxhcnJheUJ1ZmZlcjpcIkFycmF5QnVmZmVyXCJpbiBhfTtpZihyLmFycmF5QnVmZmVyKXZhciBzPVtcIltvYmplY3QgSW50OEFycmF5XVwiLFwiW29iamVjdCBVaW50OEFycmF5XVwiLFwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIixcIltvYmplY3QgSW50MTZBcnJheV1cIixcIltvYmplY3QgVWludDE2QXJyYXldXCIsXCJbb2JqZWN0IEludDMyQXJyYXldXCIsXCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiLFwiW29iamVjdCBGbG9hdDMyQXJyYXldXCIsXCJbb2JqZWN0IEZsb2F0NjRBcnJheV1cIl0sdD1mdW5jdGlvbihhKXtyZXR1cm4gYSYmRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSl9LHU9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbihhKXtyZXR1cm4gYSYmcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSk+LTF9O2UucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihhLGQpe2E9YihhKSxkPWMoZCk7dmFyIGU9dGhpcy5tYXBbYV07dGhpcy5tYXBbYV09ZT9lK1wiLFwiK2Q6ZH0sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLm1hcFtiKGEpXX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBhPWIoYSksdGhpcy5oYXMoYSk/dGhpcy5tYXBbYV06bnVsbH0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShiKGEpKX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsZCl7dGhpcy5tYXBbYihhKV09YyhkKX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyBpbiB0aGlzLm1hcCl0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShjKSYmYS5jYWxsKGIsdGhpcy5tYXBbY10sYyx0aGlzKX0sZS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oYixjKXthLnB1c2goYyl9KSxkKGEpfSxlLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGIpe2EucHVzaChiKX0pLGQoYSl9LGUucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGIsYyl7YS5wdXNoKFtjLGJdKX0pLGQoYSl9LHIuaXRlcmFibGUmJihlLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWUucHJvdG90eXBlLmVudHJpZXMpO3ZhciB2PVtcIkRFTEVURVwiLFwiR0VUXCIsXCJIRUFEXCIsXCJPUFRJT05TXCIsXCJQT1NUXCIsXCJQVVRcIl07bi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyx7Ym9keTp0aGlzLl9ib2R5SW5pdH0pfSxsLmNhbGwobi5wcm90b3R5cGUpLGwuY2FsbChxLnByb3RvdHlwZSkscS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHEodGhpcy5fYm9keUluaXQse3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnRoaXMuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyBlKHRoaXMuaGVhZGVycyksdXJsOnRoaXMudXJsfSl9LHEuZXJyb3I9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgcShudWxsLHtzdGF0dXM6MCxzdGF0dXNUZXh0OlwiXCJ9KTtyZXR1cm4gYS50eXBlPVwiZXJyb3JcIixhfTt2YXIgdz1bMzAxLDMwMiwzMDMsMzA3LDMwOF07cS5yZWRpcmVjdD1mdW5jdGlvbihhLGIpe2lmKC0xPT09dy5pbmRleE9mKGIpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBzdGF0dXMgY29kZVwiKTtyZXR1cm4gbmV3IHEobnVsbCx7c3RhdHVzOmIsaGVhZGVyczp7bG9jYXRpb246YX19KX0sYS5IZWFkZXJzPWUsYS5SZXF1ZXN0PW4sYS5SZXNwb25zZT1xLGEuZmV0Y2g9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYyxkKXt2YXIgZT1uZXcgbihhLGIpLGY9bmV3IFhNTEh0dHBSZXF1ZXN0O2Yub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGE9e3N0YXR1czpmLnN0YXR1cyxzdGF0dXNUZXh0OmYuc3RhdHVzVGV4dCxoZWFkZXJzOnAoZi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKXx8XCJcIil9O2EudXJsPVwicmVzcG9uc2VVUkxcImluIGY/Zi5yZXNwb25zZVVSTDphLmhlYWRlcnMuZ2V0KFwiWC1SZXF1ZXN0LVVSTFwiKTt2YXIgYj1cInJlc3BvbnNlXCJpbiBmP2YucmVzcG9uc2U6Zi5yZXNwb25zZVRleHQ7YyhuZXcgcShiLGEpKX0sZi5vbmVycm9yPWZ1bmN0aW9uKCl7ZChuZXcgVHlwZUVycm9yKFwiTmV0d29yayByZXF1ZXN0IGZhaWxlZFwiKSl9LGYub250aW1lb3V0PWZ1bmN0aW9uKCl7ZChuZXcgVHlwZUVycm9yKFwiTmV0d29yayByZXF1ZXN0IGZhaWxlZFwiKSl9LGYub3BlbihlLm1ldGhvZCxlLnVybCwhMCksXCJpbmNsdWRlXCI9PT1lLmNyZWRlbnRpYWxzJiYoZi53aXRoQ3JlZGVudGlhbHM9ITApLFwicmVzcG9uc2VUeXBlXCJpbiBmJiZyLmJsb2ImJihmLnJlc3BvbnNlVHlwZT1cImJsb2JcIiksZS5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oYSxiKXtmLnNldFJlcXVlc3RIZWFkZXIoYixhKX0pLGYuc2VuZCh2b2lkIDA9PT1lLl9ib2R5SW5pdD9udWxsOmUuX2JvZHlJbml0KX0pfSxhLmZldGNoLnBvbHlmaWxsPSEwfX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzKX0se31dLDEzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vY29yZS9tYWluXCIpO2EoXCIuL2NvcmUvY29uc3RhbnRzXCIpLGEoXCIuL2NvcmUvZW52aXJvbm1lbnRcIiksYShcIi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGEoXCIuL2NvcmUvaGVscGVyc1wiKSxhKFwiLi9jb3JlL2xlZ2FjeVwiKSxhKFwiLi9jb3JlL3A1LkVsZW1lbnRcIiksYShcIi4vY29yZS9wNS5HcmFwaGljc1wiKSxhKFwiLi9jb3JlL3A1LlJlbmRlcmVyXCIpLGEoXCIuL2NvcmUvcDUuUmVuZGVyZXIyRFwiKSxhKFwiLi9jb3JlL3JlbmRlcmluZ1wiKSxhKFwiLi9jb3JlL3NoaW1cIiksYShcIi4vY29yZS9zdHJ1Y3R1cmVcIiksYShcIi4vY29yZS90cmFuc2Zvcm1cIiksYShcIi4vY29yZS9zaGFwZS8yZF9wcmltaXRpdmVzXCIpLGEoXCIuL2NvcmUvc2hhcGUvYXR0cmlidXRlc1wiKSxhKFwiLi9jb3JlL3NoYXBlL2N1cnZlc1wiKSxhKFwiLi9jb3JlL3NoYXBlL3ZlcnRleFwiKSxhKFwiLi9jb2xvci9jb2xvcl9jb252ZXJzaW9uXCIpLGEoXCIuL2NvbG9yL2NyZWF0aW5nX3JlYWRpbmdcIiksYShcIi4vY29sb3IvcDUuQ29sb3JcIiksYShcIi4vY29sb3Ivc2V0dGluZ1wiKSxhKFwiLi9kYXRhL3A1LlR5cGVkRGljdFwiKSxhKFwiLi9ldmVudHMvYWNjZWxlcmF0aW9uXCIpLGEoXCIuL2V2ZW50cy9rZXlib2FyZFwiKSxhKFwiLi9ldmVudHMvbW91c2VcIiksYShcIi4vZXZlbnRzL3RvdWNoXCIpLGEoXCIuL2ltYWdlL2ZpbHRlcnNcIiksYShcIi4vaW1hZ2UvaW1hZ2VcIiksYShcIi4vaW1hZ2UvbG9hZGluZ19kaXNwbGF5aW5nXCIpLGEoXCIuL2ltYWdlL3A1LkltYWdlXCIpLGEoXCIuL2ltYWdlL3BpeGVsc1wiKSxhKFwiLi9pby9maWxlc1wiKSxhKFwiLi9pby9wNS5UYWJsZVwiKSxhKFwiLi9pby9wNS5UYWJsZVJvd1wiKSxhKFwiLi9pby9wNS5YTUxcIiksYShcIi4vbWF0aC9jYWxjdWxhdGlvblwiKSxhKFwiLi9tYXRoL21hdGhcIiksYShcIi4vbWF0aC9ub2lzZVwiKSxhKFwiLi9tYXRoL3A1LlZlY3RvclwiKSxhKFwiLi9tYXRoL3JhbmRvbVwiKSxhKFwiLi9tYXRoL3RyaWdvbm9tZXRyeVwiKSxhKFwiLi90eXBvZ3JhcGh5L2F0dHJpYnV0ZXNcIiksYShcIi4vdHlwb2dyYXBoeS9sb2FkaW5nX2Rpc3BsYXlpbmdcIiksYShcIi4vdHlwb2dyYXBoeS9wNS5Gb250XCIpLGEoXCIuL3V0aWxpdGllcy9hcnJheV9mdW5jdGlvbnNcIiksYShcIi4vdXRpbGl0aWVzL2NvbnZlcnNpb25cIiksYShcIi4vdXRpbGl0aWVzL3N0cmluZ19mdW5jdGlvbnNcIiksYShcIi4vdXRpbGl0aWVzL3RpbWVfZGF0ZVwiKSxhKFwiLi93ZWJnbC8zZF9wcmltaXRpdmVzXCIpLGEoXCIuL3dlYmdsL2ludGVyYWN0aW9uXCIpLGEoXCIuL3dlYmdsL2xpZ2h0XCIpLGEoXCIuL3dlYmdsL2xvYWRpbmdcIiksYShcIi4vd2ViZ2wvbWF0ZXJpYWxcIiksYShcIi4vd2ViZ2wvcDUuQ2FtZXJhXCIpLGEoXCIuL3dlYmdsL3A1Lkdlb21ldHJ5XCIpLGEoXCIuL3dlYmdsL3A1Lk1hdHJpeFwiKSxhKFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLkltbWVkaWF0ZVwiKSxhKFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMXCIpLGEoXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuUmV0YWluZWRcIiksYShcIi4vd2ViZ2wvcDUuU2hhZGVyXCIpLGEoXCIuL3dlYmdsL3A1LlRleHR1cmVcIiksYShcIi4vd2ViZ2wvdGV4dFwiKSxhKFwiLi9jb3JlL2luaXRcIiksYi5leHBvcnRzPWR9LHtcIi4vY29sb3IvY29sb3JfY29udmVyc2lvblwiOjE0LFwiLi9jb2xvci9jcmVhdGluZ19yZWFkaW5nXCI6MTUsXCIuL2NvbG9yL3A1LkNvbG9yXCI6MTYsXCIuL2NvbG9yL3NldHRpbmdcIjoxNyxcIi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4vY29yZS9lbnZpcm9ubWVudFwiOjE5LFwiLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4vY29yZS9oZWxwZXJzXCI6MjEsXCIuL2NvcmUvaW5pdFwiOjIyLFwiLi9jb3JlL2xlZ2FjeVwiOjIzLFwiLi9jb3JlL21haW5cIjoyNCxcIi4vY29yZS9wNS5FbGVtZW50XCI6MjUsXCIuL2NvcmUvcDUuR3JhcGhpY3NcIjoyNixcIi4vY29yZS9wNS5SZW5kZXJlclwiOjI3LFwiLi9jb3JlL3A1LlJlbmRlcmVyMkRcIjoyOCxcIi4vY29yZS9yZW5kZXJpbmdcIjoyOSxcIi4vY29yZS9zaGFwZS8yZF9wcmltaXRpdmVzXCI6MzAsXCIuL2NvcmUvc2hhcGUvYXR0cmlidXRlc1wiOjMxLFwiLi9jb3JlL3NoYXBlL2N1cnZlc1wiOjMyLFwiLi9jb3JlL3NoYXBlL3ZlcnRleFwiOjMzLFwiLi9jb3JlL3NoaW1cIjozNCxcIi4vY29yZS9zdHJ1Y3R1cmVcIjozNSxcIi4vY29yZS90cmFuc2Zvcm1cIjozNixcIi4vZGF0YS9wNS5UeXBlZERpY3RcIjozNyxcIi4vZXZlbnRzL2FjY2VsZXJhdGlvblwiOjM4LFwiLi9ldmVudHMva2V5Ym9hcmRcIjozOSxcIi4vZXZlbnRzL21vdXNlXCI6NDAsXCIuL2V2ZW50cy90b3VjaFwiOjQxLFwiLi9pbWFnZS9maWx0ZXJzXCI6NDIsXCIuL2ltYWdlL2ltYWdlXCI6NDMsXCIuL2ltYWdlL2xvYWRpbmdfZGlzcGxheWluZ1wiOjQ0LFwiLi9pbWFnZS9wNS5JbWFnZVwiOjQ1LFwiLi9pbWFnZS9waXhlbHNcIjo0NixcIi4vaW8vZmlsZXNcIjo0NyxcIi4vaW8vcDUuVGFibGVcIjo0OCxcIi4vaW8vcDUuVGFibGVSb3dcIjo0OSxcIi4vaW8vcDUuWE1MXCI6NTAsXCIuL21hdGgvY2FsY3VsYXRpb25cIjo1MSxcIi4vbWF0aC9tYXRoXCI6NTIsXCIuL21hdGgvbm9pc2VcIjo1MyxcIi4vbWF0aC9wNS5WZWN0b3JcIjo1NCxcIi4vbWF0aC9yYW5kb21cIjo1NSxcIi4vbWF0aC90cmlnb25vbWV0cnlcIjo1NixcIi4vdHlwb2dyYXBoeS9hdHRyaWJ1dGVzXCI6NTcsXCIuL3R5cG9ncmFwaHkvbG9hZGluZ19kaXNwbGF5aW5nXCI6NTgsXCIuL3R5cG9ncmFwaHkvcDUuRm9udFwiOjU5LFwiLi91dGlsaXRpZXMvYXJyYXlfZnVuY3Rpb25zXCI6NjAsXCIuL3V0aWxpdGllcy9jb252ZXJzaW9uXCI6NjEsXCIuL3V0aWxpdGllcy9zdHJpbmdfZnVuY3Rpb25zXCI6NjIsXCIuL3V0aWxpdGllcy90aW1lX2RhdGVcIjo2MyxcIi4vd2ViZ2wvM2RfcHJpbWl0aXZlc1wiOjY0LFwiLi93ZWJnbC9pbnRlcmFjdGlvblwiOjY1LFwiLi93ZWJnbC9saWdodFwiOjY2LFwiLi93ZWJnbC9sb2FkaW5nXCI6NjcsXCIuL3dlYmdsL21hdGVyaWFsXCI6NjgsXCIuL3dlYmdsL3A1LkNhbWVyYVwiOjY5LFwiLi93ZWJnbC9wNS5HZW9tZXRyeVwiOjcwLFwiLi93ZWJnbC9wNS5NYXRyaXhcIjo3MSxcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTFwiOjc0LFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLkltbWVkaWF0ZVwiOjcyLFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMLlJldGFpbmVkXCI6NzMsXCIuL3dlYmdsL3A1LlNoYWRlclwiOjc1LFwiLi93ZWJnbC9wNS5UZXh0dXJlXCI6NzYsXCIuL3dlYmdsL3RleHRcIjo3N31dLDE0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLkNvbG9yQ29udmVyc2lvbj17fSxkLkNvbG9yQ29udmVyc2lvbi5faHNiYVRvSFNMQT1mdW5jdGlvbihhKXt2YXIgYj1hWzBdLGM9YVsxXSxkPWFbMl0sZT0oMi1jKSpkLzI7cmV0dXJuIDAhPT1lJiYoMT09PWU/Yz0wOmU8LjU/Yy89Mi1jOmM9YypkLygyLTIqZSkpLFtiLGMsZSxhWzNdXX0sZC5Db2xvckNvbnZlcnNpb24uX2hzYmFUb1JHQkE9ZnVuY3Rpb24oYSl7dmFyIGI9NiphWzBdLGM9YVsxXSxkPWFbMl0sZT1bXTtpZigwPT09YyllPVtkLGQsZCxhWzNdXTtlbHNle3ZhciBmLGcsaCxpPU1hdGguZmxvb3IoYiksaj1kKigxLWMpLGs9ZCooMS1jKihiLWkpKSxsPWQqKDEtYyooMStpLWIpKTsxPT09aT8oZj1rLGc9ZCxoPWopOjI9PT1pPyhmPWosZz1kLGg9bCk6Mz09PWk/KGY9aixnPWssaD1kKTo0PT09aT8oZj1sLGc9aixoPWQpOjU9PT1pPyhmPWQsZz1qLGg9ayk6KGY9ZCxnPWwsaD1qKSxlPVtmLGcsaCxhWzNdXX1yZXR1cm4gZX0sZC5Db2xvckNvbnZlcnNpb24uX2hzbGFUb0hTQkE9ZnVuY3Rpb24oYSl7dmFyIGIsYz1hWzBdLGQ9YVsxXSxlPWFbMl07cmV0dXJuIGI9ZTwuNT8oMStkKSplOmUrZC1lKmQsZD0yKihiLWUpL2IsW2MsZCxiLGFbM11dfSxkLkNvbG9yQ29udmVyc2lvbi5faHNsYVRvUkdCQT1mdW5jdGlvbihhKXt2YXIgYj02KmFbMF0sYz1hWzFdLGQ9YVsyXSxlPVtdO2lmKDA9PT1jKWU9W2QsZCxkLGFbM11dO2Vsc2V7dmFyIGY7Zj1kPC41PygxK2MpKmQ6ZCtjLWQqYzt2YXIgZz0yKmQtZixoPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYTwwP2ErPTY6YT49NiYmKGEtPTYpLGE8MT9iKyhjLWIpKmE6YTwzP2M6YTw0P2IrKGMtYikqKDQtYSk6Yn07ZT1baChiKzIsZyxmKSxoKGIsZyxmKSxoKGItMixnLGYpLGFbM11dfXJldHVybiBlfSxkLkNvbG9yQ29udmVyc2lvbi5fcmdiYVRvSFNCQT1mdW5jdGlvbihhKXt2YXIgYixjLGQ9YVswXSxlPWFbMV0sZj1hWzJdLGc9TWF0aC5tYXgoZCxlLGYpLGg9Zy1NYXRoLm1pbihkLGUsZik7cmV0dXJuIDA9PT1oPyhiPTAsYz0wKTooYz1oL2csZD09PWc/Yj0oZS1mKS9oOmU9PT1nP2I9MisoZi1kKS9oOmY9PT1nJiYoYj00KyhkLWUpL2gpLGI8MD9iKz02OmI+PTYmJihiLT02KSksW2IvNixjLGcsYVszXV19LGQuQ29sb3JDb252ZXJzaW9uLl9yZ2JhVG9IU0xBPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hWzBdLGU9YVsxXSxmPWFbMl0sZz1NYXRoLm1heChkLGUsZiksaD1NYXRoLm1pbihkLGUsZiksaT1nK2gsaj1nLWg7cmV0dXJuIDA9PT1qPyhiPTAsYz0wKTooYz1pPDE/ai9pOmovKDItaSksZD09PWc/Yj0oZS1mKS9qOmU9PT1nP2I9MisoZi1kKS9qOmY9PT1nJiYoYj00KyhkLWUpL2opLGI8MD9iKz02OmI+PTYmJihiLT02KSksW2IvNixjLGkvMixhWzNdXX0sYi5leHBvcnRzPWQuQ29sb3JDb252ZXJzaW9ufSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDE1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi9wNS5Db2xvclwiKSxhKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGQucHJvdG90eXBlLmFscGhhPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJhbHBoYVwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0QWxwaGEoKX0sZC5wcm90b3R5cGUuYmx1ZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmx1ZVwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0Qmx1ZSgpfSxkLnByb3RvdHlwZS5icmlnaHRuZXNzPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJicmlnaHRuZXNzXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRCcmlnaHRuZXNzKCl9LGQucHJvdG90eXBlLmNvbG9yPWZ1bmN0aW9uKCl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29sb3JcIixhcmd1bWVudHMpLGFyZ3VtZW50c1swXWluc3RhbmNlb2YgZC5Db2xvcilyZXR1cm4gYXJndW1lbnRzWzBdO3ZhciBhPWFyZ3VtZW50c1swXWluc3RhbmNlb2YgQXJyYXk/YXJndW1lbnRzWzBdOmFyZ3VtZW50cztyZXR1cm4gbmV3IGQuQ29sb3IodGhpcyxhKX0sZC5wcm90b3R5cGUuZ3JlZW49ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImdyZWVuXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRHcmVlbigpfSxkLnByb3RvdHlwZS5odWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImh1ZVwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0SHVlKCl9LGQucHJvdG90eXBlLmxlcnBDb2xvcj1mdW5jdGlvbihhLGIsYyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibGVycENvbG9yXCIsYXJndW1lbnRzKTt2YXIgZixnLGgsaSxqLGssbD10aGlzLl9jb2xvck1vZGUsbT10aGlzLl9jb2xvck1heGVzO2lmKGw9PT1lLlJHQilqPWEubGV2ZWxzLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS8yNTV9KSxrPWIubGV2ZWxzLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS8yNTV9KTtlbHNlIGlmKGw9PT1lLkhTQilhLl9nZXRCcmlnaHRuZXNzKCksYi5fZ2V0QnJpZ2h0bmVzcygpLGo9YS5oc2JhLGs9Yi5oc2JhO2Vsc2V7aWYobCE9PWUuSFNMKXRocm93IG5ldyBFcnJvcihsK1wiY2Fubm90IGJlIHVzZWQgZm9yIGludGVycG9sYXRpb24uXCIpO2EuX2dldExpZ2h0bmVzcygpLGIuX2dldExpZ2h0bmVzcygpLGo9YS5oc2xhLGs9Yi5oc2xhfXJldHVybiBjPU1hdGgubWF4KE1hdGgubWluKGMsMSksMCksdm9pZCAwPT09dGhpcy5sZXJwJiYodGhpcy5sZXJwPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYyooYi1hKSthfSksZj10aGlzLmxlcnAoalswXSxrWzBdLGMpLGc9dGhpcy5sZXJwKGpbMV0sa1sxXSxjKSxoPXRoaXMubGVycChqWzJdLGtbMl0sYyksaT10aGlzLmxlcnAoalszXSxrWzNdLGMpLGYqPW1bbF1bMF0sZyo9bVtsXVsxXSxoKj1tW2xdWzJdLGkqPW1bbF1bM10sdGhpcy5jb2xvcihmLGcsaCxpKX0sZC5wcm90b3R5cGUubGlnaHRuZXNzPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsaWdodG5lc3NcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldExpZ2h0bmVzcygpfSxkLnByb3RvdHlwZS5yZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlZFwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0UmVkKCl9LGQucHJvdG90eXBlLnNhdHVyYXRpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdHVyYXRpb25cIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldFNhdHVyYXRpb24oKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5Db2xvclwiOjE2fV0sMTY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpLGY9YShcIi4vY29sb3JfY29udmVyc2lvblwiKTtkLkNvbG9yPWZ1bmN0aW9uKGEsYil7aWYodGhpcy5fc3RvcmVNb2RlQW5kTWF4ZXMoYS5fY29sb3JNb2RlLGEuX2NvbG9yTWF4ZXMpLHRoaXMubW9kZSE9PWUuUkdCJiZ0aGlzLm1vZGUhPT1lLkhTTCYmdGhpcy5tb2RlIT09ZS5IU0IpdGhyb3cgbmV3IEVycm9yKHRoaXMubW9kZStcIiBpcyBhbiBpbnZhbGlkIGNvbG9yTW9kZS5cIik7cmV0dXJuIHRoaXMuX2FycmF5PWQuQ29sb3IuX3BhcnNlSW5wdXRzLmFwcGx5KHRoaXMsYiksdGhpcy5fY2FsY3VsYXRlTGV2ZWxzKCksdGhpc30sZC5Db2xvci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYSl7dGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzbGF8fCh0aGlzLmhzbGE9Zi5fcmdiYVRvSFNMQSh0aGlzLl9hcnJheSkpO3ZhciBiPXRoaXMubGV2ZWxzLGM9dGhpcy5fYXJyYXksZD1jWzNdO3N3aXRjaChhKXtjYXNlXCIjcnJnZ2JiXCI6cmV0dXJuXCIjXCIuY29uY2F0KGJbMF08MTY/XCIwXCIuY29uY2F0KGJbMF0udG9TdHJpbmcoMTYpKTpiWzBdLnRvU3RyaW5nKDE2KSxiWzFdPDE2P1wiMFwiLmNvbmNhdChiWzFdLnRvU3RyaW5nKDE2KSk6YlsxXS50b1N0cmluZygxNiksYlsyXTwxNj9cIjBcIi5jb25jYXQoYlsyXS50b1N0cmluZygxNikpOmJbMl0udG9TdHJpbmcoMTYpKTtjYXNlXCIjcnJnZ2JiYWFcIjpyZXR1cm5cIiNcIi5jb25jYXQoYlswXTwxNj9cIjBcIi5jb25jYXQoYlswXS50b1N0cmluZygxNikpOmJbMF0udG9TdHJpbmcoMTYpLGJbMV08MTY/XCIwXCIuY29uY2F0KGJbMV0udG9TdHJpbmcoMTYpKTpiWzFdLnRvU3RyaW5nKDE2KSxiWzJdPDE2P1wiMFwiLmNvbmNhdChiWzJdLnRvU3RyaW5nKDE2KSk6YlsyXS50b1N0cmluZygxNiksYlszXTwxNj9cIjBcIi5jb25jYXQoYlsyXS50b1N0cmluZygxNikpOmJbM10udG9TdHJpbmcoMTYpKTtjYXNlXCIjcmdiXCI6cmV0dXJuXCIjXCIuY29uY2F0KE1hdGgucm91bmQoMTUqY1swXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1sxXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1syXSkudG9TdHJpbmcoMTYpKTtjYXNlXCIjcmdiYVwiOnJldHVyblwiI1wiLmNvbmNhdChNYXRoLnJvdW5kKDE1KmNbMF0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbMV0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbMl0pLnRvU3RyaW5nKDE2KSxNYXRoLnJvdW5kKDE1KmNbM10pLnRvU3RyaW5nKDE2KSk7Y2FzZVwicmdiXCI6cmV0dXJuXCJyZ2IoXCIuY29uY2F0KGJbMF0sXCIsIFwiLGJbMV0sXCIsIFwiLGJbMl0sXCIpXCIpO2Nhc2VcInJnYiVcIjpyZXR1cm5cInJnYihcIi5jb25jYXQoKDEwMCpjWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1sxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwicmdiYSVcIjpyZXR1cm5cInJnYmEoXCIuY29uY2F0KCgxMDAqY1swXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzJdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1szXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2JcIjpjYXNlXCJoc3ZcIjpyZXR1cm5cImhzYihcIi5jb25jYXQodGhpcy5oc2JhWzBdKnRoaXMubWF4ZXNbZS5IU0JdWzBdLFwiLCBcIix0aGlzLmhzYmFbMV0qdGhpcy5tYXhlc1tlLkhTQl1bMV0sXCIsIFwiLHRoaXMuaHNiYVsyXSp0aGlzLm1heGVzW2UuSFNCXVsyXSxcIilcIik7Y2FzZVwiaHNiJVwiOmNhc2VcImhzdiVcIjpyZXR1cm5cImhzYihcIi5jb25jYXQoKDEwMCp0aGlzLmhzYmFbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwiaHNiYVwiOmNhc2VcImhzdmFcIjpyZXR1cm5cImhzYmEoXCIuY29uY2F0KHRoaXMuaHNiYVswXSp0aGlzLm1heGVzW2UuSFNCXVswXSxcIiwgXCIsdGhpcy5oc2JhWzFdKnRoaXMubWF4ZXNbZS5IU0JdWzFdLFwiLCBcIix0aGlzLmhzYmFbMl0qdGhpcy5tYXhlc1tlLkhTQl1bMl0sXCIsIFwiLGQsXCIpXCIpO2Nhc2VcImhzYmElXCI6Y2FzZVwiaHN2YSVcIjpyZXR1cm5cImhzYmEoXCIuY29uY2F0KCgxMDAqdGhpcy5oc2JhWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2JhWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2JhWzJdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqZCkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2xcIjpyZXR1cm5cImhzbChcIi5jb25jYXQodGhpcy5oc2xhWzBdKnRoaXMubWF4ZXNbZS5IU0xdWzBdLFwiLCBcIix0aGlzLmhzbGFbMV0qdGhpcy5tYXhlc1tlLkhTTF1bMV0sXCIsIFwiLHRoaXMuaHNsYVsyXSp0aGlzLm1heGVzW2UuSFNMXVsyXSxcIilcIik7Y2FzZVwiaHNsJVwiOnJldHVyblwiaHNsKFwiLmNvbmNhdCgoMTAwKnRoaXMuaHNsYVswXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsyXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2xhXCI6cmV0dXJuXCJoc2xhKFwiLmNvbmNhdCh0aGlzLmhzbGFbMF0qdGhpcy5tYXhlc1tlLkhTTF1bMF0sXCIsIFwiLHRoaXMuaHNsYVsxXSp0aGlzLm1heGVzW2UuSFNMXVsxXSxcIiwgXCIsdGhpcy5oc2xhWzJdKnRoaXMubWF4ZXNbZS5IU0xdWzJdLFwiLCBcIixkLFwiKVwiKTtjYXNlXCJoc2xhJVwiOnJldHVyblwiaHNsKFwiLmNvbmNhdCgoMTAwKnRoaXMuaHNsYVswXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNsYVsyXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmQpLnRvUHJlY2lzaW9uKDMpLFwiJSlcIik7Y2FzZVwicmdiYVwiOmRlZmF1bHQ6cmV0dXJuXCJyZ2JhKFwiK2JbMF0rXCIsXCIrYlsxXStcIixcIitiWzJdK1wiLFwiK2QrXCIpXCJ9fSxkLkNvbG9yLnByb3RvdHlwZS5zZXRSZWQ9ZnVuY3Rpb24oYSl7dGhpcy5fYXJyYXlbMF09YS90aGlzLm1heGVzW2UuUkdCXVswXSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKX0sZC5Db2xvci5wcm90b3R5cGUuc2V0R3JlZW49ZnVuY3Rpb24oYSl7dGhpcy5fYXJyYXlbMV09YS90aGlzLm1heGVzW2UuUkdCXVsxXSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKX0sZC5Db2xvci5wcm90b3R5cGUuc2V0Qmx1ZT1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVsyXT1hL3RoaXMubWF4ZXNbZS5SR0JdWzJdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5zZXRBbHBoYT1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVszXT1hL3RoaXMubWF4ZXNbdGhpcy5tb2RlXVszXSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKX0sZC5Db2xvci5wcm90b3R5cGUuX2NhbGN1bGF0ZUxldmVscz1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9hcnJheSxiPXRoaXMubGV2ZWxzPW5ldyBBcnJheShhLmxlbmd0aCksYz1hLmxlbmd0aC0xO2M+PTA7LS1jKWJbY109TWF0aC5yb3VuZCgyNTUqYVtjXSl9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRBbHBoYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheVszXSp0aGlzLm1heGVzW3RoaXMubW9kZV1bM119LGQuQ29sb3IucHJvdG90eXBlLl9zdG9yZU1vZGVBbmRNYXhlcz1mdW5jdGlvbihhLGIpe3RoaXMubW9kZT1hLHRoaXMubWF4ZXM9Yn0sZC5Db2xvci5wcm90b3R5cGUuX2dldE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0TWF4ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXhlc30sZC5Db2xvci5wcm90b3R5cGUuX2dldEJsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXlbMl0qdGhpcy5tYXhlc1tlLlJHQl1bMl19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRCcmlnaHRuZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHNiYXx8KHRoaXMuaHNiYT1mLl9yZ2JhVG9IU0JBKHRoaXMuX2FycmF5KSksdGhpcy5oc2JhWzJdKnRoaXMubWF4ZXNbZS5IU0JdWzJdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0R3JlZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXlbMV0qdGhpcy5tYXhlc1tlLlJHQl1bMV19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRIdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlPT09ZS5IU0I/KHRoaXMuaHNiYXx8KHRoaXMuaHNiYT1mLl9yZ2JhVG9IU0JBKHRoaXMuX2FycmF5KSksdGhpcy5oc2JhWzBdKnRoaXMubWF4ZXNbZS5IU0JdWzBdKToodGhpcy5oc2xhfHwodGhpcy5oc2xhPWYuX3JnYmFUb0hTTEEodGhpcy5fYXJyYXkpKSx0aGlzLmhzbGFbMF0qdGhpcy5tYXhlc1tlLkhTTF1bMF0pfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0TGlnaHRuZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHNsYXx8KHRoaXMuaHNsYT1mLl9yZ2JhVG9IU0xBKHRoaXMuX2FycmF5KSksdGhpcy5oc2xhWzJdKnRoaXMubWF4ZXNbZS5IU0xdWzJdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0UmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5WzBdKnRoaXMubWF4ZXNbZS5SR0JdWzBdfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0U2F0dXJhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGU9PT1lLkhTQj8odGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzYmFbMV0qdGhpcy5tYXhlc1tlLkhTQl1bMV0pOih0aGlzLmhzbGF8fCh0aGlzLmhzbGE9Zi5fcmdiYVRvSFNMQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNsYVsxXSp0aGlzLm1heGVzW2UuSFNMXVsxXSl9O3ZhciBnPXthbGljZWJsdWU6XCIjZjBmOGZmXCIsYW50aXF1ZXdoaXRlOlwiI2ZhZWJkN1wiLGFxdWE6XCIjMDBmZmZmXCIsYXF1YW1hcmluZTpcIiM3ZmZmZDRcIixhenVyZTpcIiNmMGZmZmZcIixiZWlnZTpcIiNmNWY1ZGNcIixiaXNxdWU6XCIjZmZlNGM0XCIsYmxhY2s6XCIjMDAwMDAwXCIsYmxhbmNoZWRhbG1vbmQ6XCIjZmZlYmNkXCIsYmx1ZTpcIiMwMDAwZmZcIixibHVldmlvbGV0OlwiIzhhMmJlMlwiLGJyb3duOlwiI2E1MmEyYVwiLGJ1cmx5d29vZDpcIiNkZWI4ODdcIixjYWRldGJsdWU6XCIjNWY5ZWEwXCIsY2hhcnRyZXVzZTpcIiM3ZmZmMDBcIixjaG9jb2xhdGU6XCIjZDI2OTFlXCIsY29yYWw6XCIjZmY3ZjUwXCIsY29ybmZsb3dlcmJsdWU6XCIjNjQ5NWVkXCIsY29ybnNpbGs6XCIjZmZmOGRjXCIsY3JpbXNvbjpcIiNkYzE0M2NcIixjeWFuOlwiIzAwZmZmZlwiLGRhcmtibHVlOlwiIzAwMDA4YlwiLGRhcmtjeWFuOlwiIzAwOGI4YlwiLGRhcmtnb2xkZW5yb2Q6XCIjYjg4NjBiXCIsZGFya2dyYXk6XCIjYTlhOWE5XCIsZGFya2dyZWVuOlwiIzAwNjQwMFwiLGRhcmtncmV5OlwiI2E5YTlhOVwiLGRhcmtraGFraTpcIiNiZGI3NmJcIixkYXJrbWFnZW50YTpcIiM4YjAwOGJcIixkYXJrb2xpdmVncmVlbjpcIiM1NTZiMmZcIixkYXJrb3JhbmdlOlwiI2ZmOGMwMFwiLGRhcmtvcmNoaWQ6XCIjOTkzMmNjXCIsZGFya3JlZDpcIiM4YjAwMDBcIixkYXJrc2FsbW9uOlwiI2U5OTY3YVwiLGRhcmtzZWFncmVlbjpcIiM4ZmJjOGZcIixkYXJrc2xhdGVibHVlOlwiIzQ4M2Q4YlwiLGRhcmtzbGF0ZWdyYXk6XCIjMmY0ZjRmXCIsZGFya3NsYXRlZ3JleTpcIiMyZjRmNGZcIixkYXJrdHVycXVvaXNlOlwiIzAwY2VkMVwiLGRhcmt2aW9sZXQ6XCIjOTQwMGQzXCIsZGVlcHBpbms6XCIjZmYxNDkzXCIsZGVlcHNreWJsdWU6XCIjMDBiZmZmXCIsZGltZ3JheTpcIiM2OTY5NjlcIixkaW1ncmV5OlwiIzY5Njk2OVwiLGRvZGdlcmJsdWU6XCIjMWU5MGZmXCIsZmlyZWJyaWNrOlwiI2IyMjIyMlwiLGZsb3JhbHdoaXRlOlwiI2ZmZmFmMFwiLGZvcmVzdGdyZWVuOlwiIzIyOGIyMlwiLGZ1Y2hzaWE6XCIjZmYwMGZmXCIsZ2FpbnNib3JvOlwiI2RjZGNkY1wiLGdob3N0d2hpdGU6XCIjZjhmOGZmXCIsZ29sZDpcIiNmZmQ3MDBcIixnb2xkZW5yb2Q6XCIjZGFhNTIwXCIsZ3JheTpcIiM4MDgwODBcIixncmVlbjpcIiMwMDgwMDBcIixncmVlbnllbGxvdzpcIiNhZGZmMmZcIixncmV5OlwiIzgwODA4MFwiLGhvbmV5ZGV3OlwiI2YwZmZmMFwiLGhvdHBpbms6XCIjZmY2OWI0XCIsaW5kaWFucmVkOlwiI2NkNWM1Y1wiLGluZGlnbzpcIiM0YjAwODJcIixpdm9yeTpcIiNmZmZmZjBcIixraGFraTpcIiNmMGU2OGNcIixsYXZlbmRlcjpcIiNlNmU2ZmFcIixsYXZlbmRlcmJsdXNoOlwiI2ZmZjBmNVwiLGxhd25ncmVlbjpcIiM3Y2ZjMDBcIixsZW1vbmNoaWZmb246XCIjZmZmYWNkXCIsbGlnaHRibHVlOlwiI2FkZDhlNlwiLGxpZ2h0Y29yYWw6XCIjZjA4MDgwXCIsbGlnaHRjeWFuOlwiI2UwZmZmZlwiLGxpZ2h0Z29sZGVucm9keWVsbG93OlwiI2ZhZmFkMlwiLGxpZ2h0Z3JheTpcIiNkM2QzZDNcIixsaWdodGdyZWVuOlwiIzkwZWU5MFwiLGxpZ2h0Z3JleTpcIiNkM2QzZDNcIixsaWdodHBpbms6XCIjZmZiNmMxXCIsbGlnaHRzYWxtb246XCIjZmZhMDdhXCIsbGlnaHRzZWFncmVlbjpcIiMyMGIyYWFcIixsaWdodHNreWJsdWU6XCIjODdjZWZhXCIsbGlnaHRzbGF0ZWdyYXk6XCIjNzc4ODk5XCIsbGlnaHRzbGF0ZWdyZXk6XCIjNzc4ODk5XCIsbGlnaHRzdGVlbGJsdWU6XCIjYjBjNGRlXCIsbGlnaHR5ZWxsb3c6XCIjZmZmZmUwXCIsbGltZTpcIiMwMGZmMDBcIixsaW1lZ3JlZW46XCIjMzJjZDMyXCIsbGluZW46XCIjZmFmMGU2XCIsbWFnZW50YTpcIiNmZjAwZmZcIixtYXJvb246XCIjODAwMDAwXCIsbWVkaXVtYXF1YW1hcmluZTpcIiM2NmNkYWFcIixtZWRpdW1ibHVlOlwiIzAwMDBjZFwiLG1lZGl1bW9yY2hpZDpcIiNiYTU1ZDNcIixtZWRpdW1wdXJwbGU6XCIjOTM3MGRiXCIsbWVkaXVtc2VhZ3JlZW46XCIjM2NiMzcxXCIsbWVkaXVtc2xhdGVibHVlOlwiIzdiNjhlZVwiLG1lZGl1bXNwcmluZ2dyZWVuOlwiIzAwZmE5YVwiLG1lZGl1bXR1cnF1b2lzZTpcIiM0OGQxY2NcIixtZWRpdW12aW9sZXRyZWQ6XCIjYzcxNTg1XCIsbWlkbmlnaHRibHVlOlwiIzE5MTk3MFwiLG1pbnRjcmVhbTpcIiNmNWZmZmFcIixtaXN0eXJvc2U6XCIjZmZlNGUxXCIsbW9jY2FzaW46XCIjZmZlNGI1XCIsbmF2YWpvd2hpdGU6XCIjZmZkZWFkXCIsbmF2eTpcIiMwMDAwODBcIixvbGRsYWNlOlwiI2ZkZjVlNlwiLG9saXZlOlwiIzgwODAwMFwiLG9saXZlZHJhYjpcIiM2YjhlMjNcIixvcmFuZ2U6XCIjZmZhNTAwXCIsb3JhbmdlcmVkOlwiI2ZmNDUwMFwiLG9yY2hpZDpcIiNkYTcwZDZcIixwYWxlZ29sZGVucm9kOlwiI2VlZThhYVwiLHBhbGVncmVlbjpcIiM5OGZiOThcIixwYWxldHVycXVvaXNlOlwiI2FmZWVlZVwiLHBhbGV2aW9sZXRyZWQ6XCIjZGI3MDkzXCIscGFwYXlhd2hpcDpcIiNmZmVmZDVcIixwZWFjaHB1ZmY6XCIjZmZkYWI5XCIscGVydTpcIiNjZDg1M2ZcIixwaW5rOlwiI2ZmYzBjYlwiLHBsdW06XCIjZGRhMGRkXCIscG93ZGVyYmx1ZTpcIiNiMGUwZTZcIixwdXJwbGU6XCIjODAwMDgwXCIscmVkOlwiI2ZmMDAwMFwiLHJvc3licm93bjpcIiNiYzhmOGZcIixyb3lhbGJsdWU6XCIjNDE2OWUxXCIsc2FkZGxlYnJvd246XCIjOGI0NTEzXCIsc2FsbW9uOlwiI2ZhODA3MlwiLHNhbmR5YnJvd246XCIjZjRhNDYwXCIsc2VhZ3JlZW46XCIjMmU4YjU3XCIsc2Vhc2hlbGw6XCIjZmZmNWVlXCIsc2llbm5hOlwiI2EwNTIyZFwiLHNpbHZlcjpcIiNjMGMwYzBcIixza3libHVlOlwiIzg3Y2VlYlwiLHNsYXRlYmx1ZTpcIiM2YTVhY2RcIixzbGF0ZWdyYXk6XCIjNzA4MDkwXCIsc2xhdGVncmV5OlwiIzcwODA5MFwiLHNub3c6XCIjZmZmYWZhXCIsc3ByaW5nZ3JlZW46XCIjMDBmZjdmXCIsc3RlZWxibHVlOlwiIzQ2ODJiNFwiLHRhbjpcIiNkMmI0OGNcIix0ZWFsOlwiIzAwODA4MFwiLHRoaXN0bGU6XCIjZDhiZmQ4XCIsdG9tYXRvOlwiI2ZmNjM0N1wiLHR1cnF1b2lzZTpcIiM0MGUwZDBcIix2aW9sZXQ6XCIjZWU4MmVlXCIsd2hlYXQ6XCIjZjVkZWIzXCIsd2hpdGU6XCIjZmZmZmZmXCIsd2hpdGVzbW9rZTpcIiNmNWY1ZjVcIix5ZWxsb3c6XCIjZmZmZjAwXCIseWVsbG93Z3JlZW46XCIjOWFjZDMyXCJ9LGg9L1xccyovLGk9LyhcXGR7MSwzfSkvLGo9LygoPzpcXGQrKD86XFwuXFxkKyk/KXwoPzpcXC5cXGQrKSkvLGs9bmV3IFJlZ0V4cChqLnNvdXJjZStcIiVcIiksbD17SEVYMzovXiMoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkkL2ksSEVYNDovXiMoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkoW2EtZjAtOV0pJC9pLEhFWDY6L14jKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pJC9pLEhFWDg6L14jKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KSQvaSxSR0I6bmV3IFJlZ0V4cChbXCJecmdiXFxcXChcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksUkdCX1BFUkNFTlQ6bmV3IFJlZ0V4cChbXCJecmdiXFxcXChcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksUkdCQTpuZXcgUmVnRXhwKFtcIl5yZ2JhXFxcXChcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIixcIixpLnNvdXJjZSxcIixcIixqLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksUkdCQV9QRVJDRU5UOm5ldyBSZWdFeHAoW1wiXnJnYmFcXFxcKFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGouc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxIU0w6bmV3IFJlZ0V4cChbXCJeaHNsXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksSFNMQTpuZXcgUmVnRXhwKFtcIl5oc2xhXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixqLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksSFNCOm5ldyBSZWdFeHAoW1wiXmhzYlxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLEhTQkE6bmV3IFJlZ0V4cChbXCJeaHNiYVxcXFwoXCIsaS5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsai5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpfTtkLkNvbG9yLl9wYXJzZUlucHV0cz1mdW5jdGlvbihhLGIsYyxoKXt2YXIgaSxqPWFyZ3VtZW50cy5sZW5ndGgsaz10aGlzLm1vZGUsbT10aGlzLm1heGVzW2tdLG49W107aWYoaj49Myl7Zm9yKG5bMF09YS9tWzBdLG5bMV09Yi9tWzFdLG5bMl09Yy9tWzJdLG5bM109XCJudW1iZXJcIj09dHlwZW9mIGg/aC9tWzNdOjEsaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgbz1uW2ldO288MD9uW2ldPTA6bz4xJiYobltpXT0xKX1yZXR1cm4gaz09PWUuSFNMP2YuX2hzbGFUb1JHQkEobik6az09PWUuSFNCP2YuX2hzYmFUb1JHQkEobik6bn1pZigxPT09aiYmXCJzdHJpbmdcIj09dHlwZW9mIGEpe3ZhciBwPWEudHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoZ1twXSlyZXR1cm4gZC5Db2xvci5fcGFyc2VJbnB1dHMuY2FsbCh0aGlzLGdbcF0pO2lmKGwuSEVYMy50ZXN0KHApKXJldHVybiBuPWwuSEVYMy5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSthLDE2KS8yNTV9KSxuWzNdPTEsbjtpZihsLkhFWDYudGVzdChwKSlyZXR1cm4gbj1sLkhFWDYuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGEsMTYpLzI1NX0pLG5bM109MSxuO2lmKGwuSEVYNC50ZXN0KHApKXJldHVybiBuPWwuSEVYNC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSthLDE2KS8yNTV9KTtpZihsLkhFWDgudGVzdChwKSlyZXR1cm4gbj1sLkhFWDguZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlSW50KGEsMTYpLzI1NX0pO2lmKGwuUkdCLnRlc3QocCkpcmV0dXJuIG49bC5SR0IuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEvMjU1fSksblszXT0xLG47aWYobC5SR0JfUEVSQ0VOVC50ZXN0KHApKXJldHVybiBuPWwuUkdCX1BFUkNFTlQuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHBhcnNlRmxvYXQoYSkvMTAwfSksblszXT0xLG47aWYobC5SR0JBLnRlc3QocCkpcmV0dXJuIG49bC5SR0JBLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDM9PT1iP3BhcnNlRmxvYXQoYSk6YS8yNTV9KTtpZihsLlJHQkFfUEVSQ0VOVC50ZXN0KHApKXJldHVybiBuPWwuUkdCQV9QRVJDRU5ULmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDM9PT1iP3BhcnNlRmxvYXQoYSk6cGFyc2VGbG9hdChhKS8xMDB9KTtpZihsLkhTTC50ZXN0KHApPyhuPWwuSFNMLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDA9PT1iP3BhcnNlSW50KGEsMTApLzM2MDpwYXJzZUludChhLDEwKS8xMDB9KSxuWzNdPTEpOmwuSFNMQS50ZXN0KHApJiYobj1sLkhTTEEuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOjM9PT1iP3BhcnNlRmxvYXQoYSk6cGFyc2VJbnQoYSwxMCkvMTAwfSkpLG49bi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKGEsMSksMCl9KSxuLmxlbmd0aClyZXR1cm4gZi5faHNsYVRvUkdCQShuKTtpZihsLkhTQi50ZXN0KHApPyhuPWwuSFNCLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJuIDA9PT1iP3BhcnNlSW50KGEsMTApLzM2MDpwYXJzZUludChhLDEwKS8xMDB9KSxuWzNdPTEpOmwuSFNCQS50ZXN0KHApJiYobj1sLkhTQkEuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOjM9PT1iP3BhcnNlRmxvYXQoYSk6cGFyc2VJbnQoYSwxMCkvMTAwfSkpLG4ubGVuZ3RoKXtmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKW5baV09TWF0aC5tYXgoTWF0aC5taW4obltpXSwxKSwwKTtyZXR1cm4gZi5faHNiYVRvUkdCQShuKX1uPVsxLDEsMSwxXX1lbHNle2lmKDEhPT1qJiYyIT09anx8XCJudW1iZXJcIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKGFyZ3VtZW50cytcImlzIG5vdCBhIHZhbGlkIGNvbG9yIHJlcHJlc2VudGF0aW9uLlwiKTtuWzBdPWEvbVsyXSxuWzFdPWEvbVsyXSxuWzJdPWEvbVsyXSxuWzNdPVwibnVtYmVyXCI9PXR5cGVvZiBiP2IvbVszXToxLG49bi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKGEsMSksMCl9KX1yZXR1cm4gbn0sYi5leHBvcnRzPWQuQ29sb3J9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vY29sb3JfY29udmVyc2lvblwiOjE0fV0sMTc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuL3A1LkNvbG9yXCIpLGQucHJvdG90eXBlLmJhY2tncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkLkltYWdlP3RoaXMuaW1hZ2UoYXJndW1lbnRzWzBdLDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTp0aGlzLl9yZW5kZXJlci5iYWNrZ3JvdW5kLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuY2xlYXIoKSx0aGlzfSxkLnByb3RvdHlwZS5jb2xvck1vZGU9ZnVuY3Rpb24oYSxiLGMsZixnKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjb2xvck1vZGVcIixhcmd1bWVudHMpLGE9PT1lLlJHQnx8YT09PWUuSFNCfHxhPT09ZS5IU0wpe3RoaXMuX2NvbG9yTW9kZT1hO3ZhciBoPXRoaXMuX2NvbG9yTWF4ZXNbYV07Mj09PWFyZ3VtZW50cy5sZW5ndGg/KGhbMF09YixoWzFdPWIsaFsyXT1iLGhbM109Yik6ND09PWFyZ3VtZW50cy5sZW5ndGg/KGhbMF09YixoWzFdPWMsaFsyXT1mKTo1PT09YXJndW1lbnRzLmxlbmd0aCYmKGhbMF09YixoWzFdPWMsaFsyXT1mLGhbM109Zyl9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2ZpbGxTZXRcIiwhMCksdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvRmlsbFwiLCEwKSx0aGlzLl9yZW5kZXJlci5maWxsLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUubm9GaWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9kb0ZpbGxcIiwhMSksdGhpc30sZC5wcm90b3R5cGUubm9TdHJva2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvU3Ryb2tlXCIsITEpLHRoaXN9LGQucHJvdG90eXBlLnN0cm9rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfc3Ryb2tlU2V0XCIsITApLHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9kb1N0cm9rZVwiLCEwKSx0aGlzLl9yZW5kZXJlci5zdHJva2UuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5Db2xvclwiOjE2fV0sMTg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1NYXRoLlBJO2IuZXhwb3J0cz17UDJEOlwicDJkXCIsV0VCR0w6XCJ3ZWJnbFwiLEFSUk9XOlwiZGVmYXVsdFwiLENST1NTOlwiY3Jvc3NoYWlyXCIsSEFORDpcInBvaW50ZXJcIixNT1ZFOlwibW92ZVwiLFRFWFQ6XCJ0ZXh0XCIsV0FJVDpcIndhaXRcIixIQUxGX1BJOmQvMixQSTpkLFFVQVJURVJfUEk6ZC80LFRBVToyKmQsVFdPX1BJOjIqZCxERUdSRUVTOlwiZGVncmVlc1wiLFJBRElBTlM6XCJyYWRpYW5zXCIsREVHX1RPX1JBRDpkLzE4MCxSQURfVE9fREVHOjE4MC9kLENPUk5FUjpcImNvcm5lclwiLENPUk5FUlM6XCJjb3JuZXJzXCIsUkFESVVTOlwicmFkaXVzXCIsUklHSFQ6XCJyaWdodFwiLExFRlQ6XCJsZWZ0XCIsQ0VOVEVSOlwiY2VudGVyXCIsVE9QOlwidG9wXCIsQk9UVE9NOlwiYm90dG9tXCIsQkFTRUxJTkU6XCJhbHBoYWJldGljXCIsUE9JTlRTOjAsTElORVM6MSxMSU5FX1NUUklQOjMsTElORV9MT09QOjIsVFJJQU5HTEVTOjQsVFJJQU5HTEVfRkFOOjYsVFJJQU5HTEVfU1RSSVA6NSxRVUFEUzpcInF1YWRzXCIsUVVBRF9TVFJJUDpcInF1YWRfc3RyaXBcIixDTE9TRTpcImNsb3NlXCIsT1BFTjpcIm9wZW5cIixDSE9SRDpcImNob3JkXCIsUElFOlwicGllXCIsUFJPSkVDVDpcInNxdWFyZVwiLFNRVUFSRTpcImJ1dHRcIixST1VORDpcInJvdW5kXCIsQkVWRUw6XCJiZXZlbFwiLE1JVEVSOlwibWl0ZXJcIixSR0I6XCJyZ2JcIixIU0I6XCJoc2JcIixIU0w6XCJoc2xcIixBVVRPOlwiYXV0b1wiLEFMVDoxOCxCQUNLU1BBQ0U6OCxDT05UUk9MOjE3LERFTEVURTo0NixET1dOX0FSUk9XOjQwLEVOVEVSOjEzLEVTQ0FQRToyNyxMRUZUX0FSUk9XOjM3LE9QVElPTjoxOCxSRVRVUk46MTMsUklHSFRfQVJST1c6MzksU0hJRlQ6MTYsVEFCOjksVVBfQVJST1c6MzgsQkxFTkQ6XCJzb3VyY2Utb3ZlclwiLEFERDpcImxpZ2h0ZXJcIixEQVJLRVNUOlwiZGFya2VuXCIsTElHSFRFU1Q6XCJsaWdodGVuXCIsRElGRkVSRU5DRTpcImRpZmZlcmVuY2VcIixFWENMVVNJT046XCJleGNsdXNpb25cIixNVUxUSVBMWTpcIm11bHRpcGx5XCIsU0NSRUVOOlwic2NyZWVuXCIsUkVQTEFDRTpcImNvcHlcIixPVkVSTEFZOlwib3ZlcmxheVwiLEhBUkRfTElHSFQ6XCJoYXJkLWxpZ2h0XCIsU09GVF9MSUdIVDpcInNvZnQtbGlnaHRcIixET0RHRTpcImNvbG9yLWRvZGdlXCIsQlVSTjpcImNvbG9yLWJ1cm5cIixUSFJFU0hPTEQ6XCJ0aHJlc2hvbGRcIixHUkFZOlwiZ3JheVwiLE9QQVFVRTpcIm9wYXF1ZVwiLElOVkVSVDpcImludmVydFwiLFBPU1RFUklaRTpcInBvc3Rlcml6ZVwiLERJTEFURTpcImRpbGF0ZVwiLEVST0RFOlwiZXJvZGVcIixCTFVSOlwiYmx1clwiLE5PUk1BTDpcIm5vcm1hbFwiLElUQUxJQzpcIml0YWxpY1wiLEJPTEQ6XCJib2xkXCIsX0RFRkFVTFRfVEVYVF9GSUxMOlwiIzAwMDAwMFwiLF9ERUZBVUxUX0xFQURNVUxUOjEuMjUsX0NUWF9NSURETEU6XCJtaWRkbGVcIixMSU5FQVI6XCJsaW5lYXJcIixRVUFEUkFUSUM6XCJxdWFkcmF0aWNcIixCRVpJRVI6XCJiZXppZXJcIixDVVJWRTpcImN1cnZlXCIsU1RST0tFOlwic3Ryb2tlXCIsRklMTDpcImZpbGxcIixURVhUVVJFOlwidGV4dHVyZVwiLElNTUVESUFURTpcImltbWVkaWF0ZVwiLE5FQVJFU1Q6XCJuZWFyZXN0XCIsUkVQRUFUOlwicmVwZWF0XCIsQ0xBTVA6XCJjbGFtcFwiLE1JUlJPUjpcIm1pcnJvclwiLExBTkRTQ0FQRTpcImxhbmRzY2FwZVwiLFBPUlRSQUlUOlwicG9ydHJhaXRcIixfREVGQVVMVF9TVFJPS0U6XCIjMDAwMDAwXCIsX0RFRkFVTFRfRklMTDpcIiNGRkZGRkZcIixHUklEOlwiZ3JpZFwiLEFYRVM6XCJheGVzXCJ9fSx7fV0sMTk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKCl7cmV0dXJuIHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aHx8ZG9jdW1lbnQuYm9keSYmZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aHx8MH1mdW5jdGlvbiBlKCl7cmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0fHxkb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodHx8MH1mdW5jdGlvbiBmKGEpe2lmKCEoZG9jdW1lbnQuZnVsbHNjcmVlbkVuYWJsZWR8fGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkfHxkb2N1bWVudC5tb3pGdWxsU2NyZWVuRW5hYmxlZHx8ZG9jdW1lbnQubXNGdWxsc2NyZWVuRW5hYmxlZCkpdGhyb3cgbmV3IEVycm9yKFwiRnVsbHNjcmVlbiBub3QgZW5hYmxlZCBpbiB0aGlzIGJyb3dzZXIuXCIpXG47YS5yZXF1ZXN0RnVsbHNjcmVlbj9hLnJlcXVlc3RGdWxsc2NyZWVuKCk6YS5tb3pSZXF1ZXN0RnVsbFNjcmVlbj9hLm1velJlcXVlc3RGdWxsU2NyZWVuKCk6YS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbj9hLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCk6YS5tc1JlcXVlc3RGdWxsc2NyZWVuJiZhLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKX1mdW5jdGlvbiBnKCl7ZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4/ZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTpkb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuP2RvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTpkb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbj9kb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbigpOmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4mJmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4oKX12YXIgaD1hKFwiLi9tYWluXCIpLGk9YShcIi4vY29uc3RhbnRzXCIpLGo9W2kuQVJST1csaS5DUk9TUyxpLkhBTkQsaS5NT1ZFLGkuVEVYVCxpLldBSVRdO2gucHJvdG90eXBlLl9mcmFtZVJhdGU9MCxoLnByb3RvdHlwZS5fbGFzdEZyYW1lVGltZT13aW5kb3cucGVyZm9ybWFuY2Uubm93KCksaC5wcm90b3R5cGUuX3RhcmdldEZyYW1lUmF0ZT02MDt2YXIgaz13aW5kb3cucHJpbnQ7aC5wcm90b3R5cGUucHJpbnQ9ZnVuY3Rpb24oKXthcmd1bWVudHMubGVuZ3RoP2NvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsYXJndW1lbnRzKTprKCl9LGgucHJvdG90eXBlLmZyYW1lQ291bnQ9MCxoLnByb3RvdHlwZS5mb2N1c2VkPWRvY3VtZW50Lmhhc0ZvY3VzKCksaC5wcm90b3R5cGUuY3Vyc29yPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1cImF1dG9cIixlPXRoaXMuX2N1ckVsZW1lbnQuZWx0O2lmKGouaW5kZXhPZihhKT4tMSlkPWE7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYSl7dmFyIGY9XCJcIjtiJiZjJiZcIm51bWJlclwiPT10eXBlb2YgYiYmXCJudW1iZXJcIj09dHlwZW9mIGMmJihmPWIrXCIgXCIrYyksZD1cImh0dHA6Ly9cIj09PWEuc3Vic3RyaW5nKDAsNyl8fFwiaHR0cHM6Ly9cIj09PWEuc3Vic3RyaW5nKDAsOCk/XCJ1cmwoXCIrYStcIikgXCIrZitcIiwgYXV0b1wiOi9cXC4oY3VyfGpwZ3xqcGVnfGdpZnxwbmd8Q1VSfEpQR3xKUEVHfEdJRnxQTkcpJC8udGVzdChhKT9cInVybChcIithK1wiKSBcIitmK1wiLCBhdXRvXCI6YX1lLnN0eWxlLmN1cnNvcj1kfSxoLnByb3RvdHlwZS5mcmFtZVJhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcImZyYW1lUmF0ZVwiLGFyZ3VtZW50cyksXCJudW1iZXJcIiE9dHlwZW9mIGF8fGE8MD90aGlzLl9mcmFtZVJhdGU6KHRoaXMuX3NldFByb3BlcnR5KFwiX3RhcmdldEZyYW1lUmF0ZVwiLGEpLHRoaXMuX3J1bkZyYW1lcygpLHRoaXMpfSxoLnByb3RvdHlwZS5nZXRGcmFtZVJhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcmFtZVJhdGUoKX0saC5wcm90b3R5cGUuc2V0RnJhbWVSYXRlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZyYW1lUmF0ZShhKX0saC5wcm90b3R5cGUubm9DdXJzb3I9ZnVuY3Rpb24oKXt0aGlzLl9jdXJFbGVtZW50LmVsdC5zdHlsZS5jdXJzb3I9XCJub25lXCJ9LGgucHJvdG90eXBlLmRpc3BsYXlXaWR0aD1zY3JlZW4ud2lkdGgsaC5wcm90b3R5cGUuZGlzcGxheUhlaWdodD1zY3JlZW4uaGVpZ2h0LGgucHJvdG90eXBlLndpbmRvd1dpZHRoPWQoKSxoLnByb3RvdHlwZS53aW5kb3dIZWlnaHQ9ZSgpLGgucHJvdG90eXBlLl9vbnJlc2l6ZT1mdW5jdGlvbihhKXt0aGlzLl9zZXRQcm9wZXJ0eShcIndpbmRvd1dpZHRoXCIsZCgpKSx0aGlzLl9zZXRQcm9wZXJ0eShcIndpbmRvd0hlaWdodFwiLGUoKSk7dmFyIGIsYz10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztcImZ1bmN0aW9uXCI9PXR5cGVvZiBjLndpbmRvd1Jlc2l6ZWQmJih2b2lkIDA9PT0oYj1jLndpbmRvd1Jlc2l6ZWQoYSkpfHxifHxhLnByZXZlbnREZWZhdWx0KCkpfSxoLnByb3RvdHlwZS53aWR0aD0wLGgucHJvdG90eXBlLmhlaWdodD0wLGgucHJvdG90eXBlLmZ1bGxzY3JlZW49ZnVuY3Rpb24oYSl7aWYoaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZnVsbHNjcmVlblwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSlyZXR1cm4gZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnR8fGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tb3pGdWxsU2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVudDthP2YoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTpnKCl9LGgucHJvdG90eXBlLnBpeGVsRGVuc2l0eT1mdW5jdGlvbihhKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwaXhlbERlbnNpdHlcIixhcmd1bWVudHMpO3ZhciBiO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPyhhIT09dGhpcy5fcGl4ZWxEZW5zaXR5JiYodGhpcy5fcGl4ZWxEZW5zaXR5PWEsdGhpcy5fcGl4ZWxzRGlydHk9ITApLGI9dGhpcyx0aGlzLnJlc2l6ZUNhbnZhcyh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LCEwKSk6Yj10aGlzLl9waXhlbERlbnNpdHksYn0saC5wcm90b3R5cGUuZGlzcGxheURlbnNpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmRldmljZVBpeGVsUmF0aW99LGgucHJvdG90eXBlLmdldFVSTD1mdW5jdGlvbigpe3JldHVybiBsb2NhdGlvbi5ocmVmfSxoLnByb3RvdHlwZS5nZXRVUkxQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIGxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KFwiL1wiKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuXCJcIiE9PWF9KX0saC5wcm90b3R5cGUuZ2V0VVJMUGFyYW1zPWZ1bmN0aW9uKCl7Zm9yKHZhciBhLGI9L1s/Jl0oW14mPV0rKSg/OlsmPV0pKFteJj1dKykvZ2ltLGM9e307bnVsbCE9KGE9Yi5leGVjKGxvY2F0aW9uLnNlYXJjaCkpOylhLmluZGV4PT09Yi5sYXN0SW5kZXgmJmIubGFzdEluZGV4KyssY1thWzFdXT1hWzJdO3JldHVybiBjfSxiLmV4cG9ydHM9aH0se1wiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0fV0sMjA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2EoXCIuL2NvbnN0YW50c1wiKTtkLl92YWxpZGF0ZVBhcmFtZXRlcnM9ZC5fZnJpZW5kbHlGaWxlTG9hZEVycm9yPWZ1bmN0aW9uKCl7fTt2YXIgZT1udWxsLGY9XCJodHRwczovL2dpdGh1Yi5jb20vcHJvY2Vzc2luZy9wNS5qcy93aWtpL3A1LmpzLW92ZXJ2aWV3I3doeS1jYW50LWktYXNzaWduLXZhcmlhYmxlcy11c2luZy1wNS1mdW5jdGlvbnMtYW5kLXZhcmlhYmxlcy1iZWZvcmUtc2V0dXBcIixnPWZ1bmN0aW9uKCl7dmFyIGI9e30sYz1mdW5jdGlvbihhKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVyblwiX1wiIT09YVswXSYmKCEoYSBpbiBiKSYmKGJbYV09ITAsITApKX0pLm1hcChmdW5jdGlvbihiKXt2YXIgYztyZXR1cm4gYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBhW2JdP1wiZnVuY3Rpb25cIjpiPT09Yi50b1VwcGVyQ2FzZSgpP1wiY29uc3RhbnRcIjpcInZhcmlhYmxlXCIse25hbWU6Yix0eXBlOmN9fSl9O2U9W10uY29uY2F0KGMoZC5wcm90b3R5cGUpLGMoYShcIi4vY29uc3RhbnRzXCIpKSksZS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGIubmFtZS5sZW5ndGgtYS5uYW1lLmxlbmd0aH0pfSxoPWZ1bmN0aW9uKGEsYil7Ynx8KGI9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSksZXx8ZygpLGUuc29tZShmdW5jdGlvbihjKXtpZihhLm1lc3NhZ2UmJm51bGwhPT1hLm1lc3NhZ2UubWF0Y2goXCJcXFxcVz9cIitjLm5hbWUrXCJcXFxcV1wiKSlyZXR1cm4gYihcIkRpZCB5b3UganVzdCB0cnkgdG8gdXNlIHA1LmpzJ3MgXCIrYy5uYW1lKyhcImZ1bmN0aW9uXCI9PT1jLnR5cGU/XCIoKSBcIjpcIiBcIikrYy50eXBlK1wiPyBJZiBzbywgeW91IG1heSB3YW50IHRvIG1vdmUgaXQgaW50byB5b3VyIHNrZXRjaCdzIHNldHVwKCkgZnVuY3Rpb24uXFxuXFxuRm9yIG1vcmUgZGV0YWlscywgc2VlOiBcIitmKSwhMH0pfTtkLnByb3RvdHlwZS5faGVscEZvck1pc3VzZWRBdFRvcExldmVsQ29kZT1oLFwiY29tcGxldGVcIiE9PWRvY3VtZW50LnJlYWR5U3RhdGUmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsaCwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsaCwhMSl9KSksYi5leHBvcnRzPWR9LHtcIi4uLy4uL2RvY3MvcmVmZXJlbmNlL2RhdGEuanNvblwiOnZvaWQgMCxcIi4vY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNH1dLDIxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vY29uc3RhbnRzXCIpO2IuZXhwb3J0cz17bW9kZUFkanVzdDpmdW5jdGlvbihhLGIsYyxlLGYpe3JldHVybiBmPT09ZC5DT1JORVI/e3g6YSx5OmIsdzpjLGg6ZX06Zj09PWQuQ09STkVSUz97eDphLHk6Yix3OmMtYSxoOmUtYn06Zj09PWQuUkFESVVTP3t4OmEtYyx5OmItZSx3OjIqYyxoOjIqZX06Zj09PWQuQ0VOVEVSP3t4OmEtLjUqYyx5OmItLjUqZSx3OmMsaDplfTp2b2lkIDB9fX0se1wiLi9jb25zdGFudHNcIjoxOH1dLDIyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWZ1bmN0aW9uKCl7d2luZG93Lm1vY2hhfHwod2luZG93LnNldHVwJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuc2V0dXB8fHdpbmRvdy5kcmF3JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuZHJhdykmJiFkLmluc3RhbmNlJiZuZXcgZH07XCJjb21wbGV0ZVwiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9lKCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsZSwhMSl9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMjM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2QucHJvdG90eXBlLmV4aXQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJleGl0KCkgbm90IGltcGxlbWVudGVkLCBzZWUgcmVtb3ZlKClcIil9LGQucHJvdG90eXBlLnB1c2hTdHlsZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInB1c2hTdHlsZSgpIG5vdCB1c2VkLCBzZWUgcHVzaCgpXCIpfSxkLnByb3RvdHlwZS5wb3BTdHlsZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInBvcFN0eWxlKCkgbm90IHVzZWQsIHNlZSBwb3AoKVwiKX0sZC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3ZhciBhPVwic2l6ZSgpIGlzIG5vdCBhIHZhbGlkIHA1IGZ1bmN0aW9uLCB0byBzZXQgdGhlIHNpemUgb2YgdGhlIFwiO3Rocm93IGErPVwiZHJhd2luZyBjYW52YXMsIHBsZWFzZSB1c2UgY3JlYXRlQ2FudmFzKCkgaW5zdGVhZFwiLG5ldyBFcnJvcihhKX0sYi5leHBvcnRzPWR9LHtcIi4vbWFpblwiOjI0fV0sMjQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjthKFwiLi9zaGltXCIpO3ZhciBkPWEoXCIuL2NvbnN0YW50c1wiKSxlPWZ1bmN0aW9uKGEsYixjKXtcImJvb2xlYW5cIj09dHlwZW9mIGImJnZvaWQgMD09PWMmJihjPWIsYj12b2lkIDApLHRoaXMuX3NldHVwRG9uZT0hMSx0aGlzLl9waXhlbERlbnNpdHk9TWF0aC5jZWlsKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKXx8MSx0aGlzLl91c2VyTm9kZT1iLHRoaXMuX2N1ckVsZW1lbnQ9bnVsbCx0aGlzLl9lbGVtZW50cz1bXSx0aGlzLl9yZXF1ZXN0QW5pbUlkPTAsdGhpcy5fcHJlbG9hZENvdW50PTAsdGhpcy5faXNHbG9iYWw9ITEsdGhpcy5fbG9vcD0hMCx0aGlzLl9pbml0aWFsaXplSW5zdGFuY2VWYXJpYWJsZXMoKSx0aGlzLl9kZWZhdWx0Q2FudmFzU2l6ZT17d2lkdGg6MTAwLGhlaWdodDoxMDB9LHRoaXMuX2V2ZW50cz17bW91c2Vtb3ZlOm51bGwsbW91c2Vkb3duOm51bGwsbW91c2V1cDpudWxsLGRyYWdlbmQ6bnVsbCxkcmFnb3ZlcjpudWxsLGNsaWNrOm51bGwsZGJsY2xpY2s6bnVsbCxtb3VzZW92ZXI6bnVsbCxtb3VzZW91dDpudWxsLGtleWRvd246bnVsbCxrZXl1cDpudWxsLGtleXByZXNzOm51bGwsdG91Y2hzdGFydDpudWxsLHRvdWNobW92ZTpudWxsLHRvdWNoZW5kOm51bGwscmVzaXplOm51bGwsYmx1cjpudWxsfSx0aGlzLl9ldmVudHMud2hlZWw9bnVsbCx0aGlzLl9sb2FkaW5nU2NyZWVuSWQ9XCJwNV9sb2FkaW5nXCIsdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHM9e307Zm9yKHZhciBkPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUucHJvdG90eXBlLl9yZWdpc3RlcmVkTWV0aG9kcyksZj0wO2Y8ZC5sZW5ndGg7ZisrKXt2YXIgZz1kW2ZdO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzW2ddPWUucHJvdG90eXBlLl9yZWdpc3RlcmVkTWV0aG9kc1tnXS5zbGljZSgpfXdpbmRvdy5EZXZpY2VPcmllbnRhdGlvbkV2ZW50JiYodGhpcy5fZXZlbnRzLmRldmljZW9yaWVudGF0aW9uPW51bGwpLHdpbmRvdy5EZXZpY2VNb3Rpb25FdmVudCYmIXdpbmRvdy5faXNOb2RlV2Via2l0JiYodGhpcy5fZXZlbnRzLmRldmljZW1vdGlvbj1udWxsKSx0aGlzLl9zdGFydD1mdW5jdGlvbigpe3RoaXMuX3VzZXJOb2RlJiZcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5fdXNlck5vZGUmJih0aGlzLl91c2VyTm9kZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl91c2VyTm9kZSkpO3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzLGI9YS5wcmVsb2FkO2lmKGIpe3ZhciBjPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2xvYWRpbmdTY3JlZW5JZCk7aWYoIWMpe2M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxjLmlubmVySFRNTD1cIkxvYWRpbmcuLi5cIixjLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixjLmlkPXRoaXMuX2xvYWRpbmdTY3JlZW5JZDsodGhpcy5fdXNlck5vZGV8fGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKGMpfXZhciBkPXRoaXMuX3ByZWxvYWRNZXRob2RzO2Zvcih2YXIgZiBpbiBkKXtkW2ZdPWRbZl18fGU7dmFyIGc9ZFtmXTtnIT09ZS5wcm90b3R5cGUmJmchPT1lfHwodGhpcy5faXNHbG9iYWwmJih3aW5kb3dbZl09dGhpcy5fd3JhcFByZWxvYWQodGhpcyxmKSksZz10aGlzKSx0aGlzLl9yZWdpc3RlcmVkUHJlbG9hZE1ldGhvZHNbZl09Z1tmXSxnW2ZdPXRoaXMuX3dyYXBQcmVsb2FkKGcsZil9YigpLHRoaXMuX3J1bklmUHJlbG9hZHNBcmVEb25lKCl9ZWxzZSB0aGlzLl9zZXR1cCgpLHRoaXMuX3J1bkZyYW1lcygpLHRoaXMuX2RyYXcoKX0uYmluZCh0aGlzKSx0aGlzLl9ydW5JZlByZWxvYWRzQXJlRG9uZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKDA9PT1hLl9wcmVsb2FkQ291bnQpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEuX2xvYWRpbmdTY3JlZW5JZCk7YiYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGEuX3NldHVwKCksYS5fcnVuRnJhbWVzKCksYS5fZHJhdygpfX0sdGhpcy5fZGVjcmVtZW50UHJlbG9hZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO1wiZnVuY3Rpb25cIj09dHlwZW9mIGEucHJlbG9hZCYmKGEuX3NldFByb3BlcnR5KFwiX3ByZWxvYWRDb3VudFwiLGEuX3ByZWxvYWRDb3VudC0xKSxhLl9ydW5JZlByZWxvYWRzQXJlRG9uZSgpKX0sdGhpcy5fd3JhcFByZWxvYWQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5jcmVtZW50UHJlbG9hZCgpLHRoaXMuX3JlZ2lzdGVyZWRQcmVsb2FkTWV0aG9kc1tiXS5hcHBseShhLGFyZ3VtZW50cyl9LmJpbmQodGhpcyl9LHRoaXMuX2luY3JlbWVudFByZWxvYWQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczthLl9zZXRQcm9wZXJ0eShcIl9wcmVsb2FkQ291bnRcIixhLl9wcmVsb2FkQ291bnQrMSl9LHRoaXMuX3NldHVwPWZ1bmN0aW9uKCl7dGhpcy5jcmVhdGVDYW52YXModGhpcy5fZGVmYXVsdENhbnZhc1NpemUud2lkdGgsdGhpcy5fZGVmYXVsdENhbnZhc1NpemUuaGVpZ2h0LFwicDJkXCIpO3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGEucHJlbG9hZClmb3IodmFyIGIgaW4gdGhpcy5fcHJlbG9hZE1ldGhvZHMpYVtiXT10aGlzLl9wcmVsb2FkTWV0aG9kc1tiXVtiXSxhW2JdJiZ0aGlzJiYoYVtiXT1hW2JdLmJpbmQodGhpcykpO1wiZnVuY3Rpb25cIj09dHlwZW9mIGEuc2V0dXAmJmEuc2V0dXAoKTtmb3IodmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjYW52YXNcIiksZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdO1widHJ1ZVwiPT09ZS5kYXRhc2V0LmhpZGRlbiYmKGUuc3R5bGUudmlzaWJpbGl0eT1cIlwiLGRlbGV0ZSBlLmRhdGFzZXQuaGlkZGVuKX10aGlzLl9zZXR1cERvbmU9ITB9LmJpbmQodGhpcyksdGhpcy5fZHJhdz1mdW5jdGlvbigpe3ZhciBhPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSxiPWEtdGhpcy5fbGFzdEZyYW1lVGltZSxjPTFlMy90aGlzLl90YXJnZXRGcmFtZVJhdGU7KCF0aGlzLl9sb29wfHxiPj1jLTUpJiYodGhpcy5yZWRyYXcoKSx0aGlzLl9mcmFtZVJhdGU9MWUzLyhhLXRoaXMuX2xhc3RGcmFtZVRpbWUpLHRoaXMuX2xhc3RGcmFtZVRpbWU9YSx2b2lkIDAhPT10aGlzLl91cGRhdGVNb3VzZUNvb3JkcyYmdGhpcy5fdXBkYXRlTW91c2VDb29yZHMoKSksdGhpcy5fbG9vcCYmKHRoaXMuX3JlcXVlc3RBbmltSWQ9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9kcmF3KSl9LmJpbmQodGhpcyksdGhpcy5fcnVuRnJhbWVzPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSW50ZXJ2YWwmJmNsZWFySW50ZXJ2YWwodGhpcy5fdXBkYXRlSW50ZXJ2YWwpfS5iaW5kKHRoaXMpLHRoaXMuX3NldFByb3BlcnR5PWZ1bmN0aW9uKGEsYil7dGhpc1thXT1iLHRoaXMuX2lzR2xvYmFsJiYod2luZG93W2FdPWIpfS5iaW5kKHRoaXMpLHRoaXMucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fbG9hZGluZ1NjcmVlbklkKTtpZihhJiYoYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpLHRoaXMuX2luY3JlbWVudFByZWxvYWQoKSksdGhpcy5fY3VyRWxlbWVudCl7dGhpcy5fbG9vcD0hMSx0aGlzLl9yZXF1ZXN0QW5pbUlkJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVxdWVzdEFuaW1JZCk7Zm9yKHZhciBiIGluIHRoaXMuX2V2ZW50cyl3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLHRoaXMuX2V2ZW50c1tiXSk7Zm9yKHZhciBjPTA7Yzx0aGlzLl9lbGVtZW50cy5sZW5ndGg7YysrKXt2YXIgZD10aGlzLl9lbGVtZW50c1tjXTtkLmVsdC5wYXJlbnROb2RlJiZkLmVsdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQuZWx0KTtmb3IodmFyIGYgaW4gZC5fZXZlbnRzKWQuZWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZixkLl9ldmVudHNbZl0pfXZhciBnPXRoaXM7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucmVtb3ZlLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwIT09YSYmYS5jYWxsKGcpfSl9aWYodGhpcy5faXNHbG9iYWwpe2Zvcih2YXIgaCBpbiBlLnByb3RvdHlwZSl0cnl7ZGVsZXRlIHdpbmRvd1toXX1jYXRjaChhKXt3aW5kb3dbaF09dm9pZCAwfWZvcih2YXIgaSBpbiB0aGlzKWlmKHRoaXMuaGFzT3duUHJvcGVydHkoaSkpdHJ5e2RlbGV0ZSB3aW5kb3dbaV19Y2F0Y2goYSl7d2luZG93W2ldPXZvaWQgMH1lLmluc3RhbmNlPW51bGx9fS5iaW5kKHRoaXMpLHRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmluaXQuZm9yRWFjaChmdW5jdGlvbihhKXt2b2lkIDAhPT1hJiZhLmNhbGwodGhpcyl9LHRoaXMpO3ZhciBoPXRoaXMuX2NyZWF0ZUZyaWVuZGx5R2xvYmFsRnVuY3Rpb25CaW5kZXIoKTtpZihhKWEodGhpcyk7ZWxzZXt0aGlzLl9pc0dsb2JhbD0hMCxlLmluc3RhbmNlPXRoaXM7Zm9yKHZhciBpIGluIGUucHJvdG90eXBlKWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUucHJvdG90eXBlW2ldKXt2YXIgaj1pLnN1YnN0cmluZygyKTt0aGlzLl9ldmVudHMuaGFzT3duUHJvcGVydHkoail8fChNYXRoLmhhc093blByb3BlcnR5KGkpJiZNYXRoW2ldPT09ZS5wcm90b3R5cGVbaV0/aChpLGUucHJvdG90eXBlW2ldKTpoKGksZS5wcm90b3R5cGVbaV0uYmluZCh0aGlzKSkpfWVsc2UgaChpLGUucHJvdG90eXBlW2ldKTtmb3IodmFyIGsgaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KGspJiZoKGssdGhpc1trXSl9Zm9yKHZhciBsIGluIHRoaXMuX2V2ZW50cyl7dmFyIG09dGhpc1tcIl9vblwiK2xdO2lmKG0pe3ZhciBuPW0uYmluZCh0aGlzKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihsLG4se3Bhc3NpdmU6ITF9KSx0aGlzLl9ldmVudHNbbF09bn19dmFyIG89ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcImZvY3VzZWRcIiwhMCl9LmJpbmQodGhpcykscD1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwiZm9jdXNlZFwiLCExKX0uYmluZCh0aGlzKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsbyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIscCksdGhpcy5yZWdpc3Rlck1ldGhvZChcInJlbW92ZVwiLGZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLG8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLHApfSksYz90aGlzLl9zdGFydCgpOlwiY29tcGxldGVcIj09PWRvY3VtZW50LnJlYWR5U3RhdGU/dGhpcy5fc3RhcnQoKTp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIix0aGlzLl9zdGFydC5iaW5kKHRoaXMpLCExKX07ZS5wcm90b3R5cGUuX2luaXRpYWxpemVJbnN0YW5jZVZhcmlhYmxlcz1mdW5jdGlvbigpe3RoaXMuX3N0eWxlcz1bXSx0aGlzLl9iZXppZXJEZXRhaWw9MjAsdGhpcy5fY3VydmVEZXRhaWw9MjAsdGhpcy5fY29sb3JNb2RlPWQuUkdCLHRoaXMuX2NvbG9yTWF4ZXM9e3JnYjpbMjU1LDI1NSwyNTUsMjU1XSxoc2I6WzM2MCwxMDAsMTAwLDFdLGhzbDpbMzYwLDEwMCwxMDAsMV19LHRoaXMuX3BpeGVsc0RpcnR5PSEwfSxlLmluc3RhbmNlPW51bGwsZS5kaXNhYmxlRnJpZW5kbHlFcnJvcnM9ITE7Zm9yKHZhciBmIGluIGQpZS5wcm90b3R5cGVbZl09ZFtmXTtlLnByb3RvdHlwZS5fcHJlbG9hZE1ldGhvZHM9e2xvYWRKU09OOmUucHJvdG90eXBlLGxvYWRJbWFnZTplLnByb3RvdHlwZSxsb2FkU3RyaW5nczplLnByb3RvdHlwZSxsb2FkWE1MOmUucHJvdG90eXBlLGxvYWRCeXRlczplLnByb3RvdHlwZSxsb2FkVGFibGU6ZS5wcm90b3R5cGUsbG9hZEZvbnQ6ZS5wcm90b3R5cGUsbG9hZE1vZGVsOmUucHJvdG90eXBlLGxvYWRTaGFkZXI6ZS5wcm90b3R5cGV9LGUucHJvdG90eXBlLl9yZWdpc3RlcmVkTWV0aG9kcz17aW5pdDpbXSxwcmU6W10scG9zdDpbXSxyZW1vdmU6W119LGUucHJvdG90eXBlLl9yZWdpc3RlcmVkUHJlbG9hZE1ldGhvZHM9e30sZS5wcm90b3R5cGUucmVnaXN0ZXJQcmVsb2FkTWV0aG9kPWZ1bmN0aW9uKGEsYil7ZS5wcm90b3R5cGUuX3ByZWxvYWRNZXRob2RzLmhhc093blByb3BlcnR5KGEpfHwoZS5wcm90b3R5cGUuX3ByZWxvYWRNZXRob2RzW2FdPWIpfSxlLnByb3RvdHlwZS5yZWdpc3Rlck1ldGhvZD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXN8fGUucHJvdG90eXBlO2MuX3JlZ2lzdGVyZWRNZXRob2RzLmhhc093blByb3BlcnR5KGEpfHwoYy5fcmVnaXN0ZXJlZE1ldGhvZHNbYV09W10pLGMuX3JlZ2lzdGVyZWRNZXRob2RzW2FdLnB1c2goYil9LGUucHJvdG90eXBlLl9jcmVhdGVGcmllbmRseUdsb2JhbEZ1bmN0aW9uQmluZGVyPWZ1bmN0aW9uKGEpe2E9YXx8e307dmFyIGI9YS5nbG9iYWxPYmplY3R8fHdpbmRvdyxjPWEubG9nfHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLGQ9e3ByaW50OiEwfTtyZXR1cm4gZnVuY3Rpb24oYSxmKXtpZihlLmRpc2FibGVGcmllbmRseUVycm9ycywxKWJbYV09ZjtlbHNlIHRyeXtpZihhIGluIGImJiEoYSBpbiBkKSl0aHJvdyBuZXcgRXJyb3IoJ2dsb2JhbCBcIicrYSsnXCIgYWxyZWFkeSBleGlzdHMnKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYixhLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sc2V0OmZ1bmN0aW9uKGQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmQsd3JpdGFibGU6ITB9KSxjKCdZb3UganVzdCBjaGFuZ2VkIHRoZSB2YWx1ZSBvZiBcIicrYStcIlxcXCIsIHdoaWNoIHdhcyBhIHA1IGZ1bmN0aW9uLiBUaGlzIGNvdWxkIGNhdXNlIHByb2JsZW1zIGxhdGVyIGlmIHlvdSdyZSBub3QgY2FyZWZ1bC5cIil9fSl9Y2F0Y2goZCl7YygncDUgaGFkIHByb2JsZW1zIGNyZWF0aW5nIHRoZSBnbG9iYWwgZnVuY3Rpb24gXCInK2ErJ1wiLCBwb3NzaWJseSBiZWNhdXNlIHlvdXIgY29kZSBpcyBhbHJlYWR5IHVzaW5nIHRoYXQgbmFtZSBhcyBhIHZhcmlhYmxlLiBZb3UgbWF5IHdhbnQgdG8gcmVuYW1lIHlvdXIgdmFyaWFibGUgdG8gc29tZXRoaW5nIGVsc2UuJyksYlthXT1mfX19LGIuZXhwb3J0cz1lfSx7XCIuL2NvbnN0YW50c1wiOjE4LFwiLi9zaGltXCI6MzR9XSwyNTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMpe3JldHVybiExPT09Yj9mKGEsYyk6ZShhLGIsYyksdGhpc31mdW5jdGlvbiBlKGEsYixjKXtjLl9ldmVudHNbYV0mJmYoYSxjKTt2YXIgZD1iLmJpbmQoYyk7Yy5lbHQuYWRkRXZlbnRMaXN0ZW5lcihhLGQsITEpLGMuX2V2ZW50c1thXT1kfWZ1bmN0aW9uIGYoYSxiKXt2YXIgYz1iLl9ldmVudHNbYV07Yi5lbHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITEpLGIuX2V2ZW50c1thXT1udWxsfXZhciBnPWEoXCIuL21haW5cIik7Zy5FbGVtZW50PWZ1bmN0aW9uKGEsYil7dGhpcy5lbHQ9YSx0aGlzLl9wSW5zdD1iLHRoaXMuX2V2ZW50cz17fSx0aGlzLndpZHRoPXRoaXMuZWx0Lm9mZnNldFdpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuZWx0Lm9mZnNldEhlaWdodH0sZy5FbGVtZW50LnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/dGhpcy5lbHQucGFyZW50Tm9kZTooXCJzdHJpbmdcIj09dHlwZW9mIGE/KFwiI1wiPT09YVswXSYmKGE9YS5zdWJzdHJpbmcoMSkpLGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpOmEgaW5zdGFuY2VvZiBnLkVsZW1lbnQmJihhPWEuZWx0KSxhLmFwcGVuZENoaWxkKHRoaXMuZWx0KSx0aGlzKX0sZy5FbGVtZW50LnByb3RvdHlwZS5pZD1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT90aGlzLmVsdC5pZDoodGhpcy5lbHQuaWQ9YSx0aGlzLndpZHRoPXRoaXMuZWx0Lm9mZnNldFdpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuZWx0Lm9mZnNldEhlaWdodCx0aGlzKX0sZy5FbGVtZW50LnByb3RvdHlwZS5jbGFzcz1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT90aGlzLmVsdC5jbGFzc05hbWU6KHRoaXMuZWx0LmNsYXNzTmFtZT1hLHRoaXMpfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlUHJlc3NlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNlZG93blwiLGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCEwKSx0aGlzLl9wSW5zdC5fc2V0TW91c2VCdXR0b24oYiksYSgpfSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRvdWJsZUNsaWNrZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJkYmxjbGlja1wiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZVdoZWVsPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwid2hlZWxcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VSZWxlYXNlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNldXBcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VDbGlja2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiY2xpY2tcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VNb3ZlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNlbW92ZVwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZU92ZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJtb3VzZW92ZXJcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuY2hhbmdlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcImNoYW5nZVwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5pbnB1dD1mdW5jdGlvbihhKXtyZXR1cm4gZChcImlucHV0XCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlT3V0PWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2VvdXRcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUudG91Y2hTdGFydGVkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwidG91Y2hzdGFydFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS50b3VjaE1vdmVkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwidG91Y2htb3ZlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLnRvdWNoRW5kZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ0b3VjaGVuZFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5kcmFnT3Zlcj1mdW5jdGlvbihhKXtyZXR1cm4gZChcImRyYWdvdmVyXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRyYWdMZWF2ZT1mdW5jdGlvbihhKXtyZXR1cm4gZChcImRyYWdsZWF2ZVwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5kcm9wPWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhiKXt2YXIgYz1uZXcgZy5GaWxlKGIpO3JldHVybiBmdW5jdGlvbihiKXtjLmRhdGE9Yi50YXJnZXQucmVzdWx0LGEoYyl9fXJldHVybiB3aW5kb3cuRmlsZSYmd2luZG93LkZpbGVSZWFkZXImJndpbmRvdy5GaWxlTGlzdCYmd2luZG93LkJsb2I/KGUoXCJkcmFnb3ZlclwiLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzKSxlKFwiZHJhZ2xlYXZlXCIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKSxhLnByZXZlbnREZWZhdWx0KCl9LHRoaXMpLHZvaWQgMCE9PWImJmUoXCJkcm9wXCIsYix0aGlzKSxlKFwiZHJvcFwiLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpO2Zvcih2YXIgYj1hLmRhdGFUcmFuc2Zlci5maWxlcyxkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBlPWJbZF0sZj1uZXcgRmlsZVJlYWRlcjtmLm9ubG9hZD1jKGUpLGUudHlwZS5pbmRleE9mKFwidGV4dFwiKT4tMT9mLnJlYWRBc1RleHQoZSk6Zi5yZWFkQXNEYXRhVVJMKGUpfX0sdGhpcykpOmNvbnNvbGUubG9nKFwiVGhlIEZpbGUgQVBJcyBhcmUgbm90IGZ1bGx5IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXIuXCIpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuX3NldFByb3BlcnR5PWZ1bmN0aW9uKGEsYil7dGhpc1thXT1ifSxiLmV4cG9ydHM9Zy5FbGVtZW50fSx7XCIuL21haW5cIjoyNH1dLDI2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKSxlPWEoXCIuL2NvbnN0YW50c1wiKTtkLkdyYXBoaWNzPWZ1bmN0aW9uKGEsYixjLGYpe3ZhciBnPWN8fGUuUDJEO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksKGYuX3VzZXJOb2RlfHxkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZCh0aGlzLmNhbnZhcyksZC5FbGVtZW50LmNhbGwodGhpcyx0aGlzLmNhbnZhcyxmLCExKTtmb3IodmFyIGggaW4gZC5wcm90b3R5cGUpdGhpc1toXXx8KFwiZnVuY3Rpb25cIj09dHlwZW9mIGQucHJvdG90eXBlW2hdP3RoaXNbaF09ZC5wcm90b3R5cGVbaF0uYmluZCh0aGlzKTp0aGlzW2hdPWQucHJvdG90eXBlW2hdKTtyZXR1cm4gZC5wcm90b3R5cGUuX2luaXRpYWxpemVJbnN0YW5jZVZhcmlhYmxlcy5hcHBseSh0aGlzKSx0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yix0aGlzLl9waXhlbERlbnNpdHk9Zi5fcGl4ZWxEZW5zaXR5LGc9PT1lLldFQkdMP3RoaXMuX3JlbmRlcmVyPW5ldyBkLlJlbmRlcmVyR0wodGhpcy5jYW52YXMsdGhpcywhMSk6dGhpcy5fcmVuZGVyZXI9bmV3IGQuUmVuZGVyZXIyRCh0aGlzLmNhbnZhcyx0aGlzLCExKSxmLl9lbGVtZW50cy5wdXNoKHRoaXMpLHRoaXMuX3JlbmRlcmVyLnJlc2l6ZShhLGIpLHRoaXMuX3JlbmRlcmVyLl9hcHBseURlZmF1bHRzKCksdGhpc30sZC5HcmFwaGljcy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLkVsZW1lbnQucHJvdG90eXBlKSxkLkdyYXBoaWNzLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLmVsdC5wYXJlbnROb2RlJiZ0aGlzLmVsdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWx0KTt2YXIgYT10aGlzLl9wSW5zdC5fZWxlbWVudHMuaW5kZXhPZih0aGlzKTstMSE9PWEmJnRoaXMuX3BJbnN0Ll9lbGVtZW50cy5zcGxpY2UoYSwxKTtmb3IodmFyIGIgaW4gdGhpcy5fZXZlbnRzKXRoaXMuZWx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoYix0aGlzLl9ldmVudHNbYl0pfSxiLmV4cG9ydHM9ZC5HcmFwaGljc30se1wiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0fV0sMjc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEpe3ZhciBiPTAsYz0wO2lmKGEub2Zmc2V0UGFyZW50KWRve2IrPWEub2Zmc2V0TGVmdCxjKz1hLm9mZnNldFRvcH13aGlsZShhPWEub2Zmc2V0UGFyZW50KTtlbHNlIGIrPWEub2Zmc2V0TGVmdCxjKz1hLm9mZnNldFRvcDtyZXR1cm5bYixjXX12YXIgZT1hKFwiLi9tYWluXCIpLGY9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2UuUmVuZGVyZXI9ZnVuY3Rpb24oYSxiLGMpe2UuRWxlbWVudC5jYWxsKHRoaXMsYSxiKSx0aGlzLmNhbnZhcz1hLGM/KHRoaXMuX2lzTWFpbkNhbnZhcz0hMCx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJfY3VyRWxlbWVudFwiLHRoaXMpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcImNhbnZhc1wiLHRoaXMuY2FudmFzKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJ3aWR0aFwiLHRoaXMud2lkdGgpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcImhlaWdodFwiLHRoaXMuaGVpZ2h0KSk6KHRoaXMuY2FudmFzLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdGhpcy5fc3R5bGVzPVtdKSx0aGlzLl90ZXh0U2l6ZT0xMix0aGlzLl90ZXh0TGVhZGluZz0xNSx0aGlzLl90ZXh0Rm9udD1cInNhbnMtc2VyaWZcIix0aGlzLl90ZXh0U3R5bGU9Zi5OT1JNQUwsdGhpcy5fdGV4dEFzY2VudD1udWxsLHRoaXMuX3RleHREZXNjZW50PW51bGwsdGhpcy5fdGV4dEFsaWduPWYuTEVGVCx0aGlzLl90ZXh0QmFzZWxpbmU9Zi5CQVNFTElORSx0aGlzLl9yZWN0TW9kZT1mLkNPUk5FUix0aGlzLl9lbGxpcHNlTW9kZT1mLkNFTlRFUix0aGlzLl9jdXJ2ZVRpZ2h0bmVzcz0wLHRoaXMuX2ltYWdlTW9kZT1mLkNPUk5FUix0aGlzLl90aW50PW51bGwsdGhpcy5fZG9TdHJva2U9ITAsdGhpcy5fZG9GaWxsPSEwLHRoaXMuX3N0cm9rZVNldD0hMSx0aGlzLl9maWxsU2V0PSExfSxlLlJlbmRlcmVyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUuRWxlbWVudC5wcm90b3R5cGUpLGUuUmVuZGVyZXIucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXtyZXR1cm57cHJvcGVydGllczp7X2RvU3Ryb2tlOnRoaXMuX2RvU3Ryb2tlLF9zdHJva2VTZXQ6dGhpcy5fc3Ryb2tlU2V0LF9kb0ZpbGw6dGhpcy5fZG9GaWxsLF9maWxsU2V0OnRoaXMuX2ZpbGxTZXQsX3RpbnQ6dGhpcy5fdGludCxfaW1hZ2VNb2RlOnRoaXMuX2ltYWdlTW9kZSxfcmVjdE1vZGU6dGhpcy5fcmVjdE1vZGUsX2VsbGlwc2VNb2RlOnRoaXMuX2VsbGlwc2VNb2RlLF90ZXh0Rm9udDp0aGlzLl90ZXh0Rm9udCxfdGV4dExlYWRpbmc6dGhpcy5fdGV4dExlYWRpbmcsX3RleHRTaXplOnRoaXMuX3RleHRTaXplLF90ZXh0QWxpZ246dGhpcy5fdGV4dEFsaWduLF90ZXh0QmFzZWxpbmU6dGhpcy5fdGV4dEJhc2VsaW5lLF90ZXh0U3R5bGU6dGhpcy5fdGV4dFN0eWxlfX19LGUuUmVuZGVyZXIucHJvdG90eXBlLnBvcD1mdW5jdGlvbihhKXthLnByb3BlcnRpZXMmJk9iamVjdC5hc3NpZ24odGhpcyxhLnByb3BlcnRpZXMpfSxlLlJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oYSxiKXt0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yix0aGlzLmVsdC53aWR0aD1hKnRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksdGhpcy5lbHQuaGVpZ2h0PWIqdGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSx0aGlzLmVsdC5zdHlsZS53aWR0aD1hK1wicHhcIix0aGlzLmVsdC5zdHlsZS5oZWlnaHQ9YitcInB4XCIsdGhpcy5faXNNYWluQ2FudmFzJiYodGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwid2lkdGhcIix0aGlzLndpZHRoKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJoZWlnaHRcIix0aGlzLmhlaWdodCkpfSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0TGVhZGluZz1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYT8odGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dExlYWRpbmdcIixhKSx0aGlzLl9wSW5zdCk6dGhpcy5fdGV4dExlYWRpbmd9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRTaXplPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPyh0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0U2l6ZVwiLGEpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRMZWFkaW5nXCIsYSpmLl9ERUZBVUxUX0xFQURNVUxUKSx0aGlzLl9hcHBseVRleHRQcm9wZXJ0aWVzKCkpOnRoaXMuX3RleHRTaXplfSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0U3R5bGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGE/KGEhPT1mLk5PUk1BTCYmYSE9PWYuSVRBTElDJiZhIT09Zi5CT0xEfHx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0U3R5bGVcIixhKSx0aGlzLl9hcHBseVRleHRQcm9wZXJ0aWVzKCkpOnRoaXMuX3RleHRTdHlsZX0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dEFzY2VudD1mdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5fdGV4dEFzY2VudCYmdGhpcy5fdXBkYXRlVGV4dE1ldHJpY3MoKSx0aGlzLl90ZXh0QXNjZW50fSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0RGVzY2VudD1mdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5fdGV4dERlc2NlbnQmJnRoaXMuX3VwZGF0ZVRleHRNZXRyaWNzKCksdGhpcy5fdGV4dERlc2NlbnR9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRBbGlnbj1mdW5jdGlvbihhLGIpe3JldHVybiB2b2lkIDAhPT1hPyh0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QWxpZ25cIixhKSx2b2lkIDAhPT1iJiZ0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QmFzZWxpbmVcIixiKSx0aGlzLl9hcHBseVRleHRQcm9wZXJ0aWVzKCkpOntob3Jpem9udGFsOnRoaXMuX3RleHRBbGlnbix2ZXJ0aWNhbDp0aGlzLl90ZXh0QmFzZWxpbmV9fSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGcsaCxpLGosayxsLG0sbixvLHA9dGhpcy5fcEluc3QscT1OdW1iZXIuTUFYX1ZBTFVFO2lmKCh0aGlzLl9kb0ZpbGx8fHRoaXMuX2RvU3Ryb2tlKSYmdm9pZCAwIT09YSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPWEudG9TdHJpbmcoKSksYT1hLnJlcGxhY2UoLyhcXHQpL2csXCIgIFwiKSxnPWEuc3BsaXQoXCJcXG5cIiksdm9pZCAwIT09ZCl7Zm9yKG89MCxpPTA7aTxnLmxlbmd0aDtpKyspZm9yKGs9XCJcIixuPWdbaV0uc3BsaXQoXCIgXCIpLGg9MDtoPG4ubGVuZ3RoO2grKylsPWsrbltoXStcIiBcIixtPXRoaXMudGV4dFdpZHRoKGwpLG0+ZD8oaz1uW2hdK1wiIFwiLG8rPXAudGV4dExlYWRpbmcoKSk6az1sO3N3aXRjaCh0aGlzLl9yZWN0TW9kZT09PWYuQ0VOVEVSJiYoYi09ZC8yLGMtPWUvMiksdGhpcy5fdGV4dEFsaWduKXtjYXNlIGYuQ0VOVEVSOmIrPWQvMjticmVhaztjYXNlIGYuUklHSFQ6Yis9ZH12YXIgcj0hMTtpZih2b2lkIDAhPT1lKXtzd2l0Y2godGhpcy5fdGV4dEJhc2VsaW5lKXtjYXNlIGYuQk9UVE9NOmMrPWUtbzticmVhaztjYXNlIGYuQ0VOVEVSOmMrPShlLW8pLzI7YnJlYWs7Y2FzZSBmLkJBU0VMSU5FOnI9ITAsdGhpcy5fdGV4dEJhc2VsaW5lPWYuVE9QfXE9YytlLXAudGV4dEFzY2VudCgpfWZvcihpPTA7aTxnLmxlbmd0aDtpKyspe2ZvcihrPVwiXCIsbj1nW2ldLnNwbGl0KFwiIFwiKSxoPTA7aDxuLmxlbmd0aDtoKyspbD1rK25baF0rXCIgXCIsbT10aGlzLnRleHRXaWR0aChsKSxtPmQmJmsubGVuZ3RoPjA/KHRoaXMuX3JlbmRlclRleHQocCxrLGIsYyxxKSxrPW5baF0rXCIgXCIsYys9cC50ZXh0TGVhZGluZygpKTprPWw7dGhpcy5fcmVuZGVyVGV4dChwLGssYixjLHEpLGMrPXAudGV4dExlYWRpbmcoKSxyJiYodGhpcy5fdGV4dEJhc2VsaW5lPWYuQkFTRUxJTkUpfX1lbHNle3ZhciBzPTAsdD1wLnRleHRBbGlnbigpLnZlcnRpY2FsO2Zvcih0PT09Zi5DRU5URVI/cz0oZy5sZW5ndGgtMSkqcC50ZXh0TGVhZGluZygpLzI6dD09PWYuQk9UVE9NJiYocz0oZy5sZW5ndGgtMSkqcC50ZXh0TGVhZGluZygpKSxqPTA7ajxnLmxlbmd0aDtqKyspdGhpcy5fcmVuZGVyVGV4dChwLGdbal0sYixjLXMscSksYys9cC50ZXh0TGVhZGluZygpfXJldHVybiBwfX0sZS5SZW5kZXJlci5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5SZW5kZXJlci5wcm90b3R5cGUuX2lzT3BlblR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mKGE9YXx8dGhpcy5fdGV4dEZvbnQpJiZhLmZvbnQmJmEuZm9udC5zdXBwb3J0ZWR9LGUuUmVuZGVyZXIucHJvdG90eXBlLl91cGRhdGVUZXh0TWV0cmljcz1mdW5jdGlvbigpe2lmKHRoaXMuX2lzT3BlblR5cGUoKSlyZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEFzY2VudFwiLHRoaXMuX3RleHRGb250Ll90ZXh0QXNjZW50KCkpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHREZXNjZW50XCIsdGhpcy5fdGV4dEZvbnQuX3RleHREZXNjZW50KCkpLHRoaXM7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7YS5zdHlsZS5mb250RmFtaWx5PXRoaXMuX3RleHRGb250LGEuc3R5bGUuZm9udFNpemU9dGhpcy5fdGV4dFNpemUrXCJweFwiLGEuaW5uZXJIVE1MPVwiQUJDamdxfFwiO3ZhciBiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7Yi5zdHlsZS5kaXNwbGF5PVwiaW5saW5lLWJsb2NrXCIsYi5zdHlsZS53aWR0aD1cIjFweFwiLGIuc3R5bGUuaGVpZ2h0PVwiMHB4XCI7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtjLmFwcGVuZENoaWxkKGEpLGMuYXBwZW5kQ2hpbGQoYiksYy5zdHlsZS5oZWlnaHQ9XCIwcHhcIixjLnN0eWxlLm92ZXJmbG93PVwiaGlkZGVuXCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjKSxiLnN0eWxlLnZlcnRpY2FsQWxpZ249XCJiYXNlbGluZVwiO3ZhciBlPWQoYiksZj1kKGEpLGc9ZVsxXS1mWzFdO2Iuc3R5bGUudmVydGljYWxBbGlnbj1cImJvdHRvbVwiLGU9ZChiKSxmPWQoYSk7dmFyIGg9ZVsxXS1mWzFdLGk9aC1nO3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGMpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRBc2NlbnRcIixnKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0RGVzY2VudFwiLGkpLHRoaXN9LGIuZXhwb3J0cz1lLlJlbmRlcmVyfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjR9XSwyODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIiksZT1hKFwiLi9jb25zdGFudHNcIiksZj1hKFwiLi4vaW1hZ2UvZmlsdGVyc1wiKTthKFwiLi9wNS5SZW5kZXJlclwiKTt2YXIgZz1cInJnYmEoMCwwLDAsMClcIjtkLlJlbmRlcmVyMkQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBkLlJlbmRlcmVyLmNhbGwodGhpcyxhLGIsYyksdGhpcy5kcmF3aW5nQ29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIiksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiZHJhd2luZ0NvbnRleHRcIix0aGlzLmRyYXdpbmdDb250ZXh0KSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5SZW5kZXJlci5wcm90b3R5cGUpLGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdHM9ZnVuY3Rpb24oKXt0aGlzLl9jYWNoZWRGaWxsU3R5bGU9dGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGU9dm9pZCAwLHRoaXMuX3NldEZpbGwoZS5fREVGQVVMVF9GSUxMKSx0aGlzLl9zZXRTdHJva2UoZS5fREVGQVVMVF9TVFJPS0UpLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZUNhcD1lLlJPVU5ELHRoaXMuZHJhd2luZ0NvbnRleHQuZm9udD1cIm5vcm1hbCAxMnB4IHNhbnMtc2VyaWZcIn0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oYSxiKXtkLlJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLGEsYiksdGhpcy5kcmF3aW5nQ29udGV4dC5zY2FsZSh0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LHRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHkpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJhY2tncm91bmQ9ZnVuY3Rpb24oKXtpZih0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSx0aGlzLnJlc2V0TWF0cml4KCksYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkLkltYWdlKXRoaXMuX3BJbnN0LmltYWdlKGFyZ3VtZW50c1swXSwwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCk7ZWxzZXt2YXIgYT10aGlzLl9nZXRGaWxsKCksYj10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpLGM9Yi50b1N0cmluZygpO3RoaXMuX3NldEZpbGwoYyksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsUmVjdCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5fc2V0RmlsbChhKX10aGlzLmRyYXdpbmdDb250ZXh0LnJlc3RvcmUoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSx0aGlzLnJlc2V0TWF0cml4KCksdGhpcy5kcmF3aW5nQ29udGV4dC5jbGVhclJlY3QoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZHJhd2luZ0NvbnRleHQucmVzdG9yZSgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcEluc3QuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKTt0aGlzLl9zZXRGaWxsKGEudG9TdHJpbmcoKSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc3Ryb2tlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcEluc3QuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKTt0aGlzLl9zZXRTdHJva2UoYS50b1N0cmluZygpKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5pbWFnZT1mdW5jdGlvbihhLGIsYyxlLGYsZyxoLGksail7dmFyIGs7dHJ5e3RoaXMuX3RpbnQmJihkLk1lZGlhRWxlbWVudCYmYSBpbnN0YW5jZW9mIGQuTWVkaWFFbGVtZW50JiZhLmxvYWRQaXhlbHMoKSxhLmNhbnZhcyYmKGs9dGhpcy5fZ2V0VGludGVkSW1hZ2VDYW52YXMoYSkpKSxrfHwoaz1hLmNhbnZhc3x8YS5lbHQpO3ZhciBsPTE7YS53aWR0aCYmYS53aWR0aD4wJiYobD1rLndpZHRoL2Eud2lkdGgpLHRoaXMuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGssbCpiLGwqYyxsKmUsbCpmLGcsaCxpLGopfWNhdGNoKGEpe2lmKFwiTlNfRVJST1JfTk9UX0FWQUlMQUJMRVwiIT09YS5uYW1lKXRocm93IGF9dGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9nZXRUaW50ZWRJbWFnZUNhbnZhcz1mdW5jdGlvbihhKXtpZighYS5jYW52YXMpcmV0dXJuIGE7dmFyIGI9Zi5fdG9QaXhlbHMoYS5jYW52YXMpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtjLndpZHRoPWEuY2FudmFzLndpZHRoLGMuaGVpZ2h0PWEuY2FudmFzLmhlaWdodDtmb3IodmFyIGQ9Yy5nZXRDb250ZXh0KFwiMmRcIiksZT1kLmNyZWF0ZUltYWdlRGF0YShhLmNhbnZhcy53aWR0aCxhLmNhbnZhcy5oZWlnaHQpLGc9ZS5kYXRhLGg9MDtoPGIubGVuZ3RoO2grPTQpe3ZhciBpPWJbaF0saj1iW2grMV0saz1iW2grMl0sbD1iW2grM107Z1toXT1pKnRoaXMuX3RpbnRbMF0vMjU1LGdbaCsxXT1qKnRoaXMuX3RpbnRbMV0vMjU1LGdbaCsyXT1rKnRoaXMuX3RpbnRbMl0vMjU1LGdbaCszXT1sKnRoaXMuX3RpbnRbM10vMjU1fXJldHVybiBkLnB1dEltYWdlRGF0YShlLDAsMCksY30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5ibGVuZE1vZGU9ZnVuY3Rpb24oYSl7dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5ibGVuZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uLGI9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0sYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCxhcmd1bWVudHMubGVuZ3RoLTEpO3RoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWIsdGhpcy5fcEluc3Q/dGhpcy5fcEluc3QuY29weS5hcHBseSh0aGlzLl9wSW5zdCxjKTp0aGlzLmNvcHkuYXBwbHkodGhpcyxjKSx0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1hfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZSxmLGcsaCxpLGo7aWYoOT09PWFyZ3VtZW50cy5sZW5ndGgpYT1hcmd1bWVudHNbMF0sYj1hcmd1bWVudHNbMV0sYz1hcmd1bWVudHNbMl0sZT1hcmd1bWVudHNbM10sZj1hcmd1bWVudHNbNF0sZz1hcmd1bWVudHNbNV0saD1hcmd1bWVudHNbNl0saT1hcmd1bWVudHNbN10saj1hcmd1bWVudHNbOF07ZWxzZXtpZig4IT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJTaWduYXR1cmUgbm90IHN1cHBvcnRlZFwiKTthPXRoaXMuX3BJbnN0LGI9YXJndW1lbnRzWzBdLGM9YXJndW1lbnRzWzFdLGU9YXJndW1lbnRzWzJdLGY9YXJndW1lbnRzWzNdLGc9YXJndW1lbnRzWzRdLGg9YXJndW1lbnRzWzVdLGk9YXJndW1lbnRzWzZdLGo9YXJndW1lbnRzWzddfWQuUmVuZGVyZXIyRC5fY29weUhlbHBlcih0aGlzLGEsYixjLGUsZixnLGgsaSxqKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5fY29weUhlbHBlcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSxqKXtiLmxvYWRQaXhlbHMoKTt2YXIgaz1iLmNhbnZhcy53aWR0aC9iLndpZHRoO2EuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGIuY2FudmFzLGsqYyxrKmQsayplLGsqZixnLGgsaSxqKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiLGMsZSl7aWYodm9pZCAwPT09YyYmdm9pZCAwPT09ZSYmKHZvaWQgMD09PWEmJnZvaWQgMD09PWI/KGE9Yj0wLGM9dGhpcy53aWR0aCxlPXRoaXMuaGVpZ2h0KTpjPWU9MSksYStjPDB8fGIrZTwwfHxhPj10aGlzLndpZHRofHxiPj10aGlzLmhlaWdodClyZXR1cm5bMCwwLDAsMjU1XTt2YXIgZj10aGlzLl9wSW5zdHx8dGhpcyxnPWYuX3BpeGVsRGVuc2l0eTthPU1hdGguZmxvb3IoYSksYj1NYXRoLmZsb29yKGIpLGM9TWF0aC5mbG9vcihjKSxlPU1hdGguZmxvb3IoZSk7dmFyIGg9YSpnLGk9YipnO2lmKDEhPT1jfHwxIT09ZXx8dGhpcyBpbnN0YW5jZW9mIGQuUmVuZGVyZXJHTCl7dmFyIGo9TWF0aC5taW4oYyxmLndpZHRoKSxrPU1hdGgubWluKGUsZi5oZWlnaHQpLGw9aipnLG09aypnLG49bmV3IGQuSW1hZ2UoaixrKTtyZXR1cm4gbi5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLmRyYXdJbWFnZSh0aGlzLmNhbnZhcyxoLGksbCxtLDAsMCxqLGspLG59dmFyIG8scDtyZXR1cm4gZi5fcGl4ZWxzRGlydHk/KG89dGhpcy5kcmF3aW5nQ29udGV4dC5nZXRJbWFnZURhdGEoaCxpLDEsMSkuZGF0YSxwPTApOihvPWYucGl4ZWxzLHA9NCooaCtpKnRoaXMud2lkdGgqZykpLFtvW3ArMF0sb1twKzFdLG9bcCsyXSxvW3ArM11dfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmxvYWRQaXhlbHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdHx8dGhpcztpZihhLl9waXhlbHNEaXJ0eSl7YS5fcGl4ZWxzRGlydHk9ITE7dmFyIGI9YS5fcGl4ZWxEZW5zaXR5LGM9dGhpcy53aWR0aCpiLGQ9dGhpcy5oZWlnaHQqYixlPXRoaXMuZHJhd2luZ0NvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsMCxjLGQpO2EuX3NldFByb3BlcnR5KFwiaW1hZ2VEYXRhXCIsZSksYS5fc2V0UHJvcGVydHkoXCJwaXhlbHNcIixlLmRhdGEpfX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe2E9TWF0aC5mbG9vcihhKSxiPU1hdGguZmxvb3IoYik7dmFyIGU9dGhpcy5fcEluc3R8fHRoaXM7aWYoYyBpbnN0YW5jZW9mIGQuSW1hZ2UpdGhpcy5kcmF3aW5nQ29udGV4dC5zYXZlKCksdGhpcy5kcmF3aW5nQ29udGV4dC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRoaXMuZHJhd2luZ0NvbnRleHQuc2NhbGUoZS5fcGl4ZWxEZW5zaXR5LGUuX3BpeGVsRGVuc2l0eSksdGhpcy5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoYy5jYW52YXMsYSxiKSx0aGlzLmRyYXdpbmdDb250ZXh0LnJlc3RvcmUoKSxlLl9waXhlbHNEaXJ0eT0hMDtlbHNle3ZhciBmPTAsZz0wLGg9MCxpPTAsaj00KihiKmUuX3BpeGVsRGVuc2l0eSoodGhpcy53aWR0aCplLl9waXhlbERlbnNpdHkpK2EqZS5fcGl4ZWxEZW5zaXR5KTtpZihlLmltYWdlRGF0YSYmIWUuX3BpeGVsc0RpcnR5fHxlLmxvYWRQaXhlbHMuY2FsbChlKSxcIm51bWJlclwiPT10eXBlb2YgYylqPGUucGl4ZWxzLmxlbmd0aCYmKGY9YyxnPWMsaD1jLGk9MjU1KTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBBcnJheSl7aWYoYy5sZW5ndGg8NCl0aHJvdyBuZXcgRXJyb3IoXCJwaXhlbCBhcnJheSBtdXN0IGJlIG9mIHRoZSBmb3JtIFtSLCBHLCBCLCBBXVwiKTtqPGUucGl4ZWxzLmxlbmd0aCYmKGY9Y1swXSxnPWNbMV0saD1jWzJdLGk9Y1szXSl9ZWxzZSBjIGluc3RhbmNlb2YgZC5Db2xvciYmajxlLnBpeGVscy5sZW5ndGgmJihmPWMubGV2ZWxzWzBdLGc9Yy5sZXZlbHNbMV0saD1jLmxldmVsc1syXSxpPWMubGV2ZWxzWzNdKTtmb3IodmFyIGs9MDtrPGUuX3BpeGVsRGVuc2l0eTtrKyspZm9yKHZhciBsPTA7bDxlLl9waXhlbERlbnNpdHk7bCsrKWo9NCooKGIqZS5fcGl4ZWxEZW5zaXR5K2wpKnRoaXMud2lkdGgqZS5fcGl4ZWxEZW5zaXR5KyhhKmUuX3BpeGVsRGVuc2l0eStrKSksZS5waXhlbHNbal09ZixlLnBpeGVsc1tqKzFdPWcsZS5waXhlbHNbaisyXT1oLGUucGl4ZWxzW2orM109aX19LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudXBkYXRlUGl4ZWxzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuX3BJbnN0fHx0aGlzLGY9ZS5fcGl4ZWxEZW5zaXR5O3ZvaWQgMD09PWEmJnZvaWQgMD09PWImJnZvaWQgMD09PWMmJnZvaWQgMD09PWQmJihhPTAsYj0wLGM9dGhpcy53aWR0aCxkPXRoaXMuaGVpZ2h0KSxjKj1mLGQqPWYsdGhpcy5kcmF3aW5nQ29udGV4dC5wdXRJbWFnZURhdGEoZS5pbWFnZURhdGEsYSxiLDAsMCxjLGQpLDA9PT1hJiYwPT09YiYmYz09PXRoaXMud2lkdGgmJmQ9PT10aGlzLmhlaWdodHx8KGUuX3BpeGVsc0RpcnR5PSEwKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fYWN1dGVBcmNUb0Jlemllcj1mdW5jdGlvbihhLGIpe3ZhciBjPWIvMixkPU1hdGguY29zKGMpLGU9TWF0aC5zaW4oYyksZj0xL01hdGgudGFuKGMpLGc9YStjLGg9TWF0aC5jb3MoZyksaT1NYXRoLnNpbihnKSxqPSg0LWQpLzMsaz1lKyhkLWopKmY7cmV0dXJue2F4Ok1hdGguY29zKGEpLGF5Ok1hdGguc2luKGEpLGJ4OmoqaCtrKmksYnk6aippLWsqaCxjeDpqKmgtayppLGN5OmoqaStrKmgsZHg6TWF0aC5jb3MoYStiKSxkeTpNYXRoLnNpbihhK2IpfX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5hcmM9ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCl7dmFyIGk9dGhpcy5kcmF3aW5nQ29udGV4dCxqPWMvMixrPWQvMixsPTFlLTUsbT0wLG49W107Zm9yKGErPWosYis9aztnLWY+bDspbT1NYXRoLm1pbihnLWYsZS5IQUxGX1BJKSxuLnB1c2godGhpcy5fYWN1dGVBcmNUb0JlemllcihmLG0pKSxmKz1tO3JldHVybiB0aGlzLl9kb0ZpbGwmJihpLmJlZ2luUGF0aCgpLG4uZm9yRWFjaChmdW5jdGlvbihjLGQpezA9PT1kJiZpLm1vdmVUbyhhK2MuYXgqaixiK2MuYXkqayksaS5iZXppZXJDdXJ2ZVRvKGErYy5ieCpqLGIrYy5ieSprLGErYy5jeCpqLGIrYy5jeSprLGErYy5keCpqLGIrYy5keSprKX0pLGghPT1lLlBJRSYmbnVsbCE9aHx8aS5saW5lVG8oYSxiKSxpLmNsb3NlUGF0aCgpLGkuZmlsbCgpKSx0aGlzLl9kb1N0cm9rZSYmKGkuYmVnaW5QYXRoKCksbi5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7MD09PWQmJmkubW92ZVRvKGErYy5heCpqLGIrYy5heSprKSxpLmJlemllckN1cnZlVG8oYStjLmJ4KmosYitjLmJ5KmssYStjLmN4KmosYitjLmN5KmssYStjLmR4KmosYitjLmR5KmspfSksaD09PWUuUElFPyhpLmxpbmVUbyhhLGIpLGkuY2xvc2VQYXRoKCkpOmg9PT1lLkNIT1JEJiZpLmNsb3NlUGF0aCgpLGkuc3Ryb2tlKCkpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZWxsaXBzZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmRyYXdpbmdDb250ZXh0LGM9dGhpcy5fZG9GaWxsLGQ9dGhpcy5fZG9TdHJva2UsZT1hWzBdLGY9YVsxXSxoPWFbMl0saT1hWzNdO2lmKGMmJiFkKXtpZih0aGlzLl9nZXRGaWxsKCk9PT1nKXJldHVybiB0aGlzfWVsc2UgaWYoIWMmJmQmJnRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpczt2YXIgaj0uNTUyMjg0NzQ5OCxrPWgvMipqLGw9aS8yKmosbT1lK2gsbj1mK2ksbz1lK2gvMixwPWYraS8yO2IuYmVnaW5QYXRoKCksYi5tb3ZlVG8oZSxwKSxiLmJlemllckN1cnZlVG8oZSxwLWwsby1rLGYsbyxmKSxiLmJlemllckN1cnZlVG8obytrLGYsbSxwLWwsbSxwKSxiLmJlemllckN1cnZlVG8obSxwK2wsbytrLG4sbyxuKSxiLmJlemllckN1cnZlVG8oby1rLG4sZSxwK2wsZSxwKSxiLmNsb3NlUGF0aCgpLGMmJmIuZmlsbCgpLGQmJmIuc3Ryb2tlKCl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUubGluZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmRyYXdpbmdDb250ZXh0O3JldHVybiB0aGlzLl9kb1N0cm9rZT90aGlzLl9nZXRTdHJva2UoKT09PWc/dGhpczooZS5saW5lV2lkdGglMj09MSYmZS50cmFuc2xhdGUoLjUsLjUpLGUuYmVnaW5QYXRoKCksZS5tb3ZlVG8oYSxiKSxlLmxpbmVUbyhjLGQpLGUuc3Ryb2tlKCksZS5saW5lV2lkdGglMj09MSYmZS50cmFuc2xhdGUoLS41LC0uNSksdGhpcyk6dGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZHJhd2luZ0NvbnRleHQ7aWYoIXRoaXMuX2RvU3Ryb2tlKXJldHVybiB0aGlzO2lmKHRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpczt2YXIgZD10aGlzLl9nZXRTdHJva2UoKSxmPXRoaXMuX2dldEZpbGwoKTthPU1hdGgucm91bmQoYSksYj1NYXRoLnJvdW5kKGIpLHRoaXMuX3NldEZpbGwoZCksYy5saW5lV2lkdGg+MT8oYy5iZWdpblBhdGgoKSxjLmFyYyhhLGIsYy5saW5lV2lkdGgvMiwwLGUuVFdPX1BJLCExKSxjLmZpbGwoKSk6Yy5maWxsUmVjdChhLGIsMSwxKSx0aGlzLl9zZXRGaWxsKGYpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnF1YWQ9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsaCxpKXt2YXIgaj10aGlzLmRyYXdpbmdDb250ZXh0LGs9dGhpcy5fZG9GaWxsLGw9dGhpcy5fZG9TdHJva2U7aWYoayYmIWwpe2lmKHRoaXMuX2dldEZpbGwoKT09PWcpcmV0dXJuIHRoaXN9ZWxzZSBpZighayYmbCYmdGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO3JldHVybiBqLmJlZ2luUGF0aCgpLGoubW92ZVRvKGEsYiksai5saW5lVG8oYyxkKSxqLmxpbmVUbyhlLGYpLGoubGluZVRvKGgsaSksai5jbG9zZVBhdGgoKSxrJiZqLmZpbGwoKSxsJiZqLnN0cm9rZSgpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucmVjdD1mdW5jdGlvbihhKXt2YXIgYj1hWzBdLGM9YVsxXSxkPWFbMl0sZT1hWzNdLGY9YVs0XSxoPWFbNV0saT1hWzZdLGo9YVs3XSxrPXRoaXMuZHJhd2luZ0NvbnRleHQsbD10aGlzLl9kb0ZpbGwsbT10aGlzLl9kb1N0cm9rZTtpZihsJiYhbSl7aWYodGhpcy5fZ2V0RmlsbCgpPT09ZylyZXR1cm4gdGhpc31lbHNlIGlmKCFsJiZtJiZ0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7aWYodGhpcy5fZG9TdHJva2UmJmsubGluZVdpZHRoJTI9PTEmJmsudHJhbnNsYXRlKC41LC41KSxrLmJlZ2luUGF0aCgpLHZvaWQgMD09PWYpay5yZWN0KGIsYyxkLGUpO2Vsc2V7dm9pZCAwPT09aCYmKGg9Ziksdm9pZCAwPT09aSYmKGk9aCksdm9pZCAwPT09aiYmKGo9aSk7dmFyIG49ZC8yLG89ZS8yO2Q8MipmJiYoZj1uKSxlPDIqZiYmKGY9byksZDwyKmgmJihoPW4pLGU8MipoJiYoaD1vKSxkPDIqaSYmKGk9biksZTwyKmkmJihpPW8pLGQ8MipqJiYoaj1uKSxlPDIqaiYmKGo9byksay5iZWdpblBhdGgoKSxrLm1vdmVUbyhiK2YsYyksay5hcmNUbyhiK2QsYyxiK2QsYytlLGgpLGsuYXJjVG8oYitkLGMrZSxiLGMrZSxpKSxrLmFyY1RvKGIsYytlLGIsYyxqKSxrLmFyY1RvKGIsYyxiK2QsYyxmKSxrLmNsb3NlUGF0aCgpfXJldHVybiB0aGlzLl9kb0ZpbGwmJmsuZmlsbCgpLHRoaXMuX2RvU3Ryb2tlJiZrLnN0cm9rZSgpLHRoaXMuX2RvU3Ryb2tlJiZrLmxpbmVXaWR0aCUyPT0xJiZrLnRyYW5zbGF0ZSgtLjUsLS41KSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRyaWFuZ2xlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZHJhd2luZ0NvbnRleHQsYz10aGlzLl9kb0ZpbGwsZD10aGlzLl9kb1N0cm9rZSxlPWFbMF0sZj1hWzFdLGg9YVsyXSxpPWFbM10saj1hWzRdLGs9YVs1XTtpZihjJiYhZCl7aWYodGhpcy5fZ2V0RmlsbCgpPT09ZylyZXR1cm4gdGhpc31lbHNlIGlmKCFjJiZkJiZ0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7Yi5iZWdpblBhdGgoKSxiLm1vdmVUbyhlLGYpLGIubGluZVRvKGgsaSksYi5saW5lVG8oaixrKSxiLmNsb3NlUGF0aCgpLGMmJmIuZmlsbCgpLGQmJmIuc3Ryb2tlKCl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZW5kU2hhcGU9ZnVuY3Rpb24oYSxiLGMsZCxmLGcsaCl7aWYoMD09PWIubGVuZ3RoKXJldHVybiB0aGlzO2lmKCF0aGlzLl9kb1N0cm9rZSYmIXRoaXMuX2RvRmlsbClyZXR1cm4gdGhpczt2YXIgaSxqPWE9PT1lLkNMT1NFO2omJiFnJiZiLnB1c2goYlswXSk7dmFyIGssbCxtPWIubGVuZ3RoO2lmKCFjfHxoIT09ZS5QT0xZR09OJiZudWxsIT09aClpZighZHx8aCE9PWUuUE9MWUdPTiYmbnVsbCE9PWgpaWYoIWZ8fGghPT1lLlBPTFlHT04mJm51bGwhPT1oKWlmKGg9PT1lLlBPSU5UUylmb3Ioaz0wO2s8bTtrKyspaT1iW2tdLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoaVs2XSksdGhpcy5fcEluc3QucG9pbnQoaVswXSxpWzFdKTtlbHNlIGlmKGg9PT1lLkxJTkVTKWZvcihrPTA7aysxPG07ays9MilpPWJba10sdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srMV1bNl0pLHRoaXMuX3BJbnN0LmxpbmUoaVswXSxpWzFdLGJbaysxXVswXSxiW2srMV1bMV0pO2Vsc2UgaWYoaD09PWUuVFJJQU5HTEVTKWZvcihrPTA7aysyPG07ays9MylpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysyXVswXSxiW2srMl1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fZG9GaWxsJiYodGhpcy5fcEluc3QuZmlsbChiW2srMl1bNV0pLHRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbCgpKSx0aGlzLl9kb1N0cm9rZSYmKHRoaXMuX3BJbnN0LnN0cm9rZShiW2srMl1bNl0pLHRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlKCkpO2Vsc2UgaWYoaD09PWUuVFJJQU5HTEVfU1RSSVApZm9yKGs9MDtrKzE8bTtrKyspaT1iW2tdLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYltrKzFdWzBdLGJbaysxXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbaysxXVs2XSksXG50aGlzLl9kb0ZpbGwmJnRoaXMuX3BJbnN0LmZpbGwoYltrKzFdWzVdKSxrKzI8bSYmKHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysyXVswXSxiW2srMl1bMV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzJdWzZdKSx0aGlzLl9kb0ZpbGwmJnRoaXMuX3BJbnN0LmZpbGwoYltrKzJdWzVdKSksdGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKTtlbHNlIGlmKGg9PT1lLlRSSUFOR0xFX0ZBTil7aWYobT4yKXtmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSxrPTI7azxtO2srKylpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYlswXVswXSxiWzBdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2stMV1bMF0sYltrLTFdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbMF1bMF0sYlswXVsxXSksazxtLTEmJih0aGlzLl9kb0ZpbGwmJmlbNV0hPT1iW2srMV1bNV18fHRoaXMuX2RvU3Ryb2tlJiZpWzZdIT09YltrKzFdWzZdKSYmKHRoaXMuX2RvRmlsbCYmKHRoaXMuX3BJbnN0LmZpbGwoaVs1XSksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsKCksdGhpcy5fcEluc3QuZmlsbChiW2srMV1bNV0pKSx0aGlzLl9kb1N0cm9rZSYmKHRoaXMuX3BJbnN0LnN0cm9rZShpWzZdKSx0aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZSgpLHRoaXMuX3BJbnN0LnN0cm9rZShiW2srMV1bNl0pKSx0aGlzLmRyYXdpbmdDb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCkpO3RoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9fWVsc2UgaWYoaD09PWUuUVVBRFMpZm9yKGs9MDtrKzM8bTtrKz00KXtmb3IoaT1iW2tdLHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oaVswXSxpWzFdKSxsPTE7bDw0O2wrKyl0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srbF1bMF0sYltrK2xdWzFdKTt0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srM11bNV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzNdWzZdKSx0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2UgaWYoaD09PWUuUVVBRF9TVFJJUCl7aWYobT4zKWZvcihrPTA7aysxPG07ays9MilpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSxrKzM8bT8odGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYltrKzJdWzBdLGJbaysyXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srMV1bMF0sYltrKzFdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2srM11bMF0sYltrKzNdWzFdKSx0aGlzLl9kb0ZpbGwmJnRoaXMuX3BJbnN0LmZpbGwoYltrKzNdWzVdKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbayszXVs2XSkpOih0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pKSx0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2V7Zm9yKHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYlswXVswXSxiWzBdWzFdKSxrPTE7azxtO2srKylpPWJba10saS5pc1ZlcnQmJihpLm1vdmVUbz90aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSkpO3RoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZXtmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSxrPTA7azxtO2srKyliW2tdLmlzVmVydD9iW2tdLm1vdmVUbz90aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhbMF0sYltrXVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrXVswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8oYltrXVswXSxiW2tdWzFdLGJba11bMl0sYltrXVszXSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNle2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGs9MDtrPG07aysrKWJba10uaXNWZXJ0P2Jba10ubW92ZVRvP3RoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJba11bMF0sYltrXVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrXVswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LmJlemllckN1cnZlVG8oYltrXVswXSxiW2tdWzFdLGJba11bMl0sYltrXVszXSxiW2tdWzRdLGJba11bNV0pO3RoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZSBpZihtPjMpe3ZhciBuPVtdLG89MS10aGlzLl9jdXJ2ZVRpZ2h0bmVzcztmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiWzFdWzBdLGJbMV1bMV0pLGs9MTtrKzI8bTtrKyspaT1iW2tdLG5bMF09W2lbMF0saVsxXV0sblsxXT1baVswXSsobypiW2srMV1bMF0tbypiW2stMV1bMF0pLzYsaVsxXSsobypiW2srMV1bMV0tbypiW2stMV1bMV0pLzZdLG5bMl09W2JbaysxXVswXSsobypiW2tdWzBdLW8qYltrKzJdWzBdKS82LGJbaysxXVsxXSsobypiW2tdWzFdLW8qYltrKzJdWzFdKS82XSxuWzNdPVtiW2srMV1bMF0sYltrKzFdWzFdXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlemllckN1cnZlVG8oblsxXVswXSxuWzFdWzFdLG5bMl1bMF0sblsyXVsxXSxuWzNdWzBdLG5bM11bMV0pO2omJnRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pLHRoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9cmV0dXJuIGM9ITEsZD0hMSxmPSExLGc9ITEsaiYmYi5wb3AoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5ub1Ntb290aD1mdW5jdGlvbigpe3JldHVyblwiaW1hZ2VTbW9vdGhpbmdFbmFibGVkXCJpbiB0aGlzLmRyYXdpbmdDb250ZXh0JiYodGhpcy5kcmF3aW5nQ29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITEpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuXCJpbWFnZVNtb290aGluZ0VuYWJsZWRcImluIHRoaXMuZHJhd2luZ0NvbnRleHQmJih0aGlzLmRyYXdpbmdDb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zdHJva2VDYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1lLlJPVU5EJiZhIT09ZS5TUVVBUkUmJmEhPT1lLlBST0pFQ1R8fCh0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVDYXA9YSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zdHJva2VKb2luPWZ1bmN0aW9uKGEpe3JldHVybiBhIT09ZS5ST1VORCYmYSE9PWUuQkVWRUwmJmEhPT1lLk1JVEVSfHwodGhpcy5kcmF3aW5nQ29udGV4dC5saW5lSm9pbj1hKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnN0cm9rZVdlaWdodD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lV2lkdGg9dm9pZCAwPT09YXx8MD09PWE/MWUtNDphLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2dldEZpbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FjaGVkRmlsbFN0eWxlfHwodGhpcy5fY2FjaGVkRmlsbFN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFN0eWxlKSx0aGlzLl9jYWNoZWRGaWxsU3R5bGV9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX3NldEZpbGw9ZnVuY3Rpb24oYSl7YSE9PXRoaXMuX2NhY2hlZEZpbGxTdHlsZSYmKHRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFN0eWxlPWEsdGhpcy5fY2FjaGVkRmlsbFN0eWxlPWEpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9nZXRTdHJva2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGV8fCh0aGlzLl9jYWNoZWRTdHJva2VTdHlsZT10aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZVN0eWxlKSx0aGlzLl9jYWNoZWRTdHJva2VTdHlsZX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fc2V0U3Ryb2tlPWZ1bmN0aW9uKGEpe2EhPT10aGlzLl9jYWNoZWRTdHJva2VTdHlsZSYmKHRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlU3R5bGU9YSx0aGlzLl9jYWNoZWRTdHJva2VTdHlsZT1hKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5iZXppZXI9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXtyZXR1cm4gdGhpcy5fcEluc3QuYmVnaW5TaGFwZSgpLHRoaXMuX3BJbnN0LnZlcnRleChhLGIpLHRoaXMuX3BJbnN0LmJlemllclZlcnRleChjLGQsZSxmLGcsaCksdGhpcy5fcEluc3QuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmN1cnZlPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCl7cmV0dXJuIHRoaXMuX3BJbnN0LmJlZ2luU2hhcGUoKSx0aGlzLl9wSW5zdC5jdXJ2ZVZlcnRleChhLGIpLHRoaXMuX3BJbnN0LmN1cnZlVmVydGV4KGMsZCksdGhpcy5fcEluc3QuY3VydmVWZXJ0ZXgoZSxmKSx0aGlzLl9wSW5zdC5jdXJ2ZVZlcnRleChnLGgpLHRoaXMuX3BJbnN0LmVuZFNoYXBlKCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fZG9GaWxsU3Ryb2tlQ2xvc2U9ZnVuY3Rpb24oKXt0aGlzLl9kb0ZpbGwmJnRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbCgpLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLmRyYXdpbmdDb250ZXh0LnN0cm9rZSgpLHRoaXMuZHJhd2luZ0NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmRyYXdpbmdDb250ZXh0LnRyYW5zZm9ybShhLGIsYyxkLGUsZil9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucmVzZXRNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRoaXMuZHJhd2luZ0NvbnRleHQuc2NhbGUodGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSx0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5KSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhKXt0aGlzLmRyYXdpbmdDb250ZXh0LnJvdGF0ZShhKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnNjYWxlKGEsYiksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zaGVhclg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNmb3JtKDEsMCxNYXRoLnRhbihhKSwxLDAsMCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zaGVhclk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNmb3JtKDEsTWF0aC50YW4oYSksMCwxLDAsMCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yJiYoYj1hLnksYT1hLngpLHRoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNsYXRlKGEsYiksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGEsYixjLGYsZyl7dmFyIGg7dm9pZCAwIT09ZiYmdm9pZCAwIT09ZyYmdGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QmFzZWxpbmU9PT1lLkJBU0VMSU5FJiYoaD0hMCx0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT1lLlRPUCk7dmFyIGk9ZC5SZW5kZXJlci5wcm90b3R5cGUudGV4dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGgmJih0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT1lLkJBU0VMSU5FKSxpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9yZW5kZXJUZXh0PWZ1bmN0aW9uKGEsYixjLGQsZil7aWYoIShkPj1mKSlyZXR1cm4gYS5wdXNoKCksdGhpcy5faXNPcGVuVHlwZSgpP3RoaXMuX3RleHRGb250Ll9yZW5kZXJQYXRoKGIsYyxkLHtyZW5kZXJlcjp0aGlzfSk6KHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9zdHJva2VTZXQmJnRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlVGV4dChiLGMsZCksdGhpcy5fZG9GaWxsJiYodGhpcy5fZmlsbFNldHx8dGhpcy5fc2V0RmlsbChlLl9ERUZBVUxUX1RFWFRfRklMTCksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsVGV4dChiLGMsZCkpKSxhLnBvcCgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCxhfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRleHRXaWR0aD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5faXNPcGVuVHlwZSgpP3RoaXMuX3RleHRGb250Ll90ZXh0V2lkdGgoYSx0aGlzLl90ZXh0U2l6ZSk6dGhpcy5kcmF3aW5nQ29udGV4dC5tZWFzdXJlVGV4dChhKS53aWR0aH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fYXBwbHlUZXh0UHJvcGVydGllcz1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5fcEluc3Q7cmV0dXJuIHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRBc2NlbnRcIixudWxsKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0RGVzY2VudFwiLG51bGwpLGE9dGhpcy5fdGV4dEZvbnQsdGhpcy5faXNPcGVuVHlwZSgpJiYoYT10aGlzLl90ZXh0Rm9udC5mb250LmZhbWlseU5hbWUsdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dFN0eWxlXCIsdGhpcy5fdGV4dEZvbnQuZm9udC5zdHlsZU5hbWUpKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZvbnQ9KHRoaXMuX3RleHRTdHlsZXx8XCJub3JtYWxcIikrXCIgXCIrKHRoaXMuX3RleHRTaXplfHwxMikrXCJweCBcIisoYXx8XCJzYW5zLXNlcmlmXCIpLHRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEFsaWduPXRoaXMuX3RleHRBbGlnbix0aGlzLl90ZXh0QmFzZWxpbmU9PT1lLkNFTlRFUj90aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT1lLl9DVFhfTUlERExFOnRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPXRoaXMuX3RleHRCYXNlbGluZSxifSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC5zYXZlKCksZC5SZW5kZXJlci5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oYSl7dGhpcy5kcmF3aW5nQ29udGV4dC5yZXN0b3JlKCksdGhpcy5fY2FjaGVkRmlsbFN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuZmlsbFN0eWxlLHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlU3R5bGUsZC5SZW5kZXJlci5wcm90b3R5cGUucG9wLmNhbGwodGhpcyxhKX0sYi5leHBvcnRzPWQuUmVuZGVyZXIyRH0se1wiLi4vaW1hZ2UvZmlsdGVyc1wiOjQyLFwiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0LFwiLi9wNS5SZW5kZXJlclwiOjI3fV0sMjk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpLGU9YShcIi4vY29uc3RhbnRzXCIpO2EoXCIuL3A1LkdyYXBoaWNzXCIpLGEoXCIuL3A1LlJlbmRlcmVyMkRcIiksYShcIi4uL3dlYmdsL3A1LlJlbmRlcmVyR0xcIik7dmFyIGY9XCJkZWZhdWx0Q2FudmFzMFwiLGc9XCJwNUNhbnZhc1wiO2QucHJvdG90eXBlLmNyZWF0ZUNhbnZhcz1mdW5jdGlvbihhLGIsYyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlQ2FudmFzXCIsYXJndW1lbnRzKTt2YXIgaCxpPWN8fGUuUDJEO2lmKGk9PT1lLldFQkdMKXtpZihoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpKXtoLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCk7dmFyIGo9dGhpcy5fcmVuZGVyZXI7dGhpcy5fZWxlbWVudHM9dGhpcy5fZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT09an0pfWg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxoLmlkPWYsaC5jbGFzc0xpc3QuYWRkKGcpfWVsc2UgaWYodGhpcy5fZGVmYXVsdEdyYXBoaWNzQ3JlYXRlZCloPXRoaXMuY2FudmFzO2Vsc2V7aD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Zvcih2YXIgaz0wO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGVmYXVsdENhbnZhc1wiK2spOylrKys7Zj1cImRlZmF1bHRDYW52YXNcIitrLGguaWQ9ZixoLmNsYXNzTGlzdC5hZGQoZyl9cmV0dXJuIHRoaXMuX3NldHVwRG9uZXx8KGguZGF0YXNldC5oaWRkZW49ITAsaC5zdHlsZS52aXNpYmlsaXR5PVwiaGlkZGVuXCIpLHRoaXMuX3VzZXJOb2RlP3RoaXMuX3VzZXJOb2RlLmFwcGVuZENoaWxkKGgpOmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaCksaT09PWUuV0VCR0w/KHRoaXMuX3NldFByb3BlcnR5KFwiX3JlbmRlcmVyXCIsbmV3IGQuUmVuZGVyZXJHTChoLHRoaXMsITApKSx0aGlzLl9lbGVtZW50cy5wdXNoKHRoaXMuX3JlbmRlcmVyKSk6dGhpcy5fZGVmYXVsdEdyYXBoaWNzQ3JlYXRlZHx8KHRoaXMuX3NldFByb3BlcnR5KFwiX3JlbmRlcmVyXCIsbmV3IGQuUmVuZGVyZXIyRChoLHRoaXMsITApKSx0aGlzLl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkPSEwLHRoaXMuX2VsZW1lbnRzLnB1c2godGhpcy5fcmVuZGVyZXIpKSx0aGlzLl9yZW5kZXJlci5yZXNpemUoYSxiKSx0aGlzLl9yZW5kZXJlci5fYXBwbHlEZWZhdWx0cygpLHRoaXMuX3JlbmRlcmVyfSxkLnByb3RvdHlwZS5yZXNpemVDYW52YXM9ZnVuY3Rpb24oYSxiLGMpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlc2l6ZUNhbnZhc1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIpe3ZhciBlPXt9O2Zvcih2YXIgZiBpbiB0aGlzLmRyYXdpbmdDb250ZXh0KXt2YXIgZz10aGlzLmRyYXdpbmdDb250ZXh0W2ZdO1wib2JqZWN0XCIhPXR5cGVvZiBnJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBnJiYoZVtmXT1nKX10aGlzLl9yZW5kZXJlci5yZXNpemUoYSxiKSx0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yjtmb3IodmFyIGggaW4gZSl0cnl7dGhpcy5kcmF3aW5nQ29udGV4dFtoXT1lW2hdfWNhdGNoKGEpe31jfHx0aGlzLnJlZHJhdygpfX0sZC5wcm90b3R5cGUubm9DYW52YXM9ZnVuY3Rpb24oKXt0aGlzLmNhbnZhcyYmdGhpcy5jYW52YXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNhbnZhcyl9LGQucHJvdG90eXBlLmNyZWF0ZUdyYXBoaWNzPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlR3JhcGhpY3NcIixhcmd1bWVudHMpLG5ldyBkLkdyYXBoaWNzKGEsYixjLHRoaXMpfSxkLnByb3RvdHlwZS5ibGVuZE1vZGU9ZnVuY3Rpb24oYSl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmxlbmRNb2RlXCIsYXJndW1lbnRzKSxhIT09ZS5CTEVORCYmYSE9PWUuREFSS0VTVCYmYSE9PWUuTElHSFRFU1QmJmEhPT1lLkRJRkZFUkVOQ0UmJmEhPT1lLk1VTFRJUExZJiZhIT09ZS5FWENMVVNJT04mJmEhPT1lLlNDUkVFTiYmYSE9PWUuUkVQTEFDRSYmYSE9PWUuT1ZFUkxBWSYmYSE9PWUuSEFSRF9MSUdIVCYmYSE9PWUuU09GVF9MSUdIVCYmYSE9PWUuRE9ER0UmJmEhPT1lLkJVUk4mJmEhPT1lLkFERCYmYSE9PWUuTk9STUFMKXRocm93IG5ldyBFcnJvcihcIk1vZGUgXCIrYStcIiBub3QgcmVjb2duaXplZC5cIik7dGhpcy5fcmVuZGVyZXIuYmxlbmRNb2RlKGEpfSxiLmV4cG9ydHM9ZH0se1wiLi4vd2ViZ2wvcDUuUmVuZGVyZXJHTFwiOjc0LFwiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0LFwiLi9wNS5HcmFwaGljc1wiOjI2LFwiLi9wNS5SZW5kZXJlcjJEXCI6Mjh9XSwzMDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9tYWluXCIpLGU9YShcIi4uL2NvbnN0YW50c1wiKSxmPWEoXCIuLi9oZWxwZXJzXCIpO2EoXCIuLi9lcnJvcl9oZWxwZXJzXCIpLGQucHJvdG90eXBlLmFyYz1mdW5jdGlvbihhLGIsYyxnLGgsaSxqLGspe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImFyY1wiLGFyZ3VtZW50cyksIXRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmIXRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpcmV0dXJuIHRoaXM7Zm9yKGg9dGhpcy5fdG9SYWRpYW5zKGgpLGk9dGhpcy5fdG9SYWRpYW5zKGkpO2g8MDspaCs9ZS5UV09fUEk7Zm9yKDtpPDA7KWkrPWUuVFdPX1BJO3ZvaWQgMCE9PWgmJnZvaWQgMCE9PWkmJihpLnRvRml4ZWQoMTApPT09aC50b0ZpeGVkKDEwKXx8TWF0aC5hYnMoaS1oKT09PWUuVFdPX1BJPyhoJT1lLlRXT19QSSxpJT1lLlRXT19QSSxoKz1lLlRXT19QSSk6TWF0aC5hYnMoaS1oKT5lLlRXT19QSSYmKGglPWUuVFdPX1BJLGklPWUuVFdPX1BJLGkrPWUuVFdPX1BJKSksaDw9ZS5IQUxGX1BJP2g9TWF0aC5hdGFuKGMvZypNYXRoLnRhbihoKSk6aD5lLkhBTEZfUEkmJmg8PTMqZS5IQUxGX1BJJiYoaD1NYXRoLmF0YW4oYy9nKk1hdGgudGFuKGgpKStlLlBJKSxpPD1lLkhBTEZfUEk/aT1NYXRoLmF0YW4oYy9nKk1hdGgudGFuKGkpKTppPmUuSEFMRl9QSSYmaTw9MyplLkhBTEZfUEkmJihpPU1hdGguYXRhbihjL2cqTWF0aC50YW4oaSkpK2UuUEkpLGg+aSYmKGkrPWUuVFdPX1BJKSxjPU1hdGguYWJzKGMpLGc9TWF0aC5hYnMoZyk7dmFyIGw9Zi5tb2RlQWRqdXN0KGEsYixjLGcsdGhpcy5fcmVuZGVyZXIuX2VsbGlwc2VNb2RlKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuYXJjKGwueCxsLnksbC53LGwuaCxoLGksaixrKSx0aGlzfSxkLnByb3RvdHlwZS5lbGxpcHNlPWZ1bmN0aW9uKGEsYixjLGUsZyl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZWxsaXBzZVwiLGFyZ3VtZW50cyksIXRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmIXRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpcmV0dXJuIHRoaXM7YzwwJiYoYz1NYXRoLmFicyhjKSksdm9pZCAwPT09ZT9lPWM6ZTwwJiYoZT1NYXRoLmFicyhlKSk7dmFyIGg9Zi5tb2RlQWRqdXN0KGEsYixjLGUsdGhpcy5fcmVuZGVyZXIuX2VsbGlwc2VNb2RlKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZWxsaXBzZShbaC54LGgueSxoLncsaC5oLGddKSx0aGlzfSxkLnByb3RvdHlwZS5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxpbmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmdGhpcy5fcmVuZGVyZXIubGluZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBvaW50XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJnRoaXMuX3JlbmRlcmVyLnBvaW50LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucXVhZD1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJxdWFkXCIsYXJndW1lbnRzKSwodGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlfHx0aGlzLl9yZW5kZXJlci5fZG9GaWxsKSYmdGhpcy5fcmVuZGVyZXIucXVhZC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLnJlY3Q9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyZWN0XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fZG9TdHJva2V8fHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpe2Zvcih2YXIgYT1mLm1vZGVBZGp1c3QoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLHRoaXMuX3JlbmRlcmVyLl9yZWN0TW9kZSksYj1bYS54LGEueSxhLncsYS5oXSxjPTQ7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliW2NdPWFyZ3VtZW50c1tjXTt0aGlzLl9yZW5kZXJlci5yZWN0KGIpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS50cmlhbmdsZT1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0cmlhbmdsZVwiLGFyZ3VtZW50cyksKHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZXx8dGhpcy5fcmVuZGVyZXIuX2RvRmlsbCkmJnRoaXMuX3JlbmRlcmVyLnRyaWFuZ2xlKGFyZ3VtZW50cyksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4uL2NvbnN0YW50c1wiOjE4LFwiLi4vZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vaGVscGVyc1wiOjIxLFwiLi4vbWFpblwiOjI0fV0sMzE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vbWFpblwiKSxlPWEoXCIuLi9jb25zdGFudHNcIik7ZC5wcm90b3R5cGUuZWxsaXBzZU1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImVsbGlwc2VNb2RlXCIsYXJndW1lbnRzKSxhIT09ZS5DT1JORVImJmEhPT1lLkNPUk5FUlMmJmEhPT1lLlJBRElVUyYmYSE9PWUuQ0VOVEVSfHwodGhpcy5fcmVuZGVyZXIuX2VsbGlwc2VNb2RlPWEpLHRoaXN9LGQucHJvdG90eXBlLm5vU21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLm5vU21vb3RoKCksdGhpc30sZC5wcm90b3R5cGUucmVjdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlY3RNb2RlXCIsYXJndW1lbnRzKSxhIT09ZS5DT1JORVImJmEhPT1lLkNPUk5FUlMmJmEhPT1lLlJBRElVUyYmYSE9PWUuQ0VOVEVSfHwodGhpcy5fcmVuZGVyZXIuX3JlY3RNb2RlPWEpLHRoaXN9LGQucHJvdG90eXBlLnNtb290aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5zbW9vdGgoKSx0aGlzfSxkLnByb3RvdHlwZS5zdHJva2VDYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInN0cm9rZUNhcFwiLGFyZ3VtZW50cyksYSE9PWUuUk9VTkQmJmEhPT1lLlNRVUFSRSYmYSE9PWUuUFJPSkVDVHx8dGhpcy5fcmVuZGVyZXIuc3Ryb2tlQ2FwKGEpLHRoaXN9LGQucHJvdG90eXBlLnN0cm9rZUpvaW49ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInN0cm9rZUpvaW5cIixhcmd1bWVudHMpLGEhPT1lLlJPVU5EJiZhIT09ZS5CRVZFTCYmYSE9PWUuTUlURVJ8fHRoaXMuX3JlbmRlcmVyLnN0cm9rZUpvaW4oYSksdGhpc30sZC5wcm90b3R5cGUuc3Ryb2tlV2VpZ2h0PWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzdHJva2VXZWlnaHRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnN0cm9rZVdlaWdodChhKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29uc3RhbnRzXCI6MTgsXCIuLi9tYWluXCI6MjR9XSwzMjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9tYWluXCIpO2EoXCIuLi9lcnJvcl9oZWxwZXJzXCIpLGQucHJvdG90eXBlLmJlemllcj1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZXx8dGhpcy5fcmVuZGVyZXIuX2RvRmlsbD8odGhpcy5fcmVuZGVyZXIuYmV6aWVyLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpcyk6dGhpc30sZC5wcm90b3R5cGUuYmV6aWVyRGV0YWlsPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJEZXRhaWxcIixhcmd1bWVudHMpLHRoaXMuX2JlemllckRldGFpbD1hLHRoaXN9LGQucHJvdG90eXBlLmJlemllclBvaW50PWZ1bmN0aW9uKGEsYixjLGUsZil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmV6aWVyUG9pbnRcIixhcmd1bWVudHMpO3ZhciBnPTEtZjtyZXR1cm4gTWF0aC5wb3coZywzKSphKzMqTWF0aC5wb3coZywyKSpmKmIrMypnKk1hdGgucG93KGYsMikqYytNYXRoLnBvdyhmLDMpKmV9LGQucHJvdG90eXBlLmJlemllclRhbmdlbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJUYW5nZW50XCIsYXJndW1lbnRzKTt2YXIgZz0xLWY7cmV0dXJuIDMqZSpNYXRoLnBvdyhmLDIpLTMqYypNYXRoLnBvdyhmLDIpKzYqYypnKmYtNipiKmcqZiszKmIqTWF0aC5wb3coZywyKS0zKmEqTWF0aC5wb3coZywyKX0sZC5wcm90b3R5cGUuY3VydmU9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmdGhpcy5fcmVuZGVyZXIuY3VydmUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5jdXJ2ZURldGFpbD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVEZXRhaWxcIixhcmd1bWVudHMpLHRoaXMuX2N1cnZlRGV0YWlsPWE8Mz8zOmEsdGhpc30sZC5wcm90b3R5cGUuY3VydmVUaWdodG5lc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlVGlnaHRuZXNzXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fY3VydmVUaWdodG5lc3M9YSx0aGlzfSxkLnByb3RvdHlwZS5jdXJ2ZVBvaW50PWZ1bmN0aW9uKGEsYixjLGUsZil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVQb2ludFwiLGFyZ3VtZW50cyk7dmFyIGc9ZipmKmYsaD1mKmY7cmV0dXJuIGEqKC0uNSpnK2gtLjUqZikrYiooMS41KmctMi41KmgrMSkrYyooLTEuNSpnKzIqaCsuNSpmKStlKiguNSpnLS41KmgpfSxkLnByb3RvdHlwZS5jdXJ2ZVRhbmdlbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVRhbmdlbnRcIixhcmd1bWVudHMpO3ZhciBnPWYqZjtyZXR1cm4gYSooLTMqZy8yKzIqZi0uNSkrYiooOSpnLzItNSpmKStjKigtOSpnLzIrNCpmKy41KStlKigzKmcvMi1mKX0sYi5leHBvcnRzPWR9LHtcIi4uL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL21haW5cIjoyNH1dLDMzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL21haW5cIiksZT1hKFwiLi4vY29uc3RhbnRzXCIpLGY9bnVsbCxnPVtdLGg9W10saT0hMSxqPSExLGs9ITEsbD0hMSxtPSEwO2QucHJvdG90eXBlLmJlZ2luQ29udG91cj1mdW5jdGlvbigpe3JldHVybiBoPVtdLGw9ITAsdGhpc30sZC5wcm90b3R5cGUuYmVnaW5TaGFwZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmVnaW5TaGFwZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0Q/dGhpcy5fcmVuZGVyZXIuYmVnaW5TaGFwZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpOihmPWE9PT1lLlBPSU5UU3x8YT09PWUuTElORVN8fGE9PT1lLlRSSUFOR0xFU3x8YT09PWUuVFJJQU5HTEVfRkFOfHxhPT09ZS5UUklBTkdMRV9TVFJJUHx8YT09PWUuUVVBRFN8fGE9PT1lLlFVQURfU1RSSVA/YTpudWxsLGc9W10saD1bXSksdGhpc30sZC5wcm90b3R5cGUuYmV6aWVyVmVydGV4PWZ1bmN0aW9uKCl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYmV6aWVyVmVydGV4XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRCl0aGlzLl9yZW5kZXJlci5iZXppZXJWZXJ0ZXguYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTtlbHNle2lmKDA9PT1nLmxlbmd0aCl0aHJvd1widmVydGV4KCkgbXVzdCBiZSB1c2VkIG9uY2UgYmVmb3JlIGNhbGxpbmcgYmV6aWVyVmVydGV4KClcIjtpPSEwO2Zvcih2YXIgYT1bXSxiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKylhW2JdPWFyZ3VtZW50c1tiXTthLmlzVmVydD0hMSxsP2gucHVzaChhKTpnLnB1c2goYSl9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLmN1cnZlVmVydGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlVmVydGV4XCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRD90aGlzLl9yZW5kZXJlci5jdXJ2ZVZlcnRleC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpOihqPSEwLHRoaXMudmVydGV4KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pKSx0aGlzfSxkLnByb3RvdHlwZS5lbmRDb250b3VyPWZ1bmN0aW9uKCl7dmFyIGE9aFswXS5zbGljZSgpO2EuaXNWZXJ0PWhbMF0uaXNWZXJ0LGEubW92ZVRvPSExLGgucHVzaChhKSxtJiYoZy5wdXNoKGdbMF0pLG09ITEpO2Zvcih2YXIgYj0wO2I8aC5sZW5ndGg7YisrKWcucHVzaChoW2JdKTtyZXR1cm4gdGhpc30sZC5wcm90b3R5cGUuZW5kU2hhcGU9ZnVuY3Rpb24oYSl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZW5kU2hhcGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEKXRoaXMuX3JlbmRlcmVyLmVuZFNoYXBlKGEsaixpLGssbCxmKTtlbHNle2lmKDA9PT1nLmxlbmd0aClyZXR1cm4gdGhpcztpZighdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiYhdGhpcy5fcmVuZGVyZXIuX2RvRmlsbClyZXR1cm4gdGhpczt2YXIgYj1hPT09ZS5DTE9TRTtiJiYhbCYmZy5wdXNoKGdbMF0pLHRoaXMuX3JlbmRlcmVyLmVuZFNoYXBlKGEsZyxqLGksayxsLGYpLGo9ITEsaT0hMSxrPSExLGw9ITEsbT0hMCxiJiZnLnBvcCgpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS5xdWFkcmF0aWNWZXJ0ZXg9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJxdWFkcmF0aWNWZXJ0ZXhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEKXRoaXMuX3JlbmRlcmVyLnF1YWRyYXRpY1ZlcnRleC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpO2Vsc2V7aWYodGhpcy5fY29udG91ckluaXRlZCl7dmFyIGE9e307cmV0dXJuIGEueD1hcmd1bWVudHNbMF0sYS55PWFyZ3VtZW50c1sxXSxhLngzPWFyZ3VtZW50c1syXSxhLnkzPWFyZ3VtZW50c1szXSxhLnR5cGU9ZS5RVUFEUkFUSUMsdGhpcy5fY29udG91clZlcnRpY2VzLnB1c2goYSksdGhpc31pZighKGcubGVuZ3RoPjApKXRocm93IG5ldyBFcnJvcihcInZlcnRleCgpIG11c3QgYmUgdXNlZCBvbmNlIGJlZm9yZSBjYWxsaW5nIHF1YWRyYXRpY1ZlcnRleCgpXCIpO2s9ITA7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbY109YXJndW1lbnRzW2NdO2IuaXNWZXJ0PSExLGw/aC5wdXNoKGIpOmcucHVzaChiKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUudmVydGV4PWZ1bmN0aW9uKGEsYixjLGQsZSl7aWYodGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhpcy5fcmVuZGVyZXIudmVydGV4LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk7ZWxzZXt2YXIgZj1bXTtmLmlzVmVydD0hMCxmWzBdPWEsZlsxXT1iLGZbMl09MCxmWzNdPTAsZls0XT0wLGZbNV09dGhpcy5fcmVuZGVyZXIuX2dldEZpbGwoKSxmWzZdPXRoaXMuX3JlbmRlcmVyLl9nZXRTdHJva2UoKSxjJiYoZi5tb3ZlVG89YyksbD8oMD09PWgubGVuZ3RoJiYoZi5tb3ZlVG89ITApLGgucHVzaChmKSk6Zy5wdXNoKGYpfXJldHVybiB0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29uc3RhbnRzXCI6MTgsXCIuLi9tYWluXCI6MjR9XSwzNDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZXx8ZnVuY3Rpb24oYSxiKXt3aW5kb3cuc2V0VGltZW91dChhLDFlMy82MCl9fSgpLGZ1bmN0aW9uKCl7XCJ1bmRlZmluZWRcIj09dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHxVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGUuc2xpY2V8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGUsXCJzbGljZVwiLHt2YWx1ZTpBcnJheS5wcm90b3R5cGUuc2xpY2Usd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITF9KX0oKSxmdW5jdGlvbigpe2lmKCFPYmplY3QuYXNzaWduKXt2YXIgYT1PYmplY3Qua2V5cyxiPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxjPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDAhPT1hJiZudWxsIT09YX0sZD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2woKSxlPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsZj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGUuY2FsbChhLGIpfX0sZz1mdW5jdGlvbihiLGUpe2lmKCFjKGIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7dmFyIGcsaCxpLGosaz1PYmplY3QoYik7Zm9yKGc9MTtnPGFyZ3VtZW50cy5sZW5ndGg7KytnKWZvcihoPU9iamVjdChhcmd1bWVudHNbZ10pLGo9YShoKSxkJiZPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiZqLnB1c2guYXBwbHkoaixPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGgpLmZpbHRlcihmKGgpKSksaT0wO2k8ai5sZW5ndGg7KytpKWtbaltpXV09aFtqW2ldXTtyZXR1cm4ga307YihPYmplY3QsXCJhc3NpZ25cIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMH0pfX0oKX0se31dLDM1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKTtkLnByb3RvdHlwZS5ub0xvb3A9ZnVuY3Rpb24oKXt0aGlzLl9sb29wPSExfSxkLnByb3RvdHlwZS5sb29wPWZ1bmN0aW9uKCl7dGhpcy5fbG9vcD0hMCx0aGlzLl9kcmF3KCl9LGQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXt0aGlzLl9zdHlsZXMucHVzaCh7cHJvcHM6e19jb2xvck1vZGU6dGhpcy5fY29sb3JNb2RlfSxyZW5kZXJlcjp0aGlzLl9yZW5kZXJlci5wdXNoKCl9KX0sZC5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fc3R5bGVzLnBvcCgpO2E/KHRoaXMuX3JlbmRlcmVyLnBvcChhLnJlbmRlcmVyKSxPYmplY3QuYXNzaWduKHRoaXMsYS5wcm9wcykpOmNvbnNvbGUud2FybihcInBvcCgpIHdhcyBjYWxsZWQgd2l0aG91dCBtYXRjaGluZyBwdXNoKClcIil9LGQucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbihhKXt2YXIgYj1wYXJzZUludChhKTsoaXNOYU4oYil8fGI8MSkmJihiPTEpO3ZhciBjPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzLGQ9Yy5zZXR1cCxlPWMuZHJhdztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKXt2b2lkIDA9PT1kJiZjLnNjYWxlKGMuX3BpeGVsRGVuc2l0eSxjLl9waXhlbERlbnNpdHkpO2Zvcih2YXIgZj1mdW5jdGlvbihhKXthLmNhbGwoYyl9LGc9MDtnPGI7ZysrKWMucmVzZXRNYXRyaXgoKSxjLl9yZW5kZXJlci5pc1AzRCYmYy5fcmVuZGVyZXIuX3VwZGF0ZSgpLGMuX3NldFByb3BlcnR5KFwiZnJhbWVDb3VudFwiLGMuZnJhbWVDb3VudCsxKSxjLl9yZWdpc3RlcmVkTWV0aG9kcy5wcmUuZm9yRWFjaChmKSxlKCksYy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5mb3JFYWNoKGYpfX0sYi5leHBvcnRzPWR9LHtcIi4vbWFpblwiOjI0fV0sMzY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2QucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuYXBwbHlNYXRyaXgoYSxiLGMsZCxlLGYpLHRoaXN9LGQucHJvdG90eXBlLnBvcE1hdHJpeD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInBvcE1hdHJpeCgpIG5vdCB1c2VkLCBzZWUgcG9wKClcIil9LGQucHJvdG90eXBlLnByaW50TWF0cml4PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicHJpbnRNYXRyaXgoKSBub3QgaW1wbGVtZW50ZWRcIil9LGQucHJvdG90eXBlLnB1c2hNYXRyaXg9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJwdXNoTWF0cml4KCkgbm90IHVzZWQsIHNlZSBwdXNoKClcIil9LGQucHJvdG90eXBlLnJlc2V0TWF0cml4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLnJlc2V0TWF0cml4KCksdGhpc30sZC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJvdGF0ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIucm90YXRlKHRoaXMuX3RvUmFkaWFucyhhKSxiKSx0aGlzfSxkLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInJvdGF0ZVhcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicm90YXRlWFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIucm90YXRlWCh0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwicm90YXRlWVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyb3RhdGVZXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5yb3RhdGVZKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJyb3RhdGVaXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJvdGF0ZVpcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnJvdGF0ZVoodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihhLGIsYyl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2NhbGVcIixhcmd1bWVudHMpLGEgaW5zdGFuY2VvZiBkLlZlY3Rvcil7dmFyIGU9YTthPWUueCxiPWUueSxjPWUuen1lbHNlIGlmKGEgaW5zdGFuY2VvZiBBcnJheSl7dmFyIGY9YTthPWZbMF0sYj1mWzFdLGM9ZlsyXXx8MX1yZXR1cm4gaXNOYU4oYik/Yj1jPWE6aXNOYU4oYykmJihjPTEpLHRoaXMuX3JlbmRlcmVyLnNjYWxlLmNhbGwodGhpcy5fcmVuZGVyZXIsYSxiLGMpLHRoaXN9LGQucHJvdG90eXBlLnNoZWFyWD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2hlYXJYXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5zaGVhclgodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS5zaGVhclk9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNoZWFyWVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuc2hlYXJZKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidHJhbnNsYXRlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRD90aGlzLl9yZW5kZXJlci50cmFuc2xhdGUoYSxiLGMpOnRoaXMuX3JlbmRlcmVyLnRyYW5zbGF0ZShhLGIpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuL21haW5cIjoyNH1dLDM3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5jcmVhdGVTdHJpbmdEaWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZVN0cmluZ0RpY3RcIixhcmd1bWVudHMpLG5ldyBkLlN0cmluZ0RpY3QoYSxiKX0sZC5wcm90b3R5cGUuY3JlYXRlTnVtYmVyRGljdD1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVOdW1iZXJEaWN0XCIsYXJndW1lbnRzKSxuZXcgZC5OdW1iZXJEaWN0KGEsYil9LGQuVHlwZWREaWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEgaW5zdGFuY2VvZiBPYmplY3Q/dGhpcy5kYXRhPWE6KHRoaXMuZGF0YT17fSx0aGlzLmRhdGFbYV09YiksdGhpc30sZC5UeXBlZERpY3QucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGh9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5oYXNLZXk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtpZih0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSkpcmV0dXJuIHRoaXMuZGF0YVthXTtjb25zb2xlLmxvZyhhK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgRGljdGlvbmFyeVwiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe3RoaXMuX3ZhbGlkYXRlKGIpP3RoaXMuZGF0YVthXT1iOmNvbnNvbGUubG9nKFwiVGhvc2UgdmFsdWVzIGRvbnQgd29yayBmb3IgdGhpcyBkaWN0aW9uYXJ5IHR5cGUuXCIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuX2FkZE9iaj1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSl0aGlzLnNldChiLGFbYl0pfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKGEsYil7YSBpbnN0YW5jZW9mIE9iamVjdCYmdm9pZCAwPT09Yj90aGlzLl9hZGRPYmooYSk6dm9pZCAwIT09YT90aGlzLnNldChhLGIpOmNvbnNvbGUubG9nKFwiSW4gb3JkZXIgdG8gY3JlYXRlIGEgbmV3IERpY3Rpb25hcnkgZW50cnkgeW91IG11c3QgcGFzcyBhbiBvYmplY3Qgb3IgYSBrZXksIHZhbHVlIHBhaXJcIil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZGF0YT17fX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhKXtpZighdGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpKXRocm93IG5ldyBFcnJvcihhK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgRGljdGlvbmFyeVwiKTtkZWxldGUgdGhpcy5kYXRhW2FdfSxkLlR5cGVkRGljdC5wcm90b3R5cGUucHJpbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gdGhpcy5kYXRhKWNvbnNvbGUubG9nKFwia2V5OlwiK2ErXCIgdmFsdWU6XCIrdGhpcy5kYXRhW2FdKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLnNhdmVUYWJsZT1mdW5jdGlvbihhKXt2YXIgYj1cIlwiO2Zvcih2YXIgYyBpbiB0aGlzLmRhdGEpYis9YytcIixcIit0aGlzLmRhdGFbY10rXCJcXG5cIjt2YXIgZT1uZXcgQmxvYihbYl0se3R5cGU6XCJ0ZXh0L2NzdlwifSk7ZC5wcm90b3R5cGUuZG93bmxvYWRGaWxlKGUsYXx8XCJteWNzdlwiLFwiY3N2XCIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2F2ZUpTT049ZnVuY3Rpb24oYSxiKXtkLnByb3RvdHlwZS5zYXZlSlNPTih0aGlzLmRhdGEsYSxiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihhKXtyZXR1cm4hMH0sZC5TdHJpbmdEaWN0PWZ1bmN0aW9uKCl7ZC5UeXBlZERpY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkLlN0cmluZ0RpY3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5UeXBlZERpY3QucHJvdG90eXBlKSxkLlN0cmluZ0RpY3QucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYX0sZC5OdW1iZXJEaWN0PWZ1bmN0aW9uKCl7ZC5UeXBlZERpY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkLk51bWJlckRpY3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5UeXBlZERpY3QucHJvdG90eXBlKSxkLk51bWJlckRpY3QucHJvdG90eXBlLl92YWxpZGF0ZT1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSk/dGhpcy5kYXRhW2FdKz1iOmNvbnNvbGUubG9nKFwiVGhlIGtleSAtIFwiK2ErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkaWN0aW9uYXJ5LlwiKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYSxiKXt0aGlzLmFkZChhLC1iKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5tdWx0PWZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpP3RoaXMuZGF0YVthXSo9Yjpjb25zb2xlLmxvZyhcIlRoZSBrZXkgLSBcIithK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGljdGlvbmFyeS5cIil9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGEsYil7dGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpP3RoaXMuZGF0YVthXS89Yjpjb25zb2xlLmxvZyhcIlRoZSBrZXkgLSBcIithK1wiIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgZGljdGlvbmFyeS5cIil9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuX3ZhbHVlVGVzdD1mdW5jdGlvbihhKXtpZigwPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHNlYXJjaCBmb3IgYSBtaW5pbXVtIG9yIG1heGltdW0gdmFsdWUgb24gYW4gZW1wdHkgTnVtYmVyRGljdFwiKTtpZigxPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpcmV0dXJuIHRoaXMuZGF0YVtPYmplY3Qua2V5cyh0aGlzLmRhdGEpWzBdXTt2YXIgYj10aGlzLmRhdGFbT2JqZWN0LmtleXModGhpcy5kYXRhKVswXV07Zm9yKHZhciBjIGluIHRoaXMuZGF0YSl0aGlzLmRhdGFbY10qYTxiKmEmJihiPXRoaXMuZGF0YVtjXSk7cmV0dXJuIGJ9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWluVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWVUZXN0KDEpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLm1heFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlVGVzdCgtMSl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUuX2tleVRlc3Q9ZnVuY3Rpb24oYSl7aWYoMD09PU9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byB1c2UgbWluVmFsdWUgb24gYW4gZW1wdHkgTnVtYmVyRGljdFwiKTtpZigxPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGF0YSlbMF07Zm9yKHZhciBiPU9iamVjdC5rZXlzKHRoaXMuZGF0YSlbMF0sYz0xO2M8T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGg7YysrKU9iamVjdC5rZXlzKHRoaXMuZGF0YSlbY10qYTxiKmEmJihiPU9iamVjdC5rZXlzKHRoaXMuZGF0YSlbY10pO3JldHVybiBifSxkLk51bWJlckRpY3QucHJvdG90eXBlLm1pbktleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rZXlUZXN0KDEpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLm1heEtleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rZXlUZXN0KC0xKX0sYi5leHBvcnRzPWQuVHlwZWREaWN0fSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDM4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5kZXZpY2VPcmllbnRhdGlvbj12b2lkIDAsZC5wcm90b3R5cGUuYWNjZWxlcmF0aW9uWD0wLGQucHJvdG90eXBlLmFjY2VsZXJhdGlvblk9MCxkLnByb3RvdHlwZS5hY2NlbGVyYXRpb25aPTAsZC5wcm90b3R5cGUucEFjY2VsZXJhdGlvblg9MCxkLnByb3RvdHlwZS5wQWNjZWxlcmF0aW9uWT0wLGQucHJvdG90eXBlLnBBY2NlbGVyYXRpb25aPTAsZC5wcm90b3R5cGUuX3VwZGF0ZVBBY2NlbGVyYXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJwQWNjZWxlcmF0aW9uWFwiLHRoaXMuYWNjZWxlcmF0aW9uWCksdGhpcy5fc2V0UHJvcGVydHkoXCJwQWNjZWxlcmF0aW9uWVwiLHRoaXMuYWNjZWxlcmF0aW9uWSksdGhpcy5fc2V0UHJvcGVydHkoXCJwQWNjZWxlcmF0aW9uWlwiLHRoaXMuYWNjZWxlcmF0aW9uWil9LGQucHJvdG90eXBlLnJvdGF0aW9uWD0wLGQucHJvdG90eXBlLnJvdGF0aW9uWT0wLGQucHJvdG90eXBlLnJvdGF0aW9uWj0wLGQucHJvdG90eXBlLnBSb3RhdGlvblg9MCxkLnByb3RvdHlwZS5wUm90YXRpb25ZPTAsZC5wcm90b3R5cGUucFJvdGF0aW9uWj0wO3ZhciBlLGYsZyxoPTAsaT0wLGo9MCxrPVwiY2xvY2t3aXNlXCIsbD1cImNsb2Nrd2lzZVwiLG09XCJjbG9ja3dpc2VcIjtkLnByb3RvdHlwZS5fdXBkYXRlUFJvdGF0aW9ucz1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwicFJvdGF0aW9uWFwiLHRoaXMucm90YXRpb25YKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBSb3RhdGlvbllcIix0aGlzLnJvdGF0aW9uWSksdGhpcy5fc2V0UHJvcGVydHkoXCJwUm90YXRpb25aXCIsdGhpcy5yb3RhdGlvblopfSxkLnByb3RvdHlwZS50dXJuQXhpcz12b2lkIDA7dmFyIG49LjUsbz0zMDtkLnByb3RvdHlwZS5zZXRNb3ZlVGhyZXNob2xkPWZ1bmN0aW9uKGEpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNldE1vdmVUaHJlc2hvbGRcIixhcmd1bWVudHMpLG49YX0sZC5wcm90b3R5cGUuc2V0U2hha2VUaHJlc2hvbGQ9ZnVuY3Rpb24oYSl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2V0U2hha2VUaHJlc2hvbGRcIixhcmd1bWVudHMpLG89YX0sZC5wcm90b3R5cGUuX29uZGV2aWNlb3JpZW50YXRpb249ZnVuY3Rpb24oYSl7dGhpcy5fdXBkYXRlUFJvdGF0aW9ucygpLHRoaXMuX3NldFByb3BlcnR5KFwicm90YXRpb25YXCIsYS5iZXRhKSx0aGlzLl9zZXRQcm9wZXJ0eShcInJvdGF0aW9uWVwiLGEuZ2FtbWEpLHRoaXMuX3NldFByb3BlcnR5KFwicm90YXRpb25aXCIsYS5hbHBoYSksdGhpcy5faGFuZGxlTW90aW9uKCl9LGQucHJvdG90eXBlLl9vbmRldmljZW1vdGlvbj1mdW5jdGlvbihhKXt0aGlzLl91cGRhdGVQQWNjZWxlcmF0aW9ucygpLHRoaXMuX3NldFByb3BlcnR5KFwiYWNjZWxlcmF0aW9uWFwiLDIqYS5hY2NlbGVyYXRpb24ueCksdGhpcy5fc2V0UHJvcGVydHkoXCJhY2NlbGVyYXRpb25ZXCIsMiphLmFjY2VsZXJhdGlvbi55KSx0aGlzLl9zZXRQcm9wZXJ0eShcImFjY2VsZXJhdGlvblpcIiwyKmEuYWNjZWxlcmF0aW9uLnopLHRoaXMuX2hhbmRsZU1vdGlvbigpfSxkLnByb3RvdHlwZS5faGFuZGxlTW90aW9uPWZ1bmN0aW9uKCl7OTA9PT13aW5kb3cub3JpZW50YXRpb258fC05MD09PXdpbmRvdy5vcmllbnRhdGlvbj90aGlzLl9zZXRQcm9wZXJ0eShcImRldmljZU9yaWVudGF0aW9uXCIsXCJsYW5kc2NhcGVcIik6MD09PXdpbmRvdy5vcmllbnRhdGlvbj90aGlzLl9zZXRQcm9wZXJ0eShcImRldmljZU9yaWVudGF0aW9uXCIsXCJwb3J0cmFpdFwiKTp2b2lkIDA9PT13aW5kb3cub3JpZW50YXRpb24mJnRoaXMuX3NldFByb3BlcnR5KFwiZGV2aWNlT3JpZW50YXRpb25cIixcInVuZGVmaW5lZFwiKTt2YXIgYT10aGlzLmRldmljZU1vdmVkfHx3aW5kb3cuZGV2aWNlTW92ZWQ7XCJmdW5jdGlvblwiPT10eXBlb2YgYSYmKE1hdGguYWJzKHRoaXMuYWNjZWxlcmF0aW9uWC10aGlzLnBBY2NlbGVyYXRpb25YKT5ufHxNYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblktdGhpcy5wQWNjZWxlcmF0aW9uWSk+bnx8TWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25aLXRoaXMucEFjY2VsZXJhdGlvblopPm4pJiZhKCk7dmFyIGI9dGhpcy5kZXZpY2VUdXJuZWR8fHdpbmRvdy5kZXZpY2VUdXJuZWQ7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYil7dmFyIGM9dGhpcy5yb3RhdGlvblgrMTgwLGQ9dGhpcy5wUm90YXRpb25YKzE4MCxwPWgrMTgwO2MtZD4wJiZjLWQ8MjcwfHxjLWQ8LTI3MD9rPVwiY2xvY2t3aXNlXCI6KGMtZDwwfHxjLWQ+MjcwKSYmKGs9XCJjb3VudGVyLWNsb2Nrd2lzZVwiKSxrIT09ZSYmKHA9YyksTWF0aC5hYnMoYy1wKT45MCYmTWF0aC5hYnMoYy1wKTwyNzAmJihwPWMsdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLFwiWFwiKSxiKCkpLGU9ayxoPXAtMTgwO3ZhciBxPXRoaXMucm90YXRpb25ZKzE4MCxyPXRoaXMucFJvdGF0aW9uWSsxODAscz1pKzE4MDtxLXI+MCYmcS1yPDI3MHx8cS1yPC0yNzA/bD1cImNsb2Nrd2lzZVwiOihxLXI8MHx8cS10aGlzLnBSb3RhdGlvblk+MjcwKSYmKGw9XCJjb3VudGVyLWNsb2Nrd2lzZVwiKSxsIT09ZiYmKHM9cSksTWF0aC5hYnMocS1zKT45MCYmTWF0aC5hYnMocS1zKTwyNzAmJihzPXEsdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLFwiWVwiKSxiKCkpLGY9bCxpPXMtMTgwLHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWj4wJiZ0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo8MjcwfHx0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo8LTI3MD9tPVwiY2xvY2t3aXNlXCI6KHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWjwwfHx0aGlzLnJvdGF0aW9uWi10aGlzLnBSb3RhdGlvblo+MjcwKSYmKG09XCJjb3VudGVyLWNsb2Nrd2lzZVwiKSxtIT09ZyYmKGo9dGhpcy5yb3RhdGlvblopLE1hdGguYWJzKHRoaXMucm90YXRpb25aLWopPjkwJiZNYXRoLmFicyh0aGlzLnJvdGF0aW9uWi1qKTwyNzAmJihqPXRoaXMucm90YXRpb25aLHRoaXMuX3NldFByb3BlcnR5KFwidHVybkF4aXNcIixcIlpcIiksYigpKSxnPW0sdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLHZvaWQgMCl9dmFyIHQ9dGhpcy5kZXZpY2VTaGFrZW58fHdpbmRvdy5kZXZpY2VTaGFrZW47aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl7dmFyIHUsdjtudWxsIT09dGhpcy5wQWNjZWxlcmF0aW9uWCYmKHU9TWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25YLXRoaXMucEFjY2VsZXJhdGlvblgpLHY9TWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25ZLXRoaXMucEFjY2VsZXJhdGlvblkpKSx1K3Y+byYmdCgpfX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMzk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKCl7Zm9yKHZhciBhIGluIGYpaWYoZi5oYXNPd25Qcm9wZXJ0eShhKSYmITA9PT1mW2FdKXJldHVybiEwO3JldHVybiExfXZhciBlPWEoXCIuLi9jb3JlL21haW5cIiksZj17fTtlLnByb3RvdHlwZS5pc0tleVByZXNzZWQ9ITEsZS5wcm90b3R5cGUua2V5SXNQcmVzc2VkPSExLGUucHJvdG90eXBlLmtleT1cIlwiLGUucHJvdG90eXBlLmtleUNvZGU9MCxlLnByb3RvdHlwZS5fb25rZXlkb3duPWZ1bmN0aW9uKGEpe2lmKCFmW2Eud2hpY2hdKXt0aGlzLl9zZXRQcm9wZXJ0eShcImlzS2V5UHJlc3NlZFwiLCEwKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleUlzUHJlc3NlZFwiLCEwKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleUNvZGVcIixhLndoaWNoKSxmW2Eud2hpY2hdPSEwLHRoaXMuX3NldFByb3BlcnR5KFwia2V5XCIsYS5rZXl8fFN0cmluZy5mcm9tQ2hhckNvZGUoYS53aGljaCl8fGEud2hpY2gpO3ZhciBiPXRoaXMua2V5UHJlc3NlZHx8d2luZG93LmtleVByZXNzZWQ7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYiYmIWEuY2hhckNvZGUpeyExPT09YihhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX19LGUucHJvdG90eXBlLl9vbmtleXVwPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMua2V5UmVsZWFzZWR8fHdpbmRvdy5rZXlSZWxlYXNlZDtpZihmW2Eud2hpY2hdPSExLGQoKXx8KHRoaXMuX3NldFByb3BlcnR5KFwiaXNLZXlQcmVzc2VkXCIsITEpLHRoaXMuX3NldFByb3BlcnR5KFwia2V5SXNQcmVzc2VkXCIsITEpKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9sYXN0S2V5Q29kZVR5cGVkXCIsbnVsbCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlcIixhLmtleXx8U3RyaW5nLmZyb21DaGFyQ29kZShhLndoaWNoKXx8YS53aGljaCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlDb2RlXCIsYS53aGljaCksXCJmdW5jdGlvblwiPT10eXBlb2YgYil7ITE9PT1iKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fSxlLnByb3RvdHlwZS5fb25rZXlwcmVzcz1mdW5jdGlvbihhKXtpZihhLndoaWNoIT09dGhpcy5fbGFzdEtleUNvZGVUeXBlZCl7dGhpcy5fc2V0UHJvcGVydHkoXCJrZXlDb2RlXCIsYS53aGljaCksdGhpcy5fc2V0UHJvcGVydHkoXCJfbGFzdEtleUNvZGVUeXBlZFwiLGEud2hpY2gpLHRoaXMuX3NldFByb3BlcnR5KFwia2V5XCIsU3RyaW5nLmZyb21DaGFyQ29kZShhLndoaWNoKSk7dmFyIGI9dGhpcy5rZXlUeXBlZHx8d2luZG93LmtleVR5cGVkO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGIpeyExPT09YihhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX19LGUucHJvdG90eXBlLl9vbmJsdXI9ZnVuY3Rpb24oYSl7Zj17fX0sZS5wcm90b3R5cGUua2V5SXNEb3duPWZ1bmN0aW9uKGEpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJrZXlJc0Rvd25cIixhcmd1bWVudHMpLGZbYV19LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyxkKXtkJiYhZC5jbGllbnRYJiYoZC50b3VjaGVzP2Q9ZC50b3VjaGVzWzBdOmQuY2hhbmdlZFRvdWNoZXMmJihkPWQuY2hhbmdlZFRvdWNoZXNbMF0pKTt2YXIgZT1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9YS5zY3JvbGxXaWR0aC9iLGc9YS5zY3JvbGxIZWlnaHQvYztyZXR1cm57eDooZC5jbGllbnRYLWUubGVmdCkvZix5OihkLmNsaWVudFktZS50b3ApL2csd2luWDpkLmNsaWVudFgsd2luWTpkLmNsaWVudFksaWQ6ZC5pZGVudGlmaWVyfX12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpLGY9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2UucHJvdG90eXBlLl9oYXNNb3VzZUludGVyYWN0ZWQ9ITEsZS5wcm90b3R5cGUubW91c2VYPTAsZS5wcm90b3R5cGUubW91c2VZPTAsZS5wcm90b3R5cGUucG1vdXNlWD0wLGUucHJvdG90eXBlLnBtb3VzZVk9MCxlLnByb3RvdHlwZS53aW5Nb3VzZVg9MCxlLnByb3RvdHlwZS53aW5Nb3VzZVk9MCxlLnByb3RvdHlwZS5wd2luTW91c2VYPTAsZS5wcm90b3R5cGUucHdpbk1vdXNlWT0wLGUucHJvdG90eXBlLm1vdXNlQnV0dG9uPTAsZS5wcm90b3R5cGUubW91c2VJc1ByZXNzZWQ9ITEsZS5wcm90b3R5cGUuX3VwZGF0ZU5leHRNb3VzZUNvb3Jkcz1mdW5jdGlvbihhKXtpZihudWxsIT09dGhpcy5fY3VyRWxlbWVudCYmKCFhLnRvdWNoZXN8fGEudG91Y2hlcy5sZW5ndGg+MCkpe3ZhciBiPWQodGhpcy5fY3VyRWxlbWVudC5lbHQsdGhpcy53aWR0aCx0aGlzLmhlaWdodCxhKTt0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlWFwiLGIueCksdGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZVlcIixiLnkpLHRoaXMuX3NldFByb3BlcnR5KFwid2luTW91c2VYXCIsYi53aW5YKSx0aGlzLl9zZXRQcm9wZXJ0eShcIndpbk1vdXNlWVwiLGIud2luWSl9dGhpcy5faGFzTW91c2VJbnRlcmFjdGVkfHwodGhpcy5fdXBkYXRlTW91c2VDb29yZHMoKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9oYXNNb3VzZUludGVyYWN0ZWRcIiwhMCkpfSxlLnByb3RvdHlwZS5fdXBkYXRlTW91c2VDb29yZHM9ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcInBtb3VzZVhcIix0aGlzLm1vdXNlWCksdGhpcy5fc2V0UHJvcGVydHkoXCJwbW91c2VZXCIsdGhpcy5tb3VzZVkpLHRoaXMuX3NldFByb3BlcnR5KFwicHdpbk1vdXNlWFwiLHRoaXMud2luTW91c2VYKSx0aGlzLl9zZXRQcm9wZXJ0eShcInB3aW5Nb3VzZVlcIix0aGlzLndpbk1vdXNlWSksdGhpcy5fc2V0UHJvcGVydHkoXCJfcG1vdXNlV2hlZWxEZWx0YVlcIix0aGlzLl9tb3VzZVdoZWVsRGVsdGFZKX0sZS5wcm90b3R5cGUuX3NldE1vdXNlQnV0dG9uPWZ1bmN0aW9uKGEpezE9PT1hLmJ1dHRvbj90aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlQnV0dG9uXCIsZi5DRU5URVIpOjI9PT1hLmJ1dHRvbj90aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlQnV0dG9uXCIsZi5SSUdIVCk6dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUJ1dHRvblwiLGYuTEVGVCl9LGUucHJvdG90eXBlLl9vbm1vdXNlbW92ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczt0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksdGhpcy5tb3VzZUlzUHJlc3NlZD9cImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlRHJhZ2dlZD8hMT09PWIubW91c2VEcmFnZ2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaE1vdmVkJiYhMT09PWIudG91Y2hNb3ZlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VNb3ZlZCYmITE9PT1iLm1vdXNlTW92ZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29ubW91c2Vkb3duPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMCksdGhpcy5fc2V0TW91c2VCdXR0b24oYSksdGhpcy5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzKGEpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VQcmVzc2VkPyExPT09Yi5tb3VzZVByZXNzZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoU3RhcnRlZCYmITE9PT1iLnRvdWNoU3RhcnRlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb25tb3VzZXVwPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMSksXG5cImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlUmVsZWFzZWQ/ITE9PT1iLm1vdXNlUmVsZWFzZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoRW5kZWQmJiExPT09Yi50b3VjaEVuZGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbmRyYWdlbmQ9ZS5wcm90b3R5cGUuX29ubW91c2V1cCxlLnByb3RvdHlwZS5fb25kcmFnb3Zlcj1lLnByb3RvdHlwZS5fb25tb3VzZW1vdmUsZS5wcm90b3R5cGUuX29uY2xpY2s9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZUNsaWNrZWQpeyExPT09Yi5tb3VzZUNsaWNrZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGUucHJvdG90eXBlLl9vbmRibGNsaWNrPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGIuZG91YmxlQ2xpY2tlZCl7ITE9PT1iLmRvdWJsZUNsaWNrZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGUucHJvdG90eXBlLl9tb3VzZVdoZWVsRGVsdGFZPTAsZS5wcm90b3R5cGUuX3Btb3VzZVdoZWVsRGVsdGFZPTAsZS5wcm90b3R5cGUuX29ud2hlZWw9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYodGhpcy5fc2V0UHJvcGVydHkoXCJfbW91c2VXaGVlbERlbHRhWVwiLGEuZGVsdGFZKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlV2hlZWwpe2EuZGVsdGE9YS5kZWx0YVk7ITE9PT1iLm1vdXNlV2hlZWwoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw0MTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMsZCxlKXtlPWV8fDA7dmFyIGY9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPWEuc2Nyb2xsV2lkdGgvYixoPWEuc2Nyb2xsSGVpZ2h0L2MsaT1kLnRvdWNoZXNbZV18fGQuY2hhbmdlZFRvdWNoZXNbZV07cmV0dXJue3g6KGkuY2xpZW50WC1mLmxlZnQpL2cseTooaS5jbGllbnRZLWYudG9wKS9oLHdpblg6aS5jbGllbnRYLHdpblk6aS5jbGllbnRZLGlkOmkuaWRlbnRpZmllcn19dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKTtlLnByb3RvdHlwZS50b3VjaGVzPVtdLGUucHJvdG90eXBlLl91cGRhdGVUb3VjaENvb3Jkcz1mdW5jdGlvbihhKXtpZihudWxsIT09dGhpcy5fY3VyRWxlbWVudCl7Zm9yKHZhciBiPVtdLGM9MDtjPGEudG91Y2hlcy5sZW5ndGg7YysrKWJbY109ZCh0aGlzLl9jdXJFbGVtZW50LmVsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LGEsYyk7dGhpcy5fc2V0UHJvcGVydHkoXCJ0b3VjaGVzXCIsYil9fSxlLnByb3RvdHlwZS5fb250b3VjaHN0YXJ0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VJc1ByZXNzZWRcIiwhMCksdGhpcy5fdXBkYXRlVG91Y2hDb29yZHMoYSksdGhpcy5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzKGEpLHRoaXMuX3VwZGF0ZU1vdXNlQ29vcmRzKCksXCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaFN0YXJ0ZWQ/ITE9PT1iLnRvdWNoU3RhcnRlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VQcmVzc2VkJiYhMT09PWIubW91c2VQcmVzc2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbnRvdWNobW92ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpczt0aGlzLl91cGRhdGVUb3VjaENvb3JkcyhhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksXCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaE1vdmVkPyExPT09Yi50b3VjaE1vdmVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZURyYWdnZWQmJiExPT09Yi5tb3VzZURyYWdnZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29udG91Y2hlbmQ9ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCExKSx0aGlzLl91cGRhdGVUb3VjaENvb3JkcyhhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSk7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7XCJmdW5jdGlvblwiPT10eXBlb2YgYi50b3VjaEVuZGVkPyExPT09Yi50b3VjaEVuZGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVJlbGVhc2VkJiYhMT09PWIubW91c2VSZWxlYXNlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw0MjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSl7dmFyIGI9My41KmF8MDtpZihiPWI8MT8xOmI8MjQ4P2I6MjQ4LGchPT1iKXtnPWIsaD0xK2c8PDEsaT1uZXcgSW50MzJBcnJheShoKSxqPW5ldyBBcnJheShoKTtmb3IodmFyIGM9MDtjPGg7YysrKWpbY109bmV3IEludDMyQXJyYXkoMjU2KTtmb3IodmFyIGQsZSxmLGssbD0xLG09Yi0xO2w8YjtsKyspe2lbYitsXT1pW21dPWU9bSptLGY9altiK2xdLGs9alttLS1dO2Zvcih2YXIgbj0wO248MjU2O24rKylmW25dPWtbbl09ZSpufWQ9aVtiXT1iKmIsZj1qW2JdO2Zvcih2YXIgbz0wO288MjU2O28rKylmW29dPWQqb319ZnVuY3Rpb24gZShhLGIpe2Zvcih2YXIgYz1mLl90b1BpeGVscyhhKSxlPWEud2lkdGgsaz1hLmhlaWdodCxsPWUqayxtPW5ldyBJbnQzMkFycmF5KGwpLG49MDtuPGw7bisrKW1bbl09Zi5fZ2V0QVJHQihjLG4pO3ZhciBvLHAscSxyLHMsdCx1LHYsdyx4LHk9bmV3IEludDMyQXJyYXkobCksej1uZXcgSW50MzJBcnJheShsKSxBPW5ldyBJbnQzMkFycmF5KGwpLEI9bmV3IEludDMyQXJyYXkobCksQz0wO2QoYik7dmFyIEQsRSxGLEc7Zm9yKEU9MDtFPGs7RSsrKXtmb3IoRD0wO0Q8ZTtEKyspe2lmKHI9cT1wPXM9bz0wLCh0PUQtZyk8MCl4PS10LHQ9MDtlbHNle2lmKHQ+PWUpYnJlYWs7eD0wfWZvcihGPXg7RjxoJiYhKHQ+PWUpO0YrKyl7dmFyIEg9bVt0K0NdO0c9altGXSxzKz1HWygtMTY3NzcyMTYmSCk+Pj4yNF0scCs9R1soMTY3MTE2ODAmSCk+PjE2XSxxKz1HWyg2NTI4MCZIKT4+OF0scis9R1syNTUmSF0sbys9aVtGXSx0Kyt9dT1DK0QseVt1XT1zL28selt1XT1wL28sQVt1XT1xL28sQlt1XT1yL299Qys9ZX1mb3IoQz0wLHY9LWcsdz12KmUsRT0wO0U8aztFKyspe2ZvcihEPTA7RDxlO0QrKyl7aWYocj1xPXA9cz1vPTAsdjwwKXg9dT0tdix0PUQ7ZWxzZXtpZih2Pj1rKWJyZWFrO3g9MCx1PXYsdD1EK3d9Zm9yKEY9eDtGPGgmJiEodT49ayk7RisrKUc9altGXSxzKz1HW3lbdF1dLHArPUdbelt0XV0scSs9R1tBW3RdXSxyKz1HW0JbdF1dLG8rPWlbRl0sdSsrLHQrPWU7bVtEK0NdPXMvbzw8MjR8cC9vPDwxNnxxL288PDh8ci9vfUMrPWUsdys9ZSx2Kyt9Zi5fc2V0UGl4ZWxzKGMsbSl9dmFyIGY9e307Zi5fdG9QaXhlbHM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBJbWFnZURhdGE/YS5kYXRhOmEuZ2V0Q29udGV4dChcIjJkXCIpLmdldEltYWdlRGF0YSgwLDAsYS53aWR0aCxhLmhlaWdodCkuZGF0YX0sZi5fZ2V0QVJHQj1mdW5jdGlvbihhLGIpe3ZhciBjPTQqYjtyZXR1cm4gYVtjKzNdPDwyNCY0Mjc4MTkwMDgwfGFbY108PDE2JjE2NzExNjgwfGFbYysxXTw8OCY2NTI4MHwyNTUmYVtjKzJdfSxmLl9zZXRQaXhlbHM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MCxkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKWM9NCpkLGFbYyswXT0oMTY3MTE2ODAmYltkXSk+Pj4xNixhW2MrMV09KDY1MjgwJmJbZF0pPj4+OCxhW2MrMl09MjU1JmJbZF0sYVtjKzNdPSg0Mjc4MTkwMDgwJmJbZF0pPj4+MjR9LGYuX3RvSW1hZ2VEYXRhPWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgSW1hZ2VEYXRhP2E6YS5nZXRDb250ZXh0KFwiMmRcIikuZ2V0SW1hZ2VEYXRhKDAsMCxhLndpZHRoLGEuaGVpZ2h0KX0sZi5fY3JlYXRlSW1hZ2VEYXRhPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGYuX3RtcENhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGYuX3RtcEN0eD1mLl90bXBDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLHRoaXMuX3RtcEN0eC5jcmVhdGVJbWFnZURhdGEoYSxiKX0sZi5hcHBseT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRDb250ZXh0KFwiMmRcIiksZT1kLmdldEltYWdlRGF0YSgwLDAsYS53aWR0aCxhLmhlaWdodCksZj1iKGUsYyk7ZiBpbnN0YW5jZW9mIEltYWdlRGF0YT9kLnB1dEltYWdlRGF0YShmLDAsMCwwLDAsYS53aWR0aCxhLmhlaWdodCk6ZC5wdXRJbWFnZURhdGEoZSwwLDAsMCwwLGEud2lkdGgsYS5oZWlnaHQpfSxmLnRocmVzaG9sZD1mdW5jdGlvbihhLGIpe3ZhciBjPWYuX3RvUGl4ZWxzKGEpO3ZvaWQgMD09PWImJihiPS41KTtmb3IodmFyIGQ9TWF0aC5mbG9vcigyNTUqYiksZT0wO2U8Yy5sZW5ndGg7ZSs9NCl7dmFyIGcsaD1jW2VdLGk9Y1tlKzFdLGo9Y1tlKzJdLGs9LjIxMjYqaCsuNzE1MippKy4wNzIyKmo7Zz1rPj1kPzI1NTowLGNbZV09Y1tlKzFdPWNbZSsyXT1nfX0sZi5ncmF5PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1mLl90b1BpeGVscyhhKSxjPTA7YzxiLmxlbmd0aDtjKz00KXt2YXIgZD1iW2NdLGU9YltjKzFdLGc9YltjKzJdLGg9LjIxMjYqZCsuNzE1MiplKy4wNzIyKmc7YltjXT1iW2MrMV09YltjKzJdPWh9fSxmLm9wYXF1ZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9Zi5fdG9QaXhlbHMoYSksYz0wO2M8Yi5sZW5ndGg7Yys9NCliW2MrM109MjU1O3JldHVybiBifSxmLmludmVydD1mdW5jdGlvbihhKXtmb3IodmFyIGI9Zi5fdG9QaXhlbHMoYSksYz0wO2M8Yi5sZW5ndGg7Yys9NCliW2NdPTI1NS1iW2NdLGJbYysxXT0yNTUtYltjKzFdLGJbYysyXT0yNTUtYltjKzJdfSxmLnBvc3Rlcml6ZT1mdW5jdGlvbihhLGIpe3ZhciBjPWYuX3RvUGl4ZWxzKGEpO2lmKGI8Mnx8Yj4yNTUpdGhyb3cgbmV3IEVycm9yKFwiTGV2ZWwgbXVzdCBiZSBncmVhdGVyIHRoYW4gMiBhbmQgbGVzcyB0aGFuIDI1NSBmb3IgcG9zdGVyaXplXCIpO2Zvcih2YXIgZD1iLTEsZT0wO2U8Yy5sZW5ndGg7ZSs9NCl7dmFyIGc9Y1tlXSxoPWNbZSsxXSxpPWNbZSsyXTtjW2VdPTI1NSooZypiPj44KS9kLGNbZSsxXT0yNTUqKGgqYj4+OCkvZCxjW2UrMl09MjU1KihpKmI+PjgpL2R9fSxmLmRpbGF0ZT1mdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0PWYuX3RvUGl4ZWxzKGEpLHU9MCx2PXQubGVuZ3RoP3QubGVuZ3RoLzQ6MCx3PW5ldyBJbnQzMkFycmF5KHYpO3U8djspZm9yKGI9dSxjPXUrYS53aWR0aDt1PGM7KWQ9ZT1mLl9nZXRBUkdCKHQsdSksaT11LTEsaD11KzEsaj11LWEud2lkdGgsaz11K2Eud2lkdGgsaTxiJiYoaT11KSxoPj1jJiYoaD11KSxqPDAmJihqPTApLGs+PXYmJihrPXUpLG49Zi5fZ2V0QVJHQih0LGopLG09Zi5fZ2V0QVJHQih0LGkpLG89Zi5fZ2V0QVJHQih0LGspLGw9Zi5fZ2V0QVJHQih0LGgpLGc9NzcqKGQ+PjE2JjI1NSkrMTUxKihkPj44JjI1NSkrMjgqKDI1NSZkKSxxPTc3KihtPj4xNiYyNTUpKzE1MSoobT4+OCYyNTUpKzI4KigyNTUmbSkscD03NyoobD4+MTYmMjU1KSsxNTEqKGw+PjgmMjU1KSsyOCooMjU1JmwpLHI9NzcqKG4+PjE2JjI1NSkrMTUxKihuPj44JjI1NSkrMjgqKDI1NSZuKSxzPTc3KihvPj4xNiYyNTUpKzE1MSoobz4+OCYyNTUpKzI4KigyNTUmbykscT5nJiYoZT1tLGc9cSkscD5nJiYoZT1sLGc9cCkscj5nJiYoZT1uLGc9cikscz5nJiYoZT1vLGc9cyksd1t1KytdPWU7Zi5fc2V0UGl4ZWxzKHQsdyl9LGYuZXJvZGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZCxlLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdD1mLl90b1BpeGVscyhhKSx1PTAsdj10Lmxlbmd0aD90Lmxlbmd0aC80OjAsdz1uZXcgSW50MzJBcnJheSh2KTt1PHY7KWZvcihiPXUsYz11K2Eud2lkdGg7dTxjOylkPWU9Zi5fZ2V0QVJHQih0LHUpLGk9dS0xLGg9dSsxLGo9dS1hLndpZHRoLGs9dSthLndpZHRoLGk8YiYmKGk9dSksaD49YyYmKGg9dSksajwwJiYoaj0wKSxrPj12JiYoaz11KSxuPWYuX2dldEFSR0IodCxqKSxtPWYuX2dldEFSR0IodCxpKSxvPWYuX2dldEFSR0IodCxrKSxsPWYuX2dldEFSR0IodCxoKSxnPTc3KihkPj4xNiYyNTUpKzE1MSooZD4+OCYyNTUpKzI4KigyNTUmZCkscT03NyoobT4+MTYmMjU1KSsxNTEqKG0+PjgmMjU1KSsyOCooMjU1Jm0pLHA9NzcqKGw+PjE2JjI1NSkrMTUxKihsPj44JjI1NSkrMjgqKDI1NSZsKSxyPTc3KihuPj4xNiYyNTUpKzE1MSoobj4+OCYyNTUpKzI4KigyNTUmbikscz03Nyoobz4+MTYmMjU1KSsxNTEqKG8+PjgmMjU1KSsyOCooMjU1Jm8pLHE8ZyYmKGU9bSxnPXEpLHA8ZyYmKGU9bCxnPXApLHI8ZyYmKGU9bixnPXIpLHM8ZyYmKGU9byxnPXMpLHdbdSsrXT1lO2YuX3NldFBpeGVscyh0LHcpfTt2YXIgZyxoLGksajtmLmJsdXI9ZnVuY3Rpb24oYSxiKXtlKGEsYil9LGIuZXhwb3J0cz1mfSx7fV0sNDM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9W107ZC5wcm90b3R5cGUuY3JlYXRlSW1hZ2U9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlSW1hZ2VcIixhcmd1bWVudHMpLG5ldyBkLkltYWdlKGEsYil9LGQucHJvdG90eXBlLnNhdmVDYW52YXM9ZnVuY3Rpb24oKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlQ2FudmFzXCIsYXJndW1lbnRzKTt2YXIgYSxiLGMsZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7YXJndW1lbnRzWzBdaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudD8oYT1hcmd1bWVudHNbMF0sZS5zaGlmdCgpKTphcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQuRWxlbWVudD8oYT1hcmd1bWVudHNbMF0uZWx0LGUuc2hpZnQoKSk6YT10aGlzLl9jdXJFbGVtZW50JiZ0aGlzLl9jdXJFbGVtZW50LmVsdCxlLmxlbmd0aD49MSYmKGI9ZVswXSksZS5sZW5ndGg+PTImJihjPWVbMV0pLGM9Y3x8ZC5wcm90b3R5cGUuX2NoZWNrRmlsZUV4dGVuc2lvbihiLGMpWzFdfHxcInBuZ1wiO3ZhciBmO3N3aXRjaChjKXtkZWZhdWx0OmY9XCJpbWFnZS9wbmdcIjticmVhaztjYXNlXCJqcGVnXCI6Y2FzZVwianBnXCI6Zj1cImltYWdlL2pwZWdcIn1hLnRvQmxvYihmdW5jdGlvbihhKXtkLnByb3RvdHlwZS5kb3dubG9hZEZpbGUoYSxiLGMpfSxmKX0sZC5wcm90b3R5cGUuc2F2ZUZyYW1lcz1mdW5jdGlvbihhLGIsYyxmLGcpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVGcmFtZXNcIixhcmd1bWVudHMpO3ZhciBoPWN8fDM7aD1kLnByb3RvdHlwZS5jb25zdHJhaW4oaCwwLDE1KSxoKj0xZTM7dmFyIGk9Znx8MTU7aT1kLnByb3RvdHlwZS5jb25zdHJhaW4oaSwwLDIyKTt2YXIgaj0wLGs9ZC5wcm90b3R5cGUuX21ha2VGcmFtZSxsPXRoaXMuX2N1ckVsZW1lbnQuZWx0LG09c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtrKGEraixiLGwpLGorK30sMWUzL2kpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihjbGVhckludGVydmFsKG0pLGcpZyhlKTtlbHNlIGZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgYj1lW2FdO2QucHJvdG90eXBlLmRvd25sb2FkRmlsZShiLmltYWdlRGF0YSxiLmZpbGVuYW1lLGIuZXh0KX1lPVtdfSxoKy4wMSl9LGQucHJvdG90eXBlLl9tYWtlRnJhbWU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2Q9dGhpcz90aGlzLl9jdXJFbGVtZW50LmVsdDpjO3ZhciBmO2lmKGIpc3dpdGNoKGIudG9Mb3dlckNhc2UoKSl7Y2FzZVwicG5nXCI6Zj1cImltYWdlL3BuZ1wiO2JyZWFrO2Nhc2VcImpwZWdcIjpjYXNlXCJqcGdcIjpmPVwiaW1hZ2UvanBlZ1wiO2JyZWFrO2RlZmF1bHQ6Zj1cImltYWdlL3BuZ1wifWVsc2UgYj1cInBuZ1wiLGY9XCJpbWFnZS9wbmdcIjt2YXIgZz1kLnRvRGF0YVVSTChmKTtnPWcucmVwbGFjZShmLFwiaW1hZ2Uvb2N0ZXQtc3RyZWFtXCIpO3ZhciBoPXt9O2guaW1hZ2VEYXRhPWcsaC5maWxlbmFtZT1hLGguZXh0PWIsZS5wdXNoKGgpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw0NDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiKXtyZXR1cm4gYT4wJiZhPGI/YTpifXZhciBlPWEoXCIuLi9jb3JlL21haW5cIiksZj1hKFwiLi9maWx0ZXJzXCIpLGc9YShcIi4uL2NvcmUvaGVscGVyc1wiKSxoPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGUucHJvdG90eXBlLmxvYWRJbWFnZT1mdW5jdGlvbihhLGIsYyl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZEltYWdlXCIsYXJndW1lbnRzKTt2YXIgZD1uZXcgSW1hZ2UsZj1uZXcgZS5JbWFnZSgxLDEsdGhpcyksZz10aGlzO3JldHVybiBkLm9ubG9hZD1mdW5jdGlvbigpe2Yud2lkdGg9Zi5jYW52YXMud2lkdGg9ZC53aWR0aCxmLmhlaWdodD1mLmNhbnZhcy5oZWlnaHQ9ZC5oZWlnaHQsZi5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoZCwwLDApLGYubW9kaWZpZWQ9ITAsXCJmdW5jdGlvblwiPT10eXBlb2YgYiYmYihmKSxnLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGQub25lcnJvcj1mdW5jdGlvbihhKXtlLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoMCxkLnNyYyksXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmYyhhKX0sMCE9PWEuaW5kZXhPZihcImRhdGE6aW1hZ2UvXCIpJiYoZC5jcm9zc09yaWdpbj1cIkFub255bW91c1wiKSxkLnNyYz1hLGZ9LGUucHJvdG90eXBlLmltYWdlPWZ1bmN0aW9uKGEsYixjLGYsaCxpLGosayxsKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJpbWFnZVwiLGFyZ3VtZW50cyk7dmFyIG09YS53aWR0aCxuPWEuaGVpZ2h0O2EuZWx0JiZhLmVsdC52aWRlb1dpZHRoJiYhYS5jYW52YXMmJihtPWEuZWx0LnZpZGVvV2lkdGgsbj1hLmVsdC52aWRlb0hlaWdodCk7dmFyIG89YixwPWMscT1mfHxtLHI9aHx8bixzPWl8fDAsdD1qfHwwLHU9a3x8bSx2PWx8fG47dT1kKHUsbSksdj1kKHYsbik7dmFyIHc9MTthLmVsdCYmIWEuY2FudmFzJiZhLmVsdC5zdHlsZS53aWR0aCYmKHc9YS5lbHQudmlkZW9XaWR0aCYmIWY/YS5lbHQudmlkZW9XaWR0aDphLmVsdC53aWR0aCx3Lz1wYXJzZUludChhLmVsdC5zdHlsZS53aWR0aCwxMCkpLHMqPXcsdCo9dyx2Kj13LHUqPXc7dmFyIHg9Zy5tb2RlQWRqdXN0KG8scCxxLHIsdGhpcy5fcmVuZGVyZXIuX2ltYWdlTW9kZSk7dGhpcy5fcmVuZGVyZXIuaW1hZ2UoYSxzLHQsdSx2LHgueCx4LnkseC53LHguaCl9LGUucHJvdG90eXBlLnRpbnQ9ZnVuY3Rpb24oKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0aW50XCIsYXJndW1lbnRzKTt2YXIgYT10aGlzLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9yZW5kZXJlci5fdGludD1hLmxldmVsc30sZS5wcm90b3R5cGUubm9UaW50PWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3RpbnQ9bnVsbH0sZS5wcm90b3R5cGUuX2dldFRpbnRlZEltYWdlQ2FudmFzPWZ1bmN0aW9uKGEpe2lmKCFhLmNhbnZhcylyZXR1cm4gYTt2YXIgYj1mLl90b1BpeGVscyhhLmNhbnZhcyksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Mud2lkdGg9YS5jYW52YXMud2lkdGgsYy5oZWlnaHQ9YS5jYW52YXMuaGVpZ2h0O2Zvcih2YXIgZD1jLmdldENvbnRleHQoXCIyZFwiKSxlPWQuY3JlYXRlSW1hZ2VEYXRhKGEuY2FudmFzLndpZHRoLGEuY2FudmFzLmhlaWdodCksZz1lLmRhdGEsaD0wO2g8Yi5sZW5ndGg7aCs9NCl7dmFyIGk9YltoXSxqPWJbaCsxXSxrPWJbaCsyXSxsPWJbaCszXTtnW2hdPWkqdGhpcy5fcmVuZGVyZXIuX3RpbnRbMF0vMjU1LGdbaCsxXT1qKnRoaXMuX3JlbmRlcmVyLl90aW50WzFdLzI1NSxnW2grMl09ayp0aGlzLl9yZW5kZXJlci5fdGludFsyXS8yNTUsZ1toKzNdPWwqdGhpcy5fcmVuZGVyZXIuX3RpbnRbM10vMjU1fXJldHVybiBkLnB1dEltYWdlRGF0YShlLDAsMCksY30sZS5wcm90b3R5cGUuaW1hZ2VNb2RlPWZ1bmN0aW9uKGEpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImltYWdlTW9kZVwiLGFyZ3VtZW50cyksYSE9PWguQ09STkVSJiZhIT09aC5DT1JORVJTJiZhIT09aC5DRU5URVJ8fCh0aGlzLl9yZW5kZXJlci5faW1hZ2VNb2RlPWEpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9oZWxwZXJzXCI6MjEsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vZmlsdGVyc1wiOjQyfV0sNDU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4vZmlsdGVyc1wiKTtkLkltYWdlPWZ1bmN0aW9uKGEsYil7dGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSx0aGlzLmNhbnZhcy53aWR0aD10aGlzLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodD10aGlzLmhlaWdodCx0aGlzLmRyYXdpbmdDb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKSx0aGlzLl9waXhlbERlbnNpdHk9MSx0aGlzLl9tb2RpZmllZD0hMSx0aGlzLl9waXhlbHNEaXJ0eT0hMCx0aGlzLnBpeGVscz1bXX0sZC5JbWFnZS5wcm90b3R5cGUuX3NldFByb3BlcnR5PWZ1bmN0aW9uKGEsYil7dGhpc1thXT1iLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5sb2FkUGl4ZWxzPWZ1bmN0aW9uKCl7ZC5SZW5kZXJlcjJELnByb3RvdHlwZS5sb2FkUGl4ZWxzLmNhbGwodGhpcyksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLnVwZGF0ZVBpeGVscz1mdW5jdGlvbihhLGIsYyxlKXtkLlJlbmRlcmVyMkQucHJvdG90eXBlLnVwZGF0ZVBpeGVscy5jYWxsKHRoaXMsYSxiLGMsZSksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gZC5SZW5kZXJlcjJELnByb3RvdHlwZS5nZXQuY2FsbCh0aGlzLGEsYixjLGUpfSxkLkltYWdlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe2QuUmVuZGVyZXIyRC5wcm90b3R5cGUuc2V0LmNhbGwodGhpcyxhLGIsYyksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihhLGIpezA9PT1hJiYwPT09Yj8oYT10aGlzLmNhbnZhcy53aWR0aCxiPXRoaXMuY2FudmFzLmhlaWdodCk6MD09PWE/YT10aGlzLmNhbnZhcy53aWR0aCpiL3RoaXMuY2FudmFzLmhlaWdodDowPT09YiYmKGI9dGhpcy5jYW52YXMuaGVpZ2h0KmEvdGhpcy5jYW52YXMud2lkdGgpLGE9TWF0aC5mbG9vcihhKSxiPU1hdGguZmxvb3IoYik7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtjLndpZHRoPWEsYy5oZWlnaHQ9YixjLmdldENvbnRleHQoXCIyZFwiKS5kcmF3SW1hZ2UodGhpcy5jYW52YXMsMCwwLHRoaXMuY2FudmFzLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodCwwLDAsYy53aWR0aCxjLmhlaWdodCksdGhpcy5jYW52YXMud2lkdGg9dGhpcy53aWR0aD1hLHRoaXMuY2FudmFzLmhlaWdodD10aGlzLmhlaWdodD1iLHRoaXMuZHJhd2luZ0NvbnRleHQuZHJhd0ltYWdlKGMsMCwwLGEsYiwwLDAsYSxiKSx0aGlzLnBpeGVscy5sZW5ndGg+MCYmdGhpcy5sb2FkUGl4ZWxzKCksdGhpcy5zZXRNb2RpZmllZCghMCksdGhpcy5fcGl4ZWxzRGlydHk9ITB9LGQuSW1hZ2UucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZSxmLGcsaCxpLGo7aWYoOT09PWFyZ3VtZW50cy5sZW5ndGgpYT1hcmd1bWVudHNbMF0sYj1hcmd1bWVudHNbMV0sYz1hcmd1bWVudHNbMl0sZT1hcmd1bWVudHNbM10sZj1hcmd1bWVudHNbNF0sZz1hcmd1bWVudHNbNV0saD1hcmd1bWVudHNbNl0saT1hcmd1bWVudHNbN10saj1hcmd1bWVudHNbOF07ZWxzZXtpZig4IT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJTaWduYXR1cmUgbm90IHN1cHBvcnRlZFwiKTthPXRoaXMsYj1hcmd1bWVudHNbMF0sYz1hcmd1bWVudHNbMV0sZT1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10sZz1hcmd1bWVudHNbNF0saD1hcmd1bWVudHNbNV0saT1hcmd1bWVudHNbNl0saj1hcmd1bWVudHNbN119ZC5SZW5kZXJlcjJELl9jb3B5SGVscGVyKHRoaXMsYSxiLGMsZSxmLGcsaCxpLGopLHRoaXMuX3BpeGVsc0RpcnR5PSEwfSxkLkltYWdlLnByb3RvdHlwZS5tYXNrPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMpO3ZhciBiPXRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uLGM9MTthIGluc3RhbmNlb2YgZC5SZW5kZXJlciYmKGM9YS5fcEluc3QuX3BpeGVsRGVuc2l0eSk7dmFyIGU9W2EsMCwwLGMqYS53aWR0aCxjKmEuaGVpZ2h0LDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0XTt0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1cImRlc3RpbmF0aW9uLWluXCIsZC5JbWFnZS5wcm90b3R5cGUuY29weS5hcHBseSh0aGlzLGUpLHRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWIsdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbihhLGIpe2UuYXBwbHkodGhpcy5jYW52YXMsZVthLnRvTG93ZXJDYXNlKCldLGIpLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5ibGVuZD1mdW5jdGlvbigpe2QucHJvdG90eXBlLmJsZW5kLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUuc2V0TW9kaWZpZWQ9ZnVuY3Rpb24oYSl7dGhpcy5fbW9kaWZpZWQ9YX0sZC5JbWFnZS5wcm90b3R5cGUuaXNNb2RpZmllZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb2RpZmllZH0sZC5JbWFnZS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbihhLGIpe2QucHJvdG90eXBlLnNhdmVDYW52YXModGhpcy5jYW52YXMsYSxiKX0sYi5leHBvcnRzPWQuSW1hZ2V9LHtcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9maWx0ZXJzXCI6NDJ9XSw0NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi9maWx0ZXJzXCIpO2EoXCIuLi9jb2xvci9wNS5Db2xvclwiKSxkLnByb3RvdHlwZS5waXhlbHM9W10sZC5wcm90b3R5cGUuYmxlbmQ9ZnVuY3Rpb24oKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJibGVuZFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXI/dGhpcy5fcmVuZGVyZXIuYmxlbmQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTpkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJsZW5kLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvcHlcIixhcmd1bWVudHMpLGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY29weS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24oYSxiKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJmaWx0ZXJcIixhcmd1bWVudHMpLHZvaWQgMCE9PXRoaXMuY2FudmFzP2UuYXBwbHkodGhpcy5jYW52YXMsZVthLnRvTG93ZXJDYXNlKCldLGIpOmUuYXBwbHkodGhpcy5lbHQsZVthLnRvTG93ZXJDYXNlKCldLGIpfSxkLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmdldChhLGIsYyxkKX0sZC5wcm90b3R5cGUubG9hZFBpeGVscz1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRQaXhlbHNcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmxvYWRQaXhlbHMoKX0sZC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLl9yZW5kZXJlci5zZXQoYSxiLGMpfSxkLnByb3RvdHlwZS51cGRhdGVQaXhlbHM9ZnVuY3Rpb24oYSxiLGMsZSl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidXBkYXRlUGl4ZWxzXCIsYXJndW1lbnRzKSwwIT09dGhpcy5waXhlbHMubGVuZ3RoJiZ0aGlzLl9yZW5kZXJlci51cGRhdGVQaXhlbHMoYSxiLGMsZSl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb2xvci9wNS5Db2xvclwiOjE2LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL2ZpbHRlcnNcIjo0Mn1dLDQ3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3ZhciBjPXt9O2lmKHZvaWQgMD09PShiPWJ8fFtdKSlmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliW2QudG9TdHJpbmcoKV09ZDtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKyl7dmFyIGY9YltlXSxnPWFbZV07Y1tmXT1nfXJldHVybiBjfWZ1bmN0aW9uIGUoYSl7dmFyIGI9bmV3IGkuWE1MLGM9YS5jaGlsZE5vZGVzO2lmKGMmJmMubGVuZ3RoKXtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGY9ZShjW2RdKTtiLmFkZENoaWxkKGYpfWIuc2V0TmFtZShhLm5vZGVOYW1lKSxiLl9zZXRDb250KGEudGV4dENvbnRlbnQpLGIuX3NldEF0dHJpYnV0ZXMoYSk7Zm9yKHZhciBnPTA7ZzxiLmNoaWxkcmVuLmxlbmd0aDtnKyspYi5jaGlsZHJlbltnXS5wYXJlbnQ9YjtyZXR1cm4gYn1yZXR1cm4gYi5zZXROYW1lKGEubm9kZU5hbWUpLGIuX3NldENvbnQoYS50ZXh0Q29udGVudCksYi5fc2V0QXR0cmlidXRlcyhhKSxifWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEucmVwbGFjZSgvJi9nLFwiJmFtcDtcIikucmVwbGFjZSgvPC9nLFwiJmx0O1wiKS5yZXBsYWNlKC8+L2csXCImZ3Q7XCIpLnJlcGxhY2UoL1wiL2csXCImcXVvdDtcIikucmVwbGFjZSgvJy9nLFwiJiMwMzk7XCIpfWZ1bmN0aW9uIGcoYSxiKXtiJiYhMCE9PWImJlwidHJ1ZVwiIT09Ynx8KGI9XCJcIiksYXx8KGE9XCJ1bnRpdGxlZFwiKTt2YXIgYz1cIlwiO3JldHVybiBhJiZhLmluZGV4T2YoXCIuXCIpPi0xJiYoYz1hLnNwbGl0KFwiLlwiKS5wb3AoKSksYiYmYyE9PWImJihjPWIsYT1hK1wiLlwiK2MpLFthLGNdfWZ1bmN0aW9uIGgoYSl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhLnRhcmdldCl9dmFyIGk9YShcIi4uL2NvcmUvbWFpblwiKTthKFwid2hhdHdnLWZldGNoXCIpLGEoXCJlczYtcHJvbWlzZVwiKS5wb2x5ZmlsbCgpO3ZhciBqPWEoXCJmZXRjaC1qc29ucFwiKTthKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGkucHJvdG90eXBlLmxvYWRKU09OPWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZEpTT05cIixhcmd1bWVudHMpO2Zvcih2YXIgYSxiLGMsZD1hcmd1bWVudHNbMF0sZT17fSxmPVwianNvblwiLGc9MTtnPGFyZ3VtZW50cy5sZW5ndGg7ZysrKXt2YXIgaD1hcmd1bWVudHNbZ107XCJzdHJpbmdcIj09dHlwZW9mIGg/XCJqc29ucFwiIT09aCYmXCJqc29uXCIhPT1ofHwoZj1oKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBoP2E/Yj1oOmE9aDpcIm9iamVjdFwiPT10eXBlb2YgaCYmaC5oYXNPd25Qcm9wZXJ0eShcImpzb25wQ2FsbGJhY2tcIikmJihmPVwianNvbnBcIixjPWgpfXZhciBqPXRoaXM7cmV0dXJuIHRoaXMuaHR0cERvKGQsXCJHRVRcIixjLGYsZnVuY3Rpb24oYil7Zm9yKHZhciBjIGluIGIpZVtjXT1iW2NdO3ZvaWQgMCE9PWEmJmEoYiksai5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihhKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoNSxkKSwhYil0aHJvdyBhO2IoYSl9KSxlfSxpLnByb3RvdHlwZS5sb2FkU3RyaW5ncz1mdW5jdGlvbigpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRTdHJpbmdzXCIsYXJndW1lbnRzKTtmb3IodmFyIGEsYixjPVtdLGQ9MTtkPGFyZ3VtZW50cy5sZW5ndGg7ZCsrKXt2YXIgZT1hcmd1bWVudHNbZF07XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKHZvaWQgMD09PWE/YT1lOnZvaWQgMD09PWImJihiPWUpKX12YXIgZj10aGlzO3JldHVybiBpLnByb3RvdHlwZS5odHRwRG8uY2FsbCh0aGlzLGFyZ3VtZW50c1swXSxcIkdFVFwiLFwidGV4dFwiLGZ1bmN0aW9uKGIpe3ZhciBkPWIucmVwbGFjZSgvXFxyXFxuL2csXCJcXHJcIikucmVwbGFjZSgvXFxuL2csXCJcXHJcIikuc3BsaXQoL1xcci8pO0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGMsZCksdm9pZCAwIT09YSYmYShjKSxmLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGEpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcigzLGFyZ3VtZW50c1swXSksIWIpdGhyb3cgYTtiKGEpfSksY30saS5wcm90b3R5cGUubG9hZFRhYmxlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZT1bXSxmPSExLGc9YS5zdWJzdHJpbmcoYS5sYXN0SW5kZXhPZihcIi5cIikrMSxhLmxlbmd0aCksaD1cIixcIixqPSExO1widHN2XCI9PT1nJiYoaD1cIlxcdFwiKTtmb3IodmFyIGs9MTtrPGFyZ3VtZW50cy5sZW5ndGg7aysrKWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGFyZ3VtZW50c1trXSl2b2lkIDA9PT1iP2I9YXJndW1lbnRzW2tdOnZvaWQgMD09PWMmJihjPWFyZ3VtZW50c1trXSk7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYXJndW1lbnRzW2tdKWlmKGUucHVzaChhcmd1bWVudHNba10pLFwiaGVhZGVyXCI9PT1hcmd1bWVudHNba10mJihmPSEwKSxcImNzdlwiPT09YXJndW1lbnRzW2tdKXtpZihqKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzZXQgbXVsdGlwbGUgc2VwYXJhdG9yIHR5cGVzLlwiKTtoPVwiLFwiLGo9ITB9ZWxzZSBpZihcInRzdlwiPT09YXJndW1lbnRzW2tdKXtpZihqKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzZXQgbXVsdGlwbGUgc2VwYXJhdG9yIHR5cGVzLlwiKTtoPVwiXFx0XCIsaj0hMH12YXIgbD1uZXcgaS5UYWJsZSxtPXRoaXM7cmV0dXJuIHRoaXMuaHR0cERvKGEsXCJHRVRcIixcInRhYmxlXCIsZnVuY3Rpb24oYSl7Zm9yKHZhciBjLGU9e30sZz0wLGo9MSxuPTIsbz00LHA9J1wiJyxxPVwiXFxyXCIscj1cIlxcblwiLHM9W10sdD0wLHU9bnVsbCx2PWZ1bmN0aW9uKCl7ZS5jdXJyZW50U3RhdGU9ZyxlLnRva2VuPVwiXCJ9LHc9ZnVuY3Rpb24oKXt1LnB1c2goZS50b2tlbiksdigpfSx4PWZ1bmN0aW9uKCl7ZS5lc2NhcGVkPSExLHU9W10sdigpfSx5PWZ1bmN0aW9uKCl7ZS5jdXJyZW50U3RhdGU9byxzLnB1c2godSksdT1udWxsfTs7KXtpZihudWxsPT0oYz1hW3QrK10pKXtpZihlLmVzY2FwZWQpdGhyb3cgbmV3IEVycm9yKFwiVW5jbG9zZWQgcXVvdGUgaW4gZmlsZS5cIik7aWYodSl7dygpLHkoKTticmVha319aWYobnVsbD09PXUmJngoKSxlLmN1cnJlbnRTdGF0ZT09PWcpe2lmKGM9PT1wKXtlLmVzY2FwZWQ9ITAsZS5jdXJyZW50U3RhdGU9ajtjb250aW51ZX1lLmN1cnJlbnRTdGF0ZT1qfWlmKGUuY3VycmVudFN0YXRlPT09aiYmZS5lc2NhcGVkKWlmKGM9PT1wKWFbdF09PT1wPyhlLnRva2VuKz1wLHQrKyk6KGUuZXNjYXBlZD0hMSxlLmN1cnJlbnRTdGF0ZT1uKTtlbHNle2lmKGM9PT1xKWNvbnRpbnVlO2UudG9rZW4rPWN9ZWxzZSBjPT09cT8oYVt0XT09PXImJnQrKyx3KCkseSgpKTpjPT09cj8odygpLHkoKSk6Yz09PWg/dygpOmUuY3VycmVudFN0YXRlPT09aiYmKGUudG9rZW4rPWMpfWlmKGYpbC5jb2x1bW5zPXMuc2hpZnQoKTtlbHNlIGZvcihrPTA7azxzWzBdLmxlbmd0aDtrKyspbC5jb2x1bW5zW2tdPVwibnVsbFwiO3ZhciB6O2ZvcihrPTA7azxzLmxlbmd0aDtrKyspKDEhPT1zW2tdLmxlbmd0aHx8XCJ1bmRlZmluZWRcIiE9PXNba11bMF0mJlwiXCIhPT1zW2tdWzBdKSYmKHo9bmV3IGkuVGFibGVSb3csei5hcnI9c1trXSx6Lm9iaj1kKHNba10sbC5jb2x1bW5zKSxsLmFkZFJvdyh6KSk7XCJmdW5jdGlvblwiPT10eXBlb2YgYiYmYihsKSxtLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGIpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcigyLGEpLCFjKXRocm93IGI7YyhiKX0pLGx9LGkucHJvdG90eXBlLmxvYWRYTUw9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYixjPXt9LGQ9MTtkPGFyZ3VtZW50cy5sZW5ndGg7ZCsrKXt2YXIgZT1hcmd1bWVudHNbZF07XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKHZvaWQgMD09PWE/YT1lOnZvaWQgMD09PWImJihiPWUpKX12YXIgZj10aGlzO3JldHVybiB0aGlzLmh0dHBEbyhhcmd1bWVudHNbMF0sXCJHRVRcIixcInhtbFwiLGZ1bmN0aW9uKGIpe2Zvcih2YXIgZCBpbiBiKWNbZF09YltkXTt2b2lkIDAhPT1hJiZhKGMpLGYuX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYSl7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDEsYXJndW1lbnRzWzBdKSwhYil0aHJvdyBhO2IoYSl9KSxjfSxpLnByb3RvdHlwZS5sb2FkQnl0ZXM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9LGU9dGhpcztyZXR1cm4gdGhpcy5odHRwRG8oYSxcIkdFVFwiLFwiYXJyYXlCdWZmZXJcIixmdW5jdGlvbihhKXtkLmJ5dGVzPW5ldyBVaW50OEFycmF5KGEpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGImJmIoZCksZS5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihiKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoNixhKSwhYyl0aHJvdyBiO2MoYil9KSxkfSxpLnByb3RvdHlwZS5odHRwR2V0PWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaHR0cEdldFwiLGFyZ3VtZW50cyk7dmFyIGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gYS5zcGxpY2UoMSwwLFwiR0VUXCIpLGkucHJvdG90eXBlLmh0dHBEby5hcHBseSh0aGlzLGEpfSxpLnByb3RvdHlwZS5odHRwUG9zdD1mdW5jdGlvbigpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImh0dHBQb3N0XCIsYXJndW1lbnRzKTt2YXIgYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBhLnNwbGljZSgxLDAsXCJQT1NUXCIpLGkucHJvdG90eXBlLmh0dHBEby5hcHBseSh0aGlzLGEpfSxpLnByb3RvdHlwZS5odHRwRG89ZnVuY3Rpb24oKXtmb3IodmFyIGEsYixjLGQsZixnPXt9LGg9MCxrPVwidGV4dC9wbGFpblwiLGw9YXJndW1lbnRzLmxlbmd0aC0xO2w+MCYmXCJmdW5jdGlvblwiPT10eXBlb2YgYXJndW1lbnRzW2xdO2wtLSloKys7dmFyIG09YXJndW1lbnRzLmxlbmd0aC1oLG49YXJndW1lbnRzWzBdO2lmKDI9PT1tJiZcInN0cmluZ1wiPT10eXBlb2YgbiYmXCJvYmplY3RcIj09dHlwZW9mIGFyZ3VtZW50c1sxXSlkPW5ldyBSZXF1ZXN0KG4sYXJndW1lbnRzWzFdKSxiPWFyZ3VtZW50c1syXSxjPWFyZ3VtZW50c1szXTtlbHNle2Zvcih2YXIgbyxwPVwiR0VUXCIscT0xO3E8YXJndW1lbnRzLmxlbmd0aDtxKyspe3ZhciByPWFyZ3VtZW50c1txXTtpZihcInN0cmluZ1wiPT10eXBlb2YgcilcIkdFVFwiPT09cnx8XCJQT1NUXCI9PT1yfHxcIlBVVFwiPT09cnx8XCJERUxFVEVcIj09PXI/cD1yOlwianNvblwiPT09cnx8XCJqc29ucFwiPT09cnx8XCJiaW5hcnlcIj09PXJ8fFwiYXJyYXlCdWZmZXJcIj09PXJ8fFwieG1sXCI9PT1yfHxcInRleHRcIj09PXJ8fFwidGFibGVcIj09PXI/YT1yOm89cjtlbHNlIGlmKFwibnVtYmVyXCI9PXR5cGVvZiByKW89ci50b1N0cmluZygpO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIHIpaWYoci5oYXNPd25Qcm9wZXJ0eShcImpzb25wQ2FsbGJhY2tcIikpZm9yKHZhciBzIGluIHIpZ1tzXT1yW3NdO2Vsc2Ugbz1KU09OLnN0cmluZ2lmeShyKSxrPVwiYXBwbGljYXRpb24vanNvblwiO2Vsc2VcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiYoYj9jPXI6Yj1yKX1kPW5ldyBSZXF1ZXN0KG4se21ldGhvZDpwLG1vZGU6XCJjb3JzXCIsYm9keTpvLGhlYWRlcnM6bmV3IEhlYWRlcnMoe1wiQ29udGVudC1UeXBlXCI6a30pfSl9cmV0dXJuIGF8fChhPS0xIT09bi5pbmRleE9mKFwianNvblwiKT9cImpzb25cIjotMSE9PW4uaW5kZXhPZihcInhtbFwiKT9cInhtbFwiOlwidGV4dFwiKSxmPVwianNvbnBcIj09PWE/aihuLGcpOmZldGNoKGQpLGY9Zi50aGVuKGZ1bmN0aW9uKGIpe2lmKCFiLm9rKXt2YXIgYz1uZXcgRXJyb3IoYi5ib2R5KTt0aHJvdyBjLnN0YXR1cz1iLnN0YXR1cyxjLm9rPSExLGN9dmFyIGQ9Yi5oZWFkZXJzLmdldChcImNvbnRlbnQtbGVuZ3RoXCIpO3N3aXRjaChkJiZkPjY0ZTYmJmkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig3LG4pLGEpe2Nhc2VcImpzb25cIjpjYXNlXCJqc29ucFwiOnJldHVybiBiLmpzb24oKTtjYXNlXCJiaW5hcnlcIjpyZXR1cm4gYi5ibG9iKCk7Y2FzZVwiYXJyYXlCdWZmZXJcIjpyZXR1cm4gYi5hcnJheUJ1ZmZlcigpO2Nhc2VcInhtbFwiOnJldHVybiBiLnRleHQoKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBlKChuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYSxcInRleHQveG1sXCIpLmRvY3VtZW50RWxlbWVudCl9KTtkZWZhdWx0OnJldHVybiBiLnRleHQoKX19KSxmLnRoZW4oYnx8ZnVuY3Rpb24oKXt9KSxmLmNhdGNoKGN8fGNvbnNvbGUuZXJyb3IpLGZ9LHdpbmRvdy5VUkw9d2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTCxpLnByb3RvdHlwZS5fcFdyaXRlcnM9W10saS5wcm90b3R5cGUuY3JlYXRlV3JpdGVyPWZ1bmN0aW9uKGEsYil7dmFyIGM7Zm9yKHZhciBkIGluIGkucHJvdG90eXBlLl9wV3JpdGVycylpZihpLnByb3RvdHlwZS5fcFdyaXRlcnNbZF0ubmFtZT09PWEpcmV0dXJuIGM9bmV3IGkuUHJpbnRXcml0ZXIoYSt0aGlzLm1pbGxpcygpLGIpLGkucHJvdG90eXBlLl9wV3JpdGVycy5wdXNoKGMpLGM7cmV0dXJuIGM9bmV3IGkuUHJpbnRXcml0ZXIoYSxiKSxpLnByb3RvdHlwZS5fcFdyaXRlcnMucHVzaChjKSxjfSxpLlByaW50V3JpdGVyPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpczt0aGlzLm5hbWU9YSx0aGlzLmNvbnRlbnQ9XCJcIix0aGlzLndyaXRlPWZ1bmN0aW9uKGEpe3RoaXMuY29udGVudCs9YX0sdGhpcy5wcmludD1mdW5jdGlvbihhKXt0aGlzLmNvbnRlbnQrPWErXCJcXG5cIn0sdGhpcy5jbGVhcj1mdW5jdGlvbigpe3RoaXMuY29udGVudD1cIlwifSx0aGlzLmNsb3NlPWZ1bmN0aW9uKCl7dmFyIGQ9W107ZC5wdXNoKHRoaXMuY29udGVudCksaS5wcm90b3R5cGUud3JpdGVGaWxlKGQsYSxiKTtmb3IodmFyIGUgaW4gaS5wcm90b3R5cGUuX3BXcml0ZXJzKWkucHJvdG90eXBlLl9wV3JpdGVyc1tlXS5uYW1lPT09dGhpcy5uYW1lJiZpLnByb3RvdHlwZS5fcFdyaXRlcnMuc3BsaWNlKGUsMSk7Yy5jbGVhcigpLGM9e319fSxpLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hcmd1bWVudHMsZT10aGlzLl9jdXJFbGVtZW50LmVsdDtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIHZvaWQgaS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhlKTtpZihkWzBdaW5zdGFuY2VvZiBpLlJlbmRlcmVyfHxkWzBdaW5zdGFuY2VvZiBpLkdyYXBoaWNzKXJldHVybiB2b2lkIGkucHJvdG90eXBlLnNhdmVDYW52YXMoZFswXS5lbHQsZFsxXSxkWzJdKTtpZigxPT09ZC5sZW5ndGgmJlwic3RyaW5nXCI9PXR5cGVvZiBkWzBdKWkucHJvdG90eXBlLnNhdmVDYW52YXMoZSxkWzBdKTtlbHNle3N3aXRjaChnKGRbMV0sZFsyXSlbMV0pe2Nhc2VcImpzb25cIjpyZXR1cm4gdm9pZCBpLnByb3RvdHlwZS5zYXZlSlNPTihkWzBdLGRbMV0sZFsyXSk7Y2FzZVwidHh0XCI6cmV0dXJuIHZvaWQgaS5wcm90b3R5cGUuc2F2ZVN0cmluZ3MoZFswXSxkWzFdLGRbMl0pO2RlZmF1bHQ6ZFswXWluc3RhbmNlb2YgQXJyYXk/aS5wcm90b3R5cGUuc2F2ZVN0cmluZ3MoZFswXSxkWzFdLGRbMl0pOmRbMF1pbnN0YW5jZW9mIGkuVGFibGU/aS5wcm90b3R5cGUuc2F2ZVRhYmxlKGRbMF0sZFsxXSxkWzJdKTpkWzBdaW5zdGFuY2VvZiBpLkltYWdlP2kucHJvdG90eXBlLnNhdmVDYW52YXMoZFswXS5jYW52YXMsZFsxXSk6ZFswXWluc3RhbmNlb2YgaS5Tb3VuZEZpbGUmJmkucHJvdG90eXBlLnNhdmVTb3VuZChkWzBdLGRbMV0sZFsyXSxkWzNdKX19fSxpLnByb3RvdHlwZS5zYXZlSlNPTj1mdW5jdGlvbihhLGIsYyl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZUpTT05cIixhcmd1bWVudHMpO3ZhciBkO2Q9Yz9KU09OLnN0cmluZ2lmeShhKTpKU09OLnN0cmluZ2lmeShhLHZvaWQgMCwyKSx0aGlzLnNhdmVTdHJpbmdzKGQuc3BsaXQoXCJcXG5cIiksYixcImpzb25cIil9LGkucHJvdG90eXBlLnNhdmVKU09OT2JqZWN0PWkucHJvdG90eXBlLnNhdmVKU09OLGkucHJvdG90eXBlLnNhdmVKU09OQXJyYXk9aS5wcm90b3R5cGUuc2F2ZUpTT04saS5wcm90b3R5cGUuc2F2ZVN0cmluZ3M9ZnVuY3Rpb24oYSxiLGMpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVTdHJpbmdzXCIsYXJndW1lbnRzKTtmb3IodmFyIGQ9Y3x8XCJ0eHRcIixlPXRoaXMuY3JlYXRlV3JpdGVyKGIsZCksZj0wO2Y8YS5sZW5ndGg7ZisrKWEubGVuZ3RoLGUucHJpbnQoYVtmXSk7ZS5jbG9zZSgpLGUuY2xlYXIoKX0saS5wcm90b3R5cGUuc2F2ZVRhYmxlPWZ1bmN0aW9uKGEsYixjKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlVGFibGVcIixhcmd1bWVudHMpO3ZhciBkO2Q9dm9pZCAwPT09Yz9iLnN1YnN0cmluZyhiLmxhc3RJbmRleE9mKFwiLlwiKSsxLGIubGVuZ3RoKTpjO3ZhciBlPXRoaXMuY3JlYXRlV3JpdGVyKGIsZCksZz1hLmNvbHVtbnMsaD1cIixcIjtpZihcInRzdlwiPT09ZCYmKGg9XCJcXHRcIiksXCJodG1sXCIhPT1kKXtpZihcIjBcIiE9PWdbMF0pe2Zvcih2YXIgaj0wO2o8Zy5sZW5ndGg7aisrKWo8Zy5sZW5ndGgtMT9lLndyaXRlKGdbal0raCk6ZS53cml0ZShnW2pdKTtlLndyaXRlKFwiXFxuXCIpfWZvcih2YXIgaz0wO2s8YS5yb3dzLmxlbmd0aDtrKyspe3ZhciBsO2ZvcihsPTA7bDxhLnJvd3Nba10uYXJyLmxlbmd0aDtsKyspbDxhLnJvd3Nba10uYXJyLmxlbmd0aC0xP2Uud3JpdGUoYS5yb3dzW2tdLmFycltsXStoKTooYS5yb3dzLmxlbmd0aCxlLndyaXRlKGEucm93c1trXS5hcnJbbF0pKTtlLndyaXRlKFwiXFxuXCIpfX1lbHNle2UucHJpbnQoXCI8aHRtbD5cIiksZS5wcmludChcIjxoZWFkPlwiKTt2YXIgbT0nICA8bWV0YSBodHRwLWVxdWl2PVwiY29udGVudC10eXBlXCIgY29udGVudCc7aWYobSs9Jz1cInRleHQvaHRtbDtjaGFyc2V0PXV0Zi04XCIgLz4nLGUucHJpbnQobSksZS5wcmludChcIjwvaGVhZD5cIiksZS5wcmludChcIjxib2R5PlwiKSxlLnByaW50KFwiICA8dGFibGU+XCIpLFwiMFwiIT09Z1swXSl7ZS5wcmludChcIiAgICA8dHI+XCIpO2Zvcih2YXIgbj0wO248Zy5sZW5ndGg7bisrKXt2YXIgbz1mKGdbbl0pO2UucHJpbnQoXCIgICAgICA8dGQ+XCIrbyksZS5wcmludChcIiAgICAgIDwvdGQ+XCIpfWUucHJpbnQoXCIgICAgPC90cj5cIil9Zm9yKHZhciBwPTA7cDxhLnJvd3MubGVuZ3RoO3ArKyl7ZS5wcmludChcIiAgICA8dHI+XCIpO2Zvcih2YXIgcT0wO3E8YS5jb2x1bW5zLmxlbmd0aDtxKyspe3ZhciByPWEucm93c1twXS5nZXRTdHJpbmcocSkscz1mKHIpO2UucHJpbnQoXCIgICAgICA8dGQ+XCIrcyksZS5wcmludChcIiAgICAgIDwvdGQ+XCIpfWUucHJpbnQoXCIgICAgPC90cj5cIil9ZS5wcmludChcIiAgPC90YWJsZT5cIiksZS5wcmludChcIjwvYm9keT5cIiksZS5wcmludChcIjwvaHRtbD5cIil9ZS5jbG9zZSgpLGUuY2xlYXIoKX0saS5wcm90b3R5cGUud3JpdGVGaWxlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1cImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO2kucHJvdG90eXBlLl9pc1NhZmFyaSgpJiYoZD1cInRleHQvcGxhaW5cIik7dmFyIGU9bmV3IEJsb2IoYSx7dHlwZTpkfSk7aS5wcm90b3R5cGUuZG93bmxvYWRGaWxlKGUsYixjKX0saS5wcm90b3R5cGUuZG93bmxvYWRGaWxlPWZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1nKGMsZCksZj1lWzBdO2lmKGIgaW5zdGFuY2VvZiBCbG9iKXtyZXR1cm4gdm9pZCBhKFwiZmlsZS1zYXZlclwiKS5zYXZlQXMoYixmKX12YXIgaj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtpZihqLmhyZWY9YixqLmRvd25sb2FkPWYsai5vbmNsaWNrPWZ1bmN0aW9uKGEpe2goYSksYS5zdG9wUHJvcGFnYXRpb24oKX0sai5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaiksaS5wcm90b3R5cGUuX2lzU2FmYXJpKCkpe3ZhciBrPVwiSGVsbG8sIFNhZmFyaSB1c2VyISBUbyBkb3dubG9hZCB0aGlzIGZpbGUuLi5cXG5cIjtrKz1cIjEuIEdvIHRvIEZpbGUgLS1cXHgzZSBTYXZlIEFzLlxcblwiLGsrPScyLiBDaG9vc2UgXCJQYWdlIFNvdXJjZVwiIGFzIHRoZSBGb3JtYXQuXFxuJyxrKz0nMy4gTmFtZSBpdCB3aXRoIHRoaXMgZXh0ZW5zaW9uOiAuXCInK2VbMV0rJ1wiJyxhbGVydChrKX1qLmNsaWNrKCl9LGkucHJvdG90eXBlLl9jaGVja0ZpbGVFeHRlbnNpb249ZyxpLnByb3RvdHlwZS5faXNTYWZhcmk9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5IVE1MRWxlbWVudCkuaW5kZXhPZihcIkNvbnN0cnVjdG9yXCIpPjB9LGIuZXhwb3J0cz1pfSx7XCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiZXM2LXByb21pc2VcIjo0LFwiZmV0Y2gtanNvbnBcIjo1LFwiZmlsZS1zYXZlclwiOjYsXCJ3aGF0d2ctZmV0Y2hcIjoxMn1dLDQ4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlRhYmxlPWZ1bmN0aW9uKGEpe3RoaXMuY29sdW1ucz1bXSx0aGlzLnJvd3M9W119LGQuVGFibGUucHJvdG90eXBlLmFkZFJvdz1mdW5jdGlvbihhKXt2YXIgYj1hfHxuZXcgZC5UYWJsZVJvdztpZih2b2lkIDA9PT1iLmFycnx8dm9pZCAwPT09Yi5vYmopdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBUYWJsZVJvdzogXCIrYik7cmV0dXJuIGIudGFibGU9dGhpcyx0aGlzLnJvd3MucHVzaChiKSxifSxkLlRhYmxlLnByb3RvdHlwZS5yZW1vdmVSb3c9ZnVuY3Rpb24oYSl7dGhpcy5yb3dzW2FdLnRhYmxlPW51bGw7dmFyIGI9dGhpcy5yb3dzLnNwbGljZShhKzEsdGhpcy5yb3dzLmxlbmd0aCk7dGhpcy5yb3dzLnBvcCgpLHRoaXMucm93cz10aGlzLnJvd3MuY29uY2F0KGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRSb3c9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm93c1thXX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0Um93cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvd3N9LGQuVGFibGUucHJvdG90eXBlLmZpbmRSb3c9ZnVuY3Rpb24oYSxiKXtpZihcInN0cmluZ1wiPT10eXBlb2YgYil7Zm9yKHZhciBjPTA7Yzx0aGlzLnJvd3MubGVuZ3RoO2MrKylpZih0aGlzLnJvd3NbY10ub2JqW2JdPT09YSlyZXR1cm4gdGhpcy5yb3dzW2NdfWVsc2UgZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKylpZih0aGlzLnJvd3NbZF0uYXJyW2JdPT09YSlyZXR1cm4gdGhpcy5yb3dzW2RdO3JldHVybiBudWxsfSxkLlRhYmxlLnByb3RvdHlwZS5maW5kUm93cz1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiKWZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspdGhpcy5yb3dzW2RdLm9ialtiXT09PWEmJmMucHVzaCh0aGlzLnJvd3NbZF0pO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLnJvd3MubGVuZ3RoO2UrKyl0aGlzLnJvd3NbZV0uYXJyW2JdPT09YSYmYy5wdXNoKHRoaXMucm93c1tlXSk7cmV0dXJuIGN9LGQuVGFibGUucHJvdG90eXBlLm1hdGNoUm93PWZ1bmN0aW9uKGEsYil7aWYoXCJudW1iZXJcIj09dHlwZW9mIGIpe2Zvcih2YXIgYz0wO2M8dGhpcy5yb3dzLmxlbmd0aDtjKyspaWYodGhpcy5yb3dzW2NdLmFycltiXS5tYXRjaChhKSlyZXR1cm4gdGhpcy5yb3dzW2NdfWVsc2UgZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKylpZih0aGlzLnJvd3NbZF0ub2JqW2JdLm1hdGNoKGEpKXJldHVybiB0aGlzLnJvd3NbZF07cmV0dXJuIG51bGx9LGQuVGFibGUucHJvdG90eXBlLm1hdGNoUm93cz1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBiKWZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspdGhpcy5yb3dzW2RdLmFycltiXS5tYXRjaChhKSYmYy5wdXNoKHRoaXMucm93c1tkXSk7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMucm93cy5sZW5ndGg7ZSsrKXRoaXMucm93c1tlXS5vYmpbYl0ubWF0Y2goYSkmJmMucHVzaCh0aGlzLnJvd3NbZV0pO3JldHVybiBjfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRDb2x1bW49ZnVuY3Rpb24oYSl7dmFyIGI9W107aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpZm9yKHZhciBjPTA7Yzx0aGlzLnJvd3MubGVuZ3RoO2MrKyliLnB1c2godGhpcy5yb3dzW2NdLm9ialthXSk7ZWxzZSBmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKWIucHVzaCh0aGlzLnJvd3NbZF0uYXJyW2FdKTtyZXR1cm4gYn0sZC5UYWJsZS5wcm90b3R5cGUuY2xlYXJSb3dzPWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMucm93cyx0aGlzLnJvd3M9W119LGQuVGFibGUucHJvdG90eXBlLmFkZENvbHVtbj1mdW5jdGlvbihhKXt2YXIgYj1hfHxudWxsO3RoaXMuY29sdW1ucy5wdXNoKGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRDb2x1bW5Db3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbHVtbnMubGVuZ3RofSxkLlRhYmxlLnByb3RvdHlwZS5nZXRSb3dDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvd3MubGVuZ3RofSxkLlRhYmxlLnByb3RvdHlwZS5yZW1vdmVUb2tlbnM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLFwiXFxcXCQmXCIpfSxkPVtdLGU9MDtlPGEubGVuZ3RoO2UrKylkLnB1c2goYyhhLmNoYXJBdChlKSkpO3ZhciBmPW5ldyBSZWdFeHAoZC5qb2luKFwifFwiKSxcImdcIik7aWYodm9pZCAwPT09Yilmb3IodmFyIGc9MDtnPHRoaXMuY29sdW1ucy5sZW5ndGg7ZysrKWZvcih2YXIgaD0wO2g8dGhpcy5yb3dzLmxlbmd0aDtoKyspe3ZhciBpPXRoaXMucm93c1toXS5hcnJbZ107aT1pLnJlcGxhY2UoZixcIlwiKSx0aGlzLnJvd3NbaF0uYXJyW2ddPWksdGhpcy5yb3dzW2hdLm9ialt0aGlzLmNvbHVtbnNbZ11dPWl9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYilmb3IodmFyIGo9MDtqPHRoaXMucm93cy5sZW5ndGg7aisrKXt2YXIgaz10aGlzLnJvd3Nbal0ub2JqW2JdO2s9ay5yZXBsYWNlKGYsXCJcIiksdGhpcy5yb3dzW2pdLm9ialtiXT1rO3ZhciBsPXRoaXMuY29sdW1ucy5pbmRleE9mKGIpO3RoaXMucm93c1tqXS5hcnJbbF09a31lbHNlIGZvcih2YXIgbT0wO208dGhpcy5yb3dzLmxlbmd0aDttKyspe3ZhciBuPXRoaXMucm93c1ttXS5hcnJbYl07bj1uLnJlcGxhY2UoZixcIlwiKSx0aGlzLnJvd3NbbV0uYXJyW2JdPW4sdGhpcy5yb3dzW21dLm9ialt0aGlzLmNvbHVtbnNbYl1dPW59fSxkLlRhYmxlLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBSZWdFeHAoXCIgXCIsXCJnXCIpO2lmKHZvaWQgMD09PWEpZm9yKHZhciBjPTA7Yzx0aGlzLmNvbHVtbnMubGVuZ3RoO2MrKylmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKXt2YXIgZT10aGlzLnJvd3NbZF0uYXJyW2NdO2U9ZS5yZXBsYWNlKGIsXCJcIiksdGhpcy5yb3dzW2RdLmFycltjXT1lLHRoaXMucm93c1tkXS5vYmpbdGhpcy5jb2x1bW5zW2NdXT1lfWVsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpZm9yKHZhciBmPTA7Zjx0aGlzLnJvd3MubGVuZ3RoO2YrKyl7dmFyIGc9dGhpcy5yb3dzW2ZdLm9ialthXTtnPWcucmVwbGFjZShiLFwiXCIpLHRoaXMucm93c1tmXS5vYmpbYV09Zzt2YXIgaD10aGlzLmNvbHVtbnMuaW5kZXhPZihhKTt0aGlzLnJvd3NbZl0uYXJyW2hdPWd9ZWxzZSBmb3IodmFyIGk9MDtpPHRoaXMucm93cy5sZW5ndGg7aSsrKXt2YXIgaj10aGlzLnJvd3NbaV0uYXJyW2FdO2o9ai5yZXBsYWNlKGIsXCJcIiksdGhpcy5yb3dzW2ldLmFyclthXT1qLHRoaXMucm93c1tpXS5vYmpbdGhpcy5jb2x1bW5zW2FdXT1qfX0sZC5UYWJsZS5wcm90b3R5cGUucmVtb3ZlQ29sdW1uPWZ1bmN0aW9uKGEpe3ZhciBiLGM7XCJzdHJpbmdcIj09dHlwZW9mIGE/KGI9YSxjPXRoaXMuY29sdW1ucy5pbmRleE9mKGEpKTooYz1hLGI9dGhpcy5jb2x1bW5zW2FdKTt2YXIgZD10aGlzLmNvbHVtbnMuc3BsaWNlKGMrMSx0aGlzLmNvbHVtbnMubGVuZ3RoKTt0aGlzLmNvbHVtbnMucG9wKCksdGhpcy5jb2x1bW5zPXRoaXMuY29sdW1ucy5jb25jYXQoZCk7Zm9yKHZhciBlPTA7ZTx0aGlzLnJvd3MubGVuZ3RoO2UrKyl7dmFyIGY9dGhpcy5yb3dzW2VdLmFycixnPWYuc3BsaWNlKGMrMSxmLmxlbmd0aCk7Zi5wb3AoKSx0aGlzLnJvd3NbZV0uYXJyPWYuY29uY2F0KGcpLGRlbGV0ZSB0aGlzLnJvd3NbZV0ub2JqW2JdfX0sZC5UYWJsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLnJvd3NbYV0uc2V0KGIsYyl9LGQuVGFibGUucHJvdG90eXBlLnNldE51bT1mdW5jdGlvbihhLGIsYyl7dGhpcy5yb3dzW2FdLnNldE51bShiLGMpfSxkLlRhYmxlLnByb3RvdHlwZS5zZXRTdHJpbmc9ZnVuY3Rpb24oYSxiLGMpe3RoaXMucm93c1thXS5zZXRTdHJpbmcoYixjKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucm93c1thXS5nZXQoYil9LGQuVGFibGUucHJvdG90eXBlLmdldE51bT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnJvd3NbYV0uZ2V0TnVtKGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5yb3dzW2FdLmdldFN0cmluZyhiKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0T2JqZWN0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQ9e30sZT0wO2U8dGhpcy5yb3dzLmxlbmd0aDtlKyspaWYoYj10aGlzLnJvd3NbZV0ub2JqLFwic3RyaW5nXCI9PXR5cGVvZiBhKXtpZighKHRoaXMuY29sdW1ucy5pbmRleE9mKGEpPj0wKSl0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgdGFibGUgaGFzIG5vIGNvbHVtbiBuYW1lZCBcIicrYSsnXCInKTtjPWJbYV0sZFtjXT1ifWVsc2UgZFtlXT10aGlzLnJvd3NbZV0ub2JqO3JldHVybiBkfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRBcnJheT1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPTA7Yjx0aGlzLnJvd3MubGVuZ3RoO2IrKylhLnB1c2godGhpcy5yb3dzW2JdLmFycik7cmV0dXJuIGF9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQ5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlRhYmxlUm93PWZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZD17fTthJiYoYj1ifHxcIixcIixjPWEuc3BsaXQoYikpO2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZj1lLGc9Y1tlXTtkW2ZdPWd9dGhpcy5hcnI9Yyx0aGlzLm9iaj1kLHRoaXMudGFibGU9bnVsbH0sZC5UYWJsZVJvdy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpe3ZhciBjPXRoaXMudGFibGUuY29sdW1ucy5pbmRleE9mKGEpO2lmKCEoYz49MCkpdGhyb3cgbmV3IEVycm9yKCdUaGlzIHRhYmxlIGhhcyBubyBjb2x1bW4gbmFtZWQgXCInK2ErJ1wiJyk7dGhpcy5vYmpbYV09Yix0aGlzLmFycltjXT1ifWVsc2V7aWYoIShhPHRoaXMudGFibGUuY29sdW1ucy5sZW5ndGgpKXRocm93IG5ldyBFcnJvcihcIkNvbHVtbiAjXCIrYStcIiBpcyBvdXQgb2YgdGhlIHJhbmdlIG9mIHRoaXMgdGFibGVcIik7dGhpcy5hcnJbYV09Yjt2YXIgZD10aGlzLnRhYmxlLmNvbHVtbnNbYV07dGhpcy5vYmpbZF09Yn19LGQuVGFibGVSb3cucHJvdG90eXBlLnNldE51bT1mdW5jdGlvbihhLGIpe3ZhciBjPXBhcnNlRmxvYXQoYik7dGhpcy5zZXQoYSxjKX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuc2V0U3RyaW5nPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi50b1N0cmluZygpO3RoaXMuc2V0KGEsYyl9LGQuVGFibGVSb3cucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYT90aGlzLm9ialthXTp0aGlzLmFyclthXX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuZ2V0TnVtPWZ1bmN0aW9uKGEpe3ZhciBiO2lmKGI9XCJzdHJpbmdcIj09dHlwZW9mIGE/cGFyc2VGbG9hdCh0aGlzLm9ialthXSk6cGFyc2VGbG9hdCh0aGlzLmFyclthXSksXCJOYU5cIj09PWIudG9TdHJpbmcoKSl0aHJvd1wiRXJyb3I6IFwiK3RoaXMub2JqW2FdK1wiIGlzIE5hTiAoTm90IGEgTnVtYmVyKVwiO3JldHVybiBifSxkLlRhYmxlUm93LnByb3RvdHlwZS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGE/dGhpcy5vYmpbYV0udG9TdHJpbmcoKTp0aGlzLmFyclthXS50b1N0cmluZygpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1MDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5YTUw9ZnVuY3Rpb24oKXt0aGlzLm5hbWU9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY29udGVudD1udWxsfSxkLlhNTC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSxkLlhNTC5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9LGQuWE1MLnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKGEpe3RoaXMubmFtZT1hfSxkLlhNTC5wcm90b3R5cGUuaGFzQ2hpbGRyZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg+MH0sZC5YTUwucHJvdG90eXBlLmxpc3RDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5uYW1lfSl9LGQuWE1MLnByb3RvdHlwZS5nZXRDaGlsZHJlbj1mdW5jdGlvbihhKXtyZXR1cm4gYT90aGlzLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4gYi5uYW1lPT09YX0pOnRoaXMuY2hpbGRyZW59LGQuWE1MLnByb3RvdHlwZS5nZXRDaGlsZD1mdW5jdGlvbihhKXtpZihcInN0cmluZ1wiIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5jaGlsZHJlblthXTtmb3IodmFyIGI9MDtiPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5jaGlsZHJlbltiXTtpZihjLm5hbWU9PT1hKXJldHVybiBjfX0sZC5YTUwucHJvdG90eXBlLmFkZENoaWxkPWZ1bmN0aW9uKGEpe2EgaW5zdGFuY2VvZiBkLlhNTCYmdGhpcy5jaGlsZHJlbi5wdXNoKGEpfSxkLlhNTC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oYSl7dmFyIGI9LTE7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEpe2Zvcih2YXIgYz0wO2M8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YysrKWlmKHRoaXMuY2hpbGRyZW5bY10ubmFtZT09PWEpe2I9YzticmVha319ZWxzZSBiPWE7LTEhPT1iJiZ0aGlzLmNoaWxkcmVuLnNwbGljZShiLDEpfSxkLlhNTC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKS5sZW5ndGh9LGQuWE1MLnByb3RvdHlwZS5saXN0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpfSxkLlhNTC5wcm90b3R5cGUuaGFzQXR0cmlidXRlPWZ1bmN0aW9uKGEpe3JldHVybiEhdGhpcy5hdHRyaWJ1dGVzW2FdfSxkLlhNTC5wcm90b3R5cGUuZ2V0TnVtPWZ1bmN0aW9uKGEsYil7cmV0dXJuIE51bWJlcih0aGlzLmF0dHJpYnV0ZXNbYV0pfHxifHwwfSxkLlhNTC5wcm90b3R5cGUuZ2V0U3RyaW5nPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFN0cmluZyh0aGlzLmF0dHJpYnV0ZXNbYV0pfHxifHxudWxsfSxkLlhNTC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKGEsYil7dGhpcy5hdHRyaWJ1dGVzW2FdJiYodGhpcy5hdHRyaWJ1dGVzW2FdPWIpfSxkLlhNTC5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jb250ZW50fHxhfHxudWxsfSxkLlhNTC5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbihhKXt0aGlzLmNoaWxkcmVuLmxlbmd0aHx8KHRoaXMuY29udGVudD1hKX0sZC5YTUwucHJvdG90eXBlLl9zZXRDb250PWZ1bmN0aW9uKGEpe3ZhciBiO2I9YSxiPWIucmVwbGFjZSgvXFxzXFxzKy9nLFwiLFwiKSx0aGlzLmNvbnRlbnQ9Yn0sZC5YTUwucHJvdG90eXBlLl9zZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9YS5hdHRyaWJ1dGVzO2lmKGMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07YltlLm5vZGVOYW1lXT1lLm5vZGVWYWx1ZX10aGlzLmF0dHJpYnV0ZXM9Yn0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBNYXRoLmh5cG90KXJldHVybiBNYXRoLmh5cG90LmFwcGx5KG51bGwsYXJndW1lbnRzKTtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxlPVtdLGY9MCxnPTA7ZzxkO2crKyl7dmFyIGg9YXJndW1lbnRzW2ddXG47aWYoKGg9K2gpPT09MS8wfHxoPT09LTEvMClyZXR1cm4gMS8wO2g9TWF0aC5hYnMoaCksaD5mJiYoZj1oKSxlW2ddPWh9MD09PWYmJihmPTEpO2Zvcih2YXIgaT0wLGo9MCxrPTA7azxkO2srKyl7dmFyIGw9ZVtrXS9mLG09bCpsLWosbj1pK207aj1uLWktbSxpPW59cmV0dXJuIE1hdGguc3FydChpKSpmfXZhciBlPWEoXCIuLi9jb3JlL21haW5cIik7ZS5wcm90b3R5cGUuYWJzPU1hdGguYWJzLGUucHJvdG90eXBlLmNlaWw9TWF0aC5jZWlsLGUucHJvdG90eXBlLmNvbnN0cmFpbj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvbnN0cmFpblwiLGFyZ3VtZW50cyksTWF0aC5tYXgoTWF0aC5taW4oYSxjKSxiKX0sZS5wcm90b3R5cGUuZGlzdD1mdW5jdGlvbigpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJkaXN0XCIsYXJndW1lbnRzKSw0PT09YXJndW1lbnRzLmxlbmd0aD9kKGFyZ3VtZW50c1syXS1hcmd1bWVudHNbMF0sYXJndW1lbnRzWzNdLWFyZ3VtZW50c1sxXSk6Nj09PWFyZ3VtZW50cy5sZW5ndGg/ZChhcmd1bWVudHNbM10tYXJndW1lbnRzWzBdLGFyZ3VtZW50c1s0XS1hcmd1bWVudHNbMV0sYXJndW1lbnRzWzVdLWFyZ3VtZW50c1syXSk6dm9pZCAwfSxlLnByb3RvdHlwZS5leHA9TWF0aC5leHAsZS5wcm90b3R5cGUuZmxvb3I9TWF0aC5mbG9vcixlLnByb3RvdHlwZS5sZXJwPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibGVycFwiLGFyZ3VtZW50cyksYyooYi1hKSthfSxlLnByb3RvdHlwZS5sb2c9TWF0aC5sb2csZS5wcm90b3R5cGUubWFnPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1hZ1wiLGFyZ3VtZW50cyksZChhLGIpfSxlLnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1hcFwiLGFyZ3VtZW50cyk7dmFyIGg9KGEtYikvKGMtYikqKGYtZCkrZDtyZXR1cm4gZz9kPGY/dGhpcy5jb25zdHJhaW4oaCxkLGYpOnRoaXMuY29uc3RyYWluKGgsZixkKTpofSxlLnByb3RvdHlwZS5tYXg9ZnVuY3Rpb24oKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWF4XCIsYXJndW1lbnRzKSxhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5P01hdGgubWF4LmFwcGx5KG51bGwsYXJndW1lbnRzWzBdKTpNYXRoLm1heC5hcHBseShudWxsLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlLm1pbj1mdW5jdGlvbigpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtaW5cIixhcmd1bWVudHMpLGFyZ3VtZW50c1swXWluc3RhbmNlb2YgQXJyYXk/TWF0aC5taW4uYXBwbHkobnVsbCxhcmd1bWVudHNbMF0pOk1hdGgubWluLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZS5wcm90b3R5cGUubm9ybT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5vcm1cIixhcmd1bWVudHMpLHRoaXMubWFwKGEsYixjLDAsMSl9LGUucHJvdG90eXBlLnBvdz1NYXRoLnBvdyxlLnByb3RvdHlwZS5yb3VuZD1NYXRoLnJvdW5kLGUucHJvdG90eXBlLnNxPWZ1bmN0aW9uKGEpe3JldHVybiBhKmF9LGUucHJvdG90eXBlLnNxcnQ9TWF0aC5zcXJ0LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDUyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5jcmVhdGVWZWN0b3I9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZD9uZXcgZC5WZWN0b3IodGhpcyxhcmd1bWVudHMpOm5ldyBkLlZlY3RvcihhLGIsYyl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDUzOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQsZT1hKFwiLi4vY29yZS9tYWluXCIpLGY9NCxnPTE8PGYsaD04LGk9MTw8aCxqPTQwOTUsaz00LGw9LjUsbT1mdW5jdGlvbihhKXtyZXR1cm4uNSooMS1NYXRoLmNvcyhhKk1hdGguUEkpKX07ZS5wcm90b3R5cGUubm9pc2U9ZnVuY3Rpb24oYSxiLGMpe2lmKGI9Ynx8MCxjPWN8fDAsbnVsbD09ZCl7ZD1uZXcgQXJyYXkoaisxKTtmb3IodmFyIGU9MDtlPGorMTtlKyspZFtlXT1NYXRoLnJhbmRvbSgpfWE8MCYmKGE9LWEpLGI8MCYmKGI9LWIpLGM8MCYmKGM9LWMpO2Zvcih2YXIgbixvLHAscSxyLHM9TWF0aC5mbG9vcihhKSx0PU1hdGguZmxvb3IoYiksdT1NYXRoLmZsb29yKGMpLHY9YS1zLHc9Yi10LHg9Yy11LHk9MCx6PS41LEE9MDtBPGs7QSsrKXt2YXIgQj1zKyh0PDxmKSsodTw8aCk7bj1tKHYpLG89bSh3KSxwPWRbQiZqXSxwKz1uKihkW0IrMSZqXS1wKSxxPWRbQitnJmpdLHErPW4qKGRbQitnKzEmal0tcSkscCs9byoocS1wKSxCKz1pLHE9ZFtCJmpdLHErPW4qKGRbQisxJmpdLXEpLHI9ZFtCK2cmal0scis9biooZFtCK2crMSZqXS1yKSxxKz1vKihyLXEpLHArPW0oeCkqKHEtcCkseSs9cCp6LHoqPWwsczw8PTEsdio9Mix0PDw9MSx3Kj0yLHU8PD0xLHgqPTIsdj49MSYmKHMrKyx2LS0pLHc+PTEmJih0Kyssdy0tKSx4Pj0xJiYodSsrLHgtLSl9cmV0dXJuIHl9LGUucHJvdG90eXBlLm5vaXNlRGV0YWlsPWZ1bmN0aW9uKGEsYil7YT4wJiYoaz1hKSxiPjAmJihsPWIpfSxlLnByb3RvdHlwZS5ub2lzZVNlZWQ9ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXt2YXIgYSxiLGM9NDI5NDk2NzI5NixkPTE2NjQ1MjUsZT0xMDEzOTA0MjIzO3JldHVybntzZXRTZWVkOmZ1bmN0aW9uKGQpe2I9YT0obnVsbD09ZD9NYXRoLnJhbmRvbSgpKmM6ZCk+Pj4wfSxnZXRTZWVkOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHJhbmQ6ZnVuY3Rpb24oKXtyZXR1cm4oYj0oZCpiK2UpJWMpL2N9fX0oKTtiLnNldFNlZWQoYSksZD1uZXcgQXJyYXkoaisxKTtmb3IodmFyIGM9MDtjPGorMTtjKyspZFtjXT1iLnJhbmQoKX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QuVmVjdG9yPWZ1bmN0aW9uKCl7dmFyIGEsYixjO2FyZ3VtZW50c1swXWluc3RhbmNlb2YgZD8odGhpcy5wNT1hcmd1bWVudHNbMF0sYT1hcmd1bWVudHNbMV1bMF18fDAsYj1hcmd1bWVudHNbMV1bMV18fDAsYz1hcmd1bWVudHNbMV1bMl18fDApOihhPWFyZ3VtZW50c1swXXx8MCxiPWFyZ3VtZW50c1sxXXx8MCxjPWFyZ3VtZW50c1syXXx8MCksdGhpcy54PWEsdGhpcy55PWIsdGhpcy56PWN9LGQuVmVjdG9yLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwicDUuVmVjdG9yIE9iamVjdCA6IFtcIit0aGlzLngrXCIsIFwiK3RoaXMueStcIiwgXCIrdGhpcy56K1wiXVwifSxkLlZlY3Rvci5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyh0aGlzLng9YS54fHwwLHRoaXMueT1hLnl8fDAsdGhpcy56PWEuenx8MCx0aGlzKTphIGluc3RhbmNlb2YgQXJyYXk/KHRoaXMueD1hWzBdfHwwLHRoaXMueT1hWzFdfHwwLHRoaXMuej1hWzJdfHwwLHRoaXMpOih0aGlzLng9YXx8MCx0aGlzLnk9Ynx8MCx0aGlzLno9Y3x8MCx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wNT9uZXcgZC5WZWN0b3IodGhpcy5wNSxbdGhpcy54LHRoaXMueSx0aGlzLnpdKTpuZXcgZC5WZWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfSxkLlZlY3Rvci5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyh0aGlzLngrPWEueHx8MCx0aGlzLnkrPWEueXx8MCx0aGlzLnorPWEuenx8MCx0aGlzKTphIGluc3RhbmNlb2YgQXJyYXk/KHRoaXMueCs9YVswXXx8MCx0aGlzLnkrPWFbMV18fDAsdGhpcy56Kz1hWzJdfHwwLHRoaXMpOih0aGlzLngrPWF8fDAsdGhpcy55Kz1ifHwwLHRoaXMueis9Y3x8MCx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj8odGhpcy54LT1hLnh8fDAsdGhpcy55LT1hLnl8fDAsdGhpcy56LT1hLnp8fDAsdGhpcyk6YSBpbnN0YW5jZW9mIEFycmF5Pyh0aGlzLngtPWFbMF18fDAsdGhpcy55LT1hWzFdfHwwLHRoaXMuei09YVsyXXx8MCx0aGlzKToodGhpcy54LT1hfHwwLHRoaXMueS09Ynx8MCx0aGlzLnotPWN8fDAsdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5tdWx0PWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhJiZpc0Zpbml0ZShhKT8odGhpcy54Kj1hLHRoaXMueSo9YSx0aGlzLnoqPWEsdGhpcyk6KGNvbnNvbGUud2FybihcInA1LlZlY3Rvci5wcm90b3R5cGUubXVsdDpcIixcIm4gaXMgdW5kZWZpbmVkIG9yIG5vdCBhIGZpbml0ZSBudW1iZXJcIiksdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGEmJmlzRmluaXRlKGEpPzA9PT1hPyhjb25zb2xlLndhcm4oXCJwNS5WZWN0b3IucHJvdG90eXBlLmRpdjpcIixcImRpdmlkZSBieSAwXCIpLHRoaXMpOih0aGlzLngvPWEsdGhpcy55Lz1hLHRoaXMuei89YSx0aGlzKTooY29uc29sZS53YXJuKFwicDUuVmVjdG9yLnByb3RvdHlwZS5kaXY6XCIsXCJuIGlzIHVuZGVmaW5lZCBvciBub3QgYSBmaW5pdGUgbnVtYmVyXCIpLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUubWFnPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLm1hZ1NxKCkpfSxkLlZlY3Rvci5wcm90b3R5cGUubWFnU3E9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLngsYj10aGlzLnksYz10aGlzLno7cmV0dXJuIGEqYStiKmIrYypjfSxkLlZlY3Rvci5wcm90b3R5cGUuZG90PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yP3RoaXMuZG90KGEueCxhLnksYS56KTp0aGlzLngqKGF8fDApK3RoaXMueSooYnx8MCkrdGhpcy56KihjfHwwKX0sZC5WZWN0b3IucHJvdG90eXBlLmNyb3NzPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueSphLnotdGhpcy56KmEueSxjPXRoaXMueiphLngtdGhpcy54KmEueixlPXRoaXMueCphLnktdGhpcy55KmEueDtyZXR1cm4gdGhpcy5wNT9uZXcgZC5WZWN0b3IodGhpcy5wNSxbYixjLGVdKTpuZXcgZC5WZWN0b3IoYixjLGUpfSxkLlZlY3Rvci5wcm90b3R5cGUuZGlzdD1mdW5jdGlvbihhKXtyZXR1cm4gYS5jb3B5KCkuc3ViKHRoaXMpLm1hZygpfSxkLlZlY3Rvci5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5tYWcoKTtyZXR1cm4gMCE9PWEmJnRoaXMubXVsdCgxL2EpLHRoaXN9LGQuVmVjdG9yLnByb3RvdHlwZS5saW1pdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm1hZ1NxKCk7cmV0dXJuIGI+YSphJiZ0aGlzLmRpdihNYXRoLnNxcnQoYikpLm11bHQoYSksdGhpc30sZC5WZWN0b3IucHJvdG90eXBlLnNldE1hZz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0KGEpfSxkLlZlY3Rvci5wcm90b3R5cGUuaGVhZGluZz1mdW5jdGlvbigpe3ZhciBhPU1hdGguYXRhbjIodGhpcy55LHRoaXMueCk7cmV0dXJuIHRoaXMucDU/dGhpcy5wNS5fZnJvbVJhZGlhbnMoYSk6YX0sZC5WZWN0b3IucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmhlYWRpbmcoKSthO3RoaXMucDUmJihiPXRoaXMucDUuX3RvUmFkaWFucyhiKSk7dmFyIGM9dGhpcy5tYWcoKTtyZXR1cm4gdGhpcy54PU1hdGguY29zKGIpKmMsdGhpcy55PU1hdGguc2luKGIpKmMsdGhpc30sZC5WZWN0b3IucHJvdG90eXBlLmFuZ2xlQmV0d2Vlbj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmRvdChhKS8odGhpcy5tYWcoKSphLm1hZygpKSxjPU1hdGguYWNvcyhNYXRoLm1pbigxLE1hdGgubWF4KC0xLGIpKSk7cmV0dXJuIHRoaXMucDU/dGhpcy5wNS5fZnJvbVJhZGlhbnMoYyk6Y30sZC5WZWN0b3IucHJvdG90eXBlLmxlcnA9ZnVuY3Rpb24oYSxiLGMsZSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj90aGlzLmxlcnAoYS54LGEueSxhLnosYik6KHRoaXMueCs9KGEtdGhpcy54KSplfHwwLHRoaXMueSs9KGItdGhpcy55KSplfHwwLHRoaXMueis9KGMtdGhpcy56KSplfHwwLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUuYXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy54fHwwLHRoaXMueXx8MCx0aGlzLnp8fDBdfSxkLlZlY3Rvci5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZSxmLGc7cmV0dXJuIGEgaW5zdGFuY2VvZiBkLlZlY3Rvcj8oZT1hLnh8fDAsZj1hLnl8fDAsZz1hLnp8fDApOmEgaW5zdGFuY2VvZiBBcnJheT8oZT1hWzBdfHwwLGY9YVsxXXx8MCxnPWFbMl18fDApOihlPWF8fDAsZj1ifHwwLGc9Y3x8MCksdGhpcy54PT09ZSYmdGhpcy55PT09ZiYmdGhpcy56PT09Z30sZC5WZWN0b3IuZnJvbUFuZ2xlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMD09PWImJihiPTEpLG5ldyBkLlZlY3RvcihiKk1hdGguY29zKGEpLGIqTWF0aC5zaW4oYSksMCl9LGQuVmVjdG9yLmZyb21BbmdsZXM9ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWMmJihjPTEpO3ZhciBlPU1hdGguY29zKGIpLGY9TWF0aC5zaW4oYiksZz1NYXRoLmNvcyhhKSxoPU1hdGguc2luKGEpO3JldHVybiBuZXcgZC5WZWN0b3IoYypoKmYsLWMqZyxjKmgqZSl9LGQuVmVjdG9yLnJhbmRvbTJEPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbUFuZ2xlKE1hdGgucmFuZG9tKCkqZS5UV09fUEkpfSxkLlZlY3Rvci5yYW5kb20zRD1mdW5jdGlvbigpe3ZhciBhPU1hdGgucmFuZG9tKCkqZS5UV09fUEksYj0yKk1hdGgucmFuZG9tKCktMSxjPU1hdGguc3FydCgxLWIqYiksZj1jKk1hdGguY29zKGEpLGc9YypNYXRoLnNpbihhKTtyZXR1cm4gbmV3IGQuVmVjdG9yKGYsZyxiKX0sZC5WZWN0b3IuYWRkPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz9jLnNldChhKTpjPWEuY29weSgpLGMuYWRkKGIpLGN9LGQuVmVjdG9yLnN1Yj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/Yy5zZXQoYSk6Yz1hLmNvcHkoKSxjLnN1YihiKSxjfSxkLlZlY3Rvci5tdWx0PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz9jLnNldChhKTpjPWEuY29weSgpLGMubXVsdChiKSxjfSxkLlZlY3Rvci5kaXY9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP2Muc2V0KGEpOmM9YS5jb3B5KCksYy5kaXYoYiksY30sZC5WZWN0b3IuZG90PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZG90KGIpfSxkLlZlY3Rvci5jcm9zcz1mdW5jdGlvbihhLGIpe3JldHVybiBhLmNyb3NzKGIpfSxkLlZlY3Rvci5kaXN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuZGlzdChiKX0sZC5WZWN0b3IubGVycD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gZD9kLnNldChhKTpkPWEuY29weSgpLGQubGVycChiLGMpLGR9LGQuVmVjdG9yLm1hZz1mdW5jdGlvbihhKXt2YXIgYj1hLngsYz1hLnksZD1hLnosZT1iKmIrYypjK2QqZDtyZXR1cm4gTWF0aC5zcXJ0KGUpfSxiLmV4cG9ydHM9ZC5WZWN0b3J9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDU1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPSExLGY9ITEsZz0wLGg9ZnVuY3Rpb24oKXt2YXIgYSxiLGM9NDI5NDk2NzI5NixkPTE2NjQ1MjUsZT0xMDEzOTA0MjIzO3JldHVybntzZXRTZWVkOmZ1bmN0aW9uKGQpe2I9YT0obnVsbD09ZD9NYXRoLnJhbmRvbSgpKmM6ZCk+Pj4wfSxnZXRTZWVkOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHJhbmQ6ZnVuY3Rpb24oKXtyZXR1cm4oYj0oZCpiK2UpJWMpL2N9fX0oKTtkLnByb3RvdHlwZS5yYW5kb21TZWVkPWZ1bmN0aW9uKGEpe2guc2V0U2VlZChhKSxlPSEwLGY9ITF9LGQucHJvdG90eXBlLnJhbmRvbT1mdW5jdGlvbihhLGIpe3ZhciBjO2lmKGM9ZT9oLnJhbmQoKTpNYXRoLnJhbmRvbSgpLHZvaWQgMD09PWEpcmV0dXJuIGM7aWYodm9pZCAwPT09YilyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2FbTWF0aC5mbG9vcihjKmEubGVuZ3RoKV06YyphO2lmKGE+Yil7dmFyIGQ9YTthPWIsYj1kfXJldHVybiBjKihiLWEpK2F9LGQucHJvdG90eXBlLnJhbmRvbUdhdXNzaWFuPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGg7aWYoZiljPWcsZj0hMTtlbHNle2Rve2Q9dGhpcy5yYW5kb20oMiktMSxlPXRoaXMucmFuZG9tKDIpLTEsaD1kKmQrZSplfXdoaWxlKGg+PTEpO2g9TWF0aC5zcXJ0KC0yKk1hdGgubG9nKGgpL2gpLGM9ZCpoLGc9ZSpoLGY9ITB9dmFyIGk9YXx8MDtyZXR1cm4gYyooYnx8MSkraX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QucHJvdG90eXBlLl9hbmdsZU1vZGU9ZS5SQURJQU5TLGQucHJvdG90eXBlLmFjb3M9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYWNvcyhhKSl9LGQucHJvdG90eXBlLmFzaW49ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYXNpbihhKSl9LGQucHJvdG90eXBlLmF0YW49ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYXRhbihhKSl9LGQucHJvdG90eXBlLmF0YW4yPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuX2Zyb21SYWRpYW5zKE1hdGguYXRhbjIoYSxiKSl9LGQucHJvdG90eXBlLmNvcz1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5jb3ModGhpcy5fdG9SYWRpYW5zKGEpKX0sZC5wcm90b3R5cGUuc2luPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnNpbih0aGlzLl90b1JhZGlhbnMoYSkpfSxkLnByb3RvdHlwZS50YW49ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgudGFuKHRoaXMuX3RvUmFkaWFucyhhKSl9LGQucHJvdG90eXBlLmRlZ3JlZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEqZS5SQURfVE9fREVHfSxkLnByb3RvdHlwZS5yYWRpYW5zPWZ1bmN0aW9uKGEpe3JldHVybiBhKmUuREVHX1RPX1JBRH0sZC5wcm90b3R5cGUuYW5nbGVNb2RlPWZ1bmN0aW9uKGEpe2EhPT1lLkRFR1JFRVMmJmEhPT1lLlJBRElBTlN8fCh0aGlzLl9hbmdsZU1vZGU9YSl9LGQucHJvdG90eXBlLl90b1JhZGlhbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2FuZ2xlTW9kZT09PWUuREVHUkVFUz9hKmUuREVHX1RPX1JBRDphfSxkLnByb3RvdHlwZS5fdG9EZWdyZWVzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hbmdsZU1vZGU9PT1lLlJBRElBTlM/YSplLlJBRF9UT19ERUc6YX0sZC5wcm90b3R5cGUuX2Zyb21SYWRpYW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hbmdsZU1vZGU9PT1lLkRFR1JFRVM/YSplLlJBRF9UT19ERUc6YX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDU3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS50ZXh0QWxpZ249ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dEFsaWduXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0QWxpZ24uYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dExlYWRpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRMZWFkaW5nXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0TGVhZGluZy5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0U2l6ZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dFNpemVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRTaXplLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRTdHlsZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dFN0eWxlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci50ZXh0U3R5bGUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dFdpZHRoPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0V2lkdGhcIixhcmd1bWVudHMpLDA9PT1hLmxlbmd0aD8wOnRoaXMuX3JlbmRlcmVyLnRleHRXaWR0aC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0QXNjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRBc2NlbnRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRBc2NlbnQoKX0sZC5wcm90b3R5cGUudGV4dERlc2NlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dERlc2NlbnRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHREZXNjZW50KCl9LGQucHJvdG90eXBlLl91cGRhdGVUZXh0TWV0cmljcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fdXBkYXRlVGV4dE1ldHJpY3MoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpLGY9YShcIm9wZW50eXBlLmpzXCIpO2EoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUubG9hZEZvbnQ9ZnVuY3Rpb24oYSxiLGMpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRGb250XCIsYXJndW1lbnRzKTt2YXIgZT1uZXcgZC5Gb250KHRoaXMpLGc9dGhpcztyZXR1cm4gZi5sb2FkKGEsZnVuY3Rpb24oZixoKXtpZihmKXJldHVybiB2b2lkIDAhPT1jP2MoZik6KGQuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig0LGEpLHZvaWQgY29uc29sZS5lcnJvcihmLGEpKTtlLmZvbnQ9aCx2b2lkIDAhPT1iJiZiKGUpLGcuX2RlY3JlbWVudFByZWxvYWQoKTt2YXIgaSxqLGs9W1widHRmXCIsXCJvdGZcIixcIndvZmZcIixcIndvZmYyXCJdLGw9YS5zcGxpdChcIlxcXFxcIikucG9wKCkuc3BsaXQoXCIvXCIpLnBvcCgpLG09bC5sYXN0SW5kZXhPZihcIi5cIiksbj1tPDE/bnVsbDpsLnN1YnN0cihtKzEpO2suaW5kZXhPZihuKT4tMSYmKGk9bC5zdWJzdHIoMCxtKSxqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSxqLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXFxuQGZvbnQtZmFjZSB7XFxuZm9udC1mYW1pbHk6IFwiK2krXCI7XFxuc3JjOiB1cmwoXCIrYStcIik7XFxufVxcblwiKSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChqKSl9KSxlfSxkLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGEsYixjLGUsZil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGx8fHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZT90aGlzLl9yZW5kZXJlci50ZXh0LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk6dGhpc30sZC5wcm90b3R5cGUudGV4dEZvbnQ9ZnVuY3Rpb24oYSxiKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0Rm9udFwiLGFyZ3VtZW50cyksYXJndW1lbnRzLmxlbmd0aCl7aWYoIWEpdGhyb3cgbmV3IEVycm9yKFwibnVsbCBmb250IHBhc3NlZCB0byB0ZXh0Rm9udFwiKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX3RleHRGb250XCIsYSksYiYmKHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl90ZXh0U2l6ZVwiLGIpLHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl90ZXh0TGVhZGluZ1wiLGIqZS5fREVGQVVMVF9MRUFETVVMVCkpLHRoaXMuX3JlbmRlcmVyLl9hcHBseVRleHRQcm9wZXJ0aWVzKCl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl90ZXh0Rm9udH0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0LFwib3BlbnR5cGUuanNcIjoxMH1dLDU5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgYz1oKGIse3NhbXBsZUZhY3RvcjouMSxzaW1wbGlmeVRocmVzaG9sZDowfSksZD1uKGEsMCwxKSxmPWQvKGQqYy5zYW1wbGVGYWN0b3IpLGc9W10saT0wO2k8ZDtpKz1mKWcucHVzaChuKGEsaSkpO3JldHVybiBjLnNpbXBsaWZ5VGhyZXNob2xkJiZlKGcsYy5zaW1wbGlmeVRocmVzaG9sZCksZ31mdW5jdGlvbiBlKGEsYil7Yj12b2lkIDA9PT1iPzA6Yjtmb3IodmFyIGM9MCxkPWEubGVuZ3RoLTE7YS5sZW5ndGg+MyYmZD49MDstLWQpaihpKGEsZC0xKSxpKGEsZCksaShhLGQrMSksYikmJihhLnNwbGljZShkJWEubGVuZ3RoLDEpLGMrKyk7cmV0dXJuIGN9ZnVuY3Rpb24gZihhKXtmb3IodmFyIGIsYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKyspXCJNXCI9PT1hW2RdLnR5cGUmJihiJiZjLnB1c2goYiksYj1bXSksYi5wdXNoKGcoYVtkXSkpO3JldHVybiBjLnB1c2goYiksY31mdW5jdGlvbiBnKGEpe3ZhciBiPVthLnR5cGVdO3JldHVyblwiTVwiPT09YS50eXBlfHxcIkxcIj09PWEudHlwZT9iLnB1c2goYS54LGEueSk6XCJDXCI9PT1hLnR5cGU/Yi5wdXNoKGEueDEsYS55MSxhLngyLGEueTIsYS54LGEueSk6XCJRXCI9PT1hLnR5cGUmJmIucHVzaChhLngxLGEueTEsYS54LGEueSksYn1mdW5jdGlvbiBoKGEsYil7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGEpYT1iO2Vsc2UgZm9yKHZhciBjIGluIGIpdm9pZCAwPT09YVtjXSYmKGFbY109YltjXSk7cmV0dXJuIGF9ZnVuY3Rpb24gaShhLGIpe3ZhciBjPWEubGVuZ3RoO3JldHVybiBhW2I8MD9iJWMrYzpiJWNdfWZ1bmN0aW9uIGooYSxiLGMsZCl7aWYoIWQpcmV0dXJuIDA9PT1rKGEsYixjKTt2b2lkIDA9PT1qLnRtcFBvaW50MSYmKGoudG1wUG9pbnQxPVtdLGoudG1wUG9pbnQyPVtdKTt2YXIgZT1qLnRtcFBvaW50MSxmPWoudG1wUG9pbnQyO2UueD1iLngtYS54LGUueT1iLnktYS55LGYueD1jLngtYi54LGYueT1jLnktYi55O3ZhciBnPWUueCpmLngrZS55KmYueSxoPU1hdGguc3FydChlLngqZS54K2UueSplLnkpLGk9TWF0aC5zcXJ0KGYueCpmLngrZi55KmYueSk7cmV0dXJuIE1hdGguYWNvcyhnLyhoKmkpKTxkfWZ1bmN0aW9uIGsoYSxiLGMpe3JldHVybihiWzBdLWFbMF0pKihjWzFdLWFbMV0pLShjWzBdLWFbMF0pKihiWzFdLWFbMV0pfWZ1bmN0aW9uIGwoYSxiLGMsZCxlLGYsZyxoLGkpe3ZhciBqPTEtaSxrPU1hdGgucG93KGosMyksbD1NYXRoLnBvdyhqLDIpLG09aSppLG49bSppLG89ayphKzMqbCppKmMrMypqKmkqaSplK24qZyxwPWsqYiszKmwqaSpkKzMqaippKmkqZituKmgscT1hKzIqaSooYy1hKSttKihlLTIqYythKSxyPWIrMippKihkLWIpK20qKGYtMipkK2IpLHM9YysyKmkqKGUtYykrbSooZy0yKmUrYyksdD1kKzIqaSooZi1kKSttKihoLTIqZitkKSx1PWoqYStpKmMsdj1qKmIraSpkLHc9aiplK2kqZyx4PWoqZitpKmgseT05MC0xODAqTWF0aC5hdGFuMihxLXMsci10KS9NYXRoLlBJO3JldHVybihxPnN8fHI8dCkmJih5Kz0xODApLHt4Om8seTpwLG06e3g6cSx5OnJ9LG46e3g6cyx5OnR9LHN0YXJ0Ont4OnUseTp2fSxlbmQ6e3g6dyx5Onh9LGFscGhhOnl9fWZ1bmN0aW9uIG0oYSxiLGMsZCxlLGYsZyxoLGkpe3JldHVybiBudWxsPT1pP3UoYSxiLGMsZCxlLGYsZyxoKTpsKGEsYixjLGQsZSxmLGcsaCx2KGEsYixjLGQsZSxmLGcsaCxpKSl9ZnVuY3Rpb24gbihhLGIsYyl7YT1wKGEpO2Zvcih2YXIgZCxlLGYsZyxoLGk9XCJcIixqPXt9LGs9MCxuPTAsbz1hLmxlbmd0aDtuPG87bisrKXtpZihmPWFbbl0sXCJNXCI9PT1mWzBdKWQ9K2ZbMV0sZT0rZlsyXTtlbHNle2lmKGc9bShkLGUsZlsxXSxmWzJdLGZbM10sZls0XSxmWzVdLGZbNl0pLGsrZz5iJiYhYylyZXR1cm4gaD1tKGQsZSxmWzFdLGZbMl0sZlszXSxmWzRdLGZbNV0sZls2XSxiLWspLHt4OmgueCx5OmgueSxhbHBoYTpoLmFscGhhfTtrKz1nLGQ9K2ZbNV0sZT0rZls2XX1pKz1mLnNoaWZ0KCkrZn1yZXR1cm4gai5lbmQ9aSxoPWM/azpsKGQsZSxmWzBdLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSwxKSxoLmFscGhhJiYoaD17eDpoLngseTpoLnksYWxwaGE6aC5hbHBoYX0pLGh9ZnVuY3Rpb24gbyhhKXt2YXIgYj1bXSxjPTAsZD0wLGU9MCxmPTAsZz0wO2lmKCFhKXJldHVybiBiO1wiTVwiPT09YVswXVswXSYmKGM9K2FbMF1bMV0sZD0rYVswXVsyXSxlPWMsZj1kLGcrKyxiWzBdPVtcIk1cIixjLGRdKTtmb3IodmFyIGgsaSxqLGs9Mz09PWEubGVuZ3RoJiZcIk1cIj09PWFbMF1bMF0mJlwiUlwiPT09YVsxXVswXS50b1VwcGVyQ2FzZSgpJiZcIlpcIj09PWFbMl1bMF0udG9VcHBlckNhc2UoKSxsPWcsbT1hLmxlbmd0aDtsPG07bCsrKXtpZihiLnB1c2goaT1bXSksaj1hW2xdLGpbMF0hPT1TdHJpbmcucHJvdG90eXBlLnRvVXBwZXJDYXNlLmNhbGwoalswXSkpc3dpdGNoKGlbMF09U3RyaW5nLnByb3RvdHlwZS50b1VwcGVyQ2FzZS5jYWxsKGpbMF0pLGlbMF0pe2Nhc2VcIkFcIjppWzFdPWpbMV0saVsyXT1qWzJdLGlbM109alszXSxpWzRdPWpbNF0saVs1XT1qWzVdLGlbNl09KyhqWzZdK2MpLGlbN109KyhqWzddK2QpO2JyZWFrO2Nhc2VcIlZcIjppWzFdPStqWzFdK2Q7YnJlYWs7Y2FzZVwiSFwiOmlbMV09K2pbMV0rYzticmVhaztjYXNlXCJSXCI6aD1bYyxkXS5jb25jYXQoai5zbGljZSgxKSk7Zm9yKHZhciBuPTIsbz1oLmxlbmd0aDtuPG87bisrKWhbbl09K2hbbl0rYyxoWysrbl09K2hbbl0rZDtiLnBvcCgpLGI9Yi5jb25jYXQocihoLGspKTticmVhaztjYXNlXCJNXCI6ZT0ralsxXStjLGY9K2pbMl0rZDticmVhaztkZWZhdWx0OmZvcihuPTEsbz1qLmxlbmd0aDtuPG87bisrKWlbbl09K2pbbl0rKG4lMj9jOmQpfWVsc2UgaWYoXCJSXCI9PT1qWzBdKWg9W2MsZF0uY29uY2F0KGouc2xpY2UoMSkpLGIucG9wKCksYj1iLmNvbmNhdChyKGgsaykpLGk9W1wiUlwiXS5jb25jYXQoai5zbGljZSgtMikpO2Vsc2UgZm9yKHZhciBwPTAscT1qLmxlbmd0aDtwPHE7cCsrKWlbcF09altwXTtzd2l0Y2goaVswXSl7Y2FzZVwiWlwiOmM9ZSxkPWY7YnJlYWs7Y2FzZVwiSFwiOmM9aVsxXTticmVhaztjYXNlXCJWXCI6ZD1pWzFdO2JyZWFrO2Nhc2VcIk1cIjplPWlbaS5sZW5ndGgtMl0sZj1pW2kubGVuZ3RoLTFdO2JyZWFrO2RlZmF1bHQ6Yz1pW2kubGVuZ3RoLTJdLGQ9aVtpLmxlbmd0aC0xXX19cmV0dXJuIGJ9ZnVuY3Rpb24gcChhLGIpe3ZhciBjLGQ9byhhKSxlPWImJm8oYiksZj17eDowLHk6MCxieDowLGJ5OjAsWDowLFk6MCxxeDpudWxsLHF5Om51bGx9LGc9e3g6MCx5OjAsYng6MCxieTowLFg6MCxZOjAscXg6bnVsbCxxeTpudWxsfSxoPVtdLGk9W10saj1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXtUOjEsUToxfTtpZighYSlyZXR1cm5bXCJDXCIsYi54LGIueSxiLngsYi55LGIueCxiLnldO3N3aXRjaChhWzBdaW4gZnx8KGIucXg9Yi5xeT1udWxsKSxhWzBdKXtjYXNlXCJNXCI6Yi5YPWFbMV0sYi5ZPWFbMl07YnJlYWs7Y2FzZVwiQVwiOmE9W1wiQ1wiXS5jb25jYXQocS5hcHBseSgwLFtiLngsYi55XS5jb25jYXQoYS5zbGljZSgxKSkpKTticmVhaztjYXNlXCJTXCI6XCJDXCI9PT1jfHxcIlNcIj09PWM/KGQ9MipiLngtYi5ieCxlPTIqYi55LWIuYnkpOihkPWIueCxlPWIueSksYT1bXCJDXCIsZCxlXS5jb25jYXQoYS5zbGljZSgxKSk7YnJlYWs7Y2FzZVwiVFwiOlwiUVwiPT09Y3x8XCJUXCI9PT1jPyhiLnF4PTIqYi54LWIucXgsYi5xeT0yKmIueS1iLnF5KTooYi5xeD1iLngsYi5xeT1iLnkpLGE9W1wiQ1wiXS5jb25jYXQodChiLngsYi55LGIucXgsYi5xeSxhWzFdLGFbMl0pKTticmVhaztjYXNlXCJRXCI6Yi5xeD1hWzFdLGIucXk9YVsyXSxhPVtcIkNcIl0uY29uY2F0KHQoYi54LGIueSxhWzFdLGFbMl0sYVszXSxhWzRdKSk7YnJlYWs7Y2FzZVwiTFwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGFbMV0sYVsyXSkpO2JyZWFrO2Nhc2VcIkhcIjphPVtcIkNcIl0uY29uY2F0KHMoYi54LGIueSxhWzFdLGIueSkpO2JyZWFrO2Nhc2VcIlZcIjphPVtcIkNcIl0uY29uY2F0KHMoYi54LGIueSxiLngsYVsxXSkpO2JyZWFrO2Nhc2VcIlpcIjphPVtcIkNcIl0uY29uY2F0KHMoYi54LGIueSxiLlgsYi5ZKSl9cmV0dXJuIGF9LGs9ZnVuY3Rpb24oYSxiKXtpZihhW2JdLmxlbmd0aD43KXthW2JdLnNoaWZ0KCk7Zm9yKHZhciBmPWFbYl07Zi5sZW5ndGg7KWhbYl09XCJBXCIsZSYmKGlbYl09XCJBXCIpLGEuc3BsaWNlKGIrKywwLFtcIkNcIl0uY29uY2F0KGYuc3BsaWNlKDAsNikpKTthLnNwbGljZShiLDEpLGM9TWF0aC5tYXgoZC5sZW5ndGgsZSYmZS5sZW5ndGh8fDApfX0sbD1mdW5jdGlvbihhLGIsZixnLGgpe2EmJmImJlwiTVwiPT09YVtoXVswXSYmXCJNXCIhPT1iW2hdWzBdJiYoYi5zcGxpY2UoaCwwLFtcIk1cIixnLngsZy55XSksZi5ieD0wLGYuYnk9MCxmLng9YVtoXVsxXSxmLnk9YVtoXVsyXSxjPU1hdGgubWF4KGQubGVuZ3RoLGUmJmUubGVuZ3RofHwwKSl9LG09XCJcIixuPVwiXCI7Yz1NYXRoLm1heChkLmxlbmd0aCxlJiZlLmxlbmd0aHx8MCk7Zm9yKHZhciBwPTA7cDxjO3ArKyl7ZFtwXSYmKG09ZFtwXVswXSksXCJDXCIhPT1tJiYoaFtwXT1tLHAmJihuPWhbcC0xXSkpLGRbcF09aihkW3BdLGYsbiksXCJBXCIhPT1oW3BdJiZcIkNcIj09PW0mJihoW3BdPVwiQ1wiKSxrKGQscCksZSYmKGVbcF0mJihtPWVbcF1bMF0pLFwiQ1wiIT09bSYmKGlbcF09bSxwJiYobj1pW3AtMV0pKSxlW3BdPWooZVtwXSxnLG4pLFwiQVwiIT09aVtwXSYmXCJDXCI9PT1tJiYoaVtwXT1cIkNcIiksayhlLHApKSxsKGQsZSxmLGcscCksbChlLGQsZyxmLHApO3ZhciByPWRbcF0sdT1lJiZlW3BdLHY9ci5sZW5ndGgsdz1lJiZ1Lmxlbmd0aDtmLng9clt2LTJdLGYueT1yW3YtMV0sZi5ieD1wYXJzZUZsb2F0KHJbdi00XSl8fGYueCxmLmJ5PXBhcnNlRmxvYXQoclt2LTNdKXx8Zi55LGcuYng9ZSYmKHBhcnNlRmxvYXQodVt3LTRdKXx8Zy54KSxnLmJ5PWUmJihwYXJzZUZsb2F0KHVbdy0zXSl8fGcueSksZy54PWUmJnVbdy0yXSxnLnk9ZSYmdVt3LTFdfXJldHVybiBlP1tkLGVdOmR9ZnVuY3Rpb24gcShhLGIsYyxkLGUsZixnLGgsaSxqKXt2YXIgayxsLG0sbixvLHA9TWF0aC5QSSxyPTEyMCpwLzE4MCxzPXAvMTgwKigrZXx8MCksdD1bXSx1PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm57eDphKk1hdGguY29zKGMpLWIqTWF0aC5zaW4oYykseTphKk1hdGguc2luKGMpK2IqTWF0aC5jb3MoYyl9fTtpZihqKWs9alswXSxsPWpbMV0sbT1qWzJdLG49alszXTtlbHNle289dShhLGIsLXMpLGE9by54LGI9by55LG89dShoLGksLXMpLGg9by54LGk9by55O3ZhciB2PShhLWgpLzIsdz0oYi1pKS8yLHg9dip2LyhjKmMpK3cqdy8oZCpkKTt4PjEmJih4PU1hdGguc3FydCh4KSxjKj14LGQqPXgpO3ZhciB5PWMqYyx6PWQqZCxBPShmPT09Zz8tMToxKSpNYXRoLnNxcnQoTWF0aC5hYnMoKHkqei15Kncqdy16KnYqdikvKHkqdyp3K3oqdip2KSkpO209QSpjKncvZCsoYStoKS8yLG49QSotZCp2L2MrKGIraSkvMixrPU1hdGguYXNpbigoKGItbikvZCkudG9GaXhlZCg5KSksbD1NYXRoLmFzaW4oKChpLW4pL2QpLnRvRml4ZWQoOSkpLGs9YTxtP3AtazprLGw9aDxtP3AtbDpsLGs8MCYmKGs9MipwK2spLGw8MCYmKGw9MipwK2wpLGcmJms+bCYmKGstPTIqcCksIWcmJmw+ayYmKGwtPTIqcCl9dmFyIEI9bC1rO2lmKE1hdGguYWJzKEIpPnIpe3ZhciBDPWwsRD1oLEU9aTtsPWsrciooZyYmbD5rPzE6LTEpLGg9bStjKk1hdGguY29zKGwpLGk9bitkKk1hdGguc2luKGwpLHQ9cShoLGksYyxkLGUsMCxnLEQsRSxbbCxDLG0sbl0pfUI9bC1rO3ZhciBGPU1hdGguY29zKGspLEc9TWF0aC5zaW4oayksSD1NYXRoLmNvcyhsKSxJPU1hdGguc2luKGwpLEo9TWF0aC50YW4oQi80KSxLPTQvMypjKkosTD00LzMqZCpKLE09W2EsYl0sTj1bYStLKkcsYi1MKkZdLE89W2grSypJLGktTCpIXSxQPVtoLGldO2lmKE5bMF09MipNWzBdLU5bMF0sTlsxXT0yKk1bMV0tTlsxXSxqKXJldHVybltOLE8sUF0uY29uY2F0KHQpO3Q9W04sTyxQXS5jb25jYXQodCkuam9pbigpLnNwbGl0KFwiLFwiKTtmb3IodmFyIFE9W10sUj0wLFM9dC5sZW5ndGg7UjxTO1IrKylRW1JdPVIlMj91KHRbUi0xXSx0W1JdLHMpLnk6dSh0W1JdLHRbUisxXSxzKS54O3JldHVybiBRfWZ1bmN0aW9uIHIoYSxiKXtmb3IodmFyIGM9W10sZD0wLGU9YS5sZW5ndGg7ZS0yKiFiPmQ7ZCs9Mil7dmFyIGY9W3t4OithW2QtMl0seTorYVtkLTFdfSx7eDorYVtkXSx5OithW2QrMV19LHt4OithW2QrMl0seTorYVtkKzNdfSx7eDorYVtkKzRdLHk6K2FbZCs1XX1dO2I/ZD9lLTQ9PT1kP2ZbM109e3g6K2FbMF0seTorYVsxXX06ZS0yPT09ZCYmKGZbMl09e3g6K2FbMF0seTorYVsxXX0sZlszXT17eDorYVsyXSx5OithWzNdfSk6ZlswXT17eDorYVtlLTJdLHk6K2FbZS0xXX06ZS00PT09ZD9mWzNdPWZbMl06ZHx8KGZbMF09e3g6K2FbZF0seTorYVtkKzFdfSksYy5wdXNoKFtcIkNcIiwoLWZbMF0ueCs2KmZbMV0ueCtmWzJdLngpLzYsKC1mWzBdLnkrNipmWzFdLnkrZlsyXS55KS82LChmWzFdLngrNipmWzJdLngtZlszXS54KS82LChmWzFdLnkrNipmWzJdLnktZlszXS55KS82LGZbMl0ueCxmWzJdLnldKX1yZXR1cm4gY31mdW5jdGlvbiBzKGEsYixjLGQpe3JldHVyblthLGIsYyxkLGMsZF19ZnVuY3Rpb24gdChhLGIsYyxkLGUsZil7dmFyIGc9MS8zLGg9Mi8zO3JldHVybltnKmEraCpjLGcqYitoKmQsZyplK2gqYyxnKmYraCpkLGUsZl19ZnVuY3Rpb24gdShhLGIsYyxkLGUsZixnLGgsaSl7bnVsbD09aSYmKGk9MSksaT1pPjE/MTppPDA/MDppO2Zvcih2YXIgaj1pLzIsaz0xMixsPVstLjEyNTIsLjEyNTIsLS4zNjc4LC4zNjc4LC0uNTg3MywuNTg3MywtLjc2OTksLjc2OTksLS45MDQxLC45MDQxLC0uOTgxNiwuOTgxNl0sbT0wLG49Wy4yNDkxLC4yNDkxLC4yMzM1LC4yMzM1LC4yMDMyLC4yMDMyLC4xNjAxLC4xNjAxLC4xMDY5LC4xMDY5LC4wNDcyLC4wNDcyXSxvPTA7bzxrO28rKyl7dmFyIHA9aipsW29dK2oscT13KHAsYSxjLGUsZykscj13KHAsYixkLGYsaCkscz1xKnErcipyO20rPW5bb10qTWF0aC5zcXJ0KHMpfXJldHVybiBqKm19ZnVuY3Rpb24gdihhLGIsYyxkLGUsZixnLGgsaSl7aWYoIShpPDB8fHUoYSxiLGMsZCxlLGYsZyxoKTxpKSl7dmFyIGosaz0xLGw9ay8yLG09ay1sLG49LjAxO2ZvcihqPXUoYSxiLGMsZCxlLGYsZyxoLG0pO01hdGguYWJzKGotaSk+bjspbC89MixtKz0oajxpPzE6LTEpKmwsaj11KGEsYixjLGQsZSxmLGcsaCxtKTtyZXR1cm4gbX19ZnVuY3Rpb24gdyhhLGIsYyxkLGUpe3JldHVybiBhKihhKigtMypiKzkqYy05KmQrMyplKSs2KmItMTIqYys2KmQpLTMqYiszKmN9ZnVuY3Rpb24geCgpe2Zvcih2YXIgYT1cIlwiLGI9YXJndW1lbnRzLmxlbmd0aC0xO2I+PTA7LS1iKXt2YXIgYz1hcmd1bWVudHNbYl07YSs9Yz09PU9iamVjdChjKT9KU09OLnN0cmluZ2lmeShjKTpjfXJldHVybiBhfXZhciB5PWEoXCIuLi9jb3JlL21haW5cIiksej1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7eS5Gb250PWZ1bmN0aW9uKGEpe3RoaXMucGFyZW50PWEsdGhpcy5jYWNoZT17fSx0aGlzLmZvbnQ9dm9pZCAwfSx5LkZvbnQucHJvdG90eXBlLmxpc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJub3QgeWV0IGltcGxlbWVudGVkXCIpfSx5LkZvbnQucHJvdG90eXBlLnRleHRCb3VuZHM9ZnVuY3Rpb24oYSxiLGMsZCxlKXtiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD1kfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIuX3RleHRTaXplO3ZhciBmPWUmJmUucmVuZGVyZXImJmUucmVuZGVyZXIuX3BJbnN0fHx0aGlzLnBhcmVudCxnPWYuX3JlbmRlcmVyLGg9Zy5fdGV4dEFsaWdufHx6LkxFRlQsaT1nLl90ZXh0QmFzZWxpbmV8fHouQkFTRUxJTkUsaj14KFwidGV4dEJvdW5kc1wiLGEsYixjLGQsaCxpKSxrPXRoaXMuY2FjaGVbal07aWYoIWspe3ZhciBsLG0sbixvLHAscT1bXSxyPVtdLHM9dGhpcy5fc2NhbGUoZCk7dGhpcy5mb250LmZvckVhY2hHbHlwaChhLGIsYyxkLGUsZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YS5nZXRNZXRyaWNzKCk7cS5wdXNoKGIrZS54TWluKnMpLHEucHVzaChiK2UueE1heCpzKSxyLnB1c2goYystZS55TWluKnMpLHIucHVzaChjKy1lLnlNYXgqcyl9KSxsPU1hdGgubWluLmFwcGx5KG51bGwscSksbT1NYXRoLm1pbi5hcHBseShudWxsLHIpLG49TWF0aC5tYXguYXBwbHkobnVsbCxxKSxvPU1hdGgubWF4LmFwcGx5KG51bGwsciksaz17eDpsLHk6bSxoOm8tbSx3Om4tbCxhZHZhbmNlOmwtYn0scD10aGlzLl9oYW5kbGVBbGlnbm1lbnQoZyxhLGsueCxrLnksay53K2suYWR2YW5jZSksay54PXAueCxrLnk9cC55LHRoaXMuY2FjaGVbeChcInRleHRCb3VuZHNcIixhLGIsYyxkLGgsaSldPWt9cmV0dXJuIGt9LHkuRm9udC5wcm90b3R5cGUudGV4dFRvUG9pbnRzPWZ1bmN0aW9uKGEsYixjLGUsZyl7ZnVuY3Rpb24gaChiKXtyZXR1cm4ga1tiXS5uYW1lJiZcInNwYWNlXCI9PT1rW2JdLm5hbWV8fGEubGVuZ3RoPT09ay5sZW5ndGgmJlwiIFwiPT09YVtiXXx8a1tiXS5pbmRleCYmMz09PWtbYl0uaW5kZXh9dmFyIGk9MCxqPVtdLGs9dGhpcy5fZ2V0R2x5cGhzKGEpO2U9ZXx8dGhpcy5wYXJlbnQuX3JlbmRlcmVyLl90ZXh0U2l6ZTtmb3IodmFyIGw9MDtsPGsubGVuZ3RoO2wrKyl7aWYoIWgobCkpZm9yKHZhciBtPWtbbF0uZ2V0UGF0aChiLGMsZSksbj1mKG0uY29tbWFuZHMpLG89MDtvPG4ubGVuZ3RoO28rKylmb3IodmFyIHA9ZChuW29dLGcpLHE9MDtxPHAubGVuZ3RoO3ErKylwW3FdLngrPWksai5wdXNoKHBbcV0pO2krPWtbbF0uYWR2YW5jZVdpZHRoKnRoaXMuX3NjYWxlKGUpfXJldHVybiBqfSx5LkZvbnQucHJvdG90eXBlLl9nZXRHbHlwaHM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZm9udC5zdHJpbmdUb0dseXBocyhhKX0seS5Gb250LnByb3RvdHlwZS5fZ2V0UGF0aD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kJiZkLnJlbmRlcmVyJiZkLnJlbmRlcmVyLl9wSW5zdHx8dGhpcy5wYXJlbnQsZj1lLl9yZW5kZXJlcixnPXRoaXMuX2hhbmRsZUFsaWdubWVudChmLGEsYixjKTtyZXR1cm4gdGhpcy5mb250LmdldFBhdGgoYSxnLngsZy55LGYuX3RleHRTaXplLGQpfSx5LkZvbnQucHJvdG90eXBlLl9nZXRQYXRoRGF0YT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0zO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhJiZhcmd1bWVudHMubGVuZ3RoPjI/YT10aGlzLl9nZXRQYXRoKGEsYixjLGQpOlwib2JqZWN0XCI9PXR5cGVvZiBiJiYoZD1iKSxkJiZcIm51bWJlclwiPT10eXBlb2YgZC5kZWNpbWFscyYmKGU9ZC5kZWNpbWFscyksYS50b1BhdGhEYXRhKGUpfSx5LkZvbnQucHJvdG90eXBlLl9nZXRTVkc9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9MztyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYSYmYXJndW1lbnRzLmxlbmd0aD4yP2E9dGhpcy5fZ2V0UGF0aChhLGIsYyxkKTpcIm9iamVjdFwiPT10eXBlb2YgYiYmKGQ9YiksZCYmKFwibnVtYmVyXCI9PXR5cGVvZiBkLmRlY2ltYWxzJiYoZT1kLmRlY2ltYWxzKSxcIm51bWJlclwiPT10eXBlb2YgZC5zdHJva2VXaWR0aCYmKGEuc3Ryb2tlV2lkdGg9ZC5zdHJva2VXaWR0aCksdm9pZCAwIT09ZC5maWxsJiYoYS5maWxsPWQuZmlsbCksdm9pZCAwIT09ZC5zdHJva2UmJihhLnN0cm9rZT1kLnN0cm9rZSkpLGEudG9TVkcoZSl9LHkuRm9udC5wcm90b3R5cGUuX3JlbmRlclBhdGg9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZj1kJiZkLnJlbmRlcmVyfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIsZz1mLmRyYXdpbmdDb250ZXh0O2U9XCJvYmplY3RcIj09dHlwZW9mIGEmJmEuY29tbWFuZHM/YS5jb21tYW5kczp0aGlzLl9nZXRQYXRoKGEsYixjLGQpLmNvbW1hbmRzLGcuYmVnaW5QYXRoKCk7Zm9yKHZhciBoPTA7aDxlLmxlbmd0aDtoKz0xKXt2YXIgaT1lW2hdO1wiTVwiPT09aS50eXBlP2cubW92ZVRvKGkueCxpLnkpOlwiTFwiPT09aS50eXBlP2cubGluZVRvKGkueCxpLnkpOlwiQ1wiPT09aS50eXBlP2cuYmV6aWVyQ3VydmVUbyhpLngxLGkueTEsaS54MixpLnkyLGkueCxpLnkpOlwiUVwiPT09aS50eXBlP2cucXVhZHJhdGljQ3VydmVUbyhpLngxLGkueTEsaS54LGkueSk6XCJaXCI9PT1pLnR5cGUmJmcuY2xvc2VQYXRoKCl9cmV0dXJuIGYuX2RvU3Ryb2tlJiZmLl9zdHJva2VTZXQmJmcuc3Ryb2tlKCksZi5fZG9GaWxsJiYoZi5fZmlsbFNldHx8Zi5fc2V0RmlsbCh6Ll9ERUZBVUxUX1RFWFRfRklMTCksZy5maWxsKCkpLHRoaXN9LHkuRm9udC5wcm90b3R5cGUuX3RleHRXaWR0aD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmZvbnQuZ2V0QWR2YW5jZVdpZHRoKGEsYil9LHkuRm9udC5wcm90b3R5cGUuX3RleHRBc2NlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZm9udC5hc2NlbmRlcip0aGlzLl9zY2FsZShhKX0seS5Gb250LnByb3RvdHlwZS5fdGV4dERlc2NlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuLXRoaXMuZm9udC5kZXNjZW5kZXIqdGhpcy5fc2NhbGUoYSl9LHkuRm9udC5wcm90b3R5cGUuX3NjYWxlPWZ1bmN0aW9uKGEpe3JldHVybiAxL3RoaXMuZm9udC51bml0c1BlckVtKihhfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIuX3RleHRTaXplKX0seS5Gb250LnByb3RvdHlwZS5faGFuZGxlQWxpZ25tZW50PWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9YS5fdGV4dFNpemU7c3dpdGNoKHZvaWQgMD09PWUmJihlPXRoaXMuX3RleHRXaWR0aChiLGYpKSxhLl90ZXh0QWxpZ24pe2Nhc2Ugei5DRU5URVI6Yy09ZS8yO2JyZWFrO2Nhc2Ugei5SSUdIVDpjLT1lfXN3aXRjaChhLl90ZXh0QmFzZWxpbmUpe2Nhc2Ugei5UT1A6ZCs9dGhpcy5fdGV4dEFzY2VudChmKTticmVhaztjYXNlIHouQ0VOVEVSOmQrPXRoaXMuX3RleHRBc2NlbnQoZikvMjticmVhaztjYXNlIHouQk9UVE9NOmQtPXRoaXMuX3RleHREZXNjZW50KGYpfXJldHVybnt4OmMseTpkfX0sYi5leHBvcnRzPXl9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDYwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5wdXNoKGIpLGF9LGQucHJvdG90eXBlLmFycmF5Q29weT1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7dm9pZCAwIT09ZT8oZz1NYXRoLm1pbihlLGEubGVuZ3RoKSxmPWQsYT1hLnNsaWNlKGIsZytiKSk6KHZvaWQgMCE9PWM/KGc9YyxnPU1hdGgubWluKGcsYS5sZW5ndGgpKTpnPWEubGVuZ3RoLGY9MCxjPWIsYT1hLnNsaWNlKDAsZykpLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoYyxbZixnXS5jb25jYXQoYSkpfSxkLnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5jb25jYXQoYil9LGQucHJvdG90eXBlLnJldmVyc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmV2ZXJzZSgpfSxkLnByb3RvdHlwZS5zaG9ydGVuPWZ1bmN0aW9uKGEpe3JldHVybiBhLnBvcCgpLGF9LGQucHJvdG90eXBlLnNodWZmbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1BcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3JiZBcnJheUJ1ZmZlci5pc1ZpZXcoYSk7YT1ifHxjP2E6YS5zbGljZSgpO2Zvcih2YXIgZCxlLGY9YS5sZW5ndGg7Zj4xOylkPU1hdGgucmFuZG9tKCkqZnwwLGU9YVstLWZdLGFbZl09YVtkXSxhW2RdPWU7cmV0dXJuIGF9LGQucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iP2Euc2xpY2UoMCxNYXRoLm1pbihiLGEubGVuZ3RoKSk6YSxkPWI/YS5zbGljZShNYXRoLm1pbihiLGEubGVuZ3RoKSk6W107cmV0dXJuIGM9XCJzdHJpbmdcIj09dHlwZW9mIGNbMF0/Yy5zb3J0KCk6Yy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEtYn0pLGMuY29uY2F0KGQpfSxkLnByb3RvdHlwZS5zcGxpY2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGEsW2MsMF0uY29uY2F0KGIpKSxhfSxkLnByb3RvdHlwZS5zdWJzZXQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB2b2lkIDAhPT1jP2Euc2xpY2UoYixiK2MpOmEuc2xpY2UoYixhLmxlbmd0aCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDYxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5mbG9hdD1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKHBhcnNlRmxvYXQpOnBhcnNlRmxvYXQoYSl9LGQucHJvdG90eXBlLmludD1mdW5jdGlvbihhLGIpe3JldHVybiBiPWJ8fDEwLFwic3RyaW5nXCI9PXR5cGVvZiBhP3BhcnNlSW50KGEsYik6XCJudW1iZXJcIj09dHlwZW9mIGE/MHxhOlwiYm9vbGVhblwiPT10eXBlb2YgYT9hPzE6MDphIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGQucHJvdG90eXBlLmludChhLGIpfSk6dm9pZCAwfSxkLnByb3RvdHlwZS5zdHI9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChkLnByb3RvdHlwZS5zdHIpOlN0cmluZyhhKX0sZC5wcm90b3R5cGUuYm9vbGVhbj1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYT8wIT09YTpcInN0cmluZ1wiPT10eXBlb2YgYT9cInRydWVcIj09PWEudG9Mb3dlckNhc2UoKTpcImJvb2xlYW5cIj09dHlwZW9mIGE/YTphIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUuYm9vbGVhbik6dm9pZCAwfSxkLnByb3RvdHlwZS5ieXRlPWZ1bmN0aW9uKGEpe3ZhciBiPWQucHJvdG90eXBlLmludChhLDEwKTtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYj8oYisxMjgpJTI1Ni0xMjg6YiBpbnN0YW5jZW9mIEFycmF5P2IubWFwKGQucHJvdG90eXBlLmJ5dGUpOnZvaWQgMH0sZC5wcm90b3R5cGUuY2hhcj1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgYXx8aXNOYU4oYSk/YSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLmNoYXIpOlwic3RyaW5nXCI9PXR5cGVvZiBhP2QucHJvdG90eXBlLmNoYXIocGFyc2VJbnQoYSwxMCkpOnZvaWQgMDpTdHJpbmcuZnJvbUNoYXJDb2RlKGEpfSxkLnByb3RvdHlwZS51bmNoYXI9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGEmJjE9PT1hLmxlbmd0aD9hLmNoYXJDb2RlQXQoMCk6YSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLnVuY2hhcik6dm9pZCAwfSxkLnByb3RvdHlwZS5oZXg9ZnVuY3Rpb24oYSxiKXtpZihiPXZvaWQgMD09PWJ8fG51bGw9PT1iP2I9ODpiLGEgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGQucHJvdG90eXBlLmhleChhLGIpfSk7aWYoXCJudW1iZXJcIj09dHlwZW9mIGEpe2E8MCYmKGE9NDI5NDk2NzI5NSthKzEpO2Zvcih2YXIgYz1OdW1iZXIoYSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7Yy5sZW5ndGg8YjspYz1cIjBcIitjO3JldHVybiBjLmxlbmd0aD49YiYmKGM9Yy5zdWJzdHJpbmcoYy5sZW5ndGgtYixjLmxlbmd0aCkpLGN9fSxkLnByb3RvdHlwZS51bmhleD1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLnVuaGV4KTpwYXJzZUludChcIjB4XCIrYSwxNil9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDYyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyl7dmFyIGQ9YTwwLGU9ZD9hLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDEpOmEudG9TdHJpbmcoKSxmPWUuaW5kZXhPZihcIi5cIiksZz0tMSE9PWY/ZS5zdWJzdHJpbmcoMCxmKTplLGg9LTEhPT1mP2Uuc3Vic3RyaW5nKGYrMSk6XCJcIixpPWQ/XCItXCI6XCJcIjtpZih2b2lkIDAhPT1jKXt2YXIgaj1cIlwiOygtMSE9PWZ8fGMtaC5sZW5ndGg+MCkmJihqPVwiLlwiKSxoLmxlbmd0aD5jJiYoaD1oLnN1YnN0cmluZygwLGMpKTtmb3IodmFyIGs9MDtrPGItZy5sZW5ndGg7aysrKWkrPVwiMFwiO2krPWcsaSs9aixpKz1oO2Zvcih2YXIgbD0wO2w8Yy1oLmxlbmd0aDtsKyspaSs9XCIwXCI7cmV0dXJuIGl9Zm9yKHZhciBtPTA7bTxNYXRoLm1heChiLWcubGVuZ3RoLDApO20rKylpKz1cIjBcIjtyZXR1cm4gaSs9ZX1mdW5jdGlvbiBlKGEsYil7YT1hLnRvU3RyaW5nKCk7dmFyIGM9YS5pbmRleE9mKFwiLlwiKSxkPS0xIT09Yz9hLnN1YnN0cmluZyhjKTpcIlwiLGU9LTEhPT1jP2Euc3Vic3RyaW5nKDAsYyk6YTtpZihlPWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLFwiLFwiKSwwPT09YilkPVwiXCI7ZWxzZSBpZih2b2lkIDAhPT1iKWlmKGI+ZC5sZW5ndGgpe2QrPS0xPT09Yz9cIi5cIjpcIlwiO2Zvcih2YXIgZj1iLWQubGVuZ3RoKzEsZz0wO2c8ZjtnKyspZCs9XCIwXCJ9ZWxzZSBkPWQuc3Vic3RyaW5nKDAsYisxKTtyZXR1cm4gZStkfWZ1bmN0aW9uIGYoYSl7cmV0dXJuIHBhcnNlRmxvYXQoYSk+MD9cIitcIithLnRvU3RyaW5nKCk6YS50b1N0cmluZygpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIHBhcnNlRmxvYXQoYSk+MD9cIiBcIithLnRvU3RyaW5nKCk6YS50b1N0cmluZygpfXZhciBoPWEoXCIuLi9jb3JlL21haW5cIik7YShcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxoLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcImpvaW5cIixhcmd1bWVudHMpLGEuam9pbihiKX0saC5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWF0Y2hcIixhcmd1bWVudHMpLGEubWF0Y2goYil9LGgucHJvdG90eXBlLm1hdGNoQWxsPWZ1bmN0aW9uKGEsYil7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWF0Y2hBbGxcIixhcmd1bWVudHMpO2Zvcih2YXIgYz1uZXcgUmVnRXhwKGIsXCJnXCIpLGQ9Yy5leGVjKGEpLGU9W107bnVsbCE9PWQ7KWUucHVzaChkKSxkPWMuZXhlYyhhKTtyZXR1cm4gZX0saC5wcm90b3R5cGUubmY9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJuZlwiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBkKGEsYixjKX0pOlwiW29iamVjdCBBcmd1bWVudHNdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk/Mz09PWEubGVuZ3RoP3RoaXMubmYoYVswXSxhWzFdLGFbMl0pOjI9PT1hLmxlbmd0aD90aGlzLm5mKGFbMF0sYVsxXSk6dGhpcy5uZihhWzBdKTpkKGEsYixjKX0saC5wcm90b3R5cGUubmZjPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5mY1wiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBlKGEsYil9KTplKGEsYil9LGgucHJvdG90eXBlLm5mcD1mdW5jdGlvbigpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5mcFwiLGFyZ3VtZW50cyk7dmFyIGE9aC5wcm90b3R5cGUubmYuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZik6ZihhKX0saC5wcm90b3R5cGUubmZzPWZ1bmN0aW9uKCl7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibmZzXCIsYXJndW1lbnRzKTt2YXIgYT1oLnByb3RvdHlwZS5uZi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChnKTpnKGEpfSxoLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihhLGIpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzcGxpdFwiLGFyZ3VtZW50cyksYS5zcGxpdChiKX0saC5wcm90b3R5cGUuc3BsaXRUb2tlbnM9ZnVuY3Rpb24oYSxiKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzcGxpdFRva2Vuc1wiLGFyZ3VtZW50cyk7dmFyIGM7aWYodm9pZCAwIT09Yil7dmFyIGQ9YixlPS9cXF0vZy5leGVjKGQpLGY9L1xcWy9nLmV4ZWMoZCk7ZiYmZT8oZD1kLnNsaWNlKDAsZS5pbmRleCkrZC5zbGljZShlLmluZGV4KzEpLGY9L1xcWy9nLmV4ZWMoZCksZD1kLnNsaWNlKDAsZi5pbmRleCkrZC5zbGljZShmLmluZGV4KzEpLGM9bmV3IFJlZ0V4cChcIltcXFxcW1wiK2QrXCJcXFxcXV1cIixcImdcIikpOmU/KGQ9ZC5zbGljZSgwLGUuaW5kZXgpK2Quc2xpY2UoZS5pbmRleCsxKSxjPW5ldyBSZWdFeHAoXCJbXCIrZCtcIlxcXFxdXVwiLFwiZ1wiKSk6Zj8oZD1kLnNsaWNlKDAsZi5pbmRleCkrZC5zbGljZShmLmluZGV4KzEpLGM9bmV3IFJlZ0V4cChcIltcIitkK1wiXFxcXFtdXCIsXCJnXCIpKTpjPW5ldyBSZWdFeHAoXCJbXCIrZCtcIl1cIixcImdcIil9ZWxzZSBjPS9cXHMvZztyZXR1cm4gYS5zcGxpdChjKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGF9KX0saC5wcm90b3R5cGUudHJpbT1mdW5jdGlvbihhKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidHJpbVwiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKHRoaXMudHJpbSk6YS50cmltKCl9LGIuZXhwb3J0cz1ofSx7XCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIjoyMCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmRheT1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0RGF0ZSgpfSxkLnByb3RvdHlwZS5ob3VyPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRIb3VycygpfSxkLnByb3RvdHlwZS5taW51dGU9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldE1pbnV0ZXMoKX0sZC5wcm90b3R5cGUubWlsbGlzPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKX0sZC5wcm90b3R5cGUubW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldE1vbnRoKCkrMX0sZC5wcm90b3R5cGUuc2Vjb25kPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRTZWNvbmRzKCl9LGQucHJvdG90eXBlLnllYXI9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldEZ1bGxZZWFyKCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDY0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTthKFwiLi9wNS5HZW9tZXRyeVwiKTt2YXIgZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJwbGFuZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwbGFuZVwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPTEpLHZvaWQgMD09PWUmJihlPTEpO3ZhciBmPVwicGxhbmV8XCIrYytcInxcIitlO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChmKSl7dmFyIGc9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYixjLGU9MDtlPD10aGlzLmRldGFpbFk7ZSsrKXtiPWUvdGhpcy5kZXRhaWxZO2Zvcih2YXIgZj0wO2Y8PXRoaXMuZGV0YWlsWDtmKyspYT1mL3RoaXMuZGV0YWlsWCxjPW5ldyBkLlZlY3RvcihhLS41LGItLjUsMCksdGhpcy52ZXJ0aWNlcy5wdXNoKGMpLHRoaXMudXZzLnB1c2goYSxiKX19LGg9bmV3IGQuR2VvbWV0cnkoYyxlLGcpO2guY29tcHV0ZUZhY2VzKCkuY29tcHV0ZU5vcm1hbHMoKSxjPD0xJiZlPD0xP2guX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlIG9uIHBsYW5lIG9iamVjdHMgd2l0aCBtb3JlIHRoYW4gMSBkZXRhaWxYIG9yIDEgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGYsaCl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGYsYSxiLDEpLHRoaXN9LGQucHJvdG90eXBlLmJveD1mdW5jdGlvbihhLGIsYyxlLGYpe3RoaXMuX2Fzc2VydDNkKFwiYm94XCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJveFwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPWIpO3ZhciBnPXRoaXMuX3JlbmRlcmVyLmF0dHJpYnV0ZXMmJnRoaXMuX3JlbmRlcmVyLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZzt2b2lkIDA9PT1lJiYoZT1nPzE6NCksdm9pZCAwPT09ZiYmKGY9Zz8xOjQpO3ZhciBoPVwiYm94fFwiK2UrXCJ8XCIrZjtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goaCkpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIGE9W1swLDQsMiw2XSxbMSwzLDUsN10sWzAsMSw0LDVdLFsyLDYsMyw3XSxbMCwyLDEsM10sWzQsNSw2LDddXTt0aGlzLnN0cm9rZUluZGljZXM9W1swLDFdLFsxLDNdLFszLDJdLFs2LDddLFs4LDldLFs5LDExXSxbMTQsMTVdLFsxNiwxN10sWzE3LDE5XSxbMTgsMTldLFsyMCwyMV0sWzIyLDIzXV07Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspe2Zvcih2YXIgYz1hW2JdLGU9NCpiLGY9MDtmPDQ7ZisrKXt2YXIgZz1jW2ZdLGg9bmV3IGQuVmVjdG9yKCgyKigxJmcpLTEpLzIsKCgyJmcpLTEpLzIsKCg0JmcpLzItMSkvMik7dGhpcy52ZXJ0aWNlcy5wdXNoKGgpLHRoaXMudXZzLnB1c2goMSZmLCgyJmYpLzIpfXRoaXMuZmFjZXMucHVzaChbZSxlKzEsZSsyXSksdGhpcy5mYWNlcy5wdXNoKFtlKzIsZSsxLGUrM10pfX0saj1uZXcgZC5HZW9tZXRyeShlLGYsaSk7ai5jb21wdXRlTm9ybWFscygpLGU8PTQmJmY8PTQ/ai5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gYm94IG9iamVjdHMgd2l0aCBtb3JlIHRoYW4gNCBkZXRhaWxYIG9yIDQgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGgsail9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGgsYSxiLGMpLHRoaXN9LGQucHJvdG90eXBlLnNwaGVyZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwic3BoZXJlXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwaGVyZVwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPTI0KSx2b2lkIDA9PT1jJiYoYz0xNiksdGhpcy5lbGxpcHNvaWQoYSxhLGEsYixjKSx0aGlzfTt2YXIgZj1mdW5jdGlvbihhLGIsYyxlLGYsZyxoKXthPWE8PTA/MTphLGI9YjwwPzA6YixjPWM8PTA/YTpjLGU9ZTwzPzM6ZSxmPWY8MT8xOmYsZz12b2lkIDA9PT1nfHxnLGg9dm9pZCAwPT09aD8wIT09YjpoO3ZhciBpLGosayxsLG0sbj1nPy0yOjAsbz1mKyhoPzI6MCkscD17fSxxPU1hdGguYXRhbjIoYS1iLGMpO2ZvcihpPW47aTw9bzsrK2kpe3ZhciByLHM9aS9mLHQ9YypzO2ZvcihpPDA/KHQ9MCxzPTAscj1hKTppPmY/KHQ9YyxzPTEscj1iKTpyPWErKGItYSkqcywtMiE9PWkmJmkhPT1mKzJ8fChyPTApLHQtPWMvMixwW2ldPTA9PT1yPzE6ZSxqPTA7ajxwW2ldOysrail7dmFyIHU9ai9lO3RoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoTWF0aC5zaW4oMip1Kk1hdGguUEkpKnIsdCxNYXRoLmNvcygyKnUqTWF0aC5QSSkqcikpLHRoaXMudmVydGV4Tm9ybWFscy5wdXNoKG5ldyBkLlZlY3RvcihpPDB8fGk+Zj8wOk1hdGguc2luKDIqdSpNYXRoLlBJKSpNYXRoLmNvcyhxKSxpPDA/LTE6aT5mPzE6TWF0aC5zaW4ocSksaTwwfHxpPmY/MDpNYXRoLmNvcygyKnUqTWF0aC5QSSkqTWF0aC5jb3MocSkpKSx0aGlzLnV2cy5wdXNoKHUscyl9fXZhciB2PTA7aWYoZyl7Zm9yKGs9MDtrPHBbLTFdOysrayltPShrKzEpJXBbLTFdLHRoaXMuZmFjZXMucHVzaChbdix2KzErbSx2KzEra10pO3YrPXBbLTJdK3BbLTFdfWZvcihpPTA7aTxmOysraSl7Zm9yKGo9MDtqPHBbaV07KytqKTE9PT1wW2krMV0/KGw9KGorMSklcFtpXSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K2wsditwW2ldXSkpOihsPShqKzEpJXBbaV0sdGhpcy5mYWNlcy5wdXNoKFt2K2osditsLHYrcFtpXStsXSksdGhpcy5mYWNlcy5wdXNoKFt2K2osditwW2ldK2wsditwW2ldK2pdKSk7dis9cFtpXX1pZihoKWZvcih2Kz1wW2ZdLGo9MDtqPHBbZisxXTsrK2opbD0oaisxKSVwW2YrMV0sdGhpcy5mYWNlcy5wdXNoKFt2K2osditsLHYrcFtmKzFdXSl9O2QucHJvdG90eXBlLmN5bGluZGVyPWZ1bmN0aW9uKGEsYixjLGUsZyxoKXt0aGlzLl9hc3NlcnQzZChcImN5bGluZGVyXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN5bGluZGVyXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9MjQpLHZvaWQgMD09PWUmJihlPTEpLHZvaWQgMD09PWgmJihoPSEwKSxcbnZvaWQgMD09PWcmJihnPSEwKTt2YXIgaT1cImN5bGluZGVyfFwiK2MrXCJ8XCIrZStcInxcIitnK1wifFwiK2g7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGkpKXt2YXIgaj1uZXcgZC5HZW9tZXRyeShjLGUpO2YuY2FsbChqLDEsMSwxLGMsZSxnLGgpLGouY29tcHV0ZU5vcm1hbHMoKSxjPD0yNCYmZTw9MTY/ai5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gY3lsaW5kZXIgb2JqZWN0cyB3aXRoIG1vcmUgdGhhbiAyNCBkZXRhaWxYIG9yIDE2IGRldGFpbFlcIiksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhpLGopfXJldHVybiB0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVyc1NjYWxlZChpLGEsYixhKSx0aGlzfSxkLnByb3RvdHlwZS5jb25lPWZ1bmN0aW9uKGEsYixjLGUsZyl7dGhpcy5fYXNzZXJ0M2QoXCJjb25lXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvbmVcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj1hKSx2b2lkIDA9PT1jJiYoYz0yNCksdm9pZCAwPT09ZSYmKGU9MSksdm9pZCAwPT09ZyYmKGc9ITApO3ZhciBoPVwiY29uZXxcIitjK1wifFwiK2UrXCJ8XCIrZztpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goaCkpe3ZhciBpPW5ldyBkLkdlb21ldHJ5KGMsZSk7Zi5jYWxsKGksMSwwLDEsYyxlLGcsITEpLGkuY29tcHV0ZU5vcm1hbHMoKSxjPD0yNCYmZTw9MTY/aS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gY29uZSBvYmplY3RzIHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMTYgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGgsaSl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGgsYSxiLGEpLHRoaXN9LGQucHJvdG90eXBlLmVsbGlwc29pZD1mdW5jdGlvbihhLGIsYyxlLGYpe3RoaXMuX2Fzc2VydDNkKFwiZWxsaXBzb2lkXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImVsbGlwc29pZFwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPWEpLHZvaWQgMD09PWUmJihlPTI0KSx2b2lkIDA9PT1mJiYoZj0xNik7dmFyIGc9XCJlbGxpcHNvaWR8XCIrZStcInxcIitmO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChnKSl7dmFyIGg9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD10aGlzLmRldGFpbFk7YSsrKWZvcih2YXIgYj1hL3RoaXMuZGV0YWlsWSxjPU1hdGguUEkqYi1NYXRoLlBJLzIsZT1NYXRoLmNvcyhjKSxmPU1hdGguc2luKGMpLGc9MDtnPD10aGlzLmRldGFpbFg7ZysrKXt2YXIgaD1nL3RoaXMuZGV0YWlsWCxpPTIqTWF0aC5QSSpoLGo9TWF0aC5jb3MoaSksaz1NYXRoLnNpbihpKSxsPW5ldyBkLlZlY3RvcihlKmssZixlKmopO3RoaXMudmVydGljZXMucHVzaChsKSx0aGlzLnZlcnRleE5vcm1hbHMucHVzaChsKSx0aGlzLnV2cy5wdXNoKGgsYil9fSxpPW5ldyBkLkdlb21ldHJ5KGUsZixoKTtpLmNvbXB1dGVGYWNlcygpLGU8PTI0JiZmPD0yND9pLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBlbGxpcHNvaWRzIHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMjQgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGcsaSl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGcsYSxiLGMpLHRoaXN9LGQucHJvdG90eXBlLnRvcnVzPWZ1bmN0aW9uKGEsYixjLGUpe2lmKHRoaXMuX2Fzc2VydDNkKFwidG9ydXNcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidG9ydXNcIixhcmd1bWVudHMpLHZvaWQgMD09PWEpYT01MDtlbHNlIGlmKCFhKXJldHVybjtpZih2b2lkIDA9PT1iKWI9MTA7ZWxzZSBpZighYilyZXR1cm47dm9pZCAwPT09YyYmKGM9MjQpLHZvaWQgMD09PWUmJihlPTE2KTt2YXIgZj0oYi9hKS50b1ByZWNpc2lvbig0KSxnPVwidG9ydXN8XCIrZitcInxcIitjK1wifFwiK2U7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGcpKXt2YXIgaD1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspZm9yKHZhciBiPWEvdGhpcy5kZXRhaWxZLGM9MipNYXRoLlBJKmIsZT1NYXRoLmNvcyhjKSxnPU1hdGguc2luKGMpLGg9MStmKmUsaT0wO2k8PXRoaXMuZGV0YWlsWDtpKyspe3ZhciBqPWkvdGhpcy5kZXRhaWxYLGs9MipNYXRoLlBJKmosbD1NYXRoLmNvcyhrKSxtPU1hdGguc2luKGspLG49bmV3IGQuVmVjdG9yKGgqbCxoKm0sZipnKSxvPW5ldyBkLlZlY3RvcihlKmwsZSptLGcpO3RoaXMudmVydGljZXMucHVzaChuKSx0aGlzLnZlcnRleE5vcm1hbHMucHVzaChvKSx0aGlzLnV2cy5wdXNoKGosYil9fSxpPW5ldyBkLkdlb21ldHJ5KGMsZSxoKTtpLmNvbXB1dGVGYWNlcygpLGM8PTI0JiZlPD0xNj9pLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZXMgb24gdG9ydXMgb2JqZWN0IHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMTYgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGcsaSl9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGcsYSxhLGEpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3VzZVBvaW50U2hhZGVyKCksdGhpcy5jdXJQb2ludFNoYWRlci5iaW5kU2hhZGVyKCksdm9pZCAwPT09YyYmKGM9MCk7dmFyIGU9W107cmV0dXJuIGUucHVzaChuZXcgZC5WZWN0b3IoYSxiLGMpKSx0aGlzLl9kcmF3UG9pbnRzKGUsdGhpcy5fcG9pbnRWZXJ0ZXhCdWZmZXIpLHRoaXMuY3VyUG9pbnRTaGFkZXIudW5iaW5kU2hhZGVyKCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS50cmlhbmdsZT1mdW5jdGlvbihhKXt2YXIgYj1hWzBdLGM9YVsxXSxlPWFbMl0sZj1hWzNdLGc9YVs0XSxoPWFbNV0saT1cInRyaVwiO2lmKCF0aGlzLmdlb21ldHJ5SW5IYXNoKGkpKXt2YXIgaj1mdW5jdGlvbigpe3ZhciBhPVtdO2EucHVzaChuZXcgZC5WZWN0b3IoMCwwLDApKSxhLnB1c2gobmV3IGQuVmVjdG9yKDAsMSwwKSksYS5wdXNoKG5ldyBkLlZlY3RvcigxLDAsMCkpLHRoaXMuc3Ryb2tlSW5kaWNlcz1bWzAsMV0sWzEsMl0sWzIsMF1dLHRoaXMudmVydGljZXM9YSx0aGlzLmZhY2VzPVtbMCwxLDJdXSx0aGlzLnV2cz1bMCwwLDAsMSwxLDFdfSxrPW5ldyBkLkdlb21ldHJ5KDEsMSxqKTtrLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSxrLmNvbXB1dGVOb3JtYWxzKCksdGhpcy5jcmVhdGVCdWZmZXJzKGksayl9dmFyIGw9dGhpcy51TVZNYXRyaXguY29weSgpO3RyeXt2YXIgbT1uZXcgZC5NYXRyaXgoW2UtYixmLWMsMCwwLGctYixoLWMsMCwwLDAsMCwxLDAsYixjLDAsMV0pLm11bHQodGhpcy51TVZNYXRyaXgpO3RoaXMudU1WTWF0cml4PW0sdGhpcy5kcmF3QnVmZmVycyhpKX1maW5hbGx5e3RoaXMudU1WTWF0cml4PWx9cmV0dXJuIHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZWxsaXBzZT1mdW5jdGlvbihhKXt0aGlzLmFyYyhhWzBdLGFbMV0sYVsyXSxhWzNdLDAsZS5UV09fUEksZS5PUEVOLGFbNF0pfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmFyYz1mdW5jdGlvbihhKXt2YXIgYixjLGY9YXJndW1lbnRzWzBdLGc9YXJndW1lbnRzWzFdLGg9YXJndW1lbnRzWzJdLGk9YXJndW1lbnRzWzNdLGo9YXJndW1lbnRzWzRdLGs9YXJndW1lbnRzWzVdLGw9YXJndW1lbnRzWzZdLG09YXJndW1lbnRzWzddfHwyNTtpZihNYXRoLmFicyhrLWopPj1lLlRXT19QST8oYj1cImVsbGlwc2VcIixjPWIrXCJ8XCIrbStcInxcIik6KGI9XCJhcmNcIixjPWIrXCJ8XCIraitcInxcIitrK1wifFwiK2wrXCJ8XCIrbStcInxcIiksIXRoaXMuZ2VvbWV0cnlJbkhhc2goYykpe3ZhciBuPWZ1bmN0aW9uKCl7aWYodGhpcy5zdHJva2VJbmRpY2VzPVtdLGoudG9GaXhlZCgxMCkhPT1rLnRvRml4ZWQoMTApKXtsIT09ZS5QSUUmJnZvaWQgMCE9PWx8fCh0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKC41LC41LDApKSx0aGlzLnV2cy5wdXNoKFsuNSwuNV0pKTtmb3IodmFyIGE9MDthPD1tO2ErKyl7dmFyIGI9YS9tLGM9KGstaikqYitqLGY9LjUrTWF0aC5jb3MoYykvMixnPS41K01hdGguc2luKGMpLzI7dGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihmLGcsMCkpLHRoaXMudXZzLnB1c2goW2YsZ10pLGE8bS0xJiYodGhpcy5mYWNlcy5wdXNoKFswLGErMSxhKzJdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbYSsxLGErMl0pKX1zd2l0Y2gobCl7Y2FzZSBlLlBJRTp0aGlzLmZhY2VzLnB1c2goWzAsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMix0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFt0aGlzLnZlcnRpY2VzLmxlbmd0aC0yLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCx0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSk7YnJlYWs7Y2FzZSBlLkNIT1JEOnRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLDFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCx0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSk7YnJlYWs7Y2FzZSBlLk9QRU46dGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsMV0pO2JyZWFrO2RlZmF1bHQ6dGhpcy5mYWNlcy5wdXNoKFswLHRoaXMudmVydGljZXMubGVuZ3RoLTIsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFt0aGlzLnZlcnRpY2VzLmxlbmd0aC0yLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKX19fSxvPW5ldyBkLkdlb21ldHJ5KG0sMSxuKTtvLmNvbXB1dGVOb3JtYWxzKCksbTw9NTA/by5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKG8pOmNvbnNvbGUubG9nKFwiQ2Fubm90IHN0cm9rZSBcIitiK1wiIHdpdGggbW9yZSB0aGFuIDUwIGRldGFpbFwiKSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoYyxvKX12YXIgcD10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3RoaXMudU1WTWF0cml4LnRyYW5zbGF0ZShbZixnLDBdKSx0aGlzLnVNVk1hdHJpeC5zY2FsZShoLGksMSksdGhpcy5kcmF3QnVmZmVycyhjKX1maW5hbGx5e3RoaXMudU1WTWF0cml4PXB9cmV0dXJuIHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucmVjdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZyxjPWFbMF0sZT1hWzFdLGY9YVsyXSxnPWFbM10saD1hWzRdfHwoYj8xOjI0KSxpPWFbNV18fChiPzE6MTYpLGo9XCJyZWN0fFwiK2grXCJ8XCIraTtpZighdGhpcy5nZW9tZXRyeUluSGFzaChqKSl7dmFyIGs9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD10aGlzLmRldGFpbFk7YSsrKWZvcih2YXIgYj1hL3RoaXMuZGV0YWlsWSxjPTA7Yzw9dGhpcy5kZXRhaWxYO2MrKyl7dmFyIGU9Yy90aGlzLmRldGFpbFgsZj1uZXcgZC5WZWN0b3IoZSxiLDApO3RoaXMudmVydGljZXMucHVzaChmKSx0aGlzLnV2cy5wdXNoKGUsYil9aD4wJiZpPjAmJih0aGlzLnN0cm9rZUluZGljZXM9W1swLGhdLFtoLChoKzEpKihpKzEpLTFdLFsoaCsxKSooaSsxKS0xLChoKzEpKmldLFsoaCsxKSppLDBdXSl9LGw9bmV3IGQuR2VvbWV0cnkoaCxpLGspO2wuY29tcHV0ZUZhY2VzKCkuY29tcHV0ZU5vcm1hbHMoKS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCksdGhpcy5jcmVhdGVCdWZmZXJzKGosbCl9dmFyIG09dGhpcy51TVZNYXRyaXguY29weSgpO3RyeXt0aGlzLnVNVk1hdHJpeC50cmFuc2xhdGUoW2MsZSwwXSksdGhpcy51TVZNYXRyaXguc2NhbGUoZixnLDEpLHRoaXMuZHJhd0J1ZmZlcnMoail9ZmluYWxseXt0aGlzLnVNVk1hdHJpeD1tfXJldHVybiB0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnF1YWQ9ZnVuY3Rpb24oYSxiLGMsZSxmLGcsaCxpKXt2YXIgaj1cInF1YWR8XCIrYStcInxcIitiK1wifFwiK2MrXCJ8XCIrZStcInxcIitmK1wifFwiK2crXCJ8XCIraCtcInxcIitpO2lmKCF0aGlzLmdlb21ldHJ5SW5IYXNoKGopKXt2YXIgaz1mdW5jdGlvbigpe3RoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoYSxiLDApKSx0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGMsZSwwKSksdGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihmLGcsMCkpLHRoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoaCxpLDApKSx0aGlzLnV2cy5wdXNoKDAsMCwxLDAsMSwxLDAsMSksdGhpcy5zdHJva2VJbmRpY2VzPVtbMCwxXSxbMSwyXSxbMiwzXSxbMywwXV19LGw9bmV3IGQuR2VvbWV0cnkoMiwyLGspO2wuY29tcHV0ZU5vcm1hbHMoKS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCksbC5mYWNlcz1bWzAsMSwyXSxbMiwzLDBdXSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoaixsKX1yZXR1cm4gdGhpcy5kcmF3QnVmZmVycyhqKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmJlemllcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSxqLGssbCl7OD09PWFyZ3VtZW50cy5sZW5ndGgmJihqPWcsaz1oLGc9ZSxoPWQsZD1jLGU9ZCxjPWY9aT1sPTApO3ZhciBtPXRoaXMuX3BJbnN0Ll9iZXppZXJEZXRhaWx8fDIwO3RoaXMuYmVnaW5TaGFwZSgpO2Zvcih2YXIgbj0wO248PW07bisrKXt2YXIgbz1NYXRoLnBvdygxLW4vbSwzKSxwPW4vbSozKk1hdGgucG93KDEtbi9tLDIpLHE9MypNYXRoLnBvdyhuL20sMikqKDEtbi9tKSxyPU1hdGgucG93KG4vbSwzKTt0aGlzLnZlcnRleChhKm8rZCpwK2cqcStqKnIsYipvK2UqcCtoKnEraypyLGMqbytmKnAraSpxK2wqcil9cmV0dXJuIHRoaXMuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmN1cnZlPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpLGosayxsKXs4PT09YXJndW1lbnRzLmxlbmd0aCYmKGo9ZyxrPWgsZz1lLGg9ZCxkPWMsZT1kLGM9Zj1pPWw9MCk7dmFyIG09dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsO3RoaXMuYmVnaW5TaGFwZSgpO2Zvcih2YXIgbj0wO248PW07bisrKXt2YXIgbz0uNSpNYXRoLnBvdyhuL20sMykscD0uNSpNYXRoLnBvdyhuL20sMikscT1uL20qLjUscj0uNSxzPW8qKDMqZC1hLTMqZytqKStwKigyKmEtNSpkKzQqZy1qKStxKigtYStnKStyKigyKmQpLHQ9byooMyplLWItMypoK2spK3AqKDIqYi01KmUrNCpoLWspK3EqKC1iK2gpK3IqKDIqZSksdT1vKigzKmYtYy0zKmkrbCkrcCooMipjLTUqZis0KmktbCkrcSooLWMraSkrciooMipmKTt0aGlzLnZlcnRleChzLHQsdSl9cmV0dXJuIHRoaXMuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gNj09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuYmVnaW5TaGFwZSgpLHRoaXMudmVydGV4KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSx0aGlzLnZlcnRleChhcmd1bWVudHNbM10sYXJndW1lbnRzWzRdLGFyZ3VtZW50c1s1XSksdGhpcy5lbmRTaGFwZSgpKTo0PT09YXJndW1lbnRzLmxlbmd0aCYmKHRoaXMuYmVnaW5TaGFwZSgpLHRoaXMudmVydGV4KGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sMCksdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSwwKSx0aGlzLmVuZFNoYXBlKCkpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuYmV6aWVyVmVydGV4PWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4Lmxlbmd0aCl0aHJvdyBFcnJvcihcInZlcnRleCgpIG11c3QgYmUgdXNlZCBvbmNlIGJlZm9yZSBjYWxsaW5nIGJlemllclZlcnRleCgpXCIpO3ZhciBhLGIsYyxkLGUsZj1bXSxnPVtdLGg9W10saT1hcmd1bWVudHMubGVuZ3RoO2lmKGE9MCwwPT09dGhpcy5fbG9va1VwVGFibGVCZXppZXIubGVuZ3RofHx0aGlzLl9sdXRCZXppZXJEZXRhaWwhPT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWwpe3RoaXMuX2xvb2tVcFRhYmxlQmV6aWVyPVtdLHRoaXMuX2x1dEJlemllckRldGFpbD10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7Zm9yKHZhciBqPTEvdGhpcy5fbHV0QmV6aWVyRGV0YWlsLGs9MCxsPTEsbT0wO2s8MTspe2lmKGE9cGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW21dPXRoaXMuX2JlemllckNvZWZmaWNpZW50cyhhKSxsLnRvRml4ZWQoNik9PT1qLnRvRml4ZWQoNikpe2E9cGFyc2VGbG9hdChsLnRvRml4ZWQoNikpK3BhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSwrK20sdGhpcy5fbG9va1VwVGFibGVCZXppZXJbbV09dGhpcy5fYmV6aWVyQ29lZmZpY2llbnRzKGEpO2JyZWFrfWsrPWosbC09aiwrK219fXZhciBuPXRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyLmxlbmd0aDtpZig2PT09aSl7Zm9yKHRoaXMuaXNCZXppZXI9ITAsZj1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF0sYXJndW1lbnRzWzBdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbNF1dLGc9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzVdXSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2ZbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStnWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyk7dGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF09YXJndW1lbnRzWzRdLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdPWFyZ3VtZW50c1s1XX1lbHNlIGlmKDk9PT1pKXtmb3IodGhpcy5pc0Jlemllcj0hMCxmPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXSxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s2XV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1s0XSxhcmd1bWVudHNbN11dLGg9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzJdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbNV0sYXJndW1lbnRzWzhdXSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2ZbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStnWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGQ9aFswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStoWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2hbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0raFszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSx0aGlzLnZlcnRleChiLGMsZCk7dGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF09YXJndW1lbnRzWzZdLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdPWFyZ3VtZW50c1s3XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsyXT1hcmd1bWVudHNbOF19fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnF1YWRyYXRpY1ZlcnRleD1mdW5jdGlvbigpe2lmKDA9PT10aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleC5sZW5ndGgpdGhyb3cgRXJyb3IoXCJ2ZXJ0ZXgoKSBtdXN0IGJlIHVzZWQgb25jZSBiZWZvcmUgY2FsbGluZyBxdWFkcmF0aWNWZXJ0ZXgoKVwiKTt2YXIgYSxiLGMsZCxlLGY9W10sZz1bXSxoPVtdLGk9YXJndW1lbnRzLmxlbmd0aDtpZihhPTAsMD09PXRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljLmxlbmd0aHx8dGhpcy5fbHV0UXVhZHJhdGljRGV0YWlsIT09dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsKXt0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpYz1bXSx0aGlzLl9sdXRRdWFkcmF0aWNEZXRhaWw9dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsO2Zvcih2YXIgaj0xL3RoaXMuX2x1dFF1YWRyYXRpY0RldGFpbCxrPTAsbD0xLG09MDtrPDE7KXtpZihhPXBhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSx0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1ttXT10aGlzLl9xdWFkcmF0aWNDb2VmZmljaWVudHMoYSksbC50b0ZpeGVkKDYpPT09ai50b0ZpeGVkKDYpKXthPXBhcnNlRmxvYXQobC50b0ZpeGVkKDYpKStwYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksKyttLHRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW21dPXRoaXMuX3F1YWRyYXRpY0NvZWZmaWNpZW50cyhhKTticmVha31rKz1qLGwtPWosKyttfX12YXIgbj10aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpYy5sZW5ndGg7aWYoND09PWkpe2Zvcih0aGlzLmlzUXVhZHJhdGljPSEwLGY9W3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMl1dLGc9W3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbM11dLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSx0aGlzLnZlcnRleChiLGMpO3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdPWFyZ3VtZW50c1syXSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXT1hcmd1bWVudHNbM119ZWxzZSBpZig2PT09aSl7Zm9yKHRoaXMuaXNRdWFkcmF0aWM9ITAsZj1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF0sYXJndW1lbnRzWzBdLGFyZ3VtZW50c1szXV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1s0XV0saD1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMl0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1s1XV0sZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLGQ9aFswXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStoWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2hbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sdGhpcy52ZXJ0ZXgoYixjLGQpO3RoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzBdPWFyZ3VtZW50c1szXSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXT1hcmd1bWVudHNbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMl09YXJndW1lbnRzWzVdfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5jdXJ2ZVZlcnRleD1mdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZj1bXSxnPVtdLGg9W107YT0wO3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg7aWYoMD09PXRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyLmxlbmd0aHx8dGhpcy5fbHV0QmV6aWVyRGV0YWlsIT09dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsKXt0aGlzLl9sb29rVXBUYWJsZUJlemllcj1bXSx0aGlzLl9sdXRCZXppZXJEZXRhaWw9dGhpcy5fcEluc3QuX2N1cnZlRGV0YWlsO2Zvcih2YXIgaj0xL3RoaXMuX2x1dEJlemllckRldGFpbCxrPTAsbD0xLG09MDtrPDE7KXtpZihhPXBhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSx0aGlzLl9sb29rVXBUYWJsZUJlemllclttXT10aGlzLl9iZXppZXJDb2VmZmljaWVudHMoYSksbC50b0ZpeGVkKDYpPT09ai50b0ZpeGVkKDYpKXthPXBhcnNlRmxvYXQobC50b0ZpeGVkKDYpKStwYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksKyttLHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW21dPXRoaXMuX2JlemllckNvZWZmaWNpZW50cyhhKTticmVha31rKz1qLGwtPWosKyttfX12YXIgbj10aGlzLl9sb29rVXBUYWJsZUJlemllci5sZW5ndGg7aWYoMj09PWkpe2lmKHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMF0pLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMV0pLDg9PT10aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4Lmxlbmd0aCl7Zm9yKHRoaXMuaXNDdXJ2ZT0hMCxmPXRoaXMuX2JlemllclRvQ2F0bXVsbChbdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFswXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzJdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs2XV0pLGc9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzFdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbM10sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs1XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzddXSksZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStmWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZ1szXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSx0aGlzLnZlcnRleChiLGMpO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnNoaWZ0KCl9fWVsc2UgaWYoMz09PWkmJih0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzBdKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzFdKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnB1c2goYXJndW1lbnRzWzJdKSwxMj09PXRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgubGVuZ3RoKSl7Zm9yKHRoaXMuaXNDdXJ2ZT0hMCxmPXRoaXMuX2JlemllclRvQ2F0bXVsbChbdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFswXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzNdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs5XV0pLGc9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzFdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs3XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzEwXV0pLGg9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzJdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbNV0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs4XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzExXV0pLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZlszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2dbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sZD1oWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2hbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0raFsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStoWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyxkKTtmb3IoZT0wO2U8aTtlKyspdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5zaGlmdCgpfX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vcDUuR2VvbWV0cnlcIjo3MH1dLDY1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLnByb3RvdHlwZS5vcmJpdENvbnRyb2w9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLl9hc3NlcnQzZChcIm9yYml0Q29udHJvbFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJvcmJpdENvbnRyb2xcIixhcmd1bWVudHMpLHRoaXMubW91c2VYPHRoaXMud2lkdGgmJnRoaXMubW91c2VYPjAmJnRoaXMubW91c2VZPHRoaXMuaGVpZ2h0JiZ0aGlzLm1vdXNlWT4wKXt2YXIgYz10aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhO3ZvaWQgMD09PWEmJihhPTEpLHZvaWQgMD09PWImJihiPWEpLCEwIT09dGhpcy5jb250ZXh0TWVudURpc2FibGVkJiYodGhpcy5jYW52YXMub25jb250ZXh0bWVudT1mdW5jdGlvbigpe3JldHVybiExfSx0aGlzLl9zZXRQcm9wZXJ0eShcImNvbnRleHRNZW51RGlzYWJsZWRcIiwhMCkpLCEwIT09dGhpcy53aGVlbERlZmF1bHREaXNhYmxlZCYmKHRoaXMuY2FudmFzLm9ud2hlZWw9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdGhpcy5fc2V0UHJvcGVydHkoXCJ3aGVlbERlZmF1bHREaXNhYmxlZFwiLCEwKSk7dmFyIGU9dGhpcy5oZWlnaHQ8dGhpcy53aWR0aD90aGlzLmhlaWdodDp0aGlzLndpZHRoO2lmKHRoaXMuX21vdXNlV2hlZWxEZWx0YVkhPT10aGlzLl9wbW91c2VXaGVlbERlbHRhWSYmKHRoaXMuX21vdXNlV2hlZWxEZWx0YVk+MD90aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLl9vcmJpdCgwLDAsLjUqZSk6dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5fb3JiaXQoMCwwLC0uNSplKSksdGhpcy5tb3VzZUlzUHJlc3NlZClpZih0aGlzLm1vdXNlQnV0dG9uPT09dGhpcy5MRUZUKXt2YXIgZj0tYSoodGhpcy5tb3VzZVgtdGhpcy5wbW91c2VYKS9lLGc9YioodGhpcy5tb3VzZVktdGhpcy5wbW91c2VZKS9lO3RoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuX29yYml0KGYsZywwKX1lbHNlIGlmKHRoaXMubW91c2VCdXR0b249PT10aGlzLlJJR0hUKXt2YXIgaD1jLl9nZXRMb2NhbEF4ZXMoKSxpPU1hdGguc3FydChoLnhbMF0qaC54WzBdK2gueFsyXSpoLnhbMl0pOzAhPT1pJiYoaC54WzBdLz1pLGgueFsyXS89aSk7dmFyIGo9TWF0aC5zcXJ0KGgueVswXSpoLnlbMF0raC55WzJdKmgueVsyXSk7MCE9PWomJihoLnlbMF0vPWosaC55WzJdLz1qKTt2YXIgaz0tMSphKih0aGlzLm1vdXNlWC10aGlzLnBtb3VzZVgpLGw9LTEqYioodGhpcy5tb3VzZVktdGhpcy5wbW91c2VZKTtjLnNldFBvc2l0aW9uKGMuZXllWCtrKmgueFswXStsKmguelswXSxjLmV5ZVksYy5leWVaK2sqaC54WzJdK2wqaC56WzJdKX1yZXR1cm4gdGhpc319LGQucHJvdG90eXBlLmRlYnVnTW9kZT1mdW5jdGlvbigpe3RoaXMuX2Fzc2VydDNkKFwiZGVidWdNb2RlXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImRlYnVnTW9kZVwiLGFyZ3VtZW50cyk7Zm9yKHZhciBhPXRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3QubGVuZ3RoLTE7YT49MDthLS0pdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdFthXS50b1N0cmluZygpIT09dGhpcy5fZ3JpZCgpLnRvU3RyaW5nKCkmJnRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3RbYV0udG9TdHJpbmcoKSE9PXRoaXMuX2F4ZXNJY29uKCkudG9TdHJpbmcoKXx8dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5zcGxpY2UoYSwxKTthcmd1bWVudHNbMF09PT1lLkdSSUQ/dGhpcy5yZWdpc3Rlck1ldGhvZChcInBvc3RcIix0aGlzLl9ncmlkLmNhbGwodGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNF0sYXJndW1lbnRzWzVdKSk6YXJndW1lbnRzWzBdPT09ZS5BWEVTP3RoaXMucmVnaXN0ZXJNZXRob2QoXCJwb3N0XCIsdGhpcy5fYXhlc0ljb24uY2FsbCh0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSkpOih0aGlzLnJlZ2lzdGVyTWV0aG9kKFwicG9zdFwiLHRoaXMuX2dyaWQuY2FsbCh0aGlzLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNF0pKSx0aGlzLnJlZ2lzdGVyTWV0aG9kKFwicG9zdFwiLHRoaXMuX2F4ZXNJY29uLmNhbGwodGhpcyxhcmd1bWVudHNbNV0sYXJndW1lbnRzWzZdLGFyZ3VtZW50c1s3XSxhcmd1bWVudHNbOF0pKSl9LGQucHJvdG90eXBlLm5vRGVidWdNb2RlPWZ1bmN0aW9uKCl7dGhpcy5fYXNzZXJ0M2QoXCJub0RlYnVnTW9kZVwiKTtmb3IodmFyIGE9dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5sZW5ndGgtMTthPj0wO2EtLSl0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0W2FdLnRvU3RyaW5nKCkhPT10aGlzLl9ncmlkKCkudG9TdHJpbmcoKSYmdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdFthXS50b1N0cmluZygpIT09dGhpcy5fYXhlc0ljb24oKS50b1N0cmluZygpfHx0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0LnNwbGljZShhLDEpfSxkLnByb3RvdHlwZS5fZ3JpZD1mdW5jdGlvbihhLGIsYyxkLGUpe3ZvaWQgMD09PWEmJihhPXRoaXMud2lkdGgvMiksdm9pZCAwPT09YiYmKGI9TWF0aC5yb3VuZChhLzMwKTw0PzQ6TWF0aC5yb3VuZChhLzMwKSksdm9pZCAwPT09YyYmKGM9MCksdm9pZCAwPT09ZCYmKGQ9MCksdm9pZCAwPT09ZSYmKGU9MCk7dmFyIGY9YS9iLGc9YS8yO3JldHVybiBmdW5jdGlvbigpe3RoaXMucHVzaCgpLHRoaXMuc3Ryb2tlKDI1NSp0aGlzLl9yZW5kZXJlci5jdXJTdHJva2VDb2xvclswXSwyNTUqdGhpcy5fcmVuZGVyZXIuY3VyU3Ryb2tlQ29sb3JbMV0sMjU1KnRoaXMuX3JlbmRlcmVyLmN1clN0cm9rZUNvbG9yWzJdKSx0aGlzLl9yZW5kZXJlci51TVZNYXRyaXguc2V0KHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzJdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbM10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs0XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzVdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs3XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzhdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxM10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNV0pO2Zvcih2YXIgYT0wO2E8PWI7YSsrKXRoaXMuYmVnaW5TaGFwZSh0aGlzLkxJTkVTKSx0aGlzLnZlcnRleCgtZytjLGQsYSpmLWcrZSksdGhpcy52ZXJ0ZXgoK2crYyxkLGEqZi1nK2UpLHRoaXMuZW5kU2hhcGUoKTtmb3IodmFyIGg9MDtoPD1iO2grKyl0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoaCpmLWcrYyxkLC1nK2UpLHRoaXMudmVydGV4KGgqZi1nK2MsZCwrZytlKSx0aGlzLmVuZFNoYXBlKCk7dGhpcy5wb3AoKX19LGQucHJvdG90eXBlLl9heGVzSWNvbj1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdm9pZCAwPT09YSYmKGE9dGhpcy53aWR0aC8yMD40MD90aGlzLndpZHRoLzIwOjQwKSx2b2lkIDA9PT1iJiYoYj0tdGhpcy53aWR0aC80KSx2b2lkIDA9PT1jJiYoYz1iKSx2b2lkIDA9PT1kJiYoZD1iKSxmdW5jdGlvbigpe3RoaXMucHVzaCgpLHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5zZXQodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzFdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzRdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzddLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEwXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEzXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSksdGhpcy5zdHJva2VXZWlnaHQoMiksdGhpcy5zdHJva2UoMjU1LDAsMCksdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KGIsYyxkKSx0aGlzLnZlcnRleChiK2EsYyxkKSx0aGlzLmVuZFNoYXBlKCksdGhpcy5zdHJva2UoMCwyNTUsMCksdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KGIsYyxkKSx0aGlzLnZlcnRleChiLGMrYSxkKSx0aGlzLmVuZFNoYXBlKCksdGhpcy5zdHJva2UoMCwwLDI1NSksdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KGIsYyxkKSx0aGlzLnZlcnRleChiLGMsZCthKSx0aGlzLmVuZFNoYXBlKCksdGhpcy5wb3AoKX19LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw2NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuYW1iaWVudExpZ2h0PWZ1bmN0aW9uKGEsYixjLGUpe3RoaXMuX2Fzc2VydDNkKFwiYW1iaWVudExpZ2h0XCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImFtYmllbnRMaWdodFwiLGFyZ3VtZW50cyk7dmFyIGY9dGhpcy5jb2xvci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZz10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gZy5zZXRVbmlmb3JtKFwidVVzZUxpZ2h0aW5nXCIsITApLGcuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSx0aGlzLl9yZW5kZXJlci5hbWJpZW50TGlnaHRDb2xvcnMucHVzaChmLl9hcnJheVswXSxmLl9hcnJheVsxXSxmLl9hcnJheVsyXSksZy5zZXRVbmlmb3JtKFwidUFtYmllbnRDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmFtYmllbnRMaWdodENvbG9ycyksZy5zZXRVbmlmb3JtKFwidUFtYmllbnRMaWdodENvdW50XCIsdGhpcy5fcmVuZGVyZXIuYW1iaWVudExpZ2h0Q29sb3JzLmxlbmd0aC8zKSx0aGlzfSxkLnByb3RvdHlwZS5kaXJlY3Rpb25hbExpZ2h0PWZ1bmN0aW9uKGEsYixjLGUsZixnKXt0aGlzLl9hc3NlcnQzZChcImRpcmVjdGlvbmFsTGlnaHRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZGlyZWN0aW9uYWxMaWdodFwiLGFyZ3VtZW50cyk7dmFyIGgsaT10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtoPWEgaW5zdGFuY2VvZiBkLkNvbG9yP2E6dGhpcy5jb2xvcihhLGIsYyk7dmFyIGosayxsLG09YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV07XCJudW1iZXJcIj09dHlwZW9mIG0/KGo9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtM10saz1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSxsPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKTooaj1tLngsaz1tLnksbD1tLnopLGkuc2V0VW5pZm9ybShcInVVc2VMaWdodGluZ1wiLCEwKSxpLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvcik7dmFyIG49TWF0aC5zcXJ0KGoqaitrKmsrbCpsKTtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbnMucHVzaChqL24say9uLGwvbiksaS5zZXRVbmlmb3JtKFwidUxpZ2h0aW5nRGlyZWN0aW9uXCIsdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbnMpLHRoaXMuX3JlbmRlcmVyLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnMucHVzaChoLl9hcnJheVswXSxoLl9hcnJheVsxXSxoLl9hcnJheVsyXSksaS5zZXRVbmlmb3JtKFwidURpcmVjdGlvbmFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzKSxpLnNldFVuaWZvcm0oXCJ1RGlyZWN0aW9uYWxMaWdodENvdW50XCIsdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodENvbG9ycy5sZW5ndGgvMyksdGhpc30sZC5wcm90b3R5cGUucG9pbnRMaWdodD1mdW5jdGlvbihhLGIsYyxlLGYsZyl7dGhpcy5fYXNzZXJ0M2QoXCJwb2ludExpZ2h0XCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBvaW50TGlnaHRcIixhcmd1bWVudHMpO3ZhciBoO2g9YSBpbnN0YW5jZW9mIGQuQ29sb3I/YTp0aGlzLmNvbG9yKGEsYixjKTt2YXIgaSxqLGssbD1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtcIm51bWJlclwiPT10eXBlb2YgbD8oaT1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0zXSxqPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTJdLGs9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pOihpPWwueCxqPWwueSxrPWwueik7dmFyIG09dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIG0uc2V0VW5pZm9ybShcInVVc2VMaWdodGluZ1wiLCEwKSxtLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvciksdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodFBvc2l0aW9ucy5wdXNoKGksaixrKSxtLnNldFVuaWZvcm0oXCJ1UG9pbnRMaWdodExvY2F0aW9uXCIsdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodFBvc2l0aW9ucyksdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodENvbG9ycy5wdXNoKGguX2FycmF5WzBdLGguX2FycmF5WzFdLGguX2FycmF5WzJdKSxtLnNldFVuaWZvcm0oXCJ1UG9pbnRMaWdodENvbG9yXCIsdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodENvbG9ycyksbS5zZXRVbmlmb3JtKFwidVBvaW50TGlnaHRDb3VudFwiLHRoaXMuX3JlbmRlcmVyLnBvaW50TGlnaHRDb2xvcnMubGVuZ3RoLzMpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDY3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe2Zvcih2YXIgYz17djpbXSx2dDpbXSx2bjpbXX0sZD17fSxmPTA7ZjxiLmxlbmd0aDsrK2Ype3ZhciBnPWJbZl0udHJpbSgpLnNwbGl0KC9cXGJcXHMrLyk7aWYoZy5sZW5ndGg+MClpZihcInZcIj09PWdbMF18fFwidm5cIj09PWdbMF0pe3ZhciBoPW5ldyBlLlZlY3RvcihwYXJzZUZsb2F0KGdbMV0pLHBhcnNlRmxvYXQoZ1syXSkscGFyc2VGbG9hdChnWzNdKSk7Y1tnWzBdXS5wdXNoKGgpfWVsc2UgaWYoXCJ2dFwiPT09Z1swXSl7dmFyIGk9W3BhcnNlRmxvYXQoZ1sxXSkscGFyc2VGbG9hdChnWzJdKV07Y1tnWzBdXS5wdXNoKGkpfWVsc2UgaWYoXCJmXCI9PT1nWzBdKWZvcih2YXIgaj0zO2o8Zy5sZW5ndGg7KytqKXtmb3IodmFyIGs9W10sbD1bMSxqLTEsal0sbT0wO208bC5sZW5ndGg7KyttKXt2YXIgbj1nW2xbbV1dLG89MDtpZih2b2lkIDAhPT1kW25dKW89ZFtuXTtlbHNle2Zvcih2YXIgcD1uLnNwbGl0KFwiL1wiKSxxPTA7cTxwLmxlbmd0aDtxKyspcFtxXT1wYXJzZUludChwW3FdKS0xO289ZFtuXT1hLnZlcnRpY2VzLmxlbmd0aCxhLnZlcnRpY2VzLnB1c2goYy52W3BbMF1dLmNvcHkoKSksYy52dFtwWzFdXT9hLnV2cy5wdXNoKGMudnRbcFsxXV0uc2xpY2UoKSk6YS51dnMucHVzaChbMCwwXSksYy52bltwWzJdXSYmYS52ZXJ0ZXhOb3JtYWxzLnB1c2goYy52bltwWzJdXS5jb3B5KCkpfWsucHVzaChvKX1rWzBdIT09a1sxXSYma1swXSE9PWtbMl0mJmtbMV0hPT1rWzJdJiZhLmZhY2VzLnB1c2goayl9fXJldHVybiAwPT09YS52ZXJ0ZXhOb3JtYWxzLmxlbmd0aCYmYS5jb21wdXRlTm9ybWFscygpLGF9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKTthKFwiLi9wNS5HZW9tZXRyeVwiKSxlLnByb3RvdHlwZS5sb2FkTW9kZWw9ZnVuY3Rpb24oYSl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZE1vZGVsXCIsYXJndW1lbnRzKTt2YXIgYixjLGY7XCJib29sZWFuXCI9PXR5cGVvZiBhcmd1bWVudHNbMV0/KGI9YXJndW1lbnRzWzFdLGM9YXJndW1lbnRzWzJdLGY9YXJndW1lbnRzWzNdKTooYj0hMSxjPWFyZ3VtZW50c1sxXSxmPWFyZ3VtZW50c1syXSk7dmFyIGc9bmV3IGUuR2VvbWV0cnk7Zy5naWQ9YStcInxcIitiO3ZhciBoPXRoaXM7cmV0dXJuIHRoaXMubG9hZFN0cmluZ3MoYSxmdW5jdGlvbihhKXtkKGcsYSksYiYmZy5ub3JtYWxpemUoKSxoLl9kZWNyZW1lbnRQcmVsb2FkKCksXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmYyhnKX0uYmluZCh0aGlzKSxmKSxnfSxlLnByb3RvdHlwZS5tb2RlbD1mdW5jdGlvbihhKXt0aGlzLl9hc3NlcnQzZChcIm1vZGVsXCIpLGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1vZGVsXCIsYXJndW1lbnRzKSxhLnZlcnRpY2VzLmxlbmd0aD4wJiYodGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goYS5naWQpfHwoYS5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCksdGhpcy5fcmVuZGVyZXIuY3JlYXRlQnVmZmVycyhhLmdpZCxhKSksdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnMoYS5naWQpKX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5HZW9tZXRyeVwiOjcwfV0sNjg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuL3A1LlRleHR1cmVcIiksZC5wcm90b3R5cGUubG9hZFNoYWRlcj1mdW5jdGlvbihhLGIpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxvYWRTaGFkZXJcIixhcmd1bWVudHMpO3ZhciBjPW5ldyBkLlNoYWRlcixlPXRoaXMsZj0hMSxnPSExO3JldHVybiB0aGlzLmxvYWRTdHJpbmdzKGIsZnVuY3Rpb24oYSl7Yy5fZnJhZ1NyYz1hLmpvaW4oXCJcXG5cIiksZj0hMCxnJiZlLl9kZWNyZW1lbnRQcmVsb2FkKCl9KSx0aGlzLmxvYWRTdHJpbmdzKGEsZnVuY3Rpb24oYSl7Yy5fdmVydFNyYz1hLmpvaW4oXCJcXG5cIiksZz0hMCxmJiZlLl9kZWNyZW1lbnRQcmVsb2FkKCl9KSxjfSxkLnByb3RvdHlwZS5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJjcmVhdGVTaGFkZXJcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlU2hhZGVyXCIsYXJndW1lbnRzKSxuZXcgZC5TaGFkZXIodGhpcy5fcmVuZGVyZXIsYSxiKX0sZC5wcm90b3R5cGUuc2hhZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInNoYWRlclwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzaGFkZXJcIixhcmd1bWVudHMpLHZvaWQgMD09PWEuX3JlbmRlcmVyJiYoYS5fcmVuZGVyZXI9dGhpcy5fcmVuZGVyZXIpLGEuaXNTdHJva2VTaGFkZXIoKT90aGlzLl9yZW5kZXJlci5zZXRTdHJva2VTaGFkZXIoYSk6dGhpcy5fcmVuZGVyZXIuc2V0RmlsbFNoYWRlcihhKSx0aGlzfSxkLnByb3RvdHlwZS5ub3JtYWxNYXRlcmlhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcIm5vcm1hbE1hdGVyaWFsXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5vcm1hbE1hdGVyaWFsXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5kcmF3TW9kZT1lLkZJTEwsdGhpcy5fcmVuZGVyZXIuc2V0RmlsbFNoYWRlcih0aGlzLl9yZW5kZXJlci5fZ2V0Tm9ybWFsU2hhZGVyKCkpLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvcj1bMSwxLDEsMV0sdGhpcy5ub1N0cm9rZSgpLHRoaXN9LGQucHJvdG90eXBlLnRleHR1cmU9ZnVuY3Rpb24oYSl7dGhpcy5fYXNzZXJ0M2QoXCJ0ZXh0dXJlXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHR1cmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmRyYXdNb2RlPWUuVEVYVFVSRTt2YXIgYj10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gYi5zZXRVbmlmb3JtKFwidVNwZWN1bGFyXCIsITEpLGIuc2V0VW5pZm9ybShcImlzVGV4dHVyZVwiLCEwKSxiLnNldFVuaWZvcm0oXCJ1U2FtcGxlclwiLGEpLHRoaXMubm9TdHJva2UoKSx0aGlzfSxkLnByb3RvdHlwZS5hbWJpZW50TWF0ZXJpYWw9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJhbWJpZW50TWF0ZXJpYWxcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYW1iaWVudE1hdGVyaWFsXCIsYXJndW1lbnRzKTt2YXIgZj1kLnByb3RvdHlwZS5jb2xvci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yPWYuX2FycmF5O3ZhciBnPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBnLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvciksZy5zZXRVbmlmb3JtKFwidVNwZWN1bGFyXCIsITEpLGcuc2V0VW5pZm9ybShcImlzVGV4dHVyZVwiLCExKSx0aGlzfSxkLnByb3RvdHlwZS5zcGVjdWxhck1hdGVyaWFsPWZ1bmN0aW9uKGEsYixjLGUpe3RoaXMuX2Fzc2VydDNkKFwic3BlY3VsYXJNYXRlcmlhbFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzcGVjdWxhck1hdGVyaWFsXCIsYXJndW1lbnRzKTt2YXIgZj1kLnByb3RvdHlwZS5jb2xvci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yPWYuX2FycmF5O3ZhciBnPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBnLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmN1ckZpbGxDb2xvciksZy5zZXRVbmlmb3JtKFwidVNwZWN1bGFyXCIsITApLGcuc2V0VW5pZm9ybShcImlzVGV4dHVyZVwiLCExKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9hcHBseUNvbG9yQmxlbmQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5HTCxjPXRoaXMuZHJhd01vZGU9PT1lLlRFWFRVUkU7cmV0dXJuIGN8fGFbYS5sZW5ndGgtMV08MT8oYi5kZXB0aE1hc2soYyksYi5lbmFibGUoYi5CTEVORCksYi5ibGVuZEVxdWF0aW9uKGIuRlVOQ19BREQpLGIuYmxlbmRGdW5jKGIuU1JDX0FMUEhBLGIuT05FX01JTlVTX1NSQ19BTFBIQSkpOihiLmRlcHRoTWFzayghMCksYi5kaXNhYmxlKGIuQkxFTkQpKSxhfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5UZXh0dXJlXCI6NzZ9XSw2OTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuY2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwiY2FtZXJhXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNhbWVyYVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmEuYXBwbHkodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYSxhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLnBlcnNwZWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwicGVyc3BlY3RpdmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicGVyc3BlY3RpdmVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEucGVyc3BlY3RpdmUuYXBwbHkodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYSxhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLm9ydGhvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwib3J0aG9cIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwib3J0aG9cIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEub3J0aG8uYXBwbHkodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYSxhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLmNyZWF0ZUNhbWVyYT1mdW5jdGlvbigpe3RoaXMuX2Fzc2VydDNkKFwiY3JlYXRlQ2FtZXJhXCIpO3ZhciBhPW5ldyBkLkNhbWVyYSh0aGlzLl9yZW5kZXJlcik7cmV0dXJuIGEuX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3MoKSxhLl9zZXREZWZhdWx0Q2FtZXJhKCksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYT1hLGF9LGQuQ2FtZXJhPWZ1bmN0aW9uKGEpe3RoaXMuX3JlbmRlcmVyPWEsdGhpcy5jYW1lcmFUeXBlPVwiZGVmYXVsdFwiLHRoaXMuY2FtZXJhTWF0cml4PW5ldyBkLk1hdHJpeCx0aGlzLnByb2pNYXRyaXg9bmV3IGQuTWF0cml4fSxkLkNhbWVyYS5wcm90b3R5cGUucGVyc3BlY3RpdmU9ZnVuY3Rpb24oYSxiLGMsZSl7dm9pZCAwPT09YT8oYT10aGlzLmRlZmF1bHRDYW1lcmFGT1YsdGhpcy5jYW1lcmFGT1Y9YSk6dGhpcy5jYW1lcmFGT1Y9dGhpcy5fcmVuZGVyZXIuX3BJbnN0Ll90b1JhZGlhbnMoYSksdm9pZCAwPT09YiYmKGI9dGhpcy5kZWZhdWx0QXNwZWN0UmF0aW8pLHZvaWQgMD09PWMmJihjPXRoaXMuZGVmYXVsdENhbWVyYU5lYXIpLHZvaWQgMD09PWUmJihlPXRoaXMuZGVmYXVsdENhbWVyYUZhciksYzw9MWUtNCYmKGM9LjAxLGNvbnNvbGUubG9nKFwiQXZvaWQgcGVyc3BlY3RpdmUgbmVhciBwbGFuZSB2YWx1ZXMgY2xvc2UgdG8gb3IgYmVsb3cgMC4gU2V0dGluZyB2YWx1ZSB0byAwLjAxLlwiKSksZTxjJiZjb25zb2xlLmxvZyhcIlBlcnNwZWN0aXZlIGZhciBwbGFuZSB2YWx1ZSBpcyBsZXNzIHRoYW4gbmVhciBwbGFuZSB2YWx1ZS4gTm90aGluZyB3aWxsIGJlIHNob3duLlwiKSx0aGlzLmNhbWVyYUZPVj10aGlzLl9yZW5kZXJlci5fcEluc3QuX3RvUmFkaWFucyhhKSx0aGlzLmFzcGVjdFJhdGlvPWIsdGhpcy5jYW1lcmFOZWFyPWMsdGhpcy5jYW1lcmFGYXI9ZSx0aGlzLnByb2pNYXRyaXg9ZC5NYXRyaXguaWRlbnRpdHkoKTt2YXIgZj0xL01hdGgudGFuKHRoaXMuY2FtZXJhRk9WLzIpLGc9MS8odGhpcy5jYW1lcmFOZWFyLXRoaXMuY2FtZXJhRmFyKTt0aGlzLnByb2pNYXRyaXguc2V0KGYvYiwwLDAsMCwwLC1mLDAsMCwwLDAsKGUrYykqZywtMSwwLDAsMiplKmMqZywwKSx0aGlzLl9pc0FjdGl2ZSgpJiZ0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5zZXQodGhpcy5wcm9qTWF0cml4Lm1hdDRbMF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbM10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbN10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTBdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzExXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTNdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzE0XSx0aGlzLnByb2pNYXRyaXgubWF0NFsxNV0pLHRoaXMuY2FtZXJhVHlwZT1cImN1c3RvbVwifSxkLkNhbWVyYS5wcm90b3R5cGUub3J0aG89ZnVuY3Rpb24oYSxiLGMsZSxmLGcpe3ZvaWQgMD09PWEmJihhPS10aGlzLl9yZW5kZXJlci53aWR0aC8yKSx2b2lkIDA9PT1iJiYoYj0rdGhpcy5fcmVuZGVyZXIud2lkdGgvMiksdm9pZCAwPT09YyYmKGM9LXRoaXMuX3JlbmRlcmVyLmhlaWdodC8yKSx2b2lkIDA9PT1lJiYoZT0rdGhpcy5fcmVuZGVyZXIuaGVpZ2h0LzIpLHZvaWQgMD09PWYmJihmPTApLHZvaWQgMD09PWcmJihnPU1hdGgubWF4KHRoaXMuX3JlbmRlcmVyLndpZHRoLHRoaXMuX3JlbmRlcmVyLmhlaWdodCkpO3ZhciBoPWItYSxpPWUtYyxqPWctZixrPTIvaCxsPTIvaSxtPS0yL2osbj0tKGIrYSkvaCxvPS0oZStjKS9pLHA9LShnK2YpL2o7dGhpcy5wcm9qTWF0cml4PWQuTWF0cml4LmlkZW50aXR5KCksdGhpcy5wcm9qTWF0cml4LnNldChrLDAsMCwwLDAsLWwsMCwwLDAsMCxtLDAsbixvLHAsMSksdGhpcy5faXNBY3RpdmUoKSYmdGhpcy5fcmVuZGVyZXIudVBNYXRyaXguc2V0KHRoaXMucHJvak1hdHJpeC5tYXQ0WzBdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzFdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzJdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzNdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzRdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzVdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzZdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzddLHRoaXMucHJvak1hdHJpeC5tYXQ0WzhdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzldLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEwXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTJdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEzXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxNF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTVdKSx0aGlzLmNhbWVyYVR5cGU9XCJjdXN0b21cIn0sZC5DYW1lcmEucHJvdG90eXBlLl9yb3RhdGVWaWV3PWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXRoaXMuY2VudGVyWCxnPXRoaXMuY2VudGVyWSxoPXRoaXMuY2VudGVyWjtmLT10aGlzLmV5ZVgsZy09dGhpcy5leWVZLGgtPXRoaXMuZXllWjt2YXIgaT1kLk1hdHJpeC5pZGVudGl0eSh0aGlzLl9yZW5kZXJlci5fcEluc3QpO2kucm90YXRlKGEsYixjLGUpO3ZhciBqPVtmKmkubWF0NFswXStnKmkubWF0NFs0XStoKmkubWF0NFs4XSxmKmkubWF0NFsxXStnKmkubWF0NFs1XStoKmkubWF0NFs5XSxmKmkubWF0NFsyXStnKmkubWF0NFs2XStoKmkubWF0NFsxMF1dO2pbMF0rPXRoaXMuZXllWCxqWzFdKz10aGlzLmV5ZVksalsyXSs9dGhpcy5leWVaLHRoaXMuY2FtZXJhKHRoaXMuZXllWCx0aGlzLmV5ZVksdGhpcy5leWVaLGpbMF0salsxXSxqWzJdLHRoaXMudXBYLHRoaXMudXBZLHRoaXMudXBaKX0sZC5DYW1lcmEucHJvdG90eXBlLnBhbj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9nZXRMb2NhbEF4ZXMoKTt0aGlzLl9yb3RhdGVWaWV3KGEsYi55WzBdLGIueVsxXSxiLnlbMl0pfSxkLkNhbWVyYS5wcm90b3R5cGUudGlsdD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9nZXRMb2NhbEF4ZXMoKTt0aGlzLl9yb3RhdGVWaWV3KGEsYi54WzBdLGIueFsxXSxiLnhbMl0pfSxkLkNhbWVyYS5wcm90b3R5cGUubG9va0F0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLmNhbWVyYSh0aGlzLmV5ZVgsdGhpcy5leWVZLHRoaXMuZXllWixhLGIsYyx0aGlzLnVwWCx0aGlzLnVwWSx0aGlzLnVwWil9LGQuQ2FtZXJhLnByb3RvdHlwZS5jYW1lcmE9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGkpe3ZvaWQgMD09PWEmJihhPXRoaXMuZGVmYXVsdEV5ZVgsYj10aGlzLmRlZmF1bHRFeWVZLGM9dGhpcy5kZWZhdWx0RXllWixkPWEsZT1iLGY9MCxnPTAsaD0xLGk9MCksdGhpcy5leWVYPWEsdGhpcy5leWVZPWIsdGhpcy5leWVaPWMsdGhpcy5jZW50ZXJYPWQsdGhpcy5jZW50ZXJZPWUsdGhpcy5jZW50ZXJaPWYsdGhpcy51cFg9Zyx0aGlzLnVwWT1oLHRoaXMudXBaPWk7dmFyIGo9dGhpcy5fZ2V0TG9jYWxBeGVzKCk7dGhpcy5jYW1lcmFNYXRyaXguc2V0KGoueFswXSxqLnlbMF0sai56WzBdLDAsai54WzFdLGoueVsxXSxqLnpbMV0sMCxqLnhbMl0sai55WzJdLGouelsyXSwwLDAsMCwwLDEpO3ZhciBrPS1hLGw9LWIsbT0tYztyZXR1cm4gdGhpcy5jYW1lcmFNYXRyaXgudHJhbnNsYXRlKFtrLGwsbV0pLHRoaXMuX2lzQWN0aXZlKCkmJnRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5zZXQodGhpcy5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzFdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzRdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzddLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzEwXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzEzXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSksdGhpc30sZC5DYW1lcmEucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuX2dldExvY2FsQXhlcygpLGU9W2QueFswXSphLGQueFsxXSphLGQueFsyXSphXSxmPVtkLnlbMF0qYixkLnlbMV0qYixkLnlbMl0qYl0sZz1bZC56WzBdKmMsZC56WzFdKmMsZC56WzJdKmNdO3RoaXMuY2FtZXJhKHRoaXMuZXllWCtlWzBdK2ZbMF0rZ1swXSx0aGlzLmV5ZVkrZVsxXStmWzFdK2dbMV0sdGhpcy5leWVaK2VbMl0rZlsyXStnWzJdLHRoaXMuY2VudGVyWCtlWzBdK2ZbMF0rZ1swXSx0aGlzLmNlbnRlclkrZVsxXStmWzFdK2dbMV0sdGhpcy5jZW50ZXJaK2VbMl0rZlsyXStnWzJdLDAsMSwwKX0sZC5DYW1lcmEucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLXRoaXMuZXllWCxlPWItdGhpcy5leWVZLGY9Yy10aGlzLmV5ZVo7dGhpcy5jYW1lcmEoYSxiLGMsdGhpcy5jZW50ZXJYK2QsdGhpcy5jZW50ZXJZK2UsdGhpcy5jZW50ZXJaK2YsMCwxLDApfSxkLkNhbWVyYS5wcm90b3R5cGUuX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3M9ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRDYW1lcmFGT1Y9NjAvMTgwKk1hdGguUEksXG50aGlzLmRlZmF1bHRBc3BlY3RSYXRpbz10aGlzLl9yZW5kZXJlci53aWR0aC90aGlzLl9yZW5kZXJlci5oZWlnaHQsdGhpcy5kZWZhdWx0RXllWD0wLHRoaXMuZGVmYXVsdEV5ZVk9MCx0aGlzLmRlZmF1bHRFeWVaPXRoaXMuX3JlbmRlcmVyLmhlaWdodC8yL01hdGgudGFuKHRoaXMuZGVmYXVsdENhbWVyYUZPVi8yKSx0aGlzLmRlZmF1bHRDZW50ZXJYPTAsdGhpcy5kZWZhdWx0Q2VudGVyWT0wLHRoaXMuZGVmYXVsdENlbnRlclo9MCx0aGlzLmRlZmF1bHRDYW1lcmFOZWFyPS4xKnRoaXMuZGVmYXVsdEV5ZVosdGhpcy5kZWZhdWx0Q2FtZXJhRmFyPTEwKnRoaXMuZGVmYXVsdEV5ZVp9LGQuQ2FtZXJhLnByb3RvdHlwZS5fc2V0RGVmYXVsdENhbWVyYT1mdW5jdGlvbigpe3RoaXMuY2FtZXJhRk9WPXRoaXMuZGVmYXVsdENhbWVyYUZPVix0aGlzLmFzcGVjdFJhdGlvPXRoaXMuZGVmYXVsdEFzcGVjdFJhdGlvLHRoaXMuZXllWD10aGlzLmRlZmF1bHRFeWVYLHRoaXMuZXllWT10aGlzLmRlZmF1bHRFeWVZLHRoaXMuZXllWj10aGlzLmRlZmF1bHRFeWVaLHRoaXMuY2VudGVyWD10aGlzLmRlZmF1bHRDZW50ZXJYLHRoaXMuY2VudGVyWT10aGlzLmRlZmF1bHRDZW50ZXJZLHRoaXMuY2VudGVyWj10aGlzLmRlZmF1bHRDZW50ZXJaLHRoaXMudXBYPTAsdGhpcy51cFk9MSx0aGlzLnVwWj0wLHRoaXMuY2FtZXJhTmVhcj10aGlzLmRlZmF1bHRDYW1lcmFOZWFyLHRoaXMuY2FtZXJhRmFyPXRoaXMuZGVmYXVsdENhbWVyYUZhcix0aGlzLnBlcnNwZWN0aXZlKCksdGhpcy5jYW1lcmEoKSx0aGlzLmNhbWVyYVR5cGU9XCJkZWZhdWx0XCJ9LGQuQ2FtZXJhLnByb3RvdHlwZS5fcmVzaXplPWZ1bmN0aW9uKCl7XCJkZWZhdWx0XCI9PT10aGlzLmNhbWVyYVR5cGU/KHRoaXMuX2NvbXB1dGVDYW1lcmFEZWZhdWx0U2V0dGluZ3MoKSx0aGlzLl9zZXREZWZhdWx0Q2FtZXJhKCkpOnRoaXMucGVyc3BlY3RpdmUodGhpcy5jYW1lcmFGT1YsdGhpcy5fcmVuZGVyZXIud2lkdGgvdGhpcy5fcmVuZGVyZXIuaGVpZ2h0KX0sZC5DYW1lcmEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZC5DYW1lcmEodGhpcy5fcmVuZGVyZXIpO3JldHVybiBhLmNhbWVyYUZPVj10aGlzLmNhbWVyYUZPVixhLmFzcGVjdFJhdGlvPXRoaXMuYXNwZWN0UmF0aW8sYS5leWVYPXRoaXMuZXllWCxhLmV5ZVk9dGhpcy5leWVZLGEuZXllWj10aGlzLmV5ZVosYS5jZW50ZXJYPXRoaXMuY2VudGVyWCxhLmNlbnRlclk9dGhpcy5jZW50ZXJZLGEuY2VudGVyWj10aGlzLmNlbnRlclosYS5jYW1lcmFOZWFyPXRoaXMuY2FtZXJhTmVhcixhLmNhbWVyYUZhcj10aGlzLmNhbWVyYUZhcixhLmNhbWVyYVR5cGU9dGhpcy5jYW1lcmFUeXBlLGEuY2FtZXJhTWF0cml4PXRoaXMuY2FtZXJhTWF0cml4LmNvcHkoKSxhLnByb2pNYXRyaXg9dGhpcy5wcm9qTWF0cml4LmNvcHkoKSxhfSxkLkNhbWVyYS5wcm90b3R5cGUuX2dldExvY2FsQXhlcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZXllWC10aGlzLmNlbnRlclgsYj10aGlzLmV5ZVktdGhpcy5jZW50ZXJZLGM9dGhpcy5leWVaLXRoaXMuY2VudGVyWixkPU1hdGguc3FydChhKmErYipiK2MqYyk7MCE9PWQmJihhLz1kLGIvPWQsYy89ZCk7dmFyIGU9dGhpcy51cFgsZj10aGlzLnVwWSxnPXRoaXMudXBaLGg9ZipjLWcqYixpPS1lKmMrZyphLGo9ZSpiLWYqYTtlPWIqai1jKmksZj0tYSpqK2MqaCxnPWEqaS1iKmg7dmFyIGs9TWF0aC5zcXJ0KGgqaCtpKmkraipqKTswIT09ayYmKGgvPWssaS89ayxqLz1rKTt2YXIgbD1NYXRoLnNxcnQoZSplK2YqZitnKmcpO3JldHVybiAwIT09bCYmKGUvPWwsZi89bCxnLz1sKSx7eDpbaCxpLGpdLHk6W2UsZixnXSx6OlthLGIsY119fSxkLkNhbWVyYS5wcm90b3R5cGUuX29yYml0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmV5ZVgtdGhpcy5jZW50ZXJYLGU9dGhpcy5leWVZLXRoaXMuY2VudGVyWSxmPXRoaXMuZXllWi10aGlzLmNlbnRlclosZz1NYXRoLnNxcnQoZCpkK2UqZStmKmYpLGg9TWF0aC5hdGFuMihkLGYpLGk9TWF0aC5hY29zKE1hdGgubWF4KC0xLE1hdGgubWluKDEsZS9nKSkpO2grPWEsaSs9YixnKz1jLGc8MCYmKGc9LjEpLGk+TWF0aC5QST9pPU1hdGguUEk6aTw9MCYmKGk9LjAwMSk7dmFyIGo9TWF0aC5zaW4oaSkqZypNYXRoLnNpbihoKSxrPU1hdGguY29zKGkpKmcsbD1NYXRoLnNpbihpKSpnKk1hdGguY29zKGgpO3RoaXMuY2FtZXJhKGordGhpcy5jZW50ZXJYLGsrdGhpcy5jZW50ZXJZLGwrdGhpcy5jZW50ZXJaLHRoaXMuY2VudGVyWCx0aGlzLmNlbnRlclksdGhpcy5jZW50ZXJaLDAsMSwwKX0sZC5DYW1lcmEucHJvdG90eXBlLl9pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzPT09dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYX0sZC5wcm90b3R5cGUuc2V0Q2FtZXJhPWZ1bmN0aW9uKGEpe3RoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmE9YSx0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5zZXQoYS5wcm9qTWF0cml4Lm1hdDRbMF0sYS5wcm9qTWF0cml4Lm1hdDRbMV0sYS5wcm9qTWF0cml4Lm1hdDRbMl0sYS5wcm9qTWF0cml4Lm1hdDRbM10sYS5wcm9qTWF0cml4Lm1hdDRbNF0sYS5wcm9qTWF0cml4Lm1hdDRbNV0sYS5wcm9qTWF0cml4Lm1hdDRbNl0sYS5wcm9qTWF0cml4Lm1hdDRbN10sYS5wcm9qTWF0cml4Lm1hdDRbOF0sYS5wcm9qTWF0cml4Lm1hdDRbOV0sYS5wcm9qTWF0cml4Lm1hdDRbMTBdLGEucHJvak1hdHJpeC5tYXQ0WzExXSxhLnByb2pNYXRyaXgubWF0NFsxMl0sYS5wcm9qTWF0cml4Lm1hdDRbMTNdLGEucHJvak1hdHJpeC5tYXQ0WzE0XSxhLnByb2pNYXRyaXgubWF0NFsxNV0pfSxiLmV4cG9ydHM9ZC5DYW1lcmF9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuR2VvbWV0cnk9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLnZlcnRpY2VzPVtdLHRoaXMubGluZVZlcnRpY2VzPVtdLHRoaXMubGluZU5vcm1hbHM9W10sdGhpcy52ZXJ0ZXhOb3JtYWxzPVtdLHRoaXMuZmFjZXM9W10sdGhpcy51dnM9W10sdGhpcy5lZGdlcz1bXSx0aGlzLmRldGFpbFg9dm9pZCAwIT09YT9hOjEsdGhpcy5kZXRhaWxZPXZvaWQgMCE9PWI/YjoxLGMgaW5zdGFuY2VvZiBGdW5jdGlvbiYmYy5jYWxsKHRoaXMpLHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLmNvbXB1dGVGYWNlcz1mdW5jdGlvbigpe3RoaXMuZmFjZXMubGVuZ3RoPTA7Zm9yKHZhciBhLGIsYyxkLGU9dGhpcy5kZXRhaWxYKzEsZj0wO2Y8dGhpcy5kZXRhaWxZO2YrKylmb3IodmFyIGc9MDtnPHRoaXMuZGV0YWlsWDtnKyspYT1mKmUrZyxiPWYqZStnKzEsYz0oZisxKSplK2crMSxkPShmKzEpKmUrZyx0aGlzLmZhY2VzLnB1c2goW2EsYixkXSksdGhpcy5mYWNlcy5wdXNoKFtkLGIsY10pO3JldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5fZ2V0RmFjZU5vcm1hbD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmZhY2VzW2FdLGM9dGhpcy52ZXJ0aWNlc1tiWzBdXSxlPXRoaXMudmVydGljZXNbYlsxXV0sZj10aGlzLnZlcnRpY2VzW2JbMl1dLGc9ZC5WZWN0b3Iuc3ViKGUsYyksaD1kLlZlY3Rvci5zdWIoZixjKSxpPWQuVmVjdG9yLmNyb3NzKGcsaCksaj1kLlZlY3Rvci5tYWcoaSksaz1qLyhkLlZlY3Rvci5tYWcoZykqZC5WZWN0b3IubWFnKGgpKTtyZXR1cm4gMD09PWt8fGlzTmFOKGspPyhjb25zb2xlLndhcm4oXCJwNS5HZW9tZXRyeS5wcm90b3R5cGUuX2dldEZhY2VOb3JtYWw6XCIsXCJmYWNlIGhhcyBjb2xpbmVhciBzaWRlcyBvciBhIHJlcGVhdGVkIHZlcnRleFwiKSxpKTooaz4xJiYoaz0xKSxpLm11bHQoTWF0aC5hc2luKGspL2opKX0sZC5HZW9tZXRyeS5wcm90b3R5cGUuY29tcHV0ZU5vcm1hbHM9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMudmVydGV4Tm9ybWFscyxjPXRoaXMudmVydGljZXMsZT10aGlzLmZhY2VzO2ZvcihiLmxlbmd0aD0wLGE9MDthPGMubGVuZ3RoOysrYSliLnB1c2gobmV3IGQuVmVjdG9yKTtmb3IodmFyIGY9MDtmPGUubGVuZ3RoOysrZilmb3IodmFyIGc9ZVtmXSxoPXRoaXMuX2dldEZhY2VOb3JtYWwoZiksaT0wO2k8MzsrK2kpe3ZhciBqPWdbaV07YltqXS5hZGQoaCl9Zm9yKGE9MDthPGMubGVuZ3RoOysrYSliW2FdLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5hdmVyYWdlTm9ybWFscz1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspe3ZhciBiPXRoaXMuZGV0YWlsWCsxLGM9ZC5WZWN0b3IuYWRkKHRoaXMudmVydGV4Tm9ybWFsc1thKmJdLHRoaXMudmVydGV4Tm9ybWFsc1thKmIrdGhpcy5kZXRhaWxYXSk7Yz1kLlZlY3Rvci5kaXYoYywyKSx0aGlzLnZlcnRleE5vcm1hbHNbYSpiXT1jLHRoaXMudmVydGV4Tm9ybWFsc1thKmIrdGhpcy5kZXRhaWxYXT1jfXJldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5hdmVyYWdlUG9sZU5vcm1hbHM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IGQuVmVjdG9yKDAsMCwwKSxiPTA7Yjx0aGlzLmRldGFpbFg7YisrKWEuYWRkKHRoaXMudmVydGV4Tm9ybWFsc1tiXSk7Zm9yKGE9ZC5WZWN0b3IuZGl2KGEsdGhpcy5kZXRhaWxYKSxiPTA7Yjx0aGlzLmRldGFpbFg7YisrKXRoaXMudmVydGV4Tm9ybWFsc1tiXT1hO2ZvcihhPW5ldyBkLlZlY3RvcigwLDAsMCksYj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xO2I+dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMS10aGlzLmRldGFpbFg7Yi0tKWEuYWRkKHRoaXMudmVydGV4Tm9ybWFsc1tiXSk7Zm9yKGE9ZC5WZWN0b3IuZGl2KGEsdGhpcy5kZXRhaWxYKSxiPXRoaXMudmVydGljZXMubGVuZ3RoLTE7Yj50aGlzLnZlcnRpY2VzLmxlbmd0aC0xLXRoaXMuZGV0YWlsWDtiLS0pdGhpcy52ZXJ0ZXhOb3JtYWxzW2JdPWE7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLl9tYWtlVHJpYW5nbGVFZGdlcz1mdW5jdGlvbigpe2lmKHRoaXMuZWRnZXMubGVuZ3RoPTAsQXJyYXkuaXNBcnJheSh0aGlzLnN0cm9rZUluZGljZXMpKWZvcih2YXIgYT0wLGI9dGhpcy5zdHJva2VJbmRpY2VzLmxlbmd0aDthPGI7YSsrKXRoaXMuZWRnZXMucHVzaCh0aGlzLnN0cm9rZUluZGljZXNbYV0pO2Vsc2UgZm9yKHZhciBjPTA7Yzx0aGlzLmZhY2VzLmxlbmd0aDtjKyspdGhpcy5lZGdlcy5wdXNoKFt0aGlzLmZhY2VzW2NdWzBdLHRoaXMuZmFjZXNbY11bMV1dKSx0aGlzLmVkZ2VzLnB1c2goW3RoaXMuZmFjZXNbY11bMV0sdGhpcy5mYWNlc1tjXVsyXV0pLHRoaXMuZWRnZXMucHVzaChbdGhpcy5mYWNlc1tjXVsyXSx0aGlzLmZhY2VzW2NdWzBdXSk7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLl9lZGdlc1RvVmVydGljZXM9ZnVuY3Rpb24oKXt0aGlzLmxpbmVWZXJ0aWNlcy5sZW5ndGg9MCx0aGlzLmxpbmVOb3JtYWxzLmxlbmd0aD0wO2Zvcih2YXIgYT0wO2E8dGhpcy5lZGdlcy5sZW5ndGg7YSsrKXt2YXIgYj10aGlzLnZlcnRpY2VzW3RoaXMuZWRnZXNbYV1bMF1dLGM9dGhpcy52ZXJ0aWNlc1t0aGlzLmVkZ2VzW2FdWzFdXSxkPWMuY29weSgpLnN1YihiKS5ub3JtYWxpemUoKSxlPWIuYXJyYXkoKSxmPWIuYXJyYXkoKSxnPWMuYXJyYXkoKSxoPWMuYXJyYXkoKSxpPWQuYXJyYXkoKSxqPWQuYXJyYXkoKTtpLnB1c2goMSksai5wdXNoKC0xKSx0aGlzLmxpbmVOb3JtYWxzLnB1c2goaSxqLGksaSxqLGopLHRoaXMubGluZVZlcnRpY2VzLnB1c2goZSxmLGcsZyxmLGgpfXJldHVybiB0aGlzfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnZlcnRpY2VzLmxlbmd0aD4wKXtmb3IodmFyIGE9dGhpcy52ZXJ0aWNlc1swXS5jb3B5KCksYj10aGlzLnZlcnRpY2VzWzBdLmNvcHkoKSxjPTA7Yzx0aGlzLnZlcnRpY2VzLmxlbmd0aDtjKyspYS54PU1hdGgubWF4KGEueCx0aGlzLnZlcnRpY2VzW2NdLngpLGIueD1NYXRoLm1pbihiLngsdGhpcy52ZXJ0aWNlc1tjXS54KSxhLnk9TWF0aC5tYXgoYS55LHRoaXMudmVydGljZXNbY10ueSksYi55PU1hdGgubWluKGIueSx0aGlzLnZlcnRpY2VzW2NdLnkpLGEuej1NYXRoLm1heChhLnosdGhpcy52ZXJ0aWNlc1tjXS56KSxiLno9TWF0aC5taW4oYi56LHRoaXMudmVydGljZXNbY10ueik7dmFyIGU9ZC5WZWN0b3IubGVycChhLGIsLjUpLGY9ZC5WZWN0b3Iuc3ViKGEsYiksZz1NYXRoLm1heChNYXRoLm1heChmLngsZi55KSxmLnopLGg9MjAwL2c7Zm9yKGM9MDtjPHRoaXMudmVydGljZXMubGVuZ3RoO2MrKyl0aGlzLnZlcnRpY2VzW2NdLnN1YihlKSx0aGlzLnZlcnRpY2VzW2NdLm11bHQoaCl9cmV0dXJuIHRoaXN9LGIuZXhwb3J0cz1kLkdlb21ldHJ5fSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDcxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPUFycmF5LGY9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheX07XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEZsb2F0MzJBcnJheSYmKGU9RmxvYXQzMkFycmF5LGY9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheXx8YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheX0pLGQuTWF0cml4PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxiPTA7YjxhLmxlbmd0aDsrK2IpYVtiXT1hcmd1bWVudHNbYl07cmV0dXJuIGEubGVuZ3RoJiZhW2EubGVuZ3RoLTFdaW5zdGFuY2VvZiBkJiYodGhpcy5wNT1hW2EubGVuZ3RoLTFdKSxcIm1hdDNcIj09PWFbMF0/dGhpcy5tYXQzPUFycmF5LmlzQXJyYXkoYVsxXSk/YVsxXTpuZXcgZShbMSwwLDAsMCwxLDAsMCwwLDFdKTp0aGlzLm1hdDQ9QXJyYXkuaXNBcnJheShhWzBdKT9hWzBdOm5ldyBlKFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSksdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLnNldD1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuTWF0cml4Pyh0aGlzLm1hdDQ9YS5tYXQ0LHRoaXMpOmYoYSk/KHRoaXMubWF0ND1hLHRoaXMpOigxNj09PWFyZ3VtZW50cy5sZW5ndGgmJih0aGlzLm1hdDRbMF09YXJndW1lbnRzWzBdLHRoaXMubWF0NFsxXT1hcmd1bWVudHNbMV0sdGhpcy5tYXQ0WzJdPWFyZ3VtZW50c1syXSx0aGlzLm1hdDRbM109YXJndW1lbnRzWzNdLHRoaXMubWF0NFs0XT1hcmd1bWVudHNbNF0sdGhpcy5tYXQ0WzVdPWFyZ3VtZW50c1s1XSx0aGlzLm1hdDRbNl09YXJndW1lbnRzWzZdLHRoaXMubWF0NFs3XT1hcmd1bWVudHNbN10sdGhpcy5tYXQ0WzhdPWFyZ3VtZW50c1s4XSx0aGlzLm1hdDRbOV09YXJndW1lbnRzWzldLHRoaXMubWF0NFsxMF09YXJndW1lbnRzWzEwXSx0aGlzLm1hdDRbMTFdPWFyZ3VtZW50c1sxMV0sdGhpcy5tYXQ0WzEyXT1hcmd1bWVudHNbMTJdLHRoaXMubWF0NFsxM109YXJndW1lbnRzWzEzXSx0aGlzLm1hdDRbMTRdPWFyZ3VtZW50c1sxNF0sdGhpcy5tYXQ0WzE1XT1hcmd1bWVudHNbMTVdKSx0aGlzKX0sZC5NYXRyaXgucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgZC5NYXRyaXgodGhpcy5tYXQ0LHRoaXMucDUpfSxkLk1hdHJpeC5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkLk1hdHJpeCh0aGlzLnA1KTtyZXR1cm4gYS5tYXQ0WzBdPXRoaXMubWF0NFswXSxhLm1hdDRbMV09dGhpcy5tYXQ0WzFdLGEubWF0NFsyXT10aGlzLm1hdDRbMl0sYS5tYXQ0WzNdPXRoaXMubWF0NFszXSxhLm1hdDRbNF09dGhpcy5tYXQ0WzRdLGEubWF0NFs1XT10aGlzLm1hdDRbNV0sYS5tYXQ0WzZdPXRoaXMubWF0NFs2XSxhLm1hdDRbN109dGhpcy5tYXQ0WzddLGEubWF0NFs4XT10aGlzLm1hdDRbOF0sYS5tYXQ0WzldPXRoaXMubWF0NFs5XSxhLm1hdDRbMTBdPXRoaXMubWF0NFsxMF0sYS5tYXQ0WzExXT10aGlzLm1hdDRbMTFdLGEubWF0NFsxMl09dGhpcy5tYXQ0WzEyXSxhLm1hdDRbMTNdPXRoaXMubWF0NFsxM10sYS5tYXQ0WzE0XT10aGlzLm1hdDRbMTRdLGEubWF0NFsxNV09dGhpcy5tYXQ0WzE1XSxhfSxkLk1hdHJpeC5pZGVudGl0eT1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IGQuTWF0cml4KGEpfSxkLk1hdHJpeC5wcm90b3R5cGUudHJhbnNwb3NlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxnLGgsaTtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuTWF0cml4PyhiPWEubWF0NFsxXSxjPWEubWF0NFsyXSxlPWEubWF0NFszXSxnPWEubWF0NFs2XSxoPWEubWF0NFs3XSxpPWEubWF0NFsxMV0sdGhpcy5tYXQ0WzBdPWEubWF0NFswXSx0aGlzLm1hdDRbMV09YS5tYXQ0WzRdLHRoaXMubWF0NFsyXT1hLm1hdDRbOF0sdGhpcy5tYXQ0WzNdPWEubWF0NFsxMl0sdGhpcy5tYXQ0WzRdPWIsdGhpcy5tYXQ0WzVdPWEubWF0NFs1XSx0aGlzLm1hdDRbNl09YS5tYXQ0WzldLHRoaXMubWF0NFs3XT1hLm1hdDRbMTNdLHRoaXMubWF0NFs4XT1jLHRoaXMubWF0NFs5XT1nLHRoaXMubWF0NFsxMF09YS5tYXQ0WzEwXSx0aGlzLm1hdDRbMTFdPWEubWF0NFsxNF0sdGhpcy5tYXQ0WzEyXT1lLHRoaXMubWF0NFsxM109aCx0aGlzLm1hdDRbMTRdPWksdGhpcy5tYXQ0WzE1XT1hLm1hdDRbMTVdKTpmKGEpJiYoYj1hWzFdLGM9YVsyXSxlPWFbM10sZz1hWzZdLGg9YVs3XSxpPWFbMTFdLHRoaXMubWF0NFswXT1hWzBdLHRoaXMubWF0NFsxXT1hWzRdLHRoaXMubWF0NFsyXT1hWzhdLHRoaXMubWF0NFszXT1hWzEyXSx0aGlzLm1hdDRbNF09Yix0aGlzLm1hdDRbNV09YVs1XSx0aGlzLm1hdDRbNl09YVs5XSx0aGlzLm1hdDRbN109YVsxM10sdGhpcy5tYXQ0WzhdPWMsdGhpcy5tYXQ0WzldPWcsdGhpcy5tYXQ0WzEwXT1hWzEwXSx0aGlzLm1hdDRbMTFdPWFbMTRdLHRoaXMubWF0NFsxMl09ZSx0aGlzLm1hdDRbMTNdPWgsdGhpcy5tYXQ0WzE0XT1pLHRoaXMubWF0NFsxNV09YVsxNV0pLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHM7YSBpbnN0YW5jZW9mIGQuTWF0cml4PyhiPWEubWF0NFswXSxjPWEubWF0NFsxXSxlPWEubWF0NFsyXSxnPWEubWF0NFszXSxoPWEubWF0NFs0XSxpPWEubWF0NFs1XSxqPWEubWF0NFs2XSxrPWEubWF0NFs3XSxsPWEubWF0NFs4XSxtPWEubWF0NFs5XSxuPWEubWF0NFsxMF0sbz1hLm1hdDRbMTFdLHA9YS5tYXQ0WzEyXSxxPWEubWF0NFsxM10scj1hLm1hdDRbMTRdLHM9YS5tYXQ0WzE1XSk6ZihhKSYmKGI9YVswXSxjPWFbMV0sZT1hWzJdLGc9YVszXSxoPWFbNF0saT1hWzVdLGo9YVs2XSxrPWFbN10sbD1hWzhdLG09YVs5XSxuPWFbMTBdLG89YVsxMV0scD1hWzEyXSxxPWFbMTNdLHI9YVsxNF0scz1hWzE1XSk7dmFyIHQ9YippLWMqaCx1PWIqai1lKmgsdj1iKmstZypoLHc9YypqLWUqaSx4PWMqay1nKmkseT1lKmstZypqLHo9bCpxLW0qcCxBPWwqci1uKnAsQj1sKnMtbypwLEM9bSpyLW4qcSxEPW0qcy1vKnEsRT1uKnMtbypyLEY9dCpFLXUqRCt2KkMrdypCLXgqQSt5Kno7cmV0dXJuIEY/KEY9MS9GLHRoaXMubWF0NFswXT0oaSpFLWoqRCtrKkMpKkYsdGhpcy5tYXQ0WzFdPShlKkQtYypFLWcqQykqRix0aGlzLm1hdDRbMl09KHEqeS1yKngrcyp3KSpGLHRoaXMubWF0NFszXT0obip4LW0qeS1vKncpKkYsdGhpcy5tYXQ0WzRdPShqKkItaCpFLWsqQSkqRix0aGlzLm1hdDRbNV09KGIqRS1lKkIrZypBKSpGLHRoaXMubWF0NFs2XT0ocip2LXAqeS1zKnUpKkYsdGhpcy5tYXQ0WzddPShsKnktbip2K28qdSkqRix0aGlzLm1hdDRbOF09KGgqRC1pKkIrayp6KSpGLHRoaXMubWF0NFs5XT0oYypCLWIqRC1nKnopKkYsdGhpcy5tYXQ0WzEwXT0ocCp4LXEqditzKnQpKkYsdGhpcy5tYXQ0WzExXT0obSp2LWwqeC1vKnQpKkYsdGhpcy5tYXQ0WzEyXT0oaSpBLWgqQy1qKnopKkYsdGhpcy5tYXQ0WzEzXT0oYipDLWMqQStlKnopKkYsdGhpcy5tYXQ0WzE0XT0ocSp1LXAqdy1yKnQpKkYsdGhpcy5tYXQ0WzE1XT0obCp3LW0qdStuKnQpKkYsdGhpcyk6bnVsbH0sZC5NYXRyaXgucHJvdG90eXBlLmludmVydDN4Mz1mdW5jdGlvbigpe3ZhciBhPXRoaXMubWF0M1swXSxiPXRoaXMubWF0M1sxXSxjPXRoaXMubWF0M1syXSxkPXRoaXMubWF0M1szXSxlPXRoaXMubWF0M1s0XSxmPXRoaXMubWF0M1s1XSxnPXRoaXMubWF0M1s2XSxoPXRoaXMubWF0M1s3XSxpPXRoaXMubWF0M1s4XSxqPWkqZS1mKmgsaz0taSpkK2YqZyxsPWgqZC1lKmcsbT1hKmorYiprK2MqbDtyZXR1cm4gbT8obT0xL20sdGhpcy5tYXQzWzBdPWoqbSx0aGlzLm1hdDNbMV09KC1pKmIrYypoKSptLHRoaXMubWF0M1syXT0oZipiLWMqZSkqbSx0aGlzLm1hdDNbM109ayptLHRoaXMubWF0M1s0XT0oaSphLWMqZykqbSx0aGlzLm1hdDNbNV09KC1mKmErYypkKSptLHRoaXMubWF0M1s2XT1sKm0sdGhpcy5tYXQzWzddPSgtaCphK2IqZykqbSx0aGlzLm1hdDNbOF09KGUqYS1iKmQpKm0sdGhpcyk6bnVsbH0sZC5NYXRyaXgucHJvdG90eXBlLnRyYW5zcG9zZTN4Mz1mdW5jdGlvbihhKXt2YXIgYj1hWzFdLGM9YVsyXSxkPWFbNV07cmV0dXJuIHRoaXMubWF0M1sxXT1hWzNdLHRoaXMubWF0M1syXT1hWzZdLHRoaXMubWF0M1szXT1iLHRoaXMubWF0M1s1XT1hWzddLHRoaXMubWF0M1s2XT1jLHRoaXMubWF0M1s3XT1kLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5pbnZlcnNlVHJhbnNwb3NlPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PXRoaXMubWF0Mz9jb25zb2xlLmVycm9yKFwic29ycnksIHRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyB3aXRoIG1hdDNcIik6KHRoaXMubWF0M1swXT1hLm1hdDRbMF0sdGhpcy5tYXQzWzFdPWEubWF0NFsxXSx0aGlzLm1hdDNbMl09YS5tYXQ0WzJdLHRoaXMubWF0M1szXT1hLm1hdDRbNF0sdGhpcy5tYXQzWzRdPWEubWF0NFs1XSx0aGlzLm1hdDNbNV09YS5tYXQ0WzZdLHRoaXMubWF0M1s2XT1hLm1hdDRbOF0sdGhpcy5tYXQzWzddPWEubWF0NFs5XSx0aGlzLm1hdDNbOF09YS5tYXQ0WzEwXSk7dmFyIGI9dGhpcy5pbnZlcnQzeDMoKTtpZihiKWIudHJhbnNwb3NlM3gzKHRoaXMubWF0Myk7ZWxzZSBmb3IodmFyIGM9MDtjPDk7YysrKXRoaXMubWF0M1tjXT0wO3JldHVybiB0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuZGV0ZXJtaW5hbnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1hdDRbMF0qdGhpcy5tYXQ0WzVdLXRoaXMubWF0NFsxXSp0aGlzLm1hdDRbNF0sYj10aGlzLm1hdDRbMF0qdGhpcy5tYXQ0WzZdLXRoaXMubWF0NFsyXSp0aGlzLm1hdDRbNF0sYz10aGlzLm1hdDRbMF0qdGhpcy5tYXQ0WzddLXRoaXMubWF0NFszXSp0aGlzLm1hdDRbNF0sZD10aGlzLm1hdDRbMV0qdGhpcy5tYXQ0WzZdLXRoaXMubWF0NFsyXSp0aGlzLm1hdDRbNV0sZT10aGlzLm1hdDRbMV0qdGhpcy5tYXQ0WzddLXRoaXMubWF0NFszXSp0aGlzLm1hdDRbNV0sZj10aGlzLm1hdDRbMl0qdGhpcy5tYXQ0WzddLXRoaXMubWF0NFszXSp0aGlzLm1hdDRbNl0sZz10aGlzLm1hdDRbOF0qdGhpcy5tYXQ0WzEzXS10aGlzLm1hdDRbOV0qdGhpcy5tYXQ0WzEyXSxoPXRoaXMubWF0NFs4XSp0aGlzLm1hdDRbMTRdLXRoaXMubWF0NFsxMF0qdGhpcy5tYXQ0WzEyXSxpPXRoaXMubWF0NFs4XSp0aGlzLm1hdDRbMTVdLXRoaXMubWF0NFsxMV0qdGhpcy5tYXQ0WzEyXSxqPXRoaXMubWF0NFs5XSp0aGlzLm1hdDRbMTRdLXRoaXMubWF0NFsxMF0qdGhpcy5tYXQ0WzEzXSxrPXRoaXMubWF0NFs5XSp0aGlzLm1hdDRbMTVdLXRoaXMubWF0NFsxMV0qdGhpcy5tYXQ0WzEzXTtyZXR1cm4gYSoodGhpcy5tYXQ0WzEwXSp0aGlzLm1hdDRbMTVdLXRoaXMubWF0NFsxMV0qdGhpcy5tYXQ0WzE0XSktYiprK2MqaitkKmktZSpoK2YqZ30sZC5NYXRyaXgucHJvdG90eXBlLm11bHQ9ZnVuY3Rpb24oYSl7dmFyIGI7aWYoYT09PXRoaXN8fGE9PT10aGlzLm1hdDQpYj10aGlzLmNvcHkoKS5tYXQ0O2Vsc2UgaWYoYSBpbnN0YW5jZW9mIGQuTWF0cml4KWI9YS5tYXQ0O2Vsc2V7aWYoIWYoYSkpcmV0dXJuO2I9YX12YXIgYz10aGlzLm1hdDRbMF0sZT10aGlzLm1hdDRbMV0sZz10aGlzLm1hdDRbMl0saD10aGlzLm1hdDRbM107cmV0dXJuIHRoaXMubWF0NFswXT1jKmJbMF0rZSpiWzRdK2cqYls4XStoKmJbMTJdLHRoaXMubWF0NFsxXT1jKmJbMV0rZSpiWzVdK2cqYls5XStoKmJbMTNdLHRoaXMubWF0NFsyXT1jKmJbMl0rZSpiWzZdK2cqYlsxMF0raCpiWzE0XSx0aGlzLm1hdDRbM109YypiWzNdK2UqYls3XStnKmJbMTFdK2gqYlsxNV0sYz10aGlzLm1hdDRbNF0sZT10aGlzLm1hdDRbNV0sZz10aGlzLm1hdDRbNl0saD10aGlzLm1hdDRbN10sdGhpcy5tYXQ0WzRdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzVdPWMqYlsxXStlKmJbNV0rZypiWzldK2gqYlsxM10sdGhpcy5tYXQ0WzZdPWMqYlsyXStlKmJbNl0rZypiWzEwXStoKmJbMTRdLHRoaXMubWF0NFs3XT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSxjPXRoaXMubWF0NFs4XSxlPXRoaXMubWF0NFs5XSxnPXRoaXMubWF0NFsxMF0saD10aGlzLm1hdDRbMTFdLHRoaXMubWF0NFs4XT1jKmJbMF0rZSpiWzRdK2cqYls4XStoKmJbMTJdLHRoaXMubWF0NFs5XT1jKmJbMV0rZSpiWzVdK2cqYls5XStoKmJbMTNdLHRoaXMubWF0NFsxMF09YypiWzJdK2UqYls2XStnKmJbMTBdK2gqYlsxNF0sdGhpcy5tYXQ0WzExXT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSxjPXRoaXMubWF0NFsxMl0sZT10aGlzLm1hdDRbMTNdLGc9dGhpcy5tYXQ0WzE0XSxoPXRoaXMubWF0NFsxNV0sdGhpcy5tYXQ0WzEyXT1jKmJbMF0rZSpiWzRdK2cqYls4XStoKmJbMTJdLHRoaXMubWF0NFsxM109YypiWzFdK2UqYls1XStnKmJbOV0raCpiWzEzXSx0aGlzLm1hdDRbMTRdPWMqYlsyXStlKmJbNl0rZypiWzEwXStoKmJbMTRdLHRoaXMubWF0NFsxNV09YypiWzNdK2UqYls3XStnKmJbMTFdK2gqYlsxNV0sdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyhiPWEueSxjPWEueixhPWEueCk6YSBpbnN0YW5jZW9mIEFycmF5JiYoYj1hWzFdLGM9YVsyXSxhPWFbMF0pLHRoaXMubWF0NFswXSo9YSx0aGlzLm1hdDRbMV0qPWEsdGhpcy5tYXQ0WzJdKj1hLHRoaXMubWF0NFszXSo9YSx0aGlzLm1hdDRbNF0qPWIsdGhpcy5tYXQ0WzVdKj1iLHRoaXMubWF0NFs2XSo9Yix0aGlzLm1hdDRbN10qPWIsdGhpcy5tYXQ0WzhdKj1jLHRoaXMubWF0NFs5XSo9Yyx0aGlzLm1hdDRbMTBdKj1jLHRoaXMubWF0NFsxMV0qPWMsdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZT1mdW5jdGlvbihhLGIsYyxlKXt2YXIgZj10aGlzLnA1P3RoaXMucDUuX3RvUmFkaWFucyhhKTphO2IgaW5zdGFuY2VvZiBkLlZlY3Rvcj8oYz1iLnksZT1iLnosYj1iLngpOmIgaW5zdGFuY2VvZiBBcnJheSYmKGM9YlsxXSxlPWJbMl0sYj1iWzBdKTt2YXIgZz1NYXRoLnNxcnQoYipiK2MqYytlKmUpO2IqPTEvZyxjKj0xL2csZSo9MS9nO3ZhciBoPXRoaXMubWF0NFswXSxpPXRoaXMubWF0NFsxXSxqPXRoaXMubWF0NFsyXSxrPXRoaXMubWF0NFszXSxsPXRoaXMubWF0NFs0XSxtPXRoaXMubWF0NFs1XSxuPXRoaXMubWF0NFs2XSxvPXRoaXMubWF0NFs3XSxwPXRoaXMubWF0NFs4XSxxPXRoaXMubWF0NFs5XSxyPXRoaXMubWF0NFsxMF0scz10aGlzLm1hdDRbMTFdLHQ9TWF0aC5zaW4oZiksdT1NYXRoLmNvcyhmKSx2PTEtdSx3PWIqYip2K3UseD1jKmIqditlKnQseT1lKmIqdi1jKnQsej1iKmMqdi1lKnQsQT1jKmMqdit1LEI9ZSpjKnYrYip0LEM9YiplKnYrYyp0LEQ9YyplKnYtYip0LEU9ZSplKnYrdTtyZXR1cm4gdGhpcy5tYXQ0WzBdPWgqdytsKngrcCp5LHRoaXMubWF0NFsxXT1pKncrbSp4K3EqeSx0aGlzLm1hdDRbMl09aip3K24qeCtyKnksdGhpcy5tYXQ0WzNdPWsqdytvKngrcyp5LHRoaXMubWF0NFs0XT1oKnorbCpBK3AqQix0aGlzLm1hdDRbNV09aSp6K20qQStxKkIsdGhpcy5tYXQ0WzZdPWoqeituKkErcipCLHRoaXMubWF0NFs3XT1rKnorbypBK3MqQix0aGlzLm1hdDRbOF09aCpDK2wqRCtwKkUsdGhpcy5tYXQ0WzldPWkqQyttKkQrcSpFLHRoaXMubWF0NFsxMF09aipDK24qRCtyKkUsdGhpcy5tYXQ0WzExXT1rKkMrbypEK3MqRSx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGQ9YVsyXXx8MDt0aGlzLm1hdDRbMTJdKz10aGlzLm1hdDRbMF0qYit0aGlzLm1hdDRbNF0qYyt0aGlzLm1hdDRbOF0qZCx0aGlzLm1hdDRbMTNdKz10aGlzLm1hdDRbMV0qYit0aGlzLm1hdDRbNV0qYyt0aGlzLm1hdDRbOV0qZCx0aGlzLm1hdDRbMTRdKz10aGlzLm1hdDRbMl0qYit0aGlzLm1hdDRbNl0qYyt0aGlzLm1hdDRbMTBdKmQsdGhpcy5tYXQ0WzE1XSs9dGhpcy5tYXQ0WzNdKmIrdGhpcy5tYXQ0WzddKmMrdGhpcy5tYXQ0WzExXSpkfSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbihhKXt0aGlzLnJvdGF0ZShhLDEsMCwwKX0sZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oYSl7dGhpcy5yb3RhdGUoYSwwLDEsMCl9LGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKGEpe3RoaXMucm90YXRlKGEsMCwwLDEpfSxkLk1hdHJpeC5wcm90b3R5cGUucGVyc3BlY3RpdmU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9MS9NYXRoLnRhbihhLzIpLGY9MS8oYy1kKTtyZXR1cm4gdGhpcy5tYXQ0WzBdPWUvYix0aGlzLm1hdDRbMV09MCx0aGlzLm1hdDRbMl09MCx0aGlzLm1hdDRbM109MCx0aGlzLm1hdDRbNF09MCx0aGlzLm1hdDRbNV09ZSx0aGlzLm1hdDRbNl09MCx0aGlzLm1hdDRbN109MCx0aGlzLm1hdDRbOF09MCx0aGlzLm1hdDRbOV09MCx0aGlzLm1hdDRbMTBdPShkK2MpKmYsdGhpcy5tYXQ0WzExXT0tMSx0aGlzLm1hdDRbMTJdPTAsdGhpcy5tYXQ0WzEzXT0wLHRoaXMubWF0NFsxNF09MipkKmMqZix0aGlzLm1hdDRbMTVdPTAsdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLm9ydGhvPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz0xLyhhLWIpLGg9MS8oYy1kKSxpPTEvKGUtZik7cmV0dXJuIHRoaXMubWF0NFswXT0tMipnLHRoaXMubWF0NFsxXT0wLHRoaXMubWF0NFsyXT0wLHRoaXMubWF0NFszXT0wLHRoaXMubWF0NFs0XT0wLHRoaXMubWF0NFs1XT0tMipoLHRoaXMubWF0NFs2XT0wLHRoaXMubWF0NFs3XT0wLHRoaXMubWF0NFs4XT0wLHRoaXMubWF0NFs5XT0wLHRoaXMubWF0NFsxMF09MippLHRoaXMubWF0NFsxMV09MCx0aGlzLm1hdDRbMTJdPShhK2IpKmcsdGhpcy5tYXQ0WzEzXT0oZCtjKSpoLHRoaXMubWF0NFsxNF09KGYrZSkqaSx0aGlzLm1hdDRbMTVdPTEsdGhpc30sYi5leHBvcnRzPWQuTWF0cml4fSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDcyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLlJlbmRlcmVyR0wucHJvdG90eXBlLmJlZ2luU2hhcGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9dm9pZCAwIT09YT9hOmUuTElORV9TVFJJUCx2b2lkIDA9PT10aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXM/KHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUuZWRnZXM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0aWNlcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFscz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUudXZDb29yZHM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5jb2xvckJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS51dkJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGV4QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUucG9pbnRWZXJ0ZXhCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleD1bXSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleD1bXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4PVtdKToodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5lZGdlcy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFscy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcy5sZW5ndGg9MCksdGhpcy5pc0ltbWVkaWF0ZURyYXdpbmc9ITAsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS52ZXJ0ZXg9ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGY7Yz1lPWY9MCwzPT09YXJndW1lbnRzLmxlbmd0aD9jPWFyZ3VtZW50c1syXTo0PT09YXJndW1lbnRzLmxlbmd0aD8oZT1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10pOjU9PT1hcmd1bWVudHMubGVuZ3RoJiYoYz1hcmd1bWVudHNbMl0sZT1hcmd1bWVudHNbM10sZj1hcmd1bWVudHNbNF0pO3ZhciBnPW5ldyBkLlZlY3RvcihhLGIsYyk7dGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLnB1c2goZyk7dmFyIGg9dGhpcy5jdXJGaWxsQ29sb3J8fFsuNSwuNSwuNSwxXTtyZXR1cm4gdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleENvbG9ycy5wdXNoKGhbMF0saFsxXSxoWzJdLGhbM10pLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcy5wdXNoKGUsZiksdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMF09YSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsxXT1iLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzJdPWMsdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF09YSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXT1iLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzJdPWMsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5lbmRTaGFwZT1mdW5jdGlvbihhLGIsYyxmLGcsaCl7aWYodGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT09PWUuUE9JTlRTKXRoaXMuX3VzZVBvaW50U2hhZGVyKCksdGhpcy5jdXJQb2ludFNoYWRlci5iaW5kU2hhZGVyKCksdGhpcy5fZHJhd1BvaW50cyh0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMsdGhpcy5pbW1lZGlhdGVNb2RlLnBvaW50VmVydGV4QnVmZmVyKSx0aGlzLmN1clBvaW50U2hhZGVyLnVuYmluZFNoYWRlcigpO2Vsc2UgaWYodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aD4xKXtpZih0aGlzLl91c2VJbW1lZGlhdGVNb2RlU2hhZGVyKCksdGhpcy5fZG9TdHJva2UmJnRoaXMuZHJhd01vZGUhPT1lLlRFWFRVUkUpe2Zvcih2YXIgaT0wO2k8dGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aC0xO2krKyl0aGlzLmltbWVkaWF0ZU1vZGUuZWRnZXMucHVzaChbaSxpKzFdKTthPT09ZS5DTE9TRSYmdGhpcy5pbW1lZGlhdGVNb2RlLmVkZ2VzLnB1c2goW3RoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGgtMSwwXSksZC5HZW9tZXRyeS5wcm90b3R5cGUuX2VkZ2VzVG9WZXJ0aWNlcy5jYWxsKHRoaXMuaW1tZWRpYXRlTW9kZSksdGhpcy5fZHJhd1N0cm9rZUltbWVkaWF0ZU1vZGUoKX1pZih0aGlzLl9kb0ZpbGwpe2lmKHRoaXMuaXNCZXppZXJ8fHRoaXMuaXNRdWFkcmF0aWN8fHRoaXMuaXNDdXJ2ZSl7dmFyIGo9W25ldyBGbG9hdDMyQXJyYXkodGhpcy5fdlRvTkFycmF5KHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcykpXSxrPXRoaXMuX3RyaWFuZ3VsYXRlKGopO3RoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcz1bXTtmb3IodmFyIGw9MCxtPWsubGVuZ3RoO2w8bTtsKz0zKXRoaXMudmVydGV4KGtbbF0sa1tsKzFdLGtbbCsyXSl9dGhpcy5fZHJhd0ZpbGxJbW1lZGlhdGVNb2RlKGEsYixjLGYsZyxoKX19cmV0dXJuIHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGg9MCx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcy5sZW5ndGg9MCx0aGlzLmlzSW1tZWRpYXRlRHJhd2luZz0hMSx0aGlzLmlzQmV6aWVyPSExLHRoaXMuaXNRdWFkcmF0aWM9ITEsdGhpcy5pc0N1cnZlPSExLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4Lmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4Lmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgubGVuZ3RoPTAsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd0ZpbGxJbW1lZGlhdGVNb2RlPWZ1bmN0aW9uKGEsYixjLGQsZixnKXt2YXIgaD10aGlzLkdMO2lmKHRoaXMuY3VyRmlsbFNoYWRlci5iaW5kU2hhZGVyKCksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4QnVmZmVyLGguQVJSQVlfQlVGRkVSLHRoaXMuX3ZUb05BcnJheSh0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMpLEZsb2F0MzJBcnJheSxoLkRZTkFNSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxoLkZMT0FULCExLDAsMCkpLHRoaXMuZHJhd01vZGU9PT1lLkZJTEwmJnRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhDb2xvciYmKHRoaXMuX2JpbmRCdWZmZXIodGhpcy5pbW1lZGlhdGVNb2RlLmNvbG9yQnVmZmVyLGguQVJSQVlfQlVGRkVSLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnMsRmxvYXQzMkFycmF5LGguRFlOQU1JQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFWZXJ0ZXhDb2xvci5sb2NhdGlvbiw0LGguRkxPQVQsITEsMCwwKSksdGhpcy5kcmF3TW9kZT09PWUuVEVYVFVSRSYmdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVRleENvb3JkJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUudXZCdWZmZXIsaC5BUlJBWV9CVUZGRVIsdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLEZsb2F0MzJBcnJheSxoLkRZTkFNSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMixoLkZMT0FULCExLDAsMCkpLHRoaXMuZHJhd01vZGU9PT1lLkZJTEx8fHRoaXMuZHJhd01vZGU9PT1lLlRFWFRVUkUpc3dpdGNoKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGUpe2Nhc2UgZS5MSU5FX1NUUklQOmNhc2UgZS5MSU5FUzpjYXNlIGUuVFJJQU5HTEVTOnRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9dGhpcy5pc0Jlemllcnx8dGhpcy5pc1F1YWRyYXRpY3x8dGhpcy5pc0N1cnZlP2UuVFJJQU5HTEVTOmUuVFJJQU5HTEVfRkFOfWVsc2Ugc3dpdGNoKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGUpe2Nhc2UgZS5MSU5FX1NUUklQOmNhc2UgZS5MSU5FUzp0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPWUuTElORV9MT09QfWlmKHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9PT1lLlFVQURTfHx0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPT09ZS5RVUFEX1NUUklQKXRocm93IG5ldyBFcnJvcihcInNvcnJ5LCBcIit0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlK1wiIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gd2ViZ2wgbW9kZS5cIik7dGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyRmlsbENvbG9yKSxoLmVuYWJsZShoLkJMRU5EKSxoLmRyYXdBcnJheXModGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZSwwLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcy5sZW5ndGgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCx0aGlzLmN1ckZpbGxTaGFkZXIudW5iaW5kU2hhZGVyKCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdTdHJva2VJbW1lZGlhdGVNb2RlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5HTDt0aGlzLmN1clN0cm9rZVNoYWRlci5iaW5kU2hhZGVyKCksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGV4QnVmZmVyLGEuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4odGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0aWNlcyksRmxvYXQzMkFycmF5LGEuU1RBVElDX0RSQVcpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGEuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUubGluZU5vcm1hbEJ1ZmZlcixhLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFscyksRmxvYXQzMkFycmF5LGEuU1RBVElDX0RSQVcpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24ubG9jYXRpb24sNCxhLkZMT0FULCExLDAsMCkpLHRoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1clN0cm9rZUNvbG9yKSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsMCx0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzLmxlbmd0aCksdGhpcy5jdXJTdHJva2VTaGFkZXIudW5iaW5kU2hhZGVyKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxiLmV4cG9ydHM9ZC5SZW5kZXJlckdMfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjR9XSw3MzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT0wO2QuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2luaXRCdWZmZXJEZWZhdWx0cz1mdW5jdGlvbihhKXtpZih0aGlzLl9mcmVlQnVmZmVycyhhKSwrK2U+MWUzKXt2YXIgYj1PYmplY3Qua2V5cyh0aGlzLmdIYXNoKVswXTtkZWxldGUgdGhpcy5nSGFzaFtiXSxlLS19dGhpcy5nSGFzaFthXT17fX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZnJlZUJ1ZmZlcnM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5nSGFzaFthXTtpZihiKXtkZWxldGUgdGhpcy5nSGFzaFthXSxlLS07dmFyIGM9dGhpcy5HTDtiLnZlcnRleEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi52ZXJ0ZXhCdWZmZXIpLGIubm9ybWFsQnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLm5vcm1hbEJ1ZmZlciksYi5saW5lTm9ybWFsQnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLmxpbmVOb3JtYWxCdWZmZXIpLGIudXZCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIudXZCdWZmZXIpLGIuaW5kZXhCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIuaW5kZXhCdWZmZXIpLGIubGluZVZlcnRleEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi5saW5lVmVydGV4QnVmZmVyKX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuY3JlYXRlQnVmZmVycz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuR0w7dGhpcy5faW5pdEJ1ZmZlckRlZmF1bHRzKGEpO3ZhciBkPXRoaXMuZ0hhc2hbYV07cmV0dXJuIGQubnVtYmVyT2ZJdGVtcz0zKmIuZmFjZXMubGVuZ3RoLGQubGluZVZlcnRleENvdW50PWIubGluZVZlcnRpY2VzLmxlbmd0aCx0aGlzLl91c2VDb2xvclNoYWRlcigpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uJiYoZC5saW5lVmVydGV4QnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLmxpbmVWZXJ0ZXhCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbihiLmxpbmVWZXJ0aWNlcyksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGMuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uJiYoZC5saW5lTm9ybWFsQnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLmxpbmVOb3JtYWxCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbihiLmxpbmVOb3JtYWxzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYURpcmVjdGlvbi5sb2NhdGlvbiw0LGMuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uJiYoZC52ZXJ0ZXhCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQudmVydGV4QnVmZmVyLGMuQVJSQVlfQlVGRkVSLHRoaXMuX3ZUb05BcnJheShiLnZlcnRpY2VzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxjLkZMT0FULCExLDAsMCkpLGQuaW5kZXhCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQuaW5kZXhCdWZmZXIsYy5FTEVNRU5UX0FSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIuZmFjZXMpLFVpbnQxNkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFOb3JtYWwmJihkLm5vcm1hbEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC5ub3JtYWxCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KGIudmVydGV4Tm9ybWFscyksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYU5vcm1hbC5sb2NhdGlvbiwzLGMuRkxPQVQsITEsMCwwKSksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVRleENvb3JkJiYoZC51dkJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC51dkJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIudXZzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMixjLkZMT0FULCExLDAsMCkpLGR9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZHJhd0J1ZmZlcnM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5HTDt0aGlzLl91c2VDb2xvclNoYWRlcigpO3ZhciBjPXRoaXMuZ0hhc2hbYV07cmV0dXJuIHRoaXMuX2RvU3Ryb2tlJiZjLmxpbmVWZXJ0ZXhDb3VudD4wJiYodGhpcy5jdXJTdHJva2VTaGFkZXIuYmluZFNoYWRlcigpLGMubGluZVZlcnRleEJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy5saW5lVmVydGV4QnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxiLkZMT0FULCExLDAsMCkpLGMubGluZU5vcm1hbEJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy5saW5lTm9ybWFsQnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uLmxvY2F0aW9uLDQsYi5GTE9BVCwhMSwwLDApKSx0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJTdHJva2VDb2xvciksdGhpcy5fZHJhd0FycmF5cyhiLlRSSUFOR0xFUyxhKSx0aGlzLmN1clN0cm9rZVNoYWRlci51bmJpbmRTaGFkZXIoKSksITEhPT10aGlzLl9kb0ZpbGwmJih0aGlzLmN1ckZpbGxTaGFkZXIuYmluZFNoYWRlcigpLGMudmVydGV4QnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLnZlcnRleEJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxiLkZMT0FULCExLDAsMCkpLGMuaW5kZXhCdWZmZXImJnRoaXMuX2JpbmRCdWZmZXIoYy5pbmRleEJ1ZmZlcixiLkVMRU1FTlRfQVJSQVlfQlVGRkVSKSxjLm5vcm1hbEJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy5ub3JtYWxCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYU5vcm1hbC5sb2NhdGlvbiwzLGIuRkxPQVQsITEsMCwwKSksYy51dkJ1ZmZlciYmKHRoaXMuX2JpbmRCdWZmZXIoYy51dkJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMixiLkZMT0FULCExLDAsMCkpLHRoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1ckZpbGxDb2xvciksdGhpcy5fZHJhd0VsZW1lbnRzKGIuVFJJQU5HTEVTLGEpLHRoaXMuY3VyRmlsbFNoYWRlci51bmJpbmRTaGFkZXIoKSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5kcmF3QnVmZmVyc1NjYWxlZD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3RoaXMudU1WTWF0cml4LnNjYWxlKGIsYyxkKSx0aGlzLmRyYXdCdWZmZXJzKGEpfWZpbmFsbHl7dGhpcy51TVZNYXRyaXg9ZX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdBcnJheXM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5HTC5kcmF3QXJyYXlzKGEsMCx0aGlzLmdIYXNoW2JdLmxpbmVWZXJ0ZXhDb3VudCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdFbGVtZW50cz1mdW5jdGlvbihhLGIpe3RoaXMuR0wuZHJhd0VsZW1lbnRzKGEsdGhpcy5nSGFzaFtiXS5udW1iZXJPZkl0ZW1zLHRoaXMuR0wuVU5TSUdORURfU0hPUlQsMCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9kcmF3UG9pbnRzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5HTDt0aGlzLl9iaW5kQnVmZmVyKGIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KGEpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1clBvaW50U2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clBvaW50U2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYy5GTE9BVCwhMSwwLDApLGMuZHJhd0FycmF5cyhjLlBvaW50cywwLGEubGVuZ3RoKX0sYi5leHBvcnRzPWQuUmVuZGVyZXJHTH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3NDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIiksZj1hKFwibGlidGVzc1wiKTthKFwiLi9wNS5TaGFkZXJcIiksYShcIi4vcDUuQ2FtZXJhXCIpLGEoXCIuLi9jb3JlL3A1LlJlbmRlcmVyXCIpLGEoXCIuL3A1Lk1hdHJpeFwiKTt2YXIgZz17aW1tZWRpYXRlVmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBhVmVydGV4Q29sb3I7XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgdVJlc29sdXRpb247XFxudW5pZm9ybSBmbG9hdCB1UG9pbnRTaXplO1xcblxcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG4gIHZDb2xvciA9IGFWZXJ0ZXhDb2xvcjtcXG4gIGdsX1BvaW50U2l6ZSA9IHVQb2ludFNpemU7XFxufVxcblwiLHZlcnRleENvbG9yVmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBhVmVydGV4Q29sb3I7XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG4gIHZDb2xvciA9IGFWZXJ0ZXhDb2xvcjtcXG59XFxuXCIsdmVydGV4Q29sb3JGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yO1xcbn1cIixub3JtYWxWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWMzIGFOb3JtYWw7XFxuYXR0cmlidXRlIHZlYzIgYVRleENvb3JkO1xcblxcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgdU5vcm1hbE1hdHJpeDtcXG5cXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG52YXJ5aW5nIGhpZ2hwIHZlYzIgdlZlcnRUZXhDb29yZDtcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdlZlcnRleE5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMzKCB1Tm9ybWFsTWF0cml4ICogYU5vcm1hbCApKTtcXG4gIHZWZXJ0VGV4Q29vcmQgPSBhVGV4Q29vcmQ7XFxufVxcblwiLG5vcm1hbEZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2VmVydGV4Tm9ybWFsLCAxLjApO1xcbn1cIixiYXNpY0ZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IHVNYXRlcmlhbENvbG9yO1xcbn1cIixsaWdodFZlcnQ6XCJhdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzMgYU5vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxuXFxudW5pZm9ybSBtYXQ0IHVWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG51bmlmb3JtIG1hdDMgdU5vcm1hbE1hdHJpeDtcXG51bmlmb3JtIGludCB1QW1iaWVudExpZ2h0Q291bnQ7XFxudW5pZm9ybSBpbnQgdURpcmVjdGlvbmFsTGlnaHRDb3VudDtcXG51bmlmb3JtIGludCB1UG9pbnRMaWdodENvdW50O1xcblxcbnVuaWZvcm0gdmVjMyB1QW1iaWVudENvbG9yWzhdO1xcbnVuaWZvcm0gdmVjMyB1TGlnaHRpbmdEaXJlY3Rpb25bOF07XFxudW5pZm9ybSB2ZWMzIHVEaXJlY3Rpb25hbENvbG9yWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodExvY2F0aW9uWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodENvbG9yWzhdO1xcbnVuaWZvcm0gYm9vbCB1U3BlY3VsYXI7XFxuXFxudmFyeWluZyB2ZWMzIHZWZXJ0ZXhOb3JtYWw7XFxudmFyeWluZyB2ZWMyIHZWZXJ0VGV4Q29vcmQ7XFxudmFyeWluZyB2ZWMzIHZMaWdodFdlaWdodGluZztcXG5cXG52b2lkIG1haW4odm9pZCl7XFxuXFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuXFxuICB2ZWMzIHZlcnRleE5vcm1hbCA9IG5vcm1hbGl6ZSh2ZWMzKCB1Tm9ybWFsTWF0cml4ICogYU5vcm1hbCApKTtcXG4gIHZWZXJ0ZXhOb3JtYWwgPSB2ZXJ0ZXhOb3JtYWw7XFxuICB2VmVydFRleENvb3JkID0gYVRleENvb3JkO1xcblxcbiAgdmVjNCBtdlBvc2l0aW9uID0gdU1vZGVsVmlld01hdHJpeCAqIHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgdmVjMyBleWVEaXJlY3Rpb24gPSBub3JtYWxpemUoLW12UG9zaXRpb24ueHl6KTtcXG5cXG4gIGZsb2F0IHNoaW5pbmVzcyA9IDMyLjA7XFxuICBmbG9hdCBzcGVjdWxhckZhY3RvciA9IDIuMDtcXG4gIGZsb2F0IGRpZmZ1c2VGYWN0b3IgPSAwLjM7XFxuXFxuICB2ZWMzIGFtYmllbnRMaWdodEZhY3RvciA9IHZlYzMoMC4wKTtcXG5cXG4gIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7XFxuICAgIGlmICh1QW1iaWVudExpZ2h0Q291bnQgPT0gaSkgYnJlYWs7XFxuICAgIGFtYmllbnRMaWdodEZhY3RvciArPSB1QW1iaWVudENvbG9yW2ldO1xcbiAgfVxcblxcblxcbiAgdmVjMyBkaXJlY3Rpb25hbExpZ2h0RmFjdG9yID0gdmVjMygwLjApO1xcblxcbiAgZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHtcXG4gICAgaWYgKHVEaXJlY3Rpb25hbExpZ2h0Q291bnQgPT0gaikgYnJlYWs7XFxuICAgIHZlYzMgZGlyID0gdUxpZ2h0aW5nRGlyZWN0aW9uW2pdO1xcbiAgICBmbG9hdCBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nID0gbWF4KGRvdCh2ZXJ0ZXhOb3JtYWwsIC1kaXIpLCAwLjApO1xcbiAgICBkaXJlY3Rpb25hbExpZ2h0RmFjdG9yICs9IHVEaXJlY3Rpb25hbENvbG9yW2pdICogZGlyZWN0aW9uYWxMaWdodFdlaWdodGluZztcXG4gIH1cXG5cXG5cXG4gIHZlYzMgcG9pbnRMaWdodEZhY3RvciA9IHZlYzMoMC4wKTtcXG5cXG4gIGZvciAoaW50IGsgPSAwOyBrIDwgODsgaysrKSB7XFxuICAgIGlmICh1UG9pbnRMaWdodENvdW50ID09IGspIGJyZWFrO1xcbiAgICB2ZWMzIGxvYyA9ICh1Vmlld01hdHJpeCAqIHZlYzQodVBvaW50TGlnaHRMb2NhdGlvbltrXSwgMS4wKSkueHl6O1xcbiAgICB2ZWMzIGxpZ2h0RGlyZWN0aW9uID0gbm9ybWFsaXplKGxvYyAtIG12UG9zaXRpb24ueHl6KTtcXG5cXG4gICAgZmxvYXQgZGlyZWN0aW9uYWxMaWdodFdlaWdodGluZyA9IG1heChkb3QodmVydGV4Tm9ybWFsLCBsaWdodERpcmVjdGlvbiksIDAuMCk7XFxuXFxuICAgIGZsb2F0IHNwZWN1bGFyTGlnaHRXZWlnaHRpbmcgPSAwLjA7XFxuICAgIGlmICh1U3BlY3VsYXIgKXtcXG4gICAgICB2ZWMzIHJlZmxlY3Rpb25EaXJlY3Rpb24gPSByZWZsZWN0KC1saWdodERpcmVjdGlvbiwgdmVydGV4Tm9ybWFsKTtcXG4gICAgICBzcGVjdWxhckxpZ2h0V2VpZ2h0aW5nID0gcG93KG1heChkb3QocmVmbGVjdGlvbkRpcmVjdGlvbiwgZXllRGlyZWN0aW9uKSwgMC4wKSwgc2hpbmluZXNzKTtcXG4gICAgfVxcblxcbiAgICBwb2ludExpZ2h0RmFjdG9yICs9IHVQb2ludExpZ2h0Q29sb3Jba10gKiAoc3BlY3VsYXJGYWN0b3IgKiBzcGVjdWxhckxpZ2h0V2VpZ2h0aW5nXFxuICAgICAgKyBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nICogZGlmZnVzZUZhY3Rvcik7XFxuICB9XFxuXFxuICB2TGlnaHRXZWlnaHRpbmcgPSAgYW1iaWVudExpZ2h0RmFjdG9yICsgZGlyZWN0aW9uYWxMaWdodEZhY3RvciArIHBvaW50TGlnaHRGYWN0b3I7XFxufVxcblwiLGxpZ2h0VGV4dHVyZUZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBib29sIGlzVGV4dHVyZTtcXG51bmlmb3JtIGJvb2wgdVVzZUxpZ2h0aW5nO1xcblxcbnZhcnlpbmcgdmVjMyB2TGlnaHRXZWlnaHRpbmc7XFxudmFyeWluZyBoaWdocCB2ZWMyIHZWZXJ0VGV4Q29vcmQ7XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG4gIGdsX0ZyYWdDb2xvciA9IGlzVGV4dHVyZSA/IHRleHR1cmUyRCh1U2FtcGxlciwgdlZlcnRUZXhDb29yZCkgOiB1TWF0ZXJpYWxDb2xvcjtcXG4gIGlmICh1VXNlTGlnaHRpbmcpXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgKj0gdkxpZ2h0V2VpZ2h0aW5nO1xcbn1cIixwaG9uZ1ZlcnQ6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzMgYU5vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxuXFxudW5pZm9ybSB2ZWMzIHVBbWJpZW50Q29sb3JbOF07XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyB1Tm9ybWFsTWF0cml4O1xcbnVuaWZvcm0gaW50IHVBbWJpZW50TGlnaHRDb3VudDtcXG5cXG52YXJ5aW5nIHZlYzMgdk5vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2QW1iaWVudENvbG9yO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG5cXG4gIHZlYzQgdmlld01vZGVsUG9zaXRpb24gPSB1TW9kZWxWaWV3TWF0cml4ICogdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuXFxuICAvLyBQYXNzIHZhcnlpbmdzIHRvIGZyYWdtZW50IHNoYWRlclxcbiAgdlZpZXdQb3NpdGlvbiA9IHZpZXdNb2RlbFBvc2l0aW9uLnh5ejtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB2aWV3TW9kZWxQb3NpdGlvbjsgIFxcblxcbiAgdk5vcm1hbCA9IG5vcm1hbGl6ZSh1Tm9ybWFsTWF0cml4ICogbm9ybWFsaXplKGFOb3JtYWwpKTtcXG4gIHZUZXhDb29yZCA9IGFUZXhDb29yZDtcXG5cXG4gIHZBbWJpZW50Q29sb3IgPSB2ZWMzKDAuMCk7XFxuICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykge1xcbiAgICBpZiAodUFtYmllbnRMaWdodENvdW50ID09IGkpIGJyZWFrO1xcbiAgICB2QW1iaWVudENvbG9yICs9IHVBbWJpZW50Q29sb3JbaV07XFxuICB9XFxufVxcblwiLFxucGhvbmdGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxuXFxuLy91bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVZpZXdNYXRyaXg7XFxuXFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyO1xcbnVuaWZvcm0gYm9vbCBpc1RleHR1cmU7XFxudW5pZm9ybSBib29sIHVVc2VMaWdodGluZztcXG5cXG51bmlmb3JtIHZlYzMgdUxpZ2h0aW5nRGlyZWN0aW9uWzhdO1xcbnVuaWZvcm0gdmVjMyB1RGlyZWN0aW9uYWxDb2xvcls4XTtcXG51bmlmb3JtIHZlYzMgdVBvaW50TGlnaHRMb2NhdGlvbls4XTtcXG51bmlmb3JtIHZlYzMgdVBvaW50TGlnaHRDb2xvcls4XTtcXG51bmlmb3JtIGJvb2wgdVNwZWN1bGFyO1xcblxcbnVuaWZvcm0gaW50IHVEaXJlY3Rpb25hbExpZ2h0Q291bnQ7XFxudW5pZm9ybSBpbnQgdVBvaW50TGlnaHRDb3VudDtcXG5cXG52YXJ5aW5nIHZlYzMgdk5vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2QW1iaWVudENvbG9yO1xcblxcbnZlYzMgVjtcXG52ZWMzIE47XFxuXFxuY29uc3QgZmxvYXQgc2hpbmluZXNzID0gMzIuMDtcXG5jb25zdCBmbG9hdCBzcGVjdWxhckZhY3RvciA9IDIuMDtcXG5jb25zdCBmbG9hdCBkaWZmdXNlRmFjdG9yID0gMC43MztcXG5cXG5zdHJ1Y3QgTGlnaHRSZXN1bHQge1xcblxcdGZsb2F0IHNwZWN1bGFyO1xcblxcdGZsb2F0IGRpZmZ1c2U7XFxufTtcXG5cXG5mbG9hdCBwaG9uZ1NwZWN1bGFyKFxcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcXG4gIGZsb2F0IHNoaW5pbmVzcykge1xcblxcbiAgdmVjMyBSID0gbm9ybWFsaXplKHJlZmxlY3QoLWxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSk7ICBcXG4gIHJldHVybiBwb3cobWF4KDAuMCwgZG90KFIsIHZpZXdEaXJlY3Rpb24pKSwgc2hpbmluZXNzKTtcXG59XFxuXFxuZmxvYXQgbGFtYmVydERpZmZ1c2UoXFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxcbiAgdmVjMyBzdXJmYWNlTm9ybWFsKSB7XFxuICByZXR1cm4gbWF4KDAuMCwgZG90KC1saWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCkpO1xcbn1cXG5cXG5MaWdodFJlc3VsdCBsaWdodCh2ZWMzIGxpZ2h0VmVjdG9yKSB7XFxuXFxuICB2ZWMzIEwgPSBub3JtYWxpemUobGlnaHRWZWN0b3IpO1xcblxcbiAgLy9jb21wdXRlIG91ciBkaWZmdXNlICYgc3BlY3VsYXIgdGVybXNcXG4gIExpZ2h0UmVzdWx0IGxyO1xcbiAgaWYgKHVTcGVjdWxhcilcXG4gICAgbHIuc3BlY3VsYXIgPSBwaG9uZ1NwZWN1bGFyKEwsIFYsIE4sIHNoaW5pbmVzcyk7XFxuICBsci5kaWZmdXNlID0gbGFtYmVydERpZmZ1c2UoTCwgTik7XFxuICByZXR1cm4gbHI7XFxufVxcblxcbnZvaWQgbWFpbih2b2lkKSB7XFxuXFxuICBWID0gbm9ybWFsaXplKHZWaWV3UG9zaXRpb24pO1xcbiAgTiA9IHZOb3JtYWw7XFxuXFxuICB2ZWMzIGRpZmZ1c2UgPSB2ZWMzKDAuMCk7XFxuICBmbG9hdCBzcGVjdWxhciA9IDAuMDtcXG5cXG4gIGZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKSB7XFxuICAgIGlmICh1RGlyZWN0aW9uYWxMaWdodENvdW50ID09IGopIGJyZWFrO1xcblxcbiAgICBMaWdodFJlc3VsdCByZXN1bHQgPSBsaWdodCh1TGlnaHRpbmdEaXJlY3Rpb25bal0pO1xcbiAgICBkaWZmdXNlICs9IHJlc3VsdC5kaWZmdXNlICogdURpcmVjdGlvbmFsQ29sb3Jbal07XFxuICAgIHNwZWN1bGFyICs9IHJlc3VsdC5zcGVjdWxhcjtcXG4gIH1cXG5cXG4gIGZvciAoaW50IGsgPSAwOyBrIDwgODsgaysrKSB7XFxuICAgIGlmICh1UG9pbnRMaWdodENvdW50ID09IGspIGJyZWFrO1xcblxcbiAgICB2ZWMzIGxpZ2h0UG9zaXRpb24gPSAodVZpZXdNYXRyaXggKiB2ZWM0KHVQb2ludExpZ2h0TG9jYXRpb25ba10sIDEuMCkpLnh5ejtcXG4gICAgdmVjMyBsaWdodFZlY3RvciA9IHZWaWV3UG9zaXRpb24gLSBsaWdodFBvc2l0aW9uO1xcblxcdFxcbiAgICAvL2NhbGN1bGF0ZSBhdHRlbnVhdGlvblxcbiAgICBmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKGxpZ2h0VmVjdG9yKTtcXG4gICAgZmxvYXQgZmFsbG9mZiA9IDUwMC4wIC8gKGxpZ2h0RGlzdGFuY2UgKyA1MDAuMCk7XFxuXFxuICAgIExpZ2h0UmVzdWx0IHJlc3VsdCA9IGxpZ2h0KGxpZ2h0VmVjdG9yKTtcXG4gICAgZGlmZnVzZSArPSByZXN1bHQuZGlmZnVzZSAqIGZhbGxvZmYgKiB1UG9pbnRMaWdodENvbG9yW2tdO1xcbiAgICBzcGVjdWxhciArPSByZXN1bHQuc3BlY3VsYXIgKiBmYWxsb2ZmO1xcbiAgfVxcblxcbiAgZ2xfRnJhZ0NvbG9yID0gaXNUZXh0dXJlID8gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VGV4Q29vcmQpIDogdU1hdGVyaWFsQ29sb3I7XFxuICBnbF9GcmFnQ29sb3IucmdiID0gZ2xfRnJhZ0NvbG9yLnJnYiAqIChkaWZmdXNlICogZGlmZnVzZUZhY3RvciArIHZBbWJpZW50Q29sb3IpICsgc3BlY3VsYXIgKiBzcGVjdWxhckZhY3RvcjtcXG59XCIsZm9udFZlcnQ6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG5hdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzIgYVRleENvb3JkO1xcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG5cXG51bmlmb3JtIHZlYzQgdUdseXBoUmVjdDtcXG51bmlmb3JtIGZsb2F0IHVHbHlwaE9mZnNldDtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcbnZhcnlpbmcgZmxvYXQgdztcXG5cXG52b2lkIG1haW4oKSB7XFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcblxcbiAgLy8gc2NhbGUgYnkgdGhlIHNpemUgb2YgdGhlIGdseXBoJ3MgcmVjdGFuZ2xlXFxuICBwb3NpdGlvblZlYzQueHkgKj0gdUdseXBoUmVjdC56dyAtIHVHbHlwaFJlY3QueHk7XFxuXFxuICAvLyBtb3ZlIHRvIHRoZSBjb3JuZXIgb2YgdGhlIGdseXBoXFxuICBwb3NpdGlvblZlYzQueHkgKz0gdUdseXBoUmVjdC54eTtcXG5cXG4gIC8vIG1vdmUgdG8gdGhlIGxldHRlcidzIGxpbmUgb2Zmc2V0XFxuICBwb3NpdGlvblZlYzQueCArPSB1R2x5cGhPZmZzZXQ7XFxuICBcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdlRleENvb3JkID0gYVRleENvb3JkO1xcbiAgdyA9IGdsX1Bvc2l0aW9uLnc7XFxufVxcblwiLGZvbnRGcmFnOlwiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG4jaWYgMFxcbiAgLy8gc2ltdWxhdGUgaW50ZWdlciBtYXRoIHVzaW5nIGZsb2F0c1xcblxcdCNkZWZpbmUgaW50IGZsb2F0XFxuXFx0I2RlZmluZSBpdmVjMiB2ZWMyXFxuXFx0I2RlZmluZSBJTlQoeCkgZmxvYXQoeClcXG5cXG5cXHRpbnQgaWZsb29yKGZsb2F0IHYpIHsgcmV0dXJuIGZsb29yKHYpOyB9XFxuXFx0aXZlYzIgaWZsb29yKHZlYzIgdikgeyByZXR1cm4gZmxvb3Iodik7IH1cXG5cXG4jZWxzZVxcbiAgLy8gdXNlIG5hdGl2ZSBpbnRlZ2VyIG1hdGhcXG5cXHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XFxuXFx0I2RlZmluZSBJTlQoeCkgeFxcblxcblxcdGludCBpZmxvb3IoZmxvYXQgdikgeyByZXR1cm4gaW50KHYpOyB9XFxuXFx0aW50IGlmbG9vcihpbnQgdikgeyByZXR1cm4gdjsgfVxcblxcdGl2ZWMyIGlmbG9vcih2ZWMyIHYpIHsgcmV0dXJuIGl2ZWMyKHYpOyB9XFxuXFxuI2VuZGlmXFxuXFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJTdHJva2VzO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyUm93U3Ryb2tlcztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlclJvd3M7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJDb2xTdHJva2VzO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyQ29scztcXG5cXG51bmlmb3JtIGl2ZWMyIHVTdHJva2VJbWFnZVNpemU7XFxudW5pZm9ybSBpdmVjMiB1Q2VsbHNJbWFnZVNpemU7XFxudW5pZm9ybSBpdmVjMiB1R3JpZEltYWdlU2l6ZTtcXG5cXG51bmlmb3JtIGl2ZWMyIHVHcmlkT2Zmc2V0O1xcbnVuaWZvcm0gaXZlYzIgdUdyaWRTaXplO1xcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG5cXG52YXJ5aW5nIHZlYzIgdlRleENvb3JkO1xcblxcbi8vIHNvbWUgaGVscGVyIGZ1bmN0aW9uc1xcbmludCByb3VuZChmbG9hdCB2KSB7IHJldHVybiBpZmxvb3IodiArIDAuNSk7IH1cXG5pdmVjMiByb3VuZCh2ZWMyIHYpIHsgcmV0dXJuIGlmbG9vcih2ICsgMC41KTsgfVxcbmZsb2F0IHNhdHVyYXRlKGZsb2F0IHYpIHsgcmV0dXJuIGNsYW1wKHYsIDAuMCwgMS4wKTsgfVxcbnZlYzIgc2F0dXJhdGUodmVjMiB2KSB7IHJldHVybiBjbGFtcCh2LCAwLjAsIDEuMCk7IH1cXG5cXG5pbnQgbXVsKGZsb2F0IHYxLCBpbnQgdjIpIHtcXG4gIHJldHVybiBpZmxvb3IodjEgKiBmbG9hdCh2MikpO1xcbn1cXG5cXG5pdmVjMiBtdWwodmVjMiB2MSwgaXZlYzIgdjIpIHtcXG4gIHJldHVybiBpZmxvb3IodjEgKiB2ZWMyKHYyKSArIDAuNSk7XFxufVxcblxcbi8vIHVucGFjayBhIDE2LWJpdCBpbnRlZ2VyIGZyb20gYSBmbG9hdCB2ZWMyXFxuaW50IGdldEludDE2KHZlYzIgdikge1xcbiAgaXZlYzIgaXYgPSByb3VuZCh2ICogMjU1LjApO1xcbiAgcmV0dXJuIGl2LnggKiBJTlQoMTI4KSArIGl2Lnk7XFxufVxcblxcbnZlYzIgcGl4ZWxTY2FsZTtcXG52ZWMyIGNvdmVyYWdlID0gdmVjMigwLjApO1xcbnZlYzIgd2VpZ2h0ID0gdmVjMigwLjUpO1xcbmNvbnN0IGZsb2F0IG1pbkRpc3RhbmNlID0gMS4wLzgxOTIuMDtcXG5jb25zdCBmbG9hdCBoYXJkbmVzcyA9IDEuMDU7IC8vIGFtb3VudCBvZiBhbnRpYWxpYXNcXG5cXG4vLyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY3VydmVzIGluIGEgZ2x5cGhcXG5jb25zdCBpbnQgTiA9IElOVCgyNTApO1xcblxcbi8vIHJldHJpZXZlcyBhbiBpbmRleGVkIHBpeGVsIGZyb20gYSBzYW1wbGVyXFxudmVjNCBnZXRUZXhlbChzYW1wbGVyMkQgc2FtcGxlciwgaW50IHBvcywgaXZlYzIgc2l6ZSkge1xcbiAgaW50IHdpZHRoID0gc2l6ZS54O1xcbiAgaW50IHkgPSBpZmxvb3IocG9zIC8gd2lkdGgpO1xcbiAgaW50IHggPSBwb3MgLSB5ICogd2lkdGg7ICAvLyBwb3MgJSB3aWR0aFxcblxcbiAgcmV0dXJuIHRleHR1cmUyRChzYW1wbGVyLCAodmVjMih4LCB5KSArIDAuNSkgLyB2ZWMyKHNpemUpKTtcXG59XFxuXFxudm9pZCBjYWx1bGF0ZUNyb3NzaW5ncyh2ZWMyIHAwLCB2ZWMyIHAxLCB2ZWMyIHAyLCBvdXQgdmVjMiBDMSwgb3V0IHZlYzIgQzIpIHtcXG5cXG4gIC8vIGdldCB0aGUgY29lZmZpY2llbnRzIG9mIHRoZSBxdWFkcmF0aWMgaW4gdFxcbiAgdmVjMiBhID0gcDAgLSBwMSAqIDIuMCArIHAyO1xcbiAgdmVjMiBiID0gcDAgLSBwMTtcXG4gIHZlYzIgYyA9IHAwIC0gdlRleENvb3JkO1xcblxcbiAgLy8gZm91bmQgb3V0IHdoaWNoIHZhbHVlcyBvZiAndCcgaXQgY3Jvc3NlcyB0aGUgYXhlc1xcbiAgdmVjMiBzdXJkID0gc3FydChtYXgodmVjMigwLjApLCBiICogYiAtIGEgKiBjKSk7XFxuICB2ZWMyIHQxID0gKChiIC0gc3VyZCkgLyBhKS55eDtcXG4gIHZlYzIgdDIgPSAoKGIgKyBzdXJkKSAvIGEpLnl4O1xcblxcbiAgLy8gYXBwcm94aW1hdGUgc3RyYWlnaHQgbGluZXMgdG8gYXZvaWQgcm91bmRpbmcgZXJyb3JzXFxuICBpZiAoYWJzKGEueSkgPCAwLjAwMSlcXG4gICAgdDEueCA9IHQyLnggPSBjLnkgLyAoMi4wICogYi55KTtcXG5cXG4gIGlmIChhYnMoYS54KSA8IDAuMDAxKVxcbiAgICB0MS55ID0gdDIueSA9IGMueCAvICgyLjAgKiBiLngpO1xcblxcbiAgLy8gcGx1ZyBpbnRvIHF1YWRyYXRpYyBmb3JtdWxhIHRvIGZpbmQgdGhlIGNvcnJkaW5hdGVzIG9mIHRoZSBjcm9zc2luZ3NcXG4gIEMxID0gKChhICogdDEgLSBiICogMi4wKSAqIHQxICsgYykgKiBwaXhlbFNjYWxlO1xcbiAgQzIgPSAoKGEgKiB0MiAtIGIgKiAyLjApICogdDIgKyBjKSAqIHBpeGVsU2NhbGU7XFxufVxcblxcbnZvaWQgY292ZXJhZ2VYKHZlYzIgcDAsIHZlYzIgcDEsIHZlYzIgcDIpIHtcXG5cXG4gIHZlYzIgQzEsIEMyO1xcbiAgY2FsdWxhdGVDcm9zc2luZ3MocDAsIHAxLCBwMiwgQzEsIEMyKTtcXG5cXG4gIC8vIGRldGVybWluZSBvbiB3aGljaCBzaWRlIG9mIHRoZSB4LWF4aXMgdGhlIHBvaW50cyBsaWVcXG4gIGJvb2wgeTAgPSBwMC55ID4gdlRleENvb3JkLnk7XFxuICBib29sIHkxID0gcDEueSA+IHZUZXhDb29yZC55O1xcbiAgYm9vbCB5MiA9IHAyLnkgPiB2VGV4Q29vcmQueTtcXG5cXG4gIC8vIGNvdWxkIHdlYiBiZSB1bmRlciB0aGUgY3VydmUgKGFmdGVyIHQxKT9cXG4gIGlmICh5MSA/ICF5MiA6IHkwKSB7XFxuICAgIC8vIGFkZCB0aGUgY292ZXJhZ2UgZm9yIHQxXFxuICAgIGNvdmVyYWdlLnggKz0gc2F0dXJhdGUoQzEueCArIDAuNSk7XFxuICAgIC8vIGNhbGN1bGF0ZSB0aGUgYW50aS1hbGlhc2luZyBmb3IgdDFcXG4gICAgd2VpZ2h0LnggPSBtaW4od2VpZ2h0LngsIGFicyhDMS54KSk7XFxuICB9XFxuXFxuICAvLyBhcmUgd2Ugb3V0c2lkZSB0aGUgY3VydmUgKGFmdGVyIHQyKT9cXG4gIGlmICh5MSA/ICF5MCA6IHkyKSB7XFxuICAgIC8vIHN1YnRyYWN0IHRoZSBjb3ZlcmFnZSBmb3IgdDJcXG4gICAgY292ZXJhZ2UueCAtPSBzYXR1cmF0ZShDMi54ICsgMC41KTtcXG4gICAgLy8gY2FsY3VsYXRlIHRoZSBhbnRpLWFsaWFzaW5nIGZvciB0MlxcbiAgICB3ZWlnaHQueCA9IG1pbih3ZWlnaHQueCwgYWJzKEMyLngpKTtcXG4gIH1cXG59XFxuXFxuLy8gdGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBjb3ZlcmFnZVgsIGJ1dCB3aXRoIHRoZSBheGVzIHN3YXBwZWRcXG52b2lkIGNvdmVyYWdlWSh2ZWMyIHAwLCB2ZWMyIHAxLCB2ZWMyIHAyKSB7XFxuXFxuICB2ZWMyIEMxLCBDMjtcXG4gIGNhbHVsYXRlQ3Jvc3NpbmdzKHAwLCBwMSwgcDIsIEMxLCBDMik7XFxuXFxuICBib29sIHgwID0gcDAueCA+IHZUZXhDb29yZC54O1xcbiAgYm9vbCB4MSA9IHAxLnggPiB2VGV4Q29vcmQueDtcXG4gIGJvb2wgeDIgPSBwMi54ID4gdlRleENvb3JkLng7XFxuXFxuICBpZiAoeDEgPyAheDIgOiB4MCkge1xcbiAgICBjb3ZlcmFnZS55IC09IHNhdHVyYXRlKEMxLnkgKyAwLjUpO1xcbiAgICB3ZWlnaHQueSA9IG1pbih3ZWlnaHQueSwgYWJzKEMxLnkpKTtcXG4gIH1cXG5cXG4gIGlmICh4MSA/ICF4MCA6IHgyKSB7XFxuICAgIGNvdmVyYWdlLnkgKz0gc2F0dXJhdGUoQzIueSArIDAuNSk7XFxuICAgIHdlaWdodC55ID0gbWluKHdlaWdodC55LCBhYnMoQzIueSkpO1xcbiAgfVxcbn1cXG5cXG52b2lkIG1haW4oKSB7XFxuXFxuICAvLyBjYWxjdWxhdGUgdGhlIHBpeGVsIHNjYWxlIGJhc2VkIG9uIHNjcmVlbi1jb29yZGluYXRlc1xcbiAgcGl4ZWxTY2FsZSA9IGhhcmRuZXNzIC8gZndpZHRoKHZUZXhDb29yZCk7XFxuXFxuICAvLyB3aGljaCBncmlkIGNlbGwgaXMgdGhpcyBwaXhlbCBpbj9cXG4gIGl2ZWMyIGdyaWRDb29yZCA9IGlmbG9vcih2VGV4Q29vcmQgKiB2ZWMyKHVHcmlkU2l6ZSkpO1xcblxcbiAgLy8gaW50ZXJzZWN0IGN1cnZlcyBpbiB0aGlzIHJvd1xcbiAge1xcbiAgICAvLyB0aGUgaW5kZXggaW50byB0aGUgcm93IGluZm8gYml0bWFwXFxuICAgIGludCByb3dJbmRleCA9IGdyaWRDb29yZC55ICsgdUdyaWRPZmZzZXQueTtcXG4gICAgLy8gZmV0Y2ggdGhlIGluZm8gdGV4ZWxcXG4gICAgdmVjNCByb3dJbmZvID0gZ2V0VGV4ZWwodVNhbXBsZXJSb3dzLCByb3dJbmRleCwgdUdyaWRJbWFnZVNpemUpO1xcbiAgICAvLyB1bnBhY2sgdGhlIHJvd0luZm9cXG4gICAgaW50IHJvd1N0cm9rZUluZGV4ID0gZ2V0SW50MTYocm93SW5mby54eSk7XFxuICAgIGludCByb3dTdHJva2VDb3VudCA9IGdldEludDE2KHJvd0luZm8uencpO1xcblxcbiAgICBmb3IgKGludCBpUm93U3Ryb2tlID0gSU5UKDApOyBpUm93U3Ryb2tlIDwgTjsgaVJvd1N0cm9rZSsrKSB7XFxuICAgICAgaWYgKGlSb3dTdHJva2UgPj0gcm93U3Ryb2tlQ291bnQpXFxuICAgICAgICBicmVhaztcXG5cXG4gICAgICAvLyBlYWNoIHN0cm9rZSBpcyBtYWRlIHVwIG9mIDMgcG9pbnRzOiB0aGUgc3RhcnQgYW5kIGNvbnRyb2wgcG9pbnRcXG4gICAgICAvLyBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGN1cnZlLlxcbiAgICAgIC8vIGZldGNoIHRoZSBpbmRpY2VzIG9mIHRoaXMgcGFpciBvZiBzdHJva2VzOlxcbiAgICAgIHZlYzQgc3Ryb2tlSW5kaWNlcyA9IGdldFRleGVsKHVTYW1wbGVyUm93U3Ryb2tlcywgcm93U3Ryb2tlSW5kZXgrKywgdUNlbGxzSW1hZ2VTaXplKTtcXG5cXG4gICAgICAvLyB1bnBhY2sgdGhlIHN0cm9rZSBpbmRleFxcbiAgICAgIGludCBzdHJva2VQb3MgPSBnZXRJbnQxNihzdHJva2VJbmRpY2VzLnh5KTtcXG5cXG4gICAgICAvLyBmZXRjaCB0aGUgdHdvIHN0cm9rZXNcXG4gICAgICB2ZWM0IHN0cm9rZTAgPSBnZXRUZXhlbCh1U2FtcGxlclN0cm9rZXMsIHN0cm9rZVBvcyArIElOVCgwKSwgdVN0cm9rZUltYWdlU2l6ZSk7XFxuICAgICAgdmVjNCBzdHJva2UxID0gZ2V0VGV4ZWwodVNhbXBsZXJTdHJva2VzLCBzdHJva2VQb3MgKyBJTlQoMSksIHVTdHJva2VJbWFnZVNpemUpO1xcblxcbiAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgY292ZXJhZ2VcXG4gICAgICBjb3ZlcmFnZVgoc3Ryb2tlMC54eSwgc3Ryb2tlMC56dywgc3Ryb2tlMS54eSk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC8vIGludGVyc2VjdCBjdXJ2ZXMgaW4gdGhpcyBjb2x1bW5cXG4gIHtcXG4gICAgaW50IGNvbEluZGV4ID0gZ3JpZENvb3JkLnggKyB1R3JpZE9mZnNldC54O1xcbiAgICB2ZWM0IGNvbEluZm8gPSBnZXRUZXhlbCh1U2FtcGxlckNvbHMsIGNvbEluZGV4LCB1R3JpZEltYWdlU2l6ZSk7XFxuICAgIGludCBjb2xTdHJva2VJbmRleCA9IGdldEludDE2KGNvbEluZm8ueHkpO1xcbiAgICBpbnQgY29sU3Ryb2tlQ291bnQgPSBnZXRJbnQxNihjb2xJbmZvLnp3KTtcXG4gICAgXFxuICAgIGZvciAoaW50IGlDb2xTdHJva2UgPSBJTlQoMCk7IGlDb2xTdHJva2UgPCBOOyBpQ29sU3Ryb2tlKyspIHtcXG4gICAgICBpZiAoaUNvbFN0cm9rZSA+PSBjb2xTdHJva2VDb3VudClcXG4gICAgICAgIGJyZWFrO1xcblxcbiAgICAgIHZlYzQgc3Ryb2tlSW5kaWNlcyA9IGdldFRleGVsKHVTYW1wbGVyQ29sU3Ryb2tlcywgY29sU3Ryb2tlSW5kZXgrKywgdUNlbGxzSW1hZ2VTaXplKTtcXG5cXG4gICAgICBpbnQgc3Ryb2tlUG9zID0gZ2V0SW50MTYoc3Ryb2tlSW5kaWNlcy54eSk7XFxuICAgICAgdmVjNCBzdHJva2UwID0gZ2V0VGV4ZWwodVNhbXBsZXJTdHJva2VzLCBzdHJva2VQb3MgKyBJTlQoMCksIHVTdHJva2VJbWFnZVNpemUpO1xcbiAgICAgIHZlYzQgc3Ryb2tlMSA9IGdldFRleGVsKHVTYW1wbGVyU3Ryb2tlcywgc3Ryb2tlUG9zICsgSU5UKDEpLCB1U3Ryb2tlSW1hZ2VTaXplKTtcXG4gICAgICBjb3ZlcmFnZVkoc3Ryb2tlMC54eSwgc3Ryb2tlMC56dywgc3Ryb2tlMS54eSk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIHdlaWdodCA9IHNhdHVyYXRlKDEuMCAtIHdlaWdodCAqIDIuMCk7XFxuICBmbG9hdCBkaXN0YW5jZSA9IG1heCh3ZWlnaHQueCArIHdlaWdodC55LCBtaW5EaXN0YW5jZSk7IC8vIG1hbmhhdHRhbiBhcHByb3guXFxuICBmbG9hdCBhbnRpYWxpYXMgPSBhYnMoZG90KGNvdmVyYWdlLCB3ZWlnaHQpIC8gZGlzdGFuY2UpO1xcbiAgZmxvYXQgY292ZXIgPSBtaW4oYWJzKGNvdmVyYWdlLngpLCBhYnMoY292ZXJhZ2UueSkpO1xcbiAgZ2xfRnJhZ0NvbG9yID0gdU1hdGVyaWFsQ29sb3I7XFxuICBnbF9GcmFnQ29sb3IuYSAqPSBzYXR1cmF0ZShtYXgoYW50aWFsaWFzLCBjb3ZlcikpO1xcbn1cIixsaW5lVmVydDpcIi8qXFxuICBQYXJ0IG9mIHRoZSBQcm9jZXNzaW5nIHByb2plY3QgLSBodHRwOi8vcHJvY2Vzc2luZy5vcmdcXG4gIENvcHlyaWdodCAoYykgMjAxMi0xNSBUaGUgUHJvY2Vzc2luZyBGb3VuZGF0aW9uXFxuICBDb3B5cmlnaHQgKGMpIDIwMDQtMTIgQmVuIEZyeSBhbmQgQ2FzZXkgUmVhc1xcbiAgQ29weXJpZ2h0IChjKSAyMDAxLTA0IE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3lcXG4gIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3JcXG4gIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWNcXG4gIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4xLlxcbiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXFxuICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxcbiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcXG4gIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXFxuICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWxcXG4gIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZVxcbiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCxcXG4gIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQVxcbiovXFxuXFxuI2RlZmluZSBQUk9DRVNTSU5HX0xJTkVfU0hBREVSXFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgdVN0cm9rZVdlaWdodDtcXG5cXG51bmlmb3JtIHZlYzQgdVZpZXdwb3J0O1xcblxcbi8vIHVzaW5nIGEgc2NhbGUgPDEgbW92ZXMgdGhlIGxpbmVzIHRvd2FyZHMgdGhlIGNhbWVyYVxcbi8vIGluIG9yZGVyIHRvIHByZXZlbnQgcG9wcGluZyBlZmZlY3RzIGR1ZSB0byBoYWxmIG9mXFxuLy8gdGhlIGxpbmUgZGlzYXBwZWFyaW5nIGJlaGluZCB0aGUgZ2VvbWV0cnkgZmFjZXMuXFxudmVjMyBzY2FsZSA9IHZlYzMoMC45OTk1KTtcXG5cXG5hdHRyaWJ1dGUgdmVjNCBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzQgYURpcmVjdGlvbjtcXG4gIFxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzQgcG9zcCA9IHVNb2RlbFZpZXdNYXRyaXggKiBhUG9zaXRpb247XFxuICB2ZWM0IHBvc3EgPSB1TW9kZWxWaWV3TWF0cml4ICogKGFQb3NpdGlvbiArIHZlYzQoYURpcmVjdGlvbi54eXosIDApKTtcXG5cXG4gIC8vIE1vdmluZyB2ZXJ0aWNlcyBzbGlnaHRseSB0b3dhcmQgdGhlIGNhbWVyYVxcbiAgLy8gdG8gYXZvaWQgZGVwdGgtZmlnaHRpbmcgd2l0aCB0aGUgZmlsbCB0cmlhbmdsZXMuXFxuICAvLyBEaXNjdXNzZWQgaGVyZTpcXG4gIC8vIGh0dHA6Ly93d3cub3BlbmdsLm9yZy9kaXNjdXNzaW9uX2JvYXJkcy91YmJ0aHJlYWRzLnBocD91YmI9c2hvd2ZsYXQmTnVtYmVyPTI1Mjg0OCAgXFxuICBwb3NwLnh5eiA9IHBvc3AueHl6ICogc2NhbGU7XFxuICBwb3NxLnh5eiA9IHBvc3EueHl6ICogc2NhbGU7XFxuXFxuICB2ZWM0IHAgPSB1UHJvamVjdGlvbk1hdHJpeCAqIHBvc3A7XFxuICB2ZWM0IHEgPSB1UHJvamVjdGlvbk1hdHJpeCAqIHBvc3E7XFxuXFxuICAvLyBmb3JtdWxhIHRvIGNvbnZlcnQgZnJvbSBjbGlwIHNwYWNlIChyYW5nZSAtMS4uMSkgdG8gc2NyZWVuIHNwYWNlIChyYW5nZSAwLi5bd2lkdGggb3IgaGVpZ2h0XSlcXG4gIC8vIHNjcmVlbl9wID0gKHAueHkvcC53ICsgPDEsMT4pICogMC41ICogdVZpZXdwb3J0Lnp3XFxuXFxuICAvLyBwcmV2ZW50IGRpdmlzaW9uIGJ5IFcgYnkgdHJhbnNmb3JtaW5nIHRoZSB0YW5nZW50IGZvcm11bGEgKGRpdiBieSAwIGNhdXNlc1xcbiAgLy8gdGhlIGxpbmUgdG8gZGlzYXBwZWFyLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb2Nlc3NpbmcvcHJvY2Vzc2luZy9pc3N1ZXMvNTE4MylcXG4gIC8vIHQgPSBzY3JlZW5fcSAtIHNjcmVlbl9wXFxuICAvL1xcbiAgLy8gdGFuZ2VudCBpcyBub3JtYWxpemVkIGFuZCB3ZSBkb24ndCBjYXJlIHdoaWNoIGFEaXJlY3Rpb24gaXQgcG9pbnRzIHRvICgrLSlcXG4gIC8vIHQgPSArLSBub3JtYWxpemUoIHNjcmVlbl9xIC0gc2NyZWVuX3AgKVxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKHEueHkvcS53KzwxLDE+KSowLjUqdVZpZXdwb3J0Lnp3IC0gKHAueHkvcC53KzwxLDE+KSowLjUqdVZpZXdwb3J0Lnp3IClcXG4gIC8vXFxuICAvLyBleHRyYWN0IGNvbW1vbiBmYWN0b3IsIDwxLDE+IC0gPDEsMT4gY2FuY2VscyBvdXRcXG4gIC8vIHQgPSArLSBub3JtYWxpemUoIChxLnh5L3EudyAtIHAueHkvcC53KSAqIDAuNSAqIHVWaWV3cG9ydC56dyApXFxuICAvL1xcbiAgLy8gY29udmVydCB0byBjb21tb24gZGl2aXNvclxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKChxLnh5KnAudyAtIHAueHkqcS53KSAvIChwLncqcS53KSkgKiAwLjUgKiB1Vmlld3BvcnQuencgKVxcbiAgLy9cXG4gIC8vIHJlbW92ZSB0aGUgY29tbW9uIHNjYWxhciBkaXZpc29yL2ZhY3Rvciwgbm90IG5lZWRlZCBkdWUgdG8gbm9ybWFsaXplIGFuZCArLVxcbiAgLy8gKGtlZXAgdVZpZXdwb3J0IC0gY2FuJ3QgcmVtb3ZlIGJlY2F1c2UgaXQgaGFzIGRpZmZlcmVudCBjb21wb25lbnRzIGZvciB4IGFuZCB5XFxuICAvLyAgYW5kIGNvcnJlY3RzIGZvciBhc3BlY3QgcmF0aW8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvY2Vzc2luZy9wcm9jZXNzaW5nL2lzc3Vlcy81MTgxKVxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKHEueHkqcC53IC0gcC54eSpxLncpICogdVZpZXdwb3J0Lnp3IClcXG5cXG4gIHZlYzIgdGFuZ2VudCA9IG5vcm1hbGl6ZSgocS54eSpwLncgLSBwLnh5KnEudykgKiB1Vmlld3BvcnQuencpO1xcblxcbiAgLy8gZmxpcCB0YW5nZW50IHRvIG5vcm1hbCAoaXQncyBhbHJlYWR5IG5vcm1hbGl6ZWQpXFxuICB2ZWMyIG5vcm1hbCA9IHZlYzIoLXRhbmdlbnQueSwgdGFuZ2VudC54KTtcXG5cXG4gIGZsb2F0IHRoaWNrbmVzcyA9IGFEaXJlY3Rpb24udyAqIHVTdHJva2VXZWlnaHQ7XFxuICB2ZWMyIG9mZnNldCA9IG5vcm1hbCAqIHRoaWNrbmVzcyAvIDIuMDtcXG5cXG4gIC8vIFBlcnNwZWN0aXZlIC0tLVxcbiAgLy8gY29udmVydCBmcm9tIHdvcmxkIHRvIGNsaXAgYnkgbXVsdGlwbHlpbmcgd2l0aCBwcm9qZWN0aW9uIHNjYWxpbmcgZmFjdG9yXFxuICAvLyB0byBnZXQgdGhlIHJpZ2h0IHRoaWNrbmVzcyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9jZXNzaW5nL3Byb2Nlc3NpbmcvaXNzdWVzLzUxODIpXFxuICAvLyBpbnZlcnQgWSwgcHJvamVjdGlvbnMgaW4gUHJvY2Vzc2luZyBpbnZlcnQgWVxcbiAgdmVjMiBwZXJzcFNjYWxlID0gKHVQcm9qZWN0aW9uTWF0cml4ICogdmVjNCgxLCAtMSwgMCwgMCkpLnh5O1xcblxcbiAgLy8gTm8gUGVyc3BlY3RpdmUgLS0tXFxuICAvLyBtdWx0aXBseSBieSBXICh0byBjYW5jZWwgb3V0IGRpdmlzaW9uIGJ5IFcgbGF0ZXIgaW4gdGhlIHBpcGVsaW5lKSBhbmRcXG4gIC8vIGNvbnZlcnQgZnJvbSBzY3JlZW4gdG8gY2xpcCAoZGVyaXZlZCBmcm9tIGNsaXAgdG8gc2NyZWVuIGFib3ZlKVxcbiAgdmVjMiBub1BlcnNwU2NhbGUgPSBwLncgLyAoMC41ICogdVZpZXdwb3J0Lnp3KTtcXG5cXG4gIC8vZ2xfUG9zaXRpb24ueHkgPSBwLnh5ICsgb2Zmc2V0Lnh5ICogbWl4KG5vUGVyc3BTY2FsZSwgcGVyc3BTY2FsZSwgZmxvYXQocGVyc3BlY3RpdmUgPiAwKSk7XFxuICBnbF9Qb3NpdGlvbi54eSA9IHAueHkgKyBvZmZzZXQueHkgKiBwZXJzcFNjYWxlO1xcbiAgZ2xfUG9zaXRpb24uencgPSBwLnp3O1xcbn1cXG5cIixsaW5lRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnByZWNpc2lvbiBtZWRpdW1wIGludDtcXG5cXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxuXFxudm9pZCBtYWluKCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdU1hdGVyaWFsQ29sb3I7XFxufVwiLHBvaW50VmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG51bmlmb3JtIGZsb2F0IHVQb2ludFNpemU7XFxudmFyeWluZyBmbG9hdCB2U3Ryb2tlV2VpZ2h0O1xcbnVuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1UHJvamVjdGlvbk1hdHJpeDtcXG52b2lkIG1haW4oKSB7XFxuXFx0dmVjNCBwb3NpdGlvblZlYzQgPSAgdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuXFx0Z2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuXFx0Z2xfUG9pbnRTaXplID0gdVBvaW50U2l6ZTtcXG5cXHR2U3Ryb2tlV2VpZ2h0ID0gdVBvaW50U2l6ZTtcXG59XCIscG9pbnRGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxucHJlY2lzaW9uIG1lZGl1bXAgaW50O1xcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG52YXJ5aW5nIGZsb2F0IHZTdHJva2VXZWlnaHQ7XFxuXFxudm9pZCBtYWluKCl7XFxuXFx0ZmxvYXQgbWFzayA9IDAuMDtcXG5cXG5cXHQvLyBtYWtlIGEgY2lyY3VsYXIgbWFzayB1c2luZyB0aGUgZ2xfUG9pbnRDb29yZCAoZ29lcyBmcm9tIDAgLSAxIG9uIGEgcG9pbnQpXFxuICAgIC8vIG1pZ2h0IGJlIGFibGUgdG8gZ2V0IGEgbmljZXIgZWRnZSBvbiBiaWcgc3Ryb2tld2VpZ2h0cyB3aXRoIHNtb290aHN0ZXAgYnV0IHNsaWdodGx5IGxlc3MgcGVyZm9ybWFudFxcblxcblxcdG1hc2sgPSBzdGVwKDAuOTgsIGxlbmd0aChnbF9Qb2ludENvb3JkICogMi4wIC0gMS4wKSk7XFxuXFxuXFx0Ly8gaWYgc3Ryb2tlV2VpZ2h0IGlzIDEgb3IgbGVzcyBsZXRzIGp1c3QgZHJhdyBhIHNxdWFyZVxcblxcdC8vIHRoaXMgcHJldmVudHMgd2VpcmQgYXJ0aWZhY3RpbmcgZnJvbSBjYXJ2aW5nIGNpcmNsZXMgd2hlbiBvdXIgcG9pbnRzIGFyZSByZWFsbHkgc21hbGxcXG5cXHQvLyBpZiBzdHJva2VXZWlnaHQgaXMgbGFyZ2VyIHRoYW4gMSwgd2UganVzdCB1c2UgaXQgYXMgaXNcXG5cXG5cXHRtYXNrID0gbWl4KDAuMCwgbWFzaywgY2xhbXAoZmxvb3IodlN0cm9rZVdlaWdodCAtIDAuNSksMC4wLDEuMCkpO1xcblxcblxcdC8vIHRocm93IGF3YXkgdGhlIGJvcmRlcnMgb2YgdGhlIG1hc2tcXG4gICAgLy8gb3RoZXJ3aXNlIHdlIGdldCB3ZWlyZCBhbHBoYSBibGVuZGluZyBpc3N1ZXNcXG5cXG5cXHRpZihtYXNrID4gMC45OCl7XFxuICAgICAgZGlzY2FyZDtcXG4gIFxcdH1cXG5cXG4gIFxcdGdsX0ZyYWdDb2xvciA9IHZlYzQodU1hdGVyaWFsQ29sb3IucmdiICogKDEuMCAtIG1hc2spLCB1TWF0ZXJpYWxDb2xvci5hKSA7XFxufVwifTtkLlJlbmRlcmVyR0w9ZnVuY3Rpb24oYSxiLGMsZSl7cmV0dXJuIGQuUmVuZGVyZXIuY2FsbCh0aGlzLGEsYixjKSx0aGlzLmF0dHJpYnV0ZXM9e30sZT1lfHx7fSx0aGlzLmF0dHJpYnV0ZXMuYWxwaGE9dm9pZCAwPT09ZS5hbHBoYXx8ZS5hbHBoYSx0aGlzLmF0dHJpYnV0ZXMuZGVwdGg9dm9pZCAwPT09ZS5kZXB0aHx8ZS5kZXB0aCx0aGlzLmF0dHJpYnV0ZXMuc3RlbmNpbD12b2lkIDA9PT1lLnN0ZW5jaWx8fGUuc3RlbmNpbCx0aGlzLmF0dHJpYnV0ZXMuYW50aWFsaWFzPXZvaWQgMCE9PWUuYW50aWFsaWFzJiZlLmFudGlhbGlhcyx0aGlzLmF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhPXZvaWQgMCE9PWUucHJlbXVsdGlwbGllZEFscGhhJiZlLnByZW11bHRpcGxpZWRBbHBoYSx0aGlzLmF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyPXZvaWQgMD09PWUucHJlc2VydmVEcmF3aW5nQnVmZmVyfHxlLnByZXNlcnZlRHJhd2luZ0J1ZmZlcix0aGlzLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZz12b2lkIDAhPT1lLnBlclBpeGVsTGlnaHRpbmcmJmUucGVyUGl4ZWxMaWdodGluZyx0aGlzLl9pbml0Q29udGV4dCgpLHRoaXMuaXNQM0Q9ITAsdGhpcy5HTD10aGlzLmRyYXdpbmdDb250ZXh0LHRoaXMuYW1iaWVudExpZ2h0Q29sb3JzPVtdLHRoaXMuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbnM9W10sdGhpcy5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzPVtdLHRoaXMucG9pbnRMaWdodFBvc2l0aW9ucz1bXSx0aGlzLnBvaW50TGlnaHRDb2xvcnM9W10sdGhpcy51TVZNYXRyaXg9bmV3IGQuTWF0cml4LHRoaXMudVBNYXRyaXg9bmV3IGQuTWF0cml4LHRoaXMudU5NYXRyaXg9bmV3IGQuTWF0cml4KFwibWF0M1wiKSx0aGlzLl9jdXJDYW1lcmE9bmV3IGQuQ2FtZXJhKHRoaXMpLHRoaXMuX2N1ckNhbWVyYS5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncygpLHRoaXMuX2N1ckNhbWVyYS5fc2V0RGVmYXVsdENhbWVyYSgpLHRoaXMuZ0hhc2g9e30sdGhpcy5fZGVmYXVsdExpZ2h0U2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcj12b2lkIDAsdGhpcy5fZGVmYXVsdE5vcm1hbFNoYWRlcj12b2lkIDAsdGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXI9dm9pZCAwLHRoaXMuY3VyRmlsbFNoYWRlcj12b2lkIDAsdGhpcy5jdXJTdHJva2VTaGFkZXI9dm9pZCAwLHRoaXMuY3VyUG9pbnRTaGFkZXI9dm9pZCAwLHRoaXMuX3VzZUNvbG9yU2hhZGVyKCksdGhpcy5zZXRTdHJva2VTaGFkZXIodGhpcy5fZ2V0TGluZVNoYWRlcigpKSx0aGlzLl91c2VQb2ludFNoYWRlcigpLHRoaXMuX3BvaW50VmVydGV4QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pc0ltbWVkaWF0ZURyYXdpbmc9ITEsdGhpcy5pbW1lZGlhdGVNb2RlPXt9LHRoaXMuZmlsbCgyNTUsMjU1LDI1NSwyNTUpLHRoaXMucG9pbnRTaXplPTUsdGhpcy5zdHJva2VXZWlnaHQoMSksdGhpcy5zdHJva2UoMCwwLDApLHRoaXMudGV4dHVyZXM9W10sdGhpcy5fY3VydmVUaWdodG5lc3M9Nix0aGlzLl9sb29rVXBUYWJsZUJlemllcj1bXSx0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpYz1bXSx0aGlzLl9sdXRCZXppZXJEZXRhaWw9MCx0aGlzLl9sdXRRdWFkcmF0aWNEZXRhaWw9MCx0aGlzLl90ZXNzeT10aGlzLl9pbml0VGVzc3koKSx0aGlzLmZvbnRJbmZvcz17fSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5SZW5kZXJlci5wcm90b3R5cGUpLGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2luaXRDb250ZXh0PWZ1bmN0aW9uKCl7dHJ5e2lmKHRoaXMuZHJhd2luZ0NvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIndlYmdsXCIsdGhpcy5hdHRyaWJ1dGVzKXx8dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcImV4cGVyaW1lbnRhbC13ZWJnbFwiLHRoaXMuYXR0cmlidXRlcyksbnVsbD09PXRoaXMuZHJhd2luZ0NvbnRleHQpdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgY3JlYXRpbmcgd2ViZ2wgY29udGV4dFwiKTtjb25zb2xlLmxvZyhcInA1LlJlbmRlcmVyR0w6IGVuYWJsZWQgd2ViZ2wgY29udGV4dFwiKTt2YXIgYT10aGlzLmRyYXdpbmdDb250ZXh0O2EuZW5hYmxlKGEuREVQVEhfVEVTVCksYS5kZXB0aEZ1bmMoYS5MRVFVQUwpLGEudmlld3BvcnQoMCwwLGEuZHJhd2luZ0J1ZmZlcldpZHRoLGEuZHJhd2luZ0J1ZmZlckhlaWdodCksdGhpcy5fdmlld3BvcnQ9dGhpcy5kcmF3aW5nQ29udGV4dC5nZXRQYXJhbWV0ZXIodGhpcy5kcmF3aW5nQ29udGV4dC5WSUVXUE9SVCl9Y2F0Y2goYSl7dGhyb3cgYX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3Jlc2V0Q29udGV4dD1mdW5jdGlvbihhLGIsYyl7dmFyIGU9dGhpcy53aWR0aCxmPXRoaXMuaGVpZ2h0LGc9dGhpcy5jYW52YXMuaWQsaD10aGlzLmNhbnZhcztoJiZoLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCksaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGguaWQ9Zyx0aGlzLl9wSW5zdC5fdXNlck5vZGU/dGhpcy5fcEluc3QuX3VzZXJOb2RlLmFwcGVuZENoaWxkKGgpOmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaCksdGhpcy5fcEluc3QuY2FudmFzPWg7dmFyIGk9bmV3IGQuUmVuZGVyZXJHTCh0aGlzLl9wSW5zdC5jYW52YXMsdGhpcy5fcEluc3QsITAsYSk7dGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiX3JlbmRlcmVyXCIsaSksaS5yZXNpemUoZSxmKSxpLl9hcHBseURlZmF1bHRzKCksdGhpcy5fcEluc3QuX2VsZW1lbnRzLnB1c2goaSksXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmc2V0VGltZW91dChmdW5jdGlvbigpe2MuYXBwbHkod2luZG93Ll9yZW5kZXJlcixiKX0sMCl9LGQucHJvdG90eXBlLnNldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oYSxiKXt0aGlzLl9hc3NlcnQzZChcInNldEF0dHJpYnV0ZXNcIik7dmFyIGM7dm9pZCAwIT09Yj8oYz17fSxjW2FdPWIpOmEgaW5zdGFuY2VvZiBPYmplY3QmJihjPWEpLHRoaXMucHVzaCgpLHRoaXMuX3JlbmRlcmVyLl9yZXNldENvbnRleHQoYyksdGhpcy5wb3AoKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy51TVZNYXRyaXguc2V0KHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMV0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzJdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzVdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbN10sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzhdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTBdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMV0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTNdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxNF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSksdGhpcy5hbWJpZW50TGlnaHRDb2xvcnMubGVuZ3RoPTAsdGhpcy5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucy5sZW5ndGg9MCx0aGlzLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnMubGVuZ3RoPTAsdGhpcy5wb2ludExpZ2h0UG9zaXRpb25zLmxlbmd0aD0wLHRoaXMucG9pbnRMaWdodENvbG9ycy5sZW5ndGg9MH0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5iYWNrZ3JvdW5kPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcEluc3QuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKSxiPWEubGV2ZWxzWzBdLzI1NSxjPWEubGV2ZWxzWzFdLzI1NSxkPWEubGV2ZWxzWzJdLzI1NSxlPWEubGV2ZWxzWzNdLzI1NTt0aGlzLkdMLmNsZWFyQ29sb3IoYixjLGQsZSksdGhpcy5HTC5kZXB0aE1hc2soITApLHRoaXMuR0wuY2xlYXIodGhpcy5HTC5DT0xPUl9CVUZGRVJfQklUfHRoaXMuR0wuREVQVEhfQlVGRkVSX0JJVCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihhLGIsYyxmKXt2YXIgZz1kLnByb3RvdHlwZS5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpO3RoaXMuY3VyRmlsbENvbG9yPWcuX2FycmF5LHRoaXMuaXNJbW1lZGlhdGVEcmF3aW5nP3RoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRJbW1lZGlhdGVNb2RlU2hhZGVyKCkpOnRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRDb2xvclNoYWRlcigpKSx0aGlzLmRyYXdNb2RlPWUuRklMTCx0aGlzLmN1ckZpbGxTaGFkZXIuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5jdXJGaWxsQ29sb3IpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnN0cm9rZT1mdW5jdGlvbihhLGIsYyxlKXthcmd1bWVudHNbM109MjU1O3ZhciBmPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyk7dGhpcy5jdXJTdHJva2VDb2xvcj1mLl9hcnJheSx0aGlzLmN1clN0cm9rZVNoYWRlci5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLmN1clN0cm9rZUNvbG9yKSx0aGlzLmN1clBvaW50U2hhZGVyLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLGYuX2FycmF5KX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zdHJva2VXZWlnaHQ9ZnVuY3Rpb24oYSl7dGhpcy5jdXJTdHJva2VXZWlnaHQhPT1hJiYodGhpcy5wb2ludFNpemU9YSx0aGlzLmN1clN0cm9rZVdlaWdodD1hLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLnNldFVuaWZvcm0oXCJ1U3Ryb2tlV2VpZ2h0XCIsYSksdGhpcy5jdXJQb2ludFNoYWRlci5zZXRVbmlmb3JtKFwidVBvaW50U2l6ZVwiLGEpKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiLGMsZSl7cmV0dXJuIGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuZ2V0LmFwcGx5KHRoaXMsW2EsYixjLGVdKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5sb2FkUGl4ZWxzPWZ1bmN0aW9uKCl7aWYoITAhPT10aGlzLmF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKXJldHVybiB2b2lkIGNvbnNvbGUubG9nKFwibG9hZFBpeGVscyBvbmx5IHdvcmtzIGluIFdlYkdMIHdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyIGlzIHRydWUuXCIpO3ZhciBhPXRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksYj10aGlzLndpZHRoLGM9dGhpcy5oZWlnaHQ7Yio9YSxjKj1hLHZvaWQgMD09PXRoaXMucGl4ZWxzJiYodGhpcy5waXhlbHM9bmV3IFVpbnQ4QXJyYXkodGhpcy5HTC5kcmF3aW5nQnVmZmVyV2lkdGgqdGhpcy5HTC5kcmF3aW5nQnVmZmVySGVpZ2h0KjQpKSx0aGlzLkdMLnJlYWRQaXhlbHMoMCwwLGIsYyx0aGlzLkdMLlJHQkEsdGhpcy5HTC5VTlNJR05FRF9CWVRFLHRoaXMucGl4ZWxzKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJwaXhlbHNcIix0aGlzLnBpeGVscyl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuZ2VvbWV0cnlJbkhhc2g9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZ0hhc2hbYV19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGEsYil7ZC5SZW5kZXJlci5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcyxhLGIpLHRoaXMuR0wudmlld3BvcnQoMCwwLHRoaXMuR0wuZHJhd2luZ0J1ZmZlcldpZHRoLHRoaXMuR0wuZHJhd2luZ0J1ZmZlckhlaWdodCksdGhpcy5fdmlld3BvcnQ9dGhpcy5HTC5nZXRQYXJhbWV0ZXIodGhpcy5HTC5WSUVXUE9SVCksdGhpcy5fY3VyQ2FtZXJhLl9yZXNpemUoKSx2b2lkIDAhPT10aGlzLnBpeGVscyYmKHRoaXMucGl4ZWxzPW5ldyBVaW50OEFycmF5KHRoaXMuR0wuZHJhd2luZ0J1ZmZlcldpZHRoKnRoaXMuR0wuZHJhd2luZ0J1ZmZlckhlaWdodCo0KSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHNbMF18fDAsYj1hcmd1bWVudHNbMV18fDAsYz1hcmd1bWVudHNbMl18fDAsZD1hcmd1bWVudHNbM118fDA7dGhpcy5HTC5jbGVhckNvbG9yKGEsYixjLGQpLHRoaXMuR0wuY2xlYXIodGhpcy5HTC5DT0xPUl9CVUZGRVJfQklUfHRoaXMuR0wuREVQVEhfQlVGRkVSX0JJVCl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yJiYoYz1hLnosYj1hLnksYT1hLngpLHRoaXMudU1WTWF0cml4LnRyYW5zbGF0ZShbYSxiLGNdKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy51TVZNYXRyaXguc2NhbGUoYSxiLGMpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMD09PWI/dGhpcy5yb3RhdGVaKGEpOihhcmd1bWVudHNbMF09dGhpcy5fcEluc3QuX2Zyb21SYWRpYW5zKGEpLGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGUuYXBwbHkodGhpcy51TVZNYXRyaXgsYXJndW1lbnRzKSx0aGlzKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvdGF0ZShhLDEsMCwwKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm90YXRlKGEsMCwxLDApLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3RhdGUoYSwwLDAsMSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKCl7dmFyIGE9ZC5SZW5kZXJlci5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzKSxiPWEucHJvcGVydGllcztyZXR1cm4gYi51TVZNYXRyaXg9dGhpcy51TVZNYXRyaXguY29weSgpLGIudVBNYXRyaXg9dGhpcy51UE1hdHJpeC5jb3B5KCksYi5fY3VyQ2FtZXJhPXRoaXMuX2N1ckNhbWVyYSx0aGlzLl9jdXJDYW1lcmE9dGhpcy5fY3VyQ2FtZXJhLmNvcHkoKSxhfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJlc2V0TWF0cml4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudU1WTWF0cml4PWQuTWF0cml4LmlkZW50aXR5KHRoaXMuX3BJbnN0KSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNldEZpbGxTaGFkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciE9PWEmJih0aGlzLmN1ckZpbGxTaGFkZXI9YSx0aGlzLmN1ckZpbGxTaGFkZXIuaW5pdCgpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2V0UG9pbnRTaGFkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY3VyUG9pbnRTaGFkZXIhPT1hJiYodGhpcy5jdXJQb2ludFNoYWRlcj1hLHRoaXMuY3VyUG9pbnRTaGFkZXIuaW5pdCgpKSx0aGlzLmN1clBvaW50U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNldFN0cm9rZVNoYWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jdXJTdHJva2VTaGFkZXIhPT1hJiYodGhpcy5jdXJTdHJva2VTaGFkZXI9YSx0aGlzLmN1clN0cm9rZVNoYWRlci5pbml0KCkpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91c2VMaWdodFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1ckZpbGxTaGFkZXImJnRoaXMuY3VyRmlsbFNoYWRlci5pc0xpZ2h0U2hhZGVyKCl8fHRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRMaWdodFNoYWRlcigpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VzZUNvbG9yU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciYmdGhpcy5jdXJGaWxsU2hhZGVyIT09dGhpcy5fZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXJ8fHRoaXMuc2V0RmlsbFNoYWRlcih0aGlzLl9nZXRDb2xvclNoYWRlcigpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VzZVBvaW50U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyUG9pbnRTaGFkZXJ8fHRoaXMuc2V0UG9pbnRTaGFkZXIodGhpcy5fZ2V0UG9pbnRTaGFkZXIoKSksdGhpcy5jdXJQb2ludFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXNlSW1tZWRpYXRlTW9kZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1ckZpbGxTaGFkZXImJnRoaXMuY3VyRmlsbFNoYWRlciE9PXRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcnx8dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldEltbWVkaWF0ZU1vZGVTaGFkZXIoKSksdGhpcy5jdXJGaWxsU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRMaWdodFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXJ8fCh0aGlzLmF0dHJpYnV0ZXMucGVyUGl4ZWxMaWdodGluZz90aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5waG9uZ1ZlcnQsZy5waG9uZ0ZyYWcpOnRoaXMuX2RlZmF1bHRMaWdodFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLmxpZ2h0VmVydCxnLmxpZ2h0VGV4dHVyZUZyYWcpKSx0aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldEltbWVkaWF0ZU1vZGVTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEltbWVkaWF0ZU1vZGVTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLmltbWVkaWF0ZVZlcnQsZy52ZXJ0ZXhDb2xvckZyYWcpKSx0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0Tm9ybWFsU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHROb3JtYWxTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0Tm9ybWFsU2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcubm9ybWFsVmVydCxnLm5vcm1hbEZyYWcpKSx0aGlzLl9kZWZhdWx0Tm9ybWFsU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRDb2xvclNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5ub3JtYWxWZXJ0LGcuYmFzaWNGcmFnKSksdGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRQb2ludFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5wb2ludFZlcnQsZy5wb2ludEZyYWcpKSx0aGlzLl9kZWZhdWx0UG9pbnRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldExpbmVTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdExpbmVTaGFkZXJ8fCh0aGlzLl9kZWZhdWx0TGluZVNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLmxpbmVWZXJ0LGcubGluZUZyYWcpKSx0aGlzLl9kZWZhdWx0TGluZVNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0Rm9udFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNoYWRlcnx8KHRoaXMuR0wuZ2V0RXh0ZW5zaW9uKFwiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzXCIpLHRoaXMuX2RlZmF1bHRGb250U2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcuZm9udFZlcnQsZy5mb250RnJhZykpLHRoaXMuX2RlZmF1bHRGb250U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRFbXB0eVRleHR1cmU9ZnVuY3Rpb24oKXtpZighdGhpcy5fZW1wdHlUZXh0dXJlKXt2YXIgYT1uZXcgZC5JbWFnZSgxLDEpO2Euc2V0KDAsMCwyNTUpLHRoaXMuX2VtcHR5VGV4dHVyZT1uZXcgZC5UZXh0dXJlKHRoaXMsYSl9cmV0dXJuIHRoaXMuX2VtcHR5VGV4dHVyZX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5nZXRUZXh0dXJlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLnRleHR1cmVzLGM9MDtjPGIubGVuZ3RoOysrYyl7dmFyIGU9YltjXTtpZihlLnNyYz09PWEpcmV0dXJuIGV9dmFyIGY9bmV3IGQuVGV4dHVyZSh0aGlzLGEpO3JldHVybiB0aGlzLnRleHR1cmVzLnB1c2goZiksZn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fYmluZEJ1ZmZlcj1mdW5jdGlvbihhLGIsYyxkLGUpe2lmKHRoaXMuR0wuYmluZEJ1ZmZlcihiLGEpLHZvaWQgMCE9PWMpe3ZhciBmPW5ldyBkKGMpO3RoaXMuR0wuYnVmZmVyRGF0YShiLGYsZSl9fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnNtb290aD1mdW5jdGlvbigpeyExPT09dGhpcy5hdHRyaWJ1dGVzLmFudGlhbGlhcyYmdGhpcy5fcEluc3Quc2V0QXR0cmlidXRlcyhcImFudGlhbGlhc1wiLCEwKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5ub1Ntb290aD1mdW5jdGlvbigpeyEwPT09dGhpcy5hdHRyaWJ1dGVzLmFudGlhbGlhcyYmdGhpcy5fcEluc3Quc2V0QXR0cmlidXRlcyhcImFudGlhbGlhc1wiLCExKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZmxhdHRlbj1mdW5jdGlvbihhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuW107aWYoYS5sZW5ndGg+MmU0KXt2YXIgYixjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsZD1cIltvYmplY3QgQXJyYXldXCIsZT1bXSxmPWEuc2xpY2UoKTtiPWYucG9wKCk7ZG97Yy5jYWxsKGIpPT09ZD9mLnB1c2guYXBwbHkoZixiKTplLnB1c2goYil9d2hpbGUoZi5sZW5ndGgmJnZvaWQgMCE9PShiPWYucG9wKCkpKTtyZXR1cm4gZS5yZXZlcnNlKCksZX1yZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sYSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3ZUb05BcnJheT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZmxhdHRlbihhLm1hcChmdW5jdGlvbihhKXtyZXR1cm5bYS54LGEueSxhLnpdfSkpfSxkLnByb3RvdHlwZS5fYXNzZXJ0M2Q9ZnVuY3Rpb24oYSl7aWYoIXRoaXMuX3JlbmRlcmVyLmlzUDNEKXRocm93IG5ldyBFcnJvcihhK1wiKCkgaXMgb25seSBzdXBwb3J0ZWQgaW4gV0VCR0wgbW9kZS4gSWYgeW91J2QgbGlrZSB0byB1c2UgM0QgZ3JhcGhpY3MgYW5kIFdlYkdMLCBzZWUgIGh0dHBzOi8vcDVqcy5vcmcvZXhhbXBsZXMvZm9ybS0zZC1wcmltaXRpdmVzLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9pbml0VGVzc3k9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7YltiLmxlbmd0aF09YVswXSxiW2IubGVuZ3RoXT1hWzFdLGJbYi5sZW5ndGhdPWFbMl19ZnVuY3Rpb24gYihhKXthIT09Zi5wcmltaXRpdmVUeXBlLkdMX1RSSUFOR0xFUyYmY29uc29sZS5sb2coXCJleHBlY3RlZCBUUklBTkdMRVMgYnV0IGdvdCB0eXBlOiBcIithKX1mdW5jdGlvbiBjKGEpe2NvbnNvbGUubG9nKFwiZXJyb3IgY2FsbGJhY2tcIiksY29uc29sZS5sb2coXCJlcnJvciBudW1iZXI6IFwiK2EpfWZ1bmN0aW9uIGQoYSxiLGMpe3JldHVyblthWzBdLGFbMV0sYVsyXV19ZnVuY3Rpb24gZShhKXt9dmFyIGc9bmV3IGYuR2x1VGVzc2VsYXRvcjtyZXR1cm4gZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX1ZFUlRFWF9EQVRBLGEpLGcuZ2x1VGVzc0NhbGxiYWNrKGYuZ2x1RW51bS5HTFVfVEVTU19CRUdJTixiKSxnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfRVJST1IsYyksZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX0NPTUJJTkUsZCksZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX0VER0VfRkxBRyxlKSxnfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl90cmlhbmd1bGF0ZT1mdW5jdGlvbihhKXt0aGlzLl90ZXNzeS5nbHVUZXNzTm9ybWFsKDAsMCwxKTt2YXIgYj1bXTt0aGlzLl90ZXNzeS5nbHVUZXNzQmVnaW5Qb2x5Z29uKGIpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt0aGlzLl90ZXNzeS5nbHVUZXNzQmVnaW5Db250b3VyKCk7Zm9yKHZhciBkPWFbY10sZT0wO2U8ZC5sZW5ndGg7ZSs9Myl7dmFyIGY9W2RbZV0sZFtlKzFdLGRbZSsyXV07dGhpcy5fdGVzc3kuZ2x1VGVzc1ZlcnRleChmLGYpfXRoaXMuX3Rlc3N5LmdsdVRlc3NFbmRDb250b3VyKCl9cmV0dXJuIHRoaXMuX3Rlc3N5LmdsdVRlc3NFbmRQb2x5Z29uKCksYn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fYmV6aWVyQ29lZmZpY2llbnRzPWZ1bmN0aW9uKGEpe3ZhciBiPWEqYSxjPWIqYSxkPTEtYSxlPWQqZDtyZXR1cm5bZSpkLDMqZSphLDMqZCpiLGNdfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9xdWFkcmF0aWNDb2VmZmljaWVudHM9ZnVuY3Rpb24oYSl7dmFyIGI9YSphLGM9MS1hO3JldHVybltjKmMsMipjKmEsYl19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2JlemllclRvQ2F0bXVsbD1mdW5jdGlvbihhKXtyZXR1cm5bYVsxXSxhWzFdKyhhWzJdLWFbMF0pL3RoaXMuX2N1cnZlVGlnaHRuZXNzLGFbMl0tKGFbM10tYVsxXSkvdGhpcy5fY3VydmVUaWdodG5lc3MsYVsyXV19LGIuZXhwb3J0cz1kLlJlbmRlcmVyR0x9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4uL2NvcmUvcDUuUmVuZGVyZXJcIjoyNyxcIi4vcDUuQ2FtZXJhXCI6NjksXCIuL3A1Lk1hdHJpeFwiOjcxLFwiLi9wNS5TaGFkZXJcIjo3NSxsaWJ0ZXNzOjl9XSw3NTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5TaGFkZXI9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3JlbmRlcmVyPWEsdGhpcy5fdmVydFNyYz1iLHRoaXMuX2ZyYWdTcmM9Yyx0aGlzLl92ZXJ0U2hhZGVyPS0xLHRoaXMuX2ZyYWdTaGFkZXI9LTEsdGhpcy5fZ2xQcm9ncmFtPTAsdGhpcy5fbG9hZGVkQXR0cmlidXRlcz0hMSx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5fbG9hZGVkVW5pZm9ybXM9ITEsdGhpcy51bmlmb3Jtcz17fSx0aGlzLl9ib3VuZD0hMSx0aGlzLnNhbXBsZXJzPVtdfSxkLlNoYWRlci5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2lmKDA9PT10aGlzLl9nbFByb2dyYW0pe3ZhciBhPXRoaXMuX3JlbmRlcmVyLkdMO2lmKHRoaXMuX3ZlcnRTaGFkZXI9YS5jcmVhdGVTaGFkZXIoYS5WRVJURVhfU0hBREVSKSxhLnNoYWRlclNvdXJjZSh0aGlzLl92ZXJ0U2hhZGVyLHRoaXMuX3ZlcnRTcmMpLGEuY29tcGlsZVNoYWRlcih0aGlzLl92ZXJ0U2hhZGVyKSwhYS5nZXRTaGFkZXJQYXJhbWV0ZXIodGhpcy5fdmVydFNoYWRlcixhLkNPTVBJTEVfU1RBVFVTKSlyZXR1cm4gY29uc29sZS5lcnJvcihcIllpa2VzISBBbiBlcnJvciBvY2N1cnJlZCBjb21waWxpbmcgdGhlIHZlcnRleCBzaGFkZXI6XCIrYS5nZXRTaGFkZXJJbmZvTG9nKHRoaXMuX3ZlcnRTaGFkZXIpKSxudWxsO2lmKHRoaXMuX2ZyYWdTaGFkZXI9YS5jcmVhdGVTaGFkZXIoYS5GUkFHTUVOVF9TSEFERVIpLGEuc2hhZGVyU291cmNlKHRoaXMuX2ZyYWdTaGFkZXIsdGhpcy5fZnJhZ1NyYyksYS5jb21waWxlU2hhZGVyKHRoaXMuX2ZyYWdTaGFkZXIpLCFhLmdldFNoYWRlclBhcmFtZXRlcih0aGlzLl9mcmFnU2hhZGVyLGEuQ09NUElMRV9TVEFUVVMpKXJldHVybiBjb25zb2xlLmVycm9yKFwiRGFybiEgQW4gZXJyb3Igb2NjdXJyZWQgY29tcGlsaW5nIHRoZSBmcmFnbWVudCBzaGFkZXI6XCIrYS5nZXRTaGFkZXJJbmZvTG9nKHRoaXMuX2ZyYWdTaGFkZXIpKSxudWxsO3RoaXMuX2dsUHJvZ3JhbT1hLmNyZWF0ZVByb2dyYW0oKSxhLmF0dGFjaFNoYWRlcih0aGlzLl9nbFByb2dyYW0sdGhpcy5fdmVydFNoYWRlciksYS5hdHRhY2hTaGFkZXIodGhpcy5fZ2xQcm9ncmFtLHRoaXMuX2ZyYWdTaGFkZXIpLGEubGlua1Byb2dyYW0odGhpcy5fZ2xQcm9ncmFtKSxhLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5fZ2xQcm9ncmFtLGEuTElOS19TVEFUVVMpfHxjb25zb2xlLmVycm9yKFwiU25hcCEgRXJyb3IgbGlua2luZyBzaGFkZXIgcHJvZ3JhbTogXCIrYS5nZXRQcm9ncmFtSW5mb0xvZyh0aGlzLl9nbFByb2dyYW0pKSx0aGlzLl9sb2FkQXR0cmlidXRlcygpLHRoaXMuX2xvYWRVbmlmb3JtcygpfXJldHVybiB0aGlzfSxkLlNoYWRlci5wcm90b3R5cGUuX2xvYWRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZEF0dHJpYnV0ZXMpe3RoaXMuYXR0cmlidXRlcz17fTtmb3IodmFyIGE9dGhpcy5fcmVuZGVyZXIuR0wsYj1hLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5fZ2xQcm9ncmFtLGEuQUNUSVZFX0FUVFJJQlVURVMpLGM9MDtjPGI7KytjKXt2YXIgZD1hLmdldEFjdGl2ZUF0dHJpYih0aGlzLl9nbFByb2dyYW0sYyksZT1kLm5hbWUsZj1hLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMuX2dsUHJvZ3JhbSxlKSxnPXt9O2cubmFtZT1lLGcubG9jYXRpb249ZixnLnR5cGU9ZC50eXBlLGcuc2l6ZT1kLnNpemUsdGhpcy5hdHRyaWJ1dGVzW2VdPWd9dGhpcy5fbG9hZGVkQXR0cmlidXRlcz0hMH19LGQuU2hhZGVyLnByb3RvdHlwZS5fbG9hZFVuaWZvcm1zPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZFVuaWZvcm1zKXtmb3IodmFyIGE9dGhpcy5fcmVuZGVyZXIuR0wsYj1hLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5fZ2xQcm9ncmFtLGEuQUNUSVZFX1VOSUZPUk1TKSxjPTAsZD0wO2Q8YjsrK2Qpe3ZhciBlPWEuZ2V0QWN0aXZlVW5pZm9ybSh0aGlzLl9nbFByb2dyYW0sZCksZj17fTtmLmxvY2F0aW9uPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMuX2dsUHJvZ3JhbSxlLm5hbWUpLGYuc2l6ZT1lLnNpemU7dmFyIGc9ZS5uYW1lO2Uuc2l6ZT4xJiYoZz1nLnN1YnN0cmluZygwLGcuaW5kZXhPZihcIlswXVwiKSkpLGYubmFtZT1nLGYudHlwZT1lLnR5cGUsZi50eXBlPT09YS5TQU1QTEVSXzJEJiYoZi5zYW1wbGVySW5kZXg9YyxjKyssdGhpcy5zYW1wbGVycy5wdXNoKGYpKSx0aGlzLnVuaWZvcm1zW2ddPWZ9dGhpcy5fbG9hZGVkVW5pZm9ybXM9ITB9fSxkLlNoYWRlci5wcm90b3R5cGUuY29tcGlsZT1mdW5jdGlvbigpe30sZC5TaGFkZXIucHJvdG90eXBlLmJpbmRTaGFkZXI9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLl9ib3VuZHx8KHRoaXMudXNlUHJvZ3JhbSgpLHRoaXMuX2JvdW5kPSEwLHRoaXMuYmluZFRleHR1cmVzKCksdGhpcy5fc2V0TWF0cml4VW5pZm9ybXMoKSx0aGlzPT09dGhpcy5fcmVuZGVyZXIuY3VyU3Ryb2tlU2hhZGVyJiZ0aGlzLl9zZXRWaWV3cG9ydFVuaWZvcm0oKSl9LGQuU2hhZGVyLnByb3RvdHlwZS51bmJpbmRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm91bmQmJih0aGlzLnVuYmluZFRleHR1cmVzKCksdGhpcy5fYm91bmQ9ITEpLHRoaXN9LGQuU2hhZGVyLnByb3RvdHlwZS5iaW5kVGV4dHVyZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5fcmVuZGVyZXIuR0wsYj0wO2I8dGhpcy5zYW1wbGVycy5sZW5ndGg7YisrKXt2YXIgYz10aGlzLnNhbXBsZXJzW2JdLGQ9Yy50ZXh0dXJlO3ZvaWQgMD09PWQmJihkPXRoaXMuX3JlbmRlcmVyLl9nZXRFbXB0eVRleHR1cmUoKSksYS5hY3RpdmVUZXh0dXJlKGEuVEVYVFVSRTArYy5zYW1wbGVySW5kZXgpLGQuYmluZFRleHR1cmUoKSxkLnVwZGF0ZSgpLGEudW5pZm9ybTFpKGMubG9jYXRpb24sYy5zYW1wbGVySW5kZXgpfX0sZC5TaGFkZXIucHJvdG90eXBlLnVwZGF0ZVRleHR1cmVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTx0aGlzLnNhbXBsZXJzLmxlbmd0aDthKyspe3ZhciBiPXRoaXMuc2FtcGxlcnNbYV0sYz1iLnRleHR1cmU7YyYmYy51cGRhdGUoKX19LGQuU2hhZGVyLnByb3RvdHlwZS51bmJpbmRUZXh0dXJlcz1mdW5jdGlvbigpe30sZC5TaGFkZXIucHJvdG90eXBlLl9zZXRNYXRyaXhVbmlmb3Jtcz1mdW5jdGlvbigpe3RoaXMuc2V0VW5pZm9ybShcInVQcm9qZWN0aW9uTWF0cml4XCIsdGhpcy5fcmVuZGVyZXIudVBNYXRyaXgubWF0NCksdGhpcy5zZXRVbmlmb3JtKFwidU1vZGVsVmlld01hdHJpeFwiLHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5tYXQ0KSx0aGlzLnNldFVuaWZvcm0oXCJ1Vmlld01hdHJpeFwiLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDQpLHRoaXM9PT10aGlzLl9yZW5kZXJlci5jdXJGaWxsU2hhZGVyJiYodGhpcy5fcmVuZGVyZXIudU5NYXRyaXguaW52ZXJzZVRyYW5zcG9zZSh0aGlzLl9yZW5kZXJlci51TVZNYXRyaXgpLHRoaXMuc2V0VW5pZm9ybShcInVOb3JtYWxNYXRyaXhcIix0aGlzLl9yZW5kZXJlci51Tk1hdHJpeC5tYXQzKSl9LGQuU2hhZGVyLnByb3RvdHlwZS5fc2V0Vmlld3BvcnRVbmlmb3JtPWZ1bmN0aW9uKCl7dGhpcy5zZXRVbmlmb3JtKFwidVZpZXdwb3J0XCIsdGhpcy5fcmVuZGVyZXIuX3ZpZXdwb3J0KX0sZC5TaGFkZXIucHJvdG90eXBlLnVzZVByb2dyYW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuR0wudXNlUHJvZ3JhbSh0aGlzLl9nbFByb2dyYW0pLHRoaXN9LGQuU2hhZGVyLnByb3RvdHlwZS5zZXRVbmlmb3JtPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy51bmlmb3Jtc1thXTtpZihjKXt2YXIgZD1jLmxvY2F0aW9uLGU9dGhpcy5fcmVuZGVyZXIuR0w7c3dpdGNoKHRoaXMudXNlUHJvZ3JhbSgpLGMudHlwZSl7Y2FzZSBlLkJPT0w6ITA9PT1iP2UudW5pZm9ybTFpKGQsMSk6ZS51bmlmb3JtMWkoZCwwKTticmVhaztjYXNlIGUuSU5UOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0xaXYoZCxiKTplLnVuaWZvcm0xaShkLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVDpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtMWZ2KGQsYik6ZS51bmlmb3JtMWYoZCxiKTticmVhaztjYXNlIGUuRkxPQVRfTUFUMzplLnVuaWZvcm1NYXRyaXgzZnYoZCwhMSxiKTticmVhaztjYXNlIGUuRkxPQVRfTUFUNDplLnVuaWZvcm1NYXRyaXg0ZnYoZCwhMSxiKTticmVhaztjYXNlIGUuRkxPQVRfVkVDMjpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtMmZ2KGQsYik6ZS51bmlmb3JtMmYoZCxiWzBdLGJbMV0pO2JyZWFrO2Nhc2UgZS5GTE9BVF9WRUMzOlxuYy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTNmdihkLGIpOmUudW5pZm9ybTNmKGQsYlswXSxiWzFdLGJbMl0pO2JyZWFrO2Nhc2UgZS5GTE9BVF9WRUM0OmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm00ZnYoZCxiKTplLnVuaWZvcm00ZihkLGJbMF0sYlsxXSxiWzJdLGJbM10pO2JyZWFrO2Nhc2UgZS5JTlRfVkVDMjpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtMml2KGQsYik6ZS51bmlmb3JtMmkoZCxiWzBdLGJbMV0pO2JyZWFrO2Nhc2UgZS5JTlRfVkVDMzpjLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtM2l2KGQsYik6ZS51bmlmb3JtM2koZCxiWzBdLGJbMV0sYlsyXSk7YnJlYWs7Y2FzZSBlLklOVF9WRUM0OmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm00aXYoZCxiKTplLnVuaWZvcm00aShkLGJbMF0sYlsxXSxiWzJdLGJbM10pO2JyZWFrO2Nhc2UgZS5TQU1QTEVSXzJEOmUuYWN0aXZlVGV4dHVyZShlLlRFWFRVUkUwK2Muc2FtcGxlckluZGV4KSxjLnRleHR1cmU9dGhpcy5fcmVuZGVyZXIuZ2V0VGV4dHVyZShiKSxlLnVuaWZvcm0xaShjLmxvY2F0aW9uLGMuc2FtcGxlckluZGV4KX1yZXR1cm4gdGhpc319LGQuU2hhZGVyLnByb3RvdHlwZS5pc0xpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVVzZUxpZ2h0aW5nfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVBbWJpZW50TGlnaHRDb3VudHx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51RGlyZWN0aW9uYWxMaWdodENvdW50fHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVQb2ludExpZ2h0Q291bnR8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudUFtYmllbnRDb2xvcnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51RGlyZWN0aW9uYWxDb2xvcnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51UG9pbnRMaWdodExvY2F0aW9ufHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVQb2ludExpZ2h0Q29sb3J8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudUxpZ2h0aW5nRGlyZWN0aW9ufHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVTcGVjdWxhcn0sZC5TaGFkZXIucHJvdG90eXBlLmlzVGV4dHVyZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNhbXBsZXJJbmRleD4wfSxkLlNoYWRlci5wcm90b3R5cGUuaXNDb2xvclNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmF0dHJpYnV0ZXMuYVZlcnRleENvbG9yfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVNYXRlcmlhbENvbG9yfSxkLlNoYWRlci5wcm90b3R5cGUuaXNUZXhMaWdodFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzTGlnaHRTaGFkZXIoKSYmdGhpcy5pc1RleHR1cmVTaGFkZXIoKX0sZC5TaGFkZXIucHJvdG90eXBlLmlzU3Ryb2tlU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVN0cm9rZVdlaWdodH0sZC5TaGFkZXIucHJvdG90eXBlLmVuYWJsZUF0dHJpYj1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9dGhpcy5fcmVuZGVyZXIuR0w7cmV0dXJuLTEhPT1hJiYoZy5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhKSxnLnZlcnRleEF0dHJpYlBvaW50ZXIoYSxiLGMsZCxlLGYpKSx0aGlzfSxiLmV4cG9ydHM9ZC5TaGFkZXJ9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QuVGV4dHVyZT1mdW5jdGlvbihhLGIpe3RoaXMuX3JlbmRlcmVyPWE7dmFyIGM9dGhpcy5fcmVuZGVyZXIuR0w7dGhpcy5zcmM9Yix0aGlzLmdsVGV4PXZvaWQgMCx0aGlzLmdsVGFyZ2V0PWMuVEVYVFVSRV8yRCx0aGlzLmdsRm9ybWF0PWMuUkdCQSx0aGlzLm1pcG1hcHM9ITEsdGhpcy5nbE1pbkZpbHRlcj1jLkxJTkVBUix0aGlzLmdsTWFnRmlsdGVyPWMuTElORUFSLHRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UsdGhpcy5nbFdyYXBUPWMuQ0xBTVBfVE9fRURHRSx0aGlzLmlzU3JjTWVkaWFFbGVtZW50PXZvaWQgMCE9PWQuTWVkaWFFbGVtZW50JiZiIGluc3RhbmNlb2YgZC5NZWRpYUVsZW1lbnQsdGhpcy5fdmlkZW9QcmV2VXBkYXRlVGltZT0wLHRoaXMuaXNTcmNIVE1MRWxlbWVudD12b2lkIDAhPT1kLkVsZW1lbnQmJmIgaW5zdGFuY2VvZiBkLkVsZW1lbnQmJiEoYiBpbnN0YW5jZW9mIGQuR3JhcGhpY3MpLHRoaXMuaXNTcmNQNUltYWdlPWIgaW5zdGFuY2VvZiBkLkltYWdlLHRoaXMuaXNTcmNQNUdyYXBoaWNzPWIgaW5zdGFuY2VvZiBkLkdyYXBoaWNzLHRoaXMuaXNJbWFnZURhdGE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEltYWdlRGF0YSYmYiBpbnN0YW5jZW9mIEltYWdlRGF0YTt2YXIgZT10aGlzLl9nZXRUZXh0dXJlRGF0YUZyb21Tb3VyY2UoKTtyZXR1cm4gdGhpcy53aWR0aD1lLndpZHRoLHRoaXMuaGVpZ2h0PWUuaGVpZ2h0LHRoaXMuaW5pdChlKSx0aGlzfSxkLlRleHR1cmUucHJvdG90eXBlLl9nZXRUZXh0dXJlRGF0YUZyb21Tb3VyY2U9ZnVuY3Rpb24oKXt2YXIgYTtyZXR1cm4gdGhpcy5pc1NyY1A1SW1hZ2U/YT10aGlzLnNyYy5jYW52YXM6dGhpcy5pc1NyY01lZGlhRWxlbWVudHx8dGhpcy5pc1NyY1A1R3JhcGhpY3N8fHRoaXMuaXNTcmNIVE1MRWxlbWVudD9hPXRoaXMuc3JjLmVsdDp0aGlzLmlzSW1hZ2VEYXRhJiYoYT10aGlzLnNyYyksYX0sZC5UZXh0dXJlLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX3JlbmRlcmVyLkdMO2lmKHRoaXMuZ2xUZXg9Yi5jcmVhdGVUZXh0dXJlKCksdGhpcy5iaW5kVGV4dHVyZSgpLGIudGV4UGFyYW1ldGVyaShiLlRFWFRVUkVfMkQsYi5URVhUVVJFX01BR19GSUxURVIsdGhpcy5nbE1hZ0ZpbHRlciksYi50ZXhQYXJhbWV0ZXJpKGIuVEVYVFVSRV8yRCxiLlRFWFRVUkVfTUlOX0ZJTFRFUix0aGlzLmdsTWluRmlsdGVyKSxiLnRleFBhcmFtZXRlcmkoYi5URVhUVVJFXzJELGIuVEVYVFVSRV9XUkFQX1MsdGhpcy5nbFdyYXBTKSxiLnRleFBhcmFtZXRlcmkoYi5URVhUVVJFXzJELGIuVEVYVFVSRV9XUkFQX1QsdGhpcy5nbFdyYXBUKSwwPT09dGhpcy53aWR0aHx8MD09PXRoaXMuaGVpZ2h0fHx0aGlzLmlzU3JjTWVkaWFFbGVtZW50JiYhdGhpcy5zcmMubG9hZGVkbWV0YWRhdGEpe3ZhciBjPW5ldyBVaW50OEFycmF5KFsxLDEsMSwxXSk7Yi50ZXhJbWFnZTJEKHRoaXMuZ2xUYXJnZXQsMCxiLlJHQkEsMSwxLDAsdGhpcy5nbEZvcm1hdCxiLlVOU0lHTkVEX0JZVEUsYyl9ZWxzZSBiLnRleEltYWdlMkQodGhpcy5nbFRhcmdldCwwLHRoaXMuZ2xGb3JtYXQsdGhpcy5nbEZvcm1hdCxiLlVOU0lHTkVEX0JZVEUsYSl9LGQuVGV4dHVyZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zcmM7aWYoMD09PWEud2lkdGh8fDA9PT1hLmhlaWdodClyZXR1cm4hMTt2YXIgYj10aGlzLl9nZXRUZXh0dXJlRGF0YUZyb21Tb3VyY2UoKSxjPSExLGQ9dGhpcy5fcmVuZGVyZXIuR0w7cmV0dXJuIGIud2lkdGghPT10aGlzLndpZHRofHxiLmhlaWdodCE9PXRoaXMuaGVpZ2h0PyhjPSEwLHRoaXMud2lkdGg9Yi53aWR0aCx0aGlzLmhlaWdodD1iLmhlaWdodCx0aGlzLmlzU3JjUDVJbWFnZT9hLnNldE1vZGlmaWVkKCExKToodGhpcy5pc1NyY01lZGlhRWxlbWVudHx8dGhpcy5pc1NyY0hUTUxFbGVtZW50KSYmYS5zZXRNb2RpZmllZCghMCkpOnRoaXMuaXNTcmNQNUltYWdlP2EuaXNNb2RpZmllZCgpJiYoYz0hMCxhLnNldE1vZGlmaWVkKCExKSk6dGhpcy5pc1NyY01lZGlhRWxlbWVudD9hLmlzTW9kaWZpZWQoKT8oYz0hMCxhLnNldE1vZGlmaWVkKCExKSk6YS5sb2FkZWRtZXRhZGF0YSYmdGhpcy5fdmlkZW9QcmV2VXBkYXRlVGltZSE9PWEudGltZSgpJiYodGhpcy5fdmlkZW9QcmV2VXBkYXRlVGltZT1hLnRpbWUoKSxjPSEwKTp0aGlzLmlzSW1hZ2VEYXRhP2EuX2RpcnR5JiYoYS5fZGlydHk9ITEsYz0hMCk6Yz0hMCxjJiYodGhpcy5iaW5kVGV4dHVyZSgpLGQudGV4SW1hZ2UyRCh0aGlzLmdsVGFyZ2V0LDAsdGhpcy5nbEZvcm1hdCx0aGlzLmdsRm9ybWF0LGQuVU5TSUdORURfQllURSxiKSksY30sZC5UZXh0dXJlLnByb3RvdHlwZS5iaW5kVGV4dHVyZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5HTC5iaW5kVGV4dHVyZSh0aGlzLmdsVGFyZ2V0LHRoaXMuZ2xUZXgpLHRoaXN9LGQuVGV4dHVyZS5wcm90b3R5cGUudW5iaW5kVGV4dHVyZT1mdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLkdMLmJpbmRUZXh0dXJlKHRoaXMuZ2xUYXJnZXQsbnVsbCl9LGQuVGV4dHVyZS5wcm90b3R5cGUuc2V0SW50ZXJwb2xhdGlvbj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX3JlbmRlcmVyLkdMO2E9PT1lLk5FQVJFU1Q/dGhpcy5nbE1pbkZpbHRlcj1jLk5FQVJFU1Q6dGhpcy5nbE1pbkZpbHRlcj1jLkxJTkVBUixiPT09ZS5ORUFSRVNUP3RoaXMuZ2xNYWdGaWx0ZXI9Yy5ORUFSRVNUOnRoaXMuZ2xNYWdGaWx0ZXI9Yy5MSU5FQVIsdGhpcy5iaW5kVGV4dHVyZSgpLGMudGV4UGFyYW1ldGVyaShjLlRFWFRVUkVfMkQsYy5URVhUVVJFX01JTl9GSUxURVIsdGhpcy5nbE1pbkZpbHRlciksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfTUFHX0ZJTFRFUix0aGlzLmdsTWFnRmlsdGVyKSx0aGlzLnVuYmluZFRleHR1cmUoKX0sZC5UZXh0dXJlLnByb3RvdHlwZS5zZXRXcmFwTW9kZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX3JlbmRlcmVyLkdMLGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PShhJmEtMSl9LGY9ZCh0aGlzLndpZHRoKSxnPWQodGhpcy53aWR0aCk7YT09PWUuUkVQRUFUP2YmJmc/dGhpcy5nbFdyYXBTPWMuUkVQRUFUOihjb25zb2xlLndhcm4oXCJZb3UgdHJpZWQgdG8gc2V0IHRoZSB3cmFwIG1vZGUgdG8gUkVQRUFUIGJ1dCB0aGUgdGV4dHVyZSBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIHR3by4gU2V0dGluZyB0byBDTEFNUCBpbnN0ZWFkXCIpLHRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UpOmE9PT1lLk1JUlJPUj9mJiZnP3RoaXMuZ2xXcmFwUz1jLk1JUlJPUkVEX1JFUEVBVDooY29uc29sZS53YXJuKFwiWW91IHRyaWVkIHRvIHNldCB0aGUgd3JhcCBtb2RlIHRvIE1JUlJPUiBidXQgdGhlIHRleHR1cmUgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uIFNldHRpbmcgdG8gQ0xBTVAgaW5zdGVhZFwiKSx0aGlzLmdsV3JhcFM9Yy5DTEFNUF9UT19FREdFKTp0aGlzLmdsV3JhcFM9Yy5DTEFNUF9UT19FREdFLGI9PT1lLlJFUEVBVD9mJiZnP3RoaXMuZ2xXcmFwVD1jLlJFUEVBVDooY29uc29sZS53YXJuKFwiWW91IHRyaWVkIHRvIHNldCB0aGUgd3JhcCBtb2RlIHRvIFJFUEVBVCBidXQgdGhlIHRleHR1cmUgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uIFNldHRpbmcgdG8gQ0xBTVAgaW5zdGVhZFwiKSx0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFKTpiPT09ZS5NSVJST1I/ZiYmZz90aGlzLmdsV3JhcFQ9Yy5NSVJST1JFRF9SRVBFQVQ6KGNvbnNvbGUud2FybihcIllvdSB0cmllZCB0byBzZXQgdGhlIHdyYXAgbW9kZSB0byBNSVJST1IgYnV0IHRoZSB0ZXh0dXJlIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgdHdvLiBTZXR0aW5nIHRvIENMQU1QIGluc3RlYWRcIiksdGhpcy5nbFdyYXBUPWMuQ0xBTVBfVE9fRURHRSk6dGhpcy5nbFdyYXBUPWMuQ0xBTVBfVE9fRURHRSx0aGlzLmJpbmRUZXh0dXJlKCksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfV1JBUF9TLHRoaXMuZ2xXcmFwUyksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfV1JBUF9ULHRoaXMuZ2xXcmFwVCksdGhpcy51bmJpbmRUZXh0dXJlKCl9LGIuZXhwb3J0cz1kLlRleHR1cmV9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDc3OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3RoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iLHRoaXMuaW5mb3M9W10sdGhpcy5maW5kSW1hZ2U9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy53aWR0aCp0aGlzLmhlaWdodDtpZihhPmIpdGhyb3cgbmV3IEVycm9yKFwiZm9udCBpcyB0b28gY29tcGxleCB0byByZW5kZXIgaW4gM0RcIik7Zm9yKHZhciBjLGQsZT10aGlzLmluZm9zLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgZj10aGlzLmluZm9zW2VdO2lmKGYuaW5kZXgrYTxiKXtjPWYsZD1mLmltYWdlRGF0YTticmVha319aWYoIWMpe3RyeXtkPW5ldyBJbWFnZURhdGEodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9Y2F0Y2goYSl7dmFyIGc9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjYW52YXNcIilbMF0saD0hZztnfHwoZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGcuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGcpKTt2YXIgaT1nLmdldENvbnRleHQoXCIyZFwiKTtpJiYoZD1pLmNyZWF0ZUltYWdlRGF0YSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSksaCYmZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChnKX1jPXtpbmRleDowLGltYWdlRGF0YTpkfSx0aGlzLmluZm9zLnB1c2goYyl9dmFyIGo9Yy5pbmRleDtyZXR1cm4gYy5pbmRleCs9YSxkLl9kaXJ0eT0hMCx7aW1hZ2VEYXRhOmQsaW5kZXg6an19fWZ1bmN0aW9uIGUoYSxiLGMsZCxlKXt2YXIgZj1hLmltYWdlRGF0YSxnPWYuZGF0YSxoPTQqYS5pbmRleCsrO2dbaCsrXT1iLGdbaCsrXT1jLGdbaCsrXT1kLGdbaCsrXT1lfXZhciBmPWEoXCIuLi9jb3JlL21haW5cIiksZz1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4vcDUuU2hhZGVyXCIpLGEoXCIuL3A1LlJlbmRlcmVyR0xcIiksZi5SZW5kZXJlckdMLnByb3RvdHlwZS5fYXBwbHlUZXh0UHJvcGVydGllcz1mdW5jdGlvbigpe30sZi5SZW5kZXJlckdMLnByb3RvdHlwZS50ZXh0V2lkdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2lzT3BlblR5cGUoKT90aGlzLl90ZXh0Rm9udC5fdGV4dFdpZHRoKGEsdGhpcy5fdGV4dFNpemUpOjB9O3ZhciBoPTksaT1oLGo9NjQsaz02NCxsPTY0LG09NjQsbj02NCxvPTY0LHA9TWF0aC5zcXJ0KDMpLHE9ZnVuY3Rpb24oYSl7dGhpcy5mb250PWEsdGhpcy5zdHJva2VJbWFnZUluZm9zPW5ldyBkKGosayksdGhpcy5jb2xEaW1JbWFnZUluZm9zPW5ldyBkKGwsbSksdGhpcy5yb3dEaW1JbWFnZUluZm9zPW5ldyBkKGwsbSksdGhpcy5jb2xDZWxsSW1hZ2VJbmZvcz1uZXcgZChuLG8pLHRoaXMucm93Q2VsbEltYWdlSW5mb3M9bmV3IGQobixvKSx0aGlzLmdseXBoSW5mb3M9e30sdGhpcy5nZXRHbHlwaEluZm89ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhLGIsYyl7ZnVuY3Rpb24gZChhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoO2QtLSA+MDspe3ZhciBlPWFbZF07Yj5lJiYoYj1lKSxjPGUmJihjPWUpfXJldHVybnttaW46YixtYXg6Y319dmFyIGU9dy5sZW5ndGg7dy5wdXNoKGMpO2Zvcih2YXIgZj1kKGEsMSwwKSxnPU1hdGgubWF4KE1hdGguZmxvb3IoZi5taW4qaCksMCksaj1NYXRoLm1pbihNYXRoLmNlaWwoZi5tYXgqaCksaCksaz1nO2s8ajsrK2speVtrXS5wdXNoKGUpO2Zvcih2YXIgbD1kKGIsMSwwKSxtPU1hdGgubWF4KE1hdGguZmxvb3IobC5taW4qaSksMCksbj1NYXRoLm1pbihNYXRoLmNlaWwobC5tYXgqaSksaSksbz1tO288bjsrK28peFtvXS5wdXNoKGUpfWZ1bmN0aW9uIGMoYSxiLGMpe3JldHVybiBhPGI/YjphPmM/YzphfWZ1bmN0aW9uIGQoYSl7cmV0dXJuIGMoMjU1KmEsMCwyNTUpfWZ1bmN0aW9uIGcoYSxiLGMsZCl7dGhpcy5wMD1hLHRoaXMuYzA9Yix0aGlzLmMxPWMsdGhpcy5wMT1kLHRoaXMudG9RdWFkcmF0aWM9ZnVuY3Rpb24oKXtyZXR1cm57eDp0aGlzLnAwLngseTp0aGlzLnAwLnkseDE6dGhpcy5wMS54LHkxOnRoaXMucDEueSxjeDooMyoodGhpcy5jMC54K3RoaXMuYzEueCktKHRoaXMucDAueCt0aGlzLnAxLngpKS80LGN5OigzKih0aGlzLmMwLnkrdGhpcy5jMS55KS0odGhpcy5wMC55K3RoaXMucDEueSkpLzR9fSx0aGlzLnF1YWRFcnJvcj1mdW5jdGlvbigpe3JldHVybiBmLlZlY3Rvci5zdWIoZi5WZWN0b3Iuc3ViKHRoaXMucDEsdGhpcy5wMCksZi5WZWN0b3IubXVsdChmLlZlY3Rvci5zdWIodGhpcy5jMSx0aGlzLmMwKSwzKSkubWFnKCkvMn0sdGhpcy5zcGxpdD1mdW5jdGlvbihhKXt2YXIgYj1mLlZlY3Rvci5sZXJwKHRoaXMucDAsdGhpcy5jMCxhKSxjPWYuVmVjdG9yLmxlcnAodGhpcy5jMCx0aGlzLmMxLGEpLGQ9Zi5WZWN0b3IubGVycChiLGMsYSk7dGhpcy5jMT1mLlZlY3Rvci5sZXJwKHRoaXMuYzEsdGhpcy5wMSxhKSx0aGlzLmMwPWYuVmVjdG9yLmxlcnAoYyx0aGlzLmMxLGEpO3ZhciBlPWYuVmVjdG9yLmxlcnAoZCx0aGlzLmMwLGEpLGg9bmV3IGcodGhpcy5wMCxiLGQsZSk7cmV0dXJuIHRoaXMucDA9ZSxofSx0aGlzLnNwbGl0SW5mbGVjdGlvbnM9ZnVuY3Rpb24oKXt2YXIgYT1mLlZlY3Rvci5zdWIodGhpcy5jMCx0aGlzLnAwKSxiPWYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIodGhpcy5jMSx0aGlzLmMwKSxhKSxjPWYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIoZi5WZWN0b3Iuc3ViKHRoaXMucDEsdGhpcy5jMSksYSksZi5WZWN0b3IubXVsdChiLDIpKSxkPVtdLGU9Yi54KmMueS1iLnkqYy54O2lmKDAhPT1lKXt2YXIgZz1hLngqYy55LWEueSpjLngsaD1hLngqYi55LWEueSpiLngsaT1nKmctNCplKmg7aWYoaT49MCl7ZTwwJiYoZT0tZSxnPS1nLGg9LWgpO3ZhciBqPU1hdGguc3FydChpKSxrPSgtZy1qKS8oMiplKSxsPSgtZytqKS8oMiplKTtrPjAmJms8MSYmKGQucHVzaCh0aGlzLnNwbGl0KGspKSxsPTEtKDEtbCkvKDEtaykpLGw+MCYmbDwxJiZkLnB1c2godGhpcy5zcGxpdChsKSl9fXJldHVybiBkLnB1c2godGhpcyksZH19ZnVuY3Rpb24gaihhLGIsYyxkLGUsaCxpLGope2Zvcih2YXIgaz1uZXcgZyhuZXcgZi5WZWN0b3IoYSxiKSxuZXcgZi5WZWN0b3IoYyxkKSxuZXcgZi5WZWN0b3IoZSxoKSxuZXcgZi5WZWN0b3IoaSxqKSkuc3BsaXRJbmZsZWN0aW9ucygpLGw9W10sbT0zMC9wLG49MDtuPGsubGVuZ3RoO24rKyl7Zm9yKHZhciBvLHE9a1tuXSxyPVtdOyEoKG89bS9xLnF1YWRFcnJvcigpKT49LjEyNSk7KXt2YXIgcz1NYXRoLnBvdyhvLDEvMyksdD1xLnNwbGl0KHMpLHU9cS5zcGxpdCgxLXMvKDEtcykpO2wucHVzaCh0KSxyLnB1c2gocSkscT11fW88MSYmbC5wdXNoKHEuc3BsaXQoLjUpKSxsLnB1c2gocSksQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobCxyLnJldmVyc2UoKSl9cmV0dXJuIGx9ZnVuY3Rpb24gayhhLGMsZCxlKXtiKFthLGRdLFtjLGVdLHt4OmEseTpjLGN4OihhK2QpLzIsY3k6KGMrZSkvMn0pfWZ1bmN0aW9uIGwoYSxiLGMsZCl7cmV0dXJuIE1hdGguYWJzKGMtYSk8MWUtNSYmTWF0aC5hYnMoZC1iKTwxZS01fWZ1bmN0aW9uIG0oYSxiLGMpe2Zvcih2YXIgZD1hLmxlbmd0aCxmPWIuZmluZEltYWdlKGQpLGc9Zi5pbmRleCxoPTAsaT0wO2k8ZDsrK2kpaCs9YVtpXS5sZW5ndGg7Zm9yKHZhciBqPWMuZmluZEltYWdlKGgpLGs9MDtrPGQ7KytrKXt2YXIgbD1hW2tdLG09bC5sZW5ndGgsbj1qLmluZGV4O2UoZixuPj43LDEyNyZuLG0+PjcsMTI3Jm0pO2Zvcih2YXIgbz0wO288bTsrK28pe3ZhciBwPWxbb10rUztlKGoscD4+NywxMjcmcCwwLDApfX1yZXR1cm57Y2VsbEltYWdlSW5mbzpqLGRpbU9mZnNldDpnLGRpbUltYWdlSW5mbzpmfX12YXIgbj10aGlzLmdseXBoSW5mb3NbYS5pbmRleF07aWYobilyZXR1cm4gbjt2YXIgbz1hLmdldEJvdW5kaW5nQm94KCkscT1vLngxLHI9by55MSxzPW8ueDItcSx0PW8ueTItcix1PWEucGF0aC5jb21tYW5kcztpZigwPT09c3x8MD09PXR8fCF1Lmxlbmd0aClyZXR1cm4gdGhpcy5nbHlwaEluZm9zW2EuaW5kZXhdPXt9O3ZhciB2LHc9W10seD1bXSx5PVtdO2Zvcih2PWgtMTt2Pj0wOy0tdil5LnB1c2goW10pO2Zvcih2PWktMTt2Pj0wOy0tdil4LnB1c2goW10pO2Zvcih2YXIgeixBLEIsQyxEPTA7RDx1Lmxlbmd0aDsrK0Qpe3ZhciBFPXVbRF0sRj0oRS54LXEpL3MsRz0oRS55LXIpL3Q7aWYoIWwoeixBLEYsRykpe3N3aXRjaChFLnR5cGUpe2Nhc2VcIk1cIjpCPUYsQz1HO2JyZWFrO2Nhc2VcIkxcIjprKHosQSxGLEcpO2JyZWFrO2Nhc2VcIlFcIjp2YXIgSD0oRS54MS1xKS9zLEk9KEUueTEtcikvdDtiKFt6LEYsSF0sW0EsRyxJXSx7eDp6LHk6QSxjeDpILGN5Okl9KTticmVhaztjYXNlXCJaXCI6bCh6LEEsQixDKT93LnB1c2goe3g6eix5OkF9KTooayh6LEEsQixDKSx3LnB1c2goe3g6Qix5OkN9KSk7YnJlYWs7Y2FzZVwiQ1wiOmZvcih2YXIgSj0oRS54MS1xKS9zLEs9KEUueTEtcikvdCxMPShFLngyLXEpL3MsTT0oRS55Mi1yKS90LE49aih6LEEsSixLLEwsTSxGLEcpLE89MDtPPE4ubGVuZ3RoO08rKyl7dmFyIFA9TltPXS50b1F1YWRyYXRpYygpO2IoW1AueCxQLngxLFAuY3hdLFtQLnksUC55MSxQLmN5XSxQKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInVua25vd24gY29tbWFuZCB0eXBlOiBcIitFLnR5cGUpfXo9RixBPUd9fWZvcih2YXIgUT13Lmxlbmd0aCxSPXRoaXMuc3Ryb2tlSW1hZ2VJbmZvcy5maW5kSW1hZ2UoUSksUz1SLmluZGV4LFQ9MDtUPFE7KytUKXt2YXIgVT13W1RdO2UoUixkKFUueCksZChVLnkpLGQoVS5jeCksZChVLmN5KSl9cmV0dXJuIG49dGhpcy5nbHlwaEluZm9zW2EuaW5kZXhdPXtnbHlwaDphLHVHbHlwaFJlY3Q6W28ueDEsLW8ueTEsby54Miwtby55Ml0sc3Ryb2tlSW1hZ2VJbmZvOlIsc3Ryb2tlczp3LGNvbEluZm86bSh5LHRoaXMuY29sRGltSW1hZ2VJbmZvcyx0aGlzLmNvbENlbGxJbWFnZUluZm9zKSxyb3dJbmZvOm0oeCx0aGlzLnJvd0RpbUltYWdlSW5mb3MsdGhpcy5yb3dDZWxsSW1hZ2VJbmZvcyl9LG4udUdyaWRPZmZzZXQ9W24uY29sSW5mby5kaW1PZmZzZXQsbi5yb3dJbmZvLmRpbU9mZnNldF0sbn19O2YuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3JlbmRlclRleHQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZighKGQ+PWUpJiZ0aGlzLl9kb0ZpbGwpe2lmKCF0aGlzLl9pc09wZW5UeXBlKCkpcmV0dXJuIGNvbnNvbGUubG9nKFwiV0VCR0w6IG9ubHkgb3BlbnR5cGUgZm9udHMgYXJlIHN1cHBvcnRlZFwiKSxhO2EucHVzaCgpO3ZhciBwPXRoaXMuY3VyRmlsbFNoYWRlcixyPXRoaXMuX2RvU3Ryb2tlLHM9dGhpcy5kcmF3TW9kZTt0aGlzLmN1ckZpbGxTaGFkZXI9bnVsbCx0aGlzLl9kb1N0cm9rZT0hMSx0aGlzLmRyYXdNb2RlPWcuVEVYVFVSRTt2YXIgdD10aGlzLl90ZXh0Rm9udC5mb250LHU9dGhpcy5fdGV4dEZvbnQuX2ZvbnRJbmZvO3V8fCh1PXRoaXMuX3RleHRGb250Ll9mb250SW5mbz1uZXcgcSh0KSk7dmFyIHY9dGhpcy5fdGV4dEZvbnQuX2hhbmRsZUFsaWdubWVudCh0aGlzLGIsYyxkKSx3PXRoaXMuX3RleHRTaXplLHg9dy90LnVuaXRzUGVyRW07dGhpcy50cmFuc2xhdGUodi54LHYueSwwKSx0aGlzLnNjYWxlKHgseCwxKTt2YXIgeT10aGlzLkdMLHo9IXRoaXMuX2RlZmF1bHRGb250U2hhZGVyLEE9dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldEZvbnRTaGFkZXIoKSk7eiYmKEEuc2V0VW5pZm9ybShcInVHcmlkSW1hZ2VTaXplXCIsW2wsbV0pLEEuc2V0VW5pZm9ybShcInVDZWxsc0ltYWdlU2l6ZVwiLFtuLG9dKSxBLnNldFVuaWZvcm0oXCJ1U3Ryb2tlSW1hZ2VTaXplXCIsW2osa10pLEEuc2V0VW5pZm9ybShcInVHcmlkU2l6ZVwiLFtoLGldKSksdGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyRmlsbENvbG9yKTt2YXIgQj10aGlzLmdIYXNoLmdseXBoO2lmKCFCKXt2YXIgQz10aGlzLl90ZXh0R2VvbT1uZXcgZi5HZW9tZXRyeSgxLDEsZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPD0xO2ErKylmb3IodmFyIGI9MDtiPD0xO2IrKyl0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGYuVmVjdG9yKGIsYSwwKSksdGhpcy51dnMucHVzaChiLGEpfSk7Qy5jb21wdXRlRmFjZXMoKS5jb21wdXRlTm9ybWFscygpLEI9dGhpcy5jcmVhdGVCdWZmZXJzKFwiZ2x5cGhcIixDKX10aGlzLl9iaW5kQnVmZmVyKEIudmVydGV4QnVmZmVyLHkuQVJSQVlfQlVGRkVSKSxBLmVuYWJsZUF0dHJpYihBLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMseS5GTE9BVCwhMSwwLDApLHRoaXMuX2JpbmRCdWZmZXIoQi5pbmRleEJ1ZmZlcix5LkVMRU1FTlRfQVJSQVlfQlVGRkVSKSx0aGlzLl9iaW5kQnVmZmVyKEIudXZCdWZmZXIseS5BUlJBWV9CVUZGRVIpLEEuZW5hYmxlQXR0cmliKEEuYXR0cmlidXRlcy5hVGV4Q29vcmQubG9jYXRpb24sMix5LkZMT0FULCExLDAsMCksQS5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLmN1ckZpbGxDb2xvcik7dHJ5e2Zvcih2YXIgRD0wLEU9bnVsbCxGPSExLEc9dC5zdHJpbmdUb0dseXBocyhiKSxIPTA7SDxHLmxlbmd0aDsrK0gpe3ZhciBJPUdbSF07RSYmKEQrPXQuZ2V0S2VybmluZ1ZhbHVlKEUsSSkpO3ZhciBKPXUuZ2V0R2x5cGhJbmZvKEkpO2lmKEoudUdseXBoUmVjdCl7dmFyIEs9Si5yb3dJbmZvLEw9Si5jb2xJbmZvO0Euc2V0VW5pZm9ybShcInVTYW1wbGVyU3Ryb2tlc1wiLEouc3Ryb2tlSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidVNhbXBsZXJSb3dTdHJva2VzXCIsSy5jZWxsSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidVNhbXBsZXJSb3dzXCIsSy5kaW1JbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlckNvbFN0cm9rZXNcIixMLmNlbGxJbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlckNvbHNcIixMLmRpbUltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVHcmlkT2Zmc2V0XCIsSi51R3JpZE9mZnNldCksQS5zZXRVbmlmb3JtKFwidUdseXBoUmVjdFwiLEoudUdseXBoUmVjdCksQS5zZXRVbmlmb3JtKFwidUdseXBoT2Zmc2V0XCIsRCksRj9BLmJpbmRUZXh0dXJlcygpOihGPSEwLEEuYmluZFNoYWRlcigpKSx5LmRyYXdFbGVtZW50cyh5LlRSSUFOR0xFUyw2LHRoaXMuR0wuVU5TSUdORURfU0hPUlQsMCl9RCs9SS5hZHZhbmNlV2lkdGgsRT1JfX1maW5hbGx5e0EudW5iaW5kU2hhZGVyKCksdGhpcy5jdXJGaWxsU2hhZGVyPXAsdGhpcy5fZG9TdHJva2U9cix0aGlzLmRyYXdNb2RlPXMsYS5wb3AoKX1yZXR1cm4gdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLGF9fX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5SZW5kZXJlckdMXCI6NzQsXCIuL3A1LlNoYWRlclwiOjc1fV19LHt9LFsxM10pKDEzKX0pOyIsImltcG9ydCBwNSBmcm9tICdwNS9saWIvcDUubWluJztcbmltcG9ydCBUb25lIGZyb20gJ3RvbmUnO1xuY29uc3Qgc2tldGNoID0gKHApID0+IHtcbiAgICB2YXIgbm9pc2UgPSBuZXcgVG9uZS5Ob2lzZShcInBpbmtcIikuc3RhcnQoKTtcbiAgICBub2lzZS52b2x1bWUudmFsdWUgPSAtMjA7XG4gICAgLy9tYWtlIGFuIGF1dG9maWx0ZXIgdG8gc2hhcGUgdGhlIG5vaXNlXG4gICAgdmFyIGF1dG9GaWx0ZXIgPSBuZXcgVG9uZS5BdXRvRmlsdGVyKHtcbiAgICAgICAgXCJmcmVxdWVuY3lcIjogXCI4bVwiLFxuICAgICAgICBcIm1pblwiOiA4MDAsXG4gICAgICAgIFwibWF4XCI6IDUwMDBcbiAgICB9KS5jb25uZWN0KFRvbmUuTWFzdGVyKTtcbiAgICAvL2Nvbm5lY3QgdGhlIG5vaXNlXG4gICAgbm9pc2UuY29ubmVjdChhdXRvRmlsdGVyKTtcbiAgICAvL3N0YXJ0IHRoZSBhdXRvZmlsdGVyIExGT1xuICAgIGF1dG9GaWx0ZXIuc3RhcnQoKVxuICAgIHZhciBjaG9ydXMgPSBuZXcgVG9uZS5DaG9ydXMoMC44LCAyLjUsIDAuMikudG9NYXN0ZXIoKTtcbiAgICBsZXQgZm0gPSBuZXcgVG9uZS5GTVN5bnRoKHtcbiAgICAgICAgXCJoYXJtb25pY2l0eVwiOiAxMCxcbiAgICAgICAgXCJtb2R1bGF0aW9uSW5kZXhcIjogODAsXG4gICAgICAgIFwiZGV0dW5lXCI6IDAsXG4gICAgICAgIFwib3NjaWxsYXRvclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzaW5lXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbnZlbG9wZVwiOiB7XG4gICAgICAgICAgICBcImF0dGFja1wiOiAwLjAwMSxcbiAgICAgICAgICAgIFwiZGVjYXlcIjogMC4wMDMsXG4gICAgICAgICAgICBcInN1c3RhaW5cIjogMC4wNixcbiAgICAgICAgICAgIFwicmVsZWFzZVwiOiAwLjNcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb2R1bGF0aW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInNxdWFyZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9kdWxhdGlvbkVudmVsb3BlXCI6IHtcbiAgICAgICAgICAgIFwiYXR0YWNrXCI6IDAuMDEsXG4gICAgICAgICAgICBcImRlY2F5XCI6IDAuMDIsXG4gICAgICAgICAgICBcInN1c3RhaW5cIjogMC4wMyxcbiAgICAgICAgICAgIFwicmVsZWFzZVwiOiAwLjAzM1xuICAgICAgICB9LFxuICAgICAgICBcInBvcnRhbWVudG9cIjogMC4wMVxuICAgIH0pLmNvbm5lY3QoY2hvcnVzKTtcbiAgICBmbS52b2x1bWUudmFsdWUgPSAwO1xuXG4gICAgZnVuY3Rpb24gV2Fsa2VyKHgsIHkpIHtcbiAgICAgICAgdGhpcy5leCA9IDA7XG4gICAgICAgIHRoaXMuZXkgPSAwO1xuICAgICAgICB0aGlzLmVhc2luZyA9IDAuMDU7XG4gICAgICAgIHRoaXMucmVkID0gcC5yYW5kb20oMTAwLCAyNTUpO1xuICAgICAgICB0aGlzLmcgPSBwLnJhbmRvbSgyNTUpO1xuICAgICAgICB0aGlzLmIgPSBwLnJhbmRvbSgyNTUpO1xuICAgICAgICB0aGlzLmNhblBsYXkgPSB0cnVlO1xuICAgICAgICB0aGlzLmFscGhhID0gMDtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikge1xuICAgICAgICAgICAgdGhpcy5wb3MgPSBwLmNyZWF0ZVZlY3Rvcih4LCB5KTtcbiAgICAgICAgICAgIHRoaXMuc3R1Y2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wb3MgPSBwLmNyZWF0ZVZlY3RvcihwLnJhbmRvbSgtMTUwLCAxNTApLCBwLnJhbmRvbSgtMTUwLCAxNTApKTtcbiAgICAgICAgICAgIHRoaXMuc3R1Y2sgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnIgPSByYWRpdXMxO1xuICAgICAgICB0aGlzLndhbGsgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIC8vdmFyIHZlbCA9IHA1LlZlY3Rvci5yYW5kb20yRCgpO1xuICAgICAgICAgICAgdmFyIHZlbCA9IHAuY3JlYXRlVmVjdG9yKHAucmFuZG9tKC0wLjUsIDAuNSksIHAucmFuZG9tKC0wLjUsIDAuNSkpO1xuICAgICAgICAgICAgdGhpcy5wb3MuYWRkKHZlbCk7XG4gICAgICAgICAgICBwLmNvbnN0cmFpbih0aGlzLnBvcy54LCAtMTUwLCAxNTApO1xuICAgICAgICAgICAgcC5jb25zdHJhaW4odGhpcy5wb3MueSwgLTE1MCwgMTUwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrU3R1Y2sgPSBmdW5jdGlvbihvdGhlcnMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3RoZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBkaXN0U3EodGhpcy5wb3MsIG90aGVyc1tpXS5wb3MpO1xuICAgICAgICAgICAgICAgIGlmIChkIDwgKHRoaXMuciAqIHRoaXMuciArIG90aGVyc1tpXS5yICogb3RoZXJzW2ldLnIgKyAyICogb3RoZXJzW2ldLnIgKiB0aGlzLnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vaWYgKHJhbmRvbSgxKSA8IDAuMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0dWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuUGxheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm0udHJpZ2dlckF0dGFja1JlbGVhc2UoVG9uZS5NaWRpKCh0aGlzLnIgKiAxMCkgKyA3MCkudG9GcmVxdWVuY3koKSwgXCIxMjhuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbHBoYSA9IDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FuUGxheSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgLy99XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0SHVlID0gZnVuY3Rpb24oaHUpIHtcbiAgICAgICAgICAgIHRoaXMuaHUgPSBodTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3cgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHAubm9TdHJva2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0dWNrICYmIHR5cGVvZiB0aGlzLmh1ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHAuZmlsbCgyNTUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwLmZpbGwodGhpcy5iLCAyMjAgLSBwLmRpc3QodGhpcy5wb3MueCwgdGhpcy5wb3MueSwgMCwgMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcC5wdXNoKCk7XG4gICAgICAgICAgICAvL3Auc3Ryb2tlKDEwMCk7XG4gICAgICAgICAgICAvL2lmKHRoaXMuc3R1Y2spcC5saW5lKDAsMCwwLHRoaXMucG9zLngsdGhpcy5wb3MueSx0aGlzLnBvcy56KVxuICAgICAgICAgICAgbGV0IHRhcmdldFggPSB0aGlzLnBvcy54O1xuICAgICAgICAgICAgbGV0IGR4ID0gdGFyZ2V0WCAtIHRoaXMuZXg7XG4gICAgICAgICAgICB0aGlzLmV4ICs9IGR4ICogdGhpcy5lYXNpbmc7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0WSA9IHRoaXMucG9zLnk7XG4gICAgICAgICAgICBsZXQgZHkgPSB0YXJnZXRZIC0gdGhpcy5leTtcbiAgICAgICAgICAgIHRoaXMuZXkgKz0gZHkgKiB0aGlzLmVhc2luZztcbiAgICAgICAgICAgIHAudHJhbnNsYXRlKHRoaXMuZXgsIHRoaXMuZXksIHRoaXMucG9zLnopO1xuICAgICAgICAgICAgcC5ub1N0cm9rZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3R1Y2spIHtcbiAgICAgICAgICAgICAgICBwLnNwaGVyZSh0aGlzLnIpO1xuICAgICAgICAgICAgICAgIHAuZmlsbCgyNTUsIDAsIDAsIHRoaXMuYWxwaGEpO1xuICAgICAgICAgICAgICAgIHAuc3BoZXJlKHRoaXMuciAqIDEuMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHAuc3BoZXJlKHRoaXMuciAvIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcC5wb3AoKTtcbiAgICAgICAgICAgIHRoaXMuYWxwaGEgLT0gNDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpc3RTcShhLCBiKSB7XG4gICAgICAgIHZhciBkeCA9IGIueCAtIGEueDtcbiAgICAgICAgdmFyIGR5ID0gYi55IC0gYS55O1xuICAgICAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG4gICAgfVxuICAgIHZhciB0cmVlMSA9IFtdO1xuICAgIHZhciB3YWxrZXJzMSA9IFtdO1xuICAgIHZhciBtYXhXYWxrZXJzMSA9IDUwMDtcbiAgICB2YXIgaXRlcmF0aW9uczEgPSAxMDA7XG4gICAgdmFyIHJhZGl1czEgPSA1O1xuICAgIHZhciBodSA9IDA7XG4gICAgdmFyIHNocmluazEgPSAwLjk5NTtcbiAgICB2YXIgdHJlZTIgPSBbXTtcbiAgICB2YXIgd2Fsa2VyczIgPSBbXTtcbiAgICB2YXIgbWF4V2Fsa2VyczIgPSAzMDA7XG4gICAgdmFyIGl0ZXJhdGlvbnMyID0gMTAwO1xuICAgIHZhciByYWRpdXMyID0gNTtcbiAgICB2YXIgc2hyaW5rMiA9IDAuOTk1O1xuICAgIHAuc2V0dXAgPSAoKSA9PiB7XG4gICAgICAgIGxldCBjYW52YXMgPSBwLmNyZWF0ZUNhbnZhcyg4MDAsIDgwMCwgcC5XRUJHTCk7XG4gICAgICAgIHRyZWUxWzBdID0gbmV3IFdhbGtlcigwLCAwKTtcbiAgICAgICAgcmFkaXVzMSAqPSBzaHJpbmsxO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFdhbGtlcnMxOyBpKyspIHtcbiAgICAgICAgICAgIHdhbGtlcnMxW2ldID0gbmV3IFdhbGtlcigpO1xuICAgICAgICAgICAgcmFkaXVzMSAqPSBzaHJpbmsxO1xuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgdHJlZTJbMF0gPSBuZXcgV2Fsa2VyKDAsIDApO1xuICAgICAgICAgICAgICAgIHJhZGl1czIgKj0gc2hyaW5rMjtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heFdhbGtlcnMyOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgd2Fsa2VyczJbaV0gPSBuZXcgV2Fsa2VyKCk7XG4gICAgICAgICAgICAgICAgICAgIHJhZGl1czIgKj0gc2hyaW5rMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKi9cbiAgICB9XG4gICAgcC5kcmF3ID0gKCkgPT4ge1xuICAgICAgICBwLmNhbWVyYSgtMTAwLCAtMTAwLCA0MDAgLSBwLmZyYW1lQ291bnQgLyA4MCwgMCwgMCwgMCwgMCwgMSwgMCk7XG4gICAgICAgIHAuYmFja2dyb3VuZCgwKTtcbiAgICAgICAgLy9wLnBvaW50TGlnaHQoMTUwLCAxNTAsIDE1MCwgNTAwLCAwLCAyMDApO1xuICAgICAgICAvL3AuZGlyZWN0aW9uYWxMaWdodCgyNTUsMjU1LDI1NSwgMCwgMSwgMCk7XG4gICAgICAgIC8vcC5hbWJpZW50TGlnaHQoMTAwKTtcbiAgICAgICAgcC5zbW9vdGgoKTtcbiAgICAgICAgLy9wLnJvdGF0ZVkocC5mcmFtZUNvdW50LzEwMCk7XG4gICAgICAgIHAucm90YXRlWihwLmZyYW1lQ291bnQgLyA2MDApO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0cmVlMVtpXS5zaG93KCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3YWxrZXJzMS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgd2Fsa2VyczFbaV0uc2hvdygpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgaXRlcmF0aW9uczE7IG4rKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHdhbGtlcnMxLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgd2Fsa2VyczFbaV0ud2FsaygpO1xuICAgICAgICAgICAgICAgIGlmICh3YWxrZXJzMVtpXS5jaGVja1N0dWNrKHRyZWUxKSkge1xuICAgICAgICAgICAgICAgICAgICB3YWxrZXJzMVtpXS5zZXRIdWUoaHUgJSAzNjApO1xuICAgICAgICAgICAgICAgICAgICBodSArPSAyO1xuICAgICAgICAgICAgICAgICAgICB0cmVlMS5wdXNoKHdhbGtlcnMxW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgd2Fsa2VyczEuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgciA9IHdhbGtlcnMxW3dhbGtlcnMxLmxlbmd0aCAtIDFdLnI7XG4gICAgICAgIHdoaWxlICh3YWxrZXJzMS5sZW5ndGggPCBtYXhXYWxrZXJzMSAmJiByYWRpdXMxID4gMSkge1xuICAgICAgICAgICAgcmFkaXVzMSAqPSBzaHJpbmsxO1xuICAgICAgICAgICAgd2Fsa2VyczEucHVzaChuZXcgV2Fsa2VyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHAuZmlsbCgyNTUpO1xuICAgICAgICBwLnNwaGVyZSg2KTtcbiAgICAgICAgLy9wLnJvdGF0ZVgocC5IQUxGX1BJKTtcbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyZWUyW2ldLnNob3coKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3YWxrZXJzMi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB3YWxrZXJzMltpXS5zaG93KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgaXRlcmF0aW9uczI7IG4rKykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gd2Fsa2VyczIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtlcnMyW2ldLndhbGsoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWxrZXJzMltpXS5jaGVja1N0dWNrKHRyZWUyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtlcnMyW2ldLnNldEh1ZShodSAlIDM2MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHUgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlMi5wdXNoKHdhbGtlcnMyW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWxrZXJzMi5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgciA9IHdhbGtlcnMyW3dhbGtlcnMyLmxlbmd0aCAtIDFdLnI7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHdhbGtlcnMyLmxlbmd0aCA8IG1heFdhbGtlcnMyICYmIHJhZGl1czIgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJhZGl1czIgKj0gc2hyaW5rMjtcbiAgICAgICAgICAgICAgICAgICAgd2Fsa2VyczIucHVzaChuZXcgV2Fsa2VyKCkpO1xuICAgICAgICAgICAgICAgIH0gKi9cbiAgICB9XG5cbiAgICBwLmtleVByZXNzZWQgPSAoKSA9PiB7XG4gICAgICAgIGlmKHAua2V5ID09ICdtJykge1xuICAgICAgICAgICAgcC5zYXZlKERhdGUubm93KCkgKyBcIi5qcGdcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBza2V0Y2g7XG5uZXcgcDUoc2tldGNoKTsiLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSwgZXZhbCkoXCJ0aGlzXCIpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file + */return function(e){t=e()}(function(){var t=function(){if(!(this instanceof t))throw new Error("constructor needs to be called with the 'new' keyword")};t.prototype.toString=function(){for(var e in t){var i=e[0].match(/^[A-Z]$/),r=t[e]===this.constructor;if(t.isFunction(t[e])&&i&&r)return e}return"Tone"},t.prototype.dispose=function(){return this},t.prototype.set=function(e,i,r){if(t.isObject(e))r=i;else if(t.isString(e)){var n={};n[e]=i,e=n}t:for(var o in e){i=e[o];var s=this;if(-1!==o.indexOf(".")){for(var a=o.split("."),h=0;hthis.memory){var r=this.length-this.memory;this._timeline.splice(0,r)}return this},t.Timeline.prototype.remove=function(t){var e=this._timeline.indexOf(t);return-1!==e&&this._timeline.splice(e,1),this},t.Timeline.prototype.get=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return-1!==r?this._timeline[r]:null},t.Timeline.prototype.peek=function(){return this._timeline[0]},t.Timeline.prototype.shift=function(){return this._timeline.shift()},t.Timeline.prototype.getAfter=function(e,i){i=t.defaultArg(i,"time");var r=this._search(e,i);return r+10&&this._timeline[r-1][i]=0?this._timeline[n-1]:null},t.Timeline.prototype.cancel=function(t){if(this._timeline.length>1){var e=this._search(t);if(e>=0)if(this._timeline[e].time===t){for(var i=e;i>=0&&this._timeline[i].time===t;i--)e=i;this._timeline=this._timeline.slice(0,e)}else this._timeline=this._timeline.slice(0,e+1);else this._timeline=[]}else 1===this._timeline.length&&this._timeline[0].time>=t&&(this._timeline=[]);return this},t.Timeline.prototype.cancelBefore=function(t){var e=this._search(t);return e>=0&&(this._timeline=this._timeline.slice(e+1)),this},t.Timeline.prototype.previousEvent=function(t){var e=this._timeline.indexOf(t);return e>0?this._timeline[e-1]:null},t.Timeline.prototype._search=function(e,i){if(0===this._timeline.length)return-1;i=t.defaultArg(i,"time");var r=0,n=this._timeline.length,o=n;if(n>0&&this._timeline[n-1][i]<=e)return n-1;for(;re)return s;a[i]>e?o=s:r=s+1}return-1},t.Timeline.prototype._iterate=function(e,i,r){i=t.defaultArg(i,0),r=t.defaultArg(r,this._timeline.length-1),this._timeline.slice(i,r+1).forEach(function(t){e.call(this,t)}.bind(this))},t.Timeline.prototype.forEach=function(t){return this._iterate(t),this},t.Timeline.prototype.forEachBefore=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(e,0,i),this},t.Timeline.prototype.forEachAfter=function(t,e){var i=this._search(t);return this._iterate(e,i+1),this},t.Timeline.prototype.forEachBetween=function(t,e,i){var r=this._search(t),n=this._search(e);return-1!==r&&-1!==n?(this._timeline[r].time!==t&&(r+=1),this._timeline[n].time===e&&(n-=1),this._iterate(i,r,n)):-1===r&&this._iterate(i,0,n),this},t.Timeline.prototype.forEachFrom=function(t,e){for(var i=this._search(t);i>=0&&this._timeline[i].time>=t;)i--;return this._iterate(e,i+1),this},t.Timeline.prototype.forEachAtTime=function(t,e){var i=this._search(t);return-1!==i&&this._iterate(function(i){i.time===t&&e.call(this,i)},0,i),this},t.Timeline.prototype.dispose=function(){return t.prototype.dispose.call(this),this._timeline=null,this},t.Timeline}),e(function(t){t.supported&&(!window.hasOwnProperty("OfflineAudioContext")&&window.hasOwnProperty("webkitOfflineAudioContext")&&(window.OfflineAudioContext=window.webkitOfflineAudioContext),new OfflineAudioContext(1,1,44100).startRendering()instanceof Promise||(OfflineAudioContext.prototype._native_startRendering=OfflineAudioContext.prototype.startRendering,OfflineAudioContext.prototype.startRendering=function(){return new Promise(function(t){this.oncomplete=function(e){t(e.renderedBuffer)},this._native_startRendering()}.bind(this))}))}),e(function(t){if(t.supported){!window.hasOwnProperty("AudioContext")&&window.hasOwnProperty("webkitAudioContext")&&(window.AudioContext=window.webkitAudioContext),AudioContext.prototype.close||(AudioContext.prototype.close=function(){return t.isFunction(this.suspend)&&this.suspend(),Promise.resolve()}),AudioContext.prototype.resume||(AudioContext.prototype.resume=function(){return Promise.resolve()}),!AudioContext.prototype.createGain&&AudioContext.prototype.createGainNode&&(AudioContext.prototype.createGain=AudioContext.prototype.createGainNode),!AudioContext.prototype.createDelay&&AudioContext.prototype.createDelayNode&&(AudioContext.prototype.createDelay=AudioContext.prototype.createDelayNode);var e=!1,i=new OfflineAudioContext(1,1,44100),r=new Uint32Array([1179011410,48,1163280727,544501094,16,131073,44100,176400,1048580,1635017060,8,0,0,0,0]).buffer;try{i.decodeAudioData(r)instanceof Promise&&(e=!0)}catch(t){e=!1}e||(AudioContext.prototype._native_decodeAudioData=AudioContext.prototype.decodeAudioData,AudioContext.prototype.decodeAudioData=function(t){return new Promise(function(e,i){this._native_decodeAudioData(t,e,i)}.bind(this))})}}),e(function(t){t.Context=function(){t.Emitter.call(this);var i=t.defaults(arguments,["context"],t.Context);if(!i.context&&(i.context=new window.AudioContext,!i.context))throw new Error("could not create AudioContext. Possibly too many AudioContexts running already.");for(var r in this._context=i.context,this._context)this._defineProperty(this._context,r);this._latencyHint=i.latencyHint,this._constants={},this.lookAhead=i.lookAhead,this._computedUpdateInterval=0,this._ticker=new e(this.emit.bind(this,"tick"),i.clockSource,i.updateInterval),this._timeouts=new t.Timeline,this._timeoutIds=0,this.on("tick",this._timeoutLoop.bind(this))},t.extend(t.Context,t.Emitter),t.Emitter.mixin(t.Context),t.Context.defaults={clockSource:"worker",latencyHint:"interactive",lookAhead:.1,updateInterval:.03},t.Context.prototype._defineProperty=function(e,i){t.isUndef(this[i])&&Object.defineProperty(this,i,{get:function(){return"function"==typeof e[i]?e[i].bind(e):e[i]},set:function(t){e[i]=t}})},t.Context.prototype.now=function(){return this._context.currentTime+this.lookAhead},t.Context.prototype.ready=function(){return new Promise(function(t){"running"===this._context.state?t():this._context.resume().then(function(){t()})}.bind(this))},t.Context.prototype.close=function(){return this._context.close().then(function(){t.Context.emit("close",this)}.bind(this))},t.Context.prototype.getConstant=function(t){if(this._constants[t])return this._constants[t];for(var e=this._context.createBuffer(1,128,this._context.sampleRate),i=e.getChannelData(0),r=0;r1&&(this.input=new Array(t)),1===e?this.output=this.context.createGain():e>1&&(this.output=new Array(e))},Object.defineProperty(t.AudioNode.prototype,"channelCount",{get:function(){return this.output.channelCount},set:function(t){return this.output.channelCount=t}}),Object.defineProperty(t.AudioNode.prototype,"channelCountMode",{get:function(){return this.output.channelCountMode},set:function(t){return this.output.channelCountMode=t}}),Object.defineProperty(t.AudioNode.prototype,"channelInterpretation",{get:function(){return this.output.channelInterpretation},set:function(t){return this.output.channelInterpretation=t}}),Object.defineProperty(t.AudioNode.prototype,"numberOfInputs",{get:function(){return this.input?t.isArray(this.input)?this.input.length:1:0}}),Object.defineProperty(t.AudioNode.prototype,"numberOfOutputs",{get:function(){return this.output?t.isArray(this.output)?this.output.length:1:0}}),t.AudioNode.prototype._onConnect=function(){},t.AudioNode.prototype.connect=function(e,i,r){return e._onConnect&&e._onConnect(this),t.isArray(this.output)?(i=t.defaultArg(i,0),this.output[i].connect(e,0,r)):this.output.connect(e,i,r),this},t.AudioNode.prototype.disconnect=function(e,i,r){t.isArray(this.output)?t.isNumber(e)?this.output[e].disconnect():(i=t.defaultArg(i,0),this.output[i].disconnect(e,0,r)):this.output.disconnect.apply(this.output,arguments)},t.AudioNode.prototype.chain=function(){for(var t=this,e=0;e3&&(r=parseFloat(parseFloat(r).toFixed(3))),[i,e,r].join(":")},t.Time.prototype.toTicks=function(){var t=this._beatsToUnits(1),e=this.valueOf()/t;return Math.round(e*this._getPPQ())},t.Time.prototype.toSeconds=function(){return this.valueOf()},t.Time.prototype.toMidi=function(){return t.Frequency.ftom(this.toFrequency())},t.Time}),e(function(t){return t.TransportTime=function(e,i){if(!(this instanceof t.TransportTime))return new t.TransportTime(e,i);t.Time.call(this,e,i)},t.extend(t.TransportTime,t.Time),t.TransportTime.prototype._now=function(){return t.Transport.seconds},t.TransportTime}),e(function(t){return t.Type={Default:"number",Time:"time",Frequency:"frequency",TransportTime:"transportTime",Ticks:"ticks",NormalRange:"normalRange",AudioRange:"audioRange",Decibels:"db",Interval:"interval",BPM:"bpm",Positive:"positive",Gain:"gain",Cents:"cents",Degrees:"degrees",MIDI:"midi",BarsBeatsSixteenths:"barsBeatsSixteenths",Samples:"samples",Hertz:"hertz",Note:"note",Milliseconds:"milliseconds",Seconds:"seconds",Notation:"notation"},t.prototype.toSeconds=function(e){return t.isNumber(e)?e:t.isUndef(e)?this.now():t.isString(e)?new t.Time(e).toSeconds():e instanceof t.TimeBase?e.toSeconds():void 0},t.prototype.toFrequency=function(e){return t.isNumber(e)?e:t.isString(e)||t.isUndef(e)?new t.Frequency(e).valueOf():e instanceof t.TimeBase?e.toFrequency():void 0},t.prototype.toTicks=function(e){return t.isNumber(e)||t.isString(e)?new t.TransportTime(e).toTicks():t.isUndef(e)?t.Transport.ticks:e instanceof t.TimeBase?e.toTicks():void 0},t}),e(function(t){return t.Param=function(){var e=t.defaults(arguments,["param","units","convert"],t.Param);t.AudioNode.call(this),this._param=this.input=e.param,this.units=e.units,this.convert=e.convert,this.overridden=!1,this._events=new t.Timeline(1e3),t.isDefined(e.value)&&this._param&&(this.value=e.value)},t.extend(t.Param,t.AudioNode),t.Param.defaults={units:t.Type.Default,convert:!0,param:void 0},Object.defineProperty(t.Param.prototype,"value",{get:function(){var t=this.now();return this._toUnits(this.getValueAtTime(t))},set:function(t){this._initialValue=this._fromUnits(t),this.cancelScheduledValues(this.context.currentTime),this.setValueAtTime(t,this.context.currentTime)}}),Object.defineProperty(t.Param.prototype,"minValue",{get:function(){return this.units===t.Type.Time||this.units===t.Type.Frequency||this.units===t.Type.NormalRange||this.units===t.Type.Positive||this.units===t.Type.BPM?0:this.units===t.Type.AudioRange?-1:this.units===t.Type.Decibels?-1/0:this._param.minValue}}),Object.defineProperty(t.Param.prototype,"maxValue",{get:function(){return this.units===t.Type.NormalRange||this.units===t.Type.AudioRange?1:this._param.maxValue}}),t.Param.prototype._fromUnits=function(e){if(!this.convert&&!t.isUndef(this.convert)||this.overridden)return e;switch(this.units){case t.Type.Time:return this.toSeconds(e);case t.Type.Frequency:return this.toFrequency(e);case t.Type.Decibels:return t.dbToGain(e);case t.Type.NormalRange:return Math.min(Math.max(e,0),1);case t.Type.AudioRange:return Math.min(Math.max(e,-1),1);case t.Type.Positive:return Math.max(e,0);default:return e}},t.Param.prototype._toUnits=function(e){if(!this.convert&&!t.isUndef(this.convert))return e;switch(this.units){case t.Type.Decibels:return t.gainToDb(e);default:return e}},t.Param.prototype._minOutput=1e-5,t.Param.AutomationType={Linear:"linearRampToValueAtTime",Exponential:"exponentialRampToValueAtTime",Target:"setTargetAtTime",SetValue:"setValueAtTime"},t.Param.prototype.setValueAtTime=function(e,i){return i=this.toSeconds(i),e=this._fromUnits(e),this._events.add({type:t.Param.AutomationType.SetValue,value:e,time:i}),this._param.setValueAtTime(e,i),this},t.Param.prototype.getValueAtTime=function(e){e=this.toSeconds(e);var i=this._events.getAfter(e),r=this._events.get(e),n=t.defaultArg(this._initialValue,this._param.defaultValue),o=n;if(null===r)o=n;else if(r.type===t.Param.AutomationType.Target){var s,a=this._events.getBefore(r.time);s=null===a?n:a.value,o=this._exponentialApproach(r.time,s,r.value,r.constant,e)}else o=null===i?r.value:i.type===t.Param.AutomationType.Linear?this._linearInterpolate(r.time,r.value,i.time,i.value,e):i.type===t.Param.AutomationType.Exponential?this._exponentialInterpolate(r.time,r.value,i.time,i.value,e):r.value;return o},t.Param.prototype.setRampPoint=function(t){t=this.toSeconds(t);var e=this.getValueAtTime(t);return this.cancelAndHoldAtTime(t),0===e&&(e=this._minOutput),this.setValueAtTime(this._toUnits(e),t),this},t.Param.prototype.linearRampToValueAtTime=function(e,i){return e=this._fromUnits(e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Linear,value:e,time:i}),this._param.linearRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampToValueAtTime=function(e,i){return e=this._fromUnits(e),e=Math.max(this._minOutput,e),i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Exponential,time:i,value:e}),this._param.exponentialRampToValueAtTime(e,i),this},t.Param.prototype.exponentialRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.linearRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.linearRampToValueAtTime(t,i+this.toSeconds(e)),this},t.Param.prototype.targetRampTo=function(t,e,i){return i=this.toSeconds(i),this.setRampPoint(i),this.exponentialApproachValueAtTime(t,i,e),this},t.Param.prototype.exponentialApproachValueAtTime=function(t,e,i){var r=Math.log(this.toSeconds(i)+1)/Math.log(200);return e=this.toSeconds(e),this.setTargetAtTime(t,e,r)},t.Param.prototype.setTargetAtTime=function(e,i,r){if(e=this._fromUnits(e),r<=0)throw new Error("timeConstant must be greater than 0");return i=this.toSeconds(i),this._events.add({type:t.Param.AutomationType.Target,value:e,time:i,constant:r}),this._param.setTargetAtTime(e,i,r),this},t.Param.prototype.setValueCurveAtTime=function(e,i,r,n){n=t.defaultArg(n,1),r=this.toSeconds(r),i=this.toSeconds(i),this.setValueAtTime(e[0]*n,i);for(var o=r/(e.length-1),s=1;s=0;)this.emit("tick"),this._currentTime+=this.blockTime;return this._context.startRendering()},t.OfflineContext.prototype.close=function(){return this._context=null,Promise.resolve()},t.OfflineContext}),e(function(t){if(t.supported){var e=navigator.userAgent.toLowerCase();e.includes("safari")&&!e.includes("chrome")&&e.includes("mobile")&&(t.OfflineContext.prototype.createBufferSource=function(){var t=this._context.createBufferSource(),e=t.start;return t.start=function(i){this.setTimeout(function(){e.call(t,i)}.bind(this),0)}.bind(this),t})}}),e(function(t){return t.Gain=function(){var e=t.defaults(arguments,["gain","units"],t.Gain);t.AudioNode.call(this),this.input=this.output=this._gainNode=this.context.createGain(),this.gain=new t.Param({param:this._gainNode.gain,units:e.units,value:e.gain,convert:e.convert}),this._readOnly("gain")},t.extend(t.Gain,t.AudioNode),t.Gain.defaults={gain:1,convert:!0},t.Gain.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._gainNode.disconnect(),this._gainNode=null,this._writable("gain"),this.gain.dispose(),this.gain=null},t.Gain}),e(function(t){if(t.supported&&!AudioContext.prototype.createConstantSource){var e=function(t){this.context=t;for(var e=t.createBuffer(1,128,t.sampleRate),i=e.getChannelData(0),r=0;r0&&(n=(1-s)/(1/n)),"linear"===this._attackCurve)this._sig.linearRampTo(i,n,e);else if("exponential"===this._attackCurve)this._sig.targetRampTo(i,n,e);else if(n>0){this._sig.cancelAndHoldAtTime(e);var a=this._attackCurve;if(n0){var r=this.toSeconds(this.release);if("linear"===this._releaseCurve)this._sig.linearRampTo(0,r,e);else if("exponential"===this._releaseCurve)this._sig.targetRampTo(0,r,e);else{var n=this._releaseCurve;t.isArray(n)&&(this._sig.cancelAndHoldAtTime(e),this._sig.setValueCurveAtTime(n,e,r,i))}}return this},t.Envelope.prototype.getValueAtTime=function(t){return this._sig.getValueAtTime(t)},t.Envelope.prototype.triggerAttackRelease=function(t,e,i){return e=this.toSeconds(e),this.triggerAttack(e,i),this.triggerRelease(e+this.toSeconds(t)),this},t.Envelope.prototype.cancel=function(t){return this._sig.cancelScheduledValues(t),this},t.Envelope.prototype.connect=t.SignalBase.prototype.connect,function(){var e,i,r=[];for(e=0;e<128;e++)r[e]=Math.sin(e/127*(Math.PI/2));var n=[];for(e=0;e<127;e++){i=e/127;var o=Math.sin(i*(2*Math.PI)*6.4-Math.PI/2)+1;n[e]=o/10+.83*i}n[127]=1;var s=[];for(e=0;e<128;e++)s[e]=Math.ceil(e/127*5)/5;var a=[];for(e=0;e<128;e++)i=e/127,a[e]=.5*(1-Math.cos(Math.PI*i));var h=[];for(e=0;e<128;e++){i=e/127;var l=4*Math.pow(i,3)+.2,u=Math.cos(l*Math.PI*2*i);h[e]=Math.abs(u*(1-i))}function c(t){for(var e=new Array(t.length),i=0;i0?a:(-n-s)/o)+i.time}return i?0===i.value?1/0:i.time+(e-i.ticks)/i.value:e/this._initialValue},t.TickSignal.prototype.ticksToTime=function(e,i){return i=this.toSeconds(i),new t.Time(this.getDurationOfTicks(e,i))},t.TickSignal.prototype.timeToTicks=function(e,i){i=this.toSeconds(i),e=this.toSeconds(e);var r=this.getTicksAtTime(i),n=this.getTicksAtTime(i+e);return new t.Ticks(n-r)},t.TickSignal}),e(function(t){return t.TimelineState=function(e){t.Timeline.call(this),this._initial=e},t.extend(t.TimelineState,t.Timeline),t.TimelineState.prototype.getValueAtTime=function(t){var e=this.get(t);return null!==e?e.state:this._initial},t.TimelineState.prototype.setStateAtTime=function(t,e){return this.add({state:t,time:e}),this},t.TimelineState.prototype.getLastState=function(t,e){e=this.toSeconds(e);for(var i=this._search(e);i>=0;i--){var r=this._timeline[i];if(r.state===t)return r}},t.TimelineState.prototype.getNextState=function(t,e){e=this.toSeconds(e);var i=this._search(e);if(-1!==i)for(var r=i;r0&&(this._tickOffset.cancel(i.time),this._state.cancel(i.time))}return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this.setTicksAtTime(0,e),this},t.TickSource.prototype.pause=function(e){return e=this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started&&this._state.setStateAtTime(t.State.Paused,e),this},t.TickSource.prototype.cancel=function(t){return t=this.toSeconds(t),this._state.cancel(t),this._tickOffset.cancel(t),this},t.TickSource.prototype.getTicksAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.ticks,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=this.frequency.getTicksAtTime(e.time)-this.frequency.getTicksAtTime(i)),n=e}.bind(this)),this._state.remove(r),o},Object.defineProperty(t.TickSource.prototype,"ticks",{get:function(){return this.getTicksAtTime(this.now())},set:function(t){this.setTicksAtTime(t,this.now())}}),Object.defineProperty(t.TickSource.prototype,"seconds",{get:function(){return this.getSecondsAtTime(this.now())},set:function(t){var e=this.now(),i=this.frequency.timeToTicks(t,e);this.setTicksAtTime(i,e)}}),t.TickSource.prototype.getSecondsAtTime=function(e){e=this.toSeconds(e);var i=this._state.getLastState(t.State.Stopped,e),r={state:t.State.Paused,time:e};this._state.add(r);var n=i,o=0;return this._state.forEachBetween(i.time,e+this.sampleTime,function(e){var i=n.time,r=this._tickOffset.get(e.time);r.time>=n.time&&(o=r.seconds,i=r.time),n.state===t.State.Started&&e.state!==t.State.Started&&(o+=e.time-i),n=e}.bind(this)),this._state.remove(r),o},t.TickSource.prototype.setTicksAtTime=function(t,e){return e=this.toSeconds(e),this._tickOffset.cancel(e),this._tickOffset.add({time:e,ticks:t,seconds:this.frequency.getDurationOfTicks(t,e)}),this},t.TickSource.prototype.getStateAtTime=function(t){return t=this.toSeconds(t),this._state.getValueAtTime(t)},t.TickSource.prototype.getTimeOfTick=function(e,i){i=t.defaultArg(i,this.now());var r=this._tickOffset.get(i),n=this._state.get(i),o=Math.max(r.time,n.time),s=this.frequency.getTicksAtTime(o)+e-r.ticks;return this.frequency.getTimeOfTick(s)},t.TickSource.prototype.forEachTickBetween=function(e,i,r){var n=this._state.get(e);if(this._state.forEachBetween(e,i,function(i){n.state===t.State.Started&&i.state!==t.State.Started&&this.forEachTickBetween(Math.max(n.time,e),i.time-this.sampleTime,r),n=i}.bind(this)),e=Math.max(n.time,e),n.state===t.State.Started&&this._state){var o=this.frequency.getTicksAtTime(e),s=(o-this.frequency.getTicksAtTime(n.time))%1;0!==s&&(s=1-s);for(var a=this.frequency.getTimeOfTick(o+s),h=null;a0)if(null===t.left.right)(e=t.left).right=t.right,i=e;else{for(e=t.left.right;null!==e.right;)e=e.right;e.parent.right=e.left,i=e.parent,e.left=t.left,e.right=t.right}else if(null===t.right.left)(e=t.right).left=t.left,i=e;else{for(e=t.right.left;null!==e.left;)e=e.left;e.parent=e.parent,e.parent.left=e.right,i=e.parent,e.left=t.left,e.right=t.right}null!==t.parent?t.isLeftChild()?t.parent.left=e:t.parent.right=e:this._setRoot(e),this._rebalance(i)}t.dispose()},t.IntervalTimeline.prototype._rotateLeft=function(t){var e=t.parent,i=t.isLeftChild(),r=t.right;t.right=r.left,r.left=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rotateRight=function(t){var e=t.parent,i=t.isLeftChild(),r=t.left;t.left=r.right,r.right=t,null!==e?i?e.left=r:e.right=r:this._setRoot(r)},t.IntervalTimeline.prototype._rebalance=function(t){var e=t.getBalance();e>1?t.left.getBalance()<0?this._rotateLeft(t.left):this._rotateRight(t):e<-1&&(t.right.getBalance()>0?this._rotateRight(t.right):this._rotateLeft(t))},t.IntervalTimeline.prototype.get=function(t){if(null!==this._root){var e=[];if(this._root.search(t,e),e.length>0){for(var i=e[0],r=1;ri.low&&(i=e[r]);return i.event}}return null},t.IntervalTimeline.prototype.forEach=function(t){if(null!==this._root){var e=[];this._root.traverse(function(t){e.push(t)});for(var i=0;i=0;r--){var n=i[r].event;n&&e(n)}}return this},t.IntervalTimeline.prototype.forEachFrom=function(t,e){if(null!==this._root){var i=[];this._root.searchAfter(t,i);for(var r=i.length-1;r>=0;r--)e(i[r].event)}return this},t.IntervalTimeline.prototype.dispose=function(){var t=[];null!==this._root&&this._root.traverse(function(e){t.push(e)});for(var e=0;ethis.max||(null!==this.left&&this.left.search(t,e),this.low<=t&&this.high>t&&e.push(this),this.low>t||null!==this.right&&this.right.search(t,e))},e.prototype.searchAfter=function(t,e){this.low>=t&&(e.push(this),null!==this.left&&this.left.searchAfter(t,e)),null!==this.right&&this.right.searchAfter(t,e)},e.prototype.traverse=function(t){t(this),null!==this.left&&this.left.traverse(t),null!==this.right&&this.right.traverse(t)},e.prototype.updateHeight=function(){null!==this.left&&null!==this.right?this.height=Math.max(this.left.height,this.right.height)+1:null!==this.right?this.height=this.right.height+1:null!==this.left?this.height=this.left.height+1:this.height=0},e.prototype.updateMax=function(){this.max=this.high,null!==this.left&&(this.max=Math.max(this.max,this.left.max)),null!==this.right&&(this.max=Math.max(this.max,this.right.max))},e.prototype.getBalance=function(){var t=0;return null!==this.left&&null!==this.right?t=this.left.height-this.right.height:null!==this.left?t=this.left.height+1:null!==this.right&&(t=-(this.right.height+1)),t},e.prototype.isLeftChild=function(){return null!==this.parent&&this.parent.left===this},Object.defineProperty(e.prototype,"left",{get:function(){return this._left},set:function(t){this._left=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),Object.defineProperty(e.prototype,"right",{get:function(){return this._right},set:function(t){this._right=t,null!==t&&(t.parent=this),this.updateHeight(),this.updateMax()}}),e.prototype.dispose=function(){this.parent=null,this._left=null,this._right=null,this.event=null},t.IntervalTimeline}),e(function(t){return t.Ticks=function(e,i){if(!(this instanceof t.Ticks))return new t.Ticks(e,i);t.TransportTime.call(this,e,i)},t.extend(t.Ticks,t.TransportTime),t.Ticks.prototype._defaultUnits="i",t.Ticks.prototype._now=function(){return t.Transport.ticks},t.Ticks.prototype._beatsToUnits=function(t){return this._getPPQ()*t},t.Ticks.prototype._secondsToUnits=function(t){return t/(60/this._getBpm())*this._getPPQ()},t.Ticks.prototype._ticksToUnits=function(t){return t},t.Ticks.prototype.toTicks=function(){return this.valueOf()},t.Ticks.prototype.toSeconds=function(){return this.valueOf()/this._getPPQ()*(60/this._getBpm())},t.Ticks}),e(function(t){return t.TransportEvent=function(e,i){i=t.defaultArg(i,t.TransportEvent.defaults),t.call(this),this.Transport=e,this.id=t.TransportEvent._eventId++,this.time=t.Ticks(i.time),this.callback=i.callback,this._once=i.once},t.extend(t.TransportEvent),t.TransportEvent.defaults={once:!1,callback:t.noOp},t.TransportEvent._eventId=0,t.TransportEvent.prototype.invoke=function(t){this.callback&&(this.callback(t),this._once&&this.Transport&&this.Transport.clear(this.id))},t.TransportEvent.prototype.dispose=function(){return t.prototype.dispose.call(this),this.Transport=null,this.callback=null,this.time=null,this},t.TransportEvent}),e(function(t){return t.TransportRepeatEvent=function(e,i){t.TransportEvent.call(this,e,i),i=t.defaultArg(i,t.TransportRepeatEvent.defaults),this.duration=t.Ticks(i.duration),this._interval=t.Ticks(i.interval),this._currentId=-1,this._nextId=-1,this._nextTick=this.time,this._boundRestart=this._restart.bind(this),this.Transport.on("start loopStart",this._boundRestart),this._restart()},t.extend(t.TransportRepeatEvent,t.TransportEvent),t.TransportRepeatEvent.defaults={duration:1/0,interval:1},t.TransportRepeatEvent.prototype.invoke=function(e){this._createEvents(e),t.TransportEvent.prototype.invoke.call(this,e)},t.TransportRepeatEvent.prototype._createEvents=function(e){var i=this.Transport.getTicksAtTime(e);i>=this.time&&i>=this._nextTick&&this._nextTick+this._intervalthis.time&&(this._nextTick=this.time+Math.ceil((i-this.time)/this._interval)*this._interval),this._currentId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick)),this._nextTick+=this._interval,this._nextId=this.Transport.scheduleOnce(this.invoke.bind(this),t.Ticks(this._nextTick))},t.TransportRepeatEvent.prototype.dispose=function(){return this.Transport.clear(this._currentId),this.Transport.clear(this._nextId),this.Transport.off("start loopStart",this._boundRestart),this._boundCreateEvents=null,t.TransportEvent.prototype.dispose.call(this),this.duration=null,this._interval=null,this},t.TransportRepeatEvent}),e(function(t){t.Transport=function(){t.Emitter.call(this),t.getContext(function(){this.loop=!1,this._loopStart=0,this._loopEnd=0,this._ppq=e.defaults.PPQ,this._clock=new t.Clock({callback:this._processTick.bind(this),frequency:0}),this._bindClockEvents(),this.bpm=this._clock.frequency,this.bpm._toUnits=this._toUnits.bind(this),this.bpm._fromUnits=this._fromUnits.bind(this),this.bpm.units=t.Type.BPM,this.bpm.value=e.defaults.bpm,this._readOnly("bpm"),this._timeSignature=e.defaults.timeSignature,this._scheduledEvents={},this._timeline=new t.Timeline,this._repeatedEvents=new t.IntervalTimeline,this._syncedSignals=[],this._swingTicks=e.defaults.PPQ/2,this._swingAmount=0}.bind(this))},t.extend(t.Transport,t.Emitter),t.Transport.defaults={bpm:120,swing:0,swingSubdivision:"8n",timeSignature:4,loopStart:0,loopEnd:"4m",PPQ:192},t.Transport.prototype._processTick=function(e,i){if(this._swingAmount>0&&i%this._ppq!=0&&i%(2*this._swingTicks)!=0){var r=i%(2*this._swingTicks)/(2*this._swingTicks),n=Math.sin(r*Math.PI)*this._swingAmount;e+=t.Ticks(2*this._swingTicks/3).toSeconds()*n}this.loop&&i>=this._loopEnd&&(this.emit("loopEnd",e),this._clock.setTicksAtTime(this._loopStart,e),i=this._loopStart,this.emit("loopStart",e,this._clock.getSecondsAtTime(e)),this.emit("loop",e)),this._timeline.forEachAtTime(i,function(t){t.invoke(e)})},t.Transport.prototype.schedule=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e});return this._addEvent(r,this._timeline)},t.Transport.prototype.scheduleRepeat=function(e,i,r,n){var o=new t.TransportRepeatEvent(this,{callback:e,interval:t.Time(i),time:t.TransportTime(r),duration:t.Time(t.defaultArg(n,1/0))});return this._addEvent(o,this._repeatedEvents)},t.Transport.prototype.scheduleOnce=function(e,i){var r=new t.TransportEvent(this,{time:t.TransportTime(i),callback:e,once:!0});return this._addEvent(r,this._timeline)},t.Transport.prototype.clear=function(t){if(this._scheduledEvents.hasOwnProperty(t)){var e=this._scheduledEvents[t.toString()];e.timeline.remove(e.event),e.event.dispose(),delete this._scheduledEvents[t.toString()]}return this},t.Transport.prototype._addEvent=function(t,e){return this._scheduledEvents[t.id.toString()]={event:t,timeline:e},e.add(t),t.id},t.Transport.prototype.cancel=function(e){return e=t.defaultArg(e,0),e=this.toTicks(e),this._timeline.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this._repeatedEvents.forEachFrom(e,function(t){this.clear(t.id)}.bind(this)),this},t.Transport.prototype._bindClockEvents=function(){this._clock.on("start",function(e,i){i=t.Ticks(i).toSeconds(),this.emit("start",e,i)}.bind(this)),this._clock.on("stop",function(t){this.emit("stop",t)}.bind(this)),this._clock.on("pause",function(t){this.emit("pause",t)}.bind(this))},Object.defineProperty(t.Transport.prototype,"state",{get:function(){return this._clock.getStateAtTime(this.now())}}),t.Transport.prototype.start=function(e,i){return t.isDefined(i)&&(i=this.toTicks(i)),this._clock.start(e,i),this},t.Transport.prototype.stop=function(t){return this._clock.stop(t),this},t.Transport.prototype.pause=function(t){return this._clock.pause(t),this},t.Transport.prototype.toggle=function(e){return e=this.toSeconds(e),this._clock.getStateAtTime(e)!==t.State.Started?this.start(e):this.stop(e),this},Object.defineProperty(t.Transport.prototype,"timeSignature",{get:function(){return this._timeSignature},set:function(e){t.isArray(e)&&(e=e[0]/e[1]*4),this._timeSignature=e}}),Object.defineProperty(t.Transport.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t)}}),t.Transport.prototype.setLoopPoints=function(t,e){return this.loopStart=t,this.loopEnd=e,this},Object.defineProperty(t.Transport.prototype,"swing",{get:function(){return this._swingAmount},set:function(t){this._swingAmount=t}}),Object.defineProperty(t.Transport.prototype,"swingSubdivision",{get:function(){return t.Ticks(this._swingTicks).toNotation()},set:function(t){this._swingTicks=this.toTicks(t)}}),Object.defineProperty(t.Transport.prototype,"position",{get:function(){var e=this.now(),i=this._clock.getTicksAtTime(e);return t.Ticks(i).toBarsBeatsSixteenths()},set:function(t){var e=this.toTicks(t);this.ticks=e}}),Object.defineProperty(t.Transport.prototype,"seconds",{get:function(){return this._clock.seconds},set:function(t){var e=this.now(),i=this.bpm.timeToTicks(t,e);this.ticks=i}}),Object.defineProperty(t.Transport.prototype,"progress",{get:function(){if(this.loop){var t=this.now();return(this._clock.getTicksAtTime(t)-this._loopStart)/(this._loopEnd-this._loopStart)}return 0}}),Object.defineProperty(t.Transport.prototype,"ticks",{get:function(){return this._clock.ticks},set:function(e){if(this._clock.ticks!==e){var i=this.now();this.state===t.State.Started?(this.emit("stop",i),this._clock.setTicksAtTime(e,i),this.emit("start",i,this.seconds)):this._clock.setTicksAtTime(e,i)}}}),t.Transport.prototype.getTicksAtTime=function(t){return Math.round(this._clock.getTicksAtTime(t))},t.Transport.prototype.getSecondsAtTime=function(t){return this._clock.getSecondsAtTime(t)},Object.defineProperty(t.Transport.prototype,"PPQ",{get:function(){return this._ppq},set:function(t){var e=this.bpm.value;this._ppq=t,this.bpm.value=e}}),t.Transport.prototype._fromUnits=function(t){return 1/(60/t/this.PPQ)},t.Transport.prototype._toUnits=function(t){return t/this.PPQ*60},t.Transport.prototype.nextSubdivision=function(e){if(e=this.toTicks(e),this.state!==t.State.Started)return 0;var i=this.now(),r=e-this.getTicksAtTime(i)%e;return this._clock.nextTickTime(r,i)},t.Transport.prototype.syncSignal=function(e,i){if(!i){var r=this.now();i=0!==e.getValueAtTime(r)?e.getValueAtTime(r)/this.bpm.getValueAtTime(r):0}var n=new t.Gain(i);return this.bpm.chain(n,e._param),this._syncedSignals.push({ratio:n,signal:e,initial:e.value}),e.value=0,this},t.Transport.prototype.unsyncSignal=function(t){for(var e=this._syncedSignals.length-1;e>=0;e--){var i=this._syncedSignals[e];i.signal===t&&(i.ratio.dispose(),i.signal.value=i.initial,this._syncedSignals.splice(e,1))}return this},t.Transport.prototype.dispose=function(){return t.Emitter.prototype.dispose.call(this),this._clock.dispose(),this._clock=null,this._writable("bpm"),this.bpm=null,this._timeline.dispose(),this._timeline=null,this._repeatedEvents.dispose(),this._repeatedEvents=null,this};var e=t.Transport;return t.Transport=new e,t.Context.on("init",function(i){i.Transport instanceof e?t.Transport=i.Transport:t.Transport=new e,i.Transport=t.Transport}),t.Context.on("close",function(t){t.Transport instanceof e&&t.Transport.dispose()}),t.Transport}),e(function(t){return t.Volume=function(){var e=t.defaults(arguments,["volume"],t.Volume);t.AudioNode.call(this),this.output=this.input=new t.Gain(e.volume,t.Type.Decibels),this._unmutedVolume=e.volume,this.volume=this.output.gain,this._readOnly("volume"),this.mute=e.mute},t.extend(t.Volume,t.AudioNode),t.Volume.defaults={volume:0,mute:!1},Object.defineProperty(t.Volume.prototype,"mute",{get:function(){return this.volume.value===-1/0},set:function(t){!this.mute&&t?(this._unmutedVolume=this.volume.value,this.volume.value=-1/0):this.mute&&!t&&(this.volume.value=this._unmutedVolume)}}),t.Volume.prototype.dispose=function(){return this.input.dispose(),t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this.volume.dispose(),this.volume=null,this},t.Volume}),e(function(t){t.Master=function(){t.AudioNode.call(this),t.getContext(function(){this.createInsOuts(1,0),this._volume=this.output=new t.Volume,this.volume=this._volume.volume,this._readOnly("volume"),this.input.chain(this.output,this.context.destination)}.bind(this))},t.extend(t.Master,t.AudioNode),t.Master.defaults={volume:0,mute:!1},Object.defineProperty(t.Master.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Master.prototype.chain=function(){this.input.disconnect(),this.input.chain.apply(this.input,arguments),arguments[arguments.length-1].connect(this.output)},t.Master.prototype.dispose=function(){t.AudioNode.prototype.dispose.call(this),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null},t.AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this},window.AudioNode&&(AudioNode.prototype.toMaster=function(){return this.connect(t.Master),this});var e=t.Master;return t.Master=new e,t.Context.on("init",function(i){i.Master instanceof e?t.Master=i.Master:t.Master=new e,i.Master=t.Master}),t.Context.on("close",function(t){t.Master instanceof e&&t.Master.dispose()}),t.Master}),e(function(t){return t.Source=function(e){e=t.defaultArg(e,t.Source.defaults),t.AudioNode.call(this),this._volume=this.output=new t.Volume(e.volume),this.volume=this._volume.volume,this._readOnly("volume"),this._state=new t.TimelineState(t.State.Stopped),this._state.memory=100,this._synced=!1,this._scheduled=[],this._volume.output.output.channelCount=2,this._volume.output.output.channelCountMode="explicit",this.mute=e.mute},t.extend(t.Source,t.AudioNode),t.Source.defaults={volume:0,mute:!1},Object.defineProperty(t.Source.prototype,"state",{get:function(){return this._synced?t.Transport.state===t.State.Started?this._state.getValueAtTime(t.Transport.seconds):t.State.Stopped:this._state.getValueAtTime(this.now())}}),Object.defineProperty(t.Source.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.Source.prototype._start=t.noOp,t.Source.prototype.restart=t.noOp,t.Source.prototype._stop=t.noOp,t.Source.prototype.start=function(e,i,r){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._state.getValueAtTime(e)===t.State.Started)this._state.cancel(e),this._state.setStateAtTime(t.State.Started,e),this.restart(e,i,r);else if(this._state.setStateAtTime(t.State.Started,e),this._synced){var n=this._state.get(e);n.offset=t.defaultArg(i,0),n.duration=r;var o=t.Transport.schedule(function(t){this._start(t,i,r)}.bind(this),e);this._scheduled.push(o),t.Transport.state===t.State.Started&&this._syncedStart(this.now(),t.Transport.seconds)}else this._start.apply(this,arguments);return this},t.Source.prototype.stop=function(e){if(e=t.isUndef(e)&&this._synced?t.Transport.seconds:this.toSeconds(e),this._synced){var i=t.Transport.schedule(this._stop.bind(this),e);this._scheduled.push(i)}else this._stop.apply(this,arguments);return this._state.cancel(e),this._state.setStateAtTime(t.State.Stopped,e),this},t.Source.prototype.sync=function(){return this._synced=!0,this._syncedStart=function(e,i){if(i>0){var r=this._state.get(i);if(r&&r.state===t.State.Started&&r.time!==i){var n,o=i-this.toSeconds(r.time);r.duration&&(n=this.toSeconds(r.duration)-o),this._start(e,this.toSeconds(r.offset)+o,n)}}}.bind(this),this._syncedStop=function(e){var i=t.Transport.getSecondsAtTime(Math.max(e-this.sampleTime,0));this._state.getValueAtTime(i)===t.State.Started&&this._stop(e)}.bind(this),t.Transport.on("start loopStart",this._syncedStart),t.Transport.on("stop pause loopEnd",this._syncedStop),this},t.Source.prototype.unsync=function(){this._synced&&(t.Transport.off("stop pause loopEnd",this._syncedStop),t.Transport.off("start loopStart",this._syncedStart)),this._synced=!1;for(var e=0;e0}}),Object.defineProperty(t.Buffer.prototype,"duration",{get:function(){return this._buffer?this._buffer.duration:0}}),Object.defineProperty(t.Buffer.prototype,"length",{get:function(){return this._buffer?this._buffer.length:0}}),Object.defineProperty(t.Buffer.prototype,"numberOfChannels",{get:function(){return this._buffer?this._buffer.numberOfChannels:0}}),t.Buffer.prototype.fromArray=function(t){var e=t[0].length>0,i=e?t.length:1,r=e?t[0].length:t.length,n=this.context.createBuffer(i,r,this.context.sampleRate);e||1!==i||(t=[t]);for(var o=0;o=this._startTime&&(-1===this._stopTime||e<=this._stopTime)?t.State.Started:t.State.Stopped},t.OscillatorNode.prototype.start=function(t){if(-1!==this._startTime)throw new Error("cannot call OscillatorNode.start more than once");this._startTime=this.toSeconds(t),this._oscillator.start(this._startTime);var e=this.context.currentTime;return this._gainNode.gain.cancelScheduledValues(e),this._gainNode.gain.setValueAtTime(0,e),this._gainNode.gain.setValueAtTime(1,this._startTime),this},t.OscillatorNode.prototype.setPeriodicWave=function(t){return this._oscillator.setPeriodicWave(t),this},t.OscillatorNode.prototype.stop=function(t){return this.cancelStop(),this._stopTime=this.toSeconds(t),this._gainNode.gain.setValueAtTime(0,this._stopTime),this.context.clearTimeout(this._timeout),this._timeout=this.context.setTimeout(function(){this._oscillator.stop(this.now()),this.onended()}.bind(this),this._stopTime-this.now()),this},t.OscillatorNode.prototype.cancelStop=function(){return-1!==this._startTime&&(this._gainNode.gain.cancelScheduledValues(this._startTime+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime)),this.context.clearTimeout(this._timeout),this._stopTime=-1),this},Object.defineProperty(t.OscillatorNode.prototype,"type",{get:function(){return this._oscillator.type},set:function(t){this._oscillator.type=t}}),t.OscillatorNode.prototype.dispose=function(){return this.context.clearTimeout(this._timeout),t.AudioNode.prototype.dispose.call(this),this.onended=null,this._oscillator.disconnect(),this._oscillator=null,this._gainNode.dispose(),this._gainNode=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this},t.OscillatorNode}),e(function(t){return t.Oscillator=function(){var e=t.defaults(arguments,["frequency","type"],t.Oscillator);t.Source.call(this,e),this._oscillator=null,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this._wave=null,this._partials=t.defaultArg(e.partials,[1]),this._phase=e.phase,this._type=null,this.type=e.type,this.phase=this._phase,this._readOnly(["frequency","detune"])},t.extend(t.Oscillator,t.Source),t.Oscillator.defaults={type:"sine",frequency:440,detune:0,phase:0,partials:[]},t.Oscillator.Type={Sine:"sine",Triangle:"triangle",Sawtooth:"sawtooth",Square:"square",Custom:"custom"},t.Oscillator.prototype._start=function(e){this._oscillator=new t.OscillatorNode,this._wave?this._oscillator.setPeriodicWave(this._wave):this._oscillator.type=this._type,this._oscillator.connect(this.output),this.frequency.connect(this._oscillator.frequency),this.detune.connect(this._oscillator.detune),e=this.toSeconds(e),this._oscillator.start(e)},t.Oscillator.prototype._stop=function(t){return this._oscillator&&(t=this.toSeconds(t),this._oscillator.stop(t)),this},t.Oscillator.prototype.restart=function(t){return this._oscillator.cancelStop(),this._state.cancel(this.toSeconds(t)),this},t.Oscillator.prototype.syncFrequency=function(){return t.Transport.syncSignal(this.frequency),this},t.Oscillator.prototype.unsyncFrequency=function(){return t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Oscillator.prototype,"type",{get:function(){return this._type},set:function(e){var i=[t.Oscillator.Type.Sine,t.Oscillator.Type.Square,t.Oscillator.Type.Triangle,t.Oscillator.Type.Sawtooth].includes(e);if(0===this._phase&&i)this._wave=null,null!==this._oscillator&&this._oscillator.type;else{var r=this._getRealImaginary(e,this._phase),n=this.context.createPeriodicWave(r[0],r[1]);this._wave=n,null!==this._oscillator&&this._oscillator.setPeriodicWave(this._wave)}this._type=e}}),t.Oscillator.prototype._getRealImaginary=function(e,i){var r=2048,n=new Float32Array(r),o=new Float32Array(r),s=1;if(e===t.Oscillator.Type.Custom)r=s=this._partials.length+1;else{var a=/^(sine|triangle|square|sawtooth)(\d+)$/.exec(e);a&&(s=parseInt(a[2])+1,e=a[1],r=s=Math.max(s,2))}for(var h=1;h>1&1?-1:1):0;break;case t.Oscillator.Type.Custom:l=this._partials[h-1];break;default:throw new TypeError("Tone.Oscillator: invalid type: "+e)}0!==l?(n[h]=-l*Math.sin(i*h),o[h]=l*Math.cos(i*h)):(n[h]=0,o[h]=0)}return[n,o]},t.Oscillator.prototype._inverseFFT=function(t,e,i){for(var r=0,n=t.length,o=0;on&&r=this.values.length&&(this.index=0)):e===t.CtrlPattern.Type.Down?(this.index--,this.index<0&&(this.index=this.values.length-1)):e===t.CtrlPattern.Type.UpDown||e===t.CtrlPattern.Type.DownUp?(this._direction===t.CtrlPattern.Type.Up?this.index++:this.index--,this.index<0?(this.index=1,this._direction=t.CtrlPattern.Type.Up):this.index>=this.values.length&&(this.index=this.values.length-2,this._direction=t.CtrlPattern.Type.Down)):e===t.CtrlPattern.Type.Random?this.index=Math.floor(Math.random()*this.values.length):e===t.CtrlPattern.Type.RandomWalk?Math.random()<.5?(this.index--,this.index=Math.max(this.index,0)):(this.index++,this.index=Math.min(this.index,this.values.length-1)):e===t.CtrlPattern.Type.RandomOnce?(this.index++,this.index>=this.values.length&&(this.index=0,this._shuffleValues())):e===t.CtrlPattern.Type.AlternateUp?(this._direction===t.CtrlPattern.Type.Up?(this.index+=2,this._direction=t.CtrlPattern.Type.Down):(this.index-=1,this._direction=t.CtrlPattern.Type.Up),this.index>=this.values.length&&(this.index=0,this._direction=t.CtrlPattern.Type.Up)):e===t.CtrlPattern.Type.AlternateDown&&(this._direction===t.CtrlPattern.Type.Up?(this.index+=1,this._direction=t.CtrlPattern.Type.Down):(this.index-=2,this._direction=t.CtrlPattern.Type.Up),this.index<0&&(this.index=this.values.length-1,this._direction=t.CtrlPattern.Type.Down)),this.value},t.CtrlPattern.prototype._shuffleValues=function(){var t=[];this._shuffled=[];for(var e=0;e0;){var i=t.splice(Math.floor(t.length*Math.random()),1);this._shuffled.push(i[0])}},t.CtrlPattern.prototype.dispose=function(){this._shuffled=null,this.values=null},t.CtrlPattern}),e(function(t){return t.CtrlRandom=function(){var e=t.defaults(arguments,["min","max"],t.CtrlRandom);t.call(this),this.min=e.min,this.max=e.max,this.integer=e.integer},t.extend(t.CtrlRandom),t.CtrlRandom.defaults={min:0,max:1,integer:!1},Object.defineProperty(t.CtrlRandom.prototype,"value",{get:function(){var t=this.toSeconds(this.min),e=this.toSeconds(this.max),i=Math.random(),r=i*t+(1-i)*e;return this.integer&&(r=Math.floor(r)),r}}),t.CtrlRandom}),e(function(t){return t.Buffers=function(e){var i=Array.prototype.slice.call(arguments);i.shift();var r=t.defaults(i,["onload","baseUrl"],t.Buffers);for(var n in t.call(this),this._buffers={},this.baseUrl=r.baseUrl,this._loadingCount=0,e)this._loadingCount++,this.add(n,e[n],this._bufferLoaded.bind(this,r.onload))},t.extend(t.Buffers),t.Buffers.defaults={onload:t.noOp,baseUrl:""},t.Buffers.prototype.has=function(t){return this._buffers.hasOwnProperty(t)},t.Buffers.prototype.get=function(t){if(this.has(t))return this._buffers[t];throw new Error("Tone.Buffers: no buffer named "+t)},t.Buffers.prototype._bufferLoaded=function(t){this._loadingCount--,0===this._loadingCount&&t&&t(this)},Object.defineProperty(t.Buffers.prototype,"loaded",{get:function(){var t=!0;for(var e in this._buffers){var i=this.get(e);t=t&&i.loaded}return t}}),t.Buffers.prototype.add=function(e,i,r){return r=t.defaultArg(r,t.noOp),i instanceof t.Buffer?(this._buffers[e]=i,r(this)):i instanceof AudioBuffer?(this._buffers[e]=new t.Buffer(i),r(this)):t.isString(i)&&(this._buffers[e]=new t.Buffer(this.baseUrl+i,r)),this},t.Buffers.prototype.dispose=function(){for(var e in t.prototype.dispose.call(this),this._buffers)this._buffers[e].dispose();return this._buffers=null,this},t.Buffers}),e(function(t){var e={};return t.prototype.send=function(i,r){e.hasOwnProperty(i)||(e[i]=this.context.createGain()),r=t.defaultArg(r,0);var n=new t.Gain(r,t.Type.Decibels);return this.connect(n),n.connect(e[i]),n},t.prototype.receive=function(t,i){return e.hasOwnProperty(t)||(e[t]=this.context.createGain()),e[t].connect(this,0,i),this},t.Context.on("init",function(t){t.Buses?e=t.Buses:(e={},t.Buses=e)}),t}),e(function(t){return t.Draw=function(){t.call(this),this._events=new t.Timeline,this.expiration=.25,this.anticipation=.008,this._boundDrawLoop=this._drawLoop.bind(this)},t.extend(t.Draw),t.Draw.prototype.schedule=function(t,e){return this._events.add({callback:t,time:this.toSeconds(e)}),1===this._events.length&&requestAnimationFrame(this._boundDrawLoop),this},t.Draw.prototype.cancel=function(t){return this._events.cancel(this.toSeconds(t)),this},t.Draw.prototype._drawLoop=function(){for(var e=t.now();this._events.length&&this._events.peek().time-this.anticipation<=e;){var i=this._events.shift();e-i.time<=this.expiration&&i.callback()}this._events.length>0&&requestAnimationFrame(this._boundDrawLoop)},t.Draw=new t.Draw,t.Draw}),e(function(t){t.Listener=function(){t.call(this),this._orientation=[0,0,0,0,0,0],this._position=[0,0,0],t.getContext(function(){this.set(e.defaults)}.bind(this))},t.extend(t.Listener),t.Listener.defaults={positionX:0,positionY:0,positionZ:0,forwardX:0,forwardY:0,forwardZ:1,upX:0,upY:1,upZ:0},t.Listener.prototype._rampTimeConstant=.01,t.Listener.prototype.setPosition=function(t,e,i){if(this.context.listener.positionX){var r=this.now();this.context.listener.positionX.setTargetAtTime(t,r,this._rampTimeConstant),this.context.listener.positionY.setTargetAtTime(e,r,this._rampTimeConstant),this.context.listener.positionZ.setTargetAtTime(i,r,this._rampTimeConstant)}else this.context.listener.setPosition(t,e,i);return this._position=Array.prototype.slice.call(arguments),this},t.Listener.prototype.setOrientation=function(t,e,i,r,n,o){if(this.context.listener.forwardX){var s=this.now();this.context.listener.forwardX.setTargetAtTime(t,s,this._rampTimeConstant),this.context.listener.forwardY.setTargetAtTime(e,s,this._rampTimeConstant),this.context.listener.forwardZ.setTargetAtTime(i,s,this._rampTimeConstant),this.context.listener.upX.setTargetAtTime(r,s,this._rampTimeConstant),this.context.listener.upY.setTargetAtTime(n,s,this._rampTimeConstant),this.context.listener.upZ.setTargetAtTime(o,s,this._rampTimeConstant)}else this.context.listener.setOrientation(t,e,i,r,n,o);return this._orientation=Array.prototype.slice.call(arguments),this},Object.defineProperty(t.Listener.prototype,"positionX",{set:function(t){this._position[0]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[0]}}),Object.defineProperty(t.Listener.prototype,"positionY",{set:function(t){this._position[1]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[1]}}),Object.defineProperty(t.Listener.prototype,"positionZ",{set:function(t){this._position[2]=t,this.setPosition.apply(this,this._position)},get:function(){return this._position[2]}}),Object.defineProperty(t.Listener.prototype,"forwardX",{set:function(t){this._orientation[0]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[0]}}),Object.defineProperty(t.Listener.prototype,"forwardY",{set:function(t){this._orientation[1]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[1]}}),Object.defineProperty(t.Listener.prototype,"forwardZ",{set:function(t){this._orientation[2]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[2]}}),Object.defineProperty(t.Listener.prototype,"upX",{set:function(t){this._orientation[3]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[3]}}),Object.defineProperty(t.Listener.prototype,"upY",{set:function(t){this._orientation[4]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[4]}}),Object.defineProperty(t.Listener.prototype,"upZ",{set:function(t){this._orientation[5]=t,this.setOrientation.apply(this,this._orientation)},get:function(){return this._orientation[5]}}),t.Listener.prototype.dispose=function(){return this._orientation=null,this._position=null,this};var e=t.Listener;return t.Listener=new e,t.Context.on("init",function(i){i.Listener instanceof e?t.Listener=i.Listener:t.Listener=new e,i.Listener=t.Listener}),t.Listener}),e(function(t){return t.Offline=function(e,i){var r,n=t.context.sampleRate,o=t.context,s=function e(i,r,n,o){o=t.defaultArg(o,0);var s=new t.OfflineContext(2,r,n);t.context=s;var a=i(t.Transport);return s.currentTime>0&&o<1e3?e(i,r,n,++o):{response:a,context:s}}(e,i,n),a=s.response,h=s.context;return r=a instanceof Promise?a.then(function(){return h.render()}):h.render(),t.context=o,r.then(function(e){return new t.Buffer(e)})},t.Offline}),e(function(t){return t.Effect=function(){var e=t.defaults(arguments,["wet"],t.Effect);t.AudioNode.call(this),this.createInsOuts(1,1),this._dryWet=new t.CrossFade(e.wet),this.wet=this._dryWet.fade,this.effectSend=new t.Gain,this.effectReturn=new t.Gain,this.input.connect(this._dryWet.a),this.input.connect(this.effectSend),this.effectReturn.connect(this._dryWet.b),this._dryWet.connect(this.output),this._readOnly(["wet"])},t.extend(t.Effect,t.AudioNode),t.Effect.defaults={wet:1},t.Effect.prototype.connectEffect=function(t){return this.effectSend.chain(t,this.effectReturn),this},t.Effect.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this._dryWet.dispose(),this._dryWet=null,this.effectSend.dispose(),this.effectSend=null,this.effectReturn.dispose(),this.effectReturn=null,this._writable(["wet"]),this.wet=null,this},t.Effect}),e(function(t){return t.AutoFilter=function(){var e=t.defaults(arguments,["frequency","baseFrequency","octaves"],t.AutoFilter);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth}),this.depth=this._lfo.amplitude,this.frequency=this._lfo.frequency,this.filter=new t.Filter(e.filter),this._octaves=0,this.connectEffect(this.filter),this._lfo.connect(this.filter.frequency),this.type=e.type,this._readOnly(["frequency","depth"]),this.octaves=e.octaves,this.baseFrequency=e.baseFrequency},t.extend(t.AutoFilter,t.Effect),t.AutoFilter.defaults={frequency:1,type:"sine",depth:1,baseFrequency:200,octaves:2.6,filter:{type:"lowpass",rolloff:-12,Q:1}},t.AutoFilter.prototype.start=function(t){return this._lfo.start(t),this},t.AutoFilter.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoFilter.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoFilter.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoFilter.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),Object.defineProperty(t.AutoFilter.prototype,"baseFrequency",{get:function(){return this._lfo.min},set:function(t){this._lfo.min=this.toFrequency(t),this.octaves=this._octaves}}),Object.defineProperty(t.AutoFilter.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._lfo.max=this.baseFrequency*Math.pow(2,t)}}),t.AutoFilter.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this.filter.dispose(),this.filter=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null,this},t.AutoFilter}),e(function(t){return t.AutoPanner=function(){var e=t.defaults(arguments,["frequency"],t.AutoPanner);t.Effect.call(this,e),this._lfo=new t.LFO({frequency:e.frequency,amplitude:e.depth,min:-1,max:1}),this.depth=this._lfo.amplitude,this._panner=new t.Panner,this.frequency=this._lfo.frequency,this.connectEffect(this._panner),this._lfo.connect(this._panner.pan),this.type=e.type,this._readOnly(["depth","frequency"])},t.extend(t.AutoPanner,t.Effect),t.AutoPanner.defaults={frequency:1,type:"sine",depth:1},t.AutoPanner.prototype.start=function(t){return this._lfo.start(t),this},t.AutoPanner.prototype.stop=function(t){return this._lfo.stop(t),this},t.AutoPanner.prototype.sync=function(t){return this._lfo.sync(t),this},t.AutoPanner.prototype.unsync=function(){return this._lfo.unsync(),this},Object.defineProperty(t.AutoPanner.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.AutoPanner.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._lfo.dispose(),this._lfo=null,this._panner.dispose(),this._panner=null,this._writable(["depth","frequency"]),this.frequency=null,this.depth=null,this},t.AutoPanner}),e(function(t){return t.AutoWah=function(){var e=t.defaults(arguments,["baseFrequency","octaves","sensitivity"],t.AutoWah);t.Effect.call(this,e),this.follower=new t.Follower(e.follower),this._sweepRange=new t.ScaleExp(0,1,.5),this._baseFrequency=e.baseFrequency,this._octaves=e.octaves,this._inputBoost=new t.Gain,this._bandpass=new t.Filter({rolloff:-48,frequency:0,Q:e.Q}),this._peaking=new t.Filter(0,"peaking"),this._peaking.gain.value=e.gain,this.gain=this._peaking.gain,this.Q=this._bandpass.Q,this.effectSend.chain(this._inputBoost,this.follower,this._sweepRange),this._sweepRange.connect(this._bandpass.frequency),this._sweepRange.connect(this._peaking.frequency),this.effectSend.chain(this._bandpass,this._peaking,this.effectReturn),this._setSweepRange(),this.sensitivity=e.sensitivity,this._readOnly(["gain","Q"])},t.extend(t.AutoWah,t.Effect),t.AutoWah.defaults={baseFrequency:100,octaves:6,sensitivity:0,Q:2,gain:2,follower:{attack:.3,release:.5}},Object.defineProperty(t.AutoWah.prototype,"octaves",{get:function(){return this._octaves},set:function(t){this._octaves=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"baseFrequency",{get:function(){return this._baseFrequency},set:function(t){this._baseFrequency=t,this._setSweepRange()}}),Object.defineProperty(t.AutoWah.prototype,"sensitivity",{get:function(){return t.gainToDb(1/this._inputBoost.gain.value)},set:function(e){this._inputBoost.gain.value=1/t.dbToGain(e)}}),t.AutoWah.prototype._setSweepRange=function(){this._sweepRange.min=this._baseFrequency,this._sweepRange.max=Math.min(this._baseFrequency*Math.pow(2,this._octaves),this.context.sampleRate/2)},t.AutoWah.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this.follower.dispose(),this.follower=null,this._sweepRange.dispose(),this._sweepRange=null,this._bandpass.dispose(),this._bandpass=null,this._peaking.dispose(),this._peaking=null,this._inputBoost.dispose(),this._inputBoost=null,this._writable(["gain","Q"]),this.gain=null,this.Q=null,this},t.AutoWah}),e(function(t){return t.Modulo=function(e){t.SignalBase.call(this),this.createInsOuts(1,0),this._shaper=new t.WaveShaper(Math.pow(2,16)),this._multiply=new t.Multiply,this._subtract=this.output=new t.Subtract,this._modSignal=new t.Signal(e),this.input.fan(this._shaper,this._subtract),this._modSignal.connect(this._multiply,0,0),this._shaper.connect(this._multiply,0,1),this._multiply.connect(this._subtract,0,1),this._setWaveShaper(e)},t.extend(t.Modulo,t.SignalBase),t.Modulo.prototype._setWaveShaper=function(t){this._shaper.setMap(function(e){return Math.floor((e+1e-4)/t)})},Object.defineProperty(t.Modulo.prototype,"value",{get:function(){return this._modSignal.value},set:function(t){this._modSignal.value=t,this._setWaveShaper(t)}}),t.Modulo.prototype.dispose=function(){return t.SignalBase.prototype.dispose.call(this),this._shaper.dispose(),this._shaper=null,this._multiply.dispose(),this._multiply=null,this._subtract.dispose(),this._subtract=null,this._modSignal.dispose(),this._modSignal=null,this},t.Modulo}),e(function(t){return t.BitCrusher=function(){var e=t.defaults(arguments,["bits"],t.BitCrusher);t.Effect.call(this,e);var i=1/Math.pow(2,e.bits-1);this._subtract=new t.Subtract,this._modulo=new t.Modulo(i),this._bits=e.bits,this.effectSend.fan(this._subtract,this._modulo),this._modulo.connect(this._subtract,0,1),this._subtract.connect(this.effectReturn)},t.extend(t.BitCrusher,t.Effect),t.BitCrusher.defaults={bits:4},Object.defineProperty(t.BitCrusher.prototype,"bits",{get:function(){return this._bits},set:function(t){this._bits=t;var e=1/Math.pow(2,t-1);this._modulo.value=e}}),t.BitCrusher.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._subtract.dispose(),this._subtract=null,this._modulo.dispose(),this._modulo=null,this},t.BitCrusher}),e(function(t){return t.Chebyshev=function(){var e=t.defaults(arguments,["order"],t.Chebyshev);t.Effect.call(this,e),this._shaper=new t.WaveShaper(4096),this._order=e.order,this.connectEffect(this._shaper),this.order=e.order,this.oversample=e.oversample},t.extend(t.Chebyshev,t.Effect),t.Chebyshev.defaults={order:1,oversample:"none"},t.Chebyshev.prototype._getCoefficient=function(t,e,i){return i.hasOwnProperty(e)?i[e]:(i[e]=0===e?0:1===e?t:2*t*this._getCoefficient(t,e-1,i)-this._getCoefficient(t,e-2,i),i[e])},Object.defineProperty(t.Chebyshev.prototype,"order",{get:function(){return this._order},set:function(t){this._order=t;for(var e=new Array(4096),i=e.length,r=0;r=this._startTime&&!this._sourceStopped?t.State.Started:t.State.Stopped},t.BufferSource.prototype.start=function(e,i,r,n,o){if(-1!==this._startTime)throw new Error("Tone.BufferSource can only be started once.");if(!this.buffer.loaded)throw new Error("Tone.BufferSource: buffer is either not set or not loaded.");e=this.toSeconds(e),i=this.loop?t.defaultArg(i,this.loopStart):t.defaultArg(i,0),i=this.toSeconds(i),n=t.defaultArg(n,1),this._gain=n,o=this.toSeconds(t.defaultArg(o,this.fadeIn)),this.fadeIn=o,o>0?(this._gainNode.gain.setValueAtTime(0,e),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(this._gain,e+o):this._gainNode.gain.exponentialApproachValueAtTime(this._gain,e,o)):this._gainNode.gain.setValueAtTime(n,e),this._startTime=e;var s=this.toSeconds(t.defaultArg(r,this.buffer.duration-i%this.buffer.duration));if(s=Math.max(s,0),t.isDefined(r)&&(this.loop||(s=Math.min(s,this.buffer.duration-i%this.buffer.duration)),this.stop(e+s,this.fadeOut)),this.loop){var a=this.loopEnd||this.buffer.duration,h=this.loopStart;i>=a&&(i=(i-h)%(a-h)+h)}return this._source.buffer=this.buffer.get(),this._source.loopEnd=this.loopEnd||this.buffer.duration,ithis.sampleTime?(this._gainNode.gain.setValueAtTime(this._gain,n),"linear"===this.curve?this._gainNode.gain.linearRampToValueAtTime(0,e):this._gainNode.gain.exponentialApproachValueAtTime(0,n,i)):this._gainNode.gain.setValueAtTime(0,e),t.context.clearTimeout(this._onendedTimeout),this._onendedTimeout=t.context.setTimeout(this._onended.bind(this),this._stopTime-this.now()),this}},t.BufferSource.prototype.cancelStop=function(){if(-1!==this._startTime&&!this._sourceStopped){var t=this.toSeconds(this.fadeIn);this._gainNode.gain.cancelScheduledValues(this._startTime+t+this.sampleTime),this._gainNode.gain.setValueAtTime(1,Math.max(this.now(),this._startTime+t+this.sampleTime)),this.context.clearTimeout(this._onendedTimeout),this._stopTime=-1}return this},t.BufferSource.prototype._onended=function(){if(!this._sourceStopped){this._sourceStopped=!0;var t="exponential"===this.curve?2*this.fadeOut:0;this._sourceStarted&&-1!==this._stopTime&&this._source.stop(this._stopTime+t),this.onended(this)}},Object.defineProperty(t.BufferSource.prototype,"loopStart",{get:function(){return this._source.loopStart},set:function(t){this._source.loopStart=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"loopEnd",{get:function(){return this._source.loopEnd},set:function(t){this._source.loopEnd=this.toSeconds(t)}}),Object.defineProperty(t.BufferSource.prototype,"buffer",{get:function(){return this._buffer},set:function(t){this._buffer.set(t)}}),Object.defineProperty(t.BufferSource.prototype,"loop",{get:function(){return this._source.loop},set:function(t){this._source.loop=t,this.cancelStop()}}),t.BufferSource.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.onended=null,this._source.onended=null,this._source.disconnect(),this._source=null,this._gainNode.dispose(),this._gainNode=null,this._buffer.dispose(),this._buffer=null,this._startTime=-1,this.playbackRate=null,t.context.clearTimeout(this._onendedTimeout),this},t.BufferSource}),e(function(t){t.Noise=function(){var e=t.defaults(arguments,["type"],t.Noise);t.Source.call(this,e),this._source=null,this._type=e.type,this._playbackRate=e.playbackRate},t.extend(t.Noise,t.Source),t.Noise.defaults={type:"white",playbackRate:1},Object.defineProperty(t.Noise.prototype,"type",{get:function(){return this._type},set:function(e){if(this._type!==e){if(!(e in i))throw new TypeError("Tone.Noise: invalid type: "+e);if(this._type=e,this.state===t.State.Started){var r=this.now();this._stop(r),this._start(r)}}}}),Object.defineProperty(t.Noise.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._source&&(this._source.playbackRate.value=t)}}),t.Noise.prototype._start=function(e){var r=i[this._type];this._source=new t.BufferSource(r).connect(this.output),this._source.loop=!0,this._source.playbackRate.value=this._playbackRate,this._source.start(this.toSeconds(e),Math.random()*(r.duration-.001))},t.Noise.prototype._stop=function(t){this._source&&(this._source.stop(this.toSeconds(t)),this._source=null)},t.Noise.prototype.restart=function(t){this._stop(t),this._start(t)},t.Noise.prototype.dispose=function(){return t.Source.prototype.dispose.call(this),null!==this._source&&(this._source.disconnect(),this._source=null),this._buffer=null,this};var e={pink:function(){for(var t=[],e=0;e<2;e++){var i,r,n,o,s,a,h,l=new Float32Array(220500);t[e]=l,i=r=n=o=s=a=h=0;for(var u=0;u<220500;u++){var c=2*Math.random()-1;i=.99886*i+.0555179*c,r=.99332*r+.0750759*c,n=.969*n+.153852*c,o=.8665*o+.3104856*c,s=.55*s+.5329522*c,a=-.7616*a-.016898*c,l[u]=i+r+n+o+s+a+h+.5362*c,l[u]*=.11,h=.115926*c}}return t}(),brown:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0,n=0;n<220500;n++){var o=2*Math.random()-1;i[n]=(r+.02*o)/1.02,r=i[n],i[n]*=3.5}}return t}(),white:function(){for(var t=[],e=0;e<2;e++){var i=new Float32Array(220500);t[e]=i;for(var r=0;r<220500;r++)i[r]=2*Math.random()-1}return t}()},i={};function r(){for(var r in e)i[r]=(new t.Buffer).fromArray(e[r])}return t.getContext(r),t.Context.on("init",r),t.Noise}),e(function(t){return t.Reverb=function(){var e=t.defaults(arguments,["decay"],t.Reverb);t.Effect.call(this,e),this._convolver=this.context.createConvolver(),this.decay=e.decay,this.preDelay=e.preDelay,this.connectEffect(this._convolver)},t.extend(t.Reverb,t.Effect),t.Reverb.defaults={decay:1.5,preDelay:.01},t.Reverb.prototype.generate=function(){return t.Offline(function(){var e=new t.Noise,i=new t.Noise,r=new t.Merge;e.connect(r.left),i.connect(r.right);var n=(new t.Gain).toMaster();r.connect(n),e.start(0),i.start(0),n.gain.setValueAtTime(0,0),n.gain.linearRampToValueAtTime(1,this.preDelay),n.gain.exponentialApproachValueAtTime(0,this.preDelay,this.decay-this.preDelay)}.bind(this),this.decay).then(function(t){return this._convolver.buffer=t.get(),this}.bind(this))},t.Reverb.prototype.dispose=function(){return t.Effect.prototype.dispose.call(this),this._convolver.disconnect(),this._convolver=null,this},t.Reverb}),e(function(t){return t.StereoFeedbackEffect=function(){var e=t.defaults(arguments,["feedback"],t.FeedbackEffect);t.StereoEffect.call(this,e),this.feedback=new t.Signal(e.feedback,t.Type.NormalRange),this._feedbackL=new t.Gain,this._feedbackR=new t.Gain,this.effectReturnL.chain(this._feedbackL,this.effectSendL),this.effectReturnR.chain(this._feedbackR,this.effectSendR),this.feedback.fan(this._feedbackL.gain,this._feedbackR.gain),this._readOnly(["feedback"])},t.extend(t.StereoFeedbackEffect,t.StereoEffect),t.StereoFeedbackEffect.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["feedback"]),this.feedback.dispose(),this.feedback=null,this._feedbackL.dispose(),this._feedbackL=null,this._feedbackR.dispose(),this._feedbackR=null,this},t.StereoFeedbackEffect}),e(function(t){return t.StereoWidener=function(){var e=t.defaults(arguments,["width"],t.StereoWidener);t.MidSideEffect.call(this,e),this.width=new t.Signal(e.width,t.Type.NormalRange),this._readOnly(["width"]),this._twoTimesWidthMid=new t.Multiply(2),this._twoTimesWidthSide=new t.Multiply(2),this._midMult=new t.Multiply,this._twoTimesWidthMid.connect(this._midMult,0,1),this.midSend.chain(this._midMult,this.midReturn),this._oneMinusWidth=new t.Subtract,this._oneMinusWidth.connect(this._twoTimesWidthMid),this.context.getConstant(1).connect(this._oneMinusWidth,0,0),this.width.connect(this._oneMinusWidth,0,1),this._sideMult=new t.Multiply,this.width.connect(this._twoTimesWidthSide),this._twoTimesWidthSide.connect(this._sideMult,0,1),this.sideSend.chain(this._sideMult,this.sideReturn)},t.extend(t.StereoWidener,t.MidSideEffect),t.StereoWidener.defaults={width:.5},t.StereoWidener.prototype.dispose=function(){return t.MidSideEffect.prototype.dispose.call(this),this._writable(["width"]),this.width.dispose(),this.width=null,this._midMult.dispose(),this._midMult=null,this._sideMult.dispose(),this._sideMult=null,this._twoTimesWidthMid.dispose(),this._twoTimesWidthMid=null,this._twoTimesWidthSide.dispose(),this._twoTimesWidthSide=null,this._oneMinusWidth.dispose(),this._oneMinusWidth=null,this},t.StereoWidener}),e(function(t){return t.Tremolo=function(){var e=t.defaults(arguments,["frequency","depth"],t.Tremolo);t.StereoEffect.call(this,e),this._lfoL=new t.LFO({phase:e.spread,min:1,max:0}),this._lfoR=new t.LFO({phase:e.spread,min:1,max:0}),this._amplitudeL=new t.Gain,this._amplitudeR=new t.Gain,this.frequency=new t.Signal(e.frequency,t.Type.Frequency),this.depth=new t.Signal(e.depth,t.Type.NormalRange),this._readOnly(["frequency","depth"]),this.effectSendL.chain(this._amplitudeL,this.effectReturnL),this.effectSendR.chain(this._amplitudeR,this.effectReturnR),this._lfoL.connect(this._amplitudeL.gain),this._lfoR.connect(this._amplitudeR.gain),this.frequency.fan(this._lfoL.frequency,this._lfoR.frequency),this.depth.fan(this._lfoR.amplitude,this._lfoL.amplitude),this.type=e.type,this.spread=e.spread},t.extend(t.Tremolo,t.StereoEffect),t.Tremolo.defaults={frequency:10,type:"sine",depth:.5,spread:180},t.Tremolo.prototype.start=function(t){return this._lfoL.start(t),this._lfoR.start(t),this},t.Tremolo.prototype.stop=function(t){return this._lfoL.stop(t),this._lfoR.stop(t),this},t.Tremolo.prototype.sync=function(e){return this._lfoL.sync(e),this._lfoR.sync(e),t.Transport.syncSignal(this.frequency),this},t.Tremolo.prototype.unsync=function(){return this._lfoL.unsync(),this._lfoR.unsync(),t.Transport.unsyncSignal(this.frequency),this},Object.defineProperty(t.Tremolo.prototype,"type",{get:function(){return this._lfoL.type},set:function(t){this._lfoL.type=t,this._lfoR.type=t}}),Object.defineProperty(t.Tremolo.prototype,"spread",{get:function(){return this._lfoR.phase-this._lfoL.phase},set:function(t){this._lfoL.phase=90-t/2,this._lfoR.phase=t/2+90}}),t.Tremolo.prototype.dispose=function(){return t.StereoEffect.prototype.dispose.call(this),this._writable(["frequency","depth"]),this._lfoL.dispose(),this._lfoL=null,this._lfoR.dispose(),this._lfoR=null,this._amplitudeL.dispose(),this._amplitudeL=null,this._amplitudeR.dispose(),this._amplitudeR=null,this.frequency=null,this.depth=null,this},t.Tremolo}),e(function(t){return t.Vibrato=function(){var e=t.defaults(arguments,["frequency","depth"],t.Vibrato);t.Effect.call(this,e),this._delayNode=new t.Delay(0,e.maxDelay),this._lfo=new t.LFO({type:e.type,min:0,max:e.maxDelay,frequency:e.frequency,phase:-90}).start().connect(this._delayNode.delayTime),this.frequency=this._lfo.frequency,this.depth=this._lfo.amplitude,this.depth.value=e.depth,this._readOnly(["frequency","depth"]),this.effectSend.chain(this._delayNode,this.effectReturn)},t.extend(t.Vibrato,t.Effect),t.Vibrato.defaults={maxDelay:.005,frequency:5,depth:.1,type:"sine"},Object.defineProperty(t.Vibrato.prototype,"type",{get:function(){return this._lfo.type},set:function(t){this._lfo.type=t}}),t.Vibrato.prototype.dispose=function(){t.Effect.prototype.dispose.call(this),this._delayNode.dispose(),this._delayNode=null,this._lfo.dispose(),this._lfo=null,this._writable(["frequency","depth"]),this.frequency=null,this.depth=null},t.Vibrato}),e(function(t){return t.Event=function(){var e=t.defaults(arguments,["callback","value"],t.Event);t.call(this),this._loop=e.loop,this.callback=e.callback,this.value=e.value,this._loopStart=this.toTicks(e.loopStart),this._loopEnd=this.toTicks(e.loopEnd),this._state=new t.TimelineState(t.State.Stopped),this._playbackRate=1,this._startOffset=0,this._probability=e.probability,this._humanize=e.humanize,this.mute=e.mute,this.playbackRate=e.playbackRate},t.extend(t.Event),t.Event.defaults={callback:t.noOp,loop:!1,loopEnd:"1m",loopStart:0,playbackRate:1,value:null,probability:1,mute:!1,humanize:!1},t.Event.prototype._rescheduleEvents=function(e){return e=t.defaultArg(e,-1),this._state.forEachFrom(e,function(e){var i;if(e.state===t.State.Started){t.isDefined(e.id)&&t.Transport.clear(e.id);var r=e.time+Math.round(this.startOffset/this._playbackRate);if(this._loop){i=1/0,t.isNumber(this._loop)&&(i=this._loop*this._getLoopDuration());var n=this._state.getAfter(r);null!==n&&(i=Math.min(i,n.time-r)),i!==1/0&&(this._state.setStateAtTime(t.State.Stopped,r+i+1),i=t.Ticks(i));var o=t.Ticks(this._getLoopDuration());e.id=t.Transport.scheduleRepeat(this._tick.bind(this),o,t.Ticks(r),i)}else e.id=t.Transport.schedule(this._tick.bind(this),t.Ticks(r))}}.bind(this)),this},Object.defineProperty(t.Event.prototype,"state",{get:function(){return this._state.getValueAtTime(t.Transport.ticks)}}),Object.defineProperty(t.Event.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t}}),Object.defineProperty(t.Event.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t}}),Object.defineProperty(t.Event.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t}}),t.Event.prototype.start=function(e){return e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Stopped&&(this._state.add({state:t.State.Started,time:e,id:void 0}),this._rescheduleEvents(e)),this},t.Event.prototype.stop=function(e){if(this.cancel(e),e=this.toTicks(e),this._state.getValueAtTime(e)===t.State.Started){this._state.setStateAtTime(t.State.Stopped,e);var i=this._state.getBefore(e),r=e;null!==i&&(r=i.time),this._rescheduleEvents(r)}return this},t.Event.prototype.cancel=function(e){return e=t.defaultArg(e,-1/0),e=this.toTicks(e),this._state.forEachFrom(e,function(e){t.Transport.clear(e.id)}),this._state.cancel(e),this},t.Event.prototype._tick=function(e){var i=t.Transport.getTicksAtTime(e);if(!this.mute&&this._state.getValueAtTime(i)===t.State.Started){if(this.probability<1&&Math.random()>this.probability)return;if(this.humanize){var r=.02;t.isBoolean(this.humanize)||(r=this.toSeconds(this.humanize)),e+=(2*Math.random()-1)*r}this.callback(e,this.value)}},t.Event.prototype._getLoopDuration=function(){return Math.round((this._loopEnd-this._loopStart)/this._playbackRate)},Object.defineProperty(t.Event.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._rescheduleEvents()}}),Object.defineProperty(t.Event.prototype,"progress",{get:function(){if(this._loop){var e=t.Transport.ticks,i=this._state.get(e);if(null!==i&&i.state===t.State.Started){var r=this._getLoopDuration();return(e-i.time)%r/r}return 0}return 0}}),t.Event.prototype.dispose=function(){this.cancel(),this._state.dispose(),this._state=null,this.callback=null,this.value=null},t.Event}),e(function(t){return t.Loop=function(){var e=t.defaults(arguments,["callback","interval"],t.Loop);t.call(this),this._event=new t.Event({callback:this._tick.bind(this),loop:!0,loopEnd:e.interval,playbackRate:e.playbackRate,probability:e.probability}),this.callback=e.callback,this.iterations=e.iterations},t.extend(t.Loop),t.Loop.defaults={interval:"4n",callback:t.noOp,playbackRate:1,iterations:1/0,probability:!0,mute:!1},t.Loop.prototype.start=function(t){return this._event.start(t),this},t.Loop.prototype.stop=function(t){return this._event.stop(t),this},t.Loop.prototype.cancel=function(t){return this._event.cancel(t),this},t.Loop.prototype._tick=function(t){this.callback(t)},Object.defineProperty(t.Loop.prototype,"state",{get:function(){return this._event.state}}),Object.defineProperty(t.Loop.prototype,"progress",{get:function(){return this._event.progress}}),Object.defineProperty(t.Loop.prototype,"interval",{get:function(){return this._event.loopEnd},set:function(t){this._event.loopEnd=t}}),Object.defineProperty(t.Loop.prototype,"playbackRate",{get:function(){return this._event.playbackRate},set:function(t){this._event.playbackRate=t}}),Object.defineProperty(t.Loop.prototype,"humanize",{get:function(){return this._event.humanize},set:function(t){this._event.humanize=t}}),Object.defineProperty(t.Loop.prototype,"probability",{get:function(){return this._event.probability},set:function(t){this._event.probability=t}}),Object.defineProperty(t.Loop.prototype,"mute",{get:function(){return this._event.mute},set:function(t){this._event.mute=t}}),Object.defineProperty(t.Loop.prototype,"iterations",{get:function(){return!0===this._event.loop?1/0:this._event.loop},set:function(t){this._event.loop=t===1/0||t}}),t.Loop.prototype.dispose=function(){this._event.dispose(),this._event=null,this.callback=null},t.Loop}),e(function(t){return t.Part=function(){var e=t.defaults(arguments,["callback","events"],t.Part);t.Event.call(this,e),this._events=[];for(var i=0;i=this._loopStart&&e.startOffset=r&&(e.loop=!1,e.start(t.Ticks(i))):e.startOffset>=r&&e.start(t.Ticks(i))},Object.defineProperty(t.Part.prototype,"startOffset",{get:function(){return this._startOffset},set:function(t){this._startOffset=t,this._forEach(function(t){t.startOffset+=this._startOffset})}}),t.Part.prototype.stop=function(e){var i=this.toTicks(e);return this._state.cancel(i),this._state.setStateAtTime(t.State.Stopped,i),this._forEach(function(t){t.stop(e)}),this},t.Part.prototype.at=function(e,i){e=t.TransportTime(e);for(var r=t.Ticks(1).toSeconds(),n=0;n=0;r--){var n=this._events[r];n instanceof t.Part?n.remove(e,i):n.startOffset===e&&(t.isUndef(i)||t.isDefined(i)&&n.value===i)&&(this._events.splice(r,1),n.dispose())}return this},t.Part.prototype.removeAll=function(){return this._forEach(function(t){t.dispose()}),this._events=[],this},t.Part.prototype.cancel=function(t){return this._forEach(function(e){e.cancel(t)}),this._state.cancel(this.toTicks(t)),this},t.Part.prototype._forEach=function(e,i){if(this._events){i=t.defaultArg(i,this);for(var r=this._events.length-1;r>=0;r--){var n=this._events[r];n instanceof t.Part?n._forEach(e,i):e.call(i,n)}}return this},t.Part.prototype._setAll=function(t,e){this._forEach(function(i){i[t]=e})},t.Part.prototype._tick=function(t,e){this.mute||this.callback(t,e)},t.Part.prototype._testLoopBoundries=function(e){e.startOffset=this._loopEnd?e.cancel(0):e.state===t.State.Stopped&&this._restartEvent(e)},Object.defineProperty(t.Part.prototype,"probability",{get:function(){return this._probability},set:function(t){this._probability=t,this._setAll("probability",t)}}),Object.defineProperty(t.Part.prototype,"humanize",{get:function(){return this._humanize},set:function(t){this._humanize=t,this._setAll("humanize",t)}}),Object.defineProperty(t.Part.prototype,"loop",{get:function(){return this._loop},set:function(t){this._loop=t,this._forEach(function(e){e._loopStart=this._loopStart,e._loopEnd=this._loopEnd,e.loop=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopEnd",{get:function(){return t.Ticks(this._loopEnd).toSeconds()},set:function(t){this._loopEnd=this.toTicks(t),this._loop&&this._forEach(function(e){e.loopEnd=t,this._testLoopBoundries(e)})}}),Object.defineProperty(t.Part.prototype,"loopStart",{get:function(){return t.Ticks(this._loopStart).toSeconds()},set:function(t){this._loopStart=this.toTicks(t),this._loop&&this._forEach(function(t){t.loopStart=this.loopStart,this._testLoopBoundries(t)})}}),Object.defineProperty(t.Part.prototype,"playbackRate",{get:function(){return this._playbackRate},set:function(t){this._playbackRate=t,this._setAll("playbackRate",t)}}),Object.defineProperty(t.Part.prototype,"length",{get:function(){return this._events.length}}),t.Part.prototype.dispose=function(){return this.removeAll(),this._state.dispose(),this._state=null,this.callback=null,this._events=null,this},t.Part}),e(function(t){return t.Pattern=function(){var e=t.defaults(arguments,["callback","values","pattern"],t.Pattern);t.Loop.call(this,e),this._pattern=new t.CtrlPattern({values:e.values,type:e.pattern,index:e.index})},t.extend(t.Pattern,t.Loop),t.Pattern.defaults={pattern:t.CtrlPattern.Type.Up,callback:t.noOp,values:[]},t.Pattern.prototype._tick=function(t){this.callback(t,this._pattern.value),this._pattern.next()},Object.defineProperty(t.Pattern.prototype,"index",{get:function(){return this._pattern.index},set:function(t){this._pattern.index=t}}),Object.defineProperty(t.Pattern.prototype,"values",{get:function(){return this._pattern.values},set:function(t){this._pattern.values=t}}),Object.defineProperty(t.Pattern.prototype,"value",{get:function(){return this._pattern.value}}),Object.defineProperty(t.Pattern.prototype,"pattern",{get:function(){return this._pattern.type},set:function(t){this._pattern.type=t}}),t.Pattern.prototype.dispose=function(){t.Loop.prototype.dispose.call(this),this._pattern.dispose(),this._pattern=null},t.Pattern}),e(function(t){return t.Sequence=function(){var e=t.defaults(arguments,["callback","events","subdivision"],t.Sequence),i=e.events;if(delete e.events,t.Part.call(this,e),this._subdivision=this.toTicks(e.subdivision),t.isUndef(e.loopEnd)&&t.isDefined(i)&&(this._loopEnd=i.length*this._subdivision),this._loop=!0,t.isDefined(i))for(var r=0;r1){var e=-t/2,i=t/(this._oscillators.length-1);this._forEach(function(t,r){t.detune.value=e+i*r})}}}),Object.defineProperty(t.FatOscillator.prototype,"count",{get:function(){return this._oscillators.length},set:function(e){if(e=Math.max(e,1),this._oscillators.length!==e){this._forEach(function(t){t.dispose()}),this._oscillators=[];for(var i=0;i0&&this.getLevelAtTime(e)>.05){var i=this.toSeconds(this.portamento);this.frequency.exponentialRampTo(t,i,e)}else this.frequency.setValueAtTime(t,e);return this},t.Monophonic}),e(function(t){return t.Synth=function(e){e=t.defaultArg(e,t.Synth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","frequency","detune","envelope"])},t.extend(t.Synth,t.Monophonic),t.Synth.defaults={oscillator:{type:"triangle"},envelope:{attack:.005,decay:.1,sustain:.3,release:1}},t.Synth.prototype._triggerEnvelopeAttack=function(t,e){return this.envelope.triggerAttack(t,e),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.Synth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.Synth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.frequency=null,this.detune=null,this},t.Synth}),e(function(t){return t.AMSynth=function(e){e=t.defaultArg(e,t.AMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth,this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth,this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this._modulationScale=new t.AudioToGain,this._modulationNode=new t.Gain,this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.chain(this._modulationScale,this._modulationNode.gain),this._carrier.chain(this._modulationNode,this.output),this._readOnly(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.AMSynth,t.Monophonic),t.AMSynth.defaults={harmonicity:3,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.AMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.AMSynth.prototype._triggerEnvelopeRelease=function(t){return this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.AMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationScale.dispose(),this._modulationScale=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.AMSynth}),e(function(t){return t.MonoSynth=function(e){e=t.defaultArg(e,t.MonoSynth.defaults),t.Monophonic.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.frequency=this.oscillator.frequency,this.detune=this.oscillator.detune,this.filter=new t.Filter(e.filter),this.filterEnvelope=new t.FrequencyEnvelope(e.filterEnvelope),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.oscillator.chain(this.filter,this.envelope,this.output),this.filterEnvelope.connect(this.filter.frequency),this._readOnly(["oscillator","frequency","detune","filter","filterEnvelope","envelope"])},t.extend(t.MonoSynth,t.Monophonic),t.MonoSynth.defaults={frequency:"C4",detune:0,oscillator:{type:"square"},filter:{Q:6,type:"lowpass",rolloff:-24},envelope:{attack:.005,decay:.1,sustain:.9,release:1},filterEnvelope:{attack:.06,decay:.2,sustain:.5,release:2,baseFrequency:200,octaves:7,exponent:2}},t.MonoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.envelope.triggerAttack(t,e),this.filterEnvelope.triggerAttack(t),this.oscillator.start(t),0===this.envelope.sustain&&this.oscillator.stop(t+this.envelope.attack+this.envelope.decay),this},t.MonoSynth.prototype._triggerEnvelopeRelease=function(t){return this.envelope.triggerRelease(t),this.filterEnvelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MonoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["oscillator","frequency","detune","filter","filterEnvelope","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this.filterEnvelope.dispose(),this.filterEnvelope=null,this.filter.dispose(),this.filter=null,this.frequency=null,this.detune=null,this},t.MonoSynth}),e(function(t){return t.DuoSynth=function(e){e=t.defaultArg(e,t.DuoSynth.defaults),t.Monophonic.call(this,e),this.voice0=new t.MonoSynth(e.voice0),this.voice0.volume.value=-10,this.voice1=new t.MonoSynth(e.voice1),this.voice1.volume.value=-10,this._vibrato=new t.LFO(e.vibratoRate,-50,50),this._vibrato.start(),this.vibratoRate=this._vibrato.frequency,this._vibratoGain=new t.Gain(e.vibratoAmount,t.Type.Positive),this.vibratoAmount=this._vibratoGain.gain,this.frequency=new t.Signal(440,t.Type.Frequency),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.frequency.connect(this.voice0.frequency),this.frequency.chain(this.harmonicity,this.voice1.frequency),this._vibrato.connect(this._vibratoGain),this._vibratoGain.fan(this.voice0.detune,this.voice1.detune),this.voice0.connect(this.output),this.voice1.connect(this.output),this._readOnly(["voice0","voice1","frequency","vibratoAmount","vibratoRate"])},t.extend(t.DuoSynth,t.Monophonic),t.DuoSynth.defaults={vibratoAmount:.5,vibratoRate:5,harmonicity:1.5,voice0:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}},voice1:{volume:-10,portamento:0,oscillator:{type:"sine"},filterEnvelope:{attack:.01,decay:0,sustain:1,release:.5},envelope:{attack:.01,decay:0,sustain:1,release:.5}}},t.DuoSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this.voice0._triggerEnvelopeAttack(t,e),this.voice1._triggerEnvelopeAttack(t,e),this},t.DuoSynth.prototype._triggerEnvelopeRelease=function(t){return this.voice0._triggerEnvelopeRelease(t),this.voice1._triggerEnvelopeRelease(t),this},t.DuoSynth.prototype.getLevelAtTime=function(t){return(this.voice0.getLevelAtTime(t)+this.voice1.getLevelAtTime(t))/2},t.DuoSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["voice0","voice1","frequency","vibratoAmount","vibratoRate"]),this.voice0.dispose(),this.voice0=null,this.voice1.dispose(),this.voice1=null,this.frequency.dispose(),this.frequency=null,this._vibratoGain.dispose(),this._vibratoGain=null,this._vibrato=null,this.harmonicity.dispose(),this.harmonicity=null,this.vibratoAmount.dispose(),this.vibratoAmount=null,this.vibratoRate=null,this},t.DuoSynth}),e(function(t){return t.FMSynth=function(e){e=t.defaultArg(e,t.FMSynth.defaults),t.Monophonic.call(this,e),this._carrier=new t.Synth(e.carrier),this._carrier.volume.value=-10,this.oscillator=this._carrier.oscillator,this.envelope=this._carrier.envelope.set(e.envelope),this._modulator=new t.Synth(e.modulator),this._modulator.volume.value=-10,this.modulation=this._modulator.oscillator.set(e.modulation),this.modulationEnvelope=this._modulator.envelope.set(e.modulationEnvelope),this.frequency=new t.Signal(440,t.Type.Frequency),this.detune=new t.Signal(e.detune,t.Type.Cents),this.harmonicity=new t.Multiply(e.harmonicity),this.harmonicity.units=t.Type.Positive,this.modulationIndex=new t.Multiply(e.modulationIndex),this.modulationIndex.units=t.Type.Positive,this._modulationNode=new t.Gain(0),this.frequency.connect(this._carrier.frequency),this.frequency.chain(this.harmonicity,this._modulator.frequency),this.frequency.chain(this.modulationIndex,this._modulationNode),this.detune.fan(this._carrier.detune,this._modulator.detune),this._modulator.connect(this._modulationNode.gain),this._modulationNode.connect(this._carrier.frequency),this._carrier.connect(this.output),this._readOnly(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"])},t.extend(t.FMSynth,t.Monophonic),t.FMSynth.defaults={harmonicity:3,modulationIndex:10,detune:0,oscillator:{type:"sine"},envelope:{attack:.01,decay:.01,sustain:1,release:.5},modulation:{type:"square"},modulationEnvelope:{attack:.5,decay:0,sustain:1,release:.5}},t.FMSynth.prototype._triggerEnvelopeAttack=function(t,e){return t=this.toSeconds(t),this._carrier._triggerEnvelopeAttack(t,e),this._modulator._triggerEnvelopeAttack(t),this},t.FMSynth.prototype._triggerEnvelopeRelease=function(t){return t=this.toSeconds(t),this._carrier._triggerEnvelopeRelease(t),this._modulator._triggerEnvelopeRelease(t),this},t.FMSynth.prototype.dispose=function(){return t.Monophonic.prototype.dispose.call(this),this._writable(["frequency","harmonicity","modulationIndex","oscillator","envelope","modulation","modulationEnvelope","detune"]),this._carrier.dispose(),this._carrier=null,this._modulator.dispose(),this._modulator=null,this.frequency.dispose(),this.frequency=null,this.detune.dispose(),this.detune=null,this.modulationIndex.dispose(),this.modulationIndex=null,this.harmonicity.dispose(),this.harmonicity=null,this._modulationNode.dispose(),this._modulationNode=null,this.oscillator=null,this.envelope=null,this.modulationEnvelope=null,this.modulation=null,this},t.FMSynth}),e(function(t){return t.MembraneSynth=function(e){e=t.defaultArg(e,t.MembraneSynth.defaults),t.Instrument.call(this,e),this.oscillator=new t.OmniOscillator(e.oscillator),this.envelope=new t.AmplitudeEnvelope(e.envelope),this.octaves=e.octaves,this.pitchDecay=e.pitchDecay,this.oscillator.chain(this.envelope,this.output),this._readOnly(["oscillator","envelope"])},t.extend(t.MembraneSynth,t.Instrument),t.MembraneSynth.defaults={pitchDecay:.05,octaves:10,oscillator:{type:"sine"},envelope:{attack:.001,decay:.4,sustain:.01,release:1.4,attackCurve:"exponential"}},t.MembraneSynth.prototype.triggerAttack=function(t,e,i){e=this.toSeconds(e);var r=(t=this.toFrequency(t))*this.octaves;return this.oscillator.frequency.setValueAtTime(r,e),this.oscillator.frequency.exponentialRampToValueAtTime(t,e+this.toSeconds(this.pitchDecay)),this.envelope.triggerAttack(e,i),this.oscillator.start(e),this},t.MembraneSynth.prototype.triggerRelease=function(t){return t=this.toSeconds(t),this.envelope.triggerRelease(t),this.oscillator.stop(t+this.envelope.release),this},t.MembraneSynth.prototype.dispose=function(){return t.Instrument.prototype.dispose.call(this),this._writable(["oscillator","envelope"]),this.oscillator.dispose(),this.oscillator=null,this.envelope.dispose(),this.envelope=null,this},t.MembraneSynth}),e(function(t){var e=[1,1.483,1.932,2.546,2.63,3.897];return t.MetalSynth=function(i){i=t.defaultArg(i,t.MetalSynth.defaults),t.Instrument.call(this,i),this.frequency=new t.Signal(i.frequency,t.Type.Frequency),this._oscillators=[],this._freqMultipliers=[],this._amplitue=new t.Gain(0).connect(this.output),this._highpass=new t.Filter({type:"highpass",Q:-3.0102999566398125}).connect(this._amplitue),this._octaves=i.octaves,this._filterFreqScaler=new t.Scale(i.resonance,7e3),this.envelope=new t.Envelope({attack:i.envelope.attack,attackCurve:"linear",decay:i.envelope.decay,sustain:0,release:i.envelope.release}).chain(this._filterFreqScaler,this._highpass.frequency),this.envelope.connect(this._amplitue.gain);for(var r=0;re&&(o.voice.triggerRelease(e),o.release=e)}return this},t.PolySynth.prototype.sync=function(){return this._syncMethod("triggerAttack",1),this._syncMethod("triggerRelease",1),this},t.PolySynth.prototype.set=function(t,e,i){for(var r=0;rt&&(i.release=t,i.voice.triggerRelease(t))}return this},t.PolySynth.prototype.dispose=function(){t.Instrument.prototype.dispose.call(this);for(var e=0;e0)r=i[0];else if(!r&&t.isDefined(e))throw new Error("Tone.UserMedia: no matching device: "+e);this._device=r;var n={audio:{echoCancellation:!1,sampleRate:this.context.sampleRate}};return r&&(n.audio.deviceId=r.deviceId),navigator.mediaDevices.getUserMedia(n).then(function(t){return this._stream||(this._stream=t,this._mediaStream=this.context.createMediaStreamSource(t),this._mediaStream.connect(this.output)),this}.bind(this))}.bind(this))},t.UserMedia.prototype.close=function(){return this._stream&&(this._stream.getAudioTracks().forEach(function(t){t.stop()}),this._stream=null,this._mediaStream.disconnect(),this._mediaStream=null),this._device=null,this},t.UserMedia.enumerateDevices=function(){return navigator.mediaDevices.enumerateDevices().then(function(t){return t.filter(function(t){return"audioinput"===t.kind})})},Object.defineProperty(t.UserMedia.prototype,"state",{get:function(){return this._stream&&this._stream.active?t.State.Started:t.State.Stopped}}),Object.defineProperty(t.UserMedia.prototype,"deviceId",{get:function(){if(this._device)return this._device.deviceId}}),Object.defineProperty(t.UserMedia.prototype,"groupId",{get:function(){if(this._device)return this._device.groupId}}),Object.defineProperty(t.UserMedia.prototype,"label",{get:function(){if(this._device)return this._device.label}}),Object.defineProperty(t.UserMedia.prototype,"mute",{get:function(){return this._volume.mute},set:function(t){this._volume.mute=t}}),t.UserMedia.prototype.dispose=function(){return t.AudioNode.prototype.dispose.call(this),this.close(),this._writable("volume"),this._volume.dispose(),this._volume=null,this.volume=null,this},Object.defineProperty(t.UserMedia,"supported",{get:function(){return t.isDefined(navigator.mediaDevices)&&t.isFunction(navigator.mediaDevices.getUserMedia)}}),t.UserMedia}),e(function(t){return t.Midi=function(e,i){if(!(this instanceof t.Midi))return new t.Midi(e,i);t.Frequency.call(this,e,i)},t.extend(t.Midi,t.Frequency),t.Midi.prototype._defaultUnits="midi",t.Midi.prototype._frequencyToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._frequencyToUnits.call(this,e))},t.Midi.prototype._ticksToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._ticksToUnits.call(this,e))},t.Midi.prototype._beatsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._beatsToUnits.call(this,e))},t.Midi.prototype._secondsToUnits=function(e){return t.Frequency.ftom(t.Frequency.prototype._secondsToUnits.call(this,e))},t.Midi.prototype.toMidi=function(){return this.valueOf()},t.Midi.prototype.toFrequency=function(){return t.Frequency.mtof(this.toMidi())},t.Midi.prototype.transpose=function(t){return new this.constructor(this.toMidi()+t)},t.Midi}),t}()}.call(e,i,e,t))||(t.exports=r)},function(t,e,i){(function(e){var i;t.exports=function t(e,r,n){function o(a,h){if(!r[a]){if(!e[a]){var l="function"==typeof i&&i;if(!h&&l)return i(a,!0);if(s)return s(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var c=r[a]={exports:{}};e[a][0].call(c.exports,function(t){var i=e[a][1][t];return o(i||t)},c,c.exports,t,e,r,n)}return r[a].exports}for(var s="function"==typeof i&&i,a=0;a0)throw new Error("Invalid string. Length must be a multiple of 4");var u=t.length;h="="===t.charAt(u-2)?2:"="===t.charAt(u-1)?1:0,l=new i(3*t.length/4-h),s=h>0?t.length-4:t.length;var c=0;for(n=0,o=0;n>16),r((65280&a)>>8),r(255&a);return 2===h?r(255&(a=e(t.charAt(n))<<2|e(t.charAt(n+1))>>4)):1===h&&(r((a=e(t.charAt(n))<<10|e(t.charAt(n+1))<<4|e(t.charAt(n+2))>>2)>>8&255),r(255&a)),l},t.fromByteArray=function(t){function e(t){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(t)}function i(t){return e(t>>18&63)+e(t>>12&63)+e(t>>6&63)+e(63&t)}var r,n,o,s=t.length%3,a="";for(r=0,o=t.length-s;r>2),a+=e(n<<4&63),a+="==";break;case 2:n=(t[t.length-2]<<8)+t[t.length-1],a+=e(n>>10),a+=e(n>>4&63),a+=e(n<<2&63),a+="="}return a}}(void 0===i?this.base64js={}:i)},{}],2:[function(t,e,i){},{}],3:[function(t,i,r){(function(e){"use strict";function i(){return n.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function n(t){return this instanceof n?(n.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof t?function(t,e){if(t=s(t,e<0?0:0|a(e)),!n.TYPED_ARRAY_SUPPORT)for(var i=0;i1?arguments[1]:"utf8"):function(t,e){if(n.isBuffer(e))return function(t,e){var i=0|a(e.length);return t=s(t,i),e.copy(t,0,0,i),t}(t,e);if(F(e))return function(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r1?new n(t,arguments[1]):new n(t)}function o(t,e){var i=0|a(e.length);t=s(t,i);for(var r=0;r>>1&&(t.parent=I),t}function a(t){if(t>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|t}function h(t,e){"string"!=typeof t&&(t=""+t);var i=t.length;if(0===i)return 0;for(var r=!1;;)switch(e){case"ascii":case"binary":case"raw":case"raws":return i;case"utf8":case"utf-8":return k(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return C(t).length;default:if(r)return k(t).length;e=(""+e).toLowerCase(),r=!0}}function l(t,e,i,r){i=Number(i)||0;var n=t.length-i;r?(r=Number(r))>n&&(r=n):r=n;var o=e.length;if(o%2!=0)throw new Error("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,n=i%256,o.push(n),o.push(r);return o}(e,t.length-i),t,i,r)}function m(t,e,i){return 0===e&&i===t.length?O.fromByteArray(t):O.fromByteArray(t.slice(e,i))}function y(t,e,i){i=Math.min(t.length,i);for(var r=[],n=e;n239?4:l>223?3:l>191?2:1;if(n+c<=i)switch(c){case 1:l<128&&(u=l);break;case 2:128==(192&(o=t[n+1]))&&(h=(31&l)<<6|63&o)>127&&(u=h);break;case 3:o=t[n+1],s=t[n+2],128==(192&o)&&128==(192&s)&&(h=(15&l)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(u=h);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&l)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(u=h)}null===u?(u=65533,c=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),n+=c}return function(t){var e=t.length;if(e<=D)return String.fromCharCode.apply(String,t);for(var i="",r=0;rr)&&(i=r);for(var n="",o=e;oi)throw new RangeError("Trying to access beyond buffer length")}function x(t,e,i,r,o,s){if(!n.isBuffer(t))throw new TypeError("buffer must be a Buffer instance");if(e>o||et.length)throw new RangeError("index out of range")}function w(t,e,i,r){e<0&&(e=65535+e+1);for(var n=0,o=Math.min(t.length-i,2);n>>8*(r?n:1-n)}function T(t,e,i,r){e<0&&(e=4294967295+e+1);for(var n=0,o=Math.min(t.length-i,4);n>>8*(r?n:3-n)&255}function A(t,e,i,r,n,o){if(e>n||et.length)throw new RangeError("index out of range");if(i<0)throw new RangeError("index out of range")}function M(t,e,i,r,n){return n||A(t,e,i,4,3.4028234663852886e38,-3.4028234663852886e38),L.write(t,e,i,r,23,4),i+4}function P(t,e,i,r,n){return n||A(t,e,i,8,1.7976931348623157e308,-1.7976931348623157e308),L.write(t,e,i,r,52,8),i+8}function E(t){return t<16?"0"+t.toString(16):t.toString(16)}function k(t,e){e=e||1/0;for(var i,r=t.length,n=null,o=[],s=0;s55295&&i<57344){if(!n){if(i>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}n=i;continue}if(i<56320){(e-=3)>-1&&o.push(239,191,189),n=i;continue}i=65536+(n-55296<<10|i-56320)}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,i<128){if((e-=1)<0)break;o.push(i)}else if(i<2048){if((e-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((e-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function C(t){return O.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(B,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function R(t,e,i,r){for(var n=0;n=e.length||n>=t.length);n++)e[n+i]=t[n];return n}var O=t("base64-js"),L=t("ieee754"),F=t("isarray");r.Buffer=n,r.SlowBuffer=function t(e,i){if(!(this instanceof t))return new t(e,i);var r=new n(e,i);return delete r.parent,r},r.INSPECT_MAX_BYTES=50,n.poolSize=8192;var I={};n.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){function t(){}try{var e=new Uint8Array(1);return e.foo=function(){return 42},e.constructor=t,42===e.foo()&&e.constructor===t&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}(),n.TYPED_ARRAY_SUPPORT?(n.prototype.__proto__=Uint8Array.prototype,n.__proto__=Uint8Array):(n.prototype.length=void 0,n.prototype.parent=void 0),n.isBuffer=function(t){return!(null==t||!t._isBuffer)},n.compare=function(t,e){if(!n.isBuffer(t)||!n.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var i=t.length,r=e.length,o=0,s=Math.min(i,r);othis.length&&(i=this.length),i<=e)return"";for(;;)switch(t){case"hex":return _(this,e,i);case"utf8":case"utf-8":return y(this,e,i);case"ascii":return v(this,e,i);case"binary":return g(this,e,i);case"base64":return m(this,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return b(this,e,i);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}.apply(this,arguments)},n.prototype.equals=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===n.compare(this,t)},n.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},n.prototype.compare=function(t){if(!n.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?0:n.compare(this,t)},n.prototype.indexOf=function(t,e){function i(t,e,i){for(var r=-1,n=0;i+n2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e>>=0,0===this.length)return-1;if(e>=this.length)return-1;if(e<0&&(e=Math.max(this.length+e,0)),"string"==typeof t)return 0===t.length?-1:String.prototype.indexOf.call(this,t,e);if(n.isBuffer(t))return i(this,t,e);if("number"==typeof t)return n.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,t,e):i(this,[t],e);throw new TypeError("val must be string, number or Buffer")},n.prototype.get=function(t){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(t)},n.prototype.set=function(t,e){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(t,e)},n.prototype.write=function(t,e,i,r){if(void 0===e)r="utf8",i=this.length,e=0;else if(void 0===i&&"string"==typeof e)r=e,i=this.length,e=0;else if(isFinite(e))e|=0,isFinite(i)?(i|=0,void 0===r&&(r="utf8")):(r=i,i=void 0);else{var n=r;r=e,e=0|i,i=n}var o=this.length-e;if((void 0===i||i>o)&&(i=o),t.length>0&&(i<0||e<0)||e>this.length)throw new RangeError("attempt to write outside buffer bounds");r||(r="utf8");for(var s=!1;;)switch(r){case"hex":return l(this,t,e,i);case"utf8":case"utf-8":return u(this,t,e,i);case"ascii":return c(this,t,e,i);case"binary":return p(this,t,e,i);case"base64":return d(this,t,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return f(this,t,e,i);default:if(s)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),s=!0}},n.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var D=4096;n.prototype.slice=function(t,e){var i,r=this.length;if(t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(n*=256);)r+=this[t+--e]*n;return r},n.prototype.readUInt8=function(t,e){return e||S(t,1,this.length),this[t]},n.prototype.readUInt16LE=function(t,e){return e||S(t,2,this.length),this[t]|this[t+1]<<8},n.prototype.readUInt16BE=function(t,e){return e||S(t,2,this.length),this[t]<<8|this[t+1]},n.prototype.readUInt32LE=function(t,e){return e||S(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},n.prototype.readUInt32BE=function(t,e){return e||S(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},n.prototype.readIntLE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=this[t],n=1,o=0;++o=(n*=128)&&(r-=Math.pow(2,8*e)),r},n.prototype.readIntBE=function(t,e,i){t|=0,e|=0,i||S(t,e,this.length);for(var r=e,n=1,o=this[t+--r];r>0&&(n*=256);)o+=this[t+--r]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},n.prototype.readInt8=function(t,e){return e||S(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},n.prototype.readInt16LE=function(t,e){e||S(t,2,this.length);var i=this[t]|this[t+1]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt16BE=function(t,e){e||S(t,2,this.length);var i=this[t+1]|this[t]<<8;return 32768&i?4294901760|i:i},n.prototype.readInt32LE=function(t,e){return e||S(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},n.prototype.readInt32BE=function(t,e){return e||S(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},n.prototype.readFloatLE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!0,23,4)},n.prototype.readFloatBE=function(t,e){return e||S(t,4,this.length),L.read(this,t,!1,23,4)},n.prototype.readDoubleLE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!0,52,8)},n.prototype.readDoubleBE=function(t,e){return e||S(t,8,this.length),L.read(this,t,!1,52,8)},n.prototype.writeUIntLE=function(t,e,i,r){t=+t,e|=0,i|=0,r||x(this,t,e,i,Math.pow(2,8*i),0);var n=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+n]=t/o&255;return e+i},n.prototype.writeUInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,255,0),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},n.prototype.writeUInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeUInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,65535,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeUInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):T(this,t,e,!0),e+4},n.prototype.writeUInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,4294967295,0),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeIntLE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=0,s=1,a=t<0?1:0;for(this[e]=255&t;++o>0)-a&255;return e+i},n.prototype.writeIntBE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);x(this,t,e,i,n-1,-n)}var o=i-1,s=1,a=t<0?1:0;for(this[e+o]=255&t;--o>=0&&(s*=256);)this[e+o]=(t/s>>0)-a&255;return e+i},n.prototype.writeInt8=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,1,127,-128),n.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},n.prototype.writeInt16LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):w(this,t,e,!0),e+2},n.prototype.writeInt16BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,2,32767,-32768),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):w(this,t,e,!1),e+2},n.prototype.writeInt32LE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),n.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):T(this,t,e,!0),e+4},n.prototype.writeInt32BE=function(t,e,i){return t=+t,e|=0,i||x(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),n.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):T(this,t,e,!1),e+4},n.prototype.writeFloatLE=function(t,e,i){return M(this,t,e,!0,i)},n.prototype.writeFloatBE=function(t,e,i){return M(this,t,e,!1,i)},n.prototype.writeDoubleLE=function(t,e,i){return P(this,t,e,!0,i)},n.prototype.writeDoubleBE=function(t,e,i){return P(this,t,e,!1,i)},n.prototype.copy=function(t,e,i,r){if(i||(i=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;o--)t[o+e]=this[o+i];else if(s<1e3||!n.TYPED_ARRAY_SUPPORT)for(o=0;o=this.length)throw new RangeError("start out of bounds");if(i<0||i>this.length)throw new RangeError("end out of bounds");var r;if("number"==typeof t)for(r=e;r>1,u=-7,c=i?n-1:0,p=i?-1:1,d=t[e+c];for(c+=p,o=d&(1<<-u)-1,d>>=-u,u+=a;u>0;o=256*o+t[e+c],c+=p,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=r;u>0;s=256*s+t[e+c],c+=p,u-=8);if(0===o)o=1-l;else{if(o===h)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,r),o-=l}return(d?-1:1)*s*Math.pow(2,o-r)},i.write=function(t,e,i,r,n,o){var s,a,h,l=8*o-n-1,u=(1<>1,p=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,f=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+c>=1?p/h:p*Math.pow(2,1-c))*h>=2&&(s++,h/=2),s+c>=u?(a=0,s=u):s+c>=1?(a=(e*h-1)*Math.pow(2,n),s+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,n),s=0));n>=8;t[i+d]=255&a,d+=f,a/=256,n-=8);for(s=s<0;t[i+d]=255&s,d+=f,s/=256,l-=8);t[i+d-f]|=128*m}},{}],8:[function(t,e,i){var r={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},{}],9:[function(t,e,i){"use strict";function r(t,e){return t.b===e.b&&t.a===e.a}function n(t,e){return t.bt?0:t)<=(i=0>i?0:i)?0===i?(e+r)/2:e+t/(t+i)*(r-e):r+i/(t+i)*(e-r)}function d(t){var e=g(t.b);return b(e,t.c),b(e.b,t.c),S(e,t.a),e}function f(t,e){var i=!1,r=!1;t!==e&&(e.a!==t.a&&(r=!0,w(e.a,t.a)),e.d!==t.d&&(i=!0,T(e.d,t.d)),_(e,t),r||(b(e,t.a),t.a.c=t),i||(S(e,t.d),t.d.a=t))}function m(t){var e=t.b,i=!1;t.d!==t.b.d&&(i=!0,T(t.d,t.b.d)),t.c===t?w(t.a,null):(t.b.d.a=J(t),t.a.c=t.c,_(t,J(t)),i||S(t,t.d)),e.c===e?(w(e.a,null),T(e.d,null)):(t.d.a=J(e),e.a.c=e.c,_(e,J(e))),x(t)}function y(t){var e=g(t),i=e.b;return _(e,t.e),e.a=t.b.a,b(i,e.a),e.d=i.d=t.d,e=e.b,_(t.b,J(t.b)),_(t.b,e),t.b.a=e.a,e.b.a.c=e.b,e.b.d=t.b.d,e.f=t.f,e.b.f=t.b.f,e}function v(t,e){var i=!1,r=g(t),n=r.b;return e.d!==t.d&&(i=!0,T(e.d,t.d)),_(r,t.e),_(n,e),r.a=t.b.a,n.a=e.a,r.d=n.d=t.d,t.d.a=n,i||S(r,t.d),r}function g(t){var e=new Z,i=new Z,r=t.b.h;return i.h=r,r.b.h=e,e.h=t,t.b.h=i,e.b=i,e.c=e,e.e=i,i.b=e,i.c=i,i.e=e}function _(t,e){var i=t.c,r=e.c;i.b.e=e,r.b.e=t,t.c=r,e.c=i}function b(t,e){var i=e.f,r=new K(e,i);i.e=r,e.f=r,i=r.c=t;do{i.a=r,i=i.c}while(i!==t)}function S(t,e){var i=e.d,r=new Q(e,i);i.b=r,e.d=r,r.a=t,r.c=e.c,i=t;do{i.d=r,i=i.e}while(i!==t)}function x(t){var e=t.h;t=t.b.h,e.b.h=t,t.b.h=e}function w(t,e){var i=t.c,r=i;do{r.a=e,r=r.c}while(r!==i);i=t.f,(r=t.e).f=i,i.e=r}function T(t,e){var i=t.a,r=i;do{r.d=e,r=r.e}while(r!==i);i=t.d,(r=t.b).d=i,i.b=r}function A(t){var e=0;return Math.abs(t[1])>Math.abs(t[0])&&(e=1),Math.abs(t[2])>Math.abs(t[e])&&(e=2),e}function M(t,e){t.f+=e.f,t.b.f+=e.b.f}function P(t,e,i){return t=t.a,e=e.a,i=i.a,e.b.a===t?i.b.a===t?n(e.a,i.a)?0>=s(i.b.a,e.a,i.a):0<=s(e.b.a,i.a,e.a):0>=s(i.b.a,t,i.a):i.b.a===t?0<=s(e.b.a,t,e.a):(e=o(e.b.a,t,e.a),t=o(i.b.a,t,i.a),e>=t)}function E(t){t.a.i=null;var e=t.e;e.a.c=e.c,e.c.a=e.a,t.e=null}function k(t,e){m(t.a),t.c=!1,t.a=e,e.i=t}function C(t){var e=t.a.a;do{t=ut(t)}while(t.a.a===e);return t.c&&(e=v(lt(t).a.b,t.a.e),k(t,e),t=ut(t)),t}function R(t,e,i){var r=new ht;return r.a=i,r.e=z(t.f,e.e,r),i.i=r}function O(t,e){switch(t.s){case 100130:return 0!=(1&e);case 100131:return 0!==e;case 100132:return 0e;case 100134:return 2<=e||-2>=e}return!1}function L(t){var e=t.a,i=e.d;i.c=t.d,i.a=e,E(t)}function F(t,e,i){for(t=e,e=e.a;t!==i;){t.c=!1;var r=lt(t),n=r.a;if(n.a!==e.a){if(!r.c){L(t);break}n=v(e.c.b,n.b),k(r,n)}e.c!==n&&(f(J(n),n),f(e,n)),L(t),e=r.a,t=r}return e}function I(t,e,i,r,n,o){var s=!0;do{R(t,e,i.b),i=i.c}while(i!==r);for(null===n&&(n=lt(e).a.b.c);r=lt(e),(i=r.a.b).a===n.a;)i.c!==n&&(f(J(i),i),f(J(n),i)),r.f=e.f-i.f,r.d=O(t,r.f),e.b=!0,!s&&N(t,e)&&(M(i,n),E(e),m(n)),s=!1,e=r,n=i;e.b=!0,o&&q(t,e)}function D(t,e,i,r,n){var o=[e.g[0],e.g[1],e.g[2]];e.d=null,e.d=t.o&&t.o(o,i,r,t.c)||null,null===e.d&&(n?t.n||(Y(t,100156),t.n=!0):e.d=i[0])}function U(t,e,i){var r=[null,null,null,null];r[0]=e.a.d,r[1]=i.a.d,D(t,e.a,r,[.5,.5,0,0],!1),f(e,i)}function B(t,e,i,r,n){var o=Math.abs(e.b-t.b)+Math.abs(e.a-t.a),s=Math.abs(i.b-t.b)+Math.abs(i.a-t.a),a=n+1;r[n]=.5*s/(o+s),r[a]=.5*o/(o+s),t.g[0]+=r[n]*e.g[0]+r[a]*i.g[0],t.g[1]+=r[n]*e.g[1]+r[a]*i.g[1],t.g[2]+=r[n]*e.g[2]+r[a]*i.g[2]}function N(t,e){var i=lt(e),o=e.a,a=i.a;if(n(o.a,a.a)){if(0=p?st(i,p):n(u[l[p>>1]],u[l[p]])?st(i,p):at(i,p)),u[h]=null,c[h]=i.b,i.b=h}else for(i.c[-(h+1)]=null;0s(o.b.a,a.a,o.a))return!1;ut(e).b=e.b=!0,y(o.b),f(J(a),o)}return!0}function G(t,e){var i=lt(e),u=e.a,c=i.a,d=u.a,m=c.a,v=u.b.a,g=c.b.a,_=new K;if(s(v,t.a,d),s(g,t.a,m),d===m||Math.min(d.a,v.a)>Math.max(m.a,g.a))return!1;if(n(d,m)){if(0s(v,m,d))return!1;var b,S,x=v,w=d,T=g,A=m;if(n(x,w)||(b=x,x=w,w=b),n(T,A)||(b=T,T=A,A=b),n(x,T)||(b=x,x=T,T=b,b=w,w=A,A=b),n(T,w)?n(w,A)?(b=o(x,T,w),S=o(T,w,A),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,w.b)):(b=s(x,T,w),S=-s(x,A,w),0>b+S&&(b=-b,S=-S),_.b=p(b,T.b,S,A.b)):_.b=(T.b+w.b)/2,a(x,w)||(b=x,x=w,w=b),a(T,A)||(b=T,T=A,A=b),a(x,T)||(b=x,x=T,T=b,b=w,w=A,A=b),a(T,w)?a(w,A)?(b=h(x,T,w),S=h(T,w,A),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,w.a)):(b=l(x,T,w),S=-l(x,A,w),0>b+S&&(b=-b,S=-S),_.a=p(b,T.a,S,A.a)):_.a=(T.a+w.a)/2,n(_,t.a)&&(_.b=t.a.b,_.a=t.a.a),n(x=n(d,m)?d:m,_)&&(_.b=x.b,_.a=x.a),r(_,d)||r(_,m))return N(t,e),!1;if(!r(v,t.a)&&0<=s(v,t.a,_)||!r(g,t.a)&&0>=s(g,t.a,_)){if(g===t.a)return y(u.b),f(c.b,u),e=C(e),u=lt(e).a,F(t,lt(e),i),I(t,e,J(u),u,u,!0),!0;if(v===t.a){y(c.b),f(u.e,J(c)),d=i=e,m=d.a.b.a;do{d=ut(d)}while(d.a.b.a===m);return d=lt(e=d).a.b.c,i.a=J(c),c=F(t,i,null),I(t,e,c.c,u.b.c,d,!0),!0}return 0<=s(v,t.a,_)&&(ut(e).b=e.b=!0,y(u.b),u.a.b=t.a.b,u.a.a=t.a.a),0>=s(g,t.a,_)&&(e.b=i.b=!0,y(c.b),c.a.b=t.a.b,c.a.a=t.a.a),!1}return y(u.b),y(c.b),f(J(c),u),u.a.b=_.b,u.a.a=_.a,u.a.h=et(t.e,u.a),u=u.a,c=[0,0,0,0],_=[d.d,v.d,m.d,g.d],u.g[0]=u.g[1]=u.g[2]=0,B(u,d,v,c,0),B(u,m,g,c,2),D(t,u,_,c,!0),ut(e).b=e.b=i.b=!0,!1}function q(t,e){for(var i=lt(e);;){for(;i.b;)e=i,i=lt(i);if(!e.b&&(i=e,null===(e=ut(e))||!e.b))break;e.b=!1;var r,o=e.a,a=i.a;if(r=o.b.a!==a.b.a)t:{var h=lt(r=e),l=r.a,u=h.a,c=void 0;if(n(l.b.a,u.b.a)){if(0>s(l.b.a,u.b.a,l.a)){r=!1;break t}ut(r).b=r.b=!0,c=y(l),f(u.b,c),c.d.c=r.d}else{if(0r.f&&(r.f*=2,r.c=rt(r.c,r.f+1)),0===r.b?i=n:(i=r.b,r.b=r.c[r.b]),r.e[i]=e,r.c[i]=n,r.d[n]=i,r.h&&at(r,n),i}return r=t.a++,t.c[r]=e,-(r+1)}function it(t){if(0===t.a)return ot(t.b);var e=t.c[t.d[t.a-1]];if(0!==t.b.a&&n(nt(t.b),e))return ot(t.b);do{--t.a}while(0t.a||n(r[a],r[l])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function at(t,e){for(var i=t.d,r=t.e,o=t.c,s=e,a=i[s];;){var h=s>>1,l=i[h];if(0===h||n(r[l],r[a])){i[s]=a,o[a]=s;break}i[s]=l,o[l]=s,s=h}}function ht(){this.e=this.a=null,this.f=0,this.c=this.b=this.h=this.d=!1}function lt(t){return t.e.c.b}function ut(t){return t.e.a.b}var ct,pt=4e150,dt=0;(ct=H.prototype).x=function(){X(this,dt)},ct.B=function(t,e){switch(t){case 100142:return;case 100140:switch(e){case 100130:case 100131:case 100132:case 100133:case 100134:return void(this.s=e)}break;case 100141:return void(this.m=!!e);default:return void Y(this,100900)}Y(this,100901)},ct.y=function(t){switch(t){case 100142:return 0;case 100140:return this.s;case 100141:return this.m;default:Y(this,100900)}return!1},ct.A=function(t,e,i){this.j[0]=t,this.j[1]=e,this.j[2]=i},ct.z=function(t,e){var i=e||null;switch(t){case 100100:case 100106:this.h=i;break;case 100104:case 100110:this.l=i;break;case 100101:case 100107:this.k=i;break;case 100102:case 100108:this.i=i;break;case 100103:case 100109:this.p=i;break;case 100105:case 100111:this.o=i;break;case 100112:this.r=i;break;default:Y(this,100900)}},ct.C=function(t,e){var i=!1,r=[0,0,0];X(this,2);for(var n=0;3>n;++n){var o=t[n];-1e150>o&&(o=-1e150,i=!0),1e150p;++p){var d=t.g[p];de[p]&&(e[p]=d,i[p]=t)}if(t=0,e[1]-h[1]>e[0]-h[0]&&(t=1),e[2]-h[2]>e[t]-h[t]&&(t=2),h[t]>=e[t])a[0]=0,a[1]=0,a[2]=1;else{for(e=0,h=l[t],i=i[t],l=[0,0,0],h=[h.g[0]-i.g[0],h.g[1]-i.g[1],h.g[2]-i.g[2]],p=[0,0,0],t=o.e;t!==o;t=t.e)p[0]=t.g[0]-i.g[0],p[1]=t.g[1]-i.g[1],p[2]=t.g[2]-i.g[2],l[0]=h[1]*p[2]-h[2]*p[1],l[1]=h[2]*p[0]-h[0]*p[2],l[2]=h[0]*p[1]-h[1]*p[0],(d=l[0]*l[0]+l[1]*l[1]+l[2]*l[2])>e&&(e=d,a[0]=l[0],a[1]=l[1],a[2]=l[2]);0>=e&&(a[0]=a[1]=a[2]=0,a[A(h)]=1)}o=!0}for(l=A(a),t=this.b.c,e=(l+1)%3,i=(l+2)%3,l=0=(e=t.a).f))do{a+=(e.a.b-e.b.a.b)*(e.a.a+e.b.a.a),e=e.e}while(e!==t.a);if(0>a)for(a=this.b.c,o=a.e;o!==a;o=o.e)o.a=-o.a}for(this.n=!1,a=this.b.b,t=a.h;t!==a;t=o)o=t.h,e=t.e,r(t.a,t.b.a)&&t.e.e!==t&&(U(this,e,t),m(t),e=(t=e).e),e.e===t&&(e!==t&&(e!==o&&e!==o.b||(o=o.h),m(e)),t!==o&&t!==o.b||(o=o.h),m(t));for(this.e=a=new $,o=this.b.c,t=o.e;t!==o;t=t.e)t.h=et(a,t);for(tt(a),this.f=new function(t){this.a=new W,this.b=t,this.c=P}(this),j(this,-pt),j(this,pt);null!==(a=it(this.e));){for(;;){t:if(t=this.e,0===t.a)o=nt(t.b);else if(o=t.c[t.d[t.a-1]],0!==t.b.a&&(t=nt(t.b),n(t,o))){o=t;break t}if(null===o||!r(o,a))break;o=it(this.e),U(this,a.c,o.c)}V(this,a)}for(this.a=this.f.a.a.b.a.a,a=0;null!==(o=this.f.a.a.b);)o.h||++a,E(o);for(this.f=null,(a=this.e).b=null,a.d=null,this.e=a.c=null,a=this.b,t=a.a.b;t!==a.a;t=o)o=t.b,(t=t.a).e.e===t&&(M(t.c,t),m(t));if(!this.n){if(a=this.b,this.m)for(t=a.b.h;t!==a.b;t=o)o=t.h,t.b.d.c!==t.d.c?t.f=t.d.c?1:-1:m(t);else for(t=a.a.b;t!==a.a;t=o)if(o=t.b,t.c){for(t=t.a;n(t.b.a,t.a);t=t.c.b);for(;n(t.a,t.b.a);t=t.e);for(e=t.c.b,i=void 0;t.e!==e;)if(n(t.b.a,e.a)){for(;e.e!==t&&(u(e.e)||0>=s(e.a,e.b.a,e.e.b.a));)i=v(e.e,e),e=i.b;e=e.c.b}else{for(;e.e!==t&&(c(t.c.b)||0<=s(t.b.a,t.a,t.c.b.a));)i=v(t,t.c.b),t=i.b;t=t.e}for(;e.e.e!==t;)i=v(e.e,e),e=i.b}if(this.h||this.i||this.k||this.l)if(this.m){for(a=this.b,o=a.a.b;o!==a.a;o=o.b)if(o.c){this.h&&this.h(2,this.c),t=o.a;do{this.k&&this.k(t.a.d,this.c),t=t.e}while(t!==o.a);this.i&&this.i(this.c)}}else{for(a=this.b,o=!!this.l,t=!1,e=-1,i=a.a.d;i!==a.a;i=i.d)if(i.c){t||(this.h&&this.h(4,this.c),t=!0),l=i.a;do{o&&(h=l.b.d.c?0:1,e!==h&&(e=h,this.l&&this.l(!!e,this.c))),this.k&&this.k(l.a.d,this.c),l=l.e}while(l!==i.a)}t&&this.i&&this.i(this.c)}if(this.r){for(a=this.b,t=a.a.b;t!==a.a;t=o)if(o=t.b,!t.c){e=t.a,i=e.e,l=void 0;do{i=(l=i).e,l.d=null,null===l.b.d&&(l.c===l?w(l.a,null):(l.a.c=l.c,_(l,J(l))),(h=l.b).c===h?w(h.a,null):(h.a.c=h.c,_(h,J(h))),x(l))}while(l!==e);e=t.d,(t=t.b).d=e,e.b=t}return this.r(this.b),void(this.c=this.b=null)}}this.b=this.c=null},this.libtess={GluTesselator:H,windingRule:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},errorType:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156},gluEnum:{GLU_TESS_MESH:100112,GLU_TESS_TOLERANCE:100142,GLU_TESS_WINDING_RULE:100140,GLU_TESS_BOUNDARY_ONLY:100141,GLU_INVALID_ENUM:100900,GLU_INVALID_VALUE:100901,GLU_TESS_BEGIN:100100,GLU_TESS_VERTEX:100101,GLU_TESS_END:100102,GLU_TESS_ERROR:100103,GLU_TESS_EDGE_FLAG:100104,GLU_TESS_COMBINE:100105,GLU_TESS_BEGIN_DATA:100106,GLU_TESS_VERTEX_DATA:100107,GLU_TESS_END_DATA:100108,GLU_TESS_ERROR_DATA:100109,GLU_TESS_EDGE_FLAG_DATA:100110,GLU_TESS_COMBINE_DATA:100111}},H.prototype.gluDeleteTess=H.prototype.x,H.prototype.gluTessProperty=H.prototype.B,H.prototype.gluGetTessProperty=H.prototype.y,H.prototype.gluTessNormal=H.prototype.A,H.prototype.gluTessCallback=H.prototype.z,H.prototype.gluTessVertex=H.prototype.C,H.prototype.gluTessBeginPolygon=H.prototype.u,H.prototype.gluTessBeginContour=H.prototype.t,H.prototype.gluTessEndContour=H.prototype.v,H.prototype.gluTessEndPolygon=H.prototype.w,void 0!==e&&(e.exports=this.libtess)},{}],10:[function(t,e,i){(function(r){!function(t,r){r("object"==typeof i&&void 0!==e?i:t.opentype={})}(this,function(e){"use strict";function i(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function n(t,e){this.source=t,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=e,this.destLen=0,this.ltree=new i,this.dtree=new i}function o(t,e,i,r){var n,o;for(n=0;n>>=1,e}function h(t,e,i){if(!e)return i;for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>16-e;return t.tag>>>=e,t.bitcount-=e,r+i}function l(t,e){for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<>>=1,++n,i+=e.table[n],r-=e.table[n]}while(r>=0);return t.tag=o,t.bitcount-=n,e.trans[i+r]}function u(t,e,i){var r,n,o,a,u,c;for(r=h(t,5,257),n=h(t,5,1),o=h(t,4,4),a=0;a<19;++a)Le[a]=0;for(a=0;a8;)t.sourceIndex--,t.bitcount-=8;if(e=256*(e=t.source[t.sourceIndex+1])+t.source[t.sourceIndex],i=256*(i=t.source[t.sourceIndex+3])+t.source[t.sourceIndex+2],e!==(65535&~i))return Te;for(t.sourceIndex+=4,r=e;r;--r)t.dest[t.destLen++]=t.source[t.sourceIndex++];return t.bitcount=0,we}function d(t,e,i,r,n){return Math.pow(1-n,3)*t+3*Math.pow(1-n,2)*n*e+3*(1-n)*Math.pow(n,2)*i+Math.pow(n,3)*r}function f(){this.x1=Number.NaN,this.y1=Number.NaN,this.x2=Number.NaN,this.y2=Number.NaN}function m(){this.commands=[],this.fill="black",this.stroke=null,this.strokeWidth=1}function y(t){throw new Error(t)}function v(t,e){t||y(e)}function g(t){return function(){return t}}function _(t){return t>=-128&&t<=127}function b(t,e,i){for(var r=0,n=t.length;e>8&255,h+256&255)}return o}function w(t,e,i){for(var r=this,n=0;n>4,o=15&r;if(15===n)break;if(e+=i[n],15===o)break;e+=i[o]}return parseFloat(e)}(t);if(e>=32&&e<=246)return e-139;if(e>=247&&e<=250)return i=t.parseByte(),256*(e-247)+i+108;if(e>=251&&e<=254)return i=t.parseByte(),256*-(e-251)-i-108;throw new Error("Invalid b0 "+e)}function Y(t,e,i){e=void 0!==e?e:0;var r=new Ye.Parser(t,e),n=[],o=[];for(i=void 0!==i?i:t.length;r.relativeOffset>1,f.length=0,v=!0}var o,s,a,h,l,u,c,p,d=new m,f=[],y=0,v=!1,g=!1,_=0,b=0;if(t.isCIDFont){var S=t.tables.cff.topDict._fdSelect[e.index],x=t.tables.cff.topDict._fdArray[S];l=x._subrs,u=x._subrsBias,c=x._defaultWidthX,p=x._nominalWidthX}else l=t.tables.cff.topDict._subrs,u=t.tables.cff.topDict._subrsBias,c=t.tables.cff.topDict._defaultWidthX,p=t.tables.cff.topDict._nominalWidthX;var w=c;return function i(c){for(var m,S,x,T,A,M,P,E,k,C,R,O,L=0;L1&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_,b);break;case 5:for(;f.length>0;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 6:for(;f.length>0&&(_+=f.shift(),d.lineTo(_,b),0!==f.length);)b+=f.shift(),d.lineTo(_,b);break;case 7:for(;f.length>0&&(b+=f.shift(),d.lineTo(_,b),0!==f.length);)_+=f.shift(),d.lineTo(_,b);break;case 8:for(;f.length>0;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 10:A=f.pop()+u,(M=l[A])&&i(M);break;case 11:return;case 12:switch(F=c[L],L+=1,F){case 35:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h+f.shift(),k=P+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),b=O+f.shift(),f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;case 34:o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h,k=P+f.shift(),C=h,R=k+f.shift(),O=b,_=R+f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;case 36:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h,k=P+f.shift(),C=h,R=k+f.shift(),O=C+f.shift(),_=R+f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;case 37:o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),P=a+f.shift(),E=h+f.shift(),k=P+f.shift(),C=E+f.shift(),R=k+f.shift(),O=C+f.shift(),Math.abs(R-_)>Math.abs(O-b)?_=R+f.shift():b=O+f.shift(),d.curveTo(o,s,a,h,P,E),d.curveTo(k,C,R,O,_,b);break;default:console.log("Glyph "+e.index+": unknown operator 1200"+F),f.length=0}break;case 14:f.length>0&&!v&&(w=f.shift()+p,v=!0),g&&(d.closePath(),g=!1);break;case 18:n();break;case 19:case 20:n(),L+=y+7>>3;break;case 21:f.length>2&&!v&&(w=f.shift()+p,v=!0),b+=f.pop(),r(_+=f.pop(),b);break;case 22:f.length>1&&!v&&(w=f.shift()+p,v=!0),r(_+=f.pop(),b);break;case 23:n();break;case 24:for(;f.length>2;)o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);_+=f.shift(),b+=f.shift(),d.lineTo(_,b);break;case 25:for(;f.length>6;)_+=f.shift(),b+=f.shift(),d.lineTo(_,b);o=_+f.shift(),s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 26:for(f.length%2&&(_+=f.shift());f.length>0;)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a,b=h+f.shift(),d.curveTo(o,s,a,h,_,b);break;case 27:for(f.length%2&&(b+=f.shift());f.length>0;)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h,d.curveTo(o,s,a,h,_,b);break;case 28:m=c[L],S=c[L+1],f.push((m<<24|S<<16)>>16),L+=2;break;case 29:A=f.pop()+t.gsubrsBias,(M=t.gsubrs[A])&&i(M);break;case 30:for(;f.length>0&&(o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;case 31:for(;f.length>0&&(o=_+f.shift(),s=b,a=o+f.shift(),h=s+f.shift(),b=h+f.shift(),_=a+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b),0!==f.length);)o=_,s=b+f.shift(),a=o+f.shift(),h=s+f.shift(),_=a+f.shift(),b=h+(1===f.length?f.shift():0),d.curveTo(o,s,a,h,_,b);break;default:F<32?console.log("Glyph "+e.index+": unknown operator "+F):F<247?f.push(F-139):F<251?(m=c[L],L+=1,f.push(256*(F-247)+m+108)):F<255?(m=c[L],L+=1,f.push(256*-(F-251)-m-108)):(m=c[L],S=c[L+1],x=c[L+2],T=c[L+3],L+=4,f.push((m<<24|S<<16|x<<8|T)/65536))}}}(i),e.advanceWidth=w,d}function et(t,e){var i,r=Ze.indexOf(t);return r>=0&&(i=r),(r=e.indexOf(t))>=0?i=r+Ze.length:(i=Ze.length+e.length,e.push(t)),i}function it(t,e,i){for(var r={},n=0;ne.value.tag?1:-1}),e.fields=e.fields.concat(r),e.fields=e.fields.concat(n),e}function mt(t,e,i){for(var r=0;r0)return t.glyphs.get(n).getMetrics()}return i}function yt(t,e){for(var i=0,r=t.length-1;i<=r;){var n=i+r>>>1,o=t[n].tag;if(o===e)return n;o>>1,o=t[n];if(o===e)return n;o>>1,s=(i=t[o]).start;if(s===e)return i;s0)return i=t[r-1],e>i.end?0:i}function _t(t,e){this.font=t,this.tableName=e}function bt(t){_t.call(this,t,"gpos")}function St(t){_t.call(this,t,"gsub")}function xt(t,e){var i=t.length;if(i!==e.length)return!1;for(var r=0;r0?(o=t.parseByte(),0==(e&n)&&(o=-o),o=i+o):o=(e&n)>0?i:i+t.parseShort(),o}function Et(t,e,i){var r,n,o=new Ye.Parser(e,i);if(t.numberOfContours=o.parseShort(),t._xMin=o.parseShort(),t._yMin=o.parseShort(),t._xMax=o.parseShort(),t._yMax=o.parseShort(),t.numberOfContours>0){for(var s=t.endPointIndices=[],a=0;a0)for(var c=o.parseByte(),p=0;p0){var d,f=[];if(l>0){for(var m=0;m=0,f.push(d);for(var y=0,v=0;v0?(2&r)>0?(S.dx=o.parseShort(),S.dy=o.parseShort()):S.matchedPoints=[o.parseUShort(),o.parseUShort()]:(2&r)>0?(S.dx=o.parseChar(),S.dy=o.parseChar()):S.matchedPoints=[o.parseByte(),o.parseByte()],(8&r)>0?S.xScale=S.yScale=o.parseF2Dot14():(64&r)>0?(S.xScale=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()):(128&r)>0&&(S.xScale=o.parseF2Dot14(),S.scale01=o.parseF2Dot14(),S.scale10=o.parseF2Dot14(),S.yScale=o.parseF2Dot14()),t.components.push(S),b=!!(32&r)}if(256&r){t.instructionLength=o.parseUShort(),t.instructions=[];for(var x=0;xe.points.length-1||r.matchedPoints[1]>n.points.length-1)throw Error("Matched points out of range in "+e.name);var s=e.points[r.matchedPoints[0]],a=n.points[r.matchedPoints[1]],h={xScale:r.xScale,scale01:r.scale01,scale10:r.scale10,yScale:r.yScale,dx:0,dy:0};a=kt([a],h)[0],h.dx=s.x-a.x,h.dy=s.y-a.y,o=kt(n.points,h)}e.points=e.points.concat(o)}}return Ct(e.points)}function Ot(t){this.font=t,this.getCommands=function(t){return Ri.getPath(t).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function Lt(t){return t}function Ft(t){return Math.sign(t)*Math.round(Math.abs(t))}function It(t){return Math.sign(t)*Math.round(Math.abs(2*t))/2}function Dt(t){return Math.sign(t)*(Math.round(Math.abs(t)+.5)-.5)}function Ut(t){return Math.sign(t)*Math.ceil(Math.abs(t))}function Bt(t){return Math.sign(t)*Math.floor(Math.abs(t))}function Nt(t,e){this.x=t,this.y=e,this.axis=void 0,this.slope=e/t,this.normalSlope=-t/e,Object.freeze(this)}function Gt(t,e){var i=Math.sqrt(t*t+e*e);return e/=i,1==(t/=i)&&0===e?Li:0===t&&1===e?Fi:new Nt(t,e)}function qt(t,e,i,r){this.x=this.xo=Math.round(64*t)/64,this.y=this.yo=Math.round(64*e)/64,this.lastPointOfContour=i,this.onCurve=r,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}function Vt(t,e){switch(this.env=t,this.stack=[],this.prog=e,t){case"glyf":this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=Li,this.round=Ft}}function jt(t){for(var e=t.tZone=new Array(t.gZone.length),i=0;i=176&&i<=183)n+=i-176+1;else if(i>=184&&i<=191)n+=2*(i-184+1);else if(e&&1===o&&27===i)break}while(o>0);t.ip=n}function Wt(t,i){e.DEBUG&&console.log(i.step,"SVTCA["+t.axis+"]"),i.fv=i.pv=i.dpv=t}function Ht(t,i){e.DEBUG&&console.log(i.step,"SPVTCA["+t.axis+"]"),i.pv=i.dpv=t}function Xt(t,i){e.DEBUG&&console.log(i.step,"SFVTCA["+t.axis+"]"),i.fv=t}function Yt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.pv=i.dpv=Gt(r,n)}function Qt(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log("SFVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.fv=Gt(r,n)}function Zt(t){e.DEBUG&&console.log(t.step,"POP[]"),t.stack.pop()}function Jt(t,i){var r=i.stack.pop(),n=i.z0[r],o=i.fv,s=i.pv;e.DEBUG&&console.log(i.step,"MDAP["+t+"]",r);var a=s.distance(n,Ii);t&&(a=i.round(a)),o.setRelative(n,Ii,a,s),o.touch(n),i.rp0=i.rp1=r}function Kt(t,i){var r,n,o,s=i.z2,a=s.length-2;e.DEBUG&&console.log(i.step,"IUP["+t.axis+"]");for(var h=0;h1?"loop "+(i.loop-h)+": ":"")+"SHP["+(t?"rp1":"rp2")+"]",u)}i.loop=1}function te(t,i){var r=i.stack,n=t?i.rp1:i.rp2,o=(t?i.z0:i.z1)[n],s=i.fv,a=i.pv,h=r.pop(),l=i.z2[i.contours[h]],u=l;e.DEBUG&&console.log(i.step,"SHC["+t+"]",h);var c=a.distance(o,o,!1,!0);do{u!==o&&s.setRelative(u,u,c,a),u=u.nextPointOnContour}while(u!==l)}function ee(t,i){var r,n=i.stack,o=t?i.rp1:i.rp2,s=(t?i.z0:i.z1)[o],a=i.fv,h=i.pv,l=n.pop();switch(e.DEBUG&&console.log(i.step,"SHZ["+t+"]",l),l){case 0:r=i.tZone;break;case 1:r=i.gZone;break;default:throw new Error("Invalid zone")}for(var u,c=h.distance(s,s,!1,!0),p=r.length-2,d=0;d",h),i.stack.push(Math.round(64*h))}function se(t,i){var r=i.stack,n=r.pop(),o=i.fv,s=i.pv,a=i.ppem,h=i.deltaBase+16*(t-1),l=i.deltaShift,u=i.z0;e.DEBUG&&console.log(i.step,"DELTAP["+t+"]",n,r);for(var c=0;c>4)===a){var f=(15&d)-8;f>=0&&f++,e.DEBUG&&console.log(i.step,"DELTAPFIX",p,"by",f*l);var m=u[p];o.setRelative(m,m,f*l,s)}}}function ae(t,i){var r=i.stack,n=r.pop();e.DEBUG&&console.log(i.step,"ROUND[]"),r.push(64*i.round(n/64))}function he(t,i){var r=i.stack,n=r.pop(),o=i.ppem,s=i.deltaBase+16*(t-1),a=i.deltaShift;e.DEBUG&&console.log(i.step,"DELTAC["+t+"]",n,r);for(var h=0;h>4)===o){var c=(15&u)-8;c>=0&&c++;var p=c*a;e.DEBUG&&console.log(i.step,"DELTACFIX",l,"by",p),i.cvt[l]+=p}}}function le(t,i){var r,n,o=i.stack,s=o.pop(),a=o.pop(),h=i.z2[s],l=i.z1[a];e.DEBUG&&console.log(i.step,"SDPVTL["+t+"]",s,a),t?(r=h.y-l.y,n=l.x-h.x):(r=l.x-h.x,n=l.y-h.y),i.dpv=Gt(r,n)}function ue(t,i){var r=i.stack,n=i.prog,o=i.ip;e.DEBUG&&console.log(i.step,"PUSHB["+t+"]");for(var s=0;s=0?1:-1,h=Math.abs(h),t&&(u=s.cvt[p],n&&Math.abs(h-u)":"_")+(n?"R":"_")+(0===o?"Gr":1===o?"Bl":2===o?"Wh":"")+"]",t?p+"("+s.cvt[p]+","+u+")":"",d,"(d =",a,"->",l*h,")"),s.rp1=s.rp0,s.rp2=d,i&&(s.rp0=d)}function de(t){(t=t||{}).empty||(Mt(t.familyName,"When creating a new Font object, familyName is required."),Mt(t.styleName,"When creating a new Font object, styleName is required."),Mt(t.unitsPerEm,"When creating a new Font object, unitsPerEm is required."),Mt(t.ascender,"When creating a new Font object, ascender is required."),Mt(t.descender,"When creating a new Font object, descender is required."),Mt(t.descender<0,"Descender should be negative (e.g. -512)."),this.names={fontFamily:{en:t.familyName||" "},fontSubfamily:{en:t.styleName||" "},fullName:{en:t.fullName||t.familyName+" "+t.styleName},postScriptName:{en:t.postScriptName||(t.familyName+t.styleName).replace(/\s/g,"")},designer:{en:t.designer||" "},designerURL:{en:t.designerURL||" "},manufacturer:{en:t.manufacturer||" "},manufacturerURL:{en:t.manufacturerURL||" "},license:{en:t.license||" "},licenseURL:{en:t.licenseURL||" "},version:{en:t.version||"Version 0.1"},description:{en:t.description||" "},copyright:{en:t.copyright||" "},trademark:{en:t.trademark||" "}},this.unitsPerEm=t.unitsPerEm||1e3,this.ascender=t.ascender,this.descender=t.descender,this.createdTimestamp=t.createdTimestamp,this.tables={os2:{usWeightClass:t.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:t.widthClass||this.usWidthClasses.MEDIUM,fsSelection:t.fsSelection||this.fsSelectionValues.REGULAR}}),this.supported=!0,this.glyphs=new ei.GlyphSet(this,t.glyphs||[]),this.encoding=new U(this),this.position=new bt(this),this.substitution=new St(this),this.tables=this.tables||{},Object.defineProperty(this,"hinting",{get:function(){return this._hinting?this._hinting:"truetype"===this.outlinesFormat?this._hinting=new Ot(this):void 0}})}function fe(t,e){var i=JSON.stringify(t),r=256;for(var n in e){var o=parseInt(n);if(o&&!(o<256)){if(JSON.stringify(e[n])===i)return o;r<=o&&(r=o+1)}}return e[r]=t,r}function me(t,e,i){var r=fe(e.name,i);return[{name:"tag_"+t,type:"TAG",value:e.tag},{name:"minValue_"+t,type:"FIXED",value:e.minValue<<16},{name:"defaultValue_"+t,type:"FIXED",value:e.defaultValue<<16},{name:"maxValue_"+t,type:"FIXED",value:e.maxValue<<16},{name:"flags_"+t,type:"USHORT",value:0},{name:"nameID_"+t,type:"USHORT",value:r}]}function ye(t,e,i){var r={},n=new Ye.Parser(t,e);return r.tag=n.parseTag(),r.minValue=n.parseFixed(),r.defaultValue=n.parseFixed(),r.maxValue=n.parseFixed(),n.skip("uShort",1),r.name=i[n.parseUShort()]||{},r}function ve(t,e,i,r){for(var n=fe(e.name,r),o=[{name:"nameID_"+t,type:"USHORT",value:n},{name:"flags_"+t,type:"USHORT",value:0}],s=0;s=i)){var n,o=e.charCodeAt(r);return o>=55296&&o<=56319&&i>r+1&&(n=e.charCodeAt(r+1))>=56320&&n<=57343?1024*(o-55296)+n-56320+65536:o}};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}();var we=0,Te=-3,Ae=new i,Me=new i,Pe=new Uint8Array(30),Ee=new Uint16Array(30),ke=new Uint8Array(30),Ce=new Uint16Array(30),Re=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Oe=new i,Le=new Uint8Array(320),Fe=new Uint16Array(16);(function(t,e){var i;for(i=0;i<7;++i)t.table[i]=0;for(t.table[7]=24,t.table[8]=152,t.table[9]=112,i=0;i<24;++i)t.trans[i]=256+i;for(i=0;i<144;++i)t.trans[24+i]=i;for(i=0;i<8;++i)t.trans[168+i]=280+i;for(i=0;i<112;++i)t.trans[176+i]=144+i;for(i=0;i<5;++i)e.table[i]=0;for(e.table[5]=32,i=0;i<32;++i)e.trans[i]=i})(Ae,Me),o(Pe,Ee,4,3),o(ke,Ce,2,1),Pe[28]=0,Ee[28]=258;var Ie=function(t,e){var i,r,o=new n(t,e);do{switch(i=a(o),h(o,2,0)){case 0:r=p(o);break;case 1:r=c(o,Ae,Me);break;case 2:u(o,o.ltree,o.dtree),r=c(o,o.ltree,o.dtree);break;default:r=Te}if(r!==we)throw new Error("Data error")}while(!i);return o.destLenthis.x2&&(this.x2=t)),"number"==typeof e&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),ethis.y2&&(this.y2=e))},f.prototype.addX=function(t){this.addPoint(t,null)},f.prototype.addY=function(t){this.addPoint(null,t)},f.prototype.addBezier=function(t,e,i,r,n,o,s,a){var h=this,l=[t,e],u=[i,r],c=[n,o],p=[s,a];this.addPoint(t,e),this.addPoint(s,a);for(var f=0;f<=1;f++){var m=6*l[f]-12*u[f]+6*c[f],y=-3*l[f]+9*u[f]-9*c[f]+3*p[f],v=3*u[f]-3*l[f];if(0!==y){var g=Math.pow(m,2)-4*v*y;if(!(g<0)){var _=(-m+Math.sqrt(g))/(2*y);0<_&&_<1&&(0===f&&h.addX(d(l[f],u[f],c[f],p[f],_)),1===f&&h.addY(d(l[f],u[f],c[f],p[f],_)));var b=(-m-Math.sqrt(g))/(2*y);0=0&&r>0&&(i+=" "),i+=e(n)}return i}t=void 0!==t?t:2;for(var r="",n=0;n=0&&t<=255,"Byte value should be between 0 and 255."),[t]},Ge.BYTE=g(1),Ne.CHAR=function(t){return[t.charCodeAt(0)]},Ge.CHAR=g(1),Ne.CHARARRAY=function(t){for(var e=[],i=0;i>8&255,255&t]},Ge.USHORT=g(2),Ne.SHORT=function(t){return t>=32768&&(t=-(65536-t)),[t>>8&255,255&t]},Ge.SHORT=g(2),Ne.UINT24=function(t){return[t>>16&255,t>>8&255,255&t]},Ge.UINT24=g(3),Ne.ULONG=function(t){return[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.ULONG=g(4),Ne.LONG=function(t){return t>=Ue&&(t=-(2*Ue-t)),[t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONG=g(4),Ne.FIXED=Ne.ULONG,Ge.FIXED=Ge.ULONG,Ne.FWORD=Ne.SHORT,Ge.FWORD=Ge.SHORT,Ne.UFWORD=Ne.USHORT,Ge.UFWORD=Ge.USHORT,Ne.LONGDATETIME=function(t){return[0,0,0,0,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.LONGDATETIME=g(8),Ne.TAG=function(t){return De.argument(4===t.length,"Tag should be exactly 4 ASCII characters."),[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]},Ge.TAG=g(4),Ne.Card8=Ne.BYTE,Ge.Card8=Ge.BYTE,Ne.Card16=Ne.USHORT,Ge.Card16=Ge.USHORT,Ne.OffSize=Ne.BYTE,Ge.OffSize=Ge.BYTE,Ne.SID=Ne.USHORT,Ge.SID=Ge.USHORT,Ne.NUMBER=function(t){return t>=-107&&t<=107?[t+139]:t>=108&&t<=1131?[247+((t-=108)>>8),255&t]:t>=-1131&&t<=-108?[251+((t=-t-108)>>8),255&t]:t>=-32768&&t<=32767?Ne.NUMBER16(t):Ne.NUMBER32(t)},Ge.NUMBER=function(t){return Ne.NUMBER(t).length},Ne.NUMBER16=function(t){return[28,t>>8&255,255&t]},Ge.NUMBER16=g(3),Ne.NUMBER32=function(t){return[29,t>>24&255,t>>16&255,t>>8&255,255&t]},Ge.NUMBER32=g(5),Ne.REAL=function(t){var e=t.toString(),i=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(e);if(i){var r=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));e=(Math.round(t*r)/r).toString()}for(var n="",o=0,s=e.length;o>8&255,e[e.length]=255&r}return e},Ge.UTF16=function(t){return 2*t.length};var qe={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};Be.MACSTRING=function(t,e,i,r){var n=qe[r];if(void 0!==n){for(var o="",s=0;s=128&&void 0===(o=i[o]))return;r[n]=o}return r}},Ge.MACSTRING=function(t,e){var i=Ne.MACSTRING(t,e);return void 0!==i?i.length:0},Ne.VARDELTAS=function(t){for(var e=0,i=[];e=-128&&r<=127?S(t,e,i):x(t,e,i)}return i},Ne.INDEX=function(t){for(var e=1,i=[e],r=[],n=0;n>8,e[c+1]=255&p,e=e.concat(r[u])}return e},Ge.TABLE=function(t){for(var e=0,i=t.fields.length,r=0;r0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parsePointer32=function(t){var e=this.parseOffset32();if(e>0)return new I(this.data,this.offset+e).parseStruct(t)},I.prototype.parseListOfLists=function(t){for(var e=this,i=this.parseOffset16List(),r=i.length,n=this.relativeOffset,o=new Array(r),s=0;s=0;n-=1){var o=Ye.getUShort(t,e+4+8*n),s=Ye.getUShort(t,e+4+8*n+2);if(3===o&&(0===s||1===s||10===s)||0===o&&(0===s||1===s||2===s||3===s||4===s)){r=Ye.getULong(t,e+4+8*n+4);break}}if(-1===r)throw new Error("No valid cmap sub-tables found.");var a=new Ye.Parser(t,e+r);if(i.format=a.parseUShort(),12===i.format)!function(t,e){var i;e.parseUShort(),t.length=e.parseULong(),t.language=e.parseULong(),t.groupCount=i=e.parseULong(),t.glyphIndexMap={};for(var r=0;r>1,e.skip("uShort",3),t.glyphIndexMap={};for(var s=new Ye.Parser(i,r+n+14),a=new Ye.Parser(i,r+n+16+2*o),h=new Ye.Parser(i,r+n+16+4*o),l=new Ye.Parser(i,r+n+16+6*o),u=r+n+16+8*o,c=0;c0;e-=1)if(t.get(e).unicode>65535){console.log("Adding CMAP format 12 (needed!)"),i=!1;break}var r=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:i?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:i?12:20}];i||(r=r.concat([{name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}])),r=r.concat([{name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);var n=new We.Table("cmap",r);for(n.segments=[],e=0;e=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");o.push(n)}else{if(3!==a)throw new Error("CFF Table CID Font FDSelect table has unsupported format "+a);var l=s.parseCard16(),u=s.parseCard16();if(0!==u)throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+u);for(var c,p=0;p=r)throw new Error("CFF table CID Font FDSelect has bad FD index value "+n+" (FD count "+r+")");if(c>i)throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+c);for(;u=1&&(i.ulCodePageRange1=r.parseULong(),i.ulCodePageRange2=r.parseULong()),i.version>=2&&(i.sxHeight=r.parseShort(),i.sCapHeight=r.parseShort(),i.usDefaultChar=r.parseUShort(),i.usBreakChar=r.parseUShort(),i.usMaxContent=r.parseUShort()),i},make:function(t){return new We.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],t)},unicodeRanges:gi,getUnicodeRange:function(t){for(var e=0;e=i.begin&&t=$e.length){var s=r.parseChar();i.names.push(r.parseString(s))}break;case 2.5:i.numberOfGlyphs=r.parseUShort(),i.offset=new Array(i.numberOfGlyphs);for(var a=0;ay||void 0===e)&&y>0&&(e=y),l 123 are reserved for internal usage");d|=1<0?hi.make(O):void 0,I=bi.make(),D=ni.make(t.glyphs,{version:t.getEnglishName("version"),fullName:E,familyName:M,weightName:P,postScriptName:k,unitsPerEm:t.unitsPerEm,fontBBox:[0,_.yMin,_.ascender,_.advanceWidthMax]}),U=t.metas&&Object.keys(t.metas).length>0?Ai.make(t.metas):void 0,B=[b,S,x,w,L,A,I,D,T];F&&B.push(F),t.tables.gsub&&B.push(Ti.make(t.tables.gsub)),U&&B.push(U);for(var N=ft(B),G=pt(N.encode()),q=N.fields,V=!1,j=0;j=0)return r[n].script;if(e){var o={tag:t,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return r.splice(-1-n,0,o),o.script}}},getLangSysTable:function(t,e,i){var r=this.getScriptTable(t,i);if(r){if(!e||"dflt"===e||"DFLT"===e)return r.defaultLangSys;var n=yt(r.langSysRecords,e);if(n>=0)return r.langSysRecords[n].langSys;if(i){var o={tag:e,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return r.langSysRecords.splice(-1-n,0,o),o.langSys}}},getFeatureTable:function(t,e,i,r){var n=this.getLangSysTable(t,e,r);if(n){for(var o,s=n.featureIndexes,a=this.font.tables[this.tableName].features,h=0;h=a[l-1].tag,"Features must be added in alphabetical order."),o={tag:i,feature:{params:0,lookupListIndexes:[]}},a.push(o),s.push(l),o.feature}}},getLookupTables:function(t,e,i,r,n){var o=this.getFeatureTable(t,e,i,n),s=[];if(o){for(var a,h=o.lookupListIndexes,l=this.font.tables[this.tableName].lookups,u=0;u=0?i:-1;case 2:var r=gt(t.ranges,e);return r?r.index+e-r.start:-1}},expandCoverage:function(t){if(1===t.format)return t.glyphs;for(var e=[],i=t.ranges,r=0;r=0){for(var u=o.ligatureSets[l],c=0;c2)){var r=this.font,n=this._prepState;if(!n||n.ppem!==i){var o=this._fpgmState;if(!o){Vt.prototype=Di,(o=this._fpgmState=new Vt("fpgm",r.tables.fpgm)).funcs=[],o.font=r,e.DEBUG&&(console.log("---EXEC FPGM---"),o.step=-1);try{Ei(o)}catch(t){return console.log("Hinting error in FPGM:"+t),void(this._errorState=3)}}Vt.prototype=o,(n=this._prepState=new Vt("prep",r.tables.prep)).ppem=i;var s=r.tables.cvt;if(s)for(var a=n.cvt=new Array(s.length),h=i/r.unitsPerEm,l=0;l1))try{return ki(t,n)}catch(t){return this._errorState<1&&(console.log("Hinting error:"+t),console.log("Note: further hinting errors are silenced")),void(this._errorState=1)}}},ki=function(t,i){var r,n,o,s=i.ppem/i.font.unitsPerEm,a=s,h=t.components;if(Vt.prototype=i,h){var l=i.font;n=[],r=[];for(var u=0;u1?"loop "+(t.loop-r)+": ":"")+"SHPIX[]",a,o),n.setRelative(h,h,o),n.touch(h)}t.loop=1},function(t){for(var i=t.stack,r=t.rp1,n=t.rp2,o=t.loop,s=t.z0[r],a=t.z1[n],h=t.fv,l=t.dpv,u=t.z2;o--;){var c=i.pop(),p=u[c];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"IP[]",c,r,"<->",n),h.interpolate(p,s,a,l),h.touch(p)}t.loop=1},ie.bind(void 0,0),ie.bind(void 0,1),function(t){for(var i=t.stack,r=t.rp0,n=t.z0[r],o=t.loop,s=t.fv,a=t.pv,h=t.z1;o--;){var l=i.pop(),u=h[l];e.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-o)+": ":"")+"ALIGNRP[]",l),s.setRelative(u,n,0,a),s.touch(u)}t.loop=1},function(t){e.DEBUG&&console.log(t.step,"RTDG[]"),t.round=It},re.bind(void 0,0),re.bind(void 0,1),function(t){var i=t.prog,r=t.ip,n=t.stack,o=i[++r];e.DEBUG&&console.log(t.step,"NPUSHB[]",o);for(var s=0;sr?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"GTEQ[]",r,n),i.push(n>=r?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"EQ[]",r,n),i.push(r===n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"NEQ[]",r,n),i.push(r!==n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ODD[]",r),i.push(Math.trunc(r)%2?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"EVEN[]",r),i.push(Math.trunc(r)%2?0:1)},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"IF[]",i),i||(zt(t,!0),e.DEBUG&&console.log(t.step,"EIF[]"))},function(t){e.DEBUG&&console.log(t.step,"EIF[]")},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"AND[]",r,n),i.push(r&&n?1:0)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"OR[]",r,n),i.push(r||n?1:0)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NOT[]",r),i.push(r?0:1)},se.bind(void 0,1),function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDB[]",i),t.deltaBase=i},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SDS[]",i),t.deltaShift=Math.pow(.5,i)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"ADD[]",r,n),i.push(n+r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"SUB[]",r,n),i.push(n-r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"DIV[]",r,n),i.push(64*n/r)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MUL[]",r,n),i.push(n*r/64)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"ABS[]",r),i.push(Math.abs(r))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"NEG[]",r),i.push(-r)},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"FLOOR[]",r),i.push(64*Math.floor(r/64))},function(t){var i=t.stack,r=i.pop();e.DEBUG&&console.log(t.step,"CEILING[]",r),i.push(64*Math.ceil(r/64))},ae.bind(void 0,0),ae.bind(void 0,1),ae.bind(void 0,2),ae.bind(void 0,3),void 0,void 0,void 0,void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"WCVTF[]",r,n),t.cvt[n]=r*t.ppem/t.font.unitsPerEm},se.bind(void 0,2),se.bind(void 0,3),he.bind(void 0,1),he.bind(void 0,2),he.bind(void 0,3),function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"SROUND[]",r),t.round=Oi,192&r){case 0:i=.5;break;case 64:i=1;break;case 128:i=2;break;default:throw new Error("invalid SROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid SROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},function(t){var i,r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"S45ROUND[]",r),t.round=Oi,192&r){case 0:i=Math.sqrt(2)/2;break;case 64:i=Math.sqrt(2);break;case 128:i=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(t.srPeriod=i,48&r){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*i;break;case 32:t.srPhase=.5*i;break;case 48:t.srPhase=.75*i;break;default:throw new Error("invalid S45ROUND value")}r&=15,t.srThreshold=0===r?0:(r/8-.5)*i},void 0,void 0,function(t){e.DEBUG&&console.log(t.step,"ROFF[]"),t.round=Lt},void 0,function(t){e.DEBUG&&console.log(t.step,"RUTG[]"),t.round=Ut},function(t){e.DEBUG&&console.log(t.step,"RDTG[]"),t.round=Bt},Zt,Zt,void 0,void 0,void 0,void 0,void 0,function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANCTRL[]",i)},le.bind(void 0,0),le.bind(void 0,1),function(t){var i=t.stack,r=i.pop(),n=0;e.DEBUG&&console.log(t.step,"GETINFO[]",r),1&r&&(n=35),32&r&&(n|=4096),i.push(n)},void 0,function(t){var i=t.stack,r=i.pop(),n=i.pop(),o=i.pop();e.DEBUG&&console.log(t.step,"ROLL[]"),i.push(n),i.push(r),i.push(o)},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MAX[]",r,n),i.push(Math.max(n,r))},function(t){var i=t.stack,r=i.pop(),n=i.pop();e.DEBUG&&console.log(t.step,"MIN[]",r,n),i.push(Math.min(n,r))},function(t){var i=t.stack.pop();e.DEBUG&&console.log(t.step,"SCANTYPE[]",i)},function(t){var i=t.stack.pop(),r=t.stack.pop();switch(e.DEBUG&&console.log(t.step,"INSTCTRL[]",i,r),i){case 1:return void(t.inhibitGridFit=!!r);case 2:return void(t.ignoreCvt=!!r);default:throw new Error("invalid INSTCTRL[] selector")}},void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,ue.bind(void 0,1),ue.bind(void 0,2),ue.bind(void 0,3),ue.bind(void 0,4),ue.bind(void 0,5),ue.bind(void 0,6),ue.bind(void 0,7),ue.bind(void 0,8),ce.bind(void 0,1),ce.bind(void 0,2),ce.bind(void 0,3),ce.bind(void 0,4),ce.bind(void 0,5),ce.bind(void 0,6),ce.bind(void 0,7),ce.bind(void 0,8),pe.bind(void 0,0,0,0,0,0),pe.bind(void 0,0,0,0,0,1),pe.bind(void 0,0,0,0,0,2),pe.bind(void 0,0,0,0,0,3),pe.bind(void 0,0,0,0,1,0),pe.bind(void 0,0,0,0,1,1),pe.bind(void 0,0,0,0,1,2),pe.bind(void 0,0,0,0,1,3),pe.bind(void 0,0,0,1,0,0),pe.bind(void 0,0,0,1,0,1),pe.bind(void 0,0,0,1,0,2),pe.bind(void 0,0,0,1,0,3),pe.bind(void 0,0,0,1,1,0),pe.bind(void 0,0,0,1,1,1),pe.bind(void 0,0,0,1,1,2),pe.bind(void 0,0,0,1,1,3),pe.bind(void 0,0,1,0,0,0),pe.bind(void 0,0,1,0,0,1),pe.bind(void 0,0,1,0,0,2),pe.bind(void 0,0,1,0,0,3),pe.bind(void 0,0,1,0,1,0),pe.bind(void 0,0,1,0,1,1),pe.bind(void 0,0,1,0,1,2),pe.bind(void 0,0,1,0,1,3),pe.bind(void 0,0,1,1,0,0),pe.bind(void 0,0,1,1,0,1),pe.bind(void 0,0,1,1,0,2),pe.bind(void 0,0,1,1,0,3),pe.bind(void 0,0,1,1,1,0),pe.bind(void 0,0,1,1,1,1),pe.bind(void 0,0,1,1,1,2),pe.bind(void 0,0,1,1,1,3),pe.bind(void 0,1,0,0,0,0),pe.bind(void 0,1,0,0,0,1),pe.bind(void 0,1,0,0,0,2),pe.bind(void 0,1,0,0,0,3),pe.bind(void 0,1,0,0,1,0),pe.bind(void 0,1,0,0,1,1),pe.bind(void 0,1,0,0,1,2),pe.bind(void 0,1,0,0,1,3),pe.bind(void 0,1,0,1,0,0),pe.bind(void 0,1,0,1,0,1),pe.bind(void 0,1,0,1,0,2),pe.bind(void 0,1,0,1,0,3),pe.bind(void 0,1,0,1,1,0),pe.bind(void 0,1,0,1,1,1),pe.bind(void 0,1,0,1,1,2),pe.bind(void 0,1,0,1,1,3),pe.bind(void 0,1,1,0,0,0),pe.bind(void 0,1,1,0,0,1),pe.bind(void 0,1,1,0,0,2),pe.bind(void 0,1,1,0,0,3),pe.bind(void 0,1,1,0,1,0),pe.bind(void 0,1,1,0,1,1),pe.bind(void 0,1,1,0,1,2),pe.bind(void 0,1,1,0,1,3),pe.bind(void 0,1,1,1,0,0),pe.bind(void 0,1,1,1,0,1),pe.bind(void 0,1,1,1,0,2),pe.bind(void 0,1,1,1,0,3),pe.bind(void 0,1,1,1,1,0),pe.bind(void 0,1,1,1,1,1),pe.bind(void 0,1,1,1,1,2),pe.bind(void 0,1,1,1,1,3)];var Ui=Array.from||function(t){return t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]?|[^\uD800-\uDFFF]|./g)||[]};de.prototype.hasChar=function(t){return null!==this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyphIndex=function(t){return this.encoding.charToGlyphIndex(t)},de.prototype.charToGlyph=function(t){var e=this.charToGlyphIndex(t),i=this.glyphs.get(e);return i||(i=this.glyphs.get(0)),i},de.prototype.stringToGlyphs=function(t,e){e=e||this.defaultRenderOptions;for(var i=Ui(t),r=[],n=0;n1&&console.warn("Only the first kern subtable is supported."),t.skip("uLong");var i=255&t.parseUShort();if(t.skip("uShort"),0===i){var r=t.parseUShort();t.skip("uShort",3);for(var n=0;n1)for(var i=1;i-1?e:t}(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(i)}function c(t){var e=new FormData;return t.trim().split("&").forEach(function(t){if(t){var i=t.split("="),r=i.shift().replace(/\+/g," "),n=i.join("=").replace(/\+/g," ");e.append(decodeURIComponent(r),decodeURIComponent(n))}}),e}function p(t){var e=new n;return t.split(/\r?\n/).forEach(function(t){var i=t.split(":"),r=i.shift().trim();if(r){var n=i.join(":").trim();e.append(r,n)}}),e}function d(t,e){e||(e={}),this.type="default",this.status="status"in e?e.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new n(e.headers),this.url=e.url||"",this._initBody(t)}if(!t.fetch){var f={searchParams:"URLSearchParams"in t,iterable:"Symbol"in t&&"iterator"in Symbol,blob:"FileReader"in t&&"Blob"in t&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in t,arrayBuffer:"ArrayBuffer"in t};if(f.arrayBuffer)var m=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],y=function(t){return t&&DataView.prototype.isPrototypeOf(t)},v=ArrayBuffer.isView||function(t){return t&&m.indexOf(Object.prototype.toString.call(t))>-1};n.prototype.append=function(t,r){t=e(t),r=i(r);var n=this.map[t];this.map[t]=n?n+","+r:r},n.prototype.delete=function(t){delete this.map[e(t)]},n.prototype.get=function(t){return t=e(t),this.has(t)?this.map[t]:null},n.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},n.prototype.set=function(t,r){this.map[e(t)]=i(r)},n.prototype.forEach=function(t,e){for(var i in this.map)this.map.hasOwnProperty(i)&&t.call(e,this.map[i],i,this)},n.prototype.keys=function(){var t=[];return this.forEach(function(e,i){t.push(i)}),r(t)},n.prototype.values=function(){var t=[];return this.forEach(function(e){t.push(e)}),r(t)},n.prototype.entries=function(){var t=[];return this.forEach(function(e,i){t.push([i,e])}),r(t)},f.iterable&&(n.prototype[Symbol.iterator]=n.prototype.entries);var g=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];u.prototype.clone=function(){return new u(this,{body:this._bodyInit})},l.call(u.prototype),l.call(d.prototype),d.prototype.clone=function(){return new d(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new n(this.headers),url:this.url})},d.error=function(){var t=new d(null,{status:0,statusText:""});return t.type="error",t};var _=[301,302,303,307,308];d.redirect=function(t,e){if(-1===_.indexOf(e))throw new RangeError("Invalid status code");return new d(null,{status:e,headers:{location:t}})},t.Headers=n,t.Request=u,t.Response=d,t.fetch=function(t,e){return new Promise(function(i,r){var n=new u(t,e),o=new XMLHttpRequest;o.onload=function(){var t={status:o.status,statusText:o.statusText,headers:p(o.getAllResponseHeaders()||"")};t.url="responseURL"in o?o.responseURL:t.headers.get("X-Request-URL");var e="response"in o?o.response:o.responseText;i(new d(e,t))},o.onerror=function(){r(new TypeError("Network request failed"))},o.ontimeout=function(){r(new TypeError("Network request failed"))},o.open(n.method,n.url,!0),"include"===n.credentials&&(o.withCredentials=!0),"responseType"in o&&f.blob&&(o.responseType="blob"),n.headers.forEach(function(t,e){o.setRequestHeader(e,t)}),o.send(void 0===n._bodyInit?null:n._bodyInit)})},t.fetch.polyfill=!0}}("undefined"!=typeof self?self:this)},{}],13:[function(t,e,i){"use strict";var r=t("./core/main");t("./core/constants"),t("./core/environment"),t("./core/error_helpers"),t("./core/helpers"),t("./core/legacy"),t("./core/p5.Element"),t("./core/p5.Graphics"),t("./core/p5.Renderer"),t("./core/p5.Renderer2D"),t("./core/rendering"),t("./core/shim"),t("./core/structure"),t("./core/transform"),t("./core/shape/2d_primitives"),t("./core/shape/attributes"),t("./core/shape/curves"),t("./core/shape/vertex"),t("./color/color_conversion"),t("./color/creating_reading"),t("./color/p5.Color"),t("./color/setting"),t("./data/p5.TypedDict"),t("./events/acceleration"),t("./events/keyboard"),t("./events/mouse"),t("./events/touch"),t("./image/filters"),t("./image/image"),t("./image/loading_displaying"),t("./image/p5.Image"),t("./image/pixels"),t("./io/files"),t("./io/p5.Table"),t("./io/p5.TableRow"),t("./io/p5.XML"),t("./math/calculation"),t("./math/math"),t("./math/noise"),t("./math/p5.Vector"),t("./math/random"),t("./math/trigonometry"),t("./typography/attributes"),t("./typography/loading_displaying"),t("./typography/p5.Font"),t("./utilities/array_functions"),t("./utilities/conversion"),t("./utilities/string_functions"),t("./utilities/time_date"),t("./webgl/3d_primitives"),t("./webgl/interaction"),t("./webgl/light"),t("./webgl/loading"),t("./webgl/material"),t("./webgl/p5.Camera"),t("./webgl/p5.Geometry"),t("./webgl/p5.Matrix"),t("./webgl/p5.RendererGL.Immediate"),t("./webgl/p5.RendererGL"),t("./webgl/p5.RendererGL.Retained"),t("./webgl/p5.Shader"),t("./webgl/p5.Texture"),t("./webgl/text"),t("./core/init"),e.exports=r},{"./color/color_conversion":14,"./color/creating_reading":15,"./color/p5.Color":16,"./color/setting":17,"./core/constants":18,"./core/environment":19,"./core/error_helpers":20,"./core/helpers":21,"./core/init":22,"./core/legacy":23,"./core/main":24,"./core/p5.Element":25,"./core/p5.Graphics":26,"./core/p5.Renderer":27,"./core/p5.Renderer2D":28,"./core/rendering":29,"./core/shape/2d_primitives":30,"./core/shape/attributes":31,"./core/shape/curves":32,"./core/shape/vertex":33,"./core/shim":34,"./core/structure":35,"./core/transform":36,"./data/p5.TypedDict":37,"./events/acceleration":38,"./events/keyboard":39,"./events/mouse":40,"./events/touch":41,"./image/filters":42,"./image/image":43,"./image/loading_displaying":44,"./image/p5.Image":45,"./image/pixels":46,"./io/files":47,"./io/p5.Table":48,"./io/p5.TableRow":49,"./io/p5.XML":50,"./math/calculation":51,"./math/math":52,"./math/noise":53,"./math/p5.Vector":54,"./math/random":55,"./math/trigonometry":56,"./typography/attributes":57,"./typography/loading_displaying":58,"./typography/p5.Font":59,"./utilities/array_functions":60,"./utilities/conversion":61,"./utilities/string_functions":62,"./utilities/time_date":63,"./webgl/3d_primitives":64,"./webgl/interaction":65,"./webgl/light":66,"./webgl/loading":67,"./webgl/material":68,"./webgl/p5.Camera":69,"./webgl/p5.Geometry":70,"./webgl/p5.Matrix":71,"./webgl/p5.RendererGL":74,"./webgl/p5.RendererGL.Immediate":72,"./webgl/p5.RendererGL.Retained":73,"./webgl/p5.Shader":75,"./webgl/p5.Texture":76,"./webgl/text":77}],14:[function(t,e,i){"use strict";var r=t("../core/main");r.ColorConversion={},r.ColorConversion._hsbaToHSLA=function(t){var e=t[0],i=t[1],r=t[2],n=(2-i)*r/2;return 0!==n&&(1===n?i=0:n<.5?i/=2-i:i=i*r/(2-2*n)),[e,i,n,t[3]]},r.ColorConversion._hsbaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s,a,h=Math.floor(e),l=r*(1-i),u=r*(1-i*(e-h)),c=r*(1-i*(1+h-e));1===h?(o=u,s=r,a=l):2===h?(o=l,s=r,a=c):3===h?(o=l,s=u,a=r):4===h?(o=c,s=l,a=r):5===h?(o=r,s=l,a=u):(o=r,s=c,a=l),n=[o,s,a,t[3]]}return n},r.ColorConversion._hslaToHSBA=function(t){var e,i=t[0],r=t[1],n=t[2];return[i,r=2*((e=n<.5?(1+r)*n:n+r-n*r)-n)/e,e,t[3]]},r.ColorConversion._hslaToRGBA=function(t){var e=6*t[0],i=t[1],r=t[2],n=[];if(0===i)n=[r,r,r,t[3]];else{var o,s=2*r-(o=r<.5?(1+i)*r:r+i-r*i),a=function(t,e,i){return t<0?t+=6:t>=6&&(t-=6),t<1?e+(i-e)*t:t<3?i:t<4?e+(i-e)*(4-t):e};n=[a(e+2,s,o),a(e,s,o),a(e-2,s,o),t[3]]}return n},r.ColorConversion._rgbaToHSBA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=s-Math.min(r,n,o);return 0===a?(e=0,i=0):(i=a/s,r===s?e=(n-o)/a:n===s?e=2+(o-r)/a:o===s&&(e=4+(r-n)/a),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,s,t[3]]},r.ColorConversion._rgbaToHSLA=function(t){var e,i,r=t[0],n=t[1],o=t[2],s=Math.max(r,n,o),a=Math.min(r,n,o),h=s+a,l=s-a;return 0===l?(e=0,i=0):(i=h<1?l/h:l/(2-h),r===s?e=(n-o)/l:n===s?e=2+(o-r)/l:o===s&&(e=4+(r-n)/l),e<0?e+=6:e>=6&&(e-=6)),[e/6,i,h/2,t[3]]},e.exports=r.ColorConversion},{"../core/main":24}],15:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),t("../core/error_helpers"),r.prototype.alpha=function(t){return r._validateParameters("alpha",arguments),this.color(t)._getAlpha()},r.prototype.blue=function(t){return r._validateParameters("blue",arguments),this.color(t)._getBlue()},r.prototype.brightness=function(t){return r._validateParameters("brightness",arguments),this.color(t)._getBrightness()},r.prototype.color=function(){if(r._validateParameters("color",arguments),arguments[0]instanceof r.Color)return arguments[0];var t=arguments[0]instanceof Array?arguments[0]:arguments;return new r.Color(this,t)},r.prototype.green=function(t){return r._validateParameters("green",arguments),this.color(t)._getGreen()},r.prototype.hue=function(t){return r._validateParameters("hue",arguments),this.color(t)._getHue()},r.prototype.lerpColor=function(t,e,i){r._validateParameters("lerpColor",arguments);var o,s,a,h,l,u,c=this._colorMode,p=this._colorMaxes;if(c===n.RGB)l=t.levels.map(function(t){return t/255}),u=e.levels.map(function(t){return t/255});else if(c===n.HSB)t._getBrightness(),e._getBrightness(),l=t.hsba,u=e.hsba;else{if(c!==n.HSL)throw new Error(c+"cannot be used for interpolation.");t._getLightness(),e._getLightness(),l=t.hsla,u=e.hsla}return i=Math.max(Math.min(i,1),0),void 0===this.lerp&&(this.lerp=function(t,e,i){return i*(e-t)+t}),o=this.lerp(l[0],u[0],i),s=this.lerp(l[1],u[1],i),a=this.lerp(l[2],u[2],i),h=this.lerp(l[3],u[3],i),o*=p[c][0],s*=p[c][1],a*=p[c][2],h*=p[c][3],this.color(o,s,a,h)},r.prototype.lightness=function(t){return r._validateParameters("lightness",arguments),this.color(t)._getLightness()},r.prototype.red=function(t){return r._validateParameters("red",arguments),this.color(t)._getRed()},r.prototype.saturation=function(t){return r._validateParameters("saturation",arguments),this.color(t)._getSaturation()},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"./p5.Color":16}],16:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("./color_conversion");r.Color=function(t,e){if(this._storeModeAndMaxes(t._colorMode,t._colorMaxes),this.mode!==n.RGB&&this.mode!==n.HSL&&this.mode!==n.HSB)throw new Error(this.mode+" is an invalid colorMode.");return this._array=r.Color._parseInputs.apply(this,e),this._calculateLevels(),this},r.Color.prototype.toString=function(t){this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsla||(this.hsla=o._rgbaToHSLA(this._array));var e=this.levels,i=this._array,r=i[3];switch(t){case"#rrggbb":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16));case"#rrggbbaa":return"#".concat(e[0]<16?"0".concat(e[0].toString(16)):e[0].toString(16),e[1]<16?"0".concat(e[1].toString(16)):e[1].toString(16),e[2]<16?"0".concat(e[2].toString(16)):e[2].toString(16),e[3]<16?"0".concat(e[2].toString(16)):e[3].toString(16));case"#rgb":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16));case"#rgba":return"#".concat(Math.round(15*i[0]).toString(16),Math.round(15*i[1]).toString(16),Math.round(15*i[2]).toString(16),Math.round(15*i[3]).toString(16));case"rgb":return"rgb(".concat(e[0],", ",e[1],", ",e[2],")");case"rgb%":return"rgb(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%)");case"rgba%":return"rgba(".concat((100*i[0]).toPrecision(3),"%, ",(100*i[1]).toPrecision(3),"%, ",(100*i[2]).toPrecision(3),"%, ",(100*i[3]).toPrecision(3),"%)");case"hsb":case"hsv":return"hsb(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],")");case"hsb%":case"hsv%":return"hsb(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%)");case"hsba":case"hsva":return"hsba(".concat(this.hsba[0]*this.maxes[n.HSB][0],", ",this.hsba[1]*this.maxes[n.HSB][1],", ",this.hsba[2]*this.maxes[n.HSB][2],", ",r,")");case"hsba%":case"hsva%":return"hsba(".concat((100*this.hsba[0]).toPrecision(3),"%, ",(100*this.hsba[1]).toPrecision(3),"%, ",(100*this.hsba[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"hsl":return"hsl(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],")");case"hsl%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%)");case"hsla":return"hsla(".concat(this.hsla[0]*this.maxes[n.HSL][0],", ",this.hsla[1]*this.maxes[n.HSL][1],", ",this.hsla[2]*this.maxes[n.HSL][2],", ",r,")");case"hsla%":return"hsl(".concat((100*this.hsla[0]).toPrecision(3),"%, ",(100*this.hsla[1]).toPrecision(3),"%, ",(100*this.hsla[2]).toPrecision(3),"%, ",(100*r).toPrecision(3),"%)");case"rgba":default:return"rgba("+e[0]+","+e[1]+","+e[2]+","+r+")"}},r.Color.prototype.setRed=function(t){this._array[0]=t/this.maxes[n.RGB][0],this._calculateLevels()},r.Color.prototype.setGreen=function(t){this._array[1]=t/this.maxes[n.RGB][1],this._calculateLevels()},r.Color.prototype.setBlue=function(t){this._array[2]=t/this.maxes[n.RGB][2],this._calculateLevels()},r.Color.prototype.setAlpha=function(t){this._array[3]=t/this.maxes[this.mode][3],this._calculateLevels()},r.Color.prototype._calculateLevels=function(){for(var t=this._array,e=this.levels=new Array(t.length),i=t.length-1;i>=0;--i)e[i]=Math.round(255*t[i])},r.Color.prototype._getAlpha=function(){return this._array[3]*this.maxes[this.mode][3]},r.Color.prototype._storeModeAndMaxes=function(t,e){this.mode=t,this.maxes=e},r.Color.prototype._getMode=function(){return this.mode},r.Color.prototype._getMaxes=function(){return this.maxes},r.Color.prototype._getBlue=function(){return this._array[2]*this.maxes[n.RGB][2]},r.Color.prototype._getBrightness=function(){return this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[2]*this.maxes[n.HSB][2]},r.Color.prototype._getGreen=function(){return this._array[1]*this.maxes[n.RGB][1]},r.Color.prototype._getHue=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[0]*this.maxes[n.HSB][0]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[0]*this.maxes[n.HSL][0])},r.Color.prototype._getLightness=function(){return this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[2]*this.maxes[n.HSL][2]},r.Color.prototype._getRed=function(){return this._array[0]*this.maxes[n.RGB][0]},r.Color.prototype._getSaturation=function(){return this.mode===n.HSB?(this.hsba||(this.hsba=o._rgbaToHSBA(this._array)),this.hsba[1]*this.maxes[n.HSB][1]):(this.hsla||(this.hsla=o._rgbaToHSLA(this._array)),this.hsla[1]*this.maxes[n.HSL][1])};var s={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},a=/\s*/,h=/(\d{1,3})/,l=/((?:\d+(?:\.\d+)?)|(?:\.\d+))/,u=new RegExp(l.source+"%"),c={HEX3:/^#([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX4:/^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i,HEX6:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,HEX8:/^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,RGB:new RegExp(["^rgb\\(",h.source,",",h.source,",",h.source,"\\)$"].join(a.source),"i"),RGB_PERCENT:new RegExp(["^rgb\\(",u.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),RGBA:new RegExp(["^rgba\\(",h.source,",",h.source,",",h.source,",",l.source,"\\)$"].join(a.source),"i"),RGBA_PERCENT:new RegExp(["^rgba\\(",u.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSL:new RegExp(["^hsl\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSLA:new RegExp(["^hsla\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i"),HSB:new RegExp(["^hsb\\(",h.source,",",u.source,",",u.source,"\\)$"].join(a.source),"i"),HSBA:new RegExp(["^hsba\\(",h.source,",",u.source,",",u.source,",",l.source,"\\)$"].join(a.source),"i")};r.Color._parseInputs=function(t,e,i,a){var h,l=arguments.length,u=this.mode,p=this.maxes[u],d=[];if(l>=3){for(d[0]=t/p[0],d[1]=e/p[1],d[2]=i/p[2],d[3]="number"==typeof a?a/p[3]:1,h=d.length-1;h>=0;--h){var f=d[h];f<0?d[h]=0:f>1&&(d[h]=1)}return u===n.HSL?o._hslaToRGBA(d):u===n.HSB?o._hsbaToRGBA(d):d}if(1===l&&"string"==typeof t){var m=t.trim().toLowerCase();if(s[m])return r.Color._parseInputs.call(this,s[m]);if(c.HEX3.test(m))return(d=c.HEX3.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255}))[3]=1,d;if(c.HEX6.test(m))return(d=c.HEX6.exec(m).slice(1).map(function(t){return parseInt(t,16)/255}))[3]=1,d;if(c.HEX4.test(m))return d=c.HEX4.exec(m).slice(1).map(function(t){return parseInt(t+t,16)/255});if(c.HEX8.test(m))return d=c.HEX8.exec(m).slice(1).map(function(t){return parseInt(t,16)/255});if(c.RGB.test(m))return(d=c.RGB.exec(m).slice(1).map(function(t){return t/255}))[3]=1,d;if(c.RGB_PERCENT.test(m))return(d=c.RGB_PERCENT.exec(m).slice(1).map(function(t){return parseFloat(t)/100}))[3]=1,d;if(c.RGBA.test(m))return d=c.RGBA.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):t/255});if(c.RGBA_PERCENT.test(m))return d=c.RGBA_PERCENT.exec(m).slice(1).map(function(t,e){return 3===e?parseFloat(t):parseFloat(t)/100});if(c.HSL.test(m)?(d=c.HSL.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSLA.test(m)&&(d=c.HSLA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),(d=d.map(function(t){return Math.max(Math.min(t,1),0)})).length)return o._hslaToRGBA(d);if(c.HSB.test(m)?(d=c.HSB.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:parseInt(t,10)/100}))[3]=1:c.HSBA.test(m)&&(d=c.HSBA.exec(m).slice(1).map(function(t,e){return 0===e?parseInt(t,10)/360:3===e?parseFloat(t):parseInt(t,10)/100})),d.length){for(h=d.length-1;h>=0;--h)d[h]=Math.max(Math.min(d[h],1),0);return o._hsbaToRGBA(d)}d=[1,1,1,1]}else{if(1!==l&&2!==l||"number"!=typeof t)throw new Error(arguments+"is not a valid color representation.");d[0]=t/p[2],d[1]=t/p[2],d[2]=t/p[2],d[3]="number"==typeof e?e/p[3]:1,d=d.map(function(t){return Math.max(Math.min(t,1),0)})}return d},e.exports=r.Color},{"../core/constants":18,"../core/main":24,"./color_conversion":14}],17:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Color"),r.prototype.background=function(){return arguments[0]instanceof r.Image?this.image(arguments[0],0,0,this.width,this.height):this._renderer.background.apply(this._renderer,arguments),this},r.prototype.clear=function(){return this._renderer.clear(),this},r.prototype.colorMode=function(t,e,i,o,s){if(r._validateParameters("colorMode",arguments),t===n.RGB||t===n.HSB||t===n.HSL){this._colorMode=t;var a=this._colorMaxes[t];2===arguments.length?(a[0]=e,a[1]=e,a[2]=e,a[3]=e):4===arguments.length?(a[0]=e,a[1]=i,a[2]=o):5===arguments.length&&(a[0]=e,a[1]=i,a[2]=o,a[3]=s)}return this},r.prototype.fill=function(){return this._renderer._setProperty("_fillSet",!0),this._renderer._setProperty("_doFill",!0),this._renderer.fill.apply(this._renderer,arguments),this},r.prototype.noFill=function(){return this._renderer._setProperty("_doFill",!1),this},r.prototype.noStroke=function(){return this._renderer._setProperty("_doStroke",!1),this},r.prototype.stroke=function(){return this._renderer._setProperty("_strokeSet",!0),this._renderer._setProperty("_doStroke",!0),this._renderer.stroke.apply(this._renderer,arguments),this},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Color":16}],18:[function(t,e,i){"use strict";var r=Math.PI;e.exports={P2D:"p2d",WEBGL:"webgl",ARROW:"default",CROSS:"crosshair",HAND:"pointer",MOVE:"move",TEXT:"text",WAIT:"wait",HALF_PI:r/2,PI:r,QUARTER_PI:r/4,TAU:2*r,TWO_PI:2*r,DEGREES:"degrees",RADIANS:"radians",DEG_TO_RAD:r/180,RAD_TO_DEG:180/r,CORNER:"corner",CORNERS:"corners",RADIUS:"radius",RIGHT:"right",LEFT:"left",CENTER:"center",TOP:"top",BOTTOM:"bottom",BASELINE:"alphabetic",POINTS:0,LINES:1,LINE_STRIP:3,LINE_LOOP:2,TRIANGLES:4,TRIANGLE_FAN:6,TRIANGLE_STRIP:5,QUADS:"quads",QUAD_STRIP:"quad_strip",CLOSE:"close",OPEN:"open",CHORD:"chord",PIE:"pie",PROJECT:"square",SQUARE:"butt",ROUND:"round",BEVEL:"bevel",MITER:"miter",RGB:"rgb",HSB:"hsb",HSL:"hsl",AUTO:"auto",ALT:18,BACKSPACE:8,CONTROL:17,DELETE:46,DOWN_ARROW:40,ENTER:13,ESCAPE:27,LEFT_ARROW:37,OPTION:18,RETURN:13,RIGHT_ARROW:39,SHIFT:16,TAB:9,UP_ARROW:38,BLEND:"source-over",ADD:"lighter",DARKEST:"darken",LIGHTEST:"lighten",DIFFERENCE:"difference",EXCLUSION:"exclusion",MULTIPLY:"multiply",SCREEN:"screen",REPLACE:"copy",OVERLAY:"overlay",HARD_LIGHT:"hard-light",SOFT_LIGHT:"soft-light",DODGE:"color-dodge",BURN:"color-burn",THRESHOLD:"threshold",GRAY:"gray",OPAQUE:"opaque",INVERT:"invert",POSTERIZE:"posterize",DILATE:"dilate",ERODE:"erode",BLUR:"blur",NORMAL:"normal",ITALIC:"italic",BOLD:"bold",_DEFAULT_TEXT_FILL:"#000000",_DEFAULT_LEADMULT:1.25,_CTX_MIDDLE:"middle",LINEAR:"linear",QUADRATIC:"quadratic",BEZIER:"bezier",CURVE:"curve",STROKE:"stroke",FILL:"fill",TEXTURE:"texture",IMMEDIATE:"immediate",NEAREST:"nearest",REPEAT:"repeat",CLAMP:"clamp",MIRROR:"mirror",LANDSCAPE:"landscape",PORTRAIT:"portrait",_DEFAULT_STROKE:"#000000",_DEFAULT_FILL:"#FFFFFF",GRID:"grid",AXES:"axes"}},{}],19:[function(t,e,i){"use strict";function r(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth||0}function n(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight||0}var o=t("./main"),s=t("./constants"),a=[s.ARROW,s.CROSS,s.HAND,s.MOVE,s.TEXT,s.WAIT];o.prototype._frameRate=0,o.prototype._lastFrameTime=window.performance.now(),o.prototype._targetFrameRate=60;var h=window.print;o.prototype.print=function(){arguments.length?console.log.apply(console,arguments):h()},o.prototype.frameCount=0,o.prototype.focused=document.hasFocus(),o.prototype.cursor=function(t,e,i){var r="auto",n=this._curElement.elt;if(a.indexOf(t)>-1)r=t;else if("string"==typeof t){var o="";e&&i&&"number"==typeof e&&"number"==typeof i&&(o=e+" "+i),r="http://"===t.substring(0,7)||"https://"===t.substring(0,8)?"url("+t+") "+o+", auto":/\.(cur|jpg|jpeg|gif|png|CUR|JPG|JPEG|GIF|PNG)$/.test(t)?"url("+t+") "+o+", auto":t}n.style.cursor=r},o.prototype.frameRate=function(t){return o._validateParameters("frameRate",arguments),"number"!=typeof t||t<0?this._frameRate:(this._setProperty("_targetFrameRate",t),this._runFrames(),this)},o.prototype.getFrameRate=function(){return this.frameRate()},o.prototype.setFrameRate=function(t){return this.frameRate(t)},o.prototype.noCursor=function(){this._curElement.elt.style.cursor="none"},o.prototype.displayWidth=screen.width,o.prototype.displayHeight=screen.height,o.prototype.windowWidth=r(),o.prototype.windowHeight=n(),o.prototype._onresize=function(t){this._setProperty("windowWidth",r()),this._setProperty("windowHeight",n());var e,i=this._isGlobal?window:this;"function"==typeof i.windowResized&&(void 0===(e=i.windowResized(t))||e||t.preventDefault())},o.prototype.width=0,o.prototype.height=0,o.prototype.fullscreen=function(t){if(o._validateParameters("fullscreen",arguments),void 0===t)return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;t?function(t){if(!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled))throw new Error("Fullscreen not enabled in this browser.");t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.msRequestFullscreen&&t.msRequestFullscreen()}(document.documentElement):document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.msExitFullscreen&&document.msExitFullscreen()},o.prototype.pixelDensity=function(t){var e;return o._validateParameters("pixelDensity",arguments),"number"==typeof t?(t!==this._pixelDensity&&(this._pixelDensity=t,this._pixelsDirty=!0),e=this,this.resizeCanvas(this.width,this.height,!0)):e=this._pixelDensity,e},o.prototype.displayDensity=function(){return window.devicePixelRatio},o.prototype.getURL=function(){return location.href},o.prototype.getURLPath=function(){return location.pathname.split("/").filter(function(t){return""!==t})},o.prototype.getURLParams=function(){for(var t,e=/[?&]([^&=]+)(?:[&=])([^&=]+)/gim,i={};null!=(t=e.exec(location.search));)t.index===e.lastIndex&&e.lastIndex++,i[t[1]]=t[2];return i},e.exports=o},{"./constants":18,"./main":24}],20:[function(t,e,i){"use strict";var r=t("./main");t("./constants"),r._validateParameters=r._friendlyFileLoadError=function(){};var n=null,o=function(){var e={},i=function(t){return Object.getOwnPropertyNames(t).filter(function(t){return!("_"===t[0]||t in e||(e[t]=!0,0))}).map(function(e){var i;return i="function"==typeof t[e]?"function":e===e.toUpperCase()?"constant":"variable",{name:e,type:i}})};(n=[].concat(i(r.prototype),i(t("./constants")))).sort(function(t,e){return e.name.length-t.name.length})},s=function(t,e){e||(e=console.log.bind(console)),n||o(),n.some(function(i){if(t.message&&null!==t.message.match("\\W?"+i.name+"\\W"))return e("Did you just try to use p5.js's "+i.name+("function"===i.type?"() ":" ")+i.type+"? If so, you may want to move it into your sketch's setup() function.\n\nFor more details, see: https://github.com/processing/p5.js/wiki/p5.js-overview#why-cant-i-assign-variables-using-p5-functions-and-variables-before-setup"),!0})};r.prototype._helpForMisusedAtTopLevelCode=s,"complete"!==document.readyState&&(window.addEventListener("error",s,!1),window.addEventListener("load",function(){window.removeEventListener("error",s,!1)})),e.exports=r},{"../../docs/reference/data.json":void 0,"./constants":18,"./main":24}],21:[function(t,e,i){"use strict";var r=t("./constants");e.exports={modeAdjust:function(t,e,i,n,o){return o===r.CORNER?{x:t,y:e,w:i,h:n}:o===r.CORNERS?{x:t,y:e,w:i-t,h:n-e}:o===r.RADIUS?{x:t-i,y:e-n,w:2*i,h:2*n}:o===r.CENTER?{x:t-.5*i,y:e-.5*n,w:i,h:n}:void 0}}},{"./constants":18}],22:[function(t,e,i){"use strict";var r=t("../core/main"),n=function(){window.mocha||(window.setup&&"function"==typeof window.setup||window.draw&&"function"==typeof window.draw)&&!r.instance&&new r};"complete"===document.readyState?n():window.addEventListener("load",n,!1)},{"../core/main":24}],23:[function(t,e,i){"use strict";var r=t("./main");r.prototype.exit=function(){throw new Error("exit() not implemented, see remove()")},r.prototype.pushStyle=function(){throw new Error("pushStyle() not used, see push()")},r.prototype.popStyle=function(){throw new Error("popStyle() not used, see pop()")},r.prototype.size=function(){var t="size() is not a valid p5 function, to set the size of the ";throw new Error(t+="drawing canvas, please use createCanvas() instead")},e.exports=r},{"./main":24}],24:[function(t,e,i){"use strict";t("./shim");var r=t("./constants"),n=function(t,e,i){"boolean"==typeof e&&void 0===i&&(i=e,e=void 0),this._setupDone=!1,this._pixelDensity=Math.ceil(window.devicePixelRatio)||1,this._userNode=e,this._curElement=null,this._elements=[],this._requestAnimId=0,this._preloadCount=0,this._isGlobal=!1,this._loop=!0,this._initializeInstanceVariables(),this._defaultCanvasSize={width:100,height:100},this._events={mousemove:null,mousedown:null,mouseup:null,dragend:null,dragover:null,click:null,dblclick:null,mouseover:null,mouseout:null,keydown:null,keyup:null,keypress:null,touchstart:null,touchmove:null,touchend:null,resize:null,blur:null},this._events.wheel=null,this._loadingScreenId="p5_loading",this._registeredMethods={};for(var r=Object.getOwnPropertyNames(n.prototype._registeredMethods),o=0;o=i-5)&&(this.redraw(),this._frameRate=1e3/(t-this._lastFrameTime),this._lastFrameTime=t,void 0!==this._updateMouseCoords&&this._updateMouseCoords()),this._loop&&(this._requestAnimId=window.requestAnimationFrame(this._draw))}.bind(this),this._runFrames=function(){this._updateInterval&&clearInterval(this._updateInterval)}.bind(this),this._setProperty=function(t,e){this[t]=e,this._isGlobal&&(window[t]=e)}.bind(this),this.remove=function(){var t=document.getElementById(this._loadingScreenId);if(t&&(t.parentNode.removeChild(t),this._incrementPreload()),this._curElement){for(var e in this._loop=!1,this._requestAnimId&&window.cancelAnimationFrame(this._requestAnimId),this._events)window.removeEventListener(e,this._events[e]);for(var i=0;i-1?o.readAsText(n):o.readAsDataURL(n)}},this)):console.log("The File APIs are not fully supported in this browser."),this},s.Element.prototype._setProperty=function(t,e){this[t]=e},e.exports=s.Element},{"./main":24}],26:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");r.Graphics=function(t,e,i,o){var s=i||n.P2D;for(var a in this.canvas=document.createElement("canvas"),(o._userNode||document.body).appendChild(this.canvas),r.Element.call(this,this.canvas,o,!1),r.prototype)this[a]||("function"==typeof r.prototype[a]?this[a]=r.prototype[a].bind(this):this[a]=r.prototype[a]);return r.prototype._initializeInstanceVariables.apply(this),this.width=t,this.height=e,this._pixelDensity=o._pixelDensity,s===n.WEBGL?this._renderer=new r.RendererGL(this.canvas,this,!1):this._renderer=new r.Renderer2D(this.canvas,this,!1),o._elements.push(this),this._renderer.resize(t,e),this._renderer._applyDefaults(),this},r.Graphics.prototype=Object.create(r.Element.prototype),r.Graphics.prototype.remove=function(){this.elt.parentNode&&this.elt.parentNode.removeChild(this.elt);var t=this._pInst._elements.indexOf(this);for(var e in-1!==t&&this._pInst._elements.splice(t,1),this._events)this.elt.removeEventListener(e,this._events[e])},e.exports=r.Graphics},{"./constants":18,"./main":24}],27:[function(t,e,i){"use strict";function r(t){var e=0,i=0;if(t.offsetParent)do{e+=t.offsetLeft,i+=t.offsetTop}while(t=t.offsetParent);else e+=t.offsetLeft,i+=t.offsetTop;return[e,i]}var n=t("./main"),o=t("../core/constants");n.Renderer=function(t,e,i){n.Element.call(this,t,e),this.canvas=t,i?(this._isMainCanvas=!0,this._pInst._setProperty("_curElement",this),this._pInst._setProperty("canvas",this.canvas),this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height)):(this.canvas.style.display="none",this._styles=[]),this._textSize=12,this._textLeading=15,this._textFont="sans-serif",this._textStyle=o.NORMAL,this._textAscent=null,this._textDescent=null,this._textAlign=o.LEFT,this._textBaseline=o.BASELINE,this._rectMode=o.CORNER,this._ellipseMode=o.CENTER,this._curveTightness=0,this._imageMode=o.CORNER,this._tint=null,this._doStroke=!0,this._doFill=!0,this._strokeSet=!1,this._fillSet=!1},n.Renderer.prototype=Object.create(n.Element.prototype),n.Renderer.prototype.push=function(){return{properties:{_doStroke:this._doStroke,_strokeSet:this._strokeSet,_doFill:this._doFill,_fillSet:this._fillSet,_tint:this._tint,_imageMode:this._imageMode,_rectMode:this._rectMode,_ellipseMode:this._ellipseMode,_textFont:this._textFont,_textLeading:this._textLeading,_textSize:this._textSize,_textAlign:this._textAlign,_textBaseline:this._textBaseline,_textStyle:this._textStyle}}},n.Renderer.prototype.pop=function(t){t.properties&&Object.assign(this,t.properties)},n.Renderer.prototype.resize=function(t,e){this.width=t,this.height=e,this.elt.width=t*this._pInst._pixelDensity,this.elt.height=e*this._pInst._pixelDensity,this.elt.style.width=t+"px",this.elt.style.height=e+"px",this._isMainCanvas&&(this._pInst._setProperty("width",this.width),this._pInst._setProperty("height",this.height))},n.Renderer.prototype.textLeading=function(t){return"number"==typeof t?(this._setProperty("_textLeading",t),this._pInst):this._textLeading},n.Renderer.prototype.textSize=function(t){return"number"==typeof t?(this._setProperty("_textSize",t),this._setProperty("_textLeading",t*o._DEFAULT_LEADMULT),this._applyTextProperties()):this._textSize},n.Renderer.prototype.textStyle=function(t){return t?(t!==o.NORMAL&&t!==o.ITALIC&&t!==o.BOLD||this._setProperty("_textStyle",t),this._applyTextProperties()):this._textStyle},n.Renderer.prototype.textAscent=function(){return null===this._textAscent&&this._updateTextMetrics(),this._textAscent},n.Renderer.prototype.textDescent=function(){return null===this._textDescent&&this._updateTextMetrics(),this._textDescent},n.Renderer.prototype.textAlign=function(t,e){return void 0!==t?(this._setProperty("_textAlign",t),void 0!==e&&this._setProperty("_textBaseline",e),this._applyTextProperties()):{horizontal:this._textAlign,vertical:this._textBaseline}},n.Renderer.prototype.text=function(t,e,i,r,n){var s,a,h,l,u,c,p,d,f=this._pInst,m=Number.MAX_VALUE;if((this._doFill||this._doStroke)&&void 0!==t){if("string"!=typeof t&&(t=t.toString()),t=t.replace(/(\t)/g," "),s=t.split("\n"),void 0!==r){for(d=0,h=0;hr?(u=p[a]+" ",d+=f.textLeading()):u=c;switch(this._rectMode===o.CENTER&&(e-=r/2,i-=n/2),this._textAlign){case o.CENTER:e+=r/2;break;case o.RIGHT:e+=r}var y=!1;if(void 0!==n){switch(this._textBaseline){case o.BOTTOM:i+=n-d;break;case o.CENTER:i+=(n-d)/2;break;case o.BASELINE:y=!0,this._textBaseline=o.TOP}m=i+n-f.textAscent()}for(h=0;hr&&u.length>0?(this._renderText(f,u,e,i,m),u=p[a]+" ",i+=f.textLeading()):u=c;this._renderText(f,u,e,i,m),i+=f.textLeading(),y&&(this._textBaseline=o.BASELINE)}}else{var v=0,g=f.textAlign().vertical;for(g===o.CENTER?v=(s.length-1)*f.textLeading()/2:g===o.BOTTOM&&(v=(s.length-1)*f.textLeading()),l=0;l0&&(c=u.width/t.width),this.drawingContext.drawImage(u,c*e,c*i,c*n,c*o,s,a,h,l)}catch(t){if("NS_ERROR_NOT_AVAILABLE"!==t.name)throw t}this._pInst._pixelsDirty=!0},r.Renderer2D.prototype._getTintedImageCanvas=function(t){if(!t.canvas)return t;var e=o._toPixels(t.canvas),i=document.createElement("canvas");i.width=t.canvas.width,i.height=t.canvas.height;for(var r=i.getContext("2d"),n=r.createImageData(t.canvas.width,t.canvas.height),s=n.data,a=0;a=this.width||e>=this.height)return[0,0,0,255];var o=this._pInst||this,s=o._pixelDensity;t=Math.floor(t),e=Math.floor(e),i=Math.floor(i),n=Math.floor(n);var a,h,l=t*s,u=e*s;if(1!==i||1!==n||this instanceof r.RendererGL){var c=Math.min(i,o.width),p=Math.min(n,o.height),d=c*s,f=p*s,m=new r.Image(c,p);return m.canvas.getContext("2d").drawImage(this.canvas,l,u,d,f,0,0,c,p),m}return o._pixelsDirty?(a=this.drawingContext.getImageData(l,u,1,1).data,h=0):(a=o.pixels,h=4*(l+u*this.width*s)),[a[h+0],a[h+1],a[h+2],a[h+3]]},r.Renderer2D.prototype.loadPixels=function(){var t=this._pInst||this;if(t._pixelsDirty){t._pixelsDirty=!1;var e=t._pixelDensity,i=this.width*e,r=this.height*e,n=this.drawingContext.getImageData(0,0,i,r);t._setProperty("imageData",n),t._setProperty("pixels",n.data)}},r.Renderer2D.prototype.set=function(t,e,i){t=Math.floor(t),e=Math.floor(e);var n=this._pInst||this;if(i instanceof r.Image)this.drawingContext.save(),this.drawingContext.setTransform(1,0,0,1,0,0),this.drawingContext.scale(n._pixelDensity,n._pixelDensity),this.drawingContext.drawImage(i.canvas,t,e),this.drawingContext.restore(),n._pixelsDirty=!0;else{var o=0,s=0,a=0,h=0,l=4*(e*n._pixelDensity*(this.width*n._pixelDensity)+t*n._pixelDensity);if(n.imageData&&!n._pixelsDirty||n.loadPixels.call(n),"number"==typeof i)l1e-5;)c=Math.min(s-o,n.HALF_PI),p.push(this._acuteArcToBezier(o,c)),o+=c;return this._doFill&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a!==n.PIE&&null!=a||h.lineTo(t,e),h.closePath(),h.fill()),this._doStroke&&(h.beginPath(),p.forEach(function(i,r){0===r&&h.moveTo(t+i.ax*l,e+i.ay*u),h.bezierCurveTo(t+i.bx*l,e+i.by*u,t+i.cx*l,e+i.cy*u,t+i.dx*l,e+i.dy*u)}),a===n.PIE?(h.lineTo(t,e),h.closePath()):a===n.CHORD&&h.closePath(),h.stroke()),this},r.Renderer2D.prototype.ellipse=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;var l=.5522847498,u=a/2*l,c=h/2*l,p=n+a,d=o+h,f=n+a/2,m=o+h/2;e.beginPath(),e.moveTo(n,m),e.bezierCurveTo(n,m-c,f-u,o,f,o),e.bezierCurveTo(f+u,o,p,m-c,p,m),e.bezierCurveTo(p,m+c,f+u,d,f,d),e.bezierCurveTo(f-u,d,n,m+c,n,m),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.line=function(t,e,i,r){var n=this.drawingContext;return this._doStroke?this._getStroke()===s?this:(n.lineWidth%2==1&&n.translate(.5,.5),n.beginPath(),n.moveTo(t,e),n.lineTo(i,r),n.stroke(),n.lineWidth%2==1&&n.translate(-.5,-.5),this):this},r.Renderer2D.prototype.point=function(t,e){var i=this.drawingContext;if(!this._doStroke)return this;if(this._getStroke()===s)return this;var r=this._getStroke(),o=this._getFill();t=Math.round(t),e=Math.round(e),this._setFill(r),i.lineWidth>1?(i.beginPath(),i.arc(t,e,i.lineWidth/2,0,n.TWO_PI,!1),i.fill()):i.fillRect(t,e,1,1),this._setFill(o)},r.Renderer2D.prototype.quad=function(t,e,i,r,n,o,a,h){var l=this.drawingContext,u=this._doFill,c=this._doStroke;if(u&&!c){if(this._getFill()===s)return this}else if(!u&&c&&this._getStroke()===s)return this;return l.beginPath(),l.moveTo(t,e),l.lineTo(i,r),l.lineTo(n,o),l.lineTo(a,h),l.closePath(),u&&l.fill(),c&&l.stroke(),this},r.Renderer2D.prototype.rect=function(t){var e=t[0],i=t[1],r=t[2],n=t[3],o=t[4],a=t[5],h=t[6],l=t[7],u=this.drawingContext,c=this._doFill,p=this._doStroke;if(c&&!p){if(this._getFill()===s)return this}else if(!c&&p&&this._getStroke()===s)return this;if(this._doStroke&&u.lineWidth%2==1&&u.translate(.5,.5),u.beginPath(),void 0===o)u.rect(e,i,r,n);else{void 0===a&&(a=o),void 0===h&&(h=a),void 0===l&&(l=h);var d=r/2,f=n/2;r<2*o&&(o=d),n<2*o&&(o=f),r<2*a&&(a=d),n<2*a&&(a=f),r<2*h&&(h=d),n<2*h&&(h=f),r<2*l&&(l=d),n<2*l&&(l=f),u.beginPath(),u.moveTo(e+o,i),u.arcTo(e+r,i,e+r,i+n,a),u.arcTo(e+r,i+n,e,i+n,h),u.arcTo(e,i+n,e,i,l),u.arcTo(e,i,e+r,i,o),u.closePath()}return this._doFill&&u.fill(),this._doStroke&&u.stroke(),this._doStroke&&u.lineWidth%2==1&&u.translate(-.5,-.5),this},r.Renderer2D.prototype.triangle=function(t){var e=this.drawingContext,i=this._doFill,r=this._doStroke,n=t[0],o=t[1],a=t[2],h=t[3],l=t[4],u=t[5];if(i&&!r){if(this._getFill()===s)return this}else if(!i&&r&&this._getStroke()===s)return this;e.beginPath(),e.moveTo(n,o),e.lineTo(a,h),e.lineTo(l,u),e.closePath(),i&&e.fill(),r&&e.stroke()},r.Renderer2D.prototype.endShape=function(t,e,i,r,o,s,a){if(0===e.length)return this;if(!this._doStroke&&!this._doFill)return this;var h,l=t===n.CLOSE;l&&!s&&e.push(e[0]);var u,c,p=e.length;if(!i||a!==n.POLYGON&&null!==a)if(!r||a!==n.POLYGON&&null!==a)if(!o||a!==n.POLYGON&&null!==a)if(a===n.POINTS)for(u=0;u2){for(this.drawingContext.beginPath(),u=2;u3)for(u=0;u+13){var d=[],f=1-this._curveTightness;for(this.drawingContext.beginPath(),this.drawingContext.moveTo(e[1][0],e[1][1]),u=1;u+2=o))return t.push(),this._isOpenType()?this._textFont._renderPath(e,i,r,{renderer:this}):(this._doStroke&&this._strokeSet&&this.drawingContext.strokeText(e,i,r),this._doFill&&(this._fillSet||this._setFill(n._DEFAULT_TEXT_FILL),this.drawingContext.fillText(e,i,r))),t.pop(),this._pInst._pixelsDirty=!0,t},r.Renderer2D.prototype.textWidth=function(t){return this._isOpenType()?this._textFont._textWidth(t,this._textSize):this.drawingContext.measureText(t).width},r.Renderer2D.prototype._applyTextProperties=function(){var t,e=this._pInst;return this._setProperty("_textAscent",null),this._setProperty("_textDescent",null),t=this._textFont,this._isOpenType()&&(t=this._textFont.font.familyName,this._setProperty("_textStyle",this._textFont.font.styleName)),this.drawingContext.font=(this._textStyle||"normal")+" "+(this._textSize||12)+"px "+(t||"sans-serif"),this.drawingContext.textAlign=this._textAlign,this._textBaseline===n.CENTER?this.drawingContext.textBaseline=n._CTX_MIDDLE:this.drawingContext.textBaseline=this._textBaseline,e},r.Renderer2D.prototype.push=function(){return this.drawingContext.save(),r.Renderer.prototype.push.apply(this)},r.Renderer2D.prototype.pop=function(t){this.drawingContext.restore(),this._cachedFillStyle=this.drawingContext.fillStyle,this._cachedStrokeStyle=this.drawingContext.strokeStyle,r.Renderer.prototype.pop.call(this,t)},e.exports=r.Renderer2D},{"../image/filters":42,"./constants":18,"./main":24,"./p5.Renderer":27}],29:[function(t,e,i){"use strict";var r=t("./main"),n=t("./constants");t("./p5.Graphics"),t("./p5.Renderer2D"),t("../webgl/p5.RendererGL");var o="defaultCanvas0",s="p5Canvas";r.prototype.createCanvas=function(t,e,i){r._validateParameters("createCanvas",arguments);var a,h=i||n.P2D;if(h===n.WEBGL){if(a=document.getElementById(o)){a.parentNode.removeChild(a);var l=this._renderer;this._elements=this._elements.filter(function(t){return t!==l})}(a=document.createElement("canvas")).id=o,a.classList.add(s)}else if(this._defaultGraphicsCreated)a=this.canvas;else{a=document.createElement("canvas");for(var u=0;document.getElementById("defaultCanvas"+u);)u++;o="defaultCanvas"+u,a.id=o,a.classList.add(s)}return this._setupDone||(a.dataset.hidden=!0,a.style.visibility="hidden"),this._userNode?this._userNode.appendChild(a):document.body.appendChild(a),h===n.WEBGL?(this._setProperty("_renderer",new r.RendererGL(a,this,!0)),this._elements.push(this._renderer)):this._defaultGraphicsCreated||(this._setProperty("_renderer",new r.Renderer2D(a,this,!0)),this._defaultGraphicsCreated=!0,this._elements.push(this._renderer)),this._renderer.resize(t,e),this._renderer._applyDefaults(),this._renderer},r.prototype.resizeCanvas=function(t,e,i){if(r._validateParameters("resizeCanvas",arguments),this._renderer){var n={};for(var o in this.drawingContext){var s=this.drawingContext[o];"object"!=typeof s&&"function"!=typeof s&&(n[o]=s)}for(var a in this._renderer.resize(t,e),this.width=t,this.height=e,n)try{this.drawingContext[a]=n[a]}catch(t){}i||this.redraw()}},r.prototype.noCanvas=function(){this.canvas&&this.canvas.parentNode.removeChild(this.canvas)},r.prototype.createGraphics=function(t,e,i){return r._validateParameters("createGraphics",arguments),new r.Graphics(t,e,i,this)},r.prototype.blendMode=function(t){if(r._validateParameters("blendMode",arguments),t!==n.BLEND&&t!==n.DARKEST&&t!==n.LIGHTEST&&t!==n.DIFFERENCE&&t!==n.MULTIPLY&&t!==n.EXCLUSION&&t!==n.SCREEN&&t!==n.REPLACE&&t!==n.OVERLAY&&t!==n.HARD_LIGHT&&t!==n.SOFT_LIGHT&&t!==n.DODGE&&t!==n.BURN&&t!==n.ADD&&t!==n.NORMAL)throw new Error("Mode "+t+" not recognized.");this._renderer.blendMode(t)},e.exports=r},{"../webgl/p5.RendererGL":74,"./constants":18,"./main":24,"./p5.Graphics":26,"./p5.Renderer2D":28}],30:[function(t,e,i){"use strict";var r=t("../main"),n=t("../constants"),o=t("../helpers");t("../error_helpers"),r.prototype.arc=function(t,e,i,s,a,h,l,u){if(r._validateParameters("arc",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;for(a=this._toRadians(a),h=this._toRadians(h);a<0;)a+=n.TWO_PI;for(;h<0;)h+=n.TWO_PI;void 0!==a&&void 0!==h&&(h.toFixed(10)===a.toFixed(10)||Math.abs(h-a)===n.TWO_PI?(a%=n.TWO_PI,h%=n.TWO_PI,a+=n.TWO_PI):Math.abs(h-a)>n.TWO_PI&&(a%=n.TWO_PI,h%=n.TWO_PI,h+=n.TWO_PI)),a<=n.HALF_PI?a=Math.atan(i/s*Math.tan(a)):a>n.HALF_PI&&a<=3*n.HALF_PI&&(a=Math.atan(i/s*Math.tan(a))+n.PI),h<=n.HALF_PI?h=Math.atan(i/s*Math.tan(h)):h>n.HALF_PI&&h<=3*n.HALF_PI&&(h=Math.atan(i/s*Math.tan(h))+n.PI),a>h&&(h+=n.TWO_PI),i=Math.abs(i),s=Math.abs(s);var c=o.modeAdjust(t,e,i,s,this._renderer._ellipseMode);return this._renderer.arc(c.x,c.y,c.w,c.h,a,h,l,u),this},r.prototype.ellipse=function(t,e,i,n,s){if(r._validateParameters("ellipse",arguments),!this._renderer._doStroke&&!this._renderer._doFill)return this;i<0&&(i=Math.abs(i)),void 0===n?n=i:n<0&&(n=Math.abs(n));var a=o.modeAdjust(t,e,i,n,this._renderer._ellipseMode);return this._renderer.ellipse([a.x,a.y,a.w,a.h,s]),this},r.prototype.line=function(){return r._validateParameters("line",arguments),this._renderer._doStroke&&this._renderer.line.apply(this._renderer,arguments),this},r.prototype.point=function(){return r._validateParameters("point",arguments),this._renderer._doStroke&&this._renderer.point.apply(this._renderer,arguments),this},r.prototype.quad=function(){return r._validateParameters("quad",arguments),(this._renderer._doStroke||this._renderer._doFill)&&this._renderer.quad.apply(this._renderer,arguments),this},r.prototype.rect=function(){if(r._validateParameters("rect",arguments),this._renderer._doStroke||this._renderer._doFill){for(var t=o.modeAdjust(arguments[0],arguments[1],arguments[2],arguments[3],this._renderer._rectMode),e=[t.x,t.y,t.w,t.h],i=4;i0))throw new Error("vertex() must be used once before calling quadraticVertex()");u=!0;for(var e=[],i=0;id||Math.abs(this.accelerationY-this.pAccelerationY)>d||Math.abs(this.accelerationZ-this.pAccelerationZ)>d)&&t();var e=this.deviceTurned||window.deviceTurned;if("function"==typeof e){var i=this.rotationX+180,r=this.pRotationX+180,m=a+180;i-r>0&&i-r<270||i-r<-270?u="clockwise":(i-r<0||i-r>270)&&(u="counter-clockwise"),u!==n&&(m=i),Math.abs(i-m)>90&&Math.abs(i-m)<270&&(m=i,this._setProperty("turnAxis","X"),e()),n=u,a=m-180;var y=this.rotationY+180,v=this.pRotationY+180,g=h+180;y-v>0&&y-v<270||y-v<-270?c="clockwise":(y-v<0||y-this.pRotationY>270)&&(c="counter-clockwise"),c!==o&&(g=y),Math.abs(y-g)>90&&Math.abs(y-g)<270&&(g=y,this._setProperty("turnAxis","Y"),e()),o=c,h=g-180,this.rotationZ-this.pRotationZ>0&&this.rotationZ-this.pRotationZ<270||this.rotationZ-this.pRotationZ<-270?p="clockwise":(this.rotationZ-this.pRotationZ<0||this.rotationZ-this.pRotationZ>270)&&(p="counter-clockwise"),p!==s&&(l=this.rotationZ),Math.abs(this.rotationZ-l)>90&&Math.abs(this.rotationZ-l)<270&&(l=this.rotationZ,this._setProperty("turnAxis","Z"),e()),s=p,this._setProperty("turnAxis",void 0)}var _,b,S=this.deviceShaken||window.deviceShaken;"function"==typeof S&&(null!==this.pAccelerationX&&(_=Math.abs(this.accelerationX-this.pAccelerationX),b=Math.abs(this.accelerationY-this.pAccelerationY)),_+b>f&&S())},e.exports=r},{"../core/main":24}],39:[function(t,e,i){"use strict";var r=t("../core/main"),n={};r.prototype.isKeyPressed=!1,r.prototype.keyIsPressed=!1,r.prototype.key="",r.prototype.keyCode=0,r.prototype._onkeydown=function(t){if(!n[t.which]){this._setProperty("isKeyPressed",!0),this._setProperty("keyIsPressed",!0),this._setProperty("keyCode",t.which),n[t.which]=!0,this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which);var e=this.keyPressed||window.keyPressed;"function"!=typeof e||t.charCode||!1===e(t)&&t.preventDefault()}},r.prototype._onkeyup=function(t){var e=this.keyReleased||window.keyReleased;n[t.which]=!1,function(){for(var t in n)if(n.hasOwnProperty(t)&&!0===n[t])return!0;return!1}()||(this._setProperty("isKeyPressed",!1),this._setProperty("keyIsPressed",!1)),this._setProperty("_lastKeyCodeTyped",null),this._setProperty("key",t.key||String.fromCharCode(t.which)||t.which),this._setProperty("keyCode",t.which),"function"==typeof e&&!1===e(t)&&t.preventDefault()},r.prototype._onkeypress=function(t){if(t.which!==this._lastKeyCodeTyped){this._setProperty("keyCode",t.which),this._setProperty("_lastKeyCodeTyped",t.which),this._setProperty("key",String.fromCharCode(t.which));var e=this.keyTyped||window.keyTyped;"function"==typeof e&&!1===e(t)&&t.preventDefault()}},r.prototype._onblur=function(t){n={}},r.prototype.keyIsDown=function(t){return r._validateParameters("keyIsDown",arguments),n[t]},e.exports=r},{"../core/main":24}],40:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._hasMouseInteracted=!1,r.prototype.mouseX=0,r.prototype.mouseY=0,r.prototype.pmouseX=0,r.prototype.pmouseY=0,r.prototype.winMouseX=0,r.prototype.winMouseY=0,r.prototype.pwinMouseX=0,r.prototype.pwinMouseY=0,r.prototype.mouseButton=0,r.prototype.mouseIsPressed=!1,r.prototype._updateNextMouseCoords=function(t){if(null!==this._curElement&&(!t.touches||t.touches.length>0)){var e=function(t,e,i,r){r&&!r.clientX&&(r.touches?r=r.touches[0]:r.changedTouches&&(r=r.changedTouches[0]));var n=t.getBoundingClientRect(),o=t.scrollWidth/e,s=t.scrollHeight/i;return{x:(r.clientX-n.left)/o,y:(r.clientY-n.top)/s,winX:r.clientX,winY:r.clientY,id:r.identifier}}(this._curElement.elt,this.width,this.height,t);this._setProperty("mouseX",e.x),this._setProperty("mouseY",e.y),this._setProperty("winMouseX",e.winX),this._setProperty("winMouseY",e.winY)}this._hasMouseInteracted||(this._updateMouseCoords(),this._setProperty("_hasMouseInteracted",!0))},r.prototype._updateMouseCoords=function(){this._setProperty("pmouseX",this.mouseX),this._setProperty("pmouseY",this.mouseY),this._setProperty("pwinMouseX",this.winMouseX),this._setProperty("pwinMouseY",this.winMouseY),this._setProperty("_pmouseWheelDeltaY",this._mouseWheelDeltaY)},r.prototype._setMouseButton=function(t){1===t.button?this._setProperty("mouseButton",n.CENTER):2===t.button?this._setProperty("mouseButton",n.RIGHT):this._setProperty("mouseButton",n.LEFT)},r.prototype._onmousemove=function(t){var e=this._isGlobal?window:this;this._updateNextMouseCoords(t),this.mouseIsPressed?"function"==typeof e.mouseDragged?!1===e.mouseDragged(t)&&t.preventDefault():"function"==typeof e.touchMoved&&!1===e.touchMoved(t)&&t.preventDefault():"function"==typeof e.mouseMoved&&!1===e.mouseMoved(t)&&t.preventDefault()},r.prototype._onmousedown=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!0),this._setMouseButton(t),this._updateNextMouseCoords(t),"function"==typeof e.mousePressed?!1===e.mousePressed(t)&&t.preventDefault():"function"==typeof e.touchStarted&&!1===e.touchStarted(t)&&t.preventDefault()},r.prototype._onmouseup=function(t){var e=this._isGlobal?window:this;this._setProperty("mouseIsPressed",!1),"function"==typeof e.mouseReleased?!1===e.mouseReleased(t)&&t.preventDefault():"function"==typeof e.touchEnded&&!1===e.touchEnded(t)&&t.preventDefault()},r.prototype._ondragend=r.prototype._onmouseup,r.prototype._ondragover=r.prototype._onmousemove,r.prototype._onclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.mouseClicked&&!1===e.mouseClicked(t)&&t.preventDefault()},r.prototype._ondblclick=function(t){var e=this._isGlobal?window:this;"function"==typeof e.doubleClicked&&!1===e.doubleClicked(t)&&t.preventDefault()},r.prototype._mouseWheelDeltaY=0,r.prototype._pmouseWheelDeltaY=0,r.prototype._onwheel=function(t){var e=this._isGlobal?window:this;this._setProperty("_mouseWheelDeltaY",t.deltaY),"function"==typeof e.mouseWheel&&(t.delta=t.deltaY,!1===e.mouseWheel(t)&&t.preventDefault())},e.exports=r},{"../core/constants":18,"../core/main":24}],41:[function(t,e,i){"use strict";function r(t,e,i,r,n){n=n||0;var o=t.getBoundingClientRect(),s=t.scrollWidth/e,a=t.scrollHeight/i,h=r.touches[n]||r.changedTouches[n];return{x:(h.clientX-o.left)/s,y:(h.clientY-o.top)/a,winX:h.clientX,winY:h.clientY,id:h.identifier}}var n=t("../core/main");n.prototype.touches=[],n.prototype._updateTouchCoords=function(t){if(null!==this._curElement){for(var e=[],i=0;i=r)break;x=0}for(A=x;A=r);A++){var O=c[g+R];M=a[A],v+=M[(-16777216&O)>>>24],f+=M[(16711680&O)>>16],m+=M[(65280&O)>>8],y+=M[255&O],d+=s[A],g++}P[_=R+w]=v/d,E[_]=f/d,k[_]=m/d,C[_]=y/d}R+=r}for(R=0,S=(b=-n)*r,T=0;T=l)break;x=0,_=b,g=w+S}for(A=x;A=l);A++)M=a[A],v+=M[P[g]],f+=M[E[g]],m+=M[k[g]],y+=M[C[g]],d+=s[A],_++,g+=r;c[w+R]=v/d<<24|f/d<<16|m/d<<8|y/d}R+=r,S+=r,b++}h._setPixels(i,c)}var n,o,s,a,h={_toPixels:function(t){return t instanceof ImageData?t.data:t.getContext("2d").getImageData(0,0,t.width,t.height).data},_getARGB:function(t,e){var i=4*e;return t[i+3]<<24&4278190080|t[i]<<16&16711680|t[i+1]<<8&65280|255&t[i+2]},_setPixels:function(t,e){for(var i=0,r=0,n=t.length;r>>16,t[i+1]=(65280&e[r])>>>8,t[i+2]=255&e[r],t[i+3]=(4278190080&e[r])>>>24},_toImageData:function(t){return t instanceof ImageData?t:t.getContext("2d").getImageData(0,0,t.width,t.height)},_createImageData:function(t,e){return h._tmpCanvas=document.createElement("canvas"),h._tmpCtx=h._tmpCanvas.getContext("2d"),this._tmpCtx.createImageData(t,e)},apply:function(t,e,i){var r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),o=e(n,i);o instanceof ImageData?r.putImageData(o,0,0,0,0,t.width,t.height):r.putImageData(n,0,0,0,0,t.width,t.height)},threshold:function(t,e){var i=h._toPixels(t);void 0===e&&(e=.5);for(var r=Math.floor(255*e),n=0;n=r?255:0,i[n]=i[n+1]=i[n+2]=o}},gray:function(t){for(var e=h._toPixels(t),i=0;i255)throw new Error("Level must be greater than 2 and less than 255 for posterize");for(var r=e-1,n=0;n>8)/r,i[n+1]=255*(s*e>>8)/r,i[n+2]=255*(a*e>>8)/r}},dilate:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))>(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m>o&&(n=c,o=m),v>o&&(n=d,o=v),g>o&&(n=f,o=g),x[b++]=n;h._setPixels(_,x)},erode:function(t){for(var e,i,r,n,o,s,a,l,u,c,p,d,f,m,y,v,g,_=h._toPixels(t),b=0,S=_.length?_.length/4:0,x=new Int32Array(S);b=i&&(s=b),l<0&&(l=0),u>=S&&(u=b),d=h._getARGB(_,l),p=h._getARGB(_,a),f=h._getARGB(_,u),c=h._getARGB(_,s),m=77*(c>>16&255)+151*(c>>8&255)+28*(255&c),v=77*(d>>16&255)+151*(d>>8&255)+28*(255&d),g=77*(f>>16&255)+151*(f>>8&255)+28*(255&f),(y=77*(p>>16&255)+151*(p>>8&255)+28*(255&p))<(o=77*(r>>16&255)+151*(r>>8&255)+28*(255&r))&&(n=p,o=y),m=1&&(e=o[0]),o.length>=2&&(i=o[1]),i=i||r.prototype._checkFileExtension(e,i)[1]||"png"){default:n="image/png";break;case"jpeg":case"jpg":n="image/jpeg"}t.toBlob(function(t){r.prototype.downloadFile(t,e,i)},n)},r.prototype.saveFrames=function(t,e,i,o,s){r._validateParameters("saveFrames",arguments);var a=i||3;a=r.prototype.constrain(a,0,15),a*=1e3;var h=o||15;h=r.prototype.constrain(h,0,22);var l=0,u=r.prototype._makeFrame,c=this._curElement.elt,p=setInterval(function(){u(t+l,e,c),l++},1e3/h);setTimeout(function(){if(clearInterval(p),s)s(n);else for(var t=0;t0&&t0&&this.loadPixels(),this.setModified(!0),this._pixelsDirty=!0},r.Image.prototype.copy=function(){var t,e,i,n,o,s,a,h,l;if(9===arguments.length)t=arguments[0],e=arguments[1],i=arguments[2],n=arguments[3],o=arguments[4],s=arguments[5],a=arguments[6],h=arguments[7],l=arguments[8];else{if(8!==arguments.length)throw new Error("Signature not supported");t=this,e=arguments[0],i=arguments[1],n=arguments[2],o=arguments[3],s=arguments[4],a=arguments[5],h=arguments[6],l=arguments[7]}r.Renderer2D._copyHelper(this,t,e,i,n,o,s,a,h,l),this._pixelsDirty=!0},r.Image.prototype.mask=function(t){void 0===t&&(t=this);var e=this.drawingContext.globalCompositeOperation,i=1;t instanceof r.Renderer&&(i=t._pInst._pixelDensity);var n=[t,0,0,i*t.width,i*t.height,0,0,this.width,this.height];this.drawingContext.globalCompositeOperation="destination-in",r.Image.prototype.copy.apply(this,n),this.drawingContext.globalCompositeOperation=e,this.setModified(!0)},r.Image.prototype.filter=function(t,e){n.apply(this.canvas,n[t.toLowerCase()],e),this.setModified(!0)},r.Image.prototype.blend=function(){r.prototype.blend.apply(this,arguments),this.setModified(!0)},r.Image.prototype.setModified=function(t){this._modified=t},r.Image.prototype.isModified=function(){return this._modified},r.Image.prototype.save=function(t,e){r.prototype.saveCanvas(this.canvas,t,e)},e.exports=r.Image},{"../core/main":24,"./filters":42}],46:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("./filters");t("../color/p5.Color"),r.prototype.pixels=[],r.prototype.blend=function(){r._validateParameters("blend",arguments),this._renderer?this._renderer.blend.apply(this._renderer,arguments):r.Renderer2D.prototype.blend.apply(this,arguments)},r.prototype.copy=function(){r._validateParameters("copy",arguments),r.Renderer2D.prototype.copy.apply(this._renderer,arguments)},r.prototype.filter=function(t,e){r._validateParameters("filter",arguments),void 0!==this.canvas?n.apply(this.canvas,n[t.toLowerCase()],e):n.apply(this.elt,n[t.toLowerCase()],e)},r.prototype.get=function(t,e,i,r){return this._renderer.get(t,e,i,r)},r.prototype.loadPixels=function(){r._validateParameters("loadPixels",arguments),this._renderer.loadPixels()},r.prototype.set=function(t,e,i){this._renderer.set(t,e,i)},r.prototype.updatePixels=function(t,e,i,n){r._validateParameters("updatePixels",arguments),0!==this.pixels.length&&this._renderer.updatePixels(t,e,i,n)},e.exports=r},{"../color/p5.Color":16,"../core/main":24,"./filters":42}],47:[function(t,e,i){"use strict";function r(t,e){var i={};if(void 0===(e=e||[]))for(var r=0;r/g,">").replace(/"/g,""").replace(/'/g,"'")}function o(t,e){e&&!0!==e&&"true"!==e||(e=""),t||(t="untitled");var i="";return t&&t.indexOf(".")>-1&&(i=t.split(".").pop()),e&&i!==e&&(t=t+"."+(i=e)),[t,i]}var s=t("../core/main");t("whatwg-fetch"),t("es6-promise").polyfill();var a=t("fetch-jsonp");t("../core/error_helpers"),s.prototype.loadJSON=function(){s._validateParameters("loadJSON",arguments);for(var t,e,i,r=arguments[0],n={},o="json",a=1;a0&&"function"==typeof arguments[u];u--)h++;var c=arguments.length-h,p=arguments[0];if(2===c&&"string"==typeof p&&"object"==typeof arguments[1])r=new Request(p,arguments[1]),e=arguments[2],i=arguments[3];else{for(var d,f="GET",m=1;m64e6&&s._friendlyFileLoadError(7,p),t){case"json":case"jsonp":return e.json();case"binary":return e.blob();case"arrayBuffer":return e.arrayBuffer();case"xml":return e.text().then(function(t){return function t(e){var i=new s.XML,r=e.childNodes;if(r&&r.length){for(var n=0;n"),o.print("");var p=' "),o.print(""),o.print(" "),"0"!==a[0]){o.print(" ");for(var d=0;d"+f),o.print(" ")}o.print(" ")}for(var m=0;m");for(var y=0;y"+g),o.print(" ")}o.print(" ")}o.print("
"),o.print(""),o.print("")}o.close(),o.clear()},s.prototype.writeFile=function(t,e,i){var r="application/octet-stream";s.prototype._isSafari()&&(r="text/plain");var n=new Blob(t,{type:r});s.prototype.downloadFile(n,e,i)},s.prototype.downloadFile=function(e,i,r){var n=o(i,r),a=n[0];if(e instanceof Blob)t("file-saver").saveAs(e,a);else{var h=document.createElement("a");if(h.href=e,h.download=a,h.onclick=function(t){(function(t){document.body.removeChild(t.target)})(t),t.stopPropagation()},h.style.display="none",document.body.appendChild(h),s.prototype._isSafari()){var l="Hello, Safari user! To download this file...\n";l+="1. Go to File --\x3e Save As.\n",l+='2. Choose "Page Source" as the Format.\n',l+='3. Name it with this extension: ."'+n[1]+'"',alert(l)}h.click()}},s.prototype._checkFileExtension=o,s.prototype._isSafari=function(){return Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0},e.exports=s},{"../core/error_helpers":20,"../core/main":24,"es6-promise":4,"fetch-jsonp":5,"file-saver":6,"whatwg-fetch":12}],48:[function(t,e,i){"use strict";var r=t("../core/main");r.Table=function(t){this.columns=[],this.rows=[]},r.Table.prototype.addRow=function(t){var e=t||new r.TableRow;if(void 0===e.arr||void 0===e.obj)throw new Error("invalid TableRow: "+e);return e.table=this,this.rows.push(e),e},r.Table.prototype.removeRow=function(t){this.rows[t].table=null;var e=this.rows.splice(t+1,this.rows.length);this.rows.pop(),this.rows=this.rows.concat(e)},r.Table.prototype.getRow=function(t){return this.rows[t]},r.Table.prototype.getRows=function(){return this.rows},r.Table.prototype.findRow=function(t,e){if("string"==typeof e){for(var i=0;i=0))throw new Error('This table has no column named "'+t+'"');i=e[t],r[i]=e}else r[n]=this.rows[n].obj;return r},r.Table.prototype.getArray=function(){for(var t=[],e=0;e=0))throw new Error('This table has no column named "'+t+'"');this.obj[t]=e,this.arr[i]=e}else{if(!(t0},r.XML.prototype.listChildren=function(){return this.children.map(function(t){return t.name})},r.XML.prototype.getChildren=function(t){return t?this.children.filter(function(e){return e.name===t}):this.children},r.XML.prototype.getChild=function(t){if("string"!=typeof t)return this.children[t];for(var e=0;eo&&(o=a),n[s]=a}0===o&&(o=1);for(var h=0,l=0,u=0;u=1&&(f++,v--),g>=1&&(m++,g--),_>=1&&(y++,_--)}return b},n.prototype.noiseDetail=function(t,e){t>0&&(s=t),e>0&&(a=e)},n.prototype.noiseSeed=function(t){var e=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();e.setSeed(t),r=new Array(o+1);for(var i=0;it*t&&this.div(Math.sqrt(e)).mult(t),this},r.Vector.prototype.setMag=function(t){return this.normalize().mult(t)},r.Vector.prototype.heading=function(){var t=Math.atan2(this.y,this.x);return this.p5?this.p5._fromRadians(t):t},r.Vector.prototype.rotate=function(t){var e=this.heading()+t;this.p5&&(e=this.p5._toRadians(e));var i=this.mag();return this.x=Math.cos(e)*i,this.y=Math.sin(e)*i,this},r.Vector.prototype.angleBetween=function(t){var e=this.dot(t)/(this.mag()*t.mag()),i=Math.acos(Math.min(1,Math.max(-1,e)));return this.p5?this.p5._fromRadians(i):i},r.Vector.prototype.lerp=function(t,e,i,n){return t instanceof r.Vector?this.lerp(t.x,t.y,t.z,e):(this.x+=(t-this.x)*n||0,this.y+=(e-this.y)*n||0,this.z+=(i-this.z)*n||0,this)},r.Vector.prototype.array=function(){return[this.x||0,this.y||0,this.z||0]},r.Vector.prototype.equals=function(t,e,i){var n,o,s;return t instanceof r.Vector?(n=t.x||0,o=t.y||0,s=t.z||0):t instanceof Array?(n=t[0]||0,o=t[1]||0,s=t[2]||0):(n=t||0,o=e||0,s=i||0),this.x===n&&this.y===o&&this.z===s},r.Vector.fromAngle=function(t,e){return void 0===e&&(e=1),new r.Vector(e*Math.cos(t),e*Math.sin(t),0)},r.Vector.fromAngles=function(t,e,i){void 0===i&&(i=1);var n=Math.cos(e),o=Math.sin(e),s=Math.cos(t),a=Math.sin(t);return new r.Vector(i*a*o,-i*s,i*a*n)},r.Vector.random2D=function(){return this.fromAngle(Math.random()*n.TWO_PI)},r.Vector.random3D=function(){var t=Math.random()*n.TWO_PI,e=2*Math.random()-1,i=Math.sqrt(1-e*e),o=i*Math.cos(t),s=i*Math.sin(t);return new r.Vector(o,s,e)},r.Vector.add=function(t,e,i){return i?i.set(t):i=t.copy(),i.add(e),i},r.Vector.sub=function(t,e,i){return i?i.set(t):i=t.copy(),i.sub(e),i},r.Vector.mult=function(t,e,i){return i?i.set(t):i=t.copy(),i.mult(e),i},r.Vector.div=function(t,e,i){return i?i.set(t):i=t.copy(),i.div(e),i},r.Vector.dot=function(t,e){return t.dot(e)},r.Vector.cross=function(t,e){return t.cross(e)},r.Vector.dist=function(t,e){return t.dist(e)},r.Vector.lerp=function(t,e,i,r){return r?r.set(t):r=t.copy(),r.lerp(e,i),r},r.Vector.mag=function(t){var e=t.x,i=t.y,r=t.z,n=e*e+i*i+r*r;return Math.sqrt(n)},e.exports=r.Vector},{"../core/constants":18,"../core/main":24}],55:[function(t,e,i){"use strict";var r=t("../core/main"),n=!1,o=!1,s=0,a=function(){var t,e,i=4294967296;return{setSeed:function(r){e=t=(null==r?Math.random()*i:r)>>>0},getSeed:function(){return t},rand:function(){return(e=(1664525*e+1013904223)%i)/i}}}();r.prototype.randomSeed=function(t){a.setSeed(t),n=!0,o=!1},r.prototype.random=function(t,e){var i;if(i=n?a.rand():Math.random(),void 0===t)return i;if(void 0===e)return t instanceof Array?t[Math.floor(i*t.length)]:i*t;if(t>e){var r=t;t=e,e=r}return i*(e-t)+t},r.prototype.randomGaussian=function(t,e){var i,r,n,a;if(o)i=s,o=!1;else{do{r=this.random(2)-1,n=this.random(2)-1,a=r*r+n*n}while(a>=1);a=Math.sqrt(-2*Math.log(a)/a),i=r*a,s=n*a,o=!0}var h=t||0;return i*(e||1)+h},e.exports=r},{"../core/main":24}],56:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.prototype._angleMode=n.RADIANS,r.prototype.acos=function(t){return this._fromRadians(Math.acos(t))},r.prototype.asin=function(t){return this._fromRadians(Math.asin(t))},r.prototype.atan=function(t){return this._fromRadians(Math.atan(t))},r.prototype.atan2=function(t,e){return this._fromRadians(Math.atan2(t,e))},r.prototype.cos=function(t){return Math.cos(this._toRadians(t))},r.prototype.sin=function(t){return Math.sin(this._toRadians(t))},r.prototype.tan=function(t){return Math.tan(this._toRadians(t))},r.prototype.degrees=function(t){return t*n.RAD_TO_DEG},r.prototype.radians=function(t){return t*n.DEG_TO_RAD},r.prototype.angleMode=function(t){t!==n.DEGREES&&t!==n.RADIANS||(this._angleMode=t)},r.prototype._toRadians=function(t){return this._angleMode===n.DEGREES?t*n.DEG_TO_RAD:t},r.prototype._toDegrees=function(t){return this._angleMode===n.RADIANS?t*n.RAD_TO_DEG:t},r.prototype._fromRadians=function(t){return this._angleMode===n.DEGREES?t*n.RAD_TO_DEG:t},e.exports=r},{"../core/constants":18,"../core/main":24}],57:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.textAlign=function(t,e){return r._validateParameters("textAlign",arguments),this._renderer.textAlign.apply(this._renderer,arguments)},r.prototype.textLeading=function(t){return r._validateParameters("textLeading",arguments),this._renderer.textLeading.apply(this._renderer,arguments)},r.prototype.textSize=function(t){return r._validateParameters("textSize",arguments),this._renderer.textSize.apply(this._renderer,arguments)},r.prototype.textStyle=function(t){return r._validateParameters("textStyle",arguments),this._renderer.textStyle.apply(this._renderer,arguments)},r.prototype.textWidth=function(t){return r._validateParameters("textWidth",arguments),0===t.length?0:this._renderer.textWidth.apply(this._renderer,arguments)},r.prototype.textAscent=function(){return r._validateParameters("textAscent",arguments),this._renderer.textAscent()},r.prototype.textDescent=function(){return r._validateParameters("textDescent",arguments),this._renderer.textDescent()},r.prototype._updateTextMetrics=function(){return this._renderer._updateTextMetrics()},e.exports=r},{"../core/main":24}],58:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("opentype.js");t("../core/error_helpers"),r.prototype.loadFont=function(t,e,i){r._validateParameters("loadFont",arguments);var n=new r.Font(this),s=this;return o.load(t,function(o,a){if(o)return void 0!==i?i(o):(r._friendlyFileLoadError(4,t),void console.error(o,t));n.font=a,void 0!==e&&e(n),s._decrementPreload();var h,l,u=t.split("\\").pop().split("/").pop(),c=u.lastIndexOf("."),p=c<1?null:u.substr(c+1);["ttf","otf","woff","woff2"].indexOf(p)>-1&&(h=u.substr(0,c),(l=document.createElement("style")).appendChild(document.createTextNode("\n@font-face {\nfont-family: "+h+";\nsrc: url("+t+");\n}\n")),document.head.appendChild(l))}),n},r.prototype.text=function(t,e,i,n,o){return r._validateParameters("text",arguments),this._renderer._doFill||this._renderer._doStroke?this._renderer.text.apply(this._renderer,arguments):this},r.prototype.textFont=function(t,e){if(r._validateParameters("textFont",arguments),arguments.length){if(!t)throw new Error("null font passed to textFont");return this._renderer._setProperty("_textFont",t),e&&(this._renderer._setProperty("_textSize",e),this._renderer._setProperty("_textLeading",e*n._DEFAULT_LEADMULT)),this._renderer._applyTextProperties()}return this._renderer._textFont},e.exports=r},{"../core/constants":18,"../core/error_helpers":20,"../core/main":24,"opentype.js":10}],59:[function(t,e,i){"use strict";function r(t,e){for(var i=function(t,e){if("object"!=typeof t)t=e;else for(var i in e)void 0===t[i]&&(t[i]=e[i]);return t}(e,{sampleFactor:.1,simplifyThreshold:0}),r=c(t,0,1),o=r/(r*i.sampleFactor),s=[],a=0;a3&&r>=0;--r)h(a(t,r-1),a(t,r),a(t,r+1),e)&&(t.splice(r%t.length,1),i++);return i}function o(t){for(var e,i=[],r=0;rg||v<_)&&(T+=180),{x:f,y:m,m:{x:y,y:v},n:{x:g,y:_},start:{x:b,y:S},end:{x:x,y:w},alpha:T}}function u(t,e,i,r,n,o,s,a,h){return null==h?v(t,e,i,r,n,o,s,a):l(t,e,i,r,n,o,s,a,function(t,e,i,r,n,o,s,a,h){if(!(h<0||v(t,e,i,r,n,o,s,a).01;)u/=2,l=v(t,e,i,r,n,o,s,a,c+=(le&&!i)return{x:(a=u(r,n,o[1],o[2],o[3],o[4],o[5],o[6],e-h)).x,y:a.y,alpha:a.alpha};h+=s,r=+o[5],n=+o[6]}o.shift()}return(a=i?h:l(r,n,o[0],o[1],o[2],o[3],o[4],o[5],1)).alpha&&(a={x:a.x,y:a.y,alpha:a.alpha}),a}function p(t){var e=[],i=0,r=0,n=0,o=0,s=0;if(!t)return e;"M"===t[0][0]&&(i=+t[0][1],r=+t[0][2],n=i,o=r,s++,e[0]=["M",i,r]);for(var a,h,l,u=3===t.length&&"M"===t[0][0]&&"R"===t[1][0].toUpperCase()&&"Z"===t[2][0].toUpperCase(),c=s,p=t.length;c1&&(w=Math.sqrt(w),r*=w,n*=w);var T=r*r,A=n*n,M=(s===a?-1:1)*Math.sqrt(Math.abs((T*A-T*x*x-A*S*S)/(T*x*x+A*S*S)));d=M*r*x/n+(e+h)/2,f=M*-n*S/r+(i+l)/2,c=Math.asin(((i-f)/n).toFixed(9)),p=Math.asin(((l-f)/n).toFixed(9)),c=ep&&(c-=2*y),!a&&p>c&&(p-=2*y)}var P=p-c;if(Math.abs(P)>v){var E=p,k=h,C=l;p=c+v*(a&&p>c?1:-1),h=d+r*Math.cos(p),l=f+n*Math.sin(p),_=t(h,l,r,n,o,0,a,k,C,[p,E,d,f])}P=p-c;var R=Math.cos(c),O=Math.sin(c),L=Math.cos(p),F=Math.sin(p),I=Math.tan(P/4),D=4/3*r*I,U=4/3*n*I,B=[e,i],N=[e+D*O,i-U*R],G=[h+D*F,l-U*L],q=[h,l];if(N[0]=2*B[0]-N[0],N[1]=2*B[1]-N[1],u)return[N,G,q].concat(_);for(var V=[],j=0,z=(_=[N,G,q].concat(_).join().split(",")).length;j7){t[e].shift();for(var o=t[e];o.length;)a[e]="A",n&&(h[e]="A"),t.splice(e++,0,["C"].concat(o.splice(0,6)));t.splice(e,1),i=Math.max(r.length,n&&n.length||0)}},c=function(t,e,o,s,a){t&&e&&"M"===t[a][0]&&"M"!==e[a][0]&&(e.splice(a,0,["M",s.x,s.y]),o.bx=0,o.by=0,o.x=t[a][1],o.y=t[a][2],i=Math.max(r.length,n&&n.length||0))},d="",f="";i=Math.max(r.length,n&&n.length||0);for(var v=0;vr;r+=2){var o=[{x:+t[r-2],y:+t[r-1]},{x:+t[r],y:+t[r+1]},{x:+t[r+2],y:+t[r+3]},{x:+t[r+4],y:+t[r+5]}];e?r?n-4===r?o[3]={x:+t[0],y:+t[1]}:n-2===r&&(o[2]={x:+t[0],y:+t[1]},o[3]={x:+t[2],y:+t[3]}):o[0]={x:+t[n-2],y:+t[n-1]}:n-4===r?o[3]=o[2]:r||(o[0]={x:+t[r],y:+t[r+1]}),i.push(["C",(-o[0].x+6*o[1].x+o[2].x)/6,(-o[0].y+6*o[1].y+o[2].y)/6,(o[1].x+6*o[2].x-o[3].x)/6,(o[1].y+6*o[2].y-o[3].y)/6,o[2].x,o[2].y])}return i}function m(t,e,i,r){return[t,e,i,r,i,r]}function y(t,e,i,r,n,o){var s=1/3,a=2/3;return[s*t+a*i,s*e+a*r,s*n+a*i,s*o+a*r,n,o]}function v(t,e,i,r,n,o,s,a,h){null==h&&(h=1);for(var l=(h=h>1?1:h<0?0:h)/2,u=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],c=0,p=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],d=0;d<12;d++){var f=l*u[d]+l,m=g(f,t,i,n,s),y=g(f,e,r,o,a),v=m*m+y*y;c+=p[d]*Math.sqrt(v)}return l*c}function g(t,e,i,r,n){return t*(t*(-3*e+9*i-9*r+3*n)+6*e-12*i+6*r)-3*e+3*i}function _(){for(var t="",e=arguments.length-1;e>=0;--e){var i=arguments[e];t+=i===Object(i)?JSON.stringify(i):i}return t}var b=t("../core/main"),S=t("../core/constants");b.Font=function(t){this.parent=t,this.cache={},this.font=void 0},b.Font.prototype.list=function(){throw new Error("not yet implemented")},b.Font.prototype.textBounds=function(t,e,i,r,n){e=void 0!==e?e:0,i=void 0!==i?i:0,r=r||this.parent._renderer._textSize;var o=n&&n.renderer&&n.renderer._pInst||this.parent,s=o._renderer,a=s._textAlign||S.LEFT,h=s._textBaseline||S.BASELINE,l=_("textBounds",t,e,i,r,a,h),u=this.cache[l];if(!u){var c,p,d,f,m,y=[],v=[],g=this._scale(r);this.font.forEachGlyph(t,e,i,r,n,function(t,e,i,r){var n=t.getMetrics();y.push(e+n.xMin*g),y.push(e+n.xMax*g),v.push(i+-n.yMin*g),v.push(i+-n.yMax*g)}),c=Math.min.apply(null,y),p=Math.min.apply(null,v),d=Math.max.apply(null,y),f=Math.max.apply(null,v),u={x:c,y:p,h:f-p,w:d-c,advance:c-e},m=this._handleAlignment(s,t,u.x,u.y,u.w+u.advance),u.x=m.x,u.y=m.y,this.cache[_("textBounds",t,e,i,r,a,h)]=u}return u},b.Font.prototype.textToPoints=function(t,e,i,n,s){function a(e){return u[e].name&&"space"===u[e].name||t.length===u.length&&" "===t[e]||u[e].index&&3===u[e].index}var h=0,l=[],u=this._getGlyphs(t);n=n||this.parent._renderer._textSize;for(var c=0;c2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&"number"==typeof r.decimals&&(n=r.decimals),t.toPathData(n)},b.Font.prototype._getSVG=function(t,e,i,r){var n=3;return"string"==typeof t&&arguments.length>2?t=this._getPath(t,e,i,r):"object"==typeof e&&(r=e),r&&("number"==typeof r.decimals&&(n=r.decimals),"number"==typeof r.strokeWidth&&(t.strokeWidth=r.strokeWidth),void 0!==r.fill&&(t.fill=r.fill),void 0!==r.stroke&&(t.stroke=r.stroke)),t.toSVG(n)},b.Font.prototype._renderPath=function(t,e,i,r){var n,o=r&&r.renderer||this.parent._renderer,s=o.drawingContext;n="object"==typeof t&&t.commands?t.commands:this._getPath(t,e,i,r).commands,s.beginPath();for(var a=0;a1;)i=Math.random()*o|0,r=t[--o],t[o]=t[i],t[i]=r;return t},r.prototype.sort=function(t,e){var i=e?t.slice(0,Math.min(e,t.length)):t,r=e?t.slice(Math.min(e,t.length)):[];return(i="string"==typeof i[0]?i.sort():i.sort(function(t,e){return t-e})).concat(r)},r.prototype.splice=function(t,e,i){return Array.prototype.splice.apply(t,[i,0].concat(e)),t},r.prototype.subset=function(t,e,i){return void 0!==i?t.slice(e,e+i):t.slice(e,t.length)},e.exports=r},{"../core/main":24}],61:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.float=function(t){return t instanceof Array?t.map(parseFloat):parseFloat(t)},r.prototype.int=function(t,e){return e=e||10,"string"==typeof t?parseInt(t,e):"number"==typeof t?0|t:"boolean"==typeof t?t?1:0:t instanceof Array?t.map(function(t){return r.prototype.int(t,e)}):void 0},r.prototype.str=function(t){return t instanceof Array?t.map(r.prototype.str):String(t)},r.prototype.boolean=function(t){return"number"==typeof t?0!==t:"string"==typeof t?"true"===t.toLowerCase():"boolean"==typeof t?t:t instanceof Array?t.map(r.prototype.boolean):void 0},r.prototype.byte=function(t){var e=r.prototype.int(t,10);return"number"==typeof e?(e+128)%256-128:e instanceof Array?e.map(r.prototype.byte):void 0},r.prototype.char=function(t){return"number"!=typeof t||isNaN(t)?t instanceof Array?t.map(r.prototype.char):"string"==typeof t?r.prototype.char(parseInt(t,10)):void 0:String.fromCharCode(t)},r.prototype.unchar=function(t){return"string"==typeof t&&1===t.length?t.charCodeAt(0):t instanceof Array?t.map(r.prototype.unchar):void 0},r.prototype.hex=function(t,e){if(e=void 0===e||null===e?e=8:e,t instanceof Array)return t.map(function(t){return r.prototype.hex(t,e)});if("number"==typeof t){t<0&&(t=4294967295+t+1);for(var i=Number(t).toString(16).toUpperCase();i.length=e&&(i=i.substring(i.length-e,i.length)),i}},r.prototype.unhex=function(t){return t instanceof Array?t.map(r.prototype.unhex):parseInt("0x"+t,16)},e.exports=r},{"../core/main":24}],62:[function(t,e,i){"use strict";function r(t,e,i){var r=t<0,n=r?t.toString().substring(1):t.toString(),o=n.indexOf("."),s=-1!==o?n.substring(0,o):n,a=-1!==o?n.substring(o+1):"",h=r?"-":"";if(void 0!==i){var l="";(-1!==o||i-a.length>0)&&(l="."),a.length>i&&(a=a.substring(0,i));for(var u=0;ur.length)for(var o=e-(r+=-1===i?".":"").length+1,s=0;s0?"+"+t.toString():t.toString()}function s(t){return parseFloat(t)>0?" "+t.toString():t.toString()}var a=t("../core/main");t("../core/error_helpers"),a.prototype.join=function(t,e){return a._validateParameters("join",arguments),t.join(e)},a.prototype.match=function(t,e){return a._validateParameters("match",arguments),t.match(e)},a.prototype.matchAll=function(t,e){a._validateParameters("matchAll",arguments);for(var i=new RegExp(e,"g"),r=i.exec(t),n=[];null!==r;)n.push(r),r=i.exec(t);return n},a.prototype.nf=function(t,e,i){return a._validateParameters("nf",arguments),t instanceof Array?t.map(function(t){return r(t,e,i)}):"[object Arguments]"===Object.prototype.toString.call(t)?3===t.length?this.nf(t[0],t[1],t[2]):2===t.length?this.nf(t[0],t[1]):this.nf(t[0]):r(t,e,i)},a.prototype.nfc=function(t,e){return a._validateParameters("nfc",arguments),t instanceof Array?t.map(function(t){return n(t,e)}):n(t,e)},a.prototype.nfp=function(){a._validateParameters("nfp",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(o):o(t)},a.prototype.nfs=function(){a._validateParameters("nfs",arguments);var t=a.prototype.nf.apply(this,arguments);return t instanceof Array?t.map(s):s(t)},a.prototype.split=function(t,e){return a._validateParameters("split",arguments),t.split(e)},a.prototype.splitTokens=function(t,e){var i;if(a._validateParameters("splitTokens",arguments),void 0!==e){var r=e,n=/\]/g.exec(r),o=/\[/g.exec(r);o&&n?(r=r.slice(0,n.index)+r.slice(n.index+1),o=/\[/g.exec(r),r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("[\\["+r+"\\]]","g")):n?(r=r.slice(0,n.index)+r.slice(n.index+1),i=new RegExp("["+r+"\\]]","g")):o?(r=r.slice(0,o.index)+r.slice(o.index+1),i=new RegExp("["+r+"\\[]","g")):i=new RegExp("["+r+"]","g")}else i=/\s/g;return t.split(i).filter(function(t){return t})},a.prototype.trim=function(t){return a._validateParameters("trim",arguments),t instanceof Array?t.map(this.trim):t.trim()},e.exports=a},{"../core/error_helpers":20,"../core/main":24}],63:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.day=function(){return(new Date).getDate()},r.prototype.hour=function(){return(new Date).getHours()},r.prototype.minute=function(){return(new Date).getMinutes()},r.prototype.millis=function(){return window.performance.now()},r.prototype.month=function(){return(new Date).getMonth()+1},r.prototype.second=function(){return(new Date).getSeconds()},r.prototype.year=function(){return(new Date).getFullYear()},e.exports=r},{"../core/main":24}],64:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry");var n=t("../core/constants");r.prototype.plane=function(t,e,i,n){this._assert3d("plane"),r._validateParameters("plane",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=1),void 0===n&&(n=1);var o="plane|"+i+"|"+n;if(!this._renderer.geometryInHash(o)){var s=new r.Geometry(i,n,function(){for(var t,e,i,n=0;n<=this.detailY;n++){e=n/this.detailY;for(var o=0;o<=this.detailX;o++)t=o/this.detailX,i=new r.Vector(t-.5,e-.5,0),this.vertices.push(i),this.uvs.push(t,e)}});s.computeFaces().computeNormals(),i<=1&&n<=1?s._makeTriangleEdges()._edgesToVertices():console.log("Cannot draw stroke on plane objects with more than 1 detailX or 1 detailY"),this._renderer.createBuffers(o,s)}return this._renderer.drawBuffersScaled(o,t,e,1),this},r.prototype.box=function(t,e,i,n,o){this._assert3d("box"),r._validateParameters("box",arguments),void 0===t&&(t=50),void 0===e&&(e=t),void 0===i&&(i=e);var s=this._renderer.attributes&&this._renderer.attributes.perPixelLighting;void 0===n&&(n=s?1:4),void 0===o&&(o=s?1:4);var a="box|"+n+"|"+o;if(!this._renderer.geometryInHash(a)){var h=new r.Geometry(n,o,function(){var t=[[0,4,2,6],[1,3,5,7],[0,1,4,5],[2,6,3,7],[0,2,1,3],[4,5,6,7]];this.strokeIndices=[[0,1],[1,3],[3,2],[6,7],[8,9],[9,11],[14,15],[16,17],[17,19],[18,19],[20,21],[22,23]];for(var e=0;eo?(_=i,g=1,v=e):v=t+(e-t)*g,-2!==h&&h!==o+2||(v=0),_-=i/2,m[h]=0===v?1:n,l=0;lo?0:Math.sin(2*b*Math.PI)*Math.cos(y),h<0?-1:h>o?1:Math.sin(y),h<0||h>o?0:Math.cos(2*b*Math.PI)*Math.cos(y))),this.uvs.push(b,g)}}var S=0;if(s){for(u=0;u=n.TWO_PI?(e="ellipse")+"|"+p+"|":(e="arc")+"|"+l+"|"+u+"|"+c+"|"+p+"|",!this.geometryInHash(i)){var d=new r.Geometry(p,1,function(){if(this.strokeIndices=[],l.toFixed(10)!==u.toFixed(10)){c!==n.PIE&&void 0!==c||(this.vertices.push(new r.Vector(.5,.5,0)),this.uvs.push([.5,.5]));for(var t=0;t<=p;t++){var e=t/p,i=(u-l)*e+l,o=.5+Math.cos(i)/2,s=.5+Math.sin(i)/2;this.vertices.push(new r.Vector(o,s,0)),this.uvs.push([o,s]),t0&&h>0&&(this.strokeIndices=[[0,a],[a,(a+1)*(h+1)-1],[(a+1)*(h+1)-1,(a+1)*h],[(a+1)*h,0]])});u.computeFaces().computeNormals()._makeTriangleEdges()._edgesToVertices(),this.createBuffers(l,u)}var c=this.uMVMatrix.copy();try{this.uMVMatrix.translate([i,n,0]),this.uMVMatrix.scale(o,s,1),this.drawBuffers(l)}finally{this.uMVMatrix=c}return this},r.RendererGL.prototype.quad=function(t,e,i,n,o,s,a,h){var l="quad|"+t+"|"+e+"|"+i+"|"+n+"|"+o+"|"+s+"|"+a+"|"+h;if(!this.geometryInHash(l)){var u=new r.Geometry(2,2,function(){this.vertices.push(new r.Vector(t,e,0)),this.vertices.push(new r.Vector(i,n,0)),this.vertices.push(new r.Vector(o,s,0)),this.vertices.push(new r.Vector(a,h,0)),this.uvs.push(0,0,1,0,1,1,0,1),this.strokeIndices=[[0,1],[1,2],[2,3],[3,0]]});u.computeNormals()._makeTriangleEdges()._edgesToVertices(),u.faces=[[0,1,2],[2,3,0]],this.createBuffers(l,u)}return this.drawBuffers(l),this},r.RendererGL.prototype.bezier=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._bezierDetail||20;this.beginShape();for(var d=0;d<=p;d++){var f=Math.pow(1-d/p,3),m=d/p*3*Math.pow(1-d/p,2),y=3*Math.pow(d/p,2)*(1-d/p),v=Math.pow(d/p,3);this.vertex(t*f+r*m+s*y+l*v,e*f+n*m+a*y+u*v,i*f+o*m+h*y+c*v)}return this.endShape(),this},r.RendererGL.prototype.curve=function(t,e,i,r,n,o,s,a,h,l,u,c){8===arguments.length&&(l=s,u=a,s=n,a=r,n=r=i,i=o=h=c=0);var p=this._pInst._curveDetail;this.beginShape();for(var d=0;d<=p;d++){var f=.5*Math.pow(d/p,3),m=.5*Math.pow(d/p,2),y=d/p*.5,v=f*(3*r-t-3*s+l)+m*(2*t-5*r+4*s-l)+y*(-t+s)+2*r*.5,g=f*(3*n-e-3*a+u)+m*(2*e-5*n+4*a-u)+y*(-e+a)+2*n*.5,_=f*(3*o-i-3*h+c)+m*(2*i-5*o+4*h-c)+y*(-i+h)+2*o*.5;this.vertex(v,g,_)}return this.endShape(),this},r.RendererGL.prototype.line=function(){return 6===arguments.length?(this.beginShape(),this.vertex(arguments[0],arguments[1],arguments[2]),this.vertex(arguments[3],arguments[4],arguments[5]),this.endShape()):4===arguments.length&&(this.beginShape(),this.vertex(arguments[0],arguments[1],0),this.vertex(arguments[2],arguments[3],0),this.endShape()),this},r.RendererGL.prototype.bezierVertex=function(){if(0===this.immediateMode._bezierVertex.length)throw Error("vertex() must be used once before calling bezierVertex()");var t,e,i,r,n,o=[],s=[],a=[],h=arguments.length;if(t=0,0===this._lookUpTableBezier.length||this._lutBezierDetail!==this._pInst._curveDetail){this._lookUpTableBezier=[],this._lutBezierDetail=this._pInst._curveDetail;for(var l=1/this._lutBezierDetail,u=0,c=1,p=0;u<1;){if(t=parseFloat(u.toFixed(6)),this._lookUpTableBezier[p]=this._bezierCoefficients(t),c.toFixed(6)===l.toFixed(6)){t=parseFloat(c.toFixed(6))+parseFloat(u.toFixed(6)),++p,this._lookUpTableBezier[p]=this._bezierCoefficients(t);break}u+=l,c-=l,++p}}var d=this._lookUpTableBezier.length;if(6===h){for(this.isBezier=!0,o=[this.immediateMode._bezierVertex[0],arguments[0],arguments[2],arguments[4]],s=[this.immediateMode._bezierVertex[1],arguments[1],arguments[3],arguments[5]],n=0;n0&&this.mouseY0){var i=this._renderer._curCamera;void 0===t&&(t=1),void 0===e&&(e=t),!0!==this.contextMenuDisabled&&(this.canvas.oncontextmenu=function(){return!1},this._setProperty("contextMenuDisabled",!0)),!0!==this.wheelDefaultDisabled&&(this.canvas.onwheel=function(){return!1},this._setProperty("wheelDefaultDisabled",!0));var n=this.height0?this._renderer._curCamera._orbit(0,0,.5*n):this._renderer._curCamera._orbit(0,0,-.5*n)),this.mouseIsPressed)if(this.mouseButton===this.LEFT){var o=-t*(this.mouseX-this.pmouseX)/n,s=e*(this.mouseY-this.pmouseY)/n;this._renderer._curCamera._orbit(o,s,0)}else if(this.mouseButton===this.RIGHT){var a=i._getLocalAxes(),h=Math.sqrt(a.x[0]*a.x[0]+a.x[2]*a.x[2]);0!==h&&(a.x[0]/=h,a.x[2]/=h);var l=Math.sqrt(a.y[0]*a.y[0]+a.y[2]*a.y[2]);0!==l&&(a.y[0]/=l,a.y[2]/=l);var u=-1*t*(this.mouseX-this.pmouseX),c=-1*e*(this.mouseY-this.pmouseY);i.setPosition(i.eyeX+u*a.x[0]+c*a.z[0],i.eyeY,i.eyeZ+u*a.x[2]+c*a.z[2])}return this}},r.prototype.debugMode=function(){this._assert3d("debugMode"),r._validateParameters("debugMode",arguments);for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1);arguments[0]===n.GRID?this.registerMethod("post",this._grid.call(this,arguments[1],arguments[2],arguments[3],arguments[4],arguments[5])):arguments[0]===n.AXES?this.registerMethod("post",this._axesIcon.call(this,arguments[1],arguments[2],arguments[3],arguments[4])):(this.registerMethod("post",this._grid.call(this,arguments[0],arguments[1],arguments[2],arguments[3],arguments[4])),this.registerMethod("post",this._axesIcon.call(this,arguments[5],arguments[6],arguments[7],arguments[8])))},r.prototype.noDebugMode=function(){this._assert3d("noDebugMode");for(var t=this._registeredMethods.post.length-1;t>=0;t--)this._registeredMethods.post[t].toString()!==this._grid().toString()&&this._registeredMethods.post[t].toString()!==this._axesIcon().toString()||this._registeredMethods.post.splice(t,1)},r.prototype._grid=function(t,e,i,r,n){void 0===t&&(t=this.width/2),void 0===e&&(e=Math.round(t/30)<4?4:Math.round(t/30)),void 0===i&&(i=0),void 0===r&&(r=0),void 0===n&&(n=0);var o=t/e,s=t/2;return function(){this.push(),this.stroke(255*this._renderer.curStrokeColor[0],255*this._renderer.curStrokeColor[1],255*this._renderer.curStrokeColor[2]),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]);for(var t=0;t<=e;t++)this.beginShape(this.LINES),this.vertex(-s+i,r,t*o-s+n),this.vertex(+s+i,r,t*o-s+n),this.endShape();for(var a=0;a<=e;a++)this.beginShape(this.LINES),this.vertex(a*o-s+i,r,-s+n),this.vertex(a*o-s+i,r,+s+n),this.endShape();this.pop()}},r.prototype._axesIcon=function(t,e,i,r){return void 0===t&&(t=this.width/20>40?this.width/20:40),void 0===e&&(e=-this.width/4),void 0===i&&(i=e),void 0===r&&(r=e),function(){this.push(),this._renderer.uMVMatrix.set(this._renderer._curCamera.cameraMatrix.mat4[0],this._renderer._curCamera.cameraMatrix.mat4[1],this._renderer._curCamera.cameraMatrix.mat4[2],this._renderer._curCamera.cameraMatrix.mat4[3],this._renderer._curCamera.cameraMatrix.mat4[4],this._renderer._curCamera.cameraMatrix.mat4[5],this._renderer._curCamera.cameraMatrix.mat4[6],this._renderer._curCamera.cameraMatrix.mat4[7],this._renderer._curCamera.cameraMatrix.mat4[8],this._renderer._curCamera.cameraMatrix.mat4[9],this._renderer._curCamera.cameraMatrix.mat4[10],this._renderer._curCamera.cameraMatrix.mat4[11],this._renderer._curCamera.cameraMatrix.mat4[12],this._renderer._curCamera.cameraMatrix.mat4[13],this._renderer._curCamera.cameraMatrix.mat4[14],this._renderer._curCamera.cameraMatrix.mat4[15]),this.strokeWeight(2),this.stroke(255,0,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e+t,i,r),this.endShape(),this.stroke(0,255,0),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i+t,r),this.endShape(),this.stroke(0,0,255),this.beginShape(this.LINES),this.vertex(e,i,r),this.vertex(e,i,r+t),this.endShape(),this.pop()}},e.exports=r},{"../core/constants":18,"../core/main":24}],66:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.ambientLight=function(t,e,i,n){this._assert3d("ambientLight"),r._validateParameters("ambientLight",arguments);var o=this.color.apply(this,arguments),s=this._renderer._useLightShader();return s.setUniform("uUseLighting",!0),s.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.ambientLightColors.push(o._array[0],o._array[1],o._array[2]),s.setUniform("uAmbientColor",this._renderer.ambientLightColors),s.setUniform("uAmbientLightCount",this._renderer.ambientLightColors.length/3),this},r.prototype.directionalLight=function(t,e,i,n,o,s){this._assert3d("directionalLight"),r._validateParameters("directionalLight",arguments);var a,h=this._renderer._useLightShader();a=t instanceof r.Color?t:this.color(t,e,i);var l,u,c,p=arguments[arguments.length-1];"number"==typeof p?(l=arguments[arguments.length-3],u=arguments[arguments.length-2],c=arguments[arguments.length-1]):(l=p.x,u=p.y,c=p.z),h.setUniform("uUseLighting",!0),h.setUniform("uMaterialColor",this._renderer.curFillColor);var d=Math.sqrt(l*l+u*u+c*c);return this._renderer.directionalLightDirections.push(l/d,u/d,c/d),h.setUniform("uLightingDirection",this._renderer.directionalLightDirections),this._renderer.directionalLightColors.push(a._array[0],a._array[1],a._array[2]),h.setUniform("uDirectionalColor",this._renderer.directionalLightColors),h.setUniform("uDirectionalLightCount",this._renderer.directionalLightColors.length/3),this},r.prototype.pointLight=function(t,e,i,n,o,s){var a;this._assert3d("pointLight"),r._validateParameters("pointLight",arguments),a=t instanceof r.Color?t:this.color(t,e,i);var h,l,u,c=arguments[arguments.length-1];"number"==typeof c?(h=arguments[arguments.length-3],l=arguments[arguments.length-2],u=arguments[arguments.length-1]):(h=c.x,l=c.y,u=c.z);var p=this._renderer._useLightShader();return p.setUniform("uUseLighting",!0),p.setUniform("uMaterialColor",this._renderer.curFillColor),this._renderer.pointLightPositions.push(h,l,u),p.setUniform("uPointLightLocation",this._renderer.pointLightPositions),this._renderer.pointLightColors.push(a._array[0],a._array[1],a._array[2]),p.setUniform("uPointLightColor",this._renderer.pointLightColors),p.setUniform("uPointLightCount",this._renderer.pointLightColors.length/3),this},e.exports=r},{"../core/main":24}],67:[function(t,e,i){"use strict";var r=t("../core/main");t("./p5.Geometry"),r.prototype.loadModel=function(t){var e,i,n;r._validateParameters("loadModel",arguments),"boolean"==typeof arguments[1]?(e=arguments[1],i=arguments[2],n=arguments[3]):(e=!1,i=arguments[1],n=arguments[2]);var o=new r.Geometry;o.gid=t+"|"+e;var s=this;return this.loadStrings(t,function(t){(function(t,e){for(var i={v:[],vt:[],vn:[]},n={},o=0;o0)if("v"===s[0]||"vn"===s[0]){var a=new r.Vector(parseFloat(s[1]),parseFloat(s[2]),parseFloat(s[3]));i[s[0]].push(a)}else if("vt"===s[0]){var h=[parseFloat(s[1]),parseFloat(s[2])];i[s[0]].push(h)}else if("f"===s[0])for(var l=3;l0&&(this._renderer.geometryInHash(t.gid)||(t._makeTriangleEdges()._edgesToVertices(),this._renderer.createBuffers(t.gid,t)),this._renderer.drawBuffers(t.gid))},e.exports=r},{"../core/main":24,"./p5.Geometry":70}],68:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");t("./p5.Texture"),r.prototype.loadShader=function(t,e){r._validateParameters("loadShader",arguments);var i=new r.Shader,n=this,o=!1,s=!1;return this.loadStrings(e,function(t){i._fragSrc=t.join("\n"),o=!0,s&&n._decrementPreload()}),this.loadStrings(t,function(t){i._vertSrc=t.join("\n"),s=!0,o&&n._decrementPreload()}),i},r.prototype.createShader=function(t,e){return this._assert3d("createShader"),r._validateParameters("createShader",arguments),new r.Shader(this._renderer,t,e)},r.prototype.shader=function(t){return this._assert3d("shader"),r._validateParameters("shader",arguments),void 0===t._renderer&&(t._renderer=this._renderer),t.isStrokeShader()?this._renderer.setStrokeShader(t):this._renderer.setFillShader(t),this},r.prototype.normalMaterial=function(){return this._assert3d("normalMaterial"),r._validateParameters("normalMaterial",arguments),this._renderer.drawMode=n.FILL,this._renderer.setFillShader(this._renderer._getNormalShader()),this._renderer.curFillColor=[1,1,1,1],this.noStroke(),this},r.prototype.texture=function(t){this._assert3d("texture"),r._validateParameters("texture",arguments),this._renderer.drawMode=n.TEXTURE;var e=this._renderer._useLightShader();return e.setUniform("uSpecular",!1),e.setUniform("isTexture",!0),e.setUniform("uSampler",t),this.noStroke(),this},r.prototype.ambientMaterial=function(t,e,i,n){this._assert3d("ambientMaterial"),r._validateParameters("ambientMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!1),s.setUniform("isTexture",!1),this},r.prototype.specularMaterial=function(t,e,i,n){this._assert3d("specularMaterial"),r._validateParameters("specularMaterial",arguments);var o=r.prototype.color.apply(this,arguments);this._renderer.curFillColor=o._array;var s=this._renderer._useLightShader();return s.setUniform("uMaterialColor",this._renderer.curFillColor),s.setUniform("uSpecular",!0),s.setUniform("isTexture",!1),this},r.RendererGL.prototype._applyColorBlend=function(t){var e=this.GL,i=this.drawMode===n.TEXTURE;return i||t[t.length-1]<1?(e.depthMask(i),e.enable(e.BLEND),e.blendEquation(e.FUNC_ADD),e.blendFunc(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA)):(e.depthMask(!0),e.disable(e.BLEND)),t},e.exports=r},{"../core/constants":18,"../core/main":24,"./p5.Texture":76}],69:[function(t,e,i){"use strict";var r=t("../core/main");r.prototype.camera=function(){return this._assert3d("camera"),r._validateParameters("camera",arguments),this._renderer._curCamera.camera.apply(this._renderer._curCamera,arguments),this},r.prototype.perspective=function(){return this._assert3d("perspective"),r._validateParameters("perspective",arguments),this._renderer._curCamera.perspective.apply(this._renderer._curCamera,arguments),this},r.prototype.ortho=function(){return this._assert3d("ortho"),r._validateParameters("ortho",arguments),this._renderer._curCamera.ortho.apply(this._renderer._curCamera,arguments),this},r.prototype.createCamera=function(){this._assert3d("createCamera");var t=new r.Camera(this._renderer);return t._computeCameraDefaultSettings(),t._setDefaultCamera(),this._renderer._curCamera=t,t},r.Camera=function(t){this._renderer=t,this.cameraType="default",this.cameraMatrix=new r.Matrix,this.projMatrix=new r.Matrix},r.Camera.prototype.perspective=function(t,e,i,n){void 0===t?(t=this.defaultCameraFOV,this.cameraFOV=t):this.cameraFOV=this._renderer._pInst._toRadians(t),void 0===e&&(e=this.defaultAspectRatio),void 0===i&&(i=this.defaultCameraNear),void 0===n&&(n=this.defaultCameraFar),i<=1e-4&&(i=.01,console.log("Avoid perspective near plane values close to or below 0. Setting value to 0.01.")),nMath.PI?h=Math.PI:h<=0&&(h=.001);var l=Math.sin(h)*s*Math.sin(a),u=Math.cos(h)*s,c=Math.sin(h)*s*Math.cos(a);this.camera(l+this.centerX,u+this.centerY,c+this.centerZ,this.centerX,this.centerY,this.centerZ,0,1,0)},r.Camera.prototype._isActive=function(){return this===this._renderer._curCamera},r.prototype.setCamera=function(t){this._renderer._curCamera=t,this._renderer.uPMatrix.set(t.projMatrix.mat4[0],t.projMatrix.mat4[1],t.projMatrix.mat4[2],t.projMatrix.mat4[3],t.projMatrix.mat4[4],t.projMatrix.mat4[5],t.projMatrix.mat4[6],t.projMatrix.mat4[7],t.projMatrix.mat4[8],t.projMatrix.mat4[9],t.projMatrix.mat4[10],t.projMatrix.mat4[11],t.projMatrix.mat4[12],t.projMatrix.mat4[13],t.projMatrix.mat4[14],t.projMatrix.mat4[15])},e.exports=r.Camera},{"../core/main":24}],70:[function(t,e,i){"use strict";var r=t("../core/main");r.Geometry=function(t,e,i){return this.vertices=[],this.lineVertices=[],this.lineNormals=[],this.vertexNormals=[],this.faces=[],this.uvs=[],this.edges=[],this.detailX=void 0!==t?t:1,this.detailY=void 0!==e?e:1,i instanceof Function&&i.call(this),this},r.Geometry.prototype.computeFaces=function(){this.faces.length=0;for(var t,e,i,r,n=this.detailX+1,o=0;o1&&(u=1),h.mult(Math.asin(u)/l))},r.Geometry.prototype.computeNormals=function(){var t,e=this.vertexNormals,i=this.vertices,n=this.faces;for(e.length=0,t=0;tthis.vertices.length-1-this.detailX;e--)t.add(this.vertexNormals[e]);for(t=r.Vector.div(t,this.detailX),e=this.vertices.length-1;e>this.vertices.length-1-this.detailX;e--)this.vertexNormals[e]=t;return this},r.Geometry.prototype._makeTriangleEdges=function(){if(this.edges.length=0,Array.isArray(this.strokeIndices))for(var t=0,e=this.strokeIndices.length;t0){for(var t=this.vertices[0].copy(),e=this.vertices[0].copy(),i=0;i1){if(this._useImmediateModeShader(),this._doStroke&&this.drawMode!==n.TEXTURE){for(var h=0;h1e3){var e=Object.keys(this.gHash)[0];delete this.gHash[e],n--}this.gHash[t]={}},r.RendererGL.prototype._freeBuffers=function(t){var e=this.gHash[t];if(e){delete this.gHash[t],n--;var i=this.GL;e.vertexBuffer&&i.deleteBuffer(e.vertexBuffer),e.normalBuffer&&i.deleteBuffer(e.normalBuffer),e.lineNormalBuffer&&i.deleteBuffer(e.lineNormalBuffer),e.uvBuffer&&i.deleteBuffer(e.uvBuffer),e.indexBuffer&&i.deleteBuffer(e.indexBuffer),e.lineVertexBuffer&&i.deleteBuffer(e.lineVertexBuffer)}},r.RendererGL.prototype.createBuffers=function(t,e){var i=this.GL;this._initBufferDefaults(t);var r=this.gHash[t];return r.numberOfItems=3*e.faces.length,r.lineVertexCount=e.lineVertices.length,this._useColorShader(),this.curStrokeShader.attributes.aPosition&&(r.lineVertexBuffer=i.createBuffer(),this._bindBuffer(r.lineVertexBuffer,i.ARRAY_BUFFER,this._flatten(e.lineVertices),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),this.curStrokeShader.attributes.aDirection&&(r.lineNormalBuffer=i.createBuffer(),this._bindBuffer(r.lineNormalBuffer,i.ARRAY_BUFFER,this._flatten(e.lineNormals),Float32Array,i.STATIC_DRAW),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aPosition&&(r.vertexBuffer=i.createBuffer(),this._bindBuffer(r.vertexBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertices),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0)),r.indexBuffer=i.createBuffer(),this._bindBuffer(r.indexBuffer,i.ELEMENT_ARRAY_BUFFER,this._flatten(e.faces),Uint16Array,i.STATIC_DRAW),this.curFillShader.attributes.aNormal&&(r.normalBuffer=i.createBuffer(),this._bindBuffer(r.normalBuffer,i.ARRAY_BUFFER,this._vToNArray(e.vertexNormals),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,i.FLOAT,!1,0,0)),this.curFillShader.attributes.aTexCoord&&(r.uvBuffer=i.createBuffer(),this._bindBuffer(r.uvBuffer,i.ARRAY_BUFFER,this._flatten(e.uvs),Float32Array,i.STATIC_DRAW),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,i.FLOAT,!1,0,0)),r},r.RendererGL.prototype.drawBuffers=function(t){var e=this.GL;this._useColorShader();var i=this.gHash[t];return this._doStroke&&i.lineVertexCount>0&&(this.curStrokeShader.bindShader(),i.lineVertexBuffer&&(this._bindBuffer(i.lineVertexBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.lineNormalBuffer&&(this._bindBuffer(i.lineNormalBuffer,e.ARRAY_BUFFER),this.curStrokeShader.enableAttrib(this.curStrokeShader.attributes.aDirection.location,4,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curStrokeColor),this._drawArrays(e.TRIANGLES,t),this.curStrokeShader.unbindShader()),!1!==this._doFill&&(this.curFillShader.bindShader(),i.vertexBuffer&&(this._bindBuffer(i.vertexBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aPosition.location,3,e.FLOAT,!1,0,0)),i.indexBuffer&&this._bindBuffer(i.indexBuffer,e.ELEMENT_ARRAY_BUFFER),i.normalBuffer&&(this._bindBuffer(i.normalBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aNormal.location,3,e.FLOAT,!1,0,0)),i.uvBuffer&&(this._bindBuffer(i.uvBuffer,e.ARRAY_BUFFER),this.curFillShader.enableAttrib(this.curFillShader.attributes.aTexCoord.location,2,e.FLOAT,!1,0,0)),this._applyColorBlend(this.curFillColor),this._drawElements(e.TRIANGLES,t),this.curFillShader.unbindShader()),this},r.RendererGL.prototype.drawBuffersScaled=function(t,e,i,r){var n=this.uMVMatrix.copy();try{this.uMVMatrix.scale(e,i,r),this.drawBuffers(t)}finally{this.uMVMatrix=n}},r.RendererGL.prototype._drawArrays=function(t,e){return this.GL.drawArrays(t,0,this.gHash[e].lineVertexCount),this._pInst._pixelsDirty=!0,this},r.RendererGL.prototype._drawElements=function(t,e){this.GL.drawElements(t,this.gHash[e].numberOfItems,this.GL.UNSIGNED_SHORT,0),this._pInst._pixelsDirty=!0},r.RendererGL.prototype._drawPoints=function(t,e){var i=this.GL;this._bindBuffer(e,i.ARRAY_BUFFER,this._vToNArray(t),Float32Array,i.STATIC_DRAW),this.curPointShader.enableAttrib(this.curPointShader.attributes.aPosition.location,3,i.FLOAT,!1,0,0),i.drawArrays(i.Points,0,t.length)},e.exports=r.RendererGL},{"../core/main":24}],74:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants"),o=t("libtess");t("./p5.Shader"),t("./p5.Camera"),t("../core/p5.Renderer"),t("./p5.Matrix");var s={immediateVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uResolution;\nuniform float uPointSize;\n\nvarying vec4 vColor;\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n gl_PointSize = uPointSize;\n}\n",vertexColorVert:"attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vColor = aVertexColor;\n}\n",vertexColorFrag:"precision mediump float;\nvarying vec4 vColor;\nvoid main(void) {\n gl_FragColor = vColor;\n}",normalVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\n\nvarying vec3 vVertexNormal;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vVertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertTexCoord = aTexCoord;\n}\n",normalFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nvoid main(void) {\n gl_FragColor = vec4(vVertexNormal, 1.0);\n}",basicFrag:"precision mediump float;\nvarying vec3 vVertexNormal;\nuniform vec4 uMaterialColor;\nvoid main(void) {\n gl_FragColor = uMaterialColor;\n}",lightVert:"attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uViewMatrix;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nuniform vec3 uAmbientColor[8];\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nvarying vec3 vVertexNormal;\nvarying vec2 vVertTexCoord;\nvarying vec3 vLightWeighting;\n\nvoid main(void){\n\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\n vec3 vertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n vVertexNormal = vertexNormal;\n vVertTexCoord = aTexCoord;\n\n vec4 mvPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n vec3 eyeDirection = normalize(-mvPosition.xyz);\n\n float shininess = 32.0;\n float specularFactor = 2.0;\n float diffuseFactor = 0.3;\n\n vec3 ambientLightFactor = vec3(0.0);\n\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n ambientLightFactor += uAmbientColor[i];\n }\n\n\n vec3 directionalLightFactor = vec3(0.0);\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n vec3 dir = uLightingDirection[j];\n float directionalLightWeighting = max(dot(vertexNormal, -dir), 0.0);\n directionalLightFactor += uDirectionalColor[j] * directionalLightWeighting;\n }\n\n\n vec3 pointLightFactor = vec3(0.0);\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n vec3 loc = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightDirection = normalize(loc - mvPosition.xyz);\n\n float directionalLightWeighting = max(dot(vertexNormal, lightDirection), 0.0);\n\n float specularLightWeighting = 0.0;\n if (uSpecular ){\n vec3 reflectionDirection = reflect(-lightDirection, vertexNormal);\n specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess);\n }\n\n pointLightFactor += uPointLightColor[k] * (specularFactor * specularLightWeighting\n + directionalLightWeighting * diffuseFactor);\n }\n\n vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightFactor;\n}\n",lightTextureFrag:"precision mediump float;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nvarying vec3 vLightWeighting;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n gl_FragColor = isTexture ? texture2D(uSampler, vVertTexCoord) : uMaterialColor;\n if (uUseLighting)\n gl_FragColor.rgb *= vLightWeighting;\n}",phongVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform vec3 uAmbientColor[8];\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvoid main(void){\n\n vec4 viewModelPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n\n // Pass varyings to fragment shader\n vViewPosition = viewModelPosition.xyz;\n gl_Position = uProjectionMatrix * viewModelPosition; \n\n vNormal = normalize(uNormalMatrix * normalize(aNormal));\n vTexCoord = aTexCoord;\n\n vAmbientColor = vec3(0.0);\n for (int i = 0; i < 8; i++) {\n if (uAmbientLightCount == i) break;\n vAmbientColor += uAmbientColor[i];\n }\n}\n",phongFrag:"precision mediump float;\n\n//uniform mat4 uModelViewMatrix;\nuniform mat4 uViewMatrix;\n\nuniform vec4 uMaterialColor;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uUseLighting;\n\nuniform vec3 uLightingDirection[8];\nuniform vec3 uDirectionalColor[8];\nuniform vec3 uPointLightLocation[8];\nuniform vec3 uPointLightColor[8];\nuniform bool uSpecular;\n\nuniform int uDirectionalLightCount;\nuniform int uPointLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvec3 V;\nvec3 N;\n\nconst float shininess = 32.0;\nconst float specularFactor = 2.0;\nconst float diffuseFactor = 0.73;\n\nstruct LightResult {\n\tfloat specular;\n\tfloat diffuse;\n};\n\nfloat phongSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float shininess) {\n\n vec3 R = normalize(reflect(-lightDirection, surfaceNormal)); \n return pow(max(0.0, dot(R, viewDirection)), shininess);\n}\n\nfloat lambertDiffuse(\n vec3 lightDirection,\n vec3 surfaceNormal) {\n return max(0.0, dot(-lightDirection, surfaceNormal));\n}\n\nLightResult light(vec3 lightVector) {\n\n vec3 L = normalize(lightVector);\n\n //compute our diffuse & specular terms\n LightResult lr;\n if (uSpecular)\n lr.specular = phongSpecular(L, V, N, shininess);\n lr.diffuse = lambertDiffuse(L, N);\n return lr;\n}\n\nvoid main(void) {\n\n V = normalize(vViewPosition);\n N = vNormal;\n\n vec3 diffuse = vec3(0.0);\n float specular = 0.0;\n\n for (int j = 0; j < 8; j++) {\n if (uDirectionalLightCount == j) break;\n\n LightResult result = light(uLightingDirection[j]);\n diffuse += result.diffuse * uDirectionalColor[j];\n specular += result.specular;\n }\n\n for (int k = 0; k < 8; k++) {\n if (uPointLightCount == k) break;\n\n vec3 lightPosition = (uViewMatrix * vec4(uPointLightLocation[k], 1.0)).xyz;\n vec3 lightVector = vViewPosition - lightPosition;\n\t\n //calculate attenuation\n float lightDistance = length(lightVector);\n float falloff = 500.0 / (lightDistance + 500.0);\n\n LightResult result = light(lightVector);\n diffuse += result.diffuse * falloff * uPointLightColor[k];\n specular += result.specular * falloff;\n }\n\n gl_FragColor = isTexture ? texture2D(uSampler, vTexCoord) : uMaterialColor;\n gl_FragColor.rgb = gl_FragColor.rgb * (diffuse * diffuseFactor + vAmbientColor) + specular * specularFactor;\n}",fontVert:"precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nuniform vec4 uGlyphRect;\nuniform float uGlyphOffset;\n\nvarying vec2 vTexCoord;\nvarying float w;\n\nvoid main() {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n\n // scale by the size of the glyph's rectangle\n positionVec4.xy *= uGlyphRect.zw - uGlyphRect.xy;\n\n // move to the corner of the glyph\n positionVec4.xy += uGlyphRect.xy;\n\n // move to the letter's line offset\n positionVec4.x += uGlyphOffset;\n \n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vTexCoord = aTexCoord;\n w = gl_Position.w;\n}\n",fontFrag:"#extension GL_OES_standard_derivatives : enable\nprecision mediump float;\n\n#if 0\n // simulate integer math using floats\n\t#define int float\n\t#define ivec2 vec2\n\t#define INT(x) float(x)\n\n\tint ifloor(float v) { return floor(v); }\n\tivec2 ifloor(vec2 v) { return floor(v); }\n\n#else\n // use native integer math\n\tprecision mediump int;\n\t#define INT(x) x\n\n\tint ifloor(float v) { return int(v); }\n\tint ifloor(int v) { return v; }\n\tivec2 ifloor(vec2 v) { return ivec2(v); }\n\n#endif\n\nuniform sampler2D uSamplerStrokes;\nuniform sampler2D uSamplerRowStrokes;\nuniform sampler2D uSamplerRows;\nuniform sampler2D uSamplerColStrokes;\nuniform sampler2D uSamplerCols;\n\nuniform ivec2 uStrokeImageSize;\nuniform ivec2 uCellsImageSize;\nuniform ivec2 uGridImageSize;\n\nuniform ivec2 uGridOffset;\nuniform ivec2 uGridSize;\nuniform vec4 uMaterialColor;\n\nvarying vec2 vTexCoord;\n\n// some helper functions\nint round(float v) { return ifloor(v + 0.5); }\nivec2 round(vec2 v) { return ifloor(v + 0.5); }\nfloat saturate(float v) { return clamp(v, 0.0, 1.0); }\nvec2 saturate(vec2 v) { return clamp(v, 0.0, 1.0); }\n\nint mul(float v1, int v2) {\n return ifloor(v1 * float(v2));\n}\n\nivec2 mul(vec2 v1, ivec2 v2) {\n return ifloor(v1 * vec2(v2) + 0.5);\n}\n\n// unpack a 16-bit integer from a float vec2\nint getInt16(vec2 v) {\n ivec2 iv = round(v * 255.0);\n return iv.x * INT(128) + iv.y;\n}\n\nvec2 pixelScale;\nvec2 coverage = vec2(0.0);\nvec2 weight = vec2(0.5);\nconst float minDistance = 1.0/8192.0;\nconst float hardness = 1.05; // amount of antialias\n\n// the maximum number of curves in a glyph\nconst int N = INT(250);\n\n// retrieves an indexed pixel from a sampler\nvec4 getTexel(sampler2D sampler, int pos, ivec2 size) {\n int width = size.x;\n int y = ifloor(pos / width);\n int x = pos - y * width; // pos % width\n\n return texture2D(sampler, (vec2(x, y) + 0.5) / vec2(size));\n}\n\nvoid calulateCrossings(vec2 p0, vec2 p1, vec2 p2, out vec2 C1, out vec2 C2) {\n\n // get the coefficients of the quadratic in t\n vec2 a = p0 - p1 * 2.0 + p2;\n vec2 b = p0 - p1;\n vec2 c = p0 - vTexCoord;\n\n // found out which values of 't' it crosses the axes\n vec2 surd = sqrt(max(vec2(0.0), b * b - a * c));\n vec2 t1 = ((b - surd) / a).yx;\n vec2 t2 = ((b + surd) / a).yx;\n\n // approximate straight lines to avoid rounding errors\n if (abs(a.y) < 0.001)\n t1.x = t2.x = c.y / (2.0 * b.y);\n\n if (abs(a.x) < 0.001)\n t1.y = t2.y = c.x / (2.0 * b.x);\n\n // plug into quadratic formula to find the corrdinates of the crossings\n C1 = ((a * t1 - b * 2.0) * t1 + c) * pixelScale;\n C2 = ((a * t2 - b * 2.0) * t2 + c) * pixelScale;\n}\n\nvoid coverageX(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n // determine on which side of the x-axis the points lie\n bool y0 = p0.y > vTexCoord.y;\n bool y1 = p1.y > vTexCoord.y;\n bool y2 = p2.y > vTexCoord.y;\n\n // could web be under the curve (after t1)?\n if (y1 ? !y2 : y0) {\n // add the coverage for t1\n coverage.x += saturate(C1.x + 0.5);\n // calculate the anti-aliasing for t1\n weight.x = min(weight.x, abs(C1.x));\n }\n\n // are we outside the curve (after t2)?\n if (y1 ? !y0 : y2) {\n // subtract the coverage for t2\n coverage.x -= saturate(C2.x + 0.5);\n // calculate the anti-aliasing for t2\n weight.x = min(weight.x, abs(C2.x));\n }\n}\n\n// this is essentially the same as coverageX, but with the axes swapped\nvoid coverageY(vec2 p0, vec2 p1, vec2 p2) {\n\n vec2 C1, C2;\n calulateCrossings(p0, p1, p2, C1, C2);\n\n bool x0 = p0.x > vTexCoord.x;\n bool x1 = p1.x > vTexCoord.x;\n bool x2 = p2.x > vTexCoord.x;\n\n if (x1 ? !x2 : x0) {\n coverage.y -= saturate(C1.y + 0.5);\n weight.y = min(weight.y, abs(C1.y));\n }\n\n if (x1 ? !x0 : x2) {\n coverage.y += saturate(C2.y + 0.5);\n weight.y = min(weight.y, abs(C2.y));\n }\n}\n\nvoid main() {\n\n // calculate the pixel scale based on screen-coordinates\n pixelScale = hardness / fwidth(vTexCoord);\n\n // which grid cell is this pixel in?\n ivec2 gridCoord = ifloor(vTexCoord * vec2(uGridSize));\n\n // intersect curves in this row\n {\n // the index into the row info bitmap\n int rowIndex = gridCoord.y + uGridOffset.y;\n // fetch the info texel\n vec4 rowInfo = getTexel(uSamplerRows, rowIndex, uGridImageSize);\n // unpack the rowInfo\n int rowStrokeIndex = getInt16(rowInfo.xy);\n int rowStrokeCount = getInt16(rowInfo.zw);\n\n for (int iRowStroke = INT(0); iRowStroke < N; iRowStroke++) {\n if (iRowStroke >= rowStrokeCount)\n break;\n\n // each stroke is made up of 3 points: the start and control point\n // and the start of the next curve.\n // fetch the indices of this pair of strokes:\n vec4 strokeIndices = getTexel(uSamplerRowStrokes, rowStrokeIndex++, uCellsImageSize);\n\n // unpack the stroke index\n int strokePos = getInt16(strokeIndices.xy);\n\n // fetch the two strokes\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n\n // calculate the coverage\n coverageX(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n // intersect curves in this column\n {\n int colIndex = gridCoord.x + uGridOffset.x;\n vec4 colInfo = getTexel(uSamplerCols, colIndex, uGridImageSize);\n int colStrokeIndex = getInt16(colInfo.xy);\n int colStrokeCount = getInt16(colInfo.zw);\n \n for (int iColStroke = INT(0); iColStroke < N; iColStroke++) {\n if (iColStroke >= colStrokeCount)\n break;\n\n vec4 strokeIndices = getTexel(uSamplerColStrokes, colStrokeIndex++, uCellsImageSize);\n\n int strokePos = getInt16(strokeIndices.xy);\n vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n coverageY(stroke0.xy, stroke0.zw, stroke1.xy);\n }\n }\n\n weight = saturate(1.0 - weight * 2.0);\n float distance = max(weight.x + weight.y, minDistance); // manhattan approx.\n float antialias = abs(dot(coverage, weight) / distance);\n float cover = min(abs(coverage.x), abs(coverage.y));\n gl_FragColor = uMaterialColor;\n gl_FragColor.a *= saturate(max(antialias, cover));\n}",lineVert:"/*\n Part of the Processing project - http://processing.org\n Copyright (c) 2012-15 The Processing Foundation\n Copyright (c) 2004-12 Ben Fry and Casey Reas\n Copyright (c) 2001-04 Massachusetts Institute of Technology\n This library is free software; you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, version 2.1.\n This library is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General\n Public License along with this library; if not, write to the\n Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n Boston, MA 02111-1307 USA\n*/\n\n#define PROCESSING_LINE_SHADER\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uStrokeWeight;\n\nuniform vec4 uViewport;\n\n// using a scale <1 moves the lines towards the camera\n// in order to prevent popping effects due to half of\n// the line disappearing behind the geometry faces.\nvec3 scale = vec3(0.9995);\n\nattribute vec4 aPosition;\nattribute vec4 aDirection;\n \nvoid main() {\n vec4 posp = uModelViewMatrix * aPosition;\n vec4 posq = uModelViewMatrix * (aPosition + vec4(aDirection.xyz, 0));\n\n // Moving vertices slightly toward the camera\n // to avoid depth-fighting with the fill triangles.\n // Discussed here:\n // http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=252848 \n posp.xyz = posp.xyz * scale;\n posq.xyz = posq.xyz * scale;\n\n vec4 p = uProjectionMatrix * posp;\n vec4 q = uProjectionMatrix * posq;\n\n // formula to convert from clip space (range -1..1) to screen space (range 0..[width or height])\n // screen_p = (p.xy/p.w + <1,1>) * 0.5 * uViewport.zw\n\n // prevent division by W by transforming the tangent formula (div by 0 causes\n // the line to disappear, see https://github.com/processing/processing/issues/5183)\n // t = screen_q - screen_p\n //\n // tangent is normalized and we don't care which aDirection it points to (+-)\n // t = +- normalize( screen_q - screen_p )\n // t = +- normalize( (q.xy/q.w+<1,1>)*0.5*uViewport.zw - (p.xy/p.w+<1,1>)*0.5*uViewport.zw )\n //\n // extract common factor, <1,1> - <1,1> cancels out\n // t = +- normalize( (q.xy/q.w - p.xy/p.w) * 0.5 * uViewport.zw )\n //\n // convert to common divisor\n // t = +- normalize( ((q.xy*p.w - p.xy*q.w) / (p.w*q.w)) * 0.5 * uViewport.zw )\n //\n // remove the common scalar divisor/factor, not needed due to normalize and +-\n // (keep uViewport - can't remove because it has different components for x and y\n // and corrects for aspect ratio, see https://github.com/processing/processing/issues/5181)\n // t = +- normalize( (q.xy*p.w - p.xy*q.w) * uViewport.zw )\n\n vec2 tangent = normalize((q.xy*p.w - p.xy*q.w) * uViewport.zw);\n\n // flip tangent to normal (it's already normalized)\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n float thickness = aDirection.w * uStrokeWeight;\n vec2 offset = normal * thickness / 2.0;\n\n // Perspective ---\n // convert from world to clip by multiplying with projection scaling factor\n // to get the right thickness (see https://github.com/processing/processing/issues/5182)\n // invert Y, projections in Processing invert Y\n vec2 perspScale = (uProjectionMatrix * vec4(1, -1, 0, 0)).xy;\n\n // No Perspective ---\n // multiply by W (to cancel out division by W later in the pipeline) and\n // convert from screen to clip (derived from clip to screen above)\n vec2 noPerspScale = p.w / (0.5 * uViewport.zw);\n\n //gl_Position.xy = p.xy + offset.xy * mix(noPerspScale, perspScale, float(perspective > 0));\n gl_Position.xy = p.xy + offset.xy * perspScale;\n gl_Position.zw = p.zw;\n}\n",lineFrag:"precision mediump float;\nprecision mediump int;\n\nuniform vec4 uMaterialColor;\n\nvoid main() {\n gl_FragColor = uMaterialColor;\n}",pointVert:"attribute vec3 aPosition;\nuniform float uPointSize;\nvarying float vStrokeWeight;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvoid main() {\n\tvec4 positionVec4 = vec4(aPosition, 1.0);\n\tgl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\tgl_PointSize = uPointSize;\n\tvStrokeWeight = uPointSize;\n}",pointFrag:"precision mediump float;\nprecision mediump int;\nuniform vec4 uMaterialColor;\nvarying float vStrokeWeight;\n\nvoid main(){\n\tfloat mask = 0.0;\n\n\t// make a circular mask using the gl_PointCoord (goes from 0 - 1 on a point)\n // might be able to get a nicer edge on big strokeweights with smoothstep but slightly less performant\n\n\tmask = step(0.98, length(gl_PointCoord * 2.0 - 1.0));\n\n\t// if strokeWeight is 1 or less lets just draw a square\n\t// this prevents weird artifacting from carving circles when our points are really small\n\t// if strokeWeight is larger than 1, we just use it as is\n\n\tmask = mix(0.0, mask, clamp(floor(vStrokeWeight - 0.5),0.0,1.0));\n\n\t// throw away the borders of the mask\n // otherwise we get weird alpha blending issues\n\n\tif(mask > 0.98){\n discard;\n \t}\n\n \tgl_FragColor = vec4(uMaterialColor.rgb * (1.0 - mask), uMaterialColor.a) ;\n}"};r.RendererGL=function(t,e,i,n){return r.Renderer.call(this,t,e,i),this.attributes={},n=n||{},this.attributes.alpha=void 0===n.alpha||n.alpha,this.attributes.depth=void 0===n.depth||n.depth,this.attributes.stencil=void 0===n.stencil||n.stencil,this.attributes.antialias=void 0!==n.antialias&&n.antialias,this.attributes.premultipliedAlpha=void 0!==n.premultipliedAlpha&&n.premultipliedAlpha,this.attributes.preserveDrawingBuffer=void 0===n.preserveDrawingBuffer||n.preserveDrawingBuffer,this.attributes.perPixelLighting=void 0!==n.perPixelLighting&&n.perPixelLighting,this._initContext(),this.isP3D=!0,this.GL=this.drawingContext,this.ambientLightColors=[],this.directionalLightDirections=[],this.directionalLightColors=[],this.pointLightPositions=[],this.pointLightColors=[],this.uMVMatrix=new r.Matrix,this.uPMatrix=new r.Matrix,this.uNMatrix=new r.Matrix("mat3"),this._curCamera=new r.Camera(this),this._curCamera._computeCameraDefaultSettings(),this._curCamera._setDefaultCamera(),this.gHash={},this._defaultLightShader=void 0,this._defaultImmediateModeShader=void 0,this._defaultNormalShader=void 0,this._defaultColorShader=void 0,this._defaultPointShader=void 0,this.curFillShader=void 0,this.curStrokeShader=void 0,this.curPointShader=void 0,this._useColorShader(),this.setStrokeShader(this._getLineShader()),this._usePointShader(),this._pointVertexBuffer=this.GL.createBuffer(),this.isImmediateDrawing=!1,this.immediateMode={},this.fill(255,255,255,255),this.pointSize=5,this.strokeWeight(1),this.stroke(0,0,0),this.textures=[],this._curveTightness=6,this._lookUpTableBezier=[],this._lookUpTableQuadratic=[],this._lutBezierDetail=0,this._lutQuadraticDetail=0,this._tessy=this._initTessy(),this.fontInfos={},this},r.RendererGL.prototype=Object.create(r.Renderer.prototype),r.RendererGL.prototype._initContext=function(){try{if(this.drawingContext=this.canvas.getContext("webgl",this.attributes)||this.canvas.getContext("experimental-webgl",this.attributes),null===this.drawingContext)throw new Error("Error creating webgl context");console.log("p5.RendererGL: enabled webgl context");var t=this.drawingContext;t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.viewport(0,0,t.drawingBufferWidth,t.drawingBufferHeight),this._viewport=this.drawingContext.getParameter(this.drawingContext.VIEWPORT)}catch(t){throw t}},r.RendererGL.prototype._resetContext=function(t,e,i){var n=this.width,o=this.height,s=this.canvas.id,a=this.canvas;a&&a.parentNode.removeChild(a),(a=document.createElement("canvas")).id=s,this._pInst._userNode?this._pInst._userNode.appendChild(a):document.body.appendChild(a),this._pInst.canvas=a;var h=new r.RendererGL(this._pInst.canvas,this._pInst,!0,t);this._pInst._setProperty("_renderer",h),h.resize(n,o),h._applyDefaults(),this._pInst._elements.push(h),"function"==typeof i&&setTimeout(function(){i.apply(window._renderer,e)},0)},r.prototype.setAttributes=function(t,e){var i;this._assert3d("setAttributes"),void 0!==e?(i={})[t]=e:t instanceof Object&&(i=t),this.push(),this._renderer._resetContext(i),this.pop()},r.RendererGL.prototype._update=function(){this.uMVMatrix.set(this._curCamera.cameraMatrix.mat4[0],this._curCamera.cameraMatrix.mat4[1],this._curCamera.cameraMatrix.mat4[2],this._curCamera.cameraMatrix.mat4[3],this._curCamera.cameraMatrix.mat4[4],this._curCamera.cameraMatrix.mat4[5],this._curCamera.cameraMatrix.mat4[6],this._curCamera.cameraMatrix.mat4[7],this._curCamera.cameraMatrix.mat4[8],this._curCamera.cameraMatrix.mat4[9],this._curCamera.cameraMatrix.mat4[10],this._curCamera.cameraMatrix.mat4[11],this._curCamera.cameraMatrix.mat4[12],this._curCamera.cameraMatrix.mat4[13],this._curCamera.cameraMatrix.mat4[14],this._curCamera.cameraMatrix.mat4[15]),this.ambientLightColors.length=0,this.directionalLightDirections.length=0,this.directionalLightColors.length=0,this.pointLightPositions.length=0,this.pointLightColors.length=0},r.RendererGL.prototype.background=function(){var t=this._pInst.color.apply(this._pInst,arguments),e=t.levels[0]/255,i=t.levels[1]/255,r=t.levels[2]/255,n=t.levels[3]/255;this.GL.clearColor(e,i,r,n),this.GL.depthMask(!0),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.fill=function(t,e,i,o){var s=r.prototype.color.apply(this._pInst,arguments);this.curFillColor=s._array,this.isImmediateDrawing?this.setFillShader(this._getImmediateModeShader()):this.setFillShader(this._getColorShader()),this.drawMode=n.FILL,this.curFillShader.setUniform("uMaterialColor",this.curFillColor)},r.RendererGL.prototype.stroke=function(t,e,i,n){arguments[3]=255;var o=r.prototype.color.apply(this._pInst,arguments);this.curStrokeColor=o._array,this.curStrokeShader.setUniform("uMaterialColor",this.curStrokeColor),this.curPointShader.setUniform("uMaterialColor",o._array)},r.RendererGL.prototype.strokeWeight=function(t){this.curStrokeWeight!==t&&(this.pointSize=t,this.curStrokeWeight=t,this.curStrokeShader.setUniform("uStrokeWeight",t),this.curPointShader.setUniform("uPointSize",t))},r.RendererGL.prototype.get=function(t,e,i,n){return r.Renderer2D.prototype.get.apply(this,[t,e,i,n])},r.RendererGL.prototype.loadPixels=function(){if(!0===this.attributes.preserveDrawingBuffer){var t=this._pInst._pixelDensity,e=this.width,i=this.height;e*=t,i*=t,void 0===this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4)),this.GL.readPixels(0,0,e,i,this.GL.RGBA,this.GL.UNSIGNED_BYTE,this.pixels),this._pInst._setProperty("pixels",this.pixels)}else console.log("loadPixels only works in WebGL when preserveDrawingBuffer is true.")},r.RendererGL.prototype.geometryInHash=function(t){return void 0!==this.gHash[t]},r.RendererGL.prototype.resize=function(t,e){r.Renderer.prototype.resize.call(this,t,e),this.GL.viewport(0,0,this.GL.drawingBufferWidth,this.GL.drawingBufferHeight),this._viewport=this.GL.getParameter(this.GL.VIEWPORT),this._curCamera._resize(),void 0!==this.pixels&&(this.pixels=new Uint8Array(this.GL.drawingBufferWidth*this.GL.drawingBufferHeight*4))},r.RendererGL.prototype.clear=function(){var t=arguments[0]||0,e=arguments[1]||0,i=arguments[2]||0,r=arguments[3]||0;this.GL.clearColor(t,e,i,r),this.GL.clear(this.GL.COLOR_BUFFER_BIT|this.GL.DEPTH_BUFFER_BIT)},r.RendererGL.prototype.translate=function(t,e,i){return t instanceof r.Vector&&(i=t.z,e=t.y,t=t.x),this.uMVMatrix.translate([t,e,i]),this},r.RendererGL.prototype.scale=function(t,e,i){return this.uMVMatrix.scale(t,e,i),this},r.RendererGL.prototype.rotate=function(t,e){return void 0===e?this.rotateZ(t):(arguments[0]=this._pInst._fromRadians(t),r.Matrix.prototype.rotate.apply(this.uMVMatrix,arguments),this)},r.RendererGL.prototype.rotateX=function(t){return this.rotate(t,1,0,0),this},r.RendererGL.prototype.rotateY=function(t){return this.rotate(t,0,1,0),this},r.RendererGL.prototype.rotateZ=function(t){return this.rotate(t,0,0,1),this},r.RendererGL.prototype.push=function(){var t=r.Renderer.prototype.push.apply(this),e=t.properties;return e.uMVMatrix=this.uMVMatrix.copy(),e.uPMatrix=this.uPMatrix.copy(),e._curCamera=this._curCamera,this._curCamera=this._curCamera.copy(),t},r.RendererGL.prototype.resetMatrix=function(){return this.uMVMatrix=r.Matrix.identity(this._pInst),this},r.RendererGL.prototype.setFillShader=function(t){return this.curFillShader!==t&&(this.curFillShader=t,this.curFillShader.init()),this.curFillShader},r.RendererGL.prototype.setPointShader=function(t){return this.curPointShader!==t&&(this.curPointShader=t,this.curPointShader.init()),this.curPointShader},r.RendererGL.prototype.setStrokeShader=function(t){return this.curStrokeShader!==t&&(this.curStrokeShader=t,this.curStrokeShader.init()),this.curStrokeShader},r.RendererGL.prototype._useLightShader=function(){return this.curFillShader&&this.curFillShader.isLightShader()||this.setFillShader(this._getLightShader()),this.curFillShader},r.RendererGL.prototype._useColorShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultImmediateModeShader||this.setFillShader(this._getColorShader()),this.curFillShader},r.RendererGL.prototype._usePointShader=function(){return this.curPointShader||this.setPointShader(this._getPointShader()),this.curPointShader},r.RendererGL.prototype._useImmediateModeShader=function(){return this.curFillShader&&this.curFillShader!==this._defaultColorShader||this.setFillShader(this._getImmediateModeShader()),this.curFillShader},r.RendererGL.prototype._getLightShader=function(){return this._defaultLightShader||(this.attributes.perPixelLighting?this._defaultLightShader=new r.Shader(this,s.phongVert,s.phongFrag):this._defaultLightShader=new r.Shader(this,s.lightVert,s.lightTextureFrag)),this._defaultLightShader},r.RendererGL.prototype._getImmediateModeShader=function(){return this._defaultImmediateModeShader||(this._defaultImmediateModeShader=new r.Shader(this,s.immediateVert,s.vertexColorFrag)),this._defaultImmediateModeShader},r.RendererGL.prototype._getNormalShader=function(){return this._defaultNormalShader||(this._defaultNormalShader=new r.Shader(this,s.normalVert,s.normalFrag)),this._defaultNormalShader},r.RendererGL.prototype._getColorShader=function(){return this._defaultColorShader||(this._defaultColorShader=new r.Shader(this,s.normalVert,s.basicFrag)),this._defaultColorShader},r.RendererGL.prototype._getPointShader=function(){return this._defaultPointShader||(this._defaultPointShader=new r.Shader(this,s.pointVert,s.pointFrag)),this._defaultPointShader},r.RendererGL.prototype._getLineShader=function(){return this._defaultLineShader||(this._defaultLineShader=new r.Shader(this,s.lineVert,s.lineFrag)),this._defaultLineShader},r.RendererGL.prototype._getFontShader=function(){return this._defaultFontShader||(this.GL.getExtension("OES_standard_derivatives"),this._defaultFontShader=new r.Shader(this,s.fontVert,s.fontFrag)),this._defaultFontShader},r.RendererGL.prototype._getEmptyTexture=function(){if(!this._emptyTexture){var t=new r.Image(1,1);t.set(0,0,255),this._emptyTexture=new r.Texture(this,t)}return this._emptyTexture},r.RendererGL.prototype.getTexture=function(t){for(var e=this.textures,i=0;i2e4){var e,i=Object.prototype.toString,r=[],n=t.slice();e=n.pop();do{"[object Array]"===i.call(e)?n.push.apply(n,e):r.push(e)}while(n.length&&void 0!==(e=n.pop()));return r.reverse(),r}return[].concat.apply([],t)},r.RendererGL.prototype._vToNArray=function(t){return this._flatten(t.map(function(t){return[t.x,t.y,t.z]}))},r.prototype._assert3d=function(t){if(!this._renderer.isP3D)throw new Error(t+"() is only supported in WEBGL mode. If you'd like to use 3D graphics and WebGL, see https://p5js.org/examples/form-3d-primitives.html for more information.")},r.RendererGL.prototype._initTessy=function(){var t=new o.GluTesselator;return t.gluTessCallback(o.gluEnum.GLU_TESS_VERTEX_DATA,function(t,e){e[e.length]=t[0],e[e.length]=t[1],e[e.length]=t[2]}),t.gluTessCallback(o.gluEnum.GLU_TESS_BEGIN,function(t){t!==o.primitiveType.GL_TRIANGLES&&console.log("expected TRIANGLES but got type: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_ERROR,function(t){console.log("error callback"),console.log("error number: "+t)}),t.gluTessCallback(o.gluEnum.GLU_TESS_COMBINE,function(t,e,i){return[t[0],t[1],t[2]]}),t.gluTessCallback(o.gluEnum.GLU_TESS_EDGE_FLAG,function(t){}),t},r.RendererGL.prototype._triangulate=function(t){this._tessy.gluTessNormal(0,0,1);var e=[];this._tessy.gluTessBeginPolygon(e);for(var i=0;i1&&(s=s.substring(0,s.indexOf("[0]"))),o.name=s,o.type=n.type,o.type===t.SAMPLER_2D&&(o.samplerIndex=i,i++,this.samplers.push(o)),this.uniforms[s]=o}this._loadedUniforms=!0}},r.Shader.prototype.compile=function(){},r.Shader.prototype.bindShader=function(){this.init(),this._bound||(this.useProgram(),this._bound=!0,this.bindTextures(),this._setMatrixUniforms(),this===this._renderer.curStrokeShader&&this._setViewportUniform())},r.Shader.prototype.unbindShader=function(){return this._bound&&(this.unbindTextures(),this._bound=!1),this},r.Shader.prototype.bindTextures=function(){for(var t=this._renderer.GL,e=0;e1?e.length&&n.uniform1iv(r,e):n.uniform1i(r,e);break;case n.FLOAT:i.size>1?e.length&&n.uniform1fv(r,e):n.uniform1f(r,e);break;case n.FLOAT_MAT3:n.uniformMatrix3fv(r,!1,e);break;case n.FLOAT_MAT4:n.uniformMatrix4fv(r,!1,e);break;case n.FLOAT_VEC2:i.size>1?e.length&&n.uniform2fv(r,e):n.uniform2f(r,e[0],e[1]);break;case n.FLOAT_VEC3:i.size>1?e.length&&n.uniform3fv(r,e):n.uniform3f(r,e[0],e[1],e[2]);break;case n.FLOAT_VEC4:i.size>1?e.length&&n.uniform4fv(r,e):n.uniform4f(r,e[0],e[1],e[2],e[3]);break;case n.INT_VEC2:i.size>1?e.length&&n.uniform2iv(r,e):n.uniform2i(r,e[0],e[1]);break;case n.INT_VEC3:i.size>1?e.length&&n.uniform3iv(r,e):n.uniform3i(r,e[0],e[1],e[2]);break;case n.INT_VEC4:i.size>1?e.length&&n.uniform4iv(r,e):n.uniform4i(r,e[0],e[1],e[2],e[3]);break;case n.SAMPLER_2D:n.activeTexture(n.TEXTURE0+i.samplerIndex),i.texture=this._renderer.getTexture(e),n.uniform1i(i.location,i.samplerIndex)}return this}},r.Shader.prototype.isLightShader=function(){return void 0!==this.uniforms.uUseLighting||void 0!==this.uniforms.uAmbientLightCount||void 0!==this.uniforms.uDirectionalLightCount||void 0!==this.uniforms.uPointLightCount||void 0!==this.uniforms.uAmbientColor||void 0!==this.uniforms.uDirectionalColor||void 0!==this.uniforms.uPointLightLocation||void 0!==this.uniforms.uPointLightColor||void 0!==this.uniforms.uLightingDirection||void 0!==this.uniforms.uSpecular},r.Shader.prototype.isTextureShader=function(){return this.samplerIndex>0},r.Shader.prototype.isColorShader=function(){return void 0!==this.attributes.aVertexColor||void 0!==this.uniforms.uMaterialColor},r.Shader.prototype.isTexLightShader=function(){return this.isLightShader()&&this.isTextureShader()},r.Shader.prototype.isStrokeShader=function(){return void 0!==this.uniforms.uStrokeWeight},r.Shader.prototype.enableAttrib=function(t,e,i,r,n,o){var s=this._renderer.GL;return-1!==t&&(s.enableVertexAttribArray(t),s.vertexAttribPointer(t,e,i,r,n,o)),this},e.exports=r.Shader},{"../core/main":24}],76:[function(t,e,i){"use strict";var r=t("../core/main"),n=t("../core/constants");r.Texture=function(t,e){this._renderer=t;var i=this._renderer.GL;this.src=e,this.glTex=void 0,this.glTarget=i.TEXTURE_2D,this.glFormat=i.RGBA,this.mipmaps=!1,this.glMinFilter=i.LINEAR,this.glMagFilter=i.LINEAR,this.glWrapS=i.CLAMP_TO_EDGE,this.glWrapT=i.CLAMP_TO_EDGE,this.isSrcMediaElement=void 0!==r.MediaElement&&e instanceof r.MediaElement,this._videoPrevUpdateTime=0,this.isSrcHTMLElement=void 0!==r.Element&&e instanceof r.Element&&!(e instanceof r.Graphics),this.isSrcP5Image=e instanceof r.Image,this.isSrcP5Graphics=e instanceof r.Graphics,this.isImageData="undefined"!=typeof ImageData&&e instanceof ImageData;var n=this._getTextureDataFromSource();return this.width=n.width,this.height=n.height,this.init(n),this},r.Texture.prototype._getTextureDataFromSource=function(){var t;return this.isSrcP5Image?t=this.src.canvas:this.isSrcMediaElement||this.isSrcP5Graphics||this.isSrcHTMLElement?t=this.src.elt:this.isImageData&&(t=this.src),t},r.Texture.prototype.init=function(t){var e=this._renderer.GL;if(this.glTex=e.createTexture(),this.bindTexture(),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,this.glMagFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,this.glMinFilter),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,this.glWrapS),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,this.glWrapT),0===this.width||0===this.height||this.isSrcMediaElement&&!this.src.loadedmetadata){var i=new Uint8Array([1,1,1,1]);e.texImage2D(this.glTarget,0,e.RGBA,1,1,0,this.glFormat,e.UNSIGNED_BYTE,i)}else e.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,e.UNSIGNED_BYTE,t)},r.Texture.prototype.update=function(){var t=this.src;if(0===t.width||0===t.height)return!1;var e=this._getTextureDataFromSource(),i=!1,r=this._renderer.GL;return e.width!==this.width||e.height!==this.height?(i=!0,this.width=e.width,this.height=e.height,this.isSrcP5Image?t.setModified(!1):(this.isSrcMediaElement||this.isSrcHTMLElement)&&t.setModified(!0)):this.isSrcP5Image?t.isModified()&&(i=!0,t.setModified(!1)):this.isSrcMediaElement?t.isModified()?(i=!0,t.setModified(!1)):t.loadedmetadata&&this._videoPrevUpdateTime!==t.time()&&(this._videoPrevUpdateTime=t.time(),i=!0):this.isImageData?t._dirty&&(t._dirty=!1,i=!0):i=!0,i&&(this.bindTexture(),r.texImage2D(this.glTarget,0,this.glFormat,this.glFormat,r.UNSIGNED_BYTE,e)),i},r.Texture.prototype.bindTexture=function(){return this._renderer.GL.bindTexture(this.glTarget,this.glTex),this},r.Texture.prototype.unbindTexture=function(){this._renderer.GL.bindTexture(this.glTarget,null)},r.Texture.prototype.setInterpolation=function(t,e){var i=this._renderer.GL;t===n.NEAREST?this.glMinFilter=i.NEAREST:this.glMinFilter=i.LINEAR,e===n.NEAREST?this.glMagFilter=i.NEAREST:this.glMagFilter=i.LINEAR,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,this.glMinFilter),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,this.glMagFilter),this.unbindTexture()},r.Texture.prototype.setWrapMode=function(t,e){var i=this._renderer.GL,r=function(t){return 0==(t&t-1)},o=r(this.width),s=r(this.width);t===n.REPEAT?o&&s?this.glWrapS=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):t===n.MIRROR?o&&s?this.glWrapS=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapS=i.CLAMP_TO_EDGE):this.glWrapS=i.CLAMP_TO_EDGE,e===n.REPEAT?o&&s?this.glWrapT=i.REPEAT:(console.warn("You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):e===n.MIRROR?o&&s?this.glWrapT=i.MIRRORED_REPEAT:(console.warn("You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead"),this.glWrapT=i.CLAMP_TO_EDGE):this.glWrapT=i.CLAMP_TO_EDGE,this.bindTexture(),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,this.glWrapS),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,this.glWrapT),this.unbindTexture()},e.exports=r.Texture},{"../core/constants":18,"../core/main":24}],77:[function(t,e,i){"use strict";function r(t,e){this.width=t,this.height=e,this.infos=[],this.findImage=function(t){var e=this.width*this.height;if(t>e)throw new Error("font is too complex to render in 3D");for(var i,r,n=this.infos.length-1;n>=0;--n){var o=this.infos[n];if(o.index+t0;){var n=t[r];e>n&&(e=n),ii?i:t}(255*t,0,255)}function r(t,e,i,r,n,s,a,h){for(var u=new function t(e,i,r,n){this.p0=e,this.c0=i,this.c1=r,this.p1=n,this.toQuadratic=function(){return{x:this.p0.x,y:this.p0.y,x1:this.p1.x,y1:this.p1.y,cx:(3*(this.c0.x+this.c1.x)-(this.p0.x+this.p1.x))/4,cy:(3*(this.c0.y+this.c1.y)-(this.p0.y+this.p1.y))/4}},this.quadError=function(){return o.Vector.sub(o.Vector.sub(this.p1,this.p0),o.Vector.mult(o.Vector.sub(this.c1,this.c0),3)).mag()/2},this.split=function(e){var i=o.Vector.lerp(this.p0,this.c0,e),r=o.Vector.lerp(this.c0,this.c1,e),n=o.Vector.lerp(i,r,e);this.c1=o.Vector.lerp(this.c1,this.p1,e),this.c0=o.Vector.lerp(r,this.c1,e);var s=o.Vector.lerp(n,this.c0,e),a=new t(this.p0,i,n,s);return this.p0=s,a},this.splitInflections=function(){var t=o.Vector.sub(this.c0,this.p0),e=o.Vector.sub(o.Vector.sub(this.c1,this.c0),t),i=o.Vector.sub(o.Vector.sub(o.Vector.sub(this.p1,this.c1),t),o.Vector.mult(e,2)),r=[],n=e.x*i.y-e.y*i.x;if(0!==n){var s=t.x*i.y-t.y*i.x,a=t.x*e.y-t.y*e.x,h=s*s-4*n*a;if(h>=0){n<0&&(n=-n,s=-s,a=-a);var l=Math.sqrt(h),u=(-s-l)/(2*n),c=(-s+l)/(2*n);u>0&&u<1&&(r.push(this.split(u)),c=1-(1-c)/(1-u)),c>0&&c<1&&r.push(this.split(c))}}return r.push(this),r}}(new o.Vector(t,e),new o.Vector(i,r),new o.Vector(n,s),new o.Vector(a,h)).splitInflections(),c=[],p=30/l,d=0;d=.125);){var v=Math.pow(f,1/3),g=m.split(v),_=m.split(1-v/(1-v));c.push(g),y.push(m),m=_}f<1&&c.push(m.split(.5)),c.push(m),Array.prototype.push.apply(c,y.reverse())}return c}function s(t,i,r,n){e([t,r],[i,n],{x:t,y:i,cx:(t+r)/2,cy:(i+n)/2})}function u(t,e,i,r){return Math.abs(i-t)<1e-5&&Math.abs(r-e)<1e-5}function c(t,e,i){for(var r=t.length,o=e.findImage(r),s=o.index,a=0,h=0;h>7,127&d,p>>7,127&p);for(var f=0;f>7,127&m,0,0)}}return{cellImageInfo:l,dimOffset:s,dimImageInfo:o}}var p=this.glyphInfos[t.index];if(p)return p;var d=t.getBoundingBox(),f=d.x1,m=d.y1,y=d.x2-f,v=d.y2-m,g=t.path.commands;if(0===y||0===v||!g.length)return this.glyphInfos[t.index]={};var _,b=[],S=[],x=[];for(_=a-1;_>=0;--_)x.push([]);for(_=h-1;_>=0;--_)S.push([]);for(var w,T,A,M,P=0;P=n)&&this._doFill){if(!this._isOpenType())return console.log("WEBGL: only opentype fonts are supported"),t;t.push();var l=this.curFillShader,c=this._doStroke,p=this.drawMode;this.curFillShader=null,this._doStroke=!1,this.drawMode=s.TEXTURE;var d=this._textFont.font,f=this._textFont._fontInfo;f||(f=this._textFont._fontInfo=new u(d));var m=this._textFont._handleAlignment(this,e,i,r),y=this._textSize,v=y/d.unitsPerEm;this.translate(m.x,m.y,0),this.scale(v,v,1);var g=this.GL,_=!this._defaultFontShader,b=this.setFillShader(this._getFontShader());_&&(b.setUniform("uGridImageSize",[64,64]),b.setUniform("uCellsImageSize",[64,64]),b.setUniform("uStrokeImageSize",[64,64]),b.setUniform("uGridSize",[a,h])),this._applyColorBlend(this.curFillColor);var S=this.gHash.glyph;if(!S){var x=this._textGeom=new o.Geometry(1,1,function(){for(var t=0;t<=1;t++)for(var e=0;e<=1;e++)this.vertices.push(new o.Vector(e,t,0)),this.uvs.push(e,t)});x.computeFaces().computeNormals(),S=this.createBuffers("glyph",x)}this._bindBuffer(S.vertexBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aPosition.location,3,g.FLOAT,!1,0,0),this._bindBuffer(S.indexBuffer,g.ELEMENT_ARRAY_BUFFER),this._bindBuffer(S.uvBuffer,g.ARRAY_BUFFER),b.enableAttrib(b.attributes.aTexCoord.location,2,g.FLOAT,!1,0,0),b.setUniform("uMaterialColor",this.curFillColor);try{for(var w=0,T=null,A=!1,M=d.stringToGlyphs(e),P=0;P{var e=new s.a.Noise("pink").start();e.volume.value=-20;var i=new s.a.AutoFilter({frequency:"8m",min:800,max:5e3}).connect(s.a.Master);e.connect(i),i.start();var r=new s.a.Chorus(.8,2.5,.2).toMaster();let n=new s.a.FMSynth({harmonicity:10,modulationIndex:80,detune:0,oscillator:{type:"sine"},envelope:{attack:.001,decay:.003,sustain:.06,release:.3},modulation:{type:"square"},modulationEnvelope:{attack:.01,decay:.02,sustain:.03,release:.033},portamento:.01}).connect(r);function o(e,i){this.ex=0,this.ey=0,this.easing=.05,this.red=t.random(100,255),this.g=t.random(255),this.b=t.random(255),this.canPlay=!0,this.alpha=0,2==arguments.length?(this.pos=t.createVector(e,i),this.stuck=!0):(this.pos=t.createVector(t.random(-150,150),t.random(-150,150)),this.stuck=!1),this.r=c,this.walk=function(){var e=t.createVector(t.random(-.5,.5),t.random(-.5,.5));this.pos.add(e),t.constrain(this.pos.x,-150,150),t.constrain(this.pos.y,-150,150)},this.checkStuck=function(t){for(var e=0;e{t.createCanvas(800,800,t.WEBGL);l[0]=new o(0,0),c*=.995;for(var e=0;e<500;e++)u[e]=new o,c*=.995}),t.draw=(()=>{t.camera(-100,-100,400-t.frameCount/80,0,0,0,0,1,0),t.background(0),t.smooth(),t.rotateZ(t.frameCount/600);for(var e=0;e=0;e--)u[e].walk(),u[e].checkStuck(l)&&(u[e].setHue(p%360),p+=2,l.push(u[e]),u.splice(e,1));for(u[u.length-1].r;u.length<500&&c>1;)c*=.995,u.push(new o);t.fill(255),t.sphere(6)}),t.keyPressed=(()=>{"m"==t.key&&t.save(Date.now()+".jpg")}),t.mousePressed=(()=>{h()(s.a.context).then(function(){})})};e.default=l,new n.a(l)},function(t,e){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i}]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RvbmUvYnVpbGQvVG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcDUvbGliL3A1Lm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3RhcnRhdWRpb2NvbnRleHQvU3RhcnRBdWRpb0NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiXSwibmFtZXMiOlsiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyIsInVuZGVmaW5lZCIsIlRvbmUiLCJNb2R1bGUiLCJmdW5jIiwiTWFpbiIsInRoaXMiLCJFcnJvciIsInRvU3RyaW5nIiwiY2xhc3NOYW1lIiwiaXNMZXR0ZXIiLCJtYXRjaCIsInNhbWVDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwiaXNGdW5jdGlvbiIsImRpc3Bvc2UiLCJzZXQiLCJwYXJhbXMiLCJyYW1wVGltZSIsImlzT2JqZWN0IiwiaXNTdHJpbmciLCJ0bXBPYmoiLCJwYXJhbUxvb3AiLCJhdHRyIiwicGFyZW50IiwiaW5kZXhPZiIsImF0dHJTcGxpdCIsInNwbGl0IiwibGVuZ3RoIiwic3BsaWNlIiwiaW5uZXJQYXJhbSIsImpvaW4iLCJwYXJhbSIsImlzVW5kZWYiLCJTaWduYWwiLCJQYXJhbSIsInJhbXBUbyIsIkF1ZGlvUGFyYW0iLCJUaW1lQmFzZSIsIl9jb2xsZWN0RGVmYXVsdHMiLCJyZXQiLCJzdWJSZXQiLCJqIiwic3ViQXR0ciIsImlzRGVmaW5lZCIsImNvbnN0ciIsImRlZmF1bHRzIiwia2V5cyIsIl9zdXBlciIsInN1cGVyRGVmcyIsInB1c2giLCJ2YWx1ZXMiLCJvcHRpb25zIiwiZGVmYXVsdEFyZyIsImdpdmVuIiwiZmFsbGJhY2siLCJnaXZlblByb3AiLCJmYWxsYmFja1Byb3AiLCJjb25uZWN0U2VyaWVzIiwiY3VycmVudFVuaXQiLCJhcmd1bWVudHMiLCJ0b1VuaXQiLCJjb25uZWN0IiwidmFsIiwiaXNOdW1iZXIiLCJhcmciLCJpc0Jvb2xlYW4iLCJpc0FycmF5IiwiQXJyYXkiLCJpc05vdGUiLCJ0ZXN0Iiwibm9PcCIsIl9yZWFkT25seSIsIndyaXRhYmxlIiwiX3dyaXRhYmxlIiwiU3RhdGUiLCJTdGFydGVkIiwiU3RvcHBlZCIsIlBhdXNlZCIsImVxdWFsUG93ZXJTY2FsZSIsInBlcmNlbnQiLCJwaUZhY3RvciIsIk1hdGgiLCJQSSIsInNpbiIsImRiVG9HYWluIiwiZGIiLCJwb3ciLCJnYWluVG9EYiIsImdhaW4iLCJsb2ciLCJMTjEwIiwiaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvIiwiaW50ZXJ2YWwiLCJub3ciLCJjb250ZXh0IiwiZXh0ZW5kIiwiY2hpbGQiLCJUZW1wQ29uc3RydWN0b3IiLCJhdWRpb0NvbnRleHQiLCJDb250ZXh0IiwiZW1pdCIsInNldENvbnRleHQiLCJjdHgiLCJzYW1wbGVSYXRlIiwiaGFzQXVkaW9Db250ZXh0Iiwid2luZG93IiwiaGFzUHJvbWlzZXMiLCJoYXNXb3JrZXJzIiwiZ2V0Q29udGV4dCIsInJlc29sdmUiLCJpbml0aWFsaXplZCIsInJlc0NhbGxiYWNrIiwib2ZmIiwib24iLCJ2ZXJzaW9uIiwiRW1pdHRlciIsIl9ldmVudHMiLCJldmVudCIsImNhbGxiYWNrIiwiZXZlbnRzIiwiZXZlbnROYW1lIiwib25jZSIsImJvdW5kQ2FsbGJhY2siLCJhcHBseSIsImV2IiwiZXZlbnRMaXN0IiwiYXJncyIsInNsaWNlIiwibGVuIiwibWl4aW4iLCJmdW5jdGlvbnMiLCJlbWl0dGVyRnVuYyIsIlRpbWVsaW5lIiwiX3RpbWVsaW5lIiwibWVtb3J5IiwiSW5maW5pdHkiLCJhZGQiLCJ0aW1lIiwidmFsdWVPZiIsImluZGV4IiwiX3NlYXJjaCIsImRpZmYiLCJyZW1vdmUiLCJjb21wYXJhdG9yIiwicGVlayIsInNoaWZ0IiwiZ2V0QWZ0ZXIiLCJnZXRCZWZvcmUiLCJjYW5jZWwiLCJhZnRlciIsImNhbmNlbEJlZm9yZSIsInByZXZpb3VzRXZlbnQiLCJiZWdpbm5pbmciLCJlbmQiLCJtaWRQb2ludCIsImZsb29yIiwibmV4dEV2ZW50IiwiX2l0ZXJhdGUiLCJsb3dlckJvdW5kIiwidXBwZXJCb3VuZCIsImZvckVhY2giLCJmb3JFYWNoQmVmb3JlIiwiZm9yRWFjaEFmdGVyIiwiZm9yRWFjaEJldHdlZW4iLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwiZm9yRWFjaEZyb20iLCJmb3JFYWNoQXRUaW1lIiwic3VwcG9ydGVkIiwiT2ZmbGluZUF1ZGlvQ29udGV4dCIsIndlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQiLCJzdGFydFJlbmRlcmluZyIsIlByb21pc2UiLCJfbmF0aXZlX3N0YXJ0UmVuZGVyaW5nIiwiZG9uZSIsIm9uY29tcGxldGUiLCJlIiwicmVuZGVyZWRCdWZmZXIiLCJBdWRpb0NvbnRleHQiLCJ3ZWJraXRBdWRpb0NvbnRleHQiLCJjbG9zZSIsInN1c3BlbmQiLCJyZXN1bWUiLCJjcmVhdGVHYWluIiwiY3JlYXRlR2Fpbk5vZGUiLCJjcmVhdGVEZWxheSIsImNyZWF0ZURlbGF5Tm9kZSIsImRlY29kZUF1ZGlvRGF0YVByb21pc2UiLCJvZmZsaW5lQ29udGV4dCIsImF1ZGlvRGF0YSIsIlVpbnQzMkFycmF5IiwiYnVmZmVyIiwiZGVjb2RlQXVkaW9EYXRhIiwiX25hdGl2ZV9kZWNvZGVBdWRpb0RhdGEiLCJzdWNjZXNzIiwiZXJyb3IiLCJwcm9wIiwiX2NvbnRleHQiLCJfZGVmaW5lUHJvcGVydHkiLCJfbGF0ZW5jeUhpbnQiLCJsYXRlbmN5SGludCIsIl9jb25zdGFudHMiLCJsb29rQWhlYWQiLCJfY29tcHV0ZWRVcGRhdGVJbnRlcnZhbCIsIl90aWNrZXIiLCJUaWNrZXIiLCJjbG9ja1NvdXJjZSIsInVwZGF0ZUludGVydmFsIiwiX3RpbWVvdXRzIiwiX3RpbWVvdXRJZHMiLCJfdGltZW91dExvb3AiLCJjdXJyZW50VGltZSIsInJlYWR5Iiwic3RhdGUiLCJ0aGVuIiwiZ2V0Q29uc3RhbnQiLCJjcmVhdGVCdWZmZXIiLCJhcnIiLCJnZXRDaGFubmVsRGF0YSIsImNvbnN0YW50IiwiY3JlYXRlQnVmZmVyU291cmNlIiwiY2hhbm5lbENvdW50IiwiY2hhbm5lbENvdW50TW9kZSIsImxvb3AiLCJzdGFydCIsInNldFRpbWVvdXQiLCJmbiIsInRpbWVvdXQiLCJpZCIsImNsZWFyVGltZW91dCIsInR5cGUiLCJoaW50IiwiY29uIiwiZGlzY29ubmVjdCIsIl90eXBlIiwiX3VwZGF0ZUludGVydmFsIiwiX2NhbGxiYWNrIiwiX2NyZWF0ZUNsb2NrIiwiVHlwZSIsIldvcmtlciIsIlRpbWVvdXQiLCJPZmZsaW5lIiwiX2NyZWF0ZVdvcmtlciIsIlVSTCIsIndlYmtpdFVSTCIsImJsb2IiLCJCbG9iIiwidG9GaXhlZCIsImJsb2JVcmwiLCJjcmVhdGVPYmplY3RVUkwiLCJ3b3JrZXIiLCJvbm1lc3NhZ2UiLCJfd29ya2VyIiwiX2NyZWF0ZVRpbWVvdXQiLCJfdGltZW91dCIsIm1heCIsInBvc3RNZXNzYWdlIiwiX2Rpc3Bvc2VDbG9jayIsInRlcm1pbmF0ZSIsIm5hdGl2ZUNvbm5lY3QiLCJBdWRpb05vZGUiLCJuYXRpdmVEaXNjb25uZWN0IiwidG9uZUNvbm5lY3QiLCJCIiwib3V0TnVtIiwiaW5OdW0iLCJpbnB1dCIsIlRPTkVfU0lMRU5DRV9WRVJTSU9OX0xPR0dJTkciLCJjb25zb2xlIiwid2FybiIsImNyZWF0ZUluc091dHMiLCJpbnB1dHMiLCJvdXRwdXRzIiwib3V0cHV0IiwiY2hhbm5lbEludGVycHJldGF0aW9uIiwiX29uQ29ubmVjdCIsInVuaXQiLCJvdXRwdXROdW0iLCJpbnB1dE51bSIsImRlc3RpbmF0aW9uIiwiY2hhaW4iLCJmYW4iLCJTaWduYWxCYXNlIiwibm9kZSIsIm91dHB1dE51bWJlciIsImlucHV0TnVtYmVyIiwiX3BhcmFtIiwiY2FuY2VsU2NoZWR1bGVkVmFsdWVzIiwib3ZlcnJpZGRlbiIsInVhIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsIldhdmVTaGFwZXJOb2RlIiwiX2ludGVybmFsTm9kZSIsIl9uYXRpdmVfY3JlYXRlV2F2ZVNoYXBlciIsIl9jdXJ2ZSIsImN1cnZlIiwiYXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJjcmVhdGVXYXZlU2hhcGVyIiwiV2F2ZVNoYXBlciIsIm1hcHBpbmciLCJidWZmZXJMZW4iLCJfc2hhcGVyIiwiaXNGaW5pdGUiLCJzZXRNYXAiLCJub3JtYWxpemVkIiwib3ZlcnNhbXBsZSIsIm92ZXJzYW1wbGluZyIsIlJhbmdlRXJyb3IiLCJ1bml0cyIsIl92YWwiLCJfdW5pdHMiLCJwYXJzZUZsb2F0IiwiY2hhckF0IiwiX2RlZmF1bHRVbml0cyIsInRvU2Vjb25kcyIsInRvVGlja3MiLCJ0b0ZyZXF1ZW5jeSIsInRvTWlkaSIsIl9leHByZXNzaW9ucyIsInJlZ2V4cCIsIm1ldGhvZCIsImRvdCIsInBhcnNlSW50Iiwic2NhbGFyIiwiX2JlYXRzVG9Vbml0cyIsIl9nZXRUaW1lU2lnbmF0dXJlIiwiX3RpY2tzVG9Vbml0cyIsImh6IiwiX2ZyZXF1ZW5jeVRvVW5pdHMiLCJ0ciIsInEiLCJ0b3RhbCIsIl9zZWNvbmRzVG9Vbml0cyIsInNhbXBsZXMiLCJkZWZhdWx0IiwiX2dldEJwbSIsIlRyYW5zcG9ydCIsImJwbSIsInRpbWVTaWduYXR1cmUiLCJfZ2V0UFBRIiwiUFBRIiwiX25vdyIsImZyZXEiLCJiZWF0cyIsInNlY29uZHMiLCJ0aWNrcyIsIl9ub0FyZyIsInRyaW0iLCJleHByIiwibWF0Y2hpbmciLCJ0b1NhbXBsZXMiLCJ0b01pbGxpc2Vjb25kcyIsIkZyZXF1ZW5jeSIsImFzc2lnbiIsIm1pZGkiLCJtdG9mIiwibm90ZSIsInBpdGNoIiwib2N0YXZlIiwibm90ZU51bWJlciIsIm5vdGVUb1NjYWxlSW5kZXgiLCJ0cmFuc3Bvc2UiLCJoYXJtb25pemUiLCJpbnRlcnZhbHMiLCJtYXAiLCJmdG9tIiwidG9Ob3RlIiwibG9nMiIsIkE0Iiwicm91bmQiLCJzY2FsZUluZGV4VG9Ob3RlIiwicXVhcnRlclRpbWUiLCJxdWFydGVycyIsImNiYiIsImNiIiwiYyMiLCJjeCIsImRiYiIsImQjIiwiZHgiLCJlYmIiLCJlYiIsImUjIiwiZXgiLCJmYmIiLCJmYiIsImYiLCJmIyIsImZ4IiwiZ2JiIiwiZ2IiLCJnIiwiZyMiLCJneCIsImFiYiIsImFiIiwiYSIsImEjIiwiYXgiLCJiYmIiLCJiYiIsImIiLCJiIyIsImJ4IiwiZnJlcXVlbmN5IiwiVGltZSIsInF1YW50aXplIiwiY2FwdHVyZSIsInF1YW50VG8iLCJuZXh0U3ViZGl2aXNpb24iLCJzdWJkaXYiLCJzdWJkaXZpc2lvbiIsInRvTm90YXRpb24iLCJ0ZXN0Tm90YXRpb25zIiwicG93ZXIiLCJjbG9zZXN0IiwiY2xvc2VzdFNlY29uZHMiLCJub3RhdGlvbiIsIm5vdGF0aW9uU2Vjb25kcyIsImFicyIsInRvQmFyc0JlYXRzU2l4dGVlbnRocyIsIm1lYXN1cmVzIiwic2l4dGVlbnRocyIsIlRyYW5zcG9ydFRpbWUiLCJEZWZhdWx0IiwiVGlja3MiLCJOb3JtYWxSYW5nZSIsIkF1ZGlvUmFuZ2UiLCJEZWNpYmVscyIsIkludGVydmFsIiwiQlBNIiwiUG9zaXRpdmUiLCJHYWluIiwiQ2VudHMiLCJEZWdyZWVzIiwiTUlESSIsIkJhcnNCZWF0c1NpeHRlZW50aHMiLCJTYW1wbGVzIiwiSGVydHoiLCJOb3RlIiwiTWlsbGlzZWNvbmRzIiwiU2Vjb25kcyIsIk5vdGF0aW9uIiwiY29udmVydCIsIl90b1VuaXRzIiwiZ2V0VmFsdWVBdFRpbWUiLCJfaW5pdGlhbFZhbHVlIiwiX2Zyb21Vbml0cyIsInNldFZhbHVlQXRUaW1lIiwibWluVmFsdWUiLCJtYXhWYWx1ZSIsIm1pbiIsIl9taW5PdXRwdXQiLCJBdXRvbWF0aW9uVHlwZSIsIkxpbmVhciIsIkV4cG9uZW50aWFsIiwiVGFyZ2V0IiwiU2V0VmFsdWUiLCJiZWZvcmUiLCJpbml0aWFsVmFsdWUiLCJkZWZhdWx0VmFsdWUiLCJwcmV2aW91c1ZhbCIsInByZXZpb3VzIiwiX2V4cG9uZW50aWFsQXBwcm9hY2giLCJfbGluZWFySW50ZXJwb2xhdGUiLCJfZXhwb25lbnRpYWxJbnRlcnBvbGF0ZSIsInNldFJhbXBQb2ludCIsImN1cnJlbnRWYWwiLCJjYW5jZWxBbmRIb2xkQXRUaW1lIiwibGluZWFyUmFtcFRvVmFsdWVBdFRpbWUiLCJleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lIiwiZXhwb25lbnRpYWxSYW1wVG8iLCJsaW5lYXJSYW1wVG8iLCJ0YXJnZXRSYW1wVG8iLCJleHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUiLCJ0aW1lQ29uc3RhbnQiLCJzZXRUYXJnZXRBdFRpbWUiLCJzZXRWYWx1ZUN1cnZlQXRUaW1lIiwiZHVyYXRpb24iLCJzY2FsaW5nIiwic2VnVGltZSIsInZhbHVlQXRUaW1lIiwidDAiLCJ2MCIsInYxIiwiZXhwIiwidDEiLCJPZmZsaW5lQ29udGV4dCIsImNoYW5uZWxzIiwiX2R1cmF0aW9uIiwiX2N1cnJlbnRUaW1lIiwicmVuZGVyIiwiYmxvY2tUaW1lIiwiYnVmZmVyU291cmNlIiwiX25hdGl2ZV9zdGFydCIsIl9nYWluTm9kZSIsImNyZWF0ZUNvbnN0YW50U291cmNlIiwiQ29uc3RhbnRTb3VyY2VOb2RlIiwiX2J1ZmZlclNvdXJjZSIsImdhaW5Ob2RlIiwiX291dHB1dCIsIm9mZnNldCIsInN0b3AiLCJfcHJveGllcyIsIl9zb3VyY2VTdGFydGVkIiwiX2NvbnN0YW50U291cmNlIiwiX2lzUGFyYW0iLCJfYXBwbHlBdXRvbWF0aW9ucyIsIl9jb25uZWN0UHJveGllcyIsInByb3h5IiwiZnJvbSIsInByZXZpb3VzTWV0aG9kIiwic2lnbmFsIiwiUG93IiwiX2V4cCIsIl9leHBTY2FsZXIiLCJfZXhwRnVuYyIsIkVudmVsb3BlIiwiYXR0YWNrIiwiZGVjYXkiLCJzdXN0YWluIiwicmVsZWFzZSIsIl9hdHRhY2tDdXJ2ZSIsIl9yZWxlYXNlQ3VydmUiLCJfc2lnIiwiYXR0YWNrQ3VydmUiLCJyZWxlYXNlQ3VydmUiLCJJbiIsImN1cnZlRGVmIiwiT3V0IiwidHJpZ2dlckF0dGFjayIsInZlbG9jaXR5Iiwib3JpZ2luYWxBdHRhY2siLCJjdXJyZW50VmFsdWUiLCJwZXJjZW50Q29tcGxldGUiLCJzbGljZUluZGV4IiwidHJpZ2dlclJlbGVhc2UiLCJ0cmlnZ2VyQXR0YWNrUmVsZWFzZSIsImsiLCJjb3NpbmVDdXJ2ZSIsInJpcHBsZUN1cnZlIiwiY3VydmVMZW4iLCJzaW5lV2F2ZSIsInN0YWlyc0N1cnZlIiwiY2VpbCIsInNpbmVDdXJ2ZSIsImNvcyIsImJvdW5jZUN1cnZlIiwiaW52ZXJ0Q3VydmUiLCJvdXQiLCJsaW5lYXIiLCJleHBvbmVudGlhbCIsImJvdW5jZSIsImNvc2luZSIsInJldmVyc2UiLCJyZXZlcnNlQ3VydmUiLCJzdGVwIiwicmlwcGxlIiwic2luZSIsIkFtcGxpdHVkZUVudmVsb3BlIiwiQW5hbHlzZXJOb2RlIiwiZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSIsInVpbnQ4IiwiVWludDhBcnJheSIsImdldEJ5dGVUaW1lRG9tYWluRGF0YSIsIkFuYWx5c2VyIiwiX2FuYWx5c2VyIiwiY3JlYXRlQW5hbHlzZXIiLCJfYnVmZmVyIiwic2l6ZSIsInNtb290aGluZyIsIldhdmVmb3JtIiwiRkZUIiwiZ2V0VmFsdWUiLCJnZXRGbG9hdEZyZXF1ZW5jeURhdGEiLCJmcmVxdWVuY3lCaW5Db3VudCIsImZmdFNpemUiLCJUeXBlRXJyb3IiLCJzbW9vdGhpbmdUaW1lQ29uc3RhbnQiLCJDb21wcmVzc29yIiwiX2NvbXByZXNzb3IiLCJjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IiLCJ0aHJlc2hvbGQiLCJrbmVlIiwicmF0aW8iLCJBZGQiLCJfc3VtIiwiTXVsdGlwbHkiLCJfbXVsdCIsIk5lZ2F0ZSIsIl9tdWx0aXBseSIsIlN1YnRyYWN0IiwiX25lZyIsIkVxdWFsUG93ZXJHYWluIiwiX2VxUG93ZXIiLCJDcm9zc0ZhZGUiLCJpbml0aWFsRmFkZSIsImZhZGUiLCJfZXF1YWxQb3dlckEiLCJfZXF1YWxQb3dlckIiLCJfb25lIiwiX2ludmVydCIsIkZpbHRlciIsIl9maWx0ZXJzIiwiZGV0dW5lIiwiUSIsIl9yb2xsb2ZmIiwicm9sbG9mZiIsImNhc2NhZGluZ0NvdW50IiwiY291bnQiLCJmaWx0ZXIiLCJjcmVhdGVCaXF1YWRGaWx0ZXIiLCJjb25uZWN0aW9uQ2hhaW4iLCJjb25jYXQiLCJNdWx0aWJhbmRTcGxpdCIsImxvdyIsIl9sb3dNaWRGaWx0ZXIiLCJtaWQiLCJoaWdoIiwibG93RnJlcXVlbmN5IiwiaGlnaEZyZXF1ZW5jeSIsIkVRMyIsIl9tdWx0aWJhbmRTcGxpdCIsIl9sb3dHYWluIiwiX21pZEdhaW4iLCJfaGlnaEdhaW4iLCJTY2FsZSIsIm91dHB1dE1pbiIsIm91dHB1dE1heCIsIl9vdXRwdXRNaW4iLCJfb3V0cHV0TWF4IiwiX3NjYWxlIiwiX2FkZCIsIl9zZXRSYW5nZSIsIlNjYWxlRXhwIiwiZXhwb25lbnQiLCJEZWxheSIsIl9tYXhEZWxheSIsIm1heERlbGF5IiwiZGVsYXlUaW1lIiwiX2RlbGF5Tm9kZSIsIkZlZWRiYWNrQ29tYkZpbHRlciIsIl9kZWxheSIsIl9mZWVkYmFjayIsInJlc29uYW5jZSIsIkFicyIsIl9hYnMiLCJGb2xsb3dlciIsIl9maWx0ZXIiLCJfZnJlcXVlbmN5VmFsdWVzIiwiX3N1YiIsIl9hdHRhY2siLCJfcmVsZWFzZSIsIl9zZXRBdHRhY2tSZWxlYXNlIiwibWluVGltZSIsIlNjYWxlZEVudmVsb3BlIiwiRnJlcXVlbmN5RW52ZWxvcGUiLCJfb2N0YXZlcyIsIm9jdGF2ZXMiLCJiYXNlRnJlcXVlbmN5IiwiR3JlYXRlclRoYW5aZXJvIiwiX3RocmVzaCIsIkdyZWF0ZXJUaGFuIiwiX2d0eiIsIkdhdGUiLCJfZm9sbG93ZXIiLCJfZ3QiLCJ0aHJlc2giLCJhdHRhY2tUaW1lIiwicmVsZWFzZVRpbWUiLCJfd3JhcFNjaGVkdWxlTWV0aG9kcyIsInRpY2tzVW50aWxUaW1lIiwiX2dldFRpY2tzVW50aWxFdmVudCIsIlRpY2tTaWduYWwiLCJwcmV2RXZlbnQiLCJzZWdtZW50cyIsInJhbXBWYWwiLCJzZWdtZW50RHVyIiwidmFsMCIsInZhbDEiLCJzYW1wbGVUaW1lIiwiZ2V0VGlja3NBdFRpbWUiLCJnZXREdXJhdGlvbk9mVGlja3MiLCJjdXJyZW50VGljayIsImdldFRpbWVPZlRpY2siLCJ0aWNrIiwiZGVsdGEiLCJzcXJ0Iiwic29sMSIsInRpY2tzVG9UaW1lIiwid2hlbiIsInRpbWVUb1RpY2tzIiwic3RhcnRUaWNrcyIsImVuZFRpY2tzIiwiVGltZWxpbmVTdGF0ZSIsImluaXRpYWwiLCJfaW5pdGlhbCIsInNldFN0YXRlQXRUaW1lIiwiZ2V0TGFzdFN0YXRlIiwiZ2V0TmV4dFN0YXRlIiwiVGlja1NvdXJjZSIsIl9zdGF0ZSIsIl90aWNrT2Zmc2V0Iiwic2V0VGlja3NBdFRpbWUiLCJwYXVzZSIsInN0b3BFdmVudCIsInRtcEV2ZW50IiwibGFzdFN0YXRlIiwiZWxhcHNlZFRpY2tzIiwicGVyaW9kU3RhcnRUaW1lIiwib2Zmc2V0RXZlbnQiLCJnZXRTZWNvbmRzQXRUaW1lIiwiZWxhcHNlZFNlY29uZHMiLCJnZXRTdGF0ZUF0VGltZSIsImFic29sdXRlVGlja3MiLCJmb3JFYWNoVGlja0JldHdlZW4iLCJsYXN0U3RhdGVFdmVudCIsIm5leHRUaWNrVGltZSIsIkNsb2NrIiwiX25leHRUaWNrIiwiX3RpY2tTb3VyY2UiLCJfbGFzdFVwZGF0ZSIsIl9ib3VuZExvb3AiLCJfbG9vcCIsIkludGVydmFsVGltZWxpbmUiLCJfcm9vdCIsIl9sZW5ndGgiLCJJbnRlcnZhbE5vZGUiLCJpbnNlcnQiLCJ1cGRhdGVIZWlnaHQiLCJ1cGRhdGVNYXgiLCJfcmViYWxhbmNlIiwicmVzdWx0cyIsInNlYXJjaCIsIl9yZW1vdmVOb2RlIiwiX3NldFJvb3QiLCJfcmVwbGFjZU5vZGVJblBhcmVudCIsInJlcGxhY2VtZW50IiwiaXNMZWZ0Q2hpbGQiLCJsZWZ0IiwicmlnaHQiLCJ0ZW1wIiwiZ2V0QmFsYW5jZSIsIl9yb3RhdGVMZWZ0IiwicGl2b3ROb2RlIiwiX3JvdGF0ZVJpZ2h0IiwiYmFsYW5jZSIsImFsbE5vZGVzIiwidHJhdmVyc2UiLCJzZWFyY2hBZnRlciIsIl9sZWZ0IiwiX3JpZ2h0IiwiaGVpZ2h0IiwicG9pbnQiLCJUcmFuc3BvcnRFdmVudCIsIl9ldmVudElkIiwiX29uY2UiLCJpbnZva2UiLCJjbGVhciIsIlRyYW5zcG9ydFJlcGVhdEV2ZW50IiwiX2ludGVydmFsIiwiX2N1cnJlbnRJZCIsIl9uZXh0SWQiLCJfYm91bmRSZXN0YXJ0IiwiX3Jlc3RhcnQiLCJfY3JlYXRlRXZlbnRzIiwic2NoZWR1bGVPbmNlIiwiX2JvdW5kQ3JlYXRlRXZlbnRzIiwiX2xvb3BTdGFydCIsIl9sb29wRW5kIiwiX3BwcSIsIlRyYW5zcG9ydENvbnN0cnVjdG9yIiwiX2Nsb2NrIiwiX3Byb2Nlc3NUaWNrIiwiX2JpbmRDbG9ja0V2ZW50cyIsIl90aW1lU2lnbmF0dXJlIiwiX3NjaGVkdWxlZEV2ZW50cyIsIl9yZXBlYXRlZEV2ZW50cyIsIl9zeW5jZWRTaWduYWxzIiwiX3N3aW5nVGlja3MiLCJfc3dpbmdBbW91bnQiLCJzd2luZyIsInN3aW5nU3ViZGl2aXNpb24iLCJsb29wU3RhcnQiLCJsb29wRW5kIiwidGlja1RpbWUiLCJwcm9ncmVzcyIsImFtb3VudCIsInNjaGVkdWxlIiwiX2FkZEV2ZW50Iiwic2NoZWR1bGVSZXBlYXQiLCJldmVudElkIiwiaXRlbSIsInRpbWVsaW5lIiwidG9nZ2xlIiwidGltZVNpZyIsInN0YXJ0UG9zaXRpb24iLCJlbmRQb3NpdGlvbiIsInNldExvb3BQb2ludHMiLCJwcHEiLCJyZW1haW5pbmdUaWNrcyIsInN5bmNTaWduYWwiLCJyYXRpb1NpZ25hbCIsInVuc3luY1NpZ25hbCIsInN5bmNlZFNpZ25hbCIsIlZvbHVtZSIsInZvbHVtZSIsIl91bm11dGVkVm9sdW1lIiwibXV0ZSIsIk1hc3RlciIsIl92b2x1bWUiLCJ0b01hc3RlciIsIk1hc3RlckNvbnN0cnVjdG9yIiwiU291cmNlIiwiX3N5bmNlZCIsIl9zY2hlZHVsZWQiLCJfc3RhcnQiLCJyZXN0YXJ0IiwiX3N0b3AiLCJzY2hlZCIsIl9zeW5jZWRTdGFydCIsInN5bmMiLCJzdGF0ZUV2ZW50Iiwic3RhcnRPZmZzZXQiLCJfc3luY2VkU3RvcCIsInVuc3luYyIsIkF1ZGlvQnVmZmVyIiwiY29weVRvQ2hhbm5lbCIsInNyYyIsImNoYW5OdW0iLCJjaGFubmVsIiwiY29weUZyb21DaGFubmVsIiwiZGVzdCIsIkJ1ZmZlciIsIl9yZXZlcnNlZCIsIl94aHIiLCJfb25sb2FkIiwidXJsIiwib25sb2FkIiwibG9hZGVkIiwibG9hZCIsImNhdGNoIiwib25lcnJvciIsImJ1ZmYiLCJlcnIiLCJfcmVtb3ZlRnJvbURvd25sb2FkUXVldWUiLCJhYm9ydCIsIm51bWJlck9mQ2hhbm5lbHMiLCJmcm9tQXJyYXkiLCJpc011bHRpZGltZW5zaW9uYWwiLCJ0b01vbm8iLCJ0b0FycmF5Iiwib3V0cHV0QXJyYXkiLCJudW1DaGFubmVscyIsImNoYW5uZWxBcnJheSIsInNhbXBsZSIsInN0YXJ0U2FtcGxlcyIsImVuZFNhbXBsZXMiLCJfcmV2ZXJzZSIsInJldiIsIl9kb3dubG9hZFF1ZXVlIiwiYmFzZVVybCIsImZyb21VcmwiLCJyZXF1ZXN0IiwibWF0Y2hlcyIsImV4dGVuc2lvbnMiLCJleHRlbnNpb24iLCJzdXBwb3J0c1R5cGUiLCJyZXBsYWNlIiwib25FcnJvciIsIm9uUHJvZ3Jlc3MiLCJ0b3RhbFByb2dyZXNzIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwicmVzcG9uc2VUeXBlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInN0YXR1cyIsInJlc3BvbnNlIiwibGVuZ3RoQ29tcHV0YWJsZSIsInNlbmQiLCJjYW5jZWxEb3dubG9hZHMiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjYW5QbGF5VHlwZSIsInJlbW92ZUV2ZW50cyIsImZhaWwiLCJPc2NpbGxhdG9yTm9kZSIsIm9uZW5kZWQiLCJfc3RhcnRUaW1lIiwiX3N0b3BUaW1lIiwiX29zY2lsbGF0b3IiLCJjcmVhdGVPc2NpbGxhdG9yIiwiX2dhaW4iLCJzZXRQZXJpb2RpY1dhdmUiLCJwZXJpb2RpY1dhdmUiLCJjYW5jZWxTdG9wIiwiT3NjaWxsYXRvciIsIl93YXZlIiwiX3BhcnRpYWxzIiwicGFydGlhbHMiLCJfcGhhc2UiLCJwaGFzZSIsIlNpbmUiLCJUcmlhbmdsZSIsIlNhd3Rvb3RoIiwiU3F1YXJlIiwiQ3VzdG9tIiwic3luY0ZyZXF1ZW5jeSIsInVuc3luY0ZyZXF1ZW5jeSIsImlzQmFzaWNUeXBlIiwiY29lZnMiLCJfZ2V0UmVhbEltYWdpbmFyeSIsImNyZWF0ZVBlcmlvZGljV2F2ZSIsInBlcmlvZGljV2F2ZVNpemUiLCJyZWFsIiwiaW1hZyIsInBhcnRpYWxDb3VudCIsInBhcnRpYWwiLCJleGVjIiwiX2ludmVyc2VGRlQiLCJzdW0iLCJfZ2V0SW5pdGlhbFZhbHVlIiwidHdvUGkiLCJBdWRpb1RvR2FpbiIsIl9ub3JtIiwieCIsIlplcm8iLCJMRk8iLCJhbXBsaXR1ZGUiLCJfc3RvcHBlZFNpZ25hbCIsIl96ZXJvcyIsIl9zdG9wcGVkVmFsdWUiLCJfYTJnIiwiX3NjYWxlciIsImN1cnJlbnRNaW4iLCJjdXJyZW50TWF4IiwiTGltaXRlciIsIkxvd3Bhc3NDb21iRmlsdGVyIiwiX2xvd3Bhc3MiLCJkYW1wZW5pbmciLCJNZXJnZSIsIl9tZXJnZXIiLCJjcmVhdGVDaGFubmVsTWVyZ2VyIiwiTWV0ZXIiLCJnZXRMZXZlbCIsIlNwbGl0IiwiX3NwbGl0dGVyIiwiY3JlYXRlQ2hhbm5lbFNwbGl0dGVyIiwiTWlkU2lkZVNwbGl0IiwiX3NwbGl0IiwiX21pZEFkZCIsIlNRUlQxXzIiLCJfc2lkZVN1YnRyYWN0Iiwic2lkZSIsIk1pZFNpZGVNZXJnZSIsIl90aW1lc1R3b0xlZnQiLCJfdGltZXNUd29SaWdodCIsIl9tZXJnZSIsIk1pZFNpZGVDb21wcmVzc29yIiwiX21pZFNpZGVTcGxpdCIsIl9taWRTaWRlTWVyZ2UiLCJNb25vIiwiTXVsdGliYW5kQ29tcHJlc3NvciIsIlN0ZXJlb1Bhbm5lck5vZGUiLCJwYW4iLCJyaWdodFdhdmVTaGFwZXIiLCJsZWZ0V2F2ZVNoYXBlciIsImxlZnRHYWluIiwicmlnaHRHYWluIiwibWVyZ2UiLCJjcmVhdGVTdGVyZW9QYW5uZXIiLCJQYW5uZXIiLCJpbml0aWFsUGFuIiwiX3Bhbm5lciIsIlBhbm5lcjNEIiwiY3JlYXRlUGFubmVyIiwicGFubmluZ01vZGVsIiwibWF4RGlzdGFuY2UiLCJkaXN0YW5jZU1vZGVsIiwiY29uZU91dGVyR2FpbiIsImNvbmVPdXRlckFuZ2xlIiwiY29uZUlubmVyQW5nbGUiLCJyZWZEaXN0YW5jZSIsInJvbGxvZmZGYWN0b3IiLCJfb3JpZW50YXRpb24iLCJvcmllbnRhdGlvblgiLCJvcmllbnRhdGlvblkiLCJvcmllbnRhdGlvbloiLCJfcG9zaXRpb24iLCJwb3NpdGlvblgiLCJwb3NpdGlvblkiLCJwb3NpdGlvbloiLCJfcmFtcFRpbWVDb25zdGFudCIsInNldFBvc2l0aW9uIiwieSIsInoiLCJzZXRPcmllbnRhdGlvbiIsInBvcyIsIl9hbGlhc1Byb3BlcnR5IiwiUGFuVm9sIiwiU29sbyIsIl9zb2xvQmluZCIsIl9zb2xvZWQiLCJzb2xvIiwiX2lzU29sb2VkIiwiX2FkZFNvbG8iLCJfcmVtb3ZlU29sbyIsIl9jdXJyZW50U29sbyIsIl9ub1NvbG9zIiwiQ3RybEludGVycG9sYXRlIiwibG93ZXJQb3NpdGlvbiIsImxvd2VyIiwidXBwZXIiLCJfaW50ZXJwb2xhdGUiLCJyZXRBcnJheSIsInJldE9iaiIsIl90b051bWJlciIsIkN0cmxNYXJrb3YiLCJuZXh0IiwiZGlzdHJpYnV0aW9uIiwiX2dldFByb2JEaXN0cmlidXRpb24iLCJyYW5kIiwicmFuZG9tIiwiZGlzdCIsImNob3NlbiIsIm5lZWRzTm9ybWFsaXppbmciLCJvcHRpb24iLCJwcm9iYWJpbGl0eSIsIkN0cmxQYXR0ZXJuIiwiX3NodWZmbGVkIiwiX2RpcmVjdGlvbiIsIlVwIiwiRG93biIsIlVwRG93biIsIkRvd25VcCIsIkFsdGVybmF0ZVVwIiwiQWx0ZXJuYXRlRG93biIsIlJhbmRvbSIsIlJhbmRvbVdhbGsiLCJSYW5kb21PbmNlIiwiX3NodWZmbGVWYWx1ZXMiLCJjb3B5IiwicmFuZFZhbCIsIkN0cmxSYW5kb20iLCJpbnRlZ2VyIiwiQnVmZmVycyIsInVybHMiLCJfYnVmZmVycyIsIl9sb2FkaW5nQ291bnQiLCJfYnVmZmVyTG9hZGVkIiwiaGFzIiwiaXNMb2FkZWQiLCJidWZmTmFtZSIsIkJ1c2VzIiwiY2hhbm5lbE5hbWUiLCJzZW5kS25vYiIsInJlY2VpdmUiLCJEcmF3IiwiZXhwaXJhdGlvbiIsImFudGljaXBhdGlvbiIsIl9ib3VuZERyYXdMb29wIiwiX2RyYXdMb29wIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiTGlzdGVuZXIiLCJMaXN0ZW5lckNvbnN0cnVjdG9yIiwiZm9yd2FyZFgiLCJmb3J3YXJkWSIsImZvcndhcmRaIiwidXBYIiwidXBZIiwidXBaIiwibGlzdGVuZXIiLCJvcmlnaW5hbENvbnRleHQiLCJyZW5kZXJSZXQiLCJhdHRlbXB0UmVuZGVyIiwidHJpZXMiLCJFZmZlY3QiLCJfZHJ5V2V0Iiwid2V0IiwiZWZmZWN0U2VuZCIsImVmZmVjdFJldHVybiIsImNvbm5lY3RFZmZlY3QiLCJlZmZlY3QiLCJBdXRvRmlsdGVyIiwiX2xmbyIsImRlcHRoIiwiZGVsYXkiLCJvY3QiLCJBdXRvUGFubmVyIiwiQXV0b1dhaCIsImZvbGxvd2VyIiwiX3N3ZWVwUmFuZ2UiLCJfYmFzZUZyZXF1ZW5jeSIsIl9pbnB1dEJvb3N0IiwiX2JhbmRwYXNzIiwiX3BlYWtpbmciLCJfc2V0U3dlZXBSYW5nZSIsInNlbnNpdGl2aXR5IiwiYmFzZUZyZXEiLCJzZW5zaXRpdnkiLCJNb2R1bG8iLCJtb2R1bHVzIiwiX3N1YnRyYWN0IiwiX21vZFNpZ25hbCIsIl9zZXRXYXZlU2hhcGVyIiwibW9kIiwiQml0Q3J1c2hlciIsImludlN0ZXBTaXplIiwiYml0cyIsIl9tb2R1bG8iLCJfYml0cyIsIkNoZWJ5c2hldiIsIl9vcmRlciIsIm9yZGVyIiwiX2dldENvZWZmaWNpZW50IiwiZGVncmVlIiwibWVtbyIsIlN0ZXJlb0VmZmVjdCIsImVmZmVjdFNlbmRMIiwiZWZmZWN0U2VuZFIiLCJlZmZlY3RSZXR1cm5MIiwiZWZmZWN0UmV0dXJuUiIsIkNob3J1cyIsIl9kZXB0aCIsIl9kZWxheVRpbWUiLCJfbGZvTCIsIl9sZm9SIiwiX2RlbGF5Tm9kZUwiLCJfZGVsYXlOb2RlUiIsInNwcmVhZCIsImRldmlhdGlvbiIsIkNvbnZvbHZlciIsIl9jb252b2x2ZXIiLCJjcmVhdGVDb252b2x2ZXIiLCJEaXN0b3J0aW9uIiwiX2Rpc3RvcnRpb24iLCJkaXN0b3J0aW9uIiwiZGVnIiwiRmVlZGJhY2tFZmZlY3QiLCJfZmVlZGJhY2tHYWluIiwiZmVlZGJhY2siLCJGZWVkYmFja0RlbGF5IiwiY29tYkZpbHRlclR1bmluZ3MiLCJhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMiLCJGcmVldmVyYiIsInJvb21TaXplIiwiX2NvbWJGaWx0ZXJzIiwiX2FsbHBhc3NGaWx0ZXJzTCIsIl9hbGxwYXNzRmlsdGVyc1IiLCJhbGxwYXNzTCIsImFsbHBhc3NSIiwibGZwZiIsImFsIiwiYXIiLCJjZiIsImNvbWJGaWx0ZXJEZWxheVRpbWVzIiwiY29tYkZpbHRlclJlc29uYW5jZXMiLCJhbGxwYXNzRmlsdGVyRnJlcXMiLCJKQ1JldmVyYiIsIl9zY2FsZVJvb21TaXplIiwiX2FsbHBhc3NGaWx0ZXJzIiwiX2ZlZWRiYWNrQ29tYkZpbHRlcnMiLCJhZiIsImFsbHBhc3MiLCJmYmNmIiwiYXBmIiwiTWlkU2lkZUVmZmVjdCIsIm1pZFNlbmQiLCJzaWRlU2VuZCIsIm1pZFJldHVybiIsInNpZGVSZXR1cm4iLCJQaGFzZXIiLCJfZmlsdGVyc0wiLCJfbWFrZUZpbHRlcnMiLCJzdGFnZXMiLCJfZmlsdGVyc1IiLCJjb25uZWN0VG9GcmVxIiwiZmlsdGVycyIsIlN0ZXJlb1hGZWVkYmFja0VmZmVjdCIsIl9mZWVkYmFja0xSIiwiX2ZlZWRiYWNrUkwiLCJQaW5nUG9uZ0RlbGF5IiwiX2xlZnREZWxheSIsIm1heERlbGF5VGltZSIsIl9yaWdodERlbGF5IiwiX3JpZ2h0UHJlRGVsYXkiLCJQaXRjaFNoaWZ0IiwiX2ZyZXF1ZW5jeSIsIl9kZWxheUEiLCJfbGZvQSIsIl9kZWxheUIiLCJfbGZvQiIsIl9jcm9zc0ZhZGUiLCJfY3Jvc3NGYWRlTEZPIiwiX2ZlZWRiYWNrRGVsYXkiLCJfcGl0Y2giLCJfd2luZG93U2l6ZSIsIndpbmRvd1NpemUiLCJmYWN0b3IiLCJCdWZmZXJTb3VyY2UiLCJfc291cmNlU3RvcHBlZCIsIl9zb3VyY2UiLCJfb25lbmRlZCIsInBsYXliYWNrUmF0ZSIsImZhZGVJbiIsImZhZGVPdXQiLCJfb25lbmRlZFRpbWVvdXQiLCJmYWRlSW5UaW1lIiwiY29tcHV0ZWREdXIiLCJmYWRlT3V0VGltZSIsImhlbGREdXJhdGlvbiIsInN0YXJ0RmFkZSIsImFkZGl0aW9uYWxUYWlsIiwiTm9pc2UiLCJfcGxheWJhY2tSYXRlIiwiX25vaXNlQnVmZmVycyIsInJhdGUiLCJfbm9pc2VBcnJheXMiLCJwaW5rIiwiY2hhbm5lbE51bSIsImIwIiwiYjEiLCJiMiIsImIzIiwiYjQiLCJiNSIsImI2Iiwid2hpdGUiLCJicm93biIsImxhc3RPdXQiLCJjcmVhdGVCdWZmZXJzIiwiUmV2ZXJiIiwicHJlRGVsYXkiLCJnZW5lcmF0ZSIsIm5vaXNlTCIsIm5vaXNlUiIsIlN0ZXJlb0ZlZWRiYWNrRWZmZWN0IiwiX2ZlZWRiYWNrTCIsIl9mZWVkYmFja1IiLCJTdGVyZW9XaWRlbmVyIiwid2lkdGgiLCJfdHdvVGltZXNXaWR0aE1pZCIsIl90d29UaW1lc1dpZHRoU2lkZSIsIl9taWRNdWx0IiwiX29uZU1pbnVzV2lkdGgiLCJfc2lkZU11bHQiLCJUcmVtb2xvIiwiX2FtcGxpdHVkZUwiLCJfYW1wbGl0dWRlUiIsIlZpYnJhdG8iLCJFdmVudCIsIl9zdGFydE9mZnNldCIsIl9wcm9iYWJpbGl0eSIsIl9odW1hbml6ZSIsImh1bWFuaXplIiwiX3Jlc2NoZWR1bGVFdmVudHMiLCJzdGFydFRpY2siLCJfZ2V0TG9vcER1cmF0aW9uIiwiX3RpY2siLCJwcm9iIiwidmFyaWF0aW9uIiwicmVzY2hlZHVsVGltZSIsImxhc3RFdmVudCIsImxvb3BEdXJhdGlvbiIsIkxvb3AiLCJfZXZlbnQiLCJpdGVyYXRpb25zIiwiaXRlcnMiLCJQYXJ0IiwiX2ZvckVhY2giLCJfc3RhcnROb3RlIiwiYXQiLCJfcmVzdGFydEV2ZW50IiwicmVtb3ZlQWxsIiwiX3NldEFsbCIsIl90ZXN0TG9vcEJvdW5kcmllcyIsIlBhdHRlcm4iLCJfcGF0dGVybiIsInBhdHRlcm4iLCJ2YWxzIiwiU2VxdWVuY2UiLCJfc3ViZGl2aXNpb24iLCJfaW5kZXhUaW1lIiwic3ViU3ViZGl2aXNpb24iLCJQdWxzZU9zY2lsbGF0b3IiLCJfd2lkdGhHYXRlIiwiX3Nhd3Rvb3RoIiwiUFdNT3NjaWxsYXRvciIsIl9wdWxzZSIsIm1vZHVsYXRpb25GcmVxdWVuY3kiLCJfbW9kdWxhdG9yIiwiRk1Pc2NpbGxhdG9yIiwiX2NhcnJpZXIiLCJtb2R1bGF0aW9uSW5kZXgiLCJtb2R1bGF0aW9uVHlwZSIsImhhcm1vbmljaXR5IiwiX21vZHVsYXRpb25Ob2RlIiwiQU1Pc2NpbGxhdG9yIiwiX21vZHVsYXRpb25TY2FsZSIsIkZhdE9zY2lsbGF0b3IiLCJfb3NjaWxsYXRvcnMiLCJfc3ByZWFkIiwib3NjIiwiaXRlcmF0b3IiLCJPbW5pT3NjaWxsYXRvciIsIl9zb3VyY2VUeXBlIiwiT21uaU9zY1R5cGUiLCJwcmVmaXgiLCJzdWJzdHIiLCJfY3JlYXRlTmV3T3NjaWxsYXRvciIsIm9zY1R5cGUiLCJPc2NpbGxhdG9yQ29uc3RydWN0b3IiLCJvbGRPc2MiLCJtVHlwZSIsIkluc3RydW1lbnQiLCJfc3luY01ldGhvZCIsInRpbWVQb3NpdGlvbiIsIm9yaWdpbmFsTWV0aG9kIiwiX29yaWdpbmFsX3RyaWdnZXJBdHRhY2siLCJfb3JpZ2luYWxfdHJpZ2dlclJlbGVhc2UiLCJNb25vcGhvbmljIiwicG9ydGFtZW50byIsIl90cmlnZ2VyRW52ZWxvcGVBdHRhY2siLCJzZXROb3RlIiwiX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UiLCJnZXRMZXZlbEF0VGltZSIsImVudmVsb3BlIiwicG9ydFRpbWUiLCJTeW50aCIsIm9zY2lsbGF0b3IiLCJBTVN5bnRoIiwibW9kdWxhdGlvbiIsIm1vZHVsYXRpb25FbnZlbG9wZSIsIk1vbm9TeW50aCIsImZpbHRlckVudmVsb3BlIiwiRHVvU3ludGgiLCJ2b2ljZTAiLCJ2b2ljZTEiLCJfdmlicmF0byIsInZpYnJhdG9SYXRlIiwiX3ZpYnJhdG9HYWluIiwidmlicmF0b0Ftb3VudCIsIkZNU3ludGgiLCJjYXJyaWVyIiwibW9kdWxhdG9yIiwiTWVtYnJhbmVTeW50aCIsInBpdGNoRGVjYXkiLCJtYXhOb3RlIiwiaW5oYXJtUmF0aW9zIiwiTWV0YWxTeW50aCIsIl9mcmVxTXVsdGlwbGllcnMiLCJfYW1wbGl0dWUiLCJfaGlnaHBhc3MiLCJfZmlsdGVyRnJlcVNjYWxlciIsIm11bHQiLCJ2ZWwiLCJvY3RzIiwiTm9pc2VTeW50aCIsIm5vaXNlIiwiUGx1Y2tTeW50aCIsIl9ub2lzZSIsImF0dGFja05vaXNlIiwiX2xmY2YiLCJkZWxheUFtb3VudCIsIlBvbHlTeW50aCIsInBvbHlwaG9ueSIsIk1BWF9QT0xZUEhPTlkiLCJ2b2ljZXMiLCJfdHJpZ2dlcnMiLCJ2Iiwidm9pY2UiLCJub3RlcyIsIm9sZGVzdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdHJpbmdpZmllZCIsImRlc2MiLCJyZWxlYXNlQWxsIiwiU2FtcGxlciIsInVybE1hcCIsImlzTmFOIiwiX2FjdGl2ZVNvdXJjZXMiLCJfZmluZENsb3Nlc3QiLCJkaWZmZXJlbmNlIiwiY2xvc2VzdE5vdGUiLCJzb3VyY2UiLCJzb3VyY2VzIiwic2V0V2F2ZVRhYmxlIiwiY3JlYXRlV2F2ZVRhYmxlIiwiR2FpblRvQXVkaW8iLCJOb3JtYWxpemUiLCJpbnB1dE1pbiIsImlucHV0TWF4IiwiX2lucHV0TWluIiwiX2lucHV0TWF4IiwiX2RpdiIsIlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsIiwiX291dHB1dFNpZyIsIl9sYXN0VmFsIiwiX29uVGljayIsIl9iaW5kQW5jaG9yVmFsdWUiLCJfYW5jaG9yVmFsdWUiLCJfc3luY2VkQ2FsbGJhY2siLCJHcmFpblBsYXllciIsImdyYWluU2l6ZSIsIl9ncmFpblNpemUiLCJfb3ZlcmxhcCIsIm92ZXJsYXAiLCJfb25zdG9wIiwiX29mZnNldCIsInNlZWsiLCJQbGF5ZXIiLCJhdXRvc3RhcnQiLCJfZWxhcHNlZFRpbWUiLCJyZXRyaWdnZXIiLCJfb25Tb3VyY2VFbmQiLCJjb21wdXRlZER1cmF0aW9uIiwiX3N0b3BBdE5leHRJdGVyYXRpb24iLCJuZXh0U3RvcCIsInBvc2l0aW9uIiwic3RvcFRpbWUiLCJQbGF5ZXJzIiwiX3BsYXllcnMiLCJfZmFkZUluIiwiX2ZhZGVPdXQiLCJwbGF5ZXIiLCJwbGF5aW5nIiwicGxheWVyTmFtZSIsInN0b3BBbGwiLCJVc2VyTWVkaWEiLCJfbWVkaWFTdHJlYW0iLCJfc3RyZWFtIiwiX2RldmljZSIsImxhYmVsT3JJZCIsImVudW1lcmF0ZURldmljZXMiLCJkZXZpY2VzIiwiZGV2aWNlIiwiZmluZCIsImxhYmVsIiwiZGV2aWNlSWQiLCJjb25zdHJhaW50cyIsImF1ZGlvIiwiZWNob0NhbmNlbGxhdGlvbiIsIm1lZGlhRGV2aWNlcyIsImdldFVzZXJNZWRpYSIsInN0cmVhbSIsImNyZWF0ZU1lZGlhU3RyZWFtU291cmNlIiwiZ2V0QXVkaW9UcmFja3MiLCJ0cmFjayIsImtpbmQiLCJhY3RpdmUiLCJncm91cElkIiwiTWlkaSIsImZhY3RvcnkiLCJnbG9iYWwiLCJyZXF1aXJlIiwiaCIsImNvZGUiLCIxIiwiY2hhckNvZGVBdCIsInRvQnl0ZUFycmF5IiwiZnJvbUJ5dGVBcnJheSIsImJhc2U2NGpzIiwiMiIsIjMiLCJUWVBFRF9BUlJBWV9TVVBQT1JUIiwid3JpdGUiLCJpc0J1ZmZlciIsIlkiLCJBcnJheUJ1ZmZlciIsImJ5dGVMZW5ndGgiLCJfYXVnbWVudCIsImRhdGEiLCJfX3Byb3RvX18iLCJfaXNCdWZmZXIiLCJwb29sU2l6ZSIsIloiLCJSIiwiVSIsInUiLCJOdW1iZXIiLCJWIiwidyIsIlMiLCJUIiwiQSIsIlciLCIkIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJYIiwiTiIsIlAiLCJhYSIsIk8iLCJTbG93QnVmZmVyIiwiSU5TUEVDVF9NQVhfQllURVMiLCJmb28iLCJzdWJhcnJheSIsImNvbXBhcmUiLCJpc0VuY29kaW5nIiwiZXF1YWxzIiwiaW5zcGVjdCIsInJlYWRVSW50OCIsIndyaXRlVUludDgiLCJ0b0pTT04iLCJfYXJyIiwicmVhZFVJbnRMRSIsInJlYWRVSW50QkUiLCJyZWFkVUludDE2TEUiLCJyZWFkVUludDE2QkUiLCJyZWFkVUludDMyTEUiLCJyZWFkVUludDMyQkUiLCJyZWFkSW50TEUiLCJyZWFkSW50QkUiLCJyZWFkSW50OCIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZEZsb2F0TEUiLCJyZWFkIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVJbnRMRSIsIndyaXRlVUludEJFIiwid3JpdGVVSW50MTZMRSIsIndyaXRlVUludDE2QkUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVSW50MzJCRSIsIndyaXRlSW50TEUiLCJ3cml0ZUludEJFIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkxFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVGbG9hdEJFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlRG91YmxlQkUiLCJfc2V0IiwiZmlsbCIsInRvQXJyYXlCdWZmZXIiLCJfIiwidG9Mb2NhbGVTdHJpbmciLCJzZWxmIiwiYmFzZTY0LWpzIiwiaWVlZTc1NCIsImlzYXJyYXkiLCI0IiwiRVM2UHJvbWlzZSIsImNhIiwiZWEiLCJfcmVzdWx0IiwiaWEiLCJnYSIsImhhIiwiX2xhYmVsIiwiX29uZXJyb3IiLCJmYSIsIl9zdWJzY3JpYmVycyIsImphIiwia2EiLCJfaW5zdGFuY2VDb25zdHJ1Y3RvciIsInByb21pc2UiLCJfcmVtYWluaW5nIiwiX2VudW1lcmF0ZSIsImRhIiwiTXV0YXRpb25PYnNlcnZlciIsIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiLCJiYSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiaW1wb3J0U2NyaXB0cyIsIk1lc3NhZ2VDaGFubmVsIiwibmV4dFRpY2siLCJjcmVhdGVUZXh0Tm9kZSIsIm9ic2VydmUiLCJjaGFyYWN0ZXJEYXRhIiwicG9ydDEiLCJwb3J0MiIsInJ1bk9uTG9vcCIsInJ1bk9uQ29udGV4dCIsInN1YnN0cmluZyIsIl9lYWNoRW50cnkiLCJfc2V0dGxlZEF0IiwiX3dpbGxTZXR0bGVBdCIsImFsbCIsInJhY2UiLCJyZWplY3QiLCJfc2V0U2NoZWR1bGVyIiwiX3NldEFzYXAiLCJfYXNhcCIsInBvbHlmaWxsIiwiRnVuY3Rpb24iLCJjYXN0IiwiX3Byb2Nlc3MiLCI1IiwiZmV0Y2hKc29ucCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJyZW1vdmVDaGlsZCIsImpzb25wQ2FsbGJhY2siLCJqc29ucENhbGxiYWNrRnVuY3Rpb24iLCJEYXRlIiwib2siLCJqc29uIiwic2V0QXR0cmlidXRlIiwiY2hhcnNldCIsImFwcGVuZENoaWxkIiwiNiIsImNyZWF0ZUVsZW1lbnROUyIsIkhUTUxFbGVtZW50Iiwic2FmYXJpIiwic2V0SW1tZWRpYXRlIiwicmV2b2tlT2JqZWN0VVJMIiwicmVhZHlTdGF0ZSIsIklOSVQiLCJocmVmIiwiZG93bmxvYWQiLCJNb3VzZUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsIkRPTkUiLCJGaWxlUmVhZGVyIiwib25sb2FkZW5kIiwicmVzdWx0IiwibG9jYXRpb24iLCJyZWFkQXNEYXRhVVJMIiwibXNTYXZlT3JPcGVuQmxvYiIsIldSSVRJTkciLCJvbndyaXRlc3RhcnQiLCJvbnByb2dyZXNzIiwib253cml0ZSIsIm9uYWJvcnQiLCJvbndyaXRlZW5kIiwiY29udGVudCIsInNhdmVBcyIsIjciLCJOYU4iLCJMTjIiLCI4IiwiOSIsIm9hIiwibmEiLCJtYSIsImxhIiwicWEiLCJyYSIsInNvcnQiLCJwYSIsImxpYnRlc3MiLCJHbHVUZXNzZWxhdG9yIiwid2luZGluZ1J1bGUiLCJHTFVfVEVTU19XSU5ESU5HX09ERCIsIkdMVV9URVNTX1dJTkRJTkdfTk9OWkVSTyIsIkdMVV9URVNTX1dJTkRJTkdfUE9TSVRJVkUiLCJHTFVfVEVTU19XSU5ESU5HX05FR0FUSVZFIiwiR0xVX1RFU1NfV0lORElOR19BQlNfR0VRX1RXTyIsInByaW1pdGl2ZVR5cGUiLCJHTF9MSU5FX0xPT1AiLCJHTF9UUklBTkdMRVMiLCJHTF9UUklBTkdMRV9TVFJJUCIsIkdMX1RSSUFOR0xFX0ZBTiIsImVycm9yVHlwZSIsIkdMVV9URVNTX01JU1NJTkdfQkVHSU5fUE9MWUdPTiIsIkdMVV9URVNTX01JU1NJTkdfRU5EX1BPTFlHT04iLCJHTFVfVEVTU19NSVNTSU5HX0JFR0lOX0NPTlRPVVIiLCJHTFVfVEVTU19NSVNTSU5HX0VORF9DT05UT1VSIiwiR0xVX1RFU1NfQ09PUkRfVE9PX0xBUkdFIiwiR0xVX1RFU1NfTkVFRF9DT01CSU5FX0NBTExCQUNLIiwiZ2x1RW51bSIsIkdMVV9URVNTX01FU0giLCJHTFVfVEVTU19UT0xFUkFOQ0UiLCJHTFVfVEVTU19XSU5ESU5HX1JVTEUiLCJHTFVfVEVTU19CT1VOREFSWV9PTkxZIiwiR0xVX0lOVkFMSURfRU5VTSIsIkdMVV9JTlZBTElEX1ZBTFVFIiwiR0xVX1RFU1NfQkVHSU4iLCJHTFVfVEVTU19WRVJURVgiLCJHTFVfVEVTU19FTkQiLCJHTFVfVEVTU19FUlJPUiIsIkdMVV9URVNTX0VER0VfRkxBRyIsIkdMVV9URVNTX0NPTUJJTkUiLCJHTFVfVEVTU19CRUdJTl9EQVRBIiwiR0xVX1RFU1NfVkVSVEVYX0RBVEEiLCJHTFVfVEVTU19FTkRfREFUQSIsIkdMVV9URVNTX0VSUk9SX0RBVEEiLCJHTFVfVEVTU19FREdFX0ZMQUdfREFUQSIsIkdMVV9URVNTX0NPTUJJTkVfREFUQSIsImdsdURlbGV0ZVRlc3MiLCJnbHVUZXNzUHJvcGVydHkiLCJnbHVHZXRUZXNzUHJvcGVydHkiLCJnbHVUZXNzTm9ybWFsIiwiZ2x1VGVzc0NhbGxiYWNrIiwiZ2x1VGVzc1ZlcnRleCIsImdsdVRlc3NCZWdpblBvbHlnb24iLCJnbHVUZXNzQmVnaW5Db250b3VyIiwiZ2x1VGVzc0VuZENvbnRvdXIiLCJnbHVUZXNzRW5kUG9seWdvbiIsIjEwIiwib3BlbnR5cGUiLCJ0YWJsZSIsIlVpbnQxNkFycmF5IiwidHJhbnMiLCJzb3VyY2VJbmRleCIsInRhZyIsImJpdGNvdW50IiwiZGVzdExlbiIsImx0cmVlIiwiZHRyZWUiLCJ2ZSIsInVlIiwic2UiLCJ0ZSIsImtlIiwib2UiLCJwZSIsInFlIiwicmUiLCJsZSIsIngxIiwieTEiLCJ4MiIsInkyIiwiY29tbWFuZHMiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsInRhYmxlTmFtZSIsImZpZWxkcyIsImZvcm1hdCIsImdseXBocyIsInhlIiwiYXNzZXJ0Iiwic2NyaXB0IiwiZGVmYXVsdExhbmdTeXMiLCJyZXFGZWF0dXJlSW5kZXgiLCJmZWF0dXJlSW5kZXhlcyIsImxhbmdTeXNSZWNvcmRzIiwibGFuZ1N5cyIsImZlYXR1cmUiLCJmZWF0dXJlUGFyYW1zIiwibG9va3VwTGlzdEluZGV4ZXMiLCJsb29rdXBUeXBlIiwibG9va3VwRmxhZyIsInN1YnRhYmxlcyIsImdldFVpbnQ4IiwiZ2V0VWludDE2IiwiZ2V0VWludDMyIiwiZ2V0SW50MTYiLCJyZWxhdGl2ZU9mZnNldCIsImdseXBoSW5kZXgiLCJmb250IiwiY21hcCIsImVuY29kaW5nIiwibmFtZXMiLCJRZSIsIm51bWJlck9mR2x5cGhzIiwiZ2x5cGhOYW1lSW5kZXgiLCJiaW5kQ29uc3RydWN0b3JWYWx1ZXMiLCJwYXRoIiwiY29uZmlndXJhYmxlIiwiTGUiLCJnZXRDYXJkMTYiLCJnZXRCeXRlIiwiZ2V0T2Zmc2V0IiwiZ2V0Qnl0ZXMiLCJvYmplY3RzIiwiZW5kT2Zmc2V0IiwicGFyc2VCeXRlIiwiUGFyc2VyIiwiTmUiLCJvcCIsInNhIiwiVGUiLCJ0YSIsIlVlIiwiRGF0YVZpZXciLCJfc3VicnMiLCJfc3VicnNCaWFzIiwicHJpdmF0ZSIsIl9kZWZhdWx0V2lkdGhYIiwiZGVmYXVsdFdpZHRoWCIsIl9ub21pbmFsV2lkdGhYIiwibm9taW5hbFdpZHRoWCIsInN1YnJzIiwiX3ByaXZhdGVEaWN0IiwieGEiLCJjbG9zZVBhdGgiLCJtb3ZlVG8iLCJpc0NJREZvbnQiLCJ0YWJsZXMiLCJjZmYiLCJ0b3BEaWN0IiwiX2ZkU2VsZWN0IiwiX2ZkQXJyYXkiLCJwb3AiLCJsaW5lVG8iLCJjdXJ2ZVRvIiwiZ3N1YnJzQmlhcyIsImdzdWJycyIsImFkdmFuY2VXaWR0aCIsIkFhIiwiRGEiLCJFYSIsIkllIiwiUmVjb3JkIiwiZGljdCIsIkZhIiwidG9wRGljdHMiLCJKYSIsIlhhIiwiWWEiLCJkZiIsImZmIiwiZWYiLCIkYSIsIl9hIiwibWIiLCJuYiIsIm9iIiwicGIiLCJUYWJsZSIsIm51bVRhYmxlcyIsInNlYXJjaFJhbmdlIiwiZW50cnlTZWxlY3RvciIsInJhbmdlU2hpZnQiLCJzaXplT2YiLCJhcmd1bWVudCIsImVuY29kZSIsInFiIiwiY2hhclRvR2x5cGhJbmRleCIsImdldE1ldHJpY3MiLCJ0YiIsInViIiwidmIiLCJ3YiIsInhiIiwieWIiLCJ6YiIsIkFiIiwic3Vic3RGb3JtYXQiLCJDYiIsIkRiIiwiRWIiLCJGYiIsInBhcnNlU2hvcnQiLCJHYiIsIm51bWJlck9mQ29udG91cnMiLCJfeE1pbiIsIl95TWluIiwiX3hNYXgiLCJfeU1heCIsImVuZFBvaW50SW5kaWNlcyIsInBhcnNlVVNob3J0IiwiaW5zdHJ1Y3Rpb25MZW5ndGgiLCJpbnN0cnVjdGlvbnMiLCJvbkN1cnZlIiwibGFzdFBvaW50T2ZDb250b3VyIiwicG9pbnRzIiwiaXNDb21wb3NpdGUiLCJjb21wb25lbnRzIiwieFNjYWxlIiwic2NhbGUwMSIsInNjYWxlMTAiLCJ5U2NhbGUiLCJkeSIsIm1hdGNoZWRQb2ludHMiLCJwYXJzZUNoYXIiLCJwYXJzZUYyRG90MTQiLCJIYiIsIkpiIiwiSWIiLCJxdWFkcmF0aWNDdXJ2ZVRvIiwiS2IiLCJnZXRQYXRoIiwiTWIiLCJnZXRDb21tYW5kcyIsInZmIiwiX2ZwZ21TdGF0ZSIsIl9wcmVwU3RhdGUiLCJfZXJyb3JTdGF0ZSIsIk5iIiwiT2IiLCJzaWduIiwiUGIiLCJRYiIsIlJiIiwiU2IiLCJUYiIsImF4aXMiLCJzbG9wZSIsIm5vcm1hbFNsb3BlIiwiZnJlZXplIiwiVWIiLCJ4ZiIsInlmIiwiVmIiLCJ4byIsInlvIiwicHJldlBvaW50T25Db250b3VyIiwibmV4dFBvaW50T25Db250b3VyIiwieFRvdWNoZWQiLCJ5VG91Y2hlZCIsInByZXZlbnRFeHRlbnNpb25zIiwiV2IiLCJlbnYiLCJzdGFjayIsInByb2ciLCJ6cDAiLCJ6cDEiLCJ6cDIiLCJycDAiLCJycDEiLCJycDIiLCJmdiIsInB2IiwiZHB2IiwiWGIiLCJ0Wm9uZSIsImdab25lIiwiWWIiLCJpcCIsIlpiIiwiREVCVUciLCIkYiIsIl9iIiwiYWMiLCJ6MiIsInoxIiwiYmMiLCJ4YyIsIkdjIiwiejAiLCJkaXN0YW5jZSIsInpmIiwic2V0UmVsYXRpdmUiLCJ0b3VjaCIsIkhjIiwidG91Y2hlZCIsInByZXZUb3VjaGVkIiwibmV4dFRvdWNoZWQiLCJpbnRlcnBvbGF0ZSIsIkljIiwiSmMiLCJjb250b3VycyIsIktjIiwiTmMiLCJRYyIsImN2dCIsImN2Q3V0SW4iLCJYYyIsIlljIiwibWQiLCJwcGVtIiwiZGVsdGFCYXNlIiwiZGVsdGFTaGlmdCIsInhkIiwiemQiLCJHZCIsIk5kIiwiT2QiLCJQZCIsIm1pbkRpcyIsIlFkIiwiZW1wdHkiLCJmYW1pbHlOYW1lIiwic3R5bGVOYW1lIiwidW5pdHNQZXJFbSIsImFzY2VuZGVyIiwiZGVzY2VuZGVyIiwiZm9udEZhbWlseSIsImVuIiwiZm9udFN1YmZhbWlseSIsImZ1bGxOYW1lIiwicG9zdFNjcmlwdE5hbWUiLCJkZXNpZ25lciIsImRlc2lnbmVyVVJMIiwibWFudWZhY3R1cmVyIiwibWFudWZhY3R1cmVyVVJMIiwibGljZW5zZSIsImxpY2Vuc2VVUkwiLCJkZXNjcmlwdGlvbiIsImNvcHlyaWdodCIsInRyYWRlbWFyayIsImNyZWF0ZWRUaW1lc3RhbXAiLCJvczIiLCJ1c1dlaWdodENsYXNzIiwid2VpZ2h0Q2xhc3MiLCJ1c1dlaWdodENsYXNzZXMiLCJNRURJVU0iLCJ1c1dpZHRoQ2xhc3MiLCJ3aWR0aENsYXNzIiwidXNXaWR0aENsYXNzZXMiLCJmc1NlbGVjdGlvbiIsImZzU2VsZWN0aW9uVmFsdWVzIiwiUkVHVUxBUiIsIlNlIiwiR2x5cGhTZXQiLCJzdWJzdGl0dXRpb24iLCJfaGludGluZyIsIm91dGxpbmVzRm9ybWF0IiwiUmQiLCJTZCIsIlRkIiwicGFyc2VUYWciLCJwYXJzZUZpeGVkIiwic2tpcCIsIlVkIiwiY29vcmRpbmF0ZXMiLCJWZCIsImNlIiwicmVhZEZpbGUiLCJtZXNzYWdlIiwiZWUiLCJnZXRUYWciLCJnZXRVTG9uZyIsImNoZWNrc3VtIiwiY29tcHJlc3Npb24iLCJnZSIsImNvbXByZXNzZWRMZW5ndGgiLCJ3ZSIsImhlIiwiZ2V0VVNob3J0IiwiZmUiLCJNZSIsInBhcnNlIiwicGFyc2VTaG9ydExpc3QiLCJmcGdtIiwicGFyc2VCeXRlTGlzdCIsImhlYWQiLCJXZSIsImluZGV4VG9Mb2NGb3JtYXQiLCJoaGVhIiwiWGUiLCJudW1iZXJPZkhNZXRyaWNzIiwiWmUiLCJtYXhwIiwiJGUiLCJudW1HbHlwaHMiLCJqZiIsInBvc3QiLCJrZiIsImdseXBoTmFtZXMiLCJwcmVwIiwiZ2YiLCJIZiIsIlZlIiwiWWUiLCJnbHlwaEluZGV4TWFwIiwiYWRkVW5pY29kZSIsImNmZkVuY29kaW5nIiwiZ2x5cGhJbmRleFRvTmFtZSIsImtlcm5pbmdQYWlycyIsIkdmIiwiZ3BvcyIsIkZmIiwiaW5pdCIsImdzdWIiLCJvZiIsImZ2YXIiLCJDZiIsIm1ldGEiLCJwZiIsIm1ldGFzIiwiY29kZVBvaW50QXQiLCJtZSIsIm5lIiwiaXNFbXB0eSIsImFkZFBvaW50IiwiYWRkWCIsImFkZFkiLCJhZGRCZXppZXIiLCJhZGRRdWFkIiwiYmV6aWVyQ3VydmVUbyIsInF1YWRUbyIsImdldEJvdW5kaW5nQm94IiwiZHJhdyIsImJlZ2luUGF0aCIsImZpbGxTdHlsZSIsInN0cm9rZVN0eWxlIiwibGluZVdpZHRoIiwidG9QYXRoRGF0YSIsInRvU1ZHIiwidG9ET01FbGVtZW50IiwiemUiLCJBZSIsIkJlIiwiQ2UiLCJCWVRFIiwiQ0hBUiIsIkNIQVJBUlJBWSIsIlVTSE9SVCIsIlNIT1JUIiwiVUlOVDI0IiwiVUxPTkciLCJMT05HIiwiRklYRUQiLCJGV09SRCIsIlVGV09SRCIsIkxPTkdEQVRFVElNRSIsIlRBRyIsIkNhcmQ4IiwiQ2FyZDE2IiwiT2ZmU2l6ZSIsIlNJRCIsIk5VTUJFUiIsIk5VTUJFUjE2IiwiTlVNQkVSMzIiLCJSRUFMIiwiTkFNRSIsIlNUUklORyIsIlVURjgiLCJVVEYxNiIsIkRlIiwieC1tYWMtY3JvYXRpYW4iLCJ4LW1hYy1jeXJpbGxpYyIsIngtbWFjLWdhZWxpYyIsIngtbWFjLWdyZWVrIiwieC1tYWMtaWNlbGFuZGljIiwieC1tYWMtaW51aXQiLCJ4LW1hYy1jZSIsIm1hY2ludG9zaCIsIngtbWFjLXJvbWFuaWFuIiwieC1tYWMtdHVya2lzaCIsIk1BQ1NUUklORyIsIkVlIiwiRmUiLCJXZWFrTWFwIiwiR2UiLCJWQVJERUxUQVMiLCJJTkRFWCIsIk9CSkVDVCIsIkRJQ1QiLCJPUEVSQU5EIiwiT1BFUkFUT1IiLCJPUCIsIkhlIiwiQ0hBUlNUUklORyIsIlRBQkxFIiwiUkVDT1JEIiwiTElURVJBTCIsIkNvdmVyYWdlIiwiU2NyaXB0TGlzdCIsIkZlYXR1cmVMaXN0IiwiTG9va3VwTGlzdCIsInVzaG9ydExpc3QiLCJ0YWJsZUxpc3QiLCJyZWNvcmRMaXN0IiwiSmUiLCJieXRlIiwidVNob3J0Iiwic2hvcnQiLCJ1TG9uZyIsImZpeGVkIiwibG9uZ0RhdGVUaW1lIiwiZ2V0SW50OCIsInBhcnNlQ2FyZDgiLCJwYXJzZUNhcmQxNiIsInBhcnNlU0lEIiwicGFyc2VPZmZzZXQxNiIsInBhcnNlVUxvbmciLCJwYXJzZU9mZnNldDMyIiwicGFyc2VTdHJpbmciLCJwYXJzZUxvbmdEYXRlVGltZSIsInBhcnNlVmVyc2lvbiIsInBhcnNlVUxvbmdMaXN0IiwicGFyc2VPZmZzZXQxNkxpc3QiLCJwYXJzZVVTaG9ydExpc3QiLCJwYXJzZUxpc3QiLCJwYXJzZUxpc3QzMiIsInBhcnNlUmVjb3JkTGlzdCIsInBhcnNlUmVjb3JkTGlzdDMyIiwicGFyc2VTdHJ1Y3QiLCJwYXJzZVZhbHVlUmVjb3JkIiwieFBsYWNlbWVudCIsInlQbGFjZW1lbnQiLCJ4QWR2YW5jZSIsInlBZHZhbmNlIiwieFBsYURldmljZSIsInlQbGFEZXZpY2UiLCJ4QWR2RGV2aWNlIiwieUFkdkRldmljZSIsInBhcnNlVmFsdWVSZWNvcmRMaXN0IiwicGFyc2VQb2ludGVyIiwicGFyc2VQb2ludGVyMzIiLCJwYXJzZUxpc3RPZkxpc3RzIiwicGFyc2VDb3ZlcmFnZSIsInJhbmdlcyIsInBhcnNlQ2xhc3NEZWYiLCJzdGFydEdseXBoIiwiY2xhc3NlcyIsImNsYXNzSWQiLCJsaXN0IiwibGlzdDMyIiwicmVjb3JkTGlzdDMyIiwicG9pbnRlciIsInBvaW50ZXIzMiIsIm9mZnNldDE2IiwidVNob3J0TGlzdCIsIm9mZnNldDMyIiwidUxvbmdMaXN0Iiwic3RydWN0IiwiY292ZXJhZ2UiLCJjbGFzc0RlZiIsIktlIiwicmVzZXJ2ZWQiLCJwYXJzZVNjcmlwdExpc3QiLCJwYXJzZUZlYXR1cmVMaXN0IiwicGFyc2VMb29rdXBMaXN0IiwibWFya0ZpbHRlcmluZ1NldCIsInBhcnNlRmVhdHVyZVZhcmlhdGlvbnNMaXN0IiwiY29uZGl0aW9uU2V0T2Zmc2V0IiwiZmVhdHVyZVRhYmxlU3Vic3RpdHV0aW9uT2Zmc2V0IiwiZ2V0Q2FyZDgiLCJnZXRTaG9ydCIsImdldEZpeGVkIiwiYnl0ZXNUb1N0cmluZyIsImxhbmd1YWdlIiwiZ3JvdXBDb3VudCIsInNlZ0NvdW50IiwibWFrZSIsInVuaWNvZGUiLCJ1bmljb2RlcyIsImdseXBoSWQiLCJzZWdDb3VudFgyIiwiY21hcDRMZW5ndGgiLCJjbWFwMTJPZmZzZXQiLCJPZSIsIlBlIiwibmFtZVRvR2x5cGhJbmRleCIsIlJlIiwibGluZSIsInhNaW4iLCJ5TWluIiwieE1heCIsInlNYXgiLCJoaW50aW5nIiwiZ2V0Q29udG91cnMiLCJsZWZ0U2lkZUJlYXJpbmciLCJyaWdodFNpZGVCZWFyaW5nIiwiZHJhd1BvaW50cyIsImFyYyIsImRyYXdNZXRyaWNzIiwiZ2x5cGhMb2FkZXIiLCJ0dGZHbHlwaExvYWRlciIsImNmZkdseXBoTG9hZGVyIiwiZm9ybWF0TWFqb3IiLCJmb3JtYXRNaW5vciIsIm9mZnNldFNpemUiLCJyb3MiLCJmZEFycmF5IiwiZmRTZWxlY3QiLCJ5YSIsInN1YnJzQmlhcyIsImNoYXJTdHJpbmdzIiwibkdseXBocyIsInZhIiwid2EiLCJ3ZWlnaHQiLCJ3ZWlnaHROYW1lIiwiZm9udEJCb3giLCJmb250TWF0cml4IiwiaGVhZGVyIiwibmFtZUluZGV4IiwiQ2EiLCJ0b3BEaWN0SW5kZXgiLCJnbG9iYWxTdWJySW5kZXgiLCJjaGFyc2V0cyIsIklhIiwiY2hhclN0cmluZ3NJbmRleCIsIkthIiwicHJpdmF0ZURpY3QiLCJMYSIsInN0cmluZ0luZGV4Iiwic3RyaW5ncyIsIkdhIiwiZm9udFJldmlzaW9uIiwiY2hlY2tTdW1BZGp1c3RtZW50IiwibWFnaWNOdW1iZXIiLCJmbGFncyIsImNyZWF0ZWQiLCJtb2RpZmllZCIsIm1hY1N0eWxlIiwibG93ZXN0UmVjUFBFTSIsImZvbnREaXJlY3Rpb25IaW50IiwiZ2x5cGhEYXRhRm9ybWF0IiwiZ2V0VGltZSIsImxpbmVHYXAiLCJhZHZhbmNlV2lkdGhNYXgiLCJtaW5MZWZ0U2lkZUJlYXJpbmciLCJtaW5SaWdodFNpZGVCZWFyaW5nIiwieE1heEV4dGVudCIsImNhcmV0U2xvcGVSaXNlIiwiY2FyZXRTbG9wZVJ1biIsImNhcmV0T2Zmc2V0IiwibWV0cmljRGF0YUZvcm1hdCIsIm1heFBvaW50cyIsIm1heENvbnRvdXJzIiwibWF4Q29tcG9zaXRlUG9pbnRzIiwibWF4Q29tcG9zaXRlQ29udG91cnMiLCJtYXhab25lcyIsIm1heFR3aWxpZ2h0UG9pbnRzIiwibWF4U3RvcmFnZSIsIm1heEZ1bmN0aW9uRGVmcyIsIm1heEluc3RydWN0aW9uRGVmcyIsIm1heFN0YWNrRWxlbWVudHMiLCJtYXhTaXplT2ZJbnN0cnVjdGlvbnMiLCJtYXhDb21wb25lbnRFbGVtZW50cyIsIm1heENvbXBvbmVudERlcHRoIiwiX2UiLCIwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5IiwiMjAiLCIyMSIsIjIyIiwiMjMiLCIyNCIsIjI1IiwiMjYiLCIyNyIsIjI4IiwiMjkiLCIzMCIsIjMxIiwiMzIiLCIzMyIsIjM0IiwiMzUiLCIzNiIsIjM3IiwiMzgiLCIzOSIsIjQwIiwiNDEiLCI0MiIsIjQzIiwiNDQiLCI0NSIsIjQ2IiwiNDciLCI0OCIsIjQ5IiwiNTAiLCI1MSIsIjUyIiwiNTMiLCI1NCIsIjU1IiwiNTYiLCI1NyIsIjU4IiwiNTkiLCI2MCIsIjYxIiwiNjIiLCI2MyIsIjY0IiwiNjUiLCI2NiIsIjY3IiwiNjgiLCI2OSIsIjcwIiwiNzEiLCI3MiIsIjczIiwiNzQiLCI3NSIsIjc2IiwiNzciLCI3OCIsIjc5IiwiODAiLCI4MSIsIjgyIiwiODMiLCI4NCIsIjg1IiwiODYiLCI4NyIsIjg4IiwiODkiLCI5MCIsIjkxIiwiOTIiLCI5MyIsIjk0IiwiMTI4IiwiMTI5IiwiMTMwIiwiMTMxIiwiMTMyIiwiMTMzIiwiMTM0IiwiMTM1IiwiMTM2IiwiMTM3IiwiMTM4IiwiMTM5IiwiMTQwIiwiMTQxIiwiMTQyIiwiMTQzIiwiMTQ0IiwiMTQ1IiwiMTQ2IiwiMTQ3IiwiMTQ4IiwiMTQ5IiwiMTUwIiwiMTUxIiwiYmYiLCIxMDc4IiwiMTA1MiIsIjExNTYiLCIxMTE4IiwiNTEyMSIsIjE1MzYxIiwiMzA3MyIsIjIwNDkiLCIxMTI2NSIsIjEzMzEzIiwiMTIyODkiLCI0MDk3IiwiNjE0NSIsIjgxOTMiLCIxNjM4NSIsIjEwMjUiLCIxMDI0MSIsIjcxNjkiLCIxNDMzNyIsIjkyMTciLCIxMDY3IiwiMTEwMSIsIjIwOTIiLCIxMDY4IiwiMTEzMyIsIjEwNjkiLCIxMDU5IiwiMjExNyIsIjEwOTMiLCI4MjE4IiwiNTE0NiIsIjExNTAiLCIxMDI2IiwiMTAyNyIsIjMwNzYiLCI1MTI0IiwiMjA1MiIsIjQxMDAiLCIxMDI4IiwiMTE1NSIsIjEwNTAiLCI0MTIyIiwiMTAyOSIsIjEwMzAiLCIxMTY0IiwiMTEyNSIsIjIwNjciLCIxMDQzIiwiMzA4MSIsIjEwMjQ5IiwiNDEwNSIsIjkyMjUiLCIxNjM5MyIsIjYxNTMiLCI4MjAxIiwiMTc0MTciLCI1MTI5IiwiMTMzMjEiLCIxODQ0MSIsIjcxNzciLCIxMTI3MyIsIjIwNTciLCIxMDMzIiwiMTIyOTciLCIxMDYxIiwiMTA4MCIsIjExMjQiLCIxMDM1IiwiMjA2MCIsIjMwODQiLCIxMDM2IiwiNTEzMiIsIjYxNTYiLCI0MTA4IiwiMTEyMiIsIjExMTAiLCIxMDc5IiwiMzA3OSIsIjEwMzEiLCI1MTI3IiwiNDEwMyIsIjIwNTUiLCIxMDMyIiwiMTEzNSIsIjEwOTUiLCIxMTI4IiwiMTAzNyIsIjEwODEiLCIxMDM4IiwiMTAzOSIsIjExMzYiLCIxMDU3IiwiMTExNyIsIjIxNDEiLCIyMTA4IiwiMTA3NiIsIjEwNzciLCIxMDQwIiwiMjA2NCIsIjEwNDEiLCIxMDk5IiwiMTA4NyIsIjExMDciLCIxMTU4IiwiMTE1OSIsIjEwODkiLCIxMTExIiwiMTA0MiIsIjEwODgiLCIxMTA4IiwiMTA2MiIsIjEwNjMiLCIyMDk0IiwiMTEzNCIsIjEwNzEiLCIyMTEwIiwiMTA4NiIsIjExMDAiLCIxMDgyIiwiMTE1MyIsIjExNDYiLCIxMTAyIiwiMTE0OCIsIjExMDQiLCIyMTI4IiwiMTEyMSIsIjEwNDQiLCIyMDY4IiwiMTE1NCIsIjEwOTYiLCIxMTIzIiwiMTA0NSIsIjEwNDYiLCIyMDcwIiwiMTA5NCIsIjExMzEiLCIyMTU1IiwiMzE3OSIsIjEwNDgiLCIxMDQ3IiwiMTA0OSIsIjkyNzUiLCI0MTU1IiwiNTE3OSIsIjMxMzEiLCIxMDgzIiwiMjEwNyIsIjgyNTEiLCI2MjAzIiwiNzIyNyIsIjExMDMiLCI3MTk0IiwiMzA5OCIsIjYxNzAiLCIyMDc0IiwiMTEzMiIsIjEwNzQiLCIxMTE1IiwiMTA1MSIsIjEwNjAiLCIxMTI3NCIsIjE2Mzk0IiwiMTMzMjIiLCI5MjI2IiwiNTEzMCIsIjcxNzgiLCIxMjI5OCIsIjE3NDE4IiwiNDEwNiIsIjE4NDQyIiwiMjA1OCIsIjE5NDY2IiwiNjE1NCIsIjE1MzcwIiwiMTAyNTAiLCIyMDQ5MCIsIjMwODIiLCIxMDM0IiwiMjE1MTQiLCIxNDM0NiIsIjgyMDIiLCIyMDc3IiwiMTA1MyIsIjExMTQiLCIxMDY0IiwiMjE0MyIsIjEwOTciLCIxMDkyIiwiMTA5OCIsIjEwNTQiLCIxMTA1IiwiMTA1NSIsIjEwOTAiLCIxMTUyIiwiMTA1OCIsIjEwNzAiLCIxMDU2IiwiMjExNSIsIjEwOTEiLCIxMDY2IiwiMTEwNiIsIjExNjAiLCIxMTU3IiwiMTE0NCIsIjExMzAiLCJwbGF0Zm9ybUlEIiwiZW5jb2RpbmdJRCIsImxhbmd1YWdlSUQiLCJuYW1lSUQiLCJoZiIsImJlZ2luIiwieEF2Z0NoYXJXaWR0aCIsImZzVHlwZSIsInlTdWJzY3JpcHRYU2l6ZSIsInlTdWJzY3JpcHRZU2l6ZSIsInlTdWJzY3JpcHRYT2Zmc2V0IiwieVN1YnNjcmlwdFlPZmZzZXQiLCJ5U3VwZXJzY3JpcHRYU2l6ZSIsInlTdXBlcnNjcmlwdFlTaXplIiwieVN1cGVyc2NyaXB0WE9mZnNldCIsInlTdXBlcnNjcmlwdFlPZmZzZXQiLCJ5U3RyaWtlb3V0U2l6ZSIsInlTdHJpa2VvdXRQb3NpdGlvbiIsInNGYW1pbHlDbGFzcyIsInBhbm9zZSIsInVsVW5pY29kZVJhbmdlMSIsInVsVW5pY29kZVJhbmdlMiIsInVsVW5pY29kZVJhbmdlMyIsInVsVW5pY29kZVJhbmdlNCIsImFjaFZlbmRJRCIsInVzRmlyc3RDaGFySW5kZXgiLCJ1c0xhc3RDaGFySW5kZXgiLCJzVHlwb0FzY2VuZGVyIiwic1R5cG9EZXNjZW5kZXIiLCJzVHlwb0xpbmVHYXAiLCJ1c1dpbkFzY2VudCIsInVzV2luRGVzY2VudCIsInVsQ29kZVBhZ2VSYW5nZTEiLCJ1bENvZGVQYWdlUmFuZ2UyIiwic3hIZWlnaHQiLCJzQ2FwSGVpZ2h0IiwidXNEZWZhdWx0Q2hhciIsInVzQnJlYWtDaGFyIiwidXNNYXhDb250ZW50IiwidW5pY29kZVJhbmdlcyIsImdldFVuaWNvZGVSYW5nZSIsIml0YWxpY0FuZ2xlIiwidW5kZXJsaW5lUG9zaXRpb24iLCJ1bmRlcmxpbmVUaGlja25lc3MiLCJpc0ZpeGVkUGl0Y2giLCJtaW5NZW1UeXBlNDIiLCJtYXhNZW1UeXBlNDIiLCJtaW5NZW1UeXBlMSIsIm1heE1lbVR5cGUxIiwibGYiLCJkZWx0YUdseXBoSWQiLCJzdWJzdGl0dXRlIiwic2VxdWVuY2VzIiwiYWx0ZXJuYXRlU2V0cyIsImxpZ2F0dXJlU2V0cyIsImxpZ0dseXBoIiwibWYiLCJzZXF1ZW5jZUluZGV4IiwibG9va3VwTGlzdEluZGV4IiwicnVsZVNldHMiLCJsb29rdXBSZWNvcmRzIiwiY2xhc3NTZXRzIiwiY292ZXJhZ2VzIiwiY2hhaW5SdWxlU2V0cyIsImJhY2t0cmFjayIsImxvb2thaGVhZCIsImJhY2t0cmFja0NsYXNzRGVmIiwiaW5wdXRDbGFzc0RlZiIsImxvb2thaGVhZENsYXNzRGVmIiwiY2hhaW5DbGFzc1NldCIsImJhY2t0cmFja0NvdmVyYWdlIiwiaW5wdXRDb3ZlcmFnZSIsImxvb2thaGVhZENvdmVyYWdlIiwic3Vic3RpdHV0ZXMiLCJuZiIsInNjcmlwdHMiLCJmZWF0dXJlcyIsImxvb2t1cHMiLCJ2YXJpYXRpb25zIiwicWYiLCJmb250VG9UYWJsZSIsImFkdmFuY2VXaWR0aEF2ZyIsInJiIiwibWF4TGVmdFNpZGVCZWFyaW5nIiwiaGFzQ2hhciIsImdldEVuZ2xpc2hOYW1lIiwidW5pcXVlSUQiLCJwcmVmZXJyZWRGYW1pbHkiLCJwcmVmZXJyZWRTdWJmYW1pbHkiLCJjb21wdXRlQ2hlY2tTdW0iLCJzZWFyY2hUYWciLCJiaW5TZWFyY2giLCJnZXRUYWJsZSIsImNyZWF0ZURlZmF1bHRUYWJsZSIsImdldFNjcmlwdE5hbWVzIiwiZ2V0RGVmYXVsdFNjcmlwdE5hbWUiLCJnZXRTY3JpcHRUYWJsZSIsImdldExhbmdTeXNUYWJsZSIsImdldEZlYXR1cmVUYWJsZSIsImdldExvb2t1cFRhYmxlcyIsImdldEdseXBoQ2xhc3MiLCJnZXRDb3ZlcmFnZUluZGV4IiwiZXhwYW5kQ292ZXJhZ2UiLCJkZWZhdWx0S2VybmluZ1RhYmxlcyIsImdldEtlcm5pbmdUYWJsZXMiLCJnZXRLZXJuaW5nVmFsdWUiLCJwb3NGb3JtYXQiLCJwYWlyU2V0cyIsInNlY29uZEdseXBoIiwidmFsdWUxIiwiY2xhc3NEZWYxIiwiY2xhc3NEZWYyIiwiY2xhc3NSZWNvcmRzIiwiZ2V0U2luZ2xlIiwic3ViIiwiYnkiLCJnZXRBbHRlcm5hdGVzIiwiZ2V0TGlnYXR1cmVzIiwiYWRkU2luZ2xlIiwiYWRkQWx0ZXJuYXRlIiwiYWRkTGlnYXR1cmUiLCJnZXRGZWF0dXJlIiwicmYiLCJzZiIsInRmIiwidWYiLCJ3ZiIsInNyUGVyaW9kIiwic3JQaGFzZSIsInNyVGhyZXNob2xkIiwidHJ1bmMiLCJORUdBVElWRV9JTkZJTklUWSIsInVudG91Y2giLCJQT1NJVElWRV9JTkZJTklUWSIsIkFmIiwiYXV0b0ZsaXAiLCJmdW5jcyIsImluaGliaXRHcmlkRml0Iiwic3RvcmUiLCJpZ25vcmVDdnQiLCJCZiIsImNoYXJUb0dseXBoIiwic3RyaW5nVG9HbHlwaHMiLCJkZWZhdWx0UmVuZGVyT3B0aW9ucyIsImxpZ2EiLCJybGlnIiwibmFtZVRvR2x5cGgiLCJrZXJuaW5nIiwiZm9yRWFjaEdseXBoIiwibGV0dGVyU3BhY2luZyIsInRyYWNraW5nIiwiZ2V0UGF0aHMiLCJnZXRBZHZhbmNlV2lkdGgiLCJ2YWxpZGF0ZSIsInRvVGFibGVzIiwidG9CdWZmZXIiLCJyZXF1ZXN0RmlsZVN5c3RlbSIsIndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtIiwiVEVNUE9SQVJZIiwicm9vdCIsImdldEZpbGUiLCJjcmVhdGVXcml0ZXIiLCJ0b1VSTCIsIndyaXRlRmlsZVN5bmMiLCJJVEFMSUMiLCJVTkRFUlNDT1JFIiwiTkVHQVRJVkUiLCJPVVRMSU5FRCIsIlNUUklLRU9VVCIsIkJPTEQiLCJVU0VSX1RZUE9fTUVUUklDUyIsIldXUyIsIk9CTElRVUUiLCJVTFRSQV9DT05ERU5TRUQiLCJFWFRSQV9DT05ERU5TRUQiLCJDT05ERU5TRUQiLCJTRU1JX0NPTkRFTlNFRCIsIlNFTUlfRVhQQU5ERUQiLCJFWFBBTkRFRCIsIkVYVFJBX0VYUEFOREVEIiwiVUxUUkFfRVhQQU5ERUQiLCJUSElOIiwiRVhUUkFfTElHSFQiLCJMSUdIVCIsIk5PUk1BTCIsIlNFTUlfQk9MRCIsIkVYVFJBX0JPTEQiLCJCTEFDSyIsImF4ZXMiLCJpbnN0YW5jZXMiLCJvZmZzZXRUb0RhdGEiLCJEZiIsInZhbHVlRm9ybWF0MSIsInZhbHVlRm9ybWF0MiIsInZhbHVlMiIsImNsYXNzMUNvdW50IiwiY2xhc3MyQ291bnQiLCJFZiIsIiRkIiwiX2QiLCJGb250IiwiR2x5cGgiLCJQYXRoIiwiQm91bmRpbmdCb3giLCJfcGFyc2UiLCJzdGF0dXNUZXh0IiwibG9hZFN5bmMiLCJyZWFkRmlsZVN5bmMiLCJmcyIsInJ1biIsImZ1biIsInRpdGxlIiwiYnJvd3NlciIsImFyZ3YiLCJ2ZXJzaW9ucyIsImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJwcmVwZW5kTGlzdGVuZXIiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwibGlzdGVuZXJzIiwiYmluZGluZyIsImN3ZCIsImNoZGlyIiwidW1hc2siLCJpdGVyYWJsZSIsImFwcGVuZCIsImdldE93blByb3BlcnR5TmFtZXMiLCJib2R5VXNlZCIsInJlYWRBc0FycmF5QnVmZmVyIiwiX2luaXRCb2R5IiwiX2JvZHlJbml0IiwiX2JvZHlUZXh0IiwiaXNQcm90b3R5cGVPZiIsIl9ib2R5QmxvYiIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJfYm9keUZvcm1EYXRhIiwic2VhcmNoUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXJyYXlCdWZmZXIiLCJfYm9keUFycmF5QnVmZmVyIiwiaGVhZGVycyIsInRleHQiLCJyZWFkQXNUZXh0IiwiYm9keSIsImNyZWRlbnRpYWxzIiwidG9VcHBlckNhc2UiLCJyZWZlcnJlciIsImRlY29kZVVSSUNvbXBvbmVudCIsImZldGNoIiwiaXNWaWV3IiwiZGVsZXRlIiwiZW50cmllcyIsImNsb25lIiwicmVkaXJlY3QiLCJIZWFkZXJzIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VVUkwiLCJyZXNwb25zZVRleHQiLCJvbnRpbWVvdXQiLCJ3aXRoQ3JlZGVudGlhbHMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiLi9jb2xvci9jb2xvcl9jb252ZXJzaW9uIiwiLi9jb2xvci9jcmVhdGluZ19yZWFkaW5nIiwiLi9jb2xvci9wNS5Db2xvciIsIi4vY29sb3Ivc2V0dGluZyIsIi4vY29yZS9jb25zdGFudHMiLCIuL2NvcmUvZW52aXJvbm1lbnQiLCIuL2NvcmUvZXJyb3JfaGVscGVycyIsIi4vY29yZS9oZWxwZXJzIiwiLi9jb3JlL2luaXQiLCIuL2NvcmUvbGVnYWN5IiwiLi9jb3JlL21haW4iLCIuL2NvcmUvcDUuRWxlbWVudCIsIi4vY29yZS9wNS5HcmFwaGljcyIsIi4vY29yZS9wNS5SZW5kZXJlciIsIi4vY29yZS9wNS5SZW5kZXJlcjJEIiwiLi9jb3JlL3JlbmRlcmluZyIsIi4vY29yZS9zaGFwZS8yZF9wcmltaXRpdmVzIiwiLi9jb3JlL3NoYXBlL2F0dHJpYnV0ZXMiLCIuL2NvcmUvc2hhcGUvY3VydmVzIiwiLi9jb3JlL3NoYXBlL3ZlcnRleCIsIi4vY29yZS9zaGltIiwiLi9jb3JlL3N0cnVjdHVyZSIsIi4vY29yZS90cmFuc2Zvcm0iLCIuL2RhdGEvcDUuVHlwZWREaWN0IiwiLi9ldmVudHMvYWNjZWxlcmF0aW9uIiwiLi9ldmVudHMva2V5Ym9hcmQiLCIuL2V2ZW50cy9tb3VzZSIsIi4vZXZlbnRzL3RvdWNoIiwiLi9pbWFnZS9maWx0ZXJzIiwiLi9pbWFnZS9pbWFnZSIsIi4vaW1hZ2UvbG9hZGluZ19kaXNwbGF5aW5nIiwiLi9pbWFnZS9wNS5JbWFnZSIsIi4vaW1hZ2UvcGl4ZWxzIiwiLi9pby9maWxlcyIsIi4vaW8vcDUuVGFibGUiLCIuL2lvL3A1LlRhYmxlUm93IiwiLi9pby9wNS5YTUwiLCIuL21hdGgvY2FsY3VsYXRpb24iLCIuL21hdGgvbWF0aCIsIi4vbWF0aC9ub2lzZSIsIi4vbWF0aC9wNS5WZWN0b3IiLCIuL21hdGgvcmFuZG9tIiwiLi9tYXRoL3RyaWdvbm9tZXRyeSIsIi4vdHlwb2dyYXBoeS9hdHRyaWJ1dGVzIiwiLi90eXBvZ3JhcGh5L2xvYWRpbmdfZGlzcGxheWluZyIsIi4vdHlwb2dyYXBoeS9wNS5Gb250IiwiLi91dGlsaXRpZXMvYXJyYXlfZnVuY3Rpb25zIiwiLi91dGlsaXRpZXMvY29udmVyc2lvbiIsIi4vdXRpbGl0aWVzL3N0cmluZ19mdW5jdGlvbnMiLCIuL3V0aWxpdGllcy90aW1lX2RhdGUiLCIuL3dlYmdsLzNkX3ByaW1pdGl2ZXMiLCIuL3dlYmdsL2ludGVyYWN0aW9uIiwiLi93ZWJnbC9saWdodCIsIi4vd2ViZ2wvbG9hZGluZyIsIi4vd2ViZ2wvbWF0ZXJpYWwiLCIuL3dlYmdsL3A1LkNhbWVyYSIsIi4vd2ViZ2wvcDUuR2VvbWV0cnkiLCIuL3dlYmdsL3A1Lk1hdHJpeCIsIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTCIsIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5JbW1lZGlhdGUiLCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuUmV0YWluZWQiLCIuL3dlYmdsL3A1LlNoYWRlciIsIi4vd2ViZ2wvcDUuVGV4dHVyZSIsIi4vd2ViZ2wvdGV4dCIsIkNvbG9yQ29udmVyc2lvbiIsIl9oc2JhVG9IU0xBIiwiX2hzYmFUb1JHQkEiLCJfaHNsYVRvSFNCQSIsIl9oc2xhVG9SR0JBIiwiX3JnYmFUb0hTQkEiLCJfcmdiYVRvSFNMQSIsIi4uL2NvcmUvbWFpbiIsImFscGhhIiwiX3ZhbGlkYXRlUGFyYW1ldGVycyIsImNvbG9yIiwiX2dldEFscGhhIiwiYmx1ZSIsIl9nZXRCbHVlIiwiYnJpZ2h0bmVzcyIsIl9nZXRCcmlnaHRuZXNzIiwiQ29sb3IiLCJncmVlbiIsIl9nZXRHcmVlbiIsImh1ZSIsIl9nZXRIdWUiLCJsZXJwQ29sb3IiLCJfY29sb3JNb2RlIiwiX2NvbG9yTWF4ZXMiLCJSR0IiLCJsZXZlbHMiLCJIU0IiLCJoc2JhIiwiSFNMIiwiX2dldExpZ2h0bmVzcyIsImhzbGEiLCJsZXJwIiwibGlnaHRuZXNzIiwicmVkIiwiX2dldFJlZCIsInNhdHVyYXRpb24iLCJfZ2V0U2F0dXJhdGlvbiIsIi4uL2NvcmUvY29uc3RhbnRzIiwiLi4vY29yZS9lcnJvcl9oZWxwZXJzIiwiLi9wNS5Db2xvciIsIl9zdG9yZU1vZGVBbmRNYXhlcyIsIl9hcnJheSIsIl9wYXJzZUlucHV0cyIsIl9jYWxjdWxhdGVMZXZlbHMiLCJ0b1ByZWNpc2lvbiIsIm1heGVzIiwic2V0UmVkIiwic2V0R3JlZW4iLCJzZXRCbHVlIiwic2V0QWxwaGEiLCJfZ2V0TW9kZSIsIl9nZXRNYXhlcyIsImFsaWNlYmx1ZSIsImFudGlxdWV3aGl0ZSIsImFxdWEiLCJhcXVhbWFyaW5lIiwiYXp1cmUiLCJiZWlnZSIsImJpc3F1ZSIsImJsYWNrIiwiYmxhbmNoZWRhbG1vbmQiLCJibHVldmlvbGV0IiwiYnVybHl3b29kIiwiY2FkZXRibHVlIiwiY2hhcnRyZXVzZSIsImNob2NvbGF0ZSIsImNvcmFsIiwiY29ybmZsb3dlcmJsdWUiLCJjb3Juc2lsayIsImNyaW1zb24iLCJjeWFuIiwiZGFya2JsdWUiLCJkYXJrY3lhbiIsImRhcmtnb2xkZW5yb2QiLCJkYXJrZ3JheSIsImRhcmtncmVlbiIsImRhcmtncmV5IiwiZGFya2toYWtpIiwiZGFya21hZ2VudGEiLCJkYXJrb2xpdmVncmVlbiIsImRhcmtvcmFuZ2UiLCJkYXJrb3JjaGlkIiwiZGFya3JlZCIsImRhcmtzYWxtb24iLCJkYXJrc2VhZ3JlZW4iLCJkYXJrc2xhdGVibHVlIiwiZGFya3NsYXRlZ3JheSIsImRhcmtzbGF0ZWdyZXkiLCJkYXJrdHVycXVvaXNlIiwiZGFya3Zpb2xldCIsImRlZXBwaW5rIiwiZGVlcHNreWJsdWUiLCJkaW1ncmF5IiwiZGltZ3JleSIsImRvZGdlcmJsdWUiLCJmaXJlYnJpY2siLCJmbG9yYWx3aGl0ZSIsImZvcmVzdGdyZWVuIiwiZnVjaHNpYSIsImdhaW5zYm9ybyIsImdob3N0d2hpdGUiLCJnb2xkIiwiZ29sZGVucm9kIiwiZ3JheSIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBsdW0iLCJwb3dkZXJibHVlIiwicHVycGxlIiwicm9zeWJyb3duIiwicm95YWxibHVlIiwic2FkZGxlYnJvd24iLCJzYWxtb24iLCJzYW5keWJyb3duIiwic2VhZ3JlZW4iLCJzZWFzaGVsbCIsInNpZW5uYSIsInNpbHZlciIsInNreWJsdWUiLCJzbGF0ZWJsdWUiLCJzbGF0ZWdyYXkiLCJzbGF0ZWdyZXkiLCJzbm93Iiwic3ByaW5nZ3JlZW4iLCJzdGVlbGJsdWUiLCJ0YW4iLCJ0ZWFsIiwidGhpc3RsZSIsInRvbWF0byIsInR1cnF1b2lzZSIsInZpb2xldCIsIndoZWF0Iiwid2hpdGVzbW9rZSIsInllbGxvdyIsInllbGxvd2dyZWVuIiwiUmVnRXhwIiwiSEVYMyIsIkhFWDQiLCJIRVg2IiwiSEVYOCIsIlJHQl9QRVJDRU5UIiwiUkdCQSIsIlJHQkFfUEVSQ0VOVCIsIkhTTEEiLCJIU0JBIiwiLi9jb2xvcl9jb252ZXJzaW9uIiwiYmFja2dyb3VuZCIsIkltYWdlIiwiaW1hZ2UiLCJfcmVuZGVyZXIiLCJjb2xvck1vZGUiLCJfc2V0UHJvcGVydHkiLCJub0ZpbGwiLCJub1N0cm9rZSIsIlAyRCIsIldFQkdMIiwiQVJST1ciLCJDUk9TUyIsIkhBTkQiLCJNT1ZFIiwiVEVYVCIsIldBSVQiLCJIQUxGX1BJIiwiUVVBUlRFUl9QSSIsIlRBVSIsIlRXT19QSSIsIkRFR1JFRVMiLCJSQURJQU5TIiwiREVHX1RPX1JBRCIsIlJBRF9UT19ERUciLCJDT1JORVIiLCJDT1JORVJTIiwiUkFESVVTIiwiUklHSFQiLCJMRUZUIiwiQ0VOVEVSIiwiVE9QIiwiQk9UVE9NIiwiQkFTRUxJTkUiLCJQT0lOVFMiLCJMSU5FUyIsIkxJTkVfU1RSSVAiLCJMSU5FX0xPT1AiLCJUUklBTkdMRVMiLCJUUklBTkdMRV9GQU4iLCJUUklBTkdMRV9TVFJJUCIsIlFVQURTIiwiUVVBRF9TVFJJUCIsIkNMT1NFIiwiT1BFTiIsIkNIT1JEIiwiUElFIiwiUFJPSkVDVCIsIlNRVUFSRSIsIlJPVU5EIiwiQkVWRUwiLCJNSVRFUiIsIkFVVE8iLCJBTFQiLCJCQUNLU1BBQ0UiLCJDT05UUk9MIiwiREVMRVRFIiwiRE9XTl9BUlJPVyIsIkVOVEVSIiwiRVNDQVBFIiwiTEVGVF9BUlJPVyIsIk9QVElPTiIsIlJFVFVSTiIsIlJJR0hUX0FSUk9XIiwiU0hJRlQiLCJUQUIiLCJVUF9BUlJPVyIsIkJMRU5EIiwiQUREIiwiREFSS0VTVCIsIkxJR0hURVNUIiwiRElGRkVSRU5DRSIsIkVYQ0xVU0lPTiIsIk1VTFRJUExZIiwiU0NSRUVOIiwiUkVQTEFDRSIsIk9WRVJMQVkiLCJIQVJEX0xJR0hUIiwiU09GVF9MSUdIVCIsIkRPREdFIiwiQlVSTiIsIlRIUkVTSE9MRCIsIkdSQVkiLCJPUEFRVUUiLCJJTlZFUlQiLCJQT1NURVJJWkUiLCJESUxBVEUiLCJFUk9ERSIsIkJMVVIiLCJfREVGQVVMVF9URVhUX0ZJTEwiLCJfREVGQVVMVF9MRUFETVVMVCIsIl9DVFhfTUlERExFIiwiTElORUFSIiwiUVVBRFJBVElDIiwiQkVaSUVSIiwiQ1VSVkUiLCJTVFJPS0UiLCJGSUxMIiwiVEVYVFVSRSIsIklNTUVESUFURSIsIk5FQVJFU1QiLCJSRVBFQVQiLCJDTEFNUCIsIk1JUlJPUiIsIkxBTkRTQ0FQRSIsIlBPUlRSQUlUIiwiX0RFRkFVTFRfU1RST0tFIiwiX0RFRkFVTFRfRklMTCIsIkdSSUQiLCJBWEVTIiwiaW5uZXJXaWR0aCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiaW5uZXJIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJfZnJhbWVSYXRlIiwiX2xhc3RGcmFtZVRpbWUiLCJwZXJmb3JtYW5jZSIsIl90YXJnZXRGcmFtZVJhdGUiLCJwcmludCIsImZyYW1lQ291bnQiLCJmb2N1c2VkIiwiaGFzRm9jdXMiLCJjdXJzb3IiLCJfY3VyRWxlbWVudCIsImVsdCIsInN0eWxlIiwiZnJhbWVSYXRlIiwiX3J1bkZyYW1lcyIsImdldEZyYW1lUmF0ZSIsInNldEZyYW1lUmF0ZSIsIm5vQ3Vyc29yIiwiZGlzcGxheVdpZHRoIiwic2NyZWVuIiwiZGlzcGxheUhlaWdodCIsIndpbmRvd1dpZHRoIiwid2luZG93SGVpZ2h0IiwiX29ucmVzaXplIiwiX2lzR2xvYmFsIiwid2luZG93UmVzaXplZCIsInByZXZlbnREZWZhdWx0IiwiZnVsbHNjcmVlbiIsImZ1bGxzY3JlZW5FbGVtZW50Iiwid2Via2l0RnVsbHNjcmVlbkVsZW1lbnQiLCJtb3pGdWxsU2NyZWVuRWxlbWVudCIsIm1zRnVsbHNjcmVlbkVsZW1lbnQiLCJmdWxsc2NyZWVuRW5hYmxlZCIsIndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkIiwibW96RnVsbFNjcmVlbkVuYWJsZWQiLCJtc0Z1bGxzY3JlZW5FbmFibGVkIiwicmVxdWVzdEZ1bGxzY3JlZW4iLCJtb3pSZXF1ZXN0RnVsbFNjcmVlbiIsIndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuIiwibXNSZXF1ZXN0RnVsbHNjcmVlbiIsImV4aXRGdWxsc2NyZWVuIiwibW96Q2FuY2VsRnVsbFNjcmVlbiIsIndlYmtpdEV4aXRGdWxsc2NyZWVuIiwibXNFeGl0RnVsbHNjcmVlbiIsInBpeGVsRGVuc2l0eSIsIl9waXhlbERlbnNpdHkiLCJfcGl4ZWxzRGlydHkiLCJyZXNpemVDYW52YXMiLCJkaXNwbGF5RGVuc2l0eSIsImRldmljZVBpeGVsUmF0aW8iLCJnZXRVUkwiLCJnZXRVUkxQYXRoIiwicGF0aG5hbWUiLCJnZXRVUkxQYXJhbXMiLCJsYXN0SW5kZXgiLCIuL2NvbnN0YW50cyIsIi4vbWFpbiIsIl9mcmllbmRseUZpbGVMb2FkRXJyb3IiLCJzb21lIiwiX2hlbHBGb3JNaXN1c2VkQXRUb3BMZXZlbENvZGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiLi4vLi4vZG9jcy9yZWZlcmVuY2UvZGF0YS5qc29uIiwibW9kZUFkanVzdCIsIm1vY2hhIiwic2V0dXAiLCJpbnN0YW5jZSIsImV4aXQiLCJwdXNoU3R5bGUiLCJwb3BTdHlsZSIsIl9zZXR1cERvbmUiLCJfdXNlck5vZGUiLCJfZWxlbWVudHMiLCJfcmVxdWVzdEFuaW1JZCIsIl9wcmVsb2FkQ291bnQiLCJfaW5pdGlhbGl6ZUluc3RhbmNlVmFyaWFibGVzIiwiX2RlZmF1bHRDYW52YXNTaXplIiwibW91c2Vtb3ZlIiwibW91c2Vkb3duIiwibW91c2V1cCIsImRyYWdlbmQiLCJkcmFnb3ZlciIsImNsaWNrIiwiZGJsY2xpY2siLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImtleWRvd24iLCJrZXl1cCIsImtleXByZXNzIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIiwicmVzaXplIiwiYmx1ciIsIndoZWVsIiwiX2xvYWRpbmdTY3JlZW5JZCIsIl9yZWdpc3RlcmVkTWV0aG9kcyIsIkRldmljZU9yaWVudGF0aW9uRXZlbnQiLCJkZXZpY2VvcmllbnRhdGlvbiIsIkRldmljZU1vdGlvbkV2ZW50IiwiX2lzTm9kZVdlYmtpdCIsImRldmljZW1vdGlvbiIsInByZWxvYWQiLCJpbm5lckhUTUwiLCJfcHJlbG9hZE1ldGhvZHMiLCJfd3JhcFByZWxvYWQiLCJfcmVnaXN0ZXJlZFByZWxvYWRNZXRob2RzIiwiX3J1bklmUHJlbG9hZHNBcmVEb25lIiwiX3NldHVwIiwiX2RyYXciLCJwYXJlbnROb2RlIiwiX2RlY3JlbWVudFByZWxvYWQiLCJfaW5jcmVtZW50UHJlbG9hZCIsImNyZWF0ZUNhbnZhcyIsImRhdGFzZXQiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5IiwicmVkcmF3IiwiX3VwZGF0ZU1vdXNlQ29vcmRzIiwiY2xlYXJJbnRlcnZhbCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiX2NyZWF0ZUZyaWVuZGx5R2xvYmFsRnVuY3Rpb25CaW5kZXIiLCJwYXNzaXZlIiwicmVnaXN0ZXJNZXRob2QiLCJfc3R5bGVzIiwiX2JlemllckRldGFpbCIsIl9jdXJ2ZURldGFpbCIsInJnYiIsImhzYiIsImhzbCIsImRpc2FibGVGcmllbmRseUVycm9ycyIsImxvYWRKU09OIiwibG9hZEltYWdlIiwibG9hZFN0cmluZ3MiLCJsb2FkWE1MIiwibG9hZEJ5dGVzIiwibG9hZFRhYmxlIiwibG9hZEZvbnQiLCJsb2FkTW9kZWwiLCJsb2FkU2hhZGVyIiwicHJlIiwicmVnaXN0ZXJQcmVsb2FkTWV0aG9kIiwiZ2xvYmFsT2JqZWN0IiwiLi9zaGltIiwiRWxlbWVudCIsIl9wSW5zdCIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiY2xhc3MiLCJtb3VzZVByZXNzZWQiLCJfc2V0TW91c2VCdXR0b24iLCJkb3VibGVDbGlja2VkIiwibW91c2VXaGVlbCIsIm1vdXNlUmVsZWFzZWQiLCJtb3VzZUNsaWNrZWQiLCJtb3VzZU1vdmVkIiwibW91c2VPdmVyIiwiY2hhbmdlZCIsIm1vdXNlT3V0IiwidG91Y2hTdGFydGVkIiwidG91Y2hNb3ZlZCIsInRvdWNoRW5kZWQiLCJkcmFnT3ZlciIsImRyYWdMZWF2ZSIsImRyb3AiLCJGaWxlIiwidGFyZ2V0IiwiRmlsZUxpc3QiLCJzdG9wUHJvcGFnYXRpb24iLCJkYXRhVHJhbnNmZXIiLCJmaWxlcyIsIkdyYXBoaWNzIiwiY2FudmFzIiwiUmVuZGVyZXJHTCIsIlJlbmRlcmVyMkQiLCJfYXBwbHlEZWZhdWx0cyIsIm9mZnNldFBhcmVudCIsIm9mZnNldExlZnQiLCJvZmZzZXRUb3AiLCJSZW5kZXJlciIsIl9pc01haW5DYW52YXMiLCJkaXNwbGF5IiwiX3RleHRTaXplIiwiX3RleHRMZWFkaW5nIiwiX3RleHRGb250IiwiX3RleHRTdHlsZSIsIl90ZXh0QXNjZW50IiwiX3RleHREZXNjZW50IiwiX3RleHRBbGlnbiIsIl90ZXh0QmFzZWxpbmUiLCJfcmVjdE1vZGUiLCJfZWxsaXBzZU1vZGUiLCJfY3VydmVUaWdodG5lc3MiLCJfaW1hZ2VNb2RlIiwiX3RpbnQiLCJfZG9TdHJva2UiLCJfZG9GaWxsIiwiX3N0cm9rZVNldCIsIl9maWxsU2V0IiwicHJvcGVydGllcyIsInRleHRMZWFkaW5nIiwidGV4dFNpemUiLCJfYXBwbHlUZXh0UHJvcGVydGllcyIsInRleHRTdHlsZSIsInRleHRBc2NlbnQiLCJfdXBkYXRlVGV4dE1ldHJpY3MiLCJ0ZXh0RGVzY2VudCIsInRleHRBbGlnbiIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIk1BWF9WQUxVRSIsInRleHRXaWR0aCIsIl9yZW5kZXJUZXh0IiwiX2lzT3BlblR5cGUiLCJmb250U2l6ZSIsIm92ZXJmbG93IiwidmVydGljYWxBbGlnbiIsImRyYXdpbmdDb250ZXh0IiwiX2NhY2hlZEZpbGxTdHlsZSIsIl9jYWNoZWRTdHJva2VTdHlsZSIsIl9zZXRGaWxsIiwiX3NldFN0cm9rZSIsImxpbmVDYXAiLCJzY2FsZSIsInNhdmUiLCJyZXNldE1hdHJpeCIsIl9nZXRGaWxsIiwiZmlsbFJlY3QiLCJyZXN0b3JlIiwiY2xlYXJSZWN0IiwiTWVkaWFFbGVtZW50IiwibG9hZFBpeGVscyIsIl9nZXRUaW50ZWRJbWFnZUNhbnZhcyIsImRyYXdJbWFnZSIsIl90b1BpeGVscyIsImNyZWF0ZUltYWdlRGF0YSIsInB1dEltYWdlRGF0YSIsImJsZW5kTW9kZSIsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsImJsZW5kIiwiX2NvcHlIZWxwZXIiLCJnZXRJbWFnZURhdGEiLCJwaXhlbHMiLCJzZXRUcmFuc2Zvcm0iLCJpbWFnZURhdGEiLCJ1cGRhdGVQaXhlbHMiLCJfYWN1dGVBcmNUb0JlemllciIsImF5IiwiY3kiLCJlbGxpcHNlIiwiX2dldFN0cm9rZSIsInRyYW5zbGF0ZSIsInF1YWQiLCJyZWN0IiwiYXJjVG8iLCJ0cmlhbmdsZSIsImVuZFNoYXBlIiwiUE9MWUdPTiIsIl9kb0ZpbGxTdHJva2VDbG9zZSIsImlzVmVydCIsIm5vU21vb3RoIiwiaW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwic21vb3RoIiwic3Ryb2tlQ2FwIiwic3Ryb2tlSm9pbiIsImxpbmVKb2luIiwic3Ryb2tlV2VpZ2h0IiwiYmV6aWVyIiwiYmVnaW5TaGFwZSIsInZlcnRleCIsImJlemllclZlcnRleCIsImN1cnZlVmVydGV4IiwiYXBwbHlNYXRyaXgiLCJ0cmFuc2Zvcm0iLCJyb3RhdGUiLCJzaGVhclgiLCJzaGVhclkiLCJWZWN0b3IiLCJ0ZXh0QmFzZWxpbmUiLCJfcmVuZGVyUGF0aCIsInJlbmRlcmVyIiwic3Ryb2tlVGV4dCIsImZpbGxUZXh0IiwiX3RleHRXaWR0aCIsIm1lYXN1cmVUZXh0IiwiLi4vaW1hZ2UvZmlsdGVycyIsIi4vcDUuUmVuZGVyZXIiLCJjbGFzc0xpc3QiLCJfZGVmYXVsdEdyYXBoaWNzQ3JlYXRlZCIsIm5vQ2FudmFzIiwiY3JlYXRlR3JhcGhpY3MiLCIuLi93ZWJnbC9wNS5SZW5kZXJlckdMIiwiLi9wNS5HcmFwaGljcyIsIi4vcDUuUmVuZGVyZXIyRCIsIl90b1JhZGlhbnMiLCJhdGFuIiwiLi4vY29uc3RhbnRzIiwiLi4vZXJyb3JfaGVscGVycyIsIi4uL2hlbHBlcnMiLCIuLi9tYWluIiwiZWxsaXBzZU1vZGUiLCJyZWN0TW9kZSIsImJlemllckRldGFpbCIsImJlemllclBvaW50IiwiYmV6aWVyVGFuZ2VudCIsImN1cnZlRGV0YWlsIiwiY3VydmVUaWdodG5lc3MiLCJjdXJ2ZVBvaW50IiwiY3VydmVUYW5nZW50IiwiYmVnaW5Db250b3VyIiwiaXNQM0QiLCJlbmRDb250b3VyIiwicXVhZHJhdGljVmVydGV4IiwiX2NvbnRvdXJJbml0ZWQiLCJ4MyIsInkzIiwiX2NvbnRvdXJWZXJ0aWNlcyIsIndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm1velJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJtc1JlcXVlc3RBbmltYXRpb25GcmFtZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibm9Mb29wIiwicHJvcHMiLCJfdXBkYXRlIiwicG9wTWF0cml4IiwicHJpbnRNYXRyaXgiLCJwdXNoTWF0cml4Iiwicm90YXRlWCIsIl9hc3NlcnQzZCIsInJvdGF0ZVkiLCJyb3RhdGVaIiwiY3JlYXRlU3RyaW5nRGljdCIsIlN0cmluZ0RpY3QiLCJjcmVhdGVOdW1iZXJEaWN0IiwiTnVtYmVyRGljdCIsIlR5cGVkRGljdCIsImhhc0tleSIsIl92YWxpZGF0ZSIsIl9hZGRPYmoiLCJzYXZlVGFibGUiLCJkb3dubG9hZEZpbGUiLCJzYXZlSlNPTiIsImRpdiIsIl92YWx1ZVRlc3QiLCJfa2V5VGVzdCIsIm1pbktleSIsIm1heEtleSIsImRldmljZU9yaWVudGF0aW9uIiwiYWNjZWxlcmF0aW9uWCIsImFjY2VsZXJhdGlvblkiLCJhY2NlbGVyYXRpb25aIiwicEFjY2VsZXJhdGlvblgiLCJwQWNjZWxlcmF0aW9uWSIsInBBY2NlbGVyYXRpb25aIiwiX3VwZGF0ZVBBY2NlbGVyYXRpb25zIiwicm90YXRpb25YIiwicm90YXRpb25ZIiwicm90YXRpb25aIiwicFJvdGF0aW9uWCIsInBSb3RhdGlvblkiLCJwUm90YXRpb25aIiwiX3VwZGF0ZVBSb3RhdGlvbnMiLCJ0dXJuQXhpcyIsInNldE1vdmVUaHJlc2hvbGQiLCJzZXRTaGFrZVRocmVzaG9sZCIsIl9vbmRldmljZW9yaWVudGF0aW9uIiwiYmV0YSIsImdhbW1hIiwiX2hhbmRsZU1vdGlvbiIsIl9vbmRldmljZW1vdGlvbiIsImFjY2VsZXJhdGlvbiIsIm9yaWVudGF0aW9uIiwiZGV2aWNlTW92ZWQiLCJkZXZpY2VUdXJuZWQiLCJkZXZpY2VTaGFrZW4iLCJpc0tleVByZXNzZWQiLCJrZXlJc1ByZXNzZWQiLCJrZXlDb2RlIiwiX29ua2V5ZG93biIsIndoaWNoIiwia2V5UHJlc3NlZCIsImNoYXJDb2RlIiwiX29ua2V5dXAiLCJrZXlSZWxlYXNlZCIsIl9vbmtleXByZXNzIiwiX2xhc3RLZXlDb2RlVHlwZWQiLCJrZXlUeXBlZCIsIl9vbmJsdXIiLCJrZXlJc0Rvd24iLCJfaGFzTW91c2VJbnRlcmFjdGVkIiwibW91c2VYIiwibW91c2VZIiwicG1vdXNlWCIsInBtb3VzZVkiLCJ3aW5Nb3VzZVgiLCJ3aW5Nb3VzZVkiLCJwd2luTW91c2VYIiwicHdpbk1vdXNlWSIsIm1vdXNlQnV0dG9uIiwibW91c2VJc1ByZXNzZWQiLCJfdXBkYXRlTmV4dE1vdXNlQ29vcmRzIiwidG91Y2hlcyIsImNsaWVudFgiLCJjaGFuZ2VkVG91Y2hlcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFdpZHRoIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50WSIsInRvcCIsIndpblgiLCJ3aW5ZIiwiaWRlbnRpZmllciIsIl9tb3VzZVdoZWVsRGVsdGFZIiwiYnV0dG9uIiwiX29ubW91c2Vtb3ZlIiwibW91c2VEcmFnZ2VkIiwiX29ubW91c2Vkb3duIiwiX29ubW91c2V1cCIsIl9vbmRyYWdlbmQiLCJfb25kcmFnb3ZlciIsIl9vbmNsaWNrIiwiX29uZGJsY2xpY2siLCJfcG1vdXNlV2hlZWxEZWx0YVkiLCJfb253aGVlbCIsImRlbHRhWSIsIl91cGRhdGVUb3VjaENvb3JkcyIsIl9vbnRvdWNoc3RhcnQiLCJfb250b3VjaG1vdmUiLCJfb250b3VjaGVuZCIsIkludDMyQXJyYXkiLCJfZ2V0QVJHQiIsIl9zZXRQaXhlbHMiLCJJbWFnZURhdGEiLCJfdG9JbWFnZURhdGEiLCJfY3JlYXRlSW1hZ2VEYXRhIiwiX3RtcENhbnZhcyIsIl90bXBDdHgiLCJvcGFxdWUiLCJpbnZlcnQiLCJwb3N0ZXJpemUiLCJkaWxhdGUiLCJlcm9kZSIsImNyZWF0ZUltYWdlIiwic2F2ZUNhbnZhcyIsIkhUTUxDYW52YXNFbGVtZW50IiwiX2NoZWNrRmlsZUV4dGVuc2lvbiIsInRvQmxvYiIsInNhdmVGcmFtZXMiLCJjb25zdHJhaW4iLCJfbWFrZUZyYW1lIiwic2V0SW50ZXJ2YWwiLCJmaWxlbmFtZSIsImV4dCIsInRvRGF0YVVSTCIsImNyb3NzT3JpZ2luIiwidmlkZW9XaWR0aCIsInZpZGVvSGVpZ2h0IiwidGludCIsIm5vVGludCIsImltYWdlTW9kZSIsIi4uL2NvcmUvaGVscGVycyIsIi4vZmlsdGVycyIsIl9tb2RpZmllZCIsInNldE1vZGlmaWVkIiwibWFzayIsImlzTW9kaWZpZWQiLCIuLi9jb2xvci9wNS5Db2xvciIsImh0dHBEbyIsImxhc3RJbmRleE9mIiwiY3VycmVudFN0YXRlIiwidG9rZW4iLCJlc2NhcGVkIiwiY29sdW1ucyIsIlRhYmxlUm93Iiwib2JqIiwiYWRkUm93IiwiYnl0ZXMiLCJodHRwR2V0IiwiaHR0cFBvc3QiLCJDb250ZW50LVR5cGUiLCJYTUwiLCJjaGlsZE5vZGVzIiwiYWRkQ2hpbGQiLCJzZXROYW1lIiwibm9kZU5hbWUiLCJfc2V0Q29udCIsInRleHRDb250ZW50IiwiX3NldEF0dHJpYnV0ZXMiLCJjaGlsZHJlbiIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsIl9wV3JpdGVycyIsIlByaW50V3JpdGVyIiwibWlsbGlzIiwid3JpdGVGaWxlIiwic2F2ZVN0cmluZ3MiLCJTb3VuZEZpbGUiLCJzYXZlU291bmQiLCJzYXZlSlNPTk9iamVjdCIsInNhdmVKU09OQXJyYXkiLCJyb3dzIiwiZ2V0U3RyaW5nIiwiX2lzU2FmYXJpIiwib25jbGljayIsImFsZXJ0IiwiZXM2LXByb21pc2UiLCJmZXRjaC1qc29ucCIsImZpbGUtc2F2ZXIiLCJ3aGF0d2ctZmV0Y2giLCJyZW1vdmVSb3ciLCJnZXRSb3ciLCJnZXRSb3dzIiwiZmluZFJvdyIsImZpbmRSb3dzIiwibWF0Y2hSb3ciLCJtYXRjaFJvd3MiLCJnZXRDb2x1bW4iLCJjbGVhclJvd3MiLCJhZGRDb2x1bW4iLCJnZXRDb2x1bW5Db3VudCIsImdldFJvd0NvdW50IiwicmVtb3ZlVG9rZW5zIiwicmVtb3ZlQ29sdW1uIiwic2V0TnVtIiwic2V0U3RyaW5nIiwiZ2V0TnVtIiwiZ2V0T2JqZWN0IiwiZ2V0QXJyYXkiLCJhdHRyaWJ1dGVzIiwiZ2V0UGFyZW50IiwiZ2V0TmFtZSIsImhhc0NoaWxkcmVuIiwibGlzdENoaWxkcmVuIiwiZ2V0Q2hpbGRyZW4iLCJnZXRDaGlsZCIsImdldEF0dHJpYnV0ZUNvdW50IiwibGlzdEF0dHJpYnV0ZXMiLCJoYXNBdHRyaWJ1dGUiLCJnZXRDb250ZW50Iiwic2V0Q29udGVudCIsIm5vZGVWYWx1ZSIsImh5cG90IiwibWFnIiwibm9ybSIsInNxIiwiY3JlYXRlVmVjdG9yIiwibm9pc2VEZXRhaWwiLCJub2lzZVNlZWQiLCJzZXRTZWVkIiwiZ2V0U2VlZCIsInA1IiwibWFnU3EiLCJjcm9zcyIsIm5vcm1hbGl6ZSIsImxpbWl0Iiwic2V0TWFnIiwiaGVhZGluZyIsImF0YW4yIiwiX2Zyb21SYWRpYW5zIiwiYW5nbGVCZXR3ZWVuIiwiYWNvcyIsImZyb21BbmdsZSIsImZyb21BbmdsZXMiLCJyYW5kb20yRCIsInJhbmRvbTNEIiwicmFuZG9tU2VlZCIsInJhbmRvbUdhdXNzaWFuIiwiX2FuZ2xlTW9kZSIsImFzaW4iLCJkZWdyZWVzIiwicmFkaWFucyIsImFuZ2xlTW9kZSIsIl90b0RlZ3JlZXMiLCJ0ZXh0Rm9udCIsIm9wZW50eXBlLmpzIiwic2FtcGxlRmFjdG9yIiwic2ltcGxpZnlUaHJlc2hvbGQiLCJ0bXBQb2ludDEiLCJ0bXBQb2ludDIiLCJxeCIsInF5IiwiY2FjaGUiLCJ0ZXh0Qm91bmRzIiwiYWR2YW5jZSIsIl9oYW5kbGVBbGlnbm1lbnQiLCJ0ZXh0VG9Qb2ludHMiLCJfZ2V0R2x5cGhzIiwiX2dldFBhdGgiLCJfZ2V0UGF0aERhdGEiLCJkZWNpbWFscyIsIl9nZXRTVkciLCJhcnJheUNvcHkiLCJzaG9ydGVuIiwic2h1ZmZsZSIsInN1YnNldCIsImZsb2F0IiwiaW50Iiwic3RyIiwiYm9vbGVhbiIsImNoYXIiLCJ1bmNoYXIiLCJoZXgiLCJ1bmhleCIsIm1hdGNoQWxsIiwibmZjIiwibmZwIiwibmZzIiwic3BsaXRUb2tlbnMiLCJkYXkiLCJnZXREYXRlIiwiaG91ciIsImdldEhvdXJzIiwibWludXRlIiwiZ2V0TWludXRlcyIsIm1vbnRoIiwiZ2V0TW9udGgiLCJzZWNvbmQiLCJnZXRTZWNvbmRzIiwieWVhciIsImdldEZ1bGxZZWFyIiwicGxhbmUiLCJnZW9tZXRyeUluSGFzaCIsIkdlb21ldHJ5IiwiZGV0YWlsWSIsImRldGFpbFgiLCJ2ZXJ0aWNlcyIsInV2cyIsImNvbXB1dGVGYWNlcyIsImNvbXB1dGVOb3JtYWxzIiwiX21ha2VUcmlhbmdsZUVkZ2VzIiwiX2VkZ2VzVG9WZXJ0aWNlcyIsImRyYXdCdWZmZXJzU2NhbGVkIiwiYm94IiwicGVyUGl4ZWxMaWdodGluZyIsInN0cm9rZUluZGljZXMiLCJmYWNlcyIsInNwaGVyZSIsImVsbGlwc29pZCIsInZlcnRleE5vcm1hbHMiLCJjeWxpbmRlciIsImNvbmUiLCJ0b3J1cyIsIl91c2VQb2ludFNoYWRlciIsImN1clBvaW50U2hhZGVyIiwiYmluZFNoYWRlciIsIl9kcmF3UG9pbnRzIiwiX3BvaW50VmVydGV4QnVmZmVyIiwidW5iaW5kU2hhZGVyIiwidU1WTWF0cml4IiwiTWF0cml4IiwiZHJhd0J1ZmZlcnMiLCJpbW1lZGlhdGVNb2RlIiwiX2JlemllclZlcnRleCIsIl9sb29rVXBUYWJsZUJlemllciIsIl9sdXRCZXppZXJEZXRhaWwiLCJfYmV6aWVyQ29lZmZpY2llbnRzIiwiaXNCZXppZXIiLCJfcXVhZHJhdGljVmVydGV4IiwiX2xvb2tVcFRhYmxlUXVhZHJhdGljIiwiX2x1dFF1YWRyYXRpY0RldGFpbCIsIl9xdWFkcmF0aWNDb2VmZmljaWVudHMiLCJpc1F1YWRyYXRpYyIsIl9jdXJ2ZVZlcnRleCIsImlzQ3VydmUiLCJfYmV6aWVyVG9DYXRtdWxsIiwiLi9wNS5HZW9tZXRyeSIsIm9yYml0Q29udHJvbCIsIl9jdXJDYW1lcmEiLCJjb250ZXh0TWVudURpc2FibGVkIiwib25jb250ZXh0bWVudSIsIndoZWVsRGVmYXVsdERpc2FibGVkIiwib253aGVlbCIsIl9vcmJpdCIsIl9nZXRMb2NhbEF4ZXMiLCJleWVYIiwiZXllWSIsImV5ZVoiLCJkZWJ1Z01vZGUiLCJfZ3JpZCIsIl9heGVzSWNvbiIsIm5vRGVidWdNb2RlIiwiY3VyU3Ryb2tlQ29sb3IiLCJjYW1lcmFNYXRyaXgiLCJtYXQ0IiwiYW1iaWVudExpZ2h0IiwiX3VzZUxpZ2h0U2hhZGVyIiwic2V0VW5pZm9ybSIsImN1ckZpbGxDb2xvciIsImFtYmllbnRMaWdodENvbG9ycyIsImRpcmVjdGlvbmFsTGlnaHQiLCJkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucyIsImRpcmVjdGlvbmFsTGlnaHRDb2xvcnMiLCJwb2ludExpZ2h0IiwicG9pbnRMaWdodFBvc2l0aW9ucyIsInBvaW50TGlnaHRDb2xvcnMiLCJnaWQiLCJ2dCIsInZuIiwibW9kZWwiLCJTaGFkZXIiLCJfZnJhZ1NyYyIsIl92ZXJ0U3JjIiwiY3JlYXRlU2hhZGVyIiwic2hhZGVyIiwiaXNTdHJva2VTaGFkZXIiLCJzZXRTdHJva2VTaGFkZXIiLCJzZXRGaWxsU2hhZGVyIiwibm9ybWFsTWF0ZXJpYWwiLCJkcmF3TW9kZSIsIl9nZXROb3JtYWxTaGFkZXIiLCJ0ZXh0dXJlIiwiYW1iaWVudE1hdGVyaWFsIiwic3BlY3VsYXJNYXRlcmlhbCIsIl9hcHBseUNvbG9yQmxlbmQiLCJHTCIsImRlcHRoTWFzayIsImVuYWJsZSIsImJsZW5kRXF1YXRpb24iLCJGVU5DX0FERCIsImJsZW5kRnVuYyIsIlNSQ19BTFBIQSIsIk9ORV9NSU5VU19TUkNfQUxQSEEiLCJkaXNhYmxlIiwiLi9wNS5UZXh0dXJlIiwiY2FtZXJhIiwicGVyc3BlY3RpdmUiLCJvcnRobyIsImNyZWF0ZUNhbWVyYSIsIkNhbWVyYSIsIl9jb21wdXRlQ2FtZXJhRGVmYXVsdFNldHRpbmdzIiwiX3NldERlZmF1bHRDYW1lcmEiLCJjYW1lcmFUeXBlIiwicHJvak1hdHJpeCIsImRlZmF1bHRDYW1lcmFGT1YiLCJjYW1lcmFGT1YiLCJkZWZhdWx0QXNwZWN0UmF0aW8iLCJkZWZhdWx0Q2FtZXJhTmVhciIsImRlZmF1bHRDYW1lcmFGYXIiLCJhc3BlY3RSYXRpbyIsImNhbWVyYU5lYXIiLCJjYW1lcmFGYXIiLCJpZGVudGl0eSIsIl9pc0FjdGl2ZSIsInVQTWF0cml4IiwiX3JvdGF0ZVZpZXciLCJjZW50ZXJYIiwiY2VudGVyWSIsImNlbnRlcloiLCJ0aWx0IiwibG9va0F0IiwiZGVmYXVsdEV5ZVgiLCJkZWZhdWx0RXllWSIsImRlZmF1bHRFeWVaIiwibW92ZSIsImRlZmF1bHRDZW50ZXJYIiwiZGVmYXVsdENlbnRlclkiLCJkZWZhdWx0Q2VudGVyWiIsIl9yZXNpemUiLCJzZXRDYW1lcmEiLCJsaW5lVmVydGljZXMiLCJsaW5lTm9ybWFscyIsImVkZ2VzIiwiX2dldEZhY2VOb3JtYWwiLCJhdmVyYWdlTm9ybWFscyIsImF2ZXJhZ2VQb2xlTm9ybWFscyIsIm1hdDMiLCJpbnZlcnQzeDMiLCJ0cmFuc3Bvc2UzeDMiLCJpbnZlcnNlVHJhbnNwb3NlIiwiZGV0ZXJtaW5hbnQiLCJzaGFwZU1vZGUiLCJ2ZXJ0ZXhDb2xvcnMiLCJ1dkNvb3JkcyIsInZlcnRleEJ1ZmZlciIsImNvbG9yQnVmZmVyIiwidXZCdWZmZXIiLCJsaW5lVmVydGV4QnVmZmVyIiwibGluZU5vcm1hbEJ1ZmZlciIsInBvaW50VmVydGV4QnVmZmVyIiwiaXNJbW1lZGlhdGVEcmF3aW5nIiwiX3VzZUltbWVkaWF0ZU1vZGVTaGFkZXIiLCJfZHJhd1N0cm9rZUltbWVkaWF0ZU1vZGUiLCJfdlRvTkFycmF5IiwiX3RyaWFuZ3VsYXRlIiwiX2RyYXdGaWxsSW1tZWRpYXRlTW9kZSIsImN1ckZpbGxTaGFkZXIiLCJhUG9zaXRpb24iLCJfYmluZEJ1ZmZlciIsIkFSUkFZX0JVRkZFUiIsIkRZTkFNSUNfRFJBVyIsImVuYWJsZUF0dHJpYiIsIkZMT0FUIiwiYVZlcnRleENvbG9yIiwiYVRleENvb3JkIiwiZHJhd0FycmF5cyIsImN1clN0cm9rZVNoYWRlciIsIl9mbGF0dGVuIiwiU1RBVElDX0RSQVciLCJhRGlyZWN0aW9uIiwiX2luaXRCdWZmZXJEZWZhdWx0cyIsIl9mcmVlQnVmZmVycyIsImdIYXNoIiwiZGVsZXRlQnVmZmVyIiwibm9ybWFsQnVmZmVyIiwiaW5kZXhCdWZmZXIiLCJudW1iZXJPZkl0ZW1zIiwibGluZVZlcnRleENvdW50IiwiX3VzZUNvbG9yU2hhZGVyIiwiRUxFTUVOVF9BUlJBWV9CVUZGRVIiLCJhTm9ybWFsIiwiX2RyYXdBcnJheXMiLCJfZHJhd0VsZW1lbnRzIiwiZHJhd0VsZW1lbnRzIiwiVU5TSUdORURfU0hPUlQiLCJQb2ludHMiLCJpbW1lZGlhdGVWZXJ0IiwidmVydGV4Q29sb3JWZXJ0IiwidmVydGV4Q29sb3JGcmFnIiwibm9ybWFsVmVydCIsIm5vcm1hbEZyYWciLCJiYXNpY0ZyYWciLCJsaWdodFZlcnQiLCJsaWdodFRleHR1cmVGcmFnIiwicGhvbmdWZXJ0IiwicGhvbmdGcmFnIiwiZm9udFZlcnQiLCJmb250RnJhZyIsImxpbmVWZXJ0IiwibGluZUZyYWciLCJwb2ludFZlcnQiLCJwb2ludEZyYWciLCJzdGVuY2lsIiwiYW50aWFsaWFzIiwicHJlbXVsdGlwbGllZEFscGhhIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwiX2luaXRDb250ZXh0IiwidU5NYXRyaXgiLCJfZGVmYXVsdExpZ2h0U2hhZGVyIiwiX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyIiwiX2RlZmF1bHROb3JtYWxTaGFkZXIiLCJfZGVmYXVsdENvbG9yU2hhZGVyIiwiX2RlZmF1bHRQb2ludFNoYWRlciIsIl9nZXRMaW5lU2hhZGVyIiwicG9pbnRTaXplIiwidGV4dHVyZXMiLCJfdGVzc3kiLCJfaW5pdFRlc3N5IiwiZm9udEluZm9zIiwiREVQVEhfVEVTVCIsImRlcHRoRnVuYyIsIkxFUVVBTCIsInZpZXdwb3J0IiwiZHJhd2luZ0J1ZmZlcldpZHRoIiwiZHJhd2luZ0J1ZmZlckhlaWdodCIsIl92aWV3cG9ydCIsImdldFBhcmFtZXRlciIsIlZJRVdQT1JUIiwiX3Jlc2V0Q29udGV4dCIsInNldEF0dHJpYnV0ZXMiLCJjbGVhckNvbG9yIiwiQ09MT1JfQlVGRkVSX0JJVCIsIkRFUFRIX0JVRkZFUl9CSVQiLCJfZ2V0SW1tZWRpYXRlTW9kZVNoYWRlciIsIl9nZXRDb2xvclNoYWRlciIsImN1clN0cm9rZVdlaWdodCIsInJlYWRQaXhlbHMiLCJVTlNJR05FRF9CWVRFIiwic2V0UG9pbnRTaGFkZXIiLCJpc0xpZ2h0U2hhZGVyIiwiX2dldExpZ2h0U2hhZGVyIiwiX2dldFBvaW50U2hhZGVyIiwiX2RlZmF1bHRMaW5lU2hhZGVyIiwiX2dldEZvbnRTaGFkZXIiLCJfZGVmYXVsdEZvbnRTaGFkZXIiLCJnZXRFeHRlbnNpb24iLCJfZ2V0RW1wdHlUZXh0dXJlIiwiX2VtcHR5VGV4dHVyZSIsIlRleHR1cmUiLCJnZXRUZXh0dXJlIiwiYmluZEJ1ZmZlciIsImJ1ZmZlckRhdGEiLCIuLi9jb3JlL3A1LlJlbmRlcmVyIiwiLi9wNS5DYW1lcmEiLCIuL3A1Lk1hdHJpeCIsIi4vcDUuU2hhZGVyIiwiX3ZlcnRTaGFkZXIiLCJfZnJhZ1NoYWRlciIsIl9nbFByb2dyYW0iLCJfbG9hZGVkQXR0cmlidXRlcyIsIl9sb2FkZWRVbmlmb3JtcyIsInVuaWZvcm1zIiwiX2JvdW5kIiwic2FtcGxlcnMiLCJWRVJURVhfU0hBREVSIiwic2hhZGVyU291cmNlIiwiY29tcGlsZVNoYWRlciIsImdldFNoYWRlclBhcmFtZXRlciIsIkNPTVBJTEVfU1RBVFVTIiwiZ2V0U2hhZGVySW5mb0xvZyIsIkZSQUdNRU5UX1NIQURFUiIsImNyZWF0ZVByb2dyYW0iLCJhdHRhY2hTaGFkZXIiLCJsaW5rUHJvZ3JhbSIsImdldFByb2dyYW1QYXJhbWV0ZXIiLCJMSU5LX1NUQVRVUyIsImdldFByb2dyYW1JbmZvTG9nIiwiX2xvYWRBdHRyaWJ1dGVzIiwiX2xvYWRVbmlmb3JtcyIsIkFDVElWRV9BVFRSSUJVVEVTIiwiZ2V0QWN0aXZlQXR0cmliIiwiZ2V0QXR0cmliTG9jYXRpb24iLCJBQ1RJVkVfVU5JRk9STVMiLCJnZXRBY3RpdmVVbmlmb3JtIiwiZ2V0VW5pZm9ybUxvY2F0aW9uIiwiU0FNUExFUl8yRCIsInNhbXBsZXJJbmRleCIsImNvbXBpbGUiLCJ1c2VQcm9ncmFtIiwiYmluZFRleHR1cmVzIiwiX3NldE1hdHJpeFVuaWZvcm1zIiwiX3NldFZpZXdwb3J0VW5pZm9ybSIsInVuYmluZFRleHR1cmVzIiwiYWN0aXZlVGV4dHVyZSIsIlRFWFRVUkUwIiwiYmluZFRleHR1cmUiLCJ1cGRhdGUiLCJ1bmlmb3JtMWkiLCJ1cGRhdGVUZXh0dXJlcyIsIkJPT0wiLCJJTlQiLCJ1bmlmb3JtMWl2IiwidW5pZm9ybTFmdiIsInVuaWZvcm0xZiIsIkZMT0FUX01BVDMiLCJ1bmlmb3JtTWF0cml4M2Z2IiwiRkxPQVRfTUFUNCIsInVuaWZvcm1NYXRyaXg0ZnYiLCJGTE9BVF9WRUMyIiwidW5pZm9ybTJmdiIsInVuaWZvcm0yZiIsIkZMT0FUX1ZFQzMiLCJ1bmlmb3JtM2Z2IiwidW5pZm9ybTNmIiwiRkxPQVRfVkVDNCIsInVuaWZvcm00ZnYiLCJ1bmlmb3JtNGYiLCJJTlRfVkVDMiIsInVuaWZvcm0yaXYiLCJ1bmlmb3JtMmkiLCJJTlRfVkVDMyIsInVuaWZvcm0zaXYiLCJ1bmlmb3JtM2kiLCJJTlRfVkVDNCIsInVuaWZvcm00aXYiLCJ1bmlmb3JtNGkiLCJ1VXNlTGlnaHRpbmciLCJ1QW1iaWVudExpZ2h0Q291bnQiLCJ1RGlyZWN0aW9uYWxMaWdodENvdW50IiwidVBvaW50TGlnaHRDb3VudCIsInVBbWJpZW50Q29sb3IiLCJ1RGlyZWN0aW9uYWxDb2xvciIsInVQb2ludExpZ2h0TG9jYXRpb24iLCJ1UG9pbnRMaWdodENvbG9yIiwidUxpZ2h0aW5nRGlyZWN0aW9uIiwidVNwZWN1bGFyIiwiaXNUZXh0dXJlU2hhZGVyIiwiaXNDb2xvclNoYWRlciIsInVNYXRlcmlhbENvbG9yIiwiaXNUZXhMaWdodFNoYWRlciIsInVTdHJva2VXZWlnaHQiLCJlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSIsInZlcnRleEF0dHJpYlBvaW50ZXIiLCJnbFRleCIsImdsVGFyZ2V0IiwiVEVYVFVSRV8yRCIsImdsRm9ybWF0IiwibWlwbWFwcyIsImdsTWluRmlsdGVyIiwiZ2xNYWdGaWx0ZXIiLCJnbFdyYXBTIiwiQ0xBTVBfVE9fRURHRSIsImdsV3JhcFQiLCJpc1NyY01lZGlhRWxlbWVudCIsIl92aWRlb1ByZXZVcGRhdGVUaW1lIiwiaXNTcmNIVE1MRWxlbWVudCIsImlzU3JjUDVJbWFnZSIsImlzU3JjUDVHcmFwaGljcyIsImlzSW1hZ2VEYXRhIiwiX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZSIsImNyZWF0ZVRleHR1cmUiLCJ0ZXhQYXJhbWV0ZXJpIiwiVEVYVFVSRV9NQUdfRklMVEVSIiwiVEVYVFVSRV9NSU5fRklMVEVSIiwiVEVYVFVSRV9XUkFQX1MiLCJURVhUVVJFX1dSQVBfVCIsImxvYWRlZG1ldGFkYXRhIiwidGV4SW1hZ2UyRCIsIl9kaXJ0eSIsInVuYmluZFRleHR1cmUiLCJzZXRJbnRlcnBvbGF0aW9uIiwic2V0V3JhcE1vZGUiLCJNSVJST1JFRF9SRVBFQVQiLCJpbmZvcyIsImZpbmRJbWFnZSIsInN0cm9rZUltYWdlSW5mb3MiLCJjb2xEaW1JbWFnZUluZm9zIiwicm93RGltSW1hZ2VJbmZvcyIsImNvbENlbGxJbWFnZUluZm9zIiwicm93Q2VsbEltYWdlSW5mb3MiLCJnbHlwaEluZm9zIiwiZ2V0R2x5cGhJbmZvIiwicDAiLCJjMCIsImMxIiwicDEiLCJ0b1F1YWRyYXRpYyIsInF1YWRFcnJvciIsInNwbGl0SW5mbGVjdGlvbnMiLCJjZWxsSW1hZ2VJbmZvIiwiZGltT2Zmc2V0IiwiZGltSW1hZ2VJbmZvIiwiZ2x5cGgiLCJ1R2x5cGhSZWN0Iiwic3Ryb2tlSW1hZ2VJbmZvIiwic3Ryb2tlcyIsImNvbEluZm8iLCJyb3dJbmZvIiwidUdyaWRPZmZzZXQiLCJfZm9udEluZm8iLCJfdGV4dEdlb20iLCIuL3A1LlJlbmRlcmVyR0wiLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18iLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fIiwiVGFwTGlzdGVuZXIiLCJlbGVtZW50IiwiX2RyYWdnZWQiLCJfZWxlbWVudCIsIl9iaW5kZWRNb3ZlIiwiX21vdmVkIiwiX2JpbmRlZEVuZCIsIl9lbmRlZCIsImlzU3RhcnRlZCIsInN0YXJ0Q29udGV4dCIsImVsZW1lbnRzIiwiY2hlY2tMb29wIiwib25TdGFydGVkIiwidGFwTGlzdGVuZXJzIiwiYmluZFRhcExpc3RlbmVyIiwiTm9kZUxpc3QiLCJxdWVyeVNlbGVjdG9yQWxsIiwianF1ZXJ5IiwidGFwIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsInA1X2xpYl9wNV9taW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyIsInA1X2xpYl9wNV9taW5fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0IiwidG9uZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fIiwidG9uZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQiLCJzdGFydGF1ZGlvY29udGV4dF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fIiwic3RhcnRhdWRpb2NvbnRleHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0Iiwic2tldGNoIiwiYXV0b0ZpbHRlciIsImNob3J1cyIsImZtIiwiV2Fsa2VyIiwiZXkiLCJlYXNpbmciLCJjYW5QbGF5Iiwic3R1Y2siLCJyYWRpdXMxIiwid2FsayIsImNoZWNrU3R1Y2siLCJvdGhlcnMiLCJkaXN0U3EiLCJzZXRIdWUiLCJodSIsInNob3ciLCJ0cmVlMSIsIndhbGtlcnMxIiwiZXZhbCJdLCJtYXBwaW5ncyI6ImFBQ0EsSUFBQUEsS0FHQSxTQUFBQyxFQUFBQyxHQUdBLEdBQUFGLEVBQUFFLEdBQ0EsT0FBQUYsRUFBQUUsR0FBQUMsUUFHQSxJQUFBQyxFQUFBSixFQUFBRSxJQUNBRyxFQUFBSCxFQUNBSSxHQUFBLEVBQ0FILFlBVUEsT0FOQUksRUFBQUwsR0FBQU0sS0FBQUosRUFBQUQsUUFBQUMsSUFBQUQsUUFBQUYsR0FHQUcsRUFBQUUsR0FBQSxFQUdBRixFQUFBRCxRQUtBRixFQUFBUSxFQUFBRixFQUdBTixFQUFBUyxFQUFBVixFQUdBQyxFQUFBVSxFQUFBLFNBQUFSLEVBQUFTLEVBQUFDLEdBQ0FaLEVBQUFhLEVBQUFYLEVBQUFTLElBQ0FHLE9BQUFDLGVBQUFiLEVBQUFTLEdBQTBDSyxZQUFBLEVBQUFDLElBQUFMLEtBSzFDWixFQUFBa0IsRUFBQSxTQUFBaEIsR0FDQSxvQkFBQWlCLGVBQUFDLGFBQ0FOLE9BQUFDLGVBQUFiLEVBQUFpQixPQUFBQyxhQUF3REMsTUFBQSxXQUV4RFAsT0FBQUMsZUFBQWIsRUFBQSxjQUFpRG1CLE9BQUEsS0FRakRyQixFQUFBc0IsRUFBQSxTQUFBRCxFQUFBRSxHQUVBLEdBREEsRUFBQUEsSUFBQUYsRUFBQXJCLEVBQUFxQixJQUNBLEVBQUFFLEVBQUEsT0FBQUYsRUFDQSxLQUFBRSxHQUFBLGlCQUFBRixRQUFBRyxXQUFBLE9BQUFILEVBQ0EsSUFBQUksRUFBQVgsT0FBQVksT0FBQSxNQUdBLEdBRkExQixFQUFBa0IsRUFBQU8sR0FDQVgsT0FBQUMsZUFBQVUsRUFBQSxXQUF5Q1QsWUFBQSxFQUFBSyxVQUN6QyxFQUFBRSxHQUFBLGlCQUFBRixFQUFBLFFBQUFNLEtBQUFOLEVBQUFyQixFQUFBVSxFQUFBZSxFQUFBRSxFQUFBLFNBQUFBLEdBQWdILE9BQUFOLEVBQUFNLElBQXFCQyxLQUFBLEtBQUFELElBQ3JJLE9BQUFG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R0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxVQUFBQyxHQUFBLFVBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsUUFBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsVUFBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxHQUFBLEtBQUFDLEdBQUEsS0FBQUMsR0FBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxLQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxhQUFBQyxJQUFBLEtBQUFDLElBQUEsS0FBQUMsSUFBQSxNQUF3K0JDLElBQUs3RyxFQUFBLEVBQUFoMkIsRUFBQSxFQUFBSyxFQUFBLEVBQUFDLEVBQUEsRUFBQWtHLEVBQUEsRUFBQStDLEVBQUEsRUFBQWEsRUFBQSxFQUFBMkIsRUFBQSxFQUFBRyxFQUFBLEVBQUFDLEVBQUEsRUFBQTBELEdBQUEsRUFBQW9tQixHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQzdwK0JDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxHQUFBQyxHQUFBLEdBQUFDLEdBQUEsR0FBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEdBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEdBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxHQUFraUI1dkMsSUFBSzh2QyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLE1BQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxNQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsVUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxVQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFNBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxNQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLFVBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsU0FBQUMsS0FBQSxNQUFBQyxLQUFBLFFBQUFDLEtBQUEsS0FBQUMsS0FBQSxRQUFBQyxLQUFBLE1BQUFDLEtBQUEsU0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsYUFBQUMsS0FBQSxLQUFBQyxLQUFBLGFBQUFDLEtBQUEsVUFBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxRQUFBQyxNQUFBLFFBQUFDLEtBQUEsUUFBQUMsTUFBQSxRQUFBQyxNQUFBLFFBQUFDLE1BQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLE1BQUEsUUFBQUMsTUFBQSxRQUFBQyxLQUFBLFFBQUFDLEtBQUEsUUFBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxNQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQUFDLEtBQUEsS0FBQUMsS0FBQSxVQUFBQyxLQUFBLEtBQUFDLEtBQUEsS0FBQUMsS0FBQSxLQUFBQyxLQUFBLEtBQUFDLEtBQUEsTUFBQUMsS0FBQSxLQUFBQyxLQUFBLE1BQXl6RTV5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NjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLFFBQXVCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsS0FBQTc3RSxJQUFBLE9BQXNCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsUUFBQTc3RSxJQUFBLFVBQTRCNjdFLE1BQUEsTUFBQTc3RSxJQUFBLFFBQXdCNjdFLE1BQUEsT0FBQTc3RSxJQUFBLFNBQTBCNjdFLE1BQUEsS0FBQTc3RSxJ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azhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxhQUFBazhELEdBQUFsOEQsVUFBQSxj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QUFBLFVBQUFDLGVBQUEsVUFBQUMsU0FBQSxVQUFBQyxRQUFBLFVBQUFDLEtBQUEsVUFBQUMsU0FBQSxVQUFBQyxTQUFBLFVBQUFDLGNBQUEsVUFBQUMsU0FBQSxVQUFBQyxVQUFBLFVBQUFDLFNBQUEsVUFBQUMsVUFBQSxVQUFBQyxZQUFBLFVBQUFDLGVBQUEsVUFBQUMsV0FBQSxVQUFBQyxXQUFBLFVBQUFDLFFBQUEsVUFBQUMsV0FBQSxVQUFBQyxhQUFBLFVBQUFDLGNBQUEsVUFBQUMsY0FBQSxVQUFBQyxjQUFBLFVBQUFDLGNBQUEsVUFBQUMsV0FBQSxVQUFBQyxTQUFBLFVBQUFDLFlBQUEsVUFBQUMsUUFBQSxVQUFBQyxRQUFBLFVBQUFDLFdBQUEsVUFBQUMsVUFBQSxVQUFBQyxZQUFBLFVBQUFDLFlBQUEsVUFBQUMsUUFBQSxVQUFBQyxVQUFBLFVBQUFDLFdBQUEsVUFBQUMsS0FBQSxVQUFBQyxVQUFBLFVBQUFDLEtBQUEsVUFBQXRGLE1BQUEsVUFBQXVGLFlBQUEsVUFBQUMsS0FBQSxVQUFBQyxTQUFBLFVBQUFDLFFBQUEsVUFBQUMsVUFBQSxVQUFBQyxPQUFBLFVBQUFDLE1BQUEsVUFBQUMsTUFBQSxVQUFBQyxTQUFBLFVBQUFDLGNBQUEsVUFBQUMsVUFBQSxVQUFBQyxhQUFBLFVBQUFDLFVBQUEsVUFBQUMsV0FBQSxVQUFBQyxVQUFBLFVBQUFDLHFCQUFBLFVBQUFDLFVBQUEsVUFBQUMsV0FBQSxVQUFBQyxVQUFBLFVBQUFDLFVBQUEsVUFBQUMsWUFBQSxVQUFBQyxjQUFBLFVBQUFDLGFBQUEsVUFBQUMsZUFBQSxVQUFBQyxlQUFBLFVBQUFDLGVBQUEsVUFBQUMsWUFBQSxVQUFBQyxLQUFBLFVBQUFDLFVBQUEsVUFBQUMsTUFBQSxVQUFBQyxRQUFBLFVBQUFDLE9BQUEsVUFBQUMsaUJBQUEsVUFBQUMsV0FBQSxVQUFBQyxhQUFBLFVBQUFDLGFBQUEsVUFBQUMsZUFBQSxVQUFBQyxnQkFBQSxVQUFBQyxrQkFBQSxVQUFBQyxnQkFBQSxVQUFBQyxnQkFBQSxVQUFBQyxhQUFBLFVBQUFDLFVB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bEgsV0FBQSxNQUNBLEtBQUF2bEgsRUFBQVAsS0FDQU8sRUFBQXk3RyxLQUFBbDJELEtBQUF2L0MsTUFBQSxVQUlBaEcsRUFBQTgyRyxhQUFBLE1BQ1ErNEIsSUFBa0JGLEVBQUF4MkgsRUFBSWxULFNBQUF3SCxLQUFBLGlCQUdmOGhJLEVBQUEsVUFDZixJQUFJRSxFQUFBdDJILEVBQUUyMkgsa0JDaE9OLElBQUFoM0gsRUFHQUEsRUFBQSxXQUNBLE9BQUF0WSxLQURBLEdBSUEsSUFFQXNZLEtBQUErckMsU0FBQSxjQUFBQSxLQUFBLEVBQUFvc0YsTUFBQSxRQUNDLE1BQUE5bEksR0FFRCxpQkFBQXZFLFNBQUFrUyxFQUFBbFMsUUFPQTNJLEVBQUFELFFBQUE4YSIsImZpbGUiOiJtYWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDMpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3Rvcnkpe1xuXG5cdC8vVU1EXG5cdGlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdFx0ZGVmaW5lKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGZhY3RvcnkoKTtcblx0XHR9KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gXHR9IGVsc2Uge1xuXHRcdHJvb3QuVG9uZSA9IGZhY3RvcnkoKTtcblx0fVxuXG59KHRoaXMsIGZ1bmN0aW9uKCl7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdFxuXHR2YXIgVG9uZTtcblx0Ly9jb25zdHJ1Y3RzIHRoZSBtYWluIFRvbmUgb2JqZWN0XG5cdGZ1bmN0aW9uIE1haW4oZnVuYyl7XG5cdFx0VG9uZSA9IGZ1bmMoKTtcblx0fVxuXHQvL2ludm9rZXMgZWFjaCBvZiB0aGUgbW9kdWxlcyB3aXRoIHRoZSBtYWluIFRvbmUgb2JqZWN0IGFzIHRoZSBhcmd1bWVudFxuXHRmdW5jdGlvbiBNb2R1bGUoZnVuYyl7XG5cdFx0ZnVuYyhUb25lKTtcblx0fVx0LyoqXG5cdCAqICBUb25lLmpzXG5cdCAqICBAYXV0aG9yIFlvdGFtIE1hbm5cblx0ICogIEBsaWNlbnNlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQgTUlUIExpY2Vuc2Vcblx0ICogIEBjb3B5cmlnaHQgMjAxNC0yMDE4IFlvdGFtIE1hbm5cblx0ICovXG5cdE1haW4oZnVuY3Rpb24gKCkge1xuXHQgICAgXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUT05FXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUgaXMgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIG90aGVyIGNsYXNzZXMuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgdmFyIFRvbmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRvbmUpKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY29uc3RydWN0b3IgbmVlZHMgdG8gYmUgY2FsbGVkIHdpdGggdGhlIFxcJ25ld1xcJyBrZXl3b3JkJyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQHJldHVybnMge1N0cmluZ30gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgYXMgYSBzdHJpbmdcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGNsYXNzTmFtZSBpbiBUb25lKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0xldHRlciA9IGNsYXNzTmFtZVswXS5tYXRjaCgvXltBLVpdJC8pO1xuXHQgICAgICAgICAgICB2YXIgc2FtZUNvbnN0cnVjdG9yID0gVG9uZVtjbGFzc05hbWVdID09PSB0aGlzLmNvbnN0cnVjdG9yO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc0Z1bmN0aW9uKFRvbmVbY2xhc3NOYW1lXSkgJiYgaXNMZXR0ZXIgJiYgc2FtZUNvbnN0cnVjdG9yKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAnVG9uZSc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBkaXNjb25uZWN0IGFuZCBkaXNwb3NlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEdFVC9TRVRcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgcGFyYW1ldGVycyBhdCBvbmNlLiBFaXRoZXIgcGFzcyBpbiBhblxuXHRcdCAqICBvYmplY3QgbWFwcGluZyBwYXJhbWV0ZXJzIHRvIHZhbHVlcywgb3IgdG8gc2V0IGFcblx0XHQgKiAgc2luZ2xlIHBhcmFtZXRlciwgYnkgcGFzc2luZyBpbiBhIHN0cmluZyBhbmQgdmFsdWUuXG5cdFx0ICogIFRoZSBsYXN0IGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIHJhbXAgdGltZSB3aGljaFxuXHRcdCAqICB3aWxsIHJhbXAgYW55IHNpZ25hbCB2YWx1ZXMgdG8gdGhlaXIgZGVzdGluYXRpb24gdmFsdWVcblx0XHQgKiAgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqICBAcGFyYW0ge09iamVjdHxTdHJpbmd9IHBhcmFtc1xuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHJhbXBUaW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lfSB0aGlzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lI1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vc2V0IHZhbHVlcyB1c2luZyBhbiBvYmplY3Rcblx0XHQgKiBmaWx0ZXIuc2V0KHtcblx0XHQgKiBcdFwiZnJlcXVlbmN5XCIgOiAzMDAsXG5cdFx0ICogXHRcInR5cGVcIiA6IGhpZ2hwYXNzXG5cdFx0ICogfSk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogZmlsdGVyLnNldChcInR5cGVcIiwgXCJoaWdocGFzc1wiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JhbXAgdG8gdGhlIHZhbHVlIDIyMCBvdmVyIDMgc2Vjb25kcy5cblx0XHQgKiBvc2NpbGxhdG9yLnNldCh7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogMjIwXG5cdFx0ICogfSwgMyk7XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocGFyYW1zLCB2YWx1ZSwgcmFtcFRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc09iamVjdChwYXJhbXMpKSB7XG5cdCAgICAgICAgICAgIHJhbXBUaW1lID0gdmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgdmFyIHRtcE9iaiA9IHt9O1xuXHQgICAgICAgICAgICB0bXBPYmpbcGFyYW1zXSA9IHZhbHVlO1xuXHQgICAgICAgICAgICBwYXJhbXMgPSB0bXBPYmo7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHBhcmFtTG9vcDpcblx0ICAgICAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBwYXJhbXMpIHtcblx0ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW1zW2F0dHJdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgICAgICBpZiAoYXR0ci5pbmRleE9mKCcuJykgIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJTcGxpdCA9IGF0dHIuc3BsaXQoJy4nKTtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJTcGxpdC5sZW5ndGggLSAxOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50W2F0dHJTcGxpdFtpXV07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBUb25lKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyU3BsaXQuc3BsaWNlKDAsIGkgKyAxKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbm5lclBhcmFtID0gYXR0clNwbGl0LmpvaW4oJy4nKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5zZXQoaW5uZXJQYXJhbSwgdmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgcGFyYW1Mb29wO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGF0dHIgPSBhdHRyU3BsaXRbYXR0clNwbGl0Lmxlbmd0aCAtIDFdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdmFyIHBhcmFtID0gcGFyZW50W2F0dHJdO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihwYXJhbSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlNpZ25hbCAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuU2lnbmFsIHx8IFRvbmUuUGFyYW0gJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlBhcmFtKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnZhbHVlICE9PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHJhbXBUaW1lKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0udmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnJhbXBUbyh2YWx1ZSwgcmFtcFRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0udmFsdWUgIT09IHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLlRpbWVCYXNlICYmIHBhcmFtIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHBhcmVudFthdHRyXSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbnN0YW5jZW9mIFRvbmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJhbS5zZXQodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSAhPT0gdmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBwYXJlbnRbYXR0cl0gPSB2YWx1ZTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIG9iamVjdCdzIGF0dHJpYnV0ZXMuIEdpdmVuIG5vIGFyZ3VtZW50cyBnZXRcblx0XHQgKiAgd2lsbCByZXR1cm4gYWxsIGF2YWlsYWJsZSBvYmplY3QgcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZ1xuXHRcdCAqICB2YWx1ZXMuIFBhc3MgaW4gYSBzaW5nbGUgYXR0cmlidXRlIHRvIHJldHJpZXZlIG9yIGFuIGFycmF5XG5cdFx0ICogIG9mIGF0dHJpYnV0ZXMuIFRoZSBhdHRyaWJ1dGUgc3RyaW5ncyBjYW4gYWxzbyBpbmNsdWRlIGEgXCIuXCJcblx0XHQgKiAgdG8gYWNjZXNzIGRlZXBlciBwcm9wZXJ0aWVzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBvc2MuZ2V0KCk7XG5cdFx0ICogLy9yZXR1cm5zIHtcInR5cGVcIiA6IFwic2luZVwiLCBcImZyZXF1ZW5jeVwiIDogNDQwLCAuLi5ldGN9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogb3NjLmdldChcInR5cGVcIik7XG5cdFx0ICogLy9yZXR1cm5zIHsgXCJ0eXBlXCIgOiBcInNpbmVcIn1cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vdXNlIGRvdCBub3RhdGlvbiB0byBhY2Nlc3MgZGVlcCBwcm9wZXJ0aWVzXG5cdFx0ICogc3ludGguZ2V0KFtcImVudmVsb3BlLmF0dGFja1wiLCBcImVudmVsb3BlLnJlbGVhc2VcIl0pO1xuXHRcdCAqIC8vcmV0dXJucyB7XCJlbnZlbG9wZVwiIDoge1wiYXR0YWNrXCIgOiAwLjIsIFwicmVsZWFzZVwiIDogMC40fX1cblx0XHQgKiAgQHBhcmFtIHtBcnJheT18c3RyaW5nfHVuZGVmaW5lZH0gcGFyYW1zIHRoZSBwYXJhbWV0ZXJzIHRvIGdldCwgb3RoZXJ3aXNlIHdpbGwgcmV0dXJuXG5cdFx0ICogIFx0XHRcdFx0XHQgICAgICAgICAgICAgICAgICBhbGwgYXZhaWxhYmxlLlxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYocGFyYW1zKSkge1xuXHQgICAgICAgICAgICBwYXJhbXMgPSB0aGlzLl9jb2xsZWN0RGVmYXVsdHModGhpcy5jb25zdHJ1Y3Rvcik7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzU3RyaW5nKHBhcmFtcykpIHtcblx0ICAgICAgICAgICAgcGFyYW1zID0gW3BhcmFtc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciByZXQgPSB7fTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgYXR0ciA9IHBhcmFtc1tpXTtcblx0ICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXM7XG5cdCAgICAgICAgICAgIHZhciBzdWJSZXQgPSByZXQ7XG5cdCAgICAgICAgICAgIGlmIChhdHRyLmluZGV4T2YoJy4nKSAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBhdHRyU3BsaXQgPSBhdHRyLnNwbGl0KCcuJyk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHJTcGxpdC5sZW5ndGggLSAxOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgc3ViQXR0ciA9IGF0dHJTcGxpdFtqXTtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJSZXRbc3ViQXR0cl0gPSBzdWJSZXRbc3ViQXR0cl0gfHwge307XG5cdCAgICAgICAgICAgICAgICAgICAgc3ViUmV0ID0gc3ViUmV0W3N1YkF0dHJdO1xuXHQgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFtzdWJBdHRyXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGF0dHIgPSBhdHRyU3BsaXRbYXR0clNwbGl0Lmxlbmd0aCAtIDFdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBwYXJhbSA9IHBhcmVudFthdHRyXTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QocGFyYW1zW2F0dHJdKSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0uZ2V0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5TaWduYWwgJiYgcGFyYW0gaW5zdGFuY2VvZiBUb25lLlNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0udmFsdWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5QYXJhbSAmJiBwYXJhbSBpbnN0YW5jZW9mIFRvbmUuUGFyYW0pIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtLnZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgQXVkaW9QYXJhbSkge1xuXHQgICAgICAgICAgICAgICAgc3ViUmV0W2F0dHJdID0gcGFyYW0udmFsdWU7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0gaW5zdGFuY2VvZiBUb25lKSB7XG5cdCAgICAgICAgICAgICAgICBzdWJSZXRbYXR0cl0gPSBwYXJhbS5nZXQoKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICghVG9uZS5pc0Z1bmN0aW9uKHBhcmFtKSAmJiBUb25lLmlzRGVmaW5lZChwYXJhbSkpIHtcblx0ICAgICAgICAgICAgICAgIHN1YlJldFthdHRyXSA9IHBhcmFtO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbGxlY3QgYWxsIG9mIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgaW4gb25lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0ciB0aGUgY29uc3RydWN0b3IgdG8gZmluZCB0aGUgZGVmYXVsdHMgZnJvbVxuXHRcdCAqICBAcmV0dXJuIHtBcnJheX0gYWxsIG9mIHRoZSBhdHRyaWJ1dGVzIHdoaWNoIGJlbG9uZyB0byB0aGUgY2xhc3Ncblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLl9jb2xsZWN0RGVmYXVsdHMgPSBmdW5jdGlvbiAoY29uc3RyKSB7XG5cdCAgICAgICAgdmFyIHJldCA9IFtdO1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChjb25zdHIuZGVmYXVsdHMpKSB7XG5cdCAgICAgICAgICAgIHJldCA9IE9iamVjdC5rZXlzKGNvbnN0ci5kZWZhdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChjb25zdHIuX3N1cGVyKSkge1xuXHQgICAgICAgICAgICB2YXIgc3VwZXJEZWZzID0gdGhpcy5fY29sbGVjdERlZmF1bHRzKGNvbnN0ci5fc3VwZXIpO1xuXHQgICAgICAgICAgICAvL2ZpbHRlciBvdXQgcmVwZWF0c1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1cGVyRGVmcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKHJldC5pbmRleE9mKHN1cGVyRGVmc1tpXSkgPT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goc3VwZXJEZWZzW2ldKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdERFRkFVTFRTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIHZhbHVlcyAgVGhlIGFyZ3VtZW50cyBhcnJheVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIGtleXMgICAgVGhlIG5hbWVzIG9mIHRoZSBhcmd1bWVudHNcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R9IGNvbnN0ciBUaGUgY2xhc3MgY29uc3RydWN0b3Jcblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIEFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgIGRlZmF1bHRzIGJldHdlZW4gdGhlIGNsYXNzJyBkZWZhdWx0c1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBwYXNzZWQgaW4gYXJndW1lbnRzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5kZWZhdWx0cyA9IGZ1bmN0aW9uICh2YWx1ZXMsIGtleXMsIGNvbnN0cikge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0ge307XG5cdCAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDEgJiYgVG9uZS5pc09iamVjdCh2YWx1ZXNbMF0pKSB7XG5cdCAgICAgICAgICAgIG9wdGlvbnMgPSB2YWx1ZXNbMF07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBvcHRpb25zW2tleXNbaV1dID0gdmFsdWVzW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChjb25zdHIuZGVmYXVsdHMpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgY29uc3RyLmRlZmF1bHRzKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNPYmplY3QoY29uc3RyKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIGNvbnN0cik7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgYGdpdmVuYCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCB1c2UgdGhlIGBmYWxsYmFja2AuXG5cdFx0ICogIElmIGJvdGggYGdpdmVuYCBhbmQgYGZhbGxiYWNrYCBhcmUgb2JqZWN0IGxpdGVyYWxzLCBpdCB3aWxsXG5cdFx0ICogIHJldHVybiBhIGRlZXAgY29weSB3aGljaCBpbmNsdWRlcyBhbGwgb2YgdGhlIHBhcmFtZXRlcnMgZnJvbSBib3RoXG5cdFx0ICogIG9iamVjdHMuIElmIGEgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBpbiBnaXZlbiwgaXQgd2lsbCByZXR1cm5cblx0XHQgKiAgdGhlIGZhbGxiYWNrIHByb3BlcnR5LlxuXHRcdCAqICA8YnI+PGJyPlxuXHRcdCAqICBXQVJOSU5HOiBpZiBvYmplY3QgaXMgc2VsZiByZWZlcmVudGlhbCwgaXQgd2lsbCBnbyBpbnRvIGFuIGFuXG5cdFx0ICogIGluZmluaXRlIHJlY3Vyc2l2ZSBsb29wLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAcGFyYW0gIHsqfSBnaXZlblxuXHRcdCAqICBAcGFyYW0gIHsqfSBmYWxsYmFja1xuXHRcdCAqICBAcmV0dXJuIHsqfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5kZWZhdWx0QXJnID0gZnVuY3Rpb24gKGdpdmVuLCBmYWxsYmFjaykge1xuXHQgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGdpdmVuKSAmJiBUb25lLmlzT2JqZWN0KGZhbGxiYWNrKSkge1xuXHQgICAgICAgICAgICB2YXIgcmV0ID0ge307XG5cdCAgICAgICAgICAgIC8vbWFrZSBhIGRlZXAgY29weSBvZiB0aGUgZ2l2ZW4gb2JqZWN0XG5cdCAgICAgICAgICAgIGZvciAodmFyIGdpdmVuUHJvcCBpbiBnaXZlbikge1xuXHQgICAgICAgICAgICAgICAgcmV0W2dpdmVuUHJvcF0gPSBUb25lLmRlZmF1bHRBcmcoZmFsbGJhY2tbZ2l2ZW5Qcm9wXSwgZ2l2ZW5bZ2l2ZW5Qcm9wXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZm9yICh2YXIgZmFsbGJhY2tQcm9wIGluIGZhbGxiYWNrKSB7XG5cdCAgICAgICAgICAgICAgICByZXRbZmFsbGJhY2tQcm9wXSA9IFRvbmUuZGVmYXVsdEFyZyhnaXZlbltmYWxsYmFja1Byb3BdLCBmYWxsYmFja1tmYWxsYmFja1Byb3BdKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gcmV0O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmlzVW5kZWYoZ2l2ZW4pID8gZmFsbGJhY2sgOiBnaXZlbjtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0Q09OTkVDVElPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIGNvbm5lY3QgdG9nZXRoZXIgYWxsIG9mIHRoZSBhcmd1bWVudHMgaW4gc2VyaWVzXG5cdFx0ICogIEBwYXJhbSB7Li4uQXVkaW9QYXJhbXxUb25lfEF1ZGlvTm9kZX0gbm9kZXNcblx0XHQgKiAgQHJldHVybnMge1RvbmV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuY29ubmVjdFNlcmllcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY3VycmVudFVuaXQgPSBhcmd1bWVudHNbMF07XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHRvVW5pdCA9IGFyZ3VtZW50c1tpXTtcblx0ICAgICAgICAgICAgY3VycmVudFVuaXQuY29ubmVjdCh0b1VuaXQpO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdCA9IHRvVW5pdDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmU7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBUWVBFIENIRUNLSU5HXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmcgaXMgdW5kZWZpbmVkXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgdW5kZWZpbmVkXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNVbmRlZiA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZyBpcyBub3QgdW5kZWZpbmVkXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgdW5kZWZpbmVkXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNEZWZpbmVkID0gZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgIHJldHVybiAhVG9uZS5pc1VuZGVmKHZhbCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZyBpcyBhIGZ1bmN0aW9uXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBmdW5jdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbic7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgbnVtYmVyXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNOdW1iZXIgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBnaXZlbiBhcmd1bWVudCBpcyBhbiBvYmplY3QgbGl0ZXJhbCAoaS5lLiBge31gKTtcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhbiBvYmplY3QgbGl0ZXJhbC5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc09iamVjdCA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmIGFyZy5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBhIGJvb2xlYW4uXG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYSBib29sZWFuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNCb29sZWFuID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGFuIEFycmF5XG5cdFx0ICogIEBwYXJhbSB7Kn0gYXJnIHRoZSBhcmd1bWVudCB0byB0ZXN0XG5cdFx0ICogIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBhcmcgaXMgYW4gYXJyYXlcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5pc0FycmF5ID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRlc3QgaWYgdGhlIGFyZ3VtZW50IGlzIGEgc3RyaW5nLlxuXHRcdCAqICBAcGFyYW0geyp9IGFyZyB0aGUgYXJndW1lbnQgdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXJnIGlzIGEgc3RyaW5nXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuaXNTdHJpbmcgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUZXN0IGlmIHRoZSBhcmd1bWVudCBpcyBpbiB0aGUgZm9ybSBvZiBhIG5vdGUgaW4gc2NpZW50aWZpYyBwaXRjaCBub3RhdGlvbi5cblx0XHQgKiAgZS5nLiBcIkM0XCJcblx0XHQgKiAgQHBhcmFtIHsqfSBhcmcgdGhlIGFyZ3VtZW50IHRvIHRlc3Rcblx0XHQgKiAgQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGFyZyBpcyBhIHN0cmluZ1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmlzTm90ZSA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5pc1N0cmluZyhhcmcpICYmIC9eKFthLWddezF9KD86YnwjfHh8YmIpPykoLT9bMC05XSspL2kudGVzdChhcmcpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBbiBlbXB0eSBmdW5jdGlvbi5cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5ub09wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBNYWtlIHRoZSBwcm9wZXJ0eSBub3Qgd3JpdGFibGUuIEludGVybmFsIHVzZSBvbmx5LlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wZXJ0eSAgdGhlIHByb3BlcnR5IHRvIG1ha2Ugbm90IHdyaXRhYmxlXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5fcmVhZE9ubHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0eS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVhZE9ubHkocHJvcGVydHlbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5LCB7XG5cdCAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG5cdCAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTWFrZSBhbiBhdHRyaWJ1dGUgd3JpdGVhYmxlLiBJbnRlcmFsIHVzZSBvbmx5LlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wZXJ0eSAgdGhlIHByb3BlcnR5IHRvIG1ha2Ugd3JpdGFibGVcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLl93cml0YWJsZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5KSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93cml0YWJsZShwcm9wZXJ0eVtpXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHksIHsgd3JpdGFibGU6IHRydWUgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFBvc3NpYmxlIHBsYXkgc3RhdGVzLlxuXHRcdCAqIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0YXRlID0ge1xuXHQgICAgICAgIFN0YXJ0ZWQ6ICdzdGFydGVkJyxcblx0ICAgICAgICBTdG9wcGVkOiAnc3RvcHBlZCcsXG5cdCAgICAgICAgUGF1c2VkOiAncGF1c2VkJ1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEVxdWFsIHBvd2VyIGdhaW4gc2NhbGUuIEdvb2QgZm9yIGNyb3NzLWZhZGluZy5cblx0XHQgKiAgQHBhcmFtICB7Tm9ybWFsUmFuZ2V9IHBlcmNlbnQgKDAtMSlcblx0XHQgKiAgQHJldHVybiB7TnVtYmVyfSAgICAgICAgIG91dHB1dCBnYWluICgwLTEpXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZXF1YWxQb3dlclNjYWxlID0gZnVuY3Rpb24gKHBlcmNlbnQpIHtcblx0ICAgICAgICB2YXIgcGlGYWN0b3IgPSAwLjUgKiBNYXRoLlBJO1xuXHQgICAgICAgIHJldHVybiBNYXRoLnNpbihwZXJjZW50ICogcGlGYWN0b3IpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGRlY2liZWxzIGludG8gZ2Fpbi5cblx0XHQgKiAgQHBhcmFtICB7RGVjaWJlbHN9IGRiXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5kYlRvR2FpbiA9IGZ1bmN0aW9uIChkYikge1xuXHQgICAgICAgIHJldHVybiBNYXRoLnBvdygxMCwgZGIgLyAyMCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZ2FpbiB0byBkZWNpYmVscy5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSBnYWluICgwLTEpXG5cdFx0ICogIEByZXR1cm4ge0RlY2liZWxzfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICovXG5cdCAgICBUb25lLmdhaW5Ub0RiID0gZnVuY3Rpb24gKGdhaW4pIHtcblx0ICAgICAgICByZXR1cm4gMjAgKiAoTWF0aC5sb2coZ2FpbikgLyBNYXRoLkxOMTApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGFuIGludGVydmFsIChpbiBzZW1pdG9uZXMpIHRvIGEgZnJlcXVlbmN5IHJhdGlvLlxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbH0gaW50ZXJ2YWwgdGhlIG51bWJlciBvZiBzZW1pdG9uZXMgYWJvdmUgdGhlIGJhc2Ugbm90ZVxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgIHRoZSBmcmVxdWVuY3kgcmF0aW9cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKDApOyAvLyAxXG5cdFx0ICogdG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oMTIpOyAvLyAyXG5cdFx0ICogdG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oLTEyKTsgLy8gMC41XG5cdFx0ICovXG5cdCAgICBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyA9IGZ1bmN0aW9uIChpbnRlcnZhbCkge1xuXHQgICAgICAgIHJldHVybiBNYXRoLnBvdygyLCBpbnRlcnZhbCAvIDEyKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUSU1JTkdcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSBBdWRpb0NvbnRleHQgY2xvY2suXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gdGhlIGN1cnJlbnRUaW1lIGZyb20gdGhlIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5jb250ZXh0Lm5vdygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBvZiB0aGUgQXVkaW9Db250ZXh0IGNsb2NrLlxuXHRcdCAqICBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBjdXJyZW50VGltZSBmcm9tIHRoZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5ub3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuY29udGV4dC5ub3coKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRJTkhFUklUQU5DRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgaGF2ZSBhIGNoaWxkIGluaGVyaXQgYWxsIG9mIFRvbmUncyAob3IgYSBwYXJlbnQncykgcHJvdG90eXBlXG5cdFx0ICogIHRvIGluaGVyaXQgdGhlIHBhcmVudCdzIHByb3BlcnRpZXMsIG1ha2Ugc3VyZSB0byBjYWxsXG5cdFx0ICogIFBhcmVudC5jYWxsKHRoaXMpIGluIHRoZSBjaGlsZCdzIGNvbnN0cnVjdG9yXG5cdFx0ICpcblx0XHQgKiAgYmFzZWQgb24gY2xvc3VyZSBsaWJyYXJ5J3MgaW5oZXJpdCBmdW5jdGlvblxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259IFx0Y2hpbGRcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSBwYXJlbnQgKG9wdGlvbmFsKSBwYXJlbnQgdG8gaW5oZXJpdCBmcm9tXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vIHBhcmVudCBpcyBzdXBwbGllZCwgdGhlIGNoaWxkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgaW5oZXJpdCBmcm9tIFRvbmVcblx0XHQgKi9cblx0ICAgIFRvbmUuZXh0ZW5kID0gZnVuY3Rpb24gKGNoaWxkLCBwYXJlbnQpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHBhcmVudCkpIHtcblx0ICAgICAgICAgICAgcGFyZW50ID0gVG9uZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gVGVtcENvbnN0cnVjdG9yKCkge1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUZW1wQ29uc3RydWN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTtcblx0ICAgICAgICBjaGlsZC5wcm90b3R5cGUgPSBuZXcgVGVtcENvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgLyoqIEBvdmVycmlkZSAqL1xuXHQgICAgICAgIGNoaWxkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuXHQgICAgICAgIGNoaWxkLl9zdXBlciA9IHBhcmVudDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRDT05URVhUXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBQcml2YXRlIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIEF1ZGlvQ29udGV4dFxuXHRcdCAqICBAdHlwZSB7QXVkaW9Db250ZXh0fVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIGF1ZGlvQ29udGV4dCA9IG51bGw7XG5cdCAgICAvKipcblx0XHQgKiAgQSBzdGF0aWMgcG9pbnRlciB0byB0aGUgYXVkaW8gY29udGV4dCBhY2Nlc3NpYmxlIGFzIFRvbmUuY29udGV4dC5cblx0XHQgKiAgQHR5cGUge1RvbmUuQ29udGV4dH1cblx0XHQgKiAgQG5hbWUgY29udGV4dFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUsICdjb250ZXh0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYXVkaW9Db250ZXh0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5Db250ZXh0ICYmIGNvbnRleHQgaW5zdGFuY2VvZiBUb25lLkNvbnRleHQpIHtcblx0ICAgICAgICAgICAgICAgIGF1ZGlvQ29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBhdWRpb0NvbnRleHQgPSBuZXcgVG9uZS5Db250ZXh0KGNvbnRleHQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vaW5pdGlhbGl6ZSB0aGUgbmV3IGF1ZGlvIGNvbnRleHRcblx0ICAgICAgICAgICAgVG9uZS5Db250ZXh0LmVtaXQoJ2luaXQnLCBhdWRpb0NvbnRleHQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHR5cGUge1RvbmUuQ29udGV4dH1cblx0XHQgKiAgQG5hbWUgY29udGV4dFxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZSNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5wcm90b3R5cGUsICdjb250ZXh0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5jb250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRvbmUgYXV0b21hdGljYWxseSBjcmVhdGVzIGEgY29udGV4dCBvbiBpbml0LCBidXQgaWYgeW91IGFyZSB3b3JraW5nXG5cdFx0ICogIHdpdGggb3RoZXIgbGlicmFyaWVzIHdoaWNoIGFsc28gY3JlYXRlIGFuIEF1ZGlvQ29udGV4dCwgaXQgY2FuIGJlXG5cdFx0ICogIHVzZWZ1bCB0byBzZXQgeW91ciBvd24uIElmIHlvdSBhcmUgZ29pbmcgdG8gc2V0IHlvdXIgb3duIGNvbnRleHQsXG5cdFx0ICogIGJlIHN1cmUgdG8gZG8gaXQgYXQgdGhlIHN0YXJ0IG9mIHlvdXIgY29kZSwgYmVmb3JlIGNyZWF0aW5nIGFueSBvYmplY3RzLlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9Db250ZXh0fSBjdHggVGhlIG5ldyBhdWRpbyBjb250ZXh0IHRvIHNldFxuXHRcdCAqL1xuXHQgICAgVG9uZS5zZXRDb250ZXh0ID0gZnVuY3Rpb24gKGN0eCkge1xuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IGN0eDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBVFRSSUJVVEVTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIHNlY29uZHMgb2YgMSBwcm9jZXNzaW5nIGJsb2NrICgxMjggc2FtcGxlcylcblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG5hbWUgYmxvY2tUaW1lXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5wcm90b3R5cGUsICdibG9ja1RpbWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxMjggLyB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBvZiBvbmUgc2FtcGxlLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzYW1wbGVUaW1lXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5wcm90b3R5cGUsICdzYW1wbGVUaW1lJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gMSAvIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFdoZXRoZXIgb3Igbm90IGFsbCB0aGUgdGVjaG5vbG9naWVzIHRoYXQgVG9uZS5qcyByZWxpZXMgb24gYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBicm93c2VyLlxuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiAgQG5hbWUgc3VwcG9ydGVkXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZSwgJ3N1cHBvcnRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGhhc0F1ZGlvQ29udGV4dCA9IHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnQXVkaW9Db250ZXh0JykgfHwgd2luZG93Lmhhc093blByb3BlcnR5KCd3ZWJraXRBdWRpb0NvbnRleHQnKTtcblx0ICAgICAgICAgICAgdmFyIGhhc1Byb21pc2VzID0gd2luZG93Lmhhc093blByb3BlcnR5KCdQcm9taXNlJyk7XG5cdCAgICAgICAgICAgIHZhciBoYXNXb3JrZXJzID0gd2luZG93Lmhhc093blByb3BlcnR5KCdXb3JrZXInKTtcblx0ICAgICAgICAgICAgcmV0dXJuIGhhc0F1ZGlvQ29udGV4dCAmJiBoYXNQcm9taXNlcyAmJiBoYXNXb3JrZXJzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEJvb2xlYW4gdmFsdWUgaWYgdGhlIGF1ZGlvIGNvbnRleHQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBuYW1lIGluaXRpYWxpemVkXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZSwgJ2luaXRpYWxpemVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYXVkaW9Db250ZXh0ICE9PSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgY29udGV4dCB3aGVuIGl0IGJlY29tZXMgYXZhaWxhYmxlXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgcmVzb2x2ZSAgQ2FsbGJhY2sgd2hlbiB0aGUgY29udGV4dCBpcyBpbml0aWFsaXplZFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaW5pdGlhbGl6ZWQpIHtcblx0ICAgICAgICAgICAgcmVzb2x2ZShUb25lLmNvbnRleHQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciByZXNDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJlc29sdmUoVG9uZS5jb250ZXh0KTtcblx0ICAgICAgICAgICAgICAgIFRvbmUuQ29udGV4dC5vZmYoJ2luaXQnLCByZXNDYWxsYmFjayk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIHJlc0NhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHZlcnNpb24gbnVtYmVyXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLnZlcnNpb24gPSAncjEyJztcblx0ICAgIHJldHVybiBUb25lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5FbWl0dGVyIGdpdmVzIGNsYXNzZXMgd2hpY2ggZXh0ZW5kIGl0XG5cdFx0ICogICAgICAgICB0aGUgYWJpbGl0eSB0byBsaXN0ZW4gZm9yIGFuZCBlbWl0IGV2ZW50cy5cblx0XHQgKiAgICAgICAgIEluc3BpcmF0aW9uIGFuZCByZWZlcmVuY2UgZnJvbSBKZXJvbWUgRXRpZW5uZSdzIFtNaWNyb0V2ZW50XShodHRwczovL2dpdGh1Yi5jb20vamVyb21lZXRpZW5uZS9taWNyb2V2ZW50LmpzKS5cblx0XHQgKiAgICAgICAgIE1JVCAoYykgMjAxMSBKZXJvbWUgRXRpZW5uZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQ29udGFpbnMgYWxsIG9mIHRoZSBldmVudHMuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRW1pdHRlcik7XG5cdCAgICAvKipcblx0XHQgKiAgQmluZCBhIGNhbGxiYWNrIHRvIGEgc3BlY2lmaWMgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gICAgZXZlbnQgICAgIFRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBsaXN0ZW4gZm9yLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50IGlzIGVtaXR0ZWRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcblx0ICAgICAgICAvL3NwbGl0IHRoZSBldmVudFxuXHQgICAgICAgIHZhciBldmVudHMgPSBldmVudC5zcGxpdCgvXFxXKy8pO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudE5hbWUgPSBldmVudHNbaV07XG5cdCAgICAgICAgICAgIGlmICghdGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudE5hbWVdID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0ucHVzaChjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBCaW5kIGEgY2FsbGJhY2sgd2hpY2ggaXMgb25seSBpbnZva2VkIG9uY2Vcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBldmVudCAgICAgVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGxpc3RlbiBmb3IuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgaXMgZW1pdHRlZFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiAoZXZlbnQsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdmFyIGJvdW5kQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vaW52b2tlIHRoZSBjYWxsYmFja1xuXHQgICAgICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICB0aGlzLm9mZihldmVudCwgYm91bmRDYWxsYmFjayk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgICAgIHRoaXMub24oZXZlbnQsIGJvdW5kQ2FsbGJhY2spO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIGV2ZW50ICAgICBUaGUgZXZlbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdG8uXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgd2hpY2ggd2FzIGJvdW5kIHRvXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBldmVudCB3aXRoIFRvbmUuRW1pdHRlci5vbi5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm8gY2FsbGJhY2sgaXMgZ2l2ZW4sIGFsbCBjYWxsYmFja3Ncblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzIGFyZSByZW1vdmVkLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FbWl0dGVyfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIChldmVudCwgY2FsbGJhY2spIHtcblx0ICAgICAgICB2YXIgZXZlbnRzID0gZXZlbnQuc3BsaXQoL1xcVysvKTtcblx0ICAgICAgICBmb3IgKHZhciBldiA9IDA7IGV2IDwgZXZlbnRzLmxlbmd0aDsgZXYrKykge1xuXHQgICAgICAgICAgICBldmVudCA9IGV2ZW50c1tldl07XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9ldmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnQpKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKGNhbGxiYWNrKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudF0gPSBbXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGV2ZW50TGlzdCA9IHRoaXMuX2V2ZW50c1tldmVudF07XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudExpc3QubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50TGlzdFtpXSA9PT0gY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TGlzdC5zcGxpY2UoaSwgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludm9rZSBhbGwgb2YgdGhlIGNhbGxiYWNrcyBib3VuZCB0byB0aGUgZXZlbnRcblx0XHQgKiAgd2l0aCBhbnkgYXJndW1lbnRzIHBhc3NlZCBpbi5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgZXZlbnQgIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtIHsqfSBhcmdzLi4uIFRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb25zIGxpc3RlbmluZy5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpLnNsaWNlKDEpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGV2ZW50TGlzdCA9IHRoaXMuX2V2ZW50c1tldmVudF0uc2xpY2UoMCk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXZlbnRMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnRMaXN0W2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgRW1pdHRlciBmdW5jdGlvbnMgKG9uL29mZi9lbWl0KSB0byB0aGUgb2JqZWN0XG5cdFx0ICogIEBwYXJhbSAge09iamVjdHxGdW5jdGlvbn0gIG9iamVjdCAgVGhlIG9iamVjdCBvciBjbGFzcyB0byBleHRlbmQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLkVtaXR0ZXIubWl4aW4gPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdCAgICAgICAgdmFyIGZ1bmN0aW9ucyA9IFtcblx0ICAgICAgICAgICAgJ29uJyxcblx0ICAgICAgICAgICAgJ29uY2UnLFxuXHQgICAgICAgICAgICAnb2ZmJyxcblx0ICAgICAgICAgICAgJ2VtaXQnXG5cdCAgICAgICAgXTtcblx0ICAgICAgICBvYmplY3QuX2V2ZW50cyA9IHt9O1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBmdW5jID0gZnVuY3Rpb25zW2ldO1xuXHQgICAgICAgICAgICB2YXIgZW1pdHRlckZ1bmMgPSBUb25lLkVtaXR0ZXIucHJvdG90eXBlW2Z1bmNdO1xuXHQgICAgICAgICAgICBvYmplY3RbZnVuY10gPSBlbWl0dGVyRnVuYztcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuRW1pdHRlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRW1pdHRlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FbWl0dGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBUaW1lbGluZSBjbGFzcyBmb3Igc2NoZWR1bGluZyBhbmQgbWFpbnRhaW5pbmcgc3RhdGVcblx0XHQgKiAgICAgICAgIGFsb25nIGEgdGltZWxpbmUuIEFsbCBldmVudHMgbXVzdCBoYXZlIGEgXCJ0aW1lXCIgcHJvcGVydHkuXG5cdFx0ICogICAgICAgICBJbnRlcm5hbGx5LCBldmVudHMgYXJlIHN0b3JlZCBpbiB0aW1lIG9yZGVyIGZvciBmYXN0XG5cdFx0ICogICAgICAgICByZXRyaWV2YWwuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge1Bvc2l0aXZlfSBbbWVtb3J5PUluZmluaXR5XSBUaGUgbnVtYmVyIG9mIHByZXZpb3VzIGV2ZW50cyB0aGF0IGFyZSByZXRhaW5lZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydtZW1vcnknXSwgVG9uZS5UaW1lbGluZSk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhcnJheSBvZiBzY2hlZHVsZWQgdGltZWxpbmUgZXZlbnRzXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWVtb3J5IG9mIHRoZSB0aW1lbGluZSwgaS5lLlxuXHRcdFx0ICogIGhvdyBtYW55IGV2ZW50cyBpbiB0aGUgcGFzdCBpdCB3aWxsIHJldGFpblxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWVtb3J5ID0gb3B0aW9ucy5tZW1vcnk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaW1lbGluZSk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgcGFyYW1ldGVyc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5kZWZhdWx0cyA9IHsgJ21lbW9yeSc6IEluZmluaXR5IH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpbWVsaW5lI1xuXHRcdCAqICBAbmFtZSBsZW5ndGhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaW1lbGluZS5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZS5sZW5ndGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSW5zZXJ0IGFuIGV2ZW50IG9iamVjdCBvbnRvIHRoZSB0aW1lbGluZS4gRXZlbnRzIG11c3QgaGF2ZSBhIFwidGltZVwiIGF0dHJpYnV0ZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCBvYmplY3QgdG8gaW5zZXJ0IGludG8gdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGltZWxpbmV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIC8vdGhlIGV2ZW50IG5lZWRzIHRvIGhhdmUgYSB0aW1lIGF0dHJpYnV0ZVxuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYoZXZlbnQudGltZSkpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlRpbWVsaW5lOiBldmVudHMgbXVzdCBoYXZlIGEgdGltZSBhdHRyaWJ1dGUnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZXZlbnQudGltZSA9IGV2ZW50LnRpbWUudmFsdWVPZigpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaChldmVudC50aW1lKTtcblx0ICAgICAgICB0aGlzLl90aW1lbGluZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBldmVudCk7XG5cdCAgICAgICAgLy9pZiB0aGUgbGVuZ3RoIGlzIG1vcmUgdGhhbiB0aGUgbWVtb3J5LCByZW1vdmUgdGhlIHByZXZpb3VzIG9uZXNcblx0ICAgICAgICBpZiAodGhpcy5sZW5ndGggPiB0aGlzLm1lbW9yeSkge1xuXHQgICAgICAgICAgICB2YXIgZGlmZiA9IHRoaXMubGVuZ3RoIC0gdGhpcy5tZW1vcnk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNwbGljZSgwLCBkaWZmKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCBvYmplY3QgdG8gcmVtb3ZlIGZyb20gdGhlIGxpc3QuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl90aW1lbGluZS5pbmRleE9mKGV2ZW50KTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIG5lYXJlc3QgZXZlbnQgd2hvc2UgdGltZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBjb21wYXJhdG9yIFdoaWNoIHZhbHVlIGluIHRoZSBvYmplY3QgdG8gY29tcGFyZVxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXZlbnQgb2JqZWN0IHNldCBhZnRlciB0aGF0IHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAodGltZSwgY29tcGFyYXRvcikge1xuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSwgY29tcGFyYXRvcik7XG5cdCAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXhdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBmaXJzdCBldmVudCBpbiB0aGUgdGltZWxpbmUgd2l0aG91dCByZW1vdmluZyBpdFxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZmlyc3QgZXZlbnQgb2JqZWN0XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5wZWVrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVswXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBmaXJzdCBldmVudCBpbiB0aGUgdGltZWxpbmUgYW5kIHJlbW92ZSBpdFxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZmlyc3QgZXZlbnQgb2JqZWN0XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmUuc2hpZnQoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBldmVudCB3aGljaCBpcyBzY2hlZHVsZWQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBjb21wYXJhdG9yIFdoaWNoIHZhbHVlIGluIHRoZSBvYmplY3QgdG8gY29tcGFyZVxuXHRcdCAqICBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXZlbnQgb2JqZWN0IGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5nZXRBZnRlciA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgY29tcGFyYXRvciA9IFRvbmUuZGVmYXVsdEFyZyhjb21wYXJhdG9yLCAndGltZScpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lLCBjb21wYXJhdG9yKTtcblx0ICAgICAgICBpZiAoaW5kZXggKyAxIDwgdGhpcy5fdGltZWxpbmUubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtpbmRleCArIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBldmVudCBiZWZvcmUgdGhlIGV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybnMge09iamVjdH0gVGhlIGV2ZW50IG9iamVjdCBiZWZvcmUgdGhlIGdpdmVuIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmdldEJlZm9yZSA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgY29tcGFyYXRvciA9IFRvbmUuZGVmYXVsdEFyZyhjb21wYXJhdG9yLCAndGltZScpO1xuXHQgICAgICAgIHZhciBsZW4gPSB0aGlzLl90aW1lbGluZS5sZW5ndGg7XG5cdCAgICAgICAgLy9pZiBpdCdzIGFmdGVyIHRoZSBsYXN0IGl0ZW0sIHJldHVybiB0aGUgbGFzdCBpdGVtXG5cdCAgICAgICAgaWYgKGxlbiA+IDAgJiYgdGhpcy5fdGltZWxpbmVbbGVuIC0gMV1bY29tcGFyYXRvcl0gPCB0aW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lbGluZVtsZW4gLSAxXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUsIGNvbXBhcmF0b3IpO1xuXHQgICAgICAgIGlmIChpbmRleCAtIDEgPj0gMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZWxpbmVbaW5kZXggLSAxXTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBldmVudHMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdGltZWxpbmUubGVuZ3RoID4gMSkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2goYWZ0ZXIpO1xuXHQgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW2luZGV4XS50aW1lID09PSBhZnRlcikge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vZ2V0IHRoZSBmaXJzdCBpdGVtIHdpdGggdGhhdCB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4OyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbaV0udGltZSA9PT0gYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gdGhpcy5fdGltZWxpbmUuc2xpY2UoMCwgaW5kZXgpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IHRoaXMuX3RpbWVsaW5lLnNsaWNlKDAsIGluZGV4ICsgMSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IFtdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90aW1lbGluZS5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICAgICAgLy90aGUgZmlyc3QgaXRlbSdzIHRpbWVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lWzBdLnRpbWUgPj0gYWZ0ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gW107XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBldmVudHMgYmVmb3JlIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lICBUaGUgdGltZSB0byBjYW5jZWwgYmVmb3JlLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuY2FuY2VsQmVmb3JlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKGluZGV4ID49IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZWxpbmUgPSB0aGlzLl90aW1lbGluZS5zbGljZShpbmRleCArIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBldmVudCBpZiB0aGVyZSBpcyBvbmUuIG51bGwgb3RoZXJ3aXNlXG5cdFx0ICogQHBhcmFtICB7T2JqZWN0fSBldmVudCBUaGUgZXZlbnQgdG8gZmluZCB0aGUgcHJldmlvdXMgb25lIG9mXG5cdFx0ICogQHJldHVybiB7T2JqZWN0fSAgICAgICBUaGUgZXZlbnQgcmlnaHQgYmVmb3JlIHRoZSBnaXZlbiBldmVudFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUucHJldmlvdXNFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3RpbWVsaW5lLmluZGV4T2YoZXZlbnQpO1xuXHQgICAgICAgIGlmIChpbmRleCA+IDApIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVsaW5lW2luZGV4IC0gMV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEb2VzIGEgYmluYXJ5IHNlYXJjaCBvbiB0aGUgdGltZWxpbmUgYXJyYXkgYW5kIHJldHVybnMgdGhlXG5cdFx0ICogIG5lYXJlc3QgZXZlbnQgaW5kZXggd2hvc2UgdGltZSBpcyBhZnRlciBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgSWYgYSB0aW1lIGlzIHNlYXJjaGVkIGJlZm9yZSB0aGUgZmlyc3QgaW5kZXggaW4gdGhlIHRpbWVsaW5lLCAtMSBpcyByZXR1cm5lZC5cblx0XHQgKiAgSWYgdGhlIHRpbWUgaXMgYWZ0ZXIgdGhlIGVuZCwgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGl0ZW0gaXMgcmV0dXJuZWQuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWVcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgY29tcGFyYXRvciBXaGljaCB2YWx1ZSBpbiB0aGUgb2JqZWN0IHRvIGNvbXBhcmVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gdGhlIGluZGV4IGluIHRoZSB0aW1lbGluZSBhcnJheVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuX3NlYXJjaCA9IGZ1bmN0aW9uICh0aW1lLCBjb21wYXJhdG9yKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gLTE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGNvbXBhcmF0b3IgPSBUb25lLmRlZmF1bHRBcmcoY29tcGFyYXRvciwgJ3RpbWUnKTtcblx0ICAgICAgICB2YXIgYmVnaW5uaW5nID0gMDtcblx0ICAgICAgICB2YXIgbGVuID0gdGhpcy5fdGltZWxpbmUubGVuZ3RoO1xuXHQgICAgICAgIHZhciBlbmQgPSBsZW47XG5cdCAgICAgICAgaWYgKGxlbiA+IDAgJiYgdGhpcy5fdGltZWxpbmVbbGVuIC0gMV1bY29tcGFyYXRvcl0gPD0gdGltZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbGVuIC0gMTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgd2hpbGUgKGJlZ2lubmluZyA8IGVuZCkge1xuXHQgICAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIG1pZHBvaW50IGZvciByb3VnaGx5IGVxdWFsIHBhcnRpdGlvblxuXHQgICAgICAgICAgICB2YXIgbWlkUG9pbnQgPSBNYXRoLmZsb29yKGJlZ2lubmluZyArIChlbmQgLSBiZWdpbm5pbmcpIC8gMik7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3RpbWVsaW5lW21pZFBvaW50XTtcblx0ICAgICAgICAgICAgdmFyIG5leHRFdmVudCA9IHRoaXMuX3RpbWVsaW5lW21pZFBvaW50ICsgMV07XG5cdCAgICAgICAgICAgIGlmIChldmVudFtjb21wYXJhdG9yXSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgLy9jaG9vc2UgdGhlIGxhc3Qgb25lIHRoYXQgaGFzIHRoZSBzYW1lIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBtaWRQb2ludDsgaSA8IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHRlc3RFdmVudCA9IHRoaXMuX3RpbWVsaW5lW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0RXZlbnRbY29tcGFyYXRvcl0gPT09IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgbWlkUG9pbnQgPSBpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBtaWRQb2ludDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFtjb21wYXJhdG9yXSA8IHRpbWUgJiYgbmV4dEV2ZW50W2NvbXBhcmF0b3JdID4gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG1pZFBvaW50O1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50W2NvbXBhcmF0b3JdID4gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgLy9zZWFyY2ggbG93ZXJcblx0ICAgICAgICAgICAgICAgIGVuZCA9IG1pZFBvaW50O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy9zZWFyY2ggdXBwZXJcblx0ICAgICAgICAgICAgICAgIGJlZ2lubmluZyA9IG1pZFBvaW50ICsgMTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gLTE7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGl0ZXJhdG9yLiBBcHBsaWVzIGV4dHJhIHNhZmV0eSBjaGVja3MgZm9yXG5cdFx0ICogIHJlbW92aW5nIGl0ZW1zIGZyb20gdGhlIGFycmF5LlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrXG5cdFx0ICogIEBwYXJhbSAge051bWJlcj19ICAgIGxvd2VyQm91bmRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyPX0gICAgdXBwZXJCb3VuZFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuX2l0ZXJhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGxvd2VyQm91bmQsIHVwcGVyQm91bmQpIHtcblx0ICAgICAgICBsb3dlckJvdW5kID0gVG9uZS5kZWZhdWx0QXJnKGxvd2VyQm91bmQsIDApO1xuXHQgICAgICAgIHVwcGVyQm91bmQgPSBUb25lLmRlZmF1bHRBcmcodXBwZXJCb3VuZCwgdGhpcy5fdGltZWxpbmUubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuc2xpY2UobG93ZXJCb3VuZCwgdXBwZXJCb3VuZCArIDEpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjayk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBhcnJheSBhdCBvciBiZWZvcmUgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQmVmb3JlID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKHVwcGVyQm91bmQgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIDAsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZS5wcm90b3R5cGUuZm9yRWFjaEFmdGVyID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIGxvd2VyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgbG93ZXJCb3VuZCArIDEpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYmV0d2VlbiB0aGUgc3RhcnRUaW1lIGFuZCBlbmRUaW1lLiBcblx0XHQgKiAgVGhlIHRpbWVyYW5nZSBpcyBpbmNsdXNpdmUgb2YgdGhlIHN0YXJ0VGltZSwgYnV0IGV4Y2x1c2l2ZSBvZiB0aGUgZW5kVGltZS4gXG5cdFx0ICogIHJhbmdlID0gW3N0YXJ0VGltZSwgZW5kVGltZSkuIFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBzdGFydFRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBlbmRUaW1lIFRoZSBlbmQgb2YgdGhlIHRlc3QgaW50ZXJ2YWwuIFxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQmV0d2VlbiA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdmFyIGxvd2VyQm91bmQgPSB0aGlzLl9zZWFyY2goc3RhcnRUaW1lKTtcblx0ICAgICAgICB2YXIgdXBwZXJCb3VuZCA9IHRoaXMuX3NlYXJjaChlbmRUaW1lKTtcblx0ICAgICAgICBpZiAobG93ZXJCb3VuZCAhPT0gLTEgJiYgdXBwZXJCb3VuZCAhPT0gLTEpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVsaW5lW2xvd2VyQm91bmRdLnRpbWUgIT09IHN0YXJ0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgbG93ZXJCb3VuZCArPSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vZXhjbHVzaXZlIG9mIHRoZSBlbmQgdGltZVxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdGltZWxpbmVbdXBwZXJCb3VuZF0udGltZSA9PT0gZW5kVGltZSkge1xuXHQgICAgICAgICAgICAgICAgdXBwZXJCb3VuZCAtPSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIGxvd2VyQm91bmQsIHVwcGVyQm91bmQpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAobG93ZXJCb3VuZCA9PT0gLTEpIHtcblx0ICAgICAgICAgICAgdGhpcy5faXRlcmF0ZShjYWxsYmFjaywgMCwgdXBwZXJCb3VuZCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgYXQgb3IgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuIFNpbWlsYXIgdG9cblx0XHQgKiAgZm9yRWFjaEFmdGVyLCBidXQgaW5jbHVkZXMgdGhlIGl0ZW0ocykgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoRnJvbSA9IGZ1bmN0aW9uICh0aW1lLCBjYWxsYmFjaykge1xuXHQgICAgICAgIC8vaXRlcmF0ZSBvdmVyIHRoZSBpdGVtcyBpbiByZXZlcnNlIHNvIHRoYXQgcmVtb3ZpbmcgYW4gaXRlbSBkb2Vzbid0IGJyZWFrIHRoaW5nc1xuXHQgICAgICAgIHZhciBsb3dlckJvdW5kID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIC8vd29yayBiYWNrd2FyZHMgdW50aWwgdGhlIGV2ZW50IHRpbWUgaXMgbGVzcyB0aGFuIHRpbWVcblx0ICAgICAgICB3aGlsZSAobG93ZXJCb3VuZCA+PSAwICYmIHRoaXMuX3RpbWVsaW5lW2xvd2VyQm91bmRdLnRpbWUgPj0gdGltZSkge1xuXHQgICAgICAgICAgICBsb3dlckJvdW5kLS07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2l0ZXJhdGUoY2FsbGJhY2ssIGxvd2VyQm91bmQgKyAxKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGFycmF5IGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIGJlZm9yZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2l0aCBldmVyeSBpdGVtXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9pdGVyYXRlIG92ZXIgdGhlIGl0ZW1zIGluIHJldmVyc2Ugc28gdGhhdCByZW1vdmluZyBhbiBpdGVtIGRvZXNuJ3QgYnJlYWsgdGhpbmdzXG5cdCAgICAgICAgdmFyIHVwcGVyQm91bmQgPSB0aGlzLl9zZWFyY2godGltZSk7XG5cdCAgICAgICAgaWYgKHVwcGVyQm91bmQgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGUoZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoZXZlbnQudGltZSA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LCAwLCB1cHBlckJvdW5kKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5UaW1lbGluZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UaW1lbGluZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCF3aW5kb3cuaGFzT3duUHJvcGVydHkoJ09mZmxpbmVBdWRpb0NvbnRleHQnKSAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ3dlYmtpdE9mZmxpbmVBdWRpb0NvbnRleHQnKSkge1xuXHQgICAgICAgICAgICB3aW5kb3cuT2ZmbGluZUF1ZGlvQ29udGV4dCA9IHdpbmRvdy53ZWJraXRPZmZsaW5lQXVkaW9Db250ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JldHVybnMgcHJvbWlzZT9cblx0ICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDEsIDEsIDQ0MTAwKTtcblx0ICAgICAgICB2YXIgcmV0ID0gY29udGV4dC5zdGFydFJlbmRlcmluZygpO1xuXHQgICAgICAgIGlmICghKHJldCBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG5cdCAgICAgICAgICAgIE9mZmxpbmVBdWRpb0NvbnRleHQucHJvdG90eXBlLl9uYXRpdmVfc3RhcnRSZW5kZXJpbmcgPSBPZmZsaW5lQXVkaW9Db250ZXh0LnByb3RvdHlwZS5zdGFydFJlbmRlcmluZztcblx0ICAgICAgICAgICAgT2ZmbGluZUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuc3RhcnRSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGRvbmUpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUucmVuZGVyZWRCdWZmZXIpO1xuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmF0aXZlX3N0YXJ0UmVuZGVyaW5nKCk7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCF3aW5kb3cuaGFzT3duUHJvcGVydHkoJ0F1ZGlvQ29udGV4dCcpICYmIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnd2Via2l0QXVkaW9Db250ZXh0JykpIHtcblx0ICAgICAgICAgICAgd2luZG93LkF1ZGlvQ29udGV4dCA9IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vbm90IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LCBidXQgb25seSBhbiBBUEkgcGxhY2Vob2xkZXJcblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY2xvc2UpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzRnVuY3Rpb24odGhpcy5zdXNwZW5kKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VzcGVuZCgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL25vdCBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudFxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5yZXN1bWUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY3JlYXRlR2FpblxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluICYmIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlR2Fpbk5vZGUpIHtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVHYWluTm9kZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9jcmVhdGVEZWxheVxuXHQgICAgICAgIGlmICghQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheSAmJiBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5Tm9kZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZURlbGF5ID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVEZWxheU5vZGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vdGVzdCBkZWNvZGVBdWRpb0RhdGEgcmV0dXJucyBhIHByb21pc2Vcblx0ICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9oYXlvbmFvL3dlYi1hdWRpby1hcGktc2hpbS9ibG9iL21hc3Rlci9zcmMvQXVkaW9Db250ZXh0LmpzXG5cdCAgICAgICAgLy8gTUlUIExpY2Vuc2UgKGMpIDIwMTUgQG1vaGF5b25hb1xuXHQgICAgICAgIHZhciBkZWNvZGVBdWRpb0RhdGFQcm9taXNlID0gZmFsc2U7XG5cdCAgICAgICAgdmFyIG9mZmxpbmVDb250ZXh0ID0gbmV3IE9mZmxpbmVBdWRpb0NvbnRleHQoMSwgMSwgNDQxMDApO1xuXHQgICAgICAgIHZhciBhdWRpb0RhdGEgPSBuZXcgVWludDMyQXJyYXkoW1xuXHQgICAgICAgICAgICAxMTc5MDExNDEwLFxuXHQgICAgICAgICAgICA0OCxcblx0ICAgICAgICAgICAgMTE2MzI4MDcyNyxcblx0ICAgICAgICAgICAgNTQ0NTAxMDk0LFxuXHQgICAgICAgICAgICAxNixcblx0ICAgICAgICAgICAgMTMxMDczLFxuXHQgICAgICAgICAgICA0NDEwMCxcblx0ICAgICAgICAgICAgMTc2NDAwLFxuXHQgICAgICAgICAgICAxMDQ4NTgwLFxuXHQgICAgICAgICAgICAxNjM1MDE3MDYwLFxuXHQgICAgICAgICAgICA4LFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwLFxuXHQgICAgICAgICAgICAwXG5cdCAgICAgICAgXSkuYnVmZmVyO1xuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgIHZhciByZXQgPSBvZmZsaW5lQ29udGV4dC5kZWNvZGVBdWRpb0RhdGEoYXVkaW9EYXRhKTtcblx0ICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0ICAgICAgICAgICAgICAgIGRlY29kZUF1ZGlvRGF0YVByb21pc2UgPSB0cnVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICBkZWNvZGVBdWRpb0RhdGFQcm9taXNlID0gZmFsc2U7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghZGVjb2RlQXVkaW9EYXRhUHJvbWlzZSkge1xuXHQgICAgICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLl9uYXRpdmVfZGVjb2RlQXVkaW9EYXRhID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5kZWNvZGVBdWRpb0RhdGE7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuZGVjb2RlQXVkaW9EYXRhID0gZnVuY3Rpb24gKGF1ZGlvRGF0YSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChzdWNjZXNzLCBlcnJvcikge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX25hdGl2ZV9kZWNvZGVBdWRpb0RhdGEoYXVkaW9EYXRhLCBzdWNjZXNzLCBlcnJvcik7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIEF1ZGlvQ29udGV4dC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW1pdHRlcn1cblx0XHQgKiAgQHBhcmFtIHtBdWRpb0NvbnRleHQ9fSBjb250ZXh0IG9wdGlvbmFsbHkgcGFzcyBpbiBhIGNvbnRleHRcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2NvbnRleHQnXSwgVG9uZS5Db250ZXh0KTtcblx0ICAgICAgICBpZiAoIW9wdGlvbnMuY29udGV4dCkge1xuXHQgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQgPSBuZXcgd2luZG93LkF1ZGlvQ29udGV4dCgpO1xuXHQgICAgICAgICAgICBpZiAoIW9wdGlvbnMuY29udGV4dCkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgY3JlYXRlIEF1ZGlvQ29udGV4dC4gUG9zc2libHkgdG9vIG1hbnkgQXVkaW9Db250ZXh0cyBydW5uaW5nIGFscmVhZHkuJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG9wdGlvbnMuY29udGV4dDtcblx0ICAgICAgICAvLyBleHRlbmQgYWxsIG9mIHRoZSBtZXRob2RzXG5cdCAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB0aGlzLl9jb250ZXh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlZmluZVByb3BlcnR5KHRoaXMuX2NvbnRleHQsIHByb3ApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVmYXVsdCBsYXRlbmN5IGhpbnRcblx0XHRcdCAqICBAdHlwZSAge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGF0ZW5jeUhpbnQgPSBvcHRpb25zLmxhdGVuY3lIaW50O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuIG9iamVjdCBjb250YWluaW5nIGFsbCBvZiB0aGUgY29uc3RhbnRzIEF1ZGlvQnVmZmVyU291cmNlTm9kZXNcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRzID0ge307XG5cdCAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAvLyBXT1JLRVJcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSBldmVudHMgYXJlIHNjaGVkdWxlZFxuXHRcdFx0ICogIGludG8gdGhlIGZ1dHVyZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb29rQWhlYWQgPSBvcHRpb25zLmxvb2tBaGVhZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHJlZmVyZW5jZSB0byB0aGUgYWN0dWFsIGNvbXB1dGVkIHVwZGF0ZSBpbnRlcnZhbFxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb21wdXRlZFVwZGF0ZUludGVydmFsID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHJlbGlhYmxlIGNhbGxiYWNrIG1ldGhvZFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtUaWNrZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aWNrZXIgPSBuZXcgVGlja2VyKHRoaXMuZW1pdC5iaW5kKHRoaXMsICd0aWNrJyksIG9wdGlvbnMuY2xvY2tTb3VyY2UsIG9wdGlvbnMudXBkYXRlSW50ZXJ2YWwpO1xuXHQgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgLy8gVElNRU9VVFNcblx0ICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgc2V0VGltZW91dCBldmVudHMuXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlRpbWVsaW5lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lb3V0cyA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRpbWVvdXQgaWQgY291bnRlclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRJZHMgPSAwO1xuXHQgICAgICAgIHRoaXMub24oJ3RpY2snLCB0aGlzLl90aW1lb3V0TG9vcC5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNvbnRleHQsIFRvbmUuRW1pdHRlcik7XG5cdCAgICBUb25lLkVtaXR0ZXIubWl4aW4oVG9uZS5Db250ZXh0KTtcblx0ICAgIC8qKlxuXHRcdCAqIGRlZmF1bHRzXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Nsb2NrU291cmNlJzogJ3dvcmtlcicsXG5cdCAgICAgICAgJ2xhdGVuY3lIaW50JzogJ2ludGVyYWN0aXZlJyxcblx0ICAgICAgICAnbG9va0FoZWFkJzogMC4xLFxuXHQgICAgICAgICd1cGRhdGVJbnRlcnZhbCc6IDAuMDNcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgRGVmaW5lIGEgcHJvcGVydHkgb24gdGhpcyBUb25lLkNvbnRleHQuXG5cdFx0ICogIFRoaXMgaXMgdXNlZCB0byBleHRlbmQgdGhlIG5hdGl2ZSBBdWRpb0NvbnRleHRcblx0XHQgKiAgQHBhcmFtICB7QXVkaW9Db250ZXh0fSAgY29udGV4dFxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBwcm9wXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLl9kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChjb250ZXh0LCBwcm9wKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aGlzW3Byb3BdKSkge1xuXHQgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcCwge1xuXHQgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0W3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdLmJpbmQoY29udGV4dCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRbcHJvcF07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbcHJvcF0gPSB2YWw7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgYXVkaW8gY29udGV4dCB0aW1lXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLm5vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dC5jdXJyZW50VGltZSArIHRoaXMubG9va0FoZWFkO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQcm9taXNlIHdoaWNoIGlzIGludm9rZWQgd2hlbiB0aGUgY29udGV4dCBpcyBydW5uaW5nLlxuXHRcdCAqICBUcmllcyB0byByZXN1bWUgdGhlIGNvbnRleHQgaWYgaXQncyBub3Qgc3RhcnRlZC5cblx0XHQgKiAgQHJldHVybiAge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLnJlYWR5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoZG9uZSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fY29udGV4dC5zdGF0ZSA9PT0gJ3J1bm5pbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBkb25lKCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LnJlc3VtZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUHJvbWlzZSB3aGljaCBpcyBpbnZva2VkIHdoZW4gdGhlIGNvbnRleHQgaXMgcnVubmluZy5cblx0XHQgKiAgVHJpZXMgdG8gcmVzdW1lIHRoZSBjb250ZXh0IGlmIGl0J3Mgbm90IHN0YXJ0ZWQuXG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dC5jbG9zZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBUb25lLkNvbnRleHQuZW1pdCgnY2xvc2UnLCB0aGlzKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZW5lcmF0ZSBhIGxvb3BlZCBidWZmZXIgYXQgc29tZSBjb25zdGFudCB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdmFsXG5cdFx0ICogIEByZXR1cm4gIHtCdWZmZXJTb3VyY2VOb2RlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5nZXRDb25zdGFudCA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAodGhpcy5fY29uc3RhbnRzW3ZhbF0pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN0YW50c1t2YWxdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLl9jb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCAxMjgsIHRoaXMuX2NvbnRleHQuc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgICAgIHZhciBhcnIgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBhcnJbaV0gPSB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIGNvbnN0YW50ID0gdGhpcy5fY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtcblx0ICAgICAgICAgICAgY29uc3RhbnQuY2hhbm5lbENvdW50ID0gMTtcblx0ICAgICAgICAgICAgY29uc3RhbnQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LmJ1ZmZlciA9IGJ1ZmZlcjtcblx0ICAgICAgICAgICAgY29uc3RhbnQubG9vcCA9IHRydWU7XG5cdCAgICAgICAgICAgIGNvbnN0YW50LnN0YXJ0KDApO1xuXHQgICAgICAgICAgICB0aGlzLl9jb25zdGFudHNbdmFsXSA9IGNvbnN0YW50O1xuXHQgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJpdmF0ZSBsb29wIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHRoZSBjb250ZXh0IHNjaGVkdWxlZCB0aW1lb3V0c1xuXHRcdCAqICBJcyBpbnZva2VkIGZyb20gdGhlIGNsb2NrIHNvdXJjZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5fdGltZW91dExvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgd2hpbGUgKHRoaXMuX3RpbWVvdXRzICYmIHRoaXMuX3RpbWVvdXRzLmxlbmd0aCAmJiB0aGlzLl90aW1lb3V0cy5wZWVrKCkudGltZSA8PSBub3cpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dHMuc2hpZnQoKS5jYWxsYmFjaygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQSBzZXRUaW1lb3V0IHdoaWNoIGlzIGdhdXJlbnRlZWQgYnkgdGhlIGNsb2NrIHNvdXJjZS5cblx0XHQgKiAgQWxzbyBydW5zIGluIHRoZSBvZmZsaW5lIGNvbnRleHQuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgZm4gICAgICAgVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdCAqICBAcGFyYW0gIHtTZWNvbmRzfSAgICB0aW1lb3V0ICBUaGUgdGltZW91dCBpbiBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm5zIHtOdW1iZXJ9IElEIHRvIHVzZSB3aGVuIGludm9raW5nIFRvbmUuQ29udGV4dC5jbGVhclRpbWVvdXRcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuc2V0VGltZW91dCA9IGZ1bmN0aW9uIChmbiwgdGltZW91dCkge1xuXHQgICAgICAgIHRoaXMuX3RpbWVvdXRJZHMrKztcblx0ICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0cy5hZGQoe1xuXHQgICAgICAgICAgICBjYWxsYmFjazogZm4sXG5cdCAgICAgICAgICAgIHRpbWU6IG5vdyArIHRpbWVvdXQsXG5cdCAgICAgICAgICAgIGlkOiB0aGlzLl90aW1lb3V0SWRzXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpbWVvdXRJZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFycyBhIHByZXZpb3VzbHkgc2NoZWR1bGVkIHRpbWVvdXQgd2l0aCBUb25lLmNvbnRleHQuc2V0VGltZW91dFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBpZCAgVGhlIElEIHJldHVybmVkIGZyb20gc2V0VGltZW91dFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Db250ZXh0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbiAoaWQpIHtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuaWQgPT09IGlkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShldmVudCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSG93IG9mdGVuIHRoZSBXZWIgV29ya2VyIGNhbGxiYWNrIGlzIGludm9rZWQuXG5cdFx0ICogIFRoaXMgbnVtYmVyIGNvcnJlc3BvbmRzIHRvIGhvdyByZXNwb25zaXZlIHRoZSBzY2hlZHVsaW5nXG5cdFx0ICogIGNhbiBiZS4gQ29udGV4dC51cGRhdGVJbnRlcnZhbCArIENvbnRleHQubG9va0FoZWFkIGdpdmVzIHlvdSB0aGVcblx0XHQgKiAgdG90YWwgbGF0ZW5jeSBiZXR3ZWVuIHNjaGVkdWxpbmcgYW4gZXZlbnQgYW5kIGhlYXJpbmcgaXQuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnRleHQjXG5cdFx0ICogIEBuYW1lIHVwZGF0ZUludGVydmFsXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db250ZXh0LnByb3RvdHlwZSwgJ3VwZGF0ZUludGVydmFsJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja2VyLnVwZGF0ZUludGVydmFsO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja2VyLnVwZGF0ZUludGVydmFsID0gaW50ZXJ2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgV2hhdCB0aGUgc291cmNlIG9mIHRoZSBjbG9jayBpcywgZWl0aGVyIFwid29ya2VyXCIgKFdlYiBXb3JrZXIgW2RlZmF1bHRdKSxcblx0XHQgKiAgXCJ0aW1lb3V0XCIgKHNldFRpbWVvdXQpLCBvciBcIm9mZmxpbmVcIiAobm9uZSkuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnRleHQjXG5cdFx0ICogIEBuYW1lIGNsb2NrU291cmNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Db250ZXh0LnByb3RvdHlwZSwgJ2Nsb2NrU291cmNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja2VyLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdHlwZSBvZiBwbGF5YmFjaywgd2hpY2ggYWZmZWN0cyB0cmFkZW9mZnMgYmV0d2VlbiBhdWRpb1xuXHRcdCAqICBvdXRwdXQgbGF0ZW5jeSBhbmQgcmVzcG9uc2l2ZW5lc3MuXG5cdFx0ICpcblx0XHQgKiAgSW4gYWRkaXRpb24gdG8gc2V0dGluZyB0aGUgdmFsdWUgaW4gc2Vjb25kcywgdGhlIGxhdGVuY3lIaW50IGFsc29cblx0XHQgKiAgYWNjZXB0cyB0aGUgc3RyaW5ncyBcImludGVyYWN0aXZlXCIgKHByaW9yaXRpemVzIGxvdyBsYXRlbmN5KSxcblx0XHQgKiAgXCJwbGF5YmFja1wiIChwcmlvcml0aXplcyBzdXN0YWluZWQgcGxheWJhY2spLCBcImJhbGFuY2VkXCIgKGJhbGFuY2VzXG5cdFx0ICogIGxhdGVuY3kgYW5kIHBlcmZvcm1hbmNlKSwgYW5kIFwiZmFzdGVzdFwiIChsb3dlc3QgbGF0ZW5jeSwgbWlnaHQgZ2xpdGNoIG1vcmUgb2Z0ZW4pLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfFNlY29uZHN9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNvbnRleHQjXG5cdFx0ICogIEBuYW1lIGxhdGVuY3lIaW50XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdGhlIGxvb2tBaGVhZCB0byAwLjMgc2Vjb25kc1xuXHRcdCAqIFRvbmUuY29udGV4dC5sYXRlbmN5SGludCA9IDAuMztcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNvbnRleHQucHJvdG90eXBlLCAnbGF0ZW5jeUhpbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sYXRlbmN5SGludDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGhpbnQpIHtcblx0ICAgICAgICAgICAgdmFyIGxvb2tBaGVhZCA9IGhpbnQ7XG5cdCAgICAgICAgICAgIHRoaXMuX2xhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNTdHJpbmcoaGludCkpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAoaGludCkge1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnaW50ZXJhY3RpdmUnOlxuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuMTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ3BsYXliYWNrJzpcblx0ICAgICAgICAgICAgICAgICAgICBsb29rQWhlYWQgPSAwLjg7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dC5sYXRlbmN5SGludCA9IGhpbnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdiYWxhbmNlZCc6XG5cdCAgICAgICAgICAgICAgICAgICAgbG9va0FoZWFkID0gMC4yNTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0LmxhdGVuY3lIaW50ID0gaGludDtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2Zhc3Rlc3QnOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubGF0ZW5jeUhpbnQgPSAnaW50ZXJhY3RpdmUnO1xuXHQgICAgICAgICAgICAgICAgICAgIGxvb2tBaGVhZCA9IDAuMDE7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlSW50ZXJ2YWwgPSBsb29rQWhlYWQgLyAzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFVubGlrZSBvdGhlciBkaXNwb3NlIG1ldGhvZHMsIHRoaXMgcmV0dXJucyBhIFByb21pc2Vcblx0XHQgKiAgd2hpY2ggZXhlY3V0ZXMgd2hlbiB0aGUgY29udGV4dCBpcyBjbG9zZWQgYW5kIGRpc3Bvc2VkXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnRleHQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgVG9uZS5FbWl0dGVyLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tlciA9IG51bGw7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRzLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dHMgPSBudWxsO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjb24gaW4gdGhpcy5fY29uc3RhbnRzKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jb25zdGFudHNbY29uXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRzID0gbnVsbDtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBBIGNsYXNzIHdoaWNoIHByb3ZpZGVzIGEgcmVsaWFibGUgY2FsbGJhY2sgdXNpbmcgZWl0aGVyXG5cdFx0ICogICAgICAgIGEgV2ViIFdvcmtlciwgb3IgaWYgdGhhdCBpc24ndCBzdXBwb3J0ZWQsIGZhbGxzIGJhY2sgdG8gc2V0VGltZW91dC5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgdmFyIFRpY2tlciA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdHlwZSwgdXBkYXRlSW50ZXJ2YWwpIHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEVpdGhlciBcIndvcmtlclwiIG9yIFwidGltZW91dFwiXG5cdFx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHVwZGF0ZSBpbnRlcnZhbCBvZiB0aGUgd29ya2VyXG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3VwZGF0ZUludGVydmFsID0gdXBkYXRlSW50ZXJ2YWw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBUb25lLmRlZmF1bHRBcmcoY2FsbGJhY2ssIFRvbmUubm9PcCk7XG5cdCAgICAgICAgLy9jcmVhdGUgdGhlIGNsb2NrIHNvdXJjZSBmb3IgdGhlIGZpcnN0IHRpbWVcblx0ICAgICAgICB0aGlzLl9jcmVhdGVDbG9jaygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwb3NzaWJsZSB0aWNrZXIgdHlwZXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUaWNrZXIuVHlwZSA9IHtcblx0ICAgICAgICBXb3JrZXI6ICd3b3JrZXInLFxuXHQgICAgICAgIFRpbWVvdXQ6ICd0aW1lb3V0Jyxcblx0ICAgICAgICBPZmZsaW5lOiAnb2ZmbGluZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2VuZXJhdGUgYSB3ZWIgd29ya2VyXG5cdFx0ICogIEByZXR1cm4gIHtXZWJXb3JrZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9VUkwgU2hpbVxuXHQgICAgICAgIHdpbmRvdy5VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG5cdCAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbLy90aGUgaW5pdGlhbCB0aW1lb3V0IHRpbWVcblx0ICAgICAgICAgICAgJ3ZhciB0aW1lb3V0VGltZSA9ICcgKyAodGhpcy5fdXBkYXRlSW50ZXJ2YWwgKiAxMDAwKS50b0ZpeGVkKDEpICsgJzsnICsgLy9vbm1lc3NhZ2UgY2FsbGJhY2tcblx0ICAgICAgICAgICAgJ3NlbGYub25tZXNzYWdlID0gZnVuY3Rpb24obXNnKXsnICsgJ1xcdHRpbWVvdXRUaW1lID0gcGFyc2VJbnQobXNnLmRhdGEpOycgKyAnfTsnICsgLy90aGUgdGljayBmdW5jdGlvbiB3aGljaCBwb3N0cyBhIG1lc3NhZ2Vcblx0ICAgICAgICAgICAgLy9hbmQgc2NoZWR1bGVzIGEgbmV3IHRpY2tcblx0ICAgICAgICAgICAgJ2Z1bmN0aW9uIHRpY2soKXsnICsgJ1xcdHNldFRpbWVvdXQodGljaywgdGltZW91dFRpbWUpOycgKyAnXFx0c2VsZi5wb3N0TWVzc2FnZShcXCd0aWNrXFwnKTsnICsgJ30nICsgLy9jYWxsIHRpY2sgaW5pdGlhbGx5XG5cdCAgICAgICAgICAgICd0aWNrKCk7J10pO1xuXHQgICAgICAgIHZhciBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0ICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcihibG9iVXJsKTtcblx0ICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gdGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93b3JrZXIgPSB3b3JrZXI7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ3JlYXRlIGEgdGltZW91dCBsb29wXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRpY2tlci5wcm90b3R5cGUuX2NyZWF0ZVRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jcmVhdGVUaW1lb3V0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpLCB0aGlzLl91cGRhdGVJbnRlcnZhbCAqIDEwMDApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENyZWF0ZSB0aGUgY2xvY2sgc291cmNlLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUaWNrZXIucHJvdG90eXBlLl9jcmVhdGVDbG9jayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVGlja2VyLlR5cGUuV29ya2VyKSB7XG5cdCAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVXb3JrZXIoKTtcblx0ICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgLy8gd29ya2VycyBub3Qgc3VwcG9ydGVkLCBmYWxsYmFjayB0byB0aW1lb3V0XG5cdCAgICAgICAgICAgICAgICB0aGlzLl90eXBlID0gVGlja2VyLlR5cGUuVGltZW91dDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNsb2NrKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRpY2tlci5UeXBlLlRpbWVvdXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGltZW91dCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAbWVtYmVyT2YgVGlja2VyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdXBkYXRlSW50ZXJ2YWxcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRpY2tlci5wcm90b3R5cGUsICd1cGRhdGVJbnRlcnZhbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZUludGVydmFsO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJ2YWwgPSBNYXRoLm1heChpbnRlcnZhbCwgMTI4IC8gNDQxMDApO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVGlja2VyLlR5cGUuV29ya2VyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93b3JrZXIucG9zdE1lc3NhZ2UoTWF0aC5tYXgoaW50ZXJ2YWwgKiAxMDAwLCAxKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSB0aWNrZXIsIGVpdGhlciBhIHdvcmtlciBvciBhIHRpbWVvdXRcblx0XHQgKiBAbWVtYmVyT2YgVGlja2VyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVGlja2VyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9kaXNwb3NlQ2xvY2soKTtcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNsb2NrKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cCB0aGUgY3VycmVudCBjbG9jayBzb3VyY2Vcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5fZGlzcG9zZUNsb2NrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl90aW1lb3V0KSB7XG5cdCAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLl93b3JrZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fd29ya2VyLnRlcm1pbmF0ZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl93b3JrZXIub25tZXNzYWdlID0gbnVsbDtcblx0ICAgICAgICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVGlja2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2Rpc3Bvc2VDbG9jaygpO1xuXHQgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2hpbSBhbGwgY29ubmVjdC9kaXNjb25uZWN0IGFuZCBzb21lIGRlcHJlY2F0ZWQgbWV0aG9kcyB3aGljaCBhcmUgc3RpbGwgaW5cblx0XHQgKiAgc29tZSBvbGRlciBpbXBsZW1lbnRhdGlvbnMuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLmdldENvbnRleHQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBuYXRpdmVDb25uZWN0ID0gQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0O1xuXHQgICAgICAgIHZhciBuYXRpdmVEaXNjb25uZWN0ID0gQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNjb25uZWN0O1xuXHQgICAgICAgIC8vcmVwbGFjZSB0aGUgb2xkIGNvbm5lY3QgbWV0aG9kXG5cdCAgICAgICAgZnVuY3Rpb24gdG9uZUNvbm5lY3QoQiwgb3V0TnVtLCBpbk51bSkge1xuXHQgICAgICAgICAgICBpZiAoQi5pbnB1dCkge1xuXHQgICAgICAgICAgICAgICAgaW5OdW0gPSBUb25lLmRlZmF1bHRBcmcoaW5OdW0sIDApO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheShCLmlucHV0KSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3QoQi5pbnB1dFtpbk51bV0pO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0KEIuaW5wdXQsIG91dE51bSwgaW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoQiBpbnN0YW5jZW9mIEF1ZGlvTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVDb25uZWN0LmNhbGwodGhpcywgQiwgb3V0TnVtLCBpbk51bSk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCO1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUNvbm5lY3QuY2FsbCh0aGlzLCBCLCBvdXROdW0pO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQjtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlcnJvciBjb25uZWN0aW5nIHRvIG5vZGU6ICcgKyBCICsgJ1xcbicgKyBlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JlcGxhY2UgdGhlIG9sZCBkaXNjb25uZWN0IG1ldGhvZFxuXHQgICAgICAgIGZ1bmN0aW9uIHRvbmVEaXNjb25uZWN0KEIsIG91dE51bSwgaW5OdW0pIHtcblx0ICAgICAgICAgICAgaWYgKEIgJiYgQi5pbnB1dCAmJiBUb25lLmlzQXJyYXkoQi5pbnB1dCkpIHtcblx0ICAgICAgICAgICAgICAgIGluTnVtID0gVG9uZS5kZWZhdWx0QXJnKGluTnVtLCAwKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdChCLmlucHV0W2luTnVtXSwgb3V0TnVtLCAwKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChCICYmIEIuaW5wdXQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdChCLmlucHV0LCBvdXROdW0sIGluTnVtKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGlzY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXJyb3IgZGlzY29ubmVjdGluZyBub2RlOiAnICsgQiArICdcXG4nICsgZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKEF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCAhPT0gdG9uZUNvbm5lY3QpIHtcblx0ICAgICAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0ID0gdG9uZUNvbm5lY3Q7XG5cdCAgICAgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IHRvbmVEaXNjb25uZWN0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy8gc2V0IHRoZSBhdWRpbyBjb250ZXh0IGluaXRpYWxseSwgYW5kIGlmIG9uZSBpcyBub3QgYWxyZWFkeSBjcmVhdGVkXG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQgJiYgIVRvbmUuaW5pdGlhbGl6ZWQpIHtcblx0ICAgICAgICBUb25lLmNvbnRleHQgPSBuZXcgVG9uZS5Db250ZXh0KCk7XG5cdCAgICAgICAgLy8gbG9nIG9uIGZpcnN0IGluaXRpYWxpemF0aW9uXG5cdCAgICAgICAgLy8gYWxsb3cgb3B0aW9uYWwgc2lsZW5jaW5nIG9mIHRoaXMgbG9nXG5cdCAgICAgICAgaWYgKCF3aW5kb3cuVE9ORV9TSUxFTkNFX1ZFUlNJT05fTE9HR0lORykge1xuXHQgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXHQgICAgICAgICAgICBjb25zb2xlLmxvZygnJWMgKiBUb25lLmpzICcgKyBUb25lLnZlcnNpb24gKyAnICogJywgJ2JhY2tncm91bmQ6ICMwMDA7IGNvbG9yOiAjZmZmJyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSBlbHNlIGlmICghVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuXHQgICAgICAgIGNvbnNvbGUud2FybignVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgVG9uZS5qcycpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIFRvbmUuQ29udGV4dDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkF1ZGlvTm9kZSBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY2xhc3NlcyB3aGljaCBwcm9jZXNzIGF1ZGlvLlxuXHRcdCAqICAgICAgICAgQXVkaW9Ob2RlcyBoYXZlIGlucHV0cyBhbmQgb3V0cHV0cy5cblx0XHQgKiAgQHBhcmFtXHR7QXVkaW9Db250ZXh0PX0gY29udGV4dFx0VGhlIGF1ZGlvIGNvbnRleHQgdG8gdXNlIHdpdGggdGhlIGNsYXNzXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8vdXNlIHRoZSBkZWZhdWx0IGNvbnRleHQgaWYgb25lIGlzIG5vdCBwYXNzZWQgaW5cblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2NvbnRleHQnXSwgeyAnY29udGV4dCc6IFRvbmUuY29udGV4dCB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBBdWRpb0NvbnRleHQgb2YgdGhpcyBpbnN0YW5jZVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtBdWRpb0NvbnRleHR9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0O1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgYXVkaW8gY29udGV4dCBiZWxvbmdpbmcgdG8gdGhpcyBpbnN0YW5jZS5cblx0XHQgKiBAdHlwZSB7VG9uZS5Db250ZXh0fVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiBAbmFtZSBjb250ZXh0XG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLCAnY29udGV4dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ3JlYXRlIGlucHV0IGFuZCBvdXRwdXRzIGZvciB0aGlzIG9iamVjdC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgW2lucHV0PTBdICAgVGhlIG51bWJlciBvZiBpbnB1dHNcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgW291dHB1dHM9MF0gIFRoZSBudW1iZXIgb2Ygb3V0cHV0c1xuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5BdWRpb05vZGV9ICB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY3JlYXRlSW5zT3V0cyA9IGZ1bmN0aW9uIChpbnB1dHMsIG91dHB1dHMpIHtcblx0ICAgICAgICBpZiAoaW5wdXRzID09PSAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRzID4gMSkge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0ID0gbmV3IEFycmF5KGlucHV0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChvdXRwdXRzID09PSAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKG91dHB1dHMgPiAxKSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0ID0gbmV3IEFycmF5KG91dHB1dHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2hhbm5lbENvdW50IGlzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdXNlZCB3aGVuIHVwLW1peGluZyBhbmQgZG93bi1taXhpbmdcblx0XHQgKiAgY29ubmVjdGlvbnMgdG8gYW55IGlucHV0cyB0byB0aGUgbm9kZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMiBleGNlcHQgZm9yXG5cdFx0ICogIHNwZWNpZmljIG5vZGVzIHdoZXJlIGl0cyB2YWx1ZSBpcyBzcGVjaWFsbHkgZGV0ZXJtaW5lZC5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIGNoYW5uZWxDb3VudFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUsICdjaGFubmVsQ291bnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnQgPSBjO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNoYW5uZWxDb3VudE1vZGUgZGV0ZXJtaW5lcyBob3cgY2hhbm5lbHMgd2lsbCBiZSBjb3VudGVkIHdoZW4gdXAtbWl4aW5nIGFuZFxuXHRcdCAqICBkb3duLW1peGluZyBjb25uZWN0aW9ucyB0byBhbnkgaW5wdXRzIHRvIHRoZSBub2RlLlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcIm1heFwiLiBUaGlzIGF0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0IGZvciBub2RlcyB3aXRoIG5vIGlucHV0cy5cblx0XHQgKiAgQG1lbWJlcm9mIFRvbmUuQXVkaW9Ob2RlI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSBjaGFubmVsQ291bnRNb2RlXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NoYW5uZWxDb3VudE1vZGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5jaGFubmVsQ291bnRNb2RlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5vdXRwdXQuY2hhbm5lbENvdW50TW9kZSA9IG07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2hhbm5lbEludGVycHJldGF0aW9uIGRldGVybWluZXMgaG93IGluZGl2aWR1YWwgY2hhbm5lbHMgd2lsbCBiZSB0cmVhdGVkXG5cdFx0ICogIHdoZW4gdXAtbWl4aW5nIGFuZCBkb3duLW1peGluZyBjb25uZWN0aW9ucyB0byBhbnkgaW5wdXRzIHRvIHRoZSBub2RlLlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcInNwZWFrZXJzXCIuXG5cdFx0ICogIEBtZW1iZXJvZiBUb25lLkF1ZGlvTm9kZSNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgY2hhbm5lbEludGVycHJldGF0aW9uXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ2NoYW5uZWxJbnRlcnByZXRhdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxJbnRlcnByZXRhdGlvbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0LmNoYW5uZWxJbnRlcnByZXRhdGlvbiA9IGk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpbnB1dHMgZmVlZGluZyBpbnRvIHRoZSBBdWRpb05vZGUuXG5cdFx0ICogIEZvciBzb3VyY2Ugbm9kZXMsIHRoaXMgd2lsbCBiZSAwLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBudW1iZXJPZklucHV0c1xuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ251bWJlck9mSW5wdXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbnB1dCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLmlucHV0KSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0Lmxlbmd0aDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2Ygb3V0cHV0cyBjb21pbmcgb3V0IG9mIHRoZSBBdWRpb05vZGUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIG51bWJlck9mT3V0cHV0c1xuXHRcdCAqICBAbWVtYmVyb2YgVG9uZS5BdWRpb05vZGUjXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZSwgJ251bWJlck9mT3V0cHV0cycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm91dHB1dC5sZW5ndGg7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENhbGxlZCB3aGVuIGFuIGF1ZGlvIHBhcmFtIGNvbm5lY3RzIHRvIHRoaXMgbm9kZVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuX29uQ29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0aGUgb3V0cHV0IG9mIGEgVG9uZU5vZGUgdG8gYW4gQXVkaW9QYXJhbSwgQXVkaW9Ob2RlLCBvciBUb25lTm9kZVxuXHRcdCAqICBAcGFyYW0gIHtUb25lIHwgQXVkaW9QYXJhbSB8IEF1ZGlvTm9kZX0gdW5pdFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bT0wXSBvcHRpb25hbGx5IHdoaWNoIG91dHB1dCB0byBjb25uZWN0IGZyb21cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtpbnB1dE51bT0wXSBvcHRpb25hbGx5IHdoaWNoIGlucHV0IHRvIGNvbm5lY3QgdG9cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICh1bml0LCBvdXRwdXROdW0sIGlucHV0TnVtKSB7XG5cdCAgICAgICAgaWYgKHVuaXQuX29uQ29ubmVjdCkge1xuXHQgICAgICAgICAgICB1bml0Ll9vbkNvbm5lY3QodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodGhpcy5vdXRwdXQpKSB7XG5cdCAgICAgICAgICAgIG91dHB1dE51bSA9IFRvbmUuZGVmYXVsdEFyZyhvdXRwdXROdW0sIDApO1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dFtvdXRwdXROdW1dLmNvbm5lY3QodW5pdCwgMCwgaW5wdXROdW0pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMub3V0cHV0LmNvbm5lY3QodW5pdCwgb3V0cHV0TnVtLCBpbnB1dE51bSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBkaXNjb25uZWN0IHRoZSBvdXRwdXRcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8QXVkaW9Ob2RlfSBvdXRwdXQgRWl0aGVyIHRoZSBvdXRwdXQgaW5kZXggdG8gZGlzY29ubmVjdFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgb3V0cHV0IGlzIGFuIGFycmF5LCBvciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSB0byBkaXNjb25uZWN0IGZyb20uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIG91dHB1dE51bSwgaW5wdXROdW0pIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KHRoaXMub3V0cHV0KSkge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc051bWJlcihkZXN0aW5hdGlvbikpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0W2Rlc3RpbmF0aW9uXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBvdXRwdXROdW0gPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TnVtLCAwKTtcblx0ICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0W291dHB1dE51bV0uZGlzY29ubmVjdChkZXN0aW5hdGlvbiwgMCwgaW5wdXROdW0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuZGlzY29ubmVjdC5hcHBseSh0aGlzLm91dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGlzIG5vZGUgdG8gdGhlIHJlc3Qgb2YgdGhlIG5vZGVzIGluIHNlcmllcy5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy9jb25uZWN0IGEgbm9kZSB0byBhbiBlZmZlY3QsIHBhblZvbCBhbmQgdGhlbiB0byB0aGUgbWFzdGVyIG91dHB1dFxuXHRcdCAqICBub2RlLmNoYWluKGVmZmVjdCwgcGFuVm9sLCBUb25lLk1hc3Rlcik7XG5cdFx0ICogIEBwYXJhbSB7Li4uQXVkaW9QYXJhbXxUb25lfEF1ZGlvTm9kZX0gbm9kZXNcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuY2hhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRVbml0ID0gdGhpcztcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgdG9Vbml0ID0gYXJndW1lbnRzW2ldO1xuXHQgICAgICAgICAgICBjdXJyZW50VW5pdC5jb25uZWN0KHRvVW5pdCk7XG5cdCAgICAgICAgICAgIGN1cnJlbnRVbml0ID0gdG9Vbml0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0aGUgb3V0cHV0IG9mIHRoaXMgbm9kZSB0byB0aGUgcmVzdCBvZiB0aGUgbm9kZXMgaW4gcGFyYWxsZWwuXG5cdFx0ICogIEBwYXJhbSB7Li4uQXVkaW9QYXJhbXxUb25lfEF1ZGlvTm9kZX0gbm9kZXNcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXVkaW9Ob2RlfSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZmFuID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29ubmVjdChhcmd1bWVudHNbaV0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICBpZiAod2luZG93LkF1ZGlvTm9kZSkge1xuXHQgICAgICAgIC8vZ2l2ZSBuYXRpdmUgbm9kZXMgY2hhaW4gYW5kIGZhbiBtZXRob2RzXG5cdCAgICAgICAgQXVkaW9Ob2RlLnByb3RvdHlwZS5jaGFpbiA9IFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jaGFpbjtcblx0ICAgICAgICBBdWRpb05vZGUucHJvdG90eXBlLmZhbiA9IFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5mYW47XG5cdCAgICB9XG5cdCAgICAvKipcblx0XHQgKiBEaXNwb3NlIGFuZCBkaXNjb25uZWN0XG5cdFx0ICogQHJldHVybiB7VG9uZS5BdWRpb05vZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh0aGlzLmlucHV0KSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbnB1dCBpbnN0YW5jZW9mIEF1ZGlvTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5pbnB1dCA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh0aGlzLm91dHB1dCkpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0IGluc3RhbmNlb2YgQXVkaW9Ob2RlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLm91dHB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jb250ZXh0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdWRpb05vZGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQmFzZSBjbGFzcyBmb3IgYWxsIFNpZ25hbHMuIFVzZWQgSW50ZXJuYWxseS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbEJhc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNpZ25hbEJhc2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBXaGVuIHNpZ25hbHMgY29ubmVjdCB0byBvdGhlciBzaWduYWxzIG9yIEF1ZGlvUGFyYW1zLFxuXHRcdCAqICB0aGV5IHRha2Ugb3ZlciB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoYXQgc2lnbmFsIG9yIEF1ZGlvUGFyYW0uXG5cdFx0ICogIEZvciBhbGwgb3RoZXIgbm9kZXMsIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBhIGRlZmF1bHQgPGNvZGU+Y29ubmVjdDwvY29kZT4uXG5cdFx0ICpcblx0XHQgKiAgQG92ZXJyaWRlXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9QYXJhbXxBdWRpb05vZGV8VG9uZS5TaWduYWx8VG9uZX0gbm9kZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE51bWJlcj0wXSBUaGUgb3V0cHV0IG51bWJlciB0byBjb25uZWN0IGZyb20uXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW1iZXI9MF0gVGhlIGlucHV0IG51bWJlciB0byBjb25uZWN0IHRvLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWxCYXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSwgb3V0cHV0TnVtYmVyLCBpbnB1dE51bWJlcikge1xuXHQgICAgICAgIC8vemVybyBpdCBvdXQgc28gdGhhdCB0aGUgc2lnbmFsIGNhbiBoYXZlIGZ1bGwgY29udHJvbFxuXHQgICAgICAgIGlmIChUb25lLlNpZ25hbCAmJiBUb25lLlNpZ25hbCA9PT0gbm9kZS5jb25zdHJ1Y3RvciB8fCBUb25lLlBhcmFtICYmIFRvbmUuUGFyYW0gPT09IG5vZGUuY29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgLy9jYW5jZWwgY2hhbmdlc1xuXHQgICAgICAgICAgICBub2RlLl9wYXJhbS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMoMCk7XG5cdCAgICAgICAgICAgIC8vcmVzZXQgdGhlIHZhbHVlXG5cdCAgICAgICAgICAgIG5vZGUuX3BhcmFtLnZhbHVlID0gMDtcblx0ICAgICAgICAgICAgLy9tYXJrIHRoZSB2YWx1ZSBhcyBvdmVycmlkZGVuXG5cdCAgICAgICAgICAgIG5vZGUub3ZlcnJpZGRlbiA9IHRydWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgQXVkaW9QYXJhbSkge1xuXHQgICAgICAgICAgICBub2RlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcygwKTtcblx0ICAgICAgICAgICAgbm9kZS52YWx1ZSA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5jb25uZWN0LmNhbGwodGhpcywgbm9kZSwgb3V0cHV0TnVtYmVyLCBpbnB1dE51bWJlcik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2lnbmFsQmFzZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgLy9maXhlcyBzYWZhcmkgb25seSBidWcgd2hpY2ggaXMgc3RpbGwgcHJlc2VudCBpbiAxMVxuXHQgICAgICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcblx0ICAgICAgICB2YXIgaXNTYWZhcmkgPSB1YS5pbmNsdWRlcygnc2FmYXJpJykgJiYgIXVhLmluY2x1ZGVzKCdjaHJvbWUnKTtcblx0ICAgICAgICBpZiAoaXNTYWZhcmkpIHtcblx0ICAgICAgICAgICAgdmFyIFdhdmVTaGFwZXJOb2RlID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTm9kZSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IGNvbnRleHQuX25hdGl2ZV9jcmVhdGVXYXZlU2hhcGVyKCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHRoaXMuX2ludGVybmFsTm9kZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmluZVByb3BlcnR5KHRoaXMuX2ludGVybmFsTm9kZSwgcHJvcCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXYXZlU2hhcGVyTm9kZS5wcm90b3R5cGUsICdjdXJ2ZScsIHtcblx0ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJ2ZTtcblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjdXJ2ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gY3VydmU7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShjdXJ2ZS5sZW5ndGggKyAxKTtcblx0ICAgICAgICAgICAgICAgICAgICBhcnJheS5zZXQoY3VydmUsIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgIGFycmF5WzBdID0gY3VydmVbMF07XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxOb2RlLmN1cnZlID0gYXJyYXk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBXYXZlU2hhcGVyTm9kZS5wcm90b3R5cGUuX2RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKGNvbnRleHQsIHByb3ApIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpc1twcm9wXSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcCwge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGV4dFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdLmJpbmQoY29udGV4dCk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0W3Byb3BdO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbcHJvcF0gPSB2YWw7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgQXVkaW9Db250ZXh0LnByb3RvdHlwZS5fbmF0aXZlX2NyZWF0ZVdhdmVTaGFwZXIgPSBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVdhdmVTaGFwZXI7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlV2F2ZVNoYXBlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV2F2ZVNoYXBlck5vZGUodGhpcyk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHMgdGhlIG5hdGl2ZSBXZWIgQXVkaW8gQVBJXG5cdFx0ICogICAgICAgICBbV2F2ZVNoYXBlck5vZGVdKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLXdhdmVzaGFwZXJub2RlLWludGVyZmFjZSkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb258QXJyYXl8TnVtYmVyfSBtYXBwaW5nIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGRlZmluZSB0aGUgdmFsdWVzLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1hcHBpbmcgZnVuY3Rpb24gc2hvdWxkIHRha2UgdHdvIGFyZ3VtZW50czpcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBpcyB0aGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBhcnJheSBwb3NpdGlvbi5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBhbiBhcnJheSwgdGhhdCBhcnJheSB3aWxsIGJlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgYXMgdGhlIHdhdmUgc2hhcGluZyBmdW5jdGlvbi4gVGhlIGlucHV0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwgaXMgYW4gQXVkaW9SYW5nZSBbLTEsIDFdIHZhbHVlIGFuZCB0aGUgb3V0cHV0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwgY2FuIHRha2Ugb24gYW55IG51bWVyaWNhbCB2YWx1ZXMuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IFtidWZmZXJMZW49MTAyNF0gVGhlIGxlbmd0aCBvZiB0aGUgV2F2ZVNoYXBlck5vZGUgYnVmZmVyLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciB0aW1lc1R3byA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24odmFsKXtcblx0XHQgKiBcdHJldHVybiB2YWwgKiAyO1xuXHRcdCAqIH0sIDIwNDgpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSB3YXZlc2hhcGVyIGNhbiBhbHNvIGJlIGNvbnN0cnVjdGVkIHdpdGggYW4gYXJyYXkgb2YgdmFsdWVzXG5cdFx0ICogdmFyIGludmVydCA9IG5ldyBUb25lLldhdmVTaGFwZXIoWzEsIC0xXSk7XG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVTaGFwZXIgPSBmdW5jdGlvbiAobWFwcGluZywgYnVmZmVyTGVuKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHdhdmVzaGFwZXJcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVXYXZlU2hhcGVyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHdhdmVzaGFwZXJzIGN1cnZlXG5cdFx0XHQgKiAgQHR5cGUge0Zsb2F0MzJBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3VydmUgPSBudWxsO1xuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hcHBpbmcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY3VydmUgPSBtYXBwaW5nO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoaXNGaW5pdGUobWFwcGluZykgfHwgVG9uZS5pc1VuZGVmKG1hcHBpbmcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gbmV3IEZsb2F0MzJBcnJheShUb25lLmRlZmF1bHRBcmcobWFwcGluZywgMTAyNCkpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc0Z1bmN0aW9uKG1hcHBpbmcpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2N1cnZlID0gbmV3IEZsb2F0MzJBcnJheShUb25lLmRlZmF1bHRBcmcoYnVmZmVyTGVuLCAxMDI0KSk7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0TWFwKG1hcHBpbmcpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLldhdmVTaGFwZXIsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVXNlcyBhIG1hcHBpbmcgZnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgY3VydmUuXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb259IG1hcHBpbmcgVGhlIGZ1bmN0aW9uIHVzZWQgdG8gZGVmaW5lIHRoZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1hcHBpbmcgZnVuY3Rpb24gdGFrZSB0d28gYXJndW1lbnRzOlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBpcyB0aGUgdmFsdWUgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBnb2VzIGZyb20gLTEgdG8gMSBvdmVyIHRoZSBudW1iZXIgb2YgZWxlbWVudHNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgY3VydmUgYXJyYXkuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGFycmF5IHBvc2l0aW9uLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5XYXZlU2hhcGVyfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9tYXAgdGhlIGlucHV0IHNpZ25hbCBmcm9tIFstMSwgMV0gdG8gWzAsIDEwXVxuXHRcdCAqIHNoYXBlci5zZXRNYXAoZnVuY3Rpb24odmFsLCBpbmRleCl7XG5cdFx0ICogXHRyZXR1cm4gKHZhbCArIDEpICogNTtcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZS5zZXRNYXAgPSBmdW5jdGlvbiAobWFwcGluZykge1xuXHQgICAgICAgIHZhciBhcnJheSA9IG5ldyBBcnJheSh0aGlzLl9jdXJ2ZS5sZW5ndGgpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLl9jdXJ2ZS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgbm9ybWFsaXplZCA9IGkgLyAobGVuIC0gMSkgKiAyIC0gMTtcblx0ICAgICAgICAgICAgYXJyYXlbaV0gPSBtYXBwaW5nKG5vcm1hbGl6ZWQsIGkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLmN1cnZlID0gYXJyYXk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGFycmF5IHRvIHNldCBhcyB0aGUgd2F2ZXNoYXBlciBjdXJ2ZS4gRm9yIGxpbmVhciBjdXJ2ZXNcblx0XHQgKiBhcnJheSBsZW5ndGggZG9lcyBub3QgbWFrZSBtdWNoIGRpZmZlcmVuY2UsIGJ1dCBmb3IgY29tcGxleCBjdXJ2ZXNcblx0XHQgKiBsb25nZXIgYXJyYXlzIHdpbGwgcHJvdmlkZSBzbW9vdGhlciBpbnRlcnBvbGF0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLldhdmVTaGFwZXIjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIGN1cnZlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZSwgJ2N1cnZlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLmN1cnZlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWFwcGluZykge1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJ2ZSA9IG5ldyBGbG9hdDMyQXJyYXkobWFwcGluZyk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5jdXJ2ZSA9IHRoaXMuX2N1cnZlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogU3BlY2lmaWVzIHdoYXQgdHlwZSBvZiBvdmVyc2FtcGxpbmcgKGlmIGFueSkgc2hvdWxkIGJlIHVzZWQgd2hlblxuXHRcdCAqIGFwcGx5aW5nIHRoZSBzaGFwaW5nIGN1cnZlLiBDYW4gZWl0aGVyIGJlIFwibm9uZVwiLCBcIjJ4XCIgb3IgXCI0eFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLldhdmVTaGFwZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSBvdmVyc2FtcGxlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZSwgJ292ZXJzYW1wbGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaGFwZXIub3ZlcnNhbXBsZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG92ZXJzYW1wbGluZykge1xuXHQgICAgICAgICAgICBpZiAoW1xuXHQgICAgICAgICAgICAgICAgICAgICdub25lJyxcblx0ICAgICAgICAgICAgICAgICAgICAnMngnLFxuXHQgICAgICAgICAgICAgICAgICAgICc0eCdcblx0ICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMob3ZlcnNhbXBsaW5nKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGUgPSBvdmVyc2FtcGxpbmc7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVG9uZS5XYXZlU2hhcGVyOiBvdmVyc2FtcGxpbmcgbXVzdCBiZSBlaXRoZXIgXFwnbm9uZVxcJywgXFwnMnhcXCcsIG9yIFxcJzR4XFwnJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuV2F2ZVNoYXBlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlU2hhcGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuV2F2ZVNoYXBlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRpbWVCYXNlIGlzIGEgZmxleGlibGUgZW5jb2Rpbmcgb2YgdGltZVxuXHRcdCAqICAgICAgICAgd2hpY2ggY2FuIGJlIGV2YWx1YXRlZCB0byBhbmQgZnJvbSBhIHN0cmluZy5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUgYXMgYSBudW1iZXIgb3Igc3RyaW5nXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVW5pdCB2YWx1ZXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRpbWVCYXNlKDQsIFwiblwiKVxuXHRcdCAqIFRvbmUuVGltZUJhc2UoMiwgXCJ0XCIpXG5cdFx0ICogVG9uZS5UaW1lQmFzZShcIjJ0XCIpXG5cdFx0ICogVG9uZS5UaW1lQmFzZShcIjJ0XCIpICsgVG9uZS5UaW1lQmFzZShcIjRuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgLy9hbGxvd3MgaXQgdG8gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0ICduZXcnXG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHZhbHVlXG5cdFx0XHRcdCAqICBAdHlwZSAge051bWJlcnxTdHJpbmd8VG9uZS5UaW1lQmFzZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWw7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBUaGUgdW5pdHNcblx0XHRcdFx0ICogQHR5cGUge1N0cmluZz99XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl91bml0cyA9IHVuaXRzO1xuXHQgICAgICAgICAgICAvL3Rlc3QgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbnVtYmVyXG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpcy5fdW5pdHMpICYmIFRvbmUuaXNTdHJpbmcodGhpcy5fdmFsKSAmJiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdCAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMuX3ZhbCkgPT0gdGhpcy5fdmFsICYmIHRoaXMuX3ZhbC5jaGFyQXQoMCkgIT09ICcrJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gcGFyc2VGbG9hdCh0aGlzLl92YWwpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB0aGlzLl9kZWZhdWx0VW5pdHM7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsICYmIHZhbC5jb25zdHJ1Y3RvciA9PT0gdGhpcy5jb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAgICAgLy9pZiB0aGV5J3JlIHRoZSBzYW1lIHR5cGUsIGp1c3QgY29weSB2YWx1ZXMgb3ZlclxuXHQgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLl92YWw7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl91bml0cyA9IHZhbC5fdW5pdHM7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9kZWZhdWx0VW5pdHMpIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b1NlY29uZHMoKTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ2knOlxuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbCA9IHZhbC50b1RpY2tzKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdoeic6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsID0gdmFsLnRvRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBjYXNlICdtaWRpJzpcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWwgPSB2YWwudG9NaWRpKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIGRlZmF1bHQgdW5pdHMgJyArIHRoaXMuX2RlZmF1bHRVbml0cyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZUJhc2UodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZUJhc2UpO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QUJTVFJBQ1QgU1lOVEFYIFRSRUUgUEFSU0VSXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBBbGwgdGhlIHByaW1hcnkgZXhwcmVzc2lvbnMuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2V4cHJlc3Npb25zID0ge1xuXHQgICAgICAgICduJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspbihcXC4/KSQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUsIGRvdCkge1xuXHQgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2NhbGFyID0gZG90ID09PSAnLicgPyAxLjUgOiAxO1xuXHQgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyh0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkpICogc2NhbGFyO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYmVhdHNUb1VuaXRzKDQgLyB2YWx1ZSkgKiBzY2FsYXI7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICd0Jzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspdCQvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyg4IC8gKHBhcnNlSW50KHZhbHVlKSAqIDMpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ20nOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyltJC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JlYXRzVG9Vbml0cyhwYXJzZUludCh2YWx1ZSkgKiB0aGlzLl9nZXRUaW1lU2lnbmF0dXJlKCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnaSc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKWkkL2ksXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGlja3NUb1VuaXRzKHBhcnNlSW50KHZhbHVlKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdoeic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KWh6JC9pLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyZXF1ZW5jeVRvVW5pdHMocGFyc2VGbG9hdCh2YWx1ZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndHInOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oXFxkKyg/OlxcLlxcZCspPyk6KFxcZCsoPzpcXC5cXGQrKT8pOj8oXFxkKyg/OlxcLlxcZCspPyk/JC8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKG0sIHEsIHMpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IDA7XG5cdCAgICAgICAgICAgICAgICBpZiAobSAmJiBtICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLl9iZWF0c1RvVW5pdHModGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpICogcGFyc2VGbG9hdChtKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAocSAmJiBxICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VGbG9hdChxKSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAocyAmJiBzICE9PSAnMCcpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSB0aGlzLl9iZWF0c1RvVW5pdHMocGFyc2VGbG9hdChzKSAvIDQpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAncyc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KXMkLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWNvbmRzVG9Vbml0cyhwYXJzZUZsb2F0KHZhbHVlKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdzYW1wbGVzJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCspc2FtcGxlcyQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKSAvIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnZGVmYXVsdCc6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KSQvLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cHJlc3Npb25zW3RoaXMuX2RlZmF1bHRVbml0c10ubWV0aG9kLmNhbGwodGhpcywgdmFsdWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB1bml0cyBpZiBub25lIGFyZSBnaXZlbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAncyc7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRUUkFOU1BPUlQgRkFMTEJBQ0tTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgYnBtLCBvciAxMjAgaWYgVHJhbnNwb3J0IGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZ2V0QnBtID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxMjA7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgdGltZVNpZ25hdHVyZSBvciA0IGlmIFRyYW5zcG9ydCBpcyBub3QgYXZhaWxhYmxlXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2dldFRpbWVTaWduYXR1cmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC50aW1lU2lnbmF0dXJlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiA0O1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm4gdGhlIFBQUSBvciAxOTIgaWYgVHJhbnNwb3J0IGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZ2V0UFBRID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQuUFBRO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiAxOTI7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgY3VycmVudCB0aW1lIGluIHdoaWNoZXZlciBjb250ZXh0IGlzIHJlbGV2YW50XG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX25vdyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5ub3coKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRVTklUIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIGZyZXF1ZW5jeSBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiAxIC8gZnJlcTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIDYwIC8gdGhpcy5fZ2V0QnBtKCkgKiBiZWF0cztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzZWNvbmQgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtTZWNvbmRzfSBzZWNvbmRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiBzZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiB0aWNrcyAqICh0aGlzLl9iZWF0c1RvVW5pdHMoMSkgLyB0aGlzLl9nZXRQUFEoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiAnbm93J1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUuX25vQXJnID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9ub3coKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRFWFBSRVNTSU9OU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgRXZhbHVhdGUgdGhlIHRpbWUgdmFsdWUuIFJldHVybnMgdGhlIHRpbWVcblx0XHQgKiAgaW4gc2Vjb25kcy5cblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYodGhpcy5fdmFsKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9BcmcoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcodGhpcy5fdmFsKSAmJiBUb25lLmlzVW5kZWYodGhpcy5fdW5pdHMpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIHVuaXRzIGluIHRoaXMuX2V4cHJlc3Npb25zKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbnNbdW5pdHNdLnJlZ2V4cC50ZXN0KHRoaXMuX3ZhbC50cmltKCkpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5pdHMgPSB1bml0cztcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQodGhpcy5fdW5pdHMpKSB7XG5cdCAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5fZXhwcmVzc2lvbnNbdGhpcy5fdW5pdHNdO1xuXHQgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSB0aGlzLl92YWwudG9TdHJpbmcoKS50cmltKCkubWF0Y2goZXhwci5yZWdleHApO1xuXHQgICAgICAgICAgICBpZiAobWF0Y2hpbmcpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBleHByLm1ldGhvZC5hcHBseSh0aGlzLCBtYXRjaGluZy5zbGljZSgxKSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZXhwci5tZXRob2QuY2FsbCh0aGlzLCBwYXJzZUZsb2F0KHRoaXMuX3ZhbCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBpbiBoZXJ0elxuXHRcdCAqICBAcmV0dXJuIHtGcmVxdWVuY3l9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gMSAvIHRoaXMudG9TZWNvbmRzKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiBzYW1wbGVzXG5cdFx0ICogIEByZXR1cm4gIHtTYW1wbGVzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lQmFzZS5wcm90b3R5cGUudG9TYW1wbGVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcygpICogdGhpcy5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBpbiBtaWxsaXNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtNaWxsaXNlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b01pbGxpc2Vjb25kcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy50b1NlY29uZHMoKSAqIDEwMDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuVGltZUJhc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fdmFsID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl91bml0cyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZUJhc2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GcmVxdWVuY3kgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgRnJlcXVlbmN5IHZhbHVlcy5cblx0XHQgKiAgICAgICAgIEV2ZW50dWFsbHkgYWxsIHRpbWUgdmFsdWVzIGFyZSBldmFsdWF0ZWQgdG8gaGVydHpcblx0XHQgKiAgICAgICAgIHVzaW5nIHRoZSBgZXZhbGAgbWV0aG9kLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZUJhc2V9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkMzXCIpIC8vIDI2MVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KDM4LCBcIm1pZGlcIikgLy9cblx0XHQgKiBUb25lLkZyZXF1ZW5jeShcIkMzXCIpLnRyYW5zcG9zZSg0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5ID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuRnJlcXVlbmN5KSB7XG5cdCAgICAgICAgICAgIFRvbmUuVGltZUJhc2UuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuRnJlcXVlbmN5KHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZyZXF1ZW5jeSwgVG9uZS5UaW1lQmFzZSk7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRBVUdNRU5UIEJBU0UgRVhQUkVTU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl9leHByZXNzaW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIFRvbmUuVGltZUJhc2UucHJvdG90eXBlLl9leHByZXNzaW9ucywge1xuXHQgICAgICAgICdtaWRpJzoge1xuXHQgICAgICAgICAgICByZWdleHA6IC9eKFxcZCsoPzpcXC5cXGQrKT9taWRpKS8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVsdFVuaXRzID09PSAnbWlkaScpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5tdG9mKHZhbHVlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ25vdGUnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL14oW2EtZ117MX0oPzpifCN8eHxiYik/KSgtP1swLTldKykvaSxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAocGl0Y2gsIG9jdGF2ZSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gbm90ZVRvU2NhbGVJbmRleFtwaXRjaC50b0xvd2VyQ2FzZSgpXTtcblx0ICAgICAgICAgICAgICAgIHZhciBub3RlTnVtYmVyID0gaW5kZXggKyAocGFyc2VJbnQob2N0YXZlKSArIDEpICogMTI7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVsdFVuaXRzID09PSAnbWlkaScpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm90ZU51bWJlcjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5Lm10b2Yobm90ZU51bWJlcik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICd0cic6IHtcblx0ICAgICAgICAgICAgcmVnZXhwOiAvXihcXGQrKD86XFwuXFxkKyk/KTooXFxkKyg/OlxcLlxcZCspPyk6PyhcXGQrKD86XFwuXFxkKyk/KT8vLFxuXHQgICAgICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uIChtLCBxLCBzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAxO1xuXHQgICAgICAgICAgICAgICAgaWYgKG0gJiYgbSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKj0gdGhpcy5fYmVhdHNUb1VuaXRzKHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKSAqIHBhcnNlRmxvYXQobSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHEgJiYgcSAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKj0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocSkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgaWYgKHMgJiYgcyAhPT0gJzAnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdG90YWwgKj0gdGhpcy5fYmVhdHNUb1VuaXRzKHBhcnNlRmxvYXQocykgLyA0KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0RVhQUkVTU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFRyYW5zcG9zZXMgdGhlIGZyZXF1ZW5jeSBieSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlbWl0b25lcy5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWx9ICBpbnRlcnZhbFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5GcmVxdWVuY3l9IEEgbmV3IHRyYW5zcG9zZWQgZnJlcXVlbmN5XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJBNFwiKS50cmFuc3Bvc2UoMyk7IC8vXCJDNVwiXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudHJhbnNwb3NlID0gZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMudmFsdWVPZigpICogVG9uZS5pbnRlcnZhbFRvRnJlcXVlbmN5UmF0aW8oaW50ZXJ2YWwpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGFrZXMgYW4gYXJyYXkgb2Ygc2VtaXRvbmUgaW50ZXJ2YWxzIGFuZCByZXR1cm5zXG5cdFx0ICogIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzIHRyYW5zcG9zZWQgYnkgdGhvc2UgaW50ZXJ2YWxzLlxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIGludGVydmFsc1xuXHRcdCAqICBAcmV0dXJuICB7QXJyYXk8VG9uZS5GcmVxdWVuY3k+fSBSZXR1cm5zIGFuIGFycmF5IG9mIEZyZXF1ZW5jaWVzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJBNFwiKS5oYXJtb25pemUoWzAsIDMsIDddKTsgLy9bXCJBNFwiLCBcIkM1XCIsIFwiRTVcIl1cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5oYXJtb25pemUgPSBmdW5jdGlvbiAoaW50ZXJ2YWxzKSB7XG5cdCAgICAgICAgcmV0dXJuIGludGVydmFscy5tYXAoZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9zZShpbnRlcnZhbCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRVTklUIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgYXMgYSBNSURJIG5vdGVcblx0XHQgKiAgQHJldHVybiAge01JREl9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3koXCJDNFwiKS50b01pZGkoKTsgLy82MFxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvTWlkaSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbSh0aGlzLnZhbHVlT2YoKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBpbiBTY2llbnRpZmljIFBpdGNoIE5vdGF0aW9uXG5cdFx0ICogIEByZXR1cm4gIHtOb3RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KDY5LCBcIm1pZGlcIikudG9Ob3RlKCk7IC8vXCJBNFwiXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9Ob3RlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBmcmVxID0gdGhpcy50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHZhciBsb2cgPSBNYXRoLmxvZzIoZnJlcSAvIFRvbmUuRnJlcXVlbmN5LkE0KTtcblx0ICAgICAgICB2YXIgbm90ZU51bWJlciA9IE1hdGgucm91bmQoMTIgKiBsb2cpICsgNTc7XG5cdCAgICAgICAgdmFyIG9jdGF2ZSA9IE1hdGguZmxvb3Iobm90ZU51bWJlciAvIDEyKTtcblx0ICAgICAgICBpZiAob2N0YXZlIDwgMCkge1xuXHQgICAgICAgICAgICBub3RlTnVtYmVyICs9IC0xMiAqIG9jdGF2ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIG5vdGVOYW1lID0gc2NhbGVJbmRleFRvTm90ZVtub3RlTnVtYmVyICUgMTJdO1xuXHQgICAgICAgIHJldHVybiBub3RlTmFtZSArIG9jdGF2ZS50b1N0cmluZygpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGR1cmF0aW9uIG9mIG9uZSBjeWNsZSBpbiBzZWNvbmRzLlxuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc31cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b1NlY29uZHMuY2FsbCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBpbiBIZXJ0elxuXHRcdCAqICBAcmV0dXJuICB7RnJlcXVlbmN5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS50b0ZyZXF1ZW5jeS5jYWxsKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGR1cmF0aW9uIG9mIG9uZSBjeWNsZSBpbiB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcXVhcnRlclRpbWUgPSB0aGlzLl9iZWF0c1RvVW5pdHMoMSk7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJzID0gdGhpcy52YWx1ZU9mKCkgLyBxdWFydGVyVGltZTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihxdWFydGVycyAqIFRvbmUuVHJhbnNwb3J0LlBQUSk7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VU5JVCBDT05WRVJTSU9OUyBIRUxQRVJTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBXaXRoIG5vIGFyZ3VtZW50cywgcmV0dXJuIDBcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fbm9BcmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgZnJlcXVlbmN5IGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiBmcmVxO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kucHJvdG90eXBlLl90aWNrc1RvVW5pdHMgPSBmdW5jdGlvbiAodGlja3MpIHtcblx0ICAgICAgICByZXR1cm4gMSAvICh0aWNrcyAqIDYwIC8gKFRvbmUuVHJhbnNwb3J0LmJwbS52YWx1ZSAqIFRvbmUuVHJhbnNwb3J0LlBQUSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBiZWF0cyBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gYmVhdHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzLmNhbGwodGhpcywgYmVhdHMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHNlY29uZCBpbiB0aGUgY3VycmVudCB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1NlY29uZHN9IHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiAxIC8gc2Vjb25kcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2RlZmF1bHRVbml0cyA9ICdoeic7XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRGUkVRVUVOQ1kgQ09OVkVSU0lPTlNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIE5vdGUgdG8gc2NhbGUgaW5kZXhcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICB2YXIgbm90ZVRvU2NhbGVJbmRleCA9IHtcblx0ICAgICAgICAnY2JiJzogLTIsXG5cdCAgICAgICAgJ2NiJzogLTEsXG5cdCAgICAgICAgJ2MnOiAwLFxuXHQgICAgICAgICdjIyc6IDEsXG5cdCAgICAgICAgJ2N4JzogMixcblx0ICAgICAgICAnZGJiJzogMCxcblx0ICAgICAgICAnZGInOiAxLFxuXHQgICAgICAgICdkJzogMixcblx0ICAgICAgICAnZCMnOiAzLFxuXHQgICAgICAgICdkeCc6IDQsXG5cdCAgICAgICAgJ2ViYic6IDIsXG5cdCAgICAgICAgJ2ViJzogMyxcblx0ICAgICAgICAnZSc6IDQsXG5cdCAgICAgICAgJ2UjJzogNSxcblx0ICAgICAgICAnZXgnOiA2LFxuXHQgICAgICAgICdmYmInOiAzLFxuXHQgICAgICAgICdmYic6IDQsXG5cdCAgICAgICAgJ2YnOiA1LFxuXHQgICAgICAgICdmIyc6IDYsXG5cdCAgICAgICAgJ2Z4JzogNyxcblx0ICAgICAgICAnZ2JiJzogNSxcblx0ICAgICAgICAnZ2InOiA2LFxuXHQgICAgICAgICdnJzogNyxcblx0ICAgICAgICAnZyMnOiA4LFxuXHQgICAgICAgICdneCc6IDksXG5cdCAgICAgICAgJ2FiYic6IDcsXG5cdCAgICAgICAgJ2FiJzogOCxcblx0ICAgICAgICAnYSc6IDksXG5cdCAgICAgICAgJ2EjJzogMTAsXG5cdCAgICAgICAgJ2F4JzogMTEsXG5cdCAgICAgICAgJ2JiYic6IDksXG5cdCAgICAgICAgJ2JiJzogMTAsXG5cdCAgICAgICAgJ2InOiAxMSxcblx0ICAgICAgICAnYiMnOiAxMixcblx0ICAgICAgICAnYngnOiAxM1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzY2FsZSBpbmRleCB0byBub3RlIChzaGFycHMpXG5cdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgc2NhbGVJbmRleFRvTm90ZSA9IFtcblx0ICAgICAgICAnQycsXG5cdCAgICAgICAgJ0MjJyxcblx0ICAgICAgICAnRCcsXG5cdCAgICAgICAgJ0QjJyxcblx0ICAgICAgICAnRScsXG5cdCAgICAgICAgJ0YnLFxuXHQgICAgICAgICdGIycsXG5cdCAgICAgICAgJ0cnLFxuXHQgICAgICAgICdHIycsXG5cdCAgICAgICAgJ0EnLFxuXHQgICAgICAgICdBIycsXG5cdCAgICAgICAgJ0InXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBbY29uY2VydCBwaXRjaF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29uY2VydF9waXRjaClcblx0XHQgKiAgQTQncyB2YWx1ZXMgaW4gSGVydHouXG5cdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5LkE0ID0gNDQwO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgYSBNSURJIG5vdGUgdG8gZnJlcXVlbmN5IHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtNSURJfSBtaWRpIFRoZSBtaWRpIG51bWJlciB0byBjb252ZXJ0LlxuXHRcdCAqICBAcmV0dXJuIHtGcmVxdWVuY3l9IHRoZSBjb3JyZXNwb25kaW5nIGZyZXF1ZW5jeSB2YWx1ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5GcmVxdWVuY3kubXRvZig2OSk7IC8vIHJldHVybnMgNDQwXG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeS5tdG9mID0gZnVuY3Rpb24gKG1pZGkpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuQTQgKiBNYXRoLnBvdygyLCAobWlkaSAtIDY5KSAvIDEyKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIGZyZXF1ZW5jeSB2YWx1ZSB0byBhIE1JREkgbm90ZS5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgdmFsdWUgdG8gZnJlcXVlbmN5IHZhbHVlIHRvIGNvbnZlcnQuXG5cdFx0ICogIEByZXR1cm5zICB7TUlESX1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5LmZ0b20oNDQwKTsgLy8gcmV0dXJucyA2OVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3kuZnRvbSA9IGZ1bmN0aW9uIChmcmVxdWVuY3kpIHtcblx0ICAgICAgICByZXR1cm4gNjkgKyBNYXRoLnJvdW5kKDEyICogTWF0aC5sb2cyKGZyZXF1ZW5jeSAvIFRvbmUuRnJlcXVlbmN5LkE0KSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVGltZSBpcyBhIHByaW1pdGl2ZSB0eXBlIGZvciBlbmNvZGluZyBUaW1lIHZhbHVlcy5cblx0XHQgKiAgICAgICAgIFRvbmUuVGltZSBjYW4gYmUgY29uc3RydWN0ZWQgd2l0aCBvciB3aXRob3V0IHRoZSBgbmV3YCBrZXl3b3JkLiBUb25lLlRpbWUgY2FuIGJlIHBhc3NlZFxuXHRcdCAqICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIG9mIGFueSBtZXRob2Qgd2hpY2ggdGFrZXMgdGltZSBhcyBhbiBhcmd1bWVudC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRpbWVCYXNlfVxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgdmFsICAgIFRoZSB0aW1lIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmc9fSAgdW5pdHMgIFRoZSB1bml0cyBvZiB0aGUgdmFsdWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHQgPSBUb25lLlRpbWUoXCI0blwiKTsvL2EgcXVhcnRlciBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUgPSBmdW5jdGlvbiAodmFsLCB1bml0cykge1xuXHQgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgVG9uZS5UaW1lKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVGltZUJhc2UuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaW1lLCBUb25lLlRpbWVCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIEV4dGVuZCB0aGUgYmFzZSBleHByZXNzaW9uc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBUb25lLlRpbWVCYXNlLnByb3RvdHlwZS5fZXhwcmVzc2lvbnMsIHtcblx0ICAgICAgICAncXVhbnRpemUnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL15AKC4rKS8sXG5cdCAgICAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKGNhcHR1cmUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBxdWFudFRvID0gbmV3IHRoaXMuY29uc3RydWN0b3IoY2FwdHVyZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0Lm5leHRTdWJkaXZpc2lvbihxdWFudFRvKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgICdub3cnOiB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogL15cXCsoLispLyxcblx0ICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAoY2FwdHVyZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdygpICsgbmV3IHRoaXMuY29uc3RydWN0b3IoY2FwdHVyZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBRdWFudGl6ZSB0aGUgdGltZSBieSB0aGUgZ2l2ZW4gc3ViZGl2aXNpb24uIE9wdGlvbmFsbHkgYWRkIGFcblx0XHQgKiAgcGVyY2VudGFnZSB3aGljaCB3aWxsIG1vdmUgdGhlIHRpbWUgdmFsdWUgdG93YXJkcyB0aGUgaWRlYWxcblx0XHQgKiAgcXVhbnRpemVkIHZhbHVlIGJ5IHRoYXQgcGVyY2VudGFnZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfFRpbWV9ICB2YWwgICAgVGhlIHN1YmRpdmlzaW9uIHRvIHF1YW50aXplIHRvXG5cdFx0ICogIEBwYXJhbSAge05vcm1hbFJhbmdlfSAgW3BlcmNlbnQ9MV0gIE1vdmUgdGhlIHRpbWUgdmFsdWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG93YXJkcyB0aGUgcXVhbnRpemVkIHZhbHVlIGJ5XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcGVyY2VudGFnZS5cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRpbWUoMjEpLnF1YW50aXplKDIpIC8vcmV0dXJucyAyMlxuXHRcdCAqIFRvbmUuVGltZSgwLjYpLnF1YW50aXplKFwiNG5cIiwgMC41KSAvL3JldHVybnMgMC41NVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS5xdWFudGl6ZSA9IGZ1bmN0aW9uIChzdWJkaXYsIHBlcmNlbnQpIHtcblx0ICAgICAgICBwZXJjZW50ID0gVG9uZS5kZWZhdWx0QXJnKHBlcmNlbnQsIDEpO1xuXHQgICAgICAgIHZhciBzdWJkaXZpc2lvbiA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHN1YmRpdik7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICAgICAgdmFyIG11bHRpcGxlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHN1YmRpdmlzaW9uKTtcblx0ICAgICAgICB2YXIgaWRlYWwgPSBtdWx0aXBsZSAqIHN1YmRpdmlzaW9uO1xuXHQgICAgICAgIHZhciBkaWZmID0gaWRlYWwgLSB2YWx1ZTtcblx0ICAgICAgICByZXR1cm4gdmFsdWUgKyBkaWZmICogcGVyY2VudDtcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIENPTlZFUlNJT05TXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IGEgVGltZSB0byBOb3RhdGlvbi4gVGhlIG5vdGF0aW9uIHZhbHVlcyBhcmUgd2lsbCBiZSB0aGVcblx0XHQgKiAgY2xvc2VzdCByZXByZXNlbnRhdGlvbiBiZXR3ZWVuIDFtIHRvIDEyOHRoIG5vdGUuXG5cdFx0ICogIEByZXR1cm4ge05vdGF0aW9ufVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vaWYgdGhlIFRyYW5zcG9ydCBpcyBhdCAxMjBicG06XG5cdFx0ICogVG9uZS5UaW1lKDIpLnRvTm90YXRpb24oKTsvL3JldHVybnMgXCIxbVwiXG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvTm90YXRpb24gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHRpbWUgPSB0aGlzLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIHZhciB0ZXN0Tm90YXRpb25zID0gWycxbSddO1xuXHQgICAgICAgIGZvciAodmFyIHBvd2VyID0gMTsgcG93ZXIgPCA4OyBwb3dlcisrKSB7XG5cdCAgICAgICAgICAgIHZhciBzdWJkaXYgPSBNYXRoLnBvdygyLCBwb3dlcik7XG5cdCAgICAgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaChzdWJkaXYgKyAnbi4nKTtcblx0ICAgICAgICAgICAgdGVzdE5vdGF0aW9ucy5wdXNoKHN1YmRpdiArICduJyk7XG5cdCAgICAgICAgICAgIHRlc3ROb3RhdGlvbnMucHVzaChzdWJkaXYgKyAndCcpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0ZXN0Tm90YXRpb25zLnB1c2goJzAnKTtcblx0ICAgICAgICAvL2ZpbmQgdGhlIGNsb3NldHMgbm90YXRpb24gcmVwcmVzZW50YXRpb25cblx0ICAgICAgICB2YXIgY2xvc2VzdCA9IHRlc3ROb3RhdGlvbnNbMF07XG5cdCAgICAgICAgdmFyIGNsb3Nlc3RTZWNvbmRzID0gVG9uZS5UaW1lKHRlc3ROb3RhdGlvbnNbMF0pLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIHRlc3ROb3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobm90YXRpb24pIHtcblx0ICAgICAgICAgICAgdmFyIG5vdGF0aW9uU2Vjb25kcyA9IFRvbmUuVGltZShub3RhdGlvbikudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyhub3RhdGlvblNlY29uZHMgLSB0aW1lKSA8IE1hdGguYWJzKGNsb3Nlc3RTZWNvbmRzIC0gdGltZSkpIHtcblx0ICAgICAgICAgICAgICAgIGNsb3Nlc3QgPSBub3RhdGlvbjtcblx0ICAgICAgICAgICAgICAgIGNsb3Nlc3RTZWNvbmRzID0gbm90YXRpb25TZWNvbmRzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIGNsb3Nlc3Q7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdGltZSBlbmNvZGVkIGFzIEJhcnM6QmVhdHM6U2l4dGVlbnRocy5cblx0XHQgKiAgQHJldHVybiAge0JhcnNCZWF0c1NpeHRlZW50aHN9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWUucHJvdG90eXBlLnRvQmFyc0JlYXRzU2l4dGVlbnRocyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcXVhcnRlclRpbWUgPSB0aGlzLl9iZWF0c1RvVW5pdHMoMSk7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJzID0gdGhpcy52YWx1ZU9mKCkgLyBxdWFydGVyVGltZTtcblx0ICAgICAgICB2YXIgbWVhc3VyZXMgPSBNYXRoLmZsb29yKHF1YXJ0ZXJzIC8gdGhpcy5fZ2V0VGltZVNpZ25hdHVyZSgpKTtcblx0ICAgICAgICB2YXIgc2l4dGVlbnRocyA9IHF1YXJ0ZXJzICUgMSAqIDQ7XG5cdCAgICAgICAgcXVhcnRlcnMgPSBNYXRoLmZsb29yKHF1YXJ0ZXJzKSAlIHRoaXMuX2dldFRpbWVTaWduYXR1cmUoKTtcblx0ICAgICAgICBzaXh0ZWVudGhzID0gc2l4dGVlbnRocy50b1N0cmluZygpO1xuXHQgICAgICAgIGlmIChzaXh0ZWVudGhzLmxlbmd0aCA+IDMpIHtcblx0ICAgICAgICAgICAgLy8gdGhlIGFkZGl0aW9uYWwgcGFyc2VGbG9hdCByZW1vdmVzIGluc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb2VzXG5cdCAgICAgICAgICAgIHNpeHRlZW50aHMgPSBwYXJzZUZsb2F0KHBhcnNlRmxvYXQoc2l4dGVlbnRocykudG9GaXhlZCgzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciBwcm9ncmVzcyA9IFtcblx0ICAgICAgICAgICAgbWVhc3VyZXMsXG5cdCAgICAgICAgICAgIHF1YXJ0ZXJzLFxuXHQgICAgICAgICAgICBzaXh0ZWVudGhzXG5cdCAgICAgICAgXTtcblx0ICAgICAgICByZXR1cm4gcHJvZ3Jlc3Muam9pbignOicpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gdGlja3MuXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9UaWNrcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgcXVhcnRlclRpbWUgPSB0aGlzLl9iZWF0c1RvVW5pdHMoMSk7XG5cdCAgICAgICAgdmFyIHF1YXJ0ZXJzID0gdGhpcy52YWx1ZU9mKCkgLyBxdWFydGVyVGltZTtcblx0ICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChxdWFydGVycyAqIHRoaXMuX2dldFBQUSgpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lLnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHZhbHVlIGFzIGEgbWlkaSBub3RlLlxuXHRcdCAqICBAcmV0dXJuICB7TWlkaX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZS5wcm90b3R5cGUudG9NaWRpID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKHRoaXMudG9GcmVxdWVuY3koKSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyYW5zcG9ydFRpbWUgaXMgYSB0aGUgdGltZSBhbG9uZyB0aGUgVHJhbnNwb3J0J3Ncblx0XHQgKiAgICAgICAgIHRpbWVsaW5lLiBJdCBpcyBzaW1pbGFyIHRvIFRvbmUuVGltZSwgYnV0IGluc3RlYWQgb2YgZXZhbHVhdGluZ1xuXHRcdCAqICAgICAgICAgYWdhaW5zdCB0aGUgQXVkaW9Db250ZXh0J3MgY2xvY2ssIGl0IGlzIGV2YWx1YXRlZCBhZ2FpbnN0XG5cdFx0ICogICAgICAgICB0aGUgVHJhbnNwb3J0J3MgcG9zaXRpb24uIFNlZSBbVHJhbnNwb3J0VGltZSB3aWtpXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9UcmFuc3BvcnRUaW1lKS5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUgYXMgYSBudW1iZXIgb3Igc3RyaW5nXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVW5pdCB2YWx1ZXNcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuVGltZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLlRyYW5zcG9ydFRpbWUpIHtcblx0ICAgICAgICAgICAgVG9uZS5UaW1lLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRyYW5zcG9ydFRpbWUodmFsLCB1bml0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0VGltZSwgVG9uZS5UaW1lKTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgY3VycmVudCB0aW1lIGluIHdoaWNoZXZlciBjb250ZXh0IGlzIHJlbGV2YW50XG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lLnByb3RvdHlwZS5fbm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC5zZWNvbmRzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRyYW5zcG9ydFRpbWU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdFRZUEVTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqIFVuaXRzIHdoaWNoIGEgdmFsdWUgY2FuIHRha2Ugb24uXG5cdFx0ICogQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuVHlwZSA9IHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBEZWZhdWx0IHVuaXRzXG5cdFx0XHQgKiAgQHR5cGVkZWYge0RlZmF1bHR9XG5cdFx0XHQgKi9cblx0ICAgICAgICBEZWZhdWx0OiAnbnVtYmVyJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaW1lIGNhbiBiZSBkZXNjcmliZWQgaW4gYSBudW1iZXIgb2Ygd2F5cy4gUmVhZCBtb3JlIFtUaW1lXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9UaW1lKS5cblx0XHRcdCAqXG5cdFx0XHQgKiAgKiBOdW1iZXJzLCB3aGljaCB3aWxsIGJlIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgdGltZSAoaW4gc2Vjb25kcykuXG5cdFx0XHQgKiAgKiBOb3RhdGlvbiwgKFwiNG5cIiwgXCI4dFwiKSBkZXNjcmliZXMgdGltZSBpbiBCUE0gYW5kIHRpbWUgc2lnbmF0dXJlIHJlbGF0aXZlIHZhbHVlcy5cblx0XHRcdCAqICAqIFRyYW5zcG9ydFRpbWUsIChcIjQ6MzoyXCIpIHdpbGwgYWxzbyBwcm92aWRlIHRlbXBvIGFuZCB0aW1lIHNpZ25hdHVyZSByZWxhdGl2ZSB0aW1lc1xuXHRcdFx0ICogIGluIHRoZSBmb3JtIEJBUlM6UVVBUlRFUlM6U0lYVEVFTlRIUy5cblx0XHRcdCAqICAqIEZyZXF1ZW5jeSwgKFwiOGh6XCIpIGlzIGNvbnZlcnRlZCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjeWNsZSBpbiBzZWNvbmRzLlxuXHRcdFx0ICogICogTm93LVJlbGF0aXZlLCAoXCIrMVwiKSBwcmVmaXggYW55IG9mIHRoZSBhYm92ZSB3aXRoIFwiK1wiIGFuZCBpdCB3aWxsIGJlIGludGVycHJldGVkIGFzXG5cdFx0XHQgKiAgXCJ0aGUgY3VycmVudCB0aW1lIHBsdXMgd2hhdGV2ZXIgZXhwcmVzc2lvbiBmb2xsb3dzXCIuXG5cdFx0XHQgKiAgKiBFeHByZXNzaW9ucywgKFwiMzowICsgMiAtICgxbSAvIDcpXCIpIGFueSBvZiB0aGUgYWJvdmUgY2FuIGFsc28gYmUgY29tYmluZWRcblx0XHRcdCAqICBpbnRvIGEgbWF0aGVtYXRpY2FsIGV4cHJlc3Npb24gd2hpY2ggd2lsbCBiZSBldmFsdWF0ZWQgdG8gY29tcHV0ZSB0aGUgZGVzaXJlZCB0aW1lLlxuXHRcdFx0ICogICogTm8gQXJndW1lbnQsIGZvciBtZXRob2RzIHdoaWNoIGFjY2VwdCB0aW1lLCBubyBhcmd1bWVudCB3aWxsIGJlIGludGVycHJldGVkIGFzXG5cdFx0XHQgKiAgXCJub3dcIiAoaS5lLiB0aGUgY3VycmVudFRpbWUpLlxuXHRcdFx0ICpcblx0XHRcdCAqICBAdHlwZWRlZiB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIFRpbWU6ICd0aW1lJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBGcmVxdWVuY3kgY2FuIGJlIGRlc2NyaWJlZCBzaW1pbGFyIHRvIHRpbWUsIGV4Y2VwdCB1bHRpbWF0ZWx5IHRoZVxuXHRcdFx0ICogIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIGZyZXF1ZW5jeSBpbnN0ZWFkIG9mIHNlY29uZHMuIEEgbnVtYmVyXG5cdFx0XHQgKiAgaXMgdGFrZW4gbGl0ZXJhbGx5IGFzIHRoZSB2YWx1ZSBpbiBoZXJ0ei4gQWRkaXRpb25hbGx5IGFueSBvZiB0aGVcblx0XHRcdCAqICBUaW1lIGVuY29kaW5ncyBjYW4gYmUgdXNlZC4gTm90ZSBuYW1lcyBpbiB0aGUgZm9ybVxuXHRcdFx0ICogIG9mIE5PVEUgT0NUQVZFIChpLmUuIEM0KSBhcmUgYWxzbyBhY2NlcHRlZCBhbmQgY29udmVydGVkIHRvIHRoZWlyXG5cdFx0XHQgKiAgZnJlcXVlbmN5IHZhbHVlLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtGcmVxdWVuY3l9XG5cdFx0XHQgKi9cblx0ICAgICAgICBGcmVxdWVuY3k6ICdmcmVxdWVuY3knLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRyYW5zcG9ydFRpbWUgZGVzY3JpYmVzIGEgcG9zaXRpb24gYWxvbmcgdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lLiBJdCBpc1xuXHRcdFx0ICogIHNpbWlsYXIgdG8gVGltZSBpbiB0aGF0IGl0IHVzZXMgYWxsIHRoZSBzYW1lIGVuY29kaW5ncywgYnV0IFRyYW5zcG9ydFRpbWUgc3BlY2lmaWNhbGx5XG5cdFx0XHQgKiAgcGVydGFpbnMgdG8gdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lLCB3aGljaCBpcyBzdGFydGFibGUsIHN0b3BwYWJsZSwgbG9vcGFibGUsIGFuZCBzZWVrYWJsZS5cblx0XHRcdCAqICBbUmVhZCBtb3JlXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9UcmFuc3BvcnRUaW1lKVxuXHRcdFx0ICogIEB0eXBlZGVmIHtUcmFuc3BvcnRUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgVHJhbnNwb3J0VGltZTogJ3RyYW5zcG9ydFRpbWUnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRpY2tzIGFyZSB0aGUgYmFzaWMgc3VidW5pdCBvZiB0aGUgVHJhbnNwb3J0LiBUaGV5IGFyZVxuXHRcdFx0ICogIHRoZSBzbWFsbGVzdCB1bml0IG9mIHRpbWUgdGhhdCB0aGUgVHJhbnNwb3J0IHN1cHBvcnRzLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtUaWNrc31cblx0XHRcdCAqL1xuXHQgICAgICAgIFRpY2tzOiAndGlja3MnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE5vcm1hbCB2YWx1ZXMgYXJlIHdpdGhpbiB0aGUgcmFuZ2UgWzAsIDFdLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIE5vcm1hbFJhbmdlOiAnbm9ybWFsUmFuZ2UnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEF1ZGlvUmFuZ2UgdmFsdWVzIGFyZSBiZXR3ZWVuIFstMSwgMV0uXG5cdFx0XHQgKiAgQHR5cGVkZWYge0F1ZGlvUmFuZ2V9XG5cdFx0XHQgKi9cblx0ICAgICAgICBBdWRpb1JhbmdlOiAnYXVkaW9SYW5nZScsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRGVjaWJlbHMgYXJlIGEgbG9nYXJpdGhtaWMgdW5pdCBvZiBtZWFzdXJlbWVudCB3aGljaCBpcyB1c2VmdWwgZm9yIHZvbHVtZVxuXHRcdFx0ICogIGJlY2F1c2Ugb2YgdGhlIGxvZ2FyaXRobWljIHdheSB0aGF0IHdlIHBlcmNlaXZlIGxvdWRuZXNzLiAwIGRlY2liZWxzXG5cdFx0XHQgKiAgbWVhbnMgbm8gY2hhbmdlIGluIHZvbHVtZS4gLTEwZGIgaXMgYXBwcm94aW1hdGVseSBoYWxmIGFzIGxvdWQgYW5kIDEwZGJcblx0XHRcdCAqICBpcyB0d2ljZSBpcyBsb3VkLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtEZWNpYmVsc31cblx0XHRcdCAqL1xuXHQgICAgICAgIERlY2liZWxzOiAnZGInLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhhbGYtc3RlcCBub3RlIGluY3JlbWVudHMsIGkuZS4gMTIgaXMgYW4gb2N0YXZlIGFib3ZlIHRoZSByb290LiBhbmQgMSBpcyBhIGhhbGYtc3RlcCB1cC5cblx0XHRcdCAqICBAdHlwZWRlZiB7SW50ZXJ2YWx9XG5cdFx0XHQgKi9cblx0ICAgICAgICBJbnRlcnZhbDogJ2ludGVydmFsJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBCZWF0cyBwZXIgbWludXRlLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtCUE19XG5cdFx0XHQgKi9cblx0ICAgICAgICBCUE06ICdicG0nLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIFBvc2l0aXZlOiAncG9zaXRpdmUnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEdhaW4gaXMgdGhlIHJhdGlvIGJldHdlZW4gaW5wdXQgYW5kIG91dHB1dCBvZiBhIHNpZ25hbC5cblx0XHRcdCAqICBBIGdhaW4gb2YgMCBpcyB0aGUgc2FtZSBhcyBzaWxlbmNpbmcgdGhlIHNpZ25hbC4gQSBnYWluIG9mXG5cdFx0XHQgKiAgMSwgY2F1c2VzIG5vIGNoYW5nZSB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtHYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgR2FpbjogJ2dhaW4nLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgY2VudCBpcyBhIGh1bmRyZWR0aCBvZiBhIHNlbWl0b25lLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtDZW50c31cblx0XHRcdCAqL1xuXHQgICAgICAgIENlbnRzOiAnY2VudHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuZ2xlIGJldHdlZW4gMCBhbmQgMzYwLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtEZWdyZWVzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgRGVncmVlczogJ2RlZ3JlZXMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgbnVtYmVyIHJlcHJlc2VudGluZyBhIG1pZGkgbm90ZS5cblx0XHRcdCAqICBAdHlwZWRlZiB7TUlESX1cblx0XHRcdCAqL1xuXHQgICAgICAgIE1JREk6ICdtaWRpJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGNvbG9uLXNlcGFyYXRlZCByZXByZXNlbnRhdGlvbiBvZiB0aW1lIGluIHRoZSBmb3JtIG9mXG5cdFx0XHQgKiAgQmFyczpCZWF0czpTaXh0ZWVudGhzLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtCYXJzQmVhdHNTaXh0ZWVudGhzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgQmFyc0JlYXRzU2l4dGVlbnRoczogJ2JhcnNCZWF0c1NpeHRlZW50aHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNhbXBsaW5nIGlzIHRoZSByZWR1Y3Rpb24gb2YgYSBjb250aW51b3VzIHNpZ25hbCB0byBhIGRpc2NyZXRlIHNpZ25hbC5cblx0XHRcdCAqICBBdWRpbyBpcyB0eXBpY2FsbHkgc2FtcGxlZCA0NDEwMCB0aW1lcyBwZXIgc2Vjb25kLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtTYW1wbGVzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgU2FtcGxlczogJ3NhbXBsZXMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhlcnR6IGFyZSBhIGZyZXF1ZW5jeSByZXByZXNlbnRhdGlvbiBkZWZpbmVkIGFzIG9uZSBjeWNsZSBwZXIgc2Vjb25kLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtIZXJ0en1cblx0XHRcdCAqL1xuXHQgICAgICAgIEhlcnR6OiAnaGVydHonLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgZnJlcXVlbmN5IHJlcHJlc2VudGVkIGJ5IGEgbGV0dGVyIG5hbWUsXG5cdFx0XHQgKiAgYWNjaWRlbnRhbCBhbmQgb2N0YXZlLiBUaGlzIHN5c3RlbSBpcyBrbm93biBhc1xuXHRcdFx0ICogIFtTY2llbnRpZmljIFBpdGNoIE5vdGF0aW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TY2llbnRpZmljX3BpdGNoX25vdGF0aW9uKS5cblx0XHRcdCAqICBAdHlwZWRlZiB7Tm90ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIE5vdGU6ICdub3RlJyxcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBPbmUgbWlsbGlzZWNvbmQgaXMgYSB0aG91c2FuZHRoIG9mIGEgc2Vjb25kLlxuXHRcdFx0ICogIEB0eXBlZGVmIHtNaWxsaXNlY29uZHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBNaWxsaXNlY29uZHM6ICdtaWxsaXNlY29uZHMnLFxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFNlY29uZHMgYXJlIHRoZSB0aW1lIHVuaXQgb2YgdGhlIEF1ZGlvQ29udGV4dC4gSW4gdGhlIGVuZCxcblx0XHRcdCAqICBhbGwgdmFsdWVzIG5lZWQgdG8gYmUgZXZhbHVhdGVkIHRvIHNlY29uZHMuXG5cdFx0XHQgKiAgQHR5cGVkZWYge1NlY29uZHN9XG5cdFx0XHQgKi9cblx0ICAgICAgICBTZWNvbmRzOiAnc2Vjb25kcycsXG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZHVyYXRpb24gcmVsYXRpdmUgdG8gYSBtZWFzdXJlLlxuXHRcdFx0ICogICogXCI0blwiID0gcXVhcnRlciBub3RlXG5cdFx0XHQgKiAgKiBcIjJtXCIgPSB0d28gbWVhc3VyZXNcblx0XHRcdCAqICAqIFwiOHRcIiA9IGVpZ2h0aC1ub3RlIHRyaXBsZXRcblx0XHRcdCAqICBAdHlwZWRlZiB7Tm90YXRpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICBOb3RhdGlvbjogJ25vdGF0aW9uJ1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy8gQVVHTUVOVCBUT05FJ3MgUFJPVE9UWVBFXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBDb252ZXJ0IFRpbWUgaW50byBzZWNvbmRzLlxuXHRcdCAqXG5cdFx0ICogIFVubGlrZSB0aGUgbWV0aG9kIHdoaWNoIGl0IG92ZXJyaWRlcywgdGhpcyB0YWtlcyBpbnRvIGFjY291bnRcblx0XHQgKiAgdHJhbnNwb3J0dGltZSBhbmQgbXVzaWNhbCBub3RhdGlvbi5cblx0XHQgKlxuXHRcdCAqICBUaW1lIDogMS40MFxuXHRcdCAqICBOb3RhdGlvbjogNG4gb3IgMW0gb3IgMnRcblx0XHQgKiAgTm93IFJlbGF0aXZlOiArM25cblx0XHQgKiAgTWF0aDogM24rMTZuIG9yIGV2ZW4gY29tcGxpY2F0ZWQgZXhwcmVzc2lvbnMgKCgzbioyKS82ICsgMSlcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm4ge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b1NlY29uZHMgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aW1lO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1VuZGVmKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLm5vdygpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyh0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuVGltZSh0aW1lKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRpbWUgaW5zdGFuY2VvZiBUb25lLlRpbWVCYXNlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aW1lLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIGZyZXF1ZW5jeSByZXByZXNlbnRhdGlvbiBpbnRvIGEgbnVtYmVyLlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiB7SGVydHp9ICAgICAgdGhlIGZyZXF1ZW5jeSBpbiBoZXJ0elxuXHRcdCAqL1xuXHQgICAgVG9uZS5wcm90b3R5cGUudG9GcmVxdWVuY3kgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGZyZXEpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmcmVxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyhmcmVxKSB8fCBUb25lLmlzVW5kZWYoZnJlcSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLkZyZXF1ZW5jeShmcmVxKS52YWx1ZU9mKCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChmcmVxIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gZnJlcS50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBhIHRpbWUgcmVwcmVzZW50YXRpb24gaW50byB0aWNrcy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZVxuXHRcdCAqICBAcmV0dXJuIHtUaWNrc30gIHRoZSB0aW1lIGluIHRpY2tzXG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS50b1RpY2tzID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcih0aW1lKSB8fCBUb25lLmlzU3RyaW5nKHRpbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpLnRvVGlja3MoKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnQudGlja3M7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aW1lIGluc3RhbmNlb2YgVG9uZS5UaW1lQmFzZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGltZS50b1RpY2tzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYXJhbSB3cmFwcyB0aGUgbmF0aXZlIFdlYiBBdWRpbydzIEF1ZGlvUGFyYW0gdG8gcHJvdmlkZVxuXHRcdCAqICAgICAgICAgYWRkaXRpb25hbCB1bml0IGNvbnZlcnNpb24gZnVuY3Rpb25hbGl0eS4gSXQgYWxzb1xuXHRcdCAqICAgICAgICAgc2VydmVzIGFzIGEgYmFzZS1jbGFzcyBmb3IgY2xhc3NlcyB3aGljaCBoYXZlIGEgc2luZ2xlLFxuXHRcdCAqICAgICAgICAgYXV0b21hdGFibGUgcGFyYW1ldGVyLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSAge0F1ZGlvUGFyYW19ICBwYXJhbSAgVGhlIHBhcmFtZXRlciB0byB3cmFwLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlR5cGV9IHVuaXRzIFRoZSB1bml0cyBvZiB0aGUgYXVkaW8gcGFyYW0uXG5cdFx0ICogIEBwYXJhbSAge0Jvb2xlYW59IGNvbnZlcnQgSWYgdGhlIHBhcmFtIHNob3VsZCBiZSBjb252ZXJ0ZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3BhcmFtJyxcblx0ICAgICAgICAgICAgJ3VuaXRzJyxcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnXG5cdCAgICAgICAgXSwgVG9uZS5QYXJhbSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbmF0aXZlIHBhcmFtZXRlciB0byBjb250cm9sXG5cdFx0XHQgKiAgQHR5cGUgIHtBdWRpb1BhcmFtfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IHRoaXMuaW5wdXQgPSBvcHRpb25zLnBhcmFtO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB1bml0cyBvZiB0aGUgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVHlwZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudW5pdHMgPSBvcHRpb25zLnVuaXRzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIHRoZSB2YWx1ZSBzaG91bGQgYmUgY29udmVydGVkIG9yIG5vdFxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jb252ZXJ0ID0gb3B0aW9ucy5jb252ZXJ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRydWUgaWYgdGhlIHNpZ25hbCB2YWx1ZSBpcyBiZWluZyBvdmVycmlkZGVuIGJ5XG5cdFx0XHQgKiAgYSBjb25uZWN0ZWQgc2lnbmFsLlxuXHRcdFx0ICogIEByZWFkT25seVxuXHRcdFx0ICogIEB0eXBlICB7Ym9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdmVycmlkZGVuID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdGltZWxpbmUgd2hpY2ggdHJhY2tzIGFsbCBvZiB0aGUgYXV0b21hdGlvbnMuXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBuZXcgVG9uZS5UaW1lbGluZSgxMDAwKTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQob3B0aW9ucy52YWx1ZSkgJiYgdGhpcy5fcGFyYW0pIHtcblx0ICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFyYW0sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5EZWZhdWx0LFxuXHQgICAgICAgICdjb252ZXJ0JzogdHJ1ZSxcblx0ICAgICAgICAncGFyYW0nOiB1bmRlZmluZWRcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhcmFtI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcmFtLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvVW5pdHModGhpcy5nZXRWYWx1ZUF0VGltZShub3cpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2luaXRpYWxWYWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgICAgIHRoaXMuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRoaXMuY29udGV4dC5jdXJyZW50VGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVBdFRpbWUodmFsdWUsIHRoaXMuY29udGV4dC5jdXJyZW50VGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSBvdXRwdXQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhcmFtI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcmFtLnByb3RvdHlwZSwgJ21pblZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLlRpbWUgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkZyZXF1ZW5jeSB8fCB0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuTm9ybWFsUmFuZ2UgfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLlBvc2l0aXZlIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5CUE0pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5BdWRpb1JhbmdlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkRlY2liZWxzKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gLUluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmFtLm1pblZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBhcmFtI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcmFtLnByb3RvdHlwZSwgJ21heFZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLk5vcm1hbFJhbmdlIHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5BdWRpb1JhbmdlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJhbS5tYXhWYWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIHR5cGUgc3BlY2lmaWVkIGJ5IFRvbmUuUGFyYW0udW5pdHNcblx0XHQgKiAgaW50byB0aGUgZGVzdGluYXRpb24gdmFsdWUgKHN1Y2ggYXMgR2FpbiBvciBGcmVxdWVuY3kpLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHsqfSB2YWwgdGhlIHZhbHVlIHRvIGNvbnZlcnRcblx0XHQgKiAgQHJldHVybiB7bnVtYmVyfSAgICAgdGhlIG51bWJlciB3aGljaCB0aGUgdmFsdWUgc2hvdWxkIGJlIHNldCB0b1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX2Zyb21Vbml0cyA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAoKHRoaXMuY29udmVydCB8fCBUb25lLmlzVW5kZWYodGhpcy5jb252ZXJ0KSkgJiYgIXRoaXMub3ZlcnJpZGRlbikge1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudW5pdHMpIHtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuVGltZTpcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcyh2YWwpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5GcmVxdWVuY3k6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0ZyZXF1ZW5jeSh2YWwpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5EZWNpYmVsczpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmRiVG9HYWluKHZhbCk7XG5cdCAgICAgICAgICAgIGNhc2UgVG9uZS5UeXBlLk5vcm1hbFJhbmdlOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbCwgMCksIDEpO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5BdWRpb1JhbmdlOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbCwgLTEpLCAxKTtcblx0ICAgICAgICAgICAgY2FzZSBUb25lLlR5cGUuUG9zaXRpdmU6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodmFsLCAwKTtcblx0ICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDb252ZXJ0IHRoZSBwYXJhbWV0ZXJzIHZhbHVlIGludG8gdGhlIHVuaXRzIHNwZWNpZmllZCBieSBUb25lLlBhcmFtLnVuaXRzLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHBhcmFtICB7bnVtYmVyfSB2YWwgdGhlIHZhbHVlIHRvIGNvbnZlcnRcblx0XHQgKiBAcmV0dXJuIHtudW1iZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fdG9Vbml0cyA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAodGhpcy5jb252ZXJ0IHx8IFRvbmUuaXNVbmRlZih0aGlzLmNvbnZlcnQpKSB7XG5cdCAgICAgICAgICAgIHN3aXRjaCAodGhpcy51bml0cykge1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuVHlwZS5EZWNpYmVsczpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBUb25lLmdhaW5Ub0RiKHZhbCk7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZVxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuX21pbk91dHB1dCA9IDAuMDAwMDE7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGV2ZW50IHR5cGVzXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlID0ge1xuXHQgICAgICAgIExpbmVhcjogJ2xpbmVhclJhbXBUb1ZhbHVlQXRUaW1lJyxcblx0ICAgICAgICBFeHBvbmVudGlhbDogJ2V4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgIFRhcmdldDogJ3NldFRhcmdldEF0VGltZScsXG5cdCAgICAgICAgU2V0VmFsdWU6ICdzZXRWYWx1ZUF0VGltZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGEgcGFyYW1ldGVyIHZhbHVlIGNoYW5nZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtIHsqfVx0dmFsdWUgVGhlIHZhbHVlIHRvIHNldCB0aGUgc2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9ICB0aW1lIFRoZSB0aW1lIHdoZW4gdGhlIGNoYW5nZSBzaG91bGQgb2NjdXIuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdGhlIGZyZXF1ZW5jeSB0byBcIkc0XCIgaW4gZXhhY3RseSAxIHNlY29uZCBmcm9tIG5vdy5cblx0XHQgKiBmcmVxLnNldFZhbHVlQXRUaW1lKFwiRzRcIiwgXCIrMVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uc2V0VmFsdWVBdFRpbWUodmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNpZ25hbHMgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFN1YnNlcXVlbnQgc2NoZWR1bGluZ1xuXHRcdCAqICBtYXkgaW52YWxpZGF0ZSB0aGUgcmV0dXJuZWQgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBXaGVuIHRvIGdldCB0aGUgdmFsdWVcblx0XHQgKiAgQHJldHVybnMge051bWJlcn0gVGhlIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBhZnRlciA9IHRoaXMuX2V2ZW50cy5nZXRBZnRlcih0aW1lKTtcblx0ICAgICAgICB2YXIgYmVmb3JlID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICB2YXIgaW5pdGlhbFZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKHRoaXMuX2luaXRpYWxWYWx1ZSwgdGhpcy5fcGFyYW0uZGVmYXVsdFZhbHVlKTtcblx0ICAgICAgICB2YXIgdmFsdWUgPSBpbml0aWFsVmFsdWU7XG5cdCAgICAgICAgLy9pZiBpdCB3YXMgc2V0IGJ5XG5cdCAgICAgICAgaWYgKGJlZm9yZSA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZS50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlRhcmdldCkge1xuXHQgICAgICAgICAgICB2YXIgcHJldmlvdXMgPSB0aGlzLl9ldmVudHMuZ2V0QmVmb3JlKGJlZm9yZS50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzVmFsO1xuXHQgICAgICAgICAgICBpZiAocHJldmlvdXMgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsID0gaW5pdGlhbFZhbHVlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcHJldmlvdXNWYWwgPSBwcmV2aW91cy52YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2V4cG9uZW50aWFsQXBwcm9hY2goYmVmb3JlLnRpbWUsIHByZXZpb3VzVmFsLCBiZWZvcmUudmFsdWUsIGJlZm9yZS5jb25zdGFudCwgdGltZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlciA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IGJlZm9yZS52YWx1ZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuTGluZWFyKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fbGluZWFySW50ZXJwb2xhdGUoYmVmb3JlLnRpbWUsIGJlZm9yZS52YWx1ZSwgYWZ0ZXIudGltZSwgYWZ0ZXIudmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5FeHBvbmVudGlhbCkge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUoYmVmb3JlLnRpbWUsIGJlZm9yZS52YWx1ZSwgYWZ0ZXIudGltZSwgYWZ0ZXIudmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gYmVmb3JlLnZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdmFsdWU7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENyZWF0ZXMgYSBzY2hlZHVsZSBwb2ludCB3aXRoIHRoZSBjdXJyZW50IHZhbHVlIGF0IHRoZSBjdXJyZW50IHRpbWUuXG5cdFx0ICogIFRoaXMgaXMgdXNlZnVsIGZvciBjcmVhdGluZyBhbiBhdXRvbWF0aW9uIGFuY2hvciBwb2ludCBpbiBvcmRlciB0b1xuXHRcdCAqICBzY2hlZHVsZSBjaGFuZ2VzIGZyb20gdGhlIGN1cnJlbnQgdmFsdWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSBub3cgKE9wdGlvbmFsbHkpIHBhc3MgdGhlIG5vdyB2YWx1ZSBpbi5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFJhbXBQb2ludCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKGN1cnJlbnRWYWwgPT09IDApIHtcblx0ICAgICAgICAgICAgY3VycmVudFZhbCA9IHRoaXMuX21pbk91dHB1dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5zZXRWYWx1ZUF0VGltZSh0aGlzLl90b1VuaXRzKGN1cnJlbnRWYWwpLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGEgbGluZWFyIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tIHRoZVxuXHRcdCAqICBwcmV2aW91cyBzY2hlZHVsZWQgcGFyYW1ldGVyIHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGVuZFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBlbmRUaW1lKSB7XG5cdCAgICAgICAgdmFsdWUgPSB0aGlzLl9mcm9tVW5pdHModmFsdWUpO1xuXHQgICAgICAgIGVuZFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhlbmRUaW1lKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcixcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogZW5kVGltZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBlbmRUaW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGVzIGFuIGV4cG9uZW50aWFsIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBwcmV2aW91cyBzY2hlZHVsZWQgcGFyYW1ldGVyIHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGVuZFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWUsIGVuZFRpbWUpIHtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgdmFsdWUgPSBNYXRoLm1heCh0aGlzLl9taW5PdXRwdXQsIHZhbHVlKTtcblx0ICAgICAgICBlbmRUaW1lID0gdGhpcy50b1NlY29uZHMoZW5kVGltZSk7XG5cdCAgICAgICAgLy9zdG9yZSB0aGUgZXZlbnRcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkV4cG9uZW50aWFsLFxuXHQgICAgICAgICAgICAndGltZSc6IGVuZFRpbWUsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgZW5kVGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhbiBleHBvbmVudGlhbCBjb250aW51b3VzIGNoYW5nZSBpbiBwYXJhbWV0ZXIgdmFsdWUgZnJvbVxuXHRcdCAqICB0aGUgY3VycmVudCB0aW1lIGFuZCBjdXJyZW50IHZhbHVlIHRvIHRoZSBnaXZlbiB2YWx1ZSBvdmVyIHRoZVxuXHRcdCAqICBkdXJhdGlvbiBvZiB0aGUgcmFtcFRpbWUuXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byByYW1wIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHRvIHJhbXAgZnJvbSBpdCdzIGN1cnJlbnQgdmFsdWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfVx0W3N0YXJ0VGltZT1ub3ddIFx0V2hlbiB0aGUgcmFtcCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9leHBvbmVudGlhbGx5IHJhbXAgdG8gdGhlIHZhbHVlIDIgb3ZlciA0IHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmV4cG9uZW50aWFsUmFtcFRvKDIsIDQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG8gPSBmdW5jdGlvbiAodmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhzdGFydFRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0UmFtcFBvaW50KHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBzdGFydFRpbWUgKyB0aGlzLnRvU2Vjb25kcyhyYW1wVGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gbGluZWFyIGNvbnRpbnVvdXMgY2hhbmdlIGluIHBhcmFtZXRlciB2YWx1ZSBmcm9tXG5cdFx0ICogIHRoZSBjdXJyZW50IHRpbWUgYW5kIGN1cnJlbnQgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlIG92ZXIgdGhlXG5cdFx0ICogIGR1cmF0aW9uIG9mIHRoZSByYW1wVGltZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHJhbXBUaW1lIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgdG8gcmFtcCBmcm9tIGl0J3MgY3VycmVudCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9XHRbc3RhcnRUaW1lPW5vd10gXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2xpbmVhcmx5IHJhbXAgdG8gdGhlIHZhbHVlIDQgb3ZlciAzIHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmxpbmVhclJhbXBUbyg0LCAzKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmxpbmVhclJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBzdGFydFRpbWUgKyB0aGlzLnRvU2Vjb25kcyhyYW1wVGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCBleHBvbmVudGlhbGx5IGFwcHJvYWNoaW5nIHRoZSB0YXJnZXQgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuIFNpbmNlIGl0XG5cdFx0ICogIGlzIGFuIGV4cG9uZW50aWFsIGFwcHJvYWNoIGl0IHdpbGwgY29udGludWUgYXBwcm9hY2hpbmcgYWZ0ZXIgdGhlIHJhbXAgZHVyYXRpb24uIFRoZVxuXHRcdCAqICByYW1wVGltZSBpcyB0aGUgdGltZSB0aGF0IGl0IHRha2VzIHRvIHJlYWNoIG92ZXIgOTklIG9mIHRoZSB3YXkgdG93YXJkcyB0aGUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gdmFsdWUgICBUaGUgdmFsdWUgdG8gcmFtcCB0by5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vZXhwb25lbnRpYWxseSByYW1wIHRvIHRoZSB2YWx1ZSAyIG92ZXIgNCBzZWNvbmRzLlxuXHRcdCAqIHNpZ25hbC5leHBvbmVudGlhbFJhbXBUbygyLCA0KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnRhcmdldFJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRSYW1wUG9pbnQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLmV4cG9uZW50aWFsQXBwcm9hY2hWYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lLCByYW1wVGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gU2luY2UgaXRcblx0XHQgKiAgaXMgYW4gZXhwb25lbnRpYWwgYXBwcm9hY2ggaXQgd2lsbCBjb250aW51ZSBhcHByb2FjaGluZyBhZnRlciB0aGUgcmFtcCBkdXJhdGlvbi4gVGhlXG5cdFx0ICogIHJhbXBUaW1lIGlzIHRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdG8gcmVhY2ggb3ZlciA5OSUgb2YgdGhlIHdheSB0b3dhcmRzIHRoZSB2YWx1ZS4gVGhpcyBtZXRob2RzXG5cdFx0ICogIGlzIHNpbWlsYXIgdG8gc2V0VGFyZ2V0QXRUaW1lIGV4Y2VwdCB0aGUgdGhpcmQgYXJndW1lbnQgaXMgYSB0aW1lIGluc3RlYWQgb2YgYSAndGltZUNvbnN0YW50J1xuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIHJhbXAgdG8uXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdHRpbWUgXHRXaGVuIHRoZSByYW1wIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gcmFtcFRpbWUgdGhlIHRpbWUgdGhhdCBpdCB0YWtlcyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9leHBvbmVudGlhbGx5IHJhbXAgdG8gdGhlIHZhbHVlIDIgb3ZlciA0IHNlY29uZHMuXG5cdFx0ICogc2lnbmFsLmV4cG9uZW50aWFsUmFtcFRvKDIsIDQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lLCByYW1wVGltZSkge1xuXHQgICAgICAgIHZhciB0aW1lQ29uc3RhbnQgPSBNYXRoLmxvZyh0aGlzLnRvU2Vjb25kcyhyYW1wVGltZSkgKyAxKSAvIE1hdGgubG9nKDIwMCk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLnNldFRhcmdldEF0VGltZSh2YWx1ZSwgdGltZSwgdGltZUNvbnN0YW50KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgZXhwb25lbnRpYWxseSBhcHByb2FjaGluZyB0aGUgdGFyZ2V0IHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lIHdpdGhcblx0XHQgKiAgYSByYXRlIGhhdmluZyB0aGUgZ2l2ZW4gdGltZSBjb25zdGFudC5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gc3RhcnRUaW1lXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB0aW1lQ29uc3RhbnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnNldFRhcmdldEF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpIHtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgLy8gVGhlIHZhbHVlIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBhcHByb2FjaCB3aXRob3V0IHRpbWVDb25zdGFudCA+IDAuXG5cdCAgICAgICAgaWYgKHRpbWVDb25zdGFudCA8PSAwKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGltZUNvbnN0YW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgc3RhcnRUaW1lID0gdGhpcy50b1NlY29uZHMoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlRhcmdldCxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG5cdCAgICAgICAgICAgICd0aW1lJzogc3RhcnRUaW1lLFxuXHQgICAgICAgICAgICAnY29uc3RhbnQnOiB0aW1lQ29uc3RhbnRcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5zZXRUYXJnZXRBdFRpbWUodmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyBhbiBhcnJheSBvZiBhcmJpdHJhcnkgcGFyYW1ldGVyIHZhbHVlcyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7QXJyYXl9IHZhbHVlc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGR1cmF0aW9uXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzY2FsaW5nPTFdIElmIHRoZSB2YWx1ZXMgaW4gdGhlIGN1cnZlIHNob3VsZCBiZSBzY2FsZWQgYnkgc29tZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJhbS5wcm90b3R5cGUuc2V0VmFsdWVDdXJ2ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZXMsIHN0YXJ0VGltZSwgZHVyYXRpb24sIHNjYWxpbmcpIHtcblx0ICAgICAgICBzY2FsaW5nID0gVG9uZS5kZWZhdWx0QXJnKHNjYWxpbmcsIDEpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgdGhpcy5zZXRWYWx1ZUF0VGltZSh2YWx1ZXNbMF0gKiBzY2FsaW5nLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIHZhciBzZWdUaW1lID0gZHVyYXRpb24gLyAodmFsdWVzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWVzW2ldICogc2NhbGluZywgc3RhcnRUaW1lICsgaSAqIHNlZ1RpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VscyBhbGwgc2NoZWR1bGVkIHBhcmFtZXRlciBjaGFuZ2VzIHdpdGggdGltZXMgZ3JlYXRlciB0aGFuIG9yXG5cdFx0ICogIGVxdWFsIHRvIHN0YXJ0VGltZS5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhpcyBpcyBzaW1pbGFyIHRvIFtjYW5jZWxTY2hlZHVsZWRWYWx1ZXNdKCNjYW5jZWxTY2hlZHVsZWRWYWx1ZXMpIGV4Y2VwdFxuXHRcdCAqICBpdCBob2xkcyB0aGUgYXV0b21hdGVkIHZhbHVlIGF0IHRpbWUgdW50aWwgdGhlIG5leHQgYXV0b21hdGVkIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcmFtfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5jYW5jZWxBbmRIb2xkQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdmFsdWVBdFRpbWUgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIC8vaWYgdGhlcmUgaXMgYW4gZXZlbnQgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAgICAvL2FuZCB0aGF0IGV2ZW4gaXMgbm90IGEgXCJzZXRcIlxuXHQgICAgICAgIHZhciBiZWZvcmUgPSB0aGlzLl9ldmVudHMuZ2V0KHRpbWUpO1xuXHQgICAgICAgIHZhciBhZnRlciA9IHRoaXMuX2V2ZW50cy5nZXRBZnRlcih0aW1lKTtcblx0ICAgICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aW1lID09PSB0aW1lKSB7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIGV2ZXJ5dGhpbmcgYWZ0ZXJcblx0ICAgICAgICAgICAgaWYgKGFmdGVyKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKGFmdGVyLnRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmNhbmNlbCh0aW1lICsgMC4wMDAwMDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChhZnRlcikge1xuXHQgICAgICAgICAgICAvL2NhbmNlbCB0aGUgbmV4dCBldmVudChzKVxuXHQgICAgICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKGFmdGVyLnRpbWUpO1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3BhcmFtLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAoYWZ0ZXIudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5MaW5lYXIpIHtcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsdWVBdFRpbWUsIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhcixcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVBdFRpbWUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd0aW1lJzogdGltZVxuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKGFmdGVyLnR5cGUgPT09IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwpIHtcblx0ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZUF0VGltZSwgdGltZSk7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5hZGQoe1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6IFRvbmUuUGFyYW0uQXV0b21hdGlvblR5cGUuRXhwb25lbnRpYWwsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlQXRUaW1lLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAndGltZSc6IHRpbWVcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3NldCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlLFxuXHQgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZUF0VGltZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3BhcmFtLmNhbmNlbEFuZEhvbGRBdFRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFyYW0uY2FuY2VsQW5kSG9sZEF0VGltZSh0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJhbS5zZXRWYWx1ZUF0VGltZSh2YWx1ZUF0VGltZSwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSYW1wcyB0byB0aGUgZ2l2ZW4gdmFsdWUgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIHJhbXBUaW1lLlxuXHRcdCAqICBBdXRvbWF0aWNhbGx5IHNlbGVjdHMgdGhlIGJlc3QgcmFtcCB0eXBlIChleHBvbmVudGlhbCBvciBsaW5lYXIpXG5cdFx0ICogIGRlcGVuZGluZyBvbiB0aGUgYHVuaXRzYCBvZiB0aGUgc2lnbmFsXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSByYW1wVGltZSBcdFRoZSB0aW1lIHRoYXQgaXQgdGFrZXMgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0byByYW1wIGZyb20gaXQncyBjdXJyZW50IHZhbHVlXG5cdFx0ICogIEBwYXJhbSB7VGltZX1cdFtzdGFydFRpbWU9bm93XSBcdFdoZW4gdGhlIHJhbXAgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYXJhbX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcmFtcCB0byB0aGUgdmFsdWUgZWl0aGVyIGxpbmVhcmx5IG9yIGV4cG9uZW50aWFsbHlcblx0XHQgKiAvL2RlcGVuZGluZyBvbiB0aGUgXCJ1bml0c1wiIHZhbHVlIG9mIHRoZSBzaWduYWxcblx0XHQgKiBzaWduYWwucmFtcFRvKDAsIDEwKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NjaGVkdWxlIGl0IHRvIHJhbXAgc3RhcnRpbmcgYXQgYSBzcGVjaWZpYyB0aW1lXG5cdFx0ICogc2lnbmFsLnJhbXBUbygwLCAxMCwgNSlcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLnJhbXBUbyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmFtcFRpbWUsIHN0YXJ0VGltZSkge1xuXHQgICAgICAgIHJhbXBUaW1lID0gVG9uZS5kZWZhdWx0QXJnKHJhbXBUaW1lLCAwLjEpO1xuXHQgICAgICAgIGlmICh0aGlzLnVuaXRzID09PSBUb25lLlR5cGUuRnJlcXVlbmN5IHx8IHRoaXMudW5pdHMgPT09IFRvbmUuVHlwZS5CUE0gfHwgdGhpcy51bml0cyA9PT0gVG9uZS5UeXBlLkRlY2liZWxzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZXhwb25lbnRpYWxSYW1wVG8odmFsdWUsIHJhbXBUaW1lLCBzdGFydFRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvKHZhbHVlLCByYW1wVGltZSwgc3RhcnRUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVVUT01BVElPTiBDVVJWRSBDQUxDVUxBVElPTlNcblx0ICAgIC8vXHRNSVQgTGljZW5zZSwgY29weXJpZ2h0IChjKSAyMDE0IEpvcmRhbiBTYW50ZWxsXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHRoZSB2YWx1ZSBhbG9uZyB0aGUgY3VydmUgcHJvZHVjZWQgYnkgc2V0VGFyZ2V0QXRUaW1lXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fZXhwb25lbnRpYWxBcHByb2FjaCA9IGZ1bmN0aW9uICh0MCwgdjAsIHYxLCB0aW1lQ29uc3RhbnQsIHQpIHtcblx0ICAgICAgICByZXR1cm4gdjEgKyAodjAgLSB2MSkgKiBNYXRoLmV4cCgtKHQgLSB0MCkgLyB0aW1lQ29uc3RhbnQpO1xuXHQgICAgfTtcblx0ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHRoZSB2YWx1ZSBhbG9uZyB0aGUgY3VydmUgcHJvZHVjZWQgYnkgbGluZWFyUmFtcFRvVmFsdWVBdFRpbWVcblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLl9saW5lYXJJbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uICh0MCwgdjAsIHQxLCB2MSwgdCkge1xuXHQgICAgICAgIHJldHVybiB2MCArICh2MSAtIHYwKSAqICgodCAtIHQwKSAvICh0MSAtIHQwKSk7XG5cdCAgICB9O1xuXHQgICAgLy8gQ2FsY3VsYXRlcyB0aGUgdGhlIHZhbHVlIGFsb25nIHRoZSBjdXJ2ZSBwcm9kdWNlZCBieSBleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lXG5cdCAgICBUb25lLlBhcmFtLnByb3RvdHlwZS5fZXhwb25lbnRpYWxJbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uICh0MCwgdjAsIHQxLCB2MSwgdCkge1xuXHQgICAgICAgIHJldHVybiB2MCAqIE1hdGgucG93KHYxIC8gdjAsICh0IC0gdDApIC8gKHQxIC0gdDApKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYXJhbTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBXcmFwcGVyIGFyb3VuZCB0aGUgT2ZmbGluZUF1ZGlvQ29udGV4dFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Db250ZXh0fVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICBjaGFubmVscyAgVGhlIG51bWJlciBvZiBjaGFubmVscyB0byByZW5kZXJcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgZHVyYXRpb24gIFRoZSBkdXJhdGlvbiB0byByZW5kZXIgaW4gc2FtcGxlc1xuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gc2FtcGxlUmF0ZSB0aGUgc2FtcGxlIHJhdGUgdG8gcmVuZGVyIGF0XG5cdFx0ICovXG5cdCAgICBUb25lLk9mZmxpbmVDb250ZXh0ID0gZnVuY3Rpb24gKGNoYW5uZWxzLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSkge1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvZmZsaW5lIGNvbnRleHRcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7T2ZmbGluZUF1ZGlvQ29udGV4dH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHZhciBvZmZsaW5lQ29udGV4dCA9IG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KGNoYW5uZWxzLCBkdXJhdGlvbiAqIHNhbXBsZVJhdGUsIHNhbXBsZVJhdGUpO1xuXHQgICAgICAgIC8vd3JhcCB0aGUgbWV0aG9kcy9tZW1iZXJzXG5cdCAgICAgICAgVG9uZS5Db250ZXh0LmNhbGwodGhpcywge1xuXHQgICAgICAgICAgICAnY29udGV4dCc6IG9mZmxpbmVDb250ZXh0LFxuXHQgICAgICAgICAgICAnY2xvY2tTb3VyY2UnOiAnb2ZmbGluZScsXG5cdCAgICAgICAgICAgICdsb29rQWhlYWQnOiAwLFxuXHQgICAgICAgICAgICAndXBkYXRlSW50ZXJ2YWwnOiAxMjggLyBzYW1wbGVSYXRlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSBwcml2YXRlIHJlZmVyZW5jZSB0byB0aGUgZHVyYXRpb25cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBhcnRpZmljaWFsIGNsb2NrIHNvdXJjZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IDA7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5PZmZsaW5lQ29udGV4dCwgVG9uZS5Db250ZXh0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBPdmVycmlkZSB0aGUgbm93IG1ldGhvZCB0byBwb2ludCB0byB0aGUgaW50ZXJuYWwgY2xvY2sgdGltZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUubm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VGltZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVuZGVyIHRoZSBvdXRwdXQgb2YgdGhlIE9mZmxpbmVDb250ZXh0XG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHdoaWxlICh0aGlzLl9kdXJhdGlvbiAtIHRoaXMuX2N1cnJlbnRUaW1lID49IDApIHtcblx0ICAgICAgICAgICAgLy9pbnZva2UgYWxsIHRoZSBjYWxsYmFja3Mgb24gdGhhdCB0aW1lXG5cdCAgICAgICAgICAgIHRoaXMuZW1pdCgndGljaycpO1xuXHQgICAgICAgICAgICAvL2luY3JlbWVudCB0aGUgY2xvY2tcblx0ICAgICAgICAgICAgdGhpcy5fY3VycmVudFRpbWUgKz0gdGhpcy5ibG9ja1RpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsb3NlIHRoZSBjb250ZXh0XG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PZmZsaW5lQ29udGV4dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fY29udGV4dCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9mZmxpbmVDb250ZXh0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG5cdCAgICAgICAgdmFyIGlzTW9iaWxlU2FmYXJpID0gdWEuaW5jbHVkZXMoJ3NhZmFyaScpICYmICF1YS5pbmNsdWRlcygnY2hyb21lJykgJiYgdWEuaW5jbHVkZXMoJ21vYmlsZScpO1xuXHQgICAgICAgIGlmIChpc01vYmlsZVNhZmFyaSkge1xuXHQgICAgICAgICAgICAvL21vYmlsZSBzYWZhcmkgaGFzIGEgYml6YXJyZSBidWcgd2l0aCB0aGUgb2ZmbGluZSBjb250ZXh0XG5cdCAgICAgICAgICAgIC8vd2hlbiBhIEJ1ZmZlclNvdXJjZU5vZGUgaXMgc3RhcnRlZCwgaXQgc3RhcnRzIHRoZSBvZmZsaW5lIGNvbnRleHRcblx0ICAgICAgICAgICAgLy9cblx0ICAgICAgICAgICAgLy9kZWZlcnJpbmcgYWxsIEJ1ZmZlclNvdXJjZSBzdGFydHMgdGlsbCB0aGUgbGFzdCBwb3NzaWJsZSBtb21lbnRcblx0ICAgICAgICAgICAgLy9yZWR1Y2VzIHRoZSBsaWtlbGlob29kIG9mIHRoaXMgaGFwcGVuaW5nXG5cdCAgICAgICAgICAgIFRvbmUuT2ZmbGluZUNvbnRleHQucHJvdG90eXBlLmNyZWF0ZUJ1ZmZlclNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBidWZmZXJTb3VyY2UgPSB0aGlzLl9jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgICAgICAgICAgdmFyIF9uYXRpdmVfc3RhcnQgPSBidWZmZXJTb3VyY2Uuc3RhcnQ7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJTb3VyY2Uuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIF9uYXRpdmVfc3RhcnQuY2FsbChidWZmZXJTb3VyY2UsIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMCk7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyU291cmNlO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgdGhpbiB3cmFwcGVyIGFyb3VuZCB0aGUgTmF0aXZlIFdlYiBBdWRpbyBHYWluTm9kZS5cblx0XHQgKiAgICAgICAgIFRoZSBHYWluTm9kZSBpcyBhIGJhc2ljIGJ1aWxkaW5nIGJsb2NrIG9mIHRoZSBXZWIgQXVkaW9cblx0XHQgKiAgICAgICAgIEFQSSBhbmQgaXMgdXNlZnVsIGZvciByb3V0aW5nIGF1ZGlvIGFuZCBhZGp1c3RpbmcgZ2FpbnMuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSAgZ2FpbiAgVGhlIGluaXRpYWwgZ2FpbiBvZiB0aGUgR2Fpbk5vZGVcblx0XHQgKiAgQHBhcmFtIHtUb25lLlR5cGU9fSB1bml0cyBUaGUgdW5pdHMgb2YgdGhlIGdhaW4gcGFyYW1ldGVyLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAndW5pdHMnXG5cdCAgICAgICAgXSwgVG9uZS5HYWluKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBHYWluTm9kZVxuXHRcdFx0ICogIEB0eXBlICB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuX2dhaW5Ob2RlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBwYXJhbWV0ZXIgb2YgdGhlIGdhaW4gbm9kZS5cblx0XHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmdhaW4gPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2dhaW5Ob2RlLmdhaW4sXG5cdCAgICAgICAgICAgICd1bml0cyc6IG9wdGlvbnMudW5pdHMsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IG9wdGlvbnMuZ2Fpbixcblx0ICAgICAgICAgICAgJ2NvbnZlcnQnOiBvcHRpb25zLmNvbnZlcnRcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZ2FpbicpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR2FpbiwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW4uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2dhaW4nOiAxLFxuXHQgICAgICAgICdjb252ZXJ0JzogdHJ1ZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuR2Fpbn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR2Fpbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2dhaW4nKTtcblx0ICAgICAgICB0aGlzLmdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR2Fpbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkICYmICFBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnN0YW50U291cmNlKSB7XG5cdCAgICAgICAgdmFyIENvbnN0YW50U291cmNlTm9kZSA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgICAgIHZhciBidWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCAxMjgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7XG5cdCAgICAgICAgICAgIHZhciBhcnIgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBhcnJbaV0gPSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2UuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5sb29wID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdmFyIGdhaW5Ob2RlID0gdGhpcy5fb3V0cHV0ID0gY29udGV4dC5jcmVhdGVHYWluKCk7XG5cdCAgICAgICAgICAgIHRoaXMub2Zmc2V0ID0gZ2Fpbk5vZGUuZ2Fpbjtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyU291cmNlLmNvbm5lY3QoZ2Fpbk5vZGUpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgQ29uc3RhbnRTb3VyY2VOb2RlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlclNvdXJjZS5zdGFydCh0aW1lKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJTb3VyY2Uuc3RvcCh0aW1lKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dC5jb25uZWN0LmFwcGx5KHRoaXMuX291dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBDb25zdGFudFNvdXJjZU5vZGUucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dC5kaXNjb25uZWN0LmFwcGx5KHRoaXMuX291dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZUNvbnN0YW50U291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50U291cmNlTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIFRvbmUuQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlQ29uc3RhbnRTb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnRTb3VyY2VOb2RlKHRoaXMpO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBzaWduYWwgaXMgYW4gYXVkaW8tcmF0ZSB2YWx1ZS4gVG9uZS5TaWduYWwgaXMgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGUgbGlicmFyeS5cblx0XHQgKiAgICAgICAgICBVbmxpa2UgYSBudW1iZXIsIFNpZ25hbHMgY2FuIGJlIHNjaGVkdWxlZCB3aXRoIHNhbXBsZS1sZXZlbCBhY2N1cmFjeS4gVG9uZS5TaWduYWxcblx0XHQgKiAgICAgICAgICBoYXMgYWxsIG9mIHRoZSBtZXRob2RzIGF2YWlsYWJsZSB0byBuYXRpdmUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICAgW0F1ZGlvUGFyYW1dKGh0dHA6Ly93ZWJhdWRpby5naXRodWIuaW8vd2ViLWF1ZGlvLWFwaS8jdGhlLWF1ZGlvcGFyYW0taW50ZXJmYWNlKVxuXHRcdCAqICAgICAgICAgIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBjb252ZW5pZW5jZXMuIFJlYWQgbW9yZSBhYm91dCB3b3JraW5nIHdpdGggc2lnbmFsc1xuXHRcdCAqICAgICAgICAgIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vVG9uZWpzL1RvbmUuanMvd2lraS9TaWduYWxzKS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuUGFyYW19XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfEF1ZGlvUGFyYW19IFt2YWx1ZV0gSW5pdGlhbCB2YWx1ZSBvZiB0aGUgc2lnbmFsLiBJZiBhbiBBdWRpb1BhcmFtXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcGFzc2VkIGluLCB0aGF0IHBhcmFtZXRlciB3aWxsIGJlIHdyYXBwZWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgY29udHJvbGxlZCBieSB0aGUgU2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPU51bWJlcl0gdW5pdCBUaGUgdW5pdHMgdGhlIHNpZ25hbCBpcyBpbi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKDEwKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3ZhbHVlJyxcblx0ICAgICAgICAgICAgJ3VuaXRzJ1xuXHQgICAgICAgIF0sIFRvbmUuU2lnbmFsKTtcblx0ICAgICAgICBUb25lLlBhcmFtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQqIFdoZW4gYSBzaWduYWwgaXMgY29ubmVjdGVkIHRvIGFub3RoZXIgc2lnbmFsIG9yIGF1ZGlvIHBhcmFtLFxuXHRcdFx0KiB0aGlzIHNpZ25hbCBiZWNvbWVzIGEgcHJveHkgZm9yIGl0XG5cdFx0XHQqIEB0eXBlIHtBcnJheX1cblx0XHRcdCogQHByaXZhdGVcblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5fcHJveGllcyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiBJbmRpY2F0ZXMgaWYgdGhlIGNvbnN0YW50IHNvdXJjZSB3YXMgc3RhcnRlZCBvciBub3Rcblx0XHRcdCogQHByaXZhdGVcblx0XHRcdCogQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQqL1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSBmYWxzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjb25zdGFudCBzb3VyY2Ugbm9kZSB3aGljaCBnZW5lcmF0ZXMgdGhlIHNpZ25hbFxuXHRcdFx0ICogQHR5cGUge0NvbnN0YW50U291cmNlTm9kZX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZSA9IHRoaXMuY29udGV4dC5jcmVhdGVDb25zdGFudFNvdXJjZSgpO1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5fY29uc3RhbnRTb3VyY2Uub2Zmc2V0O1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG5vZGUgd2hlcmUgdGhlIGNvbnN0YW50IHNpZ25hbCB2YWx1ZSBpcyBzY2FsZWQuXG5cdFx0XHQgKiBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLl9jb25zdGFudFNvdXJjZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBub2RlIHdoZXJlIHRoZSB2YWx1ZSBpcyBzZXQuXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5QYXJhbX1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5fcGFyYW0gPSB0aGlzLm91dHB1dC5vZmZzZXQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TaWduYWwsIFRvbmUuUGFyYW0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2YWx1ZSc6IDAsXG5cdCAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlZmF1bHQsXG5cdCAgICAgICAgJ2NvbnZlcnQnOiB0cnVlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFdoZW4gc2lnbmFscyBjb25uZWN0IHRvIG90aGVyIHNpZ25hbHMgb3IgQXVkaW9QYXJhbXMsXG5cdFx0ICogIHRoZXkgdGFrZSBvdmVyIHRoZSBvdXRwdXQgdmFsdWUgb2YgdGhhdCBzaWduYWwgb3IgQXVkaW9QYXJhbS5cblx0XHQgKiAgRm9yIGFsbCBvdGhlciBub2RlcywgdGhlIGJlaGF2aW9yIGlzIHRoZSBzYW1lIGFzIGEgZGVmYXVsdCA8Y29kZT5jb25uZWN0PC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAb3ZlcnJpZGVcblx0XHQgKiAgQHBhcmFtIHtBdWRpb1BhcmFtfEF1ZGlvTm9kZXxUb25lLlNpZ25hbHxUb25lfSBub2RlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TnVtYmVyPTBdIFRoZSBvdXRwdXQgbnVtYmVyIHRvIGNvbm5lY3QgZnJvbS5cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtpbnB1dE51bWJlcj0wXSBUaGUgaW5wdXQgbnVtYmVyIHRvIGNvbm5lY3QgdG8uXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNpZ25hbH0gdGhpc1xuXHRcdCAqICBAbWV0aG9kXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgLy90aGlzIGlzIGFuIG9wdGltaXphdGlvbiB3aGVyZSB0aGlzIG5vZGUgd2lsbCBmb3J3YXJkIGF1dG9tYXRpb25zXG5cdCAgICAgICAgLy90byBjb25uZWN0ZWQgbm9kZXMgd2l0aG91dCBhbnkgc2lnbmFsIGlmIHBvc3NpYmxlLlxuXHQgICAgICAgIGlmICh0aGlzLl9pc1BhcmFtKG5vZGUpICYmICF0aGlzLl9zb3VyY2VTdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMucHVzaChub2RlKTtcblx0ICAgICAgICAgICAgbm9kZS5vdmVycmlkZGVuID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fYXBwbHlBdXRvbWF0aW9ucyhub2RlKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VTdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50U291cmNlLnN0YXJ0KDApO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRha2VzIGEgbm9kZSBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBpZiBpdCBpcyBhIFBhcmFtIG9yIEF1ZGlvUGFyYW1cblx0XHQgKiBAcGFyYW0gIHsqfSBub2RlIFRoZSBub2RlIHRvIHRlc3Rcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX2lzUGFyYW0gPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlBhcmFtICYmIFRvbmUuUGFyYW0gPT09IG5vZGUuY29uc3RydWN0b3IgfHwgbm9kZSBpbnN0YW5jZW9mIEF1ZGlvUGFyYW07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRGlzY2FyZCB0aGUgb3B0aW1pemF0aW9uIGFuZCBjb25uZWN0IGFsbCBvZiB0aGUgcHJveGllc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuX2Nvbm5lY3RQcm94aWVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghdGhpcy5fc291cmNlU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2Uuc3RhcnQoMCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3Byb3hpZXMuZm9yRWFjaChmdW5jdGlvbiAocHJveHkpIHtcblx0ICAgICAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5jb25uZWN0LmNhbGwodGhpcywgcHJveHkpO1xuXHQgICAgICAgICAgICBpZiAocHJveHkuX3Byb3hpZXMpIHtcblx0ICAgICAgICAgICAgICAgIHByb3h5Ll9jb25uZWN0UHJveGllcygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2VkIHdoZW4gYSBub2RlIGlzIGNvbm5lY3RlZCB0byB0aGlzXG5cdFx0ICogQHBhcmFtICB7QXVkaW9Ob2RlfSBmcm9tXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5fb25Db25uZWN0ID0gZnVuY3Rpb24gKGZyb20pIHtcblx0ICAgICAgICBpZiAoIXRoaXMuX2lzUGFyYW0oZnJvbSkpIHtcblx0ICAgICAgICAgICAgLy9jb25uZWN0IGFsbCB0aGUgcHJveGllc1xuXHQgICAgICAgICAgICB0aGlzLl9jb25uZWN0UHJveGllcygpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBBcHBseSBhbGwgdGhlIGN1cnJlbnQgYXV0b21hdGlvbnMgdG8gdGhlIGdpdmVuIHBhcmFtZXRlclxuXHRcdCAqIEBwYXJhbSAge0F1ZGlvUGFyYW19IHBhcmFtXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5fYXBwbHlBdXRvbWF0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbSkge1xuXHQgICAgICAgIHZhciBub3cgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XG5cdCAgICAgICAgcGFyYW0uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKG5vdyk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWwgPSB0aGlzLmdldFZhbHVlQXRUaW1lKG5vdyk7XG5cdCAgICAgICAgcGFyYW0uc2V0VmFsdWVBdFRpbWUoY3VycmVudFZhbCwgbm93KTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuZm9yRWFjaEZyb20obm93LCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgcGFyYW1bZXZlbnQudHlwZV0oZXZlbnQudmFsdWUsIGV2ZW50LnRpbWUsIGV2ZW50LmNvbnN0YW50KTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBEaXNjb25uZWN0IGZyb20gdGhlIGdpdmVuIG5vZGUgb3IgYWxsIG5vZGVzIGlmIG5vIHBhcmFtIGlzIGdpdmVuLlxuXHRcdCAqIEBwYXJhbSAge0F1ZGlvTm9kZXxBdWRpb1BhcmFtfSBub2RlXG5cdFx0ICogQHJldHVybiB7VG9uZS5TaWduYWx9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9wcm94aWVzLmluY2x1ZGVzKG5vZGUpKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3Byb3hpZXMuaW5kZXhPZihub2RlKTtcblx0ICAgICAgICAgICAgdGhpcy5fcHJveGllcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoIW5vZGUpIHtcblx0ICAgICAgICAgICAgLy9ubyBhcmd1bWVudCwgZGlzY29ubmVjdCBldmVyeXRoaW5nXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBbXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgY3VycmVudCBzaWduYWwgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBXaGVuIHRvIGdldCB0aGUgc2lnbmFsIHZhbHVlXG5cdFx0ICogQHJldHVybiB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmdldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fcGFyYW0uZ2V0VmFsdWVBdFRpbWUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmFtLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlBhcmFtLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvL3dyYXAgYWxsIG9mIHRoZSBhdXRvbWF0aW9uIG1ldGhvZHNcblx0ICAgIFtcblx0ICAgICAgICAnc2V0VmFsdWVBdFRpbWUnLFxuXHQgICAgICAgICdsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZScsXG5cdCAgICAgICAgJ2V4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUnLFxuXHQgICAgICAgICdzZXRUYXJnZXRBdFRpbWUnXG5cdCAgICBdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuXHQgICAgICAgIHZhciBwcmV2aW91c01ldGhvZCA9IFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0ICAgICAgICAgICAgcHJldmlvdXNNZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgYXJnc1swXSA9IHRoaXMuX2Zyb21Vbml0cyhhcmdzWzBdKTtcblx0ICAgICAgICAgICAgYXJnc1sxXSA9IHRoaXMudG9TZWNvbmRzKGFyZ3NbMV0pO1xuXHQgICAgICAgICAgICAvL2FwcGx5IGl0IHRvIHRoZSBwcm94aWVzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMuZm9yRWFjaChmdW5jdGlvbiAoc2lnbmFsKSB7XG5cdCAgICAgICAgICAgICAgICBzaWduYWxbbWV0aG9kXS5hcHBseShzaWduYWwsIGFyZ3MpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9O1xuXHQgICAgfSk7XG5cdCAgICBbXG5cdCAgICAgICAgJ2NhbmNlbFNjaGVkdWxlZFZhbHVlcycsXG5cdCAgICAgICAgJ2NhbmNlbEFuZEhvbGRBdFRpbWUnXG5cdCAgICBdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuXHQgICAgICAgIHZhciBwcmV2aW91c01ldGhvZCA9IFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0ICAgICAgICAgICAgcHJldmlvdXNNZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgYXJnc1swXSA9IHRoaXMudG9TZWNvbmRzKGFyZ3NbMF0pO1xuXHQgICAgICAgICAgICAvL2FwcGx5IGl0IHRvIHRoZSBwcm94aWVzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb3hpZXMuZm9yRWFjaChmdW5jdGlvbiAoc2lnbmFsKSB7XG5cdCAgICAgICAgICAgICAgICBzaWduYWxbbWV0aG9kXS5hcHBseShzaWduYWwsIGFyZ3MpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9O1xuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jb25zdGFudFNvdXJjZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29uc3RhbnRTb3VyY2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Byb3hpZXMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNpZ25hbDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFBvdyBhcHBsaWVzIGFuIGV4cG9uZW50IHRvIHRoZSBpbmNvbWluZyBzaWduYWwuIFRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgICAgICAgIG11c3QgYmUgQXVkaW9SYW5nZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gZXhwIFRoZSBleHBvbmVudCB0byBhcHBseSB0byB0aGUgaW5jb21pbmcgc2lnbmFsLCBtdXN0IGJlIGF0IGxlYXN0IDIuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwb3cgPSBuZXcgVG9uZS5Qb3coMik7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgwLjUpLmNvbm5lY3QocG93KTtcblx0XHQgKiAvL291dHB1dCBvZiBwb3cgaXMgMC4yNS4gXG5cdFx0ICovXG5cdCAgICBUb25lLlBvdyA9IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIHRoZSBleHBvbmVudFxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHAgPSBUb25lLmRlZmF1bHRBcmcoZXhwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V4cFNjYWxlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIodGhpcy5fZXhwRnVuYyh0aGlzLl9leHApLCA4MTkyKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBvdywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB2YWx1ZSBvZiB0aGUgZXhwb25lbnQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUG93I1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBvdy5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAgPSBleHA7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cFNjYWxlci5zZXRNYXAodGhpcy5fZXhwRnVuYyh0aGlzLl9leHApKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZnVuY3Rpb24gd2hpY2ggbWFwcyB0aGUgd2F2ZXNoYXBlclxuXHRcdCAqICBAcGFyYW0gICB7bnVtYmVyfSBleHBcblx0XHQgKiAgQHJldHVybiB7ZnVuY3Rpb259XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBvdy5wcm90b3R5cGUuX2V4cEZ1bmMgPSBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIE1hdGgucG93KE1hdGguYWJzKHZhbCksIGV4cCk7XG5cdCAgICAgICAgfTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvd30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb3cucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZXhwU2NhbGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9leHBTY2FsZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBvdztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkVudmVsb3BlIGlzIGFuIFtBRFNSXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW50aGVzaXplciNBRFNSX2VudmVsb3BlKVxuXHRcdCAqICAgICAgICAgIGVudmVsb3BlIGdlbmVyYXRvci4gVG9uZS5FbnZlbG9wZSBvdXRwdXRzIGEgc2lnbmFsIHdoaWNoXG5cdFx0ICogICAgICAgICAgY2FuIGJlIGNvbm5lY3RlZCB0byBhbiBBdWRpb1BhcmFtIG9yIFRvbmUuU2lnbmFsLlxuXHRcdCAqICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy9lL2VhL0FEU1JfcGFyYW1ldGVyLnN2Z1wiPlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2F0dGFja10gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGUgdG8gZ28gZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIDAgdG8gaXQncyBtYXhpbXVtIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdFRoZSBwZXJpb2Qgb2YgdGltZSBhZnRlciB0aGUgYXR0YWNrIHRoYXQgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICBcdHRvIGZhbGwgdG8gdGhlIHN1c3RhaW4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzdXN0YWluXVx0VGhlIHBlcmNlbnQgb2YgdGhlIG1heGltdW0gdmFsdWUgdGhhdCB0aGUgZW52ZWxvcGUgcmVzdHMgYXQgdW50aWxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR0aGUgcmVsZWFzZSBpcyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHRUaGUgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkIGl0IHRha2VzIHRvIHJlYWNoIDAuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hbiBhbXBsaXR1ZGUgZW52ZWxvcGVcblx0XHQgKiB2YXIgZ2Fpbk5vZGUgPSBUb25lLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHRcdCAqIHZhciBlbnYgPSBuZXcgVG9uZS5FbnZlbG9wZSh7XG5cdFx0ICogXHRcImF0dGFja1wiIDogMC4xLFxuXHRcdCAqIFx0XCJkZWNheVwiIDogMC4yLFxuXHRcdCAqIFx0XCJzdXN0YWluXCIgOiAxLFxuXHRcdCAqIFx0XCJyZWxlYXNlXCIgOiAwLjgsXG5cdFx0ICogfSk7XG5cdFx0ICogZW52LmNvbm5lY3QoZ2Fpbk5vZGUuZ2Fpbik7XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vZ2V0IGFsbCBvZiB0aGUgZGVmYXVsdHNcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAnZGVjYXknLFxuXHQgICAgICAgICAgICAnc3VzdGFpbicsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRW52ZWxvcGUpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlbiB0cmlnZ2VyQXR0YWNrIGlzIGNhbGxlZCwgdGhlIGF0dGFjayB0aW1lIGlzIHRoZSBhbW91bnQgb2Zcblx0XHRcdCAqICB0aW1lIGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGUgdG8gcmVhY2ggaXQncyBtYXhpbXVtIHZhbHVlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5hdHRhY2sgPSBvcHRpb25zLmF0dGFjaztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBZnRlciB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlLCB0aGUgdmFsdWUgd2lsbCBmYWxsXG5cdFx0XHQgKiAgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIGRlY2F5IHRpbWUgdG8gaXQncyBzdXN0YWluIHZhbHVlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWNheSA9IG9wdGlvbnMuZGVjYXk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBcdFRoZSBzdXN0YWluIHZhbHVlIGlzIHRoZSB2YWx1ZVxuXHRcdFx0ICogXHR3aGljaCB0aGUgZW52ZWxvcGUgcmVzdHMgYXQgYWZ0ZXIgdHJpZ2dlckF0dGFjayBpc1xuXHRcdFx0ICogXHRjYWxsZWQsIGJ1dCBiZWZvcmUgdHJpZ2dlclJlbGVhc2UgaXMgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnN1c3RhaW4gPSBvcHRpb25zLnN1c3RhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWZ0ZXIgdHJpZ2dlclJlbGVhc2UgaXMgY2FsbGVkLCB0aGUgZW52ZWxvcGUnc1xuXHRcdFx0ICogIHZhbHVlIHdpbGwgZmFsbCB0byBpdCdzIG1pbWludW0gdmFsdWUgb3ZlciB0aGVcblx0XHRcdCAqICBkdXJhdGlvbiBvZiB0aGUgcmVsZWFzZSB0aW1lLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gb3B0aW9ucy5yZWxlYXNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBuZXh0IHRpbWUgdGhlIGVudmVsb3BlIGlzIGF0IHN0YW5kYnlcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9ICdsaW5lYXInO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBuZXh0IHRpbWUgdGhlIGVudmVsb3BlIGlzIGF0IHN0YW5kYnlcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSAnZXhwb25lbnRpYWwnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NpZyA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2lnbmFsKDApO1xuXHQgICAgICAgIC8vc2V0IHRoZSBhdHRhY2tDdXJ2ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLmF0dGFja0N1cnZlID0gb3B0aW9ucy5hdHRhY2tDdXJ2ZTtcblx0ICAgICAgICB0aGlzLnJlbGVhc2VDdXJ2ZSA9IG9wdGlvbnMucmVsZWFzZUN1cnZlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRW52ZWxvcGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkVudmVsb3BlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAnc3VzdGFpbic6IDAuNSxcblx0ICAgICAgICAncmVsZWFzZSc6IDEsXG5cdCAgICAgICAgJ2F0dGFja0N1cnZlJzogJ2xpbmVhcicsXG5cdCAgICAgICAgJ3JlbGVhc2VDdXJ2ZSc6ICdleHBvbmVudGlhbCdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBlbnZlbG9wZS4gVXNlZnVsIGZvclxuXHRcdCAqIHN5bmNyb25pemluZyB2aXN1YWwgb3V0cHV0IHRvIHRoZSBlbnZlbG9wZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5FbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHZhbHVlXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2hhcGUgb2YgdGhlIGF0dGFjay5cblx0XHQgKiBDYW4gYmUgYW55IG9mIHRoZXNlIHN0cmluZ3M6XG5cdFx0ICogPHVsPlxuXHRcdCAqICAgPGxpPmxpbmVhcjwvbGk+XG5cdFx0ICogICA8bGk+ZXhwb25lbnRpYWw8L2xpPlxuXHRcdCAqICAgPGxpPnNpbmU8L2xpPlxuXHRcdCAqICAgPGxpPmNvc2luZTwvbGk+XG5cdFx0ICogICA8bGk+Ym91bmNlPC9saT5cblx0XHQgKiAgIDxsaT5yaXBwbGU8L2xpPlxuXHRcdCAqICAgPGxpPnN0ZXA8L2xpPlxuXHRcdCAqIDwvdWw+XG5cdFx0ICogQ2FuIGFsc28gYmUgYW4gYXJyYXkgd2hpY2ggZGVzY3JpYmVzIHRoZSBjdXJ2ZS4gVmFsdWVzXG5cdFx0ICogaW4gdGhlIGFycmF5IGFyZSBldmVubHkgc3ViZGl2aWRlZCBhbmQgbGluZWFybHlcblx0XHQgKiBpbnRlcnBvbGF0ZWQgb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhlIGF0dGFjay5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5FbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfEFycmF5fVxuXHRcdCAqIEBuYW1lIGF0dGFja0N1cnZlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBlbnYuYXR0YWNrQ3VydmUgPSBcImxpbmVhclwiO1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gYWxzbyBiZSBhbiBhcnJheVxuXHRcdCAqIGVudi5hdHRhY2tDdXJ2ZSA9IFswLCAwLjIsIDAuMywgMC40LCAxXVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLCAnYXR0YWNrQ3VydmUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmIChUb25lLmlzU3RyaW5nKHRoaXMuX2F0dGFja0N1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFja0N1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNBcnJheSh0aGlzLl9hdHRhY2tDdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vbG9vayB1cCB0aGUgbmFtZSBpbiB0aGUgY3VydmVzIGFycmF5XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciB0eXBlIGluIFRvbmUuRW52ZWxvcGUuVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGVbdHlwZV0uSW4gPT09IHRoaXMuX2F0dGFja0N1cnZlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZSBhcnJheVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFja0N1cnZlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjdXJ2ZSkge1xuXHQgICAgICAgICAgICAvL2NoZWNrIGlmIGl0J3MgYSB2YWxpZCB0eXBlXG5cdCAgICAgICAgICAgIGlmIChUb25lLkVudmVsb3BlLlR5cGUuaGFzT3duUHJvcGVydHkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY3VydmVEZWYgPSBUb25lLkVudmVsb3BlLlR5cGVbY3VydmVdO1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3QoY3VydmVEZWYpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBjdXJ2ZURlZi5Jbjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBjdXJ2ZURlZjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkoY3VydmUpKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hdHRhY2tDdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkVudmVsb3BlOiBpbnZhbGlkIGN1cnZlOiAnICsgY3VydmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2hhcGUgb2YgdGhlIHJlbGVhc2UuIFNlZSB0aGUgYXR0YWNrIGN1cnZlIHR5cGVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd8QXJyYXl9XG5cdFx0ICogQG5hbWUgcmVsZWFzZUN1cnZlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBlbnYucmVsZWFzZUN1cnZlID0gXCJsaW5lYXJcIjtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkVudmVsb3BlLnByb3RvdHlwZSwgJ3JlbGVhc2VDdXJ2ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNTdHJpbmcodGhpcy5fcmVsZWFzZUN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbGVhc2VDdXJ2ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzQXJyYXkodGhpcy5fcmVsZWFzZUN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgLy9sb29rIHVwIHRoZSBuYW1lIGluIHRoZSBjdXJ2ZXMgYXJyYXlcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHR5cGUgaW4gVG9uZS5FbnZlbG9wZS5UeXBlKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKFRvbmUuRW52ZWxvcGUuVHlwZVt0eXBlXS5PdXQgPT09IHRoaXMuX3JlbGVhc2VDdXJ2ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvL290aGVyd2lzZSBqdXN0IHJldHVybiB0aGUgYXJyYXlcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlQ3VydmU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIC8vY2hlY2sgaWYgaXQncyBhIHZhbGlkIHR5cGVcblx0ICAgICAgICAgICAgaWYgKFRvbmUuRW52ZWxvcGUuVHlwZS5oYXNPd25Qcm9wZXJ0eShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjdXJ2ZURlZiA9IFRvbmUuRW52ZWxvcGUuVHlwZVtjdXJ2ZV07XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc09iamVjdChjdXJ2ZURlZikpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlQ3VydmUgPSBjdXJ2ZURlZi5PdXQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IGN1cnZlRGVmO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNBcnJheShjdXJ2ZSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IGN1cnZlO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkVudmVsb3BlOiBpbnZhbGlkIGN1cnZlOiAnICsgY3VydmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrL2RlY2F5IHBvcnRpb24gb2YgdGhlIEFEU1IgZW52ZWxvcGUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgYXR0YWNrIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgZW52ZWxvcGUgc2NhbGVzIHRoZSB2YWxlcy5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgYmV0d2VlbiAwLTFcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy90cmlnZ2VyIHRoZSBhdHRhY2sgMC41IHNlY29uZHMgZnJvbSBub3cgd2l0aCBhIHZlbG9jaXR5IG9mIDAuMlxuXHRcdCAqICBlbnYudHJpZ2dlckF0dGFjayhcIiswLjVcIiwgMC4yKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsQXR0YWNrID0gdGhpcy50b1NlY29uZHModGhpcy5hdHRhY2spO1xuXHQgICAgICAgIHZhciBhdHRhY2sgPSBvcmlnaW5hbEF0dGFjaztcblx0ICAgICAgICB2YXIgZGVjYXkgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLmRlY2F5KTtcblx0ICAgICAgICB2ZWxvY2l0eSA9IFRvbmUuZGVmYXVsdEFyZyh2ZWxvY2l0eSwgMSk7XG5cdCAgICAgICAgLy9jaGVjayBpZiBpdCdzIG5vdCBhIGNvbXBsZXRlIGF0dGFja1xuXHQgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPiAwKSB7XG5cdCAgICAgICAgICAgIC8vc3VidHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgZnJvbSB0aGUgYXR0YWNrIHRpbWVcblx0ICAgICAgICAgICAgdmFyIGF0dGFja1JhdGUgPSAxIC8gYXR0YWNrO1xuXHQgICAgICAgICAgICB2YXIgcmVtYWluaW5nRGlzdGFuY2UgPSAxIC0gY3VycmVudFZhbHVlO1xuXHQgICAgICAgICAgICAvL3RoZSBhdHRhY2sgaXMgbm93IHRoZSByZW1haW5pbmcgdGltZVxuXHQgICAgICAgICAgICBhdHRhY2sgPSByZW1haW5pbmdEaXN0YW5jZSAvIGF0dGFja1JhdGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vYXR0YWNrXG5cdCAgICAgICAgaWYgKHRoaXMuX2F0dGFja0N1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICB0aGlzLl9zaWcubGluZWFyUmFtcFRvKHZlbG9jaXR5LCBhdHRhY2ssIHRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYXR0YWNrQ3VydmUgPT09ICdleHBvbmVudGlhbCcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLnRhcmdldFJhbXBUbyh2ZWxvY2l0eSwgYXR0YWNrLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGF0dGFjayA+IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLmNhbmNlbEFuZEhvbGRBdFRpbWUodGltZSk7XG5cdCAgICAgICAgICAgIHZhciBjdXJ2ZSA9IHRoaXMuX2F0dGFja0N1cnZlO1xuXHQgICAgICAgICAgICAvL3Rha2Ugb25seSBhIHBvcnRpb24gb2YgdGhlIGN1cnZlXG5cdCAgICAgICAgICAgIGlmIChhdHRhY2sgPCBvcmlnaW5hbEF0dGFjaykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHBlcmNlbnRDb21wbGV0ZSA9IDEgLSBhdHRhY2sgLyBvcmlnaW5hbEF0dGFjaztcblx0ICAgICAgICAgICAgICAgIHZhciBzbGljZUluZGV4ID0gTWF0aC5mbG9vcihwZXJjZW50Q29tcGxldGUgKiB0aGlzLl9hdHRhY2tDdXJ2ZS5sZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgY3VydmUgPSB0aGlzLl9hdHRhY2tDdXJ2ZS5zbGljZShzbGljZUluZGV4KTtcblx0ICAgICAgICAgICAgICAgIC8vdGhlIGZpcnN0IGluZGV4IGlzIHRoZSBjdXJyZW50IHZhbHVlXG5cdCAgICAgICAgICAgICAgICBjdXJ2ZVswXSA9IGN1cnJlbnRWYWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9zaWcuc2V0VmFsdWVDdXJ2ZUF0VGltZShjdXJ2ZSwgdGltZSwgYXR0YWNrLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vZGVjYXlcblx0ICAgICAgICBpZiAoZGVjYXkpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2lnLnRhcmdldFJhbXBUbyh2ZWxvY2l0eSAqIHRoaXMuc3VzdGFpbiwgZGVjYXksIGF0dGFjayArIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlcnMgdGhlIHJlbGVhc2Ugb2YgdGhlIGVudmVsb3BlLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGUgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICAvL3RyaWdnZXIgcmVsZWFzZSBpbW1lZGlhdGVseVxuXHRcdCAqICBlbnYudHJpZ2dlclJlbGVhc2UoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA+IDApIHtcblx0ICAgICAgICAgICAgdmFyIHJlbGVhc2UgPSB0aGlzLnRvU2Vjb25kcyh0aGlzLnJlbGVhc2UpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fcmVsZWFzZUN1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2lnLmxpbmVhclJhbXBUbygwLCByZWxlYXNlLCB0aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9yZWxlYXNlQ3VydmUgPT09ICdleHBvbmVudGlhbCcpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NpZy50YXJnZXRSYW1wVG8oMCwgcmVsZWFzZSwgdGltZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY3VydmUgPSB0aGlzLl9yZWxlYXNlQ3VydmU7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc0FycmF5KGN1cnZlKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZy5jYW5jZWxBbmRIb2xkQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZy5zZXRWYWx1ZUN1cnZlQXRUaW1lKGN1cnZlLCB0aW1lLCByZWxlYXNlLCBjdXJyZW50VmFsdWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHNjaGVkdWxlZCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZS4gVGhpcyB3aWxsXG5cdFx0ICogIHJldHVybiB0aGUgdW5jb252ZXJ0ZWQgKHJhdykgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBUaGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zaWcuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRyaWdnZXJBdHRhY2tSZWxlYXNlIGlzIHNob3J0aGFuZCBmb3IgdHJpZ2dlckF0dGFjaywgdGhlbiB3YWl0aW5nXG5cdFx0ICogIHNvbWUgZHVyYXRpb24sIHRoZW4gdHJpZ2dlclJlbGVhc2UuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gZHVyYXRpb24gVGhlIGR1cmF0aW9uIG9mIHRoZSBzdXN0YWluLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgYXR0YWNrIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gVGhlIHZlbG9jaXR5IG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgdGhlIGF0dGFjayBhbmQgdGhlbiB0aGUgcmVsZWFzZSBhZnRlciAwLjYgc2Vjb25kcy5cblx0XHQgKiBlbnYudHJpZ2dlckF0dGFja1JlbGVhc2UoMC42KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbHMgYWxsIHNjaGVkdWxlZCBlbnZlbG9wZSBjaGFuZ2VzIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBhZnRlclxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FbnZlbG9wZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKGFmdGVyKSB7XG5cdCAgICAgICAgdGhpcy5fc2lnLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhhZnRlcik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEJvcnJvd3MgdGhlIGNvbm5lY3QgbWV0aG9kIGZyb20gVG9uZS5TaWduYWwuXG5cdFx0ICogIEBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuY29ubmVjdCA9IFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdDtcblx0ICAgIC8qKlxuXHQgXHQgKiAgR2VuZXJhdGUgc29tZSBjb21wbGV4IGVudmVsb3BlIGN1cnZlcy5cblx0IFx0ICovXG5cdCAgICAoZnVuY3Rpb24gX2NyZWF0ZUN1cnZlcygpIHtcblx0ICAgICAgICB2YXIgY3VydmVMZW4gPSAxMjg7XG5cdCAgICAgICAgdmFyIGksIGs7XG5cdCAgICAgICAgLy9jb3NpbmUgY3VydmVcblx0ICAgICAgICB2YXIgY29zaW5lQ3VydmUgPSBbXTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBjb3NpbmVDdXJ2ZVtpXSA9IE1hdGguc2luKGkgLyAoY3VydmVMZW4gLSAxKSAqIChNYXRoLlBJIC8gMikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3JpcHBsZSBjdXJ2ZVxuXHQgICAgICAgIHZhciByaXBwbGVDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIHZhciByaXBwbGVDdXJ2ZUZyZXEgPSA2LjQ7XG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnZlTGVuIC0gMTsgaSsrKSB7XG5cdCAgICAgICAgICAgIGsgPSBpIC8gKGN1cnZlTGVuIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciBzaW5lV2F2ZSA9IE1hdGguc2luKGsgKiAoTWF0aC5QSSAqIDIpICogcmlwcGxlQ3VydmVGcmVxIC0gTWF0aC5QSSAvIDIpICsgMTtcblx0ICAgICAgICAgICAgcmlwcGxlQ3VydmVbaV0gPSBzaW5lV2F2ZSAvIDEwICsgayAqIDAuODM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJpcHBsZUN1cnZlW2N1cnZlTGVuIC0gMV0gPSAxO1xuXHQgICAgICAgIC8vc3RhaXJzIGN1cnZlXG5cdCAgICAgICAgdmFyIHN0YWlyc0N1cnZlID0gW107XG5cdCAgICAgICAgdmFyIHN0ZXBzID0gNTtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3VydmVMZW47IGkrKykge1xuXHQgICAgICAgICAgICBzdGFpcnNDdXJ2ZVtpXSA9IE1hdGguY2VpbChpIC8gKGN1cnZlTGVuIC0gMSkgKiBzdGVwcykgLyBzdGVwcztcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9pbi1vdXQgZWFzaW5nIGN1cnZlXG5cdCAgICAgICAgdmFyIHNpbmVDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGsgPSBpIC8gKGN1cnZlTGVuIC0gMSk7XG5cdCAgICAgICAgICAgIHNpbmVDdXJ2ZVtpXSA9IDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hIGJvdW5jZSBjdXJ2ZVxuXHQgICAgICAgIHZhciBib3VuY2VDdXJ2ZSA9IFtdO1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJ2ZUxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGsgPSBpIC8gKGN1cnZlTGVuIC0gMSk7XG5cdCAgICAgICAgICAgIHZhciBmcmVxID0gTWF0aC5wb3coaywgMykgKiA0ICsgMC4yO1xuXHQgICAgICAgICAgICB2YXIgdmFsID0gTWF0aC5jb3MoZnJlcSAqIE1hdGguUEkgKiAyICogayk7XG5cdCAgICAgICAgICAgIGJvdW5jZUN1cnZlW2ldID0gTWF0aC5hYnModmFsICogKDEgLSBrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEludmVydCBhIHZhbHVlIGN1cnZlIHRvIG1ha2UgaXQgd29yayBmb3IgdGhlIHJlbGVhc2Vcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgZnVuY3Rpb24gaW52ZXJ0Q3VydmUoY3VydmUpIHtcblx0ICAgICAgICAgICAgdmFyIG91dCA9IG5ldyBBcnJheShjdXJ2ZS5sZW5ndGgpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGN1cnZlLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICBvdXRbal0gPSAxIC0gY3VydmVbal07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIG91dDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcmV2ZXJzZSB0aGUgY3VydmVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgZnVuY3Rpb24gcmV2ZXJzZUN1cnZlKGN1cnZlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBjdXJ2ZS5zbGljZSgwKS5yZXZlcnNlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGF0dGFjayBhbmQgcmVsZWFzZSBjdXJ2ZSBhcnJheXNcblx0XHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5UeXBlID0ge1xuXHQgICAgICAgICAgICAnbGluZWFyJzogJ2xpbmVhcicsXG5cdCAgICAgICAgICAgICdleHBvbmVudGlhbCc6ICdleHBvbmVudGlhbCcsXG5cdCAgICAgICAgICAgICdib3VuY2UnOiB7XG5cdCAgICAgICAgICAgICAgICBJbjogaW52ZXJ0Q3VydmUoYm91bmNlQ3VydmUpLFxuXHQgICAgICAgICAgICAgICAgT3V0OiBib3VuY2VDdXJ2ZVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnY29zaW5lJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IGNvc2luZUN1cnZlLFxuXHQgICAgICAgICAgICAgICAgT3V0OiByZXZlcnNlQ3VydmUoY29zaW5lQ3VydmUpXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdzdGVwJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IHN0YWlyc0N1cnZlLFxuXHQgICAgICAgICAgICAgICAgT3V0OiBpbnZlcnRDdXJ2ZShzdGFpcnNDdXJ2ZSlcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ3JpcHBsZSc6IHtcblx0ICAgICAgICAgICAgICAgIEluOiByaXBwbGVDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogaW52ZXJ0Q3VydmUocmlwcGxlQ3VydmUpXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdzaW5lJzoge1xuXHQgICAgICAgICAgICAgICAgSW46IHNpbmVDdXJ2ZSxcblx0ICAgICAgICAgICAgICAgIE91dDogaW52ZXJ0Q3VydmUoc2luZUN1cnZlKVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfTtcblx0ICAgIH0oKSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGlzY29ubmVjdCBhbmQgZGlzcG9zZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuRW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaWcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NpZyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYXR0YWNrQ3VydmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3JlbGVhc2VDdXJ2ZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSBpcyBhIFRvbmUuRW52ZWxvcGUgY29ubmVjdGVkIHRvIGEgZ2FpbiBub2RlLlxuXHRcdCAqICAgICAgICAgIFVubGlrZSBUb25lLkVudmVsb3BlLCB3aGljaCBvdXRwdXRzIHRoZSBlbnZlbG9wZSdzIHZhbHVlLCBUb25lLkFtcGxpdHVkZUVudmVsb3BlIGFjY2VwdHNcblx0XHQgKiAgICAgICAgICBhbiBhdWRpbyBzaWduYWwgYXMgdGhlIGlucHV0IGFuZCB3aWxsIGFwcGx5IHRoZSBlbnZlbG9wZSB0byB0aGUgYW1wbGl0dWRlXG5cdFx0ICogICAgICAgICAgb2YgdGhlIHNpZ25hbC4gUmVhZCBtb3JlIGFib3V0IEFEU1IgRW52ZWxvcGVzIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5bnRoZXNpemVyI0FEU1JfZW52ZWxvcGUpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbnZlbG9wZX1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja10gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHRha2VzIGZvciB0aGUgZW52ZWxvcGUgdG8gZ28gZnJvbVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgdG8gaXQncyBtYXhpbXVtIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdFRoZSBwZXJpb2Qgb2YgdGltZSBhZnRlciB0aGUgYXR0YWNrIHRoYXQgaXQgdGFrZXMgZm9yIHRoZSBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICBcdHRvIGZhbGwgdG8gdGhlIHN1c3RhaW4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzdXN0YWluXVx0VGhlIHBlcmNlbnQgb2YgdGhlIG1heGltdW0gdmFsdWUgdGhhdCB0aGUgZW52ZWxvcGUgcmVzdHMgYXQgdW50aWxcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHR0aGUgcmVsZWFzZSBpcyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHRUaGUgYW1vdW50IG9mIHRpbWUgYWZ0ZXIgdGhlIHJlbGVhc2UgaXMgdHJpZ2dlcmVkIGl0IHRha2VzIHRvIHJlYWNoIDAuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGFtcEVudiA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKHtcblx0XHQgKiBcdFwiYXR0YWNrXCI6IDAuMSxcblx0XHQgKiBcdFwiZGVjYXlcIjogMC4yLFxuXHRcdCAqIFx0XCJzdXN0YWluXCI6IDEuMCxcblx0XHQgKiBcdFwicmVsZWFzZVwiOiAwLjhcblx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdCAqIC8vY3JlYXRlIGFuIG9zY2lsbGF0b3IgYW5kIGNvbm5lY3QgaXRcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QoYW1wRW52KS5zdGFydCgpO1xuXHRcdCAqIC8vdHJpZ2dlciB0aGUgZW52ZWxvcGVzIGF0dGFjayBhbmQgcmVsZWFzZSBcIjh0XCIgYXBhcnRcblx0XHQgKiBhbXBFbnYudHJpZ2dlckF0dGFja1JlbGVhc2UoXCI4dFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dCBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgdGhpcy5fc2lnLmNvbm5lY3QodGhpcy5vdXRwdXQuZ2Fpbik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFtcGxpdHVkZUVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEFuYWx5c2VyTm9kZS5nZXRGbG9hdFRpbWVEb21haW5EYXRhIHBvbHlmaWxsXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIUFuYWx5c2VyTm9kZS5wcm90b3R5cGUuZ2V0RmxvYXRUaW1lRG9tYWluRGF0YSkge1xuXHQgICAgICAgICAgICAvL3JlZmVyZW5jZWQgaHR0cHM6Ly9naXRodWIuY29tL21vaGF5b25hby9nZXQtZmxvYXQtdGltZS1kb21haW4tZGF0YVxuXHQgICAgICAgICAgICBBbmFseXNlck5vZGUucHJvdG90eXBlLmdldEZsb2F0VGltZURvbWFpbkRhdGEgPSBmdW5jdGlvbiAoYXJyYXkpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB1aW50OCA9IG5ldyBVaW50OEFycmF5KGFycmF5Lmxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmdldEJ5dGVUaW1lRG9tYWluRGF0YSh1aW50OCk7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVpbnQ4Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSAodWludDhbaV0gLSAxMjgpIC8gMTI4O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBXcmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIFdlYiBBdWRpbydzXG5cdFx0ICogICAgICAgICAgW0FuYWx5c2VyTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyNpZGwtZGVmLUFuYWx5c2VyTm9kZSkuXG5cdFx0ICogICAgICAgICAgRXh0cmFjdHMgRkZUIG9yIFdhdmVmb3JtIGRhdGEgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nPX0gdHlwZSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGFuYWx5c2lzLCBlaXRoZXIgXCJmZnRcIiwgb3IgXCJ3YXZlZm9ybVwiLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcj19IHNpemUgVGhlIHNpemUgb2YgdGhlIEZGVC4gVmFsdWUgbXVzdCBiZSBhIHBvd2VyIG9mXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnc2l6ZSdcblx0ICAgICAgICBdLCBUb25lLkFuYWx5c2VyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0FuYWx5c2VyTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFuYWx5c2lzIHR5cGVcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBidWZmZXIgdGhhdCB0aGUgRkZUIGRhdGEgaXMgd3JpdHRlbiB0b1xuXHRcdFx0ICogIEB0eXBlIHtUeXBlZEFycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIC8vc2V0IHRoZSB2YWx1ZXMgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5zaXplID0gb3B0aW9ucy5zaXplO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkFuYWx5c2VyLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3NpemUnOiAxMDI0LFxuXHQgICAgICAgICd0eXBlJzogJ2ZmdCcsXG5cdCAgICAgICAgJ3Ntb290aGluZyc6IDAuOFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQb3NzaWJsZSByZXR1cm4gdHlwZXMgb2YgYW5hbHlzZXIuZ2V0VmFsdWUoKVxuXHRcdCAqICBAZW51bSB7U3RyaW5nfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BbmFseXNlci5UeXBlID0ge1xuXHQgICAgICAgIFdhdmVmb3JtOiAnd2F2ZWZvcm0nLFxuXHQgICAgICAgIEZGVDogJ2ZmdCdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUnVuIHRoZSBhbmFseXNpcyBnaXZlbiB0aGUgY3VycmVudCBzZXR0aW5ncyBhbmQgcmV0dXJuIHRoZVxuXHRcdCAqICByZXN1bHQgYXMgYSBUeXBlZEFycmF5LlxuXHRcdCAqICBAcmV0dXJucyB7VHlwZWRBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkFuYWx5c2VyLlR5cGUuRkZUKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLmdldEZsb2F0RnJlcXVlbmN5RGF0YSh0aGlzLl9idWZmZXIpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5BbmFseXNlci5UeXBlLldhdmVmb3JtKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLmdldEZsb2F0VGltZURvbWFpbkRhdGEodGhpcy5fYnVmZmVyKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHNpemUgb2YgYW5hbHlzaXMuIFRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3byBpbiB0aGUgcmFuZ2UgMzIgdG8gMzI3NjguXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkFuYWx5c2VyI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BbmFseXNlci5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291bnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLmZmdFNpemUgPSBzaXplICogMjtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShzaXplKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYW5hbHlzaXMgZnVuY3Rpb24gcmV0dXJuZWQgYnkgYW5hbHlzZXIuZ2V0VmFsdWUoKSwgZWl0aGVyIFwiZmZ0XCIgb3IgXCJ3YXZlZm9ybVwiLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5BbmFseXNlciNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlICE9PSBUb25lLkFuYWx5c2VyLlR5cGUuV2F2ZWZvcm0gJiYgdHlwZSAhPT0gVG9uZS5BbmFseXNlci5UeXBlLkZGVCkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVG9uZS5BbmFseXNlcjogaW52YWxpZCB0eXBlOiAnICsgdHlwZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgMCByZXByZXNlbnRzIG5vIHRpbWUgYXZlcmFnaW5nIHdpdGggdGhlIGxhc3QgYW5hbHlzaXMgZnJhbWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkFuYWx5c2VyI1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHNtb290aGluZ1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQW5hbHlzZXIucHJvdG90eXBlLCAnc21vb3RoaW5nJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc21vb3RoaW5nVGltZUNvbnN0YW50O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZ1RpbWVDb25zdGFudCA9IHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQW5hbHlzZXJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFuYWx5c2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkFuYWx5c2VyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Db21wcmVzc29yIGlzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCB0aGUgV2ViIEF1ZGlvXG5cdFx0ICogICAgICAgICBbRHluYW1pY3NDb21wcmVzc29yTm9kZV0oaHR0cDovL3dlYmF1ZGlvLmdpdGh1Yi5pby93ZWItYXVkaW8tYXBpLyN0aGUtZHluYW1pY3Njb21wcmVzc29ybm9kZS1pbnRlcmZhY2UpLlxuXHRcdCAqICAgICAgICAgQ29tcHJlc3Npb24gcmVkdWNlcyB0aGUgdm9sdW1lIG9mIGxvdWQgc291bmRzIG9yIGFtcGxpZmllcyBxdWlldCBzb3VuZHNcblx0XHQgKiAgICAgICAgIGJ5IG5hcnJvd2luZyBvciBcImNvbXByZXNzaW5nXCIgYW4gYXVkaW8gc2lnbmFsJ3MgZHluYW1pYyByYW5nZS5cblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EeW5hbWljX3JhbmdlX2NvbXByZXNzaW9uKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfE9iamVjdH0gW3RocmVzaG9sZF0gVGhlIHZhbHVlIGFib3ZlIHdoaWNoIHRoZSBjb21wcmVzc2lvbiBzdGFydHMgdG8gYmUgYXBwbGllZC5cblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gW3JhdGlvXSBUaGUgZ2FpbiByZWR1Y3Rpb24gcmF0aW8uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNvbXAgPSBuZXcgVG9uZS5Db21wcmVzc29yKC0zMCwgMyk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbXByZXNzb3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndGhyZXNob2xkJyxcblx0ICAgICAgICAgICAgJ3JhdGlvJ1xuXHQgICAgICAgIF0sIFRvbmUuQ29tcHJlc3Nvcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29tcHJlc3NvciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0R5bmFtaWNzQ29tcHJlc3Nvck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHRocmVzaG9sZCB2YXVlXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9jb21wcmVzc29yLnRocmVzaG9sZCxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlY2liZWxzLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGF0dGFjayBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX2NvbXByZXNzb3IuYXR0YWNrLCBUb25lLlR5cGUuVGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJlbGVhc2UgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fY29tcHJlc3Nvci5yZWxlYXNlLCBUb25lLlR5cGUuVGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGtuZWUgcGFyYW1ldGVyXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMua25lZSA9IG5ldyBUb25lLlBhcmFtKHtcblx0ICAgICAgICAgICAgJ3BhcmFtJzogdGhpcy5fY29tcHJlc3Nvci5rbmVlLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuRGVjaWJlbHMsXG5cdCAgICAgICAgICAgICdjb252ZXJ0JzogZmFsc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcmF0aW8gdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucmF0aW8gPSBuZXcgVG9uZS5QYXJhbSh7XG5cdCAgICAgICAgICAgICdwYXJhbSc6IHRoaXMuX2NvbXByZXNzb3IucmF0aW8sXG5cdCAgICAgICAgICAgICdjb252ZXJ0JzogZmFsc2Vcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL3NldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdrbmVlJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnLFxuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JhdGlvJyxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLnNldChvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNvbXByZXNzb3IsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Db21wcmVzc29yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdyYXRpbyc6IDEyLFxuXHQgICAgICAgICd0aHJlc2hvbGQnOiAtMjQsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAwLjI1LFxuXHQgICAgICAgICdhdHRhY2snOiAwLjAwMyxcblx0ICAgICAgICAna25lZSc6IDMwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNvbXByZXNzb3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ29tcHJlc3Nvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2tuZWUnLFxuXHQgICAgICAgICAgICAncmVsZWFzZScsXG5cdCAgICAgICAgICAgICdhdHRhY2snLFxuXHQgICAgICAgICAgICAncmF0aW8nLFxuXHQgICAgICAgICAgICAndGhyZXNob2xkJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuYXR0YWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmF0dGFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yZWxlYXNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJlbGVhc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnRocmVzaG9sZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yYXRpby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yYXRpbyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5rbmVlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmtuZWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkNvbXByZXNzb3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBZGQgYSBzaWduYWwgYW5kIGEgbnVtYmVyIG9yIHR3byBzaWduYWxzLiBXaGVuIG5vIHZhbHVlIGlzXG5cdFx0ICogICAgICAgICBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IsIFRvbmUuQWRkIHdpbGwgc3VtIDxjb2RlPmlucHV0WzBdPC9jb2RlPlxuXHRcdCAqICAgICAgICAgYW5kIDxjb2RlPmlucHV0WzFdPC9jb2RlPi4gSWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IsIFxuXHRcdCAqICAgICAgICAgdGhlIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGlucHV0LlxuXHRcdCAqICBcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZSBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgVG9uZS5BZGQgd2lsbCBzdW0gdGhlIGZpcnN0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNlY29uZCBpbnB1dHMuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMik7XG5cdFx0ICogdmFyIGFkZCA9IG5ldyBUb25lLkFkZCgyKTtcblx0XHQgKiBzaWduYWwuY29ubmVjdChhZGQpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBhZGQgZXF1YWxzIDRcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2lmIGNvbnN0cnVjdGVkIHdpdGggbm8gYXJndW1lbnRzXG5cdFx0ICogLy9pdCB3aWxsIGFkZCB0aGUgZmlyc3QgYW5kIHNlY29uZCBpbnB1dHNcblx0XHQgKiB2YXIgYWRkID0gbmV3IFRvbmUuQWRkKCk7XG5cdFx0ICogdmFyIHNpZzAgPSBuZXcgVG9uZS5TaWduYWwoMykuY29ubmVjdChhZGQsIDAsIDApO1xuXHRcdCAqIHZhciBzaWcxID0gbmV3IFRvbmUuU2lnbmFsKDQpLmNvbm5lY3QoYWRkLCAwLCAxKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgYWRkIGVxdWFscyA3LiBcblx0XHQgKi9cblx0ICAgIFRvbmUuQWRkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMiwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHN1bW1pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VtID0gdGhpcy5pbnB1dFswXSA9IHRoaXMuaW5wdXRbMV0gPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLlNpZ25hbCh2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fcGFyYW0uY29ubmVjdCh0aGlzLl9zdW0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQWRkLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkFkZH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BZGQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdW0uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQWRkO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIE11bHRpcGx5IHR3byBpbmNvbWluZyBzaWduYWxzLiBPciwgaWYgYSBudW1iZXIgaXMgZ2l2ZW4gaW4gdGhlIGNvbnN0cnVjdG9yLFxuXHRcdCAqICAgICAgICAgIG11bHRpcGxpZXMgdGhlIGluY29taW5nIHNpZ25hbCBieSB0aGF0IHZhbHVlLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gdmFsdWUgQ29uc3RhbnQgdmFsdWUgdG8gbXVsdGlwbGUuIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgcmV0dXJuIHRoZSBwcm9kdWN0IG9mIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGlucHV0c1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoKTtcblx0XHQgKiB2YXIgc2lnQSA9IG5ldyBUb25lLlNpZ25hbCgzKTtcblx0XHQgKiB2YXIgc2lnQiA9IG5ldyBUb25lLlNpZ25hbCg0KTtcblx0XHQgKiBzaWdBLmNvbm5lY3QobXVsdCwgMCwgMCk7XG5cdFx0ICogc2lnQi5jb25uZWN0KG11bHQsIDAsIDEpO1xuXHRcdCAqIC8vb3V0cHV0IG9mIG11bHQgaXMgMTIuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgxMCk7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCgyKS5jb25uZWN0KG11bHQpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBtdWx0IGlzIDIwLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aXBseSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dCBub2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvdXRwdXQgbm9kZVxuXHRcdFx0ICogIGl0IGlzIGFsc28gdGhlIEdhaW5Ob2RlIHdoaWNoIGhhbmRsZXMgdGhlIHNjYWxpbmcgb2YgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKlxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdCA9IHRoaXMuaW5wdXRbMF0gPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgc2NhbGluZyBwYXJhbWV0ZXJcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9QYXJhbX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0WzFdID0gdGhpcy5vdXRwdXQuZ2Fpbjtcblx0ICAgICAgICB0aGlzLnZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKHZhbHVlLCAwKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk11bHRpcGx5LCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTXVsdGlwbHl9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGlwbHkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9tdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYXJhbSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTXVsdGlwbHk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBOZWdhdGUgdGhlIGluY29taW5nIHNpZ25hbC4gaS5lLiBhbiBpbnB1dCBzaWduYWwgb2YgMTAgd2lsbCBvdXRwdXQgLTEwXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG5lZyA9IG5ldyBUb25lLk5lZ2F0ZSgpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoLTIpLmNvbm5lY3QobmVnKTtcblx0XHQgKiAvL291dHB1dCBvZiBuZWcgaXMgcG9zaXRpdmUgMi4gXG5cdFx0ICovXG5cdCAgICBUb25lLk5lZ2F0ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBuZWdhdGlvbiBpcyBkb25lIGJ5IG11bHRpcGx5aW5nIGJ5IC0xXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTXVsdGlwbHkoLTEpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTmVnYXRlLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5lZ2F0ZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5OZWdhdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5OZWdhdGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTdWJ0cmFjdCB0aGUgc2lnbmFsIGNvbm5lY3RlZCB0byA8Y29kZT5pbnB1dFsxXTwvY29kZT4gZnJvbSB0aGUgc2lnbmFsIGNvbm5lY3RlZCBcblx0XHQgKiAgICAgICAgIHRvIDxjb2RlPmlucHV0WzBdPC9jb2RlPi4gSWYgYW4gYXJndW1lbnQgaXMgcHJvdmlkZWQgaW4gdGhlIGNvbnN0cnVjdG9yLCB0aGUgXG5cdFx0ICogICAgICAgICBzaWduYWxzIDxjb2RlPi52YWx1ZTwvY29kZT4gd2lsbCBiZSBzdWJ0cmFjdGVkIGZyb20gdGhlIGluY29taW5nIHNpZ25hbC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IHZhbHVlIFRoZSB2YWx1ZSB0byBzdWJ0cmFjdCBmcm9tIHRoZSBpbmNvbWluZyBzaWduYWwuIElmIHRoZSB2YWx1ZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG9taXR0ZWQsIGl0IHdpbGwgc3VidHJhY3QgdGhlIHNlY29uZCBzaWduYWwgZnJvbSB0aGUgZmlyc3QuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN1YiA9IG5ldyBUb25lLlN1YnRyYWN0KDEpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoNCkuY29ubmVjdChzdWIpO1xuXHRcdCAqIC8vdGhlIG91dHB1dCBvZiBzdWIgaXMgMy4gXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN1YiA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdFx0ICogdmFyIHNpZ0EgPSBuZXcgVG9uZS5TaWduYWwoMTApO1xuXHRcdCAqIHZhciBzaWdCID0gbmV3IFRvbmUuU2lnbmFsKDIuNSk7XG5cdFx0ICogc2lnQS5jb25uZWN0KHN1YiwgMCwgMCk7XG5cdFx0ICogc2lnQi5jb25uZWN0KHN1YiwgMCwgMSk7XG5cdFx0ICogLy9vdXRwdXQgb2Ygc3ViIGlzIDcuNVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TdWJ0cmFjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzdW1taW5nIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N1bSA9IHRoaXMuaW5wdXRbMF0gPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBuZWdhdGUgdGhlIGlucHV0IG9mIHRoZSBzZWNvbmQgaW5wdXQgYmVmb3JlIGNvbm5lY3RpbmcgaXRcblx0XHRcdCAqICB0byB0aGUgc3VtbWluZyBub2RlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk5lZ2F0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbmVnID0gbmV3IFRvbmUuTmVnYXRlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG5vZGUgd2hlcmUgdGhlIHZhbHVlIGlzIHNldFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFyYW0gPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuU2lnbmFsKHZhbHVlKTtcblx0ICAgICAgICB0aGlzLl9wYXJhbS5jaGFpbih0aGlzLl9uZWcsIHRoaXMuX3N1bSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdWJ0cmFjdCwgVG9uZS5TaWduYWwpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWxCYXNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN1YnRyYWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbmVnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9uZWcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N1bS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc3VtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdWJ0cmFjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIENvbnZlcnQgYW4gaW5jb21pbmcgc2lnbmFsIGJldHdlZW4gMCwgMSB0byBhbiBlcXVhbCBwb3dlciBnYWluIHNjYWxlLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBlcVBvd0dhaW4gPSBuZXcgVG9uZS5FcXVhbFBvd2VyR2FpbigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FcXVhbFBvd2VyR2FpbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lcVBvd2VyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGlmIChNYXRoLmFicyh2YWwpIDwgMC4wMDEpIHtcblx0ICAgICAgICAgICAgICAgIC8vc2hvdWxkIG91dHB1dCAwIHdoZW4gaW5wdXQgaXMgMFxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5lcXVhbFBvd2VyU2NhbGUodmFsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgNDA5Nik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5FcXVhbFBvd2VyR2FpbiwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FcXVhbFBvd2VyR2Fpbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FcXVhbFBvd2VyR2Fpbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9lcVBvd2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lcVBvd2VyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5FcXVhbFBvd2VyR2Fpbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgIFRvbmUuQ3Jvc3NmYWRlIHByb3ZpZGVzIGVxdWFsIHBvd2VyIGZhZGluZyBiZXR3ZWVuIHR3byBpbnB1dHMuXG5cdFx0ICogICAgICAgICBNb3JlIG9uIGNyb3NzZmFkaW5nIHRlY2huaXF1ZSBbaGVyZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmFkZV8oYXVkaW9fZW5naW5lZXJpbmcpI0Nyb3NzZmFkaW5nKS5cblx0XHQgKlxuXHRcdCAqIEBjb25zdHJ1Y3RvclxuXHRcdCAqIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiBAcGFyYW0ge05vcm1hbFJhbmdlfSBbaW5pdGlhbEZhZGU9MC41XVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIGNyb3NzRmFkZSA9IG5ldyBUb25lLkNyb3NzRmFkZSgwLjUpO1xuXHRcdCAqIC8vY29ubmVjdCBlZmZlY3QgQSB0byBjcm9zc2ZhZGUgZnJvbVxuXHRcdCAqIC8vZWZmZWN0IG91dHB1dCAwIHRvIGNyb3NzZmFkZSBpbnB1dCAwXG5cdFx0ICogZWZmZWN0QS5jb25uZWN0KGNyb3NzRmFkZSwgMCwgMCk7XG5cdFx0ICogLy9jb25uZWN0IGVmZmVjdCBCIHRvIGNyb3NzZmFkZSBmcm9tXG5cdFx0ICogLy9lZmZlY3Qgb3V0cHV0IDAgdG8gY3Jvc3NmYWRlIGlucHV0IDFcblx0XHQgKiBlZmZlY3RCLmNvbm5lY3QoY3Jvc3NGYWRlLCAwLCAxKTtcblx0XHQgKiBjcm9zc0ZhZGUuZmFkZS52YWx1ZSA9IDA7XG5cdFx0ICogLy8gXiBvbmx5IGVmZmVjdEEgaXMgb3V0cHV0XG5cdFx0ICogY3Jvc3NGYWRlLmZhZGUudmFsdWUgPSAxO1xuXHRcdCAqIC8vIF4gb25seSBlZmZlY3RCIGlzIG91dHB1dFxuXHRcdCAqIGNyb3NzRmFkZS5mYWRlLnZhbHVlID0gMC41O1xuXHRcdCAqIC8vIF4gdGhlIHR3byBzaWduYWxzIGFyZSBtaXhlZCBlcXVhbGx5LlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Dcm9zc0ZhZGUgPSBmdW5jdGlvbiAoaW5pdGlhbEZhZGUpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+aW5wdXRbMF08L2NvZGU+LlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmEgPSB0aGlzLmlucHV0WzBdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsaWFzIGZvciA8Y29kZT5pbnB1dFsxXTwvY29kZT4uXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYiA9IHRoaXMuaW5wdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBcdFRoZSBtaXggYmV0d2VlbiB0aGUgdHdvIGlucHV0cy4gQSBmYWRlIHZhbHVlIG9mIDBcblx0XHRcdCAqIFx0d2lsbCBvdXRwdXQgMTAwJSA8Y29kZT5pbnB1dFswXTwvY29kZT4gYW5kXG5cdFx0XHQgKiBcdGEgdmFsdWUgb2YgMSB3aWxsIG91dHB1dCAxMDAlIDxjb2RlPmlucHV0WzFdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlID0gbmV3IFRvbmUuU2lnbmFsKFRvbmUuZGVmYXVsdEFyZyhpbml0aWFsRmFkZSwgMC41KSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBlcXVhbCBwb3dlciBnYWluIGNyb3NzIGZhZGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkVxdWFsUG93ZXJHYWlufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckEgPSBuZXcgVG9uZS5FcXVhbFBvd2VyR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGVxdWFsIHBvd2VyIGdhaW4gY3Jvc3MgZmFkZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRXF1YWxQb3dlckdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQiA9IG5ldyBUb25lLkVxdWFsUG93ZXJHYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgaW52ZXJ0IHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25lID0gdGhpcy5jb250ZXh0LmdldENvbnN0YW50KDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGludmVydCB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ludmVydCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuYS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLmIuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5mYWRlLmNoYWluKHRoaXMuX2VxdWFsUG93ZXJCLCB0aGlzLmIuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fb25lLmNvbm5lY3QodGhpcy5faW52ZXJ0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLmZhZGUuY29ubmVjdCh0aGlzLl9pbnZlcnQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX2ludmVydC5jaGFpbih0aGlzLl9lcXVhbFBvd2VyQSwgdGhpcy5hLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdmYWRlJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Dcm9zc0ZhZGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Dcm9zc0ZhZGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3Jvc3NGYWRlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2ZhZGUnKTtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXF1YWxQb3dlckEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2VxdWFsUG93ZXJCLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lcXVhbFBvd2VyQiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mYWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZhZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ludmVydC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faW52ZXJ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vbmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuYS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5hID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ3Jvc3NGYWRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRmlsdGVyIGlzIGEgZmlsdGVyIHdoaWNoIGFsbG93cyBmb3IgYWxsIG9mIHRoZSBzYW1lIG5hdGl2ZSBtZXRob2RzXG5cdFx0ICogICAgICAgICAgYXMgdGhlIFtCaXF1YWRGaWx0ZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1iaXF1YWRmaWx0ZXJub2RlLWludGVyZmFjZSkuXG5cdFx0ICogICAgICAgICAgVG9uZS5GaWx0ZXIgaGFzIHRoZSBhZGRlZCBhYmlsaXR5IHRvIHNldCB0aGUgZmlsdGVyIHJvbGxvZmYgYXQgLTEyXG5cdFx0ICogICAgICAgICAgKGRlZmF1bHQpLCAtMjQgYW5kIC00OC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nPX0gdHlwZSBUaGUgdHlwZSBvZiBmaWx0ZXIuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gcm9sbG9mZiBUaGUgZHJvcCBpbiBkZWNpYmVscyBwZXIgb2N0YXZlIGFmdGVyIHRoZSBjdXRvZmYgZnJlcXVlbmN5LlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgY2hvaWNlczogLTEyLCAtMjQsIGFuZCAtNDhcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGZpbHRlciA9IG5ldyBUb25lLkZpbHRlcigyMDAsIFwiaGlnaHBhc3NcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdyb2xsb2ZmJ1xuXHQgICAgICAgIF0sIFRvbmUuRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmlsdGVyKHMpXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIHBhcmFtZXRlclxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbCgwLCBUb25lLlR5cGUuQ2VudHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIG9mIHRoZSBmaWx0ZXIsIG9ubHkgdXNlZCBpbiBjZXJ0YWluIGZpbHRlciB0eXBlc1xuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5nYWluID0gbmV3IFRvbmUuU2lnbmFsKHtcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5nYWluLFxuXHQgICAgICAgICAgICAnY29udmVydCc6IGZhbHNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIFEgb3IgUXVhbGl0eSBvZiB0aGUgZmlsdGVyXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLlEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB0eXBlIG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7c3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSByb2xsb2ZmIHZhbHVlIG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yb2xsb2ZmID0gb3B0aW9ucy5yb2xsb2ZmO1xuXHQgICAgICAgIC8vc2V0IHRoZSByb2xsb2ZmO1xuXHQgICAgICAgIHRoaXMucm9sbG9mZiA9IG9wdGlvbnMucm9sbG9mZjtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZpbHRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZpbHRlci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICdsb3dwYXNzJyxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMzUwLFxuXHQgICAgICAgICdyb2xsb2ZmJzogLTEyLFxuXHQgICAgICAgICdRJzogMSxcblx0ICAgICAgICAnZ2Fpbic6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgZmlsdGVyLiBUeXBlczogXCJsb3dwYXNzXCIsIFwiaGlnaHBhc3NcIixcblx0XHQgKiBcImJhbmRwYXNzXCIsIFwibG93c2hlbGZcIiwgXCJoaWdoc2hlbGZcIiwgXCJub3RjaFwiLCBcImFsbHBhc3NcIiwgb3IgXCJwZWFraW5nXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmlsdGVyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB2YXIgdHlwZXMgPSBbXG5cdCAgICAgICAgICAgICAgICAnbG93cGFzcycsXG5cdCAgICAgICAgICAgICAgICAnaGlnaHBhc3MnLFxuXHQgICAgICAgICAgICAgICAgJ2JhbmRwYXNzJyxcblx0ICAgICAgICAgICAgICAgICdsb3dzaGVsZicsXG5cdCAgICAgICAgICAgICAgICAnaGlnaHNoZWxmJyxcblx0ICAgICAgICAgICAgICAgICdub3RjaCcsXG5cdCAgICAgICAgICAgICAgICAnYWxscGFzcycsXG5cdCAgICAgICAgICAgICAgICAncGVha2luZydcblx0ICAgICAgICAgICAgXTtcblx0ICAgICAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLkZpbHRlcjogaW52YWxpZCB0eXBlICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcm9sbG9mZiBvZiB0aGUgZmlsdGVyIHdoaWNoIGlzIHRoZSBkcm9wIGluIGRiXG5cdFx0ICogcGVyIG9jdGF2ZS4gSW1wbGVtZW50ZWQgaW50ZXJuYWxseSBieSBjYXNjYWRpbmcgZmlsdGVycy5cblx0XHQgKiBPbmx5IGFjY2VwdHMgdGhlIHZhbHVlcyAtMTIsIC0yNCwgLTQ4IGFuZCAtOTYuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcm9sbG9mZlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmlsdGVyLnByb3RvdHlwZSwgJ3JvbGxvZmYnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb2xsb2ZmO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocm9sbG9mZikge1xuXHQgICAgICAgICAgICByb2xsb2ZmID0gcGFyc2VJbnQocm9sbG9mZiwgMTApO1xuXHQgICAgICAgICAgICB2YXIgcG9zc2liaWxpdGllcyA9IFtcblx0ICAgICAgICAgICAgICAgIC0xMixcblx0ICAgICAgICAgICAgICAgIC0yNCxcblx0ICAgICAgICAgICAgICAgIC00OCxcblx0ICAgICAgICAgICAgICAgIC05NlxuXHQgICAgICAgICAgICBdO1xuXHQgICAgICAgICAgICB2YXIgY2FzY2FkaW5nQ291bnQgPSBwb3NzaWJpbGl0aWVzLmluZGV4T2Yocm9sbG9mZik7XG5cdCAgICAgICAgICAgIC8vY2hlY2sgdGhlIHJvbGxvZmYgaXMgdmFsaWRcblx0ICAgICAgICAgICAgaWYgKGNhc2NhZGluZ0NvdW50ID09PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RvbmUuRmlsdGVyOiByb2xsb2ZmIGNhbiBvbmx5IGJlIC0xMiwgLTI0LCAtNDggb3IgLTk2Jyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgY2FzY2FkaW5nQ291bnQgKz0gMTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9sbG9mZiA9IHJvbGxvZmY7XG5cdCAgICAgICAgICAgIC8vZmlyc3QgZGlzY29ubmVjdCB0aGUgZmlsdGVycyBhbmQgdGhyb3cgdGhlbSBhd2F5XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ZpbHRlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tpXSA9IG51bGw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVycyA9IG5ldyBBcnJheShjYXNjYWRpbmdDb3VudCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNvdW50ID0gMDsgY291bnQgPCBjYXNjYWRpbmdDb3VudDsgY291bnQrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGZpbHRlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcblx0ICAgICAgICAgICAgICAgIGZpbHRlci50eXBlID0gdGhpcy5fdHlwZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QoZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KGZpbHRlci5kZXR1bmUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5RLmNvbm5lY3QoZmlsdGVyLlEpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5nYWluLmNvbm5lY3QoZmlsdGVyLmdhaW4pO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1tjb3VudF0gPSBmaWx0ZXI7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9jb25uZWN0IHRoZW0gdXBcblx0ICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb25DaGFpbiA9IFt0aGlzLmlucHV0XS5jb25jYXQodGhpcy5fZmlsdGVycykuY29uY2F0KFt0aGlzLm91dHB1dF0pO1xuXHQgICAgICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgY29ubmVjdGlvbkNoYWluKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9maWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNbaV0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzW2ldID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdnYWluJyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuUS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmdhaW4uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgU3BsaXQgdGhlIGluY29taW5nIHNpZ25hbCBpbnRvIHRocmVlIGJhbmRzIChsb3csIG1pZCwgaGlnaClcblx0XHQgKiAgICAgICAgIHdpdGggdHdvIGNyb3Nzb3ZlciBmcmVxdWVuY3kgY29udHJvbHMuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbbG93RnJlcXVlbmN5XSB0aGUgbG93L21pZCBjcm9zc292ZXIgZnJlcXVlbmN5XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbaGlnaEZyZXF1ZW5jeV0gdGhlIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3lcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kU3BsaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5NdWx0aWJhbmRTcGxpdCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgaW5wdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvdXRwdXRzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBBcnJheSgzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbG93IGJhbmQuIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5sb3cgPSB0aGlzLm91dHB1dFswXSA9IG5ldyBUb25lLkZpbHRlcigwLCAnbG93cGFzcycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsb3dlciBmaWx0ZXIgb2YgdGhlIG1pZCBiYW5kXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb3dNaWRGaWx0ZXIgPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2hpZ2hwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCBiYW5kIG91dHB1dC4gQWxpYXMgZm9yIDxjb2RlPm91dHB1dFsxXTwvY29kZT5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMub3V0cHV0WzFdID0gbmV3IFRvbmUuRmlsdGVyKDAsICdsb3dwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGhpZ2ggYmFuZCBvdXRwdXQuIEFsaWFzIGZvciA8Y29kZT5vdXRwdXRbMl08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRmlsdGVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoID0gdGhpcy5vdXRwdXRbMl0gPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ2hpZ2hwYXNzJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMubG93RnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL2hpZ2ggY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmhpZ2hGcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBxdWFsaXR5IG9mIGFsbCB0aGUgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5RID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuUSk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5mYW4odGhpcy5sb3csIHRoaXMuaGlnaCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbih0aGlzLl9sb3dNaWRGaWx0ZXIsIHRoaXMubWlkKTtcblx0ICAgICAgICAvL3RoZSBmcmVxdWVuY3kgY29udHJvbCBzaWduYWxcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeS5jb25uZWN0KHRoaXMubG93LmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5sb3dGcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9sb3dNaWRGaWx0ZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kuY29ubmVjdCh0aGlzLm1pZC5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuaGlnaEZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuaGlnaC5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vdGhlIFEgdmFsdWVcblx0ICAgICAgICB0aGlzLlEuY29ubmVjdCh0aGlzLmxvdy5RKTtcblx0ICAgICAgICB0aGlzLlEuY29ubmVjdCh0aGlzLl9sb3dNaWRGaWx0ZXIuUSk7XG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5taWQuUSk7XG5cdCAgICAgICAgdGhpcy5RLmNvbm5lY3QodGhpcy5oaWdoLlEpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk11bHRpYmFuZFNwbGl0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRTcGxpdC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbG93RnJlcXVlbmN5JzogNDAwLFxuXHQgICAgICAgICdoaWdoRnJlcXVlbmN5JzogMjUwMCxcblx0ICAgICAgICAnUSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk11bHRpYmFuZFNwbGl0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZFNwbGl0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubG93LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxvdyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbG93TWlkRmlsdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sb3dNaWRGaWx0ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhpZ2ggPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5RID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NdWx0aWJhbmRTcGxpdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRVEzIGlzIGEgdGhyZWUgYmFuZCBFUSB3aXRoIGNvbnRyb2wgb3ZlciBsb3csIG1pZCwgYW5kIGhpZ2ggZ2FpbiBhc1xuXHRcdCAqICAgICAgICAgd2VsbCBhcyB0aGUgbG93IGFuZCBoaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY2llcy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN8T2JqZWN0fSBbbG93TGV2ZWxdIFRoZSBnYWluIGFwcGxpZWQgdG8gdGhlIGxvd3MuXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFttaWRMZXZlbF0gVGhlIGdhaW4gYXBwbGllZCB0byB0aGUgbWlkLlxuXHRcdCAqICBAcGFyYW0ge0RlY2liZWxzfSBbaGlnaExldmVsXSBUaGUgZ2FpbiBhcHBsaWVkIHRvIHRoZSBoaWdoLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBlcSA9IG5ldyBUb25lLkVRMygtMTAsIDMsIC0yMCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkVRMyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2hpZ2gnXG5cdCAgICAgICAgXSwgVG9uZS5FUTMpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG91dHB1dCBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbXVsdGliYW5kIHNwbGl0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGliYW5kU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0ID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpYmFuZFNwbGl0KHtcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IG9wdGlvbnMubG93RnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IG9wdGlvbnMuaGlnaEZyZXF1ZW5jeVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIGZvciB0aGUgbG93ZXIgc2lnbmFsc1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb3dHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLmxvdywgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBmb3IgdGhlIG1pZCBzaWduYWxzXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZEdhaW4gPSBuZXcgVG9uZS5HYWluKG9wdGlvbnMubWlkLCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIGhpZ2ggcGFydFxuXHRcdFx0ICogQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9oaWdoR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy5oaWdoLCBUb25lLlR5cGUuRGVjaWJlbHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGdhaW4gaW4gZGVjaWJlbHMgb2YgdGhlIGxvdyBwYXJ0XG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxvdyA9IHRoaXMuX2xvd0dhaW4uZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBnYWluIGluIGRlY2liZWxzIG9mIHRoZSBtaWQgcGFydFxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWQgPSB0aGlzLl9taWRHYWluLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBpbiBkZWNpYmVscyBvZiB0aGUgaGlnaCBwYXJ0XG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2ggPSB0aGlzLl9oaWdoR2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBRIHZhbHVlIGZvciBhbGwgb2YgdGhlIGZpbHRlcnMuXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IHRoaXMuX211bHRpYmFuZFNwbGl0LlE7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gdGhpcy5fbXVsdGliYW5kU3BsaXQubG93RnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQvaGlnaCBjcm9zc292ZXIgZnJlcXVlbmN5LlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gdGhpcy5fbXVsdGliYW5kU3BsaXQuaGlnaEZyZXF1ZW5jeTtcblx0ICAgICAgICAvL3RoZSBmcmVxdWVuY3kgYmFuZHNcblx0ICAgICAgICB0aGlzLl9tdWx0aWJhbmRTcGxpdC5sb3cuY2hhaW4odGhpcy5fbG93R2FpbiwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0Lm1pZC5jaGFpbih0aGlzLl9taWRHYWluLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQuaGlnaC5jaGFpbih0aGlzLl9oaWdoR2FpbiwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdsb3dGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkVRMywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FUTMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2xvdyc6IDAsXG5cdCAgICAgICAgJ21pZCc6IDAsXG5cdCAgICAgICAgJ2hpZ2gnOiAwLFxuXHQgICAgICAgICdsb3dGcmVxdWVuY3knOiA0MDAsXG5cdCAgICAgICAgJ2hpZ2hGcmVxdWVuY3knOiAyNTAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVRM30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FUTMucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdsb3cnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fbXVsdGliYW5kU3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHRpYmFuZFNwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmxvd0ZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoRnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sb3dHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sb3dHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRHYWluID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9oaWdoR2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5faGlnaEdhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oaWdoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVRMztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBQZXJmb3JtcyBhIGxpbmVhciBzY2FsaW5nIG9uIGFuIGlucHV0IHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBTY2FsZXMgYSBOb3JtYWxSYW5nZSBpbnB1dCB0byBiZXR3ZWVuXG5cdFx0ICogICAgICAgICAgb3V0cHV0TWluIGFuZCBvdXRwdXRNYXguXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWluPTBdIFRoZSBvdXRwdXQgdmFsdWUgd2hlbiB0aGUgaW5wdXQgaXMgMC4gXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWF4PTFdXHRUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDEuIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzY2FsZSA9IG5ldyBUb25lLlNjYWxlKDUwLCAxMDApO1xuXHRcdCAqIHZhciBzaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KHNjYWxlKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2Ygc2NhbGUgZXF1YWxzIDc1XG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlID0gZnVuY3Rpb24gKG91dHB1dE1pbiwgb3V0cHV0TWF4KSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX291dHB1dE1pbiA9IFRvbmUuZGVmYXVsdEFyZyhvdXRwdXRNaW4sIDApO1xuXHQgICAgICAgIC8qKiBcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vdXRwdXRNYXggPSBUb25lLmRlZmF1bHRBcmcob3V0cHV0TWF4LCAxKTtcblx0ICAgICAgICAvKiogXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTXVsdGlwbHkoMSk7XG5cdCAgICAgICAgLyoqIFxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWRkfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hZGQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkFkZCgwKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5jb25uZWN0KHRoaXMuX2FkZCk7XG5cdCAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNjYWxlLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlbiBcblx0XHQgKiB0aGUgdmFsdWUgaW5wdXQgdmFsdWUgaXMgMC4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlLnByb3RvdHlwZSwgJ21pbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dE1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXRNaW4gPSBtaW47XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBvdXRwdXQgdmFsdWUuIFRoaXMgbnVtYmVyIGlzIG91dHB1dCB3aGVuIFxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAxLiBcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGUucHJvdG90eXBlLCAnbWF4Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0TWF4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWF4KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX291dHB1dE1heCA9IG1heDtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXQgdGhlIHZhbHVlc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZS5wcm90b3R5cGUuX3NldFJhbmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2FkZC52YWx1ZSA9IHRoaXMuX291dHB1dE1pbjtcblx0ICAgICAgICB0aGlzLl9zY2FsZS52YWx1ZSA9IHRoaXMuX291dHB1dE1heCAtIHRoaXMuX291dHB1dE1pbjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNjYWxlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNjYWxlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FkZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYWRkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNjYWxlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBQZXJmb3JtcyBhbiBleHBvbmVudGlhbCBzY2FsaW5nIG9uIGFuIGlucHV0IHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBTY2FsZXMgYSBOb3JtYWxSYW5nZSB2YWx1ZSBbMCwxXSBleHBvbmVudGlhbGx5XG5cdFx0ICogICAgICAgICAgdG8gdGhlIG91dHB1dCByYW5nZSBvZiBvdXRwdXRNaW4gdG8gb3V0cHV0TWF4LlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW291dHB1dE1pbj0wXSBUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDAuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbb3V0cHV0TWF4PTFdXHRUaGUgb3V0cHV0IHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIDEuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbZXhwb25lbnQ9Ml0gVGhlIGV4cG9uZW50IHdoaWNoIHNjYWxlcyB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzY2FsZUV4cCA9IG5ldyBUb25lLlNjYWxlRXhwKDAsIDEwMCwgMik7XG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgwLjUpLmNvbm5lY3Qoc2NhbGVFeHApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZUV4cCA9IGZ1bmN0aW9uIChvdXRwdXRNaW4sIG91dHB1dE1heCwgZXhwb25lbnQpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgaW5wdXQgdG8gdGhlIG91dHB1dCByYW5nZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNjYWxlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuU2NhbGUob3V0cHV0TWluLCBvdXRwdXRNYXgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUG93fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHAgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuUG93KFRvbmUuZGVmYXVsdEFyZyhleHBvbmVudCwgMikpO1xuXHQgICAgICAgIHRoaXMuX2V4cC5jb25uZWN0KHRoaXMuX3NjYWxlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNjYWxlRXhwLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogSW5zdGVhZCBvZiBpbnRlcnBvbGF0aW5nIGxpbmVhcmx5IGJldHdlZW4gdGhlIDxjb2RlPm1pbjwvY29kZT4gYW5kXG5cdFx0ICogPGNvZGU+bWF4PC9jb2RlPiB2YWx1ZXMsIHNldHRpbmcgdGhlIGV4cG9uZW50IHdpbGwgaW50ZXJwb2xhdGUgYmV0d2VlblxuXHRcdCAqIHRoZSB0d28gdmFsdWVzIHdpdGggYW4gZXhwb25lbnRpYWwgY3VydmUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVFeHAjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBleHBvbmVudFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU2NhbGVFeHAucHJvdG90eXBlLCAnZXhwb25lbnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9leHAudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChleHApIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXhwLnZhbHVlID0gZXhwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1pbmltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlblxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAwLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlRXhwI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWluID0gbWluO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG1heGltdW0gb3V0cHV0IHZhbHVlLiBUaGlzIG51bWJlciBpcyBvdXRwdXQgd2hlblxuXHRcdCAqIHRoZSB2YWx1ZSBpbnB1dCB2YWx1ZSBpcyAxLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlRXhwI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWF4XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5tYXg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TY2FsZUV4cH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZUV4cC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2V4cC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZXhwID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TY2FsZUV4cDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIFdlYiBBdWRpbydzIG5hdGl2ZSBbRGVsYXlOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1kZWxheW5vZGUtaW50ZXJmYWNlKS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGRlbGF5VGltZSBUaGUgZGVsYXkgYXBwbGllZCB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBtYXhEZWxheSBUaGUgbWF4aW11bSBkZWxheSB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5EZWxheSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnbWF4RGVsYXknXG5cdCAgICAgICAgXSwgVG9uZS5EZWxheSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBtYXhpbXVtIGRlbGF5IHRpbWUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgbm9kZVxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tYXhEZWxheSA9IE1hdGgubWF4KHRoaXMudG9TZWNvbmRzKG9wdGlvbnMubWF4RGVsYXkpLCB0aGlzLnRvU2Vjb25kcyhvcHRpb25zLmRlbGF5VGltZSkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBuYXRpdmUgZGVsYXkgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtEZWxheU5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IHRoaXMuY29udGV4dC5jcmVhdGVEZWxheSh0aGlzLl9tYXhEZWxheSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBpbmNvbWluZyBzaWduYWwgaXNcblx0XHRcdCAqICBkZWxheWVkLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9kZWxheU5vZGUuZGVsYXlUaW1lLFxuXHQgICAgICAgICAgICAndW5pdHMnOiBUb25lLlR5cGUuVGltZSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5kZWxheVRpbWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZGVsYXlUaW1lJyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5EZWxheSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkRlbGF5LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtYXhEZWxheSc6IDEsXG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWF4aW11bSBkZWxheSB0aW1lLiBUaGlzIGNhbm5vdCBiZSBjaGFuZ2VkLiBUaGUgdmFsdWUgaXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLlxuXHRcdCAqIEBtZW1iZXJvZiBUb25lLkRlbGF5I1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIG1heERlbGF5XG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5EZWxheS5wcm90b3R5cGUsICdtYXhEZWxheScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heERlbGF5O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5EZWxheX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRGVsYXkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2RlbGF5VGltZScpO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5EZWxheTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIENvbWIgZmlsdGVycyBhcmUgYmFzaWMgYnVpbGRpbmcgYmxvY2tzIGZvciBwaHlzaWNhbCBtb2RlbGluZy4gUmVhZCBtb3JlXG5cdFx0ICogICAgICAgICBhYm91dCBjb21iIGZpbHRlcnMgb24gW0NDUk1BJ3Mgd2Vic2l0ZV0oaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvfmpvcy9wYXNwL0ZlZWRiYWNrX0NvbWJfRmlsdGVycy5odG1sKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgdGltZSBvZiB0aGUgZmlsdGVyLlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gcmVzb25hbmNlIFRoZSBhbW91bnQgb2YgZmVlZGJhY2sgdGhlIGZpbHRlciBoYXMuXG5cdFx0ICovXG5cdCAgICBUb25lLkZlZWRiYWNrQ29tYkZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJ1xuXHQgICAgICAgIF0sIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5EZWxheShvcHRpb25zLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBkZWxheSBvZiB0aGUgY29tYiBmaWx0ZXIuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9kZWxheS5kZWxheVRpbWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGZlZWRiYWNrIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnJlc29uYW5jZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIG9mIHRoZSBkZWxheWVkIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSB0aGlzLl9mZWVkYmFjay5nYWluO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5LmNoYWluKHRoaXMuX2ZlZWRiYWNrLCB0aGlzLl9kZWxheSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZlZWRiYWNrQ29tYkZpbHRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjEsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDAuNVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GZWVkYmFja0NvbWJGaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tDb21iRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9kZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFjay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEdldCB0aGUgY3VycmVudCB3YXZlZm9ybSBkYXRhIG9mIHRoZSBjb25uZWN0ZWQgYXVkaW8gc291cmNlLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgRkZULiBWYWx1ZSBtdXN0IGJlIGEgcG93ZXIgb2Zcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKi9cblx0ICAgIFRvbmUuRkZUID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnc2l6ZSddLCBUb25lLkZGVCk7XG5cdCAgICAgICAgb3B0aW9ucy50eXBlID0gVG9uZS5BbmFseXNlci5UeXBlLkZGVDtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW5hbHlzZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkFuYWx5c2VyKG9wdGlvbnMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRkZULCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRkZULmRlZmF1bHRzID0geyAnc2l6ZSc6IDEwMjQgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXRzIHRoZSB3YXZlZm9ybSBvZiB0aGUgYXVkaW8gc291cmNlLiBSZXR1cm5zIHRoZSB3YXZlZm9ybSBkYXRhXG5cdFx0ICogIG9mIGxlbmd0aCBbc2l6ZV0oI3NpemUpIGFzIGEgRmxvYXQzMkFycmF5IHdpdGggdmFsdWVzIGJldHdlZW4gLTEgYW5kIDEuXG5cdFx0ICogIEByZXR1cm5zIHtUeXBlZEFycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GRlQucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2l6ZSBvZiBhbmFseXNpcy4gVGhpcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRkZUI1xuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbmFtZSBzaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GRlQucHJvdG90eXBlLCAnc2l6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FuYWx5c2VyLnNpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNpemUgPSBzaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5GRlR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZGVC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRkZUO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgUmV0dXJuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBhbiBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNpZ25hbCA9IG5ldyBUb25lLlNpZ25hbCgtMSk7XG5cdFx0ICogdmFyIGFicyA9IG5ldyBUb25lLkFicygpO1xuXHRcdCAqIHNpZ25hbC5jb25uZWN0KGFicyk7XG5cdFx0ICogLy90aGUgb3V0cHV0IG9mIGFicyBpcyAxLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5BYnMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTGVzc1RoYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2FicyA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAoTWF0aC5hYnModmFsKSA8IDAuMDAxKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh2YWwpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSwgMTAyNCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BYnMsIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBtZXRob2Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQWJzfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFicy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hYnMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FicyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQWJzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRm9sbG93ZXIgaXMgYSAgY3J1ZGUgZW52ZWxvcGUgZm9sbG93ZXIgd2hpY2ggd2lsbCBmb2xsb3dcblx0XHQgKiAgICAgICAgICB0aGUgYW1wbGl0dWRlIG9mIGFuIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgICBUYWtlIGNhcmUgd2l0aCBzbWFsbCAoPCAwLjAyKSBhdHRhY2sgb3IgZGVjYXkgdmFsdWVzXG5cdFx0ICogICAgICAgICAgYXMgZm9sbG93ZXIgaGFzIHNvbWUgcmlwcGxlIHdoaWNoIGlzIGV4YWdnZXJhdGVkXG5cdFx0ICogICAgICAgICAgYXQgdGhlc2UgdmFsdWVzLiBSZWFkIG1vcmUgYWJvdXQgZW52ZWxvcGUgZm9sbG93ZXJzIChhbHNvIGtub3duXG5cdFx0ICogICAgICAgICAgYXMgZW52ZWxvcGUgZGV0ZWN0b3JzKSBvbiBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbnZlbG9wZV9kZXRlY3RvcikuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtUaW1lfE9iamVjdH0gW2F0dGFja10gVGhlIHJhdGUgYXQgd2hpY2ggdGhlIGZvbGxvd2VyIHJpc2VzLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByZWxlYXNlIFRoZSByYXRlIGF0IHdoaWNoIHRoZSBmb2xvd2VyIGZhbGxzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBmb2xsb3dlciA9IG5ldyBUb25lLkZvbGxvd2VyKDAuMiwgMC40KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5Gb2xsb3dlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQWJzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hYnMgPSBuZXcgVG9uZS5BYnMoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbG93cGFzcyBmaWx0ZXIgd2hpY2ggc21vb3RocyB0aGUgaW5wdXRcblx0XHRcdCAqICBAdHlwZSB7QmlxdWFkRmlsdGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmlsdGVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci50eXBlID0gJ2xvd3Bhc3MnO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5mcmVxdWVuY3kudmFsdWUgPSAwO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5RLnZhbHVlID0gLTEwMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7V2F2ZVNoYXBlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcyA9IG5ldyBUb25lLldhdmVTaGFwZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ViID0gbmV3IFRvbmUuU3VidHJhY3QoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSBuZXcgVG9uZS5EZWxheSh0aGlzLmJsb2NrVGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhpcyBrZWVwcyBpdCBmYXIgZnJvbSAwLCBldmVuIGZvciB2ZXJ5IHNtYWxsIGRpZmZlcmVuY2VzXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX211bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgxMDAwMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYXR0YWNrID0gb3B0aW9ucy5hdHRhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZTtcblx0ICAgICAgICAvL3RoZSBzbW9vdGhlZCBzaWduYWwgdG8gZ2V0IHRoZSB2YWx1ZXNcblx0ICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMuX2FicywgdGhpcy5fZmlsdGVyLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgLy90aGUgZGlmZmVyZW5jZSBwYXRoXG5cdCAgICAgICAgdGhpcy5fYWJzLmNvbm5lY3QodGhpcy5fc3ViLCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXIuY2hhaW4odGhpcy5fZGVsYXksIHRoaXMuX3N1Yik7XG5cdCAgICAgICAgLy90aHJlc2hvbGQgdGhlIGRpZmZlcmVuY2UgYW5kIHVzZSB0aGUgdGhyZXNoIHRvIHNldCB0aGUgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5fc3ViLmNoYWluKHRoaXMuX211bHQsIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcywgdGhpcy5fZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSB2YWx1ZXMgaW4gdGhlIHRhYmxlXG5cdCAgICAgICAgdGhpcy5fc2V0QXR0YWNrUmVsZWFzZSh0aGlzLl9hdHRhY2ssIHRoaXMuX3JlbGVhc2UpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRm9sbG93ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkZvbGxvd2VyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2snOiAwLjA1LFxuXHQgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHNldHMgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSB0aW1lcyBpbiB0aGUgd2F2ZSBzaGFwZXJcblx0XHQgKiAgQHBhcmFtICAge1RpbWV9IGF0dGFja1xuXHRcdCAqICBAcGFyYW0gICB7VGltZX0gcmVsZWFzZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUuX3NldEF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAoYXR0YWNrLCByZWxlYXNlKSB7XG5cdCAgICAgICAgdmFyIG1pblRpbWUgPSB0aGlzLmJsb2NrVGltZTtcblx0ICAgICAgICBhdHRhY2sgPSBUb25lLlRpbWUoYXR0YWNrKS50b0ZyZXF1ZW5jeSgpO1xuXHQgICAgICAgIHJlbGVhc2UgPSBUb25lLlRpbWUocmVsZWFzZSkudG9GcmVxdWVuY3koKTtcblx0ICAgICAgICBhdHRhY2sgPSBNYXRoLm1heChhdHRhY2ssIG1pblRpbWUpO1xuXHQgICAgICAgIHJlbGVhc2UgPSBNYXRoLm1heChyZWxlYXNlLCBtaW5UaW1lKTtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMuc2V0TWFwKGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgaWYgKHZhbCA8PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gYXR0YWNrO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2U7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXR0YWNrIHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRm9sbG93ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgYXR0YWNrXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUsICdhdHRhY2snLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2s7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhdHRhY2spIHtcblx0ICAgICAgICAgICAgdGhpcy5fYXR0YWNrID0gYXR0YWNrO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBdHRhY2tSZWxlYXNlKHRoaXMuX2F0dGFjaywgdGhpcy5fcmVsZWFzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcmVsZWFzZSB0aW1lLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZvbGxvd2VyI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHJlbGVhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZvbGxvd2VyLnByb3RvdHlwZSwgJ3JlbGVhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWxlYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmVsZWFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZWxlYXNlID0gcmVsZWFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0QXR0YWNrUmVsZWFzZSh0aGlzLl9hdHRhY2ssIHRoaXMuX3JlbGVhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEJvcnJvd3MgdGhlIGNvbm5lY3QgbWV0aG9kIGZyb20gU2lnbmFsIHNvIHRoYXQgdGhlIG91dHB1dCBjYW4gYmUgdXNlZFxuXHRcdCAqICBhcyBhIFRvbmUuU2lnbmFsIGNvbnRyb2wgc2lnbmFsLlxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKi9cblx0ICAgIFRvbmUuRm9sbG93ZXIucHJvdG90eXBlLmNvbm5lY3QgPSBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmNvbm5lY3Q7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Gb2xsb3dlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Gb2xsb3dlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fZmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3lWYWx1ZXMuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeVZhbHVlcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdWIuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYWJzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hYnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX211bHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX211bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2N1cnZlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Gb2xsb3dlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuU2NhbGVkRW52ZWxvcCBpcyBhbiBlbnZlbG9wZSB3aGljaCBjYW4gYmUgc2NhbGVkXG5cdFx0ICogICAgICAgICB0byBhbnkgcmFuZ2UuIEl0J3MgdXNlZnVsIGZvciBhcHBseWluZyBhbiBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgdG8gYSBmcmVxdWVuY3kgb3IgYW55IG90aGVyIG5vbi1Ob3JtYWxSYW5nZSBzaWduYWxcblx0XHQgKiAgICAgICAgIHBhcmFtZXRlci5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FbnZlbG9wZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFthdHRhY2tdXHR0aGUgYXR0YWNrIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFtkZWNheV1cdHRoZSBkZWNheSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtzdXN0YWluXSBcdGEgcGVyY2VudGFnZSAoMC0xKSBvZiB0aGUgZnVsbCBhbXBsaXR1ZGVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbcmVsZWFzZV1cdHRoZSByZWxlYXNlIHRpbWUgaW4gc2Vjb25kc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgc2NhbGVkRW52ID0gbmV3IFRvbmUuU2NhbGVkRW52ZWxvcGUoe1xuXHRcdCAqICBcdFwiYXR0YWNrXCIgOiAwLjIsXG5cdFx0ICogIFx0XCJtaW5cIiA6IDIwMCxcblx0XHQgKiAgXHRcIm1heFwiIDogMjAwMFxuXHRcdCAqICB9KTtcblx0XHQgKiAgc2NhbGVkRW52LmNvbm5lY3Qob3NjaWxsYXRvci5mcmVxdWVuY3kpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TY2FsZWRFbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2dldCBhbGwgb2YgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnYXR0YWNrJyxcblx0ICAgICAgICAgICAgJ2RlY2F5Jyxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nLFxuXHQgICAgICAgICAgICAncmVsZWFzZSdcblx0ICAgICAgICBdLCBUb25lLkVudmVsb3BlKTtcblx0ICAgICAgICBUb25lLkVudmVsb3BlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlNjYWxlZEVudmVsb3BlLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgaW5jb21pbmcgc2lnbmFsIGJ5IGFuIGV4cG9uZW50XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUG93fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9leHAgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlBvdyhvcHRpb25zLmV4cG9uZW50KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzY2FsZSB0aGUgc2lnbmFsIHRvIHRoZSBkZXNpcmVkIHJhbmdlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TY2FsZShvcHRpb25zLm1pbiwgb3B0aW9ucy5tYXgpO1xuXHQgICAgICAgIHRoaXMuX3NpZy5jaGFpbih0aGlzLl9leHAsIHRoaXMuX3NjYWxlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNjYWxlZEVudmVsb3BlLCBUb25lLkVudmVsb3BlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgJ2V4cG9uZW50JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIG1pbiBvdXRwdXQgdmFsdWUuIFRoaXMgaXMgdGhlIHZhbHVlIHdoaWNoIGl0XG5cdFx0ICogc3RhcnRzIGF0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNjYWxlZEVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zY2FsZS5taW47XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtaW4pIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGUubWluID0gbWluO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGVudmVsb3BlJ3MgbWF4IG91dHB1dCB2YWx1ZS4gSW4gb3RoZXIgd29yZHMsIHRoZSB2YWx1ZVxuXHRcdCAqIGF0IHRoZSBwZWFrIG9mIHRoZSBhdHRhY2sgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2NhbGVkRW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjYWxlLm1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5tYXggPSBtYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBleHBvbmVudCB2YWx1ZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5TY2FsZWRFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIGV4cG9uZW50XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5TY2FsZWRFbnZlbG9wZS5wcm90b3R5cGUsICdleHBvbmVudCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGV4cCkge1xuXHQgICAgICAgICAgICB0aGlzLl9leHAudmFsdWUgPSBleHA7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2NhbGVkRW52ZWxvcGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2NhbGVkRW52ZWxvcGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXhwLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9leHAgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNjYWxlZEVudmVsb3BlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSBpcyBhIFRvbmUuU2NhbGVkRW52ZWxvcGUsIGJ1dCBpbnN0ZWFkIG9mIGBtaW5gIGFuZCBgbWF4YFxuXHRcdCAqICAgICAgICAgaXQncyBnb3QgYSBgYmFzZUZyZXF1ZW5jeWAgYW5kIGBvY3RhdmVzYCBwYXJhbWV0ZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRW52ZWxvcGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbYXR0YWNrXVx0dGhlIGF0dGFjayB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbZGVjYXldXHR0aGUgZGVjYXkgdGltZSBpbiBzZWNvbmRzXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbc3VzdGFpbl0gXHRhIHBlcmNlbnRhZ2UgKDAtMSkgb2YgdGhlIGZ1bGwgYW1wbGl0dWRlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3JlbGVhc2VdXHR0aGUgcmVsZWFzZSB0aW1lIGluIHNlY29uZHNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIGZyZXFFbnYgPSBuZXcgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSh7XG5cdFx0ICogIFx0XCJhdHRhY2tcIiA6IDAuMixcblx0XHQgKiAgXHRcImJhc2VGcmVxdWVuY3lcIiA6IFwiQzJcIixcblx0XHQgKiAgXHRcIm9jdGF2ZXNcIiA6IDRcblx0XHQgKiAgfSk7XG5cdFx0ICogIGZyZXFFbnYuY29ubmVjdChvc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkZyZXF1ZW5jeUVudmVsb3BlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdkZWNheScsXG5cdCAgICAgICAgICAgICdzdXN0YWluJyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnXG5cdCAgICAgICAgXSwgVG9uZS5FbnZlbG9wZSk7XG5cdCAgICAgICAgVG9uZS5TY2FsZWRFbnZlbG9wZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8vbWVyZ2UgaXQgd2l0aCB0aGUgZnJlcXVlbmN5IGVudmVsb3BlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkZyZXF1ZW5jeUVudmVsb3BlLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTdG9yZXMgdGhlIG9jdGF2ZSB2YWx1ZVxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvL3NldHVwXG5cdCAgICAgICAgdGhpcy5iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZyZXF1ZW5jeUVudmVsb3BlLCBUb25lLkVudmVsb3BlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiA0LFxuXHQgICAgICAgICdleHBvbmVudCc6IDJcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZW52ZWxvcGUncyBtaW5pbnVtIG91dHB1dCB2YWx1ZS4gVGhpcyBpcyB0aGUgdmFsdWUgd2hpY2ggaXRcblx0XHQgKiBzdGFydHMgYXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAbmFtZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUsICdiYXNlRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGUubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobWluKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlLm1pbiA9IHRoaXMudG9GcmVxdWVuY3kobWluKTtcblx0ICAgICAgICAgICAgLy9hbHNvIHVwZGF0ZSB0aGUgb2N0YXZlc1xuXHQgICAgICAgICAgICB0aGlzLm9jdGF2ZXMgPSB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBvY3RhdmVzIGFib3ZlIHRoZSBiYXNlRnJlcXVlbmN5IHRoYXQgdGhlXG5cdFx0ICogZW52ZWxvcGUgd2lsbCBzY2FsZSB0by5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZSNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRnJlcXVlbmN5RW52ZWxvcGUucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3RhdmVzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3RhdmVzO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZS5tYXggPSB0aGlzLmJhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCBvY3RhdmVzKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBlbnZlbG9wZSdzIGV4cG9uZW50IHZhbHVlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZyZXF1ZW5jeUVudmVsb3BlI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgZXhwb25lbnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZyZXF1ZW5jeUVudmVsb3BlLnByb3RvdHlwZSwgJ2V4cG9uZW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXhwLnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZXhwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V4cC52YWx1ZSA9IGV4cDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GcmVxdWVuY3lFbnZlbG9wZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNjYWxlZEVudmVsb3BlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRnJlcXVlbmN5RW52ZWxvcGU7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgR3JlYXRlclRoYW5aZXJvIG91dHB1dHMgMSB3aGVuIHRoZSBpbnB1dCBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4gemVyb1xuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBndDAgPSBuZXcgVG9uZS5HcmVhdGVyVGhhblplcm8oKTtcblx0XHQgKiB2YXIgc2lnID0gbmV3IFRvbmUuU2lnbmFsKDAuMDEpLmNvbm5lY3QoZ3QwKTtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgZ3QwIGlzIDEuXG5cdFx0ICogc2lnLnZhbHVlID0gMDtcblx0XHQgKiAvL3RoZSBvdXRwdXQgb2YgZ3QwIGlzIDAuXG5cdFx0ICovXG5cdCAgICBUb25lLkdyZWF0ZXJUaGFuWmVybyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aHJlc2ggPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAodmFsIDw9IDApIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LCAxMjcpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSBmaXJzdCB0aHJlc2hvbGRlZCBzaWduYWwgYnkgYSBsYXJnZSB2YWx1ZS5cblx0XHRcdCAqICB0aGlzIHdpbGwgaGVscCB3aXRoIHZhbHVlcyB3aGljaCBhcmUgdmVyeSBjbG9zZSB0byAwXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpcGx5KDEwMDAwKTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fc2NhbGUuY29ubmVjdCh0aGlzLl90aHJlc2gpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR3JlYXRlclRoYW5aZXJvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc3Bvc2UgbWV0aG9kXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdyZWF0ZXJUaGFuWmVyb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhblplcm8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl90aHJlc2guZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR3JlYXRlclRoYW5aZXJvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIE91dHB1dCAxIGlmIHRoZSBzaWduYWwgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSwgb3RoZXJ3aXNlIG91dHB1dHMgMC5cblx0XHQgKiAgICAgICAgICBjYW4gY29tcGFyZSB0d28gc2lnbmFscyBvciBhIHNpZ25hbCBhbmQgYSBudW1iZXIuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2YWx1ZT0wXSB0aGUgdmFsdWUgdG8gY29tcGFyZSB0byB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGd0ID0gbmV3IFRvbmUuR3JlYXRlclRoYW4oMik7XG5cdFx0ICogdmFyIHNpZyA9IG5ldyBUb25lLlNpZ25hbCg0KS5jb25uZWN0KGd0KTtcblx0XHQgKiAvL291dHB1dCBvZiBndCBpcyBlcXVhbCAxLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmVhdGVyVGhhbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHN1YnRyYWN0IHRoZSBhbW91bnQgZnJvbSB0aGUgaW5jb21pbmcgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3VidHJhY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhcmFtID0gdGhpcy5pbnB1dFswXSA9IG5ldyBUb25lLlN1YnRyYWN0KHZhbHVlKTtcblx0ICAgICAgICB0aGlzLmlucHV0WzFdID0gdGhpcy5fcGFyYW0uaW5wdXRbMV07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29tcGFyZSB0aGF0IGFtb3VudCB0byB6ZXJvXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR3JlYXRlclRoYW5aZXJvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ndHogPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdyZWF0ZXJUaGFuWmVybygpO1xuXHQgICAgICAgIC8vY29ubmVjdFxuXHQgICAgICAgIHRoaXMuX3BhcmFtLmNvbm5lY3QodGhpcy5fZ3R6KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdyZWF0ZXJUaGFuLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBtZXRob2Rcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR3JlYXRlclRoYW59IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JlYXRlclRoYW4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ndHouZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2d0eiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR3JlYXRlclRoYW47XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5HYXRlIG9ubHkgcGFzc2VzIGEgc2lnbmFsIHRocm91Z2ggd2hlbiB0aGUgaW5jb21pbmdcblx0XHQgKiAgICAgICAgICBzaWduYWwgZXhjZWVkcyBhIHNwZWNpZmllZCB0aHJlc2hvbGQuIFRvIGRvIHRoaXMsIEdhdGUgdXNlc1xuXHRcdCAqICAgICAgICAgIGEgVG9uZS5Gb2xsb3dlciB0byBmb2xsb3cgdGhlIGFtcGxpdHVkZSBvZiB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgIEEgY29tbW9uIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2xhc3MgaXMgYSBbTm9pc2UgR2F0ZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTm9pc2VfZ2F0ZSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc3xPYmplY3R9IFt0aHJlc2hvbGRdIFRoZSB0aHJlc2hvbGQgYWJvdmUgd2hpY2ggdGhlIGdhdGUgd2lsbCBvcGVuLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSBhdHRhY2sgVGhlIGZvbGxvd2VyJ3MgYXR0YWNrIHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gcmVsZWFzZSBUaGUgZm9sbG93ZXIncyByZWxlYXNlIHRpbWVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZ2F0ZSA9IG5ldyBUb25lLkdhdGUoLTMwLCAwLjIsIDAuMykudG9NYXN0ZXIoKTtcblx0XHQgKiB2YXIgbWljID0gbmV3IFRvbmUuVXNlck1lZGlhKCkuY29ubmVjdChnYXRlKTtcblx0XHQgKiAvL3RoZSBnYXRlIHdpbGwgb25seSBwYXNzIHRocm91Z2ggdGhlIGluY29taW5nXG5cdFx0ICogLy9zaWduYWwgd2hlbiBpdCdzIGxvdWRlciB0aGFuIC0zMGRiXG5cdFx0ICovXG5cdCAgICBUb25lLkdhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndGhyZXNob2xkJyxcblx0ICAgICAgICAgICAgJ2F0dGFjaycsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJ1xuXHQgICAgICAgIF0sIFRvbmUuR2F0ZSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRm9sbG93ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZvbGxvd2VyID0gbmV3IFRvbmUuRm9sbG93ZXIob3B0aW9ucy5hdHRhY2ssIG9wdGlvbnMucmVsZWFzZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR3JlYXRlclRoYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2d0ID0gbmV3IFRvbmUuR3JlYXRlclRoYW4oVG9uZS5kYlRvR2FpbihvcHRpb25zLnRocmVzaG9sZCkpO1xuXHQgICAgICAgIC8vdGhlIGNvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICAvL3RoZSBjb250cm9sIHNpZ25hbFxuXHQgICAgICAgIHRoaXMuaW5wdXQuY2hhaW4odGhpcy5fZ3QsIHRoaXMuX2ZvbGxvd2VyLCB0aGlzLm91dHB1dC5nYWluKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkdhdGUsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HYXRlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2snOiAwLjEsXG5cdCAgICAgICAgJ3JlbGVhc2UnOiAwLjEsXG5cdCAgICAgICAgJ3RocmVzaG9sZCc6IC00MFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0aHJlc2hvbGQgb2YgdGhlIGdhdGUgaW4gZGVjaWJlbHNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HYXRlI1xuXHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHQgKiBAbmFtZSB0aHJlc2hvbGRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdhdGUucHJvdG90eXBlLCAndGhyZXNob2xkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5nYWluVG9EYih0aGlzLl9ndC52YWx1ZSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aHJlc2gpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ3QudmFsdWUgPSBUb25lLmRiVG9HYWluKHRocmVzaCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYXR0YWNrIHNwZWVkIG9mIHRoZSBnYXRlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR2F0ZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBhdHRhY2tcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdhdGUucHJvdG90eXBlLCAnYXR0YWNrJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9sbG93ZXIuYXR0YWNrO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYXR0YWNrVGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9mb2xsb3dlci5hdHRhY2sgPSBhdHRhY2tUaW1lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJlbGVhc2Ugc3BlZWQgb2YgdGhlIGdhdGVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HYXRlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIHJlbGVhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdhdGUucHJvdG90eXBlLCAncmVsZWFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvbGxvd2VyLnJlbGVhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyZWxlYXNlVGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9mb2xsb3dlci5yZWxlYXNlID0gcmVsZWFzZVRpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkdhdGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR2F0ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2ZvbGxvd2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ndC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZm9sbG93ZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2d0ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HYXRlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgVG9uZS5UaWNrU2lnbmFsIGV4dGVuZHMgVG9uZS5TaWduYWwsIGJ1dCBhZGRzIHRoZSBjYXBhYmlsaXR5XG5cdFx0ICogICAgICAgIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGVsYXBzZWQgdGlja3MuIGV4cG9uZW50aWFsIGFuZCB0YXJnZXQgY3VydmVzXG5cdFx0ICogICAgICAgIGFyZSBhcHByb3hpbWF0ZWQgd2l0aCBtdWx0aXBsZSBsaW5lYXIgcmFtcHMuXG5cdFx0ICpcblx0XHQgKiAgICAgICAgVGhhbmsgeW91IEJydW5vIERpYXMsIEguIFNvZmlhIFBpbnRvLCBhbmQgRGF2aWQgTS4gTWF0b3MsIGZvciB5b3VyIFtXQUMgcGFwZXJdKGh0dHBzOi8vc21hcnRlY2guZ2F0ZWNoLmVkdS9iaXRzdHJlYW0vaGFuZGxlLzE4NTMvNTQ1ODgvV0FDMjAxNi00OS5wZGYpXG5cdFx0ICogICAgICAgIGRlc2NyaWJpbmcgaW50ZWdyYXRpbmcgdGltaW5nIGZ1bmN0aW9ucyBmb3IgdGVtcG8gY2FsY3VsYXRpb25zLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBzaWduYWxcblx0XHQgKiBAZXh0ZW5kcyB7VG9uZS5TaWduYWx9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwgPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICB2YWx1ZSA9IFRvbmUuZGVmYXVsdEFyZyh2YWx1ZSwgMSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuY2FsbCh0aGlzLCB7XG5cdCAgICAgICAgICAgICd1bml0cyc6IFRvbmUuVHlwZS5UaWNrcyxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL2V4dGVuZCB0aGUgbWVtb3J5XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLm1lbW9yeSA9IEluZmluaXR5O1xuXHQgICAgICAgIC8vY2xlYXIgdGhlIGNsb2NrIGZyb20gdGhlIGJlZ2lubmluZ1xuXHQgICAgICAgIHRoaXMuY2FuY2VsU2NoZWR1bGVkVmFsdWVzKDApO1xuXHQgICAgICAgIC8vc2V0IGFuIGluaXRpYWwgZXZlbnRcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLlNldFZhbHVlLFxuXHQgICAgICAgICAgICAndGltZSc6IDAsXG5cdCAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UaWNrU2lnbmFsLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiBXcmFwcyBUb25lLlNpZ25hbCBtZXRob2RzIHNvIHRoYXQgdGhleSBhbHNvXG5cdFx0ICogcmVjb3JkIHRoZSB0aWNrcy5cblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gbWV0aG9kXG5cdFx0ICogQHJldHVybiB7RnVuY3Rpb259XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIGZ1bmN0aW9uIF93cmFwU2NoZWR1bGVNZXRob2RzKG1ldGhvZCkge1xuXHQgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIHRpbWUpIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzRXZlbnQgPSB0aGlzLl9ldmVudHMucHJldmlvdXNFdmVudChldmVudCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrc1VudGlsVGltZSA9IHRoaXMuX2dldFRpY2tzVW50aWxFdmVudChwcmV2aW91c0V2ZW50LCB0aW1lKTtcblx0ICAgICAgICAgICAgZXZlbnQudGlja3MgPSBNYXRoLm1heCh0aWNrc1VudGlsVGltZSwgMCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lID0gX3dyYXBTY2hlZHVsZU1ldGhvZHMoVG9uZS5TaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lKTtcblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUgPSBfd3JhcFNjaGVkdWxlTWV0aG9kcyhUb25lLlNpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoXG5cdFx0ICogIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRpbWUgY29uc3RhbnQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGltZUNvbnN0YW50XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lLCBjb25zdGFudCkge1xuXHQgICAgICAgIC8vYXByb3hpbWF0ZSBpdCB3aXRoIG11bHRpcGxlIGxpbmVhciByYW1wc1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnNldFJhbXBQb2ludCh0aW1lKTtcblx0ICAgICAgICB2YWx1ZSA9IHRoaXMuX2Zyb21Vbml0cyh2YWx1ZSk7XG5cdCAgICAgICAgLy9zdGFydCBmcm9tIHByZXZpb3VzbHkgc2NoZWR1bGVkIHZhbHVlXG5cdCAgICAgICAgdmFyIHByZXZFdmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgdmFyIHNlZ21lbnRzID0gTWF0aC5yb3VuZChNYXRoLm1heCgxIC8gY29uc3RhbnQsIDEpKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBzZWdtZW50czsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBzZWdUaW1lID0gY29uc3RhbnQgKiBpICsgdGltZTtcblx0ICAgICAgICAgICAgdmFyIHJhbXBWYWwgPSB0aGlzLl9leHBvbmVudGlhbEFwcHJvYWNoKHByZXZFdmVudC50aW1lLCBwcmV2RXZlbnQudmFsdWUsIHZhbHVlLCBjb25zdGFudCwgc2VnVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodGhpcy5fdG9Vbml0cyhyYW1wVmFsKSwgc2VnVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZXMgYW4gZXhwb25lbnRpYWwgY29udGludW91cyBjaGFuZ2UgaW4gcGFyYW1ldGVyIHZhbHVlIGZyb21cblx0XHQgKiAgdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwYXJhbWV0ZXIgdmFsdWUgdG8gdGhlIGdpdmVuIHZhbHVlLlxuXHRcdCAqICBAcGFyYW0gIHtudW1iZXJ9IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IGVuZFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NpZ25hbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgLy9hcHJveGltYXRlIGl0IHdpdGggbXVsdGlwbGUgbGluZWFyIHJhbXBzXG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhbHVlID0gdGhpcy5fZnJvbVVuaXRzKHZhbHVlKTtcblx0ICAgICAgICAvL3N0YXJ0IGZyb20gcHJldmlvdXNseSBzY2hlZHVsZWQgdmFsdWVcblx0ICAgICAgICB2YXIgcHJldkV2ZW50ID0gdGhpcy5fZXZlbnRzLmdldCh0aW1lKTtcblx0ICAgICAgICBpZiAocHJldkV2ZW50ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHByZXZFdmVudCA9IHtcblx0ICAgICAgICAgICAgICAgICd2YWx1ZSc6IHRoaXMuX2luaXRpYWxWYWx1ZSxcblx0ICAgICAgICAgICAgICAgICd0aW1lJzogMFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2FwcHJveCAxMCBzZWdtZW50cyBwZXIgc2Vjb25kXG5cdCAgICAgICAgdmFyIHNlZ21lbnRzID0gTWF0aC5yb3VuZChNYXRoLm1heCgodGltZSAtIHByZXZFdmVudC50aW1lKSAqIDEwLCAxKSk7XG5cdCAgICAgICAgdmFyIHNlZ21lbnREdXIgPSAodGltZSAtIHByZXZFdmVudC50aW1lKSAvIHNlZ21lbnRzO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IHNlZ21lbnRzOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHNlZ1RpbWUgPSBzZWdtZW50RHVyICogaSArIHByZXZFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB2YXIgcmFtcFZhbCA9IHRoaXMuX2V4cG9uZW50aWFsSW50ZXJwb2xhdGUocHJldkV2ZW50LnRpbWUsIHByZXZFdmVudC52YWx1ZSwgdGltZSwgdmFsdWUsIHNlZ1RpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHRoaXMuX3RvVW5pdHMocmFtcFZhbCksIHNlZ1RpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXR1cm5zIHRoZSB0aWNrIHZhbHVlIGF0IHRoZSB0aW1lLiBUYWtlcyBpbnRvIGFjY291bnRcblx0XHQgKiBhbnkgYXV0b21hdGlvbiBjdXJ2ZXMgc2NoZWR1bGVkIG9uIHRoZSBzaWduYWwuXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIGdldCB0aGUgdGljayBjb3VudCBhdFxuXHRcdCAqIEByZXR1cm4ge1RpY2tzfSAgICAgIFRoZSBudW1iZXIgb2YgdGlja3Mgd2hpY2ggaGF2ZSBlbGFwc2VkIGF0IHRoZSB0aW1lXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIGFueSBhdXRvbWF0aW9ucy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuX2dldFRpY2tzVW50aWxFdmVudCA9IGZ1bmN0aW9uIChldmVudCwgdGltZSkge1xuXHQgICAgICAgIGlmIChldmVudCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICBldmVudCA9IHtcblx0ICAgICAgICAgICAgICAgICd0aWNrcyc6IDAsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IDBcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNVbmRlZihldmVudC50aWNrcykpIHtcblx0ICAgICAgICAgICAgdmFyIHByZXZpb3VzRXZlbnQgPSB0aGlzLl9ldmVudHMucHJldmlvdXNFdmVudChldmVudCk7XG5cdCAgICAgICAgICAgIGV2ZW50LnRpY2tzID0gdGhpcy5fZ2V0VGlja3NVbnRpbEV2ZW50KHByZXZpb3VzRXZlbnQsIGV2ZW50LnRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgdmFsMCA9IHRoaXMuZ2V0VmFsdWVBdFRpbWUoZXZlbnQudGltZSk7XG5cdCAgICAgICAgdmFyIHZhbDEgPSB0aGlzLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIC8vaWYgaXQncyByaWdodCBvbiB0aGUgbGluZSwgdGFrZSB0aGUgcHJldmlvdXMgdmFsdWVcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmdldCh0aW1lKS50aW1lID09PSB0aW1lICYmIHRoaXMuX2V2ZW50cy5nZXQodGltZSkudHlwZSA9PT0gVG9uZS5QYXJhbS5BdXRvbWF0aW9uVHlwZS5TZXRWYWx1ZSkge1xuXHQgICAgICAgICAgICB2YWwxID0gdGhpcy5nZXRWYWx1ZUF0VGltZSh0aW1lIC0gdGhpcy5zYW1wbGVUaW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIDAuNSAqICh0aW1lIC0gZXZlbnQudGltZSkgKiAodmFsMCArIHZhbDEpICsgZXZlbnQudGlja3M7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV0dXJucyB0aGUgdGljayB2YWx1ZSBhdCB0aGUgdGltZS4gVGFrZXMgaW50byBhY2NvdW50XG5cdFx0ICogYW55IGF1dG9tYXRpb24gY3VydmVzIHNjaGVkdWxlZCBvbiB0aGUgc2lnbmFsLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgVGhlIHRpbWUgdG8gZ2V0IHRoZSB0aWNrIGNvdW50IGF0XG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgVGhlIG51bWJlciBvZiB0aWNrcyB3aGljaCBoYXZlIGVsYXBzZWQgYXQgdGhlIHRpbWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gYW55IGF1dG9tYXRpb25zLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50cy5nZXQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuX2dldFRpY2tzVW50aWxFdmVudChldmVudCwgdGltZSksIDApO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybiB0aGUgZWxhcHNlZCB0aW1lIG9mIHRoZSBudW1iZXIgb2YgdGlja3MgZnJvbSB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSB7VGlja3N9IHRpY2tzIFRoZSBudW1iZXIgb2YgdGlja3MgdG8gY2FsY3VsYXRlXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSBUaGUgdGltZSB0byBnZXQgdGhlIG5leHQgdGljayBmcm9tXG5cdFx0ICogQHJldHVybiB7U2Vjb25kc30gVGhlIGR1cmF0aW9uIG9mIHRoZSBudW1iZXIgb2YgdGlja3MgZnJvbSB0aGUgZ2l2ZW4gdGltZSBpbiBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLmdldER1cmF0aW9uT2ZUaWNrcyA9IGZ1bmN0aW9uICh0aWNrcywgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgY3VycmVudFRpY2sgPSB0aGlzLmdldFRpY2tzQXRUaW1lKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmdldFRpbWVPZlRpY2soY3VycmVudFRpY2sgKyB0aWNrcykgLSB0aW1lO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdpdmVuIGEgdGljaywgcmV0dXJucyB0aGUgdGltZSB0aGF0IHRpY2sgb2NjdXJzIGF0LlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrXG5cdFx0ICogQHJldHVybiB7VGltZX0gICAgICBUaGUgdGltZSB0aGF0IHRoZSB0aWNrIG9jY3Vycy5cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NpZ25hbC5wcm90b3R5cGUuZ2V0VGltZU9mVGljayA9IGZ1bmN0aW9uICh0aWNrKSB7XG5cdCAgICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuX2V2ZW50cy5nZXQodGljaywgJ3RpY2tzJyk7XG5cdCAgICAgICAgdmFyIGFmdGVyID0gdGhpcy5fZXZlbnRzLmdldEFmdGVyKHRpY2ssICd0aWNrcycpO1xuXHQgICAgICAgIGlmIChiZWZvcmUgJiYgYmVmb3JlLnRpY2tzID09PSB0aWNrKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBiZWZvcmUudGltZTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZSAmJiBhZnRlciAmJiBhZnRlci50eXBlID09PSBUb25lLlBhcmFtLkF1dG9tYXRpb25UeXBlLkxpbmVhciAmJiBiZWZvcmUudmFsdWUgIT09IGFmdGVyLnZhbHVlKSB7XG5cdCAgICAgICAgICAgIHZhciB2YWwwID0gdGhpcy5nZXRWYWx1ZUF0VGltZShiZWZvcmUudGltZSk7XG5cdCAgICAgICAgICAgIHZhciB2YWwxID0gdGhpcy5nZXRWYWx1ZUF0VGltZShhZnRlci50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGRlbHRhID0gKHZhbDEgLSB2YWwwKSAvIChhZnRlci50aW1lIC0gYmVmb3JlLnRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgayA9IE1hdGguc3FydChNYXRoLnBvdyh2YWwwLCAyKSAtIDIgKiBkZWx0YSAqIChiZWZvcmUudGlja3MgLSB0aWNrKSk7XG5cdCAgICAgICAgICAgIHZhciBzb2wxID0gKC12YWwwICsgaykgLyBkZWx0YTtcblx0ICAgICAgICAgICAgdmFyIHNvbDIgPSAoLXZhbDAgLSBrKSAvIGRlbHRhO1xuXHQgICAgICAgICAgICByZXR1cm4gKHNvbDEgPiAwID8gc29sMSA6IHNvbDIpICsgYmVmb3JlLnRpbWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUpIHtcblx0ICAgICAgICAgICAgaWYgKGJlZm9yZS52YWx1ZSA9PT0gMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGJlZm9yZS50aW1lICsgKHRpY2sgLSBiZWZvcmUudGlja3MpIC8gYmVmb3JlLnZhbHVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRpY2sgLyB0aGlzLl9pbml0aWFsVmFsdWU7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENvbnZlcnQgc29tZSBudW1iZXIgb2YgdGlja3MgdGhlaXIgdGhlIGR1cmF0aW9uIGluIHNlY29uZHMgYWNjb3VudGluZ1xuXHRcdCAqIGZvciBhbnkgYXV0b21hdGlvbiBjdXJ2ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSBudW1iZXIgb2YgdGlja3MgdG8gY29udmVydCB0byBzZWNvbmRzLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IFt3aGVuPW5vd10gIFdoZW4gYWxvbmcgdGhlIGF1dG9tYXRpb24gdGltZWxpbmUgdG8gY29udmVydCB0aGUgdGlja3MuXG5cdFx0ICogQHJldHVybiB7VG9uZS5UaW1lfSAgICAgICBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBvZiB0aGUgdGlja3MuXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTaWduYWwucHJvdG90eXBlLnRpY2tzVG9UaW1lID0gZnVuY3Rpb24gKHRpY2tzLCB3aGVuKSB7XG5cdCAgICAgICAgd2hlbiA9IHRoaXMudG9TZWNvbmRzKHdoZW4pO1xuXHQgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaW1lKHRoaXMuZ2V0RHVyYXRpb25PZlRpY2tzKHRpY2tzLCB3aGVuKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGludmVyc2Ugb2YgW3RpY2tzVG9UaW1lXSgjdGlja3N0b3RpbWUpLiBDb252ZXJ0IGEgZHVyYXRpb24gaW5cblx0XHQgKiBzZWNvbmRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIG51bWJlciBvZiB0aWNrcyBhY2NvdW50aW5nIGZvciBhbnlcblx0XHQgKiBhdXRvbWF0aW9uIGN1cnZlcyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiBUaGUgdGltZSBpbnRlcnZhbCB0byBjb252ZXJ0IHRvIHRpY2tzLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IFt3aGVuPW5vd10gICAgIFdoZW4gYWxvbmcgdGhlIGF1dG9tYXRpb24gdGltZWxpbmUgdG8gY29udmVydCB0aGUgdGlja3MuXG5cdFx0ICogQHJldHVybiB7VG9uZS5UaWNrc30gICAgICAgICAgVGhlIGR1cmF0aW9uIGluIHRpY2tzLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU2lnbmFsLnByb3RvdHlwZS50aW1lVG9UaWNrcyA9IGZ1bmN0aW9uIChkdXJhdGlvbiwgd2hlbikge1xuXHQgICAgICAgIHdoZW4gPSB0aGlzLnRvU2Vjb25kcyh3aGVuKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB2YXIgc3RhcnRUaWNrcyA9IHRoaXMuZ2V0VGlja3NBdFRpbWUod2hlbik7XG5cdCAgICAgICAgdmFyIGVuZFRpY2tzID0gdGhpcy5nZXRUaWNrc0F0VGltZSh3aGVuICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiBuZXcgVG9uZS5UaWNrcyhlbmRUaWNrcyAtIHN0YXJ0VGlja3MpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpY2tTaWduYWw7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBUaW1lbGluZSBTdGF0ZS4gUHJvdmlkZXMgdGhlIG1ldGhvZHM6IDxjb2RlPnNldFN0YXRlQXRUaW1lKFwic3RhdGVcIiwgdGltZSk8L2NvZGU+XG5cdFx0ICogICAgICAgICAgYW5kIDxjb2RlPmdldFZhbHVlQXRUaW1lKHRpbWUpPC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5UaW1lbGluZX1cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IGluaXRpYWwgVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIFRpbWVsaW5lU3RhdGUuIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byA8Y29kZT51bmRlZmluZWQ8L2NvZGU+XG5cdFx0ICovXG5cdCAgICBUb25lLlRpbWVsaW5lU3RhdGUgPSBmdW5jdGlvbiAoaW5pdGlhbCkge1xuXHQgICAgICAgIFRvbmUuVGltZWxpbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgaW5pdGlhbCBzdGF0ZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2luaXRpYWwgPSBpbml0aWFsO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVGltZWxpbmVTdGF0ZSwgVG9uZS5UaW1lbGluZSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgc2NoZWR1bGVkIHN0YXRlIHNjaGVkdWxlZCBiZWZvcmUgb3IgYXRcblx0XHQgKiAgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJuICB7U3RyaW5nfSAgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIGlucHV0IGluIHNldFN0YXRlQXRUaW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5nZXQodGltZSk7XG5cdCAgICAgICAgaWYgKGV2ZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBldmVudC5zdGF0ZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdGlhbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIHN0YXRlIHRvIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgc3RhdGUgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIHRvIHNldC5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdG8gcXVlcnkuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpbWVsaW5lU3RhdGV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuc2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAoc3RhdGUsIHRpbWUpIHtcblx0ICAgICAgICAvL2FsbCBzdGF0ZSBjaGFuZ2VzIG5lZWQgdG8gYmUgPj0gdGhlIHByZXZpb3VzIHN0YXRlIHRpbWVcblx0ICAgICAgICAvL1RPRE8gdGhyb3cgZXJyb3IgaWYgdGltZSA8IHRoZSBwcmV2aW91cyBldmVudCB0aW1lXG5cdCAgICAgICAgdGhpcy5hZGQoe1xuXHQgICAgICAgICAgICAnc3RhdGUnOiBzdGF0ZSxcblx0ICAgICAgICAgICAgJ3RpbWUnOiB0aW1lXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZXZlbnQgYmVmb3JlIHRoZSB0aW1lIHdpdGggdGhlIGdpdmVuIHN0YXRlXG5cdFx0ICogIEBwYXJhbSB7VG9uZS5TdGF0ZX0gc3RhdGUgVGhlIHN0YXRlIHRvIGxvb2sgZm9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBXaGVuIHRvIGNoZWNrIGJlZm9yZVx0XHRcdFxuXHRcdCAqICBAcmV0dXJuICB7T2JqZWN0fSAgVGhlIGV2ZW50IHdpdGggdGhlIGdpdmVuIHN0YXRlIGJlZm9yZSB0aGUgdGltZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaW1lbGluZVN0YXRlLnByb3RvdHlwZS5nZXRMYXN0U3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUsIHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VhcmNoKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fdGltZWxpbmVbaV07XG5cdCAgICAgICAgICAgIGlmIChldmVudC5zdGF0ZSA9PT0gc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBldmVudCBhZnRlciB0aGUgdGltZSB3aXRoIHRoZSBnaXZlbiBzdGF0ZVxuXHRcdCAqICBAcGFyYW0ge1RvbmUuU3RhdGV9IHN0YXRlIFRoZSBzdGF0ZSB0byBsb29rIGZvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBjaGVjayBmcm9tXG5cdFx0ICogIEByZXR1cm4gIHtPYmplY3R9ICBUaGUgZXZlbnQgd2l0aCB0aGUgZ2l2ZW4gc3RhdGUgYWZ0ZXIgdGhlIHRpbWVcblx0XHQgKi9cblx0ICAgIFRvbmUuVGltZWxpbmVTdGF0ZS5wcm90b3R5cGUuZ2V0TmV4dFN0YXRlID0gZnVuY3Rpb24gKHN0YXRlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlYXJjaCh0aW1lKTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA8IHRoaXMuX3RpbWVsaW5lLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl90aW1lbGluZVtpXTtcblx0ICAgICAgICAgICAgICAgIGlmIChldmVudC5zdGF0ZSA9PT0gc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVGltZWxpbmVTdGF0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBVc2VzIFtUb25lLlRpY2tTaWduYWxdKFRpY2tTaWduYWwpIHRvIHRyYWNrIGVsYXBzZWQgdGlja3Mgd2l0aFxuXHRcdCAqICBcdFx0Y29tcGxleCBhdXRvbWF0aW9uIGN1cnZlcy5cblx0XHQgKlxuXHRcdCAqIFx0QGNvbnN0cnVjdG9yXG5cdCAgICAgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgaW5pdGlhbCBmcmVxdWVuY3kgdGhhdCB0aGUgc2lnbmFsIHRpY2tzIGF0XG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZnJlcXVlbmN5J10sIFRvbmUuVGlja1NvdXJjZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gc2hvdWxkIGJlIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5UaWNrU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZnJlcXVlbmN5Jyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHN0YXRlIHRpbWVsaW5lXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBvZmZzZXQgdmFsdWVzIG9mIHRoZSB0aWNrc1xuXHRcdFx0ICogQHR5cGUge1RvbmUuVGltZWxpbmV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdGlja09mZnNldCA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgLy9hZGQgdGhlIGZpcnN0IGV2ZW50XG5cdCAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZSgwLCAwKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpY2tTb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UuZGVmYXVsdHMgPSB7ICdmcmVxdWVuY3knOiAxIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiLCBcInN0b3BwZWRcIiBvciBcInBhdXNlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpY2tTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGNsb2NrIGF0IHRoZSBnaXZlbiB0aW1lLiBPcHRpb25hbGx5IHBhc3MgaW4gYW4gb2Zmc2V0XG5cdFx0ICogIG9mIHdoZXJlIHRvIHN0YXJ0IHRoZSB0aWNrIGNvdW50ZXIgZnJvbS5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICB0aW1lICAgIFRoZSB0aW1lIHRoZSBjbG9jayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtUaWNrcz0wfSBvZmZzZXQgVGhlIG51bWJlciBvZiB0aWNrcyB0byBzdGFydCB0aGUgc291cmNlIGF0XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlRpY2tTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQob2Zmc2V0KSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zZXRUaWNrc0F0VGltZShvZmZzZXQsIHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSBjbG9jay4gU3RvcHBpbmcgdGhlIGNsb2NrIHJlc2V0cyB0aGUgdGljayBjb3VudGVyIHRvIDAuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBUaGUgdGltZSB3aGVuIHRoZSBjbG9jayBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NvdXJjZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGNsb2NrLnN0b3AoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIC8vY2FuY2VsIHRoZSBwcmV2aW91cyBzdG9wXG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQudGltZSA+IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuY2FuY2VsKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKGV2ZW50LnRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuc2V0VGlja3NBdFRpbWUoMCwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhdXNlIHRoZSBjbG9jay4gUGF1c2luZyBkb2VzIG5vdCByZXNldCB0aGUgdGljayBjb3VudGVyLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlBhdXNlZCwgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgc3RhcnQvc3RvcC9wYXVzZSBhbmQgc2V0VGlja0F0VGltZSBldmVudHMgc2NoZWR1bGVkIGFmdGVyIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0byBjbGVhciB0aGUgZXZlbnRzIGFmdGVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRpY2tTb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja1NvdXJjZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgZWxhcHNlZCB0aWNrcyBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICBUaGUgbnVtYmVyIG9mIHRpY2tzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdmFyIHN0b3BFdmVudCA9IHRoaXMuX3N0YXRlLmdldExhc3RTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIC8vdGhpcyBldmVudCBhbGxvd3MgZm9yRWFjaEJldHdlZW4gdG8gaXRlcmF0ZSB1bnRpbCB0aGUgY3VycmVudCB0aW1lXG5cdCAgICAgICAgdmFyIHRtcEV2ZW50ID0ge1xuXHQgICAgICAgICAgICBzdGF0ZTogVG9uZS5TdGF0ZS5QYXVzZWQsXG5cdCAgICAgICAgICAgIHRpbWU6IHRpbWVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9rZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBvZmZzZXQgZXZlbnRcblx0ICAgICAgICB2YXIgbGFzdFN0YXRlID0gc3RvcEV2ZW50O1xuXHQgICAgICAgIHZhciBlbGFwc2VkVGlja3MgPSAwO1xuXHQgICAgICAgIC8vaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgZXZlbnRzIHNpbmNlIHRoZSBsYXN0IHN0b3Bcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdG9wRXZlbnQudGltZSwgdGltZSArIHRoaXMuc2FtcGxlVGltZSwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgdmFyIHBlcmlvZFN0YXJ0VGltZSA9IGxhc3RTdGF0ZS50aW1lO1xuXHQgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGFuIG9mZnNldCBldmVudCBpbiB0aGlzIHBlcmlvZCB1c2UgdGhhdFxuXHQgICAgICAgICAgICB2YXIgb2Zmc2V0RXZlbnQgPSB0aGlzLl90aWNrT2Zmc2V0LmdldChlLnRpbWUpO1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0RXZlbnQudGltZSA+PSBsYXN0U3RhdGUudGltZSkge1xuXHQgICAgICAgICAgICAgICAgZWxhcHNlZFRpY2tzID0gb2Zmc2V0RXZlbnQudGlja3M7XG5cdCAgICAgICAgICAgICAgICBwZXJpb2RTdGFydFRpbWUgPSBvZmZzZXRFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChsYXN0U3RhdGUuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBlLnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRUaWNrcyArPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShlLnRpbWUpIC0gdGhpcy5mcmVxdWVuY3kuZ2V0VGlja3NBdFRpbWUocGVyaW9kU3RhcnRUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBsYXN0U3RhdGUgPSBlO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgLy9yZW1vdmUgdGhlIHRlbXBvcmFyeSBldmVudFxuXHQgICAgICAgIHRoaXMuX3N0YXRlLnJlbW92ZSh0bXBFdmVudCk7XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIHRpY2tzXG5cdCAgICAgICAgcmV0dXJuIGVsYXBzZWRUaWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQuIFN0YXJ0cyBjb3VudGluZyBhdCAwXG5cdFx0ICogIGFuZCBpbmNyZW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC4gUmV0dXJucyAtMSB3aGVuIHN0b3BwZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpY2tTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHRpY2tzXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLCAndGlja3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRpY2tzQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKHQsIHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHNpbmNlIHRpY2tzPTAgdGhhdCB0aGUgVGlja1NvdXJjZSBoYXMgYmVlbiBydW5uaW5nLiBBY2NvdW50c1xuXHRcdCAqICBmb3IgdGVtcG8gY3VydmVzXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRpY2tTb3VyY2UjXG5cdFx0ICogIEBuYW1lIHNlY29uZHNcblx0XHQgKiAgQHR5cGUge1NlY29uZHN9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZSwgJ3NlY29uZHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNlY29uZHNBdFRpbWUodGhpcy5ub3coKSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLmZyZXF1ZW5jeS50aW1lVG9UaWNrcyhzLCBub3cpO1xuXHQgICAgICAgICAgICB0aGlzLnNldFRpY2tzQXRUaW1lKHRpY2tzLCBub3cpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZWxhcHNlZCBzZWNvbmRzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBnZXQgdGhlIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc30gIFRoZSBudW1iZXIgb2YgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFNlY29uZHNBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgc3RvcEV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0TGFzdFN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgLy90aGlzIGV2ZW50IGFsbG93cyBmb3JFYWNoQmV0d2VlbiB0byBpdGVyYXRlIHVudGlsIHRoZSBjdXJyZW50IHRpbWVcblx0ICAgICAgICB2YXIgdG1wRXZlbnQgPSB7XG5cdCAgICAgICAgICAgIHN0YXRlOiBUb25lLlN0YXRlLlBhdXNlZCxcblx0ICAgICAgICAgICAgdGltZTogdGltZVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuYWRkKHRtcEV2ZW50KTtcblx0ICAgICAgICAvL2tlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIG9mZnNldCBldmVudFxuXHQgICAgICAgIHZhciBsYXN0U3RhdGUgPSBzdG9wRXZlbnQ7XG5cdCAgICAgICAgdmFyIGVsYXBzZWRTZWNvbmRzID0gMDtcblx0ICAgICAgICAvL2l0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIGV2ZW50cyBzaW5jZSB0aGUgbGFzdCBzdG9wXG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEJldHdlZW4oc3RvcEV2ZW50LnRpbWUsIHRpbWUgKyB0aGlzLnNhbXBsZVRpbWUsIGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICAgIHZhciBwZXJpb2RTdGFydFRpbWUgPSBsYXN0U3RhdGUudGltZTtcblx0ICAgICAgICAgICAgLy9pZiB0aGVyZSBpcyBhbiBvZmZzZXQgZXZlbnQgaW4gdGhpcyBwZXJpb2QgdXNlIHRoYXRcblx0ICAgICAgICAgICAgdmFyIG9mZnNldEV2ZW50ID0gdGhpcy5fdGlja09mZnNldC5nZXQoZS50aW1lKTtcblx0ICAgICAgICAgICAgaWYgKG9mZnNldEV2ZW50LnRpbWUgPj0gbGFzdFN0YXRlLnRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGVsYXBzZWRTZWNvbmRzID0gb2Zmc2V0RXZlbnQuc2Vjb25kcztcblx0ICAgICAgICAgICAgICAgIHBlcmlvZFN0YXJ0VGltZSA9IG9mZnNldEV2ZW50LnRpbWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKGxhc3RTdGF0ZS5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkICYmIGUuc3RhdGUgIT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgZWxhcHNlZFNlY29uZHMgKz0gZS50aW1lIC0gcGVyaW9kU3RhcnRUaW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGxhc3RTdGF0ZSA9IGU7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgdGVtcG9yYXJ5IGV2ZW50XG5cdCAgICAgICAgdGhpcy5fc3RhdGUucmVtb3ZlKHRtcEV2ZW50KTtcblx0ICAgICAgICAvL3JldHVybiB0aGUgdGlja3Ncblx0ICAgICAgICByZXR1cm4gZWxhcHNlZFNlY29uZHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpY2tzfSB0aWNrcyBUaGUgdGljayB2YWx1ZSB0byBzZXRcblx0XHQgKiBAcGFyYW0gIHtUaW1lfSB0aW1lICBXaGVuIHRvIHNldCB0aGUgdGljayB2YWx1ZVxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVGlja1NvdXJjZX0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5zZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aWNrcywgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl90aWNrT2Zmc2V0LmFkZCh7XG5cdCAgICAgICAgICAgICd0aW1lJzogdGltZSxcblx0ICAgICAgICAgICAgJ3RpY2tzJzogdGlja3MsXG5cdCAgICAgICAgICAgICdzZWNvbmRzJzogdGhpcy5mcmVxdWVuY3kuZ2V0RHVyYXRpb25PZlRpY2tzKHRpY2tzLCB0aW1lKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBzY2hlZHVsZWQgc3RhdGUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byBxdWVyeS5cblx0XHQgKiAgQHJldHVybiAge1N0cmluZ30gIFRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBpbnB1dCBpbiBzZXRTdGF0ZUF0VGltZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RhcnQoXCIrMC4xXCIpO1xuXHRcdCAqIHNvdXJjZS5nZXRTdGF0ZUF0VGltZShcIiswLjFcIik7IC8vcmV0dXJucyBcInN0YXJ0ZWRcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5nZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIHRpbWUgb2YgdGhlIGdpdmVuIHRpY2suIFRoZSBzZWNvbmQgYXJndW1lbnRcblx0XHQgKiBpcyB3aGVuIHRvIHRlc3QgYmVmb3JlLiBTaW5jZSB0aWNrcyBjYW4gYmUgc2V0ICh3aXRoIHNldFRpY2tzQXRUaW1lKVxuXHRcdCAqIHRoZXJlIG1heSBiZSBtdWx0aXBsZSB0aW1lcyBmb3IgYSBnaXZlbiB0aWNrIHZhbHVlLiBcblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgbnVtYmVyLlxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSBiZWZvcmUgV2hlbiB0byBtZWFzdXJlIHRoZSB0aWNrIHZhbHVlIGZyb20uIFxuXHRcdCAqIEByZXR1cm4ge1RpbWV9ICAgICAgIFRoZSB0aW1lIG9mIHRoZSB0aWNrXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmdldFRpbWVPZlRpY2sgPSBmdW5jdGlvbiAodGljaywgYmVmb3JlKSB7XG5cdCAgICAgICAgYmVmb3JlID0gVG9uZS5kZWZhdWx0QXJnKGJlZm9yZSwgdGhpcy5ub3coKSk7XG5cdCAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX3RpY2tPZmZzZXQuZ2V0KGJlZm9yZSk7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KGJlZm9yZSk7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGltZSA9IE1hdGgubWF4KG9mZnNldC50aW1lLCBldmVudC50aW1lKTtcblx0ICAgICAgICB2YXIgYWJzb2x1dGVUaWNrcyA9IHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKHN0YXJ0VGltZSkgKyB0aWNrIC0gb2Zmc2V0LnRpY2tzO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmZyZXF1ZW5jeS5nZXRUaW1lT2ZUaWNrKGFic29sdXRlVGlja3MpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2UgdGhlIGNhbGxiYWNrIGV2ZW50IGF0IGFsbCBzY2hlZHVsZWQgdGlja3MgYmV0d2VlbiB0aGUgXG5cdFx0ICogIHN0YXJ0IHRpbWUgYW5kIHRoZSBlbmQgdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICBzdGFydFRpbWUgIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlYXJjaCByYW5nZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgICBlbmRUaW1lICAgIFRoZSBlbmQgb2YgdGhlIHNlYXJjaCByYW5nZVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbjxUaW1lLFRpY2tzPn0gIGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGVhY2ggdGlja1xuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5UaWNrU291cmNlfSAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tTb3VyY2UucHJvdG90eXBlLmZvckVhY2hUaWNrQmV0d2VlbiA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgLy9vbmx5IGl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VjdGlvbnMgd2hlcmUgaXQgaXMgXCJzdGFydGVkXCJcblx0ICAgICAgICB2YXIgbGFzdFN0YXRlRXZlbnQgPSB0aGlzLl9zdGF0ZS5nZXQoc3RhcnRUaW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5mb3JFYWNoQmV0d2VlbihzdGFydFRpbWUsIGVuZFRpbWUsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBpZiAobGFzdFN0YXRlRXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCAmJiBldmVudC5zdGF0ZSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmZvckVhY2hUaWNrQmV0d2VlbihNYXRoLm1heChsYXN0U3RhdGVFdmVudC50aW1lLCBzdGFydFRpbWUpLCBldmVudC50aW1lIC0gdGhpcy5zYW1wbGVUaW1lLCBjYWxsYmFjayk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgbGFzdFN0YXRlRXZlbnQgPSBldmVudDtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IE1hdGgubWF4KGxhc3RTdGF0ZUV2ZW50LnRpbWUsIHN0YXJ0VGltZSk7XG5cdCAgICAgICAgaWYgKGxhc3RTdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgdGhpcy5fc3RhdGUpIHtcblx0ICAgICAgICAgICAgLy9maWd1cmUgb3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGZyZXF1ZW5jeSB0aWNrcyBhbmQgdGhlIFxuXHQgICAgICAgICAgICB2YXIgc3RhcnRUaWNrcyA9IHRoaXMuZnJlcXVlbmN5LmdldFRpY2tzQXRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrc0F0U3RhcnQgPSB0aGlzLmZyZXF1ZW5jeS5nZXRUaWNrc0F0VGltZShsYXN0U3RhdGVFdmVudC50aW1lKTtcblx0ICAgICAgICAgICAgdmFyIGRpZmYgPSBzdGFydFRpY2tzIC0gdGlja3NBdFN0YXJ0O1xuXHQgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gZGlmZiAlIDE7XG5cdCAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgIG9mZnNldCA9IDEgLSBvZmZzZXQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIG5leHRUaWNrVGltZSA9IHRoaXMuZnJlcXVlbmN5LmdldFRpbWVPZlRpY2soc3RhcnRUaWNrcyArIG9mZnNldCk7XG5cdCAgICAgICAgICAgIHZhciBlcnJvciA9IG51bGw7XG5cdCAgICAgICAgICAgIHdoaWxlIChuZXh0VGlja1RpbWUgPCBlbmRUaW1lICYmIHRoaXMuX3N0YXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5leHRUaWNrVGltZSwgTWF0aC5yb3VuZCh0aGlzLmdldFRpY2tzQXRUaW1lKG5leHRUaWNrVGltZSkpKTtcblx0ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBuZXh0VGlja1RpbWUgKz0gdGhpcy5mcmVxdWVuY3kuZ2V0RHVyYXRpb25PZlRpY2tzKDEsIG5leHRUaWNrVGltZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKGVycm9yKSB7XG5cdCAgICAgICAgICAgIHRocm93IGVycm9yO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuVGlja1NvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrU291cmNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuUGFyYW0ucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tPZmZzZXQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmcmVxdWVuY3knKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpY2tTb3VyY2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQSBzYW1wbGUgYWNjdXJhdGUgY2xvY2sgd2hpY2ggcHJvdmlkZXMgYSBjYWxsYmFjayBhdCB0aGUgZ2l2ZW4gcmF0ZS5cblx0XHQgKiAgICAgICAgICBXaGlsZSB0aGUgY2FsbGJhY2sgaXMgbm90IHNhbXBsZS1hY2N1cmF0ZSAoaXQgaXMgc3RpbGwgc3VzY2VwdGlibGUgdG9cblx0XHQgKiAgICAgICAgICBsb29zZSBKUyB0aW1pbmcpLCB0aGUgdGltZSBwYXNzZWQgaW4gYXMgdGhlIGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFja1xuXHRcdCAqICAgICAgICAgIGlzIHByZWNpc2UuIEZvciBtb3N0IGFwcGxpY2F0aW9ucywgaXQgaXMgYmV0dGVyIHRvIHVzZSBUb25lLlRyYW5zcG9ydFxuXHRcdCAqICAgICAgICAgIGluc3RlYWQgb2YgdGhlIENsb2NrIGJ5IGl0c2VsZiBzaW5jZSB5b3UgY2FuIHN5bmNocm9uaXplIG11bHRpcGxlIGNhbGxiYWNrcy5cblx0XHQgKlxuXHRcdCAqIFx0QGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICogXHRAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aXRoIHRoZSB0aW1lIG9mIHRoZSBhdWRpbyBldmVudFxuXHRcdCAqIFx0QHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgcmF0ZSBvZiB0aGUgY2FsbGJhY2tcblx0XHQgKiBcdEBleGFtcGxlXG5cdFx0ICogLy90aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGFwcHJveGltYXRlbHkgb25jZSBhIHNlY29uZFxuXHRcdCAqIC8vYW5kIHdpbGwgcHJpbnQgdGhlIHRpbWUgZXhhY3RseSBvbmNlIGEgc2Vjb25kIGFwYXJ0LlxuXHRcdCAqIHZhciBjbG9jayA9IG5ldyBUb25lLkNsb2NrKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2codGltZSk7XG5cdFx0ICogfSwgMSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSdcblx0ICAgICAgICBdLCBUb25lLkNsb2NrKTtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gaW52b2tlIGF0IHRoZSBzY2hlZHVsZWQgdGljay5cblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG5leHQgdGltZSB0aGUgY2FsbGJhY2sgaXMgc2NoZWR1bGVkLlxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGljayBjb3VudGVyXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlRpY2tTb3VyY2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UgPSBuZXcgVG9uZS5UaWNrU291cmNlKG9wdGlvbnMuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbGFzdCB0aW1lIHRoZSBsb29wIGNhbGxiYWNrIHdhcyBpbnZva2VkXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJhdGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBiZSBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlICB7QlBNfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fdGlja1NvdXJjZS5mcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzdGF0ZSB0aW1lbGluZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlRpbWVsaW5lU3RhdGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFRvbmUuVGltZWxpbmVTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQpO1xuXHQgICAgICAgIC8vYWRkIGFuIGluaXRpYWwgc3RhdGVcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsb29wIGZ1bmN0aW9uIGJvdW5kIHRvIGl0cyBjb250ZXh0LlxuXHRcdFx0ICogIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHJlbW92ZSB0aGUgZXZlbnQgaW4gdGhlIGVuZC5cblx0XHRcdCAqICBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JvdW5kTG9vcCA9IHRoaXMuX2xvb3AuYmluZCh0aGlzKTtcblx0ICAgICAgICAvL2JpbmQgYSBjYWxsYmFjayB0byB0aGUgd29ya2VyIHRocmVhZFxuXHQgICAgICAgIHRoaXMuY29udGV4dC5vbigndGljaycsIHRoaXMuX2JvdW5kTG9vcCk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DbG9jaywgVG9uZS5FbWl0dGVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiLCBcInN0b3BwZWRcIiBvciBcInBhdXNlZFwiLlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkNsb2NrI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2xvY2sucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgY2xvY2sgYXQgdGhlIGdpdmVuIHRpbWUuIE9wdGlvbmFsbHkgcGFzcyBpbiBhbiBvZmZzZXRcblx0XHQgKiAgb2Ygd2hlcmUgdG8gc3RhcnQgdGhlIHRpY2sgY291bnRlciBmcm9tLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIHRpbWUgICAgVGhlIHRpbWUgdGhlIGNsb2NrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0gIHtUaWNrcz19ICBvZmZzZXQgIFdoZXJlIHRoZSB0aWNrIGNvdW50ZXIgc3RhcnRzIGNvdW50aW5nIGZyb20uXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkNsb2NrfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RhcnRlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9sYXN0VXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgY2xvY2suIFN0b3BwaW5nIHRoZSBjbG9jayByZXNldHMgdGhlIHRpY2sgY291bnRlciB0byAwLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gVGhlIHRpbWUgd2hlbiB0aGUgY2xvY2sgc2hvdWxkIHN0b3AuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNsb2NrfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogY2xvY2suc3RvcCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3RpY2tTb3VyY2Uuc3RvcCh0aW1lKTtcblx0ICAgICAgICBpZiAodGltZSA8IHRoaXMuX2xhc3RVcGRhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgdGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBQYXVzZSB0aGUgY2xvY2suIFBhdXNpbmcgZG9lcyBub3QgcmVzZXQgdGhlIHRpY2sgY291bnRlci5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIGNsb2NrIHNob3VsZCBzdG9wLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DbG9ja30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSkgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlBhdXNlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UucGF1c2UodGltZSk7XG5cdCAgICAgICAgICAgIGlmICh0aW1lIDwgdGhpcy5fbGFzdFVwZGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdwYXVzZScsIHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZC4gU3RhcnRzIGNvdW50aW5nIGF0IDBcblx0XHQgKiAgYW5kIGluY3JlbWVudHMgYWZ0ZXIgdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkLlxuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DbG9jay5wcm90b3R5cGUsICd0aWNrcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmdldFRpY2tzQXRUaW1lKHRoaXMubm93KCkpKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS50aWNrcyA9IHQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgc2luY2UgdGlja3M9MCB0aGF0IHRoZSBDbG9jayBoYXMgYmVlbiBydW5uaW5nLiBBY2NvdW50c1xuXHRcdCAqICBmb3IgdGVtcG8gY3VydmVzXG5cdFx0ICogIEB0eXBlIHtTZWNvbmRzfVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2xvY2sucHJvdG90eXBlLCAnc2Vjb25kcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2Uuc2Vjb25kcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdGlja1NvdXJjZS5zZWNvbmRzID0gcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIGVsYXBzZWQgc2Vjb25kcyBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSBlbGFwc2VkIHNlY29uZHNcblx0XHQgKiAgQHJldHVybiAge1NlY29uZHN9ICBUaGUgbnVtYmVyIG9mIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZ2V0U2Vjb25kc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2UuZ2V0U2Vjb25kc0F0VGltZSh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTZXQgdGhlIGNsb2NrJ3MgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGlja3N9IHRpY2tzIFRoZSB0aWNrIHZhbHVlIHRvIHNldFxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gc2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VG9uZS5DbG9ja30gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuc2V0VGlja3NBdFRpbWUgPSBmdW5jdGlvbiAodGlja3MsIHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlLnNldFRpY2tzQXRUaW1lKHRpY2tzLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZXQgdGhlIGNsb2NrJ3MgdGlja3MgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogQHBhcmFtICB7VGltZX0gdGltZSAgV2hlbiB0byBnZXQgdGhlIHRpY2sgdmFsdWVcblx0XHQgKiBAcmV0dXJuIHtUaWNrc30gICAgICAgVGhlIHRpY2sgdmFsdWUgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5nZXRUaWNrc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2UuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSB0aW1lIG9mIHRoZSBuZXh0IHRpY2tcblx0XHQgKiBAcGFyYW0gIHtUaWNrc30gdGlja3MgVGhlIHRpY2sgbnVtYmVyLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IGJlZm9yZSBcblx0XHQgKiBAcmV0dXJuIHtUb25lLkNsb2NrfSAgICAgICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5uZXh0VGlja1RpbWUgPSBmdW5jdGlvbiAob2Zmc2V0LCB3aGVuKSB7XG5cdCAgICAgICAgd2hlbiA9IHRoaXMudG9TZWNvbmRzKHdoZW4pO1xuXHQgICAgICAgIHZhciBjdXJyZW50VGljayA9IHRoaXMuZ2V0VGlja3NBdFRpbWUod2hlbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2tTb3VyY2UuZ2V0VGltZU9mVGljayhjdXJyZW50VGljayArIG9mZnNldCwgd2hlbik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzY2hlZHVsaW5nIGxvb3AuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5fbG9vcCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgc3RhcnRUaW1lID0gdGhpcy5fbGFzdFVwZGF0ZTtcblx0ICAgICAgICB2YXIgZW5kVGltZSA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IGVuZFRpbWU7XG5cdCAgICAgICAgaWYgKHN0YXJ0VGltZSAhPT0gZW5kVGltZSkge1xuXHQgICAgICAgICAgICAvL3RoZSBzdGF0ZSBjaGFuZ2UgZXZlbnRzXG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hCZXR3ZWVuKHN0YXJ0VGltZSwgZW5kVGltZSwgZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5zdGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgY2FzZSBUb25lLlN0YXRlLlN0YXJ0ZWQ6XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX3RpY2tTb3VyY2UuZ2V0VGlja3NBdFRpbWUoZS50aW1lKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgZS50aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICAgICAgY2FzZSBUb25lLlN0YXRlLlN0b3BwZWQ6XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKGUudGltZSAhPT0gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0b3AnLCBlLnRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIGNhc2UgVG9uZS5TdGF0ZS5QYXVzZWQ6XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdwYXVzZScsIGUudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgICAgIC8vdGhlIHRpY2sgY2FsbGJhY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3RpY2tTb3VyY2UuZm9yRWFjaFRpY2tCZXR3ZWVuKHN0YXJ0VGltZSwgZW5kVGltZSwgZnVuY3Rpb24gKHRpbWUsIHRpY2tzKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHRpY2tzKTtcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHNjaGVkdWxlZCBzdGF0ZSBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJuICB7U3RyaW5nfSAgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIGlucHV0IGluIHNldFN0YXRlQXRUaW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIGNsb2NrLnN0YXJ0KFwiKzAuMVwiKTtcblx0XHQgKiBjbG9jay5nZXRTdGF0ZUF0VGltZShcIiswLjFcIik7IC8vcmV0dXJucyBcInN0YXJ0ZWRcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5DbG9jay5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkNsb2NrfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNsb2NrLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5vZmYoJ3RpY2snLCB0aGlzLl9ib3VuZExvb3ApO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdmcmVxdWVuY3knKTtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl90aWNrU291cmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYm91bmRMb29wID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IEluZmluaXR5O1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ2xvY2s7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTaW1pbGFyIHRvIFRvbmUuVGltZWxpbmUsIGJ1dCBhbGwgZXZlbnRzIHJlcHJlc2VudFxuXHRcdCAqICAgICAgICAgaW50ZXJ2YWxzIHdpdGggYm90aCBcInRpbWVcIiBhbmQgXCJkdXJhdGlvblwiIHRpbWVzLiBUaGVcblx0XHQgKiAgICAgICAgIGV2ZW50cyBhcmUgcGxhY2VkIGluIGEgdHJlZSBzdHJ1Y3R1cmUgb3B0aW1pemVkXG5cdFx0ICogICAgICAgICBmb3IgcXVlcnlpbmcgYW4gaW50ZXJzZWN0aW9uIHBvaW50IHdpdGggdGhlIHRpbWVsaW5lXG5cdFx0ICogICAgICAgICBldmVudHMuIEludGVybmFsbHkgdXNlcyBhbiBbSW50ZXJ2YWwgVHJlZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW50ZXJ2YWxfdHJlZSlcblx0XHQgKiAgICAgICAgIHRvIHJlcHJlc2VudCB0aGUgZGF0YS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByb290IG5vZGUgb2YgdGhlIGludGV2YWwgdHJlZVxuXHRcdFx0ICogIEB0eXBlICB7SW50ZXJ2YWxOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yb290ID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBLZWVwIHRyYWNrIG9mIHRoZSBsZW5ndGggb2YgdGhlIHRpbWVsaW5lLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZW5ndGggPSAwO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuSW50ZXJ2YWxUaW1lbGluZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGV2ZW50IHRvIGFkZCB0byB0aGUgdGltZWxpbmUuIEFsbCBldmVudHMgbXVzdFxuXHRcdCAqICBoYXZlIGEgdGltZSBhbmQgZHVyYXRpb24gdmFsdWVcblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCB0byBhZGQgdG8gdGhlIHRpbWVsaW5lXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkludGVydmFsVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzVW5kZWYoZXZlbnQudGltZSkgfHwgVG9uZS5pc1VuZGVmKGV2ZW50LmR1cmF0aW9uKSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuSW50ZXJ2YWxUaW1lbGluZTogZXZlbnRzIG11c3QgaGF2ZSB0aW1lIGFuZCBkdXJhdGlvbiBwYXJhbWV0ZXJzJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGV2ZW50LnRpbWUgPSBldmVudC50aW1lLnZhbHVlT2YoKTtcblx0ICAgICAgICB2YXIgbm9kZSA9IG5ldyBJbnRlcnZhbE5vZGUoZXZlbnQudGltZSwgZXZlbnQudGltZSArIGV2ZW50LmR1cmF0aW9uLCBldmVudCk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdCA9IG5vZGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5pbnNlcnQobm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2xlbmd0aCsrO1xuXHQgICAgICAgIC8vIFJlc3RydWN0dXJlIHRyZWUgdG8gYmUgYmFsYW5jZWRcblx0ICAgICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBub2RlLnVwZGF0ZUhlaWdodCgpO1xuXHQgICAgICAgICAgICBub2RlLnVwZGF0ZU1heCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWJhbGFuY2Uobm9kZSk7XG5cdCAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fSAgZXZlbnQgIFRoZSBldmVudCB0byByZW1vdmUgZnJvbSB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHJldHVybiAge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2goZXZlbnQudGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSByZXN1bHRzW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKG5vZGUuZXZlbnQgPT09IGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlTm9kZShub2RlKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZW5ndGgtLTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkludGVydmFsVGltZWxpbmUjXG5cdFx0ICogIEBuYW1lIGxlbmd0aFxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJlbW92ZSBldmVudHMgd2hvc2UgdGltZSB0aW1lIGlzIGFmdGVyIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRvIHF1ZXJ5LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIHRoaXMuZm9yRWFjaEZyb20oYWZ0ZXIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICB0aGlzLnJlbW92ZShldmVudCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IHRoZSByb290IG5vZGUgYXMgdGhlIGdpdmVuIG5vZGVcblx0XHQgKiAgQHBhcmFtIHtJbnRlcnZhbE5vZGV9IG5vZGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW50ZXJ2YWxUaW1lbGluZS5wcm90b3R5cGUuX3NldFJvb3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHRoaXMuX3Jvb3QgPSBub2RlO1xuXHQgICAgICAgIGlmICh0aGlzLl9yb290ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Jvb3QucGFyZW50ID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlcGxhY2UgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIG5vZGUgaW4gdGhlIG5vZGUncyBwYXJlbnRcblx0XHQgKiAgd2l0aCB0aGUgcmVwbGFjZW1lbnQgbm9kZS5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICByZXBsYWNlbWVudFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcmVwbGFjZU5vZGVJblBhcmVudCA9IGZ1bmN0aW9uIChub2RlLCByZXBsYWNlbWVudCkge1xuXHQgICAgICAgIGlmIChub2RlLnBhcmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBpZiAobm9kZS5pc0xlZnRDaGlsZCgpKSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5sZWZ0ID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBub2RlLnBhcmVudC5yaWdodCA9IHJlcGxhY2VtZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYmFsYW5jZShub2RlLnBhcmVudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0Um9vdChyZXBsYWNlbWVudCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgdGhlIG5vZGUgZnJvbSB0aGUgdHJlZSBhbmQgcmVwbGFjZSBpdCB3aXRoXG5cdFx0ICogIGEgc3VjY2Vzc29yIHdoaWNoIGZvbGxvd3MgdGhlIHNjaGVtYS5cblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcmVtb3ZlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgaWYgKG5vZGUubGVmdCA9PT0gbnVsbCAmJiBub2RlLnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgbnVsbCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChub2RlLnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgbm9kZS5sZWZ0KTtcblx0ICAgICAgICB9IGVsc2UgaWYgKG5vZGUubGVmdCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLl9yZXBsYWNlTm9kZUluUGFyZW50KG5vZGUsIG5vZGUucmlnaHQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBiYWxhbmNlID0gbm9kZS5nZXRCYWxhbmNlKCk7XG5cdCAgICAgICAgICAgIHZhciByZXBsYWNlbWVudCwgdGVtcDtcblx0ICAgICAgICAgICAgaWYgKGJhbGFuY2UgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LnJpZ2h0ID09PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBub2RlLmxlZnQucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlcGxhY2VtZW50LnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQucmlnaHQ7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnBhcmVudC5yaWdodCA9IHJlcGxhY2VtZW50LmxlZnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHJlcGxhY2VtZW50LnBhcmVudDtcblx0ICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5sZWZ0ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LnJpZ2h0ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLnJpZ2h0LmxlZnQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gbm9kZS5yaWdodDtcblx0ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LmxlZnQgPSBub2RlLmxlZnQ7XG5cdCAgICAgICAgICAgICAgICB0ZW1wID0gcmVwbGFjZW1lbnQ7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA9IG5vZGUucmlnaHQubGVmdDtcblx0ICAgICAgICAgICAgICAgIHdoaWxlIChyZXBsYWNlbWVudC5sZWZ0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucGFyZW50ID0gcmVwbGFjZW1lbnQucGFyZW50O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucGFyZW50LmxlZnQgPSByZXBsYWNlbWVudC5yaWdodDtcblx0ICAgICAgICAgICAgICAgIHRlbXAgPSByZXBsYWNlbWVudC5wYXJlbnQ7XG5cdCAgICAgICAgICAgICAgICByZXBsYWNlbWVudC5sZWZ0ID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChub2RlLnBhcmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKG5vZGUuaXNMZWZ0Q2hpbGQoKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50LmxlZnQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQucmlnaHQgPSByZXBsYWNlbWVudDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocmVwbGFjZW1lbnQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vIHRoaXMuX3JlcGxhY2VOb2RlSW5QYXJlbnQobm9kZSwgcmVwbGFjZW1lbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9yZWJhbGFuY2UodGVtcCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIG5vZGUuZGlzcG9zZSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSb3RhdGUgdGhlIHRyZWUgdG8gdGhlIGxlZnRcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcm90YXRlTGVmdCA9IGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50O1xuXHQgICAgICAgIHZhciBpc0xlZnRDaGlsZCA9IG5vZGUuaXNMZWZ0Q2hpbGQoKTtcblx0ICAgICAgICAvLyBNYWtlIG5vZGUucmlnaHQgdGhlIG5ldyByb290IG9mIHRoaXMgc3ViIHRyZWUgKGluc3RlYWQgb2Ygbm9kZSlcblx0ICAgICAgICB2YXIgcGl2b3ROb2RlID0gbm9kZS5yaWdodDtcblx0ICAgICAgICBub2RlLnJpZ2h0ID0gcGl2b3ROb2RlLmxlZnQ7XG5cdCAgICAgICAgcGl2b3ROb2RlLmxlZnQgPSBub2RlO1xuXHQgICAgICAgIGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKGlzTGVmdENoaWxkKSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQubGVmdCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHBhcmVudC5yaWdodCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocGl2b3ROb2RlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJvdGF0ZSB0aGUgdHJlZSB0byB0aGUgcmlnaHRcblx0XHQgKiAgQHBhcmFtICB7SW50ZXJ2YWxOb2RlfSAgbm9kZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5fcm90YXRlUmlnaHQgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcblx0ICAgICAgICB2YXIgaXNMZWZ0Q2hpbGQgPSBub2RlLmlzTGVmdENoaWxkKCk7XG5cdCAgICAgICAgLy8gTWFrZSBub2RlLmxlZnQgdGhlIG5ldyByb290IG9mIHRoaXMgc3ViIHRyZWUgKGluc3RlYWQgb2Ygbm9kZSlcblx0ICAgICAgICB2YXIgcGl2b3ROb2RlID0gbm9kZS5sZWZ0O1xuXHQgICAgICAgIG5vZGUubGVmdCA9IHBpdm90Tm9kZS5yaWdodDtcblx0ICAgICAgICBwaXZvdE5vZGUucmlnaHQgPSBub2RlO1xuXHQgICAgICAgIGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKGlzTGVmdENoaWxkKSB7XG5cdCAgICAgICAgICAgICAgICBwYXJlbnQubGVmdCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHBhcmVudC5yaWdodCA9IHBpdm90Tm9kZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFJvb3QocGl2b3ROb2RlKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEJhbGFuY2UgdGhlIEJTVFxuXHRcdCAqICBAcGFyYW0gIHtJbnRlcnZhbE5vZGV9ICBub2RlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLl9yZWJhbGFuY2UgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIHZhciBiYWxhbmNlID0gbm9kZS5nZXRCYWxhbmNlKCk7XG5cdCAgICAgICAgaWYgKGJhbGFuY2UgPiAxKSB7XG5cdCAgICAgICAgICAgIGlmIChub2RlLmxlZnQuZ2V0QmFsYW5jZSgpIDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlTGVmdChub2RlLmxlZnQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlUmlnaHQobm9kZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKGJhbGFuY2UgPCAtMSkge1xuXHQgICAgICAgICAgICBpZiAobm9kZS5yaWdodC5nZXRCYWxhbmNlKCkgPiAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVSaWdodChub2RlLnJpZ2h0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZUxlZnQobm9kZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCBhbiBldmVudCB3aG9zZSB0aW1lIGFuZCBkdXJhdGlvbiBzcGFuIHRoZSBnaXZlIHRpbWUuIFdpbGxcblx0XHQgKiAgcmV0dXJuIHRoZSBtYXRjaCB3aG9zZSBcInRpbWVcIiB2YWx1ZSBpcyBjbG9zZXN0IHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtPYmplY3R9ICBldmVudCAgVGhlIGV2ZW50IHRvIGFkZCB0byB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHJldHVybiAge09iamVjdH0gIFRoZSBldmVudCB3aGljaCBzcGFucyB0aGUgZGVzaXJlZCB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2godGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgICAgIHZhciBtYXggPSByZXN1bHRzWzBdO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdHNbaV0ubG93ID4gbWF4Lmxvdykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBtYXggPSByZXN1bHRzW2ldO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJldHVybiBtYXguZXZlbnQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBldmVyeXRoaW5nIGluIHRoZSB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBpZiAodGhpcy5fcm9vdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgYWxsTm9kZXMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC50cmF2ZXJzZShmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICAgICAgYWxsTm9kZXMucHVzaChub2RlKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldiA9IGFsbE5vZGVzW2ldLmV2ZW50O1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgaW4gd2hpY2ggdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgb3ZlcmxhcHMgd2l0aCB0aGUgdGltZSBhbmQgZHVyYXRpb24gdGltZSBvZiB0aGUgZXZlbnQuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgVGhlIHRpbWUgdG8gY2hlY2sgaWYgaXRlbXMgYXJlIG92ZXJsYXBwaW5nXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aXRoIGV2ZXJ5IGl0ZW1cblx0XHQgKiAgQHJldHVybnMge1RvbmUuSW50ZXJ2YWxUaW1lbGluZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnRlcnZhbFRpbWVsaW5lLnByb3RvdHlwZS5mb3JFYWNoQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2godGltZSwgcmVzdWx0cyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSByZXN1bHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgZXYgPSByZXN1bHRzW2ldLmV2ZW50O1xuXHQgICAgICAgICAgICAgICAgaWYgKGV2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXYpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJdGVyYXRlIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgYXJyYXkgaW4gd2hpY2ggdGhlIHRpbWUgaXMgZ3JlYXRlclxuXHRcdCAqICB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB0aW1lIFRoZSB0aW1lIHRvIGNoZWNrIGlmIGl0ZW1zIGFyZSBiZWZvcmVcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgaXRlbVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnRlcnZhbFRpbWVsaW5lfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmZvckVhY2hGcm9tID0gZnVuY3Rpb24gKHRpbWUsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC5zZWFyY2hBZnRlcih0aW1lLCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IHJlc3VsdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIHZhciBldiA9IHJlc3VsdHNbaV0uZXZlbnQ7XG5cdCAgICAgICAgICAgICAgICBjYWxsYmFjayhldik7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkludGVydmFsVGltZWxpbmV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkludGVydmFsVGltZWxpbmUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIGFsbE5vZGVzID0gW107XG5cdCAgICAgICAgaWYgKHRoaXMuX3Jvb3QgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcm9vdC50cmF2ZXJzZShmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICAgICAgYWxsTm9kZXMucHVzaChub2RlKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgYWxsTm9kZXNbaV0uZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBhbGxOb2RlcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcm9vdCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0SU5URVJWQUwgTk9ERSBIRUxQRVJcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIFJlcHJlc2VudHMgYSBub2RlIGluIHRoZSBiaW5hcnkgc2VhcmNoIHRyZWUsIHdpdGggdGhlIGFkZGl0aW9uXG5cdFx0ICogIG9mIGEgXCJoaWdoXCIgdmFsdWUgd2hpY2gga2VlcHMgdHJhY2sgb2YgdGhlIGhpZ2hlc3QgdmFsdWUgb2Zcblx0XHQgKiAgaXRzIGNoaWxkcmVuLlxuXHRcdCAqICBSZWZlcmVuY2VzOlxuXHRcdCAqICBodHRwczovL2Jyb29rbm92YWsud29yZHByZXNzLmNvbS8yMDEzLzEyLzA3L2F1Z21lbnRlZC1pbnRlcnZhbC10cmVlLWluLWMvXG5cdFx0ICogIGh0dHA6Ly93d3cubWlmLnZ1Lmx0L352YWxkYXMvQUxHT1JJVE1BSS9MSVRFUkFUVVJBL0Nvcm1lbi9Db3JtZW4ucGRmXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBsb3dcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIHZhciBJbnRlcnZhbE5vZGUgPSBmdW5jdGlvbiAobG93LCBoaWdoLCBldmVudCkge1xuXHQgICAgICAgIC8vdGhlIGV2ZW50IGNvbnRhaW5lclxuXHQgICAgICAgIHRoaXMuZXZlbnQgPSBldmVudDtcblx0ICAgICAgICAvL3RoZSBsb3cgdmFsdWVcblx0ICAgICAgICB0aGlzLmxvdyA9IGxvdztcblx0ICAgICAgICAvL3RoZSBoaWdoIHZhbHVlXG5cdCAgICAgICAgdGhpcy5oaWdoID0gaGlnaDtcblx0ICAgICAgICAvL3RoZSBoaWdoIHZhbHVlIGZvciB0aGlzIGFuZCBhbGwgY2hpbGQgbm9kZXNcblx0ICAgICAgICB0aGlzLm1heCA9IHRoaXMuaGlnaDtcblx0ICAgICAgICAvL3RoZSBub2RlcyB0byB0aGUgbGVmdFxuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBudWxsO1xuXHQgICAgICAgIC8vdGhlIG5vZGVzIHRvIHRoZSByaWdodFxuXHQgICAgICAgIHRoaXMuX3JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICAvL3RoZSBwYXJlbnQgbm9kZVxuXHQgICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcblx0ICAgICAgICAvL3RoZSBudW1iZXIgb2YgY2hpbGQgbm9kZXNcblx0ICAgICAgICB0aGlzLmhlaWdodCA9IDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEluc2VydCBhIG5vZGUgaW50byB0aGUgY29ycmVjdCBzcG90IGluIHRoZSB0cmVlXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsTm9kZX0gIG5vZGVcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAobm9kZS5sb3cgPD0gdGhpcy5sb3cpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubGVmdCA9PT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbm9kZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMubGVmdC5pbnNlcnQobm9kZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmlnaHQgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodCA9IG5vZGU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC5pbnNlcnQobm9kZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZWFyY2ggdGhlIHRyZWUgZm9yIG5vZGVzIHdoaWNoIG92ZXJsYXBcblx0XHQgKiAgd2l0aCB0aGUgZ2l2ZW4gcG9pbnRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgcG9pbnQgIFRoZSBwb2ludCB0byBxdWVyeVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gIHJlc3VsdHMgIFRoZSBhcnJheSB0byBwdXQgdGhlIHJlc3VsdHNcblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuc2VhcmNoID0gZnVuY3Rpb24gKHBvaW50LCByZXN1bHRzKSB7XG5cdCAgICAgICAgLy8gSWYgcCBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIHJpZ2h0bW9zdCBwb2ludCBvZiBhbnkgaW50ZXJ2YWxcblx0ICAgICAgICAvLyBpbiB0aGlzIG5vZGUgYW5kIGFsbCBjaGlsZHJlbiwgdGhlcmUgd29uJ3QgYmUgYW55IG1hdGNoZXMuXG5cdCAgICAgICAgaWYgKHBvaW50ID4gdGhpcy5tYXgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBTZWFyY2ggbGVmdCBjaGlsZHJlblxuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5sZWZ0LnNlYXJjaChwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIENoZWNrIHRoaXMgbm9kZVxuXHQgICAgICAgIGlmICh0aGlzLmxvdyA8PSBwb2ludCAmJiB0aGlzLmhpZ2ggPiBwb2ludCkge1xuXHQgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIElmIHAgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIHRpbWUgb2YgdGhpcyBpbnRlcnZhbCxcblx0ICAgICAgICAvLyB0aGVuIGl0IGNhbid0IGJlIGluIGFueSBjaGlsZCB0byB0aGUgcmlnaHQuXG5cdCAgICAgICAgaWYgKHRoaXMubG93ID4gcG9pbnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBTZWFyY2ggcmlnaHQgY2hpbGRyZW5cblx0ICAgICAgICBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0LnNlYXJjaChwb2ludCwgcmVzdWx0cyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZWFyY2ggdGhlIHRyZWUgZm9yIG5vZGVzIHdoaWNoIGFyZSBsZXNzXG5cdFx0ICogIHRoYW4gdGhlIGdpdmVuIHBvaW50XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHBvaW50ICBUaGUgcG9pbnQgdG8gcXVlcnlcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICByZXN1bHRzICBUaGUgYXJyYXkgdG8gcHV0IHRoZSByZXN1bHRzXG5cdFx0ICovXG5cdCAgICBJbnRlcnZhbE5vZGUucHJvdG90eXBlLnNlYXJjaEFmdGVyID0gZnVuY3Rpb24gKHBvaW50LCByZXN1bHRzKSB7XG5cdCAgICAgICAgLy8gQ2hlY2sgdGhpcyBub2RlXG5cdCAgICAgICAgaWYgKHRoaXMubG93ID49IHBvaW50KSB7XG5cdCAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5sZWZ0LnNlYXJjaEFmdGVyKHBvaW50LCByZXN1bHRzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBzZWFyY2ggdGhlIHJpZ2h0IHNpZGVcblx0ICAgICAgICBpZiAodGhpcy5yaWdodCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLnJpZ2h0LnNlYXJjaEFmdGVyKHBvaW50LCByZXN1bHRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludm9rZSB0aGUgY2FsbGJhY2sgb24gdGhpcyBlbGVtZW50IGFuZCBib3RoIGl0J3MgYnJhbmNoZXNcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFja1xuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHQgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5sZWZ0LnRyYXZlcnNlKGNhbGxiYWNrKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5yaWdodC50cmF2ZXJzZShjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVcGRhdGUgdGhlIGhlaWdodCBvZiB0aGUgbm9kZVxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS51cGRhdGVIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCAmJiB0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gTWF0aC5tYXgodGhpcy5sZWZ0LmhlaWdodCwgdGhpcy5yaWdodC5oZWlnaHQpICsgMTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJpZ2h0LmhlaWdodCArIDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxlZnQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmxlZnQuaGVpZ2h0ICsgMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmhlaWdodCA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVcGRhdGUgdGhlIGhlaWdodCBvZiB0aGUgbm9kZVxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS51cGRhdGVNYXggPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5tYXggPSB0aGlzLmhpZ2g7XG5cdCAgICAgICAgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB0aGlzLm1heCA9IE1hdGgubWF4KHRoaXMubWF4LCB0aGlzLmxlZnQubWF4KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5tYXggPSBNYXRoLm1heCh0aGlzLm1heCwgdGhpcy5yaWdodC5tYXgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGJhbGFuY2UgaXMgaG93IHRoZSBsZWFmcyBhcmUgZGlzdHJpYnV0ZWQgb24gdGhlIG5vZGVcblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gIE5lZ2F0aXZlIG51bWJlcnMgYXJlIGJhbGFuY2VkIHRvIHRoZSByaWdodFxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5nZXRCYWxhbmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBiYWxhbmNlID0gMDtcblx0ICAgICAgICBpZiAodGhpcy5sZWZ0ICE9PSBudWxsICYmIHRoaXMucmlnaHQgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgYmFsYW5jZSA9IHRoaXMubGVmdC5oZWlnaHQgLSB0aGlzLnJpZ2h0LmhlaWdodDtcblx0ICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGVmdCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBiYWxhbmNlID0gdGhpcy5sZWZ0LmhlaWdodCArIDE7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIGJhbGFuY2UgPSAtKHRoaXMucmlnaHQuaGVpZ2h0ICsgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBiYWxhbmNlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGlzIG5vZGUgaXMgdGhlIGxlZnQgY2hpbGRcblx0XHQgKiAgb2YgaXRzIHBhcmVudFxuXHRcdCAqL1xuXHQgICAgSW50ZXJ2YWxOb2RlLnByb3RvdHlwZS5pc0xlZnRDaGlsZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgIT09IG51bGwgJiYgdGhpcy5wYXJlbnQubGVmdCA9PT0gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZ2V0L3NldCB0aGUgbGVmdCBub2RlXG5cdFx0ICogIEB0eXBlIHtJbnRlcnZhbE5vZGV9XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxOb2RlLnByb3RvdHlwZSwgJ2xlZnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZWZ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZWZ0ID0gbm9kZTtcblx0ICAgICAgICAgICAgaWYgKG5vZGUgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gdGhpcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZUhlaWdodCgpO1xuXHQgICAgICAgICAgICB0aGlzLnVwZGF0ZU1heCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGdldC9zZXQgdGhlIHJpZ2h0IG5vZGVcblx0XHQgKiAgQHR5cGUge0ludGVydmFsTm9kZX1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRlcnZhbE5vZGUucHJvdG90eXBlLCAncmlnaHQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9yaWdodDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcmlnaHQgPSBub2RlO1xuXHQgICAgICAgICAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSB0aGlzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlSGVpZ2h0KCk7XG5cdCAgICAgICAgICAgIHRoaXMudXBkYXRlTWF4KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgbnVsbCBvdXQgcmVmZXJlbmNlcy5cblx0XHQgKi9cblx0ICAgIEludGVydmFsTm9kZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZXZlbnQgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLy9cdEVORCBJTlRFUlZBTCBOT0RFIEhFTFBFUlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICByZXR1cm4gVG9uZS5JbnRlcnZhbFRpbWVsaW5lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVGlja3MgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgVGltZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBUb25lLlRpY2tzIGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoIG9yIHdpdGhvdXQgdGhlIGBuZXdgIGtleXdvcmQuIFRvbmUuVGlja3MgY2FuIGJlIHBhc3NlZFxuXHRcdCAqICAgICAgICAgaW50byB0aGUgcGFyYW1ldGVyIG9mIGFueSBtZXRob2Qgd2hpY2ggdGFrZXMgdGltZSBhcyBhbiBhcmd1bWVudC5cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRyYW5zcG9ydFRpbWV9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdCA9IFRvbmUuVGlja3MoXCI0blwiKTsvL2EgcXVhcnRlciBub3RlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzID0gZnVuY3Rpb24gKHZhbCwgdW5pdHMpIHtcblx0ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFRvbmUuVGlja3MpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnRUaW1lLmNhbGwodGhpcywgdmFsLCB1bml0cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb25lLlRpY2tzKHZhbCwgdW5pdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRpY2tzLCBUb25lLlRyYW5zcG9ydFRpbWUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHVuaXRzIGlmIG5vbmUgYXJlIGdpdmVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX2RlZmF1bHRVbml0cyA9ICdpJztcblx0ICAgIC8qKlxuXHRcdCAqIEdldCB0aGUgY3VycmVudCB0aW1lIGluIHRoZSBnaXZlbiB1bml0c1xuXHRcdCAqIEByZXR1cm4ge1RpY2tzfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fbm93ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLlRyYW5zcG9ydC50aWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRpY2tzLnByb3RvdHlwZS5fYmVhdHNUb1VuaXRzID0gZnVuY3Rpb24gKGJlYXRzKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2dldFBQUSgpICogYmVhdHM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX3NlY29uZHNUb1VuaXRzID0gZnVuY3Rpb24gKHNlY29uZHMpIHtcblx0ICAgICAgICByZXR1cm4gc2Vjb25kcyAvICg2MCAvIHRoaXMuX2dldEJwbSgpKSAqIHRoaXMuX2dldFBQUSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHRpY2sgaW4gdGhlIGN1cnJlbnQgdGltZSB1bml0c1xuXHRcdCAqICBAcGFyYW0ge1RpY2tzfSB0aWNrc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiB0aWNrcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB0aW1lIGluIHRpY2tzXG5cdFx0ICogIEByZXR1cm4gIHtUaWNrc31cblx0XHQgKi9cblx0ICAgIFRvbmUuVGlja3MucHJvdG90eXBlLnRvVGlja3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gdGhlIHRpbWUgaW4gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UaWNrcy5wcm90b3R5cGUudG9TZWNvbmRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSAvIHRoaXMuX2dldFBQUSgpICogKDYwIC8gdGhpcy5fZ2V0QnBtKCkpO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlRpY2tzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuVHJhbnNwb3J0RXZlbnQgaXMgYW4gaW50ZXJuYWwgY2xhc3MgdXNlZCBieSAoVG9uZS5UcmFuc3BvcnQpW1RyYW5zcG9ydF1cblx0XHQgKiAgICAgICAgIHRvIHNjaGVkdWxlIGV2ZW50cy4gRG8gbm8gaW52b2tlIHRoaXMgY2xhc3MgZGlyZWN0bHksIGl0IGlzXG5cdFx0ICogICAgICAgICBoYW5kbGVkIGZyb20gd2l0aGluIFRvbmUuVHJhbnNwb3J0LlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQgPSBmdW5jdGlvbiAoVHJhbnNwb3J0LCBvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlRyYW5zcG9ydEV2ZW50LmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBSZWZlcmVuY2UgdG8gdGhlIFRyYW5zcG9ydCB0aGF0IGNyZWF0ZWQgaXRcblx0XHRcdCAqIEB0eXBlIHtUb25lLlRyYW5zcG9ydH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0ID0gVHJhbnNwb3J0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHVuaXF1ZSBpZCBvZiB0aGUgZXZlbnRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlkID0gVG9uZS5UcmFuc3BvcnRFdmVudC5fZXZlbnRJZCsrO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHRpbWUgdGhlIGV2ZW50IHN0YXJ0c1xuXHRcdFx0ICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy50aW1lID0gVG9uZS5UaWNrcyhvcHRpb25zLnRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGNhbGxiYWNrIHRvIGludm9rZVxuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBJZiB0aGUgZXZlbnQgc2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgYmVpbmcgY3JlYXRlZC5cblx0XHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29uY2UgPSBvcHRpb25zLm9uY2U7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmFuc3BvcnRFdmVudCk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGVmYXVsdHNcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ29uY2UnOiBmYWxzZSxcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3Bcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBDdXJyZW50IElEIGNvdW50ZXJcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5fZXZlbnRJZCA9IDA7XG5cdCAgICAvKipcblx0XHQgKiBJbnZva2UgdGhlIGV2ZW50IGNhbGxiYWNrLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFRoZSBBdWRpb0NvbnRleHQgdGltZSBpbiBzZWNvbmRzIG9mIHRoZSBldmVudFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRFdmVudC5wcm90b3R5cGUuaW52b2tlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5jYWxsYmFjaykge1xuXHQgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fb25jZSAmJiB0aGlzLlRyYW5zcG9ydCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5pZCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydEV2ZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydEV2ZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy50aW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5UcmFuc3BvcnRFdmVudDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50IGlzIGFuIGludGVybmFsIGNsYXNzIHVzZWQgYnkgVG9uZS5UcmFuc3BvcnRcblx0XHQgKiAgICAgICAgIHRvIHNjaGVkdWxlIHJlcGVhdCBldmVudHMuIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlRyYW5zcG9ydEV2ZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCA9IGZ1bmN0aW9uIChUcmFuc3BvcnQsIG9wdGlvbnMpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydEV2ZW50LmNhbGwodGhpcywgVHJhbnNwb3J0LCBvcHRpb25zKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogV2hlbiB0aGUgZXZlbnQgc2hvdWxkIHN0b3AgcmVwZWF0aW5nXG5cdFx0XHQgKiBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kdXJhdGlvbiA9IFRvbmUuVGlja3Mob3B0aW9ucy5kdXJhdGlvbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgaW50ZXJ2YWwgb2YgdGhlIHJlcGVhdGVkIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7VGlja3N9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBUb25lLlRpY2tzKG9wdGlvbnMuaW50ZXJ2YWwpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIElEIG9mIHRoZSBjdXJyZW50IHRpbWVsaW5lIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2N1cnJlbnRJZCA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIElEIG9mIHRoZSBuZXh0IHRpbWVsaW5lIGV2ZW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX25leHRJZCA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICAqIFRoZSB0aW1lIG9mIHRoZSBuZXh0IGV2ZW50XG5cdFx0XHQgICogQHR5cGUge1RpY2tzfVxuXHRcdFx0ICAqIEBwcml2YXRlXG5cdFx0XHQgICovXG5cdCAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSB0aGlzLnRpbWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBhIHJlZmVyZW5jZSB0byB0aGUgYm91bmQgc3RhcnQgbWV0aG9kXG5cdFx0XHQgKiBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYm91bmRSZXN0YXJ0ID0gdGhpcy5fcmVzdGFydC5iaW5kKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0Lm9uKCdzdGFydCBsb29wU3RhcnQnLCB0aGlzLl9ib3VuZFJlc3RhcnQpO1xuXHQgICAgICAgIHRoaXMuX3Jlc3RhcnQoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LCBUb25lLlRyYW5zcG9ydEV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZHVyYXRpb24nOiBJbmZpbml0eSxcblx0ICAgICAgICAnaW50ZXJ2YWwnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlIHRoZSBjYWxsYmFjay4gUmV0dXJucyB0aGUgdGljayB0aW1lIHdoaWNoXG5cdFx0ICogdGhlIG5leHQgZXZlbnQgc2hvdWxkIGJlIHNjaGVkdWxlZCBhdC5cblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWUgIFRoZSBBdWRpb0NvbnRleHQgdGltZSBpbiBzZWNvbmRzIG9mIHRoZSBldmVudFxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuaW52b2tlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL2NyZWF0ZSBtb3JlIGV2ZW50cyBpZiBuZWNlc3Nhcnlcblx0ICAgICAgICB0aGlzLl9jcmVhdGVFdmVudHModGltZSk7XG5cdCAgICAgICAgLy9jYWxsIHRoZSBzdXBlciBjbGFzc1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmludm9rZS5jYWxsKHRoaXMsIHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFB1c2ggbW9yZSBldmVudHMgb250byB0aGUgdGltZWxpbmUgdG8ga2VlcCB1cCB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGltZWxpbmVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuX2NyZWF0ZUV2ZW50cyA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgLy8gc2NoZWR1bGUgdGhlIG5leHQgZXZlbnRcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLlRyYW5zcG9ydC5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAodGlja3MgPj0gdGhpcy50aW1lICYmIHRpY2tzID49IHRoaXMuX25leHRUaWNrICYmIHRoaXMuX25leHRUaWNrICsgdGhpcy5faW50ZXJ2YWwgPCB0aGlzLnRpbWUgKyB0aGlzLmR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX25leHRUaWNrICs9IHRoaXMuX2ludGVydmFsO1xuXHQgICAgICAgICAgICB0aGlzLl9jdXJyZW50SWQgPSB0aGlzLl9uZXh0SWQ7XG5cdCAgICAgICAgICAgIHRoaXMuX25leHRJZCA9IHRoaXMuVHJhbnNwb3J0LnNjaGVkdWxlT25jZSh0aGlzLmludm9rZS5iaW5kKHRoaXMpLCBUb25lLlRpY2tzKHRoaXMuX25leHRUaWNrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFB1c2ggbW9yZSBldmVudHMgb250byB0aGUgdGltZWxpbmUgdG8ga2VlcCB1cCB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGltZWxpbmVcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudC5wcm90b3R5cGUuX3Jlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX2N1cnJlbnRJZCk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5fbmV4dElkKTtcblx0ICAgICAgICB0aGlzLl9uZXh0VGljayA9IHRoaXMudGltZTtcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLlRyYW5zcG9ydC5nZXRUaWNrc0F0VGltZSh0aW1lKTtcblx0ICAgICAgICBpZiAodGlja3MgPiB0aGlzLnRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbmV4dFRpY2sgPSB0aGlzLnRpbWUgKyBNYXRoLmNlaWwoKHRpY2tzIC0gdGhpcy50aW1lKSAvIHRoaXMuX2ludGVydmFsKSAqIHRoaXMuX2ludGVydmFsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jdXJyZW50SWQgPSB0aGlzLlRyYW5zcG9ydC5zY2hlZHVsZU9uY2UodGhpcy5pbnZva2UuYmluZCh0aGlzKSwgVG9uZS5UaWNrcyh0aGlzLl9uZXh0VGljaykpO1xuXHQgICAgICAgIHRoaXMuX25leHRUaWNrICs9IHRoaXMuX2ludGVydmFsO1xuXHQgICAgICAgIHRoaXMuX25leHRJZCA9IHRoaXMuVHJhbnNwb3J0LnNjaGVkdWxlT25jZSh0aGlzLmludm9rZS5iaW5kKHRoaXMpLCBUb25lLlRpY2tzKHRoaXMuX25leHRUaWNrKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFJlcGVhdEV2ZW50LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX2N1cnJlbnRJZCk7XG5cdCAgICAgICAgdGhpcy5UcmFuc3BvcnQuY2xlYXIodGhpcy5fbmV4dElkKTtcblx0ICAgICAgICB0aGlzLlRyYW5zcG9ydC5vZmYoJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX2JvdW5kUmVzdGFydCk7XG5cdCAgICAgICAgdGhpcy5fYm91bmRDcmVhdGVFdmVudHMgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0RXZlbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmR1cmF0aW9uID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0UmVwZWF0RXZlbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVHJhbnNwb3J0IGZvciB0aW1pbmcgbXVzaWNhbCBldmVudHMuXG5cdFx0ICogICAgICAgICAgU3VwcG9ydHMgdGVtcG8gY3VydmVzIGFuZCB0aW1lIGNoYW5nZXMuIFVubGlrZSBicm93c2VyLWJhc2VkIHRpbWluZyAoc2V0SW50ZXJ2YWwsIHJlcXVlc3RBbmltYXRpb25GcmFtZSlcblx0XHQgKiAgICAgICAgICBUb25lLlRyYW5zcG9ydCB0aW1pbmcgZXZlbnRzIHBhc3MgaW4gdGhlIGV4YWN0IHRpbWUgb2YgdGhlIHNjaGVkdWxlZCBldmVudFxuXHRcdCAqICAgICAgICAgIGluIHRoZSBhcmd1bWVudCBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uIFBhc3MgdGhhdCB0aW1lIHZhbHVlIHRvIHRoZSBvYmplY3Rcblx0XHQgKiAgICAgICAgICB5b3UncmUgc2NoZWR1bGluZy4gPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBBIHNpbmdsZSB0cmFuc3BvcnQgaXMgY3JlYXRlZCBmb3IgeW91IHdoZW4gdGhlIGxpYnJhcnkgaXMgaW5pdGlhbGl6ZWQuXG5cdFx0ICogICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBUaGUgdHJhbnNwb3J0IGVtaXRzIHRoZSBldmVudHM6IFwic3RhcnRcIiwgXCJzdG9wXCIsIFwicGF1c2VcIiwgYW5kIFwibG9vcFwiIHdoaWNoIGFyZVxuXHRcdCAqICAgICAgICAgIGNhbGxlZCB3aXRoIHRoZSB0aW1lIG9mIHRoYXQgZXZlbnQgYXMgdGhlIGFyZ3VtZW50LlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVtaXR0ZXJ9XG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3JlcGVhdGVkIGV2ZW50IGV2ZXJ5IDh0aCBub3RlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSB0aW1lXG5cdFx0ICogfSwgXCI4blwiKTtcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NjaGVkdWxlIGFuIGV2ZW50IG9uIHRoZSAxNnRoIG1lYXN1cmVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdC8vZG8gc29tZXRoaW5nIHdpdGggdGhlIHRpbWVcblx0XHQgKiB9LCBcIjE2OjA6MFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRW1pdHRlci5jYWxsKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAgICAgICAgIC8vXHRMT09QSU5HXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0SWYgdGhlIHRyYW5zcG9ydCBsb29wcyBvciBub3QuXG5cdFx0XHRcdCAqICBAdHlwZSB7Ym9vbGVhbn1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMubG9vcCA9IGZhbHNlO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogXHRUaGUgbG9vcCBzdGFydCBwb3NpdGlvbiBpbiB0aWNrc1xuXHRcdFx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IDA7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiBcdFRoZSBsb29wIGVuZCBwb3NpdGlvbiBpbiB0aWNrc1xuXHRcdFx0XHQgKiAgQHR5cGUge1RpY2tzfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSAwO1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0Q0xPQ0svVEVNUE9cblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogIFB1bHNlcyBwZXIgcXVhcnRlciBpcyB0aGUgbnVtYmVyIG9mIHRpY2tzIHBlciBxdWFydGVyIG5vdGUuXG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9wcHEgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy5QUFE7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgd2F0Y2hlcyB0aGUgbWFpbiBvc2NpbGxhdG9yIGZvciB0aW1pbmcgdGlja3Ncblx0XHRcdFx0ICogIGluaXRpYWxseSBzdGFydHMgYXQgMTIwYnBtXG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKiAgQHR5cGUge1RvbmUuQ2xvY2t9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9jbG9jayA9IG5ldyBUb25lLkNsb2NrKHtcblx0ICAgICAgICAgICAgICAgICdjYWxsYmFjayc6IHRoaXMuX3Byb2Nlc3NUaWNrLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICAgICAnZnJlcXVlbmN5JzogMFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fYmluZENsb2NrRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIEJlYXRzIFBlciBNaW51dGUgb2YgdGhlIFRyYW5zcG9ydC5cblx0XHRcdFx0ICogIEB0eXBlIHtCUE19XG5cdFx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgPSA4MDtcblx0XHRcdFx0ICogLy9yYW1wIHRoZSBicG0gdG8gMTIwIG92ZXIgMTAgc2Vjb25kc1xuXHRcdFx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0ucmFtcFRvKDEyMCwgMTApO1xuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5icG0gPSB0aGlzLl9jbG9jay5mcmVxdWVuY3k7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLl90b1VuaXRzID0gdGhpcy5fdG9Vbml0cy5iaW5kKHRoaXMpO1xuXHQgICAgICAgICAgICB0aGlzLmJwbS5fZnJvbVVuaXRzID0gdGhpcy5fZnJvbVVuaXRzLmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgIHRoaXMuYnBtLnVuaXRzID0gVG9uZS5UeXBlLkJQTTtcblx0ICAgICAgICAgICAgdGhpcy5icG0udmFsdWUgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy5icG07XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdicG0nKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgdGltZSBzaWduYXR1cmUsIG9yIG1vcmUgYWNjdXJhdGVseSB0aGUgbnVtZXJhdG9yXG5cdFx0XHRcdCAqICBvZiB0aGUgdGltZSBzaWduYXR1cmUgb3ZlciBhIGRlbm9taW5hdG9yIG9mIDQuXG5cdFx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3RpbWVTaWduYXR1cmUgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy50aW1lU2lnbmF0dXJlO1xuXHQgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgICAgICAgICAvL1x0VElNRUxJTkUgRVZFTlRTXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBBbGwgdGhlIGV2ZW50cyBpbiBhbiBvYmplY3QgdG8ga2VlcCB0cmFjayBieSBJRFxuXHRcdFx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSB7fTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFx0VGhlIHNjaGVkdWxlZCBldmVudHMuXG5cdFx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaW1lbGluZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl90aW1lbGluZSA9IG5ldyBUb25lLlRpbWVsaW5lKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgUmVwZWF0ZWQgZXZlbnRzXG5cdFx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMgPSBuZXcgVG9uZS5JbnRlcnZhbFRpbWVsaW5lKCk7XG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgQWxsIG9mIHRoZSBzeW5jZWQgU2lnbmFsc1xuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3N5bmNlZFNpZ25hbHMgPSBbXTtcblx0ICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLy9cdFNXSU5HXG5cdCAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgc3ViZGl2aXNpb24gb2YgdGhlIHN3aW5nXG5cdFx0XHRcdCAqICBAdHlwZSAge1RpY2tzfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nVGlja3MgPSBUcmFuc3BvcnRDb25zdHJ1Y3Rvci5kZWZhdWx0cy5QUFEgLyAyO1xuXHQgICAgICAgICAgICAvLzhuXG5cdCAgICAgICAgICAgIC8qKlxuXHRcdFx0XHQgKiAgVGhlIHN3aW5nIGFtb3VudFxuXHRcdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nQW1vdW50ID0gMDtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVHJhbnNwb3J0LCBUb25lLkVtaXR0ZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2JwbSc6IDEyMCxcblx0ICAgICAgICAnc3dpbmcnOiAwLFxuXHQgICAgICAgICdzd2luZ1N1YmRpdmlzaW9uJzogJzhuJyxcblx0ICAgICAgICAndGltZVNpZ25hdHVyZSc6IDQsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAnNG0nLFxuXHQgICAgICAgICdQUFEnOiAxOTJcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0VElDS1Ncblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBjYWxsZWQgb24gZXZlcnkgdGlja1xuXHRcdCAqICBAcGFyYW0gICB7bnVtYmVyfSB0aWNrVGltZSBjbG9jayByZWxhdGl2ZSB0aWNrIHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fcHJvY2Vzc1RpY2sgPSBmdW5jdGlvbiAodGlja1RpbWUsIHRpY2tzKSB7XG5cdCAgICAgICAgLy9oYW5kbGUgc3dpbmdcblx0ICAgICAgICBpZiAodGhpcy5fc3dpbmdBbW91bnQgPiAwICYmIHRpY2tzICUgdGhpcy5fcHBxICE9PSAwICYmIC8vbm90IG9uIGEgZG93bmJlYXRcblx0ICAgICAgICAgICAgdGlja3MgJSAodGhpcy5fc3dpbmdUaWNrcyAqIDIpICE9PSAwKSB7XG5cdCAgICAgICAgICAgIC8vYWRkIHNvbWUgc3dpbmdcblx0ICAgICAgICAgICAgdmFyIHByb2dyZXNzID0gdGlja3MgJSAodGhpcy5fc3dpbmdUaWNrcyAqIDIpIC8gKHRoaXMuX3N3aW5nVGlja3MgKiAyKTtcblx0ICAgICAgICAgICAgdmFyIGFtb3VudCA9IE1hdGguc2luKHByb2dyZXNzICogTWF0aC5QSSkgKiB0aGlzLl9zd2luZ0Ftb3VudDtcblx0ICAgICAgICAgICAgdGlja1RpbWUgKz0gVG9uZS5UaWNrcyh0aGlzLl9zd2luZ1RpY2tzICogMiAvIDMpLnRvU2Vjb25kcygpICogYW1vdW50O1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2RvIHRoZSBsb29wIHRlc3Rcblx0ICAgICAgICBpZiAodGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgIGlmICh0aWNrcyA+PSB0aGlzLl9sb29wRW5kKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2xvb3BFbmQnLCB0aWNrVGltZSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jbG9jay5zZXRUaWNrc0F0VGltZSh0aGlzLl9sb29wU3RhcnQsIHRpY2tUaW1lKTtcblx0ICAgICAgICAgICAgICAgIHRpY2tzID0gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb29wU3RhcnQnLCB0aWNrVGltZSwgdGhpcy5fY2xvY2suZ2V0U2Vjb25kc0F0VGltZSh0aWNrVGltZSkpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdsb29wJywgdGlja1RpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaW52b2tlIHRoZSB0aW1lbGluZSBldmVudHMgc2NoZWR1bGVkIG9uIHRoaXMgdGlja1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lLmZvckVhY2hBdFRpbWUodGlja3MsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5pbnZva2UodGlja1RpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRTQ0hFRFVMQUJMRSBFVkVOVFNcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBTY2hlZHVsZSBhbiBldmVudCBhbG9uZyB0aGUgdGltZWxpbmUuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGF0IHRoZSB0aW1lLlxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9ICB0aW1lIFRoZSB0aW1lIHRvIGludm9rZSB0aGUgY2FsbGJhY2sgYXQuXG5cdFx0ICogIEByZXR1cm4ge051bWJlcn0gVGhlIGlkIG9mIHRoZSBldmVudCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgY2FuY2VsaW5nIHRoZSBldmVudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3RyaWdnZXIgdGhlIGNhbGxiYWNrIHdoZW4gdGhlIFRyYW5zcG9ydCByZWFjaGVzIHRoZSBkZXNpcmVkIHRpbWVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbih0aW1lKXtcblx0XHQgKiBcdGVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSk7XG5cdFx0ICogfSwgXCIxMjhpXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCB0aW1lKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFRvbmUuVHJhbnNwb3J0RXZlbnQodGhpcywge1xuXHQgICAgICAgICAgICAndGltZSc6IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKSxcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJzogY2FsbGJhY2tcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYWRkRXZlbnQoZXZlbnQsIHRoaXMuX3RpbWVsaW5lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYSByZXBlYXRlZCBldmVudCBhbG9uZyB0aGUgdGltZWxpbmUuIFRoZSBldmVudCB3aWxsIGZpcmVcblx0XHQgKiAgYXQgdGhlIGBpbnRlcnZhbGAgc3RhcnRpbmcgYXQgdGhlIGBzdGFydFRpbWVgIGFuZCBmb3IgdGhlIHNwZWNpZmllZFxuXHRcdCAqICBgZHVyYXRpb25gLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRvIGludm9rZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gICAgaW50ZXJ2YWwgICBUaGUgZHVyYXRpb24gYmV0d2VlbiBzdWNjZXNzaXZlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLiBNdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lPX0gICAgc3RhcnRUaW1lICBXaGVuIGFsb25nIHRoZSB0aW1lbGluZSB0aGUgZXZlbnRzIHNob3VsZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IGJlaW5nIGludm9rZWQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW2R1cmF0aW9uPUluZmluaXR5XSBIb3cgbG9uZyB0aGUgZXZlbnQgc2hvdWxkIHJlcGVhdC5cblx0XHQgKiAgQHJldHVybiAge051bWJlcn0gICAgVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQuIFVzZSB0aGlzIHRvIGNhbmNlbFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGV2ZW50LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBjYWxsYmFjayBpbnZva2VkIGV2ZXJ5IGVpZ2h0aCBub3RlIGFmdGVyIHRoZSBmaXJzdCBtZWFzdXJlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQoY2FsbGJhY2ssIFwiOG5cIiwgXCIxbVwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zY2hlZHVsZVJlcGVhdCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgaW50ZXJ2YWwsIHN0YXJ0VGltZSwgZHVyYXRpb24pIHtcblx0ICAgICAgICB2YXIgZXZlbnQgPSBuZXcgVG9uZS5UcmFuc3BvcnRSZXBlYXRFdmVudCh0aGlzLCB7XG5cdCAgICAgICAgICAgICdjYWxsYmFjayc6IGNhbGxiYWNrLFxuXHQgICAgICAgICAgICAnaW50ZXJ2YWwnOiBUb25lLlRpbWUoaW50ZXJ2YWwpLFxuXHQgICAgICAgICAgICAndGltZSc6IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpLFxuXHQgICAgICAgICAgICAnZHVyYXRpb24nOiBUb25lLlRpbWUoVG9uZS5kZWZhdWx0QXJnKGR1cmF0aW9uLCBJbmZpbml0eSkpXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9raWNrIGl0IG9mZiBpZiB0aGUgVHJhbnNwb3J0IGlzIHN0YXJ0ZWRcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYWRkRXZlbnQoZXZlbnQsIHRoaXMuX3JlcGVhdGVkRXZlbnRzKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2NoZWR1bGUgYW4gZXZlbnQgdGhhdCB3aWxsIGJlIHJlbW92ZWQgYWZ0ZXIgaXQgaXMgaW52b2tlZC5cblx0XHQgKiAgTm90ZSB0aGF0IGlmIHRoZSBnaXZlbiB0aW1lIGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCB0cmFuc3BvcnQgdGltZSxcblx0XHQgKiAgdGhlIGV2ZW50IHdpbGwgYmUgaW52b2tlZCBpbW1lZGlhdGVseS5cblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGludm9rZSBvbmNlLlxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IHRpbWUgVGhlIHRpbWUgdGhlIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkLlxuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfSBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudC5cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zY2hlZHVsZU9uY2UgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRpbWUpIHtcblx0ICAgICAgICB2YXIgZXZlbnQgPSBuZXcgVG9uZS5UcmFuc3BvcnRFdmVudCh0aGlzLCB7XG5cdCAgICAgICAgICAgICd0aW1lJzogVG9uZS5UcmFuc3BvcnRUaW1lKHRpbWUpLFxuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiBjYWxsYmFjayxcblx0ICAgICAgICAgICAgJ29uY2UnOiB0cnVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEV2ZW50KGV2ZW50LCB0aGlzLl90aW1lbGluZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFyIHRoZSBwYXNzZWQgaW4gZXZlbnQgaWQgZnJvbSB0aGUgdGltZWxpbmVcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGV2ZW50SWQgVGhlIGlkIG9mIHRoZSBldmVudC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoZXZlbnRJZCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zY2hlZHVsZWRFdmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnRJZCkpIHtcblx0ICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLl9zY2hlZHVsZWRFdmVudHNbZXZlbnRJZC50b1N0cmluZygpXTtcblx0ICAgICAgICAgICAgaXRlbS50aW1lbGluZS5yZW1vdmUoaXRlbS5ldmVudCk7XG5cdCAgICAgICAgICAgIGl0ZW0uZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICBkZWxldGUgdGhpcy5fc2NoZWR1bGVkRXZlbnRzW2V2ZW50SWQudG9TdHJpbmcoKV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEFkZCBhbiBldmVudCB0byB0aGUgY29ycmVjdCB0aW1lbGluZS4gS2VlcCB0cmFjayBvZiB0aGVcblx0XHQgKiB0aW1lbGluZSBpdCB3YXMgYWRkZWQgdG8uXG5cdFx0ICogQHBhcmFtIHtUb25lLlRyYW5zcG9ydEV2ZW50fVx0ZXZlbnRcblx0XHQgKiBAcGFyYW0ge1RvbmUuVGltZWxpbmV9IHRpbWVsaW5lXG5cdFx0ICogQHJldHVybnMge051bWJlcn0gdGhlIGV2ZW50IGlkIHdoaWNoIHdhcyBqdXN0IGFkZGVkXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fYWRkRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIHRpbWVsaW5lKSB7XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkRXZlbnRzW2V2ZW50LmlkLnRvU3RyaW5nKCldID0ge1xuXHQgICAgICAgICAgICAnZXZlbnQnOiBldmVudCxcblx0ICAgICAgICAgICAgJ3RpbWVsaW5lJzogdGltZWxpbmVcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHRpbWVsaW5lLmFkZChldmVudCk7XG5cdCAgICAgICAgcmV0dXJuIGV2ZW50LmlkO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgc2NoZWR1bGVkIGV2ZW50cyBmcm9tIHRoZSB0aW1lbGluZSBhZnRlclxuXHRcdCAqICB0aGUgZ2l2ZW4gdGltZS4gUmVwZWF0ZWQgZXZlbnRzIHdpbGwgYmUgcmVtb3ZlZFxuXHRcdCAqICBpZiB0aGVpciBzdGFydFRpbWUgaXMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBbYWZ0ZXI9MF0gQ2xlYXIgYWxsIGV2ZW50cyBhZnRlclxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHRpbWUuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uIChhZnRlcikge1xuXHQgICAgICAgIGFmdGVyID0gVG9uZS5kZWZhdWx0QXJnKGFmdGVyLCAwKTtcblx0ICAgICAgICBhZnRlciA9IHRoaXMudG9UaWNrcyhhZnRlcik7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuZm9yRWFjaEZyb20oYWZ0ZXIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICB0aGlzLmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuX3JlcGVhdGVkRXZlbnRzLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5jbGVhcihldmVudC5pZCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U1RBUlQvU1RPUC9QQVVTRVxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgLyoqXG5cdFx0ICogIEJpbmQgc3RhcnQvc3RvcC9wYXVzZSBldmVudHMgZnJvbSB0aGUgY2xvY2sgYW5kIGVtaXQgdGhlbS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fYmluZENsb2NrRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdzdGFydCcsIGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5UaWNrcyhvZmZzZXQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0YXJ0JywgdGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdzdG9wJywgZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5lbWl0KCdzdG9wJywgdGltZSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5vbigncGF1c2UnLCBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLmVtaXQoJ3BhdXNlJywgdGltZSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIHNvdXJjZSwgZWl0aGVyIFwic3RhcnRlZFwiLCBcInN0b3BwZWRcIiwgb3IgXCJwYXVzZWRcIlxuXHRcdCAqICBAdHlwZSB7VG9uZS5TdGF0ZX1cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzdGF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLmdldFN0YXRlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSB0cmFuc3BvcnQgYW5kIGFsbCBzb3VyY2VzIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIHRyYW5zcG9ydCBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWU9fSBvZmZzZXQgVGhlIHRpbWVsaW5lIG9mZnNldCB0byBzdGFydCB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3N0YXJ0IHRoZSB0cmFuc3BvcnQgaW4gb25lIHNlY29uZCBzdGFydGluZyBhdCBiZWdpbm5pbmcgb2YgdGhlIDV0aCBtZWFzdXJlLlxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KFwiKzFcIiwgXCI0OjA6MFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBjbG9ja1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChvZmZzZXQpKSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9UaWNrcyhvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jbG9jay5zdGFydCh0aW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHRoZSB0cmFuc3BvcnQgYW5kIGFsbCBzb3VyY2VzIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIHRyYW5zcG9ydCBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RvcCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhdXNlIHRoZSB0cmFuc3BvcnQgYW5kIGFsbCBzb3VyY2VzIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jbG9jay5wYXVzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUb2dnbGUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRyYW5zcG9ydC4gSWYgaXQgaXNcblx0XHQgKiBzdGFydGVkLCBpdCB3aWxsIHN0b3AgaXQsIG90aGVyd2lzZSBpdCB3aWxsIHN0YXJ0IHRoZSBUcmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgVGhlIHRpbWUgb2YgdGhlIGV2ZW50XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnR9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9jbG9jay5nZXRTdGF0ZUF0VGltZSh0aW1lKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0U0VUVEVSUy9HRVRURVJTXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHRpbWUgc2lnbmF0dXJlIGFzIGp1c3QgdGhlIG51bWVyYXRvciBvdmVyIDQuXG5cdFx0ICogIEZvciBleGFtcGxlIDQvNCB3b3VsZCBiZSBqdXN0IDQgYW5kIDYvOCB3b3VsZCBiZSAzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ8QXJyYXl9XG5cdFx0ICogIEBuYW1lIHRpbWVTaWduYXR1cmVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NvbW1vbiB0aW1lXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZSA9IDQ7XG5cdFx0ICogLy8gNy84XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQudGltZVNpZ25hdHVyZSA9IFs3LCA4XTtcblx0XHQgKiAvL3RoaXMgd2lsbCBiZSByZWR1Y2VkIHRvIGEgc2luZ2xlIG51bWJlclxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnRpbWVTaWduYXR1cmU7IC8vcmV0dXJucyAzLjVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICd0aW1lU2lnbmF0dXJlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGltZVNpZ25hdHVyZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRpbWVTaWcpIHtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aW1lU2lnKSkge1xuXHQgICAgICAgICAgICAgICAgdGltZVNpZyA9IHRpbWVTaWdbMF0gLyB0aW1lU2lnWzFdICogNDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90aW1lU2lnbmF0dXJlID0gdGltZVNpZztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFdoZW4gdGhlIFRvbmUuVHJhbnNwb3J0Lmxvb3AgPSB0cnVlLCB0aGlzIGlzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbG9vcC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wU3RhcnQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3RhcnRQb3NpdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3Moc3RhcnRQb3NpdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBXaGVuIHRoZSBUb25lLlRyYW5zcG9ydC5sb29wID0gdHJ1ZSwgdGhpcyBpcyB0aGUgZW5kaW5nIHBvc2l0aW9uIG9mIHRoZSBsb29wLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcEVuZCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChlbmRQb3NpdGlvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKGVuZFBvc2l0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGxvb3Agc3RhcnQgYW5kIHN0b3AgYXQgdGhlIHNhbWUgdGltZS5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSBzdGFydFBvc2l0aW9uXG5cdFx0ICogIEBwYXJhbSB7VHJhbnNwb3J0VGltZX0gZW5kUG9zaXRpb25cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9sb29wIG92ZXIgdGhlIGZpcnN0IG1lYXN1cmVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zZXRMb29wUG9pbnRzKDAsIFwiMW1cIik7XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQubG9vcCA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuc2V0TG9vcFBvaW50cyA9IGZ1bmN0aW9uIChzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikge1xuXHQgICAgICAgIHRoaXMubG9vcFN0YXJ0ID0gc3RhcnRQb3NpdGlvbjtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBlbmRQb3NpdGlvbjtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN3aW5nIHZhbHVlLiBCZXR3ZWVuIDAtMSB3aGVyZSAxIGVxdWFsIHRvXG5cdFx0ICogIHRoZSBub3RlICsgaGFsZiB0aGUgc3ViZGl2aXNpb24uXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBzd2luZ1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3N3aW5nJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3dpbmdBbW91bnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChhbW91bnQpIHtcblx0ICAgICAgICAgICAgLy9zY2FsZSB0aGUgdmFsdWVzIHRvIGEgbm9ybWFsIHJhbmdlXG5cdCAgICAgICAgICAgIHRoaXMuX3N3aW5nQW1vdW50ID0gYW1vdW50O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgc3ViZGl2aXNpb24gd2hpY2ggdGhlIHN3aW5nIHdpbGwgYmUgYXBwbGllZCB0by5cblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYW4gOHRoIG5vdGUuIFZhbHVlIG11c3QgYmUgbGVzc1xuXHRcdCAqICB0aGFuIGEgcXVhcnRlciBub3RlLlxuXHRcdCAqXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIHN3aW5nU3ViZGl2aXNpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzd2luZ1N1YmRpdmlzaW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9zd2luZ1RpY2tzKS50b05vdGF0aW9uKCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzdWJkaXZpc2lvbikge1xuXHQgICAgICAgICAgICB0aGlzLl9zd2luZ1RpY2tzID0gdGhpcy50b1RpY2tzKHN1YmRpdmlzaW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgVHJhbnNwb3J0J3MgcG9zaXRpb24gaW4gQmFyczpCZWF0czpTaXh0ZWVudGhzLlxuXHRcdCAqICBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIGp1bXAgdG8gdGhhdCBwb3NpdGlvbiByaWdodCBhd2F5LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtCYXJzQmVhdHNTaXh0ZWVudGhzfVxuXHRcdCAqICBAbmFtZSBwb3NpdGlvblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ3Bvc2l0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy5fY2xvY2suZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGlja3MpLnRvQmFyc0JlYXRzU2l4dGVlbnRocygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocHJvZ3Jlc3MpIHtcblx0ICAgICAgICAgICAgdmFyIHRpY2tzID0gdGhpcy50b1RpY2tzKHByb2dyZXNzKTtcblx0ICAgICAgICAgICAgdGhpcy50aWNrcyA9IHRpY2tzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBUcmFuc3BvcnQncyBwb3NpdGlvbiBpbiBzZWNvbmRzXG5cdFx0ICogIFNldHRpbmcgdGhlIHZhbHVlIHdpbGwganVtcCB0byB0aGF0IHBvc2l0aW9uIHJpZ2h0IGF3YXkuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlRyYW5zcG9ydCNcblx0XHQgKiAgQHR5cGUge1NlY29uZHN9XG5cdFx0ICogIEBuYW1lIHNlY29uZHNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdzZWNvbmRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2suc2Vjb25kcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHMpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuYnBtLnRpbWVUb1RpY2tzKHMsIG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMudGlja3MgPSB0aWNrcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgVHJhbnNwb3J0J3MgbG9vcCBwb3NpdGlvbiBhcyBhIG5vcm1hbGl6ZWQgdmFsdWUuIEFsd2F5c1xuXHRcdCAqICByZXR1cm5zIDAgaWYgdGhlIHRyYW5zcG9ydCBpZiBsb29wIGlzIG5vdCB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEBuYW1lIHByb2dyZXNzXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICdwcm9ncmVzcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdGlja3MgPSB0aGlzLl9jbG9jay5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuICh0aWNrcyAtIHRoaXMuX2xvb3BTdGFydCkgLyAodGhpcy5fbG9vcEVuZCAtIHRoaXMuX2xvb3BTdGFydCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0cmFuc3BvcnRzIGN1cnJlbnQgdGljayBwb3NpdGlvbi5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHQgKiAgQG5hbWUgdGlja3Ncblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUsICd0aWNrcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLnRpY2tzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fY2xvY2sudGlja3MgIT09IHQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAgICAgLy9zdG9wIGV2ZXJ5dGhpbmcgc3luY2VkIHRvIHRoZSB0cmFuc3BvcnRcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3N0b3AnLCBub3cpO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb2NrLnNldFRpY2tzQXRUaW1lKHQsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9yZXN0YXJ0IGl0IHdpdGggdGhlIG5ldyB0aW1lXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdzdGFydCcsIG5vdywgdGhpcy5zZWNvbmRzKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvY2suc2V0VGlja3NBdFRpbWUodCwgbm93KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogR2V0IHRoZSBjbG9jaydzIHRpY2tzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqIEBwYXJhbSAge1RpbWV9IHRpbWUgIFdoZW4gdG8gZ2V0IHRoZSB0aWNrIHZhbHVlXG5cdFx0ICogQHJldHVybiB7VGlja3N9ICAgICAgIFRoZSB0aWNrIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLmdldFRpY2tzQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLl9jbG9jay5nZXRUaWNrc0F0VGltZSh0aW1lKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgZWxhcHNlZCBzZWNvbmRzIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgV2hlbiB0byBnZXQgdGhlIGVsYXBzZWQgc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7U2Vjb25kc30gIFRoZSBudW1iZXIgb2YgZWxhcHNlZCBzZWNvbmRzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuZ2V0U2Vjb25kc0F0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLmdldFNlY29uZHNBdFRpbWUodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFB1bHNlcyBQZXIgUXVhcnRlciBub3RlLiBUaGlzIGlzIHRoZSBzbWFsbGVzdCByZXNvbHV0aW9uXG5cdFx0ICogIHRoZSBUcmFuc3BvcnQgdGltaW5nIHN1cHBvcnRzLiBUaGlzIHNob3VsZCBiZSBzZXQgb25jZVxuXHRcdCAqICBvbiBpbml0aWFsaXphdGlvbiBhbmQgbm90IHNldCBhZ2Fpbi4gQ2hhbmdpbmcgdGhpcyB2YWx1ZVxuXHRcdCAqICBhZnRlciBvdGhlciBvYmplY3RzIGhhdmUgYmVlbiBjcmVhdGVkIGNhbiBjYXVzZSBwcm9ibGVtcy5cblx0XHQgKlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5UcmFuc3BvcnQjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIFBQUVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZSwgJ1BQUScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BwcTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBwcSkge1xuXHQgICAgICAgICAgICB2YXIgYnBtID0gdGhpcy5icG0udmFsdWU7XG5cdCAgICAgICAgICAgIHRoaXMuX3BwcSA9IHBwcTtcblx0ICAgICAgICAgICAgdGhpcy5icG0udmFsdWUgPSBicG07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ29udmVydCBmcm9tIEJQTSB0byBmcmVxdWVuY3kgKGZhY3RvcmluZyBpbiBQUFEpXG5cdFx0ICogIEBwYXJhbSAge0JQTX0gIGJwbSBUaGUgQlBNIHZhbHVlIHRvIGNvbnZlcnQgdG8gZnJlcXVlbmN5XG5cdFx0ICogIEByZXR1cm4gIHtGcmVxdWVuY3l9ICBUaGUgQlBNIGFzIGEgZnJlcXVlbmN5IHdpdGggUFBRIGZhY3RvcmVkIGluLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLl9mcm9tVW5pdHMgPSBmdW5jdGlvbiAoYnBtKSB7XG5cdCAgICAgICAgcmV0dXJuIDEgLyAoNjAgLyBicG0gLyB0aGlzLlBQUSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZnJvbSBmcmVxdWVuY3kgKHdpdGggUFBRKSBpbnRvIEJQTVxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l9ICBmcmVxIFRoZSBjbG9ja3MgZnJlcXVlbmN5IHRvIGNvbnZlcnQgdG8gQlBNXG5cdFx0ICogIEByZXR1cm4gIHtCUE19ICBUaGUgZnJlcXVlbmN5IHZhbHVlIGFzIEJQTS5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5fdG9Vbml0cyA9IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgcmV0dXJuIGZyZXEgLyB0aGlzLlBQUSAqIDYwO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRTWU5DSU5HXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdGltZSBhbGlnbmVkIHRvIHRoZSBuZXh0IHN1YmRpdmlzaW9uXG5cdFx0ICogIG9mIHRoZSBUcmFuc3BvcnQuIElmIHRoZSBUcmFuc3BvcnQgaXMgbm90IHN0YXJ0ZWQsXG5cdFx0ICogIGl0IHdpbGwgcmV0dXJuIDAuXG5cdFx0ICogIE5vdGU6IHRoaXMgd2lsbCBub3Qgd29yayBwcmVjaXNlbHkgZHVyaW5nIHRlbXBvIHJhbXBzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgc3ViZGl2aXNpb24gIFRoZSBzdWJkaXZpc2lvbiB0byBxdWFudGl6ZSB0b1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfSAgVGhlIGNvbnRleHQgdGltZSBvZiB0aGUgbmV4dCBzdWJkaXZpc2lvbi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydCgpOyAvL3RoZSB0cmFuc3BvcnQgbXVzdCBiZSBzdGFydGVkXG5cdFx0ICogVG9uZS5UcmFuc3BvcnQubmV4dFN1YmRpdmlzaW9uKFwiNG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUubmV4dFN1YmRpdmlzaW9uID0gZnVuY3Rpb24gKHN1YmRpdmlzaW9uKSB7XG5cdCAgICAgICAgc3ViZGl2aXNpb24gPSB0aGlzLnRvVGlja3Moc3ViZGl2aXNpb24pO1xuXHQgICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgLy9pZiB0aGUgdHJhbnNwb3J0J3Mgbm90IHN0YXJ0ZWQsIHJldHVybiAwXG5cdCAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAvL3RoZSByZW1haW5kZXIgb2YgdGhlIGN1cnJlbnQgdGlja3MgYW5kIHRoZSBzdWJkaXZpc2lvblxuXHQgICAgICAgICAgICB2YXIgdHJhbnNwb3J0UG9zID0gdGhpcy5nZXRUaWNrc0F0VGltZShub3cpO1xuXHQgICAgICAgICAgICB2YXIgcmVtYWluaW5nVGlja3MgPSBzdWJkaXZpc2lvbiAtIHRyYW5zcG9ydFBvcyAlIHN1YmRpdmlzaW9uO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2submV4dFRpY2tUaW1lKHJlbWFpbmluZ1RpY2tzLCBub3cpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQXR0YWNoZXMgdGhlIHNpZ25hbCB0byB0aGUgdGVtcG8gY29udHJvbCBzaWduYWwgc28gdGhhdFxuXHRcdCAqICBhbnkgY2hhbmdlcyBpbiB0aGUgdGVtcG8gd2lsbCBjaGFuZ2UgdGhlIHNpZ25hbCBpbiB0aGUgc2FtZVxuXHRcdCAqICByYXRpby5cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlNpZ25hbH0gc2lnbmFsXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gcmF0aW8gT3B0aW9uYWxseSBwYXNzIGluIHRoZSByYXRpbyBiZXR3ZWVuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHR3byBzaWduYWxzLiBPdGhlcndpc2UgaXQgd2lsbCBiZSBjb21wdXRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZWlyIGN1cnJlbnQgdmFsdWVzLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5UcmFuc3BvcnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0LnByb3RvdHlwZS5zeW5jU2lnbmFsID0gZnVuY3Rpb24gKHNpZ25hbCwgcmF0aW8pIHtcblx0ICAgICAgICBpZiAoIXJhdGlvKSB7XG5cdCAgICAgICAgICAgIC8vZ2V0IHRoZSBzeW5jIHJhdGlvXG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAoc2lnbmFsLmdldFZhbHVlQXRUaW1lKG5vdykgIT09IDApIHtcblx0ICAgICAgICAgICAgICAgIHJhdGlvID0gc2lnbmFsLmdldFZhbHVlQXRUaW1lKG5vdykgLyB0aGlzLmJwbS5nZXRWYWx1ZUF0VGltZShub3cpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmF0aW8gPSAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciByYXRpb1NpZ25hbCA9IG5ldyBUb25lLkdhaW4ocmF0aW8pO1xuXHQgICAgICAgIHRoaXMuYnBtLmNoYWluKHJhdGlvU2lnbmFsLCBzaWduYWwuX3BhcmFtKTtcblx0ICAgICAgICB0aGlzLl9zeW5jZWRTaWduYWxzLnB1c2goe1xuXHQgICAgICAgICAgICAncmF0aW8nOiByYXRpb1NpZ25hbCxcblx0ICAgICAgICAgICAgJ3NpZ25hbCc6IHNpZ25hbCxcblx0ICAgICAgICAgICAgJ2luaXRpYWwnOiBzaWduYWwudmFsdWVcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBzaWduYWwudmFsdWUgPSAwO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBVbnN5bmNzIGEgcHJldmlvdXNseSBzeW5jZWQgc2lnbmFsIGZyb20gdGhlIHRyYW5zcG9ydCdzIGNvbnRyb2wuXG5cdFx0ICogIFNlZSBUb25lLlRyYW5zcG9ydC5zeW5jU2lnbmFsLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlNpZ25hbH0gc2lnbmFsXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnQucHJvdG90eXBlLnVuc3luY1NpZ25hbCA9IGZ1bmN0aW9uIChzaWduYWwpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fc3luY2VkU2lnbmFscy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICB2YXIgc3luY2VkU2lnbmFsID0gdGhpcy5fc3luY2VkU2lnbmFsc1tpXTtcblx0ICAgICAgICAgICAgaWYgKHN5bmNlZFNpZ25hbC5zaWduYWwgPT09IHNpZ25hbCkge1xuXHQgICAgICAgICAgICAgICAgc3luY2VkU2lnbmFsLnJhdGlvLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgICAgIHN5bmNlZFNpZ25hbC5zaWduYWwudmFsdWUgPSBzeW5jZWRTaWduYWwuaW5pdGlhbDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNlZFNpZ25hbHMuc3BsaWNlKGksIDEpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVHJhbnNwb3J0fSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVtaXR0ZXIucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9jbG9jay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCdicG0nKTtcblx0ICAgICAgICB0aGlzLmJwbSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdGltZWxpbmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVsaW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yZXBlYXRlZEV2ZW50cy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmVwZWF0ZWRFdmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8vXHRJTklUSUFMSVpBVElPTlxuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQgICAgdmFyIFRyYW5zcG9ydENvbnN0cnVjdG9yID0gVG9uZS5UcmFuc3BvcnQ7XG5cdCAgICBUb25lLlRyYW5zcG9ydCA9IG5ldyBUcmFuc3BvcnRDb25zdHJ1Y3RvcigpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5UcmFuc3BvcnQgaW5zdGFuY2VvZiBUcmFuc3BvcnRDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICBUb25lLlRyYW5zcG9ydCA9IGNvbnRleHQuVHJhbnNwb3J0O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0ID0gbmV3IFRyYW5zcG9ydENvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc3RvcmUgdGhlIFRyYW5zcG9ydCBvbiB0aGUgY29udGV4dCBzbyBpdCBjYW4gYmUgcmV0cmlldmVkIGxhdGVyXG5cdCAgICAgICAgY29udGV4dC5UcmFuc3BvcnQgPSBUb25lLlRyYW5zcG9ydDtcblx0ICAgIH0pO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdjbG9zZScsIGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuVHJhbnNwb3J0IGluc3RhbmNlb2YgVHJhbnNwb3J0Q29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgY29udGV4dC5UcmFuc3BvcnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Wb2x1bWUgaXMgYSBzaW1wbGUgdm9sdW1lIG5vZGUsIHVzZWZ1bCBmb3IgY3JlYXRpbmcgYSB2b2x1bWUgZmFkZXIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVsc30gW3ZvbHVtZT0wXSB0aGUgaW5pdGlhbCB2b2x1bWVcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdm9sID0gbmV3IFRvbmUuVm9sdW1lKC0xMik7XG5cdFx0ICogaW5zdHJ1bWVudC5jaGFpbih2b2wsIFRvbmUuTWFzdGVyKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVm9sdW1lID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndm9sdW1lJ10sIFRvbmUuVm9sdW1lKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIG91dHB1dCBub2RlXG5cdFx0XHQgKiBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnZvbHVtZSwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB1bm11dGVkIHZvbHVtZVxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3VubXV0ZWRWb2x1bWUgPSBvcHRpb25zLnZvbHVtZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdm9sdW1lIGNvbnRyb2wgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiAgQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5vdXRwdXQuZ2Fpbjtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLy9zZXQgdGhlIG11dGUgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5tdXRlID0gb3B0aW9ucy5tdXRlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuVm9sdW1lLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLlZvbHVtZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlZvbHVtZSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHZvbHVtZS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlZvbHVtZS5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy52b2x1bWUudmFsdWUgPT09IC1JbmZpbml0eTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLm11dGUgJiYgbXV0ZSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdW5tdXRlZFZvbHVtZSA9IHRoaXMudm9sdW1lLnZhbHVlO1xuXHQgICAgICAgICAgICAgICAgLy9tYXliZSBpdCBzaG91bGQgcmFtcCBoZXJlP1xuXHQgICAgICAgICAgICAgICAgdGhpcy52b2x1bWUudmFsdWUgPSAtSW5maW5pdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tdXRlICYmICFtdXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZvbHVtZS52YWx1ZSA9IHRoaXMuX3VubXV0ZWRWb2x1bWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Wb2x1bWV9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVm9sdW1lLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuaW5wdXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMudm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVm9sdW1lO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc2luZ2xlIG1hc3RlciBvdXRwdXQgd2hpY2ggaXMgY29ubmVjdGVkIHRvIHRoZVxuXHRcdCAqICAgICAgICAgIEF1ZGlvRGVzdGluYXRpb25Ob2RlIChha2EgeW91ciBzcGVha2VycykuXG5cdFx0ICogICAgICAgICAgSXQgcHJvdmlkZXMgdXNlZnVsIGNvbnZlbmllbmNlcyBzdWNoIGFzIHRoZSBhYmlsaXR5XG5cdFx0ICogICAgICAgICAgdG8gc2V0IHRoZSB2b2x1bWUgYW5kIG11dGUgdGhlIGVudGlyZSBhcHBsaWNhdGlvbi5cblx0XHQgKiAgICAgICAgICBJdCBhbHNvIGdpdmVzIHlvdSB0aGUgYWJpbGl0eSB0byBhcHBseSBtYXN0ZXIgZWZmZWN0cyB0byB5b3VyIGFwcGxpY2F0aW9uLlxuXHRcdCAqICAgICAgICAgIDxicj48YnI+XG5cdFx0ICogICAgICAgICAgTGlrZSBUb25lLlRyYW5zcG9ydCwgQSBzaW5nbGUgVG9uZS5NYXN0ZXIgaXMgY3JlYXRlZFxuXHRcdCAqICAgICAgICAgIG9uIGluaXRpYWxpemF0aW9uIGFuZCB5b3UgZG8gbm90IG5lZWQgdG8gZXhwbGljaXRseSBjb25zdHJ1Y3Qgb25lLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHNpbmdsZXRvblxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdGhlIGF1ZGlvIHdpbGwgZ28gZnJvbSB0aGUgb3NjaWxsYXRvciB0byB0aGUgc3BlYWtlcnNcblx0XHQgKiBvc2NpbGxhdG9yLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHRcdCAqIC8vYSBjb252ZW5pZW5jZSBmb3IgY29ubmVjdGluZyB0byB0aGUgbWFzdGVyIG91dHB1dCBpcyBhbHNvIHByb3ZpZGVkOlxuXHRcdCAqIG9zY2lsbGF0b3IudG9NYXN0ZXIoKTtcblx0XHQgKiAvL3RoZSBhYm92ZSB0d28gZXhhbXBsZXMgYXJlIGVxdWl2YWxlbnQuXG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3RlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIFRvbmUuZ2V0Q29udGV4dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAwKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqICBUaGUgcHJpdmF0ZSB2b2x1bWUgbm9kZVxuXHRcdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZSgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgbWFzdGVyIG91dHB1dC5cblx0XHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmNoYWluKHRoaXMub3V0cHV0LCB0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NYXN0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuTWFzdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd2b2x1bWUnOiAwLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTWFzdGVyI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogVG9uZS5NYXN0ZXIubXV0ZSA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NYXN0ZXIucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgbWFzdGVyIGVmZmVjdHMgY2hhaW4uIE5PVEU6IHRoaXMgd2lsbCBkaXNjb25uZWN0IGFueSBub2RlcyB3aGljaCB3ZXJlIHByZXZpb3VzbHlcblx0XHQgKiAgY2hhaW5lZCBpbiB0aGUgbWFzdGVyIGVmZmVjdHMgY2hhaW4uXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9Ob2RlfFRvbmV9IGFyZ3MuLi4gQWxsIGFyZ3VtZW50cyB3aWxsIGJlIGNvbm5lY3RlZCBpbiBhIHJvd1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgTWFzdGVyIHdpbGwgYmUgcm91dGVkIHRocm91Z2ggaXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1hc3Rlcn0gIHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3NvbWUgb3ZlcmFsbCBjb21wcmVzc2lvbiB0byBrZWVwIHRoZSBsZXZlbHMgaW4gY2hlY2tcblx0XHQgKiB2YXIgbWFzdGVyQ29tcHJlc3NvciA9IG5ldyBUb25lLkNvbXByZXNzb3Ioe1xuXHRcdCAqIFx0XCJ0aHJlc2hvbGRcIiA6IC02LFxuXHRcdCAqIFx0XCJyYXRpb1wiIDogMyxcblx0XHQgKiBcdFwiYXR0YWNrXCIgOiAwLjUsXG5cdFx0ICogXHRcInJlbGVhc2VcIiA6IDAuMVxuXHRcdCAqIH0pO1xuXHRcdCAqIC8vZ2l2ZSBhIGxpdHRsZSBib29zdCB0byB0aGUgbG93c1xuXHRcdCAqIHZhciBsb3dCdW1wID0gbmV3IFRvbmUuRmlsdGVyKDIwMCwgXCJsb3dzaGVsZlwiKTtcblx0XHQgKiAvL3JvdXRlIGV2ZXJ5dGhpbmcgdGhyb3VnaCB0aGUgZmlsdGVyXG5cdFx0ICogLy9hbmQgY29tcHJlc3NvciBiZWZvcmUgZ29pbmcgdG8gdGhlIHNwZWFrZXJzXG5cdFx0ICogVG9uZS5NYXN0ZXIuY2hhaW4obG93QnVtcCwgbWFzdGVyQ29tcHJlc3Nvcik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1hc3Rlci5wcm90b3R5cGUuY2hhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jaGFpbi5hcHBseSh0aGlzLmlucHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0uY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1hc3Rlcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWFzdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3ZvbHVtZScpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL1x0QVVHTUVOVCBUT05FJ3MgUFJPVE9UWVBFXG5cdCAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0ICAgIC8qKlxuXHRcdCAqICBDb25uZWN0ICd0aGlzJyB0byB0aGUgbWFzdGVyIG91dHB1dC4gU2hvcnRoYW5kIGZvciB0aGlzLmNvbm5lY3QoVG9uZS5NYXN0ZXIpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1ZGlvTm9kZX0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY29ubmVjdCBhbiBvc2NpbGxhdG9yIHRvIHRoZSBtYXN0ZXIgb3V0cHV0XG5cdFx0ICogdmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS50b01hc3RlcigpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLnRvTWFzdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgaWYgKHdpbmRvdy5BdWRpb05vZGUpIHtcblx0ICAgICAgICAvLyBBbHNvIGF1Z21lbnQgQXVkaW9Ob2RlJ3MgcHJvdG90eXBlIHRvIGluY2x1ZGUgdG9NYXN0ZXIgYXMgYSBjb252ZW5pZW5jZVxuXHQgICAgICAgIEF1ZGlvTm9kZS5wcm90b3R5cGUudG9NYXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH07XG5cdCAgICB9XG5cdCAgICAvKipcblx0XHQgKiAgaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFuZCBsaXN0ZW4gZm9yIG5ldyBhdWRpbyBjb250ZXh0c1xuXHRcdCAqL1xuXHQgICAgdmFyIE1hc3RlckNvbnN0cnVjdG9yID0gVG9uZS5NYXN0ZXI7XG5cdCAgICBUb25lLk1hc3RlciA9IG5ldyBNYXN0ZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgVG9uZS5Db250ZXh0Lm9uKCdpbml0JywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAvLyBpZiBpdCBhbHJlYWR5IGV4aXN0cywganVzdCByZXN0b3JlIGl0XG5cdCAgICAgICAgaWYgKGNvbnRleHQuTWFzdGVyIGluc3RhbmNlb2YgTWFzdGVyQ29uc3RydWN0b3IpIHtcblx0ICAgICAgICAgICAgVG9uZS5NYXN0ZXIgPSBjb250ZXh0Lk1hc3Rlcjtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBUb25lLk1hc3RlciA9IG5ldyBNYXN0ZXJDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb250ZXh0Lk1hc3RlciA9IFRvbmUuTWFzdGVyO1xuXHQgICAgfSk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2Nsb3NlJywgZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICBpZiAoY29udGV4dC5NYXN0ZXIgaW5zdGFuY2VvZiBNYXN0ZXJDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICBjb250ZXh0Lk1hc3Rlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZS5NYXN0ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQmFzZSBjbGFzcyBmb3Igc291cmNlcy4gU291cmNlcyBoYXZlIHN0YXJ0L3N0b3AgbWV0aG9kc1xuXHRcdCAqICAgICAgICAgIGFuZCB0aGUgYWJpbGl0eSB0byBiZSBzeW5jZWQgdG8gdGhlXG5cdFx0ICogICAgICAgICAgc3RhcnQvc3RvcCBvZiBUb25lLlRyYW5zcG9ydC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vTXVsdGlwbGUgc3RhdGUgY2hhbmdlIGV2ZW50cyBjYW4gYmUgY2hhaW5lZCB0b2dldGhlcixcblx0XHQgKiAvL2J1dCBtdXN0IGJlIHNldCBpbiB0aGUgY29ycmVjdCBvcmRlciBhbmQgd2l0aCBhc2NlbmRpbmcgdGltZXNcblx0XHQgKlxuXHRcdCAqIC8vIE9LXG5cdFx0ICogc3RhdGUuc3RhcnQoKS5zdG9wKFwiKzAuMlwiKTtcblx0XHQgKiAvLyBBTkRcblx0XHQgKiBzdGF0ZS5zdGFydCgpLnN0b3AoXCIrMC4yXCIpLnN0YXJ0KFwiKzAuNFwiKS5zdG9wKFwiKzAuN1wiKVxuXHRcdCAqXG5cdFx0ICogLy8gQkFEXG5cdFx0ICogc3RhdGUuc3RvcChcIiswLjJcIikuc3RhcnQoKTtcblx0XHQgKiAvLyBPUlxuXHRcdCAqIHN0YXRlLnN0YXJ0KFwiKzAuM1wiKS5zdG9wKFwiKzAuMlwiKTtcblx0XHQgKlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Tb3VyY2UuZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG91dHB1dCB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Wb2x1bWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuVm9sdW1lKG9wdGlvbnMudm9sdW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSB2b2x1bWUgb2YgdGhlIG91dHB1dCBpbiBkZWNpYmVscy5cblx0XHRcdCAqIEB0eXBlIHtEZWNpYmVsc31cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiBzb3VyY2Uudm9sdW1lLnZhbHVlID0gLTY7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZS52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3ZvbHVtZScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogXHRLZWVwIHRyYWNrIG9mIHRoZSBzY2hlZHVsZWQgc3RhdGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUubWVtb3J5ID0gMTAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzeW5jZWQgYHN0YXJ0YCBjYWxsYmFjayBmdW5jdGlvbiBmcm9tIHRoZSB0cmFuc3BvcnRcblx0XHRcdCAqICBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEtlZXAgdHJhY2sgb2YgYWxsIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgaWRzXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gW107XG5cdCAgICAgICAgLy9tYWtlIHRoZSBvdXRwdXQgZXhwbGljaXRseSBzdGVyZW9cblx0ICAgICAgICB0aGlzLl92b2x1bWUub3V0cHV0Lm91dHB1dC5jaGFubmVsQ291bnQgPSAyO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgICAgIC8vbXV0ZSBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Tb3VyY2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Tb3VyY2UucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLlRyYW5zcG9ydC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnNlY29uZHMpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRoaXMubm93KCkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vbXV0ZSB0aGUgb3V0cHV0XG5cdFx0ICogc291cmNlLm11dGUgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU291cmNlLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy9vdmVyd3JpdGUgdGhlc2UgZnVuY3Rpb25zXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuX3N0YXJ0ID0gVG9uZS5ub09wO1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnJlc3RhcnQgPSBUb25lLm5vT3A7XG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuX3N0b3AgPSBUb25lLm5vT3A7XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIHNvdXJjZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuIElmIG5vIHRpbWUgaXMgZ2l2ZW4sXG5cdFx0ICogIHN0YXJ0IHRoZSBzb3VyY2Ugbm93LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHNvdXJjZSBzaG91bGQgYmUgc3RhcnRlZC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU291cmNlfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc291cmNlLnN0YXJ0KFwiKzAuNVwiKTsgLy9zdGFydHMgdGhlIHNvdXJjZSAwLjUgc2Vjb25kcyBmcm9tIG5vd1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc1VuZGVmKHRpbWUpICYmIHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICB0aW1lID0gVG9uZS5UcmFuc3BvcnQuc2Vjb25kcztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaWYgaXQncyBzdGFydGVkLCBzdG9wIGl0IGFuZCByZXN0YXJ0IGl0XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0YXJ0ZWQsIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLnJlc3RhcnQodGltZSwgb2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdGFydGVkLCB0aW1lKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBvZmZzZXQgdGltZSB0byB0aGUgZXZlbnRcblx0ICAgICAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX3N0YXRlLmdldCh0aW1lKTtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Lm9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuZHVyYXRpb24gPSBkdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgIHZhciBzY2hlZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uICh0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodCwgb2Zmc2V0LCBkdXJhdGlvbik7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkLnB1c2goc2NoZWQpO1xuXHQgICAgICAgICAgICAgICAgLy9pZiBpdCdzIGFscmVhZHkgc3RhcnRlZFxuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuVHJhbnNwb3J0LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jZWRTdGFydCh0aGlzLm5vdygpLCBUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIHNvdXJjZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuIElmIG5vIHRpbWUgaXMgZ2l2ZW4sXG5cdFx0ICogIHN0b3AgdGhlIHNvdXJjZSBub3cuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgc291cmNlIHNob3VsZCBiZSBzdG9wcGVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RvcCgpOyAvLyBzdG9wcyB0aGUgc291cmNlIGltbWVkaWF0ZWx5XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih0aW1lKSAmJiB0aGlzLl9zeW5jZWQpIHtcblx0ICAgICAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0LnNlY29uZHM7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIXRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHNjaGVkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGUodGhpcy5fc3RvcC5iaW5kKHRoaXMpLCB0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkLnB1c2goc2NoZWQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3luYyB0aGUgc291cmNlIHRvIHRoZSBUcmFuc3BvcnQgc28gdGhhdCBhbGwgc3Vic2VxdWVudFxuXHRcdCAqICBjYWxscyB0byBgc3RhcnRgIGFuZCBgc3RvcGAgYXJlIHN5bmNlZCB0byB0aGUgVHJhbnNwb3J0VGltZVxuXHRcdCAqICBpbnN0ZWFkIG9mIHRoZSBBdWRpb0NvbnRleHQgdGltZS5cblx0XHQgKlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL3N5bmMgdGhlIHNvdXJjZSBzbyB0aGF0IGl0IHBsYXlzIGJldHdlZW4gMCBhbmQgMC4zIG9uIHRoZSBUcmFuc3BvcnQncyB0aW1lbGluZVxuXHRcdCAqIHNvdXJjZS5zeW5jKCkuc3RhcnQoMCkuc3RvcCgwLjMpO1xuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBUb25lLlRyYW5zcG9ydC5zdGFydCgpO1xuXHRcdCAqXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHdpdGggYW4gb2Zmc2V0IGFuZCB0aGUgc3luYydlZCBzb3VyY2VzXG5cdFx0ICogLy93aWxsIHN0YXJ0IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG5cdFx0ICogc291cmNlLnN5bmMoKS5zdGFydCgwLjEpO1xuXHRcdCAqIC8vdGhlIHNvdXJjZSB3aWxsIGJlIGludm9rZWQgd2l0aCBhbiBvZmZzZXQgb2YgMC40XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuc3RhcnQoXCIrMC41XCIsIDAuNSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSB0cnVlO1xuXHQgICAgICAgIHRoaXMuX3N5bmNlZFN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCkge1xuXHQgICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuXHQgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBwbGF5YmFjayBzdGF0ZSBhdCB0aGF0IHRpbWVcblx0ICAgICAgICAgICAgICAgIHZhciBzdGF0ZUV2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0KG9mZnNldCk7XG5cdCAgICAgICAgICAgICAgICAvLyBsaXN0ZW4gZm9yIHN0YXJ0IGV2ZW50cyB3aGljaCBtYXkgb2NjdXIgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc3luYydlZCB0aW1lXG5cdCAgICAgICAgICAgICAgICBpZiAoc3RhdGVFdmVudCAmJiBzdGF0ZUV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgc3RhdGVFdmVudC50aW1lICE9PSBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIG9mZnNldFxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydE9mZnNldCA9IG9mZnNldCAtIHRoaXMudG9TZWNvbmRzKHN0YXRlRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZUV2ZW50LmR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoc3RhdGVFdmVudC5kdXJhdGlvbikgLSBzdGFydE9mZnNldDtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodGltZSwgdGhpcy50b1NlY29uZHMoc3RhdGVFdmVudC5vZmZzZXQpICsgc3RhcnRPZmZzZXQsIGR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zeW5jZWRTdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdmFyIHNlY29uZHMgPSBUb25lLlRyYW5zcG9ydC5nZXRTZWNvbmRzQXRUaW1lKE1hdGgubWF4KHRpbWUgLSB0aGlzLnNhbXBsZVRpbWUsIDApKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHNlY29uZHMpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0b3AodGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub24oJ3N0YXJ0IGxvb3BTdGFydCcsIHRoaXMuX3N5bmNlZFN0YXJ0KTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5vbignc3RvcCBwYXVzZSBsb29wRW5kJywgdGhpcy5fc3luY2VkU3RvcCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFVuc3luYyB0aGUgc291cmNlIHRvIHRoZSBUcmFuc3BvcnQuIFNlZSBUb25lLlNvdXJjZS5zeW5jXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNvdXJjZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3luY2VkKSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9mZignc3RvcCBwYXVzZSBsb29wRW5kJywgdGhpcy5fc3luY2VkU3RvcCk7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0Lm9mZignc3RhcnQgbG9vcFN0YXJ0JywgdGhpcy5fc3luY2VkU3RhcnQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zeW5jZWQgPSBmYWxzZTtcblx0ICAgICAgICAvLyBjbGVhciBhbGwgb2YgdGhlIHNjaGVkdWxlZCBpZHNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NjaGVkdWxlZC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLl9zY2hlZHVsZWRbaV07XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGlkKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gW107XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuY2FuY2VsKDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqXHRDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5Tb3VyY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy51bnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU291cmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQXVkaW9CdWZmZXIuY29weVRvL0Zyb21DaGFubmVsIHBvbHlmaWxsXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBpZiAoVG9uZS5zdXBwb3J0ZWQpIHtcblx0ICAgICAgICBpZiAoIUF1ZGlvQnVmZmVyLnByb3RvdHlwZS5jb3B5VG9DaGFubmVsKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQnVmZmVyLnByb3RvdHlwZS5jb3B5VG9DaGFubmVsID0gZnVuY3Rpb24gKHNyYywgY2hhbk51bSwgc3RhcnQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gdGhpcy5nZXRDaGFubmVsRGF0YShjaGFuTnVtKTtcblx0ICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaSArIHN0YXJ0XSA9IHNyY1tpXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgQXVkaW9CdWZmZXIucHJvdG90eXBlLmNvcHlGcm9tQ2hhbm5lbCA9IGZ1bmN0aW9uIChkZXN0LCBjaGFuTnVtLCBzdGFydCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSB0aGlzLmdldENoYW5uZWxEYXRhKGNoYW5OdW0pO1xuXHQgICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydCB8fCAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXN0Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZGVzdFtpXSA9IGNoYW5uZWxbaSArIHN0YXJ0XTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgQnVmZmVyIGxvYWRpbmcgYW5kIHN0b3JhZ2UuIFRvbmUuQnVmZmVyIGlzIHVzZWQgaW50ZXJuYWxseSBieSBhbGxcblx0XHQgKiAgICAgICAgICBjbGFzc2VzIHRoYXQgbWFrZSByZXF1ZXN0cyBmb3IgYXVkaW8gZmlsZXMgc3VjaCBhcyBUb25lLlBsYXllcixcblx0XHQgKiAgICAgICAgICBUb25lLlNhbXBsZXIgYW5kIFRvbmUuQ29udm9sdmVyLlxuXHRcdCAqXG5cdFx0ICogICAgICAgICAgQXNpZGUgZnJvbSBsb2FkIGNhbGxiYWNrcyBmcm9tIGluZGl2aWR1YWwgYnVmZmVycywgVG9uZS5CdWZmZXJcblx0XHQgKiAgXHRcdHByb3ZpZGVzIGV2ZW50cyB3aGljaCBrZWVwIHRyYWNrIG9mIHRoZSBsb2FkaW5nIHByb2dyZXNzXG5cdFx0ICogIFx0XHRvZiBfYWxsXyBvZiB0aGUgYnVmZmVycy4gVGhlc2UgYXJlIFRvbmUuQnVmZmVyLm9uKFwibG9hZFwiIC8gXCJwcm9ncmVzc1wiIC8gXCJlcnJvclwiKVxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZX1cblx0XHQgKiAgQHBhcmFtIHtBdWRpb0J1ZmZlcnxTdHJpbmd9IHVybCBUaGUgdXJsIHRvIGxvYWQsIG9yIHRoZSBhdWRpbyBidWZmZXIgdG8gc2V0LlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIEEgY2FsbGJhY2sgd2hpY2ggaXMgaW52b2tlZCBhZnRlciB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBgVG9uZS5CdWZmZXIub24oJ2xvYWQnLCBjYWxsYmFjaylgIGluc3RlYWRcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5jZSBpdCB3aWxsIGdpdmUgeW91IGEgY2FsbGJhY2sgd2hlbiBfYWxsXyBidWZmZXJzIGFyZSBsb2FkZWQuXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb249fSBvbmVycm9yIFRoZSBjYWxsYmFjayB0byBpbnZva2UgaWYgdGhlcmUgaXMgYW4gZXJyb3Jcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKFwicGF0aC90by9zb3VuZC5tcDNcIiwgZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vdGhlIGJ1ZmZlciBpcyBub3cgYXZhaWxhYmxlLlxuXHRcdCAqIFx0dmFyIGJ1ZmYgPSBidWZmZXIuZ2V0KCk7XG5cdFx0ICogfSk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gbG9hZCBwcm92aWRlIGZhbGxiYWNrIGV4dGVuc2lvbiB0eXBlcyBpZiB0aGUgZmlyc3QgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLlxuXHRcdCAqIHZhciBidWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIoXCJwYXRoL3RvL3NvdW5kLlttcDN8b2dnfHdhdl1cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAnb25sb2FkJyxcblx0ICAgICAgICAgICAgJ29uZXJyb3InXG5cdCAgICAgICAgXSwgVG9uZS5CdWZmZXIpO1xuXHQgICAgICAgIFRvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzdG9yZXMgdGhlIGxvYWRlZCBBdWRpb0J1ZmZlclxuXHRcdFx0ICogIEB0eXBlIHtBdWRpb0J1ZmZlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpbmRpY2F0ZXMgaWYgdGhlIGJ1ZmZlciBzaG91bGQgYmUgcmV2ZXJzZWQgb3Igbm90XG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3JldmVyc2VkID0gb3B0aW9ucy5yZXZlcnNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBYSFJcblx0XHRcdCAqICBAdHlwZSAge1hNTEh0dHBSZXF1ZXN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogUHJpdmF0ZSBjYWxsYmFjayB3aGVuIHRoZSBidWZmZXIgaXMgbG9hZGVkLlxuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29ubG9hZCA9IFRvbmUubm9PcDtcblx0ICAgICAgICBpZiAob3B0aW9ucy51cmwgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlciB8fCBvcHRpb25zLnVybCBpbnN0YW5jZW9mIFRvbmUuQnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0KG9wdGlvbnMudXJsKTtcblx0ICAgICAgICAgICAgLy8gaW52b2tlIHRoZSBvbmxvYWQgY2FsbGJhY2tcblx0ICAgICAgICAgICAgaWYgKG9wdGlvbnMub25sb2FkKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25sb2FkID0gb3B0aW9ucy5vbmxvYWQ7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNTdHJpbmcob3B0aW9ucy51cmwpKSB7XG5cdCAgICAgICAgICAgIHRoaXMubG9hZChvcHRpb25zLnVybCkudGhlbihvcHRpb25zLm9ubG9hZCkuY2F0Y2gob3B0aW9ucy5vbmVycm9yKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5CdWZmZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd1cmwnOiB1bmRlZmluZWQsXG5cdCAgICAgICAgJ3JldmVyc2UnOiBmYWxzZSxcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdvbmVycm9yJzogVG9uZS5ub09wXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBhc3MgaW4gYW4gQXVkaW9CdWZmZXIgb3IgVG9uZS5CdWZmZXIgdG8gc2V0IHRoZSB2YWx1ZVxuXHRcdCAqICBvZiB0aGlzIGJ1ZmZlci5cblx0XHQgKiAgQHBhcmFtIHtBdWRpb0J1ZmZlcnxUb25lLkJ1ZmZlcn0gYnVmZmVyIHRoZSBidWZmZXJcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgIGlmIChidWZmZXIgaW5zdGFuY2VvZiBUb25lLkJ1ZmZlcikge1xuXHQgICAgICAgICAgICBpZiAoYnVmZmVyLmxvYWRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyLmdldCgpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyLl9vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoYnVmZmVyKTtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbmxvYWQodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIgPSBidWZmZXI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBAcmV0dXJuIHtBdWRpb0J1ZmZlcn0gVGhlIGF1ZGlvIGJ1ZmZlciBzdG9yZWQgaW4gdGhlIG9iamVjdC5cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTWFrZXMgYW4geGhyIHJlcWVzdCBmb3IgdGhlIHNlbGVjdGVkIHVybCB0aGVuIGRlY29kZXNcblx0XHQgKiAgdGhlIGZpbGUgYXMgYW4gYXVkaW8gYnVmZmVyLiBJbnZva2VzXG5cdFx0ICogIHRoZSBjYWxsYmFjayBvbmNlIHRoZSBhdWRpbyBidWZmZXIgbG9hZHMuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgYnVmZmVyIHRvIGxvYWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgZmlsZXR5cGUgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIuXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfSByZXR1cm5zIGEgUHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIHRoZSBUb25lLkJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBvbmxvYWQsIG9uZXJyb3IpIHtcblx0ICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChsb2FkLCBlcnJvcikge1xuXHQgICAgICAgICAgICB0aGlzLl94aHIgPSBUb25lLkJ1ZmZlci5sb2FkKHVybCwgLy9zdWNjZXNzXG5cdCAgICAgICAgICAgIGZ1bmN0aW9uIChidWZmKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zZXQoYnVmZik7XG5cdCAgICAgICAgICAgICAgICBsb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb25sb2FkKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgaWYgKG9ubG9hZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9ubG9hZCh0aGlzKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAvL2Vycm9yXG5cdCAgICAgICAgICAgIGZ1bmN0aW9uIChlcnIpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3hociA9IG51bGw7XG5cdCAgICAgICAgICAgICAgICBlcnJvcihlcnIpO1xuXHQgICAgICAgICAgICAgICAgaWYgKG9uZXJyb3IpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbmVycm9yKGVycik7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gcHJvbWlzZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgZGlzcG9zZSBhbmQgZGlzY29ubmVjdFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIGlmICh0aGlzLl94aHIpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHRoaXMuX3hocik7XG5cdCAgICAgICAgICAgIHRoaXMuX3hoci5hYm9ydCgpO1xuXHQgICAgICAgICAgICB0aGlzLl94aHIgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVyIGlzIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogQG5hbWUgbG9hZGVkXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPiAwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGR1cmF0aW9uIG9mIHRoZSBidWZmZXIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQnVmZmVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgZHVyYXRpb25cblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlci5wcm90b3R5cGUsICdkdXJhdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5kdXJhdGlvbjtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gc2FtcGxlc1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIGxlbmd0aFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sZW5ndGg7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBkaXNjcmV0ZSBhdWRpbyBjaGFubmVscy4gUmV0dXJucyAwIGlmIG5vIGJ1ZmZlclxuXHRcdCAqIGlzIGxvYWRlZC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXIjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBudW1iZXJPZkNoYW5uZWxzXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAnbnVtYmVyT2ZDaGFubmVscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGF1ZGlvIGJ1ZmZlciBmcm9tIHRoZSBhcnJheS4gVG8gY3JlYXRlIGEgbXVsdGljaGFubmVsIEF1ZGlvQnVmZmVyLFxuXHRcdCAqICBwYXNzIGluIGEgbXVsdGlkaW1lbnNpb25hbCBhcnJheS5cblx0XHQgKiAgQHBhcmFtIHtGbG9hdDMyQXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsIHRoZSBhdWRpbyBidWZmZXJcblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5mcm9tQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHtcblx0ICAgICAgICB2YXIgaXNNdWx0aWRpbWVuc2lvbmFsID0gYXJyYXlbMF0ubGVuZ3RoID4gMDtcblx0ICAgICAgICB2YXIgY2hhbm5lbHMgPSBpc011bHRpZGltZW5zaW9uYWwgPyBhcnJheS5sZW5ndGggOiAxO1xuXHQgICAgICAgIHZhciBsZW4gPSBpc011bHRpZGltZW5zaW9uYWwgPyBhcnJheVswXS5sZW5ndGggOiBhcnJheS5sZW5ndGg7XG5cdCAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXIoY2hhbm5lbHMsIGxlbiwgdGhpcy5jb250ZXh0LnNhbXBsZVJhdGUpO1xuXHQgICAgICAgIGlmICghaXNNdWx0aWRpbWVuc2lvbmFsICYmIGNoYW5uZWxzID09PSAxKSB7XG5cdCAgICAgICAgICAgIGFycmF5ID0gW2FycmF5XTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjaGFubmVsczsgYysrKSB7XG5cdCAgICAgICAgICAgIGJ1ZmZlci5jb3B5VG9DaGFubmVsKGFycmF5W2NdLCBjKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gYnVmZmVyO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0U3VtcyBtdWxpcGxlIGNoYW5uZWxzIGludG8gMSBjaGFubmVsXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gY2hhbm5lbCBPcHRpb25hbGx5IG9ubHkgY29weSBhIHNpbmdsZSBjaGFubmVsIGZyb20gdGhlIGFycmF5LlxuXHRcdCAqICBAcmV0dXJuIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS50b01vbm8gPSBmdW5jdGlvbiAoY2hhbk51bSkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGNoYW5OdW0pKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZnJvbUFycmF5KHRoaXMudG9BcnJheShjaGFuTnVtKSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIG91dHB1dEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmxlbmd0aCk7XG5cdCAgICAgICAgICAgIHZhciBudW1DaGFubmVscyA9IHRoaXMubnVtYmVyT2ZDaGFubmVscztcblx0ICAgICAgICAgICAgZm9yICh2YXIgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBudW1DaGFubmVsczsgY2hhbm5lbCsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbEFycmF5ID0gdGhpcy50b0FycmF5KGNoYW5uZWwpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFubmVsQXJyYXkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBvdXRwdXRBcnJheVtpXSArPSBjaGFubmVsQXJyYXlbaV07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9kaXZpZGUgYnkgdGhlIG51bWJlciBvZiBjaGFubmVsc1xuXHQgICAgICAgICAgICBvdXRwdXRBcnJheSA9IG91dHB1dEFycmF5Lm1hcChmdW5jdGlvbiAoc2FtcGxlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gc2FtcGxlIC8gbnVtQ2hhbm5lbHM7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB0aGlzLmZyb21BcnJheShvdXRwdXRBcnJheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0R2V0IHRoZSBidWZmZXIgYXMgYW4gYXJyYXkuIFNpbmdsZSBjaGFubmVsIGJ1ZmZlcnMgd2lsbCByZXR1cm4gYSAxLWRpbWVuc2lvbmFsXG5cdFx0ICogXHRGbG9hdDMyQXJyYXksIGFuZCBtdWx0aWNoYW5uZWwgYnVmZmVycyB3aWxsIHJldHVybiBtdWx0aWRpbWVuc2lvbmFsIGFycmF5cy5cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXI9fSBjaGFubmVsIE9wdGlvbmFsbHkgb25seSBjb3B5IGEgc2luZ2xlIGNoYW5uZWwgZnJvbSB0aGUgYXJyYXkuXG5cdFx0ICogIEByZXR1cm4ge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoY2hhbm5lbCkge1xuXHQgICAgICAgIGlmIChUb25lLmlzTnVtYmVyKGNoYW5uZWwpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENoYW5uZWxEYXRhKGNoYW5uZWwpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5udW1iZXJPZkNoYW5uZWxzID09PSAxKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnRvQXJyYXkoMCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHJldCA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IHRoaXMubnVtYmVyT2ZDaGFubmVsczsgYysrKSB7XG5cdCAgICAgICAgICAgICAgICByZXRbY10gPSB0aGlzLmdldENoYW5uZWxEYXRhKGMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBGbG9hdDMyQXJyYXkgcmVwcmVzZW50aW5nIHRoZSBQQ00gYXVkaW8gZGF0YSBmb3IgdGhlIHNwZWNpZmljIGNoYW5uZWwuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIGNoYW5uZWwgIFRoZSBjaGFubmVsIG51bWJlciB0byByZXR1cm5cblx0XHQgKiAgQHJldHVybiAge0Zsb2F0MzJBcnJheX0gIFRoZSBhdWRpbyBhcyBhIFR5cGVkQXJyYXlcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLnByb3RvdHlwZS5nZXRDaGFubmVsRGF0YSA9IGZ1bmN0aW9uIChjaGFubmVsKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5nZXRDaGFubmVsRGF0YShjaGFubmVsKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ3V0IGEgc3Vic2VjdGlvbiBvZiB0aGUgYXJyYXkgYW5kIHJldHVybiBhIGJ1ZmZlciBvZiB0aGVcblx0XHQgKiAgc3Vic2VjdGlvbi4gRG9lcyBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBidWZmZXJcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBzdGFydCBUaGUgdGltZSB0byBzdGFydCB0aGUgc2xpY2Vcblx0XHQgKiAgQHBhcmFtIHtUaW1lPX0gZW5kIFRoZSBlbmQgdGltZSB0byBzbGljZS4gSWYgbm9uZSBpcyBnaXZlblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgd2lsbCBkZWZhdWx0IHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcmV0dXJuIHtUb25lLkJ1ZmZlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gKHN0YXJ0LCBlbmQpIHtcblx0ICAgICAgICBlbmQgPSBUb25lLmRlZmF1bHRBcmcoZW5kLCB0aGlzLmR1cmF0aW9uKTtcblx0ICAgICAgICB2YXIgc3RhcnRTYW1wbGVzID0gTWF0aC5mbG9vcih0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZSAqIHRoaXMudG9TZWNvbmRzKHN0YXJ0KSk7XG5cdCAgICAgICAgdmFyIGVuZFNhbXBsZXMgPSBNYXRoLmZsb29yKHRoaXMuY29udGV4dC5zYW1wbGVSYXRlICogdGhpcy50b1NlY29uZHMoZW5kKSk7XG5cdCAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm51bWJlck9mQ2hhbm5lbHM7IGkrKykge1xuXHQgICAgICAgICAgICByZXBsYWNlbWVudFtpXSA9IHRoaXMudG9BcnJheShpKS5zbGljZShzdGFydFNhbXBsZXMsIGVuZFNhbXBsZXMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmV0QnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKCkuZnJvbUFycmF5KHJlcGxhY2VtZW50KTtcblx0ICAgICAgICByZXR1cm4gcmV0QnVmZmVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXZlcnNlIHRoZSBidWZmZXIuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5wcm90b3R5cGUuX3JldmVyc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1iZXJPZkNoYW5uZWxzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwodGhpcy5nZXRDaGFubmVsRGF0YShpKSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmV2ZXJzZSB0aGUgYnVmZmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSByZXZlcnNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXIucHJvdG90eXBlLCAncmV2ZXJzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldmVyc2VkO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmV2KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9yZXZlcnNlZCAhPT0gcmV2KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9yZXZlcnNlZCA9IHJldjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JldmVyc2UoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBTVEFUSUMgTUVUSE9EU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL3N0YXRpY2FsbHkgaW5oZXJpdHMgRW1pdHRlciBtZXRob2RzXG5cdCAgICBUb25lLkVtaXR0ZXIubWl4aW4oVG9uZS5CdWZmZXIpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBzdGF0aWMgcXVldWUgZm9yIGFsbCBvZiB0aGUgeGhyIHJlcXVlc3RzXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlID0gW107XG5cdCAgICAvKipcblx0XHQgKiAgQSBwYXRoIHdoaWNoIGlzIHByZWZpeGVkIGJlZm9yZSBldmVyeSB1cmwuXG5cdFx0ICogIEB0eXBlICB7U3RyaW5nfVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5iYXNlVXJsID0gJyc7XG5cdCAgICAvKipcblx0XHQgKiAgQ3JlYXRlIGEgVG9uZS5CdWZmZXIgZnJvbSB0aGUgYXJyYXkuIFRvIGNyZWF0ZSBhIG11bHRpY2hhbm5lbCBBdWRpb0J1ZmZlcixcblx0XHQgKiAgcGFzcyBpbiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkuXG5cdFx0ICogIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbCB0aGUgYXVkaW8gYnVmZmVyXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQnVmZmVyfSBBIFRvbmUuQnVmZmVyIGNyZWF0ZWQgZnJvbSB0aGUgYXJyYXlcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSkge1xuXHQgICAgICAgIHJldHVybiBuZXcgVG9uZS5CdWZmZXIoKS5mcm9tQXJyYXkoYXJyYXkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIENyZWF0ZXMgYSBUb25lLkJ1ZmZlciBmcm9tIGEgVVJMLCByZXR1cm5zIGEgcHJvbWlzZVxuXHRcdCAqIHdoaWNoIHJlc29sdmVzIHRvIGEgVG9uZS5CdWZmZXJcblx0XHQgKiBAcGFyYW0gIHtTdHJpbmd9IHVybCBUaGUgdXJsIHRvIGxvYWQuXG5cdFx0ICogQHJldHVybiB7UHJvbWlzZTxUb25lLkJ1ZmZlcj59ICAgICBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gYSBUb25lLkJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIuZnJvbVVybCA9IGZ1bmN0aW9uICh1cmwpIHtcblx0ICAgICAgICB2YXIgYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKCk7XG5cdCAgICAgICAgcmV0dXJuIGJ1ZmZlci5sb2FkKHVybCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVtb3ZlIGFuIHhociByZXF1ZXN0IGZyb20gdGhlIGRvd25sb2FkIHF1ZXVlXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLl9yZW1vdmVGcm9tRG93bmxvYWRRdWV1ZSA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gVG9uZS5CdWZmZXIuX2Rvd25sb2FkUXVldWUuaW5kZXhPZihyZXF1ZXN0KTtcblx0ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgIFRvbmUuQnVmZmVyLl9kb3dubG9hZFF1ZXVlLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBMb2FkcyBhIHVybCB1c2luZyBYTUxIdHRwUmVxdWVzdC5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHVybFxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBvbmxvYWRcblx0XHQgKiAgQHBhcmFtIHtGdW5jdGlvbn0gb25lcnJvclxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBvbnByb2dyZXNzXG5cdFx0ICogIEByZXR1cm4ge1hNTEh0dHBSZXF1ZXN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXIubG9hZCA9IGZ1bmN0aW9uICh1cmwsIG9ubG9hZCwgb25lcnJvcikge1xuXHQgICAgICAgIC8vZGVmYXVsdFxuXHQgICAgICAgIG9ubG9hZCA9IFRvbmUuZGVmYXVsdEFyZyhvbmxvYWQsIFRvbmUubm9PcCk7XG5cdCAgICAgICAgLy8gdGVzdCBpZiB0aGUgdXJsIGNvbnRhaW5zIG11bHRpcGxlIGV4dGVuc2lvbnNcblx0ICAgICAgICB2YXIgbWF0Y2hlcyA9IHVybC5tYXRjaCgvXFxbKC4rXFx8PykrXFxdJC8pO1xuXHQgICAgICAgIGlmIChtYXRjaGVzKSB7XG5cdCAgICAgICAgICAgIHZhciBleHRlbnNpb25zID0gbWF0Y2hlc1sxXS5zcGxpdCgnfCcpO1xuXHQgICAgICAgICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uc1swXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRlbnNpb25zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlKGV4dGVuc2lvbnNbaV0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uc1tpXTtcblx0ICAgICAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShtYXRjaGVzWzBdLCBleHRlbnNpb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGUpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5lbWl0KCdlcnJvcicsIGUpO1xuXHQgICAgICAgICAgICBpZiAob25lcnJvcikge1xuXHQgICAgICAgICAgICAgICAgb25lcnJvcihlKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gb25Qcm9ncmVzcygpIHtcblx0ICAgICAgICAgICAgLy9jYWxjdWxhdGUgdGhlIHByb2dyZXNzXG5cdCAgICAgICAgICAgIHZhciB0b3RhbFByb2dyZXNzID0gMDtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdG90YWxQcm9ncmVzcyArPSBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZVtpXS5wcm9ncmVzcztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5lbWl0KCdwcm9ncmVzcycsIHRvdGFsUHJvZ3Jlc3MgLyBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5sZW5ndGgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXHQgICAgICAgIHJlcXVlc3Qub3BlbignR0VUJywgVG9uZS5CdWZmZXIuYmFzZVVybCArIHVybCwgdHJ1ZSk7XG5cdCAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xuXHQgICAgICAgIC8vc3RhcnQgb3V0IGFzIDBcblx0ICAgICAgICByZXF1ZXN0LnByb2dyZXNzID0gMDtcblx0ICAgICAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5wdXNoKHJlcXVlc3QpO1xuXHQgICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDApIHtcblx0ICAgICAgICAgICAgICAgIFRvbmUuY29udGV4dC5kZWNvZGVBdWRpb0RhdGEocmVxdWVzdC5yZXNwb25zZSkudGhlbihmdW5jdGlvbiAoYnVmZikge1xuXHQgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucHJvZ3Jlc3MgPSAxO1xuXHQgICAgICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3MoKTtcblx0ICAgICAgICAgICAgICAgICAgICBvbmxvYWQoYnVmZik7XG5cdCAgICAgICAgICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy9lbWl0IHRoZSBldmVudCBhdCB0aGUgZW5kXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIFRvbmUuQnVmZmVyLmVtaXQoJ2xvYWQnKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoJ1RvbmUuQnVmZmVyOiBjb3VsZCBub3QgZGVjb2RlIGF1ZGlvIGRhdGE6ICcgKyB1cmwpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBvbkVycm9yKCdUb25lLkJ1ZmZlcjogY291bGQgbm90IGxvY2F0ZSBmaWxlOiAnICsgdXJsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcblx0ICAgICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGlmIChldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG5cdCAgICAgICAgICAgICAgICAvL29ubHkgZ28gdG8gOTUlLCB0aGUgbGFzdCA1JSBpcyB3aGVuIHRoZSBhdWRpbyBpcyBkZWNvZGVkXG5cdCAgICAgICAgICAgICAgICByZXF1ZXN0LnByb2dyZXNzID0gZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwgKiAwLjk1O1xuXHQgICAgICAgICAgICAgICAgb25Qcm9ncmVzcygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmVxdWVzdC5zZW5kKCk7XG5cdCAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgYWxsIG9mIHRoZSBkb3dubG9hZHMgaW4gcHJvZ3Jlc3Ncblx0XHQgKiAgQHJldHVybiB7VG9uZS5CdWZmZXJ9XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyLmNhbmNlbERvd25sb2FkcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkJ1ZmZlci5fZG93bmxvYWRRdWV1ZS5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKHJlcXVlc3QpIHtcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIuX3JlbW92ZUZyb21Eb3dubG9hZFF1ZXVlKHJlcXVlc3QpO1xuXHQgICAgICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuQnVmZmVyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDaGVja3MgYSB1cmwncyBleHRlbnNpb24gdG8gc2VlIGlmIHRoZSBjdXJyZW50IGJyb3dzZXIgY2FuIHBsYXkgdGhhdCBmaWxlIHR5cGUuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIHVybC9leHRlbnNpb24gdG8gdGVzdFxuXHRcdCAqICBAcmV0dXJuIHtCb29sZWFufSBJZiB0aGUgZmlsZSBleHRlbnNpb24gY2FuIGJlIHBsYXllZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5CdWZmZXIuc3VwcG9ydHNUeXBlKFwid2F2XCIpOyAvL3JldHVybnMgdHJ1ZVxuXHRcdCAqIFRvbmUuQnVmZmVyLnN1cHBvcnRzVHlwZShcInBhdGgvdG8vZmlsZS53YXZcIik7IC8vcmV0dXJucyB0cnVlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlci5zdXBwb3J0c1R5cGUgPSBmdW5jdGlvbiAodXJsKSB7XG5cdCAgICAgICAgdmFyIGV4dGVuc2lvbiA9IHVybC5zcGxpdCgnLicpO1xuXHQgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbltleHRlbnNpb24ubGVuZ3RoIC0gMV07XG5cdCAgICAgICAgdmFyIHJlc3BvbnNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXVkaW8nKS5jYW5QbGF5VHlwZSgnYXVkaW8vJyArIGV4dGVuc2lvbik7XG5cdCAgICAgICAgcmV0dXJuIHJlc3BvbnNlICE9PSAnJztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyBhIFByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2hlbiBhbGwgb2YgdGhlIGJ1ZmZlcnMgaGF2ZSBsb2FkZWRcblx0XHQgKiAgQHJldHVybiB7UHJvbWlzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUubG9hZGVkID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvbmxvYWQsIG9uZXJyb3I7XG5cdCAgICAgICAgZnVuY3Rpb24gcmVtb3ZlRXZlbnRzKCkge1xuXHQgICAgICAgICAgICAvL3JlbW92ZSB0aGUgZXZlbnRzIHdoZW4gaXQncyByZXNvbHZlZFxuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vZmYoJ2xvYWQnLCBvbmxvYWQpO1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vZmYoJ2Vycm9yJywgb25lcnJvcik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoc3VjY2VzcywgZmFpbCkge1xuXHQgICAgICAgICAgICBvbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICBzdWNjZXNzKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIG9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICBmYWlsKCk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgIC8vYWRkIHRoZSBldmVudCBsaXN0ZW5lcnNcblx0ICAgICAgICAgICAgVG9uZS5CdWZmZXIub24oJ2xvYWQnLCBvbmxvYWQpO1xuXHQgICAgICAgICAgICBUb25lLkJ1ZmZlci5vbignZXJyb3InLCBvbmVycm9yKTtcblx0ICAgICAgICB9KS50aGVuKHJlbW92ZUV2ZW50cykuY2F0Y2goZnVuY3Rpb24gKGUpIHtcblx0ICAgICAgICAgICAgcmVtb3ZlRXZlbnRzKCk7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CdWZmZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgV3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBmaXJlLWFuZC1mb3JnZXQgT3NjaWxsYXRvck5vZGUuIEFkZHMgdGhlXG5cdFx0ICogICAgIGFiaWxpdHkgdG8gcmVzY2hlZHVsZSB0aGUgc3RvcCBtZXRob2QuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtICB7QXVkaW9CdWZmZXJ8VG9uZS5CdWZmZXJ9ICBidWZmZXIgICBUaGUgYnVmZmVyIHRvIHBsYXlcblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBvbmxvYWQgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLk9zY2lsbGF0b3JOb2RlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlXG5cdFx0XHQgKiAgYnVmZmVyIHNvdXJjZSBpcyBkb25lIHBsYXlpbmcuXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG9wdGlvbnMub25lbmRlZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvciBzdGFydCB0aW1lXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yIHN0b3AgdGltZVxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBnYWluIG5vZGUgd2hpY2ggZW52ZWxvcGVzIHRoZSBPc2NpbGxhdG9yTm9kZVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlICB7T3NjaWxsYXRvck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSB0aGlzLmNvbnRleHQuY3JlYXRlT3NjaWxsYXRvcigpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY29ubmVjdCh0aGlzLl9nYWluTm9kZSk7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuUGFyYW0odGhpcy5fb3NjaWxsYXRvci5mcmVxdWVuY3ksIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LnZhbHVlID0gb3B0aW9ucy5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5QYXJhbSh0aGlzLl9vc2NpbGxhdG9yLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS52YWx1ZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2YWx1ZSB0aGF0IHRoZSBidWZmZXIgcmFtcHMgdG9cblx0XHRcdCAqICBAdHlwZSB7R2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IDE7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Pc2NpbGxhdG9yTm9kZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiA0NDAsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ29uZW5kZWQnOiBUb25lLm5vT3Bcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIG9zY2lsbGF0b3IsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yTm9kZSNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHBsYXliYWNrIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byB0ZXN0IHRoZSBzdGF0ZSBhdFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5TdGF0ZX0gIFRoZSBwbGF5YmFjayBzdGF0ZS4gXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5nZXRTdGF0ZUF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xICYmIHRpbWUgPj0gdGhpcy5fc3RhcnRUaW1lICYmICh0aGlzLl9zdG9wVGltZSA9PT0gLTEgfHwgdGltZSA8PSB0aGlzLl9zdG9wVGltZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuU3RhdGUuU3RhcnRlZDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdG9wcGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0ICAgICAqIFN0YXJ0IHRoZSBvc2NpbGxhdG9yIG5vZGUgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAqIEBwYXJhbSAge1RpbWU9fSB0aW1lIFdoZW4gdG8gc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0ICAgICAqIEByZXR1cm4ge09zY2lsbGF0b3JOb2RlfSAgICAgIHRoaXNcblx0ICAgICAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgPT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRoaXMuX3N0YXJ0VGltZSk7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKG5vdyk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgbm93KTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCB0aGlzLl9zdGFydFRpbWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGNhbGwgT3NjaWxsYXRvck5vZGUuc3RhcnQgbW9yZSB0aGFuIG9uY2UnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdCAgICAgKiBTZXRzIGFuIGFyYml0cmFyeSBjdXN0b20gcGVyaW9kaWMgd2F2ZWZvcm0gZ2l2ZW4gYSBQZXJpb2RpY1dhdmUuXG5cdCAgICAgKiBAcGFyYW0gIHtQZXJpb2RpY1dhdmV9IHBlcmlvZGljV2F2ZSBQZXJpb2RpY1dhdmUgc2hvdWxkIGJlIGNyZWF0ZWQgd2l0aCBjb250ZXh0LmNyZWF0ZVBlcmlvZGljV2F2ZVxuXHQgICAgICogQHJldHVybiB7T3NjaWxsYXRvck5vZGV9IHRoaXNcblx0ICAgICAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0UGVyaW9kaWNXYXZlID0gZnVuY3Rpb24gKHBlcmlvZGljV2F2ZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc2V0UGVyaW9kaWNXYXZlKHBlcmlvZGljV2F2ZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdCAgICAgKiBTdG9wIHRoZSBvc2NpbGxhdG9yIG5vZGUgYXQgdGhlIGdpdmVuIHRpbWVcblx0ICAgICAqIEBwYXJhbSAge1RpbWU9fSB0aW1lIFdoZW4gdG8gc3RvcCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICogQHJldHVybiB7T3NjaWxsYXRvck5vZGV9ICAgICAgdGhpc1xuXHQgICAgICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAvL2NhbmNlbCB0aGUgcHJldmlvdXMgc3RvcFxuXHQgICAgICAgIHRoaXMuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIC8vcmVzY2hlZHVsZSBpdFxuXHQgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aGlzLl9zdG9wVGltZSk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcblx0ICAgICAgICB0aGlzLl90aW1lb3V0ID0gdGhpcy5jb250ZXh0LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0b3AodGhpcy5ub3coKSk7XG5cdCAgICAgICAgICAgIHRoaXMub25lbmRlZCgpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5fc3RvcFRpbWUgLSB0aGlzLm5vdygpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIGEgc2NoZWR1bGVkIHN0b3AgZXZlbnRcblx0XHQgKiAgQHJldHVybiAge1RvbmUuT3NjaWxsYXRvck5vZGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5jYW5jZWxTdG9wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIHRoZSBzdG9wIGVudmVsb3BlXG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKHRoaXMuX3N0YXJ0VGltZSArIHRoaXMuc2FtcGxlVGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgTWF0aC5tYXgodGhpcy5ub3coKSwgdGhpcy5fc3RhcnRUaW1lKSk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BUaW1lID0gLTE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvc2NpbGxhdG9yIHR5cGUuIEVpdGhlciAnc2luZScsICdzYXd0b290aCcsICdzcXVhcmUnLCBvciAndHJpYW5nbGUnXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvck5vZGUjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvck5vZGUucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuT3NjaWxsYXRvck5vZGV9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm9uZW5kZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk9zY2lsbGF0b3JOb2RlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Pc2NpbGxhdG9yIHN1cHBvcnRzIGEgbnVtYmVyIG9mIGZlYXR1cmVzIGluY2x1ZGluZ1xuXHRcdCAqICAgICAgICAgcGhhc2Ugcm90YXRpb24sIG11bHRpcGxlIG9zY2lsbGF0b3IgdHlwZXMgKHNlZSBUb25lLk9zY2lsbGF0b3IudHlwZSksXG5cdFx0ICogICAgICAgICBhbmQgVHJhbnNwb3J0IHN5bmNpbmcgKHNlZSBUb25lLk9zY2lsbGF0b3Iuc3luY0ZyZXF1ZW5jeSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtmcmVxdWVuY3ldIFN0YXJ0aW5nIGZyZXF1ZW5jeVxuXHRcdCAqICBAcGFyYW0ge3N0cmluZ30gW3R5cGVdIFRoZSBvc2NpbGxhdG9yIHR5cGUuIFJlYWQgbW9yZSBhYm91dCB0eXBlIGJlbG93LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbWFrZSBhbmQgc3RhcnQgYSA0NDBoeiBzaW5lIHRvbmVcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcig0NDAsIFwic2luZVwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtYWluIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7T3NjaWxsYXRvck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcGVyaW9kaWMgd2F2ZVxuXHRcdFx0ICogIEB0eXBlIHtQZXJpb2RpY1dhdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3dhdmUgPSBudWxsO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwYXJ0aWFscyBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucy5wYXJ0aWFscywgWzFdKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBiZXR3ZWVuIDAgLSAzNjBcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7c3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gbnVsbDtcblx0ICAgICAgICAvL3NldHVwXG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLl9waGFzZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ3BhcnRpYWxzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIE9zY2lsbGF0b3IgdHlwZXNcblx0XHQgKiAgQGVudW0ge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlID0ge1xuXHQgICAgICAgIFNpbmU6ICdzaW5lJyxcblx0ICAgICAgICBUcmlhbmdsZTogJ3RyaWFuZ2xlJyxcblx0ICAgICAgICBTYXd0b290aDogJ3Nhd3Rvb3RoJyxcblx0ICAgICAgICBTcXVhcmU6ICdzcXVhcmUnLFxuXHQgICAgICAgIEN1c3RvbTogJ2N1c3RvbSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vbmV3IG9zY2lsbGF0b3Igd2l0aCBwcmV2aW91cyB2YWx1ZXNcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvck5vZGUoKTtcblx0ICAgICAgICBpZiAodGhpcy5fd2F2ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNldFBlcmlvZGljV2F2ZSh0aGlzLl93YXZlKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGNvbnRyb2wgc2lnbmFsIHRvIHRoZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSAmIGRldHVuZVxuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdG9wIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIGlmICh0aGlzLl9vc2NpbGxhdG9yKSB7XG5cdCAgICAgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBSZXN0YXJ0IHRoZSBvc2NpbGxhdG9yLiBEb2VzIG5vdCBzdG9wIHRoZSBvc2NpbGxhdG9yLCBidXQgaW5zdGVhZFxuXHRcdCAqIGp1c3QgY2FuY2VscyBhbnkgc2NoZWR1bGVkICdzdG9wJyBmcm9tIGJlaW5nIGludm9rZWQuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLk9zY2lsbGF0b3J9ICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmNhbmNlbFN0b3AoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGhpcy50b1NlY29uZHModGltZSkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTeW5jIHRoZSBzaWduYWwgdG8gdGhlIFRyYW5zcG9ydCdzIGJwbS4gQW55IGNoYW5nZXMgdG8gdGhlIHRyYW5zcG9ydHMgYnBtLFxuXHRcdCAqICB3aWxsIGFsc28gYWZmZWN0IHRoZSBvc2NpbGxhdG9ycyBmcmVxdWVuY3kuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLlRyYW5zcG9ydC5icG0udmFsdWUgPSAxMjA7XG5cdFx0ICogb3NjLmZyZXF1ZW5jeS52YWx1ZSA9IDQ0MDtcblx0XHQgKiAvL3RoZSByYXRpb24gYmV0d2VlbiB0aGUgYnBtIGFuZCB0aGUgZnJlcXVlbmN5IHdpbGwgYmUgbWFpbnRhaW5lZFxuXHRcdCAqIG9zYy5zeW5jRnJlcXVlbmN5KCk7XG5cdFx0ICogVG9uZS5UcmFuc3BvcnQuYnBtLnZhbHVlID0gMjQwO1xuXHRcdCAqIC8vIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IgaXMgZG91YmxlZCB0byA4ODBcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuc3luY0ZyZXF1ZW5jeSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC5zeW5jU2lnbmFsKHRoaXMuZnJlcXVlbmN5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVW5zeW5jIHRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5IGZyb20gdGhlIFRyYW5zcG9ydC5cblx0XHQgKiAgU2VlIFRvbmUuT3NjaWxsYXRvci5zeW5jRnJlcXVlbmN5XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUudW5zeW5jRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LnVuc3luY1NpZ25hbCh0aGlzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3I6IGVpdGhlciBzaW5lLCBzcXVhcmUsIHRyaWFuZ2xlLCBvciBzYXd0b290aC4gQWxzbyBjYXBhYmxlIG9mXG5cdFx0ICogc2V0dGluZyB0aGUgZmlyc3QgeCBudW1iZXIgb2YgcGFydGlhbHMgb2YgdGhlIG9zY2lsbGF0b3IuIEZvciBleGFtcGxlOiBcInNpbmU0XCIgd291bGRcblx0XHQgKiBzZXQgYmUgdGhlIGZpcnN0IDQgcGFydGlhbHMgb2YgdGhlIHNpbmUgd2F2ZSBhbmQgXCJ0cmlhbmdsZThcIiB3b3VsZCBzZXQgdGhlIGZpcnN0XG5cdFx0ICogOCBwYXJ0aWFscyBvZiB0aGUgdHJpYW5nbGUgd2F2ZS5cblx0XHQgKiA8YnI+PGJyPlxuXHRcdCAqIFVzZXMgUGVyaW9kaWNXYXZlIGludGVybmFsbHkgZXZlbiBmb3IgbmF0aXZlIHR5cGVzIHNvIHRoYXQgaXQgY2FuIHNldCB0aGUgcGhhc2UuXG5cdFx0ICogUGVyaW9kaWNXYXZlIGVxdWF0aW9ucyBhcmUgZnJvbSB0aGVcblx0XHQgKiBbV2Via2l0IFdlYiBBdWRpbyBpbXBsZW1lbnRhdGlvbl0oaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9jb2Rlc2VhcmNoI2Nocm9taXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvU291cmNlL21vZHVsZXMvd2ViYXVkaW8vUGVyaW9kaWNXYXZlLmNwcCZzcT1wYWNrYWdlOmNocm9taXVtKS5cblx0XHQgKlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL3NldCBpdCB0byBhIHNxdWFyZSB3YXZlXG5cdFx0ICogb3NjLnR5cGUgPSBcInNxdWFyZVwiO1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9zZXQgdGhlIGZpcnN0IDYgcGFydGlhbHMgb2YgYSBzYXd0b290aCB3YXZlXG5cdFx0ICogb3NjLnR5cGUgPSBcInNhd3Rvb3RoNlwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdmFyIGlzQmFzaWNUeXBlID0gW1xuXHQgICAgICAgICAgICAgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2luZSxcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNxdWFyZSxcblx0ICAgICAgICAgICAgICAgIFRvbmUuT3NjaWxsYXRvci5UeXBlLlRyaWFuZ2xlLFxuXHQgICAgICAgICAgICAgICAgVG9uZS5Pc2NpbGxhdG9yLlR5cGUuU2F3dG9vdGhcblx0ICAgICAgICAgICAgXS5pbmNsdWRlcyh0eXBlKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3BoYXNlID09PSAwICYmIGlzQmFzaWNUeXBlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93YXZlID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIC8vanVzdCBnbyB3aXRoIHRoZSBiYXNpYyBhcHByb2FjaFxuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPT09IHR5cGU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29lZnMgPSB0aGlzLl9nZXRSZWFsSW1hZ2luYXJ5KHR5cGUsIHRoaXMuX3BoYXNlKTtcblx0ICAgICAgICAgICAgICAgIHZhciBwZXJpb2RpY1dhdmUgPSB0aGlzLmNvbnRleHQuY3JlYXRlUGVyaW9kaWNXYXZlKGNvZWZzWzBdLCBjb2Vmc1sxXSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl93YXZlID0gcGVyaW9kaWNXYXZlO1xuXHQgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnNldFBlcmlvZGljV2F2ZSh0aGlzLl93YXZlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSByZWFsIGFuZCBpbWFnaW5hcnkgY29tcG9uZW50cyBiYXNlZFxuXHRcdCAqICBvbiB0aGUgb3NjaWxsYXRvciB0eXBlLlxuXHRcdCAqICBAcmV0dXJucyB7QXJyYXl9IFtyZWFsLCBpbWFnaW5hcnldXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9zY2lsbGF0b3IucHJvdG90eXBlLl9nZXRSZWFsSW1hZ2luYXJ5ID0gZnVuY3Rpb24gKHR5cGUsIHBoYXNlKSB7XG5cdCAgICAgICAgdmFyIGZmdFNpemUgPSA0MDk2O1xuXHQgICAgICAgIHZhciBwZXJpb2RpY1dhdmVTaXplID0gZmZ0U2l6ZSAvIDI7XG5cdCAgICAgICAgdmFyIHJlYWwgPSBuZXcgRmxvYXQzMkFycmF5KHBlcmlvZGljV2F2ZVNpemUpO1xuXHQgICAgICAgIHZhciBpbWFnID0gbmV3IEZsb2F0MzJBcnJheShwZXJpb2RpY1dhdmVTaXplKTtcblx0ICAgICAgICB2YXIgcGFydGlhbENvdW50ID0gMTtcblx0ICAgICAgICBpZiAodHlwZSA9PT0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tKSB7XG5cdCAgICAgICAgICAgIHBhcnRpYWxDb3VudCA9IHRoaXMuX3BhcnRpYWxzLmxlbmd0aCArIDE7XG5cdCAgICAgICAgICAgIHBlcmlvZGljV2F2ZVNpemUgPSBwYXJ0aWFsQ291bnQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHBhcnRpYWwgPSAvXihzaW5lfHRyaWFuZ2xlfHNxdWFyZXxzYXd0b290aCkoXFxkKykkLy5leGVjKHR5cGUpO1xuXHQgICAgICAgICAgICBpZiAocGFydGlhbCkge1xuXHQgICAgICAgICAgICAgICAgcGFydGlhbENvdW50ID0gcGFyc2VJbnQocGFydGlhbFsyXSkgKyAxO1xuXHQgICAgICAgICAgICAgICAgdHlwZSA9IHBhcnRpYWxbMV07XG5cdCAgICAgICAgICAgICAgICBwYXJ0aWFsQ291bnQgPSBNYXRoLm1heChwYXJ0aWFsQ291bnQsIDIpO1xuXHQgICAgICAgICAgICAgICAgcGVyaW9kaWNXYXZlU2l6ZSA9IHBhcnRpYWxDb3VudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBmb3IgKHZhciBuID0gMTsgbiA8IHBlcmlvZGljV2F2ZVNpemU7ICsrbikge1xuXHQgICAgICAgICAgICB2YXIgcGlGYWN0b3IgPSAyIC8gKG4gKiBNYXRoLlBJKTtcblx0ICAgICAgICAgICAgdmFyIGI7XG5cdCAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNpbmU6XG5cdCAgICAgICAgICAgICAgICBiID0gbiA8PSBwYXJ0aWFsQ291bnQgPyAxIDogMDtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgICBjYXNlIFRvbmUuT3NjaWxsYXRvci5UeXBlLlNxdWFyZTpcblx0ICAgICAgICAgICAgICAgIGIgPSBuICYgMSA/IDIgKiBwaUZhY3RvciA6IDA7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5TYXd0b290aDpcblx0ICAgICAgICAgICAgICAgIGIgPSBwaUZhY3RvciAqIChuICYgMSA/IDEgOiAtMSk7XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5UcmlhbmdsZTpcblx0ICAgICAgICAgICAgICAgIGlmIChuICYgMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGIgPSAyICogKHBpRmFjdG9yICogcGlGYWN0b3IpICogKG4gLSAxID4+IDEgJiAxID8gLTEgOiAxKTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgYiA9IDA7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgY2FzZSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b206XG5cdCAgICAgICAgICAgICAgICBiID0gdGhpcy5fcGFydGlhbHNbbiAtIDFdO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLk9zY2lsbGF0b3I6IGludmFsaWQgdHlwZTogJyArIHR5cGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmIChiICE9PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZWFsW25dID0gLWIgKiBNYXRoLnNpbihwaGFzZSAqIG4pO1xuXHQgICAgICAgICAgICAgICAgaW1hZ1tuXSA9IGIgKiBNYXRoLmNvcyhwaGFzZSAqIG4pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmVhbFtuXSA9IDA7XG5cdCAgICAgICAgICAgICAgICBpbWFnW25dID0gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gW1xuXHQgICAgICAgICAgICByZWFsLFxuXHQgICAgICAgICAgICBpbWFnXG5cdCAgICAgICAgXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ29tcHV0ZSB0aGUgaW52ZXJzZSBGRlQgZm9yIGEgZ2l2ZW4gcGhhc2UuXG5cdFx0ICogIEBwYXJhbSAge0Zsb2F0MzJBcnJheX0gIHJlYWxcblx0XHQgKiAgQHBhcmFtICB7RmxvYXQzMkFycmF5fSAgaW1hZ1xuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIHBoYXNlXG5cdFx0ICogIEByZXR1cm4gIHtBdWRpb1JhbmdlfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5faW52ZXJzZUZGVCA9IGZ1bmN0aW9uIChyZWFsLCBpbWFnLCBwaGFzZSkge1xuXHQgICAgICAgIHZhciBzdW0gPSAwO1xuXHQgICAgICAgIHZhciBsZW4gPSByZWFsLmxlbmd0aDtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIHN1bSArPSByZWFsW2ldICogTWF0aC5jb3MoaSAqIHBoYXNlKSArIGltYWdbaV0gKiBNYXRoLnNpbihpICogcGhhc2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gc3VtO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcmV0dXJuICB7QXVkaW9SYW5nZX1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUuX2dldEluaXRpYWxWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY29lZnMgPSB0aGlzLl9nZXRSZWFsSW1hZ2luYXJ5KHRoaXMuX3R5cGUsIDApO1xuXHQgICAgICAgIHZhciByZWFsID0gY29lZnNbMF07XG5cdCAgICAgICAgdmFyIGltYWcgPSBjb2Vmc1sxXTtcblx0ICAgICAgICB2YXIgbWF4VmFsdWUgPSAwO1xuXHQgICAgICAgIHZhciB0d29QaSA9IE1hdGguUEkgKiAyO1xuXHQgICAgICAgIC8vY2hlY2sgZm9yIHBlYWtzIGluIDggcGxhY2VzXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgbWF4VmFsdWUgPSBNYXRoLm1heCh0aGlzLl9pbnZlcnNlRkZUKHJlYWwsIGltYWcsIGkgLyA4ICogdHdvUGkpLCBtYXhWYWx1ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiAtdGhpcy5faW52ZXJzZUZGVChyZWFsLCBpbWFnLCB0aGlzLl9waGFzZSkgLyBtYXhWYWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9zYy5wYXJ0aWFscyA9IFsxLCAwLjIsIDAuMDFdO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgIT09IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnRpYWxzO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgICAgICB0aGlzLnR5cGUgPSBUb25lLk9zY2lsbGF0b3IuVHlwZS5DdXN0b207XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGhhc2UgPSAxODA7IC8vZmxpcHMgdGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGhhc2UgKiAoMTgwIC8gTWF0aC5QSSk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9waGFzZSA9IHBoYXNlICogTWF0aC5QSSAvIDE4MDtcblx0ICAgICAgICAgICAgLy9yZXNldCB0aGUgdHlwZVxuXHQgICAgICAgICAgICB0aGlzLnR5cGUgPSB0aGlzLl90eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3QuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Pc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl93YXZlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEF1ZGlvVG9HYWluIGNvbnZlcnRzIGFuIGlucHV0IGluIEF1ZGlvUmFuZ2UgWy0xLDFdIHRvIE5vcm1hbFJhbmdlIFswLDFdLiBcblx0XHQgKiAgICAgICAgIFNlZSBUb25lLkdhaW5Ub0F1ZGlvLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgYTJnID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXVkaW9Ub0dhaW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge1dhdmVTaGFwZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ub3JtID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAoeCkge1xuXHQgICAgICAgICAgICByZXR1cm4gKHggKyAxKSAvIDI7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdWRpb1RvR2FpbiwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdWRpb1RvR2Fpbn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdWRpb1RvR2Fpbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ub3JtLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ub3JtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdWRpb1RvR2Fpbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLlplcm8gb3V0cHV0cyAwJ3MgYXQgYXVkaW8tcmF0ZS4gVGhlIHJlYXNvbiB0aGlzIGhhcyB0byBiZVxuXHRcdCAqICAgICAgICAgaXQncyBvd24gY2xhc3MgaXMgdGhhdCBtYW55IGJyb3dzZXJzIG9wdGltaXplIG91dCBUb25lLlNpZ25hbFxuXHRcdCAqICAgICAgICAgd2l0aCBhIHZhbHVlIG9mIDAgYW5kIHdpbGwgbm90IHByb2Nlc3Mgbm9kZXMgZnVydGhlciBkb3duIHRoZSBncmFwaC5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKi9cblx0ICAgIFRvbmUuWmVybyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW4gPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgdGhpcy5jb250ZXh0LmdldENvbnN0YW50KDApLmNvbm5lY3QodGhpcy5fZ2Fpbik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5aZXJvLCBUb25lLlNpZ25hbEJhc2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlplcm99ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlplcm8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ2FpbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuWmVybztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBMRk8gc3RhbmRzIGZvciBsb3cgZnJlcXVlbmN5IG9zY2lsbGF0b3IuIFRvbmUuTEZPIHByb2R1Y2VzIGFuIG91dHB1dCBzaWduYWxcblx0XHQgKiAgICAgICAgICB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdG8gYW4gQXVkaW9QYXJhbSBvciBUb25lLlNpZ25hbFxuXHRcdCAqICAgICAgICAgIGluIG9yZGVyIHRvIG1vZHVsYXRlIHRoYXQgcGFyYW1ldGVyIHdpdGggYW4gb3NjaWxsYXRvci4gVGhlIExGTyBjYW5cblx0XHQgKiAgICAgICAgICBhbHNvIGJlIHN5bmNlZCB0byB0aGUgdHJhbnNwb3J0IHRvIHN0YXJ0L3N0b3AgYW5kIGNoYW5nZSB3aGVuIHRoZSB0ZW1wbyBjaGFuZ2VzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fE9iamVjdH0gW2ZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRpb24uIFR5cGljYWxseSwgTEZPcyB3aWxsIGJlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZyZXF1ZW5jeSByYW5nZSBvZiAwLjEgdG8gMTAgaGVydHouXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyPX0gbWluIFRoZSBtaW5pbXVtIG91dHB1dCB2YWx1ZSBvZiB0aGUgTEZPLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcj19IG1heCBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgTEZPLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBsZm8gPSBuZXcgVG9uZS5MRk8oXCI0blwiLCA0MDAsIDQwMDApO1xuXHRcdCAqIGxmby5jb25uZWN0KGZpbHRlci5mcmVxdWVuY3kpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ21pbicsXG5cdCAgICAgICAgICAgICdtYXgnXG5cdCAgICAgICAgXSwgVG9uZS5MRk8pO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICd0eXBlJzogb3B0aW9ucy50eXBlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbydzIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9vc2NpbGxhdG9yLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBhbXBsaXR1ZGUgb2YgdGhlIExGTywgd2hpY2ggY29udHJvbHMgdGhlIG91dHB1dCByYW5nZSBiZXR3ZWVuXG5cdFx0XHQgKiB0aGUgbWluIGFuZCBtYXggb3V0cHV0LiBGb3IgZXhhbXBsZSBpZiB0aGUgbWluIGlzIC0xMCBhbmQgdGhlIG1heFxuXHRcdFx0ICogaXMgMTAsIHNldHRpbmcgdGhlIGFtcGxpdHVkZSB0byAwLjUgd291bGQgbWFrZSB0aGUgTEZPIG1vZHVsYXRlXG5cdFx0XHQgKiBiZXR3ZWVuIC01IGFuZCA1LlxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYW1wbGl0dWRlID0gdGhpcy5fb3NjaWxsYXRvci52b2x1bWU7XG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUudW5pdHMgPSBUb25lLlR5cGUuTm9ybWFsUmFuZ2U7XG5cdCAgICAgICAgdGhpcy5hbXBsaXR1ZGUudmFsdWUgPSBvcHRpb25zLmFtcGxpdHVkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lnbmFsIHdoaWNoIGlzIG91dHB1dCB3aGVuIHRoZSBMRk8gaXMgc3RvcHBlZFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TaWduYWx9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwgPSBuZXcgVG9uZS5TaWduYWwoMCwgVG9uZS5UeXBlLkF1ZGlvUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEp1c3Qgb3V0cHV0cyB6ZXJvcy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5aZXJvfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl96ZXJvcyA9IG5ldyBUb25lLlplcm8oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdmFsdWUgdGhhdCB0aGUgTEZPIG91dHB1dHMgd2hlbiBpdCdzIHN0b3BwZWRcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFZhbHVlID0gMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BdWRpb1RvR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYTJnID0gbmV3IFRvbmUuQXVkaW9Ub0dhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGVyID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5TY2FsZShvcHRpb25zLm1pbiwgb3B0aW9ucy5tYXgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB1bml0cyBvZiB0aGUgTEZPICh1c2VkIGZvciBjb252ZXJ0aW5nKVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlR5cGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3VuaXRzID0gVG9uZS5UeXBlLkRlZmF1bHQ7XG5cdCAgICAgICAgdGhpcy51bml0cyA9IG9wdGlvbnMudW5pdHM7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jaGFpbih0aGlzLl9hMmcsIHRoaXMuX3NjYWxlcik7XG5cdCAgICAgICAgdGhpcy5femVyb3MuY29ubmVjdCh0aGlzLl9hMmcpO1xuXHQgICAgICAgIHRoaXMuX3N0b3BwZWRTaWduYWwuY29ubmVjdCh0aGlzLl9hMmcpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5MRk8sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICpcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICdtYXgnOiAxLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6ICc0bicsXG5cdCAgICAgICAgJ2FtcGxpdHVkZSc6IDEsXG5cdCAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkRlZmF1bHRcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgTEZPIHdpbGwgc3RhcnRcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnNldFZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIExGTy5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgTEZPIHdpbGwgc3RvcFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5zZXRWYWx1ZUF0VGltZSh0aGlzLl9zdG9wcGVkVmFsdWUsIHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3luYyB0aGUgc3RhcnQvc3RvcC9wYXVzZSB0byB0aGUgdHJhbnNwb3J0XG5cdFx0ICogIGFuZCB0aGUgZnJlcXVlbmN5IHRvIHRoZSBicG0gb2YgdGhlIHRyYW5zcG9ydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5MRk99IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgbGZvLmZyZXF1ZW5jeS52YWx1ZSA9IFwiOG5cIjtcblx0XHQgKiAgbGZvLnN5bmMoKS5zdGFydCgwKVxuXHRcdCAqICAvL3RoZSByYXRlIG9mIHRoZSBMRk8gd2lsbCBhbHdheXMgYmUgYW4gZWlnaHRoIG5vdGUsXG5cdFx0ICogIC8vZXZlbiBhcyB0aGUgdGVtcG8gY2hhbmdlc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zeW5jRnJlcXVlbmN5KCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHVuc3luYyB0aGUgTEZPIGZyb20gdHJhbnNwb3J0IGNvbnRyb2xcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci51bnN5bmNGcmVxdWVuY3koKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaXVtdW0gb3V0cHV0IG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnbWluJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdG9Vbml0cyh0aGlzLl9zY2FsZXIubWluKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICBtaW4gPSB0aGlzLl9mcm9tVW5pdHMobWluKTtcblx0ICAgICAgICAgICAgdGhpcy5fc2NhbGVyLm1pbiA9IG1pbjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIG91dHB1dCBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIG1heFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ21heCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvVW5pdHModGhpcy5fc2NhbGVyLm1heCk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtYXgpIHtcblx0ICAgICAgICAgICAgbWF4ID0gdGhpcy5fZnJvbVVuaXRzKG1heCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NjYWxlci5tYXggPSBtYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvcjogc2luZSwgc3F1YXJlLCBzYXd0b290aCwgdHJpYW5nbGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTEZPLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BwZWRWYWx1ZSA9IHRoaXMuX29zY2lsbGF0b3IuX2dldEluaXRpYWxWYWx1ZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnZhbHVlID0gdGhpcy5fc3RvcHBlZFZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBMRk8uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgcGhhc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IucGhhc2U7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwaGFzZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0b3BwZWRWYWx1ZSA9IHRoaXMuX29zY2lsbGF0b3IuX2dldEluaXRpYWxWYWx1ZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wcGVkU2lnbmFsLnZhbHVlID0gdGhpcy5fc3RvcHBlZFZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG91dHB1dCB1bml0cyBvZiB0aGUgTEZPLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkxGTyNcblx0XHQgKiBAdHlwZSB7VG9uZS5UeXBlfVxuXHRcdCAqIEBuYW1lIHVuaXRzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAndW5pdHMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl91bml0cztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB2YXIgY3VycmVudE1pbiA9IHRoaXMubWluO1xuXHQgICAgICAgICAgICB2YXIgY3VycmVudE1heCA9IHRoaXMubWF4O1xuXHQgICAgICAgICAgICAvL2NvbnZlcnQgdGhlIG1pbiBhbmQgdGhlIG1heFxuXHQgICAgICAgICAgICB0aGlzLl91bml0cyA9IHZhbDtcblx0ICAgICAgICAgICAgdGhpcy5taW4gPSBjdXJyZW50TWluO1xuXHQgICAgICAgICAgICB0aGlzLm1heCA9IGN1cnJlbnRNYXg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBNdXRlIHRoZSBvdXRwdXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTEZPI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIG11dGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxGTy5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIGVpdGhlciBcInN0YXJ0ZWRcIiBvciBcInN0b3BwZWRcIi5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MRk8jXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MRk8ucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnN0YXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENvbm5lY3QgdGhlIG91dHB1dCBvZiB0aGUgTEZPIHRvIGFuIEF1ZGlvUGFyYW0sIEF1ZGlvTm9kZSwgb3IgVG9uZSBOb2RlLlxuXHRcdCAqICBUb25lLkxGTyB3aWxsIGF1dG9tYXRpY2FsbHkgY29udmVydCB0byB0aGUgZGVzdGluYXRpb24gdW5pdHMgb2YgdGhlXG5cdFx0ICogIHdpbGwgZ2V0IHRoZSB1bml0cyBmcm9tIHRoZSBjb25uZWN0ZWQgbm9kZS5cblx0XHQgKiAgQHBhcmFtICB7VG9uZSB8IEF1ZGlvUGFyYW0gfCBBdWRpb05vZGV9IG5vZGVcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFtvdXRwdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBvdXRwdXQgdG8gY29ubmVjdCBmcm9tXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXROdW09MF0gb3B0aW9uYWxseSB3aGljaCBpbnB1dCB0byBjb25uZWN0IHRvXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkxGT30gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5MRk8ucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgIGlmIChub2RlLmNvbnN0cnVjdG9yID09PSBUb25lLlNpZ25hbCB8fCBub2RlLmNvbnN0cnVjdG9yID09PSBUb25lLlBhcmFtKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udmVydCA9IG5vZGUuY29udmVydDtcblx0ICAgICAgICAgICAgdGhpcy51bml0cyA9IG5vZGUudW5pdHM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5wcm90b3R5cGUuY29ubmVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBwcml2YXRlIG1ldGhvZCBib3Jyb3dlZCBmcm9tIFBhcmFtIGNvbnZlcnRzXG5cdFx0ICogIHVuaXRzIGZyb20gdGhlaXIgZGVzdGluYXRpb24gdmFsdWVcblx0XHQgKiAgQGZ1bmN0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuX2Zyb21Vbml0cyA9IFRvbmUuUGFyYW0ucHJvdG90eXBlLl9mcm9tVW5pdHM7XG5cdCAgICAvKipcblx0XHQgKiAgcHJpdmF0ZSBtZXRob2QgYm9ycm93ZWQgZnJvbSBQYXJhbSBjb252ZXJ0c1xuXHRcdCAqICB1bml0cyB0byB0aGVpciBkZXN0aW5hdGlvbiB2YWx1ZVxuXHRcdCAqICBAZnVuY3Rpb25cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTEZPLnByb3RvdHlwZS5fdG9Vbml0cyA9IFRvbmUuUGFyYW0ucHJvdG90eXBlLl90b1VuaXRzO1xuXHQgICAgLyoqXG5cdFx0ICogIGRpc2Nvbm5lY3QgYW5kIGRpc3Bvc2Vcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTEZPfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxGTy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2FtcGxpdHVkZScsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RvcHBlZFNpZ25hbCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5femVyb3MuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3plcm9zID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NjYWxlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fYTJnLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hMmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmFtcGxpdHVkZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTEZPO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5MaW1pdGVyIHdpbGwgbGltaXQgdGhlIGxvdWRuZXNzIG9mIGFuIGluY29taW5nIHNpZ25hbC5cblx0XHQgKiAgICAgICAgIEl0IGlzIGNvbXBvc2VkIG9mIGEgVG9uZS5Db21wcmVzc29yIHdpdGggYSBmYXN0IGF0dGFja1xuXHRcdCAqICAgICAgICAgYW5kIHJlbGVhc2UuIExpbWl0ZXJzIGFyZSBjb21tb25seSB1c2VkIHRvIHNhZmVndWFyZCBhZ2FpbnN0XG5cdFx0ICogICAgICAgICBzaWduYWwgY2xpcHBpbmcuIFVubGlrZSBhIGNvbXByZXNzb3IsIGxpbWl0ZXJzIGRvIG5vdCBwcm92aWRlXG5cdFx0ICogICAgICAgICBzbW9vdGggZ2FpbiByZWR1Y3Rpb24gYW5kIGFsbW9zdCBjb21wbGV0ZWx5IHByZXZlbnRcblx0XHQgKiAgICAgICAgIGFkZGl0aW9uYWwgZ2FpbiBhYm92ZSB0aGUgdGhyZXNob2xkLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB0aHJlc2hvbGQgVGhlIHRoZXNob2xkIGFib3ZlIHdoaWNoIHRoZSBsaW1pdGluZyBpcyBhcHBsaWVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgbGltaXRlciA9IG5ldyBUb25lLkxpbWl0ZXIoLTYpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaW1pdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsndGhyZXNob2xkJ10sIFRvbmUuTGltaXRlcik7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29tcHJlc3NvclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbXByZXNzb3IgPSB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Db21wcmVzc29yKHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCc6IG9wdGlvbnMudGhyZXNob2xkXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdGhyZXNob2xkIG9mIG9mIHRoZSBsaW1pdGVyXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbH1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gdGhpcy5fY29tcHJlc3Nvci50aHJlc2hvbGQ7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ3RocmVzaG9sZCcpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTGltaXRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICovXG5cdCAgICBUb25lLkxpbWl0ZXIuZGVmYXVsdHMgPSB7ICd0aHJlc2hvbGQnOiAtMTIgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTGltaXRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5MaW1pdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3Nvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY29tcHJlc3NvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3RocmVzaG9sZCcpO1xuXHQgICAgICAgIHRoaXMudGhyZXNob2xkID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5MaW1pdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Mb3dwYXNzIGlzIGEgbG93cGFzcyBmZWVkYmFjayBjb21iIGZpbHRlci4gSXQgaXMgc2ltaWxhciB0b1xuXHRcdCAqICAgICAgICAgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIsIGJ1dCBpbmNsdWRlcyBhIGxvd3Bhc3MgZmlsdGVyLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtkZWxheVRpbWVdIFRoZSBkZWxheSB0aW1lIG9mIHRoZSBjb21iIGZpbHRlclxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlPX0gcmVzb25hbmNlIFRoZSByZXNvbmFuY2UgKGZlZWRiYWNrKSBvZiB0aGUgY29tYiBmaWx0ZXJcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3k9fSBkYW1wZW5pbmcgVGhlIGN1dG9mZiBvZiB0aGUgbG93cGFzcyBmaWx0ZXIgZGFtcGVucyB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGFzIGl0IGlzIGZlZGJhY2suXG5cdFx0ICovXG5cdCAgICBUb25lLkxvd3Bhc3NDb21iRmlsdGVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZScsXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0sIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDEpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0RlbGF5Tm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXkgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheVRpbWUgb2YgdGhlIGNvbWIgZmlsdGVyLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gdGhpcy5fZGVsYXkuZGVsYXlUaW1lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsb3dwYXNzIGZpbHRlclxuXHRcdFx0ICogIEB0eXBlICB7QmlxdWFkRmlsdGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG93cGFzcyA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgIHRoaXMuX2xvd3Bhc3MuUS52YWx1ZSA9IC0zLjAxMDI5OTk1NjYzOTgxMjU7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcy50eXBlID0gJ2xvd3Bhc3MnO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkYW1wZW5pbmcgY29udHJvbCBvZiB0aGUgZmVlZGJhY2tcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gbmV3IFRvbmUuUGFyYW0oe1xuXHQgICAgICAgICAgICAncGFyYW0nOiB0aGlzLl9sb3dwYXNzLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3VuaXRzJzogVG9uZS5UeXBlLkZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ3ZhbHVlJzogb3B0aW9ucy5kYW1wZW5pbmdcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmVlZGJhY2sgZ2FpblxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLnJlc29uYW5jZSwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIGZlZWRiYWNrIG9mIHRoZSBkZWxheWVkIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSB0aGlzLl9mZWVkYmFjay5nYWluO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9kZWxheS5jaGFpbih0aGlzLl9sb3dwYXNzLCB0aGlzLl9mZWVkYmFjaywgdGhpcy5fZGVsYXkpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2RhbXBlbmluZycsXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxvd3Bhc3NDb21iRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjEsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDAuNSxcblx0ICAgICAgICAnZGFtcGVuaW5nJzogMzAwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTG93cGFzc0NvbWJGaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnLFxuXHQgICAgICAgICAgICAncmVzb25hbmNlJyxcblx0ICAgICAgICAgICAgJ2RlbGF5VGltZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJlc29uYW5jZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcy5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fbG93cGFzcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2suZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Mb3dwYXNzQ29tYkZpbHRlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1lcmdlIGJyaW5ncyB0d28gc2lnbmFscyBpbnRvIHRoZSBsZWZ0IGFuZCByaWdodFxuXHRcdCAqICAgICAgICAgIGNoYW5uZWxzIG9mIGEgc2luZ2xlIHN0ZXJlbyBjaGFubmVsLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIG1lcmdlID0gbmV3IFRvbmUuTWVyZ2UoKS50b01hc3RlcigpO1xuXHRcdCAqIC8vcm91dGluZyBhIHNpbmUgdG9uZSBpbiB0aGUgbGVmdCBjaGFubmVsXG5cdFx0ICogLy9hbmQgbm9pc2UgaW4gdGhlIHJpZ2h0IGNoYW5uZWxcblx0XHQgKiB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QobWVyZ2UubGVmdCk7XG5cdFx0ICogdmFyIG5vaXNlID0gbmV3IFRvbmUuTm9pc2UoKS5jb25uZWN0KG1lcmdlLnJpZ2h0KTtcblx0XHQgKiAvL3N0YXJ0aW5nIG91ciBvc2NpbGxhdG9yc1xuXHRcdCAqIG5vaXNlLnN0YXJ0KCk7XG5cdFx0ICogb3NjLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1lcmdlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDIsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBsZWZ0IGlucHV0IGNoYW5uZWwuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubGVmdCA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHJpZ2h0IGlucHV0IGNoYW5uZWwuXG5cdFx0XHQgKiAgQWxpYXMgZm9yIDxjb2RlPmlucHV0WzFdPC9jb2RlPi5cblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gdGhpcy5pbnB1dFsxXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWVyZ2VyIG5vZGUgZm9yIHRoZSB0d28gY2hhbm5lbHNcblx0XHRcdCAqICBAdHlwZSB7Q2hhbm5lbE1lcmdlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlciA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNoYW5uZWxNZXJnZXIoMik7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMubGVmdC5jb25uZWN0KHRoaXMuX21lcmdlciwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5yaWdodC5jb25uZWN0KHRoaXMuX21lcmdlciwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmNoYW5uZWxDb3VudCA9IDE7XG5cdCAgICAgICAgdGhpcy5yaWdodC5jaGFubmVsQ291bnQgPSAxO1xuXHQgICAgICAgIHRoaXMubGVmdC5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0Jztcblx0ICAgICAgICB0aGlzLnJpZ2h0LmNoYW5uZWxDb3VudE1vZGUgPSAnZXhwbGljaXQnO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWVyZ2UsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVyZ2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVyZ2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmxlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubGVmdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5yaWdodC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5yaWdodCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2VyLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1lcmdlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTWV0ZXIgZ2V0cyB0aGUgW1JNU10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUm9vdF9tZWFuX3NxdWFyZSlcblx0XHQgKiAgICAgICAgICBvZiBhbiBpbnB1dCBzaWduYWwgd2l0aCBzb21lIGF2ZXJhZ2luZyBhcHBsaWVkLiBJdCBjYW4gYWxzbyBnZXQgdGhlIHJhd1xuXHRcdCAqICAgICAgICAgIHZhbHVlIG9mIHRoZSBpbnB1dCBzaWduYWwuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHNtb290aGluZyBUaGUgYW1vdW50IG9mIHNtb290aGluZyBhcHBsaWVkIGJldHdlZW4gZnJhbWVzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtZXRlciA9IG5ldyBUb25lLk1ldGVyKCk7XG5cdFx0ICogdmFyIG1pYyA9IG5ldyBUb25lLlVzZXJNZWRpYSgpLm9wZW4oKTtcblx0XHQgKiAvL2Nvbm5lY3QgbWljIHRvIHRoZSBtZXRlclxuXHRcdCAqIG1pYy5jb25uZWN0KG1ldGVyKTtcblx0XHQgKiAvL3RoZSBjdXJyZW50IGxldmVsIG9mIHRoZSBtaWMgaW5wdXQgaW4gZGVjaWJlbHNcblx0XHQgKiB2YXIgbGV2ZWwgPSBtZXRlci5nZXRWYWx1ZSgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3Ntb290aGluZyddLCBUb25lLk1ldGVyKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlIHdoaWNoIGNvbXB1dGVzIHRoZSBsZXZlbHMuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQW5hbHlzZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmlucHV0ID0gdGhpcy5vdXRwdXQgPSB0aGlzLl9hbmFseXNlciA9IG5ldyBUb25lLkFuYWx5c2VyKCd3YXZlZm9ybScsIDEwMjQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgY2FycnlvdmVyIGJldHdlZW4gdGhlIGN1cnJlbnQgYW5kIGxhc3QgZnJhbWUuXG5cdFx0XHQgKiAgT25seSBhcHBsaWVkIG1ldGVyIGZvciBcImxldmVsXCIgdHlwZS5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc21vb3RoaW5nID0gb3B0aW9ucy5zbW9vdGhpbmc7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NZXRlciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5kZWZhdWx0cyA9IHsgJ3Ntb290aGluZyc6IDAuOCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgY3VycmVudCBkZWNpYmVsIHZhbHVlIG9mIHRoZSBpbmNvbWluZyBzaWduYWxcblx0XHQgKiAgQHJldHVybnMge0RlY2liZWxzfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5wcm90b3R5cGUuZ2V0TGV2ZWwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIudHlwZSA9ICdmZnQnO1xuXHQgICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgICAgIHZhciBvZmZzZXQgPSAyODtcblx0ICAgICAgICAvLyBub3JtYWxpemVzIG1vc3Qgc2lnbmFsIGxldmVsc1xuXHQgICAgICAgIC8vIFRPRE86IGNvbXB1dGUgbG91ZG5lc3MgZnJvbSBGRlRcblx0ICAgICAgICByZXR1cm4gTWF0aC5tYXguYXBwbHkodGhpcywgdmFsdWVzKSArIG9mZnNldDtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBzaWduYWwgdmFsdWUgb2YgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdCAqICBAcmV0dXJucyB7TnVtYmVyfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRlci5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIudHlwZSA9ICd3YXZlZm9ybSc7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fYW5hbHlzZXIuZ2V0VmFsdWUoKTtcblx0ICAgICAgICByZXR1cm4gdmFsdWVbMF07XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQSB2YWx1ZSBmcm9tIDAgLT4gMSB3aGVyZSAwIHJlcHJlc2VudHMgbm8gdGltZSBhdmVyYWdpbmcgd2l0aCB0aGUgbGFzdCBhbmFseXNpcyBmcmFtZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5NZXRlciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHNtb290aGluZ1xuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0ZXIucHJvdG90eXBlLCAnc21vb3RoaW5nJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHlzZXIuc21vb3RoaW5nO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FuYWx5c2VyLnNtb290aGluZyA9IHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWV0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0ZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9hbmFseXNlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1ldGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqXHRAY2xhc3MgIFRvbmUuU3BsaXQgc3BsaXRzIGFuIGluY29taW5nIHNpZ25hbCBpbnRvIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNwbGl0ID0gbmV3IFRvbmUuU3BsaXQoKTtcblx0XHQgKiBzdGVyZW9TaWduYWwuY29ubmVjdChzcGxpdCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNwbGl0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDAsIDIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtDaGFubmVsU3BsaXR0ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IHRoaXMuaW5wdXQgPSB0aGlzLmNvbnRleHQuY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKDIpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNoYW5uZWxDb3VudCA9IDI7XG5cdCAgICAgICAgdGhpcy5fc3BsaXR0ZXIuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTGVmdCBjaGFubmVsIG91dHB1dC5cblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLm91dHB1dFswXSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBSaWdodCBjaGFubmVsIG91dHB1dC5cblx0XHRcdCAqICBBbGlhcyBmb3IgPGNvZGU+b3V0cHV0WzFdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnJpZ2h0ID0gdGhpcy5vdXRwdXRbMV0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyLmNvbm5lY3QodGhpcy5sZWZ0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5jb25uZWN0KHRoaXMucmlnaHQsIDEsIDApO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3BsaXQsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3BsaXR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3BsaXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5sZWZ0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmxlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TcGxpdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1pZC9TaWRlIHByb2Nlc3Npbmcgc2VwYXJhdGVzIHRoZSB0aGUgJ21pZCcgc2lnbmFsXG5cdFx0ICogICAgICAgICAod2hpY2ggY29tZXMgb3V0IG9mIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBjaGFubmVsKVxuXHRcdCAqICAgICAgICAgYW5kIHRoZSAnc2lkZScgKHdoaWNoIG9ubHkgY29tZXMgb3V0IG9mIHRoZSB0aGUgc2lkZSBjaGFubmVscykuIDxicj48YnI+XG5cdFx0ICogICAgICAgICA8Y29kZT5cblx0XHQgKiAgICAgICAgIE1pZCA9IChMZWZ0K1JpZ2h0KS9zcXJ0KDIpOyAgIC8vIG9idGFpbiBtaWQtc2lnbmFsIGZyb20gbGVmdCBhbmQgcmlnaHQ8YnI+XG5cdFx0ICogICAgICAgICBTaWRlID0gKExlZnQtUmlnaHQpL3NxcnQoMik7ICAgLy8gb2J0YWluIHNpZGUtc2lnbmFsIGZyb20gbGVmdCBhbmQgcmlnaDxicj5cblx0XHQgKiAgICAgICAgIDwvY29kZT5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlU3BsaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMCwgMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3BsaXQgdGhlIGluY29taW5nIHNpZ25hbCBpbnRvIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtaWQgc2VuZC4gQ29ubmVjdCB0byBtaWQgcHJvY2Vzc2luZy4gQWxpYXMgZm9yXG5cdFx0XHQgKiAgPGNvZGU+b3V0cHV0WzBdPC9jb2RlPlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21pZEFkZCA9IG5ldyBUb25lLkFkZCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogTXVsdGlwbHkgdGhlIF9taWRBZGQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gdGhpcy5vdXRwdXRbMF0gPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIG91dHB1dC4gQ29ubmVjdCB0byBzaWRlIHByb2Nlc3NpbmcuIEFsc28gT3V0cHV0IDFcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NpZGVTdWJ0cmFjdCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgX21pZEFkZCBieSBzcXJ0KDEvMilcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5zaWRlID0gdGhpcy5vdXRwdXRbMV0gPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fbWlkQWRkLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdC5jb25uZWN0KHRoaXMuX21pZEFkZCwgMSwgMSk7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuY29ubmVjdCh0aGlzLl9zaWRlU3VidHJhY3QsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmNvbm5lY3QodGhpcy5fc2lkZVN1YnRyYWN0LCAxLCAxKTtcblx0ICAgICAgICB0aGlzLl9taWRBZGQuY29ubmVjdCh0aGlzLm1pZCk7XG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0LmNvbm5lY3QodGhpcy5zaWRlKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVTcGxpdCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1pZFNpZGVTcGxpdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlU3BsaXQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5taWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5zaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRBZGQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZEFkZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc2lkZVN1YnRyYWN0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaWRlU3VidHJhY3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZVNwbGl0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTWlkL1NpZGUgcHJvY2Vzc2luZyBzZXBhcmF0ZXMgdGhlIHRoZSAnbWlkJyBzaWduYWxcblx0XHQgKiAgICAgICAgICh3aGljaCBjb21lcyBvdXQgb2YgYm90aCB0aGUgbGVmdCBhbmQgdGhlIHJpZ2h0IGNoYW5uZWwpXG5cdFx0ICogICAgICAgICBhbmQgdGhlICdzaWRlJyAod2hpY2ggb25seSBjb21lcyBvdXQgb2YgdGhlIHRoZSBzaWRlIGNoYW5uZWxzKS5cblx0XHQgKiAgICAgICAgIE1pZFNpZGVNZXJnZSBtZXJnZXMgdGhlIG1pZCBhbmQgc2lkZSBzaWduYWwgYWZ0ZXIgdGhleSd2ZSBiZWVuIHNlcGVyYXRlZFxuXHRcdCAqICAgICAgICAgYnkgVG9uZS5NaWRTaWRlU3BsaXQuPGJyPjxicj5cblx0XHQgKiAgICAgICAgIDxjb2RlPlxuXHRcdCAqICAgICAgICAgTGVmdCA9IChNaWQrU2lkZSkvc3FydCgyKTsgICAvLyBvYnRhaW4gbGVmdCBzaWduYWwgZnJvbSBtaWQgYW5kIHNpZGU8YnI+XG5cdFx0ICogICAgICAgICBSaWdodCA9IChNaWQtU2lkZSkvc3FydCgyKTsgICAvLyBvYnRhaW4gcmlnaHQgc2lnbmFsIGZyb20gbWlkIGFuZCBzaWRlPGJyPlxuXHRcdCAqICAgICAgICAgPC9jb2RlPlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVNZXJnZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygyLCAwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHNpZ25hbCBpbnB1dC4gQWxpYXMgZm9yXG5cdFx0XHQgKiAgPGNvZGU+aW5wdXRbMF08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IHRoaXMuaW5wdXRbMF0gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcmVjb21iaW5lIHRoZSBtaWQvc2lkZSBpbnRvIExlZnRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BZGR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBuZXcgVG9uZS5BZGQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIE11bHRpcGx5IHRoZSBsZWZ0IGJ5IHNxcnQoMS8yKVxuXHRcdFx0ICogQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90aW1lc1R3b0xlZnQgPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIHNpZ25hbCBpbnB1dC4gQWxpYXMgZm9yXG5cdFx0XHQgKiAgPGNvZGU+aW5wdXRbMV08L2NvZGU+XG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGUgPSB0aGlzLmlucHV0WzFdID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHJlY29tYmluZSB0aGUgbWlkL3NpZGUgaW50byBSaWdodFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yaWdodCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBNdWx0aXBseSB0aGUgcmlnaHQgYnkgc3FydCgxLzIpXG5cdFx0XHQgKiBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQgPSBuZXcgVG9uZS5NdWx0aXBseShNYXRoLlNRUlQxXzIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIE1lcmdlIHRoZSBsZWZ0L3JpZ2h0IHNpZ25hbCBiYWNrIGludG8gYSBzdGVyZW8gc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICB0aGlzLm1pZC5jb25uZWN0KHRoaXMuX2xlZnQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuc2lkZS5jb25uZWN0KHRoaXMuX2xlZnQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMubWlkLmNvbm5lY3QodGhpcy5fcmlnaHQsIDAsIDApO1xuXHQgICAgICAgIHRoaXMuc2lkZS5jb25uZWN0KHRoaXMuX3JpZ2h0LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0LmNvbm5lY3QodGhpcy5fdGltZXNUd29MZWZ0KTtcblx0ICAgICAgICB0aGlzLl9yaWdodC5jb25uZWN0KHRoaXMuX3RpbWVzVHdvUmlnaHQpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl90aW1lc1R3b1JpZ2h0LmNvbm5lY3QodGhpcy5fbWVyZ2UsIDAsIDEpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkU2lkZU1lcmdlLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWlkU2lkZU1lcmdlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVNZXJnZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnNpZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xlZnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xlZnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvTGVmdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGltZXNUd29MZWZ0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9yaWdodC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3RpbWVzVHdvUmlnaHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZU1lcmdlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5NaWRTaWRlQ29tcHJlc3NvciBhcHBsaWVzIHR3byBkaWZmZXJlbnQgY29tcHJlc3NvcnMgdG8gdGhlIG1pZFxuXHRcdCAqICAgICAgICAgYW5kIHNpZGUgc2lnbmFsIGNvbXBvbmVudHMuIFNlZSBUb25lLk1pZFNpZGVTcGxpdC5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgbWlkIGFuZCBzaWRlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3JzLlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk1pZFNpZGVDb21wcmVzc29yLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWlkL3NpZGUgc3BsaXRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZVNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSB0aGlzLmlucHV0ID0gbmV3IFRvbmUuTWlkU2lkZVNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1pZC9zaWRlIHJlY29tYmluYXRpb25cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZU1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1pZFNpZGVNZXJnZSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIG1pZCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWlkID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLm1pZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgc2lkZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuc2lkZSA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5zaWRlKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQubWlkLmNoYWluKHRoaXMubWlkLCB0aGlzLl9taWRTaWRlTWVyZ2UubWlkKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQuc2lkZS5jaGFpbih0aGlzLnNpZGUsIHRoaXMuX21pZFNpZGVNZXJnZS5zaWRlKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnc2lkZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1pZFNpZGVDb21wcmVzc29yLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkU2lkZUNvbXByZXNzb3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21pZCc6IHtcblx0ICAgICAgICAgICAgJ3JhdGlvJzogMyxcblx0ICAgICAgICAgICAgJ3RocmVzaG9sZCc6IC0yNCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjAzLFxuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMixcblx0ICAgICAgICAgICAgJ2tuZWUnOiAxNlxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ3NpZGUnOiB7XG5cdCAgICAgICAgICAgICdyYXRpbyc6IDYsXG5cdCAgICAgICAgICAgICd0aHJlc2hvbGQnOiAtMzAsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC4yNSxcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDMsXG5cdCAgICAgICAgICAgICdrbmVlJzogMTBcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlQ29tcHJlc3Nvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRTaWRlQ29tcHJlc3Nvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ21pZCcsXG5cdCAgICAgICAgICAgICdzaWRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubWlkLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnNpZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZVNwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVNZXJnZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZUNvbXByZXNzb3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk1vbm8gY29lcmNlcyB0aGUgaW5jb21pbmcgbW9ubyBvciBzdGVyZW8gc2lnbmFsIGludG8gYSBtb25vIHNpZ25hbFxuXHRcdCAqICAgICAgICAgd2hlcmUgYm90aCBsZWZ0IGFuZCByaWdodCBjaGFubmVscyBoYXZlIHRoZSBzYW1lIHZhbHVlLiBUaGlzIGNhbiBiZSB1c2VmdWxcblx0XHQgKiAgICAgICAgIGZvciBbc3RlcmVvIGltYWdpbmddKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N0ZXJlb19pbWFnaW5nKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5jcmVhdGVJbnNPdXRzKDEsIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIG1lcmdlIHRoZSBzaWduYWxcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk1lcmdlKCk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX21lcmdlLCAwLCAwKTtcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fbWVyZ2UsIDAsIDEpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTW9ubywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9uby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX21lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9ubztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgY29tcHJlc3NvciB3aXRoIHNlcGVyYXRlIGNvbnRyb2xzIG92ZXIgbG93L21pZC9oaWdoIGR5bmFtaWNzXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIGxvdy9taWQvaGlnaCBjb21wcmVzc29yIHNldHRpbmdzLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgbXVsdGliYW5kID0gbmV3IFRvbmUuTXVsdGliYW5kQ29tcHJlc3Nvcih7XG5cdFx0ICogIFx0XCJsb3dGcmVxdWVuY3lcIiA6IDIwMCxcblx0XHQgKiAgXHRcImhpZ2hGcmVxdWVuY3lcIiA6IDEzMDBcblx0XHQgKiAgXHRcImxvd1wiIDoge1xuXHRcdCAqICBcdFx0XCJ0aHJlc2hvbGRcIiA6IC0xMlxuXHRcdCAqICBcdH1cblx0XHQgKiAgfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuTXVsdGliYW5kQ29tcHJlc3NvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKGFyZ3VtZW50cywgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLmRlZmF1bHRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBzcGxpdCB0aGUgaW5jb21pbmcgc2lnbmFsIGludG8gaGlnaC9taWQvbG93XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGliYW5kU3BsaXR9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NwbGl0dGVyID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLk11bHRpYmFuZFNwbGl0KHtcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSc6IG9wdGlvbnMubG93RnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnaGlnaEZyZXF1ZW5jeSc6IG9wdGlvbnMuaGlnaEZyZXF1ZW5jeVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGxvdy9taWQgY3Jvc3NvdmVyIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gdGhpcy5fc3BsaXR0ZXIubG93RnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIG1pZC9oaWdoIGNyb3Nzb3ZlciBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSB0aGlzLl9zcGxpdHRlci5oaWdoRnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBvdXRwdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY29tcHJlc3NvciBhcHBsaWVkIHRvIHRoZSBsb3cgZnJlcXVlbmNpZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubG93ID0gbmV3IFRvbmUuQ29tcHJlc3NvcihvcHRpb25zLmxvdyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNvbXByZXNzb3IgYXBwbGllZCB0byB0aGUgbWlkIGZyZXF1ZW5jaWVzLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNvbXByZXNzb3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1pZCA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5taWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjb21wcmVzc29yIGFwcGxpZWQgdG8gdGhlIGhpZ2ggZnJlcXVlbmNpZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ29tcHJlc3Nvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGlnaCA9IG5ldyBUb25lLkNvbXByZXNzb3Iob3B0aW9ucy5oaWdoKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGNvbXByZXNzb3Jcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5sb3cuY2hhaW4odGhpcy5sb3csIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5taWQuY2hhaW4odGhpcy5taWQsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5oaWdoLmNoYWluKHRoaXMuaGlnaCwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2hpZ2gnLFxuXHQgICAgICAgICAgICAnbWlkJyxcblx0ICAgICAgICAgICAgJ2xvdycsXG5cdCAgICAgICAgICAgICdoaWdoRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2xvd0ZyZXF1ZW5jeSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk11bHRpYmFuZENvbXByZXNzb3IsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NdWx0aWJhbmRDb21wcmVzc29yLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdsb3cnOiBUb25lLkNvbXByZXNzb3IuZGVmYXVsdHMsXG5cdCAgICAgICAgJ21pZCc6IFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyxcblx0ICAgICAgICAnaGlnaCc6IFRvbmUuQ29tcHJlc3Nvci5kZWZhdWx0cyxcblx0ICAgICAgICAnbG93RnJlcXVlbmN5JzogMjUwLFxuXHQgICAgICAgICdoaWdoRnJlcXVlbmN5JzogMjAwMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NdWx0aWJhbmRDb21wcmVzc29yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk11bHRpYmFuZENvbXByZXNzb3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnaGlnaCcsXG5cdCAgICAgICAgICAgICdtaWQnLFxuXHQgICAgICAgICAgICAnbG93Jyxcblx0ICAgICAgICAgICAgJ2hpZ2hGcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnbG93RnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubG93LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oaWdoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zcGxpdHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5sb3cgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2ggPSBudWxsO1xuXHQgICAgICAgIHRoaXMubG93RnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhpZ2hGcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk11bHRpYmFuZENvbXByZXNzb3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIGlmIChUb25lLnN1cHBvcnRlZCAmJiAhd2luZG93LlN0ZXJlb1Bhbm5lck5vZGUpIHtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEBjbGFzcyBTaGltbWVkIFN0ZXJlb1Bhbm5lck5vZGVcblx0XHRcdCAqIEBwYXJhbSAge0F1ZGlvQ29udGV4dH0gY29udGV4dFxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHZhciBTdGVyZW9QYW5uZXJOb2RlID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSBhdWRpbyBjb250ZXh0XG5cdFx0XHRcdCAqIEB0eXBlIHtBdWRpb0NvbnRleHR9XG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogVGhlIGxlZnQvcmlnaHQgcGFubmluZy4gWy0xLCAxXVxuXHRcdFx0XHQgKiBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdGhpcy5wYW4gPSBuZXcgVG9uZS5TaWduYWwoMCwgVG9uZS5UeXBlLkF1ZGlvUmFuZ2UpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogRXF1YWwgcG93ZXIgc2NhbGluZyBvZiB0aGUgcmlnaHQgZ2FpblxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHJpZ2h0V2F2ZVNoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFRvbmUuZXF1YWxQb3dlclNjYWxlKCh2YWwgKyAxKSAvIDIpO1xuXHQgICAgICAgICAgICB9LCA0MDk2KTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIEVxdWFsIHBvd2VyIHNjYWxpbmcgb2YgdGhlIGxlZnQgZ2FpblxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5XYXZlU2hhcGVyfVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIGxlZnRXYXZlU2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gVG9uZS5lcXVhbFBvd2VyU2NhbGUoMSAtICh2YWwgKyAxKSAvIDIpO1xuXHQgICAgICAgICAgICB9LCA0MDk2KTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSBsZWZ0IGdhaW4gdmFsdWVcblx0XHRcdFx0ICogQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBsZWZ0R2FpbiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAgICAgLyoqXG5cdFx0XHRcdCAqIFRoZSByaWdodCBnYWluIHZhbHVlXG5cdFx0XHRcdCAqIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHRcdCAqL1xuXHQgICAgICAgICAgICB2YXIgcmlnaHRHYWluID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogU3BsaXQgdGhlIGluY29taW5nIHNpZ25hbFxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5TcGxpdH1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBzcGxpdCA9IHRoaXMuaW5wdXQgPSBuZXcgVG9uZS5TcGxpdCgpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogS2VlcHMgdGhlIHdhdmVzaGFwZXJzIGZyb20gb3B0aW1pemluZyAwc1xuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5aZXJvfVxuXHRcdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0XHQgKi9cblx0ICAgICAgICAgICAgdmFyIHplcm8gPSBuZXcgVG9uZS5aZXJvKCk7XG5cdCAgICAgICAgICAgIHplcm8uZmFuKHJpZ2h0V2F2ZVNoYXBlciwgbGVmdFdhdmVTaGFwZXIpO1xuXHQgICAgICAgICAgICAvKipcblx0XHRcdFx0ICogTWVyZ2UgdGhlIG91dGdvaW5nIHNpZ25hbFxuXHRcdFx0XHQgKiBAdHlwZSB7VG9uZS5NZXJnZX1cblx0XHRcdFx0ICogQHByaXZhdGVcblx0XHRcdFx0ICovXG5cdCAgICAgICAgICAgIHZhciBtZXJnZSA9IHRoaXMub3V0cHV0ID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgICAgICBzcGxpdC5sZWZ0LmNoYWluKGxlZnRHYWluLCBtZXJnZS5sZWZ0KTtcblx0ICAgICAgICAgICAgc3BsaXQucmlnaHQuY2hhaW4ocmlnaHRHYWluLCBtZXJnZS5yaWdodCk7XG5cdCAgICAgICAgICAgIHRoaXMucGFuLmNoYWluKGxlZnRXYXZlU2hhcGVyLCBsZWZ0R2Fpbi5nYWluKTtcblx0ICAgICAgICAgICAgdGhpcy5wYW4uY2hhaW4ocmlnaHRXYXZlU2hhcGVyLCByaWdodEdhaW4uZ2Fpbik7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICBTdGVyZW9QYW5uZXJOb2RlLnByb3RvdHlwZS5kaXNjb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB0aGlzLm91dHB1dC5kaXNjb25uZWN0LmFwcGx5KHRoaXMub3V0cHV0LCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgU3RlcmVvUGFubmVyTm9kZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5vdXRwdXQuY29ubmVjdC5hcHBseSh0aGlzLm91dHB1dCwgYXJndW1lbnRzKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIC8vYWRkIGl0IHRvIHRoZSBBdWRpb0NvbnRleHRcblx0ICAgICAgICBBdWRpb0NvbnRleHQucHJvdG90eXBlLmNyZWF0ZVN0ZXJlb1Bhbm5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGVyZW9QYW5uZXJOb2RlKHRoaXMpO1xuXHQgICAgICAgIH07XG5cdCAgICAgICAgVG9uZS5Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVTdGVyZW9QYW5uZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgU3RlcmVvUGFubmVyTm9kZSh0aGlzKTtcblx0ICAgICAgICB9O1xuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGFubmVyIGlzIGFuIGVxdWFsIHBvd2VyIExlZnQvUmlnaHQgUGFubmVyIGFuZCBkb2VzIG5vdFxuXHRcdCAqICAgICAgICAgIHN1cHBvcnQgM0QuIFBhbm5lciB1c2VzIHRoZSBTdGVyZW9QYW5uZXJOb2RlIHdoZW4gYXZhaWxhYmxlLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtpbml0aWFsUGFuPTBdIFRoZSBpbml0YWlsIHBhbm5lciB2YWx1ZSAoY2VudGVyKS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgLy9wYW4gdGhlIGlucHV0IHNpZ25hbCBoYXJkIHJpZ2h0LlxuXHRcdCAqICB2YXIgcGFubmVyID0gbmV3IFRvbmUuUGFubmVyKDEpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIgPSBmdW5jdGlvbiAoaW5pdGlhbFBhbikge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQqICB0aGUgcGFubmVyIG5vZGVcblx0XHRcdCogIEB0eXBlIHtTdGVyZW9QYW5uZXJOb2RlfVxuXHRcdFx0KiAgQHByaXZhdGVcblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZVN0ZXJlb1Bhbm5lcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0KiAgVGhlIHBhbiBjb250cm9sLiAtMSA9IGhhcmQgbGVmdCwgMSA9IGhhcmQgcmlnaHQuXG5cdFx0XHQqICBAdHlwZSB7QXVkaW9SYW5nZX1cblx0XHRcdCogIEBzaWduYWxcblx0XHRcdCovXG5cdCAgICAgICAgdGhpcy5wYW4gPSB0aGlzLl9wYW5uZXIucGFuO1xuXHQgICAgICAgIC8vaW5pdGlhbCB2YWx1ZVxuXHQgICAgICAgIHRoaXMucGFuLnZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKGluaXRpYWxQYW4sIDApO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCdwYW4nKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhbm5lciwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ3BhbicpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnBhbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGFubmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgc3BhdGlhbGl6ZWQgcGFubmVyIG5vZGUgd2hpY2ggc3VwcG9ydHMgZXF1YWxwb3dlciBvciBIUlRGIHBhbm5pbmcuXG5cdFx0ICogICAgICAgICAgVHJpZXMgdG8gbm9ybWFsaXplIHRoZSBBUEkgYWNyb3NzIHZhcmlvdXMgYnJvd3NlcnMuIFNlZSBUb25lLkxpc3RlbmVyXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IHBvc2l0aW9uWCBUaGUgaW5pdGlhbCB4IHBvc2l0aW9uLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gcG9zaXRpb25ZIFRoZSBpbml0aWFsIHkgcG9zaXRpb24uXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfSBwb3NpdGlvblogVGhlIGluaXRpYWwgeiBwb3NpdGlvbi5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAncG9zaXRpb25YJyxcblx0ICAgICAgICAgICAgJ3Bvc2l0aW9uWScsXG5cdCAgICAgICAgICAgICdwb3NpdGlvblonXG5cdCAgICAgICAgXSwgVG9uZS5QYW5uZXIzRCk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGFubmVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7UGFubmVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gdGhpcy5pbnB1dCA9IHRoaXMub3V0cHV0ID0gdGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5lcigpO1xuXHQgICAgICAgIC8vc2V0IHNvbWUgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5fcGFubmVyLnBhbm5pbmdNb2RlbCA9IG9wdGlvbnMucGFubmluZ01vZGVsO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5tYXhEaXN0YW5jZSA9IG9wdGlvbnMubWF4RGlzdGFuY2U7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmRpc3RhbmNlTW9kZWwgPSBvcHRpb25zLmRpc3RhbmNlTW9kZWw7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbmVPdXRlckdhaW4gPSBvcHRpb25zLmNvbmVPdXRlckdhaW47XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLmNvbmVPdXRlckFuZ2xlID0gb3B0aW9ucy5jb25lT3V0ZXJBbmdsZTtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuY29uZUlubmVyQW5nbGUgPSBvcHRpb25zLmNvbmVJbm5lckFuZ2xlO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5yZWZEaXN0YW5jZSA9IG9wdGlvbnMucmVmRGlzdGFuY2U7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyLnJvbGxvZmZGYWN0b3IgPSBvcHRpb25zLnJvbGxvZmZGYWN0b3I7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgb3JpZW50YXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IFtcblx0ICAgICAgICAgICAgb3B0aW9ucy5vcmllbnRhdGlvblgsXG5cdCAgICAgICAgICAgIG9wdGlvbnMub3JpZW50YXRpb25ZLFxuXHQgICAgICAgICAgICBvcHRpb25zLm9yaWVudGF0aW9uWlxuXHQgICAgICAgIF07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IFtcblx0ICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvblgsXG5cdCAgICAgICAgICAgIG9wdGlvbnMucG9zaXRpb25ZLFxuXHQgICAgICAgICAgICBvcHRpb25zLnBvc2l0aW9uWlxuXHQgICAgICAgIF07XG5cdCAgICAgICAgLy8gc2V0IHRoZSBkZWZhdWx0IHBvc2l0aW9uL29yaWVudGF0aW9uXG5cdCAgICAgICAgdGhpcy5vcmllbnRhdGlvblggPSBvcHRpb25zLm9yaWVudGF0aW9uWDtcblx0ICAgICAgICB0aGlzLm9yaWVudGF0aW9uWSA9IG9wdGlvbnMub3JpZW50YXRpb25ZO1xuXHQgICAgICAgIHRoaXMub3JpZW50YXRpb25aID0gb3B0aW9ucy5vcmllbnRhdGlvblo7XG5cdCAgICAgICAgdGhpcy5wb3NpdGlvblggPSBvcHRpb25zLnBvc2l0aW9uWDtcblx0ICAgICAgICB0aGlzLnBvc2l0aW9uWSA9IG9wdGlvbnMucG9zaXRpb25ZO1xuXHQgICAgICAgIHRoaXMucG9zaXRpb25aID0gb3B0aW9ucy5wb3NpdGlvblo7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QYW5uZXIzRCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvblxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncG9zaXRpb25YJzogMCxcblx0ICAgICAgICAncG9zaXRpb25ZJzogMCxcblx0ICAgICAgICAncG9zaXRpb25aJzogMCxcblx0ICAgICAgICAnb3JpZW50YXRpb25YJzogMCxcblx0ICAgICAgICAnb3JpZW50YXRpb25ZJzogMCxcblx0ICAgICAgICAnb3JpZW50YXRpb25aJzogMCxcblx0ICAgICAgICAncGFubmluZ01vZGVsJzogJ2VxdWFscG93ZXInLFxuXHQgICAgICAgICdtYXhEaXN0YW5jZSc6IDEwMDAwLFxuXHQgICAgICAgICdkaXN0YW5jZU1vZGVsJzogJ2ludmVyc2UnLFxuXHQgICAgICAgICdjb25lT3V0ZXJHYWluJzogMCxcblx0ICAgICAgICAnY29uZU91dGVyQW5nbGUnOiAzNjAsXG5cdCAgICAgICAgJ2NvbmVJbm5lckFuZ2xlJzogMzYwLFxuXHQgICAgICAgICdyZWZEaXN0YW5jZSc6IDEsXG5cdCAgICAgICAgJ3JvbGxvZmZGYWN0b3InOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHJhbXAgdGltZSB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBzZXRUYXJnZXRBdFRpbWVcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELnByb3RvdHlwZS5fcmFtcFRpbWVDb25zdGFudCA9IDAuMDE7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIHNvdXJjZSBpbiAzZCBzcGFjZS5cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB5XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHpcblx0XHQgKiAgQHJldHVybiB7VG9uZS5QYW5uZXIzRH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuc2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoeCwgeSwgeikge1xuXHQgICAgICAgIGlmICh0aGlzLl9wYW5uZXIucG9zaXRpb25YKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIucG9zaXRpb25YLnNldFRhcmdldEF0VGltZSh4LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIucG9zaXRpb25ZLnNldFRhcmdldEF0VGltZSh5LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLl9wYW5uZXIucG9zaXRpb25aLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5zZXRQb3NpdGlvbih4LCB5LCB6KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgc291cmNlIGluIDNkIHNwYWNlLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB4XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgelxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBhbm5lcjNEfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELnByb3RvdHlwZS5zZXRPcmllbnRhdGlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6KSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblkuc2V0VGFyZ2V0QXRUaW1lKHksIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bhbm5lci5vcmllbnRhdGlvblouc2V0VGFyZ2V0QXRUaW1lKHosIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGFubmVyLnNldE9yaWVudGF0aW9uKHgsIHksIHopO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25YXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdwb3NpdGlvblgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvbllcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ3Bvc2l0aW9uWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAncG9zaXRpb25aJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblsyXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzJdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB4IG9yaWVudGF0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgb3JpZW50YXRpb25YXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUsICdvcmllbnRhdGlvblgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgb3JpZW50YXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBvcmllbnRhdGlvbllcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgJ29yaWVudGF0aW9uWScsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsxXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeiBvcmllbnRhdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG9yaWVudGF0aW9uWlxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFubmVyM0QucHJvdG90eXBlLCAnb3JpZW50YXRpb25aJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblsyXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzJdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFByb3h5IGEgcHJvcGVydHkgb24gdGhlIHBhbm5lciB0byBhbiBleHBvc2VkIHB1YmxpYyBwcm9wZXJ5XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIHByb3Bcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcCkge1xuXHQgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhbm5lcjNELnByb3RvdHlwZSwgcHJvcCwge1xuXHQgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Bhbm5lcltwcm9wXSA9IHZhbDtcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFubmVyW3Byb3BdO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwYW5uaW5nIG1vZGVsLiBFaXRoZXIgXCJlcXVhbHBvd2VyXCIgb3IgXCJIUlRGXCIuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBwYW5uaW5nTW9kZWxcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ3Bhbm5pbmdNb2RlbCcpO1xuXHQgICAgLyoqXG5cdFx0ICogIEEgcmVmZXJlbmNlIGRpc3RhbmNlIGZvciByZWR1Y2luZyB2b2x1bWUgYXMgc291cmNlIG1vdmUgZnVydGhlciBmcm9tIHRoZSBsaXN0ZW5lclxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcmVmRGlzdGFuY2Vcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ3JlZkRpc3RhbmNlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgRGVzY3JpYmVzIGhvdyBxdWlja2x5IHRoZSB2b2x1bWUgaXMgcmVkdWNlZCBhcyBzb3VyY2UgbW92ZXMgYXdheSBmcm9tIGxpc3RlbmVyLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgcm9sbG9mZkZhY3RvclxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgncm9sbG9mZkZhY3RvcicpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkaXN0YW5jZSBtb2RlbCB1c2VkIGJ5LCAgXCJsaW5lYXJcIiwgXCJpbnZlcnNlXCIsIG9yIFwiZXhwb25lbnRpYWxcIi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIGRpc3RhbmNlTW9kZWxcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2Rpc3RhbmNlTW9kZWwnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYW5nbGUsIGluIGRlZ3JlZXMsIGluc2lkZSBvZiB3aGljaCB0aGVyZSB3aWxsIGJlIG5vIHZvbHVtZSByZWR1Y3Rpb25cblx0XHQgKiAgQHR5cGUge0RlZ3JlZXN9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBjb25lSW5uZXJBbmdsZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5fYWxpYXNQcm9wZXJ0eSgnY29uZUlubmVyQW5nbGUnKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYW5nbGUsIGluIGRlZ3JlZXMsIG91dHNpZGUgb2Ygd2hpY2ggdGhlIHZvbHVtZSB3aWxsIGJlIHJlZHVjZWRcblx0XHQgKiAgdG8gYSBjb25zdGFudCB2YWx1ZSBvZiBjb25lT3V0ZXJHYWluXG5cdFx0ICogIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYW5uZXIzRCNcblx0XHQgKiAgQG5hbWUgY29uZU91dGVyQW5nbGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFubmVyM0QuX2FsaWFzUHJvcGVydHkoJ2NvbmVPdXRlckFuZ2xlJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGdhaW4gb3V0c2lkZSBvZiB0aGUgY29uZU91dGVyQW5nbGVcblx0XHQgKiAgQHR5cGUge0dhaW59XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhbm5lcjNEI1xuXHRcdCAqICBAbmFtZSBjb25lT3V0ZXJHYWluXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdjb25lT3V0ZXJHYWluJyk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG1heGltdW0gZGlzdGFuY2UgYmV0d2VlbiBzb3VyY2UgYW5kIGxpc3RlbmVyLFxuXHRcdCAqICBhZnRlciB3aGljaCB0aGUgdm9sdW1lIHdpbGwgbm90IGJlIHJlZHVjZWQgYW55IGZ1cnRoZXIuXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFubmVyM0QjXG5cdFx0ICogIEBuYW1lIG1heERpc3RhbmNlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhbm5lcjNELl9hbGlhc1Byb3BlcnR5KCdtYXhEaXN0YW5jZScpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QYW5uZXIzRH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5uZXIzRC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBhbm5lcjNEO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYW5Wb2wgaXMgYSBUb25lLlBhbm5lciBhbmQgVG9uZS5Wb2x1bWUgaW4gb25lLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7QXVkaW9SYW5nZX0gcGFuIHRoZSBpbml0aWFsIHBhblxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdm9sdW1lIFRoZSBvdXRwdXQgdm9sdW1lLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcGFuIHRoZSBpbmNvbWluZyBzaWduYWwgbGVmdCBhbmQgZHJvcCB0aGUgdm9sdW1lXG5cdFx0ICogdmFyIHBhblZvbCA9IG5ldyBUb25lLlBhblZvbCgtMC4yNSwgLTEyKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFuVm9sID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3BhbicsXG5cdCAgICAgICAgICAgICd2b2x1bWUnXG5cdCAgICAgICAgXSwgVG9uZS5QYW5Wb2wpO1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhbm5pbmcgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlBhbm5lcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLlBhbm5lcihvcHRpb25zLnBhbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIEwvUiBwYW5uaW5nIGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0F1ZGlvUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wYW4gPSB0aGlzLl9wYW5uZXIucGFuO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2b2x1bWUgbm9kZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2b2x1bWUgY29udHJvbCBpbiBkZWNpYmVscy5cblx0XHRcdCAqICBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuY29ubmVjdCh0aGlzLl92b2x1bWUpO1xuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdwYW4nLFxuXHQgICAgICAgICAgICAndm9sdW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGFuVm9sLCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5Wb2wuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Bhbic6IDAsXG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIE11dGUvdW5tdXRlIHRoZSB2b2x1bWVcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QYW5Wb2wjXG5cdFx0ICogQG5hbWUgbXV0ZVxuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFuVm9sLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl92b2x1bWUubXV0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdm9sdW1lLm11dGUgPSBtdXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhblZvbH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYW5Wb2wucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdwYW4nLFxuXHQgICAgICAgICAgICAndm9sdW1lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcGFubmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnBhbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYW5Wb2w7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5Tb2xvIGxldHMgeW91IGlzb2xhdGUgYSBzcGVjaWZpYyBhdWRpbyBzdHJlYW0uIFdoZW5cblx0XHQgKiAgICAgICAgIGFuIGluc3RhbmNlIGlzIHNldCB0byBgc29sbz10cnVlYCwgaXQgd2lsbCBtdXRlIGFsbCBvdGhlciBpbnN0YW5jZXMuXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc29sb0EgPSBuZXcgVG9uZS5Tb2xvKClcblx0XHQgKiB2YXIgc29sb0IgPSBuZXcgVG9uZS5Tb2xvKClcblx0XHQgKiBzb2xvQS5zb2xvID0gdHJ1ZVxuXHRcdCAqIC8vbm8gYXVkaW8gd2lsbCBwYXNzIHRocm91Z2ggc29sb0Jcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3NvbG8nXSwgVG9uZS5Tb2xvKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBpbnB1dCBhbmQgb3V0cHV0IG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIGJvdW5kIF9zb2xvZWQgbWV0aG9kXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc29sb0JpbmQgPSB0aGlzLl9zb2xvZWQuYmluZCh0aGlzKTtcblx0ICAgICAgICAvL2xpc3RlbiBmb3Igc29sbyBldmVudHMgY2xhc3Mtd2lkZS5cblx0ICAgICAgICB0aGlzLmNvbnRleHQub24oJ3NvbG8nLCB0aGlzLl9zb2xvQmluZCk7XG5cdCAgICAgICAgLy9zZXQgaW5pdGlhbGx5XG5cdCAgICAgICAgdGhpcy5zb2xvID0gb3B0aW9ucy5zb2xvO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU29sbywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLmRlZmF1bHRzID0geyBzb2xvOiBmYWxzZSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIElzb2xhdGVzIHRoaXMgaW5zdGFuY2UgYW5kIG11dGVzIGFsbCBvdGhlciBpbnN0YW5jZXMgb2YgVG9uZS5Tb2xvLlxuXHRcdCAqICBPbmx5IG9uZSBpbnN0YW5jZSBjYW4gYmUgc29sb2VkIGF0IGEgdGltZS4gQSBzb2xvZWRcblx0XHQgKiAgaW5zdGFuY2Ugd2lsbCByZXBvcnQgYHNvbG89ZmFsc2VgIHdoZW4gYW5vdGhlciBpbnN0YW5jZSBpcyBzb2xvZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNvbG8jXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBzb2xvXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Tb2xvLnByb3RvdHlwZSwgJ3NvbG8nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1NvbG9lZCgpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc29sbykge1xuXHQgICAgICAgICAgICBpZiAoc29sbykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fYWRkU29sbygpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlU29sbygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5lbWl0KCdzb2xvJywgdGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgdGhlIGN1cnJlbnQgaW5zdGFuY2UgaXMgbXV0ZWQsIGkuZS4gYW5vdGhlciBpbnN0YW5jZSBpcyBzb2xvZWRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuU29sbyNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0ICogIEBuYW1lIG11dGVkXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuU29sby5wcm90b3R5cGUsICdtdXRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQuZ2Fpbi52YWx1ZSA9PT0gMDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEFkZCB0aGlzIHRvIHRoZSBzb2xvZWQgYXJyYXlcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5fYWRkU29sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoIVRvbmUuaXNBcnJheSh0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvKSkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvID0gW107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICghdGhpcy5faXNTb2xvZWQoKSkge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvLnB1c2godGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlbW92ZSB0aGlzIGZyb20gdGhlIHNvbG9lZCBhcnJheVxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNvbG8ucHJvdG90eXBlLl9yZW1vdmVTb2xvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9pc1NvbG9lZCgpKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuY29udGV4dC5fY3VycmVudFNvbG8uaW5kZXhPZih0aGlzKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcmV0dXJuIHtCb29sZWFufSBJcyB0aGlzIG9uIHRoZSBzb2xvZWQgYXJyYXlcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5faXNTb2xvZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNBcnJheSh0aGlzLmNvbnRleHQuX2N1cnJlbnRTb2xvKSkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5sZW5ndGggIT09IDAgJiYgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5pbmRleE9mKHRoaXMpICE9PSAtMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEByZXR1cm4ge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBubyBvbmUgaXMgc29sb2VkXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX25vU29sb3MgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuICFUb25lLmlzQXJyYXkodGhpcy5jb250ZXh0Ll9jdXJyZW50U29sbykgfHwgdGhpcy5jb250ZXh0Ll9jdXJyZW50U29sby5sZW5ndGggPT09IDA7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNvbG8gdGhlIGN1cnJlbnQgaW5zdGFuY2UgYW5kIHVuc29sbyBhbGwgb3RoZXIgaW5zdGFuY2VzLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLlNvbG99ICBpbnN0YW5jZSAgVGhlIGluc3RhbmNlIHdoaWNoIGlzIGJlaW5nIHNvbG9lZC91bnNvbG9lZC5cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU29sby5wcm90b3R5cGUuX3NvbG9lZCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy5faXNTb2xvZWQoKSkge1xuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmdhaW4udmFsdWUgPSAxO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbm9Tb2xvcygpKSB7XG5cdCAgICAgICAgICAgIC8vbm8gb25lIGlzIHNvbG9lZFxuXHQgICAgICAgICAgICB0aGlzLmlucHV0LmdhaW4udmFsdWUgPSAxO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5wdXQuZ2Fpbi52YWx1ZSA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Tb2xvfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Tb2xvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5vZmYoJ3NvbG8nLCB0aGlzLl9zb2xvQmluZCk7XG5cdCAgICAgICAgdGhpcy5fcmVtb3ZlU29sbygpO1xuXHQgICAgICAgIHRoaXMuX3NvbG9CaW5kID0gbnVsbDtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlNvbG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEdldCB0aGUgY3VycmVudCB3YXZlZm9ybSBkYXRhIG9mIHRoZSBjb25uZWN0ZWQgYXVkaW8gc291cmNlLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5BdWRpb05vZGV9XG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyPX0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgRkZULiBWYWx1ZSBtdXN0IGJlIGEgcG93ZXIgb2Zcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydzaXplJ10sIFRvbmUuV2F2ZWZvcm0pO1xuXHQgICAgICAgIG9wdGlvbnMudHlwZSA9IFRvbmUuQW5hbHlzZXIuVHlwZS5XYXZlZm9ybTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbmFseXNlciBub2RlLlxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW5hbHlzZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbmFseXNlciA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLkFuYWx5c2VyKG9wdGlvbnMpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuV2F2ZWZvcm0sIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5XYXZlZm9ybS5kZWZhdWx0cyA9IHsgJ3NpemUnOiAxMDI0IH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0cyB0aGUgd2F2ZWZvcm0gb2YgdGhlIGF1ZGlvIHNvdXJjZS4gUmV0dXJucyB0aGUgd2F2ZWZvcm0gZGF0YVxuXHRcdCAqICBvZiBsZW5ndGggW3NpemVdKCNzaXplKSBhcyBhIEZsb2F0MzJBcnJheSB3aXRoIHZhbHVlcyBiZXR3ZWVuIC0xIGFuZCAxLlxuXHRcdCAqICBAcmV0dXJucyB7VHlwZWRBcnJheX1cblx0XHQgKi9cblx0ICAgIFRvbmUuV2F2ZWZvcm0ucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5nZXRWYWx1ZSgpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgc2l6ZSBvZiBhbmFseXNpcy4gVGhpcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGluIHRoZSByYW5nZSAzMiB0byAzMjc2OC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuV2F2ZWZvcm0jXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lIHNpemVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLldhdmVmb3JtLnByb3RvdHlwZSwgJ3NpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmFseXNlci5zaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2l6ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9hbmFseXNlci5zaXplID0gc2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuV2F2ZWZvcm19ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLldhdmVmb3JtLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuQXVkaW9Ob2RlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYW5hbHlzZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2FuYWx5c2VyID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5XYXZlZm9ybTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ3RybEludGVycG9sYXRlIHdpbGwgaW50ZXJwb2xhdGUgYmV0d2VlbiBnaXZlbiB2YWx1ZXMgYmFzZWRcblx0XHQgKiAgICAgICAgIG9uIHRoZSBcImluZGV4XCIgcHJvcGVydHkuIFBhc3NpbmcgaW4gYW4gYXJyYXkgb3Igb2JqZWN0IGxpdGVyYWxcblx0XHQgKiAgICAgICAgIHdpbGwgaW50ZXJwb2xhdGUgZWFjaCBvZiB0aGUgcGFyYW1ldGVycy4gTm90ZSAoaS5lLiBcIkMzXCIpXG5cdFx0ICogICAgICAgICBhbmQgVGltZSAoaS5lLiBcIjRuICsgMlwiKSBjYW4gYmUgaW50ZXJwb2xhdGVkLiBBbGwgb3RoZXIgdmFsdWVzIGFyZVxuXHRcdCAqICAgICAgICAgYXNzdW1lZCB0byBiZSBudW1iZXJzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgaW50ZXJwID0gbmV3IFRvbmUuQ3RybEludGVycG9sYXRlKFswLCAyLCA5LCA0XSk7XG5cdFx0ICogaW50ZXJwLmluZGV4ID0gMC43NTtcblx0XHQgKiBpbnRlcnAudmFsdWU7IC8vcmV0dXJucyAxLjVcblx0XHQgKlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBpbnRlcnAgPSBuZXcgVG9uZS5DdHJsSW50ZXJwb2xhdGUoW1xuXHRcdCAqIFx0WzIsIDQsIDVdLFxuXHRcdCAqIFx0WzksIDMsIDJdLFxuXHRcdCAqIF0pO1xuXHRcdCAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgYXJyYXkgb2YgdmFsdWVzIHRvIGludGVycG9sYXRlIG92ZXJcblx0XHQgKiBAcGFyYW0ge1Bvc2l0aXZlfSBpbmRleCBUaGUgaW5pdGlhbCBpbnRlcnBvbGF0aW9uIGluZGV4LlxuXHRcdCAqIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAndmFsdWVzJyxcblx0ICAgICAgICAgICAgJ2luZGV4J1xuXHQgICAgICAgIF0sIFRvbmUuQ3RybEludGVycG9sYXRlKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlcyB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuXG5cdFx0XHQgKiAgQHR5cGUgIHtBcnJheX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gb3B0aW9ucy52YWx1ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGludGVycG9sYXRlZCBpbmRleCBiZXR3ZWVuIHZhbHVlcy4gRm9yIGV4YW1wbGU6IGEgdmFsdWUgb2YgMS41XG5cdFx0XHQgKiAgd291bGQgaW50ZXJwb2xhdGUgZXF1YWxseSBiZXR3ZWVuIHRoZSB2YWx1ZSBhdCBpbmRleCAxXG5cdFx0XHQgKiAgYW5kIHRoZSB2YWx1ZSBhdCBpbmRleCAyLiBcblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogaW50ZXJwLmluZGV4ID0gMDsgXG5cdFx0XHQgKiBpbnRlcnAudmFsdWU7IC8vcmV0dXJucyB0aGUgdmFsdWUgYXQgMFxuXHRcdFx0ICogaW50ZXJwLmluZGV4ID0gMC41O1xuXHRcdFx0ICogaW50ZXJwLnZhbHVlOyAvL3JldHVybnMgdGhlIHZhbHVlIGJldHdlZW4gaW5kaWNlcyAwIGFuZCAxLiBcblx0XHRcdCAqICBAdHlwZSAge1Bvc2l0aXZlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsSW50ZXJwb2xhdGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxJbnRlcnBvbGF0ZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnaW5kZXgnOiAwLFxuXHQgICAgICAgICd2YWx1ZXMnOiBbXVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgY3VycmVudCBpbnRlcnBvbGF0ZWQgdmFsdWUgYmFzZWQgb24gdGhlIGluZGV4XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsSW50ZXJwb2xhdGUjXG5cdFx0ICogIEB0eXBlIHsqfVxuXHRcdCAqICBAbmFtZSB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4O1xuXHQgICAgICAgICAgICBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgdmFyIGxvd2VyUG9zaXRpb24gPSBNYXRoLmZsb29yKGluZGV4KTtcblx0ICAgICAgICAgICAgdmFyIGxvd2VyID0gdGhpcy52YWx1ZXNbbG93ZXJQb3NpdGlvbl07XG5cdCAgICAgICAgICAgIHZhciB1cHBlciA9IHRoaXMudmFsdWVzW01hdGguY2VpbChpbmRleCldO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJwb2xhdGUoaW5kZXggLSBsb3dlclBvc2l0aW9uLCBsb3dlciwgdXBwZXIpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGludGVycG9sYXRpb24gcm91dGluZVxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIGluZGV4ICBUaGUgaW5kZXggYmV0d2VlbiB0aGUgbG93ZXIgYW5kIHVwcGVyXG5cdFx0ICogIEBwYXJhbSAgeyp9ICBsb3dlciBcblx0XHQgKiAgQHBhcmFtICB7Kn0gIHVwcGVyIFxuXHRcdCAqICBAcmV0dXJuICB7Kn0gIFRoZSBpbnRlcnBvbGF0ZWQgdmFsdWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybEludGVycG9sYXRlLnByb3RvdHlwZS5faW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAoaW5kZXgsIGxvd2VyLCB1cHBlcikge1xuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkobG93ZXIpKSB7XG5cdCAgICAgICAgICAgIHZhciByZXRBcnJheSA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvd2VyLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICByZXRBcnJheVtpXSA9IHRoaXMuX2ludGVycG9sYXRlKGluZGV4LCBsb3dlcltpXSwgdXBwZXJbaV0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiByZXRBcnJheTtcblx0ICAgICAgICB9IGVsc2UgaWYgKFRvbmUuaXNPYmplY3QobG93ZXIpKSB7XG5cdCAgICAgICAgICAgIHZhciByZXRPYmogPSB7fTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBsb3dlcikge1xuXHQgICAgICAgICAgICAgICAgcmV0T2JqW2F0dHJdID0gdGhpcy5faW50ZXJwb2xhdGUoaW5kZXgsIGxvd2VyW2F0dHJdLCB1cHBlclthdHRyXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHJldE9iajtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBsb3dlciA9IHRoaXMuX3RvTnVtYmVyKGxvd2VyKTtcblx0ICAgICAgICAgICAgdXBwZXIgPSB0aGlzLl90b051bWJlcih1cHBlcik7XG5cdCAgICAgICAgICAgIHJldHVybiAoMSAtIGluZGV4KSAqIGxvd2VyICsgaW5kZXggKiB1cHBlcjtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENvbnZlcnQgZnJvbSB0aGUgZ2l2ZW4gdHlwZSBpbnRvIGEgbnVtYmVyXG5cdFx0ICogIEBwYXJhbSAge051bWJlcnxTdHJpbmd9ICB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUucHJvdG90eXBlLl90b051bWJlciA9IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICBpZiAoVG9uZS5pc051bWJlcih2YWwpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB2YWw7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9vdGhlcndpc2UgYXNzdW1lIHRoYXQgaXQncyBUaW1lLi4uXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLnRvU2Vjb25kcyh2YWwpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuQ3RybEludGVycG9sYXRlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsSW50ZXJwb2xhdGUucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxJbnRlcnBvbGF0ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQ3RybE1hcmtvdiByZXByZXNlbnRzIGEgTWFya292IENoYWluIHdoZXJlIGVhY2ggY2FsbFxuXHRcdCAqICAgICAgICAgdG8gVG9uZS5DdHJsTWFya292Lm5leHQgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlLiBJZiB0aGUgbmV4dFxuXHRcdCAqICAgICAgICAgc3RhdGUgY2hvaWNlIGlzIGFuIGFycmF5LCB0aGUgbmV4dCBzdGF0ZSBpcyBjaG9zZW4gcmFuZG9tbHkgd2l0aFxuXHRcdCAqICAgICAgICAgZXZlbiBwcm9iYWJpbGl0eSBmb3IgYWxsIG9mIHRoZSBjaG9pY2VzLiBGb3IgYSB3ZWlnaHRlZCBwcm9iYWJpbGl0eVxuXHRcdCAqICAgICAgICAgb2YgdGhlIG5leHQgY2hvaWNlcywgcGFzcyBpbiBhbiBvYmplY3Qgd2l0aCBcInN0YXRlXCIgYW5kIFwicHJvYmFiaWxpdHlcIiBhdHRyaWJ1dGVzLiBcblx0XHQgKiAgICAgICAgIFRoZSBwcm9iYWJpbGl0aWVzIHdpbGwgYmUgbm9ybWFsaXplZCBhbmQgdGhlbiBjaG9zZW4uIElmIG5vIG5leHQgb3B0aW9uc1xuXHRcdCAqICAgICAgICAgYXJlIGdpdmVuIGZvciB0aGUgY3VycmVudCBzdGF0ZSwgdGhlIHN0YXRlIHdpbGwgc3RheSB0aGVyZS4gXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBjaGFpbiA9IG5ldyBUb25lLkN0cmxNYXJrb3Yoe1xuXHRcdCAqIFx0XCJiZWdpbm5pbmdcIiA6IFtcImVuZFwiLCBcIm1pZGRsZVwiXSxcblx0XHQgKiBcdFwibWlkZGxlXCIgOiBcImVuZFwiXG5cdFx0ICogfSk7XG5cdFx0ICogY2hhaW4udmFsdWUgPSBcImJlZ2lubmluZ1wiO1xuXHRcdCAqIGNoYWluLm5leHQoKTsgLy9yZXR1cm5zIFwiZW5kXCIgb3IgXCJtaWRkbGVcIiB3aXRoIDUwJSBwcm9iYWJpbGl0eVxuXHRcdCAqXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNoYWluID0gbmV3IFRvbmUuQ3RybE1hcmtvdih7XG5cdFx0ICogXHRcImJlZ2lubmluZ1wiIDogW3tcInZhbHVlXCIgOiBcImVuZFwiLCBcInByb2JhYmlsaXR5XCIgOiAwLjh9LCBcblx0XHQgKiBcdFx0XHRcdFx0e1widmFsdWVcIiA6IFwibWlkZGxlXCIsIFwicHJvYmFiaWxpdHlcIiA6IDAuMn1dLFxuXHRcdCAqIFx0XCJtaWRkbGVcIiA6IFwiZW5kXCJcblx0XHQgKiB9KTtcblx0XHQgKiBjaGFpbi52YWx1ZSA9IFwiYmVnaW5uaW5nXCI7XG5cdFx0ICogY2hhaW4ubmV4dCgpOyAvL3JldHVybnMgXCJlbmRcIiB3aXRoIDgwJSBwcm9iYWJpbGl0eSBvciBcIm1pZGRsZVwiIHdpdGggMjAlLlxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gdmFsdWVzIEFuIG9iamVjdCB3aXRoIHRoZSBzdGF0ZSBuYW1lcyBhcyB0aGUga2V5c1xuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgbmV4dCBzdGF0ZShzKSBhcyB0aGUgdmFsdWVzLiBcblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdiA9IGZ1bmN0aW9uICh2YWx1ZXMsIGluaXRpYWwpIHtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIE1hcmtvdiB2YWx1ZXMgd2l0aCBzdGF0ZXMgYXMgdGhlIGtleXNcblx0XHRcdCAqICBhbmQgbmV4dCBzdGF0ZShzKSBhcyB0aGUgdmFsdWVzLiBcblx0XHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBUb25lLmRlZmF1bHRBcmcodmFsdWVzLCB7fSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIE1hcmtvdiB2YWx1ZXMuIFRoZSBuZXh0XG5cdFx0XHQgKiAgc3RhdGUgd2lsbCBiZSBldmFsdWF0ZWQgYW5kIHJldHVybmVkIHdoZW4gVG9uZS5DdHJsTWFya292Lm5leHRcblx0XHRcdCAqICBpcyBpbnZva2VkLlxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlID0gVG9uZS5kZWZhdWx0QXJnKGluaXRpYWwsIE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKVswXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5DdHJsTWFya292KTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBuZXh0IHN0YXRlIG9mIHRoZSBNYXJrb3YgdmFsdWVzLiBcblx0XHQgKiAgQHJldHVybiAge1N0cmluZ31cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybE1hcmtvdi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAodGhpcy52YWx1ZXMuaGFzT3duUHJvcGVydHkodGhpcy52YWx1ZSkpIHtcblx0ICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnZhbHVlc1t0aGlzLnZhbHVlXTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNBcnJheShuZXh0KSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIGRpc3RyaWJ1dGlvbiA9IHRoaXMuX2dldFByb2JEaXN0cmlidXRpb24obmV4dCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgcmFuZCA9IE1hdGgucmFuZG9tKCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXN0cmlidXRpb24ubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZGlzdCA9IGRpc3RyaWJ1dGlvbltpXTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAocmFuZCA+IHRvdGFsICYmIHJhbmQgPCB0b3RhbCArIGRpc3QpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNob3NlbiA9IG5leHRbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUb25lLmlzT2JqZWN0KGNob3NlbikpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjaG9zZW4udmFsdWU7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gY2hvc2VuO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IGRpc3Q7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV4dDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2hvb3NlIHJhbmRvbWx5IGZyb20gYW4gYXJyYXkgd2VpZ2h0ZWQgb3B0aW9ucyBpbiB0aGUgZm9ybSBcblx0XHQgKiAge1wic3RhdGVcIiA6IHN0cmluZywgXCJwcm9iYWJpbGl0eVwiIDogbnVtYmVyfSBvciBhbiBhcnJheSBvZiB2YWx1ZXNcblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICBvcHRpb25zIFxuXHRcdCAqICBAcmV0dXJuICB7QXJyYXl9ICBUaGUgcmFuZG9tbHkgc2VsZWN0ZWQgY2hvaWNlXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxNYXJrb3YucHJvdG90eXBlLl9nZXRQcm9iRGlzdHJpYnV0aW9uID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICB2YXIgZGlzdHJpYnV0aW9uID0gW107XG5cdCAgICAgICAgdmFyIHRvdGFsID0gMDtcblx0ICAgICAgICB2YXIgbmVlZHNOb3JtYWxpemluZyA9IGZhbHNlO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgb3B0aW9uID0gb3B0aW9uc1tpXTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNPYmplY3Qob3B0aW9uKSkge1xuXHQgICAgICAgICAgICAgICAgbmVlZHNOb3JtYWxpemluZyA9IHRydWU7XG5cdCAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25baV0gPSBvcHRpb24ucHJvYmFiaWxpdHk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25baV0gPSAxIC8gb3B0aW9ucy5sZW5ndGg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdG90YWwgKz0gZGlzdHJpYnV0aW9uW2ldO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAobmVlZHNOb3JtYWxpemluZykge1xuXHQgICAgICAgICAgICAvL25vcm1hbGl6ZSB0aGUgdmFsdWVzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGlzdHJpYnV0aW9uLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25bal0gPSBkaXN0cmlidXRpb25bal0gLyB0b3RhbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gZGlzdHJpYnV0aW9uO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5DdHJsTWFya292fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsTWFya292LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DdHJsTWFya292O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgR2VuZXJhdGUgcGF0dGVybnMgZnJvbSBhbiBhcnJheSBvZiB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBIYXMgYSBudW1iZXIgb2YgYXJwZWdnaWF0aW9uIGFuZCByYW5kb21pemVkXG5cdFx0ICogICAgICAgICBzZWxlY3Rpb24gcGF0dGVybnMuIFxuXHRcdCAqICAgICAgICAgICA8dWw+XG5cdFx0ICogIFx0ICAgICAgICA8bGk+XCJ1cFwiIC0gY3ljbGVzIHVwd2FyZDwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImRvd25cIiAtIGN5Y2xlcyBkb3dud2FyZDwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cInVwRG93blwiIC0gdXAgdGhlbiBhbmQgZG93bjwvbGk+XG5cdFx0ICogIFx0XHRcdDxsaT5cImRvd25VcFwiIC0gY3ljbGVzIGRvd24gdGhlbiBhbmQgdXA8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJhbHRlcm5hdGVVcFwiIC0ganVtcCB1cCB0d28gYW5kIGRvd24gb25lPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwiYWx0ZXJuYXRlRG93blwiIC0ganVtcCBkb3duIHR3byBhbmQgdXAgb25lPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwicmFuZG9tXCIgLSByYW5kb21seSBzZWxlY3QgYW4gaW5kZXg8L2xpPlxuXHRcdCAqICBcdFx0XHQ8bGk+XCJyYW5kb21XYWxrXCIgLSByYW5kb21seSBtb3ZlcyBvbmUgaW5kZXggYXdheSBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uPC9saT5cblx0XHQgKiAgXHRcdFx0PGxpPlwicmFuZG9tT25jZVwiIC0gcmFuZG9tbHkgc2VsZWN0IGFuIGluZGV4IHdpdGhvdXQgcmVwZWF0aW5nIHVudGlsIGFsbCB2YWx1ZXMgaGF2ZSBiZWVuIGNob3Nlbi48L2xpPlxuXHRcdCAqICAgICBcdFx0PC91bD5cblx0XHQgKiAgQHBhcmFtICB7QXJyYXl9ICB2YWx1ZXMgICBBbiBhcnJheSBvZiBvcHRpb25zIHRvIGNob29zZSBmcm9tLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkN0cmxQYXR0ZXJuLlR5cGU9fSAgdHlwZSAgVGhlIG5hbWUgb2YgdGhlIHBhdHRlcm4uXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd2YWx1ZXMnLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLkN0cmxQYXR0ZXJuKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIHZhbHVlcyB0byBhcnBlZ2dpYXRlIG92ZXJcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZhbHVlcyA9IG9wdGlvbnMudmFsdWVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSB2YWx1ZXMgYXJyYXlcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0eXBlIHBsYWNlaG9sZGVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3RybFBhdHRlcm4uVHlwZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHlwZSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2h1ZmZsZWQgdmFsdWVzIGZvciB0aGUgUmFuZG9tT25jZSB0eXBlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRpcmVjdGlvbiBvZiB0aGUgbW92ZW1lbnRcblx0XHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkN0cmxQYXR0ZXJuKTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgQ29udHJvbCBQYXR0ZXJuc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5UeXBlID0ge1xuXHQgICAgICAgIFVwOiAndXAnLFxuXHQgICAgICAgIERvd246ICdkb3duJyxcblx0ICAgICAgICBVcERvd246ICd1cERvd24nLFxuXHQgICAgICAgIERvd25VcDogJ2Rvd25VcCcsXG5cdCAgICAgICAgQWx0ZXJuYXRlVXA6ICdhbHRlcm5hdGVVcCcsXG5cdCAgICAgICAgQWx0ZXJuYXRlRG93bjogJ2FsdGVybmF0ZURvd24nLFxuXHQgICAgICAgIFJhbmRvbTogJ3JhbmRvbScsXG5cdCAgICAgICAgUmFuZG9tV2FsazogJ3JhbmRvbVdhbGsnLFxuXHQgICAgICAgIFJhbmRvbU9uY2U6ICdyYW5kb21PbmNlJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXMuIFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQ3RybFBhdHRlcm4uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3R5cGUnOiBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXAsXG5cdCAgICAgICAgJ3ZhbHVlcyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB2YWx1ZSBhdCB0aGUgY3VycmVudCBpbmRleCBvZiB0aGUgcGF0dGVybi5cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkN0cmxQYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvL3NvbWUgc2FmZWd1YXJkc1xuXHQgICAgICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZXMubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNbMF07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5pbmRleCA9IE1hdGgubWluKHRoaXMuaW5kZXgsIHRoaXMudmFsdWVzLmxlbmd0aCAtIDEpO1xuXHQgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZXNbdGhpcy5pbmRleF07XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZXMubGVuZ3RoICE9PSB0aGlzLl9zaHVmZmxlZC5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaHVmZmxlVmFsdWVzKCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB2YWwgPSB0aGlzLnZhbHVlc1t0aGlzLl9zaHVmZmxlZFt0aGlzLmluZGV4XV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGF0dGVybiB1c2VkIHRvIHNlbGVjdCB0aGUgbmV4dFxuXHRcdCAqICBpdGVtIGZyb20gdGhlIHZhbHVlcyBhcnJheVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge1RvbmUuQ3RybFBhdHRlcm4uVHlwZX1cblx0XHQgKiAgQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ3RybFBhdHRlcm4ucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IG51bGw7XG5cdCAgICAgICAgICAgIC8vdGhlIGZpcnN0IGluZGV4XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXAgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwRG93biB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tT25jZSB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duVXAgfHwgdGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkFsdGVybmF0ZURvd24pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnZhbHVlcy5sZW5ndGggLSAxO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vdGhlIGRpcmVjdGlvblxuXHQgICAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwRG93biB8fCB0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuQWx0ZXJuYXRlVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcDtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93blVwIHx8IHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVEb3duKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvL3JhbmRvbXNcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5SYW5kb21PbmNlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaHVmZmxlVmFsdWVzKCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5SYW5kb20pIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnZhbHVlcy5sZW5ndGgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSBuZXh0IHZhbHVlIGdpdmVuIHRoZSBjdXJyZW50IHBvc2l0aW9uXG5cdFx0ICogIGFuZCBwYXR0ZXJuLlxuXHRcdCAqICBAcmV0dXJuIHsqfSBUaGUgbmV4dCB2YWx1ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0ICAgICAgICAvL2Nob29zZSB0aGUgbmV4dCBpbmRleFxuXHQgICAgICAgIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuRG93bikge1xuXHQgICAgICAgICAgICB0aGlzLmluZGV4LS07XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMudmFsdWVzLmxlbmd0aCAtIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcERvd24gfHwgdHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd25VcCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgtLTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA8IDApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuUmFuZG9tKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnZhbHVlcy5sZW5ndGgpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbVdhbGspIHtcblx0ICAgICAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPCAwLjUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgtLTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLm1heCh0aGlzLmluZGV4LCAwKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXgrKztcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBNYXRoLm1pbih0aGlzLmluZGV4LCB0aGlzLnZhbHVlcy5sZW5ndGggLSAxKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlJhbmRvbU9uY2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA+PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSAwO1xuXHQgICAgICAgICAgICAgICAgLy9yZXNodWZmbGUgdGhlIHZhbHVlcyBmb3IgbmV4dCB0aW1lXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zaHVmZmxlVmFsdWVzKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVVcCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uID09PSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMjtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCAtPSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLlVwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID49IHRoaXMudmFsdWVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5BbHRlcm5hdGVEb3duKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kaXJlY3Rpb24gPT09IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAxO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uID0gVG9uZS5DdHJsUGF0dGVybi5UeXBlLkRvd247XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4IC09IDI7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBUb25lLkN0cmxQYXR0ZXJuLlR5cGUuVXA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy52YWx1ZXMubGVuZ3RoIC0gMTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5Eb3duO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTaHVmZmxlcyB0aGUgdmFsdWVzIGFuZCBwbGFjZXMgdGhlIHJlc3VsdHMgaW50byB0aGUgX3NodWZmbGVkXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxQYXR0ZXJuLnByb3RvdHlwZS5fc2h1ZmZsZVZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgY29weSA9IFtdO1xuXHQgICAgICAgIHRoaXMuX3NodWZmbGVkID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBjb3B5W2ldID0gaTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgd2hpbGUgKGNvcHkubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICB2YXIgcmFuZFZhbCA9IGNvcHkuc3BsaWNlKE1hdGguZmxvb3IoY29weS5sZW5ndGggKiBNYXRoLnJhbmRvbSgpKSwgMSk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NodWZmbGVkLnB1c2gocmFuZFZhbFswXSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DdHJsUGF0dGVybn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUGF0dGVybi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zaHVmZmxlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxQYXR0ZXJuO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIENob29zZSBhIHJhbmRvbSB2YWx1ZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHJhbmRvbVdhbGsgPSBuZXcgVG9uZS5DdHJsUmFuZG9tKHtcblx0XHQgKiBcdFwibWluXCIgOiAwLFxuXHRcdCAqIFx0XCJtYXhcIiA6IDEwLFxuXHRcdCAqIFx0XCJpbnRlZ2VyXCIgOiB0cnVlXG5cdFx0ICogfSk7XG5cdFx0ICogcmFuZG9tV2Fsay5ldmFsKCk7XG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8VGltZT19IG1pbiBUaGUgbWluaW11bSByZXR1cm4gdmFsdWUuXG5cdFx0ICogIEBwYXJhbSB7TnVtYmVyfFRpbWU9fSBtYXggVGhlIG1heGltdW0gcmV0dXJuIHZhbHVlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5DdHJsUmFuZG9tID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ21pbicsXG5cdCAgICAgICAgICAgICdtYXgnXG5cdCAgICAgICAgXSwgVG9uZS5DdHJsUmFuZG9tKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pbmltdW0gcmV0dXJuIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ8VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWluID0gb3B0aW9ucy5taW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1heGltdW0gcmV0dXJuIHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ8VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubWF4ID0gb3B0aW9ucy5tYXg7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSWYgdGhlIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgYW4gaW50ZWdlclxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaW50ZWdlciA9IG9wdGlvbnMuaW50ZWdlcjtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkN0cmxSYW5kb20pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkN0cmxSYW5kb20uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ21pbic6IDAsXG5cdCAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgJ2ludGVnZXInOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm4gYSByYW5kb20gdmFsdWUgYmV0d2VlbiBtaW4gYW5kIG1heC4gXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5DdHJsUmFuZG9tI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkN0cmxSYW5kb20ucHJvdG90eXBlLCAndmFsdWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLnRvU2Vjb25kcyh0aGlzLm1pbik7XG5cdCAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLnRvU2Vjb25kcyh0aGlzLm1heCk7XG5cdCAgICAgICAgICAgIHZhciByYW5kID0gTWF0aC5yYW5kb20oKTtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IHJhbmQgKiBtaW4gKyAoMSAtIHJhbmQpICogbWF4O1xuXHQgICAgICAgICAgICBpZiAodGhpcy5pbnRlZ2VyKSB7XG5cdCAgICAgICAgICAgICAgICB2YWwgPSBNYXRoLmZsb29yKHZhbCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLkN0cmxSYW5kb207XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgQSBkYXRhIHN0cnVjdHVyZSBmb3IgaG9sZGluZyBtdWx0aXBsZSBidWZmZXJzLlxuXHRcdCAqICBcblx0XHQgKiAgQHBhcmFtICB7T2JqZWN0fEFycmF5fSAgICB1cmxzICAgICAgQW4gb2JqZWN0IGxpdGVyYWwgb3IgYXJyYXlcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdXJscyB0byBsb2FkLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbj19ICBjYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVmZmVycyBhcmUgbG9hZGVkLiBcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9sb2FkIGEgd2hvbGUgYmFuayBvZiBwaWFubyBzYW1wbGVzXG5cdFx0ICogdmFyIHBpYW5vU2FtcGxlcyA9IG5ldyBUb25lLkJ1ZmZlcnMoe1xuXHRcdCAqIFx0XCJDNFwiIDogXCJwYXRoL3RvL0M0Lm1wM1wiXG5cdFx0ICogXHRcIkMjNFwiIDogXCJwYXRoL3RvL0MjNC5tcDNcIlxuXHRcdCAqIFx0XCJENFwiIDogXCJwYXRoL3RvL0Q0Lm1wM1wiXG5cdFx0ICogXHRcIkQjNFwiIDogXCJwYXRoL3RvL0QjNC5tcDNcIlxuXHRcdCAqIFx0Li4uXG5cdFx0ICogfSwgZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vcGxheSBvbmUgb2YgdGhlIHNhbXBsZXMgd2hlbiB0aGV5IGFsbCBsb2FkXG5cdFx0ICogXHRwbGF5ZXIuYnVmZmVyID0gcGlhbm9TYW1wbGVzLmdldChcIkM0XCIpO1xuXHRcdCAqIFx0cGxheWVyLnN0YXJ0KCk7XG5cdFx0ICogfSk7XG5cdFx0ICogXHRAZXhhbXBsZVxuXHRcdCAqIC8vVG8gcGFzcyBpbiBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXJcblx0XHQgKiB2YXIgYnVmZmVycyA9IG5ldyBUb25lLkJ1ZmZlcnModXJscywge1xuXHRcdCAqIFx0XCJvbmxvYWRcIiA6IGNhbGxiYWNrLFxuXHRcdCAqIFx0XCJiYXNlVXJsXCIgOiBcIi4uL3BhdGgvdG8vYXVkaW8vXCJcblx0XHQgKiB9KVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzID0gZnVuY3Rpb24gKHVybHMpIHtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgdXJscyBmcm9tIHRoZSBvcHRpb25zXG5cdCAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIGFyZ3Muc2hpZnQoKTtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJncywgW1xuXHQgICAgICAgICAgICAnb25sb2FkJyxcblx0ICAgICAgICAgICAgJ2Jhc2VVcmwnXG5cdCAgICAgICAgXSwgVG9uZS5CdWZmZXJzKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQWxsIG9mIHRoZSBidWZmZXJzXG5cdFx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSB7fTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBIHBhdGggd2hpY2ggaXMgcHJlZml4ZWQgYmVmb3JlIGV2ZXJ5IHVybC5cblx0XHRcdCAqICBAdHlwZSAge1N0cmluZ31cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcblx0ICAgICAgICB0aGlzLl9sb2FkaW5nQ291bnQgPSAwO1xuXHQgICAgICAgIC8vYWRkIGVhY2ggb25lXG5cdCAgICAgICAgZm9yICh2YXIga2V5IGluIHVybHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50Kys7XG5cdCAgICAgICAgICAgIHRoaXMuYWRkKGtleSwgdXJsc1trZXldLCB0aGlzLl9idWZmZXJMb2FkZWQuYmluZCh0aGlzLCBvcHRpb25zLm9ubG9hZCkpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJ1ZmZlcnMpO1xuXHQgICAgLyoqXG5cdFx0ICogIERlZmF1bHRzXG5cdFx0ICogIEB0eXBlICB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2Jhc2VVcmwnOiAnJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcnVlIGlmIHRoZSBidWZmZXJzIG9iamVjdCBoYXMgYSBidWZmZXIgYnkgdGhhdCBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgbmFtZSAgVGhlIGtleSBvciBpbmRleCBvZiB0aGUgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuXG5cdFx0ICogIEByZXR1cm4gIHtCb29sZWFufVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXJzLmhhc093blByb3BlcnR5KG5hbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgYSBidWZmZXIgYnkgbmFtZS4gSWYgYW4gYXJyYXkgd2FzIGxvYWRlZCwgXG5cdFx0ICogIHRoZW4gdXNlIHRoZSBhcnJheSBpbmRleC5cblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfE51bWJlcn0gIG5hbWUgIFRoZSBrZXkgb3IgaW5kZXggb2YgdGhlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJ9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuaGFzKG5hbWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXJzW25hbWVdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJzOiBubyBidWZmZXIgbmFtZWQgJyArIG5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQSBidWZmZXIgd2FzIGxvYWRlZC4gZGVjcmVtZW50IHRoZSBjb3VudGVyLlxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrIFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5fYnVmZmVyTG9hZGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50LS07XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmdDb3VudCA9PT0gMCAmJiBjYWxsYmFjaykge1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSWYgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJzI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVycy5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0xvYWRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGJ1ZmZOYW1lIGluIHRoaXMuX2J1ZmZlcnMpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBidWZmID0gdGhpcy5nZXQoYnVmZk5hbWUpO1xuXHQgICAgICAgICAgICAgICAgaXNMb2FkZWQgPSBpc0xvYWRlZCAmJiBidWZmLmxvYWRlZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gaXNMb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgYnVmZmVyIGJ5IG5hbWUgYW5kIHVybCB0byB0aGUgQnVmZmVyc1xuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICAgIG5hbWUgICAgICBBIHVuaXF1ZSBuYW1lIHRvIGdpdmVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlclxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8VG9uZS5CdWZmZXJ8QXVkaW9idWZmZXJ9ICB1cmwgIEVpdGhlciB0aGUgdXJsIG9mIHRoZSBidWZlciwgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhZGRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVycy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG5hbWUsIHVybCwgY2FsbGJhY2spIHtcblx0ICAgICAgICBjYWxsYmFjayA9IFRvbmUuZGVmYXVsdEFyZyhjYWxsYmFjaywgVG9uZS5ub09wKTtcblx0ICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXSA9IHVybDtcblx0ICAgICAgICAgICAgY2FsbGJhY2sodGhpcyk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh1cmwgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzW25hbWVdID0gbmV3IFRvbmUuQnVmZmVyKHVybCk7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoVG9uZS5pc1N0cmluZyh1cmwpKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnNbbmFtZV0gPSBuZXcgVG9uZS5CdWZmZXIodGhpcy5iYXNlVXJsICsgdXJsLCBjYWxsYmFjayk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyc30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuX2J1ZmZlcnMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYnVmZmVyc1tuYW1lXS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkJ1ZmZlcnM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIGJ1c2VzIGFyZSBhbm90aGVyIHdheSBvZiByb3V0aW5nIGF1ZGlvXG5cdFx0ICpcblx0XHQgKiAgYXVnbWVudHMgVG9uZS5wcm90b3R5cGUgdG8gaW5jbHVkZSBzZW5kIGFuZCByZWNpZXZlXG5cdFx0ICovXG5cdCAgICAvKipcblx0XHQgKiAgQWxsIG9mIHRoZSByb3V0ZXNcblx0XHQgKlxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgQnVzZXMgPSB7fTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZW5kIHRoaXMgc2lnbmFsIHRvIHRoZSBjaGFubmVsIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gY2hhbm5lbE5hbWUgQSBuYW1lZCBjaGFubmVsIHRvIHNlbmQgdGhlIHNpZ25hbCB0by5cblx0XHQgKiAgQHBhcmFtICB7RGVjaWJlbHN9IGFtb3VudCBUaGUgYW1vdW50IG9mIHRoZSBzb3VyY2UgdG8gc2VuZCB0byB0aGUgYnVzLlxuXHRcdCAqICBAcmV0dXJuIHtHYWluTm9kZX0gVGhlIGdhaW4gbm9kZSB3aGljaCBjb25uZWN0cyB0aGlzIG5vZGUgdG8gdGhlIGRlc2lyZWQgY2hhbm5lbC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIENhbiBiZSB1c2VkIHRvIGFkanVzdCB0aGUgbGV2ZWxzIG9mIHRoZSBzZW5kLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHNvdXJjZS5zZW5kKFwicmV2ZXJiXCIsIC0xMik7XG5cdFx0ICovXG5cdCAgICBUb25lLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKGNoYW5uZWxOYW1lLCBhbW91bnQpIHtcblx0ICAgICAgICBpZiAoIUJ1c2VzLmhhc093blByb3BlcnR5KGNoYW5uZWxOYW1lKSkge1xuXHQgICAgICAgICAgICBCdXNlc1tjaGFubmVsTmFtZV0gPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBhbW91bnQgPSBUb25lLmRlZmF1bHRBcmcoYW1vdW50LCAwKTtcblx0ICAgICAgICB2YXIgc2VuZEtub2IgPSBuZXcgVG9uZS5HYWluKGFtb3VudCwgVG9uZS5UeXBlLkRlY2liZWxzKTtcblx0ICAgICAgICB0aGlzLmNvbm5lY3Qoc2VuZEtub2IpO1xuXHQgICAgICAgIHNlbmRLbm9iLmNvbm5lY3QoQnVzZXNbY2hhbm5lbE5hbWVdKTtcblx0ICAgICAgICByZXR1cm4gc2VuZEtub2I7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJlY2lldmUgdGhlIGlucHV0IGZyb20gdGhlIGRlc2lyZWQgY2hhbm5lbE5hbWUgdG8gdGhlIGlucHV0XG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSBjaGFubmVsTmFtZSBBIG5hbWVkIGNoYW5uZWwgdG8gc2VuZCB0aGUgc2lnbmFsIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXI9fSBjaGFubmVsTnVtYmVyIFRoZSBjaGFubmVsIHRvIGNvbm5lY3QgdG9cblx0XHQgKiAgQHJldHVybnMge1RvbmV9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiByZXZlcmJFZmZlY3QucmVjZWl2ZShcInJldmVyYlwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUucHJvdG90eXBlLnJlY2VpdmUgPSBmdW5jdGlvbiAoY2hhbm5lbE5hbWUsIGlucHV0TnVtKSB7XG5cdCAgICAgICAgaWYgKCFCdXNlcy5oYXNPd25Qcm9wZXJ0eShjaGFubmVsTmFtZSkpIHtcblx0ICAgICAgICAgICAgQnVzZXNbY2hhbm5lbE5hbWVdID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgQnVzZXNbY2hhbm5lbE5hbWVdLmNvbm5lY3QodGhpcywgMCwgaW5wdXROdW0pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8vcmVtb3ZlIGFsbCB0aGUgc2VuZC9yZWNlaXZlcyB3aGVuIGEgbmV3IGF1ZGlvIGNvbnRleHQgaXMgcGFzc2VkIGluXG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0LkJ1c2VzKSB7XG5cdCAgICAgICAgICAgIEJ1c2VzID0gY29udGV4dC5CdXNlcztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBCdXNlcyA9IHt9O1xuXHQgICAgICAgICAgICBjb250ZXh0LkJ1c2VzID0gQnVzZXM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gVG9uZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRHJhdyBpcyB1c2VmdWwgZm9yIHN5bmNocm9uaXppbmcgdmlzdWFscyBhbmQgYXVkaW8gZXZlbnRzLlxuXHRcdCAqICAgICAgICAgQ2FsbGJhY2tzIGZyb20gVG9uZS5UcmFuc3BvcnQgb3IgYW55IG9mIHRoZSBUb25lLkV2ZW50IGNsYXNzZXNcblx0XHQgKiAgICAgICAgIGFsd2F5cyBoYXBwZW4gX2JlZm9yZV8gdGhlIHNjaGVkdWxlZCB0aW1lIGFuZCBhcmUgbm90IHN5bmNocm9uaXplZFxuXHRcdCAqICAgICAgICAgdG8gdGhlIGFuaW1hdGlvbiBmcmFtZSBzbyB0aGV5IGFyZSBub3QgZ29vZCBmb3IgdHJpZ2dlcmluZyB0aWdodGx5XG5cdFx0ICogICAgICAgICBzeW5jaHJvbml6ZWQgdmlzdWFscyBhbmQgc291bmQuIFRvbmUuRHJhdyBtYWtlcyBpdCBlYXN5IHRvIHNjaGVkdWxlXG5cdFx0ICogICAgICAgICBjYWxsYmFja3MgdXNpbmcgdGhlIEF1ZGlvQ29udGV4dCB0aW1lIGFuZCB1c2VzIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cblx0XHQgKiAgICAgICAgIFxuXHRcdCAqICBAc2luZ2xldG9uXG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKGZ1bmN0aW9uKHRpbWUpe1xuXHRcdCAqIFx0Ly91c2UgdGhlIHRpbWUgYXJndW1lbnQgdG8gc2NoZWR1bGUgYSBjYWxsYmFjayB3aXRoIFRvbmUuRHJhd1xuXHRcdCAqIFx0VG9uZS5EcmF3LnNjaGVkdWxlKGZ1bmN0aW9uKCl7XG5cdFx0ICogXHRcdC8vZG8gZHJhd2luZyBvciBET00gbWFuaXB1bGF0aW9uIGhlcmVcblx0XHQgKiBcdH0sIHRpbWUpXG5cdFx0ICogfSwgXCIrMC41XCIpXG5cdFx0ICovXG5cdCAgICBUb25lLkRyYXcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFsbCBvZiB0aGUgZXZlbnRzLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5UaW1lbGluZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFRvbmUuVGltZWxpbmUoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZHVyYXRpb24gYWZ0ZXIgd2hpY2ggZXZlbnRzIGFyZSBub3QgaW52b2tlZC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAZGVmYXVsdCAwLjI1XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmV4cGlyYXRpb24gPSAwLjI1O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgdGltZSBiZWZvcmUgdGhlIHNjaGVkdWxlZCB0aW1lIFxuXHRcdFx0ICogIHRoYXQgdGhlIGNhbGxiYWNrIGNhbiBiZSBpbnZva2VkLiBEZWZhdWx0IGlzXG5cdFx0XHQgKiAgaGFsZiB0aGUgdGltZSBvZiBhbiBhbmltYXRpb24gZnJhbWUgKDAuMDA4IHNlY29uZHMpLlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBkZWZhdWx0IDAuMDA4XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmFudGljaXBhdGlvbiA9IDAuMDA4O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkcmF3IGxvb3Bcblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9ib3VuZERyYXdMb29wID0gdGhpcy5fZHJhd0xvb3AuYmluZCh0aGlzKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkRyYXcpO1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlIGEgZnVuY3Rpb24gYXQgdGhlIGdpdmVuIHRpbWUgdG8gYmUgaW52b2tlZFxuXHRcdCAqICBvbiB0aGUgbmVhcmVzdCBhbmltYXRpb24gZnJhbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIENhbGxiYWNrIGlzIGludm9rZWQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICAgIHRpbWUgICAgICBUaGUgdGltZSByZWxhdGl2ZSB0byB0aGUgQXVkaW9Db250ZXh0IHRpbWVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGludm9rZSB0aGUgY2FsbGJhY2suXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkRyYXd9ICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdy5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuYWRkKHtcblx0ICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuXHQgICAgICAgICAgICB0aW1lOiB0aGlzLnRvU2Vjb25kcyh0aW1lKVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIGRyYXcgbG9vcCBvbiB0aGUgZmlyc3QgZXZlbnRcblx0ICAgICAgICBpZiAodGhpcy5fZXZlbnRzLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYm91bmREcmF3TG9vcCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgZXZlbnRzIHNjaGVkdWxlZCBhZnRlciB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gIGFmdGVyICBUaW1lIGFmdGVyIHdoaWNoIHNjaGVkdWxlZCBldmVudHMgd2lsbCBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzY2hlZHVsaW5nIHRpbWVsaW5lLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5EcmF3fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EcmF3LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudHMuY2FuY2VsKHRoaXMudG9TZWNvbmRzKGFmdGVyKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkcmF3IGxvb3Bcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRHJhdy5wcm90b3R5cGUuX2RyYXdMb29wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBub3cgPSBUb25lLm5vdygpO1xuXHQgICAgICAgIHdoaWxlICh0aGlzLl9ldmVudHMubGVuZ3RoICYmIHRoaXMuX2V2ZW50cy5wZWVrKCkudGltZSAtIHRoaXMuYW50aWNpcGF0aW9uIDw9IG5vdykge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHMuc2hpZnQoKTtcblx0ICAgICAgICAgICAgaWYgKG5vdyAtIGV2ZW50LnRpbWUgPD0gdGhpcy5leHBpcmF0aW9uKSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5jYWxsYmFjaygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYm91bmREcmF3TG9vcCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8vbWFrZSBhIHNpbmdsZXRvblxuXHQgICAgVG9uZS5EcmF3ID0gbmV3IFRvbmUuRHJhdygpO1xuXHQgICAgcmV0dXJuIFRvbmUuRHJhdztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCb3RoIFRvbmUuUGFubmVyM0QgYW5kIFRvbmUuTGlzdGVuZXIgaGF2ZSBhIHBvc2l0aW9uIGluIDNEIHNwYWNlXG5cdFx0ICogICAgICAgICAgdXNpbmcgYSByaWdodC1oYW5kZWQgY2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtLlxuXHRcdCAqICAgICAgICAgIFRoZSB1bml0cyB1c2VkIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBhcmUgbm90IGRlZmluZWQ7XG5cdFx0ICogICAgICAgICAgdGhlc2UgY29vcmRpbmF0ZXMgYXJlIGluZGVwZW5kZW50L2ludmFyaWFudCBvZiBhbnkgcGFydGljdWxhclxuXHRcdCAqICAgICAgICAgIHVuaXRzIHN1Y2ggYXMgbWV0ZXJzIG9yIGZlZXQuIFRvbmUuUGFubmVyM0Qgb2JqZWN0cyBoYXZlIGFuIGZvcndhcmRcblx0XHQgKiAgICAgICAgICB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBkaXJlY3Rpb24gdGhlIHNvdW5kIGlzIHByb2plY3RpbmcuIEFkZGl0aW9uYWxseSxcblx0XHQgKiAgICAgICAgICB0aGV5IGhhdmUgYSBzb3VuZCBjb25lIHJlcHJlc2VudGluZyBob3cgZGlyZWN0aW9uYWwgdGhlIHNvdW5kIGlzLlxuXHRcdCAqICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgc291bmQgY291bGQgYmUgb21uaWRpcmVjdGlvbmFsLCBpbiB3aGljaCBjYXNlIGl0IHdvdWxkXG5cdFx0ICogICAgICAgICAgYmUgaGVhcmQgYW55d2hlcmUgcmVnYXJkbGVzcyBvZiBpdHMgZm9yd2FyZCwgb3IgaXQgY2FuIGJlIG1vcmUgZGlyZWN0aW9uYWxcblx0XHQgKiAgICAgICAgICBhbmQgaGVhcmQgb25seSBpZiBpdCBpcyBmYWNpbmcgdGhlIGxpc3RlbmVyLiBUb25lLkxpc3RlbmVyIG9iamVjdHNcblx0XHQgKiAgICAgICAgICAocmVwcmVzZW50aW5nIGEgcGVyc29uJ3MgZWFycykgaGF2ZSBhbiBmb3J3YXJkIGFuZCB1cCB2ZWN0b3Jcblx0XHQgKiAgICAgICAgICByZXByZXNlbnRpbmcgaW4gd2hpY2ggZGlyZWN0aW9uIHRoZSBwZXJzb24gaXMgZmFjaW5nLiBCZWNhdXNlIGJvdGggdGhlXG5cdFx0ICogICAgICAgICAgc291cmNlIHN0cmVhbSBhbmQgdGhlIGxpc3RlbmVyIGNhbiBiZSBtb3ZpbmcsIHRoZXkgYm90aCBoYXZlIGEgdmVsb2NpdHlcblx0XHQgKiAgICAgICAgICB2ZWN0b3IgcmVwcmVzZW50aW5nIGJvdGggdGhlIHNwZWVkIGFuZCBkaXJlY3Rpb24gb2YgbW92ZW1lbnQuIFRha2VuIHRvZ2V0aGVyLFxuXHRcdCAqICAgICAgICAgIHRoZXNlIHR3byB2ZWxvY2l0aWVzIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgZG9wcGxlciBzaGlmdCBlZmZlY3Qgd2hpY2ggY2hhbmdlcyB0aGUgcGl0Y2guXG5cdFx0ICogICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgICBOb3RlOiB0aGUgcG9zaXRpb24gb2YgdGhlIExpc3RlbmVyIHdpbGwgaGF2ZSBubyBlZmZlY3Qgb24gbm9kZXMgbm90IGNvbm5lY3RlZCB0byBhIFRvbmUuUGFubmVyM0Rcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBzaW5nbGV0b25cblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEhvbGRzIHRoZSBjdXJyZW50IGZvcndhcmQgb3JpZW50YXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vcmllbnRhdGlvbiA9IFtcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMFxuXHQgICAgICAgIF07XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZHMgdGhlIGN1cnJlbnQgcG9zaXRpb25cblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IFtcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMCxcblx0ICAgICAgICAgICAgMFxuXHQgICAgICAgIF07XG5cdCAgICAgICAgVG9uZS5nZXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gc2V0IHRoZSBkZWZhdWx0IHBvc2l0aW9uL2ZvcndhcmRcblx0ICAgICAgICAgICAgdGhpcy5zZXQoTGlzdGVuZXJDb25zdHJ1Y3Rvci5kZWZhdWx0cyk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxpc3RlbmVyKTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZWZhdWx0cyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb25cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Bvc2l0aW9uWCc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWSc6IDAsXG5cdCAgICAgICAgJ3Bvc2l0aW9uWic6IDAsXG5cdCAgICAgICAgJ2ZvcndhcmRYJzogMCxcblx0ICAgICAgICAnZm9yd2FyZFknOiAwLFxuXHQgICAgICAgICdmb3J3YXJkWic6IDEsXG5cdCAgICAgICAgJ3VwWCc6IDAsXG5cdCAgICAgICAgJ3VwWSc6IDEsXG5cdCAgICAgICAgJ3VwWic6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcmFtcCB0aW1lIHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIHNldFRhcmdldEF0VGltZVxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLl9yYW1wVGltZUNvbnN0YW50ID0gMC4wMTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGlzdGVuZXIgaW4gM2Qgc3BhY2UuXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEByZXR1cm4ge1RvbmUuTGlzdGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24gKHgsIHksIHopIHtcblx0ICAgICAgICBpZiAodGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWCkge1xuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWC5zZXRUYXJnZXRBdFRpbWUoeCwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnBvc2l0aW9uWi5zZXRUYXJnZXRBdFRpbWUoeiwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuc2V0UG9zaXRpb24oeCwgeSwgeik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGxpc3RlbmVyIHVzaW5nIHR3byB2ZWN0b3JzLCB0aGUgZm9yd2FyZFxuXHRcdCAqICB2ZWN0b3IgKHdoaWNoIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgZmFjaW5nKSBhbmQgdGhlIHVwIHZlY3RvclxuXHRcdCAqICAod2hpY2ggdGhlIHVwIGRpcmVjdGlvbiBvZiB0aGUgbGlzdGVuZXIpLiBBbiB1cCB2ZWN0b3Jcblx0XHQgKiAgb2YgMCwgMCwgMSBpcyBlcXVpdmFsZW50IHRvIHRoZSBsaXN0ZW5lciBzdGFuZGluZyB1cCBpbiB0aGUgWiBkaXJlY3Rpb24uXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHhcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgeVxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB6XG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHVwWFxuXHRcdCAqICBAcGFyYW0gIHtOdW1iZXJ9ICB1cFlcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdXBaXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuTGlzdGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLnNldE9yaWVudGF0aW9uID0gZnVuY3Rpb24gKHgsIHksIHosIHVwWCwgdXBZLCB1cFopIHtcblx0ICAgICAgICBpZiAodGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRYKSB7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIuZm9yd2FyZFguc2V0VGFyZ2V0QXRUaW1lKHgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5mb3J3YXJkWS5zZXRUYXJnZXRBdFRpbWUoeSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLmZvcndhcmRaLnNldFRhcmdldEF0VGltZSh6LCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgICAgICB0aGlzLmNvbnRleHQubGlzdGVuZXIudXBYLnNldFRhcmdldEF0VGltZSh1cFgsIG5vdywgdGhpcy5fcmFtcFRpbWVDb25zdGFudCk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci51cFkuc2V0VGFyZ2V0QXRUaW1lKHVwWSwgbm93LCB0aGlzLl9yYW1wVGltZUNvbnN0YW50KTtcblx0ICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmxpc3RlbmVyLnVwWi5zZXRUYXJnZXRBdFRpbWUodXBaLCBub3csIHRoaXMuX3JhbXBUaW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5saXN0ZW5lci5zZXRPcmllbnRhdGlvbih4LCB5LCB6LCB1cFgsIHVwWSwgdXBaKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgcGFubmVyIG9iamVjdC5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHBvc2l0aW9uWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAncG9zaXRpb25YJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblswXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9wb3NpdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uWzBdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IHBvc2l0aW9uIG9mIHRoZSBwYW5uZXIgb2JqZWN0LlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgcG9zaXRpb25ZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdwb3NpdGlvblknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uWzFdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX3Bvc2l0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25bMV07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogcG9zaXRpb24gb2YgdGhlIHBhbm5lciBvYmplY3QuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBwb3NpdGlvblpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3Bvc2l0aW9uWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24uYXBwbHkodGhpcywgdGhpcy5fcG9zaXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcnMgZnJvbnQgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHdoaWNoIHdheSB0aGV5IGFyZSBmYWNpbmcuXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSBmb3J3YXJkWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAnZm9yd2FyZFgnLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzBdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bMF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXJzIGZyb250IGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB3aGljaCB3YXkgdGhleSBhcmUgZmFjaW5nLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgZm9yd2FyZFlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ2ZvcndhcmRZJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblsxXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzFdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB6IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVycyBmcm9udCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgd2hpY2ggd2F5IHRoZXkgYXJlIGZhY2luZy5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIGZvcndhcmRaXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICdmb3J3YXJkWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bMl0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvblsyXTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBsaXN0ZW5lcidzIHVwIGRpcmVjdGlvbi4gaS5lLlxuXHRcdCAqICB0aGUgZGlyZWN0aW9uIHRoZSBsaXN0ZW5lciBpcyBzdGFuZGluZyBpbi5cblx0XHQgKiAgQHR5cGUge051bWJlcn1cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTGlzdGVuZXIjXG5cdFx0ICogIEBuYW1lIHVwWFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLCAndXBYJywge1xuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBvcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmllbnRhdGlvblszXSA9IHBvcztcblx0ICAgICAgICAgICAgdGhpcy5zZXRPcmllbnRhdGlvbi5hcHBseSh0aGlzLCB0aGlzLl9vcmllbnRhdGlvbik7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uWzNdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxpc3RlbmVyJ3MgdXAgZGlyZWN0aW9uLiBpLmUuXG5cdFx0ICogIHRoZSBkaXJlY3Rpb24gdGhlIGxpc3RlbmVyIGlzIHN0YW5kaW5nIGluLlxuXHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5MaXN0ZW5lciNcblx0XHQgKiAgQG5hbWUgdXBZXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5MaXN0ZW5lci5wcm90b3R5cGUsICd1cFknLCB7XG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocG9zKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uWzRdID0gcG9zO1xuXHQgICAgICAgICAgICB0aGlzLnNldE9yaWVudGF0aW9uLmFwcGx5KHRoaXMsIHRoaXMuX29yaWVudGF0aW9uKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb25bNF07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHogY29vcmRpbmF0ZSBvZiB0aGUgbGlzdGVuZXIncyB1cCBkaXJlY3Rpb24uIGkuZS5cblx0XHQgKiAgdGhlIGRpcmVjdGlvbiB0aGUgbGlzdGVuZXIgaXMgc3RhbmRpbmcgaW4uXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxpc3RlbmVyI1xuXHRcdCAqICBAbmFtZSB1cFpcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxpc3RlbmVyLnByb3RvdHlwZSwgJ3VwWicsIHtcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwb3MpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25bNV0gPSBwb3M7XG5cdCAgICAgICAgICAgIHRoaXMuc2V0T3JpZW50YXRpb24uYXBwbHkodGhpcywgdGhpcy5fb3JpZW50YXRpb24pO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vcmllbnRhdGlvbls1XTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTGlzdGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTGlzdGVuZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fb3JpZW50YXRpb24gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvL1NJTkdMRVRPTiBTRVRVUFxuXHQgICAgdmFyIExpc3RlbmVyQ29uc3RydWN0b3IgPSBUb25lLkxpc3RlbmVyO1xuXHQgICAgVG9uZS5MaXN0ZW5lciA9IG5ldyBMaXN0ZW5lckNvbnN0cnVjdG9yKCk7XG5cdCAgICBUb25lLkNvbnRleHQub24oJ2luaXQnLCBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAgIGlmIChjb250ZXh0Lkxpc3RlbmVyIGluc3RhbmNlb2YgTGlzdGVuZXJDb25zdHJ1Y3Rvcikge1xuXHQgICAgICAgICAgICAvL2Egc2luZ2xlIGxpc3RlbmVyIG9iamVjdFxuXHQgICAgICAgICAgICBUb25lLkxpc3RlbmVyID0gY29udGV4dC5MaXN0ZW5lcjtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvL21ha2UgbmV3IExpc3RlbmVyIGluc2lkZXNcblx0ICAgICAgICAgICAgVG9uZS5MaXN0ZW5lciA9IG5ldyBMaXN0ZW5lckNvbnN0cnVjdG9yKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGNvbnRleHQuTGlzdGVuZXIgPSBUb25lLkxpc3RlbmVyO1xuXHQgICAgfSk7XG5cdCAgICAvL0VORCBTSU5HTEVUT04gU0VUVVBcblx0ICAgIHJldHVybiBUb25lLkxpc3RlbmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBCZWNhdXNlIG9mIGEgYnVnIGluIGlPUyBjYXVzaW5nIHRoZSBjdXJyZW50VGltZSB0byBpbmNyZW1lbnRcblx0XHQgKiBiZWZvcmUgdGhlIHJlbmRlcmluZyBpcyBzdGFydGVkLCBzb21ldGltZXMgaXQgdGFrZXMgbXVsdGlwbGVcblx0XHQgKiBhdHRlbXB0cyB0byByZW5kZXIgdGhlIGF1ZGlvIGNvcnJlY3RseS5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgZnVuY3Rpb24gYXR0ZW1wdFJlbmRlcihjYWxsYmFjaywgZHVyYXRpb24sIHNhbXBsZVJhdGUsIHRyaWVzKSB7XG5cdCAgICAgICAgdHJpZXMgPSBUb25lLmRlZmF1bHRBcmcodHJpZXMsIDApO1xuXHQgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IFRvbmUuT2ZmbGluZUNvbnRleHQoMiwgZHVyYXRpb24sIHNhbXBsZVJhdGUpO1xuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IGNvbnRleHQ7XG5cdCAgICAgICAgLy9pbnZva2UgdGhlIGNhbGxiYWNrL3NjaGVkdWxpbmdcblx0ICAgICAgICB2YXIgcmVzcG9uc2UgPSBjYWxsYmFjayhUb25lLlRyYW5zcG9ydCk7XG5cdCAgICAgICAgaWYgKGNvbnRleHQuY3VycmVudFRpbWUgPiAwICYmIHRyaWVzIDwgMTAwMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gYXR0ZW1wdFJlbmRlcihjYWxsYmFjaywgZHVyYXRpb24sIHNhbXBsZVJhdGUsICsrdHJpZXMpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgICAgICAncmVzcG9uc2UnOiByZXNwb25zZSxcblx0ICAgICAgICAgICAgICAgICdjb250ZXh0JzogY29udGV4dFxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0ICAgIC8qKlxuXHRcdCAqICBHZW5lcmF0ZSBhIGJ1ZmZlciBieSByZW5kZXJpbmcgYWxsIG9mIHRoZSBUb25lLmpzIGNvZGUgd2l0aGluIHRoZSBjYWxsYmFjayB1c2luZyB0aGUgT2ZmbGluZUF1ZGlvQ29udGV4dC5cblx0XHQgKiAgVGhlIE9mZmxpbmVBdWRpb0NvbnRleHQgaXMgY2FwYWJsZSBvZiByZW5kZXJpbmcgbXVjaCBmYXN0ZXIgdGhhbiByZWFsIHRpbWUgaW4gbWFueSBjYXNlcy5cblx0XHQgKiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFsc28gcGFzc2VzIGluIGFuIG9mZmxpbmUgaW5zdGFuY2Ugb2YgVG9uZS5UcmFuc3BvcnQgd2hpY2ggY2FuIGJlIHVzZWRcblx0XHQgKiAgdG8gc2NoZWR1bGUgZXZlbnRzIGFsb25nIHRoZSBUcmFuc3BvcnQuICoqTk9URSoqIE9mZmxpbmVBdWRpb0NvbnRleHQgaGFzIHRoZSBzYW1lIHJlc3RyaWN0aW9uc1xuXHRcdCAqICBhcyB0aGUgQXVkaW9Db250ZXh0IGluIHRoYXQgb24gY2VydGFpbiBwbGF0Zm9ybXMgKGxpa2UgaU9TKSBpdCBtdXN0IGJlIGludm9rZWQgYnkgYW4gZXhwbGljaXRcblx0XHQgKiAgdXNlciBhY3Rpb24gbGlrZSBhIGNsaWNrIG9yIHRhcC4gXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgIEFsbCBUb25lLmpzIG5vZGVzIHdoaWNoIGFyZSBjcmVhdGVkIGFuZCBzY2hlZHVsZWQgd2l0aGluIHRoaXMgY2FsbGJhY2sgYXJlIHJlY29yZGVkIGludG8gdGhlIG91dHB1dCBCdWZmZXIuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICBkdXJhdGlvbiAgICAgdGhlIGFtb3VudCBvZiB0aW1lIHRvIHJlY29yZCBmb3IuXG5cdFx0ICogIEByZXR1cm4gIHtQcm9taXNlfSAgVGhlIHByb21pc2Ugd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBUb25lLkJ1ZmZlciBvZiB0aGUgcmVjb3JkZWQgb3V0cHV0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vcmVuZGVyIDIgc2Vjb25kcyBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqIFRvbmUuT2ZmbGluZShmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly9vbmx5IG5vZGVzIGNyZWF0ZWQgaW4gdGhpcyBjYWxsYmFjayB3aWxsIGJlIHJlY29yZGVkXG5cdFx0ICogXHR2YXIgb3NjaWxsYXRvciA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS50b01hc3RlcigpLnN0YXJ0KDApXG5cdFx0ICogXHQvL3NjaGVkdWxlIHRoZWlyIGV2ZW50c1xuXHRcdCAqIH0sIDIpLnRoZW4oZnVuY3Rpb24oYnVmZmVyKXtcblx0XHQgKiBcdC8vZG8gc29tZXRoaW5nIHdpdGggdGhlIG91dHB1dCBidWZmZXJcblx0XHQgKiB9KVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogLy9jYW4gYWxzbyBzY2hlZHVsZSBldmVudHMgYWxvbmcgdGhlIFRyYW5zcG9ydFxuXHRcdCAqIC8vdXNpbmcgdGhlIHBhc3NlZCBpbiBPZmZsaW5lIFRyYW5zcG9ydFxuXHRcdCAqIFRvbmUuT2ZmbGluZShmdW5jdGlvbihUcmFuc3BvcnQpe1xuXHRcdCAqIFx0dmFyIG9zYyA9IG5ldyBUb25lLk9zY2lsbGF0b3IoKS50b01hc3RlcigpXG5cdFx0ICogXHRUcmFuc3BvcnQuc2NoZWR1bGUoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHRcdG9zYy5zdGFydCh0aW1lKS5zdG9wKHRpbWUgKyAwLjEpXG5cdFx0ICogXHR9LCAxKVxuXHRcdCAqIFx0VHJhbnNwb3J0LnN0YXJ0KDAuMilcblx0XHQgKiB9LCA0KS50aGVuKGZ1bmN0aW9uKGJ1ZmZlcil7XG5cdFx0ICogXHQvL2RvIHNvbWV0aGluZyB3aXRoIHRoZSBvdXRwdXQgYnVmZmVyXG5cdFx0ICogfSlcblx0XHQgKi9cblx0ICAgIFRvbmUuT2ZmbGluZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgZHVyYXRpb24pIHtcblx0ICAgICAgICAvL3NldCB0aGUgT2ZmbGluZUF1ZGlvQ29udGV4dFxuXHQgICAgICAgIHZhciBzYW1wbGVSYXRlID0gVG9uZS5jb250ZXh0LnNhbXBsZVJhdGU7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsQ29udGV4dCA9IFRvbmUuY29udGV4dDtcblx0ICAgICAgICB2YXIgcmVuZGVyUmV0ID0gYXR0ZW1wdFJlbmRlcihjYWxsYmFjaywgZHVyYXRpb24sIHNhbXBsZVJhdGUpO1xuXHQgICAgICAgIHZhciByZXNwb25zZSA9IHJlbmRlclJldC5yZXNwb25zZTtcblx0ICAgICAgICB2YXIgY29udGV4dCA9IHJlbmRlclJldC5jb250ZXh0O1xuXHQgICAgICAgIHZhciByZXQ7XG5cdCAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHQgICAgICAgICAgICAvL3dhaXQgZm9yIHRoZSBwcm9taXNlIHRvIHJlc29sdmVcblx0ICAgICAgICAgICAgcmV0ID0gcmVzcG9uc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAvL3RoZW4gcmVuZGVyIHRoZSBhdWRpb1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQucmVuZGVyKCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vcHJvY2VzcyB0aGUgYXVkaW9cblx0ICAgICAgICAgICAgcmV0ID0gY29udGV4dC5yZW5kZXIoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9yZXR1cm4gdGhlIG9yaWdpbmFsIEF1ZGlvQ29udGV4dFxuXHQgICAgICAgIFRvbmUuY29udGV4dCA9IG9yaWdpbmFsQ29udGV4dDtcblx0ICAgICAgICAvL3JldHVybiB0aGUgYXVkaW9cblx0ICAgICAgICByZXR1cm4gcmV0LnRoZW4oZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICAvL3dyYXAgaXQgaW4gYSBUb25lLkJ1ZmZlclxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuQnVmZmVyKGJ1ZmZlcik7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuT2ZmbGluZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiBcdEBjbGFzcyAgVG9uZS5FZmZlY3QgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGVmZmVjdHMuIENvbm5lY3QgdGhlIGVmZmVjdCBiZXR3ZWVuXG5cdFx0ICogXHQgICAgICAgIHRoZSBlZmZlY3RTZW5kIGFuZCBlZmZlY3RSZXR1cm4gR2Fpbk5vZGVzLCB0aGVuIGNvbnRyb2wgdGhlIGFtb3VudCBvZlxuXHRcdCAqIFx0ICAgICAgICBlZmZlY3Qgd2hpY2ggZ29lcyB0byB0aGUgb3V0cHV0IHVzaW5nIHRoZSB3ZXQgY29udHJvbC5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfE9iamVjdH0gW3dldF0gVGhlIHN0YXJ0aW5nIHdldCB2YWx1ZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnd2V0J10sIFRvbmUuRWZmZWN0KTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY3JlYXRlSW5zT3V0cygxLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZHJ5d2V0IGtub2IgdG8gY29udHJvbCB0aGUgYW1vdW50IG9mIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkNyb3NzRmFkZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0ID0gbmV3IFRvbmUuQ3Jvc3NGYWRlKG9wdGlvbnMud2V0KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgd2V0IGNvbnRyb2wgaXMgaG93IG11Y2ggb2YgdGhlIGVmZmVjdGVkXG5cdFx0XHQgKiAgd2lsbCBwYXNzIHRocm91Z2ggdG8gdGhlIG91dHB1dC4gMSA9IDEwMCUgZWZmZWN0ZWRcblx0XHRcdCAqICBzaWduYWwsIDAgPSAxMDAlIGRyeSBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2V0ID0gdGhpcy5fZHJ5V2V0LmZhZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29ubmVjdCB0aGUgZWZmZWN0U2VuZCB0byB0aGUgaW5wdXQgb2YgaHRlIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBjb25uZWN0IHRoZSBvdXRwdXQgb2YgdGhlIGVmZmVjdCB0byB0aGUgZWZmZWN0UmV0dXJuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4gPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuaW5wdXQuY29ubmVjdCh0aGlzLl9kcnlXZXQuYSk7XG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuZWZmZWN0U2VuZCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4uY29ubmVjdCh0aGlzLl9kcnlXZXQuYik7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnd2V0J10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRWZmZWN0LCBUb25lLkF1ZGlvTm9kZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FZmZlY3QuZGVmYXVsdHMgPSB7ICd3ZXQnOiAxIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2hhaW5zIHRoZSBlZmZlY3QgaW4gYmV0d2VlbiB0aGUgZWZmZWN0U2VuZCBhbmQgZWZmZWN0UmV0dXJuXG5cdFx0ICogIEBwYXJhbSAge1RvbmV9IGVmZmVjdFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5FZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5jb25uZWN0RWZmZWN0ID0gZnVuY3Rpb24gKGVmZmVjdCkge1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbihlZmZlY3QsIHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkVmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWyd3ZXQnXSk7XG5cdCAgICAgICAgdGhpcy53ZXQgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkVmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuQXV0b0ZpbHRlciBpcyBhIFRvbmUuRmlsdGVyIHdpdGggYSBUb25lLkxGTyBjb25uZWN0ZWQgdG8gdGhlIGZpbHRlciBjdXRvZmYgZnJlcXVlbmN5LlxuXHRcdCAqICAgICAgICAgU2V0dGluZyB0aGUgTEZPIHJhdGUgYW5kIGRlcHRoIGFsbG93cyBmb3IgY29udHJvbCBvdmVyIHRoZSBmaWx0ZXIgbW9kdWxhdGlvbiByYXRlIFxuXHRcdCAqICAgICAgICAgYW5kIGRlcHRoLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtmcmVxdWVuY3ldIFRoZSByYXRlIG9mIHRoZSBMRk8uXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5PX0gYmFzZUZyZXF1ZW5jeSBUaGUgbG93ZXIgdmFsdWUgb2YgdGhlIExGT3Mgb3NjaWxsYXRpb25cblx0IFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5PX0gb2N0YXZlcyBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgYWJvdmUgdGhlIGJhc2VGcmVxdWVuY3lcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhbiBhdXRvZmlsdGVyIGFuZCBzdGFydCBpdCdzIExGT1xuXHRcdCAqIHZhciBhdXRvRmlsdGVyID0gbmV3IFRvbmUuQXV0b0ZpbHRlcihcIjRuXCIpLnRvTWFzdGVyKCkuc3RhcnQoKTtcblx0XHQgKiAvL3JvdXRlIGFuIG9zY2lsbGF0b3IgdGhyb3VnaCB0aGUgZmlsdGVyIGFuZCBzdGFydCBpdFxuXHRcdCAqIHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QoYXV0b0ZpbHRlcikuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdvY3RhdmVzJ1xuXHQgICAgICAgIF0sIFRvbmUuQXV0b0ZpbHRlcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGRyaXZlcyB0aGUgZmlsdGVyIGN1dG9mZlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnYW1wbGl0dWRlJzogb3B0aW9ucy5kZXB0aFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHJhbmdlIG9mIHRoZSBmaWx0ZXIgbW9kdWxhdGluZyBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCBmcmVxdWVuY3kuIFxuXHRcdFx0ICogMCA9IG5vIG1vZHVsYXRpb24uIDEgPSBmdWxsIG1vZHVsYXRpb24uXG5cdFx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlcHRoID0gdGhpcy5fbGZvLmFtcGxpdHVkZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIEhvdyBmYXN0IHRoZSBmaWx0ZXIgbW9kdWxhdGVzIGJldHdlZW4gbWluIGFuZCBtYXguIFxuXHRcdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlsdGVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG5ldyBUb25lLkZpbHRlcihvcHRpb25zLmZpbHRlcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9jdGF2ZXMgcGxhY2Vob2xkZXJcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSAwO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5maWx0ZXIpO1xuXHQgICAgICAgIHRoaXMuX2xmby5jb25uZWN0KHRoaXMuZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgdGhpcy5iYXNlRnJlcXVlbmN5ID0gb3B0aW9ucy5iYXNlRnJlcXVlbmN5O1xuXHQgICAgfTtcblx0ICAgIC8vZXh0ZW5kIEVmZmVjdFxuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdXRvRmlsdGVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdHNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdkZXB0aCc6IDEsXG5cdCAgICAgICAgJ2Jhc2VGcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAyLjYsXG5cdCAgICAgICAgJ2ZpbHRlcic6IHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnbG93cGFzcycsXG5cdCAgICAgICAgICAgICdyb2xsb2ZmJzogLTEyLFxuXHQgICAgICAgICAgICAnUSc6IDFcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3RhcnQgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RhcnQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIHRoZSBlZmZlY3QuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIExGTyB3aWxsIHN0b3AuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0b3AodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgZmlsdGVyIHRvIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbZGVsYXk9MF0gRGVsYXkgdGltZSBiZWZvcmUgc3RhcnRpbmcgdGhlIGVmZmVjdCBhZnRlciB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgaGFzIHN0YXJ0ZWQuIFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9GaWx0ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b0ZpbHRlci5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uIChkZWxheSkge1xuXHQgICAgICAgIHRoaXMuX2xmby5zeW5jKGRlbGF5KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBVbnN5bmMgdGhlIGZpbHRlciBmcm9tIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS51bnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnVuc3luYygpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFR5cGUgb2Ygb3NjaWxsYXRvciBhdHRhY2hlZCB0byB0aGUgQXV0b0ZpbHRlci4gXG5cdFx0ICogUG9zc2libGUgdmFsdWVzOiBcInNpbmVcIiwgXCJzcXVhcmVcIiwgXCJ0cmlhbmdsZVwiLCBcInNhd3Rvb3RoXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b0ZpbHRlciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9GaWx0ZXIucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmby50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8udHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgZmlsdGVyJ3MgY3V0b2ZmIGZyZXF1ZW5jeS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0ICogQG5hbWUgbWluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8ubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm8ubWluID0gdGhpcy50b0ZyZXF1ZW5jeShmcmVxKTtcblx0ICAgICAgICAgICAgLy9hbmQgc2V0IHRoZSBtYXhcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBmaWx0ZXIncyBjdXRvZmYgZnJlcXVlbmN5LiBcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BdXRvRmlsdGVyI1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3Q7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby5tYXggPSB0aGlzLmJhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCBvY3QpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvRmlsdGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGZvLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm8gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdXRvRmlsdGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BdXRvUGFubmVyIGlzIGEgVG9uZS5QYW5uZXIgd2l0aCBhbiBMRk8gY29ubmVjdGVkIHRvIHRoZSBwYW4gYW1vdW50LiBcblx0XHQgKiAgICAgICAgIE1vcmUgb24gdXNpbmcgYXV0b3Bhbm5lcnMgW2hlcmVdKGh0dHBzOi8vd3d3LmFibGV0b24uY29tL2VuL2Jsb2cvYXV0b3Bhbi1jaG9wcGVyLWVmZmVjdC1hbmQtbW9yZS1saXZlc2Nob29sLykuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBSYXRlIG9mIGxlZnQtcmlnaHQgb3NjaWxsYXRpb24uIFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY3JlYXRlIGFuIGF1dG9wYW5uZXIgYW5kIHN0YXJ0IGl0J3MgTEZPXG5cdFx0ICogdmFyIGF1dG9QYW5uZXIgPSBuZXcgVG9uZS5BdXRvUGFubmVyKFwiNG5cIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqIC8vcm91dGUgYW4gb3NjaWxsYXRvciB0aHJvdWdoIHRoZSBwYW5uZXIgYW5kIHN0YXJ0IGl0XG5cdFx0ICogdmFyIG9zY2lsbGF0b3IgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKCkuY29ubmVjdChhdXRvUGFubmVyKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZnJlcXVlbmN5J10sIFRvbmUuQXV0b1Bhbm5lcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGRyaXZlcyB0aGUgcGFubmluZ1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnYW1wbGl0dWRlJzogb3B0aW9ucy5kZXB0aCxcblx0ICAgICAgICAgICAgJ21pbic6IC0xLFxuXHQgICAgICAgICAgICAnbWF4JzogMVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtb3VudCBvZiBwYW5uaW5nIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQuIFxuXHRcdFx0ICogMCA9IGFsd2F5cyBjZW50ZXIuIDEgPSBmdWxsIHJhbmdlIGJldHdlZW4gbGVmdCBhbmQgcmlnaHQuIFxuXHRcdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2xmby5hbXBsaXR1ZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBhbm5lciBub2RlIHdoaWNoIGRvZXMgdGhlIHBhbm5pbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5QYW5uZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG5ldyBUb25lLlBhbm5lcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogSG93IGZhc3QgdGhlIHBhbm5lciBtb2R1bGF0ZXMgYmV0d2VlbiBsZWZ0IGFuZCByaWdodC4gXG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9sZm8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fcGFubmVyKTtcblx0ICAgICAgICB0aGlzLl9sZm8uY29ubmVjdCh0aGlzLl9wYW5uZXIucGFuKTtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZGVwdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIC8vZXh0ZW5kIEVmZmVjdFxuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5BdXRvUGFubmVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdHNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAxLFxuXHQgICAgICAgICd0eXBlJzogJ3NpbmUnLFxuXHQgICAgICAgICdkZXB0aCc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdGFydCB0aGUgZWZmZWN0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBMRk8gd2lsbCBzdGFydC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgdGhlIGVmZmVjdC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgTEZPIHdpbGwgc3RvcC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm8uc3RvcCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBwYW5uZXIgdG8gdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFtkZWxheT0wXSBEZWxheSB0aW1lIGJlZm9yZSBzdGFydGluZyB0aGUgZWZmZWN0IGFmdGVyIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zcG9ydCBoYXMgc3RhcnRlZC4gXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b1Bhbm5lcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKGRlbGF5KSB7XG5cdCAgICAgICAgdGhpcy5fbGZvLnN5bmMoZGVsYXkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgcGFubmVyIGZyb20gdGhlIHRyYW5zcG9ydFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2xmby51bnN5bmMoKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUeXBlIG9mIG9zY2lsbGF0b3IgYXR0YWNoZWQgdG8gdGhlIEF1dG9GaWx0ZXIuIFxuXHRcdCAqIFBvc3NpYmxlIHZhbHVlczogXCJzaW5lXCIsIFwic3F1YXJlXCIsIFwidHJpYW5nbGVcIiwgXCJzYXd0b290aFwiLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9GaWx0ZXIjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvUGFubmVyLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm8udHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkF1dG9QYW5uZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1Bhbm5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2xmby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9wYW5uZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3Bhbm5lciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZGVwdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRlcHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5BdXRvUGFubmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuQXV0b1dhaCBjb25uZWN0cyBhIFRvbmUuRm9sbG93ZXIgdG8gYSBiYW5kcGFzcyBmaWx0ZXIgKFRvbmUuRmlsdGVyKS5cblx0XHQgKiAgICAgICAgICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBmaWx0ZXIgaXMgYWRqdXN0ZWQgcHJvcG9ydGlvbmFsbHkgdG8gdGhlXG5cdFx0ICogICAgICAgICAgaW5jb21pbmcgc2lnbmFsJ3MgYW1wbGl0dWRlLiBJbnNwaXJhdGlvbiBmcm9tIFtUdW5hLmpzXShodHRwczovL2dpdGh1Yi5jb20vRGluYWhtb2UvdHVuYSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbYmFzZUZyZXF1ZW5jeV0gVGhlIGZyZXF1ZW5jeSB0aGUgZmlsdGVyIGlzIHNldFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhdCB0aGUgbG93IHBvaW50IG9mIHRoZSB3YWhcblx0XHQgKiAgQHBhcmFtIHtQb3NpdGl2ZX0gW29jdGF2ZXNdIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlsdGVyIHdpbGwgc3dlZXAgdG8gd2hlbiBmdWxseSBvcGVuXG5cdFx0ICogIEBwYXJhbSB7RGVjaWJlbHN9IFtzZW5zaXRpdml0eV0gVGhlIGRlY2liZWwgdGhyZXNob2xkIHNlbnNpdGl2aXR5IGZvclxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5jb21pbmcgc2lnbmFsLiBOb3JtYWwgcmFuZ2Ugb2YgLTQwIHRvIDAuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGF1dG9XYWggPSBuZXcgVG9uZS5BdXRvV2FoKDUwLCA2LCAtMzApLnRvTWFzdGVyKCk7XG5cdFx0ICogLy9pbml0aWFsaXplIHRoZSBzeW50aCBhbmQgY29ubmVjdCB0byBhdXRvd2FoXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFN5bnRoLmNvbm5lY3QoYXV0b1dhaCk7XG5cdFx0ICogLy9RIHZhbHVlIGluZmx1ZW5jZXMgdGhlIGVmZmVjdCBvZiB0aGUgd2FoIC0gZGVmYXVsdCBpcyAyXG5cdFx0ICogYXV0b1dhaC5RLnZhbHVlID0gNjtcblx0XHQgKiAvL21vcmUgYXVkaWJsZSBvbiBoaWdoZXIgbm90ZXNcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkM0XCIsIFwiOG5cIilcblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdiYXNlRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnLFxuXHQgICAgICAgICAgICAnc2Vuc2l0aXZpdHknXG5cdCAgICAgICAgXSwgVG9uZS5BdXRvV2FoKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBlbnZlbG9wZSBmb2xsb3dlci4gU2V0IHRoZSBhdHRhY2svcmVsZWFzZVxuXHRcdFx0ICogIHRpbWluZyB0byBhZGp1c3QgaG93IHRoZSBlbnZlbG9wZSBpcyBmb2xsb3dlZC5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Gb2xsb3dlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mb2xsb3dlciA9IG5ldyBUb25lLkZvbGxvd2VyKG9wdGlvbnMuZm9sbG93ZXIpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlcyB0aGUgZm9sbG93ZXIgdmFsdWUgdG8gdGhlIGZyZXF1ZW5jeSBkb21haW5cblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZSA9IG5ldyBUb25lLlNjYWxlRXhwKDAsIDEsIDAuNSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBpbnB1dCBnYWluIHRvIGFkanVzdCB0aGUgc2Vuc2l0aXZpdHlcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnB1dEJvb3N0ID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtCaXF1YWRGaWx0ZXJOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iYW5kcGFzcyA9IG5ldyBUb25lLkZpbHRlcih7XG5cdCAgICAgICAgICAgICdyb2xsb2ZmJzogLTQ4LFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5JzogMCxcblx0ICAgICAgICAgICAgJ1EnOiBvcHRpb25zLlFcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcgPSBuZXcgVG9uZS5GaWx0ZXIoMCwgJ3BlYWtpbmcnKTtcblx0ICAgICAgICB0aGlzLl9wZWFraW5nLmdhaW4udmFsdWUgPSBvcHRpb25zLmdhaW47XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZ2FpbiBvZiB0aGUgZmlsdGVyLlxuXHRcdFx0ICogQHR5cGUge051bWJlcn1cblx0XHRcdCAqIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZ2FpbiA9IHRoaXMuX3BlYWtpbmcuZ2Fpbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBxdWFsaXR5IG9mIHRoZSBmaWx0ZXIuXG5cdFx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLlEgPSB0aGlzLl9iYW5kcGFzcy5RO1xuXHQgICAgICAgIC8vdGhlIGNvbnRyb2wgc2lnbmFsIHBhdGhcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmQuY2hhaW4odGhpcy5faW5wdXRCb29zdCwgdGhpcy5mb2xsb3dlciwgdGhpcy5fc3dlZXBSYW5nZSk7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5jb25uZWN0KHRoaXMuX2JhbmRwYXNzLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5jb25uZWN0KHRoaXMuX3BlYWtpbmcuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3RoZSBmaWx0ZXJlZCBwYXRoXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kLmNoYWluKHRoaXMuX2JhbmRwYXNzLCB0aGlzLl9wZWFraW5nLCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVcblx0ICAgICAgICB0aGlzLl9zZXRTd2VlcFJhbmdlKCk7XG5cdCAgICAgICAgdGhpcy5zZW5zaXRpdml0eSA9IG9wdGlvbnMuc2Vuc2l0aXZpdHk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZ2FpbicsXG5cdCAgICAgICAgICAgICdRJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQXV0b1dhaCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuQXV0b1dhaC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDEwMCxcblx0ICAgICAgICAnb2N0YXZlcyc6IDYsXG5cdCAgICAgICAgJ3NlbnNpdGl2aXR5JzogMCxcblx0ICAgICAgICAnUSc6IDIsXG5cdCAgICAgICAgJ2dhaW4nOiAyLFxuXHQgICAgICAgICdmb2xsb3dlcic6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMyxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIG51bWJlciBvZiBvY3RhdmVzIHRoYXQgdGhlIGZpbHRlciB3aWxsIHN3ZWVwIGFib3ZlIHRoZVxuXHRcdCAqIGJhc2VGcmVxdWVuY3kuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b1dhaCNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIG9jdGF2ZXNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9XYWgucHJvdG90eXBlLCAnb2N0YXZlcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29jdGF2ZXM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvY3RhdmVzKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvY3RhdmVzO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRTd2VlcFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYmFzZSBmcmVxdWVuY3kgZnJvbSB3aGljaCB0aGUgc3dlZXAgd2lsbCBzdGFydCBmcm9tLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkF1dG9XYWgjXG5cdFx0ICogQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHQgKiBAbmFtZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5BdXRvV2FoLnByb3RvdHlwZSwgJ2Jhc2VGcmVxdWVuY3knLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9iYXNlRnJlcXVlbmN5O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoYmFzZUZyZXEpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IGJhc2VGcmVxO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRTd2VlcFJhbmdlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2Vuc2l0aXZpdHkgdG8gY29udHJvbCBob3cgcmVzcG9uc2l2ZSB0byB0aGUgaW5wdXQgc2lnbmFsIHRoZSBmaWx0ZXIgaXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQXV0b1dhaCNcblx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0ICogQG5hbWUgc2Vuc2l0aXZpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkF1dG9XYWgucHJvdG90eXBlLCAnc2Vuc2l0aXZpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLmdhaW5Ub0RiKDEgLyB0aGlzLl9pbnB1dEJvb3N0LmdhaW4udmFsdWUpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2Vuc2l0aXZ5KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QuZ2Fpbi52YWx1ZSA9IDEgLyBUb25lLmRiVG9HYWluKHNlbnNpdGl2eSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgc2V0cyB0aGUgc3dlZXAgcmFuZ2Ugb2YgdGhlIHNjYWxlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BdXRvV2FoLnByb3RvdHlwZS5fc2V0U3dlZXBSYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLm1pbiA9IHRoaXMuX2Jhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5fc3dlZXBSYW5nZS5tYXggPSBNYXRoLm1pbih0aGlzLl9iYXNlRnJlcXVlbmN5ICogTWF0aC5wb3coMiwgdGhpcy5fb2N0YXZlcyksIHRoaXMuY29udGV4dC5zYW1wbGVSYXRlIC8gMik7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BdXRvV2FofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkF1dG9XYWgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmZvbGxvd2VyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZvbGxvd2VyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zd2VlcFJhbmdlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9iYW5kcGFzcy5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYmFuZHBhc3MgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3BlYWtpbmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2lucHV0Qm9vc3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2dhaW4nLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmdhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuUSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQXV0b1dhaDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFNpZ25hbC1yYXRlIG1vZHVsbyBvcGVyYXRvci4gT25seSB3b3JrcyBpbiBBdWRpb1JhbmdlIFstMSwgMV0gYW5kIGZvciBtb2R1bHVzXG5cdFx0ICogICAgICAgICB2YWx1ZXMgaW4gdGhlIE5vcm1hbFJhbmdlLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5TaWduYWxCYXNlfVxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBtb2R1bHVzIFRoZSBtb2R1bHVzIHRvIGFwcGx5LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBtb2QgPSBuZXcgVG9uZS5Nb2R1bG8oMC4yKVxuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMC41KS5jb25uZWN0KG1vZCk7XG5cdFx0ICogLy9tb2Qgb3V0cHV0cyAwLjFcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9kdWxvID0gZnVuY3Rpb24gKG1vZHVsdXMpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQSB3YXZlc2hhcGVyIGdldHMgdGhlIGludGVnZXIgbXVsdGlwbGUgb2Zcblx0XHRcdCAqICB0aGUgaW5wdXQgc2lnbmFsIGFuZCB0aGUgbW9kdWx1cy5cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBuZXcgVG9uZS5XYXZlU2hhcGVyKE1hdGgucG93KDIsIDE2KSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGludGVnZXIgbXVsdGlwbGUgaXMgbXVsdGlwbGllZCBieSB0aGUgbW9kdWx1c1xuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbXVsdGlwbHkgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGFuZCBzdWJ0cmFjdGVkIGZyb20gdGhlIGlucHV0IHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5TdWJ0cmFjdH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIG1vZHVsdXMgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kU2lnbmFsID0gbmV3IFRvbmUuU2lnbmFsKG1vZHVsdXMpO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmZhbih0aGlzLl9zaGFwZXIsIHRoaXMuX3N1YnRyYWN0KTtcblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwuY29ubmVjdCh0aGlzLl9tdWx0aXBseSwgMCwgMCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmNvbm5lY3QodGhpcy5fbXVsdGlwbHksIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5LmNvbm5lY3QodGhpcy5fc3VidHJhY3QsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX3NldFdhdmVTaGFwZXIobW9kdWx1cyk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb2R1bG8sIFRvbmUuU2lnbmFsQmFzZSk7XG5cdCAgICAvKipcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSAgbW9kICB0aGUgbW9kdWx1cyB0byBhcHBseVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb2R1bG8ucHJvdG90eXBlLl9zZXRXYXZlU2hhcGVyID0gZnVuY3Rpb24gKG1vZCkge1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5zZXRNYXAoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICB2YXIgbXVsdGlwbGUgPSBNYXRoLmZsb29yKCh2YWwgKyAwLjAwMDEpIC8gbW9kKTtcblx0ICAgICAgICAgICAgcmV0dXJuIG11bHRpcGxlO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtb2R1bHVzIHZhbHVlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk1vZHVsbyNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQG5hbWUgdmFsdWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk1vZHVsby5wcm90b3R5cGUsICd2YWx1ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZFNpZ25hbC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1vZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2RTaWduYWwudmFsdWUgPSBtb2Q7XG5cdCAgICAgICAgICAgIHRoaXMuX3NldFdhdmVTaGFwZXIobW9kKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vZHVsb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb2R1bG8ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWxCYXNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX211bHRpcGx5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9tdWx0aXBseSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2RTaWduYWwuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZFNpZ25hbCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9kdWxvO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5CaXRjcnVzaGVyIGRvd25zYW1wbGVzIHRoZSBpbmNvbWluZyBzaWduYWwgdG8gYSBkaWZmZXJlbnQgYml0ZGVwdGguXG5cdFx0ICogICAgICAgICBMb3dlcmluZyB0aGUgYml0ZGVwdGggb2YgdGhlIHNpZ25hbCBjcmVhdGVzIGRpc3RvcnRpb24uIFJlYWQgbW9yZSBhYm91dCBCaXRjcnVzaGluZ1xuXHRcdCAqICAgICAgICAgb24gW1dpa2lwZWRpYV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQml0Y3J1c2hlcikuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJpdHMgVGhlIG51bWJlciBvZiBiaXRzIHRvIGRvd25zYW1wbGUgdGhlIHNpZ25hbC4gTm9taW5hbCByYW5nZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICBvZiAxIHRvIDguXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pbml0aWFsaXplIGNydXNoZXIgYW5kIHJvdXRlIGEgc3ludGggdGhyb3VnaCBpdFxuXHRcdCAqIHZhciBjcnVzaGVyID0gbmV3IFRvbmUuQml0Q3J1c2hlcig0KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLk1vbm9TeW50aCgpLmNvbm5lY3QoY3J1c2hlcik7XG5cdFx0ICovXG5cdCAgICBUb25lLkJpdENydXNoZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydiaXRzJ10sIFRvbmUuQml0Q3J1c2hlcik7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICB2YXIgaW52U3RlcFNpemUgPSAxIC8gTWF0aC5wb3coMiwgb3B0aW9ucy5iaXRzIC0gMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU3VidHJhY3QgdGhlIGlucHV0IHNpZ25hbCBhbmQgdGhlIG1vZHVsdXMgb2YgdGhlIGlucHV0IHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN1YnRyYWN0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZCBmdW5jdGlvblxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5Nb2R1bG99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsbyA9IG5ldyBUb25lLk1vZHVsbyhpbnZTdGVwU2l6ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAga2VlcHMgdHJhY2sgb2YgdGhlIGJpdHNcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9iaXRzID0gb3B0aW9ucy5iaXRzO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5mYW4odGhpcy5fc3VidHJhY3QsIHRoaXMuX21vZHVsbyk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxvLmNvbm5lY3QodGhpcy5fc3VidHJhY3QsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N1YnRyYWN0LmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQml0Q3J1c2hlciwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJpdENydXNoZXIuZGVmYXVsdHMgPSB7ICdiaXRzJzogNCB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGJpdCBkZXB0aCBvZiB0aGUgZWZmZWN0LiBOb21pbmFsIHJhbmdlIG9mIDEtOC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CaXRDcnVzaGVyI1xuXHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0ICogQG5hbWUgYml0c1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQml0Q3J1c2hlci5wcm90b3R5cGUsICdiaXRzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYml0cztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJpdHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fYml0cyA9IGJpdHM7XG5cdCAgICAgICAgICAgIHZhciBpbnZTdGVwU2l6ZSA9IDEgLyBNYXRoLnBvdygyLCBiaXRzIC0gMSk7XG5cdCAgICAgICAgICAgIHRoaXMuX21vZHVsby52YWx1ZSA9IGludlN0ZXBTaXplO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5CaXRDcnVzaGVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJpdENydXNoZXIucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdWJ0cmFjdC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3VidHJhY3QgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxvID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5CaXRDcnVzaGVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5DaGVieVNoZXYgaXMgYSBDaGVieXNoZXYgd2F2ZXNoYXBlciwgYW4gZWZmZWN0IHdoaWNoIGlzIGdvb2QgXG5cdFx0ICogICAgICAgICBmb3IgbWFraW5nIGRpZmZlcmVudCB0eXBlcyBvZiBkaXN0b3J0aW9uIHNvdW5kcy5cblx0XHQgKiAgICAgICAgIE5vdGUgdGhhdCBvZGQgb3JkZXJzIHNvdW5kIHZlcnkgZGlmZmVyZW50IGZyb20gZXZlbiBvbmVzLCBcblx0XHQgKiAgICAgICAgIGFuZCBvcmRlciA9IDEgaXMgbm8gY2hhbmdlLiBcblx0XHQgKiAgICAgICAgIFJlYWQgbW9yZSBhdCBbbXVzaWMuY29sdW1iaWEuZWR1XShodHRwOi8vbXVzaWMuY29sdW1iaWEuZWR1L2NtYy9tdXNpY2FuZGNvbXB1dGVycy9jaGFwdGVyNC8wNF8wNi5waHApLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7UG9zaXRpdmV8T2JqZWN0fSBbb3JkZXJdIFRoZSBvcmRlciBvZiB0aGUgY2hlYnlzaGV2IHBvbHlub21pYWwuIE5vcm1hbCByYW5nZSBiZXR3ZWVuIDEtMTAwLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2NyZWF0ZSBhIG5ldyBjaGVieVxuXHRcdCAqIHZhciBjaGVieSA9IG5ldyBUb25lLkNoZWJ5c2hldig1MCk7XG5cdFx0ICogLy9jcmVhdGUgYSBtb25vc3ludGggY29ubmVjdGVkIHRvIG91ciBjaGVieVxuXHRcdCAqIHN5bnRoID0gbmV3IFRvbmUuTW9ub1N5bnRoKCkuY29ubmVjdChjaGVieSk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ29yZGVyJ10sIFRvbmUuQ2hlYnlzaGV2KTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbmV3IFRvbmUuV2F2ZVNoYXBlcig0MDk2KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIGhvbGRzIG9udG8gdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXJcblx0XHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3JkZXIgPSBvcHRpb25zLm9yZGVyO1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9zaGFwZXIpO1xuXHQgICAgICAgIHRoaXMub3JkZXIgPSBvcHRpb25zLm9yZGVyO1xuXHQgICAgICAgIHRoaXMub3ZlcnNhbXBsZSA9IG9wdGlvbnMub3ZlcnNhbXBsZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkNoZWJ5c2hldiwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb3JkZXInOiAxLFxuXHQgICAgICAgICdvdmVyc2FtcGxlJzogJ25vbmUnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGdldCB0aGUgY29lZmZpY2llbnQgZm9yIHRoYXQgZGVncmVlXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB4IHRoZSB4IHZhbHVlXG5cdFx0ICogIEBwYXJhbSAgIHtudW1iZXJ9IGRlZ3JlZSBcblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IG1lbW8gbWVtb2l6ZSB0aGUgY29tcHV0ZWQgdmFsdWUuIFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHNwZWVkcyB1cCBjb21wdXRhdGlvbiBncmVhdGx5LiBcblx0XHQgKiAgQHJldHVybiAge251bWJlcn0gICAgICAgdGhlIGNvZWZmaWNpZW50IFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLl9nZXRDb2VmZmljaWVudCA9IGZ1bmN0aW9uICh4LCBkZWdyZWUsIG1lbW8pIHtcblx0ICAgICAgICBpZiAobWVtby5oYXNPd25Qcm9wZXJ0eShkZWdyZWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBtZW1vW2RlZ3JlZV07XG5cdCAgICAgICAgfSBlbHNlIGlmIChkZWdyZWUgPT09IDApIHtcblx0ICAgICAgICAgICAgbWVtb1tkZWdyZWVdID0gMDtcblx0ICAgICAgICB9IGVsc2UgaWYgKGRlZ3JlZSA9PT0gMSkge1xuXHQgICAgICAgICAgICBtZW1vW2RlZ3JlZV0gPSB4O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIG1lbW9bZGVncmVlXSA9IDIgKiB4ICogdGhpcy5fZ2V0Q29lZmZpY2llbnQoeCwgZGVncmVlIC0gMSwgbWVtbykgLSB0aGlzLl9nZXRDb2VmZmljaWVudCh4LCBkZWdyZWUgLSAyLCBtZW1vKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG1lbW9bZGVncmVlXTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgb3JkZXIgb2YgdGhlIENoZWJ5c2hldiBwb2x5bm9taWFsIHdoaWNoIGNyZWF0ZXNcblx0XHQgKiB0aGUgZXF1YXRpb24gd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgaW5jb21pbmcgXG5cdFx0ICogc2lnbmFsIHRocm91Z2ggYSBUb25lLldhdmVTaGFwZXIuIFRoZSBlcXVhdGlvbnNcblx0XHQgKiBhcmUgaW4gdGhlIGZvcm06PGJyPlxuXHRcdCAqIG9yZGVyIDI6IDJ4XjIgKyAxPGJyPlxuXHRcdCAqIG9yZGVyIDM6IDR4XjMgKyAzeCA8YnI+XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQ2hlYnlzaGV2I1xuXHRcdCAqIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiBAbmFtZSBvcmRlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ2hlYnlzaGV2LnByb3RvdHlwZSwgJ29yZGVyJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3JkZXI7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvcmRlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9vcmRlciA9IG9yZGVyO1xuXHQgICAgICAgICAgICB2YXIgY3VydmUgPSBuZXcgQXJyYXkoNDA5Nik7XG5cdCAgICAgICAgICAgIHZhciBsZW4gPSBjdXJ2ZS5sZW5ndGg7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB4ID0gaSAqIDIgLyBsZW4gLSAxO1xuXHQgICAgICAgICAgICAgICAgaWYgKHggPT09IDApIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL3Nob3VsZCBvdXRwdXQgMCB3aGVuIGlucHV0IGlzIDBcblx0ICAgICAgICAgICAgICAgICAgICBjdXJ2ZVtpXSA9IDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGN1cnZlW2ldID0gdGhpcy5fZ2V0Q29lZmZpY2llbnQoeCwgb3JkZXIsIHt9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9zaGFwZXIuY3VydmUgPSBjdXJ2ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvdmVyc2FtcGxpbmcgb2YgdGhlIGVmZmVjdC4gQ2FuIGVpdGhlciBiZSBcIm5vbmVcIiwgXCIyeFwiIG9yIFwiNHhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaGVieXNoZXYjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSBvdmVyc2FtcGxlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaGVieXNoZXYucHJvdG90eXBlLCAnb3ZlcnNhbXBsZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob3ZlcnNhbXBsaW5nKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5vdmVyc2FtcGxlID0gb3ZlcnNhbXBsaW5nO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLiBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ2hlYnlzaGV2fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNoZWJ5c2hldi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2hhcGVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DaGVieXNoZXY7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBCYXNlIGNsYXNzIGZvciBTdGVyZW8gZWZmZWN0cy4gUHJvdmlkZXMgZWZmZWN0U2VuZEwvUiBhbmQgZWZmZWN0UmV0dXJuTC9SLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnd2V0J10sIFRvbmUuRWZmZWN0KTtcblx0ICAgICAgICB0aGlzLmNyZWF0ZUluc091dHMoMSwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRyeXdldCBrbm9iIHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBlZmZlY3Rcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Dcm9zc0ZhZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG5ldyBUb25lLkNyb3NzRmFkZShvcHRpb25zLndldCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdldCBjb250cm9sLCBpLmUuIGhvdyBtdWNoIG9mIHRoZSBlZmZlY3RlZFxuXHRcdFx0ICogIHdpbGwgcGFzcyB0aHJvdWdoIHRvIHRoZSBvdXRwdXQuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2V0ID0gdGhpcy5fZHJ5V2V0LmZhZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlbiBzcGxpdCBpdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcGxpdCA9IG5ldyBUb25lLlNwbGl0KCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGVmZmVjdHMgc2VuZCBMRUZUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMID0gdGhpcy5fc3BsaXQubGVmdDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0cyBzZW5kIFJJR0hUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSID0gdGhpcy5fc3BsaXQucmlnaHQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHN0ZXJlbyBlZmZlY3QgbWVyZ2VyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTWVyZ2V9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21lcmdlID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZWZmZWN0IHJldHVybiBMRUZUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVybkwgPSB0aGlzLl9tZXJnZS5sZWZ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBlZmZlY3QgcmV0dXJuIFJJR0hUXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIgPSB0aGlzLl9tZXJnZS5yaWdodDtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5pbnB1dC5jb25uZWN0KHRoaXMuX3NwbGl0KTtcblx0ICAgICAgICAvL2RyeSB3ZXQgY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmlucHV0LmNvbm5lY3QodGhpcy5fZHJ5V2V0LCAwLCAwKTtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5jb25uZWN0KHRoaXMuX2RyeVdldCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5fZHJ5V2V0LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnd2V0J10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU3RlcmVvRWZmZWN0LCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb0VmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kcnlXZXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RyeVdldCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NwbGl0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tZXJnZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZFIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm5SID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3dldCddKTtcblx0ICAgICAgICB0aGlzLndldCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5DaG9ydXMgaXMgYSBzdGVyZW8gY2hvcnVzIGVmZmVjdCBjb21wb3NlZCBvZlxuXHRcdCAqICAgICAgICAgYSBsZWZ0IGFuZCByaWdodCBkZWxheSB3aXRoIGEgVG9uZS5MRk8gYXBwbGllZCB0byB0aGUgZGVsYXlUaW1lIG9mIGVhY2ggY2hhbm5lbC5cblx0XHQgKiAgICAgICAgIEluc3BpcmF0aW9uIGZyb20gW1R1bmEuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9EaW5haG1vZS90dW5hL2Jsb2IvbWFzdGVyL3R1bmEuanMpLlxuXHRcdCAqICAgICAgICAgUmVhZCBtb3JlIG9uIHRoZSBjaG9ydXMgZWZmZWN0IG9uIFtTb3VuZE9uU291bmRdKGh0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvanVuMDQvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmh0bSkuXG5cdFx0ICpcblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKlx0QHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgZnJlcXVlbmN5IG9mIHRoZSBMRk8uXG5cdFx0ICpcdEBwYXJhbSB7TWlsbGlzZWNvbmRzfSBbZGVsYXlUaW1lXSBUaGUgZGVsYXkgb2YgdGhlIGNob3J1cyBlZmZlY3QgaW4gbXMuXG5cdFx0ICpcdEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtkZXB0aF0gVGhlIGRlcHRoIG9mIHRoZSBjaG9ydXMuXG5cdFx0ICpcdEBleGFtcGxlXG5cdFx0ICogdmFyIGNob3J1cyA9IG5ldyBUb25lLkNob3J1cyg0LCAyLjUsIDAuNSk7XG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuUG9seVN5bnRoKDQsIFRvbmUuTW9ub1N5bnRoKS5jb25uZWN0KGNob3J1cyk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoW1wiQzNcIixcIkUzXCIsXCJHM1wiXSwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hvcnVzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSwgVG9uZS5DaG9ydXMpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlcHRoIG9mIHRoZSBjaG9ydXNcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZXB0aCA9IG9wdGlvbnMuZGVwdGg7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5VGltZVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5VGltZSA9IG9wdGlvbnMuZGVsYXlUaW1lIC8gMTAwMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGNvbnRyb2xzIHRoZSBkZWxheVRpbWVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jzogb3B0aW9ucy5mcmVxdWVuY3ksXG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGFub3RoZXIgTEZPIGZvciB0aGUgcmlnaHQgc2lkZSB3aXRoIGEgMTgwIGRlZ3JlZSBwaGFzZSBkaWZmXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9SID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDEsXG5cdCAgICAgICAgICAgICdwaGFzZSc6IDE4MFxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGRlbGF5IGZvciBsZWZ0XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZUwgPSBuZXcgVG9uZS5EZWxheSgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGRlbGF5IGZvciByaWdodFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGVSID0gbmV3IFRvbmUuRGVsYXkoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBmcmVxdWVuY3kgb2YgdGhlIExGTyB3aGljaCBtb2R1bGF0ZXMgdGhlIGRlbGF5VGltZS5cblx0XHRcdCAqIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmb0wuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNoYWluKHRoaXMuX2RlbGF5Tm9kZUwsIHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbih0aGlzLl9kZWxheU5vZGVSLCB0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIC8vYW5kIHBhc3MgdGhyb3VnaCB0byBtYWtlIHRoZSBkZXR1bmUgYXBwYXJlbnRcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRSLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAvL2xmbyBzZXR1cFxuXHQgICAgICAgIHRoaXMuX2xmb0wuY29ubmVjdCh0aGlzLl9kZWxheU5vZGVMLmRlbGF5VGltZSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5jb25uZWN0KHRoaXMuX2RlbGF5Tm9kZVIuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvL3N0YXJ0IHRoZSBsZm9cblx0ICAgICAgICB0aGlzLl9sZm9MLnN0YXJ0KCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdGFydCgpO1xuXHQgICAgICAgIC8vaGF2ZSBvbmUgTEZPIGZyZXF1ZW5jeSBjb250cm9sIHRoZSBvdGhlclxuXHQgICAgICAgIHRoaXMuX2xmb0wuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy5fbGZvUi5mcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9kZXB0aDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS52YWx1ZSA9IG9wdGlvbnMuZnJlcXVlbmN5O1xuXHQgICAgICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ2ZyZXF1ZW5jeSddKTtcblx0ICAgICAgICB0aGlzLnNwcmVhZCA9IG9wdGlvbnMuc3ByZWFkO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ2hvcnVzLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5DaG9ydXMuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDEuNSxcblx0ICAgICAgICAnZGVsYXlUaW1lJzogMy41LFxuXHQgICAgICAgICdkZXB0aCc6IDAuNyxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAnc3ByZWFkJzogMTgwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlcHRoIG9mIHRoZSBlZmZlY3QuIEEgZGVwdGggb2YgMSBtYWtlcyB0aGUgZGVsYXlUaW1lXG5cdFx0ICogbW9kdWxhdGUgYmV0d2VlbiAwIGFuZCAyKmRlbGF5VGltZSAoY2VudGVyZWQgYXJvdW5kIHRoZSBkZWxheVRpbWUpLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNob3J1cyNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQG5hbWUgZGVwdGhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICdkZXB0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlcHRoO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGVwdGgpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGVwdGggPSBkZXB0aDtcblx0ICAgICAgICAgICAgdmFyIGRldmlhdGlvbiA9IHRoaXMuX2RlbGF5VGltZSAqIGRlcHRoO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1pbiA9IE1hdGgubWF4KHRoaXMuX2RlbGF5VGltZSAtIGRldmlhdGlvbiwgMCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wubWF4ID0gdGhpcy5fZGVsYXlUaW1lICsgZGV2aWF0aW9uO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLm1pbiA9IE1hdGgubWF4KHRoaXMuX2RlbGF5VGltZSAtIGRldmlhdGlvbiwgMCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWF4ID0gdGhpcy5fZGVsYXlUaW1lICsgZGV2aWF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlbGF5VGltZSBpbiBtaWxsaXNlY29uZHMgb2YgdGhlIGNob3J1cy4gQSBsYXJnZXIgZGVsYXlUaW1lXG5cdFx0ICogd2lsbCBnaXZlIGEgbW9yZSBwcm9ub3VuY2VkIGVmZmVjdC4gTm9taW5hbCByYW5nZSBhIGRlbGF5VGltZVxuXHRcdCAqIGlzIGJldHdlZW4gMiBhbmQgMjBtcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge01pbGxpc2Vjb25kc31cblx0XHQgKiBAbmFtZSBkZWxheVRpbWVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICdkZWxheVRpbWUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWxheVRpbWUgKiAxMDAwO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGVsYXlUaW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RlbGF5VGltZSA9IGRlbGF5VGltZSAvIDEwMDA7XG5cdCAgICAgICAgICAgIHRoaXMuZGVwdGggPSB0aGlzLl9kZXB0aDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvc2NpbGxhdG9yIHR5cGUgb2YgdGhlIExGTy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5DaG9ydXMjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5DaG9ydXMucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xmb0wudHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC50eXBlID0gdHlwZTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvUi50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIEFtb3VudCBvZiBzdGVyZW8gc3ByZWFkLiBXaGVuIHNldCB0byAwLCBib3RoIExGTydzIHdpbGwgYmUgcGFubmVkIGNlbnRyYWxseS5cblx0XHQgKiBXaGVuIHNldCB0byAxODAsIExGTydzIHdpbGwgYmUgcGFubmVkIGhhcmQgbGVmdCBhbmQgcmlnaHQgcmVzcGVjdGl2ZWx5LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkNob3J1cyNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkNob3J1cy5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9SLnBoYXNlIC0gdGhpcy5fbGZvTC5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnBoYXNlID0gOTAgLSBzcHJlYWQgLyAyO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnBoYXNlID0gc3ByZWFkIC8gMiArIDkwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5DaG9ydXN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQ2hvcnVzLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlTCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlUi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2ZyZXF1ZW5jeScpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5DaG9ydXM7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5Db252b2x2ZXIgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgTmF0aXZlIFdlYiBBdWRpb1xuXHRcdCAqICAgICAgICAgIFtDb252b2x2ZXJOb2RlXShodHRwOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3RoZS1jb252b2x2ZXJub2RlLWludGVyZmFjZSkuXG5cdFx0ICogICAgICAgICAgQ29udm9sdXRpb24gaXMgdXNlZnVsIGZvciByZXZlcmIgYW5kIGZpbHRlciBlbXVsYXRpb24uIFJlYWQgbW9yZSBhYm91dCBjb252b2x1dGlvbiByZXZlcmIgb25cblx0XHQgKiAgICAgICAgICBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db252b2x1dGlvbl9yZXZlcmIpLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfFRvbmUuQnVmZmVyfE9iamVjdH0gW3VybF0gVGhlIFVSTCBvZiB0aGUgaW1wdWxzZSByZXNwb25zZSBvciB0aGUgVG9uZS5CdWZmZXJcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aWFuaW5nIHRoZSBpbXB1bHNlIHJlc3BvbnNlLlxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgdXJsIGlzIGxvYWRlZC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2luaXRpYWxpemluZyB0aGUgY29udm9sdmVyIHdpdGggYW4gaW1wdWxzZSByZXNwb25zZVxuXHRcdCAqIHZhciBjb252b2x2ZXIgPSBuZXcgVG9uZS5Db252b2x2ZXIoXCIuL3BhdGgvdG8vaXIud2F2XCIpLnRvTWFzdGVyKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgIF0sIFRvbmUuQ29udm9sdmVyKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnZvbHZlciBub2RlXG5cdFx0XHQgKiAgQHR5cGUge0NvbnZvbHZlck5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVDb252b2x2ZXIoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgY29udm9sdXRpb24gYnVmZmVyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBuZXcgVG9uZS5CdWZmZXIob3B0aW9ucy51cmwsIGZ1bmN0aW9uIChidWZmZXIpIHtcblx0ICAgICAgICAgICAgdGhpcy5fY29udm9sdmVyLmJ1ZmZlciA9IGJ1ZmZlci5nZXQoKTtcblx0ICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQoKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9jb252b2x2ZXIpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQ29udm9sdmVyLCBUb25lLkVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlci5kZWZhdWx0cyA9IHsgJ29ubG9hZCc6IFRvbmUubm9PcCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjb252b2x2ZXIncyBidWZmZXJcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQ29udm9sdmVyI1xuXHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJ9XG5cdFx0ICogIEBuYW1lIGJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQ29udm9sdmVyLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5nZXQoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnZvbHZlci5idWZmZXIgPSB0aGlzLl9idWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgTG9hZCBhbiBpbXB1bHNlIHJlc3BvbnNlIHVybCBhcyBhbiBhdWRpbyBidWZmZXIuXG5cdFx0ICogIERlY29kZXMgdGhlIGF1ZGlvIGFzeW5jaHJvbm91c2x5IGFuZCBpbnZva2VzXG5cdFx0ICogIHRoZSBjYWxsYmFjayBvbmNlIHRoZSBhdWRpbyBidWZmZXIgbG9hZHMuXG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgYnVmZmVyIHRvIGxvYWQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgZmlsZXR5cGUgc3VwcG9ydCBkZXBlbmRzIG9uIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIuXG5cdFx0ICogIEBwYXJhbSAge2Z1bmN0aW9uPX0gY2FsbGJhY2tcblx0XHQgKiAgQHJldHVybnMge1Byb21pc2V9XG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sb2FkKHVybCwgZnVuY3Rpb24gKGJ1ZmYpIHtcblx0ICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBidWZmO1xuXHQgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcblx0ICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuQ29udm9sdmVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkNvbnZvbHZlci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQ29udm9sdmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5EaXN0b3J0aW9uIGlzIGEgc2ltcGxlIGRpc3RvcnRpb24gZWZmZWN0IHVzaW5nIFRvbmUuV2F2ZVNoYXBlci5cblx0XHQgKiAgICAgICAgIEFsZ29yaXRobSBmcm9tIFthIHN0YWNrb3ZlcmZsb3cgYW5zd2VyXShodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjMxMzQwOCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ8T2JqZWN0fSBbZGlzdG9ydGlvbl0gVGhlIGFtb3VudCBvZiBkaXN0b3J0aW9uIChub21pbmFsIHJhbmdlIG9mIDAtMSlcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZGlzdCA9IG5ldyBUb25lLkRpc3RvcnRpb24oMC44KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBmbSA9IG5ldyBUb25lLlNpbXBsZUZNKCkuY29ubmVjdChkaXN0KTtcblx0XHQgKiAvL3RoaXMgc291bmRzIGdvb2Qgb24gYmFzcyBub3Rlc1xuXHRcdCAqIGZtLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQTFcIiwgXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRGlzdG9ydGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2Rpc3RvcnRpb24nXSwgVG9uZS5EaXN0b3J0aW9uKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG5ldyBUb25lLldhdmVTaGFwZXIoNDA5Nik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBob2xkcyB0aGUgZGlzdG9ydGlvbiBhbW91bnRcblx0XHRcdCAqIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGlzdG9ydGlvbiA9IG9wdGlvbnMuZGlzdG9ydGlvbjtcblx0ICAgICAgICB0aGlzLmNvbm5lY3RFZmZlY3QodGhpcy5fc2hhcGVyKTtcblx0ICAgICAgICB0aGlzLmRpc3RvcnRpb24gPSBvcHRpb25zLmRpc3RvcnRpb247XG5cdCAgICAgICAgdGhpcy5vdmVyc2FtcGxlID0gb3B0aW9ucy5vdmVyc2FtcGxlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRGlzdG9ydGlvbiwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkRpc3RvcnRpb24uZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2Rpc3RvcnRpb24nOiAwLjQsXG5cdCAgICAgICAgJ292ZXJzYW1wbGUnOiAnbm9uZSdcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgYW1vdW50IG9mIGRpc3RvcnRpb24uXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRGlzdG9ydGlvbiNcblx0XHQgKiBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogQG5hbWUgZGlzdG9ydGlvblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRGlzdG9ydGlvbi5wcm90b3R5cGUsICdkaXN0b3J0aW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzdG9ydGlvbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGFtb3VudCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kaXN0b3J0aW9uID0gYW1vdW50O1xuXHQgICAgICAgICAgICB2YXIgayA9IGFtb3VudCAqIDEwMDtcblx0ICAgICAgICAgICAgdmFyIGRlZyA9IE1hdGguUEkgLyAxODA7XG5cdCAgICAgICAgICAgIHRoaXMuX3NoYXBlci5zZXRNYXAoZnVuY3Rpb24gKHgpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyh4KSA8IDAuMDAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9zaG91bGQgb3V0cHV0IDAgd2hlbiBpbnB1dCBpcyAwXG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMyArIGspICogeCAqIDIwICogZGVnIC8gKE1hdGguUEkgKyBrICogTWF0aC5hYnMoeCkpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBvdmVyc2FtcGxpbmcgb2YgdGhlIGVmZmVjdC4gQ2FuIGVpdGhlciBiZSBcIm5vbmVcIiwgXCIyeFwiIG9yIFwiNHhcIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5EaXN0b3J0aW9uI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgb3ZlcnNhbXBsZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRGlzdG9ydGlvbi5wcm90b3R5cGUsICdvdmVyc2FtcGxlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvdmVyc2FtcGxpbmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc2hhcGVyLm92ZXJzYW1wbGUgPSBvdmVyc2FtcGxpbmc7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EaXN0b3J0aW9ufSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkRpc3RvcnRpb24ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zaGFwZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3NoYXBlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRGlzdG9ydGlvbjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiBcdEBjbGFzcyAgVG9uZS5GZWVkYmFja0VmZmVjdCBwcm92aWRlcyBhIGxvb3AgYmV0d2VlbiBhbiBcblx0XHQgKiBcdCAgICAgICAgYXVkaW8gc291cmNlIGFuZCBpdHMgb3duIG91dHB1dC4gVGhpcyBpcyBhIGJhc2UtY2xhc3Ncblx0XHQgKiBcdCAgICAgICAgZm9yIGZlZWRiYWNrIGVmZmVjdHMuIFxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5FZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbZmVlZGJhY2tdIFRoZSBpbml0aWFsIGZlZWRiYWNrIHZhbHVlLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZlZWRiYWNrJ10sIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGdhaW4gd2hpY2ggY29udHJvbHMgdGhlIGZlZWRiYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tHYWluID0gbmV3IFRvbmUuR2FpbihvcHRpb25zLmZlZWRiYWNrLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2Ygc2lnbmFsIHdoaWNoIGlzIGZlZCBiYWNrIGludG8gdGhlIGVmZmVjdCBpbnB1dC4gXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSB0aGlzLl9mZWVkYmFja0dhaW4uZ2Fpbjtcblx0ICAgICAgICAvL3RoZSBmZWVkYmFjayBsb29wXG5cdCAgICAgICAgdGhpcy5lZmZlY3RSZXR1cm4uY2hhaW4odGhpcy5fZmVlZGJhY2tHYWluLCB0aGlzLmVmZmVjdFNlbmQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZmVlZGJhY2snXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GZWVkYmFja0VmZmVjdCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QuZGVmYXVsdHMgPSB7ICdmZWVkYmFjayc6IDAuMTI1IH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuIFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GZWVkYmFja0VmZmVjdH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFsnZmVlZGJhY2snXSk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tHYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0dhaW4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZlZWRiYWNrRWZmZWN0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuRmVlZGJhY2tEZWxheSBpcyBhIERlbGF5Tm9kZSBpbiB3aGljaCBwYXJ0IG9mIG91dHB1dFxuXHRcdCAqICAgICAgICAgIHNpZ25hbCBpcyBmZWQgYmFjayBpbnRvIHRoZSBkZWxheS5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRmVlZGJhY2tFZmZlY3R9XG5cdFx0ICogIEBwYXJhbSB7VGltZXxPYmplY3R9IFtkZWxheVRpbWVdIFRoZSBkZWxheSBhcHBsaWVkIHRvIHRoZSBpbmNvbWluZyBzaWduYWwuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2U9fSBmZWVkYmFjayBUaGUgYW1vdW50IG9mIHRoZSBlZmZlY3RlZCBzaWduYWwgd2hpY2hcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmZWQgYmFjayB0aHJvdWdoIHRoZSBkZWxheS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZmVlZGJhY2tEZWxheSA9IG5ldyBUb25lLkZlZWRiYWNrRGVsYXkoXCI4blwiLCAwLjUpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIHRvbSA9IG5ldyBUb25lLkRydW1TeW50aCh7XG5cdFx0ICogXHRcIm9jdGF2ZXNcIiA6IDQsXG5cdFx0ICogXHRcInBpdGNoRGVjYXlcIiA6IDAuMVxuXHRcdCAqIH0pLmNvbm5lY3QoZmVlZGJhY2tEZWxheSk7XG5cdFx0ICogdG9tLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQTJcIixcIjMyblwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRmVlZGJhY2tEZWxheSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdkZWxheVRpbWUnLFxuXHQgICAgICAgICAgICAnZmVlZGJhY2snXG5cdCAgICAgICAgXSwgVG9uZS5GZWVkYmFja0RlbGF5KTtcblx0ICAgICAgICBUb25lLkZlZWRiYWNrRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGRlbGF5IG5vZGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5EZWxheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlID0gbmV3IFRvbmUuRGVsYXkob3B0aW9ucy5kZWxheVRpbWUsIG9wdGlvbnMubWF4RGVsYXkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheVRpbWUgb2YgdGhlIERlbGF5Tm9kZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRlbGF5VGltZSA9IHRoaXMuX2RlbGF5Tm9kZS5kZWxheVRpbWU7XG5cdCAgICAgICAgLy8gY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuY29ubmVjdEVmZmVjdCh0aGlzLl9kZWxheU5vZGUpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZGVsYXlUaW1lJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRmVlZGJhY2tEZWxheSwgVG9uZS5GZWVkYmFja0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdmFsdWVzLlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0RlbGF5LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjI1LFxuXHQgICAgICAgICdtYXhEZWxheSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuRmVlZGJhY2tEZWxheX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GZWVkYmFja0RlbGF5LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Tm9kZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydkZWxheVRpbWUnXSk7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZlZWRiYWNrRGVsYXk7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIGFuIGFycmF5IG9mIGNvbWIgZmlsdGVyIGRlbGF5IHZhbHVlcyBmcm9tIEZyZWV2ZXJiIGltcGxlbWVudGF0aW9uXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGNvbWJGaWx0ZXJUdW5pbmdzID0gW1xuXHQgICAgICAgIDE1NTcgLyA0NDEwMCxcblx0ICAgICAgICAxNjE3IC8gNDQxMDAsXG5cdCAgICAgICAgMTQ5MSAvIDQ0MTAwLFxuXHQgICAgICAgIDE0MjIgLyA0NDEwMCxcblx0ICAgICAgICAxMjc3IC8gNDQxMDAsXG5cdCAgICAgICAgMTM1NiAvIDQ0MTAwLFxuXHQgICAgICAgIDExODggLyA0NDEwMCxcblx0ICAgICAgICAxMTE2IC8gNDQxMDBcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgYW4gYXJyYXkgb2YgYWxscGFzcyBmaWx0ZXIgZnJlcXVlbmN5IHZhbHVlcyBmcm9tIEZyZWV2ZXJiIGltcGxlbWVudGF0aW9uXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcyA9IFtcblx0ICAgICAgICAyMjUsXG5cdCAgICAgICAgNTU2LFxuXHQgICAgICAgIDQ0MSxcblx0ICAgICAgICAzNDFcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuRnJlZXZlcmIgaXMgYSByZXZlcmIgYmFzZWQgb24gW0ZyZWV2ZXJiXShodHRwczovL2Njcm1hLnN0YW5mb3JkLmVkdS9+am9zL3Bhc3AvRnJlZXZlcmIuaHRtbCkuXG5cdFx0ICogICAgICAgICBSZWFkIG1vcmUgb24gcmV2ZXJiIG9uIFtTb3VuZCBPbiBTb3VuZF0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDA0MDgzOTAyL2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbTo4MC9zb3MvZmViMDEvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmFzcCkuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZXxPYmplY3R9IFtyb29tU2l6ZV0gQ29ycmVsYXRlZCB0byB0aGUgZGVjYXkgdGltZS5cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtkYW1wZW5pbmddIFRoZSBjdXRvZmYgZnJlcXVlbmN5IG9mIGEgbG93cGFzcyBmaWx0ZXIgYXMgcGFydFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJldmVyYi5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZnJlZXZlcmIgPSBuZXcgVG9uZS5GcmVldmVyYigpLnRvTWFzdGVyKCk7XG5cdFx0ICogZnJlZXZlcmIuZGFtcGVuaW5nLnZhbHVlID0gMTAwMDtcblx0XHQgKiAvL3JvdXRpbmcgc3ludGggdGhyb3VnaCB0aGUgcmV2ZXJiXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuQU1TeW50aCgpLmNvbm5lY3QoZnJlZXZlcmIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVldmVyYiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdyb29tU2l6ZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSwgVG9uZS5GcmVldmVyYik7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcm9vbVNpemUgdmFsdWUgYmV0d2Vlbi4gQSBsYXJnZXIgcm9vbVNpemVcblx0XHRcdCAqICB3aWxsIHJlc3VsdCBpbiBhIGxvbmdlciBkZWNheS5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLnJvb21TaXplLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2YgZGFtcGVuaW5nIG9mIHRoZSByZXZlcmJlcmFudCBzaWduYWwuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRhbXBlbmluZywgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGNvbWIgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29tYkZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSBsZWZ0XG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0wgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYWxscGFzcyBmaWx0ZXJzIG9uIHRoZSByaWdodFxuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSID0gW107XG5cdCAgICAgICAgLy9tYWtlIHRoZSBhbGxwYXNzIGZpbHRlcnMgb24gdGhlIHJpZ2h0XG5cdCAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXMubGVuZ3RoOyBsKyspIHtcblx0ICAgICAgICAgICAgdmFyIGFsbHBhc3NMID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBhbGxwYXNzTC50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBhbGxwYXNzTC5mcmVxdWVuY3kudmFsdWUgPSBhbGxwYXNzRmlsdGVyRnJlcXVlbmNpZXNbbF07XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTC5wdXNoKGFsbHBhc3NMKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9tYWtlIHRoZSBhbGxwYXNzIGZpbHRlcnMgb24gdGhlIGxlZnRcblx0ICAgICAgICBmb3IgKHZhciByID0gMDsgciA8IGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llcy5sZW5ndGg7IHIrKykge1xuXHQgICAgICAgICAgICB2YXIgYWxscGFzc1IgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgIGFsbHBhc3NSLnR5cGUgPSAnYWxscGFzcyc7XG5cdCAgICAgICAgICAgIGFsbHBhc3NSLmZyZXF1ZW5jeS52YWx1ZSA9IGFsbHBhc3NGaWx0ZXJGcmVxdWVuY2llc1tyXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSLnB1c2goYWxscGFzc1IpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL21ha2UgdGhlIGNvbWIgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29tYkZpbHRlclR1bmluZ3MubGVuZ3RoOyBjKyspIHtcblx0ICAgICAgICAgICAgdmFyIGxmcGYgPSBuZXcgVG9uZS5Mb3dwYXNzQ29tYkZpbHRlcihjb21iRmlsdGVyVHVuaW5nc1tjXSk7XG5cdCAgICAgICAgICAgIGlmIChjIDwgY29tYkZpbHRlclR1bmluZ3MubGVuZ3RoIC8gMikge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbihsZnBmLCB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbMF0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbihsZnBmLCB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbMF0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMucm9vbVNpemUuY29ubmVjdChsZnBmLnJlc29uYW5jZSk7XG5cdCAgICAgICAgICAgIHRoaXMuZGFtcGVuaW5nLmNvbm5lY3QobGZwZi5kYW1wZW5pbmcpO1xuXHQgICAgICAgICAgICB0aGlzLl9jb21iRmlsdGVycy5wdXNoKGxmcGYpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NoYWluIHRoZSBhbGxwYXNzIGZpbHRlcnMgdG9nZXRlaHJcblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgdGhpcy5fYWxscGFzc0ZpbHRlcnNMKTtcblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgdGhpcy5fYWxscGFzc0ZpbHRlcnNSKTtcblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbdGhpcy5fYWxscGFzc0ZpbHRlcnNMLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbdGhpcy5fYWxscGFzc0ZpbHRlcnNSLmxlbmd0aCAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdyb29tU2l6ZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GcmVldmVyYiwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuRnJlZXZlcmIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3Jvb21TaXplJzogMC43LFxuXHQgICAgICAgICdkYW1wZW5pbmcnOiAzMDAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GcmVldmVyYn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GcmVldmVyYi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGFsID0gMDsgYWwgPCB0aGlzLl9hbGxwYXNzRmlsdGVyc0wubGVuZ3RoOyBhbCsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzTFthbF0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc0xbYWxdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNMID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBhciA9IDA7IGFyIDwgdGhpcy5fYWxscGFzc0ZpbHRlcnNSLmxlbmd0aDsgYXIrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVyc1JbYXJdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNSW2FyXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzUiA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgY2YgPSAwOyBjZiA8IHRoaXMuX2NvbWJGaWx0ZXJzLmxlbmd0aDsgY2YrKykge1xuXHQgICAgICAgICAgICB0aGlzLl9jb21iRmlsdGVyc1tjZl0uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9jb21iRmlsdGVyc1tjZl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9jb21iRmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAncm9vbVNpemUnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMucm9vbVNpemUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRhbXBlbmluZyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRnJlZXZlcmI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIGFuIGFycmF5IG9mIHRoZSBjb21iIGZpbHRlciBkZWxheSB0aW1lIHZhbHVlc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBjb21iRmlsdGVyRGVsYXlUaW1lcyA9IFtcblx0ICAgICAgICAxNjg3IC8gMjUwMDAsXG5cdCAgICAgICAgMTYwMSAvIDI1MDAwLFxuXHQgICAgICAgIDIwNTMgLyAyNTAwMCxcblx0ICAgICAgICAyMjUxIC8gMjUwMDBcblx0ICAgIF07XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIHJlc29uYW5jZXMgb2YgZWFjaCBvZiB0aGUgY29tYiBmaWx0ZXJzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdCAqL1xuXHQgICAgdmFyIGNvbWJGaWx0ZXJSZXNvbmFuY2VzID0gW1xuXHQgICAgICAgIDAuNzczLFxuXHQgICAgICAgIDAuODAyLFxuXHQgICAgICAgIDAuNzUzLFxuXHQgICAgICAgIDAuNzMzXG5cdCAgICBdO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBhbGxwYXNzIGZpbHRlciBmcmVxdWVuY2llc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHQgKi9cblx0ICAgIHZhciBhbGxwYXNzRmlsdGVyRnJlcXMgPSBbXG5cdCAgICAgICAgMzQ3LFxuXHQgICAgICAgIDExMyxcblx0ICAgICAgICAzN1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5KQ1JldmVyYiBpcyBhIHNpbXBsZSBbU2Nocm9lZGVyIFJldmVyYmVyYXRvcl0oaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvfmpvcy9wYXNwL1NjaHJvZWRlcl9SZXZlcmJlcmF0b3JzLmh0bWwpXG5cdFx0ICogICAgICAgICB0dW5lZCBieSBKb2huIENob3duaW5nIGluIDE5NzAuXG5cdFx0ICogICAgICAgICBJdCBpcyBtYWRlIHVwIG9mIHRocmVlIGFsbHBhc3MgZmlsdGVycyBhbmQgZm91ciBUb25lLkZlZWRiYWNrQ29tYkZpbHRlci5cblx0XHQgKlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbcm9vbVNpemVdIENvb3JlbGF0ZXMgdG8gdGhlIGRlY2F5IHRpbWUuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHJldmVyYiA9IG5ldyBUb25lLkpDUmV2ZXJiKDAuNCkuY29ubmVjdChUb25lLk1hc3Rlcik7XG5cdFx0ICogdmFyIGRlbGF5ID0gbmV3IFRvbmUuRmVlZGJhY2tEZWxheSgwLjUpO1xuXHRcdCAqIC8vY29ubmVjdGluZyB0aGUgc3ludGggdG8gcmV2ZXJiIHRocm91Z2ggZGVsYXlcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5EdW9TeW50aCgpLmNoYWluKGRlbGF5LCByZXZlcmIpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQTRcIixcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5KQ1JldmVyYiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3Jvb21TaXplJ10sIFRvbmUuSkNSZXZlcmIpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgcm9vbSBzaXplIGNvbnRyb2wgdmFsdWVzIGJldHdlZW4gWzAsMV1cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yb29tU2l6ZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLnJvb21TaXplLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHNjYWxlIHRoZSByb29tIHNpemVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5TY2FsZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2NhbGVSb29tU2l6ZSA9IG5ldyBUb25lLlNjYWxlKC0wLjczMywgMC4xOTcpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGEgc2VyaWVzIG9mIGFsbHBhc3MgZmlsdGVyc1xuXHRcdFx0ICogIEB0eXBlIHtBcnJheX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBwYXJhbGxlbCBmZWVkYmFjayBjb21iIGZpbHRlcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnMgPSBbXTtcblx0ICAgICAgICAvL21ha2UgdGhlIGFsbHBhc3MgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGFmID0gMDsgYWYgPCBhbGxwYXNzRmlsdGVyRnJlcXMubGVuZ3RoOyBhZisrKSB7XG5cdCAgICAgICAgICAgIHZhciBhbGxwYXNzID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuXHQgICAgICAgICAgICBhbGxwYXNzLnR5cGUgPSAnYWxscGFzcyc7XG5cdCAgICAgICAgICAgIGFsbHBhc3MuZnJlcXVlbmN5LnZhbHVlID0gYWxscGFzc0ZpbHRlckZyZXFzW2FmXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnMucHVzaChhbGxwYXNzKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9hbmQgdGhlIGNvbWIgZmlsdGVyc1xuXHQgICAgICAgIGZvciAodmFyIGNmID0gMDsgY2YgPCBjb21iRmlsdGVyRGVsYXlUaW1lcy5sZW5ndGg7IGNmKyspIHtcblx0ICAgICAgICAgICAgdmFyIGZiY2YgPSBuZXcgVG9uZS5GZWVkYmFja0NvbWJGaWx0ZXIoY29tYkZpbHRlckRlbGF5VGltZXNbY2ZdLCAwLjEpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplLmNvbm5lY3QoZmJjZi5yZXNvbmFuY2UpO1xuXHQgICAgICAgICAgICBmYmNmLnJlc29uYW5jZS52YWx1ZSA9IGNvbWJGaWx0ZXJSZXNvbmFuY2VzW2NmXTtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNbdGhpcy5fYWxscGFzc0ZpbHRlcnMubGVuZ3RoIC0gMV0uY29ubmVjdChmYmNmKTtcblx0ICAgICAgICAgICAgaWYgKGNmIDwgY29tYkZpbHRlckRlbGF5VGltZXMubGVuZ3RoIC8gMikge1xuXHQgICAgICAgICAgICAgICAgZmJjZi5jb25uZWN0KHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBmYmNmLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzLnB1c2goZmJjZik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vY2hhaW4gdGhlIGFsbHBhc3MgZmlsdGVycyB0b2dldGhlclxuXHQgICAgICAgIHRoaXMucm9vbVNpemUuY29ubmVjdCh0aGlzLl9zY2FsZVJvb21TaXplKTtcblx0ICAgICAgICBUb25lLmNvbm5lY3RTZXJpZXMuYXBwbHkoVG9uZSwgdGhpcy5fYWxscGFzc0ZpbHRlcnMpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY29ubmVjdCh0aGlzLl9hbGxwYXNzRmlsdGVyc1swXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jb25uZWN0KHRoaXMuX2FsbHBhc3NGaWx0ZXJzWzBdKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbJ3Jvb21TaXplJ10pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuSkNSZXZlcmIsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuSkNSZXZlcmIuZGVmYXVsdHMgPSB7ICdyb29tU2l6ZSc6IDAuNSB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5KQ1JldmVyYn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5KQ1JldmVyYi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIGZvciAodmFyIGFwZiA9IDA7IGFwZiA8IHRoaXMuX2FsbHBhc3NGaWx0ZXJzLmxlbmd0aDsgYXBmKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fYWxscGFzc0ZpbHRlcnNbYXBmXS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2FsbHBhc3NGaWx0ZXJzW2FwZl0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9hbGxwYXNzRmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgZm9yICh2YXIgZmJjZiA9IDA7IGZiY2YgPCB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzLmxlbmd0aDsgZmJjZisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZlZWRiYWNrQ29tYkZpbHRlcnNbZmJjZl0uZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9mZWVkYmFja0NvbWJGaWx0ZXJzW2ZiY2ZdID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tDb21iRmlsdGVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydyb29tU2l6ZSddKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnJvb21TaXplID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zY2FsZVJvb21TaXplID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5KQ1JldmVyYjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE1pZC9TaWRlIHByb2Nlc3Npbmcgc2VwYXJhdGVzIHRoZSB0aGUgJ21pZCcgc2lnbmFsXG5cdFx0ICogICAgICAgICAod2hpY2ggY29tZXMgb3V0IG9mIGJvdGggdGhlIGxlZnQgYW5kIHRoZSByaWdodCBjaGFubmVsKVxuXHRcdCAqICAgICAgICAgYW5kIHRoZSAnc2lkZScgKHdoaWNoIG9ubHkgY29tZXMgb3V0IG9mIHRoZSB0aGUgc2lkZSBjaGFubmVscylcblx0XHQgKiAgICAgICAgIGFuZCBlZmZlY3RzIHRoZW0gc2VwYXJhdGVseSBiZWZvcmUgYmVpbmcgcmVjb21iaW5lZC5cblx0XHQgKiAgICAgICAgIEFwcGxpZXMgYSBNaWQvU2lkZSBzZXBlcmF0aW9uIGFuZCByZWNvbWJpbmF0aW9uLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZvdW5kIGluIFtrdnJhdWRpbyBmb3J1bXNdKGh0dHA6Ly93d3cua3ZyYXVkaW8uY29tL2ZvcnVtL3ZpZXd0b3BpYy5waHA/dD0yMTI1ODcpLlxuXHRcdCAqICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgIFRoaXMgaXMgYSBiYXNlLWNsYXNzIGZvciBNaWQvU2lkZSBFZmZlY3RzLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL3NpZGUgc3BsaXRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZVNwbGl0fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQgPSBuZXcgVG9uZS5NaWRTaWRlU3BsaXQoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkL3NpZGUgbWVyZ2Vcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuTWlkU2lkZU1lcmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSBuZXcgVG9uZS5NaWRTaWRlTWVyZ2UoKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbWlkIHNlbmQuIENvbm5lY3QgdG8gbWlkIHByb2Nlc3Npbmdcblx0XHRcdCAqICBAdHlwZSB7VG9uZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWRTZW5kID0gdGhpcy5fbWlkU2lkZVNwbGl0Lm1pZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2lkZSBzZW5kLiBDb25uZWN0IHRvIHNpZGUgcHJvY2Vzc2luZ1xuXHRcdFx0ICogIEB0eXBlIHtUb25lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGVTZW5kID0gdGhpcy5fbWlkU2lkZVNwbGl0LnNpZGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1pZCByZXR1cm4gY29ubmVjdGlvblxuXHRcdFx0ICogIEB0eXBlIHtHYWluTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5taWRSZXR1cm4gPSB0aGlzLl9taWRTaWRlTWVyZ2UubWlkO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBzaWRlIHJldHVybiBjb25uZWN0aW9uXG5cdFx0XHQgKiAgQHR5cGUge0dhaW5Ob2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnNpZGVSZXR1cm4gPSB0aGlzLl9taWRTaWRlTWVyZ2Uuc2lkZTtcblx0ICAgICAgICAvL3RoZSBjb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jb25uZWN0KHRoaXMuX21pZFNpZGVTcGxpdCk7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm4pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWlkU2lkZUVmZmVjdCwgVG9uZS5FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NaWRTaWRlRWZmZWN0fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZFNpZGVFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlU3BsaXQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZFNpZGVTcGxpdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbWlkU2lkZU1lcmdlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9taWRTaWRlTWVyZ2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWlkU2VuZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5zaWRlU2VuZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5taWRSZXR1cm4gPSBudWxsO1xuXHQgICAgICAgIHRoaXMuc2lkZVJldHVybiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWlkU2lkZUVmZmVjdDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGhhc2VyIGlzIGEgcGhhc2VyIGVmZmVjdC4gUGhhc2VycyB3b3JrIGJ5IGNoYW5naW5nIHRoZSBwaGFzZVxuXHRcdCAqICAgICAgICAgb2YgZGlmZmVyZW50IGZyZXF1ZW5jeSBjb21wb25lbnRzIG9mIGFuIGluY29taW5nIHNpZ25hbC4gUmVhZCBtb3JlIG9uXG5cdFx0ICogICAgICAgICBbV2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QaGFzZXJfKGVmZmVjdCkpLlxuXHRcdCAqICAgICAgICAgSW5zcGlyYXRpb24gZm9yIHRoaXMgcGhhc2VyIGNvbWVzIGZyb20gW1R1bmEuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9EaW5haG1vZS90dW5hLykuXG5cdFx0ICpcblx0XHQgKlx0QGV4dGVuZHMge1RvbmUuU3RlcmVvRWZmZWN0fVxuXHRcdCAqXHRAY29uc3RydWN0b3Jcblx0XHQgKlx0QHBhcmFtIHtGcmVxdWVuY3l8T2JqZWN0fSBbZnJlcXVlbmN5XSBUaGUgc3BlZWQgb2YgdGhlIHBoYXNpbmcuXG5cdFx0ICpcdEBwYXJhbSB7bnVtYmVyfSBbb2N0YXZlc10gVGhlIG9jdGF2ZXMgb2YgdGhlIGVmZmVjdC5cblx0XHQgKlx0QHBhcmFtIHtGcmVxdWVuY3l9IFtiYXNlRnJlcXVlbmN5XSBUaGUgYmFzZSBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlcnMuXG5cdFx0ICpcdEBleGFtcGxlXG5cdFx0ICogdmFyIHBoYXNlciA9IG5ldyBUb25lLlBoYXNlcih7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogMTUsXG5cdFx0ICogXHRcIm9jdGF2ZXNcIiA6IDUsXG5cdFx0ICogXHRcImJhc2VGcmVxdWVuY3lcIiA6IDEwMDBcblx0XHQgKiB9KS50b01hc3RlcigpO1xuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkZNU3ludGgoKS5jb25uZWN0KHBoYXNlcik7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJFM1wiLCBcIjJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QaGFzZXIgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy9zZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnLFxuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeSdcblx0ICAgICAgICBdLCBUb25lLlBoYXNlcik7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGZvIHdoaWNoIGNvbnRyb2xzIHRoZSBmcmVxdWVuY3kgb24gdGhlIGxlZnQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG5ldyBUb25lLkxGTyhvcHRpb25zLmZyZXF1ZW5jeSwgMCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGxmbyB3aGljaCBjb250cm9scyB0aGUgZnJlcXVlbmN5IG9uIHRoZSByaWdodCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTEZPfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZm9SID0gbmV3IFRvbmUuTEZPKG9wdGlvbnMuZnJlcXVlbmN5LCAwLCAxKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnBoYXNlID0gMTgwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBiYXNlIG1vZHVsYXRpb24gZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb2N0YXZlcyBvZiB0aGUgcGhhc2luZ1xuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHF1YWxpdHkgZmFjdG9yIG9mIHRoZSBmaWx0ZXJzXG5cdFx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuUSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLlEsIFRvbmUuVHlwZS5Qb3NpdGl2ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFycmF5IG9mIGZpbHRlcnMgZm9yIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNMID0gdGhpcy5fbWFrZUZpbHRlcnMob3B0aW9ucy5zdGFnZXMsIHRoaXMuX2xmb0wsIHRoaXMuUSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFycmF5IG9mIGZpbHRlcnMgZm9yIHRoZSBsZWZ0IHNpZGVcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNSID0gdGhpcy5fbWFrZUZpbHRlcnMob3B0aW9ucy5zdGFnZXMsIHRoaXMuX2xmb1IsIHRoaXMuUSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiB0aGUgZnJlcXVlbmN5IG9mIHRoZSBlZmZlY3Rcblx0XHRcdCAqIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fbGZvTC5mcmVxdWVuY3k7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kudmFsdWUgPSBvcHRpb25zLmZyZXF1ZW5jeTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlbSB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZEwuY29ubmVjdCh0aGlzLl9maWx0ZXJzTFswXSk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jb25uZWN0KHRoaXMuX2ZpbHRlcnNSWzBdKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJzTFtvcHRpb25zLnN0YWdlcyAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5MKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJzUltvcHRpb25zLnN0YWdlcyAtIDFdLmNvbm5lY3QodGhpcy5lZmZlY3RSZXR1cm5SKTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIGZyZXF1ZW5jeSB3aXRoIG9uZSBMRk9cblx0ICAgICAgICB0aGlzLl9sZm9MLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2xmb1IuZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3NldCB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHRoaXMuYmFzZUZyZXF1ZW5jeSA9IG9wdGlvbnMuYmFzZUZyZXF1ZW5jeTtcblx0ICAgICAgICB0aGlzLm9jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgbGZvXG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdGFydCgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1Iuc3RhcnQoKTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnUSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBoYXNlciwgVG9uZS5TdGVyZW9FZmZlY3QpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHRzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge29iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAwLjUsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAzLFxuXHQgICAgICAgICdzdGFnZXMnOiAxMCxcblx0ICAgICAgICAnUSc6IDEwLFxuXHQgICAgICAgICdiYXNlRnJlcXVlbmN5JzogMzUwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBzdGFnZXNcblx0XHQgKiAgQHJldHVybnMge0FycmF5fSB0aGUgbnVtYmVyIG9mIGZpbHRlcnMgYWxsIGNvbm5lY3RlZCB0b2dldGhlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaGFzZXIucHJvdG90eXBlLl9tYWtlRmlsdGVycyA9IGZ1bmN0aW9uIChzdGFnZXMsIGNvbm5lY3RUb0ZyZXEsIFEpIHtcblx0ICAgICAgICB2YXIgZmlsdGVycyA9IG5ldyBBcnJheShzdGFnZXMpO1xuXHQgICAgICAgIC8vbWFrZSBhbGwgdGhlIGZpbHRlcnNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWdlczsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBmaWx0ZXIgPSB0aGlzLmNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7XG5cdCAgICAgICAgICAgIGZpbHRlci50eXBlID0gJ2FsbHBhc3MnO1xuXHQgICAgICAgICAgICBRLmNvbm5lY3QoZmlsdGVyLlEpO1xuXHQgICAgICAgICAgICBjb25uZWN0VG9GcmVxLmNvbm5lY3QoZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgIGZpbHRlcnNbaV0gPSBmaWx0ZXI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIFRvbmUuY29ubmVjdFNlcmllcy5hcHBseShUb25lLCBmaWx0ZXJzKTtcblx0ICAgICAgICByZXR1cm4gZmlsdGVycztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhlIHBoYXNlIGdvZXMgYWJvdmVcblx0XHQgKiB0aGUgYmFzZUZyZXF1ZW5jeVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBoYXNlciNcblx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogQG5hbWUgb2N0YXZlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGhhc2VyLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0YXZlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0YXZlcztcblx0ICAgICAgICAgICAgdmFyIG1heCA9IHRoaXMuX2Jhc2VGcmVxdWVuY3kgKiBNYXRoLnBvdygyLCBvY3RhdmVzKTtcblx0ICAgICAgICAgICAgdGhpcy5fbGZvTC5tYXggPSBtYXg7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWF4ID0gbWF4O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHRoZSBiYXNlIGZyZXF1ZW5jeSBvZiB0aGUgZmlsdGVycy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QaGFzZXIjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBiYXNlRnJlcXVlbmN5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QaGFzZXIucHJvdG90eXBlLCAnYmFzZUZyZXF1ZW5jeScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2VGcmVxdWVuY3k7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmcmVxKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2Jhc2VGcmVxdWVuY3kgPSBmcmVxO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLm1pbiA9IGZyZXE7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IubWluID0gZnJlcTtcblx0ICAgICAgICAgICAgdGhpcy5vY3RhdmVzID0gdGhpcy5fb2N0YXZlcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QaGFzZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGhhc2VyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ1EnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5RLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLlEgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZmlsdGVyc0wubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc0xbaV0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9maWx0ZXJzTFtpXSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2ZpbHRlcnNMID0gbnVsbDtcblx0ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX2ZpbHRlcnNSLmxlbmd0aDsgaisrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlcnNSW2pdLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyc1Jbal0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9maWx0ZXJzUiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBoYXNlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEp1c3QgbGlrZSBhIHN0ZXJlbyBmZWVkYmFjayBlZmZlY3QsIGJ1dCB0aGUgZmVlZGJhY2sgaXMgcm91dGVkIGZyb20gbGVmdCB0byByaWdodFxuXHRcdCAqICAgICAgICAgYW5kIHJpZ2h0IHRvIGxlZnQgaW5zdGVhZCBvZiBvbiB0aGUgc2FtZSBjaGFubmVsLlxuXHRcdCAqXG5cdFx0ICpcdEBjb25zdHJ1Y3RvclxuXHRcdCAqXHRAZXh0ZW5kcyB7VG9uZS5TdGVyZW9FZmZlY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ2ZlZWRiYWNrJ10sIFRvbmUuRmVlZGJhY2tFZmZlY3QpO1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBmZWVkYmFjayBmcm9tIHRoZSBvdXRwdXRcblx0XHRcdCAqICBiYWNrIGludG8gdGhlIGlucHV0IG9mIHRoZSBlZmZlY3QgKHJvdXRlZFxuXHRcdFx0ICogIGFjcm9zcyBsZWZ0IGFuZCByaWdodCBjaGFubmVscykuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5mZWVkYmFjaywgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbGVmdCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSByaWdodCBzaWRlIGZlZWJhY2tcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1JMID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTC5jaGFpbih0aGlzLl9mZWVkYmFja0xSLCB0aGlzLmVmZmVjdFNlbmRSKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFJldHVyblIuY2hhaW4odGhpcy5fZmVlZGJhY2tSTCwgdGhpcy5lZmZlY3RTZW5kTCk7XG5cdCAgICAgICAgdGhpcy5mZWVkYmFjay5mYW4odGhpcy5fZmVlZGJhY2tMUi5nYWluLCB0aGlzLl9mZWVkYmFja1JMLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFsnZmVlZGJhY2snXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QsIFRvbmUuU3RlcmVvRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU3RlcmVvRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydmZWVkYmFjayddKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZlZWRiYWNrID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1JMLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1JMID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5QaW5nUG9uZ0RlbGF5IGlzIGEgZmVlZGJhY2sgZGVsYXkgZWZmZWN0IHdoZXJlIHRoZSBlY2hvIGlzIGhlYXJkXG5cdFx0ICogICAgICAgICAgZmlyc3QgaW4gb25lIGNoYW5uZWwgYW5kIG5leHQgaW4gdGhlIG9wcG9zaXRlIGNoYW5uZWwuIEluIGEgc3RlcmVvXG5cdFx0ICogICAgICAgICAgc3lzdGVtIHRoZXNlIGFyZSB0aGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMuXG5cdFx0ICogICAgICAgICAgUGluZ1BvbmdEZWxheSBpbiBtb3JlIHNpbXBsaWZpZWQgdGVybXMgaXMgdHdvIFRvbmUuRmVlZGJhY2tEZWxheXNcblx0XHQgKiAgICAgICAgICB3aXRoIGluZGVwZW5kZW50IGRlbGF5IHZhbHVlcy4gRWFjaCBkZWxheSBpcyByb3V0ZWQgdG8gb25lIGNoYW5uZWxcblx0XHQgKiAgICAgICAgICAobGVmdCBvciByaWdodCksIGFuZCB0aGUgY2hhbm5lbCB0cmlnZ2VyZWQgc2Vjb25kIHdpbGwgYWx3YXlzXG5cdFx0ICogICAgICAgICAgdHJpZ2dlciBhdCB0aGUgc2FtZSBpbnRlcnZhbCBhZnRlciB0aGUgZmlyc3QuXG5cdFx0ICpcblx0XHQgKiBcdEBjb25zdHJ1Y3RvclxuXHRcdCAqIFx0QGV4dGVuZHMge1RvbmUuU3RlcmVvWEZlZWRiYWNrRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge1RpbWV8T2JqZWN0fSBbZGVsYXlUaW1lXSBUaGUgZGVsYXlUaW1lIGJldHdlZW4gY29uc2VjdXRpdmUgZWNob3MuXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2U9fSBmZWVkYmFjayBUaGUgYW1vdW50IG9mIHRoZSBlZmZlY3RlZCBzaWduYWwgd2hpY2hcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZlZCBiYWNrIHRocm91Z2ggdGhlIGRlbGF5LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwaW5nUG9uZyA9IG5ldyBUb25lLlBpbmdQb25nRGVsYXkoXCI0blwiLCAwLjIpLnRvTWFzdGVyKCk7XG5cdFx0ICogdmFyIGRydW0gPSBuZXcgVG9uZS5EcnVtU3ludGgoKS5jb25uZWN0KHBpbmdQb25nKTtcblx0XHQgKiBkcnVtLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCIzMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBpbmdQb25nRGVsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZGVsYXlUaW1lJyxcblx0ICAgICAgICAgICAgJ2ZlZWRiYWNrJ1xuXHQgICAgICAgIF0sIFRvbmUuUGluZ1BvbmdEZWxheSk7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZSBvbiB0aGUgbGVmdCBzaWRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xlZnREZWxheSA9IG5ldyBUb25lLkRlbGF5KDAsIG9wdGlvbnMubWF4RGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZGVsYXkgbm9kZSBvbiB0aGUgcmlnaHQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yaWdodERlbGF5ID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwcmVkZWxheSBvbiB0aGUgcmlnaHQgc2lkZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9yaWdodFByZURlbGF5ID0gbmV3IFRvbmUuRGVsYXkoMCwgb3B0aW9ucy5tYXhEZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBkZWxheSB0aW1lIHNpZ25hbFxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZGVsYXlUaW1lLCBUb25lLlR5cGUuVGltZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IGl0IHVwXG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kTC5jaGFpbih0aGlzLl9sZWZ0RGVsYXksIHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbih0aGlzLl9yaWdodFByZURlbGF5LCB0aGlzLl9yaWdodERlbGF5LCB0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lLmZhbih0aGlzLl9sZWZ0RGVsYXkuZGVsYXlUaW1lLCB0aGlzLl9yaWdodERlbGF5LmRlbGF5VGltZSwgdGhpcy5fcmlnaHRQcmVEZWxheS5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8vcmVhcnJhbmdlZCB0aGUgZmVlZGJhY2sgdG8gYmUgYWZ0ZXIgdGhlIHJpZ2h0UHJlRGVsYXlcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja0xSLmNvbm5lY3QodGhpcy5fcmlnaHREZWxheSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydkZWxheVRpbWUnXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QaW5nUG9uZ0RlbGF5LCBUb25lLlN0ZXJlb1hGZWVkYmFja0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaW5nUG9uZ0RlbGF5LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdkZWxheVRpbWUnOiAwLjI1LFxuXHQgICAgICAgICdtYXhEZWxheVRpbWUnOiAxXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QaW5nUG9uZ0RlbGF5fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBpbmdQb25nRGVsYXkucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9YRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9sZWZ0RGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xlZnREZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHREZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHREZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcmlnaHRQcmVEZWxheS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcmlnaHRQcmVEZWxheSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoWydkZWxheVRpbWUnXSk7XG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QaW5nUG9uZ0RlbGF5O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QaXRjaFNoaWZ0IGRvZXMgbmVhci1yZWFsdGltZSBwaXRjaCBzaGlmdGluZyB0byB0aGUgaW5jb21pbmcgc2lnbmFsLlxuXHRcdCAqICAgICAgICAgVGhlIGVmZmVjdCBpcyBhY2hpZXZlZCBieSBzcGVlZGluZyB1cCBvciBzbG93aW5nIGRvd24gdGhlIGRlbGF5VGltZVxuXHRcdCAqICAgICAgICAgb2YgYSBEZWxheU5vZGUgdXNpbmcgYSBzYXd0b290aCB3YXZlLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZvdW5kIGluIFt0aGlzIHBkZl0oaHR0cDovL2RzcC1ib29rLm5hcm9kLnJ1L3NvdW5kcHJvYy5wZGYpLlxuXHRcdCAqICAgICAgICAgQWRkaXRpb25hbCByZWZlcmVuY2UgYnkgW01pbGxlciBQdWNrZXRdKGh0dHA6Ly9tc3AudWNzZC5lZHUvdGVjaG5pcXVlcy92MC4xMS9ib29rLWh0bWwvbm9kZTExNS5odG1sKS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5GZWVkYmFja0VmZmVjdH1cblx0XHQgKiAgQHBhcmFtIHtJbnRlcnZhbD19IHBpdGNoIFRoZSBpbnRlcnZhbCB0byB0cmFuc3Bvc2UgdGhlIGluY29taW5nIHNpZ25hbCBieS5cblx0XHQgKi9cblx0ICAgIFRvbmUuUGl0Y2hTaGlmdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3BpdGNoJ10sIFRvbmUuUGl0Y2hTaGlmdCk7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwaXRjaCBzaWduYWxcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuU2lnbmFsfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVXNlcyB0d28gRGVsYXlOb2RlcyB0byBjb3ZlciB1cCB0aGUganVtcCBpblxuXHRcdFx0ICogIHRoZSBzYXd0b290aCB3YXZlLlxuXHRcdFx0ICogIEB0eXBlICB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheUEgPSBuZXcgVG9uZS5EZWxheSgwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlyc3QgTEZPLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0EgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDAuMSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnc2F3dG9vdGgnXG5cdCAgICAgICAgfSkuY29ubmVjdCh0aGlzLl9kZWxheUEuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc2Vjb25kIERlbGF5Tm9kZVxuXHRcdFx0ICogIEB0eXBlICB7RGVsYXlOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheUIgPSBuZXcgVG9uZS5EZWxheSgwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmlyc3QgTEZPLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb0IgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAnbWluJzogMCxcblx0ICAgICAgICAgICAgJ21heCc6IDAuMSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnc2F3dG9vdGgnLFxuXHQgICAgICAgICAgICAncGhhc2UnOiAxODBcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2RlbGF5Qi5kZWxheVRpbWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENyb3NzZmFkZSBxdWlja2x5IGJldHdlZW4gdGhlIHR3byBkZWxheSBsaW5lc1xuXHRcdFx0ICogIHRvIGNvdmVyIHVwIHRoZSBqdW1wIGluIHRoZSBzYXd0b290aCB3YXZlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkNyb3NzRmFkZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlID0gbmV3IFRvbmUuQ3Jvc3NGYWRlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTEZPIHdoaWNoIGFsdGVybmF0ZXMgYmV0d2VlbiB0aGUgdHdvXG5cdFx0XHQgKiAgZGVsYXkgbGluZXMgdG8gY292ZXIgdXAgdGhlIGRpc3Bhcml0eSBpbiB0aGVcblx0XHRcdCAqICBzYXd0b290aCB3YXZlLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZUxGTyA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4JzogMSxcblx0ICAgICAgICAgICAgJ3R5cGUnOiAndHJpYW5nbGUnLFxuXHQgICAgICAgICAgICAncGhhc2UnOiA5MFxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5fY3Jvc3NGYWRlLmZhZGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheSBub2RlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuRGVsYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrRGVsYXkgPSBuZXcgVG9uZS5EZWxheShvcHRpb25zLmRlbGF5VGltZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtb3VudCBvZiBkZWxheSBvbiB0aGUgaW5wdXQgc2lnbmFsXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWxheVRpbWUgPSB0aGlzLl9mZWVkYmFja0RlbGF5LmRlbGF5VGltZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgnZGVsYXlUaW1lJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSG9sZCB0aGUgY3VycmVudCBwaXRjaFxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BpdGNoID0gb3B0aW9ucy5waXRjaDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIb2xkIHRoZSBjdXJyZW50IHdpbmRvd1NpemVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl93aW5kb3dTaXplID0gb3B0aW9ucy53aW5kb3dTaXplO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgdHdvIGRlbGF5IGxpbmVzIHVwXG5cdCAgICAgICAgdGhpcy5fZGVsYXlBLmNvbm5lY3QodGhpcy5fY3Jvc3NGYWRlLmEpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5Qi5jb25uZWN0KHRoaXMuX2Nyb3NzRmFkZS5iKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeS5mYW4odGhpcy5fbGZvQS5mcmVxdWVuY3ksIHRoaXMuX2xmb0IuZnJlcXVlbmN5LCB0aGlzLl9jcm9zc0ZhZGVMRk8uZnJlcXVlbmN5KTtcblx0ICAgICAgICAvL3JvdXRlIHRoZSBpbnB1dFxuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5mYW4odGhpcy5fZGVsYXlBLCB0aGlzLl9kZWxheUIpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZS5jaGFpbih0aGlzLl9mZWVkYmFja0RlbGF5LCB0aGlzLmVmZmVjdFJldHVybik7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgTEZPcyBhdCB0aGUgc2FtZSB0aW1lXG5cdCAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgdGhpcy5fbGZvQS5zdGFydChub3cpO1xuXHQgICAgICAgIHRoaXMuX2xmb0Iuc3RhcnQobm93KTtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8uc3RhcnQobm93KTtcblx0ICAgICAgICAvL3NldCB0aGUgaW5pdGlhbCB2YWx1ZVxuXHQgICAgICAgIHRoaXMud2luZG93U2l6ZSA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QaXRjaFNoaWZ0LCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5QaXRjaFNoaWZ0LmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdwaXRjaCc6IDAsXG5cdCAgICAgICAgJ3dpbmRvd1NpemUnOiAwLjEsXG5cdCAgICAgICAgJ2RlbGF5VGltZSc6IDAsXG5cdCAgICAgICAgJ2ZlZWRiYWNrJzogMFxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlcGl0Y2ggdGhlIGluY29taW5nIHNpZ25hbCBieSBzb21lIGludGVydmFsIChtZWFzdXJlZFxuXHRcdCAqIGluIHNlbWktdG9uZXMpLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBpdGNoU2hpZnQjXG5cdFx0ICogQHR5cGUge0ludGVydmFsfVxuXHRcdCAqIEBuYW1lIHBpdGNoXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBwaXRjaFNoaWZ0LnBpdGNoID0gLTEyOyAvL2Rvd24gb25lIG9jdGF2ZVxuXHRcdCAqIHBpdGNoU2hpZnQucGl0Y2ggPSA3OyAvL3VwIGEgZmlmdGhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBpdGNoU2hpZnQucHJvdG90eXBlLCAncGl0Y2gnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9waXRjaDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3BpdGNoID0gaW50ZXJ2YWw7XG5cdCAgICAgICAgICAgIHZhciBmYWN0b3IgPSAwO1xuXHQgICAgICAgICAgICBpZiAoaW50ZXJ2YWwgPCAwKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1pbiA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9BLm1heCA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1pbiA9IDA7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9sZm9CLm1heCA9IHRoaXMuX3dpbmRvd1NpemU7XG5cdCAgICAgICAgICAgICAgICBmYWN0b3IgPSBUb25lLmludGVydmFsVG9GcmVxdWVuY3lSYXRpbyhpbnRlcnZhbCAtIDEpICsgMTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0EubWluID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0EubWF4ID0gMDtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0IubWluID0gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xmb0IubWF4ID0gMDtcblx0ICAgICAgICAgICAgICAgIGZhY3RvciA9IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGludGVydmFsKSAtIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZnJlcXVlbmN5LnZhbHVlID0gZmFjdG9yICogKDEuMiAvIHRoaXMuX3dpbmRvd1NpemUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHdpbmRvdyBzaXplIGNvcnJlc3BvbmRzIHJvdWdobHkgdG8gdGhlIHNhbXBsZSBsZW5ndGggaW4gYSBsb29waW5nIHNhbXBsZXIuXG5cdFx0ICogU21hbGxlciB2YWx1ZXMgYXJlIGRlc2lyYWJsZSBmb3IgYSBsZXNzIG5vdGljZWFibGUgZGVsYXkgdGltZSBvZiB0aGUgcGl0Y2ggc2hpZnRlZFxuXHRcdCAqIHNpZ25hbCwgYnV0IGxhcmdlciB2YWx1ZXMgd2lsbCByZXN1bHQgaW4gc21vb3RoZXIgcGl0Y2ggc2hpZnRpbmcgZm9yIGxhcmdlciBpbnRlcnZhbHMuXG5cdFx0ICogQSBub21pbmFsIHJhbmdlIG9mIDAuMDMgdG8gMC4xIGlzIHJlY29tbWVuZGVkLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBpdGNoU2hpZnQjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgd2luZG93U2l6ZVxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogcGl0Y2hTaGlmdC53aW5kb3dTaXplID0gMC4xO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGl0Y2hTaGlmdC5wcm90b3R5cGUsICd3aW5kb3dTaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93U2l6ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fd2luZG93U2l6ZSA9IHRoaXMudG9TZWNvbmRzKHNpemUpO1xuXHQgICAgICAgICAgICB0aGlzLnBpdGNoID0gdGhpcy5fcGl0Y2g7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBpdGNoU2hpZnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBpdGNoU2hpZnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5GZWVkYmFja0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9kZWxheUEuZGlzY29ubmVjdCgpO1xuXHQgICAgICAgIHRoaXMuX2RlbGF5QSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlCLmRpc2Nvbm5lY3QoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheUIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb0EuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0EgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmb0IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2xmb0IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY3Jvc3NGYWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jcm9zc0ZhZGVMRk8uZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2Nyb3NzRmFkZUxGTyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoJ2RlbGF5VGltZScpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrRGVsYXkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrRGVsYXkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVsYXlUaW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QaXRjaFNoaWZ0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgQnVmZmVyU291cmNlTm9kZS5cblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0gIHtBdWRpb0J1ZmZlcnxUb25lLkJ1ZmZlcn0gIGJ1ZmZlciAgIFRoZSBidWZmZXIgdG8gcGxheVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIG9ubG9hZCAgVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBpcyBkb25lIHBsYXlpbmcuXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdidWZmZXInLFxuXHQgICAgICAgICAgICAnb25sb2FkJ1xuXHQgICAgICAgIF0sIFRvbmUuQnVmZmVyU291cmNlKTtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlXG5cdFx0XHQgKiAgYnVmZmVyIHNvdXJjZSBpcyBkb25lIHBsYXlpbmcuXG5cdFx0XHQgKiAgQHR5cGUgIHtGdW5jdGlvbn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG9wdGlvbnMub25lbmRlZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdGltZSB0aGF0IHRoZSBidWZmZXIgd2FzIHN0YXJ0ZWQuXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IC0xO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEFuIGFkZGl0aW9uYWwgZmxhZyBpZiB0aGUgYWN0dWFsIEJ1ZmZlclNvdXJjZU5vZGVcblx0XHRcdCAqICBoYXMgYmVlbiBzdGFydGVkLiBiL2Mgc3RvcHBpbmcgYW4gdW5zdGFydGVkIGJ1ZmZlclxuXHRcdFx0ICogIHdpbGwgdGhyb3cgaXQgaW50byBhbiBpbnZhbGlkIHN0YXRlXG5cdFx0XHQgKiAgQHR5cGUgIHtCb29sZWFufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zb3VyY2VTdGFydGVkID0gZmFsc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgRmxhZyBpZiB0aGUgc291cmNlIGhhcyBhbHJlYWR5IGJlZW4gc3RvcHBlZFxuXHRcdFx0ICogIEB0eXBlICB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlU3RvcHBlZCA9IGZhbHNlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0aW1lIHRoYXQgdGhlIGJ1ZmZlciBpcyBzY2hlZHVsZWQgdG8gc3RvcC5cblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RvcFRpbWUgPSAtMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZ2FpbiBub2RlIHdoaWNoIGVudmVsb3BlcyB0aGUgQnVmZmVyU291cmNlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2dhaW5Ob2RlID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGJ1ZmZlciBzb3VyY2Vcblx0XHRcdCAqICBAdHlwZSAge0F1ZGlvQnVmZmVyU291cmNlTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5jb25uZWN0KHRoaXMuX2dhaW5Ob2RlKTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2Uub25lbmRlZCA9IHRoaXMuX29uZW5kZWQuYmluZCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBwcml2YXRlIGJ1ZmZlciBpbnN0YW5jZVxuXHRcdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihvcHRpb25zLmJ1ZmZlciwgb3B0aW9ucy5vbmxvYWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwbGF5YmFja1JhdGUgb2YgdGhlIGJ1ZmZlclxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG5ldyBUb25lLlBhcmFtKHRoaXMuX3NvdXJjZS5wbGF5YmFja1JhdGUsIFRvbmUuVHlwZS5Qb3NpdGl2ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZhZGVJbiB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVJbiA9IG9wdGlvbnMuZmFkZUluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlT3V0IHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmFkZU91dCA9IG9wdGlvbnMuZmFkZU91dDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjdXJ2ZSBhcHBsaWVkIHRvIHRoZSBmYWRlcywgZWl0aGVyIFwibGluZWFyXCIgb3IgXCJleHBvbmVudGlhbFwiXG5cdFx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jdXJ2ZSA9IG9wdGlvbnMuY3VydmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHRoYXQgdGhlIGJ1ZmZlciByYW1wcyB0b1xuXHRcdFx0ICogIEB0eXBlIHtHYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9nYWluID0gMTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBvbmVuZGVkIHRpbWVvdXRcblx0XHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25lbmRlZFRpbWVvdXQgPSAtMTtcblx0ICAgICAgICAvL3NldCBzb21lIHZhbHVlcyBpbml0aWFsbHlcblx0ICAgICAgICB0aGlzLmxvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBvcHRpb25zLmxvb3BTdGFydDtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBvcHRpb25zLmxvb3BFbmQ7XG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUudmFsdWUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkJ1ZmZlclNvdXJjZSwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25lbmRlZCc6IFRvbmUubm9PcCxcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAwLFxuXHQgICAgICAgICdmYWRlSW4nOiAwLFxuXHQgICAgICAgICdmYWRlT3V0JzogMCxcblx0ICAgICAgICAnY3VydmUnOiAnbGluZWFyJyxcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXR1cm5zIHRoZSBwbGF5YmFjayBzdGF0ZSBvZiB0aGUgc291cmNlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtUb25lLlN0YXRlfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuQnVmZmVyU291cmNlI1xuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZUF0VGltZSh0aGlzLm5vdygpKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHBsYXliYWNrIHN0YXRlIGF0IHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9ICB0aW1lICBUaGUgdGltZSB0byB0ZXN0IHRoZSBzdGF0ZSBhdFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5TdGF0ZX0gIFRoZSBwbGF5YmFjayBzdGF0ZS4gXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuZ2V0U3RhdGVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSAmJiB0aW1lID49IHRoaXMuX3N0YXJ0VGltZSAmJiAhdGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5TdGF0ZS5TdGFydGVkO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlN0YXRlLlN0b3BwZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdGFydCB0aGUgYnVmZmVyXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHBhcmFtICB7R2Fpbn0gIFtnYWluPTFdICBUaGUgZ2FpbiB0byBwbGF5IHRoZSBidWZmZXIgYmFjayBhdC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBmYWRlSW5UaW1lICBUaGUgb3B0aW9uYWwgZmFkZUluIHJhbXAgdGltZS5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuQnVmZmVyU291cmNlfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24sIGdhaW4sIGZhZGVJblRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc3RhcnRUaW1lICE9PSAtMSkge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvbmUuQnVmZmVyU291cmNlIGNhbiBvbmx5IGJlIHN0YXJ0ZWQgb25jZS4nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCF0aGlzLmJ1ZmZlci5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLkJ1ZmZlclNvdXJjZTogYnVmZmVyIGlzIGVpdGhlciBub3Qgc2V0IG9yIG5vdCBsb2FkZWQuJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL2lmIGl0J3MgYSBsb29wIHRoZSBkZWZhdWx0IG9mZnNldCBpcyB0aGUgbG9vcHN0YXJ0IHBvaW50XG5cdCAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCB0aGlzLmxvb3BTdGFydCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy9vdGhlcndpc2UgdGhlIGRlZmF1bHQgb2Zmc2V0IGlzIDBcblx0ICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgZ2FpbiA9IFRvbmUuZGVmYXVsdEFyZyhnYWluLCAxKTtcblx0ICAgICAgICB0aGlzLl9nYWluID0gZ2Fpbjtcblx0ICAgICAgICBmYWRlSW5UaW1lID0gdGhpcy50b1NlY29uZHMoVG9uZS5kZWZhdWx0QXJnKGZhZGVJblRpbWUsIHRoaXMuZmFkZUluKSk7XG5cdCAgICAgICAgdGhpcy5mYWRlSW4gPSBmYWRlSW5UaW1lO1xuXHQgICAgICAgIGlmIChmYWRlSW5UaW1lID4gMCkge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKDAsIHRpbWUpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5jdXJ2ZSA9PT0gJ2xpbmVhcicpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodGhpcy5fZ2FpbiwgdGltZSArIGZhZGVJblRpbWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUodGhpcy5fZ2FpbiwgdGltZSwgZmFkZUluVGltZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKGdhaW4sIHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lO1xuXHQgICAgICAgIHZhciBjb21wdXRlZER1ciA9IHRoaXMudG9TZWNvbmRzKFRvbmUuZGVmYXVsdEFyZyhkdXJhdGlvbiwgdGhpcy5idWZmZXIuZHVyYXRpb24gLSBvZmZzZXQgJSB0aGlzLmJ1ZmZlci5kdXJhdGlvbikpO1xuXHQgICAgICAgIGNvbXB1dGVkRHVyID0gTWF0aC5tYXgoY29tcHV0ZWREdXIsIDApO1xuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZChkdXJhdGlvbikpIHtcblx0ICAgICAgICAgICAgLy9jbGlwIHRoZSBkdXJhdGlvbiB3aGVuIG5vdCBsb29waW5nXG5cdCAgICAgICAgICAgIGlmICghdGhpcy5sb29wKSB7XG5cdCAgICAgICAgICAgICAgICBjb21wdXRlZER1ciA9IE1hdGgubWluKGNvbXB1dGVkRHVyLCB0aGlzLmJ1ZmZlci5kdXJhdGlvbiAtIG9mZnNldCAlIHRoaXMuYnVmZmVyLmR1cmF0aW9uKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnN0b3AodGltZSArIGNvbXB1dGVkRHVyLCB0aGlzLmZhZGVPdXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3N0YXJ0IHRoZSBidWZmZXIgc291cmNlXG5cdCAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuXHQgICAgICAgICAgICAvL21vZGlmeSB0aGUgb2Zmc2V0IGlmIGl0J3MgZ3JlYXRlciB0aGFuIHRoZSBsb29wIHRpbWVcblx0ICAgICAgICAgICAgdmFyIGxvb3BFbmQgPSB0aGlzLmxvb3BFbmQgfHwgdGhpcy5idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgICAgIHZhciBsb29wU3RhcnQgPSB0aGlzLmxvb3BTdGFydDtcblx0ICAgICAgICAgICAgdmFyIGxvb3BEdXJhdGlvbiA9IGxvb3BFbmQgLSBsb29wU3RhcnQ7XG5cdCAgICAgICAgICAgIC8vbW92ZSB0aGUgb2Zmc2V0IGJhY2tcblx0ICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBsb29wRW5kKSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSAob2Zmc2V0IC0gbG9vcFN0YXJ0KSAlIGxvb3BEdXJhdGlvbiArIGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl9zb3VyY2UuYnVmZmVyID0gdGhpcy5idWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLmxvb3BFbmQgPSB0aGlzLmxvb3BFbmQgfHwgdGhpcy5idWZmZXIuZHVyYXRpb247XG5cdCAgICAgICAgaWYgKG9mZnNldCA8IHRoaXMuYnVmZmVyLmR1cmF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN0YXJ0ZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2Uuc3RhcnQodGltZSwgb2Zmc2V0KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGJ1ZmZlci4gT3B0aW9uYWxseSBhZGQgYSByYW1wIHRpbWUgdG8gZmFkZSB0aGVcblx0XHQgKiAgYnVmZmVyIG91dC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICB0aW1lICAgICAgICAgVGhlIHRpbWUgdGhlIGJ1ZmZlciBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHBhcmFtICB7VGltZT19ICBmYWRlT3V0VGltZSAgSG93IGxvbmcgdGhlIGdhaW4gc2hvdWxkIGZhZGUgb3V0IGZvclxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lLCBmYWRlT3V0VGltZSkge1xuXHQgICAgICAgIGlmICghdGhpcy5idWZmZXIubG9hZGVkKSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5CdWZmZXJTb3VyY2U6IGJ1ZmZlciBpcyBlaXRoZXIgbm90IHNldCBvciBub3QgbG9hZGVkLicpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5fc291cmNlU3RvcHBlZCkge1xuXHQgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL2lmIHRoZSBldmVudCBoYXMgYWxyZWFkeSBiZWVuIHNjaGVkdWxlZCwgY2xlYXIgaXRcblx0ICAgICAgICBpZiAodGhpcy5fc3RvcFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3N0b3AgaWYgaXQncyBzY2hlZHVsZSBiZWZvcmUgdGhlIHN0YXJ0IHRpbWVcblx0ICAgICAgICBpZiAodGltZSA8PSB0aGlzLl9zdGFydFRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4udmFsdWUgPSAwO1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IE1hdGgubWF4KHRoaXMuX3N0YXJ0VGltZSArIHRoaXMuZmFkZUluICsgdGhpcy5zYW1wbGVUaW1lLCB0aW1lKTtcblx0ICAgICAgICAvL2NhbmNlbCB0aGUgcHJldmlvdXMgY3VydmVcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zdG9wVGltZSA9IHRpbWU7XG5cdCAgICAgICAgLy90aGUgZmFkZU91dCB0aW1lXG5cdCAgICAgICAgZmFkZU91dFRpbWUgPSB0aGlzLnRvU2Vjb25kcyhUb25lLmRlZmF1bHRBcmcoZmFkZU91dFRpbWUsIHRoaXMuZmFkZU91dCkpO1xuXHQgICAgICAgIHZhciBoZWxkRHVyYXRpb24gPSB0aW1lIC0gdGhpcy5fc3RhcnRUaW1lIC0gdGhpcy5mYWRlSW4gLSB0aGlzLnNhbXBsZVRpbWU7XG5cdCAgICAgICAgaWYgKCF0aGlzLmxvb3ApIHtcblx0ICAgICAgICAgICAgLy9tYWtlIHN1cmUgdGhlIGZhZGUgZG9lcyBub3QgZ28gYmV5b25kIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlclxuXHQgICAgICAgICAgICBoZWxkRHVyYXRpb24gPSBNYXRoLm1pbihoZWxkRHVyYXRpb24sIHRoaXMuYnVmZmVyLmR1cmF0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZmFkZU91dFRpbWUgPSBNYXRoLm1pbihoZWxkRHVyYXRpb24sIGZhZGVPdXRUaW1lKTtcblx0ICAgICAgICB2YXIgc3RhcnRGYWRlID0gdGltZSAtIGZhZGVPdXRUaW1lO1xuXHQgICAgICAgIGlmIChmYWRlT3V0VGltZSA+IHRoaXMuc2FtcGxlVGltZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKHRoaXMuX2dhaW4sIHN0YXJ0RmFkZSk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmN1cnZlID09PSAnbGluZWFyJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2dhaW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxBcHByb2FjaFZhbHVlQXRUaW1lKDAsIHN0YXJ0RmFkZSwgZmFkZU91dFRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgVG9uZS5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl9vbmVuZGVkVGltZW91dCk7XG5cdCAgICAgICAgdGhpcy5fb25lbmRlZFRpbWVvdXQgPSBUb25lLmNvbnRleHQuc2V0VGltZW91dCh0aGlzLl9vbmVuZGVkLmJpbmQodGhpcyksIHRoaXMuX3N0b3BUaW1lIC0gdGhpcy5ub3coKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENhbmNlbCBhIHNjaGVkdWxlZCBzdG9wIGV2ZW50XG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkJ1ZmZlclNvdXJjZX0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZS5jYW5jZWxTdG9wID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGFydFRpbWUgIT09IC0xICYmICF0aGlzLl9zb3VyY2VTdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIC8vY2FuY2VsIHRoZSBzdG9wIGVudmVsb3BlXG5cdCAgICAgICAgICAgIHZhciBmYWRlSW5UaW1lID0gdGhpcy50b1NlY29uZHModGhpcy5mYWRlSW4pO1xuXHQgICAgICAgICAgICB0aGlzLl9nYWluTm9kZS5nYWluLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyh0aGlzLl9zdGFydFRpbWUgKyBmYWRlSW5UaW1lICsgdGhpcy5zYW1wbGVUaW1lKTtcblx0ICAgICAgICAgICAgdGhpcy5fZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCBNYXRoLm1heCh0aGlzLm5vdygpLCB0aGlzLl9zdGFydFRpbWUgKyBmYWRlSW5UaW1lICsgdGhpcy5zYW1wbGVUaW1lKSk7XG5cdCAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclRpbWVvdXQodGhpcy5fb25lbmRlZFRpbWVvdXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9zdG9wVGltZSA9IC0xO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGVuZGVkLlxuXHRcdCAqICBJbnZva2VzIGBvbmVuZGVkYCBhbmQgZGlzcG9zZXMgdGhlIG5vZGUuXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuX29uZW5kZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VTdG9wcGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN0b3BwZWQgPSB0cnVlO1xuXHQgICAgICAgICAgICAvL2FsbG93IGFkZGl0aW9uYWwgdGltZSBmb3IgdGhlIGV4cG9uZW50aWFsIGN1cnZlIHRvIGZ1bGx5IGRlY2F5XG5cdCAgICAgICAgICAgIHZhciBhZGRpdGlvbmFsVGFpbCA9IHRoaXMuY3VydmUgPT09ICdleHBvbmVudGlhbCcgPyB0aGlzLmZhZGVPdXQgKiAyIDogMDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVN0YXJ0ZWQgJiYgdGhpcy5fc3RvcFRpbWUgIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2Uuc3RvcCh0aGlzLl9zdG9wVGltZSArIGFkZGl0aW9uYWxUYWlsKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLm9uZW5kZWQodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBzdGFydCBhdCB0aGlzIHBvc2l0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wU3RhcnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UubG9vcFN0YXJ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5sb29wU3RhcnQgPSB0aGlzLnRvU2Vjb25kcyhsb29wU3RhcnQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgbG9vcCBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIGVuZCBhdCB0aGlzIHBvc2l0aW9uLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UubG9vcEVuZCA9IHRoaXMudG9TZWNvbmRzKGxvb3BFbmQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF1ZGlvIGJ1ZmZlciBiZWxvbmdpbmcgdG8gdGhlIHBsYXllci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5CdWZmZXJTb3VyY2UjXG5cdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdCAqIEBuYW1lIGJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQnVmZmVyU291cmNlLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVyIHNob3VsZCBsb29wIG9uY2UgaXQncyBvdmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkJ1ZmZlclNvdXJjZSNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb29wXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5CdWZmZXJTb3VyY2UucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zb3VyY2UubG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHRoaXMuY2FuY2VsU3RvcCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5CdWZmZXJTb3VyY2V9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkJ1ZmZlclNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMub25lbmRlZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLm9uZW5kZWQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NvdXJjZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9nYWluTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZ2Fpbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSAtMTtcblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG51bGw7XG5cdCAgICAgICAgVG9uZS5jb250ZXh0LmNsZWFyVGltZW91dCh0aGlzLl9vbmVuZGVkVGltZW91dCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQnVmZmVyU291cmNlO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuTm9pc2UgaXMgYSBub2lzZSBnZW5lcmF0b3IuIEl0IHVzZXMgbG9vcGVkIG5vaXNlIGJ1ZmZlcnMgdG8gc2F2ZSBvbiBwZXJmb3JtYW5jZS5cblx0XHQgKiAgICAgICAgICBUb25lLk5vaXNlIHN1cHBvcnRzIHRoZSBub2lzZSB0eXBlczogXCJwaW5rXCIsIFwid2hpdGVcIiwgYW5kIFwiYnJvd25cIi4gUmVhZCBtb3JlIGFib3V0XG5cdFx0ICogICAgICAgICAgY29sb3JzIG9mIG5vaXNlIG9uIFtXaWtpcGVkaWFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbG9yc19vZl9ub2lzZSkuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtzdHJpbmd9IHR5cGUgdGhlIG5vaXNlIHR5cGUgKHdoaXRlfHBpbmt8YnJvd24pXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9pbml0aWFsaXplIHRoZSBub2lzZSBhbmQgc3RhcnRcblx0XHQgKiB2YXIgbm9pc2UgPSBuZXcgVG9uZS5Ob2lzZShcInBpbmtcIikuc3RhcnQoKTtcblx0XHQgKlxuXHRcdCAqIC8vbWFrZSBhbiBhdXRvZmlsdGVyIHRvIHNoYXBlIHRoZSBub2lzZVxuXHRcdCAqIHZhciBhdXRvRmlsdGVyID0gbmV3IFRvbmUuQXV0b0ZpbHRlcih7XG5cdFx0ICogXHRcImZyZXF1ZW5jeVwiIDogXCI4bVwiLFxuXHRcdCAqIFx0XCJtaW5cIiA6IDgwMCxcblx0XHQgKiBcdFwibWF4XCIgOiAxNTAwMFxuXHRcdCAqIH0pLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuXHRcdCAqXG5cdFx0ICogLy9jb25uZWN0IHRoZSBub2lzZVxuXHRcdCAqIG5vaXNlLmNvbm5lY3QoYXV0b0ZpbHRlcik7XG5cdFx0ICogLy9zdGFydCB0aGUgYXV0b2ZpbHRlciBMRk9cblx0XHQgKiBhdXRvRmlsdGVyLnN0YXJ0KClcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWyd0eXBlJ10sIFRvbmUuTm9pc2UpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJTb3VyY2VOb2RlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgYnVmZmVyXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7QXVkaW9CdWZmZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl90eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBub2lzZS4gQWZmZWN0c1xuXHRcdFx0ICogIHRoZSBcImZyZXF1ZW5jeVwiIG9mIHRoZSBub2lzZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gb3B0aW9ucy5wbGF5YmFja1JhdGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Ob2lzZSwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndHlwZSc6ICd3aGl0ZScsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgbm9pc2UuIENhbiBiZSBcIndoaXRlXCIsIFwiYnJvd25cIiwgb3IgXCJwaW5rXCIuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuTm9pc2UjXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBub2lzZS50eXBlID0gXCJ3aGl0ZVwiO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTm9pc2UucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl90eXBlICE9PSB0eXBlKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodHlwZSBpbiBfbm9pc2VCdWZmZXJzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgLy9pZiBpdCdzIHBsYXlpbmcsIHN0b3AgYW5kIHJlc3RhcnQgaXRcblx0ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9wKG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KG5vdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb25lLk5vaXNlOiBpbnZhbGlkIHR5cGU6ICcgKyB0eXBlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBwbGF5YmFjayByYXRlIG9mIHRoZSBub2lzZS4gQWZmZWN0c1xuXHRcdCAqICB0aGUgXCJmcmVxdWVuY3lcIiBvZiB0aGUgbm9pc2UuXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQHNpZ25hbFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTm9pc2UucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2UucGxheWJhY2tSYXRlLnZhbHVlID0gcmF0ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGludGVybmFsIHN0YXJ0IG1ldGhvZFxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZS5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgYnVmZmVyID0gX25vaXNlQnVmZmVyc1t0aGlzLl90eXBlXTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2UoYnVmZmVyKS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2UubG9vcCA9IHRydWU7XG5cdCAgICAgICAgdGhpcy5fc291cmNlLnBsYXliYWNrUmF0ZS52YWx1ZSA9IHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB0aGlzLl9zb3VyY2Uuc3RhcnQodGhpcy50b1NlY29uZHModGltZSksIE1hdGgucmFuZG9tKCkgKiAoYnVmZmVyLmR1cmF0aW9uIC0gMC4wMDEpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgaW50ZXJuYWwgc3RvcCBtZXRob2Rcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5zdG9wKHRoaXMudG9TZWNvbmRzKHRpbWUpKTtcblx0ICAgICAgICAgICAgdGhpcy5fc291cmNlID0gbnVsbDtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogUmVzdGFydHMgdGhlIG5vaXNlLlxuXHRcdCAqIEBwYXJhbSAge1t0eXBlXX0gdGltZSBbZGVzY3JpcHRpb25dXG5cdFx0ICogQHJldHVybiB7W3R5cGVdfSAgICAgIFtkZXNjcmlwdGlvbl1cblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vVE9ETyBjb3VsZCBiZSBvcHRpbWl6ZWQgYnkgY2FuY2VsbGluZyB0aGUgYnVmZmVyIHNvdXJjZSAnc3RvcCdcblx0ICAgICAgICAvL3N0b3AgYW5kIHJlc3RhcnRcblx0ICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2UucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5fc291cmNlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2J1ZmZlciA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvLyBUSEUgQlVGRkVSU1xuXHQgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdCAgICAvL05vaXNlIGJ1ZmZlciBzdGF0c1xuXHQgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IDQ0MTAwICogNTtcblx0ICAgIHZhciBjaGFubmVscyA9IDI7XG5cdCAgICAvKipcblx0XHQgKlx0VGhlIG5vaXNlIGFycmF5cy4gR2VuZXJhdGVkIG9uIGluaXRpYWxpemF0aW9uLlxuXHRcdCAqICBib3Jyb3dlZCBoZWF2aWx5IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3phY2hhcnlkZW50b24vbm9pc2UuanNcblx0XHQgKiAgKGMpIDIwMTMgWmFjaCBEZW50b24gKE1JVClcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgX25vaXNlQXJyYXlzID0ge1xuXHQgICAgICAgICdwaW5rJzogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWxOdW0gPSAwOyBjaGFubmVsTnVtIDwgY2hhbm5lbHM7IGNoYW5uZWxOdW0rKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJbY2hhbm5lbE51bV0gPSBjaGFubmVsO1xuXHQgICAgICAgICAgICAgICAgdmFyIGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2O1xuXHQgICAgICAgICAgICAgICAgYjAgPSBiMSA9IGIyID0gYjMgPSBiNCA9IGI1ID0gYjYgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB3aGl0ZSA9IE1hdGgucmFuZG9tKCkgKiAyIC0gMTtcblx0ICAgICAgICAgICAgICAgICAgICBiMCA9IDAuOTk4ODYgKiBiMCArIHdoaXRlICogMC4wNTU1MTc5O1xuXHQgICAgICAgICAgICAgICAgICAgIGIxID0gMC45OTMzMiAqIGIxICsgd2hpdGUgKiAwLjA3NTA3NTk7XG5cdCAgICAgICAgICAgICAgICAgICAgYjIgPSAwLjk2OSAqIGIyICsgd2hpdGUgKiAwLjE1Mzg1Mjtcblx0ICAgICAgICAgICAgICAgICAgICBiMyA9IDAuODY2NSAqIGIzICsgd2hpdGUgKiAwLjMxMDQ4NTY7XG5cdCAgICAgICAgICAgICAgICAgICAgYjQgPSAwLjU1ICogYjQgKyB3aGl0ZSAqIDAuNTMyOTUyMjtcblx0ICAgICAgICAgICAgICAgICAgICBiNSA9IC0wLjc2MTYgKiBiNSAtIHdoaXRlICogMC4wMTY4OTg7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSA9IGIwICsgYjEgKyBiMiArIGIzICsgYjQgKyBiNSArIGI2ICsgd2hpdGUgKiAwLjUzNjI7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSAqPSAwLjExO1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIChyb3VnaGx5KSBjb21wZW5zYXRlIGZvciBnYWluXG5cdCAgICAgICAgICAgICAgICAgICAgYjYgPSB3aGl0ZSAqIDAuMTE1OTI2O1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG5cdCAgICAgICAgfSgpLFxuXHQgICAgICAgICdicm93bic6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBjaGFubmVsTnVtID0gMDsgY2hhbm5lbE51bSA8IGNoYW5uZWxzOyBjaGFubmVsTnVtKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJMZW5ndGgpO1xuXHQgICAgICAgICAgICAgICAgYnVmZmVyW2NoYW5uZWxOdW1dID0gY2hhbm5lbDtcblx0ICAgICAgICAgICAgICAgIHZhciBsYXN0T3V0ID0gMDtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgd2hpdGUgPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSA9IChsYXN0T3V0ICsgMC4wMiAqIHdoaXRlKSAvIDEuMDI7XG5cdCAgICAgICAgICAgICAgICAgICAgbGFzdE91dCA9IGNoYW5uZWxbaV07XG5cdCAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFtpXSAqPSAzLjU7ICAgIC8vIChyb3VnaGx5KSBjb21wZW5zYXRlIGZvciBnYWluXG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcblx0ICAgICAgICB9KCksXG5cdCAgICAgICAgJ3doaXRlJzogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGNoYW5uZWxOdW0gPSAwOyBjaGFubmVsTnVtIDwgY2hhbm5lbHM7IGNoYW5uZWxOdW0rKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICBidWZmZXJbY2hhbm5lbE51bV0gPSBjaGFubmVsO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbaV0gPSBNYXRoLnJhbmRvbSgpICogMiAtIDE7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcblx0ICAgICAgICB9KClcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKlx0c3RhdGljIG5vaXNlIGJ1ZmZlcnNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAdHlwZSB7VG9uZS5CdWZmZXJ9XG5cdFx0ICovXG5cdCAgICB2YXIgX25vaXNlQnVmZmVycyA9IHt9O1xuXHQgICAgLy9jcmVhdGUgdGhlIFRvbmUuQnVmZmVyc1xuXHQgICAgZnVuY3Rpb24gY3JlYXRlQnVmZmVycygpIHtcblx0ICAgICAgICBmb3IgKHZhciB0eXBlIGluIF9ub2lzZUFycmF5cykge1xuXHQgICAgICAgICAgICBfbm9pc2VCdWZmZXJzW3R5cGVdID0gbmV3IFRvbmUuQnVmZmVyKCkuZnJvbUFycmF5KF9ub2lzZUFycmF5c1t0eXBlXSk7XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHQgICAgLy9jcmVhdGUgdGhlIG5vaXNlIGJ1ZmZlcnNcblx0ICAgIFRvbmUuZ2V0Q29udGV4dChjcmVhdGVCdWZmZXJzKTtcblx0ICAgIFRvbmUuQ29udGV4dC5vbignaW5pdCcsIGNyZWF0ZUJ1ZmZlcnMpO1xuXHQgICAgcmV0dXJuIFRvbmUuTm9pc2U7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBTaW1wbGUgY29udm9sdXRpb24gY3JlYXRlZCB3aXRoIGRlY2F5aW5nIG5vaXNlLlxuXHRcdCAqICBcdFx0R2VuZXJhdGVzIGFuIEltcHVsc2UgUmVzcG9uc2UgQnVmZmVyXG5cdFx0ICogXHRcdFx0d2l0aCBUb25lLk9mZmxpbmUgdGhlbiBmZWVkcyB0aGUgSVIgaW50byBDb252b2x2ZXJOb2RlLlxuXHRcdCAqIFx0XHRcdE5vdGU6IHRoZSBSZXZlcmIgd2lsbCBub3QgbWFrZSBhbnkgc291bmQgdW50aWwgW2dlbmVyYXRlXSgjZ2VuZXJhdGUpXG5cdFx0ICogXHRcdFx0aGFzIGJlZW4gaW52b2tlZCBhbmQgcmVzb2x2ZWQuXG5cdFx0ICpcblx0XHQgKiBcdFx0XHRJbnNwaXJhdGlvbiBmcm9tIFtSZXZlcmJHZW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9hZGVsZXNwaW5hc3NlL3JldmVyYkdlbikuXG5cdFx0ICogXHRcdFx0Q29weXJpZ2h0IChjKSAyMDE0IEFsYW4gZGVMZXNwaW5hc3NlIEFwYWNoZSAyLjAgTGljZW5zZS5cblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Db252b2x2ZXJ9XG5cdFx0ICogIEBwYXJhbSB7VGltZT19IGRlY2F5IFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHJldmVyYmVyYXRlIGZvci5cblx0XHQgKi9cblx0ICAgIFRvbmUuUmV2ZXJiID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFsnZGVjYXknXSwgVG9uZS5SZXZlcmIpO1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQ29udm9sdmVyIG5vZGVcblx0XHRcdCAqICBAdHlwZSB7Q29udm9sdmVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gdGhpcy5jb250ZXh0LmNyZWF0ZUNvbnZvbHZlcigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGR1cmF0aW9uIG9mIHRoZSByZXZlcmJcblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZWNheSA9IG9wdGlvbnMuZGVjYXk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgYW1vdW50IG9mIHRpbWUgYmVmb3JlIHRoZSByZXZlcmIgaXMgZnVsbHlcblx0XHRcdCAqIHJhbXBlZCBpbi5cblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5wcmVEZWxheSA9IG9wdGlvbnMucHJlRGVsYXk7XG5cdCAgICAgICAgdGhpcy5jb25uZWN0RWZmZWN0KHRoaXMuX2NvbnZvbHZlcik7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5SZXZlcmIsIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5SZXZlcmIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2RlY2F5JzogMS41LFxuXHQgICAgICAgICdwcmVEZWxheSc6IDAuMDFcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBHZW5lcmF0ZSB0aGUgSW1wdWxzZSBSZXNwb25zZS4gUmV0dXJucyBhIHByb21pc2Ugd2hpbGUgdGhlIElSIGlzIGJlaW5nXG5cdFx0ICogZ2VuZXJhdGVkLlxuXHRcdCAqIEByZXR1cm4ge1Byb21pc2U8VG9uZS5SZXZlcmI+fSBQcm9taXNlIHdoaWNoIHJldHVybnMgdGhpcyBvYmplY3QuXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYi5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuT2ZmbGluZShmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vY3JlYXRlIGEgbm9pc2UgYnVyc3Qgd2hpY2ggZGVjYXlzIG92ZXIgdGhlIGR1cmF0aW9uXG5cdCAgICAgICAgICAgIHZhciBub2lzZUwgPSBuZXcgVG9uZS5Ob2lzZSgpO1xuXHQgICAgICAgICAgICB2YXIgbm9pc2VSID0gbmV3IFRvbmUuTm9pc2UoKTtcblx0ICAgICAgICAgICAgdmFyIG1lcmdlID0gbmV3IFRvbmUuTWVyZ2UoKTtcblx0ICAgICAgICAgICAgbm9pc2VMLmNvbm5lY3QobWVyZ2UubGVmdCk7XG5cdCAgICAgICAgICAgIG5vaXNlUi5jb25uZWN0KG1lcmdlLnJpZ2h0KTtcblx0ICAgICAgICAgICAgdmFyIGdhaW5Ob2RlID0gbmV3IFRvbmUuR2FpbigpLnRvTWFzdGVyKCk7XG5cdCAgICAgICAgICAgIG1lcmdlLmNvbm5lY3QoZ2Fpbk5vZGUpO1xuXHQgICAgICAgICAgICBub2lzZUwuc3RhcnQoMCk7XG5cdCAgICAgICAgICAgIG5vaXNlUi5zdGFydCgwKTtcblx0ICAgICAgICAgICAgLy9zaG9ydCBmYWRlIGluXG5cdCAgICAgICAgICAgIGdhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCwgMCk7XG5cdCAgICAgICAgICAgIGdhaW5Ob2RlLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoMSwgdGhpcy5wcmVEZWxheSk7XG5cdCAgICAgICAgICAgIC8vZGVjYXlcblx0ICAgICAgICAgICAgZ2Fpbk5vZGUuZ2Fpbi5leHBvbmVudGlhbEFwcHJvYWNoVmFsdWVBdFRpbWUoMCwgdGhpcy5wcmVEZWxheSwgdGhpcy5kZWNheSAtIHRoaXMucHJlRGVsYXkpO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5kZWNheSkudGhlbihmdW5jdGlvbiAoYnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NvbnZvbHZlci5idWZmZXIgPSBidWZmZXIuZ2V0KCk7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5SZXZlcmJ9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlJldmVyYi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkVmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2NvbnZvbHZlci5kaXNjb25uZWN0KCk7XG5cdCAgICAgICAgdGhpcy5fY29udm9sdmVyID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5SZXZlcmI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBCYXNlIGNsYXNzIGZvciBzdGVyZW8gZmVlZGJhY2sgZWZmZWN0cyB3aGVyZSB0aGUgZWZmZWN0UmV0dXJuXG5cdFx0ICogICAgICAgICBpcyBmZWQgYmFjayBpbnRvIHRoZSBzYW1lIGNoYW5uZWwuXG5cdFx0ICpcblx0XHQgKlx0QGNvbnN0cnVjdG9yXG5cdFx0ICpcdEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3QgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgWydmZWVkYmFjayddLCBUb25lLkZlZWRiYWNrRWZmZWN0KTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgZmVlZGJhY2tcblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mZWVkYmFjayA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZlZWRiYWNrLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBsZWZ0IHNpZGUgZmVlYmFja1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkdhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTCA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgcmlnaHQgc2lkZSBmZWViYWNrXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tSID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8vY29ubmVjdCBpdCB1cFxuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuTC5jaGFpbih0aGlzLl9mZWVkYmFja0wsIHRoaXMuZWZmZWN0U2VuZEwpO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0UmV0dXJuUi5jaGFpbih0aGlzLl9mZWVkYmFja1IsIHRoaXMuZWZmZWN0U2VuZFIpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZmFuKHRoaXMuX2ZlZWRiYWNrTC5nYWluLCB0aGlzLl9mZWVkYmFja1IuZ2Fpbik7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWydmZWVkYmFjayddKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb0ZlZWRiYWNrRWZmZWN0LCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3R9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TdGVyZW9FZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ2ZlZWRiYWNrJ10pO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2suZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmVlZGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrTC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fZmVlZGJhY2tMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mZWVkYmFja1IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2ZlZWRiYWNrUiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU3RlcmVvRmVlZGJhY2tFZmZlY3Q7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBBcHBsaWVzIGEgd2lkdGggZmFjdG9yIHRvIHRoZSBtaWQvc2lkZSBzZXBlcmF0aW9uLlxuXHRcdCAqICAgICAgICAgMCBpcyBhbGwgbWlkIGFuZCAxIGlzIGFsbCBzaWRlLlxuXHRcdCAqICAgICAgICAgQWxnb3JpdGhtIGZvdW5kIGluIFtrdnJhdWRpbyBmb3J1bXNdKGh0dHA6Ly93d3cua3ZyYXVkaW8uY29tL2ZvcnVtL3ZpZXd0b3BpYy5waHA/dD0yMTI1ODcpLlxuXHRcdCAqICAgICAgICAgPGJyPjxicj5cblx0XHQgKiAgICAgICAgIDxjb2RlPlxuXHRcdCAqICAgICAgICAgTWlkICo9IDIqKDEtd2lkdGgpPGJyPlxuXHRcdCAqICAgICAgICAgU2lkZSAqPSAyKndpZHRoXG5cdFx0ICogICAgICAgICA8L2NvZGU+XG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTWlkU2lkZUVmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V8T2JqZWN0fSBbd2lkdGhdIFRoZSBzdGVyZW8gd2lkdGguIEEgd2lkdGggb2YgMCBpcyBtb25vIGFuZCAxIGlzIHN0ZXJlby4gMC41IGlzIG5vIGNoYW5nZS5cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvV2lkZW5lciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3dpZHRoJ10sIFRvbmUuU3RlcmVvV2lkZW5lcik7XG5cdCAgICAgICAgVG9uZS5NaWRTaWRlRWZmZWN0LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHdpZHRoIGNvbnRyb2wuIDAgPSAxMDAlIG1pZC4gMSA9IDEwMCUgc2lkZS4gMC41ID0gbm8gY2hhbmdlLlxuXHRcdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLndpZHRoID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMud2lkdGgsIFRvbmUuVHlwZS5Ob3JtYWxSYW5nZSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoWyd3aWR0aCddKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFR3byB0aW1lcyB0aGUgKDEtd2lkdGgpIGZvciB0aGUgbWlkIGNoYW5uZWxcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQgPSBuZXcgVG9uZS5NdWx0aXBseSgyKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFR3byB0aW1lcyB0aGUgd2lkdGggZm9yIHRoZSBzaWRlIGNoYW5uZWxcblx0XHRcdCAqIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlID0gbmV3IFRvbmUuTXVsdGlwbHkoMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgTWlkIG11bHRpcGxpZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbWlkTXVsdCA9IG5ldyBUb25lLk11bHRpcGx5KCk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZC5jb25uZWN0KHRoaXMuX21pZE11bHQsIDAsIDEpO1xuXHQgICAgICAgIHRoaXMubWlkU2VuZC5jaGFpbih0aGlzLl9taWRNdWx0LCB0aGlzLm1pZFJldHVybik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAxIC0gd2lkdGhcblx0XHRcdCAqIEB0eXBlIHtUb25lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aCA9IG5ldyBUb25lLlN1YnRyYWN0KCk7XG5cdCAgICAgICAgdGhpcy5fb25lTWludXNXaWR0aC5jb25uZWN0KHRoaXMuX3R3b1RpbWVzV2lkdGhNaWQpO1xuXHQgICAgICAgIHRoaXMuY29udGV4dC5nZXRDb25zdGFudCgxKS5jb25uZWN0KHRoaXMuX29uZU1pbnVzV2lkdGgsIDAsIDApO1xuXHQgICAgICAgIHRoaXMud2lkdGguY29ubmVjdCh0aGlzLl9vbmVNaW51c1dpZHRoLCAwLCAxKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBTaWRlIG11bHRpcGxpZXJcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5NdWx0aXBseX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc2lkZU11bHQgPSBuZXcgVG9uZS5NdWx0aXBseSgpO1xuXHQgICAgICAgIHRoaXMud2lkdGguY29ubmVjdCh0aGlzLl90d29UaW1lc1dpZHRoU2lkZSk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aFNpZGUuY29ubmVjdCh0aGlzLl9zaWRlTXVsdCwgMCwgMSk7XG5cdCAgICAgICAgdGhpcy5zaWRlU2VuZC5jaGFpbih0aGlzLl9zaWRlTXVsdCwgdGhpcy5zaWRlUmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlN0ZXJlb1dpZGVuZXIsIFRvbmUuTWlkU2lkZUVmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvV2lkZW5lci5kZWZhdWx0cyA9IHsgJ3dpZHRoJzogMC41IH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN0ZXJlb1dpZGVuZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU3RlcmVvV2lkZW5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1pZFNpZGVFZmZlY3QucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3dpZHRoJ10pO1xuXHQgICAgICAgIHRoaXMud2lkdGguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21pZE11bHQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21pZE11bHQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3NpZGVNdWx0LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zaWRlTXVsdCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aE1pZCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdHdvVGltZXNXaWR0aFNpZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3R3b1RpbWVzV2lkdGhTaWRlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vbmVNaW51c1dpZHRoLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vbmVNaW51c1dpZHRoID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TdGVyZW9XaWRlbmVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5UcmVtb2xvIG1vZHVsYXRlcyB0aGUgYW1wbGl0dWRlIG9mIGFuIGluY29taW5nIHNpZ25hbCB1c2luZyBhIFRvbmUuTEZPLlxuXHRcdCAqICAgICAgICAgVGhlIHR5cGUsIGZyZXF1ZW5jeSwgYW5kIGRlcHRoIG9mIHRoZSBMRk8gaXMgY29udHJvbGxhYmxlLlxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlN0ZXJlb0VmZmVjdH1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBbZnJlcXVlbmN5XSBUaGUgcmF0ZSBvZiB0aGUgZWZmZWN0LlxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbZGVwdGhdIFRoZSBkZXB0aCBvZiB0aGUgZWZmZWN0LlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY3JlYXRlIGEgdHJlbW9sbyBhbmQgc3RhcnQgaXQncyBMRk9cblx0XHQgKiB2YXIgdHJlbW9sbyA9IG5ldyBUb25lLlRyZW1vbG8oOSwgMC43NSkudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqIC8vcm91dGUgYW4gb3NjaWxsYXRvciB0aHJvdWdoIHRoZSB0cmVtb2xvIGFuZCBzdGFydCBpdFxuXHRcdCAqIHZhciBvc2NpbGxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpLmNvbm5lY3QodHJlbW9sbykuc3RhcnQoKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sbyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSwgVG9uZS5UcmVtb2xvKTtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB0cmVtZWxvIExGTyBpbiB0aGUgbGVmdCBjaGFubmVsXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvTCA9IG5ldyBUb25lLkxGTyh7XG5cdCAgICAgICAgICAgICdwaGFzZSc6IG9wdGlvbnMuc3ByZWFkLFxuXHQgICAgICAgICAgICAnbWluJzogMSxcblx0ICAgICAgICAgICAgJ21heCc6IDBcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHJlbWVsbyBMRk8gaW4gdGhlIGxlZnQgY2hhbm5lbFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xmb1IgPSBuZXcgVG9uZS5MRk8oe1xuXHQgICAgICAgICAgICAncGhhc2UnOiBvcHRpb25zLnNwcmVhZCxcblx0ICAgICAgICAgICAgJ21pbic6IDEsXG5cdCAgICAgICAgICAgICdtYXgnOiAwXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgV2hlcmUgdGhlIGdhaW4gaXMgbXVsdGlwbGllZFxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVMID0gbmV3IFRvbmUuR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZXJlIHRoZSBnYWluIGlzIG11bHRpcGxpZWRcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWRlUiA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSB0cmVtb2xvLlxuXHRcdFx0ICogIEB0eXBlICB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGVwdGggb2YgdGhlIGVmZmVjdC4gQSBkZXB0aCBvZiAwLCBoYXMgbm8gZWZmZWN0XG5cdFx0XHQgKiAgb24gdGhlIGFtcGxpdHVkZSwgYW5kIGEgZGVwdGggb2YgMSBtYWtlcyB0aGUgYW1wbGl0dWRlXG5cdFx0XHQgKiAgbW9kdWxhdGUgZnVsbHkgYmV0d2VlbiAwIGFuZCAxLlxuXHRcdFx0ICogIEB0eXBlICB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRlcHRoLCBUb25lLlR5cGUuTm9ybWFsUmFuZ2UpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLmVmZmVjdFNlbmRMLmNoYWluKHRoaXMuX2FtcGxpdHVkZUwsIHRoaXMuZWZmZWN0UmV0dXJuTCk7XG5cdCAgICAgICAgdGhpcy5lZmZlY3RTZW5kUi5jaGFpbih0aGlzLl9hbXBsaXR1ZGVSLCB0aGlzLmVmZmVjdFJldHVyblIpO1xuXHQgICAgICAgIHRoaXMuX2xmb0wuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZGVMLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX2xmb1IuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZGVSLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmZhbih0aGlzLl9sZm9MLmZyZXF1ZW5jeSwgdGhpcy5fbGZvUi5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZGVwdGguZmFuKHRoaXMuX2xmb1IuYW1wbGl0dWRlLCB0aGlzLl9sZm9MLmFtcGxpdHVkZSk7XG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuc3ByZWFkID0gb3B0aW9ucy5zcHJlYWQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5UcmVtb2xvLCBUb25lLlN0ZXJlb0VmZmVjdCk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogMTAsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2luZScsXG5cdCAgICAgICAgJ2RlcHRoJzogMC41LFxuXHQgICAgICAgICdzcHJlYWQnOiAxODBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdGFydCB0aGUgdHJlbW9sby5cblx0XHQgKiBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgdHJlbW9sbyBiZWdpbnMuXG5cdFx0ICogQHJldHVybnMge1RvbmUuVHJlbW9sb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN0b3AgdGhlIHRyZW1vbG8uXG5cdFx0ICogQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIFdoZW4gdGhlIHRyZW1vbG8gc3RvcHMuXG5cdFx0ICogQHJldHVybnMge1RvbmUuVHJlbW9sb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9sZm9MLnN0b3AodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGVmZmVjdCB0byB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBwYXJhbSB7VGltZX0gW2RlbGF5PTBdIERlbGF5IHRpbWUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBlZmZlY3QgYWZ0ZXIgdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BvcnQgaGFzIHN0YXJ0ZWQuXG5cdFx0ICogQHJldHVybnMge1RvbmUuQXV0b0ZpbHRlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmVtb2xvLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKGRlbGF5KSB7XG5cdCAgICAgICAgdGhpcy5fbGZvTC5zeW5jKGRlbGF5KTtcblx0ICAgICAgICB0aGlzLl9sZm9SLnN5bmMoZGVsYXkpO1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgZmlsdGVyIGZyb20gdGhlIHRyYW5zcG9ydFxuXHRcdCAqIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUudW5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2xmb0wudW5zeW5jKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvUi51bnN5bmMoKTtcblx0ICAgICAgICBUb25lLlRyYW5zcG9ydC51bnN5bmNTaWduYWwodGhpcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBUcmVtb2xvJ3Mgb3NjaWxsYXRvciB0eXBlLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlRyZW1vbG8jXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAbmFtZSB0eXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5UcmVtb2xvLnByb3RvdHlwZSwgJ3R5cGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9MLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb0wudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmb1IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBBbW91bnQgb2Ygc3RlcmVvIHNwcmVhZC4gV2hlbiBzZXQgdG8gMCwgYm90aCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBjZW50cmFsbHkuXG5cdFx0ICogV2hlbiBzZXQgdG8gMTgwLCBMRk8ncyB3aWxsIGJlIHBhbm5lZCBoYXJkIGxlZnQgYW5kIHJpZ2h0IHJlc3BlY3RpdmVseS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5UcmVtb2xvI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHNwcmVhZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVHJlbW9sby5wcm90b3R5cGUsICdzcHJlYWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZm9SLnBoYXNlIC0gdGhpcy5fbGZvTC5waGFzZTsgICAgLy8xODBcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHNwcmVhZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9MLnBoYXNlID0gOTAgLSBzcHJlYWQgLyAyO1xuXHQgICAgICAgICAgICB0aGlzLl9sZm9SLnBoYXNlID0gc3ByZWFkIC8gMiArIDkwO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyZW1vbG99IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJlbW9sby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlN0ZXJlb0VmZmVjdC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXB0aCdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9sZm9MLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9MID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9sZm9SLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9sZm9SID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVMLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVMID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVSLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZGVSID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJlbW9sbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgVmlicmF0byBlZmZlY3QgY29tcG9zZWQgb2YgYSBUb25lLkRlbGF5IGFuZCBhIFRvbmUuTEZPLiBUaGUgTEZPXG5cdFx0ICogICAgICAgICBtb2R1bGF0ZXMgdGhlIGRlbGF5VGltZSBvZiB0aGUgZGVsYXksIGNhdXNpbmcgdGhlIHBpdGNoIHRvIHJpc2Vcblx0XHQgKiAgICAgICAgIGFuZCBmYWxsLiBcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRWZmZWN0fVxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gZnJlcXVlbmN5IFRoZSBmcmVxdWVuY3kgb2YgdGhlIHZpYnJhdG8uXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IGRlcHRoIFRoZSBhbW91bnQgdGhlIHBpdGNoIGlzIG1vZHVsYXRlZC5cblx0XHQgKi9cblx0ICAgIFRvbmUuVmlicmF0byA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSwgVG9uZS5WaWJyYXRvKTtcblx0ICAgICAgICBUb25lLkVmZmVjdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZWxheSBub2RlIHVzZWQgZm9yIHRoZSB2aWJyYXRvIGVmZmVjdFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkRlbGF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBuZXcgVG9uZS5EZWxheSgwLCBvcHRpb25zLm1heERlbGF5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgTEZPIHVzZWQgdG8gY29udHJvbCB0aGUgdmlicmF0b1xuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxGT31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGZvID0gbmV3IFRvbmUuTEZPKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiBvcHRpb25zLnR5cGUsXG5cdCAgICAgICAgICAgICdtaW4nOiAwLFxuXHQgICAgICAgICAgICAnbWF4Jzogb3B0aW9ucy5tYXhEZWxheSxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeSc6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICAncGhhc2UnOiAtOTAgICAgLy9vZmZzZSB0aGUgcGhhc2Ugc28gdGhlIHJlc3RpbmcgcG9zaXRpb24gaXMgaW4gdGhlIGNlbnRlclxuXHQgICAgICAgIH0pLnN0YXJ0KCkuY29ubmVjdCh0aGlzLl9kZWxheU5vZGUuZGVsYXlUaW1lKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSB2aWJyYXRvXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMuX2xmby5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRlcHRoIG9mIHRoZSB2aWJyYXRvLiBcblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuX2xmby5hbXBsaXR1ZGU7XG5cdCAgICAgICAgdGhpcy5kZXB0aC52YWx1ZSA9IG9wdGlvbnMuZGVwdGg7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RlcHRoJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZWZmZWN0U2VuZC5jaGFpbih0aGlzLl9kZWxheU5vZGUsIHRoaXMuZWZmZWN0UmV0dXJuKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlZpYnJhdG8sIFRvbmUuRWZmZWN0KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdHNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5WaWJyYXRvLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdtYXhEZWxheSc6IDAuMDA1LFxuXHQgICAgICAgICdmcmVxdWVuY3knOiA1LFxuXHQgICAgICAgICdkZXB0aCc6IDAuMSxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFR5cGUgb2Ygb3NjaWxsYXRvciBhdHRhY2hlZCB0byB0aGUgVmlicmF0by5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5WaWJyYXRvI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVmlicmF0by5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGZvLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xmby50eXBlID0gdHlwZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuVmlicmF0b30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5WaWJyYXRvLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuRWZmZWN0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fZGVsYXlOb2RlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kZWxheU5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmby5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZvID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGVwdGgnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGVwdGggPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlZpYnJhdG87XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5FdmVudCBhYnN0cmFjdHMgYXdheSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZSBhbmQgcHJvdmlkZXMgYSBzY2hlZHVsYWJsZVxuXHRcdCAqICAgICAgICAgIGNhbGxiYWNrIGZvciBhIHNpbmdsZSBvciByZXBlYXRhYmxlIGV2ZW50cyBhbG9uZyB0aGUgdGltZWxpbmUuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmV9XG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYXQgdGhlIHRpbWUuXG5cdFx0ICogIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIG9yIHZhbHVlcyB3aGljaCBzaG91bGQgYmUgcGFzc2VkIHRvXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIGludm9jYXRpb24uXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGNob3JkID0gbmV3IFRvbmUuRXZlbnQoZnVuY3Rpb24odGltZSwgY2hvcmQpe1xuXHRcdCAqIFx0Ly90aGUgY2hvcmQgYXMgd2VsbCBhcyB0aGUgZXhhY3QgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiBcdC8vYXJlIHBhc3NlZCBpbiBhcyBhcmd1bWVudHMgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG5cdFx0ICogfSwgW1wiRDRcIiwgXCJFNFwiLCBcIkY0XCJdKTtcblx0XHQgKiAvL3N0YXJ0IHRoZSBjaG9yZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cmFuc3BvcnQgdGltZWxpbmVcblx0XHQgKiBjaG9yZC5zdGFydCgpO1xuXHRcdCAqIC8vbG9vcCBpdCBldmVyeSBtZWFzdXJlIGZvciA4IG1lYXN1cmVzXG5cdFx0ICogY2hvcmQubG9vcCA9IDg7XG5cdFx0ICogY2hvcmQubG9vcEVuZCA9IFwiMW1cIjtcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAndmFsdWUnXG5cdCAgICAgICAgXSwgVG9uZS5FdmVudCk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIExvb3AgdmFsdWVcblx0XHRcdCAqICBAdHlwZSAge0Jvb2xlYW58UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3AgPSBvcHRpb25zLmxvb3A7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhbGxiYWNrIHRvIGludm9rZS5cblx0XHRcdCAqICBAdHlwZSAge0Z1bmN0aW9ufVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHZhbHVlIHdoaWNoIGlzIHBhc3NlZCB0byB0aGVcblx0XHRcdCAqICBjYWxsYmFjayBmdW5jdGlvbi5cblx0XHRcdCAqICBAdHlwZSAgeyp9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZW4gdGhlIG5vdGUgaXMgc2NoZWR1bGVkIHRvIHN0YXJ0LlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3Mob3B0aW9ucy5sb29wU3RhcnQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFdoZW4gdGhlIG5vdGUgaXMgc2NoZWR1bGVkIHRvIHN0YXJ0LlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKG9wdGlvbnMubG9vcEVuZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVHJhY2tzIHRoZSBzY2hlZHVsZWQgZXZlbnRzXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuVGltZWxpbmVTdGF0ZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgVG9uZS5UaW1lbGluZVN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBsYXliYWNrIHNwZWVkIG9mIHRoZSBub3RlLiBBIHNwZWVkIG9mIDFcblx0XHRcdCAqICBpcyBubyBjaGFuZ2UuXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSAxO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEEgZGVsYXkgdGltZSBmcm9tIHdoZW4gdGhlIGV2ZW50IGlzIHNjaGVkdWxlZCB0byBzdGFydFxuXHRcdFx0ICogIEB0eXBlIHtUaWNrc31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHByaXZhdGUgaG9sZGVyIG9mIHByb2JhYmlsaXR5IHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wcm9iYWJpbGl0eSA9IG9wdGlvbnMucHJvYmFiaWxpdHk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGFtb3VudCBvZiB2YXJpYXRpb24gZnJvbSB0aGVcblx0XHRcdCAqICBnaXZlbiB0aW1lLlxuXHRcdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2h1bWFuaXplID0gb3B0aW9ucy5odW1hbml6ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBJZiBtdXRlIGlzIHRydWUsIHRoZSBjYWxsYmFjayB3b24ndCBiZVxuXHRcdFx0ICogIGludm9rZWQuXG5cdFx0XHQgKiAgQHR5cGUge0Jvb2xlYW59XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICAgICAgLy9zZXQgdGhlIGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgdGhpcy5wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkV2ZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICogIEBjb25zdFxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2xvb3AnOiBmYWxzZSxcblx0ICAgICAgICAnbG9vcEVuZCc6ICcxbScsXG5cdCAgICAgICAgJ2xvb3BTdGFydCc6IDAsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ3ZhbHVlJzogbnVsbCxcblx0ICAgICAgICAncHJvYmFiaWxpdHknOiAxLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2UsXG5cdCAgICAgICAgJ2h1bWFuaXplJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVzY2hlZHVsZSBhbGwgb2YgdGhlIGV2ZW50cyBhbG9uZyB0aGUgdGltZWxpbmVcblx0XHQgKiAgd2l0aCB0aGUgdXBkYXRlZCB2YWx1ZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gYWZ0ZXIgT25seSByZXNjaGVkdWxlcyBldmVudHMgYWZ0ZXIgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuX3Jlc2NoZWR1bGVFdmVudHMgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICAvL2lmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCBzY2hlZHVsZXMgYWxsIG9mIHRoZSBldmVudHNcblx0ICAgICAgICBhZnRlciA9IFRvbmUuZGVmYXVsdEFyZyhhZnRlciwgLTEpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2hGcm9tKGFmdGVyLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgdmFyIGR1cmF0aW9uO1xuXHQgICAgICAgICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNEZWZpbmVkKGV2ZW50LmlkKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHZhciBzdGFydFRpY2sgPSBldmVudC50aW1lICsgTWF0aC5yb3VuZCh0aGlzLnN0YXJ0T2Zmc2V0IC8gdGhpcy5fcGxheWJhY2tSYXRlKTtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24gPSBJbmZpbml0eTtcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVG9uZS5pc051bWJlcih0aGlzLl9sb29wKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHRoaXMuX2xvb3AgKiB0aGlzLl9nZXRMb29wRHVyYXRpb24oKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRFdmVudCA9IHRoaXMuX3N0YXRlLmdldEFmdGVyKHN0YXJ0VGljayk7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRFdmVudCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IE1hdGgubWluKGR1cmF0aW9uLCBuZXh0RXZlbnQudGltZSAtIHN0YXJ0VGljayk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChkdXJhdGlvbiAhPT0gSW5maW5pdHkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy9zY2hlZHVsZSBhIHN0b3Agc2luY2UgaXQncyBmaW5pdGUgZHVyYXRpb25cblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCBzdGFydFRpY2sgKyBkdXJhdGlvbiArIDEpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IFRvbmUuVGlja3MoZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJ2YWwgPSBUb25lLlRpY2tzKHRoaXMuX2dldExvb3BEdXJhdGlvbigpKTtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5pZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlUmVwZWF0KHRoaXMuX3RpY2suYmluZCh0aGlzKSwgaW50ZXJ2YWwsIFRvbmUuVGlja3Moc3RhcnRUaWNrKSwgZHVyYXRpb24pO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5pZCA9IFRvbmUuVHJhbnNwb3J0LnNjaGVkdWxlKHRoaXMuX3RpY2suYmluZCh0aGlzKSwgVG9uZS5UaWNrcyhzdGFydFRpY2spKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBub3RlLCBlaXRoZXIgXCJzdGFydGVkXCIgb3IgXCJzdG9wcGVkXCIuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQG5hbWUgc3RhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3N0YXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUoVG9uZS5UcmFuc3BvcnQudGlja3MpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdGFydCBmcm9tIHRoZSBzY2hlZHVsZWQgc3RhcnQgdGltZVxuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkV2ZW50I1xuXHRcdCAqICBAbmFtZSBzdGFydE9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnc3RhcnRPZmZzZXQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydE9mZnNldDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdGFydE9mZnNldCA9IG9mZnNldDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJvYmFiaWxpdHkgb2YgdGhlIG5vdGVzIGJlaW5nIHRyaWdnZXJlZC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvYmFiaWxpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ3Byb2JhYmlsaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvYmFiaWxpdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9iKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2JhYmlsaXR5ID0gcHJvYjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiBzZXQgdG8gdHJ1ZSwgd2lsbCBhcHBseSBzbWFsbCByYW5kb20gdmFyaWF0aW9uXG5cdFx0ICogIHRvIHRoZSBjYWxsYmFjayB0aW1lLiBJZiB0aGUgdmFsdWUgaXMgZ2l2ZW4gYXMgYSB0aW1lLCBpdCB3aWxsIHJhbmRvbWl6ZVxuXHRcdCAqICBieSB0aGF0IGFtb3VudC5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBldmVudC5odW1hbml6ZSA9IHRydWU7XG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0ICogIEBuYW1lIGh1bWFuaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdodW1hbml6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2h1bWFuaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFyaWF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2h1bWFuaXplID0gdmFyaWF0aW9uO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSBub3RlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgdGltZSAgV2hlbiB0aGUgbm90ZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkV2ZW50fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpbWUpID09PSBUb25lLlN0YXRlLlN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhdGUuYWRkKHtcblx0ICAgICAgICAgICAgICAgICdzdGF0ZSc6IFRvbmUuU3RhdGUuU3RhcnRlZCxcblx0ICAgICAgICAgICAgICAgICd0aW1lJzogdGltZSxcblx0ICAgICAgICAgICAgICAgICdpZCc6IHVuZGVmaW5lZFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIEV2ZW50IGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lbGluZVBvc2l0aW9ufSAgdGltZSAgV2hlbiB0aGUgbm90ZSBzaG91bGQgc3RvcC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuRXZlbnR9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLnNldFN0YXRlQXRUaW1lKFRvbmUuU3RhdGUuU3RvcHBlZCwgdGltZSk7XG5cdCAgICAgICAgICAgIHZhciBwcmV2aW91c0V2ZW50ID0gdGhpcy5fc3RhdGUuZ2V0QmVmb3JlKHRpbWUpO1xuXHQgICAgICAgICAgICB2YXIgcmVzY2hlZHVsVGltZSA9IHRpbWU7XG5cdCAgICAgICAgICAgIGlmIChwcmV2aW91c0V2ZW50ICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgICAgICByZXNjaGVkdWxUaW1lID0gcHJldmlvdXNFdmVudC50aW1lO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMocmVzY2hlZHVsVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYWxsIHNjaGVkdWxlZCBldmVudHMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICBbdGltZT0wXSAgVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggZXZlbnRzIHdpbGwgYmUgY2FuY2VsLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuZGVmYXVsdEFyZyh0aW1lLCAtSW5maW5pdHkpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuZm9yRWFjaEZyb20odGltZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKGV2ZW50LmlkKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5jYW5jZWwodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VyLiBBbHNvXG5cdFx0ICogIGNoZWNrcyBpZiB0aGUgRXZlbnQgaXMgZG9uZSBwbGF5aW5nXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIG9mIHRoZSBldmVudCBpbiBzZWNvbmRzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkV2ZW50LnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gVG9uZS5UcmFuc3BvcnQuZ2V0VGlja3NBdFRpbWUodGltZSk7XG5cdCAgICAgICAgaWYgKCF0aGlzLm11dGUgJiYgdGhpcy5fc3RhdGUuZ2V0VmFsdWVBdFRpbWUodGlja3MpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMucHJvYmFiaWxpdHkgPCAxICYmIE1hdGgucmFuZG9tKCkgPiB0aGlzLnByb2JhYmlsaXR5KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuaHVtYW5pemUpIHtcblx0ICAgICAgICAgICAgICAgIHZhciB2YXJpYXRpb24gPSAwLjAyO1xuXHQgICAgICAgICAgICAgICAgaWYgKCFUb25lLmlzQm9vbGVhbih0aGlzLmh1bWFuaXplKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbiA9IHRoaXMudG9TZWNvbmRzKHRoaXMuaHVtYW5pemUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgdGltZSArPSAoTWF0aC5yYW5kb20oKSAqIDIgLSAxKSAqIHZhcmlhdGlvbjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHRpbWUsIHRoaXMudmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0IHRoZSBkdXJhdGlvbiBvZiB0aGUgbG9vcC5cblx0XHQgKiAgQHJldHVybiAge1RpY2tzfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5FdmVudC5wcm90b3R5cGUuX2dldExvb3BEdXJhdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgodGhpcy5fbG9vcEVuZCAtIHRoaXMuX2xvb3BTdGFydCkgLyB0aGlzLl9wbGF5YmFja1JhdGUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgbm90ZSBzaG91bGQgbG9vcCBvciBub3Rcblx0XHQgKiAgYmV0d2VlbiBUb25lLkV2ZW50Lmxvb3BTdGFydCBhbmRcblx0XHQgKiAgVG9uZS5FdmVudC5sb29wRW5kLiBBbiBpbnRlZ2VyXG5cdFx0ICogIHZhbHVlIGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2Zcblx0XHQgKiAgbG9vcHMgdGhlIEV2ZW50IGRvZXMgYWZ0ZXIgaXQgc3RhcnRzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge0Jvb2xlYW58UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGxvb3Bcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkV2ZW50LnByb3RvdHlwZSwgJ2xvb3AnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcblx0ICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbm90ZS4gRGVmYXVsdHMgdG8gMS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgcGxheWJhY2tSYXRlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogbm90ZS5sb29wID0gdHJ1ZTtcblx0XHQgKiAvL3JlcGVhdCB0aGUgbm90ZSB0d2ljZSBhcyBmYXN0XG5cdFx0ICogbm90ZS5wbGF5YmFja1JhdGUgPSAyO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB0aGlzLl9yZXNjaGVkdWxlRXZlbnRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGxvb3BFbmQgcG9pbnQgaXMgdGhlIHRpbWUgdGhlIGV2ZW50IHdpbGwgbG9vcFxuXHRcdCAqICBpZiBUb25lLkV2ZW50Lmxvb3AgaXMgdHJ1ZS5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdsb29wRW5kJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wRW5kKS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BFbmQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IHRoaXMudG9UaWNrcyhsb29wRW5kKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2NoZWR1bGVFdmVudHMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSB0aW1lIHdoZW4gdGhlIGxvb3Agc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5FdmVudCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGxvb3BTdGFydFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRXZlbnQucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9sb29wU3RhcnQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9UaWNrcyhsb29wU3RhcnQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fcmVzY2hlZHVsZUV2ZW50cygpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGxvb3AgaW50ZXJ2YWwuXG5cdFx0ICogIFJldHVybnMgMCBpZiB0aGUgZXZlbnQgaXMgbm90IHN0YXJ0ZWQgeWV0IG9yXG5cdFx0ICogIGl0IGlzIG5vdCBzZXQgdG8gbG9vcC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuRXZlbnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvZ3Jlc3Ncblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5FdmVudC5wcm90b3R5cGUsICdwcm9ncmVzcycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHZhciB0aWNrcyA9IFRvbmUuVHJhbnNwb3J0LnRpY2tzO1xuXHQgICAgICAgICAgICAgICAgdmFyIGxhc3RFdmVudCA9IHRoaXMuX3N0YXRlLmdldCh0aWNrcyk7XG5cdCAgICAgICAgICAgICAgICBpZiAobGFzdEV2ZW50ICE9PSBudWxsICYmIGxhc3RFdmVudC5zdGF0ZSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGxvb3BEdXJhdGlvbiA9IHRoaXMuX2dldExvb3BEdXJhdGlvbigpO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9ICh0aWNrcyAtIGxhc3RFdmVudC50aW1lKSAlIGxvb3BEdXJhdGlvbjtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgLyBsb29wRHVyYXRpb247XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5FdmVudH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRXZlbnQucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5jYW5jZWwoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkV2ZW50O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuTG9vcCBjcmVhdGVzIGEgbG9vcGVkIGNhbGxiYWNrIGF0IHRoZSBcblx0XHQgKiAgICAgICAgIHNwZWNpZmllZCBpbnRlcnZhbC4gVGhlIGNhbGxiYWNrIGNhbiBiZSBcblx0XHQgKiAgICAgICAgIHN0YXJ0ZWQsIHN0b3BwZWQgYW5kIHNjaGVkdWxlZCBhbG9uZ1xuXHRcdCAqICAgICAgICAgdGhlIFRyYW5zcG9ydCdzIHRpbWVsaW5lLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgbG9vcCA9IG5ldyBUb25lLkxvb3AoZnVuY3Rpb24odGltZSl7XG5cdFx0ICogXHQvL3RyaWdnZXJlZCBldmVyeSBlaWdodGggbm90ZS4gXG5cdFx0ICogXHRjb25zb2xlLmxvZyh0aW1lKTtcblx0XHQgKiB9LCBcIjhuXCIpLnN0YXJ0KDApO1xuXHRcdCAqIFRvbmUuVHJhbnNwb3J0LnN0YXJ0KCk7XG5cdFx0ICogIEBleHRlbmRzIHtUb25lfVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggdGhlIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGludGVydmFsIFRoZSB0aW1lIGJldHdlZW4gc3VjY2Vzc2l2ZSBjYWxsYmFjayBjYWxscy4gXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAnaW50ZXJ2YWwnXG5cdCAgICAgICAgXSwgVG9uZS5Mb29wKTtcblx0ICAgICAgICBUb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGV2ZW50IHdoaWNoIHByb2R1Y2VzIHRoZSBjYWxsYmFja3Ncblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50ID0gbmV3IFRvbmUuRXZlbnQoe1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snOiB0aGlzLl90aWNrLmJpbmQodGhpcyksXG5cdCAgICAgICAgICAgICdsb29wJzogdHJ1ZSxcblx0ICAgICAgICAgICAgJ2xvb3BFbmQnOiBvcHRpb25zLmludGVydmFsLFxuXHQgICAgICAgICAgICAncGxheWJhY2tSYXRlJzogb3B0aW9ucy5wbGF5YmFja1JhdGUsXG5cdCAgICAgICAgICAgICdwcm9iYWJpbGl0eSc6IG9wdGlvbnMucHJvYmFiaWxpdHlcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggdGhlIG5leHQgZXZlbnQgaW4gdGhlIHBhdHRlcm5cblx0XHRcdCAqICBAdHlwZSB7RnVuY3Rpb259XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcblx0ICAgICAgICAvL3NldCB0aGUgaXRlcmF0aW9uc1xuXHQgICAgICAgIHRoaXMuaXRlcmF0aW9ucyA9IG9wdGlvbnMuaXRlcmF0aW9ucztcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkxvb3ApO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0c1xuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ludGVydmFsJzogJzRuJyxcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IDEsXG5cdCAgICAgICAgJ2l0ZXJhdGlvbnMnOiBJbmZpbml0eSxcblx0ICAgICAgICAncHJvYmFiaWxpdHknOiB0cnVlLFxuXHQgICAgICAgICdtdXRlJzogZmFsc2Vcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGxvb3AgYXQgdGhlIHNwZWNpZmllZCB0aW1lIGFsb25nIHRoZSBUcmFuc3BvcnQnc1xuXHRcdCAqICB0aW1lbGluZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbj19ICB0aW1lICBXaGVuIHRvIHN0YXJ0IHRoZSBMb29wLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuc3RhcnQodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0b3AgdGhlIGxvb3AgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb249fSAgdGltZSAgV2hlbiB0byBzdG9wIHRoZSBBcnBlZ2dpb1xuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9ldmVudC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWwgYWxsIHNjaGVkdWxlZCBldmVudHMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB0aW1lXG5cdFx0ICogIEBwYXJhbSAge1RpbWVsaW5lUG9zaXRpb259ICBbdGltZT0wXSAgVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggZXZlbnRzIHdpbGwgYmUgY2FuY2VsLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5Mb29wfSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2V2ZW50LmNhbmNlbCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIG5vdGVzIHNob3VsZCBiZSBjYWxsZWRcblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgdGltZSAgVGhlIHRpbWUgdGhlIGV2ZW50IG9jY3Vyc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5fdGljayA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN0YXRlIG9mIHRoZSBMb29wLCBlaXRoZXIgc3RhcnRlZCBvciBzdG9wcGVkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAbmFtZSBzdGF0ZVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5zdGF0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcHJvZ3Jlc3Mgb2YgdGhlIGxvb3AgYXMgYSB2YWx1ZSBiZXR3ZWVuIDAtMS4gMCwgd2hlblxuXHRcdCAqICB0aGUgbG9vcCBpcyBzdG9wcGVkIG9yIGRvbmUgaXRlcmF0aW5nLiBcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqICBAbmFtZSBwcm9ncmVzc1xuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAncHJvZ3Jlc3MnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5wcm9ncmVzcztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgdGltZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbGJhY2tzLiBcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBsb29wLmludGVydmFsID0gXCI4blwiOyAvL2xvb3AgZXZlcnkgOG5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuTG9vcCNcblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBuYW1lIGludGVydmFsXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ2ludGVydmFsJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQubG9vcEVuZDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGludGVydmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmxvb3BFbmQgPSBpbnRlcnZhbDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgbG9vcC4gVGhlIG5vcm1hbCBwbGF5YmFjayByYXRlIGlzIDEgKG5vIGNoYW5nZSkuIFxuXHRcdCAqICBBIGBwbGF5YmFja1JhdGVgIG9mIDIgd291bGQgYmUgdHdpY2UgYXMgZmFzdC4gXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQucGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFJhbmRvbSB2YXJpYXRpb24gKy8tMC4wMXMgdG8gdGhlIHNjaGVkdWxlZCB0aW1lLiBcblx0XHQgKiAgT3IgZ2l2ZSBpdCBhIHRpbWUgdmFsdWUgd2hpY2ggaXQgd2lsbCByYW5kb21pemUgYnkuXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufFRpbWV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEBuYW1lIGh1bWFuaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ2h1bWFuaXplJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQuaHVtYW5pemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YXJpYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5fZXZlbnQuaHVtYW5pemUgPSB2YXJpYXRpb247XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2JhYmx5IG9mIHRoZSBjYWxsYmFjayBiZWluZyBpbnZva2VkLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0ICogIEBuYW1lIHByb2JhYmlsaXR5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ3Byb2JhYmlsaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnQucHJvYmFiaWxpdHk7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwcm9iKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2V2ZW50LnByb2JhYmlsaXR5ID0gcHJvYjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBNdXRpbmcgdGhlIExvb3AgbWVhbnMgdGhhdCBubyBjYWxsYmFja3MgYXJlIGludm9rZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLkxvb3AjXG5cdFx0ICogIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqICBAbmFtZSBtdXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Mb29wLnByb3RvdHlwZSwgJ211dGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9ldmVudC5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgdGhlIGxvb3AuIFRoZSBkZWZhdWx0XG5cdFx0ICogIHZhbHVlIGlzIEluZmluaXR5IChsb29wIGZvcmV2ZXIpLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Mb29wI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lIGl0ZXJhdGlvbnNcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkxvb3AucHJvdG90eXBlLCAnaXRlcmF0aW9ucycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2V2ZW50Lmxvb3AgPT09IHRydWUpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudC5sb29wO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChpdGVycykge1xuXHQgICAgICAgICAgICBpZiAoaXRlcnMgPT09IEluZmluaXR5KSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9ldmVudC5sb29wID0gdHJ1ZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50Lmxvb3AgPSBpdGVycztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLkxvb3B9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkxvb3AucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5Mb29wO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5QYXJ0IGlzIGEgY29sbGVjdGlvbiBUb25lLkV2ZW50cyB3aGljaCBjYW4gYmVcblx0XHQgKiAgICAgICAgIHN0YXJ0ZWQvc3RvcHBlZCBhbmQgbG9vcGVkIGFzIGEgc2luZ2xlIHVuaXQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuRXZlbnR9XG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugb24gZWFjaCBldmVudFxuXHRcdCAqICBAcGFyYW0ge0FycmF5fSBldmVudHMgdGhlIGFycmF5IG9mIGV2ZW50c1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwYXJ0ID0gbmV3IFRvbmUuUGFydChmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiBcdC8vdGhlIG5vdGVzIGdpdmVuIGFzIHRoZSBzZWNvbmQgZWxlbWVudCBpbiB0aGUgYXJyYXlcblx0XHQgKiBcdC8vd2lsbCBiZSBwYXNzZWQgaW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudFxuXHRcdCAqIFx0c3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2Uobm90ZSwgXCI4blwiLCB0aW1lKTtcblx0XHQgKiB9LCBbWzAsIFwiQzJcIl0sIFtcIjA6MlwiLCBcIkMzXCJdLCBbXCIwOjM6MlwiLCBcIkcyXCJdXSk7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy91c2UgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhcyBsb25nIGFzIHRoZSBvYmplY3QgaGFzIGEgXCJ0aW1lXCIgYXR0cmlidXRlXG5cdFx0ICogdmFyIHBhcnQgPSBuZXcgVG9uZS5QYXJ0KGZ1bmN0aW9uKHRpbWUsIHZhbHVlKXtcblx0XHQgKiBcdC8vdGhlIHZhbHVlIGlzIGFuIG9iamVjdCB3aGljaCBjb250YWlucyBib3RoIHRoZSBub3RlIGFuZCB0aGUgdmVsb2NpdHlcblx0XHQgKiBcdHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKHZhbHVlLm5vdGUsIFwiOG5cIiwgdGltZSwgdmFsdWUudmVsb2NpdHkpO1xuXHRcdCAqIH0sIFt7XCJ0aW1lXCIgOiAwLCBcIm5vdGVcIiA6IFwiQzNcIiwgXCJ2ZWxvY2l0eVwiOiAwLjl9LFxuXHRcdCAqIFx0ICAge1widGltZVwiIDogXCIwOjJcIiwgXCJub3RlXCIgOiBcIkM0XCIsIFwidmVsb2NpdHlcIjogMC41fVxuXHRcdCAqIF0pLnN0YXJ0KDApO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2V2ZW50cydcblx0ICAgICAgICBdLCBUb25lLlBhcnQpO1xuXHQgICAgICAgIFRvbmUuRXZlbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbiBhcnJheSBvZiBPYmplY3RzLlxuXHRcdFx0ICogIEB0eXBlICB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cyA9IFtdO1xuXHQgICAgICAgIC8vYWRkIHRoZSBldmVudHNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMuZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuZXZlbnRzW2ldKSkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5hZGQob3B0aW9ucy5ldmVudHNbaV1bMF0sIG9wdGlvbnMuZXZlbnRzW2ldWzFdKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuYWRkKG9wdGlvbnMuZXZlbnRzW2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhcnQsIFRvbmUuRXZlbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2NhbGxiYWNrJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2xvb3BFbmQnOiAnMW0nLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdwcm9iYWJpbGl0eSc6IDEsXG5cdCAgICAgICAgJ2h1bWFuaXplJzogZmFsc2UsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZSxcblx0ICAgICAgICAnZXZlbnRzJzogW11cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIHBhcnQgYXQgdGhlIGdpdmVuIHRpbWUuXG5cdFx0ICogIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9ICB0aW1lICAgIFdoZW4gdG8gc3RhcnQgdGhlIHBhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSAgb2Zmc2V0ICBUaGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZWdpbiBwbGF5aW5nIGF0LlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICh0aW1lLCBvZmZzZXQpIHtcblx0ICAgICAgICB2YXIgdGlja3MgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmdldFZhbHVlQXRUaW1lKHRpY2tzKSAhPT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCB0aGlzLl9sb29wU3RhcnQpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgb2Zmc2V0ID0gVG9uZS5kZWZhdWx0QXJnKG9mZnNldCwgMCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1RpY2tzKG9mZnNldCk7XG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXRlLmFkZCh7XG5cdCAgICAgICAgICAgICAgICAnc3RhdGUnOiBUb25lLlN0YXRlLlN0YXJ0ZWQsXG5cdCAgICAgICAgICAgICAgICAndGltZSc6IHRpY2tzLFxuXHQgICAgICAgICAgICAgICAgJ29mZnNldCc6IG9mZnNldFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0Tm90ZShldmVudCwgdGlja3MsIG9mZnNldCk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGV2ZW50IGluIHRoZSBnaXZlbiBldmVudCBhdCB0aGUgY29ycmVjdCB0aW1lIGdpdmVuXG5cdFx0ICogIHRoZSB0aWNrcyBhbmQgb2Zmc2V0IGFuZCBsb29waW5nLlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fSAgZXZlbnRcblx0XHQgKiAgQHBhcmFtICB7VGlja3N9ICB0aWNrc1xuXHRcdCAqICBAcGFyYW0gIHtUaWNrc30gIG9mZnNldFxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5fc3RhcnROb3RlID0gZnVuY3Rpb24gKGV2ZW50LCB0aWNrcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgdGlja3MgLT0gb2Zmc2V0O1xuXHQgICAgICAgIGlmICh0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgIGlmIChldmVudC5zdGFydE9mZnNldCA+PSB0aGlzLl9sb29wU3RhcnQgJiYgZXZlbnQuc3RhcnRPZmZzZXQgPCB0aGlzLl9sb29wRW5kKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvL3N0YXJ0IGl0IG9uIHRoZSBuZXh0IGxvb3Bcblx0ICAgICAgICAgICAgICAgICAgICB0aWNrcyArPSB0aGlzLl9nZXRMb29wRHVyYXRpb24oKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0KFRvbmUuVGlja3ModGlja3MpKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGFydE9mZnNldCA8IHRoaXMuX2xvb3BTdGFydCAmJiBldmVudC5zdGFydE9mZnNldCA+PSBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3AgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICAgIGV2ZW50LnN0YXJ0KFRvbmUuVGlja3ModGlja3MpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRPZmZzZXQgPj0gb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LnN0YXJ0KFRvbmUuVGlja3ModGlja3MpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBzdGFydCBmcm9tIHRoZSBzY2hlZHVsZWQgc3RhcnQgdGltZVxuXHRcdCAqICBAdHlwZSB7VGlja3N9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEBuYW1lIHN0YXJ0T2Zmc2V0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ3N0YXJ0T2Zmc2V0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRPZmZzZXQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5zdGFydE9mZnNldCArPSB0aGlzLl9zdGFydE9mZnNldDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU3RvcCB0aGUgcGFydCBhdCB0aGUgZ2l2ZW4gdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZWxpbmVQb3NpdGlvbn0gIHRpbWUgIFdoZW4gdG8gc3RvcCB0aGUgcGFydC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdmFyIHRpY2tzID0gdGhpcy50b1RpY2tzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aWNrcyk7XG5cdCAgICAgICAgdGhpcy5fc3RhdGUuc2V0U3RhdGVBdFRpbWUoVG9uZS5TdGF0ZS5TdG9wcGVkLCB0aWNrcyk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgZXZlbnQuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgR2V0L1NldCBhbiBFdmVudCdzIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqICBJZiBhIHZhbHVlIGlzIHBhc3NlZCBpbiBhbmQgbm8gZXZlbnQgZXhpc3RzIGF0XG5cdFx0ICogIHRoZSBnaXZlbiB0aW1lLCBvbmUgd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhhdCB2YWx1ZS5cblx0XHQgKiAgSWYgdHdvIGV2ZW50cyBhcmUgYXQgdGhlIHNhbWUgdGltZSwgdGhlIGZpcnN0IG9uZSB3aWxsXG5cdFx0ICogIGJlIHJldHVybmVkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHBhcnQuYXQoXCIxbVwiKTsgLy9yZXR1cm5zIHRoZSBwYXJ0IGF0IHRoZSBmaXJzdCBtZWFzdXJlXG5cdFx0ICpcblx0XHQgKiBwYXJ0LmF0KFwiMm1cIiwgXCJDMlwiKTsgLy9zZXQgdGhlIHZhbHVlIGF0IFwiMm1cIiB0byBDMi5cblx0XHQgKiAvL2lmIGFuIGV2ZW50IGRpZG4ndCBleGlzdCBhdCB0aGF0IHRpbWUsIGl0IHdpbGwgYmUgY3JlYXRlZC5cblx0XHQgKiAgQHBhcmFtIHtUcmFuc3BvcnRUaW1lfSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudCB0byBnZXQgb3Igc2V0LlxuXHRcdCAqICBAcGFyYW0geyo9fSB2YWx1ZSBJZiBhIHZhbHVlIGlzIHBhc3NlZCBpbiwgdGhlIHZhbHVlIG9mIHRoZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICBldmVudCBhdCB0aGUgZ2l2ZW4gdGltZSB3aWxsIGJlIHNldCB0byBpdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5FdmVudH0gdGhlIGV2ZW50IGF0IHRoZSB0aW1lXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICB2YXIgdGlja1RpbWUgPSBUb25lLlRpY2tzKDEpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBldmVudCA9IHRoaXMuX2V2ZW50c1tpXTtcblx0ICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRpbWUudG9UaWNrcygpIC0gZXZlbnQuc3RhcnRPZmZzZXQpIDwgdGlja1RpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh2YWx1ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC52YWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vaWYgdGhlcmUgd2FzIG5vIGV2ZW50IGF0IHRoYXQgdGltZSwgY3JlYXRlIG9uZVxuXHQgICAgICAgIGlmIChUb25lLmlzRGVmaW5lZCh2YWx1ZSkpIHtcblx0ICAgICAgICAgICAgdGhpcy5hZGQodGltZSwgdmFsdWUpO1xuXHQgICAgICAgICAgICAvL3JldHVybiB0aGUgbmV3IGV2ZW50XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ldmVudHNbdGhpcy5fZXZlbnRzLmxlbmd0aCAtIDFdO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQWRkIGEgYW4gZXZlbnQgdG8gdGhlIHBhcnQuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0aGUgbm90ZSBzaG91bGQgc3RhcnQuXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYW4gb2JqZWN0IGlzIHBhc3NlZCBpbiwgaXQgc2hvdWxkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBhICd0aW1lJyBhdHRyaWJ1dGUgYW5kIHRoZSByZXN0XG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIG9iamVjdCB3aWxsIGJlIHVzZWQgYXMgdGhlICd2YWx1ZScuXG5cdFx0ICogIEBwYXJhbSAge1RvbmUuRXZlbnR8Kn0gIHZhbHVlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBhcnR9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwYXJ0LmFkZChcIjFtXCIsIFwiQyMrMTFcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0aW1lLCB2YWx1ZSkge1xuXHQgICAgICAgIC8vZXh0cmFjdCB0aGUgcGFyYW1ldGVyc1xuXHQgICAgICAgIGlmICh0aW1lLmhhc093blByb3BlcnR5KCd0aW1lJykpIHtcblx0ICAgICAgICAgICAgdmFsdWUgPSB0aW1lO1xuXHQgICAgICAgICAgICB0aW1lID0gdmFsdWUudGltZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9UaWNrcyh0aW1lKTtcblx0ICAgICAgICB2YXIgZXZlbnQ7XG5cdCAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVG9uZS5FdmVudCkge1xuXHQgICAgICAgICAgICBldmVudCA9IHZhbHVlO1xuXHQgICAgICAgICAgICBldmVudC5jYWxsYmFjayA9IHRoaXMuX3RpY2suYmluZCh0aGlzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBldmVudCA9IG5ldyBUb25lLkV2ZW50KHtcblx0ICAgICAgICAgICAgICAgICdjYWxsYmFjayc6IHRoaXMuX3RpY2suYmluZCh0aGlzKSxcblx0ICAgICAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL3RoZSBzdGFydCBvZmZzZXRcblx0ICAgICAgICBldmVudC5zdGFydE9mZnNldCA9IHRpbWU7XG5cdCAgICAgICAgLy9pbml0aWFsaXplIHRoZSB2YWx1ZXNcblx0ICAgICAgICBldmVudC5zZXQoe1xuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IHRoaXMubG9vcEVuZCxcblx0ICAgICAgICAgICAgJ2xvb3BTdGFydCc6IHRoaXMubG9vcFN0YXJ0LFxuXHQgICAgICAgICAgICAnbG9vcCc6IHRoaXMubG9vcCxcblx0ICAgICAgICAgICAgJ2h1bWFuaXplJzogdGhpcy5odW1hbml6ZSxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IHRoaXMucGxheWJhY2tSYXRlLFxuXHQgICAgICAgICAgICAncHJvYmFiaWxpdHknOiB0aGlzLnByb2JhYmlsaXR5XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzLnB1c2goZXZlbnQpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIG5vdGUgaWYgaXQgc2hvdWxkIGJlIHBsYXllZCByaWdodCBub3dcblx0ICAgICAgICB0aGlzLl9yZXN0YXJ0RXZlbnQoZXZlbnQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZXN0YXJ0IHRoZSBnaXZlbiBldmVudFxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fSAgZXZlbnRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3Jlc3RhcnRFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmZvckVhY2goZnVuY3Rpb24gKHN0YXRlRXZlbnQpIHtcblx0ICAgICAgICAgICAgaWYgKHN0YXRlRXZlbnQuc3RhdGUgPT09IFRvbmUuU3RhdGUuU3RhcnRlZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnROb3RlKGV2ZW50LCBzdGF0ZUV2ZW50LnRpbWUsIHN0YXRlRXZlbnQub2Zmc2V0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vc3RvcCB0aGUgbm90ZVxuXHQgICAgICAgICAgICAgICAgZXZlbnQuc3RvcChUb25lLlRpY2tzKHN0YXRlRXZlbnQudGltZSkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGFuIGV2ZW50IGZyb20gdGhlIHBhcnQuIFdpbGwgcmVjdXJzaXZlbHkgaXRlcmF0ZVxuXHRcdCAqICBpbnRvIG5lc3RlZCBwYXJ0cyB0byBmaW5kIHRoZSBldmVudC5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIG9mIHRoZSBldmVudFxuXHRcdCAqICBAcGFyYW0geyp9IHZhbHVlIE9wdGlvbmFsbHkgc2VsZWN0IG9ubHkgYSBzcGVjaWZpYyBldmVudCB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGltZSwgdmFsdWUpIHtcblx0ICAgICAgICAvL2V4dHJhY3QgdGhlIHBhcmFtZXRlcnNcblx0ICAgICAgICBpZiAodGltZS5oYXNPd25Qcm9wZXJ0eSgndGltZScpKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gdGltZTtcblx0ICAgICAgICAgICAgdGltZSA9IHZhbHVlLnRpbWU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvVGlja3ModGltZSk7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2V2ZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9ldmVudHNbaV07XG5cdCAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIFRvbmUuUGFydCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQucmVtb3ZlKHRpbWUsIHZhbHVlKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGFydE9mZnNldCA9PT0gdGltZSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKFRvbmUuaXNVbmRlZih2YWx1ZSkgfHwgVG9uZS5pc0RlZmluZWQodmFsdWUpICYmIGV2ZW50LnZhbHVlID09PSB2YWx1ZSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5zcGxpY2UoaSwgMSk7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBSZW1vdmUgYWxsIG9mIHRoZSBub3RlcyBmcm9tIHRoZSBncm91cC5cblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9ldmVudHMgPSBbXTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2FuY2VsIHNjaGVkdWxlZCBzdGF0ZSBjaGFuZ2UgZXZlbnRzOiBpLmUuIFwic3RhcnRcIiBhbmQgXCJzdG9wXCIuXG5cdFx0ICogIEBwYXJhbSB7VGltZWxpbmVQb3NpdGlvbn0gYWZ0ZXIgVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggdG8gY2FuY2VsIHRoZSBzY2hlZHVsZWQgZXZlbnRzLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5QYXJ0fSAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5jYW5jZWwgPSBmdW5jdGlvbiAoYWZ0ZXIpIHtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICBldmVudC5jYW5jZWwoYWZ0ZXIpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbCh0aGlzLnRvVGlja3MoYWZ0ZXIpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgZXZlbnRzXG5cdFx0ICogIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBjdHggVGhlIGNvbnRleHRcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX2ZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGN0eCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9ldmVudHMpIHtcblx0ICAgICAgICAgICAgY3R4ID0gVG9uZS5kZWZhdWx0QXJnKGN0eCwgdGhpcyk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9ldmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIHZhciBlID0gdGhpcy5fZXZlbnRzW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBUb25lLlBhcnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBlLl9mb3JFYWNoKGNhbGxiYWNrLCBjdHgpO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGN0eCwgZSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCB0aGUgYXR0cmlidXRlIG9mIGFsbCBvZiB0aGUgZXZlbnRzXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ30gIGF0dHIgIHRoZSBhdHRyaWJ1dGUgdG8gc2V0XG5cdFx0ICogIEBwYXJhbSAgeyp9ICB2YWx1ZSAgICAgIFRoZSB2YWx1ZSB0byBzZXQgaXQgdG9cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuX3NldEFsbCA9IGZ1bmN0aW9uIChhdHRyLCB2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIGV2ZW50W2F0dHJdID0gdmFsdWU7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIHRpY2sgbWV0aG9kXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIG9mIHRoZSBldmVudCBpbiBzZWNvbmRzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUsIHZhbHVlKSB7XG5cdCAgICAgICAgaWYgKCF0aGlzLm11dGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aW1lLCB2YWx1ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEZXRlcm1pbmUgaWYgdGhlIGV2ZW50IHNob3VsZCBiZSBjdXJyZW50bHkgbG9vcGluZ1xuXHRcdCAqICBnaXZlbiB0aGUgbG9vcCBib3VuZHJpZXMgb2YgdGhpcyBQYXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUb25lLkV2ZW50fSAgZXZlbnQgIFRoZSBldmVudCB0byB0ZXN0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBhcnQucHJvdG90eXBlLl90ZXN0TG9vcEJvdW5kcmllcyA9IGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgIGlmIChldmVudC5zdGFydE9mZnNldCA8IHRoaXMuX2xvb3BTdGFydCB8fCBldmVudC5zdGFydE9mZnNldCA+PSB0aGlzLl9sb29wRW5kKSB7XG5cdCAgICAgICAgICAgIGV2ZW50LmNhbmNlbCgwKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXRlID09PSBUb25lLlN0YXRlLlN0b3BwZWQpIHtcblx0ICAgICAgICAgICAgLy9yZXNjaGVkdWxlIGl0IGlmIGl0J3Mgc3RvcHBlZFxuXHQgICAgICAgICAgICB0aGlzLl9yZXN0YXJ0RXZlbnQoZXZlbnQpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHByb2JhYmlsaXR5IG9mIHRoZSBub3RlcyBiZWluZyB0cmlnZ2VyZWQuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtOb3JtYWxSYW5nZX1cblx0XHQgKiAgQG5hbWUgcHJvYmFiaWxpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAncHJvYmFiaWxpdHknLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9iYWJpbGl0eTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHByb2IpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcHJvYmFiaWxpdHkgPSBwcm9iO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBbGwoJ3Byb2JhYmlsaXR5JywgcHJvYik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgSWYgc2V0IHRvIHRydWUsIHdpbGwgYXBwbHkgc21hbGwgcmFuZG9tIHZhcmlhdGlvblxuXHRcdCAqICB0byB0aGUgY2FsbGJhY2sgdGltZS4gSWYgdGhlIHZhbHVlIGlzIGdpdmVuIGFzIGEgdGltZSwgaXQgd2lsbCByYW5kb21pemVcblx0XHQgKiAgYnkgdGhhdCBhbW91bnQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogZXZlbnQuaHVtYW5pemUgPSB0cnVlO1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxUaW1lfVxuXHRcdCAqICBAbmFtZSBodW1hbml6ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGFydC5wcm90b3R5cGUsICdodW1hbml6ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2h1bWFuaXplO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFyaWF0aW9uKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2h1bWFuaXplID0gdmFyaWF0aW9uO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBbGwoJ2h1bWFuaXplJywgdmFyaWF0aW9uKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBJZiB0aGUgcGFydCBzaG91bGQgbG9vcCBvciBub3Rcblx0XHQgKiAgYmV0d2VlbiBUb25lLlBhcnQubG9vcFN0YXJ0IGFuZFxuXHRcdCAqICBUb25lLlBhcnQubG9vcEVuZC4gQW4gaW50ZWdlclxuXHRcdCAqICB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mXG5cdFx0ICogIGxvb3BzIHRoZSBQYXJ0IGRvZXMgYWZ0ZXIgaXQgc3RhcnRzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7Qm9vbGVhbnxQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgbG9vcFxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9vcCB0aGUgcGFydCA4IHRpbWVzXG5cdFx0ICogcGFydC5sb29wID0gODtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3A7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICAgICAgICAgICAgZXZlbnQuX2xvb3BTdGFydCA9IHRoaXMuX2xvb3BTdGFydDtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Ll9sb29wRW5kID0gdGhpcy5fbG9vcEVuZDtcblx0ICAgICAgICAgICAgICAgIGV2ZW50Lmxvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fdGVzdExvb3BCb3VuZHJpZXMoZXZlbnQpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbG9vcEVuZCBwb2ludCBkZXRlcm1pbmVzIHdoZW4gaXQgd2lsbFxuXHRcdCAqICBsb29wIGlmIFRvbmUuUGFydC5sb29wIGlzIHRydWUuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhcnQjXG5cdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdCAqICBAbmFtZSBsb29wRW5kXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBUb25lLlRpY2tzKHRoaXMuX2xvb3BFbmQpLnRvU2Vjb25kcygpO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gdGhpcy50b1RpY2tzKGxvb3BFbmQpO1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBldmVudC5sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXN0TG9vcEJvdW5kcmllcyhldmVudCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBsb29wU3RhcnQgcG9pbnQgZGV0ZXJtaW5lcyB3aGVuIGl0IHdpbGxcblx0XHQgKiAgbG9vcCBpZiBUb25lLlBhcnQubG9vcCBpcyB0cnVlLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXJ0I1xuXHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHQgKiAgQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xvb3BTdGFydCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFRvbmUuVGlja3ModGhpcy5fbG9vcFN0YXJ0KS50b1NlY29uZHMoKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGxvb3BTdGFydCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wU3RhcnQgPSB0aGlzLnRvVGlja3MobG9vcFN0YXJ0KTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2xvb3ApIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZXZlbnQubG9vcFN0YXJ0ID0gdGhpcy5sb29wU3RhcnQ7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGVzdExvb3BCb3VuZHJpZXMoZXZlbnQpO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0VGhlIHBsYXliYWNrIHJhdGUgb2YgdGhlIHBhcnRcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBwbGF5YmFja1JhdGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhcnQucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB0aGlzLl9zZXRBbGwoJ3BsYXliYWNrUmF0ZScsIHJhdGUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRUaGUgbnVtYmVyIG9mIHNjaGVkdWxlZCBub3RlcyBpbiB0aGUgcGFydC5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGFydCNcblx0XHQgKiAgQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqICBAbmFtZSBsZW5ndGhcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXJ0LnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50cy5sZW5ndGg7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXBcblx0XHQgKiAgQHJldHVybiAge1RvbmUuUGFydH0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGFydC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLnJlbW92ZUFsbCgpO1xuXHQgICAgICAgIHRoaXMuX3N0YXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZXZlbnRzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QYXJ0O1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUGF0dGVybiBhcnBlZ2dpYXRlcyBiZXR3ZWVuIHRoZSBnaXZlbiBub3Rlc1xuXHRcdCAqICAgICAgICAgaW4gYSBudW1iZXIgb2YgcGF0dGVybnMuIFNlZSBUb25lLkN0cmxQYXR0ZXJuIGZvclxuXHRcdCAqICAgICAgICAgYSBmdWxsIGxpc3Qgb2YgcGF0dGVybnMuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBhdHRlcm4gPSBuZXcgVG9uZS5QYXR0ZXJuKGZ1bmN0aW9uKHRpbWUsIG5vdGUpe1xuXHRcdCAqICAgLy90aGUgb3JkZXIgb2YgdGhlIG5vdGVzIHBhc3NlZCBpbiBkZXBlbmRzIG9uIHRoZSBwYXR0ZXJuXG5cdFx0ICogfSwgW1wiQzJcIiwgXCJENFwiLCBcIkU1XCIsIFwiQTZcIl0sIFwidXBEb3duXCIpO1xuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Mb29wfVxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggdGhlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcnBlZ2dpYXRlIG92ZXIuXG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnY2FsbGJhY2snLFxuXHQgICAgICAgICAgICAndmFsdWVzJyxcblx0ICAgICAgICAgICAgJ3BhdHRlcm4nXG5cdCAgICAgICAgXSwgVG9uZS5QYXR0ZXJuKTtcblx0ICAgICAgICBUb25lLkxvb3AuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgcGF0dGVybiBtYW5hZ2VyXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQ3RybFBhdHRlcm59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BhdHRlcm4gPSBuZXcgVG9uZS5DdHJsUGF0dGVybih7XG5cdCAgICAgICAgICAgICd2YWx1ZXMnOiBvcHRpb25zLnZhbHVlcyxcblx0ICAgICAgICAgICAgJ3R5cGUnOiBvcHRpb25zLnBhdHRlcm4sXG5cdCAgICAgICAgICAgICdpbmRleCc6IG9wdGlvbnMuaW5kZXhcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlBhdHRlcm4sIFRvbmUuTG9vcCk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSAge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGF0dGVybi5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGF0dGVybic6IFRvbmUuQ3RybFBhdHRlcm4uVHlwZS5VcCxcblx0ICAgICAgICAnY2FsbGJhY2snOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ3ZhbHVlcyc6IFtdXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBub3RlcyBzaG91bGQgYmUgY2FsbGVkXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIHRpbWUgIFRoZSB0aW1lIHRoZSBldmVudCBvY2N1cnNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUGF0dGVybi5wcm90b3R5cGUuX3RpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuY2FsbGJhY2sodGltZSwgdGhpcy5fcGF0dGVybi52YWx1ZSk7XG5cdCAgICAgICAgdGhpcy5fcGF0dGVybi5uZXh0KCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IGluZGV4IGluIHRoZSB2YWx1ZXMgYXJyYXkuXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlBhdHRlcm4jXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgaW5kZXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBhdHRlcm4ucHJvdG90eXBlLCAnaW5kZXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuLmluZGV4O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoaSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXR0ZXJuLmluZGV4ID0gaTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgYXJyYXkgb2YgZXZlbnRzLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICogIEBuYW1lIHZhbHVlc1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICd2YWx1ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuLnZhbHVlcztcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGF0dGVybi52YWx1ZXMgPSB2YWxzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwYXR0ZXJuLlxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5QYXR0ZXJuI1xuXHRcdCAqICBAdHlwZSB7Kn1cblx0XHQgKiAgQG5hbWUgdmFsdWVcblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QYXR0ZXJuLnByb3RvdHlwZSwgJ3ZhbHVlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi52YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgcGF0dGVybiB0eXBlLiBTZWUgVG9uZS5DdHJsUGF0dGVybiBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBwYXR0ZXJucy5cblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGF0dGVybiNcblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQG5hbWUgcGF0dGVyblxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGF0dGVybi5wcm90b3R5cGUsICdwYXR0ZXJuJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybi50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGF0dGVybikge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXR0ZXJuLnR5cGUgPSBwYXR0ZXJuO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBhdHRlcm59ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBhdHRlcm4ucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Mb29wLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcGF0dGVybi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fcGF0dGVybiA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGF0dGVybjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIEEgc2VxdWVuY2UgaXMgYW4gYWx0ZXJuYXRlIG5vdGF0aW9uIG9mIGEgcGFydC4gSW5zdGVhZFxuXHRcdCAqICAgICAgICAgb2YgcGFzc2luZyBpbiBhbiBhcnJheSBvZiBbdGltZSwgZXZlbnRdIHBhaXJzLCBwYXNzXG5cdFx0ICogICAgICAgICBpbiBhbiBhcnJheSBvZiBldmVudHMgd2hpY2ggd2lsbCBiZSBzcGFjZWQgYXQgdGhlXG5cdFx0ICogICAgICAgICBnaXZlbiBzdWJkaXZpc2lvbi4gU3ViLWFycmF5cyB3aWxsIHN1YmRpdmlkZSB0aGF0IGJlYXRcblx0XHQgKiAgICAgICAgIGJ5IHRoZSBudW1iZXIgb2YgaXRlbXMgYXJlIGluIHRoZSBhcnJheS5cblx0XHQgKiAgICAgICAgIFNlcXVlbmNlIG5vdGF0aW9uIGluc3BpcmF0aW9uIGZyb20gW1RpZGFsXShodHRwOi8veWF4dS5vcmcvdGlkYWwvKVxuXHRcdCAqICBAcGFyYW0gIHtGdW5jdGlvbn0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZXZlcnkgbm90ZVxuXHRcdCAqICBAcGFyYW0gIHtBcnJheX0gICAgZXZlbnRzICBUaGUgc2VxdWVuY2Vcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gc3ViZGl2aXNpb24gIFRoZSBzdWJkaXZpc2lvbiBiZXR3ZWVuIHdoaWNoIGV2ZW50cyBhcmUgcGxhY2VkLlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5QYXJ0fVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzZXEgPSBuZXcgVG9uZS5TZXF1ZW5jZShmdW5jdGlvbih0aW1lLCBub3RlKXtcblx0XHQgKiBcdGNvbnNvbGUubG9nKG5vdGUpO1xuXHRcdCAqIC8vc3RyYWlnaHQgcXVhdGVyIG5vdGVzXG5cdFx0ICogfSwgW1wiQzRcIiwgXCJFNFwiLCBcIkc0XCIsIFwiQTRcIl0sIFwiNG5cIik7XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNlcSA9IG5ldyBUb25lLlNlcXVlbmNlKGZ1bmN0aW9uKHRpbWUsIG5vdGUpe1xuXHRcdCAqIFx0Y29uc29sZS5sb2cobm90ZSk7XG5cdFx0ICogLy9zdWJkaXZpc2lvbnMgYXJlIGdpdmVuIGFzIHN1YmFycmF5c1xuXHRcdCAqIH0sIFtcIkM0XCIsIFtcIkU0XCIsIFwiRDRcIiwgXCJFNFwiXSwgXCJHNFwiLCBbXCJBNFwiLCBcIkc0XCJdXSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2NhbGxiYWNrJyxcblx0ICAgICAgICAgICAgJ2V2ZW50cycsXG5cdCAgICAgICAgICAgICdzdWJkaXZpc2lvbidcblx0ICAgICAgICBdLCBUb25lLlNlcXVlbmNlKTtcblx0ICAgICAgICAvL3JlbW92ZSB0aGUgZXZlbnRzXG5cdCAgICAgICAgdmFyIGV2ZW50cyA9IG9wdGlvbnMuZXZlbnRzO1xuXHQgICAgICAgIGRlbGV0ZSBvcHRpb25zLmV2ZW50cztcblx0ICAgICAgICBUb25lLlBhcnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgc3ViZGl2aXNvbiBvZiBlYWNoIG5vdGVcblx0XHRcdCAqICBAdHlwZSAge1RpY2tzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zdWJkaXZpc2lvbiA9IHRoaXMudG9UaWNrcyhvcHRpb25zLnN1YmRpdmlzaW9uKTtcblx0ICAgICAgICAvL2lmIG5vIHRpbWUgd2FzIHBhc3NlZCBpbiwgdGhlIGxvb3AgZW5kIGlzIHRoZSBlbmQgb2YgdGhlIGN5Y2xlXG5cdCAgICAgICAgaWYgKFRvbmUuaXNVbmRlZihvcHRpb25zLmxvb3BFbmQpICYmIFRvbmUuaXNEZWZpbmVkKGV2ZW50cykpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9vcEVuZCA9IGV2ZW50cy5sZW5ndGggKiB0aGlzLl9zdWJkaXZpc2lvbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy9kZWZhdWx0cyB0byBsb29waW5nXG5cdCAgICAgICAgdGhpcy5fbG9vcCA9IHRydWU7XG5cdCAgICAgICAgLy9hZGQgYWxsIG9mIHRoZSBldmVudHNcblx0ICAgICAgICBpZiAoVG9uZS5pc0RlZmluZWQoZXZlbnRzKSkge1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5hZGQoaSwgZXZlbnRzW2ldKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlNlcXVlbmNlLCBUb25lLlBhcnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHZhbHVlcy5cblx0XHQgKiAgQHR5cGUgIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLmRlZmF1bHRzID0geyAnc3ViZGl2aXNpb24nOiAnNG4nIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIHN1YmRpdmlzaW9uIG9mIHRoZSBzZXF1ZW5jZS4gVGhpcyBjYW4gb25seSBiZVxuXHRcdCAqICBzZXQgaW4gdGhlIGNvbnN0cnVjdG9yLiBUaGUgc3ViZGl2aXNpb24gaXMgdGhlXG5cdFx0ICogIGludGVydmFsIGJldHdlZW4gc3VjY2Vzc2l2ZSBzdGVwcy5cblx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlNlcXVlbmNlI1xuXHRcdCAqICBAbmFtZSBzdWJkaXZpc2lvblxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNlcXVlbmNlLnByb3RvdHlwZSwgJ3N1YmRpdmlzaW9uJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyh0aGlzLl9zdWJkaXZpc2lvbikudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgR2V0L1NldCBhbiBpbmRleCBvZiB0aGUgc2VxdWVuY2UuIElmIHRoZSBpbmRleCBjb250YWlucyBhIHN1YmFycmF5LFxuXHRcdCAqICBhIFRvbmUuU2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoYXQgc3ViLWFycmF5IHdpbGwgYmUgcmV0dXJuZWQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHNlcXVlbmNlID0gbmV3IFRvbmUuU2VxdWVuY2UocGxheU5vdGUsIFtcIkU0XCIsIFwiQzRcIiwgXCJGIzRcIiwgW1wiQTRcIiwgXCJCYjNcIl1dKVxuXHRcdCAqIHNlcXVlbmNlLmF0KDApLy8gPT4gcmV0dXJucyBcIkU0XCJcblx0XHQgKiAvL3NldCBhIHZhbHVlXG5cdFx0ICogc2VxdWVuY2UuYXQoMCwgXCJHM1wiKTtcblx0XHQgKiAvL2dldCBhIG5lc3RlZCBzZXF1ZW5jZVxuXHRcdCAqIHNlcXVlbmNlLmF0KDMpLmF0KDEpLy8gPT4gcmV0dXJucyBcIkJiM1wiXG5cdFx0ICogQHBhcmFtIHtQb3NpdGl2ZX0gaW5kZXggVGhlIGluZGV4IHRvIGdldCBvciBzZXRcblx0XHQgKiBAcGFyYW0geyp9IHZhbHVlIE9wdGlvbmFsbHkgcGFzcyBpbiB0aGUgdmFsdWUgdG8gc2V0IGF0IHRoZSBnaXZlbiBpbmRleC5cblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuXHQgICAgICAgIC8vaWYgdGhlIHZhbHVlIGlzIGFuIGFycmF5LFxuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBjdXJyZW50IGV2ZW50IGF0IHRoYXQgaW5kZXhcblx0ICAgICAgICAgICAgdGhpcy5yZW1vdmUoaW5kZXgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NhbGwgdGhlIHBhcmVudCdzIG1ldGhvZFxuXHQgICAgICAgIHJldHVybiBUb25lLlBhcnQucHJvdG90eXBlLmF0LmNhbGwodGhpcywgdGhpcy5faW5kZXhUaW1lKGluZGV4KSwgdmFsdWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBBZGQgYW4gZXZlbnQgYXQgYW4gaW5kZXgsIGlmIHRoZXJlJ3MgYWxyZWFkeSBzb21ldGhpbmdcblx0XHQgKiAgYXQgdGhhdCBpbmRleCwgb3ZlcndyaXRlIGl0LiBJZiBgdmFsdWVgIGlzIGFuIGFycmF5LFxuXHRcdCAqICBpdCB3aWxsIGJlIHBhcnNlZCBhcyBhIHN1YnNlcXVlbmNlLlxuXHRcdCAqICBAcGFyYW0ge051bWJlcn0gaW5kZXggVGhlIGluZGV4IHRvIGFkZCB0aGUgZXZlbnQgdG9cblx0XHQgKiAgQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYWRkIGF0IHRoYXQgaW5kZXhcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU2VxdWVuY2V9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2VxdWVuY2UucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcblx0ICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb25lLmlzQXJyYXkodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIC8vbWFrZSBhIHN1YnNlcXVlbmNlIGFuZCBhZGQgdGhhdCB0byB0aGUgc2VxdWVuY2Vcblx0ICAgICAgICAgICAgdmFyIHN1YlN1YmRpdmlzaW9uID0gTWF0aC5yb3VuZCh0aGlzLl9zdWJkaXZpc2lvbiAvIHZhbHVlLmxlbmd0aCk7XG5cdCAgICAgICAgICAgIHZhbHVlID0gbmV3IFRvbmUuU2VxdWVuY2UodGhpcy5fdGljay5iaW5kKHRoaXMpLCB2YWx1ZSwgVG9uZS5UaWNrcyhzdWJTdWJkaXZpc2lvbikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLlBhcnQucHJvdG90eXBlLmFkZC5jYWxsKHRoaXMsIHRoaXMuX2luZGV4VGltZShpbmRleCksIHZhbHVlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmVtb3ZlIGEgdmFsdWUgZnJvbSB0aGUgc2VxdWVuY2UgYnkgaW5kZXhcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZXZlbnQgdG8gcmVtb3ZlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlNlcXVlbmNlfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG5cdCAgICAgICAgVG9uZS5QYXJ0LnByb3RvdHlwZS5yZW1vdmUuY2FsbCh0aGlzLCB0aGlzLl9pbmRleFRpbWUoaW5kZXgpLCB2YWx1ZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgdGltZSBvZiB0aGUgaW5kZXggZ2l2ZW4gdGhlIFNlcXVlbmNlJ3Mgc3ViZGl2aXNpb25cblx0XHQgKiAgQHBhcmFtICB7TnVtYmVyfSAgaW5kZXhcblx0XHQgKiAgQHJldHVybiAge1RpbWV9ICBUaGUgdGltZSBvZiB0aGF0IGluZGV4XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlNlcXVlbmNlLnByb3RvdHlwZS5faW5kZXhUaW1lID0gZnVuY3Rpb24gKGluZGV4KSB7XG5cdCAgICAgICAgaWYgKGluZGV4IGluc3RhbmNlb2YgVG9uZS5UcmFuc3BvcnRUaW1lKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBpbmRleDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5UaWNrcyhpbmRleCAqIHRoaXMuX3N1YmRpdmlzaW9uICsgdGhpcy5zdGFydE9mZnNldCkudG9TZWNvbmRzKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5TZXF1ZW5jZX0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TZXF1ZW5jZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlBhcnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TZXF1ZW5jZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUHVsc2VPc2NpbGxhdG9yIGlzIGEgcHVsc2Ugb3NjaWxsYXRvciB3aXRoIGNvbnRyb2wgb3ZlciBwdWxzZSB3aWR0aCxcblx0XHQgKiAgICAgICAgIGFsc28ga25vd24gYXMgdGhlIGR1dHkgY3ljbGUuIEF0IDUwJSBkdXR5IGN5Y2xlICh3aWR0aCA9IDAuNSkgdGhlIHdhdmUgaXNcblx0XHQgKiAgICAgICAgIGEgc3F1YXJlIGFuZCBvbmx5IG9kZC1udW1iZXJlZCBoYXJtb25pY3MgYXJlIHByZXNlbnQuIEF0IGFsbCBvdGhlciB3aWR0aHNcblx0XHQgKiAgICAgICAgIGV2ZW4tbnVtYmVyZWQgaGFybW9uaWNzIGFyZSBwcmVzZW50LiBSZWFkIG1vcmVcblx0XHQgKiAgICAgICAgIFtoZXJlXShodHRwczovL3dpZ2dsZXdhdmUud29yZHByZXNzLmNvbS8yMDE0LzA4LzE2L3B1bHNlLXdhdmVmb3Jtcy1hbmQtaGFybW9uaWNzLykuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IFtmcmVxdWVuY3ldIFRoZSBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtIHtOb3JtYWxSYW5nZX0gW3dpZHRoXSBUaGUgd2lkdGggb2YgdGhlIHB1bHNlXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHB1bHNlID0gbmV3IFRvbmUuUHVsc2VPc2NpbGxhdG9yKFwiRTVcIiwgMC40KS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnd2lkdGgnXG5cdCAgICAgICAgXSwgVG9uZS5Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB3aWR0aCBvZiB0aGUgcHVsc2UuXG5cdFx0XHQgKiAgQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMud2lkdGggPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy53aWR0aCwgVG9uZS5UeXBlLk5vcm1hbFJhbmdlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBnYXRlIHRoZSB3aWR0aCBhbW91bnRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUgPSBuZXcgVG9uZS5HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHNhd3Rvb3RoIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zYXd0b290aCA9IG5ldyBUb25lLk9zY2lsbGF0b3Ioe1xuXHQgICAgICAgICAgICBmcmVxdWVuY3k6IG9wdGlvbnMuZnJlcXVlbmN5LFxuXHQgICAgICAgICAgICBkZXR1bmU6IG9wdGlvbnMuZGV0dW5lLFxuXHQgICAgICAgICAgICB0eXBlOiAnc2F3dG9vdGgnLFxuXHQgICAgICAgICAgICBwaGFzZTogb3B0aW9ucy5waGFzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fc2F3dG9vdGguZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHMuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fc2F3dG9vdGguZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRocmVzaG9sZCB0aGUgc2lnbmFsIHRvIHR1cm4gaXQgaW50byBhIHNxdWFyZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLldhdmVTaGFwZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3RocmVzaCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICAgICAgICBpZiAodmFsIDwgMCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICAvL2Nvbm5lY3Rpb25zXG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGguY2hhaW4odGhpcy5fdGhyZXNoLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5jaGFpbih0aGlzLl93aWR0aEdhdGUsIHRoaXMuX3RocmVzaCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnd2lkdGgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlB1bHNlT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBkZWZhdWx0IHBhcmFtZXRlcnMuXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ3dpZHRoJzogMC4yXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5zdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgxLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5zdG9wKHRpbWUpO1xuXHQgICAgICAgIC8vdGhlIHdpZHRoIGlzIHN0aWxsIGNvbm5lY3RlZCB0byB0aGUgb3V0cHV0LlxuXHQgICAgICAgIC8vdGhhdCBuZWVkcyB0byBiZSBzdG9wcGVkIGFsc29cblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLCB0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgcmVzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUHVsc2VPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtEZWdyZWVzfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zYXd0b290aC5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3Nhd3Rvb3RoLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvci4gQWx3YXlzIHJldHVybnMgXCJwdWxzZVwiLlxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlB1bHNlT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlB1bHNlT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gJ3B1bHNlJztcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwYXJ0aWFscyBvZiB0aGUgd2F2ZWZvcm0uIENhbm5vdCBzZXQgcGFydGlhbHMgZm9yIHRoaXMgd2F2ZWZvcm0gdHlwZVxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlB1bHNlT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUHVsc2VPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gW107XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAgbWV0aG9kLlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlB1bHNlT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QdWxzZU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zYXd0b290aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2F3dG9vdGggPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3dpZHRoJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy53aWR0aC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy53aWR0aCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fd2lkdGhHYXRlLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl93aWR0aEdhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3RocmVzaC5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdGhyZXNoID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlB1bHNlT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIFRvbmUuUFdNT3NjaWxsYXRvciBtb2R1bGF0ZXMgdGhlIHdpZHRoIG9mIGEgVG9uZS5QdWxzZU9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgIGF0IHRoZSBtb2R1bGF0aW9uRnJlcXVlbmN5LiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIGNvbnRpbnVvdXNseVxuXHRcdCAqICAgICAgICAgY2hhbmdpbmcgdGhlIHRpbWJyZSBvZiB0aGUgb3NjaWxsYXRvciBieSBhbHRlcmluZyB0aGUgaGFybW9uaWNzXG5cdFx0ICogICAgICAgICBnZW5lcmF0ZWQuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gbW9kdWxhdGlvbkZyZXF1ZW5jeSBUaGUgbW9kdWxhdGlvbiBmcmVxdWVuY3kgb2YgdGhlIHdpZHRoIG9mIHRoZSBwdWxzZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAgdmFyIHB3bSA9IG5ldyBUb25lLlBXTU9zY2lsbGF0b3IoXCJBYjNcIiwgMC4zKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25GcmVxdWVuY3knXG5cdCAgICAgICAgXSwgVG9uZS5QV01Pc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBwdWxzZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuUHVsc2VPc2NpbGxhdG9yfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wdWxzZSA9IG5ldyBUb25lLlB1bHNlT3NjaWxsYXRvcihvcHRpb25zLm1vZHVsYXRpb25GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8vY2hhbmdlIHRoZSBwdWxzZSBvc2NpbGxhdG9yIHR5cGVcblx0ICAgICAgICB0aGlzLl9wdWxzZS5fc2F3dG9vdGgudHlwZSA9ICdzaW5lJztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbW9kdWxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcih7XG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knOiBvcHRpb25zLmZyZXF1ZW5jeSxcblx0ICAgICAgICAgICAgJ2RldHVuZSc6IG9wdGlvbnMuZGV0dW5lLFxuXHQgICAgICAgICAgICAncGhhc2UnOiBvcHRpb25zLnBoYXNlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2NhbGUgdGhlIG9zY2lsbGF0b3Igc28gaXQgZG9lc24ndCBnbyBzaWxlbnRcblx0XHRcdCAqICBhdCB0aGUgZXh0cmVtZSB2YWx1ZXMuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTXVsdGlwbHl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjYWxlID0gbmV3IFRvbmUuTXVsdGlwbHkoMik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0XHQgKiAgQHR5cGUge0NlbnRzfVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gdGhpcy5fbW9kdWxhdG9yLmRldHVuZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdGlvbiByYXRlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRnJlcXVlbmN5ID0gdGhpcy5fcHVsc2UuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY2hhaW4odGhpcy5fc2NhbGUsIHRoaXMuX3B1bHNlLndpZHRoKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QV01Pc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ21vZHVsYXRpb25GcmVxdWVuY3knOiAwLjRcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2Uuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9wdWxzZS5zdG9wKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5yZXN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuIEFsd2F5cyByZXR1cm5zIFwicHdtXCIuXG5cdFx0ICogQHJlYWRPbmx5XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUFdNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBXTU9zY2lsbGF0b3IucHJvdG90eXBlLCAndHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICdwd20nO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBhcnRpYWxzIG9mIHRoZSB3YXZlZm9ybS4gQ2Fubm90IHNldCBwYXJ0aWFscyBmb3IgdGhpcyB3YXZlZm9ybSB0eXBlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUFdNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0ICogQG5hbWUgcGFydGlhbHNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUFdNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yIGluIGRlZ3JlZXMuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUFdNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7bnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBoYXNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9kdWxhdG9yLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUFdNT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QV01Pc2NpbGxhdG9yLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fcHVsc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3B1bHNlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fc2NhbGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25GcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLlBXTU9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLkZNT3NjaWxsYXRvclxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNvdXJjZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBwYXJhbSB7RnJlcXVlbmN5fSBmcmVxdWVuY3kgVGhlIHN0YXJ0aW5nIGZyZXF1ZW5jeSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtTdHJpbmd9IG1vZHVsYXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiAvL2Egc2luZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeS1tb2R1bGF0ZWQgYnkgYSBzcXVhcmUgd2F2ZVxuXHRcdCAqIHZhciBmbU9zYyA9IG5ldyBUb25lLkZNT3NjaWxsYXRvcihcIkFiM1wiLCBcInNpbmVcIiwgXCJzcXVhcmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3VtZW50cywgW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ3R5cGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvblR5cGUnXG5cdCAgICAgICAgXSwgVG9uZS5GTU9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBuZXcgVG9uZS5Pc2NpbGxhdG9yKG9wdGlvbnMuZnJlcXVlbmN5LCBvcHRpb25zLnR5cGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yJ3MgZnJlcXVlbmN5XG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLl9jYXJyaWVyLmRldHVuZTtcblx0ICAgICAgICB0aGlzLmRldHVuZS52YWx1ZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW9uIGluZGV4IHdoaWNoIGlzIGluIGVzc2VuY2UgdGhlIGRlcHRoIG9yIGFtb3VudCBvZiB0aGUgbW9kdWxhdGlvbi4gSW4gb3RoZXIgdGVybXMgaXQgaXMgdGhlXG5cdFx0XHQgKiAgcmF0aW8gb2YgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxhdGluZyBzaWduYWwgKG1mKSB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZVxuXHRcdFx0ICogIG1vZHVsYXRpbmcgc2lnbmFsIChtYSkgLS0gYXMgaW4gbWEvbWYuXG5cdFx0XHQgKlx0QHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICpcdEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5tb2R1bGF0aW9uSW5kZXgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW5nIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy5tb2R1bGF0aW9uVHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSBjYXJyaWVyIGFuZCB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3JzLlxuXHRcdFx0ICogIEEgaGFybW9uaWNpdHkgb2YgMSBnaXZlcyBib3RoIG9zY2lsbGF0b3JzIHRoZSBzYW1lIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdGhlIG1vZHVsYXRvciBhbiBvY3RhdmUgYmVsb3cgY2FycmllclxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKDApO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX2NhcnJpZXIuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLm1vZHVsYXRpb25JbmRleCwgdGhpcy5fbW9kdWxhdGlvbk5vZGUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jb25uZWN0KHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uSW5kZXgnLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZNT3NjaWxsYXRvciwgVG9uZS5Tb3VyY2UpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IDIsXG5cdCAgICAgICAgJ21vZHVsYXRpb25UeXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0b3AgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuRk1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvblR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uVHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRk1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIGNhcnJpZXIgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuRk1Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZNT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25JbmRleCA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRk1Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5BTU9zY2lsbGF0b3Jcblx0XHQgKlxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gbW9kdWxhdGlvblR5cGUgVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBzaW5lIG9zY2lsbGF0b3IgZnJlcXVlbmN5LW1vZHVsYXRlZCBieSBhIHNxdWFyZSB3YXZlXG5cdFx0ICogdmFyIGZtT3NjID0gbmV3IFRvbmUuQU1Pc2NpbGxhdG9yKFwiQWIzXCIsIFwic2luZVwiLCBcInNxdWFyZVwiKS50b01hc3RlcigpLnN0YXJ0KCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZScsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uVHlwZSdcblx0ICAgICAgICBdLCBUb25lLkFNT3NjaWxsYXRvcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllciBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fY2FycmllciA9IG5ldyBUb25lLk9zY2lsbGF0b3Iob3B0aW9ucy5mcmVxdWVuY3ksIG9wdGlvbnMudHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gdGhpcy5fY2Fycmllci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sIHNpZ25hbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLl9jYXJyaWVyLmRldHVuZTtcblx0ICAgICAgICB0aGlzLmRldHVuZS52YWx1ZSA9IG9wdGlvbnMuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0aW5nIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbmV3IFRvbmUuT3NjaWxsYXRvcihvcHRpb25zLmZyZXF1ZW5jeSwgb3B0aW9ucy5tb2R1bGF0aW9uVHlwZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgY29udmVydCB0aGUgLTEsMSBvdXRwdXQgdG8gMCwxXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQXVkaW9Ub0dhaW59XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG5ldyBUb25lLkF1ZGlvVG9HYWluKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIGZyZXF1ZW5jeSByYXRpbyBiZXR3ZWVuIHRoZSBjYXJyaWVyIGFuZCB0aGUgbW9kdWxhdG9yIG9zY2lsbGF0b3JzLlxuXHRcdFx0ICogIEEgaGFybW9uaWNpdHkgb2YgMSBnaXZlcyBib3RoIG9zY2lsbGF0b3JzIHRoZSBzYW1lIGZyZXF1ZW5jeS5cblx0XHRcdCAqICBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdGhlIG1vZHVsYXRvciBhbiBvY3RhdmUgYmVsb3cgY2FycmllclxuXHRcdFx0ICogc3ludGguaGFybW9uaWNpdHkudmFsdWUgPSAwLjU7XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5oYXJtb25pY2l0eSk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS51bml0cyA9IFRvbmUuVHlwZS5Qb3NpdGl2ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbm9kZSB3aGVyZSB0aGUgbW9kdWxhdGlvbiBoYXBwZW5zXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBuZXcgVG9uZS5HYWluKDApO1xuXHQgICAgICAgIC8vY29ubmVjdGlvbnNcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLl9tb2R1bGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5jb25uZWN0KHRoaXMuX21vZHVsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jaGFpbih0aGlzLl9tb2R1bGF0aW9uU2NhbGUsIHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY2hhaW4odGhpcy5fbW9kdWxhdGlvbk5vZGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLnBoYXNlID0gb3B0aW9ucy5waGFzZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5J1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQU1Pc2NpbGxhdG9yLCBUb25lLk9zY2lsbGF0b3IpO1xuXHQgICAgLyoqXG5cdFx0ICogIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKiAgQGNvbnN0XG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ21vZHVsYXRpb25UeXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5zdGFydCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lIChvcHRpb25hbCkgdGltaW5nIHBhcmFtZXRlclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5BTU9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHJlc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gdGltZSAob3B0aW9uYWwpIHRpbWluZyBwYXJhbWV0ZXJcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IucmVzdGFydCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIGNhcnJpZXIgb3NjaWxsYXRvclxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkFNT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuQU1Pc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgbW9kdWxhdGlvblR5cGVcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uVHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsYXRvci50eXBlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodHlwZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9tb2R1bGF0b3IudHlwZSA9IHR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuQU1Pc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BoYXNlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2Fycmllci5waGFzZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHBoYXNlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NhcnJpZXIucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kdWxhdG9yLnBoYXNlID0gcGhhc2U7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIGNhcnJpZXIgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5BTU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge0FycmF5fVxuXHRcdCAqIEBuYW1lIHBhcnRpYWxzXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBvc2MucGFydGlhbHMgPSBbMSwgMC4yLCAwLjAxXTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcnJpZXIucGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9jYXJyaWVyLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuQU1Pc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFNT3NjaWxsYXRvci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNvdXJjZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQU1Pc2NpbGxhdG9yO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgVG9uZS5GYXRPc2NpbGxhdG9yXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgc3RhcnRpbmcgZnJlcXVlbmN5IG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiB0aGUgY2FycmllciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAcGFyYW0ge1N0cmluZ30gbW9kdWxhdGlvblR5cGUgVGhlIHR5cGUgb2YgdGhlIG1vZHVsYXRvciBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vYSBzaW5lIG9zY2lsbGF0b3IgZnJlcXVlbmN5LW1vZHVsYXRlZCBieSBhIHNxdWFyZSB3YXZlXG5cdFx0ICogdmFyIGZtT3NjID0gbmV3IFRvbmUuRmF0T3NjaWxsYXRvcihcIkFiM1wiLCBcInNpbmVcIiwgXCJzcXVhcmVcIikudG9NYXN0ZXIoKS5zdGFydCgpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd0eXBlJyxcblx0ICAgICAgICAgICAgJ3NwcmVhZCdcblx0ICAgICAgICBdLCBUb25lLkZhdE9zY2lsbGF0b3IpO1xuXHQgICAgICAgIFRvbmUuU291cmNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG9zY2lsbGF0b3IncyBmcmVxdWVuY3lcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2wgc2lnbmFsLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXJyYXkgb2Ygb3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gW107XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHRvdGFsIHNwcmVhZCBvZiB0aGUgb3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSAge0NlbnRzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9zcHJlYWQgPSBvcHRpb25zLnNwcmVhZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgdHlwZSBvZiB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3R5cGUgPSBvcHRpb25zLnR5cGU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBoYXNlIG9mIHRoZSBvc2NpbGxhdG9yc1xuXHRcdFx0ICogIEB0eXBlIHtEZWdyZWVzfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9waGFzZSA9IG9wdGlvbnMucGhhc2U7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHBhcnRpYWxzIGFycmF5XG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLnBhcnRpYWxzLCBbXSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIGNvdW50IGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMuY291bnQgPSBvcHRpb25zLmNvdW50O1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5GYXRPc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnZnJlcXVlbmN5JzogNDQwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdwaGFzZSc6IDAsXG5cdCAgICAgICAgJ3NwcmVhZCc6IDIwLFxuXHQgICAgICAgICdjb3VudCc6IDMsXG5cdCAgICAgICAgJ3R5cGUnOiAnc2F3dG9vdGgnXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd11cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdGFydCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgIG9zYy5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICByZXN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IHRpbWUgKG9wdGlvbmFsKSB0aW1pbmcgcGFyYW1ldGVyXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnJlc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIG9zY2lsbGF0b3JzXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9ufSAgaXRlcmF0b3IgIFRoZSBpdGVyYXRvciBmdW5jdGlvblxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZS5fZm9yRWFjaCA9IGZ1bmN0aW9uIChpdGVyYXRvcikge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgaXRlcmF0b3IuY2FsbCh0aGlzLCB0aGlzLl9vc2NpbGxhdG9yc1tpXSwgaSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBjYXJyaWVyIG9zY2lsbGF0b3Jcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICogQG5hbWUgdHlwZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHR5cGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZXR1bmUgc3ByZWFkIGJldHdlZW4gdGhlIG9zY2lsbGF0b3JzLiBJZiBcImNvdW50XCIgaXNcblx0XHQgKiBzZXQgdG8gMyBvc2NpbGxhdG9ycyBhbmQgdGhlIFwic3ByZWFkXCIgaXMgc2V0IHRvIDQwLFxuXHRcdCAqIHRoZSB0aHJlZSBvc2NpbGxhdG9ycyB3b3VsZCBiZSBkZXR1bmVkIGxpa2UgdGhpczogWy0yMCwgMCwgMjBdXG5cdFx0ICogZm9yIGEgdG90YWwgZGV0dW5lIHNwcmVhZCBvZiA0MCBjZW50cy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtDZW50c31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAnc3ByZWFkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3ByZWFkO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3ByZWFkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NwcmVhZCA9IHNwcmVhZDtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aCA+IDEpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IC1zcHJlYWQgLyAyO1xuXHQgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSBzcHJlYWQgLyAodGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoIC0gMSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MsIGkpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvc2MuZGV0dW5lLnZhbHVlID0gc3RhcnQgKyBzdGVwICogaTtcblx0ICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbnVtYmVyIG9mIGRldHVuZWQgb3NjaWxsYXRvcnNcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgY291bnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLCAnY291bnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChjb3VudCkge1xuXHQgICAgICAgICAgICBjb3VudCA9IE1hdGgubWF4KGNvdW50LCAxKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aCAhPT0gY291bnQpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBwYXJ0aWFscyA9IHRoaXMucGFydGlhbHM7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0ICAgICAgICAgICAgICAgIC8vZGlzcG9zZSB0aGUgcHJldmlvdXMgb3NjaWxsYXRvcnNcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgICAgIG9zYy5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzID0gW107XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgb3NjID0gbmV3IFRvbmUuT3NjaWxsYXRvcigpO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFRvbmUuT3NjaWxsYXRvci5UeXBlLkN1c3RvbSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBvc2MucGFydGlhbHMgPSB0aGlzLl9wYXJ0aWFscztcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBvc2MudHlwZSA9IHRoaXMuX3R5cGU7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIG9zYy5waGFzZSA9IHRoaXMuX3BoYXNlO1xuXHQgICAgICAgICAgICAgICAgICAgIG9zYy52b2x1bWUudmFsdWUgPSAtNiAtIGNvdW50ICogMS4xO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3Qob3NjLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdChvc2MuZGV0dW5lKTtcblx0ICAgICAgICAgICAgICAgICAgICBvc2MuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0gPSBvc2M7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvL3NldCB0aGUgc3ByZWFkXG5cdCAgICAgICAgICAgICAgICB0aGlzLnNwcmVhZCA9IHRoaXMuX3NwcmVhZDtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3NjLnN0YXJ0KCk7XG5cdCAgICAgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBwaGFzZSBvZiB0aGUgb3NjaWxsYXRvciBpbiBkZWdyZWVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkZhdE9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuRmF0T3NjaWxsYXRvci5wcm90b3R5cGUsICdwaGFzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAob3NjKSB7XG5cdCAgICAgICAgICAgICAgICBvc2MucGhhc2UgPSBwaGFzZTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIGNhcnJpZXIgd2F2ZWZvcm0uIEEgcGFydGlhbCByZXByZXNlbnRzXG5cdFx0ICogdGhlIGFtcGxpdHVkZSBhdCBhIGhhcm1vbmljLiBUaGUgZmlyc3QgaGFybW9uaWMgaXMgdGhlXG5cdFx0ICogZnVuZGFtZW50YWwgZnJlcXVlbmN5LCB0aGUgc2Vjb25kIGlzIHRoZSBvY3RhdmUgYW5kIHNvIG9uXG5cdFx0ICogZm9sbG93aW5nIHRoZSBoYXJtb25pYyBzZXJpZXMuXG5cdFx0ICogU2V0dGluZyB0aGlzIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgdG8gXCJjdXN0b21cIi5cblx0XHQgKiBUaGUgdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgdHlwZSBpcyBub3QgXCJjdXN0b21cIi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5GYXRPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5GYXRPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3BhcnRpYWxzJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgICAgICB0aGlzLl90eXBlID0gVG9uZS5Pc2NpbGxhdG9yLlR5cGUuQ3VzdG9tO1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgICAgIG9zYy5wYXJ0aWFscyA9IHBhcnRpYWxzO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5GYXRPc2NpbGxhdG9yfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkZhdE9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fcGFydGlhbHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkZhdE9zY2lsbGF0b3I7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk9tbmlPc2NpbGxhdG9yIGFnZ3JlZ2F0ZXMgVG9uZS5Pc2NpbGxhdG9yLCBUb25lLlB1bHNlT3NjaWxsYXRvcixcblx0XHQgKiAgICAgICAgIFRvbmUuUFdNT3NjaWxsYXRvciwgVG9uZS5GTU9zY2lsbGF0b3IsIFRvbmUuQU1Pc2NpbGxhdG9yLCBhbmQgVG9uZS5GYXRPc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICBpbnRvIG9uZSBjbGFzcy4gVGhlIG9zY2lsbGF0b3IgY2xhc3MgY2FuIGJlIGNoYW5nZWQgYnkgc2V0dGluZyB0aGUgYHR5cGVgLlxuXHRcdCAqICAgICAgICAgYG9tbmlPc2MudHlwZSA9IFwicHdtXCJgIHdpbGwgc2V0IGl0IHRvIHRoZSBUb25lLlBXTU9zY2lsbGF0b3IuIFByZWZpeGluZ1xuXHRcdCAqICAgICAgICAgYW55IG9mIHRoZSBiYXNpYyB0eXBlcyAoXCJzaW5lXCIsIFwic3F1YXJlNFwiLCBldGMuKSB3aXRoIFwiZm1cIiwgXCJhbVwiLCBvciBcImZhdFwiXG5cdFx0ICogICAgICAgICB3aWxsIHVzZSB0aGUgRk1Pc2NpbGxhdG9yLCBBTU9zY2lsbGF0b3Igb3IgRmF0T3NjaWxsYXRvciByZXNwZWN0aXZlbHkuXG5cdFx0ICogICAgICAgICBGb3IgZXhhbXBsZTogYG9tbmlPc2MudHlwZSA9IFwiZmF0c2F3dG9vdGhcImAgd2lsbCBjcmVhdGUgc2V0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICB0byBhIEZhdE9zY2lsbGF0b3Igb2YgdHlwZSBcInNhd3Rvb3RoXCIuXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXF1ZW5jeSBUaGUgaW5pdGlhbCBmcmVxdWVuY3kgb2YgdGhlIG9zY2lsbGF0b3IuXG5cdFx0ICogIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBvc2NpbGxhdG9yLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqICB2YXIgb21uaU9zYyA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKFwiQyM0XCIsIFwicHdtXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAndHlwZSdcblx0ICAgICAgICBdLCBUb25lLk9tbmlPc2NpbGxhdG9yKTtcblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKG9wdGlvbnMuZnJlcXVlbmN5LCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGV0dW5lIGNvbnRyb2xcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3Igc291cmNlXG5cdFx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc291cmNlVHlwZSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgb3NjaWxsYXRvclxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIC8vc2V0IHRoZSBvc2NpbGxhdG9yXG5cdCAgICAgICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgLy9zZXQgdGhlIG9wdGlvbnNcblx0ICAgICAgICB0aGlzLnNldChvcHRpb25zKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk9tbmlPc2NpbGxhdG9yLCBUb25lLlNvdXJjZSk7XG5cdCAgICAvKipcblx0XHQgKiAgZGVmYXVsdCB2YWx1ZXNcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqICBAY29uc3Rcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6IDQ0MCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAndHlwZSc6ICdzaW5lJyxcblx0ICAgICAgICAncGhhc2UnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEBlbnVtIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICB2YXIgT21uaU9zY1R5cGUgPSB7XG5cdCAgICAgICAgUHVsc2U6ICdQdWxzZU9zY2lsbGF0b3InLFxuXHQgICAgICAgIFBXTTogJ1BXTU9zY2lsbGF0b3InLFxuXHQgICAgICAgIE9zYzogJ09zY2lsbGF0b3InLFxuXHQgICAgICAgIEZNOiAnRk1Pc2NpbGxhdG9yJyxcblx0ICAgICAgICBBTTogJ0FNT3NjaWxsYXRvcicsXG5cdCAgICAgICAgRmF0OiAnRmF0T3NjaWxsYXRvcidcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRvIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHN0YXJ0IHRoZSBvc2NpbGxhdG9yXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0byBzdGFydCB0aGUgb3NjaWxsYXRvclxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RvcCh0aW1lKTtcblx0ICAgIH07XG5cdCAgICBUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnJlc3RhcnQodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIG9zY2lsbGF0b3IuIENhbiBiZSBhbnkgb2YgdGhlIGJhc2ljIHR5cGVzOiBzaW5lLCBzcXVhcmUsIHRyaWFuZ2xlLCBzYXd0b290aC4gT3Jcblx0XHQgKiBwcmVmaXggdGhlIGJhc2ljIHR5cGVzIHdpdGggXCJmbVwiLCBcImFtXCIsIG9yIFwiZmF0XCIgdG8gdXNlIHRoZSBGTU9zY2lsbGF0b3IsIEFNT3NjaWxsYXRvciBvciBGYXRPc2NpbGxhdG9yXG5cdFx0ICogdHlwZXMuIFRoZSBvc2NpbGxhdG9yIGNvdWxkIGFsc28gYmUgc2V0IHRvIFwicHdtXCIgb3IgXCJwdWxzZVwiLiBBbGwgb2YgdGhlIHBhcmFtZXRlcnMgb2YgdGhlXG5cdFx0ICogb3NjaWxsYXRvcidzIGNsYXNzIGFyZSBhY2Nlc3NpYmxlIHdoZW4gdGhlIG9zY2lsbGF0b3IgaXMgc2V0IHRvIHRoYXQgdHlwZSwgYnV0IHRocm93cyBhbiBlcnJvclxuXHRcdCAqIHdoZW4gaXQncyBub3QuXG5cdFx0ICpcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIHR5cGVcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIG9tbmlPc2MudHlwZSA9IFwicHdtXCI7XG5cdFx0ICogLy9tb2R1bGF0aW9uRnJlcXVlbmN5IGlzIHBhcmFtZXRlciB3aGljaCBpcyBhdmFpbGFibGVcblx0XHQgKiAvL29ubHkgd2hlbiB0aGUgdHlwZSBpcyBcInB3bVwiLlxuXHRcdCAqIG9tbmlPc2MubW9kdWxhdGlvbkZyZXF1ZW5jeS52YWx1ZSA9IDAuNTtcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vYW4gc3F1YXJlIHdhdmUgZnJlcXVlbmN5IG1vZHVsYXRlZCBieSBhIHNhd3Rvb3RoXG5cdFx0ICogb21uaU9zYy50eXBlID0gXCJmbXNxdWFyZVwiO1xuXHRcdCAqIG9tbmlPc2MubW9kdWxhdGlvblR5cGUgPSBcInNhd3Rvb3RoXCI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICd0eXBlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgcHJlZml4ID0gJyc7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GTSkge1xuXHQgICAgICAgICAgICAgICAgcHJlZml4ID0gJ2ZtJztcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5BTSkge1xuXHQgICAgICAgICAgICAgICAgcHJlZml4ID0gJ2FtJztcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5GYXQpIHtcblx0ICAgICAgICAgICAgICAgIHByZWZpeCA9ICdmYXQnO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyB0aGlzLl9vc2NpbGxhdG9yLnR5cGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlLnN1YnN0cigwLCAyKSA9PT0gJ2ZtJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5GTSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlLnN1YnN0cigyKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLnN1YnN0cigwLCAyKSA9PT0gJ2FtJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5BTSk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlLnN1YnN0cigyKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLnN1YnN0cigwLCAzKSA9PT0gJ2ZhdCcpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld09zY2lsbGF0b3IoT21uaU9zY1R5cGUuRmF0KTtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IudHlwZSA9IHR5cGUuc3Vic3RyKDMpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwd20nKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLlBXTSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3B1bHNlJykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3T3NjaWxsYXRvcihPbW5pT3NjVHlwZS5QdWxzZSk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdPc2NpbGxhdG9yKE9tbmlPc2NUeXBlLk9zYyk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGFydGlhbHMgb2YgdGhlIHdhdmVmb3JtLiBBIHBhcnRpYWwgcmVwcmVzZW50c1xuXHRcdCAqIHRoZSBhbXBsaXR1ZGUgYXQgYSBoYXJtb25pYy4gVGhlIGZpcnN0IGhhcm1vbmljIGlzIHRoZVxuXHRcdCAqIGZ1bmRhbWVudGFsIGZyZXF1ZW5jeSwgdGhlIHNlY29uZCBpcyB0aGUgb2N0YXZlIGFuZCBzbyBvblxuXHRcdCAqIGZvbGxvd2luZyB0aGUgaGFybW9uaWMgc2VyaWVzLlxuXHRcdCAqIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIHRvIFwiY3VzdG9tXCIuXG5cdFx0ICogVGhlIHZhbHVlIGlzIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlIHR5cGUgaXMgbm90IFwiY3VzdG9tXCIuXG5cdFx0ICogVGhpcyBpcyBub3QgYXZhaWxhYmxlIG9uIFwicHdtXCIgYW5kIFwicHVsc2VcIiBvc2NpbGxhdG9yIHR5cGVzLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtBcnJheX1cblx0XHQgKiBAbmFtZSBwYXJ0aWFsc1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogb3NjLnBhcnRpYWxzID0gWzEsIDAuMiwgMC4wMV07XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdwYXJ0aWFscycsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3IucGFydGlhbHM7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChwYXJ0aWFscykge1xuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLnBhcnRpYWxzID0gcGFydGlhbHM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IGEgbWVtYmVyL2F0dHJpYnV0ZSBvZiB0aGUgb3NjaWxsYXRvci5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBwYXJhbXNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByYW1wVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5PbW5pT3NjaWxsYXRvcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgdmFsdWUpIHtcblx0ICAgICAgICAvL21ha2Ugc3VyZSB0aGUgdHlwZSBpcyBzZXQgZmlyc3Rcblx0ICAgICAgICBpZiAocGFyYW1zID09PSAndHlwZScpIHtcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gdmFsdWU7XG5cdCAgICAgICAgfSBlbHNlIGlmIChUb25lLmlzT2JqZWN0KHBhcmFtcykgJiYgcGFyYW1zLmhhc093blByb3BlcnR5KCd0eXBlJykpIHtcblx0ICAgICAgICAgICAgdGhpcy50eXBlID0gcGFyYW1zLnR5cGU7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vdGhlbiBzZXQgdGhlIHJlc3Rcblx0ICAgICAgICBUb25lLnByb3RvdHlwZS5zZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY29ubmVjdCB0aGUgb3NjaWxsYXRvciB0byB0aGUgZnJlcXVlbmN5IGFuZCBkZXR1bmUgc2lnbmFsc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUuX2NyZWF0ZU5ld09zY2lsbGF0b3IgPSBmdW5jdGlvbiAob3NjVHlwZSkge1xuXHQgICAgICAgIGlmIChvc2NUeXBlICE9PSB0aGlzLl9zb3VyY2VUeXBlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3NvdXJjZVR5cGUgPSBvc2NUeXBlO1xuXHQgICAgICAgICAgICB2YXIgT3NjaWxsYXRvckNvbnN0cnVjdG9yID0gVG9uZVtvc2NUeXBlXTtcblx0ICAgICAgICAgICAgLy9zaG9ydCBkZWxheSB0byBhdm9pZCBjbGlja3Mgb24gdGhlIGNoYW5nZVxuXHQgICAgICAgICAgICB2YXIgbm93ID0gdGhpcy5ub3coKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX29zY2lsbGF0b3IgIT09IG51bGwpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBvbGRPc2MgPSB0aGlzLl9vc2NpbGxhdG9yO1xuXHQgICAgICAgICAgICAgICAgb2xkT3NjLnN0b3Aobm93KTtcblx0ICAgICAgICAgICAgICAgIC8vZGlzcG9zZSB0aGUgb2xkIG9uZVxuXHQgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIG9sZE9zYy5kaXNwb3NlKCk7XG5cdCAgICAgICAgICAgICAgICAgICAgb2xkT3NjID0gbnVsbDtcblx0ICAgICAgICAgICAgICAgIH0sIHRoaXMuYmxvY2tUaW1lKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbmV3IE9zY2lsbGF0b3JDb25zdHJ1Y3RvcigpO1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jb25uZWN0KHRoaXMuX29zY2lsbGF0b3IuZnJlcXVlbmN5KTtcblx0ICAgICAgICAgICAgdGhpcy5kZXR1bmUuY29ubmVjdCh0aGlzLl9vc2NpbGxhdG9yLmRldHVuZSk7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3IuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3Iuc3RhcnQobm93KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGhhc2Ugb2YgdGhlIG9zY2lsbGF0b3IgaW4gZGVncmVlcy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RGVncmVlc31cblx0XHQgKiBAbmFtZSBwaGFzZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAncGhhc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLnBoYXNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocGhhc2UpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5waGFzZSA9IHBoYXNlO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIHdpZHRoIG9mIHRoZSBvc2NpbGxhdG9yIChvbmx5IGlmIHRoZSBvc2NpbGxhdG9yIGlzIHNldCB0byBcInB1bHNlXCIpXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuT21uaU9zY2lsbGF0b3IjXG5cdFx0ICogQHR5cGUge05vcm1hbFJhbmdlfVxuXHRcdCAqIEBzaWduYWxcblx0XHQgKiBAbmFtZSB3aWR0aFxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogdmFyIG9tbmlPc2MgPSBuZXcgVG9uZS5PbW5pT3NjaWxsYXRvcig0NDAsIFwicHVsc2VcIik7XG5cdFx0ICogLy9jYW4gYWNjZXNzIHRoZSB3aWR0aCBhdHRyaWJ1dGUgb25seSBpZiB0eXBlID09PSBcInB1bHNlXCJcblx0XHQgKiBvbW5pT3NjLndpZHRoLnZhbHVlID0gMC4yO1xuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLCAnd2lkdGgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VUeXBlID09PSBPbW5pT3NjVHlwZS5QdWxzZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3Iud2lkdGg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBudW1iZXIgb2YgZGV0dW5lZCBvc2NpbGxhdG9yc1xuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgY291bnRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ2NvdW50Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRmF0KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5jb3VudDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAoY291bnQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5jb3VudCA9IGNvdW50O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZGV0dW5lIHNwcmVhZCBiZXR3ZWVuIHRoZSBvc2NpbGxhdG9ycy4gSWYgXCJjb3VudFwiIGlzXG5cdFx0ICogc2V0IHRvIDMgb3NjaWxsYXRvcnMgYW5kIHRoZSBcInNwcmVhZFwiIGlzIHNldCB0byA0MCxcblx0XHQgKiB0aGUgdGhyZWUgb3NjaWxsYXRvcnMgd291bGQgYmUgZGV0dW5lZCBsaWtlIHRoaXM6IFstMjAsIDAsIDIwXVxuXHRcdCAqIGZvciBhIHRvdGFsIGRldHVuZSBzcHJlYWQgb2YgNDAgY2VudHMuIFNlZSBUb25lLkZhdE9zY2lsbGF0b3Jcblx0XHQgKiBmb3IgbW9yZSBpbmZvLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqIEB0eXBlIHtDZW50c31cblx0XHQgKiBAbmFtZSBzcHJlYWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ3NwcmVhZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3Iuc3ByZWFkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzcHJlYWQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZhdCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvci5zcHJlYWQgPSBzcHJlYWQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSB0eXBlIG9mIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvci4gT25seSBpZiB0aGUgb3NjaWxsYXRvclxuXHRcdCAqIGlzIHNldCB0byBcImFtXCIgb3IgXCJmbVwiIHR5cGVzLiBzZWUuIFRvbmUuQU1Pc2NpbGxhdG9yIG9yIFRvbmUuRk1Pc2NpbGxhdG9yXG5cdFx0ICogZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBuYW1lIG1vZHVsYXRpb25UeXBlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uVHlwZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNIHx8IHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uVHlwZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobVR5cGUpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNIHx8IHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkFNKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLm1vZHVsYXRpb25UeXBlID0gbVR5cGU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtb2R1bGF0aW9uIGluZGV4IHdoaWNoIGlzIGluIGVzc2VuY2UgdGhlIGRlcHRoIG9yIGFtb3VudCBvZiB0aGUgbW9kdWxhdGlvbi4gSW4gb3RoZXIgdGVybXMgaXQgaXMgdGhlXG5cdFx0ICogcmF0aW8gb2YgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxhdGluZyBzaWduYWwgKG1mKSB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZVxuXHRcdCAqIG1vZHVsYXRpbmcgc2lnbmFsIChtYSkgLS0gYXMgaW4gbWEvbWYuXG5cdFx0ICogU2VlIFRvbmUuRk1Pc2NpbGxhdG9yIGZvciBtb3JlIGluZm8uXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBzaWduYWxcblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uSW5kZXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ21vZHVsYXRpb25JbmRleCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVR5cGUgPT09IE9tbmlPc2NUeXBlLkZNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uSW5kZXg7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgZnJlcXVlbmN5IHJhdGlvIGJldHdlZW4gdGhlIGNhcnJpZXIgYW5kIHRoZSBtb2R1bGF0b3Igb3NjaWxsYXRvcnMuXG5cdFx0ICogIEEgaGFybW9uaWNpdHkgb2YgMSBnaXZlcyBib3RoIG9zY2lsbGF0b3JzIHRoZSBzYW1lIGZyZXF1ZW5jeS5cblx0XHQgKiAgSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS4gU2VlIFRvbmUuQU1Pc2NpbGxhdG9yIG9yIFRvbmUuRk1Pc2NpbGxhdG9yXG5cdFx0ICogIGZvciBtb3JlIGluZm8uXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk9tbmlPc2NpbGxhdG9yI1xuXHRcdCAqICBAc2lnbmFsXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgaGFybW9uaWNpdHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk9tbmlPc2NpbGxhdG9yLnByb3RvdHlwZSwgJ2hhcm1vbmljaXR5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuRk0gfHwgdGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuQU0pIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yLmhhcm1vbmljaXR5O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgbW9kdWxhdGlvbkZyZXF1ZW5jeSBTaWduYWwgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHQgKiAob25seSBpZiB0aGUgb3NjaWxsYXRvciB0eXBlIGlzIHNldCB0byBwd20pLiBTZWVcblx0XHQgKiBUb25lLlBXTU9zY2lsbGF0b3IgZm9yIG1vcmUgaW5mby5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5PbW5pT3NjaWxsYXRvciNcblx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqIEBzaWduYWxcblx0XHQgKiBAbmFtZSBtb2R1bGF0aW9uRnJlcXVlbmN5XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgb21uaU9zYyA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKDQ0MCwgXCJwd21cIik7XG5cdFx0ICogLy9jYW4gYWNjZXNzIHRoZSBtb2R1bGF0aW9uRnJlcXVlbmN5IGF0dHJpYnV0ZSBvbmx5IGlmIHR5cGUgPT09IFwicHdtXCJcblx0XHQgKiBvbW5pT3NjLm1vZHVsYXRpb25GcmVxdWVuY3kudmFsdWUgPSAwLjI7XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5PbW5pT3NjaWxsYXRvci5wcm90b3R5cGUsICdtb2R1bGF0aW9uRnJlcXVlbmN5Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlVHlwZSA9PT0gT21uaU9zY1R5cGUuUFdNKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3NjaWxsYXRvci5tb2R1bGF0aW9uRnJlcXVlbmN5O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuT21uaU9zY2lsbGF0b3J9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuT21uaU9zY2lsbGF0b3IucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9zb3VyY2VUeXBlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5PbW5pT3NjaWxsYXRvcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBCYXNlLWNsYXNzIGZvciBhbGwgaW5zdHJ1bWVudHNcblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuSW5zdHJ1bWVudC5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IGFuZCB2b2x1bWUgdHJpbWluZyBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIHNvdXJjZS52b2x1bWUudmFsdWUgPSAtNjtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gdGhpcy5fdm9sdW1lLnZvbHVtZTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seSgndm9sdW1lJyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBLZWVwIHRyYWNrIG9mIGFsbCBldmVudHMgc2NoZWR1bGVkIHRvIHRoZSB0cmFuc3BvcnRcblx0XHRcdCAqIHdoZW4gdGhlIGluc3RydW1lbnQgaXMgJ3N5bmNlZCdcblx0XHRcdCAqIEB0eXBlIHtBcnJheTxOdW1iZXI+fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cyA9IFtdO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuSW5zdHJ1bWVudCwgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXNcblx0XHQgKiAgQHR5cGUge29iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAvKiogdGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzICovXG5cdCAgICAgICAgJ3ZvbHVtZSc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQGFic3RyYWN0XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbm90ZSB0aGUgbm90ZSB0byB0cmlnZ2VyXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0byB0cmlnZ2VyIHRoZSBudG9lXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IHRvIHRyaWdnZXIgdGhlIG5vdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IFRvbmUubm9PcDtcblx0ICAgIC8qKlxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHdoZW4gdG8gdHJpZ2dlciB0aGUgcmVsZWFzZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS50cmlnZ2VyUmVsZWFzZSA9IFRvbmUubm9PcDtcblx0ICAgIC8qKlxuXHRcdCAqIFN5bmMgdGhlIGluc3RydW1lbnQgdG8gdGhlIFRyYW5zcG9ydC4gQWxsIHN1YnNlcXVlbnQgY2FsbHMgb2Zcblx0XHQgKiBbdHJpZ2dlckF0dGFja10oI3RyaWdnZXJhdHRhY2spIGFuZCBbdHJpZ2dlclJlbGVhc2VdKCN0cmlnZ2VycmVsZWFzZSlcblx0XHQgKiB3aWxsIGJlIHNjaGVkdWxlZCBhbG9uZyB0aGUgdHJhbnNwb3J0LlxuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogaW5zdHJ1bWVudC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIGluc3RydW1lbnQudHJpZ2dlckF0dGFja1JlbGVhc2UoJ0M0JywgJzhuJywgMClcblx0XHQgKiBpbnN0cnVtZW50LnRyaWdnZXJBdHRhY2tSZWxlYXNlKCdFNCcsICc4bicsICc4bicpXG5cdFx0ICogaW5zdHJ1bWVudC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnRzQnLCAnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJBdHRhY2snLCAxKTtcblx0ICAgICAgICB0aGlzLl9zeW5jTWV0aG9kKCd0cmlnZ2VyUmVsZWFzZScsIDApO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFdyYXAgdGhlIGdpdmVuIG1ldGhvZCBzbyB0aGF0IGl0IGNhbiBiZSBzeW5jaHJvbml6ZWRcblx0XHQgKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kIFdoaWNoIG1ldGhvZCB0byB3cmFwIGFuZCBzeW5jXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lUG9zaXRpb24gV2hhdCBwb3NpdGlvbiB0aGUgdGltZSBhcmd1bWVudCBhcHBlYXJzIGluXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuX3N5bmNNZXRob2QgPSBmdW5jdGlvbiAobWV0aG9kLCB0aW1lUG9zaXRpb24pIHtcblx0ICAgICAgICB2YXIgb3JpZ2luYWxNZXRob2QgPSB0aGlzWydfb3JpZ2luYWxfJyArIG1ldGhvZF0gPSB0aGlzW21ldGhvZF07XG5cdCAgICAgICAgdGhpc1ttZXRob2RdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdCAgICAgICAgICAgIHZhciB0aW1lID0gYXJnc1t0aW1lUG9zaXRpb25dO1xuXHQgICAgICAgICAgICB2YXIgaWQgPSBUb25lLlRyYW5zcG9ydC5zY2hlZHVsZShmdW5jdGlvbiAodCkge1xuXHQgICAgICAgICAgICAgICAgYXJnc1t0aW1lUG9zaXRpb25dID0gdDtcblx0ICAgICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHQgICAgICAgICAgICB9LmJpbmQodGhpcyksIHRpbWUpO1xuXHQgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMucHVzaChpZCk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFVuc3luYyB0aGUgaW5zdHJ1bWVudCBmcm9tIHRoZSBUcmFuc3BvcnRcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLnVuc3luYyA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcblx0ICAgICAgICAgICAgVG9uZS5UcmFuc3BvcnQuY2xlYXIoaWQpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX3NjaGVkdWxlZEV2ZW50cyA9IFtdO1xuXHQgICAgICAgIGlmICh0aGlzLl9vcmlnaW5hbF90cmlnZ2VyQXR0YWNrKSB7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayA9IHRoaXMuX29yaWdpbmFsX3RyaWdnZXJBdHRhY2s7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UgPSB0aGlzLl9vcmlnaW5hbF90cmlnZ2VyUmVsZWFzZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgdGhlbiB0aGUgcmVsZWFzZSBhZnRlciB0aGUgZHVyYXRpb24uXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gdHJpZ2dlci5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIG5vdGUgc2hvdWxkIGJlIGhlbGQgZm9yIGJlZm9yZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyaW5nIHRoZSByZWxlYXNlLiBUaGlzIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSAgV2hlbiB0aGUgbm90ZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSB0aGUgbm90ZSBzaG91bGQgYmUgdHJpZ2dlcmVkIGF0LlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIFwiQzRcIiBmb3IgdGhlIGR1cmF0aW9uIG9mIGFuIDh0aCBub3RlXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5JbnN0cnVtZW50LnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlLCBkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKG5vdGUsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkluc3RydW1lbnR9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbJ3ZvbHVtZSddKTtcblx0ICAgICAgICB0aGlzLnZvbHVtZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy51bnN5bmMoKTtcblx0ICAgICAgICB0aGlzLl9zY2hlZHVsZWRFdmVudHMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkluc3RydW1lbnQ7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVGhpcyBpcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBvdGhlciBtb25vcGhvbmljIGluc3RydW1lbnRzIHRvIFxuXHRcdCAqICAgICAgICAgIGV4dGVuZC4gSU1QT1JUQU5UOiBJdCBkb2VzIG5vdCBtYWtlIGFueSBzb3VuZCBvbiBpdHMgb3duIGFuZFxuXHRcdCAqICAgICAgICAgIHNob3VsZG4ndCBiZSBkaXJlY3RseSBpbnN0YW50aWF0ZWQuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBhYnN0cmFjdFxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblx0ICAgICAgICAvL2dldCB0aGUgZGVmYXVsdHNcblx0ICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0QXJnKG9wdGlvbnMsIFRvbmUuTW9ub3Bob25pYy5kZWZhdWx0cyk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGdsaWRlIHRpbWUgYmV0d2VlbiBub3Rlcy4gXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnBvcnRhbWVudG8gPSBvcHRpb25zLnBvcnRhbWVudG87XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Nb25vcGhvbmljLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMuZGVmYXVsdHMgPSB7ICdwb3J0YW1lbnRvJzogMCB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBvZiB0aGUgbm90ZSBvcHRpb25hbGx5IHdpdGggYSBnaXZlbiB2ZWxvY2l0eS4gXG5cdFx0ICogIFxuXHRcdCAqICBcblx0XHQgKiAgQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byB0cmlnZ2VyLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddICAgICBXaGVuIHRoZSBub3RlIHNob3VsZCBzdGFydC5cblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdmVsb2NpdHkgVGhlIHZlbG9jaXR5IHNjYWxlciBcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lcyBob3cgXCJsb3VkXCIgdGhlIG5vdGUgXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Nb25vcGhvbmljfSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFjayhcIkM0XCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciB0aGUgbm90ZSBhIGhhbGYgc2Vjb25kIGZyb20gbm93IGF0IGhhbGYgdmVsb2NpdHlcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrKFwiQzRcIiwgXCIrMC41XCIsIDAuNSk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnNldE5vdGUobm90ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIHJlbGVhc2UgcG9ydGlvbiBvZiB0aGUgZW52ZWxvcGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSBJZiBubyB0aW1lIGlzIGdpdmVuLCB0aGUgcmVsZWFzZSBoYXBwZW5zIGltbWVkaWF0bHlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTW9ub3Bob25pY30gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJSZWxlYXNlKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCB0aGUgYWN0dWFsIG1ldGhvZFxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCB0aGUgYWN0dWFsIG1ldGhvZFxuXHRcdCAqICBAYWJzdHJhY3Rcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgbGV2ZWwgb2YgdGhlIG91dHB1dCBhdCB0aGUgZ2l2ZW4gdGltZS4gTWVhc3VyZXNcblx0XHQgKiAgdGhlIGVudmVsb3BlKHMpIHZhbHVlIGF0IHRoZSB0aW1lLiBcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIHF1ZXJ5IHRoZSBlbnZlbG9wZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuIHtOb3JtYWxSYW5nZX0gVGhlIG91dHB1dCBsZXZlbCBiZXR3ZWVuIDAtMVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5nZXRMZXZlbEF0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzLmVudmVsb3BlLmdldFZhbHVlQXRUaW1lKHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIG5vdGUgYXQgdGhlIGdpdmVuIHRpbWUuIElmIG5vIHRpbWUgaXMgZ2l2ZW4sIHRoZSBub3RlXG5cdFx0ICogIHdpbGwgc2V0IGltbWVkaWF0ZWx5LiBcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IG5vdGUgVGhlIG5vdGUgdG8gY2hhbmdlIHRvLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIFRoZSB0aW1lIHdoZW4gdGhlIG5vdGUgc2hvdWxkIGJlIHNldC4gXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9waG9uaWN9IHRoaXNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIC8vY2hhbmdlIHRvIEYjNiBpbiBvbmUgcXVhcnRlciBub3RlIGZyb20gbm93LlxuXHRcdCAqIHN5bnRoLnNldE5vdGUoXCJGIzZcIiwgXCIrNG5cIik7XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL2NoYW5nZSB0byBCYjQgcmlnaHQgbm93XG5cdFx0ICogc3ludGguc2V0Tm90ZShcIkJiNFwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuc2V0Tm90ZSA9IGZ1bmN0aW9uIChub3RlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLnBvcnRhbWVudG8gPiAwICYmIHRoaXMuZ2V0TGV2ZWxBdFRpbWUodGltZSkgPiAwLjA1KSB7XG5cdCAgICAgICAgICAgIHZhciBwb3J0VGltZSA9IHRoaXMudG9TZWNvbmRzKHRoaXMucG9ydGFtZW50byk7XG5cdCAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5LmV4cG9uZW50aWFsUmFtcFRvKG5vdGUsIHBvcnRUaW1lLCB0aW1lKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZShub3RlLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTW9ub3Bob25pYztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLlN5bnRoIGlzIGNvbXBvc2VkIHNpbXBseSBvZiBhIFRvbmUuT21uaU9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgICByb3V0ZWQgdGhyb3VnaCBhIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzEtMV8wWVcyWjFKMkVQSTM2UDhmTkNNY1pHN04xdzFHWmx1UHM0b2c0ZXZvL3B1Yj93PTExNjMmaD0yMzFcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLlN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5PbW5pT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKG9wdGlvbnMub3NjaWxsYXRvcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSB0aGlzLm9zY2lsbGF0b3IuZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSB0aGlzLm9zY2lsbGF0b3IuZGV0dW5lO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmVudmVsb3BlID0gbmV3IFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUob3B0aW9ucy5lbnZlbG9wZSk7XG5cdCAgICAgICAgLy9jb25uZWN0IHRoZSBvc2NpbGxhdG9ycyB0byB0aGUgb3V0cHV0XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmNoYWluKHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdkZXR1bmUnLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAndHJpYW5nbGUnIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjMsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgc3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIGF0dGFjayBzaG91bGQgc3RhcnRcblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGUgKDAtMSlcblx0XHQgKiAgQHJldHVybnMge1RvbmUuU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICAvL2lmIHRoZXJlIGlzIG5vIHJlbGVhc2UgcG9ydGlvbiwgc3RvcCB0aGUgb3NjaWxsYXRvclxuXHQgICAgICAgIGlmICh0aGlzLmVudmVsb3BlLnN1c3RhaW4gPT09IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2RldHVuZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBBTVN5bnRoIHVzZXMgdGhlIG91dHB1dCBvZiBvbmUgVG9uZS5TeW50aCB0byBtb2R1bGF0ZSB0aGVcblx0XHQgKiAgICAgICAgICBhbXBsaXR1ZGUgb2YgYW5vdGhlciBUb25lLlN5bnRoLiBUaGUgaGFybW9uaWNpdHkgKHRoZSByYXRpbyBiZXR3ZWVuXG5cdFx0ICogICAgICAgICAgdGhlIHR3byBzaWduYWxzKSBhZmZlY3RzIHRoZSB0aW1icmUgb2YgdGhlIG91dHB1dCBzaWduYWwgZ3JlYXRseS5cblx0XHQgKiAgICAgICAgICBSZWFkIG1vcmUgYWJvdXQgQW1wbGl0dWRlIE1vZHVsYXRpb24gU3ludGhlc2lzIG9uXG5cdFx0ICogICAgICAgICAgW1NvdW5kT25Tb3VuZF0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDA0MTAzNjUzL2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbTo4MC9zb3MvbWFyMDAvYXJ0aWNsZXMvc3ludGhzZWNyZXRzLmh0bSkuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFUUXU4RWQ0aUZyMVlUTEtwQjNVMV9odXItVXdCcmg1Z2RCWGM4QnhmR0t3L3B1Yj93PTEwMDkmaD00NTdcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZSBkZWZhdWx0cyBiZWxvd1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLkFNU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzRcIiwgXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuQU1TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkFNU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuU3ludGgoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gdGhpcy5fY2Fycmllci5vc2NpbGxhdG9yO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSB0aGlzLl9jYXJyaWVyLmVudmVsb3BlLnNldChvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbW9kdWxhdG9yIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IgPSBuZXcgVG9uZS5TeW50aCgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci52b2x1bWUudmFsdWUgPSAtMTA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvcidzIG9zY2lsbGF0b3Igd2hpY2ggaXMgYXBwbGllZFxuXHRcdFx0ICogIHRvIHRoZSBhbXBsaXR1ZGUgb2YgdGhlIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uID0gdGhpcy5fbW9kdWxhdG9yLm9zY2lsbGF0b3Iuc2V0KG9wdGlvbnMubW9kdWxhdGlvbik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRvcidzIGVudmVsb3BlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQW1wbGl0dWRlRW52ZWxvcGV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25FbnZlbG9wZSA9IHRoaXMuX21vZHVsYXRvci5lbnZlbG9wZS5zZXQob3B0aW9ucy5tb2R1bGF0aW9uRW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbCg0NDAsIFRvbmUuVHlwZS5GcmVxdWVuY3kpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHNcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgSGFybW9uaWNpdHkgaXMgdGhlIHJhdGlvIGJldHdlZW4gdGhlIHR3byB2b2ljZXMuIEEgaGFybW9uaWNpdHkgb2Zcblx0XHRcdCAqICAxIGlzIG5vIGNoYW5nZS4gSGFybW9uaWNpdHkgPSAyIG1lYW5zIGEgY2hhbmdlIG9mIGFuIG9jdGF2ZS5cblx0XHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICogIEBleGFtcGxlXG5cdFx0XHQgKiAvL3BpdGNoIHZvaWNlMSBhbiBvY3RhdmUgYmVsb3cgdm9pY2UwXG5cdFx0XHQgKiBzeW50aC5oYXJtb25pY2l0eS52YWx1ZSA9IDAuNTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBuZXcgVG9uZS5NdWx0aXBseShvcHRpb25zLmhhcm1vbmljaXR5KTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGNvbnZlcnQgdGhlIC0xLDEgb3V0cHV0IHRvIDAsMVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkF1ZGlvVG9HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uU2NhbGUgPSBuZXcgVG9uZS5BdWRpb1RvR2FpbigpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSBtb2R1bGF0aW9uIGhhcHBlbnNcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZSA9IG5ldyBUb25lLkdhaW4oKTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIHR3byB2b2ljZXMgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZmFuKHRoaXMuX2NhcnJpZXIuZGV0dW5lLCB0aGlzLl9tb2R1bGF0b3IuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuY2hhaW4odGhpcy5fbW9kdWxhdGlvblNjYWxlLCB0aGlzLl9tb2R1bGF0aW9uTm9kZS5nYWluKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmNoYWluKHRoaXMuX21vZHVsYXRpb25Ob2RlLCB0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbicsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuQU1TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2hhcm1vbmljaXR5JzogMyxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAxLFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjAxLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMC41XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAnbW9kdWxhdGlvbic6IHsgJ3R5cGUnOiAnc3F1YXJlJyB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIHRyaWdnZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIG9jY3VyXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSB0aGUgdmVsb2NpdHkgb2YgdGhlIG5vdGVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQU1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgLy90aGUgcG9ydCBnbGlkZVxuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgcmVsZWFzZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5BTVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkFNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuQU1TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5BTVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICdoYXJtb25pY2l0eScsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmRldHVuZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25TY2FsZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvblNjYWxlID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuQU1TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1vbm9TeW50aCBpcyBjb21wb3NlZCBvZiBvbmUgb3NjaWxsYXRvciwgb25lIGZpbHRlciwgYW5kIHR3byBlbnZlbG9wZXMuXG5cdFx0ICogICAgICAgICAgVGhlIGFtcGxpdHVkZSBvZiB0aGUgVG9uZS5Pc2NpbGxhdG9yIGFuZCB0aGUgY3V0b2ZmIGZyZXF1ZW5jeSBvZiB0aGVcblx0XHQgKiAgICAgICAgICBUb25lLkZpbHRlciBhcmUgY29udHJvbGxlZCBieSBUb25lLkVudmVsb3Blcy5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMWdhWTFERjlfSHprb2RxZjhKSTFDZzJWWmZ3U0VscEZRZkk5NElRd2FkMzgvcHViP3c9OTI0Jmg9MjQwXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHN5bnRoID0gbmV3IFRvbmUuTW9ub1N5bnRoKHtcblx0XHQgKiBcdFwib3NjaWxsYXRvclwiIDoge1xuXHRcdCAqIFx0XHRcInR5cGVcIiA6IFwic3F1YXJlXCJcblx0XHQgKiAgfSxcblx0XHQgKiAgXCJlbnZlbG9wZVwiIDoge1xuXHRcdCAqICBcdFwiYXR0YWNrXCIgOiAwLjFcblx0XHQgKiAgfVxuXHRcdCAqIH0pLnRvTWFzdGVyKCk7XG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjhuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIC8vZ2V0IHRoZSBkZWZhdWx0c1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5Nb25vU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvc2NpbGxhdG9yLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9tbmlPc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gbmV3IFRvbmUuT21uaU9zY2lsbGF0b3Iob3B0aW9ucy5vc2NpbGxhdG9yKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IGNvbnRyb2wuXG5cdFx0XHQgKiAgQHR5cGUge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3k7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBjb250cm9sLlxuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IHRoaXMub3NjaWxsYXRvci5kZXR1bmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpbHRlci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZpbHRlciA9IG5ldyBUb25lLkZpbHRlcihvcHRpb25zLmZpbHRlcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGZpbHRlciBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GcmVxdWVuY3lFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUgPSBuZXcgVG9uZS5GcmVxdWVuY3lFbnZlbG9wZShvcHRpb25zLmZpbHRlckVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFtcGxpdHVkZUVudmVsb3BlfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG5ldyBUb25lLkFtcGxpdHVkZUVudmVsb3BlKG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgb3NjaWxsYXRvcnMgdG8gdGhlIG91dHB1dFxuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5jaGFpbih0aGlzLmZpbHRlciwgdGhpcy5lbnZlbG9wZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vY29ubmVjdCB0aGUgZmlsdGVyIGVudmVsb3BlXG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS5jb25uZWN0KHRoaXMuZmlsdGVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZpbHRlcicsXG5cdCAgICAgICAgICAgICdmaWx0ZXJFbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk1vbm9TeW50aCwgVG9uZS5Nb25vcGhvbmljKTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY29uc3Rcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGguZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ2ZyZXF1ZW5jeSc6ICdDNCcsXG5cdCAgICAgICAgJ2RldHVuZSc6IDAsXG5cdCAgICAgICAgJ29zY2lsbGF0b3InOiB7ICd0eXBlJzogJ3NxdWFyZScgfSxcblx0ICAgICAgICAnZmlsdGVyJzoge1xuXHQgICAgICAgICAgICAnUSc6IDYsXG5cdCAgICAgICAgICAgICd0eXBlJzogJ2xvd3Bhc3MnLFxuXHQgICAgICAgICAgICAncm9sbG9mZic6IC0yNFxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDUsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMSxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAwLjksXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgJ2ZpbHRlckVudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wNixcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC4yLFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAuNSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAyLFxuXHQgICAgICAgICAgICAnYmFzZUZyZXF1ZW5jeSc6IDIwMCxcblx0ICAgICAgICAgICAgJ29jdGF2ZXMnOiA3LFxuXHQgICAgICAgICAgICAnZXhwb25lbnQnOiAyXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3BlXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgLy90aGUgZW52ZWxvcGVzXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyQXR0YWNrKHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLmZpbHRlckVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0YXJ0KHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLmVudmVsb3BlLnN1c3RhaW4gPT09IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9TeW50aH0gdGhpc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyRW52ZWxvcGUudHJpZ2dlclJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1vbm9TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Nb25vU3ludGgucHJvdG90eXBlLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5Nb25vcGhvbmljLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fd3JpdGFibGUoW1xuXHQgICAgICAgICAgICAnb3NjaWxsYXRvcicsXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnZGV0dW5lJyxcblx0ICAgICAgICAgICAgJ2ZpbHRlcicsXG5cdCAgICAgICAgICAgICdmaWx0ZXJFbnZlbG9wZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJFbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5maWx0ZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZmlsdGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1vbm9TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLkR1b1N5bnRoIGlzIGEgbW9ub3Bob25pYyBzeW50aCBjb21wb3NlZCBvZiB0d29cblx0XHQgKiAgICAgICAgICBNb25vU3ludGhzIHJ1biBpbiBwYXJhbGxlbCB3aXRoIGNvbnRyb2wgb3ZlciB0aGVcblx0XHQgKiAgICAgICAgICBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcyBhbmQgdmlicmF0byBlZmZlY3QuXG5cdFx0ICogICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kcmF3aW5ncy9kLzFiTDRHWHZmUk1NbHFTN1h5Qm05Q2pMOUtKUFNVS2JjZEJOcHFPbGtGTHhrL3B1Yj93PTEwMTImaD00NDhcIj5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuTW9ub3Bob25pY31cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgZHVvU3ludGggPSBuZXcgVG9uZS5EdW9TeW50aCgpLnRvTWFzdGVyKCk7XG5cdFx0ICogZHVvU3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCJDNFwiLCBcIjJuXCIpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkR1b1N5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgZmlyc3Qgdm9pY2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Nb25vU3ludGh9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvaWNlMCA9IG5ldyBUb25lLk1vbm9TeW50aChvcHRpb25zLnZvaWNlMCk7XG5cdCAgICAgICAgdGhpcy52b2ljZTAudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBzZWNvbmQgdm9pY2Vcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Nb25vU3ludGh9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvaWNlMSA9IG5ldyBUb25lLk1vbm9TeW50aChvcHRpb25zLnZvaWNlMSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSB2aWJyYXRvIExGTy5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5MRk99XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8gPSBuZXcgVG9uZS5MRk8ob3B0aW9ucy52aWJyYXRvUmF0ZSwgLTUwLCA1MCk7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0by5zdGFydCgpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogdGhlIHZpYnJhdG8gZnJlcXVlbmN5XG5cdFx0XHQgKiBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52aWJyYXRvUmF0ZSA9IHRoaXMuX3ZpYnJhdG8uZnJlcXVlbmN5O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSB2aWJyYXRvIGdhaW5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5HYWlufVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2FpbiA9IG5ldyBUb25lLkdhaW4ob3B0aW9ucy52aWJyYXRvQW1vdW50LCBUb25lLlR5cGUuUG9zaXRpdmUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIGFtb3VudCBvZiB2aWJyYXRvXG5cdFx0XHQgKiBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZpYnJhdG9BbW91bnQgPSB0aGlzLl92aWJyYXRvR2Fpbi5nYWluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBmcmVxdWVuY3kgY29udHJvbFxuXHRcdFx0ICogIEB0eXBlIHtGcmVxdWVuY3l9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBuZXcgVG9uZS5TaWduYWwoNDQwLCBUb25lLlR5cGUuRnJlcXVlbmN5KTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcy4gQSBoYXJtb25pY2l0eSBvZlxuXHRcdFx0ICogIDEgaXMgbm8gY2hhbmdlLiBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdm9pY2UxIGFuIG9jdGF2ZSBiZWxvdyB2b2ljZTBcblx0XHRcdCAqIGR1b1N5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLy9jb250cm9sIHRoZSB0d28gdm9pY2VzIGZyZXF1ZW5jeVxuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5LmNvbm5lY3QodGhpcy52b2ljZTAuZnJlcXVlbmN5KTtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5jaGFpbih0aGlzLmhhcm1vbmljaXR5LCB0aGlzLnZvaWNlMS5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG8uY29ubmVjdCh0aGlzLl92aWJyYXRvR2Fpbik7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0b0dhaW4uZmFuKHRoaXMudm9pY2UwLmRldHVuZSwgdGhpcy52b2ljZTEuZGV0dW5lKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMC5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLnZvaWNlMS5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICd2b2ljZTAnLFxuXHQgICAgICAgICAgICAndm9pY2UxJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd2aWJyYXRvQW1vdW50Jyxcblx0ICAgICAgICAgICAgJ3ZpYnJhdG9SYXRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuRHVvU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndmlicmF0b0Ftb3VudCc6IDAuNSxcblx0ICAgICAgICAndmlicmF0b1JhdGUnOiA1LFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDEuNSxcblx0ICAgICAgICAndm9pY2UwJzoge1xuXHQgICAgICAgICAgICAndm9sdW1lJzogLTEwLFxuXHQgICAgICAgICAgICAncG9ydGFtZW50byc6IDAsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICAndm9pY2UxJzoge1xuXHQgICAgICAgICAgICAndm9sdW1lJzogLTEwLFxuXHQgICAgICAgICAgICAncG9ydGFtZW50byc6IDAsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICAgICAnZmlsdGVyRW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICAgICAnYXR0YWNrJzogMC4wMSxcblx0ICAgICAgICAgICAgICAgICdkZWNheSc6IDAsXG5cdCAgICAgICAgICAgICAgICAnc3VzdGFpbic6IDEsXG5cdCAgICAgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgYXR0YWNrIHBvcnRpb24gb2YgdGhlIGVudmVsb3Blc1xuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge05vcm1hbFJhbmdlfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkR1b1N5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlQXR0YWNrID0gZnVuY3Rpb24gKHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBzdGFydCB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXNcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIHJlbGVhc2Ugc2hvdWxkIHN0YXJ0XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkR1b1N5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkR1b1N5bnRoLnByb3RvdHlwZS5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy52b2ljZTAuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgbGV2ZWwgb2YgdGhlIG91dHB1dCBhdCB0aGUgZ2l2ZW4gdGltZS4gTWVhc3VyZXNcblx0XHQgKiAgdGhlIGVudmVsb3BlKHMpIHZhbHVlIGF0IHRoZSB0aW1lLiBcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lIFRoZSB0aW1lIHRvIHF1ZXJ5IHRoZSBlbnZlbG9wZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJuIHtOb3JtYWxSYW5nZX0gVGhlIG91dHB1dCBsZXZlbCBiZXR3ZWVuIDAtMVxuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuZ2V0TGV2ZWxBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHJldHVybiAodGhpcy52b2ljZTAuZ2V0TGV2ZWxBdFRpbWUodGltZSkgKyB0aGlzLnZvaWNlMS5nZXRMZXZlbEF0VGltZSh0aW1lKSkgLyAyO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5EdW9TeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5EdW9TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICd2b2ljZTAnLFxuXHQgICAgICAgICAgICAndm9pY2UxJyxcblx0ICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXG5cdCAgICAgICAgICAgICd2aWJyYXRvQW1vdW50Jyxcblx0ICAgICAgICAgICAgJ3ZpYnJhdG9SYXRlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMudm9pY2UwLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZvaWNlMCA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52b2ljZTEuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMudm9pY2UxID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3ZpYnJhdG9HYWluLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92aWJyYXRvR2FpbiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdmlicmF0byA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy52aWJyYXRvQW1vdW50LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLnZpYnJhdG9BbW91bnQgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudmlicmF0b1JhdGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLkR1b1N5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEZNU3ludGggaXMgY29tcG9zZWQgb2YgdHdvIFRvbmUuU3ludGhzIHdoZXJlIG9uZSBUb25lLlN5bnRoIG1vZHVsYXRlc1xuXHRcdCAqICAgICAgICAgIHRoZSBmcmVxdWVuY3kgb2YgYSBzZWNvbmQgVG9uZS5TeW50aC4gQSBsb3Qgb2Ygc3BlY3RyYWwgY29udGVudFxuXHRcdCAqICAgICAgICAgIGNhbiBiZSBleHBsb3JlZCB1c2luZyB0aGUgbW9kdWxhdGlvbkluZGV4IHBhcmFtZXRlci4gUmVhZCBtb3JlIGFib3V0XG5cdFx0ICogICAgICAgICAgZnJlcXVlbmN5IG1vZHVsYXRpb24gc3ludGhlc2lzIG9uIFNvdW5kIE9uIFNvdW5kOiBbUGFydCAxXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA0MDMxMjM3MDQvaHR0cDovL3d3dy5zb3VuZG9uc291bmQuY29tL3Nvcy9hcHIwMC9hcnRpY2xlcy9zeW50aHNlY3JldHMuaHRtKSwgW1BhcnQgMl0oaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNDAzMTE1ODM1L2h0dHA6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvbWF5MDAvYXJ0aWNsZXMvc3ludGguaHRtKS5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMWgwUFVEWlhQZ2k0SWt4NmJWVDZvbmNyWVBMbHVGS3k3bGo1M3B1eGotRE0vcHViP3c9OTAyJmg9NDYyXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLk1vbm9waG9uaWN9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGZtU3ludGggPSBuZXcgVG9uZS5GTVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBmbVN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFwiQzVcIiwgXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkZNU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuTW9ub3Bob25pYy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyIHZvaWNlLlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLlN5bnRofVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9jYXJyaWVyID0gbmV3IFRvbmUuU3ludGgob3B0aW9ucy5jYXJyaWVyKTtcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLnZvbHVtZS52YWx1ZSA9IC0xMDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgY2FycmllcidzIG9zY2lsbGF0b3Jcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yID0gdGhpcy5fY2Fycmllci5vc2NpbGxhdG9yO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBjYXJyaWVyJ3MgZW52ZWxvcGVcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Pc2NpbGxhdG9yfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IHRoaXMuX2NhcnJpZXIuZW52ZWxvcGUuc2V0KG9wdGlvbnMuZW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3Igdm9pY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU3ludGh9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvciA9IG5ldyBUb25lLlN5bnRoKG9wdGlvbnMubW9kdWxhdG9yKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3Iudm9sdW1lLnZhbHVlID0gLTEwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBvc2NpbGxhdG9yIHdoaWNoIGlzIGFwcGxpZWRcblx0XHRcdCAqICB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZSBvc2NpbGxhdG9yXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IHRoaXMuX21vZHVsYXRvci5vc2NpbGxhdG9yLnNldChvcHRpb25zLm1vZHVsYXRpb24pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBtb2R1bGF0b3IncyBlbnZlbG9wZVxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk9zY2lsbGF0b3J9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm1vZHVsYXRpb25FbnZlbG9wZSA9IHRoaXMuX21vZHVsYXRvci5lbnZlbG9wZS5zZXQob3B0aW9ucy5tb2R1bGF0aW9uRW52ZWxvcGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbmV3IFRvbmUuU2lnbmFsKDQ0MCwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGRldHVuZSBpbiBjZW50c1xuXHRcdFx0ICogIEB0eXBlIHtDZW50c31cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmRldHVuZSwgVG9uZS5UeXBlLkNlbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBIYXJtb25pY2l0eSBpcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgdHdvIHZvaWNlcy4gQSBoYXJtb25pY2l0eSBvZlxuXHRcdFx0ICogIDEgaXMgbm8gY2hhbmdlLiBIYXJtb25pY2l0eSA9IDIgbWVhbnMgYSBjaGFuZ2Ugb2YgYW4gb2N0YXZlLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIC8vcGl0Y2ggdm9pY2UxIGFuIG9jdGF2ZSBiZWxvdyB2b2ljZTBcblx0XHRcdCAqIHN5bnRoLmhhcm1vbmljaXR5LnZhbHVlID0gMC41O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5oYXJtb25pY2l0eSA9IG5ldyBUb25lLk11bHRpcGx5KG9wdGlvbnMuaGFybW9uaWNpdHkpO1xuXHQgICAgICAgIHRoaXMuaGFybW9uaWNpdHkudW5pdHMgPSBUb25lLlR5cGUuUG9zaXRpdmU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1vZHVsYXRpb24gaW5kZXggd2hpY2ggZXNzZW50aWFsbHkgdGhlIGRlcHRoIG9yIGFtb3VudCBvZiB0aGUgbW9kdWxhdGlvbi4gSXQgaXMgdGhlXG5cdFx0XHQgKiAgcmF0aW8gb2YgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgbW9kdWxhdGluZyBzaWduYWwgKG1mKSB0byB0aGUgYW1wbGl0dWRlIG9mIHRoZVxuXHRcdFx0ICogIG1vZHVsYXRpbmcgc2lnbmFsIChtYSkgLS0gYXMgaW4gbWEvbWYuXG5cdFx0XHQgKlx0QHR5cGUge1Bvc2l0aXZlfVxuXHRcdFx0ICpcdEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbmV3IFRvbmUuTXVsdGlwbHkob3B0aW9ucy5tb2R1bGF0aW9uSW5kZXgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4LnVuaXRzID0gVG9uZS5UeXBlLlBvc2l0aXZlO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBub2RlIHdoZXJlIHRoZSBtb2R1bGF0aW9uIGhhcHBlbnNcblx0XHRcdCAqICBAdHlwZSB7R2Fpbk5vZGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlID0gbmV3IFRvbmUuR2FpbigwKTtcblx0ICAgICAgICAvL2NvbnRyb2wgdGhlIHR3byB2b2ljZXMgZnJlcXVlbmN5XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY29ubmVjdCh0aGlzLl9jYXJyaWVyLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5oYXJtb25pY2l0eSwgdGhpcy5fbW9kdWxhdG9yLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4odGhpcy5tb2R1bGF0aW9uSW5kZXgsIHRoaXMuX21vZHVsYXRpb25Ob2RlKTtcblx0ICAgICAgICB0aGlzLmRldHVuZS5mYW4odGhpcy5fY2Fycmllci5kZXR1bmUsIHRoaXMuX21vZHVsYXRvci5kZXR1bmUpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5jb25uZWN0KHRoaXMuX21vZHVsYXRpb25Ob2RlLmdhaW4pO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRpb25Ob2RlLmNvbm5lY3QodGhpcy5fY2Fycmllci5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoW1xuXHQgICAgICAgICAgICAnZnJlcXVlbmN5Jyxcblx0ICAgICAgICAgICAgJ2hhcm1vbmljaXR5Jyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb25JbmRleCcsXG5cdCAgICAgICAgICAgICdvc2NpbGxhdG9yJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ21vZHVsYXRpb24nLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkVudmVsb3BlJyxcblx0ICAgICAgICAgICAgJ2RldHVuZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLkZNU3ludGgsIFRvbmUuTW9ub3Bob25pYyk7XG5cdCAgICAvKipcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5GTVN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDMsXG5cdCAgICAgICAgJ21vZHVsYXRpb25JbmRleCc6IDEwLFxuXHQgICAgICAgICdkZXR1bmUnOiAwLFxuXHQgICAgICAgICdvc2NpbGxhdG9yJzogeyAndHlwZSc6ICdzaW5lJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDAuMDEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMSxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjVcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdtb2R1bGF0aW9uJzogeyAndHlwZSc6ICdzcXVhcmUnIH0sXG5cdCAgICAgICAgJ21vZHVsYXRpb25FbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuNSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMCxcblx0ICAgICAgICAgICAgJ3N1c3RhaW4nOiAxLFxuXHQgICAgICAgICAgICAncmVsZWFzZSc6IDAuNVxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBcdHRyaWdnZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgbm90ZSB3aWxsIG9jY3VyXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5IG9mIHRoZSBub3RlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZNU3ludGh9IHRoaXNcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5wcm90b3R5cGUuX3RyaWdnZXJFbnZlbG9wZUF0dGFjayA9IGZ1bmN0aW9uICh0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLl9jYXJyaWVyLl90cmlnZ2VyRW52ZWxvcGVBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5fdHJpZ2dlckVudmVsb3BlQXR0YWNrKHRpbWUpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICB0cmlnZ2VyIHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIG5vdGVcblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSBub3RlIHdpbGwgcmVsZWFzZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5GTVN5bnRofSB0aGlzXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkZNU3ludGgucHJvdG90eXBlLl90cmlnZ2VyRW52ZWxvcGVSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fY2Fycmllci5fdHJpZ2dlckVudmVsb3BlUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0b3IuX3RyaWdnZXJFbnZlbG9wZVJlbGVhc2UodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIGNsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLkZNU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuRk1TeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLk1vbm9waG9uaWMucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZShbXG5cdCAgICAgICAgICAgICdmcmVxdWVuY3knLFxuXHQgICAgICAgICAgICAnaGFybW9uaWNpdHknLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jyxcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnbW9kdWxhdGlvbicsXG5cdCAgICAgICAgICAgICdtb2R1bGF0aW9uRW52ZWxvcGUnLFxuXHQgICAgICAgICAgICAnZGV0dW5lJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2NhcnJpZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX21vZHVsYXRvci5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdG9yID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmRldHVuZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uSW5kZXguZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbkluZGV4ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLmhhcm1vbmljaXR5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9tb2R1bGF0aW9uTm9kZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbW9kdWxhdGlvbk5vZGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZSA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5tb2R1bGF0aW9uRW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubW9kdWxhdGlvbiA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuRk1TeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk1lbWJyYW5lU3ludGggbWFrZXMga2ljayBhbmQgdG9tIHNvdW5kcyB1c2luZyBhIHNpbmdsZSBvc2NpbGxhdG9yXG5cdFx0ICogICAgICAgICAgd2l0aCBhbiBhbXBsaXR1ZGUgZW52ZWxvcGUgYW5kIGZyZXF1ZW5jeSByYW1wLiBBIFRvbmUuT21uaU9zY2lsbGF0b3Jcblx0XHQgKiAgICAgICAgICBpcyByb3V0ZWQgdGhyb3VnaCBhIFRvbmUuQW1wbGl0dWRlRW52ZWxvcGUgdG8gdGhlIG91dHB1dC4gVGhlIGRydW1cblx0XHQgKiAgICAgICAgICBxdWFsaXR5IG9mIHRoZSBzb3VuZCBjb21lcyBmcm9tIHRoZSBmcmVxdWVuY3kgZW52ZWxvcGUgYXBwbGllZFxuXHRcdCAqICAgICAgICAgIGR1cmluZyBUb25lLk1lbWJyYW5lU3ludGgudHJpZ2dlckF0dGFjayhub3RlKS4gVGhlIGZyZXF1ZW5jeSBlbnZlbG9wZVxuXHRcdCAqICAgICAgICAgIHN0YXJ0cyBhdCA8Y29kZT5ub3RlICogLm9jdGF2ZXM8L2NvZGU+IGFuZCByYW1wcyB0byA8Y29kZT5ub3RlPC9jb2RlPlxuXHRcdCAqICAgICAgICAgIG92ZXIgdGhlIGR1cmF0aW9uIG9mIDxjb2RlPi5waXRjaERlY2F5PC9jb2RlPi5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSBzeW50aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgZGVmYXVsdHMgYmVsb3dcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgc3ludGggPSBuZXcgVG9uZS5NZW1icmFuZVN5bnRoKCkudG9NYXN0ZXIoKTtcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZShcIkMyXCIsIFwiOG5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5NZW1icmFuZVN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3NjaWxsYXRvci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5PbW5pT3NjaWxsYXRvcn1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvciA9IG5ldyBUb25lLk9tbmlPc2NpbGxhdG9yKG9wdGlvbnMub3NjaWxsYXRvcik7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhlIHBpdGNoIGVudmVsb3BlIHJhbXBzLlxuXHRcdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMub2N0YXZlcyA9IG9wdGlvbnMub2N0YXZlcztcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIGZyZXF1ZW5jeSBlbnZlbG9wZSB0YWtlcy5cblx0XHRcdCAqICBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMucGl0Y2hEZWNheSA9IG9wdGlvbnMucGl0Y2hEZWNheTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IuY2hhaW4odGhpcy5lbnZlbG9wZSwgdGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NZW1icmFuZVN5bnRoLCBUb25lLkluc3RydW1lbnQpO1xuXHQgICAgLyoqXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncGl0Y2hEZWNheSc6IDAuMDUsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAxMCxcblx0ICAgICAgICAnb3NjaWxsYXRvcic6IHsgJ3R5cGUnOiAnc2luZScgfSxcblx0ICAgICAgICAnZW52ZWxvcGUnOiB7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiAwLjAwMSxcblx0ICAgICAgICAgICAgJ2RlY2F5JzogMC40LFxuXHQgICAgICAgICAgICAnc3VzdGFpbic6IDAuMDEsXG5cdCAgICAgICAgICAgICdyZWxlYXNlJzogMS40LFxuXHQgICAgICAgICAgICAnYXR0YWNrQ3VydmUnOiAnZXhwb25lbnRpYWwnXG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBub3RlIGF0IHRoZSBnaXZlbiB0aW1lIHdpdGggdGhlIGdpdmVuIHZlbG9jaXR5LlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgdGhlIG5vdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgdGhlIHRpbWUsIGlmIG5vdCBnaXZlbiBpcyBub3dcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdmVsb2NpdHkgZGVmYXVsdHMgdG8gMVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5NZW1icmFuZVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogIGtpY2sudHJpZ2dlckF0dGFjayg2MCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk1lbWJyYW5lU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgbm90ZSA9IHRoaXMudG9GcmVxdWVuY3kobm90ZSk7XG5cdCAgICAgICAgdmFyIG1heE5vdGUgPSBub3RlICogdGhpcy5vY3RhdmVzO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUobWF4Tm90ZSwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmZyZXF1ZW5jeS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKG5vdGUsIHRpbWUgKyB0aGlzLnRvU2Vjb25kcyh0aGlzLnBpdGNoRGVjYXkpKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdGFydCh0aW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIHRoZSBub3RlLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gdGhlIHRpbWUgdGhlIG5vdGUgd2lsbCByZWxlYXNlXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1lbWJyYW5lU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWVtYnJhbmVTeW50aC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMub3NjaWxsYXRvci5zdG9wKHRpbWUgKyB0aGlzLmVudmVsb3BlLnJlbGVhc2UpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTWVtYnJhbmVTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5NZW1icmFuZVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ29zY2lsbGF0b3InLFxuXHQgICAgICAgICAgICAnZW52ZWxvcGUnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5vc2NpbGxhdG9yLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLm9zY2lsbGF0b3IgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk1lbWJyYW5lU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqICBJbmhhcm1vbmljIHJhdGlvIG9mIGZyZXF1ZW5jaWVzIGJhc2VkIG9uIHRoZSBSb2xhbmQgVFItODA4XG5cdFx0ICogIFRha2VuIGZyb20gaHR0cHM6Ly9jY3JtYS5zdGFuZm9yZC5lZHUvcGFwZXJzL3RyLTgwOC1jeW1iYWwtcGh5c2ljYWxseS1pbmZvcm1lZC1jaXJjdWl0LWJlbmRhYmxlLWRpZ2l0YWwtbW9kZWxcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0ICovXG5cdCAgICB2YXIgaW5oYXJtUmF0aW9zID0gW1xuXHQgICAgICAgIDEsXG5cdCAgICAgICAgMS40ODMsXG5cdCAgICAgICAgMS45MzIsXG5cdCAgICAgICAgMi41NDYsXG5cdCAgICAgICAgMi42Myxcblx0ICAgICAgICAzLjg5N1xuXHQgICAgXTtcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIEEgaGlnaGx5IGluaGFybW9uaWMgYW5kIHNwZWN0cmFsbHkgY29tcGxleCBzb3VyY2Ugd2l0aCBhIGhpZ2hwYXNzIGZpbHRlclxuXHRcdCAqICAgICAgICAgIGFuZCBhbXBsaXR1ZGUgZW52ZWxvcGUgd2hpY2ggaXMgZ29vZCBmb3IgbWFraW5nIG1ldGFsb3Bob25lIHNvdW5kcy4gQmFzZWRcblx0XHQgKiAgICAgICAgICBvbiBDeW1iYWxTeW50aCBieSBbQHBvbHlyaHl0aG1hdGljXShodHRwczovL2dpdGh1Yi5jb20vcG9seXJoeXRobWF0aWMpLlxuXHRcdCAqICAgICAgICAgIEluc3BpcmF0aW9uIGZyb20gW1NvdW5kIG9uIFNvdW5kXShodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA2MTAxNDM5MjQvaHR0cHM6Ly93d3cuc291bmRvbnNvdW5kLmNvbS9zb3MvanVsMDIvYXJ0aWNsZXMvc3ludGhzZWNyZXRzMDcwMi5hc3ApLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5JbnN0cnVtZW50fVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFRoZSBvcHRpb25zIGF2YWlsYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5NZXRhbFN5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZnJlcXVlbmN5IG9mIHRoZSBjeW1iYWxcblx0XHRcdCAqICBAdHlwZSAge0ZyZXF1ZW5jeX1cblx0XHRcdCAqICBAc2lnbmFsXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZyZXF1ZW5jeSA9IG5ldyBUb25lLlNpZ25hbChvcHRpb25zLmZyZXF1ZW5jeSwgVG9uZS5UeXBlLkZyZXF1ZW5jeSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFycmF5IG9mIEZNT3NjaWxsYXRvcnNcblx0XHRcdCAqICBAdHlwZSAge0FycmF5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmcmVxdWVuY3kgbXVsdGlwbGllcnNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVycyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbXBsaXR1ZGUgZm9yIHRoZSBib2R5XG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuR2Fpbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWUgPSBuZXcgVG9uZS5HYWluKDApLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGhpZ2hwYXNzIHRoZSBvdXRwdXRcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5GaWx0ZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2hpZ2hwYXNzID0gbmV3IFRvbmUuRmlsdGVyKHtcblx0ICAgICAgICAgICAgJ3R5cGUnOiAnaGlnaHBhc3MnLFxuXHQgICAgICAgICAgICAnUSc6IC0zLjAxMDI5OTk1NjYzOTgxMjVcblx0ICAgICAgICB9KS5jb25uZWN0KHRoaXMuX2FtcGxpdHVlKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgbnVtYmVyIG9mIG9jdGF2ZXMgdGhlIGhpZ2hwYXNzXG5cdFx0XHQgKiAgZmlsdGVyIGZyZXF1ZW5jeSByYW1wc1xuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX29jdGF2ZXMgPSBvcHRpb25zLm9jdGF2ZXM7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgU2NhbGUgdGhlIGJvZHkgZW52ZWxvcGVcblx0XHRcdCAqICBmb3IgdGhlIGJhbmRwYXNzXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuU2NhbGV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIgPSBuZXcgVG9uZS5TY2FsZShvcHRpb25zLnJlc29uYW5jZSwgNzAwMCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGVudmVsb3BlIHdoaWNoIGlzIGNvbm5lY3RlZCBib3RoIHRvIHRoZVxuXHRcdFx0ICogIGFtcGxpdHVkZSBhbmQgaGlnaHBhc3MgZmlsdGVyJ3MgY3V0b2ZmIGZyZXF1ZW5jeVxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5FbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5FbnZlbG9wZSh7XG5cdCAgICAgICAgICAgICdhdHRhY2snOiBvcHRpb25zLmVudmVsb3BlLmF0dGFjayxcblx0ICAgICAgICAgICAgJ2F0dGFja0N1cnZlJzogJ2xpbmVhcicsXG5cdCAgICAgICAgICAgICdkZWNheSc6IG9wdGlvbnMuZW52ZWxvcGUuZGVjYXksXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiBvcHRpb25zLmVudmVsb3BlLnJlbGVhc2Vcblx0ICAgICAgICB9KS5jaGFpbih0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLCB0aGlzLl9oaWdocGFzcy5mcmVxdWVuY3kpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuY29ubmVjdCh0aGlzLl9hbXBsaXR1ZS5nYWluKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaGFybVJhdGlvcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgb3NjID0gbmV3IFRvbmUuRk1Pc2NpbGxhdG9yKHtcblx0ICAgICAgICAgICAgICAgICd0eXBlJzogJ3NxdWFyZScsXG5cdCAgICAgICAgICAgICAgICAnbW9kdWxhdGlvblR5cGUnOiAnc3F1YXJlJyxcblx0ICAgICAgICAgICAgICAgICdoYXJtb25pY2l0eSc6IG9wdGlvbnMuaGFybW9uaWNpdHksXG5cdCAgICAgICAgICAgICAgICAnbW9kdWxhdGlvbkluZGV4Jzogb3B0aW9ucy5tb2R1bGF0aW9uSW5kZXhcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIG9zYy5jb25uZWN0KHRoaXMuX2hpZ2hwYXNzKTtcblx0ICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0gPSBvc2M7XG5cdCAgICAgICAgICAgIHZhciBtdWx0ID0gbmV3IFRvbmUuTXVsdGlwbHkoaW5oYXJtUmF0aW9zW2ldKTtcblx0ICAgICAgICAgICAgdGhpcy5fZnJlcU11bHRpcGxpZXJzW2ldID0gbXVsdDtcblx0ICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3kuY2hhaW4obXVsdCwgb3NjLmZyZXF1ZW5jeSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vc2V0IHRoZSBvY3RhdmVzXG5cdCAgICAgICAgdGhpcy5vY3RhdmVzID0gb3B0aW9ucy5vY3RhdmVzO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuTWV0YWxTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBkZWZhdWx0IHZhbHVlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NZXRhbFN5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdmcmVxdWVuY3knOiAyMDAsXG5cdCAgICAgICAgJ2VudmVsb3BlJzoge1xuXHQgICAgICAgICAgICAnYXR0YWNrJzogMC4wMDEsXG5cdCAgICAgICAgICAgICdkZWNheSc6IDEuNCxcblx0ICAgICAgICAgICAgJ3JlbGVhc2UnOiAwLjJcblx0ICAgICAgICB9LFxuXHQgICAgICAgICdoYXJtb25pY2l0eSc6IDUuMSxcblx0ICAgICAgICAnbW9kdWxhdGlvbkluZGV4JzogMzIsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDQwMDAsXG5cdCAgICAgICAgJ29jdGF2ZXMnOiAxLjVcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgICAgIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIFt2ZWxvY2l0eT0xXSAgVGhlIHZlbG9jaXR5IHRoYXQgdGhlIGVudmVsb3BlIHNob3VsZCBiZSB0cmlnZ2VyZWQgYXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1ldGFsU3ludGh9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHZlbCA9IFRvbmUuZGVmYXVsdEFyZyh2ZWwsIDEpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWwpO1xuXHQgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzLmZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICBvc2Muc3RhcnQodGltZSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgLy9pZiB0aGUgc3VzdGFpbiBpcyAwLCBzdG9wIHRoZSBvc2NpbGxhdG9yIGFzIHdlbGxcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzLmZvckVhY2goZnVuY3Rpb24gKG9zYykge1xuXHQgICAgICAgICAgICAgICAgb3NjLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUuYXR0YWNrICsgdGhpcy5lbnZlbG9wZS5kZWNheSk7XG5cdCAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSByZWxlYXNlIG9mIHRoZSBlbnZlbG9wZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWUgICAgICBXaGVuIHRoZSByZWxlYXNlIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1ldGFsU3ludGh9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5lbnZlbG9wZS50cmlnZ2VyUmVsZWFzZSh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9vc2NpbGxhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChvc2MpIHtcblx0ICAgICAgICAgICAgb3NjLnN0b3AodGltZSArIHRoaXMuZW52ZWxvcGUucmVsZWFzZSk7XG5cdCAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDApO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgcmVsZWFzZSBvZiB0aGUgZW52ZWxvcGUgYWZ0ZXIgdGhlIGdpdmVuXG5cdFx0ICogIGR1cmF0aW9uLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgZHVyYXRpb24gIFRoZSBkdXJhdGlvbiBiZWZvcmUgdHJpZ2dlcmluZyB0aGUgcmVsZWFzZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgdGltZSAgICAgIFdoZW4gdGhlIGF0dGFjayBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcGFyYW0gIHtOb3JtYWxSYW5nZX0gIFt2ZWxvY2l0eT0xXSAgVGhlIHZlbG9jaXR5IHRoYXQgdGhlIGVudmVsb3BlIHNob3VsZCBiZSB0cmlnZ2VyZWQgYXQuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLk1ldGFsU3ludGh9ICB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk1ldGFsU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2tSZWxlYXNlID0gZnVuY3Rpb24gKGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBkdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGR1cmF0aW9uKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2UodGltZSArIGR1cmF0aW9uKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIG1vZHVsYXRpb25JbmRleCBvZiB0aGUgb3NjaWxsYXRvcnMgd2hpY2ggbWFrZSB1cCB0aGUgc291cmNlLlxuXHRcdCAqICBzZWUgVG9uZS5GTU9zY2lsbGF0b3IubW9kdWxhdGlvbkluZGV4XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk1ldGFsU3ludGgjXG5cdFx0ICogIEB0eXBlIHtQb3NpdGl2ZX1cblx0XHQgKiAgQG5hbWUgIG1vZHVsYXRpb25JbmRleFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdtb2R1bGF0aW9uSW5kZXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vc2NpbGxhdG9yc1swXS5tb2R1bGF0aW9uSW5kZXgudmFsdWU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vc2NpbGxhdG9ycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnNbaV0ubW9kdWxhdGlvbkluZGV4LnZhbHVlID0gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGhhcm1vbmljaXR5IG9mIHRoZSBvc2NpbGxhdG9ycyB3aGljaCBtYWtlIHVwIHRoZSBzb3VyY2UuXG5cdFx0ICogIHNlZSBUb25lLkZNT3NjaWxsYXRvci5oYXJtb25pY2l0eVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7UG9zaXRpdmV9XG5cdFx0ICogIEBuYW1lICBoYXJtb25pY2l0eVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUsICdoYXJtb25pY2l0eScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29zY2lsbGF0b3JzWzBdLmhhcm1vbmljaXR5LnZhbHVlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3NjaWxsYXRvcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldLmhhcm1vbmljaXR5LnZhbHVlID0gdmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgaGlnaHBhc3MgZmlsdGVyIGF0dGFjaGVkIHRvIHRoZSBlbnZlbG9wZVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5NZXRhbFN5bnRoI1xuXHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdCAqICBAbmFtZSAgcmVzb25hbmNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZSwgJ3Jlc29uYW5jZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWluO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZpbHRlckZyZXFTY2FsZXIubWluID0gdmFsO1xuXHQgICAgICAgICAgICB0aGlzLm9jdGF2ZXMgPSB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFRoZSBudW1iZXIgb2Ygb2N0YXZlcyBhYm92ZSB0aGUgXCJyZXNvbmFuY2VcIiBmcmVxdWVuY3lcblx0XHQgKiAgdGhhdCB0aGUgZmlsdGVyIHJhbXBzIGR1cmluZyB0aGUgYXR0YWNrL2RlY2F5IGVudmVsb3BlXG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLk1ldGFsU3ludGgjXG5cdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogIEBuYW1lICBvY3RhdmVzXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5NZXRhbFN5bnRoLnByb3RvdHlwZSwgJ29jdGF2ZXMnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9vY3RhdmVzO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAob2N0cykge1xuXHQgICAgICAgICAgICB0aGlzLl9vY3RhdmVzID0gb2N0cztcblx0ICAgICAgICAgICAgdGhpcy5fZmlsdGVyRnJlcVNjYWxlci5tYXggPSB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLm1pbiAqIE1hdGgucG93KDIsIG9jdHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIENsZWFuIHVwXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk1ldGFsU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTWV0YWxTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX29zY2lsbGF0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX29zY2lsbGF0b3JzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy5fZnJlcU11bHRpcGxpZXJzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fb3NjaWxsYXRvcnMgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2ZyZXFNdWx0aXBsaWVycyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5mcmVxdWVuY3kuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9maWx0ZXJGcmVxU2NhbGVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9hbXBsaXR1ZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fYW1wbGl0dWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2hpZ2hwYXNzLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9oaWdocGFzcyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuTWV0YWxTeW50aDtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzICBUb25lLk5vaXNlU3ludGggaXMgY29tcG9zZWQgb2YgYSBub2lzZSBnZW5lcmF0b3IgKFRvbmUuTm9pc2UpLCBvbmUgZmlsdGVyIChUb25lLkZpbHRlciksXG5cdFx0ICogICAgICAgICAgYW5kIHR3byBlbnZlbG9wZXMgKFRvbmUuRW52ZWxvcCkuIE9uZSBlbnZlbG9wZSBjb250cm9scyB0aGUgYW1wbGl0dWRlXG5cdFx0ICogICAgICAgICAgb2YgdGhlIG5vaXNlIGFuZCB0aGUgb3RoZXIgaXMgY29udHJvbHMgdGhlIGN1dG9mZiBmcmVxdWVuY3kgb2YgdGhlIGZpbHRlci5cblx0XHQgKiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMXJxenVYOXJCbGhUNTBNUnZEMlRLbWw5Ym5aaGNabXpYRjFyZl9vN3ZkbkUvcHViP3c9OTE4Jmg9MjQyXCI+XG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkluc3RydW1lbnR9XG5cdFx0ICogIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgc3ludGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGRlZmF1bHRzIGJlbG93XG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiB2YXIgbm9pc2VTeW50aCA9IG5ldyBUb25lLk5vaXNlU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIG5vaXNlU3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoXCI4blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgLy9nZXQgdGhlIGRlZmF1bHRzXG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLk5vaXNlU3ludGguZGVmYXVsdHMpO1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBub2lzZSBzb3VyY2UuXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuTm9pc2V9XG5cdFx0XHQgKiAgQGV4YW1wbGVcblx0XHRcdCAqIG5vaXNlU3ludGguc2V0KFwibm9pc2UudHlwZVwiLCBcImJyb3duXCIpO1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5ub2lzZSA9IG5ldyBUb25lLk5vaXNlKCk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5BbXBsaXR1ZGVFbnZlbG9wZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBuZXcgVG9uZS5BbXBsaXR1ZGVFbnZlbG9wZShvcHRpb25zLmVudmVsb3BlKTtcblx0ICAgICAgICAvL2Nvbm5lY3QgdGhlIG5vaXNlIHRvIHRoZSBvdXRwdXRcblx0ICAgICAgICB0aGlzLm5vaXNlLmNoYWluKHRoaXMuZW52ZWxvcGUsIHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdub2lzZScsXG5cdCAgICAgICAgICAgICdlbnZlbG9wZSdcblx0ICAgICAgICBdKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5vaXNlU3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnbm9pc2UnOiB7ICd0eXBlJzogJ3doaXRlJyB9LFxuXHQgICAgICAgICdlbnZlbG9wZSc6IHtcblx0ICAgICAgICAgICAgJ2F0dGFjayc6IDAuMDA1LFxuXHQgICAgICAgICAgICAnZGVjYXknOiAwLjEsXG5cdCAgICAgICAgICAgICdzdXN0YWluJzogMFxuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU3RhcnQgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBlbnZlbG9wZXMuIFVubGlrZSBvdGhlclxuXHRcdCAqICBpbnN0cnVtZW50cywgVG9uZS5Ob2lzZVN5bnRoIGRvZXNuJ3QgaGF2ZSBhIG5vdGUuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSB0aGUgdGltZSB0aGUgYXR0YWNrIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZSAoMC0xKVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogbm9pc2VTeW50aC50cmlnZ2VyQXR0YWNrKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAodGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICAvL3RoZSBlbnZlbG9wZXNcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJBdHRhY2sodGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIC8vc3RhcnQgdGhlIG5vaXNlXG5cdCAgICAgICAgdGhpcy5ub2lzZS5zdGFydCh0aW1lKTtcblx0ICAgICAgICBpZiAodGhpcy5lbnZlbG9wZS5zdXN0YWluID09PSAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMubm9pc2Uuc3RvcCh0aW1lID0gdGhpcy5lbnZlbG9wZS5hdHRhY2sgKyB0aGlzLmVudmVsb3BlLmRlY2F5KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IHRoZSByZWxlYXNlIHBvcnRpb24gb2YgdGhlIGVudmVsb3Blcy5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBbdGltZT1ub3ddIHRoZSB0aW1lIHRoZSByZWxlYXNlIHNob3VsZCBzdGFydFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Ob2lzZVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnRyaWdnZXJSZWxlYXNlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aGlzLmVudmVsb3BlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgIHRoaXMubm9pc2Uuc3RvcCh0aW1lICsgdGhpcy5lbnZlbG9wZS5yZWxlYXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vaXNlU3ludGgucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDApO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMCk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBhbmQgdGhlbiB0aGUgcmVsZWFzZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gZHVyYXRpb24gdGhlIGR1cmF0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gICAgIHRoZSB0aW1lIG9mIHRoZSBhdHRhY2tcblx0XHQgKiAgQHBhcmFtICB7bnVtYmVyfSBbdmVsb2NpdHk9MV0gdGhlIHZlbG9jaXR5XG5cdFx0ICogIEByZXR1cm5zIHtUb25lLk5vaXNlU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuTm9pc2VTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAoZHVyYXRpb24sIHRpbWUsIHZlbG9jaXR5KSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGR1cmF0aW9uID0gdGhpcy50b1NlY29uZHMoZHVyYXRpb24pO1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckF0dGFjayh0aW1lLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZSh0aW1lICsgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9pc2VTeW50aH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob2lzZVN5bnRoLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ25vaXNlJyxcblx0ICAgICAgICAgICAgJ2VudmVsb3BlJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgICAgIHRoaXMubm9pc2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMubm9pc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZW52ZWxvcGUgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk5vaXNlU3ludGg7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBLYXJwbHVzLVN0cmluZyBzdHJpbmcgc3ludGhlc2lzLiBPZnRlbiBvdXQgb2YgdHVuZS5cblx0XHQgKiAgICAgICAgIFdpbGwgY2hhbmdlIHdoZW4gdGhlIEF1ZGlvV29ya2VyTm9kZSBpcyBhdmFpbGFibGUgYWNyb3NzXG5cdFx0ICogICAgICAgICBicm93c2Vycy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBzZWUgdGhlIGRlZmF1bHRzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIHBsdWNreSA9IG5ldyBUb25lLlBsdWNrU3ludGgoKS50b01hc3RlcigpO1xuXHRcdCAqIHBsdWNreS50cmlnZ2VyQXR0YWNrKFwiQzRcIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHQgICAgICAgIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRBcmcob3B0aW9ucywgVG9uZS5QbHVja1N5bnRoLmRlZmF1bHRzKTtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSB7VG9uZS5Ob2lzZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbm9pc2UgPSBuZXcgVG9uZS5Ob2lzZSgncGluaycpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBhbW91bnQgb2Ygbm9pc2UgYXQgdGhlIGF0dGFjay5cblx0XHRcdCAqICBOb21pbmFsIHJhbmdlIG9mIFswLjEsIDIwXVxuXHRcdFx0ICogIEB0eXBlIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmF0dGFja05vaXNlID0gb3B0aW9ucy5hdHRhY2tOb2lzZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgTEZDRlxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkxvd3Bhc3NDb21iRmlsdGVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9sZmNmID0gbmV3IFRvbmUuTG93cGFzc0NvbWJGaWx0ZXIoe1xuXHQgICAgICAgICAgICAncmVzb25hbmNlJzogb3B0aW9ucy5yZXNvbmFuY2UsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnOiBvcHRpb25zLmRhbXBlbmluZ1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSByZXNvbmFuY2UgY29udHJvbC5cblx0XHRcdCAqICBAdHlwZSB7Tm9ybWFsUmFuZ2V9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZXNvbmFuY2UgPSB0aGlzLl9sZmNmLnJlc29uYW5jZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZGFtcGVuaW5nIGNvbnRyb2wuIGkuZS4gdGhlIGxvd3Bhc3MgZmlsdGVyIGZyZXF1ZW5jeSBvZiB0aGUgY29tYiBmaWx0ZXJcblx0XHRcdCAqICBAdHlwZSB7RnJlcXVlbmN5fVxuXHRcdFx0ICogIEBzaWduYWxcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuZGFtcGVuaW5nID0gdGhpcy5fbGZjZi5kYW1wZW5pbmc7XG5cdCAgICAgICAgLy9jb25uZWN0aW9uc1xuXHQgICAgICAgIHRoaXMuX25vaXNlLmNvbm5lY3QodGhpcy5fbGZjZik7XG5cdCAgICAgICAgdGhpcy5fbGZjZi5jb25uZWN0KHRoaXMub3V0cHV0KTtcblx0ICAgICAgICB0aGlzLl9yZWFkT25seShbXG5cdCAgICAgICAgICAgICdyZXNvbmFuY2UnLFxuXHQgICAgICAgICAgICAnZGFtcGVuaW5nJ1xuXHQgICAgICAgIF0pO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGx1Y2tTeW50aCwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbHVja1N5bnRoLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdhdHRhY2tOb2lzZSc6IDEsXG5cdCAgICAgICAgJ2RhbXBlbmluZyc6IDQwMDAsXG5cdCAgICAgICAgJ3Jlc29uYW5jZSc6IDAuN1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmlnZ2VyIHRoZSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge0ZyZXF1ZW5jeX0gbm90ZSBUaGUgbm90ZSB0byB0cmlnZ2VyLlxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IFt0aW1lPW5vd10gV2hlbiB0aGUgbm90ZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbHVja1N5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBsdWNrU3ludGgucHJvdG90eXBlLnRyaWdnZXJBdHRhY2sgPSBmdW5jdGlvbiAobm90ZSwgdGltZSkge1xuXHQgICAgICAgIG5vdGUgPSB0aGlzLnRvRnJlcXVlbmN5KG5vdGUpO1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB2YXIgZGVsYXlBbW91bnQgPSAxIC8gbm90ZTtcblx0ICAgICAgICB0aGlzLl9sZmNmLmRlbGF5VGltZS5zZXRWYWx1ZUF0VGltZShkZWxheUFtb3VudCwgdGltZSk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2Uuc3RhcnQodGltZSk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2Uuc3RvcCh0aW1lICsgZGVsYXlBbW91bnQgKiB0aGlzLmF0dGFja05vaXNlKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgQ2xlYW4gdXAuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsdWNrU3ludGh9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGx1Y2tTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ub2lzZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbGZjZi5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fbm9pc2UgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2xmY2YgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX3dyaXRhYmxlKFtcblx0ICAgICAgICAgICAgJ3Jlc29uYW5jZScsXG5cdCAgICAgICAgICAgICdkYW1wZW5pbmcnXG5cdCAgICAgICAgXSk7XG5cdCAgICAgICAgdGhpcy5kYW1wZW5pbmcgPSBudWxsO1xuXHQgICAgICAgIHRoaXMucmVzb25hbmNlID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QbHVja1N5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUG9seVN5bnRoIGhhbmRsZXMgdm9pY2UgY3JlYXRpb24gYW5kIGFsbG9jYXRpb24gZm9yIGFueVxuXHRcdCAqICAgICAgICAgIGluc3RydW1lbnRzIHBhc3NlZCBpbiBhcyB0aGUgc2Vjb25kIHBhcmFtdGVyLiBQb2x5U3ludGggaXNcblx0XHQgKiAgICAgICAgICBub3QgYSBzeW50aGVzaXplciBieSBpdHNlbGYsIGl0IG1lcmVseSBtYW5hZ2VzIHZvaWNlcyBvZlxuXHRcdCAqICAgICAgICAgIG9uZSBvZiB0aGUgb3RoZXIgdHlwZXMgb2Ygc3ludGhzLCBhbGxvd2luZyBhbnkgb2YgdGhlXG5cdFx0ICogICAgICAgICAgbW9ub3Bob25pYyBzeW50aGVzaXplcnMgdG8gYmUgcG9seXBob25pYy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKiAgQHBhcmFtIHtudW1iZXJ8T2JqZWN0fSBbcG9seXBob255PTRdIFRoZSBudW1iZXIgb2Ygdm9pY2VzIHRvIGNyZWF0ZVxuXHRcdCAqICBAcGFyYW0ge2Z1bmN0aW9ufSBbdm9pY2U9VG9uZS5TeW50aF0gVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSB2b2ljZXNcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBUb25lLlN5bnRoIGJ5IGRlZmF1bHQuXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9hIHBvbHlzeW50aCBjb21wb3NlZCBvZiA2IFZvaWNlcyBvZiBTeW50aFxuXHRcdCAqIHZhciBzeW50aCA9IG5ldyBUb25lLlBvbHlTeW50aCg2LCBUb25lLlN5bnRoKS50b01hc3RlcigpO1xuXHRcdCAqIC8vc2V0IHRoZSBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBzZXQgaW50ZXJmYWNlXG5cdFx0ICogc3ludGguc2V0KFwiZGV0dW5lXCIsIC0xMjAwKTtcblx0XHQgKiAvL3BsYXkgYSBjaG9yZFxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkM0XCIsIFwiRTRcIiwgXCJBNFwiXSwgXCI0blwiKTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3BvbHlwaG9ueScsXG5cdCAgICAgICAgICAgICd2b2ljZSdcblx0ICAgICAgICBdLCBUb25lLlBvbHlTeW50aCk7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdEFyZyhvcHRpb25zLCBUb25lLkluc3RydW1lbnQuZGVmYXVsdHMpO1xuXHQgICAgICAgIC8vbWF4IHBvbHlwaG9ueVxuXHQgICAgICAgIG9wdGlvbnMucG9seXBob255ID0gTWF0aC5taW4oVG9uZS5Qb2x5U3ludGguTUFYX1BPTFlQSE9OWSwgb3B0aW9ucy5wb2x5cGhvbnkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBhcnJheSBvZiB2b2ljZXNcblx0XHRcdCAqICBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLnZvaWNlcyA9IG5ldyBBcnJheShvcHRpb25zLnBvbHlwaG9ueSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIHF1ZXVlIG9mIHZvaWNlcyB3aXRoIGRhdGEgYWJvdXQgbGFzdCB0cmlnZ2VyXG5cdFx0XHQgKiAgYW5kIHRoZSB0cmlnZ2VyZWQgbm90ZVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5fVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlcnMgPSBuZXcgQXJyYXkob3B0aW9ucy5wb2x5cGhvbnkpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBkZXR1bmUgaW4gY2VudHNcblx0XHRcdCAqICBAdHlwZSB7Q2VudHN9XG5cdFx0XHQgKiAgQHNpZ25hbFxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBuZXcgVG9uZS5TaWduYWwob3B0aW9ucy5kZXR1bmUsIFRvbmUuVHlwZS5DZW50cyk7XG5cdCAgICAgICAgdGhpcy5fcmVhZE9ubHkoJ2RldHVuZScpO1xuXHQgICAgICAgIC8vY3JlYXRlIHRoZSB2b2ljZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMucG9seXBob255OyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHYgPSBuZXcgb3B0aW9ucy52b2ljZShhcmd1bWVudHNbMl0sIGFyZ3VtZW50c1szXSk7XG5cdCAgICAgICAgICAgIGlmICghKHYgaW5zdGFuY2VvZiBUb25lLk1vbm9waG9uaWMpKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5bnRoIGNvbnN0cnVjdG9yIG11c3QgYmUgaW5zdGFuY2Ugb2YgVG9uZS5Nb25vcGhvbmljJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy52b2ljZXNbaV0gPSB2O1xuXHQgICAgICAgICAgICB2LmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICBpZiAodi5oYXNPd25Qcm9wZXJ0eSgnZGV0dW5lJykpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGV0dW5lLmNvbm5lY3Qodi5kZXR1bmUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJzW2ldID0ge1xuXHQgICAgICAgICAgICAgICAgcmVsZWFzZTogLTEsXG5cdCAgICAgICAgICAgICAgICBub3RlOiBudWxsLFxuXHQgICAgICAgICAgICAgICAgdm9pY2U6IHZcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Qb2x5U3ludGgsIFRvbmUuSW5zdHJ1bWVudCk7XG5cdCAgICAvKipcblx0XHQgKiAgdGhlIGRlZmF1bHRzXG5cdFx0ICogIEBjb25zdFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAncG9seXBob255JzogNCxcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAndm9pY2UnOiBUb25lLlN5bnRoXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFRyaWdnZXIgdGhlIGF0dGFjayBwb3J0aW9uIG9mIHRoZSBub3RlXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeXxBcnJheX0gbm90ZXMgVGhlIG5vdGVzIHRvIHBsYXkuIEFjY2VwdHMgYSBzaW5nbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVxdWVuY3kgb3IgYW4gYXJyYXkgb2YgZnJlcXVlbmNpZXMuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gIFRoZSBzdGFydCB0aW1lIG9mIHRoZSBub3RlLlxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gW3ZlbG9jaXR5PTFdIFRoZSB2ZWxvY2l0eSBvZiB0aGUgbm90ZS5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy90cmlnZ2VyIGEgY2hvcmQgaW1tZWRpYXRlbHkgd2l0aCBhIHZlbG9jaXR5IG9mIDAuMlxuXHRcdCAqIHBvbHkudHJpZ2dlckF0dGFjayhbXCJBYjNcIiwgXCJDNFwiLCBcIkY1XCJdLCB1bmRlZmluZWQsIDAuMik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlcywgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobm90ZXMpKSB7XG5cdCAgICAgICAgICAgIG5vdGVzID0gW25vdGVzXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIHZhbCA9IG5vdGVzW2ldO1xuXHQgICAgICAgICAgICAvL3RyaWdnZXIgdGhlIG9sZGVzdCB2b2ljZVxuXHQgICAgICAgICAgICB2YXIgb2xkZXN0ID0gdGhpcy5fdHJpZ2dlcnNbMF07XG5cdCAgICAgICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgdGhpcy5fdHJpZ2dlcnMubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0aGlzLl90cmlnZ2Vyc1tqXS5yZWxlYXNlIDwgb2xkZXN0LnJlbGVhc2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICBvbGRlc3QgPSB0aGlzLl90cmlnZ2Vyc1tqXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBvbGRlc3QucmVsZWFzZSA9IEluZmluaXR5O1xuXHQgICAgICAgICAgICBvbGRlc3Qubm90ZSA9IEpTT04uc3RyaW5naWZ5KHZhbCk7XG5cdCAgICAgICAgICAgIG9sZGVzdC52b2ljZS50cmlnZ2VyQXR0YWNrKHZhbCwgdGltZSwgdmVsb2NpdHkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgYXR0YWNrIGFuZCByZWxlYXNlIGFmdGVyIHRoZSBzcGVjaWZpZWQgZHVyYXRpb25cblx0XHQgKlxuXHRcdCAqICBAcGFyYW0gIHtGcmVxdWVuY3l8QXJyYXl9IG5vdGVzIFRoZSBub3RlcyB0byBwbGF5LiBBY2NlcHRzIGEgc2luZ2xlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJlcXVlbmN5IG9yIGFuIGFycmF5IG9mIGZyZXF1ZW5jaWVzLlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBkdXJhdGlvbiB0aGUgZHVyYXRpb24gb2YgdGhlIG5vdGVcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3RpbWU9bm93XSAgICAgaWYgbm8gdGltZSBpcyBnaXZlbiwgZGVmYXVsdHMgdG8gbm93XG5cdFx0ICogIEBwYXJhbSAge251bWJlcn0gW3ZlbG9jaXR5PTFdIHRoZSB2ZWxvY2l0eSBvZiB0aGUgYXR0YWNrICgwLTEpXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vdHJpZ2dlciBhIGNob3JkIGZvciBhIGR1cmF0aW9uIG9mIGEgaGFsZiBub3RlXG5cdFx0ICogcG9seS50cmlnZ2VyQXR0YWNrUmVsZWFzZShbXCJFYjNcIiwgXCJHNFwiLCBcIkM1XCJdLCBcIjJuXCIpO1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vY2FuIHBhc3MgaW4gYW4gYXJyYXkgb2YgZHVyYXRpb25zIGFzIHdlbGxcblx0XHQgKiBwb2x5LnRyaWdnZXJBdHRhY2tSZWxlYXNlKFtcIkViM1wiLCBcIkc0XCIsIFwiQzVcIl0sIFtcIjJuXCIsIFwiNG5cIiwgXCI0blwiXSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUudHJpZ2dlckF0dGFja1JlbGVhc2UgPSBmdW5jdGlvbiAobm90ZXMsIGR1cmF0aW9uLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJBdHRhY2sobm90ZXMsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICBpZiAoVG9uZS5pc0FycmF5KGR1cmF0aW9uKSAmJiBUb25lLmlzQXJyYXkobm90ZXMpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkID0gZHVyYXRpb25bTWF0aC5taW4oaSwgZHVyYXRpb24ubGVuZ3RoIC0gMSldO1xuXHQgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVsZWFzZShub3Rlc1tpXSwgdGltZSArIHRoaXMudG9TZWNvbmRzKGQpKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlbGVhc2Uobm90ZXMsIHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbikpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBvZiB0aGUgbm90ZS4gVW5saWtlIG1vbm9waG9uaWMgaW5zdHJ1bWVudHMsXG5cdFx0ICogIGEgbm90ZSAob3IgYXJyYXkgb2Ygbm90ZXMpIG5lZWRzIHRvIGJlIHBhc3NlZCBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXG5cdFx0ICogIEBwYXJhbSAge0ZyZXF1ZW5jeXxBcnJheX0gbm90ZXMgVGhlIG5vdGVzIHRvIHBsYXkuIEFjY2VwdHMgYSBzaW5nbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVxdWVuY3kgb3IgYW4gYXJyYXkgb2YgZnJlcXVlbmNpZXMuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFt0aW1lPW5vd10gIFdoZW4gdGhlIHJlbGVhc2Ugd2lsbCBiZSB0cmlnZ2VyZWQuXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBvbHlTeW50aH0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHBvbHkudHJpZ2dlclJlbGVhc2UoW1wiQWIzXCIsIFwiQzRcIiwgXCJGNVwiXSwgXCIrMm5cIik7XG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAobm90ZXMsIHRpbWUpIHtcblx0ICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobm90ZXMpKSB7XG5cdCAgICAgICAgICAgIG5vdGVzID0gW25vdGVzXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIHZvaWNlXG5cdCAgICAgICAgICAgIHZhciBzdHJpbmdpZmllZCA9IEpTT04uc3RyaW5naWZ5KG5vdGVzW2ldKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgdiA9IDA7IHYgPCB0aGlzLl90cmlnZ2Vycy5sZW5ndGg7IHYrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSB0aGlzLl90cmlnZ2Vyc1t2XTtcblx0ICAgICAgICAgICAgICAgIGlmIChkZXNjLm5vdGUgPT09IHN0cmluZ2lmaWVkICYmIGRlc2MucmVsZWFzZSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgICAgICBkZXNjLnZvaWNlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgICAgICAgICAgICAgIGRlc2MucmVsZWFzZSA9IHRpbWU7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogU3luYyB0aGUgaW5zdHJ1bWVudCB0byB0aGUgVHJhbnNwb3J0LiBBbGwgc3Vic2VxdWVudCBjYWxscyBvZlxuXHRcdCAqIFt0cmlnZ2VyQXR0YWNrXSgjdHJpZ2dlcmF0dGFjaykgYW5kIFt0cmlnZ2VyUmVsZWFzZV0oI3RyaWdnZXJyZWxlYXNlKVxuXHRcdCAqIHdpbGwgYmUgc2NoZWR1bGVkIGFsb25nIHRoZSB0cmFuc3BvcnQuXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBzeW50aC5zeW5jKClcblx0XHQgKiAvL3NjaGVkdWxlIDMgbm90ZXMgd2hlbiB0aGUgdHJhbnNwb3J0IGZpcnN0IHN0YXJ0c1xuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsIDApXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgJzhuJylcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnNG4nKVxuXHRcdCAqIC8vc3RhcnQgdGhlIHRyYW5zcG9ydCB0byBoZWFyIHRoZSBub3Rlc1xuXHRcdCAqIFRyYW5zcG9ydC5zdGFydCgpXG5cdFx0ICogQHJldHVybnMge1RvbmUuSW5zdHJ1bWVudH0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGgucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFNldCBhIG1lbWJlci9hdHRyaWJ1dGUgb2YgdGhlIHZvaWNlcy5cblx0XHQgKiAgQHBhcmFtIHtPYmplY3R8c3RyaW5nfSBwYXJhbXNcblx0XHQgKiAgQHBhcmFtIHtudW1iZXI9fSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSByYW1wVGltZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5Qb2x5U3ludGh9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBwb2x5LnNldCh7XG5cdFx0ICogXHRcImZpbHRlclwiIDoge1xuXHRcdCAqIFx0XHRcInR5cGVcIiA6IFwiaGlnaHBhc3NcIlxuXHRcdCAqIFx0fSxcblx0XHQgKiBcdFwiZW52ZWxvcGVcIiA6IHtcblx0XHQgKiBcdFx0XCJhdHRhY2tcIiA6IDAuMjVcblx0XHQgKiBcdH1cblx0XHQgKiB9KTtcblx0XHQgKi9cblx0ICAgIFRvbmUuUG9seVN5bnRoLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocGFyYW1zLCB2YWx1ZSwgcmFtcFRpbWUpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudm9pY2VzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldLnNldChwYXJhbXMsIHZhbHVlLCByYW1wVGltZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBHZXQgdGhlIHN5bnRoJ3MgYXR0cmlidXRlcy4gR2l2ZW4gbm8gYXJndW1lbnRzIGdldFxuXHRcdCAqICB3aWxsIHJldHVybiBhbGwgYXZhaWxhYmxlIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nXG5cdFx0ICogIHZhbHVlcy4gUGFzcyBpbiBhIHNpbmdsZSBhdHRyaWJ1dGUgdG8gcmV0cmlldmUgb3IgYW4gYXJyYXlcblx0XHQgKiAgb2YgYXR0cmlidXRlcy4gVGhlIGF0dHJpYnV0ZSBzdHJpbmdzIGNhbiBhbHNvIGluY2x1ZGUgYSBcIi5cIlxuXHRcdCAqICB0byBhY2Nlc3MgZGVlcGVyIHByb3BlcnRpZXMuXG5cdFx0ICogIEBwYXJhbSB7QXJyYXk9fSBwYXJhbXMgdGhlIHBhcmFtZXRlcnMgdG8gZ2V0LCBvdGhlcndpc2Ugd2lsbCByZXR1cm5cblx0XHQgKiAgXHRcdFx0XHRcdCAgIGFsbCBhdmFpbGFibGUuXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnZvaWNlc1swXS5nZXQocGFyYW1zKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVHJpZ2dlciB0aGUgcmVsZWFzZSBwb3J0aW9uIG9mIGFsbCB0aGUgY3VycmVudGx5IGFjdGl2ZSB2b2ljZXMuXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gW3RpbWU9bm93XSBXaGVuIHRoZSBub3RlcyBzaG91bGQgYmUgcmVsZWFzZWQuXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUucmVsZWFzZUFsbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdHJpZ2dlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGRlc2MgPSB0aGlzLl90cmlnZ2Vyc1tpXTtcblx0ICAgICAgICAgICAgaWYgKGRlc2MucmVsZWFzZSA+IHRpbWUpIHtcblx0ICAgICAgICAgICAgICAgIGRlc2MucmVsZWFzZSA9IHRpbWU7XG5cdCAgICAgICAgICAgICAgICBkZXNjLnZvaWNlLnRyaWdnZXJSZWxlYXNlKHRpbWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbGVhbiB1cC5cblx0XHQgKiAgQHJldHVybnMge1RvbmUuUG9seVN5bnRofSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlBvbHlTeW50aC5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkluc3RydW1lbnQucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudm9pY2VzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHRoaXMudm9pY2VzW2ldLmRpc3Bvc2UoKTtcblx0ICAgICAgICAgICAgdGhpcy52b2ljZXNbaV0gPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgnZGV0dW5lJyk7XG5cdCAgICAgICAgdGhpcy5kZXR1bmUuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuZGV0dW5lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLnZvaWNlcyA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fdHJpZ2dlcnMgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUaGUgbWF4aW11bSBudW1iZXIgb2Ygbm90ZXMgdGhhdCBjYW4gYmUgYWxsb2NhdGVkXG5cdFx0ICogIHRvIGEgcG9seXN5bnRoLlxuXHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHQgKiAgQHN0YXRpY1xuXHRcdCAqL1xuXHQgICAgVG9uZS5Qb2x5U3ludGguTUFYX1BPTFlQSE9OWSA9IDIwO1xuXHQgICAgcmV0dXJuIFRvbmUuUG9seVN5bnRoO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICAvKipcblx0XHQgKiBAY2xhc3MgQXV0b21hdGljYWxseSBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIHNldCBvZiBwaXRjaGVkIHNhbXBsZXMuIFBhc3MgaW4gYW4gb2JqZWN0IHdoaWNoIG1hcHMgdGhlIG5vdGUncyBwaXRjaCBvciBtaWRpIHZhbHVlIHRvIHRoZSB1cmwsIHRoZW4geW91IGNhbiB0cmlnZ2VyIHRoZSBhdHRhY2sgYW5kIHJlbGVhc2Ugb2YgdGhhdCBub3RlIGxpa2Ugb3RoZXIgaW5zdHJ1bWVudHMuIEJ5IGF1dG9tYXRpY2FsbHkgcmVwaXRjaGluZyB0aGUgc2FtcGxlcywgaXQgaXMgcG9zc2libGUgdG8gcGxheSBwaXRjaGVzIHdoaWNoIHdlcmUgbm90IGV4cGxpY2l0bHkgaW5jbHVkZWQgd2hpY2ggY2FuIHNhdmUgbG9hZGluZyB0aW1lLlxuXHRcdCAqICAgICAgICBGb3Igc2FtcGxlIG9yIGJ1ZmZlciBwbGF5YmFjayB3aGVyZSByZXBpdGNoaW5nIGlzIG5vdCBuZWNlc3NhcnksIHVzZSBbVG9uZS5QbGF5ZXJdKGh0dHBzOi8vdG9uZWpzLmdpdGh1Yi5pby9kb2NzL1BsYXllcikuXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IHNhbXBsZXMgQW4gb2JqZWN0IG9mIHNhbXBsZXMgbWFwcGluZyBlaXRoZXIgTWlkaVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgTnVtYmVycyBvciBTY2llbnRpZmljIFBpdGNoIE5vdGF0aW9uXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHVybCBvZiB0aGF0IHNhbXBsZS5cblx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhbGwgb2YgdGhlIHNhbXBsZXMgYXJlIGxvYWRlZC5cblx0XHQgKiBAcGFyYW0ge1N0cmluZz19IGJhc2VVcmwgVGhlIHJvb3QgVVJMIG9mIGFsbCBvZiB0aGUgc2FtcGxlcywgd2hpY2ggaXMgcHJlcGVuZGVkIHRvIGFsbCB0aGUgVVJMcy5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHZhciBzYW1wbGVyID0gbmV3IFRvbmUuU2FtcGxlcih7XG5cdFx0ICogXHRcIkMzXCIgOiBcInBhdGgvdG8vQzMubXAzXCIsXG5cdFx0ICogXHRcIkQjM1wiIDogXCJwYXRoL3RvL0RzaGFycDMubXAzXCIsXG5cdFx0ICogXHRcIkYjM1wiIDogXCJwYXRoL3RvL0ZzaGFycDMubXAzXCIsXG5cdFx0ICogXHRcIkEzXCIgOiBcInBhdGgvdG8vQTMubXAzXCIsXG5cdFx0ICogfSwgZnVuY3Rpb24oKXtcblx0XHQgKiBcdC8vc2FtcGxlciB3aWxsIHJlcGl0Y2ggdGhlIGNsb3Nlc3Qgc2FtcGxlXG5cdFx0ICogXHRzYW1wbGVyLnRyaWdnZXJBdHRhY2soXCJEM1wiKVxuXHRcdCAqIH0pXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuSW5zdHJ1bWVudH1cblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlciA9IGZ1bmN0aW9uICh1cmxzKSB7XG5cdCAgICAgICAgLy8gc2hpZnQgYXJndW1lbnRzIG92ZXIgb25lLiBUaG9zZSBhcmUgdGhlIHJlbWFpbmRlciBvZiB0aGUgb3B0aW9uc1xuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3MsIFtcblx0ICAgICAgICAgICAgJ29ubG9hZCcsXG5cdCAgICAgICAgICAgICdiYXNlVXJsJ1xuXHQgICAgICAgIF0sIFRvbmUuU2FtcGxlcik7XG5cdCAgICAgICAgVG9uZS5JbnN0cnVtZW50LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdCAgICAgICAgdmFyIHVybE1hcCA9IHt9O1xuXHQgICAgICAgIGZvciAodmFyIG5vdGUgaW4gdXJscykge1xuXHQgICAgICAgICAgICBpZiAoVG9uZS5pc05vdGUobm90ZSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vY29udmVydCB0aGUgbm90ZSBuYW1lIHRvIE1JRElcblx0ICAgICAgICAgICAgICAgIHZhciBtaWQgPSBUb25lLkZyZXF1ZW5jeShub3RlKS50b01pZGkoKTtcblx0ICAgICAgICAgICAgICAgIHVybE1hcFttaWRdID0gdXJsc1tub3RlXTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICghaXNOYU4ocGFyc2VGbG9hdChub3RlKSkpIHtcblx0ICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGlmIGl0J3MgbnVtYmVycyBhc3N1bWUgaXQncyBtaWRpXG5cdCAgICAgICAgICAgICAgICB1cmxNYXBbbm90ZV0gPSB1cmxzW25vdGVdO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlNhbXBsZXI6IHVybCBrZXlzIG11c3QgYmUgdGhlIG5vdGVcXCdzIHBpdGNoJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgc3RvcmVkIGFuZCBsb2FkZWQgYnVmZmVyc1xuXHRcdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyc31cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9idWZmZXJzID0gbmV3IFRvbmUuQnVmZmVycyh1cmxNYXAsIG9wdGlvbnMub25sb2FkLCBvcHRpb25zLmJhc2VVcmwpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIG9iamVjdCBvZiBhbGwgY3VycmVudGx5IHBsYXlpbmcgQnVmZmVyU291cmNlc1xuXHRcdFx0ICogQHR5cGUge09iamVjdH1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzID0ge307XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZW52ZWxvcGUgYXBwbGllZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGUuXG5cdFx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXR0YWNrID0gb3B0aW9ucy5hdHRhY2s7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZW52ZWxvcGUgYXBwbGllZCB0byB0aGUgZW5kIG9mIHRoZSBlbnZlbG9wZS5cblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5yZWxlYXNlID0gb3B0aW9ucy5yZWxlYXNlO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuU2FtcGxlciwgVG9uZS5JbnN0cnVtZW50KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkZWZhdWx0c1xuXHRcdCAqIEBjb25zdFxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgYXR0YWNrOiAwLFxuXHQgICAgICAgIHJlbGVhc2U6IDAuMSxcblx0ICAgICAgICBvbmxvYWQ6IFRvbmUubm9PcCxcblx0ICAgICAgICBiYXNlVXJsOiAnJ1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2UgaW4gc3RlcHMgYmV0d2VlbiB0aGUgZ2l2ZW4gbWlkaSBub3RlIGF0IHRoZSBjbG9zZXRzIHNhbXBsZS5cblx0XHQgKiBAcGFyYW0gIHtNaWRpfSBtaWRpXG5cdFx0ICogQHJldHVybiB7SW50ZXJ2YWx9XG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUuX2ZpbmRDbG9zZXN0ID0gZnVuY3Rpb24gKG1pZGkpIHtcblx0ICAgICAgICAvL3NlYXJjaGVzIHdpdGhpbiA4IG9jdGF2ZXMgb2YgdGhlIGdpdmVuIG1pZGkgbm90ZVxuXHQgICAgICAgIHZhciBNQVhfSU5URVJWQUwgPSA5Njtcblx0ICAgICAgICB2YXIgaW50ZXJ2YWwgPSAwO1xuXHQgICAgICAgIHdoaWxlIChpbnRlcnZhbCA8IE1BWF9JTlRFUlZBTCkge1xuXHQgICAgICAgICAgICAvLyBjaGVjayBhYm92ZSBhbmQgYmVsb3dcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2J1ZmZlcnMuaGFzKG1pZGkgKyBpbnRlcnZhbCkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiAtaW50ZXJ2YWw7XG5cdCAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYnVmZmVycy5oYXMobWlkaSAtIGludGVydmFsKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGludGVydmFsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGludGVydmFsKys7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEBwYXJhbSAge0ZyZXF1ZW5jeX0gbm90ZSAgICAgVGhlIG5vdGUgdG8gcGxheVxuXHRcdCAqIEBwYXJhbSAge1RpbWU9fSB0aW1lICAgICBXaGVuIHRvIHBsYXkgdGhlIG5vdGVcblx0XHQgKiBAcGFyYW0gIHtOb3JtYWxSYW5nZT19IHZlbG9jaXR5IFRoZSB2ZWxvY2l0eSB0byBwbGF5IHRoZSBzYW1wbGUgYmFjay5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9ICAgICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUudHJpZ2dlckF0dGFjayA9IGZ1bmN0aW9uIChub3RlLCB0aW1lLCB2ZWxvY2l0eSkge1xuXHQgICAgICAgIHZhciBtaWRpID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgLy8gZmluZCB0aGUgY2xvc2VzdCBub3RlIHBpdGNoXG5cdCAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSB0aGlzLl9maW5kQ2xvc2VzdChtaWRpKTtcblx0ICAgICAgICBpZiAoZGlmZmVyZW5jZSAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvc2VzdE5vdGUgPSBtaWRpIC0gZGlmZmVyZW5jZTtcblx0ICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuX2J1ZmZlcnMuZ2V0KGNsb3Nlc3ROb3RlKTtcblx0ICAgICAgICAgICAgLy8gcGxheSB0aGF0IG5vdGVcblx0ICAgICAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBUb25lLkJ1ZmZlclNvdXJjZSh7XG5cdCAgICAgICAgICAgICAgICAnYnVmZmVyJzogYnVmZmVyLFxuXHQgICAgICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKGRpZmZlcmVuY2UpLFxuXHQgICAgICAgICAgICAgICAgJ2ZhZGVJbic6IHRoaXMuYXR0YWNrLFxuXHQgICAgICAgICAgICAgICAgJ2ZhZGVPdXQnOiB0aGlzLnJlbGVhc2UsXG5cdCAgICAgICAgICAgICAgICAnY3VydmUnOiAnZXhwb25lbnRpYWwnXG5cdCAgICAgICAgICAgIH0pLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RhcnQodGltZSwgMCwgYnVmZmVyLmR1cmF0aW9uLCB2ZWxvY2l0eSk7XG5cdCAgICAgICAgICAgIC8vIGFkZCBpdCB0byB0aGUgYWN0aXZlIHNvdXJjZXNcblx0ICAgICAgICAgICAgaWYgKCFUb25lLmlzQXJyYXkodGhpcy5fYWN0aXZlU291cmNlc1ttaWRpXSkpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0gPSBbXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLnB1c2goe1xuXHQgICAgICAgICAgICAgICAgbm90ZTogbWlkaSxcblx0ICAgICAgICAgICAgICAgIHNvdXJjZTogc291cmNlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBAcGFyYW0gIHtGcmVxdWVuY3l9IG5vdGUgICAgIFRoZSBub3RlIHRvIHJlbGVhc2UuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFx0V2hlbiB0byByZWxlYXNlIHRoZSBub3RlLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn1cdHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuU2FtcGxlci5wcm90b3R5cGUudHJpZ2dlclJlbGVhc2UgPSBmdW5jdGlvbiAobm90ZSwgdGltZSkge1xuXHQgICAgICAgIHZhciBtaWRpID0gVG9uZS5GcmVxdWVuY3kobm90ZSkudG9NaWRpKCk7XG5cdCAgICAgICAgLy8gZmluZCB0aGUgbm90ZVxuXHQgICAgICAgIGlmICh0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldICYmIHRoaXMuX2FjdGl2ZVNvdXJjZXNbbWlkaV0ubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLnNoaWZ0KCkuc291cmNlO1xuXHQgICAgICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUgKyB0aGlzLnJlbGVhc2UsIHRoaXMucmVsZWFzZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFJlbGVhc2UgYWxsIGN1cnJlbnRseSBhY3RpdmUgbm90ZXMuXG5cdFx0ICogQHBhcmFtICB7VGltZT19IHRpbWUgICAgIFx0V2hlbiB0byByZWxlYXNlIHRoZSBub3Rlcy5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlNhbXBsZXJ9XHR0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnJlbGVhc2VBbGwgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICBmb3IgKHZhciBub3RlIGluIHRoaXMuX2FjdGl2ZVNvdXJjZXMpIHtcblx0ICAgICAgICAgICAgdmFyIHNvdXJjZXMgPSB0aGlzLl9hY3RpdmVTb3VyY2VzW25vdGVdO1xuXHQgICAgICAgICAgICB3aGlsZSAoc291cmNlcy5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzLnNoaWZ0KCkuc291cmNlO1xuXHQgICAgICAgICAgICAgICAgc291cmNlLnN0b3AodGltZSArIHRoaXMucmVsZWFzZSwgdGhpcy5yZWxlYXNlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTeW5jIHRoZSBpbnN0cnVtZW50IHRvIHRoZSBUcmFuc3BvcnQuIEFsbCBzdWJzZXF1ZW50IGNhbGxzIG9mXG5cdFx0ICogW3RyaWdnZXJBdHRhY2tdKCN0cmlnZ2VyYXR0YWNrKSBhbmQgW3RyaWdnZXJSZWxlYXNlXSgjdHJpZ2dlcnJlbGVhc2UpXG5cdFx0ICogd2lsbCBiZSBzY2hlZHVsZWQgYWxvbmcgdGhlIHRyYW5zcG9ydC5cblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIHN5bnRoLnN5bmMoKVxuXHRcdCAqIC8vc2NoZWR1bGUgMyBub3RlcyB3aGVuIHRoZSB0cmFuc3BvcnQgZmlyc3Qgc3RhcnRzXG5cdFx0ICogc3ludGgudHJpZ2dlckF0dGFja1JlbGVhc2UoJzhuJywgMClcblx0XHQgKiBzeW50aC50cmlnZ2VyQXR0YWNrUmVsZWFzZSgnOG4nLCAnOG4nKVxuXHRcdCAqIHN5bnRoLnRyaWdnZXJBdHRhY2tSZWxlYXNlKCc4bicsICc0bicpXG5cdFx0ICogLy9zdGFydCB0aGUgdHJhbnNwb3J0IHRvIGhlYXIgdGhlIG5vdGVzXG5cdFx0ICogVHJhbnNwb3J0LnN0YXJ0KClcblx0XHQgKiBAcmV0dXJucyB7VG9uZS5JbnN0cnVtZW50fSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdGhpcy5fc3luY01ldGhvZCgndHJpZ2dlckF0dGFjaycsIDEpO1xuXHQgICAgICAgIHRoaXMuX3N5bmNNZXRob2QoJ3RyaWdnZXJSZWxlYXNlJywgMSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlIHRoZSBhdHRhY2sgcGhhc2UsIHRoZW4gYWZ0ZXIgdGhlIGR1cmF0aW9uLCBpbnZva2UgdGhlIHJlbGVhc2UuXG5cdFx0ICogQHBhcmFtICB7RnJlcXVlbmN5fSBub3RlICAgICBUaGUgbm90ZSB0byBwbGF5XG5cdFx0ICogQHBhcmFtICB7VGltZX0gZHVyYXRpb24gVGhlIHRpbWUgdGhlIG5vdGUgc2hvdWxkIGJlIGhlbGRcblx0XHQgKiBAcGFyYW0gIHtUaW1lPX0gdGltZSAgICAgV2hlbiB0byBzdGFydCB0aGUgYXR0YWNrXG5cdFx0ICogQHBhcmFtICB7Tm9ybWFsUmFuZ2V9IFt2ZWxvY2l0eT0xXSBUaGUgdmVsb2NpdHkgb2YgdGhlIGF0dGFja1xuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn0gICAgICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS50cmlnZ2VyQXR0YWNrUmVsZWFzZSA9IGZ1bmN0aW9uIChub3RlLCBkdXJhdGlvbiwgdGltZSwgdmVsb2NpdHkpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbik7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyQXR0YWNrKG5vdGUsIHRpbWUsIHZlbG9jaXR5KTtcblx0ICAgICAgICB0aGlzLnRyaWdnZXJSZWxlYXNlKG5vdGUsIHRpbWUgKyBkdXJhdGlvbik7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIG5vdGUgdG8gdGhlIHNhbXBsZXIuXG5cdFx0ICogIEBwYXJhbSAge05vdGV8TWlkaX0gICBub3RlICAgICAgVGhlIGJ1ZmZlcidzIHBpdGNoLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8VG9uZS5CdWZmZXJ8QXVkaW9idWZmZXJ9ICB1cmwgIEVpdGhlciB0aGUgdXJsIG9mIHRoZSBidWZlcixcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGFkZGVkXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb249fSAgY2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBpbnZva2Vcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlNhbXBsZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChub3RlLCB1cmwsIGNhbGxiYWNrKSB7XG5cdCAgICAgICAgaWYgKFRvbmUuaXNOb3RlKG5vdGUpKSB7XG5cdCAgICAgICAgICAgIC8vY29udmVydCB0aGUgbm90ZSBuYW1lIHRvIE1JRElcblx0ICAgICAgICAgICAgdmFyIG1pZCA9IFRvbmUuRnJlcXVlbmN5KG5vdGUpLnRvTWlkaSgpO1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXJzLmFkZChtaWQsIHVybCwgY2FsbGJhY2spO1xuXHQgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKHBhcnNlRmxvYXQobm90ZSkpKSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGlmIGl0J3MgbnVtYmVycyBhc3N1bWUgaXQncyBtaWRpXG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnMuYWRkKG5vdGUsIHVybCwgY2FsbGJhY2spO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5TYW1wbGVyOiBub3RlIG11c3QgYmUgdGhlIG5vdGVcXCdzIHBpdGNoLiBJbnN0ZWFkIGdvdCAnICsgbm90ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIHRoZSBidWZmZXJzIGFyZSBsb2FkZWQgb3Igbm90XG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU2FtcGxlciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb2FkZWRcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlNhbXBsZXIucHJvdG90eXBlLCAnbG9hZGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVycy5sb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBDbGVhbiB1cFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuU2FtcGxlcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5TYW1wbGVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuSW5zdHJ1bWVudC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBudWxsO1xuXHQgICAgICAgIGZvciAodmFyIG1pZGkgaW4gdGhpcy5fYWN0aXZlU291cmNlcykge1xuXHQgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzW21pZGldLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICBldmVudC5zb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuU2FtcGxlcjtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgaWYgKFRvbmUuc3VwcG9ydGVkKSB7XG5cdCAgICAgICAgaWYgKCFPc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0UGVyaW9kaWNXYXZlKSB7XG5cdCAgICAgICAgICAgIE9zY2lsbGF0b3JOb2RlLnByb3RvdHlwZS5zZXRQZXJpb2RpY1dhdmUgPSBPc2NpbGxhdG9yTm9kZS5wcm90b3R5cGUuc2V0V2F2ZVRhYmxlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoIUF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlUGVyaW9kaWNXYXZlKSB7XG5cdCAgICAgICAgICAgIEF1ZGlvQ29udGV4dC5wcm90b3R5cGUuY3JlYXRlUGVyaW9kaWNXYXZlID0gQXVkaW9Db250ZXh0LnByb3RvdHlwZS5jcmVhdGVXYXZlVGFibGU7XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgTWFwcyBhIE5vcm1hbFJhbmdlIFswLCAxXSB0byBhbiBBdWRpb1JhbmdlIFstMSwgMV0uIFxuXHRcdCAqICAgICAgICAgU2VlIGFsc28gVG9uZS5BdWRpb1RvR2Fpbi4gXG5cdFx0ICpcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuU2lnbmFsQmFzZX1cblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogdmFyIGcyYSA9IG5ldyBUb25lLkdhaW5Ub0F1ZGlvKCk7XG5cdFx0ICovXG5cdCAgICBUb25lLkdhaW5Ub0F1ZGlvID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU2lnbmFsQmFzZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlIHtXYXZlU2hhcGVyTm9kZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbm9ybSA9IHRoaXMuaW5wdXQgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLldhdmVTaGFwZXIoZnVuY3Rpb24gKHgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHgpICogMiAtIDE7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5HYWluVG9BdWRpbywgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICBjbGVhbiB1cFxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5HYWluVG9BdWRpb30gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5HYWluVG9BdWRpby5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9ub3JtLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9ub3JtID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5HYWluVG9BdWRpbztcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgXG5cdCAgICAvKipcblx0XHQgKiAgQGNsYXNzIE5vcm1hbGl6ZSB0YWtlcyBhbiBpbnB1dCBtaW4gYW5kIG1heCBhbmQgbWFwcyBpdCBsaW5lYXJseSB0byBOb3JtYWxSYW5nZSBbMCwxXVxuXHRcdCAqXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLlNpZ25hbEJhc2V9XG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gaW5wdXRNaW4gdGhlIG1pbiBpbnB1dCB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gaW5wdXRNYXggdGhlIG1heCBpbnB1dCB2YWx1ZVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBub3JtID0gbmV3IFRvbmUuTm9ybWFsaXplKDIsIDQpO1xuXHRcdCAqIHZhciBzaWcgPSBuZXcgVG9uZS5TaWduYWwoMykuY29ubmVjdChub3JtKTtcblx0XHQgKiAvL291dHB1dCBvZiBub3JtIGlzIDAuNS4gXG5cdFx0ICovXG5cdCAgICBUb25lLk5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChpbnB1dE1pbiwgaW5wdXRNYXgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICB0aGUgbWluIGlucHV0IHZhbHVlXG5cdFx0XHQgKiAgQHR5cGUge251bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5faW5wdXRNaW4gPSBUb25lLmRlZmF1bHRBcmcoaW5wdXRNaW4sIDApO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIHRoZSBtYXggaW5wdXQgdmFsdWVcblx0XHRcdCAqICBAdHlwZSB7bnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9pbnB1dE1heCA9IFRvbmUuZGVmYXVsdEFyZyhpbnB1dE1heCwgMSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgc3VidHJhY3QgdGhlIG1pbiBmcm9tIHRoZSBpbnB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLkFkZH1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3ViID0gdGhpcy5pbnB1dCA9IG5ldyBUb25lLkFkZCgwKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBkaXZpZGUgYnkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgaW5wdXQgYW5kIG91dHB1dFxuXHRcdFx0ICogIEB0eXBlIHtUb25lLk11bHRpcGx5fVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9kaXYgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLk11bHRpcGx5KDEpO1xuXHQgICAgICAgIHRoaXMuX3N1Yi5jb25uZWN0KHRoaXMuX2Rpdik7XG5cdCAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLk5vcm1hbGl6ZSwgVG9uZS5TaWduYWxCYXNlKTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtaW5pbXVtIHZhbHVlIHRoZSBpbnB1dCBzaWduYWwgd2lsbCByZWFjaC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Ob3JtYWxpemUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtaW5cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUsICdtaW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dE1pbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1pbikge1xuXHQgICAgICAgICAgICB0aGlzLl9pbnB1dE1pbiA9IG1pbjtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBtYXhpbXVtIHZhbHVlIHRoZSBpbnB1dCBzaWduYWwgd2lsbCByZWFjaC5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Ob3JtYWxpemUjXG5cdFx0ICogQHR5cGUge251bWJlcn1cblx0XHQgKiBAbmFtZSBtYXhcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUsICdtYXgnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbnB1dE1heDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKG1heCkge1xuXHQgICAgICAgICAgICB0aGlzLl9pbnB1dE1heCA9IG1heDtcblx0ICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2UoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBzZXQgdGhlIHZhbHVlc1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Ob3JtYWxpemUucHJvdG90eXBlLl9zZXRSYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB0aGlzLl9zdWIudmFsdWUgPSAtdGhpcy5faW5wdXRNaW47XG5cdCAgICAgICAgdGhpcy5fZGl2LnZhbHVlID0gMSAvICh0aGlzLl9pbnB1dE1heCAtIHRoaXMuX2lucHV0TWluKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgY2xlYW4gdXBcblx0XHQgKiAgQHJldHVybnMge1RvbmUuTm9ybWFsaXplfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLk5vcm1hbGl6ZS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLlNpZ25hbEJhc2UucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9zdWIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX3N1YiA9IG51bGw7XG5cdCAgICAgICAgdGhpcy5fZGl2LmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9kaXYgPSBudWxsO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIHJldHVybiBUb25lLk5vcm1hbGl6ZTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogQGNsYXNzIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwgZXh0ZW5kcyBUb25lLlNpZ25hbCwgYnV0IGFkZHMgdGhlIGFiaWxpdHkgdG8gc3luY2hyb25pemUgdGhlIHNpZ25hbCB0byB0aGUgc2lnbmFsIHRvIHRoZSBUb25lLlRyYW5zcG9ydFxuXHRcdCAqIEBleHRlbmRzIHtUb25lLlNpZ25hbH1cblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgVG9uZS5TaWduYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSByZWFsIHNpZ25hbCBvdXRwdXRcblx0XHRcdCAqIEB0eXBlIHtUb25lLlNpZ25hbH1cblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLm91dHB1dCA9IHRoaXMuX291dHB1dFNpZyA9IG5ldyBUb25lLlNpZ25hbCh0aGlzLl9pbml0aWFsVmFsdWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogS2VlcCB0cmFjayBvZiB0aGUgbGFzdCB2YWx1ZS4gKHNtYWxsIG9wdGltaXphdGlvbilcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbGFzdFZhbCA9IHRoaXMudmFsdWU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgZXZlbnQgaWQgb2YgdGhlIHRpY2sgdXBkYXRlIGxvb3Bcblx0XHRcdCAqIEBwcml2YXRlXG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3luY2VkID0gVG9uZS5UcmFuc3BvcnQuc2NoZWR1bGVSZXBlYXQodGhpcy5fb25UaWNrLmJpbmQodGhpcyksICcxaScpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogQSBib3VuZCB2ZXJzaW9uIG9mIHRoZSBhbmNob3IgdmFsdWUgbWV0aG9kc1xuXHRcdFx0ICogQHR5cGUge0Z1bmN0aW9ufVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2JpbmRBbmNob3JWYWx1ZSA9IHRoaXMuX2FuY2hvclZhbHVlLmJpbmQodGhpcyk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub24oJ3N0YXJ0IHN0b3AgcGF1c2UnLCB0aGlzLl9iaW5kQW5jaG9yVmFsdWUpO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5tZW1vcnkgPSBJbmZpbml0eTtcblx0ICAgIH07XG5cdCAgICBUb25lLmV4dGVuZChUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLCBUb25lLlNpZ25hbCk7XG5cdCAgICAvKipcblx0XHQgKiBDYWxsYmFjayB3aGljaCBpcyBpbnZva2VkIGV2ZXJ5IHRpY2suXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHRpbWVcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLl9vblRpY2sgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHZhciB2YWwgPSB0aGlzLmdldFZhbHVlQXRUaW1lKFRvbmUuVHJhbnNwb3J0LnNlY29uZHMpO1xuXHQgICAgICAgIGlmICh0aGlzLl9sYXN0VmFsICE9PSB2YWwpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbGFzdFZhbCA9IHZhbDtcblx0ICAgICAgICAgICAgLy9hcHByb3hpbWF0ZSByYW1wIGN1cnZlcyB3aXRoIGxpbmVhciByYW1wc1xuXHQgICAgICAgICAgICB0aGlzLl9vdXRwdXRTaWcubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodmFsLCB0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogQW5jaG9yIHRoZSB2YWx1ZSBhdCB0aGUgc3RhcnQgYW5kIHN0b3Agb2YgdGhlIFRyYW5zcG9ydFxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdGltZSBUaGUgdGltZSBvZiB0aGUgZXZlbnRcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSAgICAgIHRoaXNcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuX2FuY2hvclZhbHVlID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZUF0VGltZShUb25lLlRyYW5zcG9ydC5zZWNvbmRzKTtcblx0ICAgICAgICB0aGlzLl9sYXN0VmFsID0gdmFsO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZy5jYW5jZWxTY2hlZHVsZWRWYWx1ZXModGltZSk7XG5cdCAgICAgICAgdGhpcy5fb3V0cHV0U2lnLnNldFZhbHVlQXRUaW1lKHZhbCwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCB0aGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLiBUaGlzIHdpbGxcblx0XHQgKiAgcmV0dXJuIHRoZSB1bmNvbnZlcnRlZCAocmF3KSB2YWx1ZS5cblx0XHQgKiAgQHBhcmFtICB7VHJhbnNwb3J0VGltZX0gIHRpbWUgIFRoZSB0aW1lIGluIHNlY29uZHMuXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9ICBUaGUgc2NoZWR1bGVkIHZhbHVlIGF0IHRoZSBnaXZlbiB0aW1lLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuZ2V0VmFsdWVBdFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgcmV0dXJuIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5nZXRWYWx1ZUF0VGltZS5jYWxsKHRoaXMsIHRpbWUpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIFNldCB0aGUgb3V0cHV0IG9mIHRoZSBzaWduYWwgYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGFuZ2UgdG8gYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSB0aW1lICBUaGUgdGltZSB0byBjaGFuZ2UgdGhlIHNpZ25hbFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLnNldFZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuc2V0VmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTGluZWFyIHJhbXAgdG8gdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIHByZXZpb3VzIHNjaGVkdWxlZCBwb2ludCB0byB0aGUgZ2l2ZW4gdmFsdWVcblx0XHQgKiBAcGFyYW0gIHtOdW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGFuZ2UgdG8gYXQgdGhlIGdpdmVuIHRpbWVcblx0XHQgKiBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSB0aW1lICBUaGUgdGltZSB0byBjaGFuZ2UgdGhlIHNpZ25hbFxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWx9ICAgICAgIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZSh0aW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogRXhwb25lbnRpYWwgcmFtcCB0byB0aGUgZ2l2ZW4gdmFsdWUgZnJvbSB0aGUgcHJldmlvdXMgc2NoZWR1bGVkIHBvaW50IHRvIHRoZSBnaXZlbiB2YWx1ZVxuXHRcdCAqIEBwYXJhbSAge051bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoYW5nZSB0byBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSAge1RyYW5zcG9ydFRpbWV9IHRpbWUgIFRoZSB0aW1lIHRvIGNoYW5nZSB0aGUgc2lnbmFsXG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdGltZSkge1xuXHQgICAgICAgIHRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUodGltZSk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgdGltZSk7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFN0YXJ0IGV4cG9uZW50aWFsbHkgYXBwcm9hY2hpbmcgdGhlIHRhcmdldCB2YWx1ZSBhdCB0aGUgZ2l2ZW4gdGltZSB3aXRoXG5cdFx0ICogIGEgcmF0ZSBoYXZpbmcgdGhlIGdpdmVuIHRpbWUgY29uc3RhbnQuXG5cdFx0ICogIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuXHRcdCAqICBAcGFyYW0ge1RyYW5zcG9ydFRpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge251bWJlcn0gdGltZUNvbnN0YW50XG5cdFx0ICogQHJldHVybiB7VG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbH0gICAgICAgdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5UcmFuc3BvcnRUaW1lbGluZVNpZ25hbC5wcm90b3R5cGUuc2V0VGFyZ2V0QXRUaW1lID0gZnVuY3Rpb24gKHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25zdGFudCkge1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IFRvbmUuVHJhbnNwb3J0VGltZShzdGFydFRpbWUpO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRUYXJnZXRBdFRpbWUuY2FsbCh0aGlzLCB2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDYW5jZWxzIGFsbCBzY2hlZHVsZWQgcGFyYW1ldGVyIGNoYW5nZXMgd2l0aCB0aW1lcyBncmVhdGVyIHRoYW4gb3Jcblx0XHQgKiAgZXF1YWwgdG8gc3RhcnRUaW1lLlxuXHRcdCAqICBAcGFyYW0gIHtUcmFuc3BvcnRUaW1lfSBzdGFydFRpbWVcblx0XHQgKiAgQHJldHVybnMge1RvbmUuUGFyYW19IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlZFZhbHVlcyA9IGZ1bmN0aW9uIChzdGFydFRpbWUpIHtcblx0ICAgICAgICBzdGFydFRpbWUgPSBUb25lLlRyYW5zcG9ydFRpbWUoc3RhcnRUaW1lKTtcblx0ICAgICAgICBUb25lLlNpZ25hbC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVkVmFsdWVzLmNhbGwodGhpcywgc3RhcnRUaW1lKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgU2V0IGFuIGFycmF5IG9mIGFyYml0cmFyeSB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHRpbWUgZm9yIHRoZSBnaXZlbiBkdXJhdGlvbi5cblx0XHQgKiAgQHBhcmFtIHtGbG9hdDMyQXJyYXl9IHZhbHVlc1xuXHRcdCAqICBAcGFyYW0ge1RpbWV9IHN0YXJ0VGltZVxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IGR1cmF0aW9uXG5cdFx0ICogIEBwYXJhbSB7Tm9ybWFsUmFuZ2V9IFtzY2FsaW5nPTFdIElmIHRoZSB2YWx1ZXMgaW4gdGhlIGN1cnZlIHNob3VsZCBiZSBzY2FsZWQgYnkgc29tZSB2YWx1ZVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5TaWduYWx9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWwucHJvdG90eXBlLnNldFZhbHVlQ3VydmVBdFRpbWUgPSBmdW5jdGlvbiAodmFsdWVzLCBzdGFydFRpbWUsIGR1cmF0aW9uLCBzY2FsaW5nKSB7XG5cdCAgICAgICAgc3RhcnRUaW1lID0gVG9uZS5UcmFuc3BvcnRUaW1lKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgZHVyYXRpb24gPSBUb25lLlRyYW5zcG9ydFRpbWUoZHVyYXRpb24pO1xuXHQgICAgICAgIFRvbmUuU2lnbmFsLnByb3RvdHlwZS5zZXRWYWx1ZUN1cnZlQXRUaW1lLmNhbGwodGhpcywgdmFsdWVzLCBzdGFydFRpbWUsIGR1cmF0aW9uLCBzY2FsaW5nKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgVGhpcyBpcyBzaW1pbGFyIHRvIFtjYW5jZWxTY2hlZHVsZWRWYWx1ZXNdKCNjYW5jZWxTY2hlZHVsZWRWYWx1ZXMpIGV4Y2VwdFxuXHRcdCAqICBpdCBob2xkcyB0aGUgYXV0b21hdGVkIHZhbHVlIGF0IHRpbWUgdW50aWwgdGhlIG5leHQgYXV0b21hdGVkIGV2ZW50LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5jYW5jZWxBbmRIb2xkQXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5TaWduYWwucHJvdG90eXBlLmNhbmNlbEFuZEhvbGRBdFRpbWUuY2FsbCh0aGlzLCBUb25lLlRyYW5zcG9ydFRpbWUodGltZSkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIERpc3Bvc2UgYW5kIGRpc2Nvbm5lY3Rcblx0XHQgKiBAcmV0dXJuIHtUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlRyYW5zcG9ydFRpbWVsaW5lU2lnbmFsLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuVHJhbnNwb3J0LmNsZWFyKHRoaXMuX3N5bmNlZCk7XG5cdCAgICAgICAgVG9uZS5UcmFuc3BvcnQub2ZmKCdzdGFydCBzdG9wIHBhdXNlJywgdGhpcy5fc3luY2VkQ2FsbGJhY2spO1xuXHQgICAgICAgIHRoaXMuX2V2ZW50cy5jYW5jZWwoMCk7XG5cdCAgICAgICAgVG9uZS5TaWduYWwucHJvdG90eXBlLmRpc3Bvc2UuY2FsbCh0aGlzKTtcblx0ICAgICAgICB0aGlzLl9vdXRwdXRTaWcuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuX291dHB1dFNpZyA9IG51bGw7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuVHJhbnNwb3J0VGltZWxpbmVTaWduYWw7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIC8qKlxuXHRcdCAqIEBjbGFzcyBUb25lLkdyYWluUGxheWVyIGltcGxlbWVudHMgW2dyYW51bGFyIHN5bnRoZXNpc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JhbnVsYXJfc3ludGhlc2lzKS5cblx0XHQgKiAgICAgICAgR3JhbnVsYXIgU3ludGhlc2lzIGVuYWJsZXMgeW91IHRvIGFkanVzdCBwaXRjaCBhbmQgcGxheWJhY2sgcmF0ZSBpbmRlcGVuZGVudGx5LiBUaGUgZ3JhaW5TaXplIGlzIHRoZVxuXHRcdCAqICAgICAgICBhbW91bnQgb2YgdGltZSBlYWNoIHNtYWxsIGNodW5rIG9mIGF1ZGlvIGlzIHBsYXllZCBmb3IgYW5kIHRoZSBvdmVybGFwIGlzIHRoZVxuXHRcdCAqICAgICAgICBhbW91bnQgb2YgY3Jvc3NmYWRpbmcgdHJhbnNpdGlvbiB0aW1lIGJldHdlZW4gc3VjY2Vzc2l2ZSBncmFpbnMuXG5cdFx0ICogQGV4dGVuZHMge1RvbmUuU291cmNlfVxuXHRcdCAqIEBwYXJhbSB7U3RyaW5nfFRvbmUuQnVmZmVyfSB1cmxcdFRoZSB1cmwgdG8gbG9hZCwgb3IgdGhlIFRvbmUuQnVmZmVyIHRvIHBsYXkuXG5cdFx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBpbnZva2UgYWZ0ZXIgdGhlIHVybCBpcyBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgJ3VybCcsXG5cdCAgICAgICAgICAgICdvbmxvYWQnXG5cdCAgICAgICAgXSwgVG9uZS5HcmFpblBsYXllcik7XG5cdCAgICAgICAgVG9uZS5Tb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgYXVkaW8gYnVmZmVyIGJlbG9uZ2luZyB0byB0aGUgcGxheWVyLlxuXHRcdFx0ICogIEB0eXBlICB7VG9uZS5CdWZmZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBUb25lLkJ1ZmZlcihvcHRpb25zLnVybCwgb3B0aW9ucy5vbmxvYWQpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIENyZWF0ZSBhIHJlcGVhdGluZyB0aWNrIHRvIHNjaGVkdWxlXG5cdFx0XHQgKiAgdGhlIGdyYWlucy5cblx0XHRcdCAqICBAdHlwZSAge1RvbmUuQ2xvY2t9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrID0gbmV3IFRvbmUuQ2xvY2sodGhpcy5fdGljay5iaW5kKHRoaXMpLCBvcHRpb25zLmdyYWluU2l6ZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHR5cGUgIHtOdW1iZXJ9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BFbmQgPSAwO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogQWxsIG9mIHRoZSBjdXJyZW50bHkgcGxheWluZyBCdWZmZXJTb3VyY2VzXG5cdFx0XHQgKiBAdHlwZSB7QXJyYXl9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIEB0eXBlICB7TnVtYmVyfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBAdHlwZSAge051bWJlcn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZ3JhaW5TaXplID0gb3B0aW9ucy5ncmFpblNpemU7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqICBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fb3ZlcmxhcCA9IG9wdGlvbnMub3ZlcmxhcDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBZGp1c3QgdGhlIHBpdGNoIGluZGVwZW5kZW50bHkgb2YgdGhlIHBsYXliYWNrUmF0ZS5cblx0XHRcdCAqICBAdHlwZSAge0NlbnRzfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5kZXR1bmUgPSBvcHRpb25zLmRldHVuZTtcblx0ICAgICAgICAvL3NldHVwXG5cdCAgICAgICAgdGhpcy5vdmVybGFwID0gb3B0aW9ucy5vdmVybGFwO1xuXHQgICAgICAgIHRoaXMubG9vcCA9IG9wdGlvbnMubG9vcDtcblx0ICAgICAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG9wdGlvbnMucGxheWJhY2tSYXRlO1xuXHQgICAgICAgIHRoaXMuZ3JhaW5TaXplID0gb3B0aW9ucy5ncmFpblNpemU7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBvcHRpb25zLmxvb3BTdGFydDtcblx0ICAgICAgICB0aGlzLmxvb3BFbmQgPSBvcHRpb25zLmxvb3BFbmQ7XG5cdCAgICAgICAgdGhpcy5yZXZlcnNlID0gb3B0aW9ucy5yZXZlcnNlO1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLm9uKCdzdG9wJywgdGhpcy5fb25zdG9wLmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuR3JhaW5QbGF5ZXIsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLmRlZmF1bHRzID0ge1xuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ292ZXJsYXAnOiAwLjEsXG5cdCAgICAgICAgJ2dyYWluU2l6ZSc6IDAuMixcblx0ICAgICAgICAncGxheWJhY2tSYXRlJzogMSxcblx0ICAgICAgICAnZGV0dW5lJzogMCxcblx0ICAgICAgICAnbG9vcCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogMCxcblx0ICAgICAgICAncmV2ZXJzZSc6IGZhbHNlXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFBsYXkgdGhlIGJ1ZmZlciBhdCB0aGUgZ2l2ZW4gc3RhcnRUaW1lLiBPcHRpb25hbGx5IGFkZCBhbiBvZmZzZXRcblx0XHQgKiAgYW5kL29yIGR1cmF0aW9uIHdoaWNoIHdpbGwgcGxheSB0aGUgYnVmZmVyIGZyb20gYSBwb3NpdGlvblxuXHRcdCAqICB3aXRoaW4gdGhlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIGR1cmF0aW9uLlxuXHRcdCAqXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtzdGFydFRpbWU9bm93XSBXaGVuIHRoZSBwbGF5ZXIgc2hvdWxkIHN0YXJ0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbb2Zmc2V0PTBdIFRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzYW1wbGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGF0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lPX0gZHVyYXRpb24gSG93IGxvbmcgdGhlIHNhbXBsZSBzaG91bGQgcGxheS4gSWYgbm8gZHVyYXRpb25cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgZnVsbCBsZW5ndGhcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHNhbXBsZSAobWludXMgYW55IG9mZnNldClcblx0XHQgKiAgQHJldHVybnMge1RvbmUuR3JhaW5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogIEBtZXRob2Qgc3RhcnRcblx0XHQgKiAgQG5hbWUgc3RhcnRcblx0XHQgKi9cblx0ICAgIC8qKlxuXHRcdCAqICBJbnRlcm5hbCBzdGFydCBtZXRob2Rcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSB0aW1lXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gb2Zmc2V0XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5fc3RhcnQgPSBmdW5jdGlvbiAodGltZSwgb2Zmc2V0LCBkdXJhdGlvbikge1xuXHQgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX29mZnNldCA9IG9mZnNldDtcblx0ICAgICAgICB0aGlzLl9jbG9jay5zdGFydCh0aW1lKTtcblx0ICAgICAgICBpZiAoZHVyYXRpb24pIHtcblx0ICAgICAgICAgICAgdGhpcy5zdG9wKHRpbWUgKyB0aGlzLnRvU2Vjb25kcyhkdXJhdGlvbikpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICogIEBwYXJhbSB7VGltZX0gdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUuX3N0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIHRoaXMuX2Nsb2NrLnN0b3AodGltZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW52b2tlZCB3aGVuIHRoZSBjbG9jayBpcyBzdG9wcGVkXG5cdFx0ICogQHBhcmFtICB7TnVtYmVyfSB0aW1lXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl9vbnN0b3AgPSBmdW5jdGlvbiAodGltZSkge1xuXHQgICAgICAgIC8vc3RvcCB0aGUgcGxheWVyc1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdG9wKHRpbWUsIDApO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBJbnZva2VkIG9uIGVhY2ggY2xvY2sgdGljay4gc2NoZWR1bGVkIGEgbmV3XG5cdFx0ICogIGdyYWluIGF0IHRoaXMgdGltZS5cblx0XHQgKiAgQHBhcmFtICB7VGltZX0gIHRpbWVcblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLl90aWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB2YXIgZmFkZUluID0gdGhpcy5fb2Zmc2V0IDwgdGhpcy5fb3ZlcmxhcCA/IDAgOiB0aGlzLl9vdmVybGFwO1xuXHQgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgVG9uZS5CdWZmZXJTb3VyY2Uoe1xuXHQgICAgICAgICAgICAnYnVmZmVyJzogdGhpcy5idWZmZXIsXG5cdCAgICAgICAgICAgICdmYWRlSW4nOiBmYWRlSW4sXG5cdCAgICAgICAgICAgICdmYWRlT3V0JzogdGhpcy5fb3ZlcmxhcCxcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0aGlzLmxvb3AsXG5cdCAgICAgICAgICAgICdsb29wU3RhcnQnOiB0aGlzLl9sb29wU3RhcnQsXG5cdCAgICAgICAgICAgICdsb29wRW5kJzogdGhpcy5fbG9vcEVuZCxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IFRvbmUuaW50ZXJ2YWxUb0ZyZXF1ZW5jeVJhdGlvKHRoaXMuZGV0dW5lIC8gMTAwKVxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIHNvdXJjZS5zdGFydCh0aW1lLCB0aGlzLl9vZmZzZXQpO1xuXHQgICAgICAgIHRoaXMuX29mZnNldCArPSB0aGlzLmdyYWluU2l6ZTtcblx0ICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lICsgdGhpcy5ncmFpblNpemUpO1xuXHQgICAgICAgIC8vYWRkIGl0IHRvIHRoZSBhY3RpdmUgc291cmNlc1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMucHVzaChzb3VyY2UpO1xuXHQgICAgICAgIC8vcmVtb3ZlIGl0IHdoZW4gaXQncyBkb25lXG5cdCAgICAgICAgc291cmNlLm9uZW5kZWQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2FjdGl2ZVNvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXHQgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LmJpbmQodGhpcyk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEp1bXAgdG8gYSBzcGVjaWZpYyB0aW1lIGFuZCBwbGF5IGl0LlxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSAgb2Zmc2V0ICBUaGUgb2Zmc2V0IHRvIGp1bXAgdG8uXG5cdFx0ICogIEBwYXJhbSB7VGltZT19IHRpbWUgV2hlbiB0byBtYWtlIHRoZSBqdW1wLlxuXHRcdCAqICBAcmV0dXJuICB7VG9uZS5HcmFpblBsYXllcn0gIHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLnNlZWsgPSBmdW5jdGlvbiAob2Zmc2V0LCB0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICB0aGlzLl90aWNrKHRoaXMudG9TZWNvbmRzKHRpbWUpKTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGxheWJhY2sgcmF0ZSBvZiB0aGUgc2FtcGxlXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1Bvc2l0aXZlfVxuXHRcdCAqIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAncGxheWJhY2tSYXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSByYXRlO1xuXHQgICAgICAgICAgICB0aGlzLmdyYWluU2l6ZSA9IHRoaXMuX2dyYWluU2l6ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBsb29wIHN0YXJ0IHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdsb29wU3RhcnQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wU3RhcnQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGxvb3AgZW5kIHRpbWUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuR3JhaW5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcEVuZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3BFbmQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BFbmQgPSB0aGlzLnRvU2Vjb25kcyh0aW1lKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkaXJlY3Rpb24gdGhlIGJ1ZmZlciBzaG91bGQgcGxheSBpblxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLkdyYWluUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBuYW1lIHJldmVyc2Vcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZSwgJ3JldmVyc2UnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlci5yZXZlcnNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmV2KSB7XG5cdCAgICAgICAgICAgIHRoaXMuYnVmZmVyLnJldmVyc2UgPSByZXY7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc2l6ZSBvZiBlYWNoIGNodW5rIG9mIGF1ZGlvIHRoYXQgdGhlXG5cdFx0ICogYnVmZmVyIGlzIGNob3BwZWQgaW50byBhbmQgcGxheWVkIGJhY2sgYXQuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuR3JhaW5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgZ3JhaW5TaXplXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdncmFpblNpemUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9ncmFpblNpemU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2dyYWluU2l6ZSA9IHRoaXMudG9TZWNvbmRzKHNpemUpO1xuXHQgICAgICAgICAgICB0aGlzLl9jbG9jay5mcmVxdWVuY3kudmFsdWUgPSB0aGlzLl9wbGF5YmFja1JhdGUgLyB0aGlzLl9ncmFpblNpemU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGlzIGlzIHRoZSBkdXJhdGlvbiBvZiB0aGUgY3Jvc3MtZmFkZSBiZXR3ZWVuXG5cdFx0ICogc3VjZXNzaXZlIGdyYWlucy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5HcmFpblBsYXllciNcblx0XHQgKiBAdHlwZSB7VGltZX1cblx0XHQgKiBAbmFtZSBvdmVybGFwXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5HcmFpblBsYXllci5wcm90b3R5cGUsICdvdmVybGFwJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxhcDtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fb3ZlcmxhcCA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogQ2xlYW4gdXBcblx0XHQgKiBAcmV0dXJuIHtUb25lLkdyYWluUGxheWVyfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLkdyYWluUGxheWVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5idWZmZXIuZGlzcG9zZSgpO1xuXHQgICAgICAgIHRoaXMuYnVmZmVyID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9jbG9jay5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fY2xvY2sgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuR3JhaW5QbGF5ZXI7XG5cdH0pO1xuXHRNb2R1bGUoZnVuY3Rpb24gKFRvbmUpIHtcblx0ICAgIFxuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyAgVG9uZS5QbGF5ZXIgaXMgYW4gYXVkaW8gZmlsZSBwbGF5ZXIgd2l0aCBzdGFydCwgbG9vcCwgYW5kIHN0b3AgZnVuY3Rpb25zLlxuXHRcdCAqXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5Tb3VyY2V9XG5cdFx0ICogIEBwYXJhbSB7c3RyaW5nfEF1ZGlvQnVmZmVyfSB1cmwgRWl0aGVyIHRoZSBBdWRpb0J1ZmZlciBvciB0aGUgdXJsIGZyb21cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0byBsb2FkIHRoZSBBdWRpb0J1ZmZlclxuXHRcdCAqICBAcGFyYW0ge0Z1bmN0aW9uPX0gb25sb2FkIFRoZSBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWNvbW1lbmRlZCB0byB1c2UgVG9uZS5CdWZmZXIub24oJ2xvYWQnKSBpbnN0ZWFkLlxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIHZhciBwbGF5ZXIgPSBuZXcgVG9uZS5QbGF5ZXIoXCIuL3BhdGgvdG8vc2FtcGxlLm1wM1wiKS50b01hc3RlcigpO1xuXHRcdCAqIC8vcGxheSBhcyBzb29uIGFzIHRoZSBidWZmZXIgaXMgbG9hZGVkXG5cdFx0ICogcGxheWVyLmF1dG9zdGFydCA9IHRydWU7XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllciA9IGZ1bmN0aW9uICh1cmwpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucztcblx0ICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgVG9uZS5CdWZmZXIgJiYgdXJsLmxvYWRlZCkge1xuXHQgICAgICAgICAgICB1cmwgPSB1cmwuZ2V0KCk7XG5cdCAgICAgICAgICAgIG9wdGlvbnMgPSBUb25lLlBsYXllci5kZWZhdWx0cztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBvcHRpb25zID0gVG9uZS5kZWZhdWx0cyhhcmd1bWVudHMsIFtcblx0ICAgICAgICAgICAgICAgICd1cmwnLFxuXHQgICAgICAgICAgICAgICAgJ29ubG9hZCdcblx0ICAgICAgICAgICAgXSwgVG9uZS5QbGF5ZXIpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBUb25lLlNvdXJjZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIElmIHRoZSBmaWxlIHNob3VsZCBwbGF5IGFzIHNvb25cblx0XHRcdCAqICBhcyB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqICBAZXhhbXBsZVxuXHRcdFx0ICogLy93aWxsIHBsYXkgYXMgc29vbiBhcyBpdCdzIGxvYWRlZFxuXHRcdFx0ICogdmFyIHBsYXllciA9IG5ldyBUb25lLlBsYXllcih7XG5cdFx0XHQgKiBcdFwidXJsXCIgOiBcIi4vcGF0aC90by9zYW1wbGUubXAzXCIsXG5cdFx0XHQgKiBcdFwiYXV0b3N0YXJ0XCIgOiB0cnVlLFxuXHRcdFx0ICogfSkudG9NYXN0ZXIoKTtcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuYXV0b3N0YXJ0ID0gb3B0aW9ucy5hdXRvc3RhcnQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIGJ1ZmZlclxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKiAgQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYnVmZmVyID0gbmV3IFRvbmUuQnVmZmVyKHtcblx0ICAgICAgICAgICAgJ3VybCc6IG9wdGlvbnMudXJsLFxuXHQgICAgICAgICAgICAnb25sb2FkJzogdGhpcy5fb25sb2FkLmJpbmQodGhpcywgb3B0aW9ucy5vbmxvYWQpLFxuXHQgICAgICAgICAgICAncmV2ZXJzZSc6IG9wdGlvbnMucmV2ZXJzZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmICh1cmwgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KHVybCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGlmIHRoZSBidWZmZXIgc2hvdWxkIGxvb3Agb25jZSBpdCdzIG92ZXJcblx0XHRcdCAqICBAdHlwZSB7Qm9vbGVhbn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fbG9vcCA9IG9wdGlvbnMubG9vcDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBpZiAnbG9vcCcgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBzdGFydCBhdCB0aGlzIHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IG9wdGlvbnMubG9vcFN0YXJ0O1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIGlmICdsb29wJyBpcyB0cnVlLCB0aGUgbG9vcCB3aWxsIGVuZCBhdCB0aGlzIHBvc2l0aW9uXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKiAgQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvb3BFbmQgPSBvcHRpb25zLmxvb3BFbmQ7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgdGhlIHBsYXliYWNrIHJhdGVcblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICogIEB0eXBlIHtOdW1iZXJ9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9wbGF5YmFja1JhdGUgPSBvcHRpb25zLnBsYXliYWNrUmF0ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBBbGwgb2YgdGhlIGFjdGl2ZSBidWZmZXIgc291cmNlIG5vZGVzXG5cdFx0XHQgKiAgQHR5cGUge0FycmF5PFRvbmUuQnVmZmVyU291cmNlPn1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcyA9IFtdO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBlbGFwc2VkIHRpbWUgY291bnRlci5cblx0XHRcdCAqICBAdHlwZSB7VG9uZS5UaWNrU291cmNlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IG5ldyBUb25lLlRpY2tTb3VyY2Uob3B0aW9ucy5wbGF5YmFja1JhdGUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBmYWRlSW4gdGltZSBvZiB0aGUgYW1wbGl0dWRlIGVudmVsb3BlLlxuXHRcdFx0ICogIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5mYWRlSW4gPSBvcHRpb25zLmZhZGVJbjtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgZmFkZU91dCB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0XHQgKiAgQHR5cGUge1RpbWV9XG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLmZhZGVPdXQgPSBvcHRpb25zLmZhZGVPdXQ7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5QbGF5ZXIsIFRvbmUuU291cmNlKTtcblx0ICAgIC8qKlxuXHRcdCAqICB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzXG5cdFx0ICogIEBzdGF0aWNcblx0XHQgKiAgQGNvbnN0XG5cdFx0ICogIEB0eXBlIHtPYmplY3R9XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAnb25sb2FkJzogVG9uZS5ub09wLFxuXHQgICAgICAgICdwbGF5YmFja1JhdGUnOiAxLFxuXHQgICAgICAgICdsb29wJzogZmFsc2UsXG5cdCAgICAgICAgJ2F1dG9zdGFydCc6IGZhbHNlLFxuXHQgICAgICAgICdsb29wU3RhcnQnOiAwLFxuXHQgICAgICAgICdsb29wRW5kJzogMCxcblx0ICAgICAgICAncmV0cmlnZ2VyJzogZmFsc2UsXG5cdCAgICAgICAgJ3JldmVyc2UnOiBmYWxzZSxcblx0ICAgICAgICAnZmFkZUluJzogMCxcblx0ICAgICAgICAnZmFkZU91dCc6IDBcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgTG9hZCB0aGUgYXVkaW8gZmlsZSBhcyBhbiBhdWRpbyBidWZmZXIuXG5cdFx0ICogIERlY29kZXMgdGhlIGF1ZGlvIGFzeW5jaHJvbm91c2x5IGFuZCBpbnZva2VzXG5cdFx0ICogIHRoZSBjYWxsYmFjayBvbmNlIHRoZSBhdWRpbyBidWZmZXIgbG9hZHMuXG5cdFx0ICogIE5vdGU6IHRoaXMgZG9lcyBub3QgbmVlZCB0byBiZSBjYWxsZWQgaWYgYSB1cmxcblx0XHQgKiAgd2FzIHBhc3NlZCBpbiB0byB0aGUgY29uc3RydWN0b3IuIE9ubHkgdXNlIHRoaXNcblx0XHQgKiAgaWYgeW91IHdhbnQgdG8gbWFudWFsbHkgbG9hZCBhIG5ldyB1cmwuXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgdXJsIG9mIHRoZSBidWZmZXIgdG8gbG9hZC5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIEZpbGV0eXBlIHN1cHBvcnQgZGVwZW5kcyBvbiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXIuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGludm9rZSBvbmNlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNhbXBsZSBpcyBsb2FkZWQuXG5cdFx0ICogIEByZXR1cm5zIHtQcm9taXNlfVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9idWZmZXIubG9hZCh1cmwsIHRoaXMuX29ubG9hZC5iaW5kKHRoaXMsIGNhbGxiYWNrKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogSW50ZXJuYWwgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyIGlzIGxvYWRlZC5cblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9vbmxvYWQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0ICAgICAgICBjYWxsYmFjayA9IFRvbmUuZGVmYXVsdEFyZyhjYWxsYmFjaywgVG9uZS5ub09wKTtcblx0ICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICBpZiAodGhpcy5hdXRvc3RhcnQpIHtcblx0ICAgICAgICAgICAgdGhpcy5zdGFydCgpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJbnRlcm5hbCBjYWxsYmFjayB3aGVuIHRoZSBidWZmZXIgaXMgZG9uZSBwbGF5aW5nLlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX29uU291cmNlRW5kID0gZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX2FjdGl2ZVNvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUGxheSB0aGUgYnVmZmVyIGF0IHRoZSBnaXZlbiBzdGFydFRpbWUuIE9wdGlvbmFsbHkgYWRkIGFuIG9mZnNldFxuXHRcdCAqICBhbmQvb3IgZHVyYXRpb24gd2hpY2ggd2lsbCBwbGF5IHRoZSBidWZmZXIgZnJvbSBhIHBvc2l0aW9uXG5cdFx0ICogIHdpdGhpbiB0aGUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gZHVyYXRpb24uXG5cdFx0ICpcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3N0YXJ0VGltZT1ub3ddIFdoZW4gdGhlIHBsYXllciBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtvZmZzZXQ9MF0gVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgc2FtcGxlIHNob3VsZCBwbGF5LiBJZiBubyBkdXJhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnaXZlbiwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmdWxsIGxlbmd0aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2FtcGxlIChtaW51cyBhbnkgb2Zmc2V0KVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqICBAbWV0aG9kIHN0YXJ0XG5cdFx0ICogIEBuYW1lIHN0YXJ0XG5cdFx0ICovXG5cdCAgICAvKipcblx0XHQgKiAgSW50ZXJuYWwgc3RhcnQgbWV0aG9kXG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllci5wcm90b3R5cGUuX3N0YXJ0ID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgb2Zmc2V0LCBkdXJhdGlvbikge1xuXHQgICAgICAgIC8vaWYgaXQncyBhIGxvb3AgdGhlIGRlZmF1bHQgb2Zmc2V0IGlzIHRoZSBsb29wc3RhcnQgcG9pbnRcblx0ICAgICAgICBpZiAodGhpcy5fbG9vcCkge1xuXHQgICAgICAgICAgICBvZmZzZXQgPSBUb25lLmRlZmF1bHRBcmcob2Zmc2V0LCB0aGlzLl9sb29wU3RhcnQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IG9mZnNldCBpcyAwXG5cdCAgICAgICAgICAgIG9mZnNldCA9IFRvbmUuZGVmYXVsdEFyZyhvZmZzZXQsIDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2NvbXB1dGUgdGhlIHZhbHVlcyBpbiBzZWNvbmRzXG5cdCAgICAgICAgb2Zmc2V0ID0gdGhpcy50b1NlY29uZHMob2Zmc2V0KTtcblx0ICAgICAgICB2YXIgY29tcHV0ZWREdXJhdGlvbiA9IFRvbmUuZGVmYXVsdEFyZyhkdXJhdGlvbiwgTWF0aC5tYXgodGhpcy5fYnVmZmVyLmR1cmF0aW9uIC0gb2Zmc2V0LCAwKSk7XG5cdCAgICAgICAgY29tcHV0ZWREdXJhdGlvbiA9IHRoaXMudG9TZWNvbmRzKGNvbXB1dGVkRHVyYXRpb24pO1xuXHQgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMudG9TZWNvbmRzKHN0YXJ0VGltZSk7XG5cdCAgICAgICAgLy9zdGFydCB0aGUgZWxhcHNlZCB0aW1lIGNvdW50ZXJcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZS5zdGFydChzdGFydFRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgLy9tYWtlIHRoZSBzb3VyY2Vcblx0ICAgICAgICB2YXIgc291cmNlID0gbmV3IFRvbmUuQnVmZmVyU291cmNlKHtcblx0ICAgICAgICAgICAgJ2J1ZmZlcic6IHRoaXMuX2J1ZmZlcixcblx0ICAgICAgICAgICAgJ2xvb3AnOiB0aGlzLl9sb29wLFxuXHQgICAgICAgICAgICAnbG9vcFN0YXJ0JzogdGhpcy5fbG9vcFN0YXJ0LFxuXHQgICAgICAgICAgICAnbG9vcEVuZCc6IHRoaXMuX2xvb3BFbmQsXG5cdCAgICAgICAgICAgICdvbmVuZGVkJzogdGhpcy5fb25Tb3VyY2VFbmQuYmluZCh0aGlzKSxcblx0ICAgICAgICAgICAgJ3BsYXliYWNrUmF0ZSc6IHRoaXMuX3BsYXliYWNrUmF0ZSxcblx0ICAgICAgICAgICAgJ2ZhZGVJbic6IHRoaXMuZmFkZUluLFxuXHQgICAgICAgICAgICAnZmFkZU91dCc6IHRoaXMuZmFkZU91dFxuXHQgICAgICAgIH0pLmNvbm5lY3QodGhpcy5vdXRwdXQpO1xuXHQgICAgICAgIC8vc2V0IHRoZSBsb29waW5nIHByb3BlcnRpZXNcblx0ICAgICAgICBpZiAoIXRoaXMuX2xvb3AgJiYgIXRoaXMuX3N5bmNlZCkge1xuXHQgICAgICAgICAgICAvL2lmIGl0J3Mgbm90IGxvb3BpbmcsIHNldCB0aGUgc3RhdGUgY2hhbmdlIGF0IHRoZSBlbmQgb2YgdGhlIHNhbXBsZVxuXHQgICAgICAgICAgICB0aGlzLl9zdGF0ZS5zZXRTdGF0ZUF0VGltZShUb25lLlN0YXRlLlN0b3BwZWQsIHN0YXJ0VGltZSArIGNvbXB1dGVkRHVyYXRpb24gLyB0aGlzLl9wbGF5YmFja1JhdGUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICAvL2FkZCBpdCB0byB0aGUgYXJyYXkgb2YgYWN0aXZlIHNvdXJjZXNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLnB1c2goc291cmNlKTtcblx0ICAgICAgICAvL3N0YXJ0IGl0XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvb3AgJiYgVG9uZS5pc1VuZGVmKGR1cmF0aW9uKSkge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RhcnQoc3RhcnRUaW1lLCBvZmZzZXQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHNvdXJjZS5zdGFydChzdGFydFRpbWUsIG9mZnNldCwgY29tcHV0ZWREdXJhdGlvbik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTdG9wIHBsYXliYWNrLlxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqICBAcGFyYW0gIHtUaW1lfSBbdGltZT1ub3ddXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9zdG9wID0gZnVuY3Rpb24gKHRpbWUpIHtcblx0ICAgICAgICB0aW1lID0gdGhpcy50b1NlY29uZHModGltZSk7XG5cdCAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuc3RvcCh0aW1lKTtcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2Uuc3RvcCh0aW1lKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIGFuZCB0aGVuIHJlc3RhcnQgdGhlIHBsYXllciBmcm9tIHRoZSBiZWdpbm5pbmcgKG9yIG9mZnNldClcblx0XHQgKiAgQHBhcmFtICB7VGltZX0gW3N0YXJ0VGltZT1ub3ddIFdoZW4gdGhlIHBsYXllciBzaG91bGQgc3RhcnQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWV9IFtvZmZzZXQ9MF0gVGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNhbXBsZVxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gc3RhcnQgYXQuXG5cdFx0ICogIEBwYXJhbSAge1RpbWU9fSBkdXJhdGlvbiBIb3cgbG9uZyB0aGUgc2FtcGxlIHNob3VsZCBwbGF5LiBJZiBubyBkdXJhdGlvblxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBnaXZlbiwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmdWxsIGxlbmd0aFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc2FtcGxlIChtaW51cyBhbnkgb2Zmc2V0KVxuXHRcdCAqICBAcmV0dXJucyB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24gKHRpbWUsIG9mZnNldCwgZHVyYXRpb24pIHtcblx0ICAgICAgICB0aGlzLl9zdG9wKHRpbWUpO1xuXHQgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUsIG9mZnNldCwgZHVyYXRpb24pO1xuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZWVrIHRvIGEgc3BlY2lmaWMgdGltZSBpbiB0aGUgcGxheWVyJ3MgYnVmZmVyLiBJZiB0aGVcblx0XHQgKiAgc291cmNlIGlzIG5vIGxvbmdlciBwbGF5aW5nIGF0IHRoYXQgdGltZSwgaXQgd2lsbCBzdG9wLlxuXHRcdCAqICBJZiB5b3Ugc2VlayB0byBhIHRpbWUgdGhhdFxuXHRcdCAqICBAcGFyYW0ge1RpbWV9IG9mZnNldCBUaGUgdGltZSB0byBzZWVrIHRvLlxuXHRcdCAqICBAcGFyYW0ge1RpbWU9fSB0aW1lIFRoZSB0aW1lIGZvciB0aGUgc2VlayBldmVudCB0byBvY2N1ci5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBzb3VyY2Uuc3RhcnQoMC4yKTtcblx0XHQgKiBzb3VyY2Uuc3RvcCgwLjQpO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLnNlZWsgPSBmdW5jdGlvbiAob2Zmc2V0LCB0aW1lKSB7XG5cdCAgICAgICAgdGltZSA9IHRoaXMudG9TZWNvbmRzKHRpbWUpO1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZSh0aW1lKSA9PT0gVG9uZS5TdGF0ZS5TdGFydGVkKSB7XG5cdCAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9TZWNvbmRzKG9mZnNldCk7XG5cdCAgICAgICAgICAgIC8vIGlmIGl0J3MgY3VycmVudGx5IHBsYXlpbmcsIHN0b3AgaXRcblx0ICAgICAgICAgICAgdGhpcy5fc3RvcCh0aW1lKTtcblx0ICAgICAgICAgICAgLy9yZXN0YXJ0IGl0IGF0IHRoZSBnaXZlbiB0aW1lXG5cdCAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRpbWUsIG9mZnNldCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBTZXQgdGhlIGxvb3Agc3RhcnQgYW5kIGVuZC4gV2lsbCBvbmx5IGxvb3AgaWYgbG9vcCBpc1xuXHRcdCAqICBzZXQgdG8gdHJ1ZS5cblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBsb29wU3RhcnQgVGhlIGxvb3AgZW5kIHRpbWVcblx0XHQgKiAgQHBhcmFtIHtUaW1lfSBsb29wRW5kIFRoZSBsb29wIGVuZCB0aW1lXG5cdFx0ICogIEByZXR1cm5zIHtUb25lLlBsYXllcn0gdGhpc1xuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIC8vbG9vcCAwLjEgc2Vjb25kcyBvZiB0aGUgZmlsZS5cblx0XHQgKiBwbGF5ZXIuc2V0TG9vcFBvaW50cygwLjIsIDAuMyk7XG5cdFx0ICogcGxheWVyLmxvb3AgPSB0cnVlO1xuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLnNldExvb3BQb2ludHMgPSBmdW5jdGlvbiAobG9vcFN0YXJ0LCBsb29wRW5kKSB7XG5cdCAgICAgICAgdGhpcy5sb29wU3RhcnQgPSBsb29wU3RhcnQ7XG5cdCAgICAgICAgdGhpcy5sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiBsb29wIGlzIHRydWUsIHRoZSBsb29wIHdpbGwgc3RhcnQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcFN0YXJ0XG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcFN0YXJ0Jywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9vcFN0YXJ0O1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcFN0YXJ0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2xvb3BTdGFydCA9IGxvb3BTdGFydDtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIGN1cnJlbnQgc291cmNlXG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2UubG9vcFN0YXJ0ID0gbG9vcFN0YXJ0O1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIElmIGxvb3AgaXMgdHJ1ZSwgdGhlIGxvb3Agd2lsbCBlbmQgYXQgdGhpcyBwb3NpdGlvbi5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgbG9vcEVuZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvb3BFbmQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb29wRW5kO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobG9vcEVuZCkge1xuXHQgICAgICAgICAgICB0aGlzLl9sb29wRW5kID0gbG9vcEVuZDtcblx0ICAgICAgICAgICAgLy9nZXQgdGhlIGN1cnJlbnQgc291cmNlXG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2UubG9vcEVuZCA9IGxvb3BFbmQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGF1ZGlvIGJ1ZmZlciBiZWxvbmdpbmcgdG8gdGhlIHBsYXllci5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXIjXG5cdFx0ICogQHR5cGUge1RvbmUuQnVmZmVyfVxuXHRcdCAqIEBuYW1lIGJ1ZmZlclxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2J1ZmZlcicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHQgICAgICAgICAgICB0aGlzLl9idWZmZXIuc2V0KGJ1ZmZlcik7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBJZiB0aGUgYnVmZmVyIHNob3VsZCBsb29wIG9uY2UgaXQncyBvdmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSBsb29wXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAnbG9vcCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvb3A7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsb29wKSB7XG5cdCAgICAgICAgICAgIC8vaWYgbm8gY2hhbmdlLCBkbyBub3RoaW5nXG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9sb29wID09PSBsb29wKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fbG9vcCA9IGxvb3A7XG5cdCAgICAgICAgICAgIHZhciBub3cgPSB0aGlzLm5vdygpO1xuXHQgICAgICAgICAgICBpZiAoIWxvb3ApIHtcblx0ICAgICAgICAgICAgICAgIC8vc3RvcCB0aGUgcGxheWJhY2sgb24gdGhlIG5leHQgY3ljbGVcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BBdE5leHRJdGVyYXRpb24obm93KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vcmVtb3ZlIHRoZSBuZXh0IHN0b3BFdmVudFxuXHQgICAgICAgICAgICAgICAgdmFyIHN0b3BFdmVudCA9IHRoaXMuX3N0YXRlLmdldE5leHRTdGF0ZShUb25lLlN0YXRlLlN0b3BwZWQsIG5vdyk7XG5cdCAgICAgICAgICAgICAgICBpZiAoc3RvcEV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmxvb3AgPSBsb29wO1xuXHQgICAgICAgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLmNhbmNlbChzdG9wRXZlbnQudGltZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUuY2FuY2VsKHN0b3BFdmVudC50aW1lKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIFNjaGVkdWxlcyBhIHN0b3AgZXZlbnQgYXQgdGhlIG5leHQgZnVsbCBpdGVyYXRpb24uIFVzZWRcblx0XHQgKiAgZm9yIHNjaGVkdWxpbmcgc3RvcCB3aGVuIHRoZSBsb29wIHN0YXRlIG9yIHBsYXliYWNrUmF0ZSBjaGFuZ2VzXG5cdFx0ICogIEBwYXJhbSAge051bWJlcn0gIG5vdyAgVGhlIGN1cnJlbnQgdGltZVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXIucHJvdG90eXBlLl9zdG9wQXROZXh0SXRlcmF0aW9uID0gZnVuY3Rpb24gKG5vdykge1xuXHQgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShub3cpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQpIHtcblx0ICAgICAgICAgICAgdmFyIG5leHRTdG9wID0gdGhpcy5fc3RhdGUuZ2V0TmV4dFN0YXRlKFRvbmUuU3RhdGUuU3RvcHBlZCwgbm93KTtcblx0ICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fZWxhcHNlZFRpbWUuZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbnMgPSBNYXRoLm1heChNYXRoLmNlaWwocG9zaXRpb24gLyB0aGlzLmJ1ZmZlci5kdXJhdGlvbiksIDEpO1xuXHQgICAgICAgICAgICB2YXIgc3RvcFRpbWUgPSB0aGlzLl9lbGFwc2VkVGltZS5nZXRUaW1lT2ZUaWNrKGl0ZXJhdGlvbnMgKiB0aGlzLmJ1ZmZlci5kdXJhdGlvbiwgbmV4dFN0b3AgPyBuZXh0U3RvcC50aW1lIC0gdGhpcy5zYW1wbGVUaW1lIDogSW5maW5pdHkpO1xuXHQgICAgICAgICAgICB0aGlzLnN0b3Aoc3RvcFRpbWUpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBUaGUgcGxheWJhY2sgc3BlZWQuIDEgaXMgbm9ybWFsIHNwZWVkLiBUaGlzIGlzIG5vdCBhIHNpZ25hbCBiZWNhdXNlXG5cdFx0ICogU2FmYXJpIGFuZCBpT1MgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgcGxheWJhY2tSYXRlIGFzIGEgc2lnbmFsLlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBuYW1lIHBsYXliYWNrUmF0ZVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ3BsYXliYWNrUmF0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKHJhdGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gcmF0ZTtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZShyYXRlLCBub3cpO1xuXHQgICAgICAgICAgICAvL2lmIGl0J3Mgbm90IGxvb3Bpbmdcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLl9sb29wKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9zdG9wQXROZXh0SXRlcmF0aW9uKG5vdyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy9zZXQgYWxsIHRoZSBzb3VyY2VzXG5cdCAgICAgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG5cdCAgICAgICAgICAgICAgICBzb3VyY2UucGxheWJhY2tSYXRlLnNldFZhbHVlQXRUaW1lKHJhdGUsIG5vdyk7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gb2YgdGhlIGJ1ZmZlci4gXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQG5hbWUgcG9zaXRpb25cblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllci5wcm90b3R5cGUsICdwb3NpdGlvbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIG5vdyA9IHRoaXMubm93KCk7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZS5nZXRWYWx1ZUF0VGltZShub3cpID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQgJiYgdGhpcy5sb2FkZWQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IHRoaXMuYnVmZmVyLmR1cmF0aW9uO1xuXHQgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fZWxhcHNlZFRpbWUuZ2V0VGlja3NBdFRpbWUobm93KTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiAlIGR1cmF0aW9uO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFRoZSBkaXJlY3Rpb24gdGhlIGJ1ZmZlciBzaG91bGQgcGxheSBpblxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlBsYXllciNcblx0XHQgKiBAdHlwZSB7Qm9vbGVhbn1cblx0XHQgKiBAbmFtZSByZXZlcnNlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXIucHJvdG90eXBlLCAncmV2ZXJzZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5yZXZlcnNlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAocmV2KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2J1ZmZlci5yZXZlcnNlID0gcmV2O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogSWYgYWxsIHRoZSBidWZmZXIgaXMgbG9hZGVkXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuUGxheWVyI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVyLnByb3RvdHlwZSwgJ2xvYWRlZCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5sb2FkZWQ7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiAgRGlzcG9zZSBhbmQgZGlzY29ubmVjdC5cblx0XHQgKiAgQHJldHVybiB7VG9uZS5QbGF5ZXJ9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVyLnByb3RvdHlwZS5kaXNwb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vZGlzY29ubmVjdCBhbGwgb2YgdGhlIHBsYXllcnNcblx0ICAgICAgICB0aGlzLl9hY3RpdmVTb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuXHQgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHRoaXMuX2FjdGl2ZVNvdXJjZXMgPSBudWxsO1xuXHQgICAgICAgIFRvbmUuU291cmNlLnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgdGhpcy5fYnVmZmVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9idWZmZXIgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgcmV0dXJuIFRvbmUuUGxheWVyO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuUGxheWVycyBjb21iaW5lcyBtdWx0aXBsZSBbVG9uZS5QbGF5ZXJdKFBsYXllcikgb2JqZWN0cy5cblx0XHQgKlxuXHRcdCAqICBAY29uc3RydWN0b3Jcblx0XHQgKiAgQGV4dGVuZHMge1RvbmUuQXVkaW9Ob2RlfVxuXHRcdCAqICBAcGFyYW0ge09iamVjdH0gdXJscyBBbiBvYmplY3QgbWFwcGluZyBhIG5hbWUgdG8gYSB1cmwuXG5cdFx0ICogIEBwYXJhbSB7ZnVuY3Rpb249fSBvbmxvYWQgVGhlIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIGFsbCBidWZmZXJzIGFyZSBsb2FkZWQuXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMgPSBmdW5jdGlvbiAodXJscykge1xuXHQgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBUb25lLmRlZmF1bHRzKGFyZ3MsIFsnb25sb2FkJ10sIFRvbmUuUGxheWVycyk7XG5cdCAgICAgICAgVG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogIFRoZSBvdXRwdXQgdm9sdW1lIG5vZGVcblx0XHRcdCAqICBAdHlwZSAge1RvbmUuVm9sdW1lfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSB0aGlzLm91dHB1dCA9IG5ldyBUb25lLlZvbHVtZShvcHRpb25zLnZvbHVtZSk7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBUaGUgdm9sdW1lIG9mIHRoZSBvdXRwdXQgaW4gZGVjaWJlbHMuXG5cdFx0XHQgKiBAdHlwZSB7RGVjaWJlbHN9XG5cdFx0XHQgKiBAc2lnbmFsXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogc291cmNlLnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICAvL21ha2UgdGhlIG91dHB1dCBleHBsaWNpdGx5IHN0ZXJlb1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5vdXRwdXQub3V0cHV0LmNoYW5uZWxDb3VudCA9IDI7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLm91dHB1dC5vdXRwdXQuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XG5cdCAgICAgICAgLy9tdXRlIGluaXRpYWxseVxuXHQgICAgICAgIHRoaXMubXV0ZSA9IG9wdGlvbnMubXV0ZTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBjb250YWluZXIgb2YgYWxsIG9mIHRoZSBwbGF5ZXJzXG5cdFx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnMgPSB7fTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqIFRoZSBsb2FkaW5nIGNvdW50XG5cdFx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2xvYWRpbmdDb3VudCA9IDA7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiBwcml2YXRlIGhvbGRlciBvZiB0aGUgZmFkZUluIHRpbWVcblx0XHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdFx0ICogQHByaXZhdGVcblx0XHRcdCAqL1xuXHQgICAgICAgIHRoaXMuX2ZhZGVJbiA9IG9wdGlvbnMuZmFkZUluO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogcHJpdmF0ZSBob2xkZXIgb2YgdGhlIGZhZGVPdXQgdGltZVxuXHRcdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0XHQgKiBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZmFkZU91dCA9IG9wdGlvbnMuZmFkZU91dDtcblx0ICAgICAgICAvL2FkZCBhbGwgb2YgdGhlIHBsYXllcnNcblx0ICAgICAgICBmb3IgKHZhciBuYW1lIGluIHVybHMpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50Kys7XG5cdCAgICAgICAgICAgIHRoaXMuYWRkKG5hbWUsIHVybHNbbmFtZV0sIHRoaXMuX2J1ZmZlckxvYWRlZC5iaW5kKHRoaXMsIG9wdGlvbnMub25sb2FkKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIFRvbmUuZXh0ZW5kKFRvbmUuUGxheWVycywgVG9uZS5BdWRpb05vZGUpO1xuXHQgICAgLyoqXG5cdFx0ICogVGhlIGRlZmF1bHQgdmFsdWVzXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5kZWZhdWx0cyA9IHtcblx0ICAgICAgICAndm9sdW1lJzogMCxcblx0ICAgICAgICAnbXV0ZSc6IGZhbHNlLFxuXHQgICAgICAgICdvbmxvYWQnOiBUb25lLm5vT3AsXG5cdCAgICAgICAgJ2ZhZGVJbic6IDAsXG5cdCAgICAgICAgJ2ZhZGVPdXQnOiAwXG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEEgYnVmZmVyIHdhcyBsb2FkZWQuIGRlY3JlbWVudCB0aGUgY291bnRlci5cblx0XHQgKiAgQHBhcmFtICB7RnVuY3Rpb259ICBjYWxsYmFja1xuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5fYnVmZmVyTG9hZGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgdGhpcy5fbG9hZGluZ0NvdW50LS07XG5cdCAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmdDb3VudCA9PT0gMCAmJiBjYWxsYmFjaykge1xuXHQgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlNvdXJjZSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHNvdXJjZS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnbXV0ZScsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZvbHVtZS5tdXRlO1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgc2V0OiBmdW5jdGlvbiAobXV0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl92b2x1bWUubXV0ZSA9IG11dGU7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZmFkZUluIHRpbWUgb2YgdGhlIGFtcGxpdHVkZSBlbnZlbG9wZS5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5Tb3VyY2UjXG5cdFx0ICogQHR5cGUge1RpbWV9XG5cdFx0ICogQG5hbWUgZmFkZUluXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5QbGF5ZXJzLnByb3RvdHlwZSwgJ2ZhZGVJbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZhZGVJbjtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHNldDogZnVuY3Rpb24gKGZhZGVJbikge1xuXHQgICAgICAgICAgICB0aGlzLl9mYWRlSW4gPSBmYWRlSW47XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgcGxheWVyLmZhZGVJbiA9IGZhZGVJbjtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgZmFkZU91dCB0aW1lIG9mIHRoZSBhbXBsaXR1ZGUgZW52ZWxvcGUuXG5cdFx0ICogQG1lbWJlck9mIFRvbmUuU291cmNlI1xuXHRcdCAqIEB0eXBlIHtUaW1lfVxuXHRcdCAqIEBuYW1lIGZhZGVPdXRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnZmFkZU91dCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZhZGVPdXQ7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChmYWRlT3V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZhZGVPdXQgPSBmYWRlT3V0O1xuXHQgICAgICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgICAgIHBsYXllci5mYWRlT3V0ID0gZmFkZU91dDtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBUaGUgc3RhdGUgb2YgdGhlIHBsYXllcnMgb2JqZWN0LiBSZXR1cm5zIFwic3RhcnRlZFwiIGlmIGFueSBvZiB0aGUgcGxheWVycyBhcmUgcGxheWluZy5cblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXJzI1xuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQG5hbWUgc3RhdGVcblx0XHQgKiBAcmVhZE9ubHlcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlBsYXllcnMucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBwbGF5aW5nID0gZmFsc2U7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgcGxheWluZyA9IHBsYXlpbmcgfHwgcGxheWVyLnN0YXRlID09PSBUb25lLlN0YXRlLlN0YXJ0ZWQ7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICByZXR1cm4gcGxheWluZyA/IFRvbmUuU3RhdGUuU3RhcnRlZCA6IFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcnVlIGlmIHRoZSBidWZmZXJzIG9iamVjdCBoYXMgYSBidWZmZXIgYnkgdGhhdCBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd8TnVtYmVyfSAgbmFtZSAgVGhlIGtleSBvciBpbmRleCBvZiB0aGVcblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5cblx0XHQgKiAgQHJldHVybiAge0Jvb2xlYW59XG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcnMuaGFzT3duUHJvcGVydHkobmFtZSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIEdldCBhIHBsYXllciBieSBuYW1lLlxuXHRcdCAqICBAcGFyYW0gIHtTdHJpbmd9ICBuYW1lICBUaGUgcGxheWVycyBuYW1lIGFzIGRlZmluZWQgaW5cblx0XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnN0cnVjdG9yIG9iamVjdCBvciBgYWRkYCBtZXRob2QuXG5cdFx0ICogIEByZXR1cm4gIHtUb25lLlBsYXllcn1cblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgICAgICBpZiAodGhpcy5oYXMobmFtZSkpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcnNbbmFtZV07XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb25lLlBsYXllcnM6IG5vIHBsYXllciBuYW1lZCAnICsgbmFtZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqIEl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIHBsYXllcnNcblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcblx0XHQgKiBAcmV0dXJuIHtUb25lLlBsYXllcnN9ICAgICAgICAgICAgdGhpc1xuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLlBsYXllcnMucHJvdG90eXBlLl9mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgZm9yICh2YXIgcGxheWVyTmFtZSBpbiB0aGlzLl9wbGF5ZXJzKSB7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX3BsYXllcnNbcGxheWVyTmFtZV0sIHBsYXllck5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBJZiBhbGwgdGhlIGJ1ZmZlcnMgYXJlIGxvYWRlZCBvciBub3Rcblx0XHQgKiBAbWVtYmVyT2YgVG9uZS5QbGF5ZXJzI1xuXHRcdCAqIEB0eXBlIHtCb29sZWFufVxuXHRcdCAqIEBuYW1lIGxvYWRlZFxuXHRcdCAqIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuUGxheWVycy5wcm90b3R5cGUsICdsb2FkZWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBpc0xvYWRlZCA9IHRydWU7XG5cdCAgICAgICAgICAgIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24gKHBsYXllcikge1xuXHQgICAgICAgICAgICAgICAgaXNMb2FkZWQgPSBpc0xvYWRlZCAmJiBwbGF5ZXIubG9hZGVkO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGVkO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogIEFkZCBhIHBsYXllciBieSBuYW1lIGFuZCB1cmwgdG8gdGhlIFBsYXllcnNcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfSAgICBuYW1lICAgICAgQSB1bmlxdWUgbmFtZSB0byBnaXZlIHRoZSBwbGF5ZXJcblx0XHQgKiAgQHBhcmFtICB7U3RyaW5nfFRvbmUuQnVmZmVyfEF1ZGlvYnVmZmVyfSAgdXJsICBFaXRoZXIgdGhlIHVybCBvZiB0aGUgYnVmZXIsXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhZGRlZFxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cdFx0ICogIEBwYXJhbSAge0Z1bmN0aW9uPX0gIGNhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gaW52b2tlXG5cdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSB1cmwgaXMgbG9hZGVkLlxuXHRcdCAqL1xuXHQgICAgVG9uZS5QbGF5ZXJzLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobmFtZSwgdXJsLCBjYWxsYmFjaykge1xuXHQgICAgICAgIHRoaXMuX3BsYXllcnNbbmFtZV0gPSBuZXcgVG9uZS5QbGF5ZXIodXJsLCBjYWxsYmFjaykuY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgdGhpcy5fcGxheWVyc1tuYW1lXS5mYWRlSW4gPSB0aGlzLl9mYWRlSW47XG5cdCAgICAgICAgdGhpcy5fcGxheWVyc1tuYW1lXS5mYWRlT3V0ID0gdGhpcy5fZmFkZU91dDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiBTdG9wIGFsbCBvZiB0aGUgcGxheWVycyBhdCB0aGUgZ2l2ZW4gdGltZVxuXHRcdCAqIEBwYXJhbSB7VGltZX0gdGltZSBUaGUgdGltZSB0byBzdG9wIGFsbCBvZiB0aGUgcGxheWVycy5cblx0XHQgKiBAcmV0dXJuIHtUb25lLlBsYXllcnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuc3RvcEFsbCA9IGZ1bmN0aW9uICh0aW1lKSB7XG5cdCAgICAgICAgdGhpcy5fZm9yRWFjaChmdW5jdGlvbiAocGxheWVyKSB7XG5cdCAgICAgICAgICAgIHBsYXllci5zdG9wKHRpbWUpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBEaXNwb3NlIGFuZCBkaXNjb25uZWN0LlxuXHRcdCAqICBAcmV0dXJuIHtUb25lLlBsYXllcnN9IHRoaXNcblx0XHQgKi9cblx0ICAgIFRvbmUuUGxheWVycy5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuX3ZvbHVtZS5kaXNwb3NlKCk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMub3V0cHV0ID0gbnVsbDtcblx0ICAgICAgICB0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uIChwbGF5ZXIpIHtcblx0ICAgICAgICAgICAgcGxheWVyLmRpc3Bvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLl9wbGF5ZXJzID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5QbGF5ZXJzO1xuXHR9KTtcblx0TW9kdWxlKGZ1bmN0aW9uIChUb25lKSB7XG5cdCAgICBcblx0ICAgIC8qKlxuXHRcdCAqICBAY2xhc3MgIFRvbmUuVXNlck1lZGlhIHVzZXMgTWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSB0byBvcGVuIHVwXG5cdFx0ICogICAgICAgICAgYW5kIGV4dGVybmFsIG1pY3JvcGhvbmUgb3IgYXVkaW8gaW5wdXQuIENoZWNrXG5cdFx0ICogICAgICAgICAgW01lZGlhRGV2aWNlcyBBUEkgU3VwcG9ydF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL01lZGlhRGV2aWNlcy9nZXRVc2VyTWVkaWEpXG5cdFx0ICogICAgICAgICAgdG8gc2VlIHdoaWNoIGJyb3dzZXJzIGFyZSBzdXBwb3J0ZWQuIEFjY2VzcyB0byBhbiBleHRlcm5hbCBpbnB1dFxuXHRcdCAqICAgICAgICAgIGlzIGxpbWl0ZWQgdG8gc2VjdXJlIChIVFRQUykgY29ubmVjdGlvbnMuXG5cdFx0ICpcblx0XHQgKiAgQGNvbnN0cnVjdG9yXG5cdFx0ICogIEBleHRlbmRzIHtUb25lLkF1ZGlvTm9kZX1cblx0XHQgKiAgQHBhcmFtIHtEZWNpYmVscz19IHZvbHVtZSBUaGUgbGV2ZWwgb2YgdGhlIGlucHV0XG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogLy9saXN0IHRoZSBpbnB1dHMgYW5kIG9wZW4gdGhlIHRoaXJkIG9uZVxuXHRcdCAqIHZhciBtb3R1ID0gbmV3IFRvbmUuVXNlck1lZGlhKCk7XG5cdFx0ICpcblx0XHQgKiAvL29wZW5pbmcgdGhlIGlucHV0IGFza3MgdGhlIHVzZXIgdG8gYWN0aXZhdGUgdGhlaXIgbWljXG5cdFx0ICogbW90dS5vcGVuKCkudGhlbihmdW5jdGlvbigpe1xuXHRcdCAqIFx0Ly9wcm9taXNlIHJlc29sdmVzIHdoZW4gaW5wdXQgaXMgYXZhaWxhYmxlXG5cdFx0ICogfSk7XG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICB2YXIgb3B0aW9ucyA9IFRvbmUuZGVmYXVsdHMoYXJndW1lbnRzLCBbJ3ZvbHVtZSddLCBUb25lLlVzZXJNZWRpYSk7XG5cdCAgICAgICAgVG9uZS5BdWRpb05vZGUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgTWVkaWFTdHJlYW1Ob2RlXG5cdFx0XHQgKiAgQHR5cGUge01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlfVxuXHRcdFx0ICogIEBwcml2YXRlXG5cdFx0XHQgKi9cblx0ICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgLyoqXG5cdFx0XHQgKiAgVGhlIG1lZGlhIHN0cmVhbSBjcmVhdGVkIGJ5IGdldFVzZXJNZWRpYS5cblx0XHRcdCAqICBAdHlwZSB7TG9jYWxNZWRpYVN0cmVhbX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fc3RyZWFtID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3BlbiBkZXZpY2Vcblx0XHRcdCAqICBAdHlwZSAge01lZGlhRGV2aWNlSW5mb31cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fZGV2aWNlID0gbnVsbDtcblx0ICAgICAgICAvKipcblx0XHRcdCAqICBUaGUgb3V0cHV0IHZvbHVtZSBub2RlXG5cdFx0XHQgKiAgQHR5cGUgIHtUb25lLlZvbHVtZX1cblx0XHRcdCAqICBAcHJpdmF0ZVxuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy5fdm9sdW1lID0gdGhpcy5vdXRwdXQgPSBuZXcgVG9uZS5Wb2x1bWUob3B0aW9ucy52b2x1bWUpO1xuXHQgICAgICAgIC8qKlxuXHRcdFx0ICogVGhlIHZvbHVtZSBvZiB0aGUgb3V0cHV0IGluIGRlY2liZWxzLlxuXHRcdFx0ICogQHR5cGUge0RlY2liZWxzfVxuXHRcdFx0ICogQHNpZ25hbFxuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIGlucHV0LnZvbHVtZS52YWx1ZSA9IC02O1xuXHRcdFx0ICovXG5cdCAgICAgICAgdGhpcy52b2x1bWUgPSB0aGlzLl92b2x1bWUudm9sdW1lO1xuXHQgICAgICAgIHRoaXMuX3JlYWRPbmx5KCd2b2x1bWUnKTtcblx0ICAgICAgICB0aGlzLm11dGUgPSBvcHRpb25zLm11dGU7XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5Vc2VyTWVkaWEsIFRvbmUuQXVkaW9Ob2RlKTtcblx0ICAgIC8qKlxuXHRcdCAqIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnNcblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqL1xuXHQgICAgVG9uZS5Vc2VyTWVkaWEuZGVmYXVsdHMgPSB7XG5cdCAgICAgICAgJ3ZvbHVtZSc6IDAsXG5cdCAgICAgICAgJ211dGUnOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBPcGVuIHRoZSBtZWRpYSBzdHJlYW0uIElmIGEgc3RyaW5nIGlzIHBhc3NlZCBpbiwgaXQgaXMgYXNzdW1lZFxuXHRcdCAqICB0byBiZSB0aGUgbGFiZWwgb3IgaWQgb2YgdGhlIHN0cmVhbSwgaWYgYSBudW1iZXIgaXMgcGFzc2VkIGluLFxuXHRcdCAqICBpdCBpcyB0aGUgaW5wdXQgbnVtYmVyIG9mIHRoZSBzdHJlYW0uXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9IFtsYWJlbE9ySWQ9XCJkZWZhdWx0XCJdIFRoZSBsYWJlbCBvciBpZCBvZiB0aGUgYXVkaW8gaW5wdXQgbWVkaWEgZGV2aWNlLlxuXHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2l0aCBubyBhcmd1bWVudCwgdGhlIGRlZmF1bHQgc3RyZWFtIGlzIG9wZW5lZC5cblx0XHQgKiAgQHJldHVybiB7UHJvbWlzZX0gVGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgc3RyZWFtIGlzIG9wZW4uXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uIChsYWJlbE9ySWQpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5Vc2VyTWVkaWEuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oZnVuY3Rpb24gKGRldmljZXMpIHtcblx0ICAgICAgICAgICAgdmFyIGRldmljZTtcblx0ICAgICAgICAgICAgaWYgKFRvbmUuaXNOdW1iZXIobGFiZWxPcklkKSkge1xuXHQgICAgICAgICAgICAgICAgZGV2aWNlID0gZGV2aWNlc1tsYWJlbE9ySWRdO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgZGV2aWNlID0gZGV2aWNlcy5maW5kKGZ1bmN0aW9uIChkZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlLmxhYmVsID09PSBsYWJlbE9ySWQgfHwgZGV2aWNlLmRldmljZUlkID09PSBsYWJlbE9ySWQ7XG5cdCAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIC8vZGlkbid0IGZpbmQgYSBtYXRjaGluZyBkZXZpY2Vcblx0ICAgICAgICAgICAgICAgIGlmICghZGV2aWNlICYmIGRldmljZXMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGRldmljZSA9IGRldmljZXNbMF07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFkZXZpY2UgJiYgVG9uZS5pc0RlZmluZWQobGFiZWxPcklkKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVG9uZS5Vc2VyTWVkaWE6IG5vIG1hdGNoaW5nIGRldmljZTogJyArIGxhYmVsT3JJZCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5fZGV2aWNlID0gZGV2aWNlO1xuXHQgICAgICAgICAgICAvL2RvIGdldFVzZXJNZWRpYVxuXHQgICAgICAgICAgICB2YXIgY29uc3RyYWludHMgPSB7XG5cdCAgICAgICAgICAgICAgICBhdWRpbzoge1xuXHQgICAgICAgICAgICAgICAgICAgICdlY2hvQ2FuY2VsbGF0aW9uJzogZmFsc2UsXG5cdCAgICAgICAgICAgICAgICAgICAgJ3NhbXBsZVJhdGUnOiB0aGlzLmNvbnRleHQuc2FtcGxlUmF0ZVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICBjb25zdHJhaW50cy5hdWRpby5kZXZpY2VJZCA9IGRldmljZS5kZXZpY2VJZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICByZXR1cm4gbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoY29uc3RyYWludHMpLnRoZW4oZnVuY3Rpb24gKHN0cmVhbSkge1xuXHQgICAgICAgICAgICAgICAgLy9zdGFydCBhIG5ldyBzb3VyY2Ugb25seSBpZiB0aGUgcHJldmlvdXMgb25lIGlzIGNsb3NlZFxuXHQgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9zdHJlYW0pIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG5cdCAgICAgICAgICAgICAgICAgICAgLy9XcmFwIGEgTWVkaWFTdHJlYW1Tb3VyY2VOb2RlIGFyb3VuZCB0aGUgbGl2ZSBpbnB1dCBzdHJlYW0uXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0gPSB0aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2Uoc3RyZWFtKTtcblx0ICAgICAgICAgICAgICAgICAgICAvL0Nvbm5lY3QgdGhlIE1lZGlhU3RyZWFtU291cmNlTm9kZSB0byBhIGdhdGUgZ2FpbiBub2RlXG5cdCAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0uY29ubmVjdCh0aGlzLm91dHB1dCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblx0ICAgICAgICB9LmJpbmQodGhpcykpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBDbG9zZSB0aGUgbWVkaWEgc3RyZWFtXG5cdFx0ICogIEByZXR1cm4ge1RvbmUuVXNlck1lZGlhfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuX3N0cmVhbSkge1xuXHQgICAgICAgICAgICB0aGlzLl9zdHJlYW0uZ2V0QXVkaW9UcmFja3MoKS5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuXHQgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgdGhpcy5fc3RyZWFtID0gbnVsbDtcblx0ICAgICAgICAgICAgLy9yZW1vdmUgdGhlIG9sZCBtZWRpYSBzdHJlYW1cblx0ICAgICAgICAgICAgdGhpcy5fbWVkaWFTdHJlYW0uZGlzY29ubmVjdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9tZWRpYVN0cmVhbSA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuX2RldmljZSA9IG51bGw7XG5cdCAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggdGhlIGxpc3Qgb2YgYXVkaW8gaW5wdXQgZGV2aWNlcyBhdmFpbGFibGUuXG5cdFx0ICogIEByZXR1cm4ge1Byb21pc2V9IFRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgZGV2aWNlc1xuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEBleGFtcGxlXG5cdFx0ICogVG9uZS5Vc2VyTWVkaWEuZW51bWVyYXRlRGV2aWNlcygpLnRoZW4oZnVuY3Rpb24oZGV2aWNlcyl7XG5cdFx0ICogXHRjb25zb2xlLmxvZyhkZXZpY2VzKVxuXHRcdCAqIH0pXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5lbnVtZXJhdGVEZXZpY2VzID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGZ1bmN0aW9uIChkZXZpY2VzKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBkZXZpY2VzLmZpbHRlcihmdW5jdGlvbiAoZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlLmtpbmQgPT09ICdhdWRpb2lucHV0Jztcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBzb3VyY2UsIFwic3RhcnRlZFwiIHdoZW4gdGhlIG1pY3JvcGhvbmUgaXMgb3BlblxuXHRcdCAqICBhbmQgXCJzdG9wcGVkXCIgd2hlbiB0aGUgbWljIGlzIGNsb3NlZC5cblx0XHQgKiAgQHR5cGUge1RvbmUuU3RhdGV9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIHN0YXRlXG5cdFx0ICovXG5cdCAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVG9uZS5Vc2VyTWVkaWEucHJvdG90eXBlLCAnc3RhdGUnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW0gJiYgdGhpcy5fc3RyZWFtLmFjdGl2ZSA/IFRvbmUuU3RhdGUuU3RhcnRlZCA6IFRvbmUuU3RhdGUuU3RvcHBlZDtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIFx0UmV0dXJucyBhbiBpZGVudGlmaWVyIGZvciB0aGUgcmVwcmVzZW50ZWQgZGV2aWNlIHRoYXQgaXNcblx0XHQgKiBcdHBlcnNpc3RlZCBhY3Jvc3Mgc2Vzc2lvbnMuIEl0IGlzIHVuLWd1ZXNzYWJsZSBieSBvdGhlciBhcHBsaWNhdGlvbnMgYW5kXG5cdFx0ICogXHR1bmlxdWUgdG8gdGhlIG9yaWdpbiBvZiB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4gSXQgaXMgcmVzZXQgd2hlbiB0aGVcblx0XHQgKiBcdHVzZXIgY2xlYXJzIGNvb2tpZXMgKGZvciBQcml2YXRlIEJyb3dzaW5nLCBhIGRpZmZlcmVudCBpZGVudGlmaWVyIGlzXG5cdFx0ICogXHR1c2VkIHRoYXQgaXMgbm90IHBlcnNpc3RlZCBhY3Jvc3Mgc2Vzc2lvbnMpLiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZVxuXHRcdCAqIFx0ZGV2aWNlIGlzIG5vdCBvcGVuLlxuXHRcdCAqICBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqICBAcmVhZE9ubHlcblx0XHQgKiAgQG1lbWJlck9mIFRvbmUuVXNlck1lZGlhI1xuXHRcdCAqICBAbmFtZSBkZXZpY2VJZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ2RldmljZUlkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlLmRldmljZUlkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKipcblx0XHQgKiBcdFJldHVybnMgYSBncm91cCBpZGVudGlmaWVyLiBUd28gZGV2aWNlcyBoYXZlIHRoZVxuXHRcdCAqIFx0c2FtZSBncm91cCBpZGVudGlmaWVyIGlmIHRoZXkgYmVsb25nIHRvIHRoZSBzYW1lIHBoeXNpY2FsIGRldmljZS5cblx0XHQgKiBcdFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlIGRldmljZSBpcyBub3Qgb3Blbi5cblx0XHQgKiAgQHR5cGUge1N0cmluZ31cblx0XHQgKiAgQHJlYWRPbmx5XG5cdFx0ICogIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiAgQG5hbWUgZ3JvdXBJZFxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLnByb3RvdHlwZSwgJ2dyb3VwSWQnLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2UpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2UuZ3JvdXBJZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogXHRSZXR1cm5zIGEgbGFiZWwgZGVzY3JpYmluZyB0aGlzIGRldmljZSAoZm9yIGV4YW1wbGUgXCJCdWlsdC1pbiBNaWNyb3Bob25lXCIpLlxuXHRcdCAqIFx0UmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgZGV2aWNlIGlzIG5vdCBvcGVuIG9yIGxhYmVsIGlzIG5vdCBhdmFpbGFibGVcblx0XHQgKiBcdGJlY2F1c2Ugb2YgcGVybWlzc2lvbnMuXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIGdyb3VwSWRcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdsYWJlbCcsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RldmljZS5sYWJlbDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgLyoqXG5cdFx0ICogTXV0ZSB0aGUgb3V0cHV0LlxuXHRcdCAqIEBtZW1iZXJPZiBUb25lLlVzZXJNZWRpYSNcblx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHQgKiBAbmFtZSBtdXRlXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiAvL211dGUgdGhlIG91dHB1dFxuXHRcdCAqIHVzZXJNZWRpYS5tdXRlID0gdHJ1ZTtcblx0XHQgKi9cblx0ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUsICdtdXRlJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5fdm9sdW1lLm11dGU7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBzZXQ6IGZ1bmN0aW9uIChtdXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX3ZvbHVtZS5tdXRlID0gbXV0ZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIC8qKlxuXHRcdCAqIENsZWFuIHVwLlxuXHRcdCAqIEByZXR1cm4ge1RvbmUuVXNlck1lZGlhfSB0aGlzXG5cdFx0ICovXG5cdCAgICBUb25lLlVzZXJNZWRpYS5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBUb25lLkF1ZGlvTm9kZS5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgIHRoaXMuY2xvc2UoKTtcblx0ICAgICAgICB0aGlzLl93cml0YWJsZSgndm9sdW1lJyk7XG5cdCAgICAgICAgdGhpcy5fdm9sdW1lLmRpc3Bvc2UoKTtcblx0ICAgICAgICB0aGlzLl92b2x1bWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMudm9sdW1lID0gbnVsbDtcblx0ICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgSWYgZ2V0VXNlck1lZGlhIGlzIHN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci5cblx0XHQgKiAgQHR5cGUgIHtCb29sZWFufVxuXHRcdCAqICBAbWVtYmVyT2YgVG9uZS5Vc2VyTWVkaWEjXG5cdFx0ICogIEBuYW1lIHN1cHBvcnRlZFxuXHRcdCAqICBAc3RhdGljXG5cdFx0ICogIEByZWFkT25seVxuXHRcdCAqL1xuXHQgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvbmUuVXNlck1lZGlhLCAnc3VwcG9ydGVkJywge1xuXHQgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gVG9uZS5pc0RlZmluZWQobmF2aWdhdG9yLm1lZGlhRGV2aWNlcykgJiYgVG9uZS5pc0Z1bmN0aW9uKG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBUb25lLlVzZXJNZWRpYTtcblx0fSk7XG5cdE1vZHVsZShmdW5jdGlvbiAoVG9uZSkge1xuXHQgICAgLyoqXG5cdFx0ICogIEBjbGFzcyBUb25lLk1pZGkgaXMgYSBwcmltaXRpdmUgdHlwZSBmb3IgZW5jb2RpbmcgVGltZSB2YWx1ZXMuXG5cdFx0ICogICAgICAgICBUb25lLk1pZGkgY2FuIGJlIGNvbnN0cnVjdGVkIHdpdGggb3Igd2l0aG91dCB0aGUgYG5ld2Aga2V5d29yZC4gVG9uZS5NaWRpIGNhbiBiZSBwYXNzZWRcblx0XHQgKiAgICAgICAgIGludG8gdGhlIHBhcmFtZXRlciBvZiBhbnkgbWV0aG9kIHdoaWNoIHRha2VzIHRpbWUgYXMgYW4gYXJndW1lbnQuXG5cdFx0ICogIEBjb25zdHJ1Y3RvclxuXHRcdCAqICBAZXh0ZW5kcyB7VG9uZS5GcmVxdWVuY3l9XG5cdFx0ICogIEBwYXJhbSAge1N0cmluZ3xOdW1iZXJ9ICB2YWwgICAgVGhlIHRpbWUgdmFsdWUuXG5cdFx0ICogIEBwYXJhbSAge1N0cmluZz19ICB1bml0cyAgVGhlIHVuaXRzIG9mIHRoZSB2YWx1ZS5cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiB2YXIgdCA9IFRvbmUuTWlkaShcIjRuXCIpOy8vYSBxdWFydGVyIG5vdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaSA9IGZ1bmN0aW9uICh2YWwsIHVuaXRzKSB7XG5cdCAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBUb25lLk1pZGkpIHtcblx0ICAgICAgICAgICAgVG9uZS5GcmVxdWVuY3kuY2FsbCh0aGlzLCB2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRvbmUuTWlkaSh2YWwsIHVuaXRzKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXHQgICAgVG9uZS5leHRlbmQoVG9uZS5NaWRpLCBUb25lLkZyZXF1ZW5jeSk7XG5cdCAgICAvKipcblx0XHQgKiAgVGhlIGRlZmF1bHQgdW5pdHMgaWYgbm9uZSBhcmUgZ2l2ZW4uXG5cdFx0ICogIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9kZWZhdWx0VW5pdHMgPSAnbWlkaSc7XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBmcmVxdWVuY3kgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtGcmVxdWVuY3l9IGZyZXFcblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX2ZyZXF1ZW5jeVRvVW5pdHMgPSBmdW5jdGlvbiAoZnJlcSkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fZnJlcXVlbmN5VG9Vbml0cy5jYWxsKHRoaXMsIGZyZXEpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB0aWNrIGluIHRoZSBjdXJyZW50IHRpbWUgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtUaWNrc30gdGlja3Ncblx0XHQgKiAgQHJldHVybiAge051bWJlcn1cblx0XHQgKiAgQHByaXZhdGVcblx0XHQgKi9cblx0ICAgIFRvbmUuTWlkaS5wcm90b3R5cGUuX3RpY2tzVG9Vbml0cyA9IGZ1bmN0aW9uICh0aWNrcykge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fdGlja3NUb1VuaXRzLmNhbGwodGhpcywgdGlja3MpKTtcblx0ICAgIH07XG5cdCAgICAvKipcblx0XHQgKiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYmVhdHMgaW4gdGhlIGN1cnJlbnQgdW5pdHNcblx0XHQgKiAgQHBhcmFtIHtOdW1iZXJ9IGJlYXRzXG5cdFx0ICogIEByZXR1cm4gIHtOdW1iZXJ9XG5cdFx0ICogIEBwcml2YXRlXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLl9iZWF0c1RvVW5pdHMgPSBmdW5jdGlvbiAoYmVhdHMpIHtcblx0ICAgICAgICByZXR1cm4gVG9uZS5GcmVxdWVuY3kuZnRvbShUb25lLkZyZXF1ZW5jeS5wcm90b3R5cGUuX2JlYXRzVG9Vbml0cy5jYWxsKHRoaXMsIGJlYXRzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2Vjb25kIGluIHRoZSBjdXJyZW50IHVuaXRzXG5cdFx0ICogIEBwYXJhbSB7U2Vjb25kc30gc2Vjb25kc1xuXHRcdCAqICBAcmV0dXJuICB7TnVtYmVyfVxuXHRcdCAqICBAcHJpdmF0ZVxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5mdG9tKFRvbmUuRnJlcXVlbmN5LnByb3RvdHlwZS5fc2Vjb25kc1RvVW5pdHMuY2FsbCh0aGlzLCBzZWNvbmRzKSk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBhcyBhIE1JREkgbm90ZVxuXHRcdCAqICBAcmV0dXJuICB7TUlESX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLk1pZGkoNjApLnRvTWlkaSgpOyAvLzYwXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLnRvTWlkaSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7XG5cdCAgICB9O1xuXHQgICAgLyoqXG5cdFx0ICogIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBhcyBhIE1JREkgbm90ZVxuXHRcdCAqICBAcmV0dXJuICB7TUlESX1cblx0XHQgKiAgQGV4YW1wbGVcblx0XHQgKiBUb25lLk1pZGkoNjApLnRvTWlkaSgpOyAvLzYwXG5cdFx0ICovXG5cdCAgICBUb25lLk1pZGkucHJvdG90eXBlLnRvRnJlcXVlbmN5ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBUb25lLkZyZXF1ZW5jeS5tdG9mKHRoaXMudG9NaWRpKCkpO1xuXHQgICAgfTtcblx0ICAgIC8qKlxuXHRcdCAqICBUcmFuc3Bvc2VzIHRoZSBmcmVxdWVuY3kgYnkgdGhlIGdpdmVuIG51bWJlciBvZiBzZW1pdG9uZXMuXG5cdFx0ICogIEBwYXJhbSAge0ludGVydmFsfSAgaW50ZXJ2YWxcblx0XHQgKiAgQHJldHVybiAge1RvbmUuRnJlcXVlbmN5fSBBIG5ldyB0cmFuc3Bvc2VkIGZyZXF1ZW5jeVxuXHRcdCAqICBAZXhhbXBsZVxuXHRcdCAqIFRvbmUuRnJlcXVlbmN5KFwiQTRcIikudHJhbnNwb3NlKDMpOyAvL1wiQzVcIlxuXHRcdCAqL1xuXHQgICAgVG9uZS5NaWRpLnByb3RvdHlwZS50cmFuc3Bvc2UgPSBmdW5jdGlvbiAoaW50ZXJ2YWwpIHtcblx0ICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy50b01pZGkoKSArIGludGVydmFsKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gVG9uZS5NaWRpO1xuXHR9KTtcblx0XG5cdHJldHVybiBUb25lO1xufSkpOyIsIi8qISBwNS5qcyB2MC43LjIgU2VwdGVtYmVyIDAyLCAyMDE4ICovICFmdW5jdGlvbihhKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1hKCk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLGEpO2Vsc2V7dmFyIGI7Yj1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMsYi5wNT1hKCl9fShmdW5jdGlvbigpe3ZhciBhO3JldHVybiBmdW5jdGlvbiBhKGIsYyxkKXtmdW5jdGlvbiBlKGcsaCl7aWYoIWNbZ10pe2lmKCFiW2ddKXt2YXIgaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dmFyIGo9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitnK1wiJ1wiKTt0aHJvdyBqLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsan12YXIgaz1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoay5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoY3x8YSl9LGssay5leHBvcnRzLGEsYixjLGQpfXJldHVybiBjW2ddLmV4cG9ydHN9Zm9yKHZhciBmPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsZz0wO2c8ZC5sZW5ndGg7ZysrKWUoZFtnXSk7cmV0dXJuIGV9KHsxOltmdW5jdGlvbihhLGIsYyl7IWZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYSl7dmFyIGI9YS5jaGFyQ29kZUF0KDApO3JldHVybiBiPT09Znx8Yj09PWs/NjI6Yj09PWd8fGI9PT1sPzYzOmI8aD8tMTpiPGgrMTA/Yi1oKzI2KzI2OmI8aisyNj9iLWo6YjxpKzI2P2ItaSsyNjp2b2lkIDB9ZnVuY3Rpb24gYyhhKXtmdW5jdGlvbiBjKGEpe2pbbCsrXT1hfXZhciBkLGYsZyxoLGksajtpZihhLmxlbmd0aCU0PjApdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNFwiKTt2YXIgaz1hLmxlbmd0aDtpPVwiPVwiPT09YS5jaGFyQXQoay0yKT8yOlwiPVwiPT09YS5jaGFyQXQoay0xKT8xOjAsaj1uZXcgZSgzKmEubGVuZ3RoLzQtaSksZz1pPjA/YS5sZW5ndGgtNDphLmxlbmd0aDt2YXIgbD0wO2ZvcihkPTAsZj0wO2Q8ZztkKz00LGYrPTMpaD1iKGEuY2hhckF0KGQpKTw8MTh8YihhLmNoYXJBdChkKzEpKTw8MTJ8YihhLmNoYXJBdChkKzIpKTw8NnxiKGEuY2hhckF0KGQrMykpLGMoKDE2NzExNjgwJmgpPj4xNiksYygoNjUyODAmaCk+PjgpLGMoMjU1JmgpO3JldHVybiAyPT09aT8oaD1iKGEuY2hhckF0KGQpKTw8MnxiKGEuY2hhckF0KGQrMSkpPj40LGMoMjU1JmgpKToxPT09aSYmKGg9YihhLmNoYXJBdChkKSk8PDEwfGIoYS5jaGFyQXQoZCsxKSk8PDR8YihhLmNoYXJBdChkKzIpKT4+MixjKGg+PjgmMjU1KSxjKDI1NSZoKSksan1mdW5jdGlvbiBkKGEpe2Z1bmN0aW9uIGIoYSl7cmV0dXJuXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIuY2hhckF0KGEpfWZ1bmN0aW9uIGMoYSl7cmV0dXJuIGIoYT4+MTgmNjMpK2IoYT4+MTImNjMpK2IoYT4+NiY2MykrYig2MyZhKX12YXIgZCxlLGYsZz1hLmxlbmd0aCUzLGg9XCJcIjtmb3IoZD0wLGY9YS5sZW5ndGgtZztkPGY7ZCs9MyllPShhW2RdPDwxNikrKGFbZCsxXTw8OCkrYVtkKzJdLGgrPWMoZSk7c3dpdGNoKGcpe2Nhc2UgMTplPWFbYS5sZW5ndGgtMV0saCs9YihlPj4yKSxoKz1iKGU8PDQmNjMpLGgrPVwiPT1cIjticmVhaztjYXNlIDI6ZT0oYVthLmxlbmd0aC0yXTw8OCkrYVthLmxlbmd0aC0xXSxoKz1iKGU+PjEwKSxoKz1iKGU+PjQmNjMpLGgrPWIoZTw8MiY2MyksaCs9XCI9XCJ9cmV0dXJuIGh9dmFyIGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxmPVwiK1wiLmNoYXJDb2RlQXQoMCksZz1cIi9cIi5jaGFyQ29kZUF0KDApLGg9XCIwXCIuY2hhckNvZGVBdCgwKSxpPVwiYVwiLmNoYXJDb2RlQXQoMCksaj1cIkFcIi5jaGFyQ29kZUF0KDApLGs9XCItXCIuY2hhckNvZGVBdCgwKSxsPVwiX1wiLmNoYXJDb2RlQXQoMCk7YS50b0J5dGVBcnJheT1jLGEuZnJvbUJ5dGVBcnJheT1kfSh2b2lkIDA9PT1jP3RoaXMuYmFzZTY0anM9e306Yyl9LHt9XSwyOltmdW5jdGlvbihhLGIsYyl7fSx7fV0sMzpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihiKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKCl7ZnVuY3Rpb24gYSgpe310cnl7dmFyIGI9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIGIuZm9vPWZ1bmN0aW9uKCl7cmV0dXJuIDQyfSxiLmNvbnN0cnVjdG9yPWEsNDI9PT1iLmZvbygpJiZiLmNvbnN0cnVjdG9yPT09YSYmXCJmdW5jdGlvblwiPT10eXBlb2YgYi5zdWJhcnJheSYmMD09PWIuc3ViYXJyYXkoMSwxKS5ieXRlTGVuZ3RofWNhdGNoKGEpe3JldHVybiExfX1mdW5jdGlvbiBlKCl7cmV0dXJuIGYuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gZihhKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGY/KGYuVFlQRURfQVJSQVlfU1VQUE9SVHx8KHRoaXMubGVuZ3RoPTAsdGhpcy5wYXJlbnQ9dm9pZCAwKSxcIm51bWJlclwiPT10eXBlb2YgYT9nKHRoaXMsYSk6XCJzdHJpbmdcIj09dHlwZW9mIGE/aCh0aGlzLGEsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTpcInV0ZjhcIik6aSh0aGlzLGEpKTphcmd1bWVudHMubGVuZ3RoPjE/bmV3IGYoYSxhcmd1bWVudHNbMV0pOm5ldyBmKGEpfWZ1bmN0aW9uIGcoYSxiKXtpZihhPXAoYSxiPDA/MDowfHEoYikpLCFmLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciBjPTA7YzxiO2MrKylhW2NdPTA7cmV0dXJuIGF9ZnVuY3Rpb24gaChhLGIsYyl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGMmJlwiXCIhPT1jfHwoYz1cInV0ZjhcIiksYT1wKGEsMHxzKGIsYykpLGEud3JpdGUoYixjKSxhfWZ1bmN0aW9uIGkoYSxiKXtpZihmLmlzQnVmZmVyKGIpKXJldHVybiBqKGEsYik7aWYoWShiKSlyZXR1cm4gayhhLGIpO2lmKG51bGw9PWIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm11c3Qgc3RhcnQgd2l0aCBudW1iZXIsIGJ1ZmZlciwgYXJyYXkgb3Igc3RyaW5nXCIpO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlcil7aWYoYi5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gbChhLGIpO2lmKGIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gbShhLGIpfXJldHVybiBiLmxlbmd0aD9uKGEsYik6byhhLGIpfWZ1bmN0aW9uIGooYSxiKXt2YXIgYz0wfHEoYi5sZW5ndGgpO3JldHVybiBhPXAoYSxjKSxiLmNvcHkoYSwwLDAsYyksYX1mdW5jdGlvbiBrKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTthPXAoYSxjKTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlhW2RdPTI1NSZiW2RdO3JldHVybiBhfWZ1bmN0aW9uIGwoYSxiKXt2YXIgYz0wfHEoYi5sZW5ndGgpO2E9cChhLGMpO2Zvcih2YXIgZD0wO2Q8YztkKz0xKWFbZF09MjU1JmJbZF07cmV0dXJuIGF9ZnVuY3Rpb24gbShhLGIpe3JldHVybiBmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGIuYnl0ZUxlbmd0aCxhPWYuX2F1Z21lbnQobmV3IFVpbnQ4QXJyYXkoYikpKTphPWwoYSxuZXcgVWludDhBcnJheShiKSksYX1mdW5jdGlvbiBuKGEsYil7dmFyIGM9MHxxKGIubGVuZ3RoKTthPXAoYSxjKTtmb3IodmFyIGQ9MDtkPGM7ZCs9MSlhW2RdPTI1NSZiW2RdO3JldHVybiBhfWZ1bmN0aW9uIG8oYSxiKXt2YXIgYyxkPTA7XCJCdWZmZXJcIj09PWIudHlwZSYmWShiLmRhdGEpJiYoYz1iLmRhdGEsZD0wfHEoYy5sZW5ndGgpKSxhPXAoYSxkKTtmb3IodmFyIGU9MDtlPGQ7ZSs9MSlhW2VdPTI1NSZjW2VdO3JldHVybiBhfWZ1bmN0aW9uIHAoYSxiKXtyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyhhPWYuX2F1Z21lbnQobmV3IFVpbnQ4QXJyYXkoYikpLGEuX19wcm90b19fPWYucHJvdG90eXBlKTooYS5sZW5ndGg9YixhLl9pc0J1ZmZlcj0hMCksMCE9PWImJmI8PWYucG9vbFNpemU+Pj4xJiYoYS5wYXJlbnQ9WiksYX1mdW5jdGlvbiBxKGEpe2lmKGE+PWUoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHhcIitlKCkudG9TdHJpbmcoMTYpK1wiIGJ5dGVzXCIpO3JldHVybiAwfGF9ZnVuY3Rpb24gcihhLGIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcihhLGIpO3ZhciBjPW5ldyBmKGEsYik7cmV0dXJuIGRlbGV0ZSBjLnBhcmVudCxjfWZ1bmN0aW9uIHMoYSxiKXtcInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9XCJcIithKTt2YXIgYz1hLmxlbmd0aDtpZigwPT09YylyZXR1cm4gMDtmb3IodmFyIGQ9ITE7Oylzd2l0Y2goYil7Y2FzZVwiYXNjaWlcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJyYXdcIjpjYXNlXCJyYXdzXCI6cmV0dXJuIGM7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIFIoYSkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAyKmM7Y2FzZVwiaGV4XCI6cmV0dXJuIGM+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBVKGEpLmxlbmd0aDtkZWZhdWx0OmlmKGQpcmV0dXJuIFIoYSkubGVuZ3RoO2I9KFwiXCIrYikudG9Mb3dlckNhc2UoKSxkPSEwfX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD0hMTtpZihifD0wLGM9dm9pZCAwPT09Y3x8Yz09PTEvMD90aGlzLmxlbmd0aDowfGMsYXx8KGE9XCJ1dGY4XCIpLGI8MCYmKGI9MCksYz50aGlzLmxlbmd0aCYmKGM9dGhpcy5sZW5ndGgpLGM8PWIpcmV0dXJuXCJcIjtmb3IoOzspc3dpdGNoKGEpe2Nhc2VcImhleFwiOnJldHVybiBGKHRoaXMsYixjKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gQih0aGlzLGIsYyk7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gRCh0aGlzLGIsYyk7Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIEUodGhpcyxiLGMpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBBKHRoaXMsYixjKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gRyh0aGlzLGIsYyk7ZGVmYXVsdDppZihkKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIithKTthPShhK1wiXCIpLnRvTG93ZXJDYXNlKCksZD0hMH19ZnVuY3Rpb24gdShhLGIsYyxkKXtjPU51bWJlcihjKXx8MDt2YXIgZT1hLmxlbmd0aC1jO2Q/KGQ9TnVtYmVyKGQpKT5lJiYoZD1lKTpkPWU7dmFyIGY9Yi5sZW5ndGg7aWYoZiUyIT0wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGV4IHN0cmluZ1wiKTtkPmYvMiYmKGQ9Zi8yKTtmb3IodmFyIGc9MDtnPGQ7ZysrKXt2YXIgaD1wYXJzZUludChiLnN1YnN0cigyKmcsMiksMTYpO2lmKGlzTmFOKGgpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGV4IHN0cmluZ1wiKTthW2MrZ109aH1yZXR1cm4gZ31mdW5jdGlvbiB2KGEsYixjLGQpe3JldHVybiBWKFIoYixhLmxlbmd0aC1jKSxhLGMsZCl9ZnVuY3Rpb24gdyhhLGIsYyxkKXtyZXR1cm4gVihTKGIpLGEsYyxkKX1mdW5jdGlvbiB4KGEsYixjLGQpe3JldHVybiB3KGEsYixjLGQpfWZ1bmN0aW9uIHkoYSxiLGMsZCl7cmV0dXJuIFYoVShiKSxhLGMsZCl9ZnVuY3Rpb24geihhLGIsYyxkKXtyZXR1cm4gVihUKGIsYS5sZW5ndGgtYyksYSxjLGQpfWZ1bmN0aW9uIEEoYSxiLGMpe3JldHVybiAwPT09YiYmYz09PWEubGVuZ3RoP1cuZnJvbUJ5dGVBcnJheShhKTpXLmZyb21CeXRlQXJyYXkoYS5zbGljZShiLGMpKX1mdW5jdGlvbiBCKGEsYixjKXtjPU1hdGgubWluKGEubGVuZ3RoLGMpO2Zvcih2YXIgZD1bXSxlPWI7ZTxjOyl7dmFyIGY9YVtlXSxnPW51bGwsaD1mPjIzOT80OmY+MjIzPzM6Zj4xOTE/MjoxO2lmKGUraDw9Yyl7dmFyIGksaixrLGw7c3dpdGNoKGgpe2Nhc2UgMTpmPDEyOCYmKGc9Zik7YnJlYWs7Y2FzZSAyOmk9YVtlKzFdLDEyOD09KDE5MiZpKSYmKGw9KDMxJmYpPDw2fDYzJmkpPjEyNyYmKGc9bCk7YnJlYWs7Y2FzZSAzOmk9YVtlKzFdLGo9YVtlKzJdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJmopJiYobD0oMTUmZik8PDEyfCg2MyZpKTw8Nnw2MyZqKT4yMDQ3JiYobDw1NTI5Nnx8bD41NzM0MykmJihnPWwpO2JyZWFrO2Nhc2UgNDppPWFbZSsxXSxqPWFbZSsyXSxrPWFbZSszXSwxMjg9PSgxOTImaSkmJjEyOD09KDE5MiZqKSYmMTI4PT0oMTkyJmspJiYobD0oMTUmZik8PDE4fCg2MyZpKTw8MTJ8KDYzJmopPDw2fDYzJmspPjY1NTM1JiZsPDExMTQxMTImJihnPWwpfX1udWxsPT09Zz8oZz02NTUzMyxoPTEpOmc+NjU1MzUmJihnLT02NTUzNixkLnB1c2goZz4+PjEwJjEwMjN8NTUyOTYpLGc9NTYzMjB8MTAyMyZnKSxkLnB1c2goZyksZSs9aH1yZXR1cm4gQyhkKX1mdW5jdGlvbiBDKGEpe3ZhciBiPWEubGVuZ3RoO2lmKGI8PSQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGEpO2Zvcih2YXIgYz1cIlwiLGQ9MDtkPGI7KWMrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGEuc2xpY2UoZCxkKz0kKSk7cmV0dXJuIGN9ZnVuY3Rpb24gRChhLGIsYyl7dmFyIGQ9XCJcIjtjPU1hdGgubWluKGEubGVuZ3RoLGMpO2Zvcih2YXIgZT1iO2U8YztlKyspZCs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmYVtlXSk7cmV0dXJuIGR9ZnVuY3Rpb24gRShhLGIsYyl7dmFyIGQ9XCJcIjtjPU1hdGgubWluKGEubGVuZ3RoLGMpO2Zvcih2YXIgZT1iO2U8YztlKyspZCs9U3RyaW5nLmZyb21DaGFyQ29kZShhW2VdKTtyZXR1cm4gZH1mdW5jdGlvbiBGKGEsYixjKXt2YXIgZD1hLmxlbmd0aDsoIWJ8fGI8MCkmJihiPTApLCghY3x8YzwwfHxjPmQpJiYoYz1kKTtmb3IodmFyIGU9XCJcIixmPWI7ZjxjO2YrKyllKz1RKGFbZl0pO3JldHVybiBlfWZ1bmN0aW9uIEcoYSxiLGMpe2Zvcih2YXIgZD1hLnNsaWNlKGIsYyksZT1cIlwiLGY9MDtmPGQubGVuZ3RoO2YrPTIpZSs9U3RyaW5nLmZyb21DaGFyQ29kZShkW2ZdKzI1NipkW2YrMV0pO3JldHVybiBlfWZ1bmN0aW9uIEgoYSxiLGMpe2lmKGElMSE9MHx8YTwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwib2Zmc2V0IGlzIG5vdCB1aW50XCIpO2lmKGErYj5jKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aFwiKX1mdW5jdGlvbiBJKGEsYixjLGQsZSxnKXtpZighZi5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYnVmZmVyIG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2VcIik7aWYoYj5lfHxiPGcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ2YWx1ZSBpcyBvdXQgb2YgYm91bmRzXCIpO2lmKGMrZD5hLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBKKGEsYixjLGQpe2I8MCYmKGI9NjU1MzUrYisxKTtmb3IodmFyIGU9MCxmPU1hdGgubWluKGEubGVuZ3RoLWMsMik7ZTxmO2UrKylhW2MrZV09KGImMjU1PDw4KihkP2U6MS1lKSk+Pj44KihkP2U6MS1lKX1mdW5jdGlvbiBLKGEsYixjLGQpe2I8MCYmKGI9NDI5NDk2NzI5NStiKzEpO2Zvcih2YXIgZT0wLGY9TWF0aC5taW4oYS5sZW5ndGgtYyw0KTtlPGY7ZSsrKWFbYytlXT1iPj4+OCooZD9lOjMtZSkmMjU1fWZ1bmN0aW9uIEwoYSxiLGMsZCxlLGYpe2lmKGI+ZXx8YjxmKXRocm93IG5ldyBSYW5nZUVycm9yKFwidmFsdWUgaXMgb3V0IG9mIGJvdW5kc1wiKTtpZihjK2Q+YS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYoYzwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwiaW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIE0oYSxiLGMsZCxlKXtyZXR1cm4gZXx8TChhLGIsYyw0LDMuNDAyODIzNDY2Mzg1Mjg4NmUzOCwtMy40MDI4MjM0NjYzODUyODg2ZTM4KSxYLndyaXRlKGEsYixjLGQsMjMsNCksYys0fWZ1bmN0aW9uIE4oYSxiLGMsZCxlKXtyZXR1cm4gZXx8TChhLGIsYyw4LDEuNzk3NjkzMTM0ODYyMzE1N2UzMDgsLTEuNzk3NjkzMTM0ODYyMzE1N2UzMDgpLFgud3JpdGUoYSxiLGMsZCw1Miw4KSxjKzh9ZnVuY3Rpb24gTyhhKXtpZihhPVAoYSkucmVwbGFjZShhYSxcIlwiKSxhLmxlbmd0aDwyKXJldHVyblwiXCI7Zm9yKDthLmxlbmd0aCU0IT0wOylhKz1cIj1cIjtyZXR1cm4gYX1mdW5jdGlvbiBQKGEpe3JldHVybiBhLnRyaW0/YS50cmltKCk6YS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLFwiXCIpfWZ1bmN0aW9uIFEoYSl7cmV0dXJuIGE8MTY/XCIwXCIrYS50b1N0cmluZygxNik6YS50b1N0cmluZygxNil9ZnVuY3Rpb24gUihhLGIpe2I9Ynx8MS8wO2Zvcih2YXIgYyxkPWEubGVuZ3RoLGU9bnVsbCxmPVtdLGc9MDtnPGQ7ZysrKXtpZigoYz1hLmNoYXJDb2RlQXQoZykpPjU1Mjk1JiZjPDU3MzQ0KXtpZighZSl7aWYoYz41NjMxOSl7KGItPTMpPi0xJiZmLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKGcrMT09PWQpeyhiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1lPWM7Y29udGludWV9aWYoYzw1NjMyMCl7KGItPTMpPi0xJiZmLnB1c2goMjM5LDE5MSwxODkpLGU9Yztjb250aW51ZX1jPTY1NTM2KyhlLTU1Mjk2PDwxMHxjLTU2MzIwKX1lbHNlIGUmJihiLT0zKT4tMSYmZi5wdXNoKDIzOSwxOTEsMTg5KTtpZihlPW51bGwsYzwxMjgpe2lmKChiLT0xKTwwKWJyZWFrO2YucHVzaChjKX1lbHNlIGlmKGM8MjA0OCl7aWYoKGItPTIpPDApYnJlYWs7Zi5wdXNoKGM+PjZ8MTkyLDYzJmN8MTI4KX1lbHNlIGlmKGM8NjU1MzYpe2lmKChiLT0zKTwwKWJyZWFrO2YucHVzaChjPj4xMnwyMjQsYz4+NiY2M3wxMjgsNjMmY3wxMjgpfWVsc2V7aWYoIShjPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29kZSBwb2ludFwiKTtpZigoYi09NCk8MClicmVhaztmLnB1c2goYz4+MTh8MjQwLGM+PjEyJjYzfDEyOCxjPj42JjYzfDEyOCw2MyZjfDEyOCl9fXJldHVybiBmfWZ1bmN0aW9uIFMoYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyliLnB1c2goMjU1JmEuY2hhckNvZGVBdChjKSk7cmV0dXJuIGJ9ZnVuY3Rpb24gVChhLGIpe2Zvcih2YXIgYyxkLGUsZj1bXSxnPTA7ZzxhLmxlbmd0aCYmISgoYi09Mik8MCk7ZysrKWM9YS5jaGFyQ29kZUF0KGcpLGQ9Yz4+OCxlPWMlMjU2LGYucHVzaChlKSxmLnB1c2goZCk7cmV0dXJuIGZ9ZnVuY3Rpb24gVShhKXtyZXR1cm4gVy50b0J5dGVBcnJheShPKGEpKX1mdW5jdGlvbiBWKGEsYixjLGQpe2Zvcih2YXIgZT0wO2U8ZCYmIShlK2M+PWIubGVuZ3RofHxlPj1hLmxlbmd0aCk7ZSsrKWJbZStjXT1hW2VdO3JldHVybiBlfXZhciBXPWEoXCJiYXNlNjQtanNcIiksWD1hKFwiaWVlZTc1NFwiKSxZPWEoXCJpc2FycmF5XCIpO2MuQnVmZmVyPWYsYy5TbG93QnVmZmVyPXIsYy5JTlNQRUNUX01BWF9CWVRFUz01MCxmLnBvb2xTaXplPTgxOTI7dmFyIFo9e307Zi5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMCE9PWIuVFlQRURfQVJSQVlfU1VQUE9SVD9iLlRZUEVEX0FSUkFZX1NVUFBPUlQ6ZCgpLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8oZi5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGYuX19wcm90b19fPVVpbnQ4QXJyYXkpOihmLnByb3RvdHlwZS5sZW5ndGg9dm9pZCAwLGYucHJvdG90eXBlLnBhcmVudD12b2lkIDApLGYuaXNCdWZmZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIShudWxsPT1hfHwhYS5faXNCdWZmZXIpfSxmLmNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtpZighZi5pc0J1ZmZlcihhKXx8IWYuaXNCdWZmZXIoYikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnNcIik7aWYoYT09PWIpcmV0dXJuIDA7Zm9yKHZhciBjPWEubGVuZ3RoLGQ9Yi5sZW5ndGgsZT0wLGc9TWF0aC5taW4oYyxkKTtlPGcmJmFbZV09PT1iW2VdOykrK2U7cmV0dXJuIGUhPT1nJiYoYz1hW2VdLGQ9YltlXSksYzxkPy0xOmQ8Yz8xOjB9LGYuaXNFbmNvZGluZz1mdW5jdGlvbihhKXtzd2l0Y2goU3RyaW5nKGEpLnRvTG93ZXJDYXNlKCkpe2Nhc2VcImhleFwiOmNhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOmNhc2VcImFzY2lpXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwiYmFzZTY0XCI6Y2FzZVwicmF3XCI6Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LGYuY29uY2F0PWZ1bmN0aW9uKGEsYil7aWYoIVkoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImxpc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzLlwiKTtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG5ldyBmKDApO3ZhciBjO2lmKHZvaWQgMD09PWIpZm9yKGI9MCxjPTA7YzxhLmxlbmd0aDtjKyspYis9YVtjXS5sZW5ndGg7dmFyIGQ9bmV3IGYoYiksZT0wO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBnPWFbY107Zy5jb3B5KGQsZSksZSs9Zy5sZW5ndGh9cmV0dXJuIGR9LGYuYnl0ZUxlbmd0aD1zLGYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PWE/XCJcIjowPT09YXJndW1lbnRzLmxlbmd0aD9CKHRoaXMsMCxhKTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGEpe2lmKCFmLmlzQnVmZmVyKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09YXx8MD09PWYuY29tcGFyZSh0aGlzLGEpfSxmLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGE9XCJcIixiPWMuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihhPXRoaXMudG9TdHJpbmcoXCJoZXhcIiwwLGIpLm1hdGNoKC8uezJ9L2cpLmpvaW4oXCIgXCIpLHRoaXMubGVuZ3RoPmImJihhKz1cIiAuLi4gXCIpKSxcIjxCdWZmZXIgXCIrYStcIj5cIn0sZi5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihhKXtpZighZi5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PWE/MDpmLmNvbXBhcmUodGhpcyxhKX0sZi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGMpe2Zvcih2YXIgZD0tMSxlPTA7YytlPGEubGVuZ3RoO2UrKylpZihhW2MrZV09PT1iWy0xPT09ZD8wOmUtZF0pe2lmKC0xPT09ZCYmKGQ9ZSksZS1kKzE9PT1iLmxlbmd0aClyZXR1cm4gYytkfWVsc2UgZD0tMTtyZXR1cm4tMX1pZihiPjIxNDc0ODM2NDc/Yj0yMTQ3NDgzNjQ3OmI8LTIxNDc0ODM2NDgmJihiPS0yMTQ3NDgzNjQ4KSxiPj49MCwwPT09dGhpcy5sZW5ndGgpcmV0dXJuLTE7aWYoYj49dGhpcy5sZW5ndGgpcmV0dXJuLTE7aWYoYjwwJiYoYj1NYXRoLm1heCh0aGlzLmxlbmd0aCtiLDApKSxcInN0cmluZ1wiPT10eXBlb2YgYSlyZXR1cm4gMD09PWEubGVuZ3RoPy0xOlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsYSxiKTtpZihmLmlzQnVmZmVyKGEpKXJldHVybiBjKHRoaXMsYSxiKTtpZihcIm51bWJlclwiPT10eXBlb2YgYSlyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUJiZcImZ1bmN0aW9uXCI9PT1VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLGEsYik6Yyh0aGlzLFthXSxiKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfSxmLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGNvbnNvbGUubG9nKFwiLmdldCgpIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB1c2luZyBhcnJheSBpbmRleGVzIGluc3RlYWQuXCIpLHRoaXMucmVhZFVJbnQ4KGEpfSxmLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gY29uc29sZS5sb2coXCIuc2V0KCkgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHVzaW5nIGFycmF5IGluZGV4ZXMgaW5zdGVhZC5cIiksdGhpcy53cml0ZVVJbnQ4KGEsYil9LGYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGEsYixjLGQpe2lmKHZvaWQgMD09PWIpZD1cInV0ZjhcIixjPXRoaXMubGVuZ3RoLGI9MDtlbHNlIGlmKHZvaWQgMD09PWMmJlwic3RyaW5nXCI9PXR5cGVvZiBiKWQ9YixjPXRoaXMubGVuZ3RoLGI9MDtlbHNlIGlmKGlzRmluaXRlKGIpKWJ8PTAsaXNGaW5pdGUoYyk/KGN8PTAsdm9pZCAwPT09ZCYmKGQ9XCJ1dGY4XCIpKTooZD1jLGM9dm9pZCAwKTtlbHNle3ZhciBlPWQ7ZD1iLGI9MHxjLGM9ZX12YXIgZj10aGlzLmxlbmd0aC1iO2lmKCh2b2lkIDA9PT1jfHxjPmYpJiYoYz1mKSxhLmxlbmd0aD4wJiYoYzwwfHxiPDApfHxiPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiYXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIik7ZHx8KGQ9XCJ1dGY4XCIpO2Zvcih2YXIgZz0hMTs7KXN3aXRjaChkKXtjYXNlXCJoZXhcIjpyZXR1cm4gdSh0aGlzLGEsYixjKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gdih0aGlzLGEsYixjKTtjYXNlXCJhc2NpaVwiOnJldHVybiB3KHRoaXMsYSxiLGMpO2Nhc2VcImJpbmFyeVwiOnJldHVybiB4KHRoaXMsYSxiLGMpO2Nhc2VcImJhc2U2NFwiOnJldHVybiB5KHRoaXMsYSxiLGMpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiB6KHRoaXMsYSxiLGMpO2RlZmF1bHQ6aWYoZyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrZCk7ZD0oXCJcIitkKS50b0xvd2VyQ2FzZSgpLGc9ITB9fSxmLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcIkJ1ZmZlclwiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyICQ9NDA5NjtmLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMubGVuZ3RoO2E9fn5hLGI9dm9pZCAwPT09Yj9jOn5+YixhPDA/KGErPWMpPDAmJihhPTApOmE+YyYmKGE9YyksYjwwPyhiKz1jKTwwJiYoYj0wKTpiPmMmJihiPWMpLGI8YSYmKGI9YSk7dmFyIGQ7aWYoZi5UWVBFRF9BUlJBWV9TVVBQT1JUKWQ9Zi5fYXVnbWVudCh0aGlzLnN1YmFycmF5KGEsYikpO2Vsc2V7dmFyIGU9Yi1hO2Q9bmV3IGYoZSx2b2lkIDApO2Zvcih2YXIgZz0wO2c8ZTtnKyspZFtnXT10aGlzW2crYV19cmV0dXJuIGQubGVuZ3RoJiYoZC5wYXJlbnQ9dGhpcy5wYXJlbnR8fHRoaXMpLGR9LGYucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oYSxiLGMpe2F8PTAsYnw9MCxjfHxIKGEsYix0aGlzLmxlbmd0aCk7Zm9yKHZhciBkPXRoaXNbYV0sZT0xLGY9MDsrK2Y8YiYmKGUqPTI1Nik7KWQrPXRoaXNbYStmXSplO3JldHVybiBkfSxmLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGEsYixjKXthfD0wLGJ8PTAsY3x8SChhLGIsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZD10aGlzW2ErLS1iXSxlPTE7Yj4wJiYoZSo9MjU2KTspZCs9dGhpc1thKy0tYl0qZTtyZXR1cm4gZH0sZi5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSwxLHRoaXMubGVuZ3RoKSx0aGlzW2FdfSxmLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDIsdGhpcy5sZW5ndGgpLHRoaXNbYV18dGhpc1thKzFdPDw4fSxmLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDIsdGhpcy5sZW5ndGgpLHRoaXNbYV08PDh8dGhpc1thKzFdfSxmLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2FdfHRoaXNbYSsxXTw8OHx0aGlzW2ErMl08PDE2KSsxNjc3NzIxNip0aGlzW2ErM119LGYucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1thXSsodGhpc1thKzFdPDwxNnx0aGlzW2ErMl08PDh8dGhpc1thKzNdKX0sZi5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGEsYixjKXthfD0wLGJ8PTAsY3x8SChhLGIsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZD10aGlzW2FdLGU9MSxmPTA7KytmPGImJihlKj0yNTYpOylkKz10aGlzW2ErZl0qZTtyZXR1cm4gZSo9MTI4LGQ+PWUmJihkLT1NYXRoLnBvdygyLDgqYikpLGR9LGYucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihhLGIsYyl7YXw9MCxifD0wLGN8fEgoYSxiLHRoaXMubGVuZ3RoKTtmb3IodmFyIGQ9YixlPTEsZj10aGlzW2ErLS1kXTtkPjAmJihlKj0yNTYpOylmKz10aGlzW2ErLS1kXSplO3JldHVybiBlKj0xMjgsZj49ZSYmKGYtPU1hdGgucG93KDIsOCpiKSksZn0sZi5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2FdPy0xKigyNTUtdGhpc1thXSsxKTp0aGlzW2FdfSxmLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihhLGIpe2J8fEgoYSwyLHRoaXMubGVuZ3RoKTt2YXIgYz10aGlzW2FdfHRoaXNbYSsxXTw8ODtyZXR1cm4gMzI3NjgmYz80Mjk0OTAxNzYwfGM6Y30sZi5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oYSxiKXtifHxIKGEsMix0aGlzLmxlbmd0aCk7dmFyIGM9dGhpc1thKzFdfHRoaXNbYV08PDg7cmV0dXJuIDMyNzY4JmM/NDI5NDkwMTc2MHxjOmN9LGYucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSx0aGlzW2FdfHRoaXNbYSsxXTw8OHx0aGlzW2ErMl08PDE2fHRoaXNbYSszXTw8MjR9LGYucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSx0aGlzW2FdPDwyNHx0aGlzW2ErMV08PDE2fHRoaXNbYSsyXTw8OHx0aGlzW2ErM119LGYucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw0LHRoaXMubGVuZ3RoKSxYLnJlYWQodGhpcyxhLCEwLDIzLDQpfSxmLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihhLGIpe3JldHVybiBifHxIKGEsNCx0aGlzLmxlbmd0aCksWC5yZWFkKHRoaXMsYSwhMSwyMyw0KX0sZi5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJ8fEgoYSw4LHRoaXMubGVuZ3RoKSxYLnJlYWQodGhpcyxhLCEwLDUyLDgpfSxmLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnx8SChhLDgsdGhpcy5sZW5ndGgpLFgucmVhZCh0aGlzLGEsITEsNTIsOCl9LGYucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGEsYixjLGQpe2E9K2EsYnw9MCxjfD0wLGR8fEkodGhpcyxhLGIsYyxNYXRoLnBvdygyLDgqYyksMCk7dmFyIGU9MSxmPTA7Zm9yKHRoaXNbYl09MjU1JmE7KytmPGMmJihlKj0yNTYpOyl0aGlzW2IrZl09YS9lJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihhLGIsYyxkKXthPSthLGJ8PTAsY3w9MCxkfHxJKHRoaXMsYSxiLGMsTWF0aC5wb3coMiw4KmMpLDApO3ZhciBlPWMtMSxmPTE7Zm9yKHRoaXNbYitlXT0yNTUmYTstLWU+PTAmJihmKj0yNTYpOyl0aGlzW2IrZV09YS9mJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMSwyNTUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoYT1NYXRoLmZsb29yKGEpKSx0aGlzW2JdPTI1NSZhLGIrMX0sZi5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsNjU1MzUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPTI1NSZhLHRoaXNbYisxXT1hPj4+OCk6Sih0aGlzLGEsYiwhMCksYisyfSxmLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsMiw2NTUzNSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjgsdGhpc1tiKzFdPTI1NSZhKTpKKHRoaXMsYSxiLCExKSxiKzJ9LGYucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiw0LDQyOTQ5NjcyOTUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2IrM109YT4+PjI0LHRoaXNbYisyXT1hPj4+MTYsdGhpc1tiKzFdPWE+Pj44LHRoaXNbYl09MjU1JmEpOksodGhpcyxhLGIsITApLGIrNH0sZi5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDQsNDI5NDk2NzI5NSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjI0LHRoaXNbYisxXT1hPj4+MTYsdGhpc1tiKzJdPWE+Pj44LHRoaXNbYiszXT0yNTUmYSk6Syh0aGlzLGEsYiwhMSksYis0fSxmLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGEsYixjLGQpe2lmKGE9K2EsYnw9MCwhZCl7dmFyIGU9TWF0aC5wb3coMiw4KmMtMSk7SSh0aGlzLGEsYixjLGUtMSwtZSl9dmFyIGY9MCxnPTEsaD1hPDA/MTowO2Zvcih0aGlzW2JdPTI1NSZhOysrZjxjJiYoZyo9MjU2KTspdGhpc1tiK2ZdPShhL2c+PjApLWgmMjU1O3JldHVybiBiK2N9LGYucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYT0rYSxifD0wLCFkKXt2YXIgZT1NYXRoLnBvdygyLDgqYy0xKTtJKHRoaXMsYSxiLGMsZS0xLC1lKX12YXIgZj1jLTEsZz0xLGg9YTwwPzE6MDtmb3IodGhpc1tiK2ZdPTI1NSZhOy0tZj49MCYmKGcqPTI1Nik7KXRoaXNbYitmXT0oYS9nPj4wKS1oJjI1NTtyZXR1cm4gYitjfSxmLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPSthLGJ8PTAsY3x8SSh0aGlzLGEsYiwxLDEyNywtMTI4KSxmLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChhPU1hdGguZmxvb3IoYSkpLGE8MCYmKGE9MjU1K2ErMSksdGhpc1tiXT0yNTUmYSxiKzF9LGYucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsMzI3NjcsLTMyNzY4KSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09MjU1JmEsdGhpc1tiKzFdPWE+Pj44KTpKKHRoaXMsYSxiLCEwKSxiKzJ9LGYucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDIsMzI3NjcsLTMyNzY4KSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjgsdGhpc1tiKzFdPTI1NSZhKTpKKHRoaXMsYSxiLCExKSxiKzJ9LGYucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGE9K2EsYnw9MCxjfHxJKHRoaXMsYSxiLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW2JdPTI1NSZhLHRoaXNbYisxXT1hPj4+OCx0aGlzW2IrMl09YT4+PjE2LHRoaXNbYiszXT1hPj4+MjQpOksodGhpcyxhLGIsITApLGIrNH0sZi5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYT0rYSxifD0wLGN8fEkodGhpcyxhLGIsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxhPDAmJihhPTQyOTQ5NjcyOTUrYSsxKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbYl09YT4+PjI0LHRoaXNbYisxXT1hPj4+MTYsdGhpc1tiKzJdPWE+Pj44LHRoaXNbYiszXT0yNTUmYSk6Syh0aGlzLGEsYiwhMSksYis0fSxmLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBNKHRoaXMsYSxiLCEwLGMpfSxmLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBNKHRoaXMsYSxiLCExLGMpfSxmLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTih0aGlzLGEsYiwhMCxjKX0sZi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIE4odGhpcyxhLGIsITEsYyl9LGYucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoY3x8KGM9MCksZHx8MD09PWR8fChkPXRoaXMubGVuZ3RoKSxiPj1hLmxlbmd0aCYmKGI9YS5sZW5ndGgpLGJ8fChiPTApLGQ+MCYmZDxjJiYoZD1jKSxkPT09YylyZXR1cm4gMDtpZigwPT09YS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihiPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKGM8MHx8Yz49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKGQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzXCIpO2Q+dGhpcy5sZW5ndGgmJihkPXRoaXMubGVuZ3RoKSxhLmxlbmd0aC1iPGQtYyYmKGQ9YS5sZW5ndGgtYitjKTt2YXIgZSxnPWQtYztpZih0aGlzPT09YSYmYzxiJiZiPGQpZm9yKGU9Zy0xO2U+PTA7ZS0tKWFbZStiXT10aGlzW2UrY107ZWxzZSBpZihnPDFlM3x8IWYuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoZT0wO2U8ZztlKyspYVtlK2JdPXRoaXNbZStjXTtlbHNlIGEuX3NldCh0aGlzLnN1YmFycmF5KGMsYytnKSxiKTtyZXR1cm4gZ30sZi5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihhLGIsYyl7aWYoYXx8KGE9MCksYnx8KGI9MCksY3x8KGM9dGhpcy5sZW5ndGgpLGM8Yil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImVuZCA8IHN0YXJ0XCIpO2lmKGMhPT1iJiYwIT09dGhpcy5sZW5ndGgpe2lmKGI8MHx8Yj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKGM8MHx8Yz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImVuZCBvdXQgb2YgYm91bmRzXCIpO3ZhciBkO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBhKWZvcihkPWI7ZDxjO2QrKyl0aGlzW2RdPWE7ZWxzZXt2YXIgZT1SKGEudG9TdHJpbmcoKSksZj1lLmxlbmd0aDtmb3IoZD1iO2Q8YztkKyspdGhpc1tkXT1lW2QlZl19cmV0dXJuIHRoaXN9fSxmLnByb3RvdHlwZS50b0FycmF5QnVmZmVyPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXkpe2lmKGYuVFlQRURfQVJSQVlfU1VQUE9SVClyZXR1cm4gbmV3IGYodGhpcykuYnVmZmVyO2Zvcih2YXIgYT1uZXcgVWludDhBcnJheSh0aGlzLmxlbmd0aCksYj0wLGM9YS5sZW5ndGg7YjxjO2IrPTEpYVtiXT10aGlzW2JdO3JldHVybiBhLmJ1ZmZlcn10aHJvdyBuZXcgVHlwZUVycm9yKFwiQnVmZmVyLnRvQXJyYXlCdWZmZXIgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIil9O3ZhciBfPWYucHJvdG90eXBlO2YuX2F1Z21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY29uc3RydWN0b3I9ZixhLl9pc0J1ZmZlcj0hMCxhLl9zZXQ9YS5zZXQsYS5nZXQ9Xy5nZXQsYS5zZXQ9Xy5zZXQsYS53cml0ZT1fLndyaXRlLGEudG9TdHJpbmc9Xy50b1N0cmluZyxhLnRvTG9jYWxlU3RyaW5nPV8udG9TdHJpbmcsYS50b0pTT049Xy50b0pTT04sYS5lcXVhbHM9Xy5lcXVhbHMsYS5jb21wYXJlPV8uY29tcGFyZSxhLmluZGV4T2Y9Xy5pbmRleE9mLGEuY29weT1fLmNvcHksYS5zbGljZT1fLnNsaWNlLGEucmVhZFVJbnRMRT1fLnJlYWRVSW50TEUsYS5yZWFkVUludEJFPV8ucmVhZFVJbnRCRSxhLnJlYWRVSW50OD1fLnJlYWRVSW50OCxhLnJlYWRVSW50MTZMRT1fLnJlYWRVSW50MTZMRSxhLnJlYWRVSW50MTZCRT1fLnJlYWRVSW50MTZCRSxhLnJlYWRVSW50MzJMRT1fLnJlYWRVSW50MzJMRSxhLnJlYWRVSW50MzJCRT1fLnJlYWRVSW50MzJCRSxhLnJlYWRJbnRMRT1fLnJlYWRJbnRMRSxhLnJlYWRJbnRCRT1fLnJlYWRJbnRCRSxhLnJlYWRJbnQ4PV8ucmVhZEludDgsYS5yZWFkSW50MTZMRT1fLnJlYWRJbnQxNkxFLGEucmVhZEludDE2QkU9Xy5yZWFkSW50MTZCRSxhLnJlYWRJbnQzMkxFPV8ucmVhZEludDMyTEUsYS5yZWFkSW50MzJCRT1fLnJlYWRJbnQzMkJFLGEucmVhZEZsb2F0TEU9Xy5yZWFkRmxvYXRMRSxhLnJlYWRGbG9hdEJFPV8ucmVhZEZsb2F0QkUsYS5yZWFkRG91YmxlTEU9Xy5yZWFkRG91YmxlTEUsYS5yZWFkRG91YmxlQkU9Xy5yZWFkRG91YmxlQkUsYS53cml0ZVVJbnQ4PV8ud3JpdGVVSW50OCxhLndyaXRlVUludExFPV8ud3JpdGVVSW50TEUsYS53cml0ZVVJbnRCRT1fLndyaXRlVUludEJFLGEud3JpdGVVSW50MTZMRT1fLndyaXRlVUludDE2TEUsYS53cml0ZVVJbnQxNkJFPV8ud3JpdGVVSW50MTZCRSxhLndyaXRlVUludDMyTEU9Xy53cml0ZVVJbnQzMkxFLGEud3JpdGVVSW50MzJCRT1fLndyaXRlVUludDMyQkUsYS53cml0ZUludExFPV8ud3JpdGVJbnRMRSxhLndyaXRlSW50QkU9Xy53cml0ZUludEJFLGEud3JpdGVJbnQ4PV8ud3JpdGVJbnQ4LGEud3JpdGVJbnQxNkxFPV8ud3JpdGVJbnQxNkxFLGEud3JpdGVJbnQxNkJFPV8ud3JpdGVJbnQxNkJFLGEud3JpdGVJbnQzMkxFPV8ud3JpdGVJbnQzMkxFLGEud3JpdGVJbnQzMkJFPV8ud3JpdGVJbnQzMkJFLGEud3JpdGVGbG9hdExFPV8ud3JpdGVGbG9hdExFLGEud3JpdGVGbG9hdEJFPV8ud3JpdGVGbG9hdEJFLGEud3JpdGVEb3VibGVMRT1fLndyaXRlRG91YmxlTEUsYS53cml0ZURvdWJsZUJFPV8ud3JpdGVEb3VibGVCRSxhLmZpbGw9Xy5maWxsLGEuaW5zcGVjdD1fLmluc3BlY3QsYS50b0FycmF5QnVmZmVyPV8udG9BcnJheUJ1ZmZlcixhfTt2YXIgYWE9L1teK1xcLzAtOUEtWmEtei1fXS9nfSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7XCJiYXNlNjQtanNcIjoxLGllZWU3NTQ6Nyxpc2FycmF5Ojh9XSw0OltmdW5jdGlvbihiLGMsZCl7KGZ1bmN0aW9uKGUsZil7IWZ1bmN0aW9uKGIsZSl7XCJvYmplY3RcIj09dHlwZW9mIGQmJnZvaWQgMCE9PWM/Yy5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiZhLmFtZD9hKGUpOmIuRVM2UHJvbWlzZT1lKCl9KHRoaXMsZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBhKGEpe3ZhciBiPXR5cGVvZiBhO3JldHVybiBudWxsIT09YSYmKFwib2JqZWN0XCI9PT1ifHxcImZ1bmN0aW9uXCI9PT1iKX1mdW5jdGlvbiBjKGEpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGF9ZnVuY3Rpb24gZChhKXtYPWF9ZnVuY3Rpb24gZyhhKXtZPWF9ZnVuY3Rpb24gaCgpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLm5leHRUaWNrKG0pfX1mdW5jdGlvbiBpKCl7cmV0dXJuIHZvaWQgMCE9PVc/ZnVuY3Rpb24oKXtXKG0pfTpsKCl9ZnVuY3Rpb24gaigpe3ZhciBhPTAsYj1uZXcgXyhtKSxjPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO3JldHVybiBiLm9ic2VydmUoYyx7Y2hhcmFjdGVyRGF0YTohMH0pLGZ1bmN0aW9uKCl7Yy5kYXRhPWE9KythJTJ9fWZ1bmN0aW9uIGsoKXt2YXIgYT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGEucG9ydDEub25tZXNzYWdlPW0sZnVuY3Rpb24oKXtyZXR1cm4gYS5wb3J0Mi5wb3N0TWVzc2FnZSgwKX19ZnVuY3Rpb24gbCgpe3ZhciBhPXNldFRpbWVvdXQ7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEobSwxKX19ZnVuY3Rpb24gbSgpe2Zvcih2YXIgYT0wO2E8VjthKz0yKXsoMCxjYVthXSkoY2FbYSsxXSksY2FbYV09dm9pZCAwLGNhW2ErMV09dm9pZCAwfVY9MH1mdW5jdGlvbiBuKCl7dHJ5e3ZhciBhPWIsYz1hKFwidmVydHhcIik7cmV0dXJuIFc9Yy5ydW5Pbkxvb3B8fGMucnVuT25Db250ZXh0LGkoKX1jYXRjaChhKXtyZXR1cm4gbCgpfX1mdW5jdGlvbiBvKGEsYil7dmFyIGM9YXJndW1lbnRzLGQ9dGhpcyxlPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHEpO3ZvaWQgMD09PWVbZWFdJiZKKGUpO3ZhciBmPWQuX3N0YXRlO3JldHVybiBmP2Z1bmN0aW9uKCl7dmFyIGE9Y1tmLTFdO1koZnVuY3Rpb24oKXtyZXR1cm4gRyhmLGUsYSxkLl9yZXN1bHQpfSl9KCk6QyhkLGUsYSxiKSxlfWZ1bmN0aW9uIHAoYSl7dmFyIGI9dGhpcztpZihhJiZcIm9iamVjdFwiPT10eXBlb2YgYSYmYS5jb25zdHJ1Y3Rvcj09PWIpcmV0dXJuIGE7dmFyIGM9bmV3IGIocSk7cmV0dXJuIHkoYyxhKSxjfWZ1bmN0aW9uIHEoKXt9ZnVuY3Rpb24gcigpe3JldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZlwiKX1mdW5jdGlvbiBzKCl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJBIHByb21pc2VzIGNhbGxiYWNrIGNhbm5vdCByZXR1cm4gdGhhdCBzYW1lIHByb21pc2UuXCIpfWZ1bmN0aW9uIHQoYSl7dHJ5e3JldHVybiBhLnRoZW59Y2F0Y2goYSl7cmV0dXJuIGlhLmVycm9yPWEsaWF9fWZ1bmN0aW9uIHUoYSxiLGMsZCl7dHJ5e2EuY2FsbChiLGMsZCl9Y2F0Y2goYSl7cmV0dXJuIGF9fWZ1bmN0aW9uIHYoYSxiLGMpe1koZnVuY3Rpb24oYSl7dmFyIGQ9ITEsZT11KGMsYixmdW5jdGlvbihjKXtkfHwoZD0hMCxiIT09Yz95KGEsYyk6QShhLGMpKX0sZnVuY3Rpb24oYil7ZHx8KGQ9ITAsQihhLGIpKX0sXCJTZXR0bGU6IFwiKyhhLl9sYWJlbHx8XCIgdW5rbm93biBwcm9taXNlXCIpKTshZCYmZSYmKGQ9ITAsQihhLGUpKX0sYSl9ZnVuY3Rpb24gdyhhLGIpe2IuX3N0YXRlPT09Z2E/QShhLGIuX3Jlc3VsdCk6Yi5fc3RhdGU9PT1oYT9CKGEsYi5fcmVzdWx0KTpDKGIsdm9pZCAwLGZ1bmN0aW9uKGIpe3JldHVybiB5KGEsYil9LGZ1bmN0aW9uKGIpe3JldHVybiBCKGEsYil9KX1mdW5jdGlvbiB4KGEsYixkKXtiLmNvbnN0cnVjdG9yPT09YS5jb25zdHJ1Y3RvciYmZD09PW8mJmIuY29uc3RydWN0b3IucmVzb2x2ZT09PXA/dyhhLGIpOmQ9PT1pYT8oQihhLGlhLmVycm9yKSxpYS5lcnJvcj1udWxsKTp2b2lkIDA9PT1kP0EoYSxiKTpjKGQpP3YoYSxiLGQpOkEoYSxiKX1mdW5jdGlvbiB5KGIsYyl7Yj09PWM/QihiLHIoKSk6YShjKT94KGIsYyx0KGMpKTpBKGIsYyl9ZnVuY3Rpb24geihhKXthLl9vbmVycm9yJiZhLl9vbmVycm9yKGEuX3Jlc3VsdCksRChhKX1mdW5jdGlvbiBBKGEsYil7YS5fc3RhdGU9PT1mYSYmKGEuX3Jlc3VsdD1iLGEuX3N0YXRlPWdhLDAhPT1hLl9zdWJzY3JpYmVycy5sZW5ndGgmJlkoRCxhKSl9ZnVuY3Rpb24gQihhLGIpe2EuX3N0YXRlPT09ZmEmJihhLl9zdGF0ZT1oYSxhLl9yZXN1bHQ9YixZKHosYSkpfWZ1bmN0aW9uIEMoYSxiLGMsZCl7dmFyIGU9YS5fc3Vic2NyaWJlcnMsZj1lLmxlbmd0aDthLl9vbmVycm9yPW51bGwsZVtmXT1iLGVbZitnYV09YyxlW2YraGFdPWQsMD09PWYmJmEuX3N0YXRlJiZZKEQsYSl9ZnVuY3Rpb24gRChhKXt2YXIgYj1hLl9zdWJzY3JpYmVycyxjPWEuX3N0YXRlO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBkPXZvaWQgMCxlPXZvaWQgMCxmPWEuX3Jlc3VsdCxnPTA7ZzxiLmxlbmd0aDtnKz0zKWQ9YltnXSxlPWJbZytjXSxkP0coYyxkLGUsZik6ZShmKTthLl9zdWJzY3JpYmVycy5sZW5ndGg9MH19ZnVuY3Rpb24gRSgpe3RoaXMuZXJyb3I9bnVsbH1mdW5jdGlvbiBGKGEsYil7dHJ5e3JldHVybiBhKGIpfWNhdGNoKGEpe3JldHVybiBqYS5lcnJvcj1hLGphfX1mdW5jdGlvbiBHKGEsYixkLGUpe3ZhciBmPWMoZCksZz12b2lkIDAsaD12b2lkIDAsaT12b2lkIDAsaj12b2lkIDA7aWYoZil7aWYoZz1GKGQsZSksZz09PWphPyhqPSEwLGg9Zy5lcnJvcixnLmVycm9yPW51bGwpOmk9ITAsYj09PWcpcmV0dXJuIHZvaWQgQihiLHMoKSl9ZWxzZSBnPWUsaT0hMDtiLl9zdGF0ZSE9PWZhfHwoZiYmaT95KGIsZyk6aj9CKGIsaCk6YT09PWdhP0EoYixnKTphPT09aGEmJkIoYixnKSl9ZnVuY3Rpb24gSChhLGIpe3RyeXtiKGZ1bmN0aW9uKGIpe3koYSxiKX0sZnVuY3Rpb24oYil7QihhLGIpfSl9Y2F0Y2goYil7QihhLGIpfX1mdW5jdGlvbiBJKCl7cmV0dXJuIGthKyt9ZnVuY3Rpb24gSihhKXthW2VhXT1rYSsrLGEuX3N0YXRlPXZvaWQgMCxhLl9yZXN1bHQ9dm9pZCAwLGEuX3N1YnNjcmliZXJzPVtdfWZ1bmN0aW9uIEsoYSxiKXt0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yPWEsdGhpcy5wcm9taXNlPW5ldyBhKHEpLHRoaXMucHJvbWlzZVtlYV18fEoodGhpcy5wcm9taXNlKSxVKGIpPyh0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLl9yZW1haW5pbmc9Yi5sZW5ndGgsdGhpcy5fcmVzdWx0PW5ldyBBcnJheSh0aGlzLmxlbmd0aCksMD09PXRoaXMubGVuZ3RoP0EodGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCk6KHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RofHwwLHRoaXMuX2VudW1lcmF0ZShiKSwwPT09dGhpcy5fcmVtYWluaW5nJiZBKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpKSk6Qih0aGlzLnByb21pc2UsTCgpKX1mdW5jdGlvbiBMKCl7cmV0dXJuIG5ldyBFcnJvcihcIkFycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheVwiKX1mdW5jdGlvbiBNKGEpe3JldHVybiBuZXcgSyh0aGlzLGEpLnByb21pc2V9ZnVuY3Rpb24gTihhKXt2YXIgYj10aGlzO3JldHVybiBuZXcgYihVKGEpP2Z1bmN0aW9uKGMsZCl7Zm9yKHZhciBlPWEubGVuZ3RoLGY9MDtmPGU7ZisrKWIucmVzb2x2ZShhW2ZdKS50aGVuKGMsZCl9OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIobmV3IFR5cGVFcnJvcihcIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS5cIikpfSl9ZnVuY3Rpb24gTyhhKXt2YXIgYj10aGlzLGM9bmV3IGIocSk7cmV0dXJuIEIoYyxhKSxjfWZ1bmN0aW9uIFAoKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvclwiKX1mdW5jdGlvbiBRKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKX1mdW5jdGlvbiBSKGEpe3RoaXNbZWFdPUkoKSx0aGlzLl9yZXN1bHQ9dGhpcy5fc3RhdGU9dm9pZCAwLHRoaXMuX3N1YnNjcmliZXJzPVtdLHEhPT1hJiYoXCJmdW5jdGlvblwiIT10eXBlb2YgYSYmUCgpLHRoaXMgaW5zdGFuY2VvZiBSP0godGhpcyxhKTpRKCkpfWZ1bmN0aW9uIFMoKXt2YXIgYT12b2lkIDA7aWYodm9pZCAwIT09ZilhPWY7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZilhPXNlbGY7ZWxzZSB0cnl7YT1GdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goYSl7dGhyb3cgbmV3IEVycm9yKFwicG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50XCIpfXZhciBiPWEuUHJvbWlzZTtpZihiKXt2YXIgYz1udWxsO3RyeXtjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChiLnJlc29sdmUoKSl9Y2F0Y2goYSl7fWlmKFwiW29iamVjdCBQcm9taXNlXVwiPT09YyYmIWIuY2FzdClyZXR1cm59YS5Qcm9taXNlPVJ9dmFyIFQ9dm9pZCAwO1Q9QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5OmZ1bmN0aW9uKGEpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKX07dmFyIFU9VCxWPTAsVz12b2lkIDAsWD12b2lkIDAsWT1mdW5jdGlvbihhLGIpe2NhW1ZdPWEsY2FbVisxXT1iLDI9PT0oVis9MikmJihYP1gobSk6ZGEoKSl9LFo9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwLCQ9Wnx8e30sXz0kLk11dGF0aW9uT2JzZXJ2ZXJ8fCQuV2ViS2l0TXV0YXRpb25PYnNlcnZlcixhYT1cInVuZGVmaW5lZFwiPT10eXBlb2Ygc2VsZiYmdm9pZCAwIT09ZSYmXCJbb2JqZWN0IHByb2Nlc3NdXCI9PT17fS50b1N0cmluZy5jYWxsKGUpLGJhPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGltcG9ydFNjcmlwdHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCxjYT1uZXcgQXJyYXkoMWUzKSxkYT12b2lkIDA7ZGE9YWE/aCgpOl8/aigpOmJhP2soKTp2b2lkIDA9PT1aJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBiP24oKTpsKCk7dmFyIGVhPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygxNiksZmE9dm9pZCAwLGdhPTEsaGE9MixpYT1uZXcgRSxqYT1uZXcgRSxrYT0wO3JldHVybiBLLnByb3RvdHlwZS5fZW51bWVyYXRlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wO3RoaXMuX3N0YXRlPT09ZmEmJmI8YS5sZW5ndGg7YisrKXRoaXMuX2VhY2hFbnRyeShhW2JdLGIpfSxLLnByb3RvdHlwZS5fZWFjaEVudHJ5PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcixkPWMucmVzb2x2ZTtpZihkPT09cCl7dmFyIGU9dChhKTtpZihlPT09byYmYS5fc3RhdGUhPT1mYSl0aGlzLl9zZXR0bGVkQXQoYS5fc3RhdGUsYixhLl9yZXN1bHQpO2Vsc2UgaWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aGlzLl9yZW1haW5pbmctLSx0aGlzLl9yZXN1bHRbYl09YTtlbHNlIGlmKGM9PT1SKXt2YXIgZj1uZXcgYyhxKTt4KGYsYSxlKSx0aGlzLl93aWxsU2V0dGxlQXQoZixiKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgYyhmdW5jdGlvbihiKXtyZXR1cm4gYihhKX0pLGIpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KGQoYSksYil9LEsucHJvdG90eXBlLl9zZXR0bGVkQXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMucHJvbWlzZTtkLl9zdGF0ZT09PWZhJiYodGhpcy5fcmVtYWluaW5nLS0sYT09PWhhP0IoZCxjKTp0aGlzLl9yZXN1bHRbYl09YyksMD09PXRoaXMuX3JlbWFpbmluZyYmQShkLHRoaXMuX3Jlc3VsdCl9LEsucHJvdG90eXBlLl93aWxsU2V0dGxlQXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO0MoYSx2b2lkIDAsZnVuY3Rpb24oYSl7cmV0dXJuIGMuX3NldHRsZWRBdChnYSxiLGEpfSxmdW5jdGlvbihhKXtyZXR1cm4gYy5fc2V0dGxlZEF0KGhhLGIsYSl9KX0sUi5hbGw9TSxSLnJhY2U9TixSLnJlc29sdmU9cCxSLnJlamVjdD1PLFIuX3NldFNjaGVkdWxlcj1kLFIuX3NldEFzYXA9ZyxSLl9hc2FwPVksUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlIsdGhlbjpvLGNhdGNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnRoZW4obnVsbCxhKX19LFIucG9seWZpbGw9UyxSLlByb21pc2U9UixSfSl9KS5jYWxsKHRoaXMsYihcIl9wcm9jZXNzXCIpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7X3Byb2Nlc3M6MTF9XSw1OltmdW5jdGlvbihiLGMsZCl7IWZ1bmN0aW9uKGIsZSl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSYmYS5hbWQpYShbXCJleHBvcnRzXCIsXCJtb2R1bGVcIl0sZSk7ZWxzZSBpZih2b2lkIDAhPT1kJiZ2b2lkIDAhPT1jKWUoZCxjKTtlbHNle3ZhciBmPXtleHBvcnRzOnt9fTtlKGYuZXhwb3J0cyxmKSxiLmZldGNoSnNvbnA9Zi5leHBvcnRzfX0odGhpcyxmdW5jdGlvbihhLGIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGMoKXtyZXR1cm5cImpzb25wX1wiK0RhdGUubm93KCkrXCJfXCIrTWF0aC5jZWlsKDFlNSpNYXRoLnJhbmRvbSgpKX1mdW5jdGlvbiBkKGEpe3RyeXtkZWxldGUgd2luZG93W2FdfWNhdGNoKGIpe3dpbmRvd1thXT12b2lkIDB9fWZ1bmN0aW9uIGUoYSl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSk7YiYmZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLnJlbW92ZUNoaWxkKGIpfWZ1bmN0aW9uIGYoYSl7dmFyIGI9YXJndW1lbnRzLmxlbmd0aDw9MXx8dm9pZCAwPT09YXJndW1lbnRzWzFdP3t9OmFyZ3VtZW50c1sxXSxmPWEsaD1iLnRpbWVvdXR8fGcudGltZW91dCxpPWIuanNvbnBDYWxsYmFja3x8Zy5qc29ucENhbGxiYWNrLGo9dm9pZCAwO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihnLGspe3ZhciBsPWIuanNvbnBDYWxsYmFja0Z1bmN0aW9ufHxjKCksbT1pK1wiX1wiK2w7d2luZG93W2xdPWZ1bmN0aW9uKGEpe2coe29rOiEwLGpzb246ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGEpfX0pLGomJmNsZWFyVGltZW91dChqKSxlKG0pLGQobCl9LGYrPS0xPT09Zi5pbmRleE9mKFwiP1wiKT9cIj9cIjpcIiZcIjt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO24uc2V0QXR0cmlidXRlKFwic3JjXCIsXCJcIitmK2krXCI9XCIrbCksYi5jaGFyc2V0JiZuLnNldEF0dHJpYnV0ZShcImNoYXJzZXRcIixiLmNoYXJzZXQpLG4uaWQ9bSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQobiksaj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ayhuZXcgRXJyb3IoXCJKU09OUCByZXF1ZXN0IHRvIFwiK2ErXCIgdGltZWQgb3V0XCIpKSxkKGwpLGUobSksd2luZG93W2xdPWZ1bmN0aW9uKCl7ZChsKX19LGgpLG4ub25lcnJvcj1mdW5jdGlvbigpe2sobmV3IEVycm9yKFwiSlNPTlAgcmVxdWVzdCB0byBcIithK1wiIGZhaWxlZFwiKSksZChsKSxlKG0pLGomJmNsZWFyVGltZW91dChqKX19KX12YXIgZz17dGltZW91dDo1ZTMsanNvbnBDYWxsYmFjazpcImNhbGxiYWNrXCIsanNvbnBDYWxsYmFja0Z1bmN0aW9uOm51bGx9O2IuZXhwb3J0cz1mfSl9LHt9XSw2OltmdW5jdGlvbihiLGMsZCl7dmFyIGU9ZXx8ZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7aWYoISh2b2lkIDA9PT1hfHxcInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiYvTVNJRSBbMS05XVxcLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkpe3ZhciBiPWEuZG9jdW1lbnQsYz1mdW5jdGlvbigpe3JldHVybiBhLlVSTHx8YS53ZWJraXRVUkx8fGF9LGQ9Yi5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsXCJhXCIpLGU9XCJkb3dubG9hZFwiaW4gZCxmPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIik7YS5kaXNwYXRjaEV2ZW50KGIpfSxnPS9jb25zdHJ1Y3Rvci9pLnRlc3QoYS5IVE1MRWxlbWVudCl8fGEuc2FmYXJpLGg9L0NyaU9TXFwvW1xcZF0rLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGk9ZnVuY3Rpb24oYil7KGEuc2V0SW1tZWRpYXRlfHxhLnNldFRpbWVvdXQpKGZ1bmN0aW9uKCl7dGhyb3cgYn0sMCl9LGo9XCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIixrPTRlNCxsPWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKCl7XCJzdHJpbmdcIj09dHlwZW9mIGE/YygpLnJldm9rZU9iamVjdFVSTChhKTphLnJlbW92ZSgpfTtzZXRUaW1lb3V0KGIsayl9LG09ZnVuY3Rpb24oYSxiLGMpe2I9W10uY29uY2F0KGIpO2Zvcih2YXIgZD1iLmxlbmd0aDtkLS07KXt2YXIgZT1hW1wib25cIitiW2RdXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKXRyeXtlLmNhbGwoYSxjfHxhKX1jYXRjaChhKXtpKGEpfX19LG49ZnVuY3Rpb24oYSl7cmV0dXJuL15cXHMqKD86dGV4dFxcL1xcUyp8YXBwbGljYXRpb25cXC94bWx8XFxTKlxcL1xcUypcXCt4bWwpXFxzKjsuKmNoYXJzZXRcXHMqPVxccyp1dGYtOC9pLnRlc3QoYS50eXBlKT9uZXcgQmxvYihbU3RyaW5nLmZyb21DaGFyQ29kZSg2NTI3OSksYV0se3R5cGU6YS50eXBlfSk6YX0sbz1mdW5jdGlvbihiLGksayl7a3x8KGI9bihiKSk7dmFyIG8scD10aGlzLHE9Yi50eXBlLHI9cT09PWoscz1mdW5jdGlvbigpe20ocCxcIndyaXRlc3RhcnQgcHJvZ3Jlc3Mgd3JpdGUgd3JpdGVlbmRcIi5zcGxpdChcIiBcIikpfSx0PWZ1bmN0aW9uKCl7aWYoKGh8fHImJmcpJiZhLkZpbGVSZWFkZXIpe3ZhciBkPW5ldyBGaWxlUmVhZGVyO3JldHVybiBkLm9ubG9hZGVuZD1mdW5jdGlvbigpe3ZhciBiPWg/ZC5yZXN1bHQ6ZC5yZXN1bHQucmVwbGFjZSgvXmRhdGE6W147XSo7LyxcImRhdGE6YXR0YWNobWVudC9maWxlO1wiKTthLm9wZW4oYixcIl9ibGFua1wiKXx8KGEubG9jYXRpb24uaHJlZj1iKSxiPXZvaWQgMCxwLnJlYWR5U3RhdGU9cC5ET05FLHMoKX0sZC5yZWFkQXNEYXRhVVJMKGIpLHZvaWQocC5yZWFkeVN0YXRlPXAuSU5JVCl9aWYob3x8KG89YygpLmNyZWF0ZU9iamVjdFVSTChiKSkscilhLmxvY2F0aW9uLmhyZWY9bztlbHNle2Eub3BlbihvLFwiX2JsYW5rXCIpfHwoYS5sb2NhdGlvbi5ocmVmPW8pfXAucmVhZHlTdGF0ZT1wLkRPTkUscygpLGwobyl9O2lmKHAucmVhZHlTdGF0ZT1wLklOSVQsZSlyZXR1cm4gbz1jKCkuY3JlYXRlT2JqZWN0VVJMKGIpLHZvaWQgc2V0VGltZW91dChmdW5jdGlvbigpe2QuaHJlZj1vLGQuZG93bmxvYWQ9aSxmKGQpLHMoKSxsKG8pLHAucmVhZHlTdGF0ZT1wLkRPTkV9KTt0KCl9LHA9by5wcm90b3R5cGUscT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIG5ldyBvKGEsYnx8YS5uYW1lfHxcImRvd25sb2FkXCIsYyl9O3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iP2Z1bmN0aW9uKGEsYixjKXtyZXR1cm4gYj1ifHxhLm5hbWV8fFwiZG93bmxvYWRcIixjfHwoYT1uKGEpKSxuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihhLGIpfToocC5hYm9ydD1mdW5jdGlvbigpe30scC5yZWFkeVN0YXRlPXAuSU5JVD0wLHAuV1JJVElORz0xLHAuRE9ORT0yLHAuZXJyb3I9cC5vbndyaXRlc3RhcnQ9cC5vbnByb2dyZXNzPXAub253cml0ZT1wLm9uYWJvcnQ9cC5vbmVycm9yPXAub253cml0ZWVuZD1udWxsLHEpfX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGZ8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd3x8dGhpcy5jb250ZW50KTt2b2lkIDAhPT1jJiZjLmV4cG9ydHM/Yy5leHBvcnRzLnNhdmVBcz1lOnZvaWQgMCE9PWEmJm51bGwhPT1hJiZudWxsIT09YS5hbWQmJmEoXCJGaWxlU2F2ZXIuanNcIixmdW5jdGlvbigpe3JldHVybiBlfSl9LHt9XSw3OltmdW5jdGlvbihhLGIsYyl7Yy5yZWFkPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoPTgqZS1kLTEsaT0oMTw8aCktMSxqPWk+PjEsaz0tNyxsPWM/ZS0xOjAsbT1jPy0xOjEsbj1hW2IrbF07Zm9yKGwrPW0sZj1uJigxPDwtayktMSxuPj49LWssays9aDtrPjA7Zj0yNTYqZithW2IrbF0sbCs9bSxrLT04KTtmb3IoZz1mJigxPDwtayktMSxmPj49LWssays9ZDtrPjA7Zz0yNTYqZythW2IrbF0sbCs9bSxrLT04KTtpZigwPT09ZilmPTEtajtlbHNle2lmKGY9PT1pKXJldHVybiBnP05hTjoxLzAqKG4/LTE6MSk7Zys9TWF0aC5wb3coMixkKSxmLT1qfXJldHVybihuPy0xOjEpKmcqTWF0aC5wb3coMixmLWQpfSxjLndyaXRlPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZyxoLGksaj04KmYtZS0xLGs9KDE8PGopLTEsbD1rPj4xLG09MjM9PT1lP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxuPWQ/MDpmLTEsbz1kPzE6LTEscD1iPDB8fDA9PT1iJiYxL2I8MD8xOjA7Zm9yKGI9TWF0aC5hYnMoYiksaXNOYU4oYil8fGI9PT0xLzA/KGg9aXNOYU4oYik/MTowLGc9ayk6KGc9TWF0aC5mbG9vcihNYXRoLmxvZyhiKS9NYXRoLkxOMiksYiooaT1NYXRoLnBvdygyLC1nKSk8MSYmKGctLSxpKj0yKSxiKz1nK2w+PTE/bS9pOm0qTWF0aC5wb3coMiwxLWwpLGIqaT49MiYmKGcrKyxpLz0yKSxnK2w+PWs/KGg9MCxnPWspOmcrbD49MT8oaD0oYippLTEpKk1hdGgucG93KDIsZSksZys9bCk6KGg9YipNYXRoLnBvdygyLGwtMSkqTWF0aC5wb3coMixlKSxnPTApKTtlPj04O2FbYytuXT0yNTUmaCxuKz1vLGgvPTI1NixlLT04KTtmb3IoZz1nPDxlfGgsais9ZTtqPjA7YVtjK25dPTI1NSZnLG4rPW8sZy89MjU2LGotPTgpO2FbYytuLW9dfD0xMjgqcH19LHt9XSw4OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9e30udG9TdHJpbmc7Yi5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09ZC5jYWxsKGEpfX0se31dLDk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7cmV0dXJuIGEuYj09PWIuYiYmYS5hPT09Yi5hfWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gYS5iPGIuYnx8YS5iPT09Yi5iJiZhLmE8PWIuYX1mdW5jdGlvbiBmKGEsYixjKXt2YXIgZD1iLmItYS5iLGU9Yy5iLWIuYlxuO3JldHVybiAwPGQrZT9kPGU/Yi5hLWEuYStkLyhkK2UpKihhLmEtYy5hKTpiLmEtYy5hK2UvKGQrZSkqKGMuYS1hLmEpOjB9ZnVuY3Rpb24gZyhhLGIsYyl7dmFyIGQ9Yi5iLWEuYixlPWMuYi1iLmI7cmV0dXJuIDA8ZCtlPyhiLmEtYy5hKSpkKyhiLmEtYS5hKSplOjB9ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhLmE8Yi5hfHxhLmE9PT1iLmEmJmEuYjw9Yi5ifWZ1bmN0aW9uIGkoYSxiLGMpe3ZhciBkPWIuYS1hLmEsZT1jLmEtYi5hO3JldHVybiAwPGQrZT9kPGU/Yi5iLWEuYitkLyhkK2UpKihhLmItYy5iKTpiLmItYy5iK2UvKGQrZSkqKGMuYi1hLmIpOjB9ZnVuY3Rpb24gaihhLGIsYyl7dmFyIGQ9Yi5hLWEuYSxlPWMuYS1iLmE7cmV0dXJuIDA8ZCtlPyhiLmItYy5iKSpkKyhiLmItYS5iKSplOjB9ZnVuY3Rpb24gayhhKXtyZXR1cm4gZShhLmIuYSxhLmEpfWZ1bmN0aW9uIGwoYSl7cmV0dXJuIGUoYS5hLGEuYi5hKX1mdW5jdGlvbiBtKGEsYixjLGQpe3JldHVybiBhPTA+YT8wOmEsYz0wPmM/MDpjLGE8PWM/MD09PWM/KGIrZCkvMjpiK2EvKGErYykqKGQtYik6ZCtjLyhhK2MpKihiLWQpfWZ1bmN0aW9uIG4oYSl7dmFyIGI9cyhhLmIpO3JldHVybiB1KGIsYS5jKSx1KGIuYixhLmMpLHYoYixhLmEpLGJ9ZnVuY3Rpb24gbyhhLGIpe3ZhciBjPSExLGQ9ITE7YSE9PWImJihiLmEhPT1hLmEmJihkPSEwLHgoYi5hLGEuYSkpLGIuZCE9PWEuZCYmKGM9ITAseShiLmQsYS5kKSksdChiLGEpLGR8fCh1KGIsYS5hKSxhLmEuYz1hKSxjfHwodihiLGEuZCksYS5kLmE9YSkpfWZ1bmN0aW9uIHAoYSl7dmFyIGI9YS5iLGM9ITE7YS5kIT09YS5iLmQmJihjPSEwLHkoYS5kLGEuYi5kKSksYS5jPT09YT94KGEuYSxudWxsKTooYS5iLmQuYT0kKGEpLGEuYS5jPWEuYyx0KGEsJChhKSksY3x8dihhLGEuZCkpLGIuYz09PWI/KHgoYi5hLG51bGwpLHkoYi5kLG51bGwpKTooYS5kLmE9JChiKSxiLmEuYz1iLmMsdChiLCQoYikpKSx3KGEpfWZ1bmN0aW9uIHEoYSl7dmFyIGI9cyhhKSxjPWIuYjtyZXR1cm4gdChiLGEuZSksYi5hPWEuYi5hLHUoYyxiLmEpLGIuZD1jLmQ9YS5kLGI9Yi5iLHQoYS5iLCQoYS5iKSksdChhLmIsYiksYS5iLmE9Yi5hLGIuYi5hLmM9Yi5iLGIuYi5kPWEuYi5kLGIuZj1hLmYsYi5iLmY9YS5iLmYsYn1mdW5jdGlvbiByKGEsYil7dmFyIGM9ITEsZD1zKGEpLGU9ZC5iO3JldHVybiBiLmQhPT1hLmQmJihjPSEwLHkoYi5kLGEuZCkpLHQoZCxhLmUpLHQoZSxiKSxkLmE9YS5iLmEsZS5hPWIuYSxkLmQ9ZS5kPWEuZCxhLmQuYT1lLGN8fHYoZCxhLmQpLGR9ZnVuY3Rpb24gcyhhKXt2YXIgYj1uZXcgWixjPW5ldyBaLGQ9YS5iLmg7cmV0dXJuIGMuaD1kLGQuYi5oPWIsYi5oPWEsYS5iLmg9YyxiLmI9YyxiLmM9YixiLmU9YyxjLmI9YixjLmM9YyxjLmU9Yn1mdW5jdGlvbiB0KGEsYil7dmFyIGM9YS5jLGQ9Yi5jO2MuYi5lPWIsZC5iLmU9YSxhLmM9ZCxiLmM9Y31mdW5jdGlvbiB1KGEsYil7dmFyIGM9Yi5mLGQ9bmV3IGFhKGIsYyk7Yy5lPWQsYi5mPWQsYz1kLmM9YTtkb3tjLmE9ZCxjPWMuY313aGlsZShjIT09YSl9ZnVuY3Rpb24gdihhLGIpe3ZhciBjPWIuZCxkPW5ldyBZKGIsYyk7Yy5iPWQsYi5kPWQsZC5hPWEsZC5jPWIuYyxjPWE7ZG97Yy5kPWQsYz1jLmV9d2hpbGUoYyE9PWEpfWZ1bmN0aW9uIHcoYSl7dmFyIGI9YS5oO2E9YS5iLmgsYi5iLmg9YSxhLmIuaD1ifWZ1bmN0aW9uIHgoYSxiKXt2YXIgYz1hLmMsZD1jO2Rve2QuYT1iLGQ9ZC5jfXdoaWxlKGQhPT1jKTtjPWEuZixkPWEuZSxkLmY9YyxjLmU9ZH1mdW5jdGlvbiB5KGEsYil7dmFyIGM9YS5hLGQ9Yztkb3tkLmQ9YixkPWQuZX13aGlsZShkIT09Yyk7Yz1hLmQsZD1hLmIsZC5kPWMsYy5iPWR9ZnVuY3Rpb24geihhKXt2YXIgYj0wO3JldHVybiBNYXRoLmFicyhhWzFdKT5NYXRoLmFicyhhWzBdKSYmKGI9MSksTWF0aC5hYnMoYVsyXSk+TWF0aC5hYnMoYVtiXSkmJihiPTIpLGJ9ZnVuY3Rpb24gQShhLGIpe2EuZis9Yi5mLGEuYi5mKz1iLmIuZn1mdW5jdGlvbiBCKGEsYixjKXtyZXR1cm4gYT1hLmEsYj1iLmEsYz1jLmEsYi5iLmE9PT1hP2MuYi5hPT09YT9lKGIuYSxjLmEpPzA+PWcoYy5iLmEsYi5hLGMuYSk6MDw9ZyhiLmIuYSxjLmEsYi5hKTowPj1nKGMuYi5hLGEsYy5hKTpjLmIuYT09PWE/MDw9ZyhiLmIuYSxhLGIuYSk6KGI9ZihiLmIuYSxhLGIuYSksYT1mKGMuYi5hLGEsYy5hKSxiPj1hKX1mdW5jdGlvbiBDKGEpe2EuYS5pPW51bGw7dmFyIGI9YS5lO2IuYS5jPWIuYyxiLmMuYT1iLmEsYS5lPW51bGx9ZnVuY3Rpb24gRChhLGIpe3AoYS5hKSxhLmM9ITEsYS5hPWIsYi5pPWF9ZnVuY3Rpb24gRShhKXt2YXIgYj1hLmEuYTtkb3thPW9hKGEpfXdoaWxlKGEuYS5hPT09Yik7cmV0dXJuIGEuYyYmKGI9cihuYShhKS5hLmIsYS5hLmUpLEQoYSxiKSxhPW9hKGEpKSxhfWZ1bmN0aW9uIEYoYSxiLGMpe3ZhciBkPW5ldyBtYTtyZXR1cm4gZC5hPWMsZC5lPVQoYS5mLGIuZSxkKSxjLmk9ZH1mdW5jdGlvbiBHKGEsYil7c3dpdGNoKGEucyl7Y2FzZSAxMDAxMzA6cmV0dXJuIDAhPSgxJmIpO2Nhc2UgMTAwMTMxOnJldHVybiAwIT09YjtjYXNlIDEwMDEzMjpyZXR1cm4gMDxiO2Nhc2UgMTAwMTMzOnJldHVybiAwPmI7Y2FzZSAxMDAxMzQ6cmV0dXJuIDI8PWJ8fC0yPj1ifXJldHVybiExfWZ1bmN0aW9uIEgoYSl7dmFyIGI9YS5hLGM9Yi5kO2MuYz1hLmQsYy5hPWIsQyhhKX1mdW5jdGlvbiBJKGEsYixjKXtmb3IoYT1iLGI9Yi5hO2EhPT1jOyl7YS5jPSExO3ZhciBkPW5hKGEpLGU9ZC5hO2lmKGUuYSE9PWIuYSl7aWYoIWQuYyl7SChhKTticmVha31lPXIoYi5jLmIsZS5iKSxEKGQsZSl9Yi5jIT09ZSYmKG8oJChlKSxlKSxvKGIsZSkpLEgoYSksYj1kLmEsYT1kfXJldHVybiBifWZ1bmN0aW9uIEooYSxiLGMsZCxlLGYpe3ZhciBnPSEwO2Rve0YoYSxiLGMuYiksYz1jLmN9d2hpbGUoYyE9PWQpO2ZvcihudWxsPT09ZSYmKGU9bmEoYikuYS5iLmMpO2Q9bmEoYiksYz1kLmEuYixjLmE9PT1lLmE7KWMuYyE9PWUmJihvKCQoYyksYyksbygkKGUpLGMpKSxkLmY9Yi5mLWMuZixkLmQ9RyhhLGQuZiksYi5iPSEwLCFnJiZOKGEsYikmJihBKGMsZSksQyhiKSxwKGUpKSxnPSExLGI9ZCxlPWM7Yi5iPSEwLGYmJlAoYSxiKX1mdW5jdGlvbiBLKGEsYixjLGQsZSl7dmFyIGY9W2IuZ1swXSxiLmdbMV0sYi5nWzJdXTtiLmQ9bnVsbCxiLmQ9YS5vP2EubyhmLGMsZCxhLmMpfHxudWxsOm51bGwsbnVsbD09PWIuZCYmKGU/YS5ufHwoWChhLDEwMDE1NiksYS5uPSEwKTpiLmQ9Y1swXSl9ZnVuY3Rpb24gTChhLGIsYyl7dmFyIGQ9W251bGwsbnVsbCxudWxsLG51bGxdO2RbMF09Yi5hLmQsZFsxXT1jLmEuZCxLKGEsYi5hLGQsWy41LC41LDAsMF0sITEpLG8oYixjKX1mdW5jdGlvbiBNKGEsYixjLGQsZSl7dmFyIGY9TWF0aC5hYnMoYi5iLWEuYikrTWF0aC5hYnMoYi5hLWEuYSksZz1NYXRoLmFicyhjLmItYS5iKStNYXRoLmFicyhjLmEtYS5hKSxoPWUrMTtkW2VdPS41KmcvKGYrZyksZFtoXT0uNSpmLyhmK2cpLGEuZ1swXSs9ZFtlXSpiLmdbMF0rZFtoXSpjLmdbMF0sYS5nWzFdKz1kW2VdKmIuZ1sxXStkW2hdKmMuZ1sxXSxhLmdbMl0rPWRbZV0qYi5nWzJdK2RbaF0qYy5nWzJdfWZ1bmN0aW9uIE4oYSxiKXt2YXIgYz1uYShiKSxmPWIuYSxoPWMuYTtpZihlKGYuYSxoLmEpKXtpZigwPGcoaC5iLmEsZi5hLGguYSkpcmV0dXJuITE7aWYoZChmLmEsaC5hKSl7aWYoZi5hIT09aC5hKXt2YXIgYz1hLmUsaT1mLmEuaDtpZigwPD1pKXt2YXIgYz1jLmIsaj1jLmQsaz1jLmUsbD1jLmMsbT1sW2ldO2pbbV09altjLmFdLGxbalttXV09bSxtPD0tLWMuYSYmKDE+PW0/a2EoYyxtKTplKGtbalttPj4xXV0sa1tqW21dXSk/a2EoYyxtKTpsYShjLG0pKSxrW2ldPW51bGwsbFtpXT1jLmIsYy5iPWl9ZWxzZSBmb3IoYy5jWy0oaSsxKV09bnVsbDswPGMuYSYmbnVsbD09PWMuY1tjLmRbYy5hLTFdXTspLS1jLmE7TChhLCQoaCksZil9fWVsc2UgcShoLmIpLG8oZiwkKGgpKSxiLmI9Yy5iPSEwfWVsc2V7aWYoMD5nKGYuYi5hLGguYSxmLmEpKXJldHVybiExO29hKGIpLmI9Yi5iPSEwLHEoZi5iKSxvKCQoaCksZil9cmV0dXJuITB9ZnVuY3Rpb24gTyhhLGIpe3ZhciBjPW5hKGIpLGs9Yi5hLGw9Yy5hLG49ay5hLHA9bC5hLHI9ay5iLmEscz1sLmIuYSx0PW5ldyBhYTtpZihnKHIsYS5hLG4pLGcocyxhLmEscCksbj09PXB8fE1hdGgubWluKG4uYSxyLmEpPk1hdGgubWF4KHAuYSxzLmEpKXJldHVybiExO2lmKGUobixwKSl7aWYoMDxnKHMsbixwKSlyZXR1cm4hMX1lbHNlIGlmKDA+ZyhyLHAsbikpcmV0dXJuITE7dmFyIHUsdix3PXIseD1uLHk9cyx6PXA7aWYoZSh3LHgpfHwodT13LHc9eCx4PXUpLGUoeSx6KXx8KHU9eSx5PXosej11KSxlKHcseSl8fCh1PXcsdz15LHk9dSx1PXgseD16LHo9dSksZSh5LHgpP2UoeCx6KT8odT1mKHcseSx4KSx2PWYoeSx4LHopLDA+dSt2JiYodT0tdSx2PS12KSx0LmI9bSh1LHkuYix2LHguYikpOih1PWcodyx5LHgpLHY9LWcodyx6LHgpLDA+dSt2JiYodT0tdSx2PS12KSx0LmI9bSh1LHkuYix2LHouYikpOnQuYj0oeS5iK3guYikvMixoKHcseCl8fCh1PXcsdz14LHg9dSksaCh5LHopfHwodT15LHk9eix6PXUpLGgodyx5KXx8KHU9dyx3PXkseT11LHU9eCx4PXosej11KSxoKHkseCk/aCh4LHopPyh1PWkodyx5LHgpLHY9aSh5LHgseiksMD51K3YmJih1PS11LHY9LXYpLHQuYT1tKHUseS5hLHYseC5hKSk6KHU9aih3LHkseCksdj0taih3LHoseCksMD51K3YmJih1PS11LHY9LXYpLHQuYT1tKHUseS5hLHYsei5hKSk6dC5hPSh5LmEreC5hKS8yLGUodCxhLmEpJiYodC5iPWEuYS5iLHQuYT1hLmEuYSksdz1lKG4scCk/bjpwLGUodyx0KSYmKHQuYj13LmIsdC5hPXcuYSksZCh0LG4pfHxkKHQscCkpcmV0dXJuIE4oYSxiKSwhMTtpZighZChyLGEuYSkmJjA8PWcocixhLmEsdCl8fCFkKHMsYS5hKSYmMD49ZyhzLGEuYSx0KSl7aWYocz09PWEuYSlyZXR1cm4gcShrLmIpLG8obC5iLGspLGI9RShiKSxrPW5hKGIpLmEsSShhLG5hKGIpLGMpLEooYSxiLCQoayksayxrLCEwKSwhMDtpZihyPT09YS5hKXtxKGwuYiksbyhrLmUsJChsKSksbj1jPWIscD1uLmEuYi5hO2Rve249b2Eobil9d2hpbGUobi5hLmIuYT09PXApO3JldHVybiBiPW4sbj1uYShiKS5hLmIuYyxjLmE9JChsKSxsPUkoYSxjLG51bGwpLEooYSxiLGwuYyxrLmIuYyxuLCEwKSwhMH1yZXR1cm4gMDw9ZyhyLGEuYSx0KSYmKG9hKGIpLmI9Yi5iPSEwLHEoay5iKSxrLmEuYj1hLmEuYixrLmEuYT1hLmEuYSksMD49ZyhzLGEuYSx0KSYmKGIuYj1jLmI9ITAscShsLmIpLGwuYS5iPWEuYS5iLGwuYS5hPWEuYS5hKSwhMX1yZXR1cm4gcShrLmIpLHEobC5iKSxvKCQobCksayksay5hLmI9dC5iLGsuYS5hPXQuYSxrLmEuaD1kYShhLmUsay5hKSxrPWsuYSxsPVswLDAsMCwwXSx0PVtuLmQsci5kLHAuZCxzLmRdLGsuZ1swXT1rLmdbMV09ay5nWzJdPTAsTShrLG4scixsLDApLE0oayxwLHMsbCwyKSxLKGEsayx0LGwsITApLG9hKGIpLmI9Yi5iPWMuYj0hMCwhMX1mdW5jdGlvbiBQKGEsYil7Zm9yKHZhciBjPW5hKGIpOzspe2Zvcig7Yy5iOyliPWMsYz1uYShjKTtpZighYi5iJiYoYz1iLG51bGw9PT0oYj1vYShiKSl8fCFiLmIpKWJyZWFrO2IuYj0hMTt2YXIgZCxmPWIuYSxoPWMuYTtpZihkPWYuYi5hIT09aC5iLmEpYTp7ZD1iO3ZhciBpPW5hKGQpLGo9ZC5hLGs9aS5hLGw9dm9pZCAwO2lmKGUoai5iLmEsay5iLmEpKXtpZigwPmcoai5iLmEsay5iLmEsai5hKSl7ZD0hMTticmVhayBhfW9hKGQpLmI9ZC5iPSEwLGw9cShqKSxvKGsuYixsKSxsLmQuYz1kLmR9ZWxzZXtpZigwPGcoay5iLmEsai5iLmEsay5hKSl7ZD0hMTticmVhayBhfWQuYj1pLmI9ITAsbD1xKGspLG8oai5lLGsuYiksbC5iLmQuYz1kLmR9ZD0hMH1pZihkJiYoYy5jPyhDKGMpLHAoaCksYz1uYShiKSxoPWMuYSk6Yi5jJiYoQyhiKSxwKGYpLGI9b2EoYyksZj1iLmEpKSxmLmEhPT1oLmEpaWYoZi5iLmE9PT1oLmIuYXx8Yi5jfHxjLmN8fGYuYi5hIT09YS5hJiZoLmIuYSE9PWEuYSlOKGEsYik7ZWxzZSBpZihPKGEsYikpYnJlYWs7Zi5hPT09aC5hJiZmLmIuYT09PWguYi5hJiYoQShoLGYpLEMoYikscChmKSxiPW9hKGMpKX19ZnVuY3Rpb24gUShhLGIpe2EuYT1iO2Zvcih2YXIgYz1iLmM7bnVsbD09PWMuaTspaWYoKGM9Yy5jKT09PWIuYyl7dmFyIGM9YSxmPWIsaD1uZXcgbWE7aC5hPWYuYy5iO3ZhciBpPWMuZixqPWkuYTtkb3tqPWouYX13aGlsZShudWxsIT09ai5iJiYhaS5jKGkuYixoLGouYikpO3ZhciBpPWouYixrPW5hKGkpLGg9aS5hLGo9ay5hO2lmKDA9PT1nKGguYi5hLGYsaC5hKSloPWkuYSxkKGguYSxmKXx8ZChoLmIuYSxmKXx8KHEoaC5iKSxpLmMmJihwKGguYyksaS5jPSExKSxvKGYuYyxoKSxRKGMsZikpO2Vsc2V7dmFyIGw9ZShqLmIuYSxoLmIuYSk/aTprLGs9dm9pZCAwO2kuZHx8bC5jPyhrPWw9PT1pP3IoZi5jLmIsaC5lKTpyKGouYi5jLmIsZi5jKS5iLGwuYz9EKGwsayk6KGg9YyxpPUYoYyxpLGspLGkuZj1vYShpKS5mK2kuYS5mLGkuZD1HKGgsaS5mKSksUShjLGYpKTpKKGMsaSxmLmMsZi5jLG51bGwsITApfXJldHVybn1pZihjPUUoYy5pKSxoPW5hKGMpLGk9aC5hLGg9SShhLGgsbnVsbCksaC5jPT09aSl7dmFyIGk9aCxoPWkuYyxqPW5hKGMpLGs9Yy5hLGw9ai5hLG09ITE7ay5iLmEhPT1sLmIuYSYmTyhhLGMpLGQoay5hLGEuYSkmJihvKCQoaCksayksYz1FKGMpLGg9bmEoYykuYSxJKGEsbmEoYyksaiksbT0hMCksZChsLmEsYS5hKSYmKG8oaSwkKGwpKSxpPUkoYSxqLG51bGwpLG09ITApLG0/SihhLGMsaS5jLGgsaCwhMCk6KGY9ZShsLmEsay5hKT8kKGwpOmssZj1yKGkuYy5iLGYpLEooYSxjLGYsZi5jLGYuYywhMSksZi5iLmkuYz0hMCxQKGEsYykpfWVsc2UgSihhLGMsaC5jLGksaSwhMCl9ZnVuY3Rpb24gUihhLGIpe3ZhciBjPW5ldyBtYSxkPW4oYS5iKTtkLmEuYj1xYSxkLmEuYT1iLGQuYi5hLmI9LXFhLGQuYi5hLmE9YixhLmE9ZC5iLmEsYy5hPWQsYy5mPTAsYy5kPSExLGMuYz0hMSxjLmg9ITAsYy5iPSExLGQ9YS5mLGQ9VChkLGQuYSxjKSxjLmU9ZH1mdW5jdGlvbiBTKGEpe3RoaXMuYT1uZXcgVSx0aGlzLmI9YSx0aGlzLmM9Qn1mdW5jdGlvbiBUKGEsYixjKXtkb3tiPWIuY313aGlsZShudWxsIT09Yi5iJiYhYS5jKGEuYixiLmIsYykpO3JldHVybiBhPW5ldyBVKGMsYi5hLGIpLGIuYS5jPWEsYi5hPWF9ZnVuY3Rpb24gVShhLGIsYyl7dGhpcy5iPWF8fG51bGwsdGhpcy5hPWJ8fHRoaXMsdGhpcy5jPWN8fHRoaXN9ZnVuY3Rpb24gVigpe3RoaXMuZD1yYSx0aGlzLnA9dGhpcy5iPXRoaXMucT1udWxsLHRoaXMuaj1bMCwwLDBdLHRoaXMucz0xMDAxMzAsdGhpcy5uPSExLHRoaXMubz10aGlzLmE9dGhpcy5lPXRoaXMuZj1udWxsLHRoaXMubT0hMSx0aGlzLmM9dGhpcy5yPXRoaXMuaT10aGlzLms9dGhpcy5sPXRoaXMuaD1udWxsfWZ1bmN0aW9uIFcoYSxiKXtpZihhLmQhPT1iKWZvcig7YS5kIT09YjspaWYoYS5kPGIpc3dpdGNoKGEuZCl7Y2FzZSByYTpYKGEsMTAwMTUxKSxhLnUobnVsbCk7YnJlYWs7Y2FzZSAxOlgoYSwxMDAxNTIpLGEudCgpfWVsc2Ugc3dpdGNoKGEuZCl7Y2FzZSAyOlgoYSwxMDAxNTQpLGEudigpO2JyZWFrO2Nhc2UgMTpYKGEsMTAwMTUzKSxhLncoKX19ZnVuY3Rpb24gWChhLGIpe2EucCYmYS5wKGIsYS5jKX1mdW5jdGlvbiBZKGEsYil7dGhpcy5iPWF8fHRoaXMsdGhpcy5kPWJ8fHRoaXMsdGhpcy5hPW51bGwsdGhpcy5jPSExfWZ1bmN0aW9uIFooKXt0aGlzLmg9dGhpcyx0aGlzLmk9dGhpcy5kPXRoaXMuYT10aGlzLmU9dGhpcy5jPXRoaXMuYj1udWxsLHRoaXMuZj0wfWZ1bmN0aW9uICQoYSl7cmV0dXJuIGEuYi5lfWZ1bmN0aW9uIF8oKXt0aGlzLmM9bmV3IGFhLHRoaXMuYT1uZXcgWSx0aGlzLmI9bmV3IFosdGhpcy5kPW5ldyBaLHRoaXMuYi5iPXRoaXMuZCx0aGlzLmQuYj10aGlzLmJ9ZnVuY3Rpb24gYWEoYSxiKXt0aGlzLmU9YXx8dGhpcyx0aGlzLmY9Ynx8dGhpcyx0aGlzLmQ9dGhpcy5jPW51bGwsdGhpcy5nPVswLDAsMF0sdGhpcy5oPXRoaXMuYT10aGlzLmI9MH1mdW5jdGlvbiBiYSgpe3RoaXMuYz1bXSx0aGlzLmQ9bnVsbCx0aGlzLmE9MCx0aGlzLmU9ITEsdGhpcy5iPW5ldyBmYX1mdW5jdGlvbiBjYShhKXthLmQ9W107Zm9yKHZhciBiPTA7YjxhLmE7YisrKWEuZFtiXT1iO2EuZC5zb3J0KGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3JldHVybiBlKGFbYl0sYVtjXSk/MTotMX19KGEuYykpLGEuZT0hMCxoYShhLmIpfWZ1bmN0aW9uIGRhKGEsYil7aWYoYS5lKXt2YXIgYz1hLmIsZD0rK2MuYTsyKmQ+Yy5mJiYoYy5mKj0yLGMuYz1nYShjLmMsYy5mKzEpKTt2YXIgZTtyZXR1cm4gMD09PWMuYj9lPWQ6KGU9Yy5iLGMuYj1jLmNbYy5iXSksYy5lW2VdPWIsYy5jW2VdPWQsYy5kW2RdPWUsYy5oJiZsYShjLGQpLGV9cmV0dXJuIGM9YS5hKyssYS5jW2NdPWIsLShjKzEpfWZ1bmN0aW9uIGVhKGEpe2lmKDA9PT1hLmEpcmV0dXJuIGphKGEuYik7dmFyIGI9YS5jW2EuZFthLmEtMV1dO2lmKDAhPT1hLmIuYSYmZShpYShhLmIpLGIpKXJldHVybiBqYShhLmIpO2Rvey0tYS5hfXdoaWxlKDA8YS5hJiZudWxsPT09YS5jW2EuZFthLmEtMV1dKTtyZXR1cm4gYn1mdW5jdGlvbiBmYSgpe3RoaXMuZD1nYShbMF0sMzMpLHRoaXMuZT1bbnVsbCxudWxsXSx0aGlzLmM9WzAsMF0sdGhpcy5hPTAsdGhpcy5mPTMyLHRoaXMuYj0wLHRoaXMuaD0hMSx0aGlzLmRbMV09MX1mdW5jdGlvbiBnYShhLGIpe2Zvcih2YXIgYz1BcnJheShiKSxkPTA7ZDxhLmxlbmd0aDtkKyspY1tkXT1hW2RdO2Zvcig7ZDxiO2QrKyljW2RdPTA7cmV0dXJuIGN9ZnVuY3Rpb24gaGEoYSl7Zm9yKHZhciBiPWEuYTsxPD1iOy0tYilrYShhLGIpO2EuaD0hMH1mdW5jdGlvbiBpYShhKXtyZXR1cm4gYS5lW2EuZFsxXV19ZnVuY3Rpb24gamEoYSl7dmFyIGI9YS5kLGM9YS5lLGQ9YS5jLGU9YlsxXSxmPWNbZV07cmV0dXJuIDA8YS5hJiYoYlsxXT1iW2EuYV0sZFtiWzFdXT0xLGNbZV09bnVsbCxkW2VdPWEuYixhLmI9ZSwwPC0tYS5hJiZrYShhLDEpKSxmfWZ1bmN0aW9uIGthKGEsYil7Zm9yKHZhciBjPWEuZCxkPWEuZSxmPWEuYyxnPWIsaD1jW2ddOzspe3ZhciBpPWc8PDE7aTxhLmEmJmUoZFtjW2krMV1dLGRbY1tpXV0pJiYoaSs9MSk7dmFyIGo9Y1tpXTtpZihpPmEuYXx8ZShkW2hdLGRbal0pKXtjW2ddPWgsZltoXT1nO2JyZWFrfWNbZ109aixmW2pdPWcsZz1pfX1mdW5jdGlvbiBsYShhLGIpe2Zvcih2YXIgYz1hLmQsZD1hLmUsZj1hLmMsZz1iLGg9Y1tnXTs7KXt2YXIgaT1nPj4xLGo9Y1tpXTtpZigwPT09aXx8ZShkW2pdLGRbaF0pKXtjW2ddPWgsZltoXT1nO2JyZWFrfWNbZ109aixmW2pdPWcsZz1pfX1mdW5jdGlvbiBtYSgpe3RoaXMuZT10aGlzLmE9bnVsbCx0aGlzLmY9MCx0aGlzLmM9dGhpcy5iPXRoaXMuaD10aGlzLmQ9ITF9ZnVuY3Rpb24gbmEoYSl7cmV0dXJuIGEuZS5jLmJ9ZnVuY3Rpb24gb2EoYSl7cmV0dXJuIGEuZS5hLmJ9dmFyIHBhLHFhPTRlMTUwLHJhPTA7cGE9Vi5wcm90b3R5cGUscGEueD1mdW5jdGlvbigpe1codGhpcyxyYSl9LHBhLkI9ZnVuY3Rpb24oYSxiKXtzd2l0Y2goYSl7Y2FzZSAxMDAxNDI6cmV0dXJuO2Nhc2UgMTAwMTQwOnN3aXRjaChiKXtjYXNlIDEwMDEzMDpjYXNlIDEwMDEzMTpjYXNlIDEwMDEzMjpjYXNlIDEwMDEzMzpjYXNlIDEwMDEzNDpyZXR1cm4gdm9pZCh0aGlzLnM9Yil9YnJlYWs7Y2FzZSAxMDAxNDE6cmV0dXJuIHZvaWQodGhpcy5tPSEhYik7ZGVmYXVsdDpyZXR1cm4gdm9pZCBYKHRoaXMsMTAwOTAwKX1YKHRoaXMsMTAwOTAxKX0scGEueT1mdW5jdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAxMDAxNDI6cmV0dXJuIDA7Y2FzZSAxMDAxNDA6cmV0dXJuIHRoaXMucztjYXNlIDEwMDE0MTpyZXR1cm4gdGhpcy5tO2RlZmF1bHQ6WCh0aGlzLDEwMDkwMCl9cmV0dXJuITF9LHBhLkE9ZnVuY3Rpb24oYSxiLGMpe3RoaXMualswXT1hLHRoaXMualsxXT1iLHRoaXMualsyXT1jfSxwYS56PWZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8bnVsbDtzd2l0Y2goYSl7Y2FzZSAxMDAxMDA6Y2FzZSAxMDAxMDY6dGhpcy5oPWM7YnJlYWs7Y2FzZSAxMDAxMDQ6Y2FzZSAxMDAxMTA6dGhpcy5sPWM7YnJlYWs7Y2FzZSAxMDAxMDE6Y2FzZSAxMDAxMDc6dGhpcy5rPWM7YnJlYWs7Y2FzZSAxMDAxMDI6Y2FzZSAxMDAxMDg6dGhpcy5pPWM7YnJlYWs7Y2FzZSAxMDAxMDM6Y2FzZSAxMDAxMDk6dGhpcy5wPWM7YnJlYWs7Y2FzZSAxMDAxMDU6Y2FzZSAxMDAxMTE6dGhpcy5vPWM7YnJlYWs7Y2FzZSAxMDAxMTI6dGhpcy5yPWM7YnJlYWs7ZGVmYXVsdDpYKHRoaXMsMTAwOTAwKX19LHBhLkM9ZnVuY3Rpb24oYSxiKXt2YXIgYz0hMSxkPVswLDAsMF07Vyh0aGlzLDIpO2Zvcih2YXIgZT0wOzM+ZTsrK2Upe3ZhciBmPWFbZV07LTFlMTUwPmYmJihmPS0xZTE1MCxjPSEwKSwxZTE1MDxmJiYoZj0xZTE1MCxjPSEwKSxkW2VdPWZ9YyYmWCh0aGlzLDEwMDE1NSksYz10aGlzLnEsbnVsbD09PWM/KGM9bih0aGlzLmIpLG8oYyxjLmIpKToocShjKSxjPWMuZSksYy5hLmQ9YixjLmEuZ1swXT1kWzBdLGMuYS5nWzFdPWRbMV0sYy5hLmdbMl09ZFsyXSxjLmY9MSxjLmIuZj0tMSx0aGlzLnE9Y30scGEudT1mdW5jdGlvbihhKXtXKHRoaXMscmEpLHRoaXMuZD0xLHRoaXMuYj1uZXcgXyx0aGlzLmM9YX0scGEudD1mdW5jdGlvbigpe1codGhpcywxKSx0aGlzLmQ9Mix0aGlzLnE9bnVsbH0scGEudj1mdW5jdGlvbigpe1codGhpcywyKSx0aGlzLmQ9MX0scGEudz1mdW5jdGlvbigpe1codGhpcywxKSx0aGlzLmQ9cmE7dmFyIGE9dGhpcy5qWzBdLGI9dGhpcy5qWzFdLGM9dGhpcy5qWzJdLGY9ITEsaD1bYSxiLGNdO2lmKDA9PT1hJiYwPT09YiYmMD09PWMpe2Zvcih2YXIgYj1bLTJlMTUwLC0yZTE1MCwtMmUxNTBdLGk9WzJlMTUwLDJlMTUwLDJlMTUwXSxjPVtdLGo9W10sZj10aGlzLmIuYyxhPWYuZTthIT09ZjthPWEuZSlmb3IodmFyIG09MDszPm07KyttKXt2YXIgbj1hLmdbbV07bjxpW21dJiYoaVttXT1uLGpbbV09YSksbj5iW21dJiYoYlttXT1uLGNbbV09YSl9aWYoYT0wLGJbMV0taVsxXT5iWzBdLWlbMF0mJihhPTEpLGJbMl0taVsyXT5iW2FdLWlbYV0mJihhPTIpLGlbYV0+PWJbYV0paFswXT0wLGhbMV09MCxoWzJdPTE7ZWxzZXtmb3IoYj0wLGk9althXSxjPWNbYV0saj1bMCwwLDBdLGk9W2kuZ1swXS1jLmdbMF0saS5nWzFdLWMuZ1sxXSxpLmdbMl0tYy5nWzJdXSxtPVswLDAsMF0sYT1mLmU7YSE9PWY7YT1hLmUpbVswXT1hLmdbMF0tYy5nWzBdLG1bMV09YS5nWzFdLWMuZ1sxXSxtWzJdPWEuZ1syXS1jLmdbMl0salswXT1pWzFdKm1bMl0taVsyXSptWzFdLGpbMV09aVsyXSptWzBdLWlbMF0qbVsyXSxqWzJdPWlbMF0qbVsxXS1pWzFdKm1bMF0sKG49alswXSpqWzBdK2pbMV0qalsxXStqWzJdKmpbMl0pPmImJihiPW4saFswXT1qWzBdLGhbMV09alsxXSxoWzJdPWpbMl0pOzA+PWImJihoWzBdPWhbMV09aFsyXT0wLGhbeihpKV09MSl9Zj0hMH1mb3Ioaj16KGgpLGE9dGhpcy5iLmMsYj0oaisxKSUzLGM9KGorMiklMyxqPTA8aFtqXT8xOi0xLGg9YS5lO2ghPT1hO2g9aC5lKWguYj1oLmdbYl0saC5hPWoqaC5nW2NdO2lmKGYpe2ZvcihoPTAsZj10aGlzLmIuYSxhPWYuYjthIT09ZjthPWEuYilpZihiPWEuYSwhKDA+PWIuZikpZG97aCs9KGIuYS5iLWIuYi5hLmIpKihiLmEuYStiLmIuYS5hKSxiPWIuZX13aGlsZShiIT09YS5hKTtpZigwPmgpZm9yKGg9dGhpcy5iLmMsZj1oLmU7ZiE9PWg7Zj1mLmUpZi5hPS1mLmF9Zm9yKHRoaXMubj0hMSxoPXRoaXMuYi5iLGE9aC5oO2EhPT1oO2E9ZilmPWEuaCxiPWEuZSxkKGEuYSxhLmIuYSkmJmEuZS5lIT09YSYmKEwodGhpcyxiLGEpLHAoYSksYT1iLGI9YS5lKSxiLmU9PT1hJiYoYiE9PWEmJihiIT09ZiYmYiE9PWYuYnx8KGY9Zi5oKSxwKGIpKSxhIT09ZiYmYSE9PWYuYnx8KGY9Zi5oKSxwKGEpKTtmb3IodGhpcy5lPWg9bmV3IGJhLGY9dGhpcy5iLmMsYT1mLmU7YSE9PWY7YT1hLmUpYS5oPWRhKGgsYSk7Zm9yKGNhKGgpLHRoaXMuZj1uZXcgUyh0aGlzKSxSKHRoaXMsLXFhKSxSKHRoaXMscWEpO251bGwhPT0oaD1lYSh0aGlzLmUpKTspe2Zvcig7Oyl7YTppZihhPXRoaXMuZSwwPT09YS5hKWY9aWEoYS5iKTtlbHNlIGlmKGY9YS5jW2EuZFthLmEtMV1dLDAhPT1hLmIuYSYmKGE9aWEoYS5iKSxlKGEsZikpKXtmPWE7YnJlYWsgYX1pZihudWxsPT09Znx8IWQoZixoKSlicmVhaztmPWVhKHRoaXMuZSksTCh0aGlzLGguYyxmLmMpfVEodGhpcyxoKX1mb3IodGhpcy5hPXRoaXMuZi5hLmEuYi5hLmEsaD0wO251bGwhPT0oZj10aGlzLmYuYS5hLmIpOylmLmh8fCsraCxDKGYpO2Zvcih0aGlzLmY9bnVsbCxoPXRoaXMuZSxoLmI9bnVsbCxoLmQ9bnVsbCx0aGlzLmU9aC5jPW51bGwsaD10aGlzLmIsYT1oLmEuYjthIT09aC5hO2E9ZilmPWEuYixhPWEuYSxhLmUuZT09PWEmJihBKGEuYyxhKSxwKGEpKTtpZighdGhpcy5uKXtpZihoPXRoaXMuYix0aGlzLm0pZm9yKGE9aC5iLmg7YSE9PWguYjthPWYpZj1hLmgsYS5iLmQuYyE9PWEuZC5jP2EuZj1hLmQuYz8xOi0xOnAoYSk7ZWxzZSBmb3IoYT1oLmEuYjthIT09aC5hO2E9ZilpZihmPWEuYixhLmMpe2ZvcihhPWEuYTtlKGEuYi5hLGEuYSk7YT1hLmMuYik7Zm9yKDtlKGEuYSxhLmIuYSk7YT1hLmUpO2ZvcihiPWEuYy5iLGM9dm9pZCAwO2EuZSE9PWI7KWlmKGUoYS5iLmEsYi5hKSl7Zm9yKDtiLmUhPT1hJiYoayhiLmUpfHwwPj1nKGIuYSxiLmIuYSxiLmUuYi5hKSk7KWM9cihiLmUsYiksYj1jLmI7Yj1iLmMuYn1lbHNle2Zvcig7Yi5lIT09YSYmKGwoYS5jLmIpfHwwPD1nKGEuYi5hLGEuYSxhLmMuYi5hKSk7KWM9cihhLGEuYy5iKSxhPWMuYjthPWEuZX1mb3IoO2IuZS5lIT09YTspYz1yKGIuZSxiKSxiPWMuYn1pZih0aGlzLmh8fHRoaXMuaXx8dGhpcy5rfHx0aGlzLmwpaWYodGhpcy5tKXtmb3IoaD10aGlzLmIsZj1oLmEuYjtmIT09aC5hO2Y9Zi5iKWlmKGYuYyl7dGhpcy5oJiZ0aGlzLmgoMix0aGlzLmMpLGE9Zi5hO2Rve3RoaXMuayYmdGhpcy5rKGEuYS5kLHRoaXMuYyksYT1hLmV9d2hpbGUoYSE9PWYuYSk7dGhpcy5pJiZ0aGlzLmkodGhpcy5jKX19ZWxzZXtmb3IoaD10aGlzLmIsZj0hIXRoaXMubCxhPSExLGI9LTEsYz1oLmEuZDtjIT09aC5hO2M9Yy5kKWlmKGMuYyl7YXx8KHRoaXMuaCYmdGhpcy5oKDQsdGhpcy5jKSxhPSEwKSxqPWMuYTtkb3tmJiYoaT1qLmIuZC5jPzA6MSxiIT09aSYmKGI9aSx0aGlzLmwmJnRoaXMubCghIWIsdGhpcy5jKSkpLHRoaXMuayYmdGhpcy5rKGouYS5kLHRoaXMuYyksaj1qLmV9d2hpbGUoaiE9PWMuYSl9YSYmdGhpcy5pJiZ0aGlzLmkodGhpcy5jKX1pZih0aGlzLnIpe2ZvcihoPXRoaXMuYixhPWguYS5iO2EhPT1oLmE7YT1mKWlmKGY9YS5iLCFhLmMpe2I9YS5hLGM9Yi5lLGo9dm9pZCAwO2Rve2o9YyxjPWouZSxqLmQ9bnVsbCxudWxsPT09ai5iLmQmJihqLmM9PT1qP3goai5hLG51bGwpOihqLmEuYz1qLmMsdChqLCQoaikpKSxpPWouYixpLmM9PT1pP3goaS5hLG51bGwpOihpLmEuYz1pLmMsdChpLCQoaSkpKSx3KGopKX13aGlsZShqIT09Yik7Yj1hLmQsYT1hLmIsYS5kPWIsYi5iPWF9cmV0dXJuIHRoaXMucih0aGlzLmIpLHZvaWQodGhpcy5jPXRoaXMuYj1udWxsKX19dGhpcy5iPXRoaXMuYz1udWxsfSx0aGlzLmxpYnRlc3M9e0dsdVRlc3NlbGF0b3I6Vix3aW5kaW5nUnVsZTp7R0xVX1RFU1NfV0lORElOR19PREQ6MTAwMTMwLEdMVV9URVNTX1dJTkRJTkdfTk9OWkVSTzoxMDAxMzEsR0xVX1RFU1NfV0lORElOR19QT1NJVElWRToxMDAxMzIsR0xVX1RFU1NfV0lORElOR19ORUdBVElWRToxMDAxMzMsR0xVX1RFU1NfV0lORElOR19BQlNfR0VRX1RXTzoxMDAxMzR9LHByaW1pdGl2ZVR5cGU6e0dMX0xJTkVfTE9PUDoyLEdMX1RSSUFOR0xFUzo0LEdMX1RSSUFOR0xFX1NUUklQOjUsR0xfVFJJQU5HTEVfRkFOOjZ9LGVycm9yVHlwZTp7R0xVX1RFU1NfTUlTU0lOR19CRUdJTl9QT0xZR09OOjEwMDE1MSxHTFVfVEVTU19NSVNTSU5HX0VORF9QT0xZR09OOjEwMDE1MyxHTFVfVEVTU19NSVNTSU5HX0JFR0lOX0NPTlRPVVI6MTAwMTUyLEdMVV9URVNTX01JU1NJTkdfRU5EX0NPTlRPVVI6MTAwMTU0LEdMVV9URVNTX0NPT1JEX1RPT19MQVJHRToxMDAxNTUsR0xVX1RFU1NfTkVFRF9DT01CSU5FX0NBTExCQUNLOjEwMDE1Nn0sZ2x1RW51bTp7R0xVX1RFU1NfTUVTSDoxMDAxMTIsR0xVX1RFU1NfVE9MRVJBTkNFOjEwMDE0MixHTFVfVEVTU19XSU5ESU5HX1JVTEU6MTAwMTQwLEdMVV9URVNTX0JPVU5EQVJZX09OTFk6MTAwMTQxLEdMVV9JTlZBTElEX0VOVU06MTAwOTAwLEdMVV9JTlZBTElEX1ZBTFVFOjEwMDkwMSxHTFVfVEVTU19CRUdJTjoxMDAxMDAsR0xVX1RFU1NfVkVSVEVYOjEwMDEwMSxHTFVfVEVTU19FTkQ6MTAwMTAyLEdMVV9URVNTX0VSUk9SOjEwMDEwMyxHTFVfVEVTU19FREdFX0ZMQUc6MTAwMTA0LEdMVV9URVNTX0NPTUJJTkU6MTAwMTA1LEdMVV9URVNTX0JFR0lOX0RBVEE6MTAwMTA2LEdMVV9URVNTX1ZFUlRFWF9EQVRBOjEwMDEwNyxHTFVfVEVTU19FTkRfREFUQToxMDAxMDgsR0xVX1RFU1NfRVJST1JfREFUQToxMDAxMDksR0xVX1RFU1NfRURHRV9GTEFHX0RBVEE6MTAwMTEwLEdMVV9URVNTX0NPTUJJTkVfREFUQToxMDAxMTF9fSxWLnByb3RvdHlwZS5nbHVEZWxldGVUZXNzPVYucHJvdG90eXBlLngsVi5wcm90b3R5cGUuZ2x1VGVzc1Byb3BlcnR5PVYucHJvdG90eXBlLkIsVi5wcm90b3R5cGUuZ2x1R2V0VGVzc1Byb3BlcnR5PVYucHJvdG90eXBlLnksVi5wcm90b3R5cGUuZ2x1VGVzc05vcm1hbD1WLnByb3RvdHlwZS5BLFYucHJvdG90eXBlLmdsdVRlc3NDYWxsYmFjaz1WLnByb3RvdHlwZS56LFYucHJvdG90eXBlLmdsdVRlc3NWZXJ0ZXg9Vi5wcm90b3R5cGUuQyxWLnByb3RvdHlwZS5nbHVUZXNzQmVnaW5Qb2x5Z29uPVYucHJvdG90eXBlLnUsVi5wcm90b3R5cGUuZ2x1VGVzc0JlZ2luQ29udG91cj1WLnByb3RvdHlwZS50LFYucHJvdG90eXBlLmdsdVRlc3NFbmRDb250b3VyPVYucHJvdG90eXBlLnYsVi5wcm90b3R5cGUuZ2x1VGVzc0VuZFBvbHlnb249Vi5wcm90b3R5cGUudyx2b2lkIDAhPT1iJiYoYi5leHBvcnRzPXRoaXMubGlidGVzcyl9LHt9XSwxMDpbZnVuY3Rpb24oYixjLGQpeyhmdW5jdGlvbihlKXshZnVuY3Rpb24oYixlKXtcIm9iamVjdFwiPT10eXBlb2YgZCYmdm9pZCAwIT09Yz9lKGQpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJmEuYW1kP2EoW1wiZXhwb3J0c1wiXSxlKTplKGIub3BlbnR5cGU9e30pfSh0aGlzLGZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGMoKXt0aGlzLnRhYmxlPW5ldyBVaW50MTZBcnJheSgxNiksdGhpcy50cmFucz1uZXcgVWludDE2QXJyYXkoMjg4KX1mdW5jdGlvbiBkKGEsYil7dGhpcy5zb3VyY2U9YSx0aGlzLnNvdXJjZUluZGV4PTAsdGhpcy50YWc9MCx0aGlzLmJpdGNvdW50PTAsdGhpcy5kZXN0PWIsdGhpcy5kZXN0TGVuPTAsdGhpcy5sdHJlZT1uZXcgYyx0aGlzLmR0cmVlPW5ldyBjfWZ1bmN0aW9uIGYoYSxiLGMsZCl7dmFyIGUsZjtmb3IoZT0wO2U8YzsrK2UpYVtlXT0wO2ZvcihlPTA7ZTwzMC1jOysrZSlhW2UrY109ZS9jfDA7Zm9yKGY9ZCxlPTA7ZTwzMDsrK2UpYltlXT1mLGYrPTE8PGFbZV19ZnVuY3Rpb24gZyhhLGIpe3ZhciBjO2ZvcihjPTA7Yzw3OysrYylhLnRhYmxlW2NdPTA7Zm9yKGEudGFibGVbN109MjQsYS50YWJsZVs4XT0xNTIsYS50YWJsZVs5XT0xMTIsYz0wO2M8MjQ7KytjKWEudHJhbnNbY109MjU2K2M7Zm9yKGM9MDtjPDE0NDsrK2MpYS50cmFuc1syNCtjXT1jO2ZvcihjPTA7Yzw4OysrYylhLnRyYW5zWzE2OCtjXT0yODArYztmb3IoYz0wO2M8MTEyOysrYylhLnRyYW5zWzE3NitjXT0xNDQrYztmb3IoYz0wO2M8NTsrK2MpYi50YWJsZVtjXT0wO2ZvcihiLnRhYmxlWzVdPTMyLGM9MDtjPDMyOysrYyliLnRyYW5zW2NdPWN9ZnVuY3Rpb24gaChhLGIsYyxkKXt2YXIgZSxmO2ZvcihlPTA7ZTwxNjsrK2UpYS50YWJsZVtlXT0wO2ZvcihlPTA7ZTxkOysrZSlhLnRhYmxlW2JbYytlXV0rKztmb3IoYS50YWJsZVswXT0wLGY9MCxlPTA7ZTwxNjsrK2UpdmVbZV09ZixmKz1hLnRhYmxlW2VdO2ZvcihlPTA7ZTxkOysrZSliW2MrZV0mJihhLnRyYW5zW3ZlW2JbYytlXV0rK109ZSl9ZnVuY3Rpb24gaShhKXthLmJpdGNvdW50LS18fChhLnRhZz1hLnNvdXJjZVthLnNvdXJjZUluZGV4KytdLGEuYml0Y291bnQ9Nyk7dmFyIGI9MSZhLnRhZztyZXR1cm4gYS50YWc+Pj49MSxifWZ1bmN0aW9uIGooYSxiLGMpe2lmKCFiKXJldHVybiBjO2Zvcig7YS5iaXRjb3VudDwyNDspYS50YWd8PWEuc291cmNlW2Euc291cmNlSW5kZXgrK108PGEuYml0Y291bnQsYS5iaXRjb3VudCs9ODt2YXIgZD1hLnRhZyY2NTUzNT4+PjE2LWI7cmV0dXJuIGEudGFnPj4+PWIsYS5iaXRjb3VudC09YixkK2N9ZnVuY3Rpb24gayhhLGIpe2Zvcig7YS5iaXRjb3VudDwyNDspYS50YWd8PWEuc291cmNlW2Euc291cmNlSW5kZXgrK108PGEuYml0Y291bnQsYS5iaXRjb3VudCs9ODt2YXIgYz0wLGQ9MCxlPTAsZj1hLnRhZztkb3tkPTIqZCsoMSZmKSxmPj4+PTEsKytlLGMrPWIudGFibGVbZV0sZC09Yi50YWJsZVtlXX13aGlsZShkPj0wKTtyZXR1cm4gYS50YWc9ZixhLmJpdGNvdW50LT1lLGIudHJhbnNbYytkXX1mdW5jdGlvbiBsKGEsYixjKXt2YXIgZCxlLGYsZyxpLGw7Zm9yKGQ9aihhLDUsMjU3KSxlPWooYSw1LDEpLGY9aihhLDQsNCksZz0wO2c8MTk7KytnKXVlW2ddPTA7Zm9yKGc9MDtnPGY7KytnKXt2YXIgbT1qKGEsMywwKTt1ZVtzZVtnXV09bX1mb3IoaCh0ZSx1ZSwwLDE5KSxpPTA7aTxkK2U7KXt2YXIgbj1rKGEsdGUpO3N3aXRjaChuKXtjYXNlIDE2OnZhciBvPXVlW2ktMV07Zm9yKGw9aihhLDIsMyk7bDstLWwpdWVbaSsrXT1vO2JyZWFrO2Nhc2UgMTc6Zm9yKGw9aihhLDMsMyk7bDstLWwpdWVbaSsrXT0wO2JyZWFrO2Nhc2UgMTg6Zm9yKGw9aihhLDcsMTEpO2w7LS1sKXVlW2krK109MDticmVhaztkZWZhdWx0OnVlW2krK109bn19aChiLHVlLDAsZCksaChjLHVlLGQsZSl9ZnVuY3Rpb24gbShhLGIsYyl7Zm9yKDs7KXt2YXIgZD1rKGEsYik7aWYoMjU2PT09ZClyZXR1cm4ga2U7aWYoZDwyNTYpYS5kZXN0W2EuZGVzdExlbisrXT1kO2Vsc2V7dmFyIGUsZixnLGg7Zm9yKGQtPTI1NyxlPWooYSxvZVtkXSxwZVtkXSksZj1rKGEsYyksZz1hLmRlc3RMZW4taihhLHFlW2ZdLHJlW2ZdKSxoPWc7aDxnK2U7KytoKWEuZGVzdFthLmRlc3RMZW4rK109YS5kZXN0W2hdfX19ZnVuY3Rpb24gbihhKXtmb3IodmFyIGIsYyxkO2EuYml0Y291bnQ+ODspYS5zb3VyY2VJbmRleC0tLGEuYml0Y291bnQtPTg7aWYoYj1hLnNvdXJjZVthLnNvdXJjZUluZGV4KzFdLGI9MjU2KmIrYS5zb3VyY2VbYS5zb3VyY2VJbmRleF0sYz1hLnNvdXJjZVthLnNvdXJjZUluZGV4KzNdLGM9MjU2KmMrYS5zb3VyY2VbYS5zb3VyY2VJbmRleCsyXSxiIT09KDY1NTM1Jn5jKSlyZXR1cm4gbGU7Zm9yKGEuc291cmNlSW5kZXgrPTQsZD1iO2Q7LS1kKWEuZGVzdFthLmRlc3RMZW4rK109YS5zb3VyY2VbYS5zb3VyY2VJbmRleCsrXTtyZXR1cm4gYS5iaXRjb3VudD0wLGtlfWZ1bmN0aW9uIG8oYSxiKXt2YXIgYyxlLGY9bmV3IGQoYSxiKTtkb3tzd2l0Y2goYz1pKGYpLGooZiwyLDApKXtjYXNlIDA6ZT1uKGYpO2JyZWFrO2Nhc2UgMTplPW0oZixtZSxuZSk7YnJlYWs7Y2FzZSAyOmwoZixmLmx0cmVlLGYuZHRyZWUpLGU9bShmLGYubHRyZWUsZi5kdHJlZSk7YnJlYWs7ZGVmYXVsdDplPWxlfWlmKGUhPT1rZSl0aHJvdyBuZXcgRXJyb3IoXCJEYXRhIGVycm9yXCIpfXdoaWxlKCFjKTtyZXR1cm4gZi5kZXN0TGVuPGYuZGVzdC5sZW5ndGg/XCJmdW5jdGlvblwiPT10eXBlb2YgZi5kZXN0LnNsaWNlP2YuZGVzdC5zbGljZSgwLGYuZGVzdExlbik6Zi5kZXN0LnN1YmFycmF5KDAsZi5kZXN0TGVuKTpmLmRlc3R9ZnVuY3Rpb24gcChhLGIsYyxkLGUpe3JldHVybiBNYXRoLnBvdygxLWUsMykqYSszKk1hdGgucG93KDEtZSwyKSplKmIrMyooMS1lKSpNYXRoLnBvdyhlLDIpKmMrTWF0aC5wb3coZSwzKSpkfWZ1bmN0aW9uIHEoKXt0aGlzLngxPU51bWJlci5OYU4sdGhpcy55MT1OdW1iZXIuTmFOLHRoaXMueDI9TnVtYmVyLk5hTix0aGlzLnkyPU51bWJlci5OYU59ZnVuY3Rpb24gcigpe3RoaXMuY29tbWFuZHM9W10sdGhpcy5maWxsPVwiYmxhY2tcIix0aGlzLnN0cm9rZT1udWxsLHRoaXMuc3Ryb2tlV2lkdGg9MX1mdW5jdGlvbiBzKGEpe3Rocm93IG5ldyBFcnJvcihhKX1mdW5jdGlvbiB0KGEsYil7YXx8cyhiKX1mdW5jdGlvbiB1KGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhfX1mdW5jdGlvbiB2KGEpe3JldHVybiBhPj0tMTI4JiZhPD0xMjd9ZnVuY3Rpb24gdyhhLGIsYyl7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aDtiPGUmJmQ8NjQmJjA9PT1hW2JdOykrK2IsKytkO3JldHVybiBjLnB1c2goMTI4fGQtMSksYn1mdW5jdGlvbiB4KGEsYixjKXtmb3IodmFyIGQ9MCxlPWEubGVuZ3RoLGY9YjtmPGUmJmQ8NjQ7KXt2YXIgZz1hW2ZdO2lmKCF2KGcpKWJyZWFrO2lmKDA9PT1nJiZmKzE8ZSYmMD09PWFbZisxXSlicmVhazsrK2YsKytkfWMucHVzaChkLTEpO2Zvcih2YXIgaD1iO2g8ZjsrK2gpYy5wdXNoKGFbaF0rMjU2JjI1NSk7cmV0dXJuIGZ9ZnVuY3Rpb24geShhLGIsYyl7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aCxmPWI7ZjxlJiZkPDY0Oyl7dmFyIGc9YVtmXTtpZigwPT09ZylicmVhaztpZih2KGcpJiZmKzE8ZSYmdihhW2YrMV0pKWJyZWFrOysrZiwrK2R9Yy5wdXNoKDY0fGQtMSk7Zm9yKHZhciBoPWI7aDxmOysraCl7dmFyIGk9YVtoXTtjLnB1c2goaSs2NTUzNj4+OCYyNTUsaSsyNTYmMjU1KX1yZXR1cm4gZn1mdW5jdGlvbiB6KGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPTA7ZTxiLmxlbmd0aDtlKz0xKXt2YXIgZj1iW2VdO2RbZi5uYW1lXT1mLnZhbHVlfWlmKHRoaXMudGFibGVOYW1lPWEsdGhpcy5maWVsZHM9YixjKWZvcih2YXIgZz1PYmplY3Qua2V5cyhjKSxoPTA7aDxnLmxlbmd0aDtoKz0xKXt2YXIgaT1nW2hdLGo9Y1tpXTt2b2lkIDAhPT1kW2ldJiYoZFtpXT1qKX19ZnVuY3Rpb24gQShhLGIsYyl7dm9pZCAwPT09YyYmKGM9Yi5sZW5ndGgpO3ZhciBkPW5ldyBBcnJheShiLmxlbmd0aCsxKTtkWzBdPXtuYW1lOmErXCJDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjfTtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKylkW2UrMV09e25hbWU6YStlLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpiW2VdfTtyZXR1cm4gZH1mdW5jdGlvbiBCKGEsYixjKXt2YXIgZD1iLmxlbmd0aCxlPW5ldyBBcnJheShkKzEpO2VbMF09e25hbWU6YStcIkNvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmR9O2Zvcih2YXIgZj0wO2Y8ZDtmKyspZVtmKzFdPXtuYW1lOmErZix0eXBlOlwiVEFCTEVcIix2YWx1ZTpjKGJbZl0sZil9O3JldHVybiBlfWZ1bmN0aW9uIEMoYSxiLGMpe3ZhciBkPWIubGVuZ3RoLGU9W107ZVswXT17bmFtZTphK1wiQ291bnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZH07Zm9yKHZhciBmPTA7ZjxkO2YrKyllPWUuY29uY2F0KGMoYltmXSxmKSk7cmV0dXJuIGV9ZnVuY3Rpb24gRChhKXsxPT09YS5mb3JtYXQ/ei5jYWxsKHRoaXMsXCJjb3ZlcmFnZVRhYmxlXCIsW3tuYW1lOlwiY292ZXJhZ2VGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX1dLmNvbmNhdChBKFwiZ2x5cGhcIixhLmdseXBocykpKTp4ZS5hc3NlcnQoITEsXCJDYW4ndCBjcmVhdGUgY292ZXJhZ2UgdGFibGUgZm9ybWF0IDIgeWV0LlwiKX1mdW5jdGlvbiBFKGEpe3ouY2FsbCh0aGlzLFwic2NyaXB0TGlzdFRhYmxlXCIsQyhcInNjcmlwdFJlY29yZFwiLGEsZnVuY3Rpb24oYSxiKXt2YXIgYz1hLnNjcmlwdCxkPWMuZGVmYXVsdExhbmdTeXM7cmV0dXJuIHhlLmFzc2VydCghIWQsXCJVbmFibGUgdG8gd3JpdGUgR1NVQjogc2NyaXB0IFwiK2EudGFnK1wiIGhhcyBubyBkZWZhdWx0IGxhbmd1YWdlIHN5c3RlbS5cIiksW3tuYW1lOlwic2NyaXB0VGFnXCIrYix0eXBlOlwiVEFHXCIsdmFsdWU6YS50YWd9LHtuYW1lOlwic2NyaXB0XCIrYix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcInNjcmlwdFRhYmxlXCIsW3tuYW1lOlwiZGVmYXVsdExhbmdTeXNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcImRlZmF1bHRMYW5nU3lzXCIsW3tuYW1lOlwibG9va3VwT3JkZXJcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXFGZWF0dXJlSW5kZXhcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZC5yZXFGZWF0dXJlSW5kZXh9XS5jb25jYXQoQShcImZlYXR1cmVJbmRleFwiLGQuZmVhdHVyZUluZGV4ZXMpKSl9XS5jb25jYXQoQyhcImxhbmdTeXNcIixjLmxhbmdTeXNSZWNvcmRzLGZ1bmN0aW9uKGEsYil7dmFyIGM9YS5sYW5nU3lzO3JldHVyblt7bmFtZTpcImxhbmdTeXNUYWdcIitiLHR5cGU6XCJUQUdcIix2YWx1ZTphLnRhZ30se25hbWU6XCJsYW5nU3lzXCIrYix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcImxhbmdTeXNcIixbe25hbWU6XCJsb29rdXBPcmRlclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlcUZlYXR1cmVJbmRleFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjLnJlcUZlYXR1cmVJbmRleH1dLmNvbmNhdChBKFwiZmVhdHVyZUluZGV4XCIsYy5mZWF0dXJlSW5kZXhlcykpKX1dfSkpKX1dfSkpfWZ1bmN0aW9uIEYoYSl7ei5jYWxsKHRoaXMsXCJmZWF0dXJlTGlzdFRhYmxlXCIsQyhcImZlYXR1cmVSZWNvcmRcIixhLGZ1bmN0aW9uKGEsYil7dmFyIGM9YS5mZWF0dXJlO3JldHVyblt7bmFtZTpcImZlYXR1cmVUYWdcIitiLHR5cGU6XCJUQUdcIix2YWx1ZTphLnRhZ30se25hbWU6XCJmZWF0dXJlXCIrYix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgeihcImZlYXR1cmVUYWJsZVwiLFt7bmFtZTpcImZlYXR1cmVQYXJhbXNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Yy5mZWF0dXJlUGFyYW1zfV0uY29uY2F0KEEoXCJsb29rdXBMaXN0SW5kZXhcIixjLmxvb2t1cExpc3RJbmRleGVzKSkpfV19KSl9ZnVuY3Rpb24gRyhhLGIpe3ouY2FsbCh0aGlzLFwibG9va3VwTGlzdFRhYmxlXCIsQihcImxvb2t1cFwiLGEsZnVuY3Rpb24oYSl7dmFyIGM9YlthLmxvb2t1cFR5cGVdO3JldHVybiB4ZS5hc3NlcnQoISFjLFwiVW5hYmxlIHRvIHdyaXRlIEdTVUIgbG9va3VwIHR5cGUgXCIrYS5sb29rdXBUeXBlK1wiIHRhYmxlcy5cIiksbmV3IHooXCJsb29rdXBUYWJsZVwiLFt7bmFtZTpcImxvb2t1cFR5cGVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5sb29rdXBUeXBlfSx7bmFtZTpcImxvb2t1cEZsYWdcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YS5sb29rdXBGbGFnfV0uY29uY2F0KEIoXCJzdWJ0YWJsZVwiLGEuc3VidGFibGVzLGMpKSl9KSl9ZnVuY3Rpb24gSChhLGIpe3JldHVybiBhLmdldFVpbnQ4KGIpfWZ1bmN0aW9uIEkoYSxiKXtyZXR1cm4gYS5nZXRVaW50MTYoYiwhMSl9ZnVuY3Rpb24gSihhLGIpe3JldHVybiBhLmdldEludDE2KGIsITEpfWZ1bmN0aW9uIEsoYSxiKXtyZXR1cm4gYS5nZXRVaW50MzIoYiwhMSl9ZnVuY3Rpb24gTChhLGIpe3JldHVybiBhLmdldEludDE2KGIsITEpK2EuZ2V0VWludDE2KGIrMiwhMSkvNjU1MzV9ZnVuY3Rpb24gTShhLGIpe2Zvcih2YXIgYz1cIlwiLGQ9YjtkPGIrNDtkKz0xKWMrPVN0cmluZy5mcm9tQ2hhckNvZGUoYS5nZXRJbnQ4KGQpKTtyZXR1cm4gY31mdW5jdGlvbiBOKGEsYixjKXtmb3IodmFyIGQ9MCxlPTA7ZTxjO2UrPTEpZDw8PTgsZCs9YS5nZXRVaW50OChiK2UpO3JldHVybiBkfWZ1bmN0aW9uIE8oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPWI7ZTxjO2UrPTEpZC5wdXNoKGEuZ2V0VWludDgoZSkpO3JldHVybiBkfWZ1bmN0aW9uIFAoYSl7Zm9yKHZhciBiPVwiXCIsYz0wO2M8YS5sZW5ndGg7Yys9MSliKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGFbY10pO3JldHVybiBifWZ1bmN0aW9uIFEoYSxiKXt0aGlzLmRhdGE9YSx0aGlzLm9mZnNldD1iLHRoaXMucmVsYXRpdmVPZmZzZXQ9MH1mdW5jdGlvbiBSKGEsYil7Yi5wYXJzZVVTaG9ydCgpLGEubGVuZ3RoPWIucGFyc2VVTG9uZygpLGEubGFuZ3VhZ2U9Yi5wYXJzZVVMb25nKCk7dmFyIGM7YS5ncm91cENvdW50PWM9Yi5wYXJzZVVMb25nKCksYS5nbHlwaEluZGV4TWFwPXt9O2Zvcih2YXIgZD0wO2Q8YztkKz0xKWZvcih2YXIgZT1iLnBhcnNlVUxvbmcoKSxmPWIucGFyc2VVTG9uZygpLGc9Yi5wYXJzZVVMb25nKCksaD1lO2g8PWY7aCs9MSlhLmdseXBoSW5kZXhNYXBbaF09ZyxnKyt9ZnVuY3Rpb24gUyhhLGIsYyxkLGUpe2EubGVuZ3RoPWIucGFyc2VVU2hvcnQoKSxhLmxhbmd1YWdlPWIucGFyc2VVU2hvcnQoKTt2YXIgZjthLnNlZ0NvdW50PWY9Yi5wYXJzZVVTaG9ydCgpPj4xLGIuc2tpcChcInVTaG9ydFwiLDMpLGEuZ2x5cGhJbmRleE1hcD17fTtmb3IodmFyIGc9bmV3IExlLlBhcnNlcihjLGQrZSsxNCksaD1uZXcgTGUuUGFyc2VyKGMsZCtlKzE2KzIqZiksaT1uZXcgTGUuUGFyc2VyKGMsZCtlKzE2KzQqZiksaj1uZXcgTGUuUGFyc2VyKGMsZCtlKzE2KzYqZiksaz1kK2UrMTYrOCpmLGw9MDtsPGYtMTtsKz0xKWZvcih2YXIgbT12b2lkIDAsbj1nLnBhcnNlVVNob3J0KCksbz1oLnBhcnNlVVNob3J0KCkscD1pLnBhcnNlU2hvcnQoKSxxPWoucGFyc2VVU2hvcnQoKSxyPW87cjw9bjtyKz0xKTAhPT1xPyhrPWoub2Zmc2V0K2oucmVsYXRpdmVPZmZzZXQtMixrKz1xLGsrPTIqKHItbyksMCE9PShtPUxlLmdldFVTaG9ydChjLGspKSYmKG09bStwJjY1NTM1KSk6bT1yK3AmNjU1MzUsYS5nbHlwaEluZGV4TWFwW3JdPW19ZnVuY3Rpb24gVChhLGIpe3ZhciBjPXt9O2MudmVyc2lvbj1MZS5nZXRVU2hvcnQoYSxiKSx4ZS5hcmd1bWVudCgwPT09Yy52ZXJzaW9uLFwiY21hcCB0YWJsZSB2ZXJzaW9uIHNob3VsZCBiZSAwLlwiKSxjLm51bVRhYmxlcz1MZS5nZXRVU2hvcnQoYSxiKzIpO2Zvcih2YXIgZD0tMSxlPWMubnVtVGFibGVzLTE7ZT49MDtlLT0xKXt2YXIgZj1MZS5nZXRVU2hvcnQoYSxiKzQrOCplKSxnPUxlLmdldFVTaG9ydChhLGIrNCs4KmUrMik7aWYoMz09PWYmJigwPT09Z3x8MT09PWd8fDEwPT09Zyl8fDA9PT1mJiYoMD09PWd8fDE9PT1nfHwyPT09Z3x8Mz09PWd8fDQ9PT1nKSl7ZD1MZS5nZXRVTG9uZyhhLGIrNCs4KmUrNCk7YnJlYWt9fWlmKC0xPT09ZCl0aHJvdyBuZXcgRXJyb3IoXCJObyB2YWxpZCBjbWFwIHN1Yi10YWJsZXMgZm91bmQuXCIpO3ZhciBoPW5ldyBMZS5QYXJzZXIoYSxiK2QpO2lmKGMuZm9ybWF0PWgucGFyc2VVU2hvcnQoKSwxMj09PWMuZm9ybWF0KVIoYyxoKTtlbHNle2lmKDQhPT1jLmZvcm1hdCl0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IGZvcm1hdCA0IGFuZCAxMiBjbWFwIHRhYmxlcyBhcmUgc3VwcG9ydGVkIChmb3VuZCBmb3JtYXQgXCIrYy5mb3JtYXQrXCIpLlwiKTtTKGMsaCxhLGIsZCl9cmV0dXJuIGN9ZnVuY3Rpb24gVShhLGIsYyl7YS5zZWdtZW50cy5wdXNoKHtlbmQ6YixzdGFydDpiLGRlbHRhOi0oYi1jKSxvZmZzZXQ6MCxnbHlwaEluZGV4OmN9KX1mdW5jdGlvbiBWKGEpe2Euc2VnbWVudHMucHVzaCh7ZW5kOjY1NTM1LHN0YXJ0OjY1NTM1LGRlbHRhOjEsb2Zmc2V0OjB9KX1mdW5jdGlvbiBXKGEpe3ZhciBiLGM9ITA7Zm9yKGI9YS5sZW5ndGgtMTtiPjA7Yi09MSl7aWYoYS5nZXQoYikudW5pY29kZT42NTUzNSl7Y29uc29sZS5sb2coXCJBZGRpbmcgQ01BUCBmb3JtYXQgMTIgKG5lZWRlZCEpXCIpLGM9ITE7YnJlYWt9fXZhciBkPVt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJudW1UYWJsZXNcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Yz8xOjJ9LHtuYW1lOlwicGxhdGZvcm1JRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTozfSx7bmFtZTpcImVuY29kaW5nSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJvZmZzZXRcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTpjPzEyOjIwfV07Y3x8KGQ9ZC5jb25jYXQoW3tuYW1lOlwiY21hcDEyUGxhdGZvcm1JRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTozfSx7bmFtZTpcImNtYXAxMkVuY29kaW5nSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MTB9LHtuYW1lOlwiY21hcDEyT2Zmc2V0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH1dKSksZD1kLmNvbmNhdChbe25hbWU6XCJmb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6NH0se25hbWU6XCJjbWFwNExlbmd0aFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImxhbmd1YWdlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic2VnQ291bnRYMlwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNlYXJjaFJhbmdlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZW50cnlTZWxlY3RvclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJhbmdlU2hpZnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dKTt2YXIgZT1uZXcgSWUuVGFibGUoXCJjbWFwXCIsZCk7Zm9yKGUuc2VnbWVudHM9W10sYj0wO2I8YS5sZW5ndGg7Yis9MSl7Zm9yKHZhciBmPWEuZ2V0KGIpLGc9MDtnPGYudW5pY29kZXMubGVuZ3RoO2crPTEpVShlLGYudW5pY29kZXNbZ10sYik7ZS5zZWdtZW50cz1lLnNlZ21lbnRzLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdGFydC1iLnN0YXJ0fSl9VihlKTt2YXIgaD1lLnNlZ21lbnRzLmxlbmd0aCxpPTAsaj1bXSxrPVtdLGw9W10sbT1bXSxuPVtdLG89W107Zm9yKGI9MDtiPGg7Yis9MSl7dmFyIHA9ZS5zZWdtZW50c1tiXTtwLmVuZDw9NjU1MzUmJnAuc3RhcnQ8PTY1NTM1PyhqPWouY29uY2F0KHtuYW1lOlwiZW5kX1wiK2IsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOnAuZW5kfSksaz1rLmNvbmNhdCh7bmFtZTpcInN0YXJ0X1wiK2IsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOnAuc3RhcnR9KSxsPWwuY29uY2F0KHtuYW1lOlwiaWREZWx0YV9cIitiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOnAuZGVsdGF9KSxtPW0uY29uY2F0KHtuYW1lOlwiaWRSYW5nZU9mZnNldF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLm9mZnNldH0pLHZvaWQgMCE9PXAuZ2x5cGhJZCYmKG49bi5jb25jYXQoe25hbWU6XCJnbHlwaF9cIitiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpwLmdseXBoSWR9KSkpOmkrPTEsY3x8dm9pZCAwPT09cC5nbHlwaEluZGV4fHwobz1vLmNvbmNhdCh7bmFtZTpcImNtYXAxMlN0YXJ0X1wiK2IsdHlwZTpcIlVMT05HXCIsdmFsdWU6cC5zdGFydH0pLG89by5jb25jYXQoe25hbWU6XCJjbWFwMTJFbmRfXCIrYix0eXBlOlwiVUxPTkdcIix2YWx1ZTpwLmVuZH0pLG89by5jb25jYXQoe25hbWU6XCJjbWFwMTJHbHlwaF9cIitiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnAuZ2x5cGhJbmRleH0pKX1pZihlLnNlZ0NvdW50WDI9MiooaC1pKSxlLnNlYXJjaFJhbmdlPTIqTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKGgtaSkvTWF0aC5sb2coMikpKSxlLmVudHJ5U2VsZWN0b3I9TWF0aC5sb2coZS5zZWFyY2hSYW5nZS8yKS9NYXRoLmxvZygyKSxlLnJhbmdlU2hpZnQ9ZS5zZWdDb3VudFgyLWUuc2VhcmNoUmFuZ2UsZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KGopLGUuZmllbGRzLnB1c2goe25hbWU6XCJyZXNlcnZlZFBhZFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KGspLGUuZmllbGRzPWUuZmllbGRzLmNvbmNhdChsKSxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQobSksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KG4pLGUuY21hcDRMZW5ndGg9MTQrMipqLmxlbmd0aCsyKzIqay5sZW5ndGgrMipsLmxlbmd0aCsyKm0ubGVuZ3RoKzIqbi5sZW5ndGgsIWMpe3ZhciBxPTE2KzQqby5sZW5ndGg7ZS5jbWFwMTJPZmZzZXQ9MjArZS5jbWFwNExlbmd0aCxlLmZpZWxkcz1lLmZpZWxkcy5jb25jYXQoW3tuYW1lOlwiY21hcDEyRm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjEyfSx7bmFtZTpcImNtYXAxMlJlc2VydmVkXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiY21hcDEyTGVuZ3RoXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6cX0se25hbWU6XCJjbWFwMTJMYW5ndWFnZVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwiY21hcDEybkdyb3Vwc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOm8ubGVuZ3RoLzN9XSksZS5maWVsZHM9ZS5maWVsZHMuY29uY2F0KG8pfXJldHVybiBlfWZ1bmN0aW9uIFgoYSl7dGhpcy5mb250PWF9ZnVuY3Rpb24gWShhKXt0aGlzLmNtYXA9YX1mdW5jdGlvbiBaKGEsYil7dGhpcy5lbmNvZGluZz1hLHRoaXMuY2hhcnNldD1ifWZ1bmN0aW9uICQoYSl7dmFyIGI9dGhpcztzd2l0Y2goYS52ZXJzaW9uKXtjYXNlIDE6dGhpcy5uYW1lcz1RZS5zbGljZSgpO2JyZWFrO2Nhc2UgMjp0aGlzLm5hbWVzPW5ldyBBcnJheShhLm51bWJlck9mR2x5cGhzKTtmb3IodmFyIGM9MDtjPGEubnVtYmVyT2ZHbHlwaHM7YysrKWEuZ2x5cGhOYW1lSW5kZXhbY108UWUubGVuZ3RoP2IubmFtZXNbY109UWVbYS5nbHlwaE5hbWVJbmRleFtjXV06Yi5uYW1lc1tjXT1hLm5hbWVzW2EuZ2x5cGhOYW1lSW5kZXhbY10tUWUubGVuZ3RoXTticmVhaztjYXNlIDIuNTp0aGlzLm5hbWVzPW5ldyBBcnJheShhLm51bWJlck9mR2x5cGhzKTtmb3IodmFyIGQ9MDtkPGEubnVtYmVyT2ZHbHlwaHM7ZCsrKWIubmFtZXNbZF09UWVbZCthLmdseXBoTmFtZUluZGV4W2RdXTticmVhaztjYXNlIDM6ZGVmYXVsdDp0aGlzLm5hbWVzPVtdfX1mdW5jdGlvbiBfKGEpe2Zvcih2YXIgYixjPWEudGFibGVzLmNtYXAuZ2x5cGhJbmRleE1hcCxkPU9iamVjdC5rZXlzKGMpLGU9MDtlPGQubGVuZ3RoO2UrPTEpe3ZhciBmPWRbZV0sZz1jW2ZdO2I9YS5nbHlwaHMuZ2V0KGcpLGIuYWRkVW5pY29kZShwYXJzZUludChmKSl9Zm9yKHZhciBoPTA7aDxhLmdseXBocy5sZW5ndGg7aCs9MSliPWEuZ2x5cGhzLmdldChoKSxhLmNmZkVuY29kaW5nP2EuaXNDSURGb250P2IubmFtZT1cImdpZFwiK2g6Yi5uYW1lPWEuY2ZmRW5jb2RpbmcuY2hhcnNldFtoXTphLmdseXBoTmFtZXMubmFtZXMmJihiLm5hbWU9YS5nbHlwaE5hbWVzLmdseXBoSW5kZXhUb05hbWUoaCkpfWZ1bmN0aW9uIGFhKGEsYixjLGQsZSl7YS5iZWdpblBhdGgoKSxhLm1vdmVUbyhiLGMpLGEubGluZVRvKGQsZSksYS5zdHJva2UoKX1mdW5jdGlvbiBiYShhLGIpe3ZhciBjPWJ8fG5ldyByO3JldHVybntjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmKGM9YygpKSxjfSxzZXQ6ZnVuY3Rpb24oYSl7Yz1hfX19ZnVuY3Rpb24gY2EoYSl7dGhpcy5iaW5kQ29uc3RydWN0b3JWYWx1ZXMoYSl9ZnVuY3Rpb24gZGEoYSxiLGMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse2dldDpmdW5jdGlvbigpe3JldHVybiBhLnBhdGgsYVtjXX0sc2V0OmZ1bmN0aW9uKGIpe2FbY109Yn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBlYShhLGIpe3ZhciBjPXRoaXM7aWYodGhpcy5mb250PWEsdGhpcy5nbHlwaHM9e30sQXJyYXkuaXNBcnJheShiKSlmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrKyljLmdseXBoc1tkXT1iW2RdO3RoaXMubGVuZ3RoPWImJmIubGVuZ3RofHwwfWZ1bmN0aW9uIGZhKGEsYil7cmV0dXJuIG5ldyBjYSh7aW5kZXg6Yixmb250OmF9KX1mdW5jdGlvbiBnYShhLGIsYyxkLGUsZil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGc9bmV3IGNhKHtpbmRleDpiLGZvbnQ6YX0pO3JldHVybiBnLnBhdGg9ZnVuY3Rpb24oKXtjKGcsZCxlKTt2YXIgYj1mKGEuZ2x5cGhzLGcpO3JldHVybiBiLnVuaXRzUGVyRW09YS51bml0c1BlckVtLGJ9LGRhKGcsXCJ4TWluXCIsXCJfeE1pblwiKSxkYShnLFwieE1heFwiLFwiX3hNYXhcIiksZGEoZyxcInlNaW5cIixcIl95TWluXCIpLGRhKGcsXCJ5TWF4XCIsXCJfeU1heFwiKSxnfX1mdW5jdGlvbiBoYShhLGIsYyxkKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uZXcgY2Eoe2luZGV4OmIsZm9udDphfSk7cmV0dXJuIGUucGF0aD1mdW5jdGlvbigpe3ZhciBiPWMoYSxlLGQpO3JldHVybiBiLnVuaXRzUGVyRW09YS51bml0c1BlckVtLGJ9LGV9fWZ1bmN0aW9uIGlhKGEsYil7aWYoYT09PWIpcmV0dXJuITA7aWYoQXJyYXkuaXNBcnJheShhKSYmQXJyYXkuaXNBcnJheShiKSl7aWYoYS5sZW5ndGghPT1iLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrPTEpaWYoIWlhKGFbY10sYltjXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gamEoYSl7cmV0dXJuIGEubGVuZ3RoPDEyNDA/MTA3OmEubGVuZ3RoPDMzOTAwPzExMzE6MzI3Njh9ZnVuY3Rpb24ga2EoYSxiLGMpe3ZhciBkLGUsZj1bXSxnPVtdLGg9TGUuZ2V0Q2FyZDE2KGEsYik7aWYoMCE9PWgpe3ZhciBpPUxlLmdldEJ5dGUoYSxiKzIpO2Q9YisoaCsxKSppKzI7Zm9yKHZhciBqPWIrMyxrPTA7azxoKzE7ays9MSlmLnB1c2goTGUuZ2V0T2Zmc2V0KGEsaixpKSksais9aTtlPWQrZltoXX1lbHNlIGU9YisyO2Zvcih2YXIgbD0wO2w8Zi5sZW5ndGgtMTtsKz0xKXt2YXIgbT1MZS5nZXRCeXRlcyhhLGQrZltsXSxkK2ZbbCsxXSk7YyYmKG09YyhtKSksZy5wdXNoKG0pfXJldHVybntvYmplY3RzOmcsc3RhcnRPZmZzZXQ6YixlbmRPZmZzZXQ6ZX19ZnVuY3Rpb24gbGEoYSl7Zm9yKHZhciBiPVwiXCIsYz0xNSxkPVtcIjBcIixcIjFcIixcIjJcIixcIjNcIixcIjRcIixcIjVcIixcIjZcIixcIjdcIixcIjhcIixcIjlcIixcIi5cIixcIkVcIixcIkUtXCIsbnVsbCxcIi1cIl07Oyl7dmFyIGU9YS5wYXJzZUJ5dGUoKSxmPWU+PjQsZz0xNSZlO2lmKGY9PT1jKWJyZWFrO2lmKGIrPWRbZl0sZz09PWMpYnJlYWs7Yis9ZFtnXX1yZXR1cm4gcGFyc2VGbG9hdChiKX1mdW5jdGlvbiBtYShhLGIpe3ZhciBjLGQsZSxmO2lmKDI4PT09YilyZXR1cm4gYz1hLnBhcnNlQnl0ZSgpLGQ9YS5wYXJzZUJ5dGUoKSxjPDw4fGQ7aWYoMjk9PT1iKXJldHVybiBjPWEucGFyc2VCeXRlKCksZD1hLnBhcnNlQnl0ZSgpLGU9YS5wYXJzZUJ5dGUoKSxmPWEucGFyc2VCeXRlKCksYzw8MjR8ZDw8MTZ8ZTw8OHxmO2lmKDMwPT09YilyZXR1cm4gbGEoYSk7aWYoYj49MzImJmI8PTI0NilyZXR1cm4gYi0xMzk7aWYoYj49MjQ3JiZiPD0yNTApcmV0dXJuIGM9YS5wYXJzZUJ5dGUoKSwyNTYqKGItMjQ3KStjKzEwODtpZihiPj0yNTEmJmI8PTI1NClyZXR1cm4gYz1hLnBhcnNlQnl0ZSgpLDI1NiotKGItMjUxKS1jLTEwODt0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGIwIFwiK2IpfWZ1bmN0aW9uIG5hKGEpe2Zvcih2YXIgYj17fSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hW2NdWzBdLGU9YVtjXVsxXSxmPXZvaWQgMDtpZihmPTE9PT1lLmxlbmd0aD9lWzBdOmUsYi5oYXNPd25Qcm9wZXJ0eShkKSYmIWlzTmFOKGJbZF0pKXRocm93IG5ldyBFcnJvcihcIk9iamVjdCBcIitiK1wiIGFscmVhZHkgaGFzIGtleSBcIitkKTtiW2RdPWZ9cmV0dXJuIGJ9ZnVuY3Rpb24gb2EoYSxiLGMpe2I9dm9pZCAwIT09Yj9iOjA7dmFyIGQ9bmV3IExlLlBhcnNlcihhLGIpLGU9W10sZj1bXTtmb3IoYz12b2lkIDAhPT1jP2M6YS5sZW5ndGg7ZC5yZWxhdGl2ZU9mZnNldDxjOyl7dmFyIGc9ZC5wYXJzZUJ5dGUoKTtnPD0yMT8oMTI9PT1nJiYoZz0xMjAwK2QucGFyc2VCeXRlKCkpLGUucHVzaChbZyxmXSksZj1bXSk6Zi5wdXNoKG1hKGQsZykpfXJldHVybiBuYShlKX1mdW5jdGlvbiBwYShhLGIpe3JldHVybiBiPWI8PTM5MD9OZVtiXTphW2ItMzkxXX1mdW5jdGlvbiBxYShhLGIsYyl7Zm9yKHZhciBkLGU9e30sZj0wO2Y8Yi5sZW5ndGg7Zis9MSl7dmFyIGc9YltmXTtpZihBcnJheS5pc0FycmF5KGcudHlwZSkpe3ZhciBoPVtdO2gubGVuZ3RoPWcudHlwZS5sZW5ndGg7Zm9yKHZhciBpPTA7aTxnLnR5cGUubGVuZ3RoO2krKylkPXZvaWQgMCE9PWFbZy5vcF0/YVtnLm9wXVtpXTp2b2lkIDAsdm9pZCAwPT09ZCYmKGQ9dm9pZCAwIT09Zy52YWx1ZSYmdm9pZCAwIT09Zy52YWx1ZVtpXT9nLnZhbHVlW2ldOm51bGwpLFwiU0lEXCI9PT1nLnR5cGVbaV0mJihkPXBhKGMsZCkpLGhbaV09ZDtlW2cubmFtZV09aH1lbHNlIGQ9YVtnLm9wXSx2b2lkIDA9PT1kJiYoZD12b2lkIDAhPT1nLnZhbHVlP2cudmFsdWU6bnVsbCksXCJTSURcIj09PWcudHlwZSYmKGQ9cGEoYyxkKSksZVtnLm5hbWVdPWR9cmV0dXJuIGV9ZnVuY3Rpb24gcmEoYSxiKXt2YXIgYz17fTtyZXR1cm4gYy5mb3JtYXRNYWpvcj1MZS5nZXRDYXJkOChhLGIpLGMuZm9ybWF0TWlub3I9TGUuZ2V0Q2FyZDgoYSxiKzEpLGMuc2l6ZT1MZS5nZXRDYXJkOChhLGIrMiksYy5vZmZzZXRTaXplPUxlLmdldENhcmQ4KGEsYiszKSxjLnN0YXJ0T2Zmc2V0PWIsYy5lbmRPZmZzZXQ9Yis0LGN9ZnVuY3Rpb24gc2EoYSxiKXtyZXR1cm4gcWEob2EoYSwwLGEuYnl0ZUxlbmd0aCksVGUsYil9ZnVuY3Rpb24gdGEoYSxiLGMsZCl7cmV0dXJuIHFhKG9hKGEsYixjKSxVZSxkKX1mdW5jdGlvbiB1YShhLGIsYyxkKXtmb3IodmFyIGU9W10sZj0wO2Y8Yy5sZW5ndGg7Zis9MSl7dmFyIGc9bmV3IERhdGFWaWV3KG5ldyBVaW50OEFycmF5KGNbZl0pLmJ1ZmZlciksaD1zYShnLGQpO2guX3N1YnJzPVtdLGguX3N1YnJzQmlhcz0wO3ZhciBpPWgucHJpdmF0ZVswXSxqPWgucHJpdmF0ZVsxXTtpZigwIT09aSYmMCE9PWope3ZhciBrPXRhKGEsaitiLGksZCk7aWYoaC5fZGVmYXVsdFdpZHRoWD1rLmRlZmF1bHRXaWR0aFgsaC5fbm9taW5hbFdpZHRoWD1rLm5vbWluYWxXaWR0aFgsMCE9PWsuc3VicnMpe3ZhciBsPWoray5zdWJycyxtPWthKGEsbCtiKTtoLl9zdWJycz1tLm9iamVjdHMsaC5fc3VicnNCaWFzPWphKGguX3N1YnJzKX1oLl9wcml2YXRlRGljdD1rfWUucHVzaChoKX1yZXR1cm4gZX1mdW5jdGlvbiB2YShhLGIsYyxkKXt2YXIgZSxmLGc9bmV3IExlLlBhcnNlcihhLGIpO2MtPTE7dmFyIGg9W1wiLm5vdGRlZlwiXSxpPWcucGFyc2VDYXJkOCgpO2lmKDA9PT1pKWZvcih2YXIgaj0wO2o8YztqKz0xKWU9Zy5wYXJzZVNJRCgpLGgucHVzaChwYShkLGUpKTtlbHNlIGlmKDE9PT1pKWZvcig7aC5sZW5ndGg8PWM7KXtlPWcucGFyc2VTSUQoKSxmPWcucGFyc2VDYXJkOCgpO2Zvcih2YXIgaz0wO2s8PWY7ays9MSloLnB1c2gocGEoZCxlKSksZSs9MX1lbHNle2lmKDIhPT1pKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gY2hhcnNldCBmb3JtYXQgXCIraSk7Zm9yKDtoLmxlbmd0aDw9Yzspe2U9Zy5wYXJzZVNJRCgpLGY9Zy5wYXJzZUNhcmQxNigpO2Zvcih2YXIgbD0wO2w8PWY7bCs9MSloLnB1c2gocGEoZCxlKSksZSs9MX19cmV0dXJuIGh9ZnVuY3Rpb24gd2EoYSxiLGMpe3ZhciBkLGU9e30sZj1uZXcgTGUuUGFyc2VyKGEsYiksZz1mLnBhcnNlQ2FyZDgoKTtpZigwPT09Zylmb3IodmFyIGg9Zi5wYXJzZUNhcmQ4KCksaT0wO2k8aDtpKz0xKWQ9Zi5wYXJzZUNhcmQ4KCksZVtkXT1pO2Vsc2V7aWYoMSE9PWcpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBlbmNvZGluZyBmb3JtYXQgXCIrZyk7dmFyIGo9Zi5wYXJzZUNhcmQ4KCk7ZD0xO2Zvcih2YXIgaz0wO2s8ajtrKz0xKWZvcih2YXIgbD1mLnBhcnNlQ2FyZDgoKSxtPWYucGFyc2VDYXJkOCgpLG49bDtuPD1sK207bis9MSllW25dPWQsZCs9MX1yZXR1cm4gbmV3IFooZSxjKX1mdW5jdGlvbiB4YShhLGIsYyl7ZnVuY3Rpb24gZChhLGIpe3QmJm8uY2xvc2VQYXRoKCksby5tb3ZlVG8oYSxiKSx0PSEwfWZ1bmN0aW9uIGUoKXt2YXIgYTthPXAubGVuZ3RoJTIhPTAsYSYmIXMmJih5PXAuc2hpZnQoKStuKSxxKz1wLmxlbmd0aD4+MSxwLmxlbmd0aD0wLHM9ITB9ZnVuY3Rpb24gZihjKXtmb3IodmFyIG0scix3LHgseixBLEIsQyxELEUsRixHLEg9MDtIPGMubGVuZ3RoOyl7dmFyIEk9Y1tIXTtzd2l0Y2goSCs9MSxJKXtjYXNlIDE6Y2FzZSAzOmUoKTticmVhaztjYXNlIDQ6cC5sZW5ndGg+MSYmIXMmJih5PXAuc2hpZnQoKStuLHM9ITApLHYrPXAucG9wKCksZCh1LHYpO2JyZWFrO2Nhc2UgNTpmb3IoO3AubGVuZ3RoPjA7KXUrPXAuc2hpZnQoKSx2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTticmVhaztjYXNlIDY6Zm9yKDtwLmxlbmd0aD4wJiYodSs9cC5zaGlmdCgpLG8ubGluZVRvKHUsdiksMCE9PXAubGVuZ3RoKTspdis9cC5zaGlmdCgpLG8ubGluZVRvKHUsdik7YnJlYWs7Y2FzZSA3OmZvcig7cC5sZW5ndGg+MCYmKHYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpLDAhPT1wLmxlbmd0aCk7KXUrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2JyZWFrO2Nhc2UgODpmb3IoO3AubGVuZ3RoPjA7KWc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksXG51PWkrcC5zaGlmdCgpLHY9aitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztjYXNlIDEwOno9cC5wb3AoKStsLEE9a1t6XSxBJiZmKEEpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuO2Nhc2UgMTI6c3dpdGNoKEk9Y1tIXSxIKz0xLEkpe2Nhc2UgMzU6Zz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxCPWkrcC5zaGlmdCgpLEM9aitwLnNoaWZ0KCksRD1CK3Auc2hpZnQoKSxFPUMrcC5zaGlmdCgpLEY9RCtwLnNoaWZ0KCksRz1FK3Auc2hpZnQoKSx1PUYrcC5zaGlmdCgpLHY9RytwLnNoaWZ0KCkscC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztjYXNlIDM0Omc9dStwLnNoaWZ0KCksaD12LGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxCPWkrcC5zaGlmdCgpLEM9aixEPUIrcC5zaGlmdCgpLEU9aixGPUQrcC5zaGlmdCgpLEc9dix1PUYrcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztjYXNlIDM2Omc9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksQj1pK3Auc2hpZnQoKSxDPWosRD1CK3Auc2hpZnQoKSxFPWosRj1EK3Auc2hpZnQoKSxHPUUrcC5zaGlmdCgpLHU9RitwLnNoaWZ0KCksby5jdXJ2ZVRvKGcsaCxpLGosQixDKSxvLmN1cnZlVG8oRCxFLEYsRyx1LHYpO2JyZWFrO2Nhc2UgMzc6Zz11K3Auc2hpZnQoKSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSxCPWkrcC5zaGlmdCgpLEM9aitwLnNoaWZ0KCksRD1CK3Auc2hpZnQoKSxFPUMrcC5zaGlmdCgpLEY9RCtwLnNoaWZ0KCksRz1FK3Auc2hpZnQoKSxNYXRoLmFicyhGLXUpPk1hdGguYWJzKEctdik/dT1GK3Auc2hpZnQoKTp2PUcrcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLEIsQyksby5jdXJ2ZVRvKEQsRSxGLEcsdSx2KTticmVhaztkZWZhdWx0OmNvbnNvbGUubG9nKFwiR2x5cGggXCIrYi5pbmRleCtcIjogdW5rbm93biBvcGVyYXRvciAxMjAwXCIrSSkscC5sZW5ndGg9MH1icmVhaztjYXNlIDE0OnAubGVuZ3RoPjAmJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx0JiYoby5jbG9zZVBhdGgoKSx0PSExKTticmVhaztjYXNlIDE4OmUoKTticmVhaztjYXNlIDE5OmNhc2UgMjA6ZSgpLEgrPXErNz4+MzticmVhaztjYXNlIDIxOnAubGVuZ3RoPjImJiFzJiYoeT1wLnNoaWZ0KCkrbixzPSEwKSx2Kz1wLnBvcCgpLHUrPXAucG9wKCksZCh1LHYpO2JyZWFrO2Nhc2UgMjI6cC5sZW5ndGg+MSYmIXMmJih5PXAuc2hpZnQoKStuLHM9ITApLHUrPXAucG9wKCksZCh1LHYpO2JyZWFrO2Nhc2UgMjM6ZSgpO2JyZWFrO2Nhc2UgMjQ6Zm9yKDtwLmxlbmd0aD4yOylnPXUrcC5zaGlmdCgpLGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO3UrPXAuc2hpZnQoKSx2Kz1wLnNoaWZ0KCksby5saW5lVG8odSx2KTticmVhaztjYXNlIDI1OmZvcig7cC5sZW5ndGg+NjspdSs9cC5zaGlmdCgpLHYrPXAuc2hpZnQoKSxvLmxpbmVUbyh1LHYpO2c9dStwLnNoaWZ0KCksaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAyNjpmb3IocC5sZW5ndGglMiYmKHUrPXAuc2hpZnQoKSk7cC5sZW5ndGg+MDspZz11LGg9ditwLnNoaWZ0KCksaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aSx2PWorcC5zaGlmdCgpLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAyNzpmb3IocC5sZW5ndGglMiYmKHYrPXAuc2hpZnQoKSk7cC5sZW5ndGg+MDspZz11K3Auc2hpZnQoKSxoPXYsaT1nK3Auc2hpZnQoKSxqPWgrcC5zaGlmdCgpLHU9aStwLnNoaWZ0KCksdj1qLG8uY3VydmVUbyhnLGgsaSxqLHUsdik7YnJlYWs7Y2FzZSAyODptPWNbSF0scj1jW0grMV0scC5wdXNoKChtPDwyNHxyPDwxNik+PjE2KSxIKz0yO2JyZWFrO2Nhc2UgMjk6ej1wLnBvcCgpK2EuZ3N1YnJzQmlhcyxBPWEuZ3N1YnJzW3pdLEEmJmYoQSk7YnJlYWs7Y2FzZSAzMDpmb3IoO3AubGVuZ3RoPjAmJihnPXUsaD12K3Auc2hpZnQoKSxpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdT1pK3Auc2hpZnQoKSx2PWorKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KSwwIT09cC5sZW5ndGgpOylnPXUrcC5zaGlmdCgpLGg9dixpPWcrcC5zaGlmdCgpLGo9aCtwLnNoaWZ0KCksdj1qK3Auc2hpZnQoKSx1PWkrKDE9PT1wLmxlbmd0aD9wLnNoaWZ0KCk6MCksby5jdXJ2ZVRvKGcsaCxpLGosdSx2KTticmVhaztjYXNlIDMxOmZvcig7cC5sZW5ndGg+MCYmKGc9dStwLnNoaWZ0KCksaD12LGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx2PWorcC5zaGlmdCgpLHU9aSsoMT09PXAubGVuZ3RoP3Auc2hpZnQoKTowKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpLDAhPT1wLmxlbmd0aCk7KWc9dSxoPXYrcC5zaGlmdCgpLGk9ZytwLnNoaWZ0KCksaj1oK3Auc2hpZnQoKSx1PWkrcC5zaGlmdCgpLHY9aisoMT09PXAubGVuZ3RoP3Auc2hpZnQoKTowKSxvLmN1cnZlVG8oZyxoLGksaix1LHYpO2JyZWFrO2RlZmF1bHQ6STwzMj9jb25zb2xlLmxvZyhcIkdseXBoIFwiK2IuaW5kZXgrXCI6IHVua25vd24gb3BlcmF0b3IgXCIrSSk6STwyNDc/cC5wdXNoKEktMTM5KTpJPDI1MT8obT1jW0hdLEgrPTEscC5wdXNoKDI1NiooSS0yNDcpK20rMTA4KSk6STwyNTU/KG09Y1tIXSxIKz0xLHAucHVzaCgyNTYqLShJLTI1MSktbS0xMDgpKToobT1jW0hdLHI9Y1tIKzFdLHc9Y1tIKzJdLHg9Y1tIKzNdLEgrPTQscC5wdXNoKChtPDwyNHxyPDwxNnx3PDw4fHgpLzY1NTM2KSl9fX12YXIgZyxoLGksaixrLGwsbSxuLG89bmV3IHIscD1bXSxxPTAscz0hMSx0PSExLHU9MCx2PTA7aWYoYS5pc0NJREZvbnQpe3ZhciB3PWEudGFibGVzLmNmZi50b3BEaWN0Ll9mZFNlbGVjdFtiLmluZGV4XSx4PWEudGFibGVzLmNmZi50b3BEaWN0Ll9mZEFycmF5W3ddO2s9eC5fc3VicnMsbD14Ll9zdWJyc0JpYXMsbT14Ll9kZWZhdWx0V2lkdGhYLG49eC5fbm9taW5hbFdpZHRoWH1lbHNlIGs9YS50YWJsZXMuY2ZmLnRvcERpY3QuX3N1YnJzLGw9YS50YWJsZXMuY2ZmLnRvcERpY3QuX3N1YnJzQmlhcyxtPWEudGFibGVzLmNmZi50b3BEaWN0Ll9kZWZhdWx0V2lkdGhYLG49YS50YWJsZXMuY2ZmLnRvcERpY3QuX25vbWluYWxXaWR0aFg7dmFyIHk9bTtyZXR1cm4gZihjKSxiLmFkdmFuY2VXaWR0aD15LG99ZnVuY3Rpb24geWEoYSxiLGMsZCl7dmFyIGUsZj1bXSxnPW5ldyBMZS5QYXJzZXIoYSxiKSxoPWcucGFyc2VDYXJkOCgpO2lmKDA9PT1oKWZvcih2YXIgaT0wO2k8YztpKyspe2lmKChlPWcucGFyc2VDYXJkOCgpKT49ZCl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgdGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgaGFzIGJhZCBGRCBpbmRleCB2YWx1ZSBcIitlK1wiIChGRCBjb3VudCBcIitkK1wiKVwiKTtmLnB1c2goZSl9ZWxzZXtpZigzIT09aCl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgVGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgdGFibGUgaGFzIHVuc3VwcG9ydGVkIGZvcm1hdCBcIitoKTt2YXIgaj1nLnBhcnNlQ2FyZDE2KCksaz1nLnBhcnNlQ2FyZDE2KCk7aWYoMCE9PWspdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIFRhYmxlIENJRCBGb250IEZEU2VsZWN0IGZvcm1hdCAzIHJhbmdlIGhhcyBiYWQgaW5pdGlhbCBHSUQgXCIrayk7Zm9yKHZhciBsLG09MDttPGo7bSsrKXtpZihlPWcucGFyc2VDYXJkOCgpLGw9Zy5wYXJzZUNhcmQxNigpLGU+PWQpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIHRhYmxlIENJRCBGb250IEZEU2VsZWN0IGhhcyBiYWQgRkQgaW5kZXggdmFsdWUgXCIrZStcIiAoRkQgY291bnQgXCIrZCtcIilcIik7aWYobD5jKXRocm93IG5ldyBFcnJvcihcIkNGRiBUYWJsZSBDSUQgRm9udCBGRFNlbGVjdCBmb3JtYXQgMyByYW5nZSBoYXMgYmFkIEdJRCBcIitsKTtmb3IoO2s8bDtrKyspZi5wdXNoKGUpO2s9bH1pZihsIT09Yyl0aHJvdyBuZXcgRXJyb3IoXCJDRkYgVGFibGUgQ0lEIEZvbnQgRkRTZWxlY3QgZm9ybWF0IDMgcmFuZ2UgaGFzIGJhZCBmaW5hbCBHSUQgXCIrbCl9cmV0dXJuIGZ9ZnVuY3Rpb24gemEoYSxiLGMpe2MudGFibGVzLmNmZj17fTt2YXIgZD1yYShhLGIpLGU9a2EoYSxkLmVuZE9mZnNldCxMZS5ieXRlc1RvU3RyaW5nKSxmPWthKGEsZS5lbmRPZmZzZXQpLGc9a2EoYSxmLmVuZE9mZnNldCxMZS5ieXRlc1RvU3RyaW5nKSxoPWthKGEsZy5lbmRPZmZzZXQpO2MuZ3N1YnJzPWgub2JqZWN0cyxjLmdzdWJyc0JpYXM9amEoYy5nc3VicnMpO3ZhciBpPXVhKGEsYixmLm9iamVjdHMsZy5vYmplY3RzKTtpZigxIT09aS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ0ZGIHRhYmxlIGhhcyB0b28gbWFueSBmb250cyBpbiAnRm9udFNldCcgLSBjb3VudCBvZiBmb250cyBOYW1lSW5kZXgubGVuZ3RoID0gXCIraS5sZW5ndGgpO3ZhciBqPWlbMF07aWYoYy50YWJsZXMuY2ZmLnRvcERpY3Q9aixqLl9wcml2YXRlRGljdCYmKGMuZGVmYXVsdFdpZHRoWD1qLl9wcml2YXRlRGljdC5kZWZhdWx0V2lkdGhYLGMubm9taW5hbFdpZHRoWD1qLl9wcml2YXRlRGljdC5ub21pbmFsV2lkdGhYKSx2b2lkIDAhPT1qLnJvc1swXSYmdm9pZCAwIT09ai5yb3NbMV0mJihjLmlzQ0lERm9udD0hMCksYy5pc0NJREZvbnQpe3ZhciBrPWouZmRBcnJheSxsPWouZmRTZWxlY3Q7aWYoMD09PWt8fDA9PT1sKXRocm93IG5ldyBFcnJvcihcIkZvbnQgaXMgbWFya2VkIGFzIGEgQ0lEIGZvbnQsIGJ1dCBGREFycmF5IGFuZC9vciBGRFNlbGVjdCBpbmZvcm1hdGlvbiBpcyBtaXNzaW5nXCIpO2srPWI7dmFyIG09a2EoYSxrKSxuPXVhKGEsYixtLm9iamVjdHMsZy5vYmplY3RzKTtqLl9mZEFycmF5PW4sbCs9YixqLl9mZFNlbGVjdD15YShhLGwsYy5udW1HbHlwaHMsbi5sZW5ndGgpfXZhciBvPWIrai5wcml2YXRlWzFdLHA9dGEoYSxvLGoucHJpdmF0ZVswXSxnLm9iamVjdHMpO2lmKGMuZGVmYXVsdFdpZHRoWD1wLmRlZmF1bHRXaWR0aFgsYy5ub21pbmFsV2lkdGhYPXAubm9taW5hbFdpZHRoWCwwIT09cC5zdWJycyl7dmFyIHE9bytwLnN1YnJzLHI9a2EoYSxxKTtjLnN1YnJzPXIub2JqZWN0cyxjLnN1YnJzQmlhcz1qYShjLnN1YnJzKX1lbHNlIGMuc3VicnM9W10sYy5zdWJyc0JpYXM9MDt2YXIgcz1rYShhLGIrai5jaGFyU3RyaW5ncyk7Yy5uR2x5cGhzPXMub2JqZWN0cy5sZW5ndGg7dmFyIHQ9dmEoYSxiK2ouY2hhcnNldCxjLm5HbHlwaHMsZy5vYmplY3RzKTswPT09ai5lbmNvZGluZz9jLmNmZkVuY29kaW5nPW5ldyBaKE9lLHQpOjE9PT1qLmVuY29kaW5nP2MuY2ZmRW5jb2Rpbmc9bmV3IFooUGUsdCk6Yy5jZmZFbmNvZGluZz13YShhLGIrai5lbmNvZGluZyx0KSxjLmVuY29kaW5nPWMuZW5jb2Rpbmd8fGMuY2ZmRW5jb2RpbmcsYy5nbHlwaHM9bmV3IFNlLkdseXBoU2V0KGMpO2Zvcih2YXIgdT0wO3U8Yy5uR2x5cGhzO3UrPTEpe3ZhciB2PXMub2JqZWN0c1t1XTtjLmdseXBocy5wdXNoKHUsU2UuY2ZmR2x5cGhMb2FkZXIoYyx1LHhhLHYpKX19ZnVuY3Rpb24gQWEoYSxiKXt2YXIgYyxkPU5lLmluZGV4T2YoYSk7cmV0dXJuIGQ+PTAmJihjPWQpLGQ9Yi5pbmRleE9mKGEpLGQ+PTA/Yz1kK05lLmxlbmd0aDooYz1OZS5sZW5ndGgrYi5sZW5ndGgsYi5wdXNoKGEpKSxjfWZ1bmN0aW9uIEJhKCl7cmV0dXJuIG5ldyBJZS5SZWNvcmQoXCJIZWFkZXJcIixbe25hbWU6XCJtYWpvclwiLHR5cGU6XCJDYXJkOFwiLHZhbHVlOjF9LHtuYW1lOlwibWlub3JcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZTowfSx7bmFtZTpcImhkclNpemVcIix0eXBlOlwiQ2FyZDhcIix2YWx1ZTo0fSx7bmFtZTpcIm1ham9yXCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6MX1dKX1mdW5jdGlvbiBDYShhKXt2YXIgYj1uZXcgSWUuUmVjb3JkKFwiTmFtZSBJTkRFWFwiLFt7bmFtZTpcIm5hbWVzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSk7Yi5uYW1lcz1bXTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrPTEpYi5uYW1lcy5wdXNoKHtuYW1lOlwibmFtZV9cIitjLHR5cGU6XCJOQU1FXCIsdmFsdWU6YVtjXX0pO3JldHVybiBifWZ1bmN0aW9uIERhKGEsYixjKXtmb3IodmFyIGQ9e30sZT0wO2U8YS5sZW5ndGg7ZSs9MSl7dmFyIGY9YVtlXSxnPWJbZi5uYW1lXTt2b2lkIDA9PT1nfHxpYShnLGYudmFsdWUpfHwoXCJTSURcIj09PWYudHlwZSYmKGc9QWEoZyxjKSksZFtmLm9wXT17bmFtZTpmLm5hbWUsdHlwZTpmLnR5cGUsdmFsdWU6Z30pfXJldHVybiBkfWZ1bmN0aW9uIEVhKGEsYil7dmFyIGM9bmV3IEllLlJlY29yZChcIlRvcCBESUNUXCIsW3tuYW1lOlwiZGljdFwiLHR5cGU6XCJESUNUXCIsdmFsdWU6e319XSk7cmV0dXJuIGMuZGljdD1EYShUZSxhLGIpLGN9ZnVuY3Rpb24gRmEoYSl7dmFyIGI9bmV3IEllLlJlY29yZChcIlRvcCBESUNUIElOREVYXCIsW3tuYW1lOlwidG9wRGljdHNcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKTtyZXR1cm4gYi50b3BEaWN0cz1be25hbWU6XCJ0b3BEaWN0XzBcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTphfV0sYn1mdW5jdGlvbiBHYShhKXt2YXIgYj1uZXcgSWUuUmVjb3JkKFwiU3RyaW5nIElOREVYXCIsW3tuYW1lOlwic3RyaW5nc1wiLHR5cGU6XCJJTkRFWFwiLHZhbHVlOltdfV0pO2Iuc3RyaW5ncz1bXTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrPTEpYi5zdHJpbmdzLnB1c2goe25hbWU6XCJzdHJpbmdfXCIrYyx0eXBlOlwiU1RSSU5HXCIsdmFsdWU6YVtjXX0pO3JldHVybiBifWZ1bmN0aW9uIEhhKCl7cmV0dXJuIG5ldyBJZS5SZWNvcmQoXCJHbG9iYWwgU3ViciBJTkRFWFwiLFt7bmFtZTpcInN1YnJzXCIsdHlwZTpcIklOREVYXCIsdmFsdWU6W119XSl9ZnVuY3Rpb24gSWEoYSxiKXtmb3IodmFyIGM9bmV3IEllLlJlY29yZChcIkNoYXJzZXRzXCIsW3tuYW1lOlwiZm9ybWF0XCIsdHlwZTpcIkNhcmQ4XCIsdmFsdWU6MH1dKSxkPTA7ZDxhLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdLGY9QWEoZSxiKTtjLmZpZWxkcy5wdXNoKHtuYW1lOlwiZ2x5cGhfXCIrZCx0eXBlOlwiU0lEXCIsdmFsdWU6Zn0pfXJldHVybiBjfWZ1bmN0aW9uIEphKGEpe3ZhciBiPVtdLGM9YS5wYXRoO2IucHVzaCh7bmFtZTpcIndpZHRoXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmEuYWR2YW5jZVdpZHRofSk7Zm9yKHZhciBkPTAsZT0wLGY9MDtmPGMuY29tbWFuZHMubGVuZ3RoO2YrPTEpe3ZhciBnPXZvaWQgMCxoPXZvaWQgMCxpPWMuY29tbWFuZHNbZl07aWYoXCJRXCI9PT1pLnR5cGUpe3ZhciBqPTEvMyxrPTIvMztpPXt0eXBlOlwiQ1wiLHg6aS54LHk6aS55LHgxOmoqZCtrKmkueDEseTE6aiplK2sqaS55MSx4MjpqKmkueCtrKmkueDEseTI6aippLnkrayppLnkxfX1pZihcIk1cIj09PWkudHlwZSlnPU1hdGgucm91bmQoaS54LWQpLGg9TWF0aC5yb3VuZChpLnktZSksYi5wdXNoKHtuYW1lOlwiZHhcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6Z30pLGIucHVzaCh7bmFtZTpcImR5XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmh9KSxiLnB1c2goe25hbWU6XCJybW92ZXRvXCIsdHlwZTpcIk9QXCIsdmFsdWU6MjF9KSxkPU1hdGgucm91bmQoaS54KSxlPU1hdGgucm91bmQoaS55KTtlbHNlIGlmKFwiTFwiPT09aS50eXBlKWc9TWF0aC5yb3VuZChpLngtZCksaD1NYXRoLnJvdW5kKGkueS1lKSxiLnB1c2goe25hbWU6XCJkeFwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpnfSksYi5wdXNoKHtuYW1lOlwiZHlcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6aH0pLGIucHVzaCh7bmFtZTpcInJsaW5ldG9cIix0eXBlOlwiT1BcIix2YWx1ZTo1fSksZD1NYXRoLnJvdW5kKGkueCksZT1NYXRoLnJvdW5kKGkueSk7ZWxzZSBpZihcIkNcIj09PWkudHlwZSl7dmFyIGw9TWF0aC5yb3VuZChpLngxLWQpLG09TWF0aC5yb3VuZChpLnkxLWUpLG49TWF0aC5yb3VuZChpLngyLWkueDEpLG89TWF0aC5yb3VuZChpLnkyLWkueTEpO2c9TWF0aC5yb3VuZChpLngtaS54MiksaD1NYXRoLnJvdW5kKGkueS1pLnkyKSxiLnB1c2goe25hbWU6XCJkeDFcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6bH0pLGIucHVzaCh7bmFtZTpcImR5MVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTptfSksYi5wdXNoKHtuYW1lOlwiZHgyXCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOm59KSxiLnB1c2goe25hbWU6XCJkeTJcIix0eXBlOlwiTlVNQkVSXCIsdmFsdWU6b30pLGIucHVzaCh7bmFtZTpcImR4XCIsdHlwZTpcIk5VTUJFUlwiLHZhbHVlOmd9KSxiLnB1c2goe25hbWU6XCJkeVwiLHR5cGU6XCJOVU1CRVJcIix2YWx1ZTpofSksYi5wdXNoKHtuYW1lOlwicnJjdXJ2ZXRvXCIsdHlwZTpcIk9QXCIsdmFsdWU6OH0pLGQ9TWF0aC5yb3VuZChpLngpLGU9TWF0aC5yb3VuZChpLnkpfX1yZXR1cm4gYi5wdXNoKHtuYW1lOlwiZW5kY2hhclwiLHR5cGU6XCJPUFwiLHZhbHVlOjE0fSksYn1mdW5jdGlvbiBLYShhKXtmb3IodmFyIGI9bmV3IEllLlJlY29yZChcIkNoYXJTdHJpbmdzIElOREVYXCIsW3tuYW1lOlwiY2hhclN0cmluZ3NcIix0eXBlOlwiSU5ERVhcIix2YWx1ZTpbXX1dKSxjPTA7YzxhLmxlbmd0aDtjKz0xKXt2YXIgZD1hLmdldChjKSxlPUphKGQpO2IuY2hhclN0cmluZ3MucHVzaCh7bmFtZTpkLm5hbWUsdHlwZTpcIkNIQVJTVFJJTkdcIix2YWx1ZTplfSl9cmV0dXJuIGJ9ZnVuY3Rpb24gTGEoYSxiKXt2YXIgYz1uZXcgSWUuUmVjb3JkKFwiUHJpdmF0ZSBESUNUXCIsW3tuYW1lOlwiZGljdFwiLHR5cGU6XCJESUNUXCIsdmFsdWU6e319XSk7cmV0dXJuIGMuZGljdD1EYShVZSxhLGIpLGN9ZnVuY3Rpb24gTWEoYSxiKXtmb3IodmFyIGMsZD1uZXcgSWUuVGFibGUoXCJDRkYgXCIsW3tuYW1lOlwiaGVhZGVyXCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcIm5hbWVJbmRleFwiLHR5cGU6XCJSRUNPUkRcIn0se25hbWU6XCJ0b3BEaWN0SW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwic3RyaW5nSW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwiZ2xvYmFsU3VickluZGV4XCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcImNoYXJzZXRzXCIsdHlwZTpcIlJFQ09SRFwifSx7bmFtZTpcImNoYXJTdHJpbmdzSW5kZXhcIix0eXBlOlwiUkVDT1JEXCJ9LHtuYW1lOlwicHJpdmF0ZURpY3RcIix0eXBlOlwiUkVDT1JEXCJ9XSksZT0xL2IudW5pdHNQZXJFbSxmPXt2ZXJzaW9uOmIudmVyc2lvbixmdWxsTmFtZTpiLmZ1bGxOYW1lLGZhbWlseU5hbWU6Yi5mYW1pbHlOYW1lLHdlaWdodDpiLndlaWdodE5hbWUsZm9udEJCb3g6Yi5mb250QkJveHx8WzAsMCwwLDBdLGZvbnRNYXRyaXg6W2UsMCwwLGUsMCwwXSxjaGFyc2V0Ojk5OSxlbmNvZGluZzowLGNoYXJTdHJpbmdzOjk5OSxwcml2YXRlOlswLDk5OV19LGc9e30saD1bXSxpPTE7aTxhLmxlbmd0aDtpKz0xKWM9YS5nZXQoaSksaC5wdXNoKGMubmFtZSk7dmFyIGo9W107ZC5oZWFkZXI9QmEoKSxkLm5hbWVJbmRleD1DYShbYi5wb3N0U2NyaXB0TmFtZV0pO3ZhciBrPUVhKGYsaik7ZC50b3BEaWN0SW5kZXg9RmEoayksZC5nbG9iYWxTdWJySW5kZXg9SGEoKSxkLmNoYXJzZXRzPUlhKGgsaiksZC5jaGFyU3RyaW5nc0luZGV4PUthKGEpLGQucHJpdmF0ZURpY3Q9TGEoZyxqKSxkLnN0cmluZ0luZGV4PUdhKGopO3ZhciBsPWQuaGVhZGVyLnNpemVPZigpK2QubmFtZUluZGV4LnNpemVPZigpK2QudG9wRGljdEluZGV4LnNpemVPZigpK2Quc3RyaW5nSW5kZXguc2l6ZU9mKCkrZC5nbG9iYWxTdWJySW5kZXguc2l6ZU9mKCk7cmV0dXJuIGYuY2hhcnNldD1sLGYuZW5jb2Rpbmc9MCxmLmNoYXJTdHJpbmdzPWYuY2hhcnNldCtkLmNoYXJzZXRzLnNpemVPZigpLGYucHJpdmF0ZVsxXT1mLmNoYXJTdHJpbmdzK2QuY2hhclN0cmluZ3NJbmRleC5zaXplT2YoKSxrPUVhKGYsaiksZC50b3BEaWN0SW5kZXg9RmEoayksZH1mdW5jdGlvbiBOYShhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3JldHVybiBjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLmZvbnRSZXZpc2lvbj1NYXRoLnJvdW5kKDFlMypkLnBhcnNlRml4ZWQoKSkvMWUzLGMuY2hlY2tTdW1BZGp1c3RtZW50PWQucGFyc2VVTG9uZygpLGMubWFnaWNOdW1iZXI9ZC5wYXJzZVVMb25nKCkseGUuYXJndW1lbnQoMTU5NDgzNDE2NT09PWMubWFnaWNOdW1iZXIsXCJGb250IGhlYWRlciBoYXMgd3JvbmcgbWFnaWMgbnVtYmVyLlwiKSxjLmZsYWdzPWQucGFyc2VVU2hvcnQoKSxjLnVuaXRzUGVyRW09ZC5wYXJzZVVTaG9ydCgpLGMuY3JlYXRlZD1kLnBhcnNlTG9uZ0RhdGVUaW1lKCksYy5tb2RpZmllZD1kLnBhcnNlTG9uZ0RhdGVUaW1lKCksYy54TWluPWQucGFyc2VTaG9ydCgpLGMueU1pbj1kLnBhcnNlU2hvcnQoKSxjLnhNYXg9ZC5wYXJzZVNob3J0KCksYy55TWF4PWQucGFyc2VTaG9ydCgpLGMubWFjU3R5bGU9ZC5wYXJzZVVTaG9ydCgpLGMubG93ZXN0UmVjUFBFTT1kLnBhcnNlVVNob3J0KCksYy5mb250RGlyZWN0aW9uSGludD1kLnBhcnNlU2hvcnQoKSxjLmluZGV4VG9Mb2NGb3JtYXQ9ZC5wYXJzZVNob3J0KCksYy5nbHlwaERhdGFGb3JtYXQ9ZC5wYXJzZVNob3J0KCksY31mdW5jdGlvbiBPYShhKXt2YXIgYj1NYXRoLnJvdW5kKChuZXcgRGF0ZSkuZ2V0VGltZSgpLzFlMykrMjA4Mjg0NDgwMCxjPWI7cmV0dXJuIGEuY3JlYXRlZFRpbWVzdGFtcCYmKGM9YS5jcmVhdGVkVGltZXN0YW1wKzIwODI4NDQ4MDApLG5ldyBJZS5UYWJsZShcImhlYWRcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwiZm9udFJldmlzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwiY2hlY2tTdW1BZGp1c3RtZW50XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtYWdpY051bWJlclwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjE1OTQ4MzQxNjV9LHtuYW1lOlwiZmxhZ3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1bml0c1BlckVtXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjFlM30se25hbWU6XCJjcmVhdGVkXCIsdHlwZTpcIkxPTkdEQVRFVElNRVwiLHZhbHVlOmN9LHtuYW1lOlwibW9kaWZpZWRcIix0eXBlOlwiTE9OR0RBVEVUSU1FXCIsdmFsdWU6Yn0se25hbWU6XCJ4TWluXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5TWluXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ4TWF4XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5TWF4XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJtYWNTdHlsZVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImxvd2VzdFJlY1BQRU1cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJmb250RGlyZWN0aW9uSGludFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjJ9LHtuYW1lOlwiaW5kZXhUb0xvY0Zvcm1hdFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZ2x5cGhEYXRhRm9ybWF0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH1dLGEpfWZ1bmN0aW9uIFBhKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7cmV0dXJuIGMudmVyc2lvbj1kLnBhcnNlVmVyc2lvbigpLGMuYXNjZW5kZXI9ZC5wYXJzZVNob3J0KCksYy5kZXNjZW5kZXI9ZC5wYXJzZVNob3J0KCksYy5saW5lR2FwPWQucGFyc2VTaG9ydCgpLGMuYWR2YW5jZVdpZHRoTWF4PWQucGFyc2VVU2hvcnQoKSxjLm1pbkxlZnRTaWRlQmVhcmluZz1kLnBhcnNlU2hvcnQoKSxjLm1pblJpZ2h0U2lkZUJlYXJpbmc9ZC5wYXJzZVNob3J0KCksYy54TWF4RXh0ZW50PWQucGFyc2VTaG9ydCgpLGMuY2FyZXRTbG9wZVJpc2U9ZC5wYXJzZVNob3J0KCksYy5jYXJldFNsb3BlUnVuPWQucGFyc2VTaG9ydCgpLGMuY2FyZXRPZmZzZXQ9ZC5wYXJzZVNob3J0KCksZC5yZWxhdGl2ZU9mZnNldCs9OCxjLm1ldHJpY0RhdGFGb3JtYXQ9ZC5wYXJzZVNob3J0KCksYy5udW1iZXJPZkhNZXRyaWNzPWQucGFyc2VVU2hvcnQoKSxjfWZ1bmN0aW9uIFFhKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJoaGVhXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJGSVhFRFwiLHZhbHVlOjY1NTM2fSx7bmFtZTpcImFzY2VuZGVyXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJkZXNjZW5kZXJcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImxpbmVHYXBcIix0eXBlOlwiRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcImFkdmFuY2VXaWR0aE1heFwiLHR5cGU6XCJVRldPUkRcIix2YWx1ZTowfSx7bmFtZTpcIm1pbkxlZnRTaWRlQmVhcmluZ1wiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwibWluUmlnaHRTaWRlQmVhcmluZ1wiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwieE1heEV4dGVudFwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwiY2FyZXRTbG9wZVJpc2VcIix0eXBlOlwiU0hPUlRcIix2YWx1ZToxfSx7bmFtZTpcImNhcmV0U2xvcGVSdW5cIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImNhcmV0T2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXNlcnZlZDFcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJlc2VydmVkMlwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwicmVzZXJ2ZWQzXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJyZXNlcnZlZDRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcIm1ldHJpY0RhdGFGb3JtYXRcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcIm51bWJlck9mSE1ldHJpY3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dLGEpfWZ1bmN0aW9uIFJhKGEsYixjLGQsZSl7Zm9yKHZhciBmLGcsaD1uZXcgTGUuUGFyc2VyKGEsYiksaT0wO2k8ZDtpKz0xKXtpPGMmJihmPWgucGFyc2VVU2hvcnQoKSxnPWgucGFyc2VTaG9ydCgpKTt2YXIgaj1lLmdldChpKTtqLmFkdmFuY2VXaWR0aD1mLGoubGVmdFNpZGVCZWFyaW5nPWd9fWZ1bmN0aW9uIFNhKGEpe2Zvcih2YXIgYj1uZXcgSWUuVGFibGUoXCJobXR4XCIsW10pLGM9MDtjPGEubGVuZ3RoO2MrPTEpe3ZhciBkPWEuZ2V0KGMpLGU9ZC5hZHZhbmNlV2lkdGh8fDAsZj1kLmxlZnRTaWRlQmVhcmluZ3x8MDtiLmZpZWxkcy5wdXNoKHtuYW1lOlwiYWR2YW5jZVdpZHRoX1wiK2MsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmV9KSxiLmZpZWxkcy5wdXNoKHtuYW1lOlwibGVmdFNpZGVCZWFyaW5nX1wiK2MsdHlwZTpcIlNIT1JUXCIsdmFsdWU6Zn0pfXJldHVybiBifWZ1bmN0aW9uIFRhKGEpe2Zvcih2YXIgYj1uZXcgSWUuVGFibGUoXCJsdGFnXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjF9LHtuYW1lOlwiZmxhZ3NcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm51bVRhZ3NcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTphLmxlbmd0aH1dKSxjPVwiXCIsZD0xMis0KmEubGVuZ3RoLGU9MDtlPGEubGVuZ3RoOysrZSl7dmFyIGY9Yy5pbmRleE9mKGFbZV0pO2Y8MCYmKGY9Yy5sZW5ndGgsYys9YVtlXSksYi5maWVsZHMucHVzaCh7bmFtZTpcIm9mZnNldCBcIitlLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkK2Z9KSxiLmZpZWxkcy5wdXNoKHtuYW1lOlwibGVuZ3RoIFwiK2UsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmFbZV0ubGVuZ3RofSl9cmV0dXJuIGIuZmllbGRzLnB1c2goe25hbWU6XCJzdHJpbmdQb29sXCIsdHlwZTpcIkNIQVJBUlJBWVwiLHZhbHVlOmN9KSxifWZ1bmN0aW9uIFVhKGEsYil7dmFyIGM9bmV3IExlLlBhcnNlcihhLGIpLGQ9Yy5wYXJzZVVMb25nKCk7eGUuYXJndW1lbnQoMT09PWQsXCJVbnN1cHBvcnRlZCBsdGFnIHRhYmxlIHZlcnNpb24uXCIpLGMuc2tpcChcInVMb25nXCIsMSk7Zm9yKHZhciBlPWMucGFyc2VVTG9uZygpLGY9W10sZz0wO2c8ZTtnKyspe2Zvcih2YXIgaD1cIlwiLGk9YitjLnBhcnNlVVNob3J0KCksaj1jLnBhcnNlVVNob3J0KCksaz1pO2s8aStqOysrayloKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEuZ2V0SW50OChrKSk7Zi5wdXNoKGgpfXJldHVybiBmfWZ1bmN0aW9uIFZhKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7cmV0dXJuIGMudmVyc2lvbj1kLnBhcnNlVmVyc2lvbigpLGMubnVtR2x5cGhzPWQucGFyc2VVU2hvcnQoKSwxPT09Yy52ZXJzaW9uJiYoYy5tYXhQb2ludHM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29udG91cnM9ZC5wYXJzZVVTaG9ydCgpLGMubWF4Q29tcG9zaXRlUG9pbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heENvbXBvc2l0ZUNvbnRvdXJzPWQucGFyc2VVU2hvcnQoKSxjLm1heFpvbmVzPWQucGFyc2VVU2hvcnQoKSxjLm1heFR3aWxpZ2h0UG9pbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heFN0b3JhZ2U9ZC5wYXJzZVVTaG9ydCgpLGMubWF4RnVuY3Rpb25EZWZzPWQucGFyc2VVU2hvcnQoKSxjLm1heEluc3RydWN0aW9uRGVmcz1kLnBhcnNlVVNob3J0KCksYy5tYXhTdGFja0VsZW1lbnRzPWQucGFyc2VVU2hvcnQoKSxjLm1heFNpemVPZkluc3RydWN0aW9ucz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb21wb25lbnRFbGVtZW50cz1kLnBhcnNlVVNob3J0KCksYy5tYXhDb21wb25lbnREZXB0aD1kLnBhcnNlVVNob3J0KCkpLGN9ZnVuY3Rpb24gV2EoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcIm1heHBcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6MjA0ODB9LHtuYW1lOlwibnVtR2x5cGhzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmF9XSl9ZnVuY3Rpb24gWGEoYSxiLGMpe3N3aXRjaChhKXtjYXNlIDA6aWYoNjU1MzU9PT1iKXJldHVyblwidW5kXCI7aWYoYylyZXR1cm4gY1tiXTticmVhaztjYXNlIDE6cmV0dXJuIGFmW2JdO2Nhc2UgMzpyZXR1cm4gY2ZbYl19fWZ1bmN0aW9uIFlhKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiBkZjtjYXNlIDE6cmV0dXJuIGZmW2NdfHxlZltiXTtjYXNlIDM6aWYoMT09PWJ8fDEwPT09YilyZXR1cm4gZGZ9fWZ1bmN0aW9uIFphKGEsYixjKXtmb3IodmFyIGQ9e30sZT1uZXcgTGUuUGFyc2VyKGEsYiksZj1lLnBhcnNlVVNob3J0KCksZz1lLnBhcnNlVVNob3J0KCksaD1lLm9mZnNldCtlLnBhcnNlVVNob3J0KCksaT0wO2k8ZztpKyspe3ZhciBqPWUucGFyc2VVU2hvcnQoKSxrPWUucGFyc2VVU2hvcnQoKSxsPWUucGFyc2VVU2hvcnQoKSxtPWUucGFyc2VVU2hvcnQoKSxuPV9lW21dfHxtLG89ZS5wYXJzZVVTaG9ydCgpLHA9ZS5wYXJzZVVTaG9ydCgpLHE9WGEoaixsLGMpLHI9WWEoaixrLGwpO2lmKHZvaWQgMCE9PXImJnZvaWQgMCE9PXEpe3ZhciBzPXZvaWQgMDtpZihzPXI9PT1kZj9BZS5VVEYxNihhLGgrcCxvKTpBZS5NQUNTVFJJTkcoYSxoK3AsbyxyKSl7dmFyIHQ9ZFtuXTt2b2lkIDA9PT10JiYodD1kW25dPXt9KSx0W3FdPXN9fX1yZXR1cm4gMT09PWYmJmUucGFyc2VVU2hvcnQoKSxkfWZ1bmN0aW9uICRhKGEpe3ZhciBiPXt9O2Zvcih2YXIgYyBpbiBhKWJbYVtjXV09cGFyc2VJbnQoYyk7cmV0dXJuIGJ9ZnVuY3Rpb24gX2EoYSxiLGMsZCxlLGYpe3JldHVybiBuZXcgSWUuUmVjb3JkKFwiTmFtZVJlY29yZFwiLFt7bmFtZTpcInBsYXRmb3JtSURcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6YX0se25hbWU6XCJlbmNvZGluZ0lEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmJ9LHtuYW1lOlwibGFuZ3VhZ2VJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpjfSx7bmFtZTpcIm5hbWVJRFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpkfSx7bmFtZTpcImxlbmd0aFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTplfSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTpmfV0pfWZ1bmN0aW9uIGFiKGEsYil7dmFyIGM9YS5sZW5ndGgsZD1iLmxlbmd0aC1jKzE7YTpmb3IodmFyIGU9MDtlPGQ7ZSsrKWZvcig7ZTxkO2UrKyl7Zm9yKHZhciBmPTA7ZjxjO2YrKylpZihiW2UrZl0hPT1hW2ZdKWNvbnRpbnVlIGE7cmV0dXJuIGV9cmV0dXJuLTF9ZnVuY3Rpb24gYmIoYSxiKXt2YXIgYz1hYihhLGIpO2lmKGM8MCl7Yz1iLmxlbmd0aDtmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2Q8ZTsrK2QpYi5wdXNoKGFbZF0pfXJldHVybiBjfWZ1bmN0aW9uIGNiKGEsYil7dmFyIGMsZD1bXSxlPXt9LGY9JGEoX2UpO2Zvcih2YXIgZyBpbiBhKXt2YXIgaD1mW2ddO2lmKHZvaWQgMD09PWgmJihoPWcpLGM9cGFyc2VJbnQoaCksaXNOYU4oYykpdGhyb3cgbmV3IEVycm9yKCdOYW1lIHRhYmxlIGVudHJ5IFwiJytnKydcIiBkb2VzIG5vdCBleGlzdCwgc2VlIG5hbWVUYWJsZU5hbWVzIGZvciBjb21wbGV0ZSBsaXN0LicpO2VbY109YVtnXSxkLnB1c2goYyl9Zm9yKHZhciBpPSRhKGFmKSxqPSRhKGNmKSxrPVtdLGw9W10sbT0wO208ZC5sZW5ndGg7bSsrKXtjPWRbbV07dmFyIG49ZVtjXTtmb3IodmFyIG8gaW4gbil7dmFyIHA9bltvXSxxPTEscj1pW29dLHM9YmZbcl0sdD1ZYShxLHMsciksdT1CZS5NQUNTVFJJTkcocCx0KTt2b2lkIDA9PT11JiYocT0wLHI9Yi5pbmRleE9mKG8pLHI8MCYmKHI9Yi5sZW5ndGgsYi5wdXNoKG8pKSxzPTQsdT1CZS5VVEYxNihwKSk7dmFyIHY9YmIodSxsKTtrLnB1c2goX2EocSxzLHIsYyx1Lmxlbmd0aCx2KSk7dmFyIHc9altvXTtpZih2b2lkIDAhPT13KXt2YXIgeD1CZS5VVEYxNihwKSx5PWJiKHgsbCk7ay5wdXNoKF9hKDMsMSx3LGMseC5sZW5ndGgseSkpfX19ay5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEucGxhdGZvcm1JRC1iLnBsYXRmb3JtSUR8fGEuZW5jb2RpbmdJRC1iLmVuY29kaW5nSUR8fGEubGFuZ3VhZ2VJRC1iLmxhbmd1YWdlSUR8fGEubmFtZUlELWIubmFtZUlEfSk7Zm9yKHZhciB6PW5ldyBJZS5UYWJsZShcIm5hbWVcIixbe25hbWU6XCJmb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJjb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTprLmxlbmd0aH0se25hbWU6XCJzdHJpbmdPZmZzZXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6NisxMiprLmxlbmd0aH1dKSxBPTA7QTxrLmxlbmd0aDtBKyspei5maWVsZHMucHVzaCh7bmFtZTpcInJlY29yZF9cIitBLHR5cGU6XCJSRUNPUkRcIix2YWx1ZTprW0FdfSk7cmV0dXJuIHouZmllbGRzLnB1c2goe25hbWU6XCJzdHJpbmdzXCIsdHlwZTpcIkxJVEVSQUxcIix2YWx1ZTpsfSksen1mdW5jdGlvbiBkYihhKXtmb3IodmFyIGI9MDtiPGhmLmxlbmd0aDtiKz0xKXt2YXIgYz1oZltiXTtpZihhPj1jLmJlZ2luJiZhPGMuZW5kKXJldHVybiBifXJldHVybi0xfWZ1bmN0aW9uIGViKGEsYil7dmFyIGM9e30sZD1uZXcgTGUuUGFyc2VyKGEsYik7Yy52ZXJzaW9uPWQucGFyc2VVU2hvcnQoKSxjLnhBdmdDaGFyV2lkdGg9ZC5wYXJzZVNob3J0KCksYy51c1dlaWdodENsYXNzPWQucGFyc2VVU2hvcnQoKSxjLnVzV2lkdGhDbGFzcz1kLnBhcnNlVVNob3J0KCksYy5mc1R5cGU9ZC5wYXJzZVVTaG9ydCgpLGMueVN1YnNjcmlwdFhTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1YnNjcmlwdFlTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1YnNjcmlwdFhPZmZzZXQ9ZC5wYXJzZVNob3J0KCksYy55U3Vic2NyaXB0WU9mZnNldD1kLnBhcnNlU2hvcnQoKSxjLnlTdXBlcnNjcmlwdFhTaXplPWQucGFyc2VTaG9ydCgpLGMueVN1cGVyc2NyaXB0WVNpemU9ZC5wYXJzZVNob3J0KCksYy55U3VwZXJzY3JpcHRYT2Zmc2V0PWQucGFyc2VTaG9ydCgpLGMueVN1cGVyc2NyaXB0WU9mZnNldD1kLnBhcnNlU2hvcnQoKSxjLnlTdHJpa2VvdXRTaXplPWQucGFyc2VTaG9ydCgpLGMueVN0cmlrZW91dFBvc2l0aW9uPWQucGFyc2VTaG9ydCgpLGMuc0ZhbWlseUNsYXNzPWQucGFyc2VTaG9ydCgpLGMucGFub3NlPVtdO2Zvcih2YXIgZT0wO2U8MTA7ZSsrKWMucGFub3NlW2VdPWQucGFyc2VCeXRlKCk7cmV0dXJuIGMudWxVbmljb2RlUmFuZ2UxPWQucGFyc2VVTG9uZygpLGMudWxVbmljb2RlUmFuZ2UyPWQucGFyc2VVTG9uZygpLGMudWxVbmljb2RlUmFuZ2UzPWQucGFyc2VVTG9uZygpLGMudWxVbmljb2RlUmFuZ2U0PWQucGFyc2VVTG9uZygpLGMuYWNoVmVuZElEPVN0cmluZy5mcm9tQ2hhckNvZGUoZC5wYXJzZUJ5dGUoKSxkLnBhcnNlQnl0ZSgpLGQucGFyc2VCeXRlKCksZC5wYXJzZUJ5dGUoKSksYy5mc1NlbGVjdGlvbj1kLnBhcnNlVVNob3J0KCksYy51c0ZpcnN0Q2hhckluZGV4PWQucGFyc2VVU2hvcnQoKSxjLnVzTGFzdENoYXJJbmRleD1kLnBhcnNlVVNob3J0KCksYy5zVHlwb0FzY2VuZGVyPWQucGFyc2VTaG9ydCgpLGMuc1R5cG9EZXNjZW5kZXI9ZC5wYXJzZVNob3J0KCksYy5zVHlwb0xpbmVHYXA9ZC5wYXJzZVNob3J0KCksYy51c1dpbkFzY2VudD1kLnBhcnNlVVNob3J0KCksYy51c1dpbkRlc2NlbnQ9ZC5wYXJzZVVTaG9ydCgpLGMudmVyc2lvbj49MSYmKGMudWxDb2RlUGFnZVJhbmdlMT1kLnBhcnNlVUxvbmcoKSxjLnVsQ29kZVBhZ2VSYW5nZTI9ZC5wYXJzZVVMb25nKCkpLGMudmVyc2lvbj49MiYmKGMuc3hIZWlnaHQ9ZC5wYXJzZVNob3J0KCksYy5zQ2FwSGVpZ2h0PWQucGFyc2VTaG9ydCgpLGMudXNEZWZhdWx0Q2hhcj1kLnBhcnNlVVNob3J0KCksYy51c0JyZWFrQ2hhcj1kLnBhcnNlVVNob3J0KCksYy51c01heENvbnRlbnQ9ZC5wYXJzZVVTaG9ydCgpKSxjfWZ1bmN0aW9uIGZiKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJPUy8yXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTozfSx7bmFtZTpcInhBdmdDaGFyV2lkdGhcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzV2VpZ2h0Q2xhc3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c1dpZHRoQ2xhc3NcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJmc1R5cGVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5U3Vic2NyaXB0WFNpemVcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTo2NTB9LHtuYW1lOlwieVN1YnNjcmlwdFlTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6Njk5fSx7bmFtZTpcInlTdWJzY3JpcHRYT2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5U3Vic2NyaXB0WU9mZnNldFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjE0MH0se25hbWU6XCJ5U3VwZXJzY3JpcHRYU2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjY1MH0se25hbWU6XCJ5U3VwZXJzY3JpcHRZU2l6ZVwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjY5OX0se25hbWU6XCJ5U3VwZXJzY3JpcHRYT2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ5U3VwZXJzY3JpcHRZT2Zmc2V0XCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6NDc5fSx7bmFtZTpcInlTdHJpa2VvdXRTaXplXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6NDl9LHtuYW1lOlwieVN0cmlrZW91dFBvc2l0aW9uXCIsdHlwZTpcIlNIT1JUXCIsdmFsdWU6MjU4fSx7bmFtZTpcInNGYW1pbHlDbGFzc1wiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiYkZhbWlseVR5cGVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlNlcmlmU3R5bGVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYldlaWdodFwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiUHJvcG9ydGlvblwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiQ29udHJhc3RcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlN0cm9rZVZhcmlhdGlvblwiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0se25hbWU6XCJiQXJtU3R5bGVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYkxldHRlcmZvcm1cIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYk1pZGxpbmVcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwiYlhIZWlnaHRcIix0eXBlOlwiQllURVwiLHZhbHVlOjB9LHtuYW1lOlwidWxVbmljb2RlUmFuZ2UxXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJ1bFVuaWNvZGVSYW5nZTJcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcInVsVW5pY29kZVJhbmdlM1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwidWxVbmljb2RlUmFuZ2U0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJhY2hWZW5kSURcIix0eXBlOlwiQ0hBUkFSUkFZXCIsdmFsdWU6XCJYWFhYXCJ9LHtuYW1lOlwiZnNTZWxlY3Rpb25cIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c0ZpcnN0Q2hhckluZGV4XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNMYXN0Q2hhckluZGV4XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic1R5cG9Bc2NlbmRlclwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic1R5cG9EZXNjZW5kZXJcIix0eXBlOlwiU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNUeXBvTGluZUdhcFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNXaW5Bc2NlbnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1c1dpbkRlc2NlbnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJ1bENvZGVQYWdlUmFuZ2UxXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJ1bENvZGVQYWdlUmFuZ2UyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJzeEhlaWdodFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwic0NhcEhlaWdodFwiLHR5cGU6XCJTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNEZWZhdWx0Q2hhclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInVzQnJlYWtDaGFyXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwidXNNYXhDb250ZXh0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9XSxhKX1mdW5jdGlvbiBnYihhLGIpe3ZhciBjPXt9LGQ9bmV3IExlLlBhcnNlcihhLGIpO3N3aXRjaChjLnZlcnNpb249ZC5wYXJzZVZlcnNpb24oKSxjLml0YWxpY0FuZ2xlPWQucGFyc2VGaXhlZCgpLGMudW5kZXJsaW5lUG9zaXRpb249ZC5wYXJzZVNob3J0KCksYy51bmRlcmxpbmVUaGlja25lc3M9ZC5wYXJzZVNob3J0KCksYy5pc0ZpeGVkUGl0Y2g9ZC5wYXJzZVVMb25nKCksYy5taW5NZW1UeXBlNDI9ZC5wYXJzZVVMb25nKCksYy5tYXhNZW1UeXBlNDI9ZC5wYXJzZVVMb25nKCksYy5taW5NZW1UeXBlMT1kLnBhcnNlVUxvbmcoKSxjLm1heE1lbVR5cGUxPWQucGFyc2VVTG9uZygpLGMudmVyc2lvbil7Y2FzZSAxOmMubmFtZXM9UWUuc2xpY2UoKTticmVhaztjYXNlIDI6Yy5udW1iZXJPZkdseXBocz1kLnBhcnNlVVNob3J0KCksYy5nbHlwaE5hbWVJbmRleD1uZXcgQXJyYXkoYy5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBlPTA7ZTxjLm51bWJlck9mR2x5cGhzO2UrKyljLmdseXBoTmFtZUluZGV4W2VdPWQucGFyc2VVU2hvcnQoKTtjLm5hbWVzPVtdO2Zvcih2YXIgZj0wO2Y8Yy5udW1iZXJPZkdseXBocztmKyspaWYoYy5nbHlwaE5hbWVJbmRleFtmXT49UWUubGVuZ3RoKXt2YXIgZz1kLnBhcnNlQ2hhcigpO2MubmFtZXMucHVzaChkLnBhcnNlU3RyaW5nKGcpKX1icmVhaztjYXNlIDIuNTpjLm51bWJlck9mR2x5cGhzPWQucGFyc2VVU2hvcnQoKSxjLm9mZnNldD1uZXcgQXJyYXkoYy5udW1iZXJPZkdseXBocyk7Zm9yKHZhciBoPTA7aDxjLm51bWJlck9mR2x5cGhzO2grKyljLm9mZnNldFtoXT1kLnBhcnNlQ2hhcigpfXJldHVybiBjfWZ1bmN0aW9uIGhiKCl7cmV0dXJuIG5ldyBJZS5UYWJsZShcInBvc3RcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6MTk2NjA4fSx7bmFtZTpcIml0YWxpY0FuZ2xlXCIsdHlwZTpcIkZJWEVEXCIsdmFsdWU6MH0se25hbWU6XCJ1bmRlcmxpbmVQb3NpdGlvblwiLHR5cGU6XCJGV09SRFwiLHZhbHVlOjB9LHtuYW1lOlwidW5kZXJsaW5lVGhpY2tuZXNzXCIsdHlwZTpcIkZXT1JEXCIsdmFsdWU6MH0se25hbWU6XCJpc0ZpeGVkUGl0Y2hcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfSx7bmFtZTpcIm1pbk1lbVR5cGU0MlwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWF4TWVtVHlwZTQyXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MH0se25hbWU6XCJtaW5NZW1UeXBlMVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwibWF4TWVtVHlwZTFcIix0eXBlOlwiVUxPTkdcIix2YWx1ZTowfV0pfWZ1bmN0aW9uIGliKGEsYil7Yj1ifHwwO3ZhciBjPW5ldyBRKGEsYiksZD1jLnBhcnNlVmVyc2lvbigxKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWR8fDEuMT09PWQsXCJVbnN1cHBvcnRlZCBHU1VCIHRhYmxlIHZlcnNpb24uXCIpLDE9PT1kP3t2ZXJzaW9uOmQsc2NyaXB0czpjLnBhcnNlU2NyaXB0TGlzdCgpLGZlYXR1cmVzOmMucGFyc2VGZWF0dXJlTGlzdCgpLGxvb2t1cHM6Yy5wYXJzZUxvb2t1cExpc3QobGYpfTp7dmVyc2lvbjpkLHNjcmlwdHM6Yy5wYXJzZVNjcmlwdExpc3QoKSxmZWF0dXJlczpjLnBhcnNlRmVhdHVyZUxpc3QoKSxsb29rdXBzOmMucGFyc2VMb29rdXBMaXN0KGxmKSx2YXJpYXRpb25zOmMucGFyc2VGZWF0dXJlVmFyaWF0aW9uc0xpc3QoKX19ZnVuY3Rpb24gamIoYSl7cmV0dXJuIG5ldyBJZS5UYWJsZShcIkdTVUJcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6NjU1MzZ9LHtuYW1lOlwic2NyaXB0c1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5TY3JpcHRMaXN0KGEuc2NyaXB0cyl9LHtuYW1lOlwiZmVhdHVyZXNcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuRmVhdHVyZUxpc3QoYS5mZWF0dXJlcyl9LHtuYW1lOlwibG9va3Vwc1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Mb29rdXBMaXN0KGEubG9va3VwcyxuZil9XSl9ZnVuY3Rpb24ga2IoYSxiKXt2YXIgYz1uZXcgTGUuUGFyc2VyKGEsYiksZD1jLnBhcnNlVUxvbmcoKTt4ZS5hcmd1bWVudCgxPT09ZCxcIlVuc3VwcG9ydGVkIE1FVEEgdGFibGUgdmVyc2lvbi5cIiksYy5wYXJzZVVMb25nKCksYy5wYXJzZVVMb25nKCk7Zm9yKHZhciBlPWMucGFyc2VVTG9uZygpLGY9e30sZz0wO2c8ZTtnKyspe3ZhciBoPWMucGFyc2VUYWcoKSxpPWMucGFyc2VVTG9uZygpLGo9Yy5wYXJzZVVMb25nKCksaz1BZS5VVEY4KGEsYitpLGopO2ZbaF09a31yZXR1cm4gZn1mdW5jdGlvbiBsYihhKXt2YXIgYj1PYmplY3Qua2V5cyhhKS5sZW5ndGgsYz1cIlwiLGQ9MTYrMTIqYixlPW5ldyBJZS5UYWJsZShcIm1ldGFcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6MX0se25hbWU6XCJmbGFnc1wiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjB9LHtuYW1lOlwib2Zmc2V0XCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6ZH0se25hbWU6XCJudW1UYWdzXCIsdHlwZTpcIlVMT05HXCIsdmFsdWU6Yn1dKTtmb3IodmFyIGYgaW4gYSl7dmFyIGc9Yy5sZW5ndGg7Yys9YVtmXSxlLmZpZWxkcy5wdXNoKHtuYW1lOlwidGFnIFwiK2YsdHlwZTpcIlRBR1wiLHZhbHVlOmZ9KSxlLmZpZWxkcy5wdXNoKHtuYW1lOlwib2Zmc2V0IFwiK2YsdHlwZTpcIlVMT05HXCIsdmFsdWU6ZCtnfSksZS5maWVsZHMucHVzaCh7bmFtZTpcImxlbmd0aCBcIitmLHR5cGU6XCJVTE9OR1wiLHZhbHVlOmFbZl0ubGVuZ3RofSl9cmV0dXJuIGUuZmllbGRzLnB1c2goe25hbWU6XCJzdHJpbmdQb29sXCIsdHlwZTpcIkNIQVJBUlJBWVwiLHZhbHVlOmN9KSxlfWZ1bmN0aW9uIG1iKGEpe3JldHVybiBNYXRoLmxvZyhhKS9NYXRoLmxvZygyKXwwfWZ1bmN0aW9uIG5iKGEpe2Zvcig7YS5sZW5ndGglNCE9MDspYS5wdXNoKDApO2Zvcih2YXIgYj0wLGM9MDtjPGEubGVuZ3RoO2MrPTQpYis9KGFbY108PDI0KSsoYVtjKzFdPDwxNikrKGFbYysyXTw8OCkrYVtjKzNdO3JldHVybiBiJT1NYXRoLnBvdygyLDMyKX1mdW5jdGlvbiBvYihhLGIsYyxkKXtyZXR1cm4gbmV3IEllLlJlY29yZChcIlRhYmxlIFJlY29yZFwiLFt7bmFtZTpcInRhZ1wiLHR5cGU6XCJUQUdcIix2YWx1ZTp2b2lkIDAhPT1hP2E6XCJcIn0se25hbWU6XCJjaGVja1N1bVwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnZvaWQgMCE9PWI/YjowfSx7bmFtZTpcIm9mZnNldFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnZvaWQgMCE9PWM/YzowfSx7bmFtZTpcImxlbmd0aFwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOnZvaWQgMCE9PWQ/ZDowfV0pfWZ1bmN0aW9uIHBiKGEpe3ZhciBiPW5ldyBJZS5UYWJsZShcInNmbnRcIixbe25hbWU6XCJ2ZXJzaW9uXCIsdHlwZTpcIlRBR1wiLHZhbHVlOlwiT1RUT1wifSx7bmFtZTpcIm51bVRhYmxlc1wiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInNlYXJjaFJhbmdlXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjB9LHtuYW1lOlwiZW50cnlTZWxlY3RvclwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcInJhbmdlU2hpZnRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH1dKTtiLnRhYmxlcz1hLGIubnVtVGFibGVzPWEubGVuZ3RoO3ZhciBjPU1hdGgucG93KDIsbWIoYi5udW1UYWJsZXMpKTtiLnNlYXJjaFJhbmdlPTE2KmMsYi5lbnRyeVNlbGVjdG9yPW1iKGMpLGIucmFuZ2VTaGlmdD0xNipiLm51bVRhYmxlcy1iLnNlYXJjaFJhbmdlO2Zvcih2YXIgZD1bXSxlPVtdLGY9Yi5zaXplT2YoKStvYigpLnNpemVPZigpKmIubnVtVGFibGVzO2YlNCE9MDspZis9MSxlLnB1c2goe25hbWU6XCJwYWRkaW5nXCIsdHlwZTpcIkJZVEVcIix2YWx1ZTowfSk7Zm9yKHZhciBnPTA7ZzxhLmxlbmd0aDtnKz0xKXt2YXIgaD1hW2ddO3hlLmFyZ3VtZW50KDQ9PT1oLnRhYmxlTmFtZS5sZW5ndGgsXCJUYWJsZSBuYW1lXCIraC50YWJsZU5hbWUrXCIgaXMgaW52YWxpZC5cIik7dmFyIGk9aC5zaXplT2YoKSxqPW9iKGgudGFibGVOYW1lLG5iKGguZW5jb2RlKCkpLGYsaSk7Zm9yKGQucHVzaCh7bmFtZTpqLnRhZytcIiBUYWJsZSBSZWNvcmRcIix0eXBlOlwiUkVDT1JEXCIsdmFsdWU6an0pLGUucHVzaCh7bmFtZTpoLnRhYmxlTmFtZStcIiB0YWJsZVwiLHR5cGU6XCJSRUNPUkRcIix2YWx1ZTpofSksZis9aSx4ZS5hcmd1bWVudCghaXNOYU4oZiksXCJTb21ldGhpbmcgd2VudCB3cm9uZyBjYWxjdWxhdGluZyB0aGUgb2Zmc2V0LlwiKTtmJTQhPTA7KWYrPTEsZS5wdXNoKHtuYW1lOlwicGFkZGluZ1wiLHR5cGU6XCJCWVRFXCIsdmFsdWU6MH0pfXJldHVybiBkLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS52YWx1ZS50YWc+Yi52YWx1ZS50YWc/MTotMX0pLGIuZmllbGRzPWIuZmllbGRzLmNvbmNhdChkKSxiLmZpZWxkcz1iLmZpZWxkcy5jb25jYXQoZSksYn1mdW5jdGlvbiBxYihhLGIsYyl7Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKz0xKXt2YXIgZT1hLmNoYXJUb0dseXBoSW5kZXgoYltkXSk7aWYoZT4wKXtyZXR1cm4gYS5nbHlwaHMuZ2V0KGUpLmdldE1ldHJpY3MoKX19cmV0dXJuIGN9ZnVuY3Rpb24gcmIoYSl7Zm9yKHZhciBiPTAsYz0wO2M8YS5sZW5ndGg7Yys9MSliKz1hW2NdO3JldHVybiBiL2EubGVuZ3RofWZ1bmN0aW9uIHNiKGEpe2Zvcih2YXIgYixjPVtdLGQ9W10sZT1bXSxmPVtdLGc9W10saD1bXSxpPVtdLGo9MCxrPTAsbD0wLG09MCxuPTAsbz0wO288YS5nbHlwaHMubGVuZ3RoO28rPTEpe3ZhciBwPWEuZ2x5cGhzLmdldChvKSxxPTB8cC51bmljb2RlO2lmKGlzTmFOKHAuYWR2YW5jZVdpZHRoKSl0aHJvdyBuZXcgRXJyb3IoXCJHbHlwaCBcIitwLm5hbWUrXCIgKFwiK28rXCIpOiBhZHZhbmNlV2lkdGggaXMgbm90IGEgbnVtYmVyLlwiKTsoYj5xfHx2b2lkIDA9PT1iKSYmcT4wJiYoYj1xKSxqPHEmJihqPXEpO3ZhciByPWpmLmdldFVuaWNvZGVSYW5nZShxKTtpZihyPDMyKWt8PTE8PHI7ZWxzZSBpZihyPDY0KWx8PTE8PHItMzI7ZWxzZSBpZihyPDk2KW18PTE8PHItNjQ7ZWxzZXtpZighKHI8MTIzKSl0aHJvdyBuZXcgRXJyb3IoXCJVbmljb2RlIHJhbmdlcyBiaXRzID4gMTIzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2VcIik7bnw9MTw8ci05Nn1pZihcIi5ub3RkZWZcIiE9PXAubmFtZSl7dmFyIHM9cC5nZXRNZXRyaWNzKCk7Yy5wdXNoKHMueE1pbiksZC5wdXNoKHMueU1pbiksZS5wdXNoKHMueE1heCksZi5wdXNoKHMueU1heCksaC5wdXNoKHMubGVmdFNpZGVCZWFyaW5nKSxpLnB1c2gocy5yaWdodFNpZGVCZWFyaW5nKSxnLnB1c2gocC5hZHZhbmNlV2lkdGgpfX12YXIgdD17eE1pbjpNYXRoLm1pbi5hcHBseShudWxsLGMpLHlNaW46TWF0aC5taW4uYXBwbHkobnVsbCxkKSx4TWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsZSkseU1heDpNYXRoLm1heC5hcHBseShudWxsLGYpLGFkdmFuY2VXaWR0aE1heDpNYXRoLm1heC5hcHBseShudWxsLGcpLGFkdmFuY2VXaWR0aEF2ZzpyYihnKSxtaW5MZWZ0U2lkZUJlYXJpbmc6TWF0aC5taW4uYXBwbHkobnVsbCxoKSxtYXhMZWZ0U2lkZUJlYXJpbmc6TWF0aC5tYXguYXBwbHkobnVsbCxoKSxtaW5SaWdodFNpZGVCZWFyaW5nOk1hdGgubWluLmFwcGx5KG51bGwsaSl9O3QuYXNjZW5kZXI9YS5hc2NlbmRlcix0LmRlc2NlbmRlcj1hLmRlc2NlbmRlcjt2YXIgdT1XZS5tYWtlKHtmbGFnczozLHVuaXRzUGVyRW06YS51bml0c1BlckVtLHhNaW46dC54TWluLHlNaW46dC55TWluLHhNYXg6dC54TWF4LHlNYXg6dC55TWF4LGxvd2VzdFJlY1BQRU06MyxjcmVhdGVkVGltZXN0YW1wOmEuY3JlYXRlZFRpbWVzdGFtcH0pLHY9WGUubWFrZSh7YXNjZW5kZXI6dC5hc2NlbmRlcixkZXNjZW5kZXI6dC5kZXNjZW5kZXIsYWR2YW5jZVdpZHRoTWF4OnQuYWR2YW5jZVdpZHRoTWF4LG1pbkxlZnRTaWRlQmVhcmluZzp0Lm1pbkxlZnRTaWRlQmVhcmluZyxtaW5SaWdodFNpZGVCZWFyaW5nOnQubWluUmlnaHRTaWRlQmVhcmluZyx4TWF4RXh0ZW50OnQubWF4TGVmdFNpZGVCZWFyaW5nKyh0LnhNYXgtdC54TWluKSxudW1iZXJPZkhNZXRyaWNzOmEuZ2x5cGhzLmxlbmd0aH0pLHc9JGUubWFrZShhLmdseXBocy5sZW5ndGgpLHg9amYubWFrZSh7eEF2Z0NoYXJXaWR0aDpNYXRoLnJvdW5kKHQuYWR2YW5jZVdpZHRoQXZnKSx1c1dlaWdodENsYXNzOmEudGFibGVzLm9zMi51c1dlaWdodENsYXNzLHVzV2lkdGhDbGFzczphLnRhYmxlcy5vczIudXNXaWR0aENsYXNzLHVzRmlyc3RDaGFySW5kZXg6Yix1c0xhc3RDaGFySW5kZXg6aix1bFVuaWNvZGVSYW5nZTE6ayx1bFVuaWNvZGVSYW5nZTI6bCx1bFVuaWNvZGVSYW5nZTM6bSx1bFVuaWNvZGVSYW5nZTQ6bixmc1NlbGVjdGlvbjphLnRhYmxlcy5vczIuZnNTZWxlY3Rpb24sc1R5cG9Bc2NlbmRlcjp0LmFzY2VuZGVyLHNUeXBvRGVzY2VuZGVyOnQuZGVzY2VuZGVyLHNUeXBvTGluZUdhcDowLHVzV2luQXNjZW50OnQueU1heCx1c1dpbkRlc2NlbnQ6TWF0aC5hYnModC55TWluKSx1bENvZGVQYWdlUmFuZ2UxOjEsc3hIZWlnaHQ6cWIoYSxcInh5dndcIix7eU1heDpNYXRoLnJvdW5kKHQuYXNjZW5kZXIvMil9KS55TWF4LHNDYXBIZWlnaHQ6cWIoYSxcIkhJS0xFRkpNTlRaQkRQUkFHT1FTVVZXWFlcIix0KS55TWF4LHVzRGVmYXVsdENoYXI6YS5oYXNDaGFyKFwiIFwiKT8zMjowLHVzQnJlYWtDaGFyOmEuaGFzQ2hhcihcIiBcIik/MzI6MH0pLHk9WWUubWFrZShhLmdseXBocyksej1NZS5tYWtlKGEuZ2x5cGhzKSxBPWEuZ2V0RW5nbGlzaE5hbWUoXCJmb250RmFtaWx5XCIpLEI9YS5nZXRFbmdsaXNoTmFtZShcImZvbnRTdWJmYW1pbHlcIiksQz1BK1wiIFwiK0IsRD1hLmdldEVuZ2xpc2hOYW1lKFwicG9zdFNjcmlwdE5hbWVcIik7RHx8KEQ9QS5yZXBsYWNlKC9cXHMvZyxcIlwiKStcIi1cIitCKTt2YXIgRT17fTtmb3IodmFyIEYgaW4gYS5uYW1lcylFW0ZdPWEubmFtZXNbRl07RS51bmlxdWVJRHx8KEUudW5pcXVlSUQ9e2VuOmEuZ2V0RW5nbGlzaE5hbWUoXCJtYW51ZmFjdHVyZXJcIikrXCI6XCIrQ30pLEUucG9zdFNjcmlwdE5hbWV8fChFLnBvc3RTY3JpcHROYW1lPXtlbjpEfSksRS5wcmVmZXJyZWRGYW1pbHl8fChFLnByZWZlcnJlZEZhbWlseT1hLm5hbWVzLmZvbnRGYW1pbHkpLEUucHJlZmVycmVkU3ViZmFtaWx5fHwoRS5wcmVmZXJyZWRTdWJmYW1pbHk9YS5uYW1lcy5mb250U3ViZmFtaWx5KTt2YXIgRz1bXSxIPWdmLm1ha2UoRSxHKSxJPUcubGVuZ3RoPjA/WmUubWFrZShHKTp2b2lkIDAsSj1rZi5tYWtlKCksSz1WZS5tYWtlKGEuZ2x5cGhzLHt2ZXJzaW9uOmEuZ2V0RW5nbGlzaE5hbWUoXCJ2ZXJzaW9uXCIpLGZ1bGxOYW1lOkMsZmFtaWx5TmFtZTpBLHdlaWdodE5hbWU6Qixwb3N0U2NyaXB0TmFtZTpELHVuaXRzUGVyRW06YS51bml0c1BlckVtLGZvbnRCQm94OlswLHQueU1pbix0LmFzY2VuZGVyLHQuYWR2YW5jZVdpZHRoTWF4XX0pLEw9YS5tZXRhcyYmT2JqZWN0LmtleXMoYS5tZXRhcykubGVuZ3RoPjA/cGYubWFrZShhLm1ldGFzKTp2b2lkIDAsTT1bdSx2LHcseCxILHosSixLLHldO0kmJk0ucHVzaChJKSxhLnRhYmxlcy5nc3ViJiZNLnB1c2gob2YubWFrZShhLnRhYmxlcy5nc3ViKSksTCYmTS5wdXNoKEwpO2Zvcih2YXIgTj1wYihNKSxPPU4uZW5jb2RlKCksUD1uYihPKSxRPU4uZmllbGRzLFI9ITEsUz0wO1M8US5sZW5ndGg7Uys9MSlpZihcImhlYWQgdGFibGVcIj09PVFbU10ubmFtZSl7UVtTXS52YWx1ZS5jaGVja1N1bUFkanVzdG1lbnQ9Mjk4MTE0NjU1NC1QLFI9ITA7YnJlYWt9aWYoIVIpdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgaGVhZCB0YWJsZSB3aXRoIGNoZWNrU3VtIHRvIGFkanVzdC5cIik7cmV0dXJuIE59ZnVuY3Rpb24gdGIoYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoLTE7Yzw9ZDspe3ZhciBlPWMrZD4+PjEsZj1hW2VdLnRhZztpZihmPT09YilyZXR1cm4gZTtmPGI/Yz1lKzE6ZD1lLTF9cmV0dXJuLWMtMX1mdW5jdGlvbiB1YihhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGgtMTtjPD1kOyl7dmFyIGU9YytkPj4+MSxmPWFbZV07aWYoZj09PWIpcmV0dXJuIGU7ZjxiP2M9ZSsxOmQ9ZS0xfXJldHVybi1jLTF9ZnVuY3Rpb24gdmIoYSxiKXtmb3IodmFyIGMsZD0wLGU9YS5sZW5ndGgtMTtkPD1lOyl7dmFyIGY9ZCtlPj4+MTtjPWFbZl07dmFyIGc9Yy5zdGFydDtpZihnPT09YilyZXR1cm4gYztnPGI/ZD1mKzE6ZT1mLTF9aWYoZD4wKXJldHVybiBjPWFbZC0xXSxiPmMuZW5kPzA6Y31mdW5jdGlvbiB3YihhLGIpe3RoaXMuZm9udD1hLHRoaXMudGFibGVOYW1lPWJ9ZnVuY3Rpb24geGIoYSl7d2IuY2FsbCh0aGlzLGEsXCJncG9zXCIpfWZ1bmN0aW9uIHliKGEpe3diLmNhbGwodGhpcyxhLFwiZ3N1YlwiKX1mdW5jdGlvbiB6YihhLGIpe3ZhciBjPWEubGVuZ3RoO2lmKGMhPT1iLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGQ9MDtkPGM7ZCsrKWlmKGFbZF0hPT1iW2RdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEFiKGEsYixjKXtmb3IodmFyIGQ9YS5zdWJ0YWJsZXMsZT0wO2U8ZC5sZW5ndGg7ZSsrKXt2YXIgZj1kW2VdO2lmKGYuc3Vic3RGb3JtYXQ9PT1iKXJldHVybiBmfWlmKGMpcmV0dXJuIGQucHVzaChjKSxjfWZ1bmN0aW9uIEJiKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvd31mdW5jdGlvbiBDYihhKXtmb3IodmFyIGI9bmV3IEFycmF5QnVmZmVyKGEubGVuZ3RoKSxjPW5ldyBVaW50OEFycmF5KGIpLGQ9MDtkPGEubGVuZ3RoOysrZCljW2RdPWFbZF07cmV0dXJuIGJ9ZnVuY3Rpb24gRGIoYSl7Zm9yKHZhciBiPW5ldyBlKGEuYnl0ZUxlbmd0aCksYz1uZXcgVWludDhBcnJheShhKSxkPTA7ZDxiLmxlbmd0aDsrK2QpYltkXT1jW2RdO3JldHVybiBifWZ1bmN0aW9uIEViKGEsYil7aWYoIWEpdGhyb3cgYn1mdW5jdGlvbiBGYihhLGIsYyxkLGUpe3ZhciBmO3JldHVybihiJmQpPjA/KGY9YS5wYXJzZUJ5dGUoKSwwPT0oYiZlKSYmKGY9LWYpLGY9YytmKTpmPShiJmUpPjA/YzpjK2EucGFyc2VTaG9ydCgpLGZ9ZnVuY3Rpb24gR2IoYSxiLGMpe3ZhciBkPW5ldyBMZS5QYXJzZXIoYixjKTthLm51bWJlck9mQ29udG91cnM9ZC5wYXJzZVNob3J0KCksYS5feE1pbj1kLnBhcnNlU2hvcnQoKSxhLl95TWluPWQucGFyc2VTaG9ydCgpLGEuX3hNYXg9ZC5wYXJzZVNob3J0KCksYS5feU1heD1kLnBhcnNlU2hvcnQoKTt2YXIgZSxmO2lmKGEubnVtYmVyT2ZDb250b3Vycz4wKXtmb3IodmFyIGc9YS5lbmRQb2ludEluZGljZXM9W10saD0wO2g8YS5udW1iZXJPZkNvbnRvdXJzO2grPTEpZy5wdXNoKGQucGFyc2VVU2hvcnQoKSk7YS5pbnN0cnVjdGlvbkxlbmd0aD1kLnBhcnNlVVNob3J0KCksYS5pbnN0cnVjdGlvbnM9W107Zm9yKHZhciBpPTA7aTxhLmluc3RydWN0aW9uTGVuZ3RoO2krPTEpYS5pbnN0cnVjdGlvbnMucHVzaChkLnBhcnNlQnl0ZSgpKTt2YXIgaj1nW2cubGVuZ3RoLTFdKzE7ZT1bXTtmb3IodmFyIGs9MDtrPGo7ays9MSlpZihmPWQucGFyc2VCeXRlKCksZS5wdXNoKGYpLCg4JmYpPjApZm9yKHZhciBsPWQucGFyc2VCeXRlKCksbT0wO208bDttKz0xKWUucHVzaChmKSxrKz0xO2lmKHhlLmFyZ3VtZW50KGUubGVuZ3RoPT09aixcIkJhZCBmbGFncy5cIiksZy5sZW5ndGg+MCl7dmFyIG4sbz1bXTtpZihqPjApe2Zvcih2YXIgcD0wO3A8ajtwKz0xKWY9ZVtwXSxuPXt9LG4ub25DdXJ2ZT0hISgxJmYpLG4ubGFzdFBvaW50T2ZDb250b3VyPWcuaW5kZXhPZihwKT49MCxvLnB1c2gobik7Zm9yKHZhciBxPTAscj0wO3I8ajtyKz0xKWY9ZVtyXSxuPW9bcl0sbi54PUZiKGQsZixxLDIsMTYpLHE9bi54O2Zvcih2YXIgcz0wLHQ9MDt0PGo7dCs9MSlmPWVbdF0sbj1vW3RdLG4ueT1GYihkLGYscyw0LDMyKSxzPW4ueX1hLnBvaW50cz1vfWVsc2UgYS5wb2ludHM9W119ZWxzZSBpZigwPT09YS5udW1iZXJPZkNvbnRvdXJzKWEucG9pbnRzPVtdO2Vsc2V7YS5pc0NvbXBvc2l0ZT0hMCxhLnBvaW50cz1bXSxhLmNvbXBvbmVudHM9W107Zm9yKHZhciB1PSEwO3U7KXtlPWQucGFyc2VVU2hvcnQoKTt2YXIgdj17Z2x5cGhJbmRleDpkLnBhcnNlVVNob3J0KCkseFNjYWxlOjEsc2NhbGUwMTowLHNjYWxlMTA6MCx5U2NhbGU6MSxkeDowLGR5OjB9OygxJmUpPjA/KDImZSk+MD8odi5keD1kLnBhcnNlU2hvcnQoKSx2LmR5PWQucGFyc2VTaG9ydCgpKTp2Lm1hdGNoZWRQb2ludHM9W2QucGFyc2VVU2hvcnQoKSxkLnBhcnNlVVNob3J0KCldOigyJmUpPjA/KHYuZHg9ZC5wYXJzZUNoYXIoKSx2LmR5PWQucGFyc2VDaGFyKCkpOnYubWF0Y2hlZFBvaW50cz1bZC5wYXJzZUJ5dGUoKSxkLnBhcnNlQnl0ZSgpXSwoOCZlKT4wP3YueFNjYWxlPXYueVNjYWxlPWQucGFyc2VGMkRvdDE0KCk6KDY0JmUpPjA/KHYueFNjYWxlPWQucGFyc2VGMkRvdDE0KCksdi55U2NhbGU9ZC5wYXJzZUYyRG90MTQoKSk6KDEyOCZlKT4wJiYodi54U2NhbGU9ZC5wYXJzZUYyRG90MTQoKSx2LnNjYWxlMDE9ZC5wYXJzZUYyRG90MTQoKSx2LnNjYWxlMTA9ZC5wYXJzZUYyRG90MTQoKSx2LnlTY2FsZT1kLnBhcnNlRjJEb3QxNCgpKSxhLmNvbXBvbmVudHMucHVzaCh2KSx1PSEhKDMyJmUpfWlmKDI1NiZlKXthLmluc3RydWN0aW9uTGVuZ3RoPWQucGFyc2VVU2hvcnQoKSxhLmluc3RydWN0aW9ucz1bXTtmb3IodmFyIHc9MDt3PGEuaW5zdHJ1Y3Rpb25MZW5ndGg7dys9MSlhLmluc3RydWN0aW9ucy5wdXNoKGQucGFyc2VCeXRlKCkpfX19ZnVuY3Rpb24gSGIoYSxiKXtmb3IodmFyIGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXSxmPXt4OmIueFNjYWxlKmUueCtiLnNjYWxlMDEqZS55K2IuZHgseTpiLnNjYWxlMTAqZS54K2IueVNjYWxlKmUueStiLmR5LG9uQ3VydmU6ZS5vbkN1cnZlLGxhc3RQb2ludE9mQ29udG91cjplLmxhc3RQb2ludE9mQ29udG91cn07Yy5wdXNoKGYpfXJldHVybiBjfWZ1bmN0aW9uIEliKGEpe2Zvcih2YXIgYj1bXSxjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrPTEpe3ZhciBlPWFbZF07Yy5wdXNoKGUpLGUubGFzdFBvaW50T2ZDb250b3VyJiYoYi5wdXNoKGMpLGM9W10pfXJldHVybiB4ZS5hcmd1bWVudCgwPT09Yy5sZW5ndGgsXCJUaGVyZSBhcmUgc3RpbGwgcG9pbnRzIGxlZnQgaW4gdGhlIGN1cnJlbnQgY29udG91ci5cIiksYn1mdW5jdGlvbiBKYihhKXt2YXIgYj1uZXcgcjtpZighYSlyZXR1cm4gYjtmb3IodmFyIGM9SWIoYSksZD0wO2Q8Yy5sZW5ndGg7KytkKXt2YXIgZT1jW2RdLGY9bnVsbCxnPWVbZS5sZW5ndGgtMV0saD1lWzBdO2lmKGcub25DdXJ2ZSliLm1vdmVUbyhnLngsZy55KTtlbHNlIGlmKGgub25DdXJ2ZSliLm1vdmVUbyhoLngsaC55KTtlbHNle3ZhciBpPXt4Oi41KihnLngraC54KSx5Oi41KihnLnkraC55KX07Yi5tb3ZlVG8oaS54LGkueSl9Zm9yKHZhciBqPTA7ajxlLmxlbmd0aDsrK2opaWYoZj1nLGc9aCxoPWVbKGorMSklZS5sZW5ndGhdLGcub25DdXJ2ZSliLmxpbmVUbyhnLngsZy55KTtlbHNle3ZhciBrPWg7Zi5vbkN1cnZlfHx7eDouNSooZy54K2YueCkseTouNSooZy55K2YueSl9LGgub25DdXJ2ZXx8KGs9e3g6LjUqKGcueCtoLngpLHk6LjUqKGcueStoLnkpfSksYi5xdWFkcmF0aWNDdXJ2ZVRvKGcueCxnLnksay54LGsueSl9Yi5jbG9zZVBhdGgoKX1yZXR1cm4gYn1mdW5jdGlvbiBLYihhLGIpe2lmKGIuaXNDb21wb3NpdGUpZm9yKHZhciBjPTA7YzxiLmNvbXBvbmVudHMubGVuZ3RoO2MrPTEpe3ZhciBkPWIuY29tcG9uZW50c1tjXSxlPWEuZ2V0KGQuZ2x5cGhJbmRleCk7aWYoZS5nZXRQYXRoKCksZS5wb2ludHMpe3ZhciBmPXZvaWQgMDtpZih2b2lkIDA9PT1kLm1hdGNoZWRQb2ludHMpZj1IYihlLnBvaW50cyxkKTtlbHNle1xuaWYoZC5tYXRjaGVkUG9pbnRzWzBdPmIucG9pbnRzLmxlbmd0aC0xfHxkLm1hdGNoZWRQb2ludHNbMV0+ZS5wb2ludHMubGVuZ3RoLTEpdGhyb3cgRXJyb3IoXCJNYXRjaGVkIHBvaW50cyBvdXQgb2YgcmFuZ2UgaW4gXCIrYi5uYW1lKTt2YXIgZz1iLnBvaW50c1tkLm1hdGNoZWRQb2ludHNbMF1dLGg9ZS5wb2ludHNbZC5tYXRjaGVkUG9pbnRzWzFdXSxpPXt4U2NhbGU6ZC54U2NhbGUsc2NhbGUwMTpkLnNjYWxlMDEsc2NhbGUxMDpkLnNjYWxlMTAseVNjYWxlOmQueVNjYWxlLGR4OjAsZHk6MH07aD1IYihbaF0saSlbMF0saS5keD1nLngtaC54LGkuZHk9Zy55LWgueSxmPUhiKGUucG9pbnRzLGkpfWIucG9pbnRzPWIucG9pbnRzLmNvbmNhdChmKX19cmV0dXJuIEpiKGIucG9pbnRzKX1mdW5jdGlvbiBMYihhLGIsYyxkKXtmb3IodmFyIGU9bmV3IFNlLkdseXBoU2V0KGQpLGY9MDtmPGMubGVuZ3RoLTE7Zis9MSl7dmFyIGc9Y1tmXTtnIT09Y1tmKzFdP2UucHVzaChmLFNlLnR0ZkdseXBoTG9hZGVyKGQsZixHYixhLGIrZyxLYikpOmUucHVzaChmLFNlLmdseXBoTG9hZGVyKGQsZikpfXJldHVybiBlfWZ1bmN0aW9uIE1iKGEpe3RoaXMuZm9udD1hLHRoaXMuZ2V0Q29tbWFuZHM9ZnVuY3Rpb24oYSl7cmV0dXJuIHZmLmdldFBhdGgoYSkuY29tbWFuZHN9LHRoaXMuX2ZwZ21TdGF0ZT10aGlzLl9wcmVwU3RhdGU9dm9pZCAwLHRoaXMuX2Vycm9yU3RhdGU9MH1mdW5jdGlvbiBOYihhKXtyZXR1cm4gYX1mdW5jdGlvbiBPYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKk1hdGgucm91bmQoTWF0aC5hYnMoYSkpfWZ1bmN0aW9uIFBiKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqTWF0aC5yb3VuZChNYXRoLmFicygyKmEpKS8yfWZ1bmN0aW9uIFFiKGEpe3JldHVybiBNYXRoLnNpZ24oYSkqKE1hdGgucm91bmQoTWF0aC5hYnMoYSkrLjUpLS41KX1mdW5jdGlvbiBSYihhKXtyZXR1cm4gTWF0aC5zaWduKGEpKk1hdGguY2VpbChNYXRoLmFicyhhKSl9ZnVuY3Rpb24gU2IoYSl7cmV0dXJuIE1hdGguc2lnbihhKSpNYXRoLmZsb29yKE1hdGguYWJzKGEpKX1mdW5jdGlvbiBUYihhLGIpe3RoaXMueD1hLHRoaXMueT1iLHRoaXMuYXhpcz12b2lkIDAsdGhpcy5zbG9wZT1iL2EsdGhpcy5ub3JtYWxTbG9wZT0tYS9iLE9iamVjdC5mcmVlemUodGhpcyl9ZnVuY3Rpb24gVWIoYSxiKXt2YXIgYz1NYXRoLnNxcnQoYSphK2IqYik7cmV0dXJuIGEvPWMsYi89YywxPT09YSYmMD09PWI/eGY6MD09PWEmJjE9PT1iP3lmOm5ldyBUYihhLGIpfWZ1bmN0aW9uIFZiKGEsYixjLGQpe3RoaXMueD10aGlzLnhvPU1hdGgucm91bmQoNjQqYSkvNjQsdGhpcy55PXRoaXMueW89TWF0aC5yb3VuZCg2NCpiKS82NCx0aGlzLmxhc3RQb2ludE9mQ29udG91cj1jLHRoaXMub25DdXJ2ZT1kLHRoaXMucHJldlBvaW50T25Db250b3VyPXZvaWQgMCx0aGlzLm5leHRQb2ludE9uQ29udG91cj12b2lkIDAsdGhpcy54VG91Y2hlZD0hMSx0aGlzLnlUb3VjaGVkPSExLE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzKX1mdW5jdGlvbiBXYihhLGIpe3N3aXRjaCh0aGlzLmVudj1hLHRoaXMuc3RhY2s9W10sdGhpcy5wcm9nPWIsYSl7Y2FzZVwiZ2x5ZlwiOnRoaXMuenAwPXRoaXMuenAxPXRoaXMuenAyPTEsdGhpcy5ycDA9dGhpcy5ycDE9dGhpcy5ycDI9MDtjYXNlXCJwcmVwXCI6dGhpcy5mdj10aGlzLnB2PXRoaXMuZHB2PXhmLHRoaXMucm91bmQ9T2J9fWZ1bmN0aW9uIFhiKGEpe2Zvcih2YXIgYj1hLnRab25lPW5ldyBBcnJheShhLmdab25lLmxlbmd0aCksYz0wO2M8Yi5sZW5ndGg7YysrKWJbY109bmV3IFZiKDAsMCl9ZnVuY3Rpb24gWWIoYSxiKXt2YXIgYyxkPWEucHJvZyxlPWEuaXAsZj0xO2Rve2lmKDg4PT09KGM9ZFsrK2VdKSlmKys7ZWxzZSBpZig4OT09PWMpZi0tO2Vsc2UgaWYoNjQ9PT1jKWUrPWRbZSsxXSsxO2Vsc2UgaWYoNjU9PT1jKWUrPTIqZFtlKzFdKzE7ZWxzZSBpZihjPj0xNzYmJmM8PTE4MyllKz1jLTE3NisxO2Vsc2UgaWYoYz49MTg0JiZjPD0xOTEpZSs9MiooYy0xODQrMSk7ZWxzZSBpZihiJiYxPT09ZiYmMjc9PT1jKWJyZWFrfXdoaWxlKGY+MCk7YS5pcD1lfWZ1bmN0aW9uIFpiKGIsYyl7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU1ZUQ0FbXCIrYi5heGlzK1wiXVwiKSxjLmZ2PWMucHY9Yy5kcHY9Yn1mdW5jdGlvbiAkYihiLGMpe2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNQVlRDQVtcIitiLmF4aXMrXCJdXCIpLGMucHY9Yy5kcHY9Yn1mdW5jdGlvbiBfYihiLGMpe2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNGVlRDQVtcIitiLmF4aXMrXCJdXCIpLGMuZnY9Yn1mdW5jdGlvbiBhYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejJbZV0saD1jLnoxW2ZdO2EuREVCVUcmJmNvbnNvbGUubG9nKFwiU1BWVExbXCIrYitcIl1cIixlLGYpO3ZhciBpLGo7Yj8oaT1nLnktaC55LGo9aC54LWcueCk6KGk9aC54LWcueCxqPWgueS1nLnkpLGMucHY9Yy5kcHY9VWIoaSxqKX1mdW5jdGlvbiBiYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9ZC5wb3AoKSxnPWMuejJbZV0saD1jLnoxW2ZdO2EuREVCVUcmJmNvbnNvbGUubG9nKFwiU0ZWVExbXCIrYitcIl1cIixlLGYpO3ZhciBpLGo7Yj8oaT1nLnktaC55LGo9aC54LWcueCk6KGk9aC54LWcueCxqPWgueS1nLnkpLGMuZnY9VWIoaSxqKX1mdW5jdGlvbiBjYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1BWRlNbXVwiLGQsZSksYi5wdj1iLmRwdj1VYihlLGQpfWZ1bmN0aW9uIGRjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUFZGU1tdXCIsZCxlKSxiLmZ2PVViKGUsZCl9ZnVuY3Rpb24gZWMoYil7dmFyIGM9Yi5zdGFjayxkPWIucHY7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR1BWW11cIiksYy5wdXNoKDE2Mzg0KmQueCksYy5wdXNoKDE2Mzg0KmQueSl9ZnVuY3Rpb24gZmMoYil7dmFyIGM9Yi5zdGFjayxkPWIuZnY7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR0ZWW11cIiksYy5wdXNoKDE2Mzg0KmQueCksYy5wdXNoKDE2Mzg0KmQueSl9ZnVuY3Rpb24gZ2MoYil7Yi5mdj1iLnB2LGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNGVlRQVltdXCIpfWZ1bmN0aW9uIGhjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKSxmPWMucG9wKCksZz1jLnBvcCgpLGg9Yy5wb3AoKSxpPWIuejAsaj1iLnoxLGs9aVtkXSxsPWlbZV0sbT1qW2ZdLG49altnXSxvPWIuejJbaF07YS5ERUJVRyYmY29uc29sZS5sb2coXCJJU0VDVFtdLCBcIixkLGUsZixnLGgpO3ZhciBwPWsueCxxPWsueSxyPWwueCxzPWwueSx0PW0ueCx1PW0ueSx2PW4ueCx3PW4ueSx4PShwLXIpKih1LXcpLShxLXMpKih0LXYpLHk9cCpzLXEqcix6PXQqdy11KnY7by54PSh5Kih0LXYpLXoqKHAtcikpL3gsby55PSh5Kih1LXcpLXoqKHEtcykpL3h9ZnVuY3Rpb24gaWMoYil7Yi5ycDA9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUlAwW11cIixiLnJwMCl9ZnVuY3Rpb24gamMoYil7Yi5ycDE9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUlAxW11cIixiLnJwMSl9ZnVuY3Rpb24ga2MoYil7Yi5ycDI9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTUlAyW11cIixiLnJwMil9ZnVuY3Rpb24gbGMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQMFtdXCIsYyksYi56cDA9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56MD1iLnRab25lO2JyZWFrO2Nhc2UgMTpiLnowPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gbWMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQMVtdXCIsYyksYi56cDE9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56MT1iLnRab25lO2JyZWFrO2Nhc2UgMTpiLnoxPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gbmMoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQMltdXCIsYyksYi56cDI9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56Mj1iLnRab25lO2JyZWFrO2Nhc2UgMTpiLnoyPWIuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmUgcG9pbnRlclwiKX19ZnVuY3Rpb24gb2MoYil7dmFyIGM9Yi5zdGFjay5wb3AoKTtzd2l0Y2goYS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1pQU1tdXCIsYyksYi56cDA9Yi56cDE9Yi56cDI9YyxjKXtjYXNlIDA6Yi50Wm9uZXx8WGIoYiksYi56MD1iLnoxPWIuejI9Yi50Wm9uZTticmVhaztjYXNlIDE6Yi56MD1iLnoxPWIuejI9Yi5nWm9uZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgem9uZSBwb2ludGVyXCIpfX1mdW5jdGlvbiBwYyhiKXtiLmxvb3A9Yi5zdGFjay5wb3AoKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJTTE9PUFtdXCIsYi5sb29wKX1mdW5jdGlvbiBxYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJSVEdbXVwiKSxiLnJvdW5kPU9ifWZ1bmN0aW9uIHJjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJUSEdbXVwiKSxiLnJvdW5kPVFifWZ1bmN0aW9uIHNjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU01EW11cIixjKSxiLm1pbkRpcz1jLzY0fWZ1bmN0aW9uIHRjKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVMU0VbXVwiKSxZYihiLCExKX1mdW5jdGlvbiB1YyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkpNUFJbXVwiLGMpLGIuaXArPWMtMX1mdW5jdGlvbiB2YyhiKXt2YXIgYz1iLnN0YWNrLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNDVlRDSVtdXCIsYyksYi5jdkN1dEluPWMvNjR9ZnVuY3Rpb24gd2MoYil7dmFyIGM9Yi5zdGFjazthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJEVVBbXVwiKSxjLnB1c2goY1tjLmxlbmd0aC0xXSl9ZnVuY3Rpb24geGMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUE9QW11cIiksYi5zdGFjay5wb3AoKX1mdW5jdGlvbiB5YyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJDTEVBUltdXCIpLGIuc3RhY2subGVuZ3RoPTB9ZnVuY3Rpb24gemMoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNXQVBbXVwiKSxjLnB1c2goZCksYy5wdXNoKGUpfWZ1bmN0aW9uIEFjKGIpe3ZhciBjPWIuc3RhY2s7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiREVQVEhbXVwiKSxjLnB1c2goYy5sZW5ndGgpfWZ1bmN0aW9uIEJjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJMT09QQ0FMTFtdXCIsZCxlKTt2YXIgZj1iLmlwLGc9Yi5wcm9nO2IucHJvZz1iLmZ1bmNzW2RdO2Zvcih2YXIgaD0wO2g8ZTtoKyspc2YoYiksYS5ERUJVRyYmY29uc29sZS5sb2coKytiLnN0ZXAsaCsxPGU/XCJuZXh0IGxvb3BjYWxsXCI6XCJkb25lIGxvb3BjYWxsXCIsaCk7Yi5pcD1mLGIucHJvZz1nfWZ1bmN0aW9uIENjKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQ0FMTFtdXCIsYyk7dmFyIGQ9Yi5pcCxlPWIucHJvZztiLnByb2c9Yi5mdW5jc1tjXSxzZihiKSxiLmlwPWQsYi5wcm9nPWUsYS5ERUJVRyYmY29uc29sZS5sb2coKytiLnN0ZXAsXCJyZXR1cm5pbmcgZnJvbVwiLGMpfWZ1bmN0aW9uIERjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkNJTkRFWFtdXCIsZCksYy5wdXNoKGNbYy5sZW5ndGgtZF0pfWZ1bmN0aW9uIEVjKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk1JTkRFWFtdXCIsZCksYy5wdXNoKGMuc3BsaWNlKGMubGVuZ3RoLWQsMSlbMF0pfWZ1bmN0aW9uIEZjKGIpe2lmKFwiZnBnbVwiIT09Yi5lbnYpdGhyb3cgbmV3IEVycm9yKFwiRkRFRiBub3QgYWxsb3dlZCBoZXJlXCIpO3ZhciBjPWIuc3RhY2ssZD1iLnByb2csZT1iLmlwLGY9Yy5wb3AoKSxnPWU7Zm9yKGEuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkZERUZbXVwiLGYpOzQ1IT09ZFsrK2VdOyk7Yi5pcD1lLGIuZnVuY3NbZl09ZC5zbGljZShnKzEsZSl9ZnVuY3Rpb24gR2MoYixjKXt2YXIgZD1jLnN0YWNrLnBvcCgpLGU9Yy56MFtkXSxmPWMuZnYsZz1jLnB2O2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIk1EQVBbXCIrYitcIl1cIixkKTt2YXIgaD1nLmRpc3RhbmNlKGUsemYpO2ImJihoPWMucm91bmQoaCkpLGYuc2V0UmVsYXRpdmUoZSx6ZixoLGcpLGYudG91Y2goZSksYy5ycDA9Yy5ycDE9ZH1mdW5jdGlvbiBIYyhiLGMpe3ZhciBkLGUsZixnPWMuejIsaD1nLmxlbmd0aC0yO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIklVUFtcIitiLmF4aXMrXCJdXCIpO2Zvcih2YXIgaT0wO2k8aDtpKyspZD1nW2ldLGIudG91Y2hlZChkKXx8KGU9ZC5wcmV2VG91Y2hlZChiKSkhPT1kJiYoZj1kLm5leHRUb3VjaGVkKGIpLGU9PT1mJiZiLnNldFJlbGF0aXZlKGQsZCxiLmRpc3RhbmNlKGUsZSwhMSwhMCksYiwhMCksYi5pbnRlcnBvbGF0ZShkLGUsZixiKSl9ZnVuY3Rpb24gSWMoYixjKXtmb3IodmFyIGQ9Yy5zdGFjayxlPWI/Yy5ycDE6Yy5ycDIsZj0oYj9jLnowOmMuejEpW2VdLGc9Yy5mdixoPWMucHYsaT1jLmxvb3Asaj1jLnoyO2ktLTspe3ZhciBrPWQucG9wKCksbD1qW2tdLG09aC5kaXN0YW5jZShmLGYsITEsITApO2cuc2V0UmVsYXRpdmUobCxsLG0saCksZy50b3VjaChsKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsKGMubG9vcD4xP1wibG9vcCBcIisoYy5sb29wLWkpK1wiOiBcIjpcIlwiKStcIlNIUFtcIisoYj9cInJwMVwiOlwicnAyXCIpK1wiXVwiLGspfWMubG9vcD0xfWZ1bmN0aW9uIEpjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWI/Yy5ycDE6Yy5ycDIsZj0oYj9jLnowOmMuejEpW2VdLGc9Yy5mdixoPWMucHYsaT1kLnBvcCgpLGo9Yy56MltjLmNvbnRvdXJzW2ldXSxrPWo7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU0hDW1wiK2IrXCJdXCIsaSk7dmFyIGw9aC5kaXN0YW5jZShmLGYsITEsITApO2Rve2shPT1mJiZnLnNldFJlbGF0aXZlKGssayxsLGgpLGs9ay5uZXh0UG9pbnRPbkNvbnRvdXJ9d2hpbGUoayE9PWopfWZ1bmN0aW9uIEtjKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWI/Yy5ycDE6Yy5ycDIsZj0oYj9jLnowOmMuejEpW2VdLGc9Yy5mdixoPWMucHYsaT1kLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlNIWltcIitiK1wiXVwiLGkpO3ZhciBqO3N3aXRjaChpKXtjYXNlIDA6aj1jLnRab25lO2JyZWFrO2Nhc2UgMTpqPWMuZ1pvbmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHpvbmVcIil9Zm9yKHZhciBrLGw9aC5kaXN0YW5jZShmLGYsITEsITApLG09ai5sZW5ndGgtMixuPTA7bjxtO24rKylrPWpbbl0sZy5zZXRSZWxhdGl2ZShrLGssbCxoKX1mdW5jdGlvbiBMYyhiKXtmb3IodmFyIGM9Yi5zdGFjayxkPWIubG9vcCxlPWIuZnYsZj1jLnBvcCgpLzY0LGc9Yi56MjtkLS07KXt2YXIgaD1jLnBvcCgpLGk9Z1toXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsKGIubG9vcD4xP1wibG9vcCBcIisoYi5sb29wLWQpK1wiOiBcIjpcIlwiKStcIlNIUElYW11cIixoLGYpLGUuc2V0UmVsYXRpdmUoaSxpLGYpLGUudG91Y2goaSl9Yi5sb29wPTF9ZnVuY3Rpb24gTWMoYil7Zm9yKHZhciBjPWIuc3RhY2ssZD1iLnJwMSxlPWIucnAyLGY9Yi5sb29wLGc9Yi56MFtkXSxoPWIuejFbZV0saT1iLmZ2LGo9Yi5kcHYsaz1iLnoyO2YtLTspe3ZhciBsPWMucG9wKCksbT1rW2xdO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCwoYi5sb29wPjE/XCJsb29wIFwiKyhiLmxvb3AtZikrXCI6IFwiOlwiXCIpK1wiSVBbXVwiLGwsZCxcIjwtPlwiLGUpLGkuaW50ZXJwb2xhdGUobSxnLGgsaiksaS50b3VjaChtKX1iLmxvb3A9MX1mdW5jdGlvbiBOYyhiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLzY0LGY9ZC5wb3AoKSxnPWMuejFbZl0saD1jLnowW2MucnAwXSxpPWMuZnYsaj1jLnB2O2kuc2V0UmVsYXRpdmUoZyxoLGUsaiksaS50b3VjaChnKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNU0lSUFtcIitiK1wiXVwiLGUsZiksYy5ycDE9Yy5ycDAsYy5ycDI9ZixiJiYoYy5ycDA9Zil9ZnVuY3Rpb24gT2MoYil7Zm9yKHZhciBjPWIuc3RhY2ssZD1iLnJwMCxlPWIuejBbZF0sZj1iLmxvb3AsZz1iLmZ2LGg9Yi5wdixpPWIuejE7Zi0tOyl7dmFyIGo9Yy5wb3AoKSxrPWlbal07YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLChiLmxvb3A+MT9cImxvb3AgXCIrKGIubG9vcC1mKStcIjogXCI6XCJcIikrXCJBTElHTlJQW11cIixqKSxnLnNldFJlbGF0aXZlKGssZSwwLGgpLGcudG91Y2goayl9Yi5sb29wPTF9ZnVuY3Rpb24gUGMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlRER1tdXCIpLGIucm91bmQ9UGJ9ZnVuY3Rpb24gUWMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnowW2ZdLGg9Yy5mdixpPWMucHYsaj1jLmN2dFtlXTthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJNSUFQW1wiK2IrXCJdXCIsZSxcIihcIixqLFwiKVwiLGYpO3ZhciBrPWkuZGlzdGFuY2UoZyx6Zik7YiYmKE1hdGguYWJzKGstaik8Yy5jdkN1dEluJiYoaz1qKSxrPWMucm91bmQoaykpLGguc2V0UmVsYXRpdmUoZyx6ZixrLGkpLDA9PT1jLnpwMCYmKGcueG89Zy54LGcueW89Zy55KSxoLnRvdWNoKGcpLGMucnAwPWMucnAxPWZ9ZnVuY3Rpb24gUmMoYil7dmFyIGM9Yi5wcm9nLGQ9Yi5pcCxlPWIuc3RhY2ssZj1jWysrZF07YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTlBVU0hCW11cIixmKTtmb3IodmFyIGc9MDtnPGY7ZysrKWUucHVzaChjWysrZF0pO2IuaXA9ZH1mdW5jdGlvbiBTYyhiKXt2YXIgYz1iLmlwLGQ9Yi5wcm9nLGU9Yi5zdGFjayxmPWRbKytjXTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJOUFVTSFdbXVwiLGYpO2Zvcih2YXIgZz0wO2c8ZjtnKyspe3ZhciBoPWRbKytjXTw8OHxkWysrY107MzI3NjgmaCYmKGg9LSgxKyg2NTUzNV5oKSkpLGUucHVzaChoKX1iLmlwPWN9ZnVuY3Rpb24gVGMoYil7dmFyIGM9Yi5zdGFjayxkPWIuc3RvcmU7ZHx8KGQ9Yi5zdG9yZT1bXSk7dmFyIGU9Yy5wb3AoKSxmPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiV1NcIixlLGYpLGRbZl09ZX1mdW5jdGlvbiBVYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yi5zdG9yZSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUlNcIixlKTt2YXIgZj1kJiZkW2VdfHwwO2MucHVzaChmKX1mdW5jdGlvbiBWYyhiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiV0NWVFBcIixkLGUpLGIuY3Z0W2VdPWQvNjR9ZnVuY3Rpb24gV2MoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUkNWVFwiLGQpLGMucHVzaCg2NCpiLmN2dFtkXSl9ZnVuY3Rpb24gWGMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWMuejJbZV07YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiR0NbXCIrYitcIl1cIixlKSxkLnB1c2goNjQqYy5kcHYuZGlzdGFuY2UoZix6ZixiLCExKSl9ZnVuY3Rpb24gWWMoYixjKXt2YXIgZD1jLnN0YWNrLGU9ZC5wb3AoKSxmPWQucG9wKCksZz1jLnoxW2VdLGg9Yy56MFtmXSxpPWMuZHB2LmRpc3RhbmNlKGgsZyxiLGIpO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIk1EW1wiK2IrXCJdXCIsZSxmLFwiLT5cIixpKSxjLnN0YWNrLnB1c2goTWF0aC5yb3VuZCg2NCppKSl9ZnVuY3Rpb24gWmMoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiTVBQRU1bXVwiKSxiLnN0YWNrLnB1c2goYi5wcGVtKX1mdW5jdGlvbiAkYyhiKXthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJGTElQT05bXVwiKSxiLmF1dG9GbGlwPSEwfWZ1bmN0aW9uIF9jKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJMVFtdXCIsZCxlKSxjLnB1c2goZTxkPzE6MCl9ZnVuY3Rpb24gYWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkxURVFbXVwiLGQsZSksYy5wdXNoKGU8PWQ/MTowKX1mdW5jdGlvbiBiZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiR1RbXVwiLGQsZSksYy5wdXNoKGU+ZD8xOjApfWZ1bmN0aW9uIGNkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJHVEVRW11cIixkLGUpLGMucHVzaChlPj1kPzE6MCl9ZnVuY3Rpb24gZGQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkVRW11cIixkLGUpLGMucHVzaChkPT09ZT8xOjApfWZ1bmN0aW9uIGVkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJORVFbXVwiLGQsZSksYy5wdXNoKGQhPT1lPzE6MCl9ZnVuY3Rpb24gZmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiT0REW11cIixkKSxjLnB1c2goTWF0aC50cnVuYyhkKSUyPzE6MCl9ZnVuY3Rpb24gZ2QoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRVZFTltdXCIsZCksYy5wdXNoKE1hdGgudHJ1bmMoZCklMj8wOjEpfWZ1bmN0aW9uIGhkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiSUZbXVwiLGMpLGN8fChZYihiLCEwKSxhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJFSUZbXVwiKSl9ZnVuY3Rpb24gaWQoYil7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRUlGW11cIil9ZnVuY3Rpb24gamQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkFORFtdXCIsZCxlKSxjLnB1c2goZCYmZT8xOjApfWZ1bmN0aW9uIGtkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJPUltdXCIsZCxlKSxjLnB1c2goZHx8ZT8xOjApfWZ1bmN0aW9uIGxkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5PVFtdXCIsZCksYy5wdXNoKGQ/MDoxKX1mdW5jdGlvbiBtZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1kLnBvcCgpLGY9Yy5mdixnPWMucHYsaD1jLnBwZW0saT1jLmRlbHRhQmFzZSsxNiooYi0xKSxqPWMuZGVsdGFTaGlmdCxrPWMuejA7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiREVMVEFQW1wiK2IrXCJdXCIsZSxkKTtmb3IodmFyIGw9MDtsPGU7bCsrKXt2YXIgbT1kLnBvcCgpLG49ZC5wb3AoKTtpZihpKygoMjQwJm4pPj40KT09PWgpe3ZhciBvPSgxNSZuKS04O28+PTAmJm8rKyxhLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJERUxUQVBGSVhcIixtLFwiYnlcIixvKmopO3ZhciBwPWtbbV07Zi5zZXRSZWxhdGl2ZShwLHAsbypqLGcpfX19ZnVuY3Rpb24gbmQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0RCW11cIixkKSxiLmRlbHRhQmFzZT1kfWZ1bmN0aW9uIG9kKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNEU1tdXCIsZCksYi5kZWx0YVNoaWZ0PU1hdGgucG93KC41LGQpfWZ1bmN0aW9uIHBkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJBRERbXVwiLGQsZSksYy5wdXNoKGUrZCl9ZnVuY3Rpb24gcWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlNVQltdXCIsZCxlKSxjLnB1c2goZS1kKX1mdW5jdGlvbiByZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKSxlPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiRElWW11cIixkLGUpLGMucHVzaCg2NCplL2QpfWZ1bmN0aW9uIHNkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNVUxbXVwiLGQsZSksYy5wdXNoKGUqZC82NCl9ZnVuY3Rpb24gdGQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiQUJTW11cIixkKSxjLnB1c2goTWF0aC5hYnMoZCkpfWZ1bmN0aW9uIHVkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIk5FR1tdXCIsZCksYy5wdXNoKC1kKX1mdW5jdGlvbiB2ZChiKXt2YXIgYz1iLnN0YWNrLGQ9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJGTE9PUltdXCIsZCksYy5wdXNoKDY0Kk1hdGguZmxvb3IoZC82NCkpfWZ1bmN0aW9uIHdkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIkNFSUxJTkdbXVwiLGQpLGMucHVzaCg2NCpNYXRoLmNlaWwoZC82NCkpfWZ1bmN0aW9uIHhkKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiUk9VTkRbXVwiKSxkLnB1c2goNjQqYy5yb3VuZChlLzY0KSl9ZnVuY3Rpb24geWQoYil7dmFyIGM9Yi5zdGFjayxkPWMucG9wKCksZT1jLnBvcCgpO2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIldDVlRGW11cIixkLGUpLGIuY3Z0W2VdPWQqYi5wcGVtL2IuZm9udC51bml0c1BlckVtfWZ1bmN0aW9uIHpkKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1jLnBwZW0sZz1jLmRlbHRhQmFzZSsxNiooYi0xKSxoPWMuZGVsdGFTaGlmdDthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJERUxUQUNbXCIrYitcIl1cIixlLGQpO2Zvcih2YXIgaT0wO2k8ZTtpKyspe3ZhciBqPWQucG9wKCksaz1kLnBvcCgpO2lmKGcrKCgyNDAmayk+PjQpPT09Zil7dmFyIGw9KDE1JmspLTg7bD49MCYmbCsrO3ZhciBtPWwqaDthLkRFQlVHJiZjb25zb2xlLmxvZyhjLnN0ZXAsXCJERUxUQUNGSVhcIixqLFwiYnlcIixtKSxjLmN2dFtqXSs9bX19fWZ1bmN0aW9uIEFkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU1JPVU5EW11cIixjKSxiLnJvdW5kPXdmO3ZhciBkO3N3aXRjaCgxOTImYyl7Y2FzZSAwOmQ9LjU7YnJlYWs7Y2FzZSA2NDpkPTE7YnJlYWs7Y2FzZSAxMjg6ZD0yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBTUk9VTkQgdmFsdWVcIil9c3dpdGNoKGIuc3JQZXJpb2Q9ZCw0OCZjKXtjYXNlIDA6Yi5zclBoYXNlPTA7YnJlYWs7Y2FzZSAxNjpiLnNyUGhhc2U9LjI1KmQ7YnJlYWs7Y2FzZSAzMjpiLnNyUGhhc2U9LjUqZDticmVhaztjYXNlIDQ4OmIuc3JQaGFzZT0uNzUqZDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImludmFsaWQgU1JPVU5EIHZhbHVlXCIpfWMmPTE1LGIuc3JUaHJlc2hvbGQ9MD09PWM/MDooYy84LS41KSpkfWZ1bmN0aW9uIEJkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUzQ1Uk9VTkRbXVwiLGMpLGIucm91bmQ9d2Y7dmFyIGQ7c3dpdGNoKDE5MiZjKXtjYXNlIDA6ZD1NYXRoLnNxcnQoMikvMjticmVhaztjYXNlIDY0OmQ9TWF0aC5zcXJ0KDIpO2JyZWFrO2Nhc2UgMTI4OmQ9MipNYXRoLnNxcnQoMik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFM0NVJPVU5EIHZhbHVlXCIpfXN3aXRjaChiLnNyUGVyaW9kPWQsNDgmYyl7Y2FzZSAwOmIuc3JQaGFzZT0wO2JyZWFrO2Nhc2UgMTY6Yi5zclBoYXNlPS4yNSpkO2JyZWFrO2Nhc2UgMzI6Yi5zclBoYXNlPS41KmQ7YnJlYWs7Y2FzZSA0ODpiLnNyUGhhc2U9Ljc1KmQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFM0NVJPVU5EIHZhbHVlXCIpfWMmPTE1LGIuc3JUaHJlc2hvbGQ9MD09PWM/MDooYy84LS41KSpkfWZ1bmN0aW9uIENkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJPRkZbXVwiKSxiLnJvdW5kPU5ifWZ1bmN0aW9uIERkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJVVEdbXVwiKSxiLnJvdW5kPVJifWZ1bmN0aW9uIEVkKGIpe2EuREVCVUcmJmNvbnNvbGUubG9nKGIuc3RlcCxcIlJEVEdbXVwiKSxiLnJvdW5kPVNifWZ1bmN0aW9uIEZkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0NBTkNUUkxbXVwiLGMpfWZ1bmN0aW9uIEdkKGIsYyl7dmFyIGQ9Yy5zdGFjayxlPWQucG9wKCksZj1kLnBvcCgpLGc9Yy56MltlXSxoPWMuejFbZl07YS5ERUJVRyYmY29uc29sZS5sb2coYy5zdGVwLFwiU0RQVlRMW1wiK2IrXCJdXCIsZSxmKTt2YXIgaSxqO2I/KGk9Zy55LWgueSxqPWgueC1nLngpOihpPWgueC1nLngsaj1oLnktZy55KSxjLmRwdj1VYihpLGopfWZ1bmN0aW9uIEhkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9MDthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJHRVRJTkZPW11cIixkKSwxJmQmJihlPTM1KSwzMiZkJiYoZXw9NDA5NiksYy5wdXNoKGUpfWZ1bmN0aW9uIElkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKSxmPWMucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiUk9MTFtdXCIpLGMucHVzaChlKSxjLnB1c2goZCksYy5wdXNoKGYpfWZ1bmN0aW9uIEpkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNQVhbXVwiLGQsZSksYy5wdXNoKE1hdGgubWF4KGUsZCkpfWZ1bmN0aW9uIEtkKGIpe3ZhciBjPWIuc3RhY2ssZD1jLnBvcCgpLGU9Yy5wb3AoKTthLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJNSU5bXVwiLGQsZSksYy5wdXNoKE1hdGgubWluKGUsZCkpfWZ1bmN0aW9uIExkKGIpe3ZhciBjPWIuc3RhY2sucG9wKCk7YS5ERUJVRyYmY29uc29sZS5sb2coYi5zdGVwLFwiU0NBTlRZUEVbXVwiLGMpfWZ1bmN0aW9uIE1kKGIpe3ZhciBjPWIuc3RhY2sucG9wKCksZD1iLnN0YWNrLnBvcCgpO3N3aXRjaChhLkRFQlVHJiZjb25zb2xlLmxvZyhiLnN0ZXAsXCJJTlNUQ1RSTFtdXCIsYyxkKSxjKXtjYXNlIDE6cmV0dXJuIHZvaWQoYi5pbmhpYml0R3JpZEZpdD0hIWQpO2Nhc2UgMjpyZXR1cm4gdm9pZChiLmlnbm9yZUN2dD0hIWQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBJTlNUQ1RSTFtdIHNlbGVjdG9yXCIpfX1mdW5jdGlvbiBOZChiLGMpe3ZhciBkPWMuc3RhY2ssZT1jLnByb2csZj1jLmlwO2EuREVCVUcmJmNvbnNvbGUubG9nKGMuc3RlcCxcIlBVU0hCW1wiK2IrXCJdXCIpO2Zvcih2YXIgZz0wO2c8YjtnKyspZC5wdXNoKGVbKytmXSk7Yy5pcD1mfWZ1bmN0aW9uIE9kKGIsYyl7dmFyIGQ9Yy5pcCxlPWMucHJvZyxmPWMuc3RhY2s7YS5ERUJVRyYmY29uc29sZS5sb2coYy5pcCxcIlBVU0hXW1wiK2IrXCJdXCIpO2Zvcih2YXIgZz0wO2c8YjtnKyspe3ZhciBoPWVbKytkXTw8OHxlWysrZF07MzI3NjgmaCYmKGg9LSgxKyg2NTUzNV5oKSkpLGYucHVzaChoKX1jLmlwPWR9ZnVuY3Rpb24gUGQoYixjLGQsZSxmLGcpe3ZhciBoLGksaixrLGw9Zy5zdGFjayxtPWImJmwucG9wKCksbj1sLnBvcCgpLG89Zy5ycDAscD1nLnowW29dLHE9Zy56MVtuXSxyPWcubWluRGlzLHM9Zy5mdix0PWcuZHB2O2k9aD10LmRpc3RhbmNlKHEscCwhMCwhMCksaj1pPj0wPzE6LTEsaT1NYXRoLmFicyhpKSxiJiYoaz1nLmN2dFttXSxlJiZNYXRoLmFicyhpLWspPGcuY3ZDdXRJbiYmKGk9aykpLGQmJmk8ciYmKGk9ciksZSYmKGk9Zy5yb3VuZChpKSkscy5zZXRSZWxhdGl2ZShxLHAsaippLHQpLHMudG91Y2gocSksYS5ERUJVRyYmY29uc29sZS5sb2coZy5zdGVwLChiP1wiTUlSUFtcIjpcIk1EUlBbXCIpKyhjP1wiTVwiOlwibVwiKSsoZD9cIj5cIjpcIl9cIikrKGU/XCJSXCI6XCJfXCIpKygwPT09Zj9cIkdyXCI6MT09PWY/XCJCbFwiOjI9PT1mP1wiV2hcIjpcIlwiKStcIl1cIixiP20rXCIoXCIrZy5jdnRbbV0rXCIsXCIraytcIilcIjpcIlwiLG4sXCIoZCA9XCIsaCxcIi0+XCIsaippLFwiKVwiKSxnLnJwMT1nLnJwMCxnLnJwMj1uLGMmJihnLnJwMD1uKX1mdW5jdGlvbiBRZChhKXthPWF8fHt9LGEuZW1wdHl8fChFYihhLmZhbWlseU5hbWUsXCJXaGVuIGNyZWF0aW5nIGEgbmV3IEZvbnQgb2JqZWN0LCBmYW1pbHlOYW1lIGlzIHJlcXVpcmVkLlwiKSxFYihhLnN0eWxlTmFtZSxcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIHN0eWxlTmFtZSBpcyByZXF1aXJlZC5cIiksRWIoYS51bml0c1BlckVtLFwiV2hlbiBjcmVhdGluZyBhIG5ldyBGb250IG9iamVjdCwgdW5pdHNQZXJFbSBpcyByZXF1aXJlZC5cIiksRWIoYS5hc2NlbmRlcixcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIGFzY2VuZGVyIGlzIHJlcXVpcmVkLlwiKSxFYihhLmRlc2NlbmRlcixcIldoZW4gY3JlYXRpbmcgYSBuZXcgRm9udCBvYmplY3QsIGRlc2NlbmRlciBpcyByZXF1aXJlZC5cIiksRWIoYS5kZXNjZW5kZXI8MCxcIkRlc2NlbmRlciBzaG91bGQgYmUgbmVnYXRpdmUgKGUuZy4gLTUxMikuXCIpLHRoaXMubmFtZXM9e2ZvbnRGYW1pbHk6e2VuOmEuZmFtaWx5TmFtZXx8XCIgXCJ9LGZvbnRTdWJmYW1pbHk6e2VuOmEuc3R5bGVOYW1lfHxcIiBcIn0sZnVsbE5hbWU6e2VuOmEuZnVsbE5hbWV8fGEuZmFtaWx5TmFtZStcIiBcIithLnN0eWxlTmFtZX0scG9zdFNjcmlwdE5hbWU6e2VuOmEucG9zdFNjcmlwdE5hbWV8fChhLmZhbWlseU5hbWUrYS5zdHlsZU5hbWUpLnJlcGxhY2UoL1xccy9nLFwiXCIpfSxkZXNpZ25lcjp7ZW46YS5kZXNpZ25lcnx8XCIgXCJ9LGRlc2lnbmVyVVJMOntlbjphLmRlc2lnbmVyVVJMfHxcIiBcIn0sbWFudWZhY3R1cmVyOntlbjphLm1hbnVmYWN0dXJlcnx8XCIgXCJ9LG1hbnVmYWN0dXJlclVSTDp7ZW46YS5tYW51ZmFjdHVyZXJVUkx8fFwiIFwifSxsaWNlbnNlOntlbjphLmxpY2Vuc2V8fFwiIFwifSxsaWNlbnNlVVJMOntlbjphLmxpY2Vuc2VVUkx8fFwiIFwifSx2ZXJzaW9uOntlbjphLnZlcnNpb258fFwiVmVyc2lvbiAwLjFcIn0sZGVzY3JpcHRpb246e2VuOmEuZGVzY3JpcHRpb258fFwiIFwifSxjb3B5cmlnaHQ6e2VuOmEuY29weXJpZ2h0fHxcIiBcIn0sdHJhZGVtYXJrOntlbjphLnRyYWRlbWFya3x8XCIgXCJ9fSx0aGlzLnVuaXRzUGVyRW09YS51bml0c1BlckVtfHwxZTMsdGhpcy5hc2NlbmRlcj1hLmFzY2VuZGVyLHRoaXMuZGVzY2VuZGVyPWEuZGVzY2VuZGVyLHRoaXMuY3JlYXRlZFRpbWVzdGFtcD1hLmNyZWF0ZWRUaW1lc3RhbXAsdGhpcy50YWJsZXM9e29zMjp7dXNXZWlnaHRDbGFzczphLndlaWdodENsYXNzfHx0aGlzLnVzV2VpZ2h0Q2xhc3Nlcy5NRURJVU0sdXNXaWR0aENsYXNzOmEud2lkdGhDbGFzc3x8dGhpcy51c1dpZHRoQ2xhc3Nlcy5NRURJVU0sZnNTZWxlY3Rpb246YS5mc1NlbGVjdGlvbnx8dGhpcy5mc1NlbGVjdGlvblZhbHVlcy5SRUdVTEFSfX0pLHRoaXMuc3VwcG9ydGVkPSEwLHRoaXMuZ2x5cGhzPW5ldyBTZS5HbHlwaFNldCh0aGlzLGEuZ2x5cGhzfHxbXSksdGhpcy5lbmNvZGluZz1uZXcgWCh0aGlzKSx0aGlzLnBvc2l0aW9uPW5ldyB4Yih0aGlzKSx0aGlzLnN1YnN0aXR1dGlvbj1uZXcgeWIodGhpcyksdGhpcy50YWJsZXM9dGhpcy50YWJsZXN8fHt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiaGludGluZ1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGludGluZz90aGlzLl9oaW50aW5nOlwidHJ1ZXR5cGVcIj09PXRoaXMub3V0bGluZXNGb3JtYXQ/dGhpcy5faGludGluZz1uZXcgTWIodGhpcyk6dm9pZCAwfX0pfWZ1bmN0aW9uIFJkKGEsYil7dmFyIGM9SlNPTi5zdHJpbmdpZnkoYSksZD0yNTY7Zm9yKHZhciBlIGluIGIpe3ZhciBmPXBhcnNlSW50KGUpO2lmKGYmJiEoZjwyNTYpKXtpZihKU09OLnN0cmluZ2lmeShiW2VdKT09PWMpcmV0dXJuIGY7ZDw9ZiYmKGQ9ZisxKX19cmV0dXJuIGJbZF09YSxkfWZ1bmN0aW9uIFNkKGEsYixjKXt2YXIgZD1SZChiLm5hbWUsYyk7cmV0dXJuW3tuYW1lOlwidGFnX1wiK2EsdHlwZTpcIlRBR1wiLHZhbHVlOmIudGFnfSx7bmFtZTpcIm1pblZhbHVlX1wiK2EsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5taW5WYWx1ZTw8MTZ9LHtuYW1lOlwiZGVmYXVsdFZhbHVlX1wiK2EsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5kZWZhdWx0VmFsdWU8PDE2fSx7bmFtZTpcIm1heFZhbHVlX1wiK2EsdHlwZTpcIkZJWEVEXCIsdmFsdWU6Yi5tYXhWYWx1ZTw8MTZ9LHtuYW1lOlwiZmxhZ3NfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MH0se25hbWU6XCJuYW1lSURfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZH1dfWZ1bmN0aW9uIFRkKGEsYixjKXt2YXIgZD17fSxlPW5ldyBMZS5QYXJzZXIoYSxiKTtyZXR1cm4gZC50YWc9ZS5wYXJzZVRhZygpLGQubWluVmFsdWU9ZS5wYXJzZUZpeGVkKCksZC5kZWZhdWx0VmFsdWU9ZS5wYXJzZUZpeGVkKCksZC5tYXhWYWx1ZT1lLnBhcnNlRml4ZWQoKSxlLnNraXAoXCJ1U2hvcnRcIiwxKSxkLm5hbWU9Y1tlLnBhcnNlVVNob3J0KCldfHx7fSxkfWZ1bmN0aW9uIFVkKGEsYixjLGQpe2Zvcih2YXIgZT1SZChiLm5hbWUsZCksZj1be25hbWU6XCJuYW1lSURfXCIrYSx0eXBlOlwiVVNIT1JUXCIsdmFsdWU6ZX0se25hbWU6XCJmbGFnc19cIithLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfV0sZz0wO2c8Yy5sZW5ndGg7KytnKXt2YXIgaD1jW2ddLnRhZztmLnB1c2goe25hbWU6XCJheGlzX1wiK2ErXCIgXCIraCx0eXBlOlwiRklYRURcIix2YWx1ZTpiLmNvb3JkaW5hdGVzW2hdPDwxNn0pfXJldHVybiBmfWZ1bmN0aW9uIFZkKGEsYixjLGQpe3ZhciBlPXt9LGY9bmV3IExlLlBhcnNlcihhLGIpO2UubmFtZT1kW2YucGFyc2VVU2hvcnQoKV18fHt9LGYuc2tpcChcInVTaG9ydFwiLDEpLGUuY29vcmRpbmF0ZXM9e307Zm9yKHZhciBnPTA7ZzxjLmxlbmd0aDsrK2cpZS5jb29yZGluYXRlc1tjW2ddLnRhZ109Zi5wYXJzZUZpeGVkKCk7cmV0dXJuIGV9ZnVuY3Rpb24gV2QoYSxiKXt2YXIgYz1uZXcgSWUuVGFibGUoXCJmdmFyXCIsW3tuYW1lOlwidmVyc2lvblwiLHR5cGU6XCJVTE9OR1wiLHZhbHVlOjY1NTM2fSx7bmFtZTpcIm9mZnNldFRvRGF0YVwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTowfSx7bmFtZTpcImNvdW50U2l6ZVBhaXJzXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjJ9LHtuYW1lOlwiYXhpc0NvdW50XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEuYXhlcy5sZW5ndGh9LHtuYW1lOlwiYXhpc1NpemVcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MjB9LHtuYW1lOlwiaW5zdGFuY2VDb3VudFwiLHR5cGU6XCJVU0hPUlRcIix2YWx1ZTphLmluc3RhbmNlcy5sZW5ndGh9LHtuYW1lOlwiaW5zdGFuY2VTaXplXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjQrNCphLmF4ZXMubGVuZ3RofV0pO2Mub2Zmc2V0VG9EYXRhPWMuc2l6ZU9mKCk7Zm9yKHZhciBkPTA7ZDxhLmF4ZXMubGVuZ3RoO2QrKyljLmZpZWxkcz1jLmZpZWxkcy5jb25jYXQoU2QoZCxhLmF4ZXNbZF0sYikpO2Zvcih2YXIgZT0wO2U8YS5pbnN0YW5jZXMubGVuZ3RoO2UrKyljLmZpZWxkcz1jLmZpZWxkcy5jb25jYXQoVWQoZSxhLmluc3RhbmNlc1tlXSxhLmF4ZXMsYikpO3JldHVybiBjfWZ1bmN0aW9uIFhkKGEsYixjKXt2YXIgZD1uZXcgTGUuUGFyc2VyKGEsYiksZT1kLnBhcnNlVUxvbmcoKTt4ZS5hcmd1bWVudCg2NTUzNj09PWUsXCJVbnN1cHBvcnRlZCBmdmFyIHRhYmxlIHZlcnNpb24uXCIpO3ZhciBmPWQucGFyc2VPZmZzZXQxNigpO2Quc2tpcChcInVTaG9ydFwiLDEpO2Zvcih2YXIgZz1kLnBhcnNlVVNob3J0KCksaD1kLnBhcnNlVVNob3J0KCksaT1kLnBhcnNlVVNob3J0KCksaj1kLnBhcnNlVVNob3J0KCksaz1bXSxsPTA7bDxnO2wrKylrLnB1c2goVGQoYSxiK2YrbCpoLGMpKTtmb3IodmFyIG09W10sbj1iK2YrZypoLG89MDtvPGk7bysrKW0ucHVzaChWZChhLG4rbypqLGssYykpO3JldHVybntheGVzOmssaW5zdGFuY2VzOm19fWZ1bmN0aW9uIFlkKGEsYil7Yj1ifHwwO3ZhciBjPW5ldyBRKGEsYiksZD1jLnBhcnNlVmVyc2lvbigxKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWR8fDEuMT09PWQsXCJVbnN1cHBvcnRlZCBHUE9TIHRhYmxlIHZlcnNpb24gXCIrZCksMT09PWQ/e3ZlcnNpb246ZCxzY3JpcHRzOmMucGFyc2VTY3JpcHRMaXN0KCksZmVhdHVyZXM6Yy5wYXJzZUZlYXR1cmVMaXN0KCksbG9va3VwczpjLnBhcnNlTG9va3VwTGlzdChEZil9Ont2ZXJzaW9uOmQsc2NyaXB0czpjLnBhcnNlU2NyaXB0TGlzdCgpLGZlYXR1cmVzOmMucGFyc2VGZWF0dXJlTGlzdCgpLGxvb2t1cHM6Yy5wYXJzZUxvb2t1cExpc3QoRGYpLHZhcmlhdGlvbnM6Yy5wYXJzZUZlYXR1cmVWYXJpYXRpb25zTGlzdCgpfX1mdW5jdGlvbiBaZChhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwiR1BPU1wiLFt7bmFtZTpcInZlcnNpb25cIix0eXBlOlwiVUxPTkdcIix2YWx1ZTo2NTUzNn0se25hbWU6XCJzY3JpcHRzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLlNjcmlwdExpc3QoYS5zY3JpcHRzKX0se25hbWU6XCJmZWF0dXJlc1wiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5GZWF0dXJlTGlzdChhLmZlYXR1cmVzKX0se25hbWU6XCJsb29rdXBzXCIsdHlwZTpcIlRBQkxFXCIsdmFsdWU6bmV3IEllLkxvb2t1cExpc3QoYS5sb29rdXBzLEVmKX1dKX1mdW5jdGlvbiAkZChhKXt2YXIgYj17fTthLnNraXAoXCJ1U2hvcnRcIik7dmFyIGM9YS5wYXJzZVVTaG9ydCgpO3hlLmFyZ3VtZW50KDA9PT1jLFwiVW5zdXBwb3J0ZWQga2VybiBzdWItdGFibGUgdmVyc2lvbi5cIiksYS5za2lwKFwidVNob3J0XCIsMik7dmFyIGQ9YS5wYXJzZVVTaG9ydCgpO2Euc2tpcChcInVTaG9ydFwiLDMpO2Zvcih2YXIgZT0wO2U8ZDtlKz0xKXt2YXIgZj1hLnBhcnNlVVNob3J0KCksZz1hLnBhcnNlVVNob3J0KCksaD1hLnBhcnNlU2hvcnQoKTtiW2YrXCIsXCIrZ109aH1yZXR1cm4gYn1mdW5jdGlvbiBfZChhKXt2YXIgYj17fTthLnNraXAoXCJ1U2hvcnRcIiksYS5wYXJzZVVMb25nKCk+MSYmY29uc29sZS53YXJuKFwiT25seSB0aGUgZmlyc3Qga2VybiBzdWJ0YWJsZSBpcyBzdXBwb3J0ZWQuXCIpLGEuc2tpcChcInVMb25nXCIpO3ZhciBjPWEucGFyc2VVU2hvcnQoKSxkPTI1NSZjO2lmKGEuc2tpcChcInVTaG9ydFwiKSwwPT09ZCl7dmFyIGU9YS5wYXJzZVVTaG9ydCgpO2Euc2tpcChcInVTaG9ydFwiLDMpO2Zvcih2YXIgZj0wO2Y8ZTtmKz0xKXt2YXIgZz1hLnBhcnNlVVNob3J0KCksaD1hLnBhcnNlVVNob3J0KCksaT1hLnBhcnNlU2hvcnQoKTtiW2crXCIsXCIraF09aX19cmV0dXJuIGJ9ZnVuY3Rpb24gYWUoYSxiKXt2YXIgYz1uZXcgTGUuUGFyc2VyKGEsYiksZD1jLnBhcnNlVVNob3J0KCk7aWYoMD09PWQpcmV0dXJuICRkKGMpO2lmKDE9PT1kKXJldHVybiBfZChjKTt0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBrZXJuIHRhYmxlIHZlcnNpb24gKFwiK2QrXCIpLlwiKX1mdW5jdGlvbiBiZShhLGIsYyxkKXtmb3IodmFyIGU9bmV3IExlLlBhcnNlcihhLGIpLGY9ZD9lLnBhcnNlVVNob3J0OmUucGFyc2VVTG9uZyxnPVtdLGg9MDtoPGMrMTtoKz0xKXt2YXIgaT1mLmNhbGwoZSk7ZCYmKGkqPTIpLGcucHVzaChpKX1yZXR1cm4gZ31mdW5jdGlvbiBjZShhLGMpe2IoXCJmc1wiKS5yZWFkRmlsZShhLGZ1bmN0aW9uKGEsYil7aWYoYSlyZXR1cm4gYyhhLm1lc3NhZ2UpO2MobnVsbCxDYihiKSl9KX1mdW5jdGlvbiBkZShhLGIpe3ZhciBjPW5ldyBYTUxIdHRwUmVxdWVzdDtjLm9wZW4oXCJnZXRcIixhLCEwKSxjLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCIsYy5vbmxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gYy5yZXNwb25zZT9iKG51bGwsYy5yZXNwb25zZSk6YihcIkZvbnQgY291bGQgbm90IGJlIGxvYWRlZDogXCIrYy5zdGF0dXNUZXh0KX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7YihcIkZvbnQgY291bGQgbm90IGJlIGxvYWRlZFwiKX0sYy5zZW5kKCl9ZnVuY3Rpb24gZWUoYSxiKXtmb3IodmFyIGM9W10sZD0xMixlPTA7ZTxiO2UrPTEpe3ZhciBmPUxlLmdldFRhZyhhLGQpLGc9TGUuZ2V0VUxvbmcoYSxkKzQpLGg9TGUuZ2V0VUxvbmcoYSxkKzgpLGk9TGUuZ2V0VUxvbmcoYSxkKzEyKTtjLnB1c2goe3RhZzpmLGNoZWNrc3VtOmcsb2Zmc2V0OmgsbGVuZ3RoOmksY29tcHJlc3Npb246ITF9KSxkKz0xNn1yZXR1cm4gY31mdW5jdGlvbiBmZShhLGIpe2Zvcih2YXIgYz1bXSxkPTQ0LGU9MDtlPGI7ZSs9MSl7dmFyIGY9TGUuZ2V0VGFnKGEsZCksZz1MZS5nZXRVTG9uZyhhLGQrNCksaD1MZS5nZXRVTG9uZyhhLGQrOCksaT1MZS5nZXRVTG9uZyhhLGQrMTIpLGo9dm9pZCAwO2o9aDxpJiZcIldPRkZcIixjLnB1c2goe3RhZzpmLG9mZnNldDpnLGNvbXByZXNzaW9uOmosY29tcHJlc3NlZExlbmd0aDpoLGxlbmd0aDppfSksZCs9MjB9cmV0dXJuIGN9ZnVuY3Rpb24gZ2UoYSxiKXtpZihcIldPRkZcIj09PWIuY29tcHJlc3Npb24pe3ZhciBjPW5ldyBVaW50OEFycmF5KGEuYnVmZmVyLGIub2Zmc2V0KzIsYi5jb21wcmVzc2VkTGVuZ3RoLTIpLGQ9bmV3IFVpbnQ4QXJyYXkoYi5sZW5ndGgpO2lmKHdlKGMsZCksZC5ieXRlTGVuZ3RoIT09Yi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiRGVjb21wcmVzc2lvbiBlcnJvcjogXCIrYi50YWcrXCIgZGVjb21wcmVzc2VkIGxlbmd0aCBkb2Vzbid0IG1hdGNoIHJlY29yZGVkIGxlbmd0aFwiKTtyZXR1cm57ZGF0YTpuZXcgRGF0YVZpZXcoZC5idWZmZXIsMCksb2Zmc2V0OjB9fXJldHVybntkYXRhOmEsb2Zmc2V0OmIub2Zmc2V0fX1mdW5jdGlvbiBoZShhKXt2YXIgYixjLGQsZT1uZXcgUWQoe2VtcHR5OiEwfSksZj1uZXcgRGF0YVZpZXcoYSwwKSxnPVtdLGg9TGUuZ2V0VGFnKGYsMCk7aWYoaD09PVN0cmluZy5mcm9tQ2hhckNvZGUoMCwxLDAsMCl8fFwidHJ1ZVwiPT09aHx8XCJ0eXAxXCI9PT1oKWUub3V0bGluZXNGb3JtYXQ9XCJ0cnVldHlwZVwiLGQ9TGUuZ2V0VVNob3J0KGYsNCksZz1lZShmLGQpO2Vsc2UgaWYoXCJPVFRPXCI9PT1oKWUub3V0bGluZXNGb3JtYXQ9XCJjZmZcIixkPUxlLmdldFVTaG9ydChmLDQpLGc9ZWUoZixkKTtlbHNle2lmKFwid09GRlwiIT09aCl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBPcGVuVHlwZSBzaWduYXR1cmUgXCIraCk7dmFyIGk9TGUuZ2V0VGFnKGYsNCk7aWYoaT09PVN0cmluZy5mcm9tQ2hhckNvZGUoMCwxLDAsMCkpZS5vdXRsaW5lc0Zvcm1hdD1cInRydWV0eXBlXCI7ZWxzZXtpZihcIk9UVE9cIiE9PWkpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgT3BlblR5cGUgZmxhdm9yIFwiK2gpO2Uub3V0bGluZXNGb3JtYXQ9XCJjZmZcIn1kPUxlLmdldFVTaG9ydChmLDEyKSxnPWZlKGYsZCl9Zm9yKHZhciBqLGssbCxtLG4sbyxwLHEscixzLHQsdT0wO3U8ZDt1Kz0xKXt2YXIgdj1nW3VdLHc9dm9pZCAwO3N3aXRjaCh2LnRhZyl7Y2FzZVwiY21hcFwiOnc9Z2UoZix2KSxlLnRhYmxlcy5jbWFwPU1lLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS5lbmNvZGluZz1uZXcgWShlLnRhYmxlcy5jbWFwKTticmVhaztjYXNlXCJjdnQgXCI6dz1nZShmLHYpLHQ9bmV3IExlLlBhcnNlcih3LmRhdGEsdy5vZmZzZXQpLGUudGFibGVzLmN2dD10LnBhcnNlU2hvcnRMaXN0KHYubGVuZ3RoLzIpO2JyZWFrO2Nhc2VcImZ2YXJcIjprPXY7YnJlYWs7Y2FzZVwiZnBnbVwiOnc9Z2UoZix2KSx0PW5ldyBMZS5QYXJzZXIody5kYXRhLHcub2Zmc2V0KSxlLnRhYmxlcy5mcGdtPXQucGFyc2VCeXRlTGlzdCh2Lmxlbmd0aCk7YnJlYWs7Y2FzZVwiaGVhZFwiOnc9Z2UoZix2KSxlLnRhYmxlcy5oZWFkPVdlLnBhcnNlKHcuZGF0YSx3Lm9mZnNldCksZS51bml0c1BlckVtPWUudGFibGVzLmhlYWQudW5pdHNQZXJFbSxiPWUudGFibGVzLmhlYWQuaW5kZXhUb0xvY0Zvcm1hdDticmVhaztjYXNlXCJoaGVhXCI6dz1nZShmLHYpLGUudGFibGVzLmhoZWE9WGUucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLmFzY2VuZGVyPWUudGFibGVzLmhoZWEuYXNjZW5kZXIsZS5kZXNjZW5kZXI9ZS50YWJsZXMuaGhlYS5kZXNjZW5kZXIsZS5udW1iZXJPZkhNZXRyaWNzPWUudGFibGVzLmhoZWEubnVtYmVyT2ZITWV0cmljczticmVhaztjYXNlXCJobXR4XCI6bz12O2JyZWFrO2Nhc2VcImx0YWdcIjp3PWdlKGYsdiksYz1aZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpO2JyZWFrO2Nhc2VcIm1heHBcIjp3PWdlKGYsdiksZS50YWJsZXMubWF4cD0kZS5wYXJzZSh3LmRhdGEsdy5vZmZzZXQpLGUubnVtR2x5cGhzPWUudGFibGVzLm1heHAubnVtR2x5cGhzO2JyZWFrO2Nhc2VcIm5hbWVcIjpyPXY7YnJlYWs7Y2FzZVwiT1MvMlwiOnc9Z2UoZix2KSxlLnRhYmxlcy5vczI9amYucGFyc2Uody5kYXRhLHcub2Zmc2V0KTticmVhaztjYXNlXCJwb3N0XCI6dz1nZShmLHYpLGUudGFibGVzLnBvc3Q9a2YucGFyc2Uody5kYXRhLHcub2Zmc2V0KSxlLmdseXBoTmFtZXM9bmV3ICQoZS50YWJsZXMucG9zdCk7YnJlYWs7Y2FzZVwicHJlcFwiOnc9Z2UoZix2KSx0PW5ldyBMZS5QYXJzZXIody5kYXRhLHcub2Zmc2V0KSxlLnRhYmxlcy5wcmVwPXQucGFyc2VCeXRlTGlzdCh2Lmxlbmd0aCk7YnJlYWs7Y2FzZVwiZ2x5ZlwiOmw9djticmVhaztjYXNlXCJsb2NhXCI6cT12O2JyZWFrO2Nhc2VcIkNGRiBcIjpqPXY7YnJlYWs7Y2FzZVwia2VyblwiOnA9djticmVhaztjYXNlXCJHUE9TXCI6bT12O2JyZWFrO2Nhc2VcIkdTVUJcIjpuPXY7YnJlYWs7Y2FzZVwibWV0YVwiOnM9dn19dmFyIHg9Z2UoZixyKTtpZihlLnRhYmxlcy5uYW1lPWdmLnBhcnNlKHguZGF0YSx4Lm9mZnNldCxjKSxlLm5hbWVzPWUudGFibGVzLm5hbWUsbCYmcSl7dmFyIHk9MD09PWIsej1nZShmLHEpLEE9SGYucGFyc2Uoei5kYXRhLHoub2Zmc2V0LGUubnVtR2x5cGhzLHkpLEI9Z2UoZixsKTtlLmdseXBocz12Zi5wYXJzZShCLmRhdGEsQi5vZmZzZXQsQSxlKX1lbHNle2lmKCFqKXRocm93IG5ldyBFcnJvcihcIkZvbnQgZG9lc24ndCBjb250YWluIFRydWVUeXBlIG9yIENGRiBvdXRsaW5lcy5cIik7dmFyIEM9Z2UoZixqKTtWZS5wYXJzZShDLmRhdGEsQy5vZmZzZXQsZSl9dmFyIEQ9Z2UoZixvKTtpZihZZS5wYXJzZShELmRhdGEsRC5vZmZzZXQsZS5udW1iZXJPZkhNZXRyaWNzLGUubnVtR2x5cGhzLGUuZ2x5cGhzKSxfKGUpLHApe3ZhciBFPWdlKGYscCk7ZS5rZXJuaW5nUGFpcnM9R2YucGFyc2UoRS5kYXRhLEUub2Zmc2V0KX1lbHNlIGUua2VybmluZ1BhaXJzPXt9O2lmKG0pe3ZhciBGPWdlKGYsbSk7ZS50YWJsZXMuZ3Bvcz1GZi5wYXJzZShGLmRhdGEsRi5vZmZzZXQpLGUucG9zaXRpb24uaW5pdCgpfWlmKG4pe3ZhciBHPWdlKGYsbik7ZS50YWJsZXMuZ3N1Yj1vZi5wYXJzZShHLmRhdGEsRy5vZmZzZXQpfWlmKGspe3ZhciBIPWdlKGYsayk7ZS50YWJsZXMuZnZhcj1DZi5wYXJzZShILmRhdGEsSC5vZmZzZXQsZS5uYW1lcyl9aWYocyl7dmFyIEk9Z2UoZixzKTtlLnRhYmxlcy5tZXRhPXBmLnBhcnNlKEkuZGF0YSxJLm9mZnNldCksZS5tZXRhcz1lLnRhYmxlcy5tZXRhfXJldHVybiBlfWZ1bmN0aW9uIGllKGEsYil7KFwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3c/Y2U6ZGUpKGEsZnVuY3Rpb24oYSxjKXtpZihhKXJldHVybiBiKGEpO3ZhciBkO3RyeXtkPWhlKGMpfWNhdGNoKGEpe3JldHVybiBiKGEsbnVsbCl9cmV0dXJuIGIobnVsbCxkKX0pfWZ1bmN0aW9uIGplKGEpe3JldHVybiBoZShDYihiKFwiZnNcIikucmVhZEZpbGVTeW5jKGEpKSl9U3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdHx8ZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbigpe3RyeXt2YXIgYT17fSxiPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxjPWIoYSxhLGEpJiZifWNhdGNoKGEpe31yZXR1cm4gY30oKSxiPWZ1bmN0aW9uKGEpe2lmKG51bGw9PXRoaXMpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGI9U3RyaW5nKHRoaXMpLGM9Yi5sZW5ndGgsZD1hP051bWJlcihhKTowO2lmKGQhPWQmJihkPTApLCEoZDwwfHxkPj1jKSl7dmFyIGUsZj1iLmNoYXJDb2RlQXQoZCk7cmV0dXJuIGY+PTU1Mjk2JiZmPD01NjMxOSYmYz5kKzEmJihlPWIuY2hhckNvZGVBdChkKzEpKT49NTYzMjAmJmU8PTU3MzQzPzEwMjQqKGYtNTUyOTYpK2UtNTYzMjArNjU1MzY6Zn19O2E/YShTdHJpbmcucHJvdG90eXBlLFwiY29kZVBvaW50QXRcIix7dmFsdWU6Yixjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0PWJ9KCk7dmFyIGtlPTAsbGU9LTMsbWU9bmV3IGMsbmU9bmV3IGMsb2U9bmV3IFVpbnQ4QXJyYXkoMzApLHBlPW5ldyBVaW50MTZBcnJheSgzMCkscWU9bmV3IFVpbnQ4QXJyYXkoMzApLHJlPW5ldyBVaW50MTZBcnJheSgzMCksc2U9bmV3IFVpbnQ4QXJyYXkoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSx0ZT1uZXcgYyx1ZT1uZXcgVWludDhBcnJheSgzMjApLHZlPW5ldyBVaW50MTZBcnJheSgxNik7ZyhtZSxuZSksZihvZSxwZSw0LDMpLGYocWUscmUsMiwxKSxvZVsyOF09MCxwZVsyOF09MjU4O3ZhciB3ZT1vO3EucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gaXNOYU4odGhpcy54MSl8fGlzTmFOKHRoaXMueTEpfHxpc05hTih0aGlzLngyKXx8aXNOYU4odGhpcy55Mil9LHEucHJvdG90eXBlLmFkZFBvaW50PWZ1bmN0aW9uKGEsYil7XCJudW1iZXJcIj09dHlwZW9mIGEmJigoaXNOYU4odGhpcy54MSl8fGlzTmFOKHRoaXMueDIpKSYmKHRoaXMueDE9YSx0aGlzLngyPWEpLGE8dGhpcy54MSYmKHRoaXMueDE9YSksYT50aGlzLngyJiYodGhpcy54Mj1hKSksXCJudW1iZXJcIj09dHlwZW9mIGImJigoaXNOYU4odGhpcy55MSl8fGlzTmFOKHRoaXMueTIpKSYmKHRoaXMueTE9Yix0aGlzLnkyPWIpLGI8dGhpcy55MSYmKHRoaXMueTE9YiksYj50aGlzLnkyJiYodGhpcy55Mj1iKSl9LHEucHJvdG90eXBlLmFkZFg9ZnVuY3Rpb24oYSl7dGhpcy5hZGRQb2ludChhLG51bGwpfSxxLnByb3RvdHlwZS5hZGRZPWZ1bmN0aW9uKGEpe3RoaXMuYWRkUG9pbnQobnVsbCxhKX0scS5wcm90b3R5cGUuYWRkQmV6aWVyPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCl7dmFyIGk9dGhpcyxqPVthLGJdLGs9W2MsZF0sbD1bZSxmXSxtPVtnLGhdO3RoaXMuYWRkUG9pbnQoYSxiKSx0aGlzLmFkZFBvaW50KGcsaCk7Zm9yKHZhciBuPTA7bjw9MTtuKyspe3ZhciBvPTYqaltuXS0xMiprW25dKzYqbFtuXSxxPS0zKmpbbl0rOSprW25dLTkqbFtuXSszKm1bbl0scj0zKmtbbl0tMypqW25dO2lmKDAhPT1xKXt2YXIgcz1NYXRoLnBvdyhvLDIpLTQqcipxO2lmKCEoczwwKSl7dmFyIHQ9KC1vK01hdGguc3FydChzKSkvKDIqcSk7MDx0JiZ0PDEmJigwPT09biYmaS5hZGRYKHAoaltuXSxrW25dLGxbbl0sbVtuXSx0KSksMT09PW4mJmkuYWRkWShwKGpbbl0sa1tuXSxsW25dLG1bbl0sdCkpKTt2YXIgdT0oLW8tTWF0aC5zcXJ0KHMpKS8oMipxKTswPHUmJnU8MSYmKDA9PT1uJiZpLmFkZFgocChqW25dLGtbbl0sbFtuXSxtW25dLHUpKSwxPT09biYmaS5hZGRZKHAoaltuXSxrW25dLGxbbl0sbVtuXSx1KSkpfX1lbHNle2lmKDA9PT1vKWNvbnRpbnVlO3ZhciB2PS1yL287MDx2JiZ2PDEmJigwPT09biYmaS5hZGRYKHAoaltuXSxrW25dLGxbbl0sbVtuXSx2KSksMT09PW4mJmkuYWRkWShwKGpbbl0sa1tuXSxsW25dLG1bbl0sdikpKX19fSxxLnByb3RvdHlwZS5hZGRRdWFkPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1hKzIvMyooYy1hKSxoPWIrMi8zKihkLWIpLGk9ZysxLzMqKGUtYSksaj1oKzEvMyooZi1iKTt0aGlzLmFkZEJlemllcihhLGIsZyxoLGksaixlLGYpfSxyLnByb3RvdHlwZS5tb3ZlVG89ZnVuY3Rpb24oYSxiKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJNXCIseDphLHk6Yn0pfSxyLnByb3RvdHlwZS5saW5lVG89ZnVuY3Rpb24oYSxiKXt0aGlzLmNvbW1hbmRzLnB1c2goe3R5cGU6XCJMXCIseDphLHk6Yn0pfSxyLnByb3RvdHlwZS5jdXJ2ZVRvPXIucHJvdG90eXBlLmJlemllckN1cnZlVG89ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIkNcIix4MTphLHkxOmIseDI6Yyx5MjpkLHg6ZSx5OmZ9KX0sci5wcm90b3R5cGUucXVhZFRvPXIucHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG89ZnVuY3Rpb24oYSxiLGMsZCl7dGhpcy5jb21tYW5kcy5wdXNoKHt0eXBlOlwiUVwiLHgxOmEseTE6Yix4OmMseTpkfSl9LHIucHJvdG90eXBlLmNsb3NlPXIucHJvdG90eXBlLmNsb3NlUGF0aD1mdW5jdGlvbigpe3RoaXMuY29tbWFuZHMucHVzaCh7dHlwZTpcIlpcIn0pfSxyLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24oYSl7aWYoYS5jb21tYW5kcylhPWEuY29tbWFuZHM7ZWxzZSBpZihhIGluc3RhbmNlb2YgcSl7dmFyIGI9YTtyZXR1cm4gdGhpcy5tb3ZlVG8oYi54MSxiLnkxKSx0aGlzLmxpbmVUbyhiLngyLGIueTEpLHRoaXMubGluZVRvKGIueDIsYi55MiksdGhpcy5saW5lVG8oYi54MSxiLnkyKSx2b2lkIHRoaXMuY2xvc2UoKX1BcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLmNvbW1hbmRzLGEpfSxyLnByb3RvdHlwZS5nZXRCb3VuZGluZ0JveD1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLGI9bmV3IHEsYz0wLGQ9MCxlPTAsZj0wLGc9MDtnPHRoaXMuY29tbWFuZHMubGVuZ3RoO2crKyl7dmFyIGg9YS5jb21tYW5kc1tnXTtzd2l0Y2goaC50eXBlKXtjYXNlXCJNXCI6Yi5hZGRQb2ludChoLngsaC55KSxjPWU9aC54LGQ9Zj1oLnk7YnJlYWs7Y2FzZVwiTFwiOmIuYWRkUG9pbnQoaC54LGgueSksZT1oLngsZj1oLnk7YnJlYWs7Y2FzZVwiUVwiOmIuYWRkUXVhZChlLGYsaC54MSxoLnkxLGgueCxoLnkpLGU9aC54LGY9aC55O2JyZWFrO2Nhc2VcIkNcIjpiLmFkZEJlemllcihlLGYsaC54MSxoLnkxLGgueDIsaC55MixoLngsaC55KSxlPWgueCxmPWgueTticmVhaztjYXNlXCJaXCI6ZT1jLGY9ZDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgcGF0aCBjb21tYW5kIFwiK2gudHlwZSl9fXJldHVybiBiLmlzRW1wdHkoKSYmYi5hZGRQb2ludCgwLDApLGJ9LHIucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpczthLmJlZ2luUGF0aCgpO2Zvcih2YXIgYz0wO2M8dGhpcy5jb21tYW5kcy5sZW5ndGg7Yys9MSl7dmFyIGQ9Yi5jb21tYW5kc1tjXTtcIk1cIj09PWQudHlwZT9hLm1vdmVUbyhkLngsZC55KTpcIkxcIj09PWQudHlwZT9hLmxpbmVUbyhkLngsZC55KTpcIkNcIj09PWQudHlwZT9hLmJlemllckN1cnZlVG8oZC54MSxkLnkxLGQueDIsZC55MixkLngsZC55KTpcIlFcIj09PWQudHlwZT9hLnF1YWRyYXRpY0N1cnZlVG8oZC54MSxkLnkxLGQueCxkLnkpOlwiWlwiPT09ZC50eXBlJiZhLmNsb3NlUGF0aCgpfXRoaXMuZmlsbCYmKGEuZmlsbFN0eWxlPXRoaXMuZmlsbCxhLmZpbGwoKSksdGhpcy5zdHJva2UmJihhLnN0cm9rZVN0eWxlPXRoaXMuc3Ryb2tlLGEubGluZVdpZHRoPXRoaXMuc3Ryb2tlV2lkdGgsYS5zdHJva2UoKSl9LHIucHJvdG90eXBlLnRvUGF0aERhdGE9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtyZXR1cm4gTWF0aC5yb3VuZChiKT09PWI/XCJcIitNYXRoLnJvdW5kKGIpOmIudG9GaXhlZChhKX1mdW5jdGlvbiBjKCl7Zm9yKHZhciBhPWFyZ3VtZW50cyxjPVwiXCIsZD0wO2Q8YXJndW1lbnRzLmxlbmd0aDtkKz0xKXt2YXIgZT1hW2RdO2U+PTAmJmQ+MCYmKGMrPVwiIFwiKSxjKz1iKGUpfXJldHVybiBjfXZhciBkPXRoaXM7YT12b2lkIDAhPT1hP2E6Mjtmb3IodmFyIGU9XCJcIixmPTA7Zjx0aGlzLmNvbW1hbmRzLmxlbmd0aDtmKz0xKXt2YXIgZz1kLmNvbW1hbmRzW2ZdO1wiTVwiPT09Zy50eXBlP2UrPVwiTVwiK2MoZy54LGcueSk6XCJMXCI9PT1nLnR5cGU/ZSs9XCJMXCIrYyhnLngsZy55KTpcIkNcIj09PWcudHlwZT9lKz1cIkNcIitjKGcueDEsZy55MSxnLngyLGcueTIsZy54LGcueSk6XCJRXCI9PT1nLnR5cGU/ZSs9XCJRXCIrYyhnLngxLGcueTEsZy54LGcueSk6XCJaXCI9PT1nLnR5cGUmJihlKz1cIlpcIil9cmV0dXJuIGV9LHIucHJvdG90eXBlLnRvU1ZHPWZ1bmN0aW9uKGEpe3ZhciBiPSc8cGF0aCBkPVwiJztyZXR1cm4gYis9dGhpcy50b1BhdGhEYXRhKGEpLGIrPSdcIicsdGhpcy5maWxsJiZcImJsYWNrXCIhPT10aGlzLmZpbGwmJihudWxsPT09dGhpcy5maWxsP2IrPScgZmlsbD1cIm5vbmVcIic6Yis9JyBmaWxsPVwiJyt0aGlzLmZpbGwrJ1wiJyksdGhpcy5zdHJva2UmJihiKz0nIHN0cm9rZT1cIicrdGhpcy5zdHJva2UrJ1wiIHN0cm9rZS13aWR0aD1cIicrdGhpcy5zdHJva2VXaWR0aCsnXCInKSxiKz1cIi8+XCJ9LHIucHJvdG90eXBlLnRvRE9NRWxlbWVudD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnRvUGF0aERhdGEoYSksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwicGF0aFwiKTtyZXR1cm4gYy5zZXRBdHRyaWJ1dGUoXCJkXCIsYiksY307dmFyIHhlPXtmYWlsOnMsYXJndW1lbnQ6dCxhc3NlcnQ6dH0seWU9MzI3NjgsemU9MjE0NzQ4MzY0OCxBZT17fSxCZT17fSxDZT17fTtCZS5CWVRFPWZ1bmN0aW9uKGEpe3JldHVybiB4ZS5hcmd1bWVudChhPj0wJiZhPD0yNTUsXCJCeXRlIHZhbHVlIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDI1NS5cIiksW2FdfSxDZS5CWVRFPXUoMSksQmUuQ0hBUj1mdW5jdGlvbihhKXtyZXR1cm5bYS5jaGFyQ29kZUF0KDApXX0sQ2UuQ0hBUj11KDEpLEJlLkNIQVJBUlJBWT1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YS5sZW5ndGg7Yys9MSliW2NdPWEuY2hhckNvZGVBdChjKTtyZXR1cm4gYn0sQ2UuQ0hBUkFSUkFZPWZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0sQmUuVVNIT1JUPWZ1bmN0aW9uKGEpe3JldHVyblthPj44JjI1NSwyNTUmYV19LENlLlVTSE9SVD11KDIpLEJlLlNIT1JUPWZ1bmN0aW9uKGEpe3JldHVybiBhPj15ZSYmKGE9LSgyKnllLWEpKSxbYT4+OCYyNTUsMjU1JmFdfSxDZS5TSE9SVD11KDIpLEJlLlVJTlQyND1mdW5jdGlvbihhKXtyZXR1cm5bYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuVUlOVDI0PXUoMyksQmUuVUxPTkc9ZnVuY3Rpb24oYSl7cmV0dXJuW2E+PjI0JjI1NSxhPj4xNiYyNTUsYT4+OCYyNTUsMjU1JmFdfSxDZS5VTE9ORz11KDQpLEJlLkxPTkc9ZnVuY3Rpb24oYSl7cmV0dXJuIGE+PXplJiYoYT0tKDIqemUtYSkpLFthPj4yNCYyNTUsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuTE9ORz11KDQpLEJlLkZJWEVEPUJlLlVMT05HLENlLkZJWEVEPUNlLlVMT05HLEJlLkZXT1JEPUJlLlNIT1JULENlLkZXT1JEPUNlLlNIT1JULEJlLlVGV09SRD1CZS5VU0hPUlQsQ2UuVUZXT1JEPUNlLlVTSE9SVCxCZS5MT05HREFURVRJTUU9ZnVuY3Rpb24oYSl7cmV0dXJuWzAsMCwwLDAsYT4+MjQmMjU1LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV19LENlLkxPTkdEQVRFVElNRT11KDgpLEJlLlRBRz1mdW5jdGlvbihhKXtyZXR1cm4geGUuYXJndW1lbnQoND09PWEubGVuZ3RoLFwiVGFnIHNob3VsZCBiZSBleGFjdGx5IDQgQVNDSUkgY2hhcmFjdGVycy5cIiksW2EuY2hhckNvZGVBdCgwKSxhLmNoYXJDb2RlQXQoMSksYS5jaGFyQ29kZUF0KDIpLGEuY2hhckNvZGVBdCgzKV19LENlLlRBRz11KDQpLEJlLkNhcmQ4PUJlLkJZVEUsQ2UuQ2FyZDg9Q2UuQllURSxCZS5DYXJkMTY9QmUuVVNIT1JULENlLkNhcmQxNj1DZS5VU0hPUlQsQmUuT2ZmU2l6ZT1CZS5CWVRFLENlLk9mZlNpemU9Q2UuQllURSxCZS5TSUQ9QmUuVVNIT1JULENlLlNJRD1DZS5VU0hPUlQsQmUuTlVNQkVSPWZ1bmN0aW9uKGEpe3JldHVybiBhPj0tMTA3JiZhPD0xMDc/W2ErMTM5XTphPj0xMDgmJmE8PTExMzE/KGEtPTEwOCxbMjQ3KyhhPj44KSwyNTUmYV0pOmE+PS0xMTMxJiZhPD0tMTA4PyhhPS1hLTEwOCxbMjUxKyhhPj44KSwyNTUmYV0pOmE+PS0zMjc2OCYmYTw9MzI3Njc/QmUuTlVNQkVSMTYoYSk6QmUuTlVNQkVSMzIoYSlcbn0sQ2UuTlVNQkVSPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5OVU1CRVIoYSkubGVuZ3RofSxCZS5OVU1CRVIxNj1mdW5jdGlvbihhKXtyZXR1cm5bMjgsYT4+OCYyNTUsMjU1JmFdfSxDZS5OVU1CRVIxNj11KDMpLEJlLk5VTUJFUjMyPWZ1bmN0aW9uKGEpe3JldHVyblsyOSxhPj4yNCYyNTUsYT4+MTYmMjU1LGE+PjgmMjU1LDI1NSZhXX0sQ2UuTlVNQkVSMzI9dSg1KSxCZS5SRUFMPWZ1bmN0aW9uKGEpe3ZhciBiPWEudG9TdHJpbmcoKSxjPS9cXC4oXFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxcZHswLDJ9KD86ZSguKyl8JCkvLmV4ZWMoYik7aWYoYyl7dmFyIGQ9cGFyc2VGbG9hdChcIjFlXCIrKChjWzJdPytjWzJdOjApK2NbMV0ubGVuZ3RoKSk7Yj0oTWF0aC5yb3VuZChhKmQpL2QpLnRvU3RyaW5nKCl9Zm9yKHZhciBlPVwiXCIsZj0wLGc9Yi5sZW5ndGg7ZjxnO2YrPTEpe3ZhciBoPWJbZl07ZSs9XCJlXCI9PT1oP1wiLVwiPT09YlsrK2ZdP1wiY1wiOlwiYlwiOlwiLlwiPT09aD9cImFcIjpcIi1cIj09PWg/XCJlXCI6aH1lKz0xJmUubGVuZ3RoP1wiZlwiOlwiZmZcIjtmb3IodmFyIGk9WzMwXSxqPTAsaz1lLmxlbmd0aDtqPGs7ais9MilpLnB1c2gocGFyc2VJbnQoZS5zdWJzdHIoaiwyKSwxNikpO3JldHVybiBpfSxDZS5SRUFMPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5SRUFMKGEpLmxlbmd0aH0sQmUuTkFNRT1CZS5DSEFSQVJSQVksQ2UuTkFNRT1DZS5DSEFSQVJSQVksQmUuU1RSSU5HPUJlLkNIQVJBUlJBWSxDZS5TVFJJTkc9Q2UuQ0hBUkFSUkFZLEFlLlVURjg9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPWMsZj0wO2Y8ZTtmKyssYis9MSlkW2ZdPWEuZ2V0VWludDgoYik7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxkKX0sQWUuVVRGMTY9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPWMvMixmPTA7ZjxlO2YrKyxiKz0yKWRbZl09YS5nZXRVaW50MTYoYik7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxkKX0sQmUuVVRGMTY9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrPTEpe3ZhciBkPWEuY2hhckNvZGVBdChjKTtiW2IubGVuZ3RoXT1kPj44JjI1NSxiW2IubGVuZ3RoXT0yNTUmZH1yZXR1cm4gYn0sQ2UuVVRGMTY9ZnVuY3Rpb24oYSl7cmV0dXJuIDIqYS5sZW5ndGh9O3ZhciBEZT17XCJ4LW1hYy1jcm9hdGlhblwiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuxaDihKLCtMKo4omgxb3DmOKInsKx4omk4oml4oiGwrXiiILiiJHiiI/FoeKIq8KqwrrOqcW+w7jCv8KhwqziiJrGkuKJiMSGwqvEjOKApsKgw4DDg8OVxZLFk8SQ4oCU4oCc4oCd4oCY4oCZw7fil4rvo7/CqeKBhOKCrOKAueKAusOGwrvigJPCt+KAmuKAnuKAsMOCxIfDgcSNw4jDjcOOw4/DjMOTw5TEkcOSw5rDm8OZxLHLhsucwq/PgMOLy5rCuMOKw6bLh1wiLFwieC1tYWMtY3lyaWxsaWNcIjpcItCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/igKDCsNKQwqPCp+KAosK20IbCrsKp4oSi0ILRkuKJoNCD0ZPiiJ7CseKJpOKJpdGWwrXSkdCI0ITRlNCH0ZfQidGZ0IrRmtGY0IXCrOKImsaS4omI4oiGwqvCu+KApsKg0IvRm9CM0ZzRleKAk+KAlOKAnOKAneKAmOKAmcO34oCe0I7RntCP0Z/ihJbQgdGR0Y/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjlwiLFwieC1tYWMtZ2FlbGljXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4biCwrHiiaTiiaXhuIPEisSL4biK4biL4bie4bifxKDEoeG5gMOmw7jhuYHhuZbhuZfJvMaSxb/huaDCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZ4bmh4bqbw7/FuOG5quKCrOKAueKAusW2xbfhuavCt+G7suG7s+KBisOCw4rDgcOLw4jDjcOOw4/DjMOTw5TimaPDksOaw5vDmcSxw53DvcW0xbXhuoThuoXhuoDhuoHhuoLhuoNcIixcIngtbWFjLWdyZWVrXCI6XCLDhMK5wrLDicKzw5bDnM6Fw6DDosOkzoTCqMOnw6nDqMOqw6vCo+KEosOuw6/igKLCveKAsMO0w7bCpuKCrMO5w7vDvOKAoM6TzpTOmM6bzp7OoMOfwq7Cqc6jzqrCp+KJoMKwwrfOkcKx4omk4omlwqXOks6VzpbOl86ZzprOnM6mzqvOqM6pzqzOncKszp/OoeKJiM6kwqvCu+KApsKgzqXOp86GzojFk+KAk+KAleKAnOKAneKAmOKAmcO3zonOis6Mzo7Orc6uzq/PjM6Pz43Osc6yz4jOtM61z4bOs863zrnOvs66zrvOvM69zr/PgM+Oz4HPg8+EzrjPic+Cz4fPhc62z4rPi86QzrDCrVwiLFwieC1tYWMtaWNlbGFuZGljXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O8w53CsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrOqcOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTigqzDkMOww57DvsO9wrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU76O/w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCIsXCJ4LW1hYy1pbnVpdFwiOlwi4ZCD4ZCE4ZCF4ZCG4ZCK4ZCL4ZCx4ZCy4ZCz4ZC04ZC44ZC54ZGJ4ZGO4ZGP4ZGQ4ZGR4ZGV4ZGW4ZGm4ZGt4ZGu4ZGv4ZGw4ZGy4ZGz4ZKD4ZKL4ZKM4ZKN4ZKO4ZKQ4ZKRwrDhkqHhkqXhkqbigKLCtuGSp8KuwqnihKLhkqjhkqrhkqvhkrvhk4Lhk4Phk4Thk4Xhk4fhk4jhk5Dhk6/hk7Dhk7Hhk7Lhk7Thk7XhlIXhk5Xhk5bhk5fhk5jhk5rhk5vhk6rhlKjhlKnhlKrhlKvhlK3igKbCoOGUruGUvuGVleGVluGVl+KAk+KAlOKAnOKAneKAmOKAmeGVmOGVmeGVmuGVneGVhuGVh+GViOGVieGVi+GVjOGVkOGVv+GWgOGWgeGWguGWg+GWhOGWheGWj+GWkOGWkeGWkuGWk+GWlOGWleGZseGZsuGZs+GZtOGZteGZtuGWluGWoOGWoeGWouGWo+GWpOGWpeGWpuGVvMWBxYJcIixcIngtbWFjLWNlXCI6XCLDhMSAxIHDicSEw5bDnMOhxIXEjMOkxI3EhsSHw6nFucW6xI7DrcSPxJLEk8SWw7PEl8O0w7bDtcO6xJrEm8O84oCgwrDEmMKjwqfigKLCtsOfwq7CqeKEosSZwqjiiaDEo8SuxK/EquKJpOKJpcSrxLbiiILiiJHFgsS7xLzEvcS+xLnEusWFxYbFg8Ks4oiaxYTFh+KIhsKrwrvigKbCoMWIxZDDlcWRxYzigJPigJTigJzigJ3igJjigJnDt+KXisWNxZTFlcWY4oC54oC6xZnFlsWXxaDigJrigJ7FocWaxZvDgcWkxaXDjcW9xb7FqsOTw5TFq8Wuw5rFr8WwxbHFssWzw53DvcS3xbvFgcW8xKLLh1wiLG1hY2ludG9zaDpcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrOqcOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTigqzigLnigLrvrIHvrILigKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvo7/DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIixcIngtbWFjLXJvbWFuaWFuXCI6XCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDEgsiY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK6zqnEg8iZwr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGE4oKs4oC54oC6yJrIm+KAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+jv8OSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiLFwieC1tYWMtdHVya2lzaFwiOlwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCus6pw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuMSexJ/EsMSxxZ7Fn+KAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+jv8OSw5rDm8OZ76Kgy4bLnMKvy5jLmcuawrjLncuby4dcIn07QWUuTUFDU1RSSU5HPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPURlW2RdO2lmKHZvaWQgMCE9PWUpe2Zvcih2YXIgZj1cIlwiLGc9MDtnPGM7ZysrKXt2YXIgaD1hLmdldFVpbnQ4KGIrZyk7Zis9aDw9MTI3P1N0cmluZy5mcm9tQ2hhckNvZGUoaCk6ZVsxMjcmaF19cmV0dXJuIGZ9fTt2YXIgRWUsRmU9XCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha01hcCYmbmV3IFdlYWtNYXAsR2U9ZnVuY3Rpb24oYSl7aWYoIUVlKXtFZT17fTtmb3IodmFyIGIgaW4gRGUpRWVbYl09bmV3IFN0cmluZyhiKX12YXIgYz1FZVthXTtpZih2b2lkIDAhPT1jKXtpZihGZSl7dmFyIGQ9RmUuZ2V0KGMpO2lmKHZvaWQgMCE9PWQpcmV0dXJuIGR9dmFyIGU9RGVbYV07aWYodm9pZCAwIT09ZSl7Zm9yKHZhciBmPXt9LGc9MDtnPGUubGVuZ3RoO2crKylmW2UuY2hhckNvZGVBdChnKV09ZysxMjg7cmV0dXJuIEZlJiZGZS5zZXQoYyxmKSxmfX19O0JlLk1BQ1NUUklORz1mdW5jdGlvbihhLGIpe3ZhciBjPUdlKGIpO2lmKHZvaWQgMCE9PWMpe2Zvcih2YXIgZD1bXSxlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBmPWEuY2hhckNvZGVBdChlKTtpZihmPj0xMjgmJnZvaWQgMD09PShmPWNbZl0pKXJldHVybjtkW2VdPWZ9cmV0dXJuIGR9fSxDZS5NQUNTVFJJTkc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1CZS5NQUNTVFJJTkcoYSxiKTtyZXR1cm4gdm9pZCAwIT09Yz9jLmxlbmd0aDowfSxCZS5WQVJERUxUQVM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz1bXTtiPGEubGVuZ3RoOyl7dmFyIGQ9YVtiXTtiPTA9PT1kP3coYSxiLGMpOmQ+PS0xMjgmJmQ8PTEyNz94KGEsYixjKTp5KGEsYixjKX1yZXR1cm4gY30sQmUuSU5ERVg9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTEsYz1bYl0sZD1bXSxlPTA7ZTxhLmxlbmd0aDtlKz0xKXt2YXIgZj1CZS5PQkpFQ1QoYVtlXSk7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZCxmKSxiKz1mLmxlbmd0aCxjLnB1c2goYil9aWYoMD09PWQubGVuZ3RoKXJldHVyblswLDBdO2Zvcih2YXIgZz1bXSxoPTErTWF0aC5mbG9vcihNYXRoLmxvZyhiKS9NYXRoLmxvZygyKSkvOHwwLGk9W3ZvaWQgMCxCZS5CWVRFLEJlLlVTSE9SVCxCZS5VSU5UMjQsQmUuVUxPTkddW2hdLGo9MDtqPGMubGVuZ3RoO2orPTEpe3ZhciBrPWkoY1tqXSk7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZyxrKX1yZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdChCZS5DYXJkMTYoYS5sZW5ndGgpLEJlLk9mZlNpemUoaCksZyxkKX0sQ2UuSU5ERVg9ZnVuY3Rpb24oYSl7cmV0dXJuIEJlLklOREVYKGEpLmxlbmd0aH0sQmUuRElDVD1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz1PYmplY3Qua2V5cyhhKSxkPWMubGVuZ3RoLGU9MDtlPGQ7ZSs9MSl7dmFyIGY9cGFyc2VJbnQoY1tlXSwwKSxnPWFbZl07Yj1iLmNvbmNhdChCZS5PUEVSQU5EKGcudmFsdWUsZy50eXBlKSksYj1iLmNvbmNhdChCZS5PUEVSQVRPUihmKSl9cmV0dXJuIGJ9LENlLkRJQ1Q9ZnVuY3Rpb24oYSl7cmV0dXJuIEJlLkRJQ1QoYSkubGVuZ3RofSxCZS5PUEVSQVRPUj1mdW5jdGlvbihhKXtyZXR1cm4gYTwxMjAwP1thXTpbMTIsYS0xMjAwXX0sQmUuT1BFUkFORD1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2lmKEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKz0xKXhlLmFyZ3VtZW50KGEubGVuZ3RoPT09Yi5sZW5ndGgsXCJOb3QgZW5vdWdoIGFyZ3VtZW50cyBnaXZlbiBmb3IgdHlwZVwiK2IpLGM9Yy5jb25jYXQoQmUuT1BFUkFORChhW2RdLGJbZF0pKTtlbHNlIGlmKFwiU0lEXCI9PT1iKWM9Yy5jb25jYXQoQmUuTlVNQkVSKGEpKTtlbHNlIGlmKFwib2Zmc2V0XCI9PT1iKWM9Yy5jb25jYXQoQmUuTlVNQkVSMzIoYSkpO2Vsc2UgaWYoXCJudW1iZXJcIj09PWIpYz1jLmNvbmNhdChCZS5OVU1CRVIoYSkpO2Vsc2V7aWYoXCJyZWFsXCIhPT1iKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3BlcmFuZCB0eXBlIFwiK2IpO2M9Yy5jb25jYXQoQmUuUkVBTChhKSl9cmV0dXJuIGN9LEJlLk9QPUJlLkJZVEUsQ2UuT1A9Q2UuQllURTt2YXIgSGU9XCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha01hcCYmbmV3IFdlYWtNYXA7QmUuQ0hBUlNUUklORz1mdW5jdGlvbihhKXtpZihIZSl7dmFyIGI9SGUuZ2V0KGEpO2lmKHZvaWQgMCE9PWIpcmV0dXJuIGJ9Zm9yKHZhciBjPVtdLGQ9YS5sZW5ndGgsZT0wO2U8ZDtlKz0xKXt2YXIgZj1hW2VdO2M9Yy5jb25jYXQoQmVbZi50eXBlXShmLnZhbHVlKSl9cmV0dXJuIEhlJiZIZS5zZXQoYSxjKSxjfSxDZS5DSEFSU1RSSU5HPWZ1bmN0aW9uKGEpe3JldHVybiBCZS5DSEFSU1RSSU5HKGEpLmxlbmd0aH0sQmUuT0JKRUNUPWZ1bmN0aW9uKGEpe3ZhciBiPUJlW2EudHlwZV07cmV0dXJuIHhlLmFyZ3VtZW50KHZvaWQgMCE9PWIsXCJObyBlbmNvZGluZyBmdW5jdGlvbiBmb3IgdHlwZSBcIithLnR5cGUpLGIoYS52YWx1ZSl9LENlLk9CSkVDVD1mdW5jdGlvbihhKXt2YXIgYj1DZVthLnR5cGVdO3JldHVybiB4ZS5hcmd1bWVudCh2b2lkIDAhPT1iLFwiTm8gc2l6ZU9mIGZ1bmN0aW9uIGZvciB0eXBlIFwiK2EudHlwZSksYihhLnZhbHVlKX0sQmUuVEFCTEU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9YS5maWVsZHMubGVuZ3RoLGQ9W10sZT1bXSxmPTA7ZjxjO2YrPTEpe3ZhciBnPWEuZmllbGRzW2ZdLGg9QmVbZy50eXBlXTt4ZS5hcmd1bWVudCh2b2lkIDAhPT1oLFwiTm8gZW5jb2RpbmcgZnVuY3Rpb24gZm9yIGZpZWxkIHR5cGUgXCIrZy50eXBlK1wiIChcIitnLm5hbWUrXCIpXCIpO3ZhciBpPWFbZy5uYW1lXTt2b2lkIDA9PT1pJiYoaT1nLnZhbHVlKTt2YXIgaj1oKGkpO1wiVEFCTEVcIj09PWcudHlwZT8oZS5wdXNoKGIubGVuZ3RoKSxiPWIuY29uY2F0KFswLDBdKSxkLnB1c2goaikpOmI9Yi5jb25jYXQoail9Zm9yKHZhciBrPTA7azxkLmxlbmd0aDtrKz0xKXt2YXIgbD1lW2tdLG09Yi5sZW5ndGg7eGUuYXJndW1lbnQobTw2NTUzNixcIlRhYmxlIFwiK2EudGFibGVOYW1lK1wiIHRvbyBiaWcuXCIpLGJbbF09bT4+OCxiW2wrMV09MjU1Jm0sYj1iLmNvbmNhdChkW2tdKX1yZXR1cm4gYn0sQ2UuVEFCTEU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz1hLmZpZWxkcy5sZW5ndGgsZD0wO2Q8YztkKz0xKXt2YXIgZT1hLmZpZWxkc1tkXSxmPUNlW2UudHlwZV07eGUuYXJndW1lbnQodm9pZCAwIT09ZixcIk5vIHNpemVPZiBmdW5jdGlvbiBmb3IgZmllbGQgdHlwZSBcIitlLnR5cGUrXCIgKFwiK2UubmFtZStcIilcIik7dmFyIGc9YVtlLm5hbWVdO3ZvaWQgMD09PWcmJihnPWUudmFsdWUpLGIrPWYoZyksXCJUQUJMRVwiPT09ZS50eXBlJiYoYis9Mil9cmV0dXJuIGJ9LEJlLlJFQ09SRD1CZS5UQUJMRSxDZS5SRUNPUkQ9Q2UuVEFCTEUsQmUuTElURVJBTD1mdW5jdGlvbihhKXtyZXR1cm4gYX0sQ2UuTElURVJBTD1mdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LHoucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbigpe3JldHVybiBCZS5UQUJMRSh0aGlzKX0sei5wcm90b3R5cGUuc2l6ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIENlLlRBQkxFKHRoaXMpfSxELnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHoucHJvdG90eXBlKSxELnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ELEUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoei5wcm90b3R5cGUpLEUucHJvdG90eXBlLmNvbnN0cnVjdG9yPUUsRi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6LnByb3RvdHlwZSksRi5wcm90b3R5cGUuY29uc3RydWN0b3I9RixHLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHoucHJvdG90eXBlKSxHLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HO3ZhciBJZT17VGFibGU6eixSZWNvcmQ6eixDb3ZlcmFnZTpELFNjcmlwdExpc3Q6RSxGZWF0dXJlTGlzdDpGLExvb2t1cExpc3Q6Ryx1c2hvcnRMaXN0OkEsdGFibGVMaXN0OkIscmVjb3JkTGlzdDpDfSxKZT17Ynl0ZToxLHVTaG9ydDoyLHNob3J0OjIsdUxvbmc6NCxmaXhlZDo0LGxvbmdEYXRlVGltZTo4LHRhZzo0fTtRLnByb3RvdHlwZS5wYXJzZUJ5dGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0VWludDgodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTEsYX0sUS5wcm90b3R5cGUucGFyc2VDaGFyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kYXRhLmdldEludDgodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTEsYX0sUS5wcm90b3R5cGUucGFyc2VDYXJkOD1RLnByb3RvdHlwZS5wYXJzZUJ5dGUsUS5wcm90b3R5cGUucGFyc2VVU2hvcnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0VWludDE2KHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz0yLGF9LFEucHJvdG90eXBlLnBhcnNlQ2FyZDE2PVEucHJvdG90eXBlLnBhcnNlVVNob3J0LFEucHJvdG90eXBlLnBhcnNlU0lEPVEucHJvdG90eXBlLnBhcnNlVVNob3J0LFEucHJvdG90eXBlLnBhcnNlT2Zmc2V0MTY9US5wcm90b3R5cGUucGFyc2VVU2hvcnQsUS5wcm90b3R5cGUucGFyc2VTaG9ydD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGF0YS5nZXRJbnQxNih0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MixhfSxRLnByb3RvdHlwZS5wYXJzZUYyRG90MTQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRhdGEuZ2V0SW50MTYodGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCkvMTYzODQ7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIsYX0sUS5wcm90b3R5cGUucGFyc2VVTG9uZz1mdW5jdGlvbigpe3ZhciBhPUsodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpO3JldHVybiB0aGlzLnJlbGF0aXZlT2Zmc2V0Kz00LGF9LFEucHJvdG90eXBlLnBhcnNlT2Zmc2V0MzI9US5wcm90b3R5cGUucGFyc2VVTG9uZyxRLnByb3RvdHlwZS5wYXJzZUZpeGVkPWZ1bmN0aW9uKCl7dmFyIGE9TCh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTQsYX0sUS5wcm90b3R5cGUucGFyc2VTdHJpbmc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kYXRhLGM9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxkPVwiXCI7dGhpcy5yZWxhdGl2ZU9mZnNldCs9YTtmb3IodmFyIGU9MDtlPGE7ZSsrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYi5nZXRVaW50OChjK2UpKTtyZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VUYWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVN0cmluZyg0KX0sUS5wcm90b3R5cGUucGFyc2VMb25nRGF0ZVRpbWU9ZnVuY3Rpb24oKXt2YXIgYT1LKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0KzQpO3JldHVybiBhLT0yMDgyODQ0ODAwLHRoaXMucmVsYXRpdmVPZmZzZXQrPTgsYX0sUS5wcm90b3R5cGUucGFyc2VWZXJzaW9uPWZ1bmN0aW9uKGEpe3ZhciBiPUkodGhpcy5kYXRhLHRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQpLGM9SSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCsyKTtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9NCx2b2lkIDA9PT1hJiYoYT00MDk2KSxiK2MvYS8xMH0sUS5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPTEpLHRoaXMucmVsYXRpdmVPZmZzZXQrPUplW2FdKmJ9LFEucHJvdG90eXBlLnBhcnNlVUxvbmdMaXN0PWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPXRoaXMucGFyc2VVTG9uZygpKTtmb3IodmFyIGI9bmV3IEFycmF5KGEpLGM9dGhpcy5kYXRhLGQ9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxlPTA7ZTxhO2UrKyliW2VdPWMuZ2V0VWludDMyKGQpLGQrPTQ7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTQqYSxifSxRLnByb3RvdHlwZS5wYXJzZU9mZnNldDE2TGlzdD1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydExpc3Q9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9dGhpcy5wYXJzZVVTaG9ydCgpKTtmb3IodmFyIGI9bmV3IEFycmF5KGEpLGM9dGhpcy5kYXRhLGQ9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxlPTA7ZTxhO2UrKyliW2VdPWMuZ2V0VWludDE2KGQpLGQrPTI7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPTIqYSxifSxRLnByb3RvdHlwZS5wYXJzZVNob3J0TGlzdD1mdW5jdGlvbihhKXtmb3IodmFyIGI9bmV3IEFycmF5KGEpLGM9dGhpcy5kYXRhLGQ9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxlPTA7ZTxhO2UrKyliW2VdPWMuZ2V0SW50MTYoZCksZCs9MjtyZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldCs9MiphLGJ9LFEucHJvdG90eXBlLnBhcnNlQnl0ZUxpc3Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW5ldyBBcnJheShhKSxjPXRoaXMuZGF0YSxkPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsZT0wO2U8YTtlKyspYltlXT1jLmdldFVpbnQ4KGQrKyk7cmV0dXJuIHRoaXMucmVsYXRpdmVPZmZzZXQrPWEsYn0sUS5wcm90b3R5cGUucGFyc2VMaXN0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztifHwoYj1hLGE9dGhpcy5wYXJzZVVTaG9ydCgpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9MDtlPGE7ZSsrKWRbZV09Yi5jYWxsKGMpO3JldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZUxpc3QzMj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Ynx8KGI9YSxhPXRoaXMucGFyc2VVTG9uZygpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9MDtlPGE7ZSsrKWRbZV09Yi5jYWxsKGMpO3JldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVJlY29yZExpc3Q9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2J8fChiPWEsYT10aGlzLnBhcnNlVVNob3J0KCkpO2Zvcih2YXIgZD1uZXcgQXJyYXkoYSksZT1PYmplY3Qua2V5cyhiKSxmPTA7ZjxhO2YrKyl7Zm9yKHZhciBnPXt9LGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGk9ZVtoXSxqPWJbaV07Z1tpXT1qLmNhbGwoYyl9ZFtmXT1nfXJldHVybiBkfSxRLnByb3RvdHlwZS5wYXJzZVJlY29yZExpc3QzMj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Ynx8KGI9YSxhPXRoaXMucGFyc2VVTG9uZygpKTtmb3IodmFyIGQ9bmV3IEFycmF5KGEpLGU9T2JqZWN0LmtleXMoYiksZj0wO2Y8YTtmKyspe2Zvcih2YXIgZz17fSxoPTA7aDxlLmxlbmd0aDtoKyspe3ZhciBpPWVbaF0saj1iW2ldO2dbaV09ai5jYWxsKGMpfWRbZl09Z31yZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VTdHJ1Y3Q9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhKXJldHVybiBhLmNhbGwodGhpcyk7Zm9yKHZhciBjPU9iamVjdC5rZXlzKGEpLGQ9e30sZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZj1jW2VdLGc9YVtmXTtkW2ZdPWcuY2FsbChiKX1yZXR1cm4gZH0sUS5wcm90b3R5cGUucGFyc2VWYWx1ZVJlY29yZD1mdW5jdGlvbihhKXtpZih2b2lkIDA9PT1hJiYoYT10aGlzLnBhcnNlVVNob3J0KCkpLDAhPT1hKXt2YXIgYj17fTtyZXR1cm4gMSZhJiYoYi54UGxhY2VtZW50PXRoaXMucGFyc2VTaG9ydCgpKSwyJmEmJihiLnlQbGFjZW1lbnQ9dGhpcy5wYXJzZVNob3J0KCkpLDQmYSYmKGIueEFkdmFuY2U9dGhpcy5wYXJzZVNob3J0KCkpLDgmYSYmKGIueUFkdmFuY2U9dGhpcy5wYXJzZVNob3J0KCkpLDE2JmEmJihiLnhQbGFEZXZpY2U9dm9pZCAwLHRoaXMucGFyc2VTaG9ydCgpKSwzMiZhJiYoYi55UGxhRGV2aWNlPXZvaWQgMCx0aGlzLnBhcnNlU2hvcnQoKSksNjQmYSYmKGIueEFkdkRldmljZT12b2lkIDAsdGhpcy5wYXJzZVNob3J0KCkpLDEyOCZhJiYoYi55QWR2RGV2aWNlPXZvaWQgMCx0aGlzLnBhcnNlU2hvcnQoKSksYn19LFEucHJvdG90eXBlLnBhcnNlVmFsdWVSZWNvcmRMaXN0PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMsYj10aGlzLnBhcnNlVVNob3J0KCksYz10aGlzLnBhcnNlVVNob3J0KCksZD1uZXcgQXJyYXkoYyksZT0wO2U8YztlKyspZFtlXT1hLnBhcnNlVmFsdWVSZWNvcmQoYik7cmV0dXJuIGR9LFEucHJvdG90eXBlLnBhcnNlUG9pbnRlcj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnBhcnNlT2Zmc2V0MTYoKTtpZihiPjApcmV0dXJuIG5ldyBRKHRoaXMuZGF0YSx0aGlzLm9mZnNldCtiKS5wYXJzZVN0cnVjdChhKX0sUS5wcm90b3R5cGUucGFyc2VQb2ludGVyMzI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wYXJzZU9mZnNldDMyKCk7aWYoYj4wKXJldHVybiBuZXcgUSh0aGlzLmRhdGEsdGhpcy5vZmZzZXQrYikucGFyc2VTdHJ1Y3QoYSl9LFEucHJvdG90eXBlLnBhcnNlTGlzdE9mTGlzdHM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMsYz10aGlzLnBhcnNlT2Zmc2V0MTZMaXN0KCksZD1jLmxlbmd0aCxlPXRoaXMucmVsYXRpdmVPZmZzZXQsZj1uZXcgQXJyYXkoZCksZz0wO2c8ZDtnKyspe3ZhciBoPWNbZ107aWYoMCE9PWgpaWYoYi5yZWxhdGl2ZU9mZnNldD1oLGEpe2Zvcih2YXIgaT1iLnBhcnNlT2Zmc2V0MTZMaXN0KCksaj1uZXcgQXJyYXkoaS5sZW5ndGgpLGs9MDtrPGkubGVuZ3RoO2srKyliLnJlbGF0aXZlT2Zmc2V0PWgraVtrXSxqW2tdPWEuY2FsbChiKTtmW2ddPWp9ZWxzZSBmW2ddPWIucGFyc2VVU2hvcnRMaXN0KCk7ZWxzZSBmW2ddPXZvaWQgMH1yZXR1cm4gdGhpcy5yZWxhdGl2ZU9mZnNldD1lLGZ9LFEucHJvdG90eXBlLnBhcnNlQ292ZXJhZ2U9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxjPXRoaXMucGFyc2VVU2hvcnQoKSxkPXRoaXMucGFyc2VVU2hvcnQoKTtpZigxPT09YylyZXR1cm57Zm9ybWF0OjEsZ2x5cGhzOnRoaXMucGFyc2VVU2hvcnRMaXN0KGQpfTtpZigyPT09Yyl7Zm9yKHZhciBlPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyllW2ZdPXtzdGFydDphLnBhcnNlVVNob3J0KCksZW5kOmEucGFyc2VVU2hvcnQoKSxpbmRleDphLnBhcnNlVVNob3J0KCl9O3JldHVybntmb3JtYXQ6MixyYW5nZXM6ZX19dGhyb3cgbmV3IEVycm9yKFwiMHhcIitiLnRvU3RyaW5nKDE2KStcIjogQ292ZXJhZ2UgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKX0sUS5wcm90b3R5cGUucGFyc2VDbGFzc0RlZj1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWIpcmV0dXJue2Zvcm1hdDoxLHN0YXJ0R2x5cGg6dGhpcy5wYXJzZVVTaG9ydCgpLGNsYXNzZXM6dGhpcy5wYXJzZVVTaG9ydExpc3QoKX07aWYoMj09PWIpcmV0dXJue2Zvcm1hdDoyLHJhbmdlczp0aGlzLnBhcnNlUmVjb3JkTGlzdCh7c3RhcnQ6US51U2hvcnQsZW5kOlEudVNob3J0LGNsYXNzSWQ6US51U2hvcnR9KX07dGhyb3cgbmV3IEVycm9yKFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogQ2xhc3NEZWYgZm9ybWF0IG11c3QgYmUgMSBvciAyLlwiKX0sUS5saXN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VMaXN0KGEsYil9fSxRLmxpc3QzMj1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlTGlzdDMyKGEsYil9fSxRLnJlY29yZExpc3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVJlY29yZExpc3QoYSxiKX19LFEucmVjb3JkTGlzdDMyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyc2VSZWNvcmRMaXN0MzIoYSxiKX19LFEucG9pbnRlcj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoYSl9fSxRLnBvaW50ZXIzMj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIzMihhKX19LFEudGFnPVEucHJvdG90eXBlLnBhcnNlVGFnLFEuYnl0ZT1RLnByb3RvdHlwZS5wYXJzZUJ5dGUsUS51U2hvcnQ9US5vZmZzZXQxNj1RLnByb3RvdHlwZS5wYXJzZVVTaG9ydCxRLnVTaG9ydExpc3Q9US5wcm90b3R5cGUucGFyc2VVU2hvcnRMaXN0LFEudUxvbmc9US5vZmZzZXQzMj1RLnByb3RvdHlwZS5wYXJzZVVMb25nLFEudUxvbmdMaXN0PVEucHJvdG90eXBlLnBhcnNlVUxvbmdMaXN0LFEuc3RydWN0PVEucHJvdG90eXBlLnBhcnNlU3RydWN0LFEuY292ZXJhZ2U9US5wcm90b3R5cGUucGFyc2VDb3ZlcmFnZSxRLmNsYXNzRGVmPVEucHJvdG90eXBlLnBhcnNlQ2xhc3NEZWY7dmFyIEtlPXtyZXNlcnZlZDpRLnVTaG9ydCxyZXFGZWF0dXJlSW5kZXg6US51U2hvcnQsZmVhdHVyZUluZGV4ZXM6US51U2hvcnRMaXN0fTtRLnByb3RvdHlwZS5wYXJzZVNjcmlwdExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJzZVBvaW50ZXIoUS5yZWNvcmRMaXN0KHt0YWc6US50YWcsc2NyaXB0OlEucG9pbnRlcih7ZGVmYXVsdExhbmdTeXM6US5wb2ludGVyKEtlKSxsYW5nU3lzUmVjb3JkczpRLnJlY29yZExpc3Qoe3RhZzpRLnRhZyxsYW5nU3lzOlEucG9pbnRlcihLZSl9KX0pfSkpfHxbXX0sUS5wcm90b3R5cGUucGFyc2VGZWF0dXJlTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcihRLnJlY29yZExpc3Qoe3RhZzpRLnRhZyxmZWF0dXJlOlEucG9pbnRlcih7ZmVhdHVyZVBhcmFtczpRLm9mZnNldDE2LGxvb2t1cExpc3RJbmRleGVzOlEudVNob3J0TGlzdH0pfSkpfHxbXX0sUS5wcm90b3R5cGUucGFyc2VMb29rdXBMaXN0PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcihRLmxpc3QoUS5wb2ludGVyKGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5wYXJzZVVTaG9ydCgpO3hlLmFyZ3VtZW50KDE8PWImJmI8PTksXCJHUE9TL0dTVUIgbG9va3VwIHR5cGUgXCIrYitcIiB1bmtub3duLlwiKTt2YXIgYz10aGlzLnBhcnNlVVNob3J0KCksZD0xNiZjO3JldHVybntsb29rdXBUeXBlOmIsbG9va3VwRmxhZzpjLHN1YnRhYmxlczp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoYVtiXSkpLG1hcmtGaWx0ZXJpbmdTZXQ6ZD90aGlzLnBhcnNlVVNob3J0KCk6dm9pZCAwfX0pKSl8fFtdfSxRLnByb3RvdHlwZS5wYXJzZUZlYXR1cmVWYXJpYXRpb25zTGlzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnNlUG9pbnRlcjMyKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpLGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiB4ZS5hcmd1bWVudCgxPT09YSYmYjwxLFwiR1BPUy9HU1VCIGZlYXR1cmUgdmFyaWF0aW9ucyB0YWJsZSB1bmtub3duLlwiKSx0aGlzLnBhcnNlUmVjb3JkTGlzdDMyKHtjb25kaXRpb25TZXRPZmZzZXQ6US5vZmZzZXQzMixmZWF0dXJlVGFibGVTdWJzdGl0dXRpb25PZmZzZXQ6US5vZmZzZXQzMn0pfSl8fFtdfTt2YXIgTGU9e2dldEJ5dGU6SCxnZXRDYXJkODpILGdldFVTaG9ydDpJLGdldENhcmQxNjpJLGdldFNob3J0OkosZ2V0VUxvbmc6SyxnZXRGaXhlZDpMLGdldFRhZzpNLGdldE9mZnNldDpOLGdldEJ5dGVzOk8sYnl0ZXNUb1N0cmluZzpQLFBhcnNlcjpRfSxNZT17cGFyc2U6VCxtYWtlOld9LE5lPVtcIi5ub3RkZWZcIixcInNwYWNlXCIsXCJleGNsYW1cIixcInF1b3RlZGJsXCIsXCJudW1iZXJzaWduXCIsXCJkb2xsYXJcIixcInBlcmNlbnRcIixcImFtcGVyc2FuZFwiLFwicXVvdGVyaWdodFwiLFwicGFyZW5sZWZ0XCIsXCJwYXJlbnJpZ2h0XCIsXCJhc3Rlcmlza1wiLFwicGx1c1wiLFwiY29tbWFcIixcImh5cGhlblwiLFwicGVyaW9kXCIsXCJzbGFzaFwiLFwiemVyb1wiLFwib25lXCIsXCJ0d29cIixcInRocmVlXCIsXCJmb3VyXCIsXCJmaXZlXCIsXCJzaXhcIixcInNldmVuXCIsXCJlaWdodFwiLFwibmluZVwiLFwiY29sb25cIixcInNlbWljb2xvblwiLFwibGVzc1wiLFwiZXF1YWxcIixcImdyZWF0ZXJcIixcInF1ZXN0aW9uXCIsXCJhdFwiLFwiQVwiLFwiQlwiLFwiQ1wiLFwiRFwiLFwiRVwiLFwiRlwiLFwiR1wiLFwiSFwiLFwiSVwiLFwiSlwiLFwiS1wiLFwiTFwiLFwiTVwiLFwiTlwiLFwiT1wiLFwiUFwiLFwiUVwiLFwiUlwiLFwiU1wiLFwiVFwiLFwiVVwiLFwiVlwiLFwiV1wiLFwiWFwiLFwiWVwiLFwiWlwiLFwiYnJhY2tldGxlZnRcIixcImJhY2tzbGFzaFwiLFwiYnJhY2tldHJpZ2h0XCIsXCJhc2NpaWNpcmN1bVwiLFwidW5kZXJzY29yZVwiLFwicXVvdGVsZWZ0XCIsXCJhXCIsXCJiXCIsXCJjXCIsXCJkXCIsXCJlXCIsXCJmXCIsXCJnXCIsXCJoXCIsXCJpXCIsXCJqXCIsXCJrXCIsXCJsXCIsXCJtXCIsXCJuXCIsXCJvXCIsXCJwXCIsXCJxXCIsXCJyXCIsXCJzXCIsXCJ0XCIsXCJ1XCIsXCJ2XCIsXCJ3XCIsXCJ4XCIsXCJ5XCIsXCJ6XCIsXCJicmFjZWxlZnRcIixcImJhclwiLFwiYnJhY2VyaWdodFwiLFwiYXNjaWl0aWxkZVwiLFwiZXhjbGFtZG93blwiLFwiY2VudFwiLFwic3RlcmxpbmdcIixcImZyYWN0aW9uXCIsXCJ5ZW5cIixcImZsb3JpblwiLFwic2VjdGlvblwiLFwiY3VycmVuY3lcIixcInF1b3Rlc2luZ2xlXCIsXCJxdW90ZWRibGxlZnRcIixcImd1aWxsZW1vdGxlZnRcIixcImd1aWxzaW5nbGxlZnRcIixcImd1aWxzaW5nbHJpZ2h0XCIsXCJmaVwiLFwiZmxcIixcImVuZGFzaFwiLFwiZGFnZ2VyXCIsXCJkYWdnZXJkYmxcIixcInBlcmlvZGNlbnRlcmVkXCIsXCJwYXJhZ3JhcGhcIixcImJ1bGxldFwiLFwicXVvdGVzaW5nbGJhc2VcIixcInF1b3RlZGJsYmFzZVwiLFwicXVvdGVkYmxyaWdodFwiLFwiZ3VpbGxlbW90cmlnaHRcIixcImVsbGlwc2lzXCIsXCJwZXJ0aG91c2FuZFwiLFwicXVlc3Rpb25kb3duXCIsXCJncmF2ZVwiLFwiYWN1dGVcIixcImNpcmN1bWZsZXhcIixcInRpbGRlXCIsXCJtYWNyb25cIixcImJyZXZlXCIsXCJkb3RhY2NlbnRcIixcImRpZXJlc2lzXCIsXCJyaW5nXCIsXCJjZWRpbGxhXCIsXCJodW5nYXJ1bWxhdXRcIixcIm9nb25la1wiLFwiY2Fyb25cIixcImVtZGFzaFwiLFwiQUVcIixcIm9yZGZlbWluaW5lXCIsXCJMc2xhc2hcIixcIk9zbGFzaFwiLFwiT0VcIixcIm9yZG1hc2N1bGluZVwiLFwiYWVcIixcImRvdGxlc3NpXCIsXCJsc2xhc2hcIixcIm9zbGFzaFwiLFwib2VcIixcImdlcm1hbmRibHNcIixcIm9uZXN1cGVyaW9yXCIsXCJsb2dpY2Fsbm90XCIsXCJtdVwiLFwidHJhZGVtYXJrXCIsXCJFdGhcIixcIm9uZWhhbGZcIixcInBsdXNtaW51c1wiLFwiVGhvcm5cIixcIm9uZXF1YXJ0ZXJcIixcImRpdmlkZVwiLFwiYnJva2VuYmFyXCIsXCJkZWdyZWVcIixcInRob3JuXCIsXCJ0aHJlZXF1YXJ0ZXJzXCIsXCJ0d29zdXBlcmlvclwiLFwicmVnaXN0ZXJlZFwiLFwibWludXNcIixcImV0aFwiLFwibXVsdGlwbHlcIixcInRocmVlc3VwZXJpb3JcIixcImNvcHlyaWdodFwiLFwiQWFjdXRlXCIsXCJBY2lyY3VtZmxleFwiLFwiQWRpZXJlc2lzXCIsXCJBZ3JhdmVcIixcIkFyaW5nXCIsXCJBdGlsZGVcIixcIkNjZWRpbGxhXCIsXCJFYWN1dGVcIixcIkVjaXJjdW1mbGV4XCIsXCJFZGllcmVzaXNcIixcIkVncmF2ZVwiLFwiSWFjdXRlXCIsXCJJY2lyY3VtZmxleFwiLFwiSWRpZXJlc2lzXCIsXCJJZ3JhdmVcIixcIk50aWxkZVwiLFwiT2FjdXRlXCIsXCJPY2lyY3VtZmxleFwiLFwiT2RpZXJlc2lzXCIsXCJPZ3JhdmVcIixcIk90aWxkZVwiLFwiU2Nhcm9uXCIsXCJVYWN1dGVcIixcIlVjaXJjdW1mbGV4XCIsXCJVZGllcmVzaXNcIixcIlVncmF2ZVwiLFwiWWFjdXRlXCIsXCJZZGllcmVzaXNcIixcIlpjYXJvblwiLFwiYWFjdXRlXCIsXCJhY2lyY3VtZmxleFwiLFwiYWRpZXJlc2lzXCIsXCJhZ3JhdmVcIixcImFyaW5nXCIsXCJhdGlsZGVcIixcImNjZWRpbGxhXCIsXCJlYWN1dGVcIixcImVjaXJjdW1mbGV4XCIsXCJlZGllcmVzaXNcIixcImVncmF2ZVwiLFwiaWFjdXRlXCIsXCJpY2lyY3VtZmxleFwiLFwiaWRpZXJlc2lzXCIsXCJpZ3JhdmVcIixcIm50aWxkZVwiLFwib2FjdXRlXCIsXCJvY2lyY3VtZmxleFwiLFwib2RpZXJlc2lzXCIsXCJvZ3JhdmVcIixcIm90aWxkZVwiLFwic2Nhcm9uXCIsXCJ1YWN1dGVcIixcInVjaXJjdW1mbGV4XCIsXCJ1ZGllcmVzaXNcIixcInVncmF2ZVwiLFwieWFjdXRlXCIsXCJ5ZGllcmVzaXNcIixcInpjYXJvblwiLFwiZXhjbGFtc21hbGxcIixcIkh1bmdhcnVtbGF1dHNtYWxsXCIsXCJkb2xsYXJvbGRzdHlsZVwiLFwiZG9sbGFyc3VwZXJpb3JcIixcImFtcGVyc2FuZHNtYWxsXCIsXCJBY3V0ZXNtYWxsXCIsXCJwYXJlbmxlZnRzdXBlcmlvclwiLFwicGFyZW5yaWdodHN1cGVyaW9yXCIsXCIyNjYgZmZcIixcIm9uZWRvdGVubGVhZGVyXCIsXCJ6ZXJvb2xkc3R5bGVcIixcIm9uZW9sZHN0eWxlXCIsXCJ0d29vbGRzdHlsZVwiLFwidGhyZWVvbGRzdHlsZVwiLFwiZm91cm9sZHN0eWxlXCIsXCJmaXZlb2xkc3R5bGVcIixcInNpeG9sZHN0eWxlXCIsXCJzZXZlbm9sZHN0eWxlXCIsXCJlaWdodG9sZHN0eWxlXCIsXCJuaW5lb2xkc3R5bGVcIixcImNvbW1hc3VwZXJpb3JcIixcInRocmVlcXVhcnRlcnNlbWRhc2hcIixcInBlcmlvZHN1cGVyaW9yXCIsXCJxdWVzdGlvbnNtYWxsXCIsXCJhc3VwZXJpb3JcIixcImJzdXBlcmlvclwiLFwiY2VudHN1cGVyaW9yXCIsXCJkc3VwZXJpb3JcIixcImVzdXBlcmlvclwiLFwiaXN1cGVyaW9yXCIsXCJsc3VwZXJpb3JcIixcIm1zdXBlcmlvclwiLFwibnN1cGVyaW9yXCIsXCJvc3VwZXJpb3JcIixcInJzdXBlcmlvclwiLFwic3N1cGVyaW9yXCIsXCJ0c3VwZXJpb3JcIixcImZmXCIsXCJmZmlcIixcImZmbFwiLFwicGFyZW5sZWZ0aW5mZXJpb3JcIixcInBhcmVucmlnaHRpbmZlcmlvclwiLFwiQ2lyY3VtZmxleHNtYWxsXCIsXCJoeXBoZW5zdXBlcmlvclwiLFwiR3JhdmVzbWFsbFwiLFwiQXNtYWxsXCIsXCJCc21hbGxcIixcIkNzbWFsbFwiLFwiRHNtYWxsXCIsXCJFc21hbGxcIixcIkZzbWFsbFwiLFwiR3NtYWxsXCIsXCJIc21hbGxcIixcIklzbWFsbFwiLFwiSnNtYWxsXCIsXCJLc21hbGxcIixcIkxzbWFsbFwiLFwiTXNtYWxsXCIsXCJOc21hbGxcIixcIk9zbWFsbFwiLFwiUHNtYWxsXCIsXCJRc21hbGxcIixcIlJzbWFsbFwiLFwiU3NtYWxsXCIsXCJUc21hbGxcIixcIlVzbWFsbFwiLFwiVnNtYWxsXCIsXCJXc21hbGxcIixcIlhzbWFsbFwiLFwiWXNtYWxsXCIsXCJac21hbGxcIixcImNvbG9ubW9uZXRhcnlcIixcIm9uZWZpdHRlZFwiLFwicnVwaWFoXCIsXCJUaWxkZXNtYWxsXCIsXCJleGNsYW1kb3duc21hbGxcIixcImNlbnRvbGRzdHlsZVwiLFwiTHNsYXNoc21hbGxcIixcIlNjYXJvbnNtYWxsXCIsXCJaY2Fyb25zbWFsbFwiLFwiRGllcmVzaXNzbWFsbFwiLFwiQnJldmVzbWFsbFwiLFwiQ2Fyb25zbWFsbFwiLFwiRG90YWNjZW50c21hbGxcIixcIk1hY3JvbnNtYWxsXCIsXCJmaWd1cmVkYXNoXCIsXCJoeXBoZW5pbmZlcmlvclwiLFwiT2dvbmVrc21hbGxcIixcIlJpbmdzbWFsbFwiLFwiQ2VkaWxsYXNtYWxsXCIsXCJxdWVzdGlvbmRvd25zbWFsbFwiLFwib25lZWlnaHRoXCIsXCJ0aHJlZWVpZ2h0aHNcIixcImZpdmVlaWdodGhzXCIsXCJzZXZlbmVpZ2h0aHNcIixcIm9uZXRoaXJkXCIsXCJ0d290aGlyZHNcIixcInplcm9zdXBlcmlvclwiLFwiZm91cnN1cGVyaW9yXCIsXCJmaXZlc3VwZXJpb3JcIixcInNpeHN1cGVyaW9yXCIsXCJzZXZlbnN1cGVyaW9yXCIsXCJlaWdodHN1cGVyaW9yXCIsXCJuaW5lc3VwZXJpb3JcIixcInplcm9pbmZlcmlvclwiLFwib25laW5mZXJpb3JcIixcInR3b2luZmVyaW9yXCIsXCJ0aHJlZWluZmVyaW9yXCIsXCJmb3VyaW5mZXJpb3JcIixcImZpdmVpbmZlcmlvclwiLFwic2l4aW5mZXJpb3JcIixcInNldmVuaW5mZXJpb3JcIixcImVpZ2h0aW5mZXJpb3JcIixcIm5pbmVpbmZlcmlvclwiLFwiY2VudGluZmVyaW9yXCIsXCJkb2xsYXJpbmZlcmlvclwiLFwicGVyaW9kaW5mZXJpb3JcIixcImNvbW1haW5mZXJpb3JcIixcIkFncmF2ZXNtYWxsXCIsXCJBYWN1dGVzbWFsbFwiLFwiQWNpcmN1bWZsZXhzbWFsbFwiLFwiQXRpbGRlc21hbGxcIixcIkFkaWVyZXNpc3NtYWxsXCIsXCJBcmluZ3NtYWxsXCIsXCJBRXNtYWxsXCIsXCJDY2VkaWxsYXNtYWxsXCIsXCJFZ3JhdmVzbWFsbFwiLFwiRWFjdXRlc21hbGxcIixcIkVjaXJjdW1mbGV4c21hbGxcIixcIkVkaWVyZXNpc3NtYWxsXCIsXCJJZ3JhdmVzbWFsbFwiLFwiSWFjdXRlc21hbGxcIixcIkljaXJjdW1mbGV4c21hbGxcIixcIklkaWVyZXNpc3NtYWxsXCIsXCJFdGhzbWFsbFwiLFwiTnRpbGRlc21hbGxcIixcIk9ncmF2ZXNtYWxsXCIsXCJPYWN1dGVzbWFsbFwiLFwiT2NpcmN1bWZsZXhzbWFsbFwiLFwiT3RpbGRlc21hbGxcIixcIk9kaWVyZXNpc3NtYWxsXCIsXCJPRXNtYWxsXCIsXCJPc2xhc2hzbWFsbFwiLFwiVWdyYXZlc21hbGxcIixcIlVhY3V0ZXNtYWxsXCIsXCJVY2lyY3VtZmxleHNtYWxsXCIsXCJVZGllcmVzaXNzbWFsbFwiLFwiWWFjdXRlc21hbGxcIixcIlRob3Juc21hbGxcIixcIllkaWVyZXNpc3NtYWxsXCIsXCIwMDEuMDAwXCIsXCIwMDEuMDAxXCIsXCIwMDEuMDAyXCIsXCIwMDEuMDAzXCIsXCJCbGFja1wiLFwiQm9sZFwiLFwiQm9va1wiLFwiTGlnaHRcIixcIk1lZGl1bVwiLFwiUmVndWxhclwiLFwiUm9tYW5cIixcIlNlbWlib2xkXCJdLE9lPVtcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJzcGFjZVwiLFwiZXhjbGFtXCIsXCJxdW90ZWRibFwiLFwibnVtYmVyc2lnblwiLFwiZG9sbGFyXCIsXCJwZXJjZW50XCIsXCJhbXBlcnNhbmRcIixcInF1b3RlcmlnaHRcIixcInBhcmVubGVmdFwiLFwicGFyZW5yaWdodFwiLFwiYXN0ZXJpc2tcIixcInBsdXNcIixcImNvbW1hXCIsXCJoeXBoZW5cIixcInBlcmlvZFwiLFwic2xhc2hcIixcInplcm9cIixcIm9uZVwiLFwidHdvXCIsXCJ0aHJlZVwiLFwiZm91clwiLFwiZml2ZVwiLFwic2l4XCIsXCJzZXZlblwiLFwiZWlnaHRcIixcIm5pbmVcIixcImNvbG9uXCIsXCJzZW1pY29sb25cIixcImxlc3NcIixcImVxdWFsXCIsXCJncmVhdGVyXCIsXCJxdWVzdGlvblwiLFwiYXRcIixcIkFcIixcIkJcIixcIkNcIixcIkRcIixcIkVcIixcIkZcIixcIkdcIixcIkhcIixcIklcIixcIkpcIixcIktcIixcIkxcIixcIk1cIixcIk5cIixcIk9cIixcIlBcIixcIlFcIixcIlJcIixcIlNcIixcIlRcIixcIlVcIixcIlZcIixcIldcIixcIlhcIixcIllcIixcIlpcIixcImJyYWNrZXRsZWZ0XCIsXCJiYWNrc2xhc2hcIixcImJyYWNrZXRyaWdodFwiLFwiYXNjaWljaXJjdW1cIixcInVuZGVyc2NvcmVcIixcInF1b3RlbGVmdFwiLFwiYVwiLFwiYlwiLFwiY1wiLFwiZFwiLFwiZVwiLFwiZlwiLFwiZ1wiLFwiaFwiLFwiaVwiLFwialwiLFwia1wiLFwibFwiLFwibVwiLFwiblwiLFwib1wiLFwicFwiLFwicVwiLFwiclwiLFwic1wiLFwidFwiLFwidVwiLFwidlwiLFwid1wiLFwieFwiLFwieVwiLFwielwiLFwiYnJhY2VsZWZ0XCIsXCJiYXJcIixcImJyYWNlcmlnaHRcIixcImFzY2lpdGlsZGVcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiZXhjbGFtZG93blwiLFwiY2VudFwiLFwic3RlcmxpbmdcIixcImZyYWN0aW9uXCIsXCJ5ZW5cIixcImZsb3JpblwiLFwic2VjdGlvblwiLFwiY3VycmVuY3lcIixcInF1b3Rlc2luZ2xlXCIsXCJxdW90ZWRibGxlZnRcIixcImd1aWxsZW1vdGxlZnRcIixcImd1aWxzaW5nbGxlZnRcIixcImd1aWxzaW5nbHJpZ2h0XCIsXCJmaVwiLFwiZmxcIixcIlwiLFwiZW5kYXNoXCIsXCJkYWdnZXJcIixcImRhZ2dlcmRibFwiLFwicGVyaW9kY2VudGVyZWRcIixcIlwiLFwicGFyYWdyYXBoXCIsXCJidWxsZXRcIixcInF1b3Rlc2luZ2xiYXNlXCIsXCJxdW90ZWRibGJhc2VcIixcInF1b3RlZGJscmlnaHRcIixcImd1aWxsZW1vdHJpZ2h0XCIsXCJlbGxpcHNpc1wiLFwicGVydGhvdXNhbmRcIixcIlwiLFwicXVlc3Rpb25kb3duXCIsXCJcIixcImdyYXZlXCIsXCJhY3V0ZVwiLFwiY2lyY3VtZmxleFwiLFwidGlsZGVcIixcIm1hY3JvblwiLFwiYnJldmVcIixcImRvdGFjY2VudFwiLFwiZGllcmVzaXNcIixcIlwiLFwicmluZ1wiLFwiY2VkaWxsYVwiLFwiXCIsXCJodW5nYXJ1bWxhdXRcIixcIm9nb25la1wiLFwiY2Fyb25cIixcImVtZGFzaFwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJBRVwiLFwiXCIsXCJvcmRmZW1pbmluZVwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJMc2xhc2hcIixcIk9zbGFzaFwiLFwiT0VcIixcIm9yZG1hc2N1bGluZVwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcImFlXCIsXCJcIixcIlwiLFwiXCIsXCJkb3RsZXNzaVwiLFwiXCIsXCJcIixcImxzbGFzaFwiLFwib3NsYXNoXCIsXCJvZVwiLFwiZ2VybWFuZGJsc1wiXSxQZT1bXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwic3BhY2VcIixcImV4Y2xhbXNtYWxsXCIsXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLFwiXCIsXCJkb2xsYXJvbGRzdHlsZVwiLFwiZG9sbGFyc3VwZXJpb3JcIixcImFtcGVyc2FuZHNtYWxsXCIsXCJBY3V0ZXNtYWxsXCIsXCJwYXJlbmxlZnRzdXBlcmlvclwiLFwicGFyZW5yaWdodHN1cGVyaW9yXCIsXCJ0d29kb3RlbmxlYWRlclwiLFwib25lZG90ZW5sZWFkZXJcIixcImNvbW1hXCIsXCJoeXBoZW5cIixcInBlcmlvZFwiLFwiZnJhY3Rpb25cIixcInplcm9vbGRzdHlsZVwiLFwib25lb2xkc3R5bGVcIixcInR3b29sZHN0eWxlXCIsXCJ0aHJlZW9sZHN0eWxlXCIsXCJmb3Vyb2xkc3R5bGVcIixcImZpdmVvbGRzdHlsZVwiLFwic2l4b2xkc3R5bGVcIixcInNldmVub2xkc3R5bGVcIixcImVpZ2h0b2xkc3R5bGVcIixcIm5pbmVvbGRzdHlsZVwiLFwiY29sb25cIixcInNlbWljb2xvblwiLFwiY29tbWFzdXBlcmlvclwiLFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLFwicGVyaW9kc3VwZXJpb3JcIixcInF1ZXN0aW9uc21hbGxcIixcIlwiLFwiYXN1cGVyaW9yXCIsXCJic3VwZXJpb3JcIixcImNlbnRzdXBlcmlvclwiLFwiZHN1cGVyaW9yXCIsXCJlc3VwZXJpb3JcIixcIlwiLFwiXCIsXCJpc3VwZXJpb3JcIixcIlwiLFwiXCIsXCJsc3VwZXJpb3JcIixcIm1zdXBlcmlvclwiLFwibnN1cGVyaW9yXCIsXCJvc3VwZXJpb3JcIixcIlwiLFwiXCIsXCJyc3VwZXJpb3JcIixcInNzdXBlcmlvclwiLFwidHN1cGVyaW9yXCIsXCJcIixcImZmXCIsXCJmaVwiLFwiZmxcIixcImZmaVwiLFwiZmZsXCIsXCJwYXJlbmxlZnRpbmZlcmlvclwiLFwiXCIsXCJwYXJlbnJpZ2h0aW5mZXJpb3JcIixcIkNpcmN1bWZsZXhzbWFsbFwiLFwiaHlwaGVuc3VwZXJpb3JcIixcIkdyYXZlc21hbGxcIixcIkFzbWFsbFwiLFwiQnNtYWxsXCIsXCJDc21hbGxcIixcIkRzbWFsbFwiLFwiRXNtYWxsXCIsXCJGc21hbGxcIixcIkdzbWFsbFwiLFwiSHNtYWxsXCIsXCJJc21hbGxcIixcIkpzbWFsbFwiLFwiS3NtYWxsXCIsXCJMc21hbGxcIixcIk1zbWFsbFwiLFwiTnNtYWxsXCIsXCJPc21hbGxcIixcIlBzbWFsbFwiLFwiUXNtYWxsXCIsXCJSc21hbGxcIixcIlNzbWFsbFwiLFwiVHNtYWxsXCIsXCJVc21hbGxcIixcIlZzbWFsbFwiLFwiV3NtYWxsXCIsXCJYc21hbGxcIixcIllzbWFsbFwiLFwiWnNtYWxsXCIsXCJjb2xvbm1vbmV0YXJ5XCIsXCJvbmVmaXR0ZWRcIixcInJ1cGlhaFwiLFwiVGlsZGVzbWFsbFwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJleGNsYW1kb3duc21hbGxcIixcImNlbnRvbGRzdHlsZVwiLFwiTHNsYXNoc21hbGxcIixcIlwiLFwiXCIsXCJTY2Fyb25zbWFsbFwiLFwiWmNhcm9uc21hbGxcIixcIkRpZXJlc2lzc21hbGxcIixcIkJyZXZlc21hbGxcIixcIkNhcm9uc21hbGxcIixcIlwiLFwiRG90YWNjZW50c21hbGxcIixcIlwiLFwiXCIsXCJNYWNyb25zbWFsbFwiLFwiXCIsXCJcIixcImZpZ3VyZWRhc2hcIixcImh5cGhlbmluZmVyaW9yXCIsXCJcIixcIlwiLFwiT2dvbmVrc21hbGxcIixcIlJpbmdzbWFsbFwiLFwiQ2VkaWxsYXNtYWxsXCIsXCJcIixcIlwiLFwiXCIsXCJvbmVxdWFydGVyXCIsXCJvbmVoYWxmXCIsXCJ0aHJlZXF1YXJ0ZXJzXCIsXCJxdWVzdGlvbmRvd25zbWFsbFwiLFwib25lZWlnaHRoXCIsXCJ0aHJlZWVpZ2h0aHNcIixcImZpdmVlaWdodGhzXCIsXCJzZXZlbmVpZ2h0aHNcIixcIm9uZXRoaXJkXCIsXCJ0d290aGlyZHNcIixcIlwiLFwiXCIsXCJ6ZXJvc3VwZXJpb3JcIixcIm9uZXN1cGVyaW9yXCIsXCJ0d29zdXBlcmlvclwiLFwidGhyZWVzdXBlcmlvclwiLFwiZm91cnN1cGVyaW9yXCIsXCJmaXZlc3VwZXJpb3JcIixcInNpeHN1cGVyaW9yXCIsXCJzZXZlbnN1cGVyaW9yXCIsXCJlaWdodHN1cGVyaW9yXCIsXCJuaW5lc3VwZXJpb3JcIixcInplcm9pbmZlcmlvclwiLFwib25laW5mZXJpb3JcIixcInR3b2luZmVyaW9yXCIsXCJ0aHJlZWluZmVyaW9yXCIsXCJmb3VyaW5mZXJpb3JcIixcImZpdmVpbmZlcmlvclwiLFwic2l4aW5mZXJpb3JcIixcInNldmVuaW5mZXJpb3JcIixcImVpZ2h0aW5mZXJpb3JcIixcIm5pbmVpbmZlcmlvclwiLFwiY2VudGluZmVyaW9yXCIsXCJkb2xsYXJpbmZlcmlvclwiLFwicGVyaW9kaW5mZXJpb3JcIixcImNvbW1haW5mZXJpb3JcIixcIkFncmF2ZXNtYWxsXCIsXCJBYWN1dGVzbWFsbFwiLFwiQWNpcmN1bWZsZXhzbWFsbFwiLFwiQXRpbGRlc21hbGxcIixcIkFkaWVyZXNpc3NtYWxsXCIsXCJBcmluZ3NtYWxsXCIsXCJBRXNtYWxsXCIsXCJDY2VkaWxsYXNtYWxsXCIsXCJFZ3JhdmVzbWFsbFwiLFwiRWFjdXRlc21hbGxcIixcIkVjaXJjdW1mbGV4c21hbGxcIixcIkVkaWVyZXNpc3NtYWxsXCIsXCJJZ3JhdmVzbWFsbFwiLFwiSWFjdXRlc21hbGxcIixcIkljaXJjdW1mbGV4c21hbGxcIixcIklkaWVyZXNpc3NtYWxsXCIsXCJFdGhzbWFsbFwiLFwiTnRpbGRlc21hbGxcIixcIk9ncmF2ZXNtYWxsXCIsXCJPYWN1dGVzbWFsbFwiLFwiT2NpcmN1bWZsZXhzbWFsbFwiLFwiT3RpbGRlc21hbGxcIixcIk9kaWVyZXNpc3NtYWxsXCIsXCJPRXNtYWxsXCIsXCJPc2xhc2hzbWFsbFwiLFwiVWdyYXZlc21hbGxcIixcIlVhY3V0ZXNtYWxsXCIsXCJVY2lyY3VtZmxleHNtYWxsXCIsXCJVZGllcmVzaXNzbWFsbFwiLFwiWWFjdXRlc21hbGxcIixcIlRob3Juc21hbGxcIixcIllkaWVyZXNpc3NtYWxsXCJdLFFlPVtcIi5ub3RkZWZcIixcIi5udWxsXCIsXCJub25tYXJraW5ncmV0dXJuXCIsXCJzcGFjZVwiLFwiZXhjbGFtXCIsXCJxdW90ZWRibFwiLFwibnVtYmVyc2lnblwiLFwiZG9sbGFyXCIsXCJwZXJjZW50XCIsXCJhbXBlcnNhbmRcIixcInF1b3Rlc2luZ2xlXCIsXCJwYXJlbmxlZnRcIixcInBhcmVucmlnaHRcIixcImFzdGVyaXNrXCIsXCJwbHVzXCIsXCJjb21tYVwiLFwiaHlwaGVuXCIsXCJwZXJpb2RcIixcInNsYXNoXCIsXCJ6ZXJvXCIsXCJvbmVcIixcInR3b1wiLFwidGhyZWVcIixcImZvdXJcIixcImZpdmVcIixcInNpeFwiLFwic2V2ZW5cIixcImVpZ2h0XCIsXCJuaW5lXCIsXCJjb2xvblwiLFwic2VtaWNvbG9uXCIsXCJsZXNzXCIsXCJlcXVhbFwiLFwiZ3JlYXRlclwiLFwicXVlc3Rpb25cIixcImF0XCIsXCJBXCIsXCJCXCIsXCJDXCIsXCJEXCIsXCJFXCIsXCJGXCIsXCJHXCIsXCJIXCIsXCJJXCIsXCJKXCIsXCJLXCIsXCJMXCIsXCJNXCIsXCJOXCIsXCJPXCIsXCJQXCIsXCJRXCIsXCJSXCIsXCJTXCIsXCJUXCIsXCJVXCIsXCJWXCIsXCJXXCIsXCJYXCIsXCJZXCIsXCJaXCIsXCJicmFja2V0bGVmdFwiLFwiYmFja3NsYXNoXCIsXCJicmFja2V0cmlnaHRcIixcImFzY2lpY2lyY3VtXCIsXCJ1bmRlcnNjb3JlXCIsXCJncmF2ZVwiLFwiYVwiLFwiYlwiLFwiY1wiLFwiZFwiLFwiZVwiLFwiZlwiLFwiZ1wiLFwiaFwiLFwiaVwiLFwialwiLFwia1wiLFwibFwiLFwibVwiLFwiblwiLFwib1wiLFwicFwiLFwicVwiLFwiclwiLFwic1wiLFwidFwiLFwidVwiLFwidlwiLFwid1wiLFwieFwiLFwieVwiLFwielwiLFwiYnJhY2VsZWZ0XCIsXCJiYXJcIixcImJyYWNlcmlnaHRcIixcImFzY2lpdGlsZGVcIixcIkFkaWVyZXNpc1wiLFwiQXJpbmdcIixcIkNjZWRpbGxhXCIsXCJFYWN1dGVcIixcIk50aWxkZVwiLFwiT2RpZXJlc2lzXCIsXCJVZGllcmVzaXNcIixcImFhY3V0ZVwiLFwiYWdyYXZlXCIsXCJhY2lyY3VtZmxleFwiLFwiYWRpZXJlc2lzXCIsXCJhdGlsZGVcIixcImFyaW5nXCIsXCJjY2VkaWxsYVwiLFwiZWFjdXRlXCIsXCJlZ3JhdmVcIixcImVjaXJjdW1mbGV4XCIsXCJlZGllcmVzaXNcIixcImlhY3V0ZVwiLFwiaWdyYXZlXCIsXCJpY2lyY3VtZmxleFwiLFwiaWRpZXJlc2lzXCIsXCJudGlsZGVcIixcIm9hY3V0ZVwiLFwib2dyYXZlXCIsXCJvY2lyY3VtZmxleFwiLFwib2RpZXJlc2lzXCIsXCJvdGlsZGVcIixcInVhY3V0ZVwiLFwidWdyYXZlXCIsXCJ1Y2lyY3VtZmxleFwiLFwidWRpZXJlc2lzXCIsXCJkYWdnZXJcIixcImRlZ3JlZVwiLFwiY2VudFwiLFwic3RlcmxpbmdcIixcInNlY3Rpb25cIixcImJ1bGxldFwiLFwicGFyYWdyYXBoXCIsXCJnZXJtYW5kYmxzXCIsXCJyZWdpc3RlcmVkXCIsXCJjb3B5cmlnaHRcIixcInRyYWRlbWFya1wiLFwiYWN1dGVcIixcImRpZXJlc2lzXCIsXCJub3RlcXVhbFwiLFwiQUVcIixcIk9zbGFzaFwiLFwiaW5maW5pdHlcIixcInBsdXNtaW51c1wiLFwibGVzc2VxdWFsXCIsXCJncmVhdGVyZXF1YWxcIixcInllblwiLFwibXVcIixcInBhcnRpYWxkaWZmXCIsXCJzdW1tYXRpb25cIixcInByb2R1Y3RcIixcInBpXCIsXCJpbnRlZ3JhbFwiLFwib3JkZmVtaW5pbmVcIixcIm9yZG1hc2N1bGluZVwiLFwiT21lZ2FcIixcImFlXCIsXCJvc2xhc2hcIixcInF1ZXN0aW9uZG93blwiLFwiZXhjbGFtZG93blwiLFwibG9naWNhbG5vdFwiLFwicmFkaWNhbFwiLFwiZmxvcmluXCIsXCJhcHByb3hlcXVhbFwiLFwiRGVsdGFcIixcImd1aWxsZW1vdGxlZnRcIixcImd1aWxsZW1vdHJpZ2h0XCIsXCJlbGxpcHNpc1wiLFwibm9uYnJlYWtpbmdzcGFjZVwiLFwiQWdyYXZlXCIsXCJBdGlsZGVcIixcIk90aWxkZVwiLFwiT0VcIixcIm9lXCIsXCJlbmRhc2hcIixcImVtZGFzaFwiLFwicXVvdGVkYmxsZWZ0XCIsXCJxdW90ZWRibHJpZ2h0XCIsXCJxdW90ZWxlZnRcIixcInF1b3RlcmlnaHRcIixcImRpdmlkZVwiLFwibG96ZW5nZVwiLFwieWRpZXJlc2lzXCIsXCJZZGllcmVzaXNcIixcImZyYWN0aW9uXCIsXCJjdXJyZW5jeVwiLFwiZ3VpbHNpbmdsbGVmdFwiLFwiZ3VpbHNpbmdscmlnaHRcIixcImZpXCIsXCJmbFwiLFwiZGFnZ2VyZGJsXCIsXCJwZXJpb2RjZW50ZXJlZFwiLFwicXVvdGVzaW5nbGJhc2VcIixcInF1b3RlZGJsYmFzZVwiLFwicGVydGhvdXNhbmRcIixcIkFjaXJjdW1mbGV4XCIsXCJFY2lyY3VtZmxleFwiLFwiQWFjdXRlXCIsXCJFZGllcmVzaXNcIixcIkVncmF2ZVwiLFwiSWFjdXRlXCIsXCJJY2lyY3VtZmxleFwiLFwiSWRpZXJlc2lzXCIsXCJJZ3JhdmVcIixcIk9hY3V0ZVwiLFwiT2NpcmN1bWZsZXhcIixcImFwcGxlXCIsXCJPZ3JhdmVcIixcIlVhY3V0ZVwiLFwiVWNpcmN1bWZsZXhcIixcIlVncmF2ZVwiLFwiZG90bGVzc2lcIixcImNpcmN1bWZsZXhcIixcInRpbGRlXCIsXCJtYWNyb25cIixcImJyZXZlXCIsXCJkb3RhY2NlbnRcIixcInJpbmdcIixcImNlZGlsbGFcIixcImh1bmdhcnVtbGF1dFwiLFwib2dvbmVrXCIsXCJjYXJvblwiLFwiTHNsYXNoXCIsXCJsc2xhc2hcIixcIlNjYXJvblwiLFwic2Nhcm9uXCIsXCJaY2Fyb25cIixcInpjYXJvblwiLFwiYnJva2VuYmFyXCIsXCJFdGhcIixcImV0aFwiLFwiWWFjdXRlXCIsXCJ5YWN1dGVcIixcIlRob3JuXCIsXCJ0aG9yblwiLFwibWludXNcIixcIm11bHRpcGx5XCIsXCJvbmVzdXBlcmlvclwiLFwidHdvc3VwZXJpb3JcIixcInRocmVlc3VwZXJpb3JcIixcIm9uZWhhbGZcIixcIm9uZXF1YXJ0ZXJcIixcInRocmVlcXVhcnRlcnNcIixcImZyYW5jXCIsXCJHYnJldmVcIixcImdicmV2ZVwiLFwiSWRvdGFjY2VudFwiLFwiU2NlZGlsbGFcIixcInNjZWRpbGxhXCIsXCJDYWN1dGVcIixcImNhY3V0ZVwiLFwiQ2Nhcm9uXCIsXCJjY2Fyb25cIixcImRjcm9hdFwiXTtYLnByb3RvdHlwZS5jaGFyVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3ZhciBiPWEuY29kZVBvaW50QXQoMCksYz10aGlzLmZvbnQuZ2x5cGhzO2lmKGMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKz0xKWZvcih2YXIgZT1jLmdldChkKSxmPTA7ZjxlLnVuaWNvZGVzLmxlbmd0aDtmKz0xKWlmKGUudW5pY29kZXNbZl09PT1iKXJldHVybiBkO3JldHVybiBudWxsfSxZLnByb3RvdHlwZS5jaGFyVG9HbHlwaEluZGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNtYXAuZ2x5cGhJbmRleE1hcFthLmNvZGVQb2ludEF0KDApXXx8MH0sWi5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXt2YXIgYj1hLmNvZGVQb2ludEF0KDApLGM9dGhpcy5lbmNvZGluZ1tiXTtyZXR1cm4gdGhpcy5jaGFyc2V0LmluZGV4T2YoYyl9LCQucHJvdG90eXBlLm5hbWVUb0dseXBoSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubmFtZXMuaW5kZXhPZihhKX0sJC5wcm90b3R5cGUuZ2x5cGhJbmRleFRvTmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5uYW1lc1thXX07dmFyIFJlPXtsaW5lOmFhfTtjYS5wcm90b3R5cGUuYmluZENvbnN0cnVjdG9yVmFsdWVzPWZ1bmN0aW9uKGEpe3RoaXMuaW5kZXg9YS5pbmRleHx8MCx0aGlzLm5hbWU9YS5uYW1lfHxudWxsLHRoaXMudW5pY29kZT1hLnVuaWNvZGV8fHZvaWQgMCx0aGlzLnVuaWNvZGVzPWEudW5pY29kZXN8fHZvaWQgMCE9PWEudW5pY29kZT9bYS51bmljb2RlXTpbXSxhLnhNaW4mJih0aGlzLnhNaW49YS54TWluKSxhLnlNaW4mJih0aGlzLnlNaW49YS55TWluKSxhLnhNYXgmJih0aGlzLnhNYXg9YS54TWF4KSxhLnlNYXgmJih0aGlzLnlNYXg9YS55TWF4KSxhLmFkdmFuY2VXaWR0aCYmKHRoaXMuYWR2YW5jZVdpZHRoPWEuYWR2YW5jZVdpZHRoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInBhdGhcIixiYSh0aGlzLGEucGF0aCkpfSxjYS5wcm90b3R5cGUuYWRkVW5pY29kZT1mdW5jdGlvbihhKXswPT09dGhpcy51bmljb2Rlcy5sZW5ndGgmJih0aGlzLnVuaWNvZGU9YSksdGhpcy51bmljb2Rlcy5wdXNoKGEpfSxjYS5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoLmdldEJvdW5kaW5nQm94KCl9LGNhLnByb3RvdHlwZS5nZXRQYXRoPWZ1bmN0aW9uKGEsYixjLGQsZSl7YT12b2lkIDAhPT1hP2E6MCxiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjcyO3ZhciBmLGc7ZHx8KGQ9e30pO3ZhciBoPWQueFNjYWxlLGk9ZC55U2NhbGU7aWYoZC5oaW50aW5nJiZlJiZlLmhpbnRpbmcmJihnPXRoaXMucGF0aCYmZS5oaW50aW5nLmV4ZWModGhpcyxjKSksZylmPWUuaGludGluZy5nZXRDb21tYW5kcyhnKSxhPU1hdGgucm91bmQoYSksYj1NYXRoLnJvdW5kKGIpLGg9aT0xO2Vsc2V7Zj10aGlzLnBhdGguY29tbWFuZHM7dmFyIGo9MS90aGlzLnBhdGgudW5pdHNQZXJFbSpjO3ZvaWQgMD09PWgmJihoPWopLHZvaWQgMD09PWkmJihpPWopfWZvcih2YXIgaz1uZXcgcixsPTA7bDxmLmxlbmd0aDtsKz0xKXt2YXIgbT1mW2xdO1wiTVwiPT09bS50eXBlP2subW92ZVRvKGErbS54KmgsYistbS55KmkpOlwiTFwiPT09bS50eXBlP2subGluZVRvKGErbS54KmgsYistbS55KmkpOlwiUVwiPT09bS50eXBlP2sucXVhZHJhdGljQ3VydmVUbyhhK20ueDEqaCxiKy1tLnkxKmksYSttLngqaCxiKy1tLnkqaSk6XCJDXCI9PT1tLnR5cGU/ay5jdXJ2ZVRvKGErbS54MSpoLGIrLW0ueTEqaSxhK20ueDIqaCxiKy1tLnkyKmksYSttLngqaCxiKy1tLnkqaSk6XCJaXCI9PT1tLnR5cGUmJmsuY2xvc2VQYXRoKCl9cmV0dXJuIGt9LGNhLnByb3RvdHlwZS5nZXRDb250b3Vycz1mdW5jdGlvbigpe3ZhciBhPXRoaXM7aWYodm9pZCAwPT09dGhpcy5wb2ludHMpcmV0dXJuW107Zm9yKHZhciBiPVtdLGM9W10sZD0wO2Q8dGhpcy5wb2ludHMubGVuZ3RoO2QrPTEpe3ZhciBlPWEucG9pbnRzW2RdO2MucHVzaChlKSxlLmxhc3RQb2ludE9mQ29udG91ciYmKGIucHVzaChjKSxjPVtdKX1yZXR1cm4geGUuYXJndW1lbnQoMD09PWMubGVuZ3RoLFwiVGhlcmUgYXJlIHN0aWxsIHBvaW50cyBsZWZ0IGluIHRoZSBjdXJyZW50IGNvbnRvdXIuXCIpLGJ9LGNhLnByb3RvdHlwZS5nZXRNZXRyaWNzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMucGF0aC5jb21tYW5kcyxiPVtdLGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCs9MSl7dmFyIGU9YVtkXTtcIlpcIiE9PWUudHlwZSYmKGIucHVzaChlLngpLGMucHVzaChlLnkpKSxcIlFcIiE9PWUudHlwZSYmXCJDXCIhPT1lLnR5cGV8fChiLnB1c2goZS54MSksYy5wdXNoKGUueTEpKSxcIkNcIj09PWUudHlwZSYmKGIucHVzaChlLngyKSxjLnB1c2goZS55MikpfXZhciBmPXt4TWluOk1hdGgubWluLmFwcGx5KG51bGwsYikseU1pbjpNYXRoLm1pbi5hcHBseShudWxsLGMpLHhNYXg6TWF0aC5tYXguYXBwbHkobnVsbCxiKSx5TWF4Ok1hdGgubWF4LmFwcGx5KG51bGwsYyksbGVmdFNpZGVCZWFyaW5nOnRoaXMubGVmdFNpZGVCZWFyaW5nfTtyZXR1cm4gaXNGaW5pdGUoZi54TWluKXx8KGYueE1pbj0wKSxpc0Zpbml0ZShmLnhNYXgpfHwoZi54TWF4PXRoaXMuYWR2YW5jZVdpZHRoKSxpc0Zpbml0ZShmLnlNaW4pfHwoZi55TWluPTApLGlzRmluaXRlKGYueU1heCl8fChmLnlNYXg9MCksZi5yaWdodFNpZGVCZWFyaW5nPXRoaXMuYWR2YW5jZVdpZHRoLWYubGVmdFNpZGVCZWFyaW5nLShmLnhNYXgtZi54TWluKSxmfSxjYS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbihhLGIsYyxkLGUpe3RoaXMuZ2V0UGF0aChiLGMsZCxlKS5kcmF3KGEpfSxjYS5wcm90b3R5cGUuZHJhd1BvaW50cz1mdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBlKGIsYyxkLGUpe3ZhciBmPTIqTWF0aC5QSTthLmJlZ2luUGF0aCgpO2Zvcih2YXIgZz0wO2c8Yi5sZW5ndGg7Zys9MSlhLm1vdmVUbyhjK2JbZ10ueCplLGQrYltnXS55KmUpLGEuYXJjKGMrYltnXS54KmUsZCtiW2ddLnkqZSwyLDAsZiwhMSk7YS5jbG9zZVBhdGgoKSxhLmZpbGwoKX1iPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD12b2lkIDAhPT1kP2Q6MjQ7Zm9yKHZhciBmPTEvdGhpcy5wYXRoLnVuaXRzUGVyRW0qZCxnPVtdLGg9W10saT10aGlzLnBhdGgsaj0wO2o8aS5jb21tYW5kcy5sZW5ndGg7ais9MSl7dmFyIGs9aS5jb21tYW5kc1tqXTt2b2lkIDAhPT1rLngmJmcucHVzaCh7eDprLngseTotay55fSksdm9pZCAwIT09ay54MSYmaC5wdXNoKHt4OmsueDEseTotay55MX0pLHZvaWQgMCE9PWsueDImJmgucHVzaCh7eDprLngyLHk6LWsueTJ9KX1hLmZpbGxTdHlsZT1cImJsdWVcIixlKGcsYixjLGYpLGEuZmlsbFN0eWxlPVwicmVkXCIsZShoLGIsYyxmKX0sY2EucHJvdG90eXBlLmRyYXdNZXRyaWNzPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlO2I9dm9pZCAwIT09Yj9iOjAsYz12b2lkIDAhPT1jP2M6MCxkPXZvaWQgMCE9PWQ/ZDoyNCxlPTEvdGhpcy5wYXRoLnVuaXRzUGVyRW0qZCxhLmxpbmVXaWR0aD0xLGEuc3Ryb2tlU3R5bGU9XCJibGFja1wiLFJlLmxpbmUoYSxiLC0xZTQsYiwxZTQpLFJlLmxpbmUoYSwtMWU0LGMsMWU0LGMpO3ZhciBmPXRoaXMueE1pbnx8MCxnPXRoaXMueU1pbnx8MCxoPXRoaXMueE1heHx8MCxpPXRoaXMueU1heHx8MCxqPXRoaXMuYWR2YW5jZVdpZHRofHwwO2Euc3Ryb2tlU3R5bGU9XCJibHVlXCIsUmUubGluZShhLGIrZiplLC0xZTQsYitmKmUsMWU0KSxSZS5saW5lKGEsYitoKmUsLTFlNCxiK2gqZSwxZTQpLFJlLmxpbmUoYSwtMWU0LGMrLWcqZSwxZTQsYystZyplKSxSZS5saW5lKGEsLTFlNCxjKy1pKmUsMWU0LGMrLWkqZSksYS5zdHJva2VTdHlsZT1cImdyZWVuXCIsUmUubGluZShhLGIraiplLC0xZTQsYitqKmUsMWU0KX0sZWEucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmdseXBoc1thXSYmKHRoaXMuZ2x5cGhzW2FdPXRoaXMuZ2x5cGhzW2FdKCkpLHRoaXMuZ2x5cGhzW2FdfSxlYS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihhLGIpe3RoaXMuZ2x5cGhzW2FdPWIsdGhpcy5sZW5ndGgrK307dmFyIFNlPXtHbHlwaFNldDplYSxnbHlwaExvYWRlcjpmYSx0dGZHbHlwaExvYWRlcjpnYSxjZmZHbHlwaExvYWRlcjpoYX0sVGU9W3tuYW1lOlwidmVyc2lvblwiLG9wOjAsdHlwZTpcIlNJRFwifSx7bmFtZTpcIm5vdGljZVwiLG9wOjEsdHlwZTpcIlNJRFwifSx7bmFtZTpcImNvcHlyaWdodFwiLG9wOjEyMDAsdHlwZTpcIlNJRFwifSx7bmFtZTpcImZ1bGxOYW1lXCIsb3A6Mix0eXBlOlwiU0lEXCJ9LHtuYW1lOlwiZmFtaWx5TmFtZVwiLG9wOjMsdHlwZTpcIlNJRFwifSx7bmFtZTpcIndlaWdodFwiLG9wOjQsdHlwZTpcIlNJRFwifSx7bmFtZTpcImlzRml4ZWRQaXRjaFwiLG9wOjEyMDEsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwiaXRhbGljQW5nbGVcIixvcDoxMjAyLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcInVuZGVybGluZVBvc2l0aW9uXCIsb3A6MTIwMyx0eXBlOlwibnVtYmVyXCIsdmFsdWU6LTEwMH0se25hbWU6XCJ1bmRlcmxpbmVUaGlja25lc3NcIixvcDoxMjA0LHR5cGU6XCJudW1iZXJcIix2YWx1ZTo1MH0se25hbWU6XCJwYWludFR5cGVcIixvcDoxMjA1LHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNoYXJzdHJpbmdUeXBlXCIsb3A6MTIwNix0eXBlOlwibnVtYmVyXCIsdmFsdWU6Mn0se25hbWU6XCJmb250TWF0cml4XCIsb3A6MTIwNyx0eXBlOltcInJlYWxcIixcInJlYWxcIixcInJlYWxcIixcInJlYWxcIixcInJlYWxcIixcInJlYWxcIl0sdmFsdWU6Wy4wMDEsMCwwLC4wMDEsMCwwXX0se25hbWU6XCJ1bmlxdWVJZFwiLG9wOjEzLHR5cGU6XCJudW1iZXJcIn0se25hbWU6XCJmb250QkJveFwiLG9wOjUsdHlwZTpbXCJudW1iZXJcIixcIm51bWJlclwiLFwibnVtYmVyXCIsXCJudW1iZXJcIl0sdmFsdWU6WzAsMCwwLDBdfSx7bmFtZTpcInN0cm9rZVdpZHRoXCIsb3A6MTIwOCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH0se25hbWU6XCJ4dWlkXCIsb3A6MTQsdHlwZTpbXSx2YWx1ZTpudWxsfSx7bmFtZTpcImNoYXJzZXRcIixvcDoxNSx0eXBlOlwib2Zmc2V0XCIsdmFsdWU6MH0se25hbWU6XCJlbmNvZGluZ1wiLG9wOjE2LHR5cGU6XCJvZmZzZXRcIix2YWx1ZTowfSx7bmFtZTpcImNoYXJTdHJpbmdzXCIsb3A6MTcsdHlwZTpcIm9mZnNldFwiLHZhbHVlOjB9LHtuYW1lOlwicHJpdmF0ZVwiLG9wOjE4LHR5cGU6W1wibnVtYmVyXCIsXCJvZmZzZXRcIl0sdmFsdWU6WzAsMF19LHtuYW1lOlwicm9zXCIsb3A6MTIzMCx0eXBlOltcIlNJRFwiLFwiU0lEXCIsXCJudW1iZXJcIl19LHtuYW1lOlwiY2lkRm9udFZlcnNpb25cIixvcDoxMjMxLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNpZEZvbnRSZXZpc2lvblwiLG9wOjEyMzIsdHlwZTpcIm51bWJlclwiLHZhbHVlOjB9LHtuYW1lOlwiY2lkRm9udFR5cGVcIixvcDoxMjMzLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcImNpZENvdW50XCIsb3A6MTIzNCx0eXBlOlwibnVtYmVyXCIsdmFsdWU6ODcyMH0se25hbWU6XCJ1aWRCYXNlXCIsb3A6MTIzNSx0eXBlOlwibnVtYmVyXCJ9LHtuYW1lOlwiZmRBcnJheVwiLG9wOjEyMzYsdHlwZTpcIm9mZnNldFwifSx7bmFtZTpcImZkU2VsZWN0XCIsb3A6MTIzNyx0eXBlOlwib2Zmc2V0XCJ9LHtuYW1lOlwiZm9udE5hbWVcIixvcDoxMjM4LHR5cGU6XCJTSURcIn1dLFVlPVt7bmFtZTpcInN1YnJzXCIsb3A6MTksdHlwZTpcIm9mZnNldFwiLHZhbHVlOjB9LHtuYW1lOlwiZGVmYXVsdFdpZHRoWFwiLG9wOjIwLHR5cGU6XCJudW1iZXJcIix2YWx1ZTowfSx7bmFtZTpcIm5vbWluYWxXaWR0aFhcIixvcDoyMSx0eXBlOlwibnVtYmVyXCIsdmFsdWU6MH1dLFZlPXtwYXJzZTp6YSxtYWtlOk1hfSxXZT17cGFyc2U6TmEsbWFrZTpPYX0sWGU9e3BhcnNlOlBhLG1ha2U6UWF9LFllPXtwYXJzZTpSYSxtYWtlOlNhfSxaZT17bWFrZTpUYSxwYXJzZTpVYX0sJGU9e3BhcnNlOlZhLG1ha2U6V2F9LF9lPVtcImNvcHlyaWdodFwiLFwiZm9udEZhbWlseVwiLFwiZm9udFN1YmZhbWlseVwiLFwidW5pcXVlSURcIixcImZ1bGxOYW1lXCIsXCJ2ZXJzaW9uXCIsXCJwb3N0U2NyaXB0TmFtZVwiLFwidHJhZGVtYXJrXCIsXCJtYW51ZmFjdHVyZXJcIixcImRlc2lnbmVyXCIsXCJkZXNjcmlwdGlvblwiLFwibWFudWZhY3R1cmVyVVJMXCIsXCJkZXNpZ25lclVSTFwiLFwibGljZW5zZVwiLFwibGljZW5zZVVSTFwiLFwicmVzZXJ2ZWRcIixcInByZWZlcnJlZEZhbWlseVwiLFwicHJlZmVycmVkU3ViZmFtaWx5XCIsXCJjb21wYXRpYmxlRnVsbE5hbWVcIixcInNhbXBsZVRleHRcIixcInBvc3RTY3JpcHRGaW5kRm9udE5hbWVcIixcInd3c0ZhbWlseVwiLFwid3dzU3ViZmFtaWx5XCJdLGFmPXswOlwiZW5cIiwxOlwiZnJcIiwyOlwiZGVcIiwzOlwiaXRcIiw0OlwibmxcIiw1Olwic3ZcIiw2OlwiZXNcIiw3OlwiZGFcIiw4OlwicHRcIiw5Olwibm9cIiwxMDpcImhlXCIsMTE6XCJqYVwiLDEyOlwiYXJcIiwxMzpcImZpXCIsMTQ6XCJlbFwiLDE1OlwiaXNcIiwxNjpcIm10XCIsMTc6XCJ0clwiLDE4OlwiaHJcIiwxOTpcInpoLUhhbnRcIiwyMDpcInVyXCIsMjE6XCJoaVwiLDIyOlwidGhcIiwyMzpcImtvXCIsMjQ6XCJsdFwiLDI1OlwicGxcIiwyNjpcImh1XCIsMjc6XCJlc1wiLDI4OlwibHZcIiwyOTpcInNlXCIsMzA6XCJmb1wiLDMxOlwiZmFcIiwzMjpcInJ1XCIsMzM6XCJ6aFwiLDM0OlwibmwtQkVcIiwzNTpcImdhXCIsMzY6XCJzcVwiLDM3Olwicm9cIiwzODpcImN6XCIsMzk6XCJza1wiLDQwOlwic2lcIiw0MTpcInlpXCIsNDI6XCJzclwiLDQzOlwibWtcIiw0NDpcImJnXCIsNDU6XCJ1a1wiLDQ2OlwiYmVcIiw0NzpcInV6XCIsNDg6XCJra1wiLDQ5OlwiYXotQ3lybFwiLDUwOlwiYXotQXJhYlwiLDUxOlwiaHlcIiw1MjpcImthXCIsNTM6XCJtb1wiLDU0Olwia3lcIiw1NTpcInRnXCIsNTY6XCJ0a1wiLDU3OlwibW4tQ05cIiw1ODpcIm1uXCIsNTk6XCJwc1wiLDYwOlwia3NcIiw2MTpcImt1XCIsNjI6XCJzZFwiLDYzOlwiYm9cIiw2NDpcIm5lXCIsNjU6XCJzYVwiLDY2OlwibXJcIiw2NzpcImJuXCIsNjg6XCJhc1wiLDY5OlwiZ3VcIiw3MDpcInBhXCIsNzE6XCJvclwiLDcyOlwibWxcIiw3MzpcImtuXCIsNzQ6XCJ0YVwiLDc1OlwidGVcIiw3NjpcInNpXCIsNzc6XCJteVwiLDc4Olwia21cIiw3OTpcImxvXCIsODA6XCJ2aVwiLDgxOlwiaWRcIiw4MjpcInRsXCIsODM6XCJtc1wiLDg0OlwibXMtQXJhYlwiLDg1OlwiYW1cIiw4NjpcInRpXCIsODc6XCJvbVwiLDg4Olwic29cIiw4OTpcInN3XCIsOTA6XCJyd1wiLDkxOlwicm5cIiw5MjpcIm55XCIsOTM6XCJtZ1wiLDk0OlwiZW9cIiwxMjg6XCJjeVwiLDEyOTpcImV1XCIsMTMwOlwiY2FcIiwxMzE6XCJsYVwiLDEzMjpcInF1XCIsMTMzOlwiZ25cIiwxMzQ6XCJheVwiLDEzNTpcInR0XCIsMTM2OlwidWdcIiwxMzc6XCJkelwiLDEzODpcImp2XCIsMTM5Olwic3VcIiwxNDA6XCJnbFwiLDE0MTpcImFmXCIsMTQyOlwiYnJcIiwxNDM6XCJpdVwiLDE0NDpcImdkXCIsMTQ1OlwiZ3ZcIiwxNDY6XCJnYVwiLDE0NzpcInRvXCIsMTQ4OlwiZWwtcG9seXRvblwiLDE0OTpcImtsXCIsMTUwOlwiYXpcIiwxNTE6XCJublwifSxiZj17MDowLDE6MCwyOjAsMzowLDQ6MCw1OjAsNjowLDc6MCw4OjAsOTowLDEwOjUsMTE6MSwxMjo0LDEzOjAsMTQ6NiwxNTowLDE2OjAsMTc6MCwxODowLDE5OjIsMjA6NCxcbjIxOjksMjI6MjEsMjM6MywyNDoyOSwyNToyOSwyNjoyOSwyNzoyOSwyODoyOSwyOTowLDMwOjAsMzE6NCwzMjo3LDMzOjI1LDM0OjAsMzU6MCwzNjowLDM3OjAsMzg6MjksMzk6MjksNDA6MCw0MTo1LDQyOjcsNDM6Nyw0NDo3LDQ1OjcsNDY6Nyw0Nzo3LDQ4OjcsNDk6Nyw1MDo0LDUxOjI0LDUyOjIzLDUzOjcsNTQ6Nyw1NTo3LDU2OjcsNTc6MjcsNTg6Nyw1OTo0LDYwOjQsNjE6NCw2Mjo0LDYzOjI2LDY0OjksNjU6OSw2Njo5LDY3OjEzLDY4OjEzLDY5OjExLDcwOjEwLDcxOjEyLDcyOjE3LDczOjE2LDc0OjE0LDc1OjE1LDc2OjE4LDc3OjE5LDc4OjIwLDc5OjIyLDgwOjMwLDgxOjAsODI6MCw4MzowLDg0OjQsODU6MjgsODY6MjgsODc6MjgsODg6MCw4OTowLDkwOjAsOTE6MCw5MjowLDkzOjAsOTQ6MCwxMjg6MCwxMjk6MCwxMzA6MCwxMzE6MCwxMzI6MCwxMzM6MCwxMzQ6MCwxMzU6NywxMzY6NCwxMzc6MjYsMTM4OjAsMTM5OjAsMTQwOjAsMTQxOjAsMTQyOjAsMTQzOjI4LDE0NDowLDE0NTowLDE0NjowLDE0NzowLDE0ODo2LDE0OTowLDE1MDowLDE1MTowfSxjZj17MTA3ODpcImFmXCIsMTA1MjpcInNxXCIsMTE1NjpcImdzd1wiLDExMTg6XCJhbVwiLDUxMjE6XCJhci1EWlwiLDE1MzYxOlwiYXItQkhcIiwzMDczOlwiYXJcIiwyMDQ5OlwiYXItSVFcIiwxMTI2NTpcImFyLUpPXCIsMTMzMTM6XCJhci1LV1wiLDEyMjg5OlwiYXItTEJcIiw0MDk3OlwiYXItTFlcIiw2MTQ1OlwiYXJ5XCIsODE5MzpcImFyLU9NXCIsMTYzODU6XCJhci1RQVwiLDEwMjU6XCJhci1TQVwiLDEwMjQxOlwiYXItU1lcIiw3MTY5OlwiYWViXCIsMTQzMzc6XCJhci1BRVwiLDkyMTc6XCJhci1ZRVwiLDEwNjc6XCJoeVwiLDExMDE6XCJhc1wiLDIwOTI6XCJhei1DeXJsXCIsMTA2ODpcImF6XCIsMTEzMzpcImJhXCIsMTA2OTpcImV1XCIsMTA1OTpcImJlXCIsMjExNzpcImJuXCIsMTA5MzpcImJuLUlOXCIsODIxODpcImJzLUN5cmxcIiw1MTQ2OlwiYnNcIiwxMTUwOlwiYnJcIiwxMDI2OlwiYmdcIiwxMDI3OlwiY2FcIiwzMDc2OlwiemgtSEtcIiw1MTI0OlwiemgtTU9cIiwyMDUyOlwiemhcIiw0MTAwOlwiemgtU0dcIiwxMDI4OlwiemgtVFdcIiwxMTU1OlwiY29cIiwxMDUwOlwiaHJcIiw0MTIyOlwiaHItQkFcIiwxMDI5OlwiY3NcIiwxMDMwOlwiZGFcIiwxMTY0OlwicHJzXCIsMTEyNTpcImR2XCIsMjA2NzpcIm5sLUJFXCIsMTA0MzpcIm5sXCIsMzA4MTpcImVuLUFVXCIsMTAyNDk6XCJlbi1CWlwiLDQxMDU6XCJlbi1DQVwiLDkyMjU6XCJlbi0wMjlcIiwxNjM5MzpcImVuLUlOXCIsNjE1MzpcImVuLUlFXCIsODIwMTpcImVuLUpNXCIsMTc0MTc6XCJlbi1NWVwiLDUxMjk6XCJlbi1OWlwiLDEzMzIxOlwiZW4tUEhcIiwxODQ0MTpcImVuLVNHXCIsNzE3NzpcImVuLVpBXCIsMTEyNzM6XCJlbi1UVFwiLDIwNTc6XCJlbi1HQlwiLDEwMzM6XCJlblwiLDEyMjk3OlwiZW4tWldcIiwxMDYxOlwiZXRcIiwxMDgwOlwiZm9cIiwxMTI0OlwiZmlsXCIsMTAzNTpcImZpXCIsMjA2MDpcImZyLUJFXCIsMzA4NDpcImZyLUNBXCIsMTAzNjpcImZyXCIsNTEzMjpcImZyLUxVXCIsNjE1NjpcImZyLU1DXCIsNDEwODpcImZyLUNIXCIsMTEyMjpcImZ5XCIsMTExMDpcImdsXCIsMTA3OTpcImthXCIsMzA3OTpcImRlLUFUXCIsMTAzMTpcImRlXCIsNTEyNzpcImRlLUxJXCIsNDEwMzpcImRlLUxVXCIsMjA1NTpcImRlLUNIXCIsMTAzMjpcImVsXCIsMTEzNTpcImtsXCIsMTA5NTpcImd1XCIsMTEyODpcImhhXCIsMTAzNzpcImhlXCIsMTA4MTpcImhpXCIsMTAzODpcImh1XCIsMTAzOTpcImlzXCIsMTEzNjpcImlnXCIsMTA1NzpcImlkXCIsMTExNzpcIml1XCIsMjE0MTpcIml1LUxhdG5cIiwyMTA4OlwiZ2FcIiwxMDc2OlwieGhcIiwxMDc3OlwienVcIiwxMDQwOlwiaXRcIiwyMDY0OlwiaXQtQ0hcIiwxMDQxOlwiamFcIiwxMDk5Olwia25cIiwxMDg3Olwia2tcIiwxMTA3Olwia21cIiwxMTU4OlwicXVjXCIsMTE1OTpcInJ3XCIsMTA4OTpcInN3XCIsMTExMTpcImtva1wiLDEwNDI6XCJrb1wiLDEwODg6XCJreVwiLDExMDg6XCJsb1wiLDEwNjI6XCJsdlwiLDEwNjM6XCJsdFwiLDIwOTQ6XCJkc2JcIiwxMTM0OlwibGJcIiwxMDcxOlwibWtcIiwyMTEwOlwibXMtQk5cIiwxMDg2OlwibXNcIiwxMTAwOlwibWxcIiwxMDgyOlwibXRcIiwxMTUzOlwibWlcIiwxMTQ2OlwiYXJuXCIsMTEwMjpcIm1yXCIsMTE0ODpcIm1vaFwiLDExMDQ6XCJtblwiLDIxMjg6XCJtbi1DTlwiLDExMjE6XCJuZVwiLDEwNDQ6XCJuYlwiLDIwNjg6XCJublwiLDExNTQ6XCJvY1wiLDEwOTY6XCJvclwiLDExMjM6XCJwc1wiLDEwNDU6XCJwbFwiLDEwNDY6XCJwdFwiLDIwNzA6XCJwdC1QVFwiLDEwOTQ6XCJwYVwiLDExMzE6XCJxdS1CT1wiLDIxNTU6XCJxdS1FQ1wiLDMxNzk6XCJxdVwiLDEwNDg6XCJyb1wiLDEwNDc6XCJybVwiLDEwNDk6XCJydVwiLDkyNzU6XCJzbW5cIiw0MTU1Olwic21qLU5PXCIsNTE3OTpcInNtalwiLDMxMzE6XCJzZS1GSVwiLDEwODM6XCJzZVwiLDIxMDc6XCJzZS1TRVwiLDgyNTE6XCJzbXNcIiw2MjAzOlwic21hLU5PXCIsNzIyNzpcInNtc1wiLDExMDM6XCJzYVwiLDcxOTQ6XCJzci1DeXJsLUJBXCIsMzA5ODpcInNyXCIsNjE3MDpcInNyLUxhdG4tQkFcIiwyMDc0Olwic3ItTGF0blwiLDExMzI6XCJuc29cIiwxMDc0OlwidG5cIiwxMTE1Olwic2lcIiwxMDUxOlwic2tcIiwxMDYwOlwic2xcIiwxMTI3NDpcImVzLUFSXCIsMTYzOTQ6XCJlcy1CT1wiLDEzMzIyOlwiZXMtQ0xcIiw5MjI2OlwiZXMtQ09cIiw1MTMwOlwiZXMtQ1JcIiw3MTc4OlwiZXMtRE9cIiwxMjI5ODpcImVzLUVDXCIsMTc0MTg6XCJlcy1TVlwiLDQxMDY6XCJlcy1HVFwiLDE4NDQyOlwiZXMtSE5cIiwyMDU4OlwiZXMtTVhcIiwxOTQ2NjpcImVzLU5JXCIsNjE1NDpcImVzLVBBXCIsMTUzNzA6XCJlcy1QWVwiLDEwMjUwOlwiZXMtUEVcIiwyMDQ5MDpcImVzLVBSXCIsMzA4MjpcImVzXCIsMTAzNDpcImVzXCIsMjE1MTQ6XCJlcy1VU1wiLDE0MzQ2OlwiZXMtVVlcIiw4MjAyOlwiZXMtVkVcIiwyMDc3Olwic3YtRklcIiwxMDUzOlwic3ZcIiwxMTE0Olwic3lyXCIsMTA2NDpcInRnXCIsMjE0MzpcInR6bVwiLDEwOTc6XCJ0YVwiLDEwOTI6XCJ0dFwiLDEwOTg6XCJ0ZVwiLDEwNTQ6XCJ0aFwiLDExMDU6XCJib1wiLDEwNTU6XCJ0clwiLDEwOTA6XCJ0a1wiLDExNTI6XCJ1Z1wiLDEwNTg6XCJ1a1wiLDEwNzA6XCJoc2JcIiwxMDU2OlwidXJcIiwyMTE1OlwidXotQ3lybFwiLDEwOTE6XCJ1elwiLDEwNjY6XCJ2aVwiLDExMDY6XCJjeVwiLDExNjA6XCJ3b1wiLDExNTc6XCJzYWhcIiwxMTQ0OlwiaWlcIiwxMTMwOlwieW9cIn0sZGY9XCJ1dGYtMTZcIixlZj17MDpcIm1hY2ludG9zaFwiLDE6XCJ4LW1hYy1qYXBhbmVzZVwiLDI6XCJ4LW1hYy1jaGluZXNldHJhZFwiLDM6XCJ4LW1hYy1rb3JlYW5cIiw2OlwieC1tYWMtZ3JlZWtcIiw3OlwieC1tYWMtY3lyaWxsaWNcIiw5OlwieC1tYWMtZGV2YW5hZ2FpXCIsMTA6XCJ4LW1hYy1ndXJtdWtoaVwiLDExOlwieC1tYWMtZ3VqYXJhdGlcIiwxMjpcIngtbWFjLW9yaXlhXCIsMTM6XCJ4LW1hYy1iZW5nYWxpXCIsMTQ6XCJ4LW1hYy10YW1pbFwiLDE1OlwieC1tYWMtdGVsdWd1XCIsMTY6XCJ4LW1hYy1rYW5uYWRhXCIsMTc6XCJ4LW1hYy1tYWxheWFsYW1cIiwxODpcIngtbWFjLXNpbmhhbGVzZVwiLDE5OlwieC1tYWMtYnVybWVzZVwiLDIwOlwieC1tYWMta2htZXJcIiwyMTpcIngtbWFjLXRoYWlcIiwyMjpcIngtbWFjLWxhb1wiLDIzOlwieC1tYWMtZ2VvcmdpYW5cIiwyNDpcIngtbWFjLWFybWVuaWFuXCIsMjU6XCJ4LW1hYy1jaGluZXNlc2ltcFwiLDI2OlwieC1tYWMtdGliZXRhblwiLDI3OlwieC1tYWMtbW9uZ29saWFuXCIsMjg6XCJ4LW1hYy1ldGhpb3BpY1wiLDI5OlwieC1tYWMtY2VcIiwzMDpcIngtbWFjLXZpZXRuYW1lc2VcIiwzMTpcIngtbWFjLWV4dGFyYWJpY1wifSxmZj17MTU6XCJ4LW1hYy1pY2VsYW5kaWNcIiwxNzpcIngtbWFjLXR1cmtpc2hcIiwxODpcIngtbWFjLWNyb2F0aWFuXCIsMjQ6XCJ4LW1hYy1jZVwiLDI1OlwieC1tYWMtY2VcIiwyNjpcIngtbWFjLWNlXCIsMjc6XCJ4LW1hYy1jZVwiLDI4OlwieC1tYWMtY2VcIiwzMDpcIngtbWFjLWljZWxhbmRpY1wiLDM3OlwieC1tYWMtcm9tYW5pYW5cIiwzODpcIngtbWFjLWNlXCIsMzk6XCJ4LW1hYy1jZVwiLDQwOlwieC1tYWMtY2VcIiwxNDM6XCJ4LW1hYy1pbnVpdFwiLDE0NjpcIngtbWFjLWdhZWxpY1wifSxnZj17cGFyc2U6WmEsbWFrZTpjYn0saGY9W3tiZWdpbjowLGVuZDoxMjd9LHtiZWdpbjoxMjgsZW5kOjI1NX0se2JlZ2luOjI1NixlbmQ6MzgzfSx7YmVnaW46Mzg0LGVuZDo1OTF9LHtiZWdpbjo1OTIsZW5kOjY4N30se2JlZ2luOjY4OCxlbmQ6NzY3fSx7YmVnaW46NzY4LGVuZDo4Nzl9LHtiZWdpbjo4ODAsZW5kOjEwMjN9LHtiZWdpbjoxMTM5MixlbmQ6MTE1MTl9LHtiZWdpbjoxMDI0LGVuZDoxMjc5fSx7YmVnaW46MTMyOCxlbmQ6MTQyM30se2JlZ2luOjE0MjQsZW5kOjE1MzV9LHtiZWdpbjo0MjI0MCxlbmQ6NDI1NTl9LHtiZWdpbjoxNTM2LGVuZDoxNzkxfSx7YmVnaW46MTk4NCxlbmQ6MjA0N30se2JlZ2luOjIzMDQsZW5kOjI0MzF9LHtiZWdpbjoyNDMyLGVuZDoyNTU5fSx7YmVnaW46MjU2MCxlbmQ6MjY4N30se2JlZ2luOjI2ODgsZW5kOjI4MTV9LHtiZWdpbjoyODE2LGVuZDoyOTQzfSx7YmVnaW46Mjk0NCxlbmQ6MzA3MX0se2JlZ2luOjMwNzIsZW5kOjMxOTl9LHtiZWdpbjozMjAwLGVuZDozMzI3fSx7YmVnaW46MzMyOCxlbmQ6MzQ1NX0se2JlZ2luOjM1ODQsZW5kOjM3MTF9LHtiZWdpbjozNzEyLGVuZDozODM5fSx7YmVnaW46NDI1NixlbmQ6NDM1MX0se2JlZ2luOjY5MTIsZW5kOjcwMzl9LHtiZWdpbjo0MzUyLGVuZDo0NjA3fSx7YmVnaW46NzY4MCxlbmQ6NzkzNX0se2JlZ2luOjc5MzYsZW5kOjgxOTF9LHtiZWdpbjo4MTkyLGVuZDo4MzAzfSx7YmVnaW46ODMwNCxlbmQ6ODM1MX0se2JlZ2luOjgzNTIsZW5kOjgzOTl9LHtiZWdpbjo4NDAwLGVuZDo4NDQ3fSx7YmVnaW46ODQ0OCxlbmQ6ODUyN30se2JlZ2luOjg1MjgsZW5kOjg1OTF9LHtiZWdpbjo4NTkyLGVuZDo4NzAzfSx7YmVnaW46ODcwNCxlbmQ6ODk1OX0se2JlZ2luOjg5NjAsZW5kOjkyMTV9LHtiZWdpbjo5MjE2LGVuZDo5Mjc5fSx7YmVnaW46OTI4MCxlbmQ6OTMxMX0se2JlZ2luOjkzMTIsZW5kOjk0NzF9LHtiZWdpbjo5NDcyLGVuZDo5NTk5fSx7YmVnaW46OTYwMCxlbmQ6OTYzMX0se2JlZ2luOjk2MzIsZW5kOjk3Mjd9LHtiZWdpbjo5NzI4LGVuZDo5OTgzfSx7YmVnaW46OTk4NCxlbmQ6MTAxNzV9LHtiZWdpbjoxMjI4OCxlbmQ6MTIzNTF9LHtiZWdpbjoxMjM1MixlbmQ6MTI0NDd9LHtiZWdpbjoxMjQ0OCxlbmQ6MTI1NDN9LHtiZWdpbjoxMjU0NCxlbmQ6MTI1OTF9LHtiZWdpbjoxMjU5MixlbmQ6MTI2ODd9LHtiZWdpbjo0MzA3MixlbmQ6NDMxMzV9LHtiZWdpbjoxMjgwMCxlbmQ6MTMwNTV9LHtiZWdpbjoxMzA1NixlbmQ6MTMzMTF9LHtiZWdpbjo0NDAzMixlbmQ6NTUyMTV9LHtiZWdpbjo1NTI5NixlbmQ6NTczNDN9LHtiZWdpbjo2Nzg0MCxlbmQ6Njc4NzF9LHtiZWdpbjoxOTk2OCxlbmQ6NDA5NTl9LHtiZWdpbjo1NzM0NCxlbmQ6NjM3NDN9LHtiZWdpbjoxMjczNixlbmQ6MTI3ODN9LHtiZWdpbjo2NDI1NixlbmQ6NjQzMzV9LHtiZWdpbjo2NDMzNixlbmQ6NjUwMjN9LHtiZWdpbjo2NTA1NixlbmQ6NjUwNzF9LHtiZWdpbjo2NTA0MCxlbmQ6NjUwNTV9LHtiZWdpbjo2NTEwNCxlbmQ6NjUxMzV9LHtiZWdpbjo2NTEzNixlbmQ6NjUyNzl9LHtiZWdpbjo2NTI4MCxlbmQ6NjU1MTl9LHtiZWdpbjo2NTUyMCxlbmQ6NjU1MzV9LHtiZWdpbjozODQwLGVuZDo0MDk1fSx7YmVnaW46MTc5MixlbmQ6MTg3MX0se2JlZ2luOjE5MjAsZW5kOjE5ODN9LHtiZWdpbjozNDU2LGVuZDozNTgzfSx7YmVnaW46NDA5NixlbmQ6NDI1NX0se2JlZ2luOjQ2MDgsZW5kOjQ5OTF9LHtiZWdpbjo1MDI0LGVuZDo1MTE5fSx7YmVnaW46NTEyMCxlbmQ6NTc1OX0se2JlZ2luOjU3NjAsZW5kOjU3OTF9LHtiZWdpbjo1NzkyLGVuZDo1ODg3fSx7YmVnaW46NjAxNixlbmQ6NjE0M30se2JlZ2luOjYxNDQsZW5kOjYzMTl9LHtiZWdpbjoxMDI0MCxlbmQ6MTA0OTV9LHtiZWdpbjo0MDk2MCxlbmQ6NDIxMjd9LHtiZWdpbjo1ODg4LGVuZDo1OTE5fSx7YmVnaW46NjYzMDQsZW5kOjY2MzUxfSx7YmVnaW46NjYzNTIsZW5kOjY2MzgzfSx7YmVnaW46NjY1NjAsZW5kOjY2NjM5fSx7YmVnaW46MTE4Nzg0LGVuZDoxMTkwMzl9LHtiZWdpbjoxMTk4MDgsZW5kOjEyMDgzMX0se2JlZ2luOjEwNDQ0ODAsZW5kOjEwNDg1NzN9LHtiZWdpbjo2NTAyNCxlbmQ6NjUwMzl9LHtiZWdpbjo5MTc1MDQsZW5kOjkxNzYzMX0se2JlZ2luOjY0MDAsZW5kOjY0Nzl9LHtiZWdpbjo2NDgwLGVuZDo2NTI3fSx7YmVnaW46NjUyOCxlbmQ6NjYyM30se2JlZ2luOjY2NTYsZW5kOjY2ODd9LHtiZWdpbjoxMTI2NCxlbmQ6MTEzNTl9LHtiZWdpbjoxMTU2OCxlbmQ6MTE2NDd9LHtiZWdpbjoxOTkwNCxlbmQ6MTk5Njd9LHtiZWdpbjo0MzAwOCxlbmQ6NDMwNTV9LHtiZWdpbjo2NTUzNixlbmQ6NjU2NjN9LHtiZWdpbjo2NTg1NixlbmQ6NjU5MzV9LHtiZWdpbjo2NjQzMixlbmQ6NjY0NjN9LHtiZWdpbjo2NjQ2NCxlbmQ6NjY1Mjd9LHtiZWdpbjo2NjY0MCxlbmQ6NjY2ODd9LHtiZWdpbjo2NjY4OCxlbmQ6NjY3MzV9LHtiZWdpbjo2NzU4NCxlbmQ6Njc2NDd9LHtiZWdpbjo2ODA5NixlbmQ6NjgxOTF9LHtiZWdpbjoxMTk1NTIsZW5kOjExOTY0N30se2JlZ2luOjczNzI4LGVuZDo3NDc1MX0se2JlZ2luOjExOTY0OCxlbmQ6MTE5Njc5fSx7YmVnaW46NzA0MCxlbmQ6NzEwM30se2JlZ2luOjcxNjgsZW5kOjcyNDd9LHtiZWdpbjo3MjQ4LGVuZDo3Mjk1fSx7YmVnaW46NDMxMzYsZW5kOjQzMjMxfSx7YmVnaW46NDMyNjQsZW5kOjQzMzExfSx7YmVnaW46NDMzMTIsZW5kOjQzMzU5fSx7YmVnaW46NDM1MjAsZW5kOjQzNjE1fSx7YmVnaW46NjU5MzYsZW5kOjY1OTk5fSx7YmVnaW46NjZlMyxlbmQ6NjYwNDd9LHtiZWdpbjo2NjIwOCxlbmQ6NjYyNzF9LHtiZWdpbjoxMjcwMjQsZW5kOjEyNzEzNX1dLGpmPXtwYXJzZTplYixtYWtlOmZiLHVuaWNvZGVSYW5nZXM6aGYsZ2V0VW5pY29kZVJhbmdlOmRifSxrZj17cGFyc2U6Z2IsbWFrZTpoYn0sbGY9bmV3IEFycmF5KDkpO2xmWzFdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4gMT09PWI/e3N1YnN0Rm9ybWF0OjEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksZGVsdGFHbHlwaElkOnRoaXMucGFyc2VVU2hvcnQoKX06Mj09PWI/e3N1YnN0Rm9ybWF0OjIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksc3Vic3RpdHV0ZTp0aGlzLnBhcnNlT2Zmc2V0MTZMaXN0KCl9OnZvaWQgeGUuYXNzZXJ0KCExLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogbG9va3VwIHR5cGUgMSBmb3JtYXQgbXVzdCBiZSAxIG9yIDIuXCIpfSxsZlsyXT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucGFyc2VVU2hvcnQoKTtyZXR1cm4geGUuYXJndW1lbnQoMT09PWEsXCJHU1VCIE11bHRpcGxlIFN1YnN0aXR1dGlvbiBTdWJ0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksc2VxdWVuY2VzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cygpfX0sbGZbM109ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBBbHRlcm5hdGUgU3Vic3RpdHV0aW9uIFN1YnRhYmxlIGlkZW50aWZpZXItZm9ybWF0IG11c3QgYmUgMVwiKSx7c3Vic3RGb3JtYXQ6YSxjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxhbHRlcm5hdGVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cygpfX0sbGZbNF09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBsaWdhdHVyZSB0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksbGlnYXR1cmVTZXRzOnRoaXMucGFyc2VMaXN0T2ZMaXN0cyhmdW5jdGlvbigpe3JldHVybntsaWdHbHlwaDp0aGlzLnBhcnNlVVNob3J0KCksY29tcG9uZW50czp0aGlzLnBhcnNlVVNob3J0TGlzdCh0aGlzLnBhcnNlVVNob3J0KCktMSl9fSl9fTt2YXIgbWY9e3NlcXVlbmNlSW5kZXg6US51U2hvcnQsbG9va3VwTGlzdEluZGV4OlEudVNob3J0fTtsZls1XT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWIpcmV0dXJue3N1YnN0Rm9ybWF0OmIsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSkscnVsZVNldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZVVTaG9ydCgpLGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntpbnB1dDp0aGlzLnBhcnNlVVNob3J0TGlzdChhLTEpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QoYixtZil9fSl9O2lmKDI9PT1iKXJldHVybntzdWJzdEZvcm1hdDpiLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGNsYXNzRGVmOnRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGNsYXNzU2V0czp0aGlzLnBhcnNlTGlzdE9mTGlzdHMoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCksYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJue2NsYXNzZXM6dGhpcy5wYXJzZVVTaG9ydExpc3QoYS0xKSxsb29rdXBSZWNvcmRzOnRoaXMucGFyc2VSZWNvcmRMaXN0KGIsbWYpfX0pfTtpZigzPT09Yil7dmFyIGM9dGhpcy5wYXJzZVVTaG9ydCgpLGQ9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntzdWJzdEZvcm1hdDpiLGNvdmVyYWdlczp0aGlzLnBhcnNlTGlzdChjLFEucG9pbnRlcihRLmNvdmVyYWdlKSksbG9va3VwUmVjb3Jkczp0aGlzLnBhcnNlUmVjb3JkTGlzdChkLG1mKX19eGUuYXNzZXJ0KCExLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogbG9va3VwIHR5cGUgNSBmb3JtYXQgbXVzdCBiZSAxLCAyIG9yIDMuXCIpfSxsZls2XT1mdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0K3RoaXMucmVsYXRpdmVPZmZzZXQsYj10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIDE9PT1iP3tzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLGNoYWluUnVsZVNldHM6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7cmV0dXJue2JhY2t0cmFjazp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGlucHV0OnRoaXMucGFyc2VVU2hvcnRMaXN0KHRoaXMucGFyc2VTaG9ydCgpLTEpLGxvb2thaGVhZDp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QobWYpfX0pfToyPT09Yj97c3Vic3RGb3JtYXQ6Mixjb3ZlcmFnZTp0aGlzLnBhcnNlUG9pbnRlcihRLmNvdmVyYWdlKSxiYWNrdHJhY2tDbGFzc0RlZjp0aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxpbnB1dENsYXNzRGVmOnRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGxvb2thaGVhZENsYXNzRGVmOnRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGNoYWluQ2xhc3NTZXQ6dGhpcy5wYXJzZUxpc3RPZkxpc3RzKGZ1bmN0aW9uKCl7cmV0dXJue2JhY2t0cmFjazp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGlucHV0OnRoaXMucGFyc2VVU2hvcnRMaXN0KHRoaXMucGFyc2VTaG9ydCgpLTEpLGxvb2thaGVhZDp0aGlzLnBhcnNlVVNob3J0TGlzdCgpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QobWYpfX0pfTozPT09Yj97c3Vic3RGb3JtYXQ6MyxiYWNrdHJhY2tDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGlucHV0Q292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxsb29rYWhlYWRDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLGxvb2t1cFJlY29yZHM6dGhpcy5wYXJzZVJlY29yZExpc3QobWYpfTp2b2lkIHhlLmFzc2VydCghMSxcIjB4XCIrYS50b1N0cmluZygxNikrXCI6IGxvb2t1cCB0eXBlIDYgZm9ybWF0IG11c3QgYmUgMSwgMiBvciAzLlwiKX0sbGZbN109ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7eGUuYXJndW1lbnQoMT09PWEsXCJHU1VCIEV4dGVuc2lvbiBTdWJzdGl0dXRpb24gc3VidGFibGUgaWRlbnRpZmllci1mb3JtYXQgbXVzdCBiZSAxXCIpO3ZhciBiPXRoaXMucGFyc2VVU2hvcnQoKSxjPW5ldyBRKHRoaXMuZGF0YSx0aGlzLm9mZnNldCt0aGlzLnBhcnNlVUxvbmcoKSk7cmV0dXJue3N1YnN0Rm9ybWF0OjEsbG9va3VwVHlwZTpiLGV4dGVuc2lvbjpsZltiXS5jYWxsKGMpfX0sbGZbOF09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlVVNob3J0KCk7cmV0dXJuIHhlLmFyZ3VtZW50KDE9PT1hLFwiR1NVQiBSZXZlcnNlIENoYWluaW5nIENvbnRleHR1YWwgU2luZ2xlIFN1YnN0aXR1dGlvbiBTdWJ0YWJsZSBpZGVudGlmaWVyLWZvcm1hdCBtdXN0IGJlIDFcIikse3N1YnN0Rm9ybWF0OmEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksYmFja3RyYWNrQ292ZXJhZ2U6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEuY292ZXJhZ2UpKSxsb29rYWhlYWRDb3ZlcmFnZTp0aGlzLnBhcnNlTGlzdChRLnBvaW50ZXIoUS5jb3ZlcmFnZSkpLHN1YnN0aXR1dGVzOnRoaXMucGFyc2VVU2hvcnRMaXN0KCl9fTt2YXIgbmY9bmV3IEFycmF5KDkpO25mWzFdPWZ1bmN0aW9uKGEpe3JldHVybiAxPT09YS5zdWJzdEZvcm1hdD9uZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9LHtuYW1lOlwiZGVsdGFHbHlwaElEXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEuZGVsdGFHbHlwaElkfV0pOm5ldyBJZS5UYWJsZShcInN1YnN0aXR1dGlvblRhYmxlXCIsW3tuYW1lOlwic3Vic3RGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6Mn0se25hbWU6XCJjb3ZlcmFnZVwiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Db3ZlcmFnZShhLmNvdmVyYWdlKX1dLmNvbmNhdChJZS51c2hvcnRMaXN0KFwic3Vic3RpdHV0ZVwiLGEuc3Vic3RpdHV0ZSkpKX0sbmZbM109ZnVuY3Rpb24oYSl7cmV0dXJuIHhlLmFzc2VydCgxPT09YS5zdWJzdEZvcm1hdCxcIkxvb2t1cCB0eXBlIDMgc3Vic3RGb3JtYXQgbXVzdCBiZSAxLlwiKSxuZXcgSWUuVGFibGUoXCJzdWJzdGl0dXRpb25UYWJsZVwiLFt7bmFtZTpcInN1YnN0Rm9ybWF0XCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOjF9LHtuYW1lOlwiY292ZXJhZ2VcIix0eXBlOlwiVEFCTEVcIix2YWx1ZTpuZXcgSWUuQ292ZXJhZ2UoYS5jb3ZlcmFnZSl9XS5jb25jYXQoSWUudGFibGVMaXN0KFwiYWx0U2V0XCIsYS5hbHRlcm5hdGVTZXRzLGZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSWUuVGFibGUoXCJhbHRlcm5hdGVTZXRUYWJsZVwiLEllLnVzaG9ydExpc3QoXCJhbHRlcm5hdGVcIixhKSl9KSkpfSxuZls0XT1mdW5jdGlvbihhKXtyZXR1cm4geGUuYXNzZXJ0KDE9PT1hLnN1YnN0Rm9ybWF0LFwiTG9va3VwIHR5cGUgNCBzdWJzdEZvcm1hdCBtdXN0IGJlIDEuXCIpLG5ldyBJZS5UYWJsZShcInN1YnN0aXR1dGlvblRhYmxlXCIsW3tuYW1lOlwic3Vic3RGb3JtYXRcIix0eXBlOlwiVVNIT1JUXCIsdmFsdWU6MX0se25hbWU6XCJjb3ZlcmFnZVwiLHR5cGU6XCJUQUJMRVwiLHZhbHVlOm5ldyBJZS5Db3ZlcmFnZShhLmNvdmVyYWdlKX1dLmNvbmNhdChJZS50YWJsZUxpc3QoXCJsaWdTZXRcIixhLmxpZ2F0dXJlU2V0cyxmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwibGlnYXR1cmVTZXRUYWJsZVwiLEllLnRhYmxlTGlzdChcImxpZ2F0dXJlXCIsYSxmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEllLlRhYmxlKFwibGlnYXR1cmVUYWJsZVwiLFt7bmFtZTpcImxpZ0dseXBoXCIsdHlwZTpcIlVTSE9SVFwiLHZhbHVlOmEubGlnR2x5cGh9XS5jb25jYXQoSWUudXNob3J0TGlzdChcImNvbXBvbmVudFwiLGEuY29tcG9uZW50cyxhLmNvbXBvbmVudHMubGVuZ3RoKzEpKSl9KSl9KSkpfTt2YXIgb2Y9e3BhcnNlOmliLG1ha2U6amJ9LHBmPXtwYXJzZTprYixtYWtlOmxifSxxZj17bWFrZTpwYixmb250VG9UYWJsZTpzYixjb21wdXRlQ2hlY2tTdW06bmJ9O3diLnByb3RvdHlwZT17c2VhcmNoVGFnOnRiLGJpblNlYXJjaDp1YixnZXRUYWJsZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmZvbnQudGFibGVzW3RoaXMudGFibGVOYW1lXTtyZXR1cm4hYiYmYSYmKGI9dGhpcy5mb250LnRhYmxlc1t0aGlzLnRhYmxlTmFtZV09dGhpcy5jcmVhdGVEZWZhdWx0VGFibGUoKSksYn0sZ2V0U2NyaXB0TmFtZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFRhYmxlKCk7cmV0dXJuIGE/YS5zY3JpcHRzLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS50YWd9KTpbXX0sZ2V0RGVmYXVsdFNjcmlwdE5hbWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFRhYmxlKCk7aWYoYSl7Zm9yKHZhciBiPSExLGM9MDtjPGEuc2NyaXB0cy5sZW5ndGg7YysrKXt2YXIgZD1hLnNjcmlwdHNbY10udGFnO2lmKFwiREZMVFwiPT09ZClyZXR1cm4gZDtcImxhdG5cIj09PWQmJihiPSEwKX1yZXR1cm4gYj9cImxhdG5cIjp2b2lkIDB9fSxnZXRTY3JpcHRUYWJsZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0VGFibGUoYik7aWYoYyl7YT1hfHxcIkRGTFRcIjt2YXIgZD1jLnNjcmlwdHMsZT10YihjLnNjcmlwdHMsYSk7aWYoZT49MClyZXR1cm4gZFtlXS5zY3JpcHQ7aWYoYil7dmFyIGY9e3RhZzphLHNjcmlwdDp7ZGVmYXVsdExhbmdTeXM6e3Jlc2VydmVkOjAscmVxRmVhdHVyZUluZGV4OjY1NTM1LGZlYXR1cmVJbmRleGVzOltdfSxsYW5nU3lzUmVjb3JkczpbXX19O3JldHVybiBkLnNwbGljZSgtMS1lLDAsZiksZi5zY3JpcHR9fX0sZ2V0TGFuZ1N5c1RhYmxlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmdldFNjcmlwdFRhYmxlKGEsYyk7aWYoZCl7aWYoIWJ8fFwiZGZsdFwiPT09Ynx8XCJERkxUXCI9PT1iKXJldHVybiBkLmRlZmF1bHRMYW5nU3lzO3ZhciBlPXRiKGQubGFuZ1N5c1JlY29yZHMsYik7aWYoZT49MClyZXR1cm4gZC5sYW5nU3lzUmVjb3Jkc1tlXS5sYW5nU3lzO2lmKGMpe3ZhciBmPXt0YWc6YixsYW5nU3lzOntyZXNlcnZlZDowLHJlcUZlYXR1cmVJbmRleDo2NTUzNSxmZWF0dXJlSW5kZXhlczpbXX19O3JldHVybiBkLmxhbmdTeXNSZWNvcmRzLnNwbGljZSgtMS1lLDAsZiksZi5sYW5nU3lzfX19LGdldEZlYXR1cmVUYWJsZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmdldExhbmdTeXNUYWJsZShhLGIsZCk7aWYoZSl7Zm9yKHZhciBmLGc9ZS5mZWF0dXJlSW5kZXhlcyxoPXRoaXMuZm9udC50YWJsZXNbdGhpcy50YWJsZU5hbWVdLmZlYXR1cmVzLGk9MDtpPGcubGVuZ3RoO2krKylpZihmPWhbZ1tpXV0sZi50YWc9PT1jKXJldHVybiBmLmZlYXR1cmU7aWYoZCl7dmFyIGo9aC5sZW5ndGg7cmV0dXJuIHhlLmFzc2VydCgwPT09anx8Yz49aFtqLTFdLnRhZyxcIkZlYXR1cmVzIG11c3QgYmUgYWRkZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLlwiKSxmPXt0YWc6YyxmZWF0dXJlOntwYXJhbXM6MCxsb29rdXBMaXN0SW5kZXhlczpbXX19LGgucHVzaChmKSxnLnB1c2goaiksZi5mZWF0dXJlfX19LGdldExvb2t1cFRhYmxlczpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPXRoaXMuZ2V0RmVhdHVyZVRhYmxlKGEsYixjLGUpLGc9W107aWYoZil7Zm9yKHZhciBoLGk9Zi5sb29rdXBMaXN0SW5kZXhlcyxqPXRoaXMuZm9udC50YWJsZXNbdGhpcy50YWJsZU5hbWVdLmxvb2t1cHMsaz0wO2s8aS5sZW5ndGg7aysrKWg9altpW2tdXSxoLmxvb2t1cFR5cGU9PT1kJiZnLnB1c2goaCk7aWYoMD09PWcubGVuZ3RoJiZlKXtoPXtsb29rdXBUeXBlOmQsbG9va3VwRmxhZzowLHN1YnRhYmxlczpbXSxtYXJrRmlsdGVyaW5nU2V0OnZvaWQgMH07dmFyIGw9ai5sZW5ndGg7cmV0dXJuIGoucHVzaChoKSxpLnB1c2gobCksW2hdfX1yZXR1cm4gZ30sZ2V0R2x5cGhDbGFzczpmdW5jdGlvbihhLGIpe3N3aXRjaChhLmZvcm1hdCl7Y2FzZSAxOnJldHVybiBhLnN0YXJ0R2x5cGg8PWImJmI8YS5zdGFydEdseXBoK2EuY2xhc3Nlcy5sZW5ndGg/YS5jbGFzc2VzW2ItYS5zdGFydEdseXBoXTowO2Nhc2UgMjp2YXIgYz12YihhLnJhbmdlcyxiKTtyZXR1cm4gYz9jLmNsYXNzSWQ6MH19LGdldENvdmVyYWdlSW5kZXg6ZnVuY3Rpb24oYSxiKXtzd2l0Y2goYS5mb3JtYXQpe2Nhc2UgMTp2YXIgYz11YihhLmdseXBocyxiKTtyZXR1cm4gYz49MD9jOi0xO2Nhc2UgMjp2YXIgZD12YihhLnJhbmdlcyxiKTtyZXR1cm4gZD9kLmluZGV4K2ItZC5zdGFydDotMX19LGV4cGFuZENvdmVyYWdlOmZ1bmN0aW9uKGEpe2lmKDE9PT1hLmZvcm1hdClyZXR1cm4gYS5nbHlwaHM7Zm9yKHZhciBiPVtdLGM9YS5yYW5nZXMsZD0wO2Q8Yy5sZW5ndGg7ZCsrKWZvcih2YXIgZT1jW2RdLGY9ZS5zdGFydCxnPWUuZW5kLGg9ZjtoPD1nO2grKyliLnB1c2goaCk7cmV0dXJuIGJ9fSx4Yi5wcm90b3R5cGU9d2IucHJvdG90eXBlLHhiLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXREZWZhdWx0U2NyaXB0TmFtZSgpO3RoaXMuZGVmYXVsdEtlcm5pbmdUYWJsZXM9dGhpcy5nZXRLZXJuaW5nVGFibGVzKGEpfSx4Yi5wcm90b3R5cGUuZ2V0S2VybmluZ1ZhbHVlPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPTA7ZTxhLmxlbmd0aDtlKyspZm9yKHZhciBmPWFbZV0uc3VidGFibGVzLGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGg9ZltnXSxpPWQuZ2V0Q292ZXJhZ2VJbmRleChoLmNvdmVyYWdlLGIpO2lmKCEoaTwwKSlzd2l0Y2goaC5wb3NGb3JtYXQpe2Nhc2UgMTpmb3IodmFyIGo9aC5wYWlyU2V0c1tpXSxrPTA7azxqLmxlbmd0aDtrKyspe3ZhciBsPWpba107aWYobC5zZWNvbmRHbHlwaD09PWMpcmV0dXJuIGwudmFsdWUxJiZsLnZhbHVlMS54QWR2YW5jZXx8MH1icmVhaztjYXNlIDI6dmFyIG09ZC5nZXRHbHlwaENsYXNzKGguY2xhc3NEZWYxLGIpLG49ZC5nZXRHbHlwaENsYXNzKGguY2xhc3NEZWYyLGMpLG89aC5jbGFzc1JlY29yZHNbbV1bbl07cmV0dXJuIG8udmFsdWUxJiZvLnZhbHVlMS54QWR2YW5jZXx8MH19cmV0dXJuIDB9LHhiLnByb3RvdHlwZS5nZXRLZXJuaW5nVGFibGVzPWZ1bmN0aW9uKGEsYil7aWYodGhpcy5mb250LnRhYmxlcy5ncG9zKXJldHVybiB0aGlzLmdldExvb2t1cFRhYmxlcyhhLGIsXCJrZXJuXCIsMil9LHliLnByb3RvdHlwZT13Yi5wcm90b3R5cGUseWIucHJvdG90eXBlLmNyZWF0ZURlZmF1bHRUYWJsZT1mdW5jdGlvbigpe3JldHVybnt2ZXJzaW9uOjEsc2NyaXB0czpbe3RhZzpcIkRGTFRcIixzY3JpcHQ6e2RlZmF1bHRMYW5nU3lzOntyZXNlcnZlZDowLHJlcUZlYXR1cmVJbmRleDo2NTUzNSxmZWF0dXJlSW5kZXhlczpbXX0sbGFuZ1N5c1JlY29yZHM6W119fV0sZmVhdHVyZXM6W10sbG9va3VwczpbXX19LHliLnByb3RvdHlwZS5nZXRTaW5nbGU9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD10aGlzLGU9W10sZj10aGlzLmdldExvb2t1cFRhYmxlcyhiLGMsYSwxKSxnPTA7ZzxmLmxlbmd0aDtnKyspZm9yKHZhciBoPWZbZ10uc3VidGFibGVzLGk9MDtpPGgubGVuZ3RoO2krKyl7dmFyIGo9aFtpXSxrPWQuZXhwYW5kQ292ZXJhZ2Uoai5jb3ZlcmFnZSksbD12b2lkIDA7aWYoMT09PWouc3Vic3RGb3JtYXQpe3ZhciBtPWouZGVsdGFHbHlwaElkO2ZvcihsPTA7bDxrLmxlbmd0aDtsKyspe3ZhciBuPWtbbF07ZS5wdXNoKHtzdWI6bixieTpuK219KX19ZWxzZXt2YXIgbz1qLnN1YnN0aXR1dGU7Zm9yKGw9MDtsPGsubGVuZ3RoO2wrKyllLnB1c2goe3N1YjprW2xdLGJ5Om9bbF19KX19cmV0dXJuIGV9LHliLnByb3RvdHlwZS5nZXRBbHRlcm5hdGVzPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9dGhpcyxlPVtdLGY9dGhpcy5nZXRMb29rdXBUYWJsZXMoYixjLGEsMyksZz0wO2c8Zi5sZW5ndGg7ZysrKWZvcih2YXIgaD1mW2ddLnN1YnRhYmxlcyxpPTA7aTxoLmxlbmd0aDtpKyspZm9yKHZhciBqPWhbaV0saz1kLmV4cGFuZENvdmVyYWdlKGouY292ZXJhZ2UpLGw9ai5hbHRlcm5hdGVTZXRzLG09MDttPGsubGVuZ3RoO20rKyllLnB1c2goe3N1YjprW21dLGJ5OmxbbV19KTtyZXR1cm4gZX0seWIucHJvdG90eXBlLmdldExpZ2F0dXJlcz1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXRoaXMsZT1bXSxmPXRoaXMuZ2V0TG9va3VwVGFibGVzKGIsYyxhLDQpLGc9MDtnPGYubGVuZ3RoO2crKylmb3IodmFyIGg9ZltnXS5zdWJ0YWJsZXMsaT0wO2k8aC5sZW5ndGg7aSsrKWZvcih2YXIgaj1oW2ldLGs9ZC5leHBhbmRDb3ZlcmFnZShqLmNvdmVyYWdlKSxsPWoubGlnYXR1cmVTZXRzLG09MDttPGsubGVuZ3RoO20rKylmb3IodmFyIG49a1ttXSxvPWxbbV0scD0wO3A8by5sZW5ndGg7cCsrKXt2YXIgcT1vW3BdO2UucHVzaCh7c3ViOltuXS5jb25jYXQocS5jb21wb25lbnRzKSxieTpxLmxpZ0dseXBofSl9cmV0dXJuIGV9LHliLnByb3RvdHlwZS5hZGRTaW5nbGU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5nZXRMb29rdXBUYWJsZXMoYyxkLGEsMSwhMClbMF0sZj1BYihlLDIse3N1YnN0Rm9ybWF0OjIsY292ZXJhZ2U6e2Zvcm1hdDoxLGdseXBoczpbXX0sc3Vic3RpdHV0ZTpbXX0pO3hlLmFzc2VydCgxPT09Zi5jb3ZlcmFnZS5mb3JtYXQsXCJMaWdhdHVyZTogdW5hYmxlIHRvIG1vZGlmeSBjb3ZlcmFnZSB0YWJsZSBmb3JtYXQgXCIrZi5jb3ZlcmFnZS5mb3JtYXQpO3ZhciBnPWIuc3ViLGg9dGhpcy5iaW5TZWFyY2goZi5jb3ZlcmFnZS5nbHlwaHMsZyk7aDwwJiYoaD0tMS1oLGYuY292ZXJhZ2UuZ2x5cGhzLnNwbGljZShoLDAsZyksZi5zdWJzdGl0dXRlLnNwbGljZShoLDAsMCkpLGYuc3Vic3RpdHV0ZVtoXT1iLmJ5fSx5Yi5wcm90b3R5cGUuYWRkQWx0ZXJuYXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZ2V0TG9va3VwVGFibGVzKGMsZCxhLDMsITApWzBdLGY9QWIoZSwxLHtzdWJzdEZvcm1hdDoxLGNvdmVyYWdlOntmb3JtYXQ6MSxnbHlwaHM6W119LGFsdGVybmF0ZVNldHM6W119KTt4ZS5hc3NlcnQoMT09PWYuY292ZXJhZ2UuZm9ybWF0LFwiTGlnYXR1cmU6IHVuYWJsZSB0byBtb2RpZnkgY292ZXJhZ2UgdGFibGUgZm9ybWF0IFwiK2YuY292ZXJhZ2UuZm9ybWF0KTt2YXIgZz1iLnN1YixoPXRoaXMuYmluU2VhcmNoKGYuY292ZXJhZ2UuZ2x5cGhzLGcpO2g8MCYmKGg9LTEtaCxmLmNvdmVyYWdlLmdseXBocy5zcGxpY2UoaCwwLGcpLGYuYWx0ZXJuYXRlU2V0cy5zcGxpY2UoaCwwLDApKSxmLmFsdGVybmF0ZVNldHNbaF09Yi5ieX0seWIucHJvdG90eXBlLmFkZExpZ2F0dXJlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZ2V0TG9va3VwVGFibGVzKGMsZCxhLDQsITApWzBdLGY9ZS5zdWJ0YWJsZXNbMF07Znx8KGY9e3N1YnN0Rm9ybWF0OjEsY292ZXJhZ2U6e2Zvcm1hdDoxLGdseXBoczpbXX0sbGlnYXR1cmVTZXRzOltdfSxlLnN1YnRhYmxlc1swXT1mKSx4ZS5hc3NlcnQoMT09PWYuY292ZXJhZ2UuZm9ybWF0LFwiTGlnYXR1cmU6IHVuYWJsZSB0byBtb2RpZnkgY292ZXJhZ2UgdGFibGUgZm9ybWF0IFwiK2YuY292ZXJhZ2UuZm9ybWF0KTt2YXIgZz1iLnN1YlswXSxoPWIuc3ViLnNsaWNlKDEpLGk9e2xpZ0dseXBoOmIuYnksY29tcG9uZW50czpofSxqPXRoaXMuYmluU2VhcmNoKGYuY292ZXJhZ2UuZ2x5cGhzLGcpO2lmKGo+PTApe2Zvcih2YXIgaz1mLmxpZ2F0dXJlU2V0c1tqXSxsPTA7bDxrLmxlbmd0aDtsKyspaWYoemIoa1tsXS5jb21wb25lbnRzLGgpKXJldHVybjtrLnB1c2goaSl9ZWxzZSBqPS0xLWosZi5jb3ZlcmFnZS5nbHlwaHMuc3BsaWNlKGosMCxnKSxmLmxpZ2F0dXJlU2V0cy5zcGxpY2UoaiwwLFtpXSl9LHliLnByb3RvdHlwZS5nZXRGZWF0dXJlPWZ1bmN0aW9uKGEsYixjKXtpZigvc3NcXGRcXGQvLnRlc3QoYSkpcmV0dXJuIHRoaXMuZ2V0U2luZ2xlKGEsYixjKTtzd2l0Y2goYSl7Y2FzZVwiYWFsdFwiOmNhc2VcInNhbHRcIjpyZXR1cm4gdGhpcy5nZXRTaW5nbGUoYSxiLGMpLmNvbmNhdCh0aGlzLmdldEFsdGVybmF0ZXMoYSxiLGMpKTtjYXNlXCJkbGlnXCI6Y2FzZVwibGlnYVwiOmNhc2VcInJsaWdcIjpyZXR1cm4gdGhpcy5nZXRMaWdhdHVyZXMoYSxiLGMpfX0seWIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhLGIsYyxkKXtpZigvc3NcXGRcXGQvLnRlc3QoYSkpcmV0dXJuIHRoaXMuYWRkU2luZ2xlKGEsYixjLGQpO3N3aXRjaChhKXtjYXNlXCJhYWx0XCI6Y2FzZVwic2FsdFwiOnJldHVyblwibnVtYmVyXCI9PXR5cGVvZiBiLmJ5P3RoaXMuYWRkU2luZ2xlKGEsYixjLGQpOnRoaXMuYWRkQWx0ZXJuYXRlKGEsYixjLGQpO2Nhc2VcImRsaWdcIjpjYXNlXCJsaWdhXCI6Y2FzZVwicmxpZ1wiOnJldHVybiB0aGlzLmFkZExpZ2F0dXJlKGEsYixjLGQpfX07dmFyIHJmLHNmLHRmLHVmLHZmPXtnZXRQYXRoOkpiLHBhcnNlOkxifSx3Zj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLnNyUGVyaW9kLGM9dGhpcy5zclBoYXNlLGQ9dGhpcy5zclRocmVzaG9sZCxlPTE7cmV0dXJuIGE8MCYmKGE9LWEsZT0tMSksYSs9ZC1jLGE9TWF0aC50cnVuYyhhL2IpKmIsYSs9YyxhPDA/YyplOmEqZX0seGY9e3g6MSx5OjAsYXhpczpcInhcIixkaXN0YW5jZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYz9hLnhvOmEueCktKGQ/Yi54bzpiLngpfSxpbnRlcnBvbGF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztyZXR1cm4gZCYmZCE9PXRoaXM/KGU9ZC5kaXN0YW5jZShhLGIsITAsITApLGY9ZC5kaXN0YW5jZShhLGMsITAsITApLGk9ZC5kaXN0YW5jZShiLGIsITEsITApLGo9ZC5kaXN0YW5jZShjLGMsITEsITApLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkIHhmLnNldFJlbGF0aXZlKGEsYSwoaStqKS8yLGQsITApOnZvaWQgeGYuc2V0UmVsYXRpdmUoYSxhLChpKmgraipnKS9rLGQsITApKTooZT1hLnhvLWIueG8sZj1hLnhvLWMueG8saT1iLngtYi54byxqPWMueC1jLnhvLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkKGEueD1hLnhvKyhpK2opLzIpOnZvaWQoYS54PWEueG8rKGkqaCtqKmcpL2spKX0sbm9ybWFsU2xvcGU6TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHNldFJlbGF0aXZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoIWR8fGQ9PT10aGlzKXJldHVybiB2b2lkKGEueD0oZT9iLnhvOmIueCkrYyk7dmFyIGY9ZT9iLnhvOmIueCxnPWU/Yi55bzpiLnksaD1mK2MqZC54LGk9ZytjKmQueTthLng9aCsoYS55LWkpL2Qubm9ybWFsU2xvcGV9LHNsb3BlOjAsdG91Y2g6ZnVuY3Rpb24oYSl7YS54VG91Y2hlZD0hMH0sdG91Y2hlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS54VG91Y2hlZH0sdW50b3VjaDpmdW5jdGlvbihhKXthLnhUb3VjaGVkPSExfX0seWY9e3g6MCx5OjEsYXhpczpcInlcIixkaXN0YW5jZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYz9hLnlvOmEueSktKGQ/Yi55bzpiLnkpfSxpbnRlcnBvbGF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztyZXR1cm4gZCYmZCE9PXRoaXM/KGU9ZC5kaXN0YW5jZShhLGIsITAsITApLGY9ZC5kaXN0YW5jZShhLGMsITAsITApLGk9ZC5kaXN0YW5jZShiLGIsITEsITApLGo9ZC5kaXN0YW5jZShjLGMsITEsITApLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkIHlmLnNldFJlbGF0aXZlKGEsYSwoaStqKS8yLGQsITApOnZvaWQgeWYuc2V0UmVsYXRpdmUoYSxhLChpKmgraipnKS9rLGQsITApKTooZT1hLnlvLWIueW8sZj1hLnlvLWMueW8saT1iLnktYi55byxqPWMueS1jLnlvLGc9TWF0aC5hYnMoZSksaD1NYXRoLmFicyhmKSwwPT09KGs9ZytoKT92b2lkKGEueT1hLnlvKyhpK2opLzIpOnZvaWQoYS55PWEueW8rKGkqaCtqKmcpL2spKX0sbm9ybWFsU2xvcGU6MCxzZXRSZWxhdGl2ZTpmdW5jdGlvbihhLGIsYyxkLGUpe2lmKCFkfHxkPT09dGhpcylyZXR1cm4gdm9pZChhLnk9KGU/Yi55bzpiLnkpK2MpO3ZhciBmPWU/Yi54bzpiLngsZz1lP2IueW86Yi55LGg9ZitjKmQueCxpPWcrYypkLnk7YS55PWkrZC5ub3JtYWxTbG9wZSooYS54LWgpfSxzbG9wZTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdG91Y2g6ZnVuY3Rpb24oYSl7YS55VG91Y2hlZD0hMH0sdG91Y2hlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS55VG91Y2hlZH0sdW50b3VjaDpmdW5jdGlvbihhKXthLnlUb3VjaGVkPSExfX07T2JqZWN0LmZyZWV6ZSh4ZiksT2JqZWN0LmZyZWV6ZSh5ZiksVGIucHJvdG90eXBlLmRpc3RhbmNlPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLngqeGYuZGlzdGFuY2UoYSxiLGMsZCkrdGhpcy55KnlmLmRpc3RhbmNlKGEsYixjLGQpfSxUYi5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7aWYoZz1kLmRpc3RhbmNlKGEsYiwhMCwhMCksaD1kLmRpc3RhbmNlKGEsYywhMCwhMCksZT1kLmRpc3RhbmNlKGIsYiwhMSwhMCksZj1kLmRpc3RhbmNlKGMsYywhMSwhMCksaT1NYXRoLmFicyhnKSxqPU1hdGguYWJzKGgpLDA9PT0oaz1pK2opKXJldHVybiB2b2lkIHRoaXMuc2V0UmVsYXRpdmUoYSxhLChlK2YpLzIsZCwhMCk7dGhpcy5zZXRSZWxhdGl2ZShhLGEsKGUqaitmKmkpL2ssZCwhMCl9LFRiLnByb3RvdHlwZS5zZXRSZWxhdGl2ZT1mdW5jdGlvbihhLGIsYyxkLGUpe2Q9ZHx8dGhpczt2YXIgZj1lP2IueG86Yi54LGc9ZT9iLnlvOmIueSxoPWYrYypkLngsaT1nK2MqZC55LGo9ZC5ub3JtYWxTbG9wZSxrPXRoaXMuc2xvcGUsbD1hLngsbT1hLnk7YS54PShrKmwtaipoK2ktbSkvKGstaiksYS55PWsqKGEueC1sKSttfSxUYi5wcm90b3R5cGUudG91Y2g9ZnVuY3Rpb24oYSl7YS54VG91Y2hlZD0hMCxhLnlUb3VjaGVkPSEwfSxWYi5wcm90b3R5cGUubmV4dFRvdWNoZWQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMubmV4dFBvaW50T25Db250b3VyOyFhLnRvdWNoZWQoYikmJmIhPT10aGlzOyliPWIubmV4dFBvaW50T25Db250b3VyO3JldHVybiBifSxWYi5wcm90b3R5cGUucHJldlRvdWNoZWQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMucHJldlBvaW50T25Db250b3VyOyFhLnRvdWNoZWQoYikmJmIhPT10aGlzOyliPWIucHJldlBvaW50T25Db250b3VyO3JldHVybiBifTt2YXIgemY9T2JqZWN0LmZyZWV6ZShuZXcgVmIoMCwwKSksQWY9e2N2Q3V0SW46MTcvMTYsZGVsdGFCYXNlOjksZGVsdGFTaGlmdDouMTI1LGxvb3A6MSxtaW5EaXM6MSxhdXRvRmxpcDohMH07TWIucHJvdG90eXBlLmV4ZWM9ZnVuY3Rpb24oYixjKXtpZihcIm51bWJlclwiIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3IoXCJQb2ludCBzaXplIGlzIG5vdCBhIG51bWJlciFcIik7aWYoISh0aGlzLl9lcnJvclN0YXRlPjIpKXt2YXIgZD10aGlzLmZvbnQsZT10aGlzLl9wcmVwU3RhdGU7aWYoIWV8fGUucHBlbSE9PWMpe3ZhciBmPXRoaXMuX2ZwZ21TdGF0ZTtpZighZil7V2IucHJvdG90eXBlPUFmLGY9dGhpcy5fZnBnbVN0YXRlPW5ldyBXYihcImZwZ21cIixkLnRhYmxlcy5mcGdtKSxmLmZ1bmNzPVtdLGYuZm9udD1kLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgRlBHTS0tLVwiKSxmLnN0ZXA9LTEpO3RyeXtzZihmKX1jYXRjaChhKXtyZXR1cm4gY29uc29sZS5sb2coXCJIaW50aW5nIGVycm9yIGluIEZQR006XCIrYSksdm9pZCh0aGlzLl9lcnJvclN0YXRlPTMpfX1XYi5wcm90b3R5cGU9ZixlPXRoaXMuX3ByZXBTdGF0ZT1uZXcgV2IoXCJwcmVwXCIsZC50YWJsZXMucHJlcCksZS5wcGVtPWM7dmFyIGc9ZC50YWJsZXMuY3Z0O2lmKGcpZm9yKHZhciBoPWUuY3Z0PW5ldyBBcnJheShnLmxlbmd0aCksaT1jL2QudW5pdHNQZXJFbSxqPTA7ajxnLmxlbmd0aDtqKyspaFtqXT1nW2pdKmk7ZWxzZSBlLmN2dD1bXTthLkRFQlVHJiYoY29uc29sZS5sb2coXCItLS1FWEVDIFBSRVAtLS1cIiksZS5zdGVwPS0xKTt0cnl7c2YoZSl9Y2F0Y2goYSl7dGhpcy5fZXJyb3JTdGF0ZTwyJiZjb25zb2xlLmxvZyhcIkhpbnRpbmcgZXJyb3IgaW4gUFJFUDpcIithKSx0aGlzLl9lcnJvclN0YXRlPTJ9fWlmKCEodGhpcy5fZXJyb3JTdGF0ZT4xKSl0cnl7cmV0dXJuIHRmKGIsZSl9Y2F0Y2goYSl7cmV0dXJuIHRoaXMuX2Vycm9yU3RhdGU8MSYmKGNvbnNvbGUubG9nKFwiSGludGluZyBlcnJvcjpcIithKSxjb25zb2xlLmxvZyhcIk5vdGU6IGZ1cnRoZXIgaGludGluZyBlcnJvcnMgYXJlIHNpbGVuY2VkXCIpKSx2b2lkKHRoaXMuX2Vycm9yU3RhdGU9MSl9fX0sdGY9ZnVuY3Rpb24oYixjKXt2YXIgZCxlLGYsZz1jLnBwZW0vYy5mb250LnVuaXRzUGVyRW0saD1nLGk9Yi5jb21wb25lbnRzO2lmKFdiLnByb3RvdHlwZT1jLGkpe3ZhciBqPWMuZm9udDtlPVtdLGQ9W107Zm9yKHZhciBrPTA7azxpLmxlbmd0aDtrKyspe3ZhciBsPWlba10sbT1qLmdseXBocy5nZXQobC5nbHlwaEluZGV4KTtmPW5ldyBXYihcImdseWZcIixtLmluc3RydWN0aW9ucyksYS5ERUJVRyYmKGNvbnNvbGUubG9nKFwiLS0tRVhFQyBDT01QIFwiK2srXCItLS1cIiksZi5zdGVwPS0xKSx1ZihtLGYsZyxoKTtmb3IodmFyIG49TWF0aC5yb3VuZChsLmR4KmcpLG89TWF0aC5yb3VuZChsLmR5KmgpLHA9Zi5nWm9uZSxxPWYuY29udG91cnMscj0wO3I8cC5sZW5ndGg7cisrKXt2YXIgcz1wW3JdO3MueFRvdWNoZWQ9cy55VG91Y2hlZD0hMSxzLnhvPXMueD1zLngrbixzLnlvPXMueT1zLnkrb312YXIgdD1lLmxlbmd0aDtlLnB1c2guYXBwbHkoZSxwKTtmb3IodmFyIHU9MDt1PHEubGVuZ3RoO3UrKylkLnB1c2gocVt1XSt0KX1iLmluc3RydWN0aW9ucyYmIWYuaW5oaWJpdEdyaWRGaXQmJihmPW5ldyBXYihcImdseWZcIixiLmluc3RydWN0aW9ucyksZi5nWm9uZT1mLnowPWYuejE9Zi56Mj1lLGYuY29udG91cnM9ZCxlLnB1c2gobmV3IFZiKDAsMCksbmV3IFZiKE1hdGgucm91bmQoYi5hZHZhbmNlV2lkdGgqZyksMCkpLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgQ09NUE9TSVRFLS0tXCIpLGYuc3RlcD0tMSksc2YoZiksZS5sZW5ndGgtPTIpfWVsc2UgZj1uZXcgV2IoXCJnbHlmXCIsYi5pbnN0cnVjdGlvbnMpLGEuREVCVUcmJihjb25zb2xlLmxvZyhcIi0tLUVYRUMgR0xZUEgtLS1cIiksZi5zdGVwPS0xKSx1ZihiLGYsZyxoKSxlPWYuZ1pvbmU7cmV0dXJuIGV9LHVmPWZ1bmN0aW9uKGIsYyxkLGUpe2Zvcih2YXIgZixnPWIucG9pbnRzfHxbXSxoPWcubGVuZ3RoLGk9Yy5nWm9uZT1jLnowPWMuejE9Yy56Mj1bXSxqPWMuY29udG91cnM9W10saz0wO2s8aDtrKyspZj1nW2tdLGlba109bmV3IFZiKGYueCpkLGYueSplLGYubGFzdFBvaW50T2ZDb250b3VyLGYub25DdXJ2ZSk7Zm9yKHZhciBsLG0sbj0wO248aDtuKyspZj1pW25dLGx8fChsPWYsai5wdXNoKG4pKSxmLmxhc3RQb2ludE9mQ29udG91cj8oZi5uZXh0UG9pbnRPbkNvbnRvdXI9bCxsLnByZXZQb2ludE9uQ29udG91cj1mLGw9dm9pZCAwKToobT1pW24rMV0sZi5uZXh0UG9pbnRPbkNvbnRvdXI9bSxtLnByZXZQb2ludE9uQ29udG91cj1mKTtpZighYy5pbmhpYml0R3JpZEZpdCl7aWYoYS5ERUJVRyl7Y29uc29sZS5sb2coXCJQUk9DRVNTSU5HIEdMWVBIXCIsYy5zdGFjayk7Zm9yKHZhciBvPTA7bzxoO28rKyljb25zb2xlLmxvZyhvLGlbb10ueCxpW29dLnkpfWlmKGkucHVzaChuZXcgVmIoMCwwKSxuZXcgVmIoTWF0aC5yb3VuZChiLmFkdmFuY2VXaWR0aCpkKSwwKSksc2YoYyksaS5sZW5ndGgtPTIsYS5ERUJVRyl7Y29uc29sZS5sb2coXCJGSU5JU0hFRCBHTFlQSFwiLGMuc3RhY2spO2Zvcih2YXIgcD0wO3A8aDtwKyspY29uc29sZS5sb2cocCxpW3BdLngsaVtwXS55KX19fSxzZj1mdW5jdGlvbihiKXt2YXIgYz1iLnByb2c7aWYoYyl7dmFyIGQsZT1jLmxlbmd0aDtmb3IoYi5pcD0wO2IuaXA8ZTtiLmlwKyspe2lmKGEuREVCVUcmJmIuc3RlcCsrLCEoZD1yZltjW2IuaXBdXSkpdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBpbnN0cnVjdGlvbjogMHhcIitOdW1iZXIoY1tiLmlwXSkudG9TdHJpbmcoMTYpKTtkKGIpfX19LHJmPVtaYi5iaW5kKHZvaWQgMCx5ZiksWmIuYmluZCh2b2lkIDAseGYpLCRiLmJpbmQodm9pZCAwLHlmKSwkYi5iaW5kKHZvaWQgMCx4ZiksX2IuYmluZCh2b2lkIDAseWYpLF9iLmJpbmQodm9pZCAwLHhmKSxhYy5iaW5kKHZvaWQgMCwwKSxhYy5iaW5kKHZvaWQgMCwxKSxiYy5iaW5kKHZvaWQgMCwwKSxiYy5iaW5kKHZvaWQgMCwxKSxjYyxkYyxlYyxmYyxnYyxoYyxpYyxqYyxrYyxsYyxtYyxuYyxvYyxwYyxxYyxyYyxzYyx0Yyx1Yyx2Yyx2b2lkIDAsdm9pZCAwLHdjLHhjLHljLHpjLEFjLERjLEVjLHZvaWQgMCx2b2lkIDAsdm9pZCAwLEJjLENjLEZjLHZvaWQgMCxHYy5iaW5kKHZvaWQgMCwwKSxHYy5iaW5kKHZvaWQgMCwxKSxIYy5iaW5kKHZvaWQgMCx5ZiksSGMuYmluZCh2b2lkIDAseGYpLEljLmJpbmQodm9pZCAwLDApLEljLmJpbmQodm9pZCAwLDEpLEpjLmJpbmQodm9pZCAwLDApLEpjLmJpbmQodm9pZCAwLDEpLEtjLmJpbmQodm9pZCAwLDApLEtjLmJpbmQodm9pZCAwLDEpLExjLE1jLE5jLmJpbmQodm9pZCAwLDApLE5jLmJpbmQodm9pZCAwLDEpLE9jLFBjLFFjLmJpbmQodm9pZCAwLDApLFFjLmJpbmQodm9pZCAwLDEpLFJjLFNjLFRjLFVjLFZjLFdjLFhjLmJpbmQodm9pZCAwLDApLFhjLmJpbmQodm9pZCAwLDEpLHZvaWQgMCxZYy5iaW5kKHZvaWQgMCwwKSxZYy5iaW5kKHZvaWQgMCwxKSxaYyx2b2lkIDAsJGMsdm9pZCAwLHZvaWQgMCxfYyxhZCxiZCxjZCxkZCxlZCxmZCxnZCxoZCxpZCxqZCxrZCxsZCxtZC5iaW5kKHZvaWQgMCwxKSxuZCxvZCxwZCxxZCxyZCxzZCx0ZCx1ZCx2ZCx3ZCx4ZC5iaW5kKHZvaWQgMCwwKSx4ZC5iaW5kKHZvaWQgMCwxKSx4ZC5iaW5kKHZvaWQgMCwyKSx4ZC5iaW5kKHZvaWQgMCwzKSx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAseWQsbWQuYmluZCh2b2lkIDAsMiksbWQuYmluZCh2b2lkIDAsMyksemQuYmluZCh2b2lkIDAsMSksemQuYmluZCh2b2lkIDAsMiksemQuYmluZCh2b2lkIDAsMyksQWQsQmQsdm9pZCAwLHZvaWQgMCxDZCx2b2lkIDAsRGQsRWQseGMseGMsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxGZCxHZC5iaW5kKHZvaWQgMCwwKSxHZC5iaW5kKHZvaWQgMCwxKSxIZCx2b2lkIDAsSWQsSmQsS2QsTGQsTWQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsTmQuYmluZCh2b2lkIDAsMSksTmQuYmluZCh2b2lkIDAsMiksTmQuYmluZCh2b2lkIDAsMyksTmQuYmluZCh2b2lkIDAsNCksTmQuYmluZCh2b2lkIDAsNSksTmQuYmluZCh2b2lkIDAsNiksTmQuYmluZCh2b2lkIDAsNyksTmQuYmluZCh2b2lkIDAsOCksT2QuYmluZCh2b2lkIDAsMSksT2QuYmluZCh2b2lkIDAsMiksT2QuYmluZCh2b2lkIDAsMyksT2QuYmluZCh2b2lkIDAsNCksT2QuYmluZCh2b2lkIDAsNSksT2QuYmluZCh2b2lkIDAsNiksT2QuYmluZCh2b2lkIDAsNyksT2QuYmluZCh2b2lkIDAsOCksUGQuYmluZCh2b2lkIDAsMCwwLDAsMCwwKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwwLDEpLFBkLmJpbmQodm9pZCAwLDAsMCwwLDAsMiksUGQuYmluZCh2b2lkIDAsMCwwLDAsMCwzKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwxLDApLFBkLmJpbmQodm9pZCAwLDAsMCwwLDEsMSksUGQuYmluZCh2b2lkIDAsMCwwLDAsMSwyKSxQZC5iaW5kKHZvaWQgMCwwLDAsMCwxLDMpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDAsMCksUGQuYmluZCh2b2lkIDAsMCwwLDEsMCwxKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwwLDIpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDAsMyksUGQuYmluZCh2b2lkIDAsMCwwLDEsMSwwKSxQZC5iaW5kKHZvaWQgMCwwLDAsMSwxLDEpLFBkLmJpbmQodm9pZCAwLDAsMCwxLDEsMiksUGQuYmluZCh2b2lkIDAsMCwwLDEsMSwzKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwwLDApLFBkLmJpbmQodm9pZCAwLDAsMSwwLDAsMSksUGQuYmluZCh2b2lkIDAsMCwxLDAsMCwyKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwwLDMpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDEsMCksUGQuYmluZCh2b2lkIDAsMCwxLDAsMSwxKSxQZC5iaW5kKHZvaWQgMCwwLDEsMCwxLDIpLFBkLmJpbmQodm9pZCAwLDAsMSwwLDEsMyksUGQuYmluZCh2b2lkIDAsMCwxLDEsMCwwKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwwLDEpLFBkLmJpbmQodm9pZCAwLDAsMSwxLDAsMiksUGQuYmluZCh2b2lkIDAsMCwxLDEsMCwzKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwxLDApLFBkLmJpbmQodm9pZCAwLDAsMSwxLDEsMSksUGQuYmluZCh2b2lkIDAsMCwxLDEsMSwyKSxQZC5iaW5kKHZvaWQgMCwwLDEsMSwxLDMpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDAsMCksUGQuYmluZCh2b2lkIDAsMSwwLDAsMCwxKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwwLDIpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDAsMyksUGQuYmluZCh2b2lkIDAsMSwwLDAsMSwwKSxQZC5iaW5kKHZvaWQgMCwxLDAsMCwxLDEpLFBkLmJpbmQodm9pZCAwLDEsMCwwLDEsMiksUGQuYmluZCh2b2lkIDAsMSwwLDAsMSwzKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwwLDApLFBkLmJpbmQodm9pZCAwLDEsMCwxLDAsMSksUGQuYmluZCh2b2lkIDAsMSwwLDEsMCwyKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwwLDMpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDEsMCksUGQuYmluZCh2b2lkIDAsMSwwLDEsMSwxKSxQZC5iaW5kKHZvaWQgMCwxLDAsMSwxLDIpLFBkLmJpbmQodm9pZCAwLDEsMCwxLDEsMyksUGQuYmluZCh2b2lkIDAsMSwxLDAsMCwwKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwwLDEpLFBkLmJpbmQodm9pZCAwLDEsMSwwLDAsMiksUGQuYmluZCh2b2lkIDAsMSwxLDAsMCwzKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwxLDApLFBkLmJpbmQodm9pZCAwLDEsMSwwLDEsMSksUGQuYmluZCh2b2lkIDAsMSwxLDAsMSwyKSxQZC5iaW5kKHZvaWQgMCwxLDEsMCwxLDMpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDAsMCksUGQuYmluZCh2b2lkIDAsMSwxLDEsMCwxKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwwLDIpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDAsMyksUGQuYmluZCh2b2lkIDAsMSwxLDEsMSwwKSxQZC5iaW5kKHZvaWQgMCwxLDEsMSwxLDEpLFBkLmJpbmQodm9pZCAwLDEsMSwxLDEsMiksUGQuYmluZCh2b2lkIDAsMSwxLDEsMSwzKV07dmFyIEJmPUFycmF5LmZyb218fGZ1bmN0aW9uKGEpe3JldHVybiBhLm1hdGNoKC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdP3xbXlxcdUQ4MDAtXFx1REZGRl18Li9nKXx8W119O1FkLnByb3RvdHlwZS5oYXNDaGFyPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09dGhpcy5lbmNvZGluZy5jaGFyVG9HbHlwaEluZGV4KGEpfSxRZC5wcm90b3R5cGUuY2hhclRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lbmNvZGluZy5jaGFyVG9HbHlwaEluZGV4KGEpfSxRZC5wcm90b3R5cGUuY2hhclRvR2x5cGg9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jaGFyVG9HbHlwaEluZGV4KGEpLGM9dGhpcy5nbHlwaHMuZ2V0KGIpO3JldHVybiBjfHwoYz10aGlzLmdseXBocy5nZXQoMCkpLGN9LFFkLnByb3RvdHlwZS5zdHJpbmdUb0dseXBocz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Yj1ifHx0aGlzLmRlZmF1bHRSZW5kZXJPcHRpb25zO2Zvcih2YXIgZD1CZihhKSxlPVtdLGY9MDtmPGQubGVuZ3RoO2YrPTEpe3ZhciBnPWRbZl07ZS5wdXNoKGMuY2hhclRvR2x5cGhJbmRleChnKSl9dmFyIGg9ZS5sZW5ndGg7aWYoYi5mZWF0dXJlcyl7dmFyIGk9Yi5zY3JpcHR8fHRoaXMuc3Vic3RpdHV0aW9uLmdldERlZmF1bHRTY3JpcHROYW1lKCksaj1bXTtiLmZlYXR1cmVzLmxpZ2EmJihqPWouY29uY2F0KHRoaXMuc3Vic3RpdHV0aW9uLmdldEZlYXR1cmUoXCJsaWdhXCIsaSxiLmxhbmd1YWdlKSkpLGIuZmVhdHVyZXMucmxpZyYmKGo9ai5jb25jYXQodGhpcy5zdWJzdGl0dXRpb24uZ2V0RmVhdHVyZShcInJsaWdcIixpLGIubGFuZ3VhZ2UpKSk7Zm9yKHZhciBrPTA7azxoO2srPTEpZm9yKHZhciBsPTA7bDxqLmxlbmd0aDtsKyspe2Zvcih2YXIgbT1qW2xdLG49bS5zdWIsbz1uLmxlbmd0aCxwPTA7cDxvJiZuW3BdPT09ZVtrK3BdOylwKys7cD09PW8mJihlLnNwbGljZShrLG8sbS5ieSksaD1oLW8rMSl9fWZvcih2YXIgcT1uZXcgQXJyYXkoaCkscj10aGlzLmdseXBocy5nZXQoMCkscz0wO3M8aDtzKz0xKXFbc109Yy5nbHlwaHMuZ2V0KGVbc10pfHxyO3JldHVybiBxfSxRZC5wcm90b3R5cGUubmFtZVRvR2x5cGhJbmRleD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nbHlwaE5hbWVzLm5hbWVUb0dseXBoSW5kZXgoYSl9LFFkLnByb3RvdHlwZS5uYW1lVG9HbHlwaD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm5hbWVUb0dseXBoSW5kZXgoYSksYz10aGlzLmdseXBocy5nZXQoYik7cmV0dXJuIGN8fChjPXRoaXMuZ2x5cGhzLmdldCgwKSksY30sUWQucHJvdG90eXBlLmdseXBoSW5kZXhUb05hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ2x5cGhOYW1lcy5nbHlwaEluZGV4VG9OYW1lP3RoaXMuZ2x5cGhOYW1lcy5nbHlwaEluZGV4VG9OYW1lKGEpOlwiXCJ9LFFkLnByb3RvdHlwZS5nZXRLZXJuaW5nVmFsdWU9ZnVuY3Rpb24oYSxiKXthPWEuaW5kZXh8fGEsYj1iLmluZGV4fHxiO3ZhciBjPXRoaXMucG9zaXRpb24uZGVmYXVsdEtlcm5pbmdUYWJsZXM7cmV0dXJuIGM/dGhpcy5wb3NpdGlvbi5nZXRLZXJuaW5nVmFsdWUoYyxhLGIpOnRoaXMua2VybmluZ1BhaXJzW2ErXCIsXCIrYl18fDB9LFFkLnByb3RvdHlwZS5kZWZhdWx0UmVuZGVyT3B0aW9ucz17a2VybmluZzohMCxmZWF0dXJlczp7bGlnYTohMCxybGlnOiEwfX0sUWQucHJvdG90eXBlLmZvckVhY2hHbHlwaD1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9dGhpcztiPXZvaWQgMCE9PWI/YjowLGM9dm9pZCAwIT09Yz9jOjAsZD12b2lkIDAhPT1kP2Q6NzIsZT1lfHx0aGlzLmRlZmF1bHRSZW5kZXJPcHRpb25zO3ZhciBoLGk9MS90aGlzLnVuaXRzUGVyRW0qZCxqPXRoaXMuc3RyaW5nVG9HbHlwaHMoYSxlKTtpZihlLmtlcm5pbmcpe3ZhciBrPWUuc2NyaXB0fHx0aGlzLnBvc2l0aW9uLmdldERlZmF1bHRTY3JpcHROYW1lKCk7aD10aGlzLnBvc2l0aW9uLmdldEtlcm5pbmdUYWJsZXMoayxlLmxhbmd1YWdlKX1mb3IodmFyIGw9MDtsPGoubGVuZ3RoO2wrPTEpe3ZhciBtPWpbbF07aWYoZi5jYWxsKGcsbSxiLGMsZCxlKSxtLmFkdmFuY2VXaWR0aCYmKGIrPW0uYWR2YW5jZVdpZHRoKmkpLGUua2VybmluZyYmbDxqLmxlbmd0aC0xKXtiKz0oaD9nLnBvc2l0aW9uLmdldEtlcm5pbmdWYWx1ZShoLG0uaW5kZXgsaltsKzFdLmluZGV4KTpnLmdldEtlcm5pbmdWYWx1ZShtLGpbbCsxXSkpKml9ZS5sZXR0ZXJTcGFjaW5nP2IrPWUubGV0dGVyU3BhY2luZypkOmUudHJhY2tpbmcmJihiKz1lLnRyYWNraW5nLzFlMypkKX1yZXR1cm4gYn0sUWQucHJvdG90eXBlLmdldFBhdGg9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1uZXcgcjtyZXR1cm4gdGhpcy5mb3JFYWNoR2x5cGgoYSxiLGMsZCxlLGZ1bmN0aW9uKGEsYixjLGQpe3ZhciBnPWEuZ2V0UGF0aChiLGMsZCxlLHRoaXMpO2YuZXh0ZW5kKGcpfSksZn0sUWQucHJvdG90eXBlLmdldFBhdGhzPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9W107cmV0dXJuIHRoaXMuZm9yRWFjaEdseXBoKGEsYixjLGQsZSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZz1hLmdldFBhdGgoYixjLGQsZSx0aGlzKTtmLnB1c2goZyl9KSxmfSxRZC5wcm90b3R5cGUuZ2V0QWR2YW5jZVdpZHRoPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5mb3JFYWNoR2x5cGgoYSwwLDAsYixjLGZ1bmN0aW9uKCl7fSl9LFFkLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmdldFBhdGgoYixjLGQsZSxmKS5kcmF3KGEpfSxRZC5wcm90b3R5cGUuZHJhd1BvaW50cz1mdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5mb3JFYWNoR2x5cGgoYixjLGQsZSxmLGZ1bmN0aW9uKGIsYyxkLGUpe2IuZHJhd1BvaW50cyhhLGMsZCxlKX0pfSxRZC5wcm90b3R5cGUuZHJhd01ldHJpY3M9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZm9yRWFjaEdseXBoKGIsYyxkLGUsZixmdW5jdGlvbihiLGMsZCxlKXtiLmRyYXdNZXRyaWNzKGEsYyxkLGUpfSl9LFFkLnByb3RvdHlwZS5nZXRFbmdsaXNoTmFtZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm5hbWVzW2FdO2lmKGIpcmV0dXJuIGIuZW59LFFkLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXt9ZnVuY3Rpb24gYihiKXt2YXIgZD1jLmdldEVuZ2xpc2hOYW1lKGIpO2EoZCYmZC50cmltKCkubGVuZ3RoPjAsXCJObyBFbmdsaXNoIFwiK2IrXCIgc3BlY2lmaWVkLlwiKX12YXIgYz10aGlzO2IoXCJmb250RmFtaWx5XCIpLGIoXCJ3ZWlnaHROYW1lXCIpLGIoXCJtYW51ZmFjdHVyZXJcIiksYihcImNvcHlyaWdodFwiKSxiKFwidmVyc2lvblwiKSxhKHRoaXMudW5pdHNQZXJFbT4wLFwiTm8gdW5pdHNQZXJFbSBzcGVjaWZpZWQuXCIpfSxRZC5wcm90b3R5cGUudG9UYWJsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gcWYuZm9udFRvVGFibGUodGhpcyl9LFFkLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oXCJGb250LnRvQnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBGb250LnRvQXJyYXlCdWZmZXIgaW5zdGVhZC5cIiksdGhpcy50b0FycmF5QnVmZmVyKCl9LFFkLnByb3RvdHlwZS50b0FycmF5QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMudG9UYWJsZXMoKSxiPWEuZW5jb2RlKCksYz1uZXcgQXJyYXlCdWZmZXIoYi5sZW5ndGgpLGQ9bmV3IFVpbnQ4QXJyYXkoYyksZT0wO2U8Yi5sZW5ndGg7ZSsrKWRbZV09YltlXTtyZXR1cm4gY30sUWQucHJvdG90eXBlLmRvd25sb2FkPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuZ2V0RW5nbGlzaE5hbWUoXCJmb250RmFtaWx5XCIpLGQ9dGhpcy5nZXRFbmdsaXNoTmFtZShcImZvbnRTdWJmYW1pbHlcIik7YT1hfHxjLnJlcGxhY2UoL1xccy9nLFwiXCIpK1wiLVwiK2QrXCIub3RmXCI7dmFyIGU9dGhpcy50b0FycmF5QnVmZmVyKCk7aWYoQmIoKSl3aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW09d2luZG93LnJlcXVlc3RGaWxlU3lzdGVtfHx3aW5kb3cud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0sd2luZG93LnJlcXVlc3RGaWxlU3lzdGVtKHdpbmRvdy5URU1QT1JBUlksZS5ieXRlTGVuZ3RoLGZ1bmN0aW9uKGIpe2Iucm9vdC5nZXRGaWxlKGEse2NyZWF0ZTohMH0sZnVuY3Rpb24oYSl7YS5jcmVhdGVXcml0ZXIoZnVuY3Rpb24oYil7dmFyIGM9bmV3IERhdGFWaWV3KGUpLGQ9bmV3IEJsb2IoW2NdLHt0eXBlOlwiZm9udC9vcGVudHlwZVwifSk7Yi53cml0ZShkKSxiLmFkZEV2ZW50TGlzdGVuZXIoXCJ3cml0ZWVuZFwiLGZ1bmN0aW9uKCl7bG9jYXRpb24uaHJlZj1hLnRvVVJMKCl9LCExKX0pfSl9LGZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihhLm5hbWUrXCI6IFwiK2EubWVzc2FnZSl9KTtlbHNle3ZhciBmPWIoXCJmc1wiKSxnPURiKGUpO2Yud3JpdGVGaWxlU3luYyhhLGcpfX0sUWQucHJvdG90eXBlLmZzU2VsZWN0aW9uVmFsdWVzPXtJVEFMSUM6MSxVTkRFUlNDT1JFOjIsTkVHQVRJVkU6NCxPVVRMSU5FRDo4LFNUUklLRU9VVDoxNixCT0xEOjMyLFJFR1VMQVI6NjQsVVNFUl9UWVBPX01FVFJJQ1M6MTI4LFdXUzoyNTYsT0JMSVFVRTo1MTJ9LFFkLnByb3RvdHlwZS51c1dpZHRoQ2xhc3Nlcz17VUxUUkFfQ09OREVOU0VEOjEsRVhUUkFfQ09OREVOU0VEOjIsQ09OREVOU0VEOjMsU0VNSV9DT05ERU5TRUQ6NCxNRURJVU06NSxTRU1JX0VYUEFOREVEOjYsRVhQQU5ERUQ6NyxFWFRSQV9FWFBBTkRFRDo4LFVMVFJBX0VYUEFOREVEOjl9LFFkLnByb3RvdHlwZS51c1dlaWdodENsYXNzZXM9e1RISU46MTAwLEVYVFJBX0xJR0hUOjIwMCxMSUdIVDozMDAsTk9STUFMOjQwMCxNRURJVU06NTAwLFNFTUlfQk9MRDo2MDAsQk9MRDo3MDAsRVhUUkFfQk9MRDo4MDAsQkxBQ0s6OTAwfTt2YXIgQ2Y9e21ha2U6V2QscGFyc2U6WGR9LERmPW5ldyBBcnJheSgxMCk7RGZbMV09ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldCt0aGlzLnJlbGF0aXZlT2Zmc2V0LGI9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybiAxPT09Yj97cG9zRm9ybWF0OjEsY292ZXJhZ2U6dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksdmFsdWU6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKCl9OjI9PT1iP3tcbnBvc0Zvcm1hdDoyLGNvdmVyYWdlOnRoaXMucGFyc2VQb2ludGVyKFEuY292ZXJhZ2UpLHZhbHVlczp0aGlzLnBhcnNlVmFsdWVSZWNvcmRMaXN0KCl9OnZvaWQgeGUuYXNzZXJ0KCExLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogR1BPUyBsb29rdXAgdHlwZSAxIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIil9LERmWzJdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXQrdGhpcy5yZWxhdGl2ZU9mZnNldCxiPXRoaXMucGFyc2VVU2hvcnQoKTt4ZS5hc3NlcnQoMT09PWJ8fDI9PT1iLFwiMHhcIithLnRvU3RyaW5nKDE2KStcIjogR1BPUyBsb29rdXAgdHlwZSAyIGZvcm1hdCBtdXN0IGJlIDEgb3IgMi5cIik7dmFyIGM9dGhpcy5wYXJzZVBvaW50ZXIoUS5jb3ZlcmFnZSksZD10aGlzLnBhcnNlVVNob3J0KCksZT10aGlzLnBhcnNlVVNob3J0KCk7aWYoMT09PWIpcmV0dXJue3Bvc0Zvcm1hdDpiLGNvdmVyYWdlOmMsdmFsdWVGb3JtYXQxOmQsdmFsdWVGb3JtYXQyOmUscGFpclNldHM6dGhpcy5wYXJzZUxpc3QoUS5wb2ludGVyKFEubGlzdChmdW5jdGlvbigpe3JldHVybntzZWNvbmRHbHlwaDp0aGlzLnBhcnNlVVNob3J0KCksdmFsdWUxOnRoaXMucGFyc2VWYWx1ZVJlY29yZChkKSx2YWx1ZTI6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKGUpfX0pKSl9O2lmKDI9PT1iKXt2YXIgZj10aGlzLnBhcnNlUG9pbnRlcihRLmNsYXNzRGVmKSxnPXRoaXMucGFyc2VQb2ludGVyKFEuY2xhc3NEZWYpLGg9dGhpcy5wYXJzZVVTaG9ydCgpLGk9dGhpcy5wYXJzZVVTaG9ydCgpO3JldHVybntwb3NGb3JtYXQ6Yixjb3ZlcmFnZTpjLHZhbHVlRm9ybWF0MTpkLHZhbHVlRm9ybWF0MjplLGNsYXNzRGVmMTpmLGNsYXNzRGVmMjpnLGNsYXNzMUNvdW50OmgsY2xhc3MyQ291bnQ6aSxjbGFzc1JlY29yZHM6dGhpcy5wYXJzZUxpc3QoaCxRLmxpc3QoaSxmdW5jdGlvbigpe3JldHVybnt2YWx1ZTE6dGhpcy5wYXJzZVZhbHVlUmVjb3JkKGQpLHZhbHVlMjp0aGlzLnBhcnNlVmFsdWVSZWNvcmQoZSl9fSkpfX19LERmWzNdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgMyBub3Qgc3VwcG9ydGVkXCJ9fSxEZls0XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDQgbm90IHN1cHBvcnRlZFwifX0sRGZbNV09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA1IG5vdCBzdXBwb3J0ZWRcIn19LERmWzZdPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgNiBub3Qgc3VwcG9ydGVkXCJ9fSxEZls3XT1mdW5jdGlvbigpe3JldHVybntlcnJvcjpcIkdQT1MgTG9va3VwIDcgbm90IHN1cHBvcnRlZFwifX0sRGZbOF09ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6XCJHUE9TIExvb2t1cCA4IG5vdCBzdXBwb3J0ZWRcIn19LERmWzldPWZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yOlwiR1BPUyBMb29rdXAgOSBub3Qgc3VwcG9ydGVkXCJ9fTt2YXIgRWY9bmV3IEFycmF5KDEwKSxGZj17cGFyc2U6WWQsbWFrZTpaZH0sR2Y9e3BhcnNlOmFlfSxIZj17cGFyc2U6YmV9O2EuRm9udD1RZCxhLkdseXBoPWNhLGEuUGF0aD1yLGEuQm91bmRpbmdCb3g9cSxhLl9wYXJzZT1MZSxhLnBhcnNlPWhlLGEubG9hZD1pZSxhLmxvYWRTeW5jPWplLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSl9KS5jYWxsKHRoaXMsYihcImJ1ZmZlclwiKS5CdWZmZXIpfSx7YnVmZmVyOjMsZnM6Mn1dLDExOltmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZCgpe3Rocm93IG5ldyBFcnJvcihcInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gZSgpe3Rocm93IG5ldyBFcnJvcihcImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBmKGEpe2lmKGw9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGEsMCk7aWYoKGw9PT1kfHwhbCkmJnNldFRpbWVvdXQpcmV0dXJuIGw9c2V0VGltZW91dCxzZXRUaW1lb3V0KGEsMCk7dHJ5e3JldHVybiBsKGEsMCl9Y2F0Y2goYil7dHJ5e3JldHVybiBsLmNhbGwobnVsbCxhLDApfWNhdGNoKGIpe3JldHVybiBsLmNhbGwodGhpcyxhLDApfX19ZnVuY3Rpb24gZyhhKXtpZihtPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoYSk7aWYoKG09PT1lfHwhbSkmJmNsZWFyVGltZW91dClyZXR1cm4gbT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGEpO3RyeXtyZXR1cm4gbShhKX1jYXRjaChiKXt0cnl7cmV0dXJuIG0uY2FsbChudWxsLGEpfWNhdGNoKGIpe3JldHVybiBtLmNhbGwodGhpcyxhKX19fWZ1bmN0aW9uIGgoKXtxJiZvJiYocT0hMSxvLmxlbmd0aD9wPW8uY29uY2F0KHApOnI9LTEscC5sZW5ndGgmJmkoKSl9ZnVuY3Rpb24gaSgpe2lmKCFxKXt2YXIgYT1mKGgpO3E9ITA7Zm9yKHZhciBiPXAubGVuZ3RoO2I7KXtmb3Iobz1wLHA9W107KytyPGI7KW8mJm9bcl0ucnVuKCk7cj0tMSxiPXAubGVuZ3RofW89bnVsbCxxPSExLGcoYSl9fWZ1bmN0aW9uIGooYSxiKXt0aGlzLmZ1bj1hLHRoaXMuYXJyYXk9Yn1mdW5jdGlvbiBrKCl7fXZhciBsLG0sbj1iLmV4cG9ydHM9e307IWZ1bmN0aW9uKCl7dHJ5e2w9XCJmdW5jdGlvblwiPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OmR9Y2F0Y2goYSl7bD1kfXRyeXttPVwiZnVuY3Rpb25cIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6ZX1jYXRjaChhKXttPWV9fSgpO3ZhciBvLHA9W10scT0hMSxyPS0xO24ubmV4dFRpY2s9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYltjLTFdPWFyZ3VtZW50c1tjXTtwLnB1c2gobmV3IGooYSxiKSksMSE9PXAubGVuZ3RofHxxfHxmKGkpfSxqLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxuLnRpdGxlPVwiYnJvd3NlclwiLG4uYnJvd3Nlcj0hMCxuLmVudj17fSxuLmFyZ3Y9W10sbi52ZXJzaW9uPVwiXCIsbi52ZXJzaW9ucz17fSxuLm9uPWssbi5hZGRMaXN0ZW5lcj1rLG4ub25jZT1rLG4ub2ZmPWssbi5yZW1vdmVMaXN0ZW5lcj1rLG4ucmVtb3ZlQWxsTGlzdGVuZXJzPWssbi5lbWl0PWssbi5wcmVwZW5kTGlzdGVuZXI9ayxuLnByZXBlbmRPbmNlTGlzdGVuZXI9ayxuLmxpc3RlbmVycz1mdW5jdGlvbihhKXtyZXR1cm5bXX0sbi5iaW5kaW5nPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpfSxuLmN3ZD1mdW5jdGlvbigpe3JldHVyblwiL1wifSxuLmNoZGlyPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZFwiKX0sbi51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0se31dLDEyOltmdW5jdGlvbihhLGIsYyl7IWZ1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGEmJihhPVN0cmluZyhhKSksL1teYS16MC05XFwtIyQlJicqKy5cXF5fYHx+XS9pLnRlc3QoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lXCIpO3JldHVybiBhLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gYyhhKXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9U3RyaW5nKGEpKSxhfWZ1bmN0aW9uIGQoYSl7dmFyIGI9e25leHQ6ZnVuY3Rpb24oKXt2YXIgYj1hLnNoaWZ0KCk7cmV0dXJue2RvbmU6dm9pZCAwPT09Yix2YWx1ZTpifX19O3JldHVybiByLml0ZXJhYmxlJiYoYltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxifWZ1bmN0aW9uIGUoYSl7dGhpcy5tYXA9e30sYSBpbnN0YW5jZW9mIGU/YS5mb3JFYWNoKGZ1bmN0aW9uKGEsYil7dGhpcy5hcHBlbmQoYixhKX0sdGhpcyk6QXJyYXkuaXNBcnJheShhKT9hLmZvckVhY2goZnVuY3Rpb24oYSl7dGhpcy5hcHBlbmQoYVswXSxhWzFdKX0sdGhpcyk6YSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZm9yRWFjaChmdW5jdGlvbihiKXt0aGlzLmFwcGVuZChiLGFbYl0pfSx0aGlzKX1mdW5jdGlvbiBmKGEpe2lmKGEuYm9keVVzZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoXCJBbHJlYWR5IHJlYWRcIikpO2EuYm9keVVzZWQ9ITB9ZnVuY3Rpb24gZyhhKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYixjKXthLm9ubG9hZD1mdW5jdGlvbigpe2IoYS5yZXN1bHQpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXtjKGEuZXJyb3IpfX0pfWZ1bmN0aW9uIGgoYSl7dmFyIGI9bmV3IEZpbGVSZWFkZXIsYz1nKGIpO3JldHVybiBiLnJlYWRBc0FycmF5QnVmZmVyKGEpLGN9ZnVuY3Rpb24gaShhKXt2YXIgYj1uZXcgRmlsZVJlYWRlcixjPWcoYik7cmV0dXJuIGIucmVhZEFzVGV4dChhKSxjfWZ1bmN0aW9uIGooYSl7Zm9yKHZhciBiPW5ldyBVaW50OEFycmF5KGEpLGM9bmV3IEFycmF5KGIubGVuZ3RoKSxkPTA7ZDxiLmxlbmd0aDtkKyspY1tkXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGJbZF0pO3JldHVybiBjLmpvaW4oXCJcIil9ZnVuY3Rpb24gayhhKXtpZihhLnNsaWNlKXJldHVybiBhLnNsaWNlKDApO3ZhciBiPW5ldyBVaW50OEFycmF5KGEuYnl0ZUxlbmd0aCk7cmV0dXJuIGIuc2V0KG5ldyBVaW50OEFycmF5KGEpKSxiLmJ1ZmZlcn1mdW5jdGlvbiBsKCl7cmV0dXJuIHRoaXMuYm9keVVzZWQ9ITEsdGhpcy5faW5pdEJvZHk9ZnVuY3Rpb24oYSl7aWYodGhpcy5fYm9keUluaXQ9YSxhKWlmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXRoaXMuX2JvZHlUZXh0PWE7ZWxzZSBpZihyLmJsb2ImJkJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkpdGhpcy5fYm9keUJsb2I9YTtlbHNlIGlmKHIuZm9ybURhdGEmJkZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGEpKXRoaXMuX2JvZHlGb3JtRGF0YT1hO2Vsc2UgaWYoci5zZWFyY2hQYXJhbXMmJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKSl0aGlzLl9ib2R5VGV4dD1hLnRvU3RyaW5nKCk7ZWxzZSBpZihyLmFycmF5QnVmZmVyJiZyLmJsb2ImJnQoYSkpdGhpcy5fYm9keUFycmF5QnVmZmVyPWsoYS5idWZmZXIpLHRoaXMuX2JvZHlJbml0PW5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKTtlbHNle2lmKCFyLmFycmF5QnVmZmVyfHwhQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkmJiF1KGEpKXRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIEJvZHlJbml0IHR5cGVcIik7dGhpcy5fYm9keUFycmF5QnVmZmVyPWsoYSl9ZWxzZSB0aGlzLl9ib2R5VGV4dD1cIlwiO3RoaXMuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIil8fChcInN0cmluZ1wiPT10eXBlb2YgYT90aGlzLmhlYWRlcnMuc2V0KFwiY29udGVudC10eXBlXCIsXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLThcIik6dGhpcy5fYm9keUJsb2ImJnRoaXMuX2JvZHlCbG9iLnR5cGU/dGhpcy5oZWFkZXJzLnNldChcImNvbnRlbnQtdHlwZVwiLHRoaXMuX2JvZHlCbG9iLnR5cGUpOnIuc2VhcmNoUGFyYW1zJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYSkmJnRoaXMuaGVhZGVycy5zZXQoXCJjb250ZW50LXR5cGVcIixcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04XCIpKX0sci5ibG9iJiYodGhpcy5ibG9iPWZ1bmN0aW9uKCl7dmFyIGE9Zih0aGlzKTtpZihhKXJldHVybiBhO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcihcImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYlwiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKX0sdGhpcy5hcnJheUJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib2R5QXJyYXlCdWZmZXI/Zih0aGlzKXx8UHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcik6dGhpcy5ibG9iKCkudGhlbihoKX0pLHRoaXMudGV4dD1mdW5jdGlvbigpe3ZhciBhPWYodGhpcyk7aWYoYSlyZXR1cm4gYTtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gaSh0aGlzLl9ib2R5QmxvYik7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUoaih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKFwiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0XCIpO3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpfSxyLmZvcm1EYXRhJiYodGhpcy5mb3JtRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKG8pfSksdGhpcy5qc29uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSl9LHRoaXN9ZnVuY3Rpb24gbShhKXt2YXIgYj1hLnRvVXBwZXJDYXNlKCk7cmV0dXJuIHYuaW5kZXhPZihiKT4tMT9iOmF9ZnVuY3Rpb24gbihhLGIpe2I9Ynx8e307dmFyIGM9Yi5ib2R5O2lmKGEgaW5zdGFuY2VvZiBuKXtpZihhLmJvZHlVc2VkKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBbHJlYWR5IHJlYWRcIik7dGhpcy51cmw9YS51cmwsdGhpcy5jcmVkZW50aWFscz1hLmNyZWRlbnRpYWxzLGIuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgZShhLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1hLm1ldGhvZCx0aGlzLm1vZGU9YS5tb2RlLGN8fG51bGw9PWEuX2JvZHlJbml0fHwoYz1hLl9ib2R5SW5pdCxhLmJvZHlVc2VkPSEwKX1lbHNlIHRoaXMudXJsPVN0cmluZyhhKTtpZih0aGlzLmNyZWRlbnRpYWxzPWIuY3JlZGVudGlhbHN8fHRoaXMuY3JlZGVudGlhbHN8fFwib21pdFwiLCFiLmhlYWRlcnMmJnRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgZShiLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD1tKGIubWV0aG9kfHx0aGlzLm1ldGhvZHx8XCJHRVRcIiksdGhpcy5tb2RlPWIubW9kZXx8dGhpcy5tb2RlfHxudWxsLHRoaXMucmVmZXJyZXI9bnVsbCwoXCJHRVRcIj09PXRoaXMubWV0aG9kfHxcIkhFQURcIj09PXRoaXMubWV0aG9kKSYmYyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHNcIik7dGhpcy5faW5pdEJvZHkoYyl9ZnVuY3Rpb24gbyhhKXt2YXIgYj1uZXcgRm9ybURhdGE7cmV0dXJuIGEudHJpbSgpLnNwbGl0KFwiJlwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBjPWEuc3BsaXQoXCI9XCIpLGQ9Yy5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSxlPWMuam9pbihcIj1cIikucmVwbGFjZSgvXFwrL2csXCIgXCIpO2IuYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChkKSxkZWNvZGVVUklDb21wb25lbnQoZSkpfX0pLGJ9ZnVuY3Rpb24gcChhKXt2YXIgYj1uZXcgZTtyZXR1cm4gYS5zcGxpdCgvXFxyP1xcbi8pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGM9YS5zcGxpdChcIjpcIiksZD1jLnNoaWZ0KCkudHJpbSgpO2lmKGQpe3ZhciBlPWMuam9pbihcIjpcIikudHJpbSgpO2IuYXBwZW5kKGQsZSl9fSksYn1mdW5jdGlvbiBxKGEsYil7Ynx8KGI9e30pLHRoaXMudHlwZT1cImRlZmF1bHRcIix0aGlzLnN0YXR1cz1cInN0YXR1c1wiaW4gYj9iLnN0YXR1czoyMDAsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNUZXh0PVwic3RhdHVzVGV4dFwiaW4gYj9iLnN0YXR1c1RleHQ6XCJPS1wiLHRoaXMuaGVhZGVycz1uZXcgZShiLmhlYWRlcnMpLHRoaXMudXJsPWIudXJsfHxcIlwiLHRoaXMuX2luaXRCb2R5KGEpfWlmKCFhLmZldGNoKXt2YXIgcj17c2VhcmNoUGFyYW1zOlwiVVJMU2VhcmNoUGFyYW1zXCJpbiBhLGl0ZXJhYmxlOlwiU3ltYm9sXCJpbiBhJiZcIml0ZXJhdG9yXCJpbiBTeW1ib2wsYmxvYjpcIkZpbGVSZWFkZXJcImluIGEmJlwiQmxvYlwiaW4gYSYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBCbG9iLCEwfWNhdGNoKGEpe3JldHVybiExfX0oKSxmb3JtRGF0YTpcIkZvcm1EYXRhXCJpbiBhLGFycmF5QnVmZmVyOlwiQXJyYXlCdWZmZXJcImluIGF9O2lmKHIuYXJyYXlCdWZmZXIpdmFyIHM9W1wiW29iamVjdCBJbnQ4QXJyYXldXCIsXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCIsXCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiLFwiW29iamVjdCBJbnQxNkFycmF5XVwiLFwiW29iamVjdCBVaW50MTZBcnJheV1cIixcIltvYmplY3QgSW50MzJBcnJheV1cIixcIltvYmplY3QgVWludDMyQXJyYXldXCIsXCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIixcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiXSx0PWZ1bmN0aW9uKGEpe3JldHVybiBhJiZEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihhKX0sdT1BcnJheUJ1ZmZlci5pc1ZpZXd8fGZ1bmN0aW9uKGEpe3JldHVybiBhJiZzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpKT4tMX07ZS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGEsZCl7YT1iKGEpLGQ9YyhkKTt2YXIgZT10aGlzLm1hcFthXTt0aGlzLm1hcFthXT1lP2UrXCIsXCIrZDpkfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMubWFwW2IoYSldfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YihhKSx0aGlzLmhhcyhhKT90aGlzLm1hcFthXTpudWxsfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KGIoYSkpfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxkKXt0aGlzLm1hcFtiKGEpXT1jKGQpfSxlLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjIGluIHRoaXMubWFwKXRoaXMubWFwLmhhc093blByb3BlcnR5KGMpJiZhLmNhbGwoYix0aGlzLm1hcFtjXSxjLHRoaXMpfSxlLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihiLGMpe2EucHVzaChjKX0pLGQoYSl9LGUucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oYil7YS5wdXNoKGIpfSksZChhKX0sZS5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oYixjKXthLnB1c2goW2MsYl0pfSksZChhKX0sci5pdGVyYWJsZSYmKGUucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09ZS5wcm90b3R5cGUuZW50cmllcyk7dmFyIHY9W1wiREVMRVRFXCIsXCJHRVRcIixcIkhFQURcIixcIk9QVElPTlNcIixcIlBPU1RcIixcIlBVVFwiXTtuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHtib2R5OnRoaXMuX2JvZHlJbml0fSl9LGwuY2FsbChuLnByb3RvdHlwZSksbC5jYWxsKHEucHJvdG90eXBlKSxxLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcSh0aGlzLl9ib2R5SW5pdCx7c3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dGhpcy5zdGF0dXNUZXh0LGhlYWRlcnM6bmV3IGUodGhpcy5oZWFkZXJzKSx1cmw6dGhpcy51cmx9KX0scS5lcnJvcj1mdW5jdGlvbigpe3ZhciBhPW5ldyBxKG51bGwse3N0YXR1czowLHN0YXR1c1RleHQ6XCJcIn0pO3JldHVybiBhLnR5cGU9XCJlcnJvclwiLGF9O3ZhciB3PVszMDEsMzAyLDMwMywzMDcsMzA4XTtxLnJlZGlyZWN0PWZ1bmN0aW9uKGEsYil7aWYoLTE9PT13LmluZGV4T2YoYikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHN0YXR1cyBjb2RlXCIpO3JldHVybiBuZXcgcShudWxsLHtzdGF0dXM6YixoZWFkZXJzOntsb2NhdGlvbjphfX0pfSxhLkhlYWRlcnM9ZSxhLlJlcXVlc3Q9bixhLlJlc3BvbnNlPXEsYS5mZXRjaD1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLGQpe3ZhciBlPW5ldyBuKGEsYiksZj1uZXcgWE1MSHR0cFJlcXVlc3Q7Zi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgYT17c3RhdHVzOmYuc3RhdHVzLHN0YXR1c1RleHQ6Zi5zdGF0dXNUZXh0LGhlYWRlcnM6cChmLmdldEFsbFJlc3BvbnNlSGVhZGVycygpfHxcIlwiKX07YS51cmw9XCJyZXNwb25zZVVSTFwiaW4gZj9mLnJlc3BvbnNlVVJMOmEuaGVhZGVycy5nZXQoXCJYLVJlcXVlc3QtVVJMXCIpO3ZhciBiPVwicmVzcG9uc2VcImluIGY/Zi5yZXNwb25zZTpmLnJlc3BvbnNlVGV4dDtjKG5ldyBxKGIsYSkpfSxmLm9uZXJyb3I9ZnVuY3Rpb24oKXtkKG5ldyBUeXBlRXJyb3IoXCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkXCIpKX0sZi5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtkKG5ldyBUeXBlRXJyb3IoXCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkXCIpKX0sZi5vcGVuKGUubWV0aG9kLGUudXJsLCEwKSxcImluY2x1ZGVcIj09PWUuY3JlZGVudGlhbHMmJihmLndpdGhDcmVkZW50aWFscz0hMCksXCJyZXNwb25zZVR5cGVcImluIGYmJnIuYmxvYiYmKGYucmVzcG9uc2VUeXBlPVwiYmxvYlwiKSxlLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihhLGIpe2Yuc2V0UmVxdWVzdEhlYWRlcihiLGEpfSksZi5zZW5kKHZvaWQgMD09PWUuX2JvZHlJbml0P251bGw6ZS5fYm9keUluaXQpfSl9LGEuZmV0Y2gucG9seWZpbGw9ITB9fShcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpfSx7fV0sMTM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9jb3JlL21haW5cIik7YShcIi4vY29yZS9jb25zdGFudHNcIiksYShcIi4vY29yZS9lbnZpcm9ubWVudFwiKSxhKFwiLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksYShcIi4vY29yZS9oZWxwZXJzXCIpLGEoXCIuL2NvcmUvbGVnYWN5XCIpLGEoXCIuL2NvcmUvcDUuRWxlbWVudFwiKSxhKFwiLi9jb3JlL3A1LkdyYXBoaWNzXCIpLGEoXCIuL2NvcmUvcDUuUmVuZGVyZXJcIiksYShcIi4vY29yZS9wNS5SZW5kZXJlcjJEXCIpLGEoXCIuL2NvcmUvcmVuZGVyaW5nXCIpLGEoXCIuL2NvcmUvc2hpbVwiKSxhKFwiLi9jb3JlL3N0cnVjdHVyZVwiKSxhKFwiLi9jb3JlL3RyYW5zZm9ybVwiKSxhKFwiLi9jb3JlL3NoYXBlLzJkX3ByaW1pdGl2ZXNcIiksYShcIi4vY29yZS9zaGFwZS9hdHRyaWJ1dGVzXCIpLGEoXCIuL2NvcmUvc2hhcGUvY3VydmVzXCIpLGEoXCIuL2NvcmUvc2hhcGUvdmVydGV4XCIpLGEoXCIuL2NvbG9yL2NvbG9yX2NvbnZlcnNpb25cIiksYShcIi4vY29sb3IvY3JlYXRpbmdfcmVhZGluZ1wiKSxhKFwiLi9jb2xvci9wNS5Db2xvclwiKSxhKFwiLi9jb2xvci9zZXR0aW5nXCIpLGEoXCIuL2RhdGEvcDUuVHlwZWREaWN0XCIpLGEoXCIuL2V2ZW50cy9hY2NlbGVyYXRpb25cIiksYShcIi4vZXZlbnRzL2tleWJvYXJkXCIpLGEoXCIuL2V2ZW50cy9tb3VzZVwiKSxhKFwiLi9ldmVudHMvdG91Y2hcIiksYShcIi4vaW1hZ2UvZmlsdGVyc1wiKSxhKFwiLi9pbWFnZS9pbWFnZVwiKSxhKFwiLi9pbWFnZS9sb2FkaW5nX2Rpc3BsYXlpbmdcIiksYShcIi4vaW1hZ2UvcDUuSW1hZ2VcIiksYShcIi4vaW1hZ2UvcGl4ZWxzXCIpLGEoXCIuL2lvL2ZpbGVzXCIpLGEoXCIuL2lvL3A1LlRhYmxlXCIpLGEoXCIuL2lvL3A1LlRhYmxlUm93XCIpLGEoXCIuL2lvL3A1LlhNTFwiKSxhKFwiLi9tYXRoL2NhbGN1bGF0aW9uXCIpLGEoXCIuL21hdGgvbWF0aFwiKSxhKFwiLi9tYXRoL25vaXNlXCIpLGEoXCIuL21hdGgvcDUuVmVjdG9yXCIpLGEoXCIuL21hdGgvcmFuZG9tXCIpLGEoXCIuL21hdGgvdHJpZ29ub21ldHJ5XCIpLGEoXCIuL3R5cG9ncmFwaHkvYXR0cmlidXRlc1wiKSxhKFwiLi90eXBvZ3JhcGh5L2xvYWRpbmdfZGlzcGxheWluZ1wiKSxhKFwiLi90eXBvZ3JhcGh5L3A1LkZvbnRcIiksYShcIi4vdXRpbGl0aWVzL2FycmF5X2Z1bmN0aW9uc1wiKSxhKFwiLi91dGlsaXRpZXMvY29udmVyc2lvblwiKSxhKFwiLi91dGlsaXRpZXMvc3RyaW5nX2Z1bmN0aW9uc1wiKSxhKFwiLi91dGlsaXRpZXMvdGltZV9kYXRlXCIpLGEoXCIuL3dlYmdsLzNkX3ByaW1pdGl2ZXNcIiksYShcIi4vd2ViZ2wvaW50ZXJhY3Rpb25cIiksYShcIi4vd2ViZ2wvbGlnaHRcIiksYShcIi4vd2ViZ2wvbG9hZGluZ1wiKSxhKFwiLi93ZWJnbC9tYXRlcmlhbFwiKSxhKFwiLi93ZWJnbC9wNS5DYW1lcmFcIiksYShcIi4vd2ViZ2wvcDUuR2VvbWV0cnlcIiksYShcIi4vd2ViZ2wvcDUuTWF0cml4XCIpLGEoXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuSW1tZWRpYXRlXCIpLGEoXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0xcIiksYShcIi4vd2ViZ2wvcDUuUmVuZGVyZXJHTC5SZXRhaW5lZFwiKSxhKFwiLi93ZWJnbC9wNS5TaGFkZXJcIiksYShcIi4vd2ViZ2wvcDUuVGV4dHVyZVwiKSxhKFwiLi93ZWJnbC90ZXh0XCIpLGEoXCIuL2NvcmUvaW5pdFwiKSxiLmV4cG9ydHM9ZH0se1wiLi9jb2xvci9jb2xvcl9jb252ZXJzaW9uXCI6MTQsXCIuL2NvbG9yL2NyZWF0aW5nX3JlYWRpbmdcIjoxNSxcIi4vY29sb3IvcDUuQ29sb3JcIjoxNixcIi4vY29sb3Ivc2V0dGluZ1wiOjE3LFwiLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi9jb3JlL2Vudmlyb25tZW50XCI6MTksXCIuL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi9jb3JlL2hlbHBlcnNcIjoyMSxcIi4vY29yZS9pbml0XCI6MjIsXCIuL2NvcmUvbGVnYWN5XCI6MjMsXCIuL2NvcmUvbWFpblwiOjI0LFwiLi9jb3JlL3A1LkVsZW1lbnRcIjoyNSxcIi4vY29yZS9wNS5HcmFwaGljc1wiOjI2LFwiLi9jb3JlL3A1LlJlbmRlcmVyXCI6MjcsXCIuL2NvcmUvcDUuUmVuZGVyZXIyRFwiOjI4LFwiLi9jb3JlL3JlbmRlcmluZ1wiOjI5LFwiLi9jb3JlL3NoYXBlLzJkX3ByaW1pdGl2ZXNcIjozMCxcIi4vY29yZS9zaGFwZS9hdHRyaWJ1dGVzXCI6MzEsXCIuL2NvcmUvc2hhcGUvY3VydmVzXCI6MzIsXCIuL2NvcmUvc2hhcGUvdmVydGV4XCI6MzMsXCIuL2NvcmUvc2hpbVwiOjM0LFwiLi9jb3JlL3N0cnVjdHVyZVwiOjM1LFwiLi9jb3JlL3RyYW5zZm9ybVwiOjM2LFwiLi9kYXRhL3A1LlR5cGVkRGljdFwiOjM3LFwiLi9ldmVudHMvYWNjZWxlcmF0aW9uXCI6MzgsXCIuL2V2ZW50cy9rZXlib2FyZFwiOjM5LFwiLi9ldmVudHMvbW91c2VcIjo0MCxcIi4vZXZlbnRzL3RvdWNoXCI6NDEsXCIuL2ltYWdlL2ZpbHRlcnNcIjo0MixcIi4vaW1hZ2UvaW1hZ2VcIjo0MyxcIi4vaW1hZ2UvbG9hZGluZ19kaXNwbGF5aW5nXCI6NDQsXCIuL2ltYWdlL3A1LkltYWdlXCI6NDUsXCIuL2ltYWdlL3BpeGVsc1wiOjQ2LFwiLi9pby9maWxlc1wiOjQ3LFwiLi9pby9wNS5UYWJsZVwiOjQ4LFwiLi9pby9wNS5UYWJsZVJvd1wiOjQ5LFwiLi9pby9wNS5YTUxcIjo1MCxcIi4vbWF0aC9jYWxjdWxhdGlvblwiOjUxLFwiLi9tYXRoL21hdGhcIjo1MixcIi4vbWF0aC9ub2lzZVwiOjUzLFwiLi9tYXRoL3A1LlZlY3RvclwiOjU0LFwiLi9tYXRoL3JhbmRvbVwiOjU1LFwiLi9tYXRoL3RyaWdvbm9tZXRyeVwiOjU2LFwiLi90eXBvZ3JhcGh5L2F0dHJpYnV0ZXNcIjo1NyxcIi4vdHlwb2dyYXBoeS9sb2FkaW5nX2Rpc3BsYXlpbmdcIjo1OCxcIi4vdHlwb2dyYXBoeS9wNS5Gb250XCI6NTksXCIuL3V0aWxpdGllcy9hcnJheV9mdW5jdGlvbnNcIjo2MCxcIi4vdXRpbGl0aWVzL2NvbnZlcnNpb25cIjo2MSxcIi4vdXRpbGl0aWVzL3N0cmluZ19mdW5jdGlvbnNcIjo2MixcIi4vdXRpbGl0aWVzL3RpbWVfZGF0ZVwiOjYzLFwiLi93ZWJnbC8zZF9wcmltaXRpdmVzXCI6NjQsXCIuL3dlYmdsL2ludGVyYWN0aW9uXCI6NjUsXCIuL3dlYmdsL2xpZ2h0XCI6NjYsXCIuL3dlYmdsL2xvYWRpbmdcIjo2NyxcIi4vd2ViZ2wvbWF0ZXJpYWxcIjo2OCxcIi4vd2ViZ2wvcDUuQ2FtZXJhXCI6NjksXCIuL3dlYmdsL3A1Lkdlb21ldHJ5XCI6NzAsXCIuL3dlYmdsL3A1Lk1hdHJpeFwiOjcxLFwiLi93ZWJnbC9wNS5SZW5kZXJlckdMXCI6NzQsXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuSW1tZWRpYXRlXCI6NzIsXCIuL3dlYmdsL3A1LlJlbmRlcmVyR0wuUmV0YWluZWRcIjo3MyxcIi4vd2ViZ2wvcDUuU2hhZGVyXCI6NzUsXCIuL3dlYmdsL3A1LlRleHR1cmVcIjo3NixcIi4vd2ViZ2wvdGV4dFwiOjc3fV0sMTQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuQ29sb3JDb252ZXJzaW9uPXt9LGQuQ29sb3JDb252ZXJzaW9uLl9oc2JhVG9IU0xBPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGQ9YVsyXSxlPSgyLWMpKmQvMjtyZXR1cm4gMCE9PWUmJigxPT09ZT9jPTA6ZTwuNT9jLz0yLWM6Yz1jKmQvKDItMiplKSksW2IsYyxlLGFbM11dfSxkLkNvbG9yQ29udmVyc2lvbi5faHNiYVRvUkdCQT1mdW5jdGlvbihhKXt2YXIgYj02KmFbMF0sYz1hWzFdLGQ9YVsyXSxlPVtdO2lmKDA9PT1jKWU9W2QsZCxkLGFbM11dO2Vsc2V7dmFyIGYsZyxoLGk9TWF0aC5mbG9vcihiKSxqPWQqKDEtYyksaz1kKigxLWMqKGItaSkpLGw9ZCooMS1jKigxK2ktYikpOzE9PT1pPyhmPWssZz1kLGg9aik6Mj09PWk/KGY9aixnPWQsaD1sKTozPT09aT8oZj1qLGc9ayxoPWQpOjQ9PT1pPyhmPWwsZz1qLGg9ZCk6NT09PWk/KGY9ZCxnPWosaD1rKTooZj1kLGc9bCxoPWopLGU9W2YsZyxoLGFbM11dfXJldHVybiBlfSxkLkNvbG9yQ29udmVyc2lvbi5faHNsYVRvSFNCQT1mdW5jdGlvbihhKXt2YXIgYixjPWFbMF0sZD1hWzFdLGU9YVsyXTtyZXR1cm4gYj1lPC41PygxK2QpKmU6ZStkLWUqZCxkPTIqKGItZSkvYixbYyxkLGIsYVszXV19LGQuQ29sb3JDb252ZXJzaW9uLl9oc2xhVG9SR0JBPWZ1bmN0aW9uKGEpe3ZhciBiPTYqYVswXSxjPWFbMV0sZD1hWzJdLGU9W107aWYoMD09PWMpZT1bZCxkLGQsYVszXV07ZWxzZXt2YXIgZjtmPWQ8LjU/KDErYykqZDpkK2MtZCpjO3ZhciBnPTIqZC1mLGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhPDA/YSs9NjphPj02JiYoYS09NiksYTwxP2IrKGMtYikqYTphPDM/YzphPDQ/YisoYy1iKSooNC1hKTpifTtlPVtoKGIrMixnLGYpLGgoYixnLGYpLGgoYi0yLGcsZiksYVszXV19cmV0dXJuIGV9LGQuQ29sb3JDb252ZXJzaW9uLl9yZ2JhVG9IU0JBPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hWzBdLGU9YVsxXSxmPWFbMl0sZz1NYXRoLm1heChkLGUsZiksaD1nLU1hdGgubWluKGQsZSxmKTtyZXR1cm4gMD09PWg/KGI9MCxjPTApOihjPWgvZyxkPT09Zz9iPShlLWYpL2g6ZT09PWc/Yj0yKyhmLWQpL2g6Zj09PWcmJihiPTQrKGQtZSkvaCksYjwwP2IrPTY6Yj49NiYmKGItPTYpKSxbYi82LGMsZyxhWzNdXX0sZC5Db2xvckNvbnZlcnNpb24uX3JnYmFUb0hTTEE9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPWFbMF0sZT1hWzFdLGY9YVsyXSxnPU1hdGgubWF4KGQsZSxmKSxoPU1hdGgubWluKGQsZSxmKSxpPWcraCxqPWctaDtyZXR1cm4gMD09PWo/KGI9MCxjPTApOihjPWk8MT9qL2k6ai8oMi1pKSxkPT09Zz9iPShlLWYpL2o6ZT09PWc/Yj0yKyhmLWQpL2o6Zj09PWcmJihiPTQrKGQtZSkvaiksYjwwP2IrPTY6Yj49NiYmKGItPTYpKSxbYi82LGMsaS8yLGFbM11dfSxiLmV4cG9ydHM9ZC5Db2xvckNvbnZlcnNpb259LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMTU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuL3A1LkNvbG9yXCIpLGEoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUuYWxwaGE9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImFscGhhXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRBbHBoYSgpfSxkLnByb3RvdHlwZS5ibHVlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJibHVlXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRCbHVlKCl9LGQucHJvdG90eXBlLmJyaWdodG5lc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJyaWdodG5lc3NcIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldEJyaWdodG5lc3MoKX0sZC5wcm90b3R5cGUuY29sb3I9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjb2xvclwiLGFyZ3VtZW50cyksYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkLkNvbG9yKXJldHVybiBhcmd1bWVudHNbMF07dmFyIGE9YXJndW1lbnRzWzBdaW5zdGFuY2VvZiBBcnJheT9hcmd1bWVudHNbMF06YXJndW1lbnRzO3JldHVybiBuZXcgZC5Db2xvcih0aGlzLGEpfSxkLnByb3RvdHlwZS5ncmVlbj1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZ3JlZW5cIixhcmd1bWVudHMpLHRoaXMuY29sb3IoYSkuX2dldEdyZWVuKCl9LGQucHJvdG90eXBlLmh1ZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaHVlXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRIdWUoKX0sZC5wcm90b3R5cGUubGVycENvbG9yPWZ1bmN0aW9uKGEsYixjKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsZXJwQ29sb3JcIixhcmd1bWVudHMpO3ZhciBmLGcsaCxpLGosayxsPXRoaXMuX2NvbG9yTW9kZSxtPXRoaXMuX2NvbG9yTWF4ZXM7aWYobD09PWUuUkdCKWo9YS5sZXZlbHMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLzI1NX0pLGs9Yi5sZXZlbHMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLzI1NX0pO2Vsc2UgaWYobD09PWUuSFNCKWEuX2dldEJyaWdodG5lc3MoKSxiLl9nZXRCcmlnaHRuZXNzKCksaj1hLmhzYmEsaz1iLmhzYmE7ZWxzZXtpZihsIT09ZS5IU0wpdGhyb3cgbmV3IEVycm9yKGwrXCJjYW5ub3QgYmUgdXNlZCBmb3IgaW50ZXJwb2xhdGlvbi5cIik7YS5fZ2V0TGlnaHRuZXNzKCksYi5fZ2V0TGlnaHRuZXNzKCksaj1hLmhzbGEsaz1iLmhzbGF9cmV0dXJuIGM9TWF0aC5tYXgoTWF0aC5taW4oYywxKSwwKSx2b2lkIDA9PT10aGlzLmxlcnAmJih0aGlzLmxlcnA9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjKihiLWEpK2F9KSxmPXRoaXMubGVycChqWzBdLGtbMF0sYyksZz10aGlzLmxlcnAoalsxXSxrWzFdLGMpLGg9dGhpcy5sZXJwKGpbMl0sa1syXSxjKSxpPXRoaXMubGVycChqWzNdLGtbM10sYyksZio9bVtsXVswXSxnKj1tW2xdWzFdLGgqPW1bbF1bMl0saSo9bVtsXVszXSx0aGlzLmNvbG9yKGYsZyxoLGkpfSxkLnByb3RvdHlwZS5saWdodG5lc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImxpZ2h0bmVzc1wiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0TGlnaHRuZXNzKCl9LGQucHJvdG90eXBlLnJlZD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicmVkXCIsYXJndW1lbnRzKSx0aGlzLmNvbG9yKGEpLl9nZXRSZWQoKX0sZC5wcm90b3R5cGUuc2F0dXJhdGlvbj1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F0dXJhdGlvblwiLGFyZ3VtZW50cyksdGhpcy5jb2xvcihhKS5fZ2V0U2F0dXJhdGlvbigpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LkNvbG9yXCI6MTZ9XSwxNjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIiksZj1hKFwiLi9jb2xvcl9jb252ZXJzaW9uXCIpO2QuQ29sb3I9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLl9zdG9yZU1vZGVBbmRNYXhlcyhhLl9jb2xvck1vZGUsYS5fY29sb3JNYXhlcyksdGhpcy5tb2RlIT09ZS5SR0ImJnRoaXMubW9kZSE9PWUuSFNMJiZ0aGlzLm1vZGUhPT1lLkhTQil0aHJvdyBuZXcgRXJyb3IodGhpcy5tb2RlK1wiIGlzIGFuIGludmFsaWQgY29sb3JNb2RlLlwiKTtyZXR1cm4gdGhpcy5fYXJyYXk9ZC5Db2xvci5fcGFyc2VJbnB1dHMuYXBwbHkodGhpcyxiKSx0aGlzLl9jYWxjdWxhdGVMZXZlbHMoKSx0aGlzfSxkLkNvbG9yLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihhKXt0aGlzLmhzYmF8fCh0aGlzLmhzYmE9Zi5fcmdiYVRvSFNCQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNsYXx8KHRoaXMuaHNsYT1mLl9yZ2JhVG9IU0xBKHRoaXMuX2FycmF5KSk7dmFyIGI9dGhpcy5sZXZlbHMsYz10aGlzLl9hcnJheSxkPWNbM107c3dpdGNoKGEpe2Nhc2VcIiNycmdnYmJcIjpyZXR1cm5cIiNcIi5jb25jYXQoYlswXTwxNj9cIjBcIi5jb25jYXQoYlswXS50b1N0cmluZygxNikpOmJbMF0udG9TdHJpbmcoMTYpLGJbMV08MTY/XCIwXCIuY29uY2F0KGJbMV0udG9TdHJpbmcoMTYpKTpiWzFdLnRvU3RyaW5nKDE2KSxiWzJdPDE2P1wiMFwiLmNvbmNhdChiWzJdLnRvU3RyaW5nKDE2KSk6YlsyXS50b1N0cmluZygxNikpO2Nhc2VcIiNycmdnYmJhYVwiOnJldHVyblwiI1wiLmNvbmNhdChiWzBdPDE2P1wiMFwiLmNvbmNhdChiWzBdLnRvU3RyaW5nKDE2KSk6YlswXS50b1N0cmluZygxNiksYlsxXTwxNj9cIjBcIi5jb25jYXQoYlsxXS50b1N0cmluZygxNikpOmJbMV0udG9TdHJpbmcoMTYpLGJbMl08MTY/XCIwXCIuY29uY2F0KGJbMl0udG9TdHJpbmcoMTYpKTpiWzJdLnRvU3RyaW5nKDE2KSxiWzNdPDE2P1wiMFwiLmNvbmNhdChiWzJdLnRvU3RyaW5nKDE2KSk6YlszXS50b1N0cmluZygxNikpO2Nhc2VcIiNyZ2JcIjpyZXR1cm5cIiNcIi5jb25jYXQoTWF0aC5yb3VuZCgxNSpjWzBdKS50b1N0cmluZygxNiksTWF0aC5yb3VuZCgxNSpjWzFdKS50b1N0cmluZygxNiksTWF0aC5yb3VuZCgxNSpjWzJdKS50b1N0cmluZygxNikpO2Nhc2VcIiNyZ2JhXCI6cmV0dXJuXCIjXCIuY29uY2F0KE1hdGgucm91bmQoMTUqY1swXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1sxXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1syXSkudG9TdHJpbmcoMTYpLE1hdGgucm91bmQoMTUqY1szXSkudG9TdHJpbmcoMTYpKTtjYXNlXCJyZ2JcIjpyZXR1cm5cInJnYihcIi5jb25jYXQoYlswXSxcIiwgXCIsYlsxXSxcIiwgXCIsYlsyXSxcIilcIik7Y2FzZVwicmdiJVwiOnJldHVyblwicmdiKFwiLmNvbmNhdCgoMTAwKmNbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1syXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJyZ2JhJVwiOnJldHVyblwicmdiYShcIi5jb25jYXQoKDEwMCpjWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqY1sxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKmNbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpjWzNdKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcImhzYlwiOmNhc2VcImhzdlwiOnJldHVyblwiaHNiKFwiLmNvbmNhdCh0aGlzLmhzYmFbMF0qdGhpcy5tYXhlc1tlLkhTQl1bMF0sXCIsIFwiLHRoaXMuaHNiYVsxXSp0aGlzLm1heGVzW2UuSFNCXVsxXSxcIiwgXCIsdGhpcy5oc2JhWzJdKnRoaXMubWF4ZXNbZS5IU0JdWzJdLFwiKVwiKTtjYXNlXCJoc2IlXCI6Y2FzZVwiaHN2JVwiOnJldHVyblwiaHNiKFwiLmNvbmNhdCgoMTAwKnRoaXMuaHNiYVswXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNiYVsxXSkudG9QcmVjaXNpb24oMyksXCIlLCBcIiwoMTAwKnRoaXMuaHNiYVsyXSkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJoc2JhXCI6Y2FzZVwiaHN2YVwiOnJldHVyblwiaHNiYShcIi5jb25jYXQodGhpcy5oc2JhWzBdKnRoaXMubWF4ZXNbZS5IU0JdWzBdLFwiLCBcIix0aGlzLmhzYmFbMV0qdGhpcy5tYXhlc1tlLkhTQl1bMV0sXCIsIFwiLHRoaXMuaHNiYVsyXSp0aGlzLm1heGVzW2UuSFNCXVsyXSxcIiwgXCIsZCxcIilcIik7Y2FzZVwiaHNiYSVcIjpjYXNlXCJoc3ZhJVwiOnJldHVyblwiaHNiYShcIi5jb25jYXQoKDEwMCp0aGlzLmhzYmFbMF0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMV0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCp0aGlzLmhzYmFbMl0pLnRvUHJlY2lzaW9uKDMpLFwiJSwgXCIsKDEwMCpkKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcImhzbFwiOnJldHVyblwiaHNsKFwiLmNvbmNhdCh0aGlzLmhzbGFbMF0qdGhpcy5tYXhlc1tlLkhTTF1bMF0sXCIsIFwiLHRoaXMuaHNsYVsxXSp0aGlzLm1heGVzW2UuSFNMXVsxXSxcIiwgXCIsdGhpcy5oc2xhWzJdKnRoaXMubWF4ZXNbZS5IU0xdWzJdLFwiKVwiKTtjYXNlXCJoc2wlXCI6cmV0dXJuXCJoc2woXCIuY29uY2F0KCgxMDAqdGhpcy5oc2xhWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzJdKS50b1ByZWNpc2lvbigzKSxcIiUpXCIpO2Nhc2VcImhzbGFcIjpyZXR1cm5cImhzbGEoXCIuY29uY2F0KHRoaXMuaHNsYVswXSp0aGlzLm1heGVzW2UuSFNMXVswXSxcIiwgXCIsdGhpcy5oc2xhWzFdKnRoaXMubWF4ZXNbZS5IU0xdWzFdLFwiLCBcIix0aGlzLmhzbGFbMl0qdGhpcy5tYXhlc1tlLkhTTF1bMl0sXCIsIFwiLGQsXCIpXCIpO2Nhc2VcImhzbGElXCI6cmV0dXJuXCJoc2woXCIuY29uY2F0KCgxMDAqdGhpcy5oc2xhWzBdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzFdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqdGhpcy5oc2xhWzJdKS50b1ByZWNpc2lvbigzKSxcIiUsIFwiLCgxMDAqZCkudG9QcmVjaXNpb24oMyksXCIlKVwiKTtjYXNlXCJyZ2JhXCI6ZGVmYXVsdDpyZXR1cm5cInJnYmEoXCIrYlswXStcIixcIitiWzFdK1wiLFwiK2JbMl0rXCIsXCIrZCtcIilcIn19LGQuQ29sb3IucHJvdG90eXBlLnNldFJlZD1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVswXT1hL3RoaXMubWF4ZXNbZS5SR0JdWzBdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5zZXRHcmVlbj1mdW5jdGlvbihhKXt0aGlzLl9hcnJheVsxXT1hL3RoaXMubWF4ZXNbZS5SR0JdWzFdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5zZXRCbHVlPWZ1bmN0aW9uKGEpe3RoaXMuX2FycmF5WzJdPWEvdGhpcy5tYXhlc1tlLlJHQl1bMl0sdGhpcy5fY2FsY3VsYXRlTGV2ZWxzKCl9LGQuQ29sb3IucHJvdG90eXBlLnNldEFscGhhPWZ1bmN0aW9uKGEpe3RoaXMuX2FycmF5WzNdPWEvdGhpcy5tYXhlc1t0aGlzLm1vZGVdWzNdLHRoaXMuX2NhbGN1bGF0ZUxldmVscygpfSxkLkNvbG9yLnByb3RvdHlwZS5fY2FsY3VsYXRlTGV2ZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuX2FycmF5LGI9dGhpcy5sZXZlbHM9bmV3IEFycmF5KGEubGVuZ3RoKSxjPWEubGVuZ3RoLTE7Yz49MDstLWMpYltjXT1NYXRoLnJvdW5kKDI1NSphW2NdKX0sZC5Db2xvci5wcm90b3R5cGUuX2dldEFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5WzNdKnRoaXMubWF4ZXNbdGhpcy5tb2RlXVszXX0sZC5Db2xvci5wcm90b3R5cGUuX3N0b3JlTW9kZUFuZE1heGVzPWZ1bmN0aW9uKGEsYil7dGhpcy5tb2RlPWEsdGhpcy5tYXhlcz1ifSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0TW9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGV9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRNYXhlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1heGVzfSxkLkNvbG9yLnByb3RvdHlwZS5fZ2V0Qmx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheVsyXSp0aGlzLm1heGVzW2UuUkdCXVsyXX0sZC5Db2xvci5wcm90b3R5cGUuX2dldEJyaWdodG5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzYmFbMl0qdGhpcy5tYXhlc1tlLkhTQl1bMl19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRHcmVlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheVsxXSp0aGlzLm1heGVzW2UuUkdCXVsxXX0sZC5Db2xvci5wcm90b3R5cGUuX2dldEh1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGU9PT1lLkhTQj8odGhpcy5oc2JhfHwodGhpcy5oc2JhPWYuX3JnYmFUb0hTQkEodGhpcy5fYXJyYXkpKSx0aGlzLmhzYmFbMF0qdGhpcy5tYXhlc1tlLkhTQl1bMF0pOih0aGlzLmhzbGF8fCh0aGlzLmhzbGE9Zi5fcmdiYVRvSFNMQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNsYVswXSp0aGlzLm1heGVzW2UuSFNMXVswXSl9LGQuQ29sb3IucHJvdG90eXBlLl9nZXRMaWdodG5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oc2xhfHwodGhpcy5oc2xhPWYuX3JnYmFUb0hTTEEodGhpcy5fYXJyYXkpKSx0aGlzLmhzbGFbMl0qdGhpcy5tYXhlc1tlLkhTTF1bMl19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRSZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyYXlbMF0qdGhpcy5tYXhlc1tlLlJHQl1bMF19LGQuQ29sb3IucHJvdG90eXBlLl9nZXRTYXR1cmF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZT09PWUuSFNCPyh0aGlzLmhzYmF8fCh0aGlzLmhzYmE9Zi5fcmdiYVRvSFNCQSh0aGlzLl9hcnJheSkpLHRoaXMuaHNiYVsxXSp0aGlzLm1heGVzW2UuSFNCXVsxXSk6KHRoaXMuaHNsYXx8KHRoaXMuaHNsYT1mLl9yZ2JhVG9IU0xBKHRoaXMuX2FycmF5KSksdGhpcy5oc2xhWzFdKnRoaXMubWF4ZXNbZS5IU0xdWzFdKX07dmFyIGc9e2FsaWNlYmx1ZTpcIiNmMGY4ZmZcIixhbnRpcXVld2hpdGU6XCIjZmFlYmQ3XCIsYXF1YTpcIiMwMGZmZmZcIixhcXVhbWFyaW5lOlwiIzdmZmZkNFwiLGF6dXJlOlwiI2YwZmZmZlwiLGJlaWdlOlwiI2Y1ZjVkY1wiLGJpc3F1ZTpcIiNmZmU0YzRcIixibGFjazpcIiMwMDAwMDBcIixibGFuY2hlZGFsbW9uZDpcIiNmZmViY2RcIixibHVlOlwiIzAwMDBmZlwiLGJsdWV2aW9sZXQ6XCIjOGEyYmUyXCIsYnJvd246XCIjYTUyYTJhXCIsYnVybHl3b29kOlwiI2RlYjg4N1wiLGNhZGV0Ymx1ZTpcIiM1ZjllYTBcIixjaGFydHJldXNlOlwiIzdmZmYwMFwiLGNob2NvbGF0ZTpcIiNkMjY5MWVcIixjb3JhbDpcIiNmZjdmNTBcIixjb3JuZmxvd2VyYmx1ZTpcIiM2NDk1ZWRcIixjb3Juc2lsazpcIiNmZmY4ZGNcIixjcmltc29uOlwiI2RjMTQzY1wiLGN5YW46XCIjMDBmZmZmXCIsZGFya2JsdWU6XCIjMDAwMDhiXCIsZGFya2N5YW46XCIjMDA4YjhiXCIsZGFya2dvbGRlbnJvZDpcIiNiODg2MGJcIixkYXJrZ3JheTpcIiNhOWE5YTlcIixkYXJrZ3JlZW46XCIjMDA2NDAwXCIsZGFya2dyZXk6XCIjYTlhOWE5XCIsZGFya2toYWtpOlwiI2JkYjc2YlwiLGRhcmttYWdlbnRhOlwiIzhiMDA4YlwiLGRhcmtvbGl2ZWdyZWVuOlwiIzU1NmIyZlwiLGRhcmtvcmFuZ2U6XCIjZmY4YzAwXCIsZGFya29yY2hpZDpcIiM5OTMyY2NcIixkYXJrcmVkOlwiIzhiMDAwMFwiLGRhcmtzYWxtb246XCIjZTk5NjdhXCIsZGFya3NlYWdyZWVuOlwiIzhmYmM4ZlwiLGRhcmtzbGF0ZWJsdWU6XCIjNDgzZDhiXCIsZGFya3NsYXRlZ3JheTpcIiMyZjRmNGZcIixkYXJrc2xhdGVncmV5OlwiIzJmNGY0ZlwiLGRhcmt0dXJxdW9pc2U6XCIjMDBjZWQxXCIsZGFya3Zpb2xldDpcIiM5NDAwZDNcIixkZWVwcGluazpcIiNmZjE0OTNcIixkZWVwc2t5Ymx1ZTpcIiMwMGJmZmZcIixkaW1ncmF5OlwiIzY5Njk2OVwiLGRpbWdyZXk6XCIjNjk2OTY5XCIsZG9kZ2VyYmx1ZTpcIiMxZTkwZmZcIixmaXJlYnJpY2s6XCIjYjIyMjIyXCIsZmxvcmFsd2hpdGU6XCIjZmZmYWYwXCIsZm9yZXN0Z3JlZW46XCIjMjI4YjIyXCIsZnVjaHNpYTpcIiNmZjAwZmZcIixnYWluc2Jvcm86XCIjZGNkY2RjXCIsZ2hvc3R3aGl0ZTpcIiNmOGY4ZmZcIixnb2xkOlwiI2ZmZDcwMFwiLGdvbGRlbnJvZDpcIiNkYWE1MjBcIixncmF5OlwiIzgwODA4MFwiLGdyZWVuOlwiIzAwODAwMFwiLGdyZWVueWVsbG93OlwiI2FkZmYyZlwiLGdyZXk6XCIjODA4MDgwXCIsaG9uZXlkZXc6XCIjZjBmZmYwXCIsaG90cGluazpcIiNmZjY5YjRcIixpbmRpYW5yZWQ6XCIjY2Q1YzVjXCIsaW5kaWdvOlwiIzRiMDA4MlwiLGl2b3J5OlwiI2ZmZmZmMFwiLGtoYWtpOlwiI2YwZTY4Y1wiLGxhdmVuZGVyOlwiI2U2ZTZmYVwiLGxhdmVuZGVyYmx1c2g6XCIjZmZmMGY1XCIsbGF3bmdyZWVuOlwiIzdjZmMwMFwiLGxlbW9uY2hpZmZvbjpcIiNmZmZhY2RcIixsaWdodGJsdWU6XCIjYWRkOGU2XCIsbGlnaHRjb3JhbDpcIiNmMDgwODBcIixsaWdodGN5YW46XCIjZTBmZmZmXCIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6XCIjZmFmYWQyXCIsbGlnaHRncmF5OlwiI2QzZDNkM1wiLGxpZ2h0Z3JlZW46XCIjOTBlZTkwXCIsbGlnaHRncmV5OlwiI2QzZDNkM1wiLGxpZ2h0cGluazpcIiNmZmI2YzFcIixsaWdodHNhbG1vbjpcIiNmZmEwN2FcIixsaWdodHNlYWdyZWVuOlwiIzIwYjJhYVwiLGxpZ2h0c2t5Ymx1ZTpcIiM4N2NlZmFcIixsaWdodHNsYXRlZ3JheTpcIiM3Nzg4OTlcIixsaWdodHNsYXRlZ3JleTpcIiM3Nzg4OTlcIixsaWdodHN0ZWVsYmx1ZTpcIiNiMGM0ZGVcIixsaWdodHllbGxvdzpcIiNmZmZmZTBcIixsaW1lOlwiIzAwZmYwMFwiLGxpbWVncmVlbjpcIiMzMmNkMzJcIixsaW5lbjpcIiNmYWYwZTZcIixtYWdlbnRhOlwiI2ZmMDBmZlwiLG1hcm9vbjpcIiM4MDAwMDBcIixtZWRpdW1hcXVhbWFyaW5lOlwiIzY2Y2RhYVwiLG1lZGl1bWJsdWU6XCIjMDAwMGNkXCIsbWVkaXVtb3JjaGlkOlwiI2JhNTVkM1wiLG1lZGl1bXB1cnBsZTpcIiM5MzcwZGJcIixtZWRpdW1zZWFncmVlbjpcIiMzY2IzNzFcIixtZWRpdW1zbGF0ZWJsdWU6XCIjN2I2OGVlXCIsbWVkaXVtc3ByaW5nZ3JlZW46XCIjMDBmYTlhXCIsbWVkaXVtdHVycXVvaXNlOlwiIzQ4ZDFjY1wiLG1lZGl1bXZpb2xldHJlZDpcIiNjNzE1ODVcIixtaWRuaWdodGJsdWU6XCIjMTkxOTcwXCIsbWludGNyZWFtOlwiI2Y1ZmZmYVwiLG1pc3R5cm9zZTpcIiNmZmU0ZTFcIixtb2NjYXNpbjpcIiNmZmU0YjVcIixuYXZham93aGl0ZTpcIiNmZmRlYWRcIixuYXZ5OlwiIzAwMDA4MFwiLG9sZGxhY2U6XCIjZmRmNWU2XCIsb2xpdmU6XCIjODA4MDAwXCIsb2xpdmVkcmFiOlwiIzZiOGUyM1wiLG9yYW5nZTpcIiNmZmE1MDBcIixvcmFuZ2VyZWQ6XCIjZmY0NTAwXCIsb3JjaGlkOlwiI2RhNzBkNlwiLHBhbGVnb2xkZW5yb2Q6XCIjZWVlOGFhXCIscGFsZWdyZWVuOlwiIzk4ZmI5OFwiLHBhbGV0dXJxdW9pc2U6XCIjYWZlZWVlXCIscGFsZXZpb2xldHJlZDpcIiNkYjcwOTNcIixwYXBheWF3aGlwOlwiI2ZmZWZkNVwiLHBlYWNocHVmZjpcIiNmZmRhYjlcIixwZXJ1OlwiI2NkODUzZlwiLHBpbms6XCIjZmZjMGNiXCIscGx1bTpcIiNkZGEwZGRcIixwb3dkZXJibHVlOlwiI2IwZTBlNlwiLHB1cnBsZTpcIiM4MDAwODBcIixyZWQ6XCIjZmYwMDAwXCIscm9zeWJyb3duOlwiI2JjOGY4ZlwiLHJveWFsYmx1ZTpcIiM0MTY5ZTFcIixzYWRkbGVicm93bjpcIiM4YjQ1MTNcIixzYWxtb246XCIjZmE4MDcyXCIsc2FuZHlicm93bjpcIiNmNGE0NjBcIixzZWFncmVlbjpcIiMyZThiNTdcIixzZWFzaGVsbDpcIiNmZmY1ZWVcIixzaWVubmE6XCIjYTA1MjJkXCIsc2lsdmVyOlwiI2MwYzBjMFwiLHNreWJsdWU6XCIjODdjZWViXCIsc2xhdGVibHVlOlwiIzZhNWFjZFwiLHNsYXRlZ3JheTpcIiM3MDgwOTBcIixzbGF0ZWdyZXk6XCIjNzA4MDkwXCIsc25vdzpcIiNmZmZhZmFcIixzcHJpbmdncmVlbjpcIiMwMGZmN2ZcIixzdGVlbGJsdWU6XCIjNDY4MmI0XCIsdGFuOlwiI2QyYjQ4Y1wiLHRlYWw6XCIjMDA4MDgwXCIsdGhpc3RsZTpcIiNkOGJmZDhcIix0b21hdG86XCIjZmY2MzQ3XCIsdHVycXVvaXNlOlwiIzQwZTBkMFwiLHZpb2xldDpcIiNlZTgyZWVcIix3aGVhdDpcIiNmNWRlYjNcIix3aGl0ZTpcIiNmZmZmZmZcIix3aGl0ZXNtb2tlOlwiI2Y1ZjVmNVwiLHllbGxvdzpcIiNmZmZmMDBcIix5ZWxsb3dncmVlbjpcIiM5YWNkMzJcIn0saD0vXFxzKi8saT0vKFxcZHsxLDN9KS8saj0vKCg/OlxcZCsoPzpcXC5cXGQrKT8pfCg/OlxcLlxcZCspKS8saz1uZXcgUmVnRXhwKGouc291cmNlK1wiJVwiKSxsPXtIRVgzOi9eIyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKSQvaSxIRVg0Oi9eIyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkkL2ksSEVYNjovXiMoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkkL2ksSEVYODovXiMoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pJC9pLFJHQjpuZXcgUmVnRXhwKFtcIl5yZ2JcXFxcKFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxSR0JfUEVSQ0VOVDpuZXcgUmVnRXhwKFtcIl5yZ2JcXFxcKFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxSR0JBOm5ldyBSZWdFeHAoW1wiXnJnYmFcXFxcKFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiLFwiLGkuc291cmNlLFwiLFwiLGouc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxSR0JBX1BFUkNFTlQ6bmV3IFJlZ0V4cChbXCJecmdiYVxcXFwoXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsay5zb3VyY2UsXCIsXCIsai5zb3VyY2UsXCJcXFxcKSRcIl0uam9pbihoLnNvdXJjZSksXCJpXCIpLEhTTDpuZXcgUmVnRXhwKFtcIl5oc2xcXFxcKFwiLGkuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxIU0xBOm5ldyBSZWdFeHAoW1wiXmhzbGFcXFxcKFwiLGkuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGsuc291cmNlLFwiLFwiLGouc291cmNlLFwiXFxcXCkkXCJdLmpvaW4oaC5zb3VyY2UpLFwiaVwiKSxIU0I6bmV3IFJlZ0V4cChbXCJeaHNiXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIiksSFNCQTpuZXcgUmVnRXhwKFtcIl5oc2JhXFxcXChcIixpLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixrLnNvdXJjZSxcIixcIixqLnNvdXJjZSxcIlxcXFwpJFwiXS5qb2luKGguc291cmNlKSxcImlcIil9O2QuQ29sb3IuX3BhcnNlSW5wdXRzPWZ1bmN0aW9uKGEsYixjLGgpe3ZhciBpLGo9YXJndW1lbnRzLmxlbmd0aCxrPXRoaXMubW9kZSxtPXRoaXMubWF4ZXNba10sbj1bXTtpZihqPj0zKXtmb3IoblswXT1hL21bMF0sblsxXT1iL21bMV0sblsyXT1jL21bMl0sblszXT1cIm51bWJlclwiPT10eXBlb2YgaD9oL21bM106MSxpPW4ubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBvPW5baV07bzwwP25baV09MDpvPjEmJihuW2ldPTEpfXJldHVybiBrPT09ZS5IU0w/Zi5faHNsYVRvUkdCQShuKTprPT09ZS5IU0I/Zi5faHNiYVRvUkdCQShuKTpufWlmKDE9PT1qJiZcInN0cmluZ1wiPT10eXBlb2YgYSl7dmFyIHA9YS50cmltKCkudG9Mb3dlckNhc2UoKTtpZihnW3BdKXJldHVybiBkLkNvbG9yLl9wYXJzZUlucHV0cy5jYWxsKHRoaXMsZ1twXSk7aWYobC5IRVgzLnRlc3QocCkpcmV0dXJuIG49bC5IRVgzLmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUludChhK2EsMTYpLzI1NX0pLG5bM109MSxuO2lmKGwuSEVYNi50ZXN0KHApKXJldHVybiBuPWwuSEVYNi5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSwxNikvMjU1fSksblszXT0xLG47aWYobC5IRVg0LnRlc3QocCkpcmV0dXJuIG49bC5IRVg0LmV4ZWMocCkuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUludChhK2EsMTYpLzI1NX0pO2lmKGwuSEVYOC50ZXN0KHApKXJldHVybiBuPWwuSEVYOC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQoYSwxNikvMjU1fSk7aWYobC5SR0IudGVzdChwKSlyZXR1cm4gbj1sLlJHQi5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS8yNTV9KSxuWzNdPTEsbjtpZihsLlJHQl9QRVJDRU5ULnRlc3QocCkpcmV0dXJuIG49bC5SR0JfUEVSQ0VOVC5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VGbG9hdChhKS8xMDB9KSxuWzNdPTEsbjtpZihsLlJHQkEudGVzdChwKSlyZXR1cm4gbj1sLlJHQkEuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMz09PWI/cGFyc2VGbG9hdChhKTphLzI1NX0pO2lmKGwuUkdCQV9QRVJDRU5ULnRlc3QocCkpcmV0dXJuIG49bC5SR0JBX1BFUkNFTlQuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMz09PWI/cGFyc2VGbG9hdChhKTpwYXJzZUZsb2F0KGEpLzEwMH0pO2lmKGwuSFNMLnRlc3QocCk/KG49bC5IU0wuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOnBhcnNlSW50KGEsMTApLzEwMH0pLG5bM109MSk6bC5IU0xBLnRlc3QocCkmJihuPWwuSFNMQS5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAwPT09Yj9wYXJzZUludChhLDEwKS8zNjA6Mz09PWI/cGFyc2VGbG9hdChhKTpwYXJzZUludChhLDEwKS8xMDB9KSksbj1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oYSwxKSwwKX0pLG4ubGVuZ3RoKXJldHVybiBmLl9oc2xhVG9SR0JBKG4pO2lmKGwuSFNCLnRlc3QocCk/KG49bC5IU0IuZXhlYyhwKS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gMD09PWI/cGFyc2VJbnQoYSwxMCkvMzYwOnBhcnNlSW50KGEsMTApLzEwMH0pLG5bM109MSk6bC5IU0JBLnRlc3QocCkmJihuPWwuSFNCQS5leGVjKHApLnNsaWNlKDEpLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiAwPT09Yj9wYXJzZUludChhLDEwKS8zNjA6Mz09PWI/cGFyc2VGbG9hdChhKTpwYXJzZUludChhLDEwKS8xMDB9KSksbi5sZW5ndGgpe2ZvcihpPW4ubGVuZ3RoLTE7aT49MDstLWkpbltpXT1NYXRoLm1heChNYXRoLm1pbihuW2ldLDEpLDApO3JldHVybiBmLl9oc2JhVG9SR0JBKG4pfW49WzEsMSwxLDFdfWVsc2V7aWYoMSE9PWomJjIhPT1qfHxcIm51bWJlclwiIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoYXJndW1lbnRzK1wiaXMgbm90IGEgdmFsaWQgY29sb3IgcmVwcmVzZW50YXRpb24uXCIpO25bMF09YS9tWzJdLG5bMV09YS9tWzJdLG5bMl09YS9tWzJdLG5bM109XCJudW1iZXJcIj09dHlwZW9mIGI/Yi9tWzNdOjEsbj1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oYSwxKSwwKX0pfXJldHVybiBufSxiLmV4cG9ydHM9ZC5Db2xvcn0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9jb2xvcl9jb252ZXJzaW9uXCI6MTR9XSwxNzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4vcDUuQ29sb3JcIiksZC5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQuSW1hZ2U/dGhpcy5pbWFnZShhcmd1bWVudHNbMF0sMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpOnRoaXMuX3JlbmRlcmVyLmJhY2tncm91bmQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5jbGVhcigpLHRoaXN9LGQucHJvdG90eXBlLmNvbG9yTW9kZT1mdW5jdGlvbihhLGIsYyxmLGcpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNvbG9yTW9kZVwiLGFyZ3VtZW50cyksYT09PWUuUkdCfHxhPT09ZS5IU0J8fGE9PT1lLkhTTCl7dGhpcy5fY29sb3JNb2RlPWE7dmFyIGg9dGhpcy5fY29sb3JNYXhlc1thXTsyPT09YXJndW1lbnRzLmxlbmd0aD8oaFswXT1iLGhbMV09YixoWzJdPWIsaFszXT1iKTo0PT09YXJndW1lbnRzLmxlbmd0aD8oaFswXT1iLGhbMV09YyxoWzJdPWYpOjU9PT1hcmd1bWVudHMubGVuZ3RoJiYoaFswXT1iLGhbMV09YyxoWzJdPWYsaFszXT1nKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZmlsbFNldFwiLCEwKSx0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZG9GaWxsXCIsITApLHRoaXMuX3JlbmRlcmVyLmZpbGwuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5ub0ZpbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvRmlsbFwiLCExKSx0aGlzfSxkLnByb3RvdHlwZS5ub1N0cm9rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfZG9TdHJva2VcIiwhMSksdGhpc30sZC5wcm90b3R5cGUuc3Ryb2tlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl9zZXRQcm9wZXJ0eShcIl9zdHJva2VTZXRcIiwhMCksdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX2RvU3Ryb2tlXCIsITApLHRoaXMuX3JlbmRlcmVyLnN0cm9rZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LkNvbG9yXCI6MTZ9XSwxODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPU1hdGguUEk7Yi5leHBvcnRzPXtQMkQ6XCJwMmRcIixXRUJHTDpcIndlYmdsXCIsQVJST1c6XCJkZWZhdWx0XCIsQ1JPU1M6XCJjcm9zc2hhaXJcIixIQU5EOlwicG9pbnRlclwiLE1PVkU6XCJtb3ZlXCIsVEVYVDpcInRleHRcIixXQUlUOlwid2FpdFwiLEhBTEZfUEk6ZC8yLFBJOmQsUVVBUlRFUl9QSTpkLzQsVEFVOjIqZCxUV09fUEk6MipkLERFR1JFRVM6XCJkZWdyZWVzXCIsUkFESUFOUzpcInJhZGlhbnNcIixERUdfVE9fUkFEOmQvMTgwLFJBRF9UT19ERUc6MTgwL2QsQ09STkVSOlwiY29ybmVyXCIsQ09STkVSUzpcImNvcm5lcnNcIixSQURJVVM6XCJyYWRpdXNcIixSSUdIVDpcInJpZ2h0XCIsTEVGVDpcImxlZnRcIixDRU5URVI6XCJjZW50ZXJcIixUT1A6XCJ0b3BcIixCT1RUT006XCJib3R0b21cIixCQVNFTElORTpcImFscGhhYmV0aWNcIixQT0lOVFM6MCxMSU5FUzoxLExJTkVfU1RSSVA6MyxMSU5FX0xPT1A6MixUUklBTkdMRVM6NCxUUklBTkdMRV9GQU46NixUUklBTkdMRV9TVFJJUDo1LFFVQURTOlwicXVhZHNcIixRVUFEX1NUUklQOlwicXVhZF9zdHJpcFwiLENMT1NFOlwiY2xvc2VcIixPUEVOOlwib3BlblwiLENIT1JEOlwiY2hvcmRcIixQSUU6XCJwaWVcIixQUk9KRUNUOlwic3F1YXJlXCIsU1FVQVJFOlwiYnV0dFwiLFJPVU5EOlwicm91bmRcIixCRVZFTDpcImJldmVsXCIsTUlURVI6XCJtaXRlclwiLFJHQjpcInJnYlwiLEhTQjpcImhzYlwiLEhTTDpcImhzbFwiLEFVVE86XCJhdXRvXCIsQUxUOjE4LEJBQ0tTUEFDRTo4LENPTlRST0w6MTcsREVMRVRFOjQ2LERPV05fQVJST1c6NDAsRU5URVI6MTMsRVNDQVBFOjI3LExFRlRfQVJST1c6MzcsT1BUSU9OOjE4LFJFVFVSTjoxMyxSSUdIVF9BUlJPVzozOSxTSElGVDoxNixUQUI6OSxVUF9BUlJPVzozOCxCTEVORDpcInNvdXJjZS1vdmVyXCIsQUREOlwibGlnaHRlclwiLERBUktFU1Q6XCJkYXJrZW5cIixMSUdIVEVTVDpcImxpZ2h0ZW5cIixESUZGRVJFTkNFOlwiZGlmZmVyZW5jZVwiLEVYQ0xVU0lPTjpcImV4Y2x1c2lvblwiLE1VTFRJUExZOlwibXVsdGlwbHlcIixTQ1JFRU46XCJzY3JlZW5cIixSRVBMQUNFOlwiY29weVwiLE9WRVJMQVk6XCJvdmVybGF5XCIsSEFSRF9MSUdIVDpcImhhcmQtbGlnaHRcIixTT0ZUX0xJR0hUOlwic29mdC1saWdodFwiLERPREdFOlwiY29sb3ItZG9kZ2VcIixCVVJOOlwiY29sb3ItYnVyblwiLFRIUkVTSE9MRDpcInRocmVzaG9sZFwiLEdSQVk6XCJncmF5XCIsT1BBUVVFOlwib3BhcXVlXCIsSU5WRVJUOlwiaW52ZXJ0XCIsUE9TVEVSSVpFOlwicG9zdGVyaXplXCIsRElMQVRFOlwiZGlsYXRlXCIsRVJPREU6XCJlcm9kZVwiLEJMVVI6XCJibHVyXCIsTk9STUFMOlwibm9ybWFsXCIsSVRBTElDOlwiaXRhbGljXCIsQk9MRDpcImJvbGRcIixfREVGQVVMVF9URVhUX0ZJTEw6XCIjMDAwMDAwXCIsX0RFRkFVTFRfTEVBRE1VTFQ6MS4yNSxfQ1RYX01JRERMRTpcIm1pZGRsZVwiLExJTkVBUjpcImxpbmVhclwiLFFVQURSQVRJQzpcInF1YWRyYXRpY1wiLEJFWklFUjpcImJlemllclwiLENVUlZFOlwiY3VydmVcIixTVFJPS0U6XCJzdHJva2VcIixGSUxMOlwiZmlsbFwiLFRFWFRVUkU6XCJ0ZXh0dXJlXCIsSU1NRURJQVRFOlwiaW1tZWRpYXRlXCIsTkVBUkVTVDpcIm5lYXJlc3RcIixSRVBFQVQ6XCJyZXBlYXRcIixDTEFNUDpcImNsYW1wXCIsTUlSUk9SOlwibWlycm9yXCIsTEFORFNDQVBFOlwibGFuZHNjYXBlXCIsUE9SVFJBSVQ6XCJwb3J0cmFpdFwiLF9ERUZBVUxUX1NUUk9LRTpcIiMwMDAwMDBcIixfREVGQVVMVF9GSUxMOlwiI0ZGRkZGRlwiLEdSSUQ6XCJncmlkXCIsQVhFUzpcImF4ZXNcIn19LHt9XSwxOTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoKXtyZXR1cm4gd2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRofHxkb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRofHwwfWZ1bmN0aW9uIGUoKXtyZXR1cm4gd2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHR8fGRvY3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0fHwwfWZ1bmN0aW9uIGYoYSl7aWYoIShkb2N1bWVudC5mdWxsc2NyZWVuRW5hYmxlZHx8ZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVuYWJsZWR8fGRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbmFibGVkfHxkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbmFibGVkKSl0aHJvdyBuZXcgRXJyb3IoXCJGdWxsc2NyZWVuIG5vdCBlbmFibGVkIGluIHRoaXMgYnJvd3Nlci5cIilcbjthLnJlcXVlc3RGdWxsc2NyZWVuP2EucmVxdWVzdEZ1bGxzY3JlZW4oKTphLm1velJlcXVlc3RGdWxsU2NyZWVuP2EubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTphLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuP2Eud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTphLm1zUmVxdWVzdEZ1bGxzY3JlZW4mJmEubXNSZXF1ZXN0RnVsbHNjcmVlbigpfWZ1bmN0aW9uIGcoKXtkb2N1bWVudC5leGl0RnVsbHNjcmVlbj9kb2N1bWVudC5leGl0RnVsbHNjcmVlbigpOmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4/ZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpOmRvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuP2RvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuKCk6ZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbiYmZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpfXZhciBoPWEoXCIuL21haW5cIiksaT1hKFwiLi9jb25zdGFudHNcIiksaj1baS5BUlJPVyxpLkNST1NTLGkuSEFORCxpLk1PVkUsaS5URVhULGkuV0FJVF07aC5wcm90b3R5cGUuX2ZyYW1lUmF0ZT0wLGgucHJvdG90eXBlLl9sYXN0RnJhbWVUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSxoLnByb3RvdHlwZS5fdGFyZ2V0RnJhbWVSYXRlPTYwO3ZhciBrPXdpbmRvdy5wcmludDtoLnByb3RvdHlwZS5wcmludD1mdW5jdGlvbigpe2FyZ3VtZW50cy5sZW5ndGg/Y29uc29sZS5sb2cuYXBwbHkoY29uc29sZSxhcmd1bWVudHMpOmsoKX0saC5wcm90b3R5cGUuZnJhbWVDb3VudD0wLGgucHJvdG90eXBlLmZvY3VzZWQ9ZG9jdW1lbnQuaGFzRm9jdXMoKSxoLnByb3RvdHlwZS5jdXJzb3I9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVwiYXV0b1wiLGU9dGhpcy5fY3VyRWxlbWVudC5lbHQ7aWYoai5pbmRleE9mKGEpPi0xKWQ9YTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXt2YXIgZj1cIlwiO2ImJmMmJlwibnVtYmVyXCI9PXR5cGVvZiBiJiZcIm51bWJlclwiPT10eXBlb2YgYyYmKGY9YitcIiBcIitjKSxkPVwiaHR0cDovL1wiPT09YS5zdWJzdHJpbmcoMCw3KXx8XCJodHRwczovL1wiPT09YS5zdWJzdHJpbmcoMCw4KT9cInVybChcIithK1wiKSBcIitmK1wiLCBhdXRvXCI6L1xcLihjdXJ8anBnfGpwZWd8Z2lmfHBuZ3xDVVJ8SlBHfEpQRUd8R0lGfFBORykkLy50ZXN0KGEpP1widXJsKFwiK2ErXCIpIFwiK2YrXCIsIGF1dG9cIjphfWUuc3R5bGUuY3Vyc29yPWR9LGgucHJvdG90eXBlLmZyYW1lUmF0ZT1mdW5jdGlvbihhKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZnJhbWVSYXRlXCIsYXJndW1lbnRzKSxcIm51bWJlclwiIT10eXBlb2YgYXx8YTwwP3RoaXMuX2ZyYW1lUmF0ZToodGhpcy5fc2V0UHJvcGVydHkoXCJfdGFyZ2V0RnJhbWVSYXRlXCIsYSksdGhpcy5fcnVuRnJhbWVzKCksdGhpcyl9LGgucHJvdG90eXBlLmdldEZyYW1lUmF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZyYW1lUmF0ZSgpfSxoLnByb3RvdHlwZS5zZXRGcmFtZVJhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZnJhbWVSYXRlKGEpfSxoLnByb3RvdHlwZS5ub0N1cnNvcj1mdW5jdGlvbigpe3RoaXMuX2N1ckVsZW1lbnQuZWx0LnN0eWxlLmN1cnNvcj1cIm5vbmVcIn0saC5wcm90b3R5cGUuZGlzcGxheVdpZHRoPXNjcmVlbi53aWR0aCxoLnByb3RvdHlwZS5kaXNwbGF5SGVpZ2h0PXNjcmVlbi5oZWlnaHQsaC5wcm90b3R5cGUud2luZG93V2lkdGg9ZCgpLGgucHJvdG90eXBlLndpbmRvd0hlaWdodD1lKCksaC5wcm90b3R5cGUuX29ucmVzaXplPWZ1bmN0aW9uKGEpe3RoaXMuX3NldFByb3BlcnR5KFwid2luZG93V2lkdGhcIixkKCkpLHRoaXMuX3NldFByb3BlcnR5KFwid2luZG93SGVpZ2h0XCIsZSgpKTt2YXIgYixjPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO1wiZnVuY3Rpb25cIj09dHlwZW9mIGMud2luZG93UmVzaXplZCYmKHZvaWQgMD09PShiPWMud2luZG93UmVzaXplZChhKSl8fGJ8fGEucHJldmVudERlZmF1bHQoKSl9LGgucHJvdG90eXBlLndpZHRoPTAsaC5wcm90b3R5cGUuaGVpZ2h0PTAsaC5wcm90b3R5cGUuZnVsbHNjcmVlbj1mdW5jdGlvbihhKXtpZihoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJmdWxsc2NyZWVuXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hKXJldHVybiBkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fGRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50O2E/Zihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOmcoKX0saC5wcm90b3R5cGUucGl4ZWxEZW5zaXR5PWZ1bmN0aW9uKGEpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBpeGVsRGVuc2l0eVwiLGFyZ3VtZW50cyk7dmFyIGI7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGE/KGEhPT10aGlzLl9waXhlbERlbnNpdHkmJih0aGlzLl9waXhlbERlbnNpdHk9YSx0aGlzLl9waXhlbHNEaXJ0eT0hMCksYj10aGlzLHRoaXMucmVzaXplQ2FudmFzKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsITApKTpiPXRoaXMuX3BpeGVsRGVuc2l0eSxifSxoLnByb3RvdHlwZS5kaXNwbGF5RGVuc2l0eT1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb30saC5wcm90b3R5cGUuZ2V0VVJMPWZ1bmN0aW9uKCl7cmV0dXJuIGxvY2F0aW9uLmhyZWZ9LGgucHJvdG90eXBlLmdldFVSTFBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gbG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoXCIvXCIpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm5cIlwiIT09YX0pfSxoLnByb3RvdHlwZS5nZXRVUkxQYXJhbXM9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0vWz8mXShbXiY9XSspKD86WyY9XSkoW14mPV0rKS9naW0sYz17fTtudWxsIT0oYT1iLmV4ZWMobG9jYXRpb24uc2VhcmNoKSk7KWEuaW5kZXg9PT1iLmxhc3RJbmRleCYmYi5sYXN0SW5kZXgrKyxjW2FbMV1dPWFbMl07cmV0dXJuIGN9LGIuZXhwb3J0cz1ofSx7XCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjR9XSwyMDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIik7YShcIi4vY29uc3RhbnRzXCIpO2QuX3ZhbGlkYXRlUGFyYW1ldGVycz1kLl9mcmllbmRseUZpbGVMb2FkRXJyb3I9ZnVuY3Rpb24oKXt9O3ZhciBlPW51bGwsZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9wcm9jZXNzaW5nL3A1LmpzL3dpa2kvcDUuanMtb3ZlcnZpZXcjd2h5LWNhbnQtaS1hc3NpZ24tdmFyaWFibGVzLXVzaW5nLXA1LWZ1bmN0aW9ucy1hbmQtdmFyaWFibGVzLWJlZm9yZS1zZXR1cFwiLGc9ZnVuY3Rpb24oKXt2YXIgYj17fSxjPWZ1bmN0aW9uKGEpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuXCJfXCIhPT1hWzBdJiYoIShhIGluIGIpJiYoYlthXT0hMCwhMCkpfSkubWFwKGZ1bmN0aW9uKGIpe3ZhciBjO3JldHVybiBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIGFbYl0/XCJmdW5jdGlvblwiOmI9PT1iLnRvVXBwZXJDYXNlKCk/XCJjb25zdGFudFwiOlwidmFyaWFibGVcIix7bmFtZTpiLHR5cGU6Y319KX07ZT1bXS5jb25jYXQoYyhkLnByb3RvdHlwZSksYyhhKFwiLi9jb25zdGFudHNcIikpKSxlLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5uYW1lLmxlbmd0aC1hLm5hbWUubGVuZ3RofSl9LGg9ZnVuY3Rpb24oYSxiKXtifHwoYj1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpKSxlfHxnKCksZS5zb21lKGZ1bmN0aW9uKGMpe2lmKGEubWVzc2FnZSYmbnVsbCE9PWEubWVzc2FnZS5tYXRjaChcIlxcXFxXP1wiK2MubmFtZStcIlxcXFxXXCIpKXJldHVybiBiKFwiRGlkIHlvdSBqdXN0IHRyeSB0byB1c2UgcDUuanMncyBcIitjLm5hbWUrKFwiZnVuY3Rpb25cIj09PWMudHlwZT9cIigpIFwiOlwiIFwiKStjLnR5cGUrXCI/IElmIHNvLCB5b3UgbWF5IHdhbnQgdG8gbW92ZSBpdCBpbnRvIHlvdXIgc2tldGNoJ3Mgc2V0dXAoKSBmdW5jdGlvbi5cXG5cXG5Gb3IgbW9yZSBkZXRhaWxzLCBzZWU6IFwiK2YpLCEwfSl9O2QucHJvdG90eXBlLl9oZWxwRm9yTWlzdXNlZEF0VG9wTGV2ZWxDb2RlPWgsXCJjb21wbGV0ZVwiIT09ZG9jdW1lbnQucmVhZHlTdGF0ZSYmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIixoLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIixoLCExKX0pKSxiLmV4cG9ydHM9ZH0se1wiLi4vLi4vZG9jcy9yZWZlcmVuY2UvZGF0YS5qc29uXCI6dm9pZCAwLFwiLi9jb25zdGFudHNcIjoxOCxcIi4vbWFpblwiOjI0fV0sMjE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9jb25zdGFudHNcIik7Yi5leHBvcnRzPXttb2RlQWRqdXN0OmZ1bmN0aW9uKGEsYixjLGUsZil7cmV0dXJuIGY9PT1kLkNPUk5FUj97eDphLHk6Yix3OmMsaDplfTpmPT09ZC5DT1JORVJTP3t4OmEseTpiLHc6Yy1hLGg6ZS1ifTpmPT09ZC5SQURJVVM/e3g6YS1jLHk6Yi1lLHc6MipjLGg6MiplfTpmPT09ZC5DRU5URVI/e3g6YS0uNSpjLHk6Yi0uNSplLHc6YyxoOmV9OnZvaWQgMH19fSx7XCIuL2NvbnN0YW50c1wiOjE4fV0sMjI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9ZnVuY3Rpb24oKXt3aW5kb3cubW9jaGF8fCh3aW5kb3cuc2V0dXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHdpbmRvdy5zZXR1cHx8d2luZG93LmRyYXcmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHdpbmRvdy5kcmF3KSYmIWQuaW5zdGFuY2UmJm5ldyBkfTtcImNvbXBsZXRlXCI9PT1kb2N1bWVudC5yZWFkeVN0YXRlP2UoKTp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixlLCExKX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSwyMzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIik7ZC5wcm90b3R5cGUuZXhpdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcImV4aXQoKSBub3QgaW1wbGVtZW50ZWQsIHNlZSByZW1vdmUoKVwiKX0sZC5wcm90b3R5cGUucHVzaFN0eWxlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicHVzaFN0eWxlKCkgbm90IHVzZWQsIHNlZSBwdXNoKClcIil9LGQucHJvdG90eXBlLnBvcFN0eWxlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicG9wU3R5bGUoKSBub3QgdXNlZCwgc2VlIHBvcCgpXCIpfSxkLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7dmFyIGE9XCJzaXplKCkgaXMgbm90IGEgdmFsaWQgcDUgZnVuY3Rpb24sIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgXCI7dGhyb3cgYSs9XCJkcmF3aW5nIGNhbnZhcywgcGxlYXNlIHVzZSBjcmVhdGVDYW52YXMoKSBpbnN0ZWFkXCIsbmV3IEVycm9yKGEpfSxiLmV4cG9ydHM9ZH0se1wiLi9tYWluXCI6MjR9XSwyNDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2EoXCIuL3NoaW1cIik7dmFyIGQ9YShcIi4vY29uc3RhbnRzXCIpLGU9ZnVuY3Rpb24oYSxiLGMpe1wiYm9vbGVhblwiPT10eXBlb2YgYiYmdm9pZCAwPT09YyYmKGM9YixiPXZvaWQgMCksdGhpcy5fc2V0dXBEb25lPSExLHRoaXMuX3BpeGVsRGVuc2l0eT1NYXRoLmNlaWwod2luZG93LmRldmljZVBpeGVsUmF0aW8pfHwxLHRoaXMuX3VzZXJOb2RlPWIsdGhpcy5fY3VyRWxlbWVudD1udWxsLHRoaXMuX2VsZW1lbnRzPVtdLHRoaXMuX3JlcXVlc3RBbmltSWQ9MCx0aGlzLl9wcmVsb2FkQ291bnQ9MCx0aGlzLl9pc0dsb2JhbD0hMSx0aGlzLl9sb29wPSEwLHRoaXMuX2luaXRpYWxpemVJbnN0YW5jZVZhcmlhYmxlcygpLHRoaXMuX2RlZmF1bHRDYW52YXNTaXplPXt3aWR0aDoxMDAsaGVpZ2h0OjEwMH0sdGhpcy5fZXZlbnRzPXttb3VzZW1vdmU6bnVsbCxtb3VzZWRvd246bnVsbCxtb3VzZXVwOm51bGwsZHJhZ2VuZDpudWxsLGRyYWdvdmVyOm51bGwsY2xpY2s6bnVsbCxkYmxjbGljazpudWxsLG1vdXNlb3ZlcjpudWxsLG1vdXNlb3V0Om51bGwsa2V5ZG93bjpudWxsLGtleXVwOm51bGwsa2V5cHJlc3M6bnVsbCx0b3VjaHN0YXJ0Om51bGwsdG91Y2htb3ZlOm51bGwsdG91Y2hlbmQ6bnVsbCxyZXNpemU6bnVsbCxibHVyOm51bGx9LHRoaXMuX2V2ZW50cy53aGVlbD1udWxsLHRoaXMuX2xvYWRpbmdTY3JlZW5JZD1cInA1X2xvYWRpbmdcIix0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcz17fTtmb3IodmFyIGQ9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRNZXRob2RzKSxmPTA7ZjxkLmxlbmd0aDtmKyspe3ZhciBnPWRbZl07dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHNbZ109ZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRNZXRob2RzW2ddLnNsaWNlKCl9d2luZG93LkRldmljZU9yaWVudGF0aW9uRXZlbnQmJih0aGlzLl9ldmVudHMuZGV2aWNlb3JpZW50YXRpb249bnVsbCksd2luZG93LkRldmljZU1vdGlvbkV2ZW50JiYhd2luZG93Ll9pc05vZGVXZWJraXQmJih0aGlzLl9ldmVudHMuZGV2aWNlbW90aW9uPW51bGwpLHRoaXMuX3N0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fdXNlck5vZGUmJlwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLl91c2VyTm9kZSYmKHRoaXMuX3VzZXJOb2RlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX3VzZXJOb2RlKSk7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXMsYj1hLnByZWxvYWQ7aWYoYil7dmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fbG9hZGluZ1NjcmVlbklkKTtpZighYyl7Yz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGMuaW5uZXJIVE1MPVwiTG9hZGluZy4uLlwiLGMuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLGMuaWQ9dGhpcy5fbG9hZGluZ1NjcmVlbklkOyh0aGlzLl91c2VyTm9kZXx8ZG9jdW1lbnQuYm9keSkuYXBwZW5kQ2hpbGQoYyl9dmFyIGQ9dGhpcy5fcHJlbG9hZE1ldGhvZHM7Zm9yKHZhciBmIGluIGQpe2RbZl09ZFtmXXx8ZTt2YXIgZz1kW2ZdO2chPT1lLnByb3RvdHlwZSYmZyE9PWV8fCh0aGlzLl9pc0dsb2JhbCYmKHdpbmRvd1tmXT10aGlzLl93cmFwUHJlbG9hZCh0aGlzLGYpKSxnPXRoaXMpLHRoaXMuX3JlZ2lzdGVyZWRQcmVsb2FkTWV0aG9kc1tmXT1nW2ZdLGdbZl09dGhpcy5fd3JhcFByZWxvYWQoZyxmKX1iKCksdGhpcy5fcnVuSWZQcmVsb2Fkc0FyZURvbmUoKX1lbHNlIHRoaXMuX3NldHVwKCksdGhpcy5fcnVuRnJhbWVzKCksdGhpcy5fZHJhdygpfS5iaW5kKHRoaXMpLHRoaXMuX3J1bklmUHJlbG9hZHNBcmVEb25lPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoMD09PWEuX3ByZWxvYWRDb3VudCl7dmFyIGI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYS5fbG9hZGluZ1NjcmVlbklkKTtiJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksYS5fc2V0dXAoKSxhLl9ydW5GcmFtZXMoKSxhLl9kcmF3KCl9fSx0aGlzLl9kZWNyZW1lbnRQcmVsb2FkPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7XCJmdW5jdGlvblwiPT10eXBlb2YgYS5wcmVsb2FkJiYoYS5fc2V0UHJvcGVydHkoXCJfcHJlbG9hZENvdW50XCIsYS5fcHJlbG9hZENvdW50LTEpLGEuX3J1bklmUHJlbG9hZHNBcmVEb25lKCkpfSx0aGlzLl93cmFwUHJlbG9hZD1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbmNyZW1lbnRQcmVsb2FkKCksdGhpcy5fcmVnaXN0ZXJlZFByZWxvYWRNZXRob2RzW2JdLmFwcGx5KGEsYXJndW1lbnRzKX0uYmluZCh0aGlzKX0sdGhpcy5faW5jcmVtZW50UHJlbG9hZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO2EuX3NldFByb3BlcnR5KFwiX3ByZWxvYWRDb3VudFwiLGEuX3ByZWxvYWRDb3VudCsxKX0sdGhpcy5fc2V0dXA9ZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZUNhbnZhcyh0aGlzLl9kZWZhdWx0Q2FudmFzU2l6ZS53aWR0aCx0aGlzLl9kZWZhdWx0Q2FudmFzU2l6ZS5oZWlnaHQsXCJwMmRcIik7dmFyIGE9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYS5wcmVsb2FkKWZvcih2YXIgYiBpbiB0aGlzLl9wcmVsb2FkTWV0aG9kcylhW2JdPXRoaXMuX3ByZWxvYWRNZXRob2RzW2JdW2JdLGFbYl0mJnRoaXMmJihhW2JdPWFbYl0uYmluZCh0aGlzKSk7XCJmdW5jdGlvblwiPT10eXBlb2YgYS5zZXR1cCYmYS5zZXR1cCgpO2Zvcih2YXIgYz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNhbnZhc1wiKSxkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07XCJ0cnVlXCI9PT1lLmRhdGFzZXQuaGlkZGVuJiYoZS5zdHlsZS52aXNpYmlsaXR5PVwiXCIsZGVsZXRlIGUuZGF0YXNldC5oaWRkZW4pfXRoaXMuX3NldHVwRG9uZT0hMH0uYmluZCh0aGlzKSx0aGlzLl9kcmF3PWZ1bmN0aW9uKCl7dmFyIGE9d2luZG93LnBlcmZvcm1hbmNlLm5vdygpLGI9YS10aGlzLl9sYXN0RnJhbWVUaW1lLGM9MWUzL3RoaXMuX3RhcmdldEZyYW1lUmF0ZTsoIXRoaXMuX2xvb3B8fGI+PWMtNSkmJih0aGlzLnJlZHJhdygpLHRoaXMuX2ZyYW1lUmF0ZT0xZTMvKGEtdGhpcy5fbGFzdEZyYW1lVGltZSksdGhpcy5fbGFzdEZyYW1lVGltZT1hLHZvaWQgMCE9PXRoaXMuX3VwZGF0ZU1vdXNlQ29vcmRzJiZ0aGlzLl91cGRhdGVNb3VzZUNvb3JkcygpKSx0aGlzLl9sb29wJiYodGhpcy5fcmVxdWVzdEFuaW1JZD13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2RyYXcpKX0uYmluZCh0aGlzKSx0aGlzLl9ydW5GcmFtZXM9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVJbnRlcnZhbCYmY2xlYXJJbnRlcnZhbCh0aGlzLl91cGRhdGVJbnRlcnZhbCl9LmJpbmQodGhpcyksdGhpcy5fc2V0UHJvcGVydHk9ZnVuY3Rpb24oYSxiKXt0aGlzW2FdPWIsdGhpcy5faXNHbG9iYWwmJih3aW5kb3dbYV09Yil9LmJpbmQodGhpcyksdGhpcy5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLl9sb2FkaW5nU2NyZWVuSWQpO2lmKGEmJihhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSksdGhpcy5faW5jcmVtZW50UHJlbG9hZCgpKSx0aGlzLl9jdXJFbGVtZW50KXt0aGlzLl9sb29wPSExLHRoaXMuX3JlcXVlc3RBbmltSWQmJndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZXF1ZXN0QW5pbUlkKTtmb3IodmFyIGIgaW4gdGhpcy5fZXZlbnRzKXdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGIsdGhpcy5fZXZlbnRzW2JdKTtmb3IodmFyIGM9MDtjPHRoaXMuX2VsZW1lbnRzLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuX2VsZW1lbnRzW2NdO2QuZWx0LnBhcmVudE5vZGUmJmQuZWx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZC5lbHQpO2Zvcih2YXIgZiBpbiBkLl9ldmVudHMpZC5lbHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihmLGQuX2V2ZW50c1tmXSl9dmFyIGc9dGhpczt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5yZW1vdmUuZm9yRWFjaChmdW5jdGlvbihhKXt2b2lkIDAhPT1hJiZhLmNhbGwoZyl9KX1pZih0aGlzLl9pc0dsb2JhbCl7Zm9yKHZhciBoIGluIGUucHJvdG90eXBlKXRyeXtkZWxldGUgd2luZG93W2hdfWNhdGNoKGEpe3dpbmRvd1toXT12b2lkIDB9Zm9yKHZhciBpIGluIHRoaXMpaWYodGhpcy5oYXNPd25Qcm9wZXJ0eShpKSl0cnl7ZGVsZXRlIHdpbmRvd1tpXX1jYXRjaChhKXt3aW5kb3dbaV09dm9pZCAwfWUuaW5zdGFuY2U9bnVsbH19LmJpbmQodGhpcyksdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaW5pdC5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEmJmEuY2FsbCh0aGlzKX0sdGhpcyk7dmFyIGg9dGhpcy5fY3JlYXRlRnJpZW5kbHlHbG9iYWxGdW5jdGlvbkJpbmRlcigpO2lmKGEpYSh0aGlzKTtlbHNle3RoaXMuX2lzR2xvYmFsPSEwLGUuaW5zdGFuY2U9dGhpcztmb3IodmFyIGkgaW4gZS5wcm90b3R5cGUpaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5wcm90b3R5cGVbaV0pe3ZhciBqPWkuc3Vic3RyaW5nKDIpO3RoaXMuX2V2ZW50cy5oYXNPd25Qcm9wZXJ0eShqKXx8KE1hdGguaGFzT3duUHJvcGVydHkoaSkmJk1hdGhbaV09PT1lLnByb3RvdHlwZVtpXT9oKGksZS5wcm90b3R5cGVbaV0pOmgoaSxlLnByb3RvdHlwZVtpXS5iaW5kKHRoaXMpKSl9ZWxzZSBoKGksZS5wcm90b3R5cGVbaV0pO2Zvcih2YXIgayBpbiB0aGlzKXRoaXMuaGFzT3duUHJvcGVydHkoaykmJmgoayx0aGlzW2tdKX1mb3IodmFyIGwgaW4gdGhpcy5fZXZlbnRzKXt2YXIgbT10aGlzW1wiX29uXCIrbF07aWYobSl7dmFyIG49bS5iaW5kKHRoaXMpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKGwsbix7cGFzc2l2ZTohMX0pLHRoaXMuX2V2ZW50c1tsXT1ufX12YXIgbz1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwiZm9jdXNlZFwiLCEwKX0uYmluZCh0aGlzKSxwPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJmb2N1c2VkXCIsITEpfS5iaW5kKHRoaXMpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIixvKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIixwKSx0aGlzLnJlZ2lzdGVyTWV0aG9kKFwicmVtb3ZlXCIsZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsbyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIscCl9KSxjP3RoaXMuX3N0YXJ0KCk6XCJjb21wbGV0ZVwiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZT90aGlzLl9zdGFydCgpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLHRoaXMuX3N0YXJ0LmJpbmQodGhpcyksITEpfTtlLnByb3RvdHlwZS5faW5pdGlhbGl6ZUluc3RhbmNlVmFyaWFibGVzPWZ1bmN0aW9uKCl7dGhpcy5fc3R5bGVzPVtdLHRoaXMuX2JlemllckRldGFpbD0yMCx0aGlzLl9jdXJ2ZURldGFpbD0yMCx0aGlzLl9jb2xvck1vZGU9ZC5SR0IsdGhpcy5fY29sb3JNYXhlcz17cmdiOlsyNTUsMjU1LDI1NSwyNTVdLGhzYjpbMzYwLDEwMCwxMDAsMV0saHNsOlszNjAsMTAwLDEwMCwxXX0sdGhpcy5fcGl4ZWxzRGlydHk9ITB9LGUuaW5zdGFuY2U9bnVsbCxlLmRpc2FibGVGcmllbmRseUVycm9ycz0hMTtmb3IodmFyIGYgaW4gZCllLnByb3RvdHlwZVtmXT1kW2ZdO2UucHJvdG90eXBlLl9wcmVsb2FkTWV0aG9kcz17bG9hZEpTT046ZS5wcm90b3R5cGUsbG9hZEltYWdlOmUucHJvdG90eXBlLGxvYWRTdHJpbmdzOmUucHJvdG90eXBlLGxvYWRYTUw6ZS5wcm90b3R5cGUsbG9hZEJ5dGVzOmUucHJvdG90eXBlLGxvYWRUYWJsZTplLnByb3RvdHlwZSxsb2FkRm9udDplLnByb3RvdHlwZSxsb2FkTW9kZWw6ZS5wcm90b3R5cGUsbG9hZFNoYWRlcjplLnByb3RvdHlwZX0sZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRNZXRob2RzPXtpbml0OltdLHByZTpbXSxwb3N0OltdLHJlbW92ZTpbXX0sZS5wcm90b3R5cGUuX3JlZ2lzdGVyZWRQcmVsb2FkTWV0aG9kcz17fSxlLnByb3RvdHlwZS5yZWdpc3RlclByZWxvYWRNZXRob2Q9ZnVuY3Rpb24oYSxiKXtlLnByb3RvdHlwZS5fcHJlbG9hZE1ldGhvZHMuaGFzT3duUHJvcGVydHkoYSl8fChlLnByb3RvdHlwZS5fcHJlbG9hZE1ldGhvZHNbYV09Yil9LGUucHJvdG90eXBlLnJlZ2lzdGVyTWV0aG9kPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpc3x8ZS5wcm90b3R5cGU7Yy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzT3duUHJvcGVydHkoYSl8fChjLl9yZWdpc3RlcmVkTWV0aG9kc1thXT1bXSksYy5fcmVnaXN0ZXJlZE1ldGhvZHNbYV0ucHVzaChiKX0sZS5wcm90b3R5cGUuX2NyZWF0ZUZyaWVuZGx5R2xvYmFsRnVuY3Rpb25CaW5kZXI9ZnVuY3Rpb24oYSl7YT1hfHx7fTt2YXIgYj1hLmdsb2JhbE9iamVjdHx8d2luZG93LGM9YS5sb2d8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksZD17cHJpbnQ6ITB9O3JldHVybiBmdW5jdGlvbihhLGYpe2lmKGUuZGlzYWJsZUZyaWVuZGx5RXJyb3JzLDEpYlthXT1mO2Vsc2UgdHJ5e2lmKGEgaW4gYiYmIShhIGluIGQpKXRocm93IG5ldyBFcnJvcignZ2xvYmFsIFwiJythKydcIiBhbHJlYWR5IGV4aXN0cycpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmfSxzZXQ6ZnVuY3Rpb24oZCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsYSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZCx3cml0YWJsZTohMH0pLGMoJ1lvdSBqdXN0IGNoYW5nZWQgdGhlIHZhbHVlIG9mIFwiJythK1wiXFxcIiwgd2hpY2ggd2FzIGEgcDUgZnVuY3Rpb24uIFRoaXMgY291bGQgY2F1c2UgcHJvYmxlbXMgbGF0ZXIgaWYgeW91J3JlIG5vdCBjYXJlZnVsLlwiKX19KX1jYXRjaChkKXtjKCdwNSBoYWQgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIGdsb2JhbCBmdW5jdGlvbiBcIicrYSsnXCIsIHBvc3NpYmx5IGJlY2F1c2UgeW91ciBjb2RlIGlzIGFscmVhZHkgdXNpbmcgdGhhdCBuYW1lIGFzIGEgdmFyaWFibGUuIFlvdSBtYXkgd2FudCB0byByZW5hbWUgeW91ciB2YXJpYWJsZSB0byBzb21ldGhpbmcgZWxzZS4nKSxiW2FdPWZ9fX0sYi5leHBvcnRzPWV9LHtcIi4vY29uc3RhbnRzXCI6MTgsXCIuL3NoaW1cIjozNH1dLDI1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyl7cmV0dXJuITE9PT1iP2YoYSxjKTplKGEsYixjKSx0aGlzfWZ1bmN0aW9uIGUoYSxiLGMpe2MuX2V2ZW50c1thXSYmZihhLGMpO3ZhciBkPWIuYmluZChjKTtjLmVsdC5hZGRFdmVudExpc3RlbmVyKGEsZCwhMSksYy5fZXZlbnRzW2FdPWR9ZnVuY3Rpb24gZihhLGIpe3ZhciBjPWIuX2V2ZW50c1thXTtiLmVsdC5yZW1vdmVFdmVudExpc3RlbmVyKGEsYywhMSksYi5fZXZlbnRzW2FdPW51bGx9dmFyIGc9YShcIi4vbWFpblwiKTtnLkVsZW1lbnQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmVsdD1hLHRoaXMuX3BJbnN0PWIsdGhpcy5fZXZlbnRzPXt9LHRoaXMud2lkdGg9dGhpcy5lbHQub2Zmc2V0V2lkdGgsdGhpcy5oZWlnaHQ9dGhpcy5lbHQub2Zmc2V0SGVpZ2h0fSxnLkVsZW1lbnQucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT90aGlzLmVsdC5wYXJlbnROb2RlOihcInN0cmluZ1wiPT10eXBlb2YgYT8oXCIjXCI9PT1hWzBdJiYoYT1hLnN1YnN0cmluZygxKSksYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSk6YSBpbnN0YW5jZW9mIGcuRWxlbWVudCYmKGE9YS5lbHQpLGEuYXBwZW5kQ2hpbGQodGhpcy5lbHQpLHRoaXMpfSxnLkVsZW1lbnQucHJvdG90eXBlLmlkPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hP3RoaXMuZWx0LmlkOih0aGlzLmVsdC5pZD1hLHRoaXMud2lkdGg9dGhpcy5lbHQub2Zmc2V0V2lkdGgsdGhpcy5oZWlnaHQ9dGhpcy5lbHQub2Zmc2V0SGVpZ2h0LHRoaXMpfSxnLkVsZW1lbnQucHJvdG90eXBlLmNsYXNzPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hP3RoaXMuZWx0LmNsYXNzTmFtZToodGhpcy5lbHQuY2xhc3NOYW1lPWEsdGhpcyl9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VQcmVzc2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2Vkb3duXCIsZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIm1vdXNlSXNQcmVzc2VkXCIsITApLHRoaXMuX3BJbnN0Ll9zZXRNb3VzZUJ1dHRvbihiKSxhKCl9LHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuZG91YmxlQ2xpY2tlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcImRibGNsaWNrXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlV2hlZWw9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ3aGVlbFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZVJlbGVhc2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2V1cFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZUNsaWNrZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJjbGlja1wiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5tb3VzZU1vdmVkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwibW91c2Vtb3ZlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLm1vdXNlT3Zlcj1mdW5jdGlvbihhKXtyZXR1cm4gZChcIm1vdXNlb3ZlclwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5jaGFuZ2VkPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiY2hhbmdlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmlucHV0PWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiaW5wdXRcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUubW91c2VPdXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJtb3VzZW91dFwiLGEsdGhpcyksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS50b3VjaFN0YXJ0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ0b3VjaHN0YXJ0XCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLnRvdWNoTW92ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQoXCJ0b3VjaG1vdmVcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUudG91Y2hFbmRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZChcInRvdWNoZW5kXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRyYWdPdmVyPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiZHJhZ292ZXJcIixhLHRoaXMpLHRoaXN9LGcuRWxlbWVudC5wcm90b3R5cGUuZHJhZ0xlYXZlPWZ1bmN0aW9uKGEpe3JldHVybiBkKFwiZHJhZ2xlYXZlXCIsYSx0aGlzKSx0aGlzfSxnLkVsZW1lbnQucHJvdG90eXBlLmRyb3A9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPW5ldyBnLkZpbGUoYik7cmV0dXJuIGZ1bmN0aW9uKGIpe2MuZGF0YT1iLnRhcmdldC5yZXN1bHQsYShjKX19cmV0dXJuIHdpbmRvdy5GaWxlJiZ3aW5kb3cuRmlsZVJlYWRlciYmd2luZG93LkZpbGVMaXN0JiZ3aW5kb3cuQmxvYj8oZShcImRyYWdvdmVyXCIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKSxhLnByZXZlbnREZWZhdWx0KCl9LHRoaXMpLGUoXCJkcmFnbGVhdmVcIixmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpLGEucHJldmVudERlZmF1bHQoKX0sdGhpcyksdm9pZCAwIT09YiYmZShcImRyb3BcIixiLHRoaXMpLGUoXCJkcm9wXCIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKSxhLnByZXZlbnREZWZhdWx0KCk7Zm9yKHZhciBiPWEuZGF0YVRyYW5zZmVyLmZpbGVzLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGU9YltkXSxmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPWMoZSksZS50eXBlLmluZGV4T2YoXCJ0ZXh0XCIpPi0xP2YucmVhZEFzVGV4dChlKTpmLnJlYWRBc0RhdGFVUkwoZSl9fSx0aGlzKSk6Y29uc29sZS5sb2coXCJUaGUgRmlsZSBBUElzIGFyZSBub3QgZnVsbHkgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci5cIiksdGhpc30sZy5FbGVtZW50LnByb3RvdHlwZS5fc2V0UHJvcGVydHk9ZnVuY3Rpb24oYSxiKXt0aGlzW2FdPWJ9LGIuZXhwb3J0cz1nLkVsZW1lbnR9LHtcIi4vbWFpblwiOjI0fV0sMjY6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpLGU9YShcIi4vY29uc3RhbnRzXCIpO2QuR3JhcGhpY3M9ZnVuY3Rpb24oYSxiLGMsZil7dmFyIGc9Y3x8ZS5QMkQ7dGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSwoZi5fdXNlck5vZGV8fGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzKSxkLkVsZW1lbnQuY2FsbCh0aGlzLHRoaXMuY2FudmFzLGYsITEpO2Zvcih2YXIgaCBpbiBkLnByb3RvdHlwZSl0aGlzW2hdfHwoXCJmdW5jdGlvblwiPT10eXBlb2YgZC5wcm90b3R5cGVbaF0/dGhpc1toXT1kLnByb3RvdHlwZVtoXS5iaW5kKHRoaXMpOnRoaXNbaF09ZC5wcm90b3R5cGVbaF0pO3JldHVybiBkLnByb3RvdHlwZS5faW5pdGlhbGl6ZUluc3RhbmNlVmFyaWFibGVzLmFwcGx5KHRoaXMpLHRoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iLHRoaXMuX3BpeGVsRGVuc2l0eT1mLl9waXhlbERlbnNpdHksZz09PWUuV0VCR0w/dGhpcy5fcmVuZGVyZXI9bmV3IGQuUmVuZGVyZXJHTCh0aGlzLmNhbnZhcyx0aGlzLCExKTp0aGlzLl9yZW5kZXJlcj1uZXcgZC5SZW5kZXJlcjJEKHRoaXMuY2FudmFzLHRoaXMsITEpLGYuX2VsZW1lbnRzLnB1c2godGhpcyksdGhpcy5fcmVuZGVyZXIucmVzaXplKGEsYiksdGhpcy5fcmVuZGVyZXIuX2FwcGx5RGVmYXVsdHMoKSx0aGlzfSxkLkdyYXBoaWNzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQuRWxlbWVudC5wcm90b3R5cGUpLGQuR3JhcGhpY3MucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuZWx0LnBhcmVudE5vZGUmJnRoaXMuZWx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbHQpO3ZhciBhPXRoaXMuX3BJbnN0Ll9lbGVtZW50cy5pbmRleE9mKHRoaXMpOy0xIT09YSYmdGhpcy5fcEluc3QuX2VsZW1lbnRzLnNwbGljZShhLDEpO2Zvcih2YXIgYiBpbiB0aGlzLl9ldmVudHMpdGhpcy5lbHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLHRoaXMuX2V2ZW50c1tiXSl9LGIuZXhwb3J0cz1kLkdyYXBoaWNzfSx7XCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjR9XSwyNzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSl7dmFyIGI9MCxjPTA7aWYoYS5vZmZzZXRQYXJlbnQpZG97Yis9YS5vZmZzZXRMZWZ0LGMrPWEub2Zmc2V0VG9wfXdoaWxlKGE9YS5vZmZzZXRQYXJlbnQpO2Vsc2UgYis9YS5vZmZzZXRMZWZ0LGMrPWEub2Zmc2V0VG9wO3JldHVybltiLGNdfXZhciBlPWEoXCIuL21haW5cIiksZj1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZS5SZW5kZXJlcj1mdW5jdGlvbihhLGIsYyl7ZS5FbGVtZW50LmNhbGwodGhpcyxhLGIpLHRoaXMuY2FudmFzPWEsYz8odGhpcy5faXNNYWluQ2FudmFzPSEwLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIl9jdXJFbGVtZW50XCIsdGhpcyksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiY2FudmFzXCIsdGhpcy5jYW52YXMpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcIndpZHRoXCIsdGhpcy53aWR0aCksdGhpcy5fcEluc3QuX3NldFByb3BlcnR5KFwiaGVpZ2h0XCIsdGhpcy5oZWlnaHQpKToodGhpcy5jYW52YXMuc3R5bGUuZGlzcGxheT1cIm5vbmVcIix0aGlzLl9zdHlsZXM9W10pLHRoaXMuX3RleHRTaXplPTEyLHRoaXMuX3RleHRMZWFkaW5nPTE1LHRoaXMuX3RleHRGb250PVwic2Fucy1zZXJpZlwiLHRoaXMuX3RleHRTdHlsZT1mLk5PUk1BTCx0aGlzLl90ZXh0QXNjZW50PW51bGwsdGhpcy5fdGV4dERlc2NlbnQ9bnVsbCx0aGlzLl90ZXh0QWxpZ249Zi5MRUZULHRoaXMuX3RleHRCYXNlbGluZT1mLkJBU0VMSU5FLHRoaXMuX3JlY3RNb2RlPWYuQ09STkVSLHRoaXMuX2VsbGlwc2VNb2RlPWYuQ0VOVEVSLHRoaXMuX2N1cnZlVGlnaHRuZXNzPTAsdGhpcy5faW1hZ2VNb2RlPWYuQ09STkVSLHRoaXMuX3RpbnQ9bnVsbCx0aGlzLl9kb1N0cm9rZT0hMCx0aGlzLl9kb0ZpbGw9ITAsdGhpcy5fc3Ryb2tlU2V0PSExLHRoaXMuX2ZpbGxTZXQ9ITF9LGUuUmVuZGVyZXIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5FbGVtZW50LnByb3RvdHlwZSksZS5SZW5kZXJlci5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3JldHVybntwcm9wZXJ0aWVzOntfZG9TdHJva2U6dGhpcy5fZG9TdHJva2UsX3N0cm9rZVNldDp0aGlzLl9zdHJva2VTZXQsX2RvRmlsbDp0aGlzLl9kb0ZpbGwsX2ZpbGxTZXQ6dGhpcy5fZmlsbFNldCxfdGludDp0aGlzLl90aW50LF9pbWFnZU1vZGU6dGhpcy5faW1hZ2VNb2RlLF9yZWN0TW9kZTp0aGlzLl9yZWN0TW9kZSxfZWxsaXBzZU1vZGU6dGhpcy5fZWxsaXBzZU1vZGUsX3RleHRGb250OnRoaXMuX3RleHRGb250LF90ZXh0TGVhZGluZzp0aGlzLl90ZXh0TGVhZGluZyxfdGV4dFNpemU6dGhpcy5fdGV4dFNpemUsX3RleHRBbGlnbjp0aGlzLl90ZXh0QWxpZ24sX3RleHRCYXNlbGluZTp0aGlzLl90ZXh0QmFzZWxpbmUsX3RleHRTdHlsZTp0aGlzLl90ZXh0U3R5bGV9fX0sZS5SZW5kZXJlci5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKGEpe2EucHJvcGVydGllcyYmT2JqZWN0LmFzc2lnbih0aGlzLGEucHJvcGVydGllcyl9LGUuUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihhLGIpe3RoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iLHRoaXMuZWx0LndpZHRoPWEqdGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSx0aGlzLmVsdC5oZWlnaHQ9Yip0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LHRoaXMuZWx0LnN0eWxlLndpZHRoPWErXCJweFwiLHRoaXMuZWx0LnN0eWxlLmhlaWdodD1iK1wicHhcIix0aGlzLl9pc01haW5DYW52YXMmJih0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJ3aWR0aFwiLHRoaXMud2lkdGgpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcImhlaWdodFwiLHRoaXMuaGVpZ2h0KSl9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRMZWFkaW5nPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPyh0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0TGVhZGluZ1wiLGEpLHRoaXMuX3BJbnN0KTp0aGlzLl90ZXh0TGVhZGluZ30sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dFNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGE/KHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRTaXplXCIsYSksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dExlYWRpbmdcIixhKmYuX0RFRkFVTFRfTEVBRE1VTFQpLHRoaXMuX2FwcGx5VGV4dFByb3BlcnRpZXMoKSk6dGhpcy5fdGV4dFNpemV9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHRTdHlsZT1mdW5jdGlvbihhKXtyZXR1cm4gYT8oYSE9PWYuTk9STUFMJiZhIT09Zi5JVEFMSUMmJmEhPT1mLkJPTER8fHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRTdHlsZVwiLGEpLHRoaXMuX2FwcGx5VGV4dFByb3BlcnRpZXMoKSk6dGhpcy5fdGV4dFN0eWxlfSxlLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0QXNjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl90ZXh0QXNjZW50JiZ0aGlzLl91cGRhdGVUZXh0TWV0cmljcygpLHRoaXMuX3RleHRBc2NlbnR9LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHREZXNjZW50PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl90ZXh0RGVzY2VudCYmdGhpcy5fdXBkYXRlVGV4dE1ldHJpY3MoKSx0aGlzLl90ZXh0RGVzY2VudH0sZS5SZW5kZXJlci5wcm90b3R5cGUudGV4dEFsaWduPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMCE9PWE/KHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRBbGlnblwiLGEpLHZvaWQgMCE9PWImJnRoaXMuX3NldFByb3BlcnR5KFwiX3RleHRCYXNlbGluZVwiLGIpLHRoaXMuX2FwcGx5VGV4dFByb3BlcnRpZXMoKSk6e2hvcml6b250YWw6dGhpcy5fdGV4dEFsaWduLHZlcnRpY2FsOnRoaXMuX3RleHRCYXNlbGluZX19LGUuUmVuZGVyZXIucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZyxoLGksaixrLGwsbSxuLG8scD10aGlzLl9wSW5zdCxxPU51bWJlci5NQVhfVkFMVUU7aWYoKHRoaXMuX2RvRmlsbHx8dGhpcy5fZG9TdHJva2UpJiZ2b2lkIDAhPT1hKXtpZihcInN0cmluZ1wiIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSxhPWEucmVwbGFjZSgvKFxcdCkvZyxcIiAgXCIpLGc9YS5zcGxpdChcIlxcblwiKSx2b2lkIDAhPT1kKXtmb3Iobz0wLGk9MDtpPGcubGVuZ3RoO2krKylmb3Ioaz1cIlwiLG49Z1tpXS5zcGxpdChcIiBcIiksaD0wO2g8bi5sZW5ndGg7aCsrKWw9aytuW2hdK1wiIFwiLG09dGhpcy50ZXh0V2lkdGgobCksbT5kPyhrPW5baF0rXCIgXCIsbys9cC50ZXh0TGVhZGluZygpKTprPWw7c3dpdGNoKHRoaXMuX3JlY3RNb2RlPT09Zi5DRU5URVImJihiLT1kLzIsYy09ZS8yKSx0aGlzLl90ZXh0QWxpZ24pe2Nhc2UgZi5DRU5URVI6Yis9ZC8yO2JyZWFrO2Nhc2UgZi5SSUdIVDpiKz1kfXZhciByPSExO2lmKHZvaWQgMCE9PWUpe3N3aXRjaCh0aGlzLl90ZXh0QmFzZWxpbmUpe2Nhc2UgZi5CT1RUT006Yys9ZS1vO2JyZWFrO2Nhc2UgZi5DRU5URVI6Yys9KGUtbykvMjticmVhaztjYXNlIGYuQkFTRUxJTkU6cj0hMCx0aGlzLl90ZXh0QmFzZWxpbmU9Zi5UT1B9cT1jK2UtcC50ZXh0QXNjZW50KCl9Zm9yKGk9MDtpPGcubGVuZ3RoO2krKyl7Zm9yKGs9XCJcIixuPWdbaV0uc3BsaXQoXCIgXCIpLGg9MDtoPG4ubGVuZ3RoO2grKylsPWsrbltoXStcIiBcIixtPXRoaXMudGV4dFdpZHRoKGwpLG0+ZCYmay5sZW5ndGg+MD8odGhpcy5fcmVuZGVyVGV4dChwLGssYixjLHEpLGs9bltoXStcIiBcIixjKz1wLnRleHRMZWFkaW5nKCkpOms9bDt0aGlzLl9yZW5kZXJUZXh0KHAsayxiLGMscSksYys9cC50ZXh0TGVhZGluZygpLHImJih0aGlzLl90ZXh0QmFzZWxpbmU9Zi5CQVNFTElORSl9fWVsc2V7dmFyIHM9MCx0PXAudGV4dEFsaWduKCkudmVydGljYWw7Zm9yKHQ9PT1mLkNFTlRFUj9zPShnLmxlbmd0aC0xKSpwLnRleHRMZWFkaW5nKCkvMjp0PT09Zi5CT1RUT00mJihzPShnLmxlbmd0aC0xKSpwLnRleHRMZWFkaW5nKCkpLGo9MDtqPGcubGVuZ3RoO2orKyl0aGlzLl9yZW5kZXJUZXh0KHAsZ1tqXSxiLGMtcyxxKSxjKz1wLnRleHRMZWFkaW5nKCl9cmV0dXJuIHB9fSxlLlJlbmRlcmVyLnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLlJlbmRlcmVyLnByb3RvdHlwZS5faXNPcGVuVHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YoYT1hfHx0aGlzLl90ZXh0Rm9udCkmJmEuZm9udCYmYS5mb250LnN1cHBvcnRlZH0sZS5SZW5kZXJlci5wcm90b3R5cGUuX3VwZGF0ZVRleHRNZXRyaWNzPWZ1bmN0aW9uKCl7aWYodGhpcy5faXNPcGVuVHlwZSgpKXJldHVybiB0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0QXNjZW50XCIsdGhpcy5fdGV4dEZvbnQuX3RleHRBc2NlbnQoKSksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dERlc2NlbnRcIix0aGlzLl90ZXh0Rm9udC5fdGV4dERlc2NlbnQoKSksdGhpczt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTthLnN0eWxlLmZvbnRGYW1pbHk9dGhpcy5fdGV4dEZvbnQsYS5zdHlsZS5mb250U2l6ZT10aGlzLl90ZXh0U2l6ZStcInB4XCIsYS5pbm5lckhUTUw9XCJBQkNqZ3F8XCI7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtiLnN0eWxlLmRpc3BsYXk9XCJpbmxpbmUtYmxvY2tcIixiLnN0eWxlLndpZHRoPVwiMXB4XCIsYi5zdHlsZS5oZWlnaHQ9XCIwcHhcIjt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2MuYXBwZW5kQ2hpbGQoYSksYy5hcHBlbmRDaGlsZChiKSxjLnN0eWxlLmhlaWdodD1cIjBweFwiLGMuc3R5bGUub3ZlcmZsb3c9XCJoaWRkZW5cIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpLGIuc3R5bGUudmVydGljYWxBbGlnbj1cImJhc2VsaW5lXCI7dmFyIGU9ZChiKSxmPWQoYSksZz1lWzFdLWZbMV07Yi5zdHlsZS52ZXJ0aWNhbEFsaWduPVwiYm90dG9tXCIsZT1kKGIpLGY9ZChhKTt2YXIgaD1lWzFdLWZbMV0saT1oLWc7cmV0dXJuIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYyksdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEFzY2VudFwiLGcpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHREZXNjZW50XCIsaSksdGhpc30sYi5leHBvcnRzPWUuUmVuZGVyZXJ9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuL21haW5cIjoyNH1dLDI4OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4vbWFpblwiKSxlPWEoXCIuL2NvbnN0YW50c1wiKSxmPWEoXCIuLi9pbWFnZS9maWx0ZXJzXCIpO2EoXCIuL3A1LlJlbmRlcmVyXCIpO3ZhciBnPVwicmdiYSgwLDAsMCwwKVwiO2QuUmVuZGVyZXIyRD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGQuUmVuZGVyZXIuY2FsbCh0aGlzLGEsYixjKSx0aGlzLmRyYXdpbmdDb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKSx0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJkcmF3aW5nQ29udGV4dFwiLHRoaXMuZHJhd2luZ0NvbnRleHQpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlJlbmRlcmVyLnByb3RvdHlwZSksZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0cz1mdW5jdGlvbigpe3RoaXMuX2NhY2hlZEZpbGxTdHlsZT10aGlzLl9jYWNoZWRTdHJva2VTdHlsZT12b2lkIDAsdGhpcy5fc2V0RmlsbChlLl9ERUZBVUxUX0ZJTEwpLHRoaXMuX3NldFN0cm9rZShlLl9ERUZBVUxUX1NUUk9LRSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lQ2FwPWUuUk9VTkQsdGhpcy5kcmF3aW5nQ29udGV4dC5mb250PVwibm9ybWFsIDEycHggc2Fucy1zZXJpZlwifSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihhLGIpe2QuUmVuZGVyZXIucHJvdG90eXBlLnJlc2l6ZS5jYWxsKHRoaXMsYSxiKSx0aGlzLmRyYXdpbmdDb250ZXh0LnNjYWxlKHRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHksdGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe2lmKHRoaXMuZHJhd2luZ0NvbnRleHQuc2F2ZSgpLHRoaXMucmVzZXRNYXRyaXgoKSxhcmd1bWVudHNbMF1pbnN0YW5jZW9mIGQuSW1hZ2UpdGhpcy5fcEluc3QuaW1hZ2UoYXJndW1lbnRzWzBdLDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTtlbHNle3ZhciBhPXRoaXMuX2dldEZpbGwoKSxiPXRoaXMuX3BJbnN0LmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyksYz1iLnRvU3RyaW5nKCk7dGhpcy5fc2V0RmlsbChjKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGxSZWN0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLl9zZXRGaWxsKGEpfXRoaXMuZHJhd2luZ0NvbnRleHQucmVzdG9yZSgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZHJhd2luZ0NvbnRleHQuc2F2ZSgpLHRoaXMucmVzZXRNYXRyaXgoKSx0aGlzLmRyYXdpbmdDb250ZXh0LmNsZWFyUmVjdCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5kcmF3aW5nQ29udGV4dC5yZXN0b3JlKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpO3RoaXMuX3NldEZpbGwoYS50b1N0cmluZygpKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zdHJva2U9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpO3RoaXMuX3NldFN0cm9rZShhLnRvU3RyaW5nKCkpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmltYWdlPWZ1bmN0aW9uKGEsYixjLGUsZixnLGgsaSxqKXt2YXIgazt0cnl7dGhpcy5fdGludCYmKGQuTWVkaWFFbGVtZW50JiZhIGluc3RhbmNlb2YgZC5NZWRpYUVsZW1lbnQmJmEubG9hZFBpeGVscygpLGEuY2FudmFzJiYoaz10aGlzLl9nZXRUaW50ZWRJbWFnZUNhbnZhcyhhKSkpLGt8fChrPWEuY2FudmFzfHxhLmVsdCk7dmFyIGw9MTthLndpZHRoJiZhLndpZHRoPjAmJihsPWsud2lkdGgvYS53aWR0aCksdGhpcy5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoayxsKmIsbCpjLGwqZSxsKmYsZyxoLGksail9Y2F0Y2goYSl7aWYoXCJOU19FUlJPUl9OT1RfQVZBSUxBQkxFXCIhPT1hLm5hbWUpdGhyb3cgYX10aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2dldFRpbnRlZEltYWdlQ2FudmFzPWZ1bmN0aW9uKGEpe2lmKCFhLmNhbnZhcylyZXR1cm4gYTt2YXIgYj1mLl90b1BpeGVscyhhLmNhbnZhcyksYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Mud2lkdGg9YS5jYW52YXMud2lkdGgsYy5oZWlnaHQ9YS5jYW52YXMuaGVpZ2h0O2Zvcih2YXIgZD1jLmdldENvbnRleHQoXCIyZFwiKSxlPWQuY3JlYXRlSW1hZ2VEYXRhKGEuY2FudmFzLndpZHRoLGEuY2FudmFzLmhlaWdodCksZz1lLmRhdGEsaD0wO2g8Yi5sZW5ndGg7aCs9NCl7dmFyIGk9YltoXSxqPWJbaCsxXSxrPWJbaCsyXSxsPWJbaCszXTtnW2hdPWkqdGhpcy5fdGludFswXS8yNTUsZ1toKzFdPWoqdGhpcy5fdGludFsxXS8yNTUsZ1toKzJdPWsqdGhpcy5fdGludFsyXS8yNTUsZ1toKzNdPWwqdGhpcy5fdGludFszXS8yNTV9cmV0dXJuIGQucHV0SW1hZ2VEYXRhKGUsMCwwKSxjfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJsZW5kTW9kZT1mdW5jdGlvbihhKXt0aGlzLmRyYXdpbmdDb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1hfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJsZW5kPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24sYj1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSxjPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwLGFyZ3VtZW50cy5sZW5ndGgtMSk7dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249Yix0aGlzLl9wSW5zdD90aGlzLl9wSW5zdC5jb3B5LmFwcGx5KHRoaXMuX3BJbnN0LGMpOnRoaXMuY29weS5hcHBseSh0aGlzLGMpLHRoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWF9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhLGIsYyxlLGYsZyxoLGksajtpZig5PT09YXJndW1lbnRzLmxlbmd0aClhPWFyZ3VtZW50c1swXSxiPWFyZ3VtZW50c1sxXSxjPWFyZ3VtZW50c1syXSxlPWFyZ3VtZW50c1szXSxmPWFyZ3VtZW50c1s0XSxnPWFyZ3VtZW50c1s1XSxoPWFyZ3VtZW50c1s2XSxpPWFyZ3VtZW50c1s3XSxqPWFyZ3VtZW50c1s4XTtlbHNle2lmKDghPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlNpZ25hdHVyZSBub3Qgc3VwcG9ydGVkXCIpO2E9dGhpcy5fcEluc3QsYj1hcmd1bWVudHNbMF0sYz1hcmd1bWVudHNbMV0sZT1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10sZz1hcmd1bWVudHNbNF0saD1hcmd1bWVudHNbNV0saT1hcmd1bWVudHNbNl0saj1hcmd1bWVudHNbN119ZC5SZW5kZXJlcjJELl9jb3B5SGVscGVyKHRoaXMsYSxiLGMsZSxmLGcsaCxpLGopLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMH0sZC5SZW5kZXJlcjJELl9jb3B5SGVscGVyPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpLGope2IubG9hZFBpeGVscygpO3ZhciBrPWIuY2FudmFzLndpZHRoL2Iud2lkdGg7YS5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoYi5jYW52YXMsaypjLGsqZCxrKmUsaypmLGcsaCxpLGopfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxlKXtpZih2b2lkIDA9PT1jJiZ2b2lkIDA9PT1lJiYodm9pZCAwPT09YSYmdm9pZCAwPT09Yj8oYT1iPTAsYz10aGlzLndpZHRoLGU9dGhpcy5oZWlnaHQpOmM9ZT0xKSxhK2M8MHx8YitlPDB8fGE+PXRoaXMud2lkdGh8fGI+PXRoaXMuaGVpZ2h0KXJldHVyblswLDAsMCwyNTVdO3ZhciBmPXRoaXMuX3BJbnN0fHx0aGlzLGc9Zi5fcGl4ZWxEZW5zaXR5O2E9TWF0aC5mbG9vcihhKSxiPU1hdGguZmxvb3IoYiksYz1NYXRoLmZsb29yKGMpLGU9TWF0aC5mbG9vcihlKTt2YXIgaD1hKmcsaT1iKmc7aWYoMSE9PWN8fDEhPT1lfHx0aGlzIGluc3RhbmNlb2YgZC5SZW5kZXJlckdMKXt2YXIgaj1NYXRoLm1pbihjLGYud2lkdGgpLGs9TWF0aC5taW4oZSxmLmhlaWdodCksbD1qKmcsbT1rKmcsbj1uZXcgZC5JbWFnZShqLGspO3JldHVybiBuLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIikuZHJhd0ltYWdlKHRoaXMuY2FudmFzLGgsaSxsLG0sMCwwLGosayksbn12YXIgbyxwO3JldHVybiBmLl9waXhlbHNEaXJ0eT8obz10aGlzLmRyYXdpbmdDb250ZXh0LmdldEltYWdlRGF0YShoLGksMSwxKS5kYXRhLHA9MCk6KG89Zi5waXhlbHMscD00KihoK2kqdGhpcy53aWR0aCpnKSksW29bcCswXSxvW3ArMV0sb1twKzJdLG9bcCszXV19LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUubG9hZFBpeGVscz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX3BJbnN0fHx0aGlzO2lmKGEuX3BpeGVsc0RpcnR5KXthLl9waXhlbHNEaXJ0eT0hMTt2YXIgYj1hLl9waXhlbERlbnNpdHksYz10aGlzLndpZHRoKmIsZD10aGlzLmhlaWdodCpiLGU9dGhpcy5kcmF3aW5nQ29udGV4dC5nZXRJbWFnZURhdGEoMCwwLGMsZCk7YS5fc2V0UHJvcGVydHkoXCJpbWFnZURhdGFcIixlKSxhLl9zZXRQcm9wZXJ0eShcInBpeGVsc1wiLGUuZGF0YSl9fSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7YT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihiKTt2YXIgZT10aGlzLl9wSW5zdHx8dGhpcztpZihjIGluc3RhbmNlb2YgZC5JbWFnZSl0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSx0aGlzLmRyYXdpbmdDb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5kcmF3aW5nQ29udGV4dC5zY2FsZShlLl9waXhlbERlbnNpdHksZS5fcGl4ZWxEZW5zaXR5KSx0aGlzLmRyYXdpbmdDb250ZXh0LmRyYXdJbWFnZShjLmNhbnZhcyxhLGIpLHRoaXMuZHJhd2luZ0NvbnRleHQucmVzdG9yZSgpLGUuX3BpeGVsc0RpcnR5PSEwO2Vsc2V7dmFyIGY9MCxnPTAsaD0wLGk9MCxqPTQqKGIqZS5fcGl4ZWxEZW5zaXR5Kih0aGlzLndpZHRoKmUuX3BpeGVsRGVuc2l0eSkrYSplLl9waXhlbERlbnNpdHkpO2lmKGUuaW1hZ2VEYXRhJiYhZS5fcGl4ZWxzRGlydHl8fGUubG9hZFBpeGVscy5jYWxsKGUpLFwibnVtYmVyXCI9PXR5cGVvZiBjKWo8ZS5waXhlbHMubGVuZ3RoJiYoZj1jLGc9YyxoPWMsaT0yNTUpO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIEFycmF5KXtpZihjLmxlbmd0aDw0KXRocm93IG5ldyBFcnJvcihcInBpeGVsIGFycmF5IG11c3QgYmUgb2YgdGhlIGZvcm0gW1IsIEcsIEIsIEFdXCIpO2o8ZS5waXhlbHMubGVuZ3RoJiYoZj1jWzBdLGc9Y1sxXSxoPWNbMl0saT1jWzNdKX1lbHNlIGMgaW5zdGFuY2VvZiBkLkNvbG9yJiZqPGUucGl4ZWxzLmxlbmd0aCYmKGY9Yy5sZXZlbHNbMF0sZz1jLmxldmVsc1sxXSxoPWMubGV2ZWxzWzJdLGk9Yy5sZXZlbHNbM10pO2Zvcih2YXIgaz0wO2s8ZS5fcGl4ZWxEZW5zaXR5O2srKylmb3IodmFyIGw9MDtsPGUuX3BpeGVsRGVuc2l0eTtsKyspaj00KigoYiplLl9waXhlbERlbnNpdHkrbCkqdGhpcy53aWR0aCplLl9waXhlbERlbnNpdHkrKGEqZS5fcGl4ZWxEZW5zaXR5K2spKSxlLnBpeGVsc1tqXT1mLGUucGl4ZWxzW2orMV09ZyxlLnBpeGVsc1tqKzJdPWgsZS5waXhlbHNbaiszXT1pfX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS51cGRhdGVQaXhlbHM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5fcEluc3R8fHRoaXMsZj1lLl9waXhlbERlbnNpdHk7dm9pZCAwPT09YSYmdm9pZCAwPT09YiYmdm9pZCAwPT09YyYmdm9pZCAwPT09ZCYmKGE9MCxiPTAsYz10aGlzLndpZHRoLGQ9dGhpcy5oZWlnaHQpLGMqPWYsZCo9Zix0aGlzLmRyYXdpbmdDb250ZXh0LnB1dEltYWdlRGF0YShlLmltYWdlRGF0YSxhLGIsMCwwLGMsZCksMD09PWEmJjA9PT1iJiZjPT09dGhpcy53aWR0aCYmZD09PXRoaXMuaGVpZ2h0fHwoZS5fcGl4ZWxzRGlydHk9ITApfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9hY3V0ZUFyY1RvQmV6aWVyPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi8yLGQ9TWF0aC5jb3MoYyksZT1NYXRoLnNpbihjKSxmPTEvTWF0aC50YW4oYyksZz1hK2MsaD1NYXRoLmNvcyhnKSxpPU1hdGguc2luKGcpLGo9KDQtZCkvMyxrPWUrKGQtaikqZjtyZXR1cm57YXg6TWF0aC5jb3MoYSksYXk6TWF0aC5zaW4oYSksYng6aipoK2sqaSxieTpqKmktaypoLGN4OmoqaC1rKmksY3k6aippK2sqaCxkeDpNYXRoLmNvcyhhK2IpLGR5Ok1hdGguc2luKGErYil9fSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmFyYz1mdW5jdGlvbihhLGIsYyxkLGYsZyxoKXt2YXIgaT10aGlzLmRyYXdpbmdDb250ZXh0LGo9Yy8yLGs9ZC8yLGw9MWUtNSxtPTAsbj1bXTtmb3IoYSs9aixiKz1rO2ctZj5sOyltPU1hdGgubWluKGctZixlLkhBTEZfUEkpLG4ucHVzaCh0aGlzLl9hY3V0ZUFyY1RvQmV6aWVyKGYsbSkpLGYrPW07cmV0dXJuIHRoaXMuX2RvRmlsbCYmKGkuYmVnaW5QYXRoKCksbi5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7MD09PWQmJmkubW92ZVRvKGErYy5heCpqLGIrYy5heSprKSxpLmJlemllckN1cnZlVG8oYStjLmJ4KmosYitjLmJ5KmssYStjLmN4KmosYitjLmN5KmssYStjLmR4KmosYitjLmR5KmspfSksaCE9PWUuUElFJiZudWxsIT1ofHxpLmxpbmVUbyhhLGIpLGkuY2xvc2VQYXRoKCksaS5maWxsKCkpLHRoaXMuX2RvU3Ryb2tlJiYoaS5iZWdpblBhdGgoKSxuLmZvckVhY2goZnVuY3Rpb24oYyxkKXswPT09ZCYmaS5tb3ZlVG8oYStjLmF4KmosYitjLmF5KmspLGkuYmV6aWVyQ3VydmVUbyhhK2MuYngqaixiK2MuYnkqayxhK2MuY3gqaixiK2MuY3kqayxhK2MuZHgqaixiK2MuZHkqayl9KSxoPT09ZS5QSUU/KGkubGluZVRvKGEsYiksaS5jbG9zZVBhdGgoKSk6aD09PWUuQ0hPUkQmJmkuY2xvc2VQYXRoKCksaS5zdHJva2UoKSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5lbGxpcHNlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZHJhd2luZ0NvbnRleHQsYz10aGlzLl9kb0ZpbGwsZD10aGlzLl9kb1N0cm9rZSxlPWFbMF0sZj1hWzFdLGg9YVsyXSxpPWFbM107aWYoYyYmIWQpe2lmKHRoaXMuX2dldEZpbGwoKT09PWcpcmV0dXJuIHRoaXN9ZWxzZSBpZighYyYmZCYmdGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO3ZhciBqPS41NTIyODQ3NDk4LGs9aC8yKmosbD1pLzIqaixtPWUraCxuPWYraSxvPWUraC8yLHA9ZitpLzI7Yi5iZWdpblBhdGgoKSxiLm1vdmVUbyhlLHApLGIuYmV6aWVyQ3VydmVUbyhlLHAtbCxvLWssZixvLGYpLGIuYmV6aWVyQ3VydmVUbyhvK2ssZixtLHAtbCxtLHApLGIuYmV6aWVyQ3VydmVUbyhtLHArbCxvK2ssbixvLG4pLGIuYmV6aWVyQ3VydmVUbyhvLWssbixlLHArbCxlLHApLGIuY2xvc2VQYXRoKCksYyYmYi5maWxsKCksZCYmYi5zdHJva2UoKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5saW5lPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuZHJhd2luZ0NvbnRleHQ7cmV0dXJuIHRoaXMuX2RvU3Ryb2tlP3RoaXMuX2dldFN0cm9rZSgpPT09Zz90aGlzOihlLmxpbmVXaWR0aCUyPT0xJiZlLnRyYW5zbGF0ZSguNSwuNSksZS5iZWdpblBhdGgoKSxlLm1vdmVUbyhhLGIpLGUubGluZVRvKGMsZCksZS5zdHJva2UoKSxlLmxpbmVXaWR0aCUyPT0xJiZlLnRyYW5zbGF0ZSgtLjUsLS41KSx0aGlzKTp0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5kcmF3aW5nQ29udGV4dDtpZighdGhpcy5fZG9TdHJva2UpcmV0dXJuIHRoaXM7aWYodGhpcy5fZ2V0U3Ryb2tlKCk9PT1nKXJldHVybiB0aGlzO3ZhciBkPXRoaXMuX2dldFN0cm9rZSgpLGY9dGhpcy5fZ2V0RmlsbCgpO2E9TWF0aC5yb3VuZChhKSxiPU1hdGgucm91bmQoYiksdGhpcy5fc2V0RmlsbChkKSxjLmxpbmVXaWR0aD4xPyhjLmJlZ2luUGF0aCgpLGMuYXJjKGEsYixjLmxpbmVXaWR0aC8yLDAsZS5UV09fUEksITEpLGMuZmlsbCgpKTpjLmZpbGxSZWN0KGEsYiwxLDEpLHRoaXMuX3NldEZpbGwoZil9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucXVhZD1mdW5jdGlvbihhLGIsYyxkLGUsZixoLGkpe3ZhciBqPXRoaXMuZHJhd2luZ0NvbnRleHQsaz10aGlzLl9kb0ZpbGwsbD10aGlzLl9kb1N0cm9rZTtpZihrJiYhbCl7aWYodGhpcy5fZ2V0RmlsbCgpPT09ZylyZXR1cm4gdGhpc31lbHNlIGlmKCFrJiZsJiZ0aGlzLl9nZXRTdHJva2UoKT09PWcpcmV0dXJuIHRoaXM7cmV0dXJuIGouYmVnaW5QYXRoKCksai5tb3ZlVG8oYSxiKSxqLmxpbmVUbyhjLGQpLGoubGluZVRvKGUsZiksai5saW5lVG8oaCxpKSxqLmNsb3NlUGF0aCgpLGsmJmouZmlsbCgpLGwmJmouc3Ryb2tlKCksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5yZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGQ9YVsyXSxlPWFbM10sZj1hWzRdLGg9YVs1XSxpPWFbNl0saj1hWzddLGs9dGhpcy5kcmF3aW5nQ29udGV4dCxsPXRoaXMuX2RvRmlsbCxtPXRoaXMuX2RvU3Ryb2tlO2lmKGwmJiFtKXtpZih0aGlzLl9nZXRGaWxsKCk9PT1nKXJldHVybiB0aGlzfWVsc2UgaWYoIWwmJm0mJnRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpcztpZih0aGlzLl9kb1N0cm9rZSYmay5saW5lV2lkdGglMj09MSYmay50cmFuc2xhdGUoLjUsLjUpLGsuYmVnaW5QYXRoKCksdm9pZCAwPT09ZilrLnJlY3QoYixjLGQsZSk7ZWxzZXt2b2lkIDA9PT1oJiYoaD1mKSx2b2lkIDA9PT1pJiYoaT1oKSx2b2lkIDA9PT1qJiYoaj1pKTt2YXIgbj1kLzIsbz1lLzI7ZDwyKmYmJihmPW4pLGU8MipmJiYoZj1vKSxkPDIqaCYmKGg9biksZTwyKmgmJihoPW8pLGQ8MippJiYoaT1uKSxlPDIqaSYmKGk9byksZDwyKmomJihqPW4pLGU8MipqJiYoaj1vKSxrLmJlZ2luUGF0aCgpLGsubW92ZVRvKGIrZixjKSxrLmFyY1RvKGIrZCxjLGIrZCxjK2UsaCksay5hcmNUbyhiK2QsYytlLGIsYytlLGkpLGsuYXJjVG8oYixjK2UsYixjLGopLGsuYXJjVG8oYixjLGIrZCxjLGYpLGsuY2xvc2VQYXRoKCl9cmV0dXJuIHRoaXMuX2RvRmlsbCYmay5maWxsKCksdGhpcy5fZG9TdHJva2UmJmsuc3Ryb2tlKCksdGhpcy5fZG9TdHJva2UmJmsubGluZVdpZHRoJTI9PTEmJmsudHJhbnNsYXRlKC0uNSwtLjUpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudHJpYW5nbGU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5kcmF3aW5nQ29udGV4dCxjPXRoaXMuX2RvRmlsbCxkPXRoaXMuX2RvU3Ryb2tlLGU9YVswXSxmPWFbMV0saD1hWzJdLGk9YVszXSxqPWFbNF0saz1hWzVdO2lmKGMmJiFkKXtpZih0aGlzLl9nZXRGaWxsKCk9PT1nKXJldHVybiB0aGlzfWVsc2UgaWYoIWMmJmQmJnRoaXMuX2dldFN0cm9rZSgpPT09ZylyZXR1cm4gdGhpcztiLmJlZ2luUGF0aCgpLGIubW92ZVRvKGUsZiksYi5saW5lVG8oaCxpKSxiLmxpbmVUbyhqLGspLGIuY2xvc2VQYXRoKCksYyYmYi5maWxsKCksZCYmYi5zdHJva2UoKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5lbmRTaGFwZT1mdW5jdGlvbihhLGIsYyxkLGYsZyxoKXtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIHRoaXM7aWYoIXRoaXMuX2RvU3Ryb2tlJiYhdGhpcy5fZG9GaWxsKXJldHVybiB0aGlzO3ZhciBpLGo9YT09PWUuQ0xPU0U7aiYmIWcmJmIucHVzaChiWzBdKTt2YXIgayxsLG09Yi5sZW5ndGg7aWYoIWN8fGghPT1lLlBPTFlHT04mJm51bGwhPT1oKWlmKCFkfHxoIT09ZS5QT0xZR09OJiZudWxsIT09aClpZighZnx8aCE9PWUuUE9MWUdPTiYmbnVsbCE9PWgpaWYoaD09PWUuUE9JTlRTKWZvcihrPTA7azxtO2srKylpPWJba10sdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShpWzZdKSx0aGlzLl9wSW5zdC5wb2ludChpWzBdLGlbMV0pO2Vsc2UgaWYoaD09PWUuTElORVMpZm9yKGs9MDtrKzE8bTtrKz0yKWk9YltrXSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5fcEluc3Quc3Ryb2tlKGJbaysxXVs2XSksdGhpcy5fcEluc3QubGluZShpWzBdLGlbMV0sYltrKzFdWzBdLGJbaysxXVsxXSk7ZWxzZSBpZihoPT09ZS5UUklBTkdMRVMpZm9yKGs9MDtrKzI8bTtrKz0zKWk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGlbMF0saVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzFdWzBdLGJbaysxXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzJdWzBdLGJbaysyXVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9kb0ZpbGwmJih0aGlzLl9wSW5zdC5maWxsKGJbaysyXVs1XSksdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsKCkpLHRoaXMuX2RvU3Ryb2tlJiYodGhpcy5fcEluc3Quc3Ryb2tlKGJbaysyXVs2XSksdGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2UoKSk7ZWxzZSBpZihoPT09ZS5UUklBTkdMRV9TVFJJUClmb3Ioaz0wO2srMTxtO2srKylpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiW2srMV1bMF0sYltrKzFdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzFdWzZdKSxcbnRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srMV1bNV0pLGsrMjxtJiYodGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzJdWzBdLGJbaysyXVsxXSksdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srMl1bNl0pLHRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srMl1bNV0pKSx0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpO2Vsc2UgaWYoaD09PWUuVFJJQU5HTEVfRkFOKXtpZihtPjIpe2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGs9MjtrPG07aysrKWk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiWzBdWzBdLGJbMF1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbay0xXVswXSxiW2stMV1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYlswXVswXSxiWzBdWzFdKSxrPG0tMSYmKHRoaXMuX2RvRmlsbCYmaVs1XSE9PWJbaysxXVs1XXx8dGhpcy5fZG9TdHJva2UmJmlbNl0hPT1iW2srMV1bNl0pJiYodGhpcy5fZG9GaWxsJiYodGhpcy5fcEluc3QuZmlsbChpWzVdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGwoKSx0aGlzLl9wSW5zdC5maWxsKGJbaysxXVs1XSkpLHRoaXMuX2RvU3Ryb2tlJiYodGhpcy5fcEluc3Quc3Ryb2tlKGlbNl0pLHRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlKCksdGhpcy5fcEluc3Quc3Ryb2tlKGJbaysxXVs2XSkpLHRoaXMuZHJhd2luZ0NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX19ZWxzZSBpZihoPT09ZS5RVUFEUylmb3Ioaz0wO2srMzxtO2srPTQpe2ZvcihpPWJba10sdGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhpWzBdLGlbMV0pLGw9MTtsPDQ7bCsrKXRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaytsXVswXSxiW2srbF1bMV0pO3RoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGlbMF0saVsxXSksdGhpcy5fZG9GaWxsJiZ0aGlzLl9wSW5zdC5maWxsKGJbayszXVs1XSksdGhpcy5fZG9TdHJva2UmJnRoaXMuX3BJbnN0LnN0cm9rZShiW2srM11bNl0pLHRoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZSBpZihoPT09ZS5RVUFEX1NUUklQKXtpZihtPjMpZm9yKGs9MDtrKzE8bTtrKz0yKWk9YltrXSx0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGsrMzxtPyh0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiW2srMl1bMF0sYltrKzJdWzFdKSx0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhpWzBdLGlbMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbaysxXVswXSxiW2srMV1bMV0pLHRoaXMuZHJhd2luZ0NvbnRleHQubGluZVRvKGJbayszXVswXSxiW2srM11bMV0pLHRoaXMuX2RvRmlsbCYmdGhpcy5fcEluc3QuZmlsbChiW2srM11bNV0pLHRoaXMuX2RvU3Ryb2tlJiZ0aGlzLl9wSW5zdC5zdHJva2UoYltrKzNdWzZdKSk6KHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGlbMF0saVsxXSksdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzFdWzBdLGJbaysxXVsxXSkpLHRoaXMuX2RvRmlsbFN0cm9rZUNsb3NlKCl9ZWxzZXtmb3IodGhpcy5kcmF3aW5nQ29udGV4dC5iZWdpblBhdGgoKSx0aGlzLmRyYXdpbmdDb250ZXh0Lm1vdmVUbyhiWzBdWzBdLGJbMF1bMV0pLGs9MTtrPG07aysrKWk9YltrXSxpLmlzVmVydCYmKGkubW92ZVRvP3RoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGlbMF0saVsxXSk6dGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oaVswXSxpWzFdKSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNle2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLGs9MDtrPG07aysrKWJba10uaXNWZXJ0P2Jba10ubW92ZVRvP3RoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKFswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2tdWzBdLGJba11bMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQucXVhZHJhdGljQ3VydmVUbyhiW2tdWzBdLGJba11bMV0sYltrXVsyXSxiW2tdWzNdKTt0aGlzLl9kb0ZpbGxTdHJva2VDbG9zZSgpfWVsc2V7Zm9yKHRoaXMuZHJhd2luZ0NvbnRleHQuYmVnaW5QYXRoKCksaz0wO2s8bTtrKyspYltrXS5pc1ZlcnQ/YltrXS5tb3ZlVG8/dGhpcy5kcmF3aW5nQ29udGV4dC5tb3ZlVG8oYltrXVswXSxiW2tdWzFdKTp0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVUbyhiW2tdWzBdLGJba11bMV0pOnRoaXMuZHJhd2luZ0NvbnRleHQuYmV6aWVyQ3VydmVUbyhiW2tdWzBdLGJba11bMV0sYltrXVsyXSxiW2tdWzNdLGJba11bNF0sYltrXVs1XSk7dGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1lbHNlIGlmKG0+Myl7dmFyIG49W10sbz0xLXRoaXMuX2N1cnZlVGlnaHRuZXNzO2Zvcih0aGlzLmRyYXdpbmdDb250ZXh0LmJlZ2luUGF0aCgpLHRoaXMuZHJhd2luZ0NvbnRleHQubW92ZVRvKGJbMV1bMF0sYlsxXVsxXSksaz0xO2srMjxtO2srKylpPWJba10sblswXT1baVswXSxpWzFdXSxuWzFdPVtpWzBdKyhvKmJbaysxXVswXS1vKmJbay0xXVswXSkvNixpWzFdKyhvKmJbaysxXVsxXS1vKmJbay0xXVsxXSkvNl0sblsyXT1bYltrKzFdWzBdKyhvKmJba11bMF0tbypiW2srMl1bMF0pLzYsYltrKzFdWzFdKyhvKmJba11bMV0tbypiW2srMl1bMV0pLzZdLG5bM109W2JbaysxXVswXSxiW2srMV1bMV1dLHRoaXMuZHJhd2luZ0NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzFdWzBdLG5bMV1bMV0sblsyXVswXSxuWzJdWzFdLG5bM11bMF0sblszXVsxXSk7aiYmdGhpcy5kcmF3aW5nQ29udGV4dC5saW5lVG8oYltrKzFdWzBdLGJbaysxXVsxXSksdGhpcy5fZG9GaWxsU3Ryb2tlQ2xvc2UoKX1yZXR1cm4gYz0hMSxkPSExLGY9ITEsZz0hMSxqJiZiLnBvcCgpLHRoaXMuX3BJbnN0Ll9waXhlbHNEaXJ0eT0hMCx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLm5vU21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuXCJpbWFnZVNtb290aGluZ0VuYWJsZWRcImluIHRoaXMuZHJhd2luZ0NvbnRleHQmJih0aGlzLmRyYXdpbmdDb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZD0hMSksdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zbW9vdGg9ZnVuY3Rpb24oKXtyZXR1cm5cImltYWdlU21vb3RoaW5nRW5hYmxlZFwiaW4gdGhpcy5kcmF3aW5nQ29udGV4dCYmKHRoaXMuZHJhd2luZ0NvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPSEwKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnN0cm9rZUNhcD1mdW5jdGlvbihhKXtyZXR1cm4gYSE9PWUuUk9VTkQmJmEhPT1lLlNRVUFSRSYmYSE9PWUuUFJPSkVDVHx8KHRoaXMuZHJhd2luZ0NvbnRleHQubGluZUNhcD1hKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnN0cm9rZUpvaW49ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1lLlJPVU5EJiZhIT09ZS5CRVZFTCYmYSE9PWUuTUlURVJ8fCh0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVKb2luPWEpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuc3Ryb2tlV2VpZ2h0PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LmxpbmVXaWR0aD12b2lkIDA9PT1hfHwwPT09YT8xZS00OmEsdGhpc30sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fZ2V0RmlsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRGaWxsU3R5bGV8fCh0aGlzLl9jYWNoZWRGaWxsU3R5bGU9dGhpcy5kcmF3aW5nQ29udGV4dC5maWxsU3R5bGUpLHRoaXMuX2NhY2hlZEZpbGxTdHlsZX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5fc2V0RmlsbD1mdW5jdGlvbihhKXthIT09dGhpcy5fY2FjaGVkRmlsbFN0eWxlJiYodGhpcy5kcmF3aW5nQ29udGV4dC5maWxsU3R5bGU9YSx0aGlzLl9jYWNoZWRGaWxsU3R5bGU9YSl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX2dldFN0cm9rZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRTdHJva2VTdHlsZXx8KHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlPXRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlU3R5bGUpLHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9zZXRTdHJva2U9ZnVuY3Rpb24oYSl7YSE9PXRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlJiYodGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2VTdHlsZT1hLHRoaXMuX2NhY2hlZFN0cm9rZVN0eWxlPWEpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLmJlemllcj1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3JldHVybiB0aGlzLl9wSW5zdC5iZWdpblNoYXBlKCksdGhpcy5fcEluc3QudmVydGV4KGEsYiksdGhpcy5fcEluc3QuYmV6aWVyVmVydGV4KGMsZCxlLGYsZyxoKSx0aGlzLl9wSW5zdC5lbmRTaGFwZSgpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuY3VydmU9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXtyZXR1cm4gdGhpcy5fcEluc3QuYmVnaW5TaGFwZSgpLHRoaXMuX3BJbnN0LmN1cnZlVmVydGV4KGEsYiksdGhpcy5fcEluc3QuY3VydmVWZXJ0ZXgoYyxkKSx0aGlzLl9wSW5zdC5jdXJ2ZVZlcnRleChlLGYpLHRoaXMuX3BJbnN0LmN1cnZlVmVydGV4KGcsaCksdGhpcy5fcEluc3QuZW5kU2hhcGUoKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9kb0ZpbGxTdHJva2VDbG9zZT1mdW5jdGlvbigpe3RoaXMuX2RvRmlsbCYmdGhpcy5kcmF3aW5nQ29udGV4dC5maWxsKCksdGhpcy5fZG9TdHJva2UmJnRoaXMuZHJhd2luZ0NvbnRleHQuc3Ryb2tlKCksdGhpcy5kcmF3aW5nQ29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZHJhd2luZ0NvbnRleHQudHJhbnNmb3JtKGEsYixjLGQsZSxmKX0sZC5SZW5kZXJlcjJELnByb3RvdHlwZS5yZXNldE1hdHJpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdGhpcy5kcmF3aW5nQ29udGV4dC5zY2FsZSh0aGlzLl9wSW5zdC5fcGl4ZWxEZW5zaXR5LHRoaXMuX3BJbnN0Ll9waXhlbERlbnNpdHkpLHRoaXN9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEpe3RoaXMuZHJhd2luZ0NvbnRleHQucm90YXRlKGEpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZHJhd2luZ0NvbnRleHQuc2NhbGUoYSxiKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNoZWFyWD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC50cmFuc2Zvcm0oMSwwLE1hdGgudGFuKGEpLDEsMCwwKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnNoZWFyWT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kcmF3aW5nQ29udGV4dC50cmFuc2Zvcm0oMSxNYXRoLnRhbihhKSwwLDEsMCwwKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihhLGIpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3ImJihiPWEueSxhPWEueCksdGhpcy5kcmF3aW5nQ29udGV4dC50cmFuc2xhdGUoYSxiKSx0aGlzfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oYSxiLGMsZixnKXt2YXIgaDt2b2lkIDAhPT1mJiZ2b2lkIDAhPT1nJiZ0aGlzLmRyYXdpbmdDb250ZXh0LnRleHRCYXNlbGluZT09PWUuQkFTRUxJTkUmJihoPSEwLHRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPWUuVE9QKTt2YXIgaT1kLlJlbmRlcmVyLnByb3RvdHlwZS50ZXh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaCYmKHRoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPWUuQkFTRUxJTkUpLGl9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUuX3JlbmRlclRleHQ9ZnVuY3Rpb24oYSxiLGMsZCxmKXtpZighKGQ+PWYpKXJldHVybiBhLnB1c2goKSx0aGlzLl9pc09wZW5UeXBlKCk/dGhpcy5fdGV4dEZvbnQuX3JlbmRlclBhdGgoYixjLGQse3JlbmRlcmVyOnRoaXN9KToodGhpcy5fZG9TdHJva2UmJnRoaXMuX3N0cm9rZVNldCYmdGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2VUZXh0KGIsYyxkKSx0aGlzLl9kb0ZpbGwmJih0aGlzLl9maWxsU2V0fHx0aGlzLl9zZXRGaWxsKGUuX0RFRkFVTFRfVEVYVF9GSUxMKSx0aGlzLmRyYXdpbmdDb250ZXh0LmZpbGxUZXh0KGIsYyxkKSkpLGEucG9wKCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLGF9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUudGV4dFdpZHRoPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9pc09wZW5UeXBlKCk/dGhpcy5fdGV4dEZvbnQuX3RleHRXaWR0aChhLHRoaXMuX3RleHRTaXplKTp0aGlzLmRyYXdpbmdDb250ZXh0Lm1lYXN1cmVUZXh0KGEpLndpZHRofSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLl9hcHBseVRleHRQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLl9wSW5zdDtyZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoXCJfdGV4dEFzY2VudFwiLG51bGwpLHRoaXMuX3NldFByb3BlcnR5KFwiX3RleHREZXNjZW50XCIsbnVsbCksYT10aGlzLl90ZXh0Rm9udCx0aGlzLl9pc09wZW5UeXBlKCkmJihhPXRoaXMuX3RleHRGb250LmZvbnQuZmFtaWx5TmFtZSx0aGlzLl9zZXRQcm9wZXJ0eShcIl90ZXh0U3R5bGVcIix0aGlzLl90ZXh0Rm9udC5mb250LnN0eWxlTmFtZSkpLHRoaXMuZHJhd2luZ0NvbnRleHQuZm9udD0odGhpcy5fdGV4dFN0eWxlfHxcIm5vcm1hbFwiKStcIiBcIisodGhpcy5fdGV4dFNpemV8fDEyKStcInB4IFwiKyhhfHxcInNhbnMtc2VyaWZcIiksdGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QWxpZ249dGhpcy5fdGV4dEFsaWduLHRoaXMuX3RleHRCYXNlbGluZT09PWUuQ0VOVEVSP3RoaXMuZHJhd2luZ0NvbnRleHQudGV4dEJhc2VsaW5lPWUuX0NUWF9NSURETEU6dGhpcy5kcmF3aW5nQ29udGV4dC50ZXh0QmFzZWxpbmU9dGhpcy5fdGV4dEJhc2VsaW5lLGJ9LGQuUmVuZGVyZXIyRC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRyYXdpbmdDb250ZXh0LnNhdmUoKSxkLlJlbmRlcmVyLnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMpfSxkLlJlbmRlcmVyMkQucHJvdG90eXBlLnBvcD1mdW5jdGlvbihhKXt0aGlzLmRyYXdpbmdDb250ZXh0LnJlc3RvcmUoKSx0aGlzLl9jYWNoZWRGaWxsU3R5bGU9dGhpcy5kcmF3aW5nQ29udGV4dC5maWxsU3R5bGUsdGhpcy5fY2FjaGVkU3Ryb2tlU3R5bGU9dGhpcy5kcmF3aW5nQ29udGV4dC5zdHJva2VTdHlsZSxkLlJlbmRlcmVyLnByb3RvdHlwZS5wb3AuY2FsbCh0aGlzLGEpfSxiLmV4cG9ydHM9ZC5SZW5kZXJlcjJEfSx7XCIuLi9pbWFnZS9maWx0ZXJzXCI6NDIsXCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjQsXCIuL3A1LlJlbmRlcmVyXCI6Mjd9XSwyOTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIiksZT1hKFwiLi9jb25zdGFudHNcIik7YShcIi4vcDUuR3JhcGhpY3NcIiksYShcIi4vcDUuUmVuZGVyZXIyRFwiKSxhKFwiLi4vd2ViZ2wvcDUuUmVuZGVyZXJHTFwiKTt2YXIgZj1cImRlZmF1bHRDYW52YXMwXCIsZz1cInA1Q2FudmFzXCI7ZC5wcm90b3R5cGUuY3JlYXRlQ2FudmFzPWZ1bmN0aW9uKGEsYixjKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVDYW52YXNcIixhcmd1bWVudHMpO3ZhciBoLGk9Y3x8ZS5QMkQ7aWYoaT09PWUuV0VCR0wpe2lmKGg9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZikpe2gucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKTt2YXIgaj10aGlzLl9yZW5kZXJlcjt0aGlzLl9lbGVtZW50cz10aGlzLl9lbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1qfSl9aD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGguaWQ9ZixoLmNsYXNzTGlzdC5hZGQoZyl9ZWxzZSBpZih0aGlzLl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkKWg9dGhpcy5jYW52YXM7ZWxzZXtoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7Zm9yKHZhciBrPTA7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkZWZhdWx0Q2FudmFzXCIrayk7KWsrKztmPVwiZGVmYXVsdENhbnZhc1wiK2ssaC5pZD1mLGguY2xhc3NMaXN0LmFkZChnKX1yZXR1cm4gdGhpcy5fc2V0dXBEb25lfHwoaC5kYXRhc2V0LmhpZGRlbj0hMCxoLnN0eWxlLnZpc2liaWxpdHk9XCJoaWRkZW5cIiksdGhpcy5fdXNlck5vZGU/dGhpcy5fdXNlck5vZGUuYXBwZW5kQ2hpbGQoaCk6ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSxpPT09ZS5XRUJHTD8odGhpcy5fc2V0UHJvcGVydHkoXCJfcmVuZGVyZXJcIixuZXcgZC5SZW5kZXJlckdMKGgsdGhpcywhMCkpLHRoaXMuX2VsZW1lbnRzLnB1c2godGhpcy5fcmVuZGVyZXIpKTp0aGlzLl9kZWZhdWx0R3JhcGhpY3NDcmVhdGVkfHwodGhpcy5fc2V0UHJvcGVydHkoXCJfcmVuZGVyZXJcIixuZXcgZC5SZW5kZXJlcjJEKGgsdGhpcywhMCkpLHRoaXMuX2RlZmF1bHRHcmFwaGljc0NyZWF0ZWQ9ITAsdGhpcy5fZWxlbWVudHMucHVzaCh0aGlzLl9yZW5kZXJlcikpLHRoaXMuX3JlbmRlcmVyLnJlc2l6ZShhLGIpLHRoaXMuX3JlbmRlcmVyLl9hcHBseURlZmF1bHRzKCksdGhpcy5fcmVuZGVyZXJ9LGQucHJvdG90eXBlLnJlc2l6ZUNhbnZhcz1mdW5jdGlvbihhLGIsYyl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicmVzaXplQ2FudmFzXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlcil7dmFyIGU9e307Zm9yKHZhciBmIGluIHRoaXMuZHJhd2luZ0NvbnRleHQpe3ZhciBnPXRoaXMuZHJhd2luZ0NvbnRleHRbZl07XCJvYmplY3RcIiE9dHlwZW9mIGcmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGcmJihlW2ZdPWcpfXRoaXMuX3JlbmRlcmVyLnJlc2l6ZShhLGIpLHRoaXMud2lkdGg9YSx0aGlzLmhlaWdodD1iO2Zvcih2YXIgaCBpbiBlKXRyeXt0aGlzLmRyYXdpbmdDb250ZXh0W2hdPWVbaF19Y2F0Y2goYSl7fWN8fHRoaXMucmVkcmF3KCl9fSxkLnByb3RvdHlwZS5ub0NhbnZhcz1mdW5jdGlvbigpe3RoaXMuY2FudmFzJiZ0aGlzLmNhbnZhcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY2FudmFzKX0sZC5wcm90b3R5cGUuY3JlYXRlR3JhcGhpY3M9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVHcmFwaGljc1wiLGFyZ3VtZW50cyksbmV3IGQuR3JhcGhpY3MoYSxiLGMsdGhpcyl9LGQucHJvdG90eXBlLmJsZW5kTW9kZT1mdW5jdGlvbihhKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJibGVuZE1vZGVcIixhcmd1bWVudHMpLGEhPT1lLkJMRU5EJiZhIT09ZS5EQVJLRVNUJiZhIT09ZS5MSUdIVEVTVCYmYSE9PWUuRElGRkVSRU5DRSYmYSE9PWUuTVVMVElQTFkmJmEhPT1lLkVYQ0xVU0lPTiYmYSE9PWUuU0NSRUVOJiZhIT09ZS5SRVBMQUNFJiZhIT09ZS5PVkVSTEFZJiZhIT09ZS5IQVJEX0xJR0hUJiZhIT09ZS5TT0ZUX0xJR0hUJiZhIT09ZS5ET0RHRSYmYSE9PWUuQlVSTiYmYSE9PWUuQUREJiZhIT09ZS5OT1JNQUwpdGhyb3cgbmV3IEVycm9yKFwiTW9kZSBcIithK1wiIG5vdCByZWNvZ25pemVkLlwiKTt0aGlzLl9yZW5kZXJlci5ibGVuZE1vZGUoYSl9LGIuZXhwb3J0cz1kfSx7XCIuLi93ZWJnbC9wNS5SZW5kZXJlckdMXCI6NzQsXCIuL2NvbnN0YW50c1wiOjE4LFwiLi9tYWluXCI6MjQsXCIuL3A1LkdyYXBoaWNzXCI6MjYsXCIuL3A1LlJlbmRlcmVyMkRcIjoyOH1dLDMwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL21haW5cIiksZT1hKFwiLi4vY29uc3RhbnRzXCIpLGY9YShcIi4uL2hlbHBlcnNcIik7YShcIi4uL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUuYXJjPWZ1bmN0aW9uKGEsYixjLGcsaCxpLGosayl7aWYoZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYXJjXCIsYXJndW1lbnRzKSwhdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiYhdGhpcy5fcmVuZGVyZXIuX2RvRmlsbClyZXR1cm4gdGhpcztmb3IoaD10aGlzLl90b1JhZGlhbnMoaCksaT10aGlzLl90b1JhZGlhbnMoaSk7aDwwOyloKz1lLlRXT19QSTtmb3IoO2k8MDspaSs9ZS5UV09fUEk7dm9pZCAwIT09aCYmdm9pZCAwIT09aSYmKGkudG9GaXhlZCgxMCk9PT1oLnRvRml4ZWQoMTApfHxNYXRoLmFicyhpLWgpPT09ZS5UV09fUEk/KGglPWUuVFdPX1BJLGklPWUuVFdPX1BJLGgrPWUuVFdPX1BJKTpNYXRoLmFicyhpLWgpPmUuVFdPX1BJJiYoaCU9ZS5UV09fUEksaSU9ZS5UV09fUEksaSs9ZS5UV09fUEkpKSxoPD1lLkhBTEZfUEk/aD1NYXRoLmF0YW4oYy9nKk1hdGgudGFuKGgpKTpoPmUuSEFMRl9QSSYmaDw9MyplLkhBTEZfUEkmJihoPU1hdGguYXRhbihjL2cqTWF0aC50YW4oaCkpK2UuUEkpLGk8PWUuSEFMRl9QST9pPU1hdGguYXRhbihjL2cqTWF0aC50YW4oaSkpOmk+ZS5IQUxGX1BJJiZpPD0zKmUuSEFMRl9QSSYmKGk9TWF0aC5hdGFuKGMvZypNYXRoLnRhbihpKSkrZS5QSSksaD5pJiYoaSs9ZS5UV09fUEkpLGM9TWF0aC5hYnMoYyksZz1NYXRoLmFicyhnKTt2YXIgbD1mLm1vZGVBZGp1c3QoYSxiLGMsZyx0aGlzLl9yZW5kZXJlci5fZWxsaXBzZU1vZGUpO3JldHVybiB0aGlzLl9yZW5kZXJlci5hcmMobC54LGwueSxsLncsbC5oLGgsaSxqLGspLHRoaXN9LGQucHJvdG90eXBlLmVsbGlwc2U9ZnVuY3Rpb24oYSxiLGMsZSxnKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJlbGxpcHNlXCIsYXJndW1lbnRzKSwhdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiYhdGhpcy5fcmVuZGVyZXIuX2RvRmlsbClyZXR1cm4gdGhpcztjPDAmJihjPU1hdGguYWJzKGMpKSx2b2lkIDA9PT1lP2U9YzplPDAmJihlPU1hdGguYWJzKGUpKTt2YXIgaD1mLm1vZGVBZGp1c3QoYSxiLGMsZSx0aGlzLl9yZW5kZXJlci5fZWxsaXBzZU1vZGUpO3JldHVybiB0aGlzLl9yZW5kZXJlci5lbGxpcHNlKFtoLngsaC55LGgudyxoLmgsZ10pLHRoaXN9LGQucHJvdG90eXBlLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibGluZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiZ0aGlzLl9yZW5kZXJlci5saW5lLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicG9pbnRcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZSYmdGhpcy5fcmVuZGVyZXIucG9pbnQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzfSxkLnByb3RvdHlwZS5xdWFkPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInF1YWRcIixhcmd1bWVudHMpLCh0aGlzLl9yZW5kZXJlci5fZG9TdHJva2V8fHRoaXMuX3JlbmRlcmVyLl9kb0ZpbGwpJiZ0aGlzLl9yZW5kZXJlci5xdWFkLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucmVjdD1mdW5jdGlvbigpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJlY3RcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9kb1N0cm9rZXx8dGhpcy5fcmVuZGVyZXIuX2RvRmlsbCl7Zm9yKHZhciBhPWYubW9kZUFkanVzdChhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10sdGhpcy5fcmVuZGVyZXIuX3JlY3RNb2RlKSxiPVthLngsYS55LGEudyxhLmhdLGM9NDtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWJbY109YXJndW1lbnRzW2NdO3RoaXMuX3JlbmRlcmVyLnJlY3QoYil9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLnRyaWFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRyaWFuZ2xlXCIsYXJndW1lbnRzKSwodGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlfHx0aGlzLl9yZW5kZXJlci5fZG9GaWxsKSYmdGhpcy5fcmVuZGVyZXIudHJpYW5nbGUoYXJndW1lbnRzKSx0aGlzfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29uc3RhbnRzXCI6MTgsXCIuLi9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9oZWxwZXJzXCI6MjEsXCIuLi9tYWluXCI6MjR9XSwzMTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9tYWluXCIpLGU9YShcIi4uL2NvbnN0YW50c1wiKTtkLnByb3RvdHlwZS5lbGxpcHNlTW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZWxsaXBzZU1vZGVcIixhcmd1bWVudHMpLGEhPT1lLkNPUk5FUiYmYSE9PWUuQ09STkVSUyYmYSE9PWUuUkFESVVTJiZhIT09ZS5DRU5URVJ8fCh0aGlzLl9yZW5kZXJlci5fZWxsaXBzZU1vZGU9YSksdGhpc30sZC5wcm90b3R5cGUubm9TbW9vdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIubm9TbW9vdGgoKSx0aGlzfSxkLnByb3RvdHlwZS5yZWN0TW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicmVjdE1vZGVcIixhcmd1bWVudHMpLGEhPT1lLkNPUk5FUiYmYSE9PWUuQ09STkVSUyYmYSE9PWUuUkFESVVTJiZhIT09ZS5DRU5URVJ8fCh0aGlzLl9yZW5kZXJlci5fcmVjdE1vZGU9YSksdGhpc30sZC5wcm90b3R5cGUuc21vb3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLnNtb290aCgpLHRoaXN9LGQucHJvdG90eXBlLnN0cm9rZUNhcD1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3Ryb2tlQ2FwXCIsYXJndW1lbnRzKSxhIT09ZS5ST1VORCYmYSE9PWUuU1FVQVJFJiZhIT09ZS5QUk9KRUNUfHx0aGlzLl9yZW5kZXJlci5zdHJva2VDYXAoYSksdGhpc30sZC5wcm90b3R5cGUuc3Ryb2tlSm9pbj1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3Ryb2tlSm9pblwiLGFyZ3VtZW50cyksYSE9PWUuUk9VTkQmJmEhPT1lLkJFVkVMJiZhIT09ZS5NSVRFUnx8dGhpcy5fcmVuZGVyZXIuc3Ryb2tlSm9pbihhKSx0aGlzfSxkLnByb3RvdHlwZS5zdHJva2VXZWlnaHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInN0cm9rZVdlaWdodFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuc3Ryb2tlV2VpZ2h0KGEpLHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb25zdGFudHNcIjoxOCxcIi4uL21haW5cIjoyNH1dLDMyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL21haW5cIik7YShcIi4uL2Vycm9yX2hlbHBlcnNcIiksZC5wcm90b3R5cGUuYmV6aWVyPWZ1bmN0aW9uKCl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllclwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlfHx0aGlzLl9yZW5kZXJlci5fZG9GaWxsPyh0aGlzLl9yZW5kZXJlci5iZXppZXIuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKSx0aGlzKTp0aGlzfSxkLnByb3RvdHlwZS5iZXppZXJEZXRhaWw9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllckRldGFpbFwiLGFyZ3VtZW50cyksdGhpcy5fYmV6aWVyRGV0YWlsPWEsdGhpc30sZC5wcm90b3R5cGUuYmV6aWVyUG9pbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJQb2ludFwiLGFyZ3VtZW50cyk7dmFyIGc9MS1mO3JldHVybiBNYXRoLnBvdyhnLDMpKmErMypNYXRoLnBvdyhnLDIpKmYqYiszKmcqTWF0aC5wb3coZiwyKSpjK01hdGgucG93KGYsMykqZX0sZC5wcm90b3R5cGUuYmV6aWVyVGFuZ2VudD1mdW5jdGlvbihhLGIsYyxlLGYpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJlemllclRhbmdlbnRcIixhcmd1bWVudHMpO3ZhciBnPTEtZjtyZXR1cm4gMyplKk1hdGgucG93KGYsMiktMypjKk1hdGgucG93KGYsMikrNipjKmcqZi02KmIqZypmKzMqYipNYXRoLnBvdyhnLDIpLTMqYSpNYXRoLnBvdyhnLDIpfSxkLnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlJiZ0aGlzLl9yZW5kZXJlci5jdXJ2ZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpLHRoaXN9LGQucHJvdG90eXBlLmN1cnZlRGV0YWlsPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZURldGFpbFwiLGFyZ3VtZW50cyksdGhpcy5fY3VydmVEZXRhaWw9YTwzPzM6YSx0aGlzfSxkLnByb3RvdHlwZS5jdXJ2ZVRpZ2h0bmVzcz1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVUaWdodG5lc3NcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLl9jdXJ2ZVRpZ2h0bmVzcz1hLHRoaXN9LGQucHJvdG90eXBlLmN1cnZlUG9pbnQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjdXJ2ZVBvaW50XCIsYXJndW1lbnRzKTt2YXIgZz1mKmYqZixoPWYqZjtyZXR1cm4gYSooLS41KmcraC0uNSpmKStiKigxLjUqZy0yLjUqaCsxKStjKigtMS41KmcrMipoKy41KmYpK2UqKC41KmctLjUqaCl9LGQucHJvdG90eXBlLmN1cnZlVGFuZ2VudD1mdW5jdGlvbihhLGIsYyxlLGYpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImN1cnZlVGFuZ2VudFwiLGFyZ3VtZW50cyk7dmFyIGc9ZipmO3JldHVybiBhKigtMypnLzIrMipmLS41KStiKig5KmcvMi01KmYpK2MqKC05KmcvMis0KmYrLjUpK2UqKDMqZy8yLWYpfSxiLmV4cG9ydHM9ZH0se1wiLi4vZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vbWFpblwiOjI0fV0sMzM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vbWFpblwiKSxlPWEoXCIuLi9jb25zdGFudHNcIiksZj1udWxsLGc9W10saD1bXSxpPSExLGo9ITEsaz0hMSxsPSExLG09ITA7ZC5wcm90b3R5cGUuYmVnaW5Db250b3VyPWZ1bmN0aW9uKCl7cmV0dXJuIGg9W10sbD0hMCx0aGlzfSxkLnByb3RvdHlwZS5iZWdpblNoYXBlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZWdpblNoYXBlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5pc1AzRD90aGlzLl9yZW5kZXJlci5iZWdpblNoYXBlLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk6KGY9YT09PWUuUE9JTlRTfHxhPT09ZS5MSU5FU3x8YT09PWUuVFJJQU5HTEVTfHxhPT09ZS5UUklBTkdMRV9GQU58fGE9PT1lLlRSSUFOR0xFX1NUUklQfHxhPT09ZS5RVUFEU3x8YT09PWUuUVVBRF9TVFJJUD9hOm51bGwsZz1bXSxoPVtdKSx0aGlzfSxkLnByb3RvdHlwZS5iZXppZXJWZXJ0ZXg9ZnVuY3Rpb24oKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJiZXppZXJWZXJ0ZXhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEKXRoaXMuX3JlbmRlcmVyLmJlemllclZlcnRleC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpO2Vsc2V7aWYoMD09PWcubGVuZ3RoKXRocm93XCJ2ZXJ0ZXgoKSBtdXN0IGJlIHVzZWQgb25jZSBiZWZvcmUgY2FsbGluZyBiZXppZXJWZXJ0ZXgoKVwiO2k9ITA7Zm9yKHZhciBhPVtdLGI9MDtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKWFbYl09YXJndW1lbnRzW2JdO2EuaXNWZXJ0PSExLGw/aC5wdXNoKGEpOmcucHVzaChhKX1yZXR1cm4gdGhpc30sZC5wcm90b3R5cGUuY3VydmVWZXJ0ZXg9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3VydmVWZXJ0ZXhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEP3RoaXMuX3JlbmRlcmVyLmN1cnZlVmVydGV4LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk6KGo9ITAsdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSkpLHRoaXN9LGQucHJvdG90eXBlLmVuZENvbnRvdXI9ZnVuY3Rpb24oKXt2YXIgYT1oWzBdLnNsaWNlKCk7YS5pc1ZlcnQ9aFswXS5pc1ZlcnQsYS5tb3ZlVG89ITEsaC5wdXNoKGEpLG0mJihnLnB1c2goZ1swXSksbT0hMSk7Zm9yKHZhciBiPTA7YjxoLmxlbmd0aDtiKyspZy5wdXNoKGhbYl0pO3JldHVybiB0aGlzfSxkLnByb3RvdHlwZS5lbmRTaGFwZT1mdW5jdGlvbihhKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJlbmRTaGFwZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhpcy5fcmVuZGVyZXIuZW5kU2hhcGUoYSxqLGksayxsLGYpO2Vsc2V7aWYoMD09PWcubGVuZ3RoKXJldHVybiB0aGlzO2lmKCF0aGlzLl9yZW5kZXJlci5fZG9TdHJva2UmJiF0aGlzLl9yZW5kZXJlci5fZG9GaWxsKXJldHVybiB0aGlzO3ZhciBiPWE9PT1lLkNMT1NFO2ImJiFsJiZnLnB1c2goZ1swXSksdGhpcy5fcmVuZGVyZXIuZW5kU2hhcGUoYSxnLGosaSxrLGwsZiksaj0hMSxpPSExLGs9ITEsbD0hMSxtPSEwLGImJmcucG9wKCl9cmV0dXJuIHRoaXN9LGQucHJvdG90eXBlLnF1YWRyYXRpY1ZlcnRleD1mdW5jdGlvbigpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInF1YWRyYXRpY1ZlcnRleFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhpcy5fcmVuZGVyZXIucXVhZHJhdGljVmVydGV4LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyk7ZWxzZXtpZih0aGlzLl9jb250b3VySW5pdGVkKXt2YXIgYT17fTtyZXR1cm4gYS54PWFyZ3VtZW50c1swXSxhLnk9YXJndW1lbnRzWzFdLGEueDM9YXJndW1lbnRzWzJdLGEueTM9YXJndW1lbnRzWzNdLGEudHlwZT1lLlFVQURSQVRJQyx0aGlzLl9jb250b3VyVmVydGljZXMucHVzaChhKSx0aGlzfWlmKCEoZy5sZW5ndGg+MCkpdGhyb3cgbmV3IEVycm9yKFwidmVydGV4KCkgbXVzdCBiZSB1c2VkIG9uY2UgYmVmb3JlIGNhbGxpbmcgcXVhZHJhdGljVmVydGV4KClcIik7az0hMDtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYltjXT1hcmd1bWVudHNbY107Yi5pc1ZlcnQ9ITEsbD9oLnB1c2goYik6Zy5wdXNoKGIpfXJldHVybiB0aGlzfSxkLnByb3RvdHlwZS52ZXJ0ZXg9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZih0aGlzLl9yZW5kZXJlci5pc1AzRCl0aGlzLl9yZW5kZXJlci52ZXJ0ZXguYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTtlbHNle3ZhciBmPVtdO2YuaXNWZXJ0PSEwLGZbMF09YSxmWzFdPWIsZlsyXT0wLGZbM109MCxmWzRdPTAsZls1XT10aGlzLl9yZW5kZXJlci5fZ2V0RmlsbCgpLGZbNl09dGhpcy5fcmVuZGVyZXIuX2dldFN0cm9rZSgpLGMmJihmLm1vdmVUbz1jKSxsPygwPT09aC5sZW5ndGgmJihmLm1vdmVUbz0hMCksaC5wdXNoKGYpKTpnLnB1c2goZil9cmV0dXJuIHRoaXN9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb25zdGFudHNcIjoxOCxcIi4uL21haW5cIjoyNH1dLDM0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cub1JlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxmdW5jdGlvbihhLGIpe3dpbmRvdy5zZXRUaW1lb3V0KGEsMWUzLzYwKX19KCksZnVuY3Rpb24oKXtcInVuZGVmaW5lZFwiPT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXl8fFVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZS5zbGljZXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KFVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZSxcInNsaWNlXCIse3ZhbHVlOkFycmF5LnByb3RvdHlwZS5zbGljZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMX0pfSgpLGZ1bmN0aW9uKCl7aWYoIU9iamVjdC5hc3NpZ24pe3ZhciBhPU9iamVjdC5rZXlzLGI9T2JqZWN0LmRlZmluZVByb3BlcnR5LGM9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMCE9PWEmJm51bGwhPT1hfSxkPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbCgpLGU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxmPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZS5jYWxsKGEsYil9fSxnPWZ1bmN0aW9uKGIsZSl7aWYoIWMoYikpdGhyb3cgbmV3IFR5cGVFcnJvcihcInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdFwiKTt2YXIgZyxoLGksaixrPU9iamVjdChiKTtmb3IoZz0xO2c8YXJndW1lbnRzLmxlbmd0aDsrK2cpZm9yKGg9T2JqZWN0KGFyZ3VtZW50c1tnXSksaj1hKGgpLGQmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJmoucHVzaC5hcHBseShqLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaCkuZmlsdGVyKGYoaCkpKSxpPTA7aTxqLmxlbmd0aDsrK2kpa1tqW2ldXT1oW2pbaV1dO3JldHVybiBrfTtiKE9iamVjdCxcImFzc2lnblwiLHt2YWx1ZTpnLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwfSl9fSgpfSx7fV0sMzU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi9tYWluXCIpO2QucHJvdG90eXBlLm5vTG9vcD1mdW5jdGlvbigpe3RoaXMuX2xvb3A9ITF9LGQucHJvdG90eXBlLmxvb3A9ZnVuY3Rpb24oKXt0aGlzLl9sb29wPSEwLHRoaXMuX2RyYXcoKX0sZC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbigpe3RoaXMuX3N0eWxlcy5wdXNoKHtwcm9wczp7X2NvbG9yTW9kZTp0aGlzLl9jb2xvck1vZGV9LHJlbmRlcmVyOnRoaXMuX3JlbmRlcmVyLnB1c2goKX0pfSxkLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9zdHlsZXMucG9wKCk7YT8odGhpcy5fcmVuZGVyZXIucG9wKGEucmVuZGVyZXIpLE9iamVjdC5hc3NpZ24odGhpcyxhLnByb3BzKSk6Y29uc29sZS53YXJuKFwicG9wKCkgd2FzIGNhbGxlZCB3aXRob3V0IG1hdGNoaW5nIHB1c2goKVwiKX0sZC5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKGEpe3ZhciBiPXBhcnNlSW50KGEpOyhpc05hTihiKXx8YjwxKSYmKGI9MSk7dmFyIGM9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXMsZD1jLnNldHVwLGU9Yy5kcmF3O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpe3ZvaWQgMD09PWQmJmMuc2NhbGUoYy5fcGl4ZWxEZW5zaXR5LGMuX3BpeGVsRGVuc2l0eSk7Zm9yKHZhciBmPWZ1bmN0aW9uKGEpe2EuY2FsbChjKX0sZz0wO2c8YjtnKyspYy5yZXNldE1hdHJpeCgpLGMuX3JlbmRlcmVyLmlzUDNEJiZjLl9yZW5kZXJlci5fdXBkYXRlKCksYy5fc2V0UHJvcGVydHkoXCJmcmFtZUNvdW50XCIsYy5mcmFtZUNvdW50KzEpLGMuX3JlZ2lzdGVyZWRNZXRob2RzLnByZS5mb3JFYWNoKGYpLGUoKSxjLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0LmZvckVhY2goZil9fSxiLmV4cG9ydHM9ZH0se1wiLi9tYWluXCI6MjR9XSwzNjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuL21haW5cIik7ZC5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3JldHVybiB0aGlzLl9yZW5kZXJlci5hcHBseU1hdHJpeChhLGIsYyxkLGUsZiksdGhpc30sZC5wcm90b3R5cGUucG9wTWF0cml4PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwicG9wTWF0cml4KCkgbm90IHVzZWQsIHNlZSBwb3AoKVwiKX0sZC5wcm90b3R5cGUucHJpbnRNYXRyaXg9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJwcmludE1hdHJpeCgpIG5vdCBpbXBsZW1lbnRlZFwiKX0sZC5wcm90b3R5cGUucHVzaE1hdHJpeD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInB1c2hNYXRyaXgoKSBub3QgdXNlZCwgc2VlIHB1c2goKVwiKX0sZC5wcm90b3R5cGUucmVzZXRNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIucmVzZXRNYXRyaXgoKSx0aGlzfSxkLnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicm90YXRlXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5yb3RhdGUodGhpcy5fdG9SYWRpYW5zKGEpLGIpLHRoaXN9LGQucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwicm90YXRlWFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJyb3RhdGVYXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5yb3RhdGVYKHRoaXMuX3RvUmFkaWFucyhhKSksdGhpc30sZC5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJyb3RhdGVZXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInJvdGF0ZVlcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnJvdGF0ZVkodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcInJvdGF0ZVpcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicm90YXRlWlwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIucm90YXRlWih0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKGEsYixjKXtpZihkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzY2FsZVwiLGFyZ3VtZW50cyksYSBpbnN0YW5jZW9mIGQuVmVjdG9yKXt2YXIgZT1hO2E9ZS54LGI9ZS55LGM9ZS56fWVsc2UgaWYoYSBpbnN0YW5jZW9mIEFycmF5KXt2YXIgZj1hO2E9ZlswXSxiPWZbMV0sYz1mWzJdfHwxfXJldHVybiBpc05hTihiKT9iPWM9YTppc05hTihjKSYmKGM9MSksdGhpcy5fcmVuZGVyZXIuc2NhbGUuY2FsbCh0aGlzLl9yZW5kZXJlcixhLGIsYyksdGhpc30sZC5wcm90b3R5cGUuc2hlYXJYPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzaGVhclhcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnNoZWFyWCh0aGlzLl90b1JhZGlhbnMoYSkpLHRoaXN9LGQucHJvdG90eXBlLnNoZWFyWT1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2hlYXJZXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5zaGVhclkodGhpcy5fdG9SYWRpYW5zKGEpKSx0aGlzfSxkLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0cmFuc2xhdGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmlzUDNEP3RoaXMuX3JlbmRlcmVyLnRyYW5zbGF0ZShhLGIsYyk6dGhpcy5fcmVuZGVyZXIudHJhbnNsYXRlKGEsYiksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4vbWFpblwiOjI0fV0sMzc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmNyZWF0ZVN0cmluZ0RpY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3JlYXRlU3RyaW5nRGljdFwiLGFyZ3VtZW50cyksbmV3IGQuU3RyaW5nRGljdChhLGIpfSxkLnByb3RvdHlwZS5jcmVhdGVOdW1iZXJEaWN0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImNyZWF0ZU51bWJlckRpY3RcIixhcmd1bWVudHMpLG5ldyBkLk51bWJlckRpY3QoYSxiKX0sZC5UeXBlZERpY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSBpbnN0YW5jZW9mIE9iamVjdD90aGlzLmRhdGE9YToodGhpcy5kYXRhPXt9LHRoaXMuZGF0YVthXT1iKSx0aGlzfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aH0sZC5UeXBlZERpY3QucHJvdG90eXBlLmhhc0tleT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRhLmhhc093blByb3BlcnR5KGEpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe2lmKHRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKSlyZXR1cm4gdGhpcy5kYXRhW2FdO2NvbnNvbGUubG9nKGErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBEaWN0aW9uYXJ5XCIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5fdmFsaWRhdGUoYik/dGhpcy5kYXRhW2FdPWI6Y29uc29sZS5sb2coXCJUaG9zZSB2YWx1ZXMgZG9udCB3b3JrIGZvciB0aGlzIGRpY3Rpb25hcnkgdHlwZS5cIil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5fYWRkT2JqPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXRoaXMuc2V0KGIsYVtiXSl9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24oYSxiKXthIGluc3RhbmNlb2YgT2JqZWN0JiZ2b2lkIDA9PT1iP3RoaXMuX2FkZE9iaihhKTp2b2lkIDAhPT1hP3RoaXMuc2V0KGEsYik6Y29uc29sZS5sb2coXCJJbiBvcmRlciB0byBjcmVhdGUgYSBuZXcgRGljdGlvbmFyeSBlbnRyeSB5b3UgbXVzdCBwYXNzIGFuIG9iamVjdCBvciBhIGtleSwgdmFsdWUgcGFpclwiKX0sZC5UeXBlZERpY3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5kYXRhPXt9fSxkLlR5cGVkRGljdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGEpe2lmKCF0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSkpdGhyb3cgbmV3IEVycm9yKGErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBEaWN0aW9uYXJ5XCIpO2RlbGV0ZSB0aGlzLmRhdGFbYV19LGQuVHlwZWREaWN0LnByb3RvdHlwZS5wcmludD1mdW5jdGlvbigpe2Zvcih2YXIgYSBpbiB0aGlzLmRhdGEpY29uc29sZS5sb2coXCJrZXk6XCIrYStcIiB2YWx1ZTpcIit0aGlzLmRhdGFbYV0pfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuc2F2ZVRhYmxlPWZ1bmN0aW9uKGEpe3ZhciBiPVwiXCI7Zm9yKHZhciBjIGluIHRoaXMuZGF0YSliKz1jK1wiLFwiK3RoaXMuZGF0YVtjXStcIlxcblwiO3ZhciBlPW5ldyBCbG9iKFtiXSx7dHlwZTpcInRleHQvY3N2XCJ9KTtkLnByb3RvdHlwZS5kb3dubG9hZEZpbGUoZSxhfHxcIm15Y3N2XCIsXCJjc3ZcIil9LGQuVHlwZWREaWN0LnByb3RvdHlwZS5zYXZlSlNPTj1mdW5jdGlvbihhLGIpe2QucHJvdG90eXBlLnNhdmVKU09OKHRoaXMuZGF0YSxhLGIpfSxkLlR5cGVkRGljdC5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGEpe3JldHVybiEwfSxkLlN0cmluZ0RpY3Q9ZnVuY3Rpb24oKXtkLlR5cGVkRGljdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGQuU3RyaW5nRGljdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlR5cGVkRGljdC5wcm90b3R5cGUpLGQuU3RyaW5nRGljdC5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhfSxkLk51bWJlckRpY3Q9ZnVuY3Rpb24oKXtkLlR5cGVkRGljdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlR5cGVkRGljdC5wcm90b3R5cGUpLGQuTnVtYmVyRGljdC5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhfSxkLk51bWJlckRpY3QucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhLGIpe3RoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShhKT90aGlzLmRhdGFbYV0rPWI6Y29uc29sZS5sb2coXCJUaGUga2V5IC0gXCIrYStcIiBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGRpY3Rpb25hcnkuXCIpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihhLGIpe3RoaXMuYWRkKGEsLWIpfSxkLk51bWJlckRpY3QucHJvdG90eXBlLm11bHQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSk/dGhpcy5kYXRhW2FdKj1iOmNvbnNvbGUubG9nKFwiVGhlIGtleSAtIFwiK2ErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkaWN0aW9uYXJ5LlwiKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYSxiKXt0aGlzLmRhdGEuaGFzT3duUHJvcGVydHkoYSk/dGhpcy5kYXRhW2FdLz1iOmNvbnNvbGUubG9nKFwiVGhlIGtleSAtIFwiK2ErXCIgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBkaWN0aW9uYXJ5LlwiKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5fdmFsdWVUZXN0PWZ1bmN0aW9uKGEpe2lmKDA9PT1PYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gc2VhcmNoIGZvciBhIG1pbmltdW0gb3IgbWF4aW11bSB2YWx1ZSBvbiBhbiBlbXB0eSBOdW1iZXJEaWN0XCIpO2lmKDE9PT1PYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aClyZXR1cm4gdGhpcy5kYXRhW09iamVjdC5rZXlzKHRoaXMuZGF0YSlbMF1dO3ZhciBiPXRoaXMuZGF0YVtPYmplY3Qua2V5cyh0aGlzLmRhdGEpWzBdXTtmb3IodmFyIGMgaW4gdGhpcy5kYXRhKXRoaXMuZGF0YVtjXSphPGIqYSYmKGI9dGhpcy5kYXRhW2NdKTtyZXR1cm4gYn0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5taW5WYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZVRlc3QoMSl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWF4VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWVUZXN0KC0xKX0sZC5OdW1iZXJEaWN0LnByb3RvdHlwZS5fa2V5VGVzdD1mdW5jdGlvbihhKXtpZigwPT09T2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHVzZSBtaW5WYWx1ZSBvbiBhbiBlbXB0eSBOdW1iZXJEaWN0XCIpO2lmKDE9PT1PYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aClyZXR1cm4gT2JqZWN0LmtleXModGhpcy5kYXRhKVswXTtmb3IodmFyIGI9T2JqZWN0LmtleXModGhpcy5kYXRhKVswXSxjPTE7YzxPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aDtjKyspT2JqZWN0LmtleXModGhpcy5kYXRhKVtjXSphPGIqYSYmKGI9T2JqZWN0LmtleXModGhpcy5kYXRhKVtjXSk7cmV0dXJuIGJ9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWluS2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleVRlc3QoMSl9LGQuTnVtYmVyRGljdC5wcm90b3R5cGUubWF4S2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleVRlc3QoLTEpfSxiLmV4cG9ydHM9ZC5UeXBlZERpY3R9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sMzg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmRldmljZU9yaWVudGF0aW9uPXZvaWQgMCxkLnByb3RvdHlwZS5hY2NlbGVyYXRpb25YPTAsZC5wcm90b3R5cGUuYWNjZWxlcmF0aW9uWT0wLGQucHJvdG90eXBlLmFjY2VsZXJhdGlvblo9MCxkLnByb3RvdHlwZS5wQWNjZWxlcmF0aW9uWD0wLGQucHJvdG90eXBlLnBBY2NlbGVyYXRpb25ZPTAsZC5wcm90b3R5cGUucEFjY2VsZXJhdGlvblo9MCxkLnByb3RvdHlwZS5fdXBkYXRlUEFjY2VsZXJhdGlvbnM9ZnVuY3Rpb24oKXt0aGlzLl9zZXRQcm9wZXJ0eShcInBBY2NlbGVyYXRpb25YXCIsdGhpcy5hY2NlbGVyYXRpb25YKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBBY2NlbGVyYXRpb25ZXCIsdGhpcy5hY2NlbGVyYXRpb25ZKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBBY2NlbGVyYXRpb25aXCIsdGhpcy5hY2NlbGVyYXRpb25aKX0sZC5wcm90b3R5cGUucm90YXRpb25YPTAsZC5wcm90b3R5cGUucm90YXRpb25ZPTAsZC5wcm90b3R5cGUucm90YXRpb25aPTAsZC5wcm90b3R5cGUucFJvdGF0aW9uWD0wLGQucHJvdG90eXBlLnBSb3RhdGlvblk9MCxkLnByb3RvdHlwZS5wUm90YXRpb25aPTA7dmFyIGUsZixnLGg9MCxpPTAsaj0wLGs9XCJjbG9ja3dpc2VcIixsPVwiY2xvY2t3aXNlXCIsbT1cImNsb2Nrd2lzZVwiO2QucHJvdG90eXBlLl91cGRhdGVQUm90YXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fc2V0UHJvcGVydHkoXCJwUm90YXRpb25YXCIsdGhpcy5yb3RhdGlvblgpLHRoaXMuX3NldFByb3BlcnR5KFwicFJvdGF0aW9uWVwiLHRoaXMucm90YXRpb25ZKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBSb3RhdGlvblpcIix0aGlzLnJvdGF0aW9uWil9LGQucHJvdG90eXBlLnR1cm5BeGlzPXZvaWQgMDt2YXIgbj0uNSxvPTMwO2QucHJvdG90eXBlLnNldE1vdmVUaHJlc2hvbGQ9ZnVuY3Rpb24oYSl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2V0TW92ZVRocmVzaG9sZFwiLGFyZ3VtZW50cyksbj1hfSxkLnByb3RvdHlwZS5zZXRTaGFrZVRocmVzaG9sZD1mdW5jdGlvbihhKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzZXRTaGFrZVRocmVzaG9sZFwiLGFyZ3VtZW50cyksbz1hfSxkLnByb3RvdHlwZS5fb25kZXZpY2VvcmllbnRhdGlvbj1mdW5jdGlvbihhKXt0aGlzLl91cGRhdGVQUm90YXRpb25zKCksdGhpcy5fc2V0UHJvcGVydHkoXCJyb3RhdGlvblhcIixhLmJldGEpLHRoaXMuX3NldFByb3BlcnR5KFwicm90YXRpb25ZXCIsYS5nYW1tYSksdGhpcy5fc2V0UHJvcGVydHkoXCJyb3RhdGlvblpcIixhLmFscGhhKSx0aGlzLl9oYW5kbGVNb3Rpb24oKX0sZC5wcm90b3R5cGUuX29uZGV2aWNlbW90aW9uPWZ1bmN0aW9uKGEpe3RoaXMuX3VwZGF0ZVBBY2NlbGVyYXRpb25zKCksdGhpcy5fc2V0UHJvcGVydHkoXCJhY2NlbGVyYXRpb25YXCIsMiphLmFjY2VsZXJhdGlvbi54KSx0aGlzLl9zZXRQcm9wZXJ0eShcImFjY2VsZXJhdGlvbllcIiwyKmEuYWNjZWxlcmF0aW9uLnkpLHRoaXMuX3NldFByb3BlcnR5KFwiYWNjZWxlcmF0aW9uWlwiLDIqYS5hY2NlbGVyYXRpb24ueiksdGhpcy5faGFuZGxlTW90aW9uKCl9LGQucHJvdG90eXBlLl9oYW5kbGVNb3Rpb249ZnVuY3Rpb24oKXs5MD09PXdpbmRvdy5vcmllbnRhdGlvbnx8LTkwPT09d2luZG93Lm9yaWVudGF0aW9uP3RoaXMuX3NldFByb3BlcnR5KFwiZGV2aWNlT3JpZW50YXRpb25cIixcImxhbmRzY2FwZVwiKTowPT09d2luZG93Lm9yaWVudGF0aW9uP3RoaXMuX3NldFByb3BlcnR5KFwiZGV2aWNlT3JpZW50YXRpb25cIixcInBvcnRyYWl0XCIpOnZvaWQgMD09PXdpbmRvdy5vcmllbnRhdGlvbiYmdGhpcy5fc2V0UHJvcGVydHkoXCJkZXZpY2VPcmllbnRhdGlvblwiLFwidW5kZWZpbmVkXCIpO3ZhciBhPXRoaXMuZGV2aWNlTW92ZWR8fHdpbmRvdy5kZXZpY2VNb3ZlZDtcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiYoTWF0aC5hYnModGhpcy5hY2NlbGVyYXRpb25YLXRoaXMucEFjY2VsZXJhdGlvblgpPm58fE1hdGguYWJzKHRoaXMuYWNjZWxlcmF0aW9uWS10aGlzLnBBY2NlbGVyYXRpb25ZKT5ufHxNYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblotdGhpcy5wQWNjZWxlcmF0aW9uWik+bikmJmEoKTt2YXIgYj10aGlzLmRldmljZVR1cm5lZHx8d2luZG93LmRldmljZVR1cm5lZDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiKXt2YXIgYz10aGlzLnJvdGF0aW9uWCsxODAsZD10aGlzLnBSb3RhdGlvblgrMTgwLHA9aCsxODA7Yy1kPjAmJmMtZDwyNzB8fGMtZDwtMjcwP2s9XCJjbG9ja3dpc2VcIjooYy1kPDB8fGMtZD4yNzApJiYoaz1cImNvdW50ZXItY2xvY2t3aXNlXCIpLGshPT1lJiYocD1jKSxNYXRoLmFicyhjLXApPjkwJiZNYXRoLmFicyhjLXApPDI3MCYmKHA9Yyx0aGlzLl9zZXRQcm9wZXJ0eShcInR1cm5BeGlzXCIsXCJYXCIpLGIoKSksZT1rLGg9cC0xODA7dmFyIHE9dGhpcy5yb3RhdGlvblkrMTgwLHI9dGhpcy5wUm90YXRpb25ZKzE4MCxzPWkrMTgwO3Etcj4wJiZxLXI8MjcwfHxxLXI8LTI3MD9sPVwiY2xvY2t3aXNlXCI6KHEtcjwwfHxxLXRoaXMucFJvdGF0aW9uWT4yNzApJiYobD1cImNvdW50ZXItY2xvY2t3aXNlXCIpLGwhPT1mJiYocz1xKSxNYXRoLmFicyhxLXMpPjkwJiZNYXRoLmFicyhxLXMpPDI3MCYmKHM9cSx0aGlzLl9zZXRQcm9wZXJ0eShcInR1cm5BeGlzXCIsXCJZXCIpLGIoKSksZj1sLGk9cy0xODAsdGhpcy5yb3RhdGlvblotdGhpcy5wUm90YXRpb25aPjAmJnRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWjwyNzB8fHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWjwtMjcwP209XCJjbG9ja3dpc2VcIjoodGhpcy5yb3RhdGlvblotdGhpcy5wUm90YXRpb25aPDB8fHRoaXMucm90YXRpb25aLXRoaXMucFJvdGF0aW9uWj4yNzApJiYobT1cImNvdW50ZXItY2xvY2t3aXNlXCIpLG0hPT1nJiYoaj10aGlzLnJvdGF0aW9uWiksTWF0aC5hYnModGhpcy5yb3RhdGlvblotaik+OTAmJk1hdGguYWJzKHRoaXMucm90YXRpb25aLWopPDI3MCYmKGo9dGhpcy5yb3RhdGlvblosdGhpcy5fc2V0UHJvcGVydHkoXCJ0dXJuQXhpc1wiLFwiWlwiKSxiKCkpLGc9bSx0aGlzLl9zZXRQcm9wZXJ0eShcInR1cm5BeGlzXCIsdm9pZCAwKX12YXIgdD10aGlzLmRldmljZVNoYWtlbnx8d2luZG93LmRldmljZVNoYWtlbjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXt2YXIgdSx2O251bGwhPT10aGlzLnBBY2NlbGVyYXRpb25YJiYodT1NYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblgtdGhpcy5wQWNjZWxlcmF0aW9uWCksdj1NYXRoLmFicyh0aGlzLmFjY2VsZXJhdGlvblktdGhpcy5wQWNjZWxlcmF0aW9uWSkpLHUrdj5vJiZ0KCl9fSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSwzOTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoKXtmb3IodmFyIGEgaW4gZilpZihmLmhhc093blByb3BlcnR5KGEpJiYhMD09PWZbYV0pcmV0dXJuITA7cmV0dXJuITF9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKSxmPXt9O2UucHJvdG90eXBlLmlzS2V5UHJlc3NlZD0hMSxlLnByb3RvdHlwZS5rZXlJc1ByZXNzZWQ9ITEsZS5wcm90b3R5cGUua2V5PVwiXCIsZS5wcm90b3R5cGUua2V5Q29kZT0wLGUucHJvdG90eXBlLl9vbmtleWRvd249ZnVuY3Rpb24oYSl7aWYoIWZbYS53aGljaF0pe3RoaXMuX3NldFByb3BlcnR5KFwiaXNLZXlQcmVzc2VkXCIsITApLHRoaXMuX3NldFByb3BlcnR5KFwia2V5SXNQcmVzc2VkXCIsITApLHRoaXMuX3NldFByb3BlcnR5KFwia2V5Q29kZVwiLGEud2hpY2gpLGZbYS53aGljaF09ITAsdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlcIixhLmtleXx8U3RyaW5nLmZyb21DaGFyQ29kZShhLndoaWNoKXx8YS53aGljaCk7dmFyIGI9dGhpcy5rZXlQcmVzc2VkfHx3aW5kb3cua2V5UHJlc3NlZDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiJiYhYS5jaGFyQ29kZSl7ITE9PT1iKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fX0sZS5wcm90b3R5cGUuX29ua2V5dXA9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5rZXlSZWxlYXNlZHx8d2luZG93LmtleVJlbGVhc2VkO2lmKGZbYS53aGljaF09ITEsZCgpfHwodGhpcy5fc2V0UHJvcGVydHkoXCJpc0tleVByZXNzZWRcIiwhMSksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlJc1ByZXNzZWRcIiwhMSkpLHRoaXMuX3NldFByb3BlcnR5KFwiX2xhc3RLZXlDb2RlVHlwZWRcIixudWxsKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleVwiLGEua2V5fHxTdHJpbmcuZnJvbUNoYXJDb2RlKGEud2hpY2gpfHxhLndoaWNoKSx0aGlzLl9zZXRQcm9wZXJ0eShcImtleUNvZGVcIixhLndoaWNoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiKXshMT09PWIoYSkmJmEucHJldmVudERlZmF1bHQoKX19LGUucHJvdG90eXBlLl9vbmtleXByZXNzPWZ1bmN0aW9uKGEpe2lmKGEud2hpY2ghPT10aGlzLl9sYXN0S2V5Q29kZVR5cGVkKXt0aGlzLl9zZXRQcm9wZXJ0eShcImtleUNvZGVcIixhLndoaWNoKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9sYXN0S2V5Q29kZVR5cGVkXCIsYS53aGljaCksdGhpcy5fc2V0UHJvcGVydHkoXCJrZXlcIixTdHJpbmcuZnJvbUNoYXJDb2RlKGEud2hpY2gpKTt2YXIgYj10aGlzLmtleVR5cGVkfHx3aW5kb3cua2V5VHlwZWQ7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYil7ITE9PT1iKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9fX0sZS5wcm90b3R5cGUuX29uYmx1cj1mdW5jdGlvbihhKXtmPXt9fSxlLnByb3RvdHlwZS5rZXlJc0Rvd249ZnVuY3Rpb24oYSl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImtleUlzRG93blwiLGFyZ3VtZW50cyksZlthXX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNDA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjLGQpe2QmJiFkLmNsaWVudFgmJihkLnRvdWNoZXM/ZD1kLnRvdWNoZXNbMF06ZC5jaGFuZ2VkVG91Y2hlcyYmKGQ9ZC5jaGFuZ2VkVG91Y2hlc1swXSkpO3ZhciBlPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZj1hLnNjcm9sbFdpZHRoL2IsZz1hLnNjcm9sbEhlaWdodC9jO3JldHVybnt4OihkLmNsaWVudFgtZS5sZWZ0KS9mLHk6KGQuY2xpZW50WS1lLnRvcCkvZyx3aW5YOmQuY2xpZW50WCx3aW5ZOmQuY2xpZW50WSxpZDpkLmlkZW50aWZpZXJ9fXZhciBlPWEoXCIuLi9jb3JlL21haW5cIiksZj1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZS5wcm90b3R5cGUuX2hhc01vdXNlSW50ZXJhY3RlZD0hMSxlLnByb3RvdHlwZS5tb3VzZVg9MCxlLnByb3RvdHlwZS5tb3VzZVk9MCxlLnByb3RvdHlwZS5wbW91c2VYPTAsZS5wcm90b3R5cGUucG1vdXNlWT0wLGUucHJvdG90eXBlLndpbk1vdXNlWD0wLGUucHJvdG90eXBlLndpbk1vdXNlWT0wLGUucHJvdG90eXBlLnB3aW5Nb3VzZVg9MCxlLnByb3RvdHlwZS5wd2luTW91c2VZPTAsZS5wcm90b3R5cGUubW91c2VCdXR0b249MCxlLnByb3RvdHlwZS5tb3VzZUlzUHJlc3NlZD0hMSxlLnByb3RvdHlwZS5fdXBkYXRlTmV4dE1vdXNlQ29vcmRzPWZ1bmN0aW9uKGEpe2lmKG51bGwhPT10aGlzLl9jdXJFbGVtZW50JiYoIWEudG91Y2hlc3x8YS50b3VjaGVzLmxlbmd0aD4wKSl7dmFyIGI9ZCh0aGlzLl9jdXJFbGVtZW50LmVsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LGEpO3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VYXCIsYi54KSx0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlWVwiLGIueSksdGhpcy5fc2V0UHJvcGVydHkoXCJ3aW5Nb3VzZVhcIixiLndpblgpLHRoaXMuX3NldFByb3BlcnR5KFwid2luTW91c2VZXCIsYi53aW5ZKX10aGlzLl9oYXNNb3VzZUludGVyYWN0ZWR8fCh0aGlzLl91cGRhdGVNb3VzZUNvb3JkcygpLHRoaXMuX3NldFByb3BlcnR5KFwiX2hhc01vdXNlSW50ZXJhY3RlZFwiLCEwKSl9LGUucHJvdG90eXBlLl91cGRhdGVNb3VzZUNvb3Jkcz1mdW5jdGlvbigpe3RoaXMuX3NldFByb3BlcnR5KFwicG1vdXNlWFwiLHRoaXMubW91c2VYKSx0aGlzLl9zZXRQcm9wZXJ0eShcInBtb3VzZVlcIix0aGlzLm1vdXNlWSksdGhpcy5fc2V0UHJvcGVydHkoXCJwd2luTW91c2VYXCIsdGhpcy53aW5Nb3VzZVgpLHRoaXMuX3NldFByb3BlcnR5KFwicHdpbk1vdXNlWVwiLHRoaXMud2luTW91c2VZKSx0aGlzLl9zZXRQcm9wZXJ0eShcIl9wbW91c2VXaGVlbERlbHRhWVwiLHRoaXMuX21vdXNlV2hlZWxEZWx0YVkpfSxlLnByb3RvdHlwZS5fc2V0TW91c2VCdXR0b249ZnVuY3Rpb24oYSl7MT09PWEuYnV0dG9uP3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VCdXR0b25cIixmLkNFTlRFUik6Mj09PWEuYnV0dG9uP3RoaXMuX3NldFByb3BlcnR5KFwibW91c2VCdXR0b25cIixmLlJJR0hUKTp0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlQnV0dG9uXCIsZi5MRUZUKX0sZS5wcm90b3R5cGUuX29ubW91c2Vtb3ZlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKSx0aGlzLm1vdXNlSXNQcmVzc2VkP1wiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VEcmFnZ2VkPyExPT09Yi5tb3VzZURyYWdnZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoTW92ZWQmJiExPT09Yi50b3VjaE1vdmVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZU1vdmVkJiYhMT09PWIubW91c2VNb3ZlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb25tb3VzZWRvd249ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCEwKSx0aGlzLl9zZXRNb3VzZUJ1dHRvbihhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksXCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVByZXNzZWQ/ITE9PT1iLm1vdXNlUHJlc3NlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hTdGFydGVkJiYhMT09PWIudG91Y2hTdGFydGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGUucHJvdG90eXBlLl9vbm1vdXNldXA9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCExKSxcblwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VSZWxlYXNlZD8hMT09PWIubW91c2VSZWxlYXNlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGIudG91Y2hFbmRlZCYmITE9PT1iLnRvdWNoRW5kZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29uZHJhZ2VuZD1lLnByb3RvdHlwZS5fb25tb3VzZXVwLGUucHJvdG90eXBlLl9vbmRyYWdvdmVyPWUucHJvdG90eXBlLl9vbm1vdXNlbW92ZSxlLnByb3RvdHlwZS5fb25jbGljaz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlQ2xpY2tlZCl7ITE9PT1iLm1vdXNlQ2xpY2tlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX0sZS5wcm90b3R5cGUuX29uZGJsY2xpY2s9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYi5kb3VibGVDbGlja2VkKXshMT09PWIuZG91YmxlQ2xpY2tlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX0sZS5wcm90b3R5cGUuX21vdXNlV2hlZWxEZWx0YVk9MCxlLnByb3RvdHlwZS5fcG1vdXNlV2hlZWxEZWx0YVk9MCxlLnByb3RvdHlwZS5fb253aGVlbD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztpZih0aGlzLl9zZXRQcm9wZXJ0eShcIl9tb3VzZVdoZWVsRGVsdGFZXCIsYS5kZWx0YVkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGIubW91c2VXaGVlbCl7YS5kZWx0YT1hLmRlbHRhWTshMT09PWIubW91c2VXaGVlbChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX0sYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDQxOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIsYyxkLGUpe2U9ZXx8MDt2YXIgZj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGc9YS5zY3JvbGxXaWR0aC9iLGg9YS5zY3JvbGxIZWlnaHQvYyxpPWQudG91Y2hlc1tlXXx8ZC5jaGFuZ2VkVG91Y2hlc1tlXTtyZXR1cm57eDooaS5jbGllbnRYLWYubGVmdCkvZyx5OihpLmNsaWVudFktZi50b3ApL2gsd2luWDppLmNsaWVudFgsd2luWTppLmNsaWVudFksaWQ6aS5pZGVudGlmaWVyfX12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpO2UucHJvdG90eXBlLnRvdWNoZXM9W10sZS5wcm90b3R5cGUuX3VwZGF0ZVRvdWNoQ29vcmRzPWZ1bmN0aW9uKGEpe2lmKG51bGwhPT10aGlzLl9jdXJFbGVtZW50KXtmb3IodmFyIGI9W10sYz0wO2M8YS50b3VjaGVzLmxlbmd0aDtjKyspYltjXT1kKHRoaXMuX2N1ckVsZW1lbnQuZWx0LHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsYSxjKTt0aGlzLl9zZXRQcm9wZXJ0eShcInRvdWNoZXNcIixiKX19LGUucHJvdG90eXBlLl9vbnRvdWNoc3RhcnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5faXNHbG9iYWw/d2luZG93OnRoaXM7dGhpcy5fc2V0UHJvcGVydHkoXCJtb3VzZUlzUHJlc3NlZFwiLCEwKSx0aGlzLl91cGRhdGVUb3VjaENvb3JkcyhhKSx0aGlzLl91cGRhdGVOZXh0TW91c2VDb29yZHMoYSksdGhpcy5fdXBkYXRlTW91c2VDb29yZHMoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoU3RhcnRlZD8hMT09PWIudG91Y2hTdGFydGVkKGEpJiZhLnByZXZlbnREZWZhdWx0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgYi5tb3VzZVByZXNzZWQmJiExPT09Yi5tb3VzZVByZXNzZWQoYSkmJmEucHJldmVudERlZmF1bHQoKX0sZS5wcm90b3R5cGUuX29udG91Y2htb3ZlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2lzR2xvYmFsP3dpbmRvdzp0aGlzO3RoaXMuX3VwZGF0ZVRvdWNoQ29vcmRzKGEpLHRoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoTW92ZWQ/ITE9PT1iLnRvdWNoTW92ZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlRHJhZ2dlZCYmITE9PT1iLm1vdXNlRHJhZ2dlZChhKSYmYS5wcmV2ZW50RGVmYXVsdCgpfSxlLnByb3RvdHlwZS5fb250b3VjaGVuZD1mdW5jdGlvbihhKXt0aGlzLl9zZXRQcm9wZXJ0eShcIm1vdXNlSXNQcmVzc2VkXCIsITEpLHRoaXMuX3VwZGF0ZVRvdWNoQ29vcmRzKGEpLHRoaXMuX3VwZGF0ZU5leHRNb3VzZUNvb3JkcyhhKTt2YXIgYj10aGlzLl9pc0dsb2JhbD93aW5kb3c6dGhpcztcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLnRvdWNoRW5kZWQ/ITE9PT1iLnRvdWNoRW5kZWQoYSkmJmEucHJldmVudERlZmF1bHQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLm1vdXNlUmVsZWFzZWQmJiExPT09Yi5tb3VzZVJlbGVhc2VkKGEpJiZhLnByZXZlbnREZWZhdWx0KCl9LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQyOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhKXt2YXIgYj0zLjUqYXwwO2lmKGI9YjwxPzE6YjwyNDg/YjoyNDgsZyE9PWIpe2c9YixoPTErZzw8MSxpPW5ldyBJbnQzMkFycmF5KGgpLGo9bmV3IEFycmF5KGgpO2Zvcih2YXIgYz0wO2M8aDtjKyspaltjXT1uZXcgSW50MzJBcnJheSgyNTYpO2Zvcih2YXIgZCxlLGYsayxsPTEsbT1iLTE7bDxiO2wrKyl7aVtiK2xdPWlbbV09ZT1tKm0sZj1qW2IrbF0saz1qW20tLV07Zm9yKHZhciBuPTA7bjwyNTY7bisrKWZbbl09a1tuXT1lKm59ZD1pW2JdPWIqYixmPWpbYl07Zm9yKHZhciBvPTA7bzwyNTY7bysrKWZbb109ZCpvfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPWYuX3RvUGl4ZWxzKGEpLGU9YS53aWR0aCxrPWEuaGVpZ2h0LGw9ZSprLG09bmV3IEludDMyQXJyYXkobCksbj0wO248bDtuKyspbVtuXT1mLl9nZXRBUkdCKGMsbik7dmFyIG8scCxxLHIscyx0LHUsdix3LHgseT1uZXcgSW50MzJBcnJheShsKSx6PW5ldyBJbnQzMkFycmF5KGwpLEE9bmV3IEludDMyQXJyYXkobCksQj1uZXcgSW50MzJBcnJheShsKSxDPTA7ZChiKTt2YXIgRCxFLEYsRztmb3IoRT0wO0U8aztFKyspe2ZvcihEPTA7RDxlO0QrKyl7aWYocj1xPXA9cz1vPTAsKHQ9RC1nKTwwKXg9LXQsdD0wO2Vsc2V7aWYodD49ZSlicmVhazt4PTB9Zm9yKEY9eDtGPGgmJiEodD49ZSk7RisrKXt2YXIgSD1tW3QrQ107Rz1qW0ZdLHMrPUdbKC0xNjc3NzIxNiZIKT4+PjI0XSxwKz1HWygxNjcxMTY4MCZIKT4+MTZdLHErPUdbKDY1MjgwJkgpPj44XSxyKz1HWzI1NSZIXSxvKz1pW0ZdLHQrK311PUMrRCx5W3VdPXMvbyx6W3VdPXAvbyxBW3VdPXEvbyxCW3VdPXIvb31DKz1lfWZvcihDPTAsdj0tZyx3PXYqZSxFPTA7RTxrO0UrKyl7Zm9yKEQ9MDtEPGU7RCsrKXtpZihyPXE9cD1zPW89MCx2PDApeD11PS12LHQ9RDtlbHNle2lmKHY+PWspYnJlYWs7eD0wLHU9dix0PUQrd31mb3IoRj14O0Y8aCYmISh1Pj1rKTtGKyspRz1qW0ZdLHMrPUdbeVt0XV0scCs9R1t6W3RdXSxxKz1HW0FbdF1dLHIrPUdbQlt0XV0sbys9aVtGXSx1KyssdCs9ZTttW0QrQ109cy9vPDwyNHxwL288PDE2fHEvbzw8OHxyL299Qys9ZSx3Kz1lLHYrK31mLl9zZXRQaXhlbHMoYyxtKX12YXIgZj17fTtmLl90b1BpeGVscz1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEltYWdlRGF0YT9hLmRhdGE6YS5nZXRDb250ZXh0KFwiMmRcIikuZ2V0SW1hZ2VEYXRhKDAsMCxhLndpZHRoLGEuaGVpZ2h0KS5kYXRhfSxmLl9nZXRBUkdCPWZ1bmN0aW9uKGEsYil7dmFyIGM9NCpiO3JldHVybiBhW2MrM108PDI0JjQyNzgxOTAwODB8YVtjXTw8MTYmMTY3MTE2ODB8YVtjKzFdPDw4JjY1MjgwfDI1NSZhW2MrMl19LGYuX3NldFBpeGVscz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspYz00KmQsYVtjKzBdPSgxNjcxMTY4MCZiW2RdKT4+PjE2LGFbYysxXT0oNjUyODAmYltkXSk+Pj44LGFbYysyXT0yNTUmYltkXSxhW2MrM109KDQyNzgxOTAwODAmYltkXSk+Pj4yNH0sZi5fdG9JbWFnZURhdGE9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBJbWFnZURhdGE/YTphLmdldENvbnRleHQoXCIyZFwiKS5nZXRJbWFnZURhdGEoMCwwLGEud2lkdGgsYS5oZWlnaHQpfSxmLl9jcmVhdGVJbWFnZURhdGE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5fdG1wQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksZi5fdG1wQ3R4PWYuX3RtcENhbnZhcy5nZXRDb250ZXh0KFwiMmRcIiksdGhpcy5fdG1wQ3R4LmNyZWF0ZUltYWdlRGF0YShhLGIpfSxmLmFwcGx5PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmdldENvbnRleHQoXCIyZFwiKSxlPWQuZ2V0SW1hZ2VEYXRhKDAsMCxhLndpZHRoLGEuaGVpZ2h0KSxmPWIoZSxjKTtmIGluc3RhbmNlb2YgSW1hZ2VEYXRhP2QucHV0SW1hZ2VEYXRhKGYsMCwwLDAsMCxhLndpZHRoLGEuaGVpZ2h0KTpkLnB1dEltYWdlRGF0YShlLDAsMCwwLDAsYS53aWR0aCxhLmhlaWdodCl9LGYudGhyZXNob2xkPWZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5fdG9QaXhlbHMoYSk7dm9pZCAwPT09YiYmKGI9LjUpO2Zvcih2YXIgZD1NYXRoLmZsb29yKDI1NSpiKSxlPTA7ZTxjLmxlbmd0aDtlKz00KXt2YXIgZyxoPWNbZV0saT1jW2UrMV0saj1jW2UrMl0saz0uMjEyNipoKy43MTUyKmkrLjA3MjIqajtnPWs+PWQ/MjU1OjAsY1tlXT1jW2UrMV09Y1tlKzJdPWd9fSxmLmdyYXk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWYuX3RvUGl4ZWxzKGEpLGM9MDtjPGIubGVuZ3RoO2MrPTQpe3ZhciBkPWJbY10sZT1iW2MrMV0sZz1iW2MrMl0saD0uMjEyNipkKy43MTUyKmUrLjA3MjIqZztiW2NdPWJbYysxXT1iW2MrMl09aH19LGYub3BhcXVlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1mLl90b1BpeGVscyhhKSxjPTA7YzxiLmxlbmd0aDtjKz00KWJbYyszXT0yNTU7cmV0dXJuIGJ9LGYuaW52ZXJ0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1mLl90b1BpeGVscyhhKSxjPTA7YzxiLmxlbmd0aDtjKz00KWJbY109MjU1LWJbY10sYltjKzFdPTI1NS1iW2MrMV0sYltjKzJdPTI1NS1iW2MrMl19LGYucG9zdGVyaXplPWZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5fdG9QaXhlbHMoYSk7aWYoYjwyfHxiPjI1NSl0aHJvdyBuZXcgRXJyb3IoXCJMZXZlbCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAyIGFuZCBsZXNzIHRoYW4gMjU1IGZvciBwb3N0ZXJpemVcIik7Zm9yKHZhciBkPWItMSxlPTA7ZTxjLmxlbmd0aDtlKz00KXt2YXIgZz1jW2VdLGg9Y1tlKzFdLGk9Y1tlKzJdO2NbZV09MjU1KihnKmI+PjgpL2QsY1tlKzFdPTI1NSooaCpiPj44KS9kLGNbZSsyXT0yNTUqKGkqYj4+OCkvZH19LGYuZGlsYXRlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQsZSxnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ9Zi5fdG9QaXhlbHMoYSksdT0wLHY9dC5sZW5ndGg/dC5sZW5ndGgvNDowLHc9bmV3IEludDMyQXJyYXkodik7dTx2Oylmb3IoYj11LGM9dSthLndpZHRoO3U8YzspZD1lPWYuX2dldEFSR0IodCx1KSxpPXUtMSxoPXUrMSxqPXUtYS53aWR0aCxrPXUrYS53aWR0aCxpPGImJihpPXUpLGg+PWMmJihoPXUpLGo8MCYmKGo9MCksaz49diYmKGs9dSksbj1mLl9nZXRBUkdCKHQsaiksbT1mLl9nZXRBUkdCKHQsaSksbz1mLl9nZXRBUkdCKHQsayksbD1mLl9nZXRBUkdCKHQsaCksZz03NyooZD4+MTYmMjU1KSsxNTEqKGQ+PjgmMjU1KSsyOCooMjU1JmQpLHE9NzcqKG0+PjE2JjI1NSkrMTUxKihtPj44JjI1NSkrMjgqKDI1NSZtKSxwPTc3KihsPj4xNiYyNTUpKzE1MSoobD4+OCYyNTUpKzI4KigyNTUmbCkscj03Nyoobj4+MTYmMjU1KSsxNTEqKG4+PjgmMjU1KSsyOCooMjU1Jm4pLHM9NzcqKG8+PjE2JjI1NSkrMTUxKihvPj44JjI1NSkrMjgqKDI1NSZvKSxxPmcmJihlPW0sZz1xKSxwPmcmJihlPWwsZz1wKSxyPmcmJihlPW4sZz1yKSxzPmcmJihlPW8sZz1zKSx3W3UrK109ZTtmLl9zZXRQaXhlbHModCx3KX0sZi5lcm9kZT1mdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0PWYuX3RvUGl4ZWxzKGEpLHU9MCx2PXQubGVuZ3RoP3QubGVuZ3RoLzQ6MCx3PW5ldyBJbnQzMkFycmF5KHYpO3U8djspZm9yKGI9dSxjPXUrYS53aWR0aDt1PGM7KWQ9ZT1mLl9nZXRBUkdCKHQsdSksaT11LTEsaD11KzEsaj11LWEud2lkdGgsaz11K2Eud2lkdGgsaTxiJiYoaT11KSxoPj1jJiYoaD11KSxqPDAmJihqPTApLGs+PXYmJihrPXUpLG49Zi5fZ2V0QVJHQih0LGopLG09Zi5fZ2V0QVJHQih0LGkpLG89Zi5fZ2V0QVJHQih0LGspLGw9Zi5fZ2V0QVJHQih0LGgpLGc9NzcqKGQ+PjE2JjI1NSkrMTUxKihkPj44JjI1NSkrMjgqKDI1NSZkKSxxPTc3KihtPj4xNiYyNTUpKzE1MSoobT4+OCYyNTUpKzI4KigyNTUmbSkscD03NyoobD4+MTYmMjU1KSsxNTEqKGw+PjgmMjU1KSsyOCooMjU1JmwpLHI9NzcqKG4+PjE2JjI1NSkrMTUxKihuPj44JjI1NSkrMjgqKDI1NSZuKSxzPTc3KihvPj4xNiYyNTUpKzE1MSoobz4+OCYyNTUpKzI4KigyNTUmbykscTxnJiYoZT1tLGc9cSkscDxnJiYoZT1sLGc9cCkscjxnJiYoZT1uLGc9ciksczxnJiYoZT1vLGc9cyksd1t1KytdPWU7Zi5fc2V0UGl4ZWxzKHQsdyl9O3ZhciBnLGgsaSxqO2YuYmx1cj1mdW5jdGlvbihhLGIpe2UoYSxiKX0sYi5leHBvcnRzPWZ9LHt9XSw0MzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1bXTtkLnByb3RvdHlwZS5jcmVhdGVJbWFnZT1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVJbWFnZVwiLGFyZ3VtZW50cyksbmV3IGQuSW1hZ2UoYSxiKX0sZC5wcm90b3R5cGUuc2F2ZUNhbnZhcz1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVDYW52YXNcIixhcmd1bWVudHMpO3ZhciBhLGIsYyxlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTthcmd1bWVudHNbMF1pbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50PyhhPWFyZ3VtZW50c1swXSxlLnNoaWZ0KCkpOmFyZ3VtZW50c1swXWluc3RhbmNlb2YgZC5FbGVtZW50PyhhPWFyZ3VtZW50c1swXS5lbHQsZS5zaGlmdCgpKTphPXRoaXMuX2N1ckVsZW1lbnQmJnRoaXMuX2N1ckVsZW1lbnQuZWx0LGUubGVuZ3RoPj0xJiYoYj1lWzBdKSxlLmxlbmd0aD49MiYmKGM9ZVsxXSksYz1jfHxkLnByb3RvdHlwZS5fY2hlY2tGaWxlRXh0ZW5zaW9uKGIsYylbMV18fFwicG5nXCI7dmFyIGY7c3dpdGNoKGMpe2RlZmF1bHQ6Zj1cImltYWdlL3BuZ1wiO2JyZWFrO2Nhc2VcImpwZWdcIjpjYXNlXCJqcGdcIjpmPVwiaW1hZ2UvanBlZ1wifWEudG9CbG9iKGZ1bmN0aW9uKGEpe2QucHJvdG90eXBlLmRvd25sb2FkRmlsZShhLGIsYyl9LGYpfSxkLnByb3RvdHlwZS5zYXZlRnJhbWVzPWZ1bmN0aW9uKGEsYixjLGYsZyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZUZyYW1lc1wiLGFyZ3VtZW50cyk7dmFyIGg9Y3x8MztoPWQucHJvdG90eXBlLmNvbnN0cmFpbihoLDAsMTUpLGgqPTFlMzt2YXIgaT1mfHwxNTtpPWQucHJvdG90eXBlLmNvbnN0cmFpbihpLDAsMjIpO3ZhciBqPTAsaz1kLnByb3RvdHlwZS5fbWFrZUZyYW1lLGw9dGhpcy5fY3VyRWxlbWVudC5lbHQsbT1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2soYStqLGIsbCksaisrfSwxZTMvaSk7c2V0VGltZW91dChmdW5jdGlvbigpe2lmKGNsZWFySW50ZXJ2YWwobSksZylnKGUpO2Vsc2UgZm9yKHZhciBhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBiPWVbYV07ZC5wcm90b3R5cGUuZG93bmxvYWRGaWxlKGIuaW1hZ2VEYXRhLGIuZmlsZW5hbWUsYi5leHQpfWU9W119LGgrLjAxKX0sZC5wcm90b3R5cGUuX21ha2VGcmFtZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7ZD10aGlzP3RoaXMuX2N1ckVsZW1lbnQuZWx0OmM7dmFyIGY7aWYoYilzd2l0Y2goYi50b0xvd2VyQ2FzZSgpKXtjYXNlXCJwbmdcIjpmPVwiaW1hZ2UvcG5nXCI7YnJlYWs7Y2FzZVwianBlZ1wiOmNhc2VcImpwZ1wiOmY9XCJpbWFnZS9qcGVnXCI7YnJlYWs7ZGVmYXVsdDpmPVwiaW1hZ2UvcG5nXCJ9ZWxzZSBiPVwicG5nXCIsZj1cImltYWdlL3BuZ1wiO3ZhciBnPWQudG9EYXRhVVJMKGYpO2c9Zy5yZXBsYWNlKGYsXCJpbWFnZS9vY3RldC1zdHJlYW1cIik7dmFyIGg9e307aC5pbWFnZURhdGE9ZyxoLmZpbGVuYW1lPWEsaC5leHQ9YixlLnB1c2goaCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDQ0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhPjAmJmE8Yj9hOmJ9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKSxmPWEoXCIuL2ZpbHRlcnNcIiksZz1hKFwiLi4vY29yZS9oZWxwZXJzXCIpLGg9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2EoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksZS5wcm90b3R5cGUubG9hZEltYWdlPWZ1bmN0aW9uKGEsYixjKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkSW1hZ2VcIixhcmd1bWVudHMpO3ZhciBkPW5ldyBJbWFnZSxmPW5ldyBlLkltYWdlKDEsMSx0aGlzKSxnPXRoaXM7cmV0dXJuIGQub25sb2FkPWZ1bmN0aW9uKCl7Zi53aWR0aD1mLmNhbnZhcy53aWR0aD1kLndpZHRoLGYuaGVpZ2h0PWYuY2FudmFzLmhlaWdodD1kLmhlaWdodCxmLmRyYXdpbmdDb250ZXh0LmRyYXdJbWFnZShkLDAsMCksZi5tb2RpZmllZD0hMCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiJiZiKGYpLGcuX2RlY3JlbWVudFByZWxvYWQoKX0sZC5vbmVycm9yPWZ1bmN0aW9uKGEpe2UuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcigwLGQuc3JjKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiZjKGEpfSwwIT09YS5pbmRleE9mKFwiZGF0YTppbWFnZS9cIikmJihkLmNyb3NzT3JpZ2luPVwiQW5vbnltb3VzXCIpLGQuc3JjPWEsZn0sZS5wcm90b3R5cGUuaW1hZ2U9ZnVuY3Rpb24oYSxiLGMsZixoLGksaixrLGwpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImltYWdlXCIsYXJndW1lbnRzKTt2YXIgbT1hLndpZHRoLG49YS5oZWlnaHQ7YS5lbHQmJmEuZWx0LnZpZGVvV2lkdGgmJiFhLmNhbnZhcyYmKG09YS5lbHQudmlkZW9XaWR0aCxuPWEuZWx0LnZpZGVvSGVpZ2h0KTt2YXIgbz1iLHA9YyxxPWZ8fG0scj1ofHxuLHM9aXx8MCx0PWp8fDAsdT1rfHxtLHY9bHx8bjt1PWQodSxtKSx2PWQodixuKTt2YXIgdz0xO2EuZWx0JiYhYS5jYW52YXMmJmEuZWx0LnN0eWxlLndpZHRoJiYodz1hLmVsdC52aWRlb1dpZHRoJiYhZj9hLmVsdC52aWRlb1dpZHRoOmEuZWx0LndpZHRoLHcvPXBhcnNlSW50KGEuZWx0LnN0eWxlLndpZHRoLDEwKSkscyo9dyx0Kj13LHYqPXcsdSo9dzt2YXIgeD1nLm1vZGVBZGp1c3QobyxwLHEscix0aGlzLl9yZW5kZXJlci5faW1hZ2VNb2RlKTt0aGlzLl9yZW5kZXJlci5pbWFnZShhLHMsdCx1LHYseC54LHgueSx4LncseC5oKX0sZS5wcm90b3R5cGUudGludD1mdW5jdGlvbigpe2UuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRpbnRcIixhcmd1bWVudHMpO3ZhciBhPXRoaXMuY29sb3IuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX3JlbmRlcmVyLl90aW50PWEubGV2ZWxzfSxlLnByb3RvdHlwZS5ub1RpbnQ9ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdGludD1udWxsfSxlLnByb3RvdHlwZS5fZ2V0VGludGVkSW1hZ2VDYW52YXM9ZnVuY3Rpb24oYSl7aWYoIWEuY2FudmFzKXJldHVybiBhO3ZhciBiPWYuX3RvUGl4ZWxzKGEuY2FudmFzKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7Yy53aWR0aD1hLmNhbnZhcy53aWR0aCxjLmhlaWdodD1hLmNhbnZhcy5oZWlnaHQ7Zm9yKHZhciBkPWMuZ2V0Q29udGV4dChcIjJkXCIpLGU9ZC5jcmVhdGVJbWFnZURhdGEoYS5jYW52YXMud2lkdGgsYS5jYW52YXMuaGVpZ2h0KSxnPWUuZGF0YSxoPTA7aDxiLmxlbmd0aDtoKz00KXt2YXIgaT1iW2hdLGo9YltoKzFdLGs9YltoKzJdLGw9YltoKzNdO2dbaF09aSp0aGlzLl9yZW5kZXJlci5fdGludFswXS8yNTUsZ1toKzFdPWoqdGhpcy5fcmVuZGVyZXIuX3RpbnRbMV0vMjU1LGdbaCsyXT1rKnRoaXMuX3JlbmRlcmVyLl90aW50WzJdLzI1NSxnW2grM109bCp0aGlzLl9yZW5kZXJlci5fdGludFszXS8yNTV9cmV0dXJuIGQucHV0SW1hZ2VEYXRhKGUsMCwwKSxjfSxlLnByb3RvdHlwZS5pbWFnZU1vZGU9ZnVuY3Rpb24oYSl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaW1hZ2VNb2RlXCIsYXJndW1lbnRzKSxhIT09aC5DT1JORVImJmEhPT1oLkNPUk5FUlMmJmEhPT1oLkNFTlRFUnx8KHRoaXMuX3JlbmRlcmVyLl9pbWFnZU1vZGU9YSl9LGIuZXhwb3J0cz1lfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCI6MjAsXCIuLi9jb3JlL2hlbHBlcnNcIjoyMSxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9maWx0ZXJzXCI6NDJ9XSw0NTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi9maWx0ZXJzXCIpO2QuSW1hZ2U9ZnVuY3Rpb24oYSxiKXt0aGlzLndpZHRoPWEsdGhpcy5oZWlnaHQ9Yix0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaGVpZ2h0LHRoaXMuZHJhd2luZ0NvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLHRoaXMuX3BpeGVsRGVuc2l0eT0xLHRoaXMuX21vZGlmaWVkPSExLHRoaXMuX3BpeGVsc0RpcnR5PSEwLHRoaXMucGl4ZWxzPVtdfSxkLkltYWdlLnByb3RvdHlwZS5fc2V0UHJvcGVydHk9ZnVuY3Rpb24oYSxiKXt0aGlzW2FdPWIsdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmxvYWRQaXhlbHM9ZnVuY3Rpb24oKXtkLlJlbmRlcmVyMkQucHJvdG90eXBlLmxvYWRQaXhlbHMuY2FsbCh0aGlzKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUudXBkYXRlUGl4ZWxzPWZ1bmN0aW9uKGEsYixjLGUpe2QuUmVuZGVyZXIyRC5wcm90b3R5cGUudXBkYXRlUGl4ZWxzLmNhbGwodGhpcyxhLGIsYyxlKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEsYixjLGUpe3JldHVybiBkLlJlbmRlcmVyMkQucHJvdG90eXBlLmdldC5jYWxsKHRoaXMsYSxiLGMsZSl9LGQuSW1hZ2UucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7ZC5SZW5kZXJlcjJELnByb3RvdHlwZS5zZXQuY2FsbCh0aGlzLGEsYixjKSx0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGEsYil7MD09PWEmJjA9PT1iPyhhPXRoaXMuY2FudmFzLndpZHRoLGI9dGhpcy5jYW52YXMuaGVpZ2h0KTowPT09YT9hPXRoaXMuY2FudmFzLndpZHRoKmIvdGhpcy5jYW52YXMuaGVpZ2h0OjA9PT1iJiYoYj10aGlzLmNhbnZhcy5oZWlnaHQqYS90aGlzLmNhbnZhcy53aWR0aCksYT1NYXRoLmZsb29yKGEpLGI9TWF0aC5mbG9vcihiKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO2Mud2lkdGg9YSxjLmhlaWdodD1iLGMuZ2V0Q29udGV4dChcIjJkXCIpLmRyYXdJbWFnZSh0aGlzLmNhbnZhcywwLDAsdGhpcy5jYW52YXMud2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0LDAsMCxjLndpZHRoLGMuaGVpZ2h0KSx0aGlzLmNhbnZhcy53aWR0aD10aGlzLndpZHRoPWEsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaGVpZ2h0PWIsdGhpcy5kcmF3aW5nQ29udGV4dC5kcmF3SW1hZ2UoYywwLDAsYSxiLDAsMCxhLGIpLHRoaXMucGl4ZWxzLmxlbmd0aD4wJiZ0aGlzLmxvYWRQaXhlbHMoKSx0aGlzLnNldE1vZGlmaWVkKCEwKSx0aGlzLl9waXhlbHNEaXJ0eT0hMH0sZC5JbWFnZS5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhLGIsYyxlLGYsZyxoLGksajtpZig5PT09YXJndW1lbnRzLmxlbmd0aClhPWFyZ3VtZW50c1swXSxiPWFyZ3VtZW50c1sxXSxjPWFyZ3VtZW50c1syXSxlPWFyZ3VtZW50c1szXSxmPWFyZ3VtZW50c1s0XSxnPWFyZ3VtZW50c1s1XSxoPWFyZ3VtZW50c1s2XSxpPWFyZ3VtZW50c1s3XSxqPWFyZ3VtZW50c1s4XTtlbHNle2lmKDghPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlNpZ25hdHVyZSBub3Qgc3VwcG9ydGVkXCIpO2E9dGhpcyxiPWFyZ3VtZW50c1swXSxjPWFyZ3VtZW50c1sxXSxlPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXSxnPWFyZ3VtZW50c1s0XSxoPWFyZ3VtZW50c1s1XSxpPWFyZ3VtZW50c1s2XSxqPWFyZ3VtZW50c1s3XX1kLlJlbmRlcmVyMkQuX2NvcHlIZWxwZXIodGhpcyxhLGIsYyxlLGYsZyxoLGksaiksdGhpcy5fcGl4ZWxzRGlydHk9ITB9LGQuSW1hZ2UucHJvdG90eXBlLm1hc2s9ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9dGhpcyk7dmFyIGI9dGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24sYz0xO2EgaW5zdGFuY2VvZiBkLlJlbmRlcmVyJiYoYz1hLl9wSW5zdC5fcGl4ZWxEZW5zaXR5KTt2YXIgZT1bYSwwLDAsYyphLndpZHRoLGMqYS5oZWlnaHQsMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHRdO3RoaXMuZHJhd2luZ0NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVwiZGVzdGluYXRpb24taW5cIixkLkltYWdlLnByb3RvdHlwZS5jb3B5LmFwcGx5KHRoaXMsZSksdGhpcy5kcmF3aW5nQ29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249Yix0aGlzLnNldE1vZGlmaWVkKCEwKX0sZC5JbWFnZS5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKGEsYil7ZS5hcHBseSh0aGlzLmNhbnZhcyxlW2EudG9Mb3dlckNhc2UoKV0sYiksdGhpcy5zZXRNb2RpZmllZCghMCl9LGQuSW1hZ2UucHJvdG90eXBlLmJsZW5kPWZ1bmN0aW9uKCl7ZC5wcm90b3R5cGUuYmxlbmQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuc2V0TW9kaWZpZWQoITApfSxkLkltYWdlLnByb3RvdHlwZS5zZXRNb2RpZmllZD1mdW5jdGlvbihhKXt0aGlzLl9tb2RpZmllZD1hfSxkLkltYWdlLnByb3RvdHlwZS5pc01vZGlmaWVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGlmaWVkfSxkLkltYWdlLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKGEsYil7ZC5wcm90b3R5cGUuc2F2ZUNhbnZhcyh0aGlzLmNhbnZhcyxhLGIpfSxiLmV4cG9ydHM9ZC5JbWFnZX0se1wiLi4vY29yZS9tYWluXCI6MjQsXCIuL2ZpbHRlcnNcIjo0Mn1dLDQ2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuL2ZpbHRlcnNcIik7YShcIi4uL2NvbG9yL3A1LkNvbG9yXCIpLGQucHJvdG90eXBlLnBpeGVscz1bXSxkLnByb3RvdHlwZS5ibGVuZD1mdW5jdGlvbigpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImJsZW5kXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlcj90aGlzLl9yZW5kZXJlci5ibGVuZC5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpOmQuUmVuZGVyZXIyRC5wcm90b3R5cGUuYmxlbmQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29weVwiLGFyZ3VtZW50cyksZC5SZW5kZXJlcjJELnByb3RvdHlwZS5jb3B5LmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbihhLGIpe2QuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImZpbHRlclwiLGFyZ3VtZW50cyksdm9pZCAwIT09dGhpcy5jYW52YXM/ZS5hcHBseSh0aGlzLmNhbnZhcyxlW2EudG9Mb3dlckNhc2UoKV0sYik6ZS5hcHBseSh0aGlzLmVsdCxlW2EudG9Mb3dlckNhc2UoKV0sYil9LGQucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZ2V0KGEsYixjLGQpfSxkLnByb3RvdHlwZS5sb2FkUGl4ZWxzPWZ1bmN0aW9uKCl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZFBpeGVsc1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIubG9hZFBpeGVscygpfSxkLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuX3JlbmRlcmVyLnNldChhLGIsYyl9LGQucHJvdG90eXBlLnVwZGF0ZVBpeGVscz1mdW5jdGlvbihhLGIsYyxlKXtkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ1cGRhdGVQaXhlbHNcIixhcmd1bWVudHMpLDAhPT10aGlzLnBpeGVscy5sZW5ndGgmJnRoaXMuX3JlbmRlcmVyLnVwZGF0ZVBpeGVscyhhLGIsYyxlKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvbG9yL3A1LkNvbG9yXCI6MTYsXCIuLi9jb3JlL21haW5cIjoyNCxcIi4vZmlsdGVyc1wiOjQyfV0sNDc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7dmFyIGM9e307aWYodm9pZCAwPT09KGI9Ynx8W10pKWZvcih2YXIgZD0wO2Q8YS5sZW5ndGg7ZCsrKWJbZC50b1N0cmluZygpXT1kO2Zvcih2YXIgZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1iW2VdLGc9YVtlXTtjW2ZdPWd9cmV0dXJuIGN9ZnVuY3Rpb24gZShhKXt2YXIgYj1uZXcgaS5YTUwsYz1hLmNoaWxkTm9kZXM7aWYoYyYmYy5sZW5ndGgpe2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZj1lKGNbZF0pO2IuYWRkQ2hpbGQoZil9Yi5zZXROYW1lKGEubm9kZU5hbWUpLGIuX3NldENvbnQoYS50ZXh0Q29udGVudCksYi5fc2V0QXR0cmlidXRlcyhhKTtmb3IodmFyIGc9MDtnPGIuY2hpbGRyZW4ubGVuZ3RoO2crKyliLmNoaWxkcmVuW2ddLnBhcmVudD1iO3JldHVybiBifXJldHVybiBiLnNldE5hbWUoYS5ub2RlTmFtZSksYi5fc2V0Q29udChhLnRleHRDb250ZW50KSxiLl9zZXRBdHRyaWJ1dGVzKGEpLGJ9ZnVuY3Rpb24gZihhKXtyZXR1cm4gYS5yZXBsYWNlKC8mL2csXCImYW1wO1wiKS5yZXBsYWNlKC88L2csXCImbHQ7XCIpLnJlcGxhY2UoLz4vZyxcIiZndDtcIikucmVwbGFjZSgvXCIvZyxcIiZxdW90O1wiKS5yZXBsYWNlKC8nL2csXCImIzAzOTtcIil9ZnVuY3Rpb24gZyhhLGIpe2ImJiEwIT09YiYmXCJ0cnVlXCIhPT1ifHwoYj1cIlwiKSxhfHwoYT1cInVudGl0bGVkXCIpO3ZhciBjPVwiXCI7cmV0dXJuIGEmJmEuaW5kZXhPZihcIi5cIik+LTEmJihjPWEuc3BsaXQoXCIuXCIpLnBvcCgpKSxiJiZjIT09YiYmKGM9YixhPWErXCIuXCIrYyksW2EsY119ZnVuY3Rpb24gaChhKXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEudGFyZ2V0KX12YXIgaT1hKFwiLi4vY29yZS9tYWluXCIpO2EoXCJ3aGF0d2ctZmV0Y2hcIiksYShcImVzNi1wcm9taXNlXCIpLnBvbHlmaWxsKCk7dmFyIGo9YShcImZldGNoLWpzb25wXCIpO2EoXCIuLi9jb3JlL2Vycm9yX2hlbHBlcnNcIiksaS5wcm90b3R5cGUubG9hZEpTT049ZnVuY3Rpb24oKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkSlNPTlwiLGFyZ3VtZW50cyk7Zm9yKHZhciBhLGIsYyxkPWFyZ3VtZW50c1swXSxlPXt9LGY9XCJqc29uXCIsZz0xO2c8YXJndW1lbnRzLmxlbmd0aDtnKyspe3ZhciBoPWFyZ3VtZW50c1tnXTtcInN0cmluZ1wiPT10eXBlb2YgaD9cImpzb25wXCIhPT1oJiZcImpzb25cIiE9PWh8fChmPWgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGg/YT9iPWg6YT1oOlwib2JqZWN0XCI9PXR5cGVvZiBoJiZoLmhhc093blByb3BlcnR5KFwianNvbnBDYWxsYmFja1wiKSYmKGY9XCJqc29ucFwiLGM9aCl9dmFyIGo9dGhpcztyZXR1cm4gdGhpcy5odHRwRG8oZCxcIkdFVFwiLGMsZixmdW5jdGlvbihiKXtmb3IodmFyIGMgaW4gYillW2NdPWJbY107dm9pZCAwIT09YSYmYShiKSxqLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGEpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig1LGQpLCFiKXRocm93IGE7YihhKX0pLGV9LGkucHJvdG90eXBlLmxvYWRTdHJpbmdzPWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZFN0cmluZ3NcIixhcmd1bWVudHMpO2Zvcih2YXIgYSxiLGM9W10sZD0xO2Q8YXJndW1lbnRzLmxlbmd0aDtkKyspe3ZhciBlPWFyZ3VtZW50c1tkXTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYodm9pZCAwPT09YT9hPWU6dm9pZCAwPT09YiYmKGI9ZSkpfXZhciBmPXRoaXM7cmV0dXJuIGkucHJvdG90eXBlLmh0dHBEby5jYWxsKHRoaXMsYXJndW1lbnRzWzBdLFwiR0VUXCIsXCJ0ZXh0XCIsZnVuY3Rpb24oYil7dmFyIGQ9Yi5yZXBsYWNlKC9cXHJcXG4vZyxcIlxcclwiKS5yZXBsYWNlKC9cXG4vZyxcIlxcclwiKS5zcGxpdCgvXFxyLyk7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYyxkKSx2b2lkIDAhPT1hJiZhKGMpLGYuX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYSl7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDMsYXJndW1lbnRzWzBdKSwhYil0aHJvdyBhO2IoYSl9KSxjfSxpLnByb3RvdHlwZS5sb2FkVGFibGU9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlPVtdLGY9ITEsZz1hLnN1YnN0cmluZyhhLmxhc3RJbmRleE9mKFwiLlwiKSsxLGEubGVuZ3RoKSxoPVwiLFwiLGo9ITE7XCJ0c3ZcIj09PWcmJihoPVwiXFx0XCIpO2Zvcih2YXIgaz0xO2s8YXJndW1lbnRzLmxlbmd0aDtrKyspaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYXJndW1lbnRzW2tdKXZvaWQgMD09PWI/Yj1hcmd1bWVudHNba106dm9pZCAwPT09YyYmKGM9YXJndW1lbnRzW2tdKTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBhcmd1bWVudHNba10paWYoZS5wdXNoKGFyZ3VtZW50c1trXSksXCJoZWFkZXJcIj09PWFyZ3VtZW50c1trXSYmKGY9ITApLFwiY3N2XCI9PT1hcmd1bWVudHNba10pe2lmKGopdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNldCBtdWx0aXBsZSBzZXBhcmF0b3IgdHlwZXMuXCIpO2g9XCIsXCIsaj0hMH1lbHNlIGlmKFwidHN2XCI9PT1hcmd1bWVudHNba10pe2lmKGopdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNldCBtdWx0aXBsZSBzZXBhcmF0b3IgdHlwZXMuXCIpO2g9XCJcXHRcIixqPSEwfXZhciBsPW5ldyBpLlRhYmxlLG09dGhpcztyZXR1cm4gdGhpcy5odHRwRG8oYSxcIkdFVFwiLFwidGFibGVcIixmdW5jdGlvbihhKXtmb3IodmFyIGMsZT17fSxnPTAsaj0xLG49MixvPTQscD0nXCInLHE9XCJcXHJcIixyPVwiXFxuXCIscz1bXSx0PTAsdT1udWxsLHY9ZnVuY3Rpb24oKXtlLmN1cnJlbnRTdGF0ZT1nLGUudG9rZW49XCJcIn0sdz1mdW5jdGlvbigpe3UucHVzaChlLnRva2VuKSx2KCl9LHg9ZnVuY3Rpb24oKXtlLmVzY2FwZWQ9ITEsdT1bXSx2KCl9LHk9ZnVuY3Rpb24oKXtlLmN1cnJlbnRTdGF0ZT1vLHMucHVzaCh1KSx1PW51bGx9Ozspe2lmKG51bGw9PShjPWFbdCsrXSkpe2lmKGUuZXNjYXBlZCl0aHJvdyBuZXcgRXJyb3IoXCJVbmNsb3NlZCBxdW90ZSBpbiBmaWxlLlwiKTtpZih1KXt3KCkseSgpO2JyZWFrfX1pZihudWxsPT09dSYmeCgpLGUuY3VycmVudFN0YXRlPT09Zyl7aWYoYz09PXApe2UuZXNjYXBlZD0hMCxlLmN1cnJlbnRTdGF0ZT1qO2NvbnRpbnVlfWUuY3VycmVudFN0YXRlPWp9aWYoZS5jdXJyZW50U3RhdGU9PT1qJiZlLmVzY2FwZWQpaWYoYz09PXApYVt0XT09PXA/KGUudG9rZW4rPXAsdCsrKTooZS5lc2NhcGVkPSExLGUuY3VycmVudFN0YXRlPW4pO2Vsc2V7aWYoYz09PXEpY29udGludWU7ZS50b2tlbis9Y31lbHNlIGM9PT1xPyhhW3RdPT09ciYmdCsrLHcoKSx5KCkpOmM9PT1yPyh3KCkseSgpKTpjPT09aD93KCk6ZS5jdXJyZW50U3RhdGU9PT1qJiYoZS50b2tlbis9Yyl9aWYoZilsLmNvbHVtbnM9cy5zaGlmdCgpO2Vsc2UgZm9yKGs9MDtrPHNbMF0ubGVuZ3RoO2srKylsLmNvbHVtbnNba109XCJudWxsXCI7dmFyIHo7Zm9yKGs9MDtrPHMubGVuZ3RoO2srKykoMSE9PXNba10ubGVuZ3RofHxcInVuZGVmaW5lZFwiIT09c1trXVswXSYmXCJcIiE9PXNba11bMF0pJiYoej1uZXcgaS5UYWJsZVJvdyx6LmFycj1zW2tdLHoub2JqPWQoc1trXSxsLmNvbHVtbnMpLGwuYWRkUm93KHopKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBiJiZiKGwpLG0uX2RlY3JlbWVudFByZWxvYWQoKX0sZnVuY3Rpb24oYil7aWYoaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDIsYSksIWMpdGhyb3cgYjtjKGIpfSksbH0saS5wcm90b3R5cGUubG9hZFhNTD1mdW5jdGlvbigpe2Zvcih2YXIgYSxiLGM9e30sZD0xO2Q8YXJndW1lbnRzLmxlbmd0aDtkKyspe3ZhciBlPWFyZ3VtZW50c1tkXTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYodm9pZCAwPT09YT9hPWU6dm9pZCAwPT09YiYmKGI9ZSkpfXZhciBmPXRoaXM7cmV0dXJuIHRoaXMuaHR0cERvKGFyZ3VtZW50c1swXSxcIkdFVFwiLFwieG1sXCIsZnVuY3Rpb24oYil7Zm9yKHZhciBkIGluIGIpY1tkXT1iW2RdO3ZvaWQgMCE9PWEmJmEoYyksZi5fZGVjcmVtZW50UHJlbG9hZCgpfSxmdW5jdGlvbihhKXtpZihpLl9mcmllbmRseUZpbGVMb2FkRXJyb3IoMSxhcmd1bWVudHNbMF0pLCFiKXRocm93IGE7YihhKX0pLGN9LGkucHJvdG90eXBlLmxvYWRCeXRlcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9e30sZT10aGlzO3JldHVybiB0aGlzLmh0dHBEbyhhLFwiR0VUXCIsXCJhcnJheUJ1ZmZlclwiLGZ1bmN0aW9uKGEpe2QuYnl0ZXM9bmV3IFVpbnQ4QXJyYXkoYSksXCJmdW5jdGlvblwiPT10eXBlb2YgYiYmYihkKSxlLl9kZWNyZW1lbnRQcmVsb2FkKCl9LGZ1bmN0aW9uKGIpe2lmKGkuX2ZyaWVuZGx5RmlsZUxvYWRFcnJvcig2LGEpLCFjKXRocm93IGI7YyhiKX0pLGR9LGkucHJvdG90eXBlLmh0dHBHZXQ9ZnVuY3Rpb24oKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJodHRwR2V0XCIsYXJndW1lbnRzKTt2YXIgYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBhLnNwbGljZSgxLDAsXCJHRVRcIiksaS5wcm90b3R5cGUuaHR0cERvLmFwcGx5KHRoaXMsYSl9LGkucHJvdG90eXBlLmh0dHBQb3N0PWZ1bmN0aW9uKCl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiaHR0cFBvc3RcIixhcmd1bWVudHMpO3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGEuc3BsaWNlKDEsMCxcIlBPU1RcIiksaS5wcm90b3R5cGUuaHR0cERvLmFwcGx5KHRoaXMsYSl9LGkucHJvdG90eXBlLmh0dHBEbz1mdW5jdGlvbigpe2Zvcih2YXIgYSxiLGMsZCxmLGc9e30saD0wLGs9XCJ0ZXh0L3BsYWluXCIsbD1hcmd1bWVudHMubGVuZ3RoLTE7bD4wJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhcmd1bWVudHNbbF07bC0tKWgrKzt2YXIgbT1hcmd1bWVudHMubGVuZ3RoLWgsbj1hcmd1bWVudHNbMF07aWYoMj09PW0mJlwic3RyaW5nXCI9PXR5cGVvZiBuJiZcIm9iamVjdFwiPT10eXBlb2YgYXJndW1lbnRzWzFdKWQ9bmV3IFJlcXVlc3Qobixhcmd1bWVudHNbMV0pLGI9YXJndW1lbnRzWzJdLGM9YXJndW1lbnRzWzNdO2Vsc2V7Zm9yKHZhciBvLHA9XCJHRVRcIixxPTE7cTxhcmd1bWVudHMubGVuZ3RoO3ErKyl7dmFyIHI9YXJndW1lbnRzW3FdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiByKVwiR0VUXCI9PT1yfHxcIlBPU1RcIj09PXJ8fFwiUFVUXCI9PT1yfHxcIkRFTEVURVwiPT09cj9wPXI6XCJqc29uXCI9PT1yfHxcImpzb25wXCI9PT1yfHxcImJpbmFyeVwiPT09cnx8XCJhcnJheUJ1ZmZlclwiPT09cnx8XCJ4bWxcIj09PXJ8fFwidGV4dFwiPT09cnx8XCJ0YWJsZVwiPT09cj9hPXI6bz1yO2Vsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIHIpbz1yLnRvU3RyaW5nKCk7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgcilpZihyLmhhc093blByb3BlcnR5KFwianNvbnBDYWxsYmFja1wiKSlmb3IodmFyIHMgaW4gcilnW3NdPXJbc107ZWxzZSBvPUpTT04uc3RyaW5naWZ5KHIpLGs9XCJhcHBsaWNhdGlvbi9qc29uXCI7ZWxzZVwiZnVuY3Rpb25cIj09dHlwZW9mIHImJihiP2M9cjpiPXIpfWQ9bmV3IFJlcXVlc3Qobix7bWV0aG9kOnAsbW9kZTpcImNvcnNcIixib2R5Om8saGVhZGVyczpuZXcgSGVhZGVycyh7XCJDb250ZW50LVR5cGVcIjprfSl9KX1yZXR1cm4gYXx8KGE9LTEhPT1uLmluZGV4T2YoXCJqc29uXCIpP1wianNvblwiOi0xIT09bi5pbmRleE9mKFwieG1sXCIpP1wieG1sXCI6XCJ0ZXh0XCIpLGY9XCJqc29ucFwiPT09YT9qKG4sZyk6ZmV0Y2goZCksZj1mLnRoZW4oZnVuY3Rpb24oYil7aWYoIWIub2spe3ZhciBjPW5ldyBFcnJvcihiLmJvZHkpO3Rocm93IGMuc3RhdHVzPWIuc3RhdHVzLGMub2s9ITEsY312YXIgZD1iLmhlYWRlcnMuZ2V0KFwiY29udGVudC1sZW5ndGhcIik7c3dpdGNoKGQmJmQ+NjRlNiYmaS5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDcsbiksYSl7Y2FzZVwianNvblwiOmNhc2VcImpzb25wXCI6cmV0dXJuIGIuanNvbigpO2Nhc2VcImJpbmFyeVwiOnJldHVybiBiLmJsb2IoKTtjYXNlXCJhcnJheUJ1ZmZlclwiOnJldHVybiBiLmFycmF5QnVmZmVyKCk7Y2FzZVwieG1sXCI6cmV0dXJuIGIudGV4dCgpLnRoZW4oZnVuY3Rpb24oYSl7cmV0dXJuIGUoKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhhLFwidGV4dC94bWxcIikuZG9jdW1lbnRFbGVtZW50KX0pO2RlZmF1bHQ6cmV0dXJuIGIudGV4dCgpfX0pLGYudGhlbihifHxmdW5jdGlvbigpe30pLGYuY2F0Y2goY3x8Y29uc29sZS5lcnJvciksZn0sd2luZG93LlVSTD13aW5kb3cuVVJMfHx3aW5kb3cud2Via2l0VVJMLGkucHJvdG90eXBlLl9wV3JpdGVycz1bXSxpLnByb3RvdHlwZS5jcmVhdGVXcml0ZXI9ZnVuY3Rpb24oYSxiKXt2YXIgYztmb3IodmFyIGQgaW4gaS5wcm90b3R5cGUuX3BXcml0ZXJzKWlmKGkucHJvdG90eXBlLl9wV3JpdGVyc1tkXS5uYW1lPT09YSlyZXR1cm4gYz1uZXcgaS5QcmludFdyaXRlcihhK3RoaXMubWlsbGlzKCksYiksaS5wcm90b3R5cGUuX3BXcml0ZXJzLnB1c2goYyksYztyZXR1cm4gYz1uZXcgaS5QcmludFdyaXRlcihhLGIpLGkucHJvdG90eXBlLl9wV3JpdGVycy5wdXNoKGMpLGN9LGkuUHJpbnRXcml0ZXI9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO3RoaXMubmFtZT1hLHRoaXMuY29udGVudD1cIlwiLHRoaXMud3JpdGU9ZnVuY3Rpb24oYSl7dGhpcy5jb250ZW50Kz1hfSx0aGlzLnByaW50PWZ1bmN0aW9uKGEpe3RoaXMuY29udGVudCs9YStcIlxcblwifSx0aGlzLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5jb250ZW50PVwiXCJ9LHRoaXMuY2xvc2U9ZnVuY3Rpb24oKXt2YXIgZD1bXTtkLnB1c2godGhpcy5jb250ZW50KSxpLnByb3RvdHlwZS53cml0ZUZpbGUoZCxhLGIpO2Zvcih2YXIgZSBpbiBpLnByb3RvdHlwZS5fcFdyaXRlcnMpaS5wcm90b3R5cGUuX3BXcml0ZXJzW2VdLm5hbWU9PT10aGlzLm5hbWUmJmkucHJvdG90eXBlLl9wV3JpdGVycy5zcGxpY2UoZSwxKTtjLmNsZWFyKCksYz17fX19LGkucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWFyZ3VtZW50cyxlPXRoaXMuX2N1ckVsZW1lbnQuZWx0O2lmKDA9PT1kLmxlbmd0aClyZXR1cm4gdm9pZCBpLnByb3RvdHlwZS5zYXZlQ2FudmFzKGUpO2lmKGRbMF1pbnN0YW5jZW9mIGkuUmVuZGVyZXJ8fGRbMF1pbnN0YW5jZW9mIGkuR3JhcGhpY3MpcmV0dXJuIHZvaWQgaS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhkWzBdLmVsdCxkWzFdLGRbMl0pO2lmKDE9PT1kLmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIGRbMF0paS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhlLGRbMF0pO2Vsc2V7c3dpdGNoKGcoZFsxXSxkWzJdKVsxXSl7Y2FzZVwianNvblwiOnJldHVybiB2b2lkIGkucHJvdG90eXBlLnNhdmVKU09OKGRbMF0sZFsxXSxkWzJdKTtjYXNlXCJ0eHRcIjpyZXR1cm4gdm9pZCBpLnByb3RvdHlwZS5zYXZlU3RyaW5ncyhkWzBdLGRbMV0sZFsyXSk7ZGVmYXVsdDpkWzBdaW5zdGFuY2VvZiBBcnJheT9pLnByb3RvdHlwZS5zYXZlU3RyaW5ncyhkWzBdLGRbMV0sZFsyXSk6ZFswXWluc3RhbmNlb2YgaS5UYWJsZT9pLnByb3RvdHlwZS5zYXZlVGFibGUoZFswXSxkWzFdLGRbMl0pOmRbMF1pbnN0YW5jZW9mIGkuSW1hZ2U/aS5wcm90b3R5cGUuc2F2ZUNhbnZhcyhkWzBdLmNhbnZhcyxkWzFdKTpkWzBdaW5zdGFuY2VvZiBpLlNvdW5kRmlsZSYmaS5wcm90b3R5cGUuc2F2ZVNvdW5kKGRbMF0sZFsxXSxkWzJdLGRbM10pfX19LGkucHJvdG90eXBlLnNhdmVKU09OPWZ1bmN0aW9uKGEsYixjKXtpLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJzYXZlSlNPTlwiLGFyZ3VtZW50cyk7dmFyIGQ7ZD1jP0pTT04uc3RyaW5naWZ5KGEpOkpTT04uc3RyaW5naWZ5KGEsdm9pZCAwLDIpLHRoaXMuc2F2ZVN0cmluZ3MoZC5zcGxpdChcIlxcblwiKSxiLFwianNvblwiKX0saS5wcm90b3R5cGUuc2F2ZUpTT05PYmplY3Q9aS5wcm90b3R5cGUuc2F2ZUpTT04saS5wcm90b3R5cGUuc2F2ZUpTT05BcnJheT1pLnByb3RvdHlwZS5zYXZlSlNPTixpLnByb3RvdHlwZS5zYXZlU3RyaW5ncz1mdW5jdGlvbihhLGIsYyl7aS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic2F2ZVN0cmluZ3NcIixhcmd1bWVudHMpO2Zvcih2YXIgZD1jfHxcInR4dFwiLGU9dGhpcy5jcmVhdGVXcml0ZXIoYixkKSxmPTA7ZjxhLmxlbmd0aDtmKyspYS5sZW5ndGgsZS5wcmludChhW2ZdKTtlLmNsb3NlKCksZS5jbGVhcigpfSxpLnByb3RvdHlwZS5zYXZlVGFibGU9ZnVuY3Rpb24oYSxiLGMpe2kuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNhdmVUYWJsZVwiLGFyZ3VtZW50cyk7dmFyIGQ7ZD12b2lkIDA9PT1jP2Iuc3Vic3RyaW5nKGIubGFzdEluZGV4T2YoXCIuXCIpKzEsYi5sZW5ndGgpOmM7dmFyIGU9dGhpcy5jcmVhdGVXcml0ZXIoYixkKSxnPWEuY29sdW1ucyxoPVwiLFwiO2lmKFwidHN2XCI9PT1kJiYoaD1cIlxcdFwiKSxcImh0bWxcIiE9PWQpe2lmKFwiMFwiIT09Z1swXSl7Zm9yKHZhciBqPTA7ajxnLmxlbmd0aDtqKyspajxnLmxlbmd0aC0xP2Uud3JpdGUoZ1tqXStoKTplLndyaXRlKGdbal0pO2Uud3JpdGUoXCJcXG5cIil9Zm9yKHZhciBrPTA7azxhLnJvd3MubGVuZ3RoO2srKyl7dmFyIGw7Zm9yKGw9MDtsPGEucm93c1trXS5hcnIubGVuZ3RoO2wrKylsPGEucm93c1trXS5hcnIubGVuZ3RoLTE/ZS53cml0ZShhLnJvd3Nba10uYXJyW2xdK2gpOihhLnJvd3MubGVuZ3RoLGUud3JpdGUoYS5yb3dzW2tdLmFycltsXSkpO2Uud3JpdGUoXCJcXG5cIil9fWVsc2V7ZS5wcmludChcIjxodG1sPlwiKSxlLnByaW50KFwiPGhlYWQ+XCIpO3ZhciBtPScgIDxtZXRhIGh0dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50JztpZihtKz0nPVwidGV4dC9odG1sO2NoYXJzZXQ9dXRmLThcIiAvPicsZS5wcmludChtKSxlLnByaW50KFwiPC9oZWFkPlwiKSxlLnByaW50KFwiPGJvZHk+XCIpLGUucHJpbnQoXCIgIDx0YWJsZT5cIiksXCIwXCIhPT1nWzBdKXtlLnByaW50KFwiICAgIDx0cj5cIik7Zm9yKHZhciBuPTA7bjxnLmxlbmd0aDtuKyspe3ZhciBvPWYoZ1tuXSk7ZS5wcmludChcIiAgICAgIDx0ZD5cIitvKSxlLnByaW50KFwiICAgICAgPC90ZD5cIil9ZS5wcmludChcIiAgICA8L3RyPlwiKX1mb3IodmFyIHA9MDtwPGEucm93cy5sZW5ndGg7cCsrKXtlLnByaW50KFwiICAgIDx0cj5cIik7Zm9yKHZhciBxPTA7cTxhLmNvbHVtbnMubGVuZ3RoO3ErKyl7dmFyIHI9YS5yb3dzW3BdLmdldFN0cmluZyhxKSxzPWYocik7ZS5wcmludChcIiAgICAgIDx0ZD5cIitzKSxlLnByaW50KFwiICAgICAgPC90ZD5cIil9ZS5wcmludChcIiAgICA8L3RyPlwiKX1lLnByaW50KFwiICA8L3RhYmxlPlwiKSxlLnByaW50KFwiPC9ib2R5PlwiKSxlLnByaW50KFwiPC9odG1sPlwiKX1lLmNsb3NlKCksZS5jbGVhcigpfSxpLnByb3RvdHlwZS53cml0ZUZpbGU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7aS5wcm90b3R5cGUuX2lzU2FmYXJpKCkmJihkPVwidGV4dC9wbGFpblwiKTt2YXIgZT1uZXcgQmxvYihhLHt0eXBlOmR9KTtpLnByb3RvdHlwZS5kb3dubG9hZEZpbGUoZSxiLGMpfSxpLnByb3RvdHlwZS5kb3dubG9hZEZpbGU9ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWcoYyxkKSxmPWVbMF07aWYoYiBpbnN0YW5jZW9mIEJsb2Ipe3JldHVybiB2b2lkIGEoXCJmaWxlLXNhdmVyXCIpLnNhdmVBcyhiLGYpfXZhciBqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO2lmKGouaHJlZj1iLGouZG93bmxvYWQ9ZixqLm9uY2xpY2s9ZnVuY3Rpb24oYSl7aChhKSxhLnN0b3BQcm9wYWdhdGlvbigpfSxqLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChqKSxpLnByb3RvdHlwZS5faXNTYWZhcmkoKSl7dmFyIGs9XCJIZWxsbywgU2FmYXJpIHVzZXIhIFRvIGRvd25sb2FkIHRoaXMgZmlsZS4uLlxcblwiO2srPVwiMS4gR28gdG8gRmlsZSAtLVxceDNlIFNhdmUgQXMuXFxuXCIsays9JzIuIENob29zZSBcIlBhZ2UgU291cmNlXCIgYXMgdGhlIEZvcm1hdC5cXG4nLGsrPSczLiBOYW1lIGl0IHdpdGggdGhpcyBleHRlbnNpb246IC5cIicrZVsxXSsnXCInLGFsZXJ0KGspfWouY2xpY2soKX0saS5wcm90b3R5cGUuX2NoZWNrRmlsZUV4dGVuc2lvbj1nLGkucHJvdG90eXBlLl9pc1NhZmFyaT1mdW5jdGlvbigpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2luZG93LkhUTUxFbGVtZW50KS5pbmRleE9mKFwiQ29uc3RydWN0b3JcIik+MH0sYi5leHBvcnRzPWl9LHtcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjQsXCJlczYtcHJvbWlzZVwiOjQsXCJmZXRjaC1qc29ucFwiOjUsXCJmaWxlLXNhdmVyXCI6NixcIndoYXR3Zy1mZXRjaFwiOjEyfV0sNDg6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuVGFibGU9ZnVuY3Rpb24oYSl7dGhpcy5jb2x1bW5zPVtdLHRoaXMucm93cz1bXX0sZC5UYWJsZS5wcm90b3R5cGUuYWRkUm93PWZ1bmN0aW9uKGEpe3ZhciBiPWF8fG5ldyBkLlRhYmxlUm93O2lmKHZvaWQgMD09PWIuYXJyfHx2b2lkIDA9PT1iLm9iail0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFRhYmxlUm93OiBcIitiKTtyZXR1cm4gYi50YWJsZT10aGlzLHRoaXMucm93cy5wdXNoKGIpLGJ9LGQuVGFibGUucHJvdG90eXBlLnJlbW92ZVJvdz1mdW5jdGlvbihhKXt0aGlzLnJvd3NbYV0udGFibGU9bnVsbDt2YXIgYj10aGlzLnJvd3Muc3BsaWNlKGErMSx0aGlzLnJvd3MubGVuZ3RoKTt0aGlzLnJvd3MucG9wKCksdGhpcy5yb3dzPXRoaXMucm93cy5jb25jYXQoYil9LGQuVGFibGUucHJvdG90eXBlLmdldFJvdz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3dzW2FdfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm93c30sZC5UYWJsZS5wcm90b3R5cGUuZmluZFJvdz1mdW5jdGlvbihhLGIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiKXtmb3IodmFyIGM9MDtjPHRoaXMucm93cy5sZW5ndGg7YysrKWlmKHRoaXMucm93c1tjXS5vYmpbYl09PT1hKXJldHVybiB0aGlzLnJvd3NbY119ZWxzZSBmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKWlmKHRoaXMucm93c1tkXS5hcnJbYl09PT1hKXJldHVybiB0aGlzLnJvd3NbZF07cmV0dXJuIG51bGx9LGQuVGFibGUucHJvdG90eXBlLmZpbmRSb3dzPWZ1bmN0aW9uKGEsYil7dmFyIGM9W107aWYoXCJzdHJpbmdcIj09dHlwZW9mIGIpZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKyl0aGlzLnJvd3NbZF0ub2JqW2JdPT09YSYmYy5wdXNoKHRoaXMucm93c1tkXSk7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMucm93cy5sZW5ndGg7ZSsrKXRoaXMucm93c1tlXS5hcnJbYl09PT1hJiZjLnB1c2godGhpcy5yb3dzW2VdKTtyZXR1cm4gY30sZC5UYWJsZS5wcm90b3R5cGUubWF0Y2hSb3c9ZnVuY3Rpb24oYSxiKXtpZihcIm51bWJlclwiPT10eXBlb2YgYil7Zm9yKHZhciBjPTA7Yzx0aGlzLnJvd3MubGVuZ3RoO2MrKylpZih0aGlzLnJvd3NbY10uYXJyW2JdLm1hdGNoKGEpKXJldHVybiB0aGlzLnJvd3NbY119ZWxzZSBmb3IodmFyIGQ9MDtkPHRoaXMucm93cy5sZW5ndGg7ZCsrKWlmKHRoaXMucm93c1tkXS5vYmpbYl0ubWF0Y2goYSkpcmV0dXJuIHRoaXMucm93c1tkXTtyZXR1cm4gbnVsbH0sZC5UYWJsZS5wcm90b3R5cGUubWF0Y2hSb3dzPWZ1bmN0aW9uKGEsYil7dmFyIGM9W107aWYoXCJudW1iZXJcIj09dHlwZW9mIGIpZm9yKHZhciBkPTA7ZDx0aGlzLnJvd3MubGVuZ3RoO2QrKyl0aGlzLnJvd3NbZF0uYXJyW2JdLm1hdGNoKGEpJiZjLnB1c2godGhpcy5yb3dzW2RdKTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5yb3dzLmxlbmd0aDtlKyspdGhpcy5yb3dzW2VdLm9ialtiXS5tYXRjaChhKSYmYy5wdXNoKHRoaXMucm93c1tlXSk7cmV0dXJuIGN9LGQuVGFibGUucHJvdG90eXBlLmdldENvbHVtbj1mdW5jdGlvbihhKXt2YXIgYj1bXTtpZihcInN0cmluZ1wiPT10eXBlb2YgYSlmb3IodmFyIGM9MDtjPHRoaXMucm93cy5sZW5ndGg7YysrKWIucHVzaCh0aGlzLnJvd3NbY10ub2JqW2FdKTtlbHNlIGZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspYi5wdXNoKHRoaXMucm93c1tkXS5hcnJbYV0pO3JldHVybiBifSxkLlRhYmxlLnByb3RvdHlwZS5jbGVhclJvd3M9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5yb3dzLHRoaXMucm93cz1bXX0sZC5UYWJsZS5wcm90b3R5cGUuYWRkQ29sdW1uPWZ1bmN0aW9uKGEpe3ZhciBiPWF8fG51bGw7dGhpcy5jb2x1bW5zLnB1c2goYil9LGQuVGFibGUucHJvdG90eXBlLmdldENvbHVtbkNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5sZW5ndGh9LGQuVGFibGUucHJvdG90eXBlLmdldFJvd0NvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm93cy5sZW5ndGh9LGQuVGFibGUucHJvdG90eXBlLnJlbW92ZVRva2Vucz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csXCJcXFxcJCZcIil9LGQ9W10sZT0wO2U8YS5sZW5ndGg7ZSsrKWQucHVzaChjKGEuY2hhckF0KGUpKSk7dmFyIGY9bmV3IFJlZ0V4cChkLmpvaW4oXCJ8XCIpLFwiZ1wiKTtpZih2b2lkIDA9PT1iKWZvcih2YXIgZz0wO2c8dGhpcy5jb2x1bW5zLmxlbmd0aDtnKyspZm9yKHZhciBoPTA7aDx0aGlzLnJvd3MubGVuZ3RoO2grKyl7dmFyIGk9dGhpcy5yb3dzW2hdLmFycltnXTtpPWkucmVwbGFjZShmLFwiXCIpLHRoaXMucm93c1toXS5hcnJbZ109aSx0aGlzLnJvd3NbaF0ub2JqW3RoaXMuY29sdW1uc1tnXV09aX1lbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBiKWZvcih2YXIgaj0wO2o8dGhpcy5yb3dzLmxlbmd0aDtqKyspe3ZhciBrPXRoaXMucm93c1tqXS5vYmpbYl07az1rLnJlcGxhY2UoZixcIlwiKSx0aGlzLnJvd3Nbal0ub2JqW2JdPWs7dmFyIGw9dGhpcy5jb2x1bW5zLmluZGV4T2YoYik7dGhpcy5yb3dzW2pdLmFycltsXT1rfWVsc2UgZm9yKHZhciBtPTA7bTx0aGlzLnJvd3MubGVuZ3RoO20rKyl7dmFyIG49dGhpcy5yb3dzW21dLmFycltiXTtuPW4ucmVwbGFjZShmLFwiXCIpLHRoaXMucm93c1ttXS5hcnJbYl09bix0aGlzLnJvd3NbbV0ub2JqW3RoaXMuY29sdW1uc1tiXV09bn19LGQuVGFibGUucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IFJlZ0V4cChcIiBcIixcImdcIik7aWYodm9pZCAwPT09YSlmb3IodmFyIGM9MDtjPHRoaXMuY29sdW1ucy5sZW5ndGg7YysrKWZvcih2YXIgZD0wO2Q8dGhpcy5yb3dzLmxlbmd0aDtkKyspe3ZhciBlPXRoaXMucm93c1tkXS5hcnJbY107ZT1lLnJlcGxhY2UoYixcIlwiKSx0aGlzLnJvd3NbZF0uYXJyW2NdPWUsdGhpcy5yb3dzW2RdLm9ialt0aGlzLmNvbHVtbnNbY11dPWV9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYSlmb3IodmFyIGY9MDtmPHRoaXMucm93cy5sZW5ndGg7ZisrKXt2YXIgZz10aGlzLnJvd3NbZl0ub2JqW2FdO2c9Zy5yZXBsYWNlKGIsXCJcIiksdGhpcy5yb3dzW2ZdLm9ialthXT1nO3ZhciBoPXRoaXMuY29sdW1ucy5pbmRleE9mKGEpO3RoaXMucm93c1tmXS5hcnJbaF09Z31lbHNlIGZvcih2YXIgaT0wO2k8dGhpcy5yb3dzLmxlbmd0aDtpKyspe3ZhciBqPXRoaXMucm93c1tpXS5hcnJbYV07aj1qLnJlcGxhY2UoYixcIlwiKSx0aGlzLnJvd3NbaV0uYXJyW2FdPWosdGhpcy5yb3dzW2ldLm9ialt0aGlzLmNvbHVtbnNbYV1dPWp9fSxkLlRhYmxlLnByb3RvdHlwZS5yZW1vdmVDb2x1bW49ZnVuY3Rpb24oYSl7dmFyIGIsYztcInN0cmluZ1wiPT10eXBlb2YgYT8oYj1hLGM9dGhpcy5jb2x1bW5zLmluZGV4T2YoYSkpOihjPWEsYj10aGlzLmNvbHVtbnNbYV0pO3ZhciBkPXRoaXMuY29sdW1ucy5zcGxpY2UoYysxLHRoaXMuY29sdW1ucy5sZW5ndGgpO3RoaXMuY29sdW1ucy5wb3AoKSx0aGlzLmNvbHVtbnM9dGhpcy5jb2x1bW5zLmNvbmNhdChkKTtmb3IodmFyIGU9MDtlPHRoaXMucm93cy5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLnJvd3NbZV0uYXJyLGc9Zi5zcGxpY2UoYysxLGYubGVuZ3RoKTtmLnBvcCgpLHRoaXMucm93c1tlXS5hcnI9Zi5jb25jYXQoZyksZGVsZXRlIHRoaXMucm93c1tlXS5vYmpbYl19fSxkLlRhYmxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMucm93c1thXS5zZXQoYixjKX0sZC5UYWJsZS5wcm90b3R5cGUuc2V0TnVtPWZ1bmN0aW9uKGEsYixjKXt0aGlzLnJvd3NbYV0uc2V0TnVtKGIsYyl9LGQuVGFibGUucHJvdG90eXBlLnNldFN0cmluZz1mdW5jdGlvbihhLGIsYyl7dGhpcy5yb3dzW2FdLnNldFN0cmluZyhiLGMpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5yb3dzW2FdLmdldChiKX0sZC5UYWJsZS5wcm90b3R5cGUuZ2V0TnVtPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucm93c1thXS5nZXROdW0oYil9LGQuVGFibGUucHJvdG90eXBlLmdldFN0cmluZz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnJvd3NbYV0uZ2V0U3RyaW5nKGIpfSxkLlRhYmxlLnByb3RvdHlwZS5nZXRPYmplY3Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZD17fSxlPTA7ZTx0aGlzLnJvd3MubGVuZ3RoO2UrKylpZihiPXRoaXMucm93c1tlXS5vYmosXCJzdHJpbmdcIj09dHlwZW9mIGEpe2lmKCEodGhpcy5jb2x1bW5zLmluZGV4T2YoYSk+PTApKXRocm93IG5ldyBFcnJvcignVGhpcyB0YWJsZSBoYXMgbm8gY29sdW1uIG5hbWVkIFwiJythKydcIicpO2M9YlthXSxkW2NdPWJ9ZWxzZSBkW2VdPXRoaXMucm93c1tlXS5vYmo7cmV0dXJuIGR9LGQuVGFibGUucHJvdG90eXBlLmdldEFycmF5PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPVtdLGI9MDtiPHRoaXMucm93cy5sZW5ndGg7YisrKWEucHVzaCh0aGlzLnJvd3NbYl0uYXJyKTtyZXR1cm4gYX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNDk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QuVGFibGVSb3c9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkPXt9O2EmJihiPWJ8fFwiLFwiLGM9YS5zcGxpdChiKSk7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWUsZz1jW2VdO2RbZl09Z310aGlzLmFycj1jLHRoaXMub2JqPWQsdGhpcy50YWJsZT1udWxsfSxkLlRhYmxlUm93LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXtpZihcInN0cmluZ1wiPT10eXBlb2YgYSl7dmFyIGM9dGhpcy50YWJsZS5jb2x1bW5zLmluZGV4T2YoYSk7aWYoIShjPj0wKSl0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgdGFibGUgaGFzIG5vIGNvbHVtbiBuYW1lZCBcIicrYSsnXCInKTt0aGlzLm9ialthXT1iLHRoaXMuYXJyW2NdPWJ9ZWxzZXtpZighKGE8dGhpcy50YWJsZS5jb2x1bW5zLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKFwiQ29sdW1uICNcIithK1wiIGlzIG91dCBvZiB0aGUgcmFuZ2Ugb2YgdGhpcyB0YWJsZVwiKTt0aGlzLmFyclthXT1iO3ZhciBkPXRoaXMudGFibGUuY29sdW1uc1thXTt0aGlzLm9ialtkXT1ifX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuc2V0TnVtPWZ1bmN0aW9uKGEsYil7dmFyIGM9cGFyc2VGbG9hdChiKTt0aGlzLnNldChhLGMpfSxkLlRhYmxlUm93LnByb3RvdHlwZS5zZXRTdHJpbmc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLnRvU3RyaW5nKCk7dGhpcy5zZXQoYSxjKX0sZC5UYWJsZVJvdy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhP3RoaXMub2JqW2FdOnRoaXMuYXJyW2FdfSxkLlRhYmxlUm93LnByb3RvdHlwZS5nZXROdW09ZnVuY3Rpb24oYSl7dmFyIGI7aWYoYj1cInN0cmluZ1wiPT10eXBlb2YgYT9wYXJzZUZsb2F0KHRoaXMub2JqW2FdKTpwYXJzZUZsb2F0KHRoaXMuYXJyW2FdKSxcIk5hTlwiPT09Yi50b1N0cmluZygpKXRocm93XCJFcnJvcjogXCIrdGhpcy5vYmpbYV0rXCIgaXMgTmFOIChOb3QgYSBOdW1iZXIpXCI7cmV0dXJuIGJ9LGQuVGFibGVSb3cucHJvdG90eXBlLmdldFN0cmluZz1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYT90aGlzLm9ialthXS50b1N0cmluZygpOnRoaXMuYXJyW2FdLnRvU3RyaW5nKCl9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDUwOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlhNTD1mdW5jdGlvbigpe3RoaXMubmFtZT1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLmNoaWxkcmVuPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy5jb250ZW50PW51bGx9LGQuWE1MLnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnR9LGQuWE1MLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZX0sZC5YTUwucHJvdG90eXBlLnNldE5hbWU9ZnVuY3Rpb24oYSl7dGhpcy5uYW1lPWF9LGQuWE1MLnByb3RvdHlwZS5oYXNDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD4wfSxkLlhNTC5wcm90b3R5cGUubGlzdENoaWxkcmVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLm5hbWV9KX0sZC5YTUwucHJvdG90eXBlLmdldENoaWxkcmVuPWZ1bmN0aW9uKGEpe3JldHVybiBhP3RoaXMuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBiLm5hbWU9PT1hfSk6dGhpcy5jaGlsZHJlbn0sZC5YTUwucHJvdG90eXBlLmdldENoaWxkPWZ1bmN0aW9uKGEpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBhKXJldHVybiB0aGlzLmNoaWxkcmVuW2FdO2Zvcih2YXIgYj0wO2I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YisrKXt2YXIgYz10aGlzLmNoaWxkcmVuW2JdO2lmKGMubmFtZT09PWEpcmV0dXJuIGN9fSxkLlhNTC5wcm90b3R5cGUuYWRkQ2hpbGQ9ZnVuY3Rpb24oYSl7YSBpbnN0YW5jZW9mIGQuWE1MJiZ0aGlzLmNoaWxkcmVuLnB1c2goYSl9LGQuWE1MLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbihhKXt2YXIgYj0tMTtpZihcInN0cmluZ1wiPT10eXBlb2YgYSl7Zm9yKHZhciBjPTA7Yzx0aGlzLmNoaWxkcmVuLmxlbmd0aDtjKyspaWYodGhpcy5jaGlsZHJlbltjXS5uYW1lPT09YSl7Yj1jO2JyZWFrfX1lbHNlIGI9YTstMSE9PWImJnRoaXMuY2hpbGRyZW4uc3BsaWNlKGIsMSl9LGQuWE1MLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVDb3VudD1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpLmxlbmd0aH0sZC5YTUwucHJvdG90eXBlLmxpc3RBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcyl9LGQuWE1MLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGU9ZnVuY3Rpb24oYSl7cmV0dXJuISF0aGlzLmF0dHJpYnV0ZXNbYV19LGQuWE1MLnByb3RvdHlwZS5nZXROdW09ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTnVtYmVyKHRoaXMuYXR0cmlidXRlc1thXSl8fGJ8fDB9LGQuWE1MLnByb3RvdHlwZS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gU3RyaW5nKHRoaXMuYXR0cmlidXRlc1thXSl8fGJ8fG51bGx9LGQuWE1MLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXt0aGlzLmF0dHJpYnV0ZXNbYV0mJih0aGlzLmF0dHJpYnV0ZXNbYV09Yil9LGQuWE1MLnByb3RvdHlwZS5nZXRDb250ZW50PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNvbnRlbnR8fGF8fG51bGx9LGQuWE1MLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKGEpe3RoaXMuY2hpbGRyZW4ubGVuZ3RofHwodGhpcy5jb250ZW50PWEpfSxkLlhNTC5wcm90b3R5cGUuX3NldENvbnQ9ZnVuY3Rpb24oYSl7dmFyIGI7Yj1hLGI9Yi5yZXBsYWNlKC9cXHNcXHMrL2csXCIsXCIpLHRoaXMuY29udGVudD1ifSxkLlhNTC5wcm90b3R5cGUuX3NldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oYSl7dmFyIGI9e30sYz1hLmF0dHJpYnV0ZXM7aWYoYylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXTtiW2Uubm9kZU5hbWVdPWUubm9kZVZhbHVlfXRoaXMuYXR0cmlidXRlcz1ifSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1MTpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGQoYSxiLGMpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIE1hdGguaHlwb3QpcmV0dXJuIE1hdGguaHlwb3QuYXBwbHkobnVsbCxhcmd1bWVudHMpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGU9W10sZj0wLGc9MDtnPGQ7ZysrKXt2YXIgaD1hcmd1bWVudHNbZ11cbjtpZigoaD0raCk9PT0xLzB8fGg9PT0tMS8wKXJldHVybiAxLzA7aD1NYXRoLmFicyhoKSxoPmYmJihmPWgpLGVbZ109aH0wPT09ZiYmKGY9MSk7Zm9yKHZhciBpPTAsaj0wLGs9MDtrPGQ7aysrKXt2YXIgbD1lW2tdL2YsbT1sKmwtaixuPWkrbTtqPW4taS1tLGk9bn1yZXR1cm4gTWF0aC5zcXJ0KGkpKmZ9dmFyIGU9YShcIi4uL2NvcmUvbWFpblwiKTtlLnByb3RvdHlwZS5hYnM9TWF0aC5hYnMsZS5wcm90b3R5cGUuY2VpbD1NYXRoLmNlaWwsZS5wcm90b3R5cGUuY29uc3RyYWluPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29uc3RyYWluXCIsYXJndW1lbnRzKSxNYXRoLm1heChNYXRoLm1pbihhLGMpLGIpfSxlLnByb3RvdHlwZS5kaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcImRpc3RcIixhcmd1bWVudHMpLDQ9PT1hcmd1bWVudHMubGVuZ3RoP2QoYXJndW1lbnRzWzJdLWFyZ3VtZW50c1swXSxhcmd1bWVudHNbM10tYXJndW1lbnRzWzFdKTo2PT09YXJndW1lbnRzLmxlbmd0aD9kKGFyZ3VtZW50c1szXS1hcmd1bWVudHNbMF0sYXJndW1lbnRzWzRdLWFyZ3VtZW50c1sxXSxhcmd1bWVudHNbNV0tYXJndW1lbnRzWzJdKTp2b2lkIDB9LGUucHJvdG90eXBlLmV4cD1NYXRoLmV4cCxlLnByb3RvdHlwZS5mbG9vcj1NYXRoLmZsb29yLGUucHJvdG90eXBlLmxlcnA9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsZXJwXCIsYXJndW1lbnRzKSxjKihiLWEpK2F9LGUucHJvdG90eXBlLmxvZz1NYXRoLmxvZyxlLnByb3RvdHlwZS5tYWc9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWFnXCIsYXJndW1lbnRzKSxkKGEsYil9LGUucHJvdG90eXBlLm1hcD1mdW5jdGlvbihhLGIsYyxkLGYsZyl7ZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibWFwXCIsYXJndW1lbnRzKTt2YXIgaD0oYS1iKS8oYy1iKSooZi1kKStkO3JldHVybiBnP2Q8Zj90aGlzLmNvbnN0cmFpbihoLGQsZik6dGhpcy5jb25zdHJhaW4oaCxmLGQpOmh9LGUucHJvdG90eXBlLm1heD1mdW5jdGlvbigpe3JldHVybiBlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYXhcIixhcmd1bWVudHMpLGFyZ3VtZW50c1swXWluc3RhbmNlb2YgQXJyYXk/TWF0aC5tYXguYXBwbHkobnVsbCxhcmd1bWVudHNbMF0pOk1hdGgubWF4LmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZS5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7cmV0dXJuIGUuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm1pblwiLGFyZ3VtZW50cyksYXJndW1lbnRzWzBdaW5zdGFuY2VvZiBBcnJheT9NYXRoLm1pbi5hcHBseShudWxsLGFyZ3VtZW50c1swXSk6TWF0aC5taW4uYXBwbHkobnVsbCxhcmd1bWVudHMpfSxlLnByb3RvdHlwZS5ub3JtPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibm9ybVwiLGFyZ3VtZW50cyksdGhpcy5tYXAoYSxiLGMsMCwxKX0sZS5wcm90b3R5cGUucG93PU1hdGgucG93LGUucHJvdG90eXBlLnJvdW5kPU1hdGgucm91bmQsZS5wcm90b3R5cGUuc3E9ZnVuY3Rpb24oYSl7cmV0dXJuIGEqYX0sZS5wcm90b3R5cGUuc3FydD1NYXRoLnNxcnQsYi5leHBvcnRzPWV9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmNyZWF0ZVZlY3Rvcj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBkP25ldyBkLlZlY3Rvcih0aGlzLGFyZ3VtZW50cyk6bmV3IGQuVmVjdG9yKGEsYixjKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTM6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZCxlPWEoXCIuLi9jb3JlL21haW5cIiksZj00LGc9MTw8ZixoPTgsaT0xPDxoLGo9NDA5NSxrPTQsbD0uNSxtPWZ1bmN0aW9uKGEpe3JldHVybi41KigxLU1hdGguY29zKGEqTWF0aC5QSSkpfTtlLnByb3RvdHlwZS5ub2lzZT1mdW5jdGlvbihhLGIsYyl7aWYoYj1ifHwwLGM9Y3x8MCxudWxsPT1kKXtkPW5ldyBBcnJheShqKzEpO2Zvcih2YXIgZT0wO2U8aisxO2UrKylkW2VdPU1hdGgucmFuZG9tKCl9YTwwJiYoYT0tYSksYjwwJiYoYj0tYiksYzwwJiYoYz0tYyk7Zm9yKHZhciBuLG8scCxxLHIscz1NYXRoLmZsb29yKGEpLHQ9TWF0aC5mbG9vcihiKSx1PU1hdGguZmxvb3IoYyksdj1hLXMsdz1iLXQseD1jLXUseT0wLHo9LjUsQT0wO0E8aztBKyspe3ZhciBCPXMrKHQ8PGYpKyh1PDxoKTtuPW0odiksbz1tKHcpLHA9ZFtCJmpdLHArPW4qKGRbQisxJmpdLXApLHE9ZFtCK2cmal0scSs9biooZFtCK2crMSZqXS1xKSxwKz1vKihxLXApLEIrPWkscT1kW0Imal0scSs9biooZFtCKzEmal0tcSkscj1kW0IrZyZqXSxyKz1uKihkW0IrZysxJmpdLXIpLHErPW8qKHItcSkscCs9bSh4KSoocS1wKSx5Kz1wKnoseio9bCxzPDw9MSx2Kj0yLHQ8PD0xLHcqPTIsdTw8PTEseCo9Mix2Pj0xJiYocysrLHYtLSksdz49MSYmKHQrKyx3LS0pLHg+PTEmJih1KysseC0tKX1yZXR1cm4geX0sZS5wcm90b3R5cGUubm9pc2VEZXRhaWw9ZnVuY3Rpb24oYSxiKXthPjAmJihrPWEpLGI+MCYmKGw9Yil9LGUucHJvdG90eXBlLm5vaXNlU2VlZD1mdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbigpe3ZhciBhLGIsYz00Mjk0OTY3Mjk2LGQ9MTY2NDUyNSxlPTEwMTM5MDQyMjM7cmV0dXJue3NldFNlZWQ6ZnVuY3Rpb24oZCl7Yj1hPShudWxsPT1kP01hdGgucmFuZG9tKCkqYzpkKT4+PjB9LGdldFNlZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0scmFuZDpmdW5jdGlvbigpe3JldHVybihiPShkKmIrZSklYykvY319fSgpO2Iuc2V0U2VlZChhKSxkPW5ldyBBcnJheShqKzEpO2Zvcih2YXIgYz0wO2M8aisxO2MrKylkW2NdPWIucmFuZCgpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1NDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5WZWN0b3I9ZnVuY3Rpb24oKXt2YXIgYSxiLGM7YXJndW1lbnRzWzBdaW5zdGFuY2VvZiBkPyh0aGlzLnA1PWFyZ3VtZW50c1swXSxhPWFyZ3VtZW50c1sxXVswXXx8MCxiPWFyZ3VtZW50c1sxXVsxXXx8MCxjPWFyZ3VtZW50c1sxXVsyXXx8MCk6KGE9YXJndW1lbnRzWzBdfHwwLGI9YXJndW1lbnRzWzFdfHwwLGM9YXJndW1lbnRzWzJdfHwwKSx0aGlzLng9YSx0aGlzLnk9Yix0aGlzLno9Y30sZC5WZWN0b3IucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJwNS5WZWN0b3IgT2JqZWN0IDogW1wiK3RoaXMueCtcIiwgXCIrdGhpcy55K1wiLCBcIit0aGlzLnorXCJdXCJ9LGQuVmVjdG9yLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KHRoaXMueD1hLnh8fDAsdGhpcy55PWEueXx8MCx0aGlzLno9YS56fHwwLHRoaXMpOmEgaW5zdGFuY2VvZiBBcnJheT8odGhpcy54PWFbMF18fDAsdGhpcy55PWFbMV18fDAsdGhpcy56PWFbMl18fDAsdGhpcyk6KHRoaXMueD1hfHwwLHRoaXMueT1ifHwwLHRoaXMuej1jfHwwLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnA1P25ldyBkLlZlY3Rvcih0aGlzLnA1LFt0aGlzLngsdGhpcy55LHRoaXMuel0pOm5ldyBkLlZlY3Rvcih0aGlzLngsdGhpcy55LHRoaXMueil9LGQuVmVjdG9yLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KHRoaXMueCs9YS54fHwwLHRoaXMueSs9YS55fHwwLHRoaXMueis9YS56fHwwLHRoaXMpOmEgaW5zdGFuY2VvZiBBcnJheT8odGhpcy54Kz1hWzBdfHwwLHRoaXMueSs9YVsxXXx8MCx0aGlzLnorPWFbMl18fDAsdGhpcyk6KHRoaXMueCs9YXx8MCx0aGlzLnkrPWJ8fDAsdGhpcy56Kz1jfHwwLHRoaXMpfSxkLlZlY3Rvci5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyh0aGlzLngtPWEueHx8MCx0aGlzLnktPWEueXx8MCx0aGlzLnotPWEuenx8MCx0aGlzKTphIGluc3RhbmNlb2YgQXJyYXk/KHRoaXMueC09YVswXXx8MCx0aGlzLnktPWFbMV18fDAsdGhpcy56LT1hWzJdfHwwLHRoaXMpOih0aGlzLngtPWF8fDAsdGhpcy55LT1ifHwwLHRoaXMuei09Y3x8MCx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLm11bHQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGEmJmlzRmluaXRlKGEpPyh0aGlzLngqPWEsdGhpcy55Kj1hLHRoaXMueio9YSx0aGlzKTooY29uc29sZS53YXJuKFwicDUuVmVjdG9yLnByb3RvdHlwZS5tdWx0OlwiLFwibiBpcyB1bmRlZmluZWQgb3Igbm90IGEgZmluaXRlIG51bWJlclwiKSx0aGlzKX0sZC5WZWN0b3IucHJvdG90eXBlLmRpdj1mdW5jdGlvbihhKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgYSYmaXNGaW5pdGUoYSk/MD09PWE/KGNvbnNvbGUud2FybihcInA1LlZlY3Rvci5wcm90b3R5cGUuZGl2OlwiLFwiZGl2aWRlIGJ5IDBcIiksdGhpcyk6KHRoaXMueC89YSx0aGlzLnkvPWEsdGhpcy56Lz1hLHRoaXMpOihjb25zb2xlLndhcm4oXCJwNS5WZWN0b3IucHJvdG90eXBlLmRpdjpcIixcIm4gaXMgdW5kZWZpbmVkIG9yIG5vdCBhIGZpbml0ZSBudW1iZXJcIiksdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5tYWc9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMubWFnU3EoKSl9LGQuVmVjdG9yLnByb3RvdHlwZS5tYWdTcT1mdW5jdGlvbigpe3ZhciBhPXRoaXMueCxiPXRoaXMueSxjPXRoaXMuejtyZXR1cm4gYSphK2IqYitjKmN9LGQuVmVjdG9yLnByb3RvdHlwZS5kb3Q9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/dGhpcy5kb3QoYS54LGEueSxhLnopOnRoaXMueCooYXx8MCkrdGhpcy55KihifHwwKSt0aGlzLnoqKGN8fDApfSxkLlZlY3Rvci5wcm90b3R5cGUuY3Jvc3M9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy55KmEuei10aGlzLnoqYS55LGM9dGhpcy56KmEueC10aGlzLngqYS56LGU9dGhpcy54KmEueS10aGlzLnkqYS54O3JldHVybiB0aGlzLnA1P25ldyBkLlZlY3Rvcih0aGlzLnA1LFtiLGMsZV0pOm5ldyBkLlZlY3RvcihiLGMsZSl9LGQuVmVjdG9yLnByb3RvdHlwZS5kaXN0PWZ1bmN0aW9uKGEpe3JldHVybiBhLmNvcHkoKS5zdWIodGhpcykubWFnKCl9LGQuVmVjdG9yLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1hZygpO3JldHVybiAwIT09YSYmdGhpcy5tdWx0KDEvYSksdGhpc30sZC5WZWN0b3IucHJvdG90eXBlLmxpbWl0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubWFnU3EoKTtyZXR1cm4gYj5hKmEmJnRoaXMuZGl2KE1hdGguc3FydChiKSkubXVsdChhKSx0aGlzfSxkLlZlY3Rvci5wcm90b3R5cGUuc2V0TWFnPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHQoYSl9LGQuVmVjdG9yLnByb3RvdHlwZS5oZWFkaW5nPWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5hdGFuMih0aGlzLnksdGhpcy54KTtyZXR1cm4gdGhpcy5wNT90aGlzLnA1Ll9mcm9tUmFkaWFucyhhKTphfSxkLlZlY3Rvci5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaGVhZGluZygpK2E7dGhpcy5wNSYmKGI9dGhpcy5wNS5fdG9SYWRpYW5zKGIpKTt2YXIgYz10aGlzLm1hZygpO3JldHVybiB0aGlzLng9TWF0aC5jb3MoYikqYyx0aGlzLnk9TWF0aC5zaW4oYikqYyx0aGlzfSxkLlZlY3Rvci5wcm90b3R5cGUuYW5nbGVCZXR3ZWVuPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZG90KGEpLyh0aGlzLm1hZygpKmEubWFnKCkpLGM9TWF0aC5hY29zKE1hdGgubWluKDEsTWF0aC5tYXgoLTEsYikpKTtyZXR1cm4gdGhpcy5wNT90aGlzLnA1Ll9mcm9tUmFkaWFucyhjKTpjfSxkLlZlY3Rvci5wcm90b3R5cGUubGVycD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yP3RoaXMubGVycChhLngsYS55LGEueixiKToodGhpcy54Kz0oYS10aGlzLngpKmV8fDAsdGhpcy55Kz0oYi10aGlzLnkpKmV8fDAsdGhpcy56Kz0oYy10aGlzLnopKmV8fDAsdGhpcyl9LGQuVmVjdG9yLnByb3RvdHlwZS5hcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLnh8fDAsdGhpcy55fHwwLHRoaXMuenx8MF19LGQuVmVjdG9yLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlLGYsZztyZXR1cm4gYSBpbnN0YW5jZW9mIGQuVmVjdG9yPyhlPWEueHx8MCxmPWEueXx8MCxnPWEuenx8MCk6YSBpbnN0YW5jZW9mIEFycmF5PyhlPWFbMF18fDAsZj1hWzFdfHwwLGc9YVsyXXx8MCk6KGU9YXx8MCxmPWJ8fDAsZz1jfHwwKSx0aGlzLng9PT1lJiZ0aGlzLnk9PT1mJiZ0aGlzLno9PT1nfSxkLlZlY3Rvci5mcm9tQW5nbGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9MSksbmV3IGQuVmVjdG9yKGIqTWF0aC5jb3MoYSksYipNYXRoLnNpbihhKSwwKX0sZC5WZWN0b3IuZnJvbUFuZ2xlcz1mdW5jdGlvbihhLGIsYyl7dm9pZCAwPT09YyYmKGM9MSk7dmFyIGU9TWF0aC5jb3MoYiksZj1NYXRoLnNpbihiKSxnPU1hdGguY29zKGEpLGg9TWF0aC5zaW4oYSk7cmV0dXJuIG5ldyBkLlZlY3RvcihjKmgqZiwtYypnLGMqaCplKX0sZC5WZWN0b3IucmFuZG9tMkQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tQW5nbGUoTWF0aC5yYW5kb20oKSplLlRXT19QSSl9LGQuVmVjdG9yLnJhbmRvbTNEPWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5yYW5kb20oKSplLlRXT19QSSxiPTIqTWF0aC5yYW5kb20oKS0xLGM9TWF0aC5zcXJ0KDEtYipiKSxmPWMqTWF0aC5jb3MoYSksZz1jKk1hdGguc2luKGEpO3JldHVybiBuZXcgZC5WZWN0b3IoZixnLGIpfSxkLlZlY3Rvci5hZGQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP2Muc2V0KGEpOmM9YS5jb3B5KCksYy5hZGQoYiksY30sZC5WZWN0b3Iuc3ViPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz9jLnNldChhKTpjPWEuY29weSgpLGMuc3ViKGIpLGN9LGQuVmVjdG9yLm11bHQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP2Muc2V0KGEpOmM9YS5jb3B5KCksYy5tdWx0KGIpLGN9LGQuVmVjdG9yLmRpdj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/Yy5zZXQoYSk6Yz1hLmNvcHkoKSxjLmRpdihiKSxjfSxkLlZlY3Rvci5kb3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5kb3QoYil9LGQuVmVjdG9yLmNyb3NzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuY3Jvc3MoYil9LGQuVmVjdG9yLmRpc3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5kaXN0KGIpfSxkLlZlY3Rvci5sZXJwPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBkP2Quc2V0KGEpOmQ9YS5jb3B5KCksZC5sZXJwKGIsYyksZH0sZC5WZWN0b3IubWFnPWZ1bmN0aW9uKGEpe3ZhciBiPWEueCxjPWEueSxkPWEueixlPWIqYitjKmMrZCpkO3JldHVybiBNYXRoLnNxcnQoZSl9LGIuZXhwb3J0cz1kLlZlY3Rvcn0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9ITEsZj0hMSxnPTAsaD1mdW5jdGlvbigpe3ZhciBhLGIsYz00Mjk0OTY3Mjk2LGQ9MTY2NDUyNSxlPTEwMTM5MDQyMjM7cmV0dXJue3NldFNlZWQ6ZnVuY3Rpb24oZCl7Yj1hPShudWxsPT1kP01hdGgucmFuZG9tKCkqYzpkKT4+PjB9LGdldFNlZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0scmFuZDpmdW5jdGlvbigpe3JldHVybihiPShkKmIrZSklYykvY319fSgpO2QucHJvdG90eXBlLnJhbmRvbVNlZWQ9ZnVuY3Rpb24oYSl7aC5zZXRTZWVkKGEpLGU9ITAsZj0hMX0sZC5wcm90b3R5cGUucmFuZG9tPWZ1bmN0aW9uKGEsYil7dmFyIGM7aWYoYz1lP2gucmFuZCgpOk1hdGgucmFuZG9tKCksdm9pZCAwPT09YSlyZXR1cm4gYztpZih2b2lkIDA9PT1iKXJldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YVtNYXRoLmZsb29yKGMqYS5sZW5ndGgpXTpjKmE7aWYoYT5iKXt2YXIgZD1hO2E9YixiPWR9cmV0dXJuIGMqKGItYSkrYX0sZC5wcm90b3R5cGUucmFuZG9tR2F1c3NpYW49ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsaDtpZihmKWM9ZyxmPSExO2Vsc2V7ZG97ZD10aGlzLnJhbmRvbSgyKS0xLGU9dGhpcy5yYW5kb20oMiktMSxoPWQqZCtlKmV9d2hpbGUoaD49MSk7aD1NYXRoLnNxcnQoLTIqTWF0aC5sb2coaCkvaCksYz1kKmgsZz1lKmgsZj0hMH12YXIgaT1hfHwwO3JldHVybiBjKihifHwxKStpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5wcm90b3R5cGUuX2FuZ2xlTW9kZT1lLlJBRElBTlMsZC5wcm90b3R5cGUuYWNvcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hY29zKGEpKX0sZC5wcm90b3R5cGUuYXNpbj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hc2luKGEpKX0sZC5wcm90b3R5cGUuYXRhbj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hdGFuKGEpKX0sZC5wcm90b3R5cGUuYXRhbjI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fZnJvbVJhZGlhbnMoTWF0aC5hdGFuMihhLGIpKX0sZC5wcm90b3R5cGUuY29zPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLmNvcyh0aGlzLl90b1JhZGlhbnMoYSkpfSxkLnByb3RvdHlwZS5zaW49ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguc2luKHRoaXMuX3RvUmFkaWFucyhhKSl9LGQucHJvdG90eXBlLnRhbj1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC50YW4odGhpcy5fdG9SYWRpYW5zKGEpKX0sZC5wcm90b3R5cGUuZGVncmVlcz1mdW5jdGlvbihhKXtyZXR1cm4gYSplLlJBRF9UT19ERUd9LGQucHJvdG90eXBlLnJhZGlhbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEqZS5ERUdfVE9fUkFEfSxkLnByb3RvdHlwZS5hbmdsZU1vZGU9ZnVuY3Rpb24oYSl7YSE9PWUuREVHUkVFUyYmYSE9PWUuUkFESUFOU3x8KHRoaXMuX2FuZ2xlTW9kZT1hKX0sZC5wcm90b3R5cGUuX3RvUmFkaWFucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fYW5nbGVNb2RlPT09ZS5ERUdSRUVTP2EqZS5ERUdfVE9fUkFEOmF9LGQucHJvdG90eXBlLl90b0RlZ3JlZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2FuZ2xlTW9kZT09PWUuUkFESUFOUz9hKmUuUkFEX1RPX0RFRzphfSxkLnByb3RvdHlwZS5fZnJvbVJhZGlhbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2FuZ2xlTW9kZT09PWUuREVHUkVFUz9hKmUuUkFEX1RPX0RFRzphfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNTc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLnRleHRBbGlnbj1mdW5jdGlvbihhLGIpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0QWxpZ25cIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRBbGlnbi5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0TGVhZGluZz1mdW5jdGlvbihhKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dExlYWRpbmdcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRMZWFkaW5nLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRTaXplPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0U2l6ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dFNpemUuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKX0sZC5wcm90b3R5cGUudGV4dFN0eWxlPWZ1bmN0aW9uKGEpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0U3R5bGVcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLnRleHRTdHlsZS5hcHBseSh0aGlzLl9yZW5kZXJlcixhcmd1bWVudHMpfSxkLnByb3RvdHlwZS50ZXh0V2lkdGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRXaWR0aFwiLGFyZ3VtZW50cyksMD09PWEubGVuZ3RoPzA6dGhpcy5fcmVuZGVyZXIudGV4dFdpZHRoLmFwcGx5KHRoaXMuX3JlbmRlcmVyLGFyZ3VtZW50cyl9LGQucHJvdG90eXBlLnRleHRBc2NlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dEFzY2VudFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dEFzY2VudCgpfSxkLnByb3RvdHlwZS50ZXh0RGVzY2VudD1mdW5jdGlvbigpe3JldHVybiBkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0ZXh0RGVzY2VudFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIudGV4dERlc2NlbnQoKX0sZC5wcm90b3R5cGUuX3VwZGF0ZVRleHRNZXRyaWNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLl91cGRhdGVUZXh0TWV0cmljcygpfSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw1ODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIiksZj1hKFwib3BlbnR5cGUuanNcIik7YShcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiKSxkLnByb3RvdHlwZS5sb2FkRm9udD1mdW5jdGlvbihhLGIsYyl7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZEZvbnRcIixhcmd1bWVudHMpO3ZhciBlPW5ldyBkLkZvbnQodGhpcyksZz10aGlzO3JldHVybiBmLmxvYWQoYSxmdW5jdGlvbihmLGgpe2lmKGYpcmV0dXJuIHZvaWQgMCE9PWM/YyhmKTooZC5fZnJpZW5kbHlGaWxlTG9hZEVycm9yKDQsYSksdm9pZCBjb25zb2xlLmVycm9yKGYsYSkpO2UuZm9udD1oLHZvaWQgMCE9PWImJmIoZSksZy5fZGVjcmVtZW50UHJlbG9hZCgpO3ZhciBpLGosaz1bXCJ0dGZcIixcIm90ZlwiLFwid29mZlwiLFwid29mZjJcIl0sbD1hLnNwbGl0KFwiXFxcXFwiKS5wb3AoKS5zcGxpdChcIi9cIikucG9wKCksbT1sLmxhc3RJbmRleE9mKFwiLlwiKSxuPW08MT9udWxsOmwuc3Vic3RyKG0rMSk7ay5pbmRleE9mKG4pPi0xJiYoaT1sLnN1YnN0cigwLG0pLGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpLGouYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcXG5AZm9udC1mYWNlIHtcXG5mb250LWZhbWlseTogXCIraStcIjtcXG5zcmM6IHVybChcIithK1wiKTtcXG59XFxuXCIpKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGopKX0pLGV9LGQucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24oYSxiLGMsZSxmKXtyZXR1cm4gZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dFwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2RvRmlsbHx8dGhpcy5fcmVuZGVyZXIuX2RvU3Ryb2tlP3RoaXMuX3JlbmRlcmVyLnRleHQuYXBwbHkodGhpcy5fcmVuZGVyZXIsYXJndW1lbnRzKTp0aGlzfSxkLnByb3RvdHlwZS50ZXh0Rm9udD1mdW5jdGlvbihhLGIpe2lmKGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInRleHRGb250XCIsYXJndW1lbnRzKSxhcmd1bWVudHMubGVuZ3RoKXtpZighYSl0aHJvdyBuZXcgRXJyb3IoXCJudWxsIGZvbnQgcGFzc2VkIHRvIHRleHRGb250XCIpO3JldHVybiB0aGlzLl9yZW5kZXJlci5fc2V0UHJvcGVydHkoXCJfdGV4dEZvbnRcIixhKSxiJiYodGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX3RleHRTaXplXCIsYiksdGhpcy5fcmVuZGVyZXIuX3NldFByb3BlcnR5KFwiX3RleHRMZWFkaW5nXCIsYiplLl9ERUZBVUxUX0xFQURNVUxUKSksdGhpcy5fcmVuZGVyZXIuX2FwcGx5VGV4dFByb3BlcnRpZXMoKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuX3RleHRGb250fSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjQsXCJvcGVudHlwZS5qc1wiOjEwfV0sNTk6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7Zm9yKHZhciBjPWgoYix7c2FtcGxlRmFjdG9yOi4xLHNpbXBsaWZ5VGhyZXNob2xkOjB9KSxkPW4oYSwwLDEpLGY9ZC8oZCpjLnNhbXBsZUZhY3RvciksZz1bXSxpPTA7aTxkO2krPWYpZy5wdXNoKG4oYSxpKSk7cmV0dXJuIGMuc2ltcGxpZnlUaHJlc2hvbGQmJmUoZyxjLnNpbXBsaWZ5VGhyZXNob2xkKSxnfWZ1bmN0aW9uIGUoYSxiKXtiPXZvaWQgMD09PWI/MDpiO2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGgtMTthLmxlbmd0aD4zJiZkPj0wOy0tZClqKGkoYSxkLTEpLGkoYSxkKSxpKGEsZCsxKSxiKSYmKGEuc3BsaWNlKGQlYS5sZW5ndGgsMSksYysrKTtyZXR1cm4gY31mdW5jdGlvbiBmKGEpe2Zvcih2YXIgYixjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrKylcIk1cIj09PWFbZF0udHlwZSYmKGImJmMucHVzaChiKSxiPVtdKSxiLnB1c2goZyhhW2RdKSk7cmV0dXJuIGMucHVzaChiKSxjfWZ1bmN0aW9uIGcoYSl7dmFyIGI9W2EudHlwZV07cmV0dXJuXCJNXCI9PT1hLnR5cGV8fFwiTFwiPT09YS50eXBlP2IucHVzaChhLngsYS55KTpcIkNcIj09PWEudHlwZT9iLnB1c2goYS54MSxhLnkxLGEueDIsYS55MixhLngsYS55KTpcIlFcIj09PWEudHlwZSYmYi5wdXNoKGEueDEsYS55MSxhLngsYS55KSxifWZ1bmN0aW9uIGgoYSxiKXtpZihcIm9iamVjdFwiIT10eXBlb2YgYSlhPWI7ZWxzZSBmb3IodmFyIGMgaW4gYil2b2lkIDA9PT1hW2NdJiYoYVtjXT1iW2NdKTtyZXR1cm4gYX1mdW5jdGlvbiBpKGEsYil7dmFyIGM9YS5sZW5ndGg7cmV0dXJuIGFbYjwwP2IlYytjOmIlY119ZnVuY3Rpb24gaihhLGIsYyxkKXtpZighZClyZXR1cm4gMD09PWsoYSxiLGMpO3ZvaWQgMD09PWoudG1wUG9pbnQxJiYoai50bXBQb2ludDE9W10sai50bXBQb2ludDI9W10pO3ZhciBlPWoudG1wUG9pbnQxLGY9ai50bXBQb2ludDI7ZS54PWIueC1hLngsZS55PWIueS1hLnksZi54PWMueC1iLngsZi55PWMueS1iLnk7dmFyIGc9ZS54KmYueCtlLnkqZi55LGg9TWF0aC5zcXJ0KGUueCplLngrZS55KmUueSksaT1NYXRoLnNxcnQoZi54KmYueCtmLnkqZi55KTtyZXR1cm4gTWF0aC5hY29zKGcvKGgqaSkpPGR9ZnVuY3Rpb24gayhhLGIsYyl7cmV0dXJuKGJbMF0tYVswXSkqKGNbMV0tYVsxXSktKGNbMF0tYVswXSkqKGJbMV0tYVsxXSl9ZnVuY3Rpb24gbChhLGIsYyxkLGUsZixnLGgsaSl7dmFyIGo9MS1pLGs9TWF0aC5wb3coaiwzKSxsPU1hdGgucG93KGosMiksbT1pKmksbj1tKmksbz1rKmErMypsKmkqYyszKmoqaSppKmUrbipnLHA9aypiKzMqbCppKmQrMypqKmkqaSpmK24qaCxxPWErMippKihjLWEpK20qKGUtMipjK2EpLHI9YisyKmkqKGQtYikrbSooZi0yKmQrYikscz1jKzIqaSooZS1jKSttKihnLTIqZStjKSx0PWQrMippKihmLWQpK20qKGgtMipmK2QpLHU9aiphK2kqYyx2PWoqYitpKmQsdz1qKmUraSpnLHg9aipmK2kqaCx5PTkwLTE4MCpNYXRoLmF0YW4yKHEtcyxyLXQpL01hdGguUEk7cmV0dXJuKHE+c3x8cjx0KSYmKHkrPTE4MCkse3g6byx5OnAsbTp7eDpxLHk6cn0sbjp7eDpzLHk6dH0sc3RhcnQ6e3g6dSx5OnZ9LGVuZDp7eDp3LHk6eH0sYWxwaGE6eX19ZnVuY3Rpb24gbShhLGIsYyxkLGUsZixnLGgsaSl7cmV0dXJuIG51bGw9PWk/dShhLGIsYyxkLGUsZixnLGgpOmwoYSxiLGMsZCxlLGYsZyxoLHYoYSxiLGMsZCxlLGYsZyxoLGkpKX1mdW5jdGlvbiBuKGEsYixjKXthPXAoYSk7Zm9yKHZhciBkLGUsZixnLGgsaT1cIlwiLGo9e30saz0wLG49MCxvPWEubGVuZ3RoO248bztuKyspe2lmKGY9YVtuXSxcIk1cIj09PWZbMF0pZD0rZlsxXSxlPStmWzJdO2Vsc2V7aWYoZz1tKGQsZSxmWzFdLGZbMl0sZlszXSxmWzRdLGZbNV0sZls2XSksaytnPmImJiFjKXJldHVybiBoPW0oZCxlLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSxmWzZdLGItaykse3g6aC54LHk6aC55LGFscGhhOmguYWxwaGF9O2srPWcsZD0rZls1XSxlPStmWzZdfWkrPWYuc2hpZnQoKStmfXJldHVybiBqLmVuZD1pLGg9Yz9rOmwoZCxlLGZbMF0sZlsxXSxmWzJdLGZbM10sZls0XSxmWzVdLDEpLGguYWxwaGEmJihoPXt4OmgueCx5OmgueSxhbHBoYTpoLmFscGhhfSksaH1mdW5jdGlvbiBvKGEpe3ZhciBiPVtdLGM9MCxkPTAsZT0wLGY9MCxnPTA7aWYoIWEpcmV0dXJuIGI7XCJNXCI9PT1hWzBdWzBdJiYoYz0rYVswXVsxXSxkPSthWzBdWzJdLGU9YyxmPWQsZysrLGJbMF09W1wiTVwiLGMsZF0pO2Zvcih2YXIgaCxpLGosaz0zPT09YS5sZW5ndGgmJlwiTVwiPT09YVswXVswXSYmXCJSXCI9PT1hWzFdWzBdLnRvVXBwZXJDYXNlKCkmJlwiWlwiPT09YVsyXVswXS50b1VwcGVyQ2FzZSgpLGw9ZyxtPWEubGVuZ3RoO2w8bTtsKyspe2lmKGIucHVzaChpPVtdKSxqPWFbbF0salswXSE9PVN0cmluZy5wcm90b3R5cGUudG9VcHBlckNhc2UuY2FsbChqWzBdKSlzd2l0Y2goaVswXT1TdHJpbmcucHJvdG90eXBlLnRvVXBwZXJDYXNlLmNhbGwoalswXSksaVswXSl7Y2FzZVwiQVwiOmlbMV09alsxXSxpWzJdPWpbMl0saVszXT1qWzNdLGlbNF09als0XSxpWzVdPWpbNV0saVs2XT0rKGpbNl0rYyksaVs3XT0rKGpbN10rZCk7YnJlYWs7Y2FzZVwiVlwiOmlbMV09K2pbMV0rZDticmVhaztjYXNlXCJIXCI6aVsxXT0ralsxXStjO2JyZWFrO2Nhc2VcIlJcIjpoPVtjLGRdLmNvbmNhdChqLnNsaWNlKDEpKTtmb3IodmFyIG49MixvPWgubGVuZ3RoO248bztuKyspaFtuXT0raFtuXStjLGhbKytuXT0raFtuXStkO2IucG9wKCksYj1iLmNvbmNhdChyKGgsaykpO2JyZWFrO2Nhc2VcIk1cIjplPStqWzFdK2MsZj0ralsyXStkO2JyZWFrO2RlZmF1bHQ6Zm9yKG49MSxvPWoubGVuZ3RoO248bztuKyspaVtuXT0raltuXSsobiUyP2M6ZCl9ZWxzZSBpZihcIlJcIj09PWpbMF0paD1bYyxkXS5jb25jYXQoai5zbGljZSgxKSksYi5wb3AoKSxiPWIuY29uY2F0KHIoaCxrKSksaT1bXCJSXCJdLmNvbmNhdChqLnNsaWNlKC0yKSk7ZWxzZSBmb3IodmFyIHA9MCxxPWoubGVuZ3RoO3A8cTtwKyspaVtwXT1qW3BdO3N3aXRjaChpWzBdKXtjYXNlXCJaXCI6Yz1lLGQ9ZjticmVhaztjYXNlXCJIXCI6Yz1pWzFdO2JyZWFrO2Nhc2VcIlZcIjpkPWlbMV07YnJlYWs7Y2FzZVwiTVwiOmU9aVtpLmxlbmd0aC0yXSxmPWlbaS5sZW5ndGgtMV07YnJlYWs7ZGVmYXVsdDpjPWlbaS5sZW5ndGgtMl0sZD1pW2kubGVuZ3RoLTFdfX1yZXR1cm4gYn1mdW5jdGlvbiBwKGEsYil7dmFyIGMsZD1vKGEpLGU9YiYmbyhiKSxmPXt4OjAseTowLGJ4OjAsYnk6MCxYOjAsWTowLHF4Om51bGwscXk6bnVsbH0sZz17eDowLHk6MCxieDowLGJ5OjAsWDowLFk6MCxxeDpudWxsLHF5Om51bGx9LGg9W10saT1bXSxqPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9e1Q6MSxROjF9O2lmKCFhKXJldHVybltcIkNcIixiLngsYi55LGIueCxiLnksYi54LGIueV07c3dpdGNoKGFbMF1pbiBmfHwoYi5xeD1iLnF5PW51bGwpLGFbMF0pe2Nhc2VcIk1cIjpiLlg9YVsxXSxiLlk9YVsyXTticmVhaztjYXNlXCJBXCI6YT1bXCJDXCJdLmNvbmNhdChxLmFwcGx5KDAsW2IueCxiLnldLmNvbmNhdChhLnNsaWNlKDEpKSkpO2JyZWFrO2Nhc2VcIlNcIjpcIkNcIj09PWN8fFwiU1wiPT09Yz8oZD0yKmIueC1iLmJ4LGU9MipiLnktYi5ieSk6KGQ9Yi54LGU9Yi55KSxhPVtcIkNcIixkLGVdLmNvbmNhdChhLnNsaWNlKDEpKTticmVhaztjYXNlXCJUXCI6XCJRXCI9PT1jfHxcIlRcIj09PWM/KGIucXg9MipiLngtYi5xeCxiLnF5PTIqYi55LWIucXkpOihiLnF4PWIueCxiLnF5PWIueSksYT1bXCJDXCJdLmNvbmNhdCh0KGIueCxiLnksYi5xeCxiLnF5LGFbMV0sYVsyXSkpO2JyZWFrO2Nhc2VcIlFcIjpiLnF4PWFbMV0sYi5xeT1hWzJdLGE9W1wiQ1wiXS5jb25jYXQodChiLngsYi55LGFbMV0sYVsyXSxhWzNdLGFbNF0pKTticmVhaztjYXNlXCJMXCI6YT1bXCJDXCJdLmNvbmNhdChzKGIueCxiLnksYVsxXSxhWzJdKSk7YnJlYWs7Y2FzZVwiSFwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGFbMV0sYi55KSk7YnJlYWs7Y2FzZVwiVlwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGIueCxhWzFdKSk7YnJlYWs7Y2FzZVwiWlwiOmE9W1wiQ1wiXS5jb25jYXQocyhiLngsYi55LGIuWCxiLlkpKX1yZXR1cm4gYX0saz1mdW5jdGlvbihhLGIpe2lmKGFbYl0ubGVuZ3RoPjcpe2FbYl0uc2hpZnQoKTtmb3IodmFyIGY9YVtiXTtmLmxlbmd0aDspaFtiXT1cIkFcIixlJiYoaVtiXT1cIkFcIiksYS5zcGxpY2UoYisrLDAsW1wiQ1wiXS5jb25jYXQoZi5zcGxpY2UoMCw2KSkpO2Euc3BsaWNlKGIsMSksYz1NYXRoLm1heChkLmxlbmd0aCxlJiZlLmxlbmd0aHx8MCl9fSxsPWZ1bmN0aW9uKGEsYixmLGcsaCl7YSYmYiYmXCJNXCI9PT1hW2hdWzBdJiZcIk1cIiE9PWJbaF1bMF0mJihiLnNwbGljZShoLDAsW1wiTVwiLGcueCxnLnldKSxmLmJ4PTAsZi5ieT0wLGYueD1hW2hdWzFdLGYueT1hW2hdWzJdLGM9TWF0aC5tYXgoZC5sZW5ndGgsZSYmZS5sZW5ndGh8fDApKX0sbT1cIlwiLG49XCJcIjtjPU1hdGgubWF4KGQubGVuZ3RoLGUmJmUubGVuZ3RofHwwKTtmb3IodmFyIHA9MDtwPGM7cCsrKXtkW3BdJiYobT1kW3BdWzBdKSxcIkNcIiE9PW0mJihoW3BdPW0scCYmKG49aFtwLTFdKSksZFtwXT1qKGRbcF0sZixuKSxcIkFcIiE9PWhbcF0mJlwiQ1wiPT09bSYmKGhbcF09XCJDXCIpLGsoZCxwKSxlJiYoZVtwXSYmKG09ZVtwXVswXSksXCJDXCIhPT1tJiYoaVtwXT1tLHAmJihuPWlbcC0xXSkpLGVbcF09aihlW3BdLGcsbiksXCJBXCIhPT1pW3BdJiZcIkNcIj09PW0mJihpW3BdPVwiQ1wiKSxrKGUscCkpLGwoZCxlLGYsZyxwKSxsKGUsZCxnLGYscCk7dmFyIHI9ZFtwXSx1PWUmJmVbcF0sdj1yLmxlbmd0aCx3PWUmJnUubGVuZ3RoO2YueD1yW3YtMl0sZi55PXJbdi0xXSxmLmJ4PXBhcnNlRmxvYXQoclt2LTRdKXx8Zi54LGYuYnk9cGFyc2VGbG9hdChyW3YtM10pfHxmLnksZy5ieD1lJiYocGFyc2VGbG9hdCh1W3ctNF0pfHxnLngpLGcuYnk9ZSYmKHBhcnNlRmxvYXQodVt3LTNdKXx8Zy55KSxnLng9ZSYmdVt3LTJdLGcueT1lJiZ1W3ctMV19cmV0dXJuIGU/W2QsZV06ZH1mdW5jdGlvbiBxKGEsYixjLGQsZSxmLGcsaCxpLGope3ZhciBrLGwsbSxuLG8scD1NYXRoLlBJLHI9MTIwKnAvMTgwLHM9cC8xODAqKCtlfHwwKSx0PVtdLHU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybnt4OmEqTWF0aC5jb3MoYyktYipNYXRoLnNpbihjKSx5OmEqTWF0aC5zaW4oYykrYipNYXRoLmNvcyhjKX19O2lmKGopaz1qWzBdLGw9alsxXSxtPWpbMl0sbj1qWzNdO2Vsc2V7bz11KGEsYiwtcyksYT1vLngsYj1vLnksbz11KGgsaSwtcyksaD1vLngsaT1vLnk7dmFyIHY9KGEtaCkvMix3PShiLWkpLzIseD12KnYvKGMqYykrdyp3LyhkKmQpO3g+MSYmKHg9TWF0aC5zcXJ0KHgpLGMqPXgsZCo9eCk7dmFyIHk9YypjLHo9ZCpkLEE9KGY9PT1nPy0xOjEpKk1hdGguc3FydChNYXRoLmFicygoeSp6LXkqdyp3LXoqdip2KS8oeSp3Kncreip2KnYpKSk7bT1BKmMqdy9kKyhhK2gpLzIsbj1BKi1kKnYvYysoYitpKS8yLGs9TWF0aC5hc2luKCgoYi1uKS9kKS50b0ZpeGVkKDkpKSxsPU1hdGguYXNpbigoKGktbikvZCkudG9GaXhlZCg5KSksaz1hPG0/cC1rOmssbD1oPG0/cC1sOmwsazwwJiYoaz0yKnArayksbDwwJiYobD0yKnArbCksZyYmaz5sJiYoay09MipwKSwhZyYmbD5rJiYobC09MipwKX12YXIgQj1sLWs7aWYoTWF0aC5hYnMoQik+cil7dmFyIEM9bCxEPWgsRT1pO2w9aytyKihnJiZsPms/MTotMSksaD1tK2MqTWF0aC5jb3MobCksaT1uK2QqTWF0aC5zaW4obCksdD1xKGgsaSxjLGQsZSwwLGcsRCxFLFtsLEMsbSxuXSl9Qj1sLWs7dmFyIEY9TWF0aC5jb3MoayksRz1NYXRoLnNpbihrKSxIPU1hdGguY29zKGwpLEk9TWF0aC5zaW4obCksSj1NYXRoLnRhbihCLzQpLEs9NC8zKmMqSixMPTQvMypkKkosTT1bYSxiXSxOPVthK0sqRyxiLUwqRl0sTz1baCtLKkksaS1MKkhdLFA9W2gsaV07aWYoTlswXT0yKk1bMF0tTlswXSxOWzFdPTIqTVsxXS1OWzFdLGopcmV0dXJuW04sTyxQXS5jb25jYXQodCk7dD1bTixPLFBdLmNvbmNhdCh0KS5qb2luKCkuc3BsaXQoXCIsXCIpO2Zvcih2YXIgUT1bXSxSPTAsUz10Lmxlbmd0aDtSPFM7UisrKVFbUl09UiUyP3UodFtSLTFdLHRbUl0scykueTp1KHRbUl0sdFtSKzFdLHMpLng7cmV0dXJuIFF9ZnVuY3Rpb24gcihhLGIpe2Zvcih2YXIgYz1bXSxkPTAsZT1hLmxlbmd0aDtlLTIqIWI+ZDtkKz0yKXt2YXIgZj1be3g6K2FbZC0yXSx5OithW2QtMV19LHt4OithW2RdLHk6K2FbZCsxXX0se3g6K2FbZCsyXSx5OithW2QrM119LHt4OithW2QrNF0seTorYVtkKzVdfV07Yj9kP2UtND09PWQ/ZlszXT17eDorYVswXSx5OithWzFdfTplLTI9PT1kJiYoZlsyXT17eDorYVswXSx5OithWzFdfSxmWzNdPXt4OithWzJdLHk6K2FbM119KTpmWzBdPXt4OithW2UtMl0seTorYVtlLTFdfTplLTQ9PT1kP2ZbM109ZlsyXTpkfHwoZlswXT17eDorYVtkXSx5OithW2QrMV19KSxjLnB1c2goW1wiQ1wiLCgtZlswXS54KzYqZlsxXS54K2ZbMl0ueCkvNiwoLWZbMF0ueSs2KmZbMV0ueStmWzJdLnkpLzYsKGZbMV0ueCs2KmZbMl0ueC1mWzNdLngpLzYsKGZbMV0ueSs2KmZbMl0ueS1mWzNdLnkpLzYsZlsyXS54LGZbMl0ueV0pfXJldHVybiBjfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuW2EsYixjLGQsYyxkXX1mdW5jdGlvbiB0KGEsYixjLGQsZSxmKXt2YXIgZz0xLzMsaD0yLzM7cmV0dXJuW2cqYStoKmMsZypiK2gqZCxnKmUraCpjLGcqZitoKmQsZSxmXX1mdW5jdGlvbiB1KGEsYixjLGQsZSxmLGcsaCxpKXtudWxsPT1pJiYoaT0xKSxpPWk+MT8xOmk8MD8wOmk7Zm9yKHZhciBqPWkvMixrPTEyLGw9Wy0uMTI1MiwuMTI1MiwtLjM2NzgsLjM2NzgsLS41ODczLC41ODczLC0uNzY5OSwuNzY5OSwtLjkwNDEsLjkwNDEsLS45ODE2LC45ODE2XSxtPTAsbj1bLjI0OTEsLjI0OTEsLjIzMzUsLjIzMzUsLjIwMzIsLjIwMzIsLjE2MDEsLjE2MDEsLjEwNjksLjEwNjksLjA0NzIsLjA0NzJdLG89MDtvPGs7bysrKXt2YXIgcD1qKmxbb10raixxPXcocCxhLGMsZSxnKSxyPXcocCxiLGQsZixoKSxzPXEqcStyKnI7bSs9bltvXSpNYXRoLnNxcnQocyl9cmV0dXJuIGoqbX1mdW5jdGlvbiB2KGEsYixjLGQsZSxmLGcsaCxpKXtpZighKGk8MHx8dShhLGIsYyxkLGUsZixnLGgpPGkpKXt2YXIgaixrPTEsbD1rLzIsbT1rLWwsbj0uMDE7Zm9yKGo9dShhLGIsYyxkLGUsZixnLGgsbSk7TWF0aC5hYnMoai1pKT5uOylsLz0yLG0rPShqPGk/MTotMSkqbCxqPXUoYSxiLGMsZCxlLGYsZyxoLG0pO3JldHVybiBtfX1mdW5jdGlvbiB3KGEsYixjLGQsZSl7cmV0dXJuIGEqKGEqKC0zKmIrOSpjLTkqZCszKmUpKzYqYi0xMipjKzYqZCktMypiKzMqY31mdW5jdGlvbiB4KCl7Zm9yKHZhciBhPVwiXCIsYj1hcmd1bWVudHMubGVuZ3RoLTE7Yj49MDstLWIpe3ZhciBjPWFyZ3VtZW50c1tiXTthKz1jPT09T2JqZWN0KGMpP0pTT04uc3RyaW5naWZ5KGMpOmN9cmV0dXJuIGF9dmFyIHk9YShcIi4uL2NvcmUvbWFpblwiKSx6PWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTt5LkZvbnQ9ZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnQ9YSx0aGlzLmNhY2hlPXt9LHRoaXMuZm9udD12b2lkIDB9LHkuRm9udC5wcm90b3R5cGUubGlzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIm5vdCB5ZXQgaW1wbGVtZW50ZWRcIil9LHkuRm9udC5wcm90b3R5cGUudGV4dEJvdW5kcz1mdW5jdGlvbihhLGIsYyxkLGUpe2I9dm9pZCAwIT09Yj9iOjAsYz12b2lkIDAhPT1jP2M6MCxkPWR8fHRoaXMucGFyZW50Ll9yZW5kZXJlci5fdGV4dFNpemU7dmFyIGY9ZSYmZS5yZW5kZXJlciYmZS5yZW5kZXJlci5fcEluc3R8fHRoaXMucGFyZW50LGc9Zi5fcmVuZGVyZXIsaD1nLl90ZXh0QWxpZ258fHouTEVGVCxpPWcuX3RleHRCYXNlbGluZXx8ei5CQVNFTElORSxqPXgoXCJ0ZXh0Qm91bmRzXCIsYSxiLGMsZCxoLGkpLGs9dGhpcy5jYWNoZVtqXTtpZighayl7dmFyIGwsbSxuLG8scCxxPVtdLHI9W10scz10aGlzLl9zY2FsZShkKTt0aGlzLmZvbnQuZm9yRWFjaEdseXBoKGEsYixjLGQsZSxmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1hLmdldE1ldHJpY3MoKTtxLnB1c2goYitlLnhNaW4qcykscS5wdXNoKGIrZS54TWF4KnMpLHIucHVzaChjKy1lLnlNaW4qcyksci5wdXNoKGMrLWUueU1heCpzKX0pLGw9TWF0aC5taW4uYXBwbHkobnVsbCxxKSxtPU1hdGgubWluLmFwcGx5KG51bGwsciksbj1NYXRoLm1heC5hcHBseShudWxsLHEpLG89TWF0aC5tYXguYXBwbHkobnVsbCxyKSxrPXt4OmwseTptLGg6by1tLHc6bi1sLGFkdmFuY2U6bC1ifSxwPXRoaXMuX2hhbmRsZUFsaWdubWVudChnLGEsay54LGsueSxrLncray5hZHZhbmNlKSxrLng9cC54LGsueT1wLnksdGhpcy5jYWNoZVt4KFwidGV4dEJvdW5kc1wiLGEsYixjLGQsaCxpKV09a31yZXR1cm4ga30seS5Gb250LnByb3RvdHlwZS50ZXh0VG9Qb2ludHM9ZnVuY3Rpb24oYSxiLGMsZSxnKXtmdW5jdGlvbiBoKGIpe3JldHVybiBrW2JdLm5hbWUmJlwic3BhY2VcIj09PWtbYl0ubmFtZXx8YS5sZW5ndGg9PT1rLmxlbmd0aCYmXCIgXCI9PT1hW2JdfHxrW2JdLmluZGV4JiYzPT09a1tiXS5pbmRleH12YXIgaT0wLGo9W10saz10aGlzLl9nZXRHbHlwaHMoYSk7ZT1lfHx0aGlzLnBhcmVudC5fcmVuZGVyZXIuX3RleHRTaXplO2Zvcih2YXIgbD0wO2w8ay5sZW5ndGg7bCsrKXtpZighaChsKSlmb3IodmFyIG09a1tsXS5nZXRQYXRoKGIsYyxlKSxuPWYobS5jb21tYW5kcyksbz0wO288bi5sZW5ndGg7bysrKWZvcih2YXIgcD1kKG5bb10sZykscT0wO3E8cC5sZW5ndGg7cSsrKXBbcV0ueCs9aSxqLnB1c2gocFtxXSk7aSs9a1tsXS5hZHZhbmNlV2lkdGgqdGhpcy5fc2NhbGUoZSl9cmV0dXJuIGp9LHkuRm9udC5wcm90b3R5cGUuX2dldEdseXBocz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5mb250LnN0cmluZ1RvR2x5cGhzKGEpfSx5LkZvbnQucHJvdG90eXBlLl9nZXRQYXRoPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWQmJmQucmVuZGVyZXImJmQucmVuZGVyZXIuX3BJbnN0fHx0aGlzLnBhcmVudCxmPWUuX3JlbmRlcmVyLGc9dGhpcy5faGFuZGxlQWxpZ25tZW50KGYsYSxiLGMpO3JldHVybiB0aGlzLmZvbnQuZ2V0UGF0aChhLGcueCxnLnksZi5fdGV4dFNpemUsZCl9LHkuRm9udC5wcm90b3R5cGUuX2dldFBhdGhEYXRhPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPTM7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGEmJmFyZ3VtZW50cy5sZW5ndGg+Mj9hPXRoaXMuX2dldFBhdGgoYSxiLGMsZCk6XCJvYmplY3RcIj09dHlwZW9mIGImJihkPWIpLGQmJlwibnVtYmVyXCI9PXR5cGVvZiBkLmRlY2ltYWxzJiYoZT1kLmRlY2ltYWxzKSxhLnRvUGF0aERhdGEoZSl9LHkuRm9udC5wcm90b3R5cGUuX2dldFNWRz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0zO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhJiZhcmd1bWVudHMubGVuZ3RoPjI/YT10aGlzLl9nZXRQYXRoKGEsYixjLGQpOlwib2JqZWN0XCI9PXR5cGVvZiBiJiYoZD1iKSxkJiYoXCJudW1iZXJcIj09dHlwZW9mIGQuZGVjaW1hbHMmJihlPWQuZGVjaW1hbHMpLFwibnVtYmVyXCI9PXR5cGVvZiBkLnN0cm9rZVdpZHRoJiYoYS5zdHJva2VXaWR0aD1kLnN0cm9rZVdpZHRoKSx2b2lkIDAhPT1kLmZpbGwmJihhLmZpbGw9ZC5maWxsKSx2b2lkIDAhPT1kLnN0cm9rZSYmKGEuc3Ryb2tlPWQuc3Ryb2tlKSksYS50b1NWRyhlKX0seS5Gb250LnByb3RvdHlwZS5fcmVuZGVyUGF0aD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmPWQmJmQucmVuZGVyZXJ8fHRoaXMucGFyZW50Ll9yZW5kZXJlcixnPWYuZHJhd2luZ0NvbnRleHQ7ZT1cIm9iamVjdFwiPT10eXBlb2YgYSYmYS5jb21tYW5kcz9hLmNvbW1hbmRzOnRoaXMuX2dldFBhdGgoYSxiLGMsZCkuY29tbWFuZHMsZy5iZWdpblBhdGgoKTtmb3IodmFyIGg9MDtoPGUubGVuZ3RoO2grPTEpe3ZhciBpPWVbaF07XCJNXCI9PT1pLnR5cGU/Zy5tb3ZlVG8oaS54LGkueSk6XCJMXCI9PT1pLnR5cGU/Zy5saW5lVG8oaS54LGkueSk6XCJDXCI9PT1pLnR5cGU/Zy5iZXppZXJDdXJ2ZVRvKGkueDEsaS55MSxpLngyLGkueTIsaS54LGkueSk6XCJRXCI9PT1pLnR5cGU/Zy5xdWFkcmF0aWNDdXJ2ZVRvKGkueDEsaS55MSxpLngsaS55KTpcIlpcIj09PWkudHlwZSYmZy5jbG9zZVBhdGgoKX1yZXR1cm4gZi5fZG9TdHJva2UmJmYuX3N0cm9rZVNldCYmZy5zdHJva2UoKSxmLl9kb0ZpbGwmJihmLl9maWxsU2V0fHxmLl9zZXRGaWxsKHouX0RFRkFVTFRfVEVYVF9GSUxMKSxnLmZpbGwoKSksdGhpc30seS5Gb250LnByb3RvdHlwZS5fdGV4dFdpZHRoPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZm9udC5nZXRBZHZhbmNlV2lkdGgoYSxiKX0seS5Gb250LnByb3RvdHlwZS5fdGV4dEFzY2VudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5mb250LmFzY2VuZGVyKnRoaXMuX3NjYWxlKGEpfSx5LkZvbnQucHJvdG90eXBlLl90ZXh0RGVzY2VudD1mdW5jdGlvbihhKXtyZXR1cm4tdGhpcy5mb250LmRlc2NlbmRlcip0aGlzLl9zY2FsZShhKX0seS5Gb250LnByb3RvdHlwZS5fc2NhbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIDEvdGhpcy5mb250LnVuaXRzUGVyRW0qKGF8fHRoaXMucGFyZW50Ll9yZW5kZXJlci5fdGV4dFNpemUpfSx5LkZvbnQucHJvdG90eXBlLl9oYW5kbGVBbGlnbm1lbnQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1hLl90ZXh0U2l6ZTtzd2l0Y2godm9pZCAwPT09ZSYmKGU9dGhpcy5fdGV4dFdpZHRoKGIsZikpLGEuX3RleHRBbGlnbil7Y2FzZSB6LkNFTlRFUjpjLT1lLzI7YnJlYWs7Y2FzZSB6LlJJR0hUOmMtPWV9c3dpdGNoKGEuX3RleHRCYXNlbGluZSl7Y2FzZSB6LlRPUDpkKz10aGlzLl90ZXh0QXNjZW50KGYpO2JyZWFrO2Nhc2Ugei5DRU5URVI6ZCs9dGhpcy5fdGV4dEFzY2VudChmKS8yO2JyZWFrO2Nhc2Ugei5CT1RUT006ZC09dGhpcy5fdGV4dERlc2NlbnQoZil9cmV0dXJue3g6Yyx5OmR9fSxiLmV4cG9ydHM9eX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjA6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihhLGIpe3JldHVybiBhLnB1c2goYiksYX0sZC5wcm90b3R5cGUuYXJyYXlDb3B5PWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZzt2b2lkIDAhPT1lPyhnPU1hdGgubWluKGUsYS5sZW5ndGgpLGY9ZCxhPWEuc2xpY2UoYixnK2IpKToodm9pZCAwIT09Yz8oZz1jLGc9TWF0aC5taW4oZyxhLmxlbmd0aCkpOmc9YS5sZW5ndGgsZj0wLGM9YixhPWEuc2xpY2UoMCxnKSksQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShjLFtmLGddLmNvbmNhdChhKSl9LGQucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihhLGIpe3JldHVybiBhLmNvbmNhdChiKX0sZC5wcm90b3R5cGUucmV2ZXJzZT1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXZlcnNlKCl9LGQucHJvdG90eXBlLnNob3J0ZW49ZnVuY3Rpb24oYSl7cmV0dXJuIGEucG9wKCksYX0sZC5wcm90b3R5cGUuc2h1ZmZsZT1mdW5jdGlvbihhLGIpe3ZhciBjPUFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJkFycmF5QnVmZmVyLmlzVmlldyhhKTthPWJ8fGM/YTphLnNsaWNlKCk7Zm9yKHZhciBkLGUsZj1hLmxlbmd0aDtmPjE7KWQ9TWF0aC5yYW5kb20oKSpmfDAsZT1hWy0tZl0sYVtmXT1hW2RdLGFbZF09ZTtyZXR1cm4gYX0sZC5wcm90b3R5cGUuc29ydD1mdW5jdGlvbihhLGIpe3ZhciBjPWI/YS5zbGljZSgwLE1hdGgubWluKGIsYS5sZW5ndGgpKTphLGQ9Yj9hLnNsaWNlKE1hdGgubWluKGIsYS5sZW5ndGgpKTpbXTtyZXR1cm4gYz1cInN0cmluZ1wiPT10eXBlb2YgY1swXT9jLnNvcnQoKTpjLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS1ifSksYy5jb25jYXQoZCl9LGQucHJvdG90eXBlLnNwbGljZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoYSxbYywwXS5jb25jYXQoYikpLGF9LGQucHJvdG90eXBlLnN1YnNldD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHZvaWQgMCE9PWM/YS5zbGljZShiLGIrYyk6YS5zbGljZShiLGEubGVuZ3RoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2QucHJvdG90eXBlLmZsb2F0PWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAocGFyc2VGbG9hdCk6cGFyc2VGbG9hdChhKX0sZC5wcm90b3R5cGUuaW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9Ynx8MTAsXCJzdHJpbmdcIj09dHlwZW9mIGE/cGFyc2VJbnQoYSxiKTpcIm51bWJlclwiPT10eXBlb2YgYT8wfGE6XCJib29sZWFuXCI9PXR5cGVvZiBhP2E/MTowOmEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gZC5wcm90b3R5cGUuaW50KGEsYil9KTp2b2lkIDB9LGQucHJvdG90eXBlLnN0cj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGQucHJvdG90eXBlLnN0cik6U3RyaW5nKGEpfSxkLnByb3RvdHlwZS5ib29sZWFuPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBhPzAhPT1hOlwic3RyaW5nXCI9PXR5cGVvZiBhP1widHJ1ZVwiPT09YS50b0xvd2VyQ2FzZSgpOlwiYm9vbGVhblwiPT10eXBlb2YgYT9hOmEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChkLnByb3RvdHlwZS5ib29sZWFuKTp2b2lkIDB9LGQucHJvdG90eXBlLmJ5dGU9ZnVuY3Rpb24oYSl7dmFyIGI9ZC5wcm90b3R5cGUuaW50KGEsMTApO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBiPyhiKzEyOCklMjU2LTEyODpiIGluc3RhbmNlb2YgQXJyYXk/Yi5tYXAoZC5wcm90b3R5cGUuYnl0ZSk6dm9pZCAwfSxkLnByb3RvdHlwZS5jaGFyPWZ1bmN0aW9uKGEpe3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiBhfHxpc05hTihhKT9hIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUuY2hhcik6XCJzdHJpbmdcIj09dHlwZW9mIGE/ZC5wcm90b3R5cGUuY2hhcihwYXJzZUludChhLDEwKSk6dm9pZCAwOlN0cmluZy5mcm9tQ2hhckNvZGUoYSl9LGQucHJvdG90eXBlLnVuY2hhcj1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYSYmMT09PWEubGVuZ3RoP2EuY2hhckNvZGVBdCgwKTphIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUudW5jaGFyKTp2b2lkIDB9LGQucHJvdG90eXBlLmhleD1mdW5jdGlvbihhLGIpe2lmKGI9dm9pZCAwPT09Ynx8bnVsbD09PWI/Yj04OmIsYSBpbnN0YW5jZW9mIEFycmF5KXJldHVybiBhLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gZC5wcm90b3R5cGUuaGV4KGEsYil9KTtpZihcIm51bWJlclwiPT10eXBlb2YgYSl7YTwwJiYoYT00Mjk0OTY3Mjk1K2ErMSk7Zm9yKHZhciBjPU51bWJlcihhKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtjLmxlbmd0aDxiOyljPVwiMFwiK2M7cmV0dXJuIGMubGVuZ3RoPj1iJiYoYz1jLnN1YnN0cmluZyhjLmxlbmd0aC1iLGMubGVuZ3RoKSksY319LGQucHJvdG90eXBlLnVuaGV4PWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZC5wcm90b3R5cGUudW5oZXgpOnBhcnNlSW50KFwiMHhcIithLDE2KX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYixjKXt2YXIgZD1hPDAsZT1kP2EudG9TdHJpbmcoKS5zdWJzdHJpbmcoMSk6YS50b1N0cmluZygpLGY9ZS5pbmRleE9mKFwiLlwiKSxnPS0xIT09Zj9lLnN1YnN0cmluZygwLGYpOmUsaD0tMSE9PWY/ZS5zdWJzdHJpbmcoZisxKTpcIlwiLGk9ZD9cIi1cIjpcIlwiO2lmKHZvaWQgMCE9PWMpe3ZhciBqPVwiXCI7KC0xIT09Znx8Yy1oLmxlbmd0aD4wKSYmKGo9XCIuXCIpLGgubGVuZ3RoPmMmJihoPWguc3Vic3RyaW5nKDAsYykpO2Zvcih2YXIgaz0wO2s8Yi1nLmxlbmd0aDtrKyspaSs9XCIwXCI7aSs9ZyxpKz1qLGkrPWg7Zm9yKHZhciBsPTA7bDxjLWgubGVuZ3RoO2wrKylpKz1cIjBcIjtyZXR1cm4gaX1mb3IodmFyIG09MDttPE1hdGgubWF4KGItZy5sZW5ndGgsMCk7bSsrKWkrPVwiMFwiO3JldHVybiBpKz1lfWZ1bmN0aW9uIGUoYSxiKXthPWEudG9TdHJpbmcoKTt2YXIgYz1hLmluZGV4T2YoXCIuXCIpLGQ9LTEhPT1jP2Euc3Vic3RyaW5nKGMpOlwiXCIsZT0tMSE9PWM/YS5zdWJzdHJpbmcoMCxjKTphO2lmKGU9ZS50b1N0cmluZygpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csXCIsXCIpLDA9PT1iKWQ9XCJcIjtlbHNlIGlmKHZvaWQgMCE9PWIpaWYoYj5kLmxlbmd0aCl7ZCs9LTE9PT1jP1wiLlwiOlwiXCI7Zm9yKHZhciBmPWItZC5sZW5ndGgrMSxnPTA7ZzxmO2crKylkKz1cIjBcIn1lbHNlIGQ9ZC5zdWJzdHJpbmcoMCxiKzEpO3JldHVybiBlK2R9ZnVuY3Rpb24gZihhKXtyZXR1cm4gcGFyc2VGbG9hdChhKT4wP1wiK1wiK2EudG9TdHJpbmcoKTphLnRvU3RyaW5nKCl9ZnVuY3Rpb24gZyhhKXtyZXR1cm4gcGFyc2VGbG9hdChhKT4wP1wiIFwiK2EudG9TdHJpbmcoKTphLnRvU3RyaW5nKCl9dmFyIGg9YShcIi4uL2NvcmUvbWFpblwiKTthKFwiLi4vY29yZS9lcnJvcl9oZWxwZXJzXCIpLGgucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiam9pblwiLGFyZ3VtZW50cyksYS5qb2luKGIpfSxoLnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbihhLGIpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYXRjaFwiLGFyZ3VtZW50cyksYS5tYXRjaChiKX0saC5wcm90b3R5cGUubWF0Y2hBbGw9ZnVuY3Rpb24oYSxiKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJtYXRjaEFsbFwiLGFyZ3VtZW50cyk7Zm9yKHZhciBjPW5ldyBSZWdFeHAoYixcImdcIiksZD1jLmV4ZWMoYSksZT1bXTtudWxsIT09ZDspZS5wdXNoKGQpLGQ9Yy5leGVjKGEpO3JldHVybiBlfSxoLnByb3RvdHlwZS5uZj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm5mXCIsYXJndW1lbnRzKSxhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGQoYSxiLGMpfSk6XCJbb2JqZWN0IEFyZ3VtZW50c11cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKT8zPT09YS5sZW5ndGg/dGhpcy5uZihhWzBdLGFbMV0sYVsyXSk6Mj09PWEubGVuZ3RoP3RoaXMubmYoYVswXSxhWzFdKTp0aGlzLm5mKGFbMF0pOmQoYSxiLGMpfSxoLnByb3RvdHlwZS5uZmM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibmZjXCIsYXJndW1lbnRzKSxhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSxiKX0pOmUoYSxiKX0saC5wcm90b3R5cGUubmZwPWZ1bmN0aW9uKCl7aC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibmZwXCIsYXJndW1lbnRzKTt2YXIgYT1oLnByb3RvdHlwZS5uZi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hLm1hcChmKTpmKGEpfSxoLnByb3RvdHlwZS5uZnM9ZnVuY3Rpb24oKXtoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJuZnNcIixhcmd1bWVudHMpO3ZhciBhPWgucHJvdG90eXBlLm5mLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2EubWFwKGcpOmcoYSl9LGgucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGguX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwbGl0XCIsYXJndW1lbnRzKSxhLnNwbGl0KGIpfSxoLnByb3RvdHlwZS5zcGxpdFRva2Vucz1mdW5jdGlvbihhLGIpe2guX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwbGl0VG9rZW5zXCIsYXJndW1lbnRzKTt2YXIgYztpZih2b2lkIDAhPT1iKXt2YXIgZD1iLGU9L1xcXS9nLmV4ZWMoZCksZj0vXFxbL2cuZXhlYyhkKTtmJiZlPyhkPWQuc2xpY2UoMCxlLmluZGV4KStkLnNsaWNlKGUuaW5kZXgrMSksZj0vXFxbL2cuZXhlYyhkKSxkPWQuc2xpY2UoMCxmLmluZGV4KStkLnNsaWNlKGYuaW5kZXgrMSksYz1uZXcgUmVnRXhwKFwiW1xcXFxbXCIrZCtcIlxcXFxdXVwiLFwiZ1wiKSk6ZT8oZD1kLnNsaWNlKDAsZS5pbmRleCkrZC5zbGljZShlLmluZGV4KzEpLGM9bmV3IFJlZ0V4cChcIltcIitkK1wiXFxcXF1dXCIsXCJnXCIpKTpmPyhkPWQuc2xpY2UoMCxmLmluZGV4KStkLnNsaWNlKGYuaW5kZXgrMSksYz1uZXcgUmVnRXhwKFwiW1wiK2QrXCJcXFxcW11cIixcImdcIikpOmM9bmV3IFJlZ0V4cChcIltcIitkK1wiXVwiLFwiZ1wiKX1lbHNlIGM9L1xccy9nO3JldHVybiBhLnNwbGl0KGMpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYX0pfSxoLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKGEpe3JldHVybiBoLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0cmltXCIsYXJndW1lbnRzKSxhIGluc3RhbmNlb2YgQXJyYXk/YS5tYXAodGhpcy50cmltKTphLnRyaW0oKX0sYi5leHBvcnRzPWh9LHtcIi4uL2NvcmUvZXJyb3JfaGVscGVyc1wiOjIwLFwiLi4vY29yZS9tYWluXCI6MjR9XSw2MzpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5wcm90b3R5cGUuZGF5PWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXREYXRlKCl9LGQucHJvdG90eXBlLmhvdXI9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldEhvdXJzKCl9LGQucHJvdG90eXBlLm1pbnV0ZT1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0TWludXRlcygpfSxkLnByb3RvdHlwZS5taWxsaXM9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpfSxkLnByb3RvdHlwZS5tb250aD1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0TW9udGgoKSsxfSxkLnByb3RvdHlwZS5zZWNvbmQ9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFNlY29uZHMoKX0sZC5wcm90b3R5cGUueWVhcj1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjQ6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpO2EoXCIuL3A1Lkdlb21ldHJ5XCIpO3ZhciBlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTtkLnByb3RvdHlwZS5wbGFuZT1mdW5jdGlvbihhLGIsYyxlKXt0aGlzLl9hc3NlcnQzZChcInBsYW5lXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInBsYW5lXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9MSksdm9pZCAwPT09ZSYmKGU9MSk7dmFyIGY9XCJwbGFuZXxcIitjK1wifFwiK2U7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGYpKXt2YXIgZz1mdW5jdGlvbigpe2Zvcih2YXIgYSxiLGMsZT0wO2U8PXRoaXMuZGV0YWlsWTtlKyspe2I9ZS90aGlzLmRldGFpbFk7Zm9yKHZhciBmPTA7Zjw9dGhpcy5kZXRhaWxYO2YrKylhPWYvdGhpcy5kZXRhaWxYLGM9bmV3IGQuVmVjdG9yKGEtLjUsYi0uNSwwKSx0aGlzLnZlcnRpY2VzLnB1c2goYyksdGhpcy51dnMucHVzaChhLGIpfX0saD1uZXcgZC5HZW9tZXRyeShjLGUsZyk7aC5jb21wdXRlRmFjZXMoKS5jb21wdXRlTm9ybWFscygpLGM8PTEmJmU8PTE/aC5fbWFrZVRyaWFuZ2xlRWRnZXMoKS5fZWRnZXNUb1ZlcnRpY2VzKCk6Y29uc29sZS5sb2coXCJDYW5ub3QgZHJhdyBzdHJva2Ugb24gcGxhbmUgb2JqZWN0cyB3aXRoIG1vcmUgdGhhbiAxIGRldGFpbFggb3IgMSBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoZixoKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoZixhLGIsMSksdGhpc30sZC5wcm90b3R5cGUuYm94PWZ1bmN0aW9uKGEsYixjLGUsZil7dGhpcy5fYXNzZXJ0M2QoXCJib3hcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYm94XCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9Yik7dmFyIGc9dGhpcy5fcmVuZGVyZXIuYXR0cmlidXRlcyYmdGhpcy5fcmVuZGVyZXIuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nO3ZvaWQgMD09PWUmJihlPWc/MTo0KSx2b2lkIDA9PT1mJiYoZj1nPzE6NCk7dmFyIGg9XCJib3h8XCIrZStcInxcIitmO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChoKSl7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgYT1bWzAsNCwyLDZdLFsxLDMsNSw3XSxbMCwxLDQsNV0sWzIsNiwzLDddLFswLDIsMSwzXSxbNCw1LDYsN11dO3RoaXMuc3Ryb2tlSW5kaWNlcz1bWzAsMV0sWzEsM10sWzMsMl0sWzYsN10sWzgsOV0sWzksMTFdLFsxNCwxNV0sWzE2LDE3XSxbMTcsMTldLFsxOCwxOV0sWzIwLDIxXSxbMjIsMjNdXTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl7Zm9yKHZhciBjPWFbYl0sZT00KmIsZj0wO2Y8NDtmKyspe3ZhciBnPWNbZl0saD1uZXcgZC5WZWN0b3IoKDIqKDEmZyktMSkvMiwoKDImZyktMSkvMiwoKDQmZykvMi0xKS8yKTt0aGlzLnZlcnRpY2VzLnB1c2goaCksdGhpcy51dnMucHVzaCgxJmYsKDImZikvMil9dGhpcy5mYWNlcy5wdXNoKFtlLGUrMSxlKzJdKSx0aGlzLmZhY2VzLnB1c2goW2UrMixlKzEsZSszXSl9fSxqPW5ldyBkLkdlb21ldHJ5KGUsZixpKTtqLmNvbXB1dGVOb3JtYWxzKCksZTw9NCYmZjw9ND9qLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBib3ggb2JqZWN0cyB3aXRoIG1vcmUgdGhhbiA0IGRldGFpbFggb3IgNCBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoaCxqKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoaCxhLGIsYyksdGhpc30sZC5wcm90b3R5cGUuc3BoZXJlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJzcGhlcmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwic3BoZXJlXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9MjQpLHZvaWQgMD09PWMmJihjPTE2KSx0aGlzLmVsbGlwc29pZChhLGEsYSxiLGMpLHRoaXN9O3ZhciBmPWZ1bmN0aW9uKGEsYixjLGUsZixnLGgpe2E9YTw9MD8xOmEsYj1iPDA/MDpiLGM9Yzw9MD9hOmMsZT1lPDM/MzplLGY9ZjwxPzE6ZixnPXZvaWQgMD09PWd8fGcsaD12b2lkIDA9PT1oPzAhPT1iOmg7dmFyIGksaixrLGwsbSxuPWc/LTI6MCxvPWYrKGg/MjowKSxwPXt9LHE9TWF0aC5hdGFuMihhLWIsYyk7Zm9yKGk9bjtpPD1vOysraSl7dmFyIHIscz1pL2YsdD1jKnM7Zm9yKGk8MD8odD0wLHM9MCxyPWEpOmk+Zj8odD1jLHM9MSxyPWIpOnI9YSsoYi1hKSpzLC0yIT09aSYmaSE9PWYrMnx8KHI9MCksdC09Yy8yLHBbaV09MD09PXI/MTplLGo9MDtqPHBbaV07KytqKXt2YXIgdT1qL2U7dGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihNYXRoLnNpbigyKnUqTWF0aC5QSSkqcix0LE1hdGguY29zKDIqdSpNYXRoLlBJKSpyKSksdGhpcy52ZXJ0ZXhOb3JtYWxzLnB1c2gobmV3IGQuVmVjdG9yKGk8MHx8aT5mPzA6TWF0aC5zaW4oMip1Kk1hdGguUEkpKk1hdGguY29zKHEpLGk8MD8tMTppPmY/MTpNYXRoLnNpbihxKSxpPDB8fGk+Zj8wOk1hdGguY29zKDIqdSpNYXRoLlBJKSpNYXRoLmNvcyhxKSkpLHRoaXMudXZzLnB1c2godSxzKX19dmFyIHY9MDtpZihnKXtmb3Ioaz0wO2s8cFstMV07KytrKW09KGsrMSklcFstMV0sdGhpcy5mYWNlcy5wdXNoKFt2LHYrMSttLHYrMStrXSk7dis9cFstMl0rcFstMV19Zm9yKGk9MDtpPGY7KytpKXtmb3Ioaj0wO2o8cFtpXTsrK2opMT09PXBbaSsxXT8obD0oaisxKSVwW2ldLHRoaXMuZmFjZXMucHVzaChbditqLHYrbCx2K3BbaV1dKSk6KGw9KGorMSklcFtpXSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K2wsditwW2ldK2xdKSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K3BbaV0rbCx2K3BbaV0ral0pKTt2Kz1wW2ldfWlmKGgpZm9yKHYrPXBbZl0saj0wO2o8cFtmKzFdOysrailsPShqKzEpJXBbZisxXSx0aGlzLmZhY2VzLnB1c2goW3Yraix2K2wsditwW2YrMV1dKX07ZC5wcm90b3R5cGUuY3lsaW5kZXI9ZnVuY3Rpb24oYSxiLGMsZSxnLGgpe3RoaXMuX2Fzc2VydDNkKFwiY3lsaW5kZXJcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY3lsaW5kZXJcIixhcmd1bWVudHMpLHZvaWQgMD09PWEmJihhPTUwKSx2b2lkIDA9PT1iJiYoYj1hKSx2b2lkIDA9PT1jJiYoYz0yNCksdm9pZCAwPT09ZSYmKGU9MSksdm9pZCAwPT09aCYmKGg9ITApLFxudm9pZCAwPT09ZyYmKGc9ITApO3ZhciBpPVwiY3lsaW5kZXJ8XCIrYytcInxcIitlK1wifFwiK2crXCJ8XCIraDtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goaSkpe3ZhciBqPW5ldyBkLkdlb21ldHJ5KGMsZSk7Zi5jYWxsKGosMSwxLDEsYyxlLGcsaCksai5jb21wdXRlTm9ybWFscygpLGM8PTI0JiZlPD0xNj9qLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBjeWxpbmRlciBvYmplY3RzIHdpdGggbW9yZSB0aGFuIDI0IGRldGFpbFggb3IgMTYgZGV0YWlsWVwiKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGksail9cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmRyYXdCdWZmZXJzU2NhbGVkKGksYSxiLGEpLHRoaXN9LGQucHJvdG90eXBlLmNvbmU9ZnVuY3Rpb24oYSxiLGMsZSxnKXt0aGlzLl9hc3NlcnQzZChcImNvbmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY29uZVwiLGFyZ3VtZW50cyksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWImJihiPWEpLHZvaWQgMD09PWMmJihjPTI0KSx2b2lkIDA9PT1lJiYoZT0xKSx2b2lkIDA9PT1nJiYoZz0hMCk7dmFyIGg9XCJjb25lfFwiK2MrXCJ8XCIrZStcInxcIitnO2lmKCF0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChoKSl7dmFyIGk9bmV3IGQuR2VvbWV0cnkoYyxlKTtmLmNhbGwoaSwxLDAsMSxjLGUsZywhMSksaS5jb21wdXRlTm9ybWFscygpLGM8PTI0JiZlPD0xNj9pLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKTpjb25zb2xlLmxvZyhcIkNhbm5vdCBkcmF3IHN0cm9rZSBvbiBjb25lIG9iamVjdHMgd2l0aCBtb3JlIHRoYW4gMjQgZGV0YWlsWCBvciAxNiBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoaCxpKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoaCxhLGIsYSksdGhpc30sZC5wcm90b3R5cGUuZWxsaXBzb2lkPWZ1bmN0aW9uKGEsYixjLGUsZil7dGhpcy5fYXNzZXJ0M2QoXCJlbGxpcHNvaWRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZWxsaXBzb2lkXCIsYXJndW1lbnRzKSx2b2lkIDA9PT1hJiYoYT01MCksdm9pZCAwPT09YiYmKGI9YSksdm9pZCAwPT09YyYmKGM9YSksdm9pZCAwPT09ZSYmKGU9MjQpLHZvaWQgMD09PWYmJihmPTE2KTt2YXIgZz1cImVsbGlwc29pZHxcIitlK1wifFwiK2Y7aWYoIXRoaXMuX3JlbmRlcmVyLmdlb21ldHJ5SW5IYXNoKGcpKXt2YXIgaD1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspZm9yKHZhciBiPWEvdGhpcy5kZXRhaWxZLGM9TWF0aC5QSSpiLU1hdGguUEkvMixlPU1hdGguY29zKGMpLGY9TWF0aC5zaW4oYyksZz0wO2c8PXRoaXMuZGV0YWlsWDtnKyspe3ZhciBoPWcvdGhpcy5kZXRhaWxYLGk9MipNYXRoLlBJKmgsaj1NYXRoLmNvcyhpKSxrPU1hdGguc2luKGkpLGw9bmV3IGQuVmVjdG9yKGUqayxmLGUqaik7dGhpcy52ZXJ0aWNlcy5wdXNoKGwpLHRoaXMudmVydGV4Tm9ybWFscy5wdXNoKGwpLHRoaXMudXZzLnB1c2goaCxiKX19LGk9bmV3IGQuR2VvbWV0cnkoZSxmLGgpO2kuY29tcHV0ZUZhY2VzKCksZTw9MjQmJmY8PTI0P2kuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlIG9uIGVsbGlwc29pZHMgd2l0aCBtb3JlIHRoYW4gMjQgZGV0YWlsWCBvciAyNCBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoZyxpKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoZyxhLGIsYyksdGhpc30sZC5wcm90b3R5cGUudG9ydXM9ZnVuY3Rpb24oYSxiLGMsZSl7aWYodGhpcy5fYXNzZXJ0M2QoXCJ0b3J1c1wiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJ0b3J1c1wiLGFyZ3VtZW50cyksdm9pZCAwPT09YSlhPTUwO2Vsc2UgaWYoIWEpcmV0dXJuO2lmKHZvaWQgMD09PWIpYj0xMDtlbHNlIGlmKCFiKXJldHVybjt2b2lkIDA9PT1jJiYoYz0yNCksdm9pZCAwPT09ZSYmKGU9MTYpO3ZhciBmPShiL2EpLnRvUHJlY2lzaW9uKDQpLGc9XCJ0b3J1c3xcIitmK1wifFwiK2MrXCJ8XCIrZTtpZighdGhpcy5fcmVuZGVyZXIuZ2VvbWV0cnlJbkhhc2goZykpe3ZhciBoPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTw9dGhpcy5kZXRhaWxZO2ErKylmb3IodmFyIGI9YS90aGlzLmRldGFpbFksYz0yKk1hdGguUEkqYixlPU1hdGguY29zKGMpLGc9TWF0aC5zaW4oYyksaD0xK2YqZSxpPTA7aTw9dGhpcy5kZXRhaWxYO2krKyl7dmFyIGo9aS90aGlzLmRldGFpbFgsaz0yKk1hdGguUEkqaixsPU1hdGguY29zKGspLG09TWF0aC5zaW4oayksbj1uZXcgZC5WZWN0b3IoaCpsLGgqbSxmKmcpLG89bmV3IGQuVmVjdG9yKGUqbCxlKm0sZyk7dGhpcy52ZXJ0aWNlcy5wdXNoKG4pLHRoaXMudmVydGV4Tm9ybWFscy5wdXNoKG8pLHRoaXMudXZzLnB1c2goaixiKX19LGk9bmV3IGQuR2VvbWV0cnkoYyxlLGgpO2kuY29tcHV0ZUZhY2VzKCksYzw9MjQmJmU8PTE2P2kuX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpOmNvbnNvbGUubG9nKFwiQ2Fubm90IGRyYXcgc3Ryb2tlcyBvbiB0b3J1cyBvYmplY3Qgd2l0aCBtb3JlIHRoYW4gMjQgZGV0YWlsWCBvciAxNiBkZXRhaWxZXCIpLHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUJ1ZmZlcnMoZyxpKX1yZXR1cm4gdGhpcy5fcmVuZGVyZXIuZHJhd0J1ZmZlcnNTY2FsZWQoZyxhLGEsYSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihhLGIsYyl7dGhpcy5fdXNlUG9pbnRTaGFkZXIoKSx0aGlzLmN1clBvaW50U2hhZGVyLmJpbmRTaGFkZXIoKSx2b2lkIDA9PT1jJiYoYz0wKTt2YXIgZT1bXTtyZXR1cm4gZS5wdXNoKG5ldyBkLlZlY3RvcihhLGIsYykpLHRoaXMuX2RyYXdQb2ludHMoZSx0aGlzLl9wb2ludFZlcnRleEJ1ZmZlciksdGhpcy5jdXJQb2ludFNoYWRlci51bmJpbmRTaGFkZXIoKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnRyaWFuZ2xlPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMF0sYz1hWzFdLGU9YVsyXSxmPWFbM10sZz1hWzRdLGg9YVs1XSxpPVwidHJpXCI7aWYoIXRoaXMuZ2VvbWV0cnlJbkhhc2goaSkpe3ZhciBqPWZ1bmN0aW9uKCl7dmFyIGE9W107YS5wdXNoKG5ldyBkLlZlY3RvcigwLDAsMCkpLGEucHVzaChuZXcgZC5WZWN0b3IoMCwxLDApKSxhLnB1c2gobmV3IGQuVmVjdG9yKDEsMCwwKSksdGhpcy5zdHJva2VJbmRpY2VzPVtbMCwxXSxbMSwyXSxbMiwwXV0sdGhpcy52ZXJ0aWNlcz1hLHRoaXMuZmFjZXM9W1swLDEsMl1dLHRoaXMudXZzPVswLDAsMCwxLDEsMV19LGs9bmV3IGQuR2VvbWV0cnkoMSwxLGopO2suX21ha2VUcmlhbmdsZUVkZ2VzKCkuX2VkZ2VzVG9WZXJ0aWNlcygpLGsuY29tcHV0ZU5vcm1hbHMoKSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoaSxrKX12YXIgbD10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3ZhciBtPW5ldyBkLk1hdHJpeChbZS1iLGYtYywwLDAsZy1iLGgtYywwLDAsMCwwLDEsMCxiLGMsMCwxXSkubXVsdCh0aGlzLnVNVk1hdHJpeCk7dGhpcy51TVZNYXRyaXg9bSx0aGlzLmRyYXdCdWZmZXJzKGkpfWZpbmFsbHl7dGhpcy51TVZNYXRyaXg9bH1yZXR1cm4gdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5lbGxpcHNlPWZ1bmN0aW9uKGEpe3RoaXMuYXJjKGFbMF0sYVsxXSxhWzJdLGFbM10sMCxlLlRXT19QSSxlLk9QRU4sYVs0XSl9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuYXJjPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZj1hcmd1bWVudHNbMF0sZz1hcmd1bWVudHNbMV0saD1hcmd1bWVudHNbMl0saT1hcmd1bWVudHNbM10saj1hcmd1bWVudHNbNF0saz1hcmd1bWVudHNbNV0sbD1hcmd1bWVudHNbNl0sbT1hcmd1bWVudHNbN118fDI1O2lmKE1hdGguYWJzKGstaik+PWUuVFdPX1BJPyhiPVwiZWxsaXBzZVwiLGM9YitcInxcIittK1wifFwiKTooYj1cImFyY1wiLGM9YitcInxcIitqK1wifFwiK2srXCJ8XCIrbCtcInxcIittK1wifFwiKSwhdGhpcy5nZW9tZXRyeUluSGFzaChjKSl7dmFyIG49ZnVuY3Rpb24oKXtpZih0aGlzLnN0cm9rZUluZGljZXM9W10sai50b0ZpeGVkKDEwKSE9PWsudG9GaXhlZCgxMCkpe2whPT1lLlBJRSYmdm9pZCAwIT09bHx8KHRoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoLjUsLjUsMCkpLHRoaXMudXZzLnB1c2goWy41LC41XSkpO2Zvcih2YXIgYT0wO2E8PW07YSsrKXt2YXIgYj1hL20sYz0oay1qKSpiK2osZj0uNStNYXRoLmNvcyhjKS8yLGc9LjUrTWF0aC5zaW4oYykvMjt0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGYsZywwKSksdGhpcy51dnMucHVzaChbZixnXSksYTxtLTEmJih0aGlzLmZhY2VzLnB1c2goWzAsYSsxLGErMl0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFthKzEsYSsyXSkpfXN3aXRjaChsKXtjYXNlIGUuUElFOnRoaXMuZmFjZXMucHVzaChbMCx0aGlzLnZlcnRpY2VzLmxlbmd0aC0yLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKSx0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCwxXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goW3RoaXMudmVydGljZXMubGVuZ3RoLTIsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKTticmVhaztjYXNlIGUuQ0hPUkQ6dGhpcy5zdHJva2VJbmRpY2VzLnB1c2goWzAsMV0pLHRoaXMuc3Ryb2tlSW5kaWNlcy5wdXNoKFswLHRoaXMudmVydGljZXMubGVuZ3RoLTFdKTticmVhaztjYXNlIGUuT1BFTjp0aGlzLnN0cm9rZUluZGljZXMucHVzaChbMCwxXSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmZhY2VzLnB1c2goWzAsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMix0aGlzLnZlcnRpY2VzLmxlbmd0aC0xXSksdGhpcy5zdHJva2VJbmRpY2VzLnB1c2goW3RoaXMudmVydGljZXMubGVuZ3RoLTIsdGhpcy52ZXJ0aWNlcy5sZW5ndGgtMV0pfX19LG89bmV3IGQuR2VvbWV0cnkobSwxLG4pO28uY29tcHV0ZU5vcm1hbHMoKSxtPD01MD9vLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMobyk6Y29uc29sZS5sb2coXCJDYW5ub3Qgc3Ryb2tlIFwiK2IrXCIgd2l0aCBtb3JlIHRoYW4gNTAgZGV0YWlsXCIpLHRoaXMuY3JlYXRlQnVmZmVycyhjLG8pfXZhciBwPXRoaXMudU1WTWF0cml4LmNvcHkoKTt0cnl7dGhpcy51TVZNYXRyaXgudHJhbnNsYXRlKFtmLGcsMF0pLHRoaXMudU1WTWF0cml4LnNjYWxlKGgsaSwxKSx0aGlzLmRyYXdCdWZmZXJzKGMpfWZpbmFsbHl7dGhpcy51TVZNYXRyaXg9cH1yZXR1cm4gdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nLGM9YVswXSxlPWFbMV0sZj1hWzJdLGc9YVszXSxoPWFbNF18fChiPzE6MjQpLGk9YVs1XXx8KGI/MToxNiksaj1cInJlY3R8XCIraCtcInxcIitpO2lmKCF0aGlzLmdlb21ldHJ5SW5IYXNoKGopKXt2YXIgaz1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PXRoaXMuZGV0YWlsWTthKyspZm9yKHZhciBiPWEvdGhpcy5kZXRhaWxZLGM9MDtjPD10aGlzLmRldGFpbFg7YysrKXt2YXIgZT1jL3RoaXMuZGV0YWlsWCxmPW5ldyBkLlZlY3RvcihlLGIsMCk7dGhpcy52ZXJ0aWNlcy5wdXNoKGYpLHRoaXMudXZzLnB1c2goZSxiKX1oPjAmJmk+MCYmKHRoaXMuc3Ryb2tlSW5kaWNlcz1bWzAsaF0sW2gsKGgrMSkqKGkrMSktMV0sWyhoKzEpKihpKzEpLTEsKGgrMSkqaV0sWyhoKzEpKmksMF1dKX0sbD1uZXcgZC5HZW9tZXRyeShoLGksayk7bC5jb21wdXRlRmFjZXMoKS5jb21wdXRlTm9ybWFscygpLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSx0aGlzLmNyZWF0ZUJ1ZmZlcnMoaixsKX12YXIgbT10aGlzLnVNVk1hdHJpeC5jb3B5KCk7dHJ5e3RoaXMudU1WTWF0cml4LnRyYW5zbGF0ZShbYyxlLDBdKSx0aGlzLnVNVk1hdHJpeC5zY2FsZShmLGcsMSksdGhpcy5kcmF3QnVmZmVycyhqKX1maW5hbGx5e3RoaXMudU1WTWF0cml4PW19cmV0dXJuIHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucXVhZD1mdW5jdGlvbihhLGIsYyxlLGYsZyxoLGkpe3ZhciBqPVwicXVhZHxcIithK1wifFwiK2IrXCJ8XCIrYytcInxcIitlK1wifFwiK2YrXCJ8XCIrZytcInxcIitoK1wifFwiK2k7aWYoIXRoaXMuZ2VvbWV0cnlJbkhhc2goaikpe3ZhciBrPWZ1bmN0aW9uKCl7dGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihhLGIsMCkpLHRoaXMudmVydGljZXMucHVzaChuZXcgZC5WZWN0b3IoYyxlLDApKSx0aGlzLnZlcnRpY2VzLnB1c2gobmV3IGQuVmVjdG9yKGYsZywwKSksdGhpcy52ZXJ0aWNlcy5wdXNoKG5ldyBkLlZlY3RvcihoLGksMCkpLHRoaXMudXZzLnB1c2goMCwwLDEsMCwxLDEsMCwxKSx0aGlzLnN0cm9rZUluZGljZXM9W1swLDFdLFsxLDJdLFsyLDNdLFszLDBdXX0sbD1uZXcgZC5HZW9tZXRyeSgyLDIsayk7bC5jb21wdXRlTm9ybWFscygpLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSxsLmZhY2VzPVtbMCwxLDJdLFsyLDMsMF1dLHRoaXMuY3JlYXRlQnVmZmVycyhqLGwpfXJldHVybiB0aGlzLmRyYXdCdWZmZXJzKGopLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuYmV6aWVyPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCxpLGosayxsKXs4PT09YXJndW1lbnRzLmxlbmd0aCYmKGo9ZyxrPWgsZz1lLGg9ZCxkPWMsZT1kLGM9Zj1pPWw9MCk7dmFyIG09dGhpcy5fcEluc3QuX2JlemllckRldGFpbHx8MjA7dGhpcy5iZWdpblNoYXBlKCk7Zm9yKHZhciBuPTA7bjw9bTtuKyspe3ZhciBvPU1hdGgucG93KDEtbi9tLDMpLHA9bi9tKjMqTWF0aC5wb3coMS1uL20sMikscT0zKk1hdGgucG93KG4vbSwyKSooMS1uL20pLHI9TWF0aC5wb3cobi9tLDMpO3RoaXMudmVydGV4KGEqbytkKnArZypxK2oqcixiKm8rZSpwK2gqcStrKnIsYypvK2YqcCtpKnErbCpyKX1yZXR1cm4gdGhpcy5lbmRTaGFwZSgpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuY3VydmU9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGksaixrLGwpezg9PT1hcmd1bWVudHMubGVuZ3RoJiYoaj1nLGs9aCxnPWUsaD1kLGQ9YyxlPWQsYz1mPWk9bD0wKTt2YXIgbT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7dGhpcy5iZWdpblNoYXBlKCk7Zm9yKHZhciBuPTA7bjw9bTtuKyspe3ZhciBvPS41Kk1hdGgucG93KG4vbSwzKSxwPS41Kk1hdGgucG93KG4vbSwyKSxxPW4vbSouNSxyPS41LHM9byooMypkLWEtMypnK2opK3AqKDIqYS01KmQrNCpnLWopK3EqKC1hK2cpK3IqKDIqZCksdD1vKigzKmUtYi0zKmgraykrcCooMipiLTUqZSs0KmgtaykrcSooLWIraCkrciooMiplKSx1PW8qKDMqZi1jLTMqaStsKStwKigyKmMtNSpmKzQqaS1sKStxKigtYytpKStyKigyKmYpO3RoaXMudmVydGV4KHMsdCx1KX1yZXR1cm4gdGhpcy5lbmRTaGFwZSgpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUubGluZT1mdW5jdGlvbigpe3JldHVybiA2PT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5iZWdpblNoYXBlKCksdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pLHRoaXMudmVydGV4KGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNF0sYXJndW1lbnRzWzVdKSx0aGlzLmVuZFNoYXBlKCkpOjQ9PT1hcmd1bWVudHMubGVuZ3RoJiYodGhpcy5iZWdpblNoYXBlKCksdGhpcy52ZXJ0ZXgoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSwwKSx0aGlzLnZlcnRleChhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLDApLHRoaXMuZW5kU2hhcGUoKSksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5iZXppZXJWZXJ0ZXg9ZnVuY3Rpb24oKXtpZigwPT09dGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXgubGVuZ3RoKXRocm93IEVycm9yKFwidmVydGV4KCkgbXVzdCBiZSB1c2VkIG9uY2UgYmVmb3JlIGNhbGxpbmcgYmV6aWVyVmVydGV4KClcIik7dmFyIGEsYixjLGQsZSxmPVtdLGc9W10saD1bXSxpPWFyZ3VtZW50cy5sZW5ndGg7aWYoYT0wLDA9PT10aGlzLl9sb29rVXBUYWJsZUJlemllci5sZW5ndGh8fHRoaXMuX2x1dEJlemllckRldGFpbCE9PXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbCl7dGhpcy5fbG9va1VwVGFibGVCZXppZXI9W10sdGhpcy5fbHV0QmV6aWVyRGV0YWlsPXRoaXMuX3BJbnN0Ll9jdXJ2ZURldGFpbDtmb3IodmFyIGo9MS90aGlzLl9sdXRCZXppZXJEZXRhaWwsaz0wLGw9MSxtPTA7azwxOyl7aWYoYT1wYXJzZUZsb2F0KGsudG9GaXhlZCg2KSksdGhpcy5fbG9va1VwVGFibGVCZXppZXJbbV09dGhpcy5fYmV6aWVyQ29lZmZpY2llbnRzKGEpLGwudG9GaXhlZCg2KT09PWoudG9GaXhlZCg2KSl7YT1wYXJzZUZsb2F0KGwudG9GaXhlZCg2KSkrcGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLCsrbSx0aGlzLl9sb29rVXBUYWJsZUJlemllclttXT10aGlzLl9iZXppZXJDb2VmZmljaWVudHMoYSk7YnJlYWt9ays9aixsLT1qLCsrbX19dmFyIG49dGhpcy5fbG9va1VwVGFibGVCZXppZXIubGVuZ3RoO2lmKDY9PT1pKXtmb3IodGhpcy5pc0Jlemllcj0hMCxmPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXSxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1s0XV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1szXSxhcmd1bWVudHNbNV1dLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZlszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2dbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sdGhpcy52ZXJ0ZXgoYixjKTt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXT1hcmd1bWVudHNbNF0sdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV09YXJndW1lbnRzWzVdfWVsc2UgaWYoOT09PWkpe2Zvcih0aGlzLmlzQmV6aWVyPSEwLGY9W3RoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzBdLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzZdXSxnPVt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFsxXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzRdLGFyZ3VtZW50c1s3XV0saD1bdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMl0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1s1XSxhcmd1bWVudHNbOF1dLGU9MDtlPG47ZSsrKWI9ZlswXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStmWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2ZbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZlszXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2dbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sZD1oWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2hbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0raFsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStoWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyxkKTt0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXT1hcmd1bWVudHNbNl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMV09YXJndW1lbnRzWzddLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzJdPWFyZ3VtZW50c1s4XX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucXVhZHJhdGljVmVydGV4PWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4Lmxlbmd0aCl0aHJvdyBFcnJvcihcInZlcnRleCgpIG11c3QgYmUgdXNlZCBvbmNlIGJlZm9yZSBjYWxsaW5nIHF1YWRyYXRpY1ZlcnRleCgpXCIpO3ZhciBhLGIsYyxkLGUsZj1bXSxnPVtdLGg9W10saT1hcmd1bWVudHMubGVuZ3RoO2lmKGE9MCwwPT09dGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWMubGVuZ3RofHx0aGlzLl9sdXRRdWFkcmF0aWNEZXRhaWwhPT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWwpe3RoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljPVtdLHRoaXMuX2x1dFF1YWRyYXRpY0RldGFpbD10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7Zm9yKHZhciBqPTEvdGhpcy5fbHV0UXVhZHJhdGljRGV0YWlsLGs9MCxsPTEsbT0wO2s8MTspe2lmKGE9cGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLHRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW21dPXRoaXMuX3F1YWRyYXRpY0NvZWZmaWNpZW50cyhhKSxsLnRvRml4ZWQoNik9PT1qLnRvRml4ZWQoNikpe2E9cGFyc2VGbG9hdChsLnRvRml4ZWQoNikpK3BhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSwrK20sdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbbV09dGhpcy5fcXVhZHJhdGljQ29lZmZpY2llbnRzKGEpO2JyZWFrfWsrPWosbC09aiwrK219fXZhciBuPXRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljLmxlbmd0aDtpZig0PT09aSl7Zm9yKHRoaXMuaXNRdWFkcmF0aWM9ITAsZj1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF0sYXJndW1lbnRzWzBdLGFyZ3VtZW50c1syXV0sZz1bdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMV0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1szXV0sZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSxjPWdbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0rZ1sxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStnWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLHRoaXMudmVydGV4KGIsYyk7dGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF09YXJndW1lbnRzWzJdLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdPWFyZ3VtZW50c1szXX1lbHNlIGlmKDY9PT1pKXtmb3IodGhpcy5pc1F1YWRyYXRpYz0hMCxmPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFswXSxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzNdXSxnPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsxXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzRdXSxoPVt0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsyXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzVdXSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzJdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMl0sZD1oWzBdKnRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljW2VdWzBdK2hbMV0qdGhpcy5fbG9va1VwVGFibGVRdWFkcmF0aWNbZV1bMV0raFsyXSp0aGlzLl9sb29rVXBUYWJsZVF1YWRyYXRpY1tlXVsyXSx0aGlzLnZlcnRleChiLGMsZCk7dGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMF09YXJndW1lbnRzWzNdLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdPWFyZ3VtZW50c1s0XSx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFsyXT1hcmd1bWVudHNbNV19fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmN1cnZlVmVydGV4PWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmPVtdLGc9W10saD1bXTthPTA7dmFyIGk9YXJndW1lbnRzLmxlbmd0aDtpZigwPT09dGhpcy5fbG9va1VwVGFibGVCZXppZXIubGVuZ3RofHx0aGlzLl9sdXRCZXppZXJEZXRhaWwhPT10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWwpe3RoaXMuX2xvb2tVcFRhYmxlQmV6aWVyPVtdLHRoaXMuX2x1dEJlemllckRldGFpbD10aGlzLl9wSW5zdC5fY3VydmVEZXRhaWw7Zm9yKHZhciBqPTEvdGhpcy5fbHV0QmV6aWVyRGV0YWlsLGs9MCxsPTEsbT0wO2s8MTspe2lmKGE9cGFyc2VGbG9hdChrLnRvRml4ZWQoNikpLHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW21dPXRoaXMuX2JlemllckNvZWZmaWNpZW50cyhhKSxsLnRvRml4ZWQoNik9PT1qLnRvRml4ZWQoNikpe2E9cGFyc2VGbG9hdChsLnRvRml4ZWQoNikpK3BhcnNlRmxvYXQoay50b0ZpeGVkKDYpKSwrK20sdGhpcy5fbG9va1VwVGFibGVCZXppZXJbbV09dGhpcy5fYmV6aWVyQ29lZmZpY2llbnRzKGEpO2JyZWFrfWsrPWosbC09aiwrK219fXZhciBuPXRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyLmxlbmd0aDtpZigyPT09aSl7aWYodGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5wdXNoKGFyZ3VtZW50c1swXSksdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5wdXNoKGFyZ3VtZW50c1sxXSksOD09PXRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgubGVuZ3RoKXtmb3IodGhpcy5pc0N1cnZlPSEwLGY9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzBdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs0XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzZdXSksZz10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMV0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFszXSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzVdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbN11dKSxlPTA7ZTxuO2UrKyliPWZbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0rZlsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStmWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2ZbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sYz1nWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2dbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZ1syXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStnWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLHRoaXMudmVydGV4KGIsYyk7Zm9yKGU9MDtlPGk7ZSsrKXRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXguc2hpZnQoKX19ZWxzZSBpZigzPT09aSYmKHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMF0pLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMV0pLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXgucHVzaChhcmd1bWVudHNbMl0pLDEyPT09dGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5sZW5ndGgpKXtmb3IodGhpcy5pc0N1cnZlPSEwLGY9dGhpcy5fYmV6aWVyVG9DYXRtdWxsKFt0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzBdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbM10sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs2XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzldXSksZz10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMV0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs0XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzddLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMTBdXSksaD10aGlzLl9iZXppZXJUb0NhdG11bGwoW3RoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMl0sdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleFs1XSx0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4WzhdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXhbMTFdXSksZT0wO2U8bjtlKyspYj1mWzBdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzBdK2ZbMV0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMV0rZlsyXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsyXStmWzNdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzNdLGM9Z1swXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVswXStnWzFdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzFdK2dbMl0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMl0rZ1szXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVszXSxkPWhbMF0qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bMF0raFsxXSp0aGlzLl9sb29rVXBUYWJsZUJlemllcltlXVsxXStoWzJdKnRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyW2VdWzJdK2hbM10qdGhpcy5fbG9va1VwVGFibGVCZXppZXJbZV1bM10sdGhpcy52ZXJ0ZXgoYixjLGQpO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLmltbWVkaWF0ZU1vZGUuX2N1cnZlVmVydGV4LnNoaWZ0KCl9fSxiLmV4cG9ydHM9ZH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi9wNS5HZW9tZXRyeVwiOjcwfV0sNjU6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QucHJvdG90eXBlLm9yYml0Q29udHJvbD1mdW5jdGlvbihhLGIpe2lmKHRoaXMuX2Fzc2VydDNkKFwib3JiaXRDb250cm9sXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcIm9yYml0Q29udHJvbFwiLGFyZ3VtZW50cyksdGhpcy5tb3VzZVg8dGhpcy53aWR0aCYmdGhpcy5tb3VzZVg+MCYmdGhpcy5tb3VzZVk8dGhpcy5oZWlnaHQmJnRoaXMubW91c2VZPjApe3ZhciBjPXRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmE7dm9pZCAwPT09YSYmKGE9MSksdm9pZCAwPT09YiYmKGI9YSksITAhPT10aGlzLmNvbnRleHRNZW51RGlzYWJsZWQmJih0aGlzLmNhbnZhcy5vbmNvbnRleHRtZW51PWZ1bmN0aW9uKCl7cmV0dXJuITF9LHRoaXMuX3NldFByb3BlcnR5KFwiY29udGV4dE1lbnVEaXNhYmxlZFwiLCEwKSksITAhPT10aGlzLndoZWVsRGVmYXVsdERpc2FibGVkJiYodGhpcy5jYW52YXMub253aGVlbD1mdW5jdGlvbigpe3JldHVybiExfSx0aGlzLl9zZXRQcm9wZXJ0eShcIndoZWVsRGVmYXVsdERpc2FibGVkXCIsITApKTt2YXIgZT10aGlzLmhlaWdodDx0aGlzLndpZHRoP3RoaXMuaGVpZ2h0OnRoaXMud2lkdGg7aWYodGhpcy5fbW91c2VXaGVlbERlbHRhWSE9PXRoaXMuX3Btb3VzZVdoZWVsRGVsdGFZJiYodGhpcy5fbW91c2VXaGVlbERlbHRhWT4wP3RoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuX29yYml0KDAsMCwuNSplKTp0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLl9vcmJpdCgwLDAsLS41KmUpKSx0aGlzLm1vdXNlSXNQcmVzc2VkKWlmKHRoaXMubW91c2VCdXR0b249PT10aGlzLkxFRlQpe3ZhciBmPS1hKih0aGlzLm1vdXNlWC10aGlzLnBtb3VzZVgpL2UsZz1iKih0aGlzLm1vdXNlWS10aGlzLnBtb3VzZVkpL2U7dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5fb3JiaXQoZixnLDApfWVsc2UgaWYodGhpcy5tb3VzZUJ1dHRvbj09PXRoaXMuUklHSFQpe3ZhciBoPWMuX2dldExvY2FsQXhlcygpLGk9TWF0aC5zcXJ0KGgueFswXSpoLnhbMF0raC54WzJdKmgueFsyXSk7MCE9PWkmJihoLnhbMF0vPWksaC54WzJdLz1pKTt2YXIgaj1NYXRoLnNxcnQoaC55WzBdKmgueVswXStoLnlbMl0qaC55WzJdKTswIT09aiYmKGgueVswXS89aixoLnlbMl0vPWopO3ZhciBrPS0xKmEqKHRoaXMubW91c2VYLXRoaXMucG1vdXNlWCksbD0tMSpiKih0aGlzLm1vdXNlWS10aGlzLnBtb3VzZVkpO2Muc2V0UG9zaXRpb24oYy5leWVYK2sqaC54WzBdK2wqaC56WzBdLGMuZXllWSxjLmV5ZVoraypoLnhbMl0rbCpoLnpbMl0pfXJldHVybiB0aGlzfX0sZC5wcm90b3R5cGUuZGVidWdNb2RlPWZ1bmN0aW9uKCl7dGhpcy5fYXNzZXJ0M2QoXCJkZWJ1Z01vZGVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiZGVidWdNb2RlXCIsYXJndW1lbnRzKTtmb3IodmFyIGE9dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdC5sZW5ndGgtMTthPj0wO2EtLSl0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0W2FdLnRvU3RyaW5nKCkhPT10aGlzLl9ncmlkKCkudG9TdHJpbmcoKSYmdGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMucG9zdFthXS50b1N0cmluZygpIT09dGhpcy5fYXhlc0ljb24oKS50b1N0cmluZygpfHx0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0LnNwbGljZShhLDEpO2FyZ3VtZW50c1swXT09PWUuR1JJRD90aGlzLnJlZ2lzdGVyTWV0aG9kKFwicG9zdFwiLHRoaXMuX2dyaWQuY2FsbCh0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSxhcmd1bWVudHNbNV0pKTphcmd1bWVudHNbMF09PT1lLkFYRVM/dGhpcy5yZWdpc3Rlck1ldGhvZChcInBvc3RcIix0aGlzLl9heGVzSWNvbi5jYWxsKHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzRdKSk6KHRoaXMucmVnaXN0ZXJNZXRob2QoXCJwb3N0XCIsdGhpcy5fZ3JpZC5jYWxsKHRoaXMsYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSkpLHRoaXMucmVnaXN0ZXJNZXRob2QoXCJwb3N0XCIsdGhpcy5fYXhlc0ljb24uY2FsbCh0aGlzLGFyZ3VtZW50c1s1XSxhcmd1bWVudHNbNl0sYXJndW1lbnRzWzddLGFyZ3VtZW50c1s4XSkpKX0sZC5wcm90b3R5cGUubm9EZWJ1Z01vZGU9ZnVuY3Rpb24oKXt0aGlzLl9hc3NlcnQzZChcIm5vRGVidWdNb2RlXCIpO2Zvcih2YXIgYT10aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0Lmxlbmd0aC0xO2E+PTA7YS0tKXRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3RbYV0udG9TdHJpbmcoKSE9PXRoaXMuX2dyaWQoKS50b1N0cmluZygpJiZ0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5wb3N0W2FdLnRvU3RyaW5nKCkhPT10aGlzLl9heGVzSWNvbigpLnRvU3RyaW5nKCl8fHRoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLnBvc3Quc3BsaWNlKGEsMSl9LGQucHJvdG90eXBlLl9ncmlkPWZ1bmN0aW9uKGEsYixjLGQsZSl7dm9pZCAwPT09YSYmKGE9dGhpcy53aWR0aC8yKSx2b2lkIDA9PT1iJiYoYj1NYXRoLnJvdW5kKGEvMzApPDQ/NDpNYXRoLnJvdW5kKGEvMzApKSx2b2lkIDA9PT1jJiYoYz0wKSx2b2lkIDA9PT1kJiYoZD0wKSx2b2lkIDA9PT1lJiYoZT0wKTt2YXIgZj1hL2IsZz1hLzI7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5wdXNoKCksdGhpcy5zdHJva2UoMjU1KnRoaXMuX3JlbmRlcmVyLmN1clN0cm9rZUNvbG9yWzBdLDI1NSp0aGlzLl9yZW5kZXJlci5jdXJTdHJva2VDb2xvclsxXSwyNTUqdGhpcy5fcmVuZGVyZXIuY3VyU3Ryb2tlQ29sb3JbMl0pLHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeC5zZXQodGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFswXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzFdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFszXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzRdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs2XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzddLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs5XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEwXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEyXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzEzXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE1XSk7Zm9yKHZhciBhPTA7YTw9YjthKyspdGhpcy5iZWdpblNoYXBlKHRoaXMuTElORVMpLHRoaXMudmVydGV4KC1nK2MsZCxhKmYtZytlKSx0aGlzLnZlcnRleCgrZytjLGQsYSpmLWcrZSksdGhpcy5lbmRTaGFwZSgpO2Zvcih2YXIgaD0wO2g8PWI7aCsrKXRoaXMuYmVnaW5TaGFwZSh0aGlzLkxJTkVTKSx0aGlzLnZlcnRleChoKmYtZytjLGQsLWcrZSksdGhpcy52ZXJ0ZXgoaCpmLWcrYyxkLCtnK2UpLHRoaXMuZW5kU2hhcGUoKTt0aGlzLnBvcCgpfX0sZC5wcm90b3R5cGUuX2F4ZXNJY29uPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB2b2lkIDA9PT1hJiYoYT10aGlzLndpZHRoLzIwPjQwP3RoaXMud2lkdGgvMjA6NDApLHZvaWQgMD09PWImJihiPS10aGlzLndpZHRoLzQpLHZvaWQgMD09PWMmJihjPWIpLHZvaWQgMD09PWQmJihkPWIpLGZ1bmN0aW9uKCl7dGhpcy5wdXNoKCksdGhpcy5fcmVuZGVyZXIudU1WTWF0cml4LnNldCh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzBdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMV0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsyXSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzNdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNF0sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs1XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzZdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbN10sdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs4XSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzldLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTBdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTFdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTJdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTNdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTRdLHRoaXMuX3JlbmRlcmVyLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTVdKSx0aGlzLnN0cm9rZVdlaWdodCgyKSx0aGlzLnN0cm9rZSgyNTUsMCwwKSx0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoYixjLGQpLHRoaXMudmVydGV4KGIrYSxjLGQpLHRoaXMuZW5kU2hhcGUoKSx0aGlzLnN0cm9rZSgwLDI1NSwwKSx0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoYixjLGQpLHRoaXMudmVydGV4KGIsYythLGQpLHRoaXMuZW5kU2hhcGUoKSx0aGlzLnN0cm9rZSgwLDAsMjU1KSx0aGlzLmJlZ2luU2hhcGUodGhpcy5MSU5FUyksdGhpcy52ZXJ0ZXgoYixjLGQpLHRoaXMudmVydGV4KGIsYyxkK2EpLHRoaXMuZW5kU2hhcGUoKSx0aGlzLnBvcCgpfX0sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDY2OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5hbWJpZW50TGlnaHQ9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJhbWJpZW50TGlnaHRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiYW1iaWVudExpZ2h0XCIsYXJndW1lbnRzKTt2YXIgZj10aGlzLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxnPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBnLnNldFVuaWZvcm0oXCJ1VXNlTGlnaHRpbmdcIiwhMCksZy5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3IpLHRoaXMuX3JlbmRlcmVyLmFtYmllbnRMaWdodENvbG9ycy5wdXNoKGYuX2FycmF5WzBdLGYuX2FycmF5WzFdLGYuX2FycmF5WzJdKSxnLnNldFVuaWZvcm0oXCJ1QW1iaWVudENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuYW1iaWVudExpZ2h0Q29sb3JzKSxnLnNldFVuaWZvcm0oXCJ1QW1iaWVudExpZ2h0Q291bnRcIix0aGlzLl9yZW5kZXJlci5hbWJpZW50TGlnaHRDb2xvcnMubGVuZ3RoLzMpLHRoaXN9LGQucHJvdG90eXBlLmRpcmVjdGlvbmFsTGlnaHQ9ZnVuY3Rpb24oYSxiLGMsZSxmLGcpe3RoaXMuX2Fzc2VydDNkKFwiZGlyZWN0aW9uYWxMaWdodFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJkaXJlY3Rpb25hbExpZ2h0XCIsYXJndW1lbnRzKTt2YXIgaCxpPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO2g9YSBpbnN0YW5jZW9mIGQuQ29sb3I/YTp0aGlzLmNvbG9yKGEsYixjKTt2YXIgaixrLGwsbT1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtcIm51bWJlclwiPT10eXBlb2YgbT8oaj1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0zXSxrPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTJdLGw9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pOihqPW0ueCxrPW0ueSxsPW0ueiksaS5zZXRVbmlmb3JtKFwidVVzZUxpZ2h0aW5nXCIsITApLGkuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKTt2YXIgbj1NYXRoLnNxcnQoaipqK2sqaytsKmwpO3JldHVybiB0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucy5wdXNoKGovbixrL24sbC9uKSxpLnNldFVuaWZvcm0oXCJ1TGlnaHRpbmdEaXJlY3Rpb25cIix0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucyksdGhpcy5fcmVuZGVyZXIuZGlyZWN0aW9uYWxMaWdodENvbG9ycy5wdXNoKGguX2FycmF5WzBdLGguX2FycmF5WzFdLGguX2FycmF5WzJdKSxpLnNldFVuaWZvcm0oXCJ1RGlyZWN0aW9uYWxDb2xvclwiLHRoaXMuX3JlbmRlcmVyLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnMpLGkuc2V0VW5pZm9ybShcInVEaXJlY3Rpb25hbExpZ2h0Q291bnRcIix0aGlzLl9yZW5kZXJlci5kaXJlY3Rpb25hbExpZ2h0Q29sb3JzLmxlbmd0aC8zKSx0aGlzfSxkLnByb3RvdHlwZS5wb2ludExpZ2h0PWZ1bmN0aW9uKGEsYixjLGUsZixnKXt0aGlzLl9hc3NlcnQzZChcInBvaW50TGlnaHRcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwicG9pbnRMaWdodFwiLGFyZ3VtZW50cyk7dmFyIGg7aD1hIGluc3RhbmNlb2YgZC5Db2xvcj9hOnRoaXMuY29sb3IoYSxiLGMpO3ZhciBpLGosayxsPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdO1wibnVtYmVyXCI9PXR5cGVvZiBsPyhpPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTNdLGo9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMl0saz1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSk6KGk9bC54LGo9bC55LGs9bC56KTt2YXIgbT10aGlzLl9yZW5kZXJlci5fdXNlTGlnaHRTaGFkZXIoKTtyZXR1cm4gbS5zZXRVbmlmb3JtKFwidVVzZUxpZ2h0aW5nXCIsITApLG0uc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSx0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0UG9zaXRpb25zLnB1c2goaSxqLGspLG0uc2V0VW5pZm9ybShcInVQb2ludExpZ2h0TG9jYXRpb25cIix0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0UG9zaXRpb25zKSx0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0Q29sb3JzLnB1c2goaC5fYXJyYXlbMF0saC5fYXJyYXlbMV0saC5fYXJyYXlbMl0pLG0uc2V0VW5pZm9ybShcInVQb2ludExpZ2h0Q29sb3JcIix0aGlzLl9yZW5kZXJlci5wb2ludExpZ2h0Q29sb3JzKSxtLnNldFVuaWZvcm0oXCJ1UG9pbnRMaWdodENvdW50XCIsdGhpcy5fcmVuZGVyZXIucG9pbnRMaWdodENvbG9ycy5sZW5ndGgvMyksdGhpc30sYi5leHBvcnRzPWR9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNjc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7Zm9yKHZhciBjPXt2OltdLHZ0OltdLHZuOltdfSxkPXt9LGY9MDtmPGIubGVuZ3RoOysrZil7dmFyIGc9YltmXS50cmltKCkuc3BsaXQoL1xcYlxccysvKTtpZihnLmxlbmd0aD4wKWlmKFwidlwiPT09Z1swXXx8XCJ2blwiPT09Z1swXSl7dmFyIGg9bmV3IGUuVmVjdG9yKHBhcnNlRmxvYXQoZ1sxXSkscGFyc2VGbG9hdChnWzJdKSxwYXJzZUZsb2F0KGdbM10pKTtjW2dbMF1dLnB1c2goaCl9ZWxzZSBpZihcInZ0XCI9PT1nWzBdKXt2YXIgaT1bcGFyc2VGbG9hdChnWzFdKSxwYXJzZUZsb2F0KGdbMl0pXTtjW2dbMF1dLnB1c2goaSl9ZWxzZSBpZihcImZcIj09PWdbMF0pZm9yKHZhciBqPTM7ajxnLmxlbmd0aDsrK2ope2Zvcih2YXIgaz1bXSxsPVsxLGotMSxqXSxtPTA7bTxsLmxlbmd0aDsrK20pe3ZhciBuPWdbbFttXV0sbz0wO2lmKHZvaWQgMCE9PWRbbl0pbz1kW25dO2Vsc2V7Zm9yKHZhciBwPW4uc3BsaXQoXCIvXCIpLHE9MDtxPHAubGVuZ3RoO3ErKylwW3FdPXBhcnNlSW50KHBbcV0pLTE7bz1kW25dPWEudmVydGljZXMubGVuZ3RoLGEudmVydGljZXMucHVzaChjLnZbcFswXV0uY29weSgpKSxjLnZ0W3BbMV1dP2EudXZzLnB1c2goYy52dFtwWzFdXS5zbGljZSgpKTphLnV2cy5wdXNoKFswLDBdKSxjLnZuW3BbMl1dJiZhLnZlcnRleE5vcm1hbHMucHVzaChjLnZuW3BbMl1dLmNvcHkoKSl9ay5wdXNoKG8pfWtbMF0hPT1rWzFdJiZrWzBdIT09a1syXSYma1sxXSE9PWtbMl0mJmEuZmFjZXMucHVzaChrKX19cmV0dXJuIDA9PT1hLnZlcnRleE5vcm1hbHMubGVuZ3RoJiZhLmNvbXB1dGVOb3JtYWxzKCksYX12YXIgZT1hKFwiLi4vY29yZS9tYWluXCIpO2EoXCIuL3A1Lkdlb21ldHJ5XCIpLGUucHJvdG90eXBlLmxvYWRNb2RlbD1mdW5jdGlvbihhKXtlLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJsb2FkTW9kZWxcIixhcmd1bWVudHMpO3ZhciBiLGMsZjtcImJvb2xlYW5cIj09dHlwZW9mIGFyZ3VtZW50c1sxXT8oYj1hcmd1bWVudHNbMV0sYz1hcmd1bWVudHNbMl0sZj1hcmd1bWVudHNbM10pOihiPSExLGM9YXJndW1lbnRzWzFdLGY9YXJndW1lbnRzWzJdKTt2YXIgZz1uZXcgZS5HZW9tZXRyeTtnLmdpZD1hK1wifFwiK2I7dmFyIGg9dGhpcztyZXR1cm4gdGhpcy5sb2FkU3RyaW5ncyhhLGZ1bmN0aW9uKGEpe2QoZyxhKSxiJiZnLm5vcm1hbGl6ZSgpLGguX2RlY3JlbWVudFByZWxvYWQoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiZjKGcpfS5iaW5kKHRoaXMpLGYpLGd9LGUucHJvdG90eXBlLm1vZGVsPWZ1bmN0aW9uKGEpe3RoaXMuX2Fzc2VydDNkKFwibW9kZWxcIiksZS5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibW9kZWxcIixhcmd1bWVudHMpLGEudmVydGljZXMubGVuZ3RoPjAmJih0aGlzLl9yZW5kZXJlci5nZW9tZXRyeUluSGFzaChhLmdpZCl8fChhLl9tYWtlVHJpYW5nbGVFZGdlcygpLl9lZGdlc1RvVmVydGljZXMoKSx0aGlzLl9yZW5kZXJlci5jcmVhdGVCdWZmZXJzKGEuZ2lkLGEpKSx0aGlzLl9yZW5kZXJlci5kcmF3QnVmZmVycyhhLmdpZCkpfSxiLmV4cG9ydHM9ZX0se1wiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1Lkdlb21ldHJ5XCI6NzB9XSw2ODpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7YShcIi4vcDUuVGV4dHVyZVwiKSxkLnByb3RvdHlwZS5sb2FkU2hhZGVyPWZ1bmN0aW9uKGEsYil7ZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibG9hZFNoYWRlclwiLGFyZ3VtZW50cyk7dmFyIGM9bmV3IGQuU2hhZGVyLGU9dGhpcyxmPSExLGc9ITE7cmV0dXJuIHRoaXMubG9hZFN0cmluZ3MoYixmdW5jdGlvbihhKXtjLl9mcmFnU3JjPWEuam9pbihcIlxcblwiKSxmPSEwLGcmJmUuX2RlY3JlbWVudFByZWxvYWQoKX0pLHRoaXMubG9hZFN0cmluZ3MoYSxmdW5jdGlvbihhKXtjLl92ZXJ0U3JjPWEuam9pbihcIlxcblwiKSxnPSEwLGYmJmUuX2RlY3JlbWVudFByZWxvYWQoKX0pLGN9LGQucHJvdG90eXBlLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9hc3NlcnQzZChcImNyZWF0ZVNoYWRlclwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJjcmVhdGVTaGFkZXJcIixhcmd1bWVudHMpLG5ldyBkLlNoYWRlcih0aGlzLl9yZW5kZXJlcixhLGIpfSxkLnByb3RvdHlwZS5zaGFkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwic2hhZGVyXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNoYWRlclwiLGFyZ3VtZW50cyksdm9pZCAwPT09YS5fcmVuZGVyZXImJihhLl9yZW5kZXJlcj10aGlzLl9yZW5kZXJlciksYS5pc1N0cm9rZVNoYWRlcigpP3RoaXMuX3JlbmRlcmVyLnNldFN0cm9rZVNoYWRlcihhKTp0aGlzLl9yZW5kZXJlci5zZXRGaWxsU2hhZGVyKGEpLHRoaXN9LGQucHJvdG90eXBlLm5vcm1hbE1hdGVyaWFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fzc2VydDNkKFwibm9ybWFsTWF0ZXJpYWxcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwibm9ybWFsTWF0ZXJpYWxcIixhcmd1bWVudHMpLHRoaXMuX3JlbmRlcmVyLmRyYXdNb2RlPWUuRklMTCx0aGlzLl9yZW5kZXJlci5zZXRGaWxsU2hhZGVyKHRoaXMuX3JlbmRlcmVyLl9nZXROb3JtYWxTaGFkZXIoKSksdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yPVsxLDEsMSwxXSx0aGlzLm5vU3Ryb2tlKCksdGhpc30sZC5wcm90b3R5cGUudGV4dHVyZT1mdW5jdGlvbihhKXt0aGlzLl9hc3NlcnQzZChcInRleHR1cmVcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwidGV4dHVyZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuZHJhd01vZGU9ZS5URVhUVVJFO3ZhciBiPXRoaXMuX3JlbmRlcmVyLl91c2VMaWdodFNoYWRlcigpO3JldHVybiBiLnNldFVuaWZvcm0oXCJ1U3BlY3VsYXJcIiwhMSksYi5zZXRVbmlmb3JtKFwiaXNUZXh0dXJlXCIsITApLGIuc2V0VW5pZm9ybShcInVTYW1wbGVyXCIsYSksdGhpcy5ub1N0cm9rZSgpLHRoaXN9LGQucHJvdG90eXBlLmFtYmllbnRNYXRlcmlhbD1mdW5jdGlvbihhLGIsYyxlKXt0aGlzLl9hc3NlcnQzZChcImFtYmllbnRNYXRlcmlhbFwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJhbWJpZW50TWF0ZXJpYWxcIixhcmd1bWVudHMpO3ZhciBmPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3I9Zi5fYXJyYXk7dmFyIGc9dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIGcuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSxnLnNldFVuaWZvcm0oXCJ1U3BlY3VsYXJcIiwhMSksZy5zZXRVbmlmb3JtKFwiaXNUZXh0dXJlXCIsITEpLHRoaXN9LGQucHJvdG90eXBlLnNwZWN1bGFyTWF0ZXJpYWw9ZnVuY3Rpb24oYSxiLGMsZSl7dGhpcy5fYXNzZXJ0M2QoXCJzcGVjdWxhck1hdGVyaWFsXCIpLGQuX3ZhbGlkYXRlUGFyYW1ldGVycyhcInNwZWN1bGFyTWF0ZXJpYWxcIixhcmd1bWVudHMpO3ZhciBmPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9yZW5kZXJlci5jdXJGaWxsQ29sb3I9Zi5fYXJyYXk7dmFyIGc9dGhpcy5fcmVuZGVyZXIuX3VzZUxpZ2h0U2hhZGVyKCk7cmV0dXJuIGcuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsdGhpcy5fcmVuZGVyZXIuY3VyRmlsbENvbG9yKSxnLnNldFVuaWZvcm0oXCJ1U3BlY3VsYXJcIiwhMCksZy5zZXRVbmlmb3JtKFwiaXNUZXh0dXJlXCIsITEpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2FwcGx5Q29sb3JCbGVuZD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLkdMLGM9dGhpcy5kcmF3TW9kZT09PWUuVEVYVFVSRTtyZXR1cm4gY3x8YVthLmxlbmd0aC0xXTwxPyhiLmRlcHRoTWFzayhjKSxiLmVuYWJsZShiLkJMRU5EKSxiLmJsZW5kRXF1YXRpb24oYi5GVU5DX0FERCksYi5ibGVuZEZ1bmMoYi5TUkNfQUxQSEEsYi5PTkVfTUlOVVNfU1JDX0FMUEhBKSk6KGIuZGVwdGhNYXNrKCEwKSxiLmRpc2FibGUoYi5CTEVORCkpLGF9LGIuZXhwb3J0cz1kfSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LlRleHR1cmVcIjo3Nn1dLDY5OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLnByb3RvdHlwZS5jYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJjYW1lcmFcIiksZC5fdmFsaWRhdGVQYXJhbWV0ZXJzKFwiY2FtZXJhXCIsYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLmNhbWVyYS5hcHBseSh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUucGVyc3BlY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJwZXJzcGVjdGl2ZVwiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJwZXJzcGVjdGl2ZVwiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5wZXJzcGVjdGl2ZS5hcHBseSh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUub3J0aG89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXNzZXJ0M2QoXCJvcnRob1wiKSxkLl92YWxpZGF0ZVBhcmFtZXRlcnMoXCJvcnRob1wiLGFyZ3VtZW50cyksdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5vcnRoby5hcHBseSh0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhLGFyZ3VtZW50cyksdGhpc30sZC5wcm90b3R5cGUuY3JlYXRlQ2FtZXJhPWZ1bmN0aW9uKCl7dGhpcy5fYXNzZXJ0M2QoXCJjcmVhdGVDYW1lcmFcIik7dmFyIGE9bmV3IGQuQ2FtZXJhKHRoaXMuX3JlbmRlcmVyKTtyZXR1cm4gYS5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncygpLGEuX3NldERlZmF1bHRDYW1lcmEoKSx0aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhPWEsYX0sZC5DYW1lcmE9ZnVuY3Rpb24oYSl7dGhpcy5fcmVuZGVyZXI9YSx0aGlzLmNhbWVyYVR5cGU9XCJkZWZhdWx0XCIsdGhpcy5jYW1lcmFNYXRyaXg9bmV3IGQuTWF0cml4LHRoaXMucHJvak1hdHJpeD1uZXcgZC5NYXRyaXh9LGQuQ2FtZXJhLnByb3RvdHlwZS5wZXJzcGVjdGl2ZT1mdW5jdGlvbihhLGIsYyxlKXt2b2lkIDA9PT1hPyhhPXRoaXMuZGVmYXVsdENhbWVyYUZPVix0aGlzLmNhbWVyYUZPVj1hKTp0aGlzLmNhbWVyYUZPVj10aGlzLl9yZW5kZXJlci5fcEluc3QuX3RvUmFkaWFucyhhKSx2b2lkIDA9PT1iJiYoYj10aGlzLmRlZmF1bHRBc3BlY3RSYXRpbyksdm9pZCAwPT09YyYmKGM9dGhpcy5kZWZhdWx0Q2FtZXJhTmVhciksdm9pZCAwPT09ZSYmKGU9dGhpcy5kZWZhdWx0Q2FtZXJhRmFyKSxjPD0xZS00JiYoYz0uMDEsY29uc29sZS5sb2coXCJBdm9pZCBwZXJzcGVjdGl2ZSBuZWFyIHBsYW5lIHZhbHVlcyBjbG9zZSB0byBvciBiZWxvdyAwLiBTZXR0aW5nIHZhbHVlIHRvIDAuMDEuXCIpKSxlPGMmJmNvbnNvbGUubG9nKFwiUGVyc3BlY3RpdmUgZmFyIHBsYW5lIHZhbHVlIGlzIGxlc3MgdGhhbiBuZWFyIHBsYW5lIHZhbHVlLiBOb3RoaW5nIHdpbGwgYmUgc2hvd24uXCIpLHRoaXMuY2FtZXJhRk9WPXRoaXMuX3JlbmRlcmVyLl9wSW5zdC5fdG9SYWRpYW5zKGEpLHRoaXMuYXNwZWN0UmF0aW89Yix0aGlzLmNhbWVyYU5lYXI9Yyx0aGlzLmNhbWVyYUZhcj1lLHRoaXMucHJvak1hdHJpeD1kLk1hdHJpeC5pZGVudGl0eSgpO3ZhciBmPTEvTWF0aC50YW4odGhpcy5jYW1lcmFGT1YvMiksZz0xLyh0aGlzLmNhbWVyYU5lYXItdGhpcy5jYW1lcmFGYXIpO3RoaXMucHJvak1hdHJpeC5zZXQoZi9iLDAsMCwwLDAsLWYsMCwwLDAsMCwoZStjKSpnLC0xLDAsMCwyKmUqYypnLDApLHRoaXMuX2lzQWN0aXZlKCkmJnRoaXMuX3JlbmRlcmVyLnVQTWF0cml4LnNldCh0aGlzLnByb2pNYXRyaXgubWF0NFswXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxXSx0aGlzLnByb2pNYXRyaXgubWF0NFsyXSx0aGlzLnByb2pNYXRyaXgubWF0NFszXSx0aGlzLnByb2pNYXRyaXgubWF0NFs0XSx0aGlzLnByb2pNYXRyaXgubWF0NFs1XSx0aGlzLnByb2pNYXRyaXgubWF0NFs2XSx0aGlzLnByb2pNYXRyaXgubWF0NFs3XSx0aGlzLnByb2pNYXRyaXgubWF0NFs4XSx0aGlzLnByb2pNYXRyaXgubWF0NFs5XSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTFdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzEyXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxM10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTRdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzE1XSksdGhpcy5jYW1lcmFUeXBlPVwiY3VzdG9tXCJ9LGQuQ2FtZXJhLnByb3RvdHlwZS5vcnRobz1mdW5jdGlvbihhLGIsYyxlLGYsZyl7dm9pZCAwPT09YSYmKGE9LXRoaXMuX3JlbmRlcmVyLndpZHRoLzIpLHZvaWQgMD09PWImJihiPSt0aGlzLl9yZW5kZXJlci53aWR0aC8yKSx2b2lkIDA9PT1jJiYoYz0tdGhpcy5fcmVuZGVyZXIuaGVpZ2h0LzIpLHZvaWQgMD09PWUmJihlPSt0aGlzLl9yZW5kZXJlci5oZWlnaHQvMiksdm9pZCAwPT09ZiYmKGY9MCksdm9pZCAwPT09ZyYmKGc9TWF0aC5tYXgodGhpcy5fcmVuZGVyZXIud2lkdGgsdGhpcy5fcmVuZGVyZXIuaGVpZ2h0KSk7dmFyIGg9Yi1hLGk9ZS1jLGo9Zy1mLGs9Mi9oLGw9Mi9pLG09LTIvaixuPS0oYithKS9oLG89LShlK2MpL2kscD0tKGcrZikvajt0aGlzLnByb2pNYXRyaXg9ZC5NYXRyaXguaWRlbnRpdHkoKSx0aGlzLnByb2pNYXRyaXguc2V0KGssMCwwLDAsMCwtbCwwLDAsMCwwLG0sMCxuLG8scCwxKSx0aGlzLl9pc0FjdGl2ZSgpJiZ0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5zZXQodGhpcy5wcm9qTWF0cml4Lm1hdDRbMF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbM10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbNl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbN10sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOF0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbOV0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTBdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzExXSx0aGlzLnByb2pNYXRyaXgubWF0NFsxMl0sdGhpcy5wcm9qTWF0cml4Lm1hdDRbMTNdLHRoaXMucHJvak1hdHJpeC5tYXQ0WzE0XSx0aGlzLnByb2pNYXRyaXgubWF0NFsxNV0pLHRoaXMuY2FtZXJhVHlwZT1cImN1c3RvbVwifSxkLkNhbWVyYS5wcm90b3R5cGUuX3JvdGF0ZVZpZXc9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9dGhpcy5jZW50ZXJYLGc9dGhpcy5jZW50ZXJZLGg9dGhpcy5jZW50ZXJaO2YtPXRoaXMuZXllWCxnLT10aGlzLmV5ZVksaC09dGhpcy5leWVaO3ZhciBpPWQuTWF0cml4LmlkZW50aXR5KHRoaXMuX3JlbmRlcmVyLl9wSW5zdCk7aS5yb3RhdGUoYSxiLGMsZSk7dmFyIGo9W2YqaS5tYXQ0WzBdK2cqaS5tYXQ0WzRdK2gqaS5tYXQ0WzhdLGYqaS5tYXQ0WzFdK2cqaS5tYXQ0WzVdK2gqaS5tYXQ0WzldLGYqaS5tYXQ0WzJdK2cqaS5tYXQ0WzZdK2gqaS5tYXQ0WzEwXV07alswXSs9dGhpcy5leWVYLGpbMV0rPXRoaXMuZXllWSxqWzJdKz10aGlzLmV5ZVosdGhpcy5jYW1lcmEodGhpcy5leWVYLHRoaXMuZXllWSx0aGlzLmV5ZVosalswXSxqWzFdLGpbMl0sdGhpcy51cFgsdGhpcy51cFksdGhpcy51cFopfSxkLkNhbWVyYS5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldExvY2FsQXhlcygpO3RoaXMuX3JvdGF0ZVZpZXcoYSxiLnlbMF0sYi55WzFdLGIueVsyXSl9LGQuQ2FtZXJhLnByb3RvdHlwZS50aWx0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuX2dldExvY2FsQXhlcygpO3RoaXMuX3JvdGF0ZVZpZXcoYSxiLnhbMF0sYi54WzFdLGIueFsyXSl9LGQuQ2FtZXJhLnByb3RvdHlwZS5sb29rQXQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuY2FtZXJhKHRoaXMuZXllWCx0aGlzLmV5ZVksdGhpcy5leWVaLGEsYixjLHRoaXMudXBYLHRoaXMudXBZLHRoaXMudXBaKX0sZC5DYW1lcmEucHJvdG90eXBlLmNhbWVyYT1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSl7dm9pZCAwPT09YSYmKGE9dGhpcy5kZWZhdWx0RXllWCxiPXRoaXMuZGVmYXVsdEV5ZVksYz10aGlzLmRlZmF1bHRFeWVaLGQ9YSxlPWIsZj0wLGc9MCxoPTEsaT0wKSx0aGlzLmV5ZVg9YSx0aGlzLmV5ZVk9Yix0aGlzLmV5ZVo9Yyx0aGlzLmNlbnRlclg9ZCx0aGlzLmNlbnRlclk9ZSx0aGlzLmNlbnRlclo9Zix0aGlzLnVwWD1nLHRoaXMudXBZPWgsdGhpcy51cFo9aTt2YXIgaj10aGlzLl9nZXRMb2NhbEF4ZXMoKTt0aGlzLmNhbWVyYU1hdHJpeC5zZXQoai54WzBdLGoueVswXSxqLnpbMF0sMCxqLnhbMV0sai55WzFdLGouelsxXSwwLGoueFsyXSxqLnlbMl0sai56WzJdLDAsMCwwLDAsMSk7dmFyIGs9LWEsbD0tYixtPS1jO3JldHVybiB0aGlzLmNhbWVyYU1hdHJpeC50cmFuc2xhdGUoW2ssbCxtXSksdGhpcy5faXNBY3RpdmUoKSYmdGhpcy5fcmVuZGVyZXIudU1WTWF0cml4LnNldCh0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzBdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMV0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFsyXSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzNdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbNF0sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs1XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzZdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbN10sdGhpcy5jYW1lcmFNYXRyaXgubWF0NFs4XSx0aGlzLmNhbWVyYU1hdHJpeC5tYXQ0WzldLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTBdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTFdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTJdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTNdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTRdLHRoaXMuY2FtZXJhTWF0cml4Lm1hdDRbMTVdKSx0aGlzfSxkLkNhbWVyYS5wcm90b3R5cGUubW92ZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fZ2V0TG9jYWxBeGVzKCksZT1bZC54WzBdKmEsZC54WzFdKmEsZC54WzJdKmFdLGY9W2QueVswXSpiLGQueVsxXSpiLGQueVsyXSpiXSxnPVtkLnpbMF0qYyxkLnpbMV0qYyxkLnpbMl0qY107dGhpcy5jYW1lcmEodGhpcy5leWVYK2VbMF0rZlswXStnWzBdLHRoaXMuZXllWStlWzFdK2ZbMV0rZ1sxXSx0aGlzLmV5ZVorZVsyXStmWzJdK2dbMl0sdGhpcy5jZW50ZXJYK2VbMF0rZlswXStnWzBdLHRoaXMuY2VudGVyWStlWzFdK2ZbMV0rZ1sxXSx0aGlzLmNlbnRlclorZVsyXStmWzJdK2dbMl0sMCwxLDApfSxkLkNhbWVyYS5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEtdGhpcy5leWVYLGU9Yi10aGlzLmV5ZVksZj1jLXRoaXMuZXllWjt0aGlzLmNhbWVyYShhLGIsYyx0aGlzLmNlbnRlclgrZCx0aGlzLmNlbnRlclkrZSx0aGlzLmNlbnRlclorZiwwLDEsMCl9LGQuQ2FtZXJhLnByb3RvdHlwZS5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncz1mdW5jdGlvbigpe3RoaXMuZGVmYXVsdENhbWVyYUZPVj02MC8xODAqTWF0aC5QSSxcbnRoaXMuZGVmYXVsdEFzcGVjdFJhdGlvPXRoaXMuX3JlbmRlcmVyLndpZHRoL3RoaXMuX3JlbmRlcmVyLmhlaWdodCx0aGlzLmRlZmF1bHRFeWVYPTAsdGhpcy5kZWZhdWx0RXllWT0wLHRoaXMuZGVmYXVsdEV5ZVo9dGhpcy5fcmVuZGVyZXIuaGVpZ2h0LzIvTWF0aC50YW4odGhpcy5kZWZhdWx0Q2FtZXJhRk9WLzIpLHRoaXMuZGVmYXVsdENlbnRlclg9MCx0aGlzLmRlZmF1bHRDZW50ZXJZPTAsdGhpcy5kZWZhdWx0Q2VudGVyWj0wLHRoaXMuZGVmYXVsdENhbWVyYU5lYXI9LjEqdGhpcy5kZWZhdWx0RXllWix0aGlzLmRlZmF1bHRDYW1lcmFGYXI9MTAqdGhpcy5kZWZhdWx0RXllWn0sZC5DYW1lcmEucHJvdG90eXBlLl9zZXREZWZhdWx0Q2FtZXJhPWZ1bmN0aW9uKCl7dGhpcy5jYW1lcmFGT1Y9dGhpcy5kZWZhdWx0Q2FtZXJhRk9WLHRoaXMuYXNwZWN0UmF0aW89dGhpcy5kZWZhdWx0QXNwZWN0UmF0aW8sdGhpcy5leWVYPXRoaXMuZGVmYXVsdEV5ZVgsdGhpcy5leWVZPXRoaXMuZGVmYXVsdEV5ZVksdGhpcy5leWVaPXRoaXMuZGVmYXVsdEV5ZVosdGhpcy5jZW50ZXJYPXRoaXMuZGVmYXVsdENlbnRlclgsdGhpcy5jZW50ZXJZPXRoaXMuZGVmYXVsdENlbnRlclksdGhpcy5jZW50ZXJaPXRoaXMuZGVmYXVsdENlbnRlclosdGhpcy51cFg9MCx0aGlzLnVwWT0xLHRoaXMudXBaPTAsdGhpcy5jYW1lcmFOZWFyPXRoaXMuZGVmYXVsdENhbWVyYU5lYXIsdGhpcy5jYW1lcmFGYXI9dGhpcy5kZWZhdWx0Q2FtZXJhRmFyLHRoaXMucGVyc3BlY3RpdmUoKSx0aGlzLmNhbWVyYSgpLHRoaXMuY2FtZXJhVHlwZT1cImRlZmF1bHRcIn0sZC5DYW1lcmEucHJvdG90eXBlLl9yZXNpemU9ZnVuY3Rpb24oKXtcImRlZmF1bHRcIj09PXRoaXMuY2FtZXJhVHlwZT8odGhpcy5fY29tcHV0ZUNhbWVyYURlZmF1bHRTZXR0aW5ncygpLHRoaXMuX3NldERlZmF1bHRDYW1lcmEoKSk6dGhpcy5wZXJzcGVjdGl2ZSh0aGlzLmNhbWVyYUZPVix0aGlzLl9yZW5kZXJlci53aWR0aC90aGlzLl9yZW5kZXJlci5oZWlnaHQpfSxkLkNhbWVyYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkLkNhbWVyYSh0aGlzLl9yZW5kZXJlcik7cmV0dXJuIGEuY2FtZXJhRk9WPXRoaXMuY2FtZXJhRk9WLGEuYXNwZWN0UmF0aW89dGhpcy5hc3BlY3RSYXRpbyxhLmV5ZVg9dGhpcy5leWVYLGEuZXllWT10aGlzLmV5ZVksYS5leWVaPXRoaXMuZXllWixhLmNlbnRlclg9dGhpcy5jZW50ZXJYLGEuY2VudGVyWT10aGlzLmNlbnRlclksYS5jZW50ZXJaPXRoaXMuY2VudGVyWixhLmNhbWVyYU5lYXI9dGhpcy5jYW1lcmFOZWFyLGEuY2FtZXJhRmFyPXRoaXMuY2FtZXJhRmFyLGEuY2FtZXJhVHlwZT10aGlzLmNhbWVyYVR5cGUsYS5jYW1lcmFNYXRyaXg9dGhpcy5jYW1lcmFNYXRyaXguY29weSgpLGEucHJvak1hdHJpeD10aGlzLnByb2pNYXRyaXguY29weSgpLGF9LGQuQ2FtZXJhLnByb3RvdHlwZS5fZ2V0TG9jYWxBeGVzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5leWVYLXRoaXMuY2VudGVyWCxiPXRoaXMuZXllWS10aGlzLmNlbnRlclksYz10aGlzLmV5ZVotdGhpcy5jZW50ZXJaLGQ9TWF0aC5zcXJ0KGEqYStiKmIrYypjKTswIT09ZCYmKGEvPWQsYi89ZCxjLz1kKTt2YXIgZT10aGlzLnVwWCxmPXRoaXMudXBZLGc9dGhpcy51cFosaD1mKmMtZypiLGk9LWUqYytnKmEsaj1lKmItZiphO2U9YipqLWMqaSxmPS1hKmorYypoLGc9YSppLWIqaDt2YXIgaz1NYXRoLnNxcnQoaCpoK2kqaStqKmopOzAhPT1rJiYoaC89ayxpLz1rLGovPWspO3ZhciBsPU1hdGguc3FydChlKmUrZipmK2cqZyk7cmV0dXJuIDAhPT1sJiYoZS89bCxmLz1sLGcvPWwpLHt4OltoLGksal0seTpbZSxmLGddLHo6W2EsYixjXX19LGQuQ2FtZXJhLnByb3RvdHlwZS5fb3JiaXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuZXllWC10aGlzLmNlbnRlclgsZT10aGlzLmV5ZVktdGhpcy5jZW50ZXJZLGY9dGhpcy5leWVaLXRoaXMuY2VudGVyWixnPU1hdGguc3FydChkKmQrZSplK2YqZiksaD1NYXRoLmF0YW4yKGQsZiksaT1NYXRoLmFjb3MoTWF0aC5tYXgoLTEsTWF0aC5taW4oMSxlL2cpKSk7aCs9YSxpKz1iLGcrPWMsZzwwJiYoZz0uMSksaT5NYXRoLlBJP2k9TWF0aC5QSTppPD0wJiYoaT0uMDAxKTt2YXIgaj1NYXRoLnNpbihpKSpnKk1hdGguc2luKGgpLGs9TWF0aC5jb3MoaSkqZyxsPU1hdGguc2luKGkpKmcqTWF0aC5jb3MoaCk7dGhpcy5jYW1lcmEoait0aGlzLmNlbnRlclgsayt0aGlzLmNlbnRlclksbCt0aGlzLmNlbnRlclosdGhpcy5jZW50ZXJYLHRoaXMuY2VudGVyWSx0aGlzLmNlbnRlclosMCwxLDApfSxkLkNhbWVyYS5wcm90b3R5cGUuX2lzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT10aGlzLl9yZW5kZXJlci5fY3VyQ2FtZXJhfSxkLnByb3RvdHlwZS5zZXRDYW1lcmE9ZnVuY3Rpb24oYSl7dGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYT1hLHRoaXMuX3JlbmRlcmVyLnVQTWF0cml4LnNldChhLnByb2pNYXRyaXgubWF0NFswXSxhLnByb2pNYXRyaXgubWF0NFsxXSxhLnByb2pNYXRyaXgubWF0NFsyXSxhLnByb2pNYXRyaXgubWF0NFszXSxhLnByb2pNYXRyaXgubWF0NFs0XSxhLnByb2pNYXRyaXgubWF0NFs1XSxhLnByb2pNYXRyaXgubWF0NFs2XSxhLnByb2pNYXRyaXgubWF0NFs3XSxhLnByb2pNYXRyaXgubWF0NFs4XSxhLnByb2pNYXRyaXgubWF0NFs5XSxhLnByb2pNYXRyaXgubWF0NFsxMF0sYS5wcm9qTWF0cml4Lm1hdDRbMTFdLGEucHJvak1hdHJpeC5tYXQ0WzEyXSxhLnByb2pNYXRyaXgubWF0NFsxM10sYS5wcm9qTWF0cml4Lm1hdDRbMTRdLGEucHJvak1hdHJpeC5tYXQ0WzE1XSl9LGIuZXhwb3J0cz1kLkNhbWVyYX0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3MDpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIik7ZC5HZW9tZXRyeT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMudmVydGljZXM9W10sdGhpcy5saW5lVmVydGljZXM9W10sdGhpcy5saW5lTm9ybWFscz1bXSx0aGlzLnZlcnRleE5vcm1hbHM9W10sdGhpcy5mYWNlcz1bXSx0aGlzLnV2cz1bXSx0aGlzLmVkZ2VzPVtdLHRoaXMuZGV0YWlsWD12b2lkIDAhPT1hP2E6MSx0aGlzLmRldGFpbFk9dm9pZCAwIT09Yj9iOjEsYyBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZjLmNhbGwodGhpcyksdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuY29tcHV0ZUZhY2VzPWZ1bmN0aW9uKCl7dGhpcy5mYWNlcy5sZW5ndGg9MDtmb3IodmFyIGEsYixjLGQsZT10aGlzLmRldGFpbFgrMSxmPTA7Zjx0aGlzLmRldGFpbFk7ZisrKWZvcih2YXIgZz0wO2c8dGhpcy5kZXRhaWxYO2crKylhPWYqZStnLGI9ZiplK2crMSxjPShmKzEpKmUrZysxLGQ9KGYrMSkqZStnLHRoaXMuZmFjZXMucHVzaChbYSxiLGRdKSx0aGlzLmZhY2VzLnB1c2goW2QsYixjXSk7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLl9nZXRGYWNlTm9ybWFsPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZmFjZXNbYV0sYz10aGlzLnZlcnRpY2VzW2JbMF1dLGU9dGhpcy52ZXJ0aWNlc1tiWzFdXSxmPXRoaXMudmVydGljZXNbYlsyXV0sZz1kLlZlY3Rvci5zdWIoZSxjKSxoPWQuVmVjdG9yLnN1YihmLGMpLGk9ZC5WZWN0b3IuY3Jvc3MoZyxoKSxqPWQuVmVjdG9yLm1hZyhpKSxrPWovKGQuVmVjdG9yLm1hZyhnKSpkLlZlY3Rvci5tYWcoaCkpO3JldHVybiAwPT09a3x8aXNOYU4oayk/KGNvbnNvbGUud2FybihcInA1Lkdlb21ldHJ5LnByb3RvdHlwZS5fZ2V0RmFjZU5vcm1hbDpcIixcImZhY2UgaGFzIGNvbGluZWFyIHNpZGVzIG9yIGEgcmVwZWF0ZWQgdmVydGV4XCIpLGkpOihrPjEmJihrPTEpLGkubXVsdChNYXRoLmFzaW4oaykvaikpfSxkLkdlb21ldHJ5LnByb3RvdHlwZS5jb21wdXRlTm9ybWFscz1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy52ZXJ0ZXhOb3JtYWxzLGM9dGhpcy52ZXJ0aWNlcyxlPXRoaXMuZmFjZXM7Zm9yKGIubGVuZ3RoPTAsYT0wO2E8Yy5sZW5ndGg7KythKWIucHVzaChuZXcgZC5WZWN0b3IpO2Zvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7KytmKWZvcih2YXIgZz1lW2ZdLGg9dGhpcy5fZ2V0RmFjZU5vcm1hbChmKSxpPTA7aTwzOysraSl7dmFyIGo9Z1tpXTtiW2pdLmFkZChoKX1mb3IoYT0wO2E8Yy5sZW5ndGg7KythKWJbYV0ubm9ybWFsaXplKCk7cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLmF2ZXJhZ2VOb3JtYWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTw9dGhpcy5kZXRhaWxZO2ErKyl7dmFyIGI9dGhpcy5kZXRhaWxYKzEsYz1kLlZlY3Rvci5hZGQodGhpcy52ZXJ0ZXhOb3JtYWxzW2EqYl0sdGhpcy52ZXJ0ZXhOb3JtYWxzW2EqYit0aGlzLmRldGFpbFhdKTtjPWQuVmVjdG9yLmRpdihjLDIpLHRoaXMudmVydGV4Tm9ybWFsc1thKmJdPWMsdGhpcy52ZXJ0ZXhOb3JtYWxzW2EqYit0aGlzLmRldGFpbFhdPWN9cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLmF2ZXJhZ2VQb2xlTm9ybWFscz1mdW5jdGlvbigpe2Zvcih2YXIgYT1uZXcgZC5WZWN0b3IoMCwwLDApLGI9MDtiPHRoaXMuZGV0YWlsWDtiKyspYS5hZGQodGhpcy52ZXJ0ZXhOb3JtYWxzW2JdKTtmb3IoYT1kLlZlY3Rvci5kaXYoYSx0aGlzLmRldGFpbFgpLGI9MDtiPHRoaXMuZGV0YWlsWDtiKyspdGhpcy52ZXJ0ZXhOb3JtYWxzW2JdPWE7Zm9yKGE9bmV3IGQuVmVjdG9yKDAsMCwwKSxiPXRoaXMudmVydGljZXMubGVuZ3RoLTE7Yj50aGlzLnZlcnRpY2VzLmxlbmd0aC0xLXRoaXMuZGV0YWlsWDtiLS0pYS5hZGQodGhpcy52ZXJ0ZXhOb3JtYWxzW2JdKTtmb3IoYT1kLlZlY3Rvci5kaXYoYSx0aGlzLmRldGFpbFgpLGI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMTtiPnRoaXMudmVydGljZXMubGVuZ3RoLTEtdGhpcy5kZXRhaWxYO2ItLSl0aGlzLnZlcnRleE5vcm1hbHNbYl09YTtyZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuX21ha2VUcmlhbmdsZUVkZ2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5lZGdlcy5sZW5ndGg9MCxBcnJheS5pc0FycmF5KHRoaXMuc3Ryb2tlSW5kaWNlcykpZm9yKHZhciBhPTAsYj10aGlzLnN0cm9rZUluZGljZXMubGVuZ3RoO2E8YjthKyspdGhpcy5lZGdlcy5wdXNoKHRoaXMuc3Ryb2tlSW5kaWNlc1thXSk7ZWxzZSBmb3IodmFyIGM9MDtjPHRoaXMuZmFjZXMubGVuZ3RoO2MrKyl0aGlzLmVkZ2VzLnB1c2goW3RoaXMuZmFjZXNbY11bMF0sdGhpcy5mYWNlc1tjXVsxXV0pLHRoaXMuZWRnZXMucHVzaChbdGhpcy5mYWNlc1tjXVsxXSx0aGlzLmZhY2VzW2NdWzJdXSksdGhpcy5lZGdlcy5wdXNoKFt0aGlzLmZhY2VzW2NdWzJdLHRoaXMuZmFjZXNbY11bMF1dKTtyZXR1cm4gdGhpc30sZC5HZW9tZXRyeS5wcm90b3R5cGUuX2VkZ2VzVG9WZXJ0aWNlcz1mdW5jdGlvbigpe3RoaXMubGluZVZlcnRpY2VzLmxlbmd0aD0wLHRoaXMubGluZU5vcm1hbHMubGVuZ3RoPTA7Zm9yKHZhciBhPTA7YTx0aGlzLmVkZ2VzLmxlbmd0aDthKyspe3ZhciBiPXRoaXMudmVydGljZXNbdGhpcy5lZGdlc1thXVswXV0sYz10aGlzLnZlcnRpY2VzW3RoaXMuZWRnZXNbYV1bMV1dLGQ9Yy5jb3B5KCkuc3ViKGIpLm5vcm1hbGl6ZSgpLGU9Yi5hcnJheSgpLGY9Yi5hcnJheSgpLGc9Yy5hcnJheSgpLGg9Yy5hcnJheSgpLGk9ZC5hcnJheSgpLGo9ZC5hcnJheSgpO2kucHVzaCgxKSxqLnB1c2goLTEpLHRoaXMubGluZU5vcm1hbHMucHVzaChpLGosaSxpLGosaiksdGhpcy5saW5lVmVydGljZXMucHVzaChlLGYsZyxnLGYsaCl9cmV0dXJuIHRoaXN9LGQuR2VvbWV0cnkucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMudmVydGljZXMubGVuZ3RoPjApe2Zvcih2YXIgYT10aGlzLnZlcnRpY2VzWzBdLmNvcHkoKSxiPXRoaXMudmVydGljZXNbMF0uY29weSgpLGM9MDtjPHRoaXMudmVydGljZXMubGVuZ3RoO2MrKylhLng9TWF0aC5tYXgoYS54LHRoaXMudmVydGljZXNbY10ueCksYi54PU1hdGgubWluKGIueCx0aGlzLnZlcnRpY2VzW2NdLngpLGEueT1NYXRoLm1heChhLnksdGhpcy52ZXJ0aWNlc1tjXS55KSxiLnk9TWF0aC5taW4oYi55LHRoaXMudmVydGljZXNbY10ueSksYS56PU1hdGgubWF4KGEueix0aGlzLnZlcnRpY2VzW2NdLnopLGIuej1NYXRoLm1pbihiLnosdGhpcy52ZXJ0aWNlc1tjXS56KTt2YXIgZT1kLlZlY3Rvci5sZXJwKGEsYiwuNSksZj1kLlZlY3Rvci5zdWIoYSxiKSxnPU1hdGgubWF4KE1hdGgubWF4KGYueCxmLnkpLGYueiksaD0yMDAvZztmb3IoYz0wO2M8dGhpcy52ZXJ0aWNlcy5sZW5ndGg7YysrKXRoaXMudmVydGljZXNbY10uc3ViKGUpLHRoaXMudmVydGljZXNbY10ubXVsdChoKX1yZXR1cm4gdGhpc30sYi5leHBvcnRzPWQuR2VvbWV0cnl9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzE6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9QXJyYXksZj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5fTtcInVuZGVmaW5lZFwiIT10eXBlb2YgRmxvYXQzMkFycmF5JiYoZT1GbG9hdDMyQXJyYXksZj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5fHxhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fSksZC5NYXRyaXg9ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGI9MDtiPGEubGVuZ3RoOysrYilhW2JdPWFyZ3VtZW50c1tiXTtyZXR1cm4gYS5sZW5ndGgmJmFbYS5sZW5ndGgtMV1pbnN0YW5jZW9mIGQmJih0aGlzLnA1PWFbYS5sZW5ndGgtMV0pLFwibWF0M1wiPT09YVswXT90aGlzLm1hdDM9QXJyYXkuaXNBcnJheShhWzFdKT9hWzFdOm5ldyBlKFsxLDAsMCwwLDEsMCwwLDAsMV0pOnRoaXMubWF0ND1BcnJheS5pc0FycmF5KGFbMF0pP2FbMF06bmV3IGUoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKSx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgZC5NYXRyaXg/KHRoaXMubWF0ND1hLm1hdDQsdGhpcyk6ZihhKT8odGhpcy5tYXQ0PWEsdGhpcyk6KDE2PT09YXJndW1lbnRzLmxlbmd0aCYmKHRoaXMubWF0NFswXT1hcmd1bWVudHNbMF0sdGhpcy5tYXQ0WzFdPWFyZ3VtZW50c1sxXSx0aGlzLm1hdDRbMl09YXJndW1lbnRzWzJdLHRoaXMubWF0NFszXT1hcmd1bWVudHNbM10sdGhpcy5tYXQ0WzRdPWFyZ3VtZW50c1s0XSx0aGlzLm1hdDRbNV09YXJndW1lbnRzWzVdLHRoaXMubWF0NFs2XT1hcmd1bWVudHNbNl0sdGhpcy5tYXQ0WzddPWFyZ3VtZW50c1s3XSx0aGlzLm1hdDRbOF09YXJndW1lbnRzWzhdLHRoaXMubWF0NFs5XT1hcmd1bWVudHNbOV0sdGhpcy5tYXQ0WzEwXT1hcmd1bWVudHNbMTBdLHRoaXMubWF0NFsxMV09YXJndW1lbnRzWzExXSx0aGlzLm1hdDRbMTJdPWFyZ3VtZW50c1sxMl0sdGhpcy5tYXQ0WzEzXT1hcmd1bWVudHNbMTNdLHRoaXMubWF0NFsxNF09YXJndW1lbnRzWzE0XSx0aGlzLm1hdDRbMTVdPWFyZ3VtZW50c1sxNV0pLHRoaXMpfSxkLk1hdHJpeC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkLk1hdHJpeCh0aGlzLm1hdDQsdGhpcy5wNSl9LGQuTWF0cml4LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGQuTWF0cml4KHRoaXMucDUpO3JldHVybiBhLm1hdDRbMF09dGhpcy5tYXQ0WzBdLGEubWF0NFsxXT10aGlzLm1hdDRbMV0sYS5tYXQ0WzJdPXRoaXMubWF0NFsyXSxhLm1hdDRbM109dGhpcy5tYXQ0WzNdLGEubWF0NFs0XT10aGlzLm1hdDRbNF0sYS5tYXQ0WzVdPXRoaXMubWF0NFs1XSxhLm1hdDRbNl09dGhpcy5tYXQ0WzZdLGEubWF0NFs3XT10aGlzLm1hdDRbN10sYS5tYXQ0WzhdPXRoaXMubWF0NFs4XSxhLm1hdDRbOV09dGhpcy5tYXQ0WzldLGEubWF0NFsxMF09dGhpcy5tYXQ0WzEwXSxhLm1hdDRbMTFdPXRoaXMubWF0NFsxMV0sYS5tYXQ0WzEyXT10aGlzLm1hdDRbMTJdLGEubWF0NFsxM109dGhpcy5tYXQ0WzEzXSxhLm1hdDRbMTRdPXRoaXMubWF0NFsxNF0sYS5tYXQ0WzE1XT10aGlzLm1hdDRbMTVdLGF9LGQuTWF0cml4LmlkZW50aXR5PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgZC5NYXRyaXgoYSl9LGQuTWF0cml4LnByb3RvdHlwZS50cmFuc3Bvc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGcsaCxpO3JldHVybiBhIGluc3RhbmNlb2YgZC5NYXRyaXg/KGI9YS5tYXQ0WzFdLGM9YS5tYXQ0WzJdLGU9YS5tYXQ0WzNdLGc9YS5tYXQ0WzZdLGg9YS5tYXQ0WzddLGk9YS5tYXQ0WzExXSx0aGlzLm1hdDRbMF09YS5tYXQ0WzBdLHRoaXMubWF0NFsxXT1hLm1hdDRbNF0sdGhpcy5tYXQ0WzJdPWEubWF0NFs4XSx0aGlzLm1hdDRbM109YS5tYXQ0WzEyXSx0aGlzLm1hdDRbNF09Yix0aGlzLm1hdDRbNV09YS5tYXQ0WzVdLHRoaXMubWF0NFs2XT1hLm1hdDRbOV0sdGhpcy5tYXQ0WzddPWEubWF0NFsxM10sdGhpcy5tYXQ0WzhdPWMsdGhpcy5tYXQ0WzldPWcsdGhpcy5tYXQ0WzEwXT1hLm1hdDRbMTBdLHRoaXMubWF0NFsxMV09YS5tYXQ0WzE0XSx0aGlzLm1hdDRbMTJdPWUsdGhpcy5tYXQ0WzEzXT1oLHRoaXMubWF0NFsxNF09aSx0aGlzLm1hdDRbMTVdPWEubWF0NFsxNV0pOmYoYSkmJihiPWFbMV0sYz1hWzJdLGU9YVszXSxnPWFbNl0saD1hWzddLGk9YVsxMV0sdGhpcy5tYXQ0WzBdPWFbMF0sdGhpcy5tYXQ0WzFdPWFbNF0sdGhpcy5tYXQ0WzJdPWFbOF0sdGhpcy5tYXQ0WzNdPWFbMTJdLHRoaXMubWF0NFs0XT1iLHRoaXMubWF0NFs1XT1hWzVdLHRoaXMubWF0NFs2XT1hWzldLHRoaXMubWF0NFs3XT1hWzEzXSx0aGlzLm1hdDRbOF09Yyx0aGlzLm1hdDRbOV09Zyx0aGlzLm1hdDRbMTBdPWFbMTBdLHRoaXMubWF0NFsxMV09YVsxNF0sdGhpcy5tYXQ0WzEyXT1lLHRoaXMubWF0NFsxM109aCx0aGlzLm1hdDRbMTRdPWksdGhpcy5tYXQ0WzE1XT1hWzE1XSksdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihhKXt2YXIgYixjLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIsczthIGluc3RhbmNlb2YgZC5NYXRyaXg/KGI9YS5tYXQ0WzBdLGM9YS5tYXQ0WzFdLGU9YS5tYXQ0WzJdLGc9YS5tYXQ0WzNdLGg9YS5tYXQ0WzRdLGk9YS5tYXQ0WzVdLGo9YS5tYXQ0WzZdLGs9YS5tYXQ0WzddLGw9YS5tYXQ0WzhdLG09YS5tYXQ0WzldLG49YS5tYXQ0WzEwXSxvPWEubWF0NFsxMV0scD1hLm1hdDRbMTJdLHE9YS5tYXQ0WzEzXSxyPWEubWF0NFsxNF0scz1hLm1hdDRbMTVdKTpmKGEpJiYoYj1hWzBdLGM9YVsxXSxlPWFbMl0sZz1hWzNdLGg9YVs0XSxpPWFbNV0saj1hWzZdLGs9YVs3XSxsPWFbOF0sbT1hWzldLG49YVsxMF0sbz1hWzExXSxwPWFbMTJdLHE9YVsxM10scj1hWzE0XSxzPWFbMTVdKTt2YXIgdD1iKmktYypoLHU9YipqLWUqaCx2PWIqay1nKmgsdz1jKmotZSppLHg9YyprLWcqaSx5PWUqay1nKmosej1sKnEtbSpwLEE9bCpyLW4qcCxCPWwqcy1vKnAsQz1tKnItbipxLEQ9bSpzLW8qcSxFPW4qcy1vKnIsRj10KkUtdSpEK3YqQyt3KkIteCpBK3kqejtyZXR1cm4gRj8oRj0xL0YsdGhpcy5tYXQ0WzBdPShpKkUtaipEK2sqQykqRix0aGlzLm1hdDRbMV09KGUqRC1jKkUtZypDKSpGLHRoaXMubWF0NFsyXT0ocSp5LXIqeCtzKncpKkYsdGhpcy5tYXQ0WzNdPShuKngtbSp5LW8qdykqRix0aGlzLm1hdDRbNF09KGoqQi1oKkUtaypBKSpGLHRoaXMubWF0NFs1XT0oYipFLWUqQitnKkEpKkYsdGhpcy5tYXQ0WzZdPShyKnYtcCp5LXMqdSkqRix0aGlzLm1hdDRbN109KGwqeS1uKnYrbyp1KSpGLHRoaXMubWF0NFs4XT0oaCpELWkqQitrKnopKkYsdGhpcy5tYXQ0WzldPShjKkItYipELWcqeikqRix0aGlzLm1hdDRbMTBdPShwKngtcSp2K3MqdCkqRix0aGlzLm1hdDRbMTFdPShtKnYtbCp4LW8qdCkqRix0aGlzLm1hdDRbMTJdPShpKkEtaCpDLWoqeikqRix0aGlzLm1hdDRbMTNdPShiKkMtYypBK2UqeikqRix0aGlzLm1hdDRbMTRdPShxKnUtcCp3LXIqdCkqRix0aGlzLm1hdDRbMTVdPShsKnctbSp1K24qdCkqRix0aGlzKTpudWxsfSxkLk1hdHJpeC5wcm90b3R5cGUuaW52ZXJ0M3gzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5tYXQzWzBdLGI9dGhpcy5tYXQzWzFdLGM9dGhpcy5tYXQzWzJdLGQ9dGhpcy5tYXQzWzNdLGU9dGhpcy5tYXQzWzRdLGY9dGhpcy5tYXQzWzVdLGc9dGhpcy5tYXQzWzZdLGg9dGhpcy5tYXQzWzddLGk9dGhpcy5tYXQzWzhdLGo9aSplLWYqaCxrPS1pKmQrZipnLGw9aCpkLWUqZyxtPWEqaitiKmsrYypsO3JldHVybiBtPyhtPTEvbSx0aGlzLm1hdDNbMF09aiptLHRoaXMubWF0M1sxXT0oLWkqYitjKmgpKm0sdGhpcy5tYXQzWzJdPShmKmItYyplKSptLHRoaXMubWF0M1szXT1rKm0sdGhpcy5tYXQzWzRdPShpKmEtYypnKSptLHRoaXMubWF0M1s1XT0oLWYqYStjKmQpKm0sdGhpcy5tYXQzWzZdPWwqbSx0aGlzLm1hdDNbN109KC1oKmErYipnKSptLHRoaXMubWF0M1s4XT0oZSphLWIqZCkqbSx0aGlzKTpudWxsfSxkLk1hdHJpeC5wcm90b3R5cGUudHJhbnNwb3NlM3gzPWZ1bmN0aW9uKGEpe3ZhciBiPWFbMV0sYz1hWzJdLGQ9YVs1XTtyZXR1cm4gdGhpcy5tYXQzWzFdPWFbM10sdGhpcy5tYXQzWzJdPWFbNl0sdGhpcy5tYXQzWzNdPWIsdGhpcy5tYXQzWzVdPWFbN10sdGhpcy5tYXQzWzZdPWMsdGhpcy5tYXQzWzddPWQsdGhpc30sZC5NYXRyaXgucHJvdG90eXBlLmludmVyc2VUcmFuc3Bvc2U9ZnVuY3Rpb24oYSl7dm9pZCAwPT09dGhpcy5tYXQzP2NvbnNvbGUuZXJyb3IoXCJzb3JyeSwgdGhpcyBmdW5jdGlvbiBvbmx5IHdvcmtzIHdpdGggbWF0M1wiKToodGhpcy5tYXQzWzBdPWEubWF0NFswXSx0aGlzLm1hdDNbMV09YS5tYXQ0WzFdLHRoaXMubWF0M1syXT1hLm1hdDRbMl0sdGhpcy5tYXQzWzNdPWEubWF0NFs0XSx0aGlzLm1hdDNbNF09YS5tYXQ0WzVdLHRoaXMubWF0M1s1XT1hLm1hdDRbNl0sdGhpcy5tYXQzWzZdPWEubWF0NFs4XSx0aGlzLm1hdDNbN109YS5tYXQ0WzldLHRoaXMubWF0M1s4XT1hLm1hdDRbMTBdKTt2YXIgYj10aGlzLmludmVydDN4MygpO2lmKGIpYi50cmFuc3Bvc2UzeDModGhpcy5tYXQzKTtlbHNlIGZvcih2YXIgYz0wO2M8OTtjKyspdGhpcy5tYXQzW2NdPTA7cmV0dXJuIHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS5kZXRlcm1pbmFudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMubWF0NFswXSp0aGlzLm1hdDRbNV0tdGhpcy5tYXQ0WzFdKnRoaXMubWF0NFs0XSxiPXRoaXMubWF0NFswXSp0aGlzLm1hdDRbNl0tdGhpcy5tYXQ0WzJdKnRoaXMubWF0NFs0XSxjPXRoaXMubWF0NFswXSp0aGlzLm1hdDRbN10tdGhpcy5tYXQ0WzNdKnRoaXMubWF0NFs0XSxkPXRoaXMubWF0NFsxXSp0aGlzLm1hdDRbNl0tdGhpcy5tYXQ0WzJdKnRoaXMubWF0NFs1XSxlPXRoaXMubWF0NFsxXSp0aGlzLm1hdDRbN10tdGhpcy5tYXQ0WzNdKnRoaXMubWF0NFs1XSxmPXRoaXMubWF0NFsyXSp0aGlzLm1hdDRbN10tdGhpcy5tYXQ0WzNdKnRoaXMubWF0NFs2XSxnPXRoaXMubWF0NFs4XSp0aGlzLm1hdDRbMTNdLXRoaXMubWF0NFs5XSp0aGlzLm1hdDRbMTJdLGg9dGhpcy5tYXQ0WzhdKnRoaXMubWF0NFsxNF0tdGhpcy5tYXQ0WzEwXSp0aGlzLm1hdDRbMTJdLGk9dGhpcy5tYXQ0WzhdKnRoaXMubWF0NFsxNV0tdGhpcy5tYXQ0WzExXSp0aGlzLm1hdDRbMTJdLGo9dGhpcy5tYXQ0WzldKnRoaXMubWF0NFsxNF0tdGhpcy5tYXQ0WzEwXSp0aGlzLm1hdDRbMTNdLGs9dGhpcy5tYXQ0WzldKnRoaXMubWF0NFsxNV0tdGhpcy5tYXQ0WzExXSp0aGlzLm1hdDRbMTNdO3JldHVybiBhKih0aGlzLm1hdDRbMTBdKnRoaXMubWF0NFsxNV0tdGhpcy5tYXQ0WzExXSp0aGlzLm1hdDRbMTRdKS1iKmsrYypqK2QqaS1lKmgrZipnfSxkLk1hdHJpeC5wcm90b3R5cGUubXVsdD1mdW5jdGlvbihhKXt2YXIgYjtpZihhPT09dGhpc3x8YT09PXRoaXMubWF0NCliPXRoaXMuY29weSgpLm1hdDQ7ZWxzZSBpZihhIGluc3RhbmNlb2YgZC5NYXRyaXgpYj1hLm1hdDQ7ZWxzZXtpZighZihhKSlyZXR1cm47Yj1hfXZhciBjPXRoaXMubWF0NFswXSxlPXRoaXMubWF0NFsxXSxnPXRoaXMubWF0NFsyXSxoPXRoaXMubWF0NFszXTtyZXR1cm4gdGhpcy5tYXQ0WzBdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzFdPWMqYlsxXStlKmJbNV0rZypiWzldK2gqYlsxM10sdGhpcy5tYXQ0WzJdPWMqYlsyXStlKmJbNl0rZypiWzEwXStoKmJbMTRdLHRoaXMubWF0NFszXT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSxjPXRoaXMubWF0NFs0XSxlPXRoaXMubWF0NFs1XSxnPXRoaXMubWF0NFs2XSxoPXRoaXMubWF0NFs3XSx0aGlzLm1hdDRbNF09YypiWzBdK2UqYls0XStnKmJbOF0raCpiWzEyXSx0aGlzLm1hdDRbNV09YypiWzFdK2UqYls1XStnKmJbOV0raCpiWzEzXSx0aGlzLm1hdDRbNl09YypiWzJdK2UqYls2XStnKmJbMTBdK2gqYlsxNF0sdGhpcy5tYXQ0WzddPWMqYlszXStlKmJbN10rZypiWzExXStoKmJbMTVdLGM9dGhpcy5tYXQ0WzhdLGU9dGhpcy5tYXQ0WzldLGc9dGhpcy5tYXQ0WzEwXSxoPXRoaXMubWF0NFsxMV0sdGhpcy5tYXQ0WzhdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzldPWMqYlsxXStlKmJbNV0rZypiWzldK2gqYlsxM10sdGhpcy5tYXQ0WzEwXT1jKmJbMl0rZSpiWzZdK2cqYlsxMF0raCpiWzE0XSx0aGlzLm1hdDRbMTFdPWMqYlszXStlKmJbN10rZypiWzExXStoKmJbMTVdLGM9dGhpcy5tYXQ0WzEyXSxlPXRoaXMubWF0NFsxM10sZz10aGlzLm1hdDRbMTRdLGg9dGhpcy5tYXQ0WzE1XSx0aGlzLm1hdDRbMTJdPWMqYlswXStlKmJbNF0rZypiWzhdK2gqYlsxMl0sdGhpcy5tYXQ0WzEzXT1jKmJbMV0rZSpiWzVdK2cqYls5XStoKmJbMTNdLHRoaXMubWF0NFsxNF09YypiWzJdK2UqYls2XStnKmJbMTBdK2gqYlsxNF0sdGhpcy5tYXQ0WzE1XT1jKmJbM10rZSpiWzddK2cqYlsxMV0raCpiWzE1XSx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3I/KGI9YS55LGM9YS56LGE9YS54KTphIGluc3RhbmNlb2YgQXJyYXkmJihiPWFbMV0sYz1hWzJdLGE9YVswXSksdGhpcy5tYXQ0WzBdKj1hLHRoaXMubWF0NFsxXSo9YSx0aGlzLm1hdDRbMl0qPWEsdGhpcy5tYXQ0WzNdKj1hLHRoaXMubWF0NFs0XSo9Yix0aGlzLm1hdDRbNV0qPWIsdGhpcy5tYXQ0WzZdKj1iLHRoaXMubWF0NFs3XSo9Yix0aGlzLm1hdDRbOF0qPWMsdGhpcy5tYXQ0WzldKj1jLHRoaXMubWF0NFsxMF0qPWMsdGhpcy5tYXQ0WzExXSo9Yyx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlPWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmPXRoaXMucDU/dGhpcy5wNS5fdG9SYWRpYW5zKGEpOmE7YiBpbnN0YW5jZW9mIGQuVmVjdG9yPyhjPWIueSxlPWIueixiPWIueCk6YiBpbnN0YW5jZW9mIEFycmF5JiYoYz1iWzFdLGU9YlsyXSxiPWJbMF0pO3ZhciBnPU1hdGguc3FydChiKmIrYypjK2UqZSk7Yio9MS9nLGMqPTEvZyxlKj0xL2c7dmFyIGg9dGhpcy5tYXQ0WzBdLGk9dGhpcy5tYXQ0WzFdLGo9dGhpcy5tYXQ0WzJdLGs9dGhpcy5tYXQ0WzNdLGw9dGhpcy5tYXQ0WzRdLG09dGhpcy5tYXQ0WzVdLG49dGhpcy5tYXQ0WzZdLG89dGhpcy5tYXQ0WzddLHA9dGhpcy5tYXQ0WzhdLHE9dGhpcy5tYXQ0WzldLHI9dGhpcy5tYXQ0WzEwXSxzPXRoaXMubWF0NFsxMV0sdD1NYXRoLnNpbihmKSx1PU1hdGguY29zKGYpLHY9MS11LHc9YipiKnYrdSx4PWMqYip2K2UqdCx5PWUqYip2LWMqdCx6PWIqYyp2LWUqdCxBPWMqYyp2K3UsQj1lKmMqditiKnQsQz1iKmUqditjKnQsRD1jKmUqdi1iKnQsRT1lKmUqdit1O3JldHVybiB0aGlzLm1hdDRbMF09aCp3K2wqeCtwKnksdGhpcy5tYXQ0WzFdPWkqdyttKngrcSp5LHRoaXMubWF0NFsyXT1qKncrbip4K3IqeSx0aGlzLm1hdDRbM109ayp3K28qeCtzKnksdGhpcy5tYXQ0WzRdPWgqeitsKkErcCpCLHRoaXMubWF0NFs1XT1pKnorbSpBK3EqQix0aGlzLm1hdDRbNl09aip6K24qQStyKkIsdGhpcy5tYXQ0WzddPWsqeitvKkErcypCLHRoaXMubWF0NFs4XT1oKkMrbCpEK3AqRSx0aGlzLm1hdDRbOV09aSpDK20qRCtxKkUsdGhpcy5tYXQ0WzEwXT1qKkMrbipEK3IqRSx0aGlzLm1hdDRbMTFdPWsqQytvKkQrcypFLHRoaXN9LGQuTWF0cml4LnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSl7dmFyIGI9YVswXSxjPWFbMV0sZD1hWzJdfHwwO3RoaXMubWF0NFsxMl0rPXRoaXMubWF0NFswXSpiK3RoaXMubWF0NFs0XSpjK3RoaXMubWF0NFs4XSpkLHRoaXMubWF0NFsxM10rPXRoaXMubWF0NFsxXSpiK3RoaXMubWF0NFs1XSpjK3RoaXMubWF0NFs5XSpkLHRoaXMubWF0NFsxNF0rPXRoaXMubWF0NFsyXSpiK3RoaXMubWF0NFs2XSpjK3RoaXMubWF0NFsxMF0qZCx0aGlzLm1hdDRbMTVdKz10aGlzLm1hdDRbM10qYit0aGlzLm1hdDRbN10qYyt0aGlzLm1hdDRbMTFdKmR9LGQuTWF0cml4LnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKGEpe3RoaXMucm90YXRlKGEsMSwwLDApfSxkLk1hdHJpeC5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbihhKXt0aGlzLnJvdGF0ZShhLDAsMSwwKX0sZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oYSl7dGhpcy5yb3RhdGUoYSwwLDAsMSl9LGQuTWF0cml4LnByb3RvdHlwZS5wZXJzcGVjdGl2ZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT0xL01hdGgudGFuKGEvMiksZj0xLyhjLWQpO3JldHVybiB0aGlzLm1hdDRbMF09ZS9iLHRoaXMubWF0NFsxXT0wLHRoaXMubWF0NFsyXT0wLHRoaXMubWF0NFszXT0wLHRoaXMubWF0NFs0XT0wLHRoaXMubWF0NFs1XT1lLHRoaXMubWF0NFs2XT0wLHRoaXMubWF0NFs3XT0wLHRoaXMubWF0NFs4XT0wLHRoaXMubWF0NFs5XT0wLHRoaXMubWF0NFsxMF09KGQrYykqZix0aGlzLm1hdDRbMTFdPS0xLHRoaXMubWF0NFsxMl09MCx0aGlzLm1hdDRbMTNdPTAsdGhpcy5tYXQ0WzE0XT0yKmQqYypmLHRoaXMubWF0NFsxNV09MCx0aGlzfSxkLk1hdHJpeC5wcm90b3R5cGUub3J0aG89ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPTEvKGEtYiksaD0xLyhjLWQpLGk9MS8oZS1mKTtyZXR1cm4gdGhpcy5tYXQ0WzBdPS0yKmcsdGhpcy5tYXQ0WzFdPTAsdGhpcy5tYXQ0WzJdPTAsdGhpcy5tYXQ0WzNdPTAsdGhpcy5tYXQ0WzRdPTAsdGhpcy5tYXQ0WzVdPS0yKmgsdGhpcy5tYXQ0WzZdPTAsdGhpcy5tYXQ0WzddPTAsdGhpcy5tYXQ0WzhdPTAsdGhpcy5tYXQ0WzldPTAsdGhpcy5tYXQ0WzEwXT0yKmksdGhpcy5tYXQ0WzExXT0wLHRoaXMubWF0NFsxMl09KGErYikqZyx0aGlzLm1hdDRbMTNdPShkK2MpKmgsdGhpcy5tYXQ0WzE0XT0oZitlKSppLHRoaXMubWF0NFsxNV09MSx0aGlzfSxiLmV4cG9ydHM9ZC5NYXRyaXh9LHtcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzI6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjt2YXIgZD1hKFwiLi4vY29yZS9tYWluXCIpLGU9YShcIi4uL2NvcmUvY29uc3RhbnRzXCIpO2QuUmVuZGVyZXJHTC5wcm90b3R5cGUuYmVnaW5TaGFwZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT12b2lkIDAhPT1hP2E6ZS5MSU5FX1NUUklQLHZvaWQgMD09PXRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcz8odGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5lZGdlcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnM9W10sdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxzPVtdLHRoaXMuaW1tZWRpYXRlTW9kZS51dkNvb3Jkcz1bXSx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLmNvbG9yQnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLnV2QnVmZmVyPXRoaXMuR0wuY3JlYXRlQnVmZmVyKCksdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0ZXhCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmltbWVkaWF0ZU1vZGUubGluZU5vcm1hbEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5wb2ludFZlcnRleEJ1ZmZlcj10aGlzLkdMLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4PVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4PVtdLHRoaXMuaW1tZWRpYXRlTW9kZS5fY3VydmVWZXJ0ZXg9W10pOih0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLmVkZ2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGljZXMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLmxlbmd0aD0wKSx0aGlzLmlzSW1tZWRpYXRlRHJhd2luZz0hMCx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnZlcnRleD1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZjtjPWU9Zj0wLDM9PT1hcmd1bWVudHMubGVuZ3RoP2M9YXJndW1lbnRzWzJdOjQ9PT1hcmd1bWVudHMubGVuZ3RoPyhlPWFyZ3VtZW50c1syXSxmPWFyZ3VtZW50c1szXSk6NT09PWFyZ3VtZW50cy5sZW5ndGgmJihjPWFyZ3VtZW50c1syXSxlPWFyZ3VtZW50c1szXSxmPWFyZ3VtZW50c1s0XSk7dmFyIGc9bmV3IGQuVmVjdG9yKGEsYixjKTt0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMucHVzaChnKTt2YXIgaD10aGlzLmN1ckZpbGxDb2xvcnx8Wy41LC41LC41LDFdO3JldHVybiB0aGlzLmltbWVkaWF0ZU1vZGUudmVydGV4Q29sb3JzLnB1c2goaFswXSxoWzFdLGhbMl0saFszXSksdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLnB1c2goZSxmKSx0aGlzLmltbWVkaWF0ZU1vZGUuX2JlemllclZlcnRleFswXT1hLHRoaXMuaW1tZWRpYXRlTW9kZS5fYmV6aWVyVmVydGV4WzFdPWIsdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXhbMl09Yyx0aGlzLmltbWVkaWF0ZU1vZGUuX3F1YWRyYXRpY1ZlcnRleFswXT1hLHRoaXMuaW1tZWRpYXRlTW9kZS5fcXVhZHJhdGljVmVydGV4WzFdPWIsdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXhbMl09Yyx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmVuZFNoYXBlPWZ1bmN0aW9uKGEsYixjLGYsZyxoKXtpZih0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlPT09ZS5QT0lOVFMpdGhpcy5fdXNlUG9pbnRTaGFkZXIoKSx0aGlzLmN1clBvaW50U2hhZGVyLmJpbmRTaGFkZXIoKSx0aGlzLl9kcmF3UG9pbnRzKHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcyx0aGlzLmltbWVkaWF0ZU1vZGUucG9pbnRWZXJ0ZXhCdWZmZXIpLHRoaXMuY3VyUG9pbnRTaGFkZXIudW5iaW5kU2hhZGVyKCk7ZWxzZSBpZih0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoPjEpe2lmKHRoaXMuX3VzZUltbWVkaWF0ZU1vZGVTaGFkZXIoKSx0aGlzLl9kb1N0cm9rZSYmdGhpcy5kcmF3TW9kZSE9PWUuVEVYVFVSRSl7Zm9yKHZhciBpPTA7aTx0aGlzLmltbWVkaWF0ZU1vZGUudmVydGljZXMubGVuZ3RoLTE7aSsrKXRoaXMuaW1tZWRpYXRlTW9kZS5lZGdlcy5wdXNoKFtpLGkrMV0pO2E9PT1lLkNMT1NFJiZ0aGlzLmltbWVkaWF0ZU1vZGUuZWRnZXMucHVzaChbdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aC0xLDBdKSxkLkdlb21ldHJ5LnByb3RvdHlwZS5fZWRnZXNUb1ZlcnRpY2VzLmNhbGwodGhpcy5pbW1lZGlhdGVNb2RlKSx0aGlzLl9kcmF3U3Ryb2tlSW1tZWRpYXRlTW9kZSgpfWlmKHRoaXMuX2RvRmlsbCl7aWYodGhpcy5pc0Jlemllcnx8dGhpcy5pc1F1YWRyYXRpY3x8dGhpcy5pc0N1cnZlKXt2YXIgaj1bbmV3IEZsb2F0MzJBcnJheSh0aGlzLl92VG9OQXJyYXkodGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzKSldLGs9dGhpcy5fdHJpYW5ndWxhdGUoaik7dGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzPVtdO2Zvcih2YXIgbD0wLG09ay5sZW5ndGg7bDxtO2wrPTMpdGhpcy52ZXJ0ZXgoa1tsXSxrW2wrMV0sa1tsKzJdKX10aGlzLl9kcmF3RmlsbEltbWVkaWF0ZU1vZGUoYSxiLGMsZixnLGgpfX1yZXR1cm4gdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aD0wLHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhDb2xvcnMubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLnV2Q29vcmRzLmxlbmd0aD0wLHRoaXMuaXNJbW1lZGlhdGVEcmF3aW5nPSExLHRoaXMuaXNCZXppZXI9ITEsdGhpcy5pc1F1YWRyYXRpYz0hMSx0aGlzLmlzQ3VydmU9ITEsdGhpcy5pbW1lZGlhdGVNb2RlLl9iZXppZXJWZXJ0ZXgubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLl9xdWFkcmF0aWNWZXJ0ZXgubGVuZ3RoPTAsdGhpcy5pbW1lZGlhdGVNb2RlLl9jdXJ2ZVZlcnRleC5sZW5ndGg9MCx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9kcmF3RmlsbEltbWVkaWF0ZU1vZGU9ZnVuY3Rpb24oYSxiLGMsZCxmLGcpe3ZhciBoPXRoaXMuR0w7aWYodGhpcy5jdXJGaWxsU2hhZGVyLmJpbmRTaGFkZXIoKSx0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0ZXhCdWZmZXIsaC5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KHRoaXMuaW1tZWRpYXRlTW9kZS52ZXJ0aWNlcyksRmxvYXQzMkFycmF5LGguRFlOQU1JQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGguRkxPQVQsITEsMCwwKSksdGhpcy5kcmF3TW9kZT09PWUuRklMTCYmdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleENvbG9yJiYodGhpcy5fYmluZEJ1ZmZlcih0aGlzLmltbWVkaWF0ZU1vZGUuY29sb3JCdWZmZXIsaC5BUlJBWV9CVUZGRVIsdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRleENvbG9ycyxGbG9hdDMyQXJyYXksaC5EWU5BTUlDX0RSQVcpLHRoaXMuY3VyRmlsbFNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYVZlcnRleENvbG9yLmxvY2F0aW9uLDQsaC5GTE9BVCwhMSwwLDApKSx0aGlzLmRyYXdNb2RlPT09ZS5URVhUVVJFJiZ0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQmJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS51dkJ1ZmZlcixoLkFSUkFZX0JVRkZFUix0aGlzLmltbWVkaWF0ZU1vZGUudXZDb29yZHMsRmxvYXQzMkFycmF5LGguRFlOQU1JQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLGguRkxPQVQsITEsMCwwKSksdGhpcy5kcmF3TW9kZT09PWUuRklMTHx8dGhpcy5kcmF3TW9kZT09PWUuVEVYVFVSRSlzd2l0Y2godGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZSl7Y2FzZSBlLkxJTkVfU1RSSVA6Y2FzZSBlLkxJTkVTOmNhc2UgZS5UUklBTkdMRVM6dGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT10aGlzLmlzQmV6aWVyfHx0aGlzLmlzUXVhZHJhdGljfHx0aGlzLmlzQ3VydmU/ZS5UUklBTkdMRVM6ZS5UUklBTkdMRV9GQU59ZWxzZSBzd2l0Y2godGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZSl7Y2FzZSBlLkxJTkVfU1RSSVA6Y2FzZSBlLkxJTkVTOnRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9ZS5MSU5FX0xPT1B9aWYodGhpcy5pbW1lZGlhdGVNb2RlLnNoYXBlTW9kZT09PWUuUVVBRFN8fHRoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGU9PT1lLlFVQURfU1RSSVApdGhyb3cgbmV3IEVycm9yKFwic29ycnksIFwiK3RoaXMuaW1tZWRpYXRlTW9kZS5zaGFwZU1vZGUrXCIgbm90IHlldCBpbXBsZW1lbnRlZCBpbiB3ZWJnbCBtb2RlLlwiKTt0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJGaWxsQ29sb3IpLGguZW5hYmxlKGguQkxFTkQpLGguZHJhd0FycmF5cyh0aGlzLmltbWVkaWF0ZU1vZGUuc2hhcGVNb2RlLDAsdGhpcy5pbW1lZGlhdGVNb2RlLnZlcnRpY2VzLmxlbmd0aCksdGhpcy5fcEluc3QuX3BpeGVsc0RpcnR5PSEwLHRoaXMuY3VyRmlsbFNoYWRlci51bmJpbmRTaGFkZXIoKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd1N0cm9rZUltbWVkaWF0ZU1vZGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLkdMO3RoaXMuY3VyU3Ryb2tlU2hhZGVyLmJpbmRTaGFkZXIoKSx0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbiYmKHRoaXMuX2JpbmRCdWZmZXIodGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVWZXJ0ZXhCdWZmZXIsYS5BUlJBWV9CVUZGRVIsdGhpcy5fZmxhdHRlbih0aGlzLmltbWVkaWF0ZU1vZGUubGluZVZlcnRpY2VzKSxGbG9hdDMyQXJyYXksYS5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYS5GTE9BVCwhMSwwLDApKSx0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24mJih0aGlzLl9iaW5kQnVmZmVyKHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lTm9ybWFsQnVmZmVyLGEuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4odGhpcy5pbW1lZGlhdGVNb2RlLmxpbmVOb3JtYWxzKSxGbG9hdDMyQXJyYXksYS5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYURpcmVjdGlvbi5sb2NhdGlvbiw0LGEuRkxPQVQsITEsMCwwKSksdGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyU3Ryb2tlQ29sb3IpLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUywwLHRoaXMuaW1tZWRpYXRlTW9kZS5saW5lVmVydGljZXMubGVuZ3RoKSx0aGlzLmN1clN0cm9rZVNoYWRlci51bmJpbmRTaGFkZXIoKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGIuZXhwb3J0cz1kLlJlbmRlcmVyR0x9LHtcIi4uL2NvcmUvY29uc3RhbnRzXCI6MTgsXCIuLi9jb3JlL21haW5cIjoyNH1dLDczOltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPTA7ZC5SZW5kZXJlckdMLnByb3RvdHlwZS5faW5pdEJ1ZmZlckRlZmF1bHRzPWZ1bmN0aW9uKGEpe2lmKHRoaXMuX2ZyZWVCdWZmZXJzKGEpLCsrZT4xZTMpe3ZhciBiPU9iamVjdC5rZXlzKHRoaXMuZ0hhc2gpWzBdO2RlbGV0ZSB0aGlzLmdIYXNoW2JdLGUtLX10aGlzLmdIYXNoW2FdPXt9fSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9mcmVlQnVmZmVycz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmdIYXNoW2FdO2lmKGIpe2RlbGV0ZSB0aGlzLmdIYXNoW2FdLGUtLTt2YXIgYz10aGlzLkdMO2IudmVydGV4QnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLnZlcnRleEJ1ZmZlciksYi5ub3JtYWxCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIubm9ybWFsQnVmZmVyKSxiLmxpbmVOb3JtYWxCdWZmZXImJmMuZGVsZXRlQnVmZmVyKGIubGluZU5vcm1hbEJ1ZmZlciksYi51dkJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi51dkJ1ZmZlciksYi5pbmRleEJ1ZmZlciYmYy5kZWxldGVCdWZmZXIoYi5pbmRleEJ1ZmZlciksYi5saW5lVmVydGV4QnVmZmVyJiZjLmRlbGV0ZUJ1ZmZlcihiLmxpbmVWZXJ0ZXhCdWZmZXIpfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5jcmVhdGVCdWZmZXJzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5HTDt0aGlzLl9pbml0QnVmZmVyRGVmYXVsdHMoYSk7dmFyIGQ9dGhpcy5nSGFzaFthXTtyZXR1cm4gZC5udW1iZXJPZkl0ZW1zPTMqYi5mYWNlcy5sZW5ndGgsZC5saW5lVmVydGV4Q291bnQ9Yi5saW5lVmVydGljZXMubGVuZ3RoLHRoaXMuX3VzZUNvbG9yU2hhZGVyKCksdGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJihkLmxpbmVWZXJ0ZXhCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQubGluZVZlcnRleEJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIubGluZVZlcnRpY2VzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJTdHJva2VTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmF0dHJpYnV0ZXMuYVBvc2l0aW9uLmxvY2F0aW9uLDMsYy5GTE9BVCwhMSwwLDApKSx0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24mJihkLmxpbmVOb3JtYWxCdWZmZXI9Yy5jcmVhdGVCdWZmZXIoKSx0aGlzLl9iaW5kQnVmZmVyKGQubGluZU5vcm1hbEJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl9mbGF0dGVuKGIubGluZU5vcm1hbHMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1clN0cm9rZVNoYWRlci5lbmFibGVBdHRyaWIodGhpcy5jdXJTdHJva2VTaGFkZXIuYXR0cmlidXRlcy5hRGlyZWN0aW9uLmxvY2F0aW9uLDQsYy5GTE9BVCwhMSwwLDApKSx0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24mJihkLnZlcnRleEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC52ZXJ0ZXhCdWZmZXIsYy5BUlJBWV9CVUZGRVIsdGhpcy5fdlRvTkFycmF5KGIudmVydGljZXMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGMuRkxPQVQsITEsMCwwKSksZC5pbmRleEJ1ZmZlcj1jLmNyZWF0ZUJ1ZmZlcigpLHRoaXMuX2JpbmRCdWZmZXIoZC5pbmRleEJ1ZmZlcixjLkVMRU1FTlRfQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4oYi5mYWNlcyksVWludDE2QXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmF0dHJpYnV0ZXMuYU5vcm1hbCYmKGQubm9ybWFsQnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLm5vcm1hbEJ1ZmZlcixjLkFSUkFZX0JVRkZFUix0aGlzLl92VG9OQXJyYXkoYi52ZXJ0ZXhOb3JtYWxzKSxGbG9hdDMyQXJyYXksYy5TVEFUSUNfRFJBVyksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hTm9ybWFsLmxvY2F0aW9uLDMsYy5GTE9BVCwhMSwwLDApKSx0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hVGV4Q29vcmQmJihkLnV2QnVmZmVyPWMuY3JlYXRlQnVmZmVyKCksdGhpcy5fYmluZEJ1ZmZlcihkLnV2QnVmZmVyLGMuQVJSQVlfQlVGRkVSLHRoaXMuX2ZsYXR0ZW4oYi51dnMpLEZsb2F0MzJBcnJheSxjLlNUQVRJQ19EUkFXKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLGMuRkxPQVQsITEsMCwwKSksZH0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5kcmF3QnVmZmVycz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLkdMO3RoaXMuX3VzZUNvbG9yU2hhZGVyKCk7dmFyIGM9dGhpcy5nSGFzaFthXTtyZXR1cm4gdGhpcy5fZG9TdHJva2UmJmMubGluZVZlcnRleENvdW50PjAmJih0aGlzLmN1clN0cm9rZVNoYWRlci5iaW5kU2hhZGVyKCksYy5saW5lVmVydGV4QnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLmxpbmVWZXJ0ZXhCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGIuRkxPQVQsITEsMCwwKSksYy5saW5lTm9ybWFsQnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLmxpbmVOb3JtYWxCdWZmZXIsYi5BUlJBWV9CVUZGRVIpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1clN0cm9rZVNoYWRlci5hdHRyaWJ1dGVzLmFEaXJlY3Rpb24ubG9jYXRpb24sNCxiLkZMT0FULCExLDAsMCkpLHRoaXMuX2FwcGx5Q29sb3JCbGVuZCh0aGlzLmN1clN0cm9rZUNvbG9yKSx0aGlzLl9kcmF3QXJyYXlzKGIuVFJJQU5HTEVTLGEpLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLnVuYmluZFNoYWRlcigpKSwhMSE9PXRoaXMuX2RvRmlsbCYmKHRoaXMuY3VyRmlsbFNoYWRlci5iaW5kU2hhZGVyKCksYy52ZXJ0ZXhCdWZmZXImJih0aGlzLl9iaW5kQnVmZmVyKGMudmVydGV4QnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFQb3NpdGlvbi5sb2NhdGlvbiwzLGIuRkxPQVQsITEsMCwwKSksYy5pbmRleEJ1ZmZlciYmdGhpcy5fYmluZEJ1ZmZlcihjLmluZGV4QnVmZmVyLGIuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLGMubm9ybWFsQnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLm5vcm1hbEJ1ZmZlcixiLkFSUkFZX0JVRkZFUiksdGhpcy5jdXJGaWxsU2hhZGVyLmVuYWJsZUF0dHJpYih0aGlzLmN1ckZpbGxTaGFkZXIuYXR0cmlidXRlcy5hTm9ybWFsLmxvY2F0aW9uLDMsYi5GTE9BVCwhMSwwLDApKSxjLnV2QnVmZmVyJiYodGhpcy5fYmluZEJ1ZmZlcihjLnV2QnVmZmVyLGIuQVJSQVlfQlVGRkVSKSx0aGlzLmN1ckZpbGxTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyRmlsbFNoYWRlci5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLGIuRkxPQVQsITEsMCwwKSksdGhpcy5fYXBwbHlDb2xvckJsZW5kKHRoaXMuY3VyRmlsbENvbG9yKSx0aGlzLl9kcmF3RWxlbWVudHMoYi5UUklBTkdMRVMsYSksdGhpcy5jdXJGaWxsU2hhZGVyLnVuYmluZFNoYWRlcigpKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmRyYXdCdWZmZXJzU2NhbGVkPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMudU1WTWF0cml4LmNvcHkoKTt0cnl7dGhpcy51TVZNYXRyaXguc2NhbGUoYixjLGQpLHRoaXMuZHJhd0J1ZmZlcnMoYSl9ZmluYWxseXt0aGlzLnVNVk1hdHJpeD1lfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd0FycmF5cz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLkdMLmRyYXdBcnJheXMoYSwwLHRoaXMuZ0hhc2hbYl0ubGluZVZlcnRleENvdW50KSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZHJhd0VsZW1lbnRzPWZ1bmN0aW9uKGEsYil7dGhpcy5HTC5kcmF3RWxlbWVudHMoYSx0aGlzLmdIYXNoW2JdLm51bWJlck9mSXRlbXMsdGhpcy5HTC5VTlNJR05FRF9TSE9SVCwwKSx0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITB9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2RyYXdQb2ludHM9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLkdMO3RoaXMuX2JpbmRCdWZmZXIoYixjLkFSUkFZX0JVRkZFUix0aGlzLl92VG9OQXJyYXkoYSksRmxvYXQzMkFycmF5LGMuU1RBVElDX0RSQVcpLHRoaXMuY3VyUG9pbnRTaGFkZXIuZW5hYmxlQXR0cmliKHRoaXMuY3VyUG9pbnRTaGFkZXIuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyxjLkZMT0FULCExLDAsMCksYy5kcmF3QXJyYXlzKGMuUG9pbnRzLDAsYS5sZW5ndGgpfSxiLmV4cG9ydHM9ZC5SZW5kZXJlckdMfSx7XCIuLi9jb3JlL21haW5cIjoyNH1dLDc0OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKSxlPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKSxmPWEoXCJsaWJ0ZXNzXCIpO2EoXCIuL3A1LlNoYWRlclwiKSxhKFwiLi9wNS5DYW1lcmFcIiksYShcIi4uL2NvcmUvcDUuUmVuZGVyZXJcIiksYShcIi4vcDUuTWF0cml4XCIpO3ZhciBnPXtpbW1lZGlhdGVWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGFWZXJ0ZXhDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBmbG9hdCB1UmVzb2x1dGlvbjtcXG51bmlmb3JtIGZsb2F0IHVQb2ludFNpemU7XFxuXFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdkNvbG9yID0gYVZlcnRleENvbG9yO1xcbiAgZ2xfUG9pbnRTaXplID0gdVBvaW50U2l6ZTtcXG59XFxuXCIsdmVydGV4Q29sb3JWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbmF0dHJpYnV0ZSB2ZWM0IGFWZXJ0ZXhDb2xvcjtcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxuXFxudmFyeWluZyB2ZWM0IHZDb2xvcjtcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgdmVjNCBwb3NpdGlvblZlYzQgPSB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG4gIGdsX1Bvc2l0aW9uID0gdVByb2plY3Rpb25NYXRyaXggKiB1TW9kZWxWaWV3TWF0cml4ICogcG9zaXRpb25WZWM0O1xcbiAgdkNvbG9yID0gYVZlcnRleENvbG9yO1xcbn1cXG5cIix2ZXJ0ZXhDb2xvckZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xcbnZvaWQgbWFpbih2b2lkKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7XFxufVwiLG5vcm1hbFZlcnQ6XCJhdHRyaWJ1dGUgdmVjMyBhUG9zaXRpb247XFxuYXR0cmlidXRlIHZlYzMgYU5vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxuXFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyB1Tm9ybWFsTWF0cml4O1xcblxcbnZhcnlpbmcgdmVjMyB2VmVydGV4Tm9ybWFsO1xcbnZhcnlpbmcgaGlnaHAgdmVjMiB2VmVydFRleENvb3JkO1xcblxcbnZvaWQgbWFpbih2b2lkKSB7XFxuICB2ZWM0IHBvc2l0aW9uVmVjNCA9IHZlYzQoYVBvc2l0aW9uLCAxLjApO1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuICB2VmVydGV4Tm9ybWFsID0gbm9ybWFsaXplKHZlYzMoIHVOb3JtYWxNYXRyaXggKiBhTm9ybWFsICkpO1xcbiAgdlZlcnRUZXhDb29yZCA9IGFUZXhDb29yZDtcXG59XFxuXCIsbm9ybWFsRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnZhcnlpbmcgdmVjMyB2VmVydGV4Tm9ybWFsO1xcbnZvaWQgbWFpbih2b2lkKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZWZXJ0ZXhOb3JtYWwsIDEuMCk7XFxufVwiLGJhc2ljRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcbnZhcnlpbmcgdmVjMyB2VmVydGV4Tm9ybWFsO1xcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gdU1hdGVyaWFsQ29sb3I7XFxufVwiLGxpZ2h0VmVydDpcImF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMyBhTm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXhDb29yZDtcXG5cXG51bmlmb3JtIG1hdDQgdVZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnVuaWZvcm0gbWF0MyB1Tm9ybWFsTWF0cml4O1xcbnVuaWZvcm0gaW50IHVBbWJpZW50TGlnaHRDb3VudDtcXG51bmlmb3JtIGludCB1RGlyZWN0aW9uYWxMaWdodENvdW50O1xcbnVuaWZvcm0gaW50IHVQb2ludExpZ2h0Q291bnQ7XFxuXFxudW5pZm9ybSB2ZWMzIHVBbWJpZW50Q29sb3JbOF07XFxudW5pZm9ybSB2ZWMzIHVMaWdodGluZ0RpcmVjdGlvbls4XTtcXG51bmlmb3JtIHZlYzMgdURpcmVjdGlvbmFsQ29sb3JbOF07XFxudW5pZm9ybSB2ZWMzIHVQb2ludExpZ2h0TG9jYXRpb25bOF07XFxudW5pZm9ybSB2ZWMzIHVQb2ludExpZ2h0Q29sb3JbOF07XFxudW5pZm9ybSBib29sIHVTcGVjdWxhcjtcXG5cXG52YXJ5aW5nIHZlYzMgdlZlcnRleE5vcm1hbDtcXG52YXJ5aW5nIHZlYzIgdlZlcnRUZXhDb29yZDtcXG52YXJ5aW5nIHZlYzMgdkxpZ2h0V2VpZ2h0aW5nO1xcblxcbnZvaWQgbWFpbih2b2lkKXtcXG5cXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICBnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG5cXG4gIHZlYzMgdmVydGV4Tm9ybWFsID0gbm9ybWFsaXplKHZlYzMoIHVOb3JtYWxNYXRyaXggKiBhTm9ybWFsICkpO1xcbiAgdlZlcnRleE5vcm1hbCA9IHZlcnRleE5vcm1hbDtcXG4gIHZWZXJ0VGV4Q29vcmQgPSBhVGV4Q29vcmQ7XFxuXFxuICB2ZWM0IG12UG9zaXRpb24gPSB1TW9kZWxWaWV3TWF0cml4ICogdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuICB2ZWMzIGV5ZURpcmVjdGlvbiA9IG5vcm1hbGl6ZSgtbXZQb3NpdGlvbi54eXopO1xcblxcbiAgZmxvYXQgc2hpbmluZXNzID0gMzIuMDtcXG4gIGZsb2F0IHNwZWN1bGFyRmFjdG9yID0gMi4wO1xcbiAgZmxvYXQgZGlmZnVzZUZhY3RvciA9IDAuMztcXG5cXG4gIHZlYzMgYW1iaWVudExpZ2h0RmFjdG9yID0gdmVjMygwLjApO1xcblxcbiAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHtcXG4gICAgaWYgKHVBbWJpZW50TGlnaHRDb3VudCA9PSBpKSBicmVhaztcXG4gICAgYW1iaWVudExpZ2h0RmFjdG9yICs9IHVBbWJpZW50Q29sb3JbaV07XFxuICB9XFxuXFxuXFxuICB2ZWMzIGRpcmVjdGlvbmFsTGlnaHRGYWN0b3IgPSB2ZWMzKDAuMCk7XFxuXFxuICBmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykge1xcbiAgICBpZiAodURpcmVjdGlvbmFsTGlnaHRDb3VudCA9PSBqKSBicmVhaztcXG4gICAgdmVjMyBkaXIgPSB1TGlnaHRpbmdEaXJlY3Rpb25bal07XFxuICAgIGZsb2F0IGRpcmVjdGlvbmFsTGlnaHRXZWlnaHRpbmcgPSBtYXgoZG90KHZlcnRleE5vcm1hbCwgLWRpciksIDAuMCk7XFxuICAgIGRpcmVjdGlvbmFsTGlnaHRGYWN0b3IgKz0gdURpcmVjdGlvbmFsQ29sb3Jbal0gKiBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nO1xcbiAgfVxcblxcblxcbiAgdmVjMyBwb2ludExpZ2h0RmFjdG9yID0gdmVjMygwLjApO1xcblxcbiAgZm9yIChpbnQgayA9IDA7IGsgPCA4OyBrKyspIHtcXG4gICAgaWYgKHVQb2ludExpZ2h0Q291bnQgPT0gaykgYnJlYWs7XFxuICAgIHZlYzMgbG9jID0gKHVWaWV3TWF0cml4ICogdmVjNCh1UG9pbnRMaWdodExvY2F0aW9uW2tdLCAxLjApKS54eXo7XFxuICAgIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBub3JtYWxpemUobG9jIC0gbXZQb3NpdGlvbi54eXopO1xcblxcbiAgICBmbG9hdCBkaXJlY3Rpb25hbExpZ2h0V2VpZ2h0aW5nID0gbWF4KGRvdCh2ZXJ0ZXhOb3JtYWwsIGxpZ2h0RGlyZWN0aW9uKSwgMC4wKTtcXG5cXG4gICAgZmxvYXQgc3BlY3VsYXJMaWdodFdlaWdodGluZyA9IDAuMDtcXG4gICAgaWYgKHVTcGVjdWxhciApe1xcbiAgICAgIHZlYzMgcmVmbGVjdGlvbkRpcmVjdGlvbiA9IHJlZmxlY3QoLWxpZ2h0RGlyZWN0aW9uLCB2ZXJ0ZXhOb3JtYWwpO1xcbiAgICAgIHNwZWN1bGFyTGlnaHRXZWlnaHRpbmcgPSBwb3cobWF4KGRvdChyZWZsZWN0aW9uRGlyZWN0aW9uLCBleWVEaXJlY3Rpb24pLCAwLjApLCBzaGluaW5lc3MpO1xcbiAgICB9XFxuXFxuICAgIHBvaW50TGlnaHRGYWN0b3IgKz0gdVBvaW50TGlnaHRDb2xvcltrXSAqIChzcGVjdWxhckZhY3RvciAqIHNwZWN1bGFyTGlnaHRXZWlnaHRpbmdcXG4gICAgICArIGRpcmVjdGlvbmFsTGlnaHRXZWlnaHRpbmcgKiBkaWZmdXNlRmFjdG9yKTtcXG4gIH1cXG5cXG4gIHZMaWdodFdlaWdodGluZyA9ICBhbWJpZW50TGlnaHRGYWN0b3IgKyBkaXJlY3Rpb25hbExpZ2h0RmFjdG9yICsgcG9pbnRMaWdodEZhY3RvcjtcXG59XFxuXCIsbGlnaHRUZXh0dXJlRnJhZzpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlcjtcXG51bmlmb3JtIGJvb2wgaXNUZXh0dXJlO1xcbnVuaWZvcm0gYm9vbCB1VXNlTGlnaHRpbmc7XFxuXFxudmFyeWluZyB2ZWMzIHZMaWdodFdlaWdodGluZztcXG52YXJ5aW5nIGhpZ2hwIHZlYzIgdlZlcnRUZXhDb29yZDtcXG5cXG52b2lkIG1haW4odm9pZCkge1xcbiAgZ2xfRnJhZ0NvbG9yID0gaXNUZXh0dXJlID8gdGV4dHVyZTJEKHVTYW1wbGVyLCB2VmVydFRleENvb3JkKSA6IHVNYXRlcmlhbENvbG9yO1xcbiAgaWYgKHVVc2VMaWdodGluZylcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAqPSB2TGlnaHRXZWlnaHRpbmc7XFxufVwiLHBob25nVmVydDpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbmF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMyBhTm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWMyIGFUZXhDb29yZDtcXG5cXG51bmlmb3JtIHZlYzMgdUFtYmllbnRDb2xvcls4XTtcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBtYXQzIHVOb3JtYWxNYXRyaXg7XFxudW5pZm9ybSBpbnQgdUFtYmllbnRMaWdodENvdW50O1xcblxcbnZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZBbWJpZW50Q29sb3I7XFxuXFxudm9pZCBtYWluKHZvaWQpe1xcblxcbiAgdmVjNCB2aWV3TW9kZWxQb3NpdGlvbiA9IHVNb2RlbFZpZXdNYXRyaXggKiB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG5cXG4gIC8vIFBhc3MgdmFyeWluZ3MgdG8gZnJhZ21lbnQgc2hhZGVyXFxuICB2Vmlld1Bvc2l0aW9uID0gdmlld01vZGVsUG9zaXRpb24ueHl6O1xcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHZpZXdNb2RlbFBvc2l0aW9uOyAgXFxuXFxuICB2Tm9ybWFsID0gbm9ybWFsaXplKHVOb3JtYWxNYXRyaXggKiBub3JtYWxpemUoYU5vcm1hbCkpO1xcbiAgdlRleENvb3JkID0gYVRleENvb3JkO1xcblxcbiAgdkFtYmllbnRDb2xvciA9IHZlYzMoMC4wKTtcXG4gIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7XFxuICAgIGlmICh1QW1iaWVudExpZ2h0Q291bnQgPT0gaSkgYnJlYWs7XFxuICAgIHZBbWJpZW50Q29sb3IgKz0gdUFtYmllbnRDb2xvcltpXTtcXG4gIH1cXG59XFxuXCIsXG5waG9uZ0ZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5cXG4vL3VuaWZvcm0gbWF0NCB1TW9kZWxWaWV3TWF0cml4O1xcbnVuaWZvcm0gbWF0NCB1Vmlld01hdHJpeDtcXG5cXG51bmlmb3JtIHZlYzQgdU1hdGVyaWFsQ29sb3I7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7XFxudW5pZm9ybSBib29sIGlzVGV4dHVyZTtcXG51bmlmb3JtIGJvb2wgdVVzZUxpZ2h0aW5nO1xcblxcbnVuaWZvcm0gdmVjMyB1TGlnaHRpbmdEaXJlY3Rpb25bOF07XFxudW5pZm9ybSB2ZWMzIHVEaXJlY3Rpb25hbENvbG9yWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodExvY2F0aW9uWzhdO1xcbnVuaWZvcm0gdmVjMyB1UG9pbnRMaWdodENvbG9yWzhdO1xcbnVuaWZvcm0gYm9vbCB1U3BlY3VsYXI7XFxuXFxudW5pZm9ybSBpbnQgdURpcmVjdGlvbmFsTGlnaHRDb3VudDtcXG51bmlmb3JtIGludCB1UG9pbnRMaWdodENvdW50O1xcblxcbnZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZBbWJpZW50Q29sb3I7XFxuXFxudmVjMyBWO1xcbnZlYzMgTjtcXG5cXG5jb25zdCBmbG9hdCBzaGluaW5lc3MgPSAzMi4wO1xcbmNvbnN0IGZsb2F0IHNwZWN1bGFyRmFjdG9yID0gMi4wO1xcbmNvbnN0IGZsb2F0IGRpZmZ1c2VGYWN0b3IgPSAwLjczO1xcblxcbnN0cnVjdCBMaWdodFJlc3VsdCB7XFxuXFx0ZmxvYXQgc3BlY3VsYXI7XFxuXFx0ZmxvYXQgZGlmZnVzZTtcXG59O1xcblxcbmZsb2F0IHBob25nU3BlY3VsYXIoXFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxcbiAgZmxvYXQgc2hpbmluZXNzKSB7XFxuXFxuICB2ZWMzIFIgPSBub3JtYWxpemUocmVmbGVjdCgtbGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpKTsgIFxcbiAgcmV0dXJuIHBvdyhtYXgoMC4wLCBkb3QoUiwgdmlld0RpcmVjdGlvbikpLCBzaGluaW5lc3MpO1xcbn1cXG5cXG5mbG9hdCBsYW1iZXJ0RGlmZnVzZShcXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwpIHtcXG4gIHJldHVybiBtYXgoMC4wLCBkb3QoLWxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSk7XFxufVxcblxcbkxpZ2h0UmVzdWx0IGxpZ2h0KHZlYzMgbGlnaHRWZWN0b3IpIHtcXG5cXG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShsaWdodFZlY3Rvcik7XFxuXFxuICAvL2NvbXB1dGUgb3VyIGRpZmZ1c2UgJiBzcGVjdWxhciB0ZXJtc1xcbiAgTGlnaHRSZXN1bHQgbHI7XFxuICBpZiAodVNwZWN1bGFyKVxcbiAgICBsci5zcGVjdWxhciA9IHBob25nU3BlY3VsYXIoTCwgViwgTiwgc2hpbmluZXNzKTtcXG4gIGxyLmRpZmZ1c2UgPSBsYW1iZXJ0RGlmZnVzZShMLCBOKTtcXG4gIHJldHVybiBscjtcXG59XFxuXFxudm9pZCBtYWluKHZvaWQpIHtcXG5cXG4gIFYgPSBub3JtYWxpemUodlZpZXdQb3NpdGlvbik7XFxuICBOID0gdk5vcm1hbDtcXG5cXG4gIHZlYzMgZGlmZnVzZSA9IHZlYzMoMC4wKTtcXG4gIGZsb2F0IHNwZWN1bGFyID0gMC4wO1xcblxcbiAgZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHtcXG4gICAgaWYgKHVEaXJlY3Rpb25hbExpZ2h0Q291bnQgPT0gaikgYnJlYWs7XFxuXFxuICAgIExpZ2h0UmVzdWx0IHJlc3VsdCA9IGxpZ2h0KHVMaWdodGluZ0RpcmVjdGlvbltqXSk7XFxuICAgIGRpZmZ1c2UgKz0gcmVzdWx0LmRpZmZ1c2UgKiB1RGlyZWN0aW9uYWxDb2xvcltqXTtcXG4gICAgc3BlY3VsYXIgKz0gcmVzdWx0LnNwZWN1bGFyO1xcbiAgfVxcblxcbiAgZm9yIChpbnQgayA9IDA7IGsgPCA4OyBrKyspIHtcXG4gICAgaWYgKHVQb2ludExpZ2h0Q291bnQgPT0gaykgYnJlYWs7XFxuXFxuICAgIHZlYzMgbGlnaHRQb3NpdGlvbiA9ICh1Vmlld01hdHJpeCAqIHZlYzQodVBvaW50TGlnaHRMb2NhdGlvbltrXSwgMS4wKSkueHl6O1xcbiAgICB2ZWMzIGxpZ2h0VmVjdG9yID0gdlZpZXdQb3NpdGlvbiAtIGxpZ2h0UG9zaXRpb247XFxuXFx0XFxuICAgIC8vY2FsY3VsYXRlIGF0dGVudWF0aW9uXFxuICAgIGZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgobGlnaHRWZWN0b3IpO1xcbiAgICBmbG9hdCBmYWxsb2ZmID0gNTAwLjAgLyAobGlnaHREaXN0YW5jZSArIDUwMC4wKTtcXG5cXG4gICAgTGlnaHRSZXN1bHQgcmVzdWx0ID0gbGlnaHQobGlnaHRWZWN0b3IpO1xcbiAgICBkaWZmdXNlICs9IHJlc3VsdC5kaWZmdXNlICogZmFsbG9mZiAqIHVQb2ludExpZ2h0Q29sb3Jba107XFxuICAgIHNwZWN1bGFyICs9IHJlc3VsdC5zcGVjdWxhciAqIGZhbGxvZmY7XFxuICB9XFxuXFxuICBnbF9GcmFnQ29sb3IgPSBpc1RleHR1cmUgPyB0ZXh0dXJlMkQodVNhbXBsZXIsIHZUZXhDb29yZCkgOiB1TWF0ZXJpYWxDb2xvcjtcXG4gIGdsX0ZyYWdDb2xvci5yZ2IgPSBnbF9GcmFnQ29sb3IucmdiICogKGRpZmZ1c2UgKiBkaWZmdXNlRmFjdG9yICsgdkFtYmllbnRDb2xvcikgKyBzcGVjdWxhciAqIHNwZWN1bGFyRmFjdG9yO1xcbn1cIixmb250VmVydDpcInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbmF0dHJpYnV0ZSB2ZWMzIGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjMiBhVGV4Q29vcmQ7XFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcblxcbnVuaWZvcm0gdmVjNCB1R2x5cGhSZWN0O1xcbnVuaWZvcm0gZmxvYXQgdUdseXBoT2Zmc2V0O1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxudmFyeWluZyBmbG9hdCB3O1xcblxcbnZvaWQgbWFpbigpIHtcXG4gIHZlYzQgcG9zaXRpb25WZWM0ID0gdmVjNChhUG9zaXRpb24sIDEuMCk7XFxuXFxuICAvLyBzY2FsZSBieSB0aGUgc2l6ZSBvZiB0aGUgZ2x5cGgncyByZWN0YW5nbGVcXG4gIHBvc2l0aW9uVmVjNC54eSAqPSB1R2x5cGhSZWN0Lnp3IC0gdUdseXBoUmVjdC54eTtcXG5cXG4gIC8vIG1vdmUgdG8gdGhlIGNvcm5lciBvZiB0aGUgZ2x5cGhcXG4gIHBvc2l0aW9uVmVjNC54eSArPSB1R2x5cGhSZWN0Lnh5O1xcblxcbiAgLy8gbW92ZSB0byB0aGUgbGV0dGVyJ3MgbGluZSBvZmZzZXRcXG4gIHBvc2l0aW9uVmVjNC54ICs9IHVHbHlwaE9mZnNldDtcXG4gIFxcbiAgZ2xfUG9zaXRpb24gPSB1UHJvamVjdGlvbk1hdHJpeCAqIHVNb2RlbFZpZXdNYXRyaXggKiBwb3NpdGlvblZlYzQ7XFxuICB2VGV4Q29vcmQgPSBhVGV4Q29vcmQ7XFxuICB3ID0gZ2xfUG9zaXRpb24udztcXG59XFxuXCIsZm9udEZyYWc6XCIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZVxcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xcblxcbiNpZiAwXFxuICAvLyBzaW11bGF0ZSBpbnRlZ2VyIG1hdGggdXNpbmcgZmxvYXRzXFxuXFx0I2RlZmluZSBpbnQgZmxvYXRcXG5cXHQjZGVmaW5lIGl2ZWMyIHZlYzJcXG5cXHQjZGVmaW5lIElOVCh4KSBmbG9hdCh4KVxcblxcblxcdGludCBpZmxvb3IoZmxvYXQgdikgeyByZXR1cm4gZmxvb3Iodik7IH1cXG5cXHRpdmVjMiBpZmxvb3IodmVjMiB2KSB7IHJldHVybiBmbG9vcih2KTsgfVxcblxcbiNlbHNlXFxuICAvLyB1c2UgbmF0aXZlIGludGVnZXIgbWF0aFxcblxcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcXG5cXHQjZGVmaW5lIElOVCh4KSB4XFxuXFxuXFx0aW50IGlmbG9vcihmbG9hdCB2KSB7IHJldHVybiBpbnQodik7IH1cXG5cXHRpbnQgaWZsb29yKGludCB2KSB7IHJldHVybiB2OyB9XFxuXFx0aXZlYzIgaWZsb29yKHZlYzIgdikgeyByZXR1cm4gaXZlYzIodik7IH1cXG5cXG4jZW5kaWZcXG5cXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlclN0cm9rZXM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJSb3dTdHJva2VzO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHVTYW1wbGVyUm93cztcXG51bmlmb3JtIHNhbXBsZXIyRCB1U2FtcGxlckNvbFN0cm9rZXM7XFxudW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXJDb2xzO1xcblxcbnVuaWZvcm0gaXZlYzIgdVN0cm9rZUltYWdlU2l6ZTtcXG51bmlmb3JtIGl2ZWMyIHVDZWxsc0ltYWdlU2l6ZTtcXG51bmlmb3JtIGl2ZWMyIHVHcmlkSW1hZ2VTaXplO1xcblxcbnVuaWZvcm0gaXZlYzIgdUdyaWRPZmZzZXQ7XFxudW5pZm9ybSBpdmVjMiB1R3JpZFNpemU7XFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcblxcbnZhcnlpbmcgdmVjMiB2VGV4Q29vcmQ7XFxuXFxuLy8gc29tZSBoZWxwZXIgZnVuY3Rpb25zXFxuaW50IHJvdW5kKGZsb2F0IHYpIHsgcmV0dXJuIGlmbG9vcih2ICsgMC41KTsgfVxcbml2ZWMyIHJvdW5kKHZlYzIgdikgeyByZXR1cm4gaWZsb29yKHYgKyAwLjUpOyB9XFxuZmxvYXQgc2F0dXJhdGUoZmxvYXQgdikgeyByZXR1cm4gY2xhbXAodiwgMC4wLCAxLjApOyB9XFxudmVjMiBzYXR1cmF0ZSh2ZWMyIHYpIHsgcmV0dXJuIGNsYW1wKHYsIDAuMCwgMS4wKTsgfVxcblxcbmludCBtdWwoZmxvYXQgdjEsIGludCB2Mikge1xcbiAgcmV0dXJuIGlmbG9vcih2MSAqIGZsb2F0KHYyKSk7XFxufVxcblxcbml2ZWMyIG11bCh2ZWMyIHYxLCBpdmVjMiB2Mikge1xcbiAgcmV0dXJuIGlmbG9vcih2MSAqIHZlYzIodjIpICsgMC41KTtcXG59XFxuXFxuLy8gdW5wYWNrIGEgMTYtYml0IGludGVnZXIgZnJvbSBhIGZsb2F0IHZlYzJcXG5pbnQgZ2V0SW50MTYodmVjMiB2KSB7XFxuICBpdmVjMiBpdiA9IHJvdW5kKHYgKiAyNTUuMCk7XFxuICByZXR1cm4gaXYueCAqIElOVCgxMjgpICsgaXYueTtcXG59XFxuXFxudmVjMiBwaXhlbFNjYWxlO1xcbnZlYzIgY292ZXJhZ2UgPSB2ZWMyKDAuMCk7XFxudmVjMiB3ZWlnaHQgPSB2ZWMyKDAuNSk7XFxuY29uc3QgZmxvYXQgbWluRGlzdGFuY2UgPSAxLjAvODE5Mi4wO1xcbmNvbnN0IGZsb2F0IGhhcmRuZXNzID0gMS4wNTsgLy8gYW1vdW50IG9mIGFudGlhbGlhc1xcblxcbi8vIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjdXJ2ZXMgaW4gYSBnbHlwaFxcbmNvbnN0IGludCBOID0gSU5UKDI1MCk7XFxuXFxuLy8gcmV0cmlldmVzIGFuIGluZGV4ZWQgcGl4ZWwgZnJvbSBhIHNhbXBsZXJcXG52ZWM0IGdldFRleGVsKHNhbXBsZXIyRCBzYW1wbGVyLCBpbnQgcG9zLCBpdmVjMiBzaXplKSB7XFxuICBpbnQgd2lkdGggPSBzaXplLng7XFxuICBpbnQgeSA9IGlmbG9vcihwb3MgLyB3aWR0aCk7XFxuICBpbnQgeCA9IHBvcyAtIHkgKiB3aWR0aDsgIC8vIHBvcyAlIHdpZHRoXFxuXFxuICByZXR1cm4gdGV4dHVyZTJEKHNhbXBsZXIsICh2ZWMyKHgsIHkpICsgMC41KSAvIHZlYzIoc2l6ZSkpO1xcbn1cXG5cXG52b2lkIGNhbHVsYXRlQ3Jvc3NpbmdzKHZlYzIgcDAsIHZlYzIgcDEsIHZlYzIgcDIsIG91dCB2ZWMyIEMxLCBvdXQgdmVjMiBDMikge1xcblxcbiAgLy8gZ2V0IHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIHF1YWRyYXRpYyBpbiB0XFxuICB2ZWMyIGEgPSBwMCAtIHAxICogMi4wICsgcDI7XFxuICB2ZWMyIGIgPSBwMCAtIHAxO1xcbiAgdmVjMiBjID0gcDAgLSB2VGV4Q29vcmQ7XFxuXFxuICAvLyBmb3VuZCBvdXQgd2hpY2ggdmFsdWVzIG9mICd0JyBpdCBjcm9zc2VzIHRoZSBheGVzXFxuICB2ZWMyIHN1cmQgPSBzcXJ0KG1heCh2ZWMyKDAuMCksIGIgKiBiIC0gYSAqIGMpKTtcXG4gIHZlYzIgdDEgPSAoKGIgLSBzdXJkKSAvIGEpLnl4O1xcbiAgdmVjMiB0MiA9ICgoYiArIHN1cmQpIC8gYSkueXg7XFxuXFxuICAvLyBhcHByb3hpbWF0ZSBzdHJhaWdodCBsaW5lcyB0byBhdm9pZCByb3VuZGluZyBlcnJvcnNcXG4gIGlmIChhYnMoYS55KSA8IDAuMDAxKVxcbiAgICB0MS54ID0gdDIueCA9IGMueSAvICgyLjAgKiBiLnkpO1xcblxcbiAgaWYgKGFicyhhLngpIDwgMC4wMDEpXFxuICAgIHQxLnkgPSB0Mi55ID0gYy54IC8gKDIuMCAqIGIueCk7XFxuXFxuICAvLyBwbHVnIGludG8gcXVhZHJhdGljIGZvcm11bGEgdG8gZmluZCB0aGUgY29ycmRpbmF0ZXMgb2YgdGhlIGNyb3NzaW5nc1xcbiAgQzEgPSAoKGEgKiB0MSAtIGIgKiAyLjApICogdDEgKyBjKSAqIHBpeGVsU2NhbGU7XFxuICBDMiA9ICgoYSAqIHQyIC0gYiAqIDIuMCkgKiB0MiArIGMpICogcGl4ZWxTY2FsZTtcXG59XFxuXFxudm9pZCBjb3ZlcmFnZVgodmVjMiBwMCwgdmVjMiBwMSwgdmVjMiBwMikge1xcblxcbiAgdmVjMiBDMSwgQzI7XFxuICBjYWx1bGF0ZUNyb3NzaW5ncyhwMCwgcDEsIHAyLCBDMSwgQzIpO1xcblxcbiAgLy8gZGV0ZXJtaW5lIG9uIHdoaWNoIHNpZGUgb2YgdGhlIHgtYXhpcyB0aGUgcG9pbnRzIGxpZVxcbiAgYm9vbCB5MCA9IHAwLnkgPiB2VGV4Q29vcmQueTtcXG4gIGJvb2wgeTEgPSBwMS55ID4gdlRleENvb3JkLnk7XFxuICBib29sIHkyID0gcDIueSA+IHZUZXhDb29yZC55O1xcblxcbiAgLy8gY291bGQgd2ViIGJlIHVuZGVyIHRoZSBjdXJ2ZSAoYWZ0ZXIgdDEpP1xcbiAgaWYgKHkxID8gIXkyIDogeTApIHtcXG4gICAgLy8gYWRkIHRoZSBjb3ZlcmFnZSBmb3IgdDFcXG4gICAgY292ZXJhZ2UueCArPSBzYXR1cmF0ZShDMS54ICsgMC41KTtcXG4gICAgLy8gY2FsY3VsYXRlIHRoZSBhbnRpLWFsaWFzaW5nIGZvciB0MVxcbiAgICB3ZWlnaHQueCA9IG1pbih3ZWlnaHQueCwgYWJzKEMxLngpKTtcXG4gIH1cXG5cXG4gIC8vIGFyZSB3ZSBvdXRzaWRlIHRoZSBjdXJ2ZSAoYWZ0ZXIgdDIpP1xcbiAgaWYgKHkxID8gIXkwIDogeTIpIHtcXG4gICAgLy8gc3VidHJhY3QgdGhlIGNvdmVyYWdlIGZvciB0MlxcbiAgICBjb3ZlcmFnZS54IC09IHNhdHVyYXRlKEMyLnggKyAwLjUpO1xcbiAgICAvLyBjYWxjdWxhdGUgdGhlIGFudGktYWxpYXNpbmcgZm9yIHQyXFxuICAgIHdlaWdodC54ID0gbWluKHdlaWdodC54LCBhYnMoQzIueCkpO1xcbiAgfVxcbn1cXG5cXG4vLyB0aGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIGNvdmVyYWdlWCwgYnV0IHdpdGggdGhlIGF4ZXMgc3dhcHBlZFxcbnZvaWQgY292ZXJhZ2VZKHZlYzIgcDAsIHZlYzIgcDEsIHZlYzIgcDIpIHtcXG5cXG4gIHZlYzIgQzEsIEMyO1xcbiAgY2FsdWxhdGVDcm9zc2luZ3MocDAsIHAxLCBwMiwgQzEsIEMyKTtcXG5cXG4gIGJvb2wgeDAgPSBwMC54ID4gdlRleENvb3JkLng7XFxuICBib29sIHgxID0gcDEueCA+IHZUZXhDb29yZC54O1xcbiAgYm9vbCB4MiA9IHAyLnggPiB2VGV4Q29vcmQueDtcXG5cXG4gIGlmICh4MSA/ICF4MiA6IHgwKSB7XFxuICAgIGNvdmVyYWdlLnkgLT0gc2F0dXJhdGUoQzEueSArIDAuNSk7XFxuICAgIHdlaWdodC55ID0gbWluKHdlaWdodC55LCBhYnMoQzEueSkpO1xcbiAgfVxcblxcbiAgaWYgKHgxID8gIXgwIDogeDIpIHtcXG4gICAgY292ZXJhZ2UueSArPSBzYXR1cmF0ZShDMi55ICsgMC41KTtcXG4gICAgd2VpZ2h0LnkgPSBtaW4od2VpZ2h0LnksIGFicyhDMi55KSk7XFxuICB9XFxufVxcblxcbnZvaWQgbWFpbigpIHtcXG5cXG4gIC8vIGNhbGN1bGF0ZSB0aGUgcGl4ZWwgc2NhbGUgYmFzZWQgb24gc2NyZWVuLWNvb3JkaW5hdGVzXFxuICBwaXhlbFNjYWxlID0gaGFyZG5lc3MgLyBmd2lkdGgodlRleENvb3JkKTtcXG5cXG4gIC8vIHdoaWNoIGdyaWQgY2VsbCBpcyB0aGlzIHBpeGVsIGluP1xcbiAgaXZlYzIgZ3JpZENvb3JkID0gaWZsb29yKHZUZXhDb29yZCAqIHZlYzIodUdyaWRTaXplKSk7XFxuXFxuICAvLyBpbnRlcnNlY3QgY3VydmVzIGluIHRoaXMgcm93XFxuICB7XFxuICAgIC8vIHRoZSBpbmRleCBpbnRvIHRoZSByb3cgaW5mbyBiaXRtYXBcXG4gICAgaW50IHJvd0luZGV4ID0gZ3JpZENvb3JkLnkgKyB1R3JpZE9mZnNldC55O1xcbiAgICAvLyBmZXRjaCB0aGUgaW5mbyB0ZXhlbFxcbiAgICB2ZWM0IHJvd0luZm8gPSBnZXRUZXhlbCh1U2FtcGxlclJvd3MsIHJvd0luZGV4LCB1R3JpZEltYWdlU2l6ZSk7XFxuICAgIC8vIHVucGFjayB0aGUgcm93SW5mb1xcbiAgICBpbnQgcm93U3Ryb2tlSW5kZXggPSBnZXRJbnQxNihyb3dJbmZvLnh5KTtcXG4gICAgaW50IHJvd1N0cm9rZUNvdW50ID0gZ2V0SW50MTYocm93SW5mby56dyk7XFxuXFxuICAgIGZvciAoaW50IGlSb3dTdHJva2UgPSBJTlQoMCk7IGlSb3dTdHJva2UgPCBOOyBpUm93U3Ryb2tlKyspIHtcXG4gICAgICBpZiAoaVJvd1N0cm9rZSA+PSByb3dTdHJva2VDb3VudClcXG4gICAgICAgIGJyZWFrO1xcblxcbiAgICAgIC8vIGVhY2ggc3Ryb2tlIGlzIG1hZGUgdXAgb2YgMyBwb2ludHM6IHRoZSBzdGFydCBhbmQgY29udHJvbCBwb2ludFxcbiAgICAgIC8vIGFuZCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY3VydmUuXFxuICAgICAgLy8gZmV0Y2ggdGhlIGluZGljZXMgb2YgdGhpcyBwYWlyIG9mIHN0cm9rZXM6XFxuICAgICAgdmVjNCBzdHJva2VJbmRpY2VzID0gZ2V0VGV4ZWwodVNhbXBsZXJSb3dTdHJva2VzLCByb3dTdHJva2VJbmRleCsrLCB1Q2VsbHNJbWFnZVNpemUpO1xcblxcbiAgICAgIC8vIHVucGFjayB0aGUgc3Ryb2tlIGluZGV4XFxuICAgICAgaW50IHN0cm9rZVBvcyA9IGdldEludDE2KHN0cm9rZUluZGljZXMueHkpO1xcblxcbiAgICAgIC8vIGZldGNoIHRoZSB0d28gc3Ryb2tlc1xcbiAgICAgIHZlYzQgc3Ryb2tlMCA9IGdldFRleGVsKHVTYW1wbGVyU3Ryb2tlcywgc3Ryb2tlUG9zICsgSU5UKDApLCB1U3Ryb2tlSW1hZ2VTaXplKTtcXG4gICAgICB2ZWM0IHN0cm9rZTEgPSBnZXRUZXhlbCh1U2FtcGxlclN0cm9rZXMsIHN0cm9rZVBvcyArIElOVCgxKSwgdVN0cm9rZUltYWdlU2l6ZSk7XFxuXFxuICAgICAgLy8gY2FsY3VsYXRlIHRoZSBjb3ZlcmFnZVxcbiAgICAgIGNvdmVyYWdlWChzdHJva2UwLnh5LCBzdHJva2UwLnp3LCBzdHJva2UxLnh5KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLy8gaW50ZXJzZWN0IGN1cnZlcyBpbiB0aGlzIGNvbHVtblxcbiAge1xcbiAgICBpbnQgY29sSW5kZXggPSBncmlkQ29vcmQueCArIHVHcmlkT2Zmc2V0Lng7XFxuICAgIHZlYzQgY29sSW5mbyA9IGdldFRleGVsKHVTYW1wbGVyQ29scywgY29sSW5kZXgsIHVHcmlkSW1hZ2VTaXplKTtcXG4gICAgaW50IGNvbFN0cm9rZUluZGV4ID0gZ2V0SW50MTYoY29sSW5mby54eSk7XFxuICAgIGludCBjb2xTdHJva2VDb3VudCA9IGdldEludDE2KGNvbEluZm8uencpO1xcbiAgICBcXG4gICAgZm9yIChpbnQgaUNvbFN0cm9rZSA9IElOVCgwKTsgaUNvbFN0cm9rZSA8IE47IGlDb2xTdHJva2UrKykge1xcbiAgICAgIGlmIChpQ29sU3Ryb2tlID49IGNvbFN0cm9rZUNvdW50KVxcbiAgICAgICAgYnJlYWs7XFxuXFxuICAgICAgdmVjNCBzdHJva2VJbmRpY2VzID0gZ2V0VGV4ZWwodVNhbXBsZXJDb2xTdHJva2VzLCBjb2xTdHJva2VJbmRleCsrLCB1Q2VsbHNJbWFnZVNpemUpO1xcblxcbiAgICAgIGludCBzdHJva2VQb3MgPSBnZXRJbnQxNihzdHJva2VJbmRpY2VzLnh5KTtcXG4gICAgICB2ZWM0IHN0cm9rZTAgPSBnZXRUZXhlbCh1U2FtcGxlclN0cm9rZXMsIHN0cm9rZVBvcyArIElOVCgwKSwgdVN0cm9rZUltYWdlU2l6ZSk7XFxuICAgICAgdmVjNCBzdHJva2UxID0gZ2V0VGV4ZWwodVNhbXBsZXJTdHJva2VzLCBzdHJva2VQb3MgKyBJTlQoMSksIHVTdHJva2VJbWFnZVNpemUpO1xcbiAgICAgIGNvdmVyYWdlWShzdHJva2UwLnh5LCBzdHJva2UwLnp3LCBzdHJva2UxLnh5KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgd2VpZ2h0ID0gc2F0dXJhdGUoMS4wIC0gd2VpZ2h0ICogMi4wKTtcXG4gIGZsb2F0IGRpc3RhbmNlID0gbWF4KHdlaWdodC54ICsgd2VpZ2h0LnksIG1pbkRpc3RhbmNlKTsgLy8gbWFuaGF0dGFuIGFwcHJveC5cXG4gIGZsb2F0IGFudGlhbGlhcyA9IGFicyhkb3QoY292ZXJhZ2UsIHdlaWdodCkgLyBkaXN0YW5jZSk7XFxuICBmbG9hdCBjb3ZlciA9IG1pbihhYnMoY292ZXJhZ2UueCksIGFicyhjb3ZlcmFnZS55KSk7XFxuICBnbF9GcmFnQ29sb3IgPSB1TWF0ZXJpYWxDb2xvcjtcXG4gIGdsX0ZyYWdDb2xvci5hICo9IHNhdHVyYXRlKG1heChhbnRpYWxpYXMsIGNvdmVyKSk7XFxufVwiLGxpbmVWZXJ0OlwiLypcXG4gIFBhcnQgb2YgdGhlIFByb2Nlc3NpbmcgcHJvamVjdCAtIGh0dHA6Ly9wcm9jZXNzaW5nLm9yZ1xcbiAgQ29weXJpZ2h0IChjKSAyMDEyLTE1IFRoZSBQcm9jZXNzaW5nIEZvdW5kYXRpb25cXG4gIENvcHlyaWdodCAoYykgMjAwNC0xMiBCZW4gRnJ5IGFuZCBDYXNleSBSZWFzXFxuICBDb3B5cmlnaHQgKGMpIDIwMDEtMDQgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neVxcbiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxcbiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpY1xcbiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLjEuXFxuICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcXG4gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXFxuICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVVxcbiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cXG4gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbFxcbiAgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlXFxuICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLFxcbiAgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBXFxuKi9cXG5cXG4jZGVmaW5lIFBST0NFU1NJTkdfTElORV9TSEFERVJcXG5cXG51bmlmb3JtIG1hdDQgdU1vZGVsVmlld01hdHJpeDtcXG51bmlmb3JtIG1hdDQgdVByb2plY3Rpb25NYXRyaXg7XFxudW5pZm9ybSBmbG9hdCB1U3Ryb2tlV2VpZ2h0O1xcblxcbnVuaWZvcm0gdmVjNCB1Vmlld3BvcnQ7XFxuXFxuLy8gdXNpbmcgYSBzY2FsZSA8MSBtb3ZlcyB0aGUgbGluZXMgdG93YXJkcyB0aGUgY2FtZXJhXFxuLy8gaW4gb3JkZXIgdG8gcHJldmVudCBwb3BwaW5nIGVmZmVjdHMgZHVlIHRvIGhhbGYgb2ZcXG4vLyB0aGUgbGluZSBkaXNhcHBlYXJpbmcgYmVoaW5kIHRoZSBnZW9tZXRyeSBmYWNlcy5cXG52ZWMzIHNjYWxlID0gdmVjMygwLjk5OTUpO1xcblxcbmF0dHJpYnV0ZSB2ZWM0IGFQb3NpdGlvbjtcXG5hdHRyaWJ1dGUgdmVjNCBhRGlyZWN0aW9uO1xcbiAgXFxudm9pZCBtYWluKCkge1xcbiAgdmVjNCBwb3NwID0gdU1vZGVsVmlld01hdHJpeCAqIGFQb3NpdGlvbjtcXG4gIHZlYzQgcG9zcSA9IHVNb2RlbFZpZXdNYXRyaXggKiAoYVBvc2l0aW9uICsgdmVjNChhRGlyZWN0aW9uLnh5eiwgMCkpO1xcblxcbiAgLy8gTW92aW5nIHZlcnRpY2VzIHNsaWdodGx5IHRvd2FyZCB0aGUgY2FtZXJhXFxuICAvLyB0byBhdm9pZCBkZXB0aC1maWdodGluZyB3aXRoIHRoZSBmaWxsIHRyaWFuZ2xlcy5cXG4gIC8vIERpc2N1c3NlZCBoZXJlOlxcbiAgLy8gaHR0cDovL3d3dy5vcGVuZ2wub3JnL2Rpc2N1c3Npb25fYm9hcmRzL3ViYnRocmVhZHMucGhwP3ViYj1zaG93ZmxhdCZOdW1iZXI9MjUyODQ4ICBcXG4gIHBvc3AueHl6ID0gcG9zcC54eXogKiBzY2FsZTtcXG4gIHBvc3EueHl6ID0gcG9zcS54eXogKiBzY2FsZTtcXG5cXG4gIHZlYzQgcCA9IHVQcm9qZWN0aW9uTWF0cml4ICogcG9zcDtcXG4gIHZlYzQgcSA9IHVQcm9qZWN0aW9uTWF0cml4ICogcG9zcTtcXG5cXG4gIC8vIGZvcm11bGEgdG8gY29udmVydCBmcm9tIGNsaXAgc3BhY2UgKHJhbmdlIC0xLi4xKSB0byBzY3JlZW4gc3BhY2UgKHJhbmdlIDAuLlt3aWR0aCBvciBoZWlnaHRdKVxcbiAgLy8gc2NyZWVuX3AgPSAocC54eS9wLncgKyA8MSwxPikgKiAwLjUgKiB1Vmlld3BvcnQuendcXG5cXG4gIC8vIHByZXZlbnQgZGl2aXNpb24gYnkgVyBieSB0cmFuc2Zvcm1pbmcgdGhlIHRhbmdlbnQgZm9ybXVsYSAoZGl2IGJ5IDAgY2F1c2VzXFxuICAvLyB0aGUgbGluZSB0byBkaXNhcHBlYXIsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvY2Vzc2luZy9wcm9jZXNzaW5nL2lzc3Vlcy81MTgzKVxcbiAgLy8gdCA9IHNjcmVlbl9xIC0gc2NyZWVuX3BcXG4gIC8vXFxuICAvLyB0YW5nZW50IGlzIG5vcm1hbGl6ZWQgYW5kIHdlIGRvbid0IGNhcmUgd2hpY2ggYURpcmVjdGlvbiBpdCBwb2ludHMgdG8gKCstKVxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggc2NyZWVuX3EgLSBzY3JlZW5fcCApXFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCAocS54eS9xLncrPDEsMT4pKjAuNSp1Vmlld3BvcnQuencgLSAocC54eS9wLncrPDEsMT4pKjAuNSp1Vmlld3BvcnQuencgKVxcbiAgLy9cXG4gIC8vIGV4dHJhY3QgY29tbW9uIGZhY3RvciwgPDEsMT4gLSA8MSwxPiBjYW5jZWxzIG91dFxcbiAgLy8gdCA9ICstIG5vcm1hbGl6ZSggKHEueHkvcS53IC0gcC54eS9wLncpICogMC41ICogdVZpZXdwb3J0Lnp3IClcXG4gIC8vXFxuICAvLyBjb252ZXJ0IHRvIGNvbW1vbiBkaXZpc29yXFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCAoKHEueHkqcC53IC0gcC54eSpxLncpIC8gKHAudypxLncpKSAqIDAuNSAqIHVWaWV3cG9ydC56dyApXFxuICAvL1xcbiAgLy8gcmVtb3ZlIHRoZSBjb21tb24gc2NhbGFyIGRpdmlzb3IvZmFjdG9yLCBub3QgbmVlZGVkIGR1ZSB0byBub3JtYWxpemUgYW5kICstXFxuICAvLyAoa2VlcCB1Vmlld3BvcnQgLSBjYW4ndCByZW1vdmUgYmVjYXVzZSBpdCBoYXMgZGlmZmVyZW50IGNvbXBvbmVudHMgZm9yIHggYW5kIHlcXG4gIC8vICBhbmQgY29ycmVjdHMgZm9yIGFzcGVjdCByYXRpbywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9jZXNzaW5nL3Byb2Nlc3NpbmcvaXNzdWVzLzUxODEpXFxuICAvLyB0ID0gKy0gbm9ybWFsaXplKCAocS54eSpwLncgLSBwLnh5KnEudykgKiB1Vmlld3BvcnQuencgKVxcblxcbiAgdmVjMiB0YW5nZW50ID0gbm9ybWFsaXplKChxLnh5KnAudyAtIHAueHkqcS53KSAqIHVWaWV3cG9ydC56dyk7XFxuXFxuICAvLyBmbGlwIHRhbmdlbnQgdG8gbm9ybWFsIChpdCdzIGFscmVhZHkgbm9ybWFsaXplZClcXG4gIHZlYzIgbm9ybWFsID0gdmVjMigtdGFuZ2VudC55LCB0YW5nZW50LngpO1xcblxcbiAgZmxvYXQgdGhpY2tuZXNzID0gYURpcmVjdGlvbi53ICogdVN0cm9rZVdlaWdodDtcXG4gIHZlYzIgb2Zmc2V0ID0gbm9ybWFsICogdGhpY2tuZXNzIC8gMi4wO1xcblxcbiAgLy8gUGVyc3BlY3RpdmUgLS0tXFxuICAvLyBjb252ZXJ0IGZyb20gd29ybGQgdG8gY2xpcCBieSBtdWx0aXBseWluZyB3aXRoIHByb2plY3Rpb24gc2NhbGluZyBmYWN0b3JcXG4gIC8vIHRvIGdldCB0aGUgcmlnaHQgdGhpY2tuZXNzIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb2Nlc3NpbmcvcHJvY2Vzc2luZy9pc3N1ZXMvNTE4MilcXG4gIC8vIGludmVydCBZLCBwcm9qZWN0aW9ucyBpbiBQcm9jZXNzaW5nIGludmVydCBZXFxuICB2ZWMyIHBlcnNwU2NhbGUgPSAodVByb2plY3Rpb25NYXRyaXggKiB2ZWM0KDEsIC0xLCAwLCAwKSkueHk7XFxuXFxuICAvLyBObyBQZXJzcGVjdGl2ZSAtLS1cXG4gIC8vIG11bHRpcGx5IGJ5IFcgKHRvIGNhbmNlbCBvdXQgZGl2aXNpb24gYnkgVyBsYXRlciBpbiB0aGUgcGlwZWxpbmUpIGFuZFxcbiAgLy8gY29udmVydCBmcm9tIHNjcmVlbiB0byBjbGlwIChkZXJpdmVkIGZyb20gY2xpcCB0byBzY3JlZW4gYWJvdmUpXFxuICB2ZWMyIG5vUGVyc3BTY2FsZSA9IHAudyAvICgwLjUgKiB1Vmlld3BvcnQuencpO1xcblxcbiAgLy9nbF9Qb3NpdGlvbi54eSA9IHAueHkgKyBvZmZzZXQueHkgKiBtaXgobm9QZXJzcFNjYWxlLCBwZXJzcFNjYWxlLCBmbG9hdChwZXJzcGVjdGl2ZSA+IDApKTtcXG4gIGdsX1Bvc2l0aW9uLnh5ID0gcC54eSArIG9mZnNldC54eSAqIHBlcnNwU2NhbGU7XFxuICBnbF9Qb3NpdGlvbi56dyA9IHAuenc7XFxufVxcblwiLGxpbmVGcmFnOlwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XFxucHJlY2lzaW9uIG1lZGl1bXAgaW50O1xcblxcbnVuaWZvcm0gdmVjNCB1TWF0ZXJpYWxDb2xvcjtcXG5cXG52b2lkIG1haW4oKSB7XFxuICBnbF9GcmFnQ29sb3IgPSB1TWF0ZXJpYWxDb2xvcjtcXG59XCIscG9pbnRWZXJ0OlwiYXR0cmlidXRlIHZlYzMgYVBvc2l0aW9uO1xcbnVuaWZvcm0gZmxvYXQgdVBvaW50U2l6ZTtcXG52YXJ5aW5nIGZsb2F0IHZTdHJva2VXZWlnaHQ7XFxudW5pZm9ybSBtYXQ0IHVNb2RlbFZpZXdNYXRyaXg7XFxudW5pZm9ybSBtYXQ0IHVQcm9qZWN0aW9uTWF0cml4O1xcbnZvaWQgbWFpbigpIHtcXG5cXHR2ZWM0IHBvc2l0aW9uVmVjNCA9ICB2ZWM0KGFQb3NpdGlvbiwgMS4wKTtcXG5cXHRnbF9Qb3NpdGlvbiA9IHVQcm9qZWN0aW9uTWF0cml4ICogdU1vZGVsVmlld01hdHJpeCAqIHBvc2l0aW9uVmVjNDtcXG5cXHRnbF9Qb2ludFNpemUgPSB1UG9pbnRTaXplO1xcblxcdHZTdHJva2VXZWlnaHQgPSB1UG9pbnRTaXplO1xcbn1cIixwb2ludEZyYWc6XCJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcXG5wcmVjaXNpb24gbWVkaXVtcCBpbnQ7XFxudW5pZm9ybSB2ZWM0IHVNYXRlcmlhbENvbG9yO1xcbnZhcnlpbmcgZmxvYXQgdlN0cm9rZVdlaWdodDtcXG5cXG52b2lkIG1haW4oKXtcXG5cXHRmbG9hdCBtYXNrID0gMC4wO1xcblxcblxcdC8vIG1ha2UgYSBjaXJjdWxhciBtYXNrIHVzaW5nIHRoZSBnbF9Qb2ludENvb3JkIChnb2VzIGZyb20gMCAtIDEgb24gYSBwb2ludClcXG4gICAgLy8gbWlnaHQgYmUgYWJsZSB0byBnZXQgYSBuaWNlciBlZGdlIG9uIGJpZyBzdHJva2V3ZWlnaHRzIHdpdGggc21vb3Roc3RlcCBidXQgc2xpZ2h0bHkgbGVzcyBwZXJmb3JtYW50XFxuXFxuXFx0bWFzayA9IHN0ZXAoMC45OCwgbGVuZ3RoKGdsX1BvaW50Q29vcmQgKiAyLjAgLSAxLjApKTtcXG5cXG5cXHQvLyBpZiBzdHJva2VXZWlnaHQgaXMgMSBvciBsZXNzIGxldHMganVzdCBkcmF3IGEgc3F1YXJlXFxuXFx0Ly8gdGhpcyBwcmV2ZW50cyB3ZWlyZCBhcnRpZmFjdGluZyBmcm9tIGNhcnZpbmcgY2lyY2xlcyB3aGVuIG91ciBwb2ludHMgYXJlIHJlYWxseSBzbWFsbFxcblxcdC8vIGlmIHN0cm9rZVdlaWdodCBpcyBsYXJnZXIgdGhhbiAxLCB3ZSBqdXN0IHVzZSBpdCBhcyBpc1xcblxcblxcdG1hc2sgPSBtaXgoMC4wLCBtYXNrLCBjbGFtcChmbG9vcih2U3Ryb2tlV2VpZ2h0IC0gMC41KSwwLjAsMS4wKSk7XFxuXFxuXFx0Ly8gdGhyb3cgYXdheSB0aGUgYm9yZGVycyBvZiB0aGUgbWFza1xcbiAgICAvLyBvdGhlcndpc2Ugd2UgZ2V0IHdlaXJkIGFscGhhIGJsZW5kaW5nIGlzc3Vlc1xcblxcblxcdGlmKG1hc2sgPiAwLjk4KXtcXG4gICAgICBkaXNjYXJkO1xcbiAgXFx0fVxcblxcbiAgXFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCh1TWF0ZXJpYWxDb2xvci5yZ2IgKiAoMS4wIC0gbWFzayksIHVNYXRlcmlhbENvbG9yLmEpIDtcXG59XCJ9O2QuUmVuZGVyZXJHTD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gZC5SZW5kZXJlci5jYWxsKHRoaXMsYSxiLGMpLHRoaXMuYXR0cmlidXRlcz17fSxlPWV8fHt9LHRoaXMuYXR0cmlidXRlcy5hbHBoYT12b2lkIDA9PT1lLmFscGhhfHxlLmFscGhhLHRoaXMuYXR0cmlidXRlcy5kZXB0aD12b2lkIDA9PT1lLmRlcHRofHxlLmRlcHRoLHRoaXMuYXR0cmlidXRlcy5zdGVuY2lsPXZvaWQgMD09PWUuc3RlbmNpbHx8ZS5zdGVuY2lsLHRoaXMuYXR0cmlidXRlcy5hbnRpYWxpYXM9dm9pZCAwIT09ZS5hbnRpYWxpYXMmJmUuYW50aWFsaWFzLHRoaXMuYXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGE9dm9pZCAwIT09ZS5wcmVtdWx0aXBsaWVkQWxwaGEmJmUucHJlbXVsdGlwbGllZEFscGhhLHRoaXMuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9dm9pZCAwPT09ZS5wcmVzZXJ2ZURyYXdpbmdCdWZmZXJ8fGUucHJlc2VydmVEcmF3aW5nQnVmZmVyLHRoaXMuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nPXZvaWQgMCE9PWUucGVyUGl4ZWxMaWdodGluZyYmZS5wZXJQaXhlbExpZ2h0aW5nLHRoaXMuX2luaXRDb250ZXh0KCksdGhpcy5pc1AzRD0hMCx0aGlzLkdMPXRoaXMuZHJhd2luZ0NvbnRleHQsdGhpcy5hbWJpZW50TGlnaHRDb2xvcnM9W10sdGhpcy5kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9ucz1bXSx0aGlzLmRpcmVjdGlvbmFsTGlnaHRDb2xvcnM9W10sdGhpcy5wb2ludExpZ2h0UG9zaXRpb25zPVtdLHRoaXMucG9pbnRMaWdodENvbG9ycz1bXSx0aGlzLnVNVk1hdHJpeD1uZXcgZC5NYXRyaXgsdGhpcy51UE1hdHJpeD1uZXcgZC5NYXRyaXgsdGhpcy51Tk1hdHJpeD1uZXcgZC5NYXRyaXgoXCJtYXQzXCIpLHRoaXMuX2N1ckNhbWVyYT1uZXcgZC5DYW1lcmEodGhpcyksdGhpcy5fY3VyQ2FtZXJhLl9jb21wdXRlQ2FtZXJhRGVmYXVsdFNldHRpbmdzKCksdGhpcy5fY3VyQ2FtZXJhLl9zZXREZWZhdWx0Q2FtZXJhKCksdGhpcy5nSGFzaD17fSx0aGlzLl9kZWZhdWx0TGlnaHRTaGFkZXI9dm9pZCAwLHRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9ybWFsU2hhZGVyPXZvaWQgMCx0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXI9dm9pZCAwLHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcj12b2lkIDAsdGhpcy5jdXJGaWxsU2hhZGVyPXZvaWQgMCx0aGlzLmN1clN0cm9rZVNoYWRlcj12b2lkIDAsdGhpcy5jdXJQb2ludFNoYWRlcj12b2lkIDAsdGhpcy5fdXNlQ29sb3JTaGFkZXIoKSx0aGlzLnNldFN0cm9rZVNoYWRlcih0aGlzLl9nZXRMaW5lU2hhZGVyKCkpLHRoaXMuX3VzZVBvaW50U2hhZGVyKCksdGhpcy5fcG9pbnRWZXJ0ZXhCdWZmZXI9dGhpcy5HTC5jcmVhdGVCdWZmZXIoKSx0aGlzLmlzSW1tZWRpYXRlRHJhd2luZz0hMSx0aGlzLmltbWVkaWF0ZU1vZGU9e30sdGhpcy5maWxsKDI1NSwyNTUsMjU1LDI1NSksdGhpcy5wb2ludFNpemU9NSx0aGlzLnN0cm9rZVdlaWdodCgxKSx0aGlzLnN0cm9rZSgwLDAsMCksdGhpcy50ZXh0dXJlcz1bXSx0aGlzLl9jdXJ2ZVRpZ2h0bmVzcz02LHRoaXMuX2xvb2tVcFRhYmxlQmV6aWVyPVtdLHRoaXMuX2xvb2tVcFRhYmxlUXVhZHJhdGljPVtdLHRoaXMuX2x1dEJlemllckRldGFpbD0wLHRoaXMuX2x1dFF1YWRyYXRpY0RldGFpbD0wLHRoaXMuX3Rlc3N5PXRoaXMuX2luaXRUZXNzeSgpLHRoaXMuZm9udEluZm9zPXt9LHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLlJlbmRlcmVyLnByb3RvdHlwZSksZC5SZW5kZXJlckdMLnByb3RvdHlwZS5faW5pdENvbnRleHQ9ZnVuY3Rpb24oKXt0cnl7aWYodGhpcy5kcmF3aW5nQ29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwid2ViZ2xcIix0aGlzLmF0dHJpYnV0ZXMpfHx0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiZXhwZXJpbWVudGFsLXdlYmdsXCIsdGhpcy5hdHRyaWJ1dGVzKSxudWxsPT09dGhpcy5kcmF3aW5nQ29udGV4dCl0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciBjcmVhdGluZyB3ZWJnbCBjb250ZXh0XCIpO2NvbnNvbGUubG9nKFwicDUuUmVuZGVyZXJHTDogZW5hYmxlZCB3ZWJnbCBjb250ZXh0XCIpO3ZhciBhPXRoaXMuZHJhd2luZ0NvbnRleHQ7YS5lbmFibGUoYS5ERVBUSF9URVNUKSxhLmRlcHRoRnVuYyhhLkxFUVVBTCksYS52aWV3cG9ydCgwLDAsYS5kcmF3aW5nQnVmZmVyV2lkdGgsYS5kcmF3aW5nQnVmZmVySGVpZ2h0KSx0aGlzLl92aWV3cG9ydD10aGlzLmRyYXdpbmdDb250ZXh0LmdldFBhcmFtZXRlcih0aGlzLmRyYXdpbmdDb250ZXh0LlZJRVdQT1JUKX1jYXRjaChhKXt0aHJvdyBhfX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fcmVzZXRDb250ZXh0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZT10aGlzLndpZHRoLGY9dGhpcy5oZWlnaHQsZz10aGlzLmNhbnZhcy5pZCxoPXRoaXMuY2FudmFzO2gmJmgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKSxoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksaC5pZD1nLHRoaXMuX3BJbnN0Ll91c2VyTm9kZT90aGlzLl9wSW5zdC5fdXNlck5vZGUuYXBwZW5kQ2hpbGQoaCk6ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSx0aGlzLl9wSW5zdC5jYW52YXM9aDt2YXIgaT1uZXcgZC5SZW5kZXJlckdMKHRoaXMuX3BJbnN0LmNhbnZhcyx0aGlzLl9wSW5zdCwhMCxhKTt0aGlzLl9wSW5zdC5fc2V0UHJvcGVydHkoXCJfcmVuZGVyZXJcIixpKSxpLnJlc2l6ZShlLGYpLGkuX2FwcGx5RGVmYXVsdHMoKSx0aGlzLl9wSW5zdC5fZWxlbWVudHMucHVzaChpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5hcHBseSh3aW5kb3cuX3JlbmRlcmVyLGIpfSwwKX0sZC5wcm90b3R5cGUuc2V0QXR0cmlidXRlcz1mdW5jdGlvbihhLGIpe3RoaXMuX2Fzc2VydDNkKFwic2V0QXR0cmlidXRlc1wiKTt2YXIgYzt2b2lkIDAhPT1iPyhjPXt9LGNbYV09Yik6YSBpbnN0YW5jZW9mIE9iamVjdCYmKGM9YSksdGhpcy5wdXNoKCksdGhpcy5fcmVuZGVyZXIuX3Jlc2V0Q29udGV4dChjKSx0aGlzLnBvcCgpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLnVNVk1hdHJpeC5zZXQodGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzBdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMl0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzNdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs0XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbNV0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzZdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFs3XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbOF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzldLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxMF0sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzExXSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTJdLHRoaXMuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NFsxM10sdGhpcy5fY3VyQ2FtZXJhLmNhbWVyYU1hdHJpeC5tYXQ0WzE0XSx0aGlzLl9jdXJDYW1lcmEuY2FtZXJhTWF0cml4Lm1hdDRbMTVdKSx0aGlzLmFtYmllbnRMaWdodENvbG9ycy5sZW5ndGg9MCx0aGlzLmRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25zLmxlbmd0aD0wLHRoaXMuZGlyZWN0aW9uYWxMaWdodENvbG9ycy5sZW5ndGg9MCx0aGlzLnBvaW50TGlnaHRQb3NpdGlvbnMubGVuZ3RoPTAsdGhpcy5wb2ludExpZ2h0Q29sb3JzLmxlbmd0aD0wfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmJhY2tncm91bmQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9wSW5zdC5jb2xvci5hcHBseSh0aGlzLl9wSW5zdCxhcmd1bWVudHMpLGI9YS5sZXZlbHNbMF0vMjU1LGM9YS5sZXZlbHNbMV0vMjU1LGQ9YS5sZXZlbHNbMl0vMjU1LGU9YS5sZXZlbHNbM10vMjU1O3RoaXMuR0wuY2xlYXJDb2xvcihiLGMsZCxlKSx0aGlzLkdMLmRlcHRoTWFzayghMCksdGhpcy5HTC5jbGVhcih0aGlzLkdMLkNPTE9SX0JVRkZFUl9CSVR8dGhpcy5HTC5ERVBUSF9CVUZGRVJfQklUKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGEsYixjLGYpe3ZhciBnPWQucHJvdG90eXBlLmNvbG9yLmFwcGx5KHRoaXMuX3BJbnN0LGFyZ3VtZW50cyk7dGhpcy5jdXJGaWxsQ29sb3I9Zy5fYXJyYXksdGhpcy5pc0ltbWVkaWF0ZURyYXdpbmc/dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldEltbWVkaWF0ZU1vZGVTaGFkZXIoKSk6dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldENvbG9yU2hhZGVyKCkpLHRoaXMuZHJhd01vZGU9ZS5GSUxMLHRoaXMuY3VyRmlsbFNoYWRlci5zZXRVbmlmb3JtKFwidU1hdGVyaWFsQ29sb3JcIix0aGlzLmN1ckZpbGxDb2xvcil9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc3Ryb2tlPWZ1bmN0aW9uKGEsYixjLGUpe2FyZ3VtZW50c1szXT0yNTU7dmFyIGY9ZC5wcm90b3R5cGUuY29sb3IuYXBwbHkodGhpcy5fcEluc3QsYXJndW1lbnRzKTt0aGlzLmN1clN0cm9rZUNvbG9yPWYuX2FycmF5LHRoaXMuY3VyU3Ryb2tlU2hhZGVyLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuY3VyU3Ryb2tlQ29sb3IpLHRoaXMuY3VyUG9pbnRTaGFkZXIuc2V0VW5pZm9ybShcInVNYXRlcmlhbENvbG9yXCIsZi5fYXJyYXkpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnN0cm9rZVdlaWdodD1mdW5jdGlvbihhKXt0aGlzLmN1clN0cm9rZVdlaWdodCE9PWEmJih0aGlzLnBvaW50U2l6ZT1hLHRoaXMuY3VyU3Ryb2tlV2VpZ2h0PWEsdGhpcy5jdXJTdHJva2VTaGFkZXIuc2V0VW5pZm9ybShcInVTdHJva2VXZWlnaHRcIixhKSx0aGlzLmN1clBvaW50U2hhZGVyLnNldFVuaWZvcm0oXCJ1UG9pbnRTaXplXCIsYSkpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIsYyxlKXtyZXR1cm4gZC5SZW5kZXJlcjJELnByb3RvdHlwZS5nZXQuYXBwbHkodGhpcyxbYSxiLGMsZV0pfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmxvYWRQaXhlbHM9ZnVuY3Rpb24oKXtpZighMCE9PXRoaXMuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpcmV0dXJuIHZvaWQgY29uc29sZS5sb2coXCJsb2FkUGl4ZWxzIG9ubHkgd29ya3MgaW4gV2ViR0wgd2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgaXMgdHJ1ZS5cIik7dmFyIGE9dGhpcy5fcEluc3QuX3BpeGVsRGVuc2l0eSxiPXRoaXMud2lkdGgsYz10aGlzLmhlaWdodDtiKj1hLGMqPWEsdm9pZCAwPT09dGhpcy5waXhlbHMmJih0aGlzLnBpeGVscz1uZXcgVWludDhBcnJheSh0aGlzLkdMLmRyYXdpbmdCdWZmZXJXaWR0aCp0aGlzLkdMLmRyYXdpbmdCdWZmZXJIZWlnaHQqNCkpLHRoaXMuR0wucmVhZFBpeGVscygwLDAsYixjLHRoaXMuR0wuUkdCQSx0aGlzLkdMLlVOU0lHTkVEX0JZVEUsdGhpcy5waXhlbHMpLHRoaXMuX3BJbnN0Ll9zZXRQcm9wZXJ0eShcInBpeGVsc1wiLHRoaXMucGl4ZWxzKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5nZW9tZXRyeUluSGFzaD1mdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5nSGFzaFthXX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oYSxiKXtkLlJlbmRlcmVyLnByb3RvdHlwZS5yZXNpemUuY2FsbCh0aGlzLGEsYiksdGhpcy5HTC52aWV3cG9ydCgwLDAsdGhpcy5HTC5kcmF3aW5nQnVmZmVyV2lkdGgsdGhpcy5HTC5kcmF3aW5nQnVmZmVySGVpZ2h0KSx0aGlzLl92aWV3cG9ydD10aGlzLkdMLmdldFBhcmFtZXRlcih0aGlzLkdMLlZJRVdQT1JUKSx0aGlzLl9jdXJDYW1lcmEuX3Jlc2l6ZSgpLHZvaWQgMCE9PXRoaXMucGl4ZWxzJiYodGhpcy5waXhlbHM9bmV3IFVpbnQ4QXJyYXkodGhpcy5HTC5kcmF3aW5nQnVmZmVyV2lkdGgqdGhpcy5HTC5kcmF3aW5nQnVmZmVySGVpZ2h0KjQpKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50c1swXXx8MCxiPWFyZ3VtZW50c1sxXXx8MCxjPWFyZ3VtZW50c1syXXx8MCxkPWFyZ3VtZW50c1szXXx8MDt0aGlzLkdMLmNsZWFyQ29sb3IoYSxiLGMsZCksdGhpcy5HTC5jbGVhcih0aGlzLkdMLkNPTE9SX0JVRkZFUl9CSVR8dGhpcy5HTC5ERVBUSF9CVUZGRVJfQklUKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhIGluc3RhbmNlb2YgZC5WZWN0b3ImJihjPWEueixiPWEueSxhPWEueCksdGhpcy51TVZNYXRyaXgudHJhbnNsYXRlKFthLGIsY10pLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLnVNVk1hdHJpeC5zY2FsZShhLGIsYyksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdm9pZCAwPT09Yj90aGlzLnJvdGF0ZVooYSk6KGFyZ3VtZW50c1swXT10aGlzLl9wSW5zdC5fZnJvbVJhZGlhbnMoYSksZC5NYXRyaXgucHJvdG90eXBlLnJvdGF0ZS5hcHBseSh0aGlzLnVNVk1hdHJpeCxhcmd1bWVudHMpLHRoaXMpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucm90YXRlKGEsMSwwLDApLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yb3RhdGUoYSwwLDEsMCksdGhpc30sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJvdGF0ZShhLDAsMCwxKSx0aGlzfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oKXt2YXIgYT1kLlJlbmRlcmVyLnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMpLGI9YS5wcm9wZXJ0aWVzO3JldHVybiBiLnVNVk1hdHJpeD10aGlzLnVNVk1hdHJpeC5jb3B5KCksYi51UE1hdHJpeD10aGlzLnVQTWF0cml4LmNvcHkoKSxiLl9jdXJDYW1lcmE9dGhpcy5fY3VyQ2FtZXJhLHRoaXMuX2N1ckNhbWVyYT10aGlzLl9jdXJDYW1lcmEuY29weSgpLGF9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUucmVzZXRNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51TVZNYXRyaXg9ZC5NYXRyaXguaWRlbnRpdHkodGhpcy5fcEluc3QpLHRoaXN9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2V0RmlsbFNoYWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jdXJGaWxsU2hhZGVyIT09YSYmKHRoaXMuY3VyRmlsbFNoYWRlcj1hLHRoaXMuY3VyRmlsbFNoYWRlci5pbml0KCkpLHRoaXMuY3VyRmlsbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5zZXRQb2ludFNoYWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jdXJQb2ludFNoYWRlciE9PWEmJih0aGlzLmN1clBvaW50U2hhZGVyPWEsdGhpcy5jdXJQb2ludFNoYWRlci5pbml0KCkpLHRoaXMuY3VyUG9pbnRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc2V0U3Ryb2tlU2hhZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmN1clN0cm9rZVNoYWRlciE9PWEmJih0aGlzLmN1clN0cm9rZVNoYWRlcj1hLHRoaXMuY3VyU3Ryb2tlU2hhZGVyLmluaXQoKSksdGhpcy5jdXJTdHJva2VTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3VzZUxpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciYmdGhpcy5jdXJGaWxsU2hhZGVyLmlzTGlnaHRTaGFkZXIoKXx8dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldExpZ2h0U2hhZGVyKCkpLHRoaXMuY3VyRmlsbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXNlQ29sb3JTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJGaWxsU2hhZGVyJiZ0aGlzLmN1ckZpbGxTaGFkZXIhPT10aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcnx8dGhpcy5zZXRGaWxsU2hhZGVyKHRoaXMuX2dldENvbG9yU2hhZGVyKCkpLHRoaXMuY3VyRmlsbFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdXNlUG9pbnRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJQb2ludFNoYWRlcnx8dGhpcy5zZXRQb2ludFNoYWRlcih0aGlzLl9nZXRQb2ludFNoYWRlcigpKSx0aGlzLmN1clBvaW50U2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl91c2VJbW1lZGlhdGVNb2RlU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VyRmlsbFNoYWRlciYmdGhpcy5jdXJGaWxsU2hhZGVyIT09dGhpcy5fZGVmYXVsdENvbG9yU2hhZGVyfHx0aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0SW1tZWRpYXRlTW9kZVNoYWRlcigpKSx0aGlzLmN1ckZpbGxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldExpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRMaWdodFNoYWRlcnx8KHRoaXMuYXR0cmlidXRlcy5wZXJQaXhlbExpZ2h0aW5nP3RoaXMuX2RlZmF1bHRMaWdodFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLnBob25nVmVydCxnLnBob25nRnJhZyk6dGhpcy5fZGVmYXVsdExpZ2h0U2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcubGlnaHRWZXJ0LGcubGlnaHRUZXh0dXJlRnJhZykpLHRoaXMuX2RlZmF1bHRMaWdodFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0SW1tZWRpYXRlTW9kZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0SW1tZWRpYXRlTW9kZVNoYWRlcnx8KHRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcuaW1tZWRpYXRlVmVydCxnLnZlcnRleENvbG9yRnJhZykpLHRoaXMuX2RlZmF1bHRJbW1lZGlhdGVNb2RlU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXROb3JtYWxTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdE5vcm1hbFNoYWRlcnx8KHRoaXMuX2RlZmF1bHROb3JtYWxTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5ub3JtYWxWZXJ0LGcubm9ybWFsRnJhZykpLHRoaXMuX2RlZmF1bHROb3JtYWxTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldENvbG9yU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcnx8KHRoaXMuX2RlZmF1bHRDb2xvclNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLm5vcm1hbFZlcnQsZy5iYXNpY0ZyYWcpKSx0aGlzLl9kZWZhdWx0Q29sb3JTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldFBvaW50U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcnx8KHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcj1uZXcgZC5TaGFkZXIodGhpcyxnLnBvaW50VmVydCxnLnBvaW50RnJhZykpLHRoaXMuX2RlZmF1bHRQb2ludFNoYWRlcn0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fZ2V0TGluZVNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0TGluZVNoYWRlcnx8KHRoaXMuX2RlZmF1bHRMaW5lU2hhZGVyPW5ldyBkLlNoYWRlcih0aGlzLGcubGluZVZlcnQsZy5saW5lRnJhZykpLHRoaXMuX2RlZmF1bHRMaW5lU2hhZGVyfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9nZXRGb250U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2hhZGVyfHwodGhpcy5HTC5nZXRFeHRlbnNpb24oXCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXNcIiksdGhpcy5fZGVmYXVsdEZvbnRTaGFkZXI9bmV3IGQuU2hhZGVyKHRoaXMsZy5mb250VmVydCxnLmZvbnRGcmFnKSksdGhpcy5fZGVmYXVsdEZvbnRTaGFkZXJ9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2dldEVtcHR5VGV4dHVyZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9lbXB0eVRleHR1cmUpe3ZhciBhPW5ldyBkLkltYWdlKDEsMSk7YS5zZXQoMCwwLDI1NSksdGhpcy5fZW1wdHlUZXh0dXJlPW5ldyBkLlRleHR1cmUodGhpcyxhKX1yZXR1cm4gdGhpcy5fZW1wdHlUZXh0dXJlfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLmdldFRleHR1cmU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMudGV4dHVyZXMsYz0wO2M8Yi5sZW5ndGg7KytjKXt2YXIgZT1iW2NdO2lmKGUuc3JjPT09YSlyZXR1cm4gZX12YXIgZj1uZXcgZC5UZXh0dXJlKHRoaXMsYSk7cmV0dXJuIHRoaXMudGV4dHVyZXMucHVzaChmKSxmfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9iaW5kQnVmZmVyPWZ1bmN0aW9uKGEsYixjLGQsZSl7aWYodGhpcy5HTC5iaW5kQnVmZmVyKGIsYSksdm9pZCAwIT09Yyl7dmFyIGY9bmV3IGQoYyk7dGhpcy5HTC5idWZmZXJEYXRhKGIsZixlKX19LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuc21vb3RoPWZ1bmN0aW9uKCl7ITE9PT10aGlzLmF0dHJpYnV0ZXMuYW50aWFsaWFzJiZ0aGlzLl9wSW5zdC5zZXRBdHRyaWJ1dGVzKFwiYW50aWFsaWFzXCIsITApfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLm5vU21vb3RoPWZ1bmN0aW9uKCl7ITA9PT10aGlzLmF0dHJpYnV0ZXMuYW50aWFsaWFzJiZ0aGlzLl9wSW5zdC5zZXRBdHRyaWJ1dGVzKFwiYW50aWFsaWFzXCIsITEpfSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9mbGF0dGVuPWZ1bmN0aW9uKGEpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm5bXTtpZihhLmxlbmd0aD4yZTQpe3ZhciBiLGM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxkPVwiW29iamVjdCBBcnJheV1cIixlPVtdLGY9YS5zbGljZSgpO2I9Zi5wb3AoKTtkb3tjLmNhbGwoYik9PT1kP2YucHVzaC5hcHBseShmLGIpOmUucHVzaChiKX13aGlsZShmLmxlbmd0aCYmdm9pZCAwIT09KGI9Zi5wb3AoKSkpO3JldHVybiBlLnJldmVyc2UoKSxlfXJldHVybltdLmNvbmNhdC5hcHBseShbXSxhKX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fdlRvTkFycmF5PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9mbGF0dGVuKGEubWFwKGZ1bmN0aW9uKGEpe3JldHVyblthLngsYS55LGEuel19KSl9LGQucHJvdG90eXBlLl9hc3NlcnQzZD1mdW5jdGlvbihhKXtpZighdGhpcy5fcmVuZGVyZXIuaXNQM0QpdGhyb3cgbmV3IEVycm9yKGErXCIoKSBpcyBvbmx5IHN1cHBvcnRlZCBpbiBXRUJHTCBtb2RlLiBJZiB5b3UnZCBsaWtlIHRvIHVzZSAzRCBncmFwaGljcyBhbmQgV2ViR0wsIHNlZSAgaHR0cHM6Ly9wNWpzLm9yZy9leGFtcGxlcy9mb3JtLTNkLXByaW1pdGl2ZXMuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIil9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX2luaXRUZXNzeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtiW2IubGVuZ3RoXT1hWzBdLGJbYi5sZW5ndGhdPWFbMV0sYltiLmxlbmd0aF09YVsyXX1mdW5jdGlvbiBiKGEpe2EhPT1mLnByaW1pdGl2ZVR5cGUuR0xfVFJJQU5HTEVTJiZjb25zb2xlLmxvZyhcImV4cGVjdGVkIFRSSUFOR0xFUyBidXQgZ290IHR5cGU6IFwiK2EpfWZ1bmN0aW9uIGMoYSl7Y29uc29sZS5sb2coXCJlcnJvciBjYWxsYmFja1wiKSxjb25zb2xlLmxvZyhcImVycm9yIG51bWJlcjogXCIrYSl9ZnVuY3Rpb24gZChhLGIsYyl7cmV0dXJuW2FbMF0sYVsxXSxhWzJdXX1mdW5jdGlvbiBlKGEpe312YXIgZz1uZXcgZi5HbHVUZXNzZWxhdG9yO3JldHVybiBnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfVkVSVEVYX0RBVEEsYSksZy5nbHVUZXNzQ2FsbGJhY2soZi5nbHVFbnVtLkdMVV9URVNTX0JFR0lOLGIpLGcuZ2x1VGVzc0NhbGxiYWNrKGYuZ2x1RW51bS5HTFVfVEVTU19FUlJPUixjKSxnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfQ09NQklORSxkKSxnLmdsdVRlc3NDYWxsYmFjayhmLmdsdUVudW0uR0xVX1RFU1NfRURHRV9GTEFHLGUpLGd9LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3RyaWFuZ3VsYXRlPWZ1bmN0aW9uKGEpe3RoaXMuX3Rlc3N5LmdsdVRlc3NOb3JtYWwoMCwwLDEpO3ZhciBiPVtdO3RoaXMuX3Rlc3N5LmdsdVRlc3NCZWdpblBvbHlnb24oYik7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3RoaXMuX3Rlc3N5LmdsdVRlc3NCZWdpbkNvbnRvdXIoKTtmb3IodmFyIGQ9YVtjXSxlPTA7ZTxkLmxlbmd0aDtlKz0zKXt2YXIgZj1bZFtlXSxkW2UrMV0sZFtlKzJdXTt0aGlzLl90ZXNzeS5nbHVUZXNzVmVydGV4KGYsZil9dGhpcy5fdGVzc3kuZ2x1VGVzc0VuZENvbnRvdXIoKX1yZXR1cm4gdGhpcy5fdGVzc3kuZ2x1VGVzc0VuZFBvbHlnb24oKSxifSxkLlJlbmRlcmVyR0wucHJvdG90eXBlLl9iZXppZXJDb2VmZmljaWVudHM9ZnVuY3Rpb24oYSl7dmFyIGI9YSphLGM9YiphLGQ9MS1hLGU9ZCpkO3JldHVybltlKmQsMyplKmEsMypkKmIsY119LGQuUmVuZGVyZXJHTC5wcm90b3R5cGUuX3F1YWRyYXRpY0NvZWZmaWNpZW50cz1mdW5jdGlvbihhKXt2YXIgYj1hKmEsYz0xLWE7cmV0dXJuW2MqYywyKmMqYSxiXX0sZC5SZW5kZXJlckdMLnByb3RvdHlwZS5fYmV6aWVyVG9DYXRtdWxsPWZ1bmN0aW9uKGEpe3JldHVyblthWzFdLGFbMV0rKGFbMl0tYVswXSkvdGhpcy5fY3VydmVUaWdodG5lc3MsYVsyXS0oYVszXS1hWzFdKS90aGlzLl9jdXJ2ZVRpZ2h0bmVzcyxhWzJdXX0sYi5leHBvcnRzPWQuUmVuZGVyZXJHTH0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0LFwiLi4vY29yZS9wNS5SZW5kZXJlclwiOjI3LFwiLi9wNS5DYW1lcmFcIjo2OSxcIi4vcDUuTWF0cml4XCI6NzEsXCIuL3A1LlNoYWRlclwiOjc1LGxpYnRlc3M6OX1dLDc1OltmdW5jdGlvbihhLGIsYyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9YShcIi4uL2NvcmUvbWFpblwiKTtkLlNoYWRlcj1mdW5jdGlvbihhLGIsYyl7dGhpcy5fcmVuZGVyZXI9YSx0aGlzLl92ZXJ0U3JjPWIsdGhpcy5fZnJhZ1NyYz1jLHRoaXMuX3ZlcnRTaGFkZXI9LTEsdGhpcy5fZnJhZ1NoYWRlcj0tMSx0aGlzLl9nbFByb2dyYW09MCx0aGlzLl9sb2FkZWRBdHRyaWJ1dGVzPSExLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLl9sb2FkZWRVbmlmb3Jtcz0hMSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMuX2JvdW5kPSExLHRoaXMuc2FtcGxlcnM9W119LGQuU2hhZGVyLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuX2dsUHJvZ3JhbSl7dmFyIGE9dGhpcy5fcmVuZGVyZXIuR0w7aWYodGhpcy5fdmVydFNoYWRlcj1hLmNyZWF0ZVNoYWRlcihhLlZFUlRFWF9TSEFERVIpLGEuc2hhZGVyU291cmNlKHRoaXMuX3ZlcnRTaGFkZXIsdGhpcy5fdmVydFNyYyksYS5jb21waWxlU2hhZGVyKHRoaXMuX3ZlcnRTaGFkZXIpLCFhLmdldFNoYWRlclBhcmFtZXRlcih0aGlzLl92ZXJ0U2hhZGVyLGEuQ09NUElMRV9TVEFUVVMpKXJldHVybiBjb25zb2xlLmVycm9yKFwiWWlrZXMhIEFuIGVycm9yIG9jY3VycmVkIGNvbXBpbGluZyB0aGUgdmVydGV4IHNoYWRlcjpcIithLmdldFNoYWRlckluZm9Mb2codGhpcy5fdmVydFNoYWRlcikpLG51bGw7aWYodGhpcy5fZnJhZ1NoYWRlcj1hLmNyZWF0ZVNoYWRlcihhLkZSQUdNRU5UX1NIQURFUiksYS5zaGFkZXJTb3VyY2UodGhpcy5fZnJhZ1NoYWRlcix0aGlzLl9mcmFnU3JjKSxhLmNvbXBpbGVTaGFkZXIodGhpcy5fZnJhZ1NoYWRlciksIWEuZ2V0U2hhZGVyUGFyYW1ldGVyKHRoaXMuX2ZyYWdTaGFkZXIsYS5DT01QSUxFX1NUQVRVUykpcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJEYXJuISBBbiBlcnJvciBvY2N1cnJlZCBjb21waWxpbmcgdGhlIGZyYWdtZW50IHNoYWRlcjpcIithLmdldFNoYWRlckluZm9Mb2codGhpcy5fZnJhZ1NoYWRlcikpLG51bGw7dGhpcy5fZ2xQcm9ncmFtPWEuY3JlYXRlUHJvZ3JhbSgpLGEuYXR0YWNoU2hhZGVyKHRoaXMuX2dsUHJvZ3JhbSx0aGlzLl92ZXJ0U2hhZGVyKSxhLmF0dGFjaFNoYWRlcih0aGlzLl9nbFByb2dyYW0sdGhpcy5fZnJhZ1NoYWRlciksYS5saW5rUHJvZ3JhbSh0aGlzLl9nbFByb2dyYW0pLGEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLl9nbFByb2dyYW0sYS5MSU5LX1NUQVRVUyl8fGNvbnNvbGUuZXJyb3IoXCJTbmFwISBFcnJvciBsaW5raW5nIHNoYWRlciBwcm9ncmFtOiBcIithLmdldFByb2dyYW1JbmZvTG9nKHRoaXMuX2dsUHJvZ3JhbSkpLHRoaXMuX2xvYWRBdHRyaWJ1dGVzKCksdGhpcy5fbG9hZFVuaWZvcm1zKCl9cmV0dXJuIHRoaXN9LGQuU2hhZGVyLnByb3RvdHlwZS5fbG9hZEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkQXR0cmlidXRlcyl7dGhpcy5hdHRyaWJ1dGVzPXt9O2Zvcih2YXIgYT10aGlzLl9yZW5kZXJlci5HTCxiPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLl9nbFByb2dyYW0sYS5BQ1RJVkVfQVRUUklCVVRFUyksYz0wO2M8YjsrK2Mpe3ZhciBkPWEuZ2V0QWN0aXZlQXR0cmliKHRoaXMuX2dsUHJvZ3JhbSxjKSxlPWQubmFtZSxmPWEuZ2V0QXR0cmliTG9jYXRpb24odGhpcy5fZ2xQcm9ncmFtLGUpLGc9e307Zy5uYW1lPWUsZy5sb2NhdGlvbj1mLGcudHlwZT1kLnR5cGUsZy5zaXplPWQuc2l6ZSx0aGlzLmF0dHJpYnV0ZXNbZV09Z310aGlzLl9sb2FkZWRBdHRyaWJ1dGVzPSEwfX0sZC5TaGFkZXIucHJvdG90eXBlLl9sb2FkVW5pZm9ybXM9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkVW5pZm9ybXMpe2Zvcih2YXIgYT10aGlzLl9yZW5kZXJlci5HTCxiPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLl9nbFByb2dyYW0sYS5BQ1RJVkVfVU5JRk9STVMpLGM9MCxkPTA7ZDxiOysrZCl7dmFyIGU9YS5nZXRBY3RpdmVVbmlmb3JtKHRoaXMuX2dsUHJvZ3JhbSxkKSxmPXt9O2YubG9jYXRpb249YS5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5fZ2xQcm9ncmFtLGUubmFtZSksZi5zaXplPWUuc2l6ZTt2YXIgZz1lLm5hbWU7ZS5zaXplPjEmJihnPWcuc3Vic3RyaW5nKDAsZy5pbmRleE9mKFwiWzBdXCIpKSksZi5uYW1lPWcsZi50eXBlPWUudHlwZSxmLnR5cGU9PT1hLlNBTVBMRVJfMkQmJihmLnNhbXBsZXJJbmRleD1jLGMrKyx0aGlzLnNhbXBsZXJzLnB1c2goZikpLHRoaXMudW5pZm9ybXNbZ109Zn10aGlzLl9sb2FkZWRVbmlmb3Jtcz0hMH19LGQuU2hhZGVyLnByb3RvdHlwZS5jb21waWxlPWZ1bmN0aW9uKCl7fSxkLlNoYWRlci5wcm90b3R5cGUuYmluZFNoYWRlcj1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuX2JvdW5kfHwodGhpcy51c2VQcm9ncmFtKCksdGhpcy5fYm91bmQ9ITAsdGhpcy5iaW5kVGV4dHVyZXMoKSx0aGlzLl9zZXRNYXRyaXhVbmlmb3JtcygpLHRoaXM9PT10aGlzLl9yZW5kZXJlci5jdXJTdHJva2VTaGFkZXImJnRoaXMuX3NldFZpZXdwb3J0VW5pZm9ybSgpKX0sZC5TaGFkZXIucHJvdG90eXBlLnVuYmluZFNoYWRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib3VuZCYmKHRoaXMudW5iaW5kVGV4dHVyZXMoKSx0aGlzLl9ib3VuZD0hMSksdGhpc30sZC5TaGFkZXIucHJvdG90eXBlLmJpbmRUZXh0dXJlcz1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLl9yZW5kZXJlci5HTCxiPTA7Yjx0aGlzLnNhbXBsZXJzLmxlbmd0aDtiKyspe3ZhciBjPXRoaXMuc2FtcGxlcnNbYl0sZD1jLnRleHR1cmU7dm9pZCAwPT09ZCYmKGQ9dGhpcy5fcmVuZGVyZXIuX2dldEVtcHR5VGV4dHVyZSgpKSxhLmFjdGl2ZVRleHR1cmUoYS5URVhUVVJFMCtjLnNhbXBsZXJJbmRleCksZC5iaW5kVGV4dHVyZSgpLGQudXBkYXRlKCksYS51bmlmb3JtMWkoYy5sb2NhdGlvbixjLnNhbXBsZXJJbmRleCl9fSxkLlNoYWRlci5wcm90b3R5cGUudXBkYXRlVGV4dHVyZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPHRoaXMuc2FtcGxlcnMubGVuZ3RoO2ErKyl7dmFyIGI9dGhpcy5zYW1wbGVyc1thXSxjPWIudGV4dHVyZTtjJiZjLnVwZGF0ZSgpfX0sZC5TaGFkZXIucHJvdG90eXBlLnVuYmluZFRleHR1cmVzPWZ1bmN0aW9uKCl7fSxkLlNoYWRlci5wcm90b3R5cGUuX3NldE1hdHJpeFVuaWZvcm1zPWZ1bmN0aW9uKCl7dGhpcy5zZXRVbmlmb3JtKFwidVByb2plY3Rpb25NYXRyaXhcIix0aGlzLl9yZW5kZXJlci51UE1hdHJpeC5tYXQ0KSx0aGlzLnNldFVuaWZvcm0oXCJ1TW9kZWxWaWV3TWF0cml4XCIsdGhpcy5fcmVuZGVyZXIudU1WTWF0cml4Lm1hdDQpLHRoaXMuc2V0VW5pZm9ybShcInVWaWV3TWF0cml4XCIsdGhpcy5fcmVuZGVyZXIuX2N1ckNhbWVyYS5jYW1lcmFNYXRyaXgubWF0NCksdGhpcz09PXRoaXMuX3JlbmRlcmVyLmN1ckZpbGxTaGFkZXImJih0aGlzLl9yZW5kZXJlci51Tk1hdHJpeC5pbnZlcnNlVHJhbnNwb3NlKHRoaXMuX3JlbmRlcmVyLnVNVk1hdHJpeCksdGhpcy5zZXRVbmlmb3JtKFwidU5vcm1hbE1hdHJpeFwiLHRoaXMuX3JlbmRlcmVyLnVOTWF0cml4Lm1hdDMpKX0sZC5TaGFkZXIucHJvdG90eXBlLl9zZXRWaWV3cG9ydFVuaWZvcm09ZnVuY3Rpb24oKXt0aGlzLnNldFVuaWZvcm0oXCJ1Vmlld3BvcnRcIix0aGlzLl9yZW5kZXJlci5fdmlld3BvcnQpfSxkLlNoYWRlci5wcm90b3R5cGUudXNlUHJvZ3JhbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5HTC51c2VQcm9ncmFtKHRoaXMuX2dsUHJvZ3JhbSksdGhpc30sZC5TaGFkZXIucHJvdG90eXBlLnNldFVuaWZvcm09ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLnVuaWZvcm1zW2FdO2lmKGMpe3ZhciBkPWMubG9jYXRpb24sZT10aGlzLl9yZW5kZXJlci5HTDtzd2l0Y2godGhpcy51c2VQcm9ncmFtKCksYy50eXBlKXtjYXNlIGUuQk9PTDohMD09PWI/ZS51bmlmb3JtMWkoZCwxKTplLnVuaWZvcm0xaShkLDApO2JyZWFrO2Nhc2UgZS5JTlQ6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTFpdihkLGIpOmUudW5pZm9ybTFpKGQsYik7YnJlYWs7Y2FzZSBlLkZMT0FUOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0xZnYoZCxiKTplLnVuaWZvcm0xZihkLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVF9NQVQzOmUudW5pZm9ybU1hdHJpeDNmdihkLCExLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVF9NQVQ0OmUudW5pZm9ybU1hdHJpeDRmdihkLCExLGIpO2JyZWFrO2Nhc2UgZS5GTE9BVF9WRUMyOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0yZnYoZCxiKTplLnVuaWZvcm0yZihkLGJbMF0sYlsxXSk7YnJlYWs7Y2FzZSBlLkZMT0FUX1ZFQzM6XG5jLnNpemU+MT9iLmxlbmd0aCYmZS51bmlmb3JtM2Z2KGQsYik6ZS51bmlmb3JtM2YoZCxiWzBdLGJbMV0sYlsyXSk7YnJlYWs7Y2FzZSBlLkZMT0FUX1ZFQzQ6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTRmdihkLGIpOmUudW5pZm9ybTRmKGQsYlswXSxiWzFdLGJbMl0sYlszXSk7YnJlYWs7Y2FzZSBlLklOVF9WRUMyOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0yaXYoZCxiKTplLnVuaWZvcm0yaShkLGJbMF0sYlsxXSk7YnJlYWs7Y2FzZSBlLklOVF9WRUMzOmMuc2l6ZT4xP2IubGVuZ3RoJiZlLnVuaWZvcm0zaXYoZCxiKTplLnVuaWZvcm0zaShkLGJbMF0sYlsxXSxiWzJdKTticmVhaztjYXNlIGUuSU5UX1ZFQzQ6Yy5zaXplPjE/Yi5sZW5ndGgmJmUudW5pZm9ybTRpdihkLGIpOmUudW5pZm9ybTRpKGQsYlswXSxiWzFdLGJbMl0sYlszXSk7YnJlYWs7Y2FzZSBlLlNBTVBMRVJfMkQ6ZS5hY3RpdmVUZXh0dXJlKGUuVEVYVFVSRTArYy5zYW1wbGVySW5kZXgpLGMudGV4dHVyZT10aGlzLl9yZW5kZXJlci5nZXRUZXh0dXJlKGIpLGUudW5pZm9ybTFpKGMubG9jYXRpb24sYy5zYW1wbGVySW5kZXgpfXJldHVybiB0aGlzfX0sZC5TaGFkZXIucHJvdG90eXBlLmlzTGlnaHRTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy51bmlmb3Jtcy51VXNlTGlnaHRpbmd8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudUFtYmllbnRMaWdodENvdW50fHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVEaXJlY3Rpb25hbExpZ2h0Q291bnR8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVBvaW50TGlnaHRDb3VudHx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51QW1iaWVudENvbG9yfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVEaXJlY3Rpb25hbENvbG9yfHx2b2lkIDAhPT10aGlzLnVuaWZvcm1zLnVQb2ludExpZ2h0TG9jYXRpb258fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVBvaW50TGlnaHRDb2xvcnx8dm9pZCAwIT09dGhpcy51bmlmb3Jtcy51TGlnaHRpbmdEaXJlY3Rpb258fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudVNwZWN1bGFyfSxkLlNoYWRlci5wcm90b3R5cGUuaXNUZXh0dXJlU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2FtcGxlckluZGV4PjB9LGQuU2hhZGVyLnByb3RvdHlwZS5pc0NvbG9yU2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuYXR0cmlidXRlcy5hVmVydGV4Q29sb3J8fHZvaWQgMCE9PXRoaXMudW5pZm9ybXMudU1hdGVyaWFsQ29sb3J9LGQuU2hhZGVyLnByb3RvdHlwZS5pc1RleExpZ2h0U2hhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNMaWdodFNoYWRlcigpJiZ0aGlzLmlzVGV4dHVyZVNoYWRlcigpfSxkLlNoYWRlci5wcm90b3R5cGUuaXNTdHJva2VTaGFkZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy51bmlmb3Jtcy51U3Ryb2tlV2VpZ2h0fSxkLlNoYWRlci5wcm90b3R5cGUuZW5hYmxlQXR0cmliPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz10aGlzLl9yZW5kZXJlci5HTDtyZXR1cm4tMSE9PWEmJihnLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGEpLGcudmVydGV4QXR0cmliUG9pbnRlcihhLGIsYyxkLGUsZikpLHRoaXN9LGIuZXhwb3J0cz1kLlNoYWRlcn0se1wiLi4vY29yZS9tYWluXCI6MjR9XSw3NjpbZnVuY3Rpb24oYSxiLGMpe1widXNlIHN0cmljdFwiO3ZhciBkPWEoXCIuLi9jb3JlL21haW5cIiksZT1hKFwiLi4vY29yZS9jb25zdGFudHNcIik7ZC5UZXh0dXJlPWZ1bmN0aW9uKGEsYil7dGhpcy5fcmVuZGVyZXI9YTt2YXIgYz10aGlzLl9yZW5kZXJlci5HTDt0aGlzLnNyYz1iLHRoaXMuZ2xUZXg9dm9pZCAwLHRoaXMuZ2xUYXJnZXQ9Yy5URVhUVVJFXzJELHRoaXMuZ2xGb3JtYXQ9Yy5SR0JBLHRoaXMubWlwbWFwcz0hMSx0aGlzLmdsTWluRmlsdGVyPWMuTElORUFSLHRoaXMuZ2xNYWdGaWx0ZXI9Yy5MSU5FQVIsdGhpcy5nbFdyYXBTPWMuQ0xBTVBfVE9fRURHRSx0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFLHRoaXMuaXNTcmNNZWRpYUVsZW1lbnQ9dm9pZCAwIT09ZC5NZWRpYUVsZW1lbnQmJmIgaW5zdGFuY2VvZiBkLk1lZGlhRWxlbWVudCx0aGlzLl92aWRlb1ByZXZVcGRhdGVUaW1lPTAsdGhpcy5pc1NyY0hUTUxFbGVtZW50PXZvaWQgMCE9PWQuRWxlbWVudCYmYiBpbnN0YW5jZW9mIGQuRWxlbWVudCYmIShiIGluc3RhbmNlb2YgZC5HcmFwaGljcyksdGhpcy5pc1NyY1A1SW1hZ2U9YiBpbnN0YW5jZW9mIGQuSW1hZ2UsdGhpcy5pc1NyY1A1R3JhcGhpY3M9YiBpbnN0YW5jZW9mIGQuR3JhcGhpY3MsdGhpcy5pc0ltYWdlRGF0YT1cInVuZGVmaW5lZFwiIT10eXBlb2YgSW1hZ2VEYXRhJiZiIGluc3RhbmNlb2YgSW1hZ2VEYXRhO3ZhciBlPXRoaXMuX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZSgpO3JldHVybiB0aGlzLndpZHRoPWUud2lkdGgsdGhpcy5oZWlnaHQ9ZS5oZWlnaHQsdGhpcy5pbml0KGUpLHRoaXN9LGQuVGV4dHVyZS5wcm90b3R5cGUuX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZT1mdW5jdGlvbigpe3ZhciBhO3JldHVybiB0aGlzLmlzU3JjUDVJbWFnZT9hPXRoaXMuc3JjLmNhbnZhczp0aGlzLmlzU3JjTWVkaWFFbGVtZW50fHx0aGlzLmlzU3JjUDVHcmFwaGljc3x8dGhpcy5pc1NyY0hUTUxFbGVtZW50P2E9dGhpcy5zcmMuZWx0OnRoaXMuaXNJbWFnZURhdGEmJihhPXRoaXMuc3JjKSxhfSxkLlRleHR1cmUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fcmVuZGVyZXIuR0w7aWYodGhpcy5nbFRleD1iLmNyZWF0ZVRleHR1cmUoKSx0aGlzLmJpbmRUZXh0dXJlKCksYi50ZXhQYXJhbWV0ZXJpKGIuVEVYVFVSRV8yRCxiLlRFWFRVUkVfTUFHX0ZJTFRFUix0aGlzLmdsTWFnRmlsdGVyKSxiLnRleFBhcmFtZXRlcmkoYi5URVhUVVJFXzJELGIuVEVYVFVSRV9NSU5fRklMVEVSLHRoaXMuZ2xNaW5GaWx0ZXIpLGIudGV4UGFyYW1ldGVyaShiLlRFWFRVUkVfMkQsYi5URVhUVVJFX1dSQVBfUyx0aGlzLmdsV3JhcFMpLGIudGV4UGFyYW1ldGVyaShiLlRFWFRVUkVfMkQsYi5URVhUVVJFX1dSQVBfVCx0aGlzLmdsV3JhcFQpLDA9PT10aGlzLndpZHRofHwwPT09dGhpcy5oZWlnaHR8fHRoaXMuaXNTcmNNZWRpYUVsZW1lbnQmJiF0aGlzLnNyYy5sb2FkZWRtZXRhZGF0YSl7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoWzEsMSwxLDFdKTtiLnRleEltYWdlMkQodGhpcy5nbFRhcmdldCwwLGIuUkdCQSwxLDEsMCx0aGlzLmdsRm9ybWF0LGIuVU5TSUdORURfQllURSxjKX1lbHNlIGIudGV4SW1hZ2UyRCh0aGlzLmdsVGFyZ2V0LDAsdGhpcy5nbEZvcm1hdCx0aGlzLmdsRm9ybWF0LGIuVU5TSUdORURfQllURSxhKX0sZC5UZXh0dXJlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNyYztpZigwPT09YS53aWR0aHx8MD09PWEuaGVpZ2h0KXJldHVybiExO3ZhciBiPXRoaXMuX2dldFRleHR1cmVEYXRhRnJvbVNvdXJjZSgpLGM9ITEsZD10aGlzLl9yZW5kZXJlci5HTDtyZXR1cm4gYi53aWR0aCE9PXRoaXMud2lkdGh8fGIuaGVpZ2h0IT09dGhpcy5oZWlnaHQ/KGM9ITAsdGhpcy53aWR0aD1iLndpZHRoLHRoaXMuaGVpZ2h0PWIuaGVpZ2h0LHRoaXMuaXNTcmNQNUltYWdlP2Euc2V0TW9kaWZpZWQoITEpOih0aGlzLmlzU3JjTWVkaWFFbGVtZW50fHx0aGlzLmlzU3JjSFRNTEVsZW1lbnQpJiZhLnNldE1vZGlmaWVkKCEwKSk6dGhpcy5pc1NyY1A1SW1hZ2U/YS5pc01vZGlmaWVkKCkmJihjPSEwLGEuc2V0TW9kaWZpZWQoITEpKTp0aGlzLmlzU3JjTWVkaWFFbGVtZW50P2EuaXNNb2RpZmllZCgpPyhjPSEwLGEuc2V0TW9kaWZpZWQoITEpKTphLmxvYWRlZG1ldGFkYXRhJiZ0aGlzLl92aWRlb1ByZXZVcGRhdGVUaW1lIT09YS50aW1lKCkmJih0aGlzLl92aWRlb1ByZXZVcGRhdGVUaW1lPWEudGltZSgpLGM9ITApOnRoaXMuaXNJbWFnZURhdGE/YS5fZGlydHkmJihhLl9kaXJ0eT0hMSxjPSEwKTpjPSEwLGMmJih0aGlzLmJpbmRUZXh0dXJlKCksZC50ZXhJbWFnZTJEKHRoaXMuZ2xUYXJnZXQsMCx0aGlzLmdsRm9ybWF0LHRoaXMuZ2xGb3JtYXQsZC5VTlNJR05FRF9CWVRFLGIpKSxjfSxkLlRleHR1cmUucHJvdG90eXBlLmJpbmRUZXh0dXJlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLkdMLmJpbmRUZXh0dXJlKHRoaXMuZ2xUYXJnZXQsdGhpcy5nbFRleCksdGhpc30sZC5UZXh0dXJlLnByb3RvdHlwZS51bmJpbmRUZXh0dXJlPWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuR0wuYmluZFRleHR1cmUodGhpcy5nbFRhcmdldCxudWxsKX0sZC5UZXh0dXJlLnByb3RvdHlwZS5zZXRJbnRlcnBvbGF0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fcmVuZGVyZXIuR0w7YT09PWUuTkVBUkVTVD90aGlzLmdsTWluRmlsdGVyPWMuTkVBUkVTVDp0aGlzLmdsTWluRmlsdGVyPWMuTElORUFSLGI9PT1lLk5FQVJFU1Q/dGhpcy5nbE1hZ0ZpbHRlcj1jLk5FQVJFU1Q6dGhpcy5nbE1hZ0ZpbHRlcj1jLkxJTkVBUix0aGlzLmJpbmRUZXh0dXJlKCksYy50ZXhQYXJhbWV0ZXJpKGMuVEVYVFVSRV8yRCxjLlRFWFRVUkVfTUlOX0ZJTFRFUix0aGlzLmdsTWluRmlsdGVyKSxjLnRleFBhcmFtZXRlcmkoYy5URVhUVVJFXzJELGMuVEVYVFVSRV9NQUdfRklMVEVSLHRoaXMuZ2xNYWdGaWx0ZXIpLHRoaXMudW5iaW5kVGV4dHVyZSgpfSxkLlRleHR1cmUucHJvdG90eXBlLnNldFdyYXBNb2RlPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fcmVuZGVyZXIuR0wsZD1mdW5jdGlvbihhKXtyZXR1cm4gMD09KGEmYS0xKX0sZj1kKHRoaXMud2lkdGgpLGc9ZCh0aGlzLndpZHRoKTthPT09ZS5SRVBFQVQ/ZiYmZz90aGlzLmdsV3JhcFM9Yy5SRVBFQVQ6KGNvbnNvbGUud2FybihcIllvdSB0cmllZCB0byBzZXQgdGhlIHdyYXAgbW9kZSB0byBSRVBFQVQgYnV0IHRoZSB0ZXh0dXJlIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgdHdvLiBTZXR0aW5nIHRvIENMQU1QIGluc3RlYWRcIiksdGhpcy5nbFdyYXBTPWMuQ0xBTVBfVE9fRURHRSk6YT09PWUuTUlSUk9SP2YmJmc/dGhpcy5nbFdyYXBTPWMuTUlSUk9SRURfUkVQRUFUOihjb25zb2xlLndhcm4oXCJZb3UgdHJpZWQgdG8gc2V0IHRoZSB3cmFwIG1vZGUgdG8gTUlSUk9SIGJ1dCB0aGUgdGV4dHVyZSBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIHR3by4gU2V0dGluZyB0byBDTEFNUCBpbnN0ZWFkXCIpLHRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UpOnRoaXMuZ2xXcmFwUz1jLkNMQU1QX1RPX0VER0UsYj09PWUuUkVQRUFUP2YmJmc/dGhpcy5nbFdyYXBUPWMuUkVQRUFUOihjb25zb2xlLndhcm4oXCJZb3UgdHJpZWQgdG8gc2V0IHRoZSB3cmFwIG1vZGUgdG8gUkVQRUFUIGJ1dCB0aGUgdGV4dHVyZSBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIHR3by4gU2V0dGluZyB0byBDTEFNUCBpbnN0ZWFkXCIpLHRoaXMuZ2xXcmFwVD1jLkNMQU1QX1RPX0VER0UpOmI9PT1lLk1JUlJPUj9mJiZnP3RoaXMuZ2xXcmFwVD1jLk1JUlJPUkVEX1JFUEVBVDooY29uc29sZS53YXJuKFwiWW91IHRyaWVkIHRvIHNldCB0aGUgd3JhcCBtb2RlIHRvIE1JUlJPUiBidXQgdGhlIHRleHR1cmUgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uIFNldHRpbmcgdG8gQ0xBTVAgaW5zdGVhZFwiKSx0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFKTp0aGlzLmdsV3JhcFQ9Yy5DTEFNUF9UT19FREdFLHRoaXMuYmluZFRleHR1cmUoKSxjLnRleFBhcmFtZXRlcmkoYy5URVhUVVJFXzJELGMuVEVYVFVSRV9XUkFQX1MsdGhpcy5nbFdyYXBTKSxjLnRleFBhcmFtZXRlcmkoYy5URVhUVVJFXzJELGMuVEVYVFVSRV9XUkFQX1QsdGhpcy5nbFdyYXBUKSx0aGlzLnVuYmluZFRleHR1cmUoKX0sYi5leHBvcnRzPWQuVGV4dHVyZX0se1wiLi4vY29yZS9jb25zdGFudHNcIjoxOCxcIi4uL2NvcmUvbWFpblwiOjI0fV0sNzc6W2Z1bmN0aW9uKGEsYixjKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBkKGEsYil7dGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWIsdGhpcy5pbmZvcz1bXSx0aGlzLmZpbmRJbWFnZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLndpZHRoKnRoaXMuaGVpZ2h0O2lmKGE+Yil0aHJvdyBuZXcgRXJyb3IoXCJmb250IGlzIHRvbyBjb21wbGV4IHRvIHJlbmRlciBpbiAzRFwiKTtmb3IodmFyIGMsZCxlPXRoaXMuaW5mb3MubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBmPXRoaXMuaW5mb3NbZV07aWYoZi5pbmRleCthPGIpe2M9ZixkPWYuaW1hZ2VEYXRhO2JyZWFrfX1pZighYyl7dHJ5e2Q9bmV3IEltYWdlRGF0YSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX1jYXRjaChhKXt2YXIgZz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNhbnZhc1wiKVswXSxoPSFnO2d8fChnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksZy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZykpO3ZhciBpPWcuZ2V0Q29udGV4dChcIjJkXCIpO2kmJihkPWkuY3JlYXRlSW1hZ2VEYXRhKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKSxoJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGcpfWM9e2luZGV4OjAsaW1hZ2VEYXRhOmR9LHRoaXMuaW5mb3MucHVzaChjKX12YXIgaj1jLmluZGV4O3JldHVybiBjLmluZGV4Kz1hLGQuX2RpcnR5PSEwLHtpbWFnZURhdGE6ZCxpbmRleDpqfX19ZnVuY3Rpb24gZShhLGIsYyxkLGUpe3ZhciBmPWEuaW1hZ2VEYXRhLGc9Zi5kYXRhLGg9NCphLmluZGV4Kys7Z1toKytdPWIsZ1toKytdPWMsZ1toKytdPWQsZ1toKytdPWV9dmFyIGY9YShcIi4uL2NvcmUvbWFpblwiKSxnPWEoXCIuLi9jb3JlL2NvbnN0YW50c1wiKTthKFwiLi9wNS5TaGFkZXJcIiksYShcIi4vcDUuUmVuZGVyZXJHTFwiKSxmLlJlbmRlcmVyR0wucHJvdG90eXBlLl9hcHBseVRleHRQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7fSxmLlJlbmRlcmVyR0wucHJvdG90eXBlLnRleHRXaWR0aD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5faXNPcGVuVHlwZSgpP3RoaXMuX3RleHRGb250Ll90ZXh0V2lkdGgoYSx0aGlzLl90ZXh0U2l6ZSk6MH07dmFyIGg9OSxpPWgsaj02NCxrPTY0LGw9NjQsbT02NCxuPTY0LG89NjQscD1NYXRoLnNxcnQoMykscT1mdW5jdGlvbihhKXt0aGlzLmZvbnQ9YSx0aGlzLnN0cm9rZUltYWdlSW5mb3M9bmV3IGQoaixrKSx0aGlzLmNvbERpbUltYWdlSW5mb3M9bmV3IGQobCxtKSx0aGlzLnJvd0RpbUltYWdlSW5mb3M9bmV3IGQobCxtKSx0aGlzLmNvbENlbGxJbWFnZUluZm9zPW5ldyBkKG4sbyksdGhpcy5yb3dDZWxsSW1hZ2VJbmZvcz1uZXcgZChuLG8pLHRoaXMuZ2x5cGhJbmZvcz17fSx0aGlzLmdldEdseXBoSW5mbz1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEsYixjKXtmdW5jdGlvbiBkKGEsYixjKXtmb3IodmFyIGQ9YS5sZW5ndGg7ZC0tID4wOyl7dmFyIGU9YVtkXTtiPmUmJihiPWUpLGM8ZSYmKGM9ZSl9cmV0dXJue21pbjpiLG1heDpjfX12YXIgZT13Lmxlbmd0aDt3LnB1c2goYyk7Zm9yKHZhciBmPWQoYSwxLDApLGc9TWF0aC5tYXgoTWF0aC5mbG9vcihmLm1pbipoKSwwKSxqPU1hdGgubWluKE1hdGguY2VpbChmLm1heCpoKSxoKSxrPWc7azxqOysrayl5W2tdLnB1c2goZSk7Zm9yKHZhciBsPWQoYiwxLDApLG09TWF0aC5tYXgoTWF0aC5mbG9vcihsLm1pbippKSwwKSxuPU1hdGgubWluKE1hdGguY2VpbChsLm1heCppKSxpKSxvPW07bzxuOysrbyl4W29dLnB1c2goZSl9ZnVuY3Rpb24gYyhhLGIsYyl7cmV0dXJuIGE8Yj9iOmE+Yz9jOmF9ZnVuY3Rpb24gZChhKXtyZXR1cm4gYygyNTUqYSwwLDI1NSl9ZnVuY3Rpb24gZyhhLGIsYyxkKXt0aGlzLnAwPWEsdGhpcy5jMD1iLHRoaXMuYzE9Yyx0aGlzLnAxPWQsdGhpcy50b1F1YWRyYXRpYz1mdW5jdGlvbigpe3JldHVybnt4OnRoaXMucDAueCx5OnRoaXMucDAueSx4MTp0aGlzLnAxLngseTE6dGhpcy5wMS55LGN4OigzKih0aGlzLmMwLngrdGhpcy5jMS54KS0odGhpcy5wMC54K3RoaXMucDEueCkpLzQsY3k6KDMqKHRoaXMuYzAueSt0aGlzLmMxLnkpLSh0aGlzLnAwLnkrdGhpcy5wMS55KSkvNH19LHRoaXMucXVhZEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIGYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIodGhpcy5wMSx0aGlzLnAwKSxmLlZlY3Rvci5tdWx0KGYuVmVjdG9yLnN1Yih0aGlzLmMxLHRoaXMuYzApLDMpKS5tYWcoKS8yfSx0aGlzLnNwbGl0PWZ1bmN0aW9uKGEpe3ZhciBiPWYuVmVjdG9yLmxlcnAodGhpcy5wMCx0aGlzLmMwLGEpLGM9Zi5WZWN0b3IubGVycCh0aGlzLmMwLHRoaXMuYzEsYSksZD1mLlZlY3Rvci5sZXJwKGIsYyxhKTt0aGlzLmMxPWYuVmVjdG9yLmxlcnAodGhpcy5jMSx0aGlzLnAxLGEpLHRoaXMuYzA9Zi5WZWN0b3IubGVycChjLHRoaXMuYzEsYSk7dmFyIGU9Zi5WZWN0b3IubGVycChkLHRoaXMuYzAsYSksaD1uZXcgZyh0aGlzLnAwLGIsZCxlKTtyZXR1cm4gdGhpcy5wMD1lLGh9LHRoaXMuc3BsaXRJbmZsZWN0aW9ucz1mdW5jdGlvbigpe3ZhciBhPWYuVmVjdG9yLnN1Yih0aGlzLmMwLHRoaXMucDApLGI9Zi5WZWN0b3Iuc3ViKGYuVmVjdG9yLnN1Yih0aGlzLmMxLHRoaXMuYzApLGEpLGM9Zi5WZWN0b3Iuc3ViKGYuVmVjdG9yLnN1YihmLlZlY3Rvci5zdWIodGhpcy5wMSx0aGlzLmMxKSxhKSxmLlZlY3Rvci5tdWx0KGIsMikpLGQ9W10sZT1iLngqYy55LWIueSpjLng7aWYoMCE9PWUpe3ZhciBnPWEueCpjLnktYS55KmMueCxoPWEueCpiLnktYS55KmIueCxpPWcqZy00KmUqaDtpZihpPj0wKXtlPDAmJihlPS1lLGc9LWcsaD0taCk7dmFyIGo9TWF0aC5zcXJ0KGkpLGs9KC1nLWopLygyKmUpLGw9KC1nK2opLygyKmUpO2s+MCYmazwxJiYoZC5wdXNoKHRoaXMuc3BsaXQoaykpLGw9MS0oMS1sKS8oMS1rKSksbD4wJiZsPDEmJmQucHVzaCh0aGlzLnNwbGl0KGwpKX19cmV0dXJuIGQucHVzaCh0aGlzKSxkfX1mdW5jdGlvbiBqKGEsYixjLGQsZSxoLGksail7Zm9yKHZhciBrPW5ldyBnKG5ldyBmLlZlY3RvcihhLGIpLG5ldyBmLlZlY3RvcihjLGQpLG5ldyBmLlZlY3RvcihlLGgpLG5ldyBmLlZlY3RvcihpLGopKS5zcGxpdEluZmxlY3Rpb25zKCksbD1bXSxtPTMwL3Asbj0wO248ay5sZW5ndGg7bisrKXtmb3IodmFyIG8scT1rW25dLHI9W107ISgobz1tL3EucXVhZEVycm9yKCkpPj0uMTI1KTspe3ZhciBzPU1hdGgucG93KG8sMS8zKSx0PXEuc3BsaXQocyksdT1xLnNwbGl0KDEtcy8oMS1zKSk7bC5wdXNoKHQpLHIucHVzaChxKSxxPXV9bzwxJiZsLnB1c2gocS5zcGxpdCguNSkpLGwucHVzaChxKSxBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsLHIucmV2ZXJzZSgpKX1yZXR1cm4gbH1mdW5jdGlvbiBrKGEsYyxkLGUpe2IoW2EsZF0sW2MsZV0se3g6YSx5OmMsY3g6KGErZCkvMixjeTooYytlKS8yfSl9ZnVuY3Rpb24gbChhLGIsYyxkKXtyZXR1cm4gTWF0aC5hYnMoYy1hKTwxZS01JiZNYXRoLmFicyhkLWIpPDFlLTV9ZnVuY3Rpb24gbShhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoLGY9Yi5maW5kSW1hZ2UoZCksZz1mLmluZGV4LGg9MCxpPTA7aTxkOysraSloKz1hW2ldLmxlbmd0aDtmb3IodmFyIGo9Yy5maW5kSW1hZ2UoaCksaz0wO2s8ZDsrK2spe3ZhciBsPWFba10sbT1sLmxlbmd0aCxuPWouaW5kZXg7ZShmLG4+PjcsMTI3Jm4sbT4+NywxMjcmbSk7Zm9yKHZhciBvPTA7bzxtOysrbyl7dmFyIHA9bFtvXStTO2UoaixwPj43LDEyNyZwLDAsMCl9fXJldHVybntjZWxsSW1hZ2VJbmZvOmosZGltT2Zmc2V0OmcsZGltSW1hZ2VJbmZvOmZ9fXZhciBuPXRoaXMuZ2x5cGhJbmZvc1thLmluZGV4XTtpZihuKXJldHVybiBuO3ZhciBvPWEuZ2V0Qm91bmRpbmdCb3goKSxxPW8ueDEscj1vLnkxLHM9by54Mi1xLHQ9by55Mi1yLHU9YS5wYXRoLmNvbW1hbmRzO2lmKDA9PT1zfHwwPT09dHx8IXUubGVuZ3RoKXJldHVybiB0aGlzLmdseXBoSW5mb3NbYS5pbmRleF09e307dmFyIHYsdz1bXSx4PVtdLHk9W107Zm9yKHY9aC0xO3Y+PTA7LS12KXkucHVzaChbXSk7Zm9yKHY9aS0xO3Y+PTA7LS12KXgucHVzaChbXSk7Zm9yKHZhciB6LEEsQixDLEQ9MDtEPHUubGVuZ3RoOysrRCl7dmFyIEU9dVtEXSxGPShFLngtcSkvcyxHPShFLnktcikvdDtpZighbCh6LEEsRixHKSl7c3dpdGNoKEUudHlwZSl7Y2FzZVwiTVwiOkI9RixDPUc7YnJlYWs7Y2FzZVwiTFwiOmsoeixBLEYsRyk7YnJlYWs7Y2FzZVwiUVwiOnZhciBIPShFLngxLXEpL3MsST0oRS55MS1yKS90O2IoW3osRixIXSxbQSxHLEldLHt4OnoseTpBLGN4OkgsY3k6SX0pO2JyZWFrO2Nhc2VcIlpcIjpsKHosQSxCLEMpP3cucHVzaCh7eDp6LHk6QX0pOihrKHosQSxCLEMpLHcucHVzaCh7eDpCLHk6Q30pKTticmVhaztjYXNlXCJDXCI6Zm9yKHZhciBKPShFLngxLXEpL3MsSz0oRS55MS1yKS90LEw9KEUueDItcSkvcyxNPShFLnkyLXIpL3QsTj1qKHosQSxKLEssTCxNLEYsRyksTz0wO088Ti5sZW5ndGg7TysrKXt2YXIgUD1OW09dLnRvUXVhZHJhdGljKCk7YihbUC54LFAueDEsUC5jeF0sW1AueSxQLnkxLFAuY3ldLFApfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBjb21tYW5kIHR5cGU6IFwiK0UudHlwZSl9ej1GLEE9R319Zm9yKHZhciBRPXcubGVuZ3RoLFI9dGhpcy5zdHJva2VJbWFnZUluZm9zLmZpbmRJbWFnZShRKSxTPVIuaW5kZXgsVD0wO1Q8UTsrK1Qpe3ZhciBVPXdbVF07ZShSLGQoVS54KSxkKFUueSksZChVLmN4KSxkKFUuY3kpKX1yZXR1cm4gbj10aGlzLmdseXBoSW5mb3NbYS5pbmRleF09e2dseXBoOmEsdUdseXBoUmVjdDpbby54MSwtby55MSxvLngyLC1vLnkyXSxzdHJva2VJbWFnZUluZm86UixzdHJva2VzOncsY29sSW5mbzptKHksdGhpcy5jb2xEaW1JbWFnZUluZm9zLHRoaXMuY29sQ2VsbEltYWdlSW5mb3MpLHJvd0luZm86bSh4LHRoaXMucm93RGltSW1hZ2VJbmZvcyx0aGlzLnJvd0NlbGxJbWFnZUluZm9zKX0sbi51R3JpZE9mZnNldD1bbi5jb2xJbmZvLmRpbU9mZnNldCxuLnJvd0luZm8uZGltT2Zmc2V0XSxufX07Zi5SZW5kZXJlckdMLnByb3RvdHlwZS5fcmVuZGVyVGV4dD1mdW5jdGlvbihhLGIsYyxkLGUpe2lmKCEoZD49ZSkmJnRoaXMuX2RvRmlsbCl7aWYoIXRoaXMuX2lzT3BlblR5cGUoKSlyZXR1cm4gY29uc29sZS5sb2coXCJXRUJHTDogb25seSBvcGVudHlwZSBmb250cyBhcmUgc3VwcG9ydGVkXCIpLGE7YS5wdXNoKCk7dmFyIHA9dGhpcy5jdXJGaWxsU2hhZGVyLHI9dGhpcy5fZG9TdHJva2Uscz10aGlzLmRyYXdNb2RlO3RoaXMuY3VyRmlsbFNoYWRlcj1udWxsLHRoaXMuX2RvU3Ryb2tlPSExLHRoaXMuZHJhd01vZGU9Zy5URVhUVVJFO3ZhciB0PXRoaXMuX3RleHRGb250LmZvbnQsdT10aGlzLl90ZXh0Rm9udC5fZm9udEluZm87dXx8KHU9dGhpcy5fdGV4dEZvbnQuX2ZvbnRJbmZvPW5ldyBxKHQpKTt2YXIgdj10aGlzLl90ZXh0Rm9udC5faGFuZGxlQWxpZ25tZW50KHRoaXMsYixjLGQpLHc9dGhpcy5fdGV4dFNpemUseD13L3QudW5pdHNQZXJFbTt0aGlzLnRyYW5zbGF0ZSh2Lngsdi55LDApLHRoaXMuc2NhbGUoeCx4LDEpO3ZhciB5PXRoaXMuR0wsej0hdGhpcy5fZGVmYXVsdEZvbnRTaGFkZXIsQT10aGlzLnNldEZpbGxTaGFkZXIodGhpcy5fZ2V0Rm9udFNoYWRlcigpKTt6JiYoQS5zZXRVbmlmb3JtKFwidUdyaWRJbWFnZVNpemVcIixbbCxtXSksQS5zZXRVbmlmb3JtKFwidUNlbGxzSW1hZ2VTaXplXCIsW24sb10pLEEuc2V0VW5pZm9ybShcInVTdHJva2VJbWFnZVNpemVcIixbaixrXSksQS5zZXRVbmlmb3JtKFwidUdyaWRTaXplXCIsW2gsaV0pKSx0aGlzLl9hcHBseUNvbG9yQmxlbmQodGhpcy5jdXJGaWxsQ29sb3IpO3ZhciBCPXRoaXMuZ0hhc2guZ2x5cGg7aWYoIUIpe3ZhciBDPXRoaXMuX3RleHRHZW9tPW5ldyBmLkdlb21ldHJ5KDEsMSxmdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8PTE7YSsrKWZvcih2YXIgYj0wO2I8PTE7YisrKXRoaXMudmVydGljZXMucHVzaChuZXcgZi5WZWN0b3IoYixhLDApKSx0aGlzLnV2cy5wdXNoKGIsYSl9KTtDLmNvbXB1dGVGYWNlcygpLmNvbXB1dGVOb3JtYWxzKCksQj10aGlzLmNyZWF0ZUJ1ZmZlcnMoXCJnbHlwaFwiLEMpfXRoaXMuX2JpbmRCdWZmZXIoQi52ZXJ0ZXhCdWZmZXIseS5BUlJBWV9CVUZGRVIpLEEuZW5hYmxlQXR0cmliKEEuYXR0cmlidXRlcy5hUG9zaXRpb24ubG9jYXRpb24sMyx5LkZMT0FULCExLDAsMCksdGhpcy5fYmluZEJ1ZmZlcihCLmluZGV4QnVmZmVyLHkuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLHRoaXMuX2JpbmRCdWZmZXIoQi51dkJ1ZmZlcix5LkFSUkFZX0JVRkZFUiksQS5lbmFibGVBdHRyaWIoQS5hdHRyaWJ1dGVzLmFUZXhDb29yZC5sb2NhdGlvbiwyLHkuRkxPQVQsITEsMCwwKSxBLnNldFVuaWZvcm0oXCJ1TWF0ZXJpYWxDb2xvclwiLHRoaXMuY3VyRmlsbENvbG9yKTt0cnl7Zm9yKHZhciBEPTAsRT1udWxsLEY9ITEsRz10LnN0cmluZ1RvR2x5cGhzKGIpLEg9MDtIPEcubGVuZ3RoOysrSCl7dmFyIEk9R1tIXTtFJiYoRCs9dC5nZXRLZXJuaW5nVmFsdWUoRSxJKSk7dmFyIEo9dS5nZXRHbHlwaEluZm8oSSk7aWYoSi51R2x5cGhSZWN0KXt2YXIgSz1KLnJvd0luZm8sTD1KLmNvbEluZm87QS5zZXRVbmlmb3JtKFwidVNhbXBsZXJTdHJva2VzXCIsSi5zdHJva2VJbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlclJvd1N0cm9rZXNcIixLLmNlbGxJbWFnZUluZm8uaW1hZ2VEYXRhKSxBLnNldFVuaWZvcm0oXCJ1U2FtcGxlclJvd3NcIixLLmRpbUltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVTYW1wbGVyQ29sU3Ryb2tlc1wiLEwuY2VsbEltYWdlSW5mby5pbWFnZURhdGEpLEEuc2V0VW5pZm9ybShcInVTYW1wbGVyQ29sc1wiLEwuZGltSW1hZ2VJbmZvLmltYWdlRGF0YSksQS5zZXRVbmlmb3JtKFwidUdyaWRPZmZzZXRcIixKLnVHcmlkT2Zmc2V0KSxBLnNldFVuaWZvcm0oXCJ1R2x5cGhSZWN0XCIsSi51R2x5cGhSZWN0KSxBLnNldFVuaWZvcm0oXCJ1R2x5cGhPZmZzZXRcIixEKSxGP0EuYmluZFRleHR1cmVzKCk6KEY9ITAsQS5iaW5kU2hhZGVyKCkpLHkuZHJhd0VsZW1lbnRzKHkuVFJJQU5HTEVTLDYsdGhpcy5HTC5VTlNJR05FRF9TSE9SVCwwKX1EKz1JLmFkdmFuY2VXaWR0aCxFPUl9fWZpbmFsbHl7QS51bmJpbmRTaGFkZXIoKSx0aGlzLmN1ckZpbGxTaGFkZXI9cCx0aGlzLl9kb1N0cm9rZT1yLHRoaXMuZHJhd01vZGU9cyxhLnBvcCgpfXJldHVybiB0aGlzLl9wSW5zdC5fcGl4ZWxzRGlydHk9ITAsYX19fSx7XCIuLi9jb3JlL2NvbnN0YW50c1wiOjE4LFwiLi4vY29yZS9tYWluXCI6MjQsXCIuL3A1LlJlbmRlcmVyR0xcIjo3NCxcIi4vcDUuU2hhZGVyXCI6NzV9XX0se30sWzEzXSkoMTMpfSk7IiwiLyoqXG4gKiAgU3RhcnRBdWRpb0NvbnRleHQuanNcbiAqICBAYXV0aG9yIFlvdGFtIE1hbm5cbiAqICBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUIE1JVCBMaWNlbnNlXG4gKiAgQGNvcHlyaWdodCAyMDE2IFlvdGFtIE1hbm5cbiAqL1xuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdGRlZmluZShbXSwgZmFjdG9yeSlcblx0IH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKVxuXHR9IGVsc2Uge1xuXHRcdHJvb3QuU3RhcnRBdWRpb0NvbnRleHQgPSBmYWN0b3J5KClcbiAgfVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG5cblx0Ly9UQVAgTElTVEVORVIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblx0LyoqXG5cdCAqIEBjbGFzcyAgTGlzdGVucyBmb3Igbm9uLWRyYWdnaW5nIHRhcCBlbmRzIG9uIHRoZSBnaXZlbiBlbGVtZW50XG5cdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHZhciBUYXBMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRleHQpe1xuXG5cdFx0dGhpcy5fZHJhZ2dlZCA9IGZhbHNlXG5cblx0XHR0aGlzLl9lbGVtZW50ID0gZWxlbWVudFxuXG5cdFx0dGhpcy5fYmluZGVkTW92ZSA9IHRoaXMuX21vdmVkLmJpbmQodGhpcylcblx0XHR0aGlzLl9iaW5kZWRFbmQgPSB0aGlzLl9lbmRlZC5iaW5kKHRoaXMsIGNvbnRleHQpXG5cblx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIHRoaXMuX2JpbmRlZEVuZClcblx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgdGhpcy5fYmluZGVkTW92ZSlcblx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCB0aGlzLl9iaW5kZWRFbmQpXG5cdFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCB0aGlzLl9iaW5kZWRFbmQpXG5cdH1cblxuXHQvKipcblx0ICogZHJhZyBtb3ZlIGV2ZW50XG5cdCAqL1xuXHRUYXBMaXN0ZW5lci5wcm90b3R5cGUuX21vdmVkID0gZnVuY3Rpb24oZSl7XG5cdFx0dGhpcy5fZHJhZ2dlZCA9IHRydWVcblx0fTtcblxuXHQvKipcblx0ICogdGFwIGVuZGVkIGxpc3RlbmVyXG5cdCAqL1xuXHRUYXBMaXN0ZW5lci5wcm90b3R5cGUuX2VuZGVkID0gZnVuY3Rpb24oY29udGV4dCl7XG5cdFx0aWYgKCF0aGlzLl9kcmFnZ2VkKXtcblx0XHRcdHN0YXJ0Q29udGV4dChjb250ZXh0KVxuXHRcdH1cblx0XHR0aGlzLl9kcmFnZ2VkID0gZmFsc2Vcblx0fTtcblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCB0aGUgYm91bmQgZXZlbnRzXG5cdCAqL1xuXHRUYXBMaXN0ZW5lci5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLCB0aGlzLl9iaW5kZWRFbmQpXG5cdFx0dGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIHRoaXMuX2JpbmRlZE1vdmUpXG5cdFx0dGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgdGhpcy5fYmluZGVkRW5kKVxuXHRcdHRoaXMuX2VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgdGhpcy5fYmluZGVkRW5kKVxuXHRcdHRoaXMuX2JpbmRlZE1vdmUgPSBudWxsXG5cdFx0dGhpcy5fYmluZGVkRW5kID0gbnVsbFxuXHRcdHRoaXMuX2VsZW1lbnQgPSBudWxsXG5cdH07XG5cblx0Ly9FTkQgVEFQIExJU1RFTkVSLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblx0LyoqXG5cdCAqIFBsYXlzIGEgc2lsZW50IHNvdW5kIGFuZCBhbHNvIGludm9rZSB0aGUgXCJyZXN1bWVcIiBtZXRob2Rcblx0ICogQHBhcmFtIHtBdWRpb0NvbnRleHR9IGNvbnRleHRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIHN0YXJ0Q29udGV4dChjb250ZXh0KXtcblx0XHQvLyB0aGlzIGFjY29tcGxpc2hlcyB0aGUgaU9TIHNwZWNpZmljIHJlcXVpcmVtZW50XG5cdFx0dmFyIGJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDEsIDEsIGNvbnRleHQuc2FtcGxlUmF0ZSlcblx0XHR2YXIgc291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKVxuXHRcdHNvdXJjZS5idWZmZXIgPSBidWZmZXJcblx0XHRzb3VyY2UuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKVxuXHRcdHNvdXJjZS5zdGFydCgwKVxuXG5cdFx0Ly8gcmVzdW1lIHRoZSBhdWRpbyBjb250ZXh0XG5cdFx0aWYgKGNvbnRleHQucmVzdW1lKXtcblx0XHRcdGNvbnRleHQucmVzdW1lKClcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBhdWRpbyBjb250ZXh0IGlzIHN0YXJ0ZWRcblx0ICogQHBhcmFtICB7QXVkaW9Db250ZXh0fSAgY29udGV4dFxuXHQgKiBAcmV0dXJuIHtCb29sZWFufVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gaXNTdGFydGVkKGNvbnRleHQpe1xuXHRcdCByZXR1cm4gY29udGV4dC5zdGF0ZSA9PT0gXCJydW5uaW5nXCJcblx0fVxuXG5cdC8qKlxuXHQgKiBJbnZva2VzIHRoZSBjYWxsYmFjayBhcyBzb29uIGFzIHRoZSBBdWRpb0NvbnRleHRcblx0ICogaXMgc3RhcnRlZFxuXHQgKiBAcGFyYW0gIHtBdWRpb0NvbnRleHR9ICAgY29udGV4dFxuXHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbGJhY2tcblx0ICovXG5cdGZ1bmN0aW9uIG9uU3RhcnRlZChjb250ZXh0LCBjYWxsYmFjayl7XG5cblx0XHRmdW5jdGlvbiBjaGVja0xvb3AoKXtcblx0XHRcdGlmIChpc1N0YXJ0ZWQoY29udGV4dCkpe1xuXHRcdFx0XHRjYWxsYmFjaygpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2hlY2tMb29wKVxuXHRcdFx0XHRpZiAoY29udGV4dC5yZXN1bWUpe1xuXHRcdFx0XHRcdGNvbnRleHQucmVzdW1lKClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpc1N0YXJ0ZWQoY29udGV4dCkpe1xuXHRcdFx0Y2FsbGJhY2soKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjaGVja0xvb3AoKVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSB0YXAgbGlzdGVuZXIgdG8gdGhlIGF1ZGlvIGNvbnRleHRcblx0ICogQHBhcmFtICB7QXJyYXl8RWxlbWVudHxTdHJpbmd8alF1ZXJ5fSBlbGVtZW50XG5cdCAqIEBwYXJhbSB7QXJyYXl9IHRhcExpc3RlbmVyc1xuXHQgKi9cblx0ZnVuY3Rpb24gYmluZFRhcExpc3RlbmVyKGVsZW1lbnQsIHRhcExpc3RlbmVycywgY29udGV4dCl7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudCkgfHwgKE5vZGVMaXN0ICYmIGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGlzdCkpe1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50Lmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0YmluZFRhcExpc3RlbmVyKGVsZW1lbnRbaV0sIHRhcExpc3RlbmVycywgY29udGV4dClcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09PSBcInN0cmluZ1wiKXtcblx0XHRcdGJpbmRUYXBMaXN0ZW5lcihkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGVsZW1lbnQpLCB0YXBMaXN0ZW5lcnMsIGNvbnRleHQpXG5cdFx0fSBlbHNlIGlmIChlbGVtZW50LmpxdWVyeSAmJiB0eXBlb2YgZWxlbWVudC50b0FycmF5ID09PSBcImZ1bmN0aW9uXCIpe1xuXHRcdFx0YmluZFRhcExpc3RlbmVyKGVsZW1lbnQudG9BcnJheSgpLCB0YXBMaXN0ZW5lcnMsIGNvbnRleHQpXG5cdFx0fSBlbHNlIGlmIChFbGVtZW50ICYmIGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KXtcblx0XHRcdC8vaWYgaXQncyBhbiBlbGVtZW50LCBjcmVhdGUgYSBUYXBMaXN0ZW5lclxuXHRcdFx0dmFyIHRhcCA9IG5ldyBUYXBMaXN0ZW5lcihlbGVtZW50LCBjb250ZXh0KVxuXHRcdFx0dGFwTGlzdGVuZXJzLnB1c2godGFwKVxuXHRcdH0gXG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtBdWRpb0NvbnRleHR9IGNvbnRleHQgVGhlIEF1ZGlvQ29udGV4dCB0byBzdGFydC5cblx0ICogQHBhcmFtIHtBcnJheXxTdHJpbmd8RWxlbWVudHxqUXVlcnk9fSBlbGVtZW50cyBGb3IgaU9TLCB0aGUgbGlzdCBvZiBlbGVtZW50c1xuXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmluZCB0YXAgZXZlbnQgbGlzdGVuZXJzXG5cdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB3aWxsIHN0YXJ0IHRoZSBBdWRpb0NvbnRleHQuIElmXG5cdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubyBlbGVtZW50cyBhcmUgZ2l2ZW4sIGl0IHdpbGwgYmluZFxuXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGRvY3VtZW50LmJvZHkuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIEF1ZGlvQ29udGV4dCBpcyBzdGFydGVkLlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfSBUaGUgcHJvbWlzZSBpcyBpbnZva2VkIHdoZW4gdGhlIEF1ZGlvQ29udGV4dFxuXHQgKiAgICAgICAgICAgICAgICAgICAgICAgaXMgc3RhcnRlZC5cblx0ICovXG5cdGZ1bmN0aW9uIFN0YXJ0QXVkaW9Db250ZXh0KGNvbnRleHQsIGVsZW1lbnRzLCBjYWxsYmFjayl7XG5cblx0XHQvL3RoZSBwcm9taXNlIGlzIGludm9rZWQgd2hlbiB0aGUgQXVkaW9Db250ZXh0IGlzIHN0YXJ0ZWRcblx0XHR2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHN1Y2Nlc3MpIHtcblx0XHRcdG9uU3RhcnRlZChjb250ZXh0LCBzdWNjZXNzKVxuXHRcdH0pXG5cblx0XHQvLyBUaGUgVGFwTGlzdGVuZXJzIGJvdW5kIHRvIHRoZSBlbGVtZW50c1xuXHRcdHZhciB0YXBMaXN0ZW5lcnMgPSBbXVxuXG5cdFx0Ly8gYWRkIGFsbCB0aGUgdGFwIGxpc3RlbmVyc1xuXHRcdGlmICghZWxlbWVudHMpe1xuXHRcdFx0ZWxlbWVudHMgPSBkb2N1bWVudC5ib2R5XG5cdFx0fVxuXHRcdGJpbmRUYXBMaXN0ZW5lcihlbGVtZW50cywgdGFwTGlzdGVuZXJzLCBjb250ZXh0KVxuXG5cdFx0Ly9kaXNwb3NlIGFsbCB0aGVzZSB0YXAgbGlzdGVuZXJzIHdoZW4gdGhlIGNvbnRleHQgaXMgc3RhcnRlZFxuXHRcdHByb21pc2UudGhlbihmdW5jdGlvbigpe1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0YXBMaXN0ZW5lcnMubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHR0YXBMaXN0ZW5lcnNbaV0uZGlzcG9zZSgpXG5cdFx0XHR9XG5cdFx0XHR0YXBMaXN0ZW5lcnMgPSBudWxsXG5cblx0XHRcdGlmIChjYWxsYmFjayl7XG5cdFx0XHRcdGNhbGxiYWNrKClcblx0XHRcdH1cblx0XHR9KVxuXG5cdFx0cmV0dXJuIHByb21pc2Vcblx0fVxuXG5cdHJldHVybiBTdGFydEF1ZGlvQ29udGV4dFxufSkpIiwiaW1wb3J0IHA1IGZyb20gJ3A1L2xpYi9wNS5taW4nO1xuaW1wb3J0IFRvbmUgZnJvbSAndG9uZSc7XG5pbXBvcnQgU3RhcnRBdWRpb0NvbnRleHQgZnJvbSAnc3RhcnRhdWRpb2NvbnRleHQnO1xuXG5jb25zdCBza2V0Y2ggPSAocCkgPT4ge1xuICAgIHZhciBub2lzZSA9IG5ldyBUb25lLk5vaXNlKFwicGlua1wiKS5zdGFydCgpO1xuICAgIG5vaXNlLnZvbHVtZS52YWx1ZSA9IC0yMDtcbiAgICAvL21ha2UgYW4gYXV0b2ZpbHRlciB0byBzaGFwZSB0aGUgbm9pc2VcbiAgICB2YXIgYXV0b0ZpbHRlciA9IG5ldyBUb25lLkF1dG9GaWx0ZXIoe1xuICAgICAgICBcImZyZXF1ZW5jeVwiOiBcIjhtXCIsXG4gICAgICAgIFwibWluXCI6IDgwMCxcbiAgICAgICAgXCJtYXhcIjogNTAwMFxuICAgIH0pLmNvbm5lY3QoVG9uZS5NYXN0ZXIpO1xuICAgIC8vY29ubmVjdCB0aGUgbm9pc2VcbiAgICBub2lzZS5jb25uZWN0KGF1dG9GaWx0ZXIpO1xuICAgIC8vc3RhcnQgdGhlIGF1dG9maWx0ZXIgTEZPXG4gICAgYXV0b0ZpbHRlci5zdGFydCgpXG4gICAgdmFyIGNob3J1cyA9IG5ldyBUb25lLkNob3J1cygwLjgsIDIuNSwgMC4yKS50b01hc3RlcigpO1xuICAgIGxldCBmbSA9IG5ldyBUb25lLkZNU3ludGgoe1xuICAgICAgICBcImhhcm1vbmljaXR5XCI6IDEwLFxuICAgICAgICBcIm1vZHVsYXRpb25JbmRleFwiOiA4MCxcbiAgICAgICAgXCJkZXR1bmVcIjogMCxcbiAgICAgICAgXCJvc2NpbGxhdG9yXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInNpbmVcIlxuICAgICAgICB9LFxuICAgICAgICBcImVudmVsb3BlXCI6IHtcbiAgICAgICAgICAgIFwiYXR0YWNrXCI6IDAuMDAxLFxuICAgICAgICAgICAgXCJkZWNheVwiOiAwLjAwMyxcbiAgICAgICAgICAgIFwic3VzdGFpblwiOiAwLjA2LFxuICAgICAgICAgICAgXCJyZWxlYXNlXCI6IDAuM1xuICAgICAgICB9LFxuICAgICAgICBcIm1vZHVsYXRpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3F1YXJlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb2R1bGF0aW9uRW52ZWxvcGVcIjoge1xuICAgICAgICAgICAgXCJhdHRhY2tcIjogMC4wMSxcbiAgICAgICAgICAgIFwiZGVjYXlcIjogMC4wMixcbiAgICAgICAgICAgIFwic3VzdGFpblwiOiAwLjAzLFxuICAgICAgICAgICAgXCJyZWxlYXNlXCI6IDAuMDMzXG4gICAgICAgIH0sXG4gICAgICAgIFwicG9ydGFtZW50b1wiOiAwLjAxXG4gICAgfSkuY29ubmVjdChjaG9ydXMpO1xuICAgIGZtLnZvbHVtZS52YWx1ZSA9IDA7XG5cbiAgICBmdW5jdGlvbiBXYWxrZXIoeCwgeSkge1xuICAgICAgICB0aGlzLmV4ID0gMDtcbiAgICAgICAgdGhpcy5leSA9IDA7XG4gICAgICAgIHRoaXMuZWFzaW5nID0gMC4wNTtcbiAgICAgICAgdGhpcy5yZWQgPSBwLnJhbmRvbSgxMDAsIDI1NSk7XG4gICAgICAgIHRoaXMuZyA9IHAucmFuZG9tKDI1NSk7XG4gICAgICAgIHRoaXMuYiA9IHAucmFuZG9tKDI1NSk7XG4gICAgICAgIHRoaXMuY2FuUGxheSA9IHRydWU7XG4gICAgICAgIHRoaXMuYWxwaGEgPSAwO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgICB0aGlzLnBvcyA9IHAuY3JlYXRlVmVjdG9yKHgsIHkpO1xuICAgICAgICAgICAgdGhpcy5zdHVjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBvcyA9IHAuY3JlYXRlVmVjdG9yKHAucmFuZG9tKC0xNTAsIDE1MCksIHAucmFuZG9tKC0xNTAsIDE1MCkpO1xuICAgICAgICAgICAgdGhpcy5zdHVjayA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuciA9IHJhZGl1czE7XG4gICAgICAgIHRoaXMud2FsayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgLy92YXIgdmVsID0gcDUuVmVjdG9yLnJhbmRvbTJEKCk7XG4gICAgICAgICAgICB2YXIgdmVsID0gcC5jcmVhdGVWZWN0b3IocC5yYW5kb20oLTAuNSwgMC41KSwgcC5yYW5kb20oLTAuNSwgMC41KSk7XG4gICAgICAgICAgICB0aGlzLnBvcy5hZGQodmVsKTtcbiAgICAgICAgICAgIHAuY29uc3RyYWluKHRoaXMucG9zLngsIC0xNTAsIDE1MCk7XG4gICAgICAgICAgICBwLmNvbnN0cmFpbih0aGlzLnBvcy55LCAtMTUwLCAxNTApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tTdHVjayA9IGZ1bmN0aW9uKG90aGVycykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdGhlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgZCA9IGRpc3RTcSh0aGlzLnBvcywgb3RoZXJzW2ldLnBvcyk7XG4gICAgICAgICAgICAgICAgaWYgKGQgPCAodGhpcy5yICogdGhpcy5yICsgb3RoZXJzW2ldLnIgKiBvdGhlcnNbaV0uciArIDIgKiBvdGhlcnNbaV0uciAqIHRoaXMucikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9pZiAocmFuZG9tKDEpIDwgMC4xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3R1Y2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYW5QbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbS50cmlnZ2VyQXR0YWNrUmVsZWFzZShUb25lLk1pZGkoKHRoaXMuciAqIDEwKSArIDcwKS50b0ZyZXF1ZW5jeSgpLCBcIjEyOG5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFscGhhID0gMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5QbGF5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAvL31cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRIdWUgPSBmdW5jdGlvbihodSkge1xuICAgICAgICAgICAgdGhpcy5odSA9IGh1O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvdyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcC5ub1N0cm9rZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3R1Y2sgJiYgdHlwZW9mIHRoaXMuaHUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcC5maWxsKDI1NSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHAuZmlsbCh0aGlzLmIsIDIyMCAtIHAuZGlzdCh0aGlzLnBvcy54LCB0aGlzLnBvcy55LCAwLCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwLnB1c2goKTtcbiAgICAgICAgICAgIC8vcC5zdHJva2UoMTAwKTtcbiAgICAgICAgICAgIC8vaWYodGhpcy5zdHVjaylwLmxpbmUoMCwwLDAsdGhpcy5wb3MueCx0aGlzLnBvcy55LHRoaXMucG9zLnopXG4gICAgICAgICAgICBsZXQgdGFyZ2V0WCA9IHRoaXMucG9zLng7XG4gICAgICAgICAgICBsZXQgZHggPSB0YXJnZXRYIC0gdGhpcy5leDtcbiAgICAgICAgICAgIHRoaXMuZXggKz0gZHggKiB0aGlzLmVhc2luZztcbiAgICAgICAgICAgIGxldCB0YXJnZXRZID0gdGhpcy5wb3MueTtcbiAgICAgICAgICAgIGxldCBkeSA9IHRhcmdldFkgLSB0aGlzLmV5O1xuICAgICAgICAgICAgdGhpcy5leSArPSBkeSAqIHRoaXMuZWFzaW5nO1xuICAgICAgICAgICAgcC50cmFuc2xhdGUodGhpcy5leCwgdGhpcy5leSwgdGhpcy5wb3Mueik7XG4gICAgICAgICAgICBwLm5vU3Ryb2tlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zdHVjaykge1xuICAgICAgICAgICAgICAgIHAuc3BoZXJlKHRoaXMucik7XG4gICAgICAgICAgICAgICAgcC5maWxsKDI1NSwgMCwgMCwgdGhpcy5hbHBoYSk7XG4gICAgICAgICAgICAgICAgcC5zcGhlcmUodGhpcy5yICogMS4xKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcC5zcGhlcmUodGhpcy5yIC8gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwLnBvcCgpO1xuICAgICAgICAgICAgdGhpcy5hbHBoYSAtPSA0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlzdFNxKGEsIGIpIHtcbiAgICAgICAgdmFyIGR4ID0gYi54IC0gYS54O1xuICAgICAgICB2YXIgZHkgPSBiLnkgLSBhLnk7XG4gICAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgICB9XG4gICAgdmFyIHRyZWUxID0gW107XG4gICAgdmFyIHdhbGtlcnMxID0gW107XG4gICAgdmFyIG1heFdhbGtlcnMxID0gNTAwO1xuICAgIHZhciBpdGVyYXRpb25zMSA9IDEwMDtcbiAgICB2YXIgcmFkaXVzMSA9IDU7XG4gICAgdmFyIGh1ID0gMDtcbiAgICB2YXIgc2hyaW5rMSA9IDAuOTk1O1xuICAgIHZhciB0cmVlMiA9IFtdO1xuICAgIHZhciB3YWxrZXJzMiA9IFtdO1xuICAgIHZhciBtYXhXYWxrZXJzMiA9IDMwMDtcbiAgICB2YXIgaXRlcmF0aW9uczIgPSAxMDA7XG4gICAgdmFyIHJhZGl1czIgPSA1O1xuICAgIHZhciBzaHJpbmsyID0gMC45OTU7XG4gICAgcC5zZXR1cCA9ICgpID0+IHtcbiAgICAgICAgbGV0IGNhbnZhcyA9IHAuY3JlYXRlQ2FudmFzKDgwMCwgODAwLCBwLldFQkdMKTtcbiAgICAgICAgdHJlZTFbMF0gPSBuZXcgV2Fsa2VyKDAsIDApO1xuICAgICAgICByYWRpdXMxICo9IHNocmluazE7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4V2Fsa2VyczE7IGkrKykge1xuICAgICAgICAgICAgd2Fsa2VyczFbaV0gPSBuZXcgV2Fsa2VyKCk7XG4gICAgICAgICAgICByYWRpdXMxICo9IHNocmluazE7XG4gICAgICAgIH1cbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICB0cmVlMlswXSA9IG5ldyBXYWxrZXIoMCwgMCk7XG4gICAgICAgICAgICAgICAgcmFkaXVzMiAqPSBzaHJpbmsyO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4V2Fsa2VyczI7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB3YWxrZXJzMltpXSA9IG5ldyBXYWxrZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgcmFkaXVzMiAqPSBzaHJpbmsyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAqL1xuICAgIH1cbiAgICBwLmRyYXcgPSAoKSA9PiB7XG4gICAgICAgIHAuY2FtZXJhKC0xMDAsIC0xMDAsIDQwMCAtIHAuZnJhbWVDb3VudCAvIDgwLCAwLCAwLCAwLCAwLCAxLCAwKTtcbiAgICAgICAgcC5iYWNrZ3JvdW5kKDApO1xuICAgICAgICAvL3AucG9pbnRMaWdodCgxNTAsIDE1MCwgMTUwLCA1MDAsIDAsIDIwMCk7XG4gICAgICAgIC8vcC5kaXJlY3Rpb25hbExpZ2h0KDI1NSwyNTUsMjU1LCAwLCAxLCAwKTtcbiAgICAgICAgLy9wLmFtYmllbnRMaWdodCgxMDApO1xuICAgICAgICBwLnNtb290aCgpO1xuICAgICAgICAvL3Aucm90YXRlWShwLmZyYW1lQ291bnQvMTAwKTtcbiAgICAgICAgcC5yb3RhdGVaKHAuZnJhbWVDb3VudCAvIDYwMCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJlZTEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRyZWUxW2ldLnNob3coKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdhbGtlcnMxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB3YWxrZXJzMVtpXS5zaG93KCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBpdGVyYXRpb25zMTsgbisrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gd2Fsa2VyczEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICB3YWxrZXJzMVtpXS53YWxrKCk7XG4gICAgICAgICAgICAgICAgaWYgKHdhbGtlcnMxW2ldLmNoZWNrU3R1Y2sodHJlZTEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhbGtlcnMxW2ldLnNldEh1ZShodSAlIDM2MCk7XG4gICAgICAgICAgICAgICAgICAgIGh1ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgIHRyZWUxLnB1c2god2Fsa2VyczFbaV0pO1xuICAgICAgICAgICAgICAgICAgICB3YWxrZXJzMS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciByID0gd2Fsa2VyczFbd2Fsa2VyczEubGVuZ3RoIC0gMV0ucjtcbiAgICAgICAgd2hpbGUgKHdhbGtlcnMxLmxlbmd0aCA8IG1heFdhbGtlcnMxICYmIHJhZGl1czEgPiAxKSB7XG4gICAgICAgICAgICByYWRpdXMxICo9IHNocmluazE7XG4gICAgICAgICAgICB3YWxrZXJzMS5wdXNoKG5ldyBXYWxrZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcC5maWxsKDI1NSk7XG4gICAgICAgIHAuc3BoZXJlKDYpO1xuICAgICAgICAvL3Aucm90YXRlWChwLkhBTEZfUEkpO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJlZTIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdHJlZTJbaV0uc2hvdygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdhbGtlcnMyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhbGtlcnMyW2ldLnNob3coKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBpdGVyYXRpb25zMjsgbisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB3YWxrZXJzMi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2Fsa2VyczJbaV0ud2FsaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhbGtlcnMyW2ldLmNoZWNrU3R1Y2sodHJlZTIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fsa2VyczJbaV0uc2V0SHVlKGh1ICUgMzYwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodSArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUyLnB1c2god2Fsa2VyczJbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtlcnMyLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByID0gd2Fsa2VyczJbd2Fsa2VyczIubGVuZ3RoIC0gMV0ucjtcbiAgICAgICAgICAgICAgICB3aGlsZSAod2Fsa2VyczIubGVuZ3RoIDwgbWF4V2Fsa2VyczIgJiYgcmFkaXVzMiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmFkaXVzMiAqPSBzaHJpbmsyO1xuICAgICAgICAgICAgICAgICAgICB3YWxrZXJzMi5wdXNoKG5ldyBXYWxrZXIoKSk7XG4gICAgICAgICAgICAgICAgfSAqL1xuICAgIH1cblxuICAgIHAua2V5UHJlc3NlZCA9ICgpID0+IHtcbiAgICAgICAgaWYocC5rZXkgPT0gJ20nKSB7XG4gICAgICAgICAgICBwLnNhdmUoRGF0ZS5ub3coKSArIFwiLmpwZ1wiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHAubW91c2VQcmVzc2VkID0gKCkgPT4ge1xuICAgICAgICBTdGFydEF1ZGlvQ29udGV4dChUb25lLmNvbnRleHQpLnRoZW4oZnVuY3Rpb24oKXt9KTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBza2V0Y2g7XG5uZXcgcDUoc2tldGNoKTsiLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSwgZXZhbCkoXCJ0aGlzXCIpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/Day-25-Entropy/package-lock.json b/Day-25-Entropy/package-lock.json index f09a1a4..d2a2255 100644 --- a/Day-25-Entropy/package-lock.json +++ b/Day-25-Entropy/package-lock.json @@ -29,8 +29,8 @@ "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", "requires": { - "@protobufjs/aspromise": "1.1.2", - "@protobufjs/inquire": "1.1.0" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, "@protobufjs/float": { @@ -73,8 +73,8 @@ "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-0.6.6.tgz", "integrity": "sha512-zDpDY6hyoXw6yEHd8CZrs7VL1Kl/kFhW5JcJWC7h2xqsMxk09v7OSNa4YQfJWJQeCXVStjK9VOqLSkwTETwPrw==", "requires": { - "@types/long": "3.0.32", - "protobufjs": "6.8.8" + "@types/long": "~3.0.32", + "protobufjs": "~6.8.6" } }, "@tensorflow/tfjs-core": { @@ -192,7 +192,7 @@ "integrity": "sha512-HRcWcY+YWt4+s/CvQn+vnSPfRaD4KkuzQFt5MNaELXXHSjelHlSEA8ZcqT69q0GTIuLWZ6JaoKar4yWHVpZHsQ==", "dev": true, "requires": { - "@xtuc/ieee754": "1.2.0" + "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { @@ -308,7 +308,7 @@ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "2.1.21", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -324,7 +324,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "5.7.3" + "acorn": "^5.0.0" } }, "ajv": { @@ -333,10 +333,10 @@ "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", "dev": true, "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-errors": { @@ -375,7 +375,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.3" + "color-convert": "^1.9.0" } }, "anymatch": { @@ -384,8 +384,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "aproba": { @@ -424,7 +424,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -445,9 +445,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -512,13 +512,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -527,7 +527,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -536,7 +536,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -545,7 +545,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -554,9 +554,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -604,15 +604,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", + "depd": "~1.1.2", + "http-errors": "~1.6.3", "iconv-lite": "0.4.23", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.2", "raw-body": "2.3.3", - "type-is": "1.6.16" + "type-is": "~1.6.16" } }, "bonjour": { @@ -621,12 +621,12 @@ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "array-flatten": "2.1.1", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, "brace-expansion": { @@ -635,7 +635,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -645,16 +645,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -663,7 +663,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -680,12 +680,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -694,9 +694,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -705,10 +705,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -717,8 +717,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -727,13 +727,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.1", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -742,7 +742,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "buffer": { @@ -751,9 +751,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-from": { @@ -792,19 +792,19 @@ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { - "bluebird": "3.5.2", - "chownr": "1.1.1", - "glob": "7.1.3", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.3", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.3.0", - "unique-filename": "1.1.1", - "y18n": "4.0.0" + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" } }, "cache-base": { @@ -813,15 +813,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "camelcase": { @@ -836,9 +836,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chokidar": { @@ -847,19 +847,19 @@ "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.4", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "lodash.debounce": "4.0.8", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.1.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, "chownr": { @@ -874,7 +874,7 @@ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", "dev": true, "requires": { - "tslib": "1.9.3" + "tslib": "^1.9.0" } }, "cipher-base": { @@ -883,8 +883,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "class-utils": { @@ -893,10 +893,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -905,7 +905,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -916,9 +916,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "code-point-at": { @@ -933,8 +933,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { @@ -976,7 +976,7 @@ "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", "dev": true, "requires": { - "mime-db": "1.37.0" + "mime-db": ">= 1.36.0 < 2" } }, "compression": { @@ -985,13 +985,13 @@ "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "2.0.15", + "compressible": "~2.0.14", "debug": "2.6.9", - "on-headers": "1.0.1", + "on-headers": "~1.0.1", "safe-buffer": "5.1.2", - "vary": "1.1.2" + "vary": "~1.1.2" } }, "concat-map": { @@ -1006,10 +1006,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "connect-history-api-fallback": { @@ -1024,7 +1024,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -1063,12 +1063,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -1089,8 +1089,8 @@ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -1099,11 +1099,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -1112,12 +1112,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -1126,11 +1126,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { @@ -1139,17 +1139,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.17", - "public-encrypt": "4.0.3", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "cyclist": { @@ -1200,8 +1200,8 @@ "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", "dev": true, "requires": { - "execa": "0.10.0", - "ip-regex": "2.1.0" + "execa": "^0.10.0", + "ip-regex": "^2.1.0" } }, "define-property": { @@ -1210,8 +1210,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -1220,7 +1220,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1229,7 +1229,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1238,9 +1238,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1251,12 +1251,12 @@ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" } }, "depd": { @@ -1271,8 +1271,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "destroy": { @@ -1293,9 +1293,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "dns-equal": { @@ -1310,8 +1310,8 @@ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "dev": true, "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.2" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, "dns-txt": { @@ -1320,7 +1320,7 @@ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { - "buffer-indexof": "1.1.1" + "buffer-indexof": "^1.0.0" } }, "domain-browser": { @@ -1335,10 +1335,10 @@ "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "ee-first": { @@ -1353,13 +1353,13 @@ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.5", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -1380,7 +1380,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "enhanced-resolve": { @@ -1389,9 +1389,9 @@ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.1.0" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "errno": { @@ -1400,7 +1400,7 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "escape-html": { @@ -1421,8 +1421,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "esrecurse": { @@ -1431,7 +1431,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -1464,7 +1464,7 @@ "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "original": "1.0.2" + "original": "^1.0.0" } }, "evp_bytestokey": { @@ -1473,8 +1473,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -1483,13 +1483,13 @@ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "6.0.5", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "expand-brackets": { @@ -1498,13 +1498,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1513,7 +1513,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -1522,7 +1522,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1533,36 +1533,36 @@ "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.3", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", + "proxy-addr": "~2.0.4", "qs": "6.5.2", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.2", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "array-flatten": { @@ -1579,8 +1579,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -1589,7 +1589,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -1600,14 +1600,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1616,7 +1616,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -1625,7 +1625,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -1634,7 +1634,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1643,7 +1643,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1652,9 +1652,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1677,7 +1677,7 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "fill-range": { @@ -1686,10 +1686,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -1698,7 +1698,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1710,12 +1710,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" } }, "find-cache-dir": { @@ -1724,9 +1724,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { @@ -1735,7 +1735,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "flush-write-stream": { @@ -1744,8 +1744,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "follow-redirects": { @@ -1754,7 +1754,7 @@ "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==", "dev": true, "requires": { - "debug": "3.1.0" + "debug": "=3.1.0" }, "dependencies": { "debug": { @@ -1786,7 +1786,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -1801,8 +1801,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-write-stream-atomic": { @@ -1811,10 +1811,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -1830,8 +1830,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.11.1", - "node-pre-gyp": "0.10.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -1857,8 +1857,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -1871,7 +1871,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1935,7 +1935,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -1950,14 +1950,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -1966,12 +1966,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -1986,7 +1986,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { @@ -1995,7 +1995,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -2004,8 +2004,8 @@ "dev": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2024,7 +2024,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -2038,7 +2038,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -2051,8 +2051,8 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, "minizlib": { @@ -2061,7 +2061,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -2084,9 +2084,9 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -2095,16 +2095,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -2113,8 +2113,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -2129,8 +2129,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -2139,10 +2139,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -2161,7 +2161,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -2182,8 +2182,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -2204,10 +2204,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -2224,13 +2224,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -2239,7 +2239,7 @@ "dev": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -2282,9 +2282,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -2293,7 +2293,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -2301,7 +2301,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -2316,13 +2316,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -2337,7 +2337,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -2376,12 +2376,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { @@ -2390,8 +2390,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -2400,7 +2400,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -2417,11 +2417,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.3", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "pify": { @@ -2461,9 +2461,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -2472,8 +2472,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -2482,7 +2482,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2493,8 +2493,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { @@ -2503,8 +2503,8 @@ "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "hmac-drbg": { @@ -2513,9 +2513,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.5", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hpack.js": { @@ -2524,10 +2524,10 @@ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { - "inherits": "2.0.3", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "wbuf": "1.7.3" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, "html-entities": { @@ -2548,10 +2548,10 @@ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.4.0" + "statuses": ">= 1.4.0 < 2" } }, "http-parser-js": { @@ -2566,9 +2566,9 @@ "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "dev": true, "requires": { - "eventemitter3": "3.1.0", - "follow-redirects": "1.5.9", - "requires-port": "1.0.0" + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, "http-proxy-middleware": { @@ -2577,10 +2577,10 @@ "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", "dev": true, "requires": { - "http-proxy": "1.17.0", - "is-glob": "4.0.0", - "lodash": "4.17.11", - "micromatch": "3.1.10" + "http-proxy": "^1.16.2", + "is-glob": "^4.0.0", + "lodash": "^4.17.5", + "micromatch": "^3.1.9" } }, "https-browserify": { @@ -2595,7 +2595,7 @@ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { @@ -2616,8 +2616,8 @@ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "3.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" }, "dependencies": { "find-up": { @@ -2626,7 +2626,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -2635,8 +2635,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -2645,7 +2645,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -2654,7 +2654,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.0.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -2669,7 +2669,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "3.0.0" + "find-up": "^3.0.0" } } } @@ -2692,8 +2692,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2708,8 +2708,8 @@ "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", "dev": true, "requires": { - "default-gateway": "2.7.2", - "ipaddr.js": "1.8.0" + "default-gateway": "^2.6.0", + "ipaddr.js": "^1.5.2" } }, "interpret": { @@ -2748,7 +2748,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2757,7 +2757,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2768,7 +2768,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.12.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -2783,7 +2783,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2792,7 +2792,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2803,9 +2803,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -2840,7 +2840,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -2849,7 +2849,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2858,7 +2858,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2875,7 +2875,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -2884,7 +2884,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-object": { @@ -2893,7 +2893,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-stream": { @@ -2974,7 +2974,7 @@ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "2.0.0" + "invert-kv": "^2.0.0" } }, "loader-runner": { @@ -2989,9 +2989,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -3000,8 +3000,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -3032,8 +3032,8 @@ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "make-dir": { @@ -3042,7 +3042,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "map-age-cleaner": { @@ -3051,7 +3051,7 @@ "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", "dev": true, "requires": { - "p-defer": "1.0.0" + "p-defer": "^1.0.0" } }, "map-cache": { @@ -3066,7 +3066,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "md5.js": { @@ -3075,9 +3075,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "media-typer": { @@ -3092,9 +3092,9 @@ "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "dev": true, "requires": { - "map-age-cleaner": "0.1.2", - "mimic-fn": "1.2.0", - "p-is-promise": "1.1.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" } }, "memory-fs": { @@ -3103,8 +3103,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "merge-descriptors": { @@ -3125,19 +3125,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "miller-rabin": { @@ -3146,8 +3146,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { @@ -3168,7 +3168,7 @@ "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "dev": true, "requires": { - "mime-db": "1.37.0" + "mime-db": "~1.37.0" } }, "mimic-fn": { @@ -3195,7 +3195,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3210,16 +3210,16 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.1", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.3" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -3228,8 +3228,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -3238,7 +3238,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -3258,12 +3258,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -3278,8 +3278,8 @@ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "dns-packet": "1.3.1", - "thunky": "1.0.3" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, "multicast-dns-service-types": { @@ -3301,17 +3301,17 @@ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "negotiator": { @@ -3344,28 +3344,28 @@ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.4", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" }, "dependencies": { @@ -3383,7 +3383,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "npm-run-path": { @@ -3392,7 +3392,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { @@ -3413,9 +3413,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -3424,7 +3424,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -3433,7 +3433,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3444,7 +3444,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.pick": { @@ -3453,7 +3453,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "obuf": { @@ -3483,7 +3483,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "opn": { @@ -3492,7 +3492,7 @@ "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", "dev": true, "requires": { - "is-wsl": "1.1.0" + "is-wsl": "^1.1.0" } }, "original": { @@ -3501,7 +3501,7 @@ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "requires": { - "url-parse": "1.4.3" + "url-parse": "^1.4.3" } }, "os-browserify": { @@ -3516,9 +3516,9 @@ "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", "dev": true, "requires": { - "execa": "0.10.0", - "lcid": "2.0.0", - "mem": "4.0.0" + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "p-defer": { @@ -3545,7 +3545,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -3554,7 +3554,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.3.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -3586,9 +3586,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "parse-asn1": { @@ -3597,11 +3597,11 @@ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.17" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parseurl": { @@ -3664,11 +3664,11 @@ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "pify": { @@ -3689,7 +3689,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -3698,7 +3698,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "portfinder": { @@ -3707,9 +3707,9 @@ "integrity": "sha512-23aeQKW9KgHe6citUrG3r9HjeX6vls0h713TAa+CwTKZwNIr/pD2ApaxYF4Um3ZZyq4ar+Siv3+fhoHaIwSOSw==", "dev": true, "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" } }, "posix-character-classes": { @@ -3741,19 +3741,19 @@ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", "requires": { - "@protobufjs/aspromise": "1.1.2", - "@protobufjs/base64": "1.1.2", - "@protobufjs/codegen": "2.0.4", - "@protobufjs/eventemitter": "1.1.0", - "@protobufjs/fetch": "1.1.0", - "@protobufjs/float": "1.0.2", - "@protobufjs/inquire": "1.1.0", - "@protobufjs/path": "1.1.2", - "@protobufjs/pool": "1.1.0", - "@protobufjs/utf8": "1.1.0", - "@types/long": "4.0.0", - "@types/node": "10.12.6", - "long": "4.0.0" + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" }, "dependencies": { "@types/long": { @@ -3769,7 +3769,7 @@ "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "dev": true, "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.8.0" } }, @@ -3791,12 +3791,12 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pump": { @@ -3805,8 +3805,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -3815,9 +3815,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "3.6.1", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, "punycode": { @@ -3856,7 +3856,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -3865,8 +3865,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -3893,13 +3893,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -3908,9 +3908,9 @@ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "micromatch": "3.1.10", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "regex-not": { @@ -3919,8 +3919,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "remove-trailing-separator": { @@ -3965,7 +3965,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "resolve-from": { @@ -3992,7 +3992,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.3" + "glob": "^7.0.5" } }, "ripemd160": { @@ -4001,8 +4001,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-queue": { @@ -4011,7 +4011,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "safe-buffer": { @@ -4026,7 +4026,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "safer-buffer": { @@ -4041,8 +4041,8 @@ "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "dev": true, "requires": { - "ajv": "6.5.4", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, "seedrandom": { @@ -4078,18 +4078,18 @@ "dev": true, "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" } }, "serialize-javascript": { @@ -4104,13 +4104,13 @@ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.21", - "parseurl": "1.3.2" + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" } }, "serve-static": { @@ -4119,9 +4119,9 @@ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.2" } }, @@ -4137,10 +4137,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -4149,7 +4149,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -4172,8 +4172,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shebang-command": { @@ -4182,7 +4182,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -4203,14 +4203,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -4219,7 +4219,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -4228,7 +4228,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -4239,9 +4239,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -4250,7 +4250,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -4259,7 +4259,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -4268,7 +4268,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -4277,9 +4277,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -4290,7 +4290,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -4299,7 +4299,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4310,8 +4310,8 @@ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", "dev": true, "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.3.2" + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" } }, "sockjs-client": { @@ -4320,12 +4320,12 @@ "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "dev": true, "requires": { - "debug": "3.2.6", - "eventsource": "1.0.7", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.4.3" + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" }, "dependencies": { "debug": { @@ -4334,7 +4334,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "faye-websocket": { @@ -4343,7 +4343,7 @@ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "ms": { @@ -4372,11 +4372,11 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { @@ -4391,12 +4391,12 @@ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", "dev": true, "requires": { - "debug": "2.6.9", - "handle-thing": "1.2.5", - "http-deceiver": "1.2.7", - "safe-buffer": "5.1.2", - "select-hose": "2.0.0", - "spdy-transport": "2.1.0" + "debug": "^2.6.8", + "handle-thing": "^1.2.5", + "http-deceiver": "^1.2.7", + "safe-buffer": "^5.0.1", + "select-hose": "^2.0.0", + "spdy-transport": "^2.0.18" } }, "spdy-transport": { @@ -4405,13 +4405,13 @@ "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", "dev": true, "requires": { - "debug": "2.6.9", - "detect-node": "2.0.4", - "hpack.js": "2.1.6", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2", - "wbuf": "1.7.3" + "debug": "^2.6.8", + "detect-node": "^2.0.3", + "hpack.js": "^2.1.6", + "obuf": "^1.1.1", + "readable-stream": "^2.2.9", + "safe-buffer": "^5.0.1", + "wbuf": "^1.7.2" } }, "split-string": { @@ -4420,7 +4420,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "ssri": { @@ -4429,17 +4429,22 @@ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.1" } }, + "startaudiocontext": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/startaudiocontext/-/startaudiocontext-1.2.1.tgz", + "integrity": "sha1-RtLKtUYseRGArMciPju7wycshZU=" + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -4448,7 +4453,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -4465,8 +4470,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-each": { @@ -4475,8 +4480,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { @@ -4485,11 +4490,11 @@ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -4504,8 +4509,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string_decoder": { @@ -4514,7 +4519,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -4523,7 +4528,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "strip-eof": { @@ -4538,7 +4543,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "tapable": { @@ -4552,8 +4557,8 @@ "resolved": "https://registry.npmjs.org/tensorjs/-/tensorjs-0.2.0.tgz", "integrity": "sha1-zjSJN6Cj+j6M6IW7S0ErUFT5abs=", "requires": { - "google-protobuf": "3.6.1", - "lodash": "4.17.11" + "google-protobuf": "^3.2.0-rc.2", + "lodash": "^4.17.4" } }, "tfjs": { @@ -4561,7 +4566,7 @@ "resolved": "https://registry.npmjs.org/tfjs/-/tfjs-0.6.0.tgz", "integrity": "sha1-Nw7l0hEvVz5ju7cM01C5BnfhGcw=", "requires": { - "tensorjs": "0.2.0" + "tensorjs": "^0.2.0" } }, "through2": { @@ -4570,8 +4575,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "thunky": { @@ -4586,7 +4591,7 @@ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "to-arraybuffer": { @@ -4601,7 +4606,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4610,7 +4615,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4621,10 +4626,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -4633,8 +4638,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "tone": { @@ -4661,7 +4666,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.21" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -4676,8 +4681,8 @@ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "dev": true, "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" + "commander": "~2.13.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -4694,14 +4699,14 @@ "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", "dev": true, "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.7", - "serialize-javascript": "1.5.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.3.0", - "worker-farm": "1.6.0" + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { "source-map": { @@ -4718,10 +4723,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -4730,7 +4735,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -4739,10 +4744,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -4753,7 +4758,7 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "2.0.1" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -4762,7 +4767,7 @@ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "unpipe": { @@ -4777,8 +4782,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -4787,9 +4792,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -4823,7 +4828,7 @@ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "urix": { @@ -4856,8 +4861,8 @@ "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==", "dev": true, "requires": { - "querystringify": "2.1.0", - "requires-port": "1.0.0" + "querystringify": "^2.0.0", + "requires-port": "^1.0.0" } }, "use": { @@ -4920,9 +4925,9 @@ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "dev": true, "requires": { - "chokidar": "2.0.4", - "graceful-fs": "4.1.11", - "neo-async": "2.6.0" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" } }, "wbuf": { @@ -4931,7 +4936,7 @@ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { - "minimalistic-assert": "1.0.1" + "minimalistic-assert": "^1.0.0" } }, "webpack": { @@ -4944,26 +4949,26 @@ "@webassemblyjs/helper-module-context": "1.7.10", "@webassemblyjs/wasm-edit": "1.7.10", "@webassemblyjs/wasm-parser": "1.7.10", - "acorn": "5.7.3", - "acorn-dynamic-import": "3.0.0", - "ajv": "6.5.4", - "ajv-keywords": "3.2.0", - "chrome-trace-event": "1.0.0", - "enhanced-resolve": "4.1.0", - "eslint-scope": "4.0.0", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.3.1", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "neo-async": "2.6.0", - "node-libs-browser": "2.1.0", - "schema-utils": "0.4.7", - "tapable": "1.1.0", - "uglifyjs-webpack-plugin": "1.3.0", - "watchpack": "1.6.0", - "webpack-sources": "1.3.0" + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.1.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" } }, "webpack-cli": { @@ -4972,16 +4977,16 @@ "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", "dev": true, "requires": { - "chalk": "2.4.1", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "global-modules-path": "2.3.0", - "import-local": "2.0.0", - "interpret": "1.1.0", - "loader-utils": "1.1.0", - "supports-color": "5.5.0", - "v8-compile-cache": "2.0.2", - "yargs": "12.0.2" + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.0", + "global-modules-path": "^2.3.0", + "import-local": "^2.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.2" } }, "webpack-dev-middleware": { @@ -4990,10 +4995,10 @@ "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", "dev": true, "requires": { - "memory-fs": "0.4.1", - "mime": "2.3.1", - "range-parser": "1.2.0", - "webpack-log": "2.0.0" + "memory-fs": "~0.4.1", + "mime": "^2.3.1", + "range-parser": "^1.0.3", + "webpack-log": "^2.0.0" }, "dependencies": { "mime": { @@ -5011,32 +5016,32 @@ "dev": true, "requires": { "ansi-html": "0.0.7", - "bonjour": "3.5.0", - "chokidar": "2.0.4", - "compression": "1.7.3", - "connect-history-api-fallback": "1.5.0", - "debug": "3.2.6", - "del": "3.0.0", - "express": "4.16.4", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.18.0", - "import-local": "2.0.0", - "internal-ip": "3.0.1", - "ip": "1.1.5", - "killable": "1.0.1", - "loglevel": "1.6.1", - "opn": "5.4.0", - "portfinder": "1.0.19", - "schema-utils": "1.0.0", - "selfsigned": "1.10.4", - "serve-index": "1.9.1", + "bonjour": "^3.5.0", + "chokidar": "^2.0.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "~0.18.0", + "import-local": "^2.0.0", + "internal-ip": "^3.0.1", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "schema-utils": "^1.0.0", + "selfsigned": "^1.9.1", + "serve-index": "^1.7.2", "sockjs": "0.3.19", "sockjs-client": "1.3.0", - "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "5.5.0", + "spdy": "^3.4.1", + "strip-ansi": "^3.0.0", + "supports-color": "^5.1.0", "webpack-dev-middleware": "3.4.0", - "webpack-log": "2.0.0", + "webpack-log": "^2.0.0", "yargs": "12.0.2" }, "dependencies": { @@ -5052,7 +5057,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "ms": { @@ -5067,9 +5072,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.5.4", - "ajv-errors": "1.0.0", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, "strip-ansi": { @@ -5078,7 +5083,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -5089,8 +5094,8 @@ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "ansi-colors": "3.2.1", - "uuid": "3.3.2" + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" } }, "webpack-sources": { @@ -5099,8 +5104,8 @@ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { - "source-list-map": "2.0.1", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -5117,8 +5122,8 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": "0.5.0", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -5133,7 +5138,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -5148,7 +5153,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -5157,8 +5162,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -5173,7 +5178,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -5182,9 +5187,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -5193,7 +5198,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -5234,18 +5239,18 @@ "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "2.0.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "10.1.0" + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" }, "dependencies": { "find-up": { @@ -5254,7 +5259,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -5263,8 +5268,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -5273,7 +5278,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -5282,7 +5287,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.0.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -5299,7 +5304,7 @@ "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } diff --git a/Day-25-Entropy/package.json b/Day-25-Entropy/package.json index 693e879..f0c01cf 100644 --- a/Day-25-Entropy/package.json +++ b/Day-25-Entropy/package.json @@ -19,6 +19,7 @@ "dependencies": { "@tensorflow/tfjs": "^0.13.4", "p5": "^0.7.2", + "startaudiocontext": "^1.2.1", "tfjs": "^0.6.0", "tone": "^0.12.80" } diff --git a/Day-25-Entropy/src/index.js b/Day-25-Entropy/src/index.js index f61d7da..16af37e 100644 --- a/Day-25-Entropy/src/index.js +++ b/Day-25-Entropy/src/index.js @@ -1,5 +1,7 @@ import p5 from 'p5/lib/p5.min'; import Tone from 'tone'; +import StartAudioContext from 'startaudiocontext'; + const sketch = (p) => { var noise = new Tone.Noise("pink").start(); noise.volume.value = -20; @@ -214,6 +216,10 @@ const sketch = (p) => { p.save(Date.now() + ".jpg"); } } + + p.mousePressed = () => { + StartAudioContext(Tone.context).then(function(){}); + } } export default sketch; new p5(sketch); \ No newline at end of file